From 165d3d66c08d4a84a3fc3dc9598c331e2bed9253 Mon Sep 17 00:00:00 2001 From: Masaaki Goshima Date: Thu, 17 Oct 2024 18:41:49 +0900 Subject: [PATCH 1/4] support wasm based bindings --- .github/workflows/go.yml | 4 +- .gitignore | 5 + Makefile | 33 + README.md | 99 +- _examples/rw.go | 35 +- _examples/simple.go | 18 +- alias.go | 349 + buf.gen.yaml | 6 + buf.work.yaml | 4 + cdt/cdt.go | 258 +- cgraph/cgraph.go | 1560 +- cgraph/init.go | 60 + cgraph/link.go | 20 + cmd/dot/dot.go | 19 +- cmd/dot/go.mod | 20 + cmd/dot/go.sum | 20 + compatible_test.go | 84 +- go.mod | 12 +- go.sum | 12 +- graphviz.go | 73 +- graphviz.version | 1 + graphviz_test.go | 171 +- gvc/device_plugin.go | 142 + gvc/gvc.go | 156 +- gvc/image_renderer.go | 177 +- gvc/init.go | 51 + gvc/link.go | 11 + gvc/plugin.go | 36 + gvc/render_plugin.go | 1018 + gvc/renderer.go | 493 - internal/builddate.h | 1 - internal/ccall/ast/align.h | 53 - internal/ccall/ast/ast.h | 108 - internal/ccall/ast/chresc.c | 138 - internal/ccall/ast/chrtoi.c | 43 - internal/ccall/ast/compat_unistd.h | 48 - internal/ccall/ast/dummy.go | 4 - internal/ccall/ast/error.c | 109 - internal/ccall/ast/error.h | 73 - internal/ccall/ast/fmtbuf.c | 39 - internal/ccall/ast/fmtesc.c | 175 - internal/ccall/ast/hashkey.h | 61 - internal/ccall/ast/pathaccess.c | 77 - internal/ccall/ast/pathbin.c | 34 - internal/ccall/ast/pathcanon.c | 204 - internal/ccall/ast/pathcat.c | 43 - internal/ccall/ast/pathexists.c | 115 - internal/ccall/ast/pathfind.c | 114 - internal/ccall/ast/pathgetlink.c | 98 - internal/ccall/ast/pathpath.c | 121 - internal/ccall/ast/sfstr.h | 62 - internal/ccall/ast/strcopy.c | 27 - internal/ccall/ast/strerror.c | 30 - internal/ccall/ast/stresc.c | 44 - internal/ccall/ast/strmatch.c | 796 - internal/ccall/ast/strton.c | 219 - internal/ccall/build_cgo_hack.go | 69 - internal/ccall/builtin.c | 277 - internal/ccall/ccall.go | 275 - internal/ccall/cdt.c | 17 - internal/ccall/cdt.go | 594 - internal/ccall/cdt/cdt.h | 293 - internal/ccall/cdt/dtclose.c | 43 - internal/ccall/cdt/dtdisc.c | 93 - internal/ccall/cdt/dtextract.c | 29 - internal/ccall/cdt/dtflatten.c | 49 - internal/ccall/cdt/dthash.c | 335 - internal/ccall/cdt/dthdr.h | 53 - internal/ccall/cdt/dtlist.c | 185 - internal/ccall/cdt/dtmethod.c | 80 - internal/ccall/cdt/dtopen.c | 82 - internal/ccall/cdt/dtrenew.c | 52 - internal/ccall/cdt/dtrestore.c | 61 - internal/ccall/cdt/dtsize.c | 30 - internal/ccall/cdt/dtstat.c | 89 - internal/ccall/cdt/dtstrhash.c | 33 - internal/ccall/cdt/dttree.c | 363 - internal/ccall/cdt/dttreeset.c | 49 - internal/ccall/cdt/dtview.c | 121 - internal/ccall/cdt/dtwalk.c | 24 - internal/ccall/cdt/dummy.go | 4 - internal/ccall/cgraph.c | 22 - internal/ccall/cgraph.go | 1191 - internal/ccall/cgraph/agerror.c | 185 - internal/ccall/cgraph/agxbuf.c | 112 - internal/ccall/cgraph/agxbuf.h | 103 - internal/ccall/cgraph/apply.c | 88 - internal/ccall/cgraph/attr.c | 564 - internal/ccall/cgraph/cghdr.h | 161 - internal/ccall/cgraph/cgraph.h | 453 - internal/ccall/cgraph/cmpnd.c | 385 - internal/ccall/cgraph/dummy.go | 4 - internal/ccall/cgraph/edge.c | 533 - internal/ccall/cgraph/flatten.c | 60 - internal/ccall/cgraph/grammar.c | 2329 - internal/ccall/cgraph/grammar.h | 112 - internal/ccall/cgraph/grammar.y | 601 - internal/ccall/cgraph/graph.c | 292 - internal/ccall/cgraph/id.c | 172 - internal/ccall/cgraph/imap.c | 219 - internal/ccall/cgraph/io.c | 154 - internal/ccall/cgraph/main.c | 48 - internal/ccall/cgraph/malloc.h | 14 - internal/ccall/cgraph/mem.c | 103 - internal/ccall/cgraph/node.c | 380 - internal/ccall/cgraph/obj.c | 267 - internal/ccall/cgraph/pend.c | 296 - internal/ccall/cgraph/rec.c | 278 - internal/ccall/cgraph/refstr.c | 215 - internal/ccall/cgraph/scan.c | 2197 - internal/ccall/cgraph/scan.l | 294 - internal/ccall/cgraph/subg.c | 96 - internal/ccall/cgraph/tester.c | 48 - internal/ccall/cgraph/utils.c | 101 - internal/ccall/cgraph/write.c | 692 - internal/ccall/cgraph/y.output | 953 - internal/ccall/cgraph/y.tab.c | 2350 - internal/ccall/cgraph/y.tab.h | 112 - internal/ccall/circogen.c | 10 - internal/ccall/circogen/block.c | 116 - internal/ccall/circogen/block.h | 67 - internal/ccall/circogen/blockpath.c | 682 - internal/ccall/circogen/blockpath.h | 34 - internal/ccall/circogen/blocktree.c | 264 - internal/ccall/circogen/blocktree.h | 34 - internal/ccall/circogen/circo.h | 31 - internal/ccall/circogen/circpos.c | 478 - internal/ccall/circogen/circpos.h | 30 - internal/ccall/circogen/circular.c | 186 - internal/ccall/circogen/circular.h | 142 - internal/ccall/circogen/circularinit.c | 279 - internal/ccall/circogen/deglist.c | 162 - internal/ccall/circogen/deglist.h | 41 - internal/ccall/circogen/dummy.go | 4 - internal/ccall/circogen/edgelist.c | 100 - internal/ccall/circogen/edgelist.h | 43 - internal/ccall/circogen/nodelist.c | 368 - internal/ccall/circogen/nodelist.h | 63 - internal/ccall/circogen/nodeset.c | 120 - internal/ccall/circogen/nodeset.h | 45 - internal/ccall/common.c | 103 - internal/ccall/common.go | 163 - internal/ccall/common/args.c | 288 - internal/ccall/common/arith.h | 103 - internal/ccall/common/arrows.c | 764 - internal/ccall/common/brewer_colors | 1726 - internal/ccall/common/brewer_lib | 1689 - internal/ccall/common/chars.tcl | 38 - internal/ccall/common/color.h | 54 - internal/ccall/common/color_lib | 2491 - internal/ccall/common/color_names | 655 - internal/ccall/common/colorprocs.h | 31 - internal/ccall/common/colortbl.h | 2493 - internal/ccall/common/colxlate.c | 567 - internal/ccall/common/const.h | 294 - internal/ccall/common/dummy.go | 4 - internal/ccall/common/ellipse.c | 596 - internal/ccall/common/emit.c | 4257 - internal/ccall/common/entities.h | 277 - internal/ccall/common/entities.html | 682 - internal/ccall/common/entities.tcl | 50 - internal/ccall/common/fontmap.cfg | 255 - internal/ccall/common/geom.c | 423 - internal/ccall/common/geom.h | 88 - internal/ccall/common/geomprocs.h | 272 - internal/ccall/common/globals.c | 33 - internal/ccall/common/globals.h | 144 - internal/ccall/common/htmllex.c | 1060 - internal/ccall/common/htmllex.h | 33 - internal/ccall/common/htmlparse.c | 2556 - internal/ccall/common/htmlparse.h | 170 - internal/ccall/common/htmlparse.y | 639 - internal/ccall/common/htmltable.c | 2139 - internal/ccall/common/htmltable.h | 183 - internal/ccall/common/input.c | 956 - internal/ccall/common/intset.c | 74 - internal/ccall/common/intset.h | 27 - internal/ccall/common/labels.c | 643 - internal/ccall/common/logic.h | 53 - internal/ccall/common/macros.h | 49 - internal/ccall/common/memory.c | 61 - internal/ccall/common/memory.h | 67 - internal/ccall/common/mksvgfonts.pl | 38 - internal/ccall/common/ns.c | 1132 - internal/ccall/common/output.c | 404 - internal/ccall/common/pointset.c | 226 - internal/ccall/common/pointset.h | 61 - internal/ccall/common/postproc.c | 763 - internal/ccall/common/ps_font_equiv.h | 46 - internal/ccall/common/ps_font_equiv.txt | 35 - internal/ccall/common/ps_fontmap.txt | 11 - internal/ccall/common/psusershape.c | 318 - internal/ccall/common/render.h | 173 - internal/ccall/common/routespl.c | 1049 - internal/ccall/common/shapes.c | 4223 - internal/ccall/common/splines.c | 1491 - internal/ccall/common/strcasecmp.c | 32 - internal/ccall/common/strncasecmp.c | 36 - internal/ccall/common/svgcolor_lib | 147 - internal/ccall/common/svgcolor_names | 154 - internal/ccall/common/taper.c | 451 - internal/ccall/common/textspan.c | 289 - internal/ccall/common/textspan.h | 71 - internal/ccall/common/timing.c | 58 - internal/ccall/common/types.h | 576 - internal/ccall/common/usershape.h | 57 - internal/ccall/common/utils.c | 2054 - internal/ccall/common/utils.h | 132 - internal/ccall/common/y.output | 1742 - internal/ccall/common/y.tab.c | 2556 - internal/ccall/common/y.tab.h | 170 - internal/ccall/dotgen.c | 16 - internal/ccall/dotgen/acyclic.c | 70 - internal/ccall/dotgen/aspect.c | 2007 - internal/ccall/dotgen/aspect.h | 35 - internal/ccall/dotgen/class1.c | 123 - internal/ccall/dotgen/class2.c | 307 - internal/ccall/dotgen/cluster.c | 442 - internal/ccall/dotgen/compound.c | 505 - internal/ccall/dotgen/conc.c | 243 - internal/ccall/dotgen/decomp.c | 225 - internal/ccall/dotgen/dot.h | 21 - internal/ccall/dotgen/dotinit.c | 517 - internal/ccall/dotgen/dotprocs.h | 90 - internal/ccall/dotgen/dotsplines.c | 2564 - internal/ccall/dotgen/dummy.go | 4 - internal/ccall/dotgen/fastgr.c | 384 - internal/ccall/dotgen/flat.c | 339 - internal/ccall/dotgen/mincross.c | 2018 - internal/ccall/dotgen/position.c | 1262 - internal/ccall/dotgen/rank.c | 1238 - internal/ccall/dotgen/sameport.c | 259 - internal/ccall/edgepaint/dummy.go | 4 - .../ccall/edgepaint/edge_distinct_coloring.c | 318 - .../ccall/edgepaint/edge_distinct_coloring.h | 16 - internal/ccall/edgepaint/furtherest_point.c | 295 - internal/ccall/edgepaint/furtherest_point.h | 18 - internal/ccall/edgepaint/intersection.c | 180 - internal/ccall/edgepaint/intersection.h | 16 - internal/ccall/edgepaint/lab.c | 443 - internal/ccall/edgepaint/lab.h | 46 - internal/ccall/edgepaint/lab_gamut.c | 826830 --------------- internal/ccall/edgepaint/lab_gamut.h | 37 - .../ccall/edgepaint/node_distinct_coloring.c | 318 - .../ccall/edgepaint/node_distinct_coloring.h | 18 - internal/ccall/expat.c | 5 - internal/ccall/expat.go | 6 - internal/ccall/expr/dummy.go | 4 - internal/ccall/expr/excc.c | 743 - internal/ccall/expr/excontext.c | 68 - internal/ccall/expr/exdata.c | 73 - internal/ccall/expr/exerror.c | 74 - internal/ccall/expr/exeval.c | 1953 - internal/ccall/expr/exexpr.c | 43 - internal/ccall/expr/exgram.h | 1151 - internal/ccall/expr/exlexname.c | 51 - internal/ccall/expr/exlib.h | 196 - internal/ccall/expr/exnospace.c | 33 - internal/ccall/expr/exop.h | 80 - internal/ccall/expr/exopen.c | 70 - internal/ccall/expr/exparse.c | 3729 - internal/ccall/expr/exparse.h | 257 - internal/ccall/expr/exparse.y | 1293 - internal/ccall/expr/expr.h | 339 - internal/ccall/expr/exrewind.c | 59 - internal/ccall/expr/exstash.c | 33 - internal/ccall/expr/extoken.c | 891 - internal/ccall/expr/extype.c | 43 - internal/ccall/expr/exzero.c | 46 - internal/ccall/expr/y.output | 6876 - internal/ccall/expr/y.tab.c | 3729 - internal/ccall/expr/y.tab.h | 254 - internal/ccall/fdpgen.c | 8 - internal/ccall/fdpgen/clusteredges.c | 319 - internal/ccall/fdpgen/clusteredges.h | 30 - internal/ccall/fdpgen/comp.c | 138 - internal/ccall/fdpgen/comp.h | 29 - internal/ccall/fdpgen/dbg.c | 481 - internal/ccall/fdpgen/dbg.h | 44 - internal/ccall/fdpgen/dummy.go | 4 - internal/ccall/fdpgen/fdp.h | 139 - internal/ccall/fdpgen/fdpinit.c | 157 - internal/ccall/fdpgen/grid.c | 274 - internal/ccall/fdpgen/grid.h | 56 - internal/ccall/fdpgen/layout.c | 1143 - internal/ccall/fdpgen/tlayout.c | 703 - internal/ccall/fdpgen/tlayout.h | 35 - internal/ccall/fdpgen/xlayout.c | 562 - internal/ccall/fdpgen/xlayout.h | 37 - internal/ccall/glcomp/dummy.go | 4 - internal/ccall/glcomp/glcompbutton.c | 235 - internal/ccall/glcomp/glcompbutton.h | 46 - internal/ccall/glcomp/glcompdefs.h | 398 - internal/ccall/glcomp/glcompfont.c | 527 - internal/ccall/glcomp/glcompfont.h | 56 - internal/ccall/glcomp/glcompimage.c | 203 - internal/ccall/glcomp/glcompimage.h | 47 - internal/ccall/glcomp/glcomplabel.c | 144 - internal/ccall/glcomp/glcomplabel.h | 49 - internal/ccall/glcomp/glcompmouse.c | 83 - internal/ccall/glcomp/glcompmouse.h | 41 - internal/ccall/glcomp/glcomppanel.c | 177 - internal/ccall/glcomp/glcomppanel.h | 48 - internal/ccall/glcomp/glcompset.c | 412 - internal/ccall/glcomp/glcompset.h | 56 - internal/ccall/glcomp/glcomptextpng.c | 149 - internal/ccall/glcomp/glcomptextpng.h | 14 - internal/ccall/glcomp/glcomptexture.c | 171 - internal/ccall/glcomp/glcomptexture.h | 45 - internal/ccall/glcomp/glpangofont.c | 199 - internal/ccall/glcomp/glpangofont.h | 36 - internal/ccall/glcomp/glutils.c | 743 - internal/ccall/glcomp/glutils.h | 69 - internal/ccall/gvc.c | 13 - internal/ccall/gvc.go | 801 - internal/ccall/gvc/dummy.go | 4 - internal/ccall/gvc/gvc.c | 256 - internal/ccall/gvc/gvc.h | 127 - internal/ccall/gvc/gvcext.h | 96 - internal/ccall/gvc/gvcint.h | 158 - internal/ccall/gvc/gvcjob.h | 377 - internal/ccall/gvc/gvcommon.h | 40 - internal/ccall/gvc/gvconfig.c | 625 - internal/ccall/gvc/gvconfig.h | 30 - internal/ccall/gvc/gvcontext.c | 130 - internal/ccall/gvc/gvcproc.h | 132 - internal/ccall/gvc/gvdevice.c | 563 - internal/ccall/gvc/gvevent.c | 673 - internal/ccall/gvc/gvio.h | 55 - internal/ccall/gvc/gvjobs.c | 153 - internal/ccall/gvc/gvlayout.c | 117 - internal/ccall/gvc/gvloadimage.c | 66 - internal/ccall/gvc/gvplugin.c | 792 - internal/ccall/gvc/gvplugin.h | 63 - internal/ccall/gvc/gvplugin_device.h | 34 - internal/ccall/gvc/gvplugin_layout.h | 33 - internal/ccall/gvc/gvplugin_loadimage.h | 51 - internal/ccall/gvc/gvplugin_render.h | 64 - internal/ccall/gvc/gvplugin_textlayout.h | 33 - internal/ccall/gvc/gvrender.c | 786 - internal/ccall/gvc/gvtextlayout.c | 46 - internal/ccall/gvc/gvtool_tred.c | 89 - internal/ccall/gvc/gvusershape.c | 767 - internal/ccall/gvpr/actions.c | 1385 - internal/ccall/gvpr/actions.h | 60 - internal/ccall/gvpr/compile.c | 2673 - internal/ccall/gvpr/compile.h | 102 - internal/ccall/gvpr/dummy.go | 4 - internal/ccall/gvpr/gdefs.h | 485 - internal/ccall/gvpr/gprdata | 138 - internal/ccall/gvpr/gprstate.c | 149 - internal/ccall/gvpr/gprstate.h | 93 - internal/ccall/gvpr/gvpr.c | 1109 - internal/ccall/gvpr/gvpr.h | 63 - internal/ccall/gvpr/mkdefs.c | 206 - internal/ccall/gvpr/parse.c | 624 - internal/ccall/gvpr/parse.h | 59 - internal/ccall/gvpr/queue.c | 88 - internal/ccall/gvpr/queue.h | 46 - internal/ccall/gvpr/trie.c | 136 - internal/ccall/gvpr/trieFA.h | 87 - internal/ccall/ingraphs/dummy.go | 4 - internal/ccall/ingraphs/ingraphs.c | 218 - internal/ccall/ingraphs/ingraphs.h | 61 - internal/ccall/label.c | 5 - internal/ccall/label/dummy.go | 4 - internal/ccall/label/index.c | 481 - internal/ccall/label/index.h | 136 - internal/ccall/label/node.c | 206 - internal/ccall/label/node.h | 51 - internal/ccall/label/nrtmain.c | 330 - internal/ccall/label/rectangle.c | 249 - internal/ccall/label/rectangle.h | 38 - internal/ccall/label/split.q.c | 377 - internal/ccall/label/split.q.h | 51 - internal/ccall/label/xlabels.c | 694 - internal/ccall/label/xlabels.h | 108 - .../ccall/mingle/agglomerative_bundling.c | 774 - .../ccall/mingle/agglomerative_bundling.h | 34 - internal/ccall/mingle/dummy.go | 4 - internal/ccall/mingle/edge_bundling.c | 831 - internal/ccall/mingle/edge_bundling.h | 45 - internal/ccall/mingle/ink.c | 357 - internal/ccall/mingle/ink.h | 37 - .../ccall/mingle/nearest_neighbor_graph.c | 54 - .../ccall/mingle/nearest_neighbor_graph.h | 16 - .../mingle/nearest_neighbor_graph_ann.cpp | 180 - .../ccall/mingle/nearest_neighbor_graph_ann.h | 16 - internal/ccall/neatogen.c | 38 - internal/ccall/neatogen/adjust.c | 1331 - internal/ccall/neatogen/adjust.h | 63 - internal/ccall/neatogen/bfs.c | 170 - internal/ccall/neatogen/bfs.h | 91 - internal/ccall/neatogen/call_tri.c | 110 - internal/ccall/neatogen/call_tri.h | 21 - internal/ccall/neatogen/circuit.c | 77 - internal/ccall/neatogen/closest.c | 368 - internal/ccall/neatogen/closest.h | 31 - internal/ccall/neatogen/compute_hierarchy.c | 137 - internal/ccall/neatogen/conjgrad.c | 241 - internal/ccall/neatogen/conjgrad.h | 46 - .../ccall/neatogen/constrained_majorization.c | 544 - .../neatogen/constrained_majorization_ipsep.c | 496 - internal/ccall/neatogen/constraint.c | 945 - internal/ccall/neatogen/defs.h | 44 - internal/ccall/neatogen/delaunay.c | 926 - internal/ccall/neatogen/delaunay.h | 39 - internal/ccall/neatogen/digcola.h | 54 - internal/ccall/neatogen/dijkstra.c | 396 - internal/ccall/neatogen/dijkstra.h | 46 - internal/ccall/neatogen/dummy.go | 4 - internal/ccall/neatogen/edges.c | 212 - internal/ccall/neatogen/edges.h | 45 - internal/ccall/neatogen/embed_graph.c | 124 - internal/ccall/neatogen/embed_graph.h | 50 - internal/ccall/neatogen/fPQ.h | 184 - internal/ccall/neatogen/geometry.c | 93 - internal/ccall/neatogen/geometry.h | 52 - internal/ccall/neatogen/heap.c | 149 - internal/ccall/neatogen/heap.h | 37 - internal/ccall/neatogen/hedges.c | 263 - internal/ccall/neatogen/hedges.h | 54 - internal/ccall/neatogen/info.c | 207 - internal/ccall/neatogen/info.h | 48 - internal/ccall/neatogen/kkutils.c | 290 - internal/ccall/neatogen/kkutils.h | 62 - internal/ccall/neatogen/legal.c | 471 - internal/ccall/neatogen/lu.c | 162 - internal/ccall/neatogen/matinv.c | 71 - internal/ccall/neatogen/matrix_ops.c | 803 - internal/ccall/neatogen/matrix_ops.h | 108 - internal/ccall/neatogen/mem.h | 44 - internal/ccall/neatogen/memory.c | 90 - internal/ccall/neatogen/mosek_quad_solve.c | 581 - internal/ccall/neatogen/mosek_quad_solve.h | 46 - internal/ccall/neatogen/multispline.c | 1391 - internal/ccall/neatogen/multispline.h | 26 - internal/ccall/neatogen/neato.h | 40 - internal/ccall/neatogen/neatoinit.c | 1506 - internal/ccall/neatogen/neatoprocs.h | 79 - internal/ccall/neatogen/neatosplines.c | 1107 - internal/ccall/neatogen/opt_arrangement.c | 92 - internal/ccall/neatogen/overlap.c | 695 - internal/ccall/neatogen/overlap.h | 58 - internal/ccall/neatogen/pca.c | 140 - internal/ccall/neatogen/pca.h | 32 - internal/ccall/neatogen/poly.c | 542 - internal/ccall/neatogen/poly.h | 41 - internal/ccall/neatogen/printvis.c | 44 - internal/ccall/neatogen/quad_prog_solve.c | 1007 - internal/ccall/neatogen/quad_prog_solver.h | 63 - internal/ccall/neatogen/quad_prog_vpsc.c | 701 - internal/ccall/neatogen/quad_prog_vpsc.h | 95 - internal/ccall/neatogen/site.c | 73 - internal/ccall/neatogen/site.h | 45 - internal/ccall/neatogen/smart_ini_x.c | 394 - internal/ccall/neatogen/solve.c | 101 - internal/ccall/neatogen/sparsegraph.h | 103 - internal/ccall/neatogen/stress.c | 1315 - internal/ccall/neatogen/stress.h | 69 - internal/ccall/neatogen/stuff.c | 774 - internal/ccall/neatogen/voronoi.c | 121 - internal/ccall/neatogen/voronoi.h | 32 - internal/ccall/ortho.c | 7 - internal/ccall/ortho/dummy.go | 4 - internal/ccall/ortho/fPQ.c | 160 - internal/ccall/ortho/fPQ.h | 185 - internal/ccall/ortho/maze.c | 518 - internal/ccall/ortho/maze.h | 67 - internal/ccall/ortho/ortho.c | 1561 - internal/ccall/ortho/ortho.h | 19 - internal/ccall/ortho/partition.c | 769 - internal/ccall/ortho/partition.h | 21 - internal/ccall/ortho/rawgraph.c | 163 - internal/ccall/ortho/rawgraph.h | 41 - internal/ccall/ortho/sgraph.c | 271 - internal/ccall/ortho/sgraph.h | 63 - internal/ccall/ortho/structures.h | 94 - internal/ccall/ortho/trap.h | 58 - internal/ccall/ortho/trapezoid.c | 1082 - internal/ccall/osage.c | 1 - internal/ccall/osage/dummy.go | 4 - internal/ccall/osage/osage.h | 28 - internal/ccall/osage/osageinit.c | 397 - internal/ccall/pack.c | 2 - internal/ccall/pack/ccomps.c | 721 - internal/ccall/pack/dummy.go | 4 - internal/ccall/pack/pack.c | 1413 - internal/ccall/pack/pack.h | 94 - internal/ccall/pack/ptest.c | 414 - internal/ccall/patchwork.c | 3 - internal/ccall/patchwork/dummy.go | 4 - internal/ccall/patchwork/patchwork.c | 289 - internal/ccall/patchwork/patchwork.h | 38 - internal/ccall/patchwork/patchworkinit.c | 176 - internal/ccall/patchwork/tree_map.c | 127 - internal/ccall/patchwork/tree_map.h | 28 - internal/ccall/pathplan.c | 9 - internal/ccall/pathplan/cvt.c | 345 - internal/ccall/pathplan/dummy.go | 4 - internal/ccall/pathplan/inpoly.c | 42 - internal/ccall/pathplan/path.lefty | 212 - internal/ccall/pathplan/pathgeom.h | 52 - internal/ccall/pathplan/pathplan.h | 52 - internal/ccall/pathplan/pathutil.h | 56 - internal/ccall/pathplan/route.c | 708 - internal/ccall/pathplan/shortest.c | 604 - internal/ccall/pathplan/shortestpth.c | 116 - internal/ccall/pathplan/solvers.c | 113 - internal/ccall/pathplan/solvers.h | 31 - internal/ccall/pathplan/tri.h | 28 - internal/ccall/pathplan/triang.c | 189 - internal/ccall/pathplan/util.c | 107 - internal/ccall/pathplan/vis.h | 84 - internal/ccall/pathplan/visibility.c | 450 - internal/ccall/pathplan/vispath.h | 55 - internal/ccall/plugin.c | 21 - internal/ccall/rbtree.c | 3 - internal/ccall/rbtree/dummy.go | 4 - internal/ccall/rbtree/misc.c | 72 - internal/ccall/rbtree/misc.h | 43 - internal/ccall/rbtree/red_black_tree.c | 694 - internal/ccall/rbtree/red_black_tree.h | 87 - internal/ccall/rbtree/simple_test.sh | 53 - internal/ccall/rbtree/stack.c | 84 - internal/ccall/rbtree/stack.h | 66 - internal/ccall/rbtree/test_red_black_tree.c | 153 - internal/ccall/sfdpgen.c | 8 - internal/ccall/sfdpgen/Multilevel.c | 1318 - internal/ccall/sfdpgen/Multilevel.h | 72 - internal/ccall/sfdpgen/PriorityQueue.c | 198 - internal/ccall/sfdpgen/PriorityQueue.h | 42 - internal/ccall/sfdpgen/dummy.go | 4 - internal/ccall/sfdpgen/post_process.c | 1334 - internal/ccall/sfdpgen/post_process.h | 96 - internal/ccall/sfdpgen/sfdp.h | 26 - internal/ccall/sfdpgen/sfdpinit.c | 415 - internal/ccall/sfdpgen/sfdpinternal.h | 20 - internal/ccall/sfdpgen/sparse_solve.c | 321 - internal/ccall/sfdpgen/sparse_solve.h | 38 - internal/ccall/sfdpgen/spring_electrical.c | 2287 - internal/ccall/sfdpgen/spring_electrical.h | 102 - internal/ccall/sfdpgen/stress_model.c | 102 - internal/ccall/sfdpgen/stress_model.h | 6 - internal/ccall/sfdpgen/uniform_stress.c | 186 - internal/ccall/sfdpgen/uniform_stress.h | 29 - internal/ccall/sfio/README | 63 - internal/ccall/sfio/Sfio_f/_sfclrerr.c | 21 - internal/ccall/sfio/Sfio_f/_sfdlen.c | 21 - internal/ccall/sfio/Sfio_f/_sfeof.c | 21 - internal/ccall/sfio/Sfio_f/_sferror.c | 21 - internal/ccall/sfio/Sfio_f/_sffileno.c | 21 - internal/ccall/sfio/Sfio_f/_sfgetc.c | 21 - internal/ccall/sfio/Sfio_f/_sfllen.c | 21 - internal/ccall/sfio/Sfio_f/_sfputc.c | 21 - internal/ccall/sfio/Sfio_f/_sfputd.c | 21 - internal/ccall/sfio/Sfio_f/_sfputl.c | 21 - internal/ccall/sfio/Sfio_f/_sfputm.c | 21 - internal/ccall/sfio/Sfio_f/_sfputu.c | 21 - internal/ccall/sfio/Sfio_f/_sfslen.c | 21 - internal/ccall/sfio/Sfio_f/_sfstacked.c | 21 - internal/ccall/sfio/Sfio_f/_sfulen.c | 21 - internal/ccall/sfio/Sfio_f/_sfvalue.c | 21 - internal/ccall/sfio/Sfio_f/dummy.go | 4 - internal/ccall/sfio/dummy.go | 4 - internal/ccall/sfio/sfclose.c | 155 - internal/ccall/sfio/sfclrlock.c | 50 - internal/ccall/sfio/sfcvt.c | 218 - internal/ccall/sfio/sfdisc.c | 143 - internal/ccall/sfio/sfdlen.c | 45 - internal/ccall/sfio/sfexcept.c | 118 - internal/ccall/sfio/sfexit.c | 90 - internal/ccall/sfio/sfextern.c | 88 - internal/ccall/sfio/sffcvt.c | 25 - internal/ccall/sfio/sffilbuf.c | 94 - internal/ccall/sfio/sfflsbuf.c | 100 - internal/ccall/sfio/sfgetd.c | 64 - internal/ccall/sfio/sfgetl.c | 55 - internal/ccall/sfio/sfgetm.c | 53 - internal/ccall/sfio/sfgetr.c | 142 - internal/ccall/sfio/sfgetu.c | 53 - internal/ccall/sfio/sfhdr.h | 939 - internal/ccall/sfio/sfio.h | 448 - internal/ccall/sfio/sfio_t.h | 117 - internal/ccall/sfio/sfllen.c | 26 - internal/ccall/sfio/sfmode.c | 518 - internal/ccall/sfio/sfmove.c | 246 - internal/ccall/sfio/sfmutex.c | 55 - internal/ccall/sfio/sfnew.c | 118 - internal/ccall/sfio/sfnotify.c | 25 - internal/ccall/sfio/sfnputc.c | 70 - internal/ccall/sfio/sfopen.c | 189 - internal/ccall/sfio/sfpkrd.c | 248 - internal/ccall/sfio/sfpoll.c | 230 - internal/ccall/sfio/sfpool.c | 332 - internal/ccall/sfio/sfpopen.c | 243 - internal/ccall/sfio/sfprintf.c | 66 - internal/ccall/sfio/sfprints.c | 47 - internal/ccall/sfio/sfpurge.c | 86 - internal/ccall/sfio/sfputd.c | 90 - internal/ccall/sfio/sfputl.c | 77 - internal/ccall/sfio/sfputm.c | 74 - internal/ccall/sfio/sfputr.c | 109 - internal/ccall/sfio/sfputu.c | 73 - internal/ccall/sfio/sfraise.c | 64 - internal/ccall/sfio/sfrd.c | 296 - internal/ccall/sfio/sfread.c | 127 - internal/ccall/sfio/sfreserve.c | 148 - internal/ccall/sfio/sfresize.c | 66 - internal/ccall/sfio/sfscanf.c | 58 - internal/ccall/sfio/sfseek.c | 270 - internal/ccall/sfio/sfset.c | 76 - internal/ccall/sfio/sfsetbuf.c | 335 - internal/ccall/sfio/sfsetfd.c | 109 - internal/ccall/sfio/sfsize.c | 95 - internal/ccall/sfio/sfsk.c | 88 - internal/ccall/sfio/sfstack.c | 103 - internal/ccall/sfio/sfstrtod.c | 139 - internal/ccall/sfio/sfswap.c | 108 - internal/ccall/sfio/sfsync.c | 151 - internal/ccall/sfio/sftable.c | 477 - internal/ccall/sfio/sftell.c | 48 - internal/ccall/sfio/sftmp.c | 352 - internal/ccall/sfio/sfungetc.c | 92 - internal/ccall/sfio/sfvprintf.c | 1060 - internal/ccall/sfio/sfvscanf.c | 796 - internal/ccall/sfio/sfwr.c | 218 - internal/ccall/sfio/sfwrite.c | 148 - internal/ccall/sfio/vthread.h | 178 - internal/ccall/sparse.c | 12 - internal/ccall/sparse/BinaryHeap.c | 291 - internal/ccall/sparse/BinaryHeap.h | 77 - internal/ccall/sparse/DotIO.c | 1202 - internal/ccall/sparse/DotIO.h | 46 - internal/ccall/sparse/IntStack.c | 95 - internal/ccall/sparse/IntStack.h | 39 - internal/ccall/sparse/LinkedList.c | 190 - internal/ccall/sparse/LinkedList.h | 54 - internal/ccall/sparse/QuadTree.c | 737 - internal/ccall/sparse/QuadTree.h | 64 - internal/ccall/sparse/SparseMatrix.c | 4187 - internal/ccall/sparse/SparseMatrix.h | 184 - internal/ccall/sparse/clustering.c | 385 - internal/ccall/sparse/clustering.h | 57 - internal/ccall/sparse/color_palette.c | 7548 - internal/ccall/sparse/color_palette.h | 41 - internal/ccall/sparse/colorutil.c | 99 - internal/ccall/sparse/colorutil.h | 25 - internal/ccall/sparse/dummy.go | 4 - internal/ccall/sparse/general.c | 367 - internal/ccall/sparse/general.h | 150 - internal/ccall/sparse/mq.c | 618 - internal/ccall/sparse/mq.h | 63 - internal/ccall/sparse/vector.c | 252 - internal/ccall/sparse/vector.h | 67 - internal/ccall/spine/dummy.go | 4 - internal/ccall/spine/quad.c | 125 - internal/ccall/spine/quad.h | 10 - internal/ccall/spine/spine.c | 677 - internal/ccall/spine/spine.h | 8 - internal/ccall/spine/spinehdr.h | 40 - internal/ccall/spine/subset.c | 139 - internal/ccall/spine/subset.h | 23 - internal/ccall/spine/union_find.c | 65 - internal/ccall/spine/union_find.h | 12 - internal/ccall/topfish/dummy.go | 4 - internal/ccall/topfish/hierarchy.c | 1567 - internal/ccall/topfish/hierarchy.h | 108 - internal/ccall/topfish/rescale_layout.c | 516 - internal/ccall/twopigen.c | 2 - internal/ccall/twopigen/circle.c | 443 - internal/ccall/twopigen/circle.h | 50 - internal/ccall/twopigen/dummy.go | 4 - internal/ccall/twopigen/twopiinit.c | 200 - internal/ccall/vmalloc/README | 24 - internal/ccall/vmalloc/dummy.go | 4 - internal/ccall/vmalloc/malloc.c | 351 - internal/ccall/vmalloc/vmalloc.h | 221 - internal/ccall/vmalloc/vmbest.c | 1185 - internal/ccall/vmalloc/vmclear.c | 68 - internal/ccall/vmalloc/vmclose.c | 77 - internal/ccall/vmalloc/vmdcheap.c | 43 - internal/ccall/vmalloc/vmdebug.c | 649 - internal/ccall/vmalloc/vmdisc.c | 35 - internal/ccall/vmalloc/vmhdr.h | 458 - internal/ccall/vmalloc/vmlast.c | 399 - internal/ccall/vmalloc/vmopen.c | 159 - internal/ccall/vmalloc/vmpool.c | 282 - internal/ccall/vmalloc/vmprivate.c | 264 - internal/ccall/vmalloc/vmprofile.c | 630 - internal/ccall/vmalloc/vmregion.c | 24 - internal/ccall/vmalloc/vmsegment.c | 43 - internal/ccall/vmalloc/vmset.c | 53 - internal/ccall/vmalloc/vmstat.c | 106 - internal/ccall/vmalloc/vmstrdup.c | 29 - internal/ccall/vmalloc/vmtrace.c | 184 - internal/ccall/vmalloc/vmwalk.c | 54 - internal/ccall/vpsc/block.cpp | 406 - internal/ccall/vpsc/block.h | 77 - internal/ccall/vpsc/blocks.cpp | 202 - internal/ccall/vpsc/blocks.h | 62 - internal/ccall/vpsc/constraint.cpp | 52 - internal/ccall/vpsc/constraint.h | 67 - internal/ccall/vpsc/csolve_VPSC.cpp | 147 - internal/ccall/vpsc/csolve_VPSC.h | 79 - internal/ccall/vpsc/dummy.go | 4 - internal/ccall/vpsc/generate-constraints.cpp | 283 - internal/ccall/vpsc/generate-constraints.h | 87 - .../ccall/vpsc/pairingheap/PairingHeap.cpp | 339 - internal/ccall/vpsc/pairingheap/PairingHeap.h | 128 - .../ccall/vpsc/pairingheap/dsexceptions.h | 12 - internal/ccall/vpsc/pairingheap/dummy.go | 4 - .../ccall/vpsc/remove_rectangle_overlap.cpp | 122 - .../ccall/vpsc/remove_rectangle_overlap.h | 28 - internal/ccall/vpsc/solve_VPSC.cpp | 416 - internal/ccall/vpsc/solve_VPSC.h | 63 - internal/ccall/vpsc/variable.cpp | 21 - internal/ccall/vpsc/variable.h | 59 - internal/ccall/xdot.c | 1 - internal/ccall/xdot/dummy.go | 4 - internal/ccall/xdot/xdot.c | 1181 - internal/ccall/xdot/xdot.h | 180 - internal/compat.h | 12 - internal/config.h | 555 - internal/config.h.in | 541 - internal/dummy.go | 4 - internal/expat/ascii.h | 120 - internal/expat/asciitab.h | 64 - internal/expat/dummy.go | 4 - internal/expat/expat.h | 1024 - internal/expat/expat_config.h | 135 - internal/expat/expat_external.h | 158 - internal/expat/iasciitab.h | 65 - internal/expat/internal.h | 123 - internal/expat/latin1tab.h | 64 - internal/expat/nametab.h | 136 - internal/expat/siphash.h | 398 - internal/expat/utf8tab.h | 64 - internal/expat/winconfig.h | 56 - internal/expat/xmlparse.c | 6905 - internal/expat/xmlrole.c | 1249 - internal/expat/xmlrole.h | 139 - internal/expat/xmltok.c | 1672 - internal/expat/xmltok.h | 315 - internal/expat/xmltok_impl.c | 1804 - internal/expat/xmltok_impl.h | 73 - internal/expat/xmltok_ns.c | 118 - internal/graphviz_version.h | 8 - internal/plugin/core/dummy.go | 4 - internal/plugin/core/gvloadimage_core.c | 360 - internal/plugin/core/gvplugin_core.c | 109 - internal/plugin/core/gvrender_core_dot.c | 864 - internal/plugin/core/gvrender_core_fig.c | 558 - internal/plugin/core/gvrender_core_json.c | 823 - internal/plugin/core/gvrender_core_map.c | 335 - internal/plugin/core/gvrender_core_mp.c | 531 - internal/plugin/core/gvrender_core_pic.c | 600 - internal/plugin/core/gvrender_core_pov.c | 935 - internal/plugin/core/gvrender_core_ps.c | 499 - internal/plugin/core/gvrender_core_svg.c | 798 - internal/plugin/core/gvrender_core_tk.c | 388 - internal/plugin/core/gvrender_core_vml.c | 614 - internal/plugin/core/ps.h | 173 - internal/plugin/devil/dummy.go | 4 - internal/plugin/devil/gvdevice_devil.c | 106 - internal/plugin/devil/gvplugin_devil.c | 23 - internal/plugin/dot_layout/dummy.go | 4 - .../plugin/dot_layout/gvlayout_dot_layout.c | 46 - .../plugin/dot_layout/gvplugin_dot_layout.c | 44 - internal/plugin/gd/dummy.go | 4 - internal/plugin/gd/gvdevice_gd.c | 235 - internal/plugin/gd/gvloadimage_gd.c | 348 - internal/plugin/gd/gvplugin_gd.c | 49 - internal/plugin/gd/gvrender_gd.c | 707 - internal/plugin/gd/gvrender_gd_vrml.c | 859 - internal/plugin/gd/gvtextlayout_gd.c | 207 - internal/plugin/gdiplus/FileStream.cpp | 225 - internal/plugin/gdiplus/FileStream.h | 99 - internal/plugin/gdiplus/dummy.go | 4 - internal/plugin/gdiplus/gvdevice_gdiplus.cpp | 81 - .../plugin/gdiplus/gvloadimage_gdiplus.cpp | 86 - internal/plugin/gdiplus/gvplugin_gdiplus.cpp | 105 - internal/plugin/gdiplus/gvplugin_gdiplus.h | 71 - internal/plugin/gdiplus/gvrender_gdiplus.cpp | 353 - .../plugin/gdiplus/gvtextlayout_gdiplus.cpp | 119 - internal/plugin/gdk/dummy.go | 4 - internal/plugin/gdk/gvdevice_gdk.c | 140 - internal/plugin/gdk/gvloadimage_gdk.c | 135 - internal/plugin/gdk/gvplugin_gdk.c | 25 - internal/plugin/glitz/dummy.go | 4 - internal/plugin/glitz/gvdevice_glitz.c | 595 - internal/plugin/glitz/gvplugin_glitz.c | 23 - internal/plugin/gs/dummy.go | 4 - internal/plugin/gs/gvloadimage_gs.c | 259 - internal/plugin/gs/gvplugin_gs.c | 23 - internal/plugin/gtk/callbacks.c | 436 - internal/plugin/gtk/callbacks.h | 102 - internal/plugin/gtk/dummy.go | 4 - internal/plugin/gtk/gvdevice_gtk.c | 165 - internal/plugin/gtk/gvplugin_gtk.c | 23 - internal/plugin/gtk/interface.c | 343 - internal/plugin/gtk/interface.h | 5 - internal/plugin/gtk/support.c | 144 - internal/plugin/gtk/support.h | 67 - internal/plugin/lasi/dummy.go | 4 - internal/plugin/lasi/gvloadimage_lasi.c | 109 - internal/plugin/lasi/gvplugin_lasi.c | 27 - internal/plugin/lasi/gvrender_lasi.cpp | 620 - internal/plugin/lasi/ps.h | 173 - internal/plugin/ming/Bitstream_Vera_Sans.fdb | Bin 19300 -> 0 bytes internal/plugin/ming/Bitstream_Vera_Serif.fdb | Bin 22230 -> 0 bytes internal/plugin/ming/dummy.go | 4 - internal/plugin/ming/gvplugin_ming.c | 25 - internal/plugin/ming/gvrender_ming.c | 313 - internal/plugin/neato_layout/dummy.go | 4 - .../neato_layout/gvlayout_neato_layout.c | 154 - .../neato_layout/gvplugin_neato_layout.c | 36 - internal/plugin/pango/dummy.go | 4 - internal/plugin/pango/gvgetfontlist.h | 37 - internal/plugin/pango/gvgetfontlist_pango.c | 574 - internal/plugin/pango/gvloadimage_pango.c | 194 - internal/plugin/pango/gvplugin_pango.c | 42 - internal/plugin/pango/gvplugin_pango.h | 1 - internal/plugin/pango/gvrender_pango.c | 506 - internal/plugin/pango/gvtextlayout_pango.c | 288 - internal/plugin/poppler/dummy.go | 4 - internal/plugin/poppler/gvloadimage_poppler.c | 157 - internal/plugin/poppler/gvplugin_poppler.c | 23 - internal/plugin/quartz/GVTextLayout.h | 29 - internal/plugin/quartz/GVTextLayout.m | 98 - internal/plugin/quartz/dummy.go | 4 - internal/plugin/quartz/gvdevice_quartz.c | 105 - internal/plugin/quartz/gvloadimage_quartz.c | 182 - internal/plugin/quartz/gvplugin_quartz.c | 90 - internal/plugin/quartz/gvplugin_quartz.h | 70 - internal/plugin/quartz/gvrender_quartz.c | 521 - internal/plugin/quartz/gvtextlayout_quartz.c | 115 - internal/plugin/rsvg/dummy.go | 4 - internal/plugin/rsvg/gvloadimage_rsvg.c | 217 - internal/plugin/rsvg/gvplugin_rsvg.c | 27 - internal/plugin/visio/VisioGraphic.cpp | 566 - internal/plugin/visio/VisioGraphic.h | 176 - internal/plugin/visio/VisioRender.cpp | 503 - internal/plugin/visio/VisioRender.h | 92 - internal/plugin/visio/VisioText.cpp | 190 - internal/plugin/visio/VisioText.h | 121 - internal/plugin/visio/dummy.go | 4 - internal/plugin/visio/gvplugin_visio.c | 48 - internal/plugin/visio/gvrender_visio_vdx.cpp | 200 - internal/plugin/webp/dummy.go | 4 - internal/plugin/webp/gvdevice_webp.c | 150 - internal/plugin/webp/gvloadimage_webp.c | 191 - internal/plugin/webp/gvplugin_webp.c | 25 - internal/plugin/xlib/dummy.go | 4 - internal/plugin/xlib/gvdevice_xlib.c | 636 - internal/plugin/xlib/gvplugin_xlib.c | 23 - internal/tools/nori/Makefile | 31 + internal/tools/nori/buf.gen.yaml | 5 + internal/tools/nori/buf.work.yaml | 3 + .../tools/nori/cmd/protoc-gen-nori/main.go | 61 + internal/tools/nori/generate_c.go | 637 + internal/tools/nori/generate_go.go | 519 + internal/tools/nori/generator.go | 985 + internal/tools/nori/go.mod | 11 + internal/tools/nori/go.sum | 18 + internal/tools/nori/nori/nori.pb.go | 1437 + internal/tools/nori/nori_test.go | 25 + internal/tools/nori/proto/nori/nori.proto | 135 + internal/tools/nori/protocompiler.go | 77 + internal/tools/nori/templates/bind.c.tmpl | 216 + internal/tools/nori/templates/bind.go.tmpl | 1090 + internal/wasm/bind.go | 17638 + internal/wasm/bind.proto | 3275 + internal/wasm/build/Dockerfile | 39 + internal/wasm/build/Makefile | 141 + internal/wasm/build/bind.c | 6713 + internal/wasm/build/patch.c | 56 + internal/wasm/ext.go | 102 + internal/wasm/graphviz.wasm | Bin 0 -> 1507196 bytes option.go | 17 +- 880 files changed, 36519 insertions(+), 1085116 deletions(-) create mode 100644 Makefile create mode 100644 alias.go create mode 100644 buf.gen.yaml create mode 100644 buf.work.yaml create mode 100644 cgraph/init.go create mode 100644 cgraph/link.go create mode 100644 cmd/dot/go.mod create mode 100644 cmd/dot/go.sum create mode 100644 graphviz.version create mode 100644 gvc/device_plugin.go create mode 100644 gvc/init.go create mode 100644 gvc/link.go create mode 100644 gvc/plugin.go create mode 100644 gvc/render_plugin.go delete mode 100644 gvc/renderer.go delete mode 100644 internal/builddate.h delete mode 100644 internal/ccall/ast/align.h delete mode 100644 internal/ccall/ast/ast.h delete mode 100644 internal/ccall/ast/chresc.c delete mode 100644 internal/ccall/ast/chrtoi.c delete mode 100644 internal/ccall/ast/compat_unistd.h delete mode 100644 internal/ccall/ast/dummy.go delete mode 100644 internal/ccall/ast/error.c delete mode 100644 internal/ccall/ast/error.h delete mode 100644 internal/ccall/ast/fmtbuf.c delete mode 100644 internal/ccall/ast/fmtesc.c delete mode 100644 internal/ccall/ast/hashkey.h delete mode 100644 internal/ccall/ast/pathaccess.c delete mode 100644 internal/ccall/ast/pathbin.c delete mode 100644 internal/ccall/ast/pathcanon.c delete mode 100644 internal/ccall/ast/pathcat.c delete mode 100644 internal/ccall/ast/pathexists.c delete mode 100644 internal/ccall/ast/pathfind.c delete mode 100644 internal/ccall/ast/pathgetlink.c delete mode 100644 internal/ccall/ast/pathpath.c delete mode 100644 internal/ccall/ast/sfstr.h delete mode 100644 internal/ccall/ast/strcopy.c delete mode 100644 internal/ccall/ast/strerror.c delete mode 100644 internal/ccall/ast/stresc.c delete mode 100644 internal/ccall/ast/strmatch.c delete mode 100644 internal/ccall/ast/strton.c delete mode 100644 internal/ccall/build_cgo_hack.go delete mode 100644 internal/ccall/builtin.c delete mode 100644 internal/ccall/ccall.go delete mode 100644 internal/ccall/cdt.c delete mode 100644 internal/ccall/cdt.go delete mode 100644 internal/ccall/cdt/cdt.h delete mode 100644 internal/ccall/cdt/dtclose.c delete mode 100644 internal/ccall/cdt/dtdisc.c delete mode 100644 internal/ccall/cdt/dtextract.c delete mode 100644 internal/ccall/cdt/dtflatten.c delete mode 100644 internal/ccall/cdt/dthash.c delete mode 100644 internal/ccall/cdt/dthdr.h delete mode 100644 internal/ccall/cdt/dtlist.c delete mode 100644 internal/ccall/cdt/dtmethod.c delete mode 100644 internal/ccall/cdt/dtopen.c delete mode 100644 internal/ccall/cdt/dtrenew.c delete mode 100644 internal/ccall/cdt/dtrestore.c delete mode 100644 internal/ccall/cdt/dtsize.c delete mode 100644 internal/ccall/cdt/dtstat.c delete mode 100644 internal/ccall/cdt/dtstrhash.c delete mode 100644 internal/ccall/cdt/dttree.c delete mode 100644 internal/ccall/cdt/dttreeset.c delete mode 100644 internal/ccall/cdt/dtview.c delete mode 100644 internal/ccall/cdt/dtwalk.c delete mode 100644 internal/ccall/cdt/dummy.go delete mode 100644 internal/ccall/cgraph.c delete mode 100644 internal/ccall/cgraph.go delete mode 100644 internal/ccall/cgraph/agerror.c delete mode 100644 internal/ccall/cgraph/agxbuf.c delete mode 100644 internal/ccall/cgraph/agxbuf.h delete mode 100644 internal/ccall/cgraph/apply.c delete mode 100644 internal/ccall/cgraph/attr.c delete mode 100644 internal/ccall/cgraph/cghdr.h delete mode 100644 internal/ccall/cgraph/cgraph.h delete mode 100644 internal/ccall/cgraph/cmpnd.c delete mode 100644 internal/ccall/cgraph/dummy.go delete mode 100644 internal/ccall/cgraph/edge.c delete mode 100644 internal/ccall/cgraph/flatten.c delete mode 100644 internal/ccall/cgraph/grammar.c delete mode 100644 internal/ccall/cgraph/grammar.h delete mode 100644 internal/ccall/cgraph/grammar.y delete mode 100644 internal/ccall/cgraph/graph.c delete mode 100644 internal/ccall/cgraph/id.c delete mode 100644 internal/ccall/cgraph/imap.c delete mode 100644 internal/ccall/cgraph/io.c delete mode 100644 internal/ccall/cgraph/main.c delete mode 100644 internal/ccall/cgraph/malloc.h delete mode 100644 internal/ccall/cgraph/mem.c delete mode 100644 internal/ccall/cgraph/node.c delete mode 100755 internal/ccall/cgraph/obj.c delete mode 100644 internal/ccall/cgraph/pend.c delete mode 100644 internal/ccall/cgraph/rec.c delete mode 100644 internal/ccall/cgraph/refstr.c delete mode 100644 internal/ccall/cgraph/scan.c delete mode 100644 internal/ccall/cgraph/scan.l delete mode 100644 internal/ccall/cgraph/subg.c delete mode 100644 internal/ccall/cgraph/tester.c delete mode 100644 internal/ccall/cgraph/utils.c delete mode 100644 internal/ccall/cgraph/write.c delete mode 100644 internal/ccall/cgraph/y.output delete mode 100644 internal/ccall/cgraph/y.tab.c delete mode 100644 internal/ccall/cgraph/y.tab.h delete mode 100644 internal/ccall/circogen.c delete mode 100644 internal/ccall/circogen/block.c delete mode 100644 internal/ccall/circogen/block.h delete mode 100644 internal/ccall/circogen/blockpath.c delete mode 100644 internal/ccall/circogen/blockpath.h delete mode 100644 internal/ccall/circogen/blocktree.c delete mode 100644 internal/ccall/circogen/blocktree.h delete mode 100644 internal/ccall/circogen/circo.h delete mode 100644 internal/ccall/circogen/circpos.c delete mode 100644 internal/ccall/circogen/circpos.h delete mode 100644 internal/ccall/circogen/circular.c delete mode 100644 internal/ccall/circogen/circular.h delete mode 100644 internal/ccall/circogen/circularinit.c delete mode 100644 internal/ccall/circogen/deglist.c delete mode 100644 internal/ccall/circogen/deglist.h delete mode 100644 internal/ccall/circogen/dummy.go delete mode 100644 internal/ccall/circogen/edgelist.c delete mode 100644 internal/ccall/circogen/edgelist.h delete mode 100644 internal/ccall/circogen/nodelist.c delete mode 100644 internal/ccall/circogen/nodelist.h delete mode 100644 internal/ccall/circogen/nodeset.c delete mode 100644 internal/ccall/circogen/nodeset.h delete mode 100644 internal/ccall/common.c delete mode 100644 internal/ccall/common.go delete mode 100644 internal/ccall/common/args.c delete mode 100644 internal/ccall/common/arith.h delete mode 100644 internal/ccall/common/arrows.c delete mode 100644 internal/ccall/common/brewer_colors delete mode 100644 internal/ccall/common/brewer_lib delete mode 100755 internal/ccall/common/chars.tcl delete mode 100644 internal/ccall/common/color.h delete mode 100644 internal/ccall/common/color_lib delete mode 100644 internal/ccall/common/color_names delete mode 100644 internal/ccall/common/colorprocs.h delete mode 100644 internal/ccall/common/colortbl.h delete mode 100644 internal/ccall/common/colxlate.c delete mode 100644 internal/ccall/common/const.h delete mode 100644 internal/ccall/common/dummy.go delete mode 100644 internal/ccall/common/ellipse.c delete mode 100644 internal/ccall/common/emit.c delete mode 100644 internal/ccall/common/entities.h delete mode 100644 internal/ccall/common/entities.html delete mode 100755 internal/ccall/common/entities.tcl delete mode 100644 internal/ccall/common/fontmap.cfg delete mode 100644 internal/ccall/common/geom.c delete mode 100644 internal/ccall/common/geom.h delete mode 100644 internal/ccall/common/geomprocs.h delete mode 100644 internal/ccall/common/globals.c delete mode 100644 internal/ccall/common/globals.h delete mode 100644 internal/ccall/common/htmllex.c delete mode 100644 internal/ccall/common/htmllex.h delete mode 100644 internal/ccall/common/htmlparse.c delete mode 100644 internal/ccall/common/htmlparse.h delete mode 100644 internal/ccall/common/htmlparse.y delete mode 100644 internal/ccall/common/htmltable.c delete mode 100644 internal/ccall/common/htmltable.h delete mode 100644 internal/ccall/common/input.c delete mode 100644 internal/ccall/common/intset.c delete mode 100644 internal/ccall/common/intset.h delete mode 100644 internal/ccall/common/labels.c delete mode 100644 internal/ccall/common/logic.h delete mode 100644 internal/ccall/common/macros.h delete mode 100644 internal/ccall/common/memory.c delete mode 100644 internal/ccall/common/memory.h delete mode 100755 internal/ccall/common/mksvgfonts.pl delete mode 100644 internal/ccall/common/ns.c delete mode 100644 internal/ccall/common/output.c delete mode 100644 internal/ccall/common/pointset.c delete mode 100644 internal/ccall/common/pointset.h delete mode 100644 internal/ccall/common/postproc.c delete mode 100644 internal/ccall/common/ps_font_equiv.h delete mode 100644 internal/ccall/common/ps_font_equiv.txt delete mode 100644 internal/ccall/common/ps_fontmap.txt delete mode 100644 internal/ccall/common/psusershape.c delete mode 100644 internal/ccall/common/render.h delete mode 100644 internal/ccall/common/routespl.c delete mode 100644 internal/ccall/common/shapes.c delete mode 100644 internal/ccall/common/splines.c delete mode 100644 internal/ccall/common/strcasecmp.c delete mode 100644 internal/ccall/common/strncasecmp.c delete mode 100644 internal/ccall/common/svgcolor_lib delete mode 100644 internal/ccall/common/svgcolor_names delete mode 100644 internal/ccall/common/taper.c delete mode 100644 internal/ccall/common/textspan.c delete mode 100644 internal/ccall/common/textspan.h delete mode 100644 internal/ccall/common/timing.c delete mode 100644 internal/ccall/common/types.h delete mode 100644 internal/ccall/common/usershape.h delete mode 100644 internal/ccall/common/utils.c delete mode 100644 internal/ccall/common/utils.h delete mode 100644 internal/ccall/common/y.output delete mode 100644 internal/ccall/common/y.tab.c delete mode 100644 internal/ccall/common/y.tab.h delete mode 100644 internal/ccall/dotgen.c delete mode 100644 internal/ccall/dotgen/acyclic.c delete mode 100644 internal/ccall/dotgen/aspect.c delete mode 100644 internal/ccall/dotgen/aspect.h delete mode 100644 internal/ccall/dotgen/class1.c delete mode 100644 internal/ccall/dotgen/class2.c delete mode 100644 internal/ccall/dotgen/cluster.c delete mode 100644 internal/ccall/dotgen/compound.c delete mode 100644 internal/ccall/dotgen/conc.c delete mode 100644 internal/ccall/dotgen/decomp.c delete mode 100644 internal/ccall/dotgen/dot.h delete mode 100644 internal/ccall/dotgen/dotinit.c delete mode 100644 internal/ccall/dotgen/dotprocs.h delete mode 100644 internal/ccall/dotgen/dotsplines.c delete mode 100644 internal/ccall/dotgen/dummy.go delete mode 100644 internal/ccall/dotgen/fastgr.c delete mode 100644 internal/ccall/dotgen/flat.c delete mode 100644 internal/ccall/dotgen/mincross.c delete mode 100644 internal/ccall/dotgen/position.c delete mode 100644 internal/ccall/dotgen/rank.c delete mode 100644 internal/ccall/dotgen/sameport.c delete mode 100644 internal/ccall/edgepaint/dummy.go delete mode 100644 internal/ccall/edgepaint/edge_distinct_coloring.c delete mode 100644 internal/ccall/edgepaint/edge_distinct_coloring.h delete mode 100644 internal/ccall/edgepaint/furtherest_point.c delete mode 100644 internal/ccall/edgepaint/furtherest_point.h delete mode 100644 internal/ccall/edgepaint/intersection.c delete mode 100644 internal/ccall/edgepaint/intersection.h delete mode 100644 internal/ccall/edgepaint/lab.c delete mode 100644 internal/ccall/edgepaint/lab.h delete mode 100644 internal/ccall/edgepaint/lab_gamut.c delete mode 100644 internal/ccall/edgepaint/lab_gamut.h delete mode 100644 internal/ccall/edgepaint/node_distinct_coloring.c delete mode 100644 internal/ccall/edgepaint/node_distinct_coloring.h delete mode 100644 internal/ccall/expat.c delete mode 100644 internal/ccall/expat.go delete mode 100644 internal/ccall/expr/dummy.go delete mode 100644 internal/ccall/expr/excc.c delete mode 100644 internal/ccall/expr/excontext.c delete mode 100644 internal/ccall/expr/exdata.c delete mode 100644 internal/ccall/expr/exerror.c delete mode 100644 internal/ccall/expr/exeval.c delete mode 100644 internal/ccall/expr/exexpr.c delete mode 100644 internal/ccall/expr/exgram.h delete mode 100644 internal/ccall/expr/exlexname.c delete mode 100644 internal/ccall/expr/exlib.h delete mode 100644 internal/ccall/expr/exnospace.c delete mode 100644 internal/ccall/expr/exop.h delete mode 100644 internal/ccall/expr/exopen.c delete mode 100644 internal/ccall/expr/exparse.c delete mode 100644 internal/ccall/expr/exparse.h delete mode 100644 internal/ccall/expr/exparse.y delete mode 100644 internal/ccall/expr/expr.h delete mode 100644 internal/ccall/expr/exrewind.c delete mode 100644 internal/ccall/expr/exstash.c delete mode 100644 internal/ccall/expr/extoken.c delete mode 100644 internal/ccall/expr/extype.c delete mode 100644 internal/ccall/expr/exzero.c delete mode 100644 internal/ccall/expr/y.output delete mode 100644 internal/ccall/expr/y.tab.c delete mode 100644 internal/ccall/expr/y.tab.h delete mode 100644 internal/ccall/fdpgen.c delete mode 100644 internal/ccall/fdpgen/clusteredges.c delete mode 100644 internal/ccall/fdpgen/clusteredges.h delete mode 100644 internal/ccall/fdpgen/comp.c delete mode 100644 internal/ccall/fdpgen/comp.h delete mode 100644 internal/ccall/fdpgen/dbg.c delete mode 100644 internal/ccall/fdpgen/dbg.h delete mode 100644 internal/ccall/fdpgen/dummy.go delete mode 100644 internal/ccall/fdpgen/fdp.h delete mode 100644 internal/ccall/fdpgen/fdpinit.c delete mode 100644 internal/ccall/fdpgen/grid.c delete mode 100644 internal/ccall/fdpgen/grid.h delete mode 100644 internal/ccall/fdpgen/layout.c delete mode 100644 internal/ccall/fdpgen/tlayout.c delete mode 100644 internal/ccall/fdpgen/tlayout.h delete mode 100644 internal/ccall/fdpgen/xlayout.c delete mode 100644 internal/ccall/fdpgen/xlayout.h delete mode 100644 internal/ccall/glcomp/dummy.go delete mode 100644 internal/ccall/glcomp/glcompbutton.c delete mode 100644 internal/ccall/glcomp/glcompbutton.h delete mode 100644 internal/ccall/glcomp/glcompdefs.h delete mode 100644 internal/ccall/glcomp/glcompfont.c delete mode 100644 internal/ccall/glcomp/glcompfont.h delete mode 100644 internal/ccall/glcomp/glcompimage.c delete mode 100644 internal/ccall/glcomp/glcompimage.h delete mode 100644 internal/ccall/glcomp/glcomplabel.c delete mode 100644 internal/ccall/glcomp/glcomplabel.h delete mode 100644 internal/ccall/glcomp/glcompmouse.c delete mode 100644 internal/ccall/glcomp/glcompmouse.h delete mode 100644 internal/ccall/glcomp/glcomppanel.c delete mode 100644 internal/ccall/glcomp/glcomppanel.h delete mode 100644 internal/ccall/glcomp/glcompset.c delete mode 100644 internal/ccall/glcomp/glcompset.h delete mode 100644 internal/ccall/glcomp/glcomptextpng.c delete mode 100644 internal/ccall/glcomp/glcomptextpng.h delete mode 100644 internal/ccall/glcomp/glcomptexture.c delete mode 100644 internal/ccall/glcomp/glcomptexture.h delete mode 100644 internal/ccall/glcomp/glpangofont.c delete mode 100644 internal/ccall/glcomp/glpangofont.h delete mode 100644 internal/ccall/glcomp/glutils.c delete mode 100644 internal/ccall/glcomp/glutils.h delete mode 100644 internal/ccall/gvc.c delete mode 100644 internal/ccall/gvc.go delete mode 100644 internal/ccall/gvc/dummy.go delete mode 100644 internal/ccall/gvc/gvc.c delete mode 100644 internal/ccall/gvc/gvc.h delete mode 100644 internal/ccall/gvc/gvcext.h delete mode 100644 internal/ccall/gvc/gvcint.h delete mode 100644 internal/ccall/gvc/gvcjob.h delete mode 100644 internal/ccall/gvc/gvcommon.h delete mode 100644 internal/ccall/gvc/gvconfig.c delete mode 100644 internal/ccall/gvc/gvconfig.h delete mode 100644 internal/ccall/gvc/gvcontext.c delete mode 100644 internal/ccall/gvc/gvcproc.h delete mode 100644 internal/ccall/gvc/gvdevice.c delete mode 100644 internal/ccall/gvc/gvevent.c delete mode 100644 internal/ccall/gvc/gvio.h delete mode 100644 internal/ccall/gvc/gvjobs.c delete mode 100644 internal/ccall/gvc/gvlayout.c delete mode 100644 internal/ccall/gvc/gvloadimage.c delete mode 100644 internal/ccall/gvc/gvplugin.c delete mode 100644 internal/ccall/gvc/gvplugin.h delete mode 100644 internal/ccall/gvc/gvplugin_device.h delete mode 100644 internal/ccall/gvc/gvplugin_layout.h delete mode 100644 internal/ccall/gvc/gvplugin_loadimage.h delete mode 100644 internal/ccall/gvc/gvplugin_render.h delete mode 100644 internal/ccall/gvc/gvplugin_textlayout.h delete mode 100644 internal/ccall/gvc/gvrender.c delete mode 100644 internal/ccall/gvc/gvtextlayout.c delete mode 100644 internal/ccall/gvc/gvtool_tred.c delete mode 100644 internal/ccall/gvc/gvusershape.c delete mode 100644 internal/ccall/gvpr/actions.c delete mode 100644 internal/ccall/gvpr/actions.h delete mode 100644 internal/ccall/gvpr/compile.c delete mode 100644 internal/ccall/gvpr/compile.h delete mode 100644 internal/ccall/gvpr/dummy.go delete mode 100644 internal/ccall/gvpr/gdefs.h delete mode 100644 internal/ccall/gvpr/gprdata delete mode 100644 internal/ccall/gvpr/gprstate.c delete mode 100644 internal/ccall/gvpr/gprstate.h delete mode 100644 internal/ccall/gvpr/gvpr.c delete mode 100644 internal/ccall/gvpr/gvpr.h delete mode 100644 internal/ccall/gvpr/mkdefs.c delete mode 100644 internal/ccall/gvpr/parse.c delete mode 100644 internal/ccall/gvpr/parse.h delete mode 100644 internal/ccall/gvpr/queue.c delete mode 100644 internal/ccall/gvpr/queue.h delete mode 100644 internal/ccall/gvpr/trie.c delete mode 100644 internal/ccall/gvpr/trieFA.h delete mode 100644 internal/ccall/ingraphs/dummy.go delete mode 100644 internal/ccall/ingraphs/ingraphs.c delete mode 100644 internal/ccall/ingraphs/ingraphs.h delete mode 100644 internal/ccall/label.c delete mode 100644 internal/ccall/label/dummy.go delete mode 100644 internal/ccall/label/index.c delete mode 100644 internal/ccall/label/index.h delete mode 100644 internal/ccall/label/node.c delete mode 100644 internal/ccall/label/node.h delete mode 100644 internal/ccall/label/nrtmain.c delete mode 100644 internal/ccall/label/rectangle.c delete mode 100644 internal/ccall/label/rectangle.h delete mode 100644 internal/ccall/label/split.q.c delete mode 100644 internal/ccall/label/split.q.h delete mode 100644 internal/ccall/label/xlabels.c delete mode 100644 internal/ccall/label/xlabels.h delete mode 100644 internal/ccall/mingle/agglomerative_bundling.c delete mode 100644 internal/ccall/mingle/agglomerative_bundling.h delete mode 100644 internal/ccall/mingle/dummy.go delete mode 100644 internal/ccall/mingle/edge_bundling.c delete mode 100644 internal/ccall/mingle/edge_bundling.h delete mode 100644 internal/ccall/mingle/ink.c delete mode 100644 internal/ccall/mingle/ink.h delete mode 100644 internal/ccall/mingle/nearest_neighbor_graph.c delete mode 100644 internal/ccall/mingle/nearest_neighbor_graph.h delete mode 100644 internal/ccall/mingle/nearest_neighbor_graph_ann.cpp delete mode 100644 internal/ccall/mingle/nearest_neighbor_graph_ann.h delete mode 100644 internal/ccall/neatogen.c delete mode 100644 internal/ccall/neatogen/adjust.c delete mode 100644 internal/ccall/neatogen/adjust.h delete mode 100644 internal/ccall/neatogen/bfs.c delete mode 100644 internal/ccall/neatogen/bfs.h delete mode 100644 internal/ccall/neatogen/call_tri.c delete mode 100644 internal/ccall/neatogen/call_tri.h delete mode 100644 internal/ccall/neatogen/circuit.c delete mode 100644 internal/ccall/neatogen/closest.c delete mode 100644 internal/ccall/neatogen/closest.h delete mode 100644 internal/ccall/neatogen/compute_hierarchy.c delete mode 100644 internal/ccall/neatogen/conjgrad.c delete mode 100644 internal/ccall/neatogen/conjgrad.h delete mode 100644 internal/ccall/neatogen/constrained_majorization.c delete mode 100644 internal/ccall/neatogen/constrained_majorization_ipsep.c delete mode 100644 internal/ccall/neatogen/constraint.c delete mode 100644 internal/ccall/neatogen/defs.h delete mode 100644 internal/ccall/neatogen/delaunay.c delete mode 100644 internal/ccall/neatogen/delaunay.h delete mode 100644 internal/ccall/neatogen/digcola.h delete mode 100644 internal/ccall/neatogen/dijkstra.c delete mode 100644 internal/ccall/neatogen/dijkstra.h delete mode 100644 internal/ccall/neatogen/dummy.go delete mode 100644 internal/ccall/neatogen/edges.c delete mode 100644 internal/ccall/neatogen/edges.h delete mode 100644 internal/ccall/neatogen/embed_graph.c delete mode 100644 internal/ccall/neatogen/embed_graph.h delete mode 100644 internal/ccall/neatogen/fPQ.h delete mode 100644 internal/ccall/neatogen/geometry.c delete mode 100644 internal/ccall/neatogen/geometry.h delete mode 100644 internal/ccall/neatogen/heap.c delete mode 100644 internal/ccall/neatogen/heap.h delete mode 100644 internal/ccall/neatogen/hedges.c delete mode 100644 internal/ccall/neatogen/hedges.h delete mode 100644 internal/ccall/neatogen/info.c delete mode 100644 internal/ccall/neatogen/info.h delete mode 100644 internal/ccall/neatogen/kkutils.c delete mode 100644 internal/ccall/neatogen/kkutils.h delete mode 100644 internal/ccall/neatogen/legal.c delete mode 100644 internal/ccall/neatogen/lu.c delete mode 100644 internal/ccall/neatogen/matinv.c delete mode 100644 internal/ccall/neatogen/matrix_ops.c delete mode 100644 internal/ccall/neatogen/matrix_ops.h delete mode 100644 internal/ccall/neatogen/mem.h delete mode 100644 internal/ccall/neatogen/memory.c delete mode 100644 internal/ccall/neatogen/mosek_quad_solve.c delete mode 100644 internal/ccall/neatogen/mosek_quad_solve.h delete mode 100644 internal/ccall/neatogen/multispline.c delete mode 100644 internal/ccall/neatogen/multispline.h delete mode 100644 internal/ccall/neatogen/neato.h delete mode 100644 internal/ccall/neatogen/neatoinit.c delete mode 100644 internal/ccall/neatogen/neatoprocs.h delete mode 100644 internal/ccall/neatogen/neatosplines.c delete mode 100644 internal/ccall/neatogen/opt_arrangement.c delete mode 100644 internal/ccall/neatogen/overlap.c delete mode 100644 internal/ccall/neatogen/overlap.h delete mode 100644 internal/ccall/neatogen/pca.c delete mode 100644 internal/ccall/neatogen/pca.h delete mode 100644 internal/ccall/neatogen/poly.c delete mode 100644 internal/ccall/neatogen/poly.h delete mode 100644 internal/ccall/neatogen/printvis.c delete mode 100644 internal/ccall/neatogen/quad_prog_solve.c delete mode 100644 internal/ccall/neatogen/quad_prog_solver.h delete mode 100644 internal/ccall/neatogen/quad_prog_vpsc.c delete mode 100644 internal/ccall/neatogen/quad_prog_vpsc.h delete mode 100644 internal/ccall/neatogen/site.c delete mode 100644 internal/ccall/neatogen/site.h delete mode 100644 internal/ccall/neatogen/smart_ini_x.c delete mode 100644 internal/ccall/neatogen/solve.c delete mode 100644 internal/ccall/neatogen/sparsegraph.h delete mode 100644 internal/ccall/neatogen/stress.c delete mode 100644 internal/ccall/neatogen/stress.h delete mode 100644 internal/ccall/neatogen/stuff.c delete mode 100644 internal/ccall/neatogen/voronoi.c delete mode 100644 internal/ccall/neatogen/voronoi.h delete mode 100644 internal/ccall/ortho.c delete mode 100644 internal/ccall/ortho/dummy.go delete mode 100644 internal/ccall/ortho/fPQ.c delete mode 100644 internal/ccall/ortho/fPQ.h delete mode 100644 internal/ccall/ortho/maze.c delete mode 100644 internal/ccall/ortho/maze.h delete mode 100644 internal/ccall/ortho/ortho.c delete mode 100644 internal/ccall/ortho/ortho.h delete mode 100644 internal/ccall/ortho/partition.c delete mode 100644 internal/ccall/ortho/partition.h delete mode 100644 internal/ccall/ortho/rawgraph.c delete mode 100644 internal/ccall/ortho/rawgraph.h delete mode 100644 internal/ccall/ortho/sgraph.c delete mode 100644 internal/ccall/ortho/sgraph.h delete mode 100644 internal/ccall/ortho/structures.h delete mode 100644 internal/ccall/ortho/trap.h delete mode 100644 internal/ccall/ortho/trapezoid.c delete mode 100644 internal/ccall/osage.c delete mode 100644 internal/ccall/osage/dummy.go delete mode 100644 internal/ccall/osage/osage.h delete mode 100644 internal/ccall/osage/osageinit.c delete mode 100644 internal/ccall/pack.c delete mode 100644 internal/ccall/pack/ccomps.c delete mode 100644 internal/ccall/pack/dummy.go delete mode 100644 internal/ccall/pack/pack.c delete mode 100644 internal/ccall/pack/pack.h delete mode 100644 internal/ccall/pack/ptest.c delete mode 100644 internal/ccall/patchwork.c delete mode 100644 internal/ccall/patchwork/dummy.go delete mode 100644 internal/ccall/patchwork/patchwork.c delete mode 100644 internal/ccall/patchwork/patchwork.h delete mode 100644 internal/ccall/patchwork/patchworkinit.c delete mode 100644 internal/ccall/patchwork/tree_map.c delete mode 100644 internal/ccall/patchwork/tree_map.h delete mode 100644 internal/ccall/pathplan.c delete mode 100644 internal/ccall/pathplan/cvt.c delete mode 100644 internal/ccall/pathplan/dummy.go delete mode 100644 internal/ccall/pathplan/inpoly.c delete mode 100644 internal/ccall/pathplan/path.lefty delete mode 100644 internal/ccall/pathplan/pathgeom.h delete mode 100644 internal/ccall/pathplan/pathplan.h delete mode 100644 internal/ccall/pathplan/pathutil.h delete mode 100644 internal/ccall/pathplan/route.c delete mode 100644 internal/ccall/pathplan/shortest.c delete mode 100644 internal/ccall/pathplan/shortestpth.c delete mode 100644 internal/ccall/pathplan/solvers.c delete mode 100644 internal/ccall/pathplan/solvers.h delete mode 100644 internal/ccall/pathplan/tri.h delete mode 100644 internal/ccall/pathplan/triang.c delete mode 100644 internal/ccall/pathplan/util.c delete mode 100644 internal/ccall/pathplan/vis.h delete mode 100644 internal/ccall/pathplan/visibility.c delete mode 100644 internal/ccall/pathplan/vispath.h delete mode 100644 internal/ccall/plugin.c delete mode 100644 internal/ccall/rbtree.c delete mode 100644 internal/ccall/rbtree/dummy.go delete mode 100755 internal/ccall/rbtree/misc.c delete mode 100755 internal/ccall/rbtree/misc.h delete mode 100755 internal/ccall/rbtree/red_black_tree.c delete mode 100755 internal/ccall/rbtree/red_black_tree.h delete mode 100755 internal/ccall/rbtree/simple_test.sh delete mode 100755 internal/ccall/rbtree/stack.c delete mode 100755 internal/ccall/rbtree/stack.h delete mode 100755 internal/ccall/rbtree/test_red_black_tree.c delete mode 100644 internal/ccall/sfdpgen.c delete mode 100644 internal/ccall/sfdpgen/Multilevel.c delete mode 100644 internal/ccall/sfdpgen/Multilevel.h delete mode 100644 internal/ccall/sfdpgen/PriorityQueue.c delete mode 100644 internal/ccall/sfdpgen/PriorityQueue.h delete mode 100644 internal/ccall/sfdpgen/dummy.go delete mode 100644 internal/ccall/sfdpgen/post_process.c delete mode 100644 internal/ccall/sfdpgen/post_process.h delete mode 100644 internal/ccall/sfdpgen/sfdp.h delete mode 100644 internal/ccall/sfdpgen/sfdpinit.c delete mode 100644 internal/ccall/sfdpgen/sfdpinternal.h delete mode 100644 internal/ccall/sfdpgen/sparse_solve.c delete mode 100644 internal/ccall/sfdpgen/sparse_solve.h delete mode 100644 internal/ccall/sfdpgen/spring_electrical.c delete mode 100644 internal/ccall/sfdpgen/spring_electrical.h delete mode 100644 internal/ccall/sfdpgen/stress_model.c delete mode 100644 internal/ccall/sfdpgen/stress_model.h delete mode 100644 internal/ccall/sfdpgen/uniform_stress.c delete mode 100644 internal/ccall/sfdpgen/uniform_stress.h delete mode 100644 internal/ccall/sfio/README delete mode 100644 internal/ccall/sfio/Sfio_f/_sfclrerr.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfdlen.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfeof.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sferror.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sffileno.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfgetc.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfllen.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfputc.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfputd.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfputl.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfputm.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfputu.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfslen.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfstacked.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfulen.c delete mode 100644 internal/ccall/sfio/Sfio_f/_sfvalue.c delete mode 100644 internal/ccall/sfio/Sfio_f/dummy.go delete mode 100644 internal/ccall/sfio/dummy.go delete mode 100644 internal/ccall/sfio/sfclose.c delete mode 100644 internal/ccall/sfio/sfclrlock.c delete mode 100644 internal/ccall/sfio/sfcvt.c delete mode 100644 internal/ccall/sfio/sfdisc.c delete mode 100644 internal/ccall/sfio/sfdlen.c delete mode 100644 internal/ccall/sfio/sfexcept.c delete mode 100644 internal/ccall/sfio/sfexit.c delete mode 100644 internal/ccall/sfio/sfextern.c delete mode 100644 internal/ccall/sfio/sffcvt.c delete mode 100644 internal/ccall/sfio/sffilbuf.c delete mode 100644 internal/ccall/sfio/sfflsbuf.c delete mode 100644 internal/ccall/sfio/sfgetd.c delete mode 100644 internal/ccall/sfio/sfgetl.c delete mode 100644 internal/ccall/sfio/sfgetm.c delete mode 100644 internal/ccall/sfio/sfgetr.c delete mode 100644 internal/ccall/sfio/sfgetu.c delete mode 100644 internal/ccall/sfio/sfhdr.h delete mode 100644 internal/ccall/sfio/sfio.h delete mode 100644 internal/ccall/sfio/sfio_t.h delete mode 100644 internal/ccall/sfio/sfllen.c delete mode 100644 internal/ccall/sfio/sfmode.c delete mode 100644 internal/ccall/sfio/sfmove.c delete mode 100644 internal/ccall/sfio/sfmutex.c delete mode 100644 internal/ccall/sfio/sfnew.c delete mode 100644 internal/ccall/sfio/sfnotify.c delete mode 100644 internal/ccall/sfio/sfnputc.c delete mode 100644 internal/ccall/sfio/sfopen.c delete mode 100644 internal/ccall/sfio/sfpkrd.c delete mode 100644 internal/ccall/sfio/sfpoll.c delete mode 100644 internal/ccall/sfio/sfpool.c delete mode 100644 internal/ccall/sfio/sfpopen.c delete mode 100644 internal/ccall/sfio/sfprintf.c delete mode 100644 internal/ccall/sfio/sfprints.c delete mode 100644 internal/ccall/sfio/sfpurge.c delete mode 100644 internal/ccall/sfio/sfputd.c delete mode 100644 internal/ccall/sfio/sfputl.c delete mode 100644 internal/ccall/sfio/sfputm.c delete mode 100644 internal/ccall/sfio/sfputr.c delete mode 100644 internal/ccall/sfio/sfputu.c delete mode 100644 internal/ccall/sfio/sfraise.c delete mode 100644 internal/ccall/sfio/sfrd.c delete mode 100644 internal/ccall/sfio/sfread.c delete mode 100644 internal/ccall/sfio/sfreserve.c delete mode 100644 internal/ccall/sfio/sfresize.c delete mode 100644 internal/ccall/sfio/sfscanf.c delete mode 100644 internal/ccall/sfio/sfseek.c delete mode 100644 internal/ccall/sfio/sfset.c delete mode 100644 internal/ccall/sfio/sfsetbuf.c delete mode 100644 internal/ccall/sfio/sfsetfd.c delete mode 100644 internal/ccall/sfio/sfsize.c delete mode 100644 internal/ccall/sfio/sfsk.c delete mode 100644 internal/ccall/sfio/sfstack.c delete mode 100644 internal/ccall/sfio/sfstrtod.c delete mode 100644 internal/ccall/sfio/sfswap.c delete mode 100644 internal/ccall/sfio/sfsync.c delete mode 100644 internal/ccall/sfio/sftable.c delete mode 100644 internal/ccall/sfio/sftell.c delete mode 100644 internal/ccall/sfio/sftmp.c delete mode 100644 internal/ccall/sfio/sfungetc.c delete mode 100644 internal/ccall/sfio/sfvprintf.c delete mode 100644 internal/ccall/sfio/sfvscanf.c delete mode 100644 internal/ccall/sfio/sfwr.c delete mode 100644 internal/ccall/sfio/sfwrite.c delete mode 100644 internal/ccall/sfio/vthread.h delete mode 100644 internal/ccall/sparse.c delete mode 100644 internal/ccall/sparse/BinaryHeap.c delete mode 100644 internal/ccall/sparse/BinaryHeap.h delete mode 100644 internal/ccall/sparse/DotIO.c delete mode 100644 internal/ccall/sparse/DotIO.h delete mode 100644 internal/ccall/sparse/IntStack.c delete mode 100644 internal/ccall/sparse/IntStack.h delete mode 100644 internal/ccall/sparse/LinkedList.c delete mode 100644 internal/ccall/sparse/LinkedList.h delete mode 100644 internal/ccall/sparse/QuadTree.c delete mode 100644 internal/ccall/sparse/QuadTree.h delete mode 100644 internal/ccall/sparse/SparseMatrix.c delete mode 100644 internal/ccall/sparse/SparseMatrix.h delete mode 100644 internal/ccall/sparse/clustering.c delete mode 100644 internal/ccall/sparse/clustering.h delete mode 100644 internal/ccall/sparse/color_palette.c delete mode 100644 internal/ccall/sparse/color_palette.h delete mode 100644 internal/ccall/sparse/colorutil.c delete mode 100644 internal/ccall/sparse/colorutil.h delete mode 100644 internal/ccall/sparse/dummy.go delete mode 100644 internal/ccall/sparse/general.c delete mode 100644 internal/ccall/sparse/general.h delete mode 100644 internal/ccall/sparse/mq.c delete mode 100644 internal/ccall/sparse/mq.h delete mode 100644 internal/ccall/sparse/vector.c delete mode 100644 internal/ccall/sparse/vector.h delete mode 100644 internal/ccall/spine/dummy.go delete mode 100644 internal/ccall/spine/quad.c delete mode 100644 internal/ccall/spine/quad.h delete mode 100644 internal/ccall/spine/spine.c delete mode 100644 internal/ccall/spine/spine.h delete mode 100644 internal/ccall/spine/spinehdr.h delete mode 100644 internal/ccall/spine/subset.c delete mode 100644 internal/ccall/spine/subset.h delete mode 100644 internal/ccall/spine/union_find.c delete mode 100644 internal/ccall/spine/union_find.h delete mode 100644 internal/ccall/topfish/dummy.go delete mode 100644 internal/ccall/topfish/hierarchy.c delete mode 100644 internal/ccall/topfish/hierarchy.h delete mode 100644 internal/ccall/topfish/rescale_layout.c delete mode 100644 internal/ccall/twopigen.c delete mode 100644 internal/ccall/twopigen/circle.c delete mode 100644 internal/ccall/twopigen/circle.h delete mode 100644 internal/ccall/twopigen/dummy.go delete mode 100644 internal/ccall/twopigen/twopiinit.c delete mode 100644 internal/ccall/vmalloc/README delete mode 100644 internal/ccall/vmalloc/dummy.go delete mode 100644 internal/ccall/vmalloc/malloc.c delete mode 100644 internal/ccall/vmalloc/vmalloc.h delete mode 100644 internal/ccall/vmalloc/vmbest.c delete mode 100644 internal/ccall/vmalloc/vmclear.c delete mode 100644 internal/ccall/vmalloc/vmclose.c delete mode 100644 internal/ccall/vmalloc/vmdcheap.c delete mode 100644 internal/ccall/vmalloc/vmdebug.c delete mode 100644 internal/ccall/vmalloc/vmdisc.c delete mode 100644 internal/ccall/vmalloc/vmhdr.h delete mode 100644 internal/ccall/vmalloc/vmlast.c delete mode 100644 internal/ccall/vmalloc/vmopen.c delete mode 100644 internal/ccall/vmalloc/vmpool.c delete mode 100644 internal/ccall/vmalloc/vmprivate.c delete mode 100644 internal/ccall/vmalloc/vmprofile.c delete mode 100644 internal/ccall/vmalloc/vmregion.c delete mode 100644 internal/ccall/vmalloc/vmsegment.c delete mode 100644 internal/ccall/vmalloc/vmset.c delete mode 100644 internal/ccall/vmalloc/vmstat.c delete mode 100644 internal/ccall/vmalloc/vmstrdup.c delete mode 100644 internal/ccall/vmalloc/vmtrace.c delete mode 100644 internal/ccall/vmalloc/vmwalk.c delete mode 100644 internal/ccall/vpsc/block.cpp delete mode 100644 internal/ccall/vpsc/block.h delete mode 100644 internal/ccall/vpsc/blocks.cpp delete mode 100644 internal/ccall/vpsc/blocks.h delete mode 100644 internal/ccall/vpsc/constraint.cpp delete mode 100644 internal/ccall/vpsc/constraint.h delete mode 100644 internal/ccall/vpsc/csolve_VPSC.cpp delete mode 100644 internal/ccall/vpsc/csolve_VPSC.h delete mode 100644 internal/ccall/vpsc/dummy.go delete mode 100644 internal/ccall/vpsc/generate-constraints.cpp delete mode 100644 internal/ccall/vpsc/generate-constraints.h delete mode 100644 internal/ccall/vpsc/pairingheap/PairingHeap.cpp delete mode 100644 internal/ccall/vpsc/pairingheap/PairingHeap.h delete mode 100644 internal/ccall/vpsc/pairingheap/dsexceptions.h delete mode 100644 internal/ccall/vpsc/pairingheap/dummy.go delete mode 100644 internal/ccall/vpsc/remove_rectangle_overlap.cpp delete mode 100644 internal/ccall/vpsc/remove_rectangle_overlap.h delete mode 100644 internal/ccall/vpsc/solve_VPSC.cpp delete mode 100644 internal/ccall/vpsc/solve_VPSC.h delete mode 100644 internal/ccall/vpsc/variable.cpp delete mode 100644 internal/ccall/vpsc/variable.h delete mode 100644 internal/ccall/xdot.c delete mode 100644 internal/ccall/xdot/dummy.go delete mode 100755 internal/ccall/xdot/xdot.c delete mode 100755 internal/ccall/xdot/xdot.h delete mode 100644 internal/compat.h delete mode 100644 internal/config.h delete mode 100644 internal/config.h.in delete mode 100644 internal/dummy.go delete mode 100644 internal/expat/ascii.h delete mode 100644 internal/expat/asciitab.h delete mode 100644 internal/expat/dummy.go delete mode 100644 internal/expat/expat.h delete mode 100644 internal/expat/expat_config.h delete mode 100644 internal/expat/expat_external.h delete mode 100644 internal/expat/iasciitab.h delete mode 100644 internal/expat/internal.h delete mode 100644 internal/expat/latin1tab.h delete mode 100644 internal/expat/nametab.h delete mode 100644 internal/expat/siphash.h delete mode 100644 internal/expat/utf8tab.h delete mode 100644 internal/expat/winconfig.h delete mode 100644 internal/expat/xmlparse.c delete mode 100644 internal/expat/xmlrole.c delete mode 100644 internal/expat/xmlrole.h delete mode 100644 internal/expat/xmltok.c delete mode 100644 internal/expat/xmltok.h delete mode 100644 internal/expat/xmltok_impl.c delete mode 100644 internal/expat/xmltok_impl.h delete mode 100644 internal/expat/xmltok_ns.c delete mode 100644 internal/graphviz_version.h delete mode 100644 internal/plugin/core/dummy.go delete mode 100644 internal/plugin/core/gvloadimage_core.c delete mode 100644 internal/plugin/core/gvplugin_core.c delete mode 100644 internal/plugin/core/gvrender_core_dot.c delete mode 100644 internal/plugin/core/gvrender_core_fig.c delete mode 100644 internal/plugin/core/gvrender_core_json.c delete mode 100644 internal/plugin/core/gvrender_core_map.c delete mode 100644 internal/plugin/core/gvrender_core_mp.c delete mode 100644 internal/plugin/core/gvrender_core_pic.c delete mode 100644 internal/plugin/core/gvrender_core_pov.c delete mode 100644 internal/plugin/core/gvrender_core_ps.c delete mode 100644 internal/plugin/core/gvrender_core_svg.c delete mode 100644 internal/plugin/core/gvrender_core_tk.c delete mode 100644 internal/plugin/core/gvrender_core_vml.c delete mode 100644 internal/plugin/core/ps.h delete mode 100644 internal/plugin/devil/dummy.go delete mode 100644 internal/plugin/devil/gvdevice_devil.c delete mode 100644 internal/plugin/devil/gvplugin_devil.c delete mode 100644 internal/plugin/dot_layout/dummy.go delete mode 100644 internal/plugin/dot_layout/gvlayout_dot_layout.c delete mode 100644 internal/plugin/dot_layout/gvplugin_dot_layout.c delete mode 100644 internal/plugin/gd/dummy.go delete mode 100644 internal/plugin/gd/gvdevice_gd.c delete mode 100644 internal/plugin/gd/gvloadimage_gd.c delete mode 100644 internal/plugin/gd/gvplugin_gd.c delete mode 100644 internal/plugin/gd/gvrender_gd.c delete mode 100644 internal/plugin/gd/gvrender_gd_vrml.c delete mode 100644 internal/plugin/gd/gvtextlayout_gd.c delete mode 100644 internal/plugin/gdiplus/FileStream.cpp delete mode 100644 internal/plugin/gdiplus/FileStream.h delete mode 100644 internal/plugin/gdiplus/dummy.go delete mode 100755 internal/plugin/gdiplus/gvdevice_gdiplus.cpp delete mode 100755 internal/plugin/gdiplus/gvloadimage_gdiplus.cpp delete mode 100755 internal/plugin/gdiplus/gvplugin_gdiplus.cpp delete mode 100755 internal/plugin/gdiplus/gvplugin_gdiplus.h delete mode 100755 internal/plugin/gdiplus/gvrender_gdiplus.cpp delete mode 100755 internal/plugin/gdiplus/gvtextlayout_gdiplus.cpp delete mode 100644 internal/plugin/gdk/dummy.go delete mode 100644 internal/plugin/gdk/gvdevice_gdk.c delete mode 100644 internal/plugin/gdk/gvloadimage_gdk.c delete mode 100644 internal/plugin/gdk/gvplugin_gdk.c delete mode 100644 internal/plugin/glitz/dummy.go delete mode 100644 internal/plugin/glitz/gvdevice_glitz.c delete mode 100644 internal/plugin/glitz/gvplugin_glitz.c delete mode 100644 internal/plugin/gs/dummy.go delete mode 100644 internal/plugin/gs/gvloadimage_gs.c delete mode 100644 internal/plugin/gs/gvplugin_gs.c delete mode 100644 internal/plugin/gtk/callbacks.c delete mode 100644 internal/plugin/gtk/callbacks.h delete mode 100644 internal/plugin/gtk/dummy.go delete mode 100644 internal/plugin/gtk/gvdevice_gtk.c delete mode 100644 internal/plugin/gtk/gvplugin_gtk.c delete mode 100644 internal/plugin/gtk/interface.c delete mode 100644 internal/plugin/gtk/interface.h delete mode 100644 internal/plugin/gtk/support.c delete mode 100644 internal/plugin/gtk/support.h delete mode 100644 internal/plugin/lasi/dummy.go delete mode 100644 internal/plugin/lasi/gvloadimage_lasi.c delete mode 100644 internal/plugin/lasi/gvplugin_lasi.c delete mode 100644 internal/plugin/lasi/gvrender_lasi.cpp delete mode 100644 internal/plugin/lasi/ps.h delete mode 100644 internal/plugin/ming/Bitstream_Vera_Sans.fdb delete mode 100644 internal/plugin/ming/Bitstream_Vera_Serif.fdb delete mode 100644 internal/plugin/ming/dummy.go delete mode 100644 internal/plugin/ming/gvplugin_ming.c delete mode 100644 internal/plugin/ming/gvrender_ming.c delete mode 100644 internal/plugin/neato_layout/dummy.go delete mode 100644 internal/plugin/neato_layout/gvlayout_neato_layout.c delete mode 100644 internal/plugin/neato_layout/gvplugin_neato_layout.c delete mode 100644 internal/plugin/pango/dummy.go delete mode 100644 internal/plugin/pango/gvgetfontlist.h delete mode 100644 internal/plugin/pango/gvgetfontlist_pango.c delete mode 100644 internal/plugin/pango/gvloadimage_pango.c delete mode 100644 internal/plugin/pango/gvplugin_pango.c delete mode 100644 internal/plugin/pango/gvplugin_pango.h delete mode 100644 internal/plugin/pango/gvrender_pango.c delete mode 100644 internal/plugin/pango/gvtextlayout_pango.c delete mode 100644 internal/plugin/poppler/dummy.go delete mode 100644 internal/plugin/poppler/gvloadimage_poppler.c delete mode 100644 internal/plugin/poppler/gvplugin_poppler.c delete mode 100644 internal/plugin/quartz/GVTextLayout.h delete mode 100644 internal/plugin/quartz/GVTextLayout.m delete mode 100644 internal/plugin/quartz/dummy.go delete mode 100644 internal/plugin/quartz/gvdevice_quartz.c delete mode 100644 internal/plugin/quartz/gvloadimage_quartz.c delete mode 100644 internal/plugin/quartz/gvplugin_quartz.c delete mode 100644 internal/plugin/quartz/gvplugin_quartz.h delete mode 100644 internal/plugin/quartz/gvrender_quartz.c delete mode 100644 internal/plugin/quartz/gvtextlayout_quartz.c delete mode 100644 internal/plugin/rsvg/dummy.go delete mode 100644 internal/plugin/rsvg/gvloadimage_rsvg.c delete mode 100644 internal/plugin/rsvg/gvplugin_rsvg.c delete mode 100644 internal/plugin/visio/VisioGraphic.cpp delete mode 100644 internal/plugin/visio/VisioGraphic.h delete mode 100644 internal/plugin/visio/VisioRender.cpp delete mode 100644 internal/plugin/visio/VisioRender.h delete mode 100644 internal/plugin/visio/VisioText.cpp delete mode 100644 internal/plugin/visio/VisioText.h delete mode 100644 internal/plugin/visio/dummy.go delete mode 100644 internal/plugin/visio/gvplugin_visio.c delete mode 100644 internal/plugin/visio/gvrender_visio_vdx.cpp delete mode 100644 internal/plugin/webp/dummy.go delete mode 100644 internal/plugin/webp/gvdevice_webp.c delete mode 100644 internal/plugin/webp/gvloadimage_webp.c delete mode 100644 internal/plugin/webp/gvplugin_webp.c delete mode 100644 internal/plugin/xlib/dummy.go delete mode 100644 internal/plugin/xlib/gvdevice_xlib.c delete mode 100644 internal/plugin/xlib/gvplugin_xlib.c create mode 100644 internal/tools/nori/Makefile create mode 100644 internal/tools/nori/buf.gen.yaml create mode 100644 internal/tools/nori/buf.work.yaml create mode 100644 internal/tools/nori/cmd/protoc-gen-nori/main.go create mode 100644 internal/tools/nori/generate_c.go create mode 100644 internal/tools/nori/generate_go.go create mode 100644 internal/tools/nori/generator.go create mode 100644 internal/tools/nori/go.mod create mode 100644 internal/tools/nori/go.sum create mode 100644 internal/tools/nori/nori/nori.pb.go create mode 100644 internal/tools/nori/nori_test.go create mode 100644 internal/tools/nori/proto/nori/nori.proto create mode 100644 internal/tools/nori/protocompiler.go create mode 100644 internal/tools/nori/templates/bind.c.tmpl create mode 100644 internal/tools/nori/templates/bind.go.tmpl create mode 100644 internal/wasm/bind.go create mode 100644 internal/wasm/bind.proto create mode 100644 internal/wasm/build/Dockerfile create mode 100644 internal/wasm/build/Makefile create mode 100644 internal/wasm/build/bind.c create mode 100644 internal/wasm/build/patch.c create mode 100644 internal/wasm/ext.go create mode 100755 internal/wasm/graphviz.wasm diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 9290fb1..820e9bd 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - go-version: [ "1.20", "1.21" ] + go-version: [ "1.21", "1.22" ] runs-on: ${{ matrix.os }} steps: - name: checkout @@ -20,7 +20,7 @@ jobs: with: go-version: ${{ matrix.go-version }} - name: build dot command - run: go build -v cmd/dot/dot.go + run: cd ./cmd/dot && go build -v . - name: test if: ${{ matrix.os != 'windows-latest' }} run: go test -race -v ./... diff --git a/.gitignore b/.gitignore index 5761abc..9fb747b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ *.o +*.svg +*.png +*.jpg +.DS_Store +bin diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2909189 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +export + +CONTAINER_NAME := graphviz-wasm +IMAGE_NAME := graphviz-wasm +GOBIN := $(PWD)/bin +PATH := $(GOBIN):internal/tools/nori/bin:$(PATH) + +.PHONY: tools +tools: nori + go install github.com/bufbuild/buf/cmd/buf@v1.32.2 + +fmt/buf: + buf format --write + +generate/wasm: container/build + $(eval CONTAINER_ID := $(shell docker create graphviz-wasm)) + docker cp "$(CONTAINER_ID):/work/graphviz.wasm" ./internal/wasm/graphviz.wasm + +container/build: + docker build ./internal/wasm/build -t $(IMAGE_NAME) --build-arg GRAPHVIZ_VERSION=$(shell cat graphviz.version) + +container/prune: + docker container prune + +.PHONY: generate/buf +generate/buf: + $(GOBIN)/buf generate + mv bind.c internal/wasm/build + mv bind.go internal/wasm/ + +.PHONY: nori +nori: + make build -C ./internal/tools/nori diff --git a/README.md b/README.md index 77ae89b..ab594d8 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,30 @@ # go-graphviz [![Go](https://github.com/goccy/go-graphviz/workflows/Go/badge.svg)](https://github.com/goccy/go-graphviz/actions) [![GoDoc](https://godoc.org/github.com/goccy/go-graphviz?status.svg)](https://pkg.go.dev/github.com/goccy/go-graphviz) -Go bindings for Graphviz ( port of version `2.40.1` ) +Go bindings for Graphviz # Features +Graphviz version is [here](./graphviz.version) + +- Pure Go Library - No need to install Graphviz library ( ~`brew install graphviz`~ or ~`apt-get install graphviz`~ ) -- Supports parsing for DOT language -- Supports rendering graph in pure Go -- Supports switch renderer to your own -- Supports type safed property setting -- `gvc` `cgraph` `cdt` are available as sub package + - The Graphviz library has been converted to WebAssembly (WASM) and embedded it, so it works consistently across all environments +- Supports encoding/decoding for DOT language +- Supports custom renderer for custom format +- Supports setting graph properties in a type-safe manner -## Currently supported Layout +## Supported Layout `circo` `dot` `fdp` `neato` `nop` `nop1` `nop2` `osage` `patchwork` `sfdp` `twopi` -## Currently supported format +## Supported Format `dot` `svg` `png` `jpg` +The above are the formats supported by default. You can also add custom formats. + # Installation ```bash @@ -43,32 +47,28 @@ import ( ) func main() { - g := graphviz.New() + ctx := context.Background() + g, err := graphviz.New(ctx) + if err != nil { panic(err )} + graph, err := g.Graph() - if err != nil { - log.Fatal(err) - } + if err != nil { panic(err) } defer func() { - if err := graph.Close(); err != nil { - log.Fatal(err) - } + if err := graph.Close(); err != nil { panic(err) } g.Close() }() - n, err := graph.CreateNode("n") - if err != nil { - log.Fatal(err) - } - m, err := graph.CreateNode("m") - if err != nil { - log.Fatal(err) - } - e, err := graph.CreateEdge("e", n, m) - if err != nil { - log.Fatal(err) - } + n, err := graph.CreateNodeByName("n") + if err != nil { panic(err) } + + m, err := graph.CreateNodeByName("m") + if err != nil { panic(err) } + + e, err := graph.CreateEdgeByName("e", n, m) + if err != nil { panic(err) } e.SetLabel("e") + var buf bytes.Buffer - if err := g.Render(graph, "dot", &buf); err != nil { + if err := g.Render(ctx, graph, "dot", &buf); err != nil { log.Fatal(err) } fmt.Println(buf.String()) @@ -79,40 +79,33 @@ func main() { ```go path := "/path/to/dot.gv" -b, err := ioutil.ReadFile(path) -if err != nil { - log.Fatal(err) -} +b, err := os.ReadFile(path) +if err != nil { panic(err) } graph, err := graphviz.ParseBytes(b) ``` ## 3. Render Graph ```go -g := graphviz.New() +ctx := context.Background() +g, err := graphviz.New(ctx) +if err != nil { panic(err) } + graph, err := g.Graph() -if err != nil { - log.Fatal(err) -} +if err != nil { panic(err) } // create your graph // 1. write encoded PNG data to buffer var buf bytes.Buffer -if err := g.Render(graph, graphviz.PNG, &buf); err != nil { - log.Fatal(err) -} +if err := g.Render(ctx, graph, graphviz.PNG, &buf); err != nil { panic(err) } // 2. get as image.Image instance -image, err := g.RenderImage(graph) -if err != nil { - log.Fatal(err) -} +image, err := g.RenderImage(ctx, graph) +if err != nil { panic(err) } // 3. write to file directly -if err := g.RenderFilename(graph, graphviz.PNG, "/path/to/graph.png"); err != nil { - log.Fatal(err) -} +if err := g.RenderFilename(ctx, graph, graphviz.PNG, "/path/to/graph.png"); err != nil { panic(err) } ``` # Tool @@ -122,7 +115,7 @@ if err := g.RenderFilename(graph, graphviz.PNG, "/path/to/graph.png"); err != ni ### Installation ```bash -$ go get github.com/goccy/go-graphviz/cmd/dot +$ go install github.com/goccy/go-graphviz/cmd/dot@latest ``` ### Usage @@ -142,14 +135,10 @@ Help Options: # How it works - - -`go-graphviz` has four layers. - -1. `graphviz` package provides facade interface for manipulating all features of graphviz library -2. `gvc` `cgraph` `cdt` are sub packages ( FYI: C library section in https://www.graphviz.org/documentation ) -3. `internal/ccall` package provides bridge interface between Go and C -4. `go-graphviz` includes full graphviz sources +1. Generates bindings between Go and C from [Protocol Buffers file](./internal/wasm/bind.proto). +2. Builds graphviz.wasm on the [docker container](./internal/wasm/build/Dockerfile). +3. Uses Graphviz functionality from a sub-packages ( `cdt` `cgraph` `gvc` ) via the `internal/wasm` package. +4. `graphviz` package provides facade interface for all sub packages. # License diff --git a/_examples/rw.go b/_examples/rw.go index 197ade9..d9e93cb 100644 --- a/_examples/rw.go +++ b/_examples/rw.go @@ -2,13 +2,17 @@ package main import ( "bytes" + "context" "log" "github.com/goccy/go-graphviz" ) -func renderDOTGraph() ([]byte, error) { - g := graphviz.New() +func renderDOTGraph(ctx context.Context) ([]byte, error) { + g, err := graphviz.New(ctx) + if err != nil { + return nil, err + } graph, err := g.Graph() if err != nil { return nil, err @@ -19,28 +23,28 @@ func renderDOTGraph() ([]byte, error) { } g.Close() }() - n, err := graph.CreateNode("n") + n, err := graph.CreateNodeByName("n") if err != nil { return nil, err } - m, err := graph.CreateNode("m") + m, err := graph.CreateNodeByName("m") if err != nil { return nil, err } - e, err := graph.CreateEdge("e", n, m) + e, err := graph.CreateEdgeByName("e", n, m) if err != nil { return nil, err } e.SetLabel("e") var buf bytes.Buffer - if err := g.Render(graph, "dot", &buf); err != nil { + if err := g.Render(ctx, graph, "dot", &buf); err != nil { return nil, err } return buf.Bytes(), nil } -func _main() error { - graphBytes, err := renderDOTGraph() +func _main(ctx context.Context) error { + graphBytes, err := renderDOTGraph(ctx) if err != nil { return err } @@ -48,32 +52,35 @@ func _main() error { if err != nil { return err } - n, err := graph.Node("n") + n, err := graph.NodeByName("n") if err != nil { return err } - l, err := graph.CreateNode("l") + l, err := graph.CreateNodeByName("l") if err != nil { return err } - e2, err := graph.CreateEdge("e2", n, l) + e2, err := graph.CreateEdgeByName("e2", n, l) if err != nil { return err } e2.SetLabel("e2") - g := graphviz.New() + g, err := graphviz.New(ctx) + if err != nil { + return err + } defer func() { if err := graph.Close(); err != nil { log.Fatal(err) } g.Close() }() - g.RenderFilename(graph, "png", "rw.png") + g.RenderFilename(ctx, graph, "png", "rw.png") return nil } func main() { - if err := _main(); err != nil { + if err := _main(context.Background()); err != nil { log.Fatalf("%+v", err) } } diff --git a/_examples/simple.go b/_examples/simple.go index 9d7a4f7..cfccfb0 100644 --- a/_examples/simple.go +++ b/_examples/simple.go @@ -2,14 +2,18 @@ package main import ( "bytes" + "context" "fmt" "log" "github.com/goccy/go-graphviz" ) -func _main() error { - g := graphviz.New() +func _main(ctx context.Context) error { + g, err := graphviz.New(ctx) + if err != nil { + return err + } graph, err := g.Graph() if err != nil { return err @@ -20,21 +24,21 @@ func _main() error { } g.Close() }() - n, err := graph.CreateNode("n") + n, err := graph.CreateNodeByName("n") if err != nil { return err } - m, err := graph.CreateNode("m") + m, err := graph.CreateNodeByName("m") if err != nil { return err } - e, err := graph.CreateEdge("e", n, m) + e, err := graph.CreateEdgeByName("e", n, m) if err != nil { return err } e.SetLabel("e") var buf bytes.Buffer - if err := g.Render(graph, "dot", &buf); err != nil { + if err := g.Render(ctx, graph, "dot", &buf); err != nil { log.Fatalf("%+v", err) } fmt.Println(buf.String()) @@ -42,7 +46,7 @@ func _main() error { } func main() { - if err := _main(); err != nil { + if err := _main(context.Background()); err != nil { log.Fatal(err) } } diff --git a/alias.go b/alias.go new file mode 100644 index 0000000..ae33c83 --- /dev/null +++ b/alias.go @@ -0,0 +1,349 @@ +package graphviz + +import ( + "github.com/goccy/go-graphviz/cdt" + "github.com/goccy/go-graphviz/cgraph" + "github.com/goccy/go-graphviz/gvc" +) + +// types from cdt package. +type ( + Dict = cdt.Dict + DictHold = cdt.Hold + DictLink = cdt.Link + DictMethod = cdt.Method + DictData = cdt.Data + DictDisc = cdt.Disc + DictStat = cdt.Stat +) + +// types from cgraph package. +type ( + Graph = cgraph.Graph + Node = cgraph.Node + SubNode = cgraph.SubNode + Edge = cgraph.Edge + GraphDescriptor = cgraph.Desc + ClientDiscipline = cgraph.Disc + Symbol = cgraph.Symbol + Record = cgraph.Record + Tag = cgraph.Tag + Object = cgraph.Object + CommonFields = cgraph.CommonFields + State = cgraph.State + CallbackStack = cgraph.CallbackStack + Attribute = cgraph.Attr + DataDict = cgraph.DataDict + ObjectTag = cgraph.ObjectTag + ID = cgraph.ID + ArrowType = cgraph.ArrowType + ClusterMode = cgraph.ClusterMode + DirType = cgraph.DirType + ImagePos = cgraph.ImagePos + JustType = cgraph.JustType + LabelLocation = cgraph.LabelLocation + ModeType = cgraph.ModeType + ModelType = cgraph.ModelType + OrderingType = cgraph.OrderingType + OutputMode = cgraph.OutputMode + PackMode = cgraph.PackMode + PageDir = cgraph.PageDir + QuadType = cgraph.QuadType + RankDir = cgraph.RankDir + RatioType = cgraph.RatioType + Shape = cgraph.Shape + SmoothType = cgraph.SmoothType + StartType = cgraph.StartType + GraphStyle = cgraph.GraphStyle + NodeStyle = cgraph.NodeStyle + EdgeStyle = cgraph.EdgeStyle +) + +// types from gvc package. +type ( + Plugin = gvc.Plugin + Context = gvc.Context + DevicePlugin = gvc.DevicePlugin + DeviceFeature = gvc.DeviceFeature + DevicePluginOption = gvc.DevicePluginOption + RenderPlugin = gvc.RenderPlugin + RenderEngine = gvc.RenderEngine + DefaultRenderEngine = gvc.DefaultRenderEngine + RenderFeature = gvc.RenderFeature + RenderPluginOption = gvc.RenderPluginOption + ColorType = gvc.ColorType + LabelType = gvc.LabelType + Job = gvc.Job + PointFloat = gvc.PointFloat + TextSpan = gvc.TextSpan + TextFont = gvc.TextFont + PostScriptAlias = gvc.PostScriptAlias + Scale = gvc.Scale + Translation = gvc.Translation + ObjectState = gvc.ObjectState + FillType = gvc.FillType + PenType = gvc.PenType + Color = gvc.Color +) + +// variables from cgraph package. +var ( + Directed = cgraph.Directed + StrictDirected = cgraph.StrictDirected + UnDirected = cgraph.UnDirected + StrictUnDirected = cgraph.StrictUnDirected +) + +// const variables from cgraph package. +const ( + NormalArrow = cgraph.NormalArrow + InvArrow = cgraph.InvArrow + DotArrow = cgraph.DotArrow + InvDotArrow = cgraph.InvDotArrow + ODotArrow = cgraph.ODotArrow + InvODotArrow = cgraph.InvODotArrow + NoneArrow = cgraph.NoneArrow + TeeArrow = cgraph.TeeArrow + EmptyArrow = cgraph.EmptyArrow + InvEmptyArrow = cgraph.InvEmptyArrow + DiamondArrow = cgraph.DiamondArrow + ODiamondArrow = cgraph.ODiamondArrow + EDiamondArrow = cgraph.EDiamondArrow + CrowArrow = cgraph.CrowArrow + BoxArrow = cgraph.BoxArrow + OBoxArrow = cgraph.OBoxArrow + OpenArrow = cgraph.OpenArrow + HalfOpenArrow = cgraph.HalfOpenArrow + VeeArrow = cgraph.VeeArrow +) + +const ( + LocalCluster = cgraph.LocalCluster + GlobalCluster = cgraph.GlobalCluster + NoneCluster = cgraph.NoneCluster +) + +const ( + ForwardDir = cgraph.ForwardDir + BackDir = cgraph.BackDir + BothDir = cgraph.BothDir + NoneDir = cgraph.NoneDir +) + +const ( + TopLeftPos = cgraph.TopLeftPos + TopCenteredPos = cgraph.TopCenteredPos + TopRightPos = cgraph.TopRightPos + MiddleLeftPos = cgraph.MiddleLeftPos + MiddleCenteredPos = cgraph.MiddleCenteredPos + BottomLeftPos = cgraph.BottomLeftPos + BottomCenteredPos = cgraph.BottomCenteredPos + BottomRightPos = cgraph.BottomRightPos +) + +const ( + LeftJust = cgraph.LeftJust + CenteredJust = cgraph.CenteredJust + RightJust = cgraph.RightJust +) + +const ( + TopLocation = cgraph.TopLocation + CenteredLocation = cgraph.CenteredLocation + BottomLocation = cgraph.BottomLocation +) + +const ( + MajorMode = cgraph.MajorMode + KKMode = cgraph.KKMode + HierMode = cgraph.HierMode + IpsepMode = cgraph.IpsepMode + SpringMode = cgraph.SpringMode + MaxentMode = cgraph.MaxentMode +) + +const ( + ShortPathModel = cgraph.ShortPathModel + CircuitModel = cgraph.CircuitModel + SubsetModel = cgraph.SubsetModel + MdsModel = cgraph.MdsModel +) + +const ( + OutOrdering = cgraph.OutOrdering + InOrdering = cgraph.InOrdering +) + +const ( + BreadthFirst = cgraph.BreadthFirst + NodesFirst = cgraph.NodesFirst + EdgesFirst = cgraph.EdgesFirst +) + +const ( + NodePack = cgraph.NodePack + ClusterPack = cgraph.ClusterPack + GraphPack = cgraph.GraphPack +) + +const ( + BLDir = cgraph.BLDir + BRDir = cgraph.BRDir + TLDir = cgraph.TLDir + TRDir = cgraph.TRDir + RBDir = cgraph.RBDir + RTDir = cgraph.RTDir + LBDir = cgraph.LBDir + LTDir = cgraph.LTDir +) + +const ( + NormalQuad = cgraph.NormalQuad + FastQuad = cgraph.FastQuad + NoneQuad = cgraph.NoneQuad +) + +const ( + TBRank = cgraph.TBRank + LRRank = cgraph.LRRank + BTRank = cgraph.BTRank + RLRank = cgraph.RLRank +) + +const ( + FillRatio = cgraph.FillRatio + CompressRatio = cgraph.CompressRatio + ExpandRatio = cgraph.ExpandRatio + AutoRatio = cgraph.AutoRatio +) + +const ( + BoxShape = cgraph.BoxShape + PolygonShape = cgraph.PolygonShape + EllipseShape = cgraph.EllipseShape + OvalShape = cgraph.OvalShape + CircleShape = cgraph.CircleShape + PointShape = cgraph.PointShape + EggShape = cgraph.EggShape + TriangleShape = cgraph.TriangleShape + PlainTextShape = cgraph.PlainTextShape + PlainShape = cgraph.PlainShape + DiamondShape = cgraph.DiamondShape + TrapeziumShape = cgraph.TrapeziumShape + ParallelogramShape = cgraph.ParallelogramShape + HouseShape = cgraph.HouseShape + PentagonShape = cgraph.PentagonShape + HexagonShape = cgraph.HexagonShape + SeptagonShape = cgraph.SeptagonShape + OctagonShape = cgraph.OctagonShape + DoubleCircleShape = cgraph.DoubleCircleShape + DoubleOctagonShape = cgraph.DoubleOctagonShape + TripleOctagonShape = cgraph.TripleOctagonShape + InvTriangleShape = cgraph.InvTriangleShape + InvTrapeziumShape = cgraph.InvTrapeziumShape + InvHouseShape = cgraph.InvHouseShape + MdiamondShape = cgraph.MdiamondShape + MsquareShape = cgraph.MsquareShape + McircleShape = cgraph.McircleShape + RectShape = cgraph.RectShape + RectangleShape = cgraph.RectangleShape + SquareShape = cgraph.SquareShape + StarShape = cgraph.StarShape + NoneShape = cgraph.NoneShape + UnderlineShape = cgraph.UnderlineShape + CylinderShape = cgraph.CylinderShape + NoteShape = cgraph.NoteShape + TabShape = cgraph.TabShape + FolderShape = cgraph.FolderShape + Box3DShape = cgraph.Box3DShape + ComponentShape = cgraph.ComponentShape + PromoterShape = cgraph.PromoterShape + CdsShape = cgraph.CdsShape + TerminatorShape = cgraph.TerminatorShape + UtrShape = cgraph.UtrShape + PrimersiteShape = cgraph.PrimersiteShape + RestrictionSiteShape = cgraph.RestrictionSiteShape + FivePoverHangShape = cgraph.FivePoverHangShape + ThreePoverHangShape = cgraph.ThreePoverHangShape + NoverHangShape = cgraph.NoverHangShape + AssemblyShape = cgraph.AssemblyShape + SignatureShape = cgraph.SignatureShape + InsulatorShape = cgraph.InsulatorShape + RibositeShape = cgraph.RibositeShape + RnastabShape = cgraph.RnastabShape + ProteasesiteShape = cgraph.ProteasesiteShape + ProteinstabShape = cgraph.ProteinstabShape + RPromoterShape = cgraph.RPromoterShape + RArrowShape = cgraph.RArrowShape + LArrowShape = cgraph.LArrowShape + LPromoterShape = cgraph.LPromoterShape +) + +const ( + NoneSmooth = cgraph.NoneSmooth + AvgDistSmooth = cgraph.AvgDistSmooth + GraphDistSmooth = cgraph.GraphDistSmooth + PowerDistSmooth = cgraph.PowerDistSmooth + RngSmooth = cgraph.RngSmooth + SprintSmooth = cgraph.SprintSmooth + TriangleSmooth = cgraph.TriangleSmooth +) + +const ( + RegularStart = cgraph.RegularStart + SelfStart = cgraph.SelfStart + RandomStart = cgraph.RandomStart +) + +const ( + SolidGraphStyle = cgraph.SolidGraphStyle + DashedGraphStyle = cgraph.DashedGraphStyle + DottedGraphStyle = cgraph.DottedGraphStyle + BoldGraphStyle = cgraph.BoldGraphStyle + RoundedGraphStyle = cgraph.RoundedGraphStyle + FilledGraphStyle = cgraph.FilledGraphStyle + StripedGraphStyle = cgraph.StripedGraphStyle +) + +const ( + SolidNodeStyle = cgraph.SolidNodeStyle + DashedNodeStyle = cgraph.DashedNodeStyle + DottedNodeStyle = cgraph.DottedNodeStyle + BoldNodeStyle = cgraph.BoldNodeStyle + RoundedNodeStyle = cgraph.RoundedNodeStyle + DiagonalsNodeStyle = cgraph.DiagonalsNodeStyle + FilledNodeStyle = cgraph.FilledNodeStyle + StripedNodeStyle = cgraph.StripedNodeStyle + WedgesNodeStyle = cgraph.WedgesNodeStyle +) + +const ( + SolidEdgeStyle = cgraph.SolidEdgeStyle + DashedEdgeStyle = cgraph.DashedEdgeStyle + DottedEdgeStyle = cgraph.DottedEdgeStyle + BoldEdgeStyle = cgraph.BoldEdgeStyle +) + +// functions from cgraph package. +var ( + ParseFile = cgraph.ParseFile + ParseBytes = cgraph.ParseBytes +) + +// functions from gvc package. +var ( + DefaultPlugins = gvc.DefaultPlugins + DeviceQuality = gvc.WithDeviceQuality + DeviceFeatures = gvc.WithDeviceFeatures + DeviceDPI = gvc.WithDeviceDPI + NewDevicePlugin = gvc.NewDevicePlugin + PNGDevicePlugin = gvc.PNGDevicePlugin + JPGDevicePlugin = gvc.JPGDevicePlugin + RenderQuality = gvc.WithRenderQuality + RenderFeatures = gvc.WithRenderFeatures + RenderColorType = gvc.WithRenderColorType + RenderPAD = gvc.WithRenderPAD + NewRenderPlugin = gvc.NewRenderPlugin + PNGRenderPlugin = gvc.PNGRenderPlugin + JPGRenderPlugin = gvc.JPGRenderPlugin +) diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 0000000..a9470c8 --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,6 @@ +version: v1 +managed: + enabled: true +plugins: + - plugin: nori + out: . diff --git a/buf.work.yaml b/buf.work.yaml new file mode 100644 index 0000000..e3560ca --- /dev/null +++ b/buf.work.yaml @@ -0,0 +1,4 @@ +version: v1 +directories: + - ./internal/tools/nori/proto + - internal/wasm diff --git a/cdt/cdt.go b/cdt/cdt.go index cbde8ab..d0e8533 100644 --- a/cdt/cdt.go +++ b/cdt/cdt.go @@ -1,139 +1,265 @@ package cdt import ( - "unsafe" + "context" + "errors" - "github.com/goccy/go-graphviz/internal/ccall" + "github.com/goccy/go-graphviz/internal/wasm" ) type Dict struct { - *ccall.Dict + wasm *wasm.Dict +} + +func toDict(v *wasm.Dict) *Dict { + if v == nil { + return nil + } + return &Dict{wasm: v} +} + +func (d *Dict) getWasm() *wasm.Dict { + return d.wasm } type Hold struct { - *ccall.Dthold + wasm *wasm.DictHold +} + +func toHold(v *wasm.DictHold) *Hold { + if v == nil { + return nil + } + return &Hold{wasm: v} +} + +func (h *Hold) getWasm() *wasm.DictHold { + return h.wasm } type Link struct { - *ccall.Dtlink + wasm *wasm.DictLink +} + +func toLink(v *wasm.DictLink) *Link { + if v == nil { + return nil + } + return &Link{wasm: v} +} + +func (l *Link) getWasm() *wasm.DictLink { + return l.wasm +} + +func toDictLinkWasm(v *Link) *wasm.DictLink { + return v.wasm } type Method struct { - *ccall.Dtmethod + wasm *wasm.DictMethod +} + +func toMethod(v *wasm.DictMethod) *Method { + if v == nil { + return nil + } + return &Method{wasm: v} +} + +func (m *Method) getWasm() *wasm.DictMethod { + return m.wasm } type Data struct { - *ccall.Dtdata + wasm *wasm.DictData +} + +func toData(v *wasm.DictData) *Data { + if v == nil { + return nil + } + return &Data{wasm: v} +} + +func (d *Data) getWasm() *wasm.DictData { + return d.wasm } type Disc struct { - *ccall.Dtdisc + wasm *wasm.DictDisc +} + +func toDisc(v *wasm.DictDisc) *Disc { + if v == nil { + return nil + } + return &Disc{wasm: v} +} + +func (d *Disc) getWasm() *wasm.DictDisc { + return d.wasm } type Stat struct { - *ccall.Dtstat + wasm *wasm.DictStat } -type Search func(*Dict, unsafe.Pointer, int) unsafe.Pointer -type Make func(*Dict, unsafe.Pointer, *Disc) unsafe.Pointer -type Memory func(*Dict, unsafe.Pointer, uint, *Disc) unsafe.Pointer -type Free func(*Dict, unsafe.Pointer, *Disc) -type Compare func(*Dict, unsafe.Pointer, unsafe.Pointer, *Disc) int -type Hash func(*Dict, unsafe.Pointer, *Disc) uint -type Event func(*Dict, int, unsafe.Pointer, *Disc) int +func toStat(v *wasm.DictStat) *Stat { + if v == nil { + return nil + } + return &Stat{wasm: v} +} -func StrHash(a0 uint, a1 unsafe.Pointer, a2 int) uint { - return ccall.Dtstrhash(a0, a1, a2) +func (s *Stat) getWasm() *wasm.DictStat { + return s.wasm } -func Open(a0 *Disc, a1 *Method) *Dict { - return &Dict{Dict: ccall.Dtopen(a0.Dtdisc, a1.Dtmethod)} +type Search func(*Dict, any, int) any +type Make func(*Dict, any, *Disc) any +type Memory func(*Dict, any, uint, *Disc) any +type Free func(*Dict, any, *Disc) +type Compare func(*Dict, any, any, *Disc) int +type Hash func(*Dict, any, *Disc) uint +type Event func(*Dict, int, any, *Disc) int + +func StrHash(a1 any, a2 int) (uint, error) { + return wasm.StrHash(context.Background(), a1, a2) } -func (d *Dict) Close() int { - return ccall.Dtclose(d.Dict) +func Open(disc *Disc, mtd *Method) (*Dict, error) { + res, err := wasm.NewDictWithDisc(context.Background(), disc.getWasm(), mtd.getWasm()) + if err != nil { + return nil, err + } + return toDict(res), nil } -func (d *Dict) View(a0 *Dict) *Dict { - return &Dict{Dict: ccall.Dtview(d.Dict, a0.Dict)} +func (d *Dict) Close() error { + res, err := d.wasm.Close(context.Background()) + if err != nil { + return err + } + return toError(res) } -func (d *Dict) Disc(a0 *Disc, a1 int) *Disc { - return &Disc{Dtdisc: ccall.Dtdiscf(d.Dict, a0.Dtdisc, a1)} +func (d *Dict) View(dict *Dict) (*Dict, error) { + res, err := d.wasm.View(context.Background(), dict.getWasm()) + if err != nil { + return nil, err + } + return toDict(res), nil } -func (d *Dict) Method(a0 *Method) *Method { - return &Method{Dtmethod: ccall.Dtmethodf(d.Dict, a0.Dtmethod)} +func (d *Dict) Disc(disc *Disc) (*Disc, error) { + res, err := d.wasm.Disc(context.Background(), disc.getWasm()) + if err != nil { + return nil, err + } + return toDisc(res), nil } -func (d *Dict) Flatten() *Link { - return &Link{Dtlink: ccall.Dtflatten(d.Dict)} +func (d *Dict) Method(mtd *Method) (*Method, error) { + res, err := d.wasm.Method(context.Background(), mtd.getWasm()) + if err != nil { + return nil, err + } + return toMethod(res), nil } -func (d *Dict) Extract() *Link { - return &Link{Dtlink: ccall.Dtextract(d.Dict)} +func (d *Dict) Flatten() (*Link, error) { + res, err := d.wasm.Flatten(context.Background()) + if err != nil { + return nil, err + } + return toLink(res), nil } -func (d *Dict) Restore(a0 *Link) int { - return ccall.Dtrestore(d.Dict, a0.Dtlink) +func (d *Dict) Extract() (*Link, error) { + res, err := d.wasm.Extract(context.Background()) + if err != nil { + return nil, err + } + return toLink(res), nil } -func (d *Dict) TreeSet(a0 int, a1 int) int { - return ccall.Dttreeset(d.Dict, a0, a1) +func (d *Dict) Restore(link *Link) error { + res, err := d.wasm.Restore(context.Background(), link.getWasm()) + if err != nil { + return err + } + return toError(res) } -func (d *Dict) Walk(walk func(a0 *Dict, a1 unsafe.Pointer, a2 unsafe.Pointer) int, data unsafe.Pointer) int { - return ccall.Dtwalk(d.Dict, func(a0 *ccall.Dict, a1 unsafe.Pointer, a2 unsafe.Pointer) int { - return walk(&Dict{Dict: a0}, a1, a2) - }, data) +func (d *Dict) Walk(fn func(context.Context, *Dict, any, any) error, data any) error { + // TODO + res, err := d.wasm.Walk(context.Background(), wasm.CreateCallbackFunc(func(ctx context.Context, a1 any, a2 any) (int, error) { + if err := fn(ctx, d, a1, a2); err != nil { + return 0, err + } + return 0, nil + }, wasm.WasmPtr(d.wasm)), data) + if err != nil { + return err + } + return toError(res) } -func (d *Dict) Renew(a0 unsafe.Pointer) unsafe.Pointer { - return ccall.Dtrenew(d.Dict, a0) +func (d *Dict) Renew(a0 any) (any, error) { + res, err := d.wasm.Renew(context.Background(), a0) + if err != nil { + return nil, err + } + return res, nil } -func (d *Dict) Size() int { - return ccall.Dtsize(d.Dict) +func (d *Dict) Size() (int, error) { + res, err := d.wasm.Size(context.Background()) + if err != nil { + return 0, err + } + return res, nil } -func (d *Dict) Stat(a0 *Stat, a1 int) int { - return ccall.Dtstatf(d.Dict, a0.Dtstat, a1) +func (d *Dict) Stat(a0 *Stat, a1 int) (int, error) { + res, err := d.wasm.Stat(context.Background(), a0.getWasm(), a1) + if err != nil { + return 0, err + } + return res, nil } func (l *Link) Right() *Link { - v := l.Dtlink.Right() - if v == nil { - return nil - } - return &Link{Dtlink: v} + return toLink(l.wasm.GetRight()) } func (l *Link) SetRight(v *Link) { - if v == nil || v.Dtlink == nil { - return - } - l.Dtlink.SetRight(v.Dtlink) + l.wasm.SetRight(v.getWasm()) } func (l *Link) Left() *Link { - v := l.Dtlink.Left() - if v == nil { - return nil - } - return &Link{Dtlink: v} + return toLink(l.wasm.GetLeft()) } func (l *Link) SetLeft(v *Link) { - if v == nil || v.Dtlink == nil { - return - } - l.Dtlink.SetLeft(v.Dtlink) + l.wasm.SetLeft(v.getWasm()) } func (l *Link) Hash() uint { - return l.Dtlink.Hash() + return uint(l.wasm.GetHash()) } func (l *Link) SetHash(v uint) { - l.Dtlink.SetHash(v) + l.wasm.SetHash(uint32(v)) +} + +func toError(result int) error { + if result == 0 { + return nil + } + if e, _ := wasm.LastError(context.Background()); e != "" { + return errors.New(e) + } + return nil } diff --git a/cgraph/cgraph.go b/cgraph/cgraph.go index 4a44d71..7e18880 100644 --- a/cgraph/cgraph.go +++ b/cgraph/cgraph.go @@ -1,1266 +1,1390 @@ package cgraph import ( - "io/ioutil" - "unsafe" + "context" + "errors" + "os" "github.com/goccy/go-graphviz/cdt" - "github.com/goccy/go-graphviz/internal/ccall" + "github.com/goccy/go-graphviz/internal/wasm" ) type Graph struct { - *ccall.Agraph + wasm *wasm.Graph +} + +func toGraph(v *wasm.Graph) *Graph { + if v == nil { + return nil + } + return &Graph{wasm: v} +} + +func toGraphWasm(v *Graph) *wasm.Graph { + if v == nil { + return nil + } + return v.wasm +} + +func (g *Graph) getWasm() *wasm.Graph { + if g == nil { + return nil + } + return g.wasm } type Node struct { - *ccall.Agnode + wasm *wasm.Node +} + +func toNode(v *wasm.Node) *Node { + if v == nil { + return nil + } + return &Node{wasm: v} +} + +func (n *Node) getWasm() *wasm.Node { + if n == nil { + return nil + } + return n.wasm } type SubNode struct { - *ccall.Agsubnode + wasm *wasm.SubNode +} + +func toSubNode(v *wasm.SubNode) *SubNode { + if v == nil { + return nil + } + return &SubNode{wasm: v} +} + +func (n *SubNode) getWasm() *wasm.SubNode { + if n == nil { + return nil + } + return n.wasm } type Edge struct { - *ccall.Agedge + wasm *wasm.Edge +} + +func toEdge(v *wasm.Edge) *Edge { + if v == nil { + return nil + } + return &Edge{wasm: v} +} + +func (e *Edge) getWasm() *wasm.Edge { + if e == nil { + return nil + } + return e.wasm } type Desc struct { - *ccall.Agdesc + wasm *wasm.GraphDescriptor +} + +func toDesc(v *wasm.GraphDescriptor) *Desc { + if v == nil { + return nil + } + return &Desc{wasm: v} +} + +func (d *Desc) getWasm() *wasm.GraphDescriptor { + if d == nil { + return nil + } + return d.wasm } type Disc struct { - *ccall.Agdisc + wasm *wasm.ClientDiscipline +} + +func toDisc(v *wasm.ClientDiscipline) *Disc { + if v == nil { + return nil + } + return &Disc{wasm: v} +} + +func (d *Disc) getWasm() *wasm.ClientDiscipline { + if d == nil { + return nil + } + return d.wasm } -// Symbol symbol in one of the above dictionaries +// Symbol symbol in one of the above dictionaries. type Symbol struct { - *ccall.Agsym + wasm *wasm.Sym +} + +func toSymbol(v *wasm.Sym) *Symbol { + if v == nil { + return nil + } + return &Symbol{wasm: v} +} + +func (s *Symbol) getWasm() *wasm.Sym { + if s == nil { + return nil + } + return s.wasm } -// Record generic runtime record +// Record generic runtime record. type Record struct { - *ccall.Agrec + wasm *wasm.Record +} + +func toRecord(v *wasm.Record) *Record { + if v == nil { + return nil + } + return &Record{wasm: v} +} + +func (r *Record) getWasm() *wasm.Record { + if r == nil { + return nil + } + return r.wasm } type Tag struct { - *ccall.Agtag + wasm *wasm.Tag +} + +func toTag(v *wasm.Tag) *Tag { + if v == nil { + return nil + } + return &Tag{wasm: v} +} + +func (t *Tag) getWasm() *wasm.Tag { + if t == nil { + return nil + } + return t.wasm } type Object struct { - *ccall.Agobj + wasm *wasm.Object +} + +func toObject(v *wasm.Object) *Object { + if v == nil { + return nil + } + return &Object{wasm: v} +} + +func (o *Object) getWasm() *wasm.Object { + if o == nil { + return nil + } + return o.wasm +} + +type CommonFields struct { + wasm *wasm.CommonFields } -type Clos struct { - *ccall.Agclos +func toCommonFields(v *wasm.CommonFields) *CommonFields { + if v == nil { + return nil + } + return &CommonFields{wasm: v} +} + +func (c *CommonFields) getWasm() *wasm.CommonFields { + if c == nil { + return nil + } + return c.wasm } type State struct { - *ccall.Agdstate + wasm *wasm.State +} + +func toState(v *wasm.State) *State { + if v == nil { + return nil + } + return &State{wasm: v} +} + +func (s *State) getWasm() *wasm.State { + if s == nil { + return nil + } + return s.wasm } type CallbackStack struct { - *ccall.Agcbstack + wasm *wasm.CallbackStack } -type Attr struct { - *ccall.Agattr +func toCallbackStack(v *wasm.CallbackStack) *CallbackStack { + if v == nil { + return nil + } + return &CallbackStack{wasm: v} } -type DataDict struct { - *ccall.Agdatadict +func (c *CallbackStack) getWasm() *wasm.CallbackStack { + if c == nil { + return nil + } + return c.wasm } -type IDTYPE uint64 +type Attr struct { + wasm *wasm.Attr +} -var ( - Directed = &Desc{Agdesc: ccall.Agdirected} - StrictDirected = &Desc{Agdesc: ccall.Agstrictdirected} - UnDirected = &Desc{Agdesc: ccall.Agundirected} - StrictUnDirected = &Desc{Agdesc: ccall.Agstrictundirected} -) +func toAttr(v *wasm.Attr) *Attr { + if v == nil { + return nil + } + return &Attr{wasm: v} +} -func toGraph(g *ccall.Agraph) *Graph { - if g == nil { +func (a *Attr) getWasm() *wasm.Attr { + if a == nil { return nil } - return &Graph{Agraph: g} + return a.wasm } -func toNode(n *ccall.Agnode) *Node { - if n == nil { +type DataDict struct { + wasm *wasm.DataDict +} + +func toDataDict(v *wasm.DataDict) *DataDict { + if v == nil { return nil } - return &Node{Agnode: n} + return &DataDict{wasm: v} } -func toEdge(e *ccall.Agedge) *Edge { - if e == nil { +func (d *DataDict) getWasm() *wasm.DataDict { + if d == nil { return nil } - return &Edge{Agedge: e} + return d.wasm } +type ID uint64 + func ParseBytes(bytes []byte) (*Graph, error) { - ccall.Agclearerrors() - graph, err := ccall.Agmemread(string(bytes)) + graph, err := wasm.MemRead(context.Background(), string(bytes)) if err != nil { return nil, err } + if graph == nil { + return nil, lastError() + } return toGraph(graph), nil } func ParseFile(path string) (*Graph, error) { - file, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - ccall.Agclearerrors() - graph, err := ccall.Agmemread(string(file)) + file, err := os.ReadFile(path) if err != nil { return nil, err } - return toGraph(graph), nil + return ParseBytes(file) } func Open(name string, desc *Desc, disc *Disc) (*Graph, error) { - var ( - agdesc *ccall.Agdesc - agdisc *ccall.Agdisc - ) - if desc != nil { - agdesc = desc.Agdesc - } - if disc != nil { - agdisc = disc.Agdisc - } - graph, err := ccall.Agopen(name, agdesc, agdisc) + graph, err := wasm.Open(context.Background(), name, desc.getWasm(), disc.getWasm()) if err != nil { return nil, err } + if graph == nil { + return nil, lastError() + } return toGraph(graph), nil } -type OBJECTKIND int +type ObjectTag int -const ( - GRAPH OBJECTKIND = 0 - NODE OBJECTKIND = 1 - OUTEDGE OBJECTKIND = 2 - INEDGE OBJECTKIND = 3 - EDGE OBJECTKIND = OUTEDGE +var ( + GRAPH ObjectTag = ObjectTag(wasm.GRAPH) + NODE ObjectTag = ObjectTag(wasm.NODE) + OUTEDGE ObjectTag = ObjectTag(wasm.OUT_EDGE) + INEDGE ObjectTag = ObjectTag(wasm.IN_EDGE) + EDGE ObjectTag = ObjectTag(wasm.EDGE) ) -func ObjectKind(obj *Object) OBJECTKIND { - return OBJECTKIND(ccall.Agobjkind(unsafe.Pointer(obj.Agobj.C()))) -} - -func HTMLStr(s string) int { - return ccall.Aghtmlstr(s) -} - -func Canon(s string, i int) string { - return ccall.Agcanon(s, i) -} - -func StrCanon(a0 string, a1 string) string { - return ccall.Agstrcanon(a0, a1) -} - -func CanonStr(str string) string { - return ccall.AgcanonStr(str) -} - -func AttrSym(obj *Object, name string) *Symbol { - sym := ccall.Agattrsym(unsafe.Pointer(obj.Agobj.C()), name) - if sym == nil { - return nil - } - return &Symbol{Agsym: sym} -} - func (r *Record) Name() string { - return r.Agrec.Name() + return r.wasm.GetName() } func (r *Record) SetName(v string) { - r.Agrec.SetName(v) + r.wasm.SetName(v) } func (r *Record) Next() *Record { - v := r.Agrec.Next() - if v == nil { - return nil - } - return &Record{Agrec: v} + return toRecord(r.wasm.GetNext()) } func (r *Record) SetNext(v *Record) { - if v == nil || v.Agrec == nil { - return - } - r.Agrec.SetNext(v.Agrec) + r.wasm.SetNext(v.getWasm()) } -func (t *Tag) ID() IDTYPE { - return IDTYPE(t.Agtag.ID()) +func (t *Tag) ObjectTag() ObjectTag { + return ObjectTag(t.wasm.GetObjectType()) } -func (t *Tag) SetID(v IDTYPE) { - t.Agtag.SetID(uint64(v)) +func (t *Tag) ID() ID { + return ID(t.wasm.GetId()) +} + +func (t *Tag) SetID(v ID) { + t.wasm.SetId(uint64(v)) } func (o *Object) Tag() *Tag { - v := o.Agobj.Tag() - if v == nil { - return nil - } - return &Tag{Agtag: v} + return toTag(o.wasm.GetTag()) } func (o *Object) SetTag(v *Tag) { - if v == nil || v.Agtag == nil { - return - } - o.Agobj.SetTag(v.Agtag) + o.wasm.SetTag(v.getWasm()) } func (o *Object) Data() *Record { - v := o.Agobj.Data() - if v == nil { - return nil - } - return &Record{Agrec: v} + return toRecord(o.wasm.GetData()) } func (o *Object) SetData(v *Record) { - if v == nil || v.Agrec == nil { - return - } - o.Agobj.SetData(v.Agrec) + o.wasm.SetData(v.getWasm()) } -func (o *Object) SafeSet(name, value, def string) int { - return ccall.Agsafeset(unsafe.Pointer(o.Agobj.C()), name, value, def) +func (o *Object) SafeSet(name, value, def string) error { + res, err := wasm.SafeSetStr(context.Background(), o.wasm, name, value, def) + if err != nil { + return err + } + return toError(res) } func (n *SubNode) SeqLink() *cdt.Link { - v := n.Agsubnode.SeqLink() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetSeqLink()) } func (n *SubNode) SetSeqLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetSeqLink(v.Dtlink) + n.wasm.SetSeqLink(toDictLinkWasm(v)) } func (n *SubNode) IDLink() *cdt.Link { - v := n.Agsubnode.IDLink() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetIdLink()) } func (n *SubNode) SetIDLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetIDLink(v.Dtlink) + n.wasm.SetIdLink(toDictLinkWasm(v)) } func (n *SubNode) Node() *Node { - v := n.Agsubnode.Node() - if v == nil { - return nil - } - return &Node{Agnode: v} + return toNode(n.wasm.GetNode()) } func (n *SubNode) SetNode(v *Node) { - if v == nil || v.Agnode == nil { - return - } - n.Agsubnode.SetNode(v.Agnode) + n.wasm.SetNode(v.getWasm()) } func (n *SubNode) InID() *cdt.Link { - v := n.Agsubnode.InID() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetInId()) } func (n *SubNode) SetInID(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetInID(v.Dtlink) + n.wasm.SetInId(toDictLinkWasm(v)) } func (n *SubNode) OutID() *cdt.Link { - v := n.Agsubnode.OutID() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetOutId()) } func (n *SubNode) SetOutID(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetOutID(v.Dtlink) + n.wasm.SetOutId(toDictLinkWasm(v)) } func (n *SubNode) InSeq() *cdt.Link { - v := n.Agsubnode.InSeq() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetInSeq()) } func (n *SubNode) SetInSeq(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetInSeq(v.Dtlink) + n.wasm.SetInSeq(toDictLinkWasm(v)) } func (n *SubNode) OutSeq() *cdt.Link { - v := n.Agsubnode.OutSeq() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(n.wasm.GetOutSeq()) } func (n *SubNode) SetOutSeq(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - n.Agsubnode.SetOutSeq(v.Dtlink) + n.wasm.SetOutSeq(toDictLinkWasm(v)) } func (n *Node) Base() *Object { - v := n.Agnode.Base() - if v == nil { - return nil - } - return &Object{Agobj: v} + return toObject(n.wasm.GetBase()) } func (n *Node) SetBase(v *Object) { - if v == nil || v.Agobj == nil { - return - } - n.Agnode.SetBase(v.Agobj) + n.wasm.SetBase(v.getWasm()) } func (n *Node) Root() *Graph { - v := n.Agnode.Root() - if v == nil { - return nil - } - return &Graph{Agraph: v} + return toGraph(n.wasm.GetRoot()) } func (n *Node) SetRootGraph(v *Graph) { - if v == nil || v.Agraph == nil { - return - } - n.Agnode.SetRoot(v.Agraph) + n.wasm.SetRoot(v.getWasm()) } func (n *Node) MainSub() *SubNode { - v := n.Agnode.Mainsub() - if v == nil { - return nil - } - return &SubNode{Agsubnode: v} + return toSubNode(n.wasm.GetMainsub()) } func (n *Node) SetMainSub(v *SubNode) { - if v == nil || v.Agsubnode == nil { - return - } - n.Agnode.SetMainsub(v.Agsubnode) + n.wasm.SetMainsub(v.getWasm()) } func (e *Edge) Base() *Object { - v := e.Agedge.Base() - if v == nil { - return nil - } - return &Object{Agobj: v} + return toObject(e.wasm.GetBase()) } func (e *Edge) SetBase(v *Object) { - if v == nil || v.Agobj == nil { - return - } - e.Agedge.SetBase(v.Agobj) + e.wasm.SetBase(v.getWasm()) } func (e *Edge) SeqLink() *cdt.Link { - v := e.Agedge.SeqLink() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(e.wasm.GetSeqLink()) } func (e *Edge) SetSeqLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - e.Agedge.SetSeqLink(v.Dtlink) + e.wasm.SetSeqLink(toDictLinkWasm(v)) } func (e *Edge) IDLink() *cdt.Link { - v := e.Agedge.IDLink() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(e.wasm.GetIdLink()) } func (e *Edge) SetIDLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - e.Agedge.SetIDLink(v.Dtlink) + e.wasm.SetIdLink(toDictLinkWasm(v)) } func (e *Edge) Node() *Node { - v := e.Agedge.Node() - if v == nil { - return nil - } - return &Node{Agnode: v} + return toNode(e.wasm.GetNode()) } func (e *Edge) SetNode(v *Node) { - if v == nil || v.Agnode == nil { - return - } - e.Agedge.SetNode(v.Agnode) + e.wasm.SetNode(v.getWasm()) } -func (c *Clos) Disc() *Disc { - v := c.Agclos.Disc() - if v == nil { - return nil - } - return &Disc{Agdisc: v} +func (c *CommonFields) Disc() *Disc { + return toDisc(c.wasm.GetDisc()) } -func (c *Clos) SetDisc(v *Disc) { - if v == nil || v.Agdisc == nil { - return - } - c.Agclos.SetDisc(v.Agdisc) +func (c *CommonFields) SetDisc(v *Disc) { + c.wasm.SetDisc(v.getWasm()) } -func (c *Clos) State() *State { - v := c.Agclos.State() - if v == nil { - return nil - } - return &State{Agdstate: v} +func (c *CommonFields) State() *State { + return toState(c.wasm.GetState()) } -func (c *Clos) SetState(v *State) { - if v == nil || v.Agdstate == nil { - return - } - c.Agclos.SetState(v.Agdstate) +func (c *CommonFields) SetState(v *State) { + c.wasm.SetState(v.getWasm()) } -func (c *Clos) StrDict() *cdt.Dict { - v := c.Agclos.Strdict() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (c *CommonFields) StrDict() *cdt.Dict { + return toDict(c.wasm.GetStrdict()) } -func (c *Clos) SetStrDict(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - c.Agclos.SetStrdict(v.Dict) +func (c *CommonFields) SetStrDict(v *cdt.Dict) { + c.wasm.SetStrdict(toDictWasm(v)) } -func (c *Clos) Seq() [3]uint64 { - return c.Agclos.Seq() +func (c *CommonFields) Seq() [3]uint64 { + res := c.wasm.GetSeq() + return [3]uint64{res[0], res[1], res[2]} } -func (c *Clos) SetSeq(v []uint64) { - c.Agclos.SetSeq(v) +func (c *CommonFields) SetSeq(v [3]uint64) { + c.wasm.SetSeq(v[:]) } -func (c *Clos) Callback() *CallbackStack { - v := c.Agclos.Cb() - if v == nil { - return nil - } - return &CallbackStack{Agcbstack: v} +func (c *CommonFields) Callback() *CallbackStack { + return toCallbackStack(c.wasm.GetCb()) } -func (c *Clos) SetCallback(v *CallbackStack) { - if v == nil || v.Agcbstack == nil { - return - } - c.Agclos.SetCb(v.Agcbstack) +func (c *CommonFields) SetCallback(v *CallbackStack) { + c.wasm.SetCb(v.getWasm()) } -func (c *Clos) CallbacksEnabled() bool { - return c.Agclos.CallbacksEnabled() +func (c *CommonFields) LookupByName() [3]*cdt.Dict { + res := c.wasm.GetLookupByName() + return [3]*cdt.Dict{toDict(res[0]), toDict(res[1]), toDict(res[2])} } -func (c *Clos) SetCallbacskEnabled(v bool) { - c.Agclos.SetCallbacksEnabled(v) +func (c *CommonFields) SetLookupByName(v [3]*cdt.Dict) { + args := make([]*wasm.Dict, len(v)) + for i := range args { + args[i] = toDictWasm(v[i]) + } + c.wasm.SetLookupByName(args) } -func (c *Clos) LookupByName() [3]*cdt.Dict { - v := c.Agclos.LookupByName() - r := [3]*cdt.Dict{} - r[0] = &cdt.Dict{Dict: v[0]} - r[1] = &cdt.Dict{Dict: v[1]} - r[2] = &cdt.Dict{Dict: v[2]} - return r +func (c *CommonFields) LookupByID() [3]*cdt.Dict { + res := c.wasm.GetLookupById() + return [3]*cdt.Dict{toDict(res[0]), toDict(res[1]), toDict(res[2])} } -func (c *Clos) LookupByID() [3]*cdt.Dict { - v := c.Agclos.LookupByID() - r := [3]*cdt.Dict{} - r[0] = &cdt.Dict{Dict: v[0]} - r[1] = &cdt.Dict{Dict: v[1]} - r[2] = &cdt.Dict{Dict: v[2]} - return r +func (c *CommonFields) SetLookupByID(v [3]*cdt.Dict) { + args := make([]*wasm.Dict, len(v)) + for i := range args { + args[i] = toDictWasm(v[i]) + } + c.wasm.SetLookupById(args) } -func (a *Attr) H() *Record { - v := a.Agattr.H() - if v == nil { - return nil - } - return &Record{Agrec: v} +func (a *Attr) Header() *Record { + return toRecord(a.wasm.GetH()) } -func (a *Attr) SetH(v *Record) { - if v == nil || v.Agrec == nil { - return - } - a.Agattr.SetH(v.Agrec) +func (a *Attr) SetHeader(v *Record) { + a.wasm.SetH(v.getWasm()) } func (a *Attr) Dict() *cdt.Dict { - v := a.Agattr.Dict() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} + return toDict(a.wasm.GetDict()) } func (a *Attr) SetDict(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - a.Agattr.SetDict(v.Dict) + a.wasm.SetDict(toDictWasm(v)) +} + +func (a *Attr) Str() []string { + return a.wasm.GetStr() +} + +func (a *Attr) SetStr(v []string) { + a.wasm.SetStr(v) } func (s *Symbol) Link() *cdt.Link { - v := s.Agsym.Link() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} + return toDictLink(s.wasm.GetLink()) } func (s *Symbol) SetLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - s.Agsym.SetLink(v.Dtlink) + s.wasm.SetLink(toDictLinkWasm(v)) } func (s *Symbol) Name() string { - return s.Agsym.Name() + return s.wasm.GetName() } func (s *Symbol) SetName(v string) { - s.Agsym.SetName(v) + s.wasm.SetName(v) } -func (s *Symbol) Defval() string { - return s.Agsym.Defval() +func (s *Symbol) DefaultValue() string { + return s.wasm.GetDefval() } -func (s *Symbol) SetDefval(v string) { - s.Agsym.SetDefval(v) +func (s *Symbol) SetDefaultValue(v string) { + s.wasm.SetDefval(v) } func (s *Symbol) ID() int { - return s.Agsym.ID() + return int(s.wasm.GetId()) } func (s *Symbol) SetID(v int) { - s.Agsym.SetID(v) + s.wasm.SetId(int32(v)) } func (s *Symbol) Kind() uint { - return s.Agsym.Kind() + return uint(s.wasm.GetKind()) } func (s *Symbol) SetKind(v uint) { - s.Agsym.SetKind(v) + s.wasm.SetKind(uint32(v)) } func (s *Symbol) Fixed() uint { - return s.Agsym.Fixed() + return uint(s.wasm.GetFixed()) } func (s *Symbol) SetFixed(v uint) { - s.Agsym.SetFixed(v) + s.wasm.SetFixed(uint32(v)) } func (s *Symbol) Print() uint { - return s.Agsym.Print() + return uint(s.wasm.GetPrint()) } func (s *Symbol) SetPrint(v uint) { - s.Agsym.SetPrint(v) + s.wasm.SetPrint(uint32(v)) } -func (d *DataDict) H() *Record { - v := d.Agdatadict.H() - if v == nil { - return nil - } - return &Record{Agrec: v} +func (d *DataDict) Header() *Record { + return toRecord(d.wasm.GetH()) } -func (d *DataDict) SetH(v *Record) { - if v == nil || v.Agrec == nil { - return - } - d.Agdatadict.SetH(v.Agrec) +func (d *DataDict) SetHeader(v *Record) { + d.wasm.SetH(v.getWasm()) } -func (d *DataDict) DictN() *cdt.Dict { - v := d.Agdatadict.DictN() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) Base() *Object { + return toObject(g.wasm.GetBase()) } -func (d *DataDict) SetDictN(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - d.Agdatadict.SetDictN(v.Dict) +func (g *Graph) SetBase(v *Object) { + g.wasm.SetBase(v.getWasm()) } -func (d *DataDict) DictE() *cdt.Dict { - v := d.Agdatadict.DictE() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) Desc() *Desc { + return toDesc(g.wasm.GetDesc()) } -func (d *DataDict) SetDictE(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - d.Agdatadict.SetDictE(v.Dict) +func (g *Graph) SetDesc(v *Desc) { + g.wasm.SetDesc(v.getWasm()) } -func (d *DataDict) DictG() *cdt.Dict { - v := d.Agdatadict.DictG() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) SeqLink() *cdt.Link { + return toDictLink(g.wasm.GetSeqLink()) } -func (d *DataDict) SetDictG(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - d.Agdatadict.SetDictG(v.Dict) +func (g *Graph) SetSeqLink(v *cdt.Link) { + g.wasm.SetSeqLink(toDictLinkWasm(v)) } -func (g *Graph) Base() *Object { - v := g.Agraph.Base() - if v == nil { - return nil - } - return &Object{Agobj: v} +func (g *Graph) IDLink() *cdt.Link { + return toDictLink(g.wasm.GetIdLink()) } -func (g *Graph) SetBase(v *Object) { - if v == nil || v.Agobj == nil { - return - } - g.Agraph.SetBase(v.Agobj) +func (g *Graph) SetIDLink(v *cdt.Link) { + g.wasm.SetIdLink(toDictLinkWasm(v)) } -func (g *Graph) Desc() *Desc { - v := g.Agraph.Desc() - if v == nil { - return nil - } - return &Desc{Agdesc: v} +func (g *Graph) NSeq() *cdt.Dict { + return toDict(g.wasm.GetNSeq()) } -func (g *Graph) SetDesc(v *Desc) { - if v == nil || v.Agdesc == nil { - return - } - g.Agraph.SetDesc(v.Agdesc) +func (g *Graph) SetNSeq(v *cdt.Dict) { + g.wasm.SetNSeq(toDictWasm(v)) } -func (g *Graph) Link() *cdt.Link { - v := g.Agraph.Link() - if v == nil { - return nil - } - return &cdt.Link{Dtlink: v} +func (g *Graph) ESeq() *cdt.Dict { + return toDict(g.wasm.GetESeq()) } -func (g *Graph) SetLink(v *cdt.Link) { - if v == nil || v.Dtlink == nil { - return - } - g.Agraph.SetLink(v.Dtlink) +func (g *Graph) SetESeq(v *cdt.Dict) { + g.wasm.SetESeq(toDictWasm(v)) } -func (g *Graph) NSeq() *cdt.Dict { - v := g.Agraph.NSeq() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) EID() *cdt.Dict { + return toDict(g.wasm.GetEId()) } -func (g *Graph) SetNSeq(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - g.Agraph.SetNSeq(v.Dict) +func (g *Graph) SetEID(v *cdt.Dict) { + g.wasm.SetEId(toDictWasm(v)) } -func (g *Graph) NID() *cdt.Dict { - v := g.Agraph.NID() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) GSeq() *cdt.Dict { + return toDict(g.wasm.GetGSeq()) } -func (g *Graph) SetNID(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - g.Agraph.SetNID(v.Dict) +func (g *Graph) SetGSeq(v *cdt.Dict) { + g.wasm.SetGSeq(toDictWasm(v)) } -func (g *Graph) ESeq() *cdt.Dict { - v := g.Agraph.ESeq() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) GID() *cdt.Dict { + return toDict(g.wasm.GetGId()) } -func (g *Graph) SetESeq(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - g.Agraph.SetESeq(v.Dict) +func (g *Graph) SetGID(v *cdt.Dict) { + g.wasm.SetGId(toDictWasm(v)) } -func (g *Graph) EID() *cdt.Dict { - v := g.Agraph.EID() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) Parent() *Graph { + return toGraph(g.wasm.GetParent()) } -func (g *Graph) SetEID(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - g.Agraph.SetEID(v.Dict) +func (g *Graph) SetParent(v *Graph) { + g.wasm.SetParent(v.getWasm()) } -func (g *Graph) GDict() *cdt.Dict { - v := g.Agraph.GDict() - if v == nil { - return nil - } - return &cdt.Dict{Dict: v} +func (g *Graph) GraphRoot() *Graph { + return toGraph(g.wasm.GetRoot()) } -func (g *Graph) SetGDict(v *cdt.Dict) { - if v == nil || v.Dict == nil { - return - } - g.Agraph.SetGDict(v.Dict) +func (g *Graph) SetGraphRoot(v *Graph) { + g.wasm.SetRoot(v.getWasm()) } -func (g *Graph) SetParent(v *Graph) { - if v == nil || v.Agraph == nil { - return - } - g.Agraph.SetParent(v.Agraph) +func (g *Graph) CommonFields() *CommonFields { + return toCommonFields(g.wasm.GetClos()) } -func (g *Graph) Root() *Graph { - v := g.Agraph.Root() - if v == nil { - return nil +func (g *Graph) SetCommonFields(v *CommonFields) { + g.wasm.SetClos(v.getWasm()) +} + +func (g *Graph) CopyAttr(t *Graph) error { + res, err := wasm.CopyAttr(context.Background(), g.wasm, t.getWasm()) + if err != nil { + return err } - return &Graph{Agraph: v} + return toError(res) } -func (g *Graph) SetRootGraph(v *Graph) { - if v == nil || v.Agraph == nil { - return +// BindRecord attach a new record of the given size to the object. +func (g *Graph) BindRecord(name string, size uint, moveToFront int) error { + if _, err := wasm.BindRecord(context.Background(), g.wasm, name, size, moveToFront); err != nil { + return err } - g.Agraph.SetRoot(v.Agraph) + return nil } -func (g *Graph) Clos() *Clos { - v := g.Agraph.Clos() - if v == nil { - return nil +func (g *Graph) Record(name string, moveToFront int) (*Record, error) { + res, err := wasm.GetRecord(context.Background(), g.wasm, name, moveToFront) + if err != nil { + return nil, err } - return &Clos{Agclos: v} + return toRecord(res), nil } -func (g *Graph) SetClos(v *Clos) { - if v == nil || v.Agclos == nil { - return +func (g *Graph) DeleteRecord(name string) error { + res, err := wasm.DeleteRecord(context.Background(), g.wasm, name) + if err != nil { + return err } - g.Agraph.SetClos(v.Agclos) + return toError(res) } -func (g *Graph) CopyAttr(t *Graph) int { - return ccall.Agcopyattr(unsafe.Pointer(g.Agraph.C()), unsafe.Pointer(t.Agraph.C())) +func (g *Graph) GetStr(name string) (string, error) { + return wasm.GetStr(context.Background(), g.wasm, name) } -func (g *Graph) BindRecord(name string, size uint, moveToFront int) { - ccall.Agbindrec(unsafe.Pointer(g.Agraph.C()), name, size, moveToFront) +func (g *Graph) SymbolName(sym *Symbol) (string, error) { + return wasm.GetSymName(context.Background(), g.wasm, sym.getWasm()) } -func (g *Graph) Record(name string, moveToFront int) *Record { - rec := ccall.Aggetrec(unsafe.Pointer(g.Agraph.C()), name, moveToFront) - if rec == nil { - return nil +func (g *Graph) Set(name, value string) error { + res, err := wasm.SetStr(context.Background(), g.wasm, name, value) + if err != nil { + return err } - return &Record{Agrec: rec} + return toError(res) } -func (g *Graph) DeleteRecord(name string) int { - return ccall.Agdelrec(unsafe.Pointer(g.Agraph.C()), name) +func (g *Graph) SetSymbolName(sym *Symbol, value string) error { + res, err := wasm.SetSymName(context.Background(), g.wasm, sym.getWasm(), value) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) Get(name string) string { - return ccall.Agget(unsafe.Pointer(g.Agraph.C()), name) +func (g *Graph) SafeSet(name, value, def string) error { + res, err := wasm.SafeSetStr(context.Background(), g.wasm, name, value, def) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) XGet(sym *Symbol) string { - return ccall.Agxget(unsafe.Pointer(g.Agraph.C()), sym.Agsym) +func (g *Graph) Close() error { + res, err := g.wasm.Close(context.Background()) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) Set(name, value string) int { - return ccall.Agset(unsafe.Pointer(g.Agraph.C()), name, value) +func (g *Graph) IsSimple() (bool, error) { + res, err := g.wasm.IsSimple(context.Background()) + if err != nil { + return false, err + } + return res == 1, nil } -func (g *Graph) XSet(sym *Symbol, value string) int { - return ccall.Agxset(unsafe.Pointer(g.Agraph.C()), sym.Agsym, value) +func (g *Graph) CreateNodeByName(name string) (*Node, error) { + res, err := g.wasm.Node(context.Background(), name, 1) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) SafeSet(name, value, def string) int { - return ccall.Agsafeset(unsafe.Pointer(g.Agraph.C()), name, value, def) +func (g *Graph) NodeByName(name string) (*Node, error) { + res, err := g.wasm.Node(context.Background(), name, 0) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) Close() error { - return ccall.Agclose(g.Agraph) +func (g *Graph) CreateNodeByID(id ID) (*Node, error) { + res, err := g.wasm.IdNode(context.Background(), uint64(id), 1) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) IsSimple() bool { - return ccall.Agissimple(g.Agraph) +func (g *Graph) NodeByID(id ID) (*Node, error) { + res, err := g.wasm.IdNode(context.Background(), uint64(id), 0) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) CreateNode(name string) (*Node, error) { - node, err := ccall.Agnodef(g.Agraph, name, 1) +func (g *Graph) CreateSubNode(n *Node) (*Node, error) { + res, err := g.wasm.SubNode(context.Background(), n.getWasm(), 1) if err != nil { return nil, err } - return toNode(node), nil + return toNode(res), nil } -func (g *Graph) Node(name string) (*Node, error) { - node, err := ccall.Agnodef(g.Agraph, name, 0) +func (g *Graph) SubNode(n *Node) (*Node, error) { + res, err := g.wasm.SubNode(context.Background(), n.getWasm(), 0) if err != nil { return nil, err } - return toNode(node), nil + return toNode(res), nil } -func (g *Graph) IDNode(id IDTYPE, createFlag int) (*Node, error) { - node, err := ccall.Agidnode(g.Agraph, uint64(id), createFlag) +func (g *Graph) FirstNode() (*Node, error) { + res, err := g.wasm.FirstNode(context.Background()) if err != nil { return nil, err } - return toNode(node), nil + return toNode(res), nil } -func (g *Graph) SubNode(n *Node, createFlag int) (*Node, error) { - node, err := ccall.Agsubnodef(g.Agraph, n.Agnode, createFlag) +func (g *Graph) NextNode(n *Node) (*Node, error) { + res, err := g.wasm.NextNode(context.Background(), n.getWasm()) if err != nil { return nil, err } - return toNode(node), nil + return toNode(res), nil } -func (g *Graph) FirstNode() *Node { - return toNode(ccall.Agfstnode(g.Agraph)) +func (g *Graph) LastNode() (*Node, error) { + res, err := g.wasm.LastNode(context.Background()) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) NextNode(n *Node) *Node { - return toNode(ccall.Agnxtnode(g.Agraph, n.Agnode)) +func (g *Graph) PreviousNode(n *Node) (*Node, error) { + res, err := g.wasm.PrevNode(context.Background(), n.getWasm()) + if err != nil { + return nil, err + } + return toNode(res), nil } -func (g *Graph) LastNode() *Node { - return toNode(ccall.Aglstnode(g.Agraph)) +func (g *Graph) SubRep(n *Node) (*SubNode, error) { + res, err := g.wasm.SubRep(context.Background(), n.getWasm()) + if err != nil { + return nil, err + } + return toSubNode(res), nil } -func (g *Graph) PreviousNode(n *Node) *Node { - return toNode(ccall.Agprvnode(g.Agraph, n.Agnode)) +func (g *Graph) CreateEdgeByName(name string, start *Node, end *Node) (*Edge, error) { + res, err := g.wasm.Edge(context.Background(), start.getWasm(), end.getWasm(), name, 1) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) SubRep(n *Node) *SubNode { - return &SubNode{ - Agsubnode: ccall.Agsubrep(g.Agraph, n.Agnode), +func (g *Graph) EdgeByName(name string, start *Node, end *Node) (*Edge, error) { + res, err := g.wasm.Edge(context.Background(), start.getWasm(), end.getWasm(), name, 0) + if err != nil { + return nil, err } + return toEdge(res), nil } -func (g *Graph) CreateEdge(name string, start *Node, end *Node) (*Edge, error) { - edge, err := ccall.Agedgef(g.Agraph, start.Agnode, end.Agnode, name, 1) +func (g *Graph) CreateEdgeByID(id ID, start *Node, end *Node) (*Edge, error) { + res, err := g.wasm.IdEdge(context.Background(), start.getWasm(), end.getWasm(), uint64(id), 1) if err != nil { return nil, err } - return toEdge(edge), nil + return toEdge(res), nil } -func (g *Graph) IDEdge(t *Node, h *Node, id IDTYPE, createFlag int) (*Edge, error) { - edge, err := ccall.Agidedge(g.Agraph, t.Agnode, h.Agnode, uint64(id), createFlag) +func (g *Graph) EdgeByID(id ID, start *Node, end *Node) (*Edge, error) { + res, err := g.wasm.IdEdge(context.Background(), start.getWasm(), end.getWasm(), uint64(id), 0) if err != nil { return nil, err } - return toEdge(edge), nil + return toEdge(res), nil } -func (g *Graph) SubEdge(e *Edge, createFlag int) (*Edge, error) { - edge, err := ccall.Agsubedge(g.Agraph, e.Agedge, createFlag) +func (g *Graph) CreateSubEdge(e *Edge) (*Edge, error) { + res, err := g.wasm.SubEdge(context.Background(), e.getWasm(), 1) if err != nil { return nil, err } - return toEdge(edge), nil + return toEdge(res), nil } -func (g *Graph) FirstIn(n *Node) *Edge { - return toEdge(ccall.Agfstin(g.Agraph, n.Agnode)) +func (g *Graph) SubEdge(e *Edge) (*Edge, error) { + res, err := g.wasm.SubEdge(context.Background(), e.getWasm(), 0) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) NextIn(n *Edge) *Edge { - return toEdge(ccall.Agnxtin(g.Agraph, n.Agedge)) +func (g *Graph) FirstIn(n *Node) (*Edge, error) { + res, err := g.wasm.FirstIn(context.Background(), n.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) FirstOut(n *Node) *Edge { - return toEdge(ccall.Agfstout(g.Agraph, n.Agnode)) +func (g *Graph) FirstOut(n *Node) (*Edge, error) { + res, err := g.wasm.FirstOut(context.Background(), n.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil +} + +func (g *Graph) NextIn(e *Edge) (*Edge, error) { + res, err := g.wasm.NextIn(context.Background(), e.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) NextOut(e *Edge) *Edge { - return toEdge(ccall.Agnxtout(g.Agraph, e.Agedge)) +func (g *Graph) NextOut(e *Edge) (*Edge, error) { + res, err := g.wasm.NextOut(context.Background(), e.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) FirstEdge(n *Node) *Edge { - return toEdge(ccall.Agfstedge(g.Agraph, n.Agnode)) +func (g *Graph) FirstEdge(n *Node) (*Edge, error) { + res, err := g.wasm.FirstEdge(context.Background(), n.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) NextEdge(e *Edge, n *Node) *Edge { - return toEdge(ccall.Agnxtedge(g.Agraph, e.Agedge, n.Agnode)) +func (g *Graph) NextEdge(e *Edge, n *Node) (*Edge, error) { + res, err := g.wasm.NextEdge(context.Background(), e.getWasm(), n.getWasm()) + if err != nil { + return nil, err + } + return toEdge(res), nil } -func (g *Graph) Contains(o interface{}) bool { - switch t := o.(type) { - case *Graph: - return ccall.Agcontains(g.Agraph, unsafe.Pointer(t.Agraph.C())) - case *Node: - return ccall.Agcontains(g.Agraph, unsafe.Pointer(t.Agnode.C())) - case *Edge: - return ccall.Agcontains(g.Agraph, unsafe.Pointer(t.Agedge.C())) +func (g *Graph) Contains(o any) (bool, error) { + res, err := g.wasm.Contains(context.Background(), o) + if err != nil { + return false, err } - return false + return res == 1, nil } -func (g *Graph) Name() string { - return ccall.Agnameof(unsafe.Pointer(g.Agraph.C())) +func (g *Graph) Name() (string, error) { + return wasm.GraphNameOf(context.Background(), g.wasm) } -func (g *Graph) Delete(obj unsafe.Pointer) error { - return ccall.Agdelete(g.Agraph, obj) +func (g *Graph) Delete(obj any) error { + res, err := g.wasm.Delete(context.Background(), obj) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) DeleteSubGraph(sub *Graph) int32 { - return ccall.Agdelsubg(g.Agraph, sub.Agraph) +func (g *Graph) DeleteSubGraph(sub *Graph) error { + res, err := g.wasm.DeleteSubGraph(context.Background(), sub.getWasm()) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) DeleteNode(n *Node) bool { - return ccall.Agdelnode(g.Agraph, n.Agnode) == 1 +func (g *Graph) DeleteNode(n *Node) (bool, error) { + res, err := g.wasm.DeleteNode(context.Background(), n.getWasm()) + if err != nil { + return false, err + } + return res == 1, nil } -func (g *Graph) DeleteEdge(e *Edge) bool { - return ccall.Agdeledge(g.Agraph, e.Agedge) == 1 +func (g *Graph) DeleteEdge(e *Edge) (bool, error) { + res, err := g.wasm.DeleteEdge(context.Background(), e.getWasm()) + if err != nil { + return false, err + } + return res == 1, nil } -func (g *Graph) Strdup(s string) string { - return ccall.Agstrdup(g.Agraph, s) +func (g *Graph) Strdup(s string) (string, error) { + return g.wasm.Strdup(context.Background(), s) } -func (g *Graph) StrdupHTML(s string) string { - return ccall.AgstrdupHTML(g.Agraph, s) +func (g *Graph) StrdupHTML(s string) (string, error) { + return g.wasm.StrdupHTML(context.Background(), s) } -func (g *Graph) StrBind(s string) string { - return ccall.Agstrbind(g.Agraph, s) +func (g *Graph) StrBind(s string) (string, error) { + return g.wasm.StrBind(context.Background(), s) } -func (g *Graph) StrFree(s string) int { - return ccall.Agstrfree(g.Agraph, s) +func (g *Graph) StrFree(s string) error { + res, err := g.wasm.StrFree(context.Background(), s) + if err != nil { + return err + } + return toError(res) } -func (g *Graph) Attr(kind int, name, value string) *Symbol { - return &Symbol{ - Agsym: ccall.Agattrf(g.Agraph, kind, name, value), +func (g *Graph) Attr(kind int, name, value string) (*Symbol, error) { + res, err := g.wasm.Attr(context.Background(), kind, name, value) + if err != nil { + return nil, err } + return toSymbol(res), nil } -func (g *Graph) NextAttr(kind int, attr *Symbol) *Symbol { - return &Symbol{ - Agsym: ccall.Agnxtattr(g.Agraph, kind, attr.Agsym), +func (g *Graph) NextAttr(kind int, attr *Symbol) (*Symbol, error) { + res, err := g.wasm.NextAttr(context.Background(), kind, attr.getWasm()) + if err != nil { + return nil, err } + return toSymbol(res), nil } -func (g *Graph) Init(kind int, recName string, recSize int, moveToFront int) { - ccall.Aginit(g.Agraph, kind, recName, recSize, moveToFront) +func (g *Graph) Init(kind int, recName string, recSize int, moveToFront int) error { + return g.wasm.Init(context.Background(), kind, recName, recSize, moveToFront) } -func (g *Graph) Clean(kind int, recName string) { - ccall.Agclean(g.Agraph, kind, recName) +func (g *Graph) Clean(kind int, recName string) error { + return g.wasm.Clean(context.Background(), kind, recName) } -func (g *Graph) SubGraph(name string, cflag int) *Graph { - return &Graph{ - Agraph: ccall.Agsubg(g.Agraph, name, cflag), +func (g *Graph) CreateSubGraphByName(name string) (*Graph, error) { + res, err := g.wasm.SubGraph(context.Background(), name, 1) + if err != nil { + return nil, err } + return toGraph(res), nil } -func (g *Graph) IDSubGraph(id IDTYPE, cflag int) *Graph { - return &Graph{ - Agraph: ccall.Agidsubg(g.Agraph, uint64(id), cflag), +func (g *Graph) SubGraphByName(name string) (*Graph, error) { + res, err := g.wasm.SubGraph(context.Background(), name, 0) + if err != nil { + return nil, err } + return toGraph(res), nil } -func (g *Graph) FirstSubGraph() *Graph { - return &Graph{ - Agraph: ccall.Agfstsubg(g.Agraph), +func (g *Graph) CreateSubGraphByID(id ID) (*Graph, error) { + res, err := g.wasm.IdSubGraph(context.Background(), uint64(id), 1) + if err != nil { + return nil, err } + return toGraph(res), nil } -func (g *Graph) NextSubGraph() *Graph { - return &Graph{ - Agraph: ccall.Agnxtsubg(g.Agraph), +func (g *Graph) SubGraphByID(id ID) (*Graph, error) { + res, err := g.wasm.IdSubGraph(context.Background(), uint64(id), 0) + if err != nil { + return nil, err } + return toGraph(res), nil } -func (g *Graph) Parent() *Graph { - return &Graph{ - Agraph: ccall.Agparent(g.Agraph), +func (g *Graph) FirstSubGraph() (*Graph, error) { + res, err := g.wasm.FirstSubGraph(context.Background()) + if err != nil { + return nil, err + } + return toGraph(res), nil +} + +func (g *Graph) NextSubGraph() (*Graph, error) { + res, err := g.wasm.NextSubGraph(context.Background()) + if err != nil { + return nil, err } + return toGraph(res), nil } -func (g *Graph) NumberNodes() int { - return ccall.Agnnodes(g.Agraph) +func (g *Graph) NodeNum() (int, error) { + return g.wasm.NodeNum(context.Background()) } -func (g *Graph) NumberEdges() int { - return ccall.Agnedges(g.Agraph) +func (g *Graph) EdgeNum() (int, error) { + return g.wasm.EdgeNum(context.Background()) } -func (g *Graph) NumberSubGraph() int { - return ccall.Agnsubg(g.Agraph) +func (g *Graph) SubGraphNum() (int, error) { + return g.wasm.SubGraphNum(context.Background()) } -// Returns the degree of the given node in the graph, where arguments "in" and +// Degree returns the degree of the given node in the graph, where arguments "in" and // "out" are C-like booleans that select which edge sets to query. // -// g.Degree(node, 0, 0) // always returns 0 -// g.Degree(node, 0, 1) // returns the node's outdegree -// g.Degree(node, 1, 0) // returns the node's indegree -// g.Degree(node, 1, 1) // returns the node's total degree (indegree + outdegree) -func (g *Graph) Degree(n *Node, in, out int) int { - return ccall.Agdegree(g.Agraph, n.Agnode, in, out) +// g.Degree(node, 0, 0) // always returns 0 +// g.Degree(node, 0, 1) // returns the node's outdegree +// g.Degree(node, 1, 0) // returns the node's indegree +// g.Degree(node, 1, 1) // returns the node's total degree (indegree + outdegree). +func (g *Graph) Degree(n *Node, in, out int) (int, error) { + return g.wasm.Degree(context.Background(), n.getWasm(), in, out) } -// Returns the indegree of the given node in the graph. +// Indegree returns the indegree of the given node in the graph. // // Note: While undirected graphs don't normally have a // notion of indegrees, calling this method on an // undirected graph will treat it as if it's directed. // As a result, it's best to avoid calling this method // on an undirected graph. -func (g *Graph) Indegree(n *Node) int { - return ccall.Agdegree(g.Agraph, n.Agnode, 1, 0) +func (g *Graph) Indegree(n *Node) (int, error) { + return g.wasm.Degree(context.Background(), n.getWasm(), 1, 0) } -// Returns the outdegree of the given node in the graph. +// Outdegree returns the outdegree of the given node in the graph. // // Note: While undirected graphs don't normally have a // notion of outdegrees, calling this method on an // undirected graph will treat it as if it's directed. // As a result, it's best to avoid calling this method // on an undirected graph. -func (g *Graph) Outdegree(n *Node) int { - return ccall.Agdegree(g.Agraph, n.Agnode, 0, 1) +func (g *Graph) Outdegree(n *Node) (int, error) { + return g.wasm.Degree(context.Background(), n.getWasm(), 0, 1) } -// Returns the total degree of the given node in the graph. +// TotalDegree returns the total degree of the given node in the graph. // This can be thought of as the total number of edges coming // in and out of a node. -func (g *Graph) TotalDegree(n *Node) int { - return ccall.Agdegree(g.Agraph, n.Agnode, 1, 1) +func (g *Graph) TotalDegree(n *Node) (int, error) { + return g.wasm.Degree(context.Background(), n.getWasm(), 1, 1) } -func (g *Graph) CountUniqueEdges(n *Node, in, out int) int { - return ccall.Agcountuniqedges(g.Agraph, n.Agnode, in, out) +func (g *Graph) CountUniqueEdges(n *Node, in, out int) (int, error) { + return g.wasm.CountUniqueEdges(context.Background(), n.getWasm(), in, out) } -func (g *Graph) InternalMapClearLocalNames() { - ccall.Aginternalmapclearlocalnames(g.Agraph) +func (n *Node) Name() (string, error) { + return wasm.GraphNameOf(context.Background(), n.wasm) } -func (g *Graph) Flatten(flag int) { - ccall.Agflatten(g.Agraph, flag) +func (n *Node) CopyAttr(t *Node) error { + res, err := wasm.CopyAttr(context.Background(), n.wasm, t.getWasm()) + if err != nil { + return err + } + return toError(res) } -func (n *Node) Name() string { - return ccall.Agnameof(unsafe.Pointer(n.Agnode.C())) +func (n *Node) BindRecord(name string, size uint, moveToFront int) error { + if _, err := wasm.BindRecord(context.Background(), n.wasm, name, size, moveToFront); err != nil { + return err + } + return nil } -func (n *Node) CopyAttr(t *Node) int { - return ccall.Agcopyattr(unsafe.Pointer(n.Agnode.C()), unsafe.Pointer(t.Agnode.C())) +func (n *Node) Record(name string, moveToFront int) (*Record, error) { + res, err := wasm.GetRecord(context.Background(), n.wasm, name, moveToFront) + if err != nil { + return nil, err + } + return toRecord(res), nil } -func (n *Node) BindRecord(name string, size uint, moveToFront int) { - ccall.Agbindrec(unsafe.Pointer(n.Agnode.C()), name, size, moveToFront) +func (n *Node) DeleteRecord(name string) error { + res, err := wasm.DeleteRecord(context.Background(), n.wasm, name) + if err != nil { + return err + } + return toError(res) } -func (n *Node) Record(name string, moveToFront int) *Record { - rec := ccall.Aggetrec(unsafe.Pointer(n.Agnode.C()), name, moveToFront) - if rec == nil { - return nil +func (n *Node) GetStr(name string) (string, error) { + return wasm.GetStr(context.Background(), n.wasm, name) +} + +func (n *Node) SymbolName(sym *Symbol) (string, error) { + return wasm.GetSymName(context.Background(), n.wasm, sym.getWasm()) +} + +func (n *Node) Set(name, value string) error { + res, err := wasm.SetStr(context.Background(), n.wasm, name, value) + if err != nil { + return err } - return &Record{Agrec: rec} + return toError(res) } -func (n *Node) DeleteRecord(name string) int { - return ccall.Agdelrec(unsafe.Pointer(n.Agnode.C()), name) +func (n *Node) SetSymbolName(sym *Symbol, value string) error { + res, err := wasm.SetSymName(context.Background(), n.wasm, sym.getWasm(), value) + if err != nil { + return err + } + return toError(res) } -func (n *Node) Get(name string) string { - return ccall.Agget(unsafe.Pointer(n.Agnode.C()), name) +func (n *Node) SafeSet(name, value, def string) error { + res, err := wasm.SafeSetStr(context.Background(), n.wasm, name, value, def) + if err != nil { + return err + } + return toError(res) } -func (n *Node) XGet(sym *Symbol) string { - return ccall.Agxget(unsafe.Pointer(n.Agnode.C()), sym.Agsym) +func (n *Node) ReLabel(newname string) error { + res, err := n.wasm.ReLabel(context.Background(), newname) + if err != nil { + return err + } + return toError(res) } -func (n *Node) Set(name, value string) int { - return ccall.Agset(unsafe.Pointer(n.Agnode.C()), name, value) +func (n *Node) Before(v *Node) error { + res, err := n.wasm.Before(context.Background(), v.getWasm()) + if err != nil { + return err + } + return toError(res) } -func (n *Node) XSet(sym *Symbol, value string) int { - return ccall.Agxset(unsafe.Pointer(n.Agnode.C()), sym.Agsym, value) +func (e *Edge) Name() (string, error) { + return wasm.GraphNameOf(context.Background(), e.wasm) } -func (n *Node) SafeSet(name, value, def string) int { - return ccall.Agsafeset(unsafe.Pointer(n.Agnode.C()), name, value, def) +func (e *Edge) CopyAttr(t *Edge) error { + res, err := wasm.CopyAttr(context.Background(), e.wasm, t.getWasm()) + if err != nil { + return err + } + return toError(res) } -func (n *Node) ReLabel(newname string) error { - return ccall.AgrelabelNode(n.Agnode, newname) +func (e *Edge) BindRecord(name string, size uint, moveToFront int) error { + if _, err := wasm.BindRecord(context.Background(), e.wasm, name, size, moveToFront); err != nil { + return err + } + return nil } -func (n *Node) Before(v *Node) error { - return ccall.Agnodebefore(n.Agnode, v.Agnode) +func (e *Edge) Record(name string, moveToFront int) (*Record, error) { + res, err := wasm.GetRecord(context.Background(), e.wasm, name, moveToFront) + if err != nil { + return nil, err + } + return toRecord(res), nil } -func (e *Edge) Name() string { - return ccall.Agnameof(unsafe.Pointer(e.Agedge.C())) +func (e *Edge) DeleteRecord(name string) error { + res, err := wasm.DeleteRecord(context.Background(), e.wasm, name) + if err != nil { + return err + } + return toError(res) } -func (e *Edge) CopyAttr(t *Edge) int { - return ccall.Agcopyattr(unsafe.Pointer(e.Agedge.C()), unsafe.Pointer(t.Agedge.C())) +func (e *Edge) GetStr(name string) (string, error) { + return wasm.GetStr(context.Background(), e.wasm, name) } -func (e *Edge) BindRecord(name string, size uint, moveToFront int) { - ccall.Agbindrec(unsafe.Pointer(e.Agedge.C()), name, size, moveToFront) +func (e *Edge) SymbolName(sym *Symbol) (string, error) { + return wasm.GetSymName(context.Background(), e.wasm, sym.getWasm()) } -func (e *Edge) Record(name string, moveToFront int) *Record { - rec := ccall.Aggetrec(unsafe.Pointer(e.Agedge.C()), name, moveToFront) - if rec == nil { - return nil +func (e *Edge) Set(name, value string) error { + res, err := wasm.SetStr(context.Background(), e.wasm, name, value) + if err != nil { + return err + } + return toError(res) +} + +func (e *Edge) SetSymbolName(sym *Symbol, value string) error { + res, err := wasm.SetSymName(context.Background(), e.wasm, sym.getWasm(), value) + if err != nil { + return err } - return &Record{Agrec: rec} + return toError(res) } -func (e *Edge) DeleteRecord(name string) int { - return ccall.Agdelrec(unsafe.Pointer(e.Agedge.C()), name) +func (e *Edge) SafeSet(name, value, def string) error { + res, err := wasm.SafeSetStr(context.Background(), e.wasm, name, value, def) + if err != nil { + return err + } + return toError(res) } -func (e *Edge) Get(name string) string { - return ccall.Agget(unsafe.Pointer(e.Agedge.C()), name) +func HTMLStr(s string) (bool, error) { + return wasm.HtmlStr(context.Background(), s) } -func (e *Edge) XGet(sym *Symbol) string { - return ccall.Agxget(unsafe.Pointer(e.Agedge.C()), sym.Agsym) +func Canon(s string, i int) (string, error) { + return wasm.Canon(context.Background(), s, i) } -func (e *Edge) Set(name, value string) int { - return ccall.Agset(unsafe.Pointer(e.Agedge.C()), name, value) +func StrCanon(a0 string, a1 string) (string, error) { + return wasm.StrCanon(context.Background(), a0, a1) } -func (e *Edge) XSet(sym *Symbol, value string) int { - return ccall.Agxset(unsafe.Pointer(e.Agedge.C()), sym.Agsym, value) +func CanonStr(str string) (string, error) { + return wasm.CanonStr(context.Background(), str) } -func (e *Edge) SafeSet(name, value, def string) int { - return ccall.Agsafeset(unsafe.Pointer(e.Agedge.C()), name, value, def) +func AttrSym(obj *Object, name string) (*Symbol, error) { + sym, err := wasm.AttrSym(context.Background(), obj.getWasm(), name) + if err != nil { + return nil, err + } + return toSymbol(sym), nil +} + +func toError(result int) error { + if result == 0 { + return nil + } + return lastError() +} + +func lastError() error { + if e, _ := wasm.LastError(context.Background()); e != "" { + return errors.New(e) + } + return nil } diff --git a/cgraph/init.go b/cgraph/init.go new file mode 100644 index 0000000..7ff5cd5 --- /dev/null +++ b/cgraph/init.go @@ -0,0 +1,60 @@ +package cgraph + +import ( + "context" + + "github.com/goccy/go-graphviz/internal/wasm" +) + +var ( + Directed *Desc + StrictDirected *Desc + UnDirected *Desc + StrictUnDirected *Desc +) + +func init() { + if err := setGlobalVars(context.Background()); err != nil { + panic(err) + } +} + +func setGlobalVars(ctx context.Context) error { + // Set MAX to prevent outputting internally generated errors or warnings with agerr to the stderr. + wasm.SetError(ctx, wasm.MAX) + + directed, err := wasm.NewGraphDescriptor(ctx) + if err != nil { + return err + } + directed.SetDirected(1) + directed.SetMaingraph(1) + + strictDirected, err := wasm.NewGraphDescriptor(ctx) + if err != nil { + return err + } + strictDirected.SetDirected(1) + strictDirected.SetStrict(1) + strictDirected.SetMaingraph(1) + + undirected, err := wasm.NewGraphDescriptor(ctx) + if err != nil { + return err + } + undirected.SetMaingraph(1) + + strictUndirected, err := wasm.NewGraphDescriptor(ctx) + if err != nil { + return err + } + strictUndirected.SetStrict(1) + strictUndirected.SetMaingraph(1) + + Directed = toDesc(directed) + StrictDirected = toDesc(strictDirected) + UnDirected = toDesc(undirected) + StrictUnDirected = toDesc(strictUndirected) + + return nil +} diff --git a/cgraph/link.go b/cgraph/link.go new file mode 100644 index 0000000..305e860 --- /dev/null +++ b/cgraph/link.go @@ -0,0 +1,20 @@ +package cgraph + +import ( + _ "unsafe" + + "github.com/goccy/go-graphviz/cdt" + "github.com/goccy/go-graphviz/internal/wasm" +) + +//go:linkname toDict github.com/goccy/go-graphviz/cdt.toDict +func toDict(*wasm.Dict) *cdt.Dict + +//go:linkname toDictWasm github.com/goccy/go-graphviz/cdt.toDictWasm +func toDictWasm(*cdt.Dict) *wasm.Dict + +//go:linkname toDictLink github.com/goccy/go-graphviz/cdt.toLink +func toDictLink(*wasm.DictLink) *cdt.Link + +//go:linkname toDictLinkWasm github.com/goccy/go-graphviz/cdt.toDictLinkWasm +func toDictLinkWasm(*cdt.Link) *wasm.DictLink diff --git a/cmd/dot/dot.go b/cmd/dot/dot.go index 4daff05..2ef4244 100644 --- a/cmd/dot/dot.go +++ b/cmd/dot/dot.go @@ -1,13 +1,13 @@ package main import ( + "context" "errors" "fmt" - "io/ioutil" + "io" "os" "github.com/goccy/go-graphviz" - "github.com/goccy/go-graphviz/cgraph" "github.com/jessevdk/go-flags" "golang.org/x/crypto/ssh/terminal" ) @@ -18,12 +18,12 @@ type Option struct { OutputFile string `description:"specify output file name" short:"o" required:"true"` } -func readGraph(args []string) (*cgraph.Graph, error) { +func readGraph(args []string) (*graphviz.Graph, error) { if len(args) == 0 { if terminal.IsTerminal(0) { return nil, errors.New("required dot file or stdin") } - bytes, err := ioutil.ReadAll(os.Stdin) + bytes, err := io.ReadAll(os.Stdin) if err != nil { return nil, err } @@ -33,12 +33,15 @@ func readGraph(args []string) (*cgraph.Graph, error) { return graphviz.ParseFile(dotFile) } -func _main(args []string, opt *Option) (e error) { +func _main(ctx context.Context, args []string, opt *Option) (e error) { graph, err := readGraph(args) if err != nil { return err } - g := graphviz.New() + g, err := graphviz.New(ctx) + if err != nil { + return err + } defer func() { if err := graph.Close(); err != nil { e = err @@ -50,7 +53,7 @@ func _main(args []string, opt *Option) (e error) { if opt.Layout != "" { g.SetLayout(opt.Layout) } - return g.RenderFilename(graph, opt.Format, opt.OutputFile) + return g.RenderFilename(ctx, graph, opt.Format, opt.OutputFile) } func main() { @@ -60,7 +63,7 @@ func main() { if err != nil { return } - if err := _main(args, &opt); err != nil { + if err := _main(context.Background(), args, &opt); err != nil { fmt.Println(err) } } diff --git a/cmd/dot/go.mod b/cmd/dot/go.mod new file mode 100644 index 0000000..fda46ed --- /dev/null +++ b/cmd/dot/go.mod @@ -0,0 +1,20 @@ +module dot + +go 1.21.9 + +replace github.com/goccy/go-graphviz => ../../ + +require ( + github.com/goccy/go-graphviz v0.0.0-00010101000000-000000000000 + github.com/jessevdk/go-flags v1.6.1 + golang.org/x/crypto v0.28.0 +) + +require ( + github.com/fogleman/gg v1.3.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/tetratelabs/wazero v1.7.3 // indirect + golang.org/x/image v0.14.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/term v0.25.0 // indirect +) diff --git a/cmd/dot/go.sum b/cmd/dot/go.sum new file mode 100644 index 0000000..d604e45 --- /dev/null +++ b/cmd/dot/go.sum @@ -0,0 +1,20 @@ +github.com/corona10/goimagehash v1.0.2 h1:pUfB0LnsJASMPGEZLj7tGY251vF+qLGqOgEP4rUs6kA= +github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/jessevdk/go-flags v1.6.1 h1:Cvu5U8UGrLay1rZfv/zP7iLpSHGUZ/Ou68T0iX1bBK4= +github.com/jessevdk/go-flags v1.6.1/go.mod h1:Mk8T1hIAWpOiJiHa9rJASDK2UGWji0EuPGBnNLMooyc= +github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 h1:BvoENQQU+fZ9uukda/RzCAL/191HHwJA5b13R6diVlY= +github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/tetratelabs/wazero v1.7.3 h1:PBH5KVahrt3S2AHgEjKu4u+LlDbbk+nsGE3KLucy6Rw= +github.com/tetratelabs/wazero v1.7.3/go.mod h1:ytl6Zuh20R/eROuyDaGPkp82O9C/DJfXAwJfQ3X6/7Y= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= diff --git a/compatible_test.go b/compatible_test.go index 96d16b9..e580c61 100644 --- a/compatible_test.go +++ b/compatible_test.go @@ -2,11 +2,11 @@ package graphviz_test import ( "bytes" + "context" "encoding/base64" "encoding/json" "fmt" "image" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -25,7 +25,7 @@ var ( ) const ( - imageThreshold = 15 + imageThreshold = 20 ) func generateTestData() error { @@ -35,7 +35,7 @@ func generateTestData() error { if info.IsDir() { return nil } - tmpfile, err := ioutil.TempFile("", "graphviz") + tmpfile, err := os.CreateTemp("", "graphviz") if err != nil { return err } @@ -65,7 +65,7 @@ func generateTestData() error { if err != nil { return err } - if err := ioutil.WriteFile(imageHashJSON, content, 0644); err != nil { + if err := os.WriteFile(imageHashJSON, content, 0644); err != nil { return err } return nil @@ -77,7 +77,7 @@ func TestGraphviz_Compatible(t *testing.T) { // t.Fatal(err) // } var pathToHashDump map[string]string - file, err := ioutil.ReadFile(imageHashJSON) + file, err := os.ReadFile(imageHashJSON) if err != nil { t.Fatal(err) } @@ -89,40 +89,46 @@ func TestGraphviz_Compatible(t *testing.T) { if info.IsDir() { return nil } - file, err := ioutil.ReadFile(path) - if err != nil { - t.Fatal(err) - } - graph, err := graphviz.ParseBytes(file) - if err != nil { - t.Fatal(err) - } - defer graph.Close() - g := graphviz.New() - defer g.Close() - image, err := g.RenderImage(graph) - if err != nil { - t.Fatal(err) - } - hash, err := goimagehash.DifferenceHash(image) - if err != nil { - t.Fatal(err) - } - dump, err := base64.StdEncoding.DecodeString(pathToHashDump[path]) - if err != nil { - t.Fatal(err) - } - targetHash, err := goimagehash.LoadImageHash(bytes.NewBuffer(dump)) - if err != nil { - t.Fatal(err) - } - distance, err := hash.Distance(targetHash) - if err != nil { - t.Fatal(err) - } - if distance > imageThreshold { - t.Fatalf("doesn't compatible image with dot. %s distance = %d", path, distance) - } + t.Run(path, func(t *testing.T) { + file, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + graph, err := graphviz.ParseBytes(file) + if err != nil { + t.Fatal(err) + } + defer graph.Close() + ctx := context.Background() + g, err := graphviz.New(ctx) + if err != nil { + t.Fatal(err) + } + defer g.Close() + image, err := g.RenderImage(ctx, graph) + if err != nil { + t.Fatal(err) + } + hash, err := goimagehash.DifferenceHash(image) + if err != nil { + t.Fatal(err) + } + dump, err := base64.StdEncoding.DecodeString(pathToHashDump[path]) + if err != nil { + t.Fatal(err) + } + targetHash, err := goimagehash.LoadImageHash(bytes.NewBuffer(dump)) + if err != nil { + t.Fatal(err) + } + distance, err := hash.Distance(targetHash) + if err != nil { + t.Fatal(err) + } + if distance > imageThreshold { + t.Fatalf("doesn't compatible image with dot. %s distance = %d", path, distance) + } + }) return nil }) } diff --git a/go.mod b/go.mod index ae98207..15e28be 100644 --- a/go.mod +++ b/go.mod @@ -1,19 +1,13 @@ module github.com/goccy/go-graphviz -go 1.20 +go 1.21 require ( github.com/corona10/goimagehash v1.0.2 github.com/fogleman/gg v1.3.0 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 - github.com/jessevdk/go-flags v1.4.0 - github.com/pkg/errors v0.9.1 - golang.org/x/crypto v0.7.0 + github.com/tetratelabs/wazero v1.7.3 golang.org/x/image v0.14.0 ) -require ( - github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect -) +require github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 // indirect diff --git a/go.sum b/go.sum index 6938c55..434b63a 100644 --- a/go.sum +++ b/go.sum @@ -4,17 +4,9 @@ github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 h1:BvoENQQU+fZ9uukda/RzCAL/191HHwJA5b13R6diVlY= github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +github.com/tetratelabs/wazero v1.7.3 h1:PBH5KVahrt3S2AHgEjKu4u+LlDbbk+nsGE3KLucy6Rw= +github.com/tetratelabs/wazero v1.7.3/go.mod h1:ytl6Zuh20R/eROuyDaGPkp82O9C/DJfXAwJfQ3X6/7Y= golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= diff --git a/graphviz.go b/graphviz.go index 383f337..0627154 100644 --- a/graphviz.go +++ b/graphviz.go @@ -1,6 +1,7 @@ package graphviz import ( + "context" "image" "io" @@ -12,7 +13,7 @@ import ( type Graphviz struct { ctx *gvc.Context name string - dir *cgraph.Desc + dir *GraphDescriptor layout Layout } @@ -23,6 +24,9 @@ const ( DOT Layout = "dot" FDP Layout = "fdp" NEATO Layout = "neato" + NOP Layout = "nop" + NOP1 Layout = "nop1" + NOP2 Layout = "nop2" OSAGE Layout = "osage" PATCHWORK Layout = "patchwork" SFDP Layout = "sfdp" @@ -38,28 +42,28 @@ const ( JPG Format = "jpg" ) -func ParseFile(path string) (*cgraph.Graph, error) { - graph, err := cgraph.ParseFile(path) +func New(ctx context.Context) (*Graphviz, error) { + c, err := gvc.New(ctx) if err != nil { return nil, err } - return graph, nil + return &Graphviz{ + ctx: c, + dir: Directed, + layout: DOT, + }, nil } -func ParseBytes(bytes []byte) (*cgraph.Graph, error) { - graph, err := cgraph.ParseBytes(bytes) +func NewWithPlugins(ctx context.Context, plugins ...Plugin) (*Graphviz, error) { + c, err := gvc.NewWithPlugins(ctx, plugins...) if err != nil { return nil, err } - return graph, nil -} - -func New() *Graphviz { return &Graphviz{ - ctx: gvc.New(), - dir: cgraph.Directed, + ctx: c, + dir: Directed, layout: DOT, - } + }, nil } func (g *Graphviz) Close() error { @@ -75,59 +79,56 @@ func (g *Graphviz) SetFontFace(callback func(size float64) (font.Face, error)) { gvc.SetFontFace(callback) } -func (g *Graphviz) SetRenderer(format Format, renderer gvc.Renderer) { - gvc.RegisterRenderer(string(format), renderer) -} - -func (g *Graphviz) Render(graph *cgraph.Graph, format Format, w io.Writer) (e error) { - if err := g.ctx.Layout(graph, string(g.layout)); err != nil { - return err - } +func (g *Graphviz) Render(ctx context.Context, graph *Graph, format Format, w io.Writer) (e error) { defer func() { - if err := g.ctx.FreeLayout(graph); err != nil { + if err := g.ctx.FreeLayout(ctx, graph); err != nil { e = err } }() - if err := g.ctx.RenderData(graph, string(format), w); err != nil { + if err := g.ctx.Layout(ctx, graph, string(g.layout)); err != nil { + return err + } + if err := g.ctx.RenderData(ctx, graph, string(format), w); err != nil { return err } return nil } -func (g *Graphviz) RenderImage(graph *cgraph.Graph) (img image.Image, e error) { - if err := g.ctx.Layout(graph, string(g.layout)); err != nil { - return nil, err - } +func (g *Graphviz) RenderImage(ctx context.Context, graph *Graph) (img image.Image, e error) { defer func() { - if err := g.ctx.FreeLayout(graph); err != nil { + if err := g.ctx.FreeLayout(ctx, graph); err != nil { e = err } }() - image, err := g.ctx.RenderImage(graph, string(PNG)) + + if err := g.ctx.Layout(ctx, graph, string(g.layout)); err != nil { + return nil, err + } + image, err := g.ctx.RenderImage(ctx, graph, string(PNG)) if err != nil { return nil, err } return image, nil } -func (g *Graphviz) RenderFilename(graph *cgraph.Graph, format Format, path string) (e error) { - if err := g.ctx.Layout(graph, string(g.layout)); err != nil { - return err - } +func (g *Graphviz) RenderFilename(ctx context.Context, graph *Graph, format Format, path string) (e error) { defer func() { - if err := g.ctx.FreeLayout(graph); err != nil { + if err := g.ctx.FreeLayout(ctx, graph); err != nil { e = err } }() - if err := g.ctx.RenderFilename(graph, string(format), path); err != nil { + if err := g.ctx.Layout(ctx, graph, string(g.layout)); err != nil { + return err + } + if err := g.ctx.RenderFilename(ctx, graph, string(format), path); err != nil { return err } return nil } -func (g *Graphviz) Graph(option ...GraphOption) (*cgraph.Graph, error) { +func (g *Graphviz) Graph(option ...GraphOption) (*Graph, error) { for _, opt := range option { opt(g) } diff --git a/graphviz.version b/graphviz.version new file mode 100644 index 0000000..a54d1ce --- /dev/null +++ b/graphviz.version @@ -0,0 +1 @@ +12.1.2 diff --git a/graphviz_test.go b/graphviz_test.go index c43c2b4..cb90471 100644 --- a/graphviz_test.go +++ b/graphviz_test.go @@ -2,7 +2,7 @@ package graphviz_test import ( "bytes" - "io/ioutil" + "context" "os" "testing" @@ -10,7 +10,11 @@ import ( ) func TestGraphviz_Image(t *testing.T) { - g := graphviz.New() + ctx := context.Background() + g, err := graphviz.New(ctx) + if err != nil { + t.Fatal(err) + } graph, err := g.Graph() if err != nil { t.Fatalf("%+v", err) @@ -19,15 +23,15 @@ func TestGraphviz_Image(t *testing.T) { graph.Close() g.Close() }() - n, err := graph.CreateNode("n") + n, err := graph.CreateNodeByName("n") if err != nil { t.Fatalf("%+v", err) } - m, err := graph.CreateNode("m") + m, err := graph.CreateNodeByName("m") if err != nil { t.Fatalf("%+v", err) } - e, err := graph.CreateEdge("e", n, m) + e, err := graph.CreateEdgeByName("e", n, m) if err != nil { t.Fatalf("%+v", err) } @@ -36,39 +40,39 @@ func TestGraphviz_Image(t *testing.T) { t.Run("png", func(t *testing.T) { t.Run("Render", func(t *testing.T) { var buf bytes.Buffer - if err := g.Render(graph, graphviz.PNG, &buf); err != nil { - t.Fatalf("%+v", err) + if err := g.Render(ctx, graph, graphviz.PNG, &buf); err != nil { + t.Fatalf("failed to render: %+v", err) } - if len(buf.Bytes()) != 4602 { + if len(buf.Bytes()) != 4632 { t.Fatalf("failed to encode png: bytes length is %d", len(buf.Bytes())) } }) t.Run("RenderImage", func(t *testing.T) { - image, err := g.RenderImage(graph) + image, err := g.RenderImage(ctx, graph) if err != nil { t.Fatalf("%+v", err) } bounds := image.Bounds() if bounds.Max.X != 83 { - t.Fatal("failed to get image") + t.Fatalf("expected bounds x is %d. but got %d", 83, bounds.Max.X) } if bounds.Max.Y != 177 { - t.Fatal("failed to get image") + t.Fatalf("expected bounds y is %d. but got %d", 177, bounds.Max.Y) } }) }) t.Run("jpg", func(t *testing.T) { t.Run("Render", func(t *testing.T) { var buf bytes.Buffer - if err := g.Render(graph, graphviz.JPG, &buf); err != nil { + if err := g.Render(ctx, graph, graphviz.JPG, &buf); err != nil { t.Fatalf("%+v", err) } - if len(buf.Bytes()) != 3296 { + if len(buf.Bytes()) != 3291 { t.Fatalf("failed to encode jpg: bytes length is %d", len(buf.Bytes())) } }) t.Run("RenderImage", func(t *testing.T) { - image, err := g.RenderImage(graph) + image, err := g.RenderImage(ctx, graph) if err != nil { t.Fatalf("%+v", err) } @@ -85,47 +89,50 @@ func TestGraphviz_Image(t *testing.T) { func TestParseBytes(t *testing.T) { type test struct { - input string - expected_valid bool + input string + expectedErr bool } tests := []test{ - {input: "graph test { a -- b }", expected_valid: true}, - {input: "graph test { a -- b", expected_valid: false}, - {input: "graph test { a -- b }", expected_valid: true}, - {input: "graph test { a -- }", expected_valid: false}, - {input: "graph test { a -- c }", expected_valid: true}, - {input: "graph test { a - b }", expected_valid: false}, - {input: "graph test { d -- e }", expected_valid: true}, - } - - for i, test := range tests { - _, err := graphviz.ParseBytes([]byte(test.input)) - actual_valid := err == nil - if actual_valid != test.expected_valid { - t.Errorf("Test %d of TestParseBytes failed. Parsing error: %+v", i+1, err) - } + {input: "graph test1 { a -- b }"}, + {input: "graph test2 { a -- b", expectedErr: true}, + {input: "graph test3 { a -- b }"}, + {input: "graph test4 { a -- }", expectedErr: true}, + {input: "graph test5 { a -- c }"}, + {input: "graph test6 { a - b }", expectedErr: true}, + {input: "graph test7 { d -- e }"}, + } + + for _, test := range tests { + t.Run(test.input, func(t *testing.T) { + _, err := graphviz.ParseBytes([]byte(test.input)) + if test.expectedErr && err == nil { + t.Fatal("expected parsing error") + } else if !test.expectedErr && err != nil { + t.Fatalf("failed to parse: %v", err) + } + }) } } func TestParseFile(t *testing.T) { type test struct { - input string - expected_valid bool + input string + expectedErr bool } tests := []test{ - {input: "graph test { a -- b }", expected_valid: true}, - {input: "graph test { a -- b", expected_valid: false}, - {input: "graph test { a -- b }", expected_valid: true}, - {input: "graph test { a -- }", expected_valid: false}, - {input: "graph test { a -- c }", expected_valid: true}, - {input: "graph test { a - b }", expected_valid: false}, - {input: "graph test { d -- e }", expected_valid: true}, + {input: "graph test1 { a -- b }"}, + {input: "graph test2 { a -- b", expectedErr: true}, + {input: "graph test3 { a -- b }"}, + {input: "graph test4 { a -- }", expectedErr: true}, + {input: "graph test5 { a -- c }"}, + {input: "graph test6 { a - b }", expectedErr: true}, + {input: "graph test7 { d -- e }"}, } createTempFile := func(t *testing.T, content string) *os.File { - file, err := ioutil.TempFile("", "*") + file, err := os.CreateTemp("", "*") if err != nil { t.Fatalf("There was an error creating a temporary file. Error: %+v", err) return nil @@ -138,24 +145,27 @@ func TestParseFile(t *testing.T) { return file } - for i, test := range tests { - tmpfile := createTempFile(t, test.input) - defer os.Remove(tmpfile.Name()) + for _, test := range tests { + t.Run(test.input, func(t *testing.T) { + tmpfile := createTempFile(t, test.input) + defer os.Remove(tmpfile.Name()) - _, err := graphviz.ParseFile(tmpfile.Name()) - actual_valid := err == nil - if actual_valid != test.expected_valid { - t.Errorf("Test %d of TestParseFile failed. Parsing error: %+v", i+1, err) - } + _, err := graphviz.ParseFile(tmpfile.Name()) + if test.expectedErr && err == nil { + t.Fatal("expected parsing error") + } else if !test.expectedErr && err != nil { + t.Fatalf("failed to parse: %v", err) + } + }) } } func TestNodeDegree(t *testing.T) { type test struct { - node_name string - expected_indegree int - expected_outdegree int - expected_total_degree int + nodeName string + expectedIndegree int + expectedOutdegree int + expectedTotalDegree int } type graphtest struct { @@ -165,23 +175,23 @@ func TestNodeDegree(t *testing.T) { graphtests := []graphtest{ {input: "digraph test { a -> b }", tests: []test{ - {node_name: "a", expected_indegree: 0, expected_outdegree: 1, expected_total_degree: 1}, - {node_name: "b", expected_indegree: 1, expected_outdegree: 0, expected_total_degree: 1}, + {nodeName: "a", expectedIndegree: 0, expectedOutdegree: 1, expectedTotalDegree: 1}, + {nodeName: "b", expectedIndegree: 1, expectedOutdegree: 0, expectedTotalDegree: 1}, }}, {input: "digraph test { a -> b; a -> b; a -> a; c -> a }", tests: []test{ - {node_name: "a", expected_indegree: 2, expected_outdegree: 3, expected_total_degree: 5}, - {node_name: "b", expected_indegree: 2, expected_outdegree: 0, expected_total_degree: 2}, - {node_name: "c", expected_indegree: 0, expected_outdegree: 1, expected_total_degree: 1}, + {nodeName: "a", expectedIndegree: 2, expectedOutdegree: 3, expectedTotalDegree: 5}, + {nodeName: "b", expectedIndegree: 2, expectedOutdegree: 0, expectedTotalDegree: 2}, + {nodeName: "c", expectedIndegree: 0, expectedOutdegree: 1, expectedTotalDegree: 1}, }}, {input: "graph test { a -- b; a -- b; a -- a; c -- a }", tests: []test{ - {node_name: "a", expected_indegree: 2, expected_outdegree: 3, expected_total_degree: 5}, - {node_name: "b", expected_indegree: 2, expected_outdegree: 0, expected_total_degree: 2}, - {node_name: "c", expected_indegree: 0, expected_outdegree: 1, expected_total_degree: 1}, + {nodeName: "a", expectedIndegree: 2, expectedOutdegree: 3, expectedTotalDegree: 5}, + {nodeName: "b", expectedIndegree: 2, expectedOutdegree: 0, expectedTotalDegree: 2}, + {nodeName: "c", expectedIndegree: 0, expectedOutdegree: 1, expectedTotalDegree: 1}, }}, {input: "strict graph test { a -- b; b -- a; a -- a; c -- a }", tests: []test{ - {node_name: "a", expected_indegree: 2, expected_outdegree: 2, expected_total_degree: 4}, - {node_name: "b", expected_indegree: 1, expected_outdegree: 0, expected_total_degree: 1}, - {node_name: "c", expected_indegree: 0, expected_outdegree: 1, expected_total_degree: 1}, + {nodeName: "a", expectedIndegree: 2, expectedOutdegree: 2, expectedTotalDegree: 4}, + {nodeName: "b", expectedIndegree: 1, expectedOutdegree: 0, expectedTotalDegree: 1}, + {nodeName: "c", expectedIndegree: 0, expectedOutdegree: 1, expectedTotalDegree: 1}, }}, } @@ -193,23 +203,32 @@ func TestNodeDegree(t *testing.T) { } for _, test := range graphtest.tests { - node_name := test.node_name - node, err := graph.Node(node_name) + nodeName := test.nodeName + node, err := graph.NodeByName(nodeName) if err != nil || node == nil { - t.Fatalf("Unable to retrieve node '%s'. Input: %s. Error: %+v", node_name, input, err) + t.Fatalf("Unable to retrieve node '%s'. Input: %s. Error: %+v", nodeName, input, err) } - indegree := graph.Indegree(node) - if test.expected_indegree != indegree { - t.Errorf("Unexpected indegree for node '%s'. Input: %s. Expected: %d. Actual: %d.", node_name, input, test.expected_indegree, indegree) + indegree, err := graph.Indegree(node) + if err != nil { + t.Fatal(err) + } + if test.expectedIndegree != indegree { + t.Errorf("Unexpected indegree for node '%s'. Input: %s. Expected: %d. Actual: %d.", nodeName, input, test.expectedIndegree, indegree) } - outdegree := graph.Outdegree(node) - if test.expected_outdegree != outdegree { - t.Errorf("Unexpected outdegree for node '%s'. Input: %s. Expected: %d. Actual: %d.", node_name, input, test.expected_outdegree, outdegree) + outdegree, err := graph.Outdegree(node) + if err != nil { + t.Fatal(err) + } + if test.expectedOutdegree != outdegree { + t.Errorf("Unexpected outdegree for node '%s'. Input: %s. Expected: %d. Actual: %d.", nodeName, input, test.expectedOutdegree, outdegree) + } + totalDegree, err := graph.TotalDegree(node) + if err != nil { + t.Fatal(err) } - total_degree := graph.TotalDegree(node) - if test.expected_total_degree != total_degree { - t.Errorf("Unexpected total degree for node '%s'. Input: %s. Expected: %d. Actual: %d.", node_name, input, test.expected_total_degree, total_degree) + if test.expectedTotalDegree != totalDegree { + t.Errorf("Unexpected total degree for node '%s'. Input: %s. Expected: %d. Actual: %d.", nodeName, input, test.expectedTotalDegree, totalDegree) } } } diff --git a/gvc/device_plugin.go b/gvc/device_plugin.go new file mode 100644 index 0000000..899b9d3 --- /dev/null +++ b/gvc/device_plugin.go @@ -0,0 +1,142 @@ +package gvc + +import ( + "context" + + "github.com/goccy/go-graphviz/internal/wasm" +) + +type DevicePlugin struct { + plugin *wasm.PluginAPI +} + +func (p *DevicePlugin) raw() *wasm.PluginAPI { + return p.plugin +} + +type DeviceFeature int64 + +var ( + DeviceDoesPages DeviceFeature = DeviceFeature(wasm.DEVICE_DOES_PAGES) + DeviceDoesLayers DeviceFeature = DeviceFeature(wasm.DEVICE_DOES_LAYERS) + DeviceEvents DeviceFeature = DeviceFeature(wasm.DEVICE_EVENTS) + DeviceDoesTrueColor DeviceFeature = DeviceFeature(wasm.DEVICE_DOES_TRUECOLOR) + DeviceBinaryFormat DeviceFeature = DeviceFeature(wasm.DEVICE_BINARY_FORMAT) + DeviceCompressedFormat DeviceFeature = DeviceFeature(wasm.DEVICE_COMPRESSED_FORMAT) + DeviceNoWriter DeviceFeature = DeviceFeature(wasm.DEVICE_NO_WRITER) +) + +type DevicePluginOption func(*deviceConfig) + +func WithDeviceQuality(quality int) DevicePluginOption { + return func(cfg *deviceConfig) { + cfg.Quality = int64(quality) + } +} + +func WithDeviceFeatures(features ...DeviceFeature) DevicePluginOption { + return func(cfg *deviceConfig) { + cfg.Features = features + } +} + +func WithDeviceDPI(x, y float64) DevicePluginOption { + return func(cfg *deviceConfig) { + cfg.DPI = deviceDPI{ + X: x, + Y: y, + } + } +} + +func NewDevicePlugin(ctx context.Context, typ string, opts ...DevicePluginOption) (*DevicePlugin, error) { + cfg := defaultDevicePluginConfig(typ) + for _, opt := range opts { + opt(cfg) + } + return newDevicePlugin(ctx, cfg) +} + +func PNGDevicePlugin(ctx context.Context) (*DevicePlugin, error) { + return newDevicePlugin(ctx, defaultDevicePluginConfig("png:png")) +} + +func JPGDevicePlugin(ctx context.Context) (*DevicePlugin, error) { + return newDevicePlugin(ctx, defaultDevicePluginConfig("jpg:jpg")) +} + +type deviceDPI struct { + X float64 + Y float64 +} + +type deviceConfig struct { + Type string + Quality int64 + Features []DeviceFeature + DPI deviceDPI +} + +func defaultDevicePluginConfig(typ string) *deviceConfig { + return &deviceConfig{ + Type: typ, + Quality: 1, + Features: []DeviceFeature{ + DeviceBinaryFormat, + DeviceDoesTrueColor, + }, + DPI: deviceDPI{ + X: 96, + Y: 96, + }, + } +} + +func newDevicePlugin(ctx context.Context, cfg *deviceConfig) (*DevicePlugin, error) { + plg, err := wasm.NewPluginAPI(ctx) + if err != nil { + return nil, err + } + if err := plg.SetApi(wasm.API_DEVICE); err != nil { + return nil, err + } + types, err := wasm.NewPluginInstalled(ctx) + if err != nil { + return nil, err + } + if err := types.SetType(cfg.Type); err != nil { + return nil, err + } + if err := types.SetQuality(cfg.Quality); err != nil { + return nil, err + } + features, err := wasm.NewDeviceFeatures(ctx) + if err != nil { + return nil, err + } + var flags int64 + for _, feature := range cfg.Features { + flags |= int64(feature) + } + features.SetFlags(flags) + dpi, err := wasm.NewPointFloat(ctx) + if err != nil { + return nil, err + } + dpi.SetX(cfg.DPI.X) + dpi.SetY(cfg.DPI.Y) + features.SetDefaultDpi(dpi) + if err := types.SetFeatures(features); err != nil { + return nil, err + } + term, err := wasm.PluginInstalledZero(ctx) + if err != nil { + return nil, err + } + if err := plg.SetTypes([]*wasm.PluginInstalled{types, term}); err != nil { + return nil, err + } + return &DevicePlugin{ + plugin: plg, + }, nil +} diff --git a/gvc/gvc.go b/gvc/gvc.go index b3763f8..d540121 100644 --- a/gvc/gvc.go +++ b/gvc/gvc.go @@ -1,53 +1,171 @@ package gvc import ( + "bytes" + "context" + "errors" + "fmt" "image" + _ "image/jpeg" + _ "image/png" "io" - "unsafe" "github.com/goccy/go-graphviz/cgraph" - "github.com/goccy/go-graphviz/internal/ccall" + "github.com/goccy/go-graphviz/internal/wasm" ) type Context struct { - *ccall.GVC + gvc *wasm.Context } -type Job struct { - *ccall.GVJ +func New(ctx context.Context) (*Context, error) { + plugins, err := DefaultPlugins(ctx) + if err != nil { + return nil, err + } + return NewWithPlugins(ctx, plugins...) } -func New() *Context { - return &Context{GVC: ccall.GvContext()} +func NewWithPlugins(ctx context.Context, plugins ...Plugin) (*Context, error) { + plgs, err := newPlugins(ctx, plugins...) + if err != nil { + return nil, err + } + gvc, err := wasm.GetContextWithPlugins(ctx, plgs, 1) + if err != nil { + return nil, err + } + if gvc == nil { + return nil, fmt.Errorf("failed to create graphviz context") + } + return &Context{gvc: gvc}, nil } func (c *Context) Close() error { - return ccall.GvFreeContext(c.GVC) + res, err := c.gvc.FreeContext(context.Background()) + if err != nil { + return err + } + return toError(res) } -func (c *Context) Layout(g *cgraph.Graph, engine string) error { - return ccall.GvLayout(c.GVC, g.Agraph, engine) +func (c *Context) Layout(ctx context.Context, g *cgraph.Graph, engine string) error { + res, err := c.gvc.Layout(ctx, toGraphWasm(g), engine) + if err != nil { + return err + } + return toError(res) } -func (c *Context) RenderData(g *cgraph.Graph, format string, w io.Writer) error { - if err := ccall.GvRenderData(c.GVC, g.Agraph, format, w); err != nil { +func (c *Context) RenderData(ctx context.Context, g *cgraph.Graph, format string, w io.Writer) error { + var ( + s string + renderedLen uint + ) + if _, err := c.gvc.RenderData(ctx, toGraphWasm(g), format, &s, &renderedLen); err != nil { + return err + } + if _, err := w.Write([]byte(s)); err != nil { return err } return nil } -func (c *Context) RenderImage(g *cgraph.Graph, format string) (image.Image, error) { - var img image.Image - if err := ccall.GvRenderContext(c.GVC, g.Agraph, format, unsafe.Pointer(&img)); err != nil { +func (c *Context) RenderImage(ctx context.Context, g *cgraph.Graph, format string) (image.Image, error) { + var buf bytes.Buffer + if err := c.RenderData(ctx, g, format, &buf); err != nil { + return nil, err + } + img, _, err := image.Decode(&buf) + if err != nil { return nil, err } return img, nil } -func (c *Context) RenderFilename(g *cgraph.Graph, format, filename string) error { - return ccall.GvRenderFilename(c.GVC, g.Agraph, format, filename) +func (c *Context) RenderFilename(ctx context.Context, g *cgraph.Graph, format, filename string) error { + res, err := c.gvc.RenderFilename(ctx, toGraphWasm(g), format, filename) + if err != nil { + return err + } + return toError(res) +} + +func (c *Context) FreeLayout(ctx context.Context, g *cgraph.Graph) error { + res, err := c.gvc.FreeLayout(ctx, toGraphWasm(g)) + if err != nil { + return err + } + return toError(res) +} + +func (c *Context) Clone(ctx context.Context) (*Context, error) { + gvc, err := c.gvc.Clone(ctx) + if err != nil { + return nil, err + } + return &Context{gvc: gvc}, nil } -func (c *Context) FreeLayout(g *cgraph.Graph) error { - return ccall.GvFreeLayout(c.GVC, g.Agraph) +func (c *Context) FreeClonedContext(ctx context.Context) error { + return c.gvc.FreeClonedContext(ctx) +} + +func newPlugins(ctx context.Context, plugins ...Plugin) ([]*wasm.SymList, error) { + defaults, err := wasm.DefaultSymList(ctx) + if err != nil { + return nil, err + } + if len(plugins) == 0 { + return defaults, nil + } + sym, err := wasm.NewSymList(ctx) + if err != nil { + return nil, err + } + if err := sym.SetName("gvplugin_go_LTX_library"); err != nil { + return nil, err + } + lib, err := wasm.NewPluginLibrary(ctx) + if err != nil { + return nil, err + } + if err := lib.SetPackageName("go"); err != nil { + return nil, err + } + var apis []*wasm.PluginAPI + for _, plg := range plugins { + apis = append(apis, plg.raw()) + } + term, err := wasm.PluginAPIZero(ctx) + if err != nil { + return nil, err + } + apis = append(apis, term) + + if err := lib.SetApis(apis); err != nil { + return nil, err + } + if err := sym.SetAddress(lib); err != nil { + return nil, err + } + symTerm, err := wasm.SymListZero(ctx) + if err != nil { + return nil, err + } + return append(defaults, sym, symTerm), nil +} + +func toError(result int) error { + if result == 0 { + return nil + } + return lastError() +} + +func lastError() error { + if e, _ := wasm.LastError(context.Background()); e != "" { + return errors.New(e) + } + return nil } diff --git a/gvc/image_renderer.go b/gvc/image_renderer.go index dee8d74..4f10509 100644 --- a/gvc/image_renderer.go +++ b/gvc/image_renderer.go @@ -2,20 +2,19 @@ package gvc import ( "bytes" - "image" + "context" "image/jpeg" "io" "os" "github.com/fogleman/gg" - "github.com/goccy/go-graphviz/internal/ccall" "github.com/golang/freetype/truetype" "golang.org/x/image/font" "golang.org/x/image/font/gofont/goregular" ) type ImageRenderer struct { - *DefaultRenderer + *DefaultRenderEngine ctx *gg.Context fontFace func(float64) (font.Face, error) } @@ -25,35 +24,27 @@ func (r *ImageRenderer) SetFontFace(fn func(size float64) (font.Face, error)) { } func (r *ImageRenderer) toX(job *Job, x float64) float64 { - return job.Scale().X * x + return job.Scale().X() * x } func (r *ImageRenderer) toY(job *Job, y float64) float64 { - return job.Scale().Y * y + return job.Scale().Y() * y } -func (r *ImageRenderer) BeginPage(job *Job) error { +func (r *ImageRenderer) BeginPage(ctx context.Context, job *Job) error { + gctx := gg.NewContext(int(job.Width()), int(job.Height())) translation := job.Translation() - ctx := gg.NewContext(int(job.Width()), int(job.Height())) - ctx.Translate(r.toX(job, translation.X), r.toY(job, -translation.Y)) - r.ctx = ctx + gctx.Translate(r.toX(job, translation.X()), r.toY(job, -translation.Y())) + r.ctx = gctx return nil } -func (r *ImageRenderer) isRenderDataMode(job *Job) bool { - return job.OutputData() != nil -} - -func (r *ImageRenderer) isRenderImageMode(job *Job) bool { - return job.ExternalContext() -} - func (r *ImageRenderer) isPNG(job *Job) bool { - return job.OutputLangname() == "png" + return job.OutputLangName() == "png" } func (r *ImageRenderer) isJPG(job *Job) bool { - return job.OutputLangname() == "jpg" + return job.OutputLangName() == "jpg" } func (r *ImageRenderer) encodeJPG(w io.Writer) error { @@ -72,37 +63,33 @@ func (r *ImageRenderer) saveJPG(path string) error { } func (r *ImageRenderer) setPenStyle(job *Job) { - o := job.Obj() + o := job.Object() switch o.Pen() { - case ccall.PEN_DASHED: + case PenDashed: r.ctx.SetDash(4.0) - case ccall.PEN_DOTTED: + case PenDotted: r.ctx.SetDash(2.0, 4.0) - case ccall.PEN_SOLID, ccall.PEN_NONE: + case PenSolid, PenNone: } r.ctx.SetLineWidth(o.PenWidth()) } -func (r *ImageRenderer) EndPage(job *Job) error { - if r.isRenderDataMode(job) { - var buf bytes.Buffer - switch { - case r.isPNG(job): - if err := r.ctx.EncodePNG(&buf); err != nil { - return err - } - case r.isJPG(job): - if err := r.encodeJPG(&buf); err != nil { - return err - } +func (r *ImageRenderer) EndPage(ctx context.Context, job *Job) error { + var buf bytes.Buffer + switch { + case r.isPNG(job): + if err := r.ctx.EncodePNG(&buf); err != nil { + return err + } + case r.isJPG(job): + if err := r.encodeJPG(&buf); err != nil { + return err } - job.SetOutputData(buf.Bytes()) - } - if r.isRenderImageMode(job) { - img := (*image.Image)(job.Context()) - *img = r.ctx.Image() } - filename := job.OutputFilename() + job.SetOutputData(buf.Bytes()) + job.SetOutputDataPosition(uint(len(buf.Bytes()))) + + filename := job.OutputFileName() if filename != "" { switch { case r.isPNG(job): @@ -118,48 +105,50 @@ func (r *ImageRenderer) EndPage(job *Job) error { return nil } -func (r *ImageRenderer) TextSpan(job *Job, p Pointf, span *TextSpan) error { +func (r *ImageRenderer) TextSpan(ctx context.Context, job *Job, p *PointFloat, span *TextSpan) error { r.ctx.Push() defer r.ctx.Pop() - c := job.Obj().PenColor() - r.ctx.SetRGB(float64(c.R)/255.0, float64(c.G)/255.0, float64(c.B)/255.0) + rgba := job.Object().PenColor().RGBAUint() + r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0) face, err := r.fontFace(r.toX(job, span.Font().Size())) if err != nil { return err } - p.X = r.toX(job, p.X) + + p.SetX(r.toX(job, p.X())) switch span.Just() { case 'r': - p.X -= r.toX(job, span.Size().X) + p.SetX(p.X() - r.toX(job, span.Size().X())) case 'l': - p.X -= 0.0 + // skip case 'n': - p.X -= r.toX(job, span.Size().X/2.0) + p.SetX(p.X() - r.toX(job, span.Size().X()/2.0)) } r.ctx.SetFontFace(face) - y := r.toY(job, p.Y+span.YOffsetCenterLine()+span.YOffsetLayout()) - r.ctx.DrawStringAnchored(span.Str(), p.X, -y, 0, 0) + y := r.toY(job, p.Y()+span.YOffsetCenterLine()+span.YOffsetLayout()) + r.ctx.DrawStringAnchored(span.Text(), p.X(), -y, 0, 0) return nil } -func (r *ImageRenderer) Ellipse(job *Job, a0, a1 Pointf, filled int) error { +func (r *ImageRenderer) Ellipse(ctx context.Context, job *Job, p []*PointFloat, filled bool) error { r.ctx.Push() defer r.ctx.Pop() r.setPenStyle(job) - rx := r.toX(job, a1.X-a0.X) - ry := r.toY(job, a1.Y-a0.Y) - var c ccall.GVColor - if filled > 0 { - c = job.Obj().FillColor() + rx := r.toX(job, p[1].X()-p[0].X()) + ry := r.toY(job, p[1].Y()-p[0].Y()) + var c *Color + if filled { + c = job.Object().FillColor() r.ctx.FillPreserve() } else { - c = job.Obj().PenColor() + c = job.Object().PenColor() } - r.ctx.SetRGB(float64(c.R)/255.0, float64(c.G)/255.0, float64(c.B)/255.0) - r.ctx.DrawEllipse(r.toX(job, a0.X), r.toY(job, -a0.Y), rx, ry) - if filled > 0 { + rgba := c.RGBAUint() + r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0) + r.ctx.DrawEllipse(r.toX(job, p[0].X()), r.toY(job, -p[0].Y()), rx, ry) + if filled { r.ctx.Fill() } else { r.ctx.Stroke() @@ -167,23 +156,24 @@ func (r *ImageRenderer) Ellipse(job *Job, a0, a1 Pointf, filled int) error { return nil } -func (r *ImageRenderer) Polygon(job *Job, a []Pointf, filled int) error { +func (r *ImageRenderer) Polygon(ctx context.Context, job *Job, a []*PointFloat, filled bool) error { r.ctx.Push() defer r.ctx.Pop() r.setPenStyle(job) - var c ccall.GVColor - if filled > 0 { - c = job.Obj().FillColor() + var c *Color + if filled { + c = job.Object().FillColor() } else { - c = job.Obj().PenColor() + c = job.Object().PenColor() } - r.ctx.SetRGB(float64(c.R)/255.0, float64(c.G)/255.0, float64(c.B)/255.0) - r.ctx.MoveTo(r.toX(job, a[0].X), r.toY(job, -a[0].Y)) + rgba := c.RGBAUint() + r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0) + r.ctx.MoveTo(r.toX(job, a[0].X()), r.toY(job, -a[0].Y())) for i := 1; i < len(a); i++ { - r.ctx.LineTo(r.toX(job, a[i].X), r.toY(job, -a[i].Y)) + r.ctx.LineTo(r.toX(job, a[i].X()), r.toY(job, -a[i].Y())) } r.ctx.ClosePath() - if filled > 0 { + if filled { r.ctx.Fill() } else { r.ctx.Stroke() @@ -191,35 +181,35 @@ func (r *ImageRenderer) Polygon(job *Job, a []Pointf, filled int) error { return nil } -func (r *ImageRenderer) Polyline(job *Job, a []Pointf) error { +func (r *ImageRenderer) Polyline(ctx context.Context, job *Job, a []*PointFloat) error { r.ctx.Push() defer r.ctx.Pop() r.setPenStyle(job) - c := job.Obj().PenColor() - r.ctx.SetRGB(float64(c.R)/255.0, float64(c.G)/255.0, float64(c.B)/255.0) - r.ctx.MoveTo(r.toX(job, a[0].X), r.toY(job, -a[0].Y)) + rgba := job.Object().PenColor().RGBAUint() + r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0) + r.ctx.MoveTo(r.toX(job, a[0].X()), r.toY(job, -a[0].Y())) for i := 1; i < len(a); i++ { - r.ctx.LineTo(r.toX(job, a[i].X), r.toY(job, -a[i].Y)) + r.ctx.LineTo(r.toX(job, a[i].X()), r.toY(job, -a[i].Y())) } r.ctx.Stroke() return nil } -func (r *ImageRenderer) BezierCurve(job *Job, a []Pointf, arrowAtStart, arrowAtEnd int) error { +func (r *ImageRenderer) BezierCurve(ctx context.Context, job *Job, a []*PointFloat) error { r.ctx.Push() defer r.ctx.Pop() r.setPenStyle(job) - c := job.Obj().PenColor() - r.ctx.SetRGB(float64(c.R)/255.0, float64(c.G)/255.0, float64(c.B)/255.0) - r.ctx.MoveTo(r.toX(job, a[0].X), r.toY(job, -a[0].Y)) + rgba := job.Object().PenColor().RGBAUint() + r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0) + r.ctx.MoveTo(r.toX(job, a[0].X()), r.toY(job, -a[0].Y())) for i := 1; i < len(a); i += 3 { r.ctx.CubicTo( - r.toX(job, a[i].X), - r.toY(job, -a[i].Y), - r.toX(job, a[i+1].X), - r.toY(job, -a[i+1].Y), - r.toX(job, a[i+2].X), - r.toY(job, -a[i+2].Y), + r.toX(job, a[i].X()), + r.toY(job, -a[i].Y()), + r.toX(job, a[i+1].X()), + r.toY(job, -a[i+1].Y()), + r.toX(job, a[i+2].X()), + r.toY(job, -a[i+2].Y()), ) } r.ctx.Stroke() @@ -227,16 +217,7 @@ func (r *ImageRenderer) BezierCurve(job *Job, a []Pointf, arrowAtStart, arrowAtE } var ( - imgRenderer *ImageRenderer -) - -func SetFontFace(fn func(size float64) (font.Face, error)) { - imgRenderer.SetFontFace(fn) -} - -func init() { - imgRenderer = &ImageRenderer{} - imgRenderer.SetFontFace(func(size float64) (font.Face, error) { + fontFaceFn = func(size float64) (font.Face, error) { ft, err := truetype.Parse(goregular.TTF) if err != nil { return nil, err @@ -250,7 +231,9 @@ func init() { SubPixelsY: 0, } return truetype.NewFace(ft, opt), nil - }) - RegisterRenderer("png", imgRenderer) - RegisterRenderer("jpg", imgRenderer) + } +) + +func SetFontFace(fn func(size float64) (font.Face, error)) { + fontFaceFn = fn } diff --git a/gvc/init.go b/gvc/init.go new file mode 100644 index 0000000..2a77b23 --- /dev/null +++ b/gvc/init.go @@ -0,0 +1,51 @@ +package gvc + +import ( + "github.com/goccy/go-graphviz/internal/wasm" +) + +func init() { + getEnginePtr := func(job *wasm.Job) uint64 { + return job.GetGvc().GetApi()[wasm.API_RENDER].GetTypeptr().GetEngine().(uint64) + } + wasm.Register_RenderEngine_BeginJob(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndJob(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginGraph(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndGraph(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginLayer(func(job *wasm.Job, _ string, _ int, _ int) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndLayer(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginPage(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndPage(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginCluster(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndCluster(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginNodes(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndNodes(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginEdges(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndEdges(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginNode(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndNode(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginEdge(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndEdge(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginAnchor(func(job *wasm.Job, _ string, _ string, _ string, _ string) (uint64, error) { + return getEnginePtr(job), nil + }) + wasm.Register_RenderEngine_EndAnchor(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_BeginLabel(func(job *wasm.Job, _ wasm.LabelType) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_EndLabel(func(job *wasm.Job) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_Textspan(func(job *wasm.Job, _ *wasm.PointFloat, _ *wasm.Textspan) (uint64, error) { + return getEnginePtr(job), nil + }) + wasm.Register_RenderEngine_ResolveColor(func(job *wasm.Job, _ *wasm.Color) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_Ellipse(func(job *wasm.Job, _ []*wasm.PointFloat, _ int) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_Polygon(func(job *wasm.Job, _ []*wasm.PointFloat, _ uint32, _ int) (uint64, error) { + return getEnginePtr(job), nil + }) + wasm.Register_RenderEngine_Beziercurve(func(job *wasm.Job, _ []*wasm.PointFloat, _ uint32, _ int) (uint64, error) { + return getEnginePtr(job), nil + }) + wasm.Register_RenderEngine_Polyline(func(job *wasm.Job, _ []*wasm.PointFloat, _ uint32) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_Comment(func(job *wasm.Job, _ string) (uint64, error) { return getEnginePtr(job), nil }) + wasm.Register_RenderEngine_LibraryShape(func(job *wasm.Job, _ string, _ []*wasm.PointFloat, _ uint32, _ int) (uint64, error) { + return getEnginePtr(job), nil + }) +} diff --git a/gvc/link.go b/gvc/link.go new file mode 100644 index 0000000..6ecafea --- /dev/null +++ b/gvc/link.go @@ -0,0 +1,11 @@ +package gvc + +import ( + _ "unsafe" + + "github.com/goccy/go-graphviz/cgraph" + "github.com/goccy/go-graphviz/internal/wasm" +) + +//go:linkname toGraphWasm github.com/goccy/go-graphviz/cgraph.toGraphWasm +func toGraphWasm(*cgraph.Graph) *wasm.Graph diff --git a/gvc/plugin.go b/gvc/plugin.go new file mode 100644 index 0000000..6527aff --- /dev/null +++ b/gvc/plugin.go @@ -0,0 +1,36 @@ +package gvc + +import ( + "context" + + "github.com/goccy/go-graphviz/internal/wasm" +) + +type Plugin interface { + raw() *wasm.PluginAPI +} + +func DefaultPlugins(ctx context.Context) ([]Plugin, error) { + pngRenderPlugin, err := PNGRenderPlugin(ctx) + if err != nil { + return nil, err + } + pngDevicePlugin, err := PNGDevicePlugin(ctx) + if err != nil { + return nil, err + } + jpgRenderPlugin, err := JPGRenderPlugin(ctx) + if err != nil { + return nil, err + } + jpgDevicePlugin, err := JPGDevicePlugin(ctx) + if err != nil { + return nil, err + } + return []Plugin{ + pngRenderPlugin, + pngDevicePlugin, + jpgRenderPlugin, + jpgDevicePlugin, + }, nil +} diff --git a/gvc/render_plugin.go b/gvc/render_plugin.go new file mode 100644 index 0000000..b0bf0ec --- /dev/null +++ b/gvc/render_plugin.go @@ -0,0 +1,1018 @@ +package gvc + +import ( + "context" + + "github.com/goccy/go-graphviz/internal/wasm" +) + +type RenderPlugin struct { + plugin *wasm.PluginAPI +} + +func (p *RenderPlugin) raw() *wasm.PluginAPI { + return p.plugin +} + +type RenderEngine interface { + BeginJob(ctx context.Context, job *Job) error + EndJob(ctx context.Context, job *Job) error + BeginGraph(ctx context.Context, job *Job) error + EndGraph(ctx context.Context, job *Job) error + BeginLayer(ctx context.Context, job *Job, layerName string, layerNum, numLayers int) error + EndLayer(ctx context.Context, job *Job) error + BeginPage(ctx context.Context, job *Job) error + EndPage(ctx context.Context, job *Job) error + BeginCluster(ctx context.Context, job *Job) error + EndCluster(ctx context.Context, job *Job) error + BeginNodes(ctx context.Context, job *Job) error + EndNodes(ctx context.Context, job *Job) error + BeginEdges(ctx context.Context, job *Job) error + EndEdges(ctx context.Context, job *Job) error + BeginNode(ctx context.Context, job *Job) error + EndNode(ctx context.Context, job *Job) error + BeginEdge(ctx context.Context, job *Job) error + EndEdge(ctx context.Context, job *Job) error + BeginAnchor(ctx context.Context, job *Job, href, tooltip, target, id string) error + EndAnchor(ctx context.Context, job *Job) error + BeginLabel(ctx context.Context, job *Job, labelType LabelType) error + EndLabel(ctx context.Context, job *Job) error + TextSpan(ctx context.Context, job *Job, point *PointFloat, textSpan *TextSpan) error + ResolveColor(ctx context.Context, job *Job, color *Color) error + Ellipse(ctx context.Context, job *Job, points []*PointFloat, filled bool) error + Polygon(ctx context.Context, job *Job, points []*PointFloat, filled bool) error + BezierCurve(ctx context.Context, job *Job, points []*PointFloat) error + Polyline(ctx context.Context, job *Job, points []*PointFloat) error + Comment(ctx context.Context, job *Job, comment string) error + LibraryShape(ctx context.Context, job *Job, s string, points []*PointFloat, filled bool) error +} + +type DefaultRenderEngine struct { +} + +func (e *DefaultRenderEngine) BeginJob(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndJob(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginGraph(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndGraph(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginLayer(_ context.Context, _ *Job, layerName string, layerNum, numLayers int) error { + return nil +} + +func (e *DefaultRenderEngine) EndLayer(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginPage(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndPage(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginCluster(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndCluster(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginNodes(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndNodes(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginEdges(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndEdges(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginNode(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndNode(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginEdge(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) EndEdge(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginAnchor(_ context.Context, _ *Job, _, _, _, _ string) error { + return nil +} + +func (e *DefaultRenderEngine) EndAnchor(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) BeginLabel(_ context.Context, _ *Job, _ LabelType) error { + return nil +} + +func (e *DefaultRenderEngine) EndLabel(_ context.Context, _ *Job) error { + return nil +} + +func (e *DefaultRenderEngine) TextSpan(_ context.Context, _ *Job, _ *PointFloat, _ *TextSpan) error { + return nil +} + +func (e *DefaultRenderEngine) ResolveColor(_ context.Context, _ *Job, _ *Color) error { + return nil +} + +func (e *DefaultRenderEngine) Ellipse(_ context.Context, _ *Job, _ []*PointFloat, _ bool) error { + return nil +} + +func (e *DefaultRenderEngine) Polygon(_ context.Context, _ *Job, _ []*PointFloat, _ bool) error { + return nil +} + +func (e *DefaultRenderEngine) BezierCurve(_ context.Context, _ *Job, _ []*PointFloat) error { + return nil +} + +func (e *DefaultRenderEngine) Polyline(_ context.Context, _ *Job, _ []*PointFloat) error { + return nil +} + +func (e *DefaultRenderEngine) Comment(_ context.Context, _ *Job, _ string) error { + return nil +} + +func (e *DefaultRenderEngine) LibraryShape(_ context.Context, _ *Job, _ string, _ []*PointFloat, _ bool) error { + return nil +} + +type RenderFeature int64 + +var ( + RenderYGoesDown RenderFeature = RenderFeature(wasm.RENDER_Y_GOES_DOWN) + RenderDoesTransform RenderFeature = RenderFeature(wasm.RENDER_DOES_TRANSFORM) + RenderDoesLabels RenderFeature = RenderFeature(wasm.RENDER_DOES_LABELS) + RenderDoesMaps RenderFeature = RenderFeature(wasm.RENDER_DOES_MAPS) + RenderDoesMapRectangle RenderFeature = RenderFeature(wasm.RENDER_DOES_MAP_RECTANGLE) + RenderDoesMapCircle RenderFeature = RenderFeature(wasm.RENDER_DOES_MAP_CIRCLE) + RenderDoesMapPolygon RenderFeature = RenderFeature(wasm.RENDER_DOES_MAP_POLYGON) + RenderDoesMapEllipse RenderFeature = RenderFeature(wasm.RENDER_DOES_MAP_ELLIPSE) + RenderDoesMapBspline RenderFeature = RenderFeature(wasm.RENDER_DOES_MAP_BSPLINE) + RenderDoesTooltips RenderFeature = RenderFeature(wasm.RENDER_DOES_TOOLTIPS) + RenderDoesTargets RenderFeature = RenderFeature(wasm.RENDER_DOES_TARGETS) + RenderDoesZ RenderFeature = RenderFeature(wasm.RENDER_DOES_Z) + RenderNoWhiteBg RenderFeature = RenderFeature(wasm.RENDER_NO_WHITE_BG) +) + +type ColorType int64 + +var ( + HSVADouble ColorType = ColorType(wasm.HSVA_DOUBLE) + RGBAByte ColorType = ColorType(wasm.RGBA_BYTE) + RGBAWord ColorType = ColorType(wasm.RGBA_WORD) + RGBADouble ColorType = ColorType(wasm.RGBA_DOUBLE) + ColorString ColorType = ColorType(wasm.COLOR_STRING) + ColorIndex ColorType = ColorType(wasm.COLOR_INDEX) +) + +type RenderPluginOption func(*renderConfig) + +func WithRenderQuality(quality int) RenderPluginOption { + return func(cfg *renderConfig) { + cfg.Quality = int64(quality) + } +} + +func WithRenderFeatures(features ...RenderFeature) RenderPluginOption { + return func(cfg *renderConfig) { + cfg.Features = features + } +} + +func WithRenderColorType(typ ColorType) RenderPluginOption { + return func(cfg *renderConfig) { + cfg.ColorType = typ + } +} + +func WithRenderPAD(pad float64) RenderPluginOption { + return func(cfg *renderConfig) { + cfg.PAD = pad + } +} + +func NewRenderPlugin(ctx context.Context, typ string, engine RenderEngine, opts ...RenderPluginOption) (*RenderPlugin, error) { + cfg := defaultRenderPluginConfig(typ, engine) + for _, opt := range opts { + opt(cfg) + } + return newRenderPlugin(ctx, cfg) +} + +func PNGRenderPlugin(ctx context.Context) (*RenderPlugin, error) { + return newRenderPlugin(ctx, defaultRenderPluginConfig("png", newPNGRenderEngine())) +} + +func JPGRenderPlugin(ctx context.Context) (*RenderPlugin, error) { + return newRenderPlugin(ctx, defaultRenderPluginConfig("jpg", newJPGRenderEngine())) +} + +func defaultRenderPluginConfig(typ string, engine RenderEngine) *renderConfig { + return &renderConfig{ + Type: typ, + Quality: 1, + Features: []RenderFeature{ + RenderYGoesDown, + RenderDoesTransform, + }, + ColorType: RGBAByte, + PAD: 4, + RenderEngine: engine, + } +} + +func newPNGRenderEngine() *ImageRenderer { + renderer := &ImageRenderer{DefaultRenderEngine: new(DefaultRenderEngine)} + renderer.SetFontFace(fontFaceFn) + return renderer +} + +func newJPGRenderEngine() *ImageRenderer { + renderer := &ImageRenderer{DefaultRenderEngine: new(DefaultRenderEngine)} + renderer.SetFontFace(fontFaceFn) + return renderer +} + +type renderConfig struct { + Type string + Quality int64 + PAD float64 + Features []RenderFeature + ColorType ColorType + RenderEngine RenderEngine +} + +func newRenderPlugin(ctx context.Context, cfg *renderConfig) (*RenderPlugin, error) { + plg, err := wasm.NewPluginAPI(ctx) + if err != nil { + return nil, err + } + if err := plg.SetApi(wasm.API_RENDER); err != nil { + return nil, err + } + types, err := wasm.NewPluginInstalled(ctx) + if err != nil { + return nil, err + } + if err := types.SetType(cfg.Type); err != nil { + return nil, err + } + if err := types.SetQuality(cfg.Quality); err != nil { + return nil, err + } + features, err := wasm.NewRenderFeatures(ctx) + if err != nil { + return nil, err + } + var flags int64 + for _, feature := range cfg.Features { + flags |= int64(feature) + } + features.SetFlags(flags) + features.SetDefaultPad(cfg.PAD) + features.SetColorType(wasm.ColorType(cfg.ColorType)) + if err := types.SetFeatures(features); err != nil { + return nil, err + } + engine, err := newRenderEngine(ctx, cfg.RenderEngine) + if err != nil { + return nil, err + } + if err := types.SetEngine(engine); err != nil { + return nil, err + } + term, err := wasm.PluginInstalledZero(ctx) + if err != nil { + return nil, err + } + if err := plg.SetTypes([]*wasm.PluginInstalled{types, term}); err != nil { + return nil, err + } + return &RenderPlugin{ + plugin: plg, + }, nil +} + +func newRenderEngine(ctx context.Context, engine RenderEngine) (*wasm.RenderEngine, error) { + e, err := wasm.NewRenderEngine(ctx) + if err != nil { + return nil, err + } + ptr := wasm.WasmPtr(e) + if err := e.SetBeginJob(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginJob(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndJob(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndJob(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginGraph(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginGraph(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndGraph(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndGraph(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginLayer(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, layerName string, layerNum int, numLayers int) error { + return engine.BeginLayer(ctx, toJob(job), layerName, layerNum, numLayers) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndLayer(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndLayer(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginPage(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginPage(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndPage(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndPage(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginCluster(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginCluster(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndCluster(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndCluster(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginNodes(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginNodes(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndNodes(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndNodes(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginEdges(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginEdges(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndEdges(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndEdges(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginNode(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginNode(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndNode(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndNode(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginEdge(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.BeginEdge(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndEdge(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndEdge(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginAnchor(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, href string, tooltip string, target string, id string) error { + return engine.BeginAnchor(ctx, toJob(job), href, tooltip, target, id) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndAnchor(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndAnchor(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeginLabel(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, typ wasm.LabelType) error { + return engine.BeginLabel(ctx, toJob(job), LabelType(typ)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEndLabel(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job) error { + return engine.EndLabel(ctx, toJob(job)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetTextspan(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p *wasm.PointFloat, span *wasm.Textspan) error { + return engine.TextSpan(ctx, toJob(job), toPointFloat(p), toTextSpan(span)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetResolveColor(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, c *wasm.Color) error { + return engine.ResolveColor(ctx, toJob(job), toColor(c)) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetEllipse(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, filled int) error { + points := make([]*PointFloat, len(p)) + for i := range p { + points[i] = toPointFloat(p[i]) + } + return engine.Ellipse(ctx, toJob(job), points, filled > 0) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetPolygon(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, _ uint32, filled int) error { + points := make([]*PointFloat, len(p)) + for i := range p { + points[i] = toPointFloat(p[i]) + } + return engine.Polygon(ctx, toJob(job), points, filled > 0) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetBeziercurve(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, _ uint32, _ int) error { + points := make([]*PointFloat, len(p)) + for i := range p { + points[i] = toPointFloat(p[i]) + } + return engine.BezierCurve(ctx, toJob(job), points) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetPolyline(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, _ uint32) error { + points := make([]*PointFloat, len(p)) + for i := range p { + points[i] = toPointFloat(p[i]) + } + return engine.Polyline(ctx, toJob(job), points) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetComment(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, comment string) error { + return engine.Comment(ctx, toJob(job), comment) + }, ptr)); err != nil { + return nil, err + } + if err := e.SetLibraryShape(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, s string, p []*wasm.PointFloat, _ uint32, filled int) error { + points := make([]*PointFloat, len(p)) + for i := range p { + points[i] = toPointFloat(p[i]) + } + return engine.LibraryShape(ctx, toJob(job), s, points, filled > 0) + }, ptr)); err != nil { + return nil, err + } + return e, nil +} + +type LabelType int + +var ( + LabelPlain LabelType = LabelType(wasm.LABEL_PLAIN) + LabelHTML LabelType = LabelType(wasm.LABEL_HTML) +) + +type Job struct { + wasm *wasm.Job +} + +func toJob(v *wasm.Job) *Job { + if v == nil { + return nil + } + return &Job{wasm: v} +} + +func (j *Job) getWasm() *wasm.Job { + if j == nil { + return nil + } + return j.wasm +} + +type PointFloat struct { + wasm *wasm.PointFloat +} + +func toPointFloat(v *wasm.PointFloat) *PointFloat { + if v == nil { + return nil + } + return &PointFloat{wasm: v} +} + +func (p *PointFloat) getWasm() *wasm.PointFloat { + if p == nil { + return nil + } + return p.wasm +} + +func (p *PointFloat) X() float64 { + return p.wasm.GetX() +} + +func (p *PointFloat) SetX(x float64) { + p.wasm.SetX(x) +} + +func (p *PointFloat) Y() float64 { + return p.wasm.GetY() +} + +func (p *PointFloat) SetY(y float64) { + p.wasm.SetY(y) +} + +type TextSpan struct { + wasm *wasm.Textspan +} + +func toTextSpan(v *wasm.Textspan) *TextSpan { + if v == nil { + return nil + } + return &TextSpan{wasm: v} +} + +func (s *TextSpan) getWasm() *wasm.Textspan { + if s == nil { + return nil + } + return s.wasm +} + +func (s *TextSpan) Text() string { + return s.wasm.GetStr() +} + +func (s *TextSpan) SetText(v string) { + s.wasm.SetStr(v) +} + +func (s *TextSpan) Font() *TextFont { + return toTextFont(s.wasm.GetFont()) +} + +func (s *TextSpan) SetFont(v *TextFont) { + s.wasm.SetFont(v.getWasm()) +} + +func (s *TextSpan) YOffsetLayout() float64 { + return s.wasm.GetYOffsetLayout() +} + +func (s *TextSpan) SetYOffsetLayout(v float64) { + s.wasm.SetYOffsetLayout(v) +} + +func (s *TextSpan) YOffsetCenterLine() float64 { + return s.wasm.GetYOffsetCenterLine() +} + +func (s *TextSpan) SetYOffsetCenterLine(v float64) { + s.wasm.SetYOffsetCenterLine(v) +} + +func (s *TextSpan) Size() *PointFloat { + return toPointFloat(s.wasm.GetSize()) +} + +func (s *TextSpan) SetSize(v *PointFloat) { + s.wasm.SetSize(v.getWasm()) +} + +func (s *TextSpan) Just() int { + return int(s.wasm.GetJust()) +} + +func (s *TextSpan) SetJust(v int) { + s.wasm.SetJust(int64(v)) +} + +type TextFont struct { + wasm *wasm.TextFont +} + +func toTextFont(v *wasm.TextFont) *TextFont { + if v == nil { + return nil + } + return &TextFont{wasm: v} +} + +func (f *TextFont) getWasm() *wasm.TextFont { + if f == nil { + return nil + } + return f.wasm +} + +func (f *TextFont) Name() string { + return f.wasm.GetName() +} + +func (f *TextFont) SetName(v string) { + f.wasm.SetName(v) +} + +func (f *TextFont) Color() string { + return f.wasm.GetColor() +} + +func (f *TextFont) SetColor(v string) { + f.wasm.SetColor(v) +} + +func (f *TextFont) PostScriptAlias() *PostScriptAlias { + return toPostScriptAlias(f.wasm.GetPostscriptAlias()) +} + +func (f *TextFont) SetPostScriptAlias(v *PostScriptAlias) { + f.wasm.SetPostscriptAlias(v.getWasm()) +} + +func (f *TextFont) Size() float64 { + return f.wasm.GetSize() +} + +func (f *TextFont) SetSize(v float64) { + f.wasm.SetSize(v) +} + +func (f *TextFont) Flags() uint { + return uint(f.wasm.GetFlags()) +} + +func (f *TextFont) SetFlags(v uint) { + f.wasm.SetFlags(uint64(v)) +} + +func (f *TextFont) Count() uint { + return uint(f.wasm.GetCount()) +} + +func (f *TextFont) SetCount(v uint) { + f.wasm.SetCount(uint64(v)) +} + +type PostScriptAlias struct { + wasm *wasm.PostscriptAlias +} + +func toPostScriptAlias(v *wasm.PostscriptAlias) *PostScriptAlias { + if v == nil { + return nil + } + return &PostScriptAlias{wasm: v} +} + +func (a *PostScriptAlias) getWasm() *wasm.PostscriptAlias { + if a == nil { + return nil + } + return a.wasm +} + +func (s *PostScriptAlias) Name() string { + return s.wasm.GetName() +} + +func (s *PostScriptAlias) SetName(v string) { + s.wasm.SetName(v) +} + +func (s *PostScriptAlias) Family() string { + return s.wasm.GetFamily() +} + +func (s *PostScriptAlias) SetFamily(v string) { + s.wasm.SetFamily(v) +} + +func (s *PostScriptAlias) Weight() string { + return s.wasm.GetWeight() +} + +func (s *PostScriptAlias) SetWeight(v string) { + s.wasm.SetWeight(v) +} + +func (s *PostScriptAlias) Stretch() string { + return s.wasm.GetStretch() +} + +func (s *PostScriptAlias) SetStretch(v string) { + s.wasm.SetStretch(v) +} + +func (s *PostScriptAlias) Style() string { + return s.wasm.GetStyle() +} + +func (s *PostScriptAlias) SetStyle(v string) { + s.wasm.SetStyle(v) +} + +func (s *PostScriptAlias) XFigCode() int { + return int(s.wasm.GetXfigCode()) +} + +func (s *PostScriptAlias) SetXFigCode(v int) { + s.wasm.SetXfigCode(int64(v)) +} + +func (s *PostScriptAlias) SVGFontFamily() string { + return s.wasm.GetSvgFontFamily() +} + +func (s *PostScriptAlias) SetSVGFontFamily(v string) { + s.wasm.SetSvgFontFamily(v) +} + +func (s *PostScriptAlias) SVGFontWeight() string { + return s.wasm.GetSvgFontWeight() +} + +func (s *PostScriptAlias) SetSVGFontWeight(v string) { + s.wasm.SetSvgFontWeight(v) +} + +func (s *PostScriptAlias) SVGFontStyle() string { + return s.wasm.GetSvgFontStyle() +} + +func (s *PostScriptAlias) SetSVGFontStyle(v string) { + s.wasm.SetSvgFontStyle(v) +} + +type Scale = PointFloat + +func (j *Job) Scale() *Scale { + return toPointFloat(j.wasm.GetScale()) +} + +func (j *Job) SetScale(v *Scale) { + j.wasm.SetScale(v.getWasm()) +} + +func (j *Job) Width() uint64 { + return j.wasm.GetWidth() +} + +func (j *Job) SetWidth(v uint64) { + j.wasm.SetWidth(v) +} + +func (j *Job) Height() uint64 { + return j.wasm.GetHeight() +} + +func (j *Job) SetHeight(v uint64) { + j.wasm.SetHeight(v) +} + +type Translation = PointFloat + +func (j *Job) Translation() *Translation { + return toPointFloat(j.wasm.GetTranslation()) +} + +func (j *Job) SetTranslation(v *Translation) { + j.wasm.SetTranslation(v.getWasm()) +} + +func (j *Job) OutputData() []byte { + return []byte(j.wasm.GetOutputData()) +} + +func (j *Job) SetOutputData(v []byte) { + j.wasm.SetOutputData(string(v)) +} + +func (j *Job) ExternalContext() bool { + return j.wasm.GetExternalContext() +} + +func (j *Job) OutputLangName() string { + return j.wasm.GetOutputLangname() +} + +func (j *Job) SetOutputLangName(v string) { + j.wasm.SetOutputLangname(v) +} + +func (j *Job) OutputDataPosition() uint { + return uint(j.wasm.GetOutputDataPosition()) +} + +func (j *Job) SetOutputDataPosition(v uint) { + j.wasm.SetOutputDataPosition(v) +} + +func (j *Job) OutputFileName() string { + return j.wasm.GetOutputFilename() +} + +func (j *Job) SetOutputFileName(v string) { + j.wasm.SetOutputFilename(v) +} + +func (j *Job) Object() *ObjectState { + return toObjectState(j.wasm.GetObj()) +} + +type ObjectState struct { + wasm *wasm.ObjectState +} + +func toObjectState(v *wasm.ObjectState) *ObjectState { + if v == nil { + return nil + } + return &ObjectState{wasm: v} +} + +func (s *ObjectState) getWasm() *wasm.ObjectState { + if s == nil { + return nil + } + return s.wasm +} + +type FillType int64 + +var ( + FillNone FillType = FillType(wasm.FILL_NONE) + FillSolid FillType = FillType(wasm.FILL_SOLID) + FillLinear FillType = FillType(wasm.FILL_LINEAR) + FillRadial FillType = FillType(wasm.FILL_RADIAL) +) + +type PenType int64 + +var ( + PenNone PenType = PenType(wasm.PEN_NONE) + PenDashed PenType = PenType(wasm.PEN_DASHED) + PenDotted PenType = PenType(wasm.PEN_DOTTED) + PenSolid PenType = PenType(wasm.PEN_SOLID) +) + +func (s *ObjectState) Pen() PenType { + return PenType(s.wasm.GetPen()) +} + +func (s *ObjectState) SetPen(v PenType) { + s.wasm.SetPen(wasm.PenType(v)) +} + +func (s *ObjectState) PenWidth() float64 { + return s.wasm.GetPenwidth() +} + +func (s *ObjectState) SetPenWidth(v float64) { + s.wasm.SetPenwidth(v) +} + +func (s *ObjectState) Fill() FillType { + return FillType(s.wasm.GetFill()) +} + +func (s *ObjectState) SetFill(v FillType) { + s.wasm.SetFill(wasm.FillType(v)) +} + +func (s *ObjectState) PenColor() *Color { + return toColor(s.wasm.GetPencolor()) +} + +func (s *ObjectState) SetPenColor(v *Color) { + s.wasm.SetPencolor(v.getWasm()) +} + +func (s *ObjectState) FillColor() *Color { + return toColor(s.wasm.GetFillcolor()) +} + +func (s *ObjectState) SetFillColor(v *Color) { + s.wasm.SetFillcolor(v.getWasm()) +} + +type Color struct { + wasm *wasm.Color +} + +func toColor(v *wasm.Color) *Color { + if v == nil { + return nil + } + return &Color{wasm: v} +} + +func (c *Color) getWasm() *wasm.Color { + if c == nil { + return nil + } + return c.wasm +} + +func (c *Color) RGBADouble() [4]float64 { + res := c.wasm.GetRgbaDouble() + return [4]float64{res[0], res[1], res[2], res[3]} +} + +func (c *Color) SetRGBADouble(v [4]float64) { + c.wasm.SetRgbaDouble(v[:]) +} + +func (c *Color) RGBAUint() [4]uint { + res := c.wasm.GetRgbaUint() + return [4]uint{res[0], res[1], res[2], res[3]} +} + +func (c *Color) SetRGBAUint(v [4]uint) { + c.wasm.SetRgbaUint(v[:]) +} + +func (c *Color) RGBAInt() [4]int { + res := c.wasm.GetRgbaInt() + return [4]int{res[0], res[1], res[2], res[3]} +} + +func (c *Color) SetRGBAInt(v [4]int) { + c.wasm.SetRgbaInt(v[:]) +} + +func (c *Color) HSVA() [4]float64 { + res := c.wasm.GetHsva() + return [4]float64{res[0], res[1], res[2], res[3]} +} + +func (c *Color) SetHsva(v [4]float64) { + c.wasm.SetHsva(v[:]) +} + +func (c *Color) String() string { + return c.wasm.GetString() +} + +func (c *Color) SetString(v string) { + c.wasm.SetString(v) +} + +func (c *Color) Index() int { + return int(c.wasm.GetIndex()) +} + +func (c *Color) SetIndex(v int) { + c.wasm.SetIndex(int64(v)) +} + +func (c *Color) Type() ColorType { + return ColorType(c.wasm.GetType()) +} + +func (c *Color) SetType(v ColorType) { + c.wasm.SetType(wasm.ColorType(v)) +} diff --git a/gvc/renderer.go b/gvc/renderer.go deleted file mode 100644 index 8a22772..0000000 --- a/gvc/renderer.go +++ /dev/null @@ -1,493 +0,0 @@ -package gvc - -import ( - "sync" - - "github.com/goccy/go-graphviz/internal/ccall" - "github.com/pkg/errors" -) - -type Renderer interface { - BeginJob(*Job) error - EndJob(*Job) error - BeginGraph(*Job) error - EndGraph(*Job) error - BeginLayer(*Job, string, int, int) error - EndLayer(*Job) error - BeginPage(*Job) error - EndPage(*Job) error - BeginCluster(*Job) error - EndCluster(*Job) error - BeginNodes(*Job) error - EndNodes(*Job) error - BeginEdges(*Job) error - EndEdges(*Job) error - BeginNode(*Job) error - EndNode(*Job) error - BeginEdge(*Job) error - EndEdge(*Job) error - BeginAnchor(*Job, string, string, string, string) error - EndAnchor(*Job) error - BeginLabel(*Job, int) error - EndLabel(*Job) error - TextSpan(*Job, Pointf, *TextSpan) error - ResolveColor(*Job, Color) error - Ellipse(*Job, Pointf, Pointf, int) error - Polygon(*Job, []Pointf, int) error - BezierCurve(*Job, []Pointf, int, int) error - Polyline(*Job, []Pointf) error - Comment(*Job, string) error - LibraryShape(*Job, string, []Pointf, int) error -} - -type DefaultRenderer struct{} - -func (*DefaultRenderer) BeginJob(job *Job) error { return nil } -func (*DefaultRenderer) EndJob(job *Job) error { return nil } -func (*DefaultRenderer) BeginGraph(job *Job) error { return nil } -func (*DefaultRenderer) EndGraph(job *Job) error { return nil } -func (*DefaultRenderer) BeginLayer(job *Job, layerName string, layerNum int, numLayers int) error { - return nil -} -func (*DefaultRenderer) EndLayer(job *Job) error { return nil } -func (*DefaultRenderer) BeginPage(job *Job) error { return nil } -func (*DefaultRenderer) EndPage(job *Job) error { return nil } -func (*DefaultRenderer) BeginCluster(job *Job) error { return nil } -func (*DefaultRenderer) EndCluster(job *Job) error { return nil } -func (*DefaultRenderer) BeginNodes(job *Job) error { return nil } -func (*DefaultRenderer) EndNodes(job *Job) error { return nil } -func (*DefaultRenderer) BeginEdges(job *Job) error { return nil } -func (*DefaultRenderer) EndEdges(job *Job) error { return nil } -func (*DefaultRenderer) BeginNode(job *Job) error { return nil } -func (*DefaultRenderer) EndNode(job *Job) error { return nil } -func (*DefaultRenderer) BeginEdge(job *Job) error { return nil } -func (*DefaultRenderer) EndEdge(job *Job) error { return nil } -func (*DefaultRenderer) BeginAnchor(job *Job, href, tooltip, target, id string) error { return nil } -func (*DefaultRenderer) EndAnchor(job *Job) error { return nil } -func (*DefaultRenderer) BeginLabel(job *Job, typ int) error { return nil } -func (*DefaultRenderer) EndLabel(job *Job) error { return nil } -func (*DefaultRenderer) TextSpan(job *Job, p Pointf, span *TextSpan) error { return nil } -func (*DefaultRenderer) ResolveColor(job *Job, c Color) error { return nil } -func (*DefaultRenderer) Ellipse(job *Job, a0, a1 Pointf, filled int) error { return nil } -func (*DefaultRenderer) Polygon(job *Job, a []Pointf, filled int) error { return nil } -func (*DefaultRenderer) BezierCurve(job *Job, a []Pointf, arrowAtStart, arrowAtEnd int) error { - return nil -} -func (*DefaultRenderer) Polyline(job *Job, a []Pointf) error { return nil } -func (*DefaultRenderer) Comment(job *Job, comment string) error { return nil } -func (*DefaultRenderer) LibraryShape(job *Job, name string, a []Pointf, filled int) error { - return nil -} - -type rendererWithError struct { - renderer Renderer - err error -} - -func (r *rendererWithError) setError(err error) { - r.err = err - ccall.Agerr(err.Error()) -} - -var ( - renderers = map[string]*rendererWithError{} - mu sync.Mutex -) - -func RegisterRenderer(name string, renderer Renderer) { - mu.Lock() - defer mu.Unlock() - renderers[name] = &rendererWithError{renderer: renderer} -} - -type Point struct { - X int - Y int -} - -type Pointf struct { - X float64 - Y float64 -} - -type Box struct { - LL Point - UR Point -} - -type Boxf struct { - LL Pointf - UR Pointf -} - -type Color struct { - R uint - G uint - B uint - A uint -} - -type TextSpan struct { - *ccall.TextSpan -} - -func dispatchRenderer(job *ccall.GVJ) *rendererWithError { - name := job.OutputLangname() - r, exists := renderers[name] - if !exists { - r := &rendererWithError{} - r.setError(errors.Errorf("could not find renderer for %s", name)) - renderers[name] = r - return r - } - return r -} - -func beginJob(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginJob(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endJob(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndJob(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginGraph(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginGraph(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endGraph(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndGraph(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginLayer(job *ccall.GVJ, layerName string, layerNum int, numLayers int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginLayer(&Job{GVJ: job}, layerName, layerNum, numLayers); err != nil { - r.setError(err) - } -} - -func endLayer(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndLayer(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginPage(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginPage(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endPage(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndPage(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginCluster(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginCluster(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endCluster(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndCluster(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginNodes(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginNodes(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endNodes(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndNodes(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginEdges(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginEdges(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endEdges(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndEdges(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginNode(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginNode(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endNode(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndNode(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginEdge(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginEdge(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func endEdge(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndEdge(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginAnchor(job *ccall.GVJ, href, tooltip, target, id string) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginAnchor(&Job{GVJ: job}, href, tooltip, target, id); err != nil { - r.setError(err) - } -} - -func endAnchor(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndAnchor(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func beginLabel(job *ccall.GVJ, typ int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.BeginLabel(&Job{GVJ: job}, typ); err != nil { - r.setError(err) - } -} - -func endLabel(job *ccall.GVJ) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.EndLabel(&Job{GVJ: job}); err != nil { - r.setError(err) - } -} - -func textspan(job *ccall.GVJ, p ccall.Pointf, span *ccall.TextSpan) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.TextSpan(&Job{GVJ: job}, Pointf{X: p.X, Y: p.Y}, &TextSpan{TextSpan: span}); err != nil { - r.setError(err) - } -} - -func resolveColor(job *ccall.GVJ, r, g, b, a uint) { - renderer := dispatchRenderer(job) - if renderer.err != nil { - return - } - if err := renderer.renderer.ResolveColor(&Job{GVJ: job}, Color{R: r, G: g, B: b, A: a}); err != nil { - renderer.setError(err) - } -} - -func ellipse(job *ccall.GVJ, a0, a1 ccall.Pointf, filled int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.Ellipse(&Job{GVJ: job}, Pointf{X: a0.X, Y: a0.Y}, Pointf{X: a1.X, Y: a1.Y}, filled); err != nil { - r.setError(err) - } -} - -func polygon(job *ccall.GVJ, a []ccall.Pointf, filled int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - v := make([]Pointf, len(a)) - for idx, aa := range a { - v[idx] = Pointf{X: aa.X, Y: aa.Y} - } - if err := r.renderer.Polygon(&Job{GVJ: job}, v, filled); err != nil { - r.setError(err) - } -} - -func beziercurve(job *ccall.GVJ, a []ccall.Pointf, arrowAtStart, arrowAtEnd, ext int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - v := make([]Pointf, len(a)) - for idx, aa := range a { - v[idx] = Pointf{X: aa.X, Y: aa.Y} - } - if err := r.renderer.BezierCurve(&Job{GVJ: job}, v, arrowAtStart, arrowAtEnd); err != nil { - r.setError(err) - } -} - -func polyline(job *ccall.GVJ, a []ccall.Pointf) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - v := make([]Pointf, len(a)) - for idx, aa := range a { - v[idx] = Pointf{X: aa.X, Y: aa.Y} - } - if err := r.renderer.Polyline(&Job{GVJ: job}, v); err != nil { - r.setError(err) - } -} - -func comment(job *ccall.GVJ, comment string) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - if err := r.renderer.Comment(&Job{GVJ: job}, comment); err != nil { - r.setError(err) - } -} - -func libraryShape(job *ccall.GVJ, name string, a []ccall.Pointf, filled int) { - r := dispatchRenderer(job) - if r.err != nil { - return - } - v := make([]Pointf, len(a)) - for idx, aa := range a { - v[idx] = Pointf{X: aa.X, Y: aa.Y} - } - if err := r.renderer.LibraryShape(&Job{GVJ: job}, name, v, filled); err != nil { - r.setError(err) - } -} - -func init() { - ccall.BeginJob = beginJob - ccall.EndJob = endJob - ccall.BeginGraph = beginGraph - ccall.EndGraph = endGraph - ccall.BeginLayer = beginLayer - ccall.EndLayer = endLayer - ccall.BeginPage = beginPage - ccall.EndPage = endPage - ccall.BeginCluster = beginCluster - ccall.EndCluster = endCluster - ccall.BeginNodes = beginNodes - ccall.EndNodes = endNodes - ccall.BeginEdges = beginEdges - ccall.EndEdges = endEdges - ccall.BeginNode = beginNode - ccall.EndNode = endNode - ccall.BeginEdge = beginEdge - ccall.EndEdge = endEdge - ccall.BeginAnchor = beginAnchor - ccall.EndAnchor = endAnchor - ccall.BeginLabel = beginLabel - ccall.EndLabel = endLabel - ccall.Textspan = textspan - ccall.ResolveColor = resolveColor - ccall.Ellipse = ellipse - ccall.Polygon = polygon - ccall.Beziercurve = beziercurve - ccall.Polyline = polyline - ccall.Comment = comment - ccall.LibraryShape = libraryShape -} diff --git a/internal/builddate.h b/internal/builddate.h deleted file mode 100644 index 02cf773..0000000 --- a/internal/builddate.h +++ /dev/null @@ -1 +0,0 @@ -#define BUILDDATE "20161225.0304" diff --git a/internal/ccall/ast/align.h b/internal/ccall/ast/align.h deleted file mode 100644 index 22fe50c..0000000 --- a/internal/ccall/ast/align.h +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* : : generated from features/align.c by iffe version 1999-08-11 : : */ -#ifndef _def_align_ast -#define _def_align_ast 1 - typedef unsigned long ALIGN_INTEGRAL; - -#define ALIGN_CHUNK 8192 -#define ALIGN_INTEGRAL long -#define ALIGN_INTEGER(x) ((ALIGN_INTEGRAL)(x)) -#define ALIGN_POINTER(x) ((char*)(x)) -#define ALIGN_ROUND(x,y) ALIGN_POINTER(ALIGN_INTEGER((x)+(y)-1)&~((y)-1)) - -#define ALIGN_BOUND ALIGN_BOUND2 -#define ALIGN_ALIGN(x) ALIGN_ALIGN2(x) -#define ALIGN_TRUNC(x) ALIGN_TRUNC2(x) - -#define ALIGN_BIT1 0x1 -#define ALIGN_BOUND1 ALIGN_BOUND2 -#define ALIGN_ALIGN1(x) ALIGN_ALIGN2(x) -#define ALIGN_TRUNC1(x) ALIGN_TRUNC2(x) -#define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffe) -#define ALIGN_SETBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x1) -#define ALIGN_TSTBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x1) - -#define ALIGN_BIT2 0x2 -#define ALIGN_BOUND2 8 -#define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+7) -#define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffff8) -#define ALIGN_CLRBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffd) -#define ALIGN_SETBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x2) -#define ALIGN_TSTBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x2) - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/ast/ast.h b/internal/ccall/ast/ast.h deleted file mode 100644 index a03ddf7..0000000 --- a/internal/ccall/ast/ast.h +++ /dev/null @@ -1,108 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef AST_H -#define AST_H - -#include -#include -#include -#include -#ifdef sun -#include -#endif - -#define NiL 0 -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif - -#define PATH_PHYSICAL 01 -#define PATH_DOTDOT 02 -#define PATH_EXISTS 04 -#define PATH_VERIFIED(n) (((n)&01777)<<5) - -#define PATH_REGULAR 010 -#define PATH_EXECUTE 001 -#define PATH_READ 004 -#define PATH_WRITE 002 -#define PATH_ABSOLUTE 020 - -/* - * strgrpmatch() flags - */ - -#define STR_MAXIMAL 01 /* maximal match */ -#define STR_LEFT 02 /* implicit left anchor */ -#define STR_RIGHT 04 /* implicit right anchor */ -#define STR_ICASE 010 /* ignore case */ - -/* - * fmtquote() flags - */ - -#define FMT_ALWAYS 0x01 /* always quote */ -#define FMT_ESCAPED 0x02 /* already escaped */ -#define FMT_SHELL 0x04 /* escape $ ` too */ -#define FMT_WIDE 0x08 /* don't escape 8 bit chars */ - -#define CC_bel 0007 /* bel character */ -#define CC_esc 0033 /* esc character */ -#define CC_vt 0013 /* vt character */ - -#define elementsof(x) (sizeof(x)/sizeof(x[0])) -#define newof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)calloc(1,sizeof(t)*(n)+(x))) -#define oldof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)malloc(sizeof(t)*(n)+(x))) -#define streq(a,b) (*(a)==*(b)&&!strcmp(a,b)) -#define strneq(a,b,n) (*(a)==*(b)&&!strncmp(a,b,n)) -#define memzero(b,n) memset(b,0,n) - - extern char *pathpath(char *, const char *, const char *, int); - extern char *pathfind(const char *, const char *, const char *, char *, - size_t); - extern char *pathaccess(char *, const char *, const char *, - const char *, int); - extern char *pathbin(void); - extern char *pathcat(char *, const char *, int, const char *, - const char *); - extern int pathgetlink(const char *, char *, int); - extern int pathexists(char *, int); - - extern int chresc(const char *, char **); - extern int chrtoi(const char *); - extern char *fmtesq(const char *, const char *); - extern char *fmtesc(const char *as); - extern char *fmtbuf(size_t n); - extern char *fmtquote(const char *, const char *, const char *, size_t, - int); - - extern int astquery(int, const char *, ...); - - extern int strmatch(const char *, const char *); - extern int strgrpmatch(const char *, const char *, int *, int, int); - extern int stresc(char *); - extern long strton(const char *, char **, char *, int); - extern char *strcopy(char *s, const char *t); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/ast/chresc.c b/internal/ccall/ast/chresc.c deleted file mode 100644 index 66225dc..0000000 --- a/internal/ccall/ast/chresc.c +++ /dev/null @@ -1,138 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * return the next character in the string s - * \ character constants are converted - * p is updated to point to the next character in s - */ - -#include -/* #include */ - -int chresc(register const char *s, char **p) -{ - register const char *q; - register int c; - - switch (c = *s++) { - case 0: - s--; - break; - case '\\': - switch (c = *s++) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - c -= '0'; - q = s + 2; - while (s < q) - switch (*s) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - c = (c << 3) + *s++ - '0'; - break; - default: - q = s; - break; - } - break; - case 'a': - c = CC_bel; - break; - case 'b': - c = '\b'; - break; - case 'f': - c = '\f'; - break; - case 'n': - c = '\n'; - break; - case 'r': - c = '\r'; - break; - case 's': - c = ' '; - break; - case 't': - c = '\t'; - break; - case 'v': - c = CC_vt; - break; - case 'x': - c = 0; - q = s; - while (q) - switch (*s) { - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - c = (c << 4) + *s++ - 'a' + 10; - break; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - c = (c << 4) + *s++ - 'A' + 10; - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - c = (c << 4) + *s++ - '0'; - break; - default: - q = 0; - break; - } - break; - case 'E': - c = CC_esc; - break; - case 0: - s--; - break; - } - break; - } - if (p) - *p = (char *) s; - return c; -} diff --git a/internal/ccall/ast/chrtoi.c b/internal/ccall/ast/chrtoi.c deleted file mode 100644 index e479c4d..0000000 --- a/internal/ccall/ast/chrtoi.c +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Bell Laboratories - * - * convert a 0 terminated character constant string to an int - */ - -#include - -int chrtoi(register const char *s) -{ - register int c; - register int n; - register int x; - char *p; - - c = 0; - for (n = 0; n < sizeof(int) * CHAR_BIT; n += CHAR_BIT) { - switch (x = *((unsigned char *) s++)) { - case '\\': - x = chresc(s - 1, &p); - s = (const char *) p; - break; - case 0: - return (c); - } - c = (c << CHAR_BIT) | x; - } - return (c); -} diff --git a/internal/ccall/ast/compat_unistd.h b/internal/ccall/ast/compat_unistd.h deleted file mode 100644 index a1e6178..0000000 --- a/internal/ccall/ast/compat_unistd.h +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef UNISTD_H -#define UNISTD_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define F_OK 0 -#define R_OK 4 -#define W_OK 2 -#define X_OK 1 - -#define S_ISDIR(m) (((m) & 0170000) == 0040000) - -#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) -#define S_IRUSR 0000400 /* read permission, owner */ -#define S_IWUSR 0000200 /* write permission, owner */ -#define S_IXUSR 0000100/* execute/search permission, owner */ -#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) -#define S_IRGRP 0000040 /* read permission, group */ -#define S_IWGRP 0000020 /* write permission, grougroup */ -#define S_IXGRP 0000010/* execute/search permission, group */ -#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) -#define S_IROTH 0000004 /* read permission, other */ -#define S_IWOTH 0000002 /* write permission, other */ -#define S_IXOTH 0000001/* execute/search permission, other */ - -extern int access (const char*, int); -extern char* getcwd (char*, int); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/ast/dummy.go b/internal/ccall/ast/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/ast/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/ast/error.c b/internal/ccall/ast/error.c deleted file mode 100644 index e8522ef..0000000 --- a/internal/ccall/ast/error.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * standalone mini error implementation - */ - -#ifdef _WIN32 -#include - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif -#endif - -#include -#include -#include -#include - -Error_info_t error_info; - -void setErrorLine (int line) { error_info.line = line; } -void setErrorFileLine (char* src, int line) { - error_info.file = src; - error_info.line = line; -} -void setErrorId (char* id) { error_info.id = id; } -void setErrorErrors (int errors) { error_info.errors = errors; } -int getErrorErrors () { return error_info.errors; } -void setTraceLevel (int i) { error_info.trace = i; } - -void errorv(const char *id, int level, va_list ap) -{ - char *s; - int flags; - - if (level < error_info.trace) return; - if (level < 0) - flags = 0; - else { - flags = level & ~ERROR_LEVEL; - level &= ERROR_LEVEL; - } - if (level && ((s = error_info.id) || (s = (char *) id))) { - if (flags & ERROR_USAGE) - sfprintf(sfstderr, "Usage: %s ", s); - else - sfprintf(sfstderr, "%s: ", s); - } - if (flags & ERROR_USAGE) - /*nop */ ; - else if (level < 0) { - int i; - for (i = 0; i < error_info.indent; i++) - sfprintf(sfstderr, " "); - sfprintf(sfstderr, "debug%d: ", level); - } else if (level) { - if (level == ERROR_WARNING) { - sfprintf(sfstderr, "warning: "); - error_info.warnings++; - } else { - error_info.errors++; - if (level == ERROR_PANIC) - sfprintf(sfstderr, "panic: "); - } - if (error_info.line) { - if (error_info.file && *error_info.file) - sfprintf(sfstderr, "\"%s\", ", error_info.file); - sfprintf(sfstderr, "line %d: ", error_info.line); - } - } - s = va_arg(ap, char *); - sfvprintf(sfstderr, s, ap); - if (flags & ERROR_SYSTEM) - sfprintf(sfstderr, "\n%s", strerror(errno)); - sfprintf(sfstderr, "\n"); - if (level >= ERROR_FATAL) - exit(level - ERROR_FATAL + 1); -} - -void error(int level, ...) -{ - va_list ap; - - va_start(ap, level); - errorv(NiL, level, ap); - va_end(ap); -} - -void errorf(void *handle, void *discipline, int level, ...) -{ - va_list ap; - - va_start(ap, level); - errorv((discipline - && handle) ? *((char **) handle) : (char *) handle, level, ap); - va_end(ap); -} diff --git a/internal/ccall/ast/error.h b/internal/ccall/ast/error.h deleted file mode 100644 index 58106b0..0000000 --- a/internal/ccall/ast/error.h +++ /dev/null @@ -1,73 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * standalone mini error interface - */ - -#ifndef _ERROR_H -#define _ERROR_H - -#include -#include - - typedef struct Error_info_s { - int errors; - int indent; - int line; - int warnings; - int trace; - char *file; - char *id; - } Error_info_t; - -#ifndef ERROR_catalog -#define ERROR_catalog(t) t -#endif - -#define ERROR_INFO 0 /* info message -- no err_id */ -#define ERROR_WARNING 1 /* warning message */ -#define ERROR_ERROR 2 /* error message -- no err_exit */ -#define ERROR_FATAL 3 /* error message with err_exit */ -#define ERROR_PANIC ERROR_LEVEL /* panic message with err_exit */ - -#define ERROR_LEVEL 0x00ff /* level portion of status */ -#define ERROR_SYSTEM 0x0100 /* report system errno message */ -#define ERROR_USAGE 0x0800 /* usage message */ - -#define error_info _err_info -#define error _err_msg -#define errorv _err_msgv - - extern Error_info_t error_info; - - extern void setTraceLevel (int); - extern void setErrorLine (int); - extern void setErrorFileLine (char*, int); - extern void setErrorId (char*); - extern void setErrorErrors (int); - extern int getErrorErrors (void); - - extern void error(int, ...); - extern void errorf(void *, void *, int, ...); - extern void errorv(const char *, int, va_list); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/ast/fmtbuf.c b/internal/ccall/ast/fmtbuf.c deleted file mode 100644 index 20113bd..0000000 --- a/internal/ccall/ast/fmtbuf.c +++ /dev/null @@ -1,39 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include - -/* - * return small format buffer chunk of size n - * spin lock for thread access - * format buffers are short lived - */ - -static char buf[16 * 1024]; -static char *nxt = buf; -static int lck = -1; - -char *fmtbuf(size_t n) -{ - register char *cur; - - while (++lck) - lck--; - if (n > (&buf[elementsof(buf)] - nxt)) - nxt = buf; - cur = nxt; - nxt += n; - lck--; - return cur; -} diff --git a/internal/ccall/ast/fmtesc.c b/internal/ccall/ast/fmtesc.c deleted file mode 100644 index da7eeb1..0000000 --- a/internal/ccall/ast/fmtesc.c +++ /dev/null @@ -1,175 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * return string with expanded escape chars - */ - -#include -/* #include */ -#include -#include - -/* - * quote string as of length n with qb...qe - * (flags&FMT_ALWAYS) always quotes, otherwise quote output only if necessary - * qe and the usual suspects are \... escaped - * (flags&FMT_WIDE) doesn't escape 8 bit chars - * (flags&FMT_ESCAPED) doesn't \... escape the usual suspects - * (flags&FMT_SHELL) escape $`"#;~&|()<>[]*? - */ - -char *fmtquote(const char *as, const char *qb, const char *qe, size_t n, - int flags) -{ - register unsigned char *s = (unsigned char *) as; - register unsigned char *e = s + n; - register char *b; - register int c; - register int escaped; - register int spaced; - int shell; - char *f; - char *buf; - - c = 4 * (n + 1); - if (qb) - c += strlen((char *) qb); - if (qe) - c += strlen((char *) qe); - b = buf = fmtbuf(c); - shell = 0; - if (qb) { - if (qb[0] == '$' && qb[1] == '\'' && qb[2] == 0) - shell = 1; - while ((*b = *qb++)) - b++; - } - f = b; - escaped = spaced = !!(flags & FMT_ALWAYS); - while (s < e) { -#ifdef UNUSED - if ((c = mbsize(s)) > 1) { - while (c-- && s < e) - *b++ = *s++; - } else { -#endif - c = *s++; - if (!(flags & FMT_ESCAPED) - && (iscntrl(c) || !isprint(c) || c == '\\')) { - escaped = 1; - *b++ = '\\'; - switch (c) { - case CC_bel: - c = 'a'; - break; - case '\b': - c = 'b'; - break; - case '\f': - c = 'f'; - break; - case '\n': - c = 'n'; - break; - case '\r': - c = 'r'; - break; - case '\t': - c = 't'; - break; - case CC_vt: - c = 'v'; - break; - case CC_esc: - c = 'E'; - break; - case '\\': - break; - default: - if (!(flags & FMT_WIDE) || !(c & 0200)) { - *b++ = '0' + ((c >> 6) & 07); - *b++ = '0' + ((c >> 3) & 07); - c = '0' + (c & 07); - } else - b--; - break; - } - } else if (c == '\\') { - escaped = 1; - *b++ = c; - if (*s) - c = *s++; - } else if ((qe && strchr(qe, c)) || - ((flags & FMT_SHELL) && !shell - && (c == '$' || c == '`'))) { - escaped = 1; - *b++ = '\\'; - } else if (!spaced && - !escaped && - (isspace(c) || - (((flags & FMT_SHELL) || shell) && - (strchr("\";~&|()<>[]*?", c) || - (c == '#' && (b == f || isspace(*(b - 1))) - ) - ) - ) - ) - ) - spaced = 1; - *b++ = c; -#ifdef UNUSED - } -#endif - } - if (qb) { - if (!escaped) - buf += shell + !spaced; - if (qe && (escaped || spaced)) - while ((*b = *qe++)) - b++; - } - *b = 0; - return buf; -} - -/* - * escape the usual suspects and quote chars in qs - * in length n string as - */ - -char *fmtnesq(const char *as, const char *qs, size_t n) -{ - return fmtquote(as, NiL, qs, n, 0); -} - -/* - * escape the usual suspects and quote chars in qs - */ - -char *fmtesq(const char *as, const char *qs) -{ - return fmtquote(as, NiL, qs, strlen((char *) as), 0); -} - -/* - * escape the usual suspects - */ - -char *fmtesc(const char *as) -{ - return fmtquote(as, NiL, NiL, strlen((char *) as), 0); -} diff --git a/internal/ccall/ast/hashkey.h b/internal/ccall/ast/hashkey.h deleted file mode 100644 index 4bc44f9..0000000 --- a/internal/ccall/ast/hashkey.h +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Glenn Fowler - * AT&T Research - * - * 1-6 char lower-case keyword -> long hash - * digit args passed as HASHKEYN('2') - */ - -#ifndef _HASHKEY_H -#define _HASHKEY_H - -#define HASHKEYMAX 6 -#define HASHKEYBIT 5 -#define HASHKEYOFF ('a'-1) -#define HASHKEYPART(h,c) (((h)< -#ifdef HAVE_UNISTD_H -#include -#else -#include -#endif -#include -#include - -/* #include */ - -char *pathcanon(char *path, int flags); - -char *pathaccess(register char *path, register const char *dirs, - const char *a, const char *b, register int mode) -{ - register int m = 0; - int sep = ':'; - char cwd[PATH_MAX]; - struct stat st; - -#ifdef EFF_ONLY_OK - m |= EFF_ONLY_OK; -#endif -#ifdef EX_OK - if (mode == (PATH_EXECUTE | PATH_REGULAR)) { - mode &= ~PATH_REGULAR; - m |= EX_OK; - } else -#endif - { - if (mode & PATH_READ) - m |= R_OK; - if (mode & PATH_WRITE) - m |= W_OK; - if (mode & PATH_EXECUTE) - m |= X_OK; - } - do { - dirs = pathcat(path, dirs, sep, a, b); - pathcanon(path, 0); - if (!access(path, m)) { - if ((mode & PATH_REGULAR) - && (stat(path, &st) || S_ISDIR(st.st_mode))) - continue; - if (*path == '/' || !(mode & PATH_ABSOLUTE)) - return (path); - dirs = getcwd(cwd, sizeof(cwd)); - sep = 0; - } - } while (dirs); - return (0); -} diff --git a/internal/ccall/ast/pathbin.c b/internal/ccall/ast/pathbin.c deleted file mode 100644 index 0fe008b..0000000 --- a/internal/ccall/ast/pathbin.c +++ /dev/null @@ -1,34 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Bell Laboratories - * - * return current PATH - */ - -#include - -char *pathbin(void) -{ - register char *bin; - - static char *val; - - if ((!(bin = getenv("PATH")) || !*bin) && !(bin = val)) { - bin = "/bin:/usr/bin:/usr/local/bin"; - val = bin; - } - return bin; -} diff --git a/internal/ccall/ast/pathcanon.c b/internal/ccall/ast/pathcanon.c deleted file mode 100644 index e1746af..0000000 --- a/internal/ccall/ast/pathcanon.c +++ /dev/null @@ -1,204 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Labs Research - * - * in-place path name canonicalization -- preserves the logical view - * pointer to trailing 0 in path returned - * - * remove redundant .'s and /'s - * move ..'s to the front - * /.. preserved (for pdu and newcastle hacks) - * FS_3D handles ... - * if (flags&PATH_PHYSICAL) then symlinks resolved at each component - * if (flags&PATH_DOTDOT) then each .. checked for access - * if (flags&PATH_EXISTS) then path must exist at each component - * if (flags&PATH_VERIFIED(n)) then first n chars of path exist - * - * longer pathname possible if (flags&PATH_PHYSICAL) or FS_3D ... involved - * 0 returned on error and if (flags&(PATH_DOTDOT|PATH_EXISTS)) then path - * will contain the components following the failure point - */ - -#include -/* #include */ -/* #include */ -#include -#include -#include -#include -#include - -char *pathcanon(char *path, int flags) -{ - register char *p; - register char *r; - register char *s; - register char *t; - register int dots; - char *phys; - char *v; - char* e = path + PATH_MAX; - int loop; - int oerrno; -#if defined(FS_3D) - long visits = 0; -#endif - - oerrno = errno; - dots = loop = 0; - phys = path; - v = path + ((flags >> 5) & 01777); - if (*path == '/' && *(path + 1) == '/') - do - path++; - while (*path == '/' && *(path + 1) == '/'); - p = r = s = t = path; - for (;;) - switch (*t++ = *s++) { - case '.': - dots++; - break; - case 0: - s--; - /*FALLTHROUGH*/ case '/': - while (*s == '/') - s++; - switch (dots) { - case 1: - t -= 2; - break; - case 2: - if ((flags & (PATH_DOTDOT | PATH_EXISTS)) == PATH_DOTDOT - && (t - 2) >= v) { - struct stat st; - - *(t - 2) = 0; - if (stat(phys, &st)) { - strcpy(path, s); - return 0; - } - *(t - 2) = '.'; - } -#if PRESERVE_TRAILING_SLASH - if (t - 5 < r) - r = t; -#else - if (t - 5 < r) { - if (t - 4 == r) - t = r + 1; - else - r = t; - } -#endif - else - for (t -= 5; t > r && *(t - 1) != '/'; t--); - break; - case 3: -#if defined(FS_3D) - { - char *x; - char *o; - int c; - - o = t; - if ((t -= 5) <= path) - t = path + 1; - c = *t; - *t = 0; - if (x = pathnext(phys, s - (*s != 0), &visits)) { - r = path; - if (t == r + 1) - x = r; - v = s = t = x; - } else { - *t = c; - t = o; - } - } -#else - r = t; -#endif - break; - default: - if ((flags & PATH_PHYSICAL) && loop < 32 && (t - 1) > path) { - int c; - char buf[PATH_MAX]; - - c = *(t - 1); - *(t - 1) = 0; - dots = pathgetlink(phys, buf, sizeof(buf)); - *(t - 1) = c; - if (dots > 0) { - if ((t + dots + 1) >= e) { /* make sure path fits in buf */ - strcpy(path, s); - return 0; - } - loop++; - strcpy(buf + dots, s - (*s != 0)); - if (*buf == '/') - p = r = path; - v = s = t = p; - strcpy(p, buf); - } else if (dots < 0 && errno == ENOENT) { - if (flags & PATH_EXISTS) { - strcpy(path, s); - return 0; - } - flags &= ~(PATH_PHYSICAL | PATH_DOTDOT); - } - dots = 4; - } - break; - } - if (dots >= 4 && (flags & PATH_EXISTS) && (t - 1) >= v - && (t > path + 1 - || (t > path && *(t - 1) && *(t - 1) != '/'))) { - struct stat st; - - *(t - 1) = 0; - if (stat(phys, &st)) { - strcpy(path, s); - return 0; - } - v = t; - if (*s) - *(t - 1) = '/'; - } - if (!*s) { - if (t > path && !*(t - 1)) - t--; - if (t == path) - *t++ = '.'; -#if DONT_PRESERVE_TRAILING_SLASH - else if (t > path + 1 && *(t - 1) == '/') - t--; -#else - else if ((s <= path || *(s - 1) != '/') && t > path + 1 - && *(t - 1) == '/') - t--; -#endif - *t = 0; - errno = oerrno; - return t; - } - dots = 0; - p = t; - break; - default: - dots = 4; - break; - } -} diff --git a/internal/ccall/ast/pathcat.c b/internal/ccall/ast/pathcat.c deleted file mode 100644 index 09add21..0000000 --- a/internal/ccall/ast/pathcat.c +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Bell Laboratories - * - * single dir support for pathaccess() - */ - -#include - -char *pathcat(char *path, register const char *dirs, int sep, - const char *a, register const char *b) -{ - register char *s; - - s = path; - while (*dirs && *dirs != sep) - *s++ = *dirs++; - if (s != path) - *s++ = '/'; - if (a) { - while ((*s = *a++)) - s++; - if (b) - *s++ = '/'; - } else if (!b) - b = "."; - if (b) - while ((*s++ = *b++)); - return (*dirs ? (char *) ++dirs : 0); -} diff --git a/internal/ccall/ast/pathexists.c b/internal/ccall/ast/pathexists.c deleted file mode 100644 index 8e1baff..0000000 --- a/internal/ccall/ast/pathexists.c +++ /dev/null @@ -1,115 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * return 1 if path exisis - * maintains a cache to minimize stat(2) calls - * path is modified in-place but restored on return - * path components checked in pairs to cut stat()'s - * in half by checking ENOTDIR vs. ENOENT - */ - -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif -/* #include "lclib.h" */ -/* #include */ - -typedef struct Tree_s { - struct Tree_s *next; - struct Tree_s *tree; - int mode; - char name[1]; -} Tree_t; - -int pathexists(char *path, int mode) -{ - register char *s; - register char *e; - register Tree_t *p; - register Tree_t *t; - register int c; - char *ee; - int cc = 0; - int x; - struct stat st; - - static Tree_t tree; - - t = &tree; - e = path + 1; - c = *path; - while (c) { - p = t; - for (s = e; *e && *e != '/'; e++); - c = *e; - *e = 0; - for (t = p->tree; t && !streq(s, t->name); t = t->next); - if (!t) { - if (!(t = newof(0, Tree_t, 1, strlen(s)))) { - *e = c; - return 0; - } - strcpy(t->name, s); - t->next = p->tree; - p->tree = t; - if (c) { - *e = c; - for (s = ee = e + 1; *ee && *ee != '/'; ee++); - cc = *ee; - *ee = 0; - } else - ee = 0; - x = stat(path, &st); - if (ee) { - e = ee; - c = cc; - if (!x || errno == ENOENT) - t->mode = PATH_READ | PATH_EXECUTE; - if (!(p = newof(0, Tree_t, 1, strlen(s)))) { - *e = c; - return 0; - } - strcpy(p->name, s); - p->next = t->tree; - t->tree = p; - t = p; - } - if (x) { - *e = c; - return 0; - } - if (st.st_mode & (S_IRUSR | S_IRGRP | S_IROTH)) - t->mode |= PATH_READ; - if (st.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)) - t->mode |= PATH_WRITE; - if (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) - t->mode |= PATH_EXECUTE; - if (!S_ISDIR(st.st_mode)) - t->mode |= PATH_REGULAR; - } - *e++ = c; - if (!t->mode || (c && (t->mode & PATH_REGULAR))) - return 0; - } - mode &= (PATH_READ | PATH_WRITE | PATH_EXECUTE | PATH_REGULAR); - return (t->mode & mode) == mode; -} diff --git a/internal/ccall/ast/pathfind.c b/internal/ccall/ast/pathfind.c deleted file mode 100644 index dbc0b78..0000000 --- a/internal/ccall/ast/pathfind.c +++ /dev/null @@ -1,114 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * include style search support - */ - -#include "config.h" -#include -#ifdef HAVE_UNISTD_H -#include -#else -#include -#endif -#ifdef HAVE_STRINGS_H -#include -#endif -#include - -typedef struct Dir_s { /* directory list element */ - struct Dir_s *next; /* next in list */ - char dir[1]; /* directory path */ -} Dir_t; - -static struct { /* directory list state */ - Dir_t *head; /* directory list head */ - Dir_t *tail; /* directory list tail */ -} state; - -/* - * append dir to pathfind() include list - */ - -int pathinclude(const char *dir) -{ - register Dir_t *dp; - - if (dir && *dir && !streq(dir, ".")) { - if (!(dp = oldof(0, Dir_t, 1, strlen(dir)))) - return -1; - strcpy(dp->dir, dir); - if (state.tail) - state.tail = state.tail->next = dp; - else - state.head = state.tail = dp; - } - return 0; -} - -/* - * return path to name using pathinclude() list - * path placed in - * if lib!=0 then pathpath() attempted after include search - * if type!=0 and name has no '.' then file.type also attempted - * any *: prefix in lib is ignored (discipline library dictionary support) - */ - -char *pathfind(const char *name, const char *lib, const char *type, - char *buf, size_t size) -{ - register Dir_t *dp; - register char *s; - char tmp[PATH_MAX]; - - if (access(name, R_OK) >= 0) - return strncpy(buf, name, size); - if (type) { - sfsprintf(buf, size, "%s.%s", name, type); - if (access(buf, R_OK) >= 0) - return buf; - } - if (*name != '/') { - if (strchr(name, '.')) - type = 0; - for (dp = state.head; dp; dp = dp->next) { - sfsprintf(tmp, sizeof(tmp), "%s/%s", dp->dir, name); - if (pathpath(buf, tmp, "", PATH_REGULAR)) - return buf; - if (type) { - sfsprintf(tmp, sizeof(tmp), "%s/%s.%s", dp->dir, name, - type); - if (pathpath(buf, tmp, "", PATH_REGULAR)) - return buf; - } - } - if (lib) { - if ((s = strrchr((char *) lib, ':'))) - lib = (const char *) s + 1; - sfsprintf(tmp, sizeof(tmp), "lib/%s/%s", lib, name); - if (pathpath(buf, tmp, "", PATH_REGULAR)) - return buf; - if (type) { - sfsprintf(tmp, sizeof(tmp), "lib/%s/%s.%s", lib, name, - type); - if (pathpath(buf, tmp, "", PATH_REGULAR)) - return buf; - } - } - } - return 0; -} diff --git a/internal/ccall/ast/pathgetlink.c b/internal/ccall/ast/pathgetlink.c deleted file mode 100644 index f5d9cae..0000000 --- a/internal/ccall/ast/pathgetlink.c +++ /dev/null @@ -1,98 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* -* Glenn Fowler -* AT&T Bell Laboratories -*/ - -#include "config.h" -#include "errno.h" - -#ifdef UNIV_MAX - -#include - -#endif - -#ifdef HAVE_UNISTD_H -#include -#else -#include -#endif - -/* - * return external representation for symbolic link text of name in buf - * the link text string length is returned - */ - -int pathgetlink(const char *name, char *buf, int siz) -{ -#ifdef _WIN32 - return (-1); -#else - int n; - - if ((n = readlink(name, buf, siz)) < 0) - return (-1); - if (n >= siz) { - errno = EINVAL; - return (-1); - } - buf[n] = 0; -#ifdef UNIV_MAX - if (isspace(*buf)) { - register char *s; - register char *t; - register char *u; - register char *v; - int match = 0; - char tmp[PATH_MAX]; - - s = buf; - t = tmp; - while (isalnum(*++s) || *s == '_' || *s == '.'); - if (*s++) { - for (;;) { - if (!*s || isspace(*s)) { - if (match) { - *t = 0; - n = t - tmp; - strcpy(buf, tmp); - } - break; - } - if (t >= &tmp[sizeof(tmp)]) - break; - *t++ = *s++; - if (!match && t < &tmp[sizeof(tmp) - univ_size + 1]) - for (n = 0; n < UNIV_MAX; n++) { - if (*(v = s - 1) == *(u = univ_name[n])) { - while (*u && *v++ == *u) - u++; - if (!*u) { - match = 1; - strcpy(t - 1, univ_cond); - t += univ_size - 1; - s = v; - break; - } - } - } - } - } - } -#endif - return (n); -#endif -} diff --git a/internal/ccall/ast/pathpath.c b/internal/ccall/ast/pathpath.c deleted file mode 100644 index 48deb61..0000000 --- a/internal/ccall/ast/pathpath.c +++ /dev/null @@ -1,121 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * return full path to p with mode access using $PATH - * if a!=0 then it and $0 and $_ with $PWD are used for - * related root searching - * the related root must have a bin subdir - * p==0 sets the cached relative dir to a - * p==0 a=="" disables $0 $_ $PWD relative search - * full path returned in path buffer - * if path==0 then the space is malloc'd - */ - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#else -#include -#endif - -/* #include */ -#ifdef HAVE_CRT_EXTERNS_H -#include -#endif - -#ifdef _WIN32 -#define environ _environ -#else -#if defined(HAVE_CRT_EXTERNS_H) && defined(HAVE__NSGETENVIRON) -#define environ (*_NSGetEnviron()) -#else -extern char **environ; -#endif -#endif -char **opt_info_argv; - -char *pathpath(register char *path, const char *p, const char *a, int mode) -{ - register char *s; - char *x; - char buf[PATH_MAX]; - - static char *cmd; - - if (!path) - path = buf; - if (!p) { - if (cmd) - free(cmd); - cmd = a ? strdup(a) : (char *) 0; - return 0; - } - if (strlen(p) < PATH_MAX) { - strcpy(path, p); - if (pathexists(path, mode)) - return (path == buf) ? strdup(path) : path; - } - if (*p == '/') - a = 0; - else if ((s = (char *) a)) { - x = s; - if (strchr(p, '/')) { - a = p; - p = ".."; - } else - a = 0; - if ((!cmd || *cmd) && - (strchr(s, '/') || - (((s = cmd) || (opt_info_argv && (s = *opt_info_argv))) && - strchr(s, '/') && !strchr(s, '\n') && !access(s, F_OK)) || - (environ && (s = *environ) && *s++ == '_' && - *s++ == '=' && strchr(s, '/') && !strneq(s, "/bin/", 5) && - !strneq(s, "/usr/bin/", 9)) || - (*x && !access(x, F_OK) && (s = getenv("PWD")) && *s == '/') - ) - ) { - if (!cmd) - cmd = strdup(s); - if (strlen(s) < (sizeof(buf) - 6)) { - s = strcopy(path, s); - for (;;) { - do - if (s <= path) - goto normal; - while (*--s == '/'); - do - if (s <= path) - goto normal; - while (*--s != '/'); - strcpy(s + 1, "bin"); - if (pathexists(path, PATH_EXECUTE)) { - if ((s = pathaccess(path, path, p, a, mode))) - return path == buf ? strdup(s) : s; - goto normal; - } - } - normal:; - } - } - } - x = !a && strchr(p, '/') ? "" : pathbin(); - if (!(s = pathaccess(path, x, p, a, mode)) && !*x - && (x = getenv("FPATH"))) - s = pathaccess(path, x, p, a, mode); - return (s && path == buf) ? strdup(s) : s; -} diff --git a/internal/ccall/ast/sfstr.h b/internal/ccall/ast/sfstr.h deleted file mode 100644 index f5181a7..0000000 --- a/internal/ccall/ast/sfstr.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * macro interface for sfio write strings - * - * NOTE: see for an alternative interface - * read operations require sfseek() - */ - -#ifndef _SFSTR_H -#define _SFSTR_H - -#include - -#define sfstropen() sfnew((Sfio_t*)0,(char*)0,-1,-1,SF_WRITE|SF_STRING) -#define sfstrnew(m) sfnew((Sfio_t*)0,(char*)0,-1,-1,(m)|SF_STRING) -#define sfstrclose(f) sfclose(f) - -#define sfstrtell(f) ((f)->next - (f)->data) -#define sfstrrel(f,p) ((p) == (0) ? (char*)(f)->next : \ - ((f)->next += (p), \ - ((f)->next >= (f)->data && (f)->next <= (f)->endb) ? \ - (char*)(f)->next : ((f)->next -= (p), (char*)0) ) ) - -#define sfstrset(f,p) (((p) >= 0 && (p) <= (f)->size) ? \ - (char*)((f)->next = (f)->data+(p)) : (char*)0 ) - -#define sfstrbase(f) ((char*)(f)->data) -#define sfstrsize(f) ((f)->size) - -#define sfstrrsrv(f,n) (sfreserve(f,(long)(n),1)?(sfwrite(f,(char*)(f)->next,0),(char*)(f)->next):(char*)0) - -#define sfstruse(f) (sfputc(f,0), (char*)((f)->next = (f)->data) ) - -#if _BLD_ast && defined(__EXPORT__) -#define extern __EXPORT__ -#endif - - extern int sfstrtmp(Sfio_t *, int, void *, size_t); - -#undef extern - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/ast/strcopy.c b/internal/ccall/ast/strcopy.c deleted file mode 100644 index 3c835c4..0000000 --- a/internal/ccall/ast/strcopy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include - -/* - * copy t into s, return a pointer to the end of s ('\0') - */ - -char *strcopy(register char *s, register const char *t) -{ - if (!t) - return (s); - while ((*s++ = *t++)); - return (--s); -} diff --git a/internal/ccall/ast/strerror.c b/internal/ccall/ast/strerror.c deleted file mode 100644 index ecbe593..0000000 --- a/internal/ccall/ast/strerror.c +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" -#ifndef HAVE_STRERROR -#include - -extern int sys_nerr; -extern char *sys_errlist[]; - -char *strerror(int errorNumber) -{ - if (errorNumber > 0 && errorNumber < sys_nerr) { - return sys_errlist[errorNumber]; - } else { - return ""; - } -} -#endif diff --git a/internal/ccall/ast/stresc.c b/internal/ccall/ast/stresc.c deleted file mode 100644 index c54bd2d..0000000 --- a/internal/ccall/ast/stresc.c +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Bell Laboratories - * - * convert \x character constants in s in place - * the length of the converted s is returned (may have imbedded \0's) - */ - -#include - -int stresc(register char *s) -{ - register char *t; - register int c; - char *b; - char *p; - - b = t = s; - for (;;) { - switch (c = *s++) { - case '\\': - c = chresc(s - 1, &p); - s = p; - break; - case 0: - *t = 0; - return (t - b); - } - *t++ = c; - } -} diff --git a/internal/ccall/ast/strmatch.c b/internal/ccall/ast/strmatch.c deleted file mode 100644 index 3e374a9..0000000 --- a/internal/ccall/ast/strmatch.c +++ /dev/null @@ -1,796 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * D. G. Korn - * G. S. Fowler - * AT&T Research - * - * match shell file patterns -- derived from Bourne and Korn shell gmatch() - * - * sh pattern egrep RE description - * ---------- -------- ----------- - * * .* 0 or more chars - * ? . any single char - * [.] [.] char class - * [!.] [^.] negated char class - * [[:.:]] [[:.:]] ctype class - * [[=.=]] [[=.=]] equivalence class - * [[...]] [[...]] collation element - * *(.) (.)* 0 or more of - * +(.) (.)+ 1 or more of - * ?(.) (.)? 0 or 1 of - * (.) (.) 1 of - * @(.) (.) 1 of - * a|b a|b a or b - * \# () subgroup back reference [1-9] - * a&b a and b - * !(.) none of - * - * \ used to escape metacharacters - * - * *, ?, (, |, &, ), [, \ must be \'d outside of [...] - * only ] must be \'d inside [...] - * - * BUG: unbalanced ) terminates top level pattern - * - * BOTCH: collating element sort order and character class ranges apparently - * do not have strcoll() in common so we resort to fnmatch(), calling - * it up to COLL_MAX times to determine the matched collating - * element size - */ - -#include -#include -#include -#include - -#if _hdr_wchar && _lib_wctype && _lib_iswctype - -#include /* because includes it and we generate it */ -#include -#if _hdr_wctype -#include -#endif - -#undef isalnum -#define isalnum(x) iswalnum(x) -#undef isalpha -#define isalpha(x) iswalpha(x) -#undef iscntrl -#define iscntrl(x) iswcntrl(x) -#undef isblank -#define isblank(x) iswblank(x) -#undef isdigit -#define isdigit(x) iswdigit(x) -#undef isgraph -#define isgraph(x) iswgraph(x) -#undef islower -#define islower(x) iswlower(x) -#undef isprint -#define isprint(x) iswprint(x) -#undef ispunct -#define ispunct(x) iswpunct(x) -#undef isspace -#define isspace(x) iswspace(x) -#undef isupper -#define isupper(x) iswupper(x) -#undef isxdigit -#define isxdigit(x) iswxdigit(x) - -#if !defined(iswblank) && !_lib_iswblank - -static int iswblank(wint_t wc) -{ - static int initialized; - static wctype_t wt; - - if (!initialized) { - initialized = 1; - wt = wctype("blank"); - } - return iswctype(wc, wt); -} - -#endif - -#else - -#undef _lib_wctype - -#ifndef isblank -#define isblank(x) ((x)==' '||(x)=='\t') -#endif - -#ifndef isgraph -#define isgraph(x) (isprint(x)&&!isblank(x)) -#endif - -#endif - -#if _DEBUG_MATCH -#include -#endif - -#define MAXGROUP 10 - -typedef struct { - char *beg[MAXGROUP]; - char *end[MAXGROUP]; - char *next_s; - short groups; -} Group_t; - -typedef struct { - Group_t current; - Group_t best; - char *last_s; - char *next_p; -} Match_t; - -#if _lib_mbtowc && MB_LEN_MAX > 1 -#define mbgetchar(p) ((ast.locale.set&AST_LC_multibyte)?((ast.tmp_int=mbtowc(&ast.tmp_wchar,p,MB_CUR_MAX))>=0?((p+=ast.tmp_int),ast.tmp_wchar):0):(*p++)) -#else -#define mbgetchar(p) (*p++) -#endif - -#ifndef isxdigit -#define isxdigit(c) (((c)>='0'&&(c)<='9')||((c)>='a'&&(c)<='f')||((c)>='A'&&(c)<='F')) -#endif - -#define getsource(s,e) (((s)>=(e))?0:mbgetchar(s)) - -#define COLL_MAX 3 - -#if !_lib_strcoll -#undef _lib_fnmatch -#endif - -#if _lib_fnmatch -extern int fnmatch(const char *, const char *, int); -#endif - -/* - * gobble chars up to or ) keeping track of (...) and [...] - * sub must be one of { '|', '&', 0 } - * 0 returned if s runs out - */ - -static char *gobble(Match_t * mp, register char *s, register int sub, - int *g, int clear) -{ - register int p = 0; - register char *b = 0; - int c = 0; - int n; - - for (;;) - switch (mbgetchar(s)) { - case '\\': - if (mbgetchar(s)) - break; - /*FALLTHROUGH*/ case 0: - return 0; - case '[': - if (!b) { - if (*s == '!') - (void)mbgetchar(s); - b = s; - } else if (*s == '.' || *s == '=' || *s == ':') - c = *s; - break; - case ']': - if (b) { - if (*(s - 2) == c) - c = 0; - else if (b != (s - 1)) - b = 0; - } - break; - case '(': - if (!b) { - p++; - n = (*g)++; - if (clear) { - if (!sub) - n++; - if (n < MAXGROUP) - mp->current.beg[n] = mp->current.end[n] = 0; - } - } - break; - case ')': - if (!b && p-- <= 0) - return sub ? 0 : s; - break; - case '|': - if (!b && !p && sub == '|') - return s; - break; - } -} - -static int grpmatch(Match_t *, int, char *, register char *, char *, int); - -#if _DEBUG_MATCH -#define RETURN(v) {error_info.indent--;return (v);} -#else -#define RETURN(v) {return (v);} -#endif - -/* - * match a single pattern - * e is the end (0) of the substring in s - * r marks the start of a repeated subgroup pattern - */ - -static int -onematch(Match_t * mp, int g, char *s, char *p, char *e, char *r, - int flags) -{ - register int pc; - register int sc; - register int n; - register int icase; - char *olds; - char *oldp; - -#if _DEBUG_MATCH - error_info.indent++; - error(-1, "onematch g=%d s=%-.*s p=%s r=%p flags=%o", g, e - s, s, p, - r, flags); -#endif - icase = flags & STR_ICASE; - do { - olds = s; - sc = getsource(s, e); - if (icase && isupper(sc)) - sc = tolower(sc); - oldp = p; - switch (pc = mbgetchar(p)) { - case '(': - case '*': - case '?': - case '+': - case '@': - case '!': - if (pc == '(' || *p == '(') { - char *subp; - int oldg; - - s = olds; - subp = p + (pc != '('); - oldg = g; - n = ++g; - if (g < MAXGROUP && (!r || g > mp->current.groups)) - mp->current.beg[g] = mp->current.end[g] = 0; - if (!(p = gobble(mp, subp, 0, &g, !r))) - RETURN(0); - if (pc == '*' || pc == '?' || (pc == '+' && oldp == r)) { - if (onematch(mp, g, s, p, e, NiL, flags)) - RETURN(1); - if (!sc || !getsource(s, e)) { - mp->current.groups = oldg; - RETURN(0); - } - } - if (pc == '*' || pc == '+') { - p = oldp; - sc = n - 1; - } else - sc = g; - pc = (pc != '!'); - do { - if (grpmatch(mp, n, olds, subp, s, flags) == pc) { - if (n < MAXGROUP) { - if (!mp->current.beg[n] - || mp->current.beg[n] > olds) - mp->current.beg[n] = olds; - if (s > mp->current.end[n]) - mp->current.end[n] = s; -#if _DEBUG_MATCH - error(-4, - "subgroup#%d n=%d beg=%p end=%p len=%d", - __LINE__, n, mp->current.beg[n], - mp->current.end[n], - mp->current.end[n] - mp->current.beg[n]); -#endif - } - if (onematch(mp, sc, s, p, e, oldp, flags)) { - if (p == oldp && n < MAXGROUP) { - if (!mp->current.beg[n] - || mp->current.beg[n] > olds) - mp->current.beg[n] = olds; - if (s > mp->current.end[n]) - mp->current.end[n] = s; -#if _DEBUG_MATCH - error(-4, - "subgroup#%d n=%d beg=%p end=%p len=%d", - __LINE__, n, mp->current.beg[n], - mp->current.end[n], - mp->current.end[n] - - mp->current.beg[n]); -#endif - } - RETURN(1); - } - } - } while (s < e && mbgetchar(s)); - mp->current.groups = oldg; - RETURN(0); - } else if (pc == '*') { - /* - * several stars are the same as one - */ - - while (*p == '*' && *(p + 1) != '(') - p++; - oldp = p; - switch (pc = mbgetchar(p)) { - case '@': - case '!': - case '+': - n = *p == '('; - break; - case '(': - case '[': - case '?': - case '*': - n = 1; - break; - case 0: - case '|': - case '&': - case ')': - mp->current.next_s = (flags & STR_MAXIMAL) ? e : olds; - mp->next_p = oldp; - mp->current.groups = g; - if (!pc - && (!mp->best.next_s - || ((flags & STR_MAXIMAL) - && mp->current.next_s > mp->best.next_s) - || (!(flags & STR_MAXIMAL) - && mp->current.next_s < - mp->best.next_s))) { - mp->best = mp->current; -#if _DEBUG_MATCH - error(-3, "best#%d groups=%d next=\"%s\"", - __LINE__, mp->best.groups, mp->best.next_s); -#endif - } - RETURN(1); - case '\\': - if (!(pc = mbgetchar(p))) - RETURN(0); - if (pc >= '0' && pc <= '9') { - n = pc - '0'; -#if _DEBUG_MATCH - error(-2, - "backref#%d n=%d g=%d beg=%p end=%p len=%d", - __LINE__, n, g, mp->current.beg[n], - mp->current.end[n], - mp->current.end[n] - mp->current.beg[n]); -#endif - if (n <= g && mp->current.beg[n]) - pc = *mp->current.beg[n]; - } - /*FALLTHROUGH*/ default: - if (icase && isupper(pc)) - pc = tolower(pc); - n = 0; - break; - } - p = oldp; - for (;;) { - if ((n || pc == sc) - && onematch(mp, g, olds, p, e, NiL, flags)) - RETURN(1); - if (!sc) - RETURN(0); - olds = s; - sc = getsource(s, e); - if ((flags & STR_ICASE) && isupper(sc)) - sc = tolower(sc); - } - } else if (pc != '?' && pc != sc) - RETURN(0); - break; - case 0: - if (!(flags & STR_MAXIMAL)) - sc = 0; - /*FALLTHROUGH*/ case '|': - case '&': - case ')': - if (!sc) { - mp->current.next_s = olds; - mp->next_p = oldp; - mp->current.groups = g; - } - if (!pc - && (!mp->best.next_s - || ((flags & STR_MAXIMAL) && olds > mp->best.next_s) - || (!(flags & STR_MAXIMAL) - && olds < mp->best.next_s))) { - mp->best = mp->current; - mp->best.next_s = olds; - mp->best.groups = g; -#if _DEBUG_MATCH - error(-3, "best#%d groups=%d next=\"%s\"", __LINE__, - mp->best.groups, mp->best.next_s); -#endif - } - RETURN(!sc); - case '[': - { - /*UNDENT... */ - - int invert; - int x; - int ok = 0; - char *range; - - if (!sc) - RETURN(0); -#if _lib_fnmatch - if (ast.locale.set & (1 << AST_LC_COLLATE)) - range = p - 1; - else -#endif - range = 0; - n = 0; - if ((invert = (*p == '!'))) - p++; - for (;;) { - oldp = p; - if (!(pc = mbgetchar(p))) { - RETURN(0); - } else if (pc == '[' - && (*p == ':' || *p == '=' || *p == '.')) { - x = 0; - n = mbgetchar(p); - oldp = p; - for (;;) { - if (!(pc = mbgetchar(p))) - RETURN(0); - if (pc == n && *p == ']') - break; - x++; - } - (void)mbgetchar(p); - if (ok) - /*NOP*/; - else if (n == ':') { - switch (HASHNKEY5 - (x, oldp[0], oldp[1], oldp[2], oldp[3], - oldp[4])) { - case HASHNKEY5(5, 'a', 'l', 'n', 'u', 'm'): - if (isalnum(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'a', 'l', 'p', 'h', 'a'): - if (isalpha(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'b', 'l', 'a', 'n', 'k'): - if (isblank(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'c', 'n', 't', 'r', 'l'): - if (iscntrl(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'd', 'i', 'g', 'i', 't'): - if (isdigit(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'g', 'r', 'a', 'p', 'h'): - if (isgraph(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'l', 'o', 'w', 'e', 'r'): - if (islower(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'p', 'r', 'i', 'n', 't'): - if (isprint(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'p', 'u', 'n', 'c', 't'): - if (ispunct(sc)) - ok = 1; - break; - case HASHNKEY5(5, 's', 'p', 'a', 'c', 'e'): - if (isspace(sc)) - ok = 1; - break; - case HASHNKEY5(5, 'u', 'p', 'p', 'e', 'r'): - if (icase ? islower(sc) : isupper(sc)) - ok = 1; - break; - case HASHNKEY5(6, 'x', 'd', 'i', 'g', 'i'): - if (oldp[5] == 't' && isxdigit(sc)) - ok = 1; - break; -#if _lib_wctype - default: - { - char cc[32]; - - if (x >= sizeof(cc)) - x = sizeof(cc) - 1; - strncpy(cc, oldp, x); - cc[x] = 0; - if (iswctype(sc, wctype(cc))) - ok = 1; - } - break; -#endif - } - } -#if _lib_fnmatch - else if (ast.locale.set & (1 << AST_LC_COLLATE)) - ok = -1; -#endif - else if (range) - goto getrange; - else if (*p == '-' && *(p + 1) != ']') { - (void)mbgetchar(p); - range = oldp; - } else - if ((isalpha(*oldp) && isalpha(*olds) - && tolower(*oldp) == tolower(*olds)) - || sc == mbgetchar(oldp)) - ok = 1; - n = 1; - } else if (pc == ']' && n) { -#if _lib_fnmatch - if (ok < 0) { - char pat[2 * UCHAR_MAX]; - char str[COLL_MAX + 1]; - - if (p - range > sizeof(pat) - 2) - RETURN(0); - memcpy(pat, range, p - range); - pat[p - range] = '*'; - pat[p - range + 1] = 0; - if (fnmatch(pat, olds, 0)) - RETURN(0); - pat[p - range] = 0; - ok = 0; - for (x = 0; x < sizeof(str) - 1 && olds[x]; - x++) { - str[x] = olds[x]; - str[x + 1] = 0; - if (!fnmatch(pat, str, 0)) - ok = 1; - else if (ok) - break; - } - s = olds + x; - break; - } -#endif - if (ok != invert) - break; - RETURN(0); - } else if (pc == '\\' - && (oldp = p, !(pc = mbgetchar(p)))) { - RETURN(0); - } else if (ok) - /*NOP*/; -#if _lib_fnmatch - else if (range - && !(ast.locale.set & (1 << AST_LC_COLLATE))) -#else - else if (range) -#endif - { - getrange: -#if _lib_mbtowc - if (ast.locale.set & AST_LC_multibyte) { - wchar_t sw; - wchar_t bw; - wchar_t ew; - int sz; - int bz; - int ez; - - sz = mbtowc(&sw, olds, MB_CUR_MAX); - bz = mbtowc(&bw, range, MB_CUR_MAX); - ez = mbtowc(&ew, oldp, MB_CUR_MAX); - if (sw == bw || sw == ew) - ok = 1; - else if (sz > 1 || bz > 1 || ez > 1) { - if (sz == bz && sz == ez && sw > bw - && sw < ew) - ok = 1; - else - RETURN(0); - } - } - if (!ok) -#endif - if (icase && isupper(pc)) - pc = tolower(pc); - x = mbgetchar(range); - if (icase && isupper(x)) - x = tolower(x); - if (sc == x || sc == pc || (sc > x && sc < pc)) - ok = 1; - if (*p == '-' && *(p + 1) != ']') { - (void)mbgetchar(p); - range = oldp; - } else - range = 0; - n = 1; - } else if (*p == '-' && *(p + 1) != ']') { - (void)mbgetchar(p); -#if _lib_fnmatch - if (ast.locale.set & (1 << AST_LC_COLLATE)) - ok = -1; - else -#endif - range = oldp; - n = 1; - } else { - if (icase && isupper(pc)) - pc = tolower(pc); - if (sc == pc) - ok = 1; - n = pc; - } - } - - /*...INDENT */ - } - break; - case '\\': - if (!(pc = mbgetchar(p))) - RETURN(0); - if (pc >= '0' && pc <= '9') { - n = pc - '0'; -#if _DEBUG_MATCH - error(-2, "backref#%d n=%d g=%d beg=%p end=%p len=%d", - __LINE__, n, g, mp->current.beg[n], - mp->current.end[n], - mp->current.end[n] - mp->current.beg[n]); -#endif - if (n <= g && (oldp = mp->current.beg[n])) { - while (oldp < mp->current.end[n]) - if (!*olds || *olds++ != *oldp++) - RETURN(0); - s = olds; - break; - } - } - /*FALLTHROUGH*/ default: - if (icase && isupper(pc)) - pc = tolower(pc); - if (pc != sc) - RETURN(0); - break; - } - } while (sc); - RETURN(0); -} - -/* - * match any pattern in a group - * | and & subgroups are parsed here - */ - -static int -grpmatch(Match_t * mp, int g, char *s, register char *p, char *e, - int flags) -{ - register char *a; - -#if _DEBUG_MATCH - error_info.indent++; - error(-1, "grpmatch g=%d s=%-.*s p=%s flags=%o", g, e - s, s, p, - flags); -#endif - do { - for (a = p; onematch(mp, g, s, a, e, NiL, flags); a++) - if (*(a = mp->next_p) != '&') - RETURN(1); - } while ((p = gobble(mp, p, '|', &g, 1))); - RETURN(0); -} - -/* - * subgroup match - * 0 returned if no match - * otherwise number of subgroups matched returned - * match group begin offsets are even elements of sub - * match group end offsets are odd elements of sub - * the matched string is from s+sub[0] up to but not - * including s+sub[1] - */ - -int strgrpmatch(const char *b, const char *p, int *sub, int n, int flags) -{ - register int i; - register char *s; - char *e; - Match_t match; - - s = (char *) b; - match.last_s = e = s + strlen(s); - for (;;) { - match.best.next_s = 0; - match.current.groups = 0; - match.current.beg[0] = 0; - if ((i = grpmatch(&match, 0, s, (char *) p, e, flags)) - || match.best.next_s) { - if (!(flags & STR_RIGHT) || (match.current.next_s == e)) { - if (!i) - match.current = match.best; - match.current.groups++; - match.current.end[0] = match.current.next_s; -#if _DEBUG_MATCH - error(-1, - "match i=%d s=\"%s\" p=\"%s\" flags=%o groups=%d next=\"%s\"", - i, s, p, flags, match.current.groups, - match.current.next_s); -#endif - break; - } - } - if ((flags & STR_LEFT) || s >= e) - return 0; - s++; - } - if ((flags & STR_RIGHT) && match.current.next_s != e) - return 0; - if (!sub) - return 1; - match.current.beg[0] = s; - s = (char *) b; - if (n > match.current.groups) - n = match.current.groups; - for (i = 0; i < n; i++) { - sub[i * 2] = match.current.end[i] ? match.current.beg[i] - s : 0; - sub[i * 2 + 1] = - match.current.end[i] ? match.current.end[i] - s : 0; - } - return n; -} - -/* - * compare the string s with the shell pattern p - * returns 1 for match 0 otherwise - */ - -int strmatch(const char *s, const char *p) -{ - return strgrpmatch(s, p, NiL, 0, STR_MAXIMAL | STR_LEFT | STR_RIGHT); -} - -/* - * leading substring match - * first char after end of substring returned - * 0 returned if no match - * - * OBSOLETE: use strgrpmatch() - */ - -char *strsubmatch(const char *s, const char *p, int flags) -{ - int match[2]; - - return strgrpmatch(s, p, match, 1, - (flags ? STR_MAXIMAL : 0) | STR_LEFT) ? (char *) s + - match[1] : (char *) 0; -} diff --git a/internal/ccall/ast/strton.c b/internal/ccall/ast/strton.c deleted file mode 100644 index 5ec24c0..0000000 --- a/internal/ccall/ast/strton.c +++ /dev/null @@ -1,219 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * AT&T Research - * - * convert string to long integer - * if non-null e will point to first unrecognized char in s - * if basep!=0 it points to the default base on input and - * will point to the explicit base on return - * a default base of 0 will determine the base from the input - * a default base of 1 will determine the base from the input using bb#* - * a base prefix in the string overrides *b - * *b will not be set if the string has no base prefix - * if m>1 and no multipler was specified then the result is multiplied by m - * if m<0 then multipliers are not consumed - * - * integer numbers are of the form: - * - * [sign][base][number[qualifier]][multiplier] - * - * base: nnn# base nnn (no multiplier) - * 0[xX] hex - * 0 octal - * [1-9] decimal - * - * number: [0-9a-zA-Z]* - * - * qualifier: [lL] - * [uU] - * [uU][lL] - * [lL][uU] - * [lL][lL][uU] - * [uU][lL][lL] - * - * multiplier: . pseudo-float (100) + subsequent digits - * [bB] block (512) - * [cC] char (1) - * [gG] giga (1024*1024*1024) - * [kK] kilo (1024) - * [mM] mega (1024*1024) - */ - -#include - -/* For graphviz, only unthreaded */ -#ifdef WIN32_STATIC -#undef vt_threaded 0 -#else -#define vt_threaded 0 -#endif - -#include "sfhdr.h" - -#define QL 01 -#define QU 02 - -long strton(const char *a, char **e, char *basep, int m) -{ - register unsigned char *s = (unsigned char *) a; - register long n; - register int c; - register int base; - register int shift; - register unsigned char *p; - register unsigned char *cv; - int negative; - - if (!basep || (base = *basep) < 0 || base > 64) - base = 0; - while (isspace(*s)) - s++; - if ((negative = (*s == '-')) || *s == '+') - s++; - p = s; - if (base <= 1) { - if ((c = *p++) >= '0' && c <= '9') { - n = c - '0'; - if ((c = *p) >= '0' && c <= '9') { - n = n * 10 + c - '0'; - p++; - } - if (*p == '#') { - if (n >= 2 && n <= 64) { - s = p + 1; - base = n; - } - } else if (base) - base = 0; - else if (*s == '0') { - if ((c = *(s + 1)) == 'x' || c == 'X') { - s += 2; - base = 16; - } else if (c >= '0' && c <= '7') { - s++; - base = 8; - } - } - } - if (basep && base) - *basep = base; - } - if (base >= 2 && base <= SF_RADIX) - m = -1; - else - base = 10; - - /* - * this part transcribed from sfvscanf() - */ - - n = 0; - if (base == 10) { - while ((c = *s++) >= '0' && c <= '9') - n = (n << 3) + (n << 1) + (c - '0'); - } else { - SFCVINIT(); - cv = base <= 36 ? _Sfcv36 : _Sfcv64; - if ((base & ~(base - 1)) == base) { - if (base < 8) - shift = base < 4 ? 1 : 2; - else if (base < 32) - shift = base < 16 ? 3 : 4; - else - shift = base < 64 ? 5 : 6; - while ((c = cv[*s++]) < base) - n = (n << shift) + c; - } else - while ((c = cv[*s++]) < base) - n = (n * base) + c; - c = *(s - 1); - } - if (s > (unsigned char *) (a + 1)) { - /* - * gobble the optional qualifier - */ - - base = 0; - for (;;) { - if (!(base & QL) && (c == 'l' || c == 'L')) { - base |= QL; - c = *++s; - if (c == 'l' || c == 'L') - c = *++s; - continue; - } - if (!(base & QU) && (c == 'u' || c == 'U')) { - base |= QU; - c = *++s; - continue; - } - break; - } - } - - /* - * apply suffix multiplier - */ - - if (m < 0 || s == (unsigned char *) (a + 1)) - s--; - else - switch (c) { - case 'b': - case 'B': - n *= 512; - break; - case 'c': - case 'C': - break; - case 'g': - case 'G': - n *= 1024 * 1024 * 1024; - break; - case 'k': - case 'K': - n *= 1024; - break; - case 'l': - case 'L': - n *= 4; - break; - case 'm': - case 'M': - n *= 1024 * 1024; - break; - case 'q': - case 'Q': - n *= 8; - break; - case 'w': - case 'W': - n *= 2; - break; - case '.': - n *= 100; - for (m = 10; *s >= '0' && *s <= '9'; m /= 10) - n += m * (*s++ - '0'); - break; - default: - s--; - if (m > 1) - n *= m; - break; - } - if (e) - *e = (char *) s; - return negative ? -n : n; -} diff --git a/internal/ccall/build_cgo_hack.go b/internal/ccall/build_cgo_hack.go deleted file mode 100644 index 5aae430..0000000 --- a/internal/ccall/build_cgo_hack.go +++ /dev/null @@ -1,69 +0,0 @@ -// +build required - -package ccall - -// This file exists purely to prevent the golang toolchain from stripping -// away the c source directories and files when `go mod vendor` is used -// to populate a `vendor/` directory of a project depending on `goccy/go-graphviz`. -// -// How it works: -// - every directory which only includes c source files receives a dummy.go file. -// - every directory we want to preserve is included here as a _ import. -// - this file is given a build to exclude it from the regular build. -import ( - // Prevent go tooling from stripping out the c source files. - _ "github.com/goccy/go-graphviz/internal" - _ "github.com/goccy/go-graphviz/internal/ccall/ast" - _ "github.com/goccy/go-graphviz/internal/ccall/cdt" - _ "github.com/goccy/go-graphviz/internal/ccall/cgraph" - _ "github.com/goccy/go-graphviz/internal/ccall/circogen" - _ "github.com/goccy/go-graphviz/internal/ccall/common" - _ "github.com/goccy/go-graphviz/internal/ccall/dotgen" - _ "github.com/goccy/go-graphviz/internal/ccall/edgepaint" - _ "github.com/goccy/go-graphviz/internal/ccall/expr" - _ "github.com/goccy/go-graphviz/internal/ccall/fdpgen" - _ "github.com/goccy/go-graphviz/internal/ccall/glcomp" - _ "github.com/goccy/go-graphviz/internal/ccall/gvc" - _ "github.com/goccy/go-graphviz/internal/ccall/gvpr" - _ "github.com/goccy/go-graphviz/internal/ccall/ingraphs" - _ "github.com/goccy/go-graphviz/internal/ccall/label" - _ "github.com/goccy/go-graphviz/internal/ccall/mingle" - _ "github.com/goccy/go-graphviz/internal/ccall/neatogen" - _ "github.com/goccy/go-graphviz/internal/ccall/ortho" - _ "github.com/goccy/go-graphviz/internal/ccall/osage" - _ "github.com/goccy/go-graphviz/internal/ccall/pack" - _ "github.com/goccy/go-graphviz/internal/ccall/patchwork" - _ "github.com/goccy/go-graphviz/internal/ccall/pathplan" - _ "github.com/goccy/go-graphviz/internal/ccall/rbtree" - _ "github.com/goccy/go-graphviz/internal/ccall/sfdpgen" - _ "github.com/goccy/go-graphviz/internal/ccall/sfio" - _ "github.com/goccy/go-graphviz/internal/ccall/sfio/Sfio_f" - _ "github.com/goccy/go-graphviz/internal/ccall/sparse" - _ "github.com/goccy/go-graphviz/internal/ccall/spine" - _ "github.com/goccy/go-graphviz/internal/ccall/topfish" - _ "github.com/goccy/go-graphviz/internal/ccall/twopigen" - _ "github.com/goccy/go-graphviz/internal/ccall/vmalloc" - _ "github.com/goccy/go-graphviz/internal/ccall/vpsc" - _ "github.com/goccy/go-graphviz/internal/ccall/vpsc/pairingheap" - _ "github.com/goccy/go-graphviz/internal/ccall/xdot" - _ "github.com/goccy/go-graphviz/internal/expat" - _ "github.com/goccy/go-graphviz/internal/plugin/core" - _ "github.com/goccy/go-graphviz/internal/plugin/devil" - _ "github.com/goccy/go-graphviz/internal/plugin/dot_layout" - _ "github.com/goccy/go-graphviz/internal/plugin/gd" - _ "github.com/goccy/go-graphviz/internal/plugin/gdiplus" - _ "github.com/goccy/go-graphviz/internal/plugin/gdk" - _ "github.com/goccy/go-graphviz/internal/plugin/glitz" - _ "github.com/goccy/go-graphviz/internal/plugin/gs" - _ "github.com/goccy/go-graphviz/internal/plugin/gtk" - _ "github.com/goccy/go-graphviz/internal/plugin/lasi" - _ "github.com/goccy/go-graphviz/internal/plugin/ming" - _ "github.com/goccy/go-graphviz/internal/plugin/neato_layout" - _ "github.com/goccy/go-graphviz/internal/plugin/pango" - _ "github.com/goccy/go-graphviz/internal/plugin/poppler" - _ "github.com/goccy/go-graphviz/internal/plugin/quartz" - _ "github.com/goccy/go-graphviz/internal/plugin/rsvg" - _ "github.com/goccy/go-graphviz/internal/plugin/visio" - _ "github.com/goccy/go-graphviz/internal/plugin/webp" - _ "github.com/goccy/go-graphviz/internal/plugin/xlib" -) diff --git a/internal/ccall/builtin.c b/internal/ccall/builtin.c deleted file mode 100644 index 739018f..0000000 --- a/internal/ccall/builtin.c +++ /dev/null @@ -1,277 +0,0 @@ -#include "config.h" -#include "gvplugin.h" -#include "gvplugin_render.h" -#include -#include "_cgo_export.h" - -extern gvplugin_library_t gvplugin_dot_layout_LTX_library; -extern gvplugin_library_t gvplugin_neato_layout_LTX_library; -extern gvplugin_library_t gvplugin_core_LTX_library; -extern gvplugin_library_t gvplugin_go_library; - -lt_symlist_t lt_preloaded_symbols[PRLOADED_SYMBOL_N] = { - { "gvplugin_dot_layout_LTX_library", (void *)(&gvplugin_dot_layout_LTX_library) }, - { "gvplugin_neato_layout_LTX_library", (void*)(&gvplugin_neato_layout_LTX_library) }, - { "gvplugin_core_LTX_library", (void*)(&gvplugin_core_LTX_library) }, - { "gvplugin_go_LTX_library", (void*)(&gvplugin_go_library) }, - { 0, 0 } -}; - -extern gvplugin_installed_t gvdevice_go_types[]; -extern gvplugin_installed_t gvrender_go_types[]; - -static gvplugin_api_t go_apis[] = { - {API_device, gvdevice_go_types}, - {API_render, gvrender_go_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_go_library = { "go", go_apis }; - -typedef enum { FORMAT_PNG, FORMAT_JPG } go_format_type; - -void *call_searchf(Dtsearch_f searchf, Dt_t *a0, void *a1, int a2) { - return searchf(a0, a1, a2); -} - -void *call_memoryf(Dtmemory_f memoryf, Dt_t *a0, void *a1, size_t a2, Dtdisc_t *a3) { - return memoryf(a0, a1, a2, a3); -} - -void *call_makef(Dtmake_f makef, Dt_t *a0, void *a1, Dtdisc_t *a2) { - return makef(a0, a1, a2); -} - -int call_comparf(Dtcompar_f comparf, Dt_t *a0, void *a1, void *a2, Dtdisc_t *a3) { - return comparf(a0, a1, a2, a3); -} - -void call_freef(Dtfree_f freef, Dt_t *a0, void *a1, Dtdisc_t *a2) { - return freef(a0, a1, a2); -} - -unsigned int call_hashf(Dthash_f hashf, Dt_t *a0, void *a1, Dtdisc_t *a2) { - return hashf(a0, a1, a2); -} - -int call_eventf(Dtevent_f eventf, Dt_t *a0, int a1, void *a2, Dtdisc_t *a3) { - return eventf(a0, a1, a2, a3); -} - -static int dtwalk_gocallback(Dt_t *a0, void *a1, void *a2) { - return GoDtwalkCallback(a0, a1, a2); -} - -int call_dtwalk(Dt_t *a0, void *a1) { - return dtwalk(a0, dtwalk_gocallback, a1); -} - -void go_begin_job(GVJ_t * job) -{ - GoBeginJob(job); -} - -void go_end_job(GVJ_t * job) -{ - GoEndJob(job); -} - -void go_begin_graph(GVJ_t * job) -{ - GoBeginGraph(job); -} - -void go_end_graph(GVJ_t * job) -{ - GoEndGraph(job); -} - -void go_begin_layer(GVJ_t * job, char *layername, int layerNum, int numLayers) -{ - GoBeginLayer(job, layername, layerNum, numLayers); -} - -void go_end_layer(GVJ_t * job) -{ - GoEndLayer(job); -} - -void go_begin_page(GVJ_t * job) -{ - GoBeginPage(job); -} - -void go_end_page(GVJ_t * job) -{ - GoEndPage(job); -} - -void go_begin_cluster(GVJ_t * job) -{ - GoBeginCluster(job); -} - -void go_end_cluster(GVJ_t * job) -{ - GoEndCluster(job); -} - -void go_begin_nodes(GVJ_t * job) -{ - GoBeginNodes(job); -} - -void go_end_nodes(GVJ_t * job) -{ - GoEndNodes(job); -} - -void go_begin_edges(GVJ_t * job) -{ - GoBeginEdges(job); -} - -void go_end_edges(GVJ_t * job) -{ - GoEndEdges(job); -} - -void go_begin_node(GVJ_t * job) -{ - GoBeginNode(job); -} - -void go_end_node(GVJ_t * job) -{ - GoEndNode(job); -} - -void go_begin_edge(GVJ_t * job) -{ - GoBeginEdge(job); -} - -void go_end_edge(GVJ_t * job) -{ - GoEndEdge(job); -} - -void go_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target, char *id) -{ - GoBeginAnchor(job, href, tooltip, target, id); -} - -void go_end_anchor(GVJ_t * job) -{ - GoEndAnchor(job); -} - -void go_begin_label(GVJ_t * job, label_type type) -{ - GoBeginLabel(job, type); -} - -void go_end_label(GVJ_t * job) -{ - GoEndLabel(job); -} - -void go_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - GoTextspan(job, p, span); -} - -void go_resolve_color(GVJ_t * job, gvcolor_t * color) -{ - GoResolveColor(job, color->u.rgba[0], color->u.rgba[1], color->u.rgba[2], color->u.rgba[3]); -} - -void go_ellipse(GVJ_t * job, pointf *A, int filled) -{ - GoEllipse(job, A[0], A[1], filled); -} - -void go_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - GoPolygon(job, A, n, filled); -} - -void go_beziercurve(GVJ_t *job, pointf *A, int n, int arrow_at_start, int arrow_at_end, int ext) -{ - GoBeziercurve(job, A, n, arrow_at_start, arrow_at_end, ext); -} - -void go_polyline(GVJ_t *job, pointf *A, int n) -{ - GoPolyline(job, A, n); -} - -void go_comment(GVJ_t * job, char *comment) -{ - GoComment(job, comment); -} - -void go_library_shape(GVJ_t * job, char *name, pointf * A, int n, int filled) -{ - GoLibraryShape(job, name, A, n, filled); -} - -static gvrender_engine_t go_engine = { - go_begin_job, - go_end_job, - go_begin_graph, - go_end_graph, - go_begin_layer, - go_end_layer, - go_begin_page, - go_end_page, - go_begin_cluster, - go_end_cluster, - go_begin_nodes, - go_end_nodes, - go_begin_edges, - go_end_edges, - go_begin_node, - go_end_node, - go_begin_edge, - go_end_edge, - go_begin_anchor, - go_end_anchor, - go_begin_label, - go_end_label, - go_textspan, - go_resolve_color, - go_ellipse, - go_polygon, - go_beziercurve, - go_polyline, - go_comment, - go_library_shape, -}; - -static gvrender_features_t render_features_go = { - GVRENDER_Y_GOES_DOWN | GVRENDER_DOES_TRANSFORM, /* flags */ - 4., /* default pad - graph units */ - 0, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -static gvdevice_features_t go_device_features = { - GVDEVICE_BINARY_FORMAT | GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* typical monitor dpi */ -}; - -gvplugin_installed_t gvrender_go_types[] = { - {FORMAT_PNG, "png", 1, &go_engine, &render_features_go}, - {FORMAT_JPG, "jpg", 1, &go_engine, &render_features_go}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_go_types[] = { - {FORMAT_PNG, "png:png", 1, NULL, &go_device_features}, - {FORMAT_JPG, "jpg:jpg", 1, NULL, &go_device_features}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/ccall/ccall.go b/internal/ccall/ccall.go deleted file mode 100644 index 0d8afc8..0000000 --- a/internal/ccall/ccall.go +++ /dev/null @@ -1,275 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -DGVLIBDIR=graphviz -#cgo CFLAGS: -Icdt -#cgo CFLAGS: -Icommon -#cgo CFLAGS: -Igvc -#cgo CFLAGS: -Ipathplan -#cgo CFLAGS: -Icgraph -#cgo CFLAGS: -Ifdpgen -#cgo CFLAGS: -Isfdpgen -#cgo CFLAGS: -Ixdot -#cgo CFLAGS: -Ilabel -#cgo CFLAGS: -Ipack -#cgo CFLAGS: -Iortho -#cgo CFLAGS: -Iosage -#cgo CFLAGS: -Ineatogen -#cgo CFLAGS: -Isparse -#cgo CFLAGS: -Icircogen -#cgo CFLAGS: -Irbtree -#cgo CFLAGS: -Ipatchwork -#cgo CFLAGS: -Itwopigen -#cgo CFLAGS: -I../ -#cgo CFLAGS: -I../libltdl -#cgo CFLAGS: -Wno-unused-result -Wno-format -Wno-pointer-to-int-cast -Wno-attributes -Wno-format-security -#cgo LDFLAGS: -lm -#include "config.h" -#include "gvc.h" -#include "color.h" -#include "gvcjob.h" -*/ -import "C" - -var ( - BeginJob func(*GVJ) - EndJob func(*GVJ) - BeginGraph func(*GVJ) - EndGraph func(*GVJ) - BeginLayer func(*GVJ, string, int, int) - EndLayer func(*GVJ) - BeginPage func(*GVJ) - EndPage func(*GVJ) - BeginCluster func(*GVJ) - EndCluster func(*GVJ) - BeginNodes func(*GVJ) - EndNodes func(*GVJ) - BeginEdges func(*GVJ) - EndEdges func(*GVJ) - BeginNode func(*GVJ) - EndNode func(*GVJ) - BeginEdge func(*GVJ) - EndEdge func(*GVJ) - BeginAnchor func(*GVJ, string, string, string, string) - EndAnchor func(*GVJ) - BeginLabel func(*GVJ, int) - EndLabel func(*GVJ) - Textspan func(*GVJ, Pointf, *TextSpan) - ResolveColor func(*GVJ, uint, uint, uint, uint) - Ellipse func(*GVJ, Pointf, Pointf, int) - Polygon func(*GVJ, []Pointf, int) - Beziercurve func(*GVJ, []Pointf, int, int, int) - Polyline func(*GVJ, []Pointf) - Comment func(*GVJ, string) - LibraryShape func(*GVJ, string, []Pointf, int) -) - -//export GoBeginJob -func GoBeginJob(job *C.GVJ_t) { - if BeginJob != nil { - BeginJob(ToGVJ(job)) - } -} - -//export GoEndJob -func GoEndJob(job *C.GVJ_t) { - if EndJob != nil { - EndJob(ToGVJ(job)) - } -} - -//export GoBeginGraph -func GoBeginGraph(job *C.GVJ_t) { - if BeginGraph != nil { - BeginGraph(ToGVJ(job)) - } -} - -//export GoEndGraph -func GoEndGraph(job *C.GVJ_t) { - if EndGraph != nil { - EndGraph(ToGVJ(job)) - } -} - -//export GoBeginLayer -func GoBeginLayer(job *C.GVJ_t, layername *C.char, layerNum C.int, numLayers C.int) { - if BeginLayer != nil { - BeginLayer(ToGVJ(job), C.GoString(layername), int(layerNum), int(numLayers)) - } -} - -//export GoEndLayer -func GoEndLayer(job *C.GVJ_t) { - if EndLayer != nil { - EndLayer(ToGVJ(job)) - } -} - -//export GoBeginPage -func GoBeginPage(job *C.GVJ_t) { - if BeginPage != nil { - BeginPage(ToGVJ(job)) - } -} - -//export GoEndPage -func GoEndPage(job *C.GVJ_t) { - if EndPage != nil { - EndPage(ToGVJ(job)) - } -} - -//export GoBeginCluster -func GoBeginCluster(job *C.GVJ_t) { - if BeginCluster != nil { - BeginCluster(ToGVJ(job)) - } -} - -//export GoEndCluster -func GoEndCluster(job *C.GVJ_t) { - if EndCluster != nil { - EndCluster(ToGVJ(job)) - } -} - -//export GoBeginNodes -func GoBeginNodes(job *C.GVJ_t) { - if BeginNodes != nil { - BeginNodes(ToGVJ(job)) - } -} - -//export GoEndNodes -func GoEndNodes(job *C.GVJ_t) { - if EndNodes != nil { - EndNodes(ToGVJ(job)) - } -} - -//export GoBeginEdges -func GoBeginEdges(job *C.GVJ_t) { - if BeginEdges != nil { - BeginEdges(ToGVJ(job)) - } -} - -//export GoEndEdges -func GoEndEdges(job *C.GVJ_t) { - if EndEdges != nil { - EndEdges(ToGVJ(job)) - } -} - -//export GoBeginNode -func GoBeginNode(job *C.GVJ_t) { - if BeginNode != nil { - BeginNode(ToGVJ(job)) - } -} - -//export GoEndNode -func GoEndNode(job *C.GVJ_t) { - if EndNode != nil { - EndNode(ToGVJ(job)) - } -} - -//export GoBeginEdge -func GoBeginEdge(job *C.GVJ_t) { - if BeginEdge != nil { - BeginEdge(ToGVJ(job)) - } -} - -//export GoEndEdge -func GoEndEdge(job *C.GVJ_t) { - if EndEdge != nil { - EndEdge(ToGVJ(job)) - } -} - -//export GoBeginAnchor -func GoBeginAnchor(job *C.GVJ_t, href, tooltip, target, id *C.char) { - if BeginAnchor != nil { - BeginAnchor(ToGVJ(job), C.GoString(href), C.GoString(tooltip), C.GoString(target), C.GoString(id)) - } -} - -//export GoEndAnchor -func GoEndAnchor(job *C.GVJ_t) { - if EndAnchor != nil { - EndAnchor(ToGVJ(job)) - } -} - -//export GoBeginLabel -func GoBeginLabel(job *C.GVJ_t, typ C.int) { - if BeginLabel != nil { - BeginLabel(ToGVJ(job), int(typ)) - } -} - -//export GoEndLabel -func GoEndLabel(job *C.GVJ_t) { - if EndLabel != nil { - EndLabel(ToGVJ(job)) - } -} - -//export GoTextspan -func GoTextspan(job *C.GVJ_t, p C.pointf, span *C.textspan_t) { - if Textspan != nil { - Textspan(ToGVJ(job), ToPointf(p), ToTextSpan(span)) - } -} - -//export GoResolveColor -func GoResolveColor(job *C.GVJ_t, r, g, b, a C.uint) { - if ResolveColor != nil { - ResolveColor(ToGVJ(job), uint(r), uint(g), uint(b), uint(a)) - } -} - -//export GoEllipse -func GoEllipse(job *C.GVJ_t, a0, a1 C.pointf, filled C.int) { - if Ellipse != nil { - Ellipse(ToGVJ(job), ToPointf(a0), ToPointf(a1), int(filled)) - } -} - -//export GoPolygon -func GoPolygon(job *C.GVJ_t, a *C.pointf, n, filled C.int) { - if Polygon != nil { - Polygon(ToGVJ(job), ToPointsf(a, n), int(filled)) - } -} - -//export GoBeziercurve -func GoBeziercurve(job *C.GVJ_t, a *C.pointf, n, arrowAtStart, arrowAtEnd, ext C.int) { - if Beziercurve != nil { - Beziercurve(ToGVJ(job), ToPointsf(a, n), int(arrowAtStart), int(arrowAtEnd), int(ext)) - } -} - -//export GoPolyline -func GoPolyline(job *C.GVJ_t, a *C.pointf, n C.int) { - if Polyline != nil { - Polyline(ToGVJ(job), ToPointsf(a, n)) - } -} - -//export GoComment -func GoComment(job *C.GVJ_t, comment *C.char) { - if Comment != nil { - Comment(ToGVJ(job), C.GoString(comment)) - } -} - -//export GoLibraryShape -func GoLibraryShape(job *C.GVJ_t, name *C.char, a *C.pointf, n, filled C.int) { - if LibraryShape != nil { - LibraryShape(ToGVJ(job), C.GoString(name), ToPointsf(a, n), int(filled)) - } -} diff --git a/internal/ccall/cdt.c b/internal/ccall/cdt.c deleted file mode 100644 index 8c0c091..0000000 --- a/internal/ccall/cdt.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "cdt/dtclose.c" -#include "cdt/dtdisc.c" -#include "cdt/dtextract.c" -#include "cdt/dtflatten.c" -#include "cdt/dthash.c" -#include "cdt/dtlist.c" -#include "cdt/dtmethod.c" -#include "cdt/dtopen.c" -#include "cdt/dtrenew.c" -#include "cdt/dtrestore.c" -#include "cdt/dtsize.c" -#include "cdt/dtstat.c" -#include "cdt/dtstrhash.c" -#include "cdt/dttree.c" -#include "cdt/dttreeset.c" -#include "cdt/dtview.c" -#include "cdt/dtwalk.c" diff --git a/internal/ccall/cdt.go b/internal/ccall/cdt.go deleted file mode 100644 index e69853f..0000000 --- a/internal/ccall/cdt.go +++ /dev/null @@ -1,594 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -DGVLIBDIR=graphviz -#cgo CFLAGS: -fcommon -#cgo CFLAGS: -Icdt -#cgo CFLAGS: -Icommon -#cgo CFLAGS: -Igvc -#cgo CFLAGS: -Ipathplan -#cgo CFLAGS: -Icgraph -#cgo CFLAGS: -Ifdpgen -#cgo CFLAGS: -Isfdpgen -#cgo CFLAGS: -Ixdot -#cgo CFLAGS: -Ilabel -#cgo CFLAGS: -Ipack -#cgo CFLAGS: -Iortho -#cgo CFLAGS: -Iosage -#cgo CFLAGS: -Ineatogen -#cgo CFLAGS: -Isparse -#cgo CFLAGS: -Icircogen -#cgo CFLAGS: -Irbtree -#cgo CFLAGS: -Ipatchwork -#cgo CFLAGS: -Itwopigen -#cgo CFLAGS: -I../ -#cgo CFLAGS: -I../libltdl -#cgo CFLAGS: -Wno-unused-result -Wno-format -Wno-pointer-to-int-cast -Wno-attributes -#include "config.h" -#include "cdt.h" - -extern void *call_searchf(Dtsearch_f searchf, Dt_t *a0, void *a1, int a2); -extern void *call_memoryf(Dtmemory_f memoryf, Dt_t *a0, void *a1, size_t a2, Dtdisc_t *a3); -extern void *call_makef(Dtmake_f makef, Dt_t *a0, void *a1, Dtdisc_t *a2); -extern int call_comparf(Dtcompar_f comparf, Dt_t *a0, void *a1, void *a2, Dtdisc_t *a3); -extern void call_freef(Dtfree_f freef, Dt_t *a0, void *a1, Dtdisc_t *a2); -extern unsigned int call_hashf(Dthash_f hashf, Dt_t *a0, void *a1, Dtdisc_t *a2); -extern int call_eventf(Dtevent_f eventf, Dt_t *a0, int a1, void *a2, Dtdisc_t *a3); -extern int call_dtwalk(Dt_t *a0, void *a1); - -*/ -import "C" -import ( - "reflect" - "unsafe" -) - -const wordSize = 4 << (^uintptr(0) >> 63) - -type Dtlink struct { - c *C.Dtlink_t -} - -type Dthold struct { - c *C.Dthold_t -} - -type Dtdisc struct { - c *C.Dtdisc_t - makef Dtmake - freef Dtfree - comparef Dtcompare - hashf Dthash - memoryf Dtmemory - eventf Dtevent -} - -type Dtmethod struct { - c *C.Dtmethod_t - search Dtsearch -} - -type Dtdata struct { - c *C.Dtdata_t -} - -type Dict struct { - c *C.Dict_t - search Dtsearch - memory Dtmemory -} - -type Dtstat struct { - c *C.Dtstat_t -} - -type Dtsearch func(*Dict, unsafe.Pointer, int) unsafe.Pointer -type Dtmake func(*Dict, unsafe.Pointer, *Dtdisc) unsafe.Pointer -type Dtmemory func(*Dict, unsafe.Pointer, uint, *Dtdisc) unsafe.Pointer -type Dtfree func(*Dict, unsafe.Pointer, *Dtdisc) -type Dtcompare func(*Dict, unsafe.Pointer, unsafe.Pointer, *Dtdisc) int -type Dthash func(*Dict, unsafe.Pointer, *Dtdisc) uint -type Dtevent func(*Dict, int, unsafe.Pointer, *Dtdisc) int - -func ToDtlink(c *C.Dtlink_t) *Dtlink { - if c == nil { - return nil - } - return &Dtlink{c: c} -} - -func (g *Dtlink) C() *C.Dtlink_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dtlink) Right() *Dtlink { - return ToDtlink(g.c.right) -} - -func (g *Dtlink) SetRight(v *Dtlink) { - g.c.right = v.c -} - -func (g *Dtlink) Hash() uint { - hash := (*C.uint)(unsafe.Pointer(&g.c.hl)) - return uint(*hash) -} - -func (g *Dtlink) SetHash(v uint) { - hash := (*C.uint)(unsafe.Pointer(&g.c.hl)) - *hash = C.uint(v) -} - -func (g *Dtlink) Left() *Dtlink { - link := (*C.Dtlink_t)(unsafe.Pointer(&g.c.hl)) - return ToDtlink(link) -} - -func (g *Dtlink) SetLeft(v *Dtlink) { - g.c.hl = *(*[wordSize]byte)(unsafe.Pointer(v.c)) -} - -func ToDthold(c *C.Dthold_t) *Dthold { - if c == nil { - return nil - } - return &Dthold{c: c} -} - -func (g *Dthold) C() *C.Dthold_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dthold) Hdr() *Dtlink { - return ToDtlink(&g.c.hdr) -} - -func (g *Dthold) SetHdr(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.hdr = *c -} - -func (g *Dthold) Obj() unsafe.Pointer { - return g.c.obj -} - -func (g *Dthold) SetObj(v unsafe.Pointer) { - g.c.obj = v -} - -func ToDtmethod(c *C.Dtmethod_t) *Dtmethod { - return &Dtmethod{c: c} -} - -func (g *Dtmethod) C() *C.Dtmethod_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dtmethod) Search() Dtsearch { - if g.search != nil { - return g.search - } - return func(d *Dict, o unsafe.Pointer, opt int) unsafe.Pointer { - return C.call_searchf(g.c.searchf, d.c, o, C.int(opt)) - } -} - -func (g *Dtmethod) SetSearch(v Dtsearch) { - g.search = v -} - -func (g *Dtmethod) Type() int { - return int(g.c._type) -} - -func (g *Dtmethod) SetType(v int) { - g.c._type = C.int(v) -} - -func ToDtdata(c *C.Dtdata_t) *Dtdata { - if c == nil { - return nil - } - return &Dtdata{c: c} -} - -func (g *Dtdata) C() *C.Dtdata_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dtdata) Type() int { - return int(g.c._type) -} - -func (g *Dtdata) SetType(v int) { - g.c._type = C.int(v) -} - -func (g *Dtdata) Here() *Dtlink { - return ToDtlink(g.c.here) -} - -func (g *Dtdata) SetHere(v *Dtlink) { - g.c.here = v.c -} - -func (g *Dtdata) Htab() []*Dtlink { - var htab []*Dtlink - p := (*reflect.SliceHeader)(unsafe.Pointer(&htab)) - p.Cap = int(g.c.ntab) - p.Len = int(g.c.ntab) - p.Data = uintptr(unsafe.Pointer(&g.c.hh)) - return htab -} - -func (g *Dtdata) SetHtab(v []*Dtlink) { - header := (*reflect.SliceHeader)(unsafe.Pointer(&v)) - g.c.hh = *(*[wordSize]byte)(unsafe.Pointer(header.Data)) -} - -func (g *Dtdata) Head() *Dtlink { - link := (*C.Dtlink_t)(unsafe.Pointer(&g.c.hh)) - return ToDtlink(link) -} - -func (g *Dtdata) SetHead(v *Dtlink) { - g.c.hh = *(*[wordSize]byte)(unsafe.Pointer(v.c)) -} - -func (g *Dtdata) Ntab() int { - return int(g.c.ntab) -} - -func (g *Dtdata) SetNtab(v int) { - g.c.ntab = C.int(v) -} - -func (g *Dtdata) Size() int { - return int(g.c.size) -} - -func (g *Dtdata) SetSize(v int) { - g.c.size = C.int(v) -} - -func (g *Dtdata) Loop() int { - return int(g.c.loop) -} - -func (g *Dtdata) SetLoop(v int) { - g.c.loop = C.int(v) -} - -func (g *Dtdata) Minp() int { - return int(g.c.minp) -} - -func (g *Dtdata) SetMinp(v int) { - g.c.minp = C.int(v) -} - -func ToDtdisc(c *C.Dtdisc_t) *Dtdisc { - if c == nil { - return nil - } - return &Dtdisc{c: c} -} - -func (g *Dtdisc) C() *C.Dtdisc_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dtdisc) Key() int { - return int(g.c.key) -} - -func (g *Dtdisc) SetKey(v int) { - g.c.key = C.int(v) -} - -func (g *Dtdisc) Size() int { - return int(g.c.size) -} - -func (g *Dtdisc) SetSize(v int) { - g.c.size = C.int(v) -} - -func (g *Dtdisc) Link() int { - return int(g.c.link) -} - -func (g *Dtdisc) SetLink(v int) { - g.c.link = C.int(v) -} - -func (g *Dtdisc) Make() Dtmake { - if g.makef != nil { - return g.makef - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 *Dtdisc) unsafe.Pointer { - return C.call_makef(g.c.makef, a0.c, a1, a2.c) - } -} - -func (g *Dtdisc) Memory() Dtmemory { - if g.memoryf != nil { - return g.memoryf - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 uint, a3 *Dtdisc) unsafe.Pointer { - return C.call_memoryf(g.c.memoryf, a0.c, a1, C.size_t(a2), a3.c) - } -} - -func (g *Dtdisc) Event() Dtevent { - if g.eventf != nil { - return g.eventf - } - return func(a0 *Dict, a1 int, a2 unsafe.Pointer, a3 *Dtdisc) int { - return int(C.call_eventf(g.c.eventf, a0.c, C.int(a1), a2, a3.c)) - } -} - -func (g *Dtdisc) Free() Dtfree { - if g.freef != nil { - return g.freef - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 *Dtdisc) { - C.call_freef(g.c.freef, a0.c, a1, a2.c) - } -} - -func (g *Dtdisc) Compare() Dtcompare { - if g.comparef != nil { - return g.comparef - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 unsafe.Pointer, a3 *Dtdisc) int { - return int(C.call_comparf(g.c.comparf, a0.c, a1, a2, a3.c)) - } -} - -func (g *Dtdisc) Hash() Dthash { - if g.hashf != nil { - return g.hashf - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 *Dtdisc) uint { - return uint(C.call_hashf(g.c.hashf, a0.c, a1, a2.c)) - } -} - -func (g *Dict) C() *C.Dict_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dict) Search() Dtsearch { - if g.search != nil { - return g.search - } - return func(d *Dict, o unsafe.Pointer, opt int) unsafe.Pointer { - return C.call_searchf(g.c.searchf, d.c, o, C.int(opt)) - } -} - -func (g *Dict) Disc() *Dtdisc { - return ToDtdisc(g.c.disc) -} - -func (g *Dict) SetDisc(v *Dtdisc) { - g.c.disc = v.c -} - -func (g *Dict) Data() *Dtdata { - return ToDtdata(g.c.data) -} - -func (g *Dict) SetData(v *Dtdata) { - g.c.data = v.c -} - -func (g *Dict) Memory() Dtmemory { - if g.memory != nil { - return g.memory - } - return func(a0 *Dict, a1 unsafe.Pointer, a2 uint, a3 *Dtdisc) unsafe.Pointer { - return C.call_memoryf(g.c.memoryf, a0.c, a1, C.size_t(a2), a3.c) - } -} - -func (g *Dict) Meth() *Dtmethod { - return ToDtmethod(g.c.meth) -} - -func (g *Dict) SetMeth(v *Dtmethod) { - g.c.meth = v.c -} - -func (g *Dict) Type() int { - return int(g.c._type) -} - -func (g *Dict) SetType(v int) { - g.c._type = C.int(v) -} - -func (g *Dict) Nview() int { - return int(g.c.nview) -} - -func (g *Dict) SetNview(v int) { - g.c.nview = C.int(v) -} - -func (g *Dict) View() *Dict { - return ToDict(g.c.view) -} - -func (g *Dict) SetView(v *Dict) { - g.c.view = v.c -} - -func (g *Dict) Walk() *Dict { - return ToDict(g.c.walk) -} - -func (g *Dict) SetWalk(v *Dict) { - g.c.walk = v.c -} - -func (g *Dict) User() unsafe.Pointer { - return g.c.user -} - -func (g *Dict) SetUser(v unsafe.Pointer) { - g.c.user = v -} - -func ToDict(c *C.Dict_t) *Dict { - if c == nil { - return nil - } - return &Dict{c: c} -} - -func ToDtstat(c *C.Dtstat_t) *Dtstat { - if c == nil { - return nil - } - return &Dtstat{c: c} -} - -func (g *Dtstat) C() *C.Dtstat_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Dtstat) DtMeth() int { - return int(g.c.dt_meth) -} - -func (g *Dtstat) SetDtMeth(v int) { - g.c.dt_meth = C.int(v) -} - -func (g *Dtstat) DtSize() int { - return int(g.c.dt_size) -} - -func (g *Dtstat) DtSetSize(v int) { - g.c.dt_size = C.int(v) -} - -func (g *Dtstat) DtN() int { - return int(g.c.dt_n) -} - -func (g *Dtstat) SetDtN(v int) { - g.c.dt_n = C.int(v) -} - -func (g *Dtstat) DtMax() int { - return int(g.c.dt_max) -} - -func (g *Dtstat) SetDtMax(v int) { - g.c.dt_max = C.int(v) -} - -func (g *Dtstat) DtCount() []int { - var count []int - p := (*reflect.SliceHeader)(unsafe.Pointer(&count)) - p.Cap = int(g.c.dt_size) - p.Len = int(g.c.dt_size) - p.Data = uintptr(unsafe.Pointer(g.c.dt_count)) - return count -} - -func (g *Dtstat) SetDtCount(v []int) { - header := (*reflect.SliceHeader)(unsafe.Pointer(&v)) - g.c.dt_count = (*C.int)(unsafe.Pointer(header.Data)) -} - -func Dtopen(a0 *Dtdisc, a1 *Dtmethod) *Dict { - return ToDict(C.dtopen(a0.c, a1.c)) -} - -func Dtclose(a0 *Dict) int { - return int(C.dtclose(a0.c)) -} - -func Dtview(a0 *Dict, a1 *Dict) *Dict { - return ToDict(C.dtview(a0.c, a1.c)) -} - -func Dtdiscf(a0 *Dict, a1 *Dtdisc, a2 int) *Dtdisc { - return ToDtdisc(C.dtdisc(a0.c, a1.c, C.int(a2))) -} - -func Dtmethodf(a0 *Dict, a1 *Dtmethod) *Dtmethod { - return ToDtmethod(C.dtmethod(a0.c, a1.c)) -} - -func Dtflatten(a0 *Dict) *Dtlink { - return ToDtlink(C.dtflatten(a0.c)) -} - -func Dtextract(a0 *Dict) *Dtlink { - return ToDtlink(C.dtextract(a0.c)) -} - -func Dtrestore(a0 *Dict, a1 *Dtlink) int { - return int(C.dtrestore(a0.c, a1.c)) -} - -func Dttreeset(a0 *Dict, a1 int, a2 int) int { - return int(C.dttreeset(a0.c, C.int(a1), C.int(a2))) -} - -//export GoDtwalkCallback -func GoDtwalkCallback(a0 *C.Dict_t, a1 unsafe.Pointer, a2 unsafe.Pointer) int { - callback := *(*func(a0 *Dict, a1 unsafe.Pointer, a2 unsafe.Pointer) int)(a0.user) - return callback(ToDict(a0), a1, a2) -} - -func Dtwalk(a0 *Dict, a1 func(a0 *Dict, a1 unsafe.Pointer, a2 unsafe.Pointer) int, a2 unsafe.Pointer) int { - a0.SetUser(unsafe.Pointer(&a1)) - return int(C.call_dtwalk(a0.c, a2)) -} - -func Dtrenew(a0 *Dict, a1 unsafe.Pointer) unsafe.Pointer { - return C.dtrenew(a0.c, a1) -} - -func Dtsize(a0 *Dict) int { - return int(C.dtsize(a0.c)) -} - -func Dtstatf(a0 *Dict, a1 *Dtstat, a2 int) int { - return int(C.dtstat(a0.c, a1.c, C.int(a2))) -} - -func Dtstrhash(a0 uint, a1 unsafe.Pointer, a2 int) uint { - return uint(C.dtstrhash(C.uint(a0), a1, C.int(a2))) -} diff --git a/internal/ccall/cdt/cdt.h b/internal/ccall/cdt/cdt.h deleted file mode 100644 index cac45fa..0000000 --- a/internal/ccall/cdt/cdt.h +++ /dev/null @@ -1,293 +0,0 @@ -#ifndef _CDT_H -#define _CDT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Public interface for the dictionary library -** -** Written by Kiem-Phong Vo -*/ - -#define CDT_VERSION 20050420L - -#include /* size_t */ -#include - -#ifdef _WIN32 -#undef __EXPORT__ -#undef __IMPORT__ -#define __EXPORT__ __declspec (dllexport) -#define __IMPORT__ __declspec (dllimport) -#endif - -typedef struct _dtlink_s Dtlink_t; -typedef struct _dthold_s Dthold_t; -typedef struct _dtdisc_s Dtdisc_t; -typedef struct _dtmethod_s Dtmethod_t; -typedef struct _dtdata_s Dtdata_t; -typedef struct _dt_s Dt_t; -typedef struct _dt_s Dict_t; /* for libdict compatibility */ -typedef struct _dtstat_s Dtstat_t; -typedef void* (*Dtmemory_f)(Dt_t*,void*,size_t,Dtdisc_t*); -typedef void* (*Dtsearch_f)(Dt_t*,void*,int); -typedef void* (*Dtmake_f)(Dt_t*,void*,Dtdisc_t*); -typedef void (*Dtfree_f)(Dt_t*,void*,Dtdisc_t*); -typedef int (*Dtcompar_f)(Dt_t*,void*,void*,Dtdisc_t*); -typedef unsigned int (*Dthash_f)(Dt_t*,void*,Dtdisc_t*); -typedef int (*Dtevent_f)(Dt_t*,int,void*,Dtdisc_t*); - -struct _dtlink_s -{ Dtlink_t* right; /* right child */ - union - { unsigned int _hash; /* hash value */ - Dtlink_t* _left; /* left child */ - } hl; -}; - -/* private structure to hold an object */ -struct _dthold_s -{ Dtlink_t hdr; /* header */ - void* obj; /* user object */ -}; - -/* method to manipulate dictionary structure */ -struct _dtmethod_s -{ Dtsearch_f searchf; /* search function */ - int type; /* type of operation */ -}; - -/* stuff that may be in shared memory */ -struct _dtdata_s -{ int type; /* type of dictionary */ - Dtlink_t* here; /* finger to last search element */ - union - { Dtlink_t** _htab; /* hash table */ - Dtlink_t* _head; /* linked list */ - } hh; - int ntab; /* number of hash slots */ - int size; /* number of objects */ - int loop; /* number of nested loops */ - int minp; /* min path before splay, always even */ - /* for hash dt, > 0: fixed table size */ -}; - -/* structure to hold methods that manipulate an object */ -struct _dtdisc_s -{ int key; /* where the key begins in an object */ - int size; /* key size and type */ - int link; /* offset to Dtlink_t field */ - Dtmake_f makef; /* object constructor */ - Dtfree_f freef; /* object destructor */ - Dtcompar_f comparf;/* to compare two objects */ - Dthash_f hashf; /* to compute hash value of an object */ - Dtmemory_f memoryf;/* to allocate/free memory */ - Dtevent_f eventf; /* to process events */ -}; - -#define DTDISC(dc,ky,sz,lk,mkf,frf,cmpf,hshf,memf,evf) \ - ( (dc)->key = (ky), (dc)->size = (sz), (dc)->link = (lk), \ - (dc)->makef = (mkf), (dc)->freef = (frf), \ - (dc)->comparf = (cmpf), (dc)->hashf = (hshf), \ - (dc)->memoryf = (memf), (dc)->eventf = (evf) ) - -/* the dictionary structure itself */ -struct _dt_s -{ Dtsearch_f searchf;/* search function */ - Dtdisc_t* disc; /* method to manipulate objs */ - Dtdata_t* data; /* sharable data */ - Dtmemory_f memoryf;/* function to alloc/free memory */ - Dtmethod_t* meth; /* dictionary method */ - int type; /* type information */ - int nview; /* number of parent view dictionaries */ - Dt_t* view; /* next on viewpath */ - Dt_t* walk; /* dictionary being walked */ - void* user; /* for user's usage */ -}; - -/* structure to get status of a dictionary */ -struct _dtstat_s -{ int dt_meth; /* method type */ - int dt_size; /* number of elements */ - int dt_n; /* number of chains or levels */ - int dt_max; /* max size of a chain or a level */ - int* dt_count; /* counts of chains or levels by size */ -}; - -/* flag set if the last search operation actually found the object */ -#define DT_FOUND 0100000 - -/* supported storage methods */ -#define DT_SET 0000001 /* set with unique elements */ -#define DT_BAG 0000002 /* multiset */ -#define DT_OSET 0000004 /* ordered set (self-adjusting tree) */ -#define DT_OBAG 0000010 /* ordered multiset */ -#define DT_LIST 0000020 /* linked list */ -#define DT_STACK 0000040 /* stack: insert/delete at top */ -#define DT_QUEUE 0000100 /* queue: insert at top, delete at tail */ -#define DT_DEQUE 0000200 /* deque: insert at top, append at tail */ -#define DT_METHODS 0000377 /* all currently supported methods */ - -/* asserts to dtdisc() */ -#define DT_SAMECMP 0000001 /* compare methods equivalent */ -#define DT_SAMEHASH 0000002 /* hash methods equivalent */ - -/* types of search */ -#define DT_INSERT 0000001 /* insert object if not found */ -#define DT_DELETE 0000002 /* delete object if found */ -#define DT_SEARCH 0000004 /* look for an object */ -#define DT_NEXT 0000010 /* look for next element */ -#define DT_PREV 0000020 /* find previous element */ -#define DT_RENEW 0000040 /* renewing an object */ -#define DT_CLEAR 0000100 /* clearing all objects */ -#define DT_FIRST 0000200 /* get first object */ -#define DT_LAST 0000400 /* get last object */ -#define DT_MATCH 0001000 /* find object matching key */ -#define DT_VSEARCH 0002000 /* search using internal representation */ -#define DT_ATTACH 0004000 /* attach an object to the dictionary */ -#define DT_DETACH 0010000 /* detach an object from the dictionary */ -#define DT_APPEND 0020000 /* used on Dtlist to append an object */ - -/* events */ -#define DT_OPEN 1 /* a dictionary is being opened */ -#define DT_CLOSE 2 /* a dictionary is being closed */ -#define DT_DISC 3 /* discipline is about to be changed */ -#define DT_METH 4 /* method is about to be changed */ -#define DT_ENDOPEN 5 /* dtopen() is done */ -#define DT_ENDCLOSE 6 /* dtclose() is done */ -#define DT_HASHSIZE 7 /* setting hash table size */ - -/* public data */ -#if defined(_BLD_cdt) && defined(__EXPORT__) -#define extern -#endif -#if !defined(_BLD_cdt) && defined(__IMPORT__) -#define extern -#endif - -extern Dtmethod_t* Dtset; -extern Dtmethod_t* Dtbag; -extern Dtmethod_t* Dtoset; -extern Dtmethod_t* Dtobag; -extern Dtmethod_t* Dtlist; -extern Dtmethod_t* Dtstack; -extern Dtmethod_t* Dtqueue; -extern Dtmethod_t* Dtdeque; - -/* compatibility stuff; will go away */ -#ifndef KPVDEL -extern Dtmethod_t* Dtorder; -extern Dtmethod_t* Dttree; -extern Dtmethod_t* Dthash; -extern Dtmethod_t _Dttree; -extern Dtmethod_t _Dthash; -extern Dtmethod_t _Dtlist; -extern Dtmethod_t _Dtqueue; -extern Dtmethod_t _Dtstack; -#endif - -#undef extern - -/* public functions */ -#if defined(_BLD_cdt) && defined(__EXPORT__) -#define extern -#endif - -extern Dt_t* dtopen(Dtdisc_t*, Dtmethod_t*); -extern int dtclose(Dt_t*); -extern Dt_t* dtview(Dt_t*, Dt_t*); -extern Dtdisc_t* dtdisc(Dt_t* dt, Dtdisc_t*, int); -extern Dtmethod_t* dtmethod(Dt_t*, Dtmethod_t*); - -extern Dtlink_t* dtflatten(Dt_t*); -extern Dtlink_t* dtextract(Dt_t*); -extern int dtrestore(Dt_t*, Dtlink_t*); - -extern int dttreeset(Dt_t*, int, int); - -extern int dtwalk(Dt_t*, int(*)(Dt_t*,void*,void*), void*); - -extern void* dtrenew(Dt_t*, void*); - -extern int dtsize(Dt_t*); -extern int dtstat(Dt_t*, Dtstat_t*, int); -extern unsigned int dtstrhash(unsigned int, void*, int); - -#undef extern - -/* internal functions for translating among holder, object and key */ -#define _DT(dt) ((Dt_t*)(dt)) -#define _DTDSC(dc,ky,sz,lk,cmpf) \ - (ky = dc->key, sz = dc->size, lk = dc->link, cmpf = dc->comparf) -#define _DTLNK(o,lk) ((Dtlink_t*)((char*)(o) + lk) ) -#define _DTOBJ(e,lk) (lk < 0 ? ((Dthold_t*)(e))->obj : (void*)((char*)(e) - lk) ) -#define _DTKEY(o,ky,sz) (void*)(sz < 0 ? *((char**)((char*)(o)+ky)) : ((char*)(o)+ky)) - -#define _DTCMP(dt,k1,k2,dc,cmpf,sz) \ - (cmpf ? (*cmpf)(dt,k1,k2,dc) : \ - (sz <= 0 ? strcmp(k1,k2) : memcmp(k1,k2,sz)) ) -#define _DTHSH(dt,ky,dc,sz) (dc->hashf ? (*dc->hashf)(dt,ky,dc) : dtstrhash(0,ky,sz) ) - -/* special search function for tree structure only */ -#define _DTMTCH(dt,key,action) \ - do { Dtlink_t* _e; void *_o, *_k, *_key; Dtdisc_t* _dc; \ - int _ky, _sz, _lk, _cmp; Dtcompar_f _cmpf; \ - _dc = (dt)->disc; _DTDSC(_dc, _ky, _sz, _lk, _cmpf); \ - _key = (key); \ - for(_e = (dt)->data->here; _e; _e = _cmp < 0 ? _e->hl._left : _e->right) \ - { _o = _DTOBJ(_e, _lk); _k = _DTKEY(_o, _ky, _sz); \ - if((_cmp = _DTCMP((dt), _key, _k, _dc, _cmpf, _sz)) == 0) \ - break; \ - } \ - action (_e ? _o : (void*)0); \ - } while(0) - -#define _DTSRCH(dt,obj,action) \ - do { Dtlink_t* _e; void *_o, *_k, *_key; Dtdisc_t* _dc; \ - int _ky, _sz, _lk, _cmp; Dtcompar_f _cmpf; \ - _dc = (dt)->disc; _DTDSC(_dc, _ky, _sz, _lk, _cmpf); \ - _key = _DTKEY(obj, _ky, _sz); \ - for(_e = (dt)->data->here; _e; _e = _cmp < 0 ? _e->hl._left : _e->right) \ - { _o = _DTOBJ(_e, _lk); _k = _DTKEY(_o, _ky, _sz); \ - if((_cmp = _DTCMP((dt), _key, _k, _dc, _cmpf, _sz)) == 0) \ - break; \ - } \ - action (_e ? _o : (void*)0); \ - } while(0) - -#define DTTREEMATCH(dt,key,action) _DTMTCH(_DT(dt),(void*)(key),action) -#define DTTREESEARCH(dt,obj,action) _DTSRCH(_DT(dt),(void*)(obj),action) - -#define dtvnext(d) (_DT(d)->view) -#define dtvcount(d) (_DT(d)->nview) -#define dtvhere(d) (_DT(d)->walk) - -#define dtlink(d,e) (((Dtlink_t*)(e))->right) -#define dtobj(d,e) _DTOBJ((e), _DT(d)->disc->link) -#define dtfinger(d) (_DT(d)->data->here ? dtobj((d),_DT(d)->data->here):(void*)(0)) - -#define dtfirst(d) (*(_DT(d)->searchf))((d),(void*)(0),DT_FIRST) -#define dtnext(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_NEXT) -#define dtleast(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_SEARCH|DT_NEXT) -#define dtlast(d) (*(_DT(d)->searchf))((d),(void*)(0),DT_LAST) -#define dtprev(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_PREV) -#define dtmost(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_SEARCH|DT_PREV) -#define dtsearch(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_SEARCH) -#define dtmatch(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_MATCH) -#define dtinsert(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_INSERT) -#define dtappend(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_INSERT|DT_APPEND) -#define dtdelete(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_DELETE) -#define dtattach(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_ATTACH) -#define dtdetach(d,o) (*(_DT(d)->searchf))((d),(void*)(o),DT_DETACH) -#define dtclear(d) (*(_DT(d)->searchf))((d),(void*)(0),DT_CLEAR) -#define dtfound(d) (_DT(d)->type & DT_FOUND) - -#define DT_PRIME 17109811 /* 2#00000001 00000101 00010011 00110011 */ -#define dtcharhash(h,c) (((unsigned int)(h) + (unsigned int)(c)) * DT_PRIME ) - -#ifdef __cplusplus -} -#endif - -#endif /* _CDT_H */ diff --git a/internal/ccall/cdt/dtclose.c b/internal/ccall/cdt/dtclose.c deleted file mode 100644 index def656b..0000000 --- a/internal/ccall/cdt/dtclose.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "dthdr.h" - -/* Close a dictionary -** -** Written by Kiem-Phong Vo (05/25/96) -*/ -int dtclose(reg Dt_t* dt) -{ - Dtdisc_t *disc; - int ev = 0; - - if(!dt || dt->nview > 0 ) /* can't close if being viewed */ - return -1; - - /* announce the close event to see if we should continue */ - disc = dt->disc; - if(disc->eventf && - (ev = (*disc->eventf)(dt,DT_CLOSE,NIL(void*),disc)) < 0) - return -1; - - if(dt->view) /* turn off viewing */ - dtview(dt,NIL(Dt_t*)); - - if(ev == 0) /* release all allocated data */ - { (void)(*(dt->meth->searchf))(dt,NIL(void*),DT_CLEAR); - if(dtsize(dt) > 0) - return -1; - - if(dt->data->ntab > 0) - (*dt->memoryf)(dt,(void*)dt->data->htab,0,disc); - (*dt->memoryf)(dt,(void*)dt->data,0,disc); - } - - if(dt->type == DT_MALLOC) - free((void*)dt); - else if(ev == 0 && dt->type == DT_MEMORYF) - (*dt->memoryf)(dt, (void*)dt, 0, disc); - - if(disc->eventf) - (void)(*disc->eventf)(dt, DT_ENDCLOSE, NIL(void*), disc); - - return 0; -} diff --git a/internal/ccall/cdt/dtdisc.c b/internal/ccall/cdt/dtdisc.c deleted file mode 100644 index a7685e5..0000000 --- a/internal/ccall/cdt/dtdisc.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "dthdr.h" - -/* Change discipline. -** dt : dictionary -** disc : discipline -** -** Written by Kiem-Phong Vo (5/26/96) -*/ - -static void* dtmemory(Dt_t* dt,void* addr,size_t size,Dtdisc_t* disc) -{ - if(addr) - { if(size == 0) - { free(addr); - return NIL(void*); - } - else return realloc(addr,size); - } - else return size > 0 ? malloc(size) : NIL(void*); -} - -Dtdisc_t* dtdisc(Dt_t* dt, Dtdisc_t* disc, int type) -{ - reg Dtsearch_f searchf; - reg Dtlink_t *r, *t; - reg char* k; - reg Dtdisc_t* old; - - if(!(old = dt->disc) ) /* initialization call from dtopen() */ - { dt->disc = disc; - if(!(dt->memoryf = disc->memoryf) ) - dt->memoryf = dtmemory; - return disc; - } - - if(!disc) /* only want to know current discipline */ - return old; - - searchf = dt->meth->searchf; - - UNFLATTEN(dt); - - if(old->eventf && (*old->eventf)(dt,DT_DISC,(void*)disc,old) < 0) - return NIL(Dtdisc_t*); - - dt->disc = disc; - if(!(dt->memoryf = disc->memoryf) ) - dt->memoryf = dtmemory; - - if(dt->data->type&(DT_STACK|DT_QUEUE|DT_LIST)) - goto done; - else if(dt->data->type&DT_BAG) - { if(type&DT_SAMEHASH) - goto done; - else goto dt_renew; - } - else if(dt->data->type&(DT_SET|DT_BAG)) - { if((type&DT_SAMEHASH) && (type&DT_SAMECMP)) - goto done; - else goto dt_renew; - } - else /*if(dt->data->type&(DT_OSET|DT_OBAG))*/ - { if(type&DT_SAMECMP) - goto done; - dt_renew: - r = dtflatten(dt); - dt->data->type &= ~DT_FLATTEN; - dt->data->here = NIL(Dtlink_t*); - dt->data->size = 0; - - if(dt->data->type&(DT_SET|DT_BAG)) - { reg Dtlink_t **s, **ends; - ends = (s = dt->data->htab) + dt->data->ntab; - while(s < ends) - *s++ = NIL(Dtlink_t*); - } - - /* reinsert them */ - while(r) - { t = r->right; - if(!(type&DT_SAMEHASH)) /* new hash value */ - { k = (char*)_DTOBJ(r,disc->link); - k = _DTKEY((void*)k,disc->key,disc->size); - r->hash = _DTHSH(dt,k,disc,disc->size); - } - (void)(*searchf)(dt,(void*)r,DT_RENEW); - r = t; - } - } - -done: - return old; -} diff --git a/internal/ccall/cdt/dtextract.c b/internal/ccall/cdt/dtextract.c deleted file mode 100644 index b6465cd..0000000 --- a/internal/ccall/cdt/dtextract.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "dthdr.h" - -/* Extract objects of a dictionary. -** -** Written by Kiem-Phong Vo (5/25/96). -*/ - -Dtlink_t* dtextract(reg Dt_t* dt) -{ - reg Dtlink_t *list, **s, **ends; - - if(dt->data->type&(DT_OSET|DT_OBAG) ) - list = dt->data->here; - else if(dt->data->type&(DT_SET|DT_BAG)) - { list = dtflatten(dt); - for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s) - *s = NIL(Dtlink_t*); - } - else /*if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE))*/ - { list = dt->data->head; - dt->data->head = NIL(Dtlink_t*); - } - - dt->data->type &= ~DT_FLATTEN; - dt->data->size = 0; - dt->data->here = NIL(Dtlink_t*); - - return list; -} diff --git a/internal/ccall/cdt/dtflatten.c b/internal/ccall/cdt/dtflatten.c deleted file mode 100644 index b484cb3..0000000 --- a/internal/ccall/cdt/dtflatten.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "dthdr.h" - -/* Flatten a dictionary into a linked list. -** This may be used when many traversals are likely. -** -** Written by Kiem-Phong Vo (5/25/96). -*/ - -Dtlink_t* dtflatten(Dt_t* dt) -{ - reg Dtlink_t *t, *r, *list, *last, **s, **ends; - - /* already flattened */ - if(dt->data->type&DT_FLATTEN ) - return dt->data->here; - - list = last = NIL(Dtlink_t*); - if(dt->data->type&(DT_SET|DT_BAG)) - { for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s) - { if((t = *s) ) - { if(last) - last->right = t; - else list = last = t; - while(last->right) - last = last->right; - *s = last; - } - } - } - else if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE) ) - list = dt->data->head; - else if((r = dt->data->here) ) /*if(dt->data->type&(DT_OSET|DT_OBAG))*/ - { while((t = r->left) ) - RROTATE(r,t); - for(list = last = r, r = r->right; r; last = r, r = r->right) - { if((t = r->left) ) - { do RROTATE(r,t); - while((t = r->left) ); - - last->right = r; - } - } - } - - dt->data->here = list; - dt->data->type |= DT_FLATTEN; - - return list; -} diff --git a/internal/ccall/cdt/dthash.c b/internal/ccall/cdt/dthash.c deleted file mode 100644 index 3e3a043..0000000 --- a/internal/ccall/cdt/dthash.c +++ /dev/null @@ -1,335 +0,0 @@ -#include "dthdr.h" - -/* Hash table. -** dt: dictionary -** obj: what to look for -** type: type of search -** -** Written by Kiem-Phong Vo (05/25/96) -*/ - -/* resize the hash table */ -static void dthtab(Dt_t* dt) -{ - reg Dtlink_t *t, *r, *p, **s, **hs, **is, **olds; - int n, k; - - if(dt->data->minp > 0 && dt->data->ntab > 0) /* fixed table size */ - return; - dt->data->minp = 0; - - n = dt->data->ntab; - if(dt->disc && dt->disc->eventf && - (*dt->disc->eventf)(dt, DT_HASHSIZE, &n, dt->disc) > 0 ) - { if(n < 0) /* fix table size */ - { dt->data->minp = 1; - if(dt->data->ntab > 0 ) - return; - } - else /* set a particular size */ - { for(k = 2; k < n; k *= 2) - ; - n = k; - } - } - else n = 0; - - /* compute new table size */ - if(n <= 0) - { if((n = dt->data->ntab) == 0) - n = HSLOT; - while(dt->data->size > HLOAD(n)) - n = HRESIZE(n); - } - if(n == dt->data->ntab) - return; - - /* allocate new table */ - olds = dt->data->ntab == 0 ? NIL(Dtlink_t**) : dt->data->htab; - if(!(s = (Dtlink_t**)(*dt->memoryf)(dt,olds,n*sizeof(Dtlink_t*),dt->disc)) ) - return; - olds = s + dt->data->ntab; - dt->data->htab = s; - dt->data->ntab = n; - - /* rehash elements */ - for(hs = s+n-1; hs >= olds; --hs) - *hs = NIL(Dtlink_t*); - for(hs = s; hs < olds; ++hs) - { for(p = NIL(Dtlink_t*), t = *hs; t; t = r) - { r = t->right; - if((is = s + HINDEX(n,t->hash)) == hs) - p = t; - else /* move to a new chain */ - { if(p) - p->right = r; - else *hs = r; - t->right = *is; *is = t; - } - } - } -} - -static void* dthash(Dt_t* dt, reg void* obj, int type) -{ - reg Dtlink_t *t, *r = NULL, *p; - reg void *k, *key; - reg uint hsh; - reg int lk, sz, ky; - reg Dtcompar_f cmpf; - reg Dtdisc_t* disc; - reg Dtlink_t **s = NULL, **ends; - - UNFLATTEN(dt); - - /* initialize discipline data */ - disc = dt->disc; _DTDSC(disc,ky,sz,lk,cmpf); - dt->type &= ~DT_FOUND; - - if(!obj) - { if(type&(DT_NEXT|DT_PREV)) - goto end_walk; - - if(dt->data->size <= 0 || !(type&(DT_CLEAR|DT_FIRST|DT_LAST)) ) - return NIL(void*); - - ends = (s = dt->data->htab) + dt->data->ntab; - if(type&DT_CLEAR) - { /* clean out all objects */ - for(; s < ends; ++s) - { t = *s; - *s = NIL(Dtlink_t*); - if(!disc->freef && disc->link >= 0) - continue; - while(t) - { r = t->right; - if(disc->freef) - (*disc->freef)(dt,_DTOBJ(t,lk),disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)t,0,disc); - t = r; - } - } - dt->data->here = NIL(Dtlink_t*); - dt->data->size = 0; - dt->data->loop = 0; - return NIL(void*); - } - else /* computing the first/last object */ - { t = NIL(Dtlink_t*); - while(s < ends && !t ) - t = (type&DT_LAST) ? *--ends : *s++; - if(t && (type&DT_LAST)) - for(; t->right; t = t->right) - ; - - dt->data->loop += 1; - dt->data->here = t; - return t ? _DTOBJ(t,lk) : NIL(void*); - } - } - - /* allow apps to delete an object "actually" in the dictionary */ - if(dt->meth->type == DT_BAG && (type&(DT_DELETE|DT_DETACH)) ) - { if(!dtsearch(dt,obj) ) - return NIL(void*); - - s = dt->data->htab + HINDEX(dt->data->ntab,dt->data->here->hash); - r = NIL(Dtlink_t*); - for(p = NIL(Dtlink_t*), t = *s; t; p = t, t = t->right) - { if(_DTOBJ(t,lk) == obj) /* delete this specific object */ - goto do_delete; - if(t == dt->data->here) - r = p; - } - - /* delete some matching object */ - p = r; t = dt->data->here; - goto do_delete; - } - - if(type&(DT_MATCH|DT_SEARCH|DT_INSERT|DT_ATTACH) ) - { key = (type&DT_MATCH) ? obj : _DTKEY(obj,ky,sz); - hsh = _DTHSH(dt,key,disc,sz); - goto do_search; - } - else if(type&(DT_RENEW|DT_VSEARCH) ) - { r = (Dtlink_t*)obj; - obj = _DTOBJ(r,lk); - key = _DTKEY(obj,ky,sz); - hsh = r->hash; - goto do_search; - } - else /*if(type&(DT_DELETE|DT_DETACH|DT_NEXT|DT_PREV))*/ - { if((t = dt->data->here) && _DTOBJ(t,lk) == obj) - { hsh = t->hash; - s = dt->data->htab + HINDEX(dt->data->ntab,hsh); - p = NIL(Dtlink_t*); - } - else - { key = _DTKEY(obj,ky,sz); - hsh = _DTHSH(dt,key,disc,sz); - do_search: - t = dt->data->ntab <= 0 ? NIL(Dtlink_t*) : - *(s = dt->data->htab + HINDEX(dt->data->ntab,hsh)); - for(p = NIL(Dtlink_t*); t; p = t, t = t->right) - { if(hsh == t->hash) - { k = _DTOBJ(t,lk); k = _DTKEY(k,ky,sz); - if(_DTCMP(dt,key,k,disc,cmpf,sz) == 0) - break; - } - } - } - } - - if(t) /* found matching object */ - dt->type |= DT_FOUND; - - if(type&(DT_MATCH|DT_SEARCH|DT_VSEARCH)) - { if(!t) - return NIL(void*); - if(p && (dt->data->type&DT_SET) && dt->data->loop <= 0) - { /* move-to-front heuristic */ - p->right = t->right; - t->right = *s; - *s = t; - } - dt->data->here = t; - return _DTOBJ(t,lk); - } - else if(type&(DT_INSERT|DT_ATTACH)) - { if(t && (dt->data->type&DT_SET) ) - { dt->data->here = t; - return _DTOBJ(t,lk); - } - - if(disc->makef && (type&DT_INSERT) && - !(obj = (*disc->makef)(dt,obj,disc)) ) - return NIL(void*); - if(lk >= 0) - r = _DTLNK(obj,lk); - else - { r = (Dtlink_t*)(*dt->memoryf) - (dt,NIL(void*),sizeof(Dthold_t),disc); - if(r) - ((Dthold_t*)r)->obj = obj; - else - { if(disc->makef && disc->freef && (type&DT_INSERT)) - (*disc->freef)(dt,obj,disc); - return NIL(void*); - } - } - r->hash = hsh; - - /* insert object */ - do_insert: - if((dt->data->size += 1) > HLOAD(dt->data->ntab) && dt->data->loop <= 0 ) - dthtab(dt); - if(dt->data->ntab == 0) - { dt->data->size -= 1; - if(disc->freef && (type&DT_INSERT)) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*disc->memoryf)(dt,(void*)r,0,disc); - return NIL(void*); - } - s = dt->data->htab + HINDEX(dt->data->ntab,hsh); - if(t) - { r->right = t->right; - t->right = r; - } - else - { r->right = *s; - *s = r; - } - dt->data->here = r; - return obj; - } - else if(type&DT_NEXT) - { if(t && !(p = t->right) ) - { for(ends = dt->data->htab+dt->data->ntab, s += 1; s < ends; ++s) - if((p = *s) ) - break; - } - goto done_adj; - } - else if(type&DT_PREV) - { if(t && !p) - { if((p = *s) != t) - { while(p->right != t) - p = p->right; - } - else - { p = NIL(Dtlink_t*); - for(s -= 1, ends = dt->data->htab; s >= ends; --s) - { if((p = *s) ) - { while(p->right) - p = p->right; - break; - } - } - } - } - done_adj: - if(!(dt->data->here = p) ) - { end_walk: - if((dt->data->loop -= 1) < 0) - dt->data->loop = 0; - if(dt->data->size > HLOAD(dt->data->ntab) && dt->data->loop <= 0) - dthtab(dt); - return NIL(void*); - } - else - { dt->data->type |= DT_WALK; - return _DTOBJ(p,lk); - } - } - else if(type&DT_RENEW) - { if(!t || (dt->data->type&DT_BAG) ) - goto do_insert; - else - { if(disc->freef) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)r,0,disc); - return t ? _DTOBJ(t,lk) : NIL(void*); - } - } - else /*if(type&(DT_DELETE|DT_DETACH))*/ - { /* take an element out of the dictionary */ - do_delete: - if(!t) - return NIL(void*); - else if(p) - p->right = t->right; - else if((p = *s) == t) - p = *s = t->right; - else - { while(p->right != t) - p = p->right; - p->right = t->right; - } - obj = _DTOBJ(t,lk); - dt->data->size -= 1; - dt->data->here = p; - if(disc->freef && (type&DT_DELETE)) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)t,0,disc); - return obj; - } -} - -static Dtmethod_t _Dtset = { dthash, DT_SET }; -static Dtmethod_t _Dtbag = { dthash, DT_BAG }; -Dtmethod_t* Dtset = &_Dtset; -Dtmethod_t* Dtbag = &_Dtbag; - -#ifndef KPVDEL /* for backward compatibility - remove next time */ -Dtmethod_t _Dthash = { dthash, DT_SET }; -Dtmethod_t* Dthash = &_Dthash; -#endif - -#ifdef NoF -NoF(dthash) -#endif diff --git a/internal/ccall/cdt/dthdr.h b/internal/ccall/cdt/dthdr.h deleted file mode 100644 index 1f5967e..0000000 --- a/internal/ccall/cdt/dthdr.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _DTHDR_H -#define _DTHDR_H 1 -#ifndef _BLD_cdt -#define _BLD_cdt 1 -#endif - -/* Internal definitions for libcdt. -** Written by Kiem-Phong Vo (5/25/96) -*/ - -#include - -#include - -/* short-hand notations */ -#define NIL(t) ((t)0) -#define reg register -#define uint unsigned int -#define left hl._left -#define hash hl._hash -#define htab hh._htab -#define head hh._head - -/* this must be disjoint from DT_METHODS */ -#define DT_FLATTEN 010000 /* dictionary already flattened */ -#define DT_WALK 020000 /* hash table being walked */ - -/* how the Dt_t handle was allocated */ -#define DT_MALLOC 0 -#define DT_MEMORYF 1 - -/* max search length before splaying */ -#define DT_MINP (sizeof(size_t)*8 - 2) - -/* hash start size and load factor */ -#define HSLOT (256) -#define HRESIZE(n) ((n) << 1) -#define HLOAD(s) ((s) << 1) -#define HINDEX(n,h) ((h)&((n)-1)) - -#define UNFLATTEN(dt) \ - ((dt->data->type&DT_FLATTEN) ? dtrestore(dt,NIL(Dtlink_t*)) : 0) - -/* tree rotation/linking functions */ -#define rrotate(x,y) ((x)->left = (y)->right, (y)->right = (x)) -#define lrotate(x,y) ((x)->right = (y)->left, (y)->left = (x)) -#define rlink(r,x) ((r) = (r)->left = (x) ) -#define llink(l,x) ((l) = (l)->right = (x) ) - -#define RROTATE(x,y) (rrotate(x,y), (x) = (y)) -#define LROTATE(x,y) (lrotate(x,y), (x) = (y)) - -#endif /* _DTHDR_H */ diff --git a/internal/ccall/cdt/dtlist.c b/internal/ccall/cdt/dtlist.c deleted file mode 100644 index f52d096..0000000 --- a/internal/ccall/cdt/dtlist.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "dthdr.h" - -/* List, Deque, Stack, Queue. -** -** Written by Kiem-Phong Vo (05/25/96) -*/ - -static void* dtlist(reg Dt_t* dt, reg void* obj, reg int type) -{ - reg int lk, sz, ky; - reg Dtcompar_f cmpf; - reg Dtdisc_t* disc; - reg Dtlink_t *r, *t; - reg void *key, *k; - - UNFLATTEN(dt); - disc = dt->disc; _DTDSC(disc,ky,sz,lk,cmpf); - dt->type &= ~DT_FOUND; - - if(!obj) - { if(type&(DT_LAST|DT_FIRST) ) - { if((r = dt->data->head) ) - { if(type&DT_LAST) - r = r->left; - dt->data->here = r; - } - return r ? _DTOBJ(r,lk) : NIL(void*); - } - else if(type&(DT_DELETE|DT_DETACH)) - { if((dt->data->type&(DT_LIST|DT_DEQUE)) || !(r = dt->data->head)) - return NIL(void*); - else goto dt_delete; - } - else if(type&DT_CLEAR) - { if(disc->freef || disc->link < 0) - { for(r = dt->data->head; r; r = t) - { t = r->right; - if(disc->freef) - (*disc->freef)(dt,_DTOBJ(r,lk),disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)r,0,disc); - } - } - dt->data->head = dt->data->here = NIL(Dtlink_t*); - dt->data->size = 0; - return NIL(void*); - } - else return NIL(void*); - } - - if(type&(DT_INSERT|DT_ATTACH)) - { if(disc->makef && (type&DT_INSERT) && - !(obj = (*disc->makef)(dt,obj,disc)) ) - return NIL(void*); - if(lk >= 0) - r = _DTLNK(obj,lk); - else - { r = (Dtlink_t*)(*dt->memoryf) - (dt,NIL(void*),sizeof(Dthold_t),disc); - if(r) - ((Dthold_t*)r)->obj = obj; - else - { if(disc->makef && disc->freef && (type&DT_INSERT)) - (*disc->freef)(dt,obj,disc); - return NIL(void*); - } - } - - if(dt->data->type&DT_DEQUE) - { if(type&DT_APPEND) - goto dt_queue; - else goto dt_stack; - } - else if(dt->data->type&DT_LIST) - { if(type&DT_APPEND) - { if(!(t = dt->data->here) || !t->right) - goto dt_queue; - r->right = t->right; - r->right->left = r; - r->left = t; - r->left->right = r; - } - else - { if(!(t = dt->data->here) || t == dt->data->head) - goto dt_stack; - r->left = t->left; - r->left->right = r; - r->right = t; - r->right->left = r; - } - } - else if(dt->data->type&DT_STACK) - { dt_stack: - r->right = t = dt->data->head; - if(t) - { r->left = t->left; - t->left = r; - } - else r->left = r; - dt->data->head = r; - } - else /* if(dt->data->type&DT_QUEUE) */ - { dt_queue: - if((t = dt->data->head) ) - { t->left->right = r; - r->left = t->left; - t->left = r; - } - else - { dt->data->head = r; - r->left = r; - } - r->right = NIL(Dtlink_t*); - } - - if(dt->data->size >= 0) - dt->data->size += 1; - - dt->data->here = r; - return _DTOBJ(r,lk); - } - - if((type&DT_MATCH) || !(r = dt->data->here) || _DTOBJ(r,lk) != obj) - { key = (type&DT_MATCH) ? obj : _DTKEY(obj,ky,sz); - for(r = dt->data->head; r; r = r->right) - { k = _DTOBJ(r,lk); k = _DTKEY(k,ky,sz); - if(_DTCMP(dt,key,k,disc,cmpf,sz) == 0) - break; - } - } - - if(!r) - return NIL(void*); - dt->type |= DT_FOUND; - - if(type&(DT_DELETE|DT_DETACH)) - { dt_delete: - if(r->right) - r->right->left = r->left; - if(r == (t = dt->data->head) ) - { dt->data->head = r->right; - if(dt->data->head) - dt->data->head->left = t->left; - } - else - { r->left->right = r->right; - if(r == t->left) - t->left = r->left; - } - - dt->data->here = r == dt->data->here ? r->right : NIL(Dtlink_t*); - dt->data->size -= 1; - - obj = _DTOBJ(r,lk); - if(disc->freef && (type&DT_DELETE)) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)r,0,disc); - return obj; - } - else if(type&DT_NEXT) - r = r->right; - else if(type&DT_PREV) - r = r == dt->data->head ? NIL(Dtlink_t*) : r->left; - - dt->data->here = r; - return r ? _DTOBJ(r,lk) : NIL(void*); -} - -#ifndef KPVDEL /* to be remove next round */ -#define static -#endif -static Dtmethod_t _Dtlist = { dtlist, DT_LIST }; -static Dtmethod_t _Dtdeque = { dtlist, DT_DEQUE }; -static Dtmethod_t _Dtstack = { dtlist, DT_STACK }; -static Dtmethod_t _Dtqueue = { dtlist, DT_QUEUE }; - -Dtmethod_t* Dtlist = &_Dtlist; -Dtmethod_t* Dtdeque = &_Dtdeque; -Dtmethod_t* Dtstack = &_Dtstack; -Dtmethod_t* Dtqueue = &_Dtqueue; - -#ifdef NoF -NoF(dtlist) -#endif diff --git a/internal/ccall/cdt/dtmethod.c b/internal/ccall/cdt/dtmethod.c deleted file mode 100644 index b9ac26a..0000000 --- a/internal/ccall/cdt/dtmethod.c +++ /dev/null @@ -1,80 +0,0 @@ -#include "dthdr.h" - -/* Change search method. -** -** Written by Kiem-Phong Vo (05/25/96) -*/ - -Dtmethod_t* dtmethod(Dt_t* dt, Dtmethod_t* meth) -{ - reg Dtlink_t *list, *r; - reg Dtdisc_t* disc = dt->disc; - reg Dtmethod_t* oldmeth = dt->meth; - - if(!meth || meth->type == oldmeth->type) - return oldmeth; - - if(disc->eventf && - (*disc->eventf)(dt,DT_METH,(void*)meth,disc) < 0) - return NIL(Dtmethod_t*); - - dt->data->minp = 0; - - /* get the list of elements */ - list = dtflatten(dt); - - if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE) ) - dt->data->head = NIL(Dtlink_t*); - else if(dt->data->type&(DT_SET|DT_BAG) ) - { if(dt->data->ntab > 0) - (*dt->memoryf)(dt,(void*)dt->data->htab,0,disc); - dt->data->ntab = 0; - dt->data->htab = NIL(Dtlink_t**); - } - - dt->data->here = NIL(Dtlink_t*); - dt->data->type = (dt->data->type&~(DT_METHODS|DT_FLATTEN)) | meth->type; - dt->meth = meth; - if(dt->searchf == oldmeth->searchf) - dt->searchf = meth->searchf; - - if(meth->type&(DT_LIST|DT_STACK|DT_QUEUE) ) - { if(!(oldmeth->type&(DT_LIST|DT_STACK|DT_QUEUE)) ) - { if((r = list) ) - { reg Dtlink_t* t; - for(t = r->right; t; r = t, t = t->right ) - t->left = r; - list->left = r; - } - } - dt->data->head = list; - } - else if(meth->type&(DT_OSET|DT_OBAG)) - { dt->data->size = 0; - while(list) - { r = list->right; - (*meth->searchf)(dt,(void*)list,DT_RENEW); - list = r; - } - } - else if(!((meth->type&DT_BAG) && (oldmeth->type&DT_SET)) ) - { int rehash; - if((meth->type&(DT_SET|DT_BAG)) && !(oldmeth->type&(DT_SET|DT_BAG))) - rehash = 1; - else rehash = 0; - - dt->data->size = dt->data->loop = 0; - while(list) - { r = list->right; - if(rehash) - { reg void* key = _DTOBJ(list,disc->link); - key = _DTKEY(key,disc->key,disc->size); - list->hash = _DTHSH(dt,key,disc,disc->size); - } - (void)(*meth->searchf)(dt,(void*)list,DT_RENEW); - list = r; - } - } - - return oldmeth; -} diff --git a/internal/ccall/cdt/dtopen.c b/internal/ccall/cdt/dtopen.c deleted file mode 100644 index 388c76c..0000000 --- a/internal/ccall/cdt/dtopen.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "dthdr.h" -static char* Version = "\n@(#)$Id$\0\n"; - -/* Make a new dictionary -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -Dt_t* dtopen(Dtdisc_t* disc, Dtmethod_t* meth) -{ - Dt_t* dt = (Dt_t*)Version; /* shut-up unuse warning */ - reg int e; - Dtdata_t* data; - - if(!disc || !meth) - return NIL(Dt_t*); - - /* allocate space for dictionary */ - if(!(dt = (Dt_t*) malloc(sizeof(Dt_t)))) - return NIL(Dt_t*); - - /* initialize all absolutely private data */ - dt->searchf = NIL(Dtsearch_f); - dt->meth = NIL(Dtmethod_t*); - dt->disc = NIL(Dtdisc_t*); - dtdisc(dt,disc,0); - dt->type = DT_MALLOC; - dt->nview = 0; - dt->view = dt->walk = NIL(Dt_t*); - dt->user = NIL(void*); - - if(disc->eventf) - { /* if shared/persistent dictionary, get existing data */ - data = NIL(Dtdata_t*); - if((e = (*disc->eventf)(dt,DT_OPEN,(void*)(&data),disc)) < 0) - goto err_open; - else if(e > 0) - { if(data) - { if(data->type&meth->type) - goto done; - else goto err_open; - } - - if(!disc->memoryf) - goto err_open; - - free((void*)dt); - if(!(dt = (*disc->memoryf)(0, 0, sizeof(Dt_t), disc)) ) - return NIL(Dt_t*); - dt->searchf = NIL(Dtsearch_f); - dt->meth = NIL(Dtmethod_t*); - dt->disc = NIL(Dtdisc_t*); - dtdisc(dt,disc,0); - dt->type = DT_MEMORYF; - dt->nview = 0; - dt->view = dt->walk = NIL(Dt_t*); - } - } - - /* allocate sharable data */ - if(!(data = (Dtdata_t*)(dt->memoryf)(dt,NIL(void*),sizeof(Dtdata_t),disc)) ) - { err_open: - free((void*)dt); - return NIL(Dt_t*); - } - - data->type = meth->type; - data->here = NIL(Dtlink_t*); - data->htab = NIL(Dtlink_t**); - data->ntab = data->size = data->loop = 0; - data->minp = 0; - -done: - dt->data = data; - dt->searchf = meth->searchf; - dt->meth = meth; - - if(disc->eventf) - (*disc->eventf)(dt, DT_ENDOPEN, (void*)dt, disc); - - return dt; -} diff --git a/internal/ccall/cdt/dtrenew.c b/internal/ccall/cdt/dtrenew.c deleted file mode 100644 index 5a8be60..0000000 --- a/internal/ccall/cdt/dtrenew.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "dthdr.h" - - -/* Renew the object at the current finger. -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -void* dtrenew(Dt_t* dt, reg void* obj) -{ - reg void* key; - reg Dtlink_t *e, *t, **s; - reg Dtdisc_t* disc = dt->disc; - - UNFLATTEN(dt); - - if(!(e = dt->data->here) || _DTOBJ(e,disc->link) != obj) - return NIL(void*); - - if(dt->data->type&(DT_STACK|DT_QUEUE|DT_LIST)) - return obj; - else if(dt->data->type&(DT_OSET|DT_OBAG) ) - { if(!e->right ) /* make left child the new root */ - dt->data->here = e->left; - else /* make right child the new root */ - { dt->data->here = e->right; - - /* merge left subtree to right subtree */ - if(e->left) - { for(t = e->right; t->left; t = t->left) - ; - t->left = e->left; - } - } - } - else /*if(dt->data->type&(DT_SET|DT_BAG))*/ - { s = dt->data->htab + HINDEX(dt->data->ntab,e->hash); - if((t = *s) == e) - *s = e->right; - else - { for(; t->right != e; t = t->right) - ; - t->right = e->right; - } - key = _DTKEY(obj,disc->key,disc->size); - e->hash = _DTHSH(dt,key,disc,disc->size); - dt->data->here = NIL(Dtlink_t*); - } - - dt->data->size -= 1; - return (*dt->meth->searchf)(dt,(void*)e,DT_RENEW) ? obj : NIL(void*); -} diff --git a/internal/ccall/cdt/dtrestore.c b/internal/ccall/cdt/dtrestore.c deleted file mode 100644 index b79224b..0000000 --- a/internal/ccall/cdt/dtrestore.c +++ /dev/null @@ -1,61 +0,0 @@ -#include "dthdr.h" - -/* Restore dictionary from given tree or list of elements. -** There are two cases. If called from within, list is nil. -** From without, list is not nil and data->size must be 0. -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -int dtrestore(reg Dt_t* dt, reg Dtlink_t* list) -{ - reg Dtlink_t *t, **s, **ends; - reg int type; - reg Dtsearch_f searchf = dt->meth->searchf; - - type = dt->data->type&DT_FLATTEN; - if(!list) /* restoring a flattened dictionary */ - { if(!type) - return -1; - list = dt->data->here; - } - else /* restoring an extracted list of elements */ - { if(dt->data->size != 0) - return -1; - type = 0; - } - dt->data->type &= ~DT_FLATTEN; - - if(dt->data->type&(DT_SET|DT_BAG)) - { dt->data->here = NIL(Dtlink_t*); - if(type) /* restoring a flattened dictionary */ - { for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s) - { if((t = *s) ) - { *s = list; - list = t->right; - t->right = NIL(Dtlink_t*); - } - } - } - else /* restoring an extracted list of elements */ - { dt->data->size = 0; - while(list) - { t = list->right; - (*searchf)(dt,(void*)list,DT_RENEW); - list = t; - } - } - } - else - { if(dt->data->type&(DT_OSET|DT_OBAG)) - dt->data->here = list; - else /*if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE))*/ - { dt->data->here = NIL(Dtlink_t*); - dt->data->head = list; - } - if(!type) - dt->data->size = -1; - } - - return 0; -} diff --git a/internal/ccall/cdt/dtsize.c b/internal/ccall/cdt/dtsize.c deleted file mode 100644 index 18f0416..0000000 --- a/internal/ccall/cdt/dtsize.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "dthdr.h" - -/* Return the # of objects in the dictionary -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -static int treecount(reg Dtlink_t* e) -{ return e ? treecount(e->left) + treecount(e->right) + 1 : 0; -} - -int dtsize(Dt_t* dt) -{ - reg Dtlink_t* t; - reg int size; - - UNFLATTEN(dt); - - if(dt->data->size < 0) /* !(dt->data->type&(DT_SET|DT_BAG)) */ - { if(dt->data->type&(DT_OSET|DT_OBAG)) - dt->data->size = treecount(dt->data->here); - else if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE)) - { for(size = 0, t = dt->data->head; t; t = t->right) - size += 1; - dt->data->size = size; - } - } - - return dt->data->size; -} diff --git a/internal/ccall/cdt/dtstat.c b/internal/ccall/cdt/dtstat.c deleted file mode 100644 index dbe7ce5..0000000 --- a/internal/ccall/cdt/dtstat.c +++ /dev/null @@ -1,89 +0,0 @@ -#include "dthdr.h" - -/* Get statistics of a dictionary -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -static void dttstat(Dtstat_t* ds, Dtlink_t* root, int depth, int* level) -{ - if(root->left) - dttstat(ds,root->left,depth+1,level); - if(root->right) - dttstat(ds,root->right,depth+1,level); - if(depth > ds->dt_n) - ds->dt_n = depth; - if(level) - level[depth] += 1; -} - -static void dthstat(reg Dtdata_t* data, Dtstat_t* ds, reg int* count) -{ - reg Dtlink_t* t; - reg int n, h; - - for(h = data->ntab-1; h >= 0; --h) - { n = 0; - for(t = data->htab[h]; t; t = t->right) - n += 1; - if(count) - count[n] += 1; - else if(n > 0) - { ds->dt_n += 1; - if(n > ds->dt_max) - ds->dt_max = n; - } - } -} - -int dtstat(reg Dt_t* dt, Dtstat_t* ds, int all) -{ - reg int i; - static int *Count, Size; - - UNFLATTEN(dt); - - ds->dt_n = ds->dt_max = 0; - ds->dt_count = NIL(int*); - ds->dt_size = dtsize(dt); - ds->dt_meth = dt->data->type&DT_METHODS; - - if(!all) - return 0; - - if(dt->data->type&(DT_SET|DT_BAG)) - { dthstat(dt->data,ds,NIL(int*)); - if(ds->dt_max+1 > Size) - { if(Size > 0) - free(Count); - if(!(Count = (int*)malloc((ds->dt_max+1)*sizeof(int))) ) - return -1; - Size = ds->dt_max+1; - } - for(i = ds->dt_max; i >= 0; --i) - Count[i] = 0; - dthstat(dt->data,ds,Count); - } - else if(dt->data->type&(DT_OSET|DT_OBAG)) - { if(dt->data->here) - { dttstat(ds,dt->data->here,0,NIL(int*)); - if(ds->dt_n+1 > Size) - { if(Size > 0) - free(Count); - if(!(Count = (int*)malloc((ds->dt_n+1)*sizeof(int))) ) - return -1; - Size = ds->dt_n+1; - } - - for(i = ds->dt_n; i >= 0; --i) - Count[i] = 0; - dttstat(ds,dt->data->here,0,Count); - for(i = ds->dt_n; i >= 0; --i) - if(Count[i] > ds->dt_max) - ds->dt_max = Count[i]; - } - } - ds->dt_count = Count; - - return 0; -} diff --git a/internal/ccall/cdt/dtstrhash.c b/internal/ccall/cdt/dtstrhash.c deleted file mode 100644 index e94436e..0000000 --- a/internal/ccall/cdt/dtstrhash.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "dthdr.h" - -/* Hashing a string into an unsigned integer. -** The basic method is to continuingly accumulate bytes and multiply -** with some given prime. The length n of the string is added last. -** The recurrent equation is like this: -** h[k] = (h[k-1] + bytes)*prime for 0 <= k < n -** h[n] = (h[n-1] + n)*prime -** The prime is chosen to have a good distribution of 1-bits so that -** the multiplication will distribute the bits in the accumulator well. -** The below code accumulates 2 bytes at a time for speed. -** -** Written by Kiem-Phong Vo (02/28/03) -*/ - -uint dtstrhash(reg uint h, void* args, reg int n) -{ - reg unsigned char* s = (unsigned char*)args; - - if(n <= 0) - { for(; *s != 0; s += s[1] ? 2 : 1) - h = (h + (s[0]<<8) + s[1])*DT_PRIME; - n = s - (unsigned char*)args; - } - else - { reg unsigned char* ends; - for(ends = s+n-1; s < ends; s += 2) - h = (h + (s[0]<<8) + s[1])*DT_PRIME; - if(s <= ends) - h = (h + (s[0]<<8))*DT_PRIME; - } - return (h+n)*DT_PRIME; -} diff --git a/internal/ccall/cdt/dttree.c b/internal/ccall/cdt/dttree.c deleted file mode 100644 index 8803618..0000000 --- a/internal/ccall/cdt/dttree.c +++ /dev/null @@ -1,363 +0,0 @@ -#include "dthdr.h" - -/* Ordered set/multiset -** dt: dictionary being searched -** obj: the object to look for. -** type: search type. -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -static void* dttree(Dt_t* dt, void* obj, int type) -{ - Dtlink_t *root, *t; - int cmp, lk, sz, ky; - void *o, *k, *key; - Dtlink_t *l, *r, *me = NULL, link; - int n, minp, turn[DT_MINP]; - Dtcompar_f cmpf; - Dtdisc_t* disc; - - UNFLATTEN(dt); - disc = dt->disc; _DTDSC(disc,ky,sz,lk,cmpf); - dt->type &= ~DT_FOUND; - - root = dt->data->here; - if(!obj) - { if(!root || !(type&(DT_CLEAR|DT_FIRST|DT_LAST)) ) - return NIL(void*); - - if(type&DT_CLEAR) /* delete all objects */ - { if(disc->freef || disc->link < 0) - { do - { while((t = root->left) ) - RROTATE(root,t); - t = root->right; - if(disc->freef) - (*disc->freef)(dt,_DTOBJ(root,lk),disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)root,0,disc); - } while((root = t) ); - } - - dt->data->size = 0; - dt->data->here = NIL(Dtlink_t*); - return NIL(void*); - } - else /* computing largest/smallest element */ - { if(type&DT_LAST) - { while((t = root->right) ) - LROTATE(root,t); - } - else /* type&DT_FIRST */ - { while((t = root->left) ) - RROTATE(root,t); - } - - dt->data->here = root; - return _DTOBJ(root,lk); - } - } - - /* note that link.right is LEFT tree and link.left is RIGHT tree */ - l = r = &link; - - /* allow apps to delete an object "actually" in the dictionary */ - if(dt->meth->type == DT_OBAG && (type&(DT_DELETE|DT_DETACH)) ) - { key = _DTKEY(obj,ky,sz); - for(o = dtsearch(dt,obj); o; o = dtnext(dt,o) ) - { k = _DTKEY(o,ky,sz); - if(_DTCMP(dt,key,k,disc,cmpf,sz) != 0) - break; - if(o == obj) - { root = dt->data->here; - l->right = root->left; - r->left = root->right; - goto dt_delete; - } - } - } - - if(type&(DT_MATCH|DT_SEARCH|DT_INSERT|DT_ATTACH)) - { key = (type&DT_MATCH) ? obj : _DTKEY(obj,ky,sz); - if(root) - goto do_search; - } - else if(type&DT_RENEW) - { me = (Dtlink_t*)obj; - obj = _DTOBJ(me,lk); - key = _DTKEY(obj,ky,sz); - if(root) - goto do_search; - } - else if(root && _DTOBJ(root,lk) != obj) - { key = _DTKEY(obj,ky,sz); - do_search: - if(dt->meth->type == DT_OSET && - (minp = dt->data->minp) != 0 && (type&(DT_MATCH|DT_SEARCH)) ) - { /* simple search, note that minp should be even */ - for(t = root, n = 0; n < minp; ++n) - { k = _DTOBJ(t,lk); k = _DTKEY(k,ky,sz); - if((cmp = _DTCMP(dt,key,k,disc,cmpf,sz)) == 0) - return _DTOBJ(t,lk); - else - { turn[n] = cmp; - if(!(t = cmp < 0 ? t->left : t->right) ) - return NIL(void*); - } - } - - /* exceed search length, top-down splay now */ - for(n = 0; n < minp; n += 2) - { if(turn[n] < 0) - { t = root->left; - if(turn[n+1] < 0) - { rrotate(root,t); - rlink(r,t); - root = t->left; - } - else - { llink(l,t); - rlink(r,root); - root = t->right; - } - } - else - { t = root->right; - if(turn[n+1] > 0) - { lrotate(root,t); - llink(l,t); - root = t->right; - } - else - { rlink(r,t); - llink(l,root); - root = t->left; - } - } - } - } - - while(1) - { k = _DTOBJ(root,lk); k = _DTKEY(k,ky,sz); - if((cmp = _DTCMP(dt,key,k,disc,cmpf,sz)) == 0) - break; - else if(cmp < 0) - { if((t = root->left) ) - { k = _DTOBJ(t,lk); k = _DTKEY(k,ky,sz); - if((cmp = _DTCMP(dt,key,k,disc,cmpf,sz)) < 0) - { rrotate(root,t); - rlink(r,t); - if(!(root = t->left) ) - break; - } - else if(cmp == 0) - { rlink(r,root); - root = t; - break; - } - else /* if(cmp > 0) */ - { llink(l,t); - rlink(r,root); - if(!(root = t->right) ) - break; - } - } - else - { rlink(r,root); - root = NIL(Dtlink_t*); - break; - } - } - else /* if(cmp > 0) */ - { if((t = root->right) ) - { k = _DTOBJ(t,lk); k = _DTKEY(k,ky,sz); - if((cmp = _DTCMP(dt,key,k,disc,cmpf,sz)) > 0) - { lrotate(root,t); - llink(l,t); - if(!(root = t->right) ) - break; - } - else if(cmp == 0) - { llink(l,root); - root = t; - break; - } - else /* if(cmp < 0) */ - { rlink(r,t); - llink(l,root); - if(!(root = t->left) ) - break; - } - } - else - { llink(l,root); - root = NIL(Dtlink_t*); - break; - } - } - } - } - - if(root) - { /* found it, now isolate it */ - dt->type |= DT_FOUND; - l->right = root->left; - r->left = root->right; - - if(type&(DT_SEARCH|DT_MATCH)) - { has_root: - root->left = link.right; - root->right = link.left; - if((dt->meth->type&DT_OBAG) && (type&(DT_SEARCH|DT_MATCH)) ) - { key = _DTOBJ(root,lk); key = _DTKEY(key,ky,sz); - while((t = root->left) ) - { /* find max of left subtree */ - while((r = t->right) ) - LROTATE(t,r); - root->left = t; - - /* now see if it's in the same group */ - k = _DTOBJ(t,lk); k = _DTKEY(k,ky,sz); - if(_DTCMP(dt,key,k,disc,cmpf,sz) != 0) - break; - RROTATE(root,t); - } - } - dt->data->here = root; - return _DTOBJ(root,lk); - } - else if(type&DT_NEXT) - { root->left = link.right; - root->right = NIL(Dtlink_t*); - link.right = root; - dt_next: - if((root = link.left) ) - { while((t = root->left) ) - RROTATE(root,t); - link.left = root->right; - goto has_root; - } - else goto no_root; - } - else if(type&DT_PREV) - { root->right = link.left; - root->left = NIL(Dtlink_t*); - link.left = root; - dt_prev: - if((root = link.right) ) - { while((t = root->right) ) - LROTATE(root,t); - link.right = root->left; - goto has_root; - } - else goto no_root; - } - else if(type&(DT_DELETE|DT_DETACH)) - { /* taking an object out of the dictionary */ - dt_delete: - obj = _DTOBJ(root,lk); - if(disc->freef && (type&DT_DELETE)) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)root,0,disc); - if((dt->data->size -= 1) < 0) - dt->data->size = -1; - goto no_root; - } - else if(type&(DT_INSERT|DT_ATTACH)) - { if(dt->meth->type&DT_OSET) - goto has_root; - else - { root->left = NIL(Dtlink_t*); - root->right = link.left; - link.left = root; - goto dt_insert; - } - } - else if(type&DT_RENEW) /* a duplicate */ - { if(dt->meth->type&DT_OSET) - { if(disc->freef) - (*disc->freef)(dt,obj,disc); - if(disc->link < 0) - (*dt->memoryf)(dt,(void*)me,0,disc); - } - else - { me->left = NIL(Dtlink_t*); - me->right = link.left; - link.left = me; - dt->data->size += 1; - } - goto has_root; - } - } - else - { /* not found, finish up LEFT and RIGHT trees */ - r->left = NIL(Dtlink_t*); - l->right = NIL(Dtlink_t*); - - if(type&DT_NEXT) - goto dt_next; - else if(type&DT_PREV) - goto dt_prev; - else if(type&(DT_SEARCH|DT_MATCH)) - { no_root: - while((t = r->left) ) - r = t; - r->left = link.right; - dt->data->here = link.left; - return (type&DT_DELETE) ? obj : NIL(void*); - } - else if(type&(DT_INSERT|DT_ATTACH)) - { dt_insert: - if(disc->makef && (type&DT_INSERT)) - obj = (*disc->makef)(dt,obj,disc); - if(obj) - { if(lk >= 0) - root = _DTLNK(obj,lk); - else - { root = (Dtlink_t*)(*dt->memoryf) - (dt,NIL(void*),sizeof(Dthold_t),disc); - if(root) - ((Dthold_t*)root)->obj = obj; - else if(disc->makef && disc->freef && - (type&DT_INSERT)) - (*disc->freef)(dt,obj,disc); - } - } - if(root) - { if(dt->data->size >= 0) - dt->data->size += 1; - goto has_root; - } - else goto no_root; - } - else if(type&DT_RENEW) - { root = me; - dt->data->size += 1; - goto has_root; - } - else /*if(type&DT_DELETE)*/ - { obj = NIL(void*); - goto no_root; - } - } - - return NIL(void*); -} - -/* make this method available */ -static Dtmethod_t _Dtoset = { dttree, DT_OSET }; -static Dtmethod_t _Dtobag = { dttree, DT_OBAG }; -Dtmethod_t* Dtoset = &_Dtoset; -Dtmethod_t* Dtobag = &_Dtobag; - -#ifndef KPVDEL /* backward compatibility - delete next time around */ -Dtmethod_t _Dttree = { dttree, DT_OSET }; -Dtmethod_t* Dtorder = &_Dttree; -Dtmethod_t* Dttree = &_Dttree; -#endif - -#ifdef NoF -NoF(dttree) -#endif diff --git a/internal/ccall/cdt/dttreeset.c b/internal/ccall/cdt/dttreeset.c deleted file mode 100644 index 4a73b98..0000000 --- a/internal/ccall/cdt/dttreeset.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "dthdr.h" - -/* Set attributes of a tree. -** -** Written by Kiem-Phong Vo (09/17/2001) -*/ - -static Dtlink_t* treebalance(Dtlink_t* list, int size) -{ - int n; - Dtlink_t *l, *mid; - - if(size <= 2) - return list; - - for(l = list, n = size/2 - 1; n > 0; n -= 1) - l = l->right; - - mid = l->right; l->right = NIL(Dtlink_t*); - mid->left = treebalance(list, (n = size/2) ); - mid->right = treebalance(mid->right, size - (n + 1)); - return mid; -} - -int dttreeset(Dt_t* dt, int minp, int balance) -{ - int size; - - if(dt->meth->type != DT_OSET) - return -1; - - size = dtsize(dt); - - if(minp < 0) - { for(minp = 0; minp < DT_MINP; ++minp) - if((1 << minp) >= size) - break; - if(minp <= DT_MINP-4) /* use log(size) + 4 */ - minp += 4; - } - - if((dt->data->minp = minp + (minp%2)) > DT_MINP) - dt->data->minp = DT_MINP; - - if(balance) - dt->data->here = treebalance(dtflatten(dt), size); - - return 0; -} diff --git a/internal/ccall/cdt/dtview.c b/internal/ccall/cdt/dtview.c deleted file mode 100644 index fd93133..0000000 --- a/internal/ccall/cdt/dtview.c +++ /dev/null @@ -1,121 +0,0 @@ -#include "dthdr.h" - -/* Set a view path from dict to view. -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - - -static void* dtvsearch(Dt_t* dt, reg void* obj, reg int type) -{ - Dt_t *d, *p; - void *o, *n, *ok, *nk; - int cmp, lk, sz, ky; - Dtcompar_f cmpf; - - /* these operations only happen at the top level */ - if(type&(DT_INSERT|DT_DELETE|DT_CLEAR|DT_RENEW)) - return (*(dt->meth->searchf))(dt,obj,type); - - if((type&(DT_MATCH|DT_SEARCH)) || /* order sets first/last done below */ - ((type&(DT_FIRST|DT_LAST)) && !(dt->meth->type&(DT_OBAG|DT_OSET)) ) ) - { for(d = dt; d; d = d->view) - if((o = (*(d->meth->searchf))(d,obj,type)) ) - break; - dt->walk = d; - return o; - } - - if(dt->meth->type & (DT_OBAG|DT_OSET) ) - { if(!(type & (DT_FIRST|DT_LAST|DT_NEXT|DT_PREV)) ) - return NIL(void*); - - n = nk = NIL(void*); p = NIL(Dt_t*); - for(d = dt; d; d = d->view) - { if(!(o = (*d->meth->searchf)(d, obj, type)) ) - continue; - _DTDSC(d->disc,ky,sz,lk,cmpf); - ok = _DTKEY(o,ky,sz); - - if(n) /* get the right one among all dictionaries */ - { cmp = _DTCMP(d,ok,nk,d->disc,cmpf,sz); - if(((type & (DT_NEXT|DT_FIRST)) && cmp < 0) || - ((type & (DT_PREV|DT_LAST)) && cmp > 0) ) - goto a_dj; - } - else /* looks good for now */ - { a_dj: p = d; - n = o; - nk = ok; - } - } - - dt->walk = p; - return n; - } - - /* non-ordered methods */ - if(!(type & (DT_NEXT|DT_PREV)) ) - return NIL(void*); - - if(!dt->walk || obj != _DTOBJ(dt->walk->data->here, dt->walk->disc->link) ) - { for(d = dt; d; d = d->view) - if((o = (*(d->meth->searchf))(d, obj, DT_SEARCH)) ) - break; - dt->walk = d; - if(!(obj = o) ) - return NIL(void*); - } - - for(d = dt->walk, obj = (*d->meth->searchf)(d, obj, type);; ) - { while(obj) /* keep moving until finding an uncovered object */ - { for(p = dt; ; p = p->view) - { if(p == d) /* adjacent object is uncovered */ - return obj; - if((*(p->meth->searchf))(p, obj, DT_SEARCH) ) - break; - } - obj = (*d->meth->searchf)(d, obj, type); - } - - if(!(d = dt->walk = d->view) ) /* move on to next dictionary */ - return NIL(void*); - else if(type&DT_NEXT) - obj = (*(d->meth->searchf))(d,NIL(void*),DT_FIRST); - else obj = (*(d->meth->searchf))(d,NIL(void*),DT_LAST); - } -} - -Dt_t* dtview(reg Dt_t* dt, reg Dt_t* view) -{ - reg Dt_t* d; - - UNFLATTEN(dt); - if(view) - { UNFLATTEN(view); - if(view->meth != dt->meth) /* must use the same method */ - return NIL(Dt_t*); - } - - /* make sure there won't be a cycle */ - for(d = view; d; d = d->view) - if(d == dt) - return NIL(Dt_t*); - - /* no more viewing lower dictionary */ - if((d = dt->view) ) - d->nview -= 1; - dt->view = dt->walk = NIL(Dt_t*); - - if(!view) - { dt->searchf = dt->meth->searchf; - return d; - } - - /* ok */ - dt->view = view; - dt->searchf = dtvsearch; - view->nview += 1; - - return view; -} diff --git a/internal/ccall/cdt/dtwalk.c b/internal/ccall/cdt/dtwalk.c deleted file mode 100644 index fca39e7..0000000 --- a/internal/ccall/cdt/dtwalk.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "dthdr.h" - -/* Walk a dictionary and all dictionaries viewed through it. -** userf: user function -** -** Written by Kiem-Phong Vo (5/25/96) -*/ - -int dtwalk(reg Dt_t* dt, int (*userf)(Dt_t*, void*, void*), void* data) -{ - reg void *obj, *next; - reg Dt_t* walk; - reg int rv; - - for(obj = dtfirst(dt); obj; ) - { if(!(walk = dt->walk) ) - walk = dt; - next = dtnext(dt,obj); - if((rv = (*userf)(walk, obj, data )) < 0) - return rv; - obj = next; - } - return 0; -} diff --git a/internal/ccall/cdt/dummy.go b/internal/ccall/cdt/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/cdt/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/cgraph.c b/internal/ccall/cgraph.c deleted file mode 100644 index f49e4d4..0000000 --- a/internal/ccall/cgraph.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "cgraph/agerror.c" -#include "cgraph/agxbuf.c" -#include "cgraph/apply.c" -#include "cgraph/attr.c" -#include "cgraph/edge.c" -#include "cgraph/flatten.c" -#include "cgraph/graph.c" -#include "cgraph/id.c" -#include "cgraph/imap.c" -#include "cgraph/io.c" -#include "cgraph/mem.c" -#include "cgraph/node.c" -#include "cgraph/obj.c" -#include "cgraph/pend.c" -#include "cgraph/rec.c" -#include "cgraph/refstr.c" -#include "cgraph/subg.c" -#include "cgraph/utils.c" -#include "cgraph/write.c" -#include "cgraph/grammar.c" - -Agraph_t *Ag_G_global = NULL; diff --git a/internal/ccall/cgraph.go b/internal/ccall/cgraph.go deleted file mode 100644 index aaf85a0..0000000 --- a/internal/ccall/cgraph.go +++ /dev/null @@ -1,1191 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -DGVLIBDIR=graphviz -#cgo CFLAGS: -Icdt -#cgo CFLAGS: -Icommon -#cgo CFLAGS: -Igvc -#cgo CFLAGS: -Ipathplan -#cgo CFLAGS: -Icgraph -#cgo CFLAGS: -Ifdpgen -#cgo CFLAGS: -Isfdpgen -#cgo CFLAGS: -Ixdot -#cgo CFLAGS: -Ilabel -#cgo CFLAGS: -Ipack -#cgo CFLAGS: -Iortho -#cgo CFLAGS: -Iosage -#cgo CFLAGS: -Ineatogen -#cgo CFLAGS: -Isparse -#cgo CFLAGS: -Icircogen -#cgo CFLAGS: -Irbtree -#cgo CFLAGS: -Ipatchwork -#cgo CFLAGS: -Itwopigen -#cgo CFLAGS: -I../ -#cgo CFLAGS: -I../libltdl -#cgo CFLAGS: -Wno-unused-result -Wno-format -Wno-pointer-to-int-cast -Wno-attributes -#include "config.h" -#include "cgraph.h" -#include - -void seterr(char *msg) -{ - agerr(AGERR, msg); -} -*/ -import "C" -import ( - "errors" - "unsafe" -) - -var ( - Agdirected = ToAgdesc(&C.Agdirected) - Agstrictdirected = ToAgdesc(&C.Agstrictdirected) - Agundirected = ToAgdesc(&C.Agundirected) - Agstrictundirected = ToAgdesc(&C.Agstrictundirected) -) - -type Agrec struct { - c *C.Agrec_t -} - -func (g *Agrec) C() *C.Agrec_t { - if g == nil { - return nil - } - return g.c -} - -func ToAgrec(c *C.Agrec_t) *Agrec { - if c == nil { - return nil - } - return &Agrec{c: c} -} - -func (g *Agrec) Name() string { - return C.GoString(g.c.name) -} - -func (g *Agrec) SetName(v string) { - g.c.name = C.CString(v) -} - -func (g *Agrec) Next() *Agrec { - return ToAgrec(g.c.next) -} - -func (g *Agrec) SetNext(v *Agrec) { - g.c.next = v.c.next -} - -type Agtag struct { - c *C.Agtag_t -} - -func ToAgtag(c *C.Agtag_t) *Agtag { - if c == nil { - return nil - } - return &Agtag{c: c} -} - -func (g *Agtag) C() *C.Agtag_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agtag) ID() uint64 { - return uint64(g.c.id) -} - -func (g *Agtag) SetID(v uint64) { - g.c.id = C.IDTYPE(v) -} - -type Agobj struct { - c *C.Agobj_t -} - -func ToAgobj(c *C.Agobj_t) *Agobj { - if c == nil { - return nil - } - return &Agobj{c: c} -} - -func (g *Agobj) C() *C.Agobj_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agobj) Tag() *Agtag { - return ToAgtag(&g.c.tag) -} - -func (g *Agobj) SetTag(v *Agtag) { - c := v.c - if c == nil { - return - } - g.c.tag = *c -} - -func (g *Agobj) Data() *Agrec { - return ToAgrec(g.c.data) -} - -func (g *Agobj) SetData(v *Agrec) { - g.c.data = v.c -} - -type Agsubnode struct { - c *C.Agsubnode_t -} - -func ToAgsubnode(c *C.Agsubnode_t) *Agsubnode { - if c == nil { - return nil - } - return &Agsubnode{c: c} -} - -func (g *Agsubnode) C() *C.Agsubnode_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agsubnode) SeqLink() *Dtlink { - return ToDtlink(&g.c.seq_link) -} - -func (g *Agsubnode) SetSeqLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.seq_link = *c -} - -func (g *Agsubnode) IDLink() *Dtlink { - return ToDtlink(&g.c.id_link) -} - -func (g *Agsubnode) SetIDLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.id_link = *c -} - -func (g *Agsubnode) Node() *Agnode { - return ToAgnode(g.c.node) -} - -func (g *Agsubnode) SetNode(v *Agnode) { - g.c.node = v.c -} - -func (g *Agsubnode) InID() *Dtlink { - return ToDtlink(g.c.in_id) -} - -func (g *Agsubnode) SetInID(v *Dtlink) { - g.c.in_id = v.c -} - -func (g *Agsubnode) OutID() *Dtlink { - return ToDtlink(g.c.out_id) -} - -func (g *Agsubnode) SetOutID(v *Dtlink) { - g.c.out_id = v.c -} - -func (g *Agsubnode) InSeq() *Dtlink { - return ToDtlink(g.c.in_seq) -} - -func (g *Agsubnode) SetInSeq(v *Dtlink) { - g.c.in_seq = v.c -} - -func (g *Agsubnode) OutSeq() *Dtlink { - return ToDtlink(g.c.out_seq) -} - -func (g *Agsubnode) SetOutSeq(v *Dtlink) { - g.c.out_seq = v.c -} - -type Agnode struct { - c *C.Agnode_t -} - -func ToAgnode(c *C.Agnode_t) *Agnode { - if c == nil { - return nil - } - return &Agnode{c: c} -} - -func (g *Agnode) C() *C.Agnode_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agnode) Base() *Agobj { - return ToAgobj(&g.c.base) -} - -func (g *Agnode) SetBase(v *Agobj) { - c := v.c - if c == nil { - return - } - g.c.base = *c -} - -func (g *Agnode) Root() *Agraph { - return ToAgraph(g.c.root) -} - -func (g *Agnode) SetRoot(v *Agraph) { - g.c.root = v.c -} - -func (g *Agnode) Mainsub() *Agsubnode { - return ToAgsubnode(&g.c.mainsub) -} - -func (g *Agnode) SetMainsub(v *Agsubnode) { - c := v.c - if c == nil { - return - } - g.c.mainsub = *c -} - -type Agedge struct { - c *C.Agedge_t -} - -func ToAgedge(c *C.Agedge_t) *Agedge { - if c == nil { - return nil - } - return &Agedge{c: c} -} - -func (g *Agedge) C() *C.Agedge_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agedge) Base() *Agobj { - return ToAgobj(&g.c.base) -} - -func (g *Agedge) SetBase(v *Agobj) { - c := v.c - if c == nil { - return - } - g.c.base = *c -} - -func (g *Agedge) IDLink() *Dtlink { - return ToDtlink(&g.c.id_link) -} - -func (g *Agedge) SetIDLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.id_link = *c -} - -func (g *Agedge) SeqLink() *Dtlink { - return ToDtlink(&g.c.seq_link) -} - -func (g *Agedge) SetSeqLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.seq_link = *c -} - -func (g *Agedge) Node() *Agnode { - return ToAgnode(g.c.node) -} - -func (g *Agedge) SetNode(v *Agnode) { - g.c.node = v.c -} - -type Agedgepair struct { - c *C.Agedgepair_t -} - -func ToAgedgepair(c *C.Agedgepair_t) *Agedgepair { - if c == nil { - return nil - } - return &Agedgepair{c: c} -} - -func (g *Agedgepair) C() *C.Agedgepair_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agedgepair) Out() *Agedge { - return ToAgedge(&g.c.out) -} - -func (g *Agedgepair) SetOut(v *Agedge) { - c := v.c - if c == nil { - return - } - g.c.out = *c -} - -func (g *Agedgepair) In() *Agedge { - return ToAgedge(&g.c.in) -} - -func (g *Agedgepair) SetIn(v *Agedge) { - c := v.c - if c == nil { - return - } - g.c.in = *c -} - -type Agdesc struct { - c *C.Agdesc_t -} - -func ToAgdesc(c *C.Agdesc_t) *Agdesc { - if c == nil { - return nil - } - return &Agdesc{c: c} -} - -func (g *Agdesc) C() *C.Agdesc_t { - if g == nil { - return nil - } - return g.c -} - -type Agdisc struct { - c *C.Agdisc_t -} - -func ToAgdisc(c *C.Agdisc_t) *Agdisc { - if c == nil { - return nil - } - return &Agdisc{c: c} -} - -func (g *Agdisc) C() *C.Agdisc_t { - if g == nil { - return nil - } - return g.c -} - -type Agcbdisc struct { - c *C.Agcbdisc_t -} - -func ToAgcbdisc(c *C.Agcbdisc_t) *Agcbdisc { - if c == nil { - return nil - } - return &Agcbdisc{c: c} -} - -type Agcbstack struct { - c *C.Agcbstack_t -} - -func ToAgcbstack(c *C.Agcbstack_t) *Agcbstack { - if c == nil { - return nil - } - return &Agcbstack{c: c} -} - -func (g *Agcbstack) Prev() *Agcbstack { - return ToAgcbstack(g.c.prev) -} - -type Agdstate struct { - c *C.Agdstate_t -} - -func ToAgdstate(c *C.Agdstate_t) *Agdstate { - if c == nil { - return nil - } - return &Agdstate{c: c} -} - -func (g *Agdstate) Mem() unsafe.Pointer { - return g.c.mem -} - -func (g *Agdstate) ID() unsafe.Pointer { - return g.c.id -} - -type Agclos struct { - c *C.Agclos_t -} - -func ToAgclos(c *C.Agclos_t) *Agclos { - if c == nil { - return nil - } - return &Agclos{c: c} -} - -func (g *Agclos) Disc() *Agdisc { - return ToAgdisc(&g.c.disc) -} - -func (g *Agclos) SetDisc(v *Agdisc) { - c := v.c - if c == nil { - return - } - g.c.disc = *c -} - -func (g *Agclos) State() *Agdstate { - return ToAgdstate(&g.c.state) -} - -func (g *Agclos) SetState(v *Agdstate) { - c := v.c - if c == nil { - return - } - g.c.state = *c -} - -func (g *Agclos) Strdict() *Dict { - return ToDict(g.c.strdict) -} - -func (g *Agclos) SetStrdict(v *Dict) { - g.c.strdict = v.c -} - -func (g *Agclos) Seq() [3]uint64 { - seq := [3]uint64{} - seq[0] = uint64(g.c.seq[0]) - seq[1] = uint64(g.c.seq[1]) - seq[2] = uint64(g.c.seq[2]) - return seq -} - -func (g *Agclos) SetSeq(v []uint64) { - g.c.seq[0] = C.uint64_t(v[0]) - g.c.seq[1] = C.uint64_t(v[1]) - g.c.seq[2] = C.uint64_t(v[2]) -} - -func (g *Agclos) Cb() *Agcbstack { - return ToAgcbstack(g.c.cb) -} - -func (g *Agclos) SetCb(v *Agcbstack) { - g.c.cb = v.c -} - -func (g *Agclos) CallbacksEnabled() bool { - return uint(g.c.callbacks_enabled) == 1 -} - -func (g *Agclos) SetCallbacksEnabled(v bool) { - if v { - g.c.callbacks_enabled = 1 - } else { - g.c.callbacks_enabled = 0 - } -} - -func (g *Agclos) LookupByName() [3]*Dict { - v := [3]*Dict{} - v[0] = ToDict(g.c.lookup_by_name[0]) - v[1] = ToDict(g.c.lookup_by_name[1]) - v[2] = ToDict(g.c.lookup_by_name[2]) - return v -} - -func (g *Agclos) LookupByID() [3]*Dict { - v := [3]*Dict{} - v[0] = ToDict(g.c.lookup_by_id[0]) - v[1] = ToDict(g.c.lookup_by_id[1]) - v[2] = ToDict(g.c.lookup_by_id[2]) - return v -} - -type Agraph struct { - c *C.Agraph_t -} - -func ToAgraph(c *C.Agraph_t) *Agraph { - if c == nil { - return nil - } - return &Agraph{c: c} -} - -func (g *Agraph) C() *C.Agraph_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agraph) Base() *Agobj { - return ToAgobj(&g.c.base) -} - -func (g *Agraph) SetBase(v *Agobj) { - c := v.c - if c == nil { - return - } - g.c.base = *c -} - -func (g *Agraph) Desc() *Agdesc { - return ToAgdesc(&g.c.desc) -} - -func (g *Agraph) SetDesc(v *Agdesc) { - c := v.c - if c == nil { - return - } - g.c.desc = *c -} - -func (g *Agraph) Link() *Dtlink { - return ToDtlink(&g.c.link) -} - -func (g *Agraph) SetLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.link = *c -} - -func (g *Agraph) NSeq() *Dict { - return ToDict(g.c.n_seq) -} - -func (g *Agraph) SetNSeq(v *Dict) { - g.c.n_seq = v.c -} - -func (g *Agraph) NID() *Dict { - return ToDict(g.c.n_id) -} - -func (g *Agraph) SetNID(v *Dict) { - g.c.n_id = v.c -} - -func (g *Agraph) ESeq() *Dict { - return ToDict(g.c.e_seq) -} - -func (g *Agraph) SetESeq(v *Dict) { - g.c.e_seq = v.c -} - -func (g *Agraph) EID() *Dict { - return ToDict(g.c.e_id) -} - -func (g *Agraph) SetEID(v *Dict) { - g.c.e_id = v.c -} - -func (g *Agraph) GDict() *Dict { - return ToDict(g.c.g_dict) -} - -func (g *Agraph) SetGDict(v *Dict) { - g.c.g_dict = v.c -} - -func (g *Agraph) Parent() *Agraph { - return ToAgraph(g.c.parent) -} - -func (g *Agraph) SetParent(v *Agraph) { - g.c.parent = v.c -} - -func (g *Agraph) Root() *Agraph { - return ToAgraph(g.c.root) -} - -func (g *Agraph) SetRoot(v *Agraph) { - g.c.root = v.c -} - -func (g *Agraph) Clos() *Agclos { - return ToAgclos(g.c.clos) -} - -func (g *Agraph) SetClos(v *Agclos) { - g.c.clos = v.c -} - -type Agattr struct { - c *C.Agattr_t -} - -func ToAgattr(c *C.Agattr_t) *Agattr { - if c == nil { - return nil - } - return &Agattr{c: c} -} - -func (g *Agattr) C() *C.Agattr_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agattr) H() *Agrec { - return ToAgrec(&g.c.h) -} - -func (g *Agattr) SetH(v *Agrec) { - c := v.c - if c == nil { - return - } - g.c.h = *c -} - -func (g *Agattr) Dict() *Dict { - return ToDict(g.c.dict) -} - -func (g *Agattr) SetDict(v *Dict) { - g.c.dict = v.c -} - -func (g *Agattr) Str() []string { - v := []string{} - /* - i := 0 - for { - if g.c.str[i] == nil { - break - } - v = append(v, C.GoString(g.c.str[i])) - } - */ - return v -} - -func (g *Agattr) SetStr(v []string) { - -} - -type Agsym struct { - c *C.Agsym_t -} - -func ToAgsym(c *C.Agsym_t) *Agsym { - if c == nil { - return nil - } - return &Agsym{c: c} -} - -func (g *Agsym) C() *C.Agsym_t { - if g == nil { - return nil - } - return g.c -} - -func (g *Agsym) Link() *Dtlink { - return ToDtlink(&g.c.link) -} - -func (g *Agsym) SetLink(v *Dtlink) { - c := v.c - if c == nil { - return - } - g.c.link = *c -} - -func (g *Agsym) Name() string { - return C.GoString(g.c.name) -} - -func (g *Agsym) SetName(v string) { - g.c.name = C.CString(v) -} - -func (g *Agsym) Defval() string { - return C.GoString(g.c.defval) -} - -func (g *Agsym) SetDefval(v string) { - g.c.defval = C.CString(v) -} - -func (g *Agsym) ID() int { - return int(g.c.id) -} - -func (g *Agsym) SetID(v int) { - g.c.id = C.int(v) -} - -func (g *Agsym) Kind() uint { - return uint(g.c.kind) -} - -func (g *Agsym) SetKind(v uint) { - g.c.kind = C.uchar(v) -} - -func (g *Agsym) Fixed() uint { - return uint(g.c.fixed) -} - -func (g *Agsym) SetFixed(v uint) { - g.c.fixed = C.uchar(v) -} - -func (g *Agsym) Print() uint { - return uint(g.c.print) -} - -func (g *Agsym) SetPrint(v uint) { - g.c.print = C.uchar(v) -} - -type Agdatadict struct { - c *C.Agdatadict_t -} - -func ToAgdatadict(c *C.Agdatadict_t) *Agdatadict { - if c == nil { - return nil - } - return &Agdatadict{c: c} -} - -func (g *Agdatadict) H() *Agrec { - return ToAgrec(&g.c.h) -} - -func (g *Agdatadict) SetH(v *Agrec) { - c := v.c - if c == nil { - return - } - g.c.h = *c -} - -func (g *Agdatadict) DictN() *Dict { - return ToDict(g.c.dict.n) -} - -func (g *Agdatadict) SetDictN(v *Dict) { - g.c.dict.n = v.c -} - -func (g *Agdatadict) DictE() *Dict { - return ToDict(g.c.dict.e) -} - -func (g *Agdatadict) SetDictE(v *Dict) { - g.c.dict.e = v.c -} - -func (g *Agdatadict) DictG() *Dict { - return ToDict(g.c.dict.g) -} - -func (g *Agdatadict) SetDictG(v *Dict) { - g.c.dict.g = v.c -} - -func Agpushdisc(g *Agraph, disc *Agcbdisc, state unsafe.Pointer) { - C.agpushdisc(g.c, disc.c, state) -} - -func Agpopdisc(g *Agraph, disc *Agcbdisc) int { - return int(C.agpopdisc(g.c, disc.c)) -} - -func Agcallbacks(g *Agraph, flag int) int { - return int(C.agcallbacks(g.c, C.int(flag))) -} - -func Agopen(name string, desc *Agdesc, disc *Agdisc) (*Agraph, error) { - graph := ToAgraph(C.agopen(C.CString(name), *desc.C(), disc.C())) - return graph, Aglasterr() -} - -func Agclose(g *Agraph) error { - C.agclose(g.c) - return Aglasterr() -} - -func Agread(ch unsafe.Pointer, disc *Agdisc) (*Agraph, error) { - graph := ToAgraph(C.agread(ch, disc.c)) - return graph, Aglasterr() -} - -func Agmemread(cp string) (*Agraph, error) { - graph := ToAgraph(C.agmemread(C.CString(cp))) - return graph, Aglasterr() -} - -func Agsetfile(file string) { - C.agsetfile(C.CString(file)) -} - -func Agwrite(g *Agraph, ch unsafe.Pointer) error { - C.agwrite(g.c, ch) - return Aglasterr() -} - -func Agisdirected(g *Agraph) bool { - return C.agisdirected(g.c) == 1 -} - -func Agisundirected(g *Agraph) bool { - return C.agisundirected(g.c) == 1 -} - -func Agisstrict(g *Agraph) bool { - return C.agisstrict(g.c) == 1 -} - -func Agissimple(g *Agraph) bool { - return C.agissimple(g.c) == 1 -} - -func Agnodef(g *Agraph, name string, createFlag int) (*Agnode, error) { - node := ToAgnode(C.agnode(g.c, C.CString(name), C.int(createFlag))) - return node, Aglasterr() -} - -func Agidnode(g *Agraph, id uint64, createFlag int) (*Agnode, error) { - node := ToAgnode(C.agidnode(g.c, C.IDTYPE(id), C.int(createFlag))) - return node, Aglasterr() -} - -func Agsubnodef(g *Agraph, n *Agnode, createFlag int) (*Agnode, error) { - node := ToAgnode(C.agsubnode(g.c, n.c, C.int(createFlag))) - return node, Aglasterr() -} - -func Agfstnode(g *Agraph) *Agnode { - return ToAgnode(C.agfstnode(g.c)) -} - -func Agnxtnode(g *Agraph, n *Agnode) *Agnode { - return ToAgnode(C.agnxtnode(g.c, n.c)) -} - -func Aglstnode(g *Agraph) *Agnode { - return ToAgnode(C.aglstnode(g.c)) -} - -func Agprvnode(g *Agraph, n *Agnode) *Agnode { - return ToAgnode(C.agprvnode(g.c, n.c)) -} - -func Agsubrep(g *Agraph, n *Agnode) *Agsubnode { - return ToAgsubnode(C.agsubrep(g.c, n.c)) -} - -func Agnodebefore(u *Agnode, v *Agnode) error { - C.agnodebefore(u.c, v.c) - return Aglasterr() -} - -func Agedgef(g *Agraph, t *Agnode, h *Agnode, name string, createFlag int) (*Agedge, error) { - edge := ToAgedge(C.agedge(g.c, t.c, h.c, C.CString(name), C.int(createFlag))) - return edge, Aglasterr() -} - -func Agidedge(g *Agraph, t *Agnode, h *Agnode, id uint64, createFlag int) (*Agedge, error) { - edge := ToAgedge(C.agidedge(g.c, t.c, h.c, C.IDTYPE(id), C.int(createFlag))) - return edge, Aglasterr() -} - -func Agsubedge(g *Agraph, e *Agedge, createFlag int) (*Agedge, error) { - edge := ToAgedge(C.agsubedge(g.c, e.c, C.int(createFlag))) - return edge, Aglasterr() -} - -func Agfstin(g *Agraph, n *Agnode) *Agedge { - return ToAgedge(C.agfstin(g.c, n.c)) -} - -func Agnxtin(g *Agraph, n *Agedge) *Agedge { - return ToAgedge(C.agnxtin(g.c, n.c)) -} - -func Agfstout(g *Agraph, n *Agnode) *Agedge { - return ToAgedge(C.agfstout(g.c, n.c)) -} - -func Agnxtout(g *Agraph, e *Agedge) *Agedge { - return ToAgedge(C.agnxtout(g.c, e.c)) -} - -func Agfstedge(g *Agraph, n *Agnode) *Agedge { - return ToAgedge(C.agfstedge(g.c, n.c)) -} - -func Agnxtedge(g *Agraph, e *Agedge, n *Agnode) *Agedge { - return ToAgedge(C.agnxtedge(g.c, e.c, n.c)) -} - -func Agcontains(g *Agraph, p unsafe.Pointer) bool { - return C.agcontains(g.c, p) == 1 -} - -func Agnameof(p unsafe.Pointer) string { - return C.GoString(C.agnameof(p)) -} - -func AgrelabelNode(n *Agnode, newname string) error { - C.agrelabel_node(n.c, C.CString(newname)) - return Aglasterr() -} - -func Agdelete(g *Agraph, obj unsafe.Pointer) error { - C.agdelete(g.c, obj) - return Aglasterr() -} - -func Agdelsubg(g *Agraph, sub *Agraph) int32 { - return int32(C.agdelsubg(g.c, sub.c)) -} - -func Agdelnode(g *Agraph, argN *Agnode) int { - return int(C.agdelnode(g.c, argN.c)) -} - -func Agdeledge(g *Agraph, argE *Agedge) int { - return int(C.agdeledge(g.c, argE.c)) -} - -func Agobjkind(obj unsafe.Pointer) int { - return int(C.agobjkind(obj)) -} - -func Agstrdup(g *Agraph, s string) string { - return C.GoString(C.agstrdup(g.c, C.CString(s))) -} - -func AgstrdupHTML(g *Agraph, s string) string { - return C.GoString(C.agstrdup_html(g.c, C.CString(s))) -} - -func Aghtmlstr(s string) int { - return int(C.aghtmlstr(C.CString(s))) -} - -func Agstrbind(g *Agraph, s string) string { - return C.GoString(C.agstrbind(g.c, C.CString(s))) -} - -func Agstrfree(g *Agraph, s string) int { - return int(C.agstrfree(g.c, C.CString(s))) -} - -func Agcanon(s string, i int) string { - return C.GoString(C.agcanon(C.CString(s), C.int(i))) -} - -func Agstrcanon(a0 string, a1 string) string { - return C.GoString(C.agstrcanon(C.CString(a0), C.CString(a1))) -} - -func AgcanonStr(str string) string { - return C.GoString(C.agcanonStr(C.CString(str))) -} - -func Agattrf(g *Agraph, kind int, name string, value string) *Agsym { - return ToAgsym(C.agattr(g.c, C.int(kind), C.CString(name), C.CString(value))) -} - -func Agattrsym(obj unsafe.Pointer, name string) *Agsym { - return ToAgsym(C.agattrsym(obj, C.CString(name))) -} - -func Agnxtattr(g *Agraph, kind int, attr *Agsym) *Agsym { - return ToAgsym(C.agnxtattr(g.c, C.int(kind), attr.c)) -} - -func Agcopyattr(oldobj unsafe.Pointer, newobj unsafe.Pointer) int { - return int(C.agcopyattr(oldobj, newobj)) -} - -func Agbindrec(obj unsafe.Pointer, name string, size uint, moveToFront int) unsafe.Pointer { - return C.agbindrec(obj, C.CString(name), C.uint(size), C.int(moveToFront)) -} - -func Aggetrec(obj unsafe.Pointer, name string, moveToFront int) *Agrec { - return ToAgrec(C.aggetrec(obj, C.CString(name), C.int(moveToFront))) -} - -func Agdelrec(obj unsafe.Pointer, name string) int { - return int(C.agdelrec(obj, C.CString(name))) -} - -func Aginit(g *Agraph, kind int, recName string, recSize int, moveToFront int) { - C.aginit(g.c, C.int(kind), C.CString(recName), C.int(recSize), C.int(moveToFront)) -} - -func Agclean(g *Agraph, kind int, recName string) { - C.agclean(g.c, C.int(kind), C.CString(recName)) -} - -func Agget(obj unsafe.Pointer, name string) string { - return C.GoString(C.agget(obj, C.CString(name))) -} - -func Agxget(obj unsafe.Pointer, sym *Agsym) string { - return C.GoString(C.agxget(obj, sym.c)) -} - -func Agset(obj unsafe.Pointer, name string, value string) int { - return int(C.agset(obj, C.CString(name), C.CString(value))) -} - -func Agxset(obj unsafe.Pointer, sym *Agsym, value string) int { - return int(C.agxset(obj, sym.c, C.CString(value))) -} - -func Agsafeset(obj unsafe.Pointer, name string, value string, def string) int { - return int(C.agsafeset(obj, C.CString(name), C.CString(value), C.CString(def))) -} - -func Agsubg(g *Agraph, name string, cflag int) *Agraph { - return ToAgraph(C.agsubg(g.c, C.CString(name), C.int(cflag))) -} - -func Agidsubg(g *Agraph, id uint64, cflag int) *Agraph { - return ToAgraph(C.agidsubg(g.c, C.IDTYPE(id), C.int(cflag))) -} - -func Agfstsubg(g *Agraph) *Agraph { - return ToAgraph(C.agfstsubg(g.c)) -} - -func Agnxtsubg(subg *Agraph) *Agraph { - return ToAgraph(C.agnxtsubg(subg.c)) -} - -func Agparent(g *Agraph) *Agraph { - return ToAgraph(C.agparent(g.c)) -} - -func Agnnodes(g *Agraph) int { - return int(C.agnnodes(g.c)) -} - -func Agnedges(g *Agraph) int { - return int(C.agnedges(g.c)) -} - -func Agnsubg(g *Agraph) int { - return int(C.agnsubg(g.c)) -} - -func Agdegree(g *Agraph, n *Agnode, in int, out int) int { - return int(C.agdegree(g.c, n.c, C.int(in), C.int(out))) -} - -func Agcountuniqedges(g *Agraph, n *Agnode, in int, out int) int { - return int(C.agcountuniqedges(g.c, n.c, C.int(in), C.int(out))) -} - -func Agalloc(g *Agraph, size uint) unsafe.Pointer { - return C.agalloc(g.c, C.size_t(size)) -} - -func Agfree(g *Agraph, ptr unsafe.Pointer) { - C.agfree(g.c, ptr) -} - -func Agflatten(g *Agraph, flag int) { - C.agflatten(g.c, C.int(flag)) -} - -func Aginternalmapclearlocalnames(g *Agraph) { - C.aginternalmapclearlocalnames(g.c) -} - -func Aglasterr() error { - s := C.aglasterr() - if s == nil { - return nil - } - v := C.GoString(s) - C.free(unsafe.Pointer(s)) - return errors.New(v) -} - -func Agerr(msg string) { - s := C.CString(msg) - C.seterr(s) - C.free(unsafe.Pointer(s)) -} - -func Agclearerrors() { - C.agclearerrors() -} - -func init() { - C.agseterr(C.AGMAX) -} diff --git a/internal/ccall/cgraph/agerror.c b/internal/ccall/cgraph/agerror.c deleted file mode 100644 index 491d264..0000000 --- a/internal/ccall/cgraph/agerror.c +++ /dev/null @@ -1,185 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include - -#define MAX(a,b) ((a)>(b)?(a):(b)) -static agerrlevel_t agerrno; /* Last error level */ -static agerrlevel_t agerrlevel = AGWARN; /* Report errors >= agerrlevel */ -static int agmaxerr; - -static long aglast; /* Last message */ -static FILE *agerrout; /* Message file */ -static agusererrf usererrf; /* User-set error function */ - -agusererrf -agseterrf (agusererrf newf) -{ - agusererrf oldf = usererrf; - usererrf = newf; - return oldf; -} - -agerrlevel_t agseterr(agerrlevel_t lvl) -{ - agerrlevel_t oldv = agerrlevel; - agerrlevel = lvl; - return oldv; -} - -char *aglasterr() -{ - long endpos; - long len; - char *buf; - - if (!agerrout) - return 0; - fflush(agerrout); - endpos = ftell(agerrout); - len = endpos - aglast; - buf = (char*)malloc(len + 1); - fseek(agerrout, aglast, SEEK_SET); - fread(buf, sizeof(char), len, agerrout); - buf[len] = '\0'; - fseek(agerrout, endpos, SEEK_SET); - - return buf; -} - -/* userout: - * Report messages using a user-supplied write function - */ -static void -userout (agerrlevel_t level, const char *fmt, va_list args) -{ - static char* buf; - static int bufsz = 1024; - char* np; - int n; - - if (!buf) { - buf = (char*)malloc(bufsz); - if (!buf) { - fputs("userout: could not allocate memory\n", stderr ); - return; - } - } - - if (level != AGPREV) { - usererrf ((level == AGERR) ? "Error" : "Warning"); - usererrf (": "); - } - - while (1) { - n = vsnprintf(buf, bufsz, fmt, args); - if ((n > -1) && (n < bufsz)) { - usererrf (buf); - break; - } - bufsz = MAX(bufsz*2,n+1); - if ((np = (char*)realloc(buf, bufsz)) == NULL) { - fputs("userout: could not allocate memory\n", stderr ); - return; - } - } - va_end(args); -} - -static int agerr_va(agerrlevel_t level, const char *fmt, va_list args) -{ - agerrlevel_t lvl; - - /* Use previous error level if continuation message; - * Convert AGMAX to AGERROR; - * else use input level - */ - lvl = (level == AGPREV ? agerrno : (level == AGMAX) ? AGERR : level); - - /* store this error level */ - agerrno = lvl; - agmaxerr = MAX(agmaxerr, agerrno); - - /* We report all messages whose level is bigger than the user set agerrlevel - * Setting agerrlevel to AGMAX turns off immediate error reporting. - */ - if (lvl >= agerrlevel) { - if (usererrf) - userout (level, fmt, args); - else { - if (level != AGPREV) - fprintf(stderr, "%s: ", (level == AGERR) ? "Error" : "Warning"); - vfprintf(stderr, fmt, args); - va_end(args); - } - return 0; - } - - if (!agerrout) { - agerrout = tmpfile(); - if (!agerrout) - return 1; - } - - if (level != AGPREV) - aglast = ftell(agerrout); - vfprintf(agerrout, fmt, args); - return 0; -} - -int agerr(agerrlevel_t level, const char *fmt, ...) -{ - va_list args; - int ret; - - va_start(args, fmt); - ret = agerr_va(level, fmt, args); - va_end(args); - return ret; -} - -void agerrorf(const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - agerr_va(AGERR, fmt, args); - va_end(args); -} - -void agwarningf(const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - agerr_va(AGWARN, fmt, args); - va_end(args); -} - -int agerrors() { return agmaxerr; } - -int agreseterrors() -{ - int rc = agmaxerr; - agmaxerr = 0; - return rc; -} - -void agclearerrors() -{ - if (agerrout) - fclose(agerrout); - agerrout = NULL; - aglast = 0; -} \ No newline at end of file diff --git a/internal/ccall/cgraph/agxbuf.c b/internal/ccall/cgraph/agxbuf.c deleted file mode 100644 index a2a71df..0000000 --- a/internal/ccall/cgraph/agxbuf.c +++ /dev/null @@ -1,112 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include -#include - -#define N_GNEW(n,t) (t*)malloc((n)*sizeof(t)) - -/* agxbinit: - * Assume if init is non-null, hint = sizeof(init[]) - */ -void agxbinit(agxbuf * xb, unsigned int hint, unsigned char *init) -{ - if (init) { - xb->buf = init; - xb->dyna = 0; - } else { - if (hint == 0) - hint = BUFSIZ; - xb->dyna = 1; - xb->buf = N_GNEW(hint, unsigned char); - } - xb->eptr = xb->buf + hint; - xb->ptr = xb->buf; - *xb->ptr = '\0'; -} - -/* agxbmore; - * Expand buffer to hold at least ssz more bytes. - */ -int agxbmore(agxbuf * xb, size_t ssz) -{ - size_t cnt = 0; /* current no. of characters in buffer */ - size_t size = 0; /* current buffer size */ - size_t nsize = 0; /* new buffer size */ - unsigned char *nbuf; /* new buffer */ - - size = (size_t) (xb->eptr - xb->buf); - nsize = 2 * size; - if (size + ssz > nsize) - nsize = size + ssz; - cnt = (size_t) (xb->ptr - xb->buf); - if (xb->dyna) { - nbuf = realloc(xb->buf, nsize); - } else { - nbuf = N_GNEW(nsize, unsigned char); - memcpy(nbuf, xb->buf, cnt); - xb->dyna = 1; - } - xb->buf = nbuf; - xb->ptr = xb->buf + cnt; - xb->eptr = xb->buf + nsize; - return 0; -} - -/* agxbput_n: - * Append string s of length n onto xb - */ -size_t agxbput_n(agxbuf * xb, const char *s, size_t ssz) -{ - if (xb->ptr + ssz > xb->eptr) - agxbmore(xb, ssz); - memcpy(xb->ptr, s, ssz); - xb->ptr += ssz; - return ssz; -} - -/* agxbput: - * Append string s into xb - */ -size_t agxbput(agxbuf * xb, const char *s) -{ - size_t ssz = strlen(s); - - return agxbput_n(xb, s, ssz); -} - -/* agxbfree: - * Free any malloced resources. - */ -void agxbfree(agxbuf * xb) -{ - if (xb->dyna) - free(xb->buf); -} - -/* agxbpop: - * Removes last character added, if any. - */ -int agxbpop(agxbuf * xb) -{ - int c; - if (xb->ptr > xb->buf) { - c = *xb->ptr--; - return c; - } else - return -1; - -} diff --git a/internal/ccall/cgraph/agxbuf.h b/internal/ccall/cgraph/agxbuf.h deleted file mode 100644 index a36ce23..0000000 --- a/internal/ccall/cgraph/agxbuf.h +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef AGXBUF_H -#define AGXBUF_H - -/* Extensible buffer: - * Malloc'ed memory is never released until agxbfree is called. - */ - typedef struct { - unsigned char *buf; /* start of buffer */ - unsigned char *ptr; /* next place to write */ - unsigned char *eptr; /* end of buffer */ - int dyna; /* true if buffer is malloc'ed */ - } agxbuf; - -/* agxbinit: - * Initializes new agxbuf; caller provides memory. - * Assume if init is non-null, hint = sizeof(init[]) - */ - extern void agxbinit(agxbuf * xb, unsigned int hint, - unsigned char *init); - -/* agxbput_n: - * Append string s of length n into xb - */ - extern size_t agxbput_n(agxbuf * xb, const char *s, size_t n); - -/* agxbput: - * Append string s into xb - */ - extern size_t agxbput(agxbuf * xb, const char *s); - -/* agxbfree: - * Free any malloced resources. - */ - extern void agxbfree(agxbuf * xb); - -/* agxbpop: - * Removes last character added, if any. - */ - extern int agxbpop(agxbuf * xb); - -/* agxbmore: - * Expand buffer to hold at least ssz more bytes. - */ - extern int agxbmore(agxbuf * xb, size_t ssz); - -/* agxbputc: - * Add character to buffer. - * int agxbputc(agxbuf*, char) - */ -#define agxbputc(X,C) ((((X)->ptr >= (X)->eptr) ? agxbmore(X,1) : 0), (void)(*(X)->ptr++ = ((unsigned char)C))) - -/* agxbuse: - * Null-terminates buffer; resets and returns pointer to data; - * char* agxbuse(agxbuf* xb) - */ -#define agxbuse(X) ((void)agxbputc(X,'\0'),(char*)((X)->ptr = (X)->buf)) - -/* agxbstart: - * Return pointer to beginning of buffer. - * char* agxbstart(agxbuf* xb) - */ -#define agxbstart(X) ((char*)((X)->buf)) - -/* agxblen: - * Return number of characters currently stored. - * int agxblen(agxbuf* xb) - */ -#define agxblen(X) (((X)->ptr)-((X)->buf)) - -/* agxbclear: - * Resets pointer to data; - * void agxbclear(agxbuf* xb) - */ -#define agxbclear(X) ((void)((X)->ptr = (X)->buf)) - -/* agxbnext: - * Next position for writing. - * char* agxbnext(agxbuf* xb) - */ -#define agxbnext(X) ((char*)((X)->ptr)) - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/cgraph/apply.c b/internal/ccall/cgraph/apply.c deleted file mode 100644 index 467c57b..0000000 --- a/internal/ccall/cgraph/apply.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -/* The following functions take a graph and a template (node/edge/graph) - * and return the object representing the template within the local graph. - */ -static Agobj_t *subnode_search(Agraph_t * sub, Agobj_t * n) -{ - if (agraphof(n) == sub) - return n; - return (Agobj_t *) agsubnode(sub, (Agnode_t *) n, FALSE); -} - -static Agobj_t *subedge_search(Agraph_t * sub, Agobj_t * e) -{ - if (agraphof(e) == sub) - return e; - return (Agobj_t *) agsubedge(sub, (Agedge_t *) e, FALSE); -} - -static Agobj_t *subgraph_search(Agraph_t * sub, Agobj_t * g) -{ - NOTUSED(g); - return (Agobj_t *) sub; -} - -/* recursively apply objfn within the hierarchy of a graph. - * if obj is a node or edge, it and its images in every subg are visited. - * if obj is a graph, then it and its subgs are visited. - */ -static void rec_apply(Agraph_t * g, Agobj_t * obj, agobjfn_t fn, void *arg, - agobjsearchfn_t objsearch, int preorder) -{ - Agraph_t *sub; - Agobj_t *subobj; - - if (preorder) - fn(g, obj, arg); - for (sub = agfstsubg(g); sub; sub = agnxtsubg(sub)) { - if ((subobj = objsearch(sub, obj))) - rec_apply(sub, subobj, fn, arg, objsearch, preorder); - } - if (NOT(preorder)) - fn(g, obj, arg); -} - -/* external entry point (this seems to be one of those ineffective - * comments censured in books on programming style) */ -int agapply(Agraph_t * g, Agobj_t * obj, agobjfn_t fn, void *arg, - int preorder) -{ - Agobj_t *subobj; - - agobjsearchfn_t objsearch; - switch (AGTYPE(obj)) { - case AGRAPH: - objsearch = subgraph_search; - break; - case AGNODE: - objsearch = subnode_search; - break; - case AGOUTEDGE: - case AGINEDGE: - objsearch = subedge_search; - break; - default: - agerr(AGERR, "agapply: unknown object type %d\n", AGTYPE(obj)); - return FAILURE; - break; - } - if ((subobj = objsearch(g, obj))) { - rec_apply(g, subobj, fn, arg, objsearch, preorder); - return SUCCESS; - } else - return FAILURE; -} diff --git a/internal/ccall/cgraph/attr.c b/internal/ccall/cgraph/attr.c deleted file mode 100644 index 768249f..0000000 --- a/internal/ccall/cgraph/attr.c +++ /dev/null @@ -1,564 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -/* - * dynamic attributes - */ - -/* to create a graph's data dictionary */ - -#define MINATTR 4 /* minimum allocation */ - -static void freesym(Dict_t * d, void * obj, Dtdisc_t * disc); - -Dtdisc_t AgDataDictDisc = { - (int) offsetof(Agsym_t, name), /* use symbol name as key */ - -1, - (int) offsetof(Agsym_t, link), - NIL(Dtmake_f), - freesym, - NIL(Dtcompar_f), - NIL(Dthash_f) -}; - -static char DataDictName[] = "_AG_datadict"; -static void init_all_attrs(Agraph_t * g); -static Agdesc_t ProtoDesc = { 1, 0, 1, 0, 1, 1 }; -static Agraph_t *ProtoGraph; - -Agdatadict_t *agdatadict(Agraph_t * g, int cflag) -{ - Agdatadict_t *rv; - rv = (Agdatadict_t *) aggetrec(g, DataDictName, FALSE); - if (rv || !cflag) - return rv; - init_all_attrs(g); - rv = (Agdatadict_t *) aggetrec(g, DataDictName, FALSE); - return rv; -} - -Dict_t *agdictof(Agraph_t * g, int kind) -{ - Agdatadict_t *dd; - Dict_t *dict; - - dd = agdatadict(g, FALSE); - if (dd) - switch (kind) { - case AGRAPH: - dict = dd->dict.g; - break; - case AGNODE: - dict = dd->dict.n; - break; - case AGINEDGE: - case AGOUTEDGE: - dict = dd->dict.e; - break; - default: - agerr(AGERR,"agdictof: unknown kind %d\n", kind); - dict = NIL(Dict_t *); - break; - } else - dict = NIL(Dict_t *); - return dict; -} - -Agsym_t *agnewsym(Agraph_t * g, char *name, char *value, int id, int kind) -{ - Agsym_t *sym; - sym = agalloc(g, sizeof(Agsym_t)); - sym->kind = kind; - sym->name = agstrdup(g, name); - sym->defval = agstrdup(g, value); - sym->id = id; - return sym; -} - -static void agcopydict(Dict_t * src, Dict_t * dest, Agraph_t * g, int kind) -{ - Agsym_t *sym, *newsym; - - assert(dtsize(dest) == 0); - for (sym = (Agsym_t *) dtfirst(src); sym; - sym = (Agsym_t *) dtnext(src, sym)) { - newsym = agnewsym(g, sym->name, sym->defval, sym->id, kind); - newsym->print = sym->print; - newsym->fixed = sym->fixed; - dtinsert(dest, newsym); - } -} - -static Agdatadict_t *agmakedatadict(Agraph_t * g) -{ - Agraph_t *par; - Agdatadict_t *parent_dd, *dd; - - dd = (Agdatadict_t *) agbindrec(g, DataDictName, sizeof(Agdatadict_t), - FALSE); - dd->dict.n = agdtopen(g, &AgDataDictDisc, Dttree); - dd->dict.e = agdtopen(g, &AgDataDictDisc, Dttree); - dd->dict.g = agdtopen(g, &AgDataDictDisc, Dttree); - if ((par = agparent(g))) { - parent_dd = agdatadict(par, FALSE); - assert(dd != parent_dd); - dtview(dd->dict.n, parent_dd->dict.n); - dtview(dd->dict.e, parent_dd->dict.e); - dtview(dd->dict.g, parent_dd->dict.g); - } else { - if (ProtoGraph && (g != ProtoGraph)) { - /* it's not ok to dtview here for several reasons. the proto - graph could change, and the sym indices don't match */ - parent_dd = agdatadict(ProtoGraph, FALSE); - agcopydict(parent_dd->dict.n, dd->dict.n, g, AGNODE); - agcopydict(parent_dd->dict.e, dd->dict.e, g, AGEDGE); - agcopydict(parent_dd->dict.g, dd->dict.g, g, AGRAPH); - } - } - return dd; -} - -/* look up an attribute with possible viewpathing */ -Agsym_t *agdictsym(Dict_t * dict, char *name) -{ - Agsym_t key; - key.name = (char *) name; - return (Agsym_t *) dtsearch(dict, &key); -} - -/* look up attribute in local dictionary with no view pathing */ -Agsym_t *aglocaldictsym(Dict_t * dict, char *name) -{ - Agsym_t *rv; - Dict_t *view; - - view = dtview(dict, NIL(Dict_t *)); - rv = agdictsym(dict, name); - dtview(dict, view); - return rv; -} - -Agsym_t *agattrsym(void *obj, char *name) -{ - Agattr_t *data; - Agsym_t *rv; - char *arg = name; - - data = agattrrec((Agobj_t *) obj); - if (data) - rv = agdictsym(data->dict, arg); - else - rv = NILsym; - return rv; -} - -/* to create a graph's, node's edge's string attributes */ - -char *AgDataRecName = "_AG_strdata"; - -static int topdictsize(Agobj_t * obj) -{ - Dict_t *d; - - d = agdictof(agroot(agraphof(obj)), AGTYPE(obj)); - return d ? dtsize(d) : 0; -} - -/* g can be either the enclosing graph, or ProtoGraph */ -static Agrec_t *agmakeattrs(Agraph_t * context, void *obj) -{ - int sz; - Agattr_t *rec; - Agsym_t *sym; - Dict_t *datadict; - - rec = agbindrec(obj, AgDataRecName, sizeof(Agattr_t), FALSE); - datadict = agdictof(context, AGTYPE(obj)); - assert(datadict); - if (rec->dict == NIL(Dict_t *)) { - rec->dict = agdictof(agroot(context), AGTYPE(obj)); - /* don't malloc(0) */ - sz = topdictsize(obj); - if (sz < MINATTR) - sz = MINATTR; - rec->str = agalloc(agraphof(obj), (size_t) sz * sizeof(char *)); - /* doesn't call agxset() so no obj-modified callbacks occur */ - for (sym = (Agsym_t *) dtfirst(datadict); sym; - sym = (Agsym_t *) dtnext(datadict, sym)) - rec->str[sym->id] = agstrdup(agraphof(obj), sym->defval); - } else { - assert(rec->dict == datadict); - } - return (Agrec_t *) rec; -} - -static void freeattr(Agobj_t * obj, Agattr_t * attr) -{ - int i, sz; - Agraph_t *g; - - g = agraphof(obj); - sz = topdictsize(obj); - for (i = 0; i < sz; i++) - agstrfree(g, attr->str[i]); - agfree(g, attr->str); -} - -static void freesym(Dict_t * d, void * obj, Dtdisc_t * disc) -{ - Agsym_t *sym; - - NOTUSED(d); - sym = (Agsym_t *) obj; - NOTUSED(disc); - agstrfree(Ag_G_global, sym->name); - agstrfree(Ag_G_global, sym->defval); - agfree(Ag_G_global, sym); -} - -Agattr_t *agattrrec(void *obj) -{ - return (Agattr_t *) aggetrec(obj, AgDataRecName, FALSE); -} - - -static void addattr(Agraph_t * g, Agobj_t * obj, Agsym_t * sym) -{ - Agattr_t *attr; - - attr = (Agattr_t *) agattrrec(obj); - assert(attr != NIL(Agattr_t *)); - if (sym->id >= MINATTR) - attr->str = (char **) AGDISC(g, mem)->resize(AGCLOS(g, mem), - attr->str, - sym->id * - sizeof(char *), - (sym->id + - 1) * sizeof(char *)); - attr->str[sym->id] = agstrdup(g, sym->defval); - /* agmethod_upd(g,obj,sym); JCE and GN didn't like this. */ -} - - -static Agsym_t *setattr(Agraph_t * g, int kind, char *name, char *value) -{ - Agdatadict_t *dd; - Dict_t *ldict, *rdict; - Agsym_t *lsym, *psym, *rsym, *rv; - Agraph_t *root; - Agnode_t *n; - Agedge_t *e; - - assert(value); - root = agroot(g); - dd = agdatadict(g, TRUE); /* force initialization of string attributes */ - ldict = agdictof(g, kind); - lsym = aglocaldictsym(ldict, name); - if (lsym) { /* update old local definiton */ - agstrfree(g, lsym->defval); - lsym->defval = agstrdup(g, value); - rv = lsym; - } else { - psym = agdictsym(ldict, name); /* search with viewpath up to root */ - if (psym) { /* new local definition */ - lsym = agnewsym(g, name, value, psym->id, kind); - dtinsert(ldict, lsym); - rv = lsym; - } else { /* new global definition */ - rdict = agdictof(root, kind); - rsym = agnewsym(g, name, value, dtsize(rdict), kind); - dtinsert(rdict, rsym); - switch (kind) { - case AGRAPH: - agapply(root, (Agobj_t *) root, (agobjfn_t) addattr, - rsym, TRUE); - break; - case AGNODE: - for (n = agfstnode(root); n; n = agnxtnode(root, n)) - addattr(g, (Agobj_t *) n, rsym); - break; - case AGINEDGE: - case AGOUTEDGE: - for (n = agfstnode(root); n; n = agnxtnode(root, n)) - for (e = agfstout(root, n); e; e = agnxtout(root, e)) - addattr(g, (Agobj_t *) e, rsym); - break; - } - rv = rsym; - } - } - if (rv && (kind == AGRAPH)) - agxset(g, rv, value); - agmethod_upd(g, g, rv); /* JCE and GN wanted this */ - return rv; -} - -static Agsym_t *getattr(Agraph_t * g, int kind, char *name) -{ - Agsym_t *rv = 0; - Dict_t *dict; - dict = agdictof(g, kind); - if (dict) - rv = agdictsym(dict, name); /* viewpath up to root */ - return rv; -} - -/* - * create or update an existing attribute and return its descriptor. - * if the new value is NIL(char*), this is only a search, no update. - * when a new attribute is created, existing graphs/nodes/edges - * receive its default value. - */ -Agsym_t *agattr(Agraph_t * g, int kind, char *name, char *value) -{ - Agsym_t *rv; - - if (g == 0) { - if (ProtoGraph == 0) - ProtoGraph = agopen(0, ProtoDesc, 0); - g = ProtoGraph; - } - if (value) - rv = setattr(g, kind, name, value); - else - rv = getattr(g, kind, name); - return rv; -} - -Agsym_t *agnxtattr(Agraph_t * g, int kind, Agsym_t * attr) -{ - Dict_t *d; - Agsym_t *rv; - - if ((d = agdictof(g, kind))) { - if (attr) - rv = (Agsym_t *) dtnext(d, attr); - else - rv = (Agsym_t *) dtfirst(d); - } else - rv = 0; - return rv; -} - -/* Create or delete attributes associated with an object */ - -void agraphattr_init(Agraph_t * g) -{ - /* Agdatadict_t *dd; */ - /* Agrec_t *attr; */ - Agraph_t *context; - - g->desc.has_attrs = 1; - /* dd = */ agmakedatadict(g); - if (!(context = agparent(g))) - context = g; - /* attr = */ agmakeattrs(context, g); -} - -int agraphattr_delete(Agraph_t * g) -{ - Agdatadict_t *dd; - Agattr_t *attr; - - Ag_G_global = g; - if ((attr = agattrrec(g))) { - freeattr((Agobj_t *) g, attr); - agdelrec(g, attr->h.name); - } - - if ((dd = agdatadict(g, FALSE))) { - if (agdtclose(g, dd->dict.n)) return 1; - if (agdtclose(g, dd->dict.e)) return 1; - if (agdtclose(g, dd->dict.g)) return 1; - agdelrec(g, dd->h.name); - } - return 0; -} - -void agnodeattr_init(Agraph_t * g, Agnode_t * n) -{ - Agattr_t *data; - - data = agattrrec(n); - if ((!data) || (!data->dict)) - (void) agmakeattrs(g, n); -} - -void agnodeattr_delete(Agnode_t * n) -{ - Agattr_t *rec; - - if ((rec = agattrrec(n))) { - freeattr((Agobj_t *) n, rec); - agdelrec(n, AgDataRecName); - } -} - -void agedgeattr_init(Agraph_t * g, Agedge_t * e) -{ - Agattr_t *data; - - data = agattrrec(e); - if ((!data) || (!data->dict)) - (void) agmakeattrs(g, e); -} - -void agedgeattr_delete(Agedge_t * e) -{ - Agattr_t *rec; - - if ((rec = agattrrec(e))) { - freeattr((Agobj_t *) e, rec); - agdelrec(e, AgDataRecName); - } -} - -char *agget(void *obj, char *name) -{ - Agsym_t *sym; - Agattr_t *data; - char *rv; - - sym = agattrsym(obj, name); - if (sym == NILsym) - rv = 0; /* note was "", but this provides more info */ - else { - data = agattrrec((Agobj_t *) obj); - rv = (char *) (data->str[sym->id]); - } - return rv; -} - -char *agxget(void *obj, Agsym_t * sym) -{ - Agattr_t *data; - char *rv; - - data = agattrrec((Agobj_t *) obj); - assert((sym->id >= 0) && (sym->id < topdictsize(obj))); - rv = (char *) (data->str[sym->id]); - return rv; -} - -int agset(void *obj, char *name, char *value) -{ - Agsym_t *sym; - int rv; - - sym = agattrsym(obj, name); - if (sym == NILsym) - rv = FAILURE; - else - rv = agxset(obj, sym, value); - return rv; -} - -int agxset(void *obj, Agsym_t * sym, char *value) -{ - Agraph_t *g; - Agobj_t *hdr; - Agattr_t *data; - Agsym_t *lsym; - - g = agraphof(obj); - hdr = (Agobj_t *) obj; - data = agattrrec(hdr); - assert((sym->id >= 0) && (sym->id < topdictsize(obj))); - agstrfree(g, data->str[sym->id]); - data->str[sym->id] = agstrdup(g, value); - if (hdr->tag.objtype == AGRAPH) { - /* also update dict default */ - Dict_t *dict; - dict = agdatadict(g, FALSE)->dict.g; - if ((lsym = aglocaldictsym(dict, sym->name))) { - agstrfree(g, lsym->defval); - lsym->defval = agstrdup(g, value); - } else { - lsym = agnewsym(g, sym->name, value, sym->id, AGTYPE(hdr)); - dtinsert(dict, lsym); - } - } - agmethod_upd(g, obj, sym); - return SUCCESS; -} - -int agsafeset(void *obj, char *name, char *value, char *def) -{ - Agsym_t *a; - - a = agattr(agraphof(obj), AGTYPE(obj), name, 0); - if (!a) - a = agattr(agraphof(obj), AGTYPE(obj), name, def); - return agxset(obj, a, value); -} - - -/* - * attach attributes to the already created graph objs. - * presumably they were already initialized, so we don't invoke - * any of the old methods. - */ -static void init_all_attrs(Agraph_t * g) -{ - Agraph_t *root; - Agnode_t *n; - Agedge_t *e; - - root = agroot(g); - agapply(root, (Agobj_t *) root, (agobjfn_t) agraphattr_init, - NIL(Agdisc_t *), TRUE); - for (n = agfstnode(root); n; n = agnxtnode(root, n)) { - agnodeattr_init(g, n); - for (e = agfstout(root, n); e; e = agnxtout(root, e)) { - agedgeattr_init(g, e); - } - } -} - -/* agcopyattr: - * Assumes attributes have already been declared. - * Do not copy key attribute for edges, as this must be distinct. - * Returns non-zero on failure or if objects have different type. - */ -int agcopyattr(void *oldobj, void *newobj) -{ - Agraph_t *g; - Agsym_t *sym; - Agsym_t *newsym; - char* val; - char* nval; - int r = 1; - - g = agraphof(oldobj); - if (AGTYPE(oldobj) != AGTYPE(newobj)) - return 1; - sym = 0; - while ((sym = agnxtattr(g, AGTYPE(oldobj), sym))) { - newsym = agattrsym(newobj, sym->name); - if (!newsym) - return 1; - val = agxget(oldobj, sym); - r = agxset(newobj, newsym, val); - /* FIX(?): Each graph has its own string cache, so a whole new refstr is possibly - * allocated. If the original was an html string, make sure the new one is as well. - * If cgraph goes to single string table, this can be removed. - */ - if (aghtmlstr (val)) { - nval = agxget (newobj, newsym); - agmarkhtmlstr (nval); - } - } - return r; -} diff --git a/internal/ccall/cgraph/cghdr.h b/internal/ccall/cgraph/cghdr.h deleted file mode 100644 index 3947ee5..0000000 --- a/internal/ccall/cgraph/cghdr.h +++ /dev/null @@ -1,161 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef ATT_GRAPHPVT_H -#define ATT_GRAPHPVT_H 1 -#define _BLD_cgraph 1 - -#ifndef EXTERN -#define EXTERN extern -#endif - -#include "config.h" - -#include - -#include -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif /* HAVE_UNISTD_H */ -#ifdef DEBUG -#include -#else -#define assert(x) -#endif -#include - -#ifndef streq -#define streq(s,t) ((*s == *t) && !strcmp((s),(t))) -#endif -#define NOTUSED(var) (void) var - -#define NILgraph NIL(Agraph_t*) -#define NILnode NIL(Agnode_t*) -#define NILedge NIL(Agedge_t*) -#define NILsym NIL(Agsym_t*) -#define NILstr NIL(char*) - -#define SUCCESS 0 -#define FAILURE -1 -#define LOCALNAMEPREFIX '%' - -#define AGDISC(g,d) ((g)->clos->disc.d) -#define AGCLOS(g,d) ((g)->clos->state.d) -#define AGNEW(g,t) ((t*)(agalloc(g,sizeof(t)))) - -#define ISALNUM(c) ((isalnum(c)) || ((c) == '_') || (!isascii(c))) - - /* functional definitions */ -typedef Agobj_t *(*agobjsearchfn_t) (Agraph_t * g, Agobj_t * obj); -int agapply(Agraph_t * g, Agobj_t * obj, agobjfn_t fn, void *arg, - int preorder); - - /* global variables */ -EXTERN Agraph_t *Ag_G_global; -extern char *AgDataRecName; - - /* set ordering disciplines */ -extern Dtdisc_t Ag_subnode_id_disc; -extern Dtdisc_t Ag_subnode_seq_disc; -extern Dtdisc_t Ag_mainedge_id_disc; -extern Dtdisc_t Ag_subedge_id_disc; -extern Dtdisc_t Ag_mainedge_seq_disc; -extern Dtdisc_t Ag_subedge_seq_disc; -extern Dtdisc_t Ag_subgraph_id_disc; -extern Agcbdisc_t AgAttrdisc; - - /* internal constructor of graphs and subgraphs */ -Agraph_t *agopen1(Agraph_t * g); -int agstrclose(Agraph_t * g); - - /* ref string management */ -void agmarkhtmlstr(char *s); - - /* object set management */ -Agnode_t *agfindnode_by_id(Agraph_t * g, IDTYPE id); -Dtcompar_f agdictorder(Agraph_t *, Dict_t *, Dtcompar_f); -int agedgecmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc); -int agnamecmpf(Dict_t * d, void *, void *, Dtdisc_t * disc); -void agset_node_disc(Agraph_t * g, Dtdisc_t * disc); -uint64_t agnextseq(Agraph_t * g, int objtype); - -/* dict helper functions */ -Dict_t *agdtopen(Agraph_t * g, Dtdisc_t * disc, Dtmethod_t * method); -void agdtdisc(Agraph_t * g, Dict_t * dict, Dtdisc_t * disc); -long agdtdelete(Agraph_t * g, Dict_t * dict, void *obj); -int agdtclose(Agraph_t * g, Dict_t * dict); -void *agdictobjmem(Dict_t * dict, void * p, size_t size, - Dtdisc_t * disc); -void agdictobjfree(Dict_t * dict, void * p, Dtdisc_t * disc); - - /* name-value pair operations */ -Agdatadict_t *agdatadict(Agraph_t * g, int cflag); -Agattr_t *agattrrec(void *obj); - -void agraphattr_init(Agraph_t * g); -int agraphattr_delete(Agraph_t * g); -void agnodeattr_init(Agraph_t *g, Agnode_t * n); -void agnodeattr_delete(Agnode_t * n); -void agedgeattr_init(Agraph_t *g, Agedge_t * e); -void agedgeattr_delete(Agedge_t * e); - - /* parsing and lexing graph files */ -int aagparse(void); -void aglexinit(Agdisc_t * disc, void *ifile); -int aaglex(void); -void aglexeof(void); -void aglexbad(void); - - /* ID management */ -int agmapnametoid(Agraph_t * g, int objtype, char *str, - IDTYPE *result, int allocflag); -int agallocid(Agraph_t * g, int objtype, IDTYPE request); -void agfreeid(Agraph_t * g, int objtype, IDTYPE id); -char *agprintid(Agobj_t * obj); -int aginternalmaplookup(Agraph_t * g, int objtype, char *str, - IDTYPE *result); -void aginternalmapinsert(Agraph_t * g, int objtype, char *str, - IDTYPE result); -char *aginternalmapprint(Agraph_t * g, int objtype, IDTYPE id); -int aginternalmapdelete(Agraph_t * g, int objtype, IDTYPE id); -void aginternalmapclose(Agraph_t * g); -void agregister(Agraph_t * g, int objtype, void *obj); - - /* internal set operations */ -void agedgesetop(Agraph_t * g, Agedge_t * e, int insertion); -void agdelnodeimage(Agraph_t * g, Agnode_t * node, void *ignored); -void agdeledgeimage(Agraph_t * g, Agedge_t * edge, void *ignored); -void *agrebind0(Agraph_t * g, void *obj); /* unsafe */ -int agrename(Agobj_t * obj, char *newname); -void agrecclose(Agobj_t * obj); - -void agmethod_init(Agraph_t * g, void *obj); -void agmethod_upd(Agraph_t * g, void *obj, Agsym_t * sym); -void agmethod_delete(Agraph_t * g, void *obj); - -#define CB_INITIALIZE 100 -#define CB_UPDATE 101 -#define CB_DELETION 102 -void agsyspushdisc(Agraph_t * g, Agcbdisc_t * cb, void *state, int stack); -int agsyspopdisc(Agraph_t * g, Agcbdisc_t * cb, int stack); -void agrecord_callback(Agraph_t * g, Agobj_t * obj, int kind, - Agsym_t * optsym); -void aginitcb(Agraph_t * g, void *obj, Agcbstack_t * disc); -void agupdcb(Agraph_t * g, void *obj, Agsym_t * sym, Agcbstack_t * disc); -void agdelcb(Agraph_t * g, void *obj, Agcbstack_t * disc); - -#endif /* ATT_GRAPHPVT_H */ diff --git a/internal/ccall/cgraph/cgraph.h b/internal/ccall/cgraph/cgraph.h deleted file mode 100644 index 261fe8b..0000000 --- a/internal/ccall/cgraph/cgraph.h +++ /dev/null @@ -1,453 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef ATT_GRAPH_H -#define ATT_GRAPH_H - -#include -#include "cdt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef FALSE -#define FALSE (0) -#endif -#ifndef TRUE -#define TRUE (!FALSE) -#endif -#ifndef NOT -#define NOT(x) (!(x)) -#endif -#ifndef NIL -#define NIL(type) ((type)0) -#endif -#define NILgraph NIL(Agraph_t*) -#define NILnode NIL(Agnode_t*) -#define NILedge NIL(Agedge_t*) -#define NILsym NIL(Agsym_t*) - -typedef uint64_t IDTYPE; - -/* forward struct type declarations */ -typedef struct Agtag_s Agtag_t; -typedef struct Agobj_s Agobj_t; /* generic object header */ -typedef struct Agraph_s Agraph_t; /* graph, subgraph (or hyperedge) */ -typedef struct Agnode_s Agnode_t; /* node (atom) */ -typedef struct Agedge_s Agedge_t; /* node pair */ -typedef struct Agdesc_s Agdesc_t; /* graph descriptor */ -typedef struct Agmemdisc_s Agmemdisc_t; /* memory allocator */ -typedef struct Agiddisc_s Agiddisc_t; /* object ID allocator */ -typedef struct Agiodisc_s Agiodisc_t; /* IO services */ -typedef struct Agdisc_s Agdisc_t; /* union of client discipline methods */ -typedef struct Agdstate_s Agdstate_t; /* client state (closures) */ -typedef struct Agsym_s Agsym_t; /* string attribute descriptors */ -typedef struct Agattr_s Agattr_t; /* string attribute container */ -typedef struct Agcbdisc_s Agcbdisc_t; /* client event callbacks */ -typedef struct Agcbstack_s Agcbstack_t; /* enclosing state for cbdisc */ -typedef struct Agclos_s Agclos_t; /* common fields for graph/subgs */ -typedef struct Agrec_s Agrec_t; /* generic runtime record */ -typedef struct Agdatadict_s Agdatadict_t; /* set of dictionaries per graph */ -typedef struct Agedgepair_s Agedgepair_t; /* the edge object */ -typedef struct Agsubnode_s Agsubnode_t; - -/* Header of a user record. These records are attached by client programs -dynamically at runtime. A unique string ID must be given to each record -attached to the same object. Cgraph has functions to create, search for, -and delete these records. The records are maintained in a circular list, -with obj->data pointing somewhere in the list. The search function has -an option to lock this pointer on a given record. The application must -be written so only one such lock is outstanding at a time. */ - -struct Agrec_s { - char *name; - Agrec_t *next; - /* following this would be any programmer-defined data */ -}; - -/* Object tag for graphs, nodes, and edges. While there may be several structs -for a given node or edges, there is only one unique ID (per main graph). */ -struct Agtag_s { - unsigned objtype:2; /* see literal tags below */ - unsigned mtflock:1; /* move-to-front lock, see above */ - unsigned attrwf:1; /* attrs written (parity, write.c) */ - unsigned seq:(sizeof(unsigned) * 8 - 4); /* sequence no. */ - IDTYPE id; /* client ID */ -}; - - /* object tags */ -#define AGRAPH 0 /* can't exceed 2 bits. see Agtag_t. */ -#define AGNODE 1 -#define AGOUTEDGE 2 -#define AGINEDGE 3 /* (1 << 1) indicates an edge tag. */ -#define AGEDGE AGOUTEDGE /* synonym in object kind args */ - - /* a generic graph/node/edge header */ -struct Agobj_s { - Agtag_t tag; - Agrec_t *data; -}; - -#define AGTAG(obj) (((Agobj_t*)(obj))->tag) -#define AGTYPE(obj) (AGTAG(obj).objtype) -#define AGID(obj) (AGTAG(obj).id) -#define AGSEQ(obj) (AGTAG(obj).seq) -#define AGATTRWF(obj) (AGTAG(obj).attrwf) -#define AGDATA(obj) (((Agobj_t*)(obj))->data) - -/* This is the node struct allocated per graph (or subgraph). It resides -in the n_dict of the graph. The node set is maintained by libdict, but -transparently to libgraph callers. Every node may be given an optional -string name at its time of creation, or it is permissible to pass NIL(char*) -for the name. */ - -struct Agsubnode_s { /* the node-per-graph-or-subgraph record */ - Dtlink_t seq_link; /* must be first */ - Dtlink_t id_link; - Agnode_t *node; /* the object */ - Dtlink_t *in_id, *out_id; /* by node/ID for random access */ - Dtlink_t *in_seq, *out_seq; /* by node/sequence for serial access */ -}; - -struct Agnode_s { - Agobj_t base; - Agraph_t *root; - Agsubnode_t mainsub; /* embedded for main graph */ -}; - -struct Agedge_s { - Agobj_t base; - Dtlink_t id_link; /* main graph only */ - Dtlink_t seq_link; - Agnode_t *node; /* the endpoint node */ -}; - -struct Agedgepair_s { - Agedge_t out, in; -}; - -struct Agdesc_s { /* graph descriptor */ - unsigned directed:1; /* if edges are asymmetric */ - unsigned strict:1; /* if multi-edges forbidden */ - unsigned no_loop:1; /* if no loops */ - unsigned maingraph:1; /* if this is the top level graph */ - unsigned flatlock:1; /* if sets are flattened into lists in cdt */ - unsigned no_write:1; /* if a temporary subgraph */ - unsigned has_attrs:1; /* if string attr tables should be initialized */ - unsigned has_cmpnd:1; /* if may contain collapsed nodes */ -}; - -/* disciplines for external resources needed by libgraph */ - -struct Agmemdisc_s { /* memory allocator */ - void *(*open) (Agdisc_t*); /* independent of other resources */ - void *(*alloc) (void *state, size_t req); - void *(*resize) (void *state, void *ptr, size_t old, size_t req); - void (*free) (void *state, void *ptr); - void (*close) (void *state); -}; - -struct Agiddisc_s { /* object ID allocator */ - void *(*open) (Agraph_t * g, Agdisc_t*); /* associated with a graph */ - long (*map) (void *state, int objtype, char *str, IDTYPE *id, - int createflag); - long (*alloc) (void *state, int objtype, IDTYPE id); - void (*free) (void *state, int objtype, IDTYPE id); - char *(*print) (void *state, int objtype, IDTYPE id); - void (*close) (void *state); - void (*idregister) (void *state, int objtype, void *obj); -}; - -struct Agiodisc_s { - int (*afread) (void *chan, char *buf, int bufsize); - int (*putstr) (void *chan, const char *str); - int (*flush) (void *chan); /* sync */ - /* error messages? */ -}; - -struct Agdisc_s { /* user's discipline */ - Agmemdisc_t *mem; - Agiddisc_t *id; - Agiodisc_t *io; -}; - - /* default resource disciplines */ - -/*visual studio*/ -#if defined(_MSC_VER) && !defined(CGRAPH_EXPORTS) -#define extern __declspec(dllimport) -#endif -/*end visual studio*/ - -extern Agmemdisc_t AgMemDisc; -extern Agiddisc_t AgIdDisc; -extern Agiodisc_t AgIoDisc; - -extern Agdisc_t AgDefaultDisc; -#undef extern - -struct Agdstate_s { - void *mem; - void *id; - /* IO must be initialized and finalized outside Cgraph, - * and channels (FILES) are passed as void* arguments. */ -}; - -typedef void (*agobjfn_t) (Agraph_t * g, Agobj_t * obj, void *arg); -typedef void (*agobjupdfn_t) (Agraph_t * g, Agobj_t * obj, void *arg, - Agsym_t * sym); - -struct Agcbdisc_s { - struct { - agobjfn_t ins; - agobjupdfn_t mod; - agobjfn_t del; - } graph, node, edge; -}; - -struct Agcbstack_s { /* object event callbacks */ - Agcbdisc_t *f; /* methods */ - void *state; /* closure */ - Agcbstack_t *prev; /* kept in a stack, unlike other disciplines */ -}; - -struct Agclos_s { - Agdisc_t disc; /* resource discipline functions */ - Agdstate_t state; /* resource closures */ - Dict_t *strdict; /* shared string dict */ - uint64_t seq[3]; /* local object sequence number counter */ - Agcbstack_t *cb; /* user and system callback function stacks */ - unsigned char callbacks_enabled; /* issue user callbacks or hold them? */ - Dict_t *lookup_by_name[3]; - Dict_t *lookup_by_id[3]; -}; - -struct Agraph_s { - Agobj_t base; - Agdesc_t desc; - Dtlink_t link; - Dict_t *n_seq; /* the node set in sequence */ - Dict_t *n_id; /* the node set indexed by ID */ - Dict_t *e_seq, *e_id; /* holders for edge sets */ - Dict_t *g_dict; /* subgraphs - descendants */ - Agraph_t *parent, *root; /* subgraphs - ancestors */ - Agclos_t *clos; /* shared resources */ -}; - -extern void agpushdisc(Agraph_t * g, Agcbdisc_t * disc, void *state); -extern int agpopdisc(Agraph_t * g, Agcbdisc_t * disc); -extern int agcallbacks(Agraph_t * g, int flag); /* return prev value */ - -/* graphs */ -extern Agraph_t *agopen(char *name, Agdesc_t desc, Agdisc_t * disc); -extern int agclose(Agraph_t * g); -extern Agraph_t *agread(void *chan, Agdisc_t * disc); -extern Agraph_t *agmemread(const char *cp); -extern void agreadline(int); -extern void agsetfile(char *); -extern Agraph_t *agconcat(Agraph_t * g, void *chan, Agdisc_t * disc); -extern int agwrite(Agraph_t * g, void *chan); -extern int agisdirected(Agraph_t * g); -extern int agisundirected(Agraph_t * g); -extern int agisstrict(Agraph_t * g); -extern int agissimple(Agraph_t * g); - -/* nodes */ -extern Agnode_t *agnode(Agraph_t * g, char *name, int createflag); -extern Agnode_t *agidnode(Agraph_t * g, IDTYPE id, int createflag); -extern Agnode_t *agsubnode(Agraph_t * g, Agnode_t * n, int createflag); -extern Agnode_t *agfstnode(Agraph_t * g); -extern Agnode_t *agnxtnode(Agraph_t * g, Agnode_t * n); -extern Agnode_t *aglstnode(Agraph_t * g); -extern Agnode_t *agprvnode(Agraph_t * g, Agnode_t * n); - -extern Agsubnode_t *agsubrep(Agraph_t * g, Agnode_t * n); -extern int agnodebefore(Agnode_t *u, Agnode_t *v); /* we have no shame */ - -/* edges */ -extern Agedge_t *agedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, - char *name, int createflag); -extern Agedge_t *agidedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, - IDTYPE id, int createflag); -extern Agedge_t *agsubedge(Agraph_t * g, Agedge_t * e, int createflag); -extern Agedge_t *agfstin(Agraph_t * g, Agnode_t * n); -extern Agedge_t *agnxtin(Agraph_t * g, Agedge_t * e); -extern Agedge_t *agfstout(Agraph_t * g, Agnode_t * n); -extern Agedge_t *agnxtout(Agraph_t * g, Agedge_t * e); -extern Agedge_t *agfstedge(Agraph_t * g, Agnode_t * n); -extern Agedge_t *agnxtedge(Agraph_t * g, Agedge_t * e, Agnode_t * n); - -/* generic */ -extern Agraph_t *agraphof(void* obj); -extern Agraph_t *agroot(void* obj); -extern int agcontains(Agraph_t *, void *); -extern char *agnameof(void *); -extern int agrelabel(void *obj, char *name); /* scary */ -extern int agrelabel_node(Agnode_t * n, char *newname); -extern int agdelete(Agraph_t * g, void *obj); -extern long agdelsubg(Agraph_t * g, Agraph_t * sub); /* could be agclose */ -extern int agdelnode(Agraph_t * g, Agnode_t * arg_n); -extern int agdeledge(Agraph_t * g, Agedge_t * arg_e); -extern int agobjkind(void *); - -/* strings */ -extern char *agstrdup(Agraph_t *, char *); -extern char *agstrdup_html(Agraph_t *, char *); -extern int aghtmlstr(char *); -extern char *agstrbind(Agraph_t * g, char *); -extern int agstrfree(Agraph_t *, char *); -extern char *agcanon(char *, int); -extern char *agstrcanon(char *, char *); -extern char *agcanonStr(char *str); /* manages its own buf */ - -/* definitions for dynamic string attributes */ -struct Agattr_s { /* dynamic string attributes */ - Agrec_t h; /* common data header */ - Dict_t *dict; /* shared dict to interpret attr field */ - char **str; /* the attribute string values */ -}; - -struct Agsym_s { /* symbol in one of the above dictionaries */ - Dtlink_t link; - char *name; /* attribute's name */ - char *defval; /* its default value for initialization */ - int id; /* its index in attr[] */ - unsigned char kind; /* referent object type */ - unsigned char fixed; /* immutable value */ - unsigned char print; /* always print */ -}; - -struct Agdatadict_s { /* set of dictionaries per graph */ - Agrec_t h; /* installed in list of graph recs */ - struct { - Dict_t *n, *e, *g; - } dict; -}; - -extern Agsym_t *agattr(Agraph_t * g, int kind, char *name, char *value); -extern Agsym_t *agattrsym(void *obj, char *name); -extern Agsym_t *agnxtattr(Agraph_t * g, int kind, Agsym_t * attr); -extern int agcopyattr(void *oldobj, void *newobj); - -extern void *agbindrec(void *obj, char *name, unsigned int size, - int move_to_front); -extern Agrec_t *aggetrec(void *obj, char *name, int move_to_front); -extern int agdelrec(void *obj, char *name); -extern void aginit(Agraph_t * g, int kind, char *rec_name, int rec_size, - int move_to_front); -extern void agclean(Agraph_t * g, int kind, char *rec_name); - -extern char *agget(void *obj, char *name); -extern char *agxget(void *obj, Agsym_t * sym); -extern int agset(void *obj, char *name, char *value); -extern int agxset(void *obj, Agsym_t * sym, char *value); -extern int agsafeset(void* obj, char* name, char* value, char* def); - -/* defintions for subgraphs */ -extern Agraph_t *agsubg(Agraph_t * g, char *name, int cflag); /* constructor */ -extern Agraph_t *agidsubg(Agraph_t * g, IDTYPE id, int cflag); /* constructor */ -extern Agraph_t *agfstsubg(Agraph_t * g), *agnxtsubg(Agraph_t * subg); -extern Agraph_t *agparent(Agraph_t * g); - -/* set cardinality */ -extern int agnnodes(Agraph_t * g), agnedges(Agraph_t * g), agnsubg(Agraph_t * g); -extern int agdegree(Agraph_t * g, Agnode_t * n, int in, int out); -extern int agcountuniqedges(Agraph_t * g, Agnode_t * n, int in, int out); - -/* memory */ -extern void *agalloc(Agraph_t * g, size_t size); -extern void *agrealloc(Agraph_t * g, void *ptr, size_t oldsize, - size_t size); -extern void agfree(Agraph_t * g, void *ptr); -extern struct _vmalloc_s *agheap(Agraph_t * g); - -/* an engineering compromise is a joy forever */ -extern void aginternalmapclearlocalnames(Agraph_t * g); - -#define agnew(g,t) ((t*)agalloc(g,sizeof(t))) -#define agnnew(g,n,t) ((t*)agalloc(g,(n)*sizeof(t))) - -/* error handling */ -typedef enum { AGWARN, AGERR, AGMAX, AGPREV } agerrlevel_t; -typedef int (*agusererrf) (char*); -extern agerrlevel_t agseterr(agerrlevel_t); -extern char *aglasterr(void); -extern int agerr(agerrlevel_t level, const char *fmt, ...); -extern void agerrorf(const char *fmt, ...); -extern void agwarningf(const char *fmt, ...); -extern int agerrors(void); -extern int agreseterrors(void); -extern void agclearerrors(void); -extern agusererrf agseterrf(agusererrf); - -/* data access macros */ -/* this assumes that e[0] is out and e[1] is inedge, see edgepair in edge.c */ -#define AGIN2OUT(e) ((e)-1) -#define AGOUT2IN(e) ((e)+1) -#define AGOPP(e) ((AGTYPE(e)==AGINEDGE)?AGIN2OUT(e):AGOUT2IN(e)) -#define AGMKOUT(e) (AGTYPE(e) == AGOUTEDGE? (e): AGIN2OUT(e)) -#define AGMKIN(e) (AGTYPE(e) == AGINEDGE? (e): AGOUT2IN(e)) -#define AGTAIL(e) (AGMKIN(e)->node) -#define AGHEAD(e) (AGMKOUT(e)->node) -#define agtail(e) AGTAIL(e) -#define aghead(e) AGHEAD(e) -#define agopp(e) AGOPP(e) -#define ageqedge(e,f) (AGMKOUT(e) == AGMKOUT(f)) - -#define TAILPORT_ID "tailport" -#define HEADPORT_ID "headport" - -#if defined(_MSC_VER) && !defined(CGRAPH_EXPORTS) -#define extern __declspec(dllimport) -#endif - -extern Agdesc_t Agdirected, Agstrictdirected, Agundirected, - Agstrictundirected; - -#undef extern - -/* fast graphs */ -void agflatten(Agraph_t * g, int flag); -typedef Agsubnode_t Agnoderef_t; -typedef Dtlink_t Agedgeref_t; - -#define AGHEADPOINTER(g) ((Agnoderef_t*)(g->n_seq->data->hh._head)) -#define AGRIGHTPOINTER(rep) ((Agnoderef_t*)((rep)->seq_link.right?((void*)((rep)->seq_link.right) - offsetof(Agsubnode_t,seq_link)):0)) -#define AGLEFTPOINTER(rep) ((Agnoderef_t*)((rep)->seq_link.hl._left?((void*)((rep)->seq_link.hl._left) - offsetof(Agsubnode_t,seq_link)):0)) - -#define FIRSTNREF(g) (agflatten(g,1), AGHEADPOINTER(g)) - -#define NEXTNREF(g,rep) (AGRIGHTPOINTER(rep) == AGHEADPOINTER(g)?0:AGRIGHTPOINTER(rep)) - -#define PREVNREF(g,rep) (((rep)==AGHEADPOINTER(g))?0:(AGLEFTPOINTER(rep))) - -#define LASTNREF(g) (agflatten(g,1), AGHEADPOINTER(g)?AGLEFTPOINTER(AGHEADPOINTER(g)):0) -#define NODEOF(rep) ((rep)->node) - -#define FIRSTOUTREF(g,sn) (agflatten(g,1), (sn)->out_seq) -#define LASTOUTREF(g,sn) (agflatten(g,1), (Agedgeref_t*)dtlast(sn->out_seq)) -#define FIRSTINREF(g,sn) (agflatten(g,1), (sn)->in_seq) -#define NEXTEREF(g,rep) ((rep)->right) -#define PREVEREF(g,rep) ((rep)->hl._left) -/* this is expedient but a bit slimey because it "knows" that dict entries of both nodes -and edges are embedded in main graph objects but allocated separately in subgraphs */ -#define AGSNMAIN(sn) ((sn)==(&((sn)->node->mainsub))) -#define EDGEOF(sn,rep) (AGSNMAIN(sn)?((Agedge_t*)((unsigned char*)(rep) - offsetof(Agedge_t,seq_link))) : ((Dthold_t*)(rep))->obj) - -#undef extern - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/cgraph/cmpnd.c b/internal/ccall/cgraph/cmpnd.c deleted file mode 100644 index ab75fb1..0000000 --- a/internal/ccall/cgraph/cmpnd.c +++ /dev/null @@ -1,385 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -/* - * provides "compound nodes" on top of base Libgraph. - * a compound node behaves as both an ordinary node and a subgraph. - * there are additional primitives to "hide" and "expose" its contents. - * - * you could think of these as hypergraphs, but there is an assymetry - * in the operations we have chosen. i.e. nodes "own" their edges, - * but nodes and interior edges are "owned by" the hyperedges. - * also the subgraphs are nested, etc. the bottom line is that graphs - * and hypergraphs are just sets, everything else here is convenience - * and maintaining consistency. - * - * this package adds a primitive "agsplice" to move endpoints of edges. - * this could be useful in other situations. - */ - -static char Descriptor_id[] = "AG_cmpnd"; - -typedef struct Agcmpnode_s { - Agrec_t hdr; - Agraph_t *subg; - int collapsed; -} Agcmpnode_t; - -typedef struct Agcmpgraph_s { - Agrec_t hdr; - Agnode_t *node; /* its associated node */ - Dict_t *hidden_node_set; -} Agcmpgraph_t; - -typedef struct save_e_s { - Agnode_t *from, *to; -} save_e_t; - -typedef struct save_stack_s { - save_e_t *mem; - int stacksize; -} save_stack_t; - -typedef struct Agcmpedge_s { - Agrec_t hdr; - save_stack_t stack[2]; /* IN and OUT save stacks */ -} Agcmpedge_t; -#define IN_STACK 0 -#define OUT_STACK 1 - -static save_stack_t *save_stack_of(Agedge_t * e, - Agnode_t * node_being_saved) -{ - int i; - Agcmpedge_t *edgerec; - edgerec = - (Agcmpedge_t *) agbindrec(e, Descriptor_id, sizeof(*edgerec), - FALSE); - if (node_being_saved == AGHEAD(e)) - i = IN_STACK; - else - i = OUT_STACK; - return &(edgerec->stack[i]); -} - -static void stackpush(save_stack_t * stk, Agnode_t * from, Agnode_t * to) -{ - int i, osize, nsize; - - osize = (stk->stacksize) * sizeof(stk->mem); - i = stk->stacksize++; - nsize = (stk->stacksize) * sizeof(stk->mem); - stk->mem = agrealloc(agraphof(from), stk->mem, osize, nsize); - stk->mem[i].from = from; - stk->mem[i].to = to; -} - -static save_e_t stacktop(save_stack_t * stk) -{ - save_e_t rv; - if (stk->stacksize > 0) - rv = stk->mem[stk->stacksize - 1]; - else - rv.from = rv.to = NILnode; - return rv; -} - -/* note: doesn't give back mem, but stackpush() eventually does */ -static save_e_t stackpop(save_stack_t * stk) -{ - save_e_t rv; - rv = stacktop(stk); - if (stk->stacksize > 0) - stk->stacksize--; - return rv; -} - -typedef struct Agsplice_arg_s { - int head_side; - Agnode_t *target; -} Agsplice_arg_t; - -/* perform a splice operation on an individual edge */ -static void splice(Agobj_t * obj, void *arg) -{ - Agraph_t *g; - Agedge_t *e, *opp; - Agnode_t *target, *t, *h; - Agedge_t **dict_of_del, **dict_of_ins, **dict_of_relabel; - Agsplice_arg_t *spl; - - e = (Agedge_t *) obj; - g = agraphof(e); - t = AGTAIL(e); - h = AGHEAD(e); - opp = AGOPP(e); - spl = arg; - target = spl->target; - - /* set e to variant side, opp to invariant */ - if ((e->node == h) != spl->head_side) { - Agedge_t *t = e; - e = opp; - opp = t; - } - - if (spl->head_side) { - dict_of_relabel = &(t->out); - dict_of_del = &(h->in); - dict_of_ins = &(target->in); - } else { - dict_of_relabel = &(h->in); - dict_of_del = &(t->out); - dict_of_ins = &(target->out); - } - - agdeledgeimage(g, dict_of_del, opp); - agdeledgeimage(g, dict_of_relabel, e); - e->node = target; - aginsedgeimage(g, dict_of_ins, opp); - aginsedgeimage(g, dict_of_relabel, e); -} - -int agsplice(Agedge_t * e, Agnode_t * target) -{ - Agnode_t *t, *h; - Agraph_t *g, *root; - Agsplice_arg_t splice_arg; - - - if ((e == NILedge) || (e->node == target)) - return FAILURE; - g = agraphof(e); - t = AGTAIL(e); - h = AGHEAD(e); - splice_arg.head_side = (e->node == h); - splice_arg.target = target; - root = agroot(g); - agapply(root, (Agobj_t *) e, splice, &splice_arg, TRUE); - return SUCCESS; -} - -Agnode_t *agcmpnode(Agraph_t * g, char *name) -{ - Agnode_t *n; - Agraph_t *subg; - n = agnode(g, name, TRUE); - subg = agsubg(g, name); - if (n && g && agassociate(n, subg)) - return n; - else - return NILnode; -} - -int agassociate(Agnode_t * n, Agraph_t * sub) -{ - Agcmpnode_t *noderec; - Agcmpgraph_t *graphrec; - - if (agsubnode(sub, n, FALSE)) - return FAILURE; /* avoid cycles */ - noderec = agbindrec(n, Descriptor_id, sizeof(*noderec), FALSE); - graphrec = agbindrec(sub, Descriptor_id, sizeof(*graphrec), FALSE); - if (noderec->subg || graphrec->node) - return FAILURE; - noderec->subg = sub; - graphrec->node = n; - return SUCCESS; -} - -/* a utility function for aghide */ -static void delete_outside_subg(Agraph_t * g, Agnode_t * node, - Agraph_t * subg) -{ - Agraph_t *s, **subglist; - Agnode_t *n; - Agcmpgraph_t *graphrec; - Dict_t *d; - - if ((g != subg) && (n = agsubnode(g, (Agnode_t *) node, FALSE))) { - dtdelete(g->n_dict, n); - - graphrec = agbindrec(g, Descriptor_id, sizeof(*graphrec), FALSE); - if ((d = graphrec->hidden_node_set) == NIL(Dict_t *)) { - /* use name disc. to permit search for hidden node by name */ - d = graphrec->hidden_node_set - = agdtopen(g, &Ag_node_name_disc, Dttree); - } - dtinsert(d, n); - - subglist = agsubglist(g); - while ((s = *subglist++)) - delete_outside_subg(s, node, subg); - } -} - -/* - * when we hide a compound node (make it opaque) - * 1. hide its nodes (option) - * 2. hide the associated subgraph (option) - * 3. remap edges to internal nodes (option) - */ -int aghide(Agnode_t * cmpnode) -{ - Agcmpnode_t *noderec; - Agraph_t *g, *subg, *root; - Agnode_t *n, *nn, *rootn; - Agedge_t *e, *opp, *f; - - g = agraphof(cmpnode); - /* skip operation if node is not compound, or hidden */ - if (agcmpgraph_of(cmpnode) == NILgraph) - return FAILURE; - noderec = (Agcmpnode_t *) aggetrec(cmpnode, Descriptor_id, FALSE); - - subg = noderec->subg; - root = agroot(g); - - /* make sure caller hasn't put a node "inside itself" */ - if ((n = agsubnode(subg, cmpnode, FALSE))) - agdelnode(n); - - /* remap edges by splicing and saving previous endpt */ - for (n = agfstnode(subg); n; n = agnxtnode(n)) { - rootn = agsubnode(root, n, FALSE); - for (e = agfstedge(rootn); e; e = f) { - f = agnxtedge(e, rootn); - if (agsubedge(subg, e, FALSE)) - continue; /* an internal edge */ - opp = AGOPP(e); - stackpush(save_stack_of(e, rootn), rootn, cmpnode); - agsplice(opp, cmpnode); - } - } - - /* hide nodes by deleting from the parent set. what if they also - belong to a sibling subg? weird. possible bug. */ - for (n = agfstnode(subg); n; n = nn) { - nn = agnxtnode(n); - delete_outside_subg(root, n, subg); - } - - /* hide subgraph is easy */ - agdelsubg(agparent(subg), subg); - - noderec->collapsed = TRUE; - g->desc.has_cmpnd = TRUE; - return SUCCESS; -} - -/* utility function for agexpose */ -static void insert_outside_subg(Agraph_t * g, Agnode_t * node, - Agraph_t * subg) -{ - Agraph_t *s, **subglist; - Agnode_t *n; - Agcmpgraph_t *graphrec; - - if ((g != subg) - && ((n = agsubnode(g, (Agnode_t *) node, FALSE)) == NILnode)) { - graphrec = (Agcmpgraph_t *) aggetrec(g, Descriptor_id, FALSE); - if (graphrec - && - ((n = (Agnode_t *) dtsearch(graphrec->hidden_node_set, node)))) - dtinsert(g->n_dict, n); - - subglist = agsubglist(g); - while ((s = *subglist++)) - delete_outside_subg(s, node, subg); - } -} - -int agexpose(Agnode_t * cmpnode) -{ - Agcmpnode_t *noderec; - Agcmpedge_t *edgerec; - Agraph_t *g, *subg, *root; - Agnode_t *n, *rootcmp; - Agedge_t *e, *f; - save_stack_t *stk; - save_e_t sav; - int i; - - g = agraphof(cmpnode); - - /* skip if this is not a collapsed subgraph */ - noderec = (Agcmpnode_t *) aggetrec(cmpnode, Descriptor_id, FALSE); - if ((noderec == NIL(Agcmpnode_t *) || NOT(noderec->collapsed))) - return FAILURE; - - /* undo aghide (above) in reverse order. first, expose subgraph */ - subg = noderec->subg; - agsubgrec_insert(agsubgrec(agparent(subg)), subg); - - /* re-insert nodes */ - for (n = agfstnode(subg); n; n = agnxtnode(n)) - insert_outside_subg(g, n, subg); - - /* re-splice the affected edges */ - root = agroot(g); - rootcmp = agsubnode(root, cmpnode, FALSE); - for (e = agfstedge(rootcmp); e; e = f) { - f = agnxtedge(e, rootcmp); - if ((edgerec = (Agcmpedge_t *) aggetrec(e, Descriptor_id, FALSE))) { - /* anything interesting on either stack? */ - for (i = 0; i < 2; i++) { - stk = &(edgerec->stack[i]); - sav = stacktop(stk); - if (sav.to && (AGID(sav.to) == AGID(cmpnode))) { - if (e->node != sav.to) - e = AGOPP(e); - agsplice(e, sav.from); - stackpop(stk); - continue; - } - } - } - } - noderec->collapsed = FALSE; - return SUCCESS; -} - -Agraph_t *agcmpgraph_of(Agnode_t * n) -{ - Agcmpnode_t *noderec; - noderec = (Agcmpnode_t *) aggetrec(n, Descriptor_id, FALSE); - if (noderec && NOT(noderec->collapsed)) - return noderec->subg; - else - return NILgraph; -} - -Agnode_t *agcmpnode_of(Agraph_t * g) -{ - Agcmpgraph_t *graphrec; - graphrec = (Agcmpgraph_t *) aggetrec(g, Descriptor_id, FALSE); - if (graphrec) - return graphrec->node; - else - return NILnode; -} - -Agnode_t *agfindhidden(Agraph_t * g, char *name) -{ - Agcmpgraph_t *graphrec; - Agnode_t key; - - graphrec = (Agcmpgraph_t *) aggetrec(g, Descriptor_id, FALSE); - if (graphrec) { - key.name = name; - return (Agnode_t *) dtsearch(graphrec->hidden_node_set, &key); - } else - return NILnode; -} diff --git a/internal/ccall/cgraph/dummy.go b/internal/ccall/cgraph/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/cgraph/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/cgraph/edge.c b/internal/ccall/cgraph/edge.c deleted file mode 100644 index 5256cd1..0000000 --- a/internal/ccall/cgraph/edge.c +++ /dev/null @@ -1,533 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -#define IN_SET FALSE -#define OUT_SET TRUE -#define ID_ORDER TRUE -#define SEQ_ORDER FALSE - -static Agtag_t Tag; /* to silence warnings about initialization */ - - -/* return first outedge of */ -Agedge_t *agfstout(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn; - Agedge_t *e = NILedge; - - sn = agsubrep(g, n); - if (sn) { - dtrestore(g->e_seq, sn->out_seq); - e = (Agedge_t *) dtfirst(g->e_seq); - sn->out_seq = dtextract(g->e_seq); - } - return e; -} - -/* return outedge that follows of */ -Agedge_t *agnxtout(Agraph_t * g, Agedge_t * e) -{ - Agnode_t *n; - Agsubnode_t *sn; - Agedge_t *f = NILedge; - - n = AGTAIL(e); - sn = agsubrep(g, n); - if (sn) { - dtrestore(g->e_seq, sn->out_seq); - f = (Agedge_t *) dtnext(g->e_seq, e); - sn->out_seq = dtextract(g->e_seq); - } - return f; -} - -Agedge_t *agfstin(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn; - Agedge_t *e = NILedge; - - sn = agsubrep(g, n); - if (sn) { - dtrestore(g->e_seq, sn->in_seq); - e = (Agedge_t *) dtfirst(g->e_seq); - sn->in_seq = dtextract(g->e_seq); - } - return e; -} - -Agedge_t *agnxtin(Agraph_t * g, Agedge_t * e) -{ - Agnode_t *n; - Agsubnode_t *sn; - Agedge_t *f = NILedge; - - n = AGHEAD(e); - sn = agsubrep(g, n); - if (sn) { - dtrestore(g->e_seq, sn->in_seq); - f = (Agedge_t *) dtnext(g->e_seq, e); - sn->in_seq = dtextract(g->e_seq); - } - return f; -} - -Agedge_t *agfstedge(Agraph_t * g, Agnode_t * n) -{ - Agedge_t *rv; - rv = agfstout(g, n); - if (rv == NILedge) - rv = agfstin(g, n); - return rv; -} - -Agedge_t *agnxtedge(Agraph_t * g, Agedge_t * e, Agnode_t * n) -{ - Agedge_t *rv; - - if (AGTYPE(e) == AGOUTEDGE) { - rv = agnxtout(g, e); - if (rv == NILedge) { - do { - rv = !rv ? agfstin(g, n) : agnxtin(g,rv); - } while (rv && (rv->node == n)); - } - } else { - do { - rv = agnxtin(g, e); /* so that we only see each edge once, */ - e = rv; - } while (rv && (rv->node == n)); /* ignore loops as in-edges */ - } - return rv; -} - -/* internal edge set lookup */ -static Agedge_t *agfindedge_by_key(Agraph_t * g, Agnode_t * t, Agnode_t * h, - Agtag_t key) -{ - Agedge_t *e, template; - Agsubnode_t *sn; - - if ((t == NILnode) || (h == NILnode)) - return NILedge; - template.base.tag = key; - template.node = t; /* guess that fan-in < fan-out */ - sn = agsubrep(g, h); - if (!sn) e = 0; - else { -#if 0 - if (t != h) { -#endif - dtrestore(g->e_id, sn->in_id); - e = (Agedge_t *) dtsearch(g->e_id, &template); - sn->in_id = dtextract(g->e_id); -#if 0 - } else { /* self edge */ - dtrestore(g->e_id, sn->out_id); - e = (Agedge_t *) dtsearch(g->e_id, &template); - sn->out_id = dtextract(g->e_id); - } -#endif - } - return e; -} - -static Agedge_t *agfindedge_by_id(Agraph_t * g, Agnode_t * t, Agnode_t * h, - IDTYPE id) -{ - Agtag_t tag; - - tag = Tag; - tag.objtype = AGEDGE; - tag.id = id; - return agfindedge_by_key(g, t, h, tag); -} - -Agsubnode_t *agsubrep(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn, template; - - if (g == n->root) sn = &(n->mainsub); - else { - template.node = n; - sn = dtsearch(g->n_id, &template); - } - return sn; -} - -static void ins(Dict_t * d, Dtlink_t ** set, Agedge_t * e) -{ - dtrestore(d, *set); - dtinsert(d, e); - *set = dtextract(d); -} - -static void del(Dict_t * d, Dtlink_t ** set, Agedge_t * e) -{ - void *x; - dtrestore(d, *set); - x = dtdelete(d, e); - assert(x); - *set = dtextract(d); -} - -static void installedge(Agraph_t * g, Agedge_t * e) -{ - Agnode_t *t, *h; - Agedge_t *out, *in; - Agsubnode_t *sn; - - out = AGMKOUT(e); - in = AGMKIN(e); - t = agtail(e); - h = aghead(e); - while (g) { - if (agfindedge_by_key(g, t, h, AGTAG(e))) break; - sn = agsubrep(g, t); - ins(g->e_seq, &sn->out_seq, out); - ins(g->e_id, &sn->out_id, out); - sn = agsubrep(g, h); - ins(g->e_seq, &sn->in_seq, in); - ins(g->e_id, &sn->in_id, in); - g = agparent(g); - } -} - -static void subedge(Agraph_t * g, Agedge_t * e) -{ - installedge(g, e); - /* might an init method call be needed here? */ -} - -static Agedge_t *newedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, - IDTYPE id) -{ - Agedgepair_t *e2; - Agedge_t *in, *out; - int seq; - - (void)agsubnode(g,t,TRUE); - (void)agsubnode(g,h,TRUE); - e2 = (Agedgepair_t *) agalloc(g, sizeof(Agedgepair_t)); - in = &(e2->in); - out = &(e2->out); - seq = agnextseq(g, AGEDGE); - AGTYPE(in) = AGINEDGE; - AGTYPE(out) = AGOUTEDGE; - AGID(in) = AGID(out) = id; - AGSEQ(in) = AGSEQ(out) = seq; - in->node = t; - out->node = h; - - installedge(g, out); - if (g->desc.has_attrs) { - (void) agbindrec(out, AgDataRecName, sizeof(Agattr_t), FALSE); - agedgeattr_init(g, out); - } - agmethod_init(g, out); - return out; -} - -/* edge creation predicate */ -static int ok_to_make_edge(Agraph_t * g, Agnode_t * t, Agnode_t * h) -{ - Agtag_t key; - - /* protect against self, multi-edges in strict graphs */ - if (agisstrict(g)) { - key = Tag; - key.objtype = 0; /* wild card */ - if (agfindedge_by_key(g, t, h, key)) - return FALSE; - } - if (g->desc.no_loop && (t == h)) /* simple graphs */ - return FALSE; - return TRUE; -} - -Agedge_t *agidedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, - IDTYPE id, int cflag) -{ - Agraph_t *root; - Agedge_t *e; - - e = agfindedge_by_id(g, t, h, id); - if ((e == NILedge) && agisundirected(g)) - e = agfindedge_by_id(g, h, t, id); - if ((e == NILedge) && cflag && ok_to_make_edge(g, t, h)) { - root = agroot(g); - if ((g != root) && ((e = agfindedge_by_id(root, t, h, id)))) { - subedge(g, e); /* old */ - } else { - if (agallocid(g, AGEDGE, id)) { - e = newedge(g, t, h, id); /* new */ - } - } - } - return e; -} - -Agedge_t *agedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, char *name, - int cflag) -{ - Agedge_t *e; - IDTYPE my_id; - int have_id; - - have_id = agmapnametoid(g, AGEDGE, name, &my_id, FALSE); - if (have_id || ((name == NILstr) && (NOT(cflag) || agisstrict(g)))) { - /* probe for pre-existing edge */ - Agtag_t key; - key = Tag; - if (have_id) { - key.id = my_id; - key.objtype = AGEDGE; - } else { - key.id = key.objtype = 0; - } - - /* might already exist locally */ - e = agfindedge_by_key(g, t, h, key); - if ((e == NILedge) && agisundirected(g)) - e = agfindedge_by_key(g, h, t, key); - if (e) - return e; - if (cflag) { - e = agfindedge_by_key(agroot(g), t, h, key); - if ((e == NILedge) && agisundirected(g)) - e = agfindedge_by_key(agroot(g), h, t, key); - if (e) { - subedge(g,e); - return e; - } - } - } - - if (cflag && ok_to_make_edge(g, t, h) - && agmapnametoid(g, AGEDGE, name, &my_id, TRUE)) { /* reserve id */ - e = newedge(g, t, h, my_id); - agregister(g, AGEDGE, e); /* register new object in external namespace */ - } - else - e = NILedge; - return e; -} - -void agdeledgeimage(Agraph_t * g, Agedge_t * e, void *ignored) -{ - Agedge_t *in, *out; - Agnode_t *t, *h; - Agsubnode_t *sn; - - NOTUSED(ignored); - if (AGTYPE(e) == AGINEDGE) { - in = e; - out = AGIN2OUT(e); - } else { - out = e; - in = AGOUT2IN(e); - } - t = in->node; - h = out->node; - sn = agsubrep(g, t); - del(g->e_seq, &sn->out_seq, out); - del(g->e_id, &sn->out_id, out); - sn = agsubrep(g, h); - del(g->e_seq, &sn->in_seq, in); - del(g->e_id, &sn->in_id, in); -#ifdef DEBUG - for (e = agfstin(g,h); e; e = agnxtin(g,e)) - assert(e != in); - for (e = agfstout(g,t); e; e = agnxtout(g,e)) - assert(e != out); -#endif -} - -int agdeledge(Agraph_t * g, Agedge_t * e) -{ - e = AGMKOUT(e); - if (agfindedge_by_key(g, agtail(e), aghead(e), AGTAG(e)) == NILedge) - return FAILURE; - - if (g == agroot(g)) { - if (g->desc.has_attrs) - agedgeattr_delete(e); - agmethod_delete(g, e); - agrecclose((Agobj_t *) e); - agfreeid(g, AGEDGE, AGID(e)); - } - if (agapply (g, (Agobj_t *) e, (agobjfn_t) agdeledgeimage, NILedge, FALSE) == SUCCESS) { - if (g == agroot(g)) - agfree(g, e); - return SUCCESS; - } else - return FAILURE; -} - -Agedge_t *agsubedge(Agraph_t * g, Agedge_t * e, int cflag) -{ - Agnode_t *t, *h; - Agedge_t *rv; - - rv = NILedge; - t = agsubnode(g, AGTAIL(e), cflag); - h = agsubnode(g, AGHEAD(e), cflag); - if (t && h) { - rv = agfindedge_by_key(g, t, h, AGTAG(e)); - if (cflag && (rv == NILedge)) { -#ifdef OLD_OBSOLETE - rv = agfindedge_by_id(g, t, h, AGID(e)); - if (!rv) - rv = newedge(g, t, h, AGID(e)); -#else - installedge(g, e); - rv = e; -#endif - } - if (rv && (AGTYPE(rv) != AGTYPE(e))) - rv = AGOPP(rv); - } - return rv; -} - -/* edge comparison. AGTYPE(e) == 0 means ID is a wildcard. */ -int agedgeidcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc) -{ - Agedge_t *e0, *e1; - - NOTUSED(d); - e0 = arg_e0; - e1 = arg_e1; - NOTUSED(disc); - - if (AGID(e0->node) < AGID(e1->node)) return -1; - if (AGID(e0->node) > AGID(e1->node)) return 1; - /* same node */ - if ((AGTYPE(e0) != 0) && (AGTYPE(e1) != 0)) { - if (AGID(e0) < AGID(e1)) return -1; - if (AGID(e0) > AGID(e1)) return 1; - } - return 0; -} - -/* edge comparison. for ordered traversal. */ -int agedgeseqcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc) -{ - Agedge_t *e0, *e1; - - NOTUSED(d); - e0 = arg_e0; - e1 = arg_e1; - NOTUSED(disc); - assert(arg_e0 && arg_e1); - - if (e0->node != e1->node) { - if (AGSEQ(e0->node) < AGSEQ(e1->node)) return -1; - if (AGSEQ(e0->node) > AGSEQ(e1->node)) return 1; - } - else { - if (AGSEQ(e0) < AGSEQ(e1)) return -1; - if (AGSEQ(e0) > AGSEQ(e1)) return 1; - } - return 0; -} - -/* indexing for ordered traversal */ -Dtdisc_t Ag_mainedge_seq_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - offsetof(Agedge_t,seq_link),/* use internal links */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agedgeseqcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -Dtdisc_t Ag_subedge_seq_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - -1, /* use external holder objects */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agedgeseqcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -/* indexing for random search */ -Dtdisc_t Ag_mainedge_id_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - offsetof(Agedge_t,id_link), /* use internal links */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agedgeidcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -Dtdisc_t Ag_subedge_id_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - -1, /* use external holder objects */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agedgeidcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -/* debug functions */ -#ifdef agtail -#undef agtail -#endif -Agnode_t *agtail(Agedge_t * e) -{ - return AGTAIL(e); -} - -#ifdef aghead -#undef aghead -#endif -Agnode_t *aghead(Agedge_t * e) -{ - return AGHEAD(e); -} - -#ifdef agopp -#undef agopp -#endif -Agedge_t *agopp(Agedge_t * e) -{ - return AGOPP(e); -} - -#ifdef NOTDEF - /* could be useful if we write relabel_edge */ -static Agedge_t *agfindedge_by_name(Agraph_t * g, Agnode_t * t, - Agnode_t * h, char *name) -{ - uint64_t id; - - if (agmapnametoid(agraphof(t), AGEDGE, name, &id, FALSE)) - return agfindedge_by_id(g, t, h, id); - else - return NILedge; -} -#endif diff --git a/internal/ccall/cgraph/flatten.c b/internal/ccall/cgraph/flatten.c deleted file mode 100644 index 7e14772..0000000 --- a/internal/ccall/cgraph/flatten.c +++ /dev/null @@ -1,60 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "cghdr.h" - -static void agflatten_elist(Dict_t * d, Dtlink_t ** lptr, int flag) -{ - dtrestore(d, *lptr); - dtmethod(d, flag? Dtlist : Dtoset); - *lptr = dtextract(d); -} - -void agflatten_edges(Agraph_t * g, Agnode_t * n, int flag) -{ - Agsubnode_t *sn; - Dtlink_t **tmp; - - sn = agsubrep(g,n); - tmp = &(sn->out_seq); /* avoiding - "dereferencing type-punned pointer will break strict-aliasing rules" */ - agflatten_elist(g->e_seq, tmp, flag); - tmp = &(sn->in_seq); - agflatten_elist(g->e_seq, tmp, flag); -} - -void agflatten(Agraph_t * g, int flag) -{ - Agnode_t *n; - - if (flag) { - if (g->desc.flatlock == FALSE) { - dtmethod(g->n_seq,Dtlist); - for (n = agfstnode(g); n; n = agnxtnode(g,n)) - agflatten_edges(g, n, flag); - g->desc.flatlock = TRUE; - } - } else { - if (g->desc.flatlock) { - dtmethod(g->n_seq,Dtoset); - for (n = agfstnode(g); n; n = agnxtnode(g,n)) - agflatten_edges(g, n, flag); - g->desc.flatlock = FALSE; - } - } -} - -void agnotflat(Agraph_t * g) -{ - if (g->desc.flatlock) - agerr(AGERR, "flat lock broken"); -} diff --git a/internal/ccall/cgraph/grammar.c b/internal/ccall/cgraph/grammar.c deleted file mode 100644 index 065b0e7..0000000 --- a/internal/ccall/cgraph/grammar.c +++ /dev/null @@ -1,2329 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with aag or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#ifndef YYBISON -#define YYBISON 1 -#endif - -/* Bison version. */ -#ifndef YYBISON_VERSION -#define YYBISON_VERSION "2.7" -#endif - -/* Skeleton name. */ -#ifndef YYSKELETON_NAME -#define YYSKELETON_NAME "yacc.c" -#endif - -/* Pure parsers. */ -#ifndef YYPURE -#define YYPURE 0 -#endif - -/* Push parsers. */ -#ifndef YYPUSH -#define YYPUSH 0 -#endif - -/* Pull parsers. */ -#ifndef YYPULL -#define YYPULL 1 -#endif - -#include /* SAFE */ -#include /* SAFE */ -extern void aagerror(char *); /* gets mapped to aagerror, see below */ - -#ifdef _WIN32 -#define gettxt(a,b) (b) -#endif - -static char _Key[] = "key"; - -typedef union s { /* possible items in generic list */ - Agnode_t *n; - Agraph_t *subg; - Agedge_t *e; - Agsym_t *asym; /* bound attribute */ - char *name; /* unbound attribute */ - struct item_s *list; /* list-of-lists (for edgestmt) */ -} val_t; - -typedef struct item_s { /* generic list */ - int tag; /* T_node, T_subgraph, T_edge, T_attr */ - val_t u; /* primary element */ - char *str; /* secondary value - port or attr value */ - struct item_s *next; -} item; - -typedef struct list_s { /* maintain head and tail ptrs for fast append */ - item *first; - item *last; -} list_t; - -typedef struct gstack_s { - Agraph_t *g; - Agraph_t *subg; - list_t nodelist,edgelist,attrlist; - struct gstack_s *down; -} gstack_t; - -/* functions */ -static void appendnode(char *name, char *port, char *sport); -static void attrstmt(int tkind, char *macroname); -static void startgraph(char *name, int directed, int strict); -static void getedgeitems(int x); -static void _newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key); -static void edgerhs(Agnode_t *n, char *tport, item *hlist, char *key); -static void appendattr(char *name, char *value); -static void bindattrs(int kind); -static void applyattrs(void *obj); -static void endgraph(void); -static void endnode(void); -static void endedge(void); -static void freestack(void); -static char* concat(char*, char*); -static char* concatPort(char*, char*); - -static void opensubg(char *name); -static void closesubg(void); - -/* global */ -static Agraph_t *G; /* top level graph */ -static Agdisc_t *_Disc; /* discipline passed to agread or agconcat */ -static gstack_t *S; - - -/* Line 371 of yacc.c */ - -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int aagdebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum aagtokentype { - T_graph = 258, - T_node = 259, - T_edge = 260, - T_digraph = 261, - T_subgraph = 262, - T_strict = 263, - T_edgeop = 264, - T_list = 265, - T_attr = 266, - T_atom = 267, - T_qatom = 268 - }; -#endif -/* Tokens. */ -#define T_graph 258 -#define T_node 259 -#define T_edge 260 -#define T_digraph 261 -#define T_subgraph 262 -#define T_strict 263 -#define T_edgeop 264 -#define T_list 265 -#define T_attr 266 -#define T_atom 267 -#define T_qatom 268 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ - int i; - char *str; - struct Agnode_s *n; - - -/* Line 387 of yacc.c */ -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define aagstype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE aaglval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int aagparse (void *YYPARSE_PARAM); -#else -int aagparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int aagparse (void); -#else -int aagparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ - -/* Line 390 of yacc.c */ - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 aagtype_uint8; -#else -typedef unsigned char aagtype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 aagtype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char aagtype_int8; -#else -typedef short int aagtype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 aagtype_uint16; -#else -typedef unsigned short int aagtype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 aagtype_int16; -#else -typedef short int aagtype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int aagi) -#else -static int -YYID (aagi) - int aagi; -#endif -{ - return aagi; -} -#endif - -#if ! defined aagoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -#ifndef YYSTACK_FREE -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -#endif -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined aagoverflow || YYERROR_VERBOSE */ - - -#if (! defined aagoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union aagalloc -{ - aagtype_int16 aagss_alloc; - YYSTYPE aagvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -#ifndef YYSTACK_GAP_MAXIMUM -# define YYSTACK_GAP_MAXIMUM (sizeof (union aagalloc) - 1) -#endif - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -#ifndef YYSTACK_BYTES -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (aagtype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) -#endif - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T aagnewbytes; \ - YYCOPY (&aagptr->Stack_alloc, Stack, aagsize); \ - Stack = &aagptr->Stack_alloc; \ - aagnewbytes = aagstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - aagptr += aagnewbytes / sizeof (*aagptr); \ - } \ - while (YYID (0)) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T aagi; \ - for (aagi = 0; aagi < (Count); aagi++) \ - (Dst)[aagi] = (Src)[aagi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 6 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 59 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 24 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 35 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 62 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 80 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 268 - -#ifndef YYTRANSLATE -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? aagtranslate[YYX] : YYUNDEFTOK) -#endif - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const aagtype_uint8 aagtranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 23, 17, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 18, 16, - 2, 19, 2, 2, 22, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 20, 2, 21, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 14, 2, 15, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const aagtype_uint8 aagprhs[] = -{ - 0, 0, 3, 6, 8, 9, 13, 17, 19, 20, - 22, 23, 25, 27, 29, 30, 33, 35, 37, 38, - 41, 44, 48, 50, 52, 53, 54, 60, 61, 63, - 67, 69, 73, 79, 83, 85, 87, 89, 91, 94, - 95, 97, 98, 103, 106, 107, 110, 112, 114, 118, - 121, 123, 124, 128, 131, 133, 134, 136, 138, 139, - 141, 143, 145 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const aagtype_int8 aagrhs[] = -{ - 25, 0, -1, 27, 26, -1, 1, -1, -1, 14, - 31, 15, -1, 29, 30, 28, -1, 57, -1, -1, - 8, -1, -1, 3, -1, 6, -1, 32, -1, -1, - 32, 34, -1, 34, -1, 16, -1, -1, 42, 33, - -1, 35, 33, -1, 36, 37, 45, -1, 40, -1, - 53, -1, -1, -1, 9, 38, 36, 39, 37, -1, - -1, 41, -1, 40, 17, 41, -1, 57, -1, 57, - 18, 57, -1, 57, 18, 57, 18, 57, -1, 43, - 44, 46, -1, 52, -1, 3, -1, 4, -1, 5, - -1, 57, 19, -1, -1, 46, -1, -1, 45, 20, - 47, 21, -1, 47, 48, -1, -1, 49, 56, -1, - 50, -1, 51, -1, 57, 19, 57, -1, 22, 57, - -1, 50, -1, -1, 55, 54, 26, -1, 7, 57, - -1, 7, -1, -1, 16, -1, 17, -1, -1, 12, - -1, 58, -1, 13, -1, 58, 23, 13, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const aagtype_uint8 aagrline[] = -{ - 0, 98, 98, 99, 100, 103, 105, 108, 108, 110, - 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, - 121, 124, 128, 128, 130, 130, 130, 131, 135, 135, - 137, 138, 139, 142, 143, 146, 147, 148, 151, 152, - 155, 155, 157, 159, 160, 162, 165, 165, 167, 170, - 173, 176, 176, 179, 180, 181, 184, 184, 184, 186, - 187, 190, 191 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const aagtname[] = -{ - "$end", "error", "$undefined", "T_graph", "T_node", "T_edge", - "T_digraph", "T_subgraph", "T_strict", "T_edgeop", "T_list", "T_attr", - "T_atom", "T_qatom", "'{'", "'}'", "';'", "','", "':'", "'='", "'['", - "']'", "'@'", "'+'", "$accept", "graph", "body", "hdr", "optgraphname", - "optstrict", "graphtype", "optstmtlist", "stmtlist", "optsemi", "stmt", - "compound", "simple", "rcompound", "$@1", "$@2", "nodelist", "node", - "attrstmt", "attrtype", "optmacroname", "optattr", "attrlist", - "optattrdefs", "attrdefs", "attritem", "attrassignment", "attrmacro", - "graphattrdefs", "subgraph", "$@3", "optsubghdr", "optseparator", "atom", - "qatom", YY_NULL -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const aagtype_uint16 aagtoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 123, 125, 59, 44, 58, 61, - 91, 93, 64, 43 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const aagtype_uint8 aagr1[] = -{ - 0, 24, 25, 25, 25, 26, 27, 28, 28, 29, - 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, - 34, 35, 36, 36, 38, 39, 37, 37, 40, 40, - 41, 41, 41, 42, 42, 43, 43, 43, 44, 44, - 45, 45, 46, 47, 47, 48, 49, 49, 50, 51, - 52, 54, 53, 55, 55, 55, 56, 56, 56, 57, - 57, 58, 58 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const aagtype_uint8 aagr2[] = -{ - 0, 2, 2, 1, 0, 3, 3, 1, 0, 1, - 0, 1, 1, 1, 0, 2, 1, 1, 0, 2, - 2, 3, 1, 1, 0, 0, 5, 0, 1, 3, - 1, 3, 5, 3, 1, 1, 1, 1, 2, 0, - 1, 0, 4, 2, 0, 2, 1, 1, 3, 2, - 1, 0, 3, 2, 1, 0, 1, 1, 0, 1, - 1, 1, 3 -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const aagtype_uint8 aagdefact[] = -{ - 0, 3, 9, 0, 0, 0, 1, 14, 2, 11, - 12, 8, 35, 36, 37, 54, 59, 61, 0, 13, - 16, 18, 27, 22, 28, 18, 39, 50, 34, 23, - 51, 30, 60, 6, 7, 53, 5, 15, 17, 20, - 24, 41, 0, 19, 41, 0, 0, 0, 0, 0, - 55, 21, 40, 29, 30, 0, 33, 38, 52, 31, - 48, 62, 25, 44, 0, 27, 0, 32, 26, 42, - 0, 43, 58, 46, 47, 0, 49, 56, 57, 45 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const aagtype_int8 aagdefgoto[] = -{ - -1, 3, 8, 4, 33, 5, 11, 18, 19, 39, - 20, 21, 22, 41, 50, 65, 23, 24, 25, 26, - 44, 51, 52, 66, 71, 72, 27, 74, 28, 29, - 46, 30, 79, 31, 32 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -18 -static const aagtype_int8 aagpact[] = -{ - 18, -18, -18, 20, 9, 3, -18, -2, -18, -18, - -18, 1, -18, -18, -18, 1, -18, -18, 10, -2, - -18, 19, 25, 21, -18, 19, 1, -18, -18, -18, - -18, 11, 17, -18, -18, -18, -18, -18, -18, -18, - -18, -18, 1, -18, -18, 22, 9, 1, 1, 29, - 15, 23, -18, -18, 26, 23, 27, -18, -18, 28, - -18, -18, -18, -18, 1, 25, -5, -18, -18, -18, - 1, -18, 16, -18, -18, 30, -18, -18, -18, -18 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const aagtype_int8 aagpgoto[] = -{ - -18, -18, -1, -18, -18, -18, -18, -18, -18, 31, - 32, -18, 0, -17, -18, -18, -18, 12, -18, -18, - -18, 8, 13, -18, -18, -18, -8, -18, -18, -18, - -18, -18, -18, -11, -18 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -56 -static const aagtype_int8 aagtable[] = -{ - 34, 12, 13, 14, 35, 15, 9, 16, 17, 10, - 16, 17, -55, 16, 17, 45, 69, 70, -4, 1, - 6, -10, 15, 7, -10, 36, 2, 16, 17, 47, - 48, 54, 77, 78, 40, 38, 59, 60, 42, 54, - 49, 57, 61, 63, 47, 58, 64, -40, 68, 48, - 62, 37, 55, 67, 53, 75, 43, 56, 73, 76 -}; - -#define aagpact_value_is_default(Yystate) \ - (!!((Yystate) == (-18))) - -#define aagtable_value_is_error(Yytable_value) \ - YYID (0) - -static const aagtype_uint8 aagcheck[] = -{ - 11, 3, 4, 5, 15, 7, 3, 12, 13, 6, - 12, 13, 14, 12, 13, 26, 21, 22, 0, 1, - 0, 3, 7, 14, 6, 15, 8, 12, 13, 18, - 19, 42, 16, 17, 9, 16, 47, 48, 17, 50, - 23, 19, 13, 20, 18, 46, 18, 20, 65, 19, - 50, 19, 44, 64, 42, 66, 25, 44, 66, 70 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const aagtype_uint8 aagstos[] = -{ - 0, 1, 8, 25, 27, 29, 0, 14, 26, 3, - 6, 30, 3, 4, 5, 7, 12, 13, 31, 32, - 34, 35, 36, 40, 41, 42, 43, 50, 52, 53, - 55, 57, 58, 28, 57, 57, 15, 34, 16, 33, - 9, 37, 17, 33, 44, 57, 54, 18, 19, 23, - 38, 45, 46, 41, 57, 45, 46, 19, 26, 57, - 57, 13, 36, 20, 18, 39, 47, 57, 37, 21, - 22, 48, 49, 50, 51, 57, 57, 16, 17, 56 -}; - -#define aagerrok (aagerrstatus = 0) -#define aagclearin (aagchar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto aagacceptlab - -#define YYABORT goto aagabortlab - -#define YYERROR goto aagerrorlab - - -/* Like YYERROR except do call aagerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ -#ifndef YYFAIL -#define YYFAIL goto aagerrlab -#endif -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#ifndef YYRECOVERING -#define YYRECOVERING() (!!aagerrstatus) -#endif - -#ifndef YYBACKUP -#define YYBACKUP(Token, Value) \ -do \ - if (aagchar == YYEMPTY) \ - { \ - aagchar = (Token); \ - aaglval = (Value); \ - YYPOPSTACK (aaglen); \ - aagstate = *aagssp; \ - goto aagbackup; \ - } \ - else \ - { \ - aagerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) -#endif - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `aaglex' with the right arguments. */ -#ifndef YYLEX -#ifdef YYLEX_PARAM -# define YYLEX aaglex (YYLEX_PARAM) -#else -# define YYLEX aaglex () -#endif -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (aagdebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (aagdebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - aag_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -aag_symbol_value_print (FILE *aagoutput, int aagtype, YYSTYPE const * const aagvaluep) -#else -static void -aag_symbol_value_print (aagoutput, aagtype, aagvaluep) - FILE *aagoutput; - int aagtype; - YYSTYPE const * const aagvaluep; -#endif -{ - FILE *aago = aagoutput; - YYUSE (aago); - if (!aagvaluep) - return; -# ifdef YYPRINT - if (aagtype < YYNTOKENS) - YYPRINT (aagoutput, aagtoknum[aagtype], *aagvaluep); -# else - YYUSE (aagoutput); -# endif - switch (aagtype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -aag_symbol_print (FILE *aagoutput, int aagtype, YYSTYPE const * const aagvaluep) -#else -static void -aag_symbol_print (aagoutput, aagtype, aagvaluep) - FILE *aagoutput; - int aagtype; - YYSTYPE const * const aagvaluep; -#endif -{ - if (aagtype < YYNTOKENS) - YYFPRINTF (aagoutput, "token %s (", aagtname[aagtype]); - else - YYFPRINTF (aagoutput, "nterm %s (", aagtname[aagtype]); - - aag_symbol_value_print (aagoutput, aagtype, aagvaluep); - YYFPRINTF (aagoutput, ")"); -} - -/*------------------------------------------------------------------. -| aag_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -aag_stack_print (aagtype_int16 *aagbottom, aagtype_int16 *aagtop) -#else -static void -aag_stack_print (aagbottom, aagtop) - aagtype_int16 *aagbottom; - aagtype_int16 *aagtop; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; aagbottom <= aagtop; aagbottom++) - { - int aagbot = *aagbottom; - YYFPRINTF (stderr, " %d", aagbot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (aagdebug) \ - aag_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -aag_reduce_print (YYSTYPE *aagvsp, int aagrule) -#else -static void -aag_reduce_print (aagvsp, aagrule) - YYSTYPE *aagvsp; - int aagrule; -#endif -{ - int aagnrhs = aagr2[aagrule]; - int aagi; - uint64_t aaglno = aagrline[aagrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - aagrule - 1, aaglno); - /* The symbols being reduced. */ - for (aagi = 0; aagi < aagnrhs; aagi++) - { - YYFPRINTF (stderr, " $%d = ", aagi + 1); - aag_symbol_print (stderr, aagrhs[aagprhs[aagrule] + aagi], - &(aagvsp[(aagi + 1) - (aagnrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (aagdebug) \ - aag_reduce_print (aagvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int aagdebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef aagstrlen -# if defined __GLIBC__ && defined _STRING_H -# define aagstrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -aagstrlen (const char *aagstr) -#else -static YYSIZE_T -aagstrlen (aagstr) - const char *aagstr; -#endif -{ - YYSIZE_T aaglen; - for (aaglen = 0; aagstr[aaglen]; aaglen++) - continue; - return aaglen; -} -# endif -# endif - -# ifndef aagstpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define aagstpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -aagstpcpy (char *aagdest, const char *aagsrc) -#else -static char * -aagstpcpy (aagdest, aagsrc) - char *aagdest; - const char *aagsrc; -#endif -{ - char *aagd = aagdest; - const char *aags = aagsrc; - - while ((*aagd++ = *aags++) != '\0') - continue; - - return aagd - 1; -} -# endif -# endif - -# ifndef aagtnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for aagerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from aagtname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -aagtnamerr (char *aagres, const char *aagstr) -{ - if (*aagstr == '"') - { - YYSIZE_T aagn = 0; - char const *aagp = aagstr; - - for (;;) - switch (*++aagp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++aagp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (aagres) - aagres[aagn] = *aagp; - aagn++; - break; - - case '"': - if (aagres) - aagres[aagn] = '\0'; - return aagn; - } - do_not_strip_quotes: ; - } - - if (! aagres) - return aagstrlen (aagstr); - - return aagstpcpy (aagres, aagstr) - aagres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -aagsyntax_error (YYSIZE_T *aagmsg_alloc, char **aagmsg, - aagtype_int16 *aagssp, int aagtoken) -{ - YYSIZE_T aagsize0 = aagtnamerr (YY_NULL, aagtname[aagtoken]); - YYSIZE_T aagsize = aagsize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *aagformat = YY_NULL; - /* Arguments of aagformat. */ - char const *aagarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int aagcount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in aagchar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated aagchar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (aagtoken != YYEMPTY) - { - int aagn = aagpact[*aagssp]; - aagarg[aagcount++] = aagtname[aagtoken]; - if (!aagpact_value_is_default (aagn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int aagxbegin = aagn < 0 ? -aagn : 0; - /* Stay within bounds of both aagcheck and aagtname. */ - int aagchecklim = YYLAST - aagn + 1; - int aagxend = aagchecklim < YYNTOKENS ? aagchecklim : YYNTOKENS; - int aagx; - - for (aagx = aagxbegin; aagx < aagxend; ++aagx) - if (aagcheck[aagx + aagn] == aagx && aagx != YYTERROR - && !aagtable_value_is_error (aagtable[aagx + aagn])) - { - if (aagcount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - aagcount = 1; - aagsize = aagsize0; - break; - } - aagarg[aagcount++] = aagtname[aagx]; - { - YYSIZE_T aagsize1 = aagsize + aagtnamerr (YY_NULL, aagtname[aagx]); - if (! (aagsize <= aagsize1 - && aagsize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - aagsize = aagsize1; - } - } - } - } - - switch (aagcount) - { -# define YYCASE_(N, S) \ - case N: \ - aagformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T aagsize1 = aagsize + aagstrlen (aagformat); - if (! (aagsize <= aagsize1 && aagsize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - aagsize = aagsize1; - } - - if (*aagmsg_alloc < aagsize) - { - *aagmsg_alloc = 2 * aagsize; - if (! (aagsize <= *aagmsg_alloc - && *aagmsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *aagmsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *aagp = *aagmsg; - int aagi = 0; - while ((*aagp = *aagformat) != '\0') - if (*aagp == '%' && aagformat[1] == 's' && aagi < aagcount) - { - aagp += aagtnamerr (aagp, aagarg[aagi++]); - aagformat += 2; - } - else - { - aagp++; - aagformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -aagdestruct (const char *aagmsg, int aagtype, YYSTYPE *aagvaluep) -#else -static void -aagdestruct (aagmsg, aagtype, aagvaluep) - const char *aagmsg; - int aagtype; - YYSTYPE *aagvaluep; -#endif -{ - YYUSE (aagvaluep); - - if (!aagmsg) - aagmsg = "Deleting"; - YY_SYMBOL_PRINT (aagmsg, aagtype, aagvaluep, aaglocationp); - - switch (aagtype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int aagchar; - - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -YYSTYPE aaglval YY_INITIAL_VALUE(aagval_default); - -/* Number of syntax errors so far. */ -int aagnerrs; - - -/*----------. -| aagparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -aagparse (void *YYPARSE_PARAM) -#else -int -aagparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -aagparse (void) -#else -int -aagparse () - -#endif -#endif -{ - int aagstate; - /* Number of tokens to shift before error messages enabled. */ - int aagerrstatus; - - /* The stacks and their tools: - `aagss': related to states. - `aagvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow aagoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - aagtype_int16 aagssa[YYINITDEPTH]; - aagtype_int16 *aagss; - aagtype_int16 *aagssp; - - /* The semantic value stack. */ - YYSTYPE aagvsa[YYINITDEPTH]; - YYSTYPE *aagvs; - YYSTYPE *aagvsp; - - YYSIZE_T aagstacksize; - - int aagn; - int aagresult; - /* Lookahead token as an internal (translated) token number. */ - int aagtoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE aagval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char aagmsgbuf[128]; - char *aagmsg = aagmsgbuf; - YYSIZE_T aagmsg_alloc = sizeof aagmsgbuf; -#endif - -#define YYPOPSTACK(N) (aagvsp -= (N), aagssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int aaglen = 0; - - aagssp = aagss = aagssa; - aagvsp = aagvs = aagvsa; - aagstacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - aagstate = 0; - aagerrstatus = 0; - aagnerrs = 0; - aagchar = YYEMPTY; /* Cause a token to be read. */ - goto aagsetstate; - -/*------------------------------------------------------------. -| aagnewstate -- Push a new state, which is found in aagstate. | -`------------------------------------------------------------*/ - aagnewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - aagssp++; - - aagsetstate: - *aagssp = aagstate; - - if (aagss + aagstacksize - 1 <= aagssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T aagsize = aagssp - aagss + 1; - -#ifdef aagoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *aagvs1 = aagvs; - aagtype_int16 *aagss1 = aagss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if aagoverflow is a macro. */ - aagoverflow (YY_("memory exhausted"), - &aagss1, aagsize * sizeof (*aagssp), - &aagvs1, aagsize * sizeof (*aagvsp), - &aagstacksize); - - aagss = aagss1; - aagvs = aagvs1; - } -#else /* no aagoverflow */ -# ifndef YYSTACK_RELOCATE - goto aagexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= aagstacksize) - goto aagexhaustedlab; - aagstacksize *= 2; - if (YYMAXDEPTH < aagstacksize) - aagstacksize = YYMAXDEPTH; - - { - aagtype_int16 *aagss1 = aagss; - union aagalloc *aagptr = - (union aagalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (aagstacksize)); - if (! aagptr) - goto aagexhaustedlab; - YYSTACK_RELOCATE (aagss_alloc, aagss); - YYSTACK_RELOCATE (aagvs_alloc, aagvs); -# undef YYSTACK_RELOCATE - if (aagss1 != aagssa) - YYSTACK_FREE (aagss1); - } -# endif -#endif /* no aagoverflow */ - - aagssp = aagss + aagsize - 1; - aagvsp = aagvs + aagsize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (uint64_t) aagstacksize)); - - if (aagss + aagstacksize - 1 <= aagssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", aagstate)); - - if (aagstate == YYFINAL) - YYACCEPT; - - goto aagbackup; - -/*-----------. -| aagbackup. | -`-----------*/ -aagbackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - aagn = aagpact[aagstate]; - if (aagpact_value_is_default (aagn)) - goto aagdefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (aagchar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - aagchar = YYLEX; - } - - if (aagchar <= YYEOF) - { - aagchar = aagtoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - aagtoken = YYTRANSLATE (aagchar); - YY_SYMBOL_PRINT ("Next token is", aagtoken, &aaglval, &aaglloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - aagn += aagtoken; - if (aagn < 0 || YYLAST < aagn || aagcheck[aagn] != aagtoken) - goto aagdefault; - aagn = aagtable[aagn]; - if (aagn <= 0) - { - if (aagtable_value_is_error (aagn)) - goto aagerrlab; - aagn = -aagn; - goto aagreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (aagerrstatus) - aagerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", aagtoken, &aaglval, &aaglloc); - - /* Discard the shifted token. */ - aagchar = YYEMPTY; - - aagstate = aagn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++aagvsp = aaglval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto aagnewstate; - - -/*-----------------------------------------------------------. -| aagdefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -aagdefault: - aagn = aagdefact[aagstate]; - if (aagn == 0) - goto aagerrlab; - goto aagreduce; - - -/*-----------------------------. -| aagreduce -- Do a reduction. | -`-----------------------------*/ -aagreduce: - /* aagn is the number of a rule to reduce with. */ - aaglen = aagr2[aagn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - aagval = aagvsp[1-aaglen]; - - - YY_REDUCE_PRINT (aagn); - switch (aagn) - { - case 2: -/* Line 1792 of yacc.c */ - {freestack(); endgraph();} - break; - - case 3: -/* Line 1792 of yacc.c */ - {if (G) {freestack(); endgraph(); agclose(G); G = Ag_G_global = NIL(Agraph_t*);}} - break; - - case 6: -/* Line 1792 of yacc.c */ - {startgraph((aagvsp[(3) - (3)].str),(aagvsp[(2) - (3)].i),(aagvsp[(1) - (3)].i));} - break; - - case 7: -/* Line 1792 of yacc.c */ - {(aagval.str)=(aagvsp[(1) - (1)].str);} - break; - - case 8: -/* Line 1792 of yacc.c */ - {(aagval.str)=0;} - break; - - case 9: -/* Line 1792 of yacc.c */ - {(aagval.i)=1;} - break; - - case 10: -/* Line 1792 of yacc.c */ - {(aagval.i)=0;} - break; - - case 11: -/* Line 1792 of yacc.c */ - {(aagval.i) = 0;} - break; - - case 12: -/* Line 1792 of yacc.c */ - {(aagval.i) = 1;} - break; - - case 21: -/* Line 1792 of yacc.c */ - {if ((aagvsp[(2) - (3)].i)) endedge(); else endnode();} - break; - - case 24: -/* Line 1792 of yacc.c */ - {getedgeitems(1);} - break; - - case 25: -/* Line 1792 of yacc.c */ - {getedgeitems(2);} - break; - - case 26: -/* Line 1792 of yacc.c */ - {(aagval.i) = 1;} - break; - - case 27: -/* Line 1792 of yacc.c */ - {(aagval.i) = 0;} - break; - - case 30: -/* Line 1792 of yacc.c */ - {appendnode((aagvsp[(1) - (1)].str),NIL(char*),NIL(char*));} - break; - - case 31: -/* Line 1792 of yacc.c */ - {appendnode((aagvsp[(1) - (3)].str),(aagvsp[(3) - (3)].str),NIL(char*));} - break; - - case 32: -/* Line 1792 of yacc.c */ - {appendnode((aagvsp[(1) - (5)].str),(aagvsp[(3) - (5)].str),(aagvsp[(5) - (5)].str));} - break; - - case 33: -/* Line 1792 of yacc.c */ - {attrstmt((aagvsp[(1) - (3)].i),(aagvsp[(2) - (3)].str));} - break; - - case 34: -/* Line 1792 of yacc.c */ - {attrstmt(T_graph,NIL(char*));} - break; - - case 35: -/* Line 1792 of yacc.c */ - {(aagval.i) = T_graph;} - break; - - case 36: -/* Line 1792 of yacc.c */ - {(aagval.i) = T_node;} - break; - - case 37: -/* Line 1792 of yacc.c */ - {(aagval.i) = T_edge;} - break; - - case 38: -/* Line 1792 of yacc.c */ - {(aagval.str) = (aagvsp[(1) - (2)].str);} - break; - - case 39: -/* Line 1792 of yacc.c */ - {(aagval.str) = NIL(char*); } - break; - - case 48: -/* Line 1792 of yacc.c */ - {appendattr((aagvsp[(1) - (3)].str),(aagvsp[(3) - (3)].str));} - break; - - case 49: -/* Line 1792 of yacc.c */ - {appendattr((aagvsp[(2) - (2)].str),NIL(char*));} - break; - - case 51: -/* Line 1792 of yacc.c */ - {opensubg((aagvsp[(1) - (1)].str));} - break; - - case 52: -/* Line 1792 of yacc.c */ - {closesubg();} - break; - - case 53: -/* Line 1792 of yacc.c */ - {(aagval.str)=(aagvsp[(2) - (2)].str);} - break; - - case 54: -/* Line 1792 of yacc.c */ - {(aagval.str)=NIL(char*);} - break; - - case 55: -/* Line 1792 of yacc.c */ - {(aagval.str)=NIL(char*);} - break; - - case 59: -/* Line 1792 of yacc.c */ - {(aagval.str) = (aagvsp[(1) - (1)].str);} - break; - - case 60: -/* Line 1792 of yacc.c */ - {(aagval.str) = (aagvsp[(1) - (1)].str);} - break; - - case 61: -/* Line 1792 of yacc.c */ - {(aagval.str) = (aagvsp[(1) - (1)].str);} - break; - - case 62: -/* Line 1792 of yacc.c */ - {(aagval.str) = concat((aagvsp[(1) - (3)].str),(aagvsp[(3) - (3)].str));} - break; - - -/* Line 1792 of yacc.c */ - default: break; - } - /* User semantic actions sometimes alter aagchar, and that requires - that aagtoken be updated with the new translation. We take the - approach of translating immediately before every use of aagtoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering aagchar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", aagr1[aagn], &aagval, &aagloc); - - YYPOPSTACK (aaglen); - aaglen = 0; - YY_STACK_PRINT (aagss, aagssp); - - *++aagvsp = aagval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - aagn = aagr1[aagn]; - - aagstate = aagpgoto[aagn - YYNTOKENS] + *aagssp; - if (0 <= aagstate && aagstate <= YYLAST && aagcheck[aagstate] == *aagssp) - aagstate = aagtable[aagstate]; - else - aagstate = aagdefgoto[aagn - YYNTOKENS]; - - goto aagnewstate; - - -/*------------------------------------. -| aagerrlab -- here on detecting error | -`------------------------------------*/ -aagerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - aagtoken = aagchar == YYEMPTY ? YYEMPTY : YYTRANSLATE (aagchar); - - /* If not already recovering from an error, report this error. */ - if (!aagerrstatus) - { - ++aagnerrs; -#if ! YYERROR_VERBOSE - aagerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR aagsyntax_error (&aagmsg_alloc, &aagmsg, \ - aagssp, aagtoken) - { - char const *aagmsgp = YY_("syntax error"); - int aagsyntax_error_status; - aagsyntax_error_status = YYSYNTAX_ERROR; - if (aagsyntax_error_status == 0) - aagmsgp = aagmsg; - else if (aagsyntax_error_status == 1) - { - if (aagmsg != aagmsgbuf) - YYSTACK_FREE (aagmsg); - aagmsg = (char *) YYSTACK_ALLOC (aagmsg_alloc); - if (!aagmsg) - { - aagmsg = aagmsgbuf; - aagmsg_alloc = sizeof aagmsgbuf; - aagsyntax_error_status = 2; - } - else - { - aagsyntax_error_status = YYSYNTAX_ERROR; - aagmsgp = aagmsg; - } - } - aagerror (aagmsgp); - if (aagsyntax_error_status == 2) - goto aagexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (aagerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (aagchar <= YYEOF) - { - /* Return failure if at end of input. */ - if (aagchar == YYEOF) - YYABORT; - } - else - { - aagdestruct ("Error: discarding", - aagtoken, &aaglval); - aagchar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto aagerrlab1; - - -/*---------------------------------------------------. -| aagerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -aagerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label aagerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto aagerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (aaglen); - aaglen = 0; - YY_STACK_PRINT (aagss, aagssp); - aagstate = *aagssp; - goto aagerrlab1; - - -/*-------------------------------------------------------------. -| aagerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -aagerrlab1: - aagerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - aagn = aagpact[aagstate]; - if (!aagpact_value_is_default (aagn)) - { - aagn += YYTERROR; - if (0 <= aagn && aagn <= YYLAST && aagcheck[aagn] == YYTERROR) - { - aagn = aagtable[aagn]; - if (0 < aagn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (aagssp == aagss) - YYABORT; - - - aagdestruct ("Error: popping", - aagstos[aagstate], aagvsp); - YYPOPSTACK (1); - aagstate = *aagssp; - YY_STACK_PRINT (aagss, aagssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++aagvsp = aaglval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", aagstos[aagn], aagvsp, aaglsp); - - aagstate = aagn; - goto aagnewstate; - - -/*-------------------------------------. -| aagacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -aagacceptlab: - aagresult = 0; - goto aagreturn; - -/*-----------------------------------. -| aagabortlab -- YYABORT comes here. | -`-----------------------------------*/ -aagabortlab: - aagresult = 1; - goto aagreturn; - -#if !defined aagoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| aagexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -aagexhaustedlab: - aagerror (YY_("memory exhausted")); - aagresult = 2; - /* Fall through. */ -#endif - -aagreturn: - if (aagchar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - aagtoken = YYTRANSLATE (aagchar); - aagdestruct ("Cleanup: discarding lookahead", - aagtoken, &aaglval); - } - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (aaglen); - YY_STACK_PRINT (aagss, aagssp); - while (aagssp != aagss) - { - aagdestruct ("Cleanup: popping", - aagstos[*aagssp], aagvsp); - YYPOPSTACK (1); - } -#ifndef aagoverflow - if (aagss != aagssa) - YYSTACK_FREE (aagss); -#endif -#if YYERROR_VERBOSE - if (aagmsg != aagmsgbuf) - YYSTACK_FREE (aagmsg); -#endif - /* Make sure YYID is used. */ - return YYID (aagresult); -} - - -/* Line 2055 of yacc.c */ - - -#define NILitem NIL(item*) - - -static item *newitem(int tag, void *p0, char *p1) -{ - item *rv = agalloc(G,sizeof(item)); - rv->tag = tag; rv->u.name = (char*)p0; rv->str = p1; - return rv; -} - -static item *cons_node(Agnode_t *n, char *port) - { return newitem(T_node,n,port); } - -static item *cons_attr(char *name, char *value) - { return newitem(T_atom,name,value); } - -static item *cons_list(item *list) - { return newitem(T_list,list,NIL(char*)); } - -static item *cons_subg(Agraph_t *subg) - { return newitem(T_subgraph,subg,NIL(char*)); } - -static gstack_t *push(gstack_t *s, Agraph_t *subg) { - gstack_t *rv; - rv = agalloc(G,sizeof(gstack_t)); - rv->down = s; - rv->g = subg; - return rv; -} - -static gstack_t *pop(gstack_t *s) -{ - gstack_t *rv; - rv = S->down; - agfree(G,s); - return rv; -} - -#ifdef NOTDEF -static item *cons_edge(Agedge_t *e) - { return newitem(T_edge,e,NIL(char*)); } -#endif - -static void delete_items(item *ilist) -{ - item *p,*pn; - - for (p = ilist; p; p = pn) { - pn = p->next; - switch(p->tag) { - case T_list: delete_items(p->u.list); break; - case T_atom: case T_attr: agstrfree(G,p->str); break; - } - agfree(G,p); - } -} - -#ifdef NOTDEF -static void initlist(list_t *list) -{ - list->first = list->last = NILitem; -} -#endif - -static void deletelist(list_t *list) -{ - delete_items(list->first); - list->first = list->last = NILitem; -} - -#ifdef NOTDEF -static void listins(list_t *list, item *v) -{ - v->next = list->first; - list->first = v; - if (list->last == NILitem) list->last = v; -} -#endif - -static void listapp(list_t *list, item *v) -{ - if (list->last) list->last->next = v; - list->last = v; - if (list->first == NILitem) list->first = v; -} - - -/* attrs */ -static void appendattr(char *name, char *value) -{ - item *v; - - assert(value != NIL(char*)); - v = cons_attr(name,value); - listapp(&(S->attrlist),v); -} - -static void bindattrs(int kind) -{ - item *aptr; - char *name; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - assert(aptr->tag == T_atom); /* signifies unbound attr */ - name = aptr->u.name; - if ((kind == AGEDGE) && streq(name,_Key)) continue; - if ((aptr->u.asym = agattr(S->g,kind,name,NIL(char*))) == NILsym) - aptr->u.asym = agattr(S->g,kind,name,""); - aptr->tag = T_attr; /* signifies bound attr */ - agstrfree(G,name); - } -} - -/* attach node/edge specific attributes */ -static void applyattrs(void *obj) -{ - item *aptr; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if (aptr->tag == T_attr) { - if (aptr->u.asym) { - agxset(obj,aptr->u.asym,aptr->str); - } - } - else { - assert(AGTYPE(obj) == AGEDGE); - assert(aptr->tag == T_atom); - assert(streq(aptr->u.name,_Key)); - } - } -} - -static void nomacros(void) -{ - agerr(AGWARN,"attribute macros not implemented"); -} - -/* attrstmt: - * First argument is always attrtype, so switch covers all cases. - * This function is used to handle default attribute value assignment. - */ -static void attrstmt(int tkind, char *macroname) -{ - item *aptr; - int kind = 0; - Agsym_t* sym; - - /* creating a macro def */ - if (macroname) nomacros(); - /* invoking a macro def */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) - if (aptr->str == NIL(char*)) nomacros(); - - switch(tkind) { - case T_graph: kind = AGRAPH; break; - case T_node: kind = AGNODE; break; - case T_edge: kind = AGEDGE; break; - } - bindattrs(kind); /* set up defaults for new attributes */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - /* If the tag is still T_atom, aptr->u.asym has not been set */ - if (aptr->tag == T_atom) continue; - if (!(aptr->u.asym->fixed) || (S->g != G)) - sym = agattr(S->g,kind,aptr->u.asym->name,aptr->str); - else - sym = aptr->u.asym; - if (S->g == G) - sym->print = TRUE; - } - deletelist(&(S->attrlist)); -} - -/* nodes */ - -static void appendnode(char *name, char *port, char *sport) -{ - item *elt; - - if (sport) { - port = concatPort (port, sport); - } - elt = cons_node(agnode(S->g,name,TRUE),port); - listapp(&(S->nodelist),elt); - agstrfree(G,name); -} - -/* apply current optional attrs to nodelist and clean up lists */ -/* what's bad is that this could also be endsubg. also, you can't -clean up S->subg in closesubg() because S->subg might be needed -to construct edges. these are the sort of notes you write to yourself -in the future. */ -static void endnode() -{ - item *ptr; - - bindattrs(AGNODE); - for (ptr = S->nodelist.first; ptr; ptr = ptr->next) - applyattrs(ptr->u.n); - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S->subg = 0; /* notice a pattern here? :-( */ -} - -/* edges - store up node/subg lists until optional edge key can be seen */ - -static void getedgeitems(int x) -{ - item *v = 0; - - if (S->nodelist.first) { - v = cons_list(S->nodelist.first); - S->nodelist.first = S->nodelist.last = NILitem; - } - else {if (S->subg) v = cons_subg(S->subg); S->subg = 0;} - /* else nil append */ - if (v) listapp(&(S->edgelist),v); -} - -static void endedge(void) -{ - char *key; - item *aptr,*tptr,*p; - - Agnode_t *t; - Agraph_t *subg; - - bindattrs(AGEDGE); - - /* look for "key" pseudo-attribute */ - key = NIL(char*); - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if ((aptr->tag == T_atom) && streq(aptr->u.name,_Key)) - key = aptr->str; - } - - /* can make edges with node lists or subgraphs */ - for (p = S->edgelist.first; p->next; p = p->next) { - if (p->tag == T_subgraph) { - subg = p->u.subg; - for (t = agfstnode(subg); t; t = agnxtnode(subg,t)) - edgerhs(agsubnode(S->g,t,FALSE),NIL(char*),p->next,key); - } - else { - for (tptr = p->u.list; tptr; tptr = tptr->next) - edgerhs(tptr->u.n,tptr->str,p->next,key); - } - } - deletelist(&(S->nodelist)); - deletelist(&(S->edgelist)); - deletelist(&(S->attrlist)); - S->subg = 0; -} - -/* concat: - */ -static char* -concat (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 1; - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - strcpy(sym,s1); - strcat(sym,s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - -/* concatPort: - */ -static char* -concatPort (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 2; /* one more for ':' */ - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - sprintf (sym, "%s:%s", s1, s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - - -static void edgerhs(Agnode_t *tail, char *tport, item *hlist, char *key) -{ - Agnode_t *head; - Agraph_t *subg; - item *hptr; - - if (hlist->tag == T_subgraph) { - subg = hlist->u.subg; - for (head = agfstnode(subg); head; head = agnxtnode(subg,head)) - _newedge(tail,tport,agsubnode(S->g,head,FALSE),NIL(char*),key); - } - else { - for (hptr = hlist->u.list; hptr; hptr = hptr->next) - _newedge(tail,tport,agsubnode(S->g,hptr->u.n,FALSE),hptr->str,key); - } -} - -static void mkport(Agedge_t *e, char *name, char *val) -{ - Agsym_t *attr; - if (val) { - if ((attr = agattr(S->g,AGEDGE,name,NIL(char*))) == NILsym) - attr = agattr(S->g,AGEDGE,name,""); - agxset(e,attr,val); - } -} - -static void _newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key) -{ - Agedge_t *e; - - e = agedge(S->g,t,h,key,TRUE); - if (e) { /* can fail if graph is strict and t==h */ - char *tp = tport; - char *hp = hport; - if ((agtail(e) != aghead(e)) && (aghead(e) == t)) { - /* could happen with an undirected edge */ - char *temp; - temp = tp; tp = hp; hp = temp; - } - mkport(e,TAILPORT_ID,tp); - mkport(e,HEADPORT_ID,hp); - applyattrs(e); - } -} - -/* graphs and subgraphs */ - - -static void startgraph(char *name, int directed, int strict) -{ - static Agdesc_t req; /* get rid of warnings */ - - if (G == NILgraph) { - req.directed = directed; - req.strict = strict; - req.maingraph = TRUE; - Ag_G_global = G = agopen(name,req,_Disc); - } - else { - Ag_G_global = G; - } - S = push(S,G); - agstrfree(NIL(Agraph_t*),name); -} - -static void endgraph() -{ - aglexeof(); - aginternalmapclearlocalnames(G); -} - -static void opensubg(char *name) -{ - S = push(S,agsubg(S->g,name,TRUE)); - agstrfree(G,name); -} - -static void closesubg() -{ - Agraph_t *subg = S->g; - S = pop(S); - S->subg = subg; - assert(subg); -} - -static void freestack() -{ - while (S) { - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S = pop(S); - } -} - -#include "scan.c" - -extern FILE *aagin; -Agraph_t *agconcat(Agraph_t *g, void *chan, Agdisc_t *disc) -{ - aagin = chan; - G = g; - Ag_G_global = NILgraph; - _Disc = (disc? disc : &AgDefaultDisc); - aglexinit(_Disc, chan); - aagparse(); - if (Ag_G_global == NILgraph) aglexbad(); - return Ag_G_global; -} - -Agraph_t *agread(void *fp, Agdisc_t *disc) {return agconcat(NILgraph,fp,disc); } diff --git a/internal/ccall/cgraph/grammar.h b/internal/ccall/cgraph/grammar.h deleted file mode 100644 index b773e8f..0000000 --- a/internal/ccall/cgraph/grammar.h +++ /dev/null @@ -1,112 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int aagdebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum aagtokentype { - T_graph = 258, - T_node = 259, - T_edge = 260, - T_digraph = 261, - T_subgraph = 262, - T_strict = 263, - T_edgeop = 264, - T_list = 265, - T_attr = 266, - T_atom = 267, - T_qatom = 268 - }; -#endif -/* Tokens. */ -#define T_graph 258 -#define T_node 259 -#define T_edge 260 -#define T_digraph 261 -#define T_subgraph 262 -#define T_strict 263 -#define T_edgeop 264 -#define T_list 265 -#define T_attr 266 -#define T_atom 267 -#define T_qatom 268 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 2058 of yacc.c */ -#line 81 "../../lib/cgraph/grammar.y" - - int i; - char *str; - struct Agnode_s *n; - - -/* Line 2058 of yacc.c */ -#line 90 "y.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define aagstype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE aaglval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int aagparse (void *YYPARSE_PARAM); -#else -int aagparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int aagparse (void); -#else -int aagparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/internal/ccall/cgraph/grammar.y b/internal/ccall/cgraph/grammar.y deleted file mode 100644 index 90aa273..0000000 --- a/internal/ccall/cgraph/grammar.y +++ /dev/null @@ -1,601 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -%{ - -#include /* SAFE */ -#include /* SAFE */ -extern void yyerror(char *); /* gets mapped to aagerror, see below */ - -#ifdef _WIN32 -#define gettxt(a,b) (b) -#endif - -static char Key[] = "key"; - -typedef union s { /* possible items in generic list */ - Agnode_t *n; - Agraph_t *subg; - Agedge_t *e; - Agsym_t *asym; /* bound attribute */ - char *name; /* unbound attribute */ - struct item_s *list; /* list-of-lists (for edgestmt) */ -} val_t; - -typedef struct item_s { /* generic list */ - int tag; /* T_node, T_subgraph, T_edge, T_attr */ - val_t u; /* primary element */ - char *str; /* secondary value - port or attr value */ - struct item_s *next; -} item; - -typedef struct list_s { /* maintain head and tail ptrs for fast append */ - item *first; - item *last; -} list_t; - -typedef struct gstack_s { - Agraph_t *g; - Agraph_t *subg; - list_t nodelist,edgelist,attrlist; - struct gstack_s *down; -} gstack_t; - -/* functions */ -static void appendnode(char *name, char *port, char *sport); -static void attrstmt(int tkind, char *macroname); -static void startgraph(char *name, int directed, int strict); -static void getedgeitems(int x); -static void newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key); -static void edgerhs(Agnode_t *n, char *tport, item *hlist, char *key); -static void appendattr(char *name, char *value); -static void bindattrs(int kind); -static void applyattrs(void *obj); -static void endgraph(void); -static void endnode(void); -static void endedge(void); -static void freestack(void); -static char* concat(char*, char*); -static char* concatPort(char*, char*); - -static void opensubg(char *name); -static void closesubg(void); - -/* global */ -static Agraph_t *G; /* top level graph */ -static Agdisc_t *Disc; /* discipline passed to agread or agconcat */ -static gstack_t *S; - -%} - -%union { - int i; - char *str; - struct Agnode_s *n; -} - -%token T_graph T_node T_edge T_digraph T_subgraph T_strict T_edgeop - /* T_list, T_attr are internal tags, not really tokens */ -%token T_list T_attr -%token T_atom T_qatom - -%type optstrict graphtype rcompound attrtype -%type optsubghdr optgraphname optmacroname atom qatom - - -%% - -graph : hdr body {freestack(); endgraph();} - | error {if (G) {freestack(); endgraph(); agclose(G); G = Ag_G_global = NIL(Agraph_t*);}} - | /* empty */ - ; - -body : '{' optstmtlist '}' ; - -hdr : optstrict graphtype optgraphname {startgraph($3,$2,$1);} - ; - -optgraphname: atom {$$=$1;} | /* empty */ {$$=0;} ; - -optstrict : T_strict {$$=1;} | /* empty */ {$$=0;} ; - -graphtype : T_graph {$$ = 0;} | T_digraph {$$ = 1;} ; - -optstmtlist : stmtlist | /* empty */ ; - -stmtlist : stmtlist stmt | stmt ; - -optsemi : ';' | ; - -stmt : attrstmt optsemi - | compound optsemi - ; - -compound : simple rcompound optattr - {if ($2) endedge(); else endnode();} - ; - -simple : nodelist | subgraph ; - -rcompound : T_edgeop {getedgeitems(1);} simple {getedgeitems(2);} rcompound {$$ = 1;} - | /* empty */ {$$ = 0;} - ; - - -nodelist : node | nodelist ',' node ; - -node : atom {appendnode($1,NIL(char*),NIL(char*));} - | atom ':' atom {appendnode($1,$3,NIL(char*));} - | atom ':' atom ':' atom {appendnode($1,$3,$5);} - ; - -attrstmt : attrtype optmacroname attrlist {attrstmt($1,$2);} - | graphattrdefs {attrstmt(T_graph,NIL(char*));} - ; - -attrtype : T_graph {$$ = T_graph;} - | T_node {$$ = T_node;} - | T_edge {$$ = T_edge;} - ; - -optmacroname : atom '=' {$$ = $1;} - | /* empty */ {$$ = NIL(char*); } - ; - -optattr : attrlist | /* empty */ ; - -attrlist : optattr '[' optattrdefs ']' ; - -optattrdefs : optattrdefs attrdefs - | /* empty */ ; - -attrdefs : attritem optseparator - ; - -attritem : attrassignment | attrmacro ; - -attrassignment : atom '=' atom {appendattr($1,$3);} - ; - -attrmacro : '@' atom {appendattr($2,NIL(char*));} /* not yet impl */ - ; - -graphattrdefs : attrassignment - ; - -subgraph : optsubghdr {opensubg($1);} body {closesubg();} - ; - -optsubghdr : T_subgraph atom {$$=$2;} - | T_subgraph {$$=NIL(char*);} - | /* empty */ {$$=NIL(char*);} - ; - -optseparator : ';' | ',' | /*empty*/ ; - -atom : T_atom {$$ = $1;} - | qatom {$$ = $1;} - ; - -qatom : T_qatom {$$ = $1;} - | qatom '+' T_qatom {$$ = concat($1,$3);} - ; -%% - -#define NILitem NIL(item*) - - -static item *newitem(int tag, void *p0, char *p1) -{ - item *rv = agalloc(G,sizeof(item)); - rv->tag = tag; rv->u.name = (char*)p0; rv->str = p1; - return rv; -} - -static item *cons_node(Agnode_t *n, char *port) - { return newitem(T_node,n,port); } - -static item *cons_attr(char *name, char *value) - { return newitem(T_atom,name,value); } - -static item *cons_list(item *list) - { return newitem(T_list,list,NIL(char*)); } - -static item *cons_subg(Agraph_t *subg) - { return newitem(T_subgraph,subg,NIL(char*)); } - -static gstack_t *push(gstack_t *s, Agraph_t *subg) { - gstack_t *rv; - rv = agalloc(G,sizeof(gstack_t)); - rv->down = s; - rv->g = subg; - return rv; -} - -static gstack_t *pop(gstack_t *s) -{ - gstack_t *rv; - rv = S->down; - agfree(G,s); - return rv; -} - -#ifdef NOTDEF -static item *cons_edge(Agedge_t *e) - { return newitem(T_edge,e,NIL(char*)); } -#endif - -static void delete_items(item *ilist) -{ - item *p,*pn; - - for (p = ilist; p; p = pn) { - pn = p->next; - switch(p->tag) { - case T_list: delete_items(p->u.list); break; - case T_atom: case T_attr: agstrfree(G,p->str); break; - } - agfree(G,p); - } -} - -#ifdef NOTDEF -static void initlist(list_t *list) -{ - list->first = list->last = NILitem; -} -#endif - -static void deletelist(list_t *list) -{ - delete_items(list->first); - list->first = list->last = NILitem; -} - -#ifdef NOTDEF -static void listins(list_t *list, item *v) -{ - v->next = list->first; - list->first = v; - if (list->last == NILitem) list->last = v; -} -#endif - -static void listapp(list_t *list, item *v) -{ - if (list->last) list->last->next = v; - list->last = v; - if (list->first == NILitem) list->first = v; -} - - -/* attrs */ -static void appendattr(char *name, char *value) -{ - item *v; - - assert(value != NIL(char*)); - v = cons_attr(name,value); - listapp(&(S->attrlist),v); -} - -static void bindattrs(int kind) -{ - item *aptr; - char *name; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - assert(aptr->tag == T_atom); /* signifies unbound attr */ - name = aptr->u.name; - if ((kind == AGEDGE) && streq(name,Key)) continue; - if ((aptr->u.asym = agattr(S->g,kind,name,NIL(char*))) == NILsym) - aptr->u.asym = agattr(S->g,kind,name,""); - aptr->tag = T_attr; /* signifies bound attr */ - agstrfree(G,name); - } -} - -/* attach node/edge specific attributes */ -static void applyattrs(void *obj) -{ - item *aptr; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if (aptr->tag == T_attr) { - if (aptr->u.asym) { - agxset(obj,aptr->u.asym,aptr->str); - } - } - else { - assert(AGTYPE(obj) == AGEDGE); - assert(aptr->tag == T_atom); - assert(streq(aptr->u.name,Key)); - } - } -} - -static void nomacros(void) -{ - agerr(AGWARN,"attribute macros not implemented"); -} - -/* attrstmt: - * First argument is always attrtype, so switch covers all cases. - * This function is used to handle default attribute value assignment. - */ -static void attrstmt(int tkind, char *macroname) -{ - item *aptr; - int kind = 0; - Agsym_t* sym; - - /* creating a macro def */ - if (macroname) nomacros(); - /* invoking a macro def */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) - if (aptr->str == NIL(char*)) nomacros(); - - switch(tkind) { - case T_graph: kind = AGRAPH; break; - case T_node: kind = AGNODE; break; - case T_edge: kind = AGEDGE; break; - } - bindattrs(kind); /* set up defaults for new attributes */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - /* If the tag is still T_atom, aptr->u.asym has not been set */ - if (aptr->tag == T_atom) continue; - if (!(aptr->u.asym->fixed) || (S->g != G)) - sym = agattr(S->g,kind,aptr->u.asym->name,aptr->str); - else - sym = aptr->u.asym; - if (S->g == G) - sym->print = TRUE; - } - deletelist(&(S->attrlist)); -} - -/* nodes */ - -static void appendnode(char *name, char *port, char *sport) -{ - item *elt; - - if (sport) { - port = concatPort (port, sport); - } - elt = cons_node(agnode(S->g,name,TRUE),port); - listapp(&(S->nodelist),elt); - agstrfree(G,name); -} - -/* apply current optional attrs to nodelist and clean up lists */ -/* what's bad is that this could also be endsubg. also, you can't -clean up S->subg in closesubg() because S->subg might be needed -to construct edges. these are the sort of notes you write to yourself -in the future. */ -static void endnode() -{ - item *ptr; - - bindattrs(AGNODE); - for (ptr = S->nodelist.first; ptr; ptr = ptr->next) - applyattrs(ptr->u.n); - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S->subg = 0; /* notice a pattern here? :-( */ -} - -/* edges - store up node/subg lists until optional edge key can be seen */ - -static void getedgeitems(int x) -{ - item *v = 0; - - if (S->nodelist.first) { - v = cons_list(S->nodelist.first); - S->nodelist.first = S->nodelist.last = NILitem; - } - else {if (S->subg) v = cons_subg(S->subg); S->subg = 0;} - /* else nil append */ - if (v) listapp(&(S->edgelist),v); -} - -static void endedge(void) -{ - char *key; - item *aptr,*tptr,*p; - - Agnode_t *t; - Agraph_t *subg; - - bindattrs(AGEDGE); - - /* look for "key" pseudo-attribute */ - key = NIL(char*); - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if ((aptr->tag == T_atom) && streq(aptr->u.name,Key)) - key = aptr->str; - } - - /* can make edges with node lists or subgraphs */ - for (p = S->edgelist.first; p->next; p = p->next) { - if (p->tag == T_subgraph) { - subg = p->u.subg; - for (t = agfstnode(subg); t; t = agnxtnode(subg,t)) - edgerhs(agsubnode(S->g,t,FALSE),NIL(char*),p->next,key); - } - else { - for (tptr = p->u.list; tptr; tptr = tptr->next) - edgerhs(tptr->u.n,tptr->str,p->next,key); - } - } - deletelist(&(S->nodelist)); - deletelist(&(S->edgelist)); - deletelist(&(S->attrlist)); - S->subg = 0; -} - -/* concat: - */ -static char* -concat (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 1; - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - strcpy(sym,s1); - strcat(sym,s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - -/* concatPort: - */ -static char* -concatPort (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 2; /* one more for ':' */ - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - sprintf (sym, "%s:%s", s1, s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - - -static void edgerhs(Agnode_t *tail, char *tport, item *hlist, char *key) -{ - Agnode_t *head; - Agraph_t *subg; - item *hptr; - - if (hlist->tag == T_subgraph) { - subg = hlist->u.subg; - for (head = agfstnode(subg); head; head = agnxtnode(subg,head)) - newedge(tail,tport,agsubnode(S->g,head,FALSE),NIL(char*),key); - } - else { - for (hptr = hlist->u.list; hptr; hptr = hptr->next) - newedge(tail,tport,agsubnode(S->g,hptr->u.n,FALSE),hptr->str,key); - } -} - -static void mkport(Agedge_t *e, char *name, char *val) -{ - Agsym_t *attr; - if (val) { - if ((attr = agattr(S->g,AGEDGE,name,NIL(char*))) == NILsym) - attr = agattr(S->g,AGEDGE,name,""); - agxset(e,attr,val); - } -} - -static void newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key) -{ - Agedge_t *e; - - e = agedge(S->g,t,h,key,TRUE); - if (e) { /* can fail if graph is strict and t==h */ - char *tp = tport; - char *hp = hport; - if ((agtail(e) != aghead(e)) && (aghead(e) == t)) { - /* could happen with an undirected edge */ - char *temp; - temp = tp; tp = hp; hp = temp; - } - mkport(e,TAILPORT_ID,tp); - mkport(e,HEADPORT_ID,hp); - applyattrs(e); - } -} - -/* graphs and subgraphs */ - - -static void startgraph(char *name, int directed, int strict) -{ - static Agdesc_t req; /* get rid of warnings */ - - if (G == NILgraph) { - req.directed = directed; - req.strict = strict; - req.maingraph = TRUE; - Ag_G_global = G = agopen(name,req,Disc); - } - else { - Ag_G_global = G; - } - S = push(S,G); - agstrfree(NIL(Agraph_t*),name); -} - -static void endgraph() -{ - aglexeof(); - aginternalmapclearlocalnames(G); -} - -static void opensubg(char *name) -{ - S = push(S,agsubg(S->g,name,TRUE)); - agstrfree(G,name); -} - -static void closesubg() -{ - Agraph_t *subg = S->g; - S = pop(S); - S->subg = subg; - assert(subg); -} - -static void freestack() -{ - while (S) { - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S = pop(S); - } -} - -extern FILE *yyin; -Agraph_t *agconcat(Agraph_t *g, void *chan, Agdisc_t *disc) -{ - yyin = chan; - G = g; - Ag_G_global = NILgraph; - Disc = (disc? disc : &AgDefaultDisc); - aglexinit(Disc, chan); - yyparse(); - if (Ag_G_global == NILgraph) aglexbad(); - return Ag_G_global; -} - -Agraph_t *agread(void *fp, Agdisc_t *disc) {return agconcat(NILgraph,fp,disc); } - diff --git a/internal/ccall/cgraph/graph.c b/internal/ccall/cgraph/graph.c deleted file mode 100644 index bf155c4..0000000 --- a/internal/ccall/cgraph/graph.c +++ /dev/null @@ -1,292 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef EXTERN -#define EXTERN -#endif - -#include - -const char AgraphVersion[] = "VERSION"; - -/* - * this code sets up the resource management discipline - * and returns a new main graph struct. - */ -static Agclos_t *agclos(Agdisc_t * proto) -{ - Agmemdisc_t *memdisc; - void *memclosure; - Agclos_t *rv; - - /* establish an allocation arena */ - memdisc = ((proto && proto->mem) ? proto->mem : &AgMemDisc); - memclosure = memdisc->open(proto); - rv = memdisc->alloc(memclosure, sizeof(Agclos_t)); - rv->disc.mem = memdisc; - rv->state.mem = memclosure; - rv->disc.id = ((proto && proto->id) ? proto->id : &AgIdDisc); - rv->disc.io = ((proto && proto->io) ? proto->io : &AgIoDisc); - rv->callbacks_enabled = TRUE; - return rv; -} - -/* - * Open a new main graph with the given descriptor (directed, strict, etc.) - */ -Agraph_t *agopen(char *name, Agdesc_t desc, Agdisc_t * arg_disc) -{ - Agraph_t *g; - Agclos_t *clos; - IDTYPE gid; - - clos = agclos(arg_disc); - g = clos->disc.mem->alloc(clos->state.mem, sizeof(Agraph_t)); - AGTYPE(g) = AGRAPH; - g->clos = clos; - g->desc = desc; - g->desc.maingraph = TRUE; - g->root = g; - g->clos->state.id = g->clos->disc.id->open(g, arg_disc); - if (agmapnametoid(g, AGRAPH, name, &gid, TRUE)) - AGID(g) = gid; - /* else AGID(g) = 0 because we have no alternatives */ - g = agopen1(g); - agregister(g, AGRAPH, g); - return g; -} - -/* - * initialize dictionaries, set seq, invoke init method of new graph - */ -Agraph_t *agopen1(Agraph_t * g) -{ - Agraph_t *par; - - g->n_seq = agdtopen(g, &Ag_subnode_seq_disc, Dttree); - g->n_id = agdtopen(g, &Ag_subnode_id_disc, Dttree); - g->e_seq = agdtopen(g, g == agroot(g)? &Ag_mainedge_seq_disc : &Ag_subedge_seq_disc, Dttree); - g->e_id = agdtopen(g, g == agroot(g)? &Ag_mainedge_id_disc : &Ag_subedge_id_disc, Dttree); - g->g_dict = agdtopen(g, &Ag_subgraph_id_disc, Dtlist); - - par = agparent(g); - if (par) { - AGSEQ(g) = agnextseq(par, AGRAPH); - dtinsert(par->g_dict, g); - } /* else AGSEQ=0 */ - if (!par || par->desc.has_attrs) - agraphattr_init(g); - agmethod_init(g, g); - return g; -} - -/* - * Close a graph or subgraph, freeing its storage. - */ -int agclose(Agraph_t * g) -{ - Agraph_t *subg, *next_subg, *par; - Agnode_t *n, *next_n; - - par = agparent(g); - if ((par == NILgraph) && (AGDISC(g, mem)->close)) { - /* free entire heap */ - agmethod_delete(g, g); /* invoke user callbacks */ - agfreeid(g, AGRAPH, AGID(g)); - AGDISC(g, mem)->close(AGCLOS(g, mem)); /* whoosh */ - return SUCCESS; - } - - for (subg = agfstsubg(g); subg; subg = next_subg) { - next_subg = agnxtsubg(subg); - agclose(subg); - } - - for (n = agfstnode(g); n; n = next_n) { - next_n = agnxtnode(g, n); - agdelnode(g, n); - } - - aginternalmapclose(g); - agmethod_delete(g, g); - - assert(dtsize(g->n_id) == 0); - if (agdtclose(g, g->n_id)) return FAILURE; - assert(dtsize(g->n_seq) == 0); - if (agdtclose(g, g->n_seq)) return FAILURE; - - assert(dtsize(g->e_id) == 0); - if (agdtclose(g, g->e_id)) return FAILURE; - assert(dtsize(g->e_seq) == 0); - if (agdtclose(g, g->e_seq)) return FAILURE; - - assert(dtsize(g->g_dict) == 0); - if (agdtclose(g, g->g_dict)) return FAILURE; - - if (g->desc.has_attrs) - if (agraphattr_delete(g)) return FAILURE; - agrecclose((Agobj_t *) g); - agfreeid(g, AGRAPH, AGID(g)); - - if (par) { - agdelsubg(par, g); - agfree(par, g); - } else { - Agmemdisc_t *memdisc; - void *memclos, *clos; - while (g->clos->cb) - agpopdisc(g, g->clos->cb->f); - AGDISC(g, id)->close(AGCLOS(g, id)); - if (agstrclose(g)) return FAILURE; - memdisc = AGDISC(g, mem); - memclos = AGCLOS(g, mem); - clos = g->clos; - (memdisc->free) (memclos, g); - (memdisc->free) (memclos, clos); - } - return SUCCESS; -} - -uint64_t agnextseq(Agraph_t * g, int objtype) -{ - return ++(g->clos->seq[objtype]); -} - -int agnnodes(Agraph_t * g) -{ - return dtsize(g->n_id); -} - -int agnedges(Agraph_t * g) -{ - Agnode_t *n; - int rv = 0; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - rv += agdegree(g, n, FALSE, TRUE); /* must use OUT to get self-arcs */ - return rv; -} - -int agnsubg(Agraph_t * g) -{ - return dtsize(g->g_dict); -} - -int agisdirected(Agraph_t * g) -{ - return g->desc.directed; -} - -int agisundirected(Agraph_t * g) -{ - return NOT(agisdirected(g)); -} - -int agisstrict(Agraph_t * g) -{ - return g->desc.strict; -} - -int agissimple(Agraph_t * g) -{ - return (g->desc.strict && g->desc.no_loop); -} - -static int cnt(Dict_t * d, Dtlink_t ** set) -{ - int rv; - dtrestore(d, *set); - rv = dtsize(d); - *set = dtextract(d); - return rv; -} - -int agcountuniqedges(Agraph_t * g, Agnode_t * n, int want_in, int want_out) -{ - Agedge_t *e; - Agsubnode_t *sn; - int rv = 0; - - sn = agsubrep(g, n); - if (want_out) rv = cnt(g->e_seq,&(sn->out_seq)); - if (want_in) { - if (!want_out) rv += cnt(g->e_seq,&(sn->in_seq)); /* cheap */ - else { /* less cheap */ - for (e = agfstin(g, n); e; e = agnxtin(g, e)) - if (e->node != n) rv++; /* don't double count loops */ - } - } - return rv; -} - -int agdegree(Agraph_t * g, Agnode_t * n, int want_in, int want_out) -{ - Agsubnode_t *sn; - int rv = 0; - - sn = agsubrep(g, n); - if (sn) { - if (want_out) rv += cnt(g->e_seq,&(sn->out_seq)); - if (want_in) rv += cnt(g->e_seq,&(sn->in_seq)); - } - return rv; -} - -int agraphidcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc) -{ - ptrdiff_t v; - Agraph_t *sg0, *sg1; - sg0 = (Agraph_t *) arg0; - sg1 = (Agraph_t *) arg1; - v = (AGID(sg0) - AGID(sg1)); - return ((v==0)?0:(v<0?-1:1)); -} - -int agraphseqcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc) -{ - long v; - Agraph_t *sg0, *sg1; - sg0 = (Agraph_t *) arg0; - sg1 = (Agraph_t *) arg1; - v = (AGSEQ(sg0) - AGSEQ(sg1)); - return ((v==0)?0:(v<0?-1:1)); -} - -Dtdisc_t Ag_subgraph_id_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - offsetof(Agraph_t, link), /* link offset */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agraphidcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - - -/* directed, strict, no_loops, maingraph */ -Agdesc_t Agdirected = { 1, 0, 0, 1 }; -Agdesc_t Agstrictdirected = { 1, 1, 0, 1 }; -Agdesc_t Agundirected = { 0, 0, 0, 1 }; -Agdesc_t Agstrictundirected = { 0, 1, 0, 1 }; - -Agdisc_t AgDefaultDisc = { &AgMemDisc, &AgIdDisc, &AgIoDisc }; - - -#include -void scndump(Agraph_t *g, char *file) -{ - FILE * f = fopen(file,"w"); - if (f) {agwrite(g,f); fclose(f);} -} diff --git a/internal/ccall/cgraph/id.c b/internal/ccall/cgraph/id.c deleted file mode 100644 index 8ba05e1..0000000 --- a/internal/ccall/cgraph/id.c +++ /dev/null @@ -1,172 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include - -/* a default ID allocator that works off the shared string lib */ - -static void *idopen(Agraph_t * g, Agdisc_t* disc) -{ - return g; -} - -static long idmap(void *state, int objtype, char *str, IDTYPE *id, - int createflag) -{ - char *s; - static IDTYPE ctr = 1; - - NOTUSED(objtype); - if (str) { - Agraph_t *g; - g = state; - if (createflag) - s = agstrdup(g, str); - else - s = agstrbind(g, str); - *id = (IDTYPE) s; - } else { - *id = ctr; - ctr += 2; - } - return TRUE; -} - - /* we don't allow users to explicitly set IDs, either */ -static long idalloc(void *state, int objtype, IDTYPE request) -{ - NOTUSED(state); - NOTUSED(objtype); - NOTUSED(request); - return FALSE; -} - -static void idfree(void *state, int objtype, IDTYPE id) -{ - NOTUSED(objtype); - if (id % 2 == 0) - agstrfree((Agraph_t *) state, (char *) id); -} - -static char *idprint(void *state, int objtype, IDTYPE id) -{ - NOTUSED(state); - NOTUSED(objtype); - if (id % 2 == 0) - return (char *) id; - else - return NILstr; -} - -static void idclose(void *state) -{ - NOTUSED(state); -} - -static void idregister(void *state, int objtype, void *obj) -{ - NOTUSED(state); - NOTUSED(objtype); - NOTUSED(obj); -} - -Agiddisc_t AgIdDisc = { - idopen, - idmap, - idalloc, - idfree, - idprint, - idclose, - idregister -}; - -/* aux functions incl. support for disciplines with anonymous IDs */ - -int agmapnametoid(Agraph_t * g, int objtype, char *str, - IDTYPE *result, int createflag) -{ - int rv; - - if (str && (str[0] != LOCALNAMEPREFIX)) { - rv = AGDISC(g, id)->map(AGCLOS(g, id), objtype, str, result, - createflag); - if (rv) - return rv; - } - - /* either an internal ID, or disc. can't map strings */ - if (str) { - rv = aginternalmaplookup(g, objtype, str, result); - if (rv) - return rv; - } else - rv = 0; - - if (createflag) { - /* get a new anonymous ID, and store in the internal map */ - rv = AGDISC(g, id)->map(AGCLOS(g, id), objtype, NILstr, result, - createflag); - if (rv && str) - aginternalmapinsert(g, objtype, str, *result); - } - return rv; -} - -int agallocid(Agraph_t * g, int objtype, IDTYPE request) -{ - return AGDISC(g, id)->alloc(AGCLOS(g, id), objtype, request); -} - -void agfreeid(Agraph_t * g, int objtype, IDTYPE id) -{ - (void) aginternalmapdelete(g, objtype, id); - (AGDISC(g, id)->free) (AGCLOS(g, id), objtype, id); -} - -/* agnameof: - * Return string representation of object. - * In general, returns the name of node or graph, - * and the key of an edge. If edge is anonymous, returns NULL. - * Uses static buffer for anonymous graphs. - */ -char *agnameof(void *obj) -{ - Agraph_t *g; - char *rv; - static char buf[32]; - - /* perform internal lookup first */ - g = agraphof(obj); - if ((rv = aginternalmapprint(g, AGTYPE(obj), AGID(obj)))) - return rv; - - if (AGDISC(g, id)->print) { - if ((rv = - AGDISC(g, id)->print(AGCLOS(g, id), AGTYPE(obj), AGID(obj)))) - return rv; - } - if (AGTYPE(obj) != AGEDGE) { - sprintf(buf, "%c%lld", LOCALNAMEPREFIX, AGID(obj)); - rv = buf; - } - else - rv = 0; - return rv; -} - -/* register a graph object in an external namespace */ -void agregister(Agraph_t * g, int objtype, void *obj) -{ - AGDISC(g, id)->idregister(AGCLOS(g, id), objtype, obj); -} diff --git a/internal/ccall/cgraph/imap.c b/internal/ccall/cgraph/imap.c deleted file mode 100644 index 7b006e1..0000000 --- a/internal/ccall/cgraph/imap.c +++ /dev/null @@ -1,219 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -typedef struct IMapEntry_s { - Dtlink_t namedict_link; - Dtlink_t iddict_link; - IDTYPE id; - char *str; -} IMapEntry_t; - -static int idcmpf(Dict_t * d, void *arg_p0, void *arg_p1, Dtdisc_t * disc) -{ - IMapEntry_t *p0, *p1; - - NOTUSED(d); - p0 = arg_p0; - p1 = arg_p1; - NOTUSED(disc); - if (p0->id > p1->id) - { - return 1; - } - else if (p0->id < p1->id) - { - return -1; - } - else - { - return 0; - } -} - -/* note, OK to compare pointers into shared string pool - * but can't probe with an arbitrary string pointer - */ -static int namecmpf(Dict_t * d, void *arg_p0, void *arg_p1, - Dtdisc_t * disc) -{ - IMapEntry_t *p0, *p1; - - NOTUSED(d); - p0 = arg_p0; - p1 = arg_p1; - NOTUSED(disc); - if (p0->str > p1->str) - { - return 1; - } - else if (p0->str < p1->str) - { - return -1; - } - else - { - return 0; - } -} - -static Dtdisc_t LookupByName = { - 0, /* object ptr is passed as key */ - 0, /* size (ignored) */ - offsetof(IMapEntry_t, namedict_link), - NIL(Dtmake_f), - NIL(Dtfree_f), - namecmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -static Dtdisc_t LookupById = { - 0, /* object ptr is passed as key */ - 0, /* size (ignored) */ - offsetof(IMapEntry_t, iddict_link), - NIL(Dtmake_f), - NIL(Dtfree_f), - idcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -int aginternalmaplookup(Agraph_t * g, int objtype, char *str, - IDTYPE *result) -{ - Dict_t *d; - IMapEntry_t *sym, template; - char *search_str; - - if (objtype == AGINEDGE) - objtype = AGEDGE; - if ((d = g->clos->lookup_by_name[objtype])) { - if ((search_str = agstrbind(g, str))) { - template.str = search_str; - sym = (IMapEntry_t *) dtsearch(d, &template); - if (sym) { - *result = sym->id; - return TRUE; - } - } - } - return FALSE; -} - -/* caller GUARANTEES that this is a new entry */ -void aginternalmapinsert(Agraph_t * g, int objtype, char *str, - IDTYPE id) -{ - IMapEntry_t *ent; - Dict_t *d_name_to_id, *d_id_to_name; - - ent = AGNEW(g, IMapEntry_t); - ent->id = id; - ent->str = agstrdup(g, str); - - if (objtype == AGINEDGE) - objtype = AGEDGE; - if ((d_name_to_id = g->clos->lookup_by_name[objtype]) == NIL(Dict_t *)) - d_name_to_id = g->clos->lookup_by_name[objtype] = - agdtopen(g, &LookupByName, Dttree); - if ((d_id_to_name = g->clos->lookup_by_id[objtype]) == NIL(Dict_t *)) - d_id_to_name = g->clos->lookup_by_id[objtype] = - agdtopen(g, &LookupById, Dttree); - dtinsert(d_name_to_id, ent); - dtinsert(d_id_to_name, ent); -} - -static IMapEntry_t *find_isym(Agraph_t * g, int objtype, IDTYPE id) -{ - Dict_t *d; - IMapEntry_t *isym, itemplate; - - if (objtype == AGINEDGE) - objtype = AGEDGE; - if ((d = g->clos->lookup_by_id[objtype])) { - itemplate.id = id; - isym = (IMapEntry_t *) dtsearch(d, &itemplate); - } else - isym = NIL(IMapEntry_t *); - return isym; -} - -char *aginternalmapprint(Agraph_t * g, int objtype, IDTYPE id) -{ - IMapEntry_t *isym; - - if ((isym = find_isym(g, objtype, id))) - return isym->str; - return NILstr; -} - - -int aginternalmapdelete(Agraph_t * g, int objtype, IDTYPE id) -{ - IMapEntry_t *isym; - - if (objtype == AGINEDGE) - objtype = AGEDGE; - if ((isym = find_isym(g, objtype, id))) { - dtdelete(g->clos->lookup_by_name[objtype], isym); - dtdelete(g->clos->lookup_by_id[objtype], isym); - agstrfree(g, isym->str); - agfree(g, isym); - return TRUE; - } - return FALSE; -} - -void aginternalmapclearlocalnames(Agraph_t * g) -{ - int i; - IMapEntry_t *sym, *nxt; - Dict_t **d_name; - /* Dict_t **d_id; */ - - Ag_G_global = g; - d_name = g->clos->lookup_by_name; - /* d_id = g->clos->lookup_by_id; */ - for (i = 0; i < 3; i++) { - if (d_name[i]) { - for (sym = dtfirst(d_name[i]); sym; sym = nxt) { - nxt = dtnext(d_name[i], sym); - if (sym->str[0] == LOCALNAMEPREFIX) - aginternalmapdelete(g, i, sym->id); - } - } - } -} - -static void closeit(Dict_t ** d) -{ - int i; - - for (i = 0; i < 3; i++) { - if (d[i]) { - dtclose(d[i]); - d[i] = NIL(Dict_t *); - } - } -} - -void aginternalmapclose(Agraph_t * g) -{ - Ag_G_global = g; - closeit(g->clos->lookup_by_name); - closeit(g->clos->lookup_by_id); -} diff --git a/internal/ccall/cgraph/io.c b/internal/ccall/cgraph/io.c deleted file mode 100644 index 51b7a12..0000000 --- a/internal/ccall/cgraph/io.c +++ /dev/null @@ -1,154 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#if defined(_WIN32) -#include -#endif - -/* experimental ICONV code - probably should be removed - JCE */ -#undef HAVE_ICONV - -#ifdef HAVE_ICONV -#include -#include -#include -#endif - -#ifdef HAVE_ICONV -static int iofreadiconv(void *chan, char *buf, int bufsize) -{ -#define CHARBUFSIZE 30 - static char charbuf[CHARBUFSIZE]; - static iconv_t cd = NULL; - char *inbuf, *outbuf, *readbuf; - size_t inbytesleft, outbytesleft, readbytesleft, resbytes, result; - int fd; - - if (!cd) { - cd = iconv_open(nl_langinfo(CODESET), "UTF-8"); - } - fd = fileno((FILE *) chan); - readbuf = inbuf = charbuf; - readbytesleft = CHARBUFSIZE; - inbytesleft = 0; - outbuf = buf; - outbytesleft = bufsize - 1; - while (1) { - if ((result = read(fd, readbuf++, 1)) != 1) - break; - readbytesleft--; - inbytesleft++; - result = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); - if (result != -1) { - readbuf = inbuf = charbuf; - readbytesleft = CHARBUFSIZE; - inbytesleft = 0; - } else if (errno != EINVAL) - break; - } - *outbuf = '\0'; - resbytes = bufsize - 1 - outbytesleft; - if (resbytes) - result = resbytes; - return result; -} -#endif - -static int iofread(void *chan, char *buf, int bufsize) -{ - if (fgets(buf, bufsize, (FILE*)chan)) - return strlen(buf); - else - return 0; - /* return read(fileno((FILE *) chan), buf, bufsize); */ - /* return fread(buf, 1, bufsize, (FILE*)chan); */ -} - -/* default IO methods */ -static int ioputstr(void *chan, const char *str) -{ - return fputs(str, (FILE *) chan); -} - -static int ioflush(void *chan) -{ - return fflush((FILE *) chan); -} - -/* Agiodisc_t AgIoDisc = { iofreadiconv, ioputstr, ioflush }; */ -Agiodisc_t AgIoDisc = { iofread, ioputstr, ioflush }; - -typedef struct { - const char *data; - int len; - int cur; -} rdr_t; - -static int -memiofread(void *chan, char *buf, int bufsize) -{ - const char *ptr; - char *optr; - char c; - int l; - rdr_t *s; - - if (bufsize == 0) return 0; - s = (rdr_t *) chan; - if (s->cur >= s->len) - return 0; - l = 0; - ptr = s->data + s->cur; - optr = buf; - /* We know we have at least one character */ - c = *ptr++; - do { - *optr++ = c; - l++; - /* continue if c is not newline, we have space in buffer, - * and next character is non-null (we are working with - * null-terminated strings. - */ - } while ((c != '\n') && (l < bufsize) && (c = *ptr++)); - s->cur += l; - return l; -} - -static Agiodisc_t memIoDisc = {memiofread, 0, 0}; - -Agraph_t *agmemread(const char *cp) -{ - Agraph_t* g; - rdr_t rdr; - Agdisc_t disc; - - memIoDisc.putstr = AgIoDisc.putstr; - memIoDisc.flush = AgIoDisc.flush; - rdr.data = cp; - rdr.len = strlen(cp); - rdr.cur = 0; - - disc.mem = &AgMemDisc; - disc.id = &AgIdDisc; - disc.io = &memIoDisc; - g = agread (&rdr, &disc); - /* Null out filename and reset line number - * The name may have been set with a ppDirective, and - * we want to reset line_num. - */ - agsetfile(NULL); - return g; -} - diff --git a/internal/ccall/cgraph/main.c b/internal/ccall/cgraph/main.c deleted file mode 100644 index 82455b2..0000000 --- a/internal/ccall/cgraph/main.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include - -static void my_ins(Agraph_t * g, Agobj_t * obj, void *context) -{ - Agnode_t *n; - - if (AGTYPE(obj) == AGNODE) { - n = (Agnode_t *) obj; - fprintf(stderr, "%s initialized with label %s\n", agnameof(n), - agget(n, "label")); - } -} - -static Agcbdisc_t mydisc = { {0, 0, 0}, {my_ins, 0, 0}, {0, 0, 0} }; - -main(int argc, char **argv) -{ - Agraph_t *g, *prev; - int dostat; - - if (argc > 1) - dostat = atoi(argv[1]); - else - dostat = 0; - - prev = agopen("some_name", Agdirected, NIL(Agdisc_t *)); - agcallbacks(prev, FALSE); - agpushdisc(prev, &mydisc, NIL(void *)); - /*agwrite(prev,stdout); */ - fprintf(stderr, "ready to go, computer fans\n"); - agcallbacks(prev, TRUE); - agclose(prev); - return 1; -} diff --git a/internal/ccall/cgraph/malloc.h b/internal/ccall/cgraph/malloc.h deleted file mode 100644 index 3fe509f..0000000 --- a/internal/ccall/cgraph/malloc.h +++ /dev/null @@ -1,14 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* This defeats the that yacc generated code includes */ diff --git a/internal/ccall/cgraph/mem.c b/internal/ccall/cgraph/mem.c deleted file mode 100644 index 8d93319..0000000 --- a/internal/ccall/cgraph/mem.c +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -/* memory management discipline and entry points */ -static void *memopen(Agdisc_t* disc) -{ - return NIL(void *); -} - -static void *memalloc(void *heap, size_t request) -{ - void *rv; - - NOTUSED(heap); - rv = malloc(request); - memset(rv, 0, request); - return rv; -} - -static void *memresize(void *heap, void *ptr, size_t oldsize, - size_t request) -{ - void *rv; - - NOTUSED(heap); - rv = realloc(ptr, request); - if (request > oldsize) - memset((char *) rv + oldsize, 0, request - oldsize); - return rv; -} - -static void memfree(void *heap, void *ptr) -{ - NOTUSED(heap); - free(ptr); -} - -#ifndef WRONG -#define memclose 0 -#else -static void memclose(void *heap) -{ - NOTUSED(heap); -} -#endif - -Agmemdisc_t AgMemDisc = - { memopen, memalloc, memresize, memfree, memclose }; - -void *agalloc(Agraph_t * g, size_t size) -{ - void *mem; - - mem = AGDISC(g, mem)->alloc(AGCLOS(g, mem), size); - if (mem == NIL(void *)) - agerr(AGERR,"memory allocation failure"); - return mem; -} - -void *agrealloc(Agraph_t * g, void *ptr, size_t oldsize, size_t size) -{ - void *mem; - - if (size > 0) { - if (ptr == 0) - mem = agalloc(g, size); - else - mem = - AGDISC(g, mem)->resize(AGCLOS(g, mem), ptr, oldsize, size); - if (mem == NIL(void *)) - agerr(AGERR,"memory re-allocation failure"); - } else - mem = NIL(void *); - return mem; -} - -void agfree(Agraph_t * g, void *ptr) -{ - if (ptr) - (AGDISC(g, mem)->free) (AGCLOS(g, mem), ptr); -} - -#ifndef _VMALLOC_H -struct _vmalloc_s { - char unused; -}; -#endif -struct _vmalloc_s *agheap(Agraph_t * g) -{ - return AGCLOS(g, mem); -} diff --git a/internal/ccall/cgraph/node.c b/internal/ccall/cgraph/node.c deleted file mode 100644 index b43e8bc..0000000 --- a/internal/ccall/cgraph/node.c +++ /dev/null @@ -1,380 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -Agnode_t *agfindnode_by_id(Agraph_t * g, IDTYPE id) -{ - Agsubnode_t *sn; - static Agsubnode_t template; - static Agnode_t dummy; - - dummy.base.tag.id = id; - template.node = &dummy; - sn = (Agsubnode_t *) dtsearch(g->n_id, &template); - return sn ? sn->node : NILnode; -} - -Agnode_t *agfindnode_by_name(Agraph_t * g, char *name) -{ - IDTYPE id; - - if (agmapnametoid(g, AGNODE, name, &id, FALSE)) - return agfindnode_by_id(g, id); - else - return NILnode; -} - -Agnode_t *agfstnode(Agraph_t * g) -{ - Agsubnode_t *sn; - sn = (Agsubnode_t *) dtfirst(g->n_seq); - return sn ? sn->node : NILnode; -} - -Agnode_t *agnxtnode(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn; - sn = agsubrep(g, n); - if (sn) sn = ((Agsubnode_t *) dtnext(g->n_seq, sn)); - return sn ? sn->node : NILnode; -} - -Agnode_t *aglstnode(Agraph_t * g) -{ - Agsubnode_t *sn; - sn = (Agsubnode_t *) dtlast(g->n_seq); - return sn ? sn->node : NILnode; -} - -Agnode_t *agprvnode(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn; - sn = agsubrep(g, n); - if (sn) sn = ((Agsubnode_t *) dtprev(g->n_seq, sn)); - return sn ? sn->node : NILnode; -} - - -/* internal node constructor */ -static Agnode_t *newnode(Agraph_t * g, IDTYPE id, uint64_t seq) -{ - Agnode_t *n; - - n = agalloc(g, sizeof(Agnode_t)); - AGTYPE(n) = AGNODE; - AGID(n) = id; - AGSEQ(n) = seq; - n->root = agroot(g); - if (agroot(g)->desc.has_attrs) - (void) agbindrec(n, AgDataRecName, sizeof(Agattr_t), FALSE); - /* nodeattr_init and method_init will be called later, from the - * subgraph where the node was actually created, but first it has - * to be installed in all the (sub)graphs up to root. */ - return n; -} - -static void installnode(Agraph_t * g, Agnode_t * n) -{ - Agsubnode_t *sn; - int osize; - - assert(dtsize(g->n_id) == dtsize(g->n_seq)); - osize = dtsize(g->n_id); - if (g == agroot(g)) sn = &(n->mainsub); - else sn = agalloc(g, sizeof(Agsubnode_t)); - sn->node = n; - dtinsert(g->n_id, sn); - dtinsert(g->n_seq, sn); - assert(dtsize(g->n_id) == dtsize(g->n_seq)); - assert(dtsize(g->n_id) == osize + 1); -} - -static void installnodetoroot(Agraph_t * g, Agnode_t * n) -{ - Agraph_t *par; - installnode(g, n); - if ((par = agparent(g))) - installnodetoroot(par, n); -} - -static void initnode(Agraph_t * g, Agnode_t * n) -{ - if (agroot(g)->desc.has_attrs) - agnodeattr_init(g,n); - agmethod_init(g, n); -} - -/* external node constructor - create by id */ -Agnode_t *agidnode(Agraph_t * g, IDTYPE id, int cflag) -{ - Agraph_t *root; - Agnode_t *n; - - n = agfindnode_by_id(g, id); - if ((n == NILnode) && cflag) { - root = agroot(g); - if ((g != root) && ((n = agfindnode_by_id(root, id)))) /*old */ - agsubnode(g, n, TRUE); /* insert locally */ - else { - if (agallocid(g, AGNODE, id)) { /* new */ - n = newnode(g, id, agnextseq(g, AGNODE)); - installnodetoroot(g, n); - initnode(g, n); - } else - n = NILnode; /* allocid for new node failed */ - } - } - /* else return probe result */ - return n; -} - -Agnode_t *agnode(Agraph_t * g, char *name, int cflag) -{ - Agraph_t *root; - Agnode_t *n; - IDTYPE id; - - root = agroot(g); - /* probe for existing node */ - if (agmapnametoid(g, AGNODE, name, &id, FALSE)) { - if ((n = agfindnode_by_id(g, id))) - return n; - - /* might already exist globally, but need to insert locally */ - if (cflag && (g != root) && ((n = agfindnode_by_id(root, id)))) { - return agsubnode(g, n, TRUE); - } - } - - if (cflag && agmapnametoid(g, AGNODE, name, &id, TRUE)) { /* reserve id */ - n = newnode(g, id, agnextseq(g, AGNODE)); - installnodetoroot(g, n); - initnode(g, n); - assert(agsubrep(g,n)); - agregister(g, AGNODE, n); /* register in external namespace */ - return n; - } - - return NILnode; -} - -/* removes image of node and its edges from graph. - caller must ensure n belongs to g. */ -void agdelnodeimage(Agraph_t * g, Agnode_t * n, void *ignored) -{ - Agedge_t *e, *f; - static Agsubnode_t template; - template.node = n; - - NOTUSED(ignored); - for (e = agfstedge(g, n); e; e = f) { - f = agnxtedge(g, e, n); - agdeledgeimage(g, e, 0); - } - /* If the following lines are switched, switch the discpline using - * free_subnode below. - */ - dtdelete(g->n_id, &template); - dtdelete(g->n_seq, &template); -} - -int agdelnode(Agraph_t * g, Agnode_t * n) -{ - Agedge_t *e, *f; - - if (!agfindnode_by_id(g, AGID(n))) - return FAILURE; /* bad arg */ - if (g == agroot(g)) { - for (e = agfstedge(g, n); e; e = f) { - f = agnxtedge(g, e, n); - agdeledge(g, e); - } - if (g->desc.has_attrs) - agnodeattr_delete(n); - agmethod_delete(g, n); - agrecclose((Agobj_t *) n); - agfreeid(g, AGNODE, AGID(n)); - } - if (agapply (g, (Agobj_t *) n, (agobjfn_t) agdelnodeimage, NILnode, FALSE) == SUCCESS) { - if (g == agroot(g)) - agfree(g, n); - return SUCCESS; - } else - return FAILURE; -} - -static void dict_relabel(Agnode_t * n, void *arg) -{ - Agraph_t *g; - uint64_t new_id; - - g = agraphof(n); - new_id = *(uint64_t *) arg; - dtdelete(g->n_id, n); /* wrong, should be subrep */ - AGID(n) = new_id; - dtinsert(g->n_id, n); /* also wrong */ - /* because all the subgraphs share the same node now, this - now requires a separate deletion and insertion phase */ -} - -int agrelabel_node(Agnode_t * n, char *newname) -{ - Agraph_t *g; - IDTYPE new_id; - - g = agroot(agraphof(n)); - if (agfindnode_by_name(g, newname)) - return FAILURE; - if (agmapnametoid(g, AGNODE, newname, &new_id, TRUE)) { - if (agfindnode_by_id(agroot(g), new_id) == NILnode) { - agfreeid(g, AGNODE, AGID(n)); - agapply(g, (Agobj_t *) n, (agobjfn_t) dict_relabel, - (void *) &new_id, FALSE); - return SUCCESS; - } else { - agfreeid(g, AGNODE, new_id); /* couldn't use it after all */ - } - /* obj* is unchanged, so no need to re agregister() */ - } - return FAILURE; -} - -/* lookup or insert in */ -Agnode_t *agsubnode(Agraph_t * g, Agnode_t * n0, int cflag) -{ - Agraph_t *par; - Agnode_t *n; - - if (agroot(g) != n0->root) - return NILnode; - n = agfindnode_by_id(g, AGID(n0)); - if ((n == NILnode) && cflag) { - if ((par = agparent(g))) { - n = agsubnode(par, n0, cflag); - installnode(g, n); - /* no callback for existing node insertion in subgraph (?) */ - } - /* else impossible that doesn't belong to */ - } - /* else lookup succeeded */ - return n; -} - -int agsubnodeidcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc) -{ - Agsubnode_t *sn0, *sn1; - - sn0 = (Agsubnode_t *) arg0; - sn1 = (Agsubnode_t *) arg1; - - if (AGID(sn0->node) < AGID(sn1->node)) return -1; - if (AGID(sn0->node) > AGID(sn1->node)) return 1; - return 0; -} - -int agsubnodeseqcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc) -{ - Agsubnode_t *sn0, *sn1; - - sn0 = (Agsubnode_t *) arg0; - sn1 = (Agsubnode_t *) arg1; - - if (AGSEQ(sn0->node) < AGSEQ(sn1->node)) return -1; - if (AGSEQ(sn0->node) > AGSEQ(sn1->node)) return 1; - return 0; -} - -/* free_subnode: - * Free Agsubnode_t allocated in installnode. This should - * only be done for subgraphs, as the root graph uses the - * subnode structure built into the node. This explains the - * AGSNMAIN test. Also, note that both the id and the seq - * dictionaries use the same subnode object, so only one - * should do the deletion. - */ -static void -free_subnode (Dt_t* d, Agsubnode_t* sn, Dtdisc_t * disc) -{ - - if (!AGSNMAIN(sn)) - agfree (sn->node->root, sn); -} - -Dtdisc_t Ag_subnode_id_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - offsetof(Agsubnode_t, id_link), /* link offset */ - NIL(Dtmake_f), - NIL(Dtfree_f), - agsubnodeidcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -Dtdisc_t Ag_subnode_seq_disc = { - 0, /* pass object ptr */ - 0, /* size (ignored) */ - offsetof(Agsubnode_t, seq_link), /* link offset */ - NIL(Dtmake_f), - (Dtfree_f)free_subnode, - agsubnodeseqcmpf, - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -void agnodesetfinger(Agraph_t * g, Agnode_t * n, void *ignored) -{ - static Agsubnode_t template; - template.node = n; - dtsearch(g->n_seq,&template); - NOTUSED(ignored); -} - -void agnoderenew(Agraph_t * g, Agnode_t * n, void *ignored) -{ - dtrenew(g->n_seq, dtfinger(g->n_seq)); - NOTUSED(n); - NOTUSED(ignored); -} - -int agnodebefore(Agnode_t *fst, Agnode_t *snd) -{ - Agraph_t *g; - Agnode_t *n, *nxt; - - - g = agroot(fst); - if (AGSEQ(fst) > AGSEQ(snd)) return SUCCESS; - - /* move snd out of the way somewhere */ - n = snd; - if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnodesetfinger, n, FALSE) != SUCCESS) return FAILURE; - AGSEQ(snd) = (g->clos->seq[AGNODE] + 2); - if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnoderenew, n, FALSE) != SUCCESS) return FAILURE; - n = agprvnode(g,snd); - do { - nxt = agprvnode(g,n); - if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnodesetfinger, n, FALSE) != SUCCESS) return FAILURE; - AGSEQ(n) = AGSEQ(n) + 1; - if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnoderenew, n, FALSE) != SUCCESS) return FAILURE; - if (n == fst) break; - n = nxt; - } while (n); - if (agapply (g, (Agobj_t *) snd, (agobjfn_t) agnodesetfinger, n, FALSE) != SUCCESS) return FAILURE; - AGSEQ(snd) = AGSEQ(fst) - 1; - if (agapply (g, (Agobj_t *) snd, (agobjfn_t) agnoderenew, snd, FALSE) != SUCCESS) return FAILURE; - return SUCCESS; -} diff --git a/internal/ccall/cgraph/obj.c b/internal/ccall/cgraph/obj.c deleted file mode 100755 index 7b1c8c1..0000000 --- a/internal/ccall/cgraph/obj.c +++ /dev/null @@ -1,267 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -int agdelete(Agraph_t * g, void *obj) -{ - if ((AGTYPE((Agobj_t *) obj) == AGRAPH) && (g != agparent(obj))) { - agerr(AGERR, "agdelete on wrong graph"); - return FAILURE; - } - - switch (AGTYPE((Agobj_t *) obj)) { - case AGNODE: - return agdelnode(g, obj); - case AGINEDGE: - case AGOUTEDGE: - return agdeledge(g, obj); - case AGRAPH: - return agclose(obj); - default: - agerr(AGERR, "agdelete on bad object"); - } - return SUCCESS; /* not reached */ -} - -int agrename(Agobj_t * obj, char *newname) -{ - Agraph_t *g; - IDTYPE old_id, new_id; - - switch (AGTYPE(obj)) { - case AGRAPH: - old_id = AGID(obj); - g = agraphof(obj); - /* can we reserve the id corresponding to newname? */ - if (agmapnametoid(agroot(g), AGTYPE(obj), newname, - &new_id, FALSE) == 0) - return FAILURE; - if (new_id == old_id) - return SUCCESS; - if (agmapnametoid(agroot(g), AGTYPE(obj), newname, - &new_id, TRUE) == 0) - return FAILURE; - /* obj* is unchanged, so no need to re agregister() */ - if (agparent(g) && agidsubg(agparent(g), new_id, 0)) - return FAILURE; - agfreeid(g, AGRAPH, old_id); - AGID(g) = new_id; - break; - case AGNODE: - return agrelabel_node((Agnode_t *) obj, newname); - agrename(obj, newname); - break; - case AGINEDGE: - case AGOUTEDGE: - return FAILURE; - } - return SUCCESS; -} - -/* perform initialization/update/finalization method invocation. - * skip over nil pointers to next method below. - */ - -void agmethod_init(Agraph_t * g, void *obj) -{ - if (g->clos->callbacks_enabled) - aginitcb(g, obj, g->clos->cb); - else - agrecord_callback(g, obj, CB_INITIALIZE, NILsym); -} - -void aginitcb(Agraph_t * g, void *obj, Agcbstack_t * cbstack) -{ - agobjfn_t fn; - - if (cbstack == NIL(Agcbstack_t *)) - return; - aginitcb(g, obj, cbstack->prev); - fn = NIL(agobjfn_t); - switch (AGTYPE(obj)) { - case AGRAPH: - fn = cbstack->f->graph.ins; - break; - case AGNODE: - fn = cbstack->f->node.ins; - break; - case AGEDGE: - fn = cbstack->f->edge.ins; - break; - } - if (fn) - fn(g, obj, cbstack->state); -} - -void agmethod_upd(Agraph_t * g, void *obj, Agsym_t * sym) -{ - if (g->clos->callbacks_enabled) - agupdcb(g, obj, sym, g->clos->cb); - else - agrecord_callback(g, obj, CB_UPDATE, sym); -} - -void agupdcb(Agraph_t * g, void *obj, Agsym_t * sym, Agcbstack_t * cbstack) -{ - agobjupdfn_t fn; - - if (cbstack == NIL(Agcbstack_t *)) - return; - agupdcb(g, obj, sym, cbstack->prev); - fn = NIL(agobjupdfn_t); - switch (AGTYPE(obj)) { - case AGRAPH: - fn = cbstack->f->graph.mod; - break; - case AGNODE: - fn = cbstack->f->node.mod; - break; - case AGEDGE: - fn = cbstack->f->edge.mod; - break; - } - if (fn) - fn(g, obj, cbstack->state, sym); -} - -void agmethod_delete(Agraph_t * g, void *obj) -{ - if (g->clos->callbacks_enabled) - agdelcb(g, obj, g->clos->cb); - else - agrecord_callback(g, obj, CB_DELETION, NILsym); -} - -void agdelcb(Agraph_t * g, void *obj, Agcbstack_t * cbstack) -{ - agobjfn_t fn; - - if (cbstack == NIL(Agcbstack_t *)) - return; - agdelcb(g, obj, cbstack->prev); - fn = NIL(agobjfn_t); - switch (AGTYPE(obj)) { - case AGRAPH: - fn = cbstack->f->graph.del; - break; - case AGNODE: - fn = cbstack->f->node.del; - break; - case AGEDGE: - fn = cbstack->f->edge.del; - break; - } - if (fn) - fn(g, obj, cbstack->state); -} - -Agraph_t *agroot(void* obj) -{ - switch (AGTYPE(obj)) { - case AGINEDGE: - case AGOUTEDGE: - return ((Agedge_t *) obj)->node->root; - case AGNODE: - return ((Agnode_t *) obj)->root; - case AGRAPH: - return ((Agraph_t *) obj)->root; - default: /* actually can't occur if only 2 bit tags */ - agerr(AGERR, "agroot of a bad object"); - return NILgraph; - } -} - -Agraph_t *agraphof(void *obj) -{ - switch (AGTYPE(obj)) { - case AGINEDGE: - case AGOUTEDGE: - return ((Agedge_t *) obj)->node->root; - case AGNODE: - return ((Agnode_t *) obj)->root; - case AGRAPH: - return (Agraph_t *) obj; - default: /* actually can't occur if only 2 bit tags */ - agerr(AGERR, "agraphof a bad object"); - return NILgraph; - } -} - -/* to manage disciplines */ -void agpushdisc(Agraph_t * g, Agcbdisc_t * cbd, void *state) -{ - Agcbstack_t *stack_ent; - - stack_ent = AGNEW(g, Agcbstack_t); - stack_ent->f = cbd; - stack_ent->state = state; - stack_ent->prev = g->clos->cb; - g->clos->cb = stack_ent; -} - -int agpopdisc(Agraph_t * g, Agcbdisc_t * cbd) -{ - Agcbstack_t *stack_ent; - - stack_ent = g->clos->cb; - if (stack_ent) { - if (stack_ent->f == cbd) - g->clos->cb = stack_ent->prev; - else { - while (stack_ent && (stack_ent->prev->f != cbd)) - stack_ent = stack_ent->prev; - if (stack_ent && stack_ent->prev) - stack_ent->prev = stack_ent->prev->prev; - } - if (stack_ent) { - agfree(g, stack_ent); - return SUCCESS; - } - } - return FAILURE; -} - -void *aggetuserptr(Agraph_t * g, Agcbdisc_t * cbd) -{ - Agcbstack_t *stack_ent; - - for (stack_ent = g->clos->cb; stack_ent; stack_ent = stack_ent->prev) - if (stack_ent->f == cbd) - return stack_ent->state; - return NIL(void *); -} - -int agcontains(Agraph_t* g, void* obj) -{ - Agraph_t* subg; - - if (agroot (g) != agroot (obj)) return 0; - switch (AGTYPE(obj)) { - case AGRAPH: - subg = (Agraph_t *) obj; - do { - if (subg == g) return 1; - } while ((subg = agparent (subg))); - return 0; - case AGNODE: - return (agidnode(g, AGID(obj), 0) != 0); - default: - return (agsubedge(g, (Agedge_t *) obj, 0) != 0); - } -} - -int agobjkind(void *arg) -{ - return AGTYPE(arg); -} diff --git a/internal/ccall/cgraph/pend.c b/internal/ccall/cgraph/pend.c deleted file mode 100644 index ac91938..0000000 --- a/internal/ccall/cgraph/pend.c +++ /dev/null @@ -1,296 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -static char DRName[] = "_AG_pending"; - -typedef struct symlist_s { - Agsym_t *sym; - struct symlist_s *link; -} symlist_t; - -/* this record describes one pending callback on one object */ -typedef struct { - Dtlink_t link; - IDTYPE key; /* universal key for main or sub-object */ - Agraph_t *g; - Agobj_t *obj; - symlist_t *symlist; /* attributes involved */ -} pending_cb_t; - -typedef struct { - Agrec_t h; - struct { - Dict_t *g, *n, *e; - } ins, mod, del; -} pendingset_t; - -static void free_symlist(pending_cb_t * pcb) -{ - symlist_t *s, *t; - - for (s = pcb->symlist; s; s = t) { - t = s->link; - agfree(pcb->g, s); - } -} - -static void freef(Dict_t * dict, void *ptr, Dtdisc_t * disc) -{ - pending_cb_t *pcb; - - NOTUSED(dict); - NOTUSED(disc); - pcb = ptr; - free_symlist(pcb); - agfree(pcb->g, pcb); -} - -static Dtdisc_t Disc = { - offsetof(pending_cb_t, key), /* sort by 'key' */ - sizeof(uint64_t), - 0, /* link offset */ - NIL(Dtmake_f), - freef, - NIL(Dtcompar_f), - NIL(Dthash_f) -}; - -static Dict_t *dictof(pendingset_t * ds, Agobj_t * obj, int kind) -{ - Dict_t **dict_ref = NIL(Dict_t **); - - dict_ref = 0; - switch (AGTYPE(obj)) { - case AGRAPH: - switch (kind) { - case CB_INITIALIZE: - dict_ref = &(ds->ins.g); - break; - case CB_UPDATE: - dict_ref = &(ds->mod.g); - break; - case CB_DELETION: - dict_ref = &(ds->del.g); - break; - default: - break; - } - break; - case AGNODE: - switch (kind) { - case CB_INITIALIZE: - dict_ref = &(ds->ins.n); - break; - case CB_UPDATE: - dict_ref = &(ds->mod.n); - break; - case CB_DELETION: - dict_ref = &(ds->del.n); - break; - default: - break; - } - break; - case AGEDGE: - switch (kind) { - case CB_INITIALIZE: - dict_ref = &(ds->ins.e); - break; - case CB_UPDATE: - dict_ref = &(ds->mod.e); - break; - case CB_DELETION: - dict_ref = &(ds->del.e); - break; - default: - break; - } - break; - default: - break; - } - - if (dict_ref == 0) - agerr(AGERR, "pend dictof a bad object"); - if (*dict_ref == NIL(Dict_t *)) - *dict_ref = agdtopen(agraphof(obj), &Disc, Dttree); - return *dict_ref; -} - -static IDTYPE genkey(Agobj_t * obj) -{ - return obj->tag.id; -} - -static pending_cb_t *lookup(Dict_t * dict, Agobj_t * obj) -{ - pending_cb_t key, *rv; - - key.key = genkey(obj); - rv = (pending_cb_t *) dtsearch(dict, &key); - return rv; -} - -static void record_sym(Agobj_t * obj, pending_cb_t * handle, - Agsym_t * optsym) -{ - symlist_t *sym, *nsym, *psym; - - psym = NIL(symlist_t *); - for (sym = handle->symlist; sym; psym = sym, sym = sym->link) { - if (sym->sym == optsym) - break; - if (sym == NIL(symlist_t *)) { - nsym = agalloc(agraphof(obj), sizeof(symlist_t)); - nsym->sym = optsym; - if (psym) - psym->link = nsym; - else - handle->symlist = nsym; - } - /* else we already have a callback registered */ - } -} - -static pending_cb_t *insert(Dict_t * dict, Agraph_t * g, Agobj_t * obj, - Agsym_t * optsym) -{ - pending_cb_t *handle; - handle = agalloc(agraphof(obj), sizeof(pending_cb_t)); - handle->obj = obj; - handle->key = genkey(obj); - handle->g = g; - if (optsym) { - handle->symlist = - (symlist_t *) agalloc(handle->g, sizeof(symlist_t)); - handle->symlist->sym = optsym; - } - dtinsert(dict, handle); - return handle; -} - -static void purge(Dict_t * dict, Agobj_t * obj) -{ - pending_cb_t *handle; - - if ((handle = lookup(dict, obj))) { - dtdelete(dict, handle); - } -} - -void agrecord_callback(Agraph_t * g, Agobj_t * obj, int kind, - Agsym_t * optsym) -{ - pendingset_t *pending; - Dict_t *dict; - pending_cb_t *handle; - - pending = - (pendingset_t *) agbindrec(g, DRName, sizeof(pendingset_t), FALSE); - - switch (kind) { - case CB_INITIALIZE: - assert(lookup(dictof(pending, obj, CB_UPDATE), obj) == 0); - assert(lookup(dictof(pending, obj, CB_DELETION), obj) == 0); - dict = dictof(pending, obj, CB_INITIALIZE); - handle = lookup(dict, obj); - if (handle == 0) - handle = insert(dict, g, obj, optsym); - break; - case CB_UPDATE: - if (lookup(dictof(pending, obj, CB_INITIALIZE), obj)) - break; - if (lookup(dictof(pending, obj, CB_DELETION), obj)) - break; - dict = dictof(pending, obj, CB_UPDATE); - handle = lookup(dict, obj); - if (handle == 0) - handle = insert(dict, g, obj, optsym); - record_sym(obj, handle, optsym); - break; - case CB_DELETION: - purge(dictof(pending, obj, CB_INITIALIZE), obj); - purge(dictof(pending, obj, CB_UPDATE), obj); - dict = dictof(pending, obj, CB_DELETION); - handle = lookup(dict, obj); - if (handle == 0) - handle = insert(dict, g, obj, optsym); - break; - default: - agerr(AGERR,"agrecord_callback of a bad object"); - } -} - -static void cb(Dict_t * dict, int callback_kind) -{ - pending_cb_t *pcb; - Agraph_t *g; - symlist_t *psym; - Agcbstack_t *stack; - - if (dict) - while ((pcb = (pending_cb_t *) dtfirst(dict))) { - g = pcb->g; - stack = g->clos->cb; - switch (callback_kind) { - case CB_INITIALIZE: - aginitcb(g, pcb->obj, stack); - break; - case CB_UPDATE: - for (psym = pcb->symlist; psym; psym = psym->link) - agupdcb(g, pcb->obj, psym->sym, stack); - break; - case CB_DELETION: - agdelcb(g, pcb->obj, stack); - break; - } - dtdelete(dict, pcb); - } -} - -static void agrelease_callbacks(Agraph_t * g) -{ - pendingset_t *pending; - if (NOT(g->clos->callbacks_enabled)) { - g->clos->callbacks_enabled = TRUE; - pending = - (pendingset_t *) agbindrec(g, DRName, sizeof(pendingset_t), - FALSE); - /* this destroys objects in the opposite of their order of creation */ - cb(pending->ins.g, CB_INITIALIZE); - cb(pending->ins.n, CB_INITIALIZE); - cb(pending->ins.e, CB_INITIALIZE); - - cb(pending->mod.g, CB_UPDATE); - cb(pending->mod.n, CB_UPDATE); - cb(pending->mod.e, CB_UPDATE); - - cb(pending->del.e, CB_DELETION); - cb(pending->del.n, CB_DELETION); - cb(pending->del.g, CB_DELETION); - } -} - -int agcallbacks(Agraph_t * g, int flag) -{ - if (flag && NOT(g->clos->callbacks_enabled)) - agrelease_callbacks(g); - if (g->clos->callbacks_enabled) { - g->clos->callbacks_enabled = flag; - return TRUE; - } - g->clos->callbacks_enabled = flag; - return FALSE; -} diff --git a/internal/ccall/cgraph/rec.c b/internal/ccall/cgraph/rec.c deleted file mode 100644 index c2567f5..0000000 --- a/internal/ccall/cgraph/rec.c +++ /dev/null @@ -1,278 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -/* - * run time records - */ - -static void set_data(Agobj_t * obj, Agrec_t * data, int mtflock) -{ - Agedge_t *e; - - obj->data = data; - obj->tag.mtflock = mtflock; - if ((AGTYPE(obj) == AGINEDGE) || (AGTYPE(obj) == AGOUTEDGE)) { - e = agopp((Agedge_t *) obj); - AGDATA(e) = data; - e->base.tag.mtflock = mtflock; - } -} - -/* find record in circular list and do optional move-to-front */ -Agrec_t *aggetrec(void *obj, char *name, int mtf) -{ - Agobj_t *hdr; - Agrec_t *d, *first; - - hdr = (Agobj_t *) obj; - first = d = hdr->data; - while (d) { - if ((d->name == name) || streq(name, d->name)) - break; - d = d->next; - if (d == first) { - d = NIL(Agrec_t *); - break; - } - } - if (d) { - if (hdr->tag.mtflock) { - if (mtf && (hdr->data != d)) - agerr(AGERR, "move to front lock inconsistency"); - } else { - if ((d != first) || (mtf != hdr->tag.mtflock)) - set_data(hdr, d, mtf); /* Always optimize */ - } - } - return d; -} - -/* insert the record in data list of this object (only) */ -static void objputrec(Agraph_t * g, Agobj_t * obj, void *arg) -{ - Agrec_t *firstrec, *newrec; - - newrec = arg; - firstrec = obj->data; - if (firstrec == NIL(Agrec_t *)) - newrec->next = newrec; /* 0 elts */ - else { - if (firstrec->next == firstrec) { - firstrec->next = newrec; /* 1 elt */ - newrec->next = firstrec; - } else { - newrec->next = firstrec->next; - firstrec->next = newrec; - } - } - if (NOT(obj->tag.mtflock)) - set_data(obj, newrec, FALSE); -} - -/* attach a new record of the given size to the object. - */ -void *agbindrec(void *arg_obj, char *recname, unsigned int recsize, - int mtf) -{ - Agraph_t *g; - Agobj_t *obj; - Agrec_t *rec; - - obj = (Agobj_t *) arg_obj; - g = agraphof(obj); - rec = aggetrec(obj, recname, FALSE); - if ((rec == NIL(Agrec_t *)) && (recsize > 0)) { - rec = (Agrec_t *) agalloc(g, recsize); - rec->name = agstrdup(g, recname); - switch (obj->tag.objtype) { - case AGRAPH: - objputrec(g, obj, rec); - break; - case AGNODE: - objputrec(g, obj, rec); - break; - case AGINEDGE: - case AGOUTEDGE: - objputrec(g, obj, rec); - break; - } - } - if (mtf) - aggetrec(arg_obj, recname, TRUE); - return (void *) rec; -} - - -/* if obj points to rec, move its data pointer. break any mtf lock(?) */ -static void objdelrec(Agraph_t * g, Agobj_t * obj, void *arg_rec) -{ - Agrec_t *rec = (Agrec_t *) arg_rec, *newrec; - if (obj->data == rec) { - if (rec->next == rec) - newrec = NIL(Agrec_t *); - else - newrec = rec->next; - set_data(obj, newrec, FALSE); - } -} - -/* delete a record from a circular data list */ -static void listdelrec(Agobj_t * obj, Agrec_t * rec) -{ - Agrec_t *prev; - - prev = obj->data; - while (prev->next != rec) { - prev = prev->next; - assert(prev != obj->data); - } - /* following is a harmless no-op if the list is trivial */ - prev->next = rec->next; -} - -int agdelrec(void *arg_obj, char *name) -{ - Agobj_t *obj; - Agrec_t *rec; - Agraph_t *g; - - obj = (Agobj_t *) arg_obj; - g = agraphof(obj); - rec = aggetrec(obj, name, FALSE); - if (rec) { - listdelrec(obj, rec); /* zap it from the circular list */ - switch (obj->tag.objtype) { /* refresh any stale pointers */ - case AGRAPH: - objdelrec(g, obj, rec); - break; - case AGNODE: - case AGINEDGE: - case AGOUTEDGE: - agapply(agroot(g), obj, objdelrec, rec, FALSE); - break; - } - agstrfree(g, rec->name); - agfree(g, rec); - return SUCCESS; - } else - return FAILURE; -} - -static void simple_delrec(Agraph_t * g, Agobj_t * obj, void *rec_name) -{ - agdelrec(obj, rec_name); -} - -#ifdef OLD -void agclean(Agraph_t * g, char *graphdata, char *nodedata, char *edgedata) -{ - Agnode_t *n; - Agedge_t *e; - - if (nodedata || edgedata) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (edgedata) - for (e = agfstout(n); e; e = agnxtout(g, e)) { - agdelrec(e, edgedata); - } - if (nodedata) - agdelrec(n, nodedata); - } - } - agdelrec(g, graphdata); -} -#endif - -void aginit(Agraph_t * g, int kind, char *rec_name, int arg_rec_size, int mtf) -{ - Agnode_t *n; - Agedge_t *e; - Agraph_t *s; - unsigned int rec_size; - int recur; /* if recursive on subgraphs */ - - if (arg_rec_size < 0) - { - recur = 1; - } - else - { - recur = 0; - } - rec_size = (unsigned int) abs(arg_rec_size); - switch (kind) { - case AGRAPH: - agbindrec(g, rec_name, rec_size, mtf); - if (recur) - for (s = agfstsubg(g); s; s = agnxtsubg(s)) - aginit(s,kind,rec_name,arg_rec_size,mtf); - break; - case AGNODE: - case AGOUTEDGE: - case AGINEDGE: - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - if (kind == AGNODE) - agbindrec(n, rec_name, rec_size, mtf); - else { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - agbindrec(e, rec_name, rec_size, mtf); - } - break; - default: - break; - } -} - -void agclean(Agraph_t * g, int kind, char *rec_name) -{ - Agnode_t *n; - Agedge_t *e; - - switch (kind) { - case AGRAPH: - agapply(g, (Agobj_t *) g, simple_delrec, rec_name, TRUE); - break; - case AGNODE: - case AGOUTEDGE: - case AGINEDGE: - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - if (kind == AGNODE) - agdelrec(n, rec_name); - else { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - agdelrec(e, rec_name); - } - break; - default: - break; - } -} - -void agrecclose(Agobj_t * obj) -{ - Agraph_t *g; - Agrec_t *rec, *nrec; - - g = agraphof(obj); - if ((rec = obj->data)) { - do { - nrec = rec->next; - agstrfree(g, rec->name); - agfree(g, rec); - rec = nrec; - } while (rec != obj->data); - } - obj->data = NIL(Agrec_t *); -} diff --git a/internal/ccall/cgraph/refstr.c b/internal/ccall/cgraph/refstr.c deleted file mode 100644 index 0144ccf..0000000 --- a/internal/ccall/cgraph/refstr.c +++ /dev/null @@ -1,215 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -/* - * reference counted strings. - */ - -static uint64_t HTML_BIT; /* msbit of uint64_t */ -static uint64_t CNT_BITS; /* complement of HTML_BIT */ - -typedef struct refstr_t { - Dtlink_t link; - uint64_t refcnt; - char *s; - char store[1]; /* this is actually a dynamic array */ -} refstr_t; - -static Dtdisc_t Refstrdisc = { - offsetof(refstr_t, s), /* key */ - -1, /* size */ - 0, /* link offset */ - NIL(Dtmake_f), - agdictobjfree, - NIL(Dtcompar_f), - NIL(Dthash_f), - agdictobjmem, - NIL(Dtevent_f) -}; - -static Dict_t *Refdict_default; - -/* refdict: - * Return the string dictionary associated with g. - * If necessary, create it. - * As a side-effect, set html masks. This assumes 8-bit bytes. - */ -static Dict_t *refdict(Agraph_t * g) -{ - Dict_t **dictref; - - if (g) - dictref = &(g->clos->strdict); - else - dictref = &Refdict_default; - if (*dictref == NIL(Dict_t *)) { - *dictref = agdtopen(g, &Refstrdisc, Dttree); - HTML_BIT = ((unsigned int) 1) << (sizeof(unsigned int) * 8 - 1); - CNT_BITS = ~HTML_BIT; - } - return *dictref; -} - -int agstrclose(Agraph_t * g) -{ - return agdtclose(g, refdict(g)); -} - -static refstr_t *refsymbind(Dict_t * strdict, char *s) -{ - refstr_t key, *r; - key.s = s; - r = (refstr_t *) dtsearch(strdict, &key); - return r; -} - -static char *refstrbind(Dict_t * strdict, char *s) -{ - refstr_t *r; - r = refsymbind(strdict, s); - if (r) - return r->s; - else - return NIL(char *); -} - -char *agstrbind(Agraph_t * g, char *s) -{ - return refstrbind(refdict(g), s); -} - -char *agstrdup(Agraph_t * g, char *s) -{ - refstr_t *r; - Dict_t *strdict; - size_t sz; - - if (s == NIL(char *)) - return NIL(char *); - strdict = refdict(g); - r = refsymbind(strdict, s); - if (r) - r->refcnt++; - else { - sz = sizeof(refstr_t) + strlen(s); - if (g) - r = (refstr_t *) agalloc(g, sz); - else - r = (refstr_t *) malloc(sz); - r->refcnt = 1; - strcpy(r->store, s); - r->s = r->store; - dtinsert(strdict, r); - } - return r->s; -} - -char *agstrdup_html(Agraph_t * g, char *s) -{ - refstr_t *r; - Dict_t *strdict; - size_t sz; - - if (s == NIL(char *)) - return NIL(char *); - strdict = refdict(g); - r = refsymbind(strdict, s); - if (r) - r->refcnt++; - else { - sz = sizeof(refstr_t) + strlen(s); - if (g) - r = (refstr_t *) agalloc(g, sz); - else - r = (refstr_t *) malloc(sz); - r->refcnt = 1 | HTML_BIT; - strcpy(r->store, s); - r->s = r->store; - dtinsert(strdict, r); - } - return r->s; -} - -int agstrfree(Agraph_t * g, char *s) -{ - refstr_t *r; - Dict_t *strdict; - - if (s == NIL(char *)) - return FAILURE; - - strdict = refdict(g); - r = refsymbind(strdict, s); - if (r && (r->s == s)) { - r->refcnt--; - if ((r->refcnt && CNT_BITS) == 0) { - agdtdelete(g, strdict, r); - /* - if (g) agfree(g,r); - else free(r); - */ - } - } - if (r == NIL(refstr_t *)) - return FAILURE; - return SUCCESS; -} - -/* aghtmlstr: - * Return true if s is an HTML string. - * We assume s points to the datafield store[0] of a refstr. - */ -int aghtmlstr(char *s) -{ - refstr_t *key; - - if (s == NULL) - return 0; - key = (refstr_t *) (s - offsetof(refstr_t, store[0])); - return (key->refcnt & HTML_BIT); -} - -void agmarkhtmlstr(char *s) -{ - refstr_t *key; - - if (s == NULL) - return; - key = (refstr_t *) (s - offsetof(refstr_t, store[0])); - key->refcnt |= HTML_BIT; -} - -#ifdef DEBUG -static int refstrprint(Dict_t * dict, void *ptr, void *user) -{ - refstr_t *r; - - NOTUSED(dict); - r = ptr; - NOTUSED(user); - write(2, r->s, strlen(r->s)); - write(2, "\n", 1); - return 0; -} - -void agrefstrdump(Agraph_t * g) -{ - dtwalk(Refdict_default, refstrprint, 0); -} -#endif diff --git a/internal/ccall/cgraph/scan.c b/internal/ccall/cgraph/scan.c deleted file mode 100644 index 83db17c..0000000 --- a/internal/ccall/cgraph/scan.c +++ /dev/null @@ -1,2197 +0,0 @@ - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -extern YYSTYPE aaglval; - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define aagconst const -#else -#define aagconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (aag_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((aag_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE aagrestart(aagin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(aag_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct aag_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t aag_size_t; -#endif - -extern aag_size_t aagleng; - -extern FILE *aagin, *aagout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define aagless(n) \ - do \ - { \ - /* Undo effects of setting up aagtext. */ \ - int aagless_macro_arg = (n); \ - YY_LESS_LINENO(aagless_macro_arg);\ - *aag_cp = (aag_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (aag_c_buf_p) = aag_cp = aag_bp + aagless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up aagtext again */ \ - } \ - while ( 0 ) - -#define unput(c) aagunput( c, (aagtext_ptr) ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct aag_buffer_state - { - FILE *aag_input_file; - - char *aag_ch_buf; /* input buffer */ - char *aag_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - aag_size_t aag_buf_size; - - /* Number of characters read into aag_ch_buf, not including EOB - * characters. - */ - aag_size_t aag_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int aag_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int aag_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int aag_at_bol; - - int aag_bs_lineno; /**< The line count. */ - int aag_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int aag_fill_buffer; - - int aag_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via aagrestart()), so that the user can continue scanning by - * just pointing aagin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t aag_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t aag_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * aag_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (aag_buffer_stack) \ - ? (aag_buffer_stack)[(aag_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (aag_buffer_stack)[(aag_buffer_stack_top)] - -/* aag_hold_char holds the character lost when aagtext is formed. */ -static char aag_hold_char; -static aag_size_t aag_n_chars; /* number of characters read into aag_ch_buf */ -aag_size_t aagleng; - -/* Points to current character in buffer. */ -static char *aag_c_buf_p = (char *) 0; -static int aag_init = 0; /* whether we need to initialize */ -static int aag_start = 0; /* start state number */ - -/* Flag which is used to allow aagwrap()'s to do buffer switches - * instead of setting up a fresh aagin. A bit of a hack ... - */ -static int aag_did_buffer_switch_on_eof; - -void aagrestart (FILE *input_file ); -void aag_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE aag_create_buffer (FILE *file,int size ); -void aag_delete_buffer (YY_BUFFER_STATE b ); -void aag_flush_buffer (YY_BUFFER_STATE b ); -void aagpush_buffer_state (YY_BUFFER_STATE new_buffer ); -void aagpop_buffer_state (void ); - -static void aagensure_buffer_stack (void ); -static void aag_load_buffer_state (void ); -static void aag_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER aag_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE aag_scan_buffer (char *base,aag_size_t size ); -YY_BUFFER_STATE aag_scan_string (aagconst char *aag_str ); -YY_BUFFER_STATE aag_scan_bytes (aagconst char *bytes,aag_size_t len ); - -void *aagalloc (aag_size_t ); -void *aagrealloc (void *,aag_size_t ); -void aagfree (void * ); - -#define aag_new_buffer aag_create_buffer - -#define aag_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - aagensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - aag_create_buffer(aagin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->aag_is_interactive = is_interactive; \ - } - -#define aag_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - aagensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - aag_create_buffer(aagin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->aag_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->aag_at_bol) - -/* Begin user sect3 */ - -typedef unsigned char YY_CHAR; - -FILE *aagin = (FILE *) 0, *aagout = (FILE *) 0; - -typedef int aag_state_type; - -extern int aaglineno; - -int aaglineno = 1; - -extern char *aagtext; -#define aagtext_ptr aagtext - -static aag_state_type aag_get_previous_state (void ); -static aag_state_type aag_try_NUL_trans (aag_state_type current_state ); -static int aag_get_next_buffer (void ); -static void aag_fatal_error (aagconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up aagtext. - */ -#define YY_DO_BEFORE_ACTION \ - (aagtext_ptr) = aag_bp; \ - aagleng = (size_t) (aag_cp - aag_bp); \ - (aag_hold_char) = *aag_cp; \ - *aag_cp = '\0'; \ - (aag_c_buf_p) = aag_cp; - -#define YY_NUM_RULES 34 -#define YY_END_OF_BUFFER 35 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct aag_trans_info - { - flex_int32_t aag_verify; - flex_int32_t aag_nxt; - }; -static aagconst flex_int16_t aag_accept[93] = - { 0, - 0, 0, 4, 4, 27, 27, 32, 32, 35, 33, - 10, 2, 22, 9, 33, 33, 33, 21, 28, 1, - 20, 20, 20, 20, 20, 20, 20, 8, 4, 5, - 27, 2, 23, 27, 32, 31, 30, 29, 9, 19, - 0, 21, 18, 21, 3, 7, 21, 21, 20, 20, - 20, 20, 20, 20, 20, 20, 8, 4, 5, 5, - 6, 27, 26, 24, 25, 32, 7, 21, 20, 20, - 20, 20, 20, 20, 11, 20, 13, 20, 12, 20, - 20, 20, 14, 20, 20, 20, 16, 20, 15, 20, - 17, 0 - - } ; - -static aagconst flex_int32_t aag_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, - 1, 6, 1, 1, 7, 8, 9, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 1, 1, 11, - 1, 12, 1, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 19, 19, 19, 19, 23, 24, 25, - 19, 26, 27, 28, 29, 19, 19, 19, 19, 19, - 1, 30, 1, 1, 19, 1, 31, 32, 33, 34, - - 35, 19, 36, 37, 38, 19, 19, 19, 19, 39, - 40, 41, 19, 42, 43, 44, 45, 19, 19, 19, - 19, 19, 1, 1, 1, 1, 1, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 46, 19, 19, 19, - 47, 19, 19, 19, 19, 19, 19, 19, 19, 19, - - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 48, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19 - } ; - -static aagconst flex_int32_t aag_meta[49] = - { 0, - 1, 1, 2, 3, 1, 4, 1, 5, 1, 6, - 7, 7, 1, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6 - } ; - -static aagconst flex_int16_t aag_base[105] = - { 0, - 0, 174, 46, 47, 51, 53, 48, 55, 170, 219, - 219, 219, 219, 0, 61, 135, 55, 55, 219, 219, - 0, 40, 53, 46, 50, 47, 98, 0, 0, 71, - 0, 0, 219, 81, 0, 219, 219, 219, 0, 219, - 132, 85, 219, 130, 219, 0, 129, 219, 0, 62, - 66, 65, 72, 68, 82, 91, 0, 0, 94, 95, - 219, 0, 219, 219, 219, 0, 0, 123, 73, 87, - 82, 90, 90, 93, 0, 95, 0, 95, 0, 101, - 93, 95, 0, 93, 110, 106, 0, 105, 0, 110, - 0, 219, 147, 154, 161, 168, 171, 112, 177, 184, - - 191, 198, 205, 211 - } ; - -static aagconst flex_int16_t aag_def[105] = - { 0, - 92, 1, 93, 93, 94, 94, 95, 95, 92, 92, - 92, 92, 92, 96, 92, 92, 92, 97, 92, 92, - 98, 98, 98, 98, 98, 98, 98, 99, 100, 101, - 102, 102, 92, 92, 103, 92, 92, 92, 96, 92, - 92, 97, 92, 97, 92, 104, 97, 92, 98, 98, - 98, 98, 98, 98, 98, 98, 99, 100, 101, 101, - 92, 102, 92, 92, 92, 103, 104, 97, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 0, 92, 92, 92, 92, 92, 92, 92, 92, - - 92, 92, 92, 92 - } ; - -static aagconst flex_int16_t aag_nxt[268] = - { 0, - 10, 11, 12, 13, 14, 10, 15, 16, 17, 18, - 19, 10, 20, 21, 21, 21, 22, 23, 21, 24, - 21, 21, 25, 21, 21, 21, 26, 21, 21, 10, - 21, 21, 21, 22, 23, 24, 21, 21, 25, 21, - 21, 21, 26, 21, 21, 21, 21, 27, 12, 12, - 36, 30, 30, 32, 33, 32, 33, 36, 37, 38, - 45, 50, 47, 46, 42, 37, 38, 40, 41, 51, - 42, 52, 43, 53, 54, 55, 60, 50, 71, 61, - 34, 69, 34, 63, 64, 70, 51, 52, 72, 53, - 54, 55, 47, 73, 42, 71, 74, 69, 76, 92, - - 60, 70, 92, 61, 77, 72, 78, 79, 82, 73, - 65, 80, 81, 74, 76, 83, 84, 49, 85, 86, - 87, 77, 78, 88, 79, 82, 89, 80, 81, 90, - 91, 83, 68, 84, 85, 86, 87, 75, 68, 44, - 88, 44, 89, 56, 44, 90, 91, 29, 29, 29, - 29, 29, 29, 29, 31, 31, 31, 31, 31, 31, - 31, 35, 35, 35, 35, 35, 35, 35, 39, 92, - 39, 39, 39, 39, 39, 48, 48, 57, 28, 57, - 57, 57, 57, 57, 58, 92, 58, 92, 58, 58, - 58, 59, 92, 59, 59, 59, 59, 59, 62, 62, - - 92, 62, 62, 62, 62, 66, 92, 66, 66, 66, - 66, 67, 92, 67, 67, 67, 67, 67, 9, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92 - } ; - -static aagconst flex_int16_t aag_chk[268] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, - 7, 3, 4, 5, 5, 6, 6, 8, 7, 7, - 17, 22, 18, 17, 18, 8, 8, 15, 15, 23, - 15, 24, 15, 25, 26, 26, 30, 22, 52, 30, - 5, 50, 6, 34, 34, 51, 23, 24, 53, 25, - 26, 26, 42, 54, 42, 52, 55, 50, 69, 59, - - 60, 51, 59, 60, 70, 53, 71, 72, 76, 54, - 34, 73, 74, 55, 69, 78, 80, 98, 81, 82, - 84, 70, 71, 85, 72, 76, 86, 73, 74, 88, - 90, 78, 68, 80, 81, 82, 84, 56, 47, 44, - 85, 41, 86, 27, 16, 88, 90, 93, 93, 93, - 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, - 94, 95, 95, 95, 95, 95, 95, 95, 96, 9, - 96, 96, 96, 96, 96, 97, 97, 99, 2, 99, - 99, 99, 99, 99, 100, 0, 100, 0, 100, 100, - 100, 101, 0, 101, 101, 101, 101, 101, 102, 102, - - 0, 102, 102, 102, 102, 103, 0, 103, 103, 103, - 103, 104, 0, 104, 104, 104, 104, 104, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92 - } ; - -static aag_state_type aag_last_accepting_state; -static char *aag_last_accepting_cpos; - -extern int aag_flex_debug; -int aag_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define aagmore() aagmore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *aagtext; -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -/* requires flex (i.e. not lex) */ -#include -#include -#include -#include -// #define YY_BUF_SIZE 128000 -#define GRAPH_EOF_TOKEN '@' /* lex class must be defined below */ - /* this is a workaround for linux flex */ -static int line_num = 1; -static int html_nest = 0; /* nesting level for html strings */ -static char* InputFile; -static Agdisc_t *_Disc; -static void *Ifile; -static int graphType; - - /* Reset line number */ -void agreadline(int n) { line_num = n; } - - /* (Re)set file: - */ -void agsetfile(char* f) { InputFile = f; line_num = 1; } - -/* There is a hole here, because switching channels - * requires pushing back whatever was previously read. - * There probably is a right way of doing this. - */ -void aglexinit(Agdisc_t *disc, void *ifile) { _Disc = disc; Ifile = ifile; graphType = 0;} - -#define isatty(x) 0 -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ((result = _Disc->io->afread(Ifile, buf, max_size)) < 0) \ - YY_FATAL_ERROR( "input in flex scanner failed" ) -#endif - -/* buffer for arbitrary length strings (longer than BUFSIZ) */ -static char *Sbuf,*Sptr,*Send; -static void beginstr(void) { - if (Sbuf == NIL(char*)) { - Sbuf = malloc(BUFSIZ); - Send = Sbuf + BUFSIZ; - } - Sptr = Sbuf; - *Sptr = 0; -} - -static void addstr(char *src) { - char c; - if (Sptr > Sbuf) Sptr--; - do { - do {c = *Sptr++ = *src++;} while (c && (Sptr < Send)); - if (c) { - long sz = Send - Sbuf; - long off = Sptr - Sbuf; - sz *= 2; - Sbuf = (char*)realloc(Sbuf,sz); - Send = Sbuf + sz; - Sptr = Sbuf + off; - } - } while (c); -} - -static void endstr(void) { - aaglval.str = (char*)agstrdup(Ag_G_global,Sbuf); - *Sbuf = 0; -} - -static void endstr_html(void) { - aaglval.str = (char*)agstrdup_html(Ag_G_global,Sbuf); - *Sbuf = 0; -} - -static void -storeFileName (char* fname, int len) -{ - static int cnt; - static char* buf; - - if (len > cnt) { - if (cnt) buf = (char*)realloc (buf, len+1); - else buf = (char*)malloc (len+1); - cnt = len; - } - strcpy (buf, fname); - InputFile = buf; -} - -/* ppDirective: - * Process a possible preprocessor line directive. - * aagtext = #.* - */ -static void ppDirective (void) -{ - int r, cnt, lineno; - char buf[2]; - char* s = aagtext + 1; /* skip initial # */ - - if (strncmp(s, "line", 4) == 0) s += 4; - r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt); - if (r > 0) { /* got line number */ - line_num = lineno - 1; - if (r > 1) { /* saw quote */ - char* p = s + cnt; - char* e = p; - while (*e && (*e != '"')) e++; - if (e != p && *e == '"') { - *e = '\0'; - storeFileName (p, e-p); - } - } - } -} - -/* twoDots: - * Return true if token has more than one '.'; - * we know the last character is a '.'. - */ -static int twoDots(void) -{ - int i; - for (i = aagleng-2; i >= 0; i--) { - if (((unsigned char)aagtext[i]) == '.') - return 1; - } - return 0; -} - -/* chkNum: - * The regexp for NUMBER allows a terminating letter or '.'. - * This way we can catch a number immediately followed by a name - * or something like 123.456.78, and report this to the user. - */ -static int chkNum(void) { - unsigned char c = (unsigned char)aagtext[aagleng-1]; /* last character */ - if ((!isdigit(c) && (c != '.')) || ((c == '.') && twoDots())) { /* c is letter */ - unsigned char xbuf[BUFSIZ]; - char buf[BUFSIZ]; - agxbuf xb; - char* fname; - - if (InputFile) - fname = InputFile; - else - fname = "input"; - - agxbinit(&xb, BUFSIZ, xbuf); - - agxbput(&xb,"syntax ambiguity - badly delimited number '"); - agxbput(&xb,aagtext); - sprintf(buf,"' in line %d of ", line_num); - agxbput(&xb,buf); - agxbput(&xb,fname); - agxbput(&xb, " splits into two tokens\n"); - agerr(AGWARN, "%s", agxbuse(&xb)); - - agxbfree(&xb); - return 1; - } - else return 0; -} - -/* The LETTER class below consists of ascii letters, underscore, all non-ascii - * characters. This allows identifiers to have characters from any - * character set independent of locale. The downside is that, for certain - * character sets, non-letter and, in fact, undefined characters will be - * accepted. This is not likely and, from dot's stand, shouldn't do any - * harm. (Presumably undefined characters will be ignored in display.) And, - * it allows a greater wealth of names. */ - - - -#define INITIAL 0 -#define comment 1 -#define qstring 2 -#define hstring 3 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int aag_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int aaglex_destroy (void ); - -int aagget_debug (void ); - -void aagset_debug (int debug_flag ); - -YY_EXTRA_TYPE aagget_extra (void ); - -void aagset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *aagget_in (void ); - -void aagset_in (FILE * in_str ); - -FILE *aagget_out (void ); - -void aagset_out (FILE * out_str ); - -aag_size_t aagget_leng (void ); - -char *aagget_text (void ); - -int aagget_lineno (void ); - -void aagset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int aagwrap (void ); -#else -extern int aagwrap (void ); -#endif -#endif - - static void aagunput (int c,char *buf_ptr ); - -#ifndef aagtext_ptr -static void aag_flex_strncpy (char *,aagconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int aag_flex_strlen (aagconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int aaginput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( aagtext, aagleng, 1, aagout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->aag_is_interactive ) \ - { \ - int c = '*'; \ - size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( aagin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( aagin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, aagin))==0 && ferror(aagin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(aagin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "aagterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef aagterminate -#define aagterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) aag_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int aaglex (void); - -#define YY_DECL int aaglex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after aagtext and aagleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - if ( aagleng > 0 ) \ - YY_CURRENT_BUFFER_LVALUE->aag_at_bol = \ - (aagtext[aagleng - 1] == '\n'); \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register aag_state_type aag_current_state; - register char *aag_cp, *aag_bp; - register int aag_act; - - - if ( !(aag_init) ) - { - (aag_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (aag_start) ) - (aag_start) = 1; /* first start state */ - - if ( ! aagin ) - aagin = stdin; - - if ( ! aagout ) - aagout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - aagensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - aag_create_buffer(aagin,YY_BUF_SIZE ); - } - - aag_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - aag_cp = (aag_c_buf_p); - - /* Support of aagtext. */ - *aag_cp = (aag_hold_char); - - /* aag_bp points to the position in aag_ch_buf of the start of - * the current run. - */ - aag_bp = aag_cp; - - aag_current_state = (aag_start); - aag_current_state += YY_AT_BOL(); -aag_match: - do - { - register YY_CHAR aag_c = aag_ec[YY_SC_TO_UI(*aag_cp)]; - if ( aag_accept[aag_current_state] ) - { - (aag_last_accepting_state) = aag_current_state; - (aag_last_accepting_cpos) = aag_cp; - } - while ( aag_chk[aag_base[aag_current_state] + aag_c] != aag_current_state ) - { - aag_current_state = (int) aag_def[aag_current_state]; - if ( aag_current_state >= 93 ) - aag_c = aag_meta[(unsigned int) aag_c]; - } - aag_current_state = aag_nxt[aag_base[aag_current_state] + (unsigned int) aag_c]; - ++aag_cp; - } - while ( aag_base[aag_current_state] != 219 ); - -aag_find_action: - aag_act = aag_accept[aag_current_state]; - if ( aag_act == 0 ) - { /* have to back up */ - aag_cp = (aag_last_accepting_cpos); - aag_current_state = (aag_last_accepting_state); - aag_act = aag_accept[aag_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( aag_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *aag_cp = (aag_hold_char); - aag_cp = (aag_last_accepting_cpos); - aag_current_state = (aag_last_accepting_state); - goto aag_find_action; - -case 1: -YY_RULE_SETUP -return(EOF); - YY_BREAK -case 2: -/* rule 2 can match eol */ -YY_RULE_SETUP -line_num++; - YY_BREAK -case 3: -YY_RULE_SETUP -BEGIN(comment); - YY_BREAK -case 4: -YY_RULE_SETUP -/* eat anything not a '*' */ - YY_BREAK -case 5: -YY_RULE_SETUP -/* eat up '*'s not followed by '/'s */ - YY_BREAK -case 6: -YY_RULE_SETUP -BEGIN(INITIAL); - YY_BREAK -case 7: -YY_RULE_SETUP -/* ignore C++-style comments */ - YY_BREAK -case 8: -YY_RULE_SETUP -ppDirective (); - YY_BREAK -case 9: -YY_RULE_SETUP -/* ignore shell-like comments */ - YY_BREAK -case 10: -YY_RULE_SETUP -/* ignore whitespace */ - YY_BREAK -case 11: -YY_RULE_SETUP -/* ignore BOM */ - YY_BREAK -case 12: -YY_RULE_SETUP -return(T_node); /* see tokens in agcanonstr */ - YY_BREAK -case 13: -YY_RULE_SETUP -return(T_edge); - YY_BREAK -case 14: -YY_RULE_SETUP -if (!graphType) graphType = T_graph; return(T_graph); - YY_BREAK -case 15: -YY_RULE_SETUP -if (!graphType) graphType = T_digraph; return(T_digraph); - YY_BREAK -case 16: -YY_RULE_SETUP -return(T_strict); - YY_BREAK -case 17: -YY_RULE_SETUP -return(T_subgraph); - YY_BREAK -case 18: -YY_RULE_SETUP -if (graphType == T_digraph) return(T_edgeop); else return('-'); - YY_BREAK -case 19: -YY_RULE_SETUP -if (graphType == T_graph) return(T_edgeop); else return('-'); - YY_BREAK -case 20: -YY_RULE_SETUP -{ aaglval.str = (char*)agstrdup(Ag_G_global,aagtext); return(T_atom); } - YY_BREAK -case 21: -YY_RULE_SETUP -{ if (chkNum()) aagless(aagleng-1); aaglval.str = (char*)agstrdup(Ag_G_global,aagtext); return(T_atom); } - YY_BREAK -case 22: -YY_RULE_SETUP -BEGIN(qstring); beginstr(); - YY_BREAK -case 23: -YY_RULE_SETUP -BEGIN(INITIAL); endstr(); return (T_qatom); - YY_BREAK -case 24: -YY_RULE_SETUP -addstr ("\""); - YY_BREAK -case 25: -YY_RULE_SETUP -addstr ("\\\\"); - YY_BREAK -case 26: -/* rule 26 can match eol */ -YY_RULE_SETUP -line_num++; /* ignore escaped newlines */ - YY_BREAK -case 27: -/* rule 27 can match eol */ -YY_RULE_SETUP -addstr(aagtext); - YY_BREAK -case 28: -YY_RULE_SETUP -BEGIN(hstring); html_nest = 1; beginstr(); - YY_BREAK -case 29: -YY_RULE_SETUP -html_nest--; if (html_nest) addstr(aagtext); else {BEGIN(INITIAL); endstr_html(); return (T_qatom);} - YY_BREAK -case 30: -YY_RULE_SETUP -html_nest++; addstr(aagtext); - YY_BREAK -case 31: -/* rule 31 can match eol */ -YY_RULE_SETUP -addstr(aagtext); line_num++; /* add newlines */ - YY_BREAK -case 32: -YY_RULE_SETUP -addstr(aagtext); - YY_BREAK -case 33: -YY_RULE_SETUP -return (aagtext[0]); - YY_BREAK -case 34: -YY_RULE_SETUP -ECHO; - YY_BREAK -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(comment): -case YY_STATE_EOF(qstring): -case YY_STATE_EOF(hstring): - aagterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int aag_amount_of_matched_text = (int) (aag_cp - (aagtext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *aag_cp = (aag_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->aag_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed aagin at a new source and called - * aaglex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (aag_n_chars) = YY_CURRENT_BUFFER_LVALUE->aag_n_chars; - YY_CURRENT_BUFFER_LVALUE->aag_input_file = aagin; - YY_CURRENT_BUFFER_LVALUE->aag_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for aag_c_buf_p "<=" to the position - * of the first EOB in the buffer, since aag_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (aag_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars)] ) - { /* This was really a NUL. */ - aag_state_type aag_next_state; - - (aag_c_buf_p) = (aagtext_ptr) + aag_amount_of_matched_text; - - aag_current_state = aag_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * aag_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - aag_next_state = aag_try_NUL_trans( aag_current_state ); - - aag_bp = (aagtext_ptr) + YY_MORE_ADJ; - - if ( aag_next_state ) - { - /* Consume the NUL. */ - aag_cp = ++(aag_c_buf_p); - aag_current_state = aag_next_state; - goto aag_match; - } - - else - { - aag_cp = (aag_c_buf_p); - goto aag_find_action; - } - } - - else switch ( aag_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (aag_did_buffer_switch_on_eof) = 0; - - if ( aagwrap( ) ) - { - /* Note: because we've taken care in - * aag_get_next_buffer() to have set up - * aagtext, we can now set up - * aag_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (aag_c_buf_p) = (aagtext_ptr) + YY_MORE_ADJ; - - aag_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (aag_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (aag_c_buf_p) = - (aagtext_ptr) + aag_amount_of_matched_text; - - aag_current_state = aag_get_previous_state( ); - - aag_cp = (aag_c_buf_p); - aag_bp = (aagtext_ptr) + YY_MORE_ADJ; - goto aag_match; - - case EOB_ACT_LAST_MATCH: - (aag_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars)]; - - aag_current_state = aag_get_previous_state( ); - - aag_cp = (aag_c_buf_p); - aag_bp = (aagtext_ptr) + YY_MORE_ADJ; - goto aag_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of aaglex */ - -/* aag_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int aag_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->aag_ch_buf; - register char *source = (aagtext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (aag_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->aag_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (aag_c_buf_p) - (aagtext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((aag_c_buf_p) - (aagtext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->aag_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->aag_n_chars = (aag_n_chars) = 0; - - else - { - aag_size_t num_to_read = - YY_CURRENT_BUFFER_LVALUE->aag_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - - int aag_c_buf_p_offset = - (int) ((aag_c_buf_p) - b->aag_ch_buf); - - if ( b->aag_is_our_buffer ) - { - aag_size_t new_size = b->aag_buf_size * 2; - - if ( new_size <= 0 ) - b->aag_buf_size += b->aag_buf_size / 8; - else - b->aag_buf_size *= 2; - - b->aag_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - aagrealloc((void *) b->aag_ch_buf,b->aag_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->aag_ch_buf = 0; - - if ( ! b->aag_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (aag_c_buf_p) = &b->aag_ch_buf[aag_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->aag_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[number_to_move]), - (aag_n_chars), num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->aag_n_chars = (aag_n_chars); - } - - if ( (aag_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - aagrestart(aagin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->aag_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((aag_size_t) ((aag_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->aag_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - aag_size_t new_size = (aag_n_chars) + number_to_move + ((aag_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->aag_ch_buf = (char *) aagrealloc((void *) YY_CURRENT_BUFFER_LVALUE->aag_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->aag_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in aag_get_next_buffer()" ); - } - - (aag_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (aagtext_ptr) = &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[0]; - - return ret_val; -} - -/* aag_get_previous_state - get the state just before the EOB char was reached */ - - static aag_state_type aag_get_previous_state (void) -{ - register aag_state_type aag_current_state; - register char *aag_cp; - - aag_current_state = (aag_start); - aag_current_state += YY_AT_BOL(); - - for ( aag_cp = (aagtext_ptr) + YY_MORE_ADJ; aag_cp < (aag_c_buf_p); ++aag_cp ) - { - register YY_CHAR aag_c = (*aag_cp ? aag_ec[YY_SC_TO_UI(*aag_cp)] : 1); - if ( aag_accept[aag_current_state] ) - { - (aag_last_accepting_state) = aag_current_state; - (aag_last_accepting_cpos) = aag_cp; - } - while ( aag_chk[aag_base[aag_current_state] + aag_c] != aag_current_state ) - { - aag_current_state = (int) aag_def[aag_current_state]; - if ( aag_current_state >= 93 ) - aag_c = aag_meta[(unsigned int) aag_c]; - } - aag_current_state = aag_nxt[aag_base[aag_current_state] + (unsigned int) aag_c]; - } - - return aag_current_state; -} - -/* aag_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = aag_try_NUL_trans( current_state ); - */ - static aag_state_type aag_try_NUL_trans (aag_state_type aag_current_state ) -{ - register int aag_is_jam; - register char *aag_cp = (aag_c_buf_p); - - register YY_CHAR aag_c = 1; - if ( aag_accept[aag_current_state] ) - { - (aag_last_accepting_state) = aag_current_state; - (aag_last_accepting_cpos) = aag_cp; - } - while ( aag_chk[aag_base[aag_current_state] + aag_c] != aag_current_state ) - { - aag_current_state = (int) aag_def[aag_current_state]; - if ( aag_current_state >= 93 ) - aag_c = aag_meta[(unsigned int) aag_c]; - } - aag_current_state = aag_nxt[aag_base[aag_current_state] + (unsigned int) aag_c]; - aag_is_jam = (aag_current_state == 92); - - return aag_is_jam ? 0 : aag_current_state; -} - - static void aagunput (int c, register char * aag_bp ) -{ - register char *aag_cp; - - aag_cp = (aag_c_buf_p); - - /* undo effects of setting up aagtext */ - *aag_cp = (aag_hold_char); - - if ( aag_cp < YY_CURRENT_BUFFER_LVALUE->aag_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register aag_size_t number_to_move = (aag_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->aag_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->aag_ch_buf ) - *--dest = *--source; - - aag_cp += (int) (dest - source); - aag_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->aag_n_chars = - (aag_n_chars) = YY_CURRENT_BUFFER_LVALUE->aag_buf_size; - - if ( aag_cp < YY_CURRENT_BUFFER_LVALUE->aag_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--aag_cp = (char) c; - - (aagtext_ptr) = aag_bp; - (aag_hold_char) = *aag_cp; - (aag_c_buf_p) = aag_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int aaginput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(aag_c_buf_p) = (aag_hold_char); - - if ( *(aag_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* aag_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (aag_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->aag_ch_buf[(aag_n_chars)] ) - /* This was really a NUL. */ - *(aag_c_buf_p) = '\0'; - - else - { /* need more input */ - aag_size_t offset = (aag_c_buf_p) - (aagtext_ptr); - ++(aag_c_buf_p); - - switch ( aag_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because aag_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - aagrestart(aagin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( aagwrap( ) ) - return EOF; - - if ( ! (aag_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return aaginput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (aag_c_buf_p) = (aagtext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (aag_c_buf_p); /* cast for 8-bit char's */ - *(aag_c_buf_p) = '\0'; /* preserve aagtext */ - (aag_hold_char) = *++(aag_c_buf_p); - - YY_CURRENT_BUFFER_LVALUE->aag_at_bol = (c == '\n'); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void aagrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - aagensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - aag_create_buffer(aagin,YY_BUF_SIZE ); - } - - aag_init_buffer(YY_CURRENT_BUFFER,input_file ); - aag_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void aag_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * aagpop_buffer_state(); - * aagpush_buffer_state(new_buffer); - */ - aagensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(aag_c_buf_p) = (aag_hold_char); - YY_CURRENT_BUFFER_LVALUE->aag_buf_pos = (aag_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->aag_n_chars = (aag_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - aag_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (aagwrap()) processing, but the only time this flag - * is looked at is after aagwrap() is called, so it's safe - * to go ahead and always set it. - */ - (aag_did_buffer_switch_on_eof) = 1; -} - -static void aag_load_buffer_state (void) -{ - (aag_n_chars) = YY_CURRENT_BUFFER_LVALUE->aag_n_chars; - (aagtext_ptr) = (aag_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->aag_buf_pos; - aagin = YY_CURRENT_BUFFER_LVALUE->aag_input_file; - (aag_hold_char) = *(aag_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE aag_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) aagalloc(sizeof( struct aag_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in aag_create_buffer()" ); - - b->aag_buf_size = size; - - /* aag_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->aag_ch_buf = (char *) aagalloc(b->aag_buf_size + 2 ); - if ( ! b->aag_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in aag_create_buffer()" ); - - b->aag_is_our_buffer = 1; - - aag_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with aag_create_buffer() - * - */ - void aag_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->aag_is_our_buffer ) - aagfree((void *) b->aag_ch_buf ); - - aagfree((void *) b ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a aagrestart() or at EOF. - */ - static void aag_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - aag_flush_buffer(b ); - - b->aag_input_file = file; - b->aag_fill_buffer = 1; - - /* If b is the current buffer, then aag_init_buffer was _probably_ - * called from aagrestart() or through aag_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->aag_bs_lineno = 1; - b->aag_bs_column = 0; - } - - b->aag_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void aag_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->aag_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->aag_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->aag_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->aag_buf_pos = &b->aag_ch_buf[0]; - - b->aag_at_bol = 1; - b->aag_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - aag_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void aagpush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - aagensure_buffer_stack(); - - /* This block is copied from aag_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(aag_c_buf_p) = (aag_hold_char); - YY_CURRENT_BUFFER_LVALUE->aag_buf_pos = (aag_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->aag_n_chars = (aag_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (aag_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from aag_switch_to_buffer. */ - aag_load_buffer_state( ); - (aag_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void aagpop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - aag_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((aag_buffer_stack_top) > 0) - --(aag_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - aag_load_buffer_state( ); - (aag_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void aagensure_buffer_stack (void) -{ - aag_size_t num_to_alloc; - - if (!(aag_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (aag_buffer_stack) = (struct aag_buffer_state**)aagalloc - (num_to_alloc * sizeof(struct aag_buffer_state*) - ); - if ( ! (aag_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in aagensure_buffer_stack()" ); - - memset((aag_buffer_stack), 0, num_to_alloc * sizeof(struct aag_buffer_state*)); - - (aag_buffer_stack_max) = num_to_alloc; - (aag_buffer_stack_top) = 0; - return; - } - - if ((aag_buffer_stack_top) >= ((aag_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (aag_buffer_stack_max) + grow_size; - (aag_buffer_stack) = (struct aag_buffer_state**)aagrealloc - ((aag_buffer_stack), - num_to_alloc * sizeof(struct aag_buffer_state*) - ); - if ( ! (aag_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in aagensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((aag_buffer_stack) + (aag_buffer_stack_max), 0, grow_size * sizeof(struct aag_buffer_state*)); - (aag_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE aag_scan_buffer (char * base, aag_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) aagalloc(sizeof( struct aag_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in aag_scan_buffer()" ); - - b->aag_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->aag_buf_pos = b->aag_ch_buf = base; - b->aag_is_our_buffer = 0; - b->aag_input_file = 0; - b->aag_n_chars = b->aag_buf_size; - b->aag_is_interactive = 0; - b->aag_at_bol = 1; - b->aag_fill_buffer = 0; - b->aag_buffer_status = YY_BUFFER_NEW; - - aag_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to aaglex() will - * scan from a @e copy of @a str. - * @param aagstr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * aag_scan_bytes() instead. - */ -YY_BUFFER_STATE aag_scan_string (aagconst char * aagstr ) -{ - - return aag_scan_bytes(aagstr,strlen(aagstr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to aaglex() will - * scan from a @e copy of @a bytes. - * @param aagbytes the byte buffer to scan - * @param _aagbytes_len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE aag_scan_bytes (aagconst char * aagbytes, aag_size_t _aagbytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - aag_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _aagbytes_len + 2; - buf = (char *) aagalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in aag_scan_bytes()" ); - - for ( i = 0; i < _aagbytes_len; ++i ) - buf[i] = aagbytes[i]; - - buf[_aagbytes_len] = buf[_aagbytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = aag_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in aag_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->aag_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void aag_fatal_error (aagconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine aagless() so it works in section 3 code. */ - -#undef aagless -#define aagless(n) \ - do \ - { \ - /* Undo effects of setting up aagtext. */ \ - int aagless_macro_arg = (n); \ - YY_LESS_LINENO(aagless_macro_arg);\ - aagtext[aagleng] = (aag_hold_char); \ - (aag_c_buf_p) = aagtext + aagless_macro_arg; \ - (aag_hold_char) = *(aag_c_buf_p); \ - *(aag_c_buf_p) = '\0'; \ - aagleng = aagless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int aagget_lineno (void) -{ - - return aaglineno; -} - -/** Get the input stream. - * - */ -FILE *aagget_in (void) -{ - return aagin; -} - -/** Get the output stream. - * - */ -FILE *aagget_out (void) -{ - return aagout; -} - -/** Get the length of the current token. - * - */ -aag_size_t aagget_leng (void) -{ - return aagleng; -} - -/** Get the current token. - * - */ - -char *aagget_text (void) -{ - return aagtext; -} - -/** Set the current line number. - * @param line_number - * - */ -void aagset_lineno (int line_number ) -{ - - aaglineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see aag_switch_to_buffer - */ -void aagset_in (FILE * in_str ) -{ - aagin = in_str ; -} - -void aagset_out (FILE * out_str ) -{ - aagout = out_str ; -} - -int aagget_debug (void) -{ - return aag_flex_debug; -} - -void aagset_debug (int bdebug ) -{ - aag_flex_debug = bdebug ; -} - -static int aag_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from aaglex_destroy(), so don't allocate here. - */ - - (aag_buffer_stack) = 0; - (aag_buffer_stack_top) = 0; - (aag_buffer_stack_max) = 0; - (aag_c_buf_p) = (char *) 0; - (aag_init) = 0; - (aag_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - aagin = stdin; - aagout = stdout; -#else - aagin = (FILE *) 0; - aagout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * aaglex_init() - */ - return 0; -} - -/* aaglex_destroy is for both reentrant and non-reentrant scanners. */ -int aaglex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - aag_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - aagpop_buffer_state(); - } - - /* Destroy the stack itself. */ - aagfree((aag_buffer_stack) ); - (aag_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * aaglex() is called, initialization will occur. */ - aag_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef aagtext_ptr -static void aag_flex_strncpy (char* s1, aagconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int aag_flex_strlen (aagconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *aagalloc (aag_size_t size ) -{ - return (void *) malloc( size ); -} - -void *aagrealloc (void * ptr, aag_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void aagfree (void * ptr ) -{ - free( (char *) ptr ); /* see aagrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "aagtables" - - - -void aagerror(char *str) -{ - unsigned char xbuf[BUFSIZ]; - char buf[BUFSIZ]; - agxbuf xb; - - agxbinit(&xb, BUFSIZ, xbuf); - if (InputFile) { - agxbput (&xb, InputFile); - agxbput (&xb, ": "); - } - agxbput (&xb, str); - sprintf(buf," in line %d", line_num); - agxbput (&xb, buf); - if (*aagtext) { - agxbput(&xb," near '"); - agxbput (&xb, aagtext); - agxbputc (&xb, '\''); - } - else switch (YYSTATE) { - case qstring : - sprintf(buf, " scanning a quoted string (missing endquote? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - if (*Sbuf) { - int len = strlen(Sbuf); - agxbput (&xb, "\nString starting:\""); - if (len > 80) - Sbuf[80] = '\0'; - agxbput (&xb, Sbuf); - } - break; - case hstring : - sprintf(buf, " scanning a HTML string (missing '>'? bad nesting? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - if (*Sbuf) { - int len = strlen(Sbuf); - agxbput (&xb, "\nString starting:<"); - if (len > 80) - Sbuf[80] = '\0'; - agxbput (&xb, Sbuf); - } - break; - case comment : - sprintf(buf, " scanning a /*...*/ comment (missing '*/? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - break; - } - agxbputc (&xb, '\n'); - agerr(AGERR, "%s", agxbuse(&xb)); - agxbfree(&xb); -} -/* must be here to see flex's macro defns */ -void aglexeof() { unput(GRAPH_EOF_TOKEN); } - -void aglexbad() { YY_FLUSH_BUFFER; } - -#ifndef YY_CALL_ONLY_ARG -# define YY_CALL_ONLY_ARG void -#endif - -int aagwrap(YY_CALL_ONLY_ARG) -{ - return 1; -} - - diff --git a/internal/ccall/cgraph/scan.l b/internal/ccall/cgraph/scan.l deleted file mode 100644 index 90eb395..0000000 --- a/internal/ccall/cgraph/scan.l +++ /dev/null @@ -1,294 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* requires flex (i.e. not lex) */ -%{ -#include -#include -#include -#include -// #define YY_BUF_SIZE 128000 -#define GRAPH_EOF_TOKEN '@' /* lex class must be defined below */ - /* this is a workaround for linux flex */ -static int line_num = 1; -static int html_nest = 0; /* nesting level for html strings */ -static char* InputFile; -static Agdisc_t *Disc; -static void *Ifile; -static int graphType; - - /* Reset line number */ -void agreadline(int n) { line_num = n; } - - /* (Re)set file: - */ -void agsetfile(char* f) { InputFile = f; line_num = 1; } - -/* There is a hole here, because switching channels - * requires pushing back whatever was previously read. - * There probably is a right way of doing this. - */ -void aglexinit(Agdisc_t *disc, void *ifile) { Disc = disc; Ifile = ifile; graphType = 0;} - -#define isatty(x) 0 -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ((result = Disc->io->afread(Ifile, buf, max_size)) < 0) \ - YY_FATAL_ERROR( "input in flex scanner failed" ) -#endif - -/* buffer for arbitrary length strings (longer than BUFSIZ) */ -static char *Sbuf,*Sptr,*Send; -static void beginstr(void) { - if (Sbuf == NIL(char*)) { - Sbuf = malloc(BUFSIZ); - Send = Sbuf + BUFSIZ; - } - Sptr = Sbuf; - *Sptr = 0; -} - -static void addstr(char *src) { - char c; - if (Sptr > Sbuf) Sptr--; - do { - do {c = *Sptr++ = *src++;} while (c && (Sptr < Send)); - if (c) { - long sz = Send - Sbuf; - long off = Sptr - Sbuf; - sz *= 2; - Sbuf = (char*)realloc(Sbuf,sz); - Send = Sbuf + sz; - Sptr = Sbuf + off; - } - } while (c); -} - -static void endstr(void) { - yylval.str = (char*)agstrdup(Ag_G_global,Sbuf); - *Sbuf = 0; -} - -static void endstr_html(void) { - yylval.str = (char*)agstrdup_html(Ag_G_global,Sbuf); - *Sbuf = 0; -} - -static void -storeFileName (char* fname, int len) -{ - static int cnt; - static char* buf; - - if (len > cnt) { - if (cnt) buf = (char*)realloc (buf, len+1); - else buf = (char*)malloc (len+1); - cnt = len; - } - strcpy (buf, fname); - InputFile = buf; -} - -/* ppDirective: - * Process a possible preprocessor line directive. - * yytext = #.* - */ -static void ppDirective (void) -{ - int r, cnt, lineno; - char buf[2]; - char* s = yytext + 1; /* skip initial # */ - - if (strncmp(s, "line", 4) == 0) s += 4; - r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt); - if (r > 0) { /* got line number */ - line_num = lineno - 1; - if (r > 1) { /* saw quote */ - char* p = s + cnt; - char* e = p; - while (*e && (*e != '"')) e++; - if (e != p && *e == '"') { - *e = '\0'; - storeFileName (p, e-p); - } - } - } -} - -/* twoDots: - * Return true if token has more than one '.'; - * we know the last character is a '.'. - */ -static int twoDots(void) -{ - int i; - for (i = yyleng-2; i >= 0; i--) { - if (((unsigned char)yytext[i]) == '.') - return 1; - } - return 0; -} - -/* chkNum: - * The regexp for NUMBER allows a terminating letter or '.'. - * This way we can catch a number immediately followed by a name - * or something like 123.456.78, and report this to the user. - */ -static int chkNum(void) { - unsigned char c = (unsigned char)yytext[yyleng-1]; /* last character */ - if ((!isdigit(c) && (c != '.')) || ((c == '.') && twoDots())) { /* c is letter */ - unsigned char xbuf[BUFSIZ]; - char buf[BUFSIZ]; - agxbuf xb; - char* fname; - - if (InputFile) - fname = InputFile; - else - fname = "input"; - - agxbinit(&xb, BUFSIZ, xbuf); - - agxbput(&xb,"syntax ambiguity - badly delimited number '"); - agxbput(&xb,yytext); - sprintf(buf,"' in line %d of ", line_num); - agxbput(&xb,buf); - agxbput(&xb,fname); - agxbput(&xb, " splits into two tokens\n"); - agerr(AGWARN, "%s", agxbuse(&xb)); - - agxbfree(&xb); - return 1; - } - else return 0; -} - -/* The LETTER class below consists of ascii letters, underscore, all non-ascii - * characters. This allows identifiers to have characters from any - * character set independent of locale. The downside is that, for certain - * character sets, non-letter and, in fact, undefined characters will be - * accepted. This is not likely and, from dot's stand, shouldn't do any - * harm. (Presumably undefined characters will be ignored in display.) And, - * it allows a greater wealth of names. */ -%} -GRAPH_EOF_TOKEN [@] -LETTER [A-Za-z_\200-\377] -DIGIT [0-9] -NAME {LETTER}({LETTER}|{DIGIT})* -NUMBER [-]?(({DIGIT}+(\.{DIGIT}*)?)|(\.{DIGIT}+))(\.|{LETTER})? -ID ({NAME}|{NUMBER}) -%x comment -%x qstring -%x hstring -%% -{GRAPH_EOF_TOKEN} return(EOF); -\n line_num++; -"/*" BEGIN(comment); -[^*\n]* /* eat anything not a '*' */ -"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ -"*"+"/" BEGIN(INITIAL); -"//".* /* ignore C++-style comments */ -^"#".* ppDirective (); -"#".* /* ignore shell-like comments */ -[ \t\r] /* ignore whitespace */ -"\xEF\xBB\xBF" /* ignore BOM */ -"node" return(T_node); /* see tokens in agcanonstr */ -"edge" return(T_edge); -"graph" if (!graphType) graphType = T_graph; return(T_graph); -"digraph" if (!graphType) graphType = T_digraph; return(T_digraph); -"strict" return(T_strict); -"subgraph" return(T_subgraph); -"->" if (graphType == T_digraph) return(T_edgeop); else return('-'); -"--" if (graphType == T_graph) return(T_edgeop); else return('-'); -{NAME} { yylval.str = (char*)agstrdup(Ag_G_global,yytext); return(T_atom); } -{NUMBER} { if (chkNum()) yyless(yyleng-1); yylval.str = (char*)agstrdup(Ag_G_global,yytext); return(T_atom); } -["] BEGIN(qstring); beginstr(); -["] BEGIN(INITIAL); endstr(); return (T_qatom); -[\\]["] addstr ("\""); -[\\][\\] addstr ("\\\\"); -[\\][\n] line_num++; /* ignore escaped newlines */ -([^"\\]*|[\\]) addstr(yytext); -[<] BEGIN(hstring); html_nest = 1; beginstr(); -[>] html_nest--; if (html_nest) addstr(yytext); else {BEGIN(INITIAL); endstr_html(); return (T_qatom);} -[<] html_nest++; addstr(yytext); -[\n] addstr(yytext); line_num++; /* add newlines */ -([^><\n]*) addstr(yytext); -. return (yytext[0]); -%% - -void yyerror(char *str) -{ - unsigned char xbuf[BUFSIZ]; - char buf[BUFSIZ]; - agxbuf xb; - - agxbinit(&xb, BUFSIZ, xbuf); - if (InputFile) { - agxbput (&xb, InputFile); - agxbput (&xb, ": "); - } - agxbput (&xb, str); - sprintf(buf," in line %d", line_num); - agxbput (&xb, buf); - if (*yytext) { - agxbput(&xb," near '"); - agxbput (&xb, yytext); - agxbputc (&xb, '\''); - } - else switch (YYSTATE) { - case qstring : - sprintf(buf, " scanning a quoted string (missing endquote? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - if (*Sbuf) { - int len = strlen(Sbuf); - agxbput (&xb, "\nString starting:\""); - if (len > 80) - Sbuf[80] = '\0'; - agxbput (&xb, Sbuf); - } - break; - case hstring : - sprintf(buf, " scanning a HTML string (missing '>'? bad nesting? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - if (*Sbuf) { - int len = strlen(Sbuf); - agxbput (&xb, "\nString starting:<"); - if (len > 80) - Sbuf[80] = '\0'; - agxbput (&xb, Sbuf); - } - break; - case comment : - sprintf(buf, " scanning a /*...*/ comment (missing '*/? longer than %d?)", YY_BUF_SIZE); - agxbput (&xb, buf); - break; - } - agxbputc (&xb, '\n'); - agerr(AGERR, "%s", agxbuse(&xb)); - agxbfree(&xb); -} -/* must be here to see flex's macro defns */ -void aglexeof() { unput(GRAPH_EOF_TOKEN); } - -void aglexbad() { YY_FLUSH_BUFFER; } - -#ifndef YY_CALL_ONLY_ARG -# define YY_CALL_ONLY_ARG void -#endif - -int yywrap(YY_CALL_ONLY_ARG) -{ - return 1; -} - diff --git a/internal/ccall/cgraph/subg.c b/internal/ccall/cgraph/subg.c deleted file mode 100644 index 4d0d3da..0000000 --- a/internal/ccall/cgraph/subg.c +++ /dev/null @@ -1,96 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -static Agraph_t *agfindsubg_by_id(Agraph_t * g, IDTYPE id) -{ - Agraph_t template; - - agdtdisc(g, g->g_dict, &Ag_subgraph_id_disc); - AGID(&template) = id; - return (Agraph_t *) dtsearch(g->g_dict, &template); -} - -static Agraph_t *localsubg(Agraph_t * g, IDTYPE id) -{ - Agraph_t *subg; - - subg = agfindsubg_by_id(g, id); - if (subg) - return subg; - - subg = agalloc(g, sizeof(Agraph_t)); - subg->clos = g->clos; - subg->desc = g->desc; - subg->desc.maingraph = FALSE; - subg->parent = g; - subg->root = g->root; - AGID(subg) = id; - return agopen1(subg); -} - -Agraph_t *agidsubg(Agraph_t * g, IDTYPE id, int cflag) -{ - Agraph_t *subg; - subg = agfindsubg_by_id(g, id); - if ((subg == NILgraph) && cflag && agallocid(g, AGRAPH, id)) - subg = localsubg(g, id); - return subg; -} - -Agraph_t *agsubg(Agraph_t * g, char *name, int cflag) -{ - IDTYPE id; - Agraph_t *subg; - - if (name && agmapnametoid(g, AGRAPH, name, &id, FALSE)) { - /* might already exist */ - if ((subg = agfindsubg_by_id(g, id))) - return subg; - } - - if (cflag && agmapnametoid(g, AGRAPH, name, &id, TRUE)) { /* reserve id */ - subg = localsubg(g, id); - agregister(g, AGRAPH, subg); - return subg; - } - - return NILgraph; -} - -Agraph_t *agfstsubg(Agraph_t * g) -{ - return (Agraph_t *) dtfirst(g->g_dict); -} - -Agraph_t *agnxtsubg(Agraph_t * subg) -{ - Agraph_t *g; - - g = agparent(subg); - return g? (Agraph_t *) dtnext(g->g_dict, subg) : 0; -} - -Agraph_t *agparent(Agraph_t * g) -{ - return g->parent; -} - -/* this function is only responsible for deleting the entry - * in the parent's subg dict. the rest is done in agclose(). - */ -long agdelsubg(Agraph_t * g, Agraph_t * subg) -{ - return (long) dtdelete(g->g_dict, subg); -} diff --git a/internal/ccall/cgraph/tester.c b/internal/ccall/cgraph/tester.c deleted file mode 100644 index da6d007..0000000 --- a/internal/ccall/cgraph/tester.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include "cgraph.h" - -#define NILgraph NIL(Agraph_t*) -#define NILnode NIL(Agnode_t*) -#define NILedge NIL(Agedge_t*) -#define NILsym NIL(Agsym_t*) -#define NILstr NIL(char*) - -main() -{ - Agraph_t *g; - Agnode_t *n; - Agedge_t *e; - Agsym_t *sym; - char *val; - - while (g = agread(stdin, NIL(Agdisc_t *))) { -#ifdef NOTDEF - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - fprintf(stderr, "%s\n", agnameof(n)); - for (sym = agnxtattr(g, AGNODE, 0); sym; - sym = agnxtattr(g, AGNODE, sym)) { - val = agxget(n, sym); - fprintf(stderr, "\t%s=%s\n", sym->name, val); - } - } -#endif - sym = agattr(g, AGRAPH, "nonsense", "junk"); - fprintf(stderr,"sym = %x, %s\n", sym, sym? sym->defval : "(none)"); - agwrite(g, stdout); - } -} diff --git a/internal/ccall/cgraph/utils.c b/internal/ccall/cgraph/utils.c deleted file mode 100644 index 24d76e2..0000000 --- a/internal/ccall/cgraph/utils.c +++ /dev/null @@ -1,101 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -static Agraph_t *Ag_dictop_G; - -/* only indirect call through dtopen() is expected */ -void *agdictobjmem(Dict_t * dict, void * p, size_t size, Dtdisc_t * disc) -{ - Agraph_t *g; - - NOTUSED(dict); - NOTUSED(disc); - g = Ag_dictop_G; - if (g) { - if (p) - agfree(g, p); - else - return agalloc(g, size); - } else { - if (p) - free(p); - else - return malloc(size); - } - return NIL(void *); -} - -void agdictobjfree(Dict_t * dict, void * p, Dtdisc_t * disc) -{ - Agraph_t *g; - - NOTUSED(dict); - NOTUSED(disc); - g = Ag_dictop_G; - if (g) - agfree(g, p); - else - free(p); -} - -Dict_t *agdtopen(Agraph_t * g, Dtdisc_t * disc, Dtmethod_t * method) -{ - Dtmemory_f memf; - Dict_t *d; - - memf = disc->memoryf; - disc->memoryf = agdictobjmem; - Ag_dictop_G = g; - d = dtopen(disc, method); - disc->memoryf = memf; - Ag_dictop_G = NIL(Agraph_t*); - return d; -} - -long agdtdelete(Agraph_t * g, Dict_t * dict, void *obj) -{ - Ag_dictop_G = g; - return (long) dtdelete(dict, obj); -} - -int agobjfinalize(void * obj) -{ - agfree(Ag_dictop_G, obj); - return 0; -} - -int agdtclose(Agraph_t * g, Dict_t * dict) -{ - Dtmemory_f memf; - Dtdisc_t *disc; - - disc = dtdisc(dict, NIL(Dtdisc_t *), 0); - memf = disc->memoryf; - disc->memoryf = agdictobjmem; - Ag_dictop_G = g; - if (dtclose(dict)) - return 1; - disc->memoryf = memf; - Ag_dictop_G = NIL(Agraph_t*); - return 0; -} - -void agdtdisc(Agraph_t * g, Dict_t * dict, Dtdisc_t * disc) -{ - if (disc && (dtdisc(dict, NIL(Dtdisc_t *), 0) != disc)) { - dtdisc(dict, disc, 0); - } - /* else unchanged, disc is same as old disc */ -} diff --git a/internal/ccall/cgraph/write.c b/internal/ccall/cgraph/write.c deleted file mode 100644 index 8ffa493..0000000 --- a/internal/ccall/cgraph/write.c +++ /dev/null @@ -1,692 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include /* need sprintf() */ -#include -#include "cghdr.h" - -#define EMPTY(s) ((s == 0) || (s)[0] == '\0') -#define MAX(a,b) ((a)>(b)?(a):(b)) -#define CHKRV(v) {if ((v) == EOF) return EOF;} - -typedef void iochan_t; - -static int ioput(Agraph_t * g, iochan_t * ofile, char *str) -{ - return AGDISC(g, io)->putstr(ofile, str); - -} - -#define MAX_OUTPUTLINE 128 -#define MIN_OUTPUTLINE 60 -static int write_body(Agraph_t * g, iochan_t * ofile); -static int Level; -static int Max_outputline = MAX_OUTPUTLINE; -static unsigned char Attrs_not_written_flag; -static Agsym_t *Tailport, *Headport; - -static int indent(Agraph_t * g, iochan_t * ofile) -{ - int i; - for (i = Level; i > 0; i--) - CHKRV(ioput(g, ofile, "\t")); - return 0; -} - -#ifndef HAVE_STRCASECMP - -#include - -static int strcasecmp(const char *s1, const char *s2) -{ - while ((*s1 != '\0') - && (tolower(*(unsigned char *) s1) == - tolower(*(unsigned char *) s2))) { - s1++; - s2++; - } - - return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); -} -#endif - - /* alphanumeric, '.', '-', or non-ascii; basically, chars used in unquoted ids */ -#define is_id_char(c) (isalnum(c) || ((c) == '.') || ((c) == '-') || !isascii(c)) - -/* _agstrcanon: - * Canonicalize ordinary strings. - * Assumes buf is large enough to hold output. - */ -static char *_agstrcanon(char *arg, char *buf) -{ - char *s, *p; - unsigned char uc; - int cnt = 0, dotcnt = 0; - int needs_quotes = FALSE; - int maybe_num; - int backslash_pending = FALSE; - static const char *tokenlist[] /* must agree with scan.l */ - = { "node", "edge", "strict", "graph", "digraph", "subgraph", - NIL(char *) - }; - const char **tok; - - if (EMPTY(arg)) - return "\"\""; - s = arg; - p = buf; - *p++ = '\"'; - uc = *(unsigned char *) s++; - maybe_num = isdigit(uc) || (uc == '.') || (uc == '-'); - while (uc) { - if (uc == '\"') { - *p++ = '\\'; - needs_quotes = TRUE; - } - else if (maybe_num) { - if (uc == '-') { - if (cnt) { - maybe_num = FALSE; - needs_quotes = TRUE; - } - } - else if (uc == '.') { - if (dotcnt++) { - maybe_num = FALSE; - needs_quotes = TRUE; - } - } - else if (!isdigit(uc)) { - maybe_num = FALSE; - needs_quotes = TRUE; - } - } - else if (!ISALNUM(uc)) - needs_quotes = TRUE; - *p++ = (char) uc; - uc = *(unsigned char *) s++; - cnt++; - - /* If breaking long strings into multiple lines, only allow breaks after a non-id char, not a backslash, where the next char is an - * id char. - */ - if (Max_outputline) { - if (uc && backslash_pending && !(is_id_char(p[-1]) || (p[-1] == '\\')) && is_id_char(uc)) { - *p++ = '\\'; - *p++ = '\n'; - needs_quotes = TRUE; - backslash_pending = FALSE; - cnt = 0; - } else if (uc && (cnt >= Max_outputline)) { - if (!(is_id_char(p[-1]) || (p[-1] == '\\')) && is_id_char(uc)) { - *p++ = '\\'; - *p++ = '\n'; - needs_quotes = TRUE; - cnt = 0; - } else { - backslash_pending = TRUE; - } - } - } - } - *p++ = '\"'; - *p = '\0'; - if (needs_quotes || ((cnt == 1) && ((*arg == '.') || (*arg == '-')))) - return buf; - - /* Use quotes to protect tokens (example, a node named "node") */ - /* It would be great if it were easier to use flex here. */ - for (tok = tokenlist; *tok; tok++) - if (!strcasecmp(*tok, arg)) - return buf; - return arg; -} - -/* agcanonhtmlstr: - * Canonicalize html strings. - */ -static char *agcanonhtmlstr(char *arg, char *buf) -{ - char *s, *p; - - s = arg; - p = buf; - *p++ = '<'; - while (*s) - *p++ = *s++; - *p++ = '>'; - *p = '\0'; - return buf; -} - -/* - * canonicalize a string for printing. - * must agree with strings in scan.l - * Unsafe if buffer is not large enough. - */ -char *agstrcanon(char *arg, char *buf) -{ - if (aghtmlstr(arg)) - return agcanonhtmlstr(arg, buf); - else - return _agstrcanon(arg, buf); -} - -static char *getoutputbuffer(char *str) -{ - static char *rv; - static size_t len = 0; - size_t req; - - req = MAX(2 * strlen(str) + 2, BUFSIZ); - if (req > len) { - if (rv) - rv = realloc(rv, req); - else - rv = malloc(req); - len = req; - } - return rv; -} - -/* - * canonicalize a string for printing. - * must agree with strings in scan.l - * Shared static buffer - unsafe. - */ -char *agcanonStr(char *str) -{ - return agstrcanon(str, getoutputbuffer(str)); -} - -/* - * canonicalize a string for printing. - * If html is true, use HTML canonicalization. - * Shared static buffer - unsafe. - */ -char *agcanon(char *str, int html) -{ - char* buf = getoutputbuffer(str); - if (html) - return agcanonhtmlstr(str, buf); - else - return _agstrcanon(str, buf); -} - -static int _write_canonstr(Agraph_t * g, iochan_t * ofile, char *str, - int chk) -{ - if (chk) - str = agcanonStr(str); - else - str = _agstrcanon(str, getoutputbuffer(str)); - return ioput(g, ofile, str); -} - -static int write_canonstr(Agraph_t * g, iochan_t * ofile, char *str) -{ - return _write_canonstr(g, ofile, str, TRUE); -} - -static int write_dict(Agraph_t * g, iochan_t * ofile, char *name, - Dict_t * dict, int top) -{ - int cnt = 0; - Dict_t *view; - Agsym_t *sym, *psym; - - if (!top) - view = dtview(dict, NIL(Dict_t *)); - else - view = 0; - for (sym = (Agsym_t *) dtfirst(dict); sym; - sym = (Agsym_t *) dtnext(dict, sym)) { - if (EMPTY(sym->defval) && !sym->print) { /* try to skip empty str (default) */ - if (view == NIL(Dict_t *)) - continue; /* no parent */ - psym = (Agsym_t *) dtsearch(view, sym); - assert(psym); - if (EMPTY(psym->defval) && psym->print) - continue; /* also empty in parent */ - } - if (cnt++ == 0) { - CHKRV(indent(g, ofile)); - CHKRV(ioput(g, ofile, name)); - CHKRV(ioput(g, ofile, " [")); - Level++; - } else { - CHKRV(ioput(g, ofile, ",\n")); - CHKRV(indent(g, ofile)); - } - CHKRV(write_canonstr(g, ofile, sym->name)); - CHKRV(ioput(g, ofile, "=")); - CHKRV(write_canonstr(g, ofile, sym->defval)); - } - if (cnt > 0) { - Level--; - if (cnt > 1) { - CHKRV(ioput(g, ofile, "\n")); - CHKRV(indent(g, ofile)); - } - CHKRV(ioput(g, ofile, "];\n")); - } - if (!top) - dtview(dict, view); /* restore previous view */ - return 0; -} - -static int write_dicts(Agraph_t * g, iochan_t * ofile, int top) -{ - Agdatadict_t *def; - if ((def = agdatadict(g, FALSE))) { - CHKRV(write_dict(g, ofile, "graph", def->dict.g, top)); - CHKRV(write_dict(g, ofile, "node", def->dict.n, top)); - CHKRV(write_dict(g, ofile, "edge", def->dict.e, top)); - } - return 0; -} - -static int write_hdr(Agraph_t * g, iochan_t * ofile, int top) -{ - char *name, *sep, *kind, *strict; - int root = 0; - int hasName = 1; - - Attrs_not_written_flag = AGATTRWF(g); - strict = ""; - if (NOT(top) && agparent(g)) - kind = "sub"; - else { - root = 1; - if (g->desc.directed) - kind = "di"; - else - kind = ""; - if (agisstrict(g)) - strict = "strict "; - Tailport = agattr(g, AGEDGE, TAILPORT_ID, NIL(char *)); - Headport = agattr(g, AGEDGE, HEADPORT_ID, NIL(char *)); - } - name = agnameof(g); - sep = " "; - if (!name || name[0] == LOCALNAMEPREFIX) { - sep = name = ""; - hasName = 0; - } - CHKRV(indent(g, ofile)); - CHKRV(ioput(g, ofile, strict)); - - /* output "graph" only for root graphs or graphs with names */ - if (root || hasName) { - CHKRV(ioput(g, ofile, kind)); - CHKRV(ioput(g, ofile, "graph ")); - } - if (hasName) - CHKRV(write_canonstr(g, ofile, name)); - CHKRV(ioput(g, ofile, sep)); - CHKRV(ioput(g, ofile, "{\n")); - Level++; - CHKRV(write_dicts(g, ofile, top)); - AGATTRWF(g) = TRUE; - return 0; -} - -static int write_trl(Agraph_t * g, iochan_t * ofile) -{ - NOTUSED(g); - Level--; - CHKRV(indent(g, ofile)); - CHKRV(ioput(g, ofile, "}\n")); - return 0; -} - -static int irrelevant_subgraph(Agraph_t * g) -{ - int i, n; - Agattr_t *sdata, *pdata, *rdata; - Agdatadict_t *dd; - - char *name; - - name = agnameof(g); - if (name && name[0] != LOCALNAMEPREFIX) - return FALSE; - if ((sdata = agattrrec(g)) && (pdata = agattrrec(agparent(g)))) { - rdata = agattrrec(agroot(g)); - n = dtsize(rdata->dict); - for (i = 0; i < n; i++) - if (sdata->str[i] && pdata->str[i] - && strcmp(sdata->str[i], pdata->str[i])) - return FALSE; - } - dd = agdatadict(g, FALSE); - if (!dd) - return TRUE; - if ((dtsize(dd->dict.n) > 0) || (dtsize(dd->dict.e) > 0)) - return FALSE; - return TRUE; -} - -int node_in_subg(Agraph_t * g, Agnode_t * n) -{ - Agraph_t *subg; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (irrelevant_subgraph(subg)) - continue; - if (agsubnode(subg, n, FALSE)) - return TRUE; - } - return FALSE; -} - -static int has_no_edges(Agraph_t * g, Agnode_t * n) -{ - return ((agfstin(g, n) == NIL(Agedge_t *)) - && (agfstout(g, n) == NIL(Agedge_t *))); -} - -static int has_no_predecessor_below(Agraph_t * g, Agnode_t * n, - uint64_t val) -{ - Agedge_t *e; - - if (AGSEQ(n) < val) - return FALSE; - for (e = agfstin(g, n); e; e = agnxtin(g, e)) - if (AGSEQ(e->node) < val) - return FALSE; - return TRUE; -} - -static int not_default_attrs(Agraph_t * g, Agnode_t * n) -{ - Agattr_t *data; - Agsym_t *sym; - - NOTUSED(g); - if ((data = agattrrec(n))) { - for (sym = (Agsym_t *) dtfirst(data->dict); sym; - sym = (Agsym_t *) dtnext(data->dict, sym)) { - if (data->str[sym->id] != sym->defval) - return TRUE; - } - } - return FALSE; -} - -static int write_subgs(Agraph_t * g, iochan_t * ofile) -{ - Agraph_t *subg; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (irrelevant_subgraph(subg)) { - write_subgs(subg, ofile); - } - else { - CHKRV(write_hdr(subg, ofile, FALSE)); - CHKRV(write_body(subg, ofile)); - CHKRV(write_trl(subg, ofile)); - } - } - return 0; -} - -static int write_edge_name(Agedge_t * e, iochan_t * ofile, int terminate) -{ - int rv; - char *p; - Agraph_t *g; - - p = agnameof(e); - g = agraphof(e); - if (NOT(EMPTY(p))) { - CHKRV(ioput(g, ofile, " [key=")); - CHKRV(write_canonstr(g, ofile, p)); - if (terminate) - CHKRV(ioput(g, ofile, "]")); - rv = TRUE; - } else - rv = FALSE; - return rv; -} - - -static int write_nondefault_attrs(void *obj, iochan_t * ofile, - Dict_t * defdict) -{ - Agattr_t *data; - Agsym_t *sym; - Agraph_t *g; - int cnt = 0; - int rv; - - if ((AGTYPE(obj) == AGINEDGE) || (AGTYPE(obj) == AGOUTEDGE)) { - CHKRV(rv = write_edge_name(obj, ofile, FALSE)); - if (rv) - cnt++; - } - data = agattrrec(obj); - g = agraphof(obj); - if (data) - for (sym = (Agsym_t *) dtfirst(defdict); sym; - sym = (Agsym_t *) dtnext(defdict, sym)) { - if ((AGTYPE(obj) == AGINEDGE) || (AGTYPE(obj) == AGOUTEDGE)) { - if (Tailport && (sym->id == Tailport->id)) - continue; - if (Headport && (sym->id == Headport->id)) - continue; - } - if (data->str[sym->id] != sym->defval) { - if (cnt++ == 0) { - CHKRV(indent(g, ofile)); - CHKRV(ioput(g, ofile, " [")); - Level++; - } else { - CHKRV(ioput(g, ofile, ",\n")); - CHKRV(indent(g, ofile)); - } - CHKRV(write_canonstr(g, ofile, sym->name)); - CHKRV(ioput(g, ofile, "=")); - CHKRV(write_canonstr(g, ofile, data->str[sym->id])); - } - } - if (cnt > 0) { - CHKRV(ioput(g, ofile, "]")); - Level--; - } - AGATTRWF((Agobj_t *) obj) = TRUE; - return 0; -} - -static int write_nodename(Agnode_t * n, iochan_t * ofile) -{ - char *name, buf[20]; - Agraph_t *g; - - name = agnameof(n); - g = agraphof(n); - if (name) { - CHKRV(write_canonstr(g, ofile, name)); - } else { - sprintf(buf, "_%lld_SUSPECT", AGID(n)); /* could be deadly wrong */ - CHKRV(ioput(g, ofile, buf)); - } - return 0; -} - -static int attrs_written(void *obj) -{ - return (AGATTRWF((Agobj_t *) obj)); -} - -static int write_node(Agnode_t * n, iochan_t * ofile, Dict_t * d) -{ - Agraph_t *g; - - g = agraphof(n); - CHKRV(indent(g, ofile)); - CHKRV(write_nodename(n, ofile)); - if (NOT(attrs_written(n))) - CHKRV(write_nondefault_attrs(n, ofile, d)); - return ioput(g, ofile, ";\n"); -} - -/* node must be written if it wasn't already emitted because of - * a subgraph or one of its predecessors, and if it is a singleton - * or has non-default attributes. - */ -static int write_node_test(Agraph_t * g, Agnode_t * n, - uint64_t pred_id) -{ - if (NOT(node_in_subg(g, n)) && has_no_predecessor_below(g, n, pred_id)) { - if (has_no_edges(g, n) || not_default_attrs(g, n)) - return TRUE; - } - return FALSE; -} - -static int write_port(Agedge_t * e, iochan_t * ofile, Agsym_t * port) -{ - char *val; - Agraph_t *g; - - if (!port) - return 0; - g = agraphof(e); - val = agxget(e, port); - if (val[0] == '\0') - return 0; - - CHKRV(ioput(g, ofile, ":")); - if (aghtmlstr(val)) { - CHKRV(write_canonstr(g, ofile, val)); - } else { - char *s = strchr(val, ':'); - if (s) { - *s = '\0'; - CHKRV(_write_canonstr(g, ofile, val, FALSE)); - CHKRV(ioput(g, ofile, ":")); - CHKRV(_write_canonstr(g, ofile, s + 1, FALSE)); - *s = ':'; - } else { - CHKRV(_write_canonstr(g, ofile, val, FALSE)); - } - } - return 0; -} - -static int write_edge_test(Agraph_t * g, Agedge_t * e) -{ - Agraph_t *subg; - - /* can use agedge() because we subverted the dict compar_f */ - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (irrelevant_subgraph(subg)) - continue; - if (agsubedge(subg, e, FALSE)) - return FALSE; - } - return TRUE; -} - -static int write_edge(Agedge_t * e, iochan_t * ofile, Dict_t * d) -{ - Agnode_t *t, *h; - Agraph_t *g; - - t = AGTAIL(e); - h = AGHEAD(e); - g = agraphof(t); - CHKRV(indent(g, ofile)); - CHKRV(write_nodename(t, ofile)); - CHKRV(write_port(e, ofile, Tailport)); - CHKRV(ioput(g, ofile, (agisdirected(agraphof(t)) ? " -> " : " -- "))); - CHKRV(write_nodename(h, ofile)); - CHKRV(write_port(e, ofile, Headport)); - if (NOT(attrs_written(e))) { - CHKRV(write_nondefault_attrs(e, ofile, d)); - } else { - CHKRV(write_edge_name(e, ofile, TRUE)); - } - return ioput(g, ofile, ";\n"); -} - -static int write_body(Agraph_t * g, iochan_t * ofile) -{ - Agnode_t *n, *prev; - Agedge_t *e; - Agdatadict_t *dd; - /* int has_attr; */ - - /* has_attr = (agattrrec(g) != NIL(Agattr_t*)); */ - - CHKRV(write_subgs(g, ofile)); - dd = agdatadict(agroot(g), FALSE); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (write_node_test(g, n, AGSEQ(n))) - CHKRV(write_node(n, ofile, dd ? dd->dict.n : 0)); - prev = n; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if ((prev != aghead(e)) - && write_node_test(g, aghead(e), AGSEQ(n))) { - CHKRV(write_node(aghead(e), ofile, dd ? dd->dict.n : 0)); - prev = aghead(e); - } - if (write_edge_test(g, e)) - CHKRV(write_edge(e, ofile, dd ? dd->dict.e : 0)); - } - - } - return 0; -} - -static void set_attrwf(Agraph_t * g, int toplevel, int value) -{ - Agraph_t *subg; - Agnode_t *n; - Agedge_t *e; - - AGATTRWF(g) = value; - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - set_attrwf(subg, FALSE, value); - } - if (toplevel) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - AGATTRWF(n) = value; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - AGATTRWF(e) = value; - } - } -} - -/* agwrite: - * Return 0 on success, EOF on failure - */ -int agwrite(Agraph_t * g, void *ofile) -{ - char* s; - int len; - Level = 0; /* re-initialize tab level */ - if ((s = agget(g, "linelength")) && isdigit(*s)) { - len = (int)strtol(s, (char **)NULL, 10); - if ((len == 0) || (len >= MIN_OUTPUTLINE)) - Max_outputline = len; - } - set_attrwf(g, TRUE, FALSE); - CHKRV(write_hdr(g, ofile, TRUE)); - CHKRV(write_body(g, ofile)); - CHKRV(write_trl(g, ofile)); - Max_outputline = MAX_OUTPUTLINE; - return AGDISC(g, io)->flush(ofile); -} diff --git a/internal/ccall/cgraph/y.output b/internal/ccall/cgraph/y.output deleted file mode 100644 index 8d0fc1f..0000000 --- a/internal/ccall/cgraph/y.output +++ /dev/null @@ -1,953 +0,0 @@ -Terminals unused in grammar - - T_list - T_attr - - -Grammar - - 0 $accept: graph $end - - 1 graph: hdr body - 2 | error - 3 | /* empty */ - - 4 body: '{' optstmtlist '}' - - 5 hdr: optstrict graphtype optgraphname - - 6 optgraphname: atom - 7 | /* empty */ - - 8 optstrict: T_strict - 9 | /* empty */ - - 10 graphtype: T_graph - 11 | T_digraph - - 12 optstmtlist: stmtlist - 13 | /* empty */ - - 14 stmtlist: stmtlist stmt - 15 | stmt - - 16 optsemi: ';' - 17 | /* empty */ - - 18 stmt: attrstmt optsemi - 19 | compound optsemi - - 20 compound: simple rcompound optattr - - 21 simple: nodelist - 22 | subgraph - - 23 $@1: /* empty */ - - 24 $@2: /* empty */ - - 25 rcompound: T_edgeop $@1 simple $@2 rcompound - 26 | /* empty */ - - 27 nodelist: node - 28 | nodelist ',' node - - 29 node: atom - 30 | atom ':' atom - 31 | atom ':' atom ':' atom - - 32 attrstmt: attrtype optmacroname attrlist - 33 | graphattrdefs - - 34 attrtype: T_graph - 35 | T_node - 36 | T_edge - - 37 optmacroname: atom '=' - 38 | /* empty */ - - 39 optattr: attrlist - 40 | /* empty */ - - 41 attrlist: optattr '[' optattrdefs ']' - - 42 optattrdefs: optattrdefs attrdefs - 43 | /* empty */ - - 44 attrdefs: attritem optseparator - - 45 attritem: attrassignment - 46 | attrmacro - - 47 attrassignment: atom '=' atom - - 48 attrmacro: '@' atom - - 49 graphattrdefs: attrassignment - - 50 $@3: /* empty */ - - 51 subgraph: optsubghdr $@3 body - - 52 optsubghdr: T_subgraph atom - 53 | T_subgraph - 54 | /* empty */ - - 55 optseparator: ';' - 56 | ',' - 57 | /* empty */ - - 58 atom: T_atom - 59 | qatom - - 60 qatom: T_qatom - 61 | qatom '+' T_qatom - - -Terminals, with rules where they appear - -$end (0) 0 -'+' (43) 61 -',' (44) 28 56 -':' (58) 30 31 -';' (59) 16 55 -'=' (61) 37 47 -'@' (64) 48 -'[' (91) 41 -']' (93) 41 -'{' (123) 4 -'}' (125) 4 -error (256) 2 -T_graph (258) 10 34 -T_node (259) 35 -T_edge (260) 36 -T_digraph (261) 11 -T_subgraph (262) 52 53 -T_strict (263) 8 -T_edgeop (264) 25 -T_list (265) -T_attr (266) -T_atom (267) 58 -T_qatom (268) 60 61 - - -Nonterminals, with rules where they appear - -$accept (24) - on left: 0 -graph (25) - on left: 1 2 3, on right: 0 -body (26) - on left: 4, on right: 1 51 -hdr (27) - on left: 5, on right: 1 -optgraphname (28) - on left: 6 7, on right: 5 -optstrict (29) - on left: 8 9, on right: 5 -graphtype (30) - on left: 10 11, on right: 5 -optstmtlist (31) - on left: 12 13, on right: 4 -stmtlist (32) - on left: 14 15, on right: 12 14 -optsemi (33) - on left: 16 17, on right: 18 19 -stmt (34) - on left: 18 19, on right: 14 15 -compound (35) - on left: 20, on right: 19 -simple (36) - on left: 21 22, on right: 20 25 -rcompound (37) - on left: 25 26, on right: 20 25 -$@1 (38) - on left: 23, on right: 25 -$@2 (39) - on left: 24, on right: 25 -nodelist (40) - on left: 27 28, on right: 21 28 -node (41) - on left: 29 30 31, on right: 27 28 -attrstmt (42) - on left: 32 33, on right: 18 -attrtype (43) - on left: 34 35 36, on right: 32 -optmacroname (44) - on left: 37 38, on right: 32 -optattr (45) - on left: 39 40, on right: 20 41 -attrlist (46) - on left: 41, on right: 32 39 -optattrdefs (47) - on left: 42 43, on right: 41 42 -attrdefs (48) - on left: 44, on right: 42 -attritem (49) - on left: 45 46, on right: 44 -attrassignment (50) - on left: 47, on right: 45 49 -attrmacro (51) - on left: 48, on right: 46 -graphattrdefs (52) - on left: 49, on right: 33 -subgraph (53) - on left: 51, on right: 22 -$@3 (54) - on left: 50, on right: 51 -optsubghdr (55) - on left: 52 53 54, on right: 51 -optseparator (56) - on left: 55 56 57, on right: 44 -atom (57) - on left: 58 59, on right: 6 29 30 31 37 47 48 52 -qatom (58) - on left: 60 61, on right: 59 61 - - -State 0 - - 0 $accept: . graph $end - - error shift, and go to state 1 - T_strict shift, and go to state 2 - - $end reduce using rule 3 (graph) - T_graph reduce using rule 9 (optstrict) - T_digraph reduce using rule 9 (optstrict) - - graph go to state 3 - hdr go to state 4 - optstrict go to state 5 - - -State 1 - - 2 graph: error . - - $default reduce using rule 2 (graph) - - -State 2 - - 8 optstrict: T_strict . - - $default reduce using rule 8 (optstrict) - - -State 3 - - 0 $accept: graph . $end - - $end shift, and go to state 6 - - -State 4 - - 1 graph: hdr . body - - '{' shift, and go to state 7 - - body go to state 8 - - -State 5 - - 5 hdr: optstrict . graphtype optgraphname - - T_graph shift, and go to state 9 - T_digraph shift, and go to state 10 - - graphtype go to state 11 - - -State 6 - - 0 $accept: graph $end . - - $default accept - - -State 7 - - 4 body: '{' . optstmtlist '}' - - T_graph shift, and go to state 12 - T_node shift, and go to state 13 - T_edge shift, and go to state 14 - T_subgraph shift, and go to state 15 - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - '{' reduce using rule 54 (optsubghdr) - $default reduce using rule 13 (optstmtlist) - - optstmtlist go to state 18 - stmtlist go to state 19 - stmt go to state 20 - compound go to state 21 - simple go to state 22 - nodelist go to state 23 - node go to state 24 - attrstmt go to state 25 - attrtype go to state 26 - attrassignment go to state 27 - graphattrdefs go to state 28 - subgraph go to state 29 - optsubghdr go to state 30 - atom go to state 31 - qatom go to state 32 - - -State 8 - - 1 graph: hdr body . - - $default reduce using rule 1 (graph) - - -State 9 - - 10 graphtype: T_graph . - - $default reduce using rule 10 (graphtype) - - -State 10 - - 11 graphtype: T_digraph . - - $default reduce using rule 11 (graphtype) - - -State 11 - - 5 hdr: optstrict graphtype . optgraphname - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - $default reduce using rule 7 (optgraphname) - - optgraphname go to state 33 - atom go to state 34 - qatom go to state 32 - - -State 12 - - 34 attrtype: T_graph . - - $default reduce using rule 34 (attrtype) - - -State 13 - - 35 attrtype: T_node . - - $default reduce using rule 35 (attrtype) - - -State 14 - - 36 attrtype: T_edge . - - $default reduce using rule 36 (attrtype) - - -State 15 - - 52 optsubghdr: T_subgraph . atom - 53 | T_subgraph . - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - $default reduce using rule 53 (optsubghdr) - - atom go to state 35 - qatom go to state 32 - - -State 16 - - 58 atom: T_atom . - - $default reduce using rule 58 (atom) - - -State 17 - - 60 qatom: T_qatom . - - $default reduce using rule 60 (qatom) - - -State 18 - - 4 body: '{' optstmtlist . '}' - - '}' shift, and go to state 36 - - -State 19 - - 12 optstmtlist: stmtlist . - 14 stmtlist: stmtlist . stmt - - T_graph shift, and go to state 12 - T_node shift, and go to state 13 - T_edge shift, and go to state 14 - T_subgraph shift, and go to state 15 - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - '{' reduce using rule 54 (optsubghdr) - $default reduce using rule 12 (optstmtlist) - - stmt go to state 37 - compound go to state 21 - simple go to state 22 - nodelist go to state 23 - node go to state 24 - attrstmt go to state 25 - attrtype go to state 26 - attrassignment go to state 27 - graphattrdefs go to state 28 - subgraph go to state 29 - optsubghdr go to state 30 - atom go to state 31 - qatom go to state 32 - - -State 20 - - 15 stmtlist: stmt . - - $default reduce using rule 15 (stmtlist) - - -State 21 - - 19 stmt: compound . optsemi - - ';' shift, and go to state 38 - - $default reduce using rule 17 (optsemi) - - optsemi go to state 39 - - -State 22 - - 20 compound: simple . rcompound optattr - - T_edgeop shift, and go to state 40 - - $default reduce using rule 26 (rcompound) - - rcompound go to state 41 - - -State 23 - - 21 simple: nodelist . - 28 nodelist: nodelist . ',' node - - ',' shift, and go to state 42 - - $default reduce using rule 21 (simple) - - -State 24 - - 27 nodelist: node . - - $default reduce using rule 27 (nodelist) - - -State 25 - - 18 stmt: attrstmt . optsemi - - ';' shift, and go to state 38 - - $default reduce using rule 17 (optsemi) - - optsemi go to state 43 - - -State 26 - - 32 attrstmt: attrtype . optmacroname attrlist - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - $default reduce using rule 38 (optmacroname) - - optmacroname go to state 44 - atom go to state 45 - qatom go to state 32 - - -State 27 - - 49 graphattrdefs: attrassignment . - - $default reduce using rule 49 (graphattrdefs) - - -State 28 - - 33 attrstmt: graphattrdefs . - - $default reduce using rule 33 (attrstmt) - - -State 29 - - 22 simple: subgraph . - - $default reduce using rule 22 (simple) - - -State 30 - - 51 subgraph: optsubghdr . $@3 body - - $default reduce using rule 50 ($@3) - - $@3 go to state 46 - - -State 31 - - 29 node: atom . - 30 | atom . ':' atom - 31 | atom . ':' atom ':' atom - 47 attrassignment: atom . '=' atom - - ':' shift, and go to state 47 - '=' shift, and go to state 48 - - $default reduce using rule 29 (node) - - -State 32 - - 59 atom: qatom . - 61 qatom: qatom . '+' T_qatom - - '+' shift, and go to state 49 - - $default reduce using rule 59 (atom) - - -State 33 - - 5 hdr: optstrict graphtype optgraphname . - - $default reduce using rule 5 (hdr) - - -State 34 - - 6 optgraphname: atom . - - $default reduce using rule 6 (optgraphname) - - -State 35 - - 52 optsubghdr: T_subgraph atom . - - $default reduce using rule 52 (optsubghdr) - - -State 36 - - 4 body: '{' optstmtlist '}' . - - $default reduce using rule 4 (body) - - -State 37 - - 14 stmtlist: stmtlist stmt . - - $default reduce using rule 14 (stmtlist) - - -State 38 - - 16 optsemi: ';' . - - $default reduce using rule 16 (optsemi) - - -State 39 - - 19 stmt: compound optsemi . - - $default reduce using rule 19 (stmt) - - -State 40 - - 25 rcompound: T_edgeop . $@1 simple $@2 rcompound - - $default reduce using rule 23 ($@1) - - $@1 go to state 50 - - -State 41 - - 20 compound: simple rcompound . optattr - - $default reduce using rule 40 (optattr) - - optattr go to state 51 - attrlist go to state 52 - - -State 42 - - 28 nodelist: nodelist ',' . node - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - node go to state 53 - atom go to state 54 - qatom go to state 32 - - -State 43 - - 18 stmt: attrstmt optsemi . - - $default reduce using rule 18 (stmt) - - -State 44 - - 32 attrstmt: attrtype optmacroname . attrlist - - $default reduce using rule 40 (optattr) - - optattr go to state 55 - attrlist go to state 56 - - -State 45 - - 37 optmacroname: atom . '=' - - '=' shift, and go to state 57 - - -State 46 - - 51 subgraph: optsubghdr $@3 . body - - '{' shift, and go to state 7 - - body go to state 58 - - -State 47 - - 30 node: atom ':' . atom - 31 | atom ':' . atom ':' atom - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - atom go to state 59 - qatom go to state 32 - - -State 48 - - 47 attrassignment: atom '=' . atom - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - atom go to state 60 - qatom go to state 32 - - -State 49 - - 61 qatom: qatom '+' . T_qatom - - T_qatom shift, and go to state 61 - - -State 50 - - 25 rcompound: T_edgeop $@1 . simple $@2 rcompound - - T_subgraph shift, and go to state 15 - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - $default reduce using rule 54 (optsubghdr) - - simple go to state 62 - nodelist go to state 23 - node go to state 24 - subgraph go to state 29 - optsubghdr go to state 30 - atom go to state 54 - qatom go to state 32 - - -State 51 - - 20 compound: simple rcompound optattr . - 41 attrlist: optattr . '[' optattrdefs ']' - - '[' shift, and go to state 63 - - $default reduce using rule 20 (compound) - - -State 52 - - 39 optattr: attrlist . - - $default reduce using rule 39 (optattr) - - -State 53 - - 28 nodelist: nodelist ',' node . - - $default reduce using rule 28 (nodelist) - - -State 54 - - 29 node: atom . - 30 | atom . ':' atom - 31 | atom . ':' atom ':' atom - - ':' shift, and go to state 47 - - $default reduce using rule 29 (node) - - -State 55 - - 41 attrlist: optattr . '[' optattrdefs ']' - - '[' shift, and go to state 63 - - -State 56 - - 32 attrstmt: attrtype optmacroname attrlist . - 39 optattr: attrlist . - - '[' reduce using rule 39 (optattr) - $default reduce using rule 32 (attrstmt) - - -State 57 - - 37 optmacroname: atom '=' . - - $default reduce using rule 37 (optmacroname) - - -State 58 - - 51 subgraph: optsubghdr $@3 body . - - $default reduce using rule 51 (subgraph) - - -State 59 - - 30 node: atom ':' atom . - 31 | atom ':' atom . ':' atom - - ':' shift, and go to state 64 - - $default reduce using rule 30 (node) - - -State 60 - - 47 attrassignment: atom '=' atom . - - $default reduce using rule 47 (attrassignment) - - -State 61 - - 61 qatom: qatom '+' T_qatom . - - $default reduce using rule 61 (qatom) - - -State 62 - - 25 rcompound: T_edgeop $@1 simple . $@2 rcompound - - $default reduce using rule 24 ($@2) - - $@2 go to state 65 - - -State 63 - - 41 attrlist: optattr '[' . optattrdefs ']' - - $default reduce using rule 43 (optattrdefs) - - optattrdefs go to state 66 - - -State 64 - - 31 node: atom ':' atom ':' . atom - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - atom go to state 67 - qatom go to state 32 - - -State 65 - - 25 rcompound: T_edgeop $@1 simple $@2 . rcompound - - T_edgeop shift, and go to state 40 - - $default reduce using rule 26 (rcompound) - - rcompound go to state 68 - - -State 66 - - 41 attrlist: optattr '[' optattrdefs . ']' - 42 optattrdefs: optattrdefs . attrdefs - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - ']' shift, and go to state 69 - '@' shift, and go to state 70 - - attrdefs go to state 71 - attritem go to state 72 - attrassignment go to state 73 - attrmacro go to state 74 - atom go to state 75 - qatom go to state 32 - - -State 67 - - 31 node: atom ':' atom ':' atom . - - $default reduce using rule 31 (node) - - -State 68 - - 25 rcompound: T_edgeop $@1 simple $@2 rcompound . - - $default reduce using rule 25 (rcompound) - - -State 69 - - 41 attrlist: optattr '[' optattrdefs ']' . - - $default reduce using rule 41 (attrlist) - - -State 70 - - 48 attrmacro: '@' . atom - - T_atom shift, and go to state 16 - T_qatom shift, and go to state 17 - - atom go to state 76 - qatom go to state 32 - - -State 71 - - 42 optattrdefs: optattrdefs attrdefs . - - $default reduce using rule 42 (optattrdefs) - - -State 72 - - 44 attrdefs: attritem . optseparator - - ';' shift, and go to state 77 - ',' shift, and go to state 78 - - $default reduce using rule 57 (optseparator) - - optseparator go to state 79 - - -State 73 - - 45 attritem: attrassignment . - - $default reduce using rule 45 (attritem) - - -State 74 - - 46 attritem: attrmacro . - - $default reduce using rule 46 (attritem) - - -State 75 - - 47 attrassignment: atom . '=' atom - - '=' shift, and go to state 48 - - -State 76 - - 48 attrmacro: '@' atom . - - $default reduce using rule 48 (attrmacro) - - -State 77 - - 55 optseparator: ';' . - - $default reduce using rule 55 (optseparator) - - -State 78 - - 56 optseparator: ',' . - - $default reduce using rule 56 (optseparator) - - -State 79 - - 44 attrdefs: attritem optseparator . - - $default reduce using rule 44 (attrdefs) diff --git a/internal/ccall/cgraph/y.tab.c b/internal/ccall/cgraph/y.tab.c deleted file mode 100644 index f423aff..0000000 --- a/internal/ccall/cgraph/y.tab.c +++ /dev/null @@ -1,2350 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.7" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 14 "../../lib/cgraph/grammar.y" - - -#include /* SAFE */ -#include /* SAFE */ -extern void yyerror(char *); /* gets mapped to aagerror, see below */ - -#ifdef _WIN32 -#define gettxt(a,b) (b) -#endif - -static char Key[] = "key"; - -typedef union s { /* possible items in generic list */ - Agnode_t *n; - Agraph_t *subg; - Agedge_t *e; - Agsym_t *asym; /* bound attribute */ - char *name; /* unbound attribute */ - struct item_s *list; /* list-of-lists (for edgestmt) */ -} val_t; - -typedef struct item_s { /* generic list */ - int tag; /* T_node, T_subgraph, T_edge, T_attr */ - val_t u; /* primary element */ - char *str; /* secondary value - port or attr value */ - struct item_s *next; -} item; - -typedef struct list_s { /* maintain head and tail ptrs for fast append */ - item *first; - item *last; -} list_t; - -typedef struct gstack_s { - Agraph_t *g; - Agraph_t *subg; - list_t nodelist,edgelist,attrlist; - struct gstack_s *down; -} gstack_t; - -/* functions */ -static void appendnode(char *name, char *port, char *sport); -static void attrstmt(int tkind, char *macroname); -static void startgraph(char *name, int directed, int strict); -static void getedgeitems(int x); -static void newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key); -static void edgerhs(Agnode_t *n, char *tport, item *hlist, char *key); -static void appendattr(char *name, char *value); -static void bindattrs(int kind); -static void applyattrs(void *obj); -static void endgraph(void); -static void endnode(void); -static void endedge(void); -static void freestack(void); -static char* concat(char*, char*); -static char* concatPort(char*, char*); - -static void opensubg(char *name); -static void closesubg(void); - -/* global */ -static Agraph_t *G; /* top level graph */ -static Agdisc_t *Disc; /* discipline passed to agread or agconcat */ -static gstack_t *S; - - -/* Line 371 of yacc.c */ -#line 135 "y.tab.c" - -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - T_graph = 258, - T_node = 259, - T_edge = 260, - T_digraph = 261, - T_subgraph = 262, - T_strict = 263, - T_edgeop = 264, - T_list = 265, - T_attr = 266, - T_atom = 267, - T_qatom = 268 - }; -#endif -/* Tokens. */ -#define T_graph 258 -#define T_node 259 -#define T_edge 260 -#define T_digraph 261 -#define T_subgraph 262 -#define T_strict 263 -#define T_edgeop 264 -#define T_list 265 -#define T_attr 266 -#define T_atom 267 -#define T_qatom 268 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 387 of yacc.c */ -#line 81 "../../lib/cgraph/grammar.y" - - int i; - char *str; - struct Agnode_s *n; - - -/* Line 387 of yacc.c */ -#line 211 "y.tab.c" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ - -/* Line 390 of yacc.c */ -#line 239 "y.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; -#else -typedef short int yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) -#else -static int -YYID (yyi) - int yyi; -#endif -{ - return yyi; -} -#endif - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 6 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 59 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 24 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 35 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 62 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 80 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 268 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 23, 17, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 18, 16, - 2, 19, 2, 2, 22, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 20, 2, 21, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 14, 2, 15, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint8 yyprhs[] = -{ - 0, 0, 3, 6, 8, 9, 13, 17, 19, 20, - 22, 23, 25, 27, 29, 30, 33, 35, 37, 38, - 41, 44, 48, 50, 52, 53, 54, 60, 61, 63, - 67, 69, 73, 79, 83, 85, 87, 89, 91, 94, - 95, 97, 98, 103, 106, 107, 110, 112, 114, 118, - 121, 123, 124, 128, 131, 133, 134, 136, 138, 139, - 141, 143, 145 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int8 yyrhs[] = -{ - 25, 0, -1, 27, 26, -1, 1, -1, -1, 14, - 31, 15, -1, 29, 30, 28, -1, 57, -1, -1, - 8, -1, -1, 3, -1, 6, -1, 32, -1, -1, - 32, 34, -1, 34, -1, 16, -1, -1, 42, 33, - -1, 35, 33, -1, 36, 37, 45, -1, 40, -1, - 53, -1, -1, -1, 9, 38, 36, 39, 37, -1, - -1, 41, -1, 40, 17, 41, -1, 57, -1, 57, - 18, 57, -1, 57, 18, 57, 18, 57, -1, 43, - 44, 46, -1, 52, -1, 3, -1, 4, -1, 5, - -1, 57, 19, -1, -1, 46, -1, -1, 45, 20, - 47, 21, -1, 47, 48, -1, -1, 49, 56, -1, - 50, -1, 51, -1, 57, 19, 57, -1, 22, 57, - -1, 50, -1, -1, 55, 54, 26, -1, 7, 57, - -1, 7, -1, -1, 16, -1, 17, -1, -1, 12, - -1, 58, -1, 13, -1, 58, 23, 13, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint8 yyrline[] = -{ - 0, 98, 98, 99, 100, 103, 105, 108, 108, 110, - 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, - 121, 124, 128, 128, 130, 130, 130, 131, 135, 135, - 137, 138, 139, 142, 143, 146, 147, 148, 151, 152, - 155, 155, 157, 159, 160, 162, 165, 165, 167, 170, - 173, 176, 176, 179, 180, 181, 184, 184, 184, 186, - 187, 190, 191 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "T_graph", "T_node", "T_edge", - "T_digraph", "T_subgraph", "T_strict", "T_edgeop", "T_list", "T_attr", - "T_atom", "T_qatom", "'{'", "'}'", "';'", "','", "':'", "'='", "'['", - "']'", "'@'", "'+'", "$accept", "graph", "body", "hdr", "optgraphname", - "optstrict", "graphtype", "optstmtlist", "stmtlist", "optsemi", "stmt", - "compound", "simple", "rcompound", "$@1", "$@2", "nodelist", "node", - "attrstmt", "attrtype", "optmacroname", "optattr", "attrlist", - "optattrdefs", "attrdefs", "attritem", "attrassignment", "attrmacro", - "graphattrdefs", "subgraph", "$@3", "optsubghdr", "optseparator", "atom", - "qatom", YY_NULL -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 123, 125, 59, 44, 58, 61, - 91, 93, 64, 43 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 24, 25, 25, 25, 26, 27, 28, 28, 29, - 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, - 34, 35, 36, 36, 38, 39, 37, 37, 40, 40, - 41, 41, 41, 42, 42, 43, 43, 43, 44, 44, - 45, 45, 46, 47, 47, 48, 49, 49, 50, 51, - 52, 54, 53, 55, 55, 55, 56, 56, 56, 57, - 57, 58, 58 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 2, 1, 0, 3, 3, 1, 0, 1, - 0, 1, 1, 1, 0, 2, 1, 1, 0, 2, - 2, 3, 1, 1, 0, 0, 5, 0, 1, 3, - 1, 3, 5, 3, 1, 1, 1, 1, 2, 0, - 1, 0, 4, 2, 0, 2, 1, 1, 3, 2, - 1, 0, 3, 2, 1, 0, 1, 1, 0, 1, - 1, 1, 3 -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 0, 3, 9, 0, 0, 0, 1, 14, 2, 11, - 12, 8, 35, 36, 37, 54, 59, 61, 0, 13, - 16, 18, 27, 22, 28, 18, 39, 50, 34, 23, - 51, 30, 60, 6, 7, 53, 5, 15, 17, 20, - 24, 41, 0, 19, 41, 0, 0, 0, 0, 0, - 55, 21, 40, 29, 30, 0, 33, 38, 52, 31, - 48, 62, 25, 44, 0, 27, 0, 32, 26, 42, - 0, 43, 58, 46, 47, 0, 49, 56, 57, 45 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int8 yydefgoto[] = -{ - -1, 3, 8, 4, 33, 5, 11, 18, 19, 39, - 20, 21, 22, 41, 50, 65, 23, 24, 25, 26, - 44, 51, 52, 66, 71, 72, 27, 74, 28, 29, - 46, 30, 79, 31, 32 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -18 -static const yytype_int8 yypact[] = -{ - 18, -18, -18, 20, 9, 3, -18, -2, -18, -18, - -18, 1, -18, -18, -18, 1, -18, -18, 10, -2, - -18, 19, 25, 21, -18, 19, 1, -18, -18, -18, - -18, 11, 17, -18, -18, -18, -18, -18, -18, -18, - -18, -18, 1, -18, -18, 22, 9, 1, 1, 29, - 15, 23, -18, -18, 26, 23, 27, -18, -18, 28, - -18, -18, -18, -18, 1, 25, -5, -18, -18, -18, - 1, -18, 16, -18, -18, 30, -18, -18, -18, -18 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = -{ - -18, -18, -1, -18, -18, -18, -18, -18, -18, 31, - 32, -18, 0, -17, -18, -18, -18, 12, -18, -18, - -18, 8, 13, -18, -18, -18, -8, -18, -18, -18, - -18, -18, -18, -11, -18 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -56 -static const yytype_int8 yytable[] = -{ - 34, 12, 13, 14, 35, 15, 9, 16, 17, 10, - 16, 17, -55, 16, 17, 45, 69, 70, -4, 1, - 6, -10, 15, 7, -10, 36, 2, 16, 17, 47, - 48, 54, 77, 78, 40, 38, 59, 60, 42, 54, - 49, 57, 61, 63, 47, 58, 64, -40, 68, 48, - 62, 37, 55, 67, 53, 75, 43, 56, 73, 76 -}; - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-18))) - -#define yytable_value_is_error(Yytable_value) \ - YYID (0) - -static const yytype_uint8 yycheck[] = -{ - 11, 3, 4, 5, 15, 7, 3, 12, 13, 6, - 12, 13, 14, 12, 13, 26, 21, 22, 0, 1, - 0, 3, 7, 14, 6, 15, 8, 12, 13, 18, - 19, 42, 16, 17, 9, 16, 47, 48, 17, 50, - 23, 19, 13, 20, 18, 46, 18, 20, 65, 19, - 50, 19, 44, 64, 42, 66, 25, 44, 66, 70 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 1, 8, 25, 27, 29, 0, 14, 26, 3, - 6, 30, 3, 4, 5, 7, 12, 13, 31, 32, - 34, 35, 36, 40, 41, 42, 43, 50, 52, 53, - 55, 57, 58, 28, 57, 57, 15, 34, 16, 33, - 9, 37, 17, 33, 44, 57, 54, 18, 19, 23, - 38, 45, 46, 41, 57, 45, 46, 19, 26, 57, - 57, 13, 36, 20, 18, 39, 47, 57, 37, 21, - 22, 48, 49, 50, 51, 57, 57, 16, 17, 56 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); -# endif - switch (yytype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif -{ - int yynrhs = yyr2[yyrule]; - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULL; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int yychar; - - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); - -/* Number of syntax errors so far. */ -int yynerrs; - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -/* Line 1792 of yacc.c */ -#line 98 "../../lib/cgraph/grammar.y" - {freestack(); endgraph();} - break; - - case 3: -/* Line 1792 of yacc.c */ -#line 99 "../../lib/cgraph/grammar.y" - {if (G) {freestack(); endgraph(); agclose(G); G = Ag_G_global = NIL(Agraph_t*);}} - break; - - case 6: -/* Line 1792 of yacc.c */ -#line 105 "../../lib/cgraph/grammar.y" - {startgraph((yyvsp[(3) - (3)].str),(yyvsp[(2) - (3)].i),(yyvsp[(1) - (3)].i));} - break; - - case 7: -/* Line 1792 of yacc.c */ -#line 108 "../../lib/cgraph/grammar.y" - {(yyval.str)=(yyvsp[(1) - (1)].str);} - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 108 "../../lib/cgraph/grammar.y" - {(yyval.str)=0;} - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 110 "../../lib/cgraph/grammar.y" - {(yyval.i)=1;} - break; - - case 10: -/* Line 1792 of yacc.c */ -#line 110 "../../lib/cgraph/grammar.y" - {(yyval.i)=0;} - break; - - case 11: -/* Line 1792 of yacc.c */ -#line 112 "../../lib/cgraph/grammar.y" - {(yyval.i) = 0;} - break; - - case 12: -/* Line 1792 of yacc.c */ -#line 112 "../../lib/cgraph/grammar.y" - {(yyval.i) = 1;} - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 125 "../../lib/cgraph/grammar.y" - {if ((yyvsp[(2) - (3)].i)) endedge(); else endnode();} - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 130 "../../lib/cgraph/grammar.y" - {getedgeitems(1);} - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 130 "../../lib/cgraph/grammar.y" - {getedgeitems(2);} - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 130 "../../lib/cgraph/grammar.y" - {(yyval.i) = 1;} - break; - - case 27: -/* Line 1792 of yacc.c */ -#line 131 "../../lib/cgraph/grammar.y" - {(yyval.i) = 0;} - break; - - case 30: -/* Line 1792 of yacc.c */ -#line 137 "../../lib/cgraph/grammar.y" - {appendnode((yyvsp[(1) - (1)].str),NIL(char*),NIL(char*));} - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 138 "../../lib/cgraph/grammar.y" - {appendnode((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str),NIL(char*));} - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 139 "../../lib/cgraph/grammar.y" - {appendnode((yyvsp[(1) - (5)].str),(yyvsp[(3) - (5)].str),(yyvsp[(5) - (5)].str));} - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 142 "../../lib/cgraph/grammar.y" - {attrstmt((yyvsp[(1) - (3)].i),(yyvsp[(2) - (3)].str));} - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 143 "../../lib/cgraph/grammar.y" - {attrstmt(T_graph,NIL(char*));} - break; - - case 35: -/* Line 1792 of yacc.c */ -#line 146 "../../lib/cgraph/grammar.y" - {(yyval.i) = T_graph;} - break; - - case 36: -/* Line 1792 of yacc.c */ -#line 147 "../../lib/cgraph/grammar.y" - {(yyval.i) = T_node;} - break; - - case 37: -/* Line 1792 of yacc.c */ -#line 148 "../../lib/cgraph/grammar.y" - {(yyval.i) = T_edge;} - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 151 "../../lib/cgraph/grammar.y" - {(yyval.str) = (yyvsp[(1) - (2)].str);} - break; - - case 39: -/* Line 1792 of yacc.c */ -#line 152 "../../lib/cgraph/grammar.y" - {(yyval.str) = NIL(char*); } - break; - - case 48: -/* Line 1792 of yacc.c */ -#line 167 "../../lib/cgraph/grammar.y" - {appendattr((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));} - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 170 "../../lib/cgraph/grammar.y" - {appendattr((yyvsp[(2) - (2)].str),NIL(char*));} - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 176 "../../lib/cgraph/grammar.y" - {opensubg((yyvsp[(1) - (1)].str));} - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 176 "../../lib/cgraph/grammar.y" - {closesubg();} - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 179 "../../lib/cgraph/grammar.y" - {(yyval.str)=(yyvsp[(2) - (2)].str);} - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 180 "../../lib/cgraph/grammar.y" - {(yyval.str)=NIL(char*);} - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 181 "../../lib/cgraph/grammar.y" - {(yyval.str)=NIL(char*);} - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 186 "../../lib/cgraph/grammar.y" - {(yyval.str) = (yyvsp[(1) - (1)].str);} - break; - - case 60: -/* Line 1792 of yacc.c */ -#line 187 "../../lib/cgraph/grammar.y" - {(yyval.str) = (yyvsp[(1) - (1)].str);} - break; - - case 61: -/* Line 1792 of yacc.c */ -#line 190 "../../lib/cgraph/grammar.y" - {(yyval.str) = (yyvsp[(1) - (1)].str);} - break; - - case 62: -/* Line 1792 of yacc.c */ -#line 191 "../../lib/cgraph/grammar.y" - {(yyval.str) = concat((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));} - break; - - -/* Line 1792 of yacc.c */ -#line 1710 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - /* Make sure YYID is used. */ - return YYID (yyresult); -} - - -/* Line 2055 of yacc.c */ -#line 193 "../../lib/cgraph/grammar.y" - - -#define NILitem NIL(item*) - - -static item *newitem(int tag, void *p0, char *p1) -{ - item *rv = agalloc(G,sizeof(item)); - rv->tag = tag; rv->u.name = (char*)p0; rv->str = p1; - return rv; -} - -static item *cons_node(Agnode_t *n, char *port) - { return newitem(T_node,n,port); } - -static item *cons_attr(char *name, char *value) - { return newitem(T_atom,name,value); } - -static item *cons_list(item *list) - { return newitem(T_list,list,NIL(char*)); } - -static item *cons_subg(Agraph_t *subg) - { return newitem(T_subgraph,subg,NIL(char*)); } - -static gstack_t *push(gstack_t *s, Agraph_t *subg) { - gstack_t *rv; - rv = agalloc(G,sizeof(gstack_t)); - rv->down = s; - rv->g = subg; - return rv; -} - -static gstack_t *pop(gstack_t *s) -{ - gstack_t *rv; - rv = S->down; - agfree(G,s); - return rv; -} - -#ifdef NOTDEF -static item *cons_edge(Agedge_t *e) - { return newitem(T_edge,e,NIL(char*)); } -#endif - -static void delete_items(item *ilist) -{ - item *p,*pn; - - for (p = ilist; p; p = pn) { - pn = p->next; - switch(p->tag) { - case T_list: delete_items(p->u.list); break; - case T_atom: case T_attr: agstrfree(G,p->str); break; - } - agfree(G,p); - } -} - -#ifdef NOTDEF -static void initlist(list_t *list) -{ - list->first = list->last = NILitem; -} -#endif - -static void deletelist(list_t *list) -{ - delete_items(list->first); - list->first = list->last = NILitem; -} - -#ifdef NOTDEF -static void listins(list_t *list, item *v) -{ - v->next = list->first; - list->first = v; - if (list->last == NILitem) list->last = v; -} -#endif - -static void listapp(list_t *list, item *v) -{ - if (list->last) list->last->next = v; - list->last = v; - if (list->first == NILitem) list->first = v; -} - - -/* attrs */ -static void appendattr(char *name, char *value) -{ - item *v; - - assert(value != NIL(char*)); - v = cons_attr(name,value); - listapp(&(S->attrlist),v); -} - -static void bindattrs(int kind) -{ - item *aptr; - char *name; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - assert(aptr->tag == T_atom); /* signifies unbound attr */ - name = aptr->u.name; - if ((kind == AGEDGE) && streq(name,Key)) continue; - if ((aptr->u.asym = agattr(S->g,kind,name,NIL(char*))) == NILsym) - aptr->u.asym = agattr(S->g,kind,name,""); - aptr->tag = T_attr; /* signifies bound attr */ - agstrfree(G,name); - } -} - -/* attach node/edge specific attributes */ -static void applyattrs(void *obj) -{ - item *aptr; - - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if (aptr->tag == T_attr) { - if (aptr->u.asym) { - agxset(obj,aptr->u.asym,aptr->str); - } - } - else { - assert(AGTYPE(obj) == AGEDGE); - assert(aptr->tag == T_atom); - assert(streq(aptr->u.name,Key)); - } - } -} - -static void nomacros(void) -{ - agerr(AGWARN,"attribute macros not implemented"); -} - -/* attrstmt: - * First argument is always attrtype, so switch covers all cases. - * This function is used to handle default attribute value assignment. - */ -static void attrstmt(int tkind, char *macroname) -{ - item *aptr; - int kind = 0; - Agsym_t* sym; - - /* creating a macro def */ - if (macroname) nomacros(); - /* invoking a macro def */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) - if (aptr->str == NIL(char*)) nomacros(); - - switch(tkind) { - case T_graph: kind = AGRAPH; break; - case T_node: kind = AGNODE; break; - case T_edge: kind = AGEDGE; break; - } - bindattrs(kind); /* set up defaults for new attributes */ - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - /* If the tag is still T_atom, aptr->u.asym has not been set */ - if (aptr->tag == T_atom) continue; - if (!(aptr->u.asym->fixed) || (S->g != G)) - sym = agattr(S->g,kind,aptr->u.asym->name,aptr->str); - else - sym = aptr->u.asym; - if (S->g == G) - sym->print = TRUE; - } - deletelist(&(S->attrlist)); -} - -/* nodes */ - -static void appendnode(char *name, char *port, char *sport) -{ - item *elt; - - if (sport) { - port = concatPort (port, sport); - } - elt = cons_node(agnode(S->g,name,TRUE),port); - listapp(&(S->nodelist),elt); - agstrfree(G,name); -} - -/* apply current optional attrs to nodelist and clean up lists */ -/* what's bad is that this could also be endsubg. also, you can't -clean up S->subg in closesubg() because S->subg might be needed -to construct edges. these are the sort of notes you write to yourself -in the future. */ -static void endnode() -{ - item *ptr; - - bindattrs(AGNODE); - for (ptr = S->nodelist.first; ptr; ptr = ptr->next) - applyattrs(ptr->u.n); - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S->subg = 0; /* notice a pattern here? :-( */ -} - -/* edges - store up node/subg lists until optional edge key can be seen */ - -static void getedgeitems(int x) -{ - item *v = 0; - - if (S->nodelist.first) { - v = cons_list(S->nodelist.first); - S->nodelist.first = S->nodelist.last = NILitem; - } - else {if (S->subg) v = cons_subg(S->subg); S->subg = 0;} - /* else nil append */ - if (v) listapp(&(S->edgelist),v); -} - -static void endedge(void) -{ - char *key; - item *aptr,*tptr,*p; - - Agnode_t *t; - Agraph_t *subg; - - bindattrs(AGEDGE); - - /* look for "key" pseudo-attribute */ - key = NIL(char*); - for (aptr = S->attrlist.first; aptr; aptr = aptr->next) { - if ((aptr->tag == T_atom) && streq(aptr->u.name,Key)) - key = aptr->str; - } - - /* can make edges with node lists or subgraphs */ - for (p = S->edgelist.first; p->next; p = p->next) { - if (p->tag == T_subgraph) { - subg = p->u.subg; - for (t = agfstnode(subg); t; t = agnxtnode(subg,t)) - edgerhs(agsubnode(S->g,t,FALSE),NIL(char*),p->next,key); - } - else { - for (tptr = p->u.list; tptr; tptr = tptr->next) - edgerhs(tptr->u.n,tptr->str,p->next,key); - } - } - deletelist(&(S->nodelist)); - deletelist(&(S->edgelist)); - deletelist(&(S->attrlist)); - S->subg = 0; -} - -/* concat: - */ -static char* -concat (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 1; - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - strcpy(sym,s1); - strcat(sym,s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - -/* concatPort: - */ -static char* -concatPort (char* s1, char* s2) -{ - char* s; - char buf[BUFSIZ]; - char* sym; - size_t len = strlen(s1) + strlen(s2) + 2; /* one more for ':' */ - - if (len <= BUFSIZ) sym = buf; - else sym = (char*)malloc(len); - sprintf (sym, "%s:%s", s1, s2); - s = agstrdup (G,sym); - agstrfree (G,s1); - agstrfree (G,s2); - if (sym != buf) free (sym); - return s; -} - - -static void edgerhs(Agnode_t *tail, char *tport, item *hlist, char *key) -{ - Agnode_t *head; - Agraph_t *subg; - item *hptr; - - if (hlist->tag == T_subgraph) { - subg = hlist->u.subg; - for (head = agfstnode(subg); head; head = agnxtnode(subg,head)) - newedge(tail,tport,agsubnode(S->g,head,FALSE),NIL(char*),key); - } - else { - for (hptr = hlist->u.list; hptr; hptr = hptr->next) - newedge(tail,tport,agsubnode(S->g,hptr->u.n,FALSE),hptr->str,key); - } -} - -static void mkport(Agedge_t *e, char *name, char *val) -{ - Agsym_t *attr; - if (val) { - if ((attr = agattr(S->g,AGEDGE,name,NIL(char*))) == NILsym) - attr = agattr(S->g,AGEDGE,name,""); - agxset(e,attr,val); - } -} - -static void newedge(Agnode_t *t, char *tport, Agnode_t *h, char *hport, char *key) -{ - Agedge_t *e; - - e = agedge(S->g,t,h,key,TRUE); - if (e) { /* can fail if graph is strict and t==h */ - char *tp = tport; - char *hp = hport; - if ((agtail(e) != aghead(e)) && (aghead(e) == t)) { - /* could happen with an undirected edge */ - char *temp; - temp = tp; tp = hp; hp = temp; - } - mkport(e,TAILPORT_ID,tp); - mkport(e,HEADPORT_ID,hp); - applyattrs(e); - } -} - -/* graphs and subgraphs */ - - -static void startgraph(char *name, int directed, int strict) -{ - static Agdesc_t req; /* get rid of warnings */ - - if (G == NILgraph) { - req.directed = directed; - req.strict = strict; - req.maingraph = TRUE; - Ag_G_global = G = agopen(name,req,Disc); - } - else { - Ag_G_global = G; - } - S = push(S,G); - agstrfree(NIL(Agraph_t*),name); -} - -static void endgraph() -{ - aglexeof(); - aginternalmapclearlocalnames(G); -} - -static void opensubg(char *name) -{ - S = push(S,agsubg(S->g,name,TRUE)); - agstrfree(G,name); -} - -static void closesubg() -{ - Agraph_t *subg = S->g; - S = pop(S); - S->subg = subg; - assert(subg); -} - -static void freestack() -{ - while (S) { - deletelist(&(S->nodelist)); - deletelist(&(S->attrlist)); - deletelist(&(S->edgelist)); - S = pop(S); - } -} - -extern FILE *yyin; -Agraph_t *agconcat(Agraph_t *g, void *chan, Agdisc_t *disc) -{ - yyin = chan; - G = g; - Ag_G_global = NILgraph; - Disc = (disc? disc : &AgDefaultDisc); - aglexinit(Disc, chan); - yyparse(); - if (Ag_G_global == NILgraph) aglexbad(); - return Ag_G_global; -} - -Agraph_t *agread(void *fp, Agdisc_t *disc) {return agconcat(NILgraph,fp,disc); } - diff --git a/internal/ccall/cgraph/y.tab.h b/internal/ccall/cgraph/y.tab.h deleted file mode 100644 index b810269..0000000 --- a/internal/ccall/cgraph/y.tab.h +++ /dev/null @@ -1,112 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - T_graph = 258, - T_node = 259, - T_edge = 260, - T_digraph = 261, - T_subgraph = 262, - T_strict = 263, - T_edgeop = 264, - T_list = 265, - T_attr = 266, - T_atom = 267, - T_qatom = 268 - }; -#endif -/* Tokens. */ -#define T_graph 258 -#define T_node 259 -#define T_edge 260 -#define T_digraph 261 -#define T_subgraph 262 -#define T_strict 263 -#define T_edgeop 264 -#define T_list 265 -#define T_attr 266 -#define T_atom 267 -#define T_qatom 268 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 2058 of yacc.c */ -#line 81 "../../lib/cgraph/grammar.y" - - int i; - char *str; - struct Agnode_s *n; - - -/* Line 2058 of yacc.c */ -#line 90 "y.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/internal/ccall/circogen.c b/internal/ccall/circogen.c deleted file mode 100644 index d87f319..0000000 --- a/internal/ccall/circogen.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "circogen/block.c" -#include "circogen/blockpath.c" -#include "circogen/blocktree.c" -#include "circogen/circpos.c" -#include "circogen/circular.c" -#include "circogen/circularinit.c" -#include "circogen/deglist.c" -#include "circogen/edgelist.c" -#include "circogen/nodelist.c" -#include "circogen/nodeset.c" diff --git a/internal/ccall/circogen/block.c b/internal/ccall/circogen/block.c deleted file mode 100644 index 2df9d48..0000000 --- a/internal/ccall/circogen/block.c +++ /dev/null @@ -1,116 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include - -#include "circular.h" -#include "block.h" - -void initBlocklist(blocklist_t * bl) -{ - bl->first = NULL; - bl->last = NULL; -} - -/* -void -cleanBlocklist(blocklist_t* sp) -{ - block_t* bp; - block_t* temp; - - if (!sp) return; - for(bp = sp->first; bp; bp = temp) { - temp = bp->next; - freeBlock(bp); - } -} -*/ - -block_t *mkBlock(Agraph_t * g) -{ - block_t *sn; - - sn = NEW(block_t); - initBlocklist(&sn->children); - sn->sub_graph = g; - return sn; -} - -void freeBlock(block_t * sp) -{ - if (!sp) - return; - freeNodelist(sp->circle_list); - free(sp); -} - -int blockSize(block_t * sp) -{ - return agnnodes (sp->sub_graph); -} - -/* appendBlock: - * add block at end - */ -void appendBlock(blocklist_t * bl, block_t * bp) -{ - bp->next = NULL; - if (bl->last) { - bl->last->next = bp; - bl->last = bp; - } else { - bl->first = bp; - bl->last = bp; - } -} - -/* insertBlock: - * add block at beginning - */ -void insertBlock(blocklist_t * bl, block_t * bp) -{ - if (bl->first) { - bp->next = bl->first; - bl->first = bp; - } else { - bl->first = bp; - bl->last = bp; - } -} - -#ifdef DEBUG -void printBlocklist(blocklist_t * snl) -{ - block_t *bp; - for (bp = snl->first; bp; bp = bp->next) { - Agnode_t *n; - char *p; - Agraph_t *g = bp->sub_graph; - fprintf(stderr, "block=%s\n", agnameof(g)); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - Agedge_t *e; - if (PARENT(n)) - p = agnameof(PARENT(n)); - else - p = ""; - fprintf(stderr, " %s (%d %s)\n", agnameof(n), VAL(n), p); - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - fprintf(stderr, " %s--", agnameof(agtail(e))); - fprintf(stderr, "%s\n", agnameof(aghead(e))); - } - } - } -} -#endif diff --git a/internal/ccall/circogen/block.h b/internal/ccall/circogen/block.h deleted file mode 100644 index 49d03ab..0000000 --- a/internal/ccall/circogen/block.h +++ /dev/null @@ -1,67 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef BLOCK_H -#define BLOCK_H - -#include - - typedef struct block block_t; - - typedef struct { - block_t *first; - block_t *last; - } blocklist_t; - - struct block { - Agnode_t *child; /* if non-null, points to node in parent block */ - block_t *next; /* sibling block */ - Agraph_t *sub_graph; /* nodes and edges in this block */ - double radius; /* radius of block and subblocks */ - double rad0; /* radius of block */ - nodelist_t *circle_list; /* ordered list of nodes in block */ - blocklist_t children; /* child blocks */ - double parent_pos; /* if block has 1 node, angle to place parent */ - int flags; - }; - - extern block_t *mkBlock(Agraph_t *); - extern void freeBlock(block_t * sp); - extern int blockSize(block_t * sp); - - extern void initBlocklist(blocklist_t *); - extern void appendBlock(blocklist_t * sp, block_t * sn); - extern void insertBlock(blocklist_t * sp, block_t * sn); -/* extern void freeBlocklist (blocklist_t* sp); */ - -#ifdef DEBUG - extern void printBlocklist(blocklist_t * snl); -#endif - -#define CHILD(b) ((b)->child) -#define BLK_PARENT(b) (CHILD(b)? PARENT(CHILD(b)) : 0) -#define BLK_FLAGS(b) ((b)->flags) - -#define COALESCED_F (1 << 0) -#define COALESCED(b) (BLK_FLAGS(b)&COALESCED_F) -#define SET_COALESCED(b) (BLK_FLAGS(b) |= COALESCED_F) - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/blockpath.c b/internal/ccall/circogen/blockpath.c deleted file mode 100644 index b5ed888..0000000 --- a/internal/ccall/circogen/blockpath.c +++ /dev/null @@ -1,682 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "blockpath.h" -#include "edgelist.h" -#include "nodeset.h" -#include "deglist.h" - -/* The code below lays out a single block on a circle. - */ - -/* We use the unused fields order and to_orig in cloned nodes and edges */ -#define ORIGE(e) (ED_to_orig(e)) - -/* clone_graph: - * Create two copies of the argument graph - * One is a subgraph, the other is an actual copy since we will be - * adding edges to it. - */ -static Agraph_t *clone_graph(Agraph_t * ing, Agraph_t ** xg) -{ - Agraph_t *clone; - Agraph_t *xclone; - Agnode_t *n; - Agnode_t *xn; - Agnode_t *xh; - Agedge_t *e; - Agedge_t *xe; - char gname[SMALLBUF]; - static int id = 0; - - sprintf(gname, "_clone_%d", id++); - clone = agsubg(ing, gname,1); - agbindrec(clone, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - sprintf(gname, "_clone_%d", id++); - xclone = agopen(gname, ing->desc,NIL(Agdisc_t *)); - for (n = agfstnode(ing); n; n = agnxtnode(ing, n)) { - agsubnode(clone,n,1); - xn = agnode(xclone, agnameof(n),1); - agbindrec(xn, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - CLONE(n) = xn; - } - - for (n = agfstnode(ing); n; n = agnxtnode(ing, n)) { - xn = CLONE(n); - for (e = agfstout(ing, n); e; e = agnxtout(ing, e)) { - agsubedge(clone,e,1); - xh = CLONE(aghead(e)); - xe = agedge(xclone, xn, xh, NULL, 1); - agbindrec(xe, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - ORIGE(xe) = e; - DEGREE(xn) += 1; - DEGREE(xh) += 1; - } - } - *xg = xclone; - return clone; -} - -/* fillList: - * Add nodes to deg_list, which stores them by degree. - */ -static deglist_t *getList(Agraph_t * g) -{ - deglist_t *dl = mkDeglist(); - Agnode_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - insertDeglist(dl, n); - } - return dl; -} - -/* find_pair_edges: - */ -static void find_pair_edges(Agraph_t * g, Agnode_t * n, Agraph_t * outg) -{ - Agnode_t **neighbors_with; - Agnode_t **neighbors_without; - - Agedge_t *e; - Agedge_t *ep; - Agedge_t *ex; - Agnode_t *n1; - Agnode_t *n2; - int has_pair_edge; - int diff; - int has_pair_count = 0; - int no_pair_count = 0; - int node_degree; - int edge_cnt = 0; - - node_degree = DEGREE(n); - neighbors_with = N_GNEW(node_degree, Agnode_t *); - neighbors_without = N_GNEW(node_degree, Agnode_t *); - - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - n1 = aghead(e); - if (n1 == n) - n1 = agtail(e); - has_pair_edge = 0; - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if (ep == e) - continue; - n2 = aghead(ep); - if (n2 == n) - n2 = agtail(ep); - ex = agfindedge(g, n1, n2); - if (ex) { - has_pair_edge = 1; - if (n1 < n2) { /* count edge only once */ - edge_cnt++; - if (ORIGE(ex)) { - agdelete(outg, ORIGE(ex)); - ORIGE(ex) = 0; /* delete only once */ - } - } - } - } - if (has_pair_edge) { - neighbors_with[has_pair_count] = n1; - has_pair_count++; - } else { - neighbors_without[no_pair_count] = n1; - no_pair_count++; - } - } - - diff = node_degree - 1 - edge_cnt; - if (diff > 0) { - int mark; - Agnode_t *hp; - Agnode_t *tp; - - if (diff < no_pair_count) { - for (mark = 0; mark < no_pair_count; mark += 2) { - if ((mark + 1) >= no_pair_count) - break; - tp = neighbors_without[mark]; - hp = neighbors_without[mark + 1]; - agbindrec(agedge(g, tp, hp, NULL, 1), "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); // edge custom data - DEGREE(tp)++; - DEGREE(hp)++; - diff--; - } - - mark = 2; - while (diff > 0) { - tp = neighbors_without[0]; - hp = neighbors_without[mark]; - agbindrec(agedge(g, tp, hp, NULL, 1), "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); // edge custom data - DEGREE(tp)++; - DEGREE(hp)++; - mark++; - diff--; - } - } - - else if (diff == no_pair_count) { - tp = neighbors_with[0]; - for (mark = 0; mark < no_pair_count; mark++) { - hp = neighbors_without[mark]; - agbindrec(agedge(g, tp, hp, NULL, 1), "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - DEGREE(tp)++; - DEGREE(hp)++; - } - } - } - - free(neighbors_without); - free(neighbors_with); -} - -/* remove_pair_edges: - * Create layout skeleton of ing. - * Why is returned graph connected? - */ -static Agraph_t *remove_pair_edges(Agraph_t * ing) -{ - int counter = 0; - int nodeCount; - Agraph_t *outg; - Agraph_t *g; - deglist_t *dl; - Agnode_t *currnode, *adjNode; - Agedge_t *e; - - outg = clone_graph(ing, &g); - nodeCount = agnnodes(g); - dl = getList(g); - - while (counter < (nodeCount - 3)) { - currnode = firstDeglist(dl); - - /* Remove all adjacent nodes since they have to be reinserted */ - for (e = agfstedge(g, currnode); e; e = agnxtedge(g, e, currnode)) { - adjNode = aghead(e); - if (currnode == adjNode) - adjNode = agtail(e); - removeDeglist(dl, adjNode); - } - - find_pair_edges(g, currnode, outg); - - for (e = agfstedge(g, currnode); e; e = agnxtedge(g, e, currnode)) { - adjNode = aghead(e); - if (currnode == adjNode) - adjNode = agtail(e); - - DEGREE(adjNode)--; - insertDeglist(dl, adjNode); - } - - agdelete(g, currnode); - - counter++; - } - - agclose(g); - freeDeglist(dl); - return outg; -} - -static void -measure_distance(Agnode_t * n, Agnode_t * ancestor, int dist, - Agnode_t * change) -{ - Agnode_t *parent; - - parent = TPARENT(ancestor); - if (parent == NULL) - return; - - dist++; - - /* check parent to see if it has other leaf paths at greater distance - than the context node. - set the path/distance of the leaf at this ancestor node */ - - if (DISTONE(parent) == 0) { - LEAFONE(parent) = n; - DISTONE(parent) = dist; - } else if (dist > DISTONE(parent)) { - if (LEAFONE(parent) != change) { - if (!DISTTWO(parent) || (LEAFTWO(parent) != change)) - change = LEAFONE(parent); - LEAFTWO(parent) = LEAFONE(parent); - DISTTWO(parent) = DISTONE(parent); - } - LEAFONE(parent) = n; - DISTONE(parent) = dist; - } else if (dist > DISTTWO(parent)) { - LEAFTWO(parent) = n; - DISTTWO(parent) = dist; - return; - } else - return; - - measure_distance(n, parent, dist, change); -} - -/* find_longest_path: - * Find and return longest path in tree. - */ -static nodelist_t *find_longest_path(Agraph_t * tree) -{ - Agnode_t *n; - Agedge_t *e; - Agnode_t *common = 0; - nodelist_t *path; - nodelist_t *endPath; - int maxlength = 0; - int length; - - if (agnnodes(tree) == 1) { - path = mkNodelist(); - n = agfstnode(tree); - appendNodelist(path, NULL, n); - SET_ONPATH(n); - return path; - } - - for (n = agfstnode(tree); n; n = agnxtnode(tree, n)) { - int count = 0; - for (e = agfstedge(tree, n); e; e = agnxtedge(tree, e, n)) { - count++; - } - if (count == 1) - measure_distance(n, n, 0, NULL); - } - - /* find the branch node rooted at the longest path */ - for (n = agfstnode(tree); n; n = agnxtnode(tree, n)) { - length = DISTONE(n) + DISTTWO(n); - if (length > maxlength) { - common = n; - maxlength = length; - } - } - - path = mkNodelist(); - for (n = LEAFONE(common); n != common; n = TPARENT(n)) { - appendNodelist(path, NULL, n); - SET_ONPATH(n); - } - appendNodelist(path, NULL, common); - SET_ONPATH(common); - - if (DISTTWO(common)) { /* 2nd path might be empty */ - endPath = mkNodelist(); - for (n = LEAFTWO(common); n != common; n = TPARENT(n)) { - appendNodelist(endPath, NULL, n); - SET_ONPATH(n); - } - reverseAppend(path, endPath); - } - - return path; -} - -/* dfs: - * Simple depth first search, adding traversed edges to tree. - */ -static void dfs(Agraph_t * g, Agnode_t * n, Agraph_t * tree) -{ - Agedge_t *e; - Agnode_t *neighbor; - - SET_VISITED(n); - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - neighbor = aghead(e); - if (neighbor == n) - neighbor = agtail(e); - - if (!VISITED(neighbor)) { - /* add the edge to the dfs tree */ - agsubedge(tree,e,1); - TPARENT(neighbor) = n; - dfs(g, neighbor, tree); - } - } -} - -/* spanning_tree: - * Construct spanning forest of g as subgraph - */ -static Agraph_t *spanning_tree(Agraph_t * g) -{ - Agnode_t *n; - Agraph_t *tree; - char gname[SMALLBUF]; - static int id = 0; - - sprintf(gname, "_span_%d", id++); - tree = agsubg(g, gname,1); - agbindrec(tree, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - agsubnode(tree,n,1); - DISTONE(n) = 0; - DISTTWO(n) = 0; - UNSET_VISITED(n); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (!VISITED(n)) { - TPARENT(n) = NULL; - dfs(g, n, tree); - } - } - - return tree; -} - -/* block_graph: - * Add induced edges. - */ -static void block_graph(Agraph_t * g, block_t * sn) -{ - Agnode_t *n; - Agedge_t *e; - Agraph_t *subg = sn->sub_graph; - - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (BLOCK(aghead(e)) == sn) - agsubedge(subg,e,1); - } - } -} - -static int count_all_crossings(nodelist_t * list, Agraph_t * subg) -{ - nodelistitem_t *item; - edgelist *openEdgeList = init_edgelist(); - Agnode_t *n; - Agedge_t *e; - int crossings = 0; - int order = 1; - - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - for (e = agfstout(subg, n); e; e = agnxtout(subg, e)) { - EDGEORDER(e) = 0; - } - } - - for (item = list->first; item; item = item->next) { - n = item->curr; - - for (e = agfstedge(subg, n); e; e = agnxtedge(subg, e, n)) { - if (EDGEORDER(e) > 0) { - edgelistitem *eitem; - Agedge_t *ep; - - for (eitem = (edgelistitem *) dtfirst(openEdgeList); eitem; - eitem = - (edgelistitem *) dtnext(openEdgeList, eitem)) { - ep = eitem->edge; - if (EDGEORDER(ep) > EDGEORDER(e)) { - if ((aghead(ep) != n) && (agtail(ep) != n)) - crossings++; - } - } - remove_edge(openEdgeList, e); - } - } - - for (e = agfstedge(subg, n); e; e = agnxtedge(subg, e, n)) { - if (EDGEORDER(e) == 0) { - EDGEORDER(e) = order; - add_edge(openEdgeList, e); - } - } - order++; - } - - free_edgelist(openEdgeList); - return crossings; -} - -#define CROSS_ITER 10 - -/* reduce: - * Attempt to reduce edge crossings by moving nodes. - * Original crossing count is in cnt; final count is returned there. - * list is the original list; return the best list found. - */ -static nodelist_t *reduce(nodelist_t * list, Agraph_t * subg, int *cnt) -{ - Agnode_t *curnode; - Agedge_t *e; - Agnode_t *neighbor; - nodelist_t *listCopy; - int crossings, j, newCrossings; - - crossings = *cnt; - for (curnode = agfstnode(subg); curnode; - curnode = agnxtnode(subg, curnode)) { - /* move curnode next to its neighbors */ - for (e = agfstedge(subg, curnode); e; - e = agnxtedge(subg, e, curnode)) { - neighbor = agtail(e); - if (neighbor == curnode) - neighbor = aghead(e); - - for (j = 0; j < 2; j++) { - listCopy = cloneNodelist(list); - insertNodelist(list, curnode, neighbor, j); - newCrossings = count_all_crossings(list, subg); - if (newCrossings < crossings) { - crossings = newCrossings; - freeNodelist(listCopy); - if (crossings == 0) { - *cnt = 0; - return list; - } - } else { - freeNodelist(list); - list = listCopy; - } - } - } - } - *cnt = crossings; - return list; -} - -static nodelist_t *reduce_edge_crossings(nodelist_t * list, - Agraph_t * subg) -{ - int i, crossings, origCrossings; - - crossings = count_all_crossings(list, subg); - if (crossings == 0) - return list; - - for (i = 0; i < CROSS_ITER; i++) { - origCrossings = crossings; - list = reduce(list, subg, &crossings); - /* return if no crossings or no improvement */ - if ((origCrossings == crossings) || (crossings == 0)) - return list; - } - return list; -} - -/* largest_nodesize: - * Return max dimension of nodes on list - */ -static double largest_nodesize(nodelist_t * list) -{ - Agnode_t *n; - nodelistitem_t *item; - double size = 0; - - for (item = list->first; item; item = item->next) { - n = ORIGN(item->curr); - if (ND_width(n) > size) - size = ND_width(n); - if (ND_height(n) > size) - size = ND_height(n); - } - return size; -} - -/* place_node: - * Add n to list. By construction, n is not in list at start. - */ -static void place_node(Agraph_t * g, Agnode_t * n, nodelist_t * list) -{ - Agedge_t *e; - int placed = 0; - nodelist_t *neighbors = mkNodelist(); - nodelistitem_t *one, *two; - - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - appendNodelist(neighbors, NULL, aghead(e)); - SET_NEIGHBOR(aghead(e)); - } - for (e = agfstin(g, n); e; e = agnxtin(g, e)) { - appendNodelist(neighbors, NULL, agtail(e)); - SET_NEIGHBOR(agtail(e)); - } - - /* Look for 2 neighbors consecutive on list */ - if (sizeNodelist(neighbors) >= 2) { - for (one = list->first; one; one = one->next) { - if (one == list->last) - two = list->first; - else - two = one->next; - - if (NEIGHBOR(one->curr) && NEIGHBOR(two->curr)) { - appendNodelist(list, one, n); - placed = 1; - break; - } - } - } - - /* Find any neighbor on list */ - if (!placed && sizeNodelist(neighbors) > 0) { - for (one = list->first; one; one = one->next) { - if (NEIGHBOR(one->curr)) { - appendNodelist(list, one, n); - placed = 1; - break; - } - } - } - - if (!placed) - appendNodelist(list, NULL, n); - - for (one = neighbors->first; one; one = one->next) - UNSET_NEIGHBOR(one->curr); - freeNodelist(neighbors); -} - -/* place_residual_nodes: - * Add nodes not in list to list. - */ -static void place_residual_nodes(Agraph_t * g, nodelist_t * list) -{ - Agnode_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (!ONPATH(n)) - place_node(g, n, list); - } -} - -nodelist_t *layout_block(Agraph_t * g, block_t * sn, double min_dist) -{ - Agnode_t *n; - Agraph_t *copyG, *tree, *subg; - nodelist_t *longest_path; - nodelistitem_t *item; - int N, k; - double theta, radius, largest_node; - largest_node = 0; - - subg = sn->sub_graph; - block_graph(g, sn); /* add induced edges */ - - copyG = remove_pair_edges(subg); - - tree = spanning_tree(copyG); - longest_path = find_longest_path(tree); - place_residual_nodes(subg, longest_path); - /* at this point, longest_path is a list of all nodes in the block */ - - /* apply crossing reduction algorithms here */ - longest_path = reduce_edge_crossings(longest_path, subg); - - N = sizeNodelist(longest_path); - largest_node = largest_nodesize(longest_path); - /* N*(min_dist+largest_node) is roughly circumference of required circle */ - if (N == 1) - radius = 0; - else - radius = (N * (min_dist + largest_node)) / (2 * M_PI); - - for (item = longest_path->first; item; item = item->next) { - n = item->curr; - if (ISPARENT(n)) { - /* QUESTION: Why is only one parent realigned? */ - realignNodelist(longest_path, item); - break; - } - } - - k = 0; - for (item = longest_path->first; item; item = item->next) { - n = item->curr; - POSITION(n) = k; - PSI(n) = 0.0; - theta = k * ((2.0 * M_PI) / N); - - ND_pos(n)[0] = radius * cos(theta); - ND_pos(n)[1] = radius * sin(theta); - - k++; - } - - if (N == 1) - sn->radius = largest_node / 2; - else - sn->radius = radius; - sn->rad0 = sn->radius; - - /* initialize parent pos */ - sn->parent_pos = -1; - - agclose(copyG); - return longest_path; -} - -#ifdef DEBUG -void prTree(Agraph_t * g) -{ - Agnode_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (TPARENT(n)) { - fprintf(stderr, "%s ", agnameof(n)); - fprintf(stderr, "-> %s\n", agnameof(TPARENT(n))); - } - } -} -#endif diff --git a/internal/ccall/circogen/blockpath.h b/internal/ccall/circogen/blockpath.h deleted file mode 100644 index 7ab2270..0000000 --- a/internal/ccall/circogen/blockpath.h +++ /dev/null @@ -1,34 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef BLOCKPATH_H -#define BLOCKPATH_H - -#include - - extern nodelist_t *layout_block(Agraph_t * g, block_t * sn, double); - extern int cmpNodeDegree(Dt_t *, Agnode_t **, Agnode_t **, Dtdisc_t *); - -#ifdef DEBUG - extern void prTree(Agraph_t * g); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/blocktree.c b/internal/ccall/circogen/blocktree.c deleted file mode 100644 index ab8c2d1..0000000 --- a/internal/ccall/circogen/blocktree.c +++ /dev/null @@ -1,264 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "blocktree.h" - -static void addNode(block_t * bp, Agnode_t * n) -{ - agsubnode(bp->sub_graph, n,1); - BLOCK(n) = bp; -} - -static Agraph_t *makeBlockGraph(Agraph_t * g, circ_state * state) -{ - char name[SMALLBUF]; - Agraph_t *subg; - - sprintf(name, "_block_%d", state->blockCount++); - subg = agsubg(g, name,1); - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - return subg; -} - -static block_t *makeBlock(Agraph_t * g, circ_state * state) -{ - Agraph_t *subg = makeBlockGraph(g, state); - block_t *bp = mkBlock(subg); - - return bp; -} - -typedef struct { - Agedge_t *top; - int sz; -} estack; - -static void -push (estack* s, Agedge_t* e) -{ - ENEXT(e) = s->top; - s->top = e; - s->sz += 1; -} - -static Agedge_t* -pop (estack* s) -{ - Agedge_t *top = s->top; - - if (top) { - assert(s->sz > 0); - s->top = ENEXT(top); - s->sz -= 1; - } else { - assert(0); - } - - return top; -} - - -/* dfs: - * - * Current scheme adds articulation point to first non-trivial child - * block. If none exists, it will be added to its parent's block, if - * non-trivial, or else given its own block. - * - * FIX: - * This should be modified to: - * - allow user to specify which block gets a node, perhaps on per-node basis. - * - if an articulation point is not used in one of its non-trivial blocks, - * dummy edges should be added to preserve biconnectivity - * - turn on user-supplied blocks. - * - Post-process to move articulation point to largest block - */ -static void _dfs(Agraph_t * g, Agnode_t * u, circ_state * state, int isRoot, estack* stk) -{ - Agedge_t *e; - Agnode_t *v; - - LOWVAL(u) = VAL(u) = state->orderCount++; - for (e = agfstedge(g, u); e; e = agnxtedge(g, e, u)) { - v = aghead (e); - if (v == u) { - v = agtail(e); - if (!EDGEORDER(e)) EDGEORDER(e) = -1; - } - else { - if (!EDGEORDER(e)) EDGEORDER(e) = 1; - } - - if (VAL(v) == 0) { /* Since VAL(root) == 0, it gets treated as artificial cut point */ - PARENT(v) = u; - push(stk, e); - _dfs(g, v, state, 0, stk); - LOWVAL(u) = MIN(LOWVAL(u), LOWVAL(v)); - if (LOWVAL(v) >= VAL(u)) { /* u is an articulation point */ - block_t *block = NULL; - Agnode_t *np; - Agedge_t *ep; - do { - ep = pop(stk); - if (EDGEORDER(ep) == 1) - np = aghead (ep); - else - np = agtail (ep); - if (!BLOCK(np)) { - if (!block) - block = makeBlock(g, state); - addNode(block, np); - } - } while (ep != e); - if (block) { /* If block != NULL, it's not empty */ - if (!BLOCK(u) && blockSize (block) > 1) - addNode(block, u); - if (isRoot && (BLOCK(u) == block)) - insertBlock(&state->bl, block); - else - appendBlock(&state->bl, block); - } - } - } else if (PARENT(u) != v) { - LOWVAL(u) = MIN(LOWVAL(u), VAL(v)); - } - } - if (isRoot && !BLOCK(u)) { - block_t *block = makeBlock(g, state); - addNode(block, u); - insertBlock(&state->bl, block); - } -} - - -/* find_blocks: - */ -static void find_blocks(Agraph_t * g, circ_state * state) -{ - Agnode_t *n; - Agnode_t *root = NULL; - estack stk; - - /* check to see if there is a node which is set to be the root - */ - if (state->rootname) { - root = agfindnode(g, state->rootname); - } - if (!root && state->N_root) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (late_bool(ORIGN(n), state->N_root, 0)) { - root = n; - break; - } - } - } - - if (!root) - root = agfstnode(g); - if (Verbose) - fprintf (stderr, "root = %s\n", agnameof(root)); - stk.sz = 0; - stk.top = NULL; - _dfs(g, root, state, 1, &stk); - -} - -/* create_block_tree: - * Construct block tree by peeling nodes from block list in state. - * When done, return root. The block list is empty - * FIX: use largest block as root - */ -block_t *createBlocktree(Agraph_t * g, circ_state * state) -{ - block_t *bp; - block_t *next; - block_t *root; - int min; - /* int ordercnt; */ - - find_blocks(g, state); - - bp = state->bl.first; /* if root chosen, will be first */ - /* Otherwise, just pick first as root */ - root = bp; - - /* Find node with minimum VAL value to find parent block */ - /* FIX: Should be some way to avoid search below. */ - /* ordercnt = state->orderCount; */ - for (bp = bp->next; bp; bp = next) { - Agnode_t *n; - Agnode_t *parent; - Agnode_t *child; - Agraph_t *subg = bp->sub_graph; - - child = n = agfstnode(subg); - - min = VAL(n); - parent = PARENT(n); - for (n = agnxtnode(subg, n); n; n = agnxtnode(subg, n)) { - if (VAL(n) < min) { - child = n; - min = VAL(n); - parent = PARENT(n); - } - } - SET_PARENT(parent); - CHILD(bp) = child; - next = bp->next; /* save next since list insertion destroys it */ - appendBlock(&(BLOCK(parent)->children), bp); - } - initBlocklist(&state->bl); /* zero out list */ - return root; -} - -void freeBlocktree(block_t * bp) -{ - block_t *child; - block_t *next; - - for (child = bp->children.first; child; child = next) { - next = child->next; - freeBlocktree(child); - } - - freeBlock(bp); -} - -#ifdef DEBUG -static void indent(int i) -{ - while (i--) - fputs(" ", stderr); -} - -void print_blocktree(block_t * sn, int depth) -{ - block_t *child; - Agnode_t *n; - Agraph_t *g; - - indent(depth); - g = sn->sub_graph; - fprintf(stderr, "%s:", agnameof(g)); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - fprintf(stderr, " %s", agnameof(n)); - } - fputs("\n", stderr); - - depth++; - for (child = sn->children.first; child; child = child->next) { - print_blocktree(child, depth); - } -} - -#endif diff --git a/internal/ccall/circogen/blocktree.h b/internal/ccall/circogen/blocktree.h deleted file mode 100644 index 454eb12..0000000 --- a/internal/ccall/circogen/blocktree.h +++ /dev/null @@ -1,34 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef BLOCKTREE_H -#define BLOCKTREE_H - -#include -#include - - extern block_t *createBlocktree(Agraph_t * g, circ_state * state); - extern void freeBlocktree(block_t *); -#ifdef DEBUG - extern void print_blocktree(block_t * sn, int depth); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/circo.h b/internal/ccall/circogen/circo.h deleted file mode 100644 index 469b57e..0000000 --- a/internal/ccall/circogen/circo.h +++ /dev/null @@ -1,31 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CIRCO_H -#define CIRCO_H - -#include "render.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern void circo_layout(Agraph_t * g); - extern void circoLayout(Agraph_t * g); - extern void circo_cleanup(Agraph_t * g); - extern void circo_init_graph(graph_t * g); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/circogen/circpos.c b/internal/ccall/circogen/circpos.c deleted file mode 100644 index ac1f91b..0000000 --- a/internal/ccall/circogen/circpos.c +++ /dev/null @@ -1,478 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -/* TODO: - * If cut point is in exactly 2 blocks, expand block circles to overlap - * especially in the case where one block is the sole child of the other. - */ - -#include "blockpath.h" - -/* getRotation: - * The function determines how much the block should be rotated - * for best positioning with parent, assuming its center is at x and y - * relative to the parent. - * angle gives the angle of the new position, i.e., tan(angle) = y/x. - * If sn has 2 nodes, we arrange the line of the 2 normal to angle. - * If sn has 1 node, parent_pos has already been set to the - * correct angle assuming no rotation. - * Otherwise, we find the node in sn connected to the parent and rotate - * the block so that it is closer or at least visible to its node in the - * parent. - * - * For COALESCED blocks, if neighbor is in left half plane, - * use unCOALESCED case. - * Else let theta be angle, R = LEN(x,y), pho the radius of actual - * child block, phi be angle of neighbor in actual child block, - * and r the distance from center of coalesced block to center of - * actual block. Then, the angle to rotate the coalesced block to - * that the edge from the parent is tangent to the neighbor on the - * actual child block circle is - * alpha = theta + M_PI/2 - phi - arcsin((l/R)*(sin B)) - * where l = r - rho/(cos phi) and beta = M_PI/2 + phi. - * Thus, - * alpha = theta + M_PI/2 - phi - arcsin((l/R)*(cos phi)) - */ -static double -getRotation(block_t * sn, Agraph_t * g, double x, double y, double theta) -{ - double mindist2; - Agraph_t *subg; - /* Agedge_t* e; */ - Agnode_t *n, *closest_node, *neighbor; - nodelist_t *list; - double len2, newX, newY; - int count; - - subg = sn->sub_graph; -#ifdef OLD - parent = sn->parent; -#endif - - list = sn->circle_list; - - if (sn->parent_pos >= 0) { - theta += M_PI - sn->parent_pos; - if (theta < 0) - theta += 2 * M_PI; - - return theta; - } - - count = sizeNodelist(list); - if (count == 2) { - return (theta - M_PI / 2.0); - } - - /* Find node in block connected to block's parent */ - neighbor = CHILD(sn); -#ifdef OLD - for (e = agfstedge(g, parent); e; e = agnxtedge(g, e, parent)) { - n = e->head; - if (n == parent) - n = e->tail; - - if ((BLOCK(n) == sn) && (PARENT(n) == parent)) { - neighbor = n; - break; - } - } -#endif - newX = ND_pos(neighbor)[0] + x; - newY = ND_pos(neighbor)[1] + y; - mindist2 = LEN2(newX, newY); /* save sqrts by using sqr of dist to find min */ - closest_node = neighbor; - - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - if (n == neighbor) - continue; - - newX = ND_pos(n)[0] + x; - newY = ND_pos(n)[1] + y; - - len2 = LEN2(newX, newY); - if (len2 < mindist2) { - mindist2 = len2; - closest_node = n; - } - } - - /* if((neighbor != closest_node) && !ISPARENT(neighbor)) { */ - if (neighbor != closest_node) { - double rho = sn->rad0; - double r = sn->radius - rho; - double n_x = ND_pos(neighbor)[0]; - if (COALESCED(sn) && (-r < n_x)) { - double R = LEN(x, y); - double n_y = ND_pos(neighbor)[1]; - double phi = atan2(n_y, n_x + r); - double l = r - rho / (cos(phi)); - - theta += M_PI / 2.0 - phi - asin((l / R) * (cos(phi))); - } else { /* Origin still at center of this block */ - double phi = atan2(ND_pos(neighbor)[1], ND_pos(neighbor)[0]); - theta += M_PI - phi - PSI(neighbor); - if (theta > 2 * M_PI) - theta -= 2 * M_PI; - } - } else - theta = 0; - return theta; -} - - -/* applyDelta: - * Recursively apply rotation rotate followed by translation (x,y) - * to block sn and its children. - */ -static void applyDelta(block_t * sn, double x, double y, double rotate) -{ - block_t *child; - Agraph_t *subg; - Agnode_t *n; - - subg = sn->sub_graph; - - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - double X, Y; - - if (rotate != 0) { - double tmpX, tmpY; - double cosR, sinR; - - tmpX = ND_pos(n)[0]; - tmpY = ND_pos(n)[1]; - cosR = cos(rotate); - sinR = sin(rotate); - - X = tmpX * cosR - tmpY * sinR; - Y = tmpX * sinR + tmpY * cosR; - } else { - X = ND_pos(n)[0]; - Y = ND_pos(n)[1]; - } - - /* translate */ - ND_pos(n)[0] = X + x; - ND_pos(n)[1] = Y + y; - } - - for (child = sn->children.first; child; child = child->next) - applyDelta(child, x, y, rotate); -} - -/* firstangle and lastangle give the range of child angles. - * These are set and used only when a block has just 1 node. - * And are used to give the center angle between the two extremes. - * The parent will then be attached at PI - center angle (parent_pos). - * If this block has no children, this is PI. Otherwise, positionChildren will - * be called once with the blocks node. firstangle will be 0, with - * succeeding angles increasing. - * position can always return the center angle - PI, since the block - * must have children and if the block has 1 node, the limits will be - * correctly set. If the block has more than 1 node, the value is - * unused. - */ -typedef struct { - double radius; /* Basic radius of block */ - double subtreeR; /* Max of subtree radii */ - double nodeAngle; /* Angle allocated to each node in block */ - double firstAngle; /* Smallest child angle when block has 1 node */ - double lastAngle; /* Largest child angle when block has 1 node */ - block_t *cp; /* Children of block */ - node_t *neighbor; /* Node connected to parent block, if any */ -} posstate; - -typedef struct { - Agnode_t* n; - double theta; /* angle of node */ - double minRadius; /* minimum radius for child circle */ - double maxRadius; /* maximum radius of child blocks */ - double diameter; /* length of arc needed for child blocks */ - double scale; /* scale factor to increase minRadius to parents' children don't overlap */ - int childCount; /* no. of child blocks attached at n */ -} posinfo_t; - -/* getInfo: - * get size info for blocks attached to the given node. - */ -static double -getInfo (posinfo_t* pi, posstate * stp, double min_dist) -{ - block_t *child; - double maxRadius = 0; /* Max. radius of children */ - double diameter = 0; /* sum of child diameters */ - int childCount = 0; - - for (child = stp->cp; child; child = child->next) { - if (BLK_PARENT(child) == pi->n) { - childCount++; - if (maxRadius < child->radius) { - maxRadius = child->radius; - } - diameter += 2 * child->radius + min_dist; - } - } - - pi->diameter = diameter; - pi->childCount = childCount; - pi->minRadius = stp->radius + min_dist + maxRadius; - pi->maxRadius = maxRadius; - return maxRadius; -} - -/* setInfo: - */ -static void -setInfo (posinfo_t* p0, posinfo_t* p1, double delta) -{ - double t = (p0->diameter*p1->minRadius) + (p1->diameter*p0->minRadius); - - t /= 2*delta*p0->minRadius*p1->minRadius; - - if (t < 1) - t = 1; - - if (t > p0->scale) - p0->scale = t; - if (t > p1->scale) - p1->scale = t; -} - -/* positionChildren: - */ -static void -positionChildren (Agraph_t* g, posinfo_t* pi, posstate * stp, int length, double min_dist) -{ - block_t *child; - double childAngle, childRadius, incidentAngle; - double mindistAngle, rotateAngle, midAngle = 0.0; - int midChild, cnt = 0; - double snRadius = stp->subtreeR; /* max subtree radius */ - double firstAngle = stp->firstAngle; - double lastAngle = stp->lastAngle; - double d, deltaX, deltaY; - - childRadius = pi->scale * pi->minRadius; - if (length == 1) { - childAngle = 0; - d = pi->diameter/(2*M_PI); - childRadius = MAX(childRadius, d); - d = 2*M_PI*childRadius - pi->diameter; - if (d > 0) - min_dist += d/pi->childCount; - } - else - childAngle = pi->theta - pi->diameter/(2 * childRadius); - - if ((childRadius + pi->maxRadius) > snRadius) - snRadius = childRadius + pi->maxRadius; - - mindistAngle = min_dist / childRadius; - - midChild = (pi->childCount + 1) / 2; - for (child = stp->cp; child; child = child->next) { - if (BLK_PARENT(child) != pi->n) - continue; - if (sizeNodelist(child->circle_list) <= 0) - continue; - - incidentAngle = child->radius / childRadius; - if (length == 1) { - if (childAngle != 0) { - if (pi->childCount == 2) - childAngle = M_PI; - else - childAngle += incidentAngle; - } - - if (firstAngle < 0) - firstAngle = childAngle; - - lastAngle = childAngle; - } else { - if (pi->childCount == 1) { - childAngle = pi->theta; - } else { - childAngle += incidentAngle + mindistAngle / 2; - } - } - - deltaX = childRadius * cos(childAngle); - deltaY = childRadius * sin(childAngle); - - /* first apply the delta to the immediate child and see if we need - * to rotate it for better edge link - * should return the theta value if there was a rotation else zero - */ - - rotateAngle = getRotation(child, g, deltaX, deltaY, childAngle); - applyDelta(child, deltaX, deltaY, rotateAngle); - - if (length == 1) { - childAngle += incidentAngle + mindistAngle; - } else { - childAngle += incidentAngle + mindistAngle / 2; - } - cnt++; - if (cnt == midChild) - midAngle = childAngle; - } - - if ((length > 1) && (pi->n == stp->neighbor)) { - PSI(pi->n) = midAngle; - } - - stp->subtreeR = snRadius; - stp->firstAngle = firstAngle; - stp->lastAngle = lastAngle; -} - -/* position: - * Assume childCount > 0 - * For each node in the block with children, getInfo is called, with the - * information stored in the parents array. - * This information is used by setInfo to compute the amount of space allocated - * to each parent and the radius at which to place its children. - * Finally, positionChildren is called to do the actual positioning. - * If length is 1, keeps track of minimum and maximum child angle. - */ -static double -position(Agraph_t * g, int childCount, int length, nodelist_t * path, - block_t * sn, double min_dist) -{ - nodelistitem_t *item; - Agnode_t *n; - posstate state; - int i, counter = 0; - double maxRadius = 0.0; - double angle; - double theta = 0.0; - posinfo_t* parents = N_NEW(childCount, posinfo_t); - int num_parents = 0; - posinfo_t* next; - posinfo_t* curr; - double delta; - - state.cp = sn->children.first; - state.subtreeR = sn->radius; - state.radius = sn->radius; - state.neighbor = CHILD(sn); - state.nodeAngle = 2 * M_PI / length; - state.firstAngle = -1; - state.lastAngle = -1; - - for (item = path->first; item; item = item->next) { - n = item->curr; - - theta = counter * state.nodeAngle; - counter++; - - if (ISPARENT(n)) { - parents[num_parents].n = n; - parents[num_parents].theta = theta; - maxRadius = getInfo (parents+num_parents, &state, min_dist); - num_parents++; - } - } - - if (num_parents == 1) - parents->scale = 1.0; - else if (num_parents == 2) { - curr = parents; - next = parents+1; - delta = next->theta - curr->theta; - if (delta > M_PI) - delta = 2*M_PI - delta; - setInfo (curr, next, delta); - } - else { - curr = parents; - for (i = 0; i < num_parents; i++) { - if (i+1 == num_parents) { - next = parents; - delta = next->theta - curr->theta + 2*M_PI; - } - else { - next = curr+1; - delta = next->theta - curr->theta; - } - setInfo (curr, next, delta); - curr++; - } - } - - for (i = 0; i < num_parents; i++) { - positionChildren (g, parents + i, &state, length, min_dist); - } - - free (parents); - - /* If block has only 1 child, to save space, we coalesce it with the - * child. Instead of having final radius sn->radius + max child radius, - * we have half that. However, the origin of the block is no longer in - * the center of the block, so we cannot do a simple rotation to get - * the neighbor node next to the parent block in getRotate. - */ - if (childCount == 1) { - applyDelta(sn, -(maxRadius + min_dist / 2), 0, 0); - sn->radius += min_dist / 2 + maxRadius; - SET_COALESCED(sn); - } else - sn->radius = state.subtreeR; - - angle = (state.firstAngle + state.lastAngle) / 2.0 - M_PI; - return angle; -} - -/* doBlock: - * Set positions of block sn and its child blocks. - */ -static void doBlock(Agraph_t * g, block_t * sn, double min_dist) -{ - block_t *child; - nodelist_t *longest_path; - int childCount, length; - double centerAngle = M_PI; - - /* layout child subtrees */ - childCount = 0; - for (child = sn->children.first; child; child = child->next) { - doBlock(g, child, min_dist); - childCount++; - } - - /* layout this block */ - longest_path = layout_block(g, sn, min_dist); - sn->circle_list = longest_path; - length = sizeNodelist(longest_path); /* path contains everything in block */ - - /* attach children */ - if (childCount > 0) - centerAngle = - position(g, childCount, length, longest_path, sn, min_dist); - - if ((length == 1) && (BLK_PARENT(sn))) { - sn->parent_pos = centerAngle; - if (sn->parent_pos < 0) - sn->parent_pos += 2 * M_PI; - } -} - -void circPos(Agraph_t * g, block_t * sn, circ_state * state) -{ - doBlock(g, sn, state->min_dist); -} diff --git a/internal/ccall/circogen/circpos.h b/internal/ccall/circogen/circpos.h deleted file mode 100644 index 558c97a..0000000 --- a/internal/ccall/circogen/circpos.h +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CIRCPOS_H -#define CIRCPOS_H - -#include -#include - - extern void circPos(Agraph_t * g, block_t * sn, circ_state *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/circular.c b/internal/ccall/circogen/circular.c deleted file mode 100644 index 1357032..0000000 --- a/internal/ccall/circogen/circular.c +++ /dev/null @@ -1,186 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "circular.h" -#include "blocktree.h" -#include "circpos.h" -#include - -#define MINDIST 1.0 - -/* initGraphAttrs: - * Set attributes based on original root graph. - * This is obtained by taking a node of g, finding its node - * in the original graph, and finding that node's graph. - */ -static void initGraphAttrs(Agraph_t * g, circ_state * state) -{ - static Agraph_t *rootg; - static attrsym_t *N_artpos; - static attrsym_t *N_root; - static attrsym_t *G_mindist; - static char *rootname; - Agraph_t *rg; - node_t *n = agfstnode(g); - - rg = agraphof(ORIGN(n)); - if (rg != rootg) { /* new root graph */ - state->blockCount = 0; - rootg = rg; - G_mindist = agattr(rootg,AGRAPH, "mindist", NULL); - N_artpos = agattr(rootg,AGNODE, "articulation_pos", NULL); - N_root = agattr(rootg,AGNODE, "root", NULL); - } - rootname = agget(rootg, "root"); - initBlocklist(&state->bl); - state->orderCount = 1; - state->min_dist = late_double(rootg, G_mindist, MINDIST, 0.0); - state->N_artpos = N_artpos; - state->N_root = N_root; - state->rootname = rootname; -} - -/* cleanup: - * We need to cleanup objects created in initGraphAttrs - * and all blocks. All graph objects are components of the - * initial derived graph and will be freed when it is closed. - */ -static void cleanup(block_t * root, circ_state * sp) -{ - freeBlocktree(root); -} - -static block_t* -createOneBlock(Agraph_t * g, circ_state * state) -{ - Agraph_t *subg; - char name[SMALLBUF]; - block_t *bp; - Agnode_t* n; - - sprintf(name, "_block_%d", state->blockCount++); - subg = agsubg(g, name, 1); - bp = mkBlock(subg); - - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - agsubnode(bp->sub_graph, n, 1); - BLOCK(n) = bp; - } - - return bp; -} - -/* circularLayout: - * Do circular layout of g. - * Assume g is strict. - * g is a "connected" component of the derived graph of the - * original graph. - * We make state static so that it keeps a record of block numbers used - * in a graph; it gets reset when a new root graph is used. - */ -void circularLayout(Agraph_t * g, Agraph_t* realg) -{ - block_t *root; - static circ_state state; - - if (agnnodes(g) == 1) { - Agnode_t *n = agfstnode(g); - ND_pos(n)[0] = 0; - ND_pos(n)[1] = 0; - return; - } - - initGraphAttrs(g, &state); - - if (mapbool(agget(realg, "oneblock"))) - root = createOneBlock(g, &state); - else - root = createBlocktree(g, &state); - circPos(g, root, &state); - - cleanup(root, &state); -} - -#ifdef DEBUG -void prGraph(Agraph_t * g) -{ - Agnode_t *n; - Agedge_t *e; - - fprintf(stderr, "%s\n", agnameof(g)); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - fprintf(stderr, "%s (%x)\n", agnameof(n), (unsigned int) n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - fprintf(stderr, "%s", agnameof(n)); - fprintf(stderr, " -- %s (%x)\n", agnameof(aghead(e)), - (unsigned int) e); - } - } -} - -cdata *cvt(Agnode_t * n) -{ - return DATA(n); -} - -void prData(Agnode_t * n, int pass) -{ - char *pname; - char *bname; - char *tname; - char *name1; - char *name2; - int dist1, dist2; - - if (PARENT(n)) - pname = agnameof(PARENT(n)); - else - pname = ""; - if (BLOCK(n)) - bname = agnameof(BLOCK(n)->sub_graph); - else { - pname = ""; - bname = ""; - } - fprintf(stderr, "%s: %x %s %s ", agnameof(n), FLAGS(n), pname, bname); - switch (pass) { - case 0: - fprintf(stderr, "%d %d\n", VAL(n), LOWVAL(n)); - break; - case 1: - if (TPARENT(n)) - tname = agnameof(TPARENT(n)); - else - tname = ""; - dist1 = DISTONE(n); - if (dist1 > 0) - name1 = agnameof(LEAFONE(n)); - else - name1 = ""; - dist2 = DISTTWO(n); - if (dist2 > 0) - name2 = agnameof(LEAFTWO(n)); - else - name2 = ""; - fprintf(stderr, "%s %s %d %s %d\n", tname, name1, dist1, name2, - dist2); - break; - default: - fprintf(stderr, "%d\n", POSITION(n)); - break; - } -} -#endif - -#undef MINDIST diff --git a/internal/ccall/circogen/circular.h b/internal/ccall/circogen/circular.h deleted file mode 100644 index f5c0242..0000000 --- a/internal/ccall/circogen/circular.h +++ /dev/null @@ -1,142 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CIRCULAR_H -#define CIRCULAR_H - -#include "render.h" -#include "block.h" - -typedef struct { - blocklist_t bl; - int orderCount; - int blockCount; - attrsym_t *N_artpos; - attrsym_t *N_root; - char *rootname; - double min_dist; -} circ_state; - -typedef struct { - Agnode_t *dnode; -} ndata; - -/* Extra node data used for layout: - * Pass O: build derived graph - * Pass 1: construct blocks - * Pass 2: construct block tree - * Pass 3: layout block - * a: construct block skeleton - * b: construct skeleton spanning tree - * c: construct circular list of nodes - * Pass 4: connect blocks - */ -typedef struct { - union { /* Pointer to node/cluster in original graph */ - Agraph_t *g; - Agnode_t *np; - } orig; - int flags; - node_t *parent; /* parent in block-cutpoint traversal (1,2,4) */ - block_t *block; /* Block containing node (1,2,3,4) */ - union { - struct { /* Pass 1 */ - node_t *next; /* used for stack */ - int val; - int low_val; - } bc; - node_t *clone; /* Cloned node (3a) */ - struct { /* Spanning tree and longest path (3b) */ - node_t *tparent; /* Parent in tree */ - node_t *first; /* Leaf on longest path from node */ - node_t *second; /* Leaf on 2nd longest path from node */ - int fdist; /* Length of longest path from node */ - int sdist; /* Length of 2nd longest path from node */ - } t; - struct { - int pos; /* Index of node in block circle (3c,4) */ - double psi; /* Offset angle of children (4) */ - } f; - } u; -} cdata; - -typedef struct { - int order; - Agedge_t* next; -} edata; - -#define NDATA(n) ((ndata*)(ND_alg(n))) -#define DNODE(n) (NDATA(n)->dnode) - -#define EDGEDATA(e) ((edata*)(ED_alg(e))) -#define ENEXT(e) (EDGEDATA(e)->next) -#define EDGEORDER(e) (EDGEDATA(e)->order) - -#define DATA(n) ((cdata*)(ND_alg(n))) -#define ORIGG(n) (DATA(n)->orig.g) -#define ORIGN(n) (DATA(n)->orig.np) -#define FLAGS(n) (DATA(n)->flags) -#define PARENT(n) (DATA(n)->parent) -#define BLOCK(n) (DATA(n)->block) -#define NEXT(n) (DATA(n)->u.bc.next) -#define VAL(n) (DATA(n)->u.bc.val) -#define LOWVAL(n) (DATA(n)->u.bc.low_val) -#define CLONE(n) (DATA(n)->u.clone) -#define TPARENT(n) (DATA(n)->u.t.tparent) -#define LEAFONE(n) (DATA(n)->u.t.first) -#define LEAFTWO(n) (DATA(n)->u.t.second) -#define DISTONE(n) (DATA(n)->u.t.fdist) -#define DISTTWO(n) (DATA(n)->u.t.sdist) -#define POSITION(n) (DATA(n)->u.f.pos) -#define PSI(n) (DATA(n)->u.f.psi) - -#define VISITED_F (1 << 0) -#define ONSTACK_F (1 << 2) -#define PARENT_F (1 << 3) -#define PATH_F (1 << 4) -#define NEIGHBOR_F (1 << 5) - -#define VISITED(n) (FLAGS(n)&VISITED_F) -#define ONSTACK(n) (FLAGS(n)&ONSTACK_F) -#define ISPARENT(n) (FLAGS(n)&PARENT_F) -#define ONPATH(n) (FLAGS(n)&PATH_F) -#define NEIGHBOR(n) (FLAGS(n)&NEIGHBOR_F) - -#define SET_VISITED(n) (FLAGS(n) |= VISITED_F) -#define SET_ONSTACK(n) (FLAGS(n) |= ONSTACK_F) -#define SET_PARENT(n) (FLAGS(n) |= PARENT_F) -#define SET_ONPATH(n) (FLAGS(n) |= PATH_F) -#define SET_NEIGHBOR(n) (FLAGS(n) |= NEIGHBOR_F) - -#define UNSET_VISITED(n) (FLAGS(n) &= ~VISITED_F) -#define UNSET_ONSTACK(n) (FLAGS(n) &= ~ONSTACK_F) -#define UNSET_NEIGHBOR(n) (FLAGS(n) &= ~NEIGHBOR_F) - -#define DEGREE(n) (ND_order(n)) - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef DEBUG - extern void prData(Agnode_t * n, int pass); -#endif - - extern void circularLayout(Agraph_t * sg, Agraph_t* rg); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/circogen/circularinit.c b/internal/ccall/circogen/circularinit.c deleted file mode 100644 index d5d8908..0000000 --- a/internal/ccall/circogen/circularinit.c +++ /dev/null @@ -1,279 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Circular layout. Biconnected components are put on circles. - * block-cutnode tree is done recursively, with children placed - * about parent block. - * Based on: - * Six and Tollis, "A Framework for Circular Drawings of - * Networks", GD '99, LNCS 1731, pp. 107-116; - * Six and Tollis, "Circular Drawings of Biconnected Graphs", - * Proc. ALENEX '99, pp 57-73. - * Kaufmann and Wiese, "Maintaining the Mental Map for Circular - * Drawings", GD '02, LNCS 2528, pp. 12-22. - */ - -#include "circular.h" -#include "adjust.h" -#include "pack.h" -#include "neatoprocs.h" -#include - -static void circular_init_edge(edge_t * e) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - common_init_edge(e); - - ED_factor(e) = late_double(e, E_weight, 1.0, 0.0); -} - - -static void circular_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; - int i = 0; - ndata* alg = N_NEW(agnnodes(g), ndata); - - GD_neato_nlist(g) = N_NEW(agnnodes(g) + 1, node_t *); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - neato_init_node(n); - ND_alg(n) = alg + i; - GD_neato_nlist(g)[i++] = n; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - circular_init_edge(e); - } - } -} - - -void circo_init_graph(graph_t * g) -{ - setEdgeType (g, ET_LINE); - /* GD_ndim(g) = late_int(g,agfindattr(g,"dim"),2,2); */ - Ndim = GD_ndim(g) = 2; /* The algorithm only makes sense in 2D */ - circular_init_node_edge(g); -} - -/* makeDerivedNode: - * Make a node in the derived graph, with the given name. - * orig points to what it represents, either a real node or - * a cluster. Copy size info from original node; needed for - * adjustNodes and packSubgraphs. - */ -static node_t *makeDerivedNode(graph_t * dg, char *name, int isNode, - void *orig) -{ - node_t *n = agnode(dg, name,1); - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - ND_alg(n) = (void *) NEW(cdata); - if (isNode) { - ND_pos(n) = N_NEW(Ndim, double); - ND_lw(n) = ND_lw((node_t *) orig); - ND_rw(n) = ND_rw((node_t *) orig); - ND_ht(n) = ND_ht((node_t *) orig); - ORIGN(n) = (node_t *) orig; - } else - ORIGG(n) = (graph_t *) orig; - return n; -} - -/* circomps: - * Construct a strict, undirected graph with no loops from g. - * Construct the connected components with the provision that all - * nodes in a block subgraph are considered connected. - * Return array of components with number of components in cnt. - * Each component has its blocks as subgraphs. - * FIX: Check that blocks are disjoint. - */ -Agraph_t **circomps(Agraph_t * g, int *cnt) -{ - int c_cnt; - Agraph_t **ccs; - Agraph_t *dg; - Agnode_t *n, *v, *dt, *dh; - Agedge_t *e; - Agraph_t *sg; - int i; - Agedge_t *ep; - Agnode_t *p; - - dg = agopen("derived", Agstrictundirected,NIL(Agdisc_t *)); - agbindrec (dg, "info", sizeof(Agraphinfo_t), TRUE); - GD_alg(g) = dg; /* store derived graph for closing later */ - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (DNODE(v)) - continue; - n = makeDerivedNode(dg, agnameof(v), 1, v); - DNODE(v) = n; - } - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - for (e = agfstout(g, v); e; e = agnxtout(g, e)) { - dt = DNODE(agtail(e)); - dh = DNODE(aghead(e)); - if (dt != dh) { - agbindrec(agedge(dg, dt, dh, NULL, 1), "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - } - } - } - - ccs = ccomps(dg, &c_cnt, 0); - - /* replace block nodes with block contents */ - for (i = 0; i < c_cnt; i++) { - sg = ccs[i]; - - /* add edges: since sg is a union of components, all edges - * of any node should be added, except loops. - */ - for (n = agfstnode(sg); n; n = agnxtnode(sg, n)) { - p = ORIGN(n); - for (e = agfstout(g, p); e; e = agnxtout(g, e)) { - /* n = DNODE(agtail(e)); by construction since agtail(e) == p */ - dh = DNODE(aghead(e)); - if (n != dh) { - ep = agedge(dg, n, dh, NULL, 1); - agbindrec(ep, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - agsubedge(sg,ep,1); - } - } - } - } - - /* Finally, add edge data to edges */ - for (n = agfstnode(dg); n; n = agnxtnode(dg, n)) { - for (e = agfstout(dg, n); e; e = agnxtout(dg, e)) { - ED_alg(e) = NEW(edata); - } - } - - *cnt = c_cnt; - return ccs; -} - -/* closeDerivedGraph: - */ -static void closeDerivedGraph(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - free(ED_alg(e)); - } - free(ND_alg(n)); - free(ND_pos(n)); - } - agclose(g); -} - -/* copyPosns: - * Copy position of nodes in given subgraph of derived graph - * to corresponding node in original graph. - * FIX: consider assigning from n directly to ORIG(n). - */ -static void copyPosns(graph_t * g) -{ - node_t *n; - node_t *v; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - v = ORIGN(n); - ND_pos(v)[0] = ND_pos(n)[0]; - ND_pos(v)[1] = ND_pos(n)[1]; - } -} - -/* circoLayout: - */ -void circoLayout(Agraph_t * g) -{ - Agraph_t **ccs; - Agraph_t *sg; - int ncc; - int i; - - if (agnnodes(g)) { - ccs = circomps(g, &ncc); - - if (ncc == 1) { - circularLayout(ccs[0], g); - copyPosns(ccs[0]); - adjustNodes(g); - } else { - Agraph_t *dg = ccs[0]->root; - pack_info pinfo; - getPackInfo(g, l_node, CL_OFFSET, &pinfo); - - for (i = 0; i < ncc; i++) { - sg = ccs[i]; - circularLayout(sg, g); - adjustNodes(sg); - } - /* FIX: splines have not been calculated for dg - * To use, either do splines in dg and copy to g, or - * construct components of g from ccs and use that in packing. - */ - packSubgraphs(ncc, ccs, dg, &pinfo); - for (i = 0; i < ncc; i++) - copyPosns(ccs[i]); - } - free(ccs); - } -} - -/* circo_layout: - */ -void circo_layout(Agraph_t * g) -{ - if (agnnodes(g) == 0) return; - circo_init_graph(g); - circoLayout(g); - /* Release ND_alg as we need to reuse it during edge routing */ - free(ND_alg(agfstnode(g))); - spline_edges(g); - dotneato_postprocess(g); -} - -/* circo_cleanup: - * ND_alg is freed in circo_layout - */ -void circo_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - n = agfstnode(g); - if (n == NULL) - return; /* g is empty */ - - closeDerivedGraph((graph_t*)GD_alg(g)); /* delete derived graph */ - - /* free (ND_alg(n)); */ - for (; n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - free(GD_neato_nlist(g)); - if (g != agroot(g)) - agclean (g,AGRAPH,"Agraphinfo_t"); -} diff --git a/internal/ccall/circogen/deglist.c b/internal/ccall/circogen/deglist.c deleted file mode 100644 index 48f7e25..0000000 --- a/internal/ccall/circogen/deglist.c +++ /dev/null @@ -1,162 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include -#include - -typedef struct { - Dtlink_t link; - int deg; - Agnode_t *np; /* linked list of nodes of same degree */ -} degitem; - -static degitem *_mkItem(Dt_t * d, degitem * obj, Dtdisc_t * disc) -{ - degitem *ap = GNEW(degitem); - - ap->np = NULL; - ap->deg = obj->deg; - return ap; -} - -static void _freeItem(Dt_t * d, degitem * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static int cmpDegree(Dt_t * d, int *key1, int *key2, Dtdisc_t * disc) -{ - if (*key1 < *key2) - return -1; - else if (*key1 > *key2) - return 1; - else - return 0; -} - -static Dtdisc_t _nodeDisc = { - offsetof(degitem, deg), /* key */ - sizeof(int), /* size */ - offsetof(degitem, link), /* link */ - (Dtmake_f) _mkItem, - (Dtfree_f) _freeItem, - (Dtcompar_f) cmpDegree, - (Dthash_f) 0, - (Dtmemory_f) 0, - (Dtevent_f) 0 -}; - -/* mkDeglist: - * Create an empty list of nodes. - */ -deglist_t *mkDeglist(void) -{ - deglist_t *s = dtopen(&_nodeDisc, Dtoset); - return s; -} - -/* freeDeglist: - * Delete the node list. - * Nodes are not deleted. - */ -void freeDeglist(deglist_t * s) -{ - dtclose(s); -} - -/* insertDeglist: - * Add a node to the node list. - * Nodes are kept sorted by DEGREE, smallest degrees first. - */ -void insertDeglist(deglist_t * ns, Agnode_t * n) -{ - degitem key; - degitem *kp; - - key.deg = DEGREE(n); - kp = dtinsert(ns, &key); - ND_next(n) = kp->np; - kp->np = n; -} - -/* removeDeglist: - * Remove n from list, if it is in the list. - */ -void removeDeglist(deglist_t * list, Agnode_t * n) -{ - degitem key; - degitem *ip; - Agnode_t *np; - Agnode_t *prev; - - key.deg = DEGREE(n); - ip = (degitem *) dtsearch(list, &key); - assert(ip); - if (ip->np == n) { - ip->np = ND_next(n); - if (ip->np == NULL) - dtdelete(list, ip); - } else { - prev = ip->np; - np = ND_next(prev); - while (np && (np != n)) { - prev = np; - np = ND_next(np); - } - if (np) - ND_next(prev) = ND_next(np); - } -} - -/* firstDeglist: - * Return the first node in the list (smallest degree) - * Remove from list. - * If the list is empty, return NULL - */ -Agnode_t *firstDeglist(deglist_t * list) -{ - degitem *ip; - Agnode_t *np; - - ip = (degitem *) dtfirst(list); - if (ip) { - np = ip->np; - ip->np = ND_next(np); - if (ip->np == NULL) - dtdelete(list, ip); - return np; - } else - return 0; -} - -#ifdef DEBUG -void printDeglist(deglist_t * dl) -{ - degitem *ip; - node_t *np; - fprintf(stderr, " dl:\n"); - for (ip = (degitem *) dtfirst(dl); ip; ip = (degitem *) dtnext(dl, ip)) { - np = ip->np; - if (np) - fprintf(stderr, " (%d)", ip->deg); - for (; np; np = ND_next(np)) { - fprintf(stderr, " %s", agnameof(np)); - } - fprintf(stderr, "\n"); - } - -} -#endif diff --git a/internal/ccall/circogen/deglist.h b/internal/ccall/circogen/deglist.h deleted file mode 100644 index 5ad75de..0000000 --- a/internal/ccall/circogen/deglist.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef DEGLIST_H -#define DEGLIST_H - -/* List of nodes sorted by increasing degree */ - -#include - - typedef Dt_t deglist_t; - - extern deglist_t *mkDeglist(void); - extern void freeDeglist(deglist_t * list); - extern void insertDeglist(deglist_t * list, Agnode_t * n); - extern void removeDeglist(deglist_t * list, Agnode_t * n); - extern Agnode_t *firstDeglist(deglist_t *); - -#ifdef DEBUG - extern void printDeglist(deglist_t *); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/dummy.go b/internal/ccall/circogen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/circogen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/circogen/edgelist.c b/internal/ccall/circogen/edgelist.c deleted file mode 100644 index 4bcf23f..0000000 --- a/internal/ccall/circogen/edgelist.c +++ /dev/null @@ -1,100 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "edgelist.h" -#include - -static edgelistitem *emkItem(Dt_t * d, edgelistitem * obj, Dtdisc_t * disc) -{ - edgelistitem *ap = GNEW(edgelistitem); - - ap->edge = obj->edge; - return ap; -} - -static void efreeItem(Dt_t * d, edgelistitem * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static int -ecmpItem(Dt_t * d, Agedge_t ** key1, Agedge_t ** key2, Dtdisc_t * disc) -{ - if (*key1 > *key2) - return 1; - else if (*key1 < *key2) - return -1; - else - return 0; -} - -static Dtdisc_t ELDisc = { - offsetof(edgelistitem, edge), /* key */ - sizeof(Agedge_t *), /* size */ - offsetof(edgelistitem, link), /* link */ - (Dtmake_f) emkItem, - (Dtfree_f) efreeItem, - (Dtcompar_f) ecmpItem, - (Dthash_f) 0, - (Dtmemory_f) 0, - (Dtevent_f) 0 -}; - -edgelist *init_edgelist() -{ - edgelist *list = dtopen(&ELDisc, Dtoset); - return list; -} - -void free_edgelist(edgelist * list) -{ - dtclose(list); -} - -void add_edge(edgelist * list, Agedge_t * e) -{ - edgelistitem temp; - - temp.edge = e; - dtinsert(list, &temp); -} - -void remove_edge(edgelist * list, Agedge_t * e) -{ - edgelistitem temp; - - temp.edge = e; - dtdelete(list, &temp); -} - -#ifdef DEBUG -void print_edge(edgelist * list) -{ - edgelistitem *temp; - Agedge_t *ep; - - for (temp = (edgelistitem *) dtflatten(list); temp; - temp = (edgelistitem *) dtlink(list, (Dtlink_t *) temp)) { - ep = temp->edge; - fprintf(stderr, "%s--", agnameof(agtail(ep))); - fprintf(stderr, "%s \n", agnameof(aghead(ep))); - } - fputs("\n", stderr); -} -#endif - -int size_edgelist(edgelist * list) -{ - return dtsize(list); -} diff --git a/internal/ccall/circogen/edgelist.h b/internal/ccall/circogen/edgelist.h deleted file mode 100644 index ce48325..0000000 --- a/internal/ccall/circogen/edgelist.h +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EDGELIST_H -#define EDGELIST_H - -#include - - typedef struct edgelistitem { - Dtlink_t link; - Agedge_t *edge; - } edgelistitem; - - typedef Dt_t edgelist; - - extern edgelist *init_edgelist(void); - extern void add_edge(edgelist * list, Agedge_t * e); - extern void remove_edge(edgelist * list, Agedge_t * e); - extern void free_edgelist(edgelist * list); - extern int size_edgelist(edgelist * list); -#ifdef DEBUG - extern void print_edge(edgelist *); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/nodelist.c b/internal/ccall/circogen/nodelist.c deleted file mode 100644 index 2ef2bff..0000000 --- a/internal/ccall/circogen/nodelist.c +++ /dev/null @@ -1,368 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "nodelist.h" -#include "circular.h" -#include - -static nodelistitem_t *init_nodelistitem(Agnode_t * n) -{ - nodelistitem_t *p = NEW(nodelistitem_t); - p->curr = n; - return p; -} - -nodelist_t *mkNodelist() -{ - nodelist_t *list = NEW(nodelist_t); - return list; -} - -void freeNodelist(nodelist_t * list) -{ - nodelistitem_t *temp; - nodelistitem_t *next; - - if (!list) - return; - - for (temp = list->first; temp; temp = next) { - next = temp->next; - free(temp); - } - free(list); -} - -/* appendNodelist: - * Add node after one. - * If one == NULL, add n to end. - */ -void appendNodelist(nodelist_t * list, nodelistitem_t * one, Agnode_t * n) -{ - nodelistitem_t *np = init_nodelistitem(n); - - list->sz++; - if (!one) - one = list->last; - if (one == list->last) { - if (one) - one->next = np; - else - list->first = np; - np->prev = one; - np->next = NULL; - list->last = np; - } else { - nodelistitem_t *temp = one->next; - one->next = np; - np->prev = one; - temp->prev = np; - np->next = temp; - } -} - -#ifdef OLD -/* addNodelist: - * Adds node to end of list if not already present. - */ -void addNodelist(nodelist_t * list, Agnode_t * n) -{ - nodelistitem_t *temp; - nodelistitem_t *item = 0; - - for (temp = list->first; temp; temp = temp->next) { - if (n == temp->curr) { - item = temp; - break; - } - } - - if (item) - return; - - item = init_nodelistitem(n); - if (list->last) { - list->last->next = item; - item->prev = list->last; - } else - list->first = item; - list->last = item; - list->sz++; -} - -void removeNodelist(nodelist_t * list, Agnode_t * n) -{ - nodelistitem_t *temp; - - for (temp = list->first; temp; temp = temp->next) { - if (n == temp->curr) { - list->sz--; - if (temp->prev == NULL) { /* the first node */ - list->first = temp->next; - } else { - temp->prev->next = temp->next; - } - if (temp == list->last) { /* the last node */ - list->last = temp->prev; - } else { - temp->next->prev = temp->prev; - } - free(temp); - return; - } - } -} -#endif - -/* reverseNodelist; - * Destructively reverse a list. - */ -nodelist_t *reverseNodelist(nodelist_t * list) -{ - nodelistitem_t *temp; - nodelistitem_t *p; - - for (p = list->first; p; p = p->prev) { - temp = p->next; - p->next = p->prev; - p->prev = temp; - } - temp = list->last; - list->last = list->first; - list->first = temp; - return list; -} - -/* realignNodelist: - * Make np new front of list, with current last hooked to - * current first. I.e., make list circular, then cut between - * np and np->prev. - */ -void realignNodelist(nodelist_t * list, nodelistitem_t * np) -{ - nodelistitem_t *temp; - nodelistitem_t *prev; - - if (np == list->first) - return; - - temp = list->first; - prev = np->prev; - - list->first = np; - np->prev = NULL; - list->last->next = temp; - temp->prev = list->last; - list->last = prev; - prev->next = NULL; -} - -/* cloneNodelist: - * Create a copy of list. - */ -nodelist_t *cloneNodelist(nodelist_t * list) -{ - nodelist_t *newlist = mkNodelist(); - nodelistitem_t *temp; - nodelistitem_t *prev = 0; - - for (temp = list->first; temp; temp = temp->next) { - appendNodelist(newlist, prev, temp->curr); - prev = newlist->last; - } - return newlist; -} - -/* insertNodelist: - * Remove cn. Then, insert cn before neighbor if pos == 0 and - * after neighbor otherwise. - */ -void -insertNodelist(nodelist_t * list, Agnode_t * cn, Agnode_t * neighbor, - int pos) -{ - nodelistitem_t *temp; - nodelistitem_t *prev; - nodelistitem_t *next; - nodelistitem_t *actual = 0; - - for (temp = list->first; temp; temp = temp->next) { - if (temp->curr == cn) { - actual = temp; - prev = actual->prev; - next = actual->next; - if (prev) /* not first */ - prev->next = next; - else - list->first = next; - - if (next) /* not last */ - next->prev = prev; - else - list->last = prev; - break; - } - } - assert(actual); - - prev = NULL; - for (temp = list->first; temp; temp = temp->next) { - if (temp->curr == neighbor) { - if (pos == 0) { - if (temp == list->first) { - list->first = actual; - actual->next = temp; - actual->prev = NULL; - temp->prev = actual; - return; - } - prev->next = actual; - actual->prev = prev; - actual->next = temp; - temp->prev = actual; - return; - } else { - if (temp == list->last) { - list->last = actual; - actual->next = NULL; - actual->prev = temp; - temp->next = actual; - return; - } - actual->prev = temp; - actual->next = temp->next; - temp->next->prev = actual; - temp->next = actual; - return; - } - break; - } - prev = temp; - } -} - -int sizeNodelist(nodelist_t * list) -{ - return list->sz; -#ifdef OLD - int i = 0; - nodelistitem_t *temp = NULL; - - temp = list->first; - while (temp) { - i++; - temp = temp->next; - } - return i; -#endif -} - -#ifdef OLD -/* node_exists: - * Return true if node is in list. - */ -int node_exists(nodelist_t * list, Agnode_t * n) -{ - nodelistitem_t *temp; - - for (temp = list->first; temp; temp = temp->next) { - if (temp->curr == n) { - return 1; - } - } - return 0; -} - -/* nodename_exists: - * Return true if node with given name is in list. - * Assumes n == np->name for some node np; - */ -int nodename_exists(nodelist_t * list, char *n) -{ - nodelistitem_t *temp; - - temp = list->first; - - for (temp = list->first; temp; temp = temp->next) { - if (temp->curr->name == n) { - return 1; - } - } - return 0; -} -#endif - -/* node_position: - * Returns index of node n in list, starting at 0. - * Returns -1 if not in list. - */ -int node_position(nodelist_t * list, Agnode_t * n) -{ - return POSITION(n); -#ifdef OLD - nodelistitem_t *temp; - int i = 0; - char *name = agnameof(n); - - for (temp = list->first; temp; temp = temp->next) { - if (streq(agnameof(temp->curr),name)) { - return i; - } - i++; - } - return -1; -#endif -} - -/* concatNodelist: - * attach l2 to l1. - */ -static void concatNodelist(nodelist_t * l1, nodelist_t * l2) -{ - if (l2->first) { - if (l2->first) { - l1->last->next = l2->first; - l2->first->prev = l1->last; - l1->last = l2->last; - l1->sz += l2->sz; - } else { - *l1 = *l2; - } - } -} - -/* reverse_append; - * Create l1 @ (rev l2) - * Destroys and frees l2. - */ -void reverseAppend(nodelist_t * l1, nodelist_t * l2) -{ - l2 = reverseNodelist(l2); - concatNodelist(l1, l2); - free(l2); -} - -#ifdef DEBUG -void printNodelist(nodelist_t * list) -{ - nodelistitem_t *temp = NULL; - - temp = list->first; - while (temp != NULL) { - fprintf(stderr, "%s ", agnameof(temp->curr)); - temp = temp->next; - } - fputs("\n", stderr); -} -#endif diff --git a/internal/ccall/circogen/nodelist.h b/internal/ccall/circogen/nodelist.h deleted file mode 100644 index a306d94..0000000 --- a/internal/ccall/circogen/nodelist.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef NODELIST_H -#define NODELIST_H - -#include - - typedef struct nodelistitem nodelistitem_t; - - struct nodelistitem { - node_t *curr; - nodelistitem_t *next; - nodelistitem_t *prev; - }; - - typedef struct { - nodelistitem_t *first; - nodelistitem_t *last; - int sz; - } nodelist_t; - - extern nodelist_t *mkNodelist(void); - extern void freeNodelist(nodelist_t *); - extern int sizeNodelist(nodelist_t * list); - - extern void appendNodelist(nodelist_t *, nodelistitem_t *, - Agnode_t * n); -/* extern void removeNodelist(nodelist_t* list, Agnode_t* n); */ -/* extern int node_exists(nodelist_t* list, Agnode_t* n); */ -/* extern int nodename_exists(nodelist_t* list, char* n); */ - extern int node_position(nodelist_t * list, Agnode_t * n); - - extern void realignNodelist(nodelist_t * list, nodelistitem_t * n); - extern void insertNodelist(nodelist_t *, Agnode_t *, Agnode_t *, int); - - extern void reverseAppend(nodelist_t *, nodelist_t *); - extern nodelist_t *reverseNodelist(nodelist_t * list); - extern nodelist_t *cloneNodelist(nodelist_t * list); - -#ifdef DEBUG - extern void printNodelist(nodelist_t * list); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/circogen/nodeset.c b/internal/ccall/circogen/nodeset.c deleted file mode 100644 index c010d71..0000000 --- a/internal/ccall/circogen/nodeset.c +++ /dev/null @@ -1,120 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include - - -static nsitem_t *mkItem(Dt_t * d, nsitem_t * obj, Dtdisc_t * disc) -{ - nsitem_t *ap = GNEW(nsitem_t); - - ap->np = obj->np; - return ap; -} - -static void freeItem(Dt_t * d, nsitem_t * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static int -cmpItem(Dt_t * d, Agnode_t ** key1, Agnode_t ** key2, Dtdisc_t * disc) -{ - if (*key1 > *key2) - return 1; - else if (*key1 < *key2) - return -1; - else - return 0; -} - -static Dtdisc_t nodeDisc = { - offsetof(nsitem_t, np), /* key */ - sizeof(Agnode_t *), /* size */ - offsetof(nsitem_t, link), /* link */ - (Dtmake_f) mkItem, - (Dtfree_f) freeItem, - (Dtcompar_f) cmpItem, - (Dthash_f) 0, - (Dtmemory_f) 0, - (Dtevent_f) 0 -}; - -/* mkNodeset: - * Creates an empty node set. - */ -nodeset_t *mkNodeset() -{ - nodeset_t *s = dtopen(&nodeDisc, Dtoset); - return s; -} - -/* freeNodeset: - * Deletes a node set, deleting all items as well. - * It does not delete the nodes. - */ -void freeNodeset(nodeset_t * s) -{ - if (s != NULL) - dtclose(s); -} - -/* clearNodeset: - * Remove all items from a node set. - */ -void clearNodeset(nodeset_t * s) -{ - dtclear(s); -} - -/* insertNodeset: - * Add a node into the nodeset. - */ -void insertNodeset(nodeset_t * ns, Agnode_t * n) -{ - nsitem_t key; - - key.np = n; - dtinsert(ns, &key); -} - -void removeNodeset(nodeset_t * ns, Agnode_t * n) -{ - nsitem_t key; - - key.np = n; - dtdelete(ns, &key); -} - -/* sizeNodeset: - * Report on the nodeset size. - */ -int sizeNodeset(nodeset_t * ns) -{ - return dtsize(ns); -} - -/* As the node set is a Dt_t, traversal is done using standard - * functions from libcdt. - */ - -void printNodeset(nodeset_t * ns) -{ - nsitem_t *ip; - for (ip = (nsitem_t *) dtfirst(ns); ip; - ip = (nsitem_t *) dtnext(ns, ip)) { - fprintf(stderr, "%s", agnameof(ip->np)); - } - fputs("\n", stderr); -} diff --git a/internal/ccall/circogen/nodeset.h b/internal/ccall/circogen/nodeset.h deleted file mode 100644 index 9bbf66d..0000000 --- a/internal/ccall/circogen/nodeset.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef NODESET_H -#define NODESET_H - -#include - - typedef struct { - Dtlink_t link; - Agnode_t *np; - } nsitem_t; - - typedef Dt_t nodeset_t; - - extern nodeset_t *mkNodeset(void); - extern void freeNodeset(nodeset_t *); - extern void clearNodeset(nodeset_t *); - extern void insertNodeset(nodeset_t * ns, Agnode_t * n); - extern void removeNodeset(nodeset_t *, Agnode_t * n); - extern int sizeNodeset(nodeset_t * ns); - -#ifdef DEBUG - extern void printNodeset(nodeset_t *); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/common.c b/internal/ccall/common.c deleted file mode 100644 index 26f6174..0000000 --- a/internal/ccall/common.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "common/args.c" -#include "common/arrows.c" -#include "common/colxlate.c" -#include "common/ellipse.c" -#include "common/emit.c" -#include "common/geom.c" -#include "common/globals.c" -#include "common/htmllex.c" -#include "common/htmltable.c" -#include "common/input.c" -#include "common/intset.c" -#include "common/labels.c" -#include "common/memory.c" -#include "common/ns.c" -#include "common/output.c" -#include "common/pointset.c" -#include "common/postproc.c" -#include "common/psusershape.c" -#include "common/routespl.c" -#include "common/shapes.c" -#include "common/splines.c" -#include "common/taper.c" -#include "common/textspan.c" -#include "common/timing.c" -#include "common/utils.c" -#include "common/htmlparse.c" - -int CL_type = 0; - -char **Files; /* from command line */ -const char **Lib; /* from command line */ -char *CmdName; -char *specificFlags; -char *specificItems; -char *Gvfilepath; /* Per-process path of files allowed in image attributes (also ps libs) */ -char *Gvimagepath; /* Per-graph path of files allowed in image attributes (also ps libs) */ - -unsigned char Verbose; -unsigned char Reduce; -int MemTest; -char *HTTPServerEnVar; -char *Output_file_name; -int graphviz_errors; -int Nop; -double PSinputscale; -int Syntax_errors; -int Show_cnt; -char** Show_boxes; /* emit code for correct box coordinates */ -int CL_type; /* NONE, LOCAL, GLOBAL */ -unsigned char Concentrate; /* if parallel edges should be merged */ -double Epsilon; /* defined in input_graph */ -int MaxIter; -int Ndim; -int State; /* last finished phase */ -int EdgeLabelsDone; /* true if edge labels have been positioned */ -double Initial_dist; -double Damping; -int Y_invert; /* invert y in dot & plain output */ -int GvExitOnUsage; /* gvParseArgs() should exit on usage or error */ - -Agsym_t - *G_activepencolor, *G_activefillcolor, - *G_selectedpencolor, *G_selectedfillcolor, - *G_visitedpencolor, *G_visitedfillcolor, - *G_deletedpencolor, *G_deletedfillcolor, - *G_ordering, *G_peripheries, *G_penwidth, - *G_gradientangle, *G_margin; - -Agsym_t - *N_height, *N_width, *N_shape, *N_color, *N_fillcolor, - *N_activepencolor, *N_activefillcolor, - *N_selectedpencolor, *N_selectedfillcolor, - *N_visitedpencolor, *N_visitedfillcolor, - *N_deletedpencolor, *N_deletedfillcolor, - *N_fontsize, *N_fontname, *N_fontcolor, *N_margin, - *N_label, *N_xlabel, *N_nojustify, *N_style, *N_showboxes, - *N_sides, *N_peripheries, *N_ordering, *N_orientation, - *N_skew, *N_distortion, *N_fixed, *N_imagescale, *N_layer, - *N_group, *N_comment, *N_vertices, *N_z, - *N_penwidth, *N_gradientangle; -Agsym_t - *E_weight, *E_minlen, *E_color, *E_fillcolor, - *E_activepencolor, *E_activefillcolor, - *E_selectedpencolor, *E_selectedfillcolor, - *E_visitedpencolor, *E_visitedfillcolor, - *E_deletedpencolor, *E_deletedfillcolor, - *E_fontsize, *E_fontname, *E_fontcolor, - *E_label, *E_xlabel, *E_dir, *E_style, *E_decorate, - *E_showboxes, *E_arrowsz, *E_constr, *E_layer, - *E_comment, *E_label_float, - *E_samehead, *E_sametail, - *E_arrowhead, *E_arrowtail, - *E_headlabel, *E_taillabel, - *E_labelfontsize, *E_labelfontname, *E_labelfontcolor, - *E_labeldistance, *E_labelangle, - *E_tailclip, *E_headclip, - *E_penwidth; - -YYSTYPE htmllval; - -const char *lt_dlerror (void){ return NULL; } -int lt_dlinit(void) { return 0; } - diff --git a/internal/ccall/common.go b/internal/ccall/common.go deleted file mode 100644 index 4f2ac9f..0000000 --- a/internal/ccall/common.go +++ /dev/null @@ -1,163 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -DGVLIBDIR=graphviz -#cgo CFLAGS: -Icdt -#cgo CFLAGS: -Icommon -#cgo CFLAGS: -Igvc -#cgo CFLAGS: -Ipathplan -#cgo CFLAGS: -Icgraph -#cgo CFLAGS: -Ifdpgen -#cgo CFLAGS: -Isfdpgen -#cgo CFLAGS: -Ixdot -#cgo CFLAGS: -Ilabel -#cgo CFLAGS: -Ipack -#cgo CFLAGS: -Iortho -#cgo CFLAGS: -Iosage -#cgo CFLAGS: -Ineatogen -#cgo CFLAGS: -Isparse -#cgo CFLAGS: -Icircogen -#cgo CFLAGS: -Irbtree -#cgo CFLAGS: -Ipatchwork -#cgo CFLAGS: -Itwopigen -#cgo CFLAGS: -I../ -#cgo CFLAGS: -I../libltdl -#cgo CFLAGS: -Wno-unused-result -Wno-format -Wno-pointer-to-int-cast -Wno-attributes -#include "config.h" -#include "gvc.h" -#include "gvcjob.h" -#include "textspan.h" -*/ -import "C" -import "unsafe" - -type PostscriptAlias struct { - c *C.PostscriptAlias -} - -func ToPostscriptAlias(c *C.PostscriptAlias) *PostscriptAlias { - if c == nil { - return nil - } - return &PostscriptAlias{c: c} -} - -func (g *PostscriptAlias) C() *C.PostscriptAlias { - if g == nil { - return nil - } - return g.c -} - -func (g *PostscriptAlias) Name() string { - return C.GoString(g.c.name) -} - -func (g *PostscriptAlias) Family() string { - return C.GoString(g.c.family) -} - -func (g *PostscriptAlias) Weight() string { - return C.GoString(g.c.weight) -} - -func (g *PostscriptAlias) Stretch() string { - return C.GoString(g.c.stretch) -} - -func (g *PostscriptAlias) Style() string { - return C.GoString(g.c.style) -} - -func (g *PostscriptAlias) XFigCode() int { - return int(g.c.xfig_code) -} - -func (g *PostscriptAlias) SVGFontFamily() string { - return C.GoString(g.c.svg_font_family) -} - -func (g *PostscriptAlias) SVGFontWeight() string { - return C.GoString(g.c.svg_font_weight) -} - -func (g *PostscriptAlias) SVGFontStyle() string { - return C.GoString(g.c.svg_font_style) -} - -type TextFont struct { - c *C.textfont_t -} - -func ToTextFont(c *C.textfont_t) *TextFont { - if c == nil { - return nil - } - return &TextFont{c: c} -} - -func (g *TextFont) Name() string { - return C.GoString(g.c.name) -} - -func (g *TextFont) Color() string { - return C.GoString(g.c.color) -} - -func (g *TextFont) PostscriptAlias() *PostscriptAlias { - v := g.c.postscript_alias - if v == nil { - return nil - } - return &PostscriptAlias{c: v} -} - -func (g *TextFont) Size() float64 { - return float64(g.c.size) -} - -type TextSpan struct { - c *C.textspan_t -} - -func ToTextSpan(c *C.textspan_t) *TextSpan { - if c == nil { - return nil - } - return &TextSpan{c: c} -} - -func (t *TextSpan) C() *C.textspan_t { - if t == nil { - return nil - } - return t.c -} - -func (t *TextSpan) Str() string { - return C.GoString(t.c.str) -} - -func (t *TextSpan) Font() *TextFont { - return ToTextFont(t.c.font) -} - -func (t *TextSpan) Layout() unsafe.Pointer { - return t.c.layout -} - -func (t *TextSpan) YOffsetLayout() float64 { - return float64(t.c.yoffset_layout) -} - -func (t *TextSpan) YOffsetCenterLine() float64 { - return float64(t.c.yoffset_centerline) -} - -func (t *TextSpan) Size() Pointf { - return ToPointf(t.c.size) -} - -func (t *TextSpan) Just() byte { - return byte(t.c.just) -} diff --git a/internal/ccall/common/args.c b/internal/ccall/common/args.c deleted file mode 100644 index 902656f..0000000 --- a/internal/ccall/common/args.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* FIXME - * This is an ugly mess. - * - * Args should be made independent of layout engine and arg values - * should be stored in gvc or gvc->job. All globals should be eliminated. - * - * Needs to be fixed before layout engines can be plugins. - */ - -#include -#include "render.h" -#include "tlayout.h" -#include "gvc.h" -#include "fdp.h" - -/* neato_extra_args: - * Handle special neato arguments. - * Return number of unprocessed arguments; return < 0 on error. - */ -static int -neato_extra_args(GVC_t *gvc, int argc, char** argv) -{ - char** p = argv+1; - int i; - char* arg; - int cnt = 1; - - for (i = 1; i < argc; i++) { - arg = argv[i]; - if (arg && *arg == '-') { - switch (arg[1]) { - case 'x' : Reduce = TRUE; break; - case 'n': - if (arg[2]) { - Nop = atoi(arg+2); - if (Nop <= 0) { - agerr (AGERR, "Invalid parameter \"%s\" for -n flag\n", arg+2); - dotneato_usage (1); - return -1; - } - } - else Nop = 1; - break; - default : - cnt++; - if (*p != arg) *p = arg; - p++; - break; - } - } - else { - cnt++; - if (*p != arg) *p = arg; - p++; - } - } - *p = 0; - return cnt; -} - -/* memtest_extra_args: - * Handle special memtest arguments. - * Return number of unprocessed arguments; return < 0 on error. - */ -static int -memtest_extra_args(GVC_t *gvc, int argc, char** argv) -{ - char** p = argv+1; - int i; - char* arg; - int cnt = 1; - - for (i = 1; i < argc; i++) { - arg = argv[i]; - if (arg && *arg == '-') { - switch (arg[1]) { - case 'm' : - if (arg[2]) { - MemTest = atoi(arg+2); - if (MemTest <= 0) { - agerr (AGERR, "Invalid parameter \"%s\" for -m flag\n", arg+2); - dotneato_usage (1); - return -1; - } - } - else MemTest = -1; - break; - default : - cnt++; - if (*p != arg) *p = arg; - p++; - break; - } - } - else { - cnt++; - if (*p != arg) *p = arg; - p++; - } - } - *p = 0; - return cnt; -} - -/* config_extra_args: - * Handle special config arguments. - * Return number of unprocessed arguments; return < 0 on error. - */ -static int -config_extra_args(GVC_t *gvc, int argc, char** argv) -{ - char** p = argv+1; - int i; - char* arg; - int cnt = 1; - - for (i = 1; i < argc; i++) { - arg = argv[i]; - if (arg && *arg == '-') { - switch (arg[1]) { - case 'v': - gvc->common.verbose = 1; - if (isdigit(arg[2])) - gvc->common.verbose = atoi(&arg[2]); - break; - case 'O' : - gvc->common.auto_outfile_names = TRUE; - break; - case 'c' : - gvc->common.config = TRUE; - break; - default : - cnt++; - if (*p != arg) *p = arg; - p++; - break; - } - } - else { - cnt++; - if (*p != arg) *p = arg; - p++; - } - } - *p = 0; - return cnt; -} - -/* setDouble: - * If arg is an double, value is stored in v - * and functions returns 0; otherwise, returns 1. - */ -static int -setDouble (double* v, char* arg) -{ - char* p; - double d; - - d = strtod(arg,&p); - if (p == arg) { - agerr (AGERR, "bad value in flag -L%s - ignored\n", arg-1); - return 1; - } - *v = d; - return 0; -} - -/* setInt: - * If arg is an integer, value is stored in v - * and functions returns 0; otherwise, returns 1. - */ -static int -setInt (int* v, char* arg) -{ - char* p; - int i; - - i = (int)strtol(arg,&p,10); - if (p == arg) { - agerr (AGERR, "bad value in flag -L%s - ignored\n", arg-1); - return 1; - } - *v = i; - return 0; -} - -/* setFDPAttr: - * Actions for fdp specific flags - */ -static int -setFDPAttr (char* arg) -{ - switch (*arg++) { - case 'g' : - fdp_parms->useGrid = 0; - break; - case 'O' : - fdp_parms->useNew = 0; - break; - case 'n' : - if (setInt (&fdp_parms->numIters, arg)) return 1; - break; - case 'U' : - if (setInt (&fdp_parms->unscaled, arg)) return 1; - break; - case 'C' : - if (setDouble (&fdp_parms->C, arg)) return 1; - break; - case 'T' : - if (*arg == '*') { - if (setDouble (&fdp_parms->Tfact, arg+1)) return 1; - } - else { - if (setDouble (&fdp_parms->T0, arg)) return 1; - } - break; - default : - agerr (AGWARN, "unknown flag -L%s - ignored\n", arg-1); - break; - } - return 0; -} - -/* fdp_extra_args: - * Handle fdp specific arguments. - * These have the form -L=. - * Return number of unprocessed arguments; return < 0 on error. - */ -static int -fdp_extra_args (GVC_t *gvc, int argc, char** argv) -{ - char** p = argv+1; - int i; - char* arg; - int cnt = 1; - - for (i = 1; i < argc; i++) { - arg = argv[i]; - if (arg && (*arg == '-') && (*(arg+1) == 'L')) { - if (setFDPAttr (arg+2)) { - dotneato_usage(1); - return -1; - } - } - else { - cnt++; - if (*p != arg) *p = arg; - p++; - } - } - *p = 0; - return cnt; -} - -/* gvParseArgs: - * Return 0 on success. - * Return x if calling function should call exit(x-1). - */ -int gvParseArgs(GVC_t *gvc, int argc, char** argv) -{ - int rv; - if ((argc = neato_extra_args(gvc, argc, argv)) < 0) - return (1-argc); - if ((argc = fdp_extra_args(gvc, argc, argv)) < 0) - return (1-argc); - if ((argc = memtest_extra_args(gvc, argc, argv)) < 0) - return (1-argc); - if ((argc = config_extra_args(gvc, argc, argv)) < 0) - return (1-argc); - if ((rv = dotneato_args_initialize(gvc, argc, argv))) - return rv; - if (Verbose) - gvplugin_write_status(gvc); - return 0; -} diff --git a/internal/ccall/common/arith.h b/internal/ccall/common/arith.h deleted file mode 100644 index c1811de..0000000 --- a/internal/ccall/common/arith.h +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* geometric functions (e.g. on points and boxes) with application to, but - * no specific dependance on graphs */ - -#ifndef GV_ARITH_H -#define GV_ARITH_H - -/* for sincos */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include -#ifdef HAVE_VALUES_H -#include -#endif -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef MIN -#undef MIN -#endif -#define MIN(a,b) ((a)<(b)?(a):(b)) - -#ifdef MAX -#undef MAX -#endif -#define MAX(a,b) ((a)>(b)?(a):(b)) - -#ifdef ABS -#undef ABS -#endif -#define ABS(a) ((a) >= 0 ? (a) : -(a)) - -#define AVG(a,b) ((a + b) / 2) -#define SGN(a) (((a)<0)? -1 : 1) -#define CMP(a,b) (((a)<(b)) ? -1 : (((a)>(b)) ? 1 : 0)) - -#ifndef INT_MAX -#define INT_MAX ((int)(~(unsigned)0 >> 1)) -#endif - -#ifndef INT_MIN -#define INT_MIN (-INT_MAX - 1) -#endif - -#ifndef MAXSHORT -#define MAXSHORT (0x7fff) -#endif - -#ifndef MAXDOUBLE -#define MAXDOUBLE 1.7976931348623157e+308 -#endif - -#ifndef MAXFLOAT -#define MAXFLOAT ((float)3.40282347e+38) -#endif - -#ifdef BETWEEN -#undef BETWEEN -#endif -#define BETWEEN(a,b,c) (((a) <= (b)) && ((b) <= (c))) - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef SQRT2 -#define SQRT2 1.41421356237309504880 -#endif - -#define ROUND(f) ((f>=0)?(int)(f + .5):(int)(f - .5)) -#define RADIANS(deg) ((deg)/180.0 * M_PI) -#define DEGREES(rad) ((rad)/M_PI * 180.0) - -#define SQR(a) ((a) * (a)) - -#ifdef HAVE_SINCOS - extern void sincos(double x, double *s, double *c); -#else -# define sincos(x,s,c) *s = sin(x); *c = cos(x) -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/common/arrows.c b/internal/ccall/common/arrows.c deleted file mode 100644 index 6f4f340..0000000 --- a/internal/ccall/common/arrows.c +++ /dev/null @@ -1,764 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" - -#define EPSILON .0001 - -/* standard arrow length in points */ -#define ARROW_LENGTH 10. - -#define NUMB_OF_ARROW_HEADS 4 -/* each arrow in 8 bits. Room for NUMB_OF_ARROW_HEADS arrows in 32 bit int. */ - -#define BITS_PER_ARROW 8 - -#define BITS_PER_ARROW_TYPE 4 -/* arrow types (in BITS_PER_ARROW_TYPE bits) */ -#define ARR_TYPE_NONE (ARR_NONE) -#define ARR_TYPE_NORM 1 -#define ARR_TYPE_CROW 2 -#define ARR_TYPE_TEE 3 -#define ARR_TYPE_BOX 4 -#define ARR_TYPE_DIAMOND 5 -#define ARR_TYPE_DOT 6 -#define ARR_TYPE_CURVE 7 -#define ARR_TYPE_GAP 8 -/* Spare: 9-15 */ - -/* arrow mods (in (BITS_PER_ARROW - BITS_PER_ARROW_TYPE) bits) */ -#define ARR_MOD_OPEN (1<<(BITS_PER_ARROW_TYPE+0)) -#define ARR_MOD_INV (1<<(BITS_PER_ARROW_TYPE+1)) -#define ARR_MOD_LEFT (1<<(BITS_PER_ARROW_TYPE+2)) -#define ARR_MOD_RIGHT (1<<(BITS_PER_ARROW_TYPE+3)) -/* No spares */ - -typedef struct arrowdir_t { - char *dir; - int sflag; - int eflag; -} arrowdir_t; - -static arrowdir_t Arrowdirs[] = { - {"forward", ARR_TYPE_NONE, ARR_TYPE_NORM}, - {"back", ARR_TYPE_NORM, ARR_TYPE_NONE}, - {"both", ARR_TYPE_NORM, ARR_TYPE_NORM}, - {"none", ARR_TYPE_NONE, ARR_TYPE_NONE}, - {(char *) 0, ARR_TYPE_NONE, ARR_TYPE_NONE} -}; - -typedef struct arrowname_t { - char *name; - int type; -} arrowname_t; - -static arrowname_t Arrowsynonyms[] = { - /* synonyms for deprecated arrow names - included for backward compatibility */ - /* evaluated before primary names else "invempty" would give different results */ - {"invempty", (ARR_TYPE_NORM | ARR_MOD_INV | ARR_MOD_OPEN)}, /* oinv */ - {(char *) 0, (ARR_TYPE_NONE)} -}; - -static arrowname_t Arrowmods[] = { - {"o", ARR_MOD_OPEN}, - {"r", ARR_MOD_RIGHT}, - {"l", ARR_MOD_LEFT}, - /* deprecated alternates for backward compat */ - {"e", ARR_MOD_OPEN}, /* o - needed for "ediamond" */ - {"half", ARR_MOD_LEFT}, /* l - needed for "halfopen" */ - {(char *) 0, ARR_TYPE_NONE} -}; - -static arrowname_t Arrownames[] = { - {"normal", ARR_TYPE_NORM}, - {"crow", ARR_TYPE_CROW}, - {"tee", ARR_TYPE_TEE}, - {"box", ARR_TYPE_BOX}, - {"diamond", ARR_TYPE_DIAMOND}, - {"dot", ARR_TYPE_DOT}, -// {"none", ARR_TYPE_NONE}, - {"none", ARR_TYPE_GAP}, -// {"gap", ARR_TYPE_GAP}, - /* ARR_MOD_INV is used only here to define two additional shapes - since not all types can use it */ - {"inv", (ARR_TYPE_NORM | ARR_MOD_INV)}, - {"vee", (ARR_TYPE_CROW | ARR_MOD_INV)}, - /* WARNING ugly kludge to deal with "o" v "open" conflict */ - /* Define "open" as just "pen" since "o" already taken as ARR_MOD_OPEN */ - /* Note that ARR_MOD_OPEN has no meaning for ARR_TYPE_CROW shape */ - {"pen", (ARR_TYPE_CROW | ARR_MOD_INV)}, - /* WARNING ugly kludge to deal with "e" v "empty" conflict */ - /* Define "empty" as just "mpty" since "e" already taken as ARR_MOD_OPEN */ - /* Note that ARR_MOD_OPEN has expected meaning for ARR_TYPE_NORM shape */ - {"mpty", ARR_TYPE_NORM}, - {"curve", ARR_TYPE_CURVE}, - {"icurve", (ARR_TYPE_CURVE | ARR_MOD_INV)}, - {(char *) 0, ARR_TYPE_NONE} -}; - -typedef struct arrowtype_t { - int type; - double lenfact; /* ratio of length of this arrow type to standard arrow */ - void (*gen) (GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); /* generator function for type */ -} arrowtype_t; - -/* forward declaration of functions used in Arrowtypes[] */ -static void arrow_type_normal(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_crow(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_tee(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_box(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_diamond(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_dot(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_curve(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); -static void arrow_type_gap(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag); - -static arrowtype_t Arrowtypes[] = { - {ARR_TYPE_NORM, 1.0, arrow_type_normal}, - {ARR_TYPE_CROW, 1.0, arrow_type_crow}, - {ARR_TYPE_TEE, 0.5, arrow_type_tee}, - {ARR_TYPE_BOX, 1.0, arrow_type_box}, - {ARR_TYPE_DIAMOND, 1.2, arrow_type_diamond}, - {ARR_TYPE_DOT, 0.8, arrow_type_dot}, - {ARR_TYPE_CURVE, 1.0, arrow_type_curve}, - {ARR_TYPE_GAP, 0.5, arrow_type_gap}, - {ARR_TYPE_NONE, 0.0, NULL} -}; - -static char *arrow_match_name_frag(char *name, arrowname_t * arrownames, int *flag) -{ - arrowname_t *arrowname; - size_t namelen = 0; - char *rest = name; - - for (arrowname = arrownames; arrowname->name; arrowname++) { - namelen = strlen(arrowname->name); - if (strncmp(name, arrowname->name, namelen) == 0) { - *flag |= arrowname->type; - rest += namelen; - break; - } - } - return rest; -} - -static char *arrow_match_shape(char *name, int *flag) -{ - char *next, *rest; - int f = ARR_TYPE_NONE; - - rest = arrow_match_name_frag(name, Arrowsynonyms, &f); - if (rest == name) { - do { - next = rest; - rest = arrow_match_name_frag(next, Arrowmods, &f); - } while (next != rest); - rest = arrow_match_name_frag(rest, Arrownames, &f); - } - if (f && !(f & ((1 << BITS_PER_ARROW_TYPE) - 1))) - f |= ARR_TYPE_NORM; - *flag |= f; - return rest; -} - -static void arrow_match_name(char *name, int *flag) -{ - char *rest = name; - char *next; - int i, f; - - *flag = 0; - for (i = 0; *rest != '\0' && i < NUMB_OF_ARROW_HEADS; ) { - f = ARR_TYPE_NONE; - next = rest; - rest = arrow_match_shape(next, &f); - if (f == ARR_TYPE_NONE) { - agerr(AGWARN, "Arrow type \"%s\" unknown - ignoring\n", next); - return; - } - if (f == ARR_TYPE_GAP && i == (NUMB_OF_ARROW_HEADS -1)) - f = ARR_TYPE_NONE; - if ((f == ARR_TYPE_GAP) && (i == 0) && (*rest == '\0')) - f = ARR_TYPE_NONE; - if (f != ARR_TYPE_NONE) - *flag |= (f << (i++ * BITS_PER_ARROW)); - } -} - -void arrow_flags(Agedge_t * e, int *sflag, int *eflag) -{ - char *attr; - arrowdir_t *arrowdir; - - *sflag = ARR_TYPE_NONE; - *eflag = agisdirected(agraphof(e)) ? ARR_TYPE_NORM : ARR_TYPE_NONE; - if (E_dir && ((attr = agxget(e, E_dir)))[0]) { - for (arrowdir = Arrowdirs; arrowdir->dir; arrowdir++) { - if (streq(attr, arrowdir->dir)) { - *sflag = arrowdir->sflag; - *eflag = arrowdir->eflag; - break; - } - } - } - if (E_arrowhead && (*eflag == ARR_TYPE_NORM) && ((attr = agxget(e, E_arrowhead)))[0]) - arrow_match_name(attr, eflag); - if (E_arrowtail && (*sflag == ARR_TYPE_NORM) && ((attr = agxget(e, E_arrowtail)))[0]) - arrow_match_name(attr, sflag); - if (ED_conc_opp_flag(e)) { - edge_t *f; - int s0, e0; - /* pick up arrowhead of opposing edge */ - f = agfindedge(agraphof(aghead(e)), aghead(e), agtail(e)); - arrow_flags(f, &s0, &e0); - *eflag = *eflag | s0; - *sflag = *sflag | e0; - } -} - -double arrow_length(edge_t * e, int flag) -{ - arrowtype_t *arrowtype; - double lenfact = 0.0; - int f, i; - - for (i = 0; i < NUMB_OF_ARROW_HEADS; i++) { - /* we don't simply index with flag because arrowtypes are not necessarily sorted */ - f = (flag >> (i * BITS_PER_ARROW)) & ((1 << BITS_PER_ARROW_TYPE) - 1); - for (arrowtype = Arrowtypes; arrowtype->gen; arrowtype++) { - if (f == arrowtype->type) { - lenfact += arrowtype->lenfact; - break; - } - } - } - /* The original was missing the factor E_arrowsz, but I believe it - should be here for correct arrow clipping */ - return ARROW_LENGTH * lenfact * late_double(e, E_arrowsz, 1.0, 0.0); -} - -/* inside function for calls to bezier_clip */ -static boolean inside(inside_t * inside_context, pointf p) -{ - return DIST2(p, inside_context->a.p[0]) <= inside_context->a.r[0]; -} - -int arrowEndClip(edge_t* e, pointf * ps, int startp, - int endp, bezier * spl, int eflag) -{ - inside_t inside_context; - pointf sp[4]; - double elen, elen2; - - elen = arrow_length(e, eflag); - elen2 = elen * elen; - spl->eflag = eflag, spl->ep = ps[endp + 3]; - if (endp > startp && DIST2(ps[endp], ps[endp + 3]) < elen2) { - endp -= 3; - } - sp[3] = ps[endp]; - sp[2] = ps[endp + 1]; - sp[1] = ps[endp + 2]; - sp[0] = spl->ep; /* ensure endpoint starts inside */ - - inside_context.a.p = &sp[0]; - inside_context.a.r = &elen2; - bezier_clip(&inside_context, inside, sp, TRUE); - - ps[endp] = sp[3]; - ps[endp + 1] = sp[2]; - ps[endp + 2] = sp[1]; - ps[endp + 3] = sp[0]; - return endp; -} - -int arrowStartClip(edge_t* e, pointf * ps, int startp, - int endp, bezier * spl, int sflag) -{ - inside_t inside_context; - pointf sp[4]; - double slen, slen2; - - slen = arrow_length(e, sflag); - slen2 = slen * slen; - spl->sflag = sflag, spl->sp = ps[startp]; - if (endp > startp && DIST2(ps[startp], ps[startp + 3]) < slen2) { - startp += 3; - } - sp[0] = ps[startp + 3]; - sp[1] = ps[startp + 2]; - sp[2] = ps[startp + 1]; - sp[3] = spl->sp; /* ensure endpoint starts inside */ - - inside_context.a.p = &sp[3]; - inside_context.a.r = &slen2; - bezier_clip(&inside_context, inside, sp, FALSE); - - ps[startp] = sp[3]; - ps[startp + 1] = sp[2]; - ps[startp + 2] = sp[1]; - ps[startp + 3] = sp[0]; - return startp; -} - -/* arrowOrthoClip: - * For orthogonal routing, we know each Bezier of spl is a horizontal or vertical - * line segment. We need to guarantee the B-spline stays this way. At present, we shrink - * the arrows if necessary to fit the last segment at either end. Alternatively, we could - * maintain the arrow size by dropping the 3 points of spl, and adding a new spl encoding - * the arrow, something "ex_0,y_0 x_1,y_1 x_1,y_1 x_1,y_1 x_1,y_1", when the last line - * segment is x_1,y_1 x_2,y_2 x_3,y_3 x_0,y_0. With a good deal more work, we could guarantee - * that the truncated spl clips to the arrow shape. - */ -void arrowOrthoClip(edge_t* e, pointf* ps, int startp, int endp, bezier* spl, int sflag, int eflag) -{ - pointf p, q, r, s, t; - double d, tlen, hlen, maxd; - - if (sflag && eflag && (endp == startp)) { /* handle special case of two arrows on a single segment */ - p = ps[endp]; - q = ps[endp+3]; - tlen = arrow_length (e, sflag); - hlen = arrow_length (e, eflag); - d = DIST(p, q); - if (hlen + tlen >= d) { - hlen = tlen = d/3.0; - } - if (p.y == q.y) { /* horz segment */ - s.y = t.y = p.y; - if (p.x < q.x) { - t.x = q.x - hlen; - s.x = p.x + tlen; - } - else { - t.x = q.x + hlen; - s.x = p.x - tlen; - } - } - else { /* vert segment */ - s.x = t.x = p.x; - if (p.y < q.y) { - t.y = q.y - hlen; - s.y = p.y + tlen; - } - else { - t.y = q.y + hlen; - s.y = p.y - tlen; - } - } - ps[endp] = ps[endp + 1] = s; - ps[endp + 2] = ps[endp + 3] = t; - spl->eflag = eflag, spl->ep = p; - spl->sflag = sflag, spl->sp = q; - return; - } - if (eflag) { - hlen = arrow_length(e, eflag); - p = ps[endp]; - q = ps[endp+3]; - d = DIST(p, q); - maxd = 0.9*d; - if (hlen >= maxd) { /* arrow too long */ - hlen = maxd; - } - if (p.y == q.y) { /* horz segment */ - r.y = p.y; - if (p.x < q.x) r.x = q.x - hlen; - else r.x = q.x + hlen; - } - else { /* vert segment */ - r.x = p.x; - if (p.y < q.y) r.y = q.y - hlen; - else r.y = q.y + hlen; - } - ps[endp + 1] = p; - ps[endp + 2] = ps[endp + 3] = r; - spl->eflag = eflag; - spl->ep = q; - } - if (sflag) { - tlen = arrow_length(e, sflag); - p = ps[startp]; - q = ps[startp+3]; - d = DIST(p, q); - maxd = 0.9*d; - if (tlen >= maxd) { /* arrow too long */ - tlen = maxd; - } - if (p.y == q.y) { /* horz segment */ - r.y = p.y; - if (p.x < q.x) r.x = p.x + tlen; - else r.x = p.x - tlen; - } - else { /* vert segment */ - r.x = p.x; - if (p.y < q.y) r.y = p.y + tlen; - else r.y = p.y - tlen; - } - ps[startp] = ps[startp + 1] = r; - ps[startp + 2] = q; - spl->sflag = sflag; - spl->sp = p; - } -} - -static void arrow_type_normal(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf q, v, a[5]; - double arrowwidth; - - arrowwidth = 0.35; - if (penwidth > 4) - arrowwidth *= penwidth / 4; - - v.x = -u.y * arrowwidth; - v.y = u.x * arrowwidth; - q.x = p.x + u.x; - q.y = p.y + u.y; - if (flag & ARR_MOD_INV) { - a[0] = a[4] = p; - a[1].x = p.x - v.x; - a[1].y = p.y - v.y; - a[2] = q; - a[3].x = p.x + v.x; - a[3].y = p.y + v.y; - } else { - a[0] = a[4] = q; - a[1].x = q.x - v.x; - a[1].y = q.y - v.y; - a[2] = p; - a[3].x = q.x + v.x; - a[3].y = q.y + v.y; - } - if (flag & ARR_MOD_LEFT) - gvrender_polygon(job, a, 3, !(flag & ARR_MOD_OPEN)); - else if (flag & ARR_MOD_RIGHT) - gvrender_polygon(job, &a[2], 3, !(flag & ARR_MOD_OPEN)); - else - gvrender_polygon(job, &a[1], 3, !(flag & ARR_MOD_OPEN)); -} - -static void arrow_type_crow(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf m, q, v, w, a[9]; - double arrowwidth, shaftwidth; - - arrowwidth = 0.45; - if (penwidth > (4 * arrowsize) && (flag & ARR_MOD_INV)) - arrowwidth *= penwidth / (4 * arrowsize); - - shaftwidth = 0; - if (penwidth > 1 && (flag & ARR_MOD_INV)) - shaftwidth = 0.05 * (penwidth - 1) / arrowsize; /* arrowsize to cancel the arrowsize term already in u */ - - v.x = -u.y * arrowwidth; - v.y = u.x * arrowwidth; - w.x = -u.y * shaftwidth; - w.y = u.x * shaftwidth; - q.x = p.x + u.x; - q.y = p.y + u.y; - m.x = p.x + u.x * 0.5; - m.y = p.y + u.y * 0.5; - if (flag & ARR_MOD_INV) { /* vee */ - a[0] = a[8] = p; - a[1].x = q.x - v.x; - a[1].y = q.y - v.y; - a[2].x = m.x - w.x; - a[2].y = m.y - w.y; - a[3].x = q.x - w.x; - a[3].y = q.y - w.y; - a[4] = q; - a[5].x = q.x + w.x; - a[5].y = q.y + w.y; - a[6].x = m.x + w.x; - a[6].y = m.y + w.y; - a[7].x = q.x + v.x; - a[7].y = q.y + v.y; - } else { /* crow */ - a[0] = a[8] = q; - a[1].x = p.x - v.x; - a[1].y = p.y - v.y; - a[2].x = m.x - w.x; - a[2].y = m.y - w.y; - a[3].x = p.x; - a[3].y = p.y; - a[4] = p; - a[5].x = p.x; - a[5].y = p.y; - a[6].x = m.x + w.x; - a[6].y = m.y + w.y; - a[7].x = p.x + v.x; - a[7].y = p.y + v.y; - } - if (flag & ARR_MOD_LEFT) - gvrender_polygon(job, a, 6, 1); - else if (flag & ARR_MOD_RIGHT) - gvrender_polygon(job, &a[3], 6, 1); - else - gvrender_polygon(job, a, 9, 1); -} - -static void arrow_type_gap(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf q, a[2]; - - q.x = p.x + u.x; - q.y = p.y + u.y; - a[0] = p; - a[1] = q; - gvrender_polyline(job, a, 2); -} - -static void arrow_type_tee(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf m, n, q, v, a[4]; - - v.x = -u.y; - v.y = u.x; - q.x = p.x + u.x; - q.y = p.y + u.y; - m.x = p.x + u.x * 0.2; - m.y = p.y + u.y * 0.2; - n.x = p.x + u.x * 0.6; - n.y = p.y + u.y * 0.6; - a[0].x = m.x + v.x; - a[0].y = m.y + v.y; - a[1].x = m.x - v.x; - a[1].y = m.y - v.y; - a[2].x = n.x - v.x; - a[2].y = n.y - v.y; - a[3].x = n.x + v.x; - a[3].y = n.y + v.y; - if (flag & ARR_MOD_LEFT) { - a[0] = m; - a[3] = n; - } else if (flag & ARR_MOD_RIGHT) { - a[1] = m; - a[2] = n; - } - gvrender_polygon(job, a, 4, 1); - a[0] = p; - a[1] = q; - gvrender_polyline(job, a, 2); -} - -static void arrow_type_box(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf m, q, v, a[4]; - - v.x = -u.y * 0.4; - v.y = u.x * 0.4; - m.x = p.x + u.x * 0.8; - m.y = p.y + u.y * 0.8; - q.x = p.x + u.x; - q.y = p.y + u.y; - a[0].x = p.x + v.x; - a[0].y = p.y + v.y; - a[1].x = p.x - v.x; - a[1].y = p.y - v.y; - a[2].x = m.x - v.x; - a[2].y = m.y - v.y; - a[3].x = m.x + v.x; - a[3].y = m.y + v.y; - if (flag & ARR_MOD_LEFT) { - a[0] = p; - a[3] = m; - } else if (flag & ARR_MOD_RIGHT) { - a[1] = p; - a[2] = m; - } - gvrender_polygon(job, a, 4, !(flag & ARR_MOD_OPEN)); - a[0] = m; - a[1] = q; - gvrender_polyline(job, a, 2); -} - -static void arrow_type_diamond(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - pointf q, r, v, a[5]; - - v.x = -u.y / 3.; - v.y = u.x / 3.; - r.x = p.x + u.x / 2.; - r.y = p.y + u.y / 2.; - q.x = p.x + u.x; - q.y = p.y + u.y; - a[0] = a[4] = q; - a[1].x = r.x + v.x; - a[1].y = r.y + v.y; - a[2] = p; - a[3].x = r.x - v.x; - a[3].y = r.y - v.y; - if (flag & ARR_MOD_LEFT) - gvrender_polygon(job, &a[2], 3, !(flag & ARR_MOD_OPEN)); - else if (flag & ARR_MOD_RIGHT) - gvrender_polygon(job, a, 3, !(flag & ARR_MOD_OPEN)); - else - gvrender_polygon(job, a, 4, !(flag & ARR_MOD_OPEN)); -} - -static void arrow_type_dot(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - double r; - pointf AF[2]; - - r = sqrt(u.x * u.x + u.y * u.y) / 2.; - AF[0].x = p.x + u.x / 2. - r; - AF[0].y = p.y + u.y / 2. - r; - AF[1].x = p.x + u.x / 2. + r; - AF[1].y = p.y + u.y / 2. + r; - gvrender_ellipse(job, AF, 2, !(flag & ARR_MOD_OPEN)); -} - - -/* Draw a concave semicircle using a single cubic bezier curve that touches p at its midpoint. - * See http://digerati-illuminatus.blogspot.com.au/2008/05/approximating-semicircle-with-cubic.html for details. - */ -static void arrow_type_curve(GVJ_t* job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - double arrowwidth = penwidth > 4 ? 0.5 * penwidth / 4 : 0.5; - pointf q, v, w; - pointf AF[4], a[2]; - - q.x = p.x + u.x; - q.y = p.y + u.y; - v.x = -u.y * arrowwidth; - v.y = u.x * arrowwidth; - w.x = v.y; // same direction as u, same magnitude as v. - w.y = -v.x; - a[0] = p; - a[1] = q; - - AF[0].x = p.x + v.x + w.x; - AF[0].y = p.y + v.y + w.y; - - AF[3].x = p.x - v.x + w.x; - AF[3].y = p.y - v.y + w.y; - - if (flag & ARR_MOD_INV) { /* ----(-| */ - AF[1].x = p.x + 0.95 * v.x + w.x + w.x * 4.0 / 3.0; - AF[1].y = AF[0].y + w.y * 4.0 / 3.0; - - AF[2].x = p.x - 0.95 * v.x + w.x + w.x * 4.0 / 3.0; - AF[2].y = AF[3].y + w.y * 4.0 / 3.0; - } - else { /* ----)-| */ - AF[1].x = p.x + 0.95 * v.x + w.x - w.x * 4.0 / 3.0; - AF[1].y = AF[0].y - w.y * 4.0 / 3.0; - - AF[2].x = p.x - 0.95 * v.x + w.x - w.x * 4.0 / 3.0; - AF[2].y = AF[3].y - w.y * 4.0 / 3.0; - } - - gvrender_polyline(job, a, 2); - if (flag & ARR_MOD_LEFT) - Bezier(AF, 3, 0.5, NULL, AF); - else if (flag & ARR_MOD_RIGHT) - Bezier(AF, 3, 0.5, AF, NULL); - gvrender_beziercurve(job, AF, sizeof(AF) / sizeof(pointf), FALSE, FALSE, FALSE); -} - - -static pointf arrow_gen_type(GVJ_t * job, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - int f; - arrowtype_t *arrowtype; - - f = flag & ((1 << BITS_PER_ARROW_TYPE) - 1); - for (arrowtype = Arrowtypes; arrowtype->type; arrowtype++) { - if (f == arrowtype->type) { - u.x *= arrowtype->lenfact * arrowsize; - u.y *= arrowtype->lenfact * arrowsize; - (arrowtype->gen) (job, p, u, arrowsize, penwidth, flag); - p.x = p.x + u.x; - p.y = p.y + u.y; - break; - } - } - return p; -} - -boxf arrow_bb(pointf p, pointf u, double arrowsize, int flag) -{ - double s; - boxf bb; - double ax,ay,bx,by,cx,cy,dx,dy; - double ux2, uy2; - - /* generate arrowhead vector */ - u.x -= p.x; - u.y -= p.y; - /* the EPSILONs are to keep this stable as length of u approaches 0.0 */ - s = ARROW_LENGTH * arrowsize / (sqrt(u.x * u.x + u.y * u.y) + EPSILON); - u.x += (u.x >= 0.0) ? EPSILON : -EPSILON; - u.y += (u.y >= 0.0) ? EPSILON : -EPSILON; - u.x *= s; - u.y *= s; - - /* compute all 4 corners of rotated arrowhead bounding box */ - ux2 = u.x / 2.; - uy2 = u.y / 2.; - ax = p.x - uy2; - ay = p.y - ux2; - bx = p.x + uy2; - by = p.y + ux2; - cx = ax + u.x; - cy = ay + u.y; - dx = bx + u.x; - dy = by + u.y; - - /* compute a right bb */ - bb.UR.x = MAX(ax, MAX(bx, MAX(cx, dx))); - bb.UR.y = MAX(ay, MAX(by, MAX(cy, dy))); - bb.LL.x = MIN(ax, MIN(bx, MIN(cx, dx))); - bb.LL.y = MIN(ay, MIN(by, MIN(cy, dy))); - - return bb; -} - -void arrow_gen(GVJ_t * job, emit_state_t emit_state, pointf p, pointf u, double arrowsize, double penwidth, int flag) -{ - obj_state_t *obj = job->obj; - double s; - int i, f; - emit_state_t old_emit_state; - - old_emit_state = obj->emit_state; - obj->emit_state = emit_state; - - /* Dotted and dashed styles on the arrowhead are ugly (dds) */ - /* linewidth needs to be reset */ - gvrender_set_style(job, job->gvc->defaultlinestyle); - - gvrender_set_penwidth(job, penwidth); - - /* generate arrowhead vector */ - u.x -= p.x; - u.y -= p.y; - /* the EPSILONs are to keep this stable as length of u approaches 0.0 */ - s = ARROW_LENGTH / (sqrt(u.x * u.x + u.y * u.y) + EPSILON); - u.x += (u.x >= 0.0) ? EPSILON : -EPSILON; - u.y += (u.y >= 0.0) ? EPSILON : -EPSILON; - u.x *= s; - u.y *= s; - - /* the first arrow head - closest to node */ - for (i = 0; i < NUMB_OF_ARROW_HEADS; i++) { - f = (flag >> (i * BITS_PER_ARROW)) & ((1 << BITS_PER_ARROW) - 1); - if (f == ARR_TYPE_NONE) - break; - p = arrow_gen_type(job, p, u, arrowsize, penwidth, f); - } - - obj->emit_state = old_emit_state; -} diff --git a/internal/ccall/common/brewer_colors b/internal/ccall/common/brewer_colors deleted file mode 100644 index 56ee3da..0000000 --- a/internal/ccall/common/brewer_colors +++ /dev/null @@ -1,1726 +0,0 @@ -# Apache-Style Software License for ColorBrewer software and ColorBrewer -# Color Schemes, Version 1.1 -# -# Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania -# State University. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions as source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. The end-user documentation included with the redistribution, if any, -# must include the following acknowledgment: -# This product includes color specifications and designs developed -# by Cynthia Brewer (http://colorbrewer.org/). -# Alternately, this acknowledgment may appear in the software itself, if and -# wherever such third-party acknowledgments normally appear. -# 4. The name "ColorBrewer" must not be used to endorse or promote products -# derived from this software without prior written permission. For written -# permission, please contact Cynthia Brewer at cbrewer@psu.edu. -# 5. Products derived from this software may not be called "ColorBrewer", nor -# may "ColorBrewer" appear in their name, without prior written permission -# of Cynthia Brewer. -# -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, -# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CYNTHIA -# BREWER, MARK HARROWER, OR THE PENNSYLVANIA STATE UNIVERSITY BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Fields per record line: -# "ColorName","NumOfColors","Type","CritVal","ColorNum","ColorLetter","R","G","B","SchemeType" -# -"accent",3,"qual",,1,"a",127,201,127,"qualitative" -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -"accent",4,"qual",,1,"a",127,201,127, -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -,,,,4,"d",255,255,153, -"accent",5,"qual",,1,"a",127,201,127, -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -,,,,4,"d",255,255,153, -,,,,5,"e",56,108,176, -"accent",6,"qual",,1,"a",127,201,127, -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -,,,,4,"d",255,255,153, -,,,,5,"e",56,108,176, -,,,,6,"f",240,2,127, -"accent",7,"qual",,1,"a",127,201,127, -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -,,,,4,"d",255,255,153, -,,,,5,"e",56,108,176, -,,,,6,"f",240,2,127, -,,,,7,"g",191,91,23, -"accent",8,"qual",,1,"a",127,201,127, -,,,,2,"b",190,174,212, -,,,,3,"c",253,192,134, -,,,,4,"d",255,255,153, -,,,,5,"e",56,108,176, -,,,,6,"f",240,2,127, -,,,,7,"g",191,91,23, -,,,,8,"h",102,102,102, -"blues",3,"seq",,1,"c",222,235,247,"sequential" -,,,,2,"f",158,202,225, -,,,,3,"i",49,130,189, -"blues",4,"seq",,1,"b",239,243,255, -,,,,2,"e",189,215,231, -,,,,3,"g",107,174,214, -,,,,4,"j",33,113,181, -"blues",5,"seq",,1,"b",239,243,255, -,,,,2,"e",189,215,231, -,,,,3,"g",107,174,214, -,,,,4,"i",49,130,189, -,,,,5,"k",8,81,156, -"blues",6,"seq",,1,"b",239,243,255, -,,,,2,"d",198,219,239, -,,,,3,"f",158,202,225, -,,,,4,"g",107,174,214, -,,,,5,"i",49,130,189, -,,,,6,"k",8,81,156, -"blues",7,"seq",,1,"b",239,243,255, -,,,,2,"d",198,219,239, -,,,,3,"f",158,202,225, -,,,,4,"g",107,174,214, -,,,,5,"h",66,146,198, -,,,,6,"j",33,113,181, -,,,,7,"l",8,69,148, -"blues",8,"seq",,1,"a",247,251,255, -,,,,2,"c",222,235,247, -,,,,3,"d",198,219,239, -,,,,4,"f",158,202,225, -,,,,5,"g",107,174,214, -,,,,6,"h",66,146,198, -,,,,7,"j",33,113,181, -,,,,8,"l",8,69,148, -"blues",9,"seq",,1,"a",247,251,255, -,,,,2,"c",222,235,247, -,,,,3,"d",198,219,239, -,,,,4,"f",158,202,225, -,,,,5,"g",107,174,214, -,,,,6,"h",66,146,198, -,,,,7,"j",33,113,181, -,,,,8,"k",8,81,156, -,,,,9,"m",8,48,107, -"brbg",3,"div",2,1,"e",216,179,101,"diverging" -,,,,2,"h",245,245,245, -,,,,3,"k",90,180,172, -"brbg",4,"div",2.5,1,"c",166,97,26, -,,,,2,"f",223,194,125, -,,,,3,"j",128,205,193, -,,,,4,"m",1,133,113, -"brbg",5,"div",3,1,"c",166,97,26, -,,,,2,"f",223,194,125, -,,,,3,"h",245,245,245, -,,,,4,"j",128,205,193, -,,,,5,"m",1,133,113, -"brbg",6,"div",3.5,1,"b",140,81,10, -,,,,2,"e",216,179,101, -,,,,3,"g",246,232,195, -,,,,4,"i",199,234,229, -,,,,5,"k",90,180,172, -,,,,6,"n",1,102,94, -"brbg",7,"div",4,1,"b",140,81,10, -,,,,2,"e",216,179,101, -,,,,3,"g",246,232,195, -,,,,4,"h",245,245,245, -,,,,5,"i",199,234,229, -,,,,6,"k",90,180,172, -,,,,7,"n",1,102,94, -"brbg",8,"div",4.5,1,"b",140,81,10, -,,,,2,"d",191,129,45, -,,,,3,"f",223,194,125, -,,,,4,"g",246,232,195, -,,,,5,"i",199,234,229, -,,,,6,"j",128,205,193, -,,,,7,"l",53,151,143, -,,,,8,"n",1,102,94, -"brbg",9,"div",5,1,"b",140,81,10, -,,,,2,"d",191,129,45, -,,,,3,"f",223,194,125, -,,,,4,"g",246,232,195, -,,,,5,"h",245,245,245, -,,,,6,"i",199,234,229, -,,,,7,"j",128,205,193, -,,,,8,"l",53,151,143, -,,,,9,"n",1,102,94, -"brbg",10,"div",5.5,1,"a",84,48,5, -,,,,2,"b",140,81,10, -,,,,3,"d",191,129,45, -,,,,4,"f",223,194,125, -,,,,5,"g",246,232,195, -,,,,6,"i",199,234,229, -,,,,7,"j",128,205,193, -,,,,8,"l",53,151,143, -,,,,9,"n",1,102,94, -,,,,10,"o",0,60,48, -"brbg",11,"div",6,1,"a",84,48,5, -,,,,2,"b",140,81,10, -,,,,3,"d",191,129,45, -,,,,4,"f",223,194,125, -,,,,5,"g",246,232,195, -,,,,6,"h",245,245,245, -,,,,7,"i",199,234,229, -,,,,8,"j",128,205,193, -,,,,9,"l",53,151,143, -,,,,10,"n",1,102,94, -,,,,11,"o",0,60,48, -"bugn",3,"seq",,1,"c",229,245,249,"sequential" -,,,,2,"f",153,216,201, -,,,,3,"i",44,162,95, -"bugn",4,"seq",,1,"b",237,248,251, -,,,,2,"e",178,226,226, -,,,,3,"g",102,194,164, -,,,,4,"j",35,139,69, -"bugn",5,"seq",,1,"b",237,248,251, -,,,,2,"e",178,226,226, -,,,,3,"g",102,194,164, -,,,,4,"i",44,162,95, -,,,,5,"k",0,109,44, -"bugn",6,"seq",,1,"b",237,248,251, -,,,,2,"d",204,236,230, -,,,,3,"f",153,216,201, -,,,,4,"g",102,194,164, -,,,,5,"i",44,162,95, -,,,,6,"k",0,109,44, -"bugn",7,"seq",,1,"b",237,248,251, -,,,,2,"d",204,236,230, -,,,,3,"f",153,216,201, -,,,,4,"g",102,194,164, -,,,,5,"h",65,174,118, -,,,,6,"j",35,139,69, -,,,,7,"l",0,88,36, -"bugn",8,"seq",,1,"a",247,252,253, -,,,,2,"c",229,245,249, -,,,,3,"d",204,236,230, -,,,,4,"f",153,216,201, -,,,,5,"g",102,194,164, -,,,,6,"h",65,174,118, -,,,,7,"j",35,139,69, -,,,,8,"l",0,88,36, -"bugn",9,"seq",,1,"a",247,252,253, -,,,,2,"c",229,245,249, -,,,,3,"d",204,236,230, -,,,,4,"f",153,216,201, -,,,,5,"g",102,194,164, -,,,,6,"h",65,174,118, -,,,,7,"j",35,139,69, -,,,,8,"k",0,109,44, -,,,,9,"m",0,68,27, -"bupu",3,"seq",,1,"c",224,236,244,"sequential" -,,,,2,"f",158,188,218, -,,,,3,"i",136,86,167, -"bupu",4,"seq",,1,"b",237,248,251, -,,,,2,"e",179,205,227, -,,,,3,"g",140,150,198, -,,,,4,"j",136,65,157, -"bupu",5,"seq",,1,"b",237,248,251, -,,,,2,"e",179,205,227, -,,,,3,"g",140,150,198, -,,,,4,"i",136,86,167, -,,,,5,"k",129,15,124, -"bupu",6,"seq",,1,"b",237,248,251, -,,,,2,"d",191,211,230, -,,,,3,"f",158,188,218, -,,,,4,"g",140,150,198, -,,,,5,"i",136,86,167, -,,,,6,"k",129,15,124, -"bupu",7,"seq",,1,"b",237,248,251, -,,,,2,"d",191,211,230, -,,,,3,"f",158,188,218, -,,,,4,"g",140,150,198, -,,,,5,"h",140,107,177, -,,,,6,"j",136,65,157, -,,,,7,"l",110,1,107, -"bupu",8,"seq",,1,"a",247,252,253, -,,,,2,"c",224,236,244, -,,,,3,"d",191,211,230, -,,,,4,"f",158,188,218, -,,,,5,"g",140,150,198, -,,,,6,"h",140,107,177, -,,,,7,"j",136,65,157, -,,,,8,"l",110,1,107, -"bupu",9,"seq",,1,"a",247,252,253, -,,,,2,"c",224,236,244, -,,,,3,"d",191,211,230, -,,,,4,"f",158,188,218, -,,,,5,"g",140,150,198, -,,,,6,"h",140,107,177, -,,,,7,"j",136,65,157, -,,,,8,"k",129,15,124, -,,,,9,"m",77,0,75, -"dark2",3,"qual",,1,"a",27,158,119,"qualitative" -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -"dark2",4,"qual",,1,"a",27,158,119, -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -,,,,4,"d",231,41,138, -"dark2",5,"qual",,1,"a",27,158,119, -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -,,,,4,"d",231,41,138, -,,,,5,"e",102,166,30, -"dark2",6,"qual",,1,"a",27,158,119, -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -,,,,4,"d",231,41,138, -,,,,5,"e",102,166,30, -,,,,6,"f",230,171,2, -"dark2",7,"qual",,1,"a",27,158,119, -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -,,,,4,"d",231,41,138, -,,,,5,"e",102,166,30, -,,,,6,"f",230,171,2, -,,,,7,"g",166,118,29, -"dark2",8,"qual",,1,"a",27,158,119, -,,,,2,"b",217,95,2, -,,,,3,"c",117,112,179, -,,,,4,"d",231,41,138, -,,,,5,"e",102,166,30, -,,,,6,"f",230,171,2, -,,,,7,"g",166,118,29, -,,,,8,"h",102,102,102, -"gnbu",3,"seq",,1,"c",224,243,219,"sequential" -,,,,2,"f",168,221,181, -,,,,3,"i",67,162,202, -"gnbu",4,"seq",,1,"b",240,249,232, -,,,,2,"e",186,228,188, -,,,,3,"g",123,204,196, -,,,,4,"j",43,140,190, -"gnbu",5,"seq",,1,"b",240,249,232, -,,,,2,"e",186,228,188, -,,,,3,"g",123,204,196, -,,,,4,"i",67,162,202, -,,,,5,"k",8,104,172, -"gnbu",6,"seq",,1,"b",240,249,232, -,,,,2,"d",204,235,197, -,,,,3,"f",168,221,181, -,,,,4,"g",123,204,196, -,,,,5,"i",67,162,202, -,,,,6,"k",8,104,172, -"gnbu",7,"seq",,1,"b",240,249,232, -,,,,2,"d",204,235,197, -,,,,3,"f",168,221,181, -,,,,4,"g",123,204,196, -,,,,5,"h",78,179,211, -,,,,6,"j",43,140,190, -,,,,7,"l",8,88,158, -"gnbu",8,"seq",,1,"a",247,252,240, -,,,,2,"c",224,243,219, -,,,,3,"d",204,235,197, -,,,,4,"f",168,221,181, -,,,,5,"g",123,204,196, -,,,,6,"h",78,179,211, -,,,,7,"j",43,140,190, -,,,,8,"l",8,88,158, -"gnbu",9,"seq",,1,"a",247,252,240, -,,,,2,"c",224,243,219, -,,,,3,"d",204,235,197, -,,,,4,"f",168,221,181, -,,,,5,"g",123,204,196, -,,,,6,"h",78,179,211, -,,,,7,"j",43,140,190, -,,,,8,"k",8,104,172, -,,,,9,"m",8,64,129, -"greens",3,"seq",,1,"c",229,245,224,"sequential" -,,,,2,"f",161,217,155, -,,,,3,"i",49,163,84, -"greens",4,"seq",,1,"b",237,248,233, -,,,,2,"e",186,228,179, -,,,,3,"g",116,196,118, -,,,,4,"j",35,139,69, -"greens",5,"seq",,1,"b",237,248,233, -,,,,2,"e",186,228,179, -,,,,3,"g",116,196,118, -,,,,4,"i",49,163,84, -,,,,5,"k",0,109,44, -"greens",6,"seq",,1,"b",237,248,233, -,,,,2,"d",199,233,192, -,,,,3,"f",161,217,155, -,,,,4,"g",116,196,118, -,,,,5,"i",49,163,84, -,,,,6,"k",0,109,44, -"greens",7,"seq",,1,"b",237,248,233, -,,,,2,"d",199,233,192, -,,,,3,"f",161,217,155, -,,,,4,"g",116,196,118, -,,,,5,"h",65,171,93, -,,,,6,"j",35,139,69, -,,,,7,"l",0,90,50, -"greens",8,"seq",,1,"a",247,252,245, -,,,,2,"c",229,245,224, -,,,,3,"d",199,233,192, -,,,,4,"f",161,217,155, -,,,,5,"g",116,196,118, -,,,,6,"h",65,171,93, -,,,,7,"j",35,139,69, -,,,,8,"l",0,90,50, -"greens",9,"seq",,1,"a",247,252,245, -,,,,2,"c",229,245,224, -,,,,3,"d",199,233,192, -,,,,4,"f",161,217,155, -,,,,5,"g",116,196,118, -,,,,6,"h",65,171,93, -,,,,7,"j",35,139,69, -,,,,8,"k",0,109,44, -,,,,9,"m",0,68,27, -"greys",3,"seq",,1,"c",240,240,240,"sequential" -,,,,2,"f",189,189,189, -,,,,3,"i",99,99,99, -"greys",4,"seq",,1,"b",247,247,247, -,,,,2,"e",204,204,204, -,,,,3,"g",150,150,150, -,,,,4,"j",82,82,82, -"greys",5,"seq",,1,"b",247,247,247, -,,,,2,"e",204,204,204, -,,,,3,"g",150,150,150, -,,,,4,"i",99,99,99, -,,,,5,"k",37,37,37, -"greys",6,"seq",,1,"b",247,247,247, -,,,,2,"d",217,217,217, -,,,,3,"f",189,189,189, -,,,,4,"g",150,150,150, -,,,,5,"i",99,99,99, -,,,,6,"k",37,37,37, -"greys",7,"seq",,1,"b",247,247,247, -,,,,2,"d",217,217,217, -,,,,3,"f",189,189,189, -,,,,4,"g",150,150,150, -,,,,5,"h",115,115,115, -,,,,6,"j",82,82,82, -,,,,7,"l",37,37,37, -"greys",8,"seq",,1,"a",255,255,255, -,,,,2,"c",240,240,240, -,,,,3,"d",217,217,217, -,,,,4,"f",189,189,189, -,,,,5,"g",150,150,150, -,,,,6,"h",115,115,115, -,,,,7,"j",82,82,82, -,,,,8,"l",37,37,37, -"greys",9,"seq",,1,"a",255,255,255, -,,,,2,"c",240,240,240, -,,,,3,"d",217,217,217, -,,,,4,"f",189,189,189, -,,,,5,"g",150,150,150, -,,,,6,"h",115,115,115, -,,,,7,"j",82,82,82, -,,,,8,"k",37,37,37, -,,,,9,"m",0,0,0, -"oranges",3,"seq",,1,"c",254,230,206,"sequential" -,,,,2,"f",253,174,107, -,,,,3,"i",230,85,13, -"oranges",4,"seq",,1,"b",254,237,222, -,,,,2,"e",253,190,133, -,,,,3,"g",253,141,60, -,,,,4,"j",217,71,1, -"oranges",5,"seq",,1,"b",254,237,222, -,,,,2,"e",253,190,133, -,,,,3,"g",253,141,60, -,,,,4,"i",230,85,13, -,,,,5,"k",166,54,3, -"oranges",6,"seq",,1,"b",254,237,222, -,,,,2,"d",253,208,162, -,,,,3,"f",253,174,107, -,,,,4,"g",253,141,60, -,,,,5,"i",230,85,13, -,,,,6,"k",166,54,3, -"oranges",7,"seq",,1,"b",254,237,222, -,,,,2,"d",253,208,162, -,,,,3,"f",253,174,107, -,,,,4,"g",253,141,60, -,,,,5,"h",241,105,19, -,,,,6,"j",217,72,1, -,,,,7,"l",140,45,4, -"oranges",8,"seq",,1,"a",255,245,235, -,,,,2,"c",254,230,206, -,,,,3,"d",253,208,162, -,,,,4,"f",253,174,107, -,,,,5,"g",253,141,60, -,,,,6,"h",241,105,19, -,,,,7,"j",217,72,1, -,,,,8,"l",140,45,4, -"oranges",9,"seq",,1,"a",255,245,235, -,,,,2,"c",254,230,206, -,,,,3,"d",253,208,162, -,,,,4,"f",253,174,107, -,,,,5,"g",253,141,60, -,,,,6,"h",241,105,19, -,,,,7,"j",217,72,1, -,,,,8,"k",166,54,3, -,,,,9,"m",127,39,4, -"orrd",3,"seq",,1,"c",254,232,200,"sequential" -,,,,2,"f",253,187,132, -,,,,3,"i",227,74,51, -"orrd",4,"seq",,1,"b",254,240,217, -,,,,2,"e",253,204,138, -,,,,3,"g",252,141,89, -,,,,4,"j",215,48,31, -"orrd",5,"seq",,1,"b",254,240,217, -,,,,2,"e",253,204,138, -,,,,3,"g",252,141,89, -,,,,4,"i",227,74,51, -,,,,5,"k",179,0,0, -"orrd",6,"seq",,1,"b",254,240,217, -,,,,2,"d",253,212,158, -,,,,3,"f",253,187,132, -,,,,4,"g",252,141,89, -,,,,5,"i",227,74,51, -,,,,6,"k",179,0,0, -"orrd",7,"seq",,1,"b",254,240,217, -,,,,2,"d",253,212,158, -,,,,3,"f",253,187,132, -,,,,4,"g",252,141,89, -,,,,5,"h",239,101,72, -,,,,6,"j",215,48,31, -,,,,7,"l",153,0,0, -"orrd",8,"seq",,1,"a",255,247,236, -,,,,2,"c",254,232,200, -,,,,3,"d",253,212,158, -,,,,4,"f",253,187,132, -,,,,5,"g",252,141,89, -,,,,6,"h",239,101,72, -,,,,7,"j",215,48,31, -,,,,8,"l",153,0,0, -"orrd",9,"seq",,1,"a",255,247,236, -,,,,2,"c",254,232,200, -,,,,3,"d",253,212,158, -,,,,4,"f",253,187,132, -,,,,5,"g",252,141,89, -,,,,6,"h",239,101,72, -,,,,7,"j",215,48,31, -,,,,8,"k",179,0,0, -,,,,9,"m",127,0,0, -"paired",3,"qual",,1,"a",166,206,227,"qualitative" -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -"paired",4,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -"paired",5,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -"paired",6,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -"paired",7,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -"paired",8,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -,,,,8,"h",255,127,0, -"paired",9,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -,,,,8,"h",255,127,0, -,,,,9,"i",202,178,214, -"paired",10,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -,,,,8,"h",255,127,0, -,,,,9,"i",202,178,214, -,,,,10,"j",106,61,154, -"paired",11,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -,,,,8,"h",255,127,0, -,,,,9,"i",202,178,214, -,,,,10,"j",106,61,154, -,,,,11,"k",255,255,153, -"paired",12,"qual",,1,"a",166,206,227, -,,,,2,"b",31,120,180, -,,,,3,"c",178,223,138, -,,,,4,"d",51,160,44, -,,,,5,"e",251,154,153, -,,,,6,"f",227,26,28, -,,,,7,"g",253,191,111, -,,,,8,"h",255,127,0, -,,,,9,"i",202,178,214, -,,,,10,"j",106,61,154, -,,,,11,"k",255,255,153, -,,,,12,"l",177,89,40, -"pastel1",3,"qual",,1,"a",251,180,174,"qualitative" -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -"pastel1",4,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -"pastel1",5,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -,,,,5,"e",254,217,166, -"pastel1",6,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -,,,,5,"e",254,217,166, -,,,,6,"f",255,255,204, -"pastel1",7,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -,,,,5,"e",254,217,166, -,,,,6,"f",255,255,204, -,,,,7,"g",229,216,189, -"pastel1",8,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -,,,,5,"e",254,217,166, -,,,,6,"f",255,255,204, -,,,,7,"g",229,216,189, -,,,,8,"h",253,218,236, -"pastel1",9,"qual",,1,"a",251,180,174, -,,,,2,"b",179,205,227, -,,,,3,"c",204,235,197, -,,,,4,"d",222,203,228, -,,,,5,"e",254,217,166, -,,,,6,"f",255,255,204, -,,,,7,"g",229,216,189, -,,,,8,"h",253,218,236, -,,,,9,"i",242,242,242, -"pastel2",3,"qual",,1,"a",179,226,205,"qualitative" -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -"pastel2",4,"qual",,1,"a",179,226,205, -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -,,,,4,"d",244,202,228, -"pastel2",5,"qual",,1,"a",179,226,205, -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -,,,,4,"d",244,202,228, -,,,,5,"e",230,245,201, -"pastel2",6,"qual",,1,"a",179,226,205, -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -,,,,4,"d",244,202,228, -,,,,5,"e",230,245,201, -,,,,6,"f",255,242,174, -"pastel2",7,"qual",,1,"a",179,226,205, -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -,,,,4,"d",244,202,228, -,,,,5,"e",230,245,201, -,,,,6,"f",255,242,174, -,,,,7,"g",241,226,204, -"pastel2",8,"qual",,1,"a",179,226,205, -,,,,2,"b",253,205,172, -,,,,3,"c",203,213,232, -,,,,4,"d",244,202,228, -,,,,5,"e",230,245,201, -,,,,6,"f",255,242,174, -,,,,7,"g",241,226,204, -,,,,8,"h",204,204,204, -"piyg",3,"div",2,1,"e",233,163,201,"diverging" -,,,,2,"h",247,247,247, -,,,,3,"k",161,215,106, -"piyg",4,"div",2.5,1,"c",208,28,139, -,,,,2,"f",241,182,218, -,,,,3,"j",184,225,134, -,,,,4,"m",77,172,38, -"piyg",5,"div",3,1,"c",208,28,139, -,,,,2,"f",241,182,218, -,,,,3,"h",247,247,247, -,,,,4,"j",184,225,134, -,,,,5,"m",77,172,38, -"piyg",6,"div",3.5,1,"b",197,27,125, -,,,,2,"e",233,163,201, -,,,,3,"g",253,224,239, -,,,,4,"i",230,245,208, -,,,,5,"k",161,215,106, -,,,,6,"n",77,146,33, -"piyg",7,"div",4,1,"b",197,27,125, -,,,,2,"e",233,163,201, -,,,,3,"g",253,224,239, -,,,,4,"h",247,247,247, -,,,,5,"i",230,245,208, -,,,,6,"k",161,215,106, -,,,,7,"n",77,146,33, -"piyg",8,"div",4.5,1,"b",197,27,125, -,,,,2,"d",222,119,174, -,,,,3,"f",241,182,218, -,,,,4,"g",253,224,239, -,,,,5,"i",230,245,208, -,,,,6,"j",184,225,134, -,,,,7,"l",127,188,65, -,,,,8,"n",77,146,33, -"piyg",9,"div",5,1,"b",197,27,125, -,,,,2,"d",222,119,174, -,,,,3,"f",241,182,218, -,,,,4,"g",253,224,239, -,,,,5,"h",247,247,247, -,,,,6,"i",230,245,208, -,,,,7,"j",184,225,134, -,,,,8,"l",127,188,65, -,,,,9,"n",77,146,33, -"piyg",10,"div",5.5,1,"a",142,1,82, -,,,,2,"b",197,27,125, -,,,,3,"d",222,119,174, -,,,,4,"f",241,182,218, -,,,,5,"g",253,224,239, -,,,,6,"i",230,245,208, -,,,,7,"j",184,225,134, -,,,,8,"l",127,188,65, -,,,,9,"n",77,146,33, -,,,,10,"o",39,100,25, -"piyg",11,"div",6,1,"a",142,1,82, -,,,,2,"b",197,27,125, -,,,,3,"d",222,119,174, -,,,,4,"f",241,182,218, -,,,,5,"g",253,224,239, -,,,,6,"h",247,247,247, -,,,,7,"i",230,245,208, -,,,,8,"j",184,225,134, -,,,,9,"l",127,188,65, -,,,,10,"n",77,146,33, -,,,,11,"o",39,100,25, -"prgn",3,"div",2,1,"e",175,141,195,"diverging" -,,,,2,"h",247,247,247, -,,,,3,"k",127,191,123, -"prgn",4,"div",2.5,1,"c",123,50,148, -,,,,2,"f",194,165,207, -,,,,3,"j",166,219,160, -,,,,4,"m",0,136,55, -"prgn",5,"div",3,1,"c",123,50,148, -,,,,2,"f",194,165,207, -,,,,3,"h",247,247,247, -,,,,4,"j",166,219,160, -,,,,5,"m",0,136,55, -"prgn",6,"div",3.5,1,"b",118,42,131, -,,,,2,"e",175,141,195, -,,,,3,"g",231,212,232, -,,,,4,"i",217,240,211, -,,,,5,"k",127,191,123, -,,,,6,"n",27,120,55, -"prgn",7,"div",4,1,"b",118,42,131, -,,,,2,"e",175,141,195, -,,,,3,"g",231,212,232, -,,,,4,"h",247,247,247, -,,,,5,"i",217,240,211, -,,,,6,"k",127,191,123, -,,,,7,"n",27,120,55, -"prgn",8,"div",4.5,1,"b",118,42,131, -,,,,2,"d",153,112,171, -,,,,3,"f",194,165,207, -,,,,4,"g",231,212,232, -,,,,5,"i",217,240,211, -,,,,6,"j",166,219,160, -,,,,7,"l",90,174,97, -,,,,8,"n",27,120,55, -"prgn",9,"div",5,1,"b",118,42,131, -,,,,2,"d",153,112,171, -,,,,3,"f",194,165,207, -,,,,4,"g",231,212,232, -,,,,5,"h",247,247,247, -,,,,6,"i",217,240,211, -,,,,7,"j",166,219,160, -,,,,8,"l",90,174,97, -,,,,9,"n",27,120,55, -"prgn",10,"div",5.5,1,"a",64,0,75, -,,,,2,"b",118,42,131, -,,,,3,"d",153,112,171, -,,,,4,"f",194,165,207, -,,,,5,"g",231,212,232, -,,,,6,"i",217,240,211, -,,,,7,"j",166,219,160, -,,,,8,"l",90,174,97, -,,,,9,"n",27,120,55, -,,,,10,"o",0,68,27, -"prgn",11,"div",6,1,"a",64,0,75, -,,,,2,"b",118,42,131, -,,,,3,"d",153,112,171, -,,,,4,"f",194,165,207, -,,,,5,"g",231,212,232, -,,,,6,"h",247,247,247, -,,,,7,"i",217,240,211, -,,,,8,"j",166,219,160, -,,,,9,"l",90,174,97, -,,,,10,"n",27,120,55, -,,,,11,"o",0,68,27, -"pubu",3,"seq",,1,"c",236,231,242,"sequential" -,,,,2,"f",166,189,219, -,,,,3,"i",43,140,190, -"pubu",4,"seq",,1,"b",241,238,246, -,,,,2,"e",189,201,225, -,,,,3,"g",116,169,207, -,,,,4,"j",5,112,176, -"pubu",5,"seq",,1,"b",241,238,246, -,,,,2,"e",189,201,225, -,,,,3,"g",116,169,207, -,,,,4,"i",43,140,190, -,,,,5,"k",4,90,141, -"pubu",6,"seq",,1,"b",241,238,246, -,,,,2,"d",208,209,230, -,,,,3,"f",166,189,219, -,,,,4,"g",116,169,207, -,,,,5,"i",43,140,190, -,,,,6,"k",4,90,141, -"pubu",7,"seq",,1,"b",241,238,246, -,,,,2,"d",208,209,230, -,,,,3,"f",166,189,219, -,,,,4,"g",116,169,207, -,,,,5,"h",54,144,192, -,,,,6,"j",5,112,176, -,,,,7,"l",3,78,123, -"pubu",8,"seq",,1,"a",255,247,251, -,,,,2,"c",236,231,242, -,,,,3,"d",208,209,230, -,,,,4,"f",166,189,219, -,,,,5,"g",116,169,207, -,,,,6,"h",54,144,192, -,,,,7,"j",5,112,176, -,,,,8,"l",3,78,123, -"pubu",9,"seq",,1,"a",255,247,251, -,,,,2,"c",236,231,242, -,,,,3,"d",208,209,230, -,,,,4,"f",166,189,219, -,,,,5,"g",116,169,207, -,,,,6,"h",54,144,192, -,,,,7,"j",5,112,176, -,,,,8,"k",4,90,141, -,,,,9,"m",2,56,88, -"pubugn",3,"seq",,1,"c",236,226,240,"sequential" -,,,,2,"f",166,189,219, -,,,,3,"i",28,144,153, -"pubugn",4,"seq",,1,"b",246,239,247, -,,,,2,"e",189,201,225, -,,,,3,"g",103,169,207, -,,,,4,"j",2,129,138, -"pubugn",5,"seq",,1,"b",246,239,247, -,,,,2,"e",189,201,225, -,,,,3,"g",103,169,207, -,,,,4,"i",28,144,153, -,,,,5,"k",1,108,89, -"pubugn",6,"seq",,1,"b",246,239,247, -,,,,2,"d",208,209,230, -,,,,3,"f",166,189,219, -,,,,4,"g",103,169,207, -,,,,5,"i",28,144,153, -,,,,6,"k",1,108,89, -"pubugn",7,"seq",,1,"b",246,239,247, -,,,,2,"d",208,209,230, -,,,,3,"f",166,189,219, -,,,,4,"g",103,169,207, -,,,,5,"h",54,144,192, -,,,,6,"j",2,129,138, -,,,,7,"l",1,100,80, -"pubugn",8,"seq",,1,"a",255,247,251, -,,,,2,"c",236,226,240, -,,,,3,"d",208,209,230, -,,,,4,"f",166,189,219, -,,,,5,"g",103,169,207, -,,,,6,"h",54,144,192, -,,,,7,"j",2,129,138, -,,,,8,"l",1,100,80, -"pubugn",9,"seq",,1,"a",255,247,251, -,,,,2,"c",236,226,240, -,,,,3,"d",208,209,230, -,,,,4,"f",166,189,219, -,,,,5,"g",103,169,207, -,,,,6,"h",54,144,192, -,,,,7,"j",2,129,138, -,,,,8,"k",1,108,89, -,,,,9,"m",1,70,54, -"puor",3,"div",2,1,"e",241,163,64,"diverging" -,,,,2,"h",247,247,247, -,,,,3,"k",153,142,195, -"puor",4,"div",2.5,1,"c",230,97,1, -,,,,2,"f",253,184,99, -,,,,3,"j",178,171,210, -,,,,4,"m",94,60,153, -"puor",5,"div",3,1,"c",230,97,1, -,,,,2,"f",253,184,99, -,,,,3,"h",247,247,247, -,,,,4,"j",178,171,210, -,,,,5,"m",94,60,153, -"puor",6,"div",3.5,1,"b",179,88,6, -,,,,2,"e",241,163,64, -,,,,3,"g",254,224,182, -,,,,4,"i",216,218,235, -,,,,5,"k",153,142,195, -,,,,6,"n",84,39,136, -"puor",7,"div",4,1,"b",179,88,6, -,,,,2,"e",241,163,64, -,,,,3,"g",254,224,182, -,,,,4,"h",247,247,247, -,,,,5,"i",216,218,235, -,,,,6,"k",153,142,195, -,,,,7,"n",84,39,136, -"puor",8,"div",4.5,1,"b",179,88,6, -,,,,2,"d",224,130,20, -,,,,3,"f",253,184,99, -,,,,4,"g",254,224,182, -,,,,5,"i",216,218,235, -,,,,6,"j",178,171,210, -,,,,7,"l",128,115,172, -,,,,8,"n",84,39,136, -"puor",9,"div",5,1,"b",179,88,6, -,,,,2,"d",224,130,20, -,,,,3,"f",253,184,99, -,,,,4,"g",254,224,182, -,,,,5,"h",247,247,247, -,,,,6,"i",216,218,235, -,,,,7,"j",178,171,210, -,,,,8,"l",128,115,172, -,,,,9,"n",84,39,136, -"puor",10,"div",5.5,1,"a",127,59,8, -,,,,2,"b",179,88,6, -,,,,3,"d",224,130,20, -,,,,4,"f",253,184,99, -,,,,5,"g",254,224,182, -,,,,6,"i",216,218,235, -,,,,7,"j",178,171,210, -,,,,8,"l",128,115,172, -,,,,9,"n",84,39,136, -,,,,10,"o",45,0,75, -"puor",11,"div",6,1,"a",127,59,8, -,,,,2,"b",179,88,6, -,,,,3,"d",224,130,20, -,,,,4,"f",253,184,99, -,,,,5,"g",254,224,182, -,,,,6,"h",247,247,247, -,,,,7,"i",216,218,235, -,,,,8,"j",178,171,210, -,,,,9,"l",128,115,172, -,,,,10,"n",84,39,136, -,,,,11,"o",45,0,75, -"purd",3,"seq",,1,"c",231,225,239,"sequential" -,,,,2,"f",201,148,199, -,,,,3,"i",221,28,119, -"purd",4,"seq",,1,"b",241,238,246, -,,,,2,"e",215,181,216, -,,,,3,"g",223,101,176, -,,,,4,"j",206,18,86, -"purd",5,"seq",,1,"b",241,238,246, -,,,,2,"e",215,181,216, -,,,,3,"g",223,101,176, -,,,,4,"i",221,28,119, -,,,,5,"k",152,0,67, -"purd",6,"seq",,1,"b",241,238,246, -,,,,2,"d",212,185,218, -,,,,3,"f",201,148,199, -,,,,4,"g",223,101,176, -,,,,5,"i",221,28,119, -,,,,6,"k",152,0,67, -"purd",7,"seq",,1,"b",241,238,246, -,,,,2,"d",212,185,218, -,,,,3,"f",201,148,199, -,,,,4,"g",223,101,176, -,,,,5,"h",231,41,138, -,,,,6,"j",206,18,86, -,,,,7,"l",145,0,63, -"purd",8,"seq",,1,"a",247,244,249, -,,,,2,"c",231,225,239, -,,,,3,"d",212,185,218, -,,,,4,"f",201,148,199, -,,,,5,"g",223,101,176, -,,,,6,"h",231,41,138, -,,,,7,"j",206,18,86, -,,,,8,"l",145,0,63, -"purd",9,"seq",,1,"a",247,244,249, -,,,,2,"c",231,225,239, -,,,,3,"d",212,185,218, -,,,,4,"f",201,148,199, -,,,,5,"g",223,101,176, -,,,,6,"h",231,41,138, -,,,,7,"j",206,18,86, -,,,,8,"k",152,0,67, -,,,,9,"m",103,0,31, -"purples",3,"seq",,1,"c",239,237,245,"sequential" -,,,,2,"f",188,189,220, -,,,,3,"i",117,107,177, -"purples",4,"seq",,1,"b",242,240,247, -,,,,2,"e",203,201,226, -,,,,3,"g",158,154,200, -,,,,4,"j",106,81,163, -"purples",5,"seq",,1,"b",242,240,247, -,,,,2,"e",203,201,226, -,,,,3,"g",158,154,200, -,,,,4,"i",117,107,177, -,,,,5,"k",84,39,143, -"purples",6,"seq",,1,"b",242,240,247, -,,,,2,"d",218,218,235, -,,,,3,"f",188,189,220, -,,,,4,"g",158,154,200, -,,,,5,"i",117,107,177, -,,,,6,"k",84,39,143, -"purples",7,"seq",,1,"b",242,240,247, -,,,,2,"d",218,218,235, -,,,,3,"f",188,189,220, -,,,,4,"g",158,154,200, -,,,,5,"h",128,125,186, -,,,,6,"j",106,81,163, -,,,,7,"l",74,20,134, -"purples",8,"seq",,1,"a",252,251,253, -,,,,2,"c",239,237,245, -,,,,3,"d",218,218,235, -,,,,4,"f",188,189,220, -,,,,5,"g",158,154,200, -,,,,6,"h",128,125,186, -,,,,7,"j",106,81,163, -,,,,8,"l",74,20,134, -"purples",9,"seq",,1,"a",252,251,253, -,,,,2,"c",239,237,245, -,,,,3,"d",218,218,235, -,,,,4,"f",188,189,220, -,,,,5,"g",158,154,200, -,,,,6,"h",128,125,186, -,,,,7,"j",106,81,163, -,,,,8,"k",84,39,143, -,,,,9,"m",63,0,125, -"rdbu",3,"div",2,1,"e",239,138,98,"diverging" -,,,,2,"h",247,247,247, -,,,,3,"k",103,169,207, -"rdbu",4,"div",2.5,1,"c",202,0,32, -,,,,2,"f",244,165,130, -,,,,3,"j",146,197,222, -,,,,4,"m",5,113,176, -"rdbu",5,"div",3,1,"c",202,0,32, -,,,,2,"f",244,165,130, -,,,,3,"h",247,247,247, -,,,,4,"j",146,197,222, -,,,,5,"m",5,113,176, -"rdbu",6,"div",3.5,1,"b",178,24,43, -,,,,2,"e",239,138,98, -,,,,3,"g",253,219,199, -,,,,4,"i",209,229,240, -,,,,5,"k",103,169,207, -,,,,6,"n",33,102,172, -"rdbu",7,"div",4,1,"b",178,24,43, -,,,,2,"e",239,138,98, -,,,,3,"g",253,219,199, -,,,,4,"h",247,247,247, -,,,,5,"i",209,229,240, -,,,,6,"k",103,169,207, -,,,,7,"n",33,102,172, -"rdbu",8,"div",4.5,1,"b",178,24,43, -,,,,2,"d",214,96,77, -,,,,3,"f",244,165,130, -,,,,4,"g",253,219,199, -,,,,5,"i",209,229,240, -,,,,6,"j",146,197,222, -,,,,7,"l",67,147,195, -,,,,8,"n",33,102,172, -"rdbu",9,"div",5,1,"b",178,24,43, -,,,,2,"d",214,96,77, -,,,,3,"f",244,165,130, -,,,,4,"g",253,219,199, -,,,,5,"h",247,247,247, -,,,,6,"i",209,229,240, -,,,,7,"j",146,197,222, -,,,,8,"l",67,147,195, -,,,,9,"n",33,102,172, -"rdbu",10,"div",5.5,1,"a",103,0,31, -,,,,2,"b",178,24,43, -,,,,3,"d",214,96,77, -,,,,4,"f",244,165,130, -,,,,5,"g",253,219,199, -,,,,6,"i",209,229,240, -,,,,7,"j",146,197,222, -,,,,8,"l",67,147,195, -,,,,9,"n",33,102,172, -,,,,10,"o",5,48,97, -"rdbu",11,"div",6,1,"a",103,0,31, -,,,,2,"b",178,24,43, -,,,,3,"d",214,96,77, -,,,,4,"f",244,165,130, -,,,,5,"g",253,219,199, -,,,,6,"h",247,247,247, -,,,,7,"i",209,229,240, -,,,,8,"j",146,197,222, -,,,,9,"l",67,147,195, -,,,,10,"n",33,102,172, -,,,,11,"o",5,48,97, -"rdgy",3,"div",2,1,"e",239,138,98,"diverging" -,,,,2,"h",255,255,255, -,,,,3,"k",153,153,153, -"rdgy",4,"div",2.5,1,"c",202,0,32, -,,,,2,"f",244,165,130, -,,,,3,"j",186,186,186, -,,,,4,"m",64,64,64, -"rdgy",5,"div",3,1,"c",202,0,32, -,,,,2,"f",244,165,130, -,,,,3,"h",255,255,255, -,,,,4,"j",186,186,186, -,,,,5,"m",64,64,64, -"rdgy",6,"div",3.5,1,"b",178,24,43, -,,,,2,"e",239,138,98, -,,,,3,"g",253,219,199, -,,,,4,"i",224,224,224, -,,,,5,"k",153,153,153, -,,,,6,"n",77,77,77, -"rdgy",7,"div",4,1,"b",178,24,43, -,,,,2,"e",239,138,98, -,,,,3,"g",253,219,199, -,,,,4,"h",255,255,255, -,,,,5,"i",224,224,224, -,,,,6,"k",153,153,153, -,,,,7,"n",77,77,77, -"rdgy",8,"div",4.5,1,"b",178,24,43, -,,,,2,"d",214,96,77, -,,,,3,"f",244,165,130, -,,,,4,"g",253,219,199, -,,,,5,"i",224,224,224, -,,,,6,"j",186,186,186, -,,,,7,"l",135,135,135, -,,,,8,"n",77,77,77, -"rdgy",9,"div",5,1,"b",178,24,43, -,,,,2,"d",214,96,77, -,,,,3,"f",244,165,130, -,,,,4,"g",253,219,199, -,,,,5,"h",255,255,255, -,,,,6,"i",224,224,224, -,,,,7,"j",186,186,186, -,,,,8,"l",135,135,135, -,,,,9,"n",77,77,77, -"rdgy",10,"div",5.5,1,"a",103,0,31, -,,,,2,"b",178,24,43, -,,,,3,"d",214,96,77, -,,,,4,"f",244,165,130, -,,,,5,"g",253,219,199, -,,,,6,"i",224,224,224, -,,,,7,"j",186,186,186, -,,,,8,"l",135,135,135, -,,,,9,"n",77,77,77, -,,,,10,"o",26,26,26, -"rdgy",11,"div",6,1,"a",103,0,31, -,,,,2,"b",178,24,43, -,,,,3,"d",214,96,77, -,,,,4,"f",244,165,130, -,,,,5,"g",253,219,199, -,,,,6,"h",255,255,255, -,,,,7,"i",224,224,224, -,,,,8,"j",186,186,186, -,,,,9,"l",135,135,135, -,,,,10,"n",77,77,77, -,,,,11,"o",26,26,26, -"rdpu",3,"seq",,1,"c",253,224,221,"sequential" -,,,,2,"f",250,159,181, -,,,,3,"i",197,27,138, -"rdpu",4,"seq",,1,"b",254,235,226, -,,,,2,"e",251,180,185, -,,,,3,"g",247,104,161, -,,,,4,"j",174,1,126, -"rdpu",5,"seq",,1,"b",254,235,226, -,,,,2,"e",251,180,185, -,,,,3,"g",247,104,161, -,,,,4,"i",197,27,138, -,,,,5,"k",122,1,119, -"rdpu",6,"seq",,1,"b",254,235,226, -,,,,2,"d",252,197,192, -,,,,3,"f",250,159,181, -,,,,4,"g",247,104,161, -,,,,5,"i",197,27,138, -,,,,6,"k",122,1,119, -"rdpu",7,"seq",,1,"b",254,235,226, -,,,,2,"d",252,197,192, -,,,,3,"f",250,159,181, -,,,,4,"g",247,104,161, -,,,,5,"h",221,52,151, -,,,,6,"j",174,1,126, -,,,,7,"l",122,1,119, -"rdpu",8,"seq",,1,"a",255,247,243, -,,,,2,"c",253,224,221, -,,,,3,"d",252,197,192, -,,,,4,"f",250,159,181, -,,,,5,"g",247,104,161, -,,,,6,"h",221,52,151, -,,,,7,"j",174,1,126, -,,,,8,"l",122,1,119, -"rdpu",9,"seq",,1,"a",255,247,243, -,,,,2,"c",253,224,221, -,,,,3,"d",252,197,192, -,,,,4,"f",250,159,181, -,,,,5,"g",247,104,161, -,,,,6,"h",221,52,151, -,,,,7,"j",174,1,126, -,,,,8,"k",122,1,119, -,,,,9,"m",73,0,106, -"reds",3,"seq",,1,"c",254,224,210,"sequential" -,,,,2,"f",252,146,114, -,,,,3,"i",222,45,38, -"reds",4,"seq",,1,"b",254,229,217, -,,,,2,"e",252,174,145, -,,,,3,"g",251,106,74, -,,,,4,"j",203,24,29, -"reds",5,"seq",,1,"b",254,229,217, -,,,,2,"e",252,174,145, -,,,,3,"g",251,106,74, -,,,,4,"i",222,45,38, -,,,,5,"k",165,15,21, -"reds",6,"seq",,1,"b",254,229,217, -,,,,2,"d",252,187,161, -,,,,3,"f",252,146,114, -,,,,4,"g",251,106,74, -,,,,5,"i",222,45,38, -,,,,6,"k",165,15,21, -"reds",7,"seq",,1,"b",254,229,217, -,,,,2,"d",252,187,161, -,,,,3,"f",252,146,114, -,,,,4,"g",251,106,74, -,,,,5,"h",239,59,44, -,,,,6,"j",203,24,29, -,,,,7,"l",153,0,13, -"reds",8,"seq",,1,"a",255,245,240, -,,,,2,"c",254,224,210, -,,,,3,"d",252,187,161, -,,,,4,"f",252,146,114, -,,,,5,"g",251,106,74, -,,,,6,"h",239,59,44, -,,,,7,"j",203,24,29, -,,,,8,"l",153,0,13, -"reds",9,"seq",,1,"a",255,245,240, -,,,,2,"c",254,224,210, -,,,,3,"d",252,187,161, -,,,,4,"f",252,146,114, -,,,,5,"g",251,106,74, -,,,,6,"h",239,59,44, -,,,,7,"j",203,24,29, -,,,,8,"k",165,15,21, -,,,,9,"m",103,0,13, -"rdylbu",3,"div",2,1,"e",252,141,89,"diverging" -,,,,2,"h",255,255,191, -,,,,3,"k",145,191,219, -"rdylbu",4,"div",2.5,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"j",171,217,233, -,,,,4,"m",44,123,182, -"rdylbu",5,"div",3,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"h",255,255,191, -,,,,4,"j",171,217,233, -,,,,5,"m",44,123,182, -"rdylbu",6,"div",3.5,1,"b",215,48,39, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,144, -,,,,4,"i",224,243,248, -,,,,5,"k",145,191,219, -,,,,6,"n",69,117,180, -"rdylbu",7,"div",4,1,"b",215,48,39, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,144, -,,,,4,"h",255,255,191, -,,,,5,"i",224,243,248, -,,,,6,"k",145,191,219, -,,,,7,"n",69,117,180, -"rdylbu",8,"div",4.5,1,"b",215,48,39, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,144, -,,,,5,"i",224,243,248, -,,,,6,"j",171,217,233, -,,,,7,"l",116,173,209, -,,,,8,"n",69,117,180, -"rdylbu",9,"div",5,1,"b",215,48,39, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,144, -,,,,5,"h",255,255,191, -,,,,6,"i",224,243,248, -,,,,7,"j",171,217,233, -,,,,8,"l",116,173,209, -,,,,9,"n",69,117,180, -"rdylbu",10,"div",5.5,1,"a",165,0,38, -,,,,2,"b",215,48,39, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,144, -,,,,6,"i",224,243,248, -,,,,7,"j",171,217,233, -,,,,8,"l",116,173,209, -,,,,9,"n",69,117,180, -,,,,10,"o",49,54,149, -"rdylbu",11,"div",6,1,"a",165,0,38, -,,,,2,"b",215,48,39, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,144, -,,,,6,"h",255,255,191, -,,,,7,"i",224,243,248, -,,,,8,"j",171,217,233, -,,,,9,"l",116,173,209, -,,,,10,"n",69,117,180, -,,,,11,"o",49,54,149, -"rdylgn",3,"div",2,1,"e",252,141,89,"diverging" -,,,,2,"h",255,255,191, -,,,,3,"k",145,207,96, -"rdylgn",4,"div",2.5,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"j",166,217,106, -,,,,4,"m",26,150,65, -"rdylgn",5,"div",3,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"h",255,255,191, -,,,,4,"j",166,217,106, -,,,,5,"m",26,150,65, -"rdylgn",6,"div",3.5,1,"b",215,48,39, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,139, -,,,,4,"i",217,239,139, -,,,,5,"k",145,207,96, -,,,,6,"n",26,152,80, -"rdylgn",7,"div",4,1,"b",215,48,39, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,139, -,,,,4,"h",255,255,191, -,,,,5,"i",217,239,139, -,,,,6,"k",145,207,96, -,,,,7,"n",26,152,80, -"rdylgn",8,"div",4.5,1,"b",215,48,39, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,139, -,,,,5,"i",217,239,139, -,,,,6,"j",166,217,106, -,,,,7,"l",102,189,99, -,,,,8,"n",26,152,80, -"rdylgn",9,"div",5,1,"b",215,48,39, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,139, -,,,,5,"h",255,255,191, -,,,,6,"i",217,239,139, -,,,,7,"j",166,217,106, -,,,,8,"l",102,189,99, -,,,,9,"n",26,152,80, -"rdylgn",10,"div",5.5,1,"a",165,0,38, -,,,,2,"b",215,48,39, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,139, -,,,,6,"i",217,239,139, -,,,,7,"j",166,217,106, -,,,,8,"l",102,189,99, -,,,,9,"n",26,152,80, -,,,,10,"o",0,104,55, -"rdylgn",11,"div",6,1,"a",165,0,38, -,,,,2,"b",215,48,39, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,139, -,,,,6,"h",255,255,191, -,,,,7,"i",217,239,139, -,,,,8,"j",166,217,106, -,,,,9,"l",102,189,99, -,,,,10,"n",26,152,80, -,,,,11,"o",0,104,55, -"set1",3,"qual",,1,"a",228,26,28,"qualitative" -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -"set1",4,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -"set1",5,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -,,,,5,"e",255,127,0, -"set1",6,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -,,,,5,"e",255,127,0, -,,,,6,"f",255,255,51, -"set1",7,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -,,,,5,"e",255,127,0, -,,,,6,"f",255,255,51, -,,,,7,"g",166,86,40, -"set1",8,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -,,,,5,"e",255,127,0, -,,,,6,"f",255,255,51, -,,,,7,"g",166,86,40, -,,,,8,"h",247,129,191, -"set1",9,"qual",,1,"a",228,26,28, -,,,,2,"b",55,126,184, -,,,,3,"c",77,175,74, -,,,,4,"d",152,78,163, -,,,,5,"e",255,127,0, -,,,,6,"f",255,255,51, -,,,,7,"g",166,86,40, -,,,,8,"h",247,129,191, -,,,,9,"i",153,153,153, -"set2",3,"qual",,1,"a",102,194,165,"qualitative" -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -"set2",4,"qual",,1,"a",102,194,165, -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -,,,,4,"d",231,138,195, -"set2",5,"qual",,1,"a",102,194,165, -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -,,,,4,"d",231,138,195, -,,,,5,"e",166,216,84, -"set2",6,"qual",,1,"a",102,194,165, -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -,,,,4,"d",231,138,195, -,,,,5,"e",166,216,84, -,,,,6,"f",255,217,47, -"set2",7,"qual",,1,"a",102,194,165, -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -,,,,4,"d",231,138,195, -,,,,5,"e",166,216,84, -,,,,6,"f",255,217,47, -,,,,7,"g",229,196,148, -"set2",8,"qual",,1,"a",102,194,165, -,,,,2,"b",252,141,98, -,,,,3,"c",141,160,203, -,,,,4,"d",231,138,195, -,,,,5,"e",166,216,84, -,,,,6,"f",255,217,47, -,,,,7,"g",229,196,148, -,,,,8,"h",179,179,179, -"set3",3,"qual",,1,"a",141,211,199,"qualitative" -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -"set3",4,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -"set3",5,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -"set3",6,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -"set3",7,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -"set3",8,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -,,,,8,"h",252,205,229, -"set3",9,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -,,,,8,"h",252,205,229, -,,,,9,"i",217,217,217, -"set3",10,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -,,,,8,"h",252,205,229, -,,,,9,"i",217,217,217, -,,,,10,"j",188,128,189, -"set3",11,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -,,,,8,"h",252,205,229, -,,,,9,"i",217,217,217, -,,,,10,"j",188,128,189, -,,,,11,"k",204,235,197, -"set3",12,"qual",,1,"a",141,211,199, -,,,,2,"b",255,255,179, -,,,,3,"c",190,186,218, -,,,,4,"d",251,128,114, -,,,,5,"e",128,177,211, -,,,,6,"f",253,180,98, -,,,,7,"g",179,222,105, -,,,,8,"h",252,205,229, -,,,,9,"i",217,217,217, -,,,,10,"j",188,128,189, -,,,,11,"k",204,235,197, -,,,,12,"l",255,237,111, -"spectral",3,"div",2,1,"e",252,141,89,"diverging" -,,,,2,"h",255,255,191, -,,,,3,"k",153,213,148, -"spectral",4,"div",2.5,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"j",171,221,164, -,,,,4,"m",43,131,186, -"spectral",5,"div",3,1,"c",215,25,28, -,,,,2,"f",253,174,97, -,,,,3,"h",255,255,191, -,,,,4,"j",171,221,164, -,,,,5,"m",43,131,186, -"spectral",6,"div",3.5,1,"b",213,62,79, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,139, -,,,,4,"i",230,245,152, -,,,,5,"k",153,213,148, -,,,,6,"n",50,136,189, -"spectral",7,"div",4,1,"b",213,62,79, -,,,,2,"e",252,141,89, -,,,,3,"g",254,224,139, -,,,,4,"h",255,255,191, -,,,,5,"i",230,245,152, -,,,,6,"k",153,213,148, -,,,,7,"n",50,136,189, -"spectral",8,"div",4.5,1,"b",213,62,79, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,139, -,,,,5,"i",230,245,152, -,,,,6,"j",171,221,164, -,,,,7,"l",102,194,165, -,,,,8,"n",50,136,189, -"spectral",9,"div",5,1,"b",213,62,79, -,,,,2,"d",244,109,67, -,,,,3,"f",253,174,97, -,,,,4,"g",254,224,139, -,,,,5,"h",255,255,191, -,,,,6,"i",230,245,152, -,,,,7,"j",171,221,164, -,,,,8,"l",102,194,165, -,,,,9,"n",50,136,189, -"spectral",10,"div",5.5,1,"a",158,1,66, -,,,,2,"b",213,62,79, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,139, -,,,,6,"i",230,245,152, -,,,,7,"j",171,221,164, -,,,,8,"l",102,194,165, -,,,,9,"n",50,136,189, -,,,,10,"o",94,79,162, -"spectral",11,"div",6,1,"a",158,1,66, -,,,,2,"b",213,62,79, -,,,,3,"d",244,109,67, -,,,,4,"f",253,174,97, -,,,,5,"g",254,224,139, -,,,,6,"h",255,255,191, -,,,,7,"i",230,245,152, -,,,,8,"j",171,221,164, -,,,,9,"l",102,194,165, -,,,,10,"n",50,136,189, -,,,,11,"o",94,79,162, -"ylgn",3,"seq",,1,"c",247,252,185,"sequential" -,,,,2,"f",173,221,142, -,,,,3,"i",49,163,84, -"ylgn",4,"seq",,1,"b",255,255,204, -,,,,2,"e",194,230,153, -,,,,3,"g",120,198,121, -,,,,4,"j",35,132,67, -"ylgn",5,"seq",,1,"b",255,255,204, -,,,,2,"e",194,230,153, -,,,,3,"g",120,198,121, -,,,,4,"i",49,163,84, -,,,,5,"k",0,104,55, -"ylgn",6,"seq",,1,"b",255,255,204, -,,,,2,"d",217,240,163, -,,,,3,"f",173,221,142, -,,,,4,"g",120,198,121, -,,,,5,"i",49,163,84, -,,,,6,"k",0,104,55, -"ylgn",7,"seq",,1,"b",255,255,204, -,,,,2,"d",217,240,163, -,,,,3,"f",173,221,142, -,,,,4,"g",120,198,121, -,,,,5,"h",65,171,93, -,,,,6,"j",35,132,67, -,,,,7,"l",0,90,50, -"ylgn",8,"seq",,1,"a",255,255,229, -,,,,2,"c",247,252,185, -,,,,3,"d",217,240,163, -,,,,4,"f",173,221,142, -,,,,5,"g",120,198,121, -,,,,6,"h",65,171,93, -,,,,7,"j",35,132,67, -,,,,8,"l",0,90,50, -"ylgn",9,"seq",,1,"a",255,255,229, -,,,,2,"c",247,252,185, -,,,,3,"d",217,240,163, -,,,,4,"f",173,221,142, -,,,,5,"g",120,198,121, -,,,,6,"h",65,171,93, -,,,,7,"j",35,132,67, -,,,,8,"k",0,104,55, -,,,,9,"m",0,69,41, -"ylgnbu",3,"seq",,1,"c",237,248,177,"sequential" -,,,,2,"f",127,205,187, -,,,,3,"i",44,127,184, -"ylgnbu",4,"seq",,1,"b",255,255,204, -,,,,2,"e",161,218,180, -,,,,3,"g",65,182,196, -,,,,4,"j",34,94,168, -"ylgnbu",5,"seq",,1,"b",255,255,204, -,,,,2,"e",161,218,180, -,,,,3,"g",65,182,196, -,,,,4,"i",44,127,184, -,,,,5,"k",37,52,148, -"ylgnbu",6,"seq",,1,"b",255,255,204, -,,,,2,"d",199,233,180, -,,,,3,"f",127,205,187, -,,,,4,"g",65,182,196, -,,,,5,"i",44,127,184, -,,,,6,"k",37,52,148, -"ylgnbu",7,"seq",,1,"b",255,255,204, -,,,,2,"d",199,233,180, -,,,,3,"f",127,205,187, -,,,,4,"g",65,182,196, -,,,,5,"h",29,145,192, -,,,,6,"j",34,94,168, -,,,,7,"l",12,44,132, -"ylgnbu",8,"seq",,1,"a",255,255,217, -,,,,2,"c",237,248,177, -,,,,3,"d",199,233,180, -,,,,4,"f",127,205,187, -,,,,5,"g",65,182,196, -,,,,6,"h",29,145,192, -,,,,7,"j",34,94,168, -,,,,8,"l",12,44,132, -"ylgnbu",9,"seq",,1,"a",255,255,217, -,,,,2,"c",237,248,177, -,,,,3,"d",199,233,180, -,,,,4,"f",127,205,187, -,,,,5,"g",65,182,196, -,,,,6,"h",29,145,192, -,,,,7,"j",34,94,168, -,,,,8,"k",37,52,148, -,,,,9,"m",8,29,88, -"ylorbr",3,"seq",,1,"c",255,247,188,"sequential" -,,,,2,"f",254,196,79, -,,,,3,"i",217,95,14, -"ylorbr",4,"seq",,1,"b",255,255,212, -,,,,2,"e",254,217,142, -,,,,3,"g",254,153,41, -,,,,4,"j",204,76,2, -"ylorbr",5,"seq",,1,"b",255,255,212, -,,,,2,"e",254,217,142, -,,,,3,"g",254,153,41, -,,,,4,"i",217,95,14, -,,,,5,"k",153,52,4, -"ylorbr",6,"seq",,1,"b",255,255,212, -,,,,2,"d",254,227,145, -,,,,3,"f",254,196,79, -,,,,4,"g",254,153,41, -,,,,5,"i",217,95,14, -,,,,6,"k",153,52,4, -"ylorbr",7,"seq",,1,"b",255,255,212, -,,,,2,"d",254,227,145, -,,,,3,"f",254,196,79, -,,,,4,"g",254,153,41, -,,,,5,"h",236,112,20, -,,,,6,"j",204,76,2, -,,,,7,"l",140,45,4, -"ylorbr",8,"seq",,1,"a",255,255,229, -,,,,2,"c",255,247,188, -,,,,3,"d",254,227,145, -,,,,4,"f",254,196,79, -,,,,5,"g",254,153,41, -,,,,6,"h",236,112,20, -,,,,7,"j",204,76,2, -,,,,8,"l",140,45,4, -"ylorbr",9,"seq",,1,"a",255,255,229, -,,,,2,"c",255,247,188, -,,,,3,"d",254,227,145, -,,,,4,"f",254,196,79, -,,,,5,"g",254,153,41, -,,,,6,"h",236,112,20, -,,,,7,"j",204,76,2, -,,,,8,"k",153,52,4, -,,,,9,"m",102,37,6, -"ylorrd",3,"seq",,1,"c",255,237,160,"sequential" -,,,,2,"f",254,178,76, -,,,,3,"i",240,59,32, -"ylorrd",4,"seq",,1,"b",255,255,178, -,,,,2,"e",254,204,92, -,,,,3,"g",253,141,60, -,,,,4,"j",227,26,28, -"ylorrd",5,"seq",,1,"b",255,255,178, -,,,,2,"e",254,204,92, -,,,,3,"g",253,141,60, -,,,,4,"i",240,59,32, -,,,,5,"k",189,0,38, -"ylorrd",6,"seq",,1,"b",255,255,178, -,,,,2,"d",254,217,118, -,,,,3,"f",254,178,76, -,,,,4,"g",253,141,60, -,,,,5,"i",240,59,32, -,,,,6,"k",189,0,38, -"ylorrd",7,"seq",,1,"b",255,255,178, -,,,,2,"d",254,217,118, -,,,,3,"f",254,178,76, -,,,,4,"g",253,141,60, -,,,,5,"h",252,78,42, -,,,,6,"j",227,26,28, -,,,,7,"l",177,0,38, -"ylorrd",8,"seq",,1,"a",255,255,204, -,,,,2,"c",255,237,160, -,,,,3,"d",254,217,118, -,,,,4,"f",254,178,76, -,,,,5,"g",253,141,60, -,,,,6,"h",252,78,42, -,,,,7,"j",227,26,28, -,,,,8,"l",177,0,38, -"ylorrd",9,"seq",,1,"a",255,255,204, -,,,,2,"c",255,237,160, -,,,,3,"d",254,217,118, -,,,,4,"f",254,178,76, -,,,,5,"g",253,141,60, -,,,,6,"h",252,78,42, -,,,,7,"j",227,26,28, -,,,,8,"k",189,0,38, -,,,,9,"m",128,0,38, diff --git a/internal/ccall/common/brewer_lib b/internal/ccall/common/brewer_lib deleted file mode 100644 index 38c1d4e..0000000 --- a/internal/ccall/common/brewer_lib +++ /dev/null @@ -1,1689 +0,0 @@ -/accent3/1 127 201 127 255 -/accent3/2 190 174 212 255 -/accent3/3 253 192 134 255 -/accent4/1 127 201 127 255 -/accent4/2 190 174 212 255 -/accent4/3 253 192 134 255 -/accent4/4 255 255 153 255 -/accent5/1 127 201 127 255 -/accent5/2 190 174 212 255 -/accent5/3 253 192 134 255 -/accent5/4 255 255 153 255 -/accent5/5 56 108 176 255 -/accent6/1 127 201 127 255 -/accent6/2 190 174 212 255 -/accent6/3 253 192 134 255 -/accent6/4 255 255 153 255 -/accent6/5 56 108 176 255 -/accent6/6 240 2 127 255 -/accent7/1 127 201 127 255 -/accent7/2 190 174 212 255 -/accent7/3 253 192 134 255 -/accent7/4 255 255 153 255 -/accent7/5 56 108 176 255 -/accent7/6 240 2 127 255 -/accent7/7 191 91 23 255 -/accent8/1 127 201 127 255 -/accent8/2 190 174 212 255 -/accent8/3 253 192 134 255 -/accent8/4 255 255 153 255 -/accent8/5 56 108 176 255 -/accent8/6 240 2 127 255 -/accent8/7 191 91 23 255 -/accent8/8 102 102 102 255 -/blues3/1 222 235 247 255 -/blues3/2 158 202 225 255 -/blues3/3 49 130 189 255 -/blues4/1 239 243 255 255 -/blues4/2 189 215 231 255 -/blues4/3 107 174 214 255 -/blues4/4 33 113 181 255 -/blues5/1 239 243 255 255 -/blues5/2 189 215 231 255 -/blues5/3 107 174 214 255 -/blues5/4 49 130 189 255 -/blues5/5 8 81 156 255 -/blues6/1 239 243 255 255 -/blues6/2 198 219 239 255 -/blues6/3 158 202 225 255 -/blues6/4 107 174 214 255 -/blues6/5 49 130 189 255 -/blues6/6 8 81 156 255 -/blues7/1 239 243 255 255 -/blues7/2 198 219 239 255 -/blues7/3 158 202 225 255 -/blues7/4 107 174 214 255 -/blues7/5 66 146 198 255 -/blues7/6 33 113 181 255 -/blues7/7 8 69 148 255 -/blues8/1 247 251 255 255 -/blues8/2 222 235 247 255 -/blues8/3 198 219 239 255 -/blues8/4 158 202 225 255 -/blues8/5 107 174 214 255 -/blues8/6 66 146 198 255 -/blues8/7 33 113 181 255 -/blues8/8 8 69 148 255 -/blues9/1 247 251 255 255 -/blues9/2 222 235 247 255 -/blues9/3 198 219 239 255 -/blues9/4 158 202 225 255 -/blues9/5 107 174 214 255 -/blues9/6 66 146 198 255 -/blues9/7 33 113 181 255 -/blues9/8 8 81 156 255 -/blues9/9 8 48 107 255 -/brbg3/1 216 179 101 255 -/brbg3/2 245 245 245 255 -/brbg3/3 90 180 172 255 -/brbg4/1 166 97 26 255 -/brbg4/2 223 194 125 255 -/brbg4/3 128 205 193 255 -/brbg4/4 1 133 113 255 -/brbg5/1 166 97 26 255 -/brbg5/2 223 194 125 255 -/brbg5/3 245 245 245 255 -/brbg5/4 128 205 193 255 -/brbg5/5 1 133 113 255 -/brbg6/1 140 81 10 255 -/brbg6/2 216 179 101 255 -/brbg6/3 246 232 195 255 -/brbg6/4 199 234 229 255 -/brbg6/5 90 180 172 255 -/brbg6/6 1 102 94 255 -/brbg7/1 140 81 10 255 -/brbg7/2 216 179 101 255 -/brbg7/3 246 232 195 255 -/brbg7/4 245 245 245 255 -/brbg7/5 199 234 229 255 -/brbg7/6 90 180 172 255 -/brbg7/7 1 102 94 255 -/brbg8/1 140 81 10 255 -/brbg8/2 191 129 45 255 -/brbg8/3 223 194 125 255 -/brbg8/4 246 232 195 255 -/brbg8/5 199 234 229 255 -/brbg8/6 128 205 193 255 -/brbg8/7 53 151 143 255 -/brbg8/8 1 102 94 255 -/brbg9/1 140 81 10 255 -/brbg9/2 191 129 45 255 -/brbg9/3 223 194 125 255 -/brbg9/4 246 232 195 255 -/brbg9/5 245 245 245 255 -/brbg9/6 199 234 229 255 -/brbg9/7 128 205 193 255 -/brbg9/8 53 151 143 255 -/brbg9/9 1 102 94 255 -/brbg10/1 84 48 5 255 -/brbg10/2 140 81 10 255 -/brbg10/3 191 129 45 255 -/brbg10/4 223 194 125 255 -/brbg10/5 246 232 195 255 -/brbg10/6 199 234 229 255 -/brbg10/7 128 205 193 255 -/brbg10/8 53 151 143 255 -/brbg10/9 1 102 94 255 -/brbg10/10 0 60 48 255 -/brbg11/1 84 48 5 255 -/brbg11/2 140 81 10 255 -/brbg11/3 191 129 45 255 -/brbg11/4 223 194 125 255 -/brbg11/5 246 232 195 255 -/brbg11/6 245 245 245 255 -/brbg11/7 199 234 229 255 -/brbg11/8 128 205 193 255 -/brbg11/9 53 151 143 255 -/brbg11/10 1 102 94 255 -/brbg11/11 0 60 48 255 -/bugn3/1 229 245 249 255 -/bugn3/2 153 216 201 255 -/bugn3/3 44 162 95 255 -/bugn4/1 237 248 251 255 -/bugn4/2 178 226 226 255 -/bugn4/3 102 194 164 255 -/bugn4/4 35 139 69 255 -/bugn5/1 237 248 251 255 -/bugn5/2 178 226 226 255 -/bugn5/3 102 194 164 255 -/bugn5/4 44 162 95 255 -/bugn5/5 0 109 44 255 -/bugn6/1 237 248 251 255 -/bugn6/2 204 236 230 255 -/bugn6/3 153 216 201 255 -/bugn6/4 102 194 164 255 -/bugn6/5 44 162 95 255 -/bugn6/6 0 109 44 255 -/bugn7/1 237 248 251 255 -/bugn7/2 204 236 230 255 -/bugn7/3 153 216 201 255 -/bugn7/4 102 194 164 255 -/bugn7/5 65 174 118 255 -/bugn7/6 35 139 69 255 -/bugn7/7 0 88 36 255 -/bugn8/1 247 252 253 255 -/bugn8/2 229 245 249 255 -/bugn8/3 204 236 230 255 -/bugn8/4 153 216 201 255 -/bugn8/5 102 194 164 255 -/bugn8/6 65 174 118 255 -/bugn8/7 35 139 69 255 -/bugn8/8 0 88 36 255 -/bugn9/1 247 252 253 255 -/bugn9/2 229 245 249 255 -/bugn9/3 204 236 230 255 -/bugn9/4 153 216 201 255 -/bugn9/5 102 194 164 255 -/bugn9/6 65 174 118 255 -/bugn9/7 35 139 69 255 -/bugn9/8 0 109 44 255 -/bugn9/9 0 68 27 255 -/bupu3/1 224 236 244 255 -/bupu3/2 158 188 218 255 -/bupu3/3 136 86 167 255 -/bupu4/1 237 248 251 255 -/bupu4/2 179 205 227 255 -/bupu4/3 140 150 198 255 -/bupu4/4 136 65 157 255 -/bupu5/1 237 248 251 255 -/bupu5/2 179 205 227 255 -/bupu5/3 140 150 198 255 -/bupu5/4 136 86 167 255 -/bupu5/5 129 15 124 255 -/bupu6/1 237 248 251 255 -/bupu6/2 191 211 230 255 -/bupu6/3 158 188 218 255 -/bupu6/4 140 150 198 255 -/bupu6/5 136 86 167 255 -/bupu6/6 129 15 124 255 -/bupu7/1 237 248 251 255 -/bupu7/2 191 211 230 255 -/bupu7/3 158 188 218 255 -/bupu7/4 140 150 198 255 -/bupu7/5 140 107 177 255 -/bupu7/6 136 65 157 255 -/bupu7/7 110 1 107 255 -/bupu8/1 247 252 253 255 -/bupu8/2 224 236 244 255 -/bupu8/3 191 211 230 255 -/bupu8/4 158 188 218 255 -/bupu8/5 140 150 198 255 -/bupu8/6 140 107 177 255 -/bupu8/7 136 65 157 255 -/bupu8/8 110 1 107 255 -/bupu9/1 247 252 253 255 -/bupu9/2 224 236 244 255 -/bupu9/3 191 211 230 255 -/bupu9/4 158 188 218 255 -/bupu9/5 140 150 198 255 -/bupu9/6 140 107 177 255 -/bupu9/7 136 65 157 255 -/bupu9/8 129 15 124 255 -/bupu9/9 77 0 75 255 -/dark23/1 27 158 119 255 -/dark23/2 217 95 2 255 -/dark23/3 117 112 179 255 -/dark24/1 27 158 119 255 -/dark24/2 217 95 2 255 -/dark24/3 117 112 179 255 -/dark24/4 231 41 138 255 -/dark25/1 27 158 119 255 -/dark25/2 217 95 2 255 -/dark25/3 117 112 179 255 -/dark25/4 231 41 138 255 -/dark25/5 102 166 30 255 -/dark26/1 27 158 119 255 -/dark26/2 217 95 2 255 -/dark26/3 117 112 179 255 -/dark26/4 231 41 138 255 -/dark26/5 102 166 30 255 -/dark26/6 230 171 2 255 -/dark27/1 27 158 119 255 -/dark27/2 217 95 2 255 -/dark27/3 117 112 179 255 -/dark27/4 231 41 138 255 -/dark27/5 102 166 30 255 -/dark27/6 230 171 2 255 -/dark27/7 166 118 29 255 -/dark28/1 27 158 119 255 -/dark28/2 217 95 2 255 -/dark28/3 117 112 179 255 -/dark28/4 231 41 138 255 -/dark28/5 102 166 30 255 -/dark28/6 230 171 2 255 -/dark28/7 166 118 29 255 -/dark28/8 102 102 102 255 -/gnbu3/1 224 243 219 255 -/gnbu3/2 168 221 181 255 -/gnbu3/3 67 162 202 255 -/gnbu4/1 240 249 232 255 -/gnbu4/2 186 228 188 255 -/gnbu4/3 123 204 196 255 -/gnbu4/4 43 140 190 255 -/gnbu5/1 240 249 232 255 -/gnbu5/2 186 228 188 255 -/gnbu5/3 123 204 196 255 -/gnbu5/4 67 162 202 255 -/gnbu5/5 8 104 172 255 -/gnbu6/1 240 249 232 255 -/gnbu6/2 204 235 197 255 -/gnbu6/3 168 221 181 255 -/gnbu6/4 123 204 196 255 -/gnbu6/5 67 162 202 255 -/gnbu6/6 8 104 172 255 -/gnbu7/1 240 249 232 255 -/gnbu7/2 204 235 197 255 -/gnbu7/3 168 221 181 255 -/gnbu7/4 123 204 196 255 -/gnbu7/5 78 179 211 255 -/gnbu7/6 43 140 190 255 -/gnbu7/7 8 88 158 255 -/gnbu8/1 247 252 240 255 -/gnbu8/2 224 243 219 255 -/gnbu8/3 204 235 197 255 -/gnbu8/4 168 221 181 255 -/gnbu8/5 123 204 196 255 -/gnbu8/6 78 179 211 255 -/gnbu8/7 43 140 190 255 -/gnbu8/8 8 88 158 255 -/gnbu9/1 247 252 240 255 -/gnbu9/2 224 243 219 255 -/gnbu9/3 204 235 197 255 -/gnbu9/4 168 221 181 255 -/gnbu9/5 123 204 196 255 -/gnbu9/6 78 179 211 255 -/gnbu9/7 43 140 190 255 -/gnbu9/8 8 104 172 255 -/gnbu9/9 8 64 129 255 -/greens3/1 229 245 224 255 -/greens3/2 161 217 155 255 -/greens3/3 49 163 84 255 -/greens4/1 237 248 233 255 -/greens4/2 186 228 179 255 -/greens4/3 116 196 118 255 -/greens4/4 35 139 69 255 -/greens5/1 237 248 233 255 -/greens5/2 186 228 179 255 -/greens5/3 116 196 118 255 -/greens5/4 49 163 84 255 -/greens5/5 0 109 44 255 -/greens6/1 237 248 233 255 -/greens6/2 199 233 192 255 -/greens6/3 161 217 155 255 -/greens6/4 116 196 118 255 -/greens6/5 49 163 84 255 -/greens6/6 0 109 44 255 -/greens7/1 237 248 233 255 -/greens7/2 199 233 192 255 -/greens7/3 161 217 155 255 -/greens7/4 116 196 118 255 -/greens7/5 65 171 93 255 -/greens7/6 35 139 69 255 -/greens7/7 0 90 50 255 -/greens8/1 247 252 245 255 -/greens8/2 229 245 224 255 -/greens8/3 199 233 192 255 -/greens8/4 161 217 155 255 -/greens8/5 116 196 118 255 -/greens8/6 65 171 93 255 -/greens8/7 35 139 69 255 -/greens8/8 0 90 50 255 -/greens9/1 247 252 245 255 -/greens9/2 229 245 224 255 -/greens9/3 199 233 192 255 -/greens9/4 161 217 155 255 -/greens9/5 116 196 118 255 -/greens9/6 65 171 93 255 -/greens9/7 35 139 69 255 -/greens9/8 0 109 44 255 -/greens9/9 0 68 27 255 -/greys3/1 240 240 240 255 -/greys3/2 189 189 189 255 -/greys3/3 99 99 99 255 -/greys4/1 247 247 247 255 -/greys4/2 204 204 204 255 -/greys4/3 150 150 150 255 -/greys4/4 82 82 82 255 -/greys5/1 247 247 247 255 -/greys5/2 204 204 204 255 -/greys5/3 150 150 150 255 -/greys5/4 99 99 99 255 -/greys5/5 37 37 37 255 -/greys6/1 247 247 247 255 -/greys6/2 217 217 217 255 -/greys6/3 189 189 189 255 -/greys6/4 150 150 150 255 -/greys6/5 99 99 99 255 -/greys6/6 37 37 37 255 -/greys7/1 247 247 247 255 -/greys7/2 217 217 217 255 -/greys7/3 189 189 189 255 -/greys7/4 150 150 150 255 -/greys7/5 115 115 115 255 -/greys7/6 82 82 82 255 -/greys7/7 37 37 37 255 -/greys8/1 255 255 255 255 -/greys8/2 240 240 240 255 -/greys8/3 217 217 217 255 -/greys8/4 189 189 189 255 -/greys8/5 150 150 150 255 -/greys8/6 115 115 115 255 -/greys8/7 82 82 82 255 -/greys8/8 37 37 37 255 -/greys9/1 255 255 255 255 -/greys9/2 240 240 240 255 -/greys9/3 217 217 217 255 -/greys9/4 189 189 189 255 -/greys9/5 150 150 150 255 -/greys9/6 115 115 115 255 -/greys9/7 82 82 82 255 -/greys9/8 37 37 37 255 -/greys9/9 0 0 0 255 -/oranges3/1 254 230 206 255 -/oranges3/2 253 174 107 255 -/oranges3/3 230 85 13 255 -/oranges4/1 254 237 222 255 -/oranges4/2 253 190 133 255 -/oranges4/3 253 141 60 255 -/oranges4/4 217 71 1 255 -/oranges5/1 254 237 222 255 -/oranges5/2 253 190 133 255 -/oranges5/3 253 141 60 255 -/oranges5/4 230 85 13 255 -/oranges5/5 166 54 3 255 -/oranges6/1 254 237 222 255 -/oranges6/2 253 208 162 255 -/oranges6/3 253 174 107 255 -/oranges6/4 253 141 60 255 -/oranges6/5 230 85 13 255 -/oranges6/6 166 54 3 255 -/oranges7/1 254 237 222 255 -/oranges7/2 253 208 162 255 -/oranges7/3 253 174 107 255 -/oranges7/4 253 141 60 255 -/oranges7/5 241 105 19 255 -/oranges7/6 217 72 1 255 -/oranges7/7 140 45 4 255 -/oranges8/1 255 245 235 255 -/oranges8/2 254 230 206 255 -/oranges8/3 253 208 162 255 -/oranges8/4 253 174 107 255 -/oranges8/5 253 141 60 255 -/oranges8/6 241 105 19 255 -/oranges8/7 217 72 1 255 -/oranges8/8 140 45 4 255 -/oranges9/1 255 245 235 255 -/oranges9/2 254 230 206 255 -/oranges9/3 253 208 162 255 -/oranges9/4 253 174 107 255 -/oranges9/5 253 141 60 255 -/oranges9/6 241 105 19 255 -/oranges9/7 217 72 1 255 -/oranges9/8 166 54 3 255 -/oranges9/9 127 39 4 255 -/orrd3/1 254 232 200 255 -/orrd3/2 253 187 132 255 -/orrd3/3 227 74 51 255 -/orrd4/1 254 240 217 255 -/orrd4/2 253 204 138 255 -/orrd4/3 252 141 89 255 -/orrd4/4 215 48 31 255 -/orrd5/1 254 240 217 255 -/orrd5/2 253 204 138 255 -/orrd5/3 252 141 89 255 -/orrd5/4 227 74 51 255 -/orrd5/5 179 0 0 255 -/orrd6/1 254 240 217 255 -/orrd6/2 253 212 158 255 -/orrd6/3 253 187 132 255 -/orrd6/4 252 141 89 255 -/orrd6/5 227 74 51 255 -/orrd6/6 179 0 0 255 -/orrd7/1 254 240 217 255 -/orrd7/2 253 212 158 255 -/orrd7/3 253 187 132 255 -/orrd7/4 252 141 89 255 -/orrd7/5 239 101 72 255 -/orrd7/6 215 48 31 255 -/orrd7/7 153 0 0 255 -/orrd8/1 255 247 236 255 -/orrd8/2 254 232 200 255 -/orrd8/3 253 212 158 255 -/orrd8/4 253 187 132 255 -/orrd8/5 252 141 89 255 -/orrd8/6 239 101 72 255 -/orrd8/7 215 48 31 255 -/orrd8/8 153 0 0 255 -/orrd9/1 255 247 236 255 -/orrd9/2 254 232 200 255 -/orrd9/3 253 212 158 255 -/orrd9/4 253 187 132 255 -/orrd9/5 252 141 89 255 -/orrd9/6 239 101 72 255 -/orrd9/7 215 48 31 255 -/orrd9/8 179 0 0 255 -/orrd9/9 127 0 0 255 -/paired3/1 166 206 227 255 -/paired3/2 31 120 180 255 -/paired3/3 178 223 138 255 -/paired4/1 166 206 227 255 -/paired4/2 31 120 180 255 -/paired4/3 178 223 138 255 -/paired4/4 51 160 44 255 -/paired5/1 166 206 227 255 -/paired5/2 31 120 180 255 -/paired5/3 178 223 138 255 -/paired5/4 51 160 44 255 -/paired5/5 251 154 153 255 -/paired6/1 166 206 227 255 -/paired6/2 31 120 180 255 -/paired6/3 178 223 138 255 -/paired6/4 51 160 44 255 -/paired6/5 251 154 153 255 -/paired6/6 227 26 28 255 -/paired7/1 166 206 227 255 -/paired7/2 31 120 180 255 -/paired7/3 178 223 138 255 -/paired7/4 51 160 44 255 -/paired7/5 251 154 153 255 -/paired7/6 227 26 28 255 -/paired7/7 253 191 111 255 -/paired8/1 166 206 227 255 -/paired8/2 31 120 180 255 -/paired8/3 178 223 138 255 -/paired8/4 51 160 44 255 -/paired8/5 251 154 153 255 -/paired8/6 227 26 28 255 -/paired8/7 253 191 111 255 -/paired8/8 255 127 0 255 -/paired9/1 166 206 227 255 -/paired9/2 31 120 180 255 -/paired9/3 178 223 138 255 -/paired9/4 51 160 44 255 -/paired9/5 251 154 153 255 -/paired9/6 227 26 28 255 -/paired9/7 253 191 111 255 -/paired9/8 255 127 0 255 -/paired9/9 202 178 214 255 -/paired10/1 166 206 227 255 -/paired10/2 31 120 180 255 -/paired10/3 178 223 138 255 -/paired10/4 51 160 44 255 -/paired10/5 251 154 153 255 -/paired10/6 227 26 28 255 -/paired10/7 253 191 111 255 -/paired10/8 255 127 0 255 -/paired10/9 202 178 214 255 -/paired10/10 106 61 154 255 -/paired11/1 166 206 227 255 -/paired11/2 31 120 180 255 -/paired11/3 178 223 138 255 -/paired11/4 51 160 44 255 -/paired11/5 251 154 153 255 -/paired11/6 227 26 28 255 -/paired11/7 253 191 111 255 -/paired11/8 255 127 0 255 -/paired11/9 202 178 214 255 -/paired11/10 106 61 154 255 -/paired11/11 255 255 153 255 -/paired12/1 166 206 227 255 -/paired12/2 31 120 180 255 -/paired12/3 178 223 138 255 -/paired12/4 51 160 44 255 -/paired12/5 251 154 153 255 -/paired12/6 227 26 28 255 -/paired12/7 253 191 111 255 -/paired12/8 255 127 0 255 -/paired12/9 202 178 214 255 -/paired12/10 106 61 154 255 -/paired12/11 255 255 153 255 -/paired12/12 177 89 40 255 -/pastel13/1 251 180 174 255 -/pastel13/2 179 205 227 255 -/pastel13/3 204 235 197 255 -/pastel14/1 251 180 174 255 -/pastel14/2 179 205 227 255 -/pastel14/3 204 235 197 255 -/pastel14/4 222 203 228 255 -/pastel15/1 251 180 174 255 -/pastel15/2 179 205 227 255 -/pastel15/3 204 235 197 255 -/pastel15/4 222 203 228 255 -/pastel15/5 254 217 166 255 -/pastel16/1 251 180 174 255 -/pastel16/2 179 205 227 255 -/pastel16/3 204 235 197 255 -/pastel16/4 222 203 228 255 -/pastel16/5 254 217 166 255 -/pastel16/6 255 255 204 255 -/pastel17/1 251 180 174 255 -/pastel17/2 179 205 227 255 -/pastel17/3 204 235 197 255 -/pastel17/4 222 203 228 255 -/pastel17/5 254 217 166 255 -/pastel17/6 255 255 204 255 -/pastel17/7 229 216 189 255 -/pastel18/1 251 180 174 255 -/pastel18/2 179 205 227 255 -/pastel18/3 204 235 197 255 -/pastel18/4 222 203 228 255 -/pastel18/5 254 217 166 255 -/pastel18/6 255 255 204 255 -/pastel18/7 229 216 189 255 -/pastel18/8 253 218 236 255 -/pastel19/1 251 180 174 255 -/pastel19/2 179 205 227 255 -/pastel19/3 204 235 197 255 -/pastel19/4 222 203 228 255 -/pastel19/5 254 217 166 255 -/pastel19/6 255 255 204 255 -/pastel19/7 229 216 189 255 -/pastel19/8 253 218 236 255 -/pastel19/9 242 242 242 255 -/pastel23/1 179 226 205 255 -/pastel23/2 253 205 172 255 -/pastel23/3 203 213 232 255 -/pastel24/1 179 226 205 255 -/pastel24/2 253 205 172 255 -/pastel24/3 203 213 232 255 -/pastel24/4 244 202 228 255 -/pastel25/1 179 226 205 255 -/pastel25/2 253 205 172 255 -/pastel25/3 203 213 232 255 -/pastel25/4 244 202 228 255 -/pastel25/5 230 245 201 255 -/pastel26/1 179 226 205 255 -/pastel26/2 253 205 172 255 -/pastel26/3 203 213 232 255 -/pastel26/4 244 202 228 255 -/pastel26/5 230 245 201 255 -/pastel26/6 255 242 174 255 -/pastel27/1 179 226 205 255 -/pastel27/2 253 205 172 255 -/pastel27/3 203 213 232 255 -/pastel27/4 244 202 228 255 -/pastel27/5 230 245 201 255 -/pastel27/6 255 242 174 255 -/pastel27/7 241 226 204 255 -/pastel28/1 179 226 205 255 -/pastel28/2 253 205 172 255 -/pastel28/3 203 213 232 255 -/pastel28/4 244 202 228 255 -/pastel28/5 230 245 201 255 -/pastel28/6 255 242 174 255 -/pastel28/7 241 226 204 255 -/pastel28/8 204 204 204 255 -/piyg3/1 233 163 201 255 -/piyg3/2 247 247 247 255 -/piyg3/3 161 215 106 255 -/piyg4/1 208 28 139 255 -/piyg4/2 241 182 218 255 -/piyg4/3 184 225 134 255 -/piyg4/4 77 172 38 255 -/piyg5/1 208 28 139 255 -/piyg5/2 241 182 218 255 -/piyg5/3 247 247 247 255 -/piyg5/4 184 225 134 255 -/piyg5/5 77 172 38 255 -/piyg6/1 197 27 125 255 -/piyg6/2 233 163 201 255 -/piyg6/3 253 224 239 255 -/piyg6/4 230 245 208 255 -/piyg6/5 161 215 106 255 -/piyg6/6 77 146 33 255 -/piyg7/1 197 27 125 255 -/piyg7/2 233 163 201 255 -/piyg7/3 253 224 239 255 -/piyg7/4 247 247 247 255 -/piyg7/5 230 245 208 255 -/piyg7/6 161 215 106 255 -/piyg7/7 77 146 33 255 -/piyg8/1 197 27 125 255 -/piyg8/2 222 119 174 255 -/piyg8/3 241 182 218 255 -/piyg8/4 253 224 239 255 -/piyg8/5 230 245 208 255 -/piyg8/6 184 225 134 255 -/piyg8/7 127 188 65 255 -/piyg8/8 77 146 33 255 -/piyg9/1 197 27 125 255 -/piyg9/2 222 119 174 255 -/piyg9/3 241 182 218 255 -/piyg9/4 253 224 239 255 -/piyg9/5 247 247 247 255 -/piyg9/6 230 245 208 255 -/piyg9/7 184 225 134 255 -/piyg9/8 127 188 65 255 -/piyg9/9 77 146 33 255 -/piyg10/1 142 1 82 255 -/piyg10/2 197 27 125 255 -/piyg10/3 222 119 174 255 -/piyg10/4 241 182 218 255 -/piyg10/5 253 224 239 255 -/piyg10/6 230 245 208 255 -/piyg10/7 184 225 134 255 -/piyg10/8 127 188 65 255 -/piyg10/9 77 146 33 255 -/piyg10/10 39 100 25 255 -/piyg11/1 142 1 82 255 -/piyg11/2 197 27 125 255 -/piyg11/3 222 119 174 255 -/piyg11/4 241 182 218 255 -/piyg11/5 253 224 239 255 -/piyg11/6 247 247 247 255 -/piyg11/7 230 245 208 255 -/piyg11/8 184 225 134 255 -/piyg11/9 127 188 65 255 -/piyg11/10 77 146 33 255 -/piyg11/11 39 100 25 255 -/prgn3/1 175 141 195 255 -/prgn3/2 247 247 247 255 -/prgn3/3 127 191 123 255 -/prgn4/1 123 50 148 255 -/prgn4/2 194 165 207 255 -/prgn4/3 166 219 160 255 -/prgn4/4 0 136 55 255 -/prgn5/1 123 50 148 255 -/prgn5/2 194 165 207 255 -/prgn5/3 247 247 247 255 -/prgn5/4 166 219 160 255 -/prgn5/5 0 136 55 255 -/prgn6/1 118 42 131 255 -/prgn6/2 175 141 195 255 -/prgn6/3 231 212 232 255 -/prgn6/4 217 240 211 255 -/prgn6/5 127 191 123 255 -/prgn6/6 27 120 55 255 -/prgn7/1 118 42 131 255 -/prgn7/2 175 141 195 255 -/prgn7/3 231 212 232 255 -/prgn7/4 247 247 247 255 -/prgn7/5 217 240 211 255 -/prgn7/6 127 191 123 255 -/prgn7/7 27 120 55 255 -/prgn8/1 118 42 131 255 -/prgn8/2 153 112 171 255 -/prgn8/3 194 165 207 255 -/prgn8/4 231 212 232 255 -/prgn8/5 217 240 211 255 -/prgn8/6 166 219 160 255 -/prgn8/7 90 174 97 255 -/prgn8/8 27 120 55 255 -/prgn9/1 118 42 131 255 -/prgn9/2 153 112 171 255 -/prgn9/3 194 165 207 255 -/prgn9/4 231 212 232 255 -/prgn9/5 247 247 247 255 -/prgn9/6 217 240 211 255 -/prgn9/7 166 219 160 255 -/prgn9/8 90 174 97 255 -/prgn9/9 27 120 55 255 -/prgn10/1 64 0 75 255 -/prgn10/2 118 42 131 255 -/prgn10/3 153 112 171 255 -/prgn10/4 194 165 207 255 -/prgn10/5 231 212 232 255 -/prgn10/6 217 240 211 255 -/prgn10/7 166 219 160 255 -/prgn10/8 90 174 97 255 -/prgn10/9 27 120 55 255 -/prgn10/10 0 68 27 255 -/prgn11/1 64 0 75 255 -/prgn11/2 118 42 131 255 -/prgn11/3 153 112 171 255 -/prgn11/4 194 165 207 255 -/prgn11/5 231 212 232 255 -/prgn11/6 247 247 247 255 -/prgn11/7 217 240 211 255 -/prgn11/8 166 219 160 255 -/prgn11/9 90 174 97 255 -/prgn11/10 27 120 55 255 -/prgn11/11 0 68 27 255 -/pubu3/1 236 231 242 255 -/pubu3/2 166 189 219 255 -/pubu3/3 43 140 190 255 -/pubu4/1 241 238 246 255 -/pubu4/2 189 201 225 255 -/pubu4/3 116 169 207 255 -/pubu4/4 5 112 176 255 -/pubu5/1 241 238 246 255 -/pubu5/2 189 201 225 255 -/pubu5/3 116 169 207 255 -/pubu5/4 43 140 190 255 -/pubu5/5 4 90 141 255 -/pubu6/1 241 238 246 255 -/pubu6/2 208 209 230 255 -/pubu6/3 166 189 219 255 -/pubu6/4 116 169 207 255 -/pubu6/5 43 140 190 255 -/pubu6/6 4 90 141 255 -/pubu7/1 241 238 246 255 -/pubu7/2 208 209 230 255 -/pubu7/3 166 189 219 255 -/pubu7/4 116 169 207 255 -/pubu7/5 54 144 192 255 -/pubu7/6 5 112 176 255 -/pubu7/7 3 78 123 255 -/pubu8/1 255 247 251 255 -/pubu8/2 236 231 242 255 -/pubu8/3 208 209 230 255 -/pubu8/4 166 189 219 255 -/pubu8/5 116 169 207 255 -/pubu8/6 54 144 192 255 -/pubu8/7 5 112 176 255 -/pubu8/8 3 78 123 255 -/pubu9/1 255 247 251 255 -/pubu9/2 236 231 242 255 -/pubu9/3 208 209 230 255 -/pubu9/4 166 189 219 255 -/pubu9/5 116 169 207 255 -/pubu9/6 54 144 192 255 -/pubu9/7 5 112 176 255 -/pubu9/8 4 90 141 255 -/pubu9/9 2 56 88 255 -/pubugn3/1 236 226 240 255 -/pubugn3/2 166 189 219 255 -/pubugn3/3 28 144 153 255 -/pubugn4/1 246 239 247 255 -/pubugn4/2 189 201 225 255 -/pubugn4/3 103 169 207 255 -/pubugn4/4 2 129 138 255 -/pubugn5/1 246 239 247 255 -/pubugn5/2 189 201 225 255 -/pubugn5/3 103 169 207 255 -/pubugn5/4 28 144 153 255 -/pubugn5/5 1 108 89 255 -/pubugn6/1 246 239 247 255 -/pubugn6/2 208 209 230 255 -/pubugn6/3 166 189 219 255 -/pubugn6/4 103 169 207 255 -/pubugn6/5 28 144 153 255 -/pubugn6/6 1 108 89 255 -/pubugn7/1 246 239 247 255 -/pubugn7/2 208 209 230 255 -/pubugn7/3 166 189 219 255 -/pubugn7/4 103 169 207 255 -/pubugn7/5 54 144 192 255 -/pubugn7/6 2 129 138 255 -/pubugn7/7 1 100 80 255 -/pubugn8/1 255 247 251 255 -/pubugn8/2 236 226 240 255 -/pubugn8/3 208 209 230 255 -/pubugn8/4 166 189 219 255 -/pubugn8/5 103 169 207 255 -/pubugn8/6 54 144 192 255 -/pubugn8/7 2 129 138 255 -/pubugn8/8 1 100 80 255 -/pubugn9/1 255 247 251 255 -/pubugn9/2 236 226 240 255 -/pubugn9/3 208 209 230 255 -/pubugn9/4 166 189 219 255 -/pubugn9/5 103 169 207 255 -/pubugn9/6 54 144 192 255 -/pubugn9/7 2 129 138 255 -/pubugn9/8 1 108 89 255 -/pubugn9/9 1 70 54 255 -/puor3/1 241 163 64 255 -/puor3/2 247 247 247 255 -/puor3/3 153 142 195 255 -/puor4/1 230 97 1 255 -/puor4/2 253 184 99 255 -/puor4/3 178 171 210 255 -/puor4/4 94 60 153 255 -/puor5/1 230 97 1 255 -/puor5/2 253 184 99 255 -/puor5/3 247 247 247 255 -/puor5/4 178 171 210 255 -/puor5/5 94 60 153 255 -/puor6/1 179 88 6 255 -/puor6/2 241 163 64 255 -/puor6/3 254 224 182 255 -/puor6/4 216 218 235 255 -/puor6/5 153 142 195 255 -/puor6/6 84 39 136 255 -/puor7/1 179 88 6 255 -/puor7/2 241 163 64 255 -/puor7/3 254 224 182 255 -/puor7/4 247 247 247 255 -/puor7/5 216 218 235 255 -/puor7/6 153 142 195 255 -/puor7/7 84 39 136 255 -/puor8/1 179 88 6 255 -/puor8/2 224 130 20 255 -/puor8/3 253 184 99 255 -/puor8/4 254 224 182 255 -/puor8/5 216 218 235 255 -/puor8/6 178 171 210 255 -/puor8/7 128 115 172 255 -/puor8/8 84 39 136 255 -/puor9/1 179 88 6 255 -/puor9/2 224 130 20 255 -/puor9/3 253 184 99 255 -/puor9/4 254 224 182 255 -/puor9/5 247 247 247 255 -/puor9/6 216 218 235 255 -/puor9/7 178 171 210 255 -/puor9/8 128 115 172 255 -/puor9/9 84 39 136 255 -/puor10/1 127 59 8 255 -/puor10/2 179 88 6 255 -/puor10/3 224 130 20 255 -/puor10/4 253 184 99 255 -/puor10/5 254 224 182 255 -/puor10/6 216 218 235 255 -/puor10/7 178 171 210 255 -/puor10/8 128 115 172 255 -/puor10/9 84 39 136 255 -/puor10/10 45 0 75 255 -/puor11/1 127 59 8 255 -/puor11/2 179 88 6 255 -/puor11/3 224 130 20 255 -/puor11/4 253 184 99 255 -/puor11/5 254 224 182 255 -/puor11/6 247 247 247 255 -/puor11/7 216 218 235 255 -/puor11/8 178 171 210 255 -/puor11/9 128 115 172 255 -/puor11/10 84 39 136 255 -/puor11/11 45 0 75 255 -/purd3/1 231 225 239 255 -/purd3/2 201 148 199 255 -/purd3/3 221 28 119 255 -/purd4/1 241 238 246 255 -/purd4/2 215 181 216 255 -/purd4/3 223 101 176 255 -/purd4/4 206 18 86 255 -/purd5/1 241 238 246 255 -/purd5/2 215 181 216 255 -/purd5/3 223 101 176 255 -/purd5/4 221 28 119 255 -/purd5/5 152 0 67 255 -/purd6/1 241 238 246 255 -/purd6/2 212 185 218 255 -/purd6/3 201 148 199 255 -/purd6/4 223 101 176 255 -/purd6/5 221 28 119 255 -/purd6/6 152 0 67 255 -/purd7/1 241 238 246 255 -/purd7/2 212 185 218 255 -/purd7/3 201 148 199 255 -/purd7/4 223 101 176 255 -/purd7/5 231 41 138 255 -/purd7/6 206 18 86 255 -/purd7/7 145 0 63 255 -/purd8/1 247 244 249 255 -/purd8/2 231 225 239 255 -/purd8/3 212 185 218 255 -/purd8/4 201 148 199 255 -/purd8/5 223 101 176 255 -/purd8/6 231 41 138 255 -/purd8/7 206 18 86 255 -/purd8/8 145 0 63 255 -/purd9/1 247 244 249 255 -/purd9/2 231 225 239 255 -/purd9/3 212 185 218 255 -/purd9/4 201 148 199 255 -/purd9/5 223 101 176 255 -/purd9/6 231 41 138 255 -/purd9/7 206 18 86 255 -/purd9/8 152 0 67 255 -/purd9/9 103 0 31 255 -/purples3/1 239 237 245 255 -/purples3/2 188 189 220 255 -/purples3/3 117 107 177 255 -/purples4/1 242 240 247 255 -/purples4/2 203 201 226 255 -/purples4/3 158 154 200 255 -/purples4/4 106 81 163 255 -/purples5/1 242 240 247 255 -/purples5/2 203 201 226 255 -/purples5/3 158 154 200 255 -/purples5/4 117 107 177 255 -/purples5/5 84 39 143 255 -/purples6/1 242 240 247 255 -/purples6/2 218 218 235 255 -/purples6/3 188 189 220 255 -/purples6/4 158 154 200 255 -/purples6/5 117 107 177 255 -/purples6/6 84 39 143 255 -/purples7/1 242 240 247 255 -/purples7/2 218 218 235 255 -/purples7/3 188 189 220 255 -/purples7/4 158 154 200 255 -/purples7/5 128 125 186 255 -/purples7/6 106 81 163 255 -/purples7/7 74 20 134 255 -/purples8/1 252 251 253 255 -/purples8/2 239 237 245 255 -/purples8/3 218 218 235 255 -/purples8/4 188 189 220 255 -/purples8/5 158 154 200 255 -/purples8/6 128 125 186 255 -/purples8/7 106 81 163 255 -/purples8/8 74 20 134 255 -/purples9/1 252 251 253 255 -/purples9/2 239 237 245 255 -/purples9/3 218 218 235 255 -/purples9/4 188 189 220 255 -/purples9/5 158 154 200 255 -/purples9/6 128 125 186 255 -/purples9/7 106 81 163 255 -/purples9/8 84 39 143 255 -/purples9/9 63 0 125 255 -/rdbu3/1 239 138 98 255 -/rdbu3/2 247 247 247 255 -/rdbu3/3 103 169 207 255 -/rdbu4/1 202 0 32 255 -/rdbu4/2 244 165 130 255 -/rdbu4/3 146 197 222 255 -/rdbu4/4 5 113 176 255 -/rdbu5/1 202 0 32 255 -/rdbu5/2 244 165 130 255 -/rdbu5/3 247 247 247 255 -/rdbu5/4 146 197 222 255 -/rdbu5/5 5 113 176 255 -/rdbu6/1 178 24 43 255 -/rdbu6/2 239 138 98 255 -/rdbu6/3 253 219 199 255 -/rdbu6/4 209 229 240 255 -/rdbu6/5 103 169 207 255 -/rdbu6/6 33 102 172 255 -/rdbu7/1 178 24 43 255 -/rdbu7/2 239 138 98 255 -/rdbu7/3 253 219 199 255 -/rdbu7/4 247 247 247 255 -/rdbu7/5 209 229 240 255 -/rdbu7/6 103 169 207 255 -/rdbu7/7 33 102 172 255 -/rdbu8/1 178 24 43 255 -/rdbu8/2 214 96 77 255 -/rdbu8/3 244 165 130 255 -/rdbu8/4 253 219 199 255 -/rdbu8/5 209 229 240 255 -/rdbu8/6 146 197 222 255 -/rdbu8/7 67 147 195 255 -/rdbu8/8 33 102 172 255 -/rdbu9/1 178 24 43 255 -/rdbu9/2 214 96 77 255 -/rdbu9/3 244 165 130 255 -/rdbu9/4 253 219 199 255 -/rdbu9/5 247 247 247 255 -/rdbu9/6 209 229 240 255 -/rdbu9/7 146 197 222 255 -/rdbu9/8 67 147 195 255 -/rdbu9/9 33 102 172 255 -/rdbu10/1 103 0 31 255 -/rdbu10/2 178 24 43 255 -/rdbu10/3 214 96 77 255 -/rdbu10/4 244 165 130 255 -/rdbu10/5 253 219 199 255 -/rdbu10/6 209 229 240 255 -/rdbu10/7 146 197 222 255 -/rdbu10/8 67 147 195 255 -/rdbu10/9 33 102 172 255 -/rdbu10/10 5 48 97 255 -/rdbu11/1 103 0 31 255 -/rdbu11/2 178 24 43 255 -/rdbu11/3 214 96 77 255 -/rdbu11/4 244 165 130 255 -/rdbu11/5 253 219 199 255 -/rdbu11/6 247 247 247 255 -/rdbu11/7 209 229 240 255 -/rdbu11/8 146 197 222 255 -/rdbu11/9 67 147 195 255 -/rdbu11/10 33 102 172 255 -/rdbu11/11 5 48 97 255 -/rdgy3/1 239 138 98 255 -/rdgy3/2 255 255 255 255 -/rdgy3/3 153 153 153 255 -/rdgy4/1 202 0 32 255 -/rdgy4/2 244 165 130 255 -/rdgy4/3 186 186 186 255 -/rdgy4/4 64 64 64 255 -/rdgy5/1 202 0 32 255 -/rdgy5/2 244 165 130 255 -/rdgy5/3 255 255 255 255 -/rdgy5/4 186 186 186 255 -/rdgy5/5 64 64 64 255 -/rdgy6/1 178 24 43 255 -/rdgy6/2 239 138 98 255 -/rdgy6/3 253 219 199 255 -/rdgy6/4 224 224 224 255 -/rdgy6/5 153 153 153 255 -/rdgy6/6 77 77 77 255 -/rdgy7/1 178 24 43 255 -/rdgy7/2 239 138 98 255 -/rdgy7/3 253 219 199 255 -/rdgy7/4 255 255 255 255 -/rdgy7/5 224 224 224 255 -/rdgy7/6 153 153 153 255 -/rdgy7/7 77 77 77 255 -/rdgy8/1 178 24 43 255 -/rdgy8/2 214 96 77 255 -/rdgy8/3 244 165 130 255 -/rdgy8/4 253 219 199 255 -/rdgy8/5 224 224 224 255 -/rdgy8/6 186 186 186 255 -/rdgy8/7 135 135 135 255 -/rdgy8/8 77 77 77 255 -/rdgy9/1 178 24 43 255 -/rdgy9/2 214 96 77 255 -/rdgy9/3 244 165 130 255 -/rdgy9/4 253 219 199 255 -/rdgy9/5 255 255 255 255 -/rdgy9/6 224 224 224 255 -/rdgy9/7 186 186 186 255 -/rdgy9/8 135 135 135 255 -/rdgy9/9 77 77 77 255 -/rdgy10/1 103 0 31 255 -/rdgy10/2 178 24 43 255 -/rdgy10/3 214 96 77 255 -/rdgy10/4 244 165 130 255 -/rdgy10/5 253 219 199 255 -/rdgy10/6 224 224 224 255 -/rdgy10/7 186 186 186 255 -/rdgy10/8 135 135 135 255 -/rdgy10/9 77 77 77 255 -/rdgy10/10 26 26 26 255 -/rdgy11/1 103 0 31 255 -/rdgy11/2 178 24 43 255 -/rdgy11/3 214 96 77 255 -/rdgy11/4 244 165 130 255 -/rdgy11/5 253 219 199 255 -/rdgy11/6 255 255 255 255 -/rdgy11/7 224 224 224 255 -/rdgy11/8 186 186 186 255 -/rdgy11/9 135 135 135 255 -/rdgy11/10 77 77 77 255 -/rdgy11/11 26 26 26 255 -/rdpu3/1 253 224 221 255 -/rdpu3/2 250 159 181 255 -/rdpu3/3 197 27 138 255 -/rdpu4/1 254 235 226 255 -/rdpu4/2 251 180 185 255 -/rdpu4/3 247 104 161 255 -/rdpu4/4 174 1 126 255 -/rdpu5/1 254 235 226 255 -/rdpu5/2 251 180 185 255 -/rdpu5/3 247 104 161 255 -/rdpu5/4 197 27 138 255 -/rdpu5/5 122 1 119 255 -/rdpu6/1 254 235 226 255 -/rdpu6/2 252 197 192 255 -/rdpu6/3 250 159 181 255 -/rdpu6/4 247 104 161 255 -/rdpu6/5 197 27 138 255 -/rdpu6/6 122 1 119 255 -/rdpu7/1 254 235 226 255 -/rdpu7/2 252 197 192 255 -/rdpu7/3 250 159 181 255 -/rdpu7/4 247 104 161 255 -/rdpu7/5 221 52 151 255 -/rdpu7/6 174 1 126 255 -/rdpu7/7 122 1 119 255 -/rdpu8/1 255 247 243 255 -/rdpu8/2 253 224 221 255 -/rdpu8/3 252 197 192 255 -/rdpu8/4 250 159 181 255 -/rdpu8/5 247 104 161 255 -/rdpu8/6 221 52 151 255 -/rdpu8/7 174 1 126 255 -/rdpu8/8 122 1 119 255 -/rdpu9/1 255 247 243 255 -/rdpu9/2 253 224 221 255 -/rdpu9/3 252 197 192 255 -/rdpu9/4 250 159 181 255 -/rdpu9/5 247 104 161 255 -/rdpu9/6 221 52 151 255 -/rdpu9/7 174 1 126 255 -/rdpu9/8 122 1 119 255 -/rdpu9/9 73 0 106 255 -/reds3/1 254 224 210 255 -/reds3/2 252 146 114 255 -/reds3/3 222 45 38 255 -/reds4/1 254 229 217 255 -/reds4/2 252 174 145 255 -/reds4/3 251 106 74 255 -/reds4/4 203 24 29 255 -/reds5/1 254 229 217 255 -/reds5/2 252 174 145 255 -/reds5/3 251 106 74 255 -/reds5/4 222 45 38 255 -/reds5/5 165 15 21 255 -/reds6/1 254 229 217 255 -/reds6/2 252 187 161 255 -/reds6/3 252 146 114 255 -/reds6/4 251 106 74 255 -/reds6/5 222 45 38 255 -/reds6/6 165 15 21 255 -/reds7/1 254 229 217 255 -/reds7/2 252 187 161 255 -/reds7/3 252 146 114 255 -/reds7/4 251 106 74 255 -/reds7/5 239 59 44 255 -/reds7/6 203 24 29 255 -/reds7/7 153 0 13 255 -/reds8/1 255 245 240 255 -/reds8/2 254 224 210 255 -/reds8/3 252 187 161 255 -/reds8/4 252 146 114 255 -/reds8/5 251 106 74 255 -/reds8/6 239 59 44 255 -/reds8/7 203 24 29 255 -/reds8/8 153 0 13 255 -/reds9/1 255 245 240 255 -/reds9/2 254 224 210 255 -/reds9/3 252 187 161 255 -/reds9/4 252 146 114 255 -/reds9/5 251 106 74 255 -/reds9/6 239 59 44 255 -/reds9/7 203 24 29 255 -/reds9/8 165 15 21 255 -/reds9/9 103 0 13 255 -/rdylbu3/1 252 141 89 255 -/rdylbu3/2 255 255 191 255 -/rdylbu3/3 145 191 219 255 -/rdylbu4/1 215 25 28 255 -/rdylbu4/2 253 174 97 255 -/rdylbu4/3 171 217 233 255 -/rdylbu4/4 44 123 182 255 -/rdylbu5/1 215 25 28 255 -/rdylbu5/2 253 174 97 255 -/rdylbu5/3 255 255 191 255 -/rdylbu5/4 171 217 233 255 -/rdylbu5/5 44 123 182 255 -/rdylbu6/1 215 48 39 255 -/rdylbu6/2 252 141 89 255 -/rdylbu6/3 254 224 144 255 -/rdylbu6/4 224 243 248 255 -/rdylbu6/5 145 191 219 255 -/rdylbu6/6 69 117 180 255 -/rdylbu7/1 215 48 39 255 -/rdylbu7/2 252 141 89 255 -/rdylbu7/3 254 224 144 255 -/rdylbu7/4 255 255 191 255 -/rdylbu7/5 224 243 248 255 -/rdylbu7/6 145 191 219 255 -/rdylbu7/7 69 117 180 255 -/rdylbu8/1 215 48 39 255 -/rdylbu8/2 244 109 67 255 -/rdylbu8/3 253 174 97 255 -/rdylbu8/4 254 224 144 255 -/rdylbu8/5 224 243 248 255 -/rdylbu8/6 171 217 233 255 -/rdylbu8/7 116 173 209 255 -/rdylbu8/8 69 117 180 255 -/rdylbu9/1 215 48 39 255 -/rdylbu9/2 244 109 67 255 -/rdylbu9/3 253 174 97 255 -/rdylbu9/4 254 224 144 255 -/rdylbu9/5 255 255 191 255 -/rdylbu9/6 224 243 248 255 -/rdylbu9/7 171 217 233 255 -/rdylbu9/8 116 173 209 255 -/rdylbu9/9 69 117 180 255 -/rdylbu10/1 165 0 38 255 -/rdylbu10/2 215 48 39 255 -/rdylbu10/3 244 109 67 255 -/rdylbu10/4 253 174 97 255 -/rdylbu10/5 254 224 144 255 -/rdylbu10/6 224 243 248 255 -/rdylbu10/7 171 217 233 255 -/rdylbu10/8 116 173 209 255 -/rdylbu10/9 69 117 180 255 -/rdylbu10/10 49 54 149 255 -/rdylbu11/1 165 0 38 255 -/rdylbu11/2 215 48 39 255 -/rdylbu11/3 244 109 67 255 -/rdylbu11/4 253 174 97 255 -/rdylbu11/5 254 224 144 255 -/rdylbu11/6 255 255 191 255 -/rdylbu11/7 224 243 248 255 -/rdylbu11/8 171 217 233 255 -/rdylbu11/9 116 173 209 255 -/rdylbu11/10 69 117 180 255 -/rdylbu11/11 49 54 149 255 -/rdylgn3/1 252 141 89 255 -/rdylgn3/2 255 255 191 255 -/rdylgn3/3 145 207 96 255 -/rdylgn4/1 215 25 28 255 -/rdylgn4/2 253 174 97 255 -/rdylgn4/3 166 217 106 255 -/rdylgn4/4 26 150 65 255 -/rdylgn5/1 215 25 28 255 -/rdylgn5/2 253 174 97 255 -/rdylgn5/3 255 255 191 255 -/rdylgn5/4 166 217 106 255 -/rdylgn5/5 26 150 65 255 -/rdylgn6/1 215 48 39 255 -/rdylgn6/2 252 141 89 255 -/rdylgn6/3 254 224 139 255 -/rdylgn6/4 217 239 139 255 -/rdylgn6/5 145 207 96 255 -/rdylgn6/6 26 152 80 255 -/rdylgn7/1 215 48 39 255 -/rdylgn7/2 252 141 89 255 -/rdylgn7/3 254 224 139 255 -/rdylgn7/4 255 255 191 255 -/rdylgn7/5 217 239 139 255 -/rdylgn7/6 145 207 96 255 -/rdylgn7/7 26 152 80 255 -/rdylgn8/1 215 48 39 255 -/rdylgn8/2 244 109 67 255 -/rdylgn8/3 253 174 97 255 -/rdylgn8/4 254 224 139 255 -/rdylgn8/5 217 239 139 255 -/rdylgn8/6 166 217 106 255 -/rdylgn8/7 102 189 99 255 -/rdylgn8/8 26 152 80 255 -/rdylgn9/1 215 48 39 255 -/rdylgn9/2 244 109 67 255 -/rdylgn9/3 253 174 97 255 -/rdylgn9/4 254 224 139 255 -/rdylgn9/5 255 255 191 255 -/rdylgn9/6 217 239 139 255 -/rdylgn9/7 166 217 106 255 -/rdylgn9/8 102 189 99 255 -/rdylgn9/9 26 152 80 255 -/rdylgn10/1 165 0 38 255 -/rdylgn10/2 215 48 39 255 -/rdylgn10/3 244 109 67 255 -/rdylgn10/4 253 174 97 255 -/rdylgn10/5 254 224 139 255 -/rdylgn10/6 217 239 139 255 -/rdylgn10/7 166 217 106 255 -/rdylgn10/8 102 189 99 255 -/rdylgn10/9 26 152 80 255 -/rdylgn10/10 0 104 55 255 -/rdylgn11/1 165 0 38 255 -/rdylgn11/2 215 48 39 255 -/rdylgn11/3 244 109 67 255 -/rdylgn11/4 253 174 97 255 -/rdylgn11/5 254 224 139 255 -/rdylgn11/6 255 255 191 255 -/rdylgn11/7 217 239 139 255 -/rdylgn11/8 166 217 106 255 -/rdylgn11/9 102 189 99 255 -/rdylgn11/10 26 152 80 255 -/rdylgn11/11 0 104 55 255 -/set13/1 228 26 28 255 -/set13/2 55 126 184 255 -/set13/3 77 175 74 255 -/set14/1 228 26 28 255 -/set14/2 55 126 184 255 -/set14/3 77 175 74 255 -/set14/4 152 78 163 255 -/set15/1 228 26 28 255 -/set15/2 55 126 184 255 -/set15/3 77 175 74 255 -/set15/4 152 78 163 255 -/set15/5 255 127 0 255 -/set16/1 228 26 28 255 -/set16/2 55 126 184 255 -/set16/3 77 175 74 255 -/set16/4 152 78 163 255 -/set16/5 255 127 0 255 -/set16/6 255 255 51 255 -/set17/1 228 26 28 255 -/set17/2 55 126 184 255 -/set17/3 77 175 74 255 -/set17/4 152 78 163 255 -/set17/5 255 127 0 255 -/set17/6 255 255 51 255 -/set17/7 166 86 40 255 -/set18/1 228 26 28 255 -/set18/2 55 126 184 255 -/set18/3 77 175 74 255 -/set18/4 152 78 163 255 -/set18/5 255 127 0 255 -/set18/6 255 255 51 255 -/set18/7 166 86 40 255 -/set18/8 247 129 191 255 -/set19/1 228 26 28 255 -/set19/2 55 126 184 255 -/set19/3 77 175 74 255 -/set19/4 152 78 163 255 -/set19/5 255 127 0 255 -/set19/6 255 255 51 255 -/set19/7 166 86 40 255 -/set19/8 247 129 191 255 -/set19/9 153 153 153 255 -/set23/1 102 194 165 255 -/set23/2 252 141 98 255 -/set23/3 141 160 203 255 -/set24/1 102 194 165 255 -/set24/2 252 141 98 255 -/set24/3 141 160 203 255 -/set24/4 231 138 195 255 -/set25/1 102 194 165 255 -/set25/2 252 141 98 255 -/set25/3 141 160 203 255 -/set25/4 231 138 195 255 -/set25/5 166 216 84 255 -/set26/1 102 194 165 255 -/set26/2 252 141 98 255 -/set26/3 141 160 203 255 -/set26/4 231 138 195 255 -/set26/5 166 216 84 255 -/set26/6 255 217 47 255 -/set27/1 102 194 165 255 -/set27/2 252 141 98 255 -/set27/3 141 160 203 255 -/set27/4 231 138 195 255 -/set27/5 166 216 84 255 -/set27/6 255 217 47 255 -/set27/7 229 196 148 255 -/set28/1 102 194 165 255 -/set28/2 252 141 98 255 -/set28/3 141 160 203 255 -/set28/4 231 138 195 255 -/set28/5 166 216 84 255 -/set28/6 255 217 47 255 -/set28/7 229 196 148 255 -/set28/8 179 179 179 255 -/set33/1 141 211 199 255 -/set33/2 255 255 179 255 -/set33/3 190 186 218 255 -/set34/1 141 211 199 255 -/set34/2 255 255 179 255 -/set34/3 190 186 218 255 -/set34/4 251 128 114 255 -/set35/1 141 211 199 255 -/set35/2 255 255 179 255 -/set35/3 190 186 218 255 -/set35/4 251 128 114 255 -/set35/5 128 177 211 255 -/set36/1 141 211 199 255 -/set36/2 255 255 179 255 -/set36/3 190 186 218 255 -/set36/4 251 128 114 255 -/set36/5 128 177 211 255 -/set36/6 253 180 98 255 -/set37/1 141 211 199 255 -/set37/2 255 255 179 255 -/set37/3 190 186 218 255 -/set37/4 251 128 114 255 -/set37/5 128 177 211 255 -/set37/6 253 180 98 255 -/set37/7 179 222 105 255 -/set38/1 141 211 199 255 -/set38/2 255 255 179 255 -/set38/3 190 186 218 255 -/set38/4 251 128 114 255 -/set38/5 128 177 211 255 -/set38/6 253 180 98 255 -/set38/7 179 222 105 255 -/set38/8 252 205 229 255 -/set39/1 141 211 199 255 -/set39/2 255 255 179 255 -/set39/3 190 186 218 255 -/set39/4 251 128 114 255 -/set39/5 128 177 211 255 -/set39/6 253 180 98 255 -/set39/7 179 222 105 255 -/set39/8 252 205 229 255 -/set39/9 217 217 217 255 -/set310/1 141 211 199 255 -/set310/2 255 255 179 255 -/set310/3 190 186 218 255 -/set310/4 251 128 114 255 -/set310/5 128 177 211 255 -/set310/6 253 180 98 255 -/set310/7 179 222 105 255 -/set310/8 252 205 229 255 -/set310/9 217 217 217 255 -/set310/10 188 128 189 255 -/set311/1 141 211 199 255 -/set311/2 255 255 179 255 -/set311/3 190 186 218 255 -/set311/4 251 128 114 255 -/set311/5 128 177 211 255 -/set311/6 253 180 98 255 -/set311/7 179 222 105 255 -/set311/8 252 205 229 255 -/set311/9 217 217 217 255 -/set311/10 188 128 189 255 -/set311/11 204 235 197 255 -/set312/1 141 211 199 255 -/set312/2 255 255 179 255 -/set312/3 190 186 218 255 -/set312/4 251 128 114 255 -/set312/5 128 177 211 255 -/set312/6 253 180 98 255 -/set312/7 179 222 105 255 -/set312/8 252 205 229 255 -/set312/9 217 217 217 255 -/set312/10 188 128 189 255 -/set312/11 204 235 197 255 -/set312/12 255 237 111 255 -/spectral3/1 252 141 89 255 -/spectral3/2 255 255 191 255 -/spectral3/3 153 213 148 255 -/spectral4/1 215 25 28 255 -/spectral4/2 253 174 97 255 -/spectral4/3 171 221 164 255 -/spectral4/4 43 131 186 255 -/spectral5/1 215 25 28 255 -/spectral5/2 253 174 97 255 -/spectral5/3 255 255 191 255 -/spectral5/4 171 221 164 255 -/spectral5/5 43 131 186 255 -/spectral6/1 213 62 79 255 -/spectral6/2 252 141 89 255 -/spectral6/3 254 224 139 255 -/spectral6/4 230 245 152 255 -/spectral6/5 153 213 148 255 -/spectral6/6 50 136 189 255 -/spectral7/1 213 62 79 255 -/spectral7/2 252 141 89 255 -/spectral7/3 254 224 139 255 -/spectral7/4 255 255 191 255 -/spectral7/5 230 245 152 255 -/spectral7/6 153 213 148 255 -/spectral7/7 50 136 189 255 -/spectral8/1 213 62 79 255 -/spectral8/2 244 109 67 255 -/spectral8/3 253 174 97 255 -/spectral8/4 254 224 139 255 -/spectral8/5 230 245 152 255 -/spectral8/6 171 221 164 255 -/spectral8/7 102 194 165 255 -/spectral8/8 50 136 189 255 -/spectral9/1 213 62 79 255 -/spectral9/2 244 109 67 255 -/spectral9/3 253 174 97 255 -/spectral9/4 254 224 139 255 -/spectral9/5 255 255 191 255 -/spectral9/6 230 245 152 255 -/spectral9/7 171 221 164 255 -/spectral9/8 102 194 165 255 -/spectral9/9 50 136 189 255 -/spectral10/1 158 1 66 255 -/spectral10/2 213 62 79 255 -/spectral10/3 244 109 67 255 -/spectral10/4 253 174 97 255 -/spectral10/5 254 224 139 255 -/spectral10/6 230 245 152 255 -/spectral10/7 171 221 164 255 -/spectral10/8 102 194 165 255 -/spectral10/9 50 136 189 255 -/spectral10/10 94 79 162 255 -/spectral11/1 158 1 66 255 -/spectral11/2 213 62 79 255 -/spectral11/3 244 109 67 255 -/spectral11/4 253 174 97 255 -/spectral11/5 254 224 139 255 -/spectral11/6 255 255 191 255 -/spectral11/7 230 245 152 255 -/spectral11/8 171 221 164 255 -/spectral11/9 102 194 165 255 -/spectral11/10 50 136 189 255 -/spectral11/11 94 79 162 255 -/ylgn3/1 247 252 185 255 -/ylgn3/2 173 221 142 255 -/ylgn3/3 49 163 84 255 -/ylgn4/1 255 255 204 255 -/ylgn4/2 194 230 153 255 -/ylgn4/3 120 198 121 255 -/ylgn4/4 35 132 67 255 -/ylgn5/1 255 255 204 255 -/ylgn5/2 194 230 153 255 -/ylgn5/3 120 198 121 255 -/ylgn5/4 49 163 84 255 -/ylgn5/5 0 104 55 255 -/ylgn6/1 255 255 204 255 -/ylgn6/2 217 240 163 255 -/ylgn6/3 173 221 142 255 -/ylgn6/4 120 198 121 255 -/ylgn6/5 49 163 84 255 -/ylgn6/6 0 104 55 255 -/ylgn7/1 255 255 204 255 -/ylgn7/2 217 240 163 255 -/ylgn7/3 173 221 142 255 -/ylgn7/4 120 198 121 255 -/ylgn7/5 65 171 93 255 -/ylgn7/6 35 132 67 255 -/ylgn7/7 0 90 50 255 -/ylgn8/1 255 255 229 255 -/ylgn8/2 247 252 185 255 -/ylgn8/3 217 240 163 255 -/ylgn8/4 173 221 142 255 -/ylgn8/5 120 198 121 255 -/ylgn8/6 65 171 93 255 -/ylgn8/7 35 132 67 255 -/ylgn8/8 0 90 50 255 -/ylgn9/1 255 255 229 255 -/ylgn9/2 247 252 185 255 -/ylgn9/3 217 240 163 255 -/ylgn9/4 173 221 142 255 -/ylgn9/5 120 198 121 255 -/ylgn9/6 65 171 93 255 -/ylgn9/7 35 132 67 255 -/ylgn9/8 0 104 55 255 -/ylgn9/9 0 69 41 255 -/ylgnbu3/1 237 248 177 255 -/ylgnbu3/2 127 205 187 255 -/ylgnbu3/3 44 127 184 255 -/ylgnbu4/1 255 255 204 255 -/ylgnbu4/2 161 218 180 255 -/ylgnbu4/3 65 182 196 255 -/ylgnbu4/4 34 94 168 255 -/ylgnbu5/1 255 255 204 255 -/ylgnbu5/2 161 218 180 255 -/ylgnbu5/3 65 182 196 255 -/ylgnbu5/4 44 127 184 255 -/ylgnbu5/5 37 52 148 255 -/ylgnbu6/1 255 255 204 255 -/ylgnbu6/2 199 233 180 255 -/ylgnbu6/3 127 205 187 255 -/ylgnbu6/4 65 182 196 255 -/ylgnbu6/5 44 127 184 255 -/ylgnbu6/6 37 52 148 255 -/ylgnbu7/1 255 255 204 255 -/ylgnbu7/2 199 233 180 255 -/ylgnbu7/3 127 205 187 255 -/ylgnbu7/4 65 182 196 255 -/ylgnbu7/5 29 145 192 255 -/ylgnbu7/6 34 94 168 255 -/ylgnbu7/7 12 44 132 255 -/ylgnbu8/1 255 255 217 255 -/ylgnbu8/2 237 248 177 255 -/ylgnbu8/3 199 233 180 255 -/ylgnbu8/4 127 205 187 255 -/ylgnbu8/5 65 182 196 255 -/ylgnbu8/6 29 145 192 255 -/ylgnbu8/7 34 94 168 255 -/ylgnbu8/8 12 44 132 255 -/ylgnbu9/1 255 255 217 255 -/ylgnbu9/2 237 248 177 255 -/ylgnbu9/3 199 233 180 255 -/ylgnbu9/4 127 205 187 255 -/ylgnbu9/5 65 182 196 255 -/ylgnbu9/6 29 145 192 255 -/ylgnbu9/7 34 94 168 255 -/ylgnbu9/8 37 52 148 255 -/ylgnbu9/9 8 29 88 255 -/ylorbr3/1 255 247 188 255 -/ylorbr3/2 254 196 79 255 -/ylorbr3/3 217 95 14 255 -/ylorbr4/1 255 255 212 255 -/ylorbr4/2 254 217 142 255 -/ylorbr4/3 254 153 41 255 -/ylorbr4/4 204 76 2 255 -/ylorbr5/1 255 255 212 255 -/ylorbr5/2 254 217 142 255 -/ylorbr5/3 254 153 41 255 -/ylorbr5/4 217 95 14 255 -/ylorbr5/5 153 52 4 255 -/ylorbr6/1 255 255 212 255 -/ylorbr6/2 254 227 145 255 -/ylorbr6/3 254 196 79 255 -/ylorbr6/4 254 153 41 255 -/ylorbr6/5 217 95 14 255 -/ylorbr6/6 153 52 4 255 -/ylorbr7/1 255 255 212 255 -/ylorbr7/2 254 227 145 255 -/ylorbr7/3 254 196 79 255 -/ylorbr7/4 254 153 41 255 -/ylorbr7/5 236 112 20 255 -/ylorbr7/6 204 76 2 255 -/ylorbr7/7 140 45 4 255 -/ylorbr8/1 255 255 229 255 -/ylorbr8/2 255 247 188 255 -/ylorbr8/3 254 227 145 255 -/ylorbr8/4 254 196 79 255 -/ylorbr8/5 254 153 41 255 -/ylorbr8/6 236 112 20 255 -/ylorbr8/7 204 76 2 255 -/ylorbr8/8 140 45 4 255 -/ylorbr9/1 255 255 229 255 -/ylorbr9/2 255 247 188 255 -/ylorbr9/3 254 227 145 255 -/ylorbr9/4 254 196 79 255 -/ylorbr9/5 254 153 41 255 -/ylorbr9/6 236 112 20 255 -/ylorbr9/7 204 76 2 255 -/ylorbr9/8 153 52 4 255 -/ylorbr9/9 102 37 6 255 -/ylorrd3/1 255 237 160 255 -/ylorrd3/2 254 178 76 255 -/ylorrd3/3 240 59 32 255 -/ylorrd4/1 255 255 178 255 -/ylorrd4/2 254 204 92 255 -/ylorrd4/3 253 141 60 255 -/ylorrd4/4 227 26 28 255 -/ylorrd5/1 255 255 178 255 -/ylorrd5/2 254 204 92 255 -/ylorrd5/3 253 141 60 255 -/ylorrd5/4 240 59 32 255 -/ylorrd5/5 189 0 38 255 -/ylorrd6/1 255 255 178 255 -/ylorrd6/2 254 217 118 255 -/ylorrd6/3 254 178 76 255 -/ylorrd6/4 253 141 60 255 -/ylorrd6/5 240 59 32 255 -/ylorrd6/6 189 0 38 255 -/ylorrd7/1 255 255 178 255 -/ylorrd7/2 254 217 118 255 -/ylorrd7/3 254 178 76 255 -/ylorrd7/4 253 141 60 255 -/ylorrd7/5 252 78 42 255 -/ylorrd7/6 227 26 28 255 -/ylorrd7/7 177 0 38 255 -/ylorrd8/1 255 255 204 255 -/ylorrd8/2 255 237 160 255 -/ylorrd8/3 254 217 118 255 -/ylorrd8/4 254 178 76 255 -/ylorrd8/5 253 141 60 255 -/ylorrd8/6 252 78 42 255 -/ylorrd8/7 227 26 28 255 -/ylorrd8/8 177 0 38 255 -/ylorrd9/1 255 255 204 255 -/ylorrd9/2 255 237 160 255 -/ylorrd9/3 254 217 118 255 -/ylorrd9/4 254 178 76 255 -/ylorrd9/5 253 141 60 255 -/ylorrd9/6 252 78 42 255 -/ylorrd9/7 227 26 28 255 -/ylorrd9/8 189 0 38 255 -/ylorrd9/9 128 0 38 255 diff --git a/internal/ccall/common/chars.tcl b/internal/ccall/common/chars.tcl deleted file mode 100755 index def8dc5..0000000 --- a/internal/ccall/common/chars.tcl +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/tclsh - -# script to generate fonwidth tables in shapes.c - -package require Gdtclft - -set gd [gd create 100 100] -set white [gd color new $gd 255 255 255] -set black [gd color new $gd 0 0 0] -set fonts {times cour arial} -set size 96 -set angle 0 -set x 20 -set y 20 - -foreach font $fonts { -# set bb [gd text $gd $black $font $size $angle $x $y MM] -# set basewidth [expr [lindex $bb 2] - [lindex $bb 0]] -set basewidth 0 - puts "static double [set font]FontWidth\[\] = \{" - for {set i 0} {$i<32} {incr i} { - set sizes {} - set chars {} - for {set j 0} {$j < 8} {incr j} { - if {$i<4 || ($i>=16 && $i<20) || ($i==15 && $j==7)} { - lappend sizes 0.0000 - } { - set char [format %c [expr $j+$i*8]] -# set bb [gd text $gd $black $font $size $angle $x $y M[set char]M] - set bb [gd text $gd $black $font $size $angle $x $y $char] - lappend sizes [format %.4f [expr ([lindex $bb 2] - [lindex $bb 0] - $basewidth)/double($size)]] - lappend chars $char - } - } - puts " [join $sizes {, }], /* [join $chars {}] */" - } - puts "\};" -} diff --git a/internal/ccall/common/color.h b/internal/ccall/common/color.h deleted file mode 100644 index 06fa4b5..0000000 --- a/internal/ccall/common/color.h +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_COLOR_H -#define GV_COLOR_H - -/* #include "arith.h" */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct hsvrgbacolor_t { - char *name; - unsigned char h, s, v; - unsigned char r, g, b, a; -} hsvrgbacolor_t; - -/* possible representations of color in gvcolor_t */ -typedef enum { HSVA_DOUBLE, RGBA_BYTE, RGBA_WORD, CMYK_BYTE, - RGBA_DOUBLE, COLOR_STRING, COLOR_INDEX } color_type_t; - -/* gvcolor_t can hold a color spec in a choice or representations */ -typedef struct color_s { - union { - double RGBA[4]; - double HSVA[4]; - unsigned char rgba[4]; - unsigned char cmyk[4]; - int rrggbbaa[4]; - char *string; - int index; - } u; - color_type_t type; -} gvcolor_t; - -#define COLOR_MALLOC_FAIL -1 -#define COLOR_UNKNOWN 1 -#define COLOR_OK 0 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/color_lib b/internal/ccall/common/color_lib deleted file mode 100644 index f725f41..0000000 --- a/internal/ccall/common/color_lib +++ /dev/null @@ -1,2491 +0,0 @@ -/accent3/1 127 201 127 255 -/accent3/2 190 174 212 255 -/accent3/3 253 192 134 255 -/accent4/1 127 201 127 255 -/accent4/2 190 174 212 255 -/accent4/3 253 192 134 255 -/accent4/4 255 255 153 255 -/accent5/1 127 201 127 255 -/accent5/2 190 174 212 255 -/accent5/3 253 192 134 255 -/accent5/4 255 255 153 255 -/accent5/5 56 108 176 255 -/accent6/1 127 201 127 255 -/accent6/2 190 174 212 255 -/accent6/3 253 192 134 255 -/accent6/4 255 255 153 255 -/accent6/5 56 108 176 255 -/accent6/6 240 2 127 255 -/accent7/1 127 201 127 255 -/accent7/2 190 174 212 255 -/accent7/3 253 192 134 255 -/accent7/4 255 255 153 255 -/accent7/5 56 108 176 255 -/accent7/6 240 2 127 255 -/accent7/7 191 91 23 255 -/accent8/1 127 201 127 255 -/accent8/2 190 174 212 255 -/accent8/3 253 192 134 255 -/accent8/4 255 255 153 255 -/accent8/5 56 108 176 255 -/accent8/6 240 2 127 255 -/accent8/7 191 91 23 255 -/accent8/8 102 102 102 255 -/blues3/1 222 235 247 255 -/blues3/2 158 202 225 255 -/blues3/3 49 130 189 255 -/blues4/1 239 243 255 255 -/blues4/2 189 215 231 255 -/blues4/3 107 174 214 255 -/blues4/4 33 113 181 255 -/blues5/1 239 243 255 255 -/blues5/2 189 215 231 255 -/blues5/3 107 174 214 255 -/blues5/4 49 130 189 255 -/blues5/5 8 81 156 255 -/blues6/1 239 243 255 255 -/blues6/2 198 219 239 255 -/blues6/3 158 202 225 255 -/blues6/4 107 174 214 255 -/blues6/5 49 130 189 255 -/blues6/6 8 81 156 255 -/blues7/1 239 243 255 255 -/blues7/2 198 219 239 255 -/blues7/3 158 202 225 255 -/blues7/4 107 174 214 255 -/blues7/5 66 146 198 255 -/blues7/6 33 113 181 255 -/blues7/7 8 69 148 255 -/blues8/1 247 251 255 255 -/blues8/2 222 235 247 255 -/blues8/3 198 219 239 255 -/blues8/4 158 202 225 255 -/blues8/5 107 174 214 255 -/blues8/6 66 146 198 255 -/blues8/7 33 113 181 255 -/blues8/8 8 69 148 255 -/blues9/1 247 251 255 255 -/blues9/2 222 235 247 255 -/blues9/3 198 219 239 255 -/blues9/4 158 202 225 255 -/blues9/5 107 174 214 255 -/blues9/6 66 146 198 255 -/blues9/7 33 113 181 255 -/blues9/8 8 81 156 255 -/blues9/9 8 48 107 255 -/brbg10/1 84 48 5 255 -/brbg10/10 0 60 48 255 -/brbg10/2 140 81 10 255 -/brbg10/3 191 129 45 255 -/brbg10/4 223 194 125 255 -/brbg10/5 246 232 195 255 -/brbg10/6 199 234 229 255 -/brbg10/7 128 205 193 255 -/brbg10/8 53 151 143 255 -/brbg10/9 1 102 94 255 -/brbg11/1 84 48 5 255 -/brbg11/10 1 102 94 255 -/brbg11/11 0 60 48 255 -/brbg11/2 140 81 10 255 -/brbg11/3 191 129 45 255 -/brbg11/4 223 194 125 255 -/brbg11/5 246 232 195 255 -/brbg11/6 245 245 245 255 -/brbg11/7 199 234 229 255 -/brbg11/8 128 205 193 255 -/brbg11/9 53 151 143 255 -/brbg3/1 216 179 101 255 -/brbg3/2 245 245 245 255 -/brbg3/3 90 180 172 255 -/brbg4/1 166 97 26 255 -/brbg4/2 223 194 125 255 -/brbg4/3 128 205 193 255 -/brbg4/4 1 133 113 255 -/brbg5/1 166 97 26 255 -/brbg5/2 223 194 125 255 -/brbg5/3 245 245 245 255 -/brbg5/4 128 205 193 255 -/brbg5/5 1 133 113 255 -/brbg6/1 140 81 10 255 -/brbg6/2 216 179 101 255 -/brbg6/3 246 232 195 255 -/brbg6/4 199 234 229 255 -/brbg6/5 90 180 172 255 -/brbg6/6 1 102 94 255 -/brbg7/1 140 81 10 255 -/brbg7/2 216 179 101 255 -/brbg7/3 246 232 195 255 -/brbg7/4 245 245 245 255 -/brbg7/5 199 234 229 255 -/brbg7/6 90 180 172 255 -/brbg7/7 1 102 94 255 -/brbg8/1 140 81 10 255 -/brbg8/2 191 129 45 255 -/brbg8/3 223 194 125 255 -/brbg8/4 246 232 195 255 -/brbg8/5 199 234 229 255 -/brbg8/6 128 205 193 255 -/brbg8/7 53 151 143 255 -/brbg8/8 1 102 94 255 -/brbg9/1 140 81 10 255 -/brbg9/2 191 129 45 255 -/brbg9/3 223 194 125 255 -/brbg9/4 246 232 195 255 -/brbg9/5 245 245 245 255 -/brbg9/6 199 234 229 255 -/brbg9/7 128 205 193 255 -/brbg9/8 53 151 143 255 -/brbg9/9 1 102 94 255 -/bugn3/1 229 245 249 255 -/bugn3/2 153 216 201 255 -/bugn3/3 44 162 95 255 -/bugn4/1 237 248 251 255 -/bugn4/2 178 226 226 255 -/bugn4/3 102 194 164 255 -/bugn4/4 35 139 69 255 -/bugn5/1 237 248 251 255 -/bugn5/2 178 226 226 255 -/bugn5/3 102 194 164 255 -/bugn5/4 44 162 95 255 -/bugn5/5 0 109 44 255 -/bugn6/1 237 248 251 255 -/bugn6/2 204 236 230 255 -/bugn6/3 153 216 201 255 -/bugn6/4 102 194 164 255 -/bugn6/5 44 162 95 255 -/bugn6/6 0 109 44 255 -/bugn7/1 237 248 251 255 -/bugn7/2 204 236 230 255 -/bugn7/3 153 216 201 255 -/bugn7/4 102 194 164 255 -/bugn7/5 65 174 118 255 -/bugn7/6 35 139 69 255 -/bugn7/7 0 88 36 255 -/bugn8/1 247 252 253 255 -/bugn8/2 229 245 249 255 -/bugn8/3 204 236 230 255 -/bugn8/4 153 216 201 255 -/bugn8/5 102 194 164 255 -/bugn8/6 65 174 118 255 -/bugn8/7 35 139 69 255 -/bugn8/8 0 88 36 255 -/bugn9/1 247 252 253 255 -/bugn9/2 229 245 249 255 -/bugn9/3 204 236 230 255 -/bugn9/4 153 216 201 255 -/bugn9/5 102 194 164 255 -/bugn9/6 65 174 118 255 -/bugn9/7 35 139 69 255 -/bugn9/8 0 109 44 255 -/bugn9/9 0 68 27 255 -/bupu3/1 224 236 244 255 -/bupu3/2 158 188 218 255 -/bupu3/3 136 86 167 255 -/bupu4/1 237 248 251 255 -/bupu4/2 179 205 227 255 -/bupu4/3 140 150 198 255 -/bupu4/4 136 65 157 255 -/bupu5/1 237 248 251 255 -/bupu5/2 179 205 227 255 -/bupu5/3 140 150 198 255 -/bupu5/4 136 86 167 255 -/bupu5/5 129 15 124 255 -/bupu6/1 237 248 251 255 -/bupu6/2 191 211 230 255 -/bupu6/3 158 188 218 255 -/bupu6/4 140 150 198 255 -/bupu6/5 136 86 167 255 -/bupu6/6 129 15 124 255 -/bupu7/1 237 248 251 255 -/bupu7/2 191 211 230 255 -/bupu7/3 158 188 218 255 -/bupu7/4 140 150 198 255 -/bupu7/5 140 107 177 255 -/bupu7/6 136 65 157 255 -/bupu7/7 110 1 107 255 -/bupu8/1 247 252 253 255 -/bupu8/2 224 236 244 255 -/bupu8/3 191 211 230 255 -/bupu8/4 158 188 218 255 -/bupu8/5 140 150 198 255 -/bupu8/6 140 107 177 255 -/bupu8/7 136 65 157 255 -/bupu8/8 110 1 107 255 -/bupu9/1 247 252 253 255 -/bupu9/2 224 236 244 255 -/bupu9/3 191 211 230 255 -/bupu9/4 158 188 218 255 -/bupu9/5 140 150 198 255 -/bupu9/6 140 107 177 255 -/bupu9/7 136 65 157 255 -/bupu9/8 129 15 124 255 -/bupu9/9 77 0 75 255 -/dark23/1 27 158 119 255 -/dark23/2 217 95 2 255 -/dark23/3 117 112 179 255 -/dark24/1 27 158 119 255 -/dark24/2 217 95 2 255 -/dark24/3 117 112 179 255 -/dark24/4 231 41 138 255 -/dark25/1 27 158 119 255 -/dark25/2 217 95 2 255 -/dark25/3 117 112 179 255 -/dark25/4 231 41 138 255 -/dark25/5 102 166 30 255 -/dark26/1 27 158 119 255 -/dark26/2 217 95 2 255 -/dark26/3 117 112 179 255 -/dark26/4 231 41 138 255 -/dark26/5 102 166 30 255 -/dark26/6 230 171 2 255 -/dark27/1 27 158 119 255 -/dark27/2 217 95 2 255 -/dark27/3 117 112 179 255 -/dark27/4 231 41 138 255 -/dark27/5 102 166 30 255 -/dark27/6 230 171 2 255 -/dark27/7 166 118 29 255 -/dark28/1 27 158 119 255 -/dark28/2 217 95 2 255 -/dark28/3 117 112 179 255 -/dark28/4 231 41 138 255 -/dark28/5 102 166 30 255 -/dark28/6 230 171 2 255 -/dark28/7 166 118 29 255 -/dark28/8 102 102 102 255 -/gnbu3/1 224 243 219 255 -/gnbu3/2 168 221 181 255 -/gnbu3/3 67 162 202 255 -/gnbu4/1 240 249 232 255 -/gnbu4/2 186 228 188 255 -/gnbu4/3 123 204 196 255 -/gnbu4/4 43 140 190 255 -/gnbu5/1 240 249 232 255 -/gnbu5/2 186 228 188 255 -/gnbu5/3 123 204 196 255 -/gnbu5/4 67 162 202 255 -/gnbu5/5 8 104 172 255 -/gnbu6/1 240 249 232 255 -/gnbu6/2 204 235 197 255 -/gnbu6/3 168 221 181 255 -/gnbu6/4 123 204 196 255 -/gnbu6/5 67 162 202 255 -/gnbu6/6 8 104 172 255 -/gnbu7/1 240 249 232 255 -/gnbu7/2 204 235 197 255 -/gnbu7/3 168 221 181 255 -/gnbu7/4 123 204 196 255 -/gnbu7/5 78 179 211 255 -/gnbu7/6 43 140 190 255 -/gnbu7/7 8 88 158 255 -/gnbu8/1 247 252 240 255 -/gnbu8/2 224 243 219 255 -/gnbu8/3 204 235 197 255 -/gnbu8/4 168 221 181 255 -/gnbu8/5 123 204 196 255 -/gnbu8/6 78 179 211 255 -/gnbu8/7 43 140 190 255 -/gnbu8/8 8 88 158 255 -/gnbu9/1 247 252 240 255 -/gnbu9/2 224 243 219 255 -/gnbu9/3 204 235 197 255 -/gnbu9/4 168 221 181 255 -/gnbu9/5 123 204 196 255 -/gnbu9/6 78 179 211 255 -/gnbu9/7 43 140 190 255 -/gnbu9/8 8 104 172 255 -/gnbu9/9 8 64 129 255 -/greens3/1 229 245 224 255 -/greens3/2 161 217 155 255 -/greens3/3 49 163 84 255 -/greens4/1 237 248 233 255 -/greens4/2 186 228 179 255 -/greens4/3 116 196 118 255 -/greens4/4 35 139 69 255 -/greens5/1 237 248 233 255 -/greens5/2 186 228 179 255 -/greens5/3 116 196 118 255 -/greens5/4 49 163 84 255 -/greens5/5 0 109 44 255 -/greens6/1 237 248 233 255 -/greens6/2 199 233 192 255 -/greens6/3 161 217 155 255 -/greens6/4 116 196 118 255 -/greens6/5 49 163 84 255 -/greens6/6 0 109 44 255 -/greens7/1 237 248 233 255 -/greens7/2 199 233 192 255 -/greens7/3 161 217 155 255 -/greens7/4 116 196 118 255 -/greens7/5 65 171 93 255 -/greens7/6 35 139 69 255 -/greens7/7 0 90 50 255 -/greens8/1 247 252 245 255 -/greens8/2 229 245 224 255 -/greens8/3 199 233 192 255 -/greens8/4 161 217 155 255 -/greens8/5 116 196 118 255 -/greens8/6 65 171 93 255 -/greens8/7 35 139 69 255 -/greens8/8 0 90 50 255 -/greens9/1 247 252 245 255 -/greens9/2 229 245 224 255 -/greens9/3 199 233 192 255 -/greens9/4 161 217 155 255 -/greens9/5 116 196 118 255 -/greens9/6 65 171 93 255 -/greens9/7 35 139 69 255 -/greens9/8 0 109 44 255 -/greens9/9 0 68 27 255 -/greys3/1 240 240 240 255 -/greys3/2 189 189 189 255 -/greys3/3 99 99 99 255 -/greys4/1 247 247 247 255 -/greys4/2 204 204 204 255 -/greys4/3 150 150 150 255 -/greys4/4 82 82 82 255 -/greys5/1 247 247 247 255 -/greys5/2 204 204 204 255 -/greys5/3 150 150 150 255 -/greys5/4 99 99 99 255 -/greys5/5 37 37 37 255 -/greys6/1 247 247 247 255 -/greys6/2 217 217 217 255 -/greys6/3 189 189 189 255 -/greys6/4 150 150 150 255 -/greys6/5 99 99 99 255 -/greys6/6 37 37 37 255 -/greys7/1 247 247 247 255 -/greys7/2 217 217 217 255 -/greys7/3 189 189 189 255 -/greys7/4 150 150 150 255 -/greys7/5 115 115 115 255 -/greys7/6 82 82 82 255 -/greys7/7 37 37 37 255 -/greys8/1 255 255 255 255 -/greys8/2 240 240 240 255 -/greys8/3 217 217 217 255 -/greys8/4 189 189 189 255 -/greys8/5 150 150 150 255 -/greys8/6 115 115 115 255 -/greys8/7 82 82 82 255 -/greys8/8 37 37 37 255 -/greys9/1 255 255 255 255 -/greys9/2 240 240 240 255 -/greys9/3 217 217 217 255 -/greys9/4 189 189 189 255 -/greys9/5 150 150 150 255 -/greys9/6 115 115 115 255 -/greys9/7 82 82 82 255 -/greys9/8 37 37 37 255 -/greys9/9 0 0 0 255 -/oranges3/1 254 230 206 255 -/oranges3/2 253 174 107 255 -/oranges3/3 230 85 13 255 -/oranges4/1 254 237 222 255 -/oranges4/2 253 190 133 255 -/oranges4/3 253 141 60 255 -/oranges4/4 217 71 1 255 -/oranges5/1 254 237 222 255 -/oranges5/2 253 190 133 255 -/oranges5/3 253 141 60 255 -/oranges5/4 230 85 13 255 -/oranges5/5 166 54 3 255 -/oranges6/1 254 237 222 255 -/oranges6/2 253 208 162 255 -/oranges6/3 253 174 107 255 -/oranges6/4 253 141 60 255 -/oranges6/5 230 85 13 255 -/oranges6/6 166 54 3 255 -/oranges7/1 254 237 222 255 -/oranges7/2 253 208 162 255 -/oranges7/3 253 174 107 255 -/oranges7/4 253 141 60 255 -/oranges7/5 241 105 19 255 -/oranges7/6 217 72 1 255 -/oranges7/7 140 45 4 255 -/oranges8/1 255 245 235 255 -/oranges8/2 254 230 206 255 -/oranges8/3 253 208 162 255 -/oranges8/4 253 174 107 255 -/oranges8/5 253 141 60 255 -/oranges8/6 241 105 19 255 -/oranges8/7 217 72 1 255 -/oranges8/8 140 45 4 255 -/oranges9/1 255 245 235 255 -/oranges9/2 254 230 206 255 -/oranges9/3 253 208 162 255 -/oranges9/4 253 174 107 255 -/oranges9/5 253 141 60 255 -/oranges9/6 241 105 19 255 -/oranges9/7 217 72 1 255 -/oranges9/8 166 54 3 255 -/oranges9/9 127 39 4 255 -/orrd3/1 254 232 200 255 -/orrd3/2 253 187 132 255 -/orrd3/3 227 74 51 255 -/orrd4/1 254 240 217 255 -/orrd4/2 253 204 138 255 -/orrd4/3 252 141 89 255 -/orrd4/4 215 48 31 255 -/orrd5/1 254 240 217 255 -/orrd5/2 253 204 138 255 -/orrd5/3 252 141 89 255 -/orrd5/4 227 74 51 255 -/orrd5/5 179 0 0 255 -/orrd6/1 254 240 217 255 -/orrd6/2 253 212 158 255 -/orrd6/3 253 187 132 255 -/orrd6/4 252 141 89 255 -/orrd6/5 227 74 51 255 -/orrd6/6 179 0 0 255 -/orrd7/1 254 240 217 255 -/orrd7/2 253 212 158 255 -/orrd7/3 253 187 132 255 -/orrd7/4 252 141 89 255 -/orrd7/5 239 101 72 255 -/orrd7/6 215 48 31 255 -/orrd7/7 153 0 0 255 -/orrd8/1 255 247 236 255 -/orrd8/2 254 232 200 255 -/orrd8/3 253 212 158 255 -/orrd8/4 253 187 132 255 -/orrd8/5 252 141 89 255 -/orrd8/6 239 101 72 255 -/orrd8/7 215 48 31 255 -/orrd8/8 153 0 0 255 -/orrd9/1 255 247 236 255 -/orrd9/2 254 232 200 255 -/orrd9/3 253 212 158 255 -/orrd9/4 253 187 132 255 -/orrd9/5 252 141 89 255 -/orrd9/6 239 101 72 255 -/orrd9/7 215 48 31 255 -/orrd9/8 179 0 0 255 -/orrd9/9 127 0 0 255 -/paired10/1 166 206 227 255 -/paired10/10 106 61 154 255 -/paired10/2 31 120 180 255 -/paired10/3 178 223 138 255 -/paired10/4 51 160 44 255 -/paired10/5 251 154 153 255 -/paired10/6 227 26 28 255 -/paired10/7 253 191 111 255 -/paired10/8 255 127 0 255 -/paired10/9 202 178 214 255 -/paired11/1 166 206 227 255 -/paired11/10 106 61 154 255 -/paired11/11 255 255 153 255 -/paired11/2 31 120 180 255 -/paired11/3 178 223 138 255 -/paired11/4 51 160 44 255 -/paired11/5 251 154 153 255 -/paired11/6 227 26 28 255 -/paired11/7 253 191 111 255 -/paired11/8 255 127 0 255 -/paired11/9 202 178 214 255 -/paired12/1 166 206 227 255 -/paired12/10 106 61 154 255 -/paired12/11 255 255 153 255 -/paired12/12 177 89 40 255 -/paired12/2 31 120 180 255 -/paired12/3 178 223 138 255 -/paired12/4 51 160 44 255 -/paired12/5 251 154 153 255 -/paired12/6 227 26 28 255 -/paired12/7 253 191 111 255 -/paired12/8 255 127 0 255 -/paired12/9 202 178 214 255 -/paired3/1 166 206 227 255 -/paired3/2 31 120 180 255 -/paired3/3 178 223 138 255 -/paired4/1 166 206 227 255 -/paired4/2 31 120 180 255 -/paired4/3 178 223 138 255 -/paired4/4 51 160 44 255 -/paired5/1 166 206 227 255 -/paired5/2 31 120 180 255 -/paired5/3 178 223 138 255 -/paired5/4 51 160 44 255 -/paired5/5 251 154 153 255 -/paired6/1 166 206 227 255 -/paired6/2 31 120 180 255 -/paired6/3 178 223 138 255 -/paired6/4 51 160 44 255 -/paired6/5 251 154 153 255 -/paired6/6 227 26 28 255 -/paired7/1 166 206 227 255 -/paired7/2 31 120 180 255 -/paired7/3 178 223 138 255 -/paired7/4 51 160 44 255 -/paired7/5 251 154 153 255 -/paired7/6 227 26 28 255 -/paired7/7 253 191 111 255 -/paired8/1 166 206 227 255 -/paired8/2 31 120 180 255 -/paired8/3 178 223 138 255 -/paired8/4 51 160 44 255 -/paired8/5 251 154 153 255 -/paired8/6 227 26 28 255 -/paired8/7 253 191 111 255 -/paired8/8 255 127 0 255 -/paired9/1 166 206 227 255 -/paired9/2 31 120 180 255 -/paired9/3 178 223 138 255 -/paired9/4 51 160 44 255 -/paired9/5 251 154 153 255 -/paired9/6 227 26 28 255 -/paired9/7 253 191 111 255 -/paired9/8 255 127 0 255 -/paired9/9 202 178 214 255 -/pastel13/1 251 180 174 255 -/pastel13/2 179 205 227 255 -/pastel13/3 204 235 197 255 -/pastel14/1 251 180 174 255 -/pastel14/2 179 205 227 255 -/pastel14/3 204 235 197 255 -/pastel14/4 222 203 228 255 -/pastel15/1 251 180 174 255 -/pastel15/2 179 205 227 255 -/pastel15/3 204 235 197 255 -/pastel15/4 222 203 228 255 -/pastel15/5 254 217 166 255 -/pastel16/1 251 180 174 255 -/pastel16/2 179 205 227 255 -/pastel16/3 204 235 197 255 -/pastel16/4 222 203 228 255 -/pastel16/5 254 217 166 255 -/pastel16/6 255 255 204 255 -/pastel17/1 251 180 174 255 -/pastel17/2 179 205 227 255 -/pastel17/3 204 235 197 255 -/pastel17/4 222 203 228 255 -/pastel17/5 254 217 166 255 -/pastel17/6 255 255 204 255 -/pastel17/7 229 216 189 255 -/pastel18/1 251 180 174 255 -/pastel18/2 179 205 227 255 -/pastel18/3 204 235 197 255 -/pastel18/4 222 203 228 255 -/pastel18/5 254 217 166 255 -/pastel18/6 255 255 204 255 -/pastel18/7 229 216 189 255 -/pastel18/8 253 218 236 255 -/pastel19/1 251 180 174 255 -/pastel19/2 179 205 227 255 -/pastel19/3 204 235 197 255 -/pastel19/4 222 203 228 255 -/pastel19/5 254 217 166 255 -/pastel19/6 255 255 204 255 -/pastel19/7 229 216 189 255 -/pastel19/8 253 218 236 255 -/pastel19/9 242 242 242 255 -/pastel23/1 179 226 205 255 -/pastel23/2 253 205 172 255 -/pastel23/3 203 213 232 255 -/pastel24/1 179 226 205 255 -/pastel24/2 253 205 172 255 -/pastel24/3 203 213 232 255 -/pastel24/4 244 202 228 255 -/pastel25/1 179 226 205 255 -/pastel25/2 253 205 172 255 -/pastel25/3 203 213 232 255 -/pastel25/4 244 202 228 255 -/pastel25/5 230 245 201 255 -/pastel26/1 179 226 205 255 -/pastel26/2 253 205 172 255 -/pastel26/3 203 213 232 255 -/pastel26/4 244 202 228 255 -/pastel26/5 230 245 201 255 -/pastel26/6 255 242 174 255 -/pastel27/1 179 226 205 255 -/pastel27/2 253 205 172 255 -/pastel27/3 203 213 232 255 -/pastel27/4 244 202 228 255 -/pastel27/5 230 245 201 255 -/pastel27/6 255 242 174 255 -/pastel27/7 241 226 204 255 -/pastel28/1 179 226 205 255 -/pastel28/2 253 205 172 255 -/pastel28/3 203 213 232 255 -/pastel28/4 244 202 228 255 -/pastel28/5 230 245 201 255 -/pastel28/6 255 242 174 255 -/pastel28/7 241 226 204 255 -/pastel28/8 204 204 204 255 -/piyg10/1 142 1 82 255 -/piyg10/10 39 100 25 255 -/piyg10/2 197 27 125 255 -/piyg10/3 222 119 174 255 -/piyg10/4 241 182 218 255 -/piyg10/5 253 224 239 255 -/piyg10/6 230 245 208 255 -/piyg10/7 184 225 134 255 -/piyg10/8 127 188 65 255 -/piyg10/9 77 146 33 255 -/piyg11/1 142 1 82 255 -/piyg11/10 77 146 33 255 -/piyg11/11 39 100 25 255 -/piyg11/2 197 27 125 255 -/piyg11/3 222 119 174 255 -/piyg11/4 241 182 218 255 -/piyg11/5 253 224 239 255 -/piyg11/6 247 247 247 255 -/piyg11/7 230 245 208 255 -/piyg11/8 184 225 134 255 -/piyg11/9 127 188 65 255 -/piyg3/1 233 163 201 255 -/piyg3/2 247 247 247 255 -/piyg3/3 161 215 106 255 -/piyg4/1 208 28 139 255 -/piyg4/2 241 182 218 255 -/piyg4/3 184 225 134 255 -/piyg4/4 77 172 38 255 -/piyg5/1 208 28 139 255 -/piyg5/2 241 182 218 255 -/piyg5/3 247 247 247 255 -/piyg5/4 184 225 134 255 -/piyg5/5 77 172 38 255 -/piyg6/1 197 27 125 255 -/piyg6/2 233 163 201 255 -/piyg6/3 253 224 239 255 -/piyg6/4 230 245 208 255 -/piyg6/5 161 215 106 255 -/piyg6/6 77 146 33 255 -/piyg7/1 197 27 125 255 -/piyg7/2 233 163 201 255 -/piyg7/3 253 224 239 255 -/piyg7/4 247 247 247 255 -/piyg7/5 230 245 208 255 -/piyg7/6 161 215 106 255 -/piyg7/7 77 146 33 255 -/piyg8/1 197 27 125 255 -/piyg8/2 222 119 174 255 -/piyg8/3 241 182 218 255 -/piyg8/4 253 224 239 255 -/piyg8/5 230 245 208 255 -/piyg8/6 184 225 134 255 -/piyg8/7 127 188 65 255 -/piyg8/8 77 146 33 255 -/piyg9/1 197 27 125 255 -/piyg9/2 222 119 174 255 -/piyg9/3 241 182 218 255 -/piyg9/4 253 224 239 255 -/piyg9/5 247 247 247 255 -/piyg9/6 230 245 208 255 -/piyg9/7 184 225 134 255 -/piyg9/8 127 188 65 255 -/piyg9/9 77 146 33 255 -/prgn10/1 64 0 75 255 -/prgn10/10 0 68 27 255 -/prgn10/2 118 42 131 255 -/prgn10/3 153 112 171 255 -/prgn10/4 194 165 207 255 -/prgn10/5 231 212 232 255 -/prgn10/6 217 240 211 255 -/prgn10/7 166 219 160 255 -/prgn10/8 90 174 97 255 -/prgn10/9 27 120 55 255 -/prgn11/1 64 0 75 255 -/prgn11/10 27 120 55 255 -/prgn11/11 0 68 27 255 -/prgn11/2 118 42 131 255 -/prgn11/3 153 112 171 255 -/prgn11/4 194 165 207 255 -/prgn11/5 231 212 232 255 -/prgn11/6 247 247 247 255 -/prgn11/7 217 240 211 255 -/prgn11/8 166 219 160 255 -/prgn11/9 90 174 97 255 -/prgn3/1 175 141 195 255 -/prgn3/2 247 247 247 255 -/prgn3/3 127 191 123 255 -/prgn4/1 123 50 148 255 -/prgn4/2 194 165 207 255 -/prgn4/3 166 219 160 255 -/prgn4/4 0 136 55 255 -/prgn5/1 123 50 148 255 -/prgn5/2 194 165 207 255 -/prgn5/3 247 247 247 255 -/prgn5/4 166 219 160 255 -/prgn5/5 0 136 55 255 -/prgn6/1 118 42 131 255 -/prgn6/2 175 141 195 255 -/prgn6/3 231 212 232 255 -/prgn6/4 217 240 211 255 -/prgn6/5 127 191 123 255 -/prgn6/6 27 120 55 255 -/prgn7/1 118 42 131 255 -/prgn7/2 175 141 195 255 -/prgn7/3 231 212 232 255 -/prgn7/4 247 247 247 255 -/prgn7/5 217 240 211 255 -/prgn7/6 127 191 123 255 -/prgn7/7 27 120 55 255 -/prgn8/1 118 42 131 255 -/prgn8/2 153 112 171 255 -/prgn8/3 194 165 207 255 -/prgn8/4 231 212 232 255 -/prgn8/5 217 240 211 255 -/prgn8/6 166 219 160 255 -/prgn8/7 90 174 97 255 -/prgn8/8 27 120 55 255 -/prgn9/1 118 42 131 255 -/prgn9/2 153 112 171 255 -/prgn9/3 194 165 207 255 -/prgn9/4 231 212 232 255 -/prgn9/5 247 247 247 255 -/prgn9/6 217 240 211 255 -/prgn9/7 166 219 160 255 -/prgn9/8 90 174 97 255 -/prgn9/9 27 120 55 255 -/pubu3/1 236 231 242 255 -/pubu3/2 166 189 219 255 -/pubu3/3 43 140 190 255 -/pubu4/1 241 238 246 255 -/pubu4/2 189 201 225 255 -/pubu4/3 116 169 207 255 -/pubu4/4 5 112 176 255 -/pubu5/1 241 238 246 255 -/pubu5/2 189 201 225 255 -/pubu5/3 116 169 207 255 -/pubu5/4 43 140 190 255 -/pubu5/5 4 90 141 255 -/pubu6/1 241 238 246 255 -/pubu6/2 208 209 230 255 -/pubu6/3 166 189 219 255 -/pubu6/4 116 169 207 255 -/pubu6/5 43 140 190 255 -/pubu6/6 4 90 141 255 -/pubu7/1 241 238 246 255 -/pubu7/2 208 209 230 255 -/pubu7/3 166 189 219 255 -/pubu7/4 116 169 207 255 -/pubu7/5 54 144 192 255 -/pubu7/6 5 112 176 255 -/pubu7/7 3 78 123 255 -/pubu8/1 255 247 251 255 -/pubu8/2 236 231 242 255 -/pubu8/3 208 209 230 255 -/pubu8/4 166 189 219 255 -/pubu8/5 116 169 207 255 -/pubu8/6 54 144 192 255 -/pubu8/7 5 112 176 255 -/pubu8/8 3 78 123 255 -/pubu9/1 255 247 251 255 -/pubu9/2 236 231 242 255 -/pubu9/3 208 209 230 255 -/pubu9/4 166 189 219 255 -/pubu9/5 116 169 207 255 -/pubu9/6 54 144 192 255 -/pubu9/7 5 112 176 255 -/pubu9/8 4 90 141 255 -/pubu9/9 2 56 88 255 -/pubugn3/1 236 226 240 255 -/pubugn3/2 166 189 219 255 -/pubugn3/3 28 144 153 255 -/pubugn4/1 246 239 247 255 -/pubugn4/2 189 201 225 255 -/pubugn4/3 103 169 207 255 -/pubugn4/4 2 129 138 255 -/pubugn5/1 246 239 247 255 -/pubugn5/2 189 201 225 255 -/pubugn5/3 103 169 207 255 -/pubugn5/4 28 144 153 255 -/pubugn5/5 1 108 89 255 -/pubugn6/1 246 239 247 255 -/pubugn6/2 208 209 230 255 -/pubugn6/3 166 189 219 255 -/pubugn6/4 103 169 207 255 -/pubugn6/5 28 144 153 255 -/pubugn6/6 1 108 89 255 -/pubugn7/1 246 239 247 255 -/pubugn7/2 208 209 230 255 -/pubugn7/3 166 189 219 255 -/pubugn7/4 103 169 207 255 -/pubugn7/5 54 144 192 255 -/pubugn7/6 2 129 138 255 -/pubugn7/7 1 100 80 255 -/pubugn8/1 255 247 251 255 -/pubugn8/2 236 226 240 255 -/pubugn8/3 208 209 230 255 -/pubugn8/4 166 189 219 255 -/pubugn8/5 103 169 207 255 -/pubugn8/6 54 144 192 255 -/pubugn8/7 2 129 138 255 -/pubugn8/8 1 100 80 255 -/pubugn9/1 255 247 251 255 -/pubugn9/2 236 226 240 255 -/pubugn9/3 208 209 230 255 -/pubugn9/4 166 189 219 255 -/pubugn9/5 103 169 207 255 -/pubugn9/6 54 144 192 255 -/pubugn9/7 2 129 138 255 -/pubugn9/8 1 108 89 255 -/pubugn9/9 1 70 54 255 -/puor10/1 127 59 8 255 -/puor10/10 45 0 75 255 -/puor10/2 179 88 6 255 -/puor10/3 224 130 20 255 -/puor10/4 253 184 99 255 -/puor10/5 254 224 182 255 -/puor10/6 216 218 235 255 -/puor10/7 178 171 210 255 -/puor10/8 128 115 172 255 -/puor10/9 84 39 136 255 -/puor11/1 127 59 8 255 -/puor11/10 84 39 136 255 -/puor11/11 45 0 75 255 -/puor11/2 179 88 6 255 -/puor11/3 224 130 20 255 -/puor11/4 253 184 99 255 -/puor11/5 254 224 182 255 -/puor11/6 247 247 247 255 -/puor11/7 216 218 235 255 -/puor11/8 178 171 210 255 -/puor11/9 128 115 172 255 -/puor3/1 241 163 64 255 -/puor3/2 247 247 247 255 -/puor3/3 153 142 195 255 -/puor4/1 230 97 1 255 -/puor4/2 253 184 99 255 -/puor4/3 178 171 210 255 -/puor4/4 94 60 153 255 -/puor5/1 230 97 1 255 -/puor5/2 253 184 99 255 -/puor5/3 247 247 247 255 -/puor5/4 178 171 210 255 -/puor5/5 94 60 153 255 -/puor6/1 179 88 6 255 -/puor6/2 241 163 64 255 -/puor6/3 254 224 182 255 -/puor6/4 216 218 235 255 -/puor6/5 153 142 195 255 -/puor6/6 84 39 136 255 -/puor7/1 179 88 6 255 -/puor7/2 241 163 64 255 -/puor7/3 254 224 182 255 -/puor7/4 247 247 247 255 -/puor7/5 216 218 235 255 -/puor7/6 153 142 195 255 -/puor7/7 84 39 136 255 -/puor8/1 179 88 6 255 -/puor8/2 224 130 20 255 -/puor8/3 253 184 99 255 -/puor8/4 254 224 182 255 -/puor8/5 216 218 235 255 -/puor8/6 178 171 210 255 -/puor8/7 128 115 172 255 -/puor8/8 84 39 136 255 -/puor9/1 179 88 6 255 -/puor9/2 224 130 20 255 -/puor9/3 253 184 99 255 -/puor9/4 254 224 182 255 -/puor9/5 247 247 247 255 -/puor9/6 216 218 235 255 -/puor9/7 178 171 210 255 -/puor9/8 128 115 172 255 -/puor9/9 84 39 136 255 -/purd3/1 231 225 239 255 -/purd3/2 201 148 199 255 -/purd3/3 221 28 119 255 -/purd4/1 241 238 246 255 -/purd4/2 215 181 216 255 -/purd4/3 223 101 176 255 -/purd4/4 206 18 86 255 -/purd5/1 241 238 246 255 -/purd5/2 215 181 216 255 -/purd5/3 223 101 176 255 -/purd5/4 221 28 119 255 -/purd5/5 152 0 67 255 -/purd6/1 241 238 246 255 -/purd6/2 212 185 218 255 -/purd6/3 201 148 199 255 -/purd6/4 223 101 176 255 -/purd6/5 221 28 119 255 -/purd6/6 152 0 67 255 -/purd7/1 241 238 246 255 -/purd7/2 212 185 218 255 -/purd7/3 201 148 199 255 -/purd7/4 223 101 176 255 -/purd7/5 231 41 138 255 -/purd7/6 206 18 86 255 -/purd7/7 145 0 63 255 -/purd8/1 247 244 249 255 -/purd8/2 231 225 239 255 -/purd8/3 212 185 218 255 -/purd8/4 201 148 199 255 -/purd8/5 223 101 176 255 -/purd8/6 231 41 138 255 -/purd8/7 206 18 86 255 -/purd8/8 145 0 63 255 -/purd9/1 247 244 249 255 -/purd9/2 231 225 239 255 -/purd9/3 212 185 218 255 -/purd9/4 201 148 199 255 -/purd9/5 223 101 176 255 -/purd9/6 231 41 138 255 -/purd9/7 206 18 86 255 -/purd9/8 152 0 67 255 -/purd9/9 103 0 31 255 -/purples3/1 239 237 245 255 -/purples3/2 188 189 220 255 -/purples3/3 117 107 177 255 -/purples4/1 242 240 247 255 -/purples4/2 203 201 226 255 -/purples4/3 158 154 200 255 -/purples4/4 106 81 163 255 -/purples5/1 242 240 247 255 -/purples5/2 203 201 226 255 -/purples5/3 158 154 200 255 -/purples5/4 117 107 177 255 -/purples5/5 84 39 143 255 -/purples6/1 242 240 247 255 -/purples6/2 218 218 235 255 -/purples6/3 188 189 220 255 -/purples6/4 158 154 200 255 -/purples6/5 117 107 177 255 -/purples6/6 84 39 143 255 -/purples7/1 242 240 247 255 -/purples7/2 218 218 235 255 -/purples7/3 188 189 220 255 -/purples7/4 158 154 200 255 -/purples7/5 128 125 186 255 -/purples7/6 106 81 163 255 -/purples7/7 74 20 134 255 -/purples8/1 252 251 253 255 -/purples8/2 239 237 245 255 -/purples8/3 218 218 235 255 -/purples8/4 188 189 220 255 -/purples8/5 158 154 200 255 -/purples8/6 128 125 186 255 -/purples8/7 106 81 163 255 -/purples8/8 74 20 134 255 -/purples9/1 252 251 253 255 -/purples9/2 239 237 245 255 -/purples9/3 218 218 235 255 -/purples9/4 188 189 220 255 -/purples9/5 158 154 200 255 -/purples9/6 128 125 186 255 -/purples9/7 106 81 163 255 -/purples9/8 84 39 143 255 -/purples9/9 63 0 125 255 -/rdbu10/1 103 0 31 255 -/rdbu10/10 5 48 97 255 -/rdbu10/2 178 24 43 255 -/rdbu10/3 214 96 77 255 -/rdbu10/4 244 165 130 255 -/rdbu10/5 253 219 199 255 -/rdbu10/6 209 229 240 255 -/rdbu10/7 146 197 222 255 -/rdbu10/8 67 147 195 255 -/rdbu10/9 33 102 172 255 -/rdbu11/1 103 0 31 255 -/rdbu11/10 33 102 172 255 -/rdbu11/11 5 48 97 255 -/rdbu11/2 178 24 43 255 -/rdbu11/3 214 96 77 255 -/rdbu11/4 244 165 130 255 -/rdbu11/5 253 219 199 255 -/rdbu11/6 247 247 247 255 -/rdbu11/7 209 229 240 255 -/rdbu11/8 146 197 222 255 -/rdbu11/9 67 147 195 255 -/rdbu3/1 239 138 98 255 -/rdbu3/2 247 247 247 255 -/rdbu3/3 103 169 207 255 -/rdbu4/1 202 0 32 255 -/rdbu4/2 244 165 130 255 -/rdbu4/3 146 197 222 255 -/rdbu4/4 5 113 176 255 -/rdbu5/1 202 0 32 255 -/rdbu5/2 244 165 130 255 -/rdbu5/3 247 247 247 255 -/rdbu5/4 146 197 222 255 -/rdbu5/5 5 113 176 255 -/rdbu6/1 178 24 43 255 -/rdbu6/2 239 138 98 255 -/rdbu6/3 253 219 199 255 -/rdbu6/4 209 229 240 255 -/rdbu6/5 103 169 207 255 -/rdbu6/6 33 102 172 255 -/rdbu7/1 178 24 43 255 -/rdbu7/2 239 138 98 255 -/rdbu7/3 253 219 199 255 -/rdbu7/4 247 247 247 255 -/rdbu7/5 209 229 240 255 -/rdbu7/6 103 169 207 255 -/rdbu7/7 33 102 172 255 -/rdbu8/1 178 24 43 255 -/rdbu8/2 214 96 77 255 -/rdbu8/3 244 165 130 255 -/rdbu8/4 253 219 199 255 -/rdbu8/5 209 229 240 255 -/rdbu8/6 146 197 222 255 -/rdbu8/7 67 147 195 255 -/rdbu8/8 33 102 172 255 -/rdbu9/1 178 24 43 255 -/rdbu9/2 214 96 77 255 -/rdbu9/3 244 165 130 255 -/rdbu9/4 253 219 199 255 -/rdbu9/5 247 247 247 255 -/rdbu9/6 209 229 240 255 -/rdbu9/7 146 197 222 255 -/rdbu9/8 67 147 195 255 -/rdbu9/9 33 102 172 255 -/rdgy10/1 103 0 31 255 -/rdgy10/10 26 26 26 255 -/rdgy10/2 178 24 43 255 -/rdgy10/3 214 96 77 255 -/rdgy10/4 244 165 130 255 -/rdgy10/5 253 219 199 255 -/rdgy10/6 224 224 224 255 -/rdgy10/7 186 186 186 255 -/rdgy10/8 135 135 135 255 -/rdgy10/9 77 77 77 255 -/rdgy11/1 103 0 31 255 -/rdgy11/10 77 77 77 255 -/rdgy11/11 26 26 26 255 -/rdgy11/2 178 24 43 255 -/rdgy11/3 214 96 77 255 -/rdgy11/4 244 165 130 255 -/rdgy11/5 253 219 199 255 -/rdgy11/6 255 255 255 255 -/rdgy11/7 224 224 224 255 -/rdgy11/8 186 186 186 255 -/rdgy11/9 135 135 135 255 -/rdgy3/1 239 138 98 255 -/rdgy3/2 255 255 255 255 -/rdgy3/3 153 153 153 255 -/rdgy4/1 202 0 32 255 -/rdgy4/2 244 165 130 255 -/rdgy4/3 186 186 186 255 -/rdgy4/4 64 64 64 255 -/rdgy5/1 202 0 32 255 -/rdgy5/2 244 165 130 255 -/rdgy5/3 255 255 255 255 -/rdgy5/4 186 186 186 255 -/rdgy5/5 64 64 64 255 -/rdgy6/1 178 24 43 255 -/rdgy6/2 239 138 98 255 -/rdgy6/3 253 219 199 255 -/rdgy6/4 224 224 224 255 -/rdgy6/5 153 153 153 255 -/rdgy6/6 77 77 77 255 -/rdgy7/1 178 24 43 255 -/rdgy7/2 239 138 98 255 -/rdgy7/3 253 219 199 255 -/rdgy7/4 255 255 255 255 -/rdgy7/5 224 224 224 255 -/rdgy7/6 153 153 153 255 -/rdgy7/7 77 77 77 255 -/rdgy8/1 178 24 43 255 -/rdgy8/2 214 96 77 255 -/rdgy8/3 244 165 130 255 -/rdgy8/4 253 219 199 255 -/rdgy8/5 224 224 224 255 -/rdgy8/6 186 186 186 255 -/rdgy8/7 135 135 135 255 -/rdgy8/8 77 77 77 255 -/rdgy9/1 178 24 43 255 -/rdgy9/2 214 96 77 255 -/rdgy9/3 244 165 130 255 -/rdgy9/4 253 219 199 255 -/rdgy9/5 255 255 255 255 -/rdgy9/6 224 224 224 255 -/rdgy9/7 186 186 186 255 -/rdgy9/8 135 135 135 255 -/rdgy9/9 77 77 77 255 -/rdpu3/1 253 224 221 255 -/rdpu3/2 250 159 181 255 -/rdpu3/3 197 27 138 255 -/rdpu4/1 254 235 226 255 -/rdpu4/2 251 180 185 255 -/rdpu4/3 247 104 161 255 -/rdpu4/4 174 1 126 255 -/rdpu5/1 254 235 226 255 -/rdpu5/2 251 180 185 255 -/rdpu5/3 247 104 161 255 -/rdpu5/4 197 27 138 255 -/rdpu5/5 122 1 119 255 -/rdpu6/1 254 235 226 255 -/rdpu6/2 252 197 192 255 -/rdpu6/3 250 159 181 255 -/rdpu6/4 247 104 161 255 -/rdpu6/5 197 27 138 255 -/rdpu6/6 122 1 119 255 -/rdpu7/1 254 235 226 255 -/rdpu7/2 252 197 192 255 -/rdpu7/3 250 159 181 255 -/rdpu7/4 247 104 161 255 -/rdpu7/5 221 52 151 255 -/rdpu7/6 174 1 126 255 -/rdpu7/7 122 1 119 255 -/rdpu8/1 255 247 243 255 -/rdpu8/2 253 224 221 255 -/rdpu8/3 252 197 192 255 -/rdpu8/4 250 159 181 255 -/rdpu8/5 247 104 161 255 -/rdpu8/6 221 52 151 255 -/rdpu8/7 174 1 126 255 -/rdpu8/8 122 1 119 255 -/rdpu9/1 255 247 243 255 -/rdpu9/2 253 224 221 255 -/rdpu9/3 252 197 192 255 -/rdpu9/4 250 159 181 255 -/rdpu9/5 247 104 161 255 -/rdpu9/6 221 52 151 255 -/rdpu9/7 174 1 126 255 -/rdpu9/8 122 1 119 255 -/rdpu9/9 73 0 106 255 -/rdylbu10/1 165 0 38 255 -/rdylbu10/10 49 54 149 255 -/rdylbu10/2 215 48 39 255 -/rdylbu10/3 244 109 67 255 -/rdylbu10/4 253 174 97 255 -/rdylbu10/5 254 224 144 255 -/rdylbu10/6 224 243 248 255 -/rdylbu10/7 171 217 233 255 -/rdylbu10/8 116 173 209 255 -/rdylbu10/9 69 117 180 255 -/rdylbu11/1 165 0 38 255 -/rdylbu11/10 69 117 180 255 -/rdylbu11/11 49 54 149 255 -/rdylbu11/2 215 48 39 255 -/rdylbu11/3 244 109 67 255 -/rdylbu11/4 253 174 97 255 -/rdylbu11/5 254 224 144 255 -/rdylbu11/6 255 255 191 255 -/rdylbu11/7 224 243 248 255 -/rdylbu11/8 171 217 233 255 -/rdylbu11/9 116 173 209 255 -/rdylbu3/1 252 141 89 255 -/rdylbu3/2 255 255 191 255 -/rdylbu3/3 145 191 219 255 -/rdylbu4/1 215 25 28 255 -/rdylbu4/2 253 174 97 255 -/rdylbu4/3 171 217 233 255 -/rdylbu4/4 44 123 182 255 -/rdylbu5/1 215 25 28 255 -/rdylbu5/2 253 174 97 255 -/rdylbu5/3 255 255 191 255 -/rdylbu5/4 171 217 233 255 -/rdylbu5/5 44 123 182 255 -/rdylbu6/1 215 48 39 255 -/rdylbu6/2 252 141 89 255 -/rdylbu6/3 254 224 144 255 -/rdylbu6/4 224 243 248 255 -/rdylbu6/5 145 191 219 255 -/rdylbu6/6 69 117 180 255 -/rdylbu7/1 215 48 39 255 -/rdylbu7/2 252 141 89 255 -/rdylbu7/3 254 224 144 255 -/rdylbu7/4 255 255 191 255 -/rdylbu7/5 224 243 248 255 -/rdylbu7/6 145 191 219 255 -/rdylbu7/7 69 117 180 255 -/rdylbu8/1 215 48 39 255 -/rdylbu8/2 244 109 67 255 -/rdylbu8/3 253 174 97 255 -/rdylbu8/4 254 224 144 255 -/rdylbu8/5 224 243 248 255 -/rdylbu8/6 171 217 233 255 -/rdylbu8/7 116 173 209 255 -/rdylbu8/8 69 117 180 255 -/rdylbu9/1 215 48 39 255 -/rdylbu9/2 244 109 67 255 -/rdylbu9/3 253 174 97 255 -/rdylbu9/4 254 224 144 255 -/rdylbu9/5 255 255 191 255 -/rdylbu9/6 224 243 248 255 -/rdylbu9/7 171 217 233 255 -/rdylbu9/8 116 173 209 255 -/rdylbu9/9 69 117 180 255 -/rdylgn10/1 165 0 38 255 -/rdylgn10/10 0 104 55 255 -/rdylgn10/2 215 48 39 255 -/rdylgn10/3 244 109 67 255 -/rdylgn10/4 253 174 97 255 -/rdylgn10/5 254 224 139 255 -/rdylgn10/6 217 239 139 255 -/rdylgn10/7 166 217 106 255 -/rdylgn10/8 102 189 99 255 -/rdylgn10/9 26 152 80 255 -/rdylgn11/1 165 0 38 255 -/rdylgn11/10 26 152 80 255 -/rdylgn11/11 0 104 55 255 -/rdylgn11/2 215 48 39 255 -/rdylgn11/3 244 109 67 255 -/rdylgn11/4 253 174 97 255 -/rdylgn11/5 254 224 139 255 -/rdylgn11/6 255 255 191 255 -/rdylgn11/7 217 239 139 255 -/rdylgn11/8 166 217 106 255 -/rdylgn11/9 102 189 99 255 -/rdylgn3/1 252 141 89 255 -/rdylgn3/2 255 255 191 255 -/rdylgn3/3 145 207 96 255 -/rdylgn4/1 215 25 28 255 -/rdylgn4/2 253 174 97 255 -/rdylgn4/3 166 217 106 255 -/rdylgn4/4 26 150 65 255 -/rdylgn5/1 215 25 28 255 -/rdylgn5/2 253 174 97 255 -/rdylgn5/3 255 255 191 255 -/rdylgn5/4 166 217 106 255 -/rdylgn5/5 26 150 65 255 -/rdylgn6/1 215 48 39 255 -/rdylgn6/2 252 141 89 255 -/rdylgn6/3 254 224 139 255 -/rdylgn6/4 217 239 139 255 -/rdylgn6/5 145 207 96 255 -/rdylgn6/6 26 152 80 255 -/rdylgn7/1 215 48 39 255 -/rdylgn7/2 252 141 89 255 -/rdylgn7/3 254 224 139 255 -/rdylgn7/4 255 255 191 255 -/rdylgn7/5 217 239 139 255 -/rdylgn7/6 145 207 96 255 -/rdylgn7/7 26 152 80 255 -/rdylgn8/1 215 48 39 255 -/rdylgn8/2 244 109 67 255 -/rdylgn8/3 253 174 97 255 -/rdylgn8/4 254 224 139 255 -/rdylgn8/5 217 239 139 255 -/rdylgn8/6 166 217 106 255 -/rdylgn8/7 102 189 99 255 -/rdylgn8/8 26 152 80 255 -/rdylgn9/1 215 48 39 255 -/rdylgn9/2 244 109 67 255 -/rdylgn9/3 253 174 97 255 -/rdylgn9/4 254 224 139 255 -/rdylgn9/5 255 255 191 255 -/rdylgn9/6 217 239 139 255 -/rdylgn9/7 166 217 106 255 -/rdylgn9/8 102 189 99 255 -/rdylgn9/9 26 152 80 255 -/reds3/1 254 224 210 255 -/reds3/2 252 146 114 255 -/reds3/3 222 45 38 255 -/reds4/1 254 229 217 255 -/reds4/2 252 174 145 255 -/reds4/3 251 106 74 255 -/reds4/4 203 24 29 255 -/reds5/1 254 229 217 255 -/reds5/2 252 174 145 255 -/reds5/3 251 106 74 255 -/reds5/4 222 45 38 255 -/reds5/5 165 15 21 255 -/reds6/1 254 229 217 255 -/reds6/2 252 187 161 255 -/reds6/3 252 146 114 255 -/reds6/4 251 106 74 255 -/reds6/5 222 45 38 255 -/reds6/6 165 15 21 255 -/reds7/1 254 229 217 255 -/reds7/2 252 187 161 255 -/reds7/3 252 146 114 255 -/reds7/4 251 106 74 255 -/reds7/5 239 59 44 255 -/reds7/6 203 24 29 255 -/reds7/7 153 0 13 255 -/reds8/1 255 245 240 255 -/reds8/2 254 224 210 255 -/reds8/3 252 187 161 255 -/reds8/4 252 146 114 255 -/reds8/5 251 106 74 255 -/reds8/6 239 59 44 255 -/reds8/7 203 24 29 255 -/reds8/8 153 0 13 255 -/reds9/1 255 245 240 255 -/reds9/2 254 224 210 255 -/reds9/3 252 187 161 255 -/reds9/4 252 146 114 255 -/reds9/5 251 106 74 255 -/reds9/6 239 59 44 255 -/reds9/7 203 24 29 255 -/reds9/8 165 15 21 255 -/reds9/9 103 0 13 255 -/set13/1 228 26 28 255 -/set13/2 55 126 184 255 -/set13/3 77 175 74 255 -/set14/1 228 26 28 255 -/set14/2 55 126 184 255 -/set14/3 77 175 74 255 -/set14/4 152 78 163 255 -/set15/1 228 26 28 255 -/set15/2 55 126 184 255 -/set15/3 77 175 74 255 -/set15/4 152 78 163 255 -/set15/5 255 127 0 255 -/set16/1 228 26 28 255 -/set16/2 55 126 184 255 -/set16/3 77 175 74 255 -/set16/4 152 78 163 255 -/set16/5 255 127 0 255 -/set16/6 255 255 51 255 -/set17/1 228 26 28 255 -/set17/2 55 126 184 255 -/set17/3 77 175 74 255 -/set17/4 152 78 163 255 -/set17/5 255 127 0 255 -/set17/6 255 255 51 255 -/set17/7 166 86 40 255 -/set18/1 228 26 28 255 -/set18/2 55 126 184 255 -/set18/3 77 175 74 255 -/set18/4 152 78 163 255 -/set18/5 255 127 0 255 -/set18/6 255 255 51 255 -/set18/7 166 86 40 255 -/set18/8 247 129 191 255 -/set19/1 228 26 28 255 -/set19/2 55 126 184 255 -/set19/3 77 175 74 255 -/set19/4 152 78 163 255 -/set19/5 255 127 0 255 -/set19/6 255 255 51 255 -/set19/7 166 86 40 255 -/set19/8 247 129 191 255 -/set19/9 153 153 153 255 -/set23/1 102 194 165 255 -/set23/2 252 141 98 255 -/set23/3 141 160 203 255 -/set24/1 102 194 165 255 -/set24/2 252 141 98 255 -/set24/3 141 160 203 255 -/set24/4 231 138 195 255 -/set25/1 102 194 165 255 -/set25/2 252 141 98 255 -/set25/3 141 160 203 255 -/set25/4 231 138 195 255 -/set25/5 166 216 84 255 -/set26/1 102 194 165 255 -/set26/2 252 141 98 255 -/set26/3 141 160 203 255 -/set26/4 231 138 195 255 -/set26/5 166 216 84 255 -/set26/6 255 217 47 255 -/set27/1 102 194 165 255 -/set27/2 252 141 98 255 -/set27/3 141 160 203 255 -/set27/4 231 138 195 255 -/set27/5 166 216 84 255 -/set27/6 255 217 47 255 -/set27/7 229 196 148 255 -/set28/1 102 194 165 255 -/set28/2 252 141 98 255 -/set28/3 141 160 203 255 -/set28/4 231 138 195 255 -/set28/5 166 216 84 255 -/set28/6 255 217 47 255 -/set28/7 229 196 148 255 -/set28/8 179 179 179 255 -/set310/1 141 211 199 255 -/set310/10 188 128 189 255 -/set310/2 255 255 179 255 -/set310/3 190 186 218 255 -/set310/4 251 128 114 255 -/set310/5 128 177 211 255 -/set310/6 253 180 98 255 -/set310/7 179 222 105 255 -/set310/8 252 205 229 255 -/set310/9 217 217 217 255 -/set311/1 141 211 199 255 -/set311/10 188 128 189 255 -/set311/11 204 235 197 255 -/set311/2 255 255 179 255 -/set311/3 190 186 218 255 -/set311/4 251 128 114 255 -/set311/5 128 177 211 255 -/set311/6 253 180 98 255 -/set311/7 179 222 105 255 -/set311/8 252 205 229 255 -/set311/9 217 217 217 255 -/set312/1 141 211 199 255 -/set312/10 188 128 189 255 -/set312/11 204 235 197 255 -/set312/12 255 237 111 255 -/set312/2 255 255 179 255 -/set312/3 190 186 218 255 -/set312/4 251 128 114 255 -/set312/5 128 177 211 255 -/set312/6 253 180 98 255 -/set312/7 179 222 105 255 -/set312/8 252 205 229 255 -/set312/9 217 217 217 255 -/set33/1 141 211 199 255 -/set33/2 255 255 179 255 -/set33/3 190 186 218 255 -/set34/1 141 211 199 255 -/set34/2 255 255 179 255 -/set34/3 190 186 218 255 -/set34/4 251 128 114 255 -/set35/1 141 211 199 255 -/set35/2 255 255 179 255 -/set35/3 190 186 218 255 -/set35/4 251 128 114 255 -/set35/5 128 177 211 255 -/set36/1 141 211 199 255 -/set36/2 255 255 179 255 -/set36/3 190 186 218 255 -/set36/4 251 128 114 255 -/set36/5 128 177 211 255 -/set36/6 253 180 98 255 -/set37/1 141 211 199 255 -/set37/2 255 255 179 255 -/set37/3 190 186 218 255 -/set37/4 251 128 114 255 -/set37/5 128 177 211 255 -/set37/6 253 180 98 255 -/set37/7 179 222 105 255 -/set38/1 141 211 199 255 -/set38/2 255 255 179 255 -/set38/3 190 186 218 255 -/set38/4 251 128 114 255 -/set38/5 128 177 211 255 -/set38/6 253 180 98 255 -/set38/7 179 222 105 255 -/set38/8 252 205 229 255 -/set39/1 141 211 199 255 -/set39/2 255 255 179 255 -/set39/3 190 186 218 255 -/set39/4 251 128 114 255 -/set39/5 128 177 211 255 -/set39/6 253 180 98 255 -/set39/7 179 222 105 255 -/set39/8 252 205 229 255 -/set39/9 217 217 217 255 -/spectral10/1 158 1 66 255 -/spectral10/10 94 79 162 255 -/spectral10/2 213 62 79 255 -/spectral10/3 244 109 67 255 -/spectral10/4 253 174 97 255 -/spectral10/5 254 224 139 255 -/spectral10/6 230 245 152 255 -/spectral10/7 171 221 164 255 -/spectral10/8 102 194 165 255 -/spectral10/9 50 136 189 255 -/spectral11/1 158 1 66 255 -/spectral11/10 50 136 189 255 -/spectral11/11 94 79 162 255 -/spectral11/2 213 62 79 255 -/spectral11/3 244 109 67 255 -/spectral11/4 253 174 97 255 -/spectral11/5 254 224 139 255 -/spectral11/6 255 255 191 255 -/spectral11/7 230 245 152 255 -/spectral11/8 171 221 164 255 -/spectral11/9 102 194 165 255 -/spectral3/1 252 141 89 255 -/spectral3/2 255 255 191 255 -/spectral3/3 153 213 148 255 -/spectral4/1 215 25 28 255 -/spectral4/2 253 174 97 255 -/spectral4/3 171 221 164 255 -/spectral4/4 43 131 186 255 -/spectral5/1 215 25 28 255 -/spectral5/2 253 174 97 255 -/spectral5/3 255 255 191 255 -/spectral5/4 171 221 164 255 -/spectral5/5 43 131 186 255 -/spectral6/1 213 62 79 255 -/spectral6/2 252 141 89 255 -/spectral6/3 254 224 139 255 -/spectral6/4 230 245 152 255 -/spectral6/5 153 213 148 255 -/spectral6/6 50 136 189 255 -/spectral7/1 213 62 79 255 -/spectral7/2 252 141 89 255 -/spectral7/3 254 224 139 255 -/spectral7/4 255 255 191 255 -/spectral7/5 230 245 152 255 -/spectral7/6 153 213 148 255 -/spectral7/7 50 136 189 255 -/spectral8/1 213 62 79 255 -/spectral8/2 244 109 67 255 -/spectral8/3 253 174 97 255 -/spectral8/4 254 224 139 255 -/spectral8/5 230 245 152 255 -/spectral8/6 171 221 164 255 -/spectral8/7 102 194 165 255 -/spectral8/8 50 136 189 255 -/spectral9/1 213 62 79 255 -/spectral9/2 244 109 67 255 -/spectral9/3 253 174 97 255 -/spectral9/4 254 224 139 255 -/spectral9/5 255 255 191 255 -/spectral9/6 230 245 152 255 -/spectral9/7 171 221 164 255 -/spectral9/8 102 194 165 255 -/spectral9/9 50 136 189 255 -/svg/aliceblue 240 248 255 255 -/svg/antiquewhite 250 235 215 255 -/svg/aqua 0 255 255 255 -/svg/aquamarine 127 255 212 255 -/svg/azure 240 255 255 255 -/svg/beige 245 245 220 255 -/svg/bisque 255 228 196 255 -/svg/black 0 0 0 255 -/svg/blanchedalmond 255 235 205 255 -/svg/blue 0 0 255 255 -/svg/blueviolet 138 43 226 255 -/svg/brown 165 42 42 255 -/svg/burlywood 222 184 135 255 -/svg/cadetblue 95 158 160 255 -/svg/chartreuse 127 255 0 255 -/svg/chocolate 210 105 30 255 -/svg/coral 255 127 80 255 -/svg/cornflowerblue 100 149 237 255 -/svg/cornsilk 255 248 220 255 -/svg/crimson 220 20 60 255 -/svg/cyan 0 255 255 255 -/svg/darkblue 0 0 139 255 -/svg/darkcyan 0 139 139 255 -/svg/darkgoldenrod 184 134 11 255 -/svg/darkgray 169 169 169 255 -/svg/darkgreen 0 100 0 255 -/svg/darkgrey 169 169 169 255 -/svg/darkkhaki 189 183 107 255 -/svg/darkmagenta 139 0 139 255 -/svg/darkolivegreen 85 107 47 255 -/svg/darkorange 255 140 0 255 -/svg/darkorchid 153 50 204 255 -/svg/darkred 139 0 0 255 -/svg/darksalmon 233 150 122 255 -/svg/darkseagreen 143 188 143 255 -/svg/darkslateblue 72 61 139 255 -/svg/darkslategray 47 79 79 255 -/svg/darkslategrey 47 79 79 255 -/svg/darkturquoise 0 206 209 255 -/svg/darkviolet 148 0 211 255 -/svg/deeppink 255 20 147 255 -/svg/deepskyblue 0 191 255 255 -/svg/dimgray 105 105 105 255 -/svg/dimgrey 105 105 105 255 -/svg/dodgerblue 30 144 255 255 -/svg/firebrick 178 34 34 255 -/svg/floralwhite 255 250 240 255 -/svg/forestgreen 34 139 34 255 -/svg/fuchsia 255 0 255 255 -/svg/gainsboro 220 220 220 255 -/svg/ghostwhite 248 248 255 255 -/svg/gold 255 215 0 255 -/svg/goldenrod 218 165 32 255 -/svg/gray 128 128 128 255 -/svg/green 0 128 0 255 -/svg/greenyellow 173 255 47 255 -/svg/grey 128 128 128 255 -/svg/honeydew 240 255 240 255 -/svg/hotpink 255 105 180 255 -/svg/indianred 205 92 92 255 -/svg/indigo 75 0 130 255 -/svg/ivory 255 255 240 255 -/svg/khaki 240 230 140 255 -/svg/lavender 230 230 250 255 -/svg/lavenderblush 255 240 245 255 -/svg/lawngreen 124 252 0 255 -/svg/lemonchiffon 255 250 205 255 -/svg/lightblue 173 216 230 255 -/svg/lightcoral 240 128 128 255 -/svg/lightcyan 224 255 255 255 -/svg/lightgoldenrodyellow 250 250 210 255 -/svg/lightgray 211 211 211 255 -/svg/lightgreen 144 238 144 255 -/svg/lightgrey 211 211 211 255 -/svg/lightpink 255 182 193 255 -/svg/lightsalmon 255 160 122 255 -/svg/lightseagreen 32 178 170 255 -/svg/lightskyblue 135 206 250 255 -/svg/lightslategray 119 136 153 255 -/svg/lightslategrey 119 136 153 255 -/svg/lightsteelblue 176 196 222 255 -/svg/lightyellow 255 255 224 255 -/svg/lime 0 255 0 255 -/svg/limegreen 50 205 50 255 -/svg/linen 250 240 230 255 -/svg/magenta 255 0 255 255 -/svg/maroon 128 0 0 255 -/svg/mediumaquamarine 102 205 170 255 -/svg/mediumblue 0 0 205 255 -/svg/mediumorchid 186 85 211 255 -/svg/mediumpurple 147 112 219 255 -/svg/mediumseagreen 60 179 113 255 -/svg/mediumslateblue 123 104 238 255 -/svg/mediumspringgreen 0 250 154 255 -/svg/mediumturquoise 72 209 204 255 -/svg/mediumvioletred 199 21 133 255 -/svg/midnightblue 25 25 112 255 -/svg/mintcream 245 255 250 255 -/svg/mistyrose 255 228 225 255 -/svg/moccasin 255 228 181 255 -/svg/navajowhite 255 222 173 255 -/svg/navy 0 0 128 255 -/svg/oldlace 253 245 230 255 -/svg/olive 128 128 0 255 -/svg/olivedrab 107 142 35 255 -/svg/orange 255 165 0 255 -/svg/orangered 255 69 0 255 -/svg/orchid 218 112 214 255 -/svg/palegoldenrod 238 232 170 255 -/svg/palegreen 152 251 152 255 -/svg/paleturquoise 175 238 238 255 -/svg/palevioletred 219 112 147 255 -/svg/papayawhip 255 239 213 255 -/svg/peachpuff 255 218 185 255 -/svg/peru 205 133 63 255 -/svg/pink 255 192 203 255 -/svg/plum 221 160 221 255 -/svg/powderblue 176 224 230 255 -/svg/purple 128 0 128 255 -/svg/red 255 0 0 255 -/svg/rosybrown 188 143 143 255 -/svg/royalblue 65 105 225 255 -/svg/saddlebrown 139 69 19 255 -/svg/salmon 250 128 114 255 -/svg/sandybrown 244 164 96 255 -/svg/seagreen 46 139 87 255 -/svg/seashell 255 245 238 255 -/svg/sienna 160 82 45 255 -/svg/silver 192 192 192 255 -/svg/skyblue 135 206 235 255 -/svg/slateblue 106 90 205 255 -/svg/slategray 112 128 144 255 -/svg/slategrey 112 128 144 255 -/svg/snow 255 250 250 255 -/svg/springgreen 0 255 127 255 -/svg/steelblue 70 130 180 255 -/svg/tan 210 180 140 255 -/svg/teal 0 128 128 255 -/svg/thistle 216 191 216 255 -/svg/tomato 255 99 71 255 -/svg/turquoise 64 224 208 255 -/svg/violet 238 130 238 255 -/svg/wheat 245 222 179 255 -/svg/white 255 255 255 255 -/svg/whitesmoke 245 245 245 255 -/svg/yellow 255 255 0 255 -/svg/yellowgreen 154 205 50 255 -/ylgn3/1 247 252 185 255 -/ylgn3/2 173 221 142 255 -/ylgn3/3 49 163 84 255 -/ylgn4/1 255 255 204 255 -/ylgn4/2 194 230 153 255 -/ylgn4/3 120 198 121 255 -/ylgn4/4 35 132 67 255 -/ylgn5/1 255 255 204 255 -/ylgn5/2 194 230 153 255 -/ylgn5/3 120 198 121 255 -/ylgn5/4 49 163 84 255 -/ylgn5/5 0 104 55 255 -/ylgn6/1 255 255 204 255 -/ylgn6/2 217 240 163 255 -/ylgn6/3 173 221 142 255 -/ylgn6/4 120 198 121 255 -/ylgn6/5 49 163 84 255 -/ylgn6/6 0 104 55 255 -/ylgn7/1 255 255 204 255 -/ylgn7/2 217 240 163 255 -/ylgn7/3 173 221 142 255 -/ylgn7/4 120 198 121 255 -/ylgn7/5 65 171 93 255 -/ylgn7/6 35 132 67 255 -/ylgn7/7 0 90 50 255 -/ylgn8/1 255 255 229 255 -/ylgn8/2 247 252 185 255 -/ylgn8/3 217 240 163 255 -/ylgn8/4 173 221 142 255 -/ylgn8/5 120 198 121 255 -/ylgn8/6 65 171 93 255 -/ylgn8/7 35 132 67 255 -/ylgn8/8 0 90 50 255 -/ylgn9/1 255 255 229 255 -/ylgn9/2 247 252 185 255 -/ylgn9/3 217 240 163 255 -/ylgn9/4 173 221 142 255 -/ylgn9/5 120 198 121 255 -/ylgn9/6 65 171 93 255 -/ylgn9/7 35 132 67 255 -/ylgn9/8 0 104 55 255 -/ylgn9/9 0 69 41 255 -/ylgnbu3/1 237 248 177 255 -/ylgnbu3/2 127 205 187 255 -/ylgnbu3/3 44 127 184 255 -/ylgnbu4/1 255 255 204 255 -/ylgnbu4/2 161 218 180 255 -/ylgnbu4/3 65 182 196 255 -/ylgnbu4/4 34 94 168 255 -/ylgnbu5/1 255 255 204 255 -/ylgnbu5/2 161 218 180 255 -/ylgnbu5/3 65 182 196 255 -/ylgnbu5/4 44 127 184 255 -/ylgnbu5/5 37 52 148 255 -/ylgnbu6/1 255 255 204 255 -/ylgnbu6/2 199 233 180 255 -/ylgnbu6/3 127 205 187 255 -/ylgnbu6/4 65 182 196 255 -/ylgnbu6/5 44 127 184 255 -/ylgnbu6/6 37 52 148 255 -/ylgnbu7/1 255 255 204 255 -/ylgnbu7/2 199 233 180 255 -/ylgnbu7/3 127 205 187 255 -/ylgnbu7/4 65 182 196 255 -/ylgnbu7/5 29 145 192 255 -/ylgnbu7/6 34 94 168 255 -/ylgnbu7/7 12 44 132 255 -/ylgnbu8/1 255 255 217 255 -/ylgnbu8/2 237 248 177 255 -/ylgnbu8/3 199 233 180 255 -/ylgnbu8/4 127 205 187 255 -/ylgnbu8/5 65 182 196 255 -/ylgnbu8/6 29 145 192 255 -/ylgnbu8/7 34 94 168 255 -/ylgnbu8/8 12 44 132 255 -/ylgnbu9/1 255 255 217 255 -/ylgnbu9/2 237 248 177 255 -/ylgnbu9/3 199 233 180 255 -/ylgnbu9/4 127 205 187 255 -/ylgnbu9/5 65 182 196 255 -/ylgnbu9/6 29 145 192 255 -/ylgnbu9/7 34 94 168 255 -/ylgnbu9/8 37 52 148 255 -/ylgnbu9/9 8 29 88 255 -/ylorbr3/1 255 247 188 255 -/ylorbr3/2 254 196 79 255 -/ylorbr3/3 217 95 14 255 -/ylorbr4/1 255 255 212 255 -/ylorbr4/2 254 217 142 255 -/ylorbr4/3 254 153 41 255 -/ylorbr4/4 204 76 2 255 -/ylorbr5/1 255 255 212 255 -/ylorbr5/2 254 217 142 255 -/ylorbr5/3 254 153 41 255 -/ylorbr5/4 217 95 14 255 -/ylorbr5/5 153 52 4 255 -/ylorbr6/1 255 255 212 255 -/ylorbr6/2 254 227 145 255 -/ylorbr6/3 254 196 79 255 -/ylorbr6/4 254 153 41 255 -/ylorbr6/5 217 95 14 255 -/ylorbr6/6 153 52 4 255 -/ylorbr7/1 255 255 212 255 -/ylorbr7/2 254 227 145 255 -/ylorbr7/3 254 196 79 255 -/ylorbr7/4 254 153 41 255 -/ylorbr7/5 236 112 20 255 -/ylorbr7/6 204 76 2 255 -/ylorbr7/7 140 45 4 255 -/ylorbr8/1 255 255 229 255 -/ylorbr8/2 255 247 188 255 -/ylorbr8/3 254 227 145 255 -/ylorbr8/4 254 196 79 255 -/ylorbr8/5 254 153 41 255 -/ylorbr8/6 236 112 20 255 -/ylorbr8/7 204 76 2 255 -/ylorbr8/8 140 45 4 255 -/ylorbr9/1 255 255 229 255 -/ylorbr9/2 255 247 188 255 -/ylorbr9/3 254 227 145 255 -/ylorbr9/4 254 196 79 255 -/ylorbr9/5 254 153 41 255 -/ylorbr9/6 236 112 20 255 -/ylorbr9/7 204 76 2 255 -/ylorbr9/8 153 52 4 255 -/ylorbr9/9 102 37 6 255 -/ylorrd3/1 255 237 160 255 -/ylorrd3/2 254 178 76 255 -/ylorrd3/3 240 59 32 255 -/ylorrd4/1 255 255 178 255 -/ylorrd4/2 254 204 92 255 -/ylorrd4/3 253 141 60 255 -/ylorrd4/4 227 26 28 255 -/ylorrd5/1 255 255 178 255 -/ylorrd5/2 254 204 92 255 -/ylorrd5/3 253 141 60 255 -/ylorrd5/4 240 59 32 255 -/ylorrd5/5 189 0 38 255 -/ylorrd6/1 255 255 178 255 -/ylorrd6/2 254 217 118 255 -/ylorrd6/3 254 178 76 255 -/ylorrd6/4 253 141 60 255 -/ylorrd6/5 240 59 32 255 -/ylorrd6/6 189 0 38 255 -/ylorrd7/1 255 255 178 255 -/ylorrd7/2 254 217 118 255 -/ylorrd7/3 254 178 76 255 -/ylorrd7/4 253 141 60 255 -/ylorrd7/5 252 78 42 255 -/ylorrd7/6 227 26 28 255 -/ylorrd7/7 177 0 38 255 -/ylorrd8/1 255 255 204 255 -/ylorrd8/2 255 237 160 255 -/ylorrd8/3 254 217 118 255 -/ylorrd8/4 254 178 76 255 -/ylorrd8/5 253 141 60 255 -/ylorrd8/6 252 78 42 255 -/ylorrd8/7 227 26 28 255 -/ylorrd8/8 177 0 38 255 -/ylorrd9/1 255 255 204 255 -/ylorrd9/2 255 237 160 255 -/ylorrd9/3 254 217 118 255 -/ylorrd9/4 254 178 76 255 -/ylorrd9/5 253 141 60 255 -/ylorrd9/6 252 78 42 255 -/ylorrd9/7 227 26 28 255 -/ylorrd9/8 189 0 38 255 -/ylorrd9/9 128 0 38 255 -aliceblue 240 248 255 255 -antiquewhite 250 235 215 255 -antiquewhite1 255 239 219 255 -antiquewhite2 238 223 204 255 -antiquewhite3 205 192 176 255 -antiquewhite4 139 131 120 255 -aquamarine 127 255 212 255 -aquamarine1 127 255 212 255 -aquamarine2 118 238 198 255 -aquamarine3 102 205 170 255 -aquamarine4 69 139 116 255 -azure 240 255 255 255 -azure1 240 255 255 255 -azure2 224 238 238 255 -azure3 193 205 205 255 -azure4 131 139 139 255 -beige 245 245 220 255 -bisque 255 228 196 255 -bisque1 255 228 196 255 -bisque2 238 213 183 255 -bisque3 205 183 158 255 -bisque4 139 125 107 255 -black 0 0 0 255 -blanchedalmond 255 235 205 255 -blue 0 0 255 255 -blue1 0 0 255 255 -blue2 0 0 238 255 -blue3 0 0 205 255 -blue4 0 0 139 255 -blueviolet 138 43 226 255 -brown 165 42 42 255 -brown1 255 64 64 255 -brown2 238 59 59 255 -brown3 205 51 51 255 -brown4 139 35 35 255 -burlywood 222 184 135 255 -burlywood1 255 211 155 255 -burlywood2 238 197 145 255 -burlywood3 205 170 125 255 -burlywood4 139 115 85 255 -cadetblue 95 158 160 255 -cadetblue1 152 245 255 255 -cadetblue2 142 229 238 255 -cadetblue3 122 197 205 255 -cadetblue4 83 134 139 255 -chartreuse 127 255 0 255 -chartreuse1 127 255 0 255 -chartreuse2 118 238 0 255 -chartreuse3 102 205 0 255 -chartreuse4 69 139 0 255 -chocolate 210 105 30 255 -chocolate1 255 127 36 255 -chocolate2 238 118 33 255 -chocolate3 205 102 29 255 -chocolate4 139 69 19 255 -coral 255 127 80 255 -coral1 255 114 86 255 -coral2 238 106 80 255 -coral3 205 91 69 255 -coral4 139 62 47 255 -cornflowerblue 100 149 237 255 -cornsilk 255 248 220 255 -cornsilk1 255 248 220 255 -cornsilk2 238 232 205 255 -cornsilk3 205 200 177 255 -cornsilk4 139 136 120 255 -crimson 220 20 60 255 -cyan 0 255 255 255 -cyan1 0 255 255 255 -cyan2 0 238 238 255 -cyan3 0 205 205 255 -cyan4 0 139 139 255 -darkgoldenrod 184 134 11 255 -darkgoldenrod1 255 185 15 255 -darkgoldenrod2 238 173 14 255 -darkgoldenrod3 205 149 12 255 -darkgoldenrod4 139 101 8 255 -darkgreen 0 100 0 255 -darkkhaki 189 183 107 255 -darkolivegreen 85 107 47 255 -darkolivegreen1 202 255 112 255 -darkolivegreen2 188 238 104 255 -darkolivegreen3 162 205 90 255 -darkolivegreen4 110 139 61 255 -darkorange 255 140 0 255 -darkorange1 255 127 0 255 -darkorange2 238 118 0 255 -darkorange3 205 102 0 255 -darkorange4 139 69 0 255 -darkorchid 153 50 204 255 -darkorchid1 191 62 255 255 -darkorchid2 178 58 238 255 -darkorchid3 154 50 205 255 -darkorchid4 104 34 139 255 -darksalmon 233 150 122 255 -darkseagreen 143 188 143 255 -darkseagreen1 193 255 193 255 -darkseagreen2 180 238 180 255 -darkseagreen3 155 205 155 255 -darkseagreen4 105 139 105 255 -darkslateblue 72 61 139 255 -darkslategray 47 79 79 255 -darkslategray1 151 255 255 255 -darkslategray2 141 238 238 255 -darkslategray3 121 205 205 255 -darkslategray4 82 139 139 255 -darkslategrey 47 79 79 255 -darkturquoise 0 206 209 255 -darkviolet 148 0 211 255 -deeppink 255 20 147 255 -deeppink1 255 20 147 255 -deeppink2 238 18 137 255 -deeppink3 205 16 118 255 -deeppink4 139 10 80 255 -deepskyblue 0 191 255 255 -deepskyblue1 0 191 255 255 -deepskyblue2 0 178 238 255 -deepskyblue3 0 154 205 255 -deepskyblue4 0 104 139 255 -dimgray 105 105 105 255 -dimgrey 105 105 105 255 -dodgerblue 30 144 255 255 -dodgerblue1 30 144 255 255 -dodgerblue2 28 134 238 255 -dodgerblue3 24 116 205 255 -dodgerblue4 16 78 139 255 -firebrick 178 34 34 255 -firebrick1 255 48 48 255 -firebrick2 238 44 44 255 -firebrick3 205 38 38 255 -firebrick4 139 26 26 255 -floralwhite 255 250 240 255 -forestgreen 34 139 34 255 -gainsboro 220 220 220 255 -ghostwhite 248 248 255 255 -gold 255 215 0 255 -gold1 255 215 0 255 -gold2 238 201 0 255 -gold3 205 173 0 255 -gold4 139 117 0 255 -goldenrod 218 165 32 255 -goldenrod1 255 193 37 255 -goldenrod2 238 180 34 255 -goldenrod3 205 155 29 255 -goldenrod4 139 105 20 255 -gray 192 192 192 255 -gray0 0 0 0 255 -gray1 3 3 3 255 -gray10 26 26 26 255 -gray100 255 255 255 255 -gray11 28 28 28 255 -gray12 31 31 31 255 -gray13 33 33 33 255 -gray14 36 36 36 255 -gray15 38 38 38 255 -gray16 41 41 41 255 -gray17 43 43 43 255 -gray18 46 46 46 255 -gray19 48 48 48 255 -gray2 5 5 5 255 -gray20 51 51 51 255 -gray21 54 54 54 255 -gray22 56 56 56 255 -gray23 59 59 59 255 -gray24 61 61 61 255 -gray25 64 64 64 255 -gray26 66 66 66 255 -gray27 69 69 69 255 -gray28 71 71 71 255 -gray29 74 74 74 255 -gray3 8 8 8 255 -gray30 77 77 77 255 -gray31 79 79 79 255 -gray32 82 82 82 255 -gray33 84 84 84 255 -gray34 87 87 87 255 -gray35 89 89 89 255 -gray36 92 92 92 255 -gray37 94 94 94 255 -gray38 97 97 97 255 -gray39 99 99 99 255 -gray4 10 10 10 255 -gray40 102 102 102 255 -gray41 105 105 105 255 -gray42 107 107 107 255 -gray43 110 110 110 255 -gray44 112 112 112 255 -gray45 115 115 115 255 -gray46 117 117 117 255 -gray47 120 120 120 255 -gray48 122 122 122 255 -gray49 125 125 125 255 -gray5 13 13 13 255 -gray50 127 127 127 255 -gray51 130 130 130 255 -gray52 133 133 133 255 -gray53 135 135 135 255 -gray54 138 138 138 255 -gray55 140 140 140 255 -gray56 143 143 143 255 -gray57 145 145 145 255 -gray58 148 148 148 255 -gray59 150 150 150 255 -gray6 15 15 15 255 -gray60 153 153 153 255 -gray61 156 156 156 255 -gray62 158 158 158 255 -gray63 161 161 161 255 -gray64 163 163 163 255 -gray65 166 166 166 255 -gray66 168 168 168 255 -gray67 171 171 171 255 -gray68 173 173 173 255 -gray69 176 176 176 255 -gray7 18 18 18 255 -gray70 179 179 179 255 -gray71 181 181 181 255 -gray72 184 184 184 255 -gray73 186 186 186 255 -gray74 189 189 189 255 -gray75 191 191 191 255 -gray76 194 194 194 255 -gray77 196 196 196 255 -gray78 199 199 199 255 -gray79 201 201 201 255 -gray8 20 20 20 255 -gray80 204 204 204 255 -gray81 207 207 207 255 -gray82 209 209 209 255 -gray83 212 212 212 255 -gray84 214 214 214 255 -gray85 217 217 217 255 -gray86 219 219 219 255 -gray87 222 222 222 255 -gray88 224 224 224 255 -gray89 227 227 227 255 -gray9 23 23 23 255 -gray90 229 229 229 255 -gray91 232 232 232 255 -gray92 235 235 235 255 -gray93 237 237 237 255 -gray94 240 240 240 255 -gray95 242 242 242 255 -gray96 245 245 245 255 -gray97 247 247 247 255 -gray98 250 250 250 255 -gray99 252 252 252 255 -green 0 255 0 255 -green1 0 255 0 255 -green2 0 238 0 255 -green3 0 205 0 255 -green4 0 139 0 255 -greenyellow 173 255 47 255 -grey 192 192 192 255 -grey0 0 0 0 255 -grey1 3 3 3 255 -grey10 26 26 26 255 -grey100 255 255 255 255 -grey11 28 28 28 255 -grey12 31 31 31 255 -grey13 33 33 33 255 -grey14 36 36 36 255 -grey15 38 38 38 255 -grey16 41 41 41 255 -grey17 43 43 43 255 -grey18 46 46 46 255 -grey19 48 48 48 255 -grey2 5 5 5 255 -grey20 51 51 51 255 -grey21 54 54 54 255 -grey22 56 56 56 255 -grey23 59 59 59 255 -grey24 61 61 61 255 -grey25 64 64 64 255 -grey26 66 66 66 255 -grey27 69 69 69 255 -grey28 71 71 71 255 -grey29 74 74 74 255 -grey3 8 8 8 255 -grey30 77 77 77 255 -grey31 79 79 79 255 -grey32 82 82 82 255 -grey33 84 84 84 255 -grey34 87 87 87 255 -grey35 89 89 89 255 -grey36 92 92 92 255 -grey37 94 94 94 255 -grey38 97 97 97 255 -grey39 99 99 99 255 -grey4 10 10 10 255 -grey40 102 102 102 255 -grey41 105 105 105 255 -grey42 107 107 107 255 -grey43 110 110 110 255 -grey44 112 112 112 255 -grey45 115 115 115 255 -grey46 117 117 117 255 -grey47 120 120 120 255 -grey48 122 122 122 255 -grey49 125 125 125 255 -grey5 13 13 13 255 -grey50 127 127 127 255 -grey51 130 130 130 255 -grey52 133 133 133 255 -grey53 135 135 135 255 -grey54 138 138 138 255 -grey55 140 140 140 255 -grey56 143 143 143 255 -grey57 145 145 145 255 -grey58 148 148 148 255 -grey59 150 150 150 255 -grey6 15 15 15 255 -grey60 153 153 153 255 -grey61 156 156 156 255 -grey62 158 158 158 255 -grey63 161 161 161 255 -grey64 163 163 163 255 -grey65 166 166 166 255 -grey66 168 168 168 255 -grey67 171 171 171 255 -grey68 173 173 173 255 -grey69 176 176 176 255 -grey7 18 18 18 255 -grey70 179 179 179 255 -grey71 181 181 181 255 -grey72 184 184 184 255 -grey73 186 186 186 255 -grey74 189 189 189 255 -grey75 191 191 191 255 -grey76 194 194 194 255 -grey77 196 196 196 255 -grey78 199 199 199 255 -grey79 201 201 201 255 -grey8 20 20 20 255 -grey80 204 204 204 255 -grey81 207 207 207 255 -grey82 209 209 209 255 -grey83 212 212 212 255 -grey84 214 214 214 255 -grey85 217 217 217 255 -grey86 219 219 219 255 -grey87 222 222 222 255 -grey88 224 224 224 255 -grey89 227 227 227 255 -grey9 23 23 23 255 -grey90 229 229 229 255 -grey91 232 232 232 255 -grey92 235 235 235 255 -grey93 237 237 237 255 -grey94 240 240 240 255 -grey95 242 242 242 255 -grey96 245 245 245 255 -grey97 247 247 247 255 -grey98 250 250 250 255 -grey99 252 252 252 255 -honeydew 240 255 240 255 -honeydew1 240 255 240 255 -honeydew2 224 238 224 255 -honeydew3 193 205 193 255 -honeydew4 131 139 131 255 -hotpink 255 105 180 255 -hotpink1 255 110 180 255 -hotpink2 238 106 167 255 -hotpink3 205 96 144 255 -hotpink4 139 58 98 255 -indianred 205 92 92 255 -indianred1 255 106 106 255 -indianred2 238 99 99 255 -indianred3 205 85 85 255 -indianred4 139 58 58 255 -indigo 75 0 130 255 -invis 255 255 254 0 -ivory 255 255 240 255 -ivory1 255 255 240 255 -ivory2 238 238 224 255 -ivory3 205 205 193 255 -ivory4 139 139 131 255 -khaki 240 230 140 255 -khaki1 255 246 143 255 -khaki2 238 230 133 255 -khaki3 205 198 115 255 -khaki4 139 134 78 255 -lavender 230 230 250 255 -lavenderblush 255 240 245 255 -lavenderblush1 255 240 245 255 -lavenderblush2 238 224 229 255 -lavenderblush3 205 193 197 255 -lavenderblush4 139 131 134 255 -lawngreen 124 252 0 255 -lemonchiffon 255 250 205 255 -lemonchiffon1 255 250 205 255 -lemonchiffon2 238 233 191 255 -lemonchiffon3 205 201 165 255 -lemonchiffon4 139 137 112 255 -lightblue 173 216 230 255 -lightblue1 191 239 255 255 -lightblue2 178 223 238 255 -lightblue3 154 192 205 255 -lightblue4 104 131 139 255 -lightcoral 240 128 128 255 -lightcyan 224 255 255 255 -lightcyan1 224 255 255 255 -lightcyan2 209 238 238 255 -lightcyan3 180 205 205 255 -lightcyan4 122 139 139 255 -lightgoldenrod 238 221 130 255 -lightgoldenrod1 255 236 139 255 -lightgoldenrod2 238 220 130 255 -lightgoldenrod3 205 190 112 255 -lightgoldenrod4 139 129 76 255 -lightgoldenrodyellow 250 250 210 255 -lightgray 211 211 211 255 -lightgrey 211 211 211 255 -lightpink 255 182 193 255 -lightpink1 255 174 185 255 -lightpink2 238 162 173 255 -lightpink3 205 140 149 255 -lightpink4 139 95 101 255 -lightsalmon 255 160 122 255 -lightsalmon1 255 160 122 255 -lightsalmon2 238 149 114 255 -lightsalmon3 205 129 98 255 -lightsalmon4 139 87 66 255 -lightseagreen 32 178 170 255 -lightskyblue 135 206 250 255 -lightskyblue1 176 226 255 255 -lightskyblue2 164 211 238 255 -lightskyblue3 141 182 205 255 -lightskyblue4 96 123 139 255 -lightslateblue 132 112 255 255 -lightslategray 119 136 153 255 -lightslategrey 119 136 153 255 -lightsteelblue 176 196 222 255 -lightsteelblue1 202 225 255 255 -lightsteelblue2 188 210 238 255 -lightsteelblue3 162 181 205 255 -lightsteelblue4 110 123 139 255 -lightyellow 255 255 224 255 -lightyellow1 255 255 224 255 -lightyellow2 238 238 209 255 -lightyellow3 205 205 180 255 -lightyellow4 139 139 122 255 -limegreen 50 205 50 255 -linen 250 240 230 255 -magenta 255 0 255 255 -magenta1 255 0 255 255 -magenta2 238 0 238 255 -magenta3 205 0 205 255 -magenta4 139 0 139 255 -maroon 176 48 96 255 -maroon1 255 52 179 255 -maroon2 238 48 167 255 -maroon3 205 41 144 255 -maroon4 139 28 98 255 -mediumaquamarine 102 205 170 255 -mediumblue 0 0 205 255 -mediumorchid 186 85 211 255 -mediumorchid1 224 102 255 255 -mediumorchid2 209 95 238 255 -mediumorchid3 180 82 205 255 -mediumorchid4 122 55 139 255 -mediumpurple 147 112 219 255 -mediumpurple1 171 130 255 255 -mediumpurple2 159 121 238 255 -mediumpurple3 137 104 205 255 -mediumpurple4 93 71 139 255 -mediumseagreen 60 179 113 255 -mediumslateblue 123 104 238 255 -mediumspringgreen 0 250 154 255 -mediumturquoise 72 209 204 255 -mediumvioletred 199 21 133 255 -midnightblue 25 25 112 255 -mintcream 245 255 250 255 -mistyrose 255 228 225 255 -mistyrose1 255 228 225 255 -mistyrose2 238 213 210 255 -mistyrose3 205 183 181 255 -mistyrose4 139 125 123 255 -moccasin 255 228 181 255 -navajowhite 255 222 173 255 -navajowhite1 255 222 173 255 -navajowhite2 238 207 161 255 -navajowhite3 205 179 139 255 -navajowhite4 139 121 94 255 -navy 0 0 128 255 -navyblue 0 0 128 255 -none 255 255 254 0 -oldlace 253 245 230 255 -olivedrab 107 142 35 255 -olivedrab1 192 255 62 255 -olivedrab2 179 238 58 255 -olivedrab3 154 205 50 255 -olivedrab4 105 139 34 255 -orange 255 165 0 255 -orange1 255 165 0 255 -orange2 238 154 0 255 -orange3 205 133 0 255 -orange4 139 90 0 255 -orangered 255 69 0 255 -orangered1 255 69 0 255 -orangered2 238 64 0 255 -orangered3 205 55 0 255 -orangered4 139 37 0 255 -orchid 218 112 214 255 -orchid1 255 131 250 255 -orchid2 238 122 233 255 -orchid3 205 105 201 255 -orchid4 139 71 137 255 -palegoldenrod 238 232 170 255 -palegreen 152 251 152 255 -palegreen1 154 255 154 255 -palegreen2 144 238 144 255 -palegreen3 124 205 124 255 -palegreen4 84 139 84 255 -paleturquoise 175 238 238 255 -paleturquoise1 187 255 255 255 -paleturquoise2 174 238 238 255 -paleturquoise3 150 205 205 255 -paleturquoise4 102 139 139 255 -palevioletred 219 112 147 255 -palevioletred1 255 130 171 255 -palevioletred2 238 121 159 255 -palevioletred3 205 104 137 255 -palevioletred4 139 71 93 255 -papayawhip 255 239 213 255 -peachpuff 255 218 185 255 -peachpuff1 255 218 185 255 -peachpuff2 238 203 173 255 -peachpuff3 205 175 149 255 -peachpuff4 139 119 101 255 -peru 205 133 63 255 -pink 255 192 203 255 -pink1 255 181 197 255 -pink2 238 169 184 255 -pink3 205 145 158 255 -pink4 139 99 108 255 -plum 221 160 221 255 -plum1 255 187 255 255 -plum2 238 174 238 255 -plum3 205 150 205 255 -plum4 139 102 139 255 -powderblue 176 224 230 255 -purple 160 32 240 255 -purple1 155 48 255 255 -purple2 145 44 238 255 -purple3 125 38 205 255 -purple4 85 26 139 255 -red 255 0 0 255 -red1 255 0 0 255 -red2 238 0 0 255 -red3 205 0 0 255 -red4 139 0 0 255 -rosybrown 188 143 143 255 -rosybrown1 255 193 193 255 -rosybrown2 238 180 180 255 -rosybrown3 205 155 155 255 -rosybrown4 139 105 105 255 -royalblue 65 105 225 255 -royalblue1 72 118 255 255 -royalblue2 67 110 238 255 -royalblue3 58 95 205 255 -royalblue4 39 64 139 255 -saddlebrown 139 69 19 255 -salmon 250 128 114 255 -salmon1 255 140 105 255 -salmon2 238 130 98 255 -salmon3 205 112 84 255 -salmon4 139 76 57 255 -sandybrown 244 164 96 255 -seagreen 46 139 87 255 -seagreen1 84 255 159 255 -seagreen2 78 238 148 255 -seagreen3 67 205 128 255 -seagreen4 46 139 87 255 -seashell 255 245 238 255 -seashell1 255 245 238 255 -seashell2 238 229 222 255 -seashell3 205 197 191 255 -seashell4 139 134 130 255 -sienna 160 82 45 255 -sienna1 255 130 71 255 -sienna2 238 121 66 255 -sienna3 205 104 57 255 -sienna4 139 71 38 255 -skyblue 135 206 235 255 -skyblue1 135 206 255 255 -skyblue2 126 192 238 255 -skyblue3 108 166 205 255 -skyblue4 74 112 139 255 -slateblue 106 90 205 255 -slateblue1 131 111 255 255 -slateblue2 122 103 238 255 -slateblue3 105 89 205 255 -slateblue4 71 60 139 255 -slategray 112 128 144 255 -slategray1 198 226 255 255 -slategray2 185 211 238 255 -slategray3 159 182 205 255 -slategray4 108 123 139 255 -slategrey 112 128 144 255 -snow 255 250 250 255 -snow1 255 250 250 255 -snow2 238 233 233 255 -snow3 205 201 201 255 -snow4 139 137 137 255 -springgreen 0 255 127 255 -springgreen1 0 255 127 255 -springgreen2 0 238 118 255 -springgreen3 0 205 102 255 -springgreen4 0 139 69 255 -steelblue 70 130 180 255 -steelblue1 99 184 255 255 -steelblue2 92 172 238 255 -steelblue3 79 148 205 255 -steelblue4 54 100 139 255 -tan 210 180 140 255 -tan1 255 165 79 255 -tan2 238 154 73 255 -tan3 205 133 63 255 -tan4 139 90 43 255 -thistle 216 191 216 255 -thistle1 255 225 255 255 -thistle2 238 210 238 255 -thistle3 205 181 205 255 -thistle4 139 123 139 255 -tomato 255 99 71 255 -tomato1 255 99 71 255 -tomato2 238 92 66 255 -tomato3 205 79 57 255 -tomato4 139 54 38 255 -transparent 255 255 254 0 -turquoise 64 224 208 255 -turquoise1 0 245 255 255 -turquoise2 0 229 238 255 -turquoise3 0 197 205 255 -turquoise4 0 134 139 255 -violet 238 130 238 255 -violetred 208 32 144 255 -violetred1 255 62 150 255 -violetred2 238 58 140 255 -violetred3 205 50 120 255 -violetred4 139 34 82 255 -wheat 245 222 179 255 -wheat1 255 231 186 255 -wheat2 238 216 174 255 -wheat3 205 186 150 255 -wheat4 139 126 102 255 -white 255 255 255 255 -whitesmoke 245 245 245 255 -yellow 255 255 0 255 -yellow1 255 255 0 255 -yellow2 238 238 0 255 -yellow3 205 205 0 255 -yellow4 139 139 0 255 -yellowgreen 154 205 50 255 diff --git a/internal/ccall/common/color_names b/internal/ccall/common/color_names deleted file mode 100644 index 40c2760..0000000 --- a/internal/ccall/common/color_names +++ /dev/null @@ -1,655 +0,0 @@ -aliceblue 240 248 255 255 -antiquewhite 250 235 215 255 -antiquewhite1 255 239 219 255 -antiquewhite2 238 223 204 255 -antiquewhite3 205 192 176 255 -antiquewhite4 139 131 120 255 -aquamarine 127 255 212 255 -aquamarine1 127 255 212 255 -aquamarine2 118 238 198 255 -aquamarine3 102 205 170 255 -aquamarine4 69 139 116 255 -azure 240 255 255 255 -azure1 240 255 255 255 -azure2 224 238 238 255 -azure3 193 205 205 255 -azure4 131 139 139 255 -beige 245 245 220 255 -bisque 255 228 196 255 -bisque1 255 228 196 255 -bisque2 238 213 183 255 -bisque3 205 183 158 255 -bisque4 139 125 107 255 -black 0 0 0 255 -blanchedalmond 255 235 205 255 -blue 0 0 255 255 -blue1 0 0 255 255 -blue2 0 0 238 255 -blue3 0 0 205 255 -blue4 0 0 139 255 -blueviolet 138 43 226 255 -brown 165 42 42 255 -brown1 255 64 64 255 -brown2 238 59 59 255 -brown3 205 51 51 255 -brown4 139 35 35 255 -burlywood 222 184 135 255 -burlywood1 255 211 155 255 -burlywood2 238 197 145 255 -burlywood3 205 170 125 255 -burlywood4 139 115 85 255 -cadetblue 95 158 160 255 -cadetblue1 152 245 255 255 -cadetblue2 142 229 238 255 -cadetblue3 122 197 205 255 -cadetblue4 83 134 139 255 -chartreuse 127 255 0 255 -chartreuse1 127 255 0 255 -chartreuse2 118 238 0 255 -chartreuse3 102 205 0 255 -chartreuse4 69 139 0 255 -chocolate 210 105 30 255 -chocolate1 255 127 36 255 -chocolate2 238 118 33 255 -chocolate3 205 102 29 255 -chocolate4 139 69 19 255 -coral 255 127 80 255 -coral1 255 114 86 255 -coral2 238 106 80 255 -coral3 205 91 69 255 -coral4 139 62 47 255 -cornflowerblue 100 149 237 255 -cornsilk 255 248 220 255 -cornsilk1 255 248 220 255 -cornsilk2 238 232 205 255 -cornsilk3 205 200 177 255 -cornsilk4 139 136 120 255 -crimson 220 20 60 255 -cyan 0 255 255 255 -cyan1 0 255 255 255 -cyan2 0 238 238 255 -cyan3 0 205 205 255 -cyan4 0 139 139 255 -darkgoldenrod 184 134 11 255 -darkgoldenrod1 255 185 15 255 -darkgoldenrod2 238 173 14 255 -darkgoldenrod3 205 149 12 255 -darkgoldenrod4 139 101 8 255 -darkgreen 0 100 0 255 -darkkhaki 189 183 107 255 -darkolivegreen 85 107 47 255 -darkolivegreen1 202 255 112 255 -darkolivegreen2 188 238 104 255 -darkolivegreen3 162 205 90 255 -darkolivegreen4 110 139 61 255 -darkorange 255 140 0 255 -darkorange1 255 127 0 255 -darkorange2 238 118 0 255 -darkorange3 205 102 0 255 -darkorange4 139 69 0 255 -darkorchid 153 50 204 255 -darkorchid1 191 62 255 255 -darkorchid2 178 58 238 255 -darkorchid3 154 50 205 255 -darkorchid4 104 34 139 255 -darksalmon 233 150 122 255 -darkseagreen 143 188 143 255 -darkseagreen1 193 255 193 255 -darkseagreen2 180 238 180 255 -darkseagreen3 155 205 155 255 -darkseagreen4 105 139 105 255 -darkslateblue 72 61 139 255 -darkslategray 47 79 79 255 -darkslategray1 151 255 255 255 -darkslategray2 141 238 238 255 -darkslategray3 121 205 205 255 -darkslategray4 82 139 139 255 -darkslategrey 47 79 79 255 -darkturquoise 0 206 209 255 -darkviolet 148 0 211 255 -deeppink 255 20 147 255 -deeppink1 255 20 147 255 -deeppink2 238 18 137 255 -deeppink3 205 16 118 255 -deeppink4 139 10 80 255 -deepskyblue 0 191 255 255 -deepskyblue1 0 191 255 255 -deepskyblue2 0 178 238 255 -deepskyblue3 0 154 205 255 -deepskyblue4 0 104 139 255 -dimgray 105 105 105 255 -dimgrey 105 105 105 255 -dodgerblue 30 144 255 255 -dodgerblue1 30 144 255 255 -dodgerblue2 28 134 238 255 -dodgerblue3 24 116 205 255 -dodgerblue4 16 78 139 255 -firebrick 178 34 34 255 -firebrick1 255 48 48 255 -firebrick2 238 44 44 255 -firebrick3 205 38 38 255 -firebrick4 139 26 26 255 -floralwhite 255 250 240 255 -forestgreen 34 139 34 255 -gainsboro 220 220 220 255 -ghostwhite 248 248 255 255 -gold 255 215 0 255 -gold1 255 215 0 255 -gold2 238 201 0 255 -gold3 205 173 0 255 -gold4 139 117 0 255 -goldenrod 218 165 32 255 -goldenrod1 255 193 37 255 -goldenrod2 238 180 34 255 -goldenrod3 205 155 29 255 -goldenrod4 139 105 20 255 -gray 192 192 192 255 -gray0 0 0 0 255 -gray1 3 3 3 255 -gray10 26 26 26 255 -gray100 255 255 255 255 -gray11 28 28 28 255 -gray12 31 31 31 255 -gray13 33 33 33 255 -gray14 36 36 36 255 -gray15 38 38 38 255 -gray16 41 41 41 255 -gray17 43 43 43 255 -gray18 46 46 46 255 -gray19 48 48 48 255 -gray2 5 5 5 255 -gray20 51 51 51 255 -gray21 54 54 54 255 -gray22 56 56 56 255 -gray23 59 59 59 255 -gray24 61 61 61 255 -gray25 64 64 64 255 -gray26 66 66 66 255 -gray27 69 69 69 255 -gray28 71 71 71 255 -gray29 74 74 74 255 -gray3 8 8 8 255 -gray30 77 77 77 255 -gray31 79 79 79 255 -gray32 82 82 82 255 -gray33 84 84 84 255 -gray34 87 87 87 255 -gray35 89 89 89 255 -gray36 92 92 92 255 -gray37 94 94 94 255 -gray38 97 97 97 255 -gray39 99 99 99 255 -gray4 10 10 10 255 -gray40 102 102 102 255 -gray41 105 105 105 255 -gray42 107 107 107 255 -gray43 110 110 110 255 -gray44 112 112 112 255 -gray45 115 115 115 255 -gray46 117 117 117 255 -gray47 120 120 120 255 -gray48 122 122 122 255 -gray49 125 125 125 255 -gray5 13 13 13 255 -gray50 127 127 127 255 -gray51 130 130 130 255 -gray52 133 133 133 255 -gray53 135 135 135 255 -gray54 138 138 138 255 -gray55 140 140 140 255 -gray56 143 143 143 255 -gray57 145 145 145 255 -gray58 148 148 148 255 -gray59 150 150 150 255 -gray6 15 15 15 255 -gray60 153 153 153 255 -gray61 156 156 156 255 -gray62 158 158 158 255 -gray63 161 161 161 255 -gray64 163 163 163 255 -gray65 166 166 166 255 -gray66 168 168 168 255 -gray67 171 171 171 255 -gray68 173 173 173 255 -gray69 176 176 176 255 -gray7 18 18 18 255 -gray70 179 179 179 255 -gray71 181 181 181 255 -gray72 184 184 184 255 -gray73 186 186 186 255 -gray74 189 189 189 255 -gray75 191 191 191 255 -gray76 194 194 194 255 -gray77 196 196 196 255 -gray78 199 199 199 255 -gray79 201 201 201 255 -gray8 20 20 20 255 -gray80 204 204 204 255 -gray81 207 207 207 255 -gray82 209 209 209 255 -gray83 212 212 212 255 -gray84 214 214 214 255 -gray85 217 217 217 255 -gray86 219 219 219 255 -gray87 222 222 222 255 -gray88 224 224 224 255 -gray89 227 227 227 255 -gray9 23 23 23 255 -gray90 229 229 229 255 -gray91 232 232 232 255 -gray92 235 235 235 255 -gray93 237 237 237 255 -gray94 240 240 240 255 -gray95 242 242 242 255 -gray96 245 245 245 255 -gray97 247 247 247 255 -gray98 250 250 250 255 -gray99 252 252 252 255 -green 0 255 0 255 -green1 0 255 0 255 -green2 0 238 0 255 -green3 0 205 0 255 -green4 0 139 0 255 -greenyellow 173 255 47 255 -grey 192 192 192 255 -grey0 0 0 0 255 -grey1 3 3 3 255 -grey10 26 26 26 255 -grey100 255 255 255 255 -grey11 28 28 28 255 -grey12 31 31 31 255 -grey13 33 33 33 255 -grey14 36 36 36 255 -grey15 38 38 38 255 -grey16 41 41 41 255 -grey17 43 43 43 255 -grey18 46 46 46 255 -grey19 48 48 48 255 -grey2 5 5 5 255 -grey20 51 51 51 255 -grey21 54 54 54 255 -grey22 56 56 56 255 -grey23 59 59 59 255 -grey24 61 61 61 255 -grey25 64 64 64 255 -grey26 66 66 66 255 -grey27 69 69 69 255 -grey28 71 71 71 255 -grey29 74 74 74 255 -grey3 8 8 8 255 -grey30 77 77 77 255 -grey31 79 79 79 255 -grey32 82 82 82 255 -grey33 84 84 84 255 -grey34 87 87 87 255 -grey35 89 89 89 255 -grey36 92 92 92 255 -grey37 94 94 94 255 -grey38 97 97 97 255 -grey39 99 99 99 255 -grey4 10 10 10 255 -grey40 102 102 102 255 -grey41 105 105 105 255 -grey42 107 107 107 255 -grey43 110 110 110 255 -grey44 112 112 112 255 -grey45 115 115 115 255 -grey46 117 117 117 255 -grey47 120 120 120 255 -grey48 122 122 122 255 -grey49 125 125 125 255 -grey5 13 13 13 255 -grey50 127 127 127 255 -grey51 130 130 130 255 -grey52 133 133 133 255 -grey53 135 135 135 255 -grey54 138 138 138 255 -grey55 140 140 140 255 -grey56 143 143 143 255 -grey57 145 145 145 255 -grey58 148 148 148 255 -grey59 150 150 150 255 -grey6 15 15 15 255 -grey60 153 153 153 255 -grey61 156 156 156 255 -grey62 158 158 158 255 -grey63 161 161 161 255 -grey64 163 163 163 255 -grey65 166 166 166 255 -grey66 168 168 168 255 -grey67 171 171 171 255 -grey68 173 173 173 255 -grey69 176 176 176 255 -grey7 18 18 18 255 -grey70 179 179 179 255 -grey71 181 181 181 255 -grey72 184 184 184 255 -grey73 186 186 186 255 -grey74 189 189 189 255 -grey75 191 191 191 255 -grey76 194 194 194 255 -grey77 196 196 196 255 -grey78 199 199 199 255 -grey79 201 201 201 255 -grey8 20 20 20 255 -grey80 204 204 204 255 -grey81 207 207 207 255 -grey82 209 209 209 255 -grey83 212 212 212 255 -grey84 214 214 214 255 -grey85 217 217 217 255 -grey86 219 219 219 255 -grey87 222 222 222 255 -grey88 224 224 224 255 -grey89 227 227 227 255 -grey9 23 23 23 255 -grey90 229 229 229 255 -grey91 232 232 232 255 -grey92 235 235 235 255 -grey93 237 237 237 255 -grey94 240 240 240 255 -grey95 242 242 242 255 -grey96 245 245 245 255 -grey97 247 247 247 255 -grey98 250 250 250 255 -grey99 252 252 252 255 -honeydew 240 255 240 255 -honeydew1 240 255 240 255 -honeydew2 224 238 224 255 -honeydew3 193 205 193 255 -honeydew4 131 139 131 255 -hotpink 255 105 180 255 -hotpink1 255 110 180 255 -hotpink2 238 106 167 255 -hotpink3 205 96 144 255 -hotpink4 139 58 98 255 -indianred 205 92 92 255 -indianred1 255 106 106 255 -indianred2 238 99 99 255 -indianred3 205 85 85 255 -indianred4 139 58 58 255 -indigo 75 0 130 255 -invis 255 255 254 0 -ivory 255 255 240 255 -ivory1 255 255 240 255 -ivory2 238 238 224 255 -ivory3 205 205 193 255 -ivory4 139 139 131 255 -khaki 240 230 140 255 -khaki1 255 246 143 255 -khaki2 238 230 133 255 -khaki3 205 198 115 255 -khaki4 139 134 78 255 -lavender 230 230 250 255 -lavenderblush 255 240 245 255 -lavenderblush1 255 240 245 255 -lavenderblush2 238 224 229 255 -lavenderblush3 205 193 197 255 -lavenderblush4 139 131 134 255 -lawngreen 124 252 0 255 -lemonchiffon 255 250 205 255 -lemonchiffon1 255 250 205 255 -lemonchiffon2 238 233 191 255 -lemonchiffon3 205 201 165 255 -lemonchiffon4 139 137 112 255 -lightblue 173 216 230 255 -lightblue1 191 239 255 255 -lightblue2 178 223 238 255 -lightblue3 154 192 205 255 -lightblue4 104 131 139 255 -lightcoral 240 128 128 255 -lightcyan 224 255 255 255 -lightcyan1 224 255 255 255 -lightcyan2 209 238 238 255 -lightcyan3 180 205 205 255 -lightcyan4 122 139 139 255 -lightgoldenrod 238 221 130 255 -lightgoldenrod1 255 236 139 255 -lightgoldenrod2 238 220 130 255 -lightgoldenrod3 205 190 112 255 -lightgoldenrod4 139 129 76 255 -lightgoldenrodyellow 250 250 210 255 -lightgray 211 211 211 255 -lightgrey 211 211 211 255 -lightpink 255 182 193 255 -lightpink1 255 174 185 255 -lightpink2 238 162 173 255 -lightpink3 205 140 149 255 -lightpink4 139 95 101 255 -lightsalmon 255 160 122 255 -lightsalmon1 255 160 122 255 -lightsalmon2 238 149 114 255 -lightsalmon3 205 129 98 255 -lightsalmon4 139 87 66 255 -lightseagreen 32 178 170 255 -lightskyblue 135 206 250 255 -lightskyblue1 176 226 255 255 -lightskyblue2 164 211 238 255 -lightskyblue3 141 182 205 255 -lightskyblue4 96 123 139 255 -lightslateblue 132 112 255 255 -lightslategray 119 136 153 255 -lightslategrey 119 136 153 255 -lightsteelblue 176 196 222 255 -lightsteelblue1 202 225 255 255 -lightsteelblue2 188 210 238 255 -lightsteelblue3 162 181 205 255 -lightsteelblue4 110 123 139 255 -lightyellow 255 255 224 255 -lightyellow1 255 255 224 255 -lightyellow2 238 238 209 255 -lightyellow3 205 205 180 255 -lightyellow4 139 139 122 255 -limegreen 50 205 50 255 -linen 250 240 230 255 -magenta 255 0 255 255 -magenta1 255 0 255 255 -magenta2 238 0 238 255 -magenta3 205 0 205 255 -magenta4 139 0 139 255 -maroon 176 48 96 255 -maroon1 255 52 179 255 -maroon2 238 48 167 255 -maroon3 205 41 144 255 -maroon4 139 28 98 255 -mediumaquamarine 102 205 170 255 -mediumblue 0 0 205 255 -mediumorchid 186 85 211 255 -mediumorchid1 224 102 255 255 -mediumorchid2 209 95 238 255 -mediumorchid3 180 82 205 255 -mediumorchid4 122 55 139 255 -mediumpurple 147 112 219 255 -mediumpurple1 171 130 255 255 -mediumpurple2 159 121 238 255 -mediumpurple3 137 104 205 255 -mediumpurple4 93 71 139 255 -mediumseagreen 60 179 113 255 -mediumslateblue 123 104 238 255 -mediumspringgreen 0 250 154 255 -mediumturquoise 72 209 204 255 -mediumvioletred 199 21 133 255 -midnightblue 25 25 112 255 -mintcream 245 255 250 255 -mistyrose 255 228 225 255 -mistyrose1 255 228 225 255 -mistyrose2 238 213 210 255 -mistyrose3 205 183 181 255 -mistyrose4 139 125 123 255 -moccasin 255 228 181 255 -navajowhite 255 222 173 255 -navajowhite1 255 222 173 255 -navajowhite2 238 207 161 255 -navajowhite3 205 179 139 255 -navajowhite4 139 121 94 255 -navy 0 0 128 255 -navyblue 0 0 128 255 -none 255 255 254 0 -oldlace 253 245 230 255 -olivedrab 107 142 35 255 -olivedrab1 192 255 62 255 -olivedrab2 179 238 58 255 -olivedrab3 154 205 50 255 -olivedrab4 105 139 34 255 -orange 255 165 0 255 -orange1 255 165 0 255 -orange2 238 154 0 255 -orange3 205 133 0 255 -orange4 139 90 0 255 -orangered 255 69 0 255 -orangered1 255 69 0 255 -orangered2 238 64 0 255 -orangered3 205 55 0 255 -orangered4 139 37 0 255 -orchid 218 112 214 255 -orchid1 255 131 250 255 -orchid2 238 122 233 255 -orchid3 205 105 201 255 -orchid4 139 71 137 255 -palegoldenrod 238 232 170 255 -palegreen 152 251 152 255 -palegreen1 154 255 154 255 -palegreen2 144 238 144 255 -palegreen3 124 205 124 255 -palegreen4 84 139 84 255 -paleturquoise 175 238 238 255 -paleturquoise1 187 255 255 255 -paleturquoise2 174 238 238 255 -paleturquoise3 150 205 205 255 -paleturquoise4 102 139 139 255 -palevioletred 219 112 147 255 -palevioletred1 255 130 171 255 -palevioletred2 238 121 159 255 -palevioletred3 205 104 137 255 -palevioletred4 139 71 93 255 -papayawhip 255 239 213 255 -peachpuff 255 218 185 255 -peachpuff1 255 218 185 255 -peachpuff2 238 203 173 255 -peachpuff3 205 175 149 255 -peachpuff4 139 119 101 255 -peru 205 133 63 255 -pink 255 192 203 255 -pink1 255 181 197 255 -pink2 238 169 184 255 -pink3 205 145 158 255 -pink4 139 99 108 255 -plum 221 160 221 255 -plum1 255 187 255 255 -plum2 238 174 238 255 -plum3 205 150 205 255 -plum4 139 102 139 255 -powderblue 176 224 230 255 -purple 160 32 240 255 -purple1 155 48 255 255 -purple2 145 44 238 255 -purple3 125 38 205 255 -purple4 85 26 139 255 -red 255 0 0 255 -red1 255 0 0 255 -red2 238 0 0 255 -red3 205 0 0 255 -red4 139 0 0 255 -rosybrown 188 143 143 255 -rosybrown1 255 193 193 255 -rosybrown2 238 180 180 255 -rosybrown3 205 155 155 255 -rosybrown4 139 105 105 255 -royalblue 65 105 225 255 -royalblue1 72 118 255 255 -royalblue2 67 110 238 255 -royalblue3 58 95 205 255 -royalblue4 39 64 139 255 -saddlebrown 139 69 19 255 -salmon 250 128 114 255 -salmon1 255 140 105 255 -salmon2 238 130 98 255 -salmon3 205 112 84 255 -salmon4 139 76 57 255 -sandybrown 244 164 96 255 -seagreen 46 139 87 255 -seagreen1 84 255 159 255 -seagreen2 78 238 148 255 -seagreen3 67 205 128 255 -seagreen4 46 139 87 255 -seashell 255 245 238 255 -seashell1 255 245 238 255 -seashell2 238 229 222 255 -seashell3 205 197 191 255 -seashell4 139 134 130 255 -sienna 160 82 45 255 -sienna1 255 130 71 255 -sienna2 238 121 66 255 -sienna3 205 104 57 255 -sienna4 139 71 38 255 -skyblue 135 206 235 255 -skyblue1 135 206 255 255 -skyblue2 126 192 238 255 -skyblue3 108 166 205 255 -skyblue4 74 112 139 255 -slateblue 106 90 205 255 -slateblue1 131 111 255 255 -slateblue2 122 103 238 255 -slateblue3 105 89 205 255 -slateblue4 71 60 139 255 -slategray 112 128 144 255 -slategray1 198 226 255 255 -slategray2 185 211 238 255 -slategray3 159 182 205 255 -slategray4 108 123 139 255 -slategrey 112 128 144 255 -snow 255 250 250 255 -snow1 255 250 250 255 -snow2 238 233 233 255 -snow3 205 201 201 255 -snow4 139 137 137 255 -springgreen 0 255 127 255 -springgreen1 0 255 127 255 -springgreen2 0 238 118 255 -springgreen3 0 205 102 255 -springgreen4 0 139 69 255 -steelblue 70 130 180 255 -steelblue1 99 184 255 255 -steelblue2 92 172 238 255 -steelblue3 79 148 205 255 -steelblue4 54 100 139 255 -tan 210 180 140 255 -tan1 255 165 79 255 -tan2 238 154 73 255 -tan3 205 133 63 255 -tan4 139 90 43 255 -thistle 216 191 216 255 -thistle1 255 225 255 255 -thistle2 238 210 238 255 -thistle3 205 181 205 255 -thistle4 139 123 139 255 -tomato 255 99 71 255 -tomato1 255 99 71 255 -tomato2 238 92 66 255 -tomato3 205 79 57 255 -tomato4 139 54 38 255 -transparent 255 255 254 0 -turquoise 64 224 208 255 -turquoise1 0 245 255 255 -turquoise2 0 229 238 255 -turquoise3 0 197 205 255 -turquoise4 0 134 139 255 -violet 238 130 238 255 -violetred 208 32 144 255 -violetred1 255 62 150 255 -violetred2 238 58 140 255 -violetred3 205 50 120 255 -violetred4 139 34 82 255 -wheat 245 222 179 255 -wheat1 255 231 186 255 -wheat2 238 216 174 255 -wheat3 205 186 150 255 -wheat4 139 126 102 255 -white 255 255 255 255 -whitesmoke 245 245 245 255 -yellow 255 255 0 255 -yellow1 255 255 0 255 -yellow2 238 238 0 255 -yellow3 205 205 0 255 -yellow4 139 139 0 255 -yellowgreen 154 205 50 255 diff --git a/internal/ccall/common/colorprocs.h b/internal/ccall/common/colorprocs.h deleted file mode 100644 index 96179ec..0000000 --- a/internal/ccall/common/colorprocs.h +++ /dev/null @@ -1,31 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_COLORPROCS_H -#define GV_COLORPROCS_H - -#include "color.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern void setColorScheme (char* s); -extern int colorxlate(char *str, gvcolor_t * color, color_type_t target_type); -extern char *canontoken(char *str); -extern int colorCvt(gvcolor_t *ocolor, gvcolor_t *ncolor); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/colortbl.h b/internal/ccall/common/colortbl.h deleted file mode 100644 index 2b234e1..0000000 --- a/internal/ccall/common/colortbl.h +++ /dev/null @@ -1,2493 +0,0 @@ -static hsvrgbacolor_t color_lib[] = { -{"/accent3/1",85,93,201,127,201,127,255}, -{"/accent3/2",187,45,212,190,174,212,255}, -{"/accent3/3",20,119,253,253,192,134,255}, -{"/accent4/1",85,93,201,127,201,127,255}, -{"/accent4/2",187,45,212,190,174,212,255}, -{"/accent4/3",20,119,253,253,192,134,255}, -{"/accent4/4",42,102,255,255,255,153,255}, -{"/accent5/1",85,93,201,127,201,127,255}, -{"/accent5/2",187,45,212,190,174,212,255}, -{"/accent5/3",20,119,253,253,192,134,255}, -{"/accent5/4",42,102,255,255,255,153,255}, -{"/accent5/5",151,173,176,56,108,176,255}, -{"/accent6/1",85,93,201,127,201,127,255}, -{"/accent6/2",187,45,212,190,174,212,255}, -{"/accent6/3",20,119,253,253,192,134,255}, -{"/accent6/4",42,102,255,255,255,153,255}, -{"/accent6/5",151,173,176,56,108,176,255}, -{"/accent6/6",232,252,240,240,2,127,255}, -{"/accent7/1",85,93,201,127,201,127,255}, -{"/accent7/2",187,45,212,190,174,212,255}, -{"/accent7/3",20,119,253,253,192,134,255}, -{"/accent7/4",42,102,255,255,255,153,255}, -{"/accent7/5",151,173,176,56,108,176,255}, -{"/accent7/6",232,252,240,240,2,127,255}, -{"/accent7/7",17,224,191,191,91,23,255}, -{"/accent8/1",85,93,201,127,201,127,255}, -{"/accent8/2",187,45,212,190,174,212,255}, -{"/accent8/3",20,119,253,253,192,134,255}, -{"/accent8/4",42,102,255,255,255,153,255}, -{"/accent8/5",151,173,176,56,108,176,255}, -{"/accent8/6",232,252,240,240,2,127,255}, -{"/accent8/7",17,224,191,191,91,23,255}, -{"/accent8/8",0,0,102,102,102,102,255}, -{"/blues3/1",147,25,247,222,235,247,255}, -{"/blues3/2",142,75,225,158,202,225,255}, -{"/blues3/3",145,188,189,49,130,189,255}, -{"/blues4/1",159,16,255,239,243,255,255}, -{"/blues4/2",143,46,231,189,215,231,255}, -{"/blues4/3",143,127,214,107,174,214,255}, -{"/blues4/4",147,208,181,33,113,181,255}, -{"/blues5/1",159,16,255,239,243,255,255}, -{"/blues5/2",143,46,231,189,215,231,255}, -{"/blues5/3",143,127,214,107,174,214,255}, -{"/blues5/4",145,188,189,49,130,189,255}, -{"/blues5/5",149,241,156,8,81,156,255}, -{"/blues6/1",159,16,255,239,243,255,255}, -{"/blues6/2",148,43,239,198,219,239,255}, -{"/blues6/3",142,75,225,158,202,225,255}, -{"/blues6/4",143,127,214,107,174,214,255}, -{"/blues6/5",145,188,189,49,130,189,255}, -{"/blues6/6",149,241,156,8,81,156,255}, -{"/blues7/1",159,16,255,239,243,255,255}, -{"/blues7/2",148,43,239,198,219,239,255}, -{"/blues7/3",142,75,225,158,202,225,255}, -{"/blues7/4",143,127,214,107,174,214,255}, -{"/blues7/5",144,169,198,66,146,198,255}, -{"/blues7/6",147,208,181,33,113,181,255}, -{"/blues7/7",151,241,148,8,69,148,255}, -{"/blues8/1",148,8,255,247,251,255,255}, -{"/blues8/2",147,25,247,222,235,247,255}, -{"/blues8/3",148,43,239,198,219,239,255}, -{"/blues8/4",142,75,225,158,202,225,255}, -{"/blues8/5",143,127,214,107,174,214,255}, -{"/blues8/6",144,169,198,66,146,198,255}, -{"/blues8/7",147,208,181,33,113,181,255}, -{"/blues8/8",151,241,148,8,69,148,255}, -{"/blues9/1",148,8,255,247,251,255,255}, -{"/blues9/2",147,25,247,222,235,247,255}, -{"/blues9/3",148,43,239,198,219,239,255}, -{"/blues9/4",142,75,225,158,202,225,255}, -{"/blues9/5",143,127,214,107,174,214,255}, -{"/blues9/6",144,169,198,66,146,198,255}, -{"/blues9/7",147,208,181,33,113,181,255}, -{"/blues9/8",149,241,156,8,81,156,255}, -{"/blues9/9",152,235,107,8,48,107,255}, -{"/brbg10/1",23,239,84,84,48,5,255}, -{"/brbg10/10",119,255,60,0,60,48,255}, -{"/brbg10/2",23,236,140,140,81,10,255}, -{"/brbg10/3",24,194,191,191,129,45,255}, -{"/brbg10/4",29,112,223,223,194,125,255}, -{"/brbg10/5",30,52,246,246,232,195,255}, -{"/brbg10/6",121,38,234,199,234,229,255}, -{"/brbg10/7",120,95,205,128,205,193,255}, -{"/brbg10/8",124,165,151,53,151,143,255}, -{"/brbg10/9",124,252,102,1,102,94,255}, -{"/brbg11/1",23,239,84,84,48,5,255}, -{"/brbg11/10",124,252,102,1,102,94,255}, -{"/brbg11/11",119,255,60,0,60,48,255}, -{"/brbg11/2",23,236,140,140,81,10,255}, -{"/brbg11/3",24,194,191,191,129,45,255}, -{"/brbg11/4",29,112,223,223,194,125,255}, -{"/brbg11/5",30,52,246,246,232,195,255}, -{"/brbg11/6",0,0,245,245,245,245,255}, -{"/brbg11/7",121,38,234,199,234,229,255}, -{"/brbg11/8",120,95,205,128,205,193,255}, -{"/brbg11/9",124,165,151,53,151,143,255}, -{"/brbg3/1",28,135,216,216,179,101,255}, -{"/brbg3/2",0,0,245,245,245,245,255}, -{"/brbg3/3",123,127,180,90,180,172,255}, -{"/brbg4/1",21,215,166,166,97,26,255}, -{"/brbg4/2",29,112,223,223,194,125,255}, -{"/brbg4/3",120,95,205,128,205,193,255}, -{"/brbg4/4",121,253,133,1,133,113,255}, -{"/brbg5/1",21,215,166,166,97,26,255}, -{"/brbg5/2",29,112,223,223,194,125,255}, -{"/brbg5/3",0,0,245,245,245,245,255}, -{"/brbg5/4",120,95,205,128,205,193,255}, -{"/brbg5/5",121,253,133,1,133,113,255}, -{"/brbg6/1",23,236,140,140,81,10,255}, -{"/brbg6/2",28,135,216,216,179,101,255}, -{"/brbg6/3",30,52,246,246,232,195,255}, -{"/brbg6/4",121,38,234,199,234,229,255}, -{"/brbg6/5",123,127,180,90,180,172,255}, -{"/brbg6/6",124,252,102,1,102,94,255}, -{"/brbg7/1",23,236,140,140,81,10,255}, -{"/brbg7/2",28,135,216,216,179,101,255}, -{"/brbg7/3",30,52,246,246,232,195,255}, -{"/brbg7/4",0,0,245,245,245,245,255}, -{"/brbg7/5",121,38,234,199,234,229,255}, -{"/brbg7/6",123,127,180,90,180,172,255}, -{"/brbg7/7",124,252,102,1,102,94,255}, -{"/brbg8/1",23,236,140,140,81,10,255}, -{"/brbg8/2",24,194,191,191,129,45,255}, -{"/brbg8/3",29,112,223,223,194,125,255}, -{"/brbg8/4",30,52,246,246,232,195,255}, -{"/brbg8/5",121,38,234,199,234,229,255}, -{"/brbg8/6",120,95,205,128,205,193,255}, -{"/brbg8/7",124,165,151,53,151,143,255}, -{"/brbg8/8",124,252,102,1,102,94,255}, -{"/brbg9/1",23,236,140,140,81,10,255}, -{"/brbg9/2",24,194,191,191,129,45,255}, -{"/brbg9/3",29,112,223,223,194,125,255}, -{"/brbg9/4",30,52,246,246,232,195,255}, -{"/brbg9/5",0,0,245,245,245,245,255}, -{"/brbg9/6",121,38,234,199,234,229,255}, -{"/brbg9/7",120,95,205,128,205,193,255}, -{"/brbg9/8",124,165,151,53,151,143,255}, -{"/brbg9/9",124,252,102,1,102,94,255}, -{"/bugn3/1",135,20,249,229,245,249,255}, -{"/bugn3/2",117,74,216,153,216,201,255}, -{"/bugn3/3",103,185,162,44,162,95,255}, -{"/bugn4/1",136,14,251,237,248,251,255}, -{"/bugn4/2",127,54,226,178,226,226,255}, -{"/bugn4/3",113,120,194,102,194,164,255}, -{"/bugn4/4",98,190,139,35,139,69,255}, -{"/bugn5/1",136,14,251,237,248,251,255}, -{"/bugn5/2",127,54,226,178,226,226,255}, -{"/bugn5/3",113,120,194,102,194,164,255}, -{"/bugn5/4",103,185,162,44,162,95,255}, -{"/bugn5/5",102,255,109,0,109,44,255}, -{"/bugn6/1",136,14,251,237,248,251,255}, -{"/bugn6/2",119,34,236,204,236,230,255}, -{"/bugn6/3",117,74,216,153,216,201,255}, -{"/bugn6/4",113,120,194,102,194,164,255}, -{"/bugn6/5",103,185,162,44,162,95,255}, -{"/bugn6/6",102,255,109,0,109,44,255}, -{"/bugn7/1",136,14,251,237,248,251,255}, -{"/bugn7/2",119,34,236,204,236,230,255}, -{"/bugn7/3",117,74,216,153,216,201,255}, -{"/bugn7/4",113,120,194,102,194,164,255}, -{"/bugn7/5",105,159,174,65,174,118,255}, -{"/bugn7/6",98,190,139,35,139,69,255}, -{"/bugn7/7",102,255,88,0,88,36,255}, -{"/bugn8/1",134,6,253,247,252,253,255}, -{"/bugn8/2",135,20,249,229,245,249,255}, -{"/bugn8/3",119,34,236,204,236,230,255}, -{"/bugn8/4",117,74,216,153,216,201,255}, -{"/bugn8/5",113,120,194,102,194,164,255}, -{"/bugn8/6",105,159,174,65,174,118,255}, -{"/bugn8/7",98,190,139,35,139,69,255}, -{"/bugn8/8",102,255,88,0,88,36,255}, -{"/bugn9/1",134,6,253,247,252,253,255}, -{"/bugn9/2",135,20,249,229,245,249,255}, -{"/bugn9/3",119,34,236,204,236,230,255}, -{"/bugn9/4",117,74,216,153,216,201,255}, -{"/bugn9/5",113,120,194,102,194,164,255}, -{"/bugn9/6",105,159,174,65,174,118,255}, -{"/bugn9/7",98,190,139,35,139,69,255}, -{"/bugn9/8",102,255,109,0,109,44,255}, -{"/bugn9/9",101,255,68,0,68,27,255}, -{"/bupu3/1",144,20,244,224,236,244,255}, -{"/bupu3/2",148,70,218,158,188,218,255}, -{"/bupu3/3",196,123,167,136,86,167,255}, -{"/bupu4/1",136,14,251,237,248,251,255}, -{"/bupu4/2",146,53,227,179,205,227,255}, -{"/bupu4/3",162,74,198,140,150,198,255}, -{"/bupu4/4",202,149,157,136,65,157,255}, -{"/bupu5/1",136,14,251,237,248,251,255}, -{"/bupu5/2",146,53,227,179,205,227,255}, -{"/bupu5/3",162,74,198,140,150,198,255}, -{"/bupu5/4",196,123,167,136,86,167,255}, -{"/bupu5/5",214,225,129,129,15,124,255}, -{"/bupu6/1",136,14,251,237,248,251,255}, -{"/bupu6/2",148,43,230,191,211,230,255}, -{"/bupu6/3",148,70,218,158,188,218,255}, -{"/bupu6/4",162,74,198,140,150,198,255}, -{"/bupu6/5",196,123,167,136,86,167,255}, -{"/bupu6/6",214,225,129,129,15,124,255}, -{"/bupu7/1",136,14,251,237,248,251,255}, -{"/bupu7/2",148,43,230,191,211,230,255}, -{"/bupu7/3",148,70,218,158,188,218,255}, -{"/bupu7/4",162,74,198,140,150,198,255}, -{"/bupu7/5",190,100,177,140,107,177,255}, -{"/bupu7/6",202,149,157,136,65,157,255}, -{"/bupu7/7",213,252,110,110,1,107,255}, -{"/bupu8/1",134,6,253,247,252,253,255}, -{"/bupu8/2",144,20,244,224,236,244,255}, -{"/bupu8/3",148,43,230,191,211,230,255}, -{"/bupu8/4",148,70,218,158,188,218,255}, -{"/bupu8/5",162,74,198,140,150,198,255}, -{"/bupu8/6",190,100,177,140,107,177,255}, -{"/bupu8/7",202,149,157,136,65,157,255}, -{"/bupu8/8",213,252,110,110,1,107,255}, -{"/bupu9/1",134,6,253,247,252,253,255}, -{"/bupu9/2",144,20,244,224,236,244,255}, -{"/bupu9/3",148,43,230,191,211,230,255}, -{"/bupu9/4",148,70,218,158,188,218,255}, -{"/bupu9/5",162,74,198,140,150,198,255}, -{"/bupu9/6",190,100,177,140,107,177,255}, -{"/bupu9/7",202,149,157,136,65,157,255}, -{"/bupu9/8",214,225,129,129,15,124,255}, -{"/bupu9/9",213,255,77,77,0,75,255}, -{"/dark23/1",114,211,158,27,158,119,255}, -{"/dark23/2",18,252,217,217,95,2,255}, -{"/dark23/3",173,95,179,117,112,179,255}, -{"/dark24/1",114,211,158,27,158,119,255}, -{"/dark24/2",18,252,217,217,95,2,255}, -{"/dark24/3",173,95,179,117,112,179,255}, -{"/dark24/4",233,209,231,231,41,138,255}, -{"/dark25/1",114,211,158,27,158,119,255}, -{"/dark25/2",18,252,217,217,95,2,255}, -{"/dark25/3",173,95,179,117,112,179,255}, -{"/dark25/4",233,209,231,231,41,138,255}, -{"/dark25/5",62,208,166,102,166,30,255}, -{"/dark26/1",114,211,158,27,158,119,255}, -{"/dark26/2",18,252,217,217,95,2,255}, -{"/dark26/3",173,95,179,117,112,179,255}, -{"/dark26/4",233,209,231,231,41,138,255}, -{"/dark26/5",62,208,166,102,166,30,255}, -{"/dark26/6",31,252,230,230,171,2,255}, -{"/dark27/1",114,211,158,27,158,119,255}, -{"/dark27/2",18,252,217,217,95,2,255}, -{"/dark27/3",173,95,179,117,112,179,255}, -{"/dark27/4",233,209,231,231,41,138,255}, -{"/dark27/5",62,208,166,102,166,30,255}, -{"/dark27/6",31,252,230,230,171,2,255}, -{"/dark27/7",27,210,166,166,118,29,255}, -{"/dark28/1",114,211,158,27,158,119,255}, -{"/dark28/2",18,252,217,217,95,2,255}, -{"/dark28/3",173,95,179,117,112,179,255}, -{"/dark28/4",233,209,231,231,41,138,255}, -{"/dark28/5",62,208,166,102,166,30,255}, -{"/dark28/6",31,252,230,230,171,2,255}, -{"/dark28/7",27,210,166,166,118,29,255}, -{"/dark28/8",0,0,102,102,102,102,255}, -{"/gnbu3/1",76,25,243,224,243,219,255}, -{"/gnbu3/2",95,61,221,168,221,181,255}, -{"/gnbu3/3",140,170,202,67,162,202,255}, -{"/gnbu4/1",65,17,249,240,249,232,255}, -{"/gnbu4/2",87,46,228,186,228,188,255}, -{"/gnbu4/3",123,101,204,123,204,196,255}, -{"/gnbu4/4",141,197,190,43,140,190,255}, -{"/gnbu5/1",65,17,249,240,249,232,255}, -{"/gnbu5/2",87,46,228,186,228,188,255}, -{"/gnbu5/3",123,101,204,123,204,196,255}, -{"/gnbu5/4",140,170,202,67,162,202,255}, -{"/gnbu5/5",145,243,172,8,104,172,255}, -{"/gnbu6/1",65,17,249,240,249,232,255}, -{"/gnbu6/2",77,41,235,204,235,197,255}, -{"/gnbu6/3",95,61,221,168,221,181,255}, -{"/gnbu6/4",123,101,204,123,204,196,255}, -{"/gnbu6/5",140,170,202,67,162,202,255}, -{"/gnbu6/6",145,243,172,8,104,172,255}, -{"/gnbu7/1",65,17,249,240,249,232,255}, -{"/gnbu7/2",77,41,235,204,235,197,255}, -{"/gnbu7/3",95,61,221,168,221,181,255}, -{"/gnbu7/4",123,101,204,123,204,196,255}, -{"/gnbu7/5",137,160,211,78,179,211,255}, -{"/gnbu7/6",141,197,190,43,140,190,255}, -{"/gnbu7/7",147,242,158,8,88,158,255}, -{"/gnbu8/1",60,12,252,247,252,240,255}, -{"/gnbu8/2",76,25,243,224,243,219,255}, -{"/gnbu8/3",77,41,235,204,235,197,255}, -{"/gnbu8/4",95,61,221,168,221,181,255}, -{"/gnbu8/5",123,101,204,123,204,196,255}, -{"/gnbu8/6",137,160,211,78,179,211,255}, -{"/gnbu8/7",141,197,190,43,140,190,255}, -{"/gnbu8/8",147,242,158,8,88,158,255}, -{"/gnbu9/1",60,12,252,247,252,240,255}, -{"/gnbu9/2",76,25,243,224,243,219,255}, -{"/gnbu9/3",77,41,235,204,235,197,255}, -{"/gnbu9/4",95,61,221,168,221,181,255}, -{"/gnbu9/5",123,101,204,123,204,196,255}, -{"/gnbu9/6",137,160,211,78,179,211,255}, -{"/gnbu9/7",141,197,190,43,140,190,255}, -{"/gnbu9/8",145,243,172,8,104,172,255}, -{"/gnbu9/9",150,239,129,8,64,129,255}, -{"/greens3/1",74,21,245,229,245,224,255}, -{"/greens3/2",80,72,217,161,217,155,255}, -{"/greens3/3",98,178,163,49,163,84,255}, -{"/greens4/1",73,15,248,237,248,233,255}, -{"/greens4/2",78,54,228,186,228,179,255}, -{"/greens4/3",86,104,196,116,196,118,255}, -{"/greens4/4",98,190,139,35,139,69,255}, -{"/greens5/1",73,15,248,237,248,233,255}, -{"/greens5/2",78,54,228,186,228,179,255}, -{"/greens5/3",86,104,196,116,196,118,255}, -{"/greens5/4",98,178,163,49,163,84,255}, -{"/greens5/5",102,255,109,0,109,44,255}, -{"/greens6/1",73,15,248,237,248,233,255}, -{"/greens6/2",77,44,233,199,233,192,255}, -{"/greens6/3",80,72,217,161,217,155,255}, -{"/greens6/4",86,104,196,116,196,118,255}, -{"/greens6/5",98,178,163,49,163,84,255}, -{"/greens6/6",102,255,109,0,109,44,255}, -{"/greens7/1",73,15,248,237,248,233,255}, -{"/greens7/2",77,44,233,199,233,192,255}, -{"/greens7/3",80,72,217,161,217,155,255}, -{"/greens7/4",86,104,196,116,196,118,255}, -{"/greens7/5",96,158,171,65,171,93,255}, -{"/greens7/6",98,190,139,35,139,69,255}, -{"/greens7/7",108,255,90,0,90,50,255}, -{"/greens8/1",72,7,252,247,252,245,255}, -{"/greens8/2",74,21,245,229,245,224,255}, -{"/greens8/3",77,44,233,199,233,192,255}, -{"/greens8/4",80,72,217,161,217,155,255}, -{"/greens8/5",86,104,196,116,196,118,255}, -{"/greens8/6",96,158,171,65,171,93,255}, -{"/greens8/7",98,190,139,35,139,69,255}, -{"/greens8/8",108,255,90,0,90,50,255}, -{"/greens9/1",72,7,252,247,252,245,255}, -{"/greens9/2",74,21,245,229,245,224,255}, -{"/greens9/3",77,44,233,199,233,192,255}, -{"/greens9/4",80,72,217,161,217,155,255}, -{"/greens9/5",86,104,196,116,196,118,255}, -{"/greens9/6",96,158,171,65,171,93,255}, -{"/greens9/7",98,190,139,35,139,69,255}, -{"/greens9/8",102,255,109,0,109,44,255}, -{"/greens9/9",101,255,68,0,68,27,255}, -{"/greys3/1",0,0,240,240,240,240,255}, -{"/greys3/2",0,0,189,189,189,189,255}, -{"/greys3/3",0,0,99,99,99,99,255}, -{"/greys4/1",0,0,247,247,247,247,255}, -{"/greys4/2",0,0,204,204,204,204,255}, -{"/greys4/3",0,0,150,150,150,150,255}, -{"/greys4/4",0,0,82,82,82,82,255}, -{"/greys5/1",0,0,247,247,247,247,255}, -{"/greys5/2",0,0,204,204,204,204,255}, -{"/greys5/3",0,0,150,150,150,150,255}, -{"/greys5/4",0,0,99,99,99,99,255}, -{"/greys5/5",0,0,37,37,37,37,255}, -{"/greys6/1",0,0,247,247,247,247,255}, -{"/greys6/2",0,0,217,217,217,217,255}, -{"/greys6/3",0,0,189,189,189,189,255}, -{"/greys6/4",0,0,150,150,150,150,255}, -{"/greys6/5",0,0,99,99,99,99,255}, -{"/greys6/6",0,0,37,37,37,37,255}, -{"/greys7/1",0,0,247,247,247,247,255}, -{"/greys7/2",0,0,217,217,217,217,255}, -{"/greys7/3",0,0,189,189,189,189,255}, -{"/greys7/4",0,0,150,150,150,150,255}, -{"/greys7/5",0,0,115,115,115,115,255}, -{"/greys7/6",0,0,82,82,82,82,255}, -{"/greys7/7",0,0,37,37,37,37,255}, -{"/greys8/1",0,0,255,255,255,255,255}, -{"/greys8/2",0,0,240,240,240,240,255}, -{"/greys8/3",0,0,217,217,217,217,255}, -{"/greys8/4",0,0,189,189,189,189,255}, -{"/greys8/5",0,0,150,150,150,150,255}, -{"/greys8/6",0,0,115,115,115,115,255}, -{"/greys8/7",0,0,82,82,82,82,255}, -{"/greys8/8",0,0,37,37,37,37,255}, -{"/greys9/1",0,0,255,255,255,255,255}, -{"/greys9/2",0,0,240,240,240,240,255}, -{"/greys9/3",0,0,217,217,217,217,255}, -{"/greys9/4",0,0,189,189,189,189,255}, -{"/greys9/5",0,0,150,150,150,150,255}, -{"/greys9/6",0,0,115,115,115,115,255}, -{"/greys9/7",0,0,82,82,82,82,255}, -{"/greys9/8",0,0,37,37,37,37,255}, -{"/greys9/9",0,0,0,0,0,0,255}, -{"/oranges3/1",21,48,254,254,230,206,255}, -{"/oranges3/2",19,147,253,253,174,107,255}, -{"/oranges3/3",14,240,230,230,85,13,255}, -{"/oranges4/1",19,32,254,254,237,222,255}, -{"/oranges4/2",20,120,253,253,190,133,255}, -{"/oranges4/3",17,194,253,253,141,60,255}, -{"/oranges4/4",13,253,217,217,71,1,255}, -{"/oranges5/1",19,32,254,254,237,222,255}, -{"/oranges5/2",20,120,253,253,190,133,255}, -{"/oranges5/3",17,194,253,253,141,60,255}, -{"/oranges5/4",14,240,230,230,85,13,255}, -{"/oranges5/5",13,250,166,166,54,3,255}, -{"/oranges6/1",19,32,254,254,237,222,255}, -{"/oranges6/2",21,91,253,253,208,162,255}, -{"/oranges6/3",19,147,253,253,174,107,255}, -{"/oranges6/4",17,194,253,253,141,60,255}, -{"/oranges6/5",14,240,230,230,85,13,255}, -{"/oranges6/6",13,250,166,166,54,3,255}, -{"/oranges7/1",19,32,254,254,237,222,255}, -{"/oranges7/2",21,91,253,253,208,162,255}, -{"/oranges7/3",19,147,253,253,174,107,255}, -{"/oranges7/4",17,194,253,253,141,60,255}, -{"/oranges7/5",16,234,241,241,105,19,255}, -{"/oranges7/6",13,253,217,217,72,1,255}, -{"/oranges7/7",12,247,140,140,45,4,255}, -{"/oranges8/1",21,20,255,255,245,235,255}, -{"/oranges8/2",21,48,254,254,230,206,255}, -{"/oranges8/3",21,91,253,253,208,162,255}, -{"/oranges8/4",19,147,253,253,174,107,255}, -{"/oranges8/5",17,194,253,253,141,60,255}, -{"/oranges8/6",16,234,241,241,105,19,255}, -{"/oranges8/7",13,253,217,217,72,1,255}, -{"/oranges8/8",12,247,140,140,45,4,255}, -{"/oranges9/1",21,20,255,255,245,235,255}, -{"/oranges9/2",21,48,254,254,230,206,255}, -{"/oranges9/3",21,91,253,253,208,162,255}, -{"/oranges9/4",19,147,253,253,174,107,255}, -{"/oranges9/5",17,194,253,253,141,60,255}, -{"/oranges9/6",16,234,241,241,105,19,255}, -{"/oranges9/7",13,253,217,217,72,1,255}, -{"/oranges9/8",13,250,166,166,54,3,255}, -{"/oranges9/9",12,246,127,127,39,4,255}, -{"/orrd3/1",25,54,254,254,232,200,255}, -{"/orrd3/2",19,121,253,253,187,132,255}, -{"/orrd3/3",5,197,227,227,74,51,255}, -{"/orrd4/1",26,37,254,254,240,217,255}, -{"/orrd4/2",24,115,253,253,204,138,255}, -{"/orrd4/3",13,164,252,252,141,89,255}, -{"/orrd4/4",3,218,215,215,48,31,255}, -{"/orrd5/1",26,37,254,254,240,217,255}, -{"/orrd5/2",24,115,253,253,204,138,255}, -{"/orrd5/3",13,164,252,252,141,89,255}, -{"/orrd5/4",5,197,227,227,74,51,255}, -{"/orrd5/5",0,255,179,179,0,0,255}, -{"/orrd6/1",26,37,254,254,240,217,255}, -{"/orrd6/2",24,95,253,253,212,158,255}, -{"/orrd6/3",19,121,253,253,187,132,255}, -{"/orrd6/4",13,164,252,252,141,89,255}, -{"/orrd6/5",5,197,227,227,74,51,255}, -{"/orrd6/6",0,255,179,179,0,0,255}, -{"/orrd7/1",26,37,254,254,240,217,255}, -{"/orrd7/2",24,95,253,253,212,158,255}, -{"/orrd7/3",19,121,253,253,187,132,255}, -{"/orrd7/4",13,164,252,252,141,89,255}, -{"/orrd7/5",7,178,239,239,101,72,255}, -{"/orrd7/6",3,218,215,215,48,31,255}, -{"/orrd7/7",0,255,153,153,0,0,255}, -{"/orrd8/1",24,18,255,255,247,236,255}, -{"/orrd8/2",25,54,254,254,232,200,255}, -{"/orrd8/3",24,95,253,253,212,158,255}, -{"/orrd8/4",19,121,253,253,187,132,255}, -{"/orrd8/5",13,164,252,252,141,89,255}, -{"/orrd8/6",7,178,239,239,101,72,255}, -{"/orrd8/7",3,218,215,215,48,31,255}, -{"/orrd8/8",0,255,153,153,0,0,255}, -{"/orrd9/1",24,18,255,255,247,236,255}, -{"/orrd9/2",25,54,254,254,232,200,255}, -{"/orrd9/3",24,95,253,253,212,158,255}, -{"/orrd9/4",19,121,253,253,187,132,255}, -{"/orrd9/5",13,164,252,252,141,89,255}, -{"/orrd9/6",7,178,239,239,101,72,255}, -{"/orrd9/7",3,218,215,215,48,31,255}, -{"/orrd9/8",0,255,179,179,0,0,255}, -{"/orrd9/9",0,255,127,127,0,0,255}, -{"/paired10/1",142,68,227,166,206,227,255}, -{"/paired10/10",190,153,154,106,61,154,255}, -{"/paired10/2",144,211,180,31,120,180,255}, -{"/paired10/3",65,97,223,178,223,138,255}, -{"/paired10/4",82,184,160,51,160,44,255}, -{"/paired10/5",0,99,251,251,154,153,255}, -{"/paired10/6",254,225,227,227,26,28,255}, -{"/paired10/7",23,143,253,253,191,111,255}, -{"/paired10/8",21,255,255,255,127,0,255}, -{"/paired10/9",198,42,214,202,178,214,255}, -{"/paired11/1",142,68,227,166,206,227,255}, -{"/paired11/10",190,153,154,106,61,154,255}, -{"/paired11/11",42,102,255,255,255,153,255}, -{"/paired11/2",144,211,180,31,120,180,255}, -{"/paired11/3",65,97,223,178,223,138,255}, -{"/paired11/4",82,184,160,51,160,44,255}, -{"/paired11/5",0,99,251,251,154,153,255}, -{"/paired11/6",254,225,227,227,26,28,255}, -{"/paired11/7",23,143,253,253,191,111,255}, -{"/paired11/8",21,255,255,255,127,0,255}, -{"/paired11/9",198,42,214,202,178,214,255}, -{"/paired12/1",142,68,227,166,206,227,255}, -{"/paired12/10",190,153,154,106,61,154,255}, -{"/paired12/11",42,102,255,255,255,153,255}, -{"/paired12/12",15,197,177,177,89,40,255}, -{"/paired12/2",144,211,180,31,120,180,255}, -{"/paired12/3",65,97,223,178,223,138,255}, -{"/paired12/4",82,184,160,51,160,44,255}, -{"/paired12/5",0,99,251,251,154,153,255}, -{"/paired12/6",254,225,227,227,26,28,255}, -{"/paired12/7",23,143,253,253,191,111,255}, -{"/paired12/8",21,255,255,255,127,0,255}, -{"/paired12/9",198,42,214,202,178,214,255}, -{"/paired3/1",142,68,227,166,206,227,255}, -{"/paired3/2",144,211,180,31,120,180,255}, -{"/paired3/3",65,97,223,178,223,138,255}, -{"/paired4/1",142,68,227,166,206,227,255}, -{"/paired4/2",144,211,180,31,120,180,255}, -{"/paired4/3",65,97,223,178,223,138,255}, -{"/paired4/4",82,184,160,51,160,44,255}, -{"/paired5/1",142,68,227,166,206,227,255}, -{"/paired5/2",144,211,180,31,120,180,255}, -{"/paired5/3",65,97,223,178,223,138,255}, -{"/paired5/4",82,184,160,51,160,44,255}, -{"/paired5/5",0,99,251,251,154,153,255}, -{"/paired6/1",142,68,227,166,206,227,255}, -{"/paired6/2",144,211,180,31,120,180,255}, -{"/paired6/3",65,97,223,178,223,138,255}, -{"/paired6/4",82,184,160,51,160,44,255}, -{"/paired6/5",0,99,251,251,154,153,255}, -{"/paired6/6",254,225,227,227,26,28,255}, -{"/paired7/1",142,68,227,166,206,227,255}, -{"/paired7/2",144,211,180,31,120,180,255}, -{"/paired7/3",65,97,223,178,223,138,255}, -{"/paired7/4",82,184,160,51,160,44,255}, -{"/paired7/5",0,99,251,251,154,153,255}, -{"/paired7/6",254,225,227,227,26,28,255}, -{"/paired7/7",23,143,253,253,191,111,255}, -{"/paired8/1",142,68,227,166,206,227,255}, -{"/paired8/2",144,211,180,31,120,180,255}, -{"/paired8/3",65,97,223,178,223,138,255}, -{"/paired8/4",82,184,160,51,160,44,255}, -{"/paired8/5",0,99,251,251,154,153,255}, -{"/paired8/6",254,225,227,227,26,28,255}, -{"/paired8/7",23,143,253,253,191,111,255}, -{"/paired8/8",21,255,255,255,127,0,255}, -{"/paired9/1",142,68,227,166,206,227,255}, -{"/paired9/2",144,211,180,31,120,180,255}, -{"/paired9/3",65,97,223,178,223,138,255}, -{"/paired9/4",82,184,160,51,160,44,255}, -{"/paired9/5",0,99,251,251,154,153,255}, -{"/paired9/6",254,225,227,227,26,28,255}, -{"/paired9/7",23,143,253,253,191,111,255}, -{"/paired9/8",21,255,255,255,127,0,255}, -{"/paired9/9",198,42,214,202,178,214,255}, -{"/pastel13/1",3,78,251,251,180,174,255}, -{"/pastel13/2",146,53,227,179,205,227,255}, -{"/pastel13/3",77,41,235,204,235,197,255}, -{"/pastel14/1",3,78,251,251,180,174,255}, -{"/pastel14/2",146,53,227,179,205,227,255}, -{"/pastel14/3",77,41,235,204,235,197,255}, -{"/pastel14/4",202,27,228,222,203,228,255}, -{"/pastel15/1",3,78,251,251,180,174,255}, -{"/pastel15/2",146,53,227,179,205,227,255}, -{"/pastel15/3",77,41,235,204,235,197,255}, -{"/pastel15/4",202,27,228,222,203,228,255}, -{"/pastel15/5",24,88,254,254,217,166,255}, -{"/pastel16/1",3,78,251,251,180,174,255}, -{"/pastel16/2",146,53,227,179,205,227,255}, -{"/pastel16/3",77,41,235,204,235,197,255}, -{"/pastel16/4",202,27,228,222,203,228,255}, -{"/pastel16/5",24,88,254,254,217,166,255}, -{"/pastel16/6",42,50,255,255,255,204,255}, -{"/pastel17/1",3,78,251,251,180,174,255}, -{"/pastel17/2",146,53,227,179,205,227,255}, -{"/pastel17/3",77,41,235,204,235,197,255}, -{"/pastel17/4",202,27,228,222,203,228,255}, -{"/pastel17/5",24,88,254,254,217,166,255}, -{"/pastel17/6",42,50,255,255,255,204,255}, -{"/pastel17/7",28,44,229,229,216,189,255}, -{"/pastel18/1",3,78,251,251,180,174,255}, -{"/pastel18/2",146,53,227,179,205,227,255}, -{"/pastel18/3",77,41,235,204,235,197,255}, -{"/pastel18/4",202,27,228,222,203,228,255}, -{"/pastel18/5",24,88,254,254,217,166,255}, -{"/pastel18/6",42,50,255,255,255,204,255}, -{"/pastel18/7",28,44,229,229,216,189,255}, -{"/pastel18/8",233,35,253,253,218,236,255}, -{"/pastel19/1",3,78,251,251,180,174,255}, -{"/pastel19/2",146,53,227,179,205,227,255}, -{"/pastel19/3",77,41,235,204,235,197,255}, -{"/pastel19/4",202,27,228,222,203,228,255}, -{"/pastel19/5",24,88,254,254,217,166,255}, -{"/pastel19/6",42,50,255,255,255,204,255}, -{"/pastel19/7",28,44,229,229,216,189,255}, -{"/pastel19/8",233,35,253,253,218,236,255}, -{"/pastel19/9",0,0,242,242,242,242,255}, -{"/pastel23/1",108,53,226,179,226,205,255}, -{"/pastel23/2",17,81,253,253,205,172,255}, -{"/pastel23/3",155,31,232,203,213,232,255}, -{"/pastel24/1",108,53,226,179,226,205,255}, -{"/pastel24/2",17,81,253,253,205,172,255}, -{"/pastel24/3",155,31,232,203,213,232,255}, -{"/pastel24/4",228,43,244,244,202,228,255}, -{"/pastel25/1",108,53,226,179,226,205,255}, -{"/pastel25/2",17,81,253,253,205,172,255}, -{"/pastel25/3",155,31,232,203,213,232,255}, -{"/pastel25/4",228,43,244,244,202,228,255}, -{"/pastel25/5",56,45,245,230,245,201,255}, -{"/pastel26/1",108,53,226,179,226,205,255}, -{"/pastel26/2",17,81,253,253,205,172,255}, -{"/pastel26/3",155,31,232,203,213,232,255}, -{"/pastel26/4",228,43,244,244,202,228,255}, -{"/pastel26/5",56,45,245,230,245,201,255}, -{"/pastel26/6",35,81,255,255,242,174,255}, -{"/pastel27/1",108,53,226,179,226,205,255}, -{"/pastel27/2",17,81,253,253,205,172,255}, -{"/pastel27/3",155,31,232,203,213,232,255}, -{"/pastel27/4",228,43,244,244,202,228,255}, -{"/pastel27/5",56,45,245,230,245,201,255}, -{"/pastel27/6",35,81,255,255,242,174,255}, -{"/pastel27/7",25,39,241,241,226,204,255}, -{"/pastel28/1",108,53,226,179,226,205,255}, -{"/pastel28/2",17,81,253,253,205,172,255}, -{"/pastel28/3",155,31,232,203,213,232,255}, -{"/pastel28/4",228,43,244,244,202,228,255}, -{"/pastel28/5",56,45,245,230,245,201,255}, -{"/pastel28/6",35,81,255,255,242,174,255}, -{"/pastel28/7",25,39,241,241,226,204,255}, -{"/pastel28/8",0,0,204,204,204,204,255}, -{"/piyg10/1",230,253,142,142,1,82,255}, -{"/piyg10/10",77,191,100,39,100,25,255}, -{"/piyg10/2",230,220,197,197,27,125,255}, -{"/piyg10/3",232,118,222,222,119,174,255}, -{"/piyg10/4",229,62,241,241,182,218,255}, -{"/piyg10/5",233,29,253,253,224,239,255}, -{"/piyg10/6",59,38,245,230,245,208,255}, -{"/piyg10/7",61,103,225,184,225,134,255}, -{"/piyg10/8",63,166,188,127,188,65,255}, -{"/piyg10/9",68,197,146,77,146,33,255}, -{"/piyg11/1",230,253,142,142,1,82,255}, -{"/piyg11/10",68,197,146,77,146,33,255}, -{"/piyg11/11",77,191,100,39,100,25,255}, -{"/piyg11/2",230,220,197,197,27,125,255}, -{"/piyg11/3",232,118,222,222,119,174,255}, -{"/piyg11/4",229,62,241,241,182,218,255}, -{"/piyg11/5",233,29,253,253,224,239,255}, -{"/piyg11/6",0,0,247,247,247,247,255}, -{"/piyg11/7",59,38,245,230,245,208,255}, -{"/piyg11/8",61,103,225,184,225,134,255}, -{"/piyg11/9",63,166,188,127,188,65,255}, -{"/piyg3/1",231,76,233,233,163,201,255}, -{"/piyg3/2",0,0,247,247,247,247,255}, -{"/piyg3/3",63,129,215,161,215,106,255}, -{"/piyg4/1",228,220,208,208,28,139,255}, -{"/piyg4/2",229,62,241,241,182,218,255}, -{"/piyg4/3",61,103,225,184,225,134,255}, -{"/piyg4/4",72,198,172,77,172,38,255}, -{"/piyg5/1",228,220,208,208,28,139,255}, -{"/piyg5/2",229,62,241,241,182,218,255}, -{"/piyg5/3",0,0,247,247,247,247,255}, -{"/piyg5/4",61,103,225,184,225,134,255}, -{"/piyg5/5",72,198,172,77,172,38,255}, -{"/piyg6/1",230,220,197,197,27,125,255}, -{"/piyg6/2",231,76,233,233,163,201,255}, -{"/piyg6/3",233,29,253,253,224,239,255}, -{"/piyg6/4",59,38,245,230,245,208,255}, -{"/piyg6/5",63,129,215,161,215,106,255}, -{"/piyg6/6",68,197,146,77,146,33,255}, -{"/piyg7/1",230,220,197,197,27,125,255}, -{"/piyg7/2",231,76,233,233,163,201,255}, -{"/piyg7/3",233,29,253,253,224,239,255}, -{"/piyg7/4",0,0,247,247,247,247,255}, -{"/piyg7/5",59,38,245,230,245,208,255}, -{"/piyg7/6",63,129,215,161,215,106,255}, -{"/piyg7/7",68,197,146,77,146,33,255}, -{"/piyg8/1",230,220,197,197,27,125,255}, -{"/piyg8/2",232,118,222,222,119,174,255}, -{"/piyg8/3",229,62,241,241,182,218,255}, -{"/piyg8/4",233,29,253,253,224,239,255}, -{"/piyg8/5",59,38,245,230,245,208,255}, -{"/piyg8/6",61,103,225,184,225,134,255}, -{"/piyg8/7",63,166,188,127,188,65,255}, -{"/piyg8/8",68,197,146,77,146,33,255}, -{"/piyg9/1",230,220,197,197,27,125,255}, -{"/piyg9/2",232,118,222,222,119,174,255}, -{"/piyg9/3",229,62,241,241,182,218,255}, -{"/piyg9/4",233,29,253,253,224,239,255}, -{"/piyg9/5",0,0,247,247,247,247,255}, -{"/piyg9/6",59,38,245,230,245,208,255}, -{"/piyg9/7",61,103,225,184,225,134,255}, -{"/piyg9/8",63,166,188,127,188,65,255}, -{"/piyg9/9",68,197,146,77,146,33,255}, -{"/prgn10/1",206,255,75,64,0,75,255}, -{"/prgn10/10",101,255,68,0,68,27,255}, -{"/prgn10/2",206,173,131,118,42,131,255}, -{"/prgn10/3",199,87,171,153,112,171,255}, -{"/prgn10/4",199,51,207,194,165,207,255}, -{"/prgn10/5",210,21,232,231,212,232,255}, -{"/prgn10/6",76,30,240,217,240,211,255}, -{"/prgn10/7",80,68,219,166,219,160,255}, -{"/prgn10/8",88,123,174,90,174,97,255}, -{"/prgn10/9",97,197,120,27,120,55,255}, -{"/prgn11/1",206,255,75,64,0,75,255}, -{"/prgn11/10",97,197,120,27,120,55,255}, -{"/prgn11/11",101,255,68,0,68,27,255}, -{"/prgn11/2",206,173,131,118,42,131,255}, -{"/prgn11/3",199,87,171,153,112,171,255}, -{"/prgn11/4",199,51,207,194,165,207,255}, -{"/prgn11/5",210,21,232,231,212,232,255}, -{"/prgn11/6",0,0,247,247,247,247,255}, -{"/prgn11/7",76,30,240,217,240,211,255}, -{"/prgn11/8",80,68,219,166,219,160,255}, -{"/prgn11/9",88,123,174,90,174,97,255}, -{"/prgn3/1",196,70,195,175,141,195,255}, -{"/prgn3/2",0,0,247,247,247,247,255}, -{"/prgn3/3",82,90,191,127,191,123,255}, -{"/prgn4/1",201,168,148,123,50,148,255}, -{"/prgn4/2",199,51,207,194,165,207,255}, -{"/prgn4/3",80,68,219,166,219,160,255}, -{"/prgn4/4",102,255,136,0,136,55,255}, -{"/prgn5/1",201,168,148,123,50,148,255}, -{"/prgn5/2",199,51,207,194,165,207,255}, -{"/prgn5/3",0,0,247,247,247,247,255}, -{"/prgn5/4",80,68,219,166,219,160,255}, -{"/prgn5/5",102,255,136,0,136,55,255}, -{"/prgn6/1",206,173,131,118,42,131,255}, -{"/prgn6/2",196,70,195,175,141,195,255}, -{"/prgn6/3",210,21,232,231,212,232,255}, -{"/prgn6/4",76,30,240,217,240,211,255}, -{"/prgn6/5",82,90,191,127,191,123,255}, -{"/prgn6/6",97,197,120,27,120,55,255}, -{"/prgn7/1",206,173,131,118,42,131,255}, -{"/prgn7/2",196,70,195,175,141,195,255}, -{"/prgn7/3",210,21,232,231,212,232,255}, -{"/prgn7/4",0,0,247,247,247,247,255}, -{"/prgn7/5",76,30,240,217,240,211,255}, -{"/prgn7/6",82,90,191,127,191,123,255}, -{"/prgn7/7",97,197,120,27,120,55,255}, -{"/prgn8/1",206,173,131,118,42,131,255}, -{"/prgn8/2",199,87,171,153,112,171,255}, -{"/prgn8/3",199,51,207,194,165,207,255}, -{"/prgn8/4",210,21,232,231,212,232,255}, -{"/prgn8/5",76,30,240,217,240,211,255}, -{"/prgn8/6",80,68,219,166,219,160,255}, -{"/prgn8/7",88,123,174,90,174,97,255}, -{"/prgn8/8",97,197,120,27,120,55,255}, -{"/prgn9/1",206,173,131,118,42,131,255}, -{"/prgn9/2",199,87,171,153,112,171,255}, -{"/prgn9/3",199,51,207,194,165,207,255}, -{"/prgn9/4",210,21,232,231,212,232,255}, -{"/prgn9/5",0,0,247,247,247,247,255}, -{"/prgn9/6",76,30,240,217,240,211,255}, -{"/prgn9/7",80,68,219,166,219,160,255}, -{"/prgn9/8",88,123,174,90,174,97,255}, -{"/prgn9/9",97,197,120,27,120,55,255}, -{"/pubu3/1",189,11,242,236,231,242,255}, -{"/pubu3/2",151,61,219,166,189,219,255}, -{"/pubu3/3",141,197,190,43,140,190,255}, -{"/pubu4/1",185,8,246,241,238,246,255}, -{"/pubu4/2",155,40,225,189,201,225,255}, -{"/pubu4/3",145,112,207,116,169,207,255}, -{"/pubu4/4",143,247,176,5,112,176,255}, -{"/pubu5/1",185,8,246,241,238,246,255}, -{"/pubu5/2",155,40,225,189,201,225,255}, -{"/pubu5/3",145,112,207,116,169,207,255}, -{"/pubu5/4",141,197,190,43,140,190,255}, -{"/pubu5/5",143,247,141,4,90,141,255}, -{"/pubu6/1",185,8,246,241,238,246,255}, -{"/pubu6/2",168,24,230,208,209,230,255}, -{"/pubu6/3",151,61,219,166,189,219,255}, -{"/pubu6/4",145,112,207,116,169,207,255}, -{"/pubu6/5",141,197,190,43,140,190,255}, -{"/pubu6/6",143,247,141,4,90,141,255}, -{"/pubu7/1",185,8,246,241,238,246,255}, -{"/pubu7/2",168,24,230,208,209,230,255}, -{"/pubu7/3",151,61,219,166,189,219,255}, -{"/pubu7/4",145,112,207,116,169,207,255}, -{"/pubu7/5",142,183,192,54,144,192,255}, -{"/pubu7/6",143,247,176,5,112,176,255}, -{"/pubu7/7",143,248,123,3,78,123,255}, -{"/pubu8/1",233,8,255,255,247,251,255}, -{"/pubu8/2",189,11,242,236,231,242,255}, -{"/pubu8/3",168,24,230,208,209,230,255}, -{"/pubu8/4",151,61,219,166,189,219,255}, -{"/pubu8/5",145,112,207,116,169,207,255}, -{"/pubu8/6",142,183,192,54,144,192,255}, -{"/pubu8/7",143,247,176,5,112,176,255}, -{"/pubu8/8",143,248,123,3,78,123,255}, -{"/pubu9/1",233,8,255,255,247,251,255}, -{"/pubu9/2",189,11,242,236,231,242,255}, -{"/pubu9/3",168,24,230,208,209,230,255}, -{"/pubu9/4",151,61,219,166,189,219,255}, -{"/pubu9/5",145,112,207,116,169,207,255}, -{"/pubu9/6",142,183,192,54,144,192,255}, -{"/pubu9/7",143,247,176,5,112,176,255}, -{"/pubu9/8",143,247,141,4,90,141,255}, -{"/pubu9/9",143,249,88,2,56,88,255}, -{"/pubugn3/1",200,14,240,236,226,240,255}, -{"/pubugn3/2",151,61,219,166,189,219,255}, -{"/pubugn3/3",130,208,153,28,144,153,255}, -{"/pubugn4/1",207,8,247,246,239,247,255}, -{"/pubugn4/2",155,40,225,189,201,225,255}, -{"/pubugn4/3",143,128,207,103,169,207,255}, -{"/pubugn4/4",130,251,138,2,129,138,255}, -{"/pubugn5/1",207,8,247,246,239,247,255}, -{"/pubugn5/2",155,40,225,189,201,225,255}, -{"/pubugn5/3",143,128,207,103,169,207,255}, -{"/pubugn5/4",130,208,153,28,144,153,255}, -{"/pubugn5/5",119,252,108,1,108,89,255}, -{"/pubugn6/1",207,8,247,246,239,247,255}, -{"/pubugn6/2",168,24,230,208,209,230,255}, -{"/pubugn6/3",151,61,219,166,189,219,255}, -{"/pubugn6/4",143,128,207,103,169,207,255}, -{"/pubugn6/5",130,208,153,28,144,153,255}, -{"/pubugn6/6",119,252,108,1,108,89,255}, -{"/pubugn7/1",207,8,247,246,239,247,255}, -{"/pubugn7/2",168,24,230,208,209,230,255}, -{"/pubugn7/3",151,61,219,166,189,219,255}, -{"/pubugn7/4",143,128,207,103,169,207,255}, -{"/pubugn7/5",142,183,192,54,144,192,255}, -{"/pubugn7/6",130,251,138,2,129,138,255}, -{"/pubugn7/7",118,252,100,1,100,80,255}, -{"/pubugn8/1",233,8,255,255,247,251,255}, -{"/pubugn8/2",200,14,240,236,226,240,255}, -{"/pubugn8/3",168,24,230,208,209,230,255}, -{"/pubugn8/4",151,61,219,166,189,219,255}, -{"/pubugn8/5",143,128,207,103,169,207,255}, -{"/pubugn8/6",142,183,192,54,144,192,255}, -{"/pubugn8/7",130,251,138,2,129,138,255}, -{"/pubugn8/8",118,252,100,1,100,80,255}, -{"/pubugn9/1",233,8,255,255,247,251,255}, -{"/pubugn9/2",200,14,240,236,226,240,255}, -{"/pubugn9/3",168,24,230,208,209,230,255}, -{"/pubugn9/4",151,61,219,166,189,219,255}, -{"/pubugn9/5",143,128,207,103,169,207,255}, -{"/pubugn9/6",142,183,192,54,144,192,255}, -{"/pubugn9/7",130,251,138,2,129,138,255}, -{"/pubugn9/8",119,252,108,1,108,89,255}, -{"/pubugn9/9",117,251,70,1,70,54,255}, -{"/puor10/1",18,238,127,127,59,8,255}, -{"/puor10/10",195,255,75,45,0,75,255}, -{"/puor10/2",20,246,179,179,88,6,255}, -{"/puor10/3",22,232,224,224,130,20,255}, -{"/puor10/4",23,155,253,253,184,99,255}, -{"/puor10/5",24,72,254,254,224,182,255}, -{"/puor10/6",165,20,235,216,218,235,255}, -{"/puor10/7",177,47,210,178,171,210,255}, -{"/puor10/8",179,84,172,128,115,172,255}, -{"/puor10/9",189,181,136,84,39,136,255}, -{"/puor11/1",18,238,127,127,59,8,255}, -{"/puor11/10",189,181,136,84,39,136,255}, -{"/puor11/11",195,255,75,45,0,75,255}, -{"/puor11/2",20,246,179,179,88,6,255}, -{"/puor11/3",22,232,224,224,130,20,255}, -{"/puor11/4",23,155,253,253,184,99,255}, -{"/puor11/5",24,72,254,254,224,182,255}, -{"/puor11/6",0,0,247,247,247,247,255}, -{"/puor11/7",165,20,235,216,218,235,255}, -{"/puor11/8",177,47,210,178,171,210,255}, -{"/puor11/9",179,84,172,128,115,172,255}, -{"/puor3/1",23,187,241,241,163,64,255}, -{"/puor3/2",0,0,247,247,247,247,255}, -{"/puor3/3",178,69,195,153,142,195,255}, -{"/puor4/1",17,253,230,230,97,1,255}, -{"/puor4/2",23,155,253,253,184,99,255}, -{"/puor4/3",177,47,210,178,171,210,255}, -{"/puor4/4",185,155,153,94,60,153,255}, -{"/puor5/1",17,253,230,230,97,1,255}, -{"/puor5/2",23,155,253,253,184,99,255}, -{"/puor5/3",0,0,247,247,247,247,255}, -{"/puor5/4",177,47,210,178,171,210,255}, -{"/puor5/5",185,155,153,94,60,153,255}, -{"/puor6/1",20,246,179,179,88,6,255}, -{"/puor6/2",23,187,241,241,163,64,255}, -{"/puor6/3",24,72,254,254,224,182,255}, -{"/puor6/4",165,20,235,216,218,235,255}, -{"/puor6/5",178,69,195,153,142,195,255}, -{"/puor6/6",189,181,136,84,39,136,255}, -{"/puor7/1",20,246,179,179,88,6,255}, -{"/puor7/2",23,187,241,241,163,64,255}, -{"/puor7/3",24,72,254,254,224,182,255}, -{"/puor7/4",0,0,247,247,247,247,255}, -{"/puor7/5",165,20,235,216,218,235,255}, -{"/puor7/6",178,69,195,153,142,195,255}, -{"/puor7/7",189,181,136,84,39,136,255}, -{"/puor8/1",20,246,179,179,88,6,255}, -{"/puor8/2",22,232,224,224,130,20,255}, -{"/puor8/3",23,155,253,253,184,99,255}, -{"/puor8/4",24,72,254,254,224,182,255}, -{"/puor8/5",165,20,235,216,218,235,255}, -{"/puor8/6",177,47,210,178,171,210,255}, -{"/puor8/7",179,84,172,128,115,172,255}, -{"/puor8/8",189,181,136,84,39,136,255}, -{"/puor9/1",20,246,179,179,88,6,255}, -{"/puor9/2",22,232,224,224,130,20,255}, -{"/puor9/3",23,155,253,253,184,99,255}, -{"/puor9/4",24,72,254,254,224,182,255}, -{"/puor9/5",0,0,247,247,247,247,255}, -{"/puor9/6",165,20,235,216,218,235,255}, -{"/puor9/7",177,47,210,178,171,210,255}, -{"/puor9/8",179,84,172,128,115,172,255}, -{"/puor9/9",189,181,136,84,39,136,255}, -{"/purd3/1",188,14,239,231,225,239,255}, -{"/purd3/2",214,67,201,201,148,199,255}, -{"/purd3/3",234,222,221,221,28,119,255}, -{"/purd4/1",185,8,246,241,238,246,255}, -{"/purd4/2",211,41,216,215,181,216,255}, -{"/purd4/3",228,139,223,223,101,176,255}, -{"/purd4/4",239,232,206,206,18,86,255}, -{"/purd5/1",185,8,246,241,238,246,255}, -{"/purd5/2",211,41,216,215,181,216,255}, -{"/purd5/3",228,139,223,223,101,176,255}, -{"/purd5/4",234,222,221,221,28,119,255}, -{"/purd5/5",236,255,152,152,0,67,255}, -{"/purd6/1",185,8,246,241,238,246,255}, -{"/purd6/2",204,38,218,212,185,218,255}, -{"/purd6/3",214,67,201,201,148,199,255}, -{"/purd6/4",228,139,223,223,101,176,255}, -{"/purd6/5",234,222,221,221,28,119,255}, -{"/purd6/6",236,255,152,152,0,67,255}, -{"/purd7/1",185,8,246,241,238,246,255}, -{"/purd7/2",204,38,218,212,185,218,255}, -{"/purd7/3",214,67,201,201,148,199,255}, -{"/purd7/4",228,139,223,223,101,176,255}, -{"/purd7/5",233,209,231,231,41,138,255}, -{"/purd7/6",239,232,206,206,18,86,255}, -{"/purd7/7",236,255,145,145,0,63,255}, -{"/purd8/1",195,5,249,247,244,249,255}, -{"/purd8/2",188,14,239,231,225,239,255}, -{"/purd8/3",204,38,218,212,185,218,255}, -{"/purd8/4",214,67,201,201,148,199,255}, -{"/purd8/5",228,139,223,223,101,176,255}, -{"/purd8/6",233,209,231,231,41,138,255}, -{"/purd8/7",239,232,206,206,18,86,255}, -{"/purd8/8",236,255,145,145,0,63,255}, -{"/purd9/1",195,5,249,247,244,249,255}, -{"/purd9/2",188,14,239,231,225,239,255}, -{"/purd9/3",204,38,218,212,185,218,255}, -{"/purd9/4",214,67,201,201,148,199,255}, -{"/purd9/5",228,139,223,223,101,176,255}, -{"/purd9/6",233,209,231,231,41,138,255}, -{"/purd9/7",239,232,206,206,18,86,255}, -{"/purd9/8",236,255,152,152,0,67,255}, -{"/purd9/9",242,255,103,103,0,31,255}, -{"/purples3/1",180,8,245,239,237,245,255}, -{"/purples3/2",168,37,220,188,189,220,255}, -{"/purples3/3",176,100,177,117,107,177,255}, -{"/purples4/1",182,7,247,242,240,247,255}, -{"/purples4/2",173,28,226,203,201,226,255}, -{"/purples4/3",173,58,200,158,154,200,255}, -{"/purples4/4",182,128,163,106,81,163,255}, -{"/purples5/1",182,7,247,242,240,247,255}, -{"/purples5/2",173,28,226,203,201,226,255}, -{"/purples5/3",173,58,200,158,154,200,255}, -{"/purples5/4",176,100,177,117,107,177,255}, -{"/purples5/5",188,185,143,84,39,143,255}, -{"/purples6/1",182,7,247,242,240,247,255}, -{"/purples6/2",170,18,235,218,218,235,255}, -{"/purples6/3",168,37,220,188,189,220,255}, -{"/purples6/4",173,58,200,158,154,200,255}, -{"/purples6/5",176,100,177,117,107,177,255}, -{"/purples6/6",188,185,143,84,39,143,255}, -{"/purples7/1",182,7,247,242,240,247,255}, -{"/purples7/2",170,18,235,218,218,235,255}, -{"/purples7/3",168,37,220,188,189,220,255}, -{"/purples7/4",173,58,200,158,154,200,255}, -{"/purples7/5",172,83,186,128,125,186,255}, -{"/purples7/6",182,128,163,106,81,163,255}, -{"/purples7/7",190,216,134,74,20,134,255}, -{"/purples8/1",191,2,253,252,251,253,255}, -{"/purples8/2",180,8,245,239,237,245,255}, -{"/purples8/3",170,18,235,218,218,235,255}, -{"/purples8/4",168,37,220,188,189,220,255}, -{"/purples8/5",173,58,200,158,154,200,255}, -{"/purples8/6",172,83,186,128,125,186,255}, -{"/purples8/7",182,128,163,106,81,163,255}, -{"/purples8/8",190,216,134,74,20,134,255}, -{"/purples9/1",191,2,253,252,251,253,255}, -{"/purples9/2",180,8,245,239,237,245,255}, -{"/purples9/3",170,18,235,218,218,235,255}, -{"/purples9/4",168,37,220,188,189,220,255}, -{"/purples9/5",173,58,200,158,154,200,255}, -{"/purples9/6",172,83,186,128,125,186,255}, -{"/purples9/7",182,128,163,106,81,163,255}, -{"/purples9/8",188,185,143,84,39,143,255}, -{"/purples9/9",191,255,125,63,0,125,255}, -{"/rdbu10/1",242,255,103,103,0,31,255}, -{"/rdbu10/10",150,241,97,5,48,97,255}, -{"/rdbu10/2",249,220,178,178,24,43,255}, -{"/rdbu10/3",5,163,214,214,96,77,255}, -{"/rdbu10/4",13,119,244,244,165,130,255}, -{"/rdbu10/5",15,54,253,253,219,199,255}, -{"/rdbu10/6",142,32,240,209,229,240,255}, -{"/rdbu10/7",141,87,222,146,197,222,255}, -{"/rdbu10/8",143,167,195,67,147,195,255}, -{"/rdbu10/9",148,206,172,33,102,172,255}, -{"/rdbu11/1",242,255,103,103,0,31,255}, -{"/rdbu11/10",148,206,172,33,102,172,255}, -{"/rdbu11/11",150,241,97,5,48,97,255}, -{"/rdbu11/2",249,220,178,178,24,43,255}, -{"/rdbu11/3",5,163,214,214,96,77,255}, -{"/rdbu11/4",13,119,244,244,165,130,255}, -{"/rdbu11/5",15,54,253,253,219,199,255}, -{"/rdbu11/6",0,0,247,247,247,247,255}, -{"/rdbu11/7",142,32,240,209,229,240,255}, -{"/rdbu11/8",141,87,222,146,197,222,255}, -{"/rdbu11/9",143,167,195,67,147,195,255}, -{"/rdbu3/1",12,150,239,239,138,98,255}, -{"/rdbu3/2",0,0,247,247,247,247,255}, -{"/rdbu3/3",143,128,207,103,169,207,255}, -{"/rdbu4/1",248,255,202,202,0,32,255}, -{"/rdbu4/2",13,119,244,244,165,130,255}, -{"/rdbu4/3",141,87,222,146,197,222,255}, -{"/rdbu4/4",143,247,176,5,113,176,255}, -{"/rdbu5/1",248,255,202,202,0,32,255}, -{"/rdbu5/2",13,119,244,244,165,130,255}, -{"/rdbu5/3",0,0,247,247,247,247,255}, -{"/rdbu5/4",141,87,222,146,197,222,255}, -{"/rdbu5/5",143,247,176,5,113,176,255}, -{"/rdbu6/1",249,220,178,178,24,43,255}, -{"/rdbu6/2",12,150,239,239,138,98,255}, -{"/rdbu6/3",15,54,253,253,219,199,255}, -{"/rdbu6/4",142,32,240,209,229,240,255}, -{"/rdbu6/5",143,128,207,103,169,207,255}, -{"/rdbu6/6",148,206,172,33,102,172,255}, -{"/rdbu7/1",249,220,178,178,24,43,255}, -{"/rdbu7/2",12,150,239,239,138,98,255}, -{"/rdbu7/3",15,54,253,253,219,199,255}, -{"/rdbu7/4",0,0,247,247,247,247,255}, -{"/rdbu7/5",142,32,240,209,229,240,255}, -{"/rdbu7/6",143,128,207,103,169,207,255}, -{"/rdbu7/7",148,206,172,33,102,172,255}, -{"/rdbu8/1",249,220,178,178,24,43,255}, -{"/rdbu8/2",5,163,214,214,96,77,255}, -{"/rdbu8/3",13,119,244,244,165,130,255}, -{"/rdbu8/4",15,54,253,253,219,199,255}, -{"/rdbu8/5",142,32,240,209,229,240,255}, -{"/rdbu8/6",141,87,222,146,197,222,255}, -{"/rdbu8/7",143,167,195,67,147,195,255}, -{"/rdbu8/8",148,206,172,33,102,172,255}, -{"/rdbu9/1",249,220,178,178,24,43,255}, -{"/rdbu9/2",5,163,214,214,96,77,255}, -{"/rdbu9/3",13,119,244,244,165,130,255}, -{"/rdbu9/4",15,54,253,253,219,199,255}, -{"/rdbu9/5",0,0,247,247,247,247,255}, -{"/rdbu9/6",142,32,240,209,229,240,255}, -{"/rdbu9/7",141,87,222,146,197,222,255}, -{"/rdbu9/8",143,167,195,67,147,195,255}, -{"/rdbu9/9",148,206,172,33,102,172,255}, -{"/rdgy10/1",242,255,103,103,0,31,255}, -{"/rdgy10/10",0,0,26,26,26,26,255}, -{"/rdgy10/2",249,220,178,178,24,43,255}, -{"/rdgy10/3",5,163,214,214,96,77,255}, -{"/rdgy10/4",13,119,244,244,165,130,255}, -{"/rdgy10/5",15,54,253,253,219,199,255}, -{"/rdgy10/6",0,0,224,224,224,224,255}, -{"/rdgy10/7",0,0,186,186,186,186,255}, -{"/rdgy10/8",0,0,135,135,135,135,255}, -{"/rdgy10/9",0,0,77,77,77,77,255}, -{"/rdgy11/1",242,255,103,103,0,31,255}, -{"/rdgy11/10",0,0,77,77,77,77,255}, -{"/rdgy11/11",0,0,26,26,26,26,255}, -{"/rdgy11/2",249,220,178,178,24,43,255}, -{"/rdgy11/3",5,163,214,214,96,77,255}, -{"/rdgy11/4",13,119,244,244,165,130,255}, -{"/rdgy11/5",15,54,253,253,219,199,255}, -{"/rdgy11/6",0,0,255,255,255,255,255}, -{"/rdgy11/7",0,0,224,224,224,224,255}, -{"/rdgy11/8",0,0,186,186,186,186,255}, -{"/rdgy11/9",0,0,135,135,135,135,255}, -{"/rdgy3/1",12,150,239,239,138,98,255}, -{"/rdgy3/2",0,0,255,255,255,255,255}, -{"/rdgy3/3",0,0,153,153,153,153,255}, -{"/rdgy4/1",248,255,202,202,0,32,255}, -{"/rdgy4/2",13,119,244,244,165,130,255}, -{"/rdgy4/3",0,0,186,186,186,186,255}, -{"/rdgy4/4",0,0,64,64,64,64,255}, -{"/rdgy5/1",248,255,202,202,0,32,255}, -{"/rdgy5/2",13,119,244,244,165,130,255}, -{"/rdgy5/3",0,0,255,255,255,255,255}, -{"/rdgy5/4",0,0,186,186,186,186,255}, -{"/rdgy5/5",0,0,64,64,64,64,255}, -{"/rdgy6/1",249,220,178,178,24,43,255}, -{"/rdgy6/2",12,150,239,239,138,98,255}, -{"/rdgy6/3",15,54,253,253,219,199,255}, -{"/rdgy6/4",0,0,224,224,224,224,255}, -{"/rdgy6/5",0,0,153,153,153,153,255}, -{"/rdgy6/6",0,0,77,77,77,77,255}, -{"/rdgy7/1",249,220,178,178,24,43,255}, -{"/rdgy7/2",12,150,239,239,138,98,255}, -{"/rdgy7/3",15,54,253,253,219,199,255}, -{"/rdgy7/4",0,0,255,255,255,255,255}, -{"/rdgy7/5",0,0,224,224,224,224,255}, -{"/rdgy7/6",0,0,153,153,153,153,255}, -{"/rdgy7/7",0,0,77,77,77,77,255}, -{"/rdgy8/1",249,220,178,178,24,43,255}, -{"/rdgy8/2",5,163,214,214,96,77,255}, -{"/rdgy8/3",13,119,244,244,165,130,255}, -{"/rdgy8/4",15,54,253,253,219,199,255}, -{"/rdgy8/5",0,0,224,224,224,224,255}, -{"/rdgy8/6",0,0,186,186,186,186,255}, -{"/rdgy8/7",0,0,135,135,135,135,255}, -{"/rdgy8/8",0,0,77,77,77,77,255}, -{"/rdgy9/1",249,220,178,178,24,43,255}, -{"/rdgy9/2",5,163,214,214,96,77,255}, -{"/rdgy9/3",13,119,244,244,165,130,255}, -{"/rdgy9/4",15,54,253,253,219,199,255}, -{"/rdgy9/5",0,0,255,255,255,255,255}, -{"/rdgy9/6",0,0,224,224,224,224,255}, -{"/rdgy9/7",0,0,186,186,186,186,255}, -{"/rdgy9/8",0,0,135,135,135,135,255}, -{"/rdgy9/9",0,0,77,77,77,77,255}, -{"/rdpu3/1",3,32,253,253,224,221,255}, -{"/rdpu3/2",244,92,250,250,159,181,255}, -{"/rdpu3/3",227,220,197,197,27,138,255}, -{"/rdpu4/1",13,28,254,254,235,226,255}, -{"/rdpu4/2",252,72,251,251,180,185,255}, -{"/rdpu4/3",238,147,247,247,104,161,255}, -{"/rdpu4/4",224,253,174,174,1,126,255}, -{"/rdpu5/1",13,28,254,254,235,226,255}, -{"/rdpu5/2",252,72,251,251,180,185,255}, -{"/rdpu5/3",238,147,247,247,104,161,255}, -{"/rdpu5/4",227,220,197,197,27,138,255}, -{"/rdpu5/5",213,252,122,122,1,119,255}, -{"/rdpu6/1",13,28,254,254,235,226,255}, -{"/rdpu6/2",3,60,252,252,197,192,255}, -{"/rdpu6/3",244,92,250,250,159,181,255}, -{"/rdpu6/4",238,147,247,247,104,161,255}, -{"/rdpu6/5",227,220,197,197,27,138,255}, -{"/rdpu6/6",213,252,122,122,1,119,255}, -{"/rdpu7/1",13,28,254,254,235,226,255}, -{"/rdpu7/2",3,60,252,252,197,192,255}, -{"/rdpu7/3",244,92,250,250,159,181,255}, -{"/rdpu7/4",238,147,247,247,104,161,255}, -{"/rdpu7/5",230,195,221,221,52,151,255}, -{"/rdpu7/6",224,253,174,174,1,126,255}, -{"/rdpu7/7",213,252,122,122,1,119,255}, -{"/rdpu8/1",14,12,255,255,247,243,255}, -{"/rdpu8/2",3,32,253,253,224,221,255}, -{"/rdpu8/3",3,60,252,252,197,192,255}, -{"/rdpu8/4",244,92,250,250,159,181,255}, -{"/rdpu8/5",238,147,247,247,104,161,255}, -{"/rdpu8/6",230,195,221,221,52,151,255}, -{"/rdpu8/7",224,253,174,174,1,126,255}, -{"/rdpu8/8",213,252,122,122,1,119,255}, -{"/rdpu9/1",14,12,255,255,247,243,255}, -{"/rdpu9/2",3,32,253,253,224,221,255}, -{"/rdpu9/3",3,60,252,252,197,192,255}, -{"/rdpu9/4",244,92,250,250,159,181,255}, -{"/rdpu9/5",238,147,247,247,104,161,255}, -{"/rdpu9/6",230,195,221,221,52,151,255}, -{"/rdpu9/7",224,253,174,174,1,126,255}, -{"/rdpu9/8",213,252,122,122,1,119,255}, -{"/rdpu9/9",199,255,106,73,0,106,255}, -{"/rdylbu10/1",245,255,165,165,0,38,255}, -{"/rdylbu10/10",167,171,149,49,54,149,255}, -{"/rdylbu10/2",2,208,215,215,48,39,255}, -{"/rdylbu10/3",10,184,244,244,109,67,255}, -{"/rdylbu10/4",20,157,253,253,174,97,255}, -{"/rdylbu10/5",30,110,254,254,224,144,255}, -{"/rdylbu10/6",136,24,248,224,243,248,255}, -{"/rdylbu10/7",138,67,233,171,217,233,255}, -{"/rdylbu10/8",143,113,209,116,173,209,255}, -{"/rdylbu10/9",151,157,180,69,117,180,255}, -{"/rdylbu11/1",245,255,165,165,0,38,255}, -{"/rdylbu11/10",151,157,180,69,117,180,255}, -{"/rdylbu11/11",167,171,149,49,54,149,255}, -{"/rdylbu11/2",2,208,215,215,48,39,255}, -{"/rdylbu11/3",10,184,244,244,109,67,255}, -{"/rdylbu11/4",20,157,253,253,174,97,255}, -{"/rdylbu11/5",30,110,254,254,224,144,255}, -{"/rdylbu11/6",42,64,255,255,255,191,255}, -{"/rdylbu11/7",136,24,248,224,243,248,255}, -{"/rdylbu11/8",138,67,233,171,217,233,255}, -{"/rdylbu11/9",143,113,209,116,173,209,255}, -{"/rdylbu3/1",13,164,252,252,141,89,255}, -{"/rdylbu3/2",42,64,255,255,255,191,255}, -{"/rdylbu3/3",143,86,219,145,191,219,255}, -{"/rdylbu4/1",254,225,215,215,25,28,255}, -{"/rdylbu4/2",20,157,253,253,174,97,255}, -{"/rdylbu4/3",138,67,233,171,217,233,255}, -{"/rdylbu4/4",145,193,182,44,123,182,255}, -{"/rdylbu5/1",254,225,215,215,25,28,255}, -{"/rdylbu5/2",20,157,253,253,174,97,255}, -{"/rdylbu5/3",42,64,255,255,255,191,255}, -{"/rdylbu5/4",138,67,233,171,217,233,255}, -{"/rdylbu5/5",145,193,182,44,123,182,255}, -{"/rdylbu6/1",2,208,215,215,48,39,255}, -{"/rdylbu6/2",13,164,252,252,141,89,255}, -{"/rdylbu6/3",30,110,254,254,224,144,255}, -{"/rdylbu6/4",136,24,248,224,243,248,255}, -{"/rdylbu6/5",143,86,219,145,191,219,255}, -{"/rdylbu6/6",151,157,180,69,117,180,255}, -{"/rdylbu7/1",2,208,215,215,48,39,255}, -{"/rdylbu7/2",13,164,252,252,141,89,255}, -{"/rdylbu7/3",30,110,254,254,224,144,255}, -{"/rdylbu7/4",42,64,255,255,255,191,255}, -{"/rdylbu7/5",136,24,248,224,243,248,255}, -{"/rdylbu7/6",143,86,219,145,191,219,255}, -{"/rdylbu7/7",151,157,180,69,117,180,255}, -{"/rdylbu8/1",2,208,215,215,48,39,255}, -{"/rdylbu8/2",10,184,244,244,109,67,255}, -{"/rdylbu8/3",20,157,253,253,174,97,255}, -{"/rdylbu8/4",30,110,254,254,224,144,255}, -{"/rdylbu8/5",136,24,248,224,243,248,255}, -{"/rdylbu8/6",138,67,233,171,217,233,255}, -{"/rdylbu8/7",143,113,209,116,173,209,255}, -{"/rdylbu8/8",151,157,180,69,117,180,255}, -{"/rdylbu9/1",2,208,215,215,48,39,255}, -{"/rdylbu9/2",10,184,244,244,109,67,255}, -{"/rdylbu9/3",20,157,253,253,174,97,255}, -{"/rdylbu9/4",30,110,254,254,224,144,255}, -{"/rdylbu9/5",42,64,255,255,255,191,255}, -{"/rdylbu9/6",136,24,248,224,243,248,255}, -{"/rdylbu9/7",138,67,233,171,217,233,255}, -{"/rdylbu9/8",143,113,209,116,173,209,255}, -{"/rdylbu9/9",151,157,180,69,117,180,255}, -{"/rdylgn10/1",245,255,165,165,0,38,255}, -{"/rdylgn10/10",107,255,104,0,104,55,255}, -{"/rdylgn10/2",2,208,215,215,48,39,255}, -{"/rdylgn10/3",10,184,244,244,109,67,255}, -{"/rdylgn10/4",20,157,253,253,174,97,255}, -{"/rdylgn10/5",31,115,254,254,224,139,255}, -{"/rdylgn10/6",51,106,239,217,239,139,255}, -{"/rdylgn10/7",62,130,217,166,217,106,255}, -{"/rdylgn10/8",83,121,189,102,189,99,255}, -{"/rdylgn10/9",103,211,152,26,152,80,255}, -{"/rdylgn11/1",245,255,165,165,0,38,255}, -{"/rdylgn11/10",103,211,152,26,152,80,255}, -{"/rdylgn11/11",107,255,104,0,104,55,255}, -{"/rdylgn11/2",2,208,215,215,48,39,255}, -{"/rdylgn11/3",10,184,244,244,109,67,255}, -{"/rdylgn11/4",20,157,253,253,174,97,255}, -{"/rdylgn11/5",31,115,254,254,224,139,255}, -{"/rdylgn11/6",42,64,255,255,255,191,255}, -{"/rdylgn11/7",51,106,239,217,239,139,255}, -{"/rdylgn11/8",62,130,217,166,217,106,255}, -{"/rdylgn11/9",83,121,189,102,189,99,255}, -{"/rdylgn3/1",13,164,252,252,141,89,255}, -{"/rdylgn3/2",42,64,255,255,255,191,255}, -{"/rdylgn3/3",66,136,207,145,207,96,255}, -{"/rdylgn4/1",254,225,215,215,25,28,255}, -{"/rdylgn4/2",20,157,253,253,174,97,255}, -{"/rdylgn4/3",62,130,217,166,217,106,255}, -{"/rdylgn4/4",98,210,150,26,150,65,255}, -{"/rdylgn5/1",254,225,215,215,25,28,255}, -{"/rdylgn5/2",20,157,253,253,174,97,255}, -{"/rdylgn5/3",42,64,255,255,255,191,255}, -{"/rdylgn5/4",62,130,217,166,217,106,255}, -{"/rdylgn5/5",98,210,150,26,150,65,255}, -{"/rdylgn6/1",2,208,215,215,48,39,255}, -{"/rdylgn6/2",13,164,252,252,141,89,255}, -{"/rdylgn6/3",31,115,254,254,224,139,255}, -{"/rdylgn6/4",51,106,239,217,239,139,255}, -{"/rdylgn6/5",66,136,207,145,207,96,255}, -{"/rdylgn6/6",103,211,152,26,152,80,255}, -{"/rdylgn7/1",2,208,215,215,48,39,255}, -{"/rdylgn7/2",13,164,252,252,141,89,255}, -{"/rdylgn7/3",31,115,254,254,224,139,255}, -{"/rdylgn7/4",42,64,255,255,255,191,255}, -{"/rdylgn7/5",51,106,239,217,239,139,255}, -{"/rdylgn7/6",66,136,207,145,207,96,255}, -{"/rdylgn7/7",103,211,152,26,152,80,255}, -{"/rdylgn8/1",2,208,215,215,48,39,255}, -{"/rdylgn8/2",10,184,244,244,109,67,255}, -{"/rdylgn8/3",20,157,253,253,174,97,255}, -{"/rdylgn8/4",31,115,254,254,224,139,255}, -{"/rdylgn8/5",51,106,239,217,239,139,255}, -{"/rdylgn8/6",62,130,217,166,217,106,255}, -{"/rdylgn8/7",83,121,189,102,189,99,255}, -{"/rdylgn8/8",103,211,152,26,152,80,255}, -{"/rdylgn9/1",2,208,215,215,48,39,255}, -{"/rdylgn9/2",10,184,244,244,109,67,255}, -{"/rdylgn9/3",20,157,253,253,174,97,255}, -{"/rdylgn9/4",31,115,254,254,224,139,255}, -{"/rdylgn9/5",42,64,255,255,255,191,255}, -{"/rdylgn9/6",51,106,239,217,239,139,255}, -{"/rdylgn9/7",62,130,217,166,217,106,255}, -{"/rdylgn9/8",83,121,189,102,189,99,255}, -{"/rdylgn9/9",103,211,152,26,152,80,255}, -{"/reds3/1",13,44,254,254,224,210,255}, -{"/reds3/2",9,139,252,252,146,114,255}, -{"/reds3/3",1,211,222,222,45,38,255}, -{"/reds4/1",13,37,254,254,229,217,255}, -{"/reds4/2",11,108,252,252,174,145,255}, -{"/reds4/3",7,179,251,251,106,74,255}, -{"/reds4/4",253,224,203,203,24,29,255}, -{"/reds5/1",13,37,254,254,229,217,255}, -{"/reds5/2",11,108,252,252,174,145,255}, -{"/reds5/3",7,179,251,251,106,74,255}, -{"/reds5/4",1,211,222,222,45,38,255}, -{"/reds5/5",253,231,165,165,15,21,255}, -{"/reds6/1",13,37,254,254,229,217,255}, -{"/reds6/2",12,92,252,252,187,161,255}, -{"/reds6/3",9,139,252,252,146,114,255}, -{"/reds6/4",7,179,251,251,106,74,255}, -{"/reds6/5",1,211,222,222,45,38,255}, -{"/reds6/6",253,231,165,165,15,21,255}, -{"/reds7/1",13,37,254,254,229,217,255}, -{"/reds7/2",12,92,252,252,187,161,255}, -{"/reds7/3",9,139,252,252,146,114,255}, -{"/reds7/4",7,179,251,251,106,74,255}, -{"/reds7/5",3,208,239,239,59,44,255}, -{"/reds7/6",253,224,203,203,24,29,255}, -{"/reds7/7",251,255,153,153,0,13,255}, -{"/reds8/1",14,15,255,255,245,240,255}, -{"/reds8/2",13,44,254,254,224,210,255}, -{"/reds8/3",12,92,252,252,187,161,255}, -{"/reds8/4",9,139,252,252,146,114,255}, -{"/reds8/5",7,179,251,251,106,74,255}, -{"/reds8/6",3,208,239,239,59,44,255}, -{"/reds8/7",253,224,203,203,24,29,255}, -{"/reds8/8",251,255,153,153,0,13,255}, -{"/reds9/1",14,15,255,255,245,240,255}, -{"/reds9/2",13,44,254,254,224,210,255}, -{"/reds9/3",12,92,252,252,187,161,255}, -{"/reds9/4",9,139,252,252,146,114,255}, -{"/reds9/5",7,179,251,251,106,74,255}, -{"/reds9/6",3,208,239,239,59,44,255}, -{"/reds9/7",253,224,203,203,24,29,255}, -{"/reds9/8",253,231,165,165,15,21,255}, -{"/reds9/9",249,255,103,103,0,13,255}, -{"/set13/1",254,225,228,228,26,28,255}, -{"/set13/2",146,178,184,55,126,184,255}, -{"/set13/3",83,147,175,77,175,74,255}, -{"/set14/1",254,225,228,228,26,28,255}, -{"/set14/2",146,178,184,55,126,184,255}, -{"/set14/3",83,147,175,77,175,74,255}, -{"/set14/4",207,132,163,152,78,163,255}, -{"/set15/1",254,225,228,228,26,28,255}, -{"/set15/2",146,178,184,55,126,184,255}, -{"/set15/3",83,147,175,77,175,74,255}, -{"/set15/4",207,132,163,152,78,163,255}, -{"/set15/5",21,255,255,255,127,0,255}, -{"/set16/1",254,225,228,228,26,28,255}, -{"/set16/2",146,178,184,55,126,184,255}, -{"/set16/3",83,147,175,77,175,74,255}, -{"/set16/4",207,132,163,152,78,163,255}, -{"/set16/5",21,255,255,255,127,0,255}, -{"/set16/6",42,204,255,255,255,51,255}, -{"/set17/1",254,225,228,228,26,28,255}, -{"/set17/2",146,178,184,55,126,184,255}, -{"/set17/3",83,147,175,77,175,74,255}, -{"/set17/4",207,132,163,152,78,163,255}, -{"/set17/5",21,255,255,255,127,0,255}, -{"/set17/6",42,204,255,255,255,51,255}, -{"/set17/7",15,193,166,166,86,40,255}, -{"/set18/1",254,225,228,228,26,28,255}, -{"/set18/2",146,178,184,55,126,184,255}, -{"/set18/3",83,147,175,77,175,74,255}, -{"/set18/4",207,132,163,152,78,163,255}, -{"/set18/5",21,255,255,255,127,0,255}, -{"/set18/6",42,204,255,255,255,51,255}, -{"/set18/7",15,193,166,166,86,40,255}, -{"/set18/8",232,121,247,247,129,191,255}, -{"/set19/1",254,225,228,228,26,28,255}, -{"/set19/2",146,178,184,55,126,184,255}, -{"/set19/3",83,147,175,77,175,74,255}, -{"/set19/4",207,132,163,152,78,163,255}, -{"/set19/5",21,255,255,255,127,0,255}, -{"/set19/6",42,204,255,255,255,51,255}, -{"/set19/7",15,193,166,166,86,40,255}, -{"/set19/8",232,121,247,247,129,191,255}, -{"/set19/9",0,0,153,153,153,153,255}, -{"/set23/1",114,120,194,102,194,165,255}, -{"/set23/2",11,155,252,252,141,98,255}, -{"/set23/3",156,77,203,141,160,203,255}, -{"/set24/1",114,120,194,102,194,165,255}, -{"/set24/2",11,155,252,252,141,98,255}, -{"/set24/3",156,77,203,141,160,203,255}, -{"/set24/4",228,102,231,231,138,195,255}, -{"/set25/1",114,120,194,102,194,165,255}, -{"/set25/2",11,155,252,252,141,98,255}, -{"/set25/3",156,77,203,141,160,203,255}, -{"/set25/4",228,102,231,231,138,195,255}, -{"/set25/5",58,155,216,166,216,84,255}, -{"/set26/1",114,120,194,102,194,165,255}, -{"/set26/2",11,155,252,252,141,98,255}, -{"/set26/3",156,77,203,141,160,203,255}, -{"/set26/4",228,102,231,231,138,195,255}, -{"/set26/5",58,155,216,166,216,84,255}, -{"/set26/6",34,208,255,255,217,47,255}, -{"/set27/1",114,120,194,102,194,165,255}, -{"/set27/2",11,155,252,252,141,98,255}, -{"/set27/3",156,77,203,141,160,203,255}, -{"/set27/4",228,102,231,231,138,195,255}, -{"/set27/5",58,155,216,166,216,84,255}, -{"/set27/6",34,208,255,255,217,47,255}, -{"/set27/7",25,90,229,229,196,148,255}, -{"/set28/1",114,120,194,102,194,165,255}, -{"/set28/2",11,155,252,252,141,98,255}, -{"/set28/3",156,77,203,141,160,203,255}, -{"/set28/4",228,102,231,231,138,195,255}, -{"/set28/5",58,155,216,166,216,84,255}, -{"/set28/6",34,208,255,255,217,47,255}, -{"/set28/7",25,90,229,229,196,148,255}, -{"/set28/8",0,0,179,179,179,179,255}, -{"/set310/1",120,84,211,141,211,199,255}, -{"/set310/10",211,82,189,188,128,189,255}, -{"/set310/2",42,76,255,255,255,179,255}, -{"/set310/3",175,37,218,190,186,218,255}, -{"/set310/4",4,139,251,251,128,114,255}, -{"/set310/5",144,100,211,128,177,211,255}, -{"/set310/6",22,156,253,253,180,98,255}, -{"/set310/7",58,134,222,179,222,105,255}, -{"/set310/8",233,47,252,252,205,229,255}, -{"/set310/9",0,0,217,217,217,217,255}, -{"/set311/1",120,84,211,141,211,199,255}, -{"/set311/10",211,82,189,188,128,189,255}, -{"/set311/11",77,41,235,204,235,197,255}, -{"/set311/2",42,76,255,255,255,179,255}, -{"/set311/3",175,37,218,190,186,218,255}, -{"/set311/4",4,139,251,251,128,114,255}, -{"/set311/5",144,100,211,128,177,211,255}, -{"/set311/6",22,156,253,253,180,98,255}, -{"/set311/7",58,134,222,179,222,105,255}, -{"/set311/8",233,47,252,252,205,229,255}, -{"/set311/9",0,0,217,217,217,217,255}, -{"/set312/1",120,84,211,141,211,199,255}, -{"/set312/10",211,82,189,188,128,189,255}, -{"/set312/11",77,41,235,204,235,197,255}, -{"/set312/12",37,144,255,255,237,111,255}, -{"/set312/2",42,76,255,255,255,179,255}, -{"/set312/3",175,37,218,190,186,218,255}, -{"/set312/4",4,139,251,251,128,114,255}, -{"/set312/5",144,100,211,128,177,211,255}, -{"/set312/6",22,156,253,253,180,98,255}, -{"/set312/7",58,134,222,179,222,105,255}, -{"/set312/8",233,47,252,252,205,229,255}, -{"/set312/9",0,0,217,217,217,217,255}, -{"/set33/1",120,84,211,141,211,199,255}, -{"/set33/2",42,76,255,255,255,179,255}, -{"/set33/3",175,37,218,190,186,218,255}, -{"/set34/1",120,84,211,141,211,199,255}, -{"/set34/2",42,76,255,255,255,179,255}, -{"/set34/3",175,37,218,190,186,218,255}, -{"/set34/4",4,139,251,251,128,114,255}, -{"/set35/1",120,84,211,141,211,199,255}, -{"/set35/2",42,76,255,255,255,179,255}, -{"/set35/3",175,37,218,190,186,218,255}, -{"/set35/4",4,139,251,251,128,114,255}, -{"/set35/5",144,100,211,128,177,211,255}, -{"/set36/1",120,84,211,141,211,199,255}, -{"/set36/2",42,76,255,255,255,179,255}, -{"/set36/3",175,37,218,190,186,218,255}, -{"/set36/4",4,139,251,251,128,114,255}, -{"/set36/5",144,100,211,128,177,211,255}, -{"/set36/6",22,156,253,253,180,98,255}, -{"/set37/1",120,84,211,141,211,199,255}, -{"/set37/2",42,76,255,255,255,179,255}, -{"/set37/3",175,37,218,190,186,218,255}, -{"/set37/4",4,139,251,251,128,114,255}, -{"/set37/5",144,100,211,128,177,211,255}, -{"/set37/6",22,156,253,253,180,98,255}, -{"/set37/7",58,134,222,179,222,105,255}, -{"/set38/1",120,84,211,141,211,199,255}, -{"/set38/2",42,76,255,255,255,179,255}, -{"/set38/3",175,37,218,190,186,218,255}, -{"/set38/4",4,139,251,251,128,114,255}, -{"/set38/5",144,100,211,128,177,211,255}, -{"/set38/6",22,156,253,253,180,98,255}, -{"/set38/7",58,134,222,179,222,105,255}, -{"/set38/8",233,47,252,252,205,229,255}, -{"/set39/1",120,84,211,141,211,199,255}, -{"/set39/2",42,76,255,255,255,179,255}, -{"/set39/3",175,37,218,190,186,218,255}, -{"/set39/4",4,139,251,251,128,114,255}, -{"/set39/5",144,100,211,128,177,211,255}, -{"/set39/6",22,156,253,253,180,98,255}, -{"/set39/7",58,134,222,179,222,105,255}, -{"/set39/8",233,47,252,252,205,229,255}, -{"/set39/9",0,0,217,217,217,217,255}, -{"/spectral10/1",237,253,158,158,1,66,255}, -{"/spectral10/10",177,130,162,94,79,162,255}, -{"/spectral10/2",250,180,213,213,62,79,255}, -{"/spectral10/3",10,184,244,244,109,67,255}, -{"/spectral10/4",20,157,253,253,174,97,255}, -{"/spectral10/5",31,115,254,254,224,139,255}, -{"/spectral10/6",49,96,245,230,245,152,255}, -{"/spectral10/7",79,65,221,171,221,164,255}, -{"/spectral10/8",114,120,194,102,194,165,255}, -{"/spectral10/9",143,187,189,50,136,189,255}, -{"/spectral11/1",237,253,158,158,1,66,255}, -{"/spectral11/10",143,187,189,50,136,189,255}, -{"/spectral11/11",177,130,162,94,79,162,255}, -{"/spectral11/2",250,180,213,213,62,79,255}, -{"/spectral11/3",10,184,244,244,109,67,255}, -{"/spectral11/4",20,157,253,253,174,97,255}, -{"/spectral11/5",31,115,254,254,224,139,255}, -{"/spectral11/6",42,64,255,255,255,191,255}, -{"/spectral11/7",49,96,245,230,245,152,255}, -{"/spectral11/8",79,65,221,171,221,164,255}, -{"/spectral11/9",114,120,194,102,194,165,255}, -{"/spectral3/1",13,164,252,252,141,89,255}, -{"/spectral3/2",42,64,255,255,255,191,255}, -{"/spectral3/3",81,77,213,153,213,148,255}, -{"/spectral4/1",254,225,215,215,25,28,255}, -{"/spectral4/2",20,157,253,253,174,97,255}, -{"/spectral4/3",79,65,221,171,221,164,255}, -{"/spectral4/4",143,196,186,43,131,186,255}, -{"/spectral5/1",254,225,215,215,25,28,255}, -{"/spectral5/2",20,157,253,253,174,97,255}, -{"/spectral5/3",42,64,255,255,255,191,255}, -{"/spectral5/4",79,65,221,171,221,164,255}, -{"/spectral5/5",143,196,186,43,131,186,255}, -{"/spectral6/1",250,180,213,213,62,79,255}, -{"/spectral6/2",13,164,252,252,141,89,255}, -{"/spectral6/3",31,115,254,254,224,139,255}, -{"/spectral6/4",49,96,245,230,245,152,255}, -{"/spectral6/5",81,77,213,153,213,148,255}, -{"/spectral6/6",143,187,189,50,136,189,255}, -{"/spectral7/1",250,180,213,213,62,79,255}, -{"/spectral7/2",13,164,252,252,141,89,255}, -{"/spectral7/3",31,115,254,254,224,139,255}, -{"/spectral7/4",42,64,255,255,255,191,255}, -{"/spectral7/5",49,96,245,230,245,152,255}, -{"/spectral7/6",81,77,213,153,213,148,255}, -{"/spectral7/7",143,187,189,50,136,189,255}, -{"/spectral8/1",250,180,213,213,62,79,255}, -{"/spectral8/2",10,184,244,244,109,67,255}, -{"/spectral8/3",20,157,253,253,174,97,255}, -{"/spectral8/4",31,115,254,254,224,139,255}, -{"/spectral8/5",49,96,245,230,245,152,255}, -{"/spectral8/6",79,65,221,171,221,164,255}, -{"/spectral8/7",114,120,194,102,194,165,255}, -{"/spectral8/8",143,187,189,50,136,189,255}, -{"/spectral9/1",250,180,213,213,62,79,255}, -{"/spectral9/2",10,184,244,244,109,67,255}, -{"/spectral9/3",20,157,253,253,174,97,255}, -{"/spectral9/4",31,115,254,254,224,139,255}, -{"/spectral9/5",42,64,255,255,255,191,255}, -{"/spectral9/6",49,96,245,230,245,152,255}, -{"/spectral9/7",79,65,221,171,221,164,255}, -{"/spectral9/8",114,120,194,102,194,165,255}, -{"/spectral9/9",143,187,189,50,136,189,255}, -{"/svg/aliceblue",147,15,255,240,248,255,255}, -{"/svg/antiquewhite",24,35,250,250,235,215,255}, -{"/svg/aqua",127,255,255,0,255,255,255}, -{"/svg/aquamarine",113,128,255,127,255,212,255}, -{"/svg/azure",127,15,255,240,255,255,255}, -{"/svg/beige",42,26,245,245,245,220,255}, -{"/svg/bisque",23,58,255,255,228,196,255}, -{"/svg/black",0,0,0,0,0,0,255}, -{"/svg/blanchedalmond",25,49,255,255,235,205,255}, -{"/svg/blue",170,255,255,0,0,255,255}, -{"/svg/blueviolet",192,206,226,138,43,226,255}, -{"/svg/brown",0,190,165,165,42,42,255}, -{"/svg/burlywood",23,99,222,222,184,135,255}, -{"/svg/cadetblue",128,103,160,95,158,160,255}, -{"/svg/chartreuse",63,255,255,127,255,0,255}, -{"/svg/chocolate",17,218,210,210,105,30,255}, -{"/svg/coral",11,175,255,255,127,80,255}, -{"/svg/cornflowerblue",154,147,237,100,149,237,255}, -{"/svg/cornsilk",33,34,255,255,248,220,255}, -{"/svg/crimson",246,231,220,220,20,60,255}, -{"/svg/cyan",127,255,255,0,255,255,255}, -{"/svg/darkblue",170,255,139,0,0,139,255}, -{"/svg/darkcyan",127,255,139,0,139,139,255}, -{"/svg/darkgoldenrod",30,239,184,184,134,11,255}, -{"/svg/darkgray",0,0,169,169,169,169,255}, -{"/svg/darkgreen",85,255,100,0,100,0,255}, -{"/svg/darkgrey",0,0,169,169,169,169,255}, -{"/svg/darkkhaki",39,110,189,189,183,107,255}, -{"/svg/darkmagenta",212,255,139,139,0,139,255}, -{"/svg/darkolivegreen",58,142,107,85,107,47,255}, -{"/svg/darkorange",23,255,255,255,140,0,255}, -{"/svg/darkorchid",198,192,204,153,50,204,255}, -{"/svg/darkred",0,255,139,139,0,0,255}, -{"/svg/darksalmon",10,121,233,233,150,122,255}, -{"/svg/darkseagreen",85,61,188,143,188,143,255}, -{"/svg/darkslateblue",175,143,139,72,61,139,255}, -{"/svg/darkslategray",127,103,79,47,79,79,255}, -{"/svg/darkslategrey",127,103,79,47,79,79,255}, -{"/svg/darkturquoise",128,255,209,0,206,209,255}, -{"/svg/darkviolet",199,255,211,148,0,211,255}, -{"/svg/deeppink",232,235,255,255,20,147,255}, -{"/svg/deepskyblue",138,255,255,0,191,255,255}, -{"/svg/dimgray",0,0,105,105,105,105,255}, -{"/svg/dimgrey",0,0,105,105,105,105,255}, -{"/svg/dodgerblue",148,225,255,30,144,255,255}, -{"/svg/firebrick",0,206,178,178,34,34,255}, -{"/svg/floralwhite",28,15,255,255,250,240,255}, -{"/svg/forestgreen",85,192,139,34,139,34,255}, -{"/svg/fuchsia",212,255,255,255,0,255,255}, -{"/svg/gainsboro",0,0,220,220,220,220,255}, -{"/svg/ghostwhite",170,7,255,248,248,255,255}, -{"/svg/gold",35,255,255,255,215,0,255}, -{"/svg/goldenrod",30,217,218,218,165,32,255}, -{"/svg/gray",0,0,128,128,128,128,255}, -{"/svg/green",85,255,128,0,128,0,255}, -{"/svg/greenyellow",59,208,255,173,255,47,255}, -{"/svg/grey",0,0,128,128,128,128,255}, -{"/svg/honeydew",85,15,255,240,255,240,255}, -{"/svg/hotpink",233,150,255,255,105,180,255}, -{"/svg/indianred",0,140,205,205,92,92,255}, -{"/svg/indigo",194,255,130,75,0,130,255}, -{"/svg/ivory",42,15,255,255,255,240,255}, -{"/svg/khaki",38,106,240,240,230,140,255}, -{"/svg/lavender",170,20,250,230,230,250,255}, -{"/svg/lavenderblush",240,15,255,255,240,245,255}, -{"/svg/lawngreen",64,255,252,124,252,0,255}, -{"/svg/lemonchiffon",38,49,255,255,250,205,255}, -{"/svg/lightblue",137,63,230,173,216,230,255}, -{"/svg/lightcoral",0,119,240,240,128,128,255}, -{"/svg/lightcyan",127,31,255,224,255,255,255}, -{"/svg/lightgoldenrodyellow",42,40,250,250,250,210,255}, -{"/svg/lightgray",0,0,211,211,211,211,255}, -{"/svg/lightgreen",85,100,238,144,238,144,255}, -{"/svg/lightgrey",0,0,211,211,211,211,255}, -{"/svg/lightpink",248,73,255,255,182,193,255}, -{"/svg/lightsalmon",12,132,255,255,160,122,255}, -{"/svg/lightseagreen",125,209,178,32,178,170,255}, -{"/svg/lightskyblue",143,117,250,135,206,250,255}, -{"/svg/lightslategray",148,56,153,119,136,153,255}, -{"/svg/lightslategrey",148,56,153,119,136,153,255}, -{"/svg/lightsteelblue",151,52,222,176,196,222,255}, -{"/svg/lightyellow",42,31,255,255,255,224,255}, -{"/svg/lime",85,255,255,0,255,0,255}, -{"/svg/limegreen",85,192,205,50,205,50,255}, -{"/svg/linen",21,20,250,250,240,230,255}, -{"/svg/magenta",212,255,255,255,0,255,255}, -{"/svg/maroon",0,255,128,128,0,0,255}, -{"/svg/mediumaquamarine",113,128,205,102,205,170,255}, -{"/svg/mediumblue",170,255,205,0,0,205,255}, -{"/svg/mediumorchid",204,152,211,186,85,211,255}, -{"/svg/mediumpurple",183,124,219,147,112,219,255}, -{"/svg/mediumseagreen",103,169,179,60,179,113,255}, -{"/svg/mediumslateblue",176,143,238,123,104,238,255}, -{"/svg/mediumspringgreen",111,255,250,0,250,154,255}, -{"/svg/mediumturquoise",125,167,209,72,209,204,255}, -{"/svg/mediumvioletred",228,228,199,199,21,133,255}, -{"/svg/midnightblue",170,198,112,25,25,112,255}, -{"/svg/mintcream",106,9,255,245,255,250,255}, -{"/svg/mistyrose",4,30,255,255,228,225,255}, -{"/svg/moccasin",26,73,255,255,228,181,255}, -{"/svg/navajowhite",25,81,255,255,222,173,255}, -{"/svg/navy",170,255,128,0,0,128,255}, -{"/svg/oldlace",27,23,253,253,245,230,255}, -{"/svg/olive",42,255,128,128,128,0,255}, -{"/svg/olivedrab",56,192,142,107,142,35,255}, -{"/svg/orange",27,255,255,255,165,0,255}, -{"/svg/orangered",11,255,255,255,69,0,255}, -{"/svg/orchid",214,123,218,218,112,214,255}, -{"/svg/palegoldenrod",38,72,238,238,232,170,255}, -{"/svg/palegreen",85,100,251,152,251,152,255}, -{"/svg/paleturquoise",127,67,238,175,238,238,255}, -{"/svg/palevioletred",241,124,219,219,112,147,255}, -{"/svg/papayawhip",26,41,255,255,239,213,255}, -{"/svg/peachpuff",20,70,255,255,218,185,255}, -{"/svg/peru",20,176,205,205,133,63,255}, -{"/svg/pink",247,63,255,255,192,203,255}, -{"/svg/plum",212,70,221,221,160,221,255}, -{"/svg/powderblue",132,59,230,176,224,230,255}, -{"/svg/purple",212,255,128,128,0,128,255}, -{"/svg/red",0,255,255,255,0,0,255}, -{"/svg/rosybrown",0,61,188,188,143,143,255}, -{"/svg/royalblue",159,181,225,65,105,225,255}, -{"/svg/saddlebrown",17,220,139,139,69,19,255}, -{"/svg/salmon",4,138,250,250,128,114,255}, -{"/svg/sandybrown",19,154,244,244,164,96,255}, -{"/svg/seagreen",103,170,139,46,139,87,255}, -{"/svg/seashell",17,16,255,255,245,238,255}, -{"/svg/sienna",13,183,160,160,82,45,255}, -{"/svg/silver",0,0,192,192,192,192,255}, -{"/svg/skyblue",139,108,235,135,206,235,255}, -{"/svg/slateblue",175,143,205,106,90,205,255}, -{"/svg/slategray",148,56,144,112,128,144,255}, -{"/svg/slategrey",148,56,144,112,128,144,255}, -{"/svg/snow",0,5,255,255,250,250,255}, -{"/svg/springgreen",106,255,255,0,255,127,255}, -{"/svg/steelblue",146,155,180,70,130,180,255}, -{"/svg/tan",24,84,210,210,180,140,255}, -{"/svg/teal",127,255,128,0,128,128,255}, -{"/svg/thistle",212,29,216,216,191,216,255}, -{"/svg/tomato",6,184,255,255,99,71,255}, -{"/svg/turquoise",123,182,224,64,224,208,255}, -{"/svg/violet",212,115,238,238,130,238,255}, -{"/svg/wheat",27,68,245,245,222,179,255}, -{"/svg/white",0,0,255,255,255,255,255}, -{"/svg/whitesmoke",0,0,245,245,245,245,255}, -{"/svg/yellow",42,255,255,255,255,0,255}, -{"/svg/yellowgreen",56,192,205,154,205,50,255}, -{"/ylgn3/1",45,67,252,247,252,185,255}, -{"/ylgn3/2",68,91,221,173,221,142,255}, -{"/ylgn3/3",98,178,163,49,163,84,255}, -{"/ylgn4/1",42,50,255,255,255,204,255}, -{"/ylgn4/2",62,85,230,194,230,153,255}, -{"/ylgn4/3",85,100,198,120,198,121,255}, -{"/ylgn4/4",99,187,132,35,132,67,255}, -{"/ylgn5/1",42,50,255,255,255,204,255}, -{"/ylgn5/2",62,85,230,194,230,153,255}, -{"/ylgn5/3",85,100,198,120,198,121,255}, -{"/ylgn5/4",98,178,163,49,163,84,255}, -{"/ylgn5/5",107,255,104,0,104,55,255}, -{"/ylgn6/1",42,50,255,255,255,204,255}, -{"/ylgn6/2",55,81,240,217,240,163,255}, -{"/ylgn6/3",68,91,221,173,221,142,255}, -{"/ylgn6/4",85,100,198,120,198,121,255}, -{"/ylgn6/5",98,178,163,49,163,84,255}, -{"/ylgn6/6",107,255,104,0,104,55,255}, -{"/ylgn7/1",42,50,255,255,255,204,255}, -{"/ylgn7/2",55,81,240,217,240,163,255}, -{"/ylgn7/3",68,91,221,173,221,142,255}, -{"/ylgn7/4",85,100,198,120,198,121,255}, -{"/ylgn7/5",96,158,171,65,171,93,255}, -{"/ylgn7/6",99,187,132,35,132,67,255}, -{"/ylgn7/7",108,255,90,0,90,50,255}, -{"/ylgn8/1",42,25,255,255,255,229,255}, -{"/ylgn8/2",45,67,252,247,252,185,255}, -{"/ylgn8/3",55,81,240,217,240,163,255}, -{"/ylgn8/4",68,91,221,173,221,142,255}, -{"/ylgn8/5",85,100,198,120,198,121,255}, -{"/ylgn8/6",96,158,171,65,171,93,255}, -{"/ylgn8/7",99,187,132,35,132,67,255}, -{"/ylgn8/8",108,255,90,0,90,50,255}, -{"/ylgn9/1",42,25,255,255,255,229,255}, -{"/ylgn9/2",45,67,252,247,252,185,255}, -{"/ylgn9/3",55,81,240,217,240,163,255}, -{"/ylgn9/4",68,91,221,173,221,142,255}, -{"/ylgn9/5",85,100,198,120,198,121,255}, -{"/ylgn9/6",96,158,171,65,171,93,255}, -{"/ylgn9/7",99,187,132,35,132,67,255}, -{"/ylgn9/8",107,255,104,0,104,55,255}, -{"/ylgn9/9",110,255,69,0,69,41,255}, -{"/ylgnbu3/1",49,73,248,237,248,177,255}, -{"/ylgnbu3/2",117,97,205,127,205,187,255}, -{"/ylgnbu3/3",144,194,184,44,127,184,255}, -{"/ylgnbu4/1",42,50,255,255,255,204,255}, -{"/ylgnbu4/2",99,66,218,161,218,180,255}, -{"/ylgnbu4/3",132,170,196,65,182,196,255}, -{"/ylgnbu4/4",150,203,168,34,94,168,255}, -{"/ylgnbu5/1",42,50,255,255,255,204,255}, -{"/ylgnbu5/2",99,66,218,161,218,180,255}, -{"/ylgnbu5/3",132,170,196,65,182,196,255}, -{"/ylgnbu5/4",144,194,184,44,127,184,255}, -{"/ylgnbu5/5",164,191,148,37,52,148,255}, -{"/ylgnbu6/1",42,50,255,255,255,204,255}, -{"/ylgnbu6/2",69,58,233,199,233,180,255}, -{"/ylgnbu6/3",117,97,205,127,205,187,255}, -{"/ylgnbu6/4",132,170,196,65,182,196,255}, -{"/ylgnbu6/5",144,194,184,44,127,184,255}, -{"/ylgnbu6/6",164,191,148,37,52,148,255}, -{"/ylgnbu7/1",42,50,255,255,255,204,255}, -{"/ylgnbu7/2",69,58,233,199,233,180,255}, -{"/ylgnbu7/3",117,97,205,127,205,187,255}, -{"/ylgnbu7/4",132,170,196,65,182,196,255}, -{"/ylgnbu7/5",139,216,192,29,145,192,255}, -{"/ylgnbu7/6",150,203,168,34,94,168,255}, -{"/ylgnbu7/7",158,231,132,12,44,132,255}, -{"/ylgnbu8/1",42,38,255,255,255,217,255}, -{"/ylgnbu8/2",49,73,248,237,248,177,255}, -{"/ylgnbu8/3",69,58,233,199,233,180,255}, -{"/ylgnbu8/4",117,97,205,127,205,187,255}, -{"/ylgnbu8/5",132,170,196,65,182,196,255}, -{"/ylgnbu8/6",139,216,192,29,145,192,255}, -{"/ylgnbu8/7",150,203,168,34,94,168,255}, -{"/ylgnbu8/8",158,231,132,12,44,132,255}, -{"/ylgnbu9/1",42,38,255,255,255,217,255}, -{"/ylgnbu9/2",49,73,248,237,248,177,255}, -{"/ylgnbu9/3",69,58,233,199,233,180,255}, -{"/ylgnbu9/4",117,97,205,127,205,187,255}, -{"/ylgnbu9/5",132,170,196,65,182,196,255}, -{"/ylgnbu9/6",139,216,192,29,145,192,255}, -{"/ylgnbu9/7",150,203,168,34,94,168,255}, -{"/ylgnbu9/8",164,191,148,37,52,148,255}, -{"/ylgnbu9/9",158,231,88,8,29,88,255}, -{"/ylorbr3/1",37,66,255,255,247,188,255}, -{"/ylorbr3/2",28,175,254,254,196,79,255}, -{"/ylorbr3/3",16,238,217,217,95,14,255}, -{"/ylorbr4/1",42,42,255,255,255,212,255}, -{"/ylorbr4/2",28,112,254,254,217,142,255}, -{"/ylorbr4/3",22,213,254,254,153,41,255}, -{"/ylorbr4/4",15,252,204,204,76,2,255}, -{"/ylorbr5/1",42,42,255,255,255,212,255}, -{"/ylorbr5/2",28,112,254,254,217,142,255}, -{"/ylorbr5/3",22,213,254,254,153,41,255}, -{"/ylorbr5/4",16,238,217,217,95,14,255}, -{"/ylorbr5/5",13,248,153,153,52,4,255}, -{"/ylorbr6/1",42,42,255,255,255,212,255}, -{"/ylorbr6/2",31,109,254,254,227,145,255}, -{"/ylorbr6/3",28,175,254,254,196,79,255}, -{"/ylorbr6/4",22,213,254,254,153,41,255}, -{"/ylorbr6/5",16,238,217,217,95,14,255}, -{"/ylorbr6/6",13,248,153,153,52,4,255}, -{"/ylorbr7/1",42,42,255,255,255,212,255}, -{"/ylorbr7/2",31,109,254,254,227,145,255}, -{"/ylorbr7/3",28,175,254,254,196,79,255}, -{"/ylorbr7/4",22,213,254,254,153,41,255}, -{"/ylorbr7/5",18,233,236,236,112,20,255}, -{"/ylorbr7/6",15,252,204,204,76,2,255}, -{"/ylorbr7/7",12,247,140,140,45,4,255}, -{"/ylorbr8/1",42,25,255,255,255,229,255}, -{"/ylorbr8/2",37,66,255,255,247,188,255}, -{"/ylorbr8/3",31,109,254,254,227,145,255}, -{"/ylorbr8/4",28,175,254,254,196,79,255}, -{"/ylorbr8/5",22,213,254,254,153,41,255}, -{"/ylorbr8/6",18,233,236,236,112,20,255}, -{"/ylorbr8/7",15,252,204,204,76,2,255}, -{"/ylorbr8/8",12,247,140,140,45,4,255}, -{"/ylorbr9/1",42,25,255,255,255,229,255}, -{"/ylorbr9/2",37,66,255,255,247,188,255}, -{"/ylorbr9/3",31,109,254,254,227,145,255}, -{"/ylorbr9/4",28,175,254,254,196,79,255}, -{"/ylorbr9/5",22,213,254,254,153,41,255}, -{"/ylorbr9/6",18,233,236,236,112,20,255}, -{"/ylorbr9/7",15,252,204,204,76,2,255}, -{"/ylorbr9/8",13,248,153,153,52,4,255}, -{"/ylorbr9/9",13,240,102,102,37,6,255}, -{"/ylorrd3/1",34,95,255,255,237,160,255}, -{"/ylorrd3/2",24,178,254,254,178,76,255}, -{"/ylorrd3/3",5,221,240,240,59,32,255}, -{"/ylorrd4/1",42,77,255,255,255,178,255}, -{"/ylorrd4/2",29,162,254,254,204,92,255}, -{"/ylorrd4/3",17,194,253,253,141,60,255}, -{"/ylorrd4/4",254,225,227,227,26,28,255}, -{"/ylorrd5/1",42,77,255,255,255,178,255}, -{"/ylorrd5/2",29,162,254,254,204,92,255}, -{"/ylorrd5/3",17,194,253,253,141,60,255}, -{"/ylorrd5/4",5,221,240,240,59,32,255}, -{"/ylorrd5/5",246,255,189,189,0,38,255}, -{"/ylorrd6/1",42,77,255,255,255,178,255}, -{"/ylorrd6/2",30,136,254,254,217,118,255}, -{"/ylorrd6/3",24,178,254,254,178,76,255}, -{"/ylorrd6/4",17,194,253,253,141,60,255}, -{"/ylorrd6/5",5,221,240,240,59,32,255}, -{"/ylorrd6/6",246,255,189,189,0,38,255}, -{"/ylorrd7/1",42,77,255,255,255,178,255}, -{"/ylorrd7/2",30,136,254,254,217,118,255}, -{"/ylorrd7/3",24,178,254,254,178,76,255}, -{"/ylorrd7/4",17,194,253,253,141,60,255}, -{"/ylorrd7/5",7,212,252,252,78,42,255}, -{"/ylorrd7/6",254,225,227,227,26,28,255}, -{"/ylorrd7/7",245,255,177,177,0,38,255}, -{"/ylorrd8/1",42,50,255,255,255,204,255}, -{"/ylorrd8/2",34,95,255,255,237,160,255}, -{"/ylorrd8/3",30,136,254,254,217,118,255}, -{"/ylorrd8/4",24,178,254,254,178,76,255}, -{"/ylorrd8/5",17,194,253,253,141,60,255}, -{"/ylorrd8/6",7,212,252,252,78,42,255}, -{"/ylorrd8/7",254,225,227,227,26,28,255}, -{"/ylorrd8/8",245,255,177,177,0,38,255}, -{"/ylorrd9/1",42,50,255,255,255,204,255}, -{"/ylorrd9/2",34,95,255,255,237,160,255}, -{"/ylorrd9/3",30,136,254,254,217,118,255}, -{"/ylorrd9/4",24,178,254,254,178,76,255}, -{"/ylorrd9/5",17,194,253,253,141,60,255}, -{"/ylorrd9/6",7,212,252,252,78,42,255}, -{"/ylorrd9/7",254,225,227,227,26,28,255}, -{"/ylorrd9/8",246,255,189,189,0,38,255}, -{"/ylorrd9/9",242,255,128,128,0,38,255}, -{"aliceblue",147,15,255,240,248,255,255}, -{"antiquewhite",24,35,250,250,235,215,255}, -{"antiquewhite1",23,36,255,255,239,219,255}, -{"antiquewhite2",23,36,238,238,223,204,255}, -{"antiquewhite3",23,36,205,205,192,176,255}, -{"antiquewhite4",24,34,139,139,131,120,255}, -{"aquamarine",113,128,255,127,255,212,255}, -{"aquamarine1",113,128,255,127,255,212,255}, -{"aquamarine2",113,128,238,118,238,198,255}, -{"aquamarine3",113,128,205,102,205,170,255}, -{"aquamarine4",113,128,139,69,139,116,255}, -{"azure",127,15,255,240,255,255,255}, -{"azure1",127,15,255,240,255,255,255}, -{"azure2",127,15,238,224,238,238,255}, -{"azure3",127,14,205,193,205,205,255}, -{"azure4",127,14,139,131,139,139,255}, -{"beige",42,26,245,245,245,220,255}, -{"bisque",23,58,255,255,228,196,255}, -{"bisque1",23,58,255,255,228,196,255}, -{"bisque2",23,58,238,238,213,183,255}, -{"bisque3",22,58,205,205,183,158,255}, -{"bisque4",23,58,139,139,125,107,255}, -{"black",0,0,0,0,0,0,255}, -{"blanchedalmond",25,49,255,255,235,205,255}, -{"blue",170,255,255,0,0,255,255}, -{"blue1",170,255,255,0,0,255,255}, -{"blue2",170,255,238,0,0,238,255}, -{"blue3",170,255,205,0,0,205,255}, -{"blue4",170,255,139,0,0,139,255}, -{"blueviolet",192,206,226,138,43,226,255}, -{"brown",0,190,165,165,42,42,255}, -{"brown1",0,191,255,255,64,64,255}, -{"brown2",0,191,238,238,59,59,255}, -{"brown3",0,191,205,205,51,51,255}, -{"brown4",0,190,139,139,35,35,255}, -{"burlywood",23,99,222,222,184,135,255}, -{"burlywood1",23,100,255,255,211,155,255}, -{"burlywood2",23,99,238,238,197,145,255}, -{"burlywood3",23,99,205,205,170,125,255}, -{"burlywood4",23,99,139,139,115,85,255}, -{"cadetblue",128,103,160,95,158,160,255}, -{"cadetblue1",131,103,255,152,245,255,255}, -{"cadetblue2",131,102,238,142,229,238,255}, -{"cadetblue3",131,103,205,122,197,205,255}, -{"cadetblue4",131,102,139,83,134,139,255}, -{"chartreuse",63,255,255,127,255,0,255}, -{"chartreuse1",63,255,255,127,255,0,255}, -{"chartreuse2",63,255,238,118,238,0,255}, -{"chartreuse3",63,255,205,102,205,0,255}, -{"chartreuse4",63,255,139,69,139,0,255}, -{"chocolate",17,218,210,210,105,30,255}, -{"chocolate1",17,219,255,255,127,36,255}, -{"chocolate2",17,219,238,238,118,33,255}, -{"chocolate3",17,218,205,205,102,29,255}, -{"chocolate4",17,220,139,139,69,19,255}, -{"coral",11,175,255,255,127,80,255}, -{"coral1",7,169,255,255,114,86,255}, -{"coral2",6,169,238,238,106,80,255}, -{"coral3",6,169,205,205,91,69,255}, -{"coral4",6,168,139,139,62,47,255}, -{"cornflowerblue",154,147,237,100,149,237,255}, -{"cornsilk",33,34,255,255,248,220,255}, -{"cornsilk1",33,34,255,255,248,220,255}, -{"cornsilk2",34,35,238,238,232,205,255}, -{"cornsilk3",34,34,205,205,200,177,255}, -{"cornsilk4",35,34,139,139,136,120,255}, -{"crimson",246,231,220,220,20,60,255}, -{"cyan",127,255,255,0,255,255,255}, -{"cyan1",127,255,255,0,255,255,255}, -{"cyan2",127,255,238,0,238,238,255}, -{"cyan3",127,255,205,0,205,205,255}, -{"cyan4",127,255,139,0,139,139,255}, -{"darkgoldenrod",30,239,184,184,134,11,255}, -{"darkgoldenrod1",30,240,255,255,185,15,255}, -{"darkgoldenrod2",30,240,238,238,173,14,255}, -{"darkgoldenrod3",30,240,205,205,149,12,255}, -{"darkgoldenrod4",30,240,139,139,101,8,255}, -{"darkgreen",85,255,100,0,100,0,255}, -{"darkkhaki",39,110,189,189,183,107,255}, -{"darkolivegreen",58,142,107,85,107,47,255}, -{"darkolivegreen1",58,143,255,202,255,112,255}, -{"darkolivegreen2",58,143,238,188,238,104,255}, -{"darkolivegreen3",58,143,205,162,205,90,255}, -{"darkolivegreen4",58,143,139,110,139,61,255}, -{"darkorange",23,255,255,255,140,0,255}, -{"darkorange1",21,255,255,255,127,0,255}, -{"darkorange2",21,255,238,238,118,0,255}, -{"darkorange3",21,255,205,205,102,0,255}, -{"darkorange4",21,255,139,139,69,0,255}, -{"darkorchid",198,192,204,153,50,204,255}, -{"darkorchid1",198,193,255,191,62,255,255}, -{"darkorchid2",198,192,238,178,58,238,255}, -{"darkorchid3",198,192,205,154,50,205,255}, -{"darkorchid4",198,192,139,104,34,139,255}, -{"darksalmon",10,121,233,233,150,122,255}, -{"darkseagreen",85,61,188,143,188,143,255}, -{"darkseagreen1",85,62,255,193,255,193,255}, -{"darkseagreen2",85,62,238,180,238,180,255}, -{"darkseagreen3",85,62,205,155,205,155,255}, -{"darkseagreen4",85,62,139,105,139,105,255}, -{"darkslateblue",175,143,139,72,61,139,255}, -{"darkslategray",127,103,79,47,79,79,255}, -{"darkslategray1",127,104,255,151,255,255,255}, -{"darkslategray2",127,103,238,141,238,238,255}, -{"darkslategray3",127,104,205,121,205,205,255}, -{"darkslategray4",127,104,139,82,139,139,255}, -{"darkslategrey",127,103,79,47,79,79,255}, -{"darkturquoise",128,255,209,0,206,209,255}, -{"darkviolet",199,255,211,148,0,211,255}, -{"deeppink",232,235,255,255,20,147,255}, -{"deeppink1",232,235,255,255,20,147,255}, -{"deeppink2",232,235,238,238,18,137,255}, -{"deeppink3",232,235,205,205,16,118,255}, -{"deeppink4",231,236,139,139,10,80,255}, -{"deepskyblue",138,255,255,0,191,255,255}, -{"deepskyblue1",138,255,255,0,191,255,255}, -{"deepskyblue2",138,255,238,0,178,238,255}, -{"deepskyblue3",138,255,205,0,154,205,255}, -{"deepskyblue4",138,255,139,0,104,139,255}, -{"dimgray",0,0,105,105,105,105,255}, -{"dimgrey",0,0,105,105,105,105,255}, -{"dodgerblue",148,225,255,30,144,255,255}, -{"dodgerblue1",148,225,255,30,144,255,255}, -{"dodgerblue2",148,225,238,28,134,238,255}, -{"dodgerblue3",148,225,205,24,116,205,255}, -{"dodgerblue4",148,225,139,16,78,139,255}, -{"firebrick",0,206,178,178,34,34,255}, -{"firebrick1",0,207,255,255,48,48,255}, -{"firebrick2",0,207,238,238,44,44,255}, -{"firebrick3",0,207,205,205,38,38,255}, -{"firebrick4",0,207,139,139,26,26,255}, -{"floralwhite",28,15,255,255,250,240,255}, -{"forestgreen",85,192,139,34,139,34,255}, -{"gainsboro",0,0,220,220,220,220,255}, -{"ghostwhite",170,7,255,248,248,255,255}, -{"gold",35,255,255,255,215,0,255}, -{"gold1",35,255,255,255,215,0,255}, -{"gold2",35,255,238,238,201,0,255}, -{"gold3",35,255,205,205,173,0,255}, -{"gold4",35,255,139,139,117,0,255}, -{"goldenrod",30,217,218,218,165,32,255}, -{"goldenrod1",30,218,255,255,193,37,255}, -{"goldenrod2",30,218,238,238,180,34,255}, -{"goldenrod3",30,218,205,205,155,29,255}, -{"goldenrod4",30,218,139,139,105,20,255}, -{"gray",0,0,192,192,192,192,255}, -{"gray0",0,0,0,0,0,0,255}, -{"gray1",0,0,3,3,3,3,255}, -{"gray10",0,0,26,26,26,26,255}, -{"gray100",0,0,255,255,255,255,255}, -{"gray11",0,0,28,28,28,28,255}, -{"gray12",0,0,31,31,31,31,255}, -{"gray13",0,0,33,33,33,33,255}, -{"gray14",0,0,36,36,36,36,255}, -{"gray15",0,0,38,38,38,38,255}, -{"gray16",0,0,41,41,41,41,255}, -{"gray17",0,0,43,43,43,43,255}, -{"gray18",0,0,46,46,46,46,255}, -{"gray19",0,0,48,48,48,48,255}, -{"gray2",0,0,5,5,5,5,255}, -{"gray20",0,0,51,51,51,51,255}, -{"gray21",0,0,54,54,54,54,255}, -{"gray22",0,0,56,56,56,56,255}, -{"gray23",0,0,59,59,59,59,255}, -{"gray24",0,0,61,61,61,61,255}, -{"gray25",0,0,64,64,64,64,255}, -{"gray26",0,0,66,66,66,66,255}, -{"gray27",0,0,69,69,69,69,255}, -{"gray28",0,0,71,71,71,71,255}, -{"gray29",0,0,74,74,74,74,255}, -{"gray3",0,0,8,8,8,8,255}, -{"gray30",0,0,77,77,77,77,255}, -{"gray31",0,0,79,79,79,79,255}, -{"gray32",0,0,82,82,82,82,255}, -{"gray33",0,0,84,84,84,84,255}, -{"gray34",0,0,87,87,87,87,255}, -{"gray35",0,0,89,89,89,89,255}, -{"gray36",0,0,92,92,92,92,255}, -{"gray37",0,0,94,94,94,94,255}, -{"gray38",0,0,97,97,97,97,255}, -{"gray39",0,0,99,99,99,99,255}, -{"gray4",0,0,10,10,10,10,255}, -{"gray40",0,0,102,102,102,102,255}, -{"gray41",0,0,105,105,105,105,255}, -{"gray42",0,0,107,107,107,107,255}, -{"gray43",0,0,110,110,110,110,255}, -{"gray44",0,0,112,112,112,112,255}, -{"gray45",0,0,115,115,115,115,255}, -{"gray46",0,0,117,117,117,117,255}, -{"gray47",0,0,120,120,120,120,255}, -{"gray48",0,0,122,122,122,122,255}, -{"gray49",0,0,125,125,125,125,255}, -{"gray5",0,0,13,13,13,13,255}, -{"gray50",0,0,127,127,127,127,255}, -{"gray51",0,0,130,130,130,130,255}, -{"gray52",0,0,133,133,133,133,255}, -{"gray53",0,0,135,135,135,135,255}, -{"gray54",0,0,138,138,138,138,255}, -{"gray55",0,0,140,140,140,140,255}, -{"gray56",0,0,143,143,143,143,255}, -{"gray57",0,0,145,145,145,145,255}, -{"gray58",0,0,148,148,148,148,255}, -{"gray59",0,0,150,150,150,150,255}, -{"gray6",0,0,15,15,15,15,255}, -{"gray60",0,0,153,153,153,153,255}, -{"gray61",0,0,156,156,156,156,255}, -{"gray62",0,0,158,158,158,158,255}, -{"gray63",0,0,161,161,161,161,255}, -{"gray64",0,0,163,163,163,163,255}, -{"gray65",0,0,166,166,166,166,255}, -{"gray66",0,0,168,168,168,168,255}, -{"gray67",0,0,171,171,171,171,255}, -{"gray68",0,0,173,173,173,173,255}, -{"gray69",0,0,176,176,176,176,255}, -{"gray7",0,0,18,18,18,18,255}, -{"gray70",0,0,179,179,179,179,255}, -{"gray71",0,0,181,181,181,181,255}, -{"gray72",0,0,184,184,184,184,255}, -{"gray73",0,0,186,186,186,186,255}, -{"gray74",0,0,189,189,189,189,255}, -{"gray75",0,0,191,191,191,191,255}, -{"gray76",0,0,194,194,194,194,255}, -{"gray77",0,0,196,196,196,196,255}, -{"gray78",0,0,199,199,199,199,255}, -{"gray79",0,0,201,201,201,201,255}, -{"gray8",0,0,20,20,20,20,255}, -{"gray80",0,0,204,204,204,204,255}, -{"gray81",0,0,207,207,207,207,255}, -{"gray82",0,0,209,209,209,209,255}, -{"gray83",0,0,212,212,212,212,255}, -{"gray84",0,0,214,214,214,214,255}, -{"gray85",0,0,217,217,217,217,255}, -{"gray86",0,0,219,219,219,219,255}, -{"gray87",0,0,222,222,222,222,255}, -{"gray88",0,0,224,224,224,224,255}, -{"gray89",0,0,227,227,227,227,255}, -{"gray9",0,0,23,23,23,23,255}, -{"gray90",0,0,229,229,229,229,255}, -{"gray91",0,0,232,232,232,232,255}, -{"gray92",0,0,235,235,235,235,255}, -{"gray93",0,0,237,237,237,237,255}, -{"gray94",0,0,240,240,240,240,255}, -{"gray95",0,0,242,242,242,242,255}, -{"gray96",0,0,245,245,245,245,255}, -{"gray97",0,0,247,247,247,247,255}, -{"gray98",0,0,250,250,250,250,255}, -{"gray99",0,0,252,252,252,252,255}, -{"green",85,255,255,0,255,0,255}, -{"green1",85,255,255,0,255,0,255}, -{"green2",85,255,238,0,238,0,255}, -{"green3",85,255,205,0,205,0,255}, -{"green4",85,255,139,0,139,0,255}, -{"greenyellow",59,208,255,173,255,47,255}, -{"grey",0,0,192,192,192,192,255}, -{"grey0",0,0,0,0,0,0,255}, -{"grey1",0,0,3,3,3,3,255}, -{"grey10",0,0,26,26,26,26,255}, -{"grey100",0,0,255,255,255,255,255}, -{"grey11",0,0,28,28,28,28,255}, -{"grey12",0,0,31,31,31,31,255}, -{"grey13",0,0,33,33,33,33,255}, -{"grey14",0,0,36,36,36,36,255}, -{"grey15",0,0,38,38,38,38,255}, -{"grey16",0,0,41,41,41,41,255}, -{"grey17",0,0,43,43,43,43,255}, -{"grey18",0,0,46,46,46,46,255}, -{"grey19",0,0,48,48,48,48,255}, -{"grey2",0,0,5,5,5,5,255}, -{"grey20",0,0,51,51,51,51,255}, -{"grey21",0,0,54,54,54,54,255}, -{"grey22",0,0,56,56,56,56,255}, -{"grey23",0,0,59,59,59,59,255}, -{"grey24",0,0,61,61,61,61,255}, -{"grey25",0,0,64,64,64,64,255}, -{"grey26",0,0,66,66,66,66,255}, -{"grey27",0,0,69,69,69,69,255}, -{"grey28",0,0,71,71,71,71,255}, -{"grey29",0,0,74,74,74,74,255}, -{"grey3",0,0,8,8,8,8,255}, -{"grey30",0,0,77,77,77,77,255}, -{"grey31",0,0,79,79,79,79,255}, -{"grey32",0,0,82,82,82,82,255}, -{"grey33",0,0,84,84,84,84,255}, -{"grey34",0,0,87,87,87,87,255}, -{"grey35",0,0,89,89,89,89,255}, -{"grey36",0,0,92,92,92,92,255}, -{"grey37",0,0,94,94,94,94,255}, -{"grey38",0,0,97,97,97,97,255}, -{"grey39",0,0,99,99,99,99,255}, -{"grey4",0,0,10,10,10,10,255}, -{"grey40",0,0,102,102,102,102,255}, -{"grey41",0,0,105,105,105,105,255}, -{"grey42",0,0,107,107,107,107,255}, -{"grey43",0,0,110,110,110,110,255}, -{"grey44",0,0,112,112,112,112,255}, -{"grey45",0,0,115,115,115,115,255}, -{"grey46",0,0,117,117,117,117,255}, -{"grey47",0,0,120,120,120,120,255}, -{"grey48",0,0,122,122,122,122,255}, -{"grey49",0,0,125,125,125,125,255}, -{"grey5",0,0,13,13,13,13,255}, -{"grey50",0,0,127,127,127,127,255}, -{"grey51",0,0,130,130,130,130,255}, -{"grey52",0,0,133,133,133,133,255}, -{"grey53",0,0,135,135,135,135,255}, -{"grey54",0,0,138,138,138,138,255}, -{"grey55",0,0,140,140,140,140,255}, -{"grey56",0,0,143,143,143,143,255}, -{"grey57",0,0,145,145,145,145,255}, -{"grey58",0,0,148,148,148,148,255}, -{"grey59",0,0,150,150,150,150,255}, -{"grey6",0,0,15,15,15,15,255}, -{"grey60",0,0,153,153,153,153,255}, -{"grey61",0,0,156,156,156,156,255}, -{"grey62",0,0,158,158,158,158,255}, -{"grey63",0,0,161,161,161,161,255}, -{"grey64",0,0,163,163,163,163,255}, -{"grey65",0,0,166,166,166,166,255}, -{"grey66",0,0,168,168,168,168,255}, -{"grey67",0,0,171,171,171,171,255}, -{"grey68",0,0,173,173,173,173,255}, -{"grey69",0,0,176,176,176,176,255}, -{"grey7",0,0,18,18,18,18,255}, -{"grey70",0,0,179,179,179,179,255}, -{"grey71",0,0,181,181,181,181,255}, -{"grey72",0,0,184,184,184,184,255}, -{"grey73",0,0,186,186,186,186,255}, -{"grey74",0,0,189,189,189,189,255}, -{"grey75",0,0,191,191,191,191,255}, -{"grey76",0,0,194,194,194,194,255}, -{"grey77",0,0,196,196,196,196,255}, -{"grey78",0,0,199,199,199,199,255}, -{"grey79",0,0,201,201,201,201,255}, -{"grey8",0,0,20,20,20,20,255}, -{"grey80",0,0,204,204,204,204,255}, -{"grey81",0,0,207,207,207,207,255}, -{"grey82",0,0,209,209,209,209,255}, -{"grey83",0,0,212,212,212,212,255}, -{"grey84",0,0,214,214,214,214,255}, -{"grey85",0,0,217,217,217,217,255}, -{"grey86",0,0,219,219,219,219,255}, -{"grey87",0,0,222,222,222,222,255}, -{"grey88",0,0,224,224,224,224,255}, -{"grey89",0,0,227,227,227,227,255}, -{"grey9",0,0,23,23,23,23,255}, -{"grey90",0,0,229,229,229,229,255}, -{"grey91",0,0,232,232,232,232,255}, -{"grey92",0,0,235,235,235,235,255}, -{"grey93",0,0,237,237,237,237,255}, -{"grey94",0,0,240,240,240,240,255}, -{"grey95",0,0,242,242,242,242,255}, -{"grey96",0,0,245,245,245,245,255}, -{"grey97",0,0,247,247,247,247,255}, -{"grey98",0,0,250,250,250,250,255}, -{"grey99",0,0,252,252,252,252,255}, -{"honeydew",85,15,255,240,255,240,255}, -{"honeydew1",85,15,255,240,255,240,255}, -{"honeydew2",85,15,238,224,238,224,255}, -{"honeydew3",85,14,205,193,205,193,255}, -{"honeydew4",85,14,139,131,139,131,255}, -{"hotpink",233,150,255,255,105,180,255}, -{"hotpink1",234,145,255,255,110,180,255}, -{"hotpink2",235,141,238,238,106,167,255}, -{"hotpink3",236,135,205,205,96,144,255}, -{"hotpink4",234,148,139,139,58,98,255}, -{"indianred",0,140,205,205,92,92,255}, -{"indianred1",0,148,255,255,106,106,255}, -{"indianred2",0,148,238,238,99,99,255}, -{"indianred3",0,149,205,205,85,85,255}, -{"indianred4",0,148,139,139,58,58,255}, -{"indigo",194,255,130,75,0,130,255}, -{"invis",42,0,255,255,255,254,0}, -{"ivory",42,15,255,255,255,240,255}, -{"ivory1",42,15,255,255,255,240,255}, -{"ivory2",42,15,238,238,238,224,255}, -{"ivory3",42,14,205,205,205,193,255}, -{"ivory4",42,14,139,139,139,131,255}, -{"khaki",38,106,240,240,230,140,255}, -{"khaki1",39,112,255,255,246,143,255}, -{"khaki2",39,112,238,238,230,133,255}, -{"khaki3",39,111,205,205,198,115,255}, -{"khaki4",39,111,139,139,134,78,255}, -{"lavender",170,20,250,230,230,250,255}, -{"lavenderblush",240,15,255,255,240,245,255}, -{"lavenderblush1",240,15,255,255,240,245,255}, -{"lavenderblush2",239,15,238,238,224,229,255}, -{"lavenderblush3",240,14,205,205,193,197,255}, -{"lavenderblush4",239,14,139,139,131,134,255}, -{"lawngreen",64,255,252,124,252,0,255}, -{"lemonchiffon",38,49,255,255,250,205,255}, -{"lemonchiffon1",38,49,255,255,250,205,255}, -{"lemonchiffon2",37,50,238,238,233,191,255}, -{"lemonchiffon3",38,49,205,205,201,165,255}, -{"lemonchiffon4",39,49,139,139,137,112,255}, -{"lightblue",137,63,230,173,216,230,255}, -{"lightblue1",138,64,255,191,239,255,255}, -{"lightblue2",138,64,238,178,223,238,255}, -{"lightblue3",138,63,205,154,192,205,255}, -{"lightblue4",137,64,139,104,131,139,255}, -{"lightcoral",0,119,240,240,128,128,255}, -{"lightcyan",127,31,255,224,255,255,255}, -{"lightcyan1",127,31,255,224,255,255,255}, -{"lightcyan2",127,31,238,209,238,238,255}, -{"lightcyan3",127,31,205,180,205,205,255}, -{"lightcyan4",127,31,139,122,139,139,255}, -{"lightgoldenrod",35,115,238,238,221,130,255}, -{"lightgoldenrod1",35,116,255,255,236,139,255}, -{"lightgoldenrod2",35,115,238,238,220,130,255}, -{"lightgoldenrod3",35,115,205,205,190,112,255}, -{"lightgoldenrod4",35,115,139,139,129,76,255}, -{"lightgoldenrodyellow",42,40,250,250,250,210,255}, -{"lightgray",0,0,211,211,211,211,255}, -{"lightgrey",0,0,211,211,211,211,255}, -{"lightpink",248,73,255,255,182,193,255}, -{"lightpink1",249,81,255,255,174,185,255}, -{"lightpink2",248,81,238,238,162,173,255}, -{"lightpink3",249,80,205,205,140,149,255}, -{"lightpink4",249,80,139,139,95,101,255}, -{"lightsalmon",12,132,255,255,160,122,255}, -{"lightsalmon1",12,132,255,255,160,122,255}, -{"lightsalmon2",11,132,238,238,149,114,255}, -{"lightsalmon3",12,133,205,205,129,98,255}, -{"lightsalmon4",12,133,139,139,87,66,255}, -{"lightseagreen",125,209,178,32,178,170,255}, -{"lightskyblue",143,117,250,135,206,250,255}, -{"lightskyblue1",143,79,255,176,226,255,255}, -{"lightskyblue2",143,79,238,164,211,238,255}, -{"lightskyblue3",142,79,205,141,182,205,255}, -{"lightskyblue4",143,78,139,96,123,139,255}, -{"lightslateblue",175,143,255,132,112,255,255}, -{"lightslategray",148,56,153,119,136,153,255}, -{"lightslategrey",148,56,153,119,136,153,255}, -{"lightsteelblue",151,52,222,176,196,222,255}, -{"lightsteelblue1",151,53,255,202,225,255,255}, -{"lightsteelblue2",151,53,238,188,210,238,255}, -{"lightsteelblue3",151,53,205,162,181,205,255}, -{"lightsteelblue4",150,53,139,110,123,139,255}, -{"lightyellow",42,31,255,255,255,224,255}, -{"lightyellow1",42,31,255,255,255,224,255}, -{"lightyellow2",42,31,238,238,238,209,255}, -{"lightyellow3",42,31,205,205,205,180,255}, -{"lightyellow4",42,31,139,139,139,122,255}, -{"limegreen",85,192,205,50,205,50,255}, -{"linen",21,20,250,250,240,230,255}, -{"magenta",212,255,255,255,0,255,255}, -{"magenta1",212,255,255,255,0,255,255}, -{"magenta2",212,255,238,238,0,238,255}, -{"magenta3",212,255,205,205,0,205,255}, -{"magenta4",212,255,139,139,0,139,255}, -{"maroon",239,185,176,176,48,96,255}, -{"maroon1",228,203,255,255,52,179,255}, -{"maroon2",228,203,238,238,48,167,255}, -{"maroon3",228,204,205,205,41,144,255}, -{"maroon4",228,203,139,139,28,98,255}, -{"mediumaquamarine",113,128,205,102,205,170,255}, -{"mediumblue",170,255,205,0,0,205,255}, -{"mediumorchid",204,152,211,186,85,211,255}, -{"mediumorchid1",203,153,255,224,102,255,255}, -{"mediumorchid2",203,153,238,209,95,238,255}, -{"mediumorchid3",203,153,205,180,82,205,255}, -{"mediumorchid4",203,154,139,122,55,139,255}, -{"mediumpurple",183,124,219,147,112,219,255}, -{"mediumpurple1",183,125,255,171,130,255,255}, -{"mediumpurple2",183,125,238,159,121,238,255}, -{"mediumpurple3",183,125,205,137,104,205,255}, -{"mediumpurple4",183,124,139,93,71,139,255}, -{"mediumseagreen",103,169,179,60,179,113,255}, -{"mediumslateblue",176,143,238,123,104,238,255}, -{"mediumspringgreen",111,255,250,0,250,154,255}, -{"mediumturquoise",125,167,209,72,209,204,255}, -{"mediumvioletred",228,228,199,199,21,133,255}, -{"midnightblue",170,198,112,25,25,112,255}, -{"mintcream",106,9,255,245,255,250,255}, -{"mistyrose",4,30,255,255,228,225,255}, -{"mistyrose1",4,30,255,255,228,225,255}, -{"mistyrose2",4,30,238,238,213,210,255}, -{"mistyrose3",3,29,205,205,183,181,255}, -{"mistyrose4",5,29,139,139,125,123,255}, -{"moccasin",26,73,255,255,228,181,255}, -{"navajowhite",25,81,255,255,222,173,255}, -{"navajowhite1",25,81,255,255,222,173,255}, -{"navajowhite2",25,82,238,238,207,161,255}, -{"navajowhite3",25,82,205,205,179,139,255}, -{"navajowhite4",25,82,139,139,121,94,255}, -{"navy",170,255,128,0,0,128,255}, -{"navyblue",170,255,128,0,0,128,255}, -{"none",42,0,255,255,255,254,0}, -{"oldlace",27,23,253,253,245,230,255}, -{"olivedrab",56,192,142,107,142,35,255}, -{"olivedrab1",56,193,255,192,255,62,255}, -{"olivedrab2",56,192,238,179,238,58,255}, -{"olivedrab3",56,192,205,154,205,50,255}, -{"olivedrab4",56,192,139,105,139,34,255}, -{"orange",27,255,255,255,165,0,255}, -{"orange1",27,255,255,255,165,0,255}, -{"orange2",27,255,238,238,154,0,255}, -{"orange3",27,255,205,205,133,0,255}, -{"orange4",27,255,139,139,90,0,255}, -{"orangered",11,255,255,255,69,0,255}, -{"orangered1",11,255,255,255,69,0,255}, -{"orangered2",11,255,238,238,64,0,255}, -{"orangered3",11,255,205,205,55,0,255}, -{"orangered4",11,255,139,139,37,0,255}, -{"orchid",214,123,218,218,112,214,255}, -{"orchid1",214,124,255,255,131,250,255}, -{"orchid2",214,124,238,238,122,233,255}, -{"orchid3",214,124,205,205,105,201,255}, -{"orchid4",213,124,139,139,71,137,255}, -{"palegoldenrod",38,72,238,238,232,170,255}, -{"palegreen",85,100,251,152,251,152,255}, -{"palegreen1",85,101,255,154,255,154,255}, -{"palegreen2",85,100,238,144,238,144,255}, -{"palegreen3",85,100,205,124,205,124,255}, -{"palegreen4",85,100,139,84,139,84,255}, -{"paleturquoise",127,67,238,175,238,238,255}, -{"paleturquoise1",127,68,255,187,255,255,255}, -{"paleturquoise2",127,68,238,174,238,238,255}, -{"paleturquoise3",127,68,205,150,205,205,255}, -{"paleturquoise4",127,67,139,102,139,139,255}, -{"palevioletred",241,124,219,219,112,147,255}, -{"palevioletred1",241,125,255,255,130,171,255}, -{"palevioletred2",241,125,238,238,121,159,255}, -{"palevioletred3",241,125,205,205,104,137,255}, -{"palevioletred4",241,124,139,139,71,93,255}, -{"papayawhip",26,41,255,255,239,213,255}, -{"peachpuff",20,70,255,255,218,185,255}, -{"peachpuff1",20,70,255,255,218,185,255}, -{"peachpuff2",19,69,238,238,203,173,255}, -{"peachpuff3",19,69,205,205,175,149,255}, -{"peachpuff4",20,69,139,139,119,101,255}, -{"peru",20,176,205,205,133,63,255}, -{"pink",247,63,255,255,192,203,255}, -{"pink1",245,73,255,255,181,197,255}, -{"pink2",245,73,238,238,169,184,255}, -{"pink3",245,74,205,205,145,158,255}, -{"pink4",245,73,139,139,99,108,255}, -{"plum",212,70,221,221,160,221,255}, -{"plum1",212,68,255,255,187,255,255}, -{"plum2",212,68,238,238,174,238,255}, -{"plum3",212,68,205,205,150,205,255}, -{"plum4",212,67,139,139,102,139,255}, -{"powderblue",132,59,230,176,224,230,255}, -{"purple",196,221,240,160,32,240,255}, -{"purple1",191,207,255,155,48,255,255}, -{"purple2",192,207,238,145,44,238,255}, -{"purple3",192,207,205,125,38,205,255}, -{"purple4",192,207,139,85,26,139,255}, -{"red",0,255,255,255,0,0,255}, -{"red1",0,255,255,255,0,0,255}, -{"red2",0,255,238,238,0,0,255}, -{"red3",0,255,205,205,0,0,255}, -{"red4",0,255,139,139,0,0,255}, -{"rosybrown",0,61,188,188,143,143,255}, -{"rosybrown1",0,62,255,255,193,193,255}, -{"rosybrown2",0,62,238,238,180,180,255}, -{"rosybrown3",0,62,205,205,155,155,255}, -{"rosybrown4",0,62,139,139,105,105,255}, -{"royalblue",159,181,225,65,105,225,255}, -{"royalblue1",159,183,255,72,118,255,255}, -{"royalblue2",159,183,238,67,110,238,255}, -{"royalblue3",159,182,205,58,95,205,255}, -{"royalblue4",159,183,139,39,64,139,255}, -{"saddlebrown",17,220,139,139,69,19,255}, -{"salmon",4,138,250,250,128,114,255}, -{"salmon1",9,150,255,255,140,105,255}, -{"salmon2",9,150,238,238,130,98,255}, -{"salmon3",9,150,205,205,112,84,255}, -{"salmon4",9,150,139,139,76,57,255}, -{"sandybrown",19,154,244,244,164,96,255}, -{"seagreen",103,170,139,46,139,87,255}, -{"seagreen1",103,171,255,84,255,159,255}, -{"seagreen2",103,171,238,78,238,148,255}, -{"seagreen3",103,171,205,67,205,128,255}, -{"seagreen4",103,170,139,46,139,87,255}, -{"seashell",17,16,255,255,245,238,255}, -{"seashell1",17,16,255,255,245,238,255}, -{"seashell2",18,17,238,238,229,222,255}, -{"seashell3",18,17,205,205,197,191,255}, -{"seashell4",18,16,139,139,134,130,255}, -{"sienna",13,183,160,160,82,45,255}, -{"sienna1",13,184,255,255,130,71,255}, -{"sienna2",13,184,238,238,121,66,255}, -{"sienna3",13,184,205,205,104,57,255}, -{"sienna4",13,185,139,139,71,38,255}, -{"skyblue",139,108,235,135,206,235,255}, -{"skyblue1",144,120,255,135,206,255,255}, -{"skyblue2",144,120,238,126,192,238,255}, -{"skyblue3",144,120,205,108,166,205,255}, -{"skyblue4",145,119,139,74,112,139,255}, -{"slateblue",175,143,205,106,90,205,255}, -{"slateblue1",175,144,255,131,111,255,255}, -{"slateblue2",175,144,238,122,103,238,255}, -{"slateblue3",175,144,205,105,89,205,255}, -{"slateblue4",175,144,139,71,60,139,255}, -{"slategray",148,56,144,112,128,144,255}, -{"slategray1",149,56,255,198,226,255,255}, -{"slategray2",149,56,238,185,211,238,255}, -{"slategray3",148,57,205,159,182,205,255}, -{"slategray4",149,56,139,108,123,139,255}, -{"slategrey",148,56,144,112,128,144,255}, -{"snow",0,5,255,255,250,250,255}, -{"snow1",0,5,255,255,250,250,255}, -{"snow2",0,5,238,238,233,233,255}, -{"snow3",0,4,205,205,201,201,255}, -{"snow4",0,3,139,139,137,137,255}, -{"springgreen",106,255,255,0,255,127,255}, -{"springgreen1",106,255,255,0,255,127,255}, -{"springgreen2",106,255,238,0,238,118,255}, -{"springgreen3",106,255,205,0,205,102,255}, -{"springgreen4",106,255,139,0,139,69,255}, -{"steelblue",146,155,180,70,130,180,255}, -{"steelblue1",146,156,255,99,184,255,255}, -{"steelblue2",146,156,238,92,172,238,255}, -{"steelblue3",146,156,205,79,148,205,255}, -{"steelblue4",147,155,139,54,100,139,255}, -{"tan",24,84,210,210,180,140,255}, -{"tan1",20,176,255,255,165,79,255}, -{"tan2",20,176,238,238,154,73,255}, -{"tan3",20,176,205,205,133,63,255}, -{"tan4",20,176,139,139,90,43,255}, -{"thistle",212,29,216,216,191,216,255}, -{"thistle1",212,30,255,255,225,255,255}, -{"thistle2",212,30,238,238,210,238,255}, -{"thistle3",212,29,205,205,181,205,255}, -{"thistle4",212,29,139,139,123,139,255}, -{"tomato",6,184,255,255,99,71,255}, -{"tomato1",6,184,255,255,99,71,255}, -{"tomato2",6,184,238,238,92,66,255}, -{"tomato3",6,184,205,205,79,57,255}, -{"tomato4",6,185,139,139,54,38,255}, -{"transparent",42,0,255,255,255,254,0}, -{"turquoise",123,182,224,64,224,208,255}, -{"turquoise1",129,255,255,0,245,255,255}, -{"turquoise2",129,255,238,0,229,238,255}, -{"turquoise3",129,255,205,0,197,205,255}, -{"turquoise4",129,255,139,0,134,139,255}, -{"violet",212,115,238,238,130,238,255}, -{"violetred",227,215,208,208,32,144,255}, -{"violetred1",235,193,255,255,62,150,255}, -{"violetred2",235,192,238,238,58,140,255}, -{"violetred3",235,192,205,205,50,120,255}, -{"violetred4",235,192,139,139,34,82,255}, -{"wheat",27,68,245,245,222,179,255}, -{"wheat1",27,69,255,255,231,186,255}, -{"wheat2",27,68,238,238,216,174,255}, -{"wheat3",27,68,205,205,186,150,255}, -{"wheat4",27,67,139,139,126,102,255}, -{"white",0,0,255,255,255,255,255}, -{"whitesmoke",0,0,245,245,245,245,255}, -{"yellow",42,255,255,255,255,0,255}, -{"yellow1",42,255,255,255,255,0,255}, -{"yellow2",42,255,238,238,238,0,255}, -{"yellow3",42,255,205,205,205,0,255}, -{"yellow4",42,255,139,139,139,0,255}, -{"yellowgreen",56,192,205,154,205,50,255}, -}; diff --git a/internal/ccall/common/colxlate.c b/internal/ccall/common/colxlate.c deleted file mode 100644 index 3815af5..0000000 --- a/internal/ccall/common/colxlate.c +++ /dev/null @@ -1,567 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - - -#include -#ifdef _WIN32 -#include -#include -#include "compat.h" -#endif -#include -#include - -#include "arith.h" -#include "color.h" -#include "colorprocs.h" -#include "colortbl.h" -#include "memory.h" - -static char* colorscheme; - -#ifdef _MSC_VER -extern int strcasecmp(const char *s1, const char *s2); -extern int strncasecmp(const char *s1, const char *s2, unsigned int n); -#endif - - -static void hsv2rgb(double h, double s, double v, - double *r, double *g, double *b) -{ - int i; - double f, p, q, t; - - if (s <= 0.0) { /* achromatic */ - *r = v; - *g = v; - *b = v; - } else { - if (h >= 1.0) - h = 0.0; - h = 6.0 * h; - i = (int) h; - f = h - (double) i; - p = v * (1 - s); - q = v * (1 - (s * f)); - t = v * (1 - (s * (1 - f))); - switch (i) { - case 0: - *r = v; - *g = t; - *b = p; - break; - case 1: - *r = q; - *g = v; - *b = p; - break; - case 2: - *r = p; - *g = v; - *b = t; - break; - case 3: - *r = p; - *g = q; - *b = v; - break; - case 4: - *r = t; - *g = p; - *b = v; - break; - case 5: - *r = v; - *g = p; - *b = q; - break; - } - } -} - -static void rgb2hsv(double r, double g, double b, - double *h, double *s, double *v) -{ - - double rgbmin, rgbmax; - double rc, bc, gc; - double ht = 0.0, st = 0.0; - - rgbmin = MIN(r, MIN(g, b)); - rgbmax = MAX(r, MAX(g, b)); - - if (rgbmax > 0.0) - st = (rgbmax - rgbmin) / rgbmax; - - if (st > 0.0) { - rc = (rgbmax - r) / (rgbmax - rgbmin); - gc = (rgbmax - g) / (rgbmax - rgbmin); - bc = (rgbmax - b) / (rgbmax - rgbmin); - if (r == rgbmax) - ht = bc - gc; - else if (g == rgbmax) - ht = 2 + rc - bc; - else if (b == rgbmax) - ht = 4 + gc - rc; - ht = ht * 60.0; - if (ht < 0.0) - ht += 360.0; - } - *h = ht / 360.0; - *v = rgbmax; - *s = st; -} - -static void rgb2cmyk(double r, double g, double b, double *c, double *m, - double *y, double *k) -{ - *c = 1.0 - r; - *m = 1.0 - g; - *y = 1.0 - b; - *k = *c < *m ? *c : *m; - *k = *y < *k ? *y : *k; - *c -= *k; - *m -= *k; - *y -= *k; -} - -static int colorcmpf(const void *p0, const void *p1) -{ - return strcasecmp(((hsvrgbacolor_t *) p0)->name, ((hsvrgbacolor_t *) p1)->name); -} - -char *canontoken(char *str) -{ - static unsigned char *canon; - static size_t allocated; - unsigned char c, *p, *q; - size_t len; - - p = (unsigned char *) str; - len = strlen(str); - if (len >= allocated) { - allocated = len + 1 + 10; - canon = grealloc(canon, allocated); - if (!canon) - return NULL; - } - q = (unsigned char *) canon; - while ((c = *p++)) { - /* if (isalnum(c) == FALSE) */ - /* continue; */ - if (isupper(c)) - c = (unsigned char) tolower(c); - *q++ = c; - } - *q = '\0'; - return (char*)canon; -} - -/* fullColor: - * Return "/prefix/str" - */ -static char* fullColor (char* prefix, char* str) -{ - static char *fulls; - static size_t allocated; - size_t len = strlen(prefix) + strlen(str) + 3; - - if (len >= allocated) { - allocated = len + 10; - fulls = grealloc(fulls, allocated); - } - sprintf (fulls, "/%s/%s", prefix, str); - return fulls; -} - -/* resolveColor: - * Resolve input color str allowing color scheme namespaces. - * 0) "black" => "black" - * "white" => "white" - * "lightgrey" => "lightgrey" - * NB: This is something of a hack due to the remaining codegen. - * Once these are gone, this case could be removed and all references - * to "black" could be replaced by "/X11/black". - * 1) No initial / => - * if colorscheme is defined and no "X11", return /colorscheme/str - * else return str - * 2) One initial / => return str+1 - * 3) Two initial /'s => - * a) If colorscheme is defined and not "X11", return /colorscheme/(str+2) - * b) else return (str+2) - * 4) Two /'s, not both initial => return str. - * - * Note that 1), 2), and 3b) allow the default X11 color scheme. - * - * In other words, - * xxx => /colorscheme/xxx if colorscheme is defined and not "X11" - * xxx => xxx otherwise - * /xxx => xxx - * /X11/yyy => yyy - * /xxx/yyy => /xxx/yyy - * //yyy => /colorscheme/yyy if colorscheme is defined and not "X11" - * //yyy => yyy otherwise - * - * At present, no other error checking is done. For example, - * yyy could be "". This will be caught later. - */ - -#define DFLT_SCHEME "X11/" /* Must have final '/' */ -#define DFLT_SCHEME_LEN ((sizeof(DFLT_SCHEME)-1)/sizeof(char)) -#define ISNONDFLT(s) ((s) && *(s) && strncasecmp(DFLT_SCHEME, s, DFLT_SCHEME_LEN-1)) - -static char* resolveColor (char* str) -{ - char* s; - char* ss; /* second slash */ - char* c2; /* second char */ - - if ((*str == 'b') || !strncmp(str+1,"lack",4)) return str; - if ((*str == 'w') || !strncmp(str+1,"hite",4)) return str; - if ((*str == 'l') || !strncmp(str+1,"ightgrey",8)) return str; - if (*str == '/') { /* if begins with '/' */ - c2 = str+1; - if ((ss = strchr(c2, '/'))) { /* if has second '/' */ - if (*c2 == '/') { /* if second '/' is second character */ - /* Do not compare against final '/' */ - if (ISNONDFLT(colorscheme)) - s = fullColor (colorscheme, c2+1); - else - s = c2+1; - } - else if (strncasecmp(DFLT_SCHEME, c2, DFLT_SCHEME_LEN)) s = str; - else s = ss + 1; - } - else s = c2; - } - else if (ISNONDFLT(colorscheme)) s = fullColor (colorscheme, str); - else s = str; - return canontoken(s); -} - -int colorxlate(char *str, gvcolor_t * color, color_type_t target_type) -{ - static hsvrgbacolor_t *last; - static unsigned char *canon; - static size_t allocated; - unsigned char *p, *q; - hsvrgbacolor_t fake; - unsigned char c; - double H, S, V, A, R, G, B; - double C, M, Y, K; - unsigned int r, g, b, a; - size_t len; - int rc; - - color->type = target_type; - - rc = COLOR_OK; - for (; *str == ' '; str++); /* skip over any leading whitespace */ - p = (unsigned char *) str; - - /* test for rgb value such as: "#ff0000" - or rgba value such as "#ff000080" */ - a = 255; /* default alpha channel value=opaque in case not supplied */ - if ((*p == '#') - && (sscanf((char *) p, "#%2x%2x%2x%2x", &r, &g, &b, &a) >= 3)) { - switch (target_type) { - case HSVA_DOUBLE: - R = (double) r / 255.0; - G = (double) g / 255.0; - B = (double) b / 255.0; - A = (double) a / 255.0; - rgb2hsv(R, G, B, &H, &S, &V); - color->u.HSVA[0] = H; - color->u.HSVA[1] = S; - color->u.HSVA[2] = V; - color->u.HSVA[3] = A; - break; - case RGBA_BYTE: - color->u.rgba[0] = r; - color->u.rgba[1] = g; - color->u.rgba[2] = b; - color->u.rgba[3] = a; - break; - case CMYK_BYTE: - R = (double) r / 255.0; - G = (double) g / 255.0; - B = (double) b / 255.0; - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C *255; - color->u.cmyk[1] = (int) M *255; - color->u.cmyk[2] = (int) Y *255; - color->u.cmyk[3] = (int) K *255; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = r * 65535 / 255; - color->u.rrggbbaa[1] = g * 65535 / 255; - color->u.rrggbbaa[2] = b * 65535 / 255; - color->u.rrggbbaa[3] = a * 65535 / 255; - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = (double) r / 255.0; - color->u.RGBA[1] = (double) g / 255.0; - color->u.RGBA[2] = (double) b / 255.0; - color->u.RGBA[3] = (double) a / 255.0; - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - - /* test for hsv value such as: ".6,.5,.3" */ - if (((c = *p) == '.') || isdigit(c)) { - len = strlen((char*)p); - if (len >= allocated) { - allocated = len + 1 + 10; - canon = grealloc(canon, allocated); - if (! canon) { - rc = COLOR_MALLOC_FAIL; - return rc; - } - } - q = canon; - while ((c = *p++)) { - if (c == ',') - c = ' '; - *q++ = c; - } - *q = '\0'; - - if (sscanf((char *) canon, "%lf%lf%lf", &H, &S, &V) == 3) { - /* clip to reasonable values */ - H = MAX(MIN(H, 1.0), 0.0); - S = MAX(MIN(S, 1.0), 0.0); - V = MAX(MIN(V, 1.0), 0.0); - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = H; - color->u.HSVA[1] = S; - color->u.HSVA[2] = V; - color->u.HSVA[3] = 1.0; /* opaque */ - break; - case RGBA_BYTE: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.rgba[0] = (int) (R * 255); - color->u.rgba[1] = (int) (G * 255); - color->u.rgba[2] = (int) (B * 255); - color->u.rgba[3] = 255; /* opaque */ - break; - case CMYK_BYTE: - hsv2rgb(H, S, V, &R, &G, &B); - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C *255; - color->u.cmyk[1] = (int) M *255; - color->u.cmyk[2] = (int) Y *255; - color->u.cmyk[3] = (int) K *255; - break; - case RGBA_WORD: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.rrggbbaa[0] = (int) (R * 65535); - color->u.rrggbbaa[1] = (int) (G * 65535); - color->u.rrggbbaa[2] = (int) (B * 65535); - color->u.rrggbbaa[3] = 65535; /* opaque */ - break; - case RGBA_DOUBLE: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.RGBA[0] = R; - color->u.RGBA[1] = G; - color->u.RGBA[2] = B; - color->u.RGBA[3] = 1.0; /* opaque */ - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - } - - /* test for known color name (generic, not renderer specific known names) */ - fake.name = resolveColor(str); - if (!fake.name) - return COLOR_MALLOC_FAIL; - if ((last == NULL) - || (last->name[0] != fake.name[0]) - || (strcmp(last->name, fake.name))) { - last = (hsvrgbacolor_t *) bsearch((void *) &fake, - (void *) color_lib, - sizeof(color_lib) / - sizeof(hsvrgbacolor_t), sizeof(fake), - colorcmpf); - } - if (last != NULL) { - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = ((double) last->h) / 255.0; - color->u.HSVA[1] = ((double) last->s) / 255.0; - color->u.HSVA[2] = ((double) last->v) / 255.0; - color->u.HSVA[3] = ((double) last->a) / 255.0; - break; - case RGBA_BYTE: - color->u.rgba[0] = last->r; - color->u.rgba[1] = last->g; - color->u.rgba[2] = last->b; - color->u.rgba[3] = last->a; - break; - case CMYK_BYTE: - R = (last->r) / 255.0; - G = (last->g) / 255.0; - B = (last->b) / 255.0; - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C * 255; - color->u.cmyk[1] = (int) M * 255; - color->u.cmyk[2] = (int) Y * 255; - color->u.cmyk[3] = (int) K * 255; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = last->r * 65535 / 255; - color->u.rrggbbaa[1] = last->g * 65535 / 255; - color->u.rrggbbaa[2] = last->b * 65535 / 255; - color->u.rrggbbaa[3] = last->a * 65535 / 255; - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = last->r / 255.0; - color->u.RGBA[1] = last->g / 255.0; - color->u.RGBA[2] = last->b / 255.0; - color->u.RGBA[3] = last->a / 255.0; - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - - /* if we're still here then we failed to find a valid color spec */ - rc = COLOR_UNKNOWN; - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = color->u.HSVA[1] = color->u.HSVA[2] = 0.0; - color->u.HSVA[3] = 1.0; /* opaque */ - break; - case RGBA_BYTE: - color->u.rgba[0] = color->u.rgba[1] = color->u.rgba[2] = 0; - color->u.rgba[3] = 255; /* opaque */ - break; - case CMYK_BYTE: - color->u.cmyk[0] = - color->u.cmyk[1] = color->u.cmyk[2] = color->u.cmyk[3] = 0; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = color->u.rrggbbaa[1] = color->u.rrggbbaa[2] = 0; - color->u.rrggbbaa[3] = 65535; /* opaque */ - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = color->u.RGBA[1] = color->u.RGBA[2] = 0.0; - color->u.RGBA[3] = 1.0; /* opaque */ - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; -} - -static void rgba_wordToByte (int* rrggbbaa, unsigned char* rgba) -{ - int i; - - for (i = 0; i < 4; i++) { - rgba[i] = rrggbbaa[i] * 255 / 65535; - } -} - -static void rgba_dblToByte (double* RGBA, unsigned char* rgba) -{ - int i; - - for (i = 0; i < 4; i++) { - rgba[i] = (unsigned char)(RGBA[i] * 255); - } -} - -/* colorCvt: - * Color format converter. - * Except for the trivial case, it converts the input color to a string - * representation and then calls colorxlate. - * ncolor must point to a gvcolor_t struct with type specifying the desired - * output type. - */ -int colorCvt(gvcolor_t *ocolor, gvcolor_t *ncolor) -{ - int rc; - char buf[BUFSIZ]; - char* s; - unsigned char rgba[4]; - - if (ocolor->type == ncolor->type) { - memcpy (&ncolor->u, &ocolor->u, sizeof(ocolor->u)); - return COLOR_OK; - } - s = buf; - switch (ocolor->type) { - case HSVA_DOUBLE : - sprintf (buf, "%.03f %.03f %.03f %.03f", - ocolor->u.HSVA[0], ocolor->u.HSVA[1], ocolor->u.HSVA[2], ocolor->u.HSVA[3]); - break; - case RGBA_BYTE : - sprintf (buf, "#%02x%02x%02x%02x", - ocolor->u.rgba[0], ocolor->u.rgba[1], ocolor->u.rgba[2], ocolor->u.rgba[3]); - break; - case RGBA_WORD: - rgba_wordToByte (ocolor->u.rrggbbaa, rgba); - sprintf (buf, "#%02x%02x%02x%02x", rgba[0], rgba[1], rgba[2], rgba[3]); - break; - case RGBA_DOUBLE: - rgba_dblToByte (ocolor->u.RGBA, rgba); - sprintf (buf, "#%02x%02x%02x%02x", rgba[0], rgba[1], rgba[2], rgba[3]); - break; - case COLOR_STRING: - s = ocolor->u.string; - break; - case CMYK_BYTE : - /* agerr (AGWARN, "Input color type 'CMYK_BYTE' not supported for conversion\n"); */ - return COLOR_UNKNOWN; - break; - case COLOR_INDEX: - /* agerr (AGWARN, "Input color type 'COLOR_INDEX' not supported for conversion\n"); */ - return COLOR_UNKNOWN; - break; - default: - /* agerr (AGWARN, "Unknown input color type value '%u'\n", ncolor->type); */ - return COLOR_UNKNOWN; - break; - } - rc = colorxlate (s, ncolor, ncolor->type); - return rc; -} - -/* setColorScheme: - * Set current color scheme for resolving names. - */ -void setColorScheme (char* s) -{ - colorscheme = s; -} - - - diff --git a/internal/ccall/common/const.h b/internal/ccall/common/const.h deleted file mode 100644 index 605dabd..0000000 --- a/internal/ccall/common/const.h +++ /dev/null @@ -1,294 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_CONST_H -#define GV_CONST_H - -#define SMALLBUF 128 -#define LPAREN '(' -#define RPAREN ')' -#define LBRACE '{' -#define RBRACE '}' - -/* node,edge types */ -#ifdef NORMAL -#undef NORMAL -#endif -#define NORMAL 0 /* an original input node */ -#define VIRTUAL 1 /* virtual nodes in long edge chains */ -#define SLACKNODE 2 /* encode edges in node position phase */ -#define REVERSED 3 /* reverse of an original edge */ -#define FLATORDER 4 /* for ordered edges */ -#define CLUSTER_EDGE 5 /* for ranking clusters */ -#define IGNORED 6 /* concentrated multi-edges */ - -/* collapsed node classifications */ -#define NOCMD 0 /* default */ -#define SAMERANK 1 /* place on same rank */ -#define MINRANK 2 /* place on "least" rank */ -#define SOURCERANK 3 /* strict version of MINRANK */ -#define MAXRANK 4 /* place on "greatest" rank */ -#define SINKRANK 5 /* strict version of MAXRANK */ -#define LEAFSET 6 /* set of collapsed leaf nodes */ -#define CLUSTER 7 /* set of clustered nodes */ - -/* type of cluster rank assignment */ -#define LOCAL 100 -#define GLOBAL 101 -#define NOCLUST 102 - -/* default attributes */ -#define DEFAULT_COLOR "black" -#define DEFAULT_ACTIVEPENCOLOR "#808080" -#define DEFAULT_ACTIVEFILLCOLOR "#fcfcfc" -#define DEFAULT_ACTIVEFONTCOLOR "black" -#define DEFAULT_SELECTEDPENCOLOR "#303030" -#define DEFAULT_SELECTEDFILLCOLOR "#e8e8e8" -#define DEFAULT_SELECTEDFONTCOLOR "black" -#define DEFAULT_DELETEDPENCOLOR "#e0e0e0" -#define DEFAULT_DELETEDFILLCOLOR "#f0f0f0" -#define DEFAULT_DELETEDFONTCOLOR "darkgrey" -#define DEFAULT_VISITEDPENCOLOR "#101010" -#define DEFAULT_VISITEDFILLCOLOR "#f8f8f8" -#define DEFAULT_VISITEDFONTCOLOR "black" -#define DEFAULT_FONTSIZE 14.0 -#define DEFAULT_LABEL_FONTSIZE 11.0 /* for head/taillabel */ -#define MIN_FONTSIZE 1.0 -#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#define DEFAULT_FONTNAME "TimesNewRomanPSMT" -#else -#define DEFAULT_FONTNAME "Times-Roman" -#endif -#define DEFAULT_FILL "lightgrey" -#define LINESPACING 1.20 - -#define DEFAULT_NODEHEIGHT 0.5 -#define MIN_NODEHEIGHT 0.02 -#define DEFAULT_NODEWIDTH 0.75 -#define MIN_NODEWIDTH 0.01 -#define DEFAULT_NODESHAPE "ellipse" - -#define NODENAME_ESC "\\N" - -#define DEFAULT_LAYERSEP ":\t " -#define DEFAULT_LAYERLISTSEP "," - -#define DEFAULT_NODESEP 0.25 -#define MIN_NODESEP 0.02 -#define DEFAULT_RANKSEP 0.5 -#define MIN_RANKSEP 0.02 - - -/* default margin for paged formats such as PostScript - in points = 0.5in */ -#define DEFAULT_PRINT_MARGIN 36 -/* default margin for embedded formats such as PNG - in points */ -#define DEFAULT_EMBED_MARGIN 0 -/* default padding around graph - in points */ -#define DEFAULT_GRAPH_PAD 4 - -#define SELF_EDGE_SIZE 18 -#define MC_SCALE 256 /* for mincross */ - -#define PORT_LABEL_DISTANCE 10 -#define PORT_LABEL_ANGLE -25 /* degrees; pos is CCW, neg is CW */ - -/* default polygon sample size for overlap removal and maps */ -#define DFLT_SAMPLE 20 - -/* arrow types */ -#define ARR_NONE 0 - -/* sides (e.g. of cluster margins) */ -#define BOTTOM_IX 0 -#define RIGHT_IX 1 -#define TOP_IX 2 -#define LEFT_IX 3 - -/* sides of boxes for SHAPE_path */ -#define BOTTOM (1< -#include -#include -#include - -#define MAX(a,b) ((a)>(b)?(a):(b)) -#define MIN(a,b) ((a)<(b)?(a):(b)) - -#define NEW(t) ((t*)calloc(1,sizeof(t))) -#define N_NEW(n,t) ((t*)calloc(n,sizeof(t))) - -#define PI 3.14159265358979323846 - -#define TRUE 1 -#define FALSE 0 -typedef unsigned char boolean; - -typedef struct pointf_s { - double x, y; -} pointf; -typedef struct Ppoly_t { - pointf *ps; - int pn; -} Ppoly_t; - -typedef Ppoly_t Ppolyline_t; -#else -#include "render.h" -#include "pathplan.h" -#endif - -#define TWOPI (2*M_PI) - -typedef struct { - double cx, cy; /* center */ - double a, b; /* semi-major and -minor axes */ - - /* Orientation of the major axis with respect to the x axis. */ - double theta, cosTheta, sinTheta; - - /* Start and end angles of the arc. */ - double eta1, eta2; - - /* Position of the start and end points. */ - double x1, y1, x2, y2; - - /* Position of the foci. */ - double xF1, yF1, xF2, yF2; - - /* x of the leftmost point of the arc. */ - double xLeft; - - /* y of the highest point of the arc. */ - double yUp; - - /* Horizontal width and vertical height of the arc. */ - double width, height; - - double f, e2, g, g2; -} ellipse_t; - -static void computeFoci(ellipse_t * ep) -{ - double d = sqrt(ep->a * ep->a - ep->b * ep->b); - double dx = d * ep->cosTheta; - double dy = d * ep->sinTheta; - - ep->xF1 = ep->cx - dx; - ep->yF1 = ep->cy - dy; - ep->xF2 = ep->cx + dx; - ep->yF2 = ep->cy + dy; -} - - /* Compute the locations of the endpoints. */ -static void computeEndPoints(ellipse_t * ep) -{ - double aCosEta1 = ep->a * cos(ep->eta1); - double bSinEta1 = ep->b * sin(ep->eta1); - double aCosEta2 = ep->a * cos(ep->eta2); - double bSinEta2 = ep->b * sin(ep->eta2); - - // start point - ep->x1 = ep->cx + aCosEta1 * ep->cosTheta - bSinEta1 * ep->sinTheta; - ep->y1 = ep->cy + aCosEta1 * ep->sinTheta + bSinEta1 * ep->cosTheta; - - // end point - ep->x2 = ep->cx + aCosEta2 * ep->cosTheta - bSinEta2 * ep->sinTheta; - ep->y2 = ep->cy + aCosEta2 * ep->sinTheta + bSinEta2 * ep->cosTheta; -} - - /* Compute the bounding box. */ -static void computeBounds(ellipse_t * ep) -{ - double bOnA = ep->b / ep->a; - double etaXMin, etaXMax, etaYMin, etaYMax; - - if (fabs(ep->sinTheta) < 0.1) { - double tanTheta = ep->sinTheta / ep->cosTheta; - if (ep->cosTheta < 0) { - etaXMin = -atan(tanTheta * bOnA); - etaXMax = etaXMin + M_PI; - etaYMin = 0.5 * M_PI - atan(tanTheta / bOnA); - etaYMax = etaYMin + M_PI; - } else { - etaXMax = -atan(tanTheta * bOnA); - etaXMin = etaXMax - M_PI; - etaYMax = 0.5 * M_PI - atan(tanTheta / bOnA); - etaYMin = etaYMax - M_PI; - } - } else { - double invTanTheta = ep->cosTheta / ep->sinTheta; - if (ep->sinTheta < 0) { - etaXMax = 0.5 * M_PI + atan(invTanTheta / bOnA); - etaXMin = etaXMax - M_PI; - etaYMin = atan(invTanTheta * bOnA); - etaYMax = etaYMin + M_PI; - } else { - etaXMin = 0.5 * M_PI + atan(invTanTheta / bOnA); - etaXMax = etaXMin + M_PI; - etaYMax = atan(invTanTheta * bOnA); - etaYMin = etaYMax - M_PI; - } - } - - etaXMin -= (TWOPI * floor((etaXMin - ep->eta1) / TWOPI)); - etaYMin -= (TWOPI * floor((etaYMin - ep->eta1) / TWOPI)); - etaXMax -= (TWOPI * floor((etaXMax - ep->eta1) / TWOPI)); - etaYMax -= (TWOPI * floor((etaYMax - ep->eta1) / TWOPI)); - - ep->xLeft = (etaXMin <= ep->eta2) - ? (ep->cx + ep->a * cos(etaXMin) * ep->cosTheta - - ep->b * sin(etaXMin) * ep->sinTheta) - : MIN(ep->x1, ep->x2); - ep->yUp = (etaYMin <= ep->eta2) - ? (ep->cy + ep->a * cos(etaYMin) * ep->sinTheta + - ep->b * sin(etaYMin) * ep->cosTheta) - : MIN(ep->y1, ep->y2); - ep->width = ((etaXMax <= ep->eta2) - ? (ep->cx + ep->a * cos(etaXMax) * ep->cosTheta - - ep->b * sin(etaXMax) * ep->sinTheta) - : MAX(ep->x1, ep->x2)) - ep->xLeft; - ep->height = ((etaYMax <= ep->eta2) - ? (ep->cy + ep->a * cos(etaYMax) * ep->sinTheta + - ep->b * sin(etaYMax) * ep->cosTheta) - : MAX(ep->y1, ep->y2)) - ep->yUp; - -} - -static void -initEllipse(ellipse_t * ep, double cx, double cy, double a, double b, - double theta, double lambda1, double lambda2) -{ - ep->cx = cx; - ep->cy = cy; - ep->a = a; - ep->b = b; - ep->theta = theta; - - ep->eta1 = atan2(sin(lambda1) / b, cos(lambda1) / a); - ep->eta2 = atan2(sin(lambda2) / b, cos(lambda2) / a); - ep->cosTheta = cos(theta); - ep->sinTheta = sin(theta); - - // make sure we have eta1 <= eta2 <= eta1 + 2*PI - ep->eta2 -= TWOPI * floor((ep->eta2 - ep->eta1) / TWOPI); - - // the preceding correction fails if we have exactly eta2 - eta1 = 2*PI - // it reduces the interval to zero length - if ((lambda2 - lambda1 > M_PI) && (ep->eta2 - ep->eta1 < M_PI)) { - ep->eta2 += TWOPI; - } - - computeFoci(ep); - computeEndPoints(ep); - computeBounds(ep); - - /* Flatness parameters */ - ep->f = (ep->a - ep->b) / ep->a; - ep->e2 = ep->f * (2.0 - ep->f); - ep->g = 1.0 - ep->f; - ep->g2 = ep->g * ep->g; -} - -typedef double erray_t[2][4][4]; - - // coefficients for error estimation - // while using quadratic Bezier curves for approximation - // 0 < b/a < 1/4 -static erray_t coeffs2Low = { - { - {3.92478, -13.5822, -0.233377, 0.0128206}, - {-1.08814, 0.859987, 0.000362265, 0.000229036}, - {-0.942512, 0.390456, 0.0080909, 0.00723895}, - {-0.736228, 0.20998, 0.0129867, 0.0103456} - }, - { - {-0.395018, 6.82464, 0.0995293, 0.0122198}, - {-0.545608, 0.0774863, 0.0267327, 0.0132482}, - {0.0534754, -0.0884167, 0.012595, 0.0343396}, - {0.209052, -0.0599987, -0.00723897, 0.00789976} - } -}; - - // coefficients for error estimation - // while using quadratic Bezier curves for approximation - // 1/4 <= b/a <= 1 -static erray_t coeffs2High = { - { - {0.0863805, -11.5595, -2.68765, 0.181224}, - {0.242856, -1.81073, 1.56876, 1.68544}, - {0.233337, -0.455621, 0.222856, 0.403469}, - {0.0612978, -0.104879, 0.0446799, 0.00867312} - }, - { - {0.028973, 6.68407, 0.171472, 0.0211706}, - {0.0307674, -0.0517815, 0.0216803, -0.0749348}, - {-0.0471179, 0.1288, -0.0781702, 2.0}, - {-0.0309683, 0.0531557, -0.0227191, 0.0434511} - } -}; - - // safety factor to convert the "best" error approximation - // into a "max bound" error -static double safety2[] = { - 0.02, 2.83, 0.125, 0.01 -}; - - // coefficients for error estimation - // while using cubic Bezier curves for approximation - // 0 < b/a < 1/4 -static erray_t coeffs3Low = { - { - {3.85268, -21.229, -0.330434, 0.0127842}, - {-1.61486, 0.706564, 0.225945, 0.263682}, - {-0.910164, 0.388383, 0.00551445, 0.00671814}, - {-0.630184, 0.192402, 0.0098871, 0.0102527} - }, - { - {-0.162211, 9.94329, 0.13723, 0.0124084}, - {-0.253135, 0.00187735, 0.0230286, 0.01264}, - {-0.0695069, -0.0437594, 0.0120636, 0.0163087}, - {-0.0328856, -0.00926032, -0.00173573, 0.00527385} - } -}; - - // coefficients for error estimation - // while using cubic Bezier curves for approximation - // 1/4 <= b/a <= 1 -static erray_t coeffs3High = { - { - {0.0899116, -19.2349, -4.11711, 0.183362}, - {0.138148, -1.45804, 1.32044, 1.38474}, - {0.230903, -0.450262, 0.219963, 0.414038}, - {0.0590565, -0.101062, 0.0430592, 0.0204699} - }, - { - {0.0164649, 9.89394, 0.0919496, 0.00760802}, - {0.0191603, -0.0322058, 0.0134667, -0.0825018}, - {0.0156192, -0.017535, 0.00326508, -0.228157}, - {-0.0236752, 0.0405821, -0.0173086, 0.176187} - } -}; - - // safety factor to convert the "best" error approximation - // into a "max bound" error -static double safety3[] = { - 0.001, 4.98, 0.207, 0.0067 -}; - -/* Compute the value of a rational function. - * This method handles rational functions where the numerator is - * quadratic and the denominator is linear - */ -#define RationalFunction(x,c) ((x * (x * c[0] + c[1]) + c[2]) / (x + c[3])) - -/* Estimate the approximation error for a sub-arc of the instance. - * degree specifies degree of the Bezier curve to use (1, 2 or 3) - * tA and tB give the start and end angle of the subarc - * Returns upper bound of the approximation error between the Bezier - * curve and the real ellipse - */ -static double -estimateError(ellipse_t * ep, int degree, double etaA, double etaB) -{ - double c0, c1, eta = 0.5 * (etaA + etaB); - - if (degree < 2) { - - // start point - double aCosEtaA = ep->a * cos(etaA); - double bSinEtaA = ep->b * sin(etaA); - double xA = - ep->cx + aCosEtaA * ep->cosTheta - bSinEtaA * ep->sinTheta; - double yA = - ep->cy + aCosEtaA * ep->sinTheta + bSinEtaA * ep->cosTheta; - - // end point - double aCosEtaB = ep->a * cos(etaB); - double bSinEtaB = ep->b * sin(etaB); - double xB = - ep->cx + aCosEtaB * ep->cosTheta - bSinEtaB * ep->sinTheta; - double yB = - ep->cy + aCosEtaB * ep->sinTheta + bSinEtaB * ep->cosTheta; - - // maximal error point - double aCosEta = ep->a * cos(eta); - double bSinEta = ep->b * sin(eta); - double x = - ep->cx + aCosEta * ep->cosTheta - bSinEta * ep->sinTheta; - double y = - ep->cy + aCosEta * ep->sinTheta + bSinEta * ep->cosTheta; - - double dx = xB - xA; - double dy = yB - yA; - - return fabs(x * dy - y * dx + xB * yA - xA * yB) - / sqrt(dx * dx + dy * dy); - - } else { - - double x = ep->b / ep->a; - double dEta = etaB - etaA; - double cos2 = cos(2 * eta); - double cos4 = cos(4 * eta); - double cos6 = cos(6 * eta); - - // select the right coefficient's set according to degree and b/a - double (*coeffs)[4][4]; - double *safety; - if (degree == 2) { - coeffs = (x < 0.25) ? coeffs2Low : coeffs2High; - safety = safety2; - } else { - coeffs = (x < 0.25) ? coeffs3Low : coeffs3High; - safety = safety3; - } - - c0 = RationalFunction(x, coeffs[0][0]) - + cos2 * RationalFunction(x, coeffs[0][1]) - + cos4 * RationalFunction(x, coeffs[0][2]) - + cos6 * RationalFunction(x, coeffs[0][3]); - - c1 = RationalFunction(x, coeffs[1][0]) - + cos2 * RationalFunction(x, coeffs[1][1]) - + cos4 * RationalFunction(x, coeffs[1][2]) - + cos6 * RationalFunction(x, coeffs[1][3]); - - return RationalFunction(x, safety) * ep->a * exp(c0 + c1 * dEta); - } -} - -/* Non-reentrant code to append points to a Bezier path - * Assume initial call to moveTo to initialize, followed by - * calls to curveTo and lineTo, and finished with endPath. - */ -static int bufsize; - -static void moveTo(Ppolyline_t * path, double x, double y) -{ - bufsize = 100; - path->ps = N_NEW(bufsize, pointf); - path->ps[0].x = x; - path->ps[0].y = y; - path->pn = 1; -} - -static void -curveTo(Ppolyline_t * path, double x1, double y1, - double x2, double y2, double x3, double y3) -{ - if (path->pn + 3 >= bufsize) { - bufsize *= 2; - path->ps = realloc(path->ps, bufsize * sizeof(pointf)); - } - path->ps[path->pn].x = x1; - path->ps[path->pn++].y = y1; - path->ps[path->pn].x = x2; - path->ps[path->pn++].y = y2; - path->ps[path->pn].x = x3; - path->ps[path->pn++].y = y3; -} - -static void lineTo(Ppolyline_t * path, double x, double y) -{ - pointf curp = path->ps[path->pn - 1]; - curveTo(path, curp.x, curp.y, x, y, x, y); -} - -static void endPath(Ppolyline_t * path, boolean close) -{ - if (close) { - pointf p0 = path->ps[0]; - lineTo(path, p0.x, p0.y); - } - - path->ps = realloc(path->ps, path->pn * sizeof(pointf)); - bufsize = 0; -} - -/* genEllipticPath: - * Approximate an elliptical arc via Beziers of given degree - * threshold indicates quality of approximation - * if isSlice is true, the path begins and ends with line segments - * to the center of the ellipse. - * Returned path must be freed by the caller. - */ -static Ppolyline_t *genEllipticPath(ellipse_t * ep, int degree, - double threshold, boolean isSlice) -{ - double dEta; - double etaB; - double cosEtaB; - double sinEtaB; - double aCosEtaB; - double bSinEtaB; - double aSinEtaB; - double bCosEtaB; - double xB; - double yB; - double xBDot; - double yBDot; - double t; - double alpha; - Ppolyline_t *path = NEW(Ppolyline_t); - - // find the number of Bezier curves needed - boolean found = FALSE; - int i, n = 1; - while ((!found) && (n < 1024)) { - double dEta = (ep->eta2 - ep->eta1) / n; - if (dEta <= 0.5 * M_PI) { - double etaB = ep->eta1; - found = TRUE; - for (i = 0; found && (i < n); ++i) { - double etaA = etaB; - etaB += dEta; - found = - (estimateError(ep, degree, etaA, etaB) <= threshold); - } - } - n = n << 1; - } - - dEta = (ep->eta2 - ep->eta1) / n; - etaB = ep->eta1; - - cosEtaB = cos(etaB); - sinEtaB = sin(etaB); - aCosEtaB = ep->a * cosEtaB; - bSinEtaB = ep->b * sinEtaB; - aSinEtaB = ep->a * sinEtaB; - bCosEtaB = ep->b * cosEtaB; - xB = ep->cx + aCosEtaB * ep->cosTheta - bSinEtaB * ep->sinTheta; - yB = ep->cy + aCosEtaB * ep->sinTheta + bSinEtaB * ep->cosTheta; - xBDot = -aSinEtaB * ep->cosTheta - bCosEtaB * ep->sinTheta; - yBDot = -aSinEtaB * ep->sinTheta + bCosEtaB * ep->cosTheta; - - if (isSlice) { - moveTo(path, ep->cx, ep->cy); - lineTo(path, xB, yB); - } else { - moveTo(path, xB, yB); - } - - t = tan(0.5 * dEta); - alpha = sin(dEta) * (sqrt(4 + 3 * t * t) - 1) / 3; - - for (i = 0; i < n; ++i) { - - double xA = xB; - double yA = yB; - double xADot = xBDot; - double yADot = yBDot; - - etaB += dEta; - cosEtaB = cos(etaB); - sinEtaB = sin(etaB); - aCosEtaB = ep->a * cosEtaB; - bSinEtaB = ep->b * sinEtaB; - aSinEtaB = ep->a * sinEtaB; - bCosEtaB = ep->b * cosEtaB; - xB = ep->cx + aCosEtaB * ep->cosTheta - bSinEtaB * ep->sinTheta; - yB = ep->cy + aCosEtaB * ep->sinTheta + bSinEtaB * ep->cosTheta; - xBDot = -aSinEtaB * ep->cosTheta - bCosEtaB * ep->sinTheta; - yBDot = -aSinEtaB * ep->sinTheta + bCosEtaB * ep->cosTheta; - - if (degree == 1) { - lineTo(path, xB, yB); -#if DO_QUAD - } else if (degree == 2) { - double k = (yBDot * (xB - xA) - xBDot * (yB - yA)) - / (xADot * yBDot - yADot * xBDot); - quadTo(path, (xA + k * xADot), (yA + k * yADot), xB, yB); -#endif - } else { - curveTo(path, (xA + alpha * xADot), (yA + alpha * yADot), - (xB - alpha * xBDot), (yB - alpha * yBDot), xB, yB); - } - - } - - endPath(path, isSlice); - - return path; -} - -/* ellipticWedge: - * Return a cubic Bezier for an elliptical wedge, with center ctr, x and y - * semi-axes xsemi and ysemi, start angle angle0 and end angle angle1. - * This includes beginning and ending line segments to the ellipse center. - * Calling function must free storage of returned path. - */ -Ppolyline_t *ellipticWedge(pointf ctr, double xsemi, double ysemi, - double angle0, double angle1) -{ - ellipse_t ell; - Ppolyline_t *pp; - - initEllipse(&ell, ctr.x, ctr.y, xsemi, ysemi, 0, angle0, angle1); - pp = genEllipticPath(&ell, 3, 0.00001, 1); - return pp; -} - -#ifdef STANDALONE -main() -{ - ellipse_t ell; - Ppolyline_t *pp; - int i; - - initEllipse(&ell, 200, 200, 100, 50, 0, M_PI / 4, 3 * M_PI / 2); - pp = genEllipticPath(&ell, 3, 0.00001, 1); - - printf("newpath %.02lf %.02lf moveto\n", pp->ps[0].x, pp->ps[0].y); - for (i = 1; i < pp->pn; i += 3) { - printf("%.02lf %.02lf %.02lf %.02lf %.02lf %.02lf curveto\n", - pp->ps[i].x, pp->ps[i].y, - pp->ps[i + 1].x, pp->ps[i + 1].y, - pp->ps[i + 2].x, pp->ps[i + 2].y); - } - printf("stroke showpage\n"); - -} -#endif diff --git a/internal/ccall/common/emit.c b/internal/ccall/common/emit.c deleted file mode 100644 index 6ca940d..0000000 --- a/internal/ccall/common/emit.c +++ /dev/null @@ -1,4257 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * graphics code generator - */ - -#include "config.h" - -#include -#include -#include -#include "render.h" -#include "agxbuf.h" -#include "htmltable.h" -#include "gvc.h" -#include "cdt.h" -#include "xdot.h" - -#ifdef _WIN32 -#define strtok_r strtok_s -#endif - -#define P2RECT(p, pr, sx, sy) (pr[0].x = p.x - sx, pr[0].y = p.y - sy, pr[1].x = p.x + sx, pr[1].y = p.y + sy) -#define FUZZ 3 -#define EPSILON .0001 - -typedef struct { - xdot_op op; - boxf bb; - textspan_t* span; -} exdot_op; - -void* init_xdot (Agraph_t* g) -{ - char* p; - xdot* xd = NULL; - - if (!((p = agget(g, "_background")) && p[0])) { - if (!((p = agget(g, "_draw_")) && p[0])) { - return NULL; - } - } -#ifdef DEBUG - if (Verbose) { - start_timer(); - } -#endif - xd = parseXDotF (p, NULL, sizeof (exdot_op)); - - if (!xd) { - agerr(AGWARN, "Could not parse \"_background\" attribute in graph %s\n", agnameof(g)); - agerr(AGPREV, " \"%s\"\n", p); - } -#ifdef DEBUG - if (Verbose) { - xdot_stats stats; - double et = elapsed_sec(); - statXDot (xd, &stats); - fprintf (stderr, "%d ops %.2f sec\n", stats.cnt, et); - fprintf (stderr, "%d polygons %d points\n", stats.n_polygon, stats.n_polygon_pts); - fprintf (stderr, "%d polylines %d points\n", stats.n_polyline, stats.n_polyline_pts); - fprintf (stderr, "%d beziers %d points\n", stats.n_bezier, stats.n_bezier_pts); - fprintf (stderr, "%d ellipses\n", stats.n_ellipse); - fprintf (stderr, "%d texts\n", stats.n_text); - } -#endif - return xd; -} - -static char *defaultlinestyle[3] = { "solid\0", "setlinewidth\0001\0", 0 }; - -/* push empty graphic state for current object */ -obj_state_t* push_obj_state(GVJ_t *job) -{ - obj_state_t *obj, *parent; - - if (! (obj = zmalloc(sizeof(obj_state_t)))) - agerr(AGERR, "no memory from zmalloc()\n"); - - parent = obj->parent = job->obj; - job->obj = obj; - if (parent) { - obj->pencolor = parent->pencolor; /* default styles to parent's style */ - obj->fillcolor = parent->fillcolor; - obj->pen = parent->pen; - obj->fill = parent->fill; - obj->penwidth = parent->penwidth; - obj->gradient_angle = parent->gradient_angle; - obj->stopcolor = parent->stopcolor; - } - else { - /* obj->pencolor = NULL */ - /* obj->fillcolor = NULL */ - obj->pen = PEN_SOLID; - obj->fill = FILL_NONE; - obj->penwidth = PENWIDTH_NORMAL; - } - return obj; -} - -/* pop graphic state of current object */ -void pop_obj_state(GVJ_t *job) -{ - obj_state_t *obj = job->obj; - - assert(obj); - - free(obj->id); - free(obj->url); - free(obj->labelurl); - free(obj->tailurl); - free(obj->headurl); - free(obj->tooltip); - free(obj->labeltooltip); - free(obj->tailtooltip); - free(obj->headtooltip); - free(obj->target); - free(obj->labeltarget); - free(obj->tailtarget); - free(obj->headtarget); - free(obj->url_map_p); - free(obj->url_bsplinemap_p); - free(obj->url_bsplinemap_n); - - job->obj = obj->parent; - free(obj); -} - -/* initMapData: - * Store image map data into job, substituting for node, edge, etc. - * names. - * Return 1 if an assignment was made for url or tooltip or target. - */ -int -initMapData (GVJ_t* job, char* lbl, char* url, char* tooltip, char* target, char *id, - void* gobj) -{ - obj_state_t *obj = job->obj; - int flags = job->flags; - int assigned = 0; - - if ((flags & GVRENDER_DOES_LABELS) && lbl) - obj->label = lbl; - if (flags & GVRENDER_DOES_MAPS) { - obj->id = strdup_and_subst_obj(id, gobj); - if (url && url[0]) { - obj->url = strdup_and_subst_obj(url, gobj); - assigned = 1; - } - } - if (flags & GVRENDER_DOES_TOOLTIPS) { - if (tooltip && tooltip[0]) { - obj->tooltip = strdup_and_subst_obj(tooltip, gobj); - obj->explicit_tooltip = TRUE; - assigned = 1; - } - else if (obj->label) { - obj->tooltip = strdup(obj->label); - assigned = 1; - } - } - if ((flags & GVRENDER_DOES_TARGETS) && target && target[0]) { - obj->target = strdup_and_subst_obj(target, gobj); - assigned = 1; - } - return assigned; -} - -static void -layerPagePrefix (GVJ_t* job, agxbuf* xb) -{ - char buf[128]; /* large enough for 2 decimal 64-bit ints and "page_," */ - if (job->layerNum > 1 && (job->flags & GVDEVICE_DOES_LAYERS)) { - agxbput (xb, job->gvc->layerIDs[job->layerNum]); - agxbputc (xb, '_'); - } - if ((job->pagesArrayElem.x > 0) || (job->pagesArrayElem.y > 0)) { - sprintf (buf, "page%d,%d_", job->pagesArrayElem.x, job->pagesArrayElem.y); - agxbput (xb, buf); - } -} - -/* genObjId: - * Use id of root graph if any, plus kind and internal id of object - */ -char* -getObjId (GVJ_t* job, void* obj, agxbuf* xb) -{ - char* id; - graph_t* root = job->gvc->g; - char* gid = GD_drawing(root)->id; - long idnum = 0; - char* pfx = NULL; - char buf[64]; /* large enough for a decimal 64-bit int */ - - layerPagePrefix (job, xb); - - id = agget(obj, "id"); - if (id && (*id != '\0')) { - agxbput (xb, id); - return agxbuse(xb); - } - - if ((obj != root) && gid) { - agxbput (xb, gid); - agxbputc (xb, '_'); - } - - switch (agobjkind(obj)) { - case AGRAPH: - idnum = AGSEQ(obj); - if (root == obj) - pfx = "graph"; - else - pfx = "clust"; - break; - case AGNODE: - idnum = AGSEQ((Agnode_t*)obj); - pfx = "node"; - break; - case AGEDGE: - idnum = AGSEQ((Agedge_t*)obj); - pfx = "edge"; - break; - } - - agxbput (xb, pfx); - sprintf (buf, "%ld", idnum); - agxbput (xb, buf); - - return agxbuse(xb); -} - -/* interpretCRNL: - * Map "\n" to ^J, "\r" to ^M and "\l" to ^J. - * Map "\\" to backslash. - * Map "\x" to x. - * Mapping is done in place. - * Return input string. - */ - -static char* -interpretCRNL (char* ins) -{ - char* rets = ins; - char* outs = ins; - char c; - boolean backslash_seen = FALSE; - - while ((c = *ins++)) { - if (backslash_seen) { - switch (c) { - case 'n' : - case 'l' : - *outs++ = '\n'; - break; - case 'r' : - *outs++ = '\r'; - break; - default : - *outs++ = c; - break; - } - backslash_seen = FALSE; - } - else { - if (c == '\\') - backslash_seen = TRUE; - else - *outs++ = c; - } - } - *outs = '\0'; - return rets; -} - -/* preprocessTooltip: - * Tooltips are a weak form of escString, so we expect object substitution - * and newlines to be handled. The former occurs in initMapData. Here we - * map "\r", "\l" and "\n" to newlines. (We don't try to handle alignment - * as in real labels.) To make things uniform when the - * tooltip is emitted latter as visible text, we also convert HTML escape - * sequences into UTF8. This is already occurring when tooltips are input - * via HTML-like tables. - */ -static char* -preprocessTooltip(char* s, void* gobj) -{ - Agraph_t* g = agroot(gobj); - int charset = GD_charset(g); - char* news; - switch (charset) { - case CHAR_LATIN1: - news = latin1ToUTF8(s); - break; - default: /* UTF8 */ - news = htmlEntityUTF8(s, g); - break; - } - - return interpretCRNL (news); -} - -static void -initObjMapData (GVJ_t* job, textlabel_t *lab, void* gobj) -{ - char* lbl; - char* url = agget(gobj, "href"); - char* tooltip = agget(gobj, "tooltip"); - char* target = agget(gobj, "target"); - char* id; - unsigned char buf[SMALLBUF]; - agxbuf xb; - - agxbinit(&xb, SMALLBUF, buf); - - if (lab) lbl = lab->text; - else lbl = NULL; - if (!url || !*url) /* try URL as an alias for href */ - url = agget(gobj, "URL"); - id = getObjId (job, gobj, &xb); - if (tooltip) - tooltip = preprocessTooltip (tooltip, gobj); - initMapData (job, lbl, url, tooltip, target, id, gobj); - - free (tooltip); - agxbfree(&xb); -} - -static void _map_point(GVJ_t *job, pointf pf) -{ - obj_state_t *obj = job->obj; - int flags = job->flags; - pointf *p; - - if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) { - if (flags & GVRENDER_DOES_MAP_RECTANGLE) { - obj->url_map_shape = MAP_RECTANGLE; - obj->url_map_n = 2; - } - else { - obj->url_map_shape = MAP_POLYGON; - obj->url_map_n = 4; - } - free(obj->url_map_p); - obj->url_map_p = p = N_NEW(obj->url_map_n, pointf); - P2RECT(pf, p, FUZZ, FUZZ); - if (! (flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, p, p, 2); - if (! (flags & GVRENDER_DOES_MAP_RECTANGLE)) - rect2poly(p); - } -} - -static char **checkClusterStyle(graph_t* sg, int *flagp) -{ - char *style; - char **pstyle = 0; - int istyle = 0; - - if (((style = agget(sg, "style")) != 0) && style[0]) { - char **pp; - char **qp; - char *p; - pp = pstyle = parse_style(style); - while ((p = *pp)) { - if (strcmp(p, "filled") == 0) { - istyle |= FILLED; - pp++; - }else if (strcmp(p, "radial") == 0) { - istyle |= (FILLED | RADIAL); - qp = pp; /* remove rounded from list passed to renderer */ - do { - qp++; - *(qp-1) = *qp; - } while (*qp); - }else if (strcmp(p, "striped") == 0) { - istyle |= STRIPED; - qp = pp; /* remove rounded from list passed to renderer */ - do { - qp++; - *(qp-1) = *qp; - } while (*qp); - }else if (strcmp(p, "rounded") == 0) { - istyle |= ROUNDED; - qp = pp; /* remove rounded from list passed to renderer */ - do { - qp++; - *(qp-1) = *qp; - } while (*qp); - } else pp++; - } - } - - *flagp = istyle; - return pstyle; -} - -typedef struct { - char* color; /* segment color */ - float t; /* segment size >= 0 */ - boolean hasFraction; /* true if color explicitly specifies its fraction */ -} colorseg_t; -/* Sum of segment sizes should add to 1 */ -typedef struct { - int numc; /* number of used segments in segs; may include segs with t == 0 */ - char* base; /* storage of color names */ - colorseg_t* segs; /* array of segments; real segments always followed by a sentinel */ -} colorsegs_t; - -static void -freeSegs (colorsegs_t* segs) -{ - free (segs->base); - free (segs->segs); - free (segs); -} - -/* getSegLen: - * Find semicolon in s, replace with '\0'. - * Convert remainder to float v. - * Return 0 if no float given - * Return -1 on failure - */ -static double getSegLen (char* s) -{ - char* p = strchr (s, ';'); - char* endp; - double v; - - if (!p) { - return 0; - } - *p++ = '\0'; - v = strtod (p, &endp); - if (endp != p) { /* scanned something */ - if (v >= 0) - return v; - } - return -1; -} - -#define EPS 1E-5 -#define AEQ0(x) (((x) < EPS) && ((x) > -EPS)) - -/* parseSegs: - * Parse string of form color;float:color;float:...:color;float:color - * where the floats are optional, nonnegative, sum to <= 1. - * Store the values in an array of colorseg_t's and return the array in psegs. - * If nseg == 0, count the number of colors. - * If the sum of the floats does not equal 1, the remainder is equally distributed - * to all colors without an explicit float. If no such colors exist, the remainder - * is added to the last color. - * 0 => okay - * 1 => error without message - * 2 => error with message - * 3 => warning message - * There is a last sentinel segment with color == NULL; it will always follow - * the last segment with t > 0. - * - * Note that psegs is only assigned to if the return value is 0 or 3. - * Otherwise, psegs is left unchanged and the allocated memory is - * freed before returning. - */ -static int -parseSegs (char* clrs, int nseg, colorsegs_t** psegs) -{ - colorsegs_t* segs = NEW(colorsegs_t); - colorseg_t* s; - char* colors = strdup (clrs); - char* color; - int cnum = 0; - double v, left = 1; - static int doWarn = 1; - int i, rval = 0; - char* p; - - if (nseg == 0) { - nseg = 1; - /* need to know how many colors separated by ':' */ - for (p = colors; *p; p++) { - if (*p == ':') nseg++; - } - } - - segs->base = colors; - segs->segs = s = N_NEW(nseg+1,colorseg_t); - for (color = strtok(colors, ":"); color; color = strtok(0, ":")) { - if ((v = getSegLen (color)) >= 0) { - double del = v - left; - if (del > 0) { - if (doWarn && !AEQ0(del)) { - agerr (AGWARN, "Total size > 1 in \"%s\" color spec ", clrs); - doWarn = 0; - rval = 3; - } - v = left; - } - left -= v; - if (v > 0) s[cnum].hasFraction = TRUE; - if (*color) s[cnum].color = color; - s[cnum++].t = v; - } - else { - if (doWarn) { - agerr (AGERR, "Illegal length value in \"%s\" color attribute ", clrs); - doWarn = 0; - rval = 2; - } - else rval = 1; - freeSegs (segs); - return rval; - } - if (AEQ0(left)) { - left = 0; - break; - } - } - - /* distribute remaining into slot with t == 0; if none, add to last */ - if (left > 0) { - /* count zero segments */ - nseg = 0; - for (i = 0; i < cnum; i++) { - if (s[i].t == 0) nseg++; - } - if (nseg > 0) { - double delta = left/nseg; - for (i = 0; i < cnum; i++) { - if (s[i].t == 0) s[i].t = delta; - } - } - else { - s[cnum-1].t += left; - } - } - - /* Make sure last positive segment is followed by a sentinel. */ - nseg = 0; - for (i = cnum-1; i >= 0; i--) { - if (s[i].t > 0) break; - } - s[i+1].color = NULL; - segs->numc = i+1; - - *psegs = segs; - return rval; -} - -#define THIN_LINE 0.5 - -/* wedgedEllipse: - * Fill an ellipse whose bounding box is given by 2 points in pf - * with multiple wedges determined by the color spec in clrs. - * clrs is a list of colon separated colors, with possible quantities. - * Thin boundaries are drawn. - * 0 => okay - * 1 => error without message - * 2 => error with message - * 3 => warning message - */ -int -wedgedEllipse (GVJ_t* job, pointf * pf, char* clrs) -{ - colorsegs_t* segs; - colorseg_t* s; - int rv; - double save_penwidth = job->obj->penwidth; - pointf ctr, semi; - Ppolyline_t* pp; - double angle0, angle1; - - rv = parseSegs (clrs, 0, &segs); - if ((rv == 1) || (rv == 2)) return rv; - ctr.x = (pf[0].x + pf[1].x) / 2.; - ctr.y = (pf[0].y + pf[1].y) / 2.; - semi.x = pf[1].x - ctr.x; - semi.y = pf[1].y - ctr.y; - if (save_penwidth > THIN_LINE) - gvrender_set_penwidth(job, THIN_LINE); - - angle0 = 0; - for (s = segs->segs; s->color; s++) { - if (s->t == 0) continue; - gvrender_set_fillcolor (job, (s->color?s->color:DEFAULT_COLOR)); - - if (s[1].color == NULL) - angle1 = 2*M_PI; - else - angle1 = angle0 + 2*M_PI*(s->t); - pp = ellipticWedge (ctr, semi.x, semi.y, angle0, angle1); - gvrender_beziercurve(job, pp->ps, pp->pn, 0, 0, 1); - angle0 = angle1; - freePath (pp); - } - - if (save_penwidth > THIN_LINE) - gvrender_set_penwidth(job, save_penwidth); - freeSegs (segs); - return rv; -} - -/* stripedBox: - * Fill a rectangular box with vertical stripes of colors. - * AF gives 4 corner points, with AF[0] the LL corner and the points ordered CCW. - * clrs is a list of colon separated colors, with possible quantities. - * Thin boundaries are drawn. - * 0 => okay - * 1 => error without message - * 2 => error with message - * 3 => warning message - */ -int -stripedBox (GVJ_t * job, pointf* AF, char* clrs, int rotate) -{ - colorsegs_t* segs; - colorseg_t* s; - int rv; - double xdelta; - pointf pts[4]; - double lastx; - double save_penwidth = job->obj->penwidth; - - rv = parseSegs (clrs, 0, &segs); - if ((rv == 1) || (rv == 2)) return rv; - if (rotate) { - pts[0] = AF[2]; - pts[1] = AF[3]; - pts[2] = AF[0]; - pts[3] = AF[1]; - } else { - pts[0] = AF[0]; - pts[1] = AF[1]; - pts[2] = AF[2]; - pts[3] = AF[3]; - } - lastx = pts[1].x; - xdelta = (pts[1].x - pts[0].x); - pts[1].x = pts[2].x = pts[0].x; - - if (save_penwidth > THIN_LINE) - gvrender_set_penwidth(job, THIN_LINE); - for (s = segs->segs; s->color; s++) { - if (s->t == 0) continue; - gvrender_set_fillcolor (job, (s->color?s->color:DEFAULT_COLOR)); - /* gvrender_polygon(job, pts, 4, FILL | NO_POLY); */ - if (s[1].color == NULL) - pts[1].x = pts[2].x = lastx; - else - pts[1].x = pts[2].x = pts[0].x + xdelta*(s->t); - gvrender_polygon(job, pts, 4, FILL); - pts[0].x = pts[3].x = pts[1].x; - } - if (save_penwidth > THIN_LINE) - gvrender_set_penwidth(job, save_penwidth); - freeSegs (segs); - return rv; -} - -void emit_map_rect(GVJ_t *job, boxf b) -{ - obj_state_t *obj = job->obj; - int flags = job->flags; - pointf *p; - - if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) { - if (flags & GVRENDER_DOES_MAP_RECTANGLE) { - obj->url_map_shape = MAP_RECTANGLE; - obj->url_map_n = 2; - } - else { - obj->url_map_shape = MAP_POLYGON; - obj->url_map_n = 4; - } - free(obj->url_map_p); - obj->url_map_p = p = N_NEW(obj->url_map_n, pointf); - p[0] = b.LL; - p[1] = b.UR; - if (! (flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, p, p, 2); - if (! (flags & GVRENDER_DOES_MAP_RECTANGLE)) - rect2poly(p); - } -} - -static void map_label(GVJ_t *job, textlabel_t *lab) -{ - obj_state_t *obj = job->obj; - int flags = job->flags; - pointf *p; - - if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) { - if (flags & GVRENDER_DOES_MAP_RECTANGLE) { - obj->url_map_shape = MAP_RECTANGLE; - obj->url_map_n = 2; - } - else { - obj->url_map_shape = MAP_POLYGON; - obj->url_map_n = 4; - } - free(obj->url_map_p); - obj->url_map_p = p = N_NEW(obj->url_map_n, pointf); - P2RECT(lab->pos, p, lab->dimen.x / 2., lab->dimen.y / 2.); - if (! (flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, p, p, 2); - if (! (flags & GVRENDER_DOES_MAP_RECTANGLE)) - rect2poly(p); - } -} - -/* isRect: - * isRect function returns true when polygon has - * regular rectangular shape. Rectangle is regular when - * it is not skewed and distorted and orientation is almost zero - */ -static boolean isRect(polygon_t * p) -{ - return (p->sides == 4 && (ROUND(p->orientation) % 90) == 0 - && p->distortion == 0.0 && p->skew == 0.0); -} - -/* - * isFilled function returns 1 if filled style has been set for node 'n' - * otherwise returns 0. it accepts pointer to node_t as an argument - */ -static int ifFilled(node_t * n) -{ - char *style, *p, **pp; - int r = 0; - style = late_nnstring(n, N_style, ""); - if (style[0]) { - pp = parse_style(style); - while ((p = *pp)) { - if (strcmp(p, "filled") == 0) - r = 1; - pp++; - } - } - return r; -} - -/* pEllipse: - * pEllipse function returns 'np' points from the circumference - * of ellipse described by radii 'a' and 'b'. - * Assumes 'np' is greater than zero. - * 'np' should be at least 4 to sample polygon from ellipse - */ -static pointf *pEllipse(double a, double b, int np) -{ - double theta = 0.0; - double deltheta = 2 * M_PI / np; - int i; - pointf *ps; - - ps = N_NEW(np, pointf); - for (i = 0; i < np; i++) { - ps[i].x = a * cos(theta); - ps[i].y = b * sin(theta); - theta += deltheta; - } - return ps; -} - -#define HW 2.0 /* maximum distance away from line, in points */ - -/* check_control_points: - * check_control_points function checks the size of quadrilateral - * formed by four control points - * returns 1 if four points are in line (or close to line) - * else return 0 - */ -static int check_control_points(pointf *cp) -{ - double dis1 = ptToLine2 (cp[0], cp[3], cp[1]); - double dis2 = ptToLine2 (cp[0], cp[3], cp[2]); - if (dis1 < HW*HW && dis2 < HW*HW) - return 1; - else - return 0; -} - -/* update bounding box to contain a bezier segment */ -void update_bb_bz(boxf *bb, pointf *cp) -{ - - /* if any control point of the segment is outside the bounding box */ - if (cp[0].x > bb->UR.x || cp[0].x < bb->LL.x || - cp[0].y > bb->UR.y || cp[0].y < bb->LL.y || - cp[1].x > bb->UR.x || cp[1].x < bb->LL.x || - cp[1].y > bb->UR.y || cp[1].y < bb->LL.y || - cp[2].x > bb->UR.x || cp[2].x < bb->LL.x || - cp[2].y > bb->UR.y || cp[2].y < bb->LL.y || - cp[3].x > bb->UR.x || cp[3].x < bb->LL.x || - cp[3].y > bb->UR.y || cp[3].y < bb->LL.y) { - - /* if the segment is sufficiently refined */ - if (check_control_points(cp)) { - int i; - /* expand the bounding box */ - for (i = 0; i < 4; i++) { - if (cp[i].x > bb->UR.x) - bb->UR.x = cp[i].x; - else if (cp[i].x < bb->LL.x) - bb->LL.x = cp[i].x; - if (cp[i].y > bb->UR.y) - bb->UR.y = cp[i].y; - else if (cp[i].y < bb->LL.y) - bb->LL.y = cp[i].y; - } - } - else { /* else refine the segment */ - pointf left[4], right[4]; - Bezier (cp, 3, 0.5, left, right); - update_bb_bz(bb, left); - update_bb_bz(bb, right); - } - } -} - -#if (DEBUG==2) -static void psmapOutput (pointf* ps, int n) -{ - int i; - fprintf (stdout, "newpath %f %f moveto\n", ps[0].x, ps[0].y); - for (i=1; i < n; i++) - fprintf (stdout, "%f %f lineto\n", ps[i].x, ps[i].y); - fprintf (stdout, "closepath stroke\n"); -} -#endif - -typedef struct segitem_s { - pointf p; - struct segitem_s* next; -} segitem_t; - -#define MARK_FIRST_SEG(L) ((L)->next = (segitem_t*)1) -#define FIRST_SEG(L) ((L)->next == (segitem_t*)1) -#define INIT_SEG(P,L) {(L)->next = 0; (L)->p = P;} - -static segitem_t* appendSeg (pointf p, segitem_t* lp) -{ - segitem_t* s = GNEW(segitem_t); - INIT_SEG (p, s); - lp->next = s; - return s; -} - -/* map_bspline_poly: - * Output the polygon determined by the n points in p1, followed - * by the n points in p2 in reverse order. Assumes n <= 50. - */ -static void map_bspline_poly(pointf **pbs_p, int **pbs_n, int *pbs_poly_n, int n, pointf* p1, pointf* p2) -{ - int i = 0, nump = 0, last = 2*n-1; - - for ( ; i < *pbs_poly_n; i++) - nump += (*pbs_n)[i]; - - (*pbs_poly_n)++; - *pbs_n = grealloc(*pbs_n, (*pbs_poly_n) * sizeof(int)); - (*pbs_n)[i] = 2*n; - *pbs_p = grealloc(*pbs_p, (nump + 2*n) * sizeof(pointf)); - - for (i = 0; i < n; i++) { - (*pbs_p)[nump+i] = p1[i]; - (*pbs_p)[nump+last-i] = p2[i]; - } -#if (DEBUG==2) - psmapOutput (*pbs_p + nump, last+1); -#endif -} - -/* approx_bezier: - * Approximate Bezier by line segments. If the four points are - * almost colinear, as determined by check_control_points, we store - * the segment cp[0]-cp[3]. Otherwise we split the Bezier into 2 and recurse. - * Since 2 contiguous segments share an endpoint, we actually store - * the segments as a list of points. - * New points are appended to the list given by lp. The tail of the - * list is returned. - */ -static segitem_t* approx_bezier (pointf *cp, segitem_t* lp) -{ - pointf left[4], right[4]; - - if (check_control_points(cp)) { - if (FIRST_SEG (lp)) INIT_SEG (cp[0], lp); - lp = appendSeg (cp[3], lp); - } - else { - Bezier (cp, 3, 0.5, left, right); - lp = approx_bezier (left, lp); - lp = approx_bezier (right, lp); - } - return lp; -} - -/* bisect: - * Return the angle of the bisector between the two rays - * pp-cp and cp-np. The bisector returned is always to the - * left of pp-cp-np. - */ -static double bisect (pointf pp, pointf cp, pointf np) -{ - double ang, theta, phi; - theta = atan2(np.y - cp.y,np.x - cp.x); - phi = atan2(pp.y - cp.y,pp.x - cp.x); - ang = theta - phi; - if (ang > 0) ang -= 2*M_PI; - - return (phi + ang/2.0); -} - -/* mkSegPts: - * Determine polygon points related to 2 segments prv-cur and cur-nxt. - * The points lie on the bisector of the 2 segments, passing through cur, - * and distance w2 from cur. The points are stored in p1 and p2. - * If p1 is NULL, we use the normal to cur-nxt. - * If p2 is NULL, we use the normal to prv-cur. - * Assume at least one of prv or nxt is non-NULL. - */ -static void mkSegPts (segitem_t* prv, segitem_t* cur, segitem_t* nxt, - pointf* p1, pointf* p2, double w2) -{ - pointf cp, pp, np; - double theta, delx, dely; - pointf p; - - cp = cur->p; - /* if prv or nxt are NULL, use the one given to create a collinear - * prv or nxt. This could be more efficiently done with special case code, - * but this way is more uniform. - */ - if (prv) { - pp = prv->p; - if (nxt) - np = nxt->p; - else { - np.x = 2*cp.x - pp.x; - np.y = 2*cp.y - pp.y; - } - } - else { - np = nxt->p; - pp.x = 2*cp.x - np.x; - pp.y = 2*cp.y - np.y; - } - theta = bisect(pp,cp,np); - delx = w2*cos(theta); - dely = w2*sin(theta); - p.x = cp.x + delx; - p.y = cp.y + dely; - *p1 = p; - p.x = cp.x - delx; - p.y = cp.y - dely; - *p2 = p; -} - -/* map_output_bspline: - * Construct and output a closed polygon approximating the input - * B-spline bp. We do this by first approximating bp by a sequence - * of line segments. We then use the sequence of segments to determine - * the polygon. - * In cmapx, polygons are limited to 100 points, so we output polygons - * in chunks of 100. - */ -static void map_output_bspline (pointf **pbs, int **pbs_n, int *pbs_poly_n, bezier* bp, double w2) -{ - segitem_t* segl = GNEW(segitem_t); - segitem_t* segp = segl; - segitem_t* segprev; - segitem_t* segnext; - int nc, j, k, cnt; - pointf pts[4], pt1[50], pt2[50]; - - MARK_FIRST_SEG(segl); - nc = (bp->size - 1)/3; /* nc is number of bezier curves */ - for (j = 0; j < nc; j++) { - for (k = 0; k < 4; k++) { - pts[k] = bp->list[3*j + k]; - } - segp = approx_bezier (pts, segp); - } - - segp = segl; - segprev = 0; - cnt = 0; - while (segp) { - segnext = segp->next; - mkSegPts (segprev, segp, segnext, pt1+cnt, pt2+cnt, w2); - cnt++; - if ((segnext == NULL) || (cnt == 50)) { - map_bspline_poly (pbs, pbs_n, pbs_poly_n, cnt, pt1, pt2); - pt1[0] = pt1[cnt-1]; - pt2[0] = pt2[cnt-1]; - cnt = 1; - } - segprev = segp; - segp = segnext; - } - - /* free segl */ - while (segl) { - segp = segl->next; - free (segl); - segl = segp; - } -} - -static boolean is_natural_number(char *sstr) -{ - unsigned char *str = (unsigned char *) sstr; - - while (*str) - if (NOT(isdigit(*str++))) - return FALSE; - return TRUE; -} - -static int layer_index(GVC_t *gvc, char *str, int all) -{ - /* GVJ_t *job = gvc->job; */ - int i; - - if (streq(str, "all")) - return all; - if (is_natural_number(str)) - return atoi(str); - if (gvc->layerIDs) - for (i = 1; i <= gvc->numLayers; i++) - if (streq(str, gvc->layerIDs[i])) - return i; - return -1; -} - -static boolean selectedLayer(GVC_t *gvc, int layerNum, int numLayers, char *spec) -{ - int n0, n1; - unsigned char buf[SMALLBUF]; - char *w0, *w1; - char *buf_part_p = NULL, *buf_p = NULL, *cur, *part_in_p; - agxbuf xb; - boolean rval = FALSE; - - agxbinit(&xb, SMALLBUF, buf); - agxbput(&xb, spec); - part_in_p = agxbuse(&xb); - - /* Thanks to Matteo Nastasi for this extended code. */ - while ((rval == FALSE) && (cur = strtok_r(part_in_p, gvc->layerListDelims, &buf_part_p))) { - w1 = w0 = strtok_r (cur, gvc->layerDelims, &buf_p); - if (w0) - w1 = strtok_r (NULL, gvc->layerDelims, &buf_p); - switch ((w0 != NULL) + (w1 != NULL)) { - case 0: - rval = FALSE; - break; - case 1: - n0 = layer_index(gvc, w0, layerNum); - rval = (n0 == layerNum); - break; - case 2: - n0 = layer_index(gvc, w0, 0); - n1 = layer_index(gvc, w1, numLayers); - if ((n0 >= 0) || (n1 >= 0)) { - if (n0 > n1) { - int t = n0; - n0 = n1; - n1 = t; - } - rval = BETWEEN(n0, layerNum, n1); - } - break; - } - part_in_p = NULL; - } - agxbfree(&xb); - return rval; -} - -static boolean selectedlayer(GVJ_t *job, char *spec) -{ - return selectedLayer (job->gvc, job->layerNum, job->numLayers, spec); -} - -/* parse_layerselect: - * Parse the graph's layerselect attribute, which determines - * which layers are emitted. The specification is the same used - * by the layer attribute. - * - * If we find n layers, we return an array arr of n+2 ints. arr[0]=n. - * arr[n+1]=numLayers+1, acting as a sentinel. The other entries give - * the desired layer indices. - * - * If no layers are detected, NULL is returned. - * - * This implementation does a linear walk through each layer index and - * uses selectedLayer to match it against p. There is probably a more - * efficient way to do this, but this is simple and until we find people - * using huge numbers of layers, it should be adequate. - */ -static int* parse_layerselect(GVC_t *gvc, graph_t * g, char *p) -{ - int* laylist = N_GNEW(gvc->numLayers+2,int); - int i, cnt = 0; - for (i = 1; i <=gvc->numLayers; i++) { - if (selectedLayer (gvc, i, gvc->numLayers, p)) { - laylist[++cnt] = i; - } - } - if (cnt) { - laylist[0] = cnt; - laylist[cnt+1] = gvc->numLayers+1; - } - else { - agerr(AGWARN, "The layerselect attribute \"%s\" does not match any layer specifed by the layers attribute - ignored.\n", p); - laylist[0] = cnt; - free (laylist); - laylist = NULL; - } - return laylist; -} - -/* parse_layers: - * Split input string into tokens, with separators specified by - * the layersep attribute. Store the values in the gvc->layerIDs array, - * starting at index 1, and return the count. - * Free previously stored list. Note that there is no mechanism - * to free the memory before exit. - */ -static int parse_layers(GVC_t *gvc, graph_t * g, char *p) -{ - int ntok; - char *tok; - int sz; - - gvc->layerDelims = agget(g, "layersep"); - if (!gvc->layerDelims) - gvc->layerDelims = DEFAULT_LAYERSEP; - gvc->layerListDelims = agget(g, "layerlistsep"); - if (!gvc->layerListDelims) - gvc->layerListDelims = DEFAULT_LAYERLISTSEP; - if ((tok = strpbrk (gvc->layerDelims, gvc->layerListDelims))) { /* conflict in delimiter strings */ - agerr(AGWARN, "The character \'%c\' appears in both the layersep and layerlistsep attributes - layerlistsep ignored.\n", *tok); - gvc->layerListDelims = ""; - } - - ntok = 0; - sz = 0; - gvc->layers = strdup(p); - - for (tok = strtok(gvc->layers, gvc->layerDelims); tok; - tok = strtok(NULL, gvc->layerDelims)) { - ntok++; - if (ntok > sz) { - sz += SMALLBUF; - gvc->layerIDs = ALLOC(sz, gvc->layerIDs, char *); - } - gvc->layerIDs[ntok] = tok; - } - if (ntok) { - gvc->layerIDs = RALLOC(ntok + 2, gvc->layerIDs, char *); /* shrink to minimum size */ - gvc->layerIDs[0] = NULL; - gvc->layerIDs[ntok + 1] = NULL; - } - - return ntok; -} - -/* chkOrder: - * Determine order of output. - * Output usually in breadth first graph walk order - */ -static int chkOrder(graph_t * g) -{ - char *p = agget(g, "outputorder"); - if (p) { - char c = *p; - if ((c == 'n') && !strcmp(p + 1, "odesfirst")) - return EMIT_SORTED; - if ((c == 'e') && !strcmp(p + 1, "dgesfirst")) - return EMIT_EDGE_SORTED; - } - return 0; -} - -static void init_layering(GVC_t * gvc, graph_t * g) -{ - char *str; - - /* free layer strings and pointers from previous graph */ - if (gvc->layers) { - free(gvc->layers); - gvc->layers = NULL; - } - if (gvc->layerIDs) { - free(gvc->layerIDs); - gvc->layerIDs = NULL; - } - if (gvc->layerlist) { - free(gvc->layerlist); - gvc->layerlist = NULL; - } - if ((str = agget(g, "layers")) != 0) { - gvc->numLayers = parse_layers(gvc, g, str); - if (((str = agget(g, "layerselect")) != 0) && *str) { - gvc->layerlist = parse_layerselect(gvc, g, str); - } - } else { - gvc->layerIDs = NULL; - gvc->numLayers = 1; - } -} - -/* numPhysicalLayers: - * Return number of physical layers to be emitted. - */ -static int numPhysicalLayers (GVJ_t *job) -{ - if (job->gvc->layerlist) { - return job->gvc->layerlist[0]; - } - else - return job->numLayers; - -} - -static void firstlayer(GVJ_t *job, int** listp) -{ - job->numLayers = job->gvc->numLayers; - if (job->gvc->layerlist) { - int *list = job->gvc->layerlist; - int cnt = *list++; - if ((cnt > 1) && (! (job->flags & GVDEVICE_DOES_LAYERS))) { - agerr(AGWARN, "layers not supported in %s output\n", - job->output_langname); - list[1] = job->numLayers + 1; /* only one layer printed */ - } - job->layerNum = *list++; - *listp = list; - } - else { - if ((job->numLayers > 1) - && (! (job->flags & GVDEVICE_DOES_LAYERS))) { - agerr(AGWARN, "layers not supported in %s output\n", - job->output_langname); - job->numLayers = 1; - } - job->layerNum = 1; - *listp = NULL; - } -} - -static boolean validlayer(GVJ_t *job) -{ - return (job->layerNum <= job->numLayers); -} - -static void nextlayer(GVJ_t *job, int** listp) -{ - int *list = *listp; - if (list) { - job->layerNum = *list++; - *listp = list; - } - else - job->layerNum++; -} - -static point pagecode(GVJ_t *job, char c) -{ - point rv; - rv.x = rv.y = 0; - switch (c) { - case 'T': - job->pagesArrayFirst.y = job->pagesArraySize.y - 1; - rv.y = -1; - break; - case 'B': - rv.y = 1; - break; - case 'L': - rv.x = 1; - break; - case 'R': - job->pagesArrayFirst.x = job->pagesArraySize.x - 1; - rv.x = -1; - break; - } - return rv; -} - -static void init_job_pagination(GVJ_t * job, graph_t *g) -{ - GVC_t *gvc = job->gvc; - pointf pageSize; /* page size for the graph - points*/ - pointf imageSize; /* image size on one page of the graph - points */ - pointf margin; /* margin for a page of the graph - points */ - pointf centering = {0.0, 0.0}; /* centering offset - points */ - - /* unpaginated image size - in points - in graph orientation */ - imageSize = job->view; - - /* rotate imageSize to page orientation */ - if (job->rotation) - imageSize = exch_xyf(imageSize); - - /* margin - in points - in page orientation */ - margin = job->margin; - - /* determine pagination */ - if (gvc->graph_sets_pageSize && (job->flags & GVDEVICE_DOES_PAGES)) { - /* page was set by user */ - - /* determine size of page for image */ - pageSize.x = gvc->pageSize.x - 2 * margin.x; - pageSize.y = gvc->pageSize.y - 2 * margin.y; - - if (pageSize.x < EPSILON) - job->pagesArraySize.x = 1; - else { - job->pagesArraySize.x = (int)(imageSize.x / pageSize.x); - if ((imageSize.x - (job->pagesArraySize.x * pageSize.x)) > EPSILON) - job->pagesArraySize.x++; - } - if (pageSize.y < EPSILON) - job->pagesArraySize.y = 1; - else { - job->pagesArraySize.y = (int)(imageSize.y / pageSize.y); - if ((imageSize.y - (job->pagesArraySize.y * pageSize.y)) > EPSILON) - job->pagesArraySize.y++; - } - job->numPages = job->pagesArraySize.x * job->pagesArraySize.y; - - /* find the drawable size in points */ - imageSize.x = MIN(imageSize.x, pageSize.x); - imageSize.y = MIN(imageSize.y, pageSize.y); - } else { - /* page not set by user, use default from renderer */ - if (job->render.features) { - pageSize.x = job->device.features->default_pagesize.x - 2*margin.x; - if (pageSize.x < 0.) - pageSize.x = 0.; - pageSize.y = job->device.features->default_pagesize.y - 2*margin.y; - if (pageSize.y < 0.) - pageSize.y = 0.; - } - else - pageSize.x = pageSize.y = 0.; - job->pagesArraySize.x = job->pagesArraySize.y = job->numPages = 1; - - if (pageSize.x < imageSize.x) - pageSize.x = imageSize.x; - if (pageSize.y < imageSize.y) - pageSize.y = imageSize.y; - } - - /* initial window size */ -//fprintf(stderr,"page=%g,%g dpi=%g,%g zoom=%g\n", pageSize.x, pageSize.y, job->dpi.x, job->dpi.y, job->zoom); - job->width = ROUND((pageSize.x + 2*margin.x) * job->dpi.x / POINTS_PER_INCH); - job->height = ROUND((pageSize.y + 2*margin.y) * job->dpi.y / POINTS_PER_INCH); - - /* set up pagedir */ - job->pagesArrayMajor.x = job->pagesArrayMajor.y - = job->pagesArrayMinor.x = job->pagesArrayMinor.y = 0; - job->pagesArrayFirst.x = job->pagesArrayFirst.y = 0; - job->pagesArrayMajor = pagecode(job, gvc->pagedir[0]); - job->pagesArrayMinor = pagecode(job, gvc->pagedir[1]); - if ((abs(job->pagesArrayMajor.x + job->pagesArrayMinor.x) != 1) - || (abs(job->pagesArrayMajor.y + job->pagesArrayMinor.y) != 1)) { - job->pagesArrayMajor = pagecode(job, 'B'); - job->pagesArrayMinor = pagecode(job, 'L'); - agerr(AGWARN, "pagedir=%s ignored\n", gvc->pagedir); - } - - /* determine page box including centering */ - if (GD_drawing(g)->centered) { - if (pageSize.x > imageSize.x) - centering.x = (pageSize.x - imageSize.x) / 2; - if (pageSize.y > imageSize.y) - centering.y = (pageSize.y - imageSize.y) / 2; - } - - /* rotate back into graph orientation */ - if (job->rotation) { - imageSize = exch_xyf(imageSize); - pageSize = exch_xyf(pageSize); - margin = exch_xyf(margin); - centering = exch_xyf(centering); - } - - /* canvas area, centered if necessary */ - job->canvasBox.LL.x = margin.x + centering.x; - job->canvasBox.LL.y = margin.y + centering.y; - job->canvasBox.UR.x = margin.x + centering.x + imageSize.x; - job->canvasBox.UR.y = margin.y + centering.y + imageSize.y; - - /* size of one page in graph units */ - job->pageSize.x = imageSize.x / job->zoom; - job->pageSize.y = imageSize.y / job->zoom; - - /* pageBoundingBox in device units and page orientation */ - job->pageBoundingBox.LL.x = ROUND(job->canvasBox.LL.x * job->dpi.x / POINTS_PER_INCH); - job->pageBoundingBox.LL.y = ROUND(job->canvasBox.LL.y * job->dpi.y / POINTS_PER_INCH); - job->pageBoundingBox.UR.x = ROUND(job->canvasBox.UR.x * job->dpi.x / POINTS_PER_INCH); - job->pageBoundingBox.UR.y = ROUND(job->canvasBox.UR.y * job->dpi.y / POINTS_PER_INCH); - if (job->rotation) { - job->pageBoundingBox.LL = exch_xy(job->pageBoundingBox.LL); - job->pageBoundingBox.UR = exch_xy(job->pageBoundingBox.UR); - } -} - -static void firstpage(GVJ_t *job) -{ - job->pagesArrayElem = job->pagesArrayFirst; -} - -static boolean validpage(GVJ_t *job) -{ - return ((job->pagesArrayElem.x >= 0) - && (job->pagesArrayElem.x < job->pagesArraySize.x) - && (job->pagesArrayElem.y >= 0) - && (job->pagesArrayElem.y < job->pagesArraySize.y)); -} - -static void nextpage(GVJ_t *job) -{ - job->pagesArrayElem = add_point(job->pagesArrayElem, job->pagesArrayMinor); - if (validpage(job) == FALSE) { - if (job->pagesArrayMajor.y) - job->pagesArrayElem.x = job->pagesArrayFirst.x; - else - job->pagesArrayElem.y = job->pagesArrayFirst.y; - job->pagesArrayElem = add_point(job->pagesArrayElem, job->pagesArrayMajor); - } -} - -static boolean write_edge_test(Agraph_t * g, Agedge_t * e) -{ - Agraph_t *sg; - int c; - - for (c = 1; c <= GD_n_cluster(g); c++) { - sg = GD_clust(g)[c]; - if (agcontains(sg, e)) - return FALSE; - } - return TRUE; -} - -static boolean write_node_test(Agraph_t * g, Agnode_t * n) -{ - Agraph_t *sg; - int c; - - for (c = 1; c <= GD_n_cluster(g); c++) { - sg = GD_clust(g)[c]; - if (agcontains(sg, n)) - return FALSE; - } - return TRUE; -} - -#define INITPTS 1000 - -static pointf* -copyPts (pointf* pts, int* ptsize, xdot_point* inpts, int numpts) -{ - int i, sz = *ptsize; - - if (numpts > sz) { - sz = MAX(2*sz, numpts); - pts = RALLOC(sz, pts, pointf); - *ptsize = sz; - } - - for (i = 0; i < numpts; i++) { - pts[i].x = inpts[i].x; - pts[i].y = inpts[i].y; - } - - return pts; -} - -static void emit_xdot (GVJ_t * job, xdot* xd) -{ - int image_warn = 1; - int ptsize = INITPTS; - pointf* pts = N_GNEW(INITPTS, pointf); - exdot_op* op; - int i, angle; - char** styles = 0; - int filled = FILL; - - op = (exdot_op*)(xd->ops); - for (i = 0; i < xd->cnt; i++) { - switch (op->op.kind) { - case xd_filled_ellipse : - case xd_unfilled_ellipse : - if (boxf_overlap(op->bb, job->clip)) { - pts[0].x = op->op.u.ellipse.x - op->op.u.ellipse.w; - pts[0].y = op->op.u.ellipse.y - op->op.u.ellipse.h; - pts[1].x = op->op.u.ellipse.x + op->op.u.ellipse.w; - pts[1].y = op->op.u.ellipse.y + op->op.u.ellipse.h; - gvrender_ellipse(job, pts, 2, (op->op.kind == xd_filled_ellipse?filled:0)); - } - break; - case xd_filled_polygon : - case xd_unfilled_polygon : - if (boxf_overlap(op->bb, job->clip)) { - pts = copyPts (pts, &ptsize, op->op.u.polygon.pts, op->op.u.polygon.cnt); - gvrender_polygon(job, pts, op->op.u.polygon.cnt, (op->op.kind == xd_filled_polygon?filled:0)); - } - break; - case xd_filled_bezier : - case xd_unfilled_bezier : - if (boxf_overlap(op->bb, job->clip)) { - pts = copyPts (pts, &ptsize, op->op.u.bezier.pts, op->op.u.bezier.cnt); - gvrender_beziercurve(job, pts, op->op.u.bezier.cnt, 0, 0, (op->op.kind == xd_filled_bezier?filled:0)); - } - break; - case xd_polyline : - if (boxf_overlap(op->bb, job->clip)) { - pts = copyPts (pts, &ptsize, op->op.u.polyline.pts, op->op.u.polyline.cnt); - gvrender_polyline(job, pts, op->op.u.polyline.cnt); - } - break; - case xd_text : - if (boxf_overlap(op->bb, job->clip)) { - pts[0].x = op->op.u.text.x; - pts[0].y = op->op.u.text.y; - gvrender_textspan(job, pts[0], op->span); - } - break; - case xd_fill_color : - gvrender_set_fillcolor(job, op->op.u.color); - filled = FILL; - break; - case xd_pen_color : - gvrender_set_pencolor(job, op->op.u.color); - filled = FILL; - break; - case xd_grad_fill_color : - { - char* clr0; - char* clr1; - float frac; - if (op->op.u.grad_color.type == xd_radial) { - xdot_radial_grad* p = &op->op.u.grad_color.u.ring; - clr0 = p->stops[0].color; - clr1 = p->stops[1].color; - frac = p->stops[1].frac; - if ((p->x1 == p->x0) && (p->y1 == p->y0)) - angle = 0; - else - angle = (int)(180.0*acos((p->x0 - p->x1)/p->r0)/M_PI); - gvrender_set_fillcolor(job, clr0); - gvrender_set_gradient_vals(job, clr1, angle, frac); - filled = RGRADIENT; - } - else { - xdot_linear_grad* p = &op->op.u.grad_color.u.ling; - clr0 = p->stops[0].color; - clr1 = p->stops[1].color; - frac = p->stops[1].frac; - angle = (int)(180.0*atan2(p->y1-p->y0,p->x1-p->x0)/M_PI); - gvrender_set_fillcolor(job, clr0); - gvrender_set_gradient_vals(job, clr1, angle, frac); - filled = GRADIENT; - } - } - break; - case xd_grad_pen_color : - agerr (AGWARN, "gradient pen colors not yet supported.\n"); - break; - case xd_font : - /* fontsize and fontname already encoded via xdotBB */ - break; - case xd_style : - styles = parse_style (op->op.u.style); - gvrender_set_style (job, styles); - break; - case xd_fontchar : - /* font characteristics already encoded via xdotBB */ - break; - case xd_image : - if (image_warn) { - agerr(AGWARN, "Images unsupported in \"background\" attribute\n"); - image_warn = 0; - } - break; - } - op++; - } - if (styles) - gvrender_set_style(job, job->gvc->defaultlinestyle); - free (pts); -} - -static void emit_background(GVJ_t * job, graph_t *g) -{ - xdot* xd; - char *str; - int dfltColor; - - /* if no bgcolor specified - first assume default of "white" */ - if (! ((str = agget(g, "bgcolor")) && str[0])) { - str = "white"; - dfltColor = 1; - } - else - dfltColor = 0; - - - /* if device has no truecolor support, change "transparent" to "white" */ - if (! (job->flags & GVDEVICE_DOES_TRUECOLOR) && (streq(str, "transparent"))) { - str = "white"; - dfltColor = 1; - } - - /* except for "transparent" on truecolor, or default "white" on (assumed) white paper, paint background */ - if (!( ((job->flags & GVDEVICE_DOES_TRUECOLOR) && streq(str, "transparent")) - || ((job->flags & GVRENDER_NO_WHITE_BG) && dfltColor))) { - char* clrs[2]; - float frac; - - if ((findStopColor (str, clrs, &frac))) { - int filled, istyle = 0; - gvrender_set_fillcolor(job, clrs[0]); - gvrender_set_pencolor(job, "transparent"); - checkClusterStyle(g, &istyle); - if (clrs[1]) - gvrender_set_gradient_vals(job,clrs[1],late_int(g,G_gradientangle,0,0), frac); - else - gvrender_set_gradient_vals(job,DEFAULT_COLOR,late_int(g,G_gradientangle,0,0), frac); - if (istyle & RADIAL) - filled = RGRADIENT; - else - filled = GRADIENT; - gvrender_box(job, job->clip, filled); - free (clrs[0]); - } - else { - gvrender_set_fillcolor(job, str); - gvrender_set_pencolor(job, "transparent"); - gvrender_box(job, job->clip, FILL); /* filled */ - } - } - - if ((xd = (xdot*)GD_drawing(g)->xdots)) - emit_xdot (job, xd); -} - -static void setup_page(GVJ_t * job, graph_t * g) -{ - point pagesArrayElem = job->pagesArrayElem, pagesArraySize = job->pagesArraySize; - - if (job->rotation) { - pagesArrayElem = exch_xy(pagesArrayElem); - pagesArraySize = exch_xy(pagesArraySize); - } - - /* establish current box in graph units */ - job->pageBox.LL.x = pagesArrayElem.x * job->pageSize.x - job->pad.x; - job->pageBox.LL.y = pagesArrayElem.y * job->pageSize.y - job->pad.y; - job->pageBox.UR.x = job->pageBox.LL.x + job->pageSize.x; - job->pageBox.UR.y = job->pageBox.LL.y + job->pageSize.y; - - /* maximum boundingBox in device units and page orientation */ - if (job->common->viewNum == 0) - job->boundingBox = job->pageBoundingBox; - else - EXPANDBB(job->boundingBox, job->pageBoundingBox); - - if (job->flags & GVDEVICE_EVENTS) { - job->clip.LL.x = job->focus.x - job->view.x / 2.; - job->clip.LL.y = job->focus.y - job->view.y / 2.; - job->clip.UR.x = job->focus.x + job->view.x / 2.; - job->clip.UR.y = job->focus.y + job->view.y / 2.; - } - else { - job->clip.LL.x = job->focus.x + job->pageSize.x * (pagesArrayElem.x - pagesArraySize.x / 2.); - job->clip.LL.y = job->focus.y + job->pageSize.y * (pagesArrayElem.y - pagesArraySize.y / 2.); - job->clip.UR.x = job->clip.LL.x + job->pageSize.x; - job->clip.UR.y = job->clip.LL.y + job->pageSize.y; - } - - /* CAUTION - job->translation was difficult to get right. */ - /* Test with and without assymetric margins, e.g: -Gmargin="1,0" */ - if (job->rotation) { - job->translation.y = - job->clip.UR.y - job->canvasBox.LL.y / job->zoom; - if ((job->flags & GVRENDER_Y_GOES_DOWN) || (Y_invert)) - job->translation.x = - job->clip.UR.x - job->canvasBox.LL.x / job->zoom; - else - job->translation.x = - job->clip.LL.x + job->canvasBox.LL.x / job->zoom; - } - else { - /* pre unscale margins to keep them constant under scaling */ - job->translation.x = - job->clip.LL.x + job->canvasBox.LL.x / job->zoom; - if ((job->flags & GVRENDER_Y_GOES_DOWN) || (Y_invert)) - job->translation.y = - job->clip.UR.y - job->canvasBox.LL.y / job->zoom; - else - job->translation.y = - job->clip.LL.y + job->canvasBox.LL.y / job->zoom; - } - -#if 0 -fprintf(stderr,"width=%d height=%d dpi=%g,%g\npad=%g,%g focus=%g,%g view=%g,%g zoom=%g\npageBox=%g,%g,%g,%g pagesArraySize=%d,%d pageSize=%g,%g canvasBox=%g,%g,%g,%g pageOffset=%g,%g\ntranslation=%g,%g clip=%g,%g,%g,%g margin=%g,%g\n", - job->width, job->height, - job->dpi.x, job->dpi.y, - job->pad.x, job->pad.y, - job->focus.x, job->focus.y, - job->view.x, job->view.y, - job->zoom, - job->pageBox.LL.x, job->pageBox.LL.y, job->pageBox.UR.x, job->pageBox.UR.y, - job->pagesArraySize.x, job->pagesArraySize.y, - job->pageSize.x, job->pageSize.y, - job->canvasBox.LL.x, job->canvasBox.LL.y, job->canvasBox.UR.x, job->canvasBox.UR.y, - job->pageOffset.x, job->pageOffset.y, - job->translation.x, job->translation.y, - job->clip.LL.x, job->clip.LL.y, job->clip.UR.x, job->clip.UR.y, - job->margin.x, job->margin.y); -#endif -} - -static boolean node_in_layer(GVJ_t *job, graph_t * g, node_t * n) -{ - char *pn, *pe; - edge_t *e; - - if (job->numLayers <= 1) - return TRUE; - pn = late_string(n, N_layer, ""); - if (selectedlayer(job, pn)) - return TRUE; - if (pn[0]) - return FALSE; /* Only check edges if pn = "" */ - if ((e = agfstedge(g, n)) == NULL) - return TRUE; - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - pe = late_string(e, E_layer, ""); - if ((pe[0] == '\0') || selectedlayer(job, pe)) - return TRUE; - } - return FALSE; -} - -static boolean edge_in_layer(GVJ_t *job, graph_t * g, edge_t * e) -{ - char *pe, *pn; - int cnt; - - if (job->numLayers <= 1) - return TRUE; - pe = late_string(e, E_layer, ""); - if (selectedlayer(job, pe)) - return TRUE; - if (pe[0]) - return FALSE; - for (cnt = 0; cnt < 2; cnt++) { - pn = late_string(cnt < 1 ? agtail(e) : aghead(e), N_layer, ""); - if ((pn[0] == '\0') || selectedlayer(job, pn)) - return TRUE; - } - return FALSE; -} - -static boolean clust_in_layer(GVJ_t *job, graph_t * sg) -{ - char *pg; - node_t *n; - - if (job->numLayers <= 1) - return TRUE; - pg = late_string(sg, agattr(sg, AGRAPH, "layer", 0), ""); - if (selectedlayer(job, pg)) - return TRUE; - if (pg[0]) - return FALSE; - for (n = agfstnode(sg); n; n = agnxtnode(sg, n)) - if (node_in_layer(job, sg, n)) - return TRUE; - return FALSE; -} - -static boolean node_in_box(node_t *n, boxf b) -{ - return boxf_overlap(ND_bb(n), b); -} - -static void emit_begin_node(GVJ_t * job, node_t * n) -{ - obj_state_t *obj; - int flags = job->flags; - int sides, peripheries, i, j, filled = 0, rect = 0, shape, nump = 0; - polygon_t *poly = NULL; - pointf *vertices, *p = NULL; - pointf coord; - char *s; - - obj = push_obj_state(job); - obj->type = NODE_OBJTYPE; - obj->u.n = n; - obj->emit_state = EMIT_NDRAW; - - if (flags & GVRENDER_DOES_Z) { - /* obj->z = late_double(n, N_z, 0.0, -MAXFLOAT); */ - if (GD_odim(agraphof(n)) >=3) - obj->z = POINTS(ND_pos(n)[2]); - else - obj->z = 0.0; - } - initObjMapData (job, ND_label(n), n); - if ((flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) - && (obj->url || obj->explicit_tooltip)) { - - /* checking shape of node */ - shape = shapeOf(n); - /* node coordinate */ - coord = ND_coord(n); - /* checking if filled style has been set for node */ - filled = ifFilled(n); - - if (shape == SH_POLY || shape == SH_POINT) { - poly = (polygon_t *) ND_shape_info(n); - - /* checking if polygon is regular rectangle */ - if (isRect(poly) && (poly->peripheries || filled)) - rect = 1; - } - - /* When node has polygon shape and requested output supports polygons - * we use a polygon to map the clickable region that is a: - * circle, ellipse, polygon with n side, or point. - * For regular rectangular shape we have use node's bounding box to map clickable region - */ - if (poly && !rect && (flags & GVRENDER_DOES_MAP_POLYGON)) { - - if (poly->sides < 3) - sides = 1; - else - sides = poly->sides; - - if (poly->peripheries < 2) - peripheries = 1; - else - peripheries = poly->peripheries; - - vertices = poly->vertices; - - if ((s = agget(n, "samplepoints"))) - nump = atoi(s); - /* We want at least 4 points. For server-side maps, at most 100 - * points are allowed. To simplify things to fit with the 120 points - * used for skewed ellipses, we set the bound at 60. - */ - if ((nump < 4) || (nump > 60)) - nump = DFLT_SAMPLE; - /* use bounding box of text label or node image for mapping - * when polygon has no peripheries and node is not filled - */ - if (poly->peripheries == 0 && !filled) { - obj->url_map_shape = MAP_RECTANGLE; - nump = 2; - p = N_NEW(nump, pointf); - P2RECT(coord, p, ND_lw(n), ND_ht(n) / 2.0 ); - } - /* circle or ellipse */ - else if (poly->sides < 3 && poly->skew == 0.0 && poly->distortion == 0.0) { - if (poly->regular) { - obj->url_map_shape = MAP_CIRCLE; - nump = 2; /* center of circle and top right corner of bb */ - p = N_NEW(nump, pointf); - p[0].x = coord.x; - p[0].y = coord.y; - /* even vertices contain LL corner of bb */ - /* odd vertices contain UR corner of bb */ - p[1].x = coord.x + vertices[2*peripheries - 1].x; - p[1].y = coord.y + vertices[2*peripheries - 1].y; - } - else { /* ellipse is treated as polygon */ - obj->url_map_shape= MAP_POLYGON; - p = pEllipse((double)(vertices[2*peripheries - 1].x), - (double)(vertices[2*peripheries - 1].y), nump); - for (i = 0; i < nump; i++) { - p[i].x += coord.x; - p[i].y += coord.y; - } - } - } - /* all other polygonal shape */ - else { - int offset = (peripheries - 1)*(poly->sides); - obj->url_map_shape = MAP_POLYGON; - /* distorted or skewed ellipses and circles are polygons with 120 - * sides. For mapping we convert them into polygon with sample sides - */ - if (poly->sides >= nump) { - int delta = poly->sides / nump; - p = N_NEW(nump, pointf); - for (i = 0, j = 0; j < nump; i += delta, j++) { - p[j].x = coord.x + vertices[i + offset].x; - p[j].y = coord.y + vertices[i + offset].y; - } - } else { - nump = sides; - p = N_NEW(nump, pointf); - for (i = 0; i < nump; i++) { - p[i].x = coord.x + vertices[i + offset].x; - p[i].y = coord.y + vertices[i + offset].y; - } - } - } - } - else { - /* we have to use the node's bounding box to map clickable region - * when requested output format is not capable of polygons. - */ - obj->url_map_shape = MAP_RECTANGLE; - nump = 2; - p = N_NEW(nump, pointf); - p[0].x = coord.x - ND_lw(n); - p[0].y = coord.y - (ND_ht(n) / 2); - p[1].x = coord.x + ND_rw(n); - p[1].y = coord.y + (ND_ht(n) / 2); - } - if (! (flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, p, p, nump); - obj->url_map_p = p; - obj->url_map_n = nump; - } - - setColorScheme (agget (n, "colorscheme")); - gvrender_begin_node(job, n); -} - -static void emit_end_node(GVJ_t * job) -{ - gvrender_end_node(job); - pop_obj_state(job); -} - -/* emit_node: - */ -static void emit_node(GVJ_t * job, node_t * n) -{ - GVC_t *gvc = job->gvc; - char *s; - char *style; - char **styles = 0; - char **sp; - char *p; - - if (ND_shape(n) /* node has a shape */ - && node_in_layer(job, agraphof(n), n) /* and is in layer */ - && node_in_box(n, job->clip) /* and is in page/view */ - && (ND_state(n) != gvc->common.viewNum)) /* and not already drawn */ - { - ND_state(n) = gvc->common.viewNum; /* mark node as drawn */ - - gvrender_comment(job, agnameof(n)); - s = late_string(n, N_comment, ""); - if (s[0]) - gvrender_comment(job, s); - - style = late_string(n, N_style, ""); - if (style[0]) { - styles = parse_style(style); - sp = styles; - while ((p = *sp++)) { - if (streq(p, "invis")) return; - } - } - - emit_begin_node(job, n); - ND_shape(n)->fns->codefn(job, n); - if (ND_xlabel(n) && ND_xlabel(n)->set) - emit_label(job, EMIT_NLABEL, ND_xlabel(n)); - emit_end_node(job); - } -} - -/* calculate an offset vector, length d, perpendicular to line p,q */ -static pointf computeoffset_p(pointf p, pointf q, double d) -{ - pointf res; - double x = p.x - q.x, y = p.y - q.y; - - /* keep d finite as line length approaches 0 */ - d /= sqrt(x * x + y * y + EPSILON); - res.x = y * d; - res.y = -x * d; - return res; -} - -/* calculate offset vector, length d, perpendicular to spline p,q,r,s at q&r */ -static pointf computeoffset_qr(pointf p, pointf q, pointf r, pointf s, - double d) -{ - pointf res; - double len; - double x = q.x - r.x, y = q.y - r.y; - - len = sqrt(x * x + y * y); - if (len < EPSILON) { - /* control points are on top of each other - use slope between endpoints instead */ - x = p.x - s.x, y = p.y - s.y; - /* keep d finite as line length approaches 0 */ - len = sqrt(x * x + y * y + EPSILON); - } - d /= len; - res.x = y * d; - res.y = -x * d; - return res; -} - -static void emit_attachment(GVJ_t * job, textlabel_t * lp, splines * spl) -{ - pointf sz, AF[3]; - unsigned char *s; - - for (s = (unsigned char *) (lp->text); *s; s++) { - if (isspace(*s) == FALSE) - break; - } - if (*s == 0) - return; - - sz = lp->dimen; - AF[0] = pointfof(lp->pos.x + sz.x / 2., lp->pos.y - sz.y / 2.); - AF[1] = pointfof(AF[0].x - sz.x, AF[0].y); - AF[2] = dotneato_closest(spl, lp->pos); - /* Don't use edge style to draw attachment */ - gvrender_set_style(job, job->gvc->defaultlinestyle); - /* Use font color to draw attachment - - need something unambiguous in case of multicolored parallel edges - - defaults to black for html-like labels - */ - gvrender_set_pencolor(job, lp->fontcolor); - gvrender_polyline(job, AF, 3); -} - -/* edges colors can be mutiple colors separated by ":" - * so we commpute a default pencolor with the same number of colors. */ -static char* default_pencolor(char *pencolor, char *deflt) -{ - static char *buf; - static int bufsz; - char *p; - int len, ncol; - - ncol = 1; - for (p = pencolor; *p; p++) { - if (*p == ':') - ncol++; - } - len = ncol * (strlen(deflt) + 1); - if (bufsz < len) { - bufsz = len + 10; - buf = realloc(buf, bufsz); - } - strcpy(buf, deflt); - while(--ncol) { - strcat(buf, ":"); - strcat(buf, deflt); - } - return buf; -} - -/* approxLen: - */ -static double approxLen (pointf* pts) -{ - double d = DIST(pts[0],pts[1]); - d += DIST(pts[1],pts[2]); - d += DIST(pts[2],pts[3]); - return d; -} - -/* splitBSpline: - * Given B-spline bz and 0 < t < 1, split bz so that left corresponds to - * the fraction t of the arc length. The new parts are store in left and right. - * The caller needs to free the allocated points. - * - * In the current implementation, we find the Bezier that should contain t by - * treating the control points as a polyline. - * We then split that Bezier. - */ -static void splitBSpline (bezier* bz, float t, bezier* left, bezier* right) -{ - int i, j, k, cnt = (bz->size - 1)/3; - double* lens; - double last, len, sum; - pointf* pts; - float r; - - if (cnt == 1) { - left->size = 4; - left->list = N_NEW(4, pointf); - right->size = 4; - right->list = N_NEW(4, pointf); - Bezier (bz->list, 3, t, left->list, right->list); - return; - } - - lens = N_NEW(cnt, double); - sum = 0; - pts = bz->list; - for (i = 0; i < cnt; i++) { - lens[i] = approxLen (pts); - sum += lens[i]; - pts += 3; - } - len = t*sum; - sum = 0; - for (i = 0; i < cnt; i++) { - sum += lens[i]; - if (sum >= len) - break; - } - - left->size = 3*(i+1) + 1; - left->list = N_NEW(left->size,pointf); - right->size = 3*(cnt-i) + 1; - right->list = N_NEW(right->size,pointf); - for (j = 0; j < left->size; j++) - left->list[j] = bz->list[j]; - k = j - 4; - for (j = 0; j < right->size; j++) - right->list[j] = bz->list[k++]; - - last = lens[i]; - r = (len - (sum - last))/last; - Bezier (bz->list + 3*i, 3, r, left->list + 3*i, right->list); - - free (lens); -} - -/* multicolor: - * Draw an edge as a sequence of colors. - * Not sure how to handle multiple B-splines, so do a naive - * implementation. - * Return non-zero if color spec is incorrect - */ -static int multicolor (GVJ_t * job, edge_t * e, char** styles, char* colors, int num, double arrowsize, double penwidth) -{ - bezier bz; - bezier bz0, bz_l, bz_r; - int i, rv; - colorsegs_t* segs; - colorseg_t* s; - char* endcolor = NULL; - double left; - int first; /* first segment with t > 0 */ - - rv = parseSegs (colors, num, &segs); - if (rv > 1) { - Agraph_t* g = agraphof(agtail(e)); - agerr (AGPREV, "in edge %s%s%s\n", agnameof(agtail(e)), (agisdirected(g)?" -> ":" -- "), agnameof(aghead(e))); - - if (rv == 2) - return 1; - } - else if (rv == 1) - return 1; - - - for (i = 0; i < ED_spl(e)->size; i++) { - left = 1; - bz = ED_spl(e)->list[i]; - first = 1; - for (s = segs->segs; s->color; s++) { - if (AEQ0(s->t)) continue; - gvrender_set_pencolor(job, s->color); - left -= s->t; - endcolor = s->color; - if (first) { - first = 0; - splitBSpline (&bz, s->t, &bz_l, &bz_r); - gvrender_beziercurve(job, bz_l.list, bz_l.size, FALSE, FALSE, FALSE); - free (bz_l.list); - if (AEQ0(left)) { - free (bz_r.list); - break; - } - } - else if (AEQ0(left)) { - gvrender_beziercurve(job, bz_r.list, bz_r.size, FALSE, FALSE, FALSE); - free (bz_r.list); - break; - } - else { - bz0 = bz_r; - splitBSpline (&bz0, (s->t)/(left+s->t), &bz_l, &bz_r); - free (bz0.list); - gvrender_beziercurve(job, bz_l.list, bz_l.size, FALSE, FALSE, FALSE); - free (bz_l.list); - } - - } - /* arrow_gen resets the job style (How? FIXME) - * If we have more splines to do, restore the old one. - * Use local copy of penwidth to work around reset. - */ - if (bz.sflag) { - gvrender_set_pencolor(job, segs->segs->color); - gvrender_set_fillcolor(job, segs->segs->color); - arrow_gen(job, EMIT_TDRAW, bz.sp, bz.list[0], arrowsize, penwidth, bz.sflag); - } - if (bz.eflag) { - gvrender_set_pencolor(job, endcolor); - gvrender_set_fillcolor(job, endcolor); - arrow_gen(job, EMIT_HDRAW, bz.ep, bz.list[bz.size - 1], arrowsize, penwidth, bz.eflag); - } - if ((ED_spl(e)->size>1) && (bz.sflag||bz.eflag) && styles) - gvrender_set_style(job, styles); - } - freeSegs (segs); - return 0; -} - -static void free_stroke (stroke_t* sp) -{ - if (sp) { - free (sp->vertices); - free (sp); - } -} - -typedef double (*radfunc_t)(double,double,double); - -static double forfunc (double curlen, double totallen, double initwid) -{ - return ((1 - (curlen/totallen))*initwid/2.0); -} - -static double revfunc (double curlen, double totallen, double initwid) -{ - return (((curlen/totallen))*initwid/2.0); -} - -static double nonefunc (double curlen, double totallen, double initwid) -{ - return (initwid/2.0); -} - -static double bothfunc (double curlen, double totallen, double initwid) -{ - double fr = curlen/totallen; - if (fr <= 0.5) return (fr*initwid); - else return ((1-fr)*initwid); -} - -static radfunc_t -taperfun (edge_t* e) -{ - char* attr; - if (E_dir && ((attr = agxget(e, E_dir)))[0]) { - if (streq(attr, "forward")) return forfunc; - if (streq(attr, "back")) return revfunc; - if (streq(attr, "both")) return bothfunc; - if (streq(attr, "none")) return nonefunc; - } - return (agisdirected(agraphof(aghead(e))) ? forfunc : nonefunc); -} - -static void emit_edge_graphics(GVJ_t * job, edge_t * e, char** styles) -{ - int i, j, cnum, numc = 0, numsemi = 0; - char *color, *pencolor, *fillcolor; - char *headcolor, *tailcolor, *lastcolor; - char *colors = NULL; - bezier bz; - splines offspl, tmpspl; - pointf pf0, pf1, pf2 = { 0, 0 }, pf3, *offlist, *tmplist; - double arrowsize, numc2, penwidth=job->obj->penwidth; - char* p; - boolean tapered = 0; - -#define SEP 2.0 - - setColorScheme (agget (e, "colorscheme")); - if (ED_spl(e)) { - arrowsize = late_double(e, E_arrowsz, 1.0, 0.0); - color = late_string(e, E_color, ""); - - if (styles) { - char** sp = styles; - while ((p = *sp++)) { - if (streq(p, "tapered")) { - tapered = 1; - break; - } - } - } - - /* need to know how many colors separated by ':' */ - for (p = color; *p; p++) { - if (*p == ':') - numc++; - else if (*p == ';') - numsemi++; - } - - if (numsemi && numc) { - if (multicolor (job, e, styles, color, numc+1, arrowsize, penwidth)) { - color = DEFAULT_COLOR; - } - else - return; - } - - fillcolor = pencolor = color; - if (ED_gui_state(e) & GUI_STATE_ACTIVE) { - pencolor = late_nnstring(e, E_activepencolor, - default_pencolor(pencolor, DEFAULT_ACTIVEPENCOLOR)); - fillcolor = late_nnstring(e, E_activefillcolor, DEFAULT_ACTIVEFILLCOLOR); - } - else if (ED_gui_state(e) & GUI_STATE_SELECTED) { - pencolor = late_nnstring(e, E_selectedpencolor, - default_pencolor(pencolor, DEFAULT_SELECTEDPENCOLOR)); - fillcolor = late_nnstring(e, E_selectedfillcolor, DEFAULT_SELECTEDFILLCOLOR); - } - else if (ED_gui_state(e) & GUI_STATE_DELETED) { - pencolor = late_nnstring(e, E_deletedpencolor, - default_pencolor(pencolor, DEFAULT_DELETEDPENCOLOR)); - fillcolor = late_nnstring(e, E_deletedfillcolor, DEFAULT_DELETEDFILLCOLOR); - } - else if (ED_gui_state(e) & GUI_STATE_VISITED) { - pencolor = late_nnstring(e, E_visitedpencolor, - default_pencolor(pencolor, DEFAULT_VISITEDPENCOLOR)); - fillcolor = late_nnstring(e, E_visitedfillcolor, DEFAULT_VISITEDFILLCOLOR); - } - else - fillcolor = late_nnstring(e, E_fillcolor, color); - if (pencolor != color) - gvrender_set_pencolor(job, pencolor); - if (fillcolor != color) - gvrender_set_fillcolor(job, fillcolor); - color = pencolor; - - if (tapered) { - stroke_t* stp; - if (*color == '\0') color = DEFAULT_COLOR; - if (*fillcolor == '\0') fillcolor = DEFAULT_COLOR; - gvrender_set_pencolor(job, "transparent"); - gvrender_set_fillcolor(job, color); - bz = ED_spl(e)->list[0]; - stp = taper (&bz, taperfun (e), penwidth, 0, 0); - gvrender_polygon(job, stp->vertices, stp->nvertices, TRUE); - free_stroke (stp); - gvrender_set_pencolor(job, color); - if (fillcolor != color) - gvrender_set_fillcolor(job, fillcolor); - if (bz.sflag) { - arrow_gen(job, EMIT_TDRAW, bz.sp, bz.list[0], arrowsize, penwidth, bz.sflag); - } - if (bz.eflag) { - arrow_gen(job, EMIT_HDRAW, bz.ep, bz.list[bz.size - 1], arrowsize, penwidth, bz.eflag); - } - } - /* if more than one color - then generate parallel beziers, one per color */ - else if (numc) { - /* calculate and save offset vector spline and initialize first offset spline */ - tmpspl.size = offspl.size = ED_spl(e)->size; - offspl.list = malloc(sizeof(bezier) * offspl.size); - tmpspl.list = malloc(sizeof(bezier) * tmpspl.size); - numc2 = (2 + numc) / 2.0; - for (i = 0; i < offspl.size; i++) { - bz = ED_spl(e)->list[i]; - tmpspl.list[i].size = offspl.list[i].size = bz.size; - offlist = offspl.list[i].list = malloc(sizeof(pointf) * bz.size); - tmplist = tmpspl.list[i].list = malloc(sizeof(pointf) * bz.size); - pf3 = bz.list[0]; - for (j = 0; j < bz.size - 1; j += 3) { - pf0 = pf3; - pf1 = bz.list[j + 1]; - /* calculate perpendicular vectors for each bezier point */ - if (j == 0) /* first segment, no previous pf2 */ - offlist[j] = computeoffset_p(pf0, pf1, SEP); - else /* i.e. pf2 is available from previous segment */ - offlist[j] = computeoffset_p(pf2, pf1, SEP); - pf2 = bz.list[j + 2]; - pf3 = bz.list[j + 3]; - offlist[j + 1] = offlist[j + 2] = - computeoffset_qr(pf0, pf1, pf2, pf3, SEP); - /* initialize tmpspl to outermost position */ - tmplist[j].x = pf0.x - numc2 * offlist[j].x; - tmplist[j].y = pf0.y - numc2 * offlist[j].y; - tmplist[j + 1].x = pf1.x - numc2 * offlist[j + 1].x; - tmplist[j + 1].y = pf1.y - numc2 * offlist[j + 1].y; - tmplist[j + 2].x = pf2.x - numc2 * offlist[j + 2].x; - tmplist[j + 2].y = pf2.y - numc2 * offlist[j + 2].y; - } - /* last segment, no next pf1 */ - offlist[j] = computeoffset_p(pf2, pf3, SEP); - tmplist[j].x = pf3.x - numc2 * offlist[j].x; - tmplist[j].y = pf3.y - numc2 * offlist[j].y; - } - lastcolor = headcolor = tailcolor = color; - colors = strdup(color); - for (cnum = 0, color = strtok(colors, ":"); color; - cnum++, color = strtok(0, ":")) { - if (!color[0]) - color = DEFAULT_COLOR; - if (color != lastcolor) { - if (! (ED_gui_state(e) & (GUI_STATE_ACTIVE | GUI_STATE_SELECTED))) { - gvrender_set_pencolor(job, color); - gvrender_set_fillcolor(job, color); - } - lastcolor = color; - } - if (cnum == 0) - headcolor = tailcolor = color; - if (cnum == 1) - tailcolor = color; - for (i = 0; i < tmpspl.size; i++) { - tmplist = tmpspl.list[i].list; - offlist = offspl.list[i].list; - for (j = 0; j < tmpspl.list[i].size; j++) { - tmplist[j].x += offlist[j].x; - tmplist[j].y += offlist[j].y; - } - gvrender_beziercurve(job, tmplist, tmpspl.list[i].size, - FALSE, FALSE, FALSE); - } - } - if (bz.sflag) { - if (color != tailcolor) { - color = tailcolor; - if (! (ED_gui_state(e) & (GUI_STATE_ACTIVE | GUI_STATE_SELECTED))) { - gvrender_set_pencolor(job, color); - gvrender_set_fillcolor(job, color); - } - } - arrow_gen(job, EMIT_TDRAW, bz.sp, bz.list[0], - arrowsize, penwidth, bz.sflag); - } - if (bz.eflag) { - if (color != headcolor) { - color = headcolor; - if (! (ED_gui_state(e) & (GUI_STATE_ACTIVE | GUI_STATE_SELECTED))) { - gvrender_set_pencolor(job, color); - gvrender_set_fillcolor(job, color); - } - } - arrow_gen(job, EMIT_HDRAW, bz.ep, bz.list[bz.size - 1], - arrowsize, penwidth, bz.eflag); - } - free(colors); - for (i = 0; i < offspl.size; i++) { - free(offspl.list[i].list); - free(tmpspl.list[i].list); - } - free(offspl.list); - free(tmpspl.list); - } else { - if (! (ED_gui_state(e) & (GUI_STATE_ACTIVE | GUI_STATE_SELECTED))) { - if (color[0]) { - gvrender_set_pencolor(job, color); - gvrender_set_fillcolor(job, fillcolor); - } else { - gvrender_set_pencolor(job, DEFAULT_COLOR); - if (fillcolor[0]) - gvrender_set_fillcolor(job, fillcolor); - else - gvrender_set_fillcolor(job, DEFAULT_COLOR); - } - } - for (i = 0; i < ED_spl(e)->size; i++) { - bz = ED_spl(e)->list[i]; - if (job->flags & GVRENDER_DOES_ARROWS) { - gvrender_beziercurve(job, bz.list, bz.size, bz.sflag, bz.eflag, FALSE); - } else { - gvrender_beziercurve(job, bz.list, bz.size, FALSE, FALSE, FALSE); - if (bz.sflag) { - arrow_gen(job, EMIT_TDRAW, bz.sp, bz.list[0], - arrowsize, penwidth, bz.sflag); - } - if (bz.eflag) { - arrow_gen(job, EMIT_HDRAW, bz.ep, bz.list[bz.size - 1], - arrowsize, penwidth, bz.eflag); - } - if ((ED_spl(e)->size>1) && (bz.sflag||bz.eflag) && styles) - gvrender_set_style(job, styles); - } - } - } - } -} - -static boolean edge_in_box(edge_t *e, boxf b) -{ - splines *spl; - textlabel_t *lp; - - spl = ED_spl(e); - if (spl && boxf_overlap(spl->bb, b)) - return TRUE; - - lp = ED_label(e); - if (lp && overlap_label(lp, b)) - return TRUE; - - lp = ED_xlabel(e); - if (lp && lp->set && overlap_label(lp, b)) - return TRUE; - - return FALSE; -} - -static void emit_begin_edge(GVJ_t * job, edge_t * e, char** styles) -{ - obj_state_t *obj; - int flags = job->flags; - char *s; - textlabel_t *lab = NULL, *tlab = NULL, *hlab = NULL; - pointf *pbs = NULL; - int i, nump, *pbs_n = NULL, pbs_poly_n = 0; - char* dflt_url = NULL; - char* dflt_target = NULL; - double penwidth; - - obj = push_obj_state(job); - obj->type = EDGE_OBJTYPE; - obj->u.e = e; - obj->emit_state = EMIT_EDRAW; - if (ED_label(e) && !ED_label(e)->html && mapBool(agget(e,"labelaligned"),FALSE)) - obj->labeledgealigned = TRUE; - - /* We handle the edge style and penwidth here because the width - * is needed below for calculating polygonal image maps - */ - if (styles && ED_spl(e)) gvrender_set_style(job, styles); - - if (E_penwidth && ((s=agxget(e,E_penwidth)) && s[0])) { - penwidth = late_double(e, E_penwidth, 1.0, 0.0); - gvrender_set_penwidth(job, penwidth); - } - - if (flags & GVRENDER_DOES_Z) { - /* obj->tail_z = late_double(agtail(e), N_z, 0.0, -1000.0); */ - /* obj->head_z = late_double(aghead(e), N_z, 0.0, -MAXFLOAT); */ - if (GD_odim(agraphof(agtail(e))) >=3) { - obj->tail_z = POINTS(ND_pos(agtail(e))[2]); - obj->head_z = POINTS(ND_pos(aghead(e))[2]); - } else { - obj->tail_z = obj->head_z = 0.0; - } - } - - if (flags & GVRENDER_DOES_LABELS) { - if ((lab = ED_label(e))) - obj->label = lab->text; - obj->taillabel = obj->headlabel = obj->xlabel = obj->label; - if ((tlab = ED_xlabel(e))) - obj->xlabel = tlab->text; - if ((tlab = ED_tail_label(e))) - obj->taillabel = tlab->text; - if ((hlab = ED_head_label(e))) - obj->headlabel = hlab->text; - } - - if (flags & GVRENDER_DOES_MAPS) { - agxbuf xb; - unsigned char xbuf[SMALLBUF]; - - agxbinit(&xb, SMALLBUF, xbuf); - s = getObjId (job, e, &xb); - obj->id = strdup_and_subst_obj(s, (void*)e); - agxbfree(&xb); - - if (((s = agget(e, "href")) && s[0]) || ((s = agget(e, "URL")) && s[0])) - dflt_url = strdup_and_subst_obj(s, (void*)e); - if (((s = agget(e, "edgehref")) && s[0]) || ((s = agget(e, "edgeURL")) && s[0])) - obj->url = strdup_and_subst_obj(s, (void*)e); - else if (dflt_url) - obj->url = strdup(dflt_url); - if (((s = agget(e, "labelhref")) && s[0]) || ((s = agget(e, "labelURL")) && s[0])) - obj->labelurl = strdup_and_subst_obj(s, (void*)e); - else if (dflt_url) - obj->labelurl = strdup(dflt_url); - if (((s = agget(e, "tailhref")) && s[0]) || ((s = agget(e, "tailURL")) && s[0])) { - obj->tailurl = strdup_and_subst_obj(s, (void*)e); - obj->explicit_tailurl = TRUE; - } - else if (dflt_url) - obj->tailurl = strdup(dflt_url); - if (((s = agget(e, "headhref")) && s[0]) || ((s = agget(e, "headURL")) && s[0])) { - obj->headurl = strdup_and_subst_obj(s, (void*)e); - obj->explicit_headurl = TRUE; - } - else if (dflt_url) - obj->headurl = strdup(dflt_url); - } - - if (flags & GVRENDER_DOES_TARGETS) { - if ((s = agget(e, "target")) && s[0]) - dflt_target = strdup_and_subst_obj(s, (void*)e); - if ((s = agget(e, "edgetarget")) && s[0]) { - obj->explicit_edgetarget = TRUE; - obj->target = strdup_and_subst_obj(s, (void*)e); - } - else if (dflt_target) - obj->target = strdup(dflt_target); - if ((s = agget(e, "labeltarget")) && s[0]) - obj->labeltarget = strdup_and_subst_obj(s, (void*)e); - else if (dflt_target) - obj->labeltarget = strdup(dflt_target); - if ((s = agget(e, "tailtarget")) && s[0]) { - obj->tailtarget = strdup_and_subst_obj(s, (void*)e); - obj->explicit_tailtarget = TRUE; - } - else if (dflt_target) - obj->tailtarget = strdup(dflt_target); - if ((s = agget(e, "headtarget")) && s[0]) { - obj->explicit_headtarget = TRUE; - obj->headtarget = strdup_and_subst_obj(s, (void*)e); - } - else if (dflt_target) - obj->headtarget = strdup(dflt_target); - } - - if (flags & GVRENDER_DOES_TOOLTIPS) { - if (((s = agget(e, "tooltip")) && s[0]) || - ((s = agget(e, "edgetooltip")) && s[0])) { - char* tooltip = preprocessTooltip (s, e); - obj->tooltip = strdup_and_subst_obj(tooltip, (void*)e); - free (tooltip); - obj->explicit_tooltip = TRUE; - } - else if (obj->label) - obj->tooltip = strdup(obj->label); - - if ((s = agget(e, "labeltooltip")) && s[0]) { - char* tooltip = preprocessTooltip (s, e); - obj->labeltooltip = strdup_and_subst_obj(tooltip, (void*)e); - free (tooltip); - obj->explicit_labeltooltip = TRUE; - } - else if (obj->label) - obj->labeltooltip = strdup(obj->label); - - if ((s = agget(e, "tailtooltip")) && s[0]) { - char* tooltip = preprocessTooltip (s, e); - obj->tailtooltip = strdup_and_subst_obj(tooltip, (void*)e); - free (tooltip); - obj->explicit_tailtooltip = TRUE; - } - else if (obj->taillabel) - obj->tailtooltip = strdup(obj->taillabel); - - if ((s = agget(e, "headtooltip")) && s[0]) { - char* tooltip = preprocessTooltip (s, e); - obj->headtooltip = strdup_and_subst_obj(tooltip, (void*)e); - free (tooltip); - obj->explicit_headtooltip = TRUE; - } - else if (obj->headlabel) - obj->headtooltip = strdup(obj->headlabel); - } - - free (dflt_url); - free (dflt_target); - - if (flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) { - if (ED_spl(e) && (obj->url || obj->tooltip) && (flags & GVRENDER_DOES_MAP_POLYGON)) { - int ns; - splines *spl; - double w2 = MAX(job->obj->penwidth/2.0,2.0); - - spl = ED_spl(e); - ns = spl->size; /* number of splines */ - for (i = 0; i < ns; i++) - map_output_bspline (&pbs, &pbs_n, &pbs_poly_n, spl->list+i, w2); - obj->url_bsplinemap_poly_n = pbs_poly_n; - obj->url_bsplinemap_n = pbs_n; - if (! (flags & GVRENDER_DOES_TRANSFORM)) { - for ( nump = 0, i = 0; i < pbs_poly_n; i++) - nump += pbs_n[i]; - gvrender_ptf_A(job, pbs, pbs, nump); - } - obj->url_bsplinemap_p = pbs; - obj->url_map_shape = MAP_POLYGON; - obj->url_map_p = pbs; - obj->url_map_n = pbs_n[0]; - } - } - - gvrender_begin_edge(job, e); - if (obj->url || obj->explicit_tooltip) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, obj->id); -} - -static void -emit_edge_label(GVJ_t* job, textlabel_t* lbl, emit_state_t lkind, int explicit, - char* url, char* tooltip, char* target, char *id, splines* spl) -{ - int flags = job->flags; - emit_state_t old_emit_state; - char* newid; - char* type; - - if ((lbl == NULL) || !(lbl->set)) return; - if (id) { /* non-NULL if needed */ - newid = N_NEW(strlen(id) + sizeof("-headlabel"),char); - switch (lkind) { - case EMIT_ELABEL : - type = "label"; - break; - case EMIT_HLABEL : - type = "headlabel"; - break; - case EMIT_TLABEL : - type = "taillabel"; - break; - default : - assert (0); - break; - } - sprintf (newid, "%s-%s", id, type); - } - else - newid = NULL; - old_emit_state = job->obj->emit_state; - job->obj->emit_state = lkind; - if ((url || explicit) && !(flags & EMIT_CLUSTERS_LAST)) { - map_label(job, lbl); - gvrender_begin_anchor(job, url, tooltip, target, newid); - } - emit_label(job, lkind, lbl); - if (spl) emit_attachment(job, lbl, spl); - if (url || explicit) { - if (flags & EMIT_CLUSTERS_LAST) { - map_label(job, lbl); - gvrender_begin_anchor(job, url, tooltip, target, newid); - } - gvrender_end_anchor(job); - } - if (newid) free (newid); - job->obj->emit_state = old_emit_state; -} - -/* nodeIntersect: - * Common logic for setting hot spots at the beginning and end of - * an edge. - * If we are given a value (url, tooltip, target) explicitly set for - * the head/tail, we use that. - * Otherwise, if we are given a value explicitly set for the edge, - * we use that. - * Otherwise, we use whatever the argument value is. - * We also note whether or not the tooltip was explicitly set. - * If the url is non-NULL or the tooltip was explicit, we set - * a hot spot around point p. - */ -static void nodeIntersect (GVJ_t * job, pointf p, - boolean explicit_iurl, char* iurl, - boolean explicit_itooltip, char* itooltip, - boolean explicit_itarget, char* itarget) -{ - obj_state_t *obj = job->obj; - char* url; -#if 0 - char* tooltip; - char* target; -#endif - boolean explicit; - - if (explicit_iurl) url = iurl; - else url = obj->url; - if (explicit_itooltip) { -#if 0 - tooltip = itooltip; -#endif - explicit = TRUE; - } - else if (obj->explicit_tooltip) { -#if 0 - tooltip = obj->tooltip; -#endif - explicit = TRUE; - } - else { -#if 0 - tooltip = itooltip; -#endif - explicit = FALSE; - } -#if 0 - if (explicit_itarget) - target = itarget; - else if (obj->explicit_edgetarget) - target = obj->target; - else - target = itarget; -#endif - - if (url || explicit) { - _map_point(job, p); -#if 0 -/* this doesn't work because there is nothing contained in the anchor */ - gvrender_begin_anchor(job, url, tooltip, target, obj->id); - gvrender_end_anchor(job); -#endif - } -} - -static void emit_end_edge(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - edge_t *e = obj->u.e; - int i, nump; - - if (obj->url || obj->explicit_tooltip) { - gvrender_end_anchor(job); - if (obj->url_bsplinemap_poly_n) { - for ( nump = obj->url_bsplinemap_n[0], i = 1; i < obj->url_bsplinemap_poly_n; i++) { - /* additional polygon maps around remaining bezier pieces */ - obj->url_map_n = obj->url_bsplinemap_n[i]; - obj->url_map_p = &(obj->url_bsplinemap_p[nump]); - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, obj->id); - gvrender_end_anchor(job); - nump += obj->url_bsplinemap_n[i]; - } - } - } - obj->url_map_n = 0; /* null out copy so that it doesn't get freed twice */ - obj->url_map_p = NULL; - - if (ED_spl(e)) { - pointf p; - bezier bz; - - /* process intersection with tail node */ - bz = ED_spl(e)->list[0]; - if (bz.sflag) /* Arrow at start of splines */ - p = bz.sp; - else /* No arrow at start of splines */ - p = bz.list[0]; - nodeIntersect (job, p, obj->explicit_tailurl, obj->tailurl, - obj->explicit_tailtooltip, obj->tailtooltip, - obj->explicit_tailtarget, obj->tailtarget); - - /* process intersection with head node */ - bz = ED_spl(e)->list[ED_spl(e)->size - 1]; - if (bz.eflag) /* Arrow at end of splines */ - p = bz.ep; - else /* No arrow at end of splines */ - p = bz.list[bz.size - 1]; - nodeIntersect (job, p, obj->explicit_headurl, obj->headurl, - obj->explicit_headtooltip, obj->headtooltip, - obj->explicit_headtarget, obj->headtarget); - } - - emit_edge_label(job, ED_label(e), EMIT_ELABEL, - obj->explicit_labeltooltip, - obj->labelurl, obj->labeltooltip, obj->labeltarget, obj->id, - ((mapbool(late_string(e, E_decorate, "false")) && ED_spl(e)) ? ED_spl(e) : 0)); - emit_edge_label(job, ED_xlabel(e), EMIT_ELABEL, - obj->explicit_labeltooltip, - obj->labelurl, obj->labeltooltip, obj->labeltarget, obj->id, - ((mapbool(late_string(e, E_decorate, "false")) && ED_spl(e)) ? ED_spl(e) : 0)); - emit_edge_label(job, ED_head_label(e), EMIT_HLABEL, - obj->explicit_headtooltip, - obj->headurl, obj->headtooltip, obj->headtarget, obj->id, - 0); - emit_edge_label(job, ED_tail_label(e), EMIT_TLABEL, - obj->explicit_tailtooltip, - obj->tailurl, obj->tailtooltip, obj->tailtarget, obj->id, - 0); - - gvrender_end_edge(job); - pop_obj_state(job); -} - -static void emit_edge(GVJ_t * job, edge_t * e) -{ - char *s; - char *style; - char **styles = 0; - char **sp; - char *p; - - if (edge_in_box(e, job->clip) && edge_in_layer(job, agraphof(aghead(e)), e) ) { - - s = malloc(strlen(agnameof(agtail(e))) + 2 + strlen(agnameof(aghead(e))) + 1); - strcpy(s,agnameof(agtail(e))); - if (agisdirected(agraphof(aghead(e)))) - - strcat(s,"->"); - else - strcat(s,"--"); - strcat(s,agnameof(aghead(e))); - gvrender_comment(job, s); - free(s); - - s = late_string(e, E_comment, ""); - if (s[0]) - gvrender_comment(job, s); - - style = late_string(e, E_style, ""); - /* We shortcircuit drawing an invisible edge because the arrowhead - * code resets the style to solid, and most of the code generators - * (except PostScript) won't honor a previous style of invis. - */ - if (style[0]) { - styles = parse_style(style); - sp = styles; - while ((p = *sp++)) { - if (streq(p, "invis")) return; - } - } - - emit_begin_edge(job, e, styles); - emit_edge_graphics (job, e, styles); - emit_end_edge(job); - } -} - -static char adjust[] = {'l', 'n', 'r'}; - -static void -expandBB (boxf* bb, pointf p) -{ - if (p.x > bb->UR.x) - bb->UR.x = p.x; - if (p.x < bb->LL.x) - bb->LL.x = p.x; - if (p.y > bb->UR.y) - bb->UR.y = p.y; - if (p.y < bb->LL.y) - bb->LL.y = p.y; -} - -static boxf -ptsBB (xdot_point* inpts, int numpts, boxf* bb) -{ - boxf opbb; - int i; - - opbb.LL.x = opbb.UR.x = inpts->x; - opbb.LL.y = opbb.UR.y = inpts->y; - for (i = 1; i < numpts; i++) { - inpts++; - if (inpts->x < opbb.LL.x) - opbb.LL.x = inpts->x; - else if (inpts->x > opbb.UR.x) - opbb.UR.x = inpts->x; - if (inpts->y < opbb.LL.y) - opbb.LL.y = inpts->y; - else if (inpts->y > opbb.UR.y) - opbb.UR.y = inpts->y; - - } - expandBB (bb, opbb.LL); - expandBB (bb, opbb.UR); - return opbb; -} - -static boxf -textBB (double x, double y, textspan_t* span) -{ - boxf bb; - pointf sz = span->size; - - switch (span->just) { - case 'l': - bb.LL.x = x; - bb.UR.x = bb.LL.x + sz.x; - break; - case 'n': - bb.LL.x = x - sz.x / 2.0; - bb.UR.x = x + sz.x / 2.0; - break; - case 'r': - bb.UR.x = x; - bb.LL.x = bb.UR.x - sz.x; - break; - } - bb.UR.y = y + span->yoffset_layout; - bb.LL.y = bb.UR.y - sz.y; - return bb; -} - -static void -freePara (exdot_op* op) -{ - if (op->op.kind == xd_text) - free_textspan (op->span, 1); -} - -boxf xdotBB (Agraph_t* g) -{ - GVC_t *gvc = GD_gvc(g); - exdot_op* op; - int i; - double fontsize = 0.0; - char* fontname = NULL; - pointf pts[2]; - /* pointf sz; */ - boxf bb0; - boxf bb = GD_bb(g); - xdot* xd = (xdot*)GD_drawing(g)->xdots; - textfont_t tf, null_tf = {NULL,NULL,NULL,0.0,0,0}; - int fontflags = 0; - - if (!xd) return bb; - - if ((bb.LL.x == bb.UR.x) && (bb.LL.y == bb.UR.y)) { - bb.LL.x = bb.LL.y = MAXDOUBLE; - bb.UR.x = bb.UR.y = -MAXDOUBLE; - } - - op = (exdot_op*)(xd->ops); - for (i = 0; i < xd->cnt; i++) { - tf = null_tf; - switch (op->op.kind) { - case xd_filled_ellipse : - case xd_unfilled_ellipse : - pts[0].x = op->op.u.ellipse.x - op->op.u.ellipse.w; - pts[0].y = op->op.u.ellipse.y - op->op.u.ellipse.h; - pts[1].x = op->op.u.ellipse.x + op->op.u.ellipse.w; - pts[1].y = op->op.u.ellipse.y + op->op.u.ellipse.h; - op->bb.LL = pts[0]; - op->bb.UR = pts[1]; - expandBB (&bb, pts[0]); - expandBB (&bb, pts[1]); - break; - case xd_filled_polygon : - case xd_unfilled_polygon : - op->bb = ptsBB (op->op.u.polygon.pts, op->op.u.polygon.cnt, &bb); - break; - case xd_filled_bezier : - case xd_unfilled_bezier : - op->bb = ptsBB (op->op.u.polygon.pts, op->op.u.polygon.cnt, &bb); - break; - case xd_polyline : - op->bb = ptsBB (op->op.u.polygon.pts, op->op.u.polygon.cnt, &bb); - break; - case xd_text : - op->span = NEW(textspan_t); - op->span->str = strdup (op->op.u.text.text); - op->span->just = adjust [op->op.u.text.align]; - tf.name = fontname; - tf.size = fontsize; - tf.flags = fontflags; - op->span->font = dtinsert(gvc->textfont_dt, &tf); - textspan_size (gvc, op->span); - bb0 = textBB (op->op.u.text.x, op->op.u.text.y, op->span); - op->bb = bb0; - expandBB (&bb, bb0.LL); - expandBB (&bb, bb0.UR); - if (!xd->freefunc) - xd->freefunc = (freefunc_t)freePara; - break; - case xd_font : - fontsize = op->op.u.font.size; - fontname = op->op.u.font.name; - break; - case xd_fontchar : - fontflags = op->op.u.fontchar; - break; - default : - break; - } - op++; - } - return bb; -} - -static void init_gvc(GVC_t * gvc, graph_t * g) -{ - double xf, yf; - char *p; - int i; - - gvc->g = g; - - /* margins */ - gvc->graph_sets_margin = FALSE; - if ((p = agget(g, "margin"))) { - i = sscanf(p, "%lf,%lf", &xf, &yf); - if (i > 0) { - gvc->margin.x = gvc->margin.y = xf * POINTS_PER_INCH; - if (i > 1) - gvc->margin.y = yf * POINTS_PER_INCH; - gvc->graph_sets_margin = TRUE; - } - } - - /* pad */ - gvc->graph_sets_pad = FALSE; - if ((p = agget(g, "pad"))) { - i = sscanf(p, "%lf,%lf", &xf, &yf); - if (i > 0) { - gvc->pad.x = gvc->pad.y = xf * POINTS_PER_INCH; - if (i > 1) - gvc->pad.y = yf * POINTS_PER_INCH; - gvc->graph_sets_pad = TRUE; - } - } - - /* pagesize */ - gvc->graph_sets_pageSize = FALSE; - gvc->pageSize = GD_drawing(g)->page; - if ((GD_drawing(g)->page.x > 0.001) && (GD_drawing(g)->page.y > 0.001)) - gvc->graph_sets_pageSize = TRUE; - - /* rotation */ - if (GD_drawing(g)->landscape) - gvc->rotation = 90; - else - gvc->rotation = 0; - - /* pagedir */ - gvc->pagedir = "BL"; - if ((p = agget(g, "pagedir")) && p[0]) - gvc->pagedir = p; - - - /* bounding box */ - gvc->bb = GD_bb(g); - - /* clusters have peripheries */ - G_peripheries = agfindgraphattr(g, "peripheries"); - G_penwidth = agfindgraphattr(g, "penwidth"); - - /* default font */ - gvc->defaultfontname = late_nnstring(NULL, - N_fontname, DEFAULT_FONTNAME); - gvc->defaultfontsize = late_double(NULL, - N_fontsize, DEFAULT_FONTSIZE, MIN_FONTSIZE); - - /* default line style */ - gvc->defaultlinestyle = defaultlinestyle; - - gvc->graphname = agnameof(g); -} - -static void init_job_pad(GVJ_t *job) -{ - GVC_t *gvc = job->gvc; - - if (gvc->graph_sets_pad) { - job->pad = gvc->pad; - } - else { - switch (job->output_lang) { - case GVRENDER_PLUGIN: - job->pad.x = job->pad.y = job->render.features->default_pad; - break; - default: - job->pad.x = job->pad.y = DEFAULT_GRAPH_PAD; - break; - } - } -} - -static void init_job_margin(GVJ_t *job) -{ - GVC_t *gvc = job->gvc; - - if (gvc->graph_sets_margin) { - job->margin = gvc->margin; - } - else { - /* set default margins depending on format */ - switch (job->output_lang) { - case GVRENDER_PLUGIN: - job->margin = job->device.features->default_margin; - break; - case HPGL: case PCL: case MIF: case METAPOST: case VTX: case QPDF: - job->margin.x = job->margin.y = DEFAULT_PRINT_MARGIN; - break; - default: - job->margin.x = job->margin.y = DEFAULT_EMBED_MARGIN; - break; - } - } - -} - -static void init_job_dpi(GVJ_t *job, graph_t *g) -{ - GVJ_t *firstjob = job->gvc->active_jobs; - - if (GD_drawing(g)->dpi != 0) { - job->dpi.x = job->dpi.y = (double)(GD_drawing(g)->dpi); - } - else if (firstjob && firstjob->device_sets_dpi) { - job->dpi = firstjob->device_dpi; /* some devices set dpi in initialize() */ - } - else { - /* set default margins depending on format */ - switch (job->output_lang) { - case GVRENDER_PLUGIN: - job->dpi = job->device.features->default_dpi; - break; - default: - job->dpi.x = job->dpi.y = (double)(DEFAULT_DPI); - break; - } - } -} - -static void init_job_viewport(GVJ_t * job, graph_t * g) -{ - GVC_t *gvc = job->gvc; - pointf LL, UR, size, sz; - double X, Y, Z, x, y; - int rv; - Agnode_t *n; - char *str, *nodename = NULL, *junk = NULL; - - UR = gvc->bb.UR; - LL = gvc->bb.LL; - job->bb.LL.x = LL.x - job->pad.x; /* job->bb is bb of graph and padding - graph units */ - job->bb.LL.y = LL.y - job->pad.y; - job->bb.UR.x = UR.x + job->pad.x; - job->bb.UR.y = UR.y + job->pad.y; - sz.x = job->bb.UR.x - job->bb.LL.x; /* size, including padding - graph units */ - sz.y = job->bb.UR.y - job->bb.LL.y; - - /* determine final drawing size and scale to apply. */ - /* N.B. size given by user is not rotated by landscape mode */ - /* start with "natural" size of layout */ - - Z = 1.0; - if (GD_drawing(g)->size.x > 0.001 && GD_drawing(g)->size.y > 0.001) { /* graph size was given by user... */ - size = GD_drawing(g)->size; - if (sz.x == 0) sz.x = size.x; - if (sz.y == 0) sz.y = size.y; - if ((size.x < sz.x) || (size.y < sz.y) /* drawing is too big (in either axis) ... */ - || ((GD_drawing(g)->filled) /* or ratio=filled requested and ... */ - && (size.x > sz.x) && (size.y > sz.y))) /* drawing is too small (in both axes) ... */ - Z = MIN(size.x/sz.x, size.y/sz.y); - } - - /* default focus, in graph units = center of bb */ - x = (LL.x + UR.x) / 2.; - y = (LL.y + UR.y) / 2.; - - /* rotate and scale bb to give default absolute size in points*/ - job->rotation = job->gvc->rotation; - X = sz.x * Z; - Y = sz.y * Z; - - /* user can override */ - if ((str = agget(g, "viewport"))) { - nodename = malloc(strlen(str)+1); - junk = malloc(strlen(str)+1); - rv = sscanf(str, "%lf,%lf,%lf,\'%[^\']\'", &X, &Y, &Z, nodename); - if (rv == 4) { - n = agfindnode(g->root, nodename); - if (n) { - x = ND_coord(n).x; - y = ND_coord(n).y; - } - } - else { - rv = sscanf(str, "%lf,%lf,%lf,%[^,]%s", &X, &Y, &Z, nodename, junk); - if (rv == 4) { - n = agfindnode(g->root, nodename); - if (n) { - x = ND_coord(n).x; - y = ND_coord(n).y; - } - } - else { - rv = sscanf(str, "%lf,%lf,%lf,%lf,%lf", &X, &Y, &Z, &x, &y); - } - } - free (nodename); - free (junk); - } - /* rv is ignored since args retain previous values if not scanned */ - - /* job->view gives port size in graph units, unscaled or rotated - * job->zoom gives scaling factor. - * job->focus gives the position in the graph of the center of the port - */ - job->view.x = X; - job->view.y = Y; - job->zoom = Z; /* scaling factor */ - job->focus.x = x; - job->focus.y = y; -#if 0 -fprintf(stderr, "view=%g,%g, zoom=%g, focus=%g,%g\n", - job->view.x, job->view.y, - job->zoom, - job->focus.x, job->focus.y); -#endif -} - -static void emit_cluster_colors(GVJ_t * job, graph_t * g) -{ - graph_t *sg; - int c; - char *str; - - for (c = 1; c <= GD_n_cluster(g); c++) { - sg = GD_clust(g)[c]; - emit_cluster_colors(job, sg); - if (((str = agget(sg, "color")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - if (((str = agget(sg, "pencolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - if (((str = agget(sg, "bgcolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - if (((str = agget(sg, "fillcolor")) != 0) && str[0]) - gvrender_set_fillcolor(job, str); - if (((str = agget(sg, "fontcolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - } -} - -static void emit_colors(GVJ_t * job, graph_t * g) -{ - node_t *n; - edge_t *e; - char *str, *colors; - - gvrender_set_fillcolor(job, DEFAULT_FILL); - if (((str = agget(g, "bgcolor")) != 0) && str[0]) - gvrender_set_fillcolor(job, str); - if (((str = agget(g, "fontcolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - - emit_cluster_colors(job, g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (((str = agget(n, "color")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - if (((str = agget(n, "pencolor")) != 0) && str[0]) - gvrender_set_fillcolor(job, str); - if (((str = agget(n, "fillcolor")) != 0) && str[0]) { - if (strchr(str, ':')) { - colors = strdup(str); - for (str = strtok(colors, ":"); str; - str = strtok(0, ":")) { - if (str[0]) - gvrender_set_pencolor(job, str); - } - free(colors); - } - else { - gvrender_set_pencolor(job, str); - } - } - if (((str = agget(n, "fontcolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (((str = agget(e, "color")) != 0) && str[0]) { - if (strchr(str, ':')) { - colors = strdup(str); - for (str = strtok(colors, ":"); str; - str = strtok(0, ":")) { - if (str[0]) - gvrender_set_pencolor(job, str); - } - free(colors); - } - else { - gvrender_set_pencolor(job, str); - } - } - if (((str = agget(e, "fontcolor")) != 0) && str[0]) - gvrender_set_pencolor(job, str); - } - } -} - -static void emit_view(GVJ_t * job, graph_t * g, int flags) -{ - GVC_t * gvc = job->gvc; - node_t *n; - edge_t *e; - - gvc->common.viewNum++; - /* when drawing, lay clusters down before nodes and edges */ - if (!(flags & EMIT_CLUSTERS_LAST)) - emit_clusters(job, g, flags); - if (flags & EMIT_SORTED) { - /* output all nodes, then all edges */ - gvrender_begin_nodes(job); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - emit_node(job, n); - gvrender_end_nodes(job); - gvrender_begin_edges(job); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - emit_edge(job, e); - } - gvrender_end_edges(job); - } else if (flags & EMIT_EDGE_SORTED) { - /* output all edges, then all nodes */ - gvrender_begin_edges(job); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - emit_edge(job, e); - gvrender_end_edges(job); - gvrender_begin_nodes(job); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - emit_node(job, n); - gvrender_end_nodes(job); - } else if (flags & EMIT_PREORDER) { - gvrender_begin_nodes(job); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - if (write_node_test(g, n)) - emit_node(job, n); - gvrender_end_nodes(job); - gvrender_begin_edges(job); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (write_edge_test(g, e)) - emit_edge(job, e); - } - } - gvrender_end_edges(job); - } else { - /* output in breadth first graph walk order */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - emit_node(job, n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - emit_node(job, aghead(e)); - emit_edge(job, e); - } - } - } - /* when mapping, detect events on clusters after nodes and edges */ - if (flags & EMIT_CLUSTERS_LAST) - emit_clusters(job, g, flags); -} - -static void emit_begin_graph(GVJ_t * job, graph_t * g) -{ - obj_state_t *obj; - - obj = push_obj_state(job); - obj->type = ROOTGRAPH_OBJTYPE; - obj->u.g = g; - obj->emit_state = EMIT_GDRAW; - - initObjMapData (job, GD_label(g), g); - - gvrender_begin_graph(job, g); -} - -static void emit_end_graph(GVJ_t * job, graph_t * g) -{ - gvrender_end_graph(job); - pop_obj_state(job); -} - -#define NotFirstPage(j) (((j)->layerNum>1)||((j)->pagesArrayElem.x > 0)||((j)->pagesArrayElem.x > 0)) - -static void emit_page(GVJ_t * job, graph_t * g) -{ - obj_state_t *obj = job->obj; - int nump = 0, flags = job->flags; - textlabel_t *lab; - pointf *p = NULL; - char* saveid; - unsigned char buf[SMALLBUF]; - agxbuf xb; - - /* For the first page, we can use the values generated in emit_begin_graph. - * For multiple pages, we need to generate a new id. - */ - if (NotFirstPage(job)) { - agxbinit(&xb, SMALLBUF, buf); - saveid = obj->id; - layerPagePrefix (job, &xb); - agxbput (&xb, saveid); - obj->id = agxbuse(&xb); - } - else - saveid = NULL; - - setColorScheme (agget (g, "colorscheme")); - setup_page(job, g); - gvrender_begin_page(job); - gvrender_set_pencolor(job, DEFAULT_COLOR); - gvrender_set_fillcolor(job, DEFAULT_FILL); - if ((flags & (GVRENDER_DOES_MAPS | GVRENDER_DOES_TOOLTIPS)) - && (obj->url || obj->explicit_tooltip)) { - if (flags & (GVRENDER_DOES_MAP_RECTANGLE | GVRENDER_DOES_MAP_POLYGON)) { - if (flags & GVRENDER_DOES_MAP_RECTANGLE) { - obj->url_map_shape = MAP_RECTANGLE; - nump = 2; - } - else { - obj->url_map_shape = MAP_POLYGON; - nump = 4; - } - p = N_NEW(nump, pointf); - p[0] = job->pageBox.LL; - p[1] = job->pageBox.UR; - if (! (flags & (GVRENDER_DOES_MAP_RECTANGLE))) - rect2poly(p); - } - if (! (flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, p, p, nump); - obj->url_map_p = p; - obj->url_map_n = nump; - } - if ((flags & GVRENDER_DOES_LABELS) && ((lab = GD_label(g)))) - /* do graph label on every page and rely on clipping to show it on the right one(s) */ - obj->label = lab->text; - /* If EMIT_CLUSTERS_LAST is set, we assume any URL or tooltip - * attached to the root graph is emitted either in begin_page - * or end_page of renderer. - */ - if (!(flags & EMIT_CLUSTERS_LAST) && (obj->url || obj->explicit_tooltip)) { - emit_map_rect(job, job->clip); - gvrender_begin_anchor(job, obj->url, obj->tooltip, obj->target, obj->id); - } - /* if (numPhysicalLayers(job) == 1) */ - emit_background(job, g); - if (GD_label(g)) - emit_label(job, EMIT_GLABEL, GD_label(g)); - if (!(flags & EMIT_CLUSTERS_LAST) && (obj->url || obj->explicit_tooltip)) - gvrender_end_anchor(job); - emit_view(job,g,flags); - gvrender_end_page(job); - if (saveid) { - agxbfree(&xb); - obj->id = saveid; - } -} - -void emit_graph(GVJ_t * job, graph_t * g) -{ - node_t *n; - char *s; - int flags = job->flags; - int* lp; - - /* device dpi is now known */ - job->scale.x = job->zoom * job->dpi.x / POINTS_PER_INCH; - job->scale.y = job->zoom * job->dpi.y / POINTS_PER_INCH; - - job->devscale.x = job->dpi.x / POINTS_PER_INCH; - job->devscale.y = job->dpi.y / POINTS_PER_INCH; - if ((job->flags & GVRENDER_Y_GOES_DOWN) || (Y_invert)) - job->devscale.y *= -1; - - /* compute current view in graph units */ - if (job->rotation) { - job->view.y = job->width / job->scale.y; - job->view.x = job->height / job->scale.x; - } - else { - job->view.x = job->width / job->scale.x; - job->view.y = job->height / job->scale.y; - } -#if 0 -fprintf(stderr,"focus=%g,%g view=%g,%g\n", - job->focus.x, job->focus.y, job->view.x, job->view.y); -#endif - - s = late_string(g, agattr(g, AGRAPH, "comment", 0), ""); - gvrender_comment(job, s); - - job->layerNum = 0; - emit_begin_graph(job, g); - - if (flags & EMIT_COLORS) - emit_colors(job,g); - - /* reset node state */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_state(n) = 0; - /* iterate layers */ - for (firstlayer(job,&lp); validlayer(job); nextlayer(job,&lp)) { - if (numPhysicalLayers (job) > 1) - gvrender_begin_layer(job); - - /* iterate pages */ - for (firstpage(job); validpage(job); nextpage(job)) - emit_page(job, g); - - if (numPhysicalLayers (job) > 1) - gvrender_end_layer(job); - } - emit_end_graph(job, g); -} - -/* support for stderr_once */ -static void free_string_entry(Dict_t * dict, char *key, Dtdisc_t * disc) -{ - free(key); -} - -static Dict_t *strings; -static Dtdisc_t stringdict = { - 0, /* key - the object itself */ - 0, /* size - null-terminated string */ - -1, /* link - allocate separate holder objects */ - NIL(Dtmake_f), - (Dtfree_f) free_string_entry, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -int emit_once(char *str) -{ - if (strings == 0) - strings = dtopen(&stringdict, Dtoset); - if (!dtsearch(strings, str)) { - dtinsert(strings, strdup(str)); - return TRUE; - } - return FALSE; -} - -void emit_once_reset(void) -{ - if (strings) { - dtclose(strings); - strings = 0; - } -} - -static void emit_begin_cluster(GVJ_t * job, Agraph_t * sg) -{ - obj_state_t *obj; - - obj = push_obj_state(job); - obj->type = CLUSTER_OBJTYPE; - obj->u.sg = sg; - obj->emit_state = EMIT_CDRAW; - - initObjMapData (job, GD_label(sg), sg); - - gvrender_begin_cluster(job, sg); -} - -static void emit_end_cluster(GVJ_t * job, Agraph_t * g) -{ - gvrender_end_cluster(job, g); - pop_obj_state(job); -} - -void emit_clusters(GVJ_t * job, Agraph_t * g, int flags) -{ - int doPerim, c, istyle, filled; - pointf AF[4]; - char *color, *fillcolor, *pencolor, **style, *s; - graph_t *sg; - node_t *n; - edge_t *e; - obj_state_t *obj; - textlabel_t *lab; - int doAnchor; - double penwidth; - char* clrs[2]; - - for (c = 1; c <= GD_n_cluster(g); c++) { - sg = GD_clust(g)[c]; - if (clust_in_layer(job, sg) == FALSE) - continue; - /* when mapping, detect events on clusters after sub_clusters */ - if (flags & EMIT_CLUSTERS_LAST) - emit_clusters(job, sg, flags); - emit_begin_cluster(job, sg); - obj = job->obj; - doAnchor = (obj->url || obj->explicit_tooltip); - setColorScheme (agget (sg, "colorscheme")); - if (doAnchor && !(flags & EMIT_CLUSTERS_LAST)) { - emit_map_rect(job, GD_bb(sg)); - gvrender_begin_anchor(job, obj->url, obj->tooltip, obj->target, obj->id); - } - filled = FALSE; - istyle = 0; - if ((style = checkClusterStyle(sg, &istyle))) { - gvrender_set_style(job, style); - if (istyle & FILLED) - filled = FILL; - } - fillcolor = pencolor = 0; - - if (GD_gui_state(sg) & GUI_STATE_ACTIVE) { - pencolor = late_nnstring(sg, G_activepencolor, DEFAULT_ACTIVEPENCOLOR); - fillcolor = late_nnstring(sg, G_activefillcolor, DEFAULT_ACTIVEFILLCOLOR); - filled = TRUE; - } - else if (GD_gui_state(sg) & GUI_STATE_SELECTED) { - pencolor = late_nnstring(sg, G_activepencolor, DEFAULT_SELECTEDPENCOLOR); - fillcolor = late_nnstring(sg, G_activefillcolor, DEFAULT_SELECTEDFILLCOLOR); - filled = TRUE; - } - else if (GD_gui_state(sg) & GUI_STATE_DELETED) { - pencolor = late_nnstring(sg, G_deletedpencolor, DEFAULT_DELETEDPENCOLOR); - fillcolor = late_nnstring(sg, G_deletedfillcolor, DEFAULT_DELETEDFILLCOLOR); - filled = TRUE; - } - else if (GD_gui_state(sg) & GUI_STATE_VISITED) { - pencolor = late_nnstring(sg, G_visitedpencolor, DEFAULT_VISITEDPENCOLOR); - fillcolor = late_nnstring(sg, G_visitedfillcolor, DEFAULT_VISITEDFILLCOLOR); - filled = TRUE; - } - else { - if (((color = agget(sg, "color")) != 0) && color[0]) - fillcolor = pencolor = color; - if (((color = agget(sg, "pencolor")) != 0) && color[0]) - pencolor = color; - if (((color = agget(sg, "fillcolor")) != 0) && color[0]) - fillcolor = color; - /* bgcolor is supported for backward compatability - if fill is set, fillcolor trumps bgcolor, so - don't bother checking. - if gradient is set fillcolor trumps bgcolor - */ - if ((!filled || !fillcolor) && ((color = agget(sg, "bgcolor")) != 0) && color[0]) { - fillcolor = color; - filled = FILL; - } - - } - if (!pencolor) pencolor = DEFAULT_COLOR; - if (!fillcolor) fillcolor = DEFAULT_FILL; - clrs[0] = NULL; - if (filled) { - float frac; - if (findStopColor (fillcolor, clrs, &frac)) { - gvrender_set_fillcolor(job, clrs[0]); - if (clrs[1]) - gvrender_set_gradient_vals(job,clrs[1],late_int(sg,G_gradientangle,0,0), frac); - else - gvrender_set_gradient_vals(job,DEFAULT_COLOR,late_int(sg,G_gradientangle,0,0), frac); - if (istyle & RADIAL) - filled = RGRADIENT; - else - filled = GRADIENT; - } - else - gvrender_set_fillcolor(job, fillcolor); - } - - if (G_penwidth && ((s=ag_xget(sg,G_penwidth)) && s[0])) { - penwidth = late_double(sg, G_penwidth, 1.0, 0.0); - gvrender_set_penwidth(job, penwidth); - } - - if (istyle & ROUNDED) { - if ((doPerim = late_int(sg, G_peripheries, 1, 0)) || filled) { - AF[0] = GD_bb(sg).LL; - AF[2] = GD_bb(sg).UR; - AF[1].x = AF[2].x; - AF[1].y = AF[0].y; - AF[3].x = AF[0].x; - AF[3].y = AF[2].y; - if (doPerim) - gvrender_set_pencolor(job, pencolor); - else - gvrender_set_pencolor(job, "transparent"); - round_corners(job, AF, 4, istyle, filled); - } - } - else if (istyle & STRIPED) { - int rv; - AF[0] = GD_bb(sg).LL; - AF[2] = GD_bb(sg).UR; - AF[1].x = AF[2].x; - AF[1].y = AF[0].y; - AF[3].x = AF[0].x; - AF[3].y = AF[2].y; - if (late_int(sg, G_peripheries, 1, 0) == 0) - gvrender_set_pencolor(job, "transparent"); - else - gvrender_set_pencolor(job, pencolor); - rv = stripedBox (job, AF, fillcolor, 0); - if (rv > 1) - agerr (AGPREV, "in cluster %s\n", agnameof(sg)); - gvrender_box(job, GD_bb(sg), 0); - } - else { - if (late_int(sg, G_peripheries, 1, 0)) { - gvrender_set_pencolor(job, pencolor); - gvrender_box(job, GD_bb(sg), filled); - } - else if (filled) { - gvrender_set_pencolor(job, "transparent"); - gvrender_box(job, GD_bb(sg), filled); - } - } - - free (clrs[0]); - if ((lab = GD_label(sg))) - emit_label(job, EMIT_CLABEL, lab); - - if (doAnchor) { - if (flags & EMIT_CLUSTERS_LAST) { - emit_map_rect(job, GD_bb(sg)); - gvrender_begin_anchor(job, obj->url, obj->tooltip, obj->target, obj->id); - } - gvrender_end_anchor(job); - } - - if (flags & EMIT_PREORDER) { - for (n = agfstnode(sg); n; n = agnxtnode(sg, n)) { - emit_node(job, n); - for (e = agfstout(sg, n); e; e = agnxtout(sg, e)) - emit_edge(job, e); - } - } - emit_end_cluster(job, g); - /* when drawing, lay down clusters before sub_clusters */ - if (!(flags & EMIT_CLUSTERS_LAST)) - emit_clusters(job, sg, flags); - } -} - -static boolean is_style_delim(int c) -{ - switch (c) { - case '(': - case ')': - case ',': - case '\0': - return TRUE; - default: - return FALSE; - } -} - -#define SID 1 - -static int style_token(char **s, agxbuf * xb) -{ - char *p = *s; - int token; - char c; - - while (*p && (isspace(*p) || (*p == ','))) - p++; - switch (*p) { - case '\0': - token = 0; - break; - case '(': - case ')': - token = *p++; - break; - default: - token = SID; - while (!is_style_delim(c = *p)) { - agxbputc(xb, c); - p++; - } - } - *s = p; - return token; -} - -#define FUNLIMIT 64 -static unsigned char outbuf[SMALLBUF]; -static agxbuf ps_xb; - -#if 0 -static void cleanup(void) -{ - agxbfree(&ps_xb); -} -#endif - -/* parse_style: - * This is one of the worst internal designs in graphviz. - * The use of '\0' characters within strings seems cute but it - * makes all of the standard functions useless if not dangerous. - * Plus the function uses static memory for both the array and - * the character buffer. One hopes all of the values are used - * before the function is called again. - */ -char **parse_style(char *s) -{ - static char *parse[FUNLIMIT]; - static boolean is_first = TRUE; - int fun = 0; - boolean in_parens = FALSE; - unsigned char buf[SMALLBUF]; - char *p; - int c; - agxbuf xb; - - if (is_first) { - agxbinit(&ps_xb, SMALLBUF, outbuf); -#if 0 - atexit(cleanup); -#endif - is_first = FALSE; - } - - agxbinit(&xb, SMALLBUF, buf); - p = s; - while ((c = style_token(&p, &xb)) != 0) { - switch (c) { - case '(': - if (in_parens) { - agerr(AGERR, "nesting not allowed in style: %s\n", s); - parse[0] = (char *) 0; - agxbfree(&xb); - return parse; - } - in_parens = TRUE; - break; - - case ')': - if (in_parens == FALSE) { - agerr(AGERR, "unmatched ')' in style: %s\n", s); - parse[0] = (char *) 0; - agxbfree(&xb); - return parse; - } - in_parens = FALSE; - break; - - default: - if (in_parens == FALSE) { - if (fun == FUNLIMIT - 1) { - agerr(AGWARN, "truncating style '%s'\n", s); - parse[fun] = (char *) 0; - agxbfree(&xb); - return parse; - } - agxbputc(&ps_xb, '\0'); /* terminate previous */ - parse[fun++] = agxbnext(&ps_xb); - } - agxbput(&ps_xb, agxbuse(&xb)); - agxbputc(&ps_xb, '\0'); - } - } - - if (in_parens) { - agerr(AGERR, "unmatched '(' in style: %s\n", s); - parse[0] = (char *) 0; - agxbfree(&xb); - return parse; - } - parse[fun] = (char *) 0; - agxbfree(&xb); - (void)agxbuse(&ps_xb); /* adds final '\0' to buffer */ - return parse; -} - -static boxf bezier_bb(bezier bz) -{ - int i; - pointf p, p1, p2; - boxf bb; - - assert(bz.size > 0); - assert(bz.size % 3 == 1); - bb.LL = bb.UR = bz.list[0]; - for (i = 1; i < bz.size;) { - /* take mid-point between two control points for bb calculation */ - p1=bz.list[i]; - i++; - p2=bz.list[i]; - i++; - p.x = ( p1.x + p2.x ) / 2; - p.y = ( p1.y + p2.y ) / 2; - EXPANDBP(bb,p); - - p=bz.list[i]; - EXPANDBP(bb,p); - i++; - } - return bb; -} - -static void init_splines_bb(splines *spl) -{ - int i; - bezier bz; - boxf bb, b; - - assert(spl->size > 0); - bz = spl->list[0]; - bb = bezier_bb(bz); - for (i = 0; i < spl->size; i++) { - if (i > 0) { - bz = spl->list[i]; - b = bezier_bb(bz); - EXPANDBB(bb, b); - } - if (bz.sflag) { - b = arrow_bb(bz.sp, bz.list[0], 1, bz.sflag); - EXPANDBB(bb, b); - } - if (bz.eflag) { - b = arrow_bb(bz.ep, bz.list[bz.size - 1], 1, bz.eflag); - EXPANDBB(bb, b); - } - } - spl->bb = bb; -} - -static void init_bb_edge(edge_t *e) -{ - splines *spl; - - spl = ED_spl(e); - if (spl) - init_splines_bb(spl); - -// lp = ED_label(e); -// if (lp) -// {} -} - -static void init_bb_node(graph_t *g, node_t *n) -{ - edge_t *e; - - ND_bb(n).LL.x = ND_coord(n).x - ND_lw(n); - ND_bb(n).LL.y = ND_coord(n).y - ND_ht(n) / 2.; - ND_bb(n).UR.x = ND_coord(n).x + ND_rw(n); - ND_bb(n).UR.y = ND_coord(n).y + ND_ht(n) / 2.; - - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - init_bb_edge(e); - - /* IDEA - could also save in the node the bb of the node and - all of its outedges, then the scan time would be proportional - to just the number of nodes for many graphs. - Wouldn't work so well if the edges are sprawling all over the place - because then the boxes would overlap a lot and require more tests, - but perhaps that wouldn't add much to the cost before trying individual - nodes and edges. */ -} - -static void init_bb(graph_t *g) -{ - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - init_bb_node(g, n); -} - -extern gvevent_key_binding_t gvevent_key_binding[]; -extern int gvevent_key_binding_size; -extern gvdevice_callbacks_t gvdevice_callbacks; - -/* gv_fixLocale: - * Set LC_NUMERIC to "C" to get expected interpretation of %f - * in printf functions. Languages like postscript and dot expect - * floating point numbers to use a decimal point. - * - * If set is non-zero, the "C" locale set; - * if set is zero, the original locale is reset. - * Calls to the function can nest. - */ -void gv_fixLocale (int set) -{ - static char* save_locale; - static int cnt; - - if (set) { - cnt++; - if (cnt == 1) { - save_locale = strdup (setlocale (LC_NUMERIC, NULL)); - setlocale (LC_NUMERIC, "C"); - } - } - else if (cnt > 0) { - cnt--; - if (cnt == 0) { - setlocale (LC_NUMERIC, save_locale); - free (save_locale); - } - } -} - - -#define FINISH() if (Verbose) fprintf(stderr,"gvRenderJobs %s: %.2f secs.\n", agnameof(g), elapsed_sec()) - -int gvRenderJobs (GVC_t * gvc, graph_t * g) -{ - static GVJ_t *prevjob; - GVJ_t *job, *firstjob; - - if (Verbose) - start_timer(); - - if (!LAYOUT_DONE(g)) { - agerr (AGERR, "Layout was not done. Missing layout plugins? \n"); - FINISH(); - return -1; - } - - init_bb(g); - init_gvc(gvc, g); - init_layering(gvc, g); - - gv_fixLocale (1); - for (job = gvjobs_first(gvc); job; job = gvjobs_next(gvc)) { - if (gvc->gvg) { - job->input_filename = gvc->gvg->input_filename; - job->graph_index = gvc->gvg->graph_index; - } - else { - job->input_filename = NULL; - job->graph_index = 0; - } - job->common = &(gvc->common); - job->layout_type = gvc->layout.type; - job->keybindings = gvevent_key_binding; - job->numkeys = gvevent_key_binding_size; - if (!GD_drawing(g)) { - agerr (AGERR, "layout was not done\n"); - gv_fixLocale (0); - FINISH(); - return -1; - } - - job->output_lang = gvrender_select(job, job->output_langname); - if (job->output_lang == NO_SUPPORT) { - agerr (AGERR, "renderer for %s is unavailable\n", job->output_langname); - gv_fixLocale (0); - FINISH(); - return -1; - } - - switch (job->output_lang) { - case VTX: - /* output sorted, i.e. all nodes then all edges */ - job->flags |= EMIT_SORTED; - break; - case DIA: - /* output in preorder traversal of the graph */ - job->flags |= EMIT_PREORDER - | GVDEVICE_BINARY_FORMAT; - break; - default: - job->flags |= chkOrder(g); - break; - } - - /* if we already have an active job list and the device doesn't support mutiple output files, or we are about to write to a different output device */ - firstjob = gvc->active_jobs; - if (firstjob) { - if (! (firstjob->flags & GVDEVICE_DOES_PAGES) - || (strcmp(job->output_langname,firstjob->output_langname))) { - - gvrender_end_job(firstjob); - - gvc->active_jobs = NULL; /* clear active list */ - gvc->common.viewNum = 0; - prevjob = NULL; - } - } - else { - prevjob = NULL; - } - - if (prevjob) { - prevjob->next_active = job; /* insert job in active list */ - job->output_file = prevjob->output_file; /* FIXME - this is dumb ! */ - } - else { - if (gvrender_begin_job(job)) - continue; - gvc->active_jobs = job; /* first job of new list */ - } - job->next_active = NULL; /* terminate active list */ - job->callbacks = &gvdevice_callbacks; - - init_job_pad(job); - init_job_margin(job); - init_job_dpi(job, g); - init_job_viewport(job, g); - init_job_pagination(job, g); - - if (! (job->flags & GVDEVICE_EVENTS)) { -#ifdef DEBUG - /* Show_boxes is not defined, if at all, - * until splines are generated in dot - */ - job->common->show_boxes = (const char**)Show_boxes; -#endif - emit_graph(job, g); - } - - /* the last job, after all input graphs are processed, - * is finalized from gvFinalize() - */ - prevjob = job; - } - gv_fixLocale (0); - FINISH(); - return 0; -} - -/* findStopColor: - * Check for colon in colorlist. If one exists, and not the first - * character, store the characters before the colon in clrs[0] and - * the characters after the colon (and before the next or end-of-string) - * in clrs[1]. If there are no characters after the first colon, clrs[1] - * is NULL. Return TRUE. - * If there is no non-trivial string before a first colon, set clrs[0] to - * NULL and return FALSE. - * - * Note that memory is allocated as a single block stored in clrs[0] and - * must be freed by calling function. - */ -boolean findStopColor (char* colorlist, char* clrs[2], float* frac) -{ - colorsegs_t* segs = NULL; - int rv; - - rv = parseSegs (colorlist, 0, &segs); - if (rv || (segs->numc < 2) || (segs->segs[0].color == NULL)) { - clrs[0] = NULL; - freeSegs (segs); - return FALSE; - } - - if (segs->numc > 2) - agerr (AGWARN, "More than 2 colors specified for a gradient - ignoring remaining\n"); - - clrs[0] = N_GNEW (strlen(colorlist)+1,char); - strcpy (clrs[0], segs->segs[0].color); - if (segs->segs[1].color) { - clrs[1] = clrs[0] + (strlen(clrs[0])+1); - strcpy (clrs[1], segs->segs[1].color); - } - else - clrs[1] = NULL; - - if (segs->segs[0].hasFraction) - *frac = segs->segs[0].t; - else if (segs->segs[1].hasFraction) - *frac = 1 - segs->segs[1].t; - else - *frac = 0; - - freeSegs (segs); - return TRUE; -} - diff --git a/internal/ccall/common/entities.h b/internal/ccall/common/entities.h deleted file mode 100644 index 514a0b4..0000000 --- a/internal/ccall/common/entities.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Generated file - do not edit directly. - * - * This file was generated from: - * http://www.w3.org/TR/REC-html40/sgml/entities.html - * by means of the script: - * entities.tcl - */ - -#ifdef __cplusplus -extern "C" { -#endif - -static struct entities_s { - char *name; - int value; -} entities[] = { - {"AElig", 198}, - {"Aacute", 193}, - {"Acirc", 194}, - {"Agrave", 192}, - {"Alpha", 913}, - {"Aring", 197}, - {"Atilde", 195}, - {"Auml", 196}, - {"Beta", 914}, - {"Ccedil", 199}, - {"Chi", 935}, - {"Dagger", 8225}, - {"Delta", 916}, - {"ETH", 208}, - {"Eacute", 201}, - {"Ecirc", 202}, - {"Egrave", 200}, - {"Epsilon", 917}, - {"Eta", 919}, - {"Euml", 203}, - {"Gamma", 915}, - {"Iacute", 205}, - {"Icirc", 206}, - {"Igrave", 204}, - {"Iota", 921}, - {"Iuml", 207}, - {"Kappa", 922}, - {"Lambda", 923}, - {"Mu", 924}, - {"Ntilde", 209}, - {"Nu", 925}, - {"OElig", 338}, - {"Oacute", 211}, - {"Ocirc", 212}, - {"Ograve", 210}, - {"Omega", 937}, - {"Omicron", 927}, - {"Oslash", 216}, - {"Otilde", 213}, - {"Ouml", 214}, - {"Phi", 934}, - {"Pi", 928}, - {"Prime", 8243}, - {"Psi", 936}, - {"Rho", 929}, - {"Scaron", 352}, - {"Sigma", 931}, - {"THORN", 222}, - {"Tau", 932}, - {"Theta", 920}, - {"Uacute", 218}, - {"Ucirc", 219}, - {"Ugrave", 217}, - {"Upsilon", 933}, - {"Uuml", 220}, - {"Xi", 926}, - {"Yacute", 221}, - {"Yuml", 376}, - {"Zeta", 918}, - {"aacute", 225}, - {"acirc", 226}, - {"acute", 180}, - {"aelig", 230}, - {"agrave", 224}, - {"alefsym", 8501}, - {"alpha", 945}, - {"amp", 38}, - {"and", 8743}, - {"ang", 8736}, - {"aring", 229}, - {"asymp", 8776}, - {"atilde", 227}, - {"auml", 228}, - {"bdquo", 8222}, - {"beta", 946}, - {"brvbar", 166}, - {"bull", 8226}, - {"cap", 8745}, - {"ccedil", 231}, - {"cedil", 184}, - {"cent", 162}, - {"chi", 967}, - {"circ", 710}, - {"clubs", 9827}, - {"cong", 8773}, - {"copy", 169}, - {"crarr", 8629}, - {"cup", 8746}, - {"curren", 164}, - {"dArr", 8659}, - {"dagger", 8224}, - {"darr", 8595}, - {"deg", 176}, - {"delta", 948}, - {"diams", 9830}, - {"divide", 247}, - {"eacute", 233}, - {"ecirc", 234}, - {"egrave", 232}, - {"empty", 8709}, - {"emsp", 8195}, - {"ensp", 8194}, - {"epsilon", 949}, - {"equiv", 8801}, - {"eta", 951}, - {"eth", 240}, - {"euml", 235}, - {"euro", 8364}, - {"exist", 8707}, - {"fnof", 402}, - {"forall", 8704}, - {"frac12", 189}, - {"frac14", 188}, - {"frac34", 190}, - {"frasl", 8260}, - {"gamma", 947}, - {"ge", 8805}, - {"gt", 62}, - {"hArr", 8660}, - {"harr", 8596}, - {"hearts", 9829}, - {"hellip", 8230}, - {"iacute", 237}, - {"icirc", 238}, - {"iexcl", 161}, - {"igrave", 236}, - {"image", 8465}, - {"infin", 8734}, - {"int", 8747}, - {"iota", 953}, - {"iquest", 191}, - {"isin", 8712}, - {"iuml", 239}, - {"kappa", 954}, - {"lArr", 8656}, - {"lambda", 955}, - {"lang", 9001}, - {"laquo", 171}, - {"larr", 8592}, - {"lceil", 8968}, - {"ldquo", 8220}, - {"le", 8804}, - {"lfloor", 8970}, - {"lowast", 8727}, - {"loz", 9674}, - {"lrm", 8206}, - {"lsaquo", 8249}, - {"lsquo", 8216}, - {"lt", 60}, - {"macr", 175}, - {"mdash", 8212}, - {"micro", 181}, - {"middot", 183}, - {"minus", 8722}, - {"mu", 956}, - {"nabla", 8711}, - {"nbsp", 160}, - {"ndash", 8211}, - {"ne", 8800}, - {"ni", 8715}, - {"not", 172}, - {"notin", 8713}, - {"nsub", 8836}, - {"ntilde", 241}, - {"nu", 957}, - {"oacute", 243}, - {"ocirc", 244}, - {"oelig", 339}, - {"ograve", 242}, - {"oline", 8254}, - {"omega", 969}, - {"omicron", 959}, - {"oplus", 8853}, - {"or", 8744}, - {"ordf", 170}, - {"ordm", 186}, - {"oslash", 248}, - {"otilde", 245}, - {"otimes", 8855}, - {"ouml", 246}, - {"para", 182}, - {"part", 8706}, - {"permil", 8240}, - {"perp", 8869}, - {"phi", 966}, - {"pi", 960}, - {"piv", 982}, - {"plusmn", 177}, - {"pound", 163}, - {"prime", 8242}, - {"prod", 8719}, - {"prop", 8733}, - {"psi", 968}, - {"quot", 34}, - {"rArr", 8658}, - {"radic", 8730}, - {"rang", 9002}, - {"raquo", 187}, - {"rarr", 8594}, - {"rceil", 8969}, - {"rdquo", 8221}, - {"real", 8476}, - {"reg", 174}, - {"rfloor", 8971}, - {"rho", 961}, - {"rlm", 8207}, - {"rsaquo", 8250}, - {"rsquo", 8217}, - {"sbquo", 8218}, - {"scaron", 353}, - {"sdot", 8901}, - {"sect", 167}, - {"shy", 173}, - {"sigma", 963}, - {"sigmaf", 962}, - {"sim", 8764}, - {"spades", 9824}, - {"sub", 8834}, - {"sube", 8838}, - {"sum", 8721}, - {"sup", 8835}, - {"sup1", 185}, - {"sup2", 178}, - {"sup3", 179}, - {"supe", 8839}, - {"szlig", 223}, - {"tau", 964}, - {"there4", 8756}, - {"theta", 952}, - {"thetasym", 977}, - {"thinsp", 8201}, - {"thorn", 254}, - {"tilde", 732}, - {"times", 215}, - {"trade", 8482}, - {"uArr", 8657}, - {"uacute", 250}, - {"uarr", 8593}, - {"ucirc", 251}, - {"ugrave", 249}, - {"uml", 168}, - {"upsih", 978}, - {"upsilon", 965}, - {"uuml", 252}, - {"weierp", 8472}, - {"xi", 958}, - {"yacute", 253}, - {"yen", 165}, - {"yuml", 255}, - {"zeta", 950}, - {"zwj", 8205}, - {"zwnj", 8204}, -}; - -#define ENTITY_NAME_LENGTH_MAX 8 -#define NR_OF_ENTITIES 252 - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/common/entities.html b/internal/ccall/common/entities.html deleted file mode 100644 index 5c5d7b6..0000000 --- a/internal/ccall/common/entities.html +++ /dev/null @@ -1,682 +0,0 @@ - - -Character entity references in HTML 4 - - - - - - - - - - -

24 Character entity -references in HTML 4

- - - -

24.1 Introduction to character entity references

- -A character entity reference is an SGML -construct that references a character of the document -character set. - -

This version of HTML supports several sets of character entity -references:

- - - -

The following sections present the complete lists of character entity -references. Although, by convention, [ISO10646] the comments -following each entry are usually written with uppercase letters, we have -converted them to lowercase in this specification for reasons of -readability.

- -

24.2 Character entity references -for ISO 8859-1 characters

- -

The character entity references in this section produce characters whose -numeric equivalents should already be supported by conforming HTML 2.0 user -agents. Thus, the character entity reference &divide; is a more convenient -form than &#247; for obtaining the division sign (�).

- -

To support these named entities, user agents need only recognize the entity -names and convert them to characters that lie within the repertoire of -[ISO88591].

- -

Character 65533 (FFFD hexadecimal) is the last valid character in UCS-2. -65534 (FFFE hexadecimal) is unassigned and reserved as the byte-swapped version -of ZERO WIDTH NON-BREAKING SPACE for byte-order detection purposes. 65535 (FFFF -hexadecimal) is unassigned.

- -

24.2.1 The list of characters

- -
-
<!-- Portions � International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
--->
-<!-- Character entity set. Typical invocation:
-     <!ENTITY % HTMLlat1 PUBLIC
-       "-//W3C//ENTITIES Latin 1//EN//HTML">
-     %HTMLlat1;
--->
-
-<!ENTITY nbsp   CDATA "&#160;" -- no-break space = non-breaking space,
-                                  U+00A0 ISOnum -->
-<!ENTITY iexcl  CDATA "&#161;" -- inverted exclamation mark, U+00A1 ISOnum -->
-<!ENTITY cent   CDATA "&#162;" -- cent sign, U+00A2 ISOnum -->
-<!ENTITY pound  CDATA "&#163;" -- pound sign, U+00A3 ISOnum -->
-<!ENTITY curren CDATA "&#164;" -- currency sign, U+00A4 ISOnum -->
-<!ENTITY yen    CDATA "&#165;" -- yen sign = yuan sign, U+00A5 ISOnum -->
-<!ENTITY brvbar CDATA "&#166;" -- broken bar = broken vertical bar,
-                                  U+00A6 ISOnum -->
-<!ENTITY sect   CDATA "&#167;" -- section sign, U+00A7 ISOnum -->
-<!ENTITY uml    CDATA "&#168;" -- diaeresis = spacing diaeresis,
-                                  U+00A8 ISOdia -->
-<!ENTITY copy   CDATA "&#169;" -- copyright sign, U+00A9 ISOnum -->
-<!ENTITY ordf   CDATA "&#170;" -- feminine ordinal indicator, U+00AA ISOnum -->
-<!ENTITY laquo  CDATA "&#171;" -- left-pointing double angle quotation mark
-                                  = left pointing guillemet, U+00AB ISOnum -->
-<!ENTITY not    CDATA "&#172;" -- not sign, U+00AC ISOnum -->
-<!ENTITY shy    CDATA "&#173;" -- soft hyphen = discretionary hyphen,
-                                  U+00AD ISOnum -->
-<!ENTITY reg    CDATA "&#174;" -- registered sign = registered trade mark sign,
-                                  U+00AE ISOnum -->
-<!ENTITY macr   CDATA "&#175;" -- macron = spacing macron = overline
-                                  = APL overbar, U+00AF ISOdia -->
-<!ENTITY deg    CDATA "&#176;" -- degree sign, U+00B0 ISOnum -->
-<!ENTITY plusmn CDATA "&#177;" -- plus-minus sign = plus-or-minus sign,
-                                  U+00B1 ISOnum -->
-<!ENTITY sup2   CDATA "&#178;" -- superscript two = superscript digit two
-                                  = squared, U+00B2 ISOnum -->
-<!ENTITY sup3   CDATA "&#179;" -- superscript three = superscript digit three
-                                  = cubed, U+00B3 ISOnum -->
-<!ENTITY acute  CDATA "&#180;" -- acute accent = spacing acute,
-                                  U+00B4 ISOdia -->
-<!ENTITY micro  CDATA "&#181;" -- micro sign, U+00B5 ISOnum -->
-<!ENTITY para   CDATA "&#182;" -- pilcrow sign = paragraph sign,
-                                  U+00B6 ISOnum -->
-<!ENTITY middot CDATA "&#183;" -- middle dot = Georgian comma
-                                  = Greek middle dot, U+00B7 ISOnum -->
-<!ENTITY cedil  CDATA "&#184;" -- cedilla = spacing cedilla, U+00B8 ISOdia -->
-<!ENTITY sup1   CDATA "&#185;" -- superscript one = superscript digit one,
-                                  U+00B9 ISOnum -->
-<!ENTITY ordm   CDATA "&#186;" -- masculine ordinal indicator,
-                                  U+00BA ISOnum -->
-<!ENTITY raquo  CDATA "&#187;" -- right-pointing double angle quotation mark
-                                  = right pointing guillemet, U+00BB ISOnum -->
-<!ENTITY frac14 CDATA "&#188;" -- vulgar fraction one quarter
-                                  = fraction one quarter, U+00BC ISOnum -->
-<!ENTITY frac12 CDATA "&#189;" -- vulgar fraction one half
-                                  = fraction one half, U+00BD ISOnum -->
-<!ENTITY frac34 CDATA "&#190;" -- vulgar fraction three quarters
-                                  = fraction three quarters, U+00BE ISOnum -->
-<!ENTITY iquest CDATA "&#191;" -- inverted question mark
-                                  = turned question mark, U+00BF ISOnum -->
-<!ENTITY Agrave CDATA "&#192;" -- latin capital letter A with grave
-                                  = latin capital letter A grave,
-                                  U+00C0 ISOlat1 -->
-<!ENTITY Aacute CDATA "&#193;" -- latin capital letter A with acute,
-                                  U+00C1 ISOlat1 -->
-<!ENTITY Acirc  CDATA "&#194;" -- latin capital letter A with circumflex,
-                                  U+00C2 ISOlat1 -->
-<!ENTITY Atilde CDATA "&#195;" -- latin capital letter A with tilde,
-                                  U+00C3 ISOlat1 -->
-<!ENTITY Auml   CDATA "&#196;" -- latin capital letter A with diaeresis,
-                                  U+00C4 ISOlat1 -->
-<!ENTITY Aring  CDATA "&#197;" -- latin capital letter A with ring above
-                                  = latin capital letter A ring,
-                                  U+00C5 ISOlat1 -->
-<!ENTITY AElig  CDATA "&#198;" -- latin capital letter AE
-                                  = latin capital ligature AE,
-                                  U+00C6 ISOlat1 -->
-<!ENTITY Ccedil CDATA "&#199;" -- latin capital letter C with cedilla,
-                                  U+00C7 ISOlat1 -->
-<!ENTITY Egrave CDATA "&#200;" -- latin capital letter E with grave,
-                                  U+00C8 ISOlat1 -->
-<!ENTITY Eacute CDATA "&#201;" -- latin capital letter E with acute,
-                                  U+00C9 ISOlat1 -->
-<!ENTITY Ecirc  CDATA "&#202;" -- latin capital letter E with circumflex,
-                                  U+00CA ISOlat1 -->
-<!ENTITY Euml   CDATA "&#203;" -- latin capital letter E with diaeresis,
-                                  U+00CB ISOlat1 -->
-<!ENTITY Igrave CDATA "&#204;" -- latin capital letter I with grave,
-                                  U+00CC ISOlat1 -->
-<!ENTITY Iacute CDATA "&#205;" -- latin capital letter I with acute,
-                                  U+00CD ISOlat1 -->
-<!ENTITY Icirc  CDATA "&#206;" -- latin capital letter I with circumflex,
-                                  U+00CE ISOlat1 -->
-<!ENTITY Iuml   CDATA "&#207;" -- latin capital letter I with diaeresis,
-                                  U+00CF ISOlat1 -->
-<!ENTITY ETH    CDATA "&#208;" -- latin capital letter ETH, U+00D0 ISOlat1 -->
-<!ENTITY Ntilde CDATA "&#209;" -- latin capital letter N with tilde,
-                                  U+00D1 ISOlat1 -->
-<!ENTITY Ograve CDATA "&#210;" -- latin capital letter O with grave,
-                                  U+00D2 ISOlat1 -->
-<!ENTITY Oacute CDATA "&#211;" -- latin capital letter O with acute,
-                                  U+00D3 ISOlat1 -->
-<!ENTITY Ocirc  CDATA "&#212;" -- latin capital letter O with circumflex,
-                                  U+00D4 ISOlat1 -->
-<!ENTITY Otilde CDATA "&#213;" -- latin capital letter O with tilde,
-                                  U+00D5 ISOlat1 -->
-<!ENTITY Ouml   CDATA "&#214;" -- latin capital letter O with diaeresis,
-                                  U+00D6 ISOlat1 -->
-<!ENTITY times  CDATA "&#215;" -- multiplication sign, U+00D7 ISOnum -->
-<!ENTITY Oslash CDATA "&#216;" -- latin capital letter O with stroke
-                                  = latin capital letter O slash,
-                                  U+00D8 ISOlat1 -->
-<!ENTITY Ugrave CDATA "&#217;" -- latin capital letter U with grave,
-                                  U+00D9 ISOlat1 -->
-<!ENTITY Uacute CDATA "&#218;" -- latin capital letter U with acute,
-                                  U+00DA ISOlat1 -->
-<!ENTITY Ucirc  CDATA "&#219;" -- latin capital letter U with circumflex,
-                                  U+00DB ISOlat1 -->
-<!ENTITY Uuml   CDATA "&#220;" -- latin capital letter U with diaeresis,
-                                  U+00DC ISOlat1 -->
-<!ENTITY Yacute CDATA "&#221;" -- latin capital letter Y with acute,
-                                  U+00DD ISOlat1 -->
-<!ENTITY THORN  CDATA "&#222;" -- latin capital letter THORN,
-                                  U+00DE ISOlat1 -->
-<!ENTITY szlig  CDATA "&#223;" -- latin small letter sharp s = ess-zed,
-                                  U+00DF ISOlat1 -->
-<!ENTITY agrave CDATA "&#224;" -- latin small letter a with grave
-                                  = latin small letter a grave,
-                                  U+00E0 ISOlat1 -->
-<!ENTITY aacute CDATA "&#225;" -- latin small letter a with acute,
-                                  U+00E1 ISOlat1 -->
-<!ENTITY acirc  CDATA "&#226;" -- latin small letter a with circumflex,
-                                  U+00E2 ISOlat1 -->
-<!ENTITY atilde CDATA "&#227;" -- latin small letter a with tilde,
-                                  U+00E3 ISOlat1 -->
-<!ENTITY auml   CDATA "&#228;" -- latin small letter a with diaeresis,
-                                  U+00E4 ISOlat1 -->
-<!ENTITY aring  CDATA "&#229;" -- latin small letter a with ring above
-                                  = latin small letter a ring,
-                                  U+00E5 ISOlat1 -->
-<!ENTITY aelig  CDATA "&#230;" -- latin small letter ae
-                                  = latin small ligature ae, U+00E6 ISOlat1 -->
-<!ENTITY ccedil CDATA "&#231;" -- latin small letter c with cedilla,
-                                  U+00E7 ISOlat1 -->
-<!ENTITY egrave CDATA "&#232;" -- latin small letter e with grave,
-                                  U+00E8 ISOlat1 -->
-<!ENTITY eacute CDATA "&#233;" -- latin small letter e with acute,
-                                  U+00E9 ISOlat1 -->
-<!ENTITY ecirc  CDATA "&#234;" -- latin small letter e with circumflex,
-                                  U+00EA ISOlat1 -->
-<!ENTITY euml   CDATA "&#235;" -- latin small letter e with diaeresis,
-                                  U+00EB ISOlat1 -->
-<!ENTITY igrave CDATA "&#236;" -- latin small letter i with grave,
-                                  U+00EC ISOlat1 -->
-<!ENTITY iacute CDATA "&#237;" -- latin small letter i with acute,
-                                  U+00ED ISOlat1 -->
-<!ENTITY icirc  CDATA "&#238;" -- latin small letter i with circumflex,
-                                  U+00EE ISOlat1 -->
-<!ENTITY iuml   CDATA "&#239;" -- latin small letter i with diaeresis,
-                                  U+00EF ISOlat1 -->
-<!ENTITY eth    CDATA "&#240;" -- latin small letter eth, U+00F0 ISOlat1 -->
-<!ENTITY ntilde CDATA "&#241;" -- latin small letter n with tilde,
-                                  U+00F1 ISOlat1 -->
-<!ENTITY ograve CDATA "&#242;" -- latin small letter o with grave,
-                                  U+00F2 ISOlat1 -->
-<!ENTITY oacute CDATA "&#243;" -- latin small letter o with acute,
-                                  U+00F3 ISOlat1 -->
-<!ENTITY ocirc  CDATA "&#244;" -- latin small letter o with circumflex,
-                                  U+00F4 ISOlat1 -->
-<!ENTITY otilde CDATA "&#245;" -- latin small letter o with tilde,
-                                  U+00F5 ISOlat1 -->
-<!ENTITY ouml   CDATA "&#246;" -- latin small letter o with diaeresis,
-                                  U+00F6 ISOlat1 -->
-<!ENTITY divide CDATA "&#247;" -- division sign, U+00F7 ISOnum -->
-<!ENTITY oslash CDATA "&#248;" -- latin small letter o with stroke,
-                                  = latin small letter o slash,
-                                  U+00F8 ISOlat1 -->
-<!ENTITY ugrave CDATA "&#249;" -- latin small letter u with grave,
-                                  U+00F9 ISOlat1 -->
-<!ENTITY uacute CDATA "&#250;" -- latin small letter u with acute,
-                                  U+00FA ISOlat1 -->
-<!ENTITY ucirc  CDATA "&#251;" -- latin small letter u with circumflex,
-                                  U+00FB ISOlat1 -->
-<!ENTITY uuml   CDATA "&#252;" -- latin small letter u with diaeresis,
-                                  U+00FC ISOlat1 -->
-<!ENTITY yacute CDATA "&#253;" -- latin small letter y with acute,
-                                  U+00FD ISOlat1 -->
-<!ENTITY thorn  CDATA "&#254;" -- latin small letter thorn,
-                                  U+00FE ISOlat1 -->
-<!ENTITY yuml   CDATA "&#255;" -- latin small letter y with diaeresis,
-                                  U+00FF ISOlat1 -->
-
-
- -

24.3 Character entity references for -symbols, mathematical symbols, and Greek letters

- -

The character entity references in this section produce characters that may -be represented by glyphs in the widely available Adobe Symbol font, including -Greek characters, various bracketing symbols, and a selection of mathematical -operators such as gradient, product, and summation symbols.

- -

To support these entities, user agents may support full [ISO10646] or use -other means. Display of glyphs for these characters may be obtained by being -able to display the relevant [ISO10646] characters or -by other means, such as internally mapping the listed entities, numeric -character references, and characters to the appropriate position in some font -that contains the requisite glyphs.

- -
-

When to use Greek entities. This entity set contains -all the letters used in modern Greek. However, it does not include Greek -punctuation, precomposed accented characters nor the non-spacing accents -(tonos, dialytika) required to compose them. There are no archaic letters, -Coptic-unique letters, or precomposed letters for Polytonic Greek. The entities -defined here are not intended for the representation of modern Greek text and -would not be an efficient representation; rather, they are intended for -occasional Greek letters used in technical and mathematical works.

-
- -

24.3.1 The list of characters

- -
-
<!-- Mathematical, Greek and Symbolic characters for HTML -->
-
-<!-- Character entity set. Typical invocation:
-     <!ENTITY % HTMLsymbol PUBLIC
-       "-//W3C//ENTITIES Symbols//EN//HTML">
-     %HTMLsymbol; -->
-
-<!-- Portions � International Organization for Standardization 1986:
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
--->
-
-<!-- Relevant ISO entity set is given unless names are newly introduced.
-     New names (i.e., not in ISO 8879 list) do not clash with any
-     existing ISO 8879 entity names. ISO 10646 character numbers
-     are given for each character, in hex. CDATA values are decimal
-     conversions of the ISO 10646 values and refer to the document
-     character set. Names are ISO 10646 names. 
-
--->
-
-<!-- Latin Extended-B -->
-<!ENTITY fnof     CDATA "&#402;" -- latin small f with hook = function
-                                    = florin, U+0192 ISOtech -->
-
-<!-- Greek -->
-<!ENTITY Alpha    CDATA "&#913;" -- greek capital letter alpha, U+0391 -->
-<!ENTITY Beta     CDATA "&#914;" -- greek capital letter beta, U+0392 -->
-<!ENTITY Gamma    CDATA "&#915;" -- greek capital letter gamma,
-                                    U+0393 ISOgrk3 -->
-<!ENTITY Delta    CDATA "&#916;" -- greek capital letter delta,
-                                    U+0394 ISOgrk3 -->
-<!ENTITY Epsilon  CDATA "&#917;" -- greek capital letter epsilon, U+0395 -->
-<!ENTITY Zeta     CDATA "&#918;" -- greek capital letter zeta, U+0396 -->
-<!ENTITY Eta      CDATA "&#919;" -- greek capital letter eta, U+0397 -->
-<!ENTITY Theta    CDATA "&#920;" -- greek capital letter theta,
-                                    U+0398 ISOgrk3 -->
-<!ENTITY Iota     CDATA "&#921;" -- greek capital letter iota, U+0399 -->
-<!ENTITY Kappa    CDATA "&#922;" -- greek capital letter kappa, U+039A -->
-<!ENTITY Lambda   CDATA "&#923;" -- greek capital letter lambda,
-                                    U+039B ISOgrk3 -->
-<!ENTITY Mu       CDATA "&#924;" -- greek capital letter mu, U+039C -->
-<!ENTITY Nu       CDATA "&#925;" -- greek capital letter nu, U+039D -->
-<!ENTITY Xi       CDATA "&#926;" -- greek capital letter xi, U+039E ISOgrk3 -->
-<!ENTITY Omicron  CDATA "&#927;" -- greek capital letter omicron, U+039F -->
-<!ENTITY Pi       CDATA "&#928;" -- greek capital letter pi, U+03A0 ISOgrk3 -->
-<!ENTITY Rho      CDATA "&#929;" -- greek capital letter rho, U+03A1 -->
-<!-- there is no Sigmaf, and no U+03A2 character either -->
-<!ENTITY Sigma    CDATA "&#931;" -- greek capital letter sigma,
-                                    U+03A3 ISOgrk3 -->
-<!ENTITY Tau      CDATA "&#932;" -- greek capital letter tau, U+03A4 -->
-<!ENTITY Upsilon  CDATA "&#933;" -- greek capital letter upsilon,
-                                    U+03A5 ISOgrk3 -->
-<!ENTITY Phi      CDATA "&#934;" -- greek capital letter phi,
-                                    U+03A6 ISOgrk3 -->
-<!ENTITY Chi      CDATA "&#935;" -- greek capital letter chi, U+03A7 -->
-<!ENTITY Psi      CDATA "&#936;" -- greek capital letter psi,
-                                    U+03A8 ISOgrk3 -->
-<!ENTITY Omega    CDATA "&#937;" -- greek capital letter omega,
-                                    U+03A9 ISOgrk3 -->
-
-<!ENTITY alpha    CDATA "&#945;" -- greek small letter alpha,
-                                    U+03B1 ISOgrk3 -->
-<!ENTITY beta     CDATA "&#946;" -- greek small letter beta, U+03B2 ISOgrk3 -->
-<!ENTITY gamma    CDATA "&#947;" -- greek small letter gamma,
-                                    U+03B3 ISOgrk3 -->
-<!ENTITY delta    CDATA "&#948;" -- greek small letter delta,
-                                    U+03B4 ISOgrk3 -->
-<!ENTITY epsilon  CDATA "&#949;" -- greek small letter epsilon,
-                                    U+03B5 ISOgrk3 -->
-<!ENTITY zeta     CDATA "&#950;" -- greek small letter zeta, U+03B6 ISOgrk3 -->
-<!ENTITY eta      CDATA "&#951;" -- greek small letter eta, U+03B7 ISOgrk3 -->
-<!ENTITY theta    CDATA "&#952;" -- greek small letter theta,
-                                    U+03B8 ISOgrk3 -->
-<!ENTITY iota     CDATA "&#953;" -- greek small letter iota, U+03B9 ISOgrk3 -->
-<!ENTITY kappa    CDATA "&#954;" -- greek small letter kappa,
-                                    U+03BA ISOgrk3 -->
-<!ENTITY lambda   CDATA "&#955;" -- greek small letter lambda,
-                                    U+03BB ISOgrk3 -->
-<!ENTITY mu       CDATA "&#956;" -- greek small letter mu, U+03BC ISOgrk3 -->
-<!ENTITY nu       CDATA "&#957;" -- greek small letter nu, U+03BD ISOgrk3 -->
-<!ENTITY xi       CDATA "&#958;" -- greek small letter xi, U+03BE ISOgrk3 -->
-<!ENTITY omicron  CDATA "&#959;" -- greek small letter omicron, U+03BF NEW -->
-<!ENTITY pi       CDATA "&#960;" -- greek small letter pi, U+03C0 ISOgrk3 -->
-<!ENTITY rho      CDATA "&#961;" -- greek small letter rho, U+03C1 ISOgrk3 -->
-<!ENTITY sigmaf   CDATA "&#962;" -- greek small letter final sigma,
-                                    U+03C2 ISOgrk3 -->
-<!ENTITY sigma    CDATA "&#963;" -- greek small letter sigma,
-                                    U+03C3 ISOgrk3 -->
-<!ENTITY tau      CDATA "&#964;" -- greek small letter tau, U+03C4 ISOgrk3 -->
-<!ENTITY upsilon  CDATA "&#965;" -- greek small letter upsilon,
-                                    U+03C5 ISOgrk3 -->
-<!ENTITY phi      CDATA "&#966;" -- greek small letter phi, U+03C6 ISOgrk3 -->
-<!ENTITY chi      CDATA "&#967;" -- greek small letter chi, U+03C7 ISOgrk3 -->
-<!ENTITY psi      CDATA "&#968;" -- greek small letter psi, U+03C8 ISOgrk3 -->
-<!ENTITY omega    CDATA "&#969;" -- greek small letter omega,
-                                    U+03C9 ISOgrk3 -->
-<!ENTITY thetasym CDATA "&#977;" -- greek small letter theta symbol,
-                                    U+03D1 NEW -->
-<!ENTITY upsih    CDATA "&#978;" -- greek upsilon with hook symbol,
-                                    U+03D2 NEW -->
-<!ENTITY piv      CDATA "&#982;" -- greek pi symbol, U+03D6 ISOgrk3 -->
-
-<!-- General Punctuation -->
-<!ENTITY bull     CDATA "&#8226;" -- bullet = black small circle,
-                                     U+2022 ISOpub  -->
-<!-- bullet is NOT the same as bullet operator, U+2219 -->
-<!ENTITY hellip   CDATA "&#8230;" -- horizontal ellipsis = three dot leader,
-                                     U+2026 ISOpub  -->
-<!ENTITY prime    CDATA "&#8242;" -- prime = minutes = feet, U+2032 ISOtech -->
-<!ENTITY Prime    CDATA "&#8243;" -- double prime = seconds = inches,
-                                     U+2033 ISOtech -->
-<!ENTITY oline    CDATA "&#8254;" -- overline = spacing overscore,
-                                     U+203E NEW -->
-<!ENTITY frasl    CDATA "&#8260;" -- fraction slash, U+2044 NEW -->
-
-<!-- Letterlike Symbols -->
-<!ENTITY weierp   CDATA "&#8472;" -- script capital P = power set
-                                     = Weierstrass p, U+2118 ISOamso -->
-<!ENTITY image    CDATA "&#8465;" -- blackletter capital I = imaginary part,
-                                     U+2111 ISOamso -->
-<!ENTITY real     CDATA "&#8476;" -- blackletter capital R = real part symbol,
-                                     U+211C ISOamso -->
-<!ENTITY trade    CDATA "&#8482;" -- trade mark sign, U+2122 ISOnum -->
-<!ENTITY alefsym  CDATA "&#8501;" -- alef symbol = first transfinite cardinal,
-                                     U+2135 NEW -->
-<!-- alef symbol is NOT the same as hebrew letter alef,
-     U+05D0 although the same glyph could be used to depict both characters -->
-
-<!-- Arrows -->
-<!ENTITY larr     CDATA "&#8592;" -- leftwards arrow, U+2190 ISOnum -->
-<!ENTITY uarr     CDATA "&#8593;" -- upwards arrow, U+2191 ISOnum-->
-<!ENTITY rarr     CDATA "&#8594;" -- rightwards arrow, U+2192 ISOnum -->
-<!ENTITY darr     CDATA "&#8595;" -- downwards arrow, U+2193 ISOnum -->
-<!ENTITY harr     CDATA "&#8596;" -- left right arrow, U+2194 ISOamsa -->
-<!ENTITY crarr    CDATA "&#8629;" -- downwards arrow with corner leftwards
-                                     = carriage return, U+21B5 NEW -->
-<!ENTITY lArr     CDATA "&#8656;" -- leftwards double arrow, U+21D0 ISOtech -->
-<!-- ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
-    but also does not have any other character for that function. So ? lArr can
-    be used for 'is implied by' as ISOtech suggests -->
-<!ENTITY uArr     CDATA "&#8657;" -- upwards double arrow, U+21D1 ISOamsa -->
-<!ENTITY rArr     CDATA "&#8658;" -- rightwards double arrow,
-                                     U+21D2 ISOtech -->
-<!-- ISO 10646 does not say this is the 'implies' character but does not have 
-     another character with this function so ?
-     rArr can be used for 'implies' as ISOtech suggests -->
-<!ENTITY dArr     CDATA "&#8659;" -- downwards double arrow, U+21D3 ISOamsa -->
-<!ENTITY hArr     CDATA "&#8660;" -- left right double arrow,
-                                     U+21D4 ISOamsa -->
-
-<!-- Mathematical Operators -->
-<!ENTITY forall   CDATA "&#8704;" -- for all, U+2200 ISOtech -->
-<!ENTITY part     CDATA "&#8706;" -- partial differential, U+2202 ISOtech  -->
-<!ENTITY exist    CDATA "&#8707;" -- there exists, U+2203 ISOtech -->
-<!ENTITY empty    CDATA "&#8709;" -- empty set = null set = diameter,
-                                     U+2205 ISOamso -->
-<!ENTITY nabla    CDATA "&#8711;" -- nabla = backward difference,
-                                     U+2207 ISOtech -->
-<!ENTITY isin     CDATA "&#8712;" -- element of, U+2208 ISOtech -->
-<!ENTITY notin    CDATA "&#8713;" -- not an element of, U+2209 ISOtech -->
-<!ENTITY ni       CDATA "&#8715;" -- contains as member, U+220B ISOtech -->
-<!-- should there be a more memorable name than 'ni'? -->
-<!ENTITY prod     CDATA "&#8719;" -- n-ary product = product sign,
-                                     U+220F ISOamsb -->
-<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
-     the same glyph might be used for both -->
-<!ENTITY sum      CDATA "&#8721;" -- n-ary sumation, U+2211 ISOamsb -->
-<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
-     though the same glyph might be used for both -->
-<!ENTITY minus    CDATA "&#8722;" -- minus sign, U+2212 ISOtech -->
-<!ENTITY lowast   CDATA "&#8727;" -- asterisk operator, U+2217 ISOtech -->
-<!ENTITY radic    CDATA "&#8730;" -- square root = radical sign,
-                                     U+221A ISOtech -->
-<!ENTITY prop     CDATA "&#8733;" -- proportional to, U+221D ISOtech -->
-<!ENTITY infin    CDATA "&#8734;" -- infinity, U+221E ISOtech -->
-<!ENTITY ang      CDATA "&#8736;" -- angle, U+2220 ISOamso -->
-<!ENTITY and      CDATA "&#8743;" -- logical and = wedge, U+2227 ISOtech -->
-<!ENTITY or       CDATA "&#8744;" -- logical or = vee, U+2228 ISOtech -->
-<!ENTITY cap      CDATA "&#8745;" -- intersection = cap, U+2229 ISOtech -->
-<!ENTITY cup      CDATA "&#8746;" -- union = cup, U+222A ISOtech -->
-<!ENTITY int      CDATA "&#8747;" -- integral, U+222B ISOtech -->
-<!ENTITY there4   CDATA "&#8756;" -- therefore, U+2234 ISOtech -->
-<!ENTITY sim      CDATA "&#8764;" -- tilde operator = varies with = similar to,
-                                     U+223C ISOtech -->
-<!-- tilde operator is NOT the same character as the tilde, U+007E,
-     although the same glyph might be used to represent both  -->
-<!ENTITY cong     CDATA "&#8773;" -- approximately equal to, U+2245 ISOtech -->
-<!ENTITY asymp    CDATA "&#8776;" -- almost equal to = asymptotic to,
-                                     U+2248 ISOamsr -->
-<!ENTITY ne       CDATA "&#8800;" -- not equal to, U+2260 ISOtech -->
-<!ENTITY equiv    CDATA "&#8801;" -- identical to, U+2261 ISOtech -->
-<!ENTITY le       CDATA "&#8804;" -- less-than or equal to, U+2264 ISOtech -->
-<!ENTITY ge       CDATA "&#8805;" -- greater-than or equal to,
-                                     U+2265 ISOtech -->
-<!ENTITY sub      CDATA "&#8834;" -- subset of, U+2282 ISOtech -->
-<!ENTITY sup      CDATA "&#8835;" -- superset of, U+2283 ISOtech -->
-<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
-     font encoding and is not included. Should it be, for symmetry?
-     It is in ISOamsn  --> 
-<!ENTITY nsub     CDATA "&#8836;" -- not a subset of, U+2284 ISOamsn -->
-<!ENTITY sube     CDATA "&#8838;" -- subset of or equal to, U+2286 ISOtech -->
-<!ENTITY supe     CDATA "&#8839;" -- superset of or equal to,
-                                     U+2287 ISOtech -->
-<!ENTITY oplus    CDATA "&#8853;" -- circled plus = direct sum,
-                                     U+2295 ISOamsb -->
-<!ENTITY otimes   CDATA "&#8855;" -- circled times = vector product,
-                                     U+2297 ISOamsb -->
-<!ENTITY perp     CDATA "&#8869;" -- up tack = orthogonal to = perpendicular,
-                                     U+22A5 ISOtech -->
-<!ENTITY sdot     CDATA "&#8901;" -- dot operator, U+22C5 ISOamsb -->
-<!-- dot operator is NOT the same character as U+00B7 middle dot -->
-
-<!-- Miscellaneous Technical -->
-<!ENTITY lceil    CDATA "&#8968;" -- left ceiling = apl upstile,
-                                     U+2308 ISOamsc  -->
-<!ENTITY rceil    CDATA "&#8969;" -- right ceiling, U+2309 ISOamsc  -->
-<!ENTITY lfloor   CDATA "&#8970;" -- left floor = apl downstile,
-                                     U+230A ISOamsc  -->
-<!ENTITY rfloor   CDATA "&#8971;" -- right floor, U+230B ISOamsc  -->
-<!ENTITY lang     CDATA "&#9001;" -- left-pointing angle bracket = bra,
-                                     U+2329 ISOtech -->
-<!-- lang is NOT the same character as U+003C 'less than' 
-     or U+2039 'single left-pointing angle quotation mark' -->
-<!ENTITY rang     CDATA "&#9002;" -- right-pointing angle bracket = ket,
-                                     U+232A ISOtech -->
-<!-- rang is NOT the same character as U+003E 'greater than' 
-     or U+203A 'single right-pointing angle quotation mark' -->
-
-<!-- Geometric Shapes -->
-<!ENTITY loz      CDATA "&#9674;" -- lozenge, U+25CA ISOpub -->
-
-<!-- Miscellaneous Symbols -->
-<!ENTITY spades   CDATA "&#9824;" -- black spade suit, U+2660 ISOpub -->
-<!-- black here seems to mean filled as opposed to hollow -->
-<!ENTITY clubs    CDATA "&#9827;" -- black club suit = shamrock,
-                                     U+2663 ISOpub -->
-<!ENTITY hearts   CDATA "&#9829;" -- black heart suit = valentine,
-                                     U+2665 ISOpub -->
-<!ENTITY diams    CDATA "&#9830;" -- black diamond suit, U+2666 ISOpub -->
-
-
- -

24.4 Character entity references for -markup-significant and internationalization characters

- -

The character entity references in this section are for escaping -markup-significant characters (these are the same as those in HTML 2.0 and -3.2), for denoting spaces and dashes. Other characters in this section apply to -internationalization issues such as the disambiguation of bidirectional text -(see the section on bidirectional -text for details).

- -

Entities have also been added for the remaining characters occurring in -CP-1252 which do not occur in the HTMLlat1 or HTMLsymbol entity sets. These all -occur in the 128 to 159 range within the CP-1252 charset. These entities permit -the characters to be denoted in a platform-independent manner.

- -

To support these entities, user agents may support full [ISO10646] or use -other means. Display of glyphs for these characters may be obtained by being -able to display the relevant [ISO10646] characters or -by other means, such as internally mapping the listed entities, numeric -character references, and characters to the appropriate position in some font -that contains the requisite glyphs.

- -

24.4.1 The list of characters

- -
-
<!-- Special characters for HTML -->
-
-<!-- Character entity set. Typical invocation:
-     <!ENTITY % HTMLspecial PUBLIC
-       "-//W3C//ENTITIES Special//EN//HTML">
-     %HTMLspecial; -->
-
-<!-- Portions � International Organization for Standardization 1986:
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
--->
-
-<!-- Relevant ISO entity set is given unless names are newly introduced.
-     New names (i.e., not in ISO 8879 list) do not clash with any
-     existing ISO 8879 entity names. ISO 10646 character numbers
-     are given for each character, in hex. CDATA values are decimal
-     conversions of the ISO 10646 values and refer to the document
-     character set. Names are ISO 10646 names. 
-
--->
-
-<!-- C0 Controls and Basic Latin -->
-<!ENTITY quot    CDATA "&#34;"   -- quotation mark = APL quote,
-                                    U+0022 ISOnum -->
-<!ENTITY amp     CDATA "&#38;"   -- ampersand, U+0026 ISOnum -->
-<!ENTITY lt      CDATA "&#60;"   -- less-than sign, U+003C ISOnum -->
-<!ENTITY gt      CDATA "&#62;"   -- greater-than sign, U+003E ISOnum -->
-
-<!-- Latin Extended-A -->
-<!ENTITY OElig   CDATA "&#338;"  -- latin capital ligature OE,
-                                    U+0152 ISOlat2 -->
-<!ENTITY oelig   CDATA "&#339;"  -- latin small ligature oe, U+0153 ISOlat2 -->
-<!-- ligature is a misnomer, this is a separate character in some languages -->
-<!ENTITY Scaron  CDATA "&#352;"  -- latin capital letter S with caron,
-                                    U+0160 ISOlat2 -->
-<!ENTITY scaron  CDATA "&#353;"  -- latin small letter s with caron,
-                                    U+0161 ISOlat2 -->
-<!ENTITY Yuml    CDATA "&#376;"  -- latin capital letter Y with diaeresis,
-                                    U+0178 ISOlat2 -->
-
-<!-- Spacing Modifier Letters -->
-<!ENTITY circ    CDATA "&#710;"  -- modifier letter circumflex accent,
-                                    U+02C6 ISOpub -->
-<!ENTITY tilde   CDATA "&#732;"  -- small tilde, U+02DC ISOdia -->
-
-<!-- General Punctuation -->
-<!ENTITY ensp    CDATA "&#8194;" -- en space, U+2002 ISOpub -->
-<!ENTITY emsp    CDATA "&#8195;" -- em space, U+2003 ISOpub -->
-<!ENTITY thinsp  CDATA "&#8201;" -- thin space, U+2009 ISOpub -->
-<!ENTITY zwnj    CDATA "&#8204;" -- zero width non-joiner,
-                                    U+200C NEW RFC 2070 -->
-<!ENTITY zwj     CDATA "&#8205;" -- zero width joiner, U+200D NEW RFC 2070 -->
-<!ENTITY lrm     CDATA "&#8206;" -- left-to-right mark, U+200E NEW RFC 2070 -->
-<!ENTITY rlm     CDATA "&#8207;" -- right-to-left mark, U+200F NEW RFC 2070 -->
-<!ENTITY ndash   CDATA "&#8211;" -- en dash, U+2013 ISOpub -->
-<!ENTITY mdash   CDATA "&#8212;" -- em dash, U+2014 ISOpub -->
-<!ENTITY lsquo   CDATA "&#8216;" -- left single quotation mark,
-                                    U+2018 ISOnum -->
-<!ENTITY rsquo   CDATA "&#8217;" -- right single quotation mark,
-                                    U+2019 ISOnum -->
-<!ENTITY sbquo   CDATA "&#8218;" -- single low-9 quotation mark, U+201A NEW -->
-<!ENTITY ldquo   CDATA "&#8220;" -- left double quotation mark,
-                                    U+201C ISOnum -->
-<!ENTITY rdquo   CDATA "&#8221;" -- right double quotation mark,
-                                    U+201D ISOnum -->
-<!ENTITY bdquo   CDATA "&#8222;" -- double low-9 quotation mark, U+201E NEW -->
-<!ENTITY dagger  CDATA "&#8224;" -- dagger, U+2020 ISOpub -->
-<!ENTITY Dagger  CDATA "&#8225;" -- double dagger, U+2021 ISOpub -->
-<!ENTITY permil  CDATA "&#8240;" -- per mille sign, U+2030 ISOtech -->
-<!ENTITY lsaquo  CDATA "&#8249;" -- single left-pointing angle quotation mark,
-                                    U+2039 ISO proposed -->
-<!-- lsaquo is proposed but not yet ISO standardized -->
-<!ENTITY rsaquo  CDATA "&#8250;" -- single right-pointing angle quotation mark,
-                                    U+203A ISO proposed -->
-<!-- rsaquo is proposed but not yet ISO standardized -->
-<!ENTITY euro   CDATA "&#8364;"  -- euro sign, U+20AC NEW -->
-
-
- - - \ No newline at end of file diff --git a/internal/ccall/common/entities.tcl b/internal/ccall/common/entities.tcl deleted file mode 100755 index 1f7c9e7..0000000 --- a/internal/ccall/common/entities.tcl +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/tclsh - -# get names for html-4.0 characters from: -# http://www.w3.org/TR/REC-html40/sgml/entities.html -set f [open entities.html r] -set entity_name_length_max 0 -set nr_of_entities 0 -while {! [eof $f]} { - set rec [gets $f] - if {[scan $rec {<!ENTITY %s CDATA "&#%d;"; --} name val] == 2} { - set entity($name) $val - set entity_name_length [string length $name] - if {$entity_name_length > $entity_name_length_max} { - set entity_name_length_max $entity_name_length - } - incr nr_of_entities - } -} -close $f - -set f [open entities.h w] -puts $f "/*" -puts $f " * Generated file - do not edit directly." -puts $f " *" -puts $f " * This file was generated from:" -puts $f " * http://www.w3.org/TR/REC-html40/sgml/entities.html" -puts $f " * by means of the script:" -puts $f " * entities.tcl" -puts $f " */" -puts $f "" -puts $f "#ifdef __cplusplus" -puts $f "extern \"C\" {" -puts $f "#endif" -puts $f "" -puts $f "static struct entities_s {" -puts $f " char *name;" -puts $f " int value;" -puts $f "} entities\[\] = {" -foreach name [lsort [array names entity]] { - puts $f " {\"$name\", $entity($name)}," -} -puts $f "};" -puts $f "" -puts $f "#define ENTITY_NAME_LENGTH_MAX $entity_name_length_max" -puts $f "#define NR_OF_ENTITIES $nr_of_entities" -puts $f "" -puts $f "#ifdef __cplusplus" -puts $f "}" -puts $f "#endif" -close $f diff --git a/internal/ccall/common/fontmap.cfg b/internal/ccall/common/fontmap.cfg deleted file mode 100644 index 253cf26..0000000 --- a/internal/ccall/common/fontmap.cfg +++ /dev/null @@ -1,255 +0,0 @@ - -# Use this font configuration file if you have the GhostScript fonts -# installed on your system. This allows to produce SVG files for embedding -# into documents. - -# Before you use this font configuration file, do the following -# steps: -# * Download the GhostScript fonts, unpack the archive -# and copy the *.pfb and *.afm files into C:\Windows\Fonts -# (directory name may differ). - -[Times-Roman] -name = NimbusRomNo9L-Regu - source type = system - features = roman - family = Times - driver = * - -[Times-Italic] -name = NimbusRomNo9L-ReguItal - source type = system - features = roman italic - family = Times - driver = * - -[Times-Bold] -name = NimbusRomNo9L-Medi - source type = system - features = roman bold - family = Times - driver = * - -[Times-BoldItalic] -name = NimbusRomNo9L-MediItal - source type = system - features = roman bold italic - family = Times - driver = * - -[AvantGarde-Book] -name = URWGothicL-Book - source type = system - features = sans-serif - family = AvantGarde - driver = * - -[AvantGarde-BookOblique] -name = URWGothicL-BookObli - source type = system - features = sans-serif italic - family = AvantGarde - driver = * - -[AvantGarde-Demi] -name = URWGothicL-Demi - source type = system - features = sans-serif bold - family = AvantGarde - driver = * - -[AvantGarde-DemiOblique] -name = URWGothicL-DemiObli - source type = system - features = sans-serif bold italic - family = AvantGarde - driver = * - -[Bookman-Light] -name = URWBookmanL-Ligh - source type = system - features = roman - family = Bookman - driver = * - -[Bookman-LightItalic] -name = URWBookmanL-LighItal - source type = system - features = roman italic - family = Bookman - driver = * - -[Bookman-Demi] -name = URWBookmanL-Demi - source type = system - features = roman bold - family = Bookman - driver = * - -[Bookman-DemiItalic] -name = URWBookman-DemiItal - source type = system - features = roman bold italic - family = Bookman - driver = * - -[Courier] -name = NimbusMonL-Regu - source type = system - features = typewriter - family = Courier - driver = * - -[Courier-Oblique] -name = NimbusMonL-ReguObli - source type = system - features = typewriter italic - family = Courier - driver = * - -[Courier-Bold] -name = NimbusMonL-Bold - source type = system - features = typewriter bold - family = Courier - driver = * - -[Courier-BoldOblique] -name = NimbusMonL-BoldObli - source type = system - features = typewriter bold italic - family = Courier - driver = * - -[Helvetica] -name = NimbusSanL-Regu - source type = system - features = sans-serif - family = Helvetica - driver = * - -[Helvetica-Oblique] -name = NimbusSanL-ReguItal - source type = system - features = sans-serif italic - family = Helvetica - driver = * - -[Helvetica-Bold] -name = NimbusSanL-Bold - source type = system - features = sans-serif bold - family = Helvetica - driver = * - -[Helvetica-BoldOblique] -name = NimbusSanL-BoldItal - source type = system - features = sans-serif bold italic - family = Helvetica - driver = * - -[Helvetica-Narrow] -name = NimbusSanL-ReguCond - source type = system - features = sans-serif - family = Helvetica Narrow - driver = * - -[Helvetica-Narrow-Oblique] -name = NimbusSanL-ReguCondItal - source type = system - features = sans-serif italic - family = Helvetica Narrow - driver = * - -[Helvetica-Narrow-Bold] -name = NimbusSanL-BoldCond - source type = system - features = sans-serif bold - family = Helvetica Narrow - driver = * - -[Helvetica-Narrow-BoldOblique] -name = NimbusSanL-BoldCondItal - source type = system - features = sans-serif bold italic - family = Helvetica Narrow - driver = * - -[NewCenturySchlbk-Roman] -name = CenturySchL-Roma - source type = system - features = roman - family = New Century Schoolbook - driver = * - -[NewCenturySchlbk-Italic] -name = CenturySchL-RomaItal - source type = system - features = roman italic - family = New Century Schoolbook - driver = * - -[NewCenturySchlbk-Bold] -name = CenturySchL-Bold - source type = system - features = roman bold - family = New Century Schoolbook - driver = * - -[NewCenturySchlbk-BoldItalic] -name = CenturySchL-BoldItal - source type = system - features = roman bold italic - family = New Century Schoolbook - driver = * - -[Palatino-Roman] -name = URWPalladioL-Roma - source type = system - features = roman - family = Palatino - driver = * - -[Palatino-Italic] -name = URWPalladioL-Ital - source type = system - features = roman italic - family = Palatino - driver = * - -[Palatino-Bold] -name = URWPalladioL-Bold - source type = system - features = roman bold - family = Palatino - driver = * - -[Palatino-BoldItalic] -name = URWPalladioL-BoldItal - source type = system - features = roman bold italic - family = Palatino - driver = * - -[Symbol] -name = StandardSymL - source type = system - family = Symbol - driver = * - -[ZapfChancery-MediumItalic] -name = URWChanceryL-MediItal - source type = system - features = roman italic - family = Zapf Chancery - driver = * - -[ZapfDingbats] -name = Dingbats - source type = system - family = Zapf Dingbats - driver = * - - diff --git a/internal/ccall/common/geom.c b/internal/ccall/common/geom.c deleted file mode 100644 index 3dbdaa1..0000000 --- a/internal/ccall/common/geom.c +++ /dev/null @@ -1,423 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* geometric functions (e.g. on points and boxes) with application to, but - * no specific dependance on graphs */ - -#include "config.h" - -#include "geom.h" -#include "geomprocs.h" -#ifdef _WIN32 -#ifndef inline -#define inline -#endif -#endif - -box mkbox(point p, point q) -{ - box r; - - if (p.x < q.x) { - r.LL.x = p.x; - r.UR.x = q.x; - } else { - r.LL.x = q.x; - r.UR.x = p.x; - } - if (p.y < q.y) { - r.LL.y = p.y; - r.UR.y = q.y; - } else { - r.LL.y = q.y; - r.UR.y = p.y; - } - return r; -} - -boxf mkboxf(pointf p, pointf q) -{ - boxf r; - - if (p.x < q.x) { - r.LL.x = p.x; - r.UR.x = q.x; - } else { - r.LL.x = q.x; - r.UR.x = p.x; - } - if (p.y < q.y) { - r.LL.y = p.y; - r.UR.y = q.y; - } else { - r.LL.y = q.y; - r.UR.y = p.y; - } - return r; -} - -/* - *-------------------------------------------------------------- - * - * lineToBox -- - * - * Determine whether a line lies entirely inside, entirely - * outside, or overlapping a given rectangular area. - * - * Results: - * -1 is returned if the line given by p and q - * is entirely outside the rectangle given by b. - * 0 is returned if the polygon overlaps the rectangle, and - * 1 is returned if the polygon is entirely inside the rectangle. - * - * Side effects: - * None. - * - *-------------------------------------------------------------- - */ - -/* This code steals liberally from algorithms in tk/generic/tkTrig.c -- jce */ - -int lineToBox(pointf p, pointf q, boxf b) -{ - int inside1, inside2; - - /* - * First check the two points individually to see whether they - * are inside the rectangle or not. - */ - - inside1 = (p.x >= b.LL.x) && (p.x <= b.UR.x) - && (p.y >= b.LL.y) && (p.y <= b.UR.y); - inside2 = (q.x >= b.LL.x) && (q.x <= b.UR.x) - && (q.y >= b.LL.y) && (q.y <= b.UR.y); - if (inside1 != inside2) { - return 0; - } - if (inside1 & inside2) { - return 1; - } - - /* - * Both points are outside the rectangle, but still need to check - * for intersections between the line and the rectangle. Horizontal - * and vertical lines are particularly easy, so handle them - * separately. - */ - - if (p.x == q.x) { - /* - * Vertical line. - */ - - if (((p.y >= b.LL.y) ^ (q.y >= b.LL.y)) - && (p.x >= b.LL.x) - && (p.x <= b.UR.x)) { - return 0; - } - } else if (p.y == q.y) { - /* - * Horizontal line. - */ - if (((p.x >= b.LL.x) ^ (q.x >= b.LL.x)) - && (p.y >= b.LL.y) - && (p.y <= b.UR.y)) { - return 0; - } - } else { - double m, x, y, low, high; - - /* - * Diagonal line. Compute slope of line and use - * for intersection checks against each of the - * sides of the rectangle: left, right, bottom, top. - */ - - m = (q.y - p.y)/(q.x - p.x); - if (p.x < q.x) { - low = p.x; high = q.x; - } else { - low = q.x; high = p.x; - } - - /* - * Left edge. - */ - - y = p.y + (b.LL.x - p.x)*m; - if ((b.LL.x >= low) && (b.LL.x <= high) - && (y >= b.LL.y) && (y <= b.UR.y)) { - return 0; - } - - /* - * Right edge. - */ - - y += (b.UR.x - b.LL.x)*m; - if ((y >= b.LL.y) && (y <= b.UR.y) - && (b.UR.x >= low) && (b.UR.x <= high)) { - return 0; - } - - /* - * Bottom edge. - */ - - if (p.y < q.y) { - low = p.y; high = q.y; - } else { - low = q.y; high = p.y; - } - x = p.x + (b.LL.y - p.y)/m; - if ((x >= b.LL.x) && (x <= b.UR.x) - && (b.LL.y >= low) && (b.LL.y <= high)) { - return 0; - } - - /* - * Top edge. - */ - - x += (b.UR.y - b.LL.y)/m; - if ((x >= b.LL.x) && (x <= b.UR.x) - && (b.UR.y >= low) && (b.UR.y <= high)) { - return 0; - } - } - return -1; -} -#ifdef WIN32_STATIC -#define inline -#endif -void rect2poly(pointf *p) -{ - p[3].x = p[2].x = p[1].x; - p[2].y = p[1].y; - p[3].y = p[0].y; - p[1].x = p[0].x; -} - -static pointf rotatepf(pointf p, int cwrot) -{ - static double sina, cosa; - static int last_cwrot; - pointf P; - - /* cosa is initially wrong for a cwrot of 0 - * this caching only works because we are never called for 0 rotations */ - if (cwrot != last_cwrot) { - sincos(cwrot / (2 * M_PI), &sina, &cosa); - last_cwrot = cwrot; - } - P.x = p.x * cosa - p.y * sina; - P.y = p.y * cosa + p.x * sina; - return P; -} - -static point rotatep(point p, int cwrot) -{ - pointf pf; - - P2PF(p, pf); - pf = rotatepf(pf, cwrot); - PF2P(pf, p); - return p; -} - -point cwrotatep(point p, int cwrot) -{ - int x = p.x, y = p.y; - switch (cwrot) { - case 0: - break; - case 90: - p.x = y; - p.y = -x; - break; - case 180: - p.x = x; - p.y = -y; - break; - case 270: - p.x = y; - p.y = x; - break; - default: - if (cwrot < 0) - return ccwrotatep(p, -cwrot); - if (cwrot > 360) - return cwrotatep(p, cwrot%360); - return rotatep(p, cwrot); - } - return p; -} - -pointf cwrotatepf(pointf p, int cwrot) -{ - double x = p.x, y = p.y; - switch (cwrot) { - case 0: - break; - case 90: - p.x = y; - p.y = -x; - break; - case 180: - p.x = x; - p.y = -y; - break; - case 270: - p.x = y; - p.y = x; - break; - default: - if (cwrot < 0) - return ccwrotatepf(p, -cwrot); - if (cwrot > 360) - return cwrotatepf(p, cwrot%360); - return rotatepf(p, cwrot); - } - return p; -} - -point ccwrotatep(point p, int ccwrot) -{ - int x = p.x, y = p.y; - switch (ccwrot) { - case 0: - break; - case 90: - p.x = -y; - p.y = x; - break; - case 180: - p.x = x; - p.y = -y; - break; - case 270: - p.x = y; - p.y = x; - break; - default: - if (ccwrot < 0) - return cwrotatep(p, -ccwrot); - if (ccwrot > 360) - return ccwrotatep(p, ccwrot%360); - return rotatep(p, 360-ccwrot); - } - return p; -} - -pointf ccwrotatepf(pointf p, int ccwrot) -{ - double x = p.x, y = p.y; - switch (ccwrot) { - case 0: - break; - case 90: - p.x = -y; - p.y = x; - break; - case 180: - p.x = x; - p.y = -y; - break; - case 270: - p.x = y; - p.y = x; - break; - default: - if (ccwrot < 0) - return cwrotatepf(p, -ccwrot); - if (ccwrot > 360) - return ccwrotatepf(p, ccwrot%360); - return rotatepf(p, 360-ccwrot); - } - return p; -} - -inline box flip_rec_box(box b, point p) -{ - box r; - /* flip box */ - r.UR.x = b.UR.y; - r.UR.y = b.UR.x; - r.LL.x = b.LL.y; - r.LL.y = b.LL.x; - /* move box */ - r.LL.x += p.x; - r.LL.y += p.y; - r.UR.x += p.x; - r.UR.y += p.y; - return r; -} - -boxf flip_rec_boxf(boxf b, pointf p) -{ - boxf r; - /* flip box */ - r.UR.x = b.UR.y; - r.UR.y = b.UR.x; - r.LL.x = b.LL.y; - r.LL.y = b.LL.x; - /* move box */ - r.LL.x += p.x; - r.LL.y += p.y; - r.UR.x += p.x; - r.UR.y += p.y; - return r; -} - -#ifdef WIN32_STATIC -#undef inline -#endif - - -#define SMALL 0.0000000001 - -/* ptToLine2: - * Return distance from point p to line a-b squared. - */ -double ptToLine2 (pointf a, pointf b, pointf p) -{ - double dx = b.x-a.x; - double dy = b.y-a.y; - double a2 = (p.y-a.y)*dx - (p.x-a.x)*dy; - a2 *= a2; /* square - ensures that it is positive */ - if (a2 < SMALL) return 0.; /* avoid 0/0 problems */ - return a2 / (dx*dx + dy*dy); -} - -#define dot(v,w) (v.x*w.x+v.y*w.y) - -/* line_intersect: - * Computes intersection of lines a-b and c-d, returning intersection - * point in *p. - * Returns 0 if no intersection (lines parallel), 1 otherwise. - */ -int line_intersect (pointf a, pointf b, pointf c, pointf d, pointf* p) -{ - - pointf mv = sub_pointf(b,a); - pointf lv = sub_pointf(d,c); - pointf ln = perp (lv); - double lc = -dot(ln,c); - double dt = dot(ln,mv); - - if (fabs(dt) < SMALL) return 0; - - *p = sub_pointf(a,scale((dot(ln,a)+lc)/dt,mv)); - return 1; -} - diff --git a/internal/ccall/common/geom.h b/internal/ccall/common/geom.h deleted file mode 100644 index af6fb31..0000000 --- a/internal/ccall/common/geom.h +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* geometric types and macros (e.g. points and boxes) with application to, but - * no specific dependance on graphs */ - -#ifndef GV_GEOM_H -#define GV_GEOM_H - -#include "arith.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { int x, y; } point; - -typedef struct pointf_s { double x, y; } pointf; - -/* tell pathplan/pathgeom.h */ -#define HAVE_POINTF_S - -typedef struct { point LL, UR; } box; - -typedef struct { pointf LL, UR; } boxf; - - -/* true if point p is inside box b */ -#define INSIDE(p,b) (BETWEEN((b).LL.x,(p).x,(b).UR.x) && BETWEEN((b).LL.y,(p).y,(b).UR.y)) - -/* true if boxes b0 and b1 overlap */ -#define OVERLAP(b0,b1) (((b0).UR.x >= (b1).LL.x) && ((b1).UR.x >= (b0).LL.x) && ((b0).UR.y >= (b1).LL.y) && ((b1).UR.y >= (b0).LL.y)) - -/* true if box b0 completely contains b1*/ -#define CONTAINS(b0,b1) (((b0).UR.x >= (b1).UR.x) && ((b0).UR.y >= (b1).UR.y) && ((b0).LL.x <= (b1).LL.x) && ((b0).LL.y <= (b1).LL.y)) - -/* expand box b as needed to enclose point p */ -#define EXPANDBP(b, p) ((b).LL.x = MIN((b).LL.x, (p).x), (b).LL.y = MIN((b).LL.y, (p).y), (b).UR.x = MAX((b).UR.x, (p).x), (b).UR.y = MAX((b).UR.y, (p).y)) - -/* expand box b0 as needed to enclose box b1 */ -#define EXPANDBB(b0, b1) ((b0).LL.x = MIN((b0).LL.x, (b1).LL.x), (b0).LL.y = MIN((b0).LL.y, (b1).LL.y), (b0).UR.x = MAX((b0).UR.x, (b1).UR.x), (b0).UR.y = MAX((b0).UR.y, (b1).UR.y)) - -/* clip box b0 to fit box b1 */ -#define CLIPBB(b0, b1) ((b0).LL.x = MAX((b0).LL.x, (b1).LL.x), (b0).LL.y = MAX((b0).LL.y, (b1).LL.y), (b0).UR.x = MIN((b0).UR.x, (b1).UR.x), (b0).UR.y = MIN((b0).UR.y, (b1).UR.y)) - -#define LEN2(a,b) (SQR(a) + SQR(b)) -#define LEN(a,b) (sqrt(LEN2((a),(b)))) - -#define DIST2(p,q) (LEN2(((p).x - (q).x),((p).y - (q).y))) -#define DIST(p,q) (sqrt(DIST2((p),(q)))) - -#define POINTS_PER_INCH 72 -#define POINTS_PER_PC ((double)POINTS_PER_INCH / 6) -#define POINTS_PER_CM ((double)POINTS_PER_INCH * 0.393700787) -#define POINTS_PER_MM ((double)POINTS_PER_INCH * 0.0393700787) - -#define POINTS(a_inches) (ROUND((a_inches)*POINTS_PER_INCH)) -#define INCH2PS(a_inches) ((a_inches)*(double)POINTS_PER_INCH) -#define PS2INCH(a_points) ((a_points)/(double)POINTS_PER_INCH) - -#define P2PF(p,pf) ((pf).x = (p).x,(pf).y = (p).y) -#define PF2P(pf,p) ((p).x = ROUND((pf).x),(p).y = ROUND((pf).y)) - -#define B2BF(b,bf) (P2PF((b).LL,(bf).LL),P2PF((b).UR,(bf).UR)) -#define BF2B(bf,b) (PF2P((bf).LL,(b).LL),PF2P((bf).UR,(b).UR)) - -#define APPROXEQ(a,b,tol) (ABS((a) - (b)) < (tol)) -#define APPROXEQPT(p,q,tol) (DIST2((p),(q)) < SQR(tol)) - -/* some common tolerance values */ -#define MILLIPOINT .001 -#define MICROPOINT .000001 - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/common/geomprocs.h b/internal/ccall/common/geomprocs.h deleted file mode 100644 index 582bb18..0000000 --- a/internal/ccall/common/geomprocs.h +++ /dev/null @@ -1,272 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* geometric functions (e.g. on points and boxes) with application to, but - * no specific dependance on graphs */ - -#ifndef GV_GEOMPROCS_H -#define GV_GEOMPROCS_H - -#ifdef __cplusplus -extern "C" { -#endif - - -#include "geom.h" - -#ifdef _WIN32 -#ifdef GVDLL -#define extern -#else -#define extern -#endif -#endif - -extern box mkbox(point p, point q); -extern boxf mkboxf(pointf p, pointf q); - -extern box flip_rec_box(box b, point p); -extern boxf flip_rec_boxf(boxf b, pointf p); - -extern double ptToLine2 (pointf l1, pointf l2, pointf p); - -extern int lineToBox(pointf p1, pointf p2, boxf b); - -extern point ccwrotatep(point p, int ccwrot); -extern pointf ccwrotatepf(pointf p, int ccwrot); - -extern point cwrotatep(point p, int cwrot); -extern pointf cwrotatepf(pointf p, int cwrot); - -extern void rect2poly(pointf *p); - -extern int line_intersect (pointf a, pointf b, pointf c, pointf d, pointf* p); - -#if defined(MSWIN32) || defined(_WIN32) -#define inline __inline -#endif - - -static inline point pointof(int x, int y) -{ - point r; - - r.x = x; - r.y = y; - return r; -} - -static inline pointf pointfof(double x, double y) -{ - pointf r; - - r.x = x; - r.y = y; - return r; -} - -static inline box boxof(int llx, int lly, int urx, int ury) -{ - box b; - - b.LL.x = llx, b.LL.y = lly; - b.UR.x = urx, b.UR.y = ury; - return b; -} - -static inline boxf boxfof(double llx, double lly, double urx, double ury) -{ - boxf b; - - b.LL.x = llx, b.LL.y = lly; - b.UR.x = urx, b.UR.y = ury; - return b; -} - -static inline point add_point(point p, point q) -{ - point r; - - r.x = p.x + q.x; - r.y = p.y + q.y; - return r; -} - -static inline pointf add_pointf(pointf p, pointf q) -{ - pointf r; - - r.x = p.x + q.x; - r.y = p.y + q.y; - return r; -} - -static inline point sub_point(point p, point q) -{ - point r; - - r.x = p.x - q.x; - r.y = p.y - q.y; - return r; -} - -static inline pointf sub_pointf(pointf p, pointf q) -{ - pointf r; - - r.x = p.x - q.x; - r.y = p.y - q.y; - return r; -} - -/* for +ve coord values, this rounds towards p */ -static inline point mid_point(point p, point q) -{ - point r; - - r.x = (p.x + q.x) / 2; - r.y = (p.y + q.y) / 2; - return r; -} - -static inline pointf mid_pointf(pointf p, pointf q) -{ - pointf r; - - r.x = (p.x + q.x) / 2.; - r.y = (p.y + q.y) / 2.; - return r; -} - -static inline pointf interpolate_pointf(double t, pointf p, pointf q) -{ - pointf r; - - r.x = p.x + t * (q.x - p.x); - r.y = p.y + t * (q.y - p.y); - return r; -} - -static inline point exch_xy(point p) -{ - point r; - - r.x = p.y; - r.y = p.x; - return r; -} - -static inline pointf exch_xyf(pointf p) -{ - pointf r; - - r.x = p.y; - r.y = p.x; - return r; -} - -static inline box box_bb(box b0, box b1) -{ - box b; - - b.LL.x = MIN(b0.LL.x, b1.LL.x); - b.LL.y = MIN(b0.LL.y, b1.LL.y); - b.UR.x = MAX(b0.UR.x, b1.UR.x); - b.UR.y = MAX(b0.UR.y, b1.UR.y); - - return b; -} - -static inline boxf boxf_bb(boxf b0, boxf b1) -{ - boxf b; - - b.LL.x = MIN(b0.LL.x, b1.LL.x); - b.LL.y = MIN(b0.LL.y, b1.LL.y); - b.UR.x = MAX(b0.UR.x, b1.UR.x); - b.UR.y = MAX(b0.UR.y, b1.UR.y); - - return b; -} - -static inline box box_intersect(box b0, box b1) -{ - box b; - - b.LL.x = MAX(b0.LL.x, b1.LL.x); - b.LL.y = MAX(b0.LL.y, b1.LL.y); - b.UR.x = MIN(b0.UR.x, b1.UR.x); - b.UR.y = MIN(b0.UR.y, b1.UR.y); - - return b; -} - -static inline boxf boxf_intersect(boxf b0, boxf b1) -{ - boxf b; - - b.LL.x = MAX(b0.LL.x, b1.LL.x); - b.LL.y = MAX(b0.LL.y, b1.LL.y); - b.UR.x = MIN(b0.UR.x, b1.UR.x); - b.UR.y = MIN(b0.UR.y, b1.UR.y); - - return b; -} - -static inline int box_overlap(box b0, box b1) -{ - return OVERLAP(b0, b1); -} - -static inline int boxf_overlap(boxf b0, boxf b1) -{ - return OVERLAP(b0, b1); -} - -static inline int box_contains(box b0, box b1) -{ - return CONTAINS(b0, b1); -} - -static inline int boxf_contains(boxf b0, boxf b1) -{ - return CONTAINS(b0, b1); -} - -static inline pointf perp (pointf p) -{ - pointf r; - - r.x = -p.y; - r.y = p.x; - return r; -} - -static inline pointf scale (double c, pointf p) -{ - pointf r; - - r.x = c * p.x; - r.y = c * p.y; - return r; -} -#ifdef WIN32_STATIC -#undef inline -#endif - -#undef extern -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/common/globals.c b/internal/ccall/common/globals.c deleted file mode 100644 index 47067fc..0000000 --- a/internal/ccall/common/globals.c +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#define EXTERN -#include "types.h" -#include "globals.h" -#include "fdp.h" - -/* Default layout values, possibly set via command line; -1 indicates unset */ -static fdpParms_t fdpParms = { - 1, /* useGrid */ - 1, /* useNew */ - -1, /* numIters */ - 50, /* unscaled */ - 0.0, /* C */ - 1.0, /* Tfact */ - -1.0, /* K - set in initParams; used in init_edge */ - -1.0, /* T0 */ -}; - -struct fdpParms_s* fdp_parms = &fdpParms; diff --git a/internal/ccall/common/globals.h b/internal/ccall/common/globals.h deleted file mode 100644 index 0c7c931..0000000 --- a/internal/ccall/common/globals.h +++ /dev/null @@ -1,144 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* this is to get the following win32 DLL junk to work. - * if ever tempted to remove this, first please read: - * http://joel.editthispage.com/stories/storyReader$47 - */ -#ifndef GLOBALS_H -#define GLOBALS_H - -#ifdef _UWIN -#ifndef _POSIX_ /* ncc doesn't define _POSIX_ */ -/* i.e. if this is the win32 build using nmake with CC=ncc (native C) */ -/* this was the easiest way to get some simple libc interfaces. */ -#include "C:\Program Files\UWIN\usr\include\astwin32.h" -#undef _UWIN /* don't assume ANY _UWIN features in the execution environment */ -#endif /* _POSIX_ */ -#endif /* _UWIN */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __CYGWIN__ -#if defined(_BLD_dotneato) && defined(_DLL) -# define external __EXPORT__ -#endif -#if !defined(_BLD_dotneato) && defined(__IMPORT__) -# define external __IMPORT__ -#endif -#if defined(GVDLL) -#if !defined(_BLD_gvc) -#define extern __declspec(dllimport) -#else -#define extern __declspec(dllexport) -#endif -#endif -#endif -/*visual studio*/ -#ifdef _WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - -#ifndef external -# define external extern -#endif -#ifndef EXTERN -#define EXTERN extern -#endif - - EXTERN char *Version; - EXTERN char **Files; /* from command line */ - EXTERN const char **Lib; /* from command line */ - EXTERN char *CmdName; - EXTERN char *specificFlags; - EXTERN char *specificItems; - EXTERN char *Gvfilepath; /* Per-process path of files allowed in image attributes (also ps libs) */ - EXTERN char *Gvimagepath; /* Per-graph path of files allowed in image attributes (also ps libs) */ - - EXTERN unsigned char Verbose; - EXTERN unsigned char Reduce; - EXTERN int MemTest; - EXTERN char *HTTPServerEnVar; - EXTERN char *Output_file_name; - EXTERN int graphviz_errors; - EXTERN int Nop; - EXTERN double PSinputscale; - EXTERN int Syntax_errors; - EXTERN int Show_cnt; - EXTERN char** Show_boxes; /* emit code for correct box coordinates */ - EXTERN int CL_type; /* NONE, LOCAL, GLOBAL */ - EXTERN unsigned char Concentrate; /* if parallel edges should be merged */ - EXTERN double Epsilon; /* defined in input_graph */ - EXTERN int MaxIter; - EXTERN int Ndim; - EXTERN int State; /* last finished phase */ - EXTERN int EdgeLabelsDone; /* true if edge labels have been positioned */ - EXTERN double Initial_dist; - EXTERN double Damping; - EXTERN int Y_invert; /* invert y in dot & plain output */ - EXTERN int GvExitOnUsage; /* gvParseArgs() should exit on usage or error */ - - EXTERN Agsym_t - *G_activepencolor, *G_activefillcolor, - *G_selectedpencolor, *G_selectedfillcolor, - *G_visitedpencolor, *G_visitedfillcolor, - *G_deletedpencolor, *G_deletedfillcolor, - *G_ordering, *G_peripheries, *G_penwidth, - *G_gradientangle, *G_margin; - EXTERN Agsym_t - *N_height, *N_width, *N_shape, *N_color, *N_fillcolor, - *N_activepencolor, *N_activefillcolor, - *N_selectedpencolor, *N_selectedfillcolor, - *N_visitedpencolor, *N_visitedfillcolor, - *N_deletedpencolor, *N_deletedfillcolor, - *N_fontsize, *N_fontname, *N_fontcolor, *N_margin, - *N_label, *N_xlabel, *N_nojustify, *N_style, *N_showboxes, - *N_sides, *N_peripheries, *N_ordering, *N_orientation, - *N_skew, *N_distortion, *N_fixed, *N_imagescale, *N_layer, - *N_group, *N_comment, *N_vertices, *N_z, - *N_penwidth, *N_gradientangle; - EXTERN Agsym_t - *E_weight, *E_minlen, *E_color, *E_fillcolor, - *E_activepencolor, *E_activefillcolor, - *E_selectedpencolor, *E_selectedfillcolor, - *E_visitedpencolor, *E_visitedfillcolor, - *E_deletedpencolor, *E_deletedfillcolor, - *E_fontsize, *E_fontname, *E_fontcolor, - *E_label, *E_xlabel, *E_dir, *E_style, *E_decorate, - *E_showboxes, *E_arrowsz, *E_constr, *E_layer, - *E_comment, *E_label_float, - *E_samehead, *E_sametail, - *E_arrowhead, *E_arrowtail, - *E_headlabel, *E_taillabel, - *E_labelfontsize, *E_labelfontname, *E_labelfontcolor, - *E_labeldistance, *E_labelangle, - *E_tailclip, *E_headclip, - *E_penwidth; - - extern struct fdpParms_s* fdp_parms; - -#undef external -#undef EXTERN -#ifdef extern -#undef extern -#endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/htmllex.c b/internal/ccall/common/htmllex.c deleted file mode 100644 index ed98ca2..0000000 --- a/internal/ccall/common/htmllex.c +++ /dev/null @@ -1,1060 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" -#include "htmltable.h" -#include "htmlparse.h" -#include "htmllex.h" -#include "cdt.h" -#include - -#ifdef HAVE_EXPAT -#include -#endif - -#ifndef XML_STATUS_ERROR -#define XML_STATUS_ERROR 0 -#endif - -typedef struct { -#ifdef HAVE_EXPAT - XML_Parser parser; -#endif - char* ptr; /* input source */ - int tok; /* token type */ - agxbuf* xb; /* buffer to gather T_string data */ - agxbuf lb; /* buffer for translating lexical data */ - char warn; /* set if warning given */ - char error; /* set if error given */ - char inCell; /* set if in TD to allow T_string */ - char mode; /* for handling artificial .. */ - char *currtok; /* for error reporting */ - char *prevtok; /* for error reporting */ - int currtoklen; - int prevtoklen; -} lexstate_t; -static lexstate_t state; - -/* error_context: - * Print the last 2 "token"s seen. - */ -static void error_context(void) -{ - agxbclear(state.xb); - if (state.prevtoklen > 0) - agxbput_n(state.xb, state.prevtok, state.prevtoklen); - agxbput_n(state.xb, state.currtok, state.currtoklen); - agerr(AGPREV, "... %s ...\n", agxbuse(state.xb)); -} - -/* htmlerror: - * yyerror - called by yacc output - */ -void htmlerror(const char *msg) -{ - if (state.error) - return; - state.error = 1; - agerr(AGERR, "%s in line %d \n", msg, htmllineno()); - error_context(); -} - -#ifdef HAVE_EXPAT -/* lexerror: - * called by lexer when unknown <..> is found. - */ -static void lexerror(const char *name) -{ - state.tok = T_error; - state.error = 1; - agerr(AGERR, "Unknown HTML element <%s> on line %d \n", - name, htmllineno()); -} - -typedef int (*attrFn) (void *, char *); -typedef int (*bcmpfn) (const void *, const void *); - -#define MAX_CHAR (((unsigned char)(~0)) >> 1) -#define MIN_CHAR ((signed char)(~MAX_CHAR)) -#define MAX_UCHAR ((unsigned char)(~0)) -#define MAX_USHORT ((unsigned short)(~0)) - -/* Mechanism for automatically processing attributes */ -typedef struct { - char *name; /* attribute name */ - attrFn action; /* action to perform if name matches */ -} attr_item; - -#define ISIZE (sizeof(attr_item)) - -/* icmp: - * Compare two attr_item. Used in bsearch - */ -static int icmp(attr_item * i, attr_item * j) -{ - return strcasecmp(i->name, j->name); -} - -static int bgcolorfn(htmldata_t * p, char *v) -{ - p->bgcolor = strdup(v); - return 0; -} - -static int pencolorfn(htmldata_t * p, char *v) -{ - p->pencolor = strdup(v); - return 0; -} - -static int hreffn(htmldata_t * p, char *v) -{ - p->href = strdup(v); - return 0; -} - -static int sidesfn(htmldata_t * p, char *v) -{ - unsigned short flags = 0; - char c; - - while ((c = *v++)) { - switch (tolower(c)) { - case 'l' : - flags |= BORDER_LEFT; - break; - case 't' : - flags |= BORDER_TOP; - break; - case 'r' : - flags |= BORDER_RIGHT; - break; - case 'b' : - flags |= BORDER_BOTTOM; - break; - default : - agerr(AGWARN, "Unrecognized character '%c' (%d) in sides attribute\n", c, c); - break; - } - } - if (flags != BORDER_MASK) - p->flags |= flags; - return 0; -} - -static int titlefn(htmldata_t * p, char *v) -{ - p->title = strdup(v); - return 0; -} - -static int portfn(htmldata_t * p, char *v) -{ - p->port = strdup(v); - return 0; -} - -#define DELIM " ," - -static int stylefn(htmldata_t * p, char *v) -{ - int rv = 0; - char c; - char* tk; - char* buf = strdup (v); - for (tk = strtok (buf, DELIM); tk; tk = strtok (NULL, DELIM)) { - c = (char) toupper(*tk); - if (c == 'R') { - if (!strcasecmp(tk + 1, "OUNDED")) p->style |= ROUNDED; - else if (!strcasecmp(tk + 1, "ADIAL")) p->style |= RADIAL; - else { - agerr(AGWARN, "Illegal value %s for STYLE - ignored\n", tk); - rv = 1; - } - } - else if(!strcasecmp(tk,"SOLID")) p->style &= ~(DOTTED|DASHED); - else if(!strcasecmp(tk,"INVISIBLE") || !strcasecmp(tk,"INVIS")) p->style |= INVISIBLE; - else if(!strcasecmp(tk,"DOTTED")) p->style |= DOTTED; - else if(!strcasecmp(tk,"DASHED")) p->style |= DASHED; - else { - agerr(AGWARN, "Illegal value %s for STYLE - ignored\n", tk); - rv = 1; - } - } - free (buf); - return rv; -} - -static int targetfn(htmldata_t * p, char *v) -{ - p->target = strdup(v); - return 0; -} - -static int idfn(htmldata_t * p, char *v) -{ - p->id = strdup(v); - return 0; -} - - -/* doInt: - * Scan v for integral value. Check that - * the value is >= min and <= max. Return value in ul. - * String s is name of value. - * Return 0 if okay; 1 otherwise. - */ -static int doInt(char *v, char *s, int min, int max, long *ul) -{ - int rv = 0; - char *ep; - long b = strtol(v, &ep, 10); - - if (ep == v) { - agerr(AGWARN, "Improper %s value %s - ignored", s, v); - rv = 1; - } else if (b > max) { - agerr(AGWARN, "%s value %s > %d - too large - ignored", s, v, max); - rv = 1; - } else if (b < min) { - agerr(AGWARN, "%s value %s < %d - too small - ignored", s, v, min); - rv = 1; - } else - *ul = b; - return rv; -} - - -static int gradientanglefn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "GRADIENTANGLE", 0, 360, &u)) - return 1; - p->gradientangle = (unsigned short) u; - return 0; -} - - -static int borderfn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "BORDER", 0, MAX_UCHAR, &u)) - return 1; - p->border = (unsigned char) u; - p->flags |= BORDER_SET; - return 0; -} - -static int cellpaddingfn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "CELLPADDING", 0, MAX_UCHAR, &u)) - return 1; - p->pad = (unsigned char) u; - p->flags |= PAD_SET; - return 0; -} - -static int cellspacingfn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "CELLSPACING", MIN_CHAR, MAX_CHAR, &u)) - return 1; - p->space = (signed char) u; - p->flags |= SPACE_SET; - return 0; -} - -static int cellborderfn(htmltbl_t * p, char *v) -{ - long u; - - if (doInt(v, "CELLSBORDER", 0, MAX_CHAR, &u)) - return 1; - p->cb = (unsigned char) u; - return 0; -} - -static int columnsfn(htmltbl_t * p, char *v) -{ - if (*v != '*') { - agerr(AGWARN, "Unknown value %s for COLUMNS - ignored\n", v); - return 1; - } - p->flags |= HTML_VRULE; - return 0; -} - -static int rowsfn(htmltbl_t * p, char *v) -{ - if (*v != '*') { - agerr(AGWARN, "Unknown value %s for ROWS - ignored\n", v); - return 1; - } - p->flags |= HTML_HRULE; - return 0; -} - -static int fixedsizefn(htmldata_t * p, char *v) -{ - int rv = 0; - char c = (char) toupper(*(unsigned char *) v); - if ((c == 'T') && !strcasecmp(v + 1, "RUE")) - p->flags |= FIXED_FLAG; - else if ((c != 'F') || strcasecmp(v + 1, "ALSE")) { - agerr(AGWARN, "Illegal value %s for FIXEDSIZE - ignored\n", v); - rv = 1; - } - return rv; -} - -static int valignfn(htmldata_t * p, char *v) -{ - int rv = 0; - char c = (char) toupper(*v); - if ((c == 'B') && !strcasecmp(v + 1, "OTTOM")) - p->flags |= VALIGN_BOTTOM; - else if ((c == 'T') && !strcasecmp(v + 1, "OP")) - p->flags |= VALIGN_TOP; - else if ((c != 'M') || strcasecmp(v + 1, "IDDLE")) { - agerr(AGWARN, "Illegal value %s for VALIGN - ignored\n", v); - rv = 1; - } - return rv; -} - -static int halignfn(htmldata_t * p, char *v) -{ - int rv = 0; - char c = (char) toupper(*v); - if ((c == 'L') && !strcasecmp(v + 1, "EFT")) - p->flags |= HALIGN_LEFT; - else if ((c == 'R') && !strcasecmp(v + 1, "IGHT")) - p->flags |= HALIGN_RIGHT; - else if ((c != 'C') || strcasecmp(v + 1, "ENTER")) { - agerr(AGWARN, "Illegal value %s for ALIGN - ignored\n", v); - rv = 1; - } - return rv; -} - -static int cell_halignfn(htmldata_t * p, char *v) -{ - int rv = 0; - char c = (char) toupper(*v); - if ((c == 'L') && !strcasecmp(v + 1, "EFT")) - p->flags |= HALIGN_LEFT; - else if ((c == 'R') && !strcasecmp(v + 1, "IGHT")) - p->flags |= HALIGN_RIGHT; - else if ((c == 'T') && !strcasecmp(v + 1, "EXT")) - p->flags |= HALIGN_TEXT; - else if ((c != 'C') || strcasecmp(v + 1, "ENTER")) - rv = 1; - if (rv) - agerr(AGWARN, "Illegal value %s for ALIGN in TD - ignored\n", v); - return rv; -} - -static int balignfn(htmldata_t * p, char *v) -{ - int rv = 0; - char c = (char) toupper(*v); - if ((c == 'L') && !strcasecmp(v + 1, "EFT")) - p->flags |= BALIGN_LEFT; - else if ((c == 'R') && !strcasecmp(v + 1, "IGHT")) - p->flags |= BALIGN_RIGHT; - else if ((c != 'C') || strcasecmp(v + 1, "ENTER")) - rv = 1; - if (rv) - agerr(AGWARN, "Illegal value %s for BALIGN in TD - ignored\n", v); - return rv; -} - -static int heightfn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "HEIGHT", 0, MAX_USHORT, &u)) - return 1; - p->height = (unsigned short) u; - return 0; -} - -static int widthfn(htmldata_t * p, char *v) -{ - long u; - - if (doInt(v, "WIDTH", 0, MAX_USHORT, &u)) - return 1; - p->width = (unsigned short) u; - return 0; -} - -static int rowspanfn(htmlcell_t * p, char *v) -{ - long u; - - if (doInt(v, "ROWSPAN", 0, MAX_USHORT, &u)) - return 1; - if (u == 0) { - agerr(AGWARN, "ROWSPAN value cannot be 0 - ignored\n"); - return 1; - } - p->rspan = (unsigned short) u; - return 0; -} - -static int colspanfn(htmlcell_t * p, char *v) -{ - long u; - - if (doInt(v, "COLSPAN", 0, MAX_USHORT, &u)) - return 1; - if (u == 0) { - agerr(AGWARN, "COLSPAN value cannot be 0 - ignored\n"); - return 1; - } - p->cspan = (unsigned short) u; - return 0; -} - -static int fontcolorfn(textfont_t * p, char *v) -{ - p->color = v; - return 0; -} - -static int facefn(textfont_t * p, char *v) -{ - p->name = v; - return 0; -} - -static int ptsizefn(textfont_t * p, char *v) -{ - long u; - - if (doInt(v, "POINT-SIZE", 0, MAX_UCHAR, &u)) - return 1; - p->size = (double) u; - return 0; -} - -static int srcfn(htmlimg_t * p, char *v) -{ - p->src = strdup(v); - return 0; -} - -static int scalefn(htmlimg_t * p, char *v) -{ - p->scale = strdup(v); - return 0; -} - -static int alignfn(int *p, char *v) -{ - int rv = 0; - char c = (char) toupper(*v); - if ((c == 'R') && !strcasecmp(v + 1, "IGHT")) - *p = 'r'; - else if ((c == 'L') || !strcasecmp(v + 1, "EFT")) - *p = 'l'; - else if ((c == 'C') || strcasecmp(v + 1, "ENTER")) - *p = 'n'; - else { - agerr(AGWARN, "Illegal value %s for ALIGN - ignored\n", v); - rv = 1; - } - return rv; -} - -/* Tables used in binary search; MUST be alphabetized */ -static attr_item tbl_items[] = { - {"align", (attrFn) halignfn}, - {"bgcolor", (attrFn) bgcolorfn}, - {"border", (attrFn) borderfn}, - {"cellborder", (attrFn) cellborderfn}, - {"cellpadding", (attrFn) cellpaddingfn}, - {"cellspacing", (attrFn) cellspacingfn}, - {"color", (attrFn) pencolorfn}, - {"columns", (attrFn) columnsfn}, - {"fixedsize", (attrFn) fixedsizefn}, - {"gradientangle", (attrFn) gradientanglefn}, - {"height", (attrFn) heightfn}, - {"href", (attrFn) hreffn}, - {"id", (attrFn) idfn}, - {"port", (attrFn) portfn}, - {"rows", (attrFn) rowsfn}, - {"sides", (attrFn) sidesfn}, - {"style", (attrFn) stylefn}, - {"target", (attrFn) targetfn}, - {"title", (attrFn) titlefn}, - {"tooltip", (attrFn) titlefn}, - {"valign", (attrFn) valignfn}, - {"width", (attrFn) widthfn}, -}; - -static attr_item cell_items[] = { - {"align", (attrFn) cell_halignfn}, - {"balign", (attrFn) balignfn}, - {"bgcolor", (attrFn) bgcolorfn}, - {"border", (attrFn) borderfn}, - {"cellpadding", (attrFn) cellpaddingfn}, - {"cellspacing", (attrFn) cellspacingfn}, - {"color", (attrFn) pencolorfn}, - {"colspan", (attrFn) colspanfn}, - {"fixedsize", (attrFn) fixedsizefn}, - {"gradientangle", (attrFn) gradientanglefn}, - {"height", (attrFn) heightfn}, - {"href", (attrFn) hreffn}, - {"id", (attrFn) idfn}, - {"port", (attrFn) portfn}, - {"rowspan", (attrFn) rowspanfn}, - {"sides", (attrFn) sidesfn}, - {"style", (attrFn) stylefn}, - {"target", (attrFn) targetfn}, - {"title", (attrFn) titlefn}, - {"tooltip", (attrFn) titlefn}, - {"valign", (attrFn) valignfn}, - {"width", (attrFn) widthfn}, -}; - -static attr_item font_items[] = { - {"color", (attrFn) fontcolorfn}, - {"face", (attrFn) facefn}, - {"point-size", (attrFn) ptsizefn}, -}; - -static attr_item img_items[] = { - {"scale", (attrFn) scalefn}, - {"src", (attrFn) srcfn}, -}; - -static attr_item br_items[] = { - {"align", (attrFn) alignfn}, -}; - -/* doAttrs: - * General function for processing list of name/value attributes. - * Do binary search on items table. If match found, invoke action - * passing it tp and attribute value. - * Table size is given by nel - * Name/value pairs are in array atts, which is null terminated. - * s is the name of the HTML element being processed. - */ -static void -doAttrs(void *tp, attr_item * items, int nel, char **atts, char *s) -{ - char *name; - char *val; - attr_item *ip; - attr_item key; - - while ((name = *atts++) != NULL) { - val = *atts++; - key.name = name; - ip = (attr_item *) bsearch(&key, items, nel, ISIZE, (bcmpfn) icmp); - if (ip) - state.warn |= ip->action(tp, val); - else { - agerr(AGWARN, "Illegal attribute %s in %s - ignored\n", name, - s); - state.warn = 1; - } - } -} - -static void mkBR(char **atts) -{ - htmllval.i = UNSET_ALIGN; - doAttrs(&htmllval.i, br_items, sizeof(br_items) / ISIZE, atts, "
"); -} - -static htmlimg_t *mkImg(char **atts) -{ - htmlimg_t *img = NEW(htmlimg_t); - - doAttrs(img, img_items, sizeof(img_items) / ISIZE, atts, ""); - - return img; -} - -static textfont_t *mkFont(GVC_t *gvc, char **atts, int flags, int ul) -{ - textfont_t tf = {NULL,NULL,NULL,0.0,0,0}; - - tf.size = -1.0; /* unassigned */ - tf.flags = flags; - if (atts) - doAttrs(&tf, font_items, sizeof(font_items) / ISIZE, atts, ""); - - return dtinsert(gvc->textfont_dt, &tf); -} - -static htmlcell_t *mkCell(char **atts) -{ - htmlcell_t *cell = NEW(htmlcell_t); - - cell->cspan = 1; - cell->rspan = 1; - doAttrs(cell, cell_items, sizeof(cell_items) / ISIZE, atts, ""); - - return cell; -} - -static htmltbl_t *mkTbl(char **atts) -{ - htmltbl_t *tbl = NEW(htmltbl_t); - - tbl->rc = -1; /* flag that table is a raw, parsed table */ - tbl->cb = -1; /* unset cell border attribute */ - doAttrs(tbl, tbl_items, sizeof(tbl_items) / ISIZE, atts, ""); - - return tbl; -} - -static void startElement(void *user, const char *name, char **atts) -{ - GVC_t *gvc = (GVC_t*)user; - - if (strcasecmp(name, "TABLE") == 0) { - htmllval.tbl = mkTbl(atts); - state.inCell = 0; - state.tok = T_table; - } else if ((strcasecmp(name, "TR") == 0) - || (strcasecmp(name, "TH") == 0)) { - state.inCell = 0; - state.tok = T_row; - } else if (strcasecmp(name, "TD") == 0) { - state.inCell = 1; - htmllval.cell = mkCell(atts); - state.tok = T_cell; - } else if (strcasecmp(name, "FONT") == 0) { - htmllval.font = mkFont(gvc, atts, 0, 0); - state.tok = T_font; - } else if (strcasecmp(name, "B") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_BF, 0); - state.tok = T_bold; - } else if (strcasecmp(name, "S") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_S, 0); - state.tok = T_s; - } else if (strcasecmp(name, "U") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_UL, 1); - state.tok = T_underline; - } else if (strcasecmp(name, "O") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_OL, 1); - state.tok = T_overline; - } else if (strcasecmp(name, "I") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_IF, 0); - state.tok = T_italic; - } else if (strcasecmp(name, "SUP") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_SUP, 0); - state.tok = T_sup; - } else if (strcasecmp(name, "SUB") == 0) { - htmllval.font = mkFont(gvc, 0, HTML_SUB, 0); - state.tok = T_sub; - } else if (strcasecmp(name, "BR") == 0) { - mkBR(atts); - state.tok = T_br; - } else if (strcasecmp(name, "HR") == 0) { - state.tok = T_hr; - } else if (strcasecmp(name, "VR") == 0) { - state.tok = T_vr; - } else if (strcasecmp(name, "IMG") == 0) { - htmllval.img = mkImg(atts); - state.tok = T_img; - } else if (strcasecmp(name, "HTML") == 0) { - state.tok = T_html; - } else { - lexerror(name); - } -} - -static void endElement(void *user, const char *name) -{ - if (strcasecmp(name, "TABLE") == 0) { - state.tok = T_end_table; - state.inCell = 1; - } else if ((strcasecmp(name, "TR") == 0) - || (strcasecmp(name, "TH") == 0)) { - state.tok = T_end_row; - } else if (strcasecmp(name, "TD") == 0) { - state.tok = T_end_cell; - state.inCell = 0; - } else if (strcasecmp(name, "HTML") == 0) { - state.tok = T_end_html; - } else if (strcasecmp(name, "FONT") == 0) { - state.tok = T_end_font; - } else if (strcasecmp(name, "B") == 0) { - state.tok = T_n_bold; - } else if (strcasecmp(name, "U") == 0) { - state.tok = T_n_underline; - } else if (strcasecmp(name, "O") == 0) { - state.tok = T_n_overline; - } else if (strcasecmp(name, "I") == 0) { - state.tok = T_n_italic; - } else if (strcasecmp(name, "SUP") == 0) { - state.tok = T_n_sup; - } else if (strcasecmp(name, "SUB") == 0) { - state.tok = T_n_sub; - } else if (strcasecmp(name, "S") == 0) { - state.tok = T_n_s; - } else if (strcasecmp(name, "BR") == 0) { - if (state.tok == T_br) - state.tok = T_BR; - else - state.tok = T_end_br; - } else if (strcasecmp(name, "HR") == 0) { - if (state.tok == T_hr) - state.tok = T_HR; - else - state.tok = T_end_hr; - } else if (strcasecmp(name, "VR") == 0) { - if (state.tok == T_vr) - state.tok = T_VR; - else - state.tok = T_end_vr; - } else if (strcasecmp(name, "IMG") == 0) { - if (state.tok == T_img) - state.tok = T_IMG; - else - state.tok = T_end_img; - } else { - lexerror(name); - } -} - -/* characterData: - * Generate T_string token. Do this only when immediately in - * or .., i.e., when inCell is true. - * Strip out formatting characters but keep spaces. - * Distinguish between all whitespace vs. strings with non-whitespace - * characters. - */ -static void characterData(void *user, const char *s, int length) -{ - int i, cnt = 0; - unsigned char c; - - if (state.inCell) { - for (i = length; i; i--) { - c = *s++; - if (c >= ' ') { - cnt++; - agxbputc(state.xb, c); - } - } - if (cnt) state.tok = T_string; - } -} -#endif - -int initHTMLlexer(char *src, agxbuf * xb, htmlenv_t *env) -{ -#ifdef HAVE_EXPAT - state.xb = xb; - agxbinit (&state.lb, SMALLBUF, NULL); - state.ptr = src; - state.mode = 0; - state.warn = 0; - state.error = 0; - state.currtoklen = 0; - state.prevtoklen = 0; - state.inCell = 1; - state.parser = XML_ParserCreate(charsetToStr(GD_charset(env->g))); - XML_SetUserData(state.parser, GD_gvc(env->g)); - XML_SetElementHandler(state.parser, - (XML_StartElementHandler) startElement, - endElement); - XML_SetCharacterDataHandler(state.parser, characterData); - return 0; -#else - static int first; - if (!first) { - agerr(AGWARN, - "Not built with libexpat. Table formatting is not available.\n"); - first++; - } - return 1; -#endif -} - -int clearHTMLlexer() -{ -#ifdef HAVE_EXPAT - int rv = state.warn | state.error; - XML_ParserFree(state.parser); - agxbfree (&state.lb); - return rv; -#else - return 1; -#endif -} - -#ifdef HAVE_EXPAT -/* eatComment: - * Given first character after open comment, eat characters - * upto comment close, returning pointer to closing > if it exists, - * or null character otherwise. - * We rely on HTML strings having matched nested <>. - */ -static char *eatComment(char *p) -{ - int depth = 1; - char *s = p; - char c; - - while (depth && (c = *s++)) { - if (c == '<') - depth++; - else if (c == '>') - depth--; - } - s--; /* move back to '\0' or '>' */ - if (*s) { - char *t = s - 2; - if ((t < p) || strncmp(t, "--", 2)) { - agerr(AGWARN, "Unclosed comment\n"); - state.warn = 1; - } - } - return s; -} - -/* findNext: - * Return next XML unit. This is either <..>, an HTML - * comment , or characters up to next <. - */ -static char *findNext(char *s, agxbuf* xb) -{ - char* t = s + 1; - char c; - - if (*s == '<') { - if ((*t == '!') && !strncmp(t + 1, "--", 2)) - t = eatComment(t + 3); - else - while (*t && (*t != '>')) - t++; - if (*t != '>') { - agerr(AGWARN, "Label closed before end of HTML element\n"); - state.warn = 1; - } else - t++; - } else { - t = s; - while ((c = *t) && (c != '<')) { - if ((c == '&') && (*(t+1) != '#')) { - t = scanEntity(t + 1, xb); - } - else { - agxbputc(xb, c); - t++; - } - } - } - return t; -} -#endif - -int htmllineno() -{ -#ifdef HAVE_EXPAT - return XML_GetCurrentLineNumber(state.parser); -#else - return 0; -#endif -} - -#ifdef DEBUG -static void printTok(int tok) -{ - char *s; - - switch (tok) { - case T_VR: - s = "T_VR"; - break; - case T_vr: - s = "T_vr"; - break; - case T_end_vr: - s = "T_end_vr"; - break; - case T_HR: - s = "T_HR"; - break; - case T_hr: - s = "T_hr"; - break; - case T_end_hr: - s = "T_end_hr"; - break; - case T_BR: - s = "T_BR"; - break; - case T_br: - s = "T_br"; - break; - case T_end_br: - s = "T_end_br"; - break; - case T_end_table: - s = "T_end_table"; - break; - case T_row: - s = "T_row"; - break; - case T_end_row: - s = "T_end_row"; - break; - case T_end_cell: - s = "T_end_cell"; - break; - case T_html: - s = "T_html"; - break; - case T_end_html: - s = "T_end_html"; - break; - case T_string: - s = "T_string"; - break; - case T_error: - s = "T_error"; - break; - case T_table: - s = "T_table"; - break; - case T_cell: - s = "T_cell"; - break; - case T_img: - s = "T_img"; - break; - case T_end_img: - s = "T_end_img"; - break; - case T_IMG: - s = "T_IMG"; - break; - case T_underline: - s = "T_underline"; - break; - case T_n_underline: - s = "T_n_underline"; - break; - case T_overline: - s = "T_overline"; - break; - case T_n_overline: - s = "T_n_overline"; - break; - case T_italic: - s = "T_italic"; - break; - case T_n_italic: - s = "T_n_italic"; - break; - case T_bold: - s = "T_bold"; - break; - case T_n_bold: - s = "T_n_bold"; - break; - case T_s: - s = "T_s"; - break; - case T_n_s: - s = "T_n_s"; - break; - default: - s = ""; - } - if (tok == T_string) { - fprintf(stderr, "%s \"", s); - fwrite(agxbstart(state.xb), 1, agxblen(state.xb), stderr); - fprintf(stderr, "\"\n"); - } else - fprintf(stderr, "%s\n", s); -} - -#endif - -int htmllex() -{ -#ifdef HAVE_EXPAT - static char *begin_html = ""; - static char *end_html = ""; - - char *s; - char *endp = 0; - int len, llen; - int rv; - - state.tok = 0; - do { - if (state.mode == 2) - return EOF; - if (state.mode == 0) { - state.mode = 1; - s = begin_html; - len = strlen(s); - endp = 0; - } else { - s = state.ptr; - if (*s == '\0') { - state.mode = 2; - s = end_html; - len = strlen(s); - } else { - endp = findNext(s,&state.lb); - len = endp - s; - } - } - state.prevtok = state.currtok; - state.prevtoklen = state.currtoklen; - state.currtok = s; - state.currtoklen = len; - if ((llen = agxblen(&state.lb))) - rv = XML_Parse(state.parser, agxbuse(&state.lb),llen, 0); - else - rv = XML_Parse(state.parser, s, len, (len ? 0 : 1)); - if (rv == XML_STATUS_ERROR) { - if (!state.error) { - agerr(AGERR, "%s in line %d \n", - XML_ErrorString(XML_GetErrorCode(state.parser)), - htmllineno()); - error_context(); - state.error = 1; - state.tok = T_error; - } - } - if (endp) - state.ptr = endp; - } while (state.tok == 0); -#if DEBUG - printTok (state.tok); -#endif - return state.tok; -#else - return EOF; -#endif -} - diff --git a/internal/ccall/common/htmllex.h b/internal/ccall/common/htmllex.h deleted file mode 100644 index a4f95b0..0000000 --- a/internal/ccall/common/htmllex.h +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef HTMLLEX_H -#define HTMLLEX_H - -#include - - extern int initHTMLlexer(char *, agxbuf *, htmlenv_t *); - extern int htmllex(void); - extern int htmllineno(void); - extern int clearHTMLlexer(void); - void htmlerror(const char *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/common/htmlparse.c b/internal/ccall/common/htmlparse.c deleted file mode 100644 index 2b69543..0000000 --- a/internal/ccall/common/htmlparse.c +++ /dev/null @@ -1,2556 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with html or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.7" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 14 "../../lib/common/htmlparse.y" - - -#include "render.h" -#include "htmltable.h" -#include "htmllex.h" - -extern int htmlparse(void); - -typedef struct sfont_t { - textfont_t *cfont; - struct sfont_t *pfont; -} sfont_t; - -static struct { - htmllabel_t* lbl; /* Generated label */ - htmltbl_t* tblstack; /* Stack of tables maintained during parsing */ - Dt_t* fitemList; /* Dictionary for font text items */ - Dt_t* fspanList; - agxbuf* str; /* Buffer for text */ - sfont_t* fontstack; - GVC_t* gvc; -} HTMLstate; - -/* free_ritem: - * Free row. This closes and frees row's list, then - * the pitem itself is freed. - */ -static void -free_ritem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - dtclose (p->u.rp); - free (p); -} - -/* free_item: - * Generic Dt free. Only frees container, assuming contents - * have been copied elsewhere. - */ -static void -free_item(Dt_t* d, void* p,Dtdisc_t* ds) -{ - free (p); -} - -/* cleanTbl: - * Clean up table if error in parsing. - */ -static void -cleanTbl (htmltbl_t* tp) -{ - dtclose (tp->u.p.rows); - free_html_data (&tp->data); - free (tp); -} - -/* cleanCell: - * Clean up cell if error in parsing. - */ -static void -cleanCell (htmlcell_t* cp) -{ - if (cp->child.kind == HTML_TBL) cleanTbl (cp->child.u.tbl); - else if (cp->child.kind == HTML_TEXT) free_html_text (cp->child.u.txt); - free_html_data (&cp->data); - free (cp); -} - -/* free_citem: - * Free cell item during parsing. This frees cell and pitem. - */ -static void -free_citem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - cleanCell (p->u.cp); - free (p); -} - -static Dtdisc_t rowDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_ritem, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; -static Dtdisc_t cellDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -typedef struct { - Dtlink_t link; - textspan_t ti; -} fitem; - -typedef struct { - Dtlink_t link; - htextspan_t lp; -} fspan; - -static void -free_fitem(Dt_t* d, fitem* p, Dtdisc_t* ds) -{ - if (p->ti.str) - free (p->ti.str); - free (p); -} - -static void -free_fspan(Dt_t* d, fspan* p, Dtdisc_t* ds) -{ - textspan_t* ti; - - if (p->lp.nitems) { - int i; - ti = p->lp.items; - for (i = 0; i < p->lp.nitems; i++) { - if (ti->str) free (ti->str); - ti++; - } - free (p->lp.items); - } - free (p); -} - -static Dtdisc_t fstrDisc = { - 0, - 0, - offsetof(fitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - - -static Dtdisc_t fspanDisc = { - 0, - 0, - offsetof(fspan,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* appendFItemList: - * Append a new fitem to the list. - */ -static void -appendFItemList (agxbuf *ag) -{ - fitem *fi = NEW(fitem); - - fi->ti.str = strdup(agxbuse(ag)); - fi->ti.font = HTMLstate.fontstack->cfont; - dtinsert(HTMLstate.fitemList, fi); -} - -/* appendFLineList: - */ -static void -appendFLineList (int v) -{ - int cnt; - fspan *ln = NEW(fspan); - fitem *fi; - Dt_t *ilist = HTMLstate.fitemList; - - cnt = dtsize(ilist); - ln->lp.just = v; - if (cnt) { - int i = 0; - ln->lp.nitems = cnt; - ln->lp.items = N_NEW(cnt, textspan_t); - - fi = (fitem*)dtflatten(ilist); - for (; fi; fi = (fitem*)dtlink(fitemList,(Dtlink_t*)fi)) { - /* NOTE: When fitemList is closed, it uses free_item, which only frees the container, - * not the contents, so this copy is safe. - */ - ln->lp.items[i] = fi->ti; - i++; - } - } - else { - ln->lp.items = NEW(textspan_t); - ln->lp.nitems = 1; - ln->lp.items[0].str = strdup(""); - ln->lp.items[0].font = HTMLstate.fontstack->cfont; - } - - dtclear(ilist); - - dtinsert(HTMLstate.fspanList, ln); -} - -static htmltxt_t* -mkText(void) -{ - int cnt; - Dt_t * ispan = HTMLstate.fspanList; - fspan *fl ; - htmltxt_t *hft = NEW(htmltxt_t); - - if (dtsize (HTMLstate.fitemList)) - appendFLineList (UNSET_ALIGN); - - cnt = dtsize(ispan); - hft->nspans = cnt; - - if (cnt) { - int i = 0; - hft->spans = N_NEW(cnt,htextspan_t); - for(fl=(fspan *)dtfirst(ispan); fl; fl=(fspan *)dtnext(ispan,fl)) { - hft->spans[i] = fl->lp; - i++; - } - } - - dtclear(ispan); - - return hft; -} - -static pitem* lastRow (void) -{ - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = dtlast (tbl->u.p.rows); - return sp; -} - -/* addRow: - * Add new cell row to current table. - */ -static pitem* addRow (void) -{ - Dt_t* dp = dtopen(&cellDisc, Dtqueue); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = NEW(pitem); - sp->u.rp = dp; - if (tbl->flags & HTML_HRULE) - sp->ruled = 1; - dtinsert (tbl->u.p.rows, sp); - return sp; -} - -/* setCell: - * Set cell body and type and attach to row - */ -static void setCell (htmlcell_t* cp, void* obj, int kind) -{ - pitem* sp = NEW(pitem); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* rp = (pitem*)dtlast (tbl->u.p.rows); - Dt_t* row = rp->u.rp; - sp->u.cp = cp; - dtinsert (row, sp); - cp->child.kind = kind; - if (tbl->flags & HTML_VRULE) - cp->ruled = HTML_VRULE; - - if(kind == HTML_TEXT) - cp->child.u.txt = (htmltxt_t*)obj; - else if (kind == HTML_IMAGE) - cp->child.u.img = (htmlimg_t*)obj; - else - cp->child.u.tbl = (htmltbl_t*)obj; -} - -/* mkLabel: - * Create label, given body and type. - */ -static htmllabel_t* mkLabel (void* obj, int kind) -{ - htmllabel_t* lp = NEW(htmllabel_t); - - lp->kind = kind; - if (kind == HTML_TEXT) - lp->u.txt = (htmltxt_t*)obj; - else - lp->u.tbl = (htmltbl_t*)obj; - return lp; -} - -/* freeFontstack: - * Free all stack items but the last, which is - * put on artificially during in parseHTML. - */ -static void -freeFontstack(void) -{ - sfont_t* s; - sfont_t* next; - - for (s = HTMLstate.fontstack; (next = s->pfont); s = next) { - free(s); - } -} - -/* cleanup: - * Called on error. Frees resources allocated during parsing. - * This includes a label, plus a walk down the stack of - * tables. Note that we use the free_citem function to actually - * free cells. - */ -static void cleanup (void) -{ - htmltbl_t* tp = HTMLstate.tblstack; - htmltbl_t* next; - - if (HTMLstate.lbl) { - free_html_label (HTMLstate.lbl,1); - HTMLstate.lbl = NULL; - } - cellDisc.freef = (Dtfree_f)free_citem; - while (tp) { - next = tp->u.p.prev; - cleanTbl (tp); - tp = next; - } - cellDisc.freef = (Dtfree_f)free_item; - - fstrDisc.freef = (Dtfree_f)free_fitem; - dtclear (HTMLstate.fitemList); - fstrDisc.freef = (Dtfree_f)free_item; - - fspanDisc.freef = (Dtfree_f)free_fspan; - dtclear (HTMLstate.fspanList); - fspanDisc.freef = (Dtfree_f)free_item; - - freeFontstack(); -} - -/* nonSpace: - * Return 1 if s contains a non-space character. - */ -static int nonSpace (char* s) -{ - char c; - - while ((c = *s++)) { - if (c != ' ') return 1; - } - return 0; -} - -/* pushFont: - * Fonts are allocated in the lexer. - */ -static void -pushFont (textfont_t *fp) -{ - sfont_t *ft = NEW(sfont_t); - textfont_t* curfont = HTMLstate.fontstack->cfont; - textfont_t f = *fp; - - if (curfont) { - if (!f.color && curfont->color) - f.color = curfont->color; - if ((f.size < 0.0) && (curfont->size >= 0.0)) - f.size = curfont->size; - if (!f.name && curfont->name) - f.name = curfont->name; - if (curfont->flags) - f.flags |= curfont->flags; - } - - ft->cfont = dtinsert(HTMLstate.gvc->textfont_dt, &f); - ft->pfont = HTMLstate.fontstack; - HTMLstate.fontstack = ft; -} - -/* popFont: - */ -static void -popFont (void) -{ - sfont_t* curfont = HTMLstate.fontstack; - sfont_t* prevfont = curfont->pfont; - - free (curfont); - HTMLstate.fontstack = prevfont; -} - - -/* Line 371 of yacc.c */ -#line 469 "y.tab.c" - -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int htmldebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum htmltokentype { - T_end_br = 258, - T_end_img = 259, - T_row = 260, - T_end_row = 261, - T_html = 262, - T_end_html = 263, - T_end_table = 264, - T_end_cell = 265, - T_end_font = 266, - T_string = 267, - T_error = 268, - T_n_italic = 269, - T_n_bold = 270, - T_n_underline = 271, - T_n_overline = 272, - T_n_sup = 273, - T_n_sub = 274, - T_n_s = 275, - T_HR = 276, - T_hr = 277, - T_end_hr = 278, - T_VR = 279, - T_vr = 280, - T_end_vr = 281, - T_BR = 282, - T_br = 283, - T_IMG = 284, - T_img = 285, - T_table = 286, - T_cell = 287, - T_font = 288, - T_italic = 289, - T_bold = 290, - T_underline = 291, - T_overline = 292, - T_sup = 293, - T_sub = 294, - T_s = 295 - }; -#endif -/* Tokens. */ -#define T_end_br 258 -#define T_end_img 259 -#define T_row 260 -#define T_end_row 261 -#define T_html 262 -#define T_end_html 263 -#define T_end_table 264 -#define T_end_cell 265 -#define T_end_font 266 -#define T_string 267 -#define T_error 268 -#define T_n_italic 269 -#define T_n_bold 270 -#define T_n_underline 271 -#define T_n_overline 272 -#define T_n_sup 273 -#define T_n_sub 274 -#define T_n_s 275 -#define T_HR 276 -#define T_hr 277 -#define T_end_hr 278 -#define T_VR 279 -#define T_vr 280 -#define T_end_vr 281 -#define T_BR 282 -#define T_br 283 -#define T_IMG 284 -#define T_img 285 -#define T_table 286 -#define T_cell 287 -#define T_font 288 -#define T_italic 289 -#define T_bold 290 -#define T_underline 291 -#define T_overline 292 -#define T_sup 293 -#define T_sub 294 -#define T_s 295 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 387 of yacc.c */ -#line 415 "../../lib/common/htmlparse.y" - - int i; - htmltxt_t* txt; - htmlcell_t* cell; - htmltbl_t* tbl; - textfont_t* font; - htmlimg_t* img; - pitem* p; - - -/* Line 387 of yacc.c */ -#line 603 "y.tab.c" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define htmlstype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE htmllval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int htmlparse (void *YYPARSE_PARAM); -#else -int htmlparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int htmlparse (void); -#else -int htmlparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ - -/* Line 390 of yacc.c */ -#line 631 "y.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 htmltype_uint8; -#else -typedef unsigned char htmltype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 htmltype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char htmltype_int8; -#else -typedef short int htmltype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 htmltype_uint16; -#else -typedef unsigned short int htmltype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 htmltype_int16; -#else -typedef short int htmltype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int htmli) -#else -static int -YYID (htmli) - int htmli; -#endif -{ - return htmli; -} -#endif - -#if ! defined htmloverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined htmloverflow || YYERROR_VERBOSE */ - - -#if (! defined htmloverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union htmlalloc -{ - htmltype_int16 htmlss_alloc; - YYSTYPE htmlvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union htmlalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (htmltype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T htmlnewbytes; \ - YYCOPY (&htmlptr->Stack_alloc, Stack, htmlsize); \ - Stack = &htmlptr->Stack_alloc; \ - htmlnewbytes = htmlstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - htmlptr += htmlnewbytes / sizeof (*htmlptr); \ - } \ - while (YYID (0)) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T htmli; \ - for (htmli = 0; htmli < (Count); htmli++) \ - (Dst)[htmli] = (Src)[htmli]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 31 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 271 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 41 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 39 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 69 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 116 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 295 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? htmltranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const htmltype_uint8 htmltranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const htmltype_uint8 htmlprhs[] = -{ - 0, 0, 3, 7, 11, 13, 15, 18, 20, 22, - 24, 28, 32, 36, 40, 44, 48, 52, 56, 58, - 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, - 80, 82, 84, 86, 88, 91, 93, 95, 98, 99, - 106, 108, 112, 116, 120, 124, 128, 130, 131, 133, - 136, 140, 141, 146, 148, 151, 155, 156, 161, 162, - 167, 168, 173, 174, 178, 181, 183, 186, 188, 191 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const htmltype_int8 htmlrhs[] = -{ - 42, 0, -1, 7, 43, 8, -1, 7, 66, 8, - -1, 1, -1, 44, -1, 44, 45, -1, 45, -1, - 63, -1, 62, -1, 46, 44, 47, -1, 48, 44, - 49, -1, 54, 44, 55, -1, 56, 44, 57, -1, - 50, 44, 51, -1, 58, 44, 59, -1, 60, 44, - 61, -1, 52, 44, 53, -1, 33, -1, 11, -1, - 34, -1, 14, -1, 35, -1, 15, -1, 40, -1, - 20, -1, 36, -1, 16, -1, 37, -1, 17, -1, - 38, -1, 18, -1, 39, -1, 19, -1, 28, 3, - -1, 27, -1, 12, -1, 63, 12, -1, -1, 67, - 31, 65, 68, 9, 67, -1, 64, -1, 46, 64, - 47, -1, 48, 64, 49, -1, 54, 64, 55, -1, - 56, 64, 57, -1, 50, 64, 51, -1, 63, -1, - -1, 69, -1, 68, 69, -1, 68, 78, 69, -1, - -1, 5, 70, 71, 6, -1, 72, -1, 71, 72, - -1, 71, 79, 72, -1, -1, 32, 66, 73, 10, - -1, -1, 32, 43, 74, 10, -1, -1, 32, 77, - 75, 10, -1, -1, 32, 76, 10, -1, 30, 4, - -1, 29, -1, 22, 23, -1, 21, -1, 25, 26, - -1, 24, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const htmltype_uint16 htmlrline[] = -{ - 0, 447, 447, 448, 449, 452, 455, 456, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 471, 474, - 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, - 507, 510, 513, 516, 519, 520, 523, 524, 527, 527, - 548, 549, 550, 551, 552, 553, 556, 557, 560, 561, - 562, 565, 565, 568, 569, 570, 573, 573, 574, 574, - 575, 575, 576, 576, 579, 580, 583, 584, 587, 588 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const htmltname[] = -{ - "$end", "error", "$undefined", "T_end_br", "T_end_img", "T_row", - "T_end_row", "T_html", "T_end_html", "T_end_table", "T_end_cell", - "T_end_font", "T_string", "T_error", "T_n_italic", "T_n_bold", - "T_n_underline", "T_n_overline", "T_n_sup", "T_n_sub", "T_n_s", "T_HR", - "T_hr", "T_end_hr", "T_VR", "T_vr", "T_end_vr", "T_BR", "T_br", "T_IMG", - "T_img", "T_table", "T_cell", "T_font", "T_italic", "T_bold", - "T_underline", "T_overline", "T_sup", "T_sub", "T_s", "$accept", "html", - "fonttext", "text", "textitem", "font", "n_font", "italic", "n_italic", - "bold", "n_bold", "strike", "n_strike", "underline", "n_underline", - "overline", "n_overline", "sup", "n_sup", "sub", "n_sub", "br", "string", - "table", "@1", "fonttable", "opt_space", "rows", "row", "$@2", "cells", - "cell", "$@3", "$@4", "$@5", "$@6", "image", "HR", "VR", YY_NULL -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const htmltype_uint16 htmltoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const htmltype_uint8 htmlr1[] = -{ - 0, 41, 42, 42, 42, 43, 44, 44, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 62, 63, 63, 65, 64, - 66, 66, 66, 66, 66, 66, 67, 67, 68, 68, - 68, 70, 69, 71, 71, 71, 73, 72, 74, 72, - 75, 72, 76, 72, 77, 77, 78, 78, 79, 79 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const htmltype_uint8 htmlr2[] = -{ - 0, 2, 3, 3, 1, 1, 2, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 2, 0, 6, - 1, 3, 3, 3, 3, 3, 1, 0, 1, 2, - 3, 0, 4, 1, 2, 3, 0, 4, 0, 4, - 0, 4, 0, 3, 2, 1, 2, 1, 2, 1 -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const htmltype_uint8 htmldefact[] = -{ - 0, 4, 47, 0, 36, 35, 0, 18, 20, 22, - 26, 28, 30, 32, 24, 0, 5, 7, 47, 47, - 47, 0, 47, 47, 0, 0, 9, 8, 40, 0, - 0, 1, 34, 2, 6, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 3, 38, 19, 10, 41, - 21, 11, 42, 23, 14, 45, 25, 17, 27, 12, - 43, 29, 13, 44, 31, 15, 33, 16, 0, 51, - 0, 48, 0, 47, 67, 0, 49, 0, 47, 0, - 53, 46, 39, 66, 50, 65, 0, 58, 56, 0, - 60, 52, 69, 0, 54, 0, 64, 0, 0, 63, - 0, 68, 55, 59, 57, 61 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const htmltype_int8 htmldefgoto[] = -{ - -1, 3, 15, 16, 17, 35, 58, 36, 61, 37, - 64, 21, 67, 38, 69, 39, 72, 24, 75, 25, - 77, 26, 40, 28, 78, 29, 30, 80, 81, 82, - 89, 90, 108, 107, 110, 99, 100, 87, 105 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -82 -static const htmltype_int16 htmlpact[] = -{ - 8, -82, 209, 10, -82, -82, 11, -82, -82, -82, - -82, -82, -82, -82, -82, 5, 209, -82, 209, 209, - 209, 209, 209, 209, 209, 209, -82, -5, -82, 14, - -20, -82, -82, -82, -82, 209, 209, 209, 209, 209, - 13, 37, 12, 66, 16, 80, 19, 109, 123, 20, - 152, 15, 166, 195, -82, -82, -82, -82, -82, -82, - -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, - -82, -82, -82, -82, -82, -82, -82, -82, 23, -82, - 119, -82, 7, 46, -82, 38, -82, 23, 17, 35, - -82, 13, -82, -82, -82, -82, 58, -82, -82, 53, - -82, -82, -82, 40, -82, 7, -82, 59, 69, -82, - 72, -82, -82, -82, -82, -82 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const htmltype_int16 htmlpgoto[] = -{ - -82, -82, -4, 232, -10, -1, 26, 0, 39, 1, - 50, -82, -82, 2, 36, 3, 47, -82, -82, -82, - -82, -82, -2, 148, -82, 9, 27, -82, -68, -82, - -82, -81, -82, -82, -82, -82, -82, -82, -82 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -63 -static const htmltype_int8 htmltable[] = -{ - 27, 18, 19, 20, 22, 23, 34, 54, 104, 1, - 31, 56, 86, 33, 32, 2, 27, 27, 27, 94, - 27, 27, 55, 57, 112, 54, -46, -62, 79, 4, - 60, 34, 71, 34, 63, 34, 68, 34, 34, 88, - 34, 101, 34, 34, 5, 6, 95, 96, 57, 4, - 7, 8, 9, 10, 11, 12, 13, 14, 4, 102, - 103, 93, 106, 109, 5, 6, 111, 88, 59, 113, - 7, 8, 9, 10, 11, 12, 13, 14, 4, 114, - 60, 91, 115, 62, 97, 70, 27, 18, 19, 20, - 22, 23, 4, 5, 6, 63, 65, 98, 73, 7, - 8, 9, 10, 11, 12, 13, 14, 5, 6, 0, - 92, 0, 0, 7, 8, 9, 10, 11, 12, 13, - 14, 4, 0, 0, 79, 0, 0, 0, 83, 66, - 0, 0, 0, 0, 0, 4, 5, 6, 0, 68, - 84, 85, 7, 8, 9, 10, 11, 12, 13, 14, - 5, 6, 0, 0, 0, 0, 7, 8, 9, 10, - 11, 12, 13, 14, 4, 0, 42, 44, 46, 71, - 49, 51, 0, 0, 0, 0, 0, 0, 4, 5, - 6, 0, 0, 0, 74, 7, 8, 9, 10, 11, - 12, 13, 14, 5, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 11, 12, 13, 14, 4, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, - 0, 4, 5, 6, 0, 0, 0, 0, 7, 8, - 9, 10, 11, 12, 13, 14, 5, 6, 0, 0, - 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, - 41, 43, 45, 47, 48, 50, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 43, 45, - 48, 50 -}; - -#define htmlpact_value_is_default(Yystate) \ - (!!((Yystate) == (-82))) - -#define htmltable_value_is_error(Yytable_value) \ - YYID (0) - -static const htmltype_int8 htmlcheck[] = -{ - 2, 2, 2, 2, 2, 2, 16, 12, 89, 1, - 0, 31, 80, 8, 3, 7, 18, 19, 20, 87, - 22, 23, 8, 11, 105, 12, 31, 10, 5, 12, - 14, 41, 17, 43, 15, 45, 16, 47, 48, 32, - 50, 6, 52, 53, 27, 28, 29, 30, 11, 12, - 33, 34, 35, 36, 37, 38, 39, 40, 12, 24, - 25, 23, 4, 10, 27, 28, 26, 32, 42, 10, - 33, 34, 35, 36, 37, 38, 39, 40, 12, 10, - 14, 83, 10, 44, 88, 49, 88, 88, 88, 88, - 88, 88, 12, 27, 28, 15, 46, 88, 51, 33, - 34, 35, 36, 37, 38, 39, 40, 27, 28, -1, - 83, -1, -1, 33, 34, 35, 36, 37, 38, 39, - 40, 12, -1, -1, 5, -1, -1, -1, 9, 20, - -1, -1, -1, -1, -1, 12, 27, 28, -1, 16, - 21, 22, 33, 34, 35, 36, 37, 38, 39, 40, - 27, 28, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, 12, -1, 18, 19, 20, 17, - 22, 23, -1, -1, -1, -1, -1, -1, 12, 27, - 28, -1, -1, -1, 18, 33, 34, 35, 36, 37, - 38, 39, 40, 27, 28, -1, -1, -1, -1, 33, - 34, 35, 36, 37, 38, 39, 40, 12, -1, -1, - -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, - -1, 12, 27, 28, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, 27, 28, -1, -1, - -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, - 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 35, 36, 37, - 38, 39 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const htmltype_uint8 htmlstos[] = -{ - 0, 1, 7, 42, 12, 27, 28, 33, 34, 35, - 36, 37, 38, 39, 40, 43, 44, 45, 46, 48, - 50, 52, 54, 56, 58, 60, 62, 63, 64, 66, - 67, 0, 3, 8, 45, 46, 48, 50, 54, 56, - 63, 44, 64, 44, 64, 44, 64, 44, 44, 64, - 44, 64, 44, 44, 12, 8, 31, 11, 47, 47, - 14, 49, 49, 15, 51, 51, 20, 53, 16, 55, - 55, 17, 57, 57, 18, 59, 19, 61, 65, 5, - 68, 69, 70, 9, 21, 22, 69, 78, 32, 71, - 72, 63, 67, 23, 69, 29, 30, 43, 66, 76, - 77, 6, 24, 25, 72, 79, 4, 74, 73, 10, - 75, 26, 72, 10, 10, 10 -}; - -#define htmlerrok (htmlerrstatus = 0) -#define htmlclearin (htmlchar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto htmlacceptlab -#define YYABORT goto htmlabortlab -#define YYERROR goto htmlerrorlab - - -/* Like YYERROR except do call htmlerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto htmlerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define YYRECOVERING() (!!htmlerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (htmlchar == YYEMPTY) \ - { \ - htmlchar = (Token); \ - htmllval = (Value); \ - YYPOPSTACK (htmllen); \ - htmlstate = *htmlssp; \ - goto htmlbackup; \ - } \ - else \ - { \ - htmlerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `htmllex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX htmllex (YYLEX_PARAM) -#else -# define YYLEX htmllex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (htmldebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (htmldebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - html_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -html_symbol_value_print (FILE *htmloutput, int htmltype, YYSTYPE const * const htmlvaluep) -#else -static void -html_symbol_value_print (htmloutput, htmltype, htmlvaluep) - FILE *htmloutput; - int htmltype; - YYSTYPE const * const htmlvaluep; -#endif -{ - FILE *htmlo = htmloutput; - YYUSE (htmlo); - if (!htmlvaluep) - return; -# ifdef YYPRINT - if (htmltype < YYNTOKENS) - YYPRINT (htmloutput, htmltoknum[htmltype], *htmlvaluep); -# else - YYUSE (htmloutput); -# endif - switch (htmltype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -html_symbol_print (FILE *htmloutput, int htmltype, YYSTYPE const * const htmlvaluep) -#else -static void -html_symbol_print (htmloutput, htmltype, htmlvaluep) - FILE *htmloutput; - int htmltype; - YYSTYPE const * const htmlvaluep; -#endif -{ - if (htmltype < YYNTOKENS) - YYFPRINTF (htmloutput, "token %s (", htmltname[htmltype]); - else - YYFPRINTF (htmloutput, "nterm %s (", htmltname[htmltype]); - - html_symbol_value_print (htmloutput, htmltype, htmlvaluep); - YYFPRINTF (htmloutput, ")"); -} - -/*------------------------------------------------------------------. -| html_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -html_stack_print (htmltype_int16 *htmlbottom, htmltype_int16 *htmltop) -#else -static void -html_stack_print (htmlbottom, htmltop) - htmltype_int16 *htmlbottom; - htmltype_int16 *htmltop; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; htmlbottom <= htmltop; htmlbottom++) - { - int htmlbot = *htmlbottom; - YYFPRINTF (stderr, " %d", htmlbot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (htmldebug) \ - html_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -html_reduce_print (YYSTYPE *htmlvsp, int htmlrule) -#else -static void -html_reduce_print (htmlvsp, htmlrule) - YYSTYPE *htmlvsp; - int htmlrule; -#endif -{ - int htmlnrhs = htmlr2[htmlrule]; - int htmli; - unsigned long int htmllno = htmlrline[htmlrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - htmlrule - 1, htmllno); - /* The symbols being reduced. */ - for (htmli = 0; htmli < htmlnrhs; htmli++) - { - YYFPRINTF (stderr, " $%d = ", htmli + 1); - html_symbol_print (stderr, htmlrhs[htmlprhs[htmlrule] + htmli], - &(htmlvsp[(htmli + 1) - (htmlnrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (htmldebug) \ - html_reduce_print (htmlvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int htmldebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef htmlstrlen -# if defined __GLIBC__ && defined _STRING_H -# define htmlstrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -htmlstrlen (const char *htmlstr) -#else -static YYSIZE_T -htmlstrlen (htmlstr) - const char *htmlstr; -#endif -{ - YYSIZE_T htmllen; - for (htmllen = 0; htmlstr[htmllen]; htmllen++) - continue; - return htmllen; -} -# endif -# endif - -# ifndef htmlstpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define htmlstpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -htmlstpcpy (char *htmldest, const char *htmlsrc) -#else -static char * -htmlstpcpy (htmldest, htmlsrc) - char *htmldest; - const char *htmlsrc; -#endif -{ - char *htmld = htmldest; - const char *htmls = htmlsrc; - - while ((*htmld++ = *htmls++) != '\0') - continue; - - return htmld - 1; -} -# endif -# endif - -# ifndef htmltnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for htmlerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from htmltname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -htmltnamerr (char *htmlres, const char *htmlstr) -{ - if (*htmlstr == '"') - { - YYSIZE_T htmln = 0; - char const *htmlp = htmlstr; - - for (;;) - switch (*++htmlp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++htmlp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (htmlres) - htmlres[htmln] = *htmlp; - htmln++; - break; - - case '"': - if (htmlres) - htmlres[htmln] = '\0'; - return htmln; - } - do_not_strip_quotes: ; - } - - if (! htmlres) - return htmlstrlen (htmlstr); - - return htmlstpcpy (htmlres, htmlstr) - htmlres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -htmlsyntax_error (YYSIZE_T *htmlmsg_alloc, char **htmlmsg, - htmltype_int16 *htmlssp, int htmltoken) -{ - YYSIZE_T htmlsize0 = htmltnamerr (YY_NULL, htmltname[htmltoken]); - YYSIZE_T htmlsize = htmlsize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *htmlformat = YY_NULL; - /* Arguments of htmlformat. */ - char const *htmlarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int htmlcount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in htmlchar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated htmlchar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (htmltoken != YYEMPTY) - { - int htmln = htmlpact[*htmlssp]; - htmlarg[htmlcount++] = htmltname[htmltoken]; - if (!htmlpact_value_is_default (htmln)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int htmlxbegin = htmln < 0 ? -htmln : 0; - /* Stay within bounds of both htmlcheck and htmltname. */ - int htmlchecklim = YYLAST - htmln + 1; - int htmlxend = htmlchecklim < YYNTOKENS ? htmlchecklim : YYNTOKENS; - int htmlx; - - for (htmlx = htmlxbegin; htmlx < htmlxend; ++htmlx) - if (htmlcheck[htmlx + htmln] == htmlx && htmlx != YYTERROR - && !htmltable_value_is_error (htmltable[htmlx + htmln])) - { - if (htmlcount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - htmlcount = 1; - htmlsize = htmlsize0; - break; - } - htmlarg[htmlcount++] = htmltname[htmlx]; - { - YYSIZE_T htmlsize1 = htmlsize + htmltnamerr (YY_NULL, htmltname[htmlx]); - if (! (htmlsize <= htmlsize1 - && htmlsize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - htmlsize = htmlsize1; - } - } - } - } - - switch (htmlcount) - { -# define YYCASE_(N, S) \ - case N: \ - htmlformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T htmlsize1 = htmlsize + htmlstrlen (htmlformat); - if (! (htmlsize <= htmlsize1 && htmlsize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - htmlsize = htmlsize1; - } - - if (*htmlmsg_alloc < htmlsize) - { - *htmlmsg_alloc = 2 * htmlsize; - if (! (htmlsize <= *htmlmsg_alloc - && *htmlmsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *htmlmsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *htmlp = *htmlmsg; - int htmli = 0; - while ((*htmlp = *htmlformat) != '\0') - if (*htmlp == '%' && htmlformat[1] == 's' && htmli < htmlcount) - { - htmlp += htmltnamerr (htmlp, htmlarg[htmli++]); - htmlformat += 2; - } - else - { - htmlp++; - htmlformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -htmldestruct (const char *htmlmsg, int htmltype, YYSTYPE *htmlvaluep) -#else -static void -htmldestruct (htmlmsg, htmltype, htmlvaluep) - const char *htmlmsg; - int htmltype; - YYSTYPE *htmlvaluep; -#endif -{ - YYUSE (htmlvaluep); - - if (!htmlmsg) - htmlmsg = "Deleting"; - YY_SYMBOL_PRINT (htmlmsg, htmltype, htmlvaluep, htmllocationp); - - switch (htmltype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int htmlchar; - - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -YYSTYPE htmllval YY_INITIAL_VALUE(htmlval_default); - -/* Number of syntax errors so far. */ -int htmlnerrs; - - -/*----------. -| htmlparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -htmlparse (void *YYPARSE_PARAM) -#else -int -htmlparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -htmlparse (void) -#else -int -htmlparse () - -#endif -#endif -{ - int htmlstate; - /* Number of tokens to shift before error messages enabled. */ - int htmlerrstatus; - - /* The stacks and their tools: - `htmlss': related to states. - `htmlvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow htmloverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - htmltype_int16 htmlssa[YYINITDEPTH]; - htmltype_int16 *htmlss; - htmltype_int16 *htmlssp; - - /* The semantic value stack. */ - YYSTYPE htmlvsa[YYINITDEPTH]; - YYSTYPE *htmlvs; - YYSTYPE *htmlvsp; - - YYSIZE_T htmlstacksize; - - int htmln; - int htmlresult; - /* Lookahead token as an internal (translated) token number. */ - int htmltoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE htmlval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char htmlmsgbuf[128]; - char *htmlmsg = htmlmsgbuf; - YYSIZE_T htmlmsg_alloc = sizeof htmlmsgbuf; -#endif - -#define YYPOPSTACK(N) (htmlvsp -= (N), htmlssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int htmllen = 0; - - htmlssp = htmlss = htmlssa; - htmlvsp = htmlvs = htmlvsa; - htmlstacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - htmlstate = 0; - htmlerrstatus = 0; - htmlnerrs = 0; - htmlchar = YYEMPTY; /* Cause a token to be read. */ - goto htmlsetstate; - -/*------------------------------------------------------------. -| htmlnewstate -- Push a new state, which is found in htmlstate. | -`------------------------------------------------------------*/ - htmlnewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - htmlssp++; - - htmlsetstate: - *htmlssp = htmlstate; - - if (htmlss + htmlstacksize - 1 <= htmlssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T htmlsize = htmlssp - htmlss + 1; - -#ifdef htmloverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *htmlvs1 = htmlvs; - htmltype_int16 *htmlss1 = htmlss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if htmloverflow is a macro. */ - htmloverflow (YY_("memory exhausted"), - &htmlss1, htmlsize * sizeof (*htmlssp), - &htmlvs1, htmlsize * sizeof (*htmlvsp), - &htmlstacksize); - - htmlss = htmlss1; - htmlvs = htmlvs1; - } -#else /* no htmloverflow */ -# ifndef YYSTACK_RELOCATE - goto htmlexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= htmlstacksize) - goto htmlexhaustedlab; - htmlstacksize *= 2; - if (YYMAXDEPTH < htmlstacksize) - htmlstacksize = YYMAXDEPTH; - - { - htmltype_int16 *htmlss1 = htmlss; - union htmlalloc *htmlptr = - (union htmlalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (htmlstacksize)); - if (! htmlptr) - goto htmlexhaustedlab; - YYSTACK_RELOCATE (htmlss_alloc, htmlss); - YYSTACK_RELOCATE (htmlvs_alloc, htmlvs); -# undef YYSTACK_RELOCATE - if (htmlss1 != htmlssa) - YYSTACK_FREE (htmlss1); - } -# endif -#endif /* no htmloverflow */ - - htmlssp = htmlss + htmlsize - 1; - htmlvsp = htmlvs + htmlsize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) htmlstacksize)); - - if (htmlss + htmlstacksize - 1 <= htmlssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", htmlstate)); - - if (htmlstate == YYFINAL) - YYACCEPT; - - goto htmlbackup; - -/*-----------. -| htmlbackup. | -`-----------*/ -htmlbackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - htmln = htmlpact[htmlstate]; - if (htmlpact_value_is_default (htmln)) - goto htmldefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (htmlchar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - htmlchar = YYLEX; - } - - if (htmlchar <= YYEOF) - { - htmlchar = htmltoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - htmltoken = YYTRANSLATE (htmlchar); - YY_SYMBOL_PRINT ("Next token is", htmltoken, &htmllval, &htmllloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - htmln += htmltoken; - if (htmln < 0 || YYLAST < htmln || htmlcheck[htmln] != htmltoken) - goto htmldefault; - htmln = htmltable[htmln]; - if (htmln <= 0) - { - if (htmltable_value_is_error (htmln)) - goto htmlerrlab; - htmln = -htmln; - goto htmlreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (htmlerrstatus) - htmlerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", htmltoken, &htmllval, &htmllloc); - - /* Discard the shifted token. */ - htmlchar = YYEMPTY; - - htmlstate = htmln; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++htmlvsp = htmllval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto htmlnewstate; - - -/*-----------------------------------------------------------. -| htmldefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -htmldefault: - htmln = htmldefact[htmlstate]; - if (htmln == 0) - goto htmlerrlab; - goto htmlreduce; - - -/*-----------------------------. -| htmlreduce -- Do a reduction. | -`-----------------------------*/ -htmlreduce: - /* htmln is the number of a rule to reduce with. */ - htmllen = htmlr2[htmln]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - htmlval = htmlvsp[1-htmllen]; - - - YY_REDUCE_PRINT (htmln); - switch (htmln) - { - case 2: -/* Line 1792 of yacc.c */ -#line 447 "../../lib/common/htmlparse.y" - { HTMLstate.lbl = mkLabel((htmlvsp[(2) - (3)].txt),HTML_TEXT); } - break; - - case 3: -/* Line 1792 of yacc.c */ -#line 448 "../../lib/common/htmlparse.y" - { HTMLstate.lbl = mkLabel((htmlvsp[(2) - (3)].tbl),HTML_TBL); } - break; - - case 4: -/* Line 1792 of yacc.c */ -#line 449 "../../lib/common/htmlparse.y" - { cleanup(); YYABORT; } - break; - - case 5: -/* Line 1792 of yacc.c */ -#line 452 "../../lib/common/htmlparse.y" - { (htmlval.txt) = mkText(); } - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 459 "../../lib/common/htmlparse.y" - { appendFItemList(HTMLstate.str);} - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 460 "../../lib/common/htmlparse.y" - {appendFLineList((htmlvsp[(1) - (1)].i));} - break; - - case 18: -/* Line 1792 of yacc.c */ -#line 471 "../../lib/common/htmlparse.y" - { pushFont ((htmlvsp[(1) - (1)].font)); } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 474 "../../lib/common/htmlparse.y" - { popFont (); } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 477 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 480 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 483 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 486 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 489 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 492 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 495 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 27: -/* Line 1792 of yacc.c */ -#line 498 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 28: -/* Line 1792 of yacc.c */ -#line 501 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 29: -/* Line 1792 of yacc.c */ -#line 504 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 30: -/* Line 1792 of yacc.c */ -#line 507 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 510 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 513 "../../lib/common/htmlparse.y" - {pushFont((htmlvsp[(1) - (1)].font));} - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 516 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 519 "../../lib/common/htmlparse.y" - { (htmlval.i) = (htmlvsp[(1) - (2)].i); } - break; - - case 35: -/* Line 1792 of yacc.c */ -#line 520 "../../lib/common/htmlparse.y" - { (htmlval.i) = (htmlvsp[(1) - (1)].i); } - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 527 "../../lib/common/htmlparse.y" - { - if (nonSpace(agxbuse(HTMLstate.str))) { - htmlerror ("Syntax error: non-space string used before
..
"); - cleanup(); YYABORT; - } - (htmlvsp[(2) - (2)].tbl)->u.p.prev = HTMLstate.tblstack; - (htmlvsp[(2) - (2)].tbl)->u.p.rows = dtopen(&rowDisc, Dtqueue); - HTMLstate.tblstack = (htmlvsp[(2) - (2)].tbl); - (htmlvsp[(2) - (2)].tbl)->font = HTMLstate.fontstack->cfont; - (htmlval.tbl) = (htmlvsp[(2) - (2)].tbl); - } - break; - - case 39: -/* Line 1792 of yacc.c */ -#line 538 "../../lib/common/htmlparse.y" - { - if (nonSpace(agxbuse(HTMLstate.str))) { - htmlerror ("Syntax error: non-space string used after
"); - cleanup(); YYABORT; - } - (htmlval.tbl) = HTMLstate.tblstack; - HTMLstate.tblstack = HTMLstate.tblstack->u.p.prev; - } - break; - - case 40: -/* Line 1792 of yacc.c */ -#line 548 "../../lib/common/htmlparse.y" - { (htmlval.tbl) = (htmlvsp[(1) - (1)].tbl); } - break; - - case 41: -/* Line 1792 of yacc.c */ -#line 549 "../../lib/common/htmlparse.y" - { (htmlval.tbl)=(htmlvsp[(2) - (3)].tbl); } - break; - - case 42: -/* Line 1792 of yacc.c */ -#line 550 "../../lib/common/htmlparse.y" - { (htmlval.tbl)=(htmlvsp[(2) - (3)].tbl); } - break; - - case 43: -/* Line 1792 of yacc.c */ -#line 551 "../../lib/common/htmlparse.y" - { (htmlval.tbl)=(htmlvsp[(2) - (3)].tbl); } - break; - - case 44: -/* Line 1792 of yacc.c */ -#line 552 "../../lib/common/htmlparse.y" - { (htmlval.tbl)=(htmlvsp[(2) - (3)].tbl); } - break; - - case 45: -/* Line 1792 of yacc.c */ -#line 553 "../../lib/common/htmlparse.y" - { (htmlval.tbl)=(htmlvsp[(2) - (3)].tbl); } - break; - - case 48: -/* Line 1792 of yacc.c */ -#line 560 "../../lib/common/htmlparse.y" - { (htmlval.p) = (htmlvsp[(1) - (1)].p); } - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 561 "../../lib/common/htmlparse.y" - { (htmlval.p) = (htmlvsp[(2) - (2)].p); } - break; - - case 50: -/* Line 1792 of yacc.c */ -#line 562 "../../lib/common/htmlparse.y" - { (htmlvsp[(1) - (3)].p)->ruled = 1; (htmlval.p) = (htmlvsp[(3) - (3)].p); } - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 565 "../../lib/common/htmlparse.y" - { addRow (); } - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 565 "../../lib/common/htmlparse.y" - { (htmlval.p) = lastRow(); } - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 568 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(1) - (1)].cell); } - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 569 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(2) - (2)].cell); } - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 570 "../../lib/common/htmlparse.y" - { (htmlvsp[(1) - (3)].cell)->ruled |= HTML_VRULE; (htmlval.cell) = (htmlvsp[(3) - (3)].cell); } - break; - - case 56: -/* Line 1792 of yacc.c */ -#line 573 "../../lib/common/htmlparse.y" - { setCell((htmlvsp[(1) - (2)].cell),(htmlvsp[(2) - (2)].tbl),HTML_TBL); } - break; - - case 57: -/* Line 1792 of yacc.c */ -#line 573 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(1) - (4)].cell); } - break; - - case 58: -/* Line 1792 of yacc.c */ -#line 574 "../../lib/common/htmlparse.y" - { setCell((htmlvsp[(1) - (2)].cell),(htmlvsp[(2) - (2)].txt),HTML_TEXT); } - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 574 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(1) - (4)].cell); } - break; - - case 60: -/* Line 1792 of yacc.c */ -#line 575 "../../lib/common/htmlparse.y" - { setCell((htmlvsp[(1) - (2)].cell),(htmlvsp[(2) - (2)].img),HTML_IMAGE); } - break; - - case 61: -/* Line 1792 of yacc.c */ -#line 575 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(1) - (4)].cell); } - break; - - case 62: -/* Line 1792 of yacc.c */ -#line 576 "../../lib/common/htmlparse.y" - { setCell((htmlvsp[(1) - (1)].cell),mkText(),HTML_TEXT); } - break; - - case 63: -/* Line 1792 of yacc.c */ -#line 576 "../../lib/common/htmlparse.y" - { (htmlval.cell) = (htmlvsp[(1) - (3)].cell); } - break; - - case 64: -/* Line 1792 of yacc.c */ -#line 579 "../../lib/common/htmlparse.y" - { (htmlval.img) = (htmlvsp[(1) - (2)].img); } - break; - - case 65: -/* Line 1792 of yacc.c */ -#line 580 "../../lib/common/htmlparse.y" - { (htmlval.img) = (htmlvsp[(1) - (1)].img); } - break; - - -/* Line 1792 of yacc.c */ -#line 2277 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter htmlchar, and that requires - that htmltoken be updated with the new translation. We take the - approach of translating immediately before every use of htmltoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering htmlchar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", htmlr1[htmln], &htmlval, &htmlloc); - - YYPOPSTACK (htmllen); - htmllen = 0; - YY_STACK_PRINT (htmlss, htmlssp); - - *++htmlvsp = htmlval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - htmln = htmlr1[htmln]; - - htmlstate = htmlpgoto[htmln - YYNTOKENS] + *htmlssp; - if (0 <= htmlstate && htmlstate <= YYLAST && htmlcheck[htmlstate] == *htmlssp) - htmlstate = htmltable[htmlstate]; - else - htmlstate = htmldefgoto[htmln - YYNTOKENS]; - - goto htmlnewstate; - - -/*------------------------------------. -| htmlerrlab -- here on detecting error | -`------------------------------------*/ -htmlerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - htmltoken = htmlchar == YYEMPTY ? YYEMPTY : YYTRANSLATE (htmlchar); - - /* If not already recovering from an error, report this error. */ - if (!htmlerrstatus) - { - ++htmlnerrs; -#if ! YYERROR_VERBOSE - htmlerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR htmlsyntax_error (&htmlmsg_alloc, &htmlmsg, \ - htmlssp, htmltoken) - { - char const *htmlmsgp = YY_("syntax error"); - int htmlsyntax_error_status; - htmlsyntax_error_status = YYSYNTAX_ERROR; - if (htmlsyntax_error_status == 0) - htmlmsgp = htmlmsg; - else if (htmlsyntax_error_status == 1) - { - if (htmlmsg != htmlmsgbuf) - YYSTACK_FREE (htmlmsg); - htmlmsg = (char *) YYSTACK_ALLOC (htmlmsg_alloc); - if (!htmlmsg) - { - htmlmsg = htmlmsgbuf; - htmlmsg_alloc = sizeof htmlmsgbuf; - htmlsyntax_error_status = 2; - } - else - { - htmlsyntax_error_status = YYSYNTAX_ERROR; - htmlmsgp = htmlmsg; - } - } - htmlerror (htmlmsgp); - if (htmlsyntax_error_status == 2) - goto htmlexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (htmlerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (htmlchar <= YYEOF) - { - /* Return failure if at end of input. */ - if (htmlchar == YYEOF) - YYABORT; - } - else - { - htmldestruct ("Error: discarding", - htmltoken, &htmllval); - htmlchar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto htmlerrlab1; - - -/*---------------------------------------------------. -| htmlerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -htmlerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label htmlerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto htmlerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (htmllen); - htmllen = 0; - YY_STACK_PRINT (htmlss, htmlssp); - htmlstate = *htmlssp; - goto htmlerrlab1; - - -/*-------------------------------------------------------------. -| htmlerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -htmlerrlab1: - htmlerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - htmln = htmlpact[htmlstate]; - if (!htmlpact_value_is_default (htmln)) - { - htmln += YYTERROR; - if (0 <= htmln && htmln <= YYLAST && htmlcheck[htmln] == YYTERROR) - { - htmln = htmltable[htmln]; - if (0 < htmln) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (htmlssp == htmlss) - YYABORT; - - - htmldestruct ("Error: popping", - htmlstos[htmlstate], htmlvsp); - YYPOPSTACK (1); - htmlstate = *htmlssp; - YY_STACK_PRINT (htmlss, htmlssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++htmlvsp = htmllval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", htmlstos[htmln], htmlvsp, htmllsp); - - htmlstate = htmln; - goto htmlnewstate; - - -/*-------------------------------------. -| htmlacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -htmlacceptlab: - htmlresult = 0; - goto htmlreturn; - -/*-----------------------------------. -| htmlabortlab -- YYABORT comes here. | -`-----------------------------------*/ -htmlabortlab: - htmlresult = 1; - goto htmlreturn; - -#if !defined htmloverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| htmlexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -htmlexhaustedlab: - htmlerror (YY_("memory exhausted")); - htmlresult = 2; - /* Fall through. */ -#endif - -htmlreturn: - if (htmlchar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - htmltoken = YYTRANSLATE (htmlchar); - htmldestruct ("Cleanup: discarding lookahead", - htmltoken, &htmllval); - } - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (htmllen); - YY_STACK_PRINT (htmlss, htmlssp); - while (htmlssp != htmlss) - { - htmldestruct ("Cleanup: popping", - htmlstos[*htmlssp], htmlvsp); - YYPOPSTACK (1); - } -#ifndef htmloverflow - if (htmlss != htmlssa) - YYSTACK_FREE (htmlss); -#endif -#if YYERROR_VERBOSE - if (htmlmsg != htmlmsgbuf) - YYSTACK_FREE (htmlmsg); -#endif - /* Make sure YYID is used. */ - return YYID (htmlresult); -} - - -/* Line 2055 of yacc.c */ -#line 592 "../../lib/common/htmlparse.y" - - -/* parseHTML: - * Return parsed label or NULL if failure. - * Set warn to 0 on success; 1 for warning message; 2 if no expat. - */ -htmllabel_t* -parseHTML (char* txt, int* warn, htmlenv_t *env) -{ - unsigned char buf[SMALLBUF]; - agxbuf str; - htmllabel_t* l; - sfont_t dfltf; - - dfltf.cfont = NULL; - dfltf.pfont = NULL; - HTMLstate.fontstack = &dfltf; - HTMLstate.tblstack = 0; - HTMLstate.lbl = 0; - HTMLstate.gvc = GD_gvc(env->g); - HTMLstate.fitemList = dtopen(&fstrDisc, Dtqueue); - HTMLstate.fspanList = dtopen(&fspanDisc, Dtqueue); - - agxbinit (&str, SMALLBUF, buf); - HTMLstate.str = &str; - - if (initHTMLlexer (txt, &str, env)) {/* failed: no libexpat - give up */ - *warn = 2; - l = NULL; - } - else { - htmlparse(); - *warn = clearHTMLlexer (); - l = HTMLstate.lbl; - } - - dtclose (HTMLstate.fitemList); - dtclose (HTMLstate.fspanList); - - HTMLstate.fitemList = NULL; - HTMLstate.fspanList = NULL; - HTMLstate.fontstack = NULL; - - agxbfree (&str); - - return l; -} - diff --git a/internal/ccall/common/htmlparse.h b/internal/ccall/common/htmlparse.h deleted file mode 100644 index 03d15a3..0000000 --- a/internal/ccall/common/htmlparse.h +++ /dev/null @@ -1,170 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int htmldebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum htmltokentype { - T_end_br = 258, - T_end_img = 259, - T_row = 260, - T_end_row = 261, - T_html = 262, - T_end_html = 263, - T_end_table = 264, - T_end_cell = 265, - T_end_font = 266, - T_string = 267, - T_error = 268, - T_n_italic = 269, - T_n_bold = 270, - T_n_underline = 271, - T_n_overline = 272, - T_n_sup = 273, - T_n_sub = 274, - T_n_s = 275, - T_HR = 276, - T_hr = 277, - T_end_hr = 278, - T_VR = 279, - T_vr = 280, - T_end_vr = 281, - T_BR = 282, - T_br = 283, - T_IMG = 284, - T_img = 285, - T_table = 286, - T_cell = 287, - T_font = 288, - T_italic = 289, - T_bold = 290, - T_underline = 291, - T_overline = 292, - T_sup = 293, - T_sub = 294, - T_s = 295 - }; -#endif -/* Tokens. */ -#define T_end_br 258 -#define T_end_img 259 -#define T_row 260 -#define T_end_row 261 -#define T_html 262 -#define T_end_html 263 -#define T_end_table 264 -#define T_end_cell 265 -#define T_end_font 266 -#define T_string 267 -#define T_error 268 -#define T_n_italic 269 -#define T_n_bold 270 -#define T_n_underline 271 -#define T_n_overline 272 -#define T_n_sup 273 -#define T_n_sub 274 -#define T_n_s 275 -#define T_HR 276 -#define T_hr 277 -#define T_end_hr 278 -#define T_VR 279 -#define T_vr 280 -#define T_end_vr 281 -#define T_BR 282 -#define T_br 283 -#define T_IMG 284 -#define T_img 285 -#define T_table 286 -#define T_cell 287 -#define T_font 288 -#define T_italic 289 -#define T_bold 290 -#define T_underline 291 -#define T_overline 292 -#define T_sup 293 -#define T_sub 294 -#define T_s 295 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 2058 of yacc.c */ -#line 415 "../../lib/common/htmlparse.y" - - int i; - htmltxt_t* txt; - htmlcell_t* cell; - htmltbl_t* tbl; - textfont_t* font; - htmlimg_t* img; - pitem* p; - - -/* Line 2058 of yacc.c */ -#line 148 "y.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define htmlstype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE htmllval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int htmlparse (void *YYPARSE_PARAM); -#else -int htmlparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int htmlparse (void); -#else -int htmlparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/internal/ccall/common/htmlparse.y b/internal/ccall/common/htmlparse.y deleted file mode 100644 index 4d16565..0000000 --- a/internal/ccall/common/htmlparse.y +++ /dev/null @@ -1,639 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -%{ - -#include "render.h" -#include "htmltable.h" -#include "htmllex.h" - -extern int yyparse(void); - -typedef struct sfont_t { - textfont_t *cfont; - struct sfont_t *pfont; -} sfont_t; - -static struct { - htmllabel_t* lbl; /* Generated label */ - htmltbl_t* tblstack; /* Stack of tables maintained during parsing */ - Dt_t* fitemList; /* Dictionary for font text items */ - Dt_t* fspanList; - agxbuf* str; /* Buffer for text */ - sfont_t* fontstack; - GVC_t* gvc; -} HTMLstate; - -/* free_ritem: - * Free row. This closes and frees row's list, then - * the pitem itself is freed. - */ -static void -free_ritem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - dtclose (p->u.rp); - free (p); -} - -/* free_item: - * Generic Dt free. Only frees container, assuming contents - * have been copied elsewhere. - */ -static void -free_item(Dt_t* d, void* p,Dtdisc_t* ds) -{ - free (p); -} - -/* cleanTbl: - * Clean up table if error in parsing. - */ -static void -cleanTbl (htmltbl_t* tp) -{ - dtclose (tp->u.p.rows); - free_html_data (&tp->data); - free (tp); -} - -/* cleanCell: - * Clean up cell if error in parsing. - */ -static void -cleanCell (htmlcell_t* cp) -{ - if (cp->child.kind == HTML_TBL) cleanTbl (cp->child.u.tbl); - else if (cp->child.kind == HTML_TEXT) free_html_text (cp->child.u.txt); - free_html_data (&cp->data); - free (cp); -} - -/* free_citem: - * Free cell item during parsing. This frees cell and pitem. - */ -static void -free_citem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - cleanCell (p->u.cp); - free (p); -} - -static Dtdisc_t rowDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_ritem, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; -static Dtdisc_t cellDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -typedef struct { - Dtlink_t link; - textspan_t ti; -} fitem; - -typedef struct { - Dtlink_t link; - htextspan_t lp; -} fspan; - -static void -free_fitem(Dt_t* d, fitem* p, Dtdisc_t* ds) -{ - if (p->ti.str) - free (p->ti.str); - free (p); -} - -static void -free_fspan(Dt_t* d, fspan* p, Dtdisc_t* ds) -{ - textspan_t* ti; - - if (p->lp.nitems) { - int i; - ti = p->lp.items; - for (i = 0; i < p->lp.nitems; i++) { - if (ti->str) free (ti->str); - ti++; - } - free (p->lp.items); - } - free (p); -} - -static Dtdisc_t fstrDisc = { - 0, - 0, - offsetof(fitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - - -static Dtdisc_t fspanDisc = { - 0, - 0, - offsetof(fspan,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* appendFItemList: - * Append a new fitem to the list. - */ -static void -appendFItemList (agxbuf *ag) -{ - fitem *fi = NEW(fitem); - - fi->ti.str = strdup(agxbuse(ag)); - fi->ti.font = HTMLstate.fontstack->cfont; - dtinsert(HTMLstate.fitemList, fi); -} - -/* appendFLineList: - */ -static void -appendFLineList (int v) -{ - int cnt; - fspan *ln = NEW(fspan); - fitem *fi; - Dt_t *ilist = HTMLstate.fitemList; - - cnt = dtsize(ilist); - ln->lp.just = v; - if (cnt) { - int i = 0; - ln->lp.nitems = cnt; - ln->lp.items = N_NEW(cnt, textspan_t); - - fi = (fitem*)dtflatten(ilist); - for (; fi; fi = (fitem*)dtlink(fitemList,(Dtlink_t*)fi)) { - /* NOTE: When fitemList is closed, it uses free_item, which only frees the container, - * not the contents, so this copy is safe. - */ - ln->lp.items[i] = fi->ti; - i++; - } - } - else { - ln->lp.items = NEW(textspan_t); - ln->lp.nitems = 1; - ln->lp.items[0].str = strdup(""); - ln->lp.items[0].font = HTMLstate.fontstack->cfont; - } - - dtclear(ilist); - - dtinsert(HTMLstate.fspanList, ln); -} - -static htmltxt_t* -mkText(void) -{ - int cnt; - Dt_t * ispan = HTMLstate.fspanList; - fspan *fl ; - htmltxt_t *hft = NEW(htmltxt_t); - - if (dtsize (HTMLstate.fitemList)) - appendFLineList (UNSET_ALIGN); - - cnt = dtsize(ispan); - hft->nspans = cnt; - - if (cnt) { - int i = 0; - hft->spans = N_NEW(cnt,htextspan_t); - for(fl=(fspan *)dtfirst(ispan); fl; fl=(fspan *)dtnext(ispan,fl)) { - hft->spans[i] = fl->lp; - i++; - } - } - - dtclear(ispan); - - return hft; -} - -static pitem* lastRow (void) -{ - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = dtlast (tbl->u.p.rows); - return sp; -} - -/* addRow: - * Add new cell row to current table. - */ -static pitem* addRow (void) -{ - Dt_t* dp = dtopen(&cellDisc, Dtqueue); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = NEW(pitem); - sp->u.rp = dp; - if (tbl->flags & HTML_HRULE) - sp->ruled = 1; - dtinsert (tbl->u.p.rows, sp); - return sp; -} - -/* setCell: - * Set cell body and type and attach to row - */ -static void setCell (htmlcell_t* cp, void* obj, int kind) -{ - pitem* sp = NEW(pitem); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* rp = (pitem*)dtlast (tbl->u.p.rows); - Dt_t* row = rp->u.rp; - sp->u.cp = cp; - dtinsert (row, sp); - cp->child.kind = kind; - if (tbl->flags & HTML_VRULE) - cp->ruled = HTML_VRULE; - - if(kind == HTML_TEXT) - cp->child.u.txt = (htmltxt_t*)obj; - else if (kind == HTML_IMAGE) - cp->child.u.img = (htmlimg_t*)obj; - else - cp->child.u.tbl = (htmltbl_t*)obj; -} - -/* mkLabel: - * Create label, given body and type. - */ -static htmllabel_t* mkLabel (void* obj, int kind) -{ - htmllabel_t* lp = NEW(htmllabel_t); - - lp->kind = kind; - if (kind == HTML_TEXT) - lp->u.txt = (htmltxt_t*)obj; - else - lp->u.tbl = (htmltbl_t*)obj; - return lp; -} - -/* freeFontstack: - * Free all stack items but the last, which is - * put on artificially during in parseHTML. - */ -static void -freeFontstack(void) -{ - sfont_t* s; - sfont_t* next; - - for (s = HTMLstate.fontstack; (next = s->pfont); s = next) { - free(s); - } -} - -/* cleanup: - * Called on error. Frees resources allocated during parsing. - * This includes a label, plus a walk down the stack of - * tables. Note that we use the free_citem function to actually - * free cells. - */ -static void cleanup (void) -{ - htmltbl_t* tp = HTMLstate.tblstack; - htmltbl_t* next; - - if (HTMLstate.lbl) { - free_html_label (HTMLstate.lbl,1); - HTMLstate.lbl = NULL; - } - cellDisc.freef = (Dtfree_f)free_citem; - while (tp) { - next = tp->u.p.prev; - cleanTbl (tp); - tp = next; - } - cellDisc.freef = (Dtfree_f)free_item; - - fstrDisc.freef = (Dtfree_f)free_fitem; - dtclear (HTMLstate.fitemList); - fstrDisc.freef = (Dtfree_f)free_item; - - fspanDisc.freef = (Dtfree_f)free_fspan; - dtclear (HTMLstate.fspanList); - fspanDisc.freef = (Dtfree_f)free_item; - - freeFontstack(); -} - -/* nonSpace: - * Return 1 if s contains a non-space character. - */ -static int nonSpace (char* s) -{ - char c; - - while ((c = *s++)) { - if (c != ' ') return 1; - } - return 0; -} - -/* pushFont: - * Fonts are allocated in the lexer. - */ -static void -pushFont (textfont_t *fp) -{ - sfont_t *ft = NEW(sfont_t); - textfont_t* curfont = HTMLstate.fontstack->cfont; - textfont_t f = *fp; - - if (curfont) { - if (!f.color && curfont->color) - f.color = curfont->color; - if ((f.size < 0.0) && (curfont->size >= 0.0)) - f.size = curfont->size; - if (!f.name && curfont->name) - f.name = curfont->name; - if (curfont->flags) - f.flags |= curfont->flags; - } - - ft->cfont = dtinsert(HTMLstate.gvc->textfont_dt, &f); - ft->pfont = HTMLstate.fontstack; - HTMLstate.fontstack = ft; -} - -/* popFont: - */ -static void -popFont (void) -{ - sfont_t* curfont = HTMLstate.fontstack; - sfont_t* prevfont = curfont->pfont; - - free (curfont); - HTMLstate.fontstack = prevfont; -} - -%} - -%union { - int i; - htmltxt_t* txt; - htmlcell_t* cell; - htmltbl_t* tbl; - textfont_t* font; - htmlimg_t* img; - pitem* p; -} - -%token T_end_br T_end_img T_row T_end_row T_html T_end_html -%token T_end_table T_end_cell T_end_font T_string T_error -%token T_n_italic T_n_bold T_n_underline T_n_overline T_n_sup T_n_sub T_n_s -%token T_HR T_hr T_end_hr -%token T_VR T_vr T_end_vr -%token T_BR T_br -%token T_IMG T_img -%token T_table -%token T_cell -%token T_font T_italic T_bold T_underline T_overline T_sup T_sub T_s - -%type fonttext -%type cell cells -%type br -%type table fonttable -%type image -%type

row rows - -%start html - -%% - -html : T_html fonttext T_end_html { HTMLstate.lbl = mkLabel($2,HTML_TEXT); } - | T_html fonttable T_end_html { HTMLstate.lbl = mkLabel($2,HTML_TBL); } - | error { cleanup(); YYABORT; } - ; - -fonttext : text { $$ = mkText(); } - ; - -text : text textitem - | textitem - ; - -textitem : string { appendFItemList(HTMLstate.str);} - | br {appendFLineList($1);} - | font text n_font - | italic text n_italic - | underline text n_underline - | overline text n_overline - | bold text n_bold - | sup text n_sup - | sub text n_sub - | strike text n_strike - ; - -font : T_font { pushFont ($1); } - ; - -n_font : T_end_font { popFont (); } - ; - -italic : T_italic {pushFont($1);} - ; - -n_italic : T_n_italic {popFont();} - ; - -bold : T_bold {pushFont($1);} - ; - -n_bold : T_n_bold {popFont();} - ; - -strike : T_s {pushFont($1);} - ; - -n_strike : T_n_s {popFont();} - ; - -underline : T_underline {pushFont($1);} - ; - -n_underline : T_n_underline {popFont();} - ; - -overline : T_overline {pushFont($1);} - ; - -n_overline : T_n_overline {popFont();} - ; - -sup : T_sup {pushFont($1);} - ; - -n_sup : T_n_sup {popFont();} - ; - -sub : T_sub {pushFont($1);} - ; - -n_sub : T_n_sub {popFont();} - ; - -br : T_br T_end_br { $$ = $1; } - | T_BR { $$ = $1; } - ; - -string : T_string - | string T_string - ; - -table : opt_space T_table { - if (nonSpace(agxbuse(HTMLstate.str))) { - yyerror ("Syntax error: non-space string used before "); - cleanup(); YYABORT; - } - $2->u.p.prev = HTMLstate.tblstack; - $2->u.p.rows = dtopen(&rowDisc, Dtqueue); - HTMLstate.tblstack = $2; - $2->font = HTMLstate.fontstack->cfont; - $$ = $2; - } - rows T_end_table opt_space { - if (nonSpace(agxbuse(HTMLstate.str))) { - yyerror ("Syntax error: non-space string used after
"); - cleanup(); YYABORT; - } - $$ = HTMLstate.tblstack; - HTMLstate.tblstack = HTMLstate.tblstack->u.p.prev; - } - ; - -fonttable : table { $$ = $1; } - | font table n_font { $$=$2; } - | italic table n_italic { $$=$2; } - | underline table n_underline { $$=$2; } - | overline table n_overline { $$=$2; } - | bold table n_bold { $$=$2; } - ; - -opt_space : string - | /* empty*/ - ; - -rows : row { $$ = $1; } - | rows row { $$ = $2; } - | rows HR row { $1->ruled = 1; $$ = $3; } - ; - -row : T_row { addRow (); } cells T_end_row { $$ = lastRow(); } - ; - -cells : cell { $$ = $1; } - | cells cell { $$ = $2; } - | cells VR cell { $1->ruled |= HTML_VRULE; $$ = $3; } - ; - -cell : T_cell fonttable { setCell($1,$2,HTML_TBL); } T_end_cell { $$ = $1; } - | T_cell fonttext { setCell($1,$2,HTML_TEXT); } T_end_cell { $$ = $1; } - | T_cell image { setCell($1,$2,HTML_IMAGE); } T_end_cell { $$ = $1; } - | T_cell { setCell($1,mkText(),HTML_TEXT); } T_end_cell { $$ = $1; } - ; - -image : T_img T_end_img { $$ = $1; } - | T_IMG { $$ = $1; } - ; - -HR : T_hr T_end_hr - | T_HR - ; - -VR : T_vr T_end_vr - | T_VR - ; - - -%% - -/* parseHTML: - * Return parsed label or NULL if failure. - * Set warn to 0 on success; 1 for warning message; 2 if no expat. - */ -htmllabel_t* -parseHTML (char* txt, int* warn, htmlenv_t *env) -{ - unsigned char buf[SMALLBUF]; - agxbuf str; - htmllabel_t* l; - sfont_t dfltf; - - dfltf.cfont = NULL; - dfltf.pfont = NULL; - HTMLstate.fontstack = &dfltf; - HTMLstate.tblstack = 0; - HTMLstate.lbl = 0; - HTMLstate.gvc = GD_gvc(env->g); - HTMLstate.fitemList = dtopen(&fstrDisc, Dtqueue); - HTMLstate.fspanList = dtopen(&fspanDisc, Dtqueue); - - agxbinit (&str, SMALLBUF, buf); - HTMLstate.str = &str; - - if (initHTMLlexer (txt, &str, env)) {/* failed: no libexpat - give up */ - *warn = 2; - l = NULL; - } - else { - yyparse(); - *warn = clearHTMLlexer (); - l = HTMLstate.lbl; - } - - dtclose (HTMLstate.fitemList); - dtclose (HTMLstate.fspanList); - - HTMLstate.fitemList = NULL; - HTMLstate.fspanList = NULL; - HTMLstate.fontstack = NULL; - - agxbfree (&str); - - return l; -} - diff --git a/internal/ccall/common/htmltable.c b/internal/ccall/common/htmltable.c deleted file mode 100644 index 9a2ffe2..0000000 --- a/internal/ccall/common/htmltable.c +++ /dev/null @@ -1,2139 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* Implementation of HTML-like tables. - * - * The (now purged) CodeGen graphics model, especially with integral coodinates, is - * not adequate to handle this as we would like. In particular, it is - * difficult to handle notions of adjacency and correct rounding to pixels. - * For example, if 2 adjacent boxes bb1.UR.x == bb2.LL.x, the rectangles - * may be drawn overlapping. However, if we use bb1.UR.x+1 == bb2.LL.x - * there may or may not be a gap between them, even in the same device - * depending on their positions. When CELLSPACING > 1, this isn't as much - * of a problem. - * - * We allow negative spacing as a hack to allow overlapping cell boundaries. - * For the reasons discussed above, this is difficult to get correct. - * This is an important enough case we should extend the table model to - * support it correctly. This could be done by allowing a table attribute, - * e.g., CELLGRID=n, which sets CELLBORDER=0 and has the border drawing - * handled correctly by the table. - */ - -#include -#include "render.h" -#include "htmltable.h" -#include "agxbuf.h" -#include "pointset.h" -#include "intset.h" -#include "cdt.h" - -#define DEFAULT_BORDER 1 -#define DEFAULT_CELLPADDING 2 -#define DEFAULT_CELLSPACING 2 - -typedef struct { - char *url; - char *tooltip; - char *target; - char *id; - boolean explicit_tooltip; - point LL; - point UR; -} htmlmap_data_t; - -#ifdef DEBUG -static void printCell(htmlcell_t * cp, int ind); -#endif - -/* pushFontInfo: - * Replace current font attributes in env with ones from fp, - * storing old attributes in savp. We only deal with attributes - * set in env. The attributes are restored via popFontInfo. - */ -static void -pushFontInfo(htmlenv_t * env, textfont_t * fp, textfont_t * savp) -{ - if (env->finfo.name) { - if (fp->name) { - savp->name = env->finfo.name; - env->finfo.name = fp->name; - } else - savp->name = NULL; - } - if (env->finfo.color) { - if (fp->color) { - savp->color = env->finfo.color; - env->finfo.color = fp->color; - } else - savp->color = NULL; - } - if (env->finfo.size >= 0) { - if (fp->size >= 0) { - savp->size = env->finfo.size; - env->finfo.size = fp->size; - } else - savp->size = -1.0; - } -} - -/* popFontInfo: - * Restore saved font attributes. - * Copy only set values. - */ -static void popFontInfo(htmlenv_t * env, textfont_t * savp) -{ - if (savp->name) - env->finfo.name = savp->name; - if (savp->color) - env->finfo.color = savp->color; - if (savp->size >= 0.0) - env->finfo.size = savp->size; -} - -static void -emit_htextspans(GVJ_t * job, int nspans, htextspan_t * spans, pointf p, - double halfwidth_x, textfont_t finfo, boxf b, int simple) -{ - int i, j; - double center_x, left_x, right_x; - textspan_t tl; - textfont_t tf; - pointf p_ = { 0.0, 0.0 }; - textspan_t *ti; - - center_x = p.x; - left_x = center_x - halfwidth_x; - right_x = center_x + halfwidth_x; - - /* Initial p is in center of text block; set initial baseline - * to top of text block. - */ - p_.y = p.y + (b.UR.y - b.LL.y) / 2.0; - - gvrender_begin_label(job, LABEL_HTML); - for (i = 0; i < nspans; i++) { - /* set p.x to leftmost point where the line of text begins */ - switch (spans[i].just) { - case 'l': - p.x = left_x; - break; - case 'r': - p.x = right_x - spans[i].size; - break; - default: - case 'n': - p.x = center_x - spans[i].size / 2.0; - break; - } - p_.y -= spans[i].lfsize; /* move to current base line */ - - ti = spans[i].items; - for (j = 0; j < spans[i].nitems; j++) { - if (ti->font && (ti->font->size > 0)) - tf.size = ti->font->size; - else - tf.size = finfo.size; - if (ti->font && ti->font->name) - tf.name = ti->font->name; - else - tf.name = finfo.name; - if (ti->font && ti->font->color) - tf.color = ti->font->color; - else - tf.color = finfo.color; - if (ti->font && ti->font->flags) - tf.flags = ti->font->flags; - else - tf.flags = 0; - - gvrender_set_pencolor(job, tf.color); - - tl.str = ti->str; - tl.font = &tf; - tl.yoffset_layout = ti->yoffset_layout; - if (simple) - tl.yoffset_centerline = ti->yoffset_centerline; - else - tl.yoffset_centerline = 1; - tl.font->postscript_alias = ti->font->postscript_alias; - tl.layout = ti->layout; - tl.size.x = ti->size.x; - tl.size.y = spans[i].lfsize; - tl.just = 'l'; - - p_.x = p.x; - gvrender_textspan(job, p_, &tl); - p.x += ti->size.x; - ti++; - } - } - - gvrender_end_label(job); -} - -static void emit_html_txt(GVJ_t * job, htmltxt_t * tp, htmlenv_t * env) -{ - double halfwidth_x; - pointf p; - - /* make sure that there is something to do */ - if (tp->nspans < 1) - return; - - halfwidth_x = ((double) (tp->box.UR.x - tp->box.LL.x)) / 2.0; - p.x = env->pos.x + ((double) (tp->box.UR.x + tp->box.LL.x)) / 2.0; - p.y = env->pos.y + ((double) (tp->box.UR.y + tp->box.LL.y)) / 2.0; - - emit_htextspans(job, tp->nspans, tp->spans, p, halfwidth_x, env->finfo, - tp->box, tp->simple); -} - -static void doSide(GVJ_t * job, pointf p, double wd, double ht) -{ - boxf BF; - - BF.LL = p; - BF.UR.x = p.x + wd; - BF.UR.y = p.y + ht; - gvrender_box(job, BF, 1); -} - -/* mkPts: - * Convert boxf into four corner points - * If border is > 1, inset the points by half the border. - * It is assumed AF is pointf[4], so the data is store there - * and AF is returned. - */ -static pointf *mkPts(pointf * AF, boxf b, int border) -{ - AF[0] = b.LL; - AF[2] = b.UR; - if (border > 1) { - double delta = ((double) border) / 2.0; - AF[0].x += delta; - AF[0].y += delta; - AF[2].x -= delta; - AF[2].y -= delta; - } - AF[1].x = AF[2].x; - AF[1].y = AF[0].y; - AF[3].x = AF[0].x; - AF[3].y = AF[2].y; - - return AF; -} - -/* doBorder: - * Draw a rectangular border for the box b. - * Handles dashed and dotted styles, rounded corners. - * Also handles thick lines. - * Assume dp->border > 0 - */ -static void doBorder(GVJ_t * job, htmldata_t * dp, boxf b) -{ - pointf AF[7]; - char *sptr[2]; - char *color = (dp->pencolor ? dp->pencolor : DEFAULT_COLOR); - unsigned short sides; - - gvrender_set_pencolor(job, color); - if ((dp->style & (DASHED | DOTTED))) { - sptr[0] = sptr[1] = NULL; - if (dp->style & DASHED) - sptr[0] = "dashed"; - else if (dp->style & DOTTED) - sptr[0] = "dotted"; - gvrender_set_style(job, sptr); - } else - gvrender_set_style(job, job->gvc->defaultlinestyle); - gvrender_set_penwidth(job, dp->border); - - if (dp->style & ROUNDED) - round_corners(job, mkPts(AF, b, dp->border), 4, ROUNDED, 0); - else if ((sides = (dp->flags & BORDER_MASK))) { - mkPts (AF+1, b, dp->border); /* AF[1-4] has LL=SW,SE,UR=NE,NW */ - switch (sides) { - case BORDER_BOTTOM : - gvrender_polyline(job, AF+1, 2); - break; - case BORDER_RIGHT : - gvrender_polyline(job, AF+2, 2); - break; - case BORDER_TOP : - gvrender_polyline(job, AF+3, 2); - break; - case BORDER_LEFT : - AF[0] = AF[4]; - gvrender_polyline(job, AF, 2); - break; - case BORDER_BOTTOM|BORDER_RIGHT : - gvrender_polyline(job, AF+1, 3); - break; - case BORDER_RIGHT|BORDER_TOP : - gvrender_polyline(job, AF+2, 3); - break; - case BORDER_TOP|BORDER_LEFT : - AF[5] = AF[1]; - gvrender_polyline(job, AF+3, 3); - break; - case BORDER_LEFT|BORDER_BOTTOM : - AF[0] = AF[4]; - gvrender_polyline(job, AF, 3); - break; - case BORDER_BOTTOM|BORDER_RIGHT|BORDER_TOP : - gvrender_polyline(job, AF+1, 4); - break; - case BORDER_RIGHT|BORDER_TOP|BORDER_LEFT : - AF[5] = AF[1]; - gvrender_polyline(job, AF+2, 4); - break; - case BORDER_TOP|BORDER_LEFT|BORDER_BOTTOM : - AF[5] = AF[1]; - AF[6] = AF[2]; - gvrender_polyline(job, AF+3, 4); - break; - case BORDER_LEFT|BORDER_BOTTOM|BORDER_RIGHT : - AF[0] = AF[4]; - gvrender_polyline(job, AF, 4); - break; - case BORDER_TOP|BORDER_BOTTOM : - gvrender_polyline(job, AF+1, 2); - gvrender_polyline(job, AF+3, 2); - break; - case BORDER_LEFT|BORDER_RIGHT : - AF[0] = AF[4]; - gvrender_polyline(job, AF, 2); - gvrender_polyline(job, AF+2, 2); - break; - } - } else { - if (dp->border > 1) { - double delta = ((double) dp->border) / 2.0; - b.LL.x += delta; - b.LL.y += delta; - b.UR.x -= delta; - b.UR.y -= delta; - } - gvrender_box(job, b, 0); - } -} - -/* setFill: - * Set up fill values from given color; make pen transparent. - * Return type of fill required. - */ -static int -setFill(GVJ_t * job, char *color, int angle, int style, char *clrs[2]) -{ - int filled; - float frac; - if (findStopColor(color, clrs, &frac)) { - gvrender_set_fillcolor(job, clrs[0]); - if (clrs[1]) - gvrender_set_gradient_vals(job, clrs[1], angle, frac); - else - gvrender_set_gradient_vals(job, DEFAULT_COLOR, angle, frac); - if (style & RADIAL) - filled = RGRADIENT; - else - filled = GRADIENT; - } else { - gvrender_set_fillcolor(job, color); - filled = FILL; - } - gvrender_set_pencolor(job, "transparent"); - return filled; -} - -/* initAnchor: - * Save current map values. - * Initialize fields in job->obj pertaining to anchors. - * In particular, this also sets the output rectangle. - * If there is something to do, - * start the anchor and returns 1. - * Otherwise, it returns 0. - * - * FIX: Should we provide a tooltip if none is set, as is done - * for nodes, edges, etc. ? - */ -static int -initAnchor(GVJ_t * job, htmlenv_t * env, htmldata_t * data, boxf b, - htmlmap_data_t * save) -{ - obj_state_t *obj = job->obj; - int changed; - char *id; - static int anchorId; - int internalId = 0; - agxbuf xb; - char intbuf[30]; /* hold 64-bit decimal integer */ - unsigned char buf[SMALLBUF]; - - save->url = obj->url; - save->tooltip = obj->tooltip; - save->target = obj->target; - save->id = obj->id; - save->explicit_tooltip = obj->explicit_tooltip; - id = data->id; - if (!id || !*id) { /* no external id, so use the internal one */ - agxbinit(&xb, SMALLBUF, buf); - if (!env->objid) { - env->objid = strdup(getObjId(job, obj->u.n, &xb)); - env->objid_set = 1; - } - agxbput(&xb, env->objid); - sprintf(intbuf, "_%d", anchorId++); - agxbput(&xb, intbuf); - id = agxbuse(&xb); - internalId = 1; - } - changed = - initMapData(job, NULL, data->href, data->title, data->target, id, - obj->u.g); - if (internalId) - agxbfree(&xb); - - if (changed) { - if (obj->url || obj->explicit_tooltip) { - emit_map_rect(job, b); - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - } - } - return changed; -} - -#define RESET(fld) \ - if(obj->fld != save->fld) {free(obj->fld); obj->fld = save->fld;} - -/* endAnchor: - * Pop context pushed by initAnchor. - * This is done by ending current anchor, restoring old values and - * freeing new. - * - * NB: We don't save or restore geometric map info. This is because - * this preservation of map context is only necessary for SVG-like - * systems where graphical items are wrapped in an anchor, and we map - * top-down. For ordinary map anchors, this is all done bottom-up, so - * the geometric map info at the higher level hasn't been emitted yet. - */ -static void endAnchor(GVJ_t * job, htmlmap_data_t * save) -{ - obj_state_t *obj = job->obj; - - if (obj->url || obj->explicit_tooltip) - gvrender_end_anchor(job); - RESET(url); - RESET(tooltip); - RESET(target); - RESET(id); - obj->explicit_tooltip = save->explicit_tooltip; -} - -/* forward declaration */ -static void emit_html_cell(GVJ_t * job, htmlcell_t * cp, htmlenv_t * env); - -/* emit_html_rules: - * place vertical and horizontal lines between adjacent cells and - * extend the lines to intersect the rounded table boundary - */ -static void -emit_html_rules(GVJ_t * job, htmlcell_t * cp, htmlenv_t * env, char *color, htmlcell_t* nextc) -{ - pointf rule_pt; - double rule_length; - unsigned char base; - boxf pts = cp->data.box; - pointf pos = env->pos; - - if (!color) - color = DEFAULT_COLOR; - gvrender_set_fillcolor(job, color); - gvrender_set_pencolor(job, color); - - pts = cp->data.box; - pts.LL.x += pos.x; - pts.UR.x += pos.x; - pts.LL.y += pos.y; - pts.UR.y += pos.y; - - //Determine vertical line coordinate and length - if ((cp->ruled & HTML_VRULE) && (cp->col + cp->cspan < cp->parent->cc)) { - if (cp->row == 0) { // first row - // extend to center of table border and add half cell spacing - base = cp->parent->data.border + cp->parent->data.space / 2; - rule_pt.y = pts.LL.y - cp->parent->data.space / 2; - } else if (cp->row + cp->rspan == cp->parent->rc) { // bottom row - // extend to center of table border and add half cell spacing - base = cp->parent->data.border + cp->parent->data.space / 2; - rule_pt.y = pts.LL.y - cp->parent->data.space / 2 - base; - } else { - base = 0; - rule_pt.y = pts.LL.y - cp->parent->data.space / 2; - } - rule_pt.x = pts.UR.x + cp->parent->data.space / 2; - rule_length = base + pts.UR.y - pts.LL.y + cp->parent->data.space; - doSide(job, rule_pt, 0, rule_length); - } - //Determine the horizontal coordinate and length - if ((cp->ruled & HTML_HRULE) && (cp->row + cp->rspan < cp->parent->rc)) { - if (cp->col == 0) { // first column - // extend to center of table border and add half cell spacing - base = cp->parent->data.border + cp->parent->data.space / 2; - rule_pt.x = pts.LL.x - base - cp->parent->data.space / 2; - if (cp->col + cp->cspan == cp->parent->cc) // also last column - base *= 2; - /* incomplete row of cells; extend line to end */ - else if (nextc && (nextc->row != cp->row)) { - base += (cp->parent->data.box.UR.x + pos.x) - (pts.UR.x + cp->parent->data.space / 2); - } - } else if (cp->col + cp->cspan == cp->parent->cc) { // last column - // extend to center of table border and add half cell spacing - base = cp->parent->data.border + cp->parent->data.space / 2; - rule_pt.x = pts.LL.x - cp->parent->data.space / 2; - } else { - base = 0; - rule_pt.x = pts.LL.x - cp->parent->data.space / 2; - /* incomplete row of cells; extend line to end */ - if (nextc && (nextc->row != cp->row)) { - base += (cp->parent->data.box.UR.x + pos.x) - (pts.UR.x + cp->parent->data.space / 2); - } - } - rule_pt.y = pts.LL.y - cp->parent->data.space / 2; - rule_length = base + pts.UR.x - pts.LL.x + cp->parent->data.space; - doSide(job, rule_pt, rule_length, 0); - } -} - -static void emit_html_tbl(GVJ_t * job, htmltbl_t * tbl, htmlenv_t * env) -{ - boxf pts = tbl->data.box; - pointf pos = env->pos; - htmlcell_t **cells = tbl->u.n.cells; - htmlcell_t *cp; - static textfont_t savef; - htmlmap_data_t saved; - int anchor; /* if true, we need to undo anchor settings. */ - int doAnchor = (tbl->data.href || tbl->data.target); - pointf AF[4]; - - if (tbl->font) - pushFontInfo(env, tbl->font, &savef); - - pts.LL.x += pos.x; - pts.UR.x += pos.x; - pts.LL.y += pos.y; - pts.UR.y += pos.y; - - if (doAnchor && !(job->flags & EMIT_CLUSTERS_LAST)) - anchor = initAnchor(job, env, &tbl->data, pts, &saved); - else - anchor = 0; - - if (!(tbl->data.style & INVISIBLE)) { - - /* Fill first */ - if (tbl->data.bgcolor) { - char *clrs[2]; - int filled = - setFill(job, tbl->data.bgcolor, tbl->data.gradientangle, - tbl->data.style, clrs); - if (tbl->data.style & ROUNDED) { - round_corners(job, mkPts(AF, pts, tbl->data.border), 4, - ROUNDED, filled); - } else - gvrender_box(job, pts, filled); - free(clrs[0]); - } - - while (*cells) { - emit_html_cell(job, *cells, env); - cells++; - } - - /* Draw table rules and border. - * Draw after cells so we can draw over any fill. - * At present, we set the penwidth to 1 for rules until we provide the calculations to take - * into account wider rules. - */ - cells = tbl->u.n.cells; - gvrender_set_penwidth(job, 1.0); - while ((cp = *cells++)) { - if (cp->ruled) - emit_html_rules(job, cp, env, tbl->data.pencolor, *cells); - } - - if (tbl->data.border) - doBorder(job, &tbl->data, pts); - - } - - if (anchor) - endAnchor(job, &saved); - - if (doAnchor && (job->flags & EMIT_CLUSTERS_LAST)) { - if (initAnchor(job, env, &tbl->data, pts, &saved)) - endAnchor(job, &saved); - } - - if (tbl->font) - popFontInfo(env, &savef); -} - -/* emit_html_img: - * The image will be centered in the given box. - * Scaling is determined by either the image's scale attribute, - * or the imagescale attribute of the graph object being drawn. - */ -static void emit_html_img(GVJ_t * job, htmlimg_t * cp, htmlenv_t * env) -{ - pointf A[4]; - boxf bb = cp->box; - char *scale; - - bb.LL.x += env->pos.x; - bb.LL.y += env->pos.y; - bb.UR.x += env->pos.x; - bb.UR.y += env->pos.y; - - A[0] = bb.UR; - A[2] = bb.LL; - A[1].x = A[2].x; - A[1].y = A[0].y; - A[3].x = A[0].x; - A[3].y = A[2].y; - - if (cp->scale) - scale = cp->scale; - else - scale = env->imgscale; - assert(cp->src); - assert(cp->src[0]); - gvrender_usershape(job, cp->src, A, 4, TRUE, scale); -} - -static void emit_html_cell(GVJ_t * job, htmlcell_t * cp, htmlenv_t * env) -{ - htmlmap_data_t saved; - boxf pts = cp->data.box; - pointf pos = env->pos; - int inAnchor, doAnchor = (cp->data.href || cp->data.target); - pointf AF[4]; - - pts.LL.x += pos.x; - pts.UR.x += pos.x; - pts.LL.y += pos.y; - pts.UR.y += pos.y; - - if (doAnchor && !(job->flags & EMIT_CLUSTERS_LAST)) - inAnchor = initAnchor(job, env, &cp->data, pts, &saved); - else - inAnchor = 0; - - if (!(cp->data.style & INVISIBLE)) { - if (cp->data.bgcolor) { - char *clrs[2]; - int filled = - setFill(job, cp->data.bgcolor, cp->data.gradientangle, - cp->data.style, clrs); - if (cp->data.style & ROUNDED) { - round_corners(job, mkPts(AF, pts, cp->data.border), 4, - ROUNDED, filled); - } else - gvrender_box(job, pts, filled); - free(clrs[0]); - } - - if (cp->data.border) - doBorder(job, &cp->data, pts); - - if (cp->child.kind == HTML_TBL) - emit_html_tbl(job, cp->child.u.tbl, env); - else if (cp->child.kind == HTML_IMAGE) - emit_html_img(job, cp->child.u.img, env); - else - emit_html_txt(job, cp->child.u.txt, env); - } - - if (inAnchor) - endAnchor(job, &saved); - - if (doAnchor && (job->flags & EMIT_CLUSTERS_LAST)) { - if (initAnchor(job, env, &cp->data, pts, &saved)) - endAnchor(job, &saved); - } -} - -/* allocObj: - * Push new obj on stack to be used in common by all - * html elements with anchors. - * This inherits the type, emit_state, and object of the - * parent, as well as the url, explicit, target and tooltip. - */ -static void allocObj(GVJ_t * job) -{ - obj_state_t *obj; - obj_state_t *parent; - - obj = push_obj_state(job); - parent = obj->parent; - obj->type = parent->type; - obj->emit_state = parent->emit_state; - switch (obj->type) { - case NODE_OBJTYPE: - obj->u.n = parent->u.n; - break; - case ROOTGRAPH_OBJTYPE: - obj->u.g = parent->u.g; - break; - case CLUSTER_OBJTYPE: - obj->u.sg = parent->u.sg; - break; - case EDGE_OBJTYPE: - obj->u.e = parent->u.e; - break; - } - obj->url = parent->url; - obj->tooltip = parent->tooltip; - obj->target = parent->target; - obj->explicit_tooltip = parent->explicit_tooltip; -} - -static void freeObj(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - obj->url = NULL; - obj->tooltip = NULL; - obj->target = NULL; - obj->id = NULL; - pop_obj_state(job); -} - -static double -heightOfLbl (htmllabel_t * lp) -{ - double sz = 0.0; - - switch (lp->kind) { - case HTML_TBL: - sz = lp->u.tbl->data.box.UR.y - lp->u.tbl->data.box.LL.y; - break; - case HTML_IMAGE: - sz = lp->u.img->box.UR.y - lp->u.img->box.LL.y; - break; - case HTML_TEXT: - sz = lp->u.txt->box.UR.y - lp->u.txt->box.LL.y; - break; - } - return sz; -} - -/* emit_html_label: - */ -void emit_html_label(GVJ_t * job, htmllabel_t * lp, textlabel_t * tp) -{ - htmlenv_t env; - pointf p; - - allocObj(job); - - p = tp->pos; - switch (tp->valign) { - case 't': - p.y = tp->pos.y + (tp->space.y - heightOfLbl(lp))/ 2.0 - 1; - break; - case 'b': - p.y = tp->pos.y - (tp->space.y - heightOfLbl(lp))/ 2.0 - 1; - break; - default: - /* no-op */ - break; - } - env.pos = p; - env.finfo.color = tp->fontcolor; - env.finfo.name = tp->fontname; - env.finfo.size = tp->fontsize; - env.imgscale = agget(job->obj->u.n, "imagescale"); - env.objid = job->obj->id; - env.objid_set = 0; - if ((env.imgscale == NULL) || (env.imgscale[0] == '\0')) - env.imgscale = "false"; - if (lp->kind == HTML_TBL) { - htmltbl_t *tbl = lp->u.tbl; - - /* set basic graphics context */ - /* Need to override line style set by node. */ - gvrender_set_style(job, job->gvc->defaultlinestyle); - if (tbl->data.pencolor) - gvrender_set_pencolor(job, tbl->data.pencolor); - else - gvrender_set_pencolor(job, DEFAULT_COLOR); - emit_html_tbl(job, tbl, &env); - } else { - emit_html_txt(job, lp->u.txt, &env); - } - if (env.objid_set) - free(env.objid); - freeObj(job); -} - -void free_html_data(htmldata_t * dp) -{ - free(dp->href); - free(dp->port); - free(dp->target); - free(dp->id); - free(dp->title); - free(dp->bgcolor); - free(dp->pencolor); -} - -void free_html_text(htmltxt_t * t) -{ - htextspan_t *tl; - textspan_t *ti; - int i, j; - - if (!t) - return; - - tl = t->spans; - for (i = 0; i < t->nspans; i++) { - ti = tl->items; - for (j = 0; j < tl->nitems; j++) { - if (ti->str) - free(ti->str); - if (ti->layout && ti->free_layout) - ti->free_layout(ti->layout); - ti++; - } - tl++; - } - if (t->spans) - free(t->spans); - free(t); -} - -void free_html_img(htmlimg_t * ip) -{ - free(ip->src); - free(ip); -} - -static void free_html_cell(htmlcell_t * cp) -{ - free_html_label(&cp->child, 0); - free_html_data(&cp->data); - free(cp); -} - -/* free_html_tbl: - * If tbl->n_rows is negative, table is in initial state from - * HTML parse, with data stored in u.p. Once run through processTbl, - * data is stored in u.n and tbl->n_rows is > 0. - */ -static void free_html_tbl(htmltbl_t * tbl) -{ - htmlcell_t **cells; - - if (tbl->rc == -1) { - dtclose(tbl->u.p.rows); - } else { - cells = tbl->u.n.cells; - - free(tbl->heights); - free(tbl->widths); - while (*cells) { - free_html_cell(*cells); - cells++; - } - free(tbl->u.n.cells); - } - free_html_data(&tbl->data); - free(tbl); -} - -void free_html_label(htmllabel_t * lp, int root) -{ - if (lp->kind == HTML_TBL) - free_html_tbl(lp->u.tbl); - else if (lp->kind == HTML_IMAGE) - free_html_img(lp->u.img); - else - free_html_text(lp->u.txt); - if (root) - free(lp); -} - -static htmldata_t *portToTbl(htmltbl_t *, char *); /* forward declaration */ - -static htmldata_t *portToCell(htmlcell_t * cp, char *id) -{ - htmldata_t *rv; - - if (cp->data.port && (strcasecmp(cp->data.port, id) == 0)) - rv = &cp->data; - else if (cp->child.kind == HTML_TBL) - rv = portToTbl(cp->child.u.tbl, id); - else - rv = NULL; - - return rv; -} - -/* portToTbl: - * See if tp or any of its child cells has the given port id. - * If true, return corresponding box. - */ -static htmldata_t *portToTbl(htmltbl_t * tp, char *id) -{ - htmldata_t *rv; - htmlcell_t **cells; - htmlcell_t *cp; - - if (tp->data.port && (strcasecmp(tp->data.port, id) == 0)) - rv = &tp->data; - else { - rv = NULL; - cells = tp->u.n.cells; - while ((cp = *cells++)) { - if ((rv = portToCell(cp, id))) - break; - } - } - - return rv; -} - -/* html_port: - * See if edge port corresponds to part of the html node. - * Assume pname != "". - * If successful, return pointer to port's box. - * Else return NULL. - */ -boxf *html_port(node_t * n, char *pname, int *sides) -{ - htmldata_t *tp; - htmllabel_t *lbl = ND_label(n)->u.html; - boxf *rv = NULL; - - if (lbl->kind == HTML_TEXT) - return NULL; - - tp = portToTbl(lbl->u.tbl, pname); - if (tp) { - rv = &tp->box; - *sides = tp->sides; - } - return rv; - -} - -/* html_path: - * Return a box in a table containing the given endpoint. - * If the top flow is text (no internal structure), return - * the box of the flow - * Else return the box of the subtable containing the point. - * Because of spacing, the point might not be in any subtable. - * In that case, return the top flow's box. - * Note that box[0] must contain the edge point. Additional boxes - * move out to the boundary. - * - * At present, unimplemented, since the label may be inside a - * non-box node and we need to figure out what this means. - */ -int html_path(node_t * n, port * p, int side, boxf * rv, int *k) -{ -#ifdef UNIMPL - point p; - tbl_t *info; - tbl_t *t; - boxf b; - int i; - - info = (tbl_t *) ND_shape_info(n); - assert(info->tbls); - info = info->tbls[0]; /* top-level flow */ - assert(IS_FLOW(info)); - - b = info->box; - if (info->tbl) { - info = info->tbl; - if (pt == 1) - p = ED_tail_port(e).p; - else - p = ED_head_port(e).p; - p = flip_pt(p, GD_rankdir(n->graph)); /* move p to node's coordinate system */ - for (i = 0; (t = info->tbls[i]) != 0; i++) - if (INSIDE(p, t->box)) { - b = t->box; - break; - } - } - - /* move box into layout coordinate system */ - if (GD_flip(n->graph)) - b = flip_trans_box(b, ND_coord_i(n)); - else - b = move_box(b, ND_coord_i(n)); - - *k = 1; - *rv = b; - if (pt == 1) - return BOTTOM; - else - return TOP; -#endif - return 0; -} - -static int size_html_txt(GVC_t *gvc, htmltxt_t * ftxt, htmlenv_t * env) -{ - double xsize = 0.0; /* width of text block */ - double ysize = 0.0; /* height of text block */ - double lsize; /* height of current line */ - double mxfsize = 0.0; /* max. font size for the current line */ - double curbline = 0.0; /* dist. of current base line from top */ - pointf sz; - int i, j; - double width; - textspan_t lp; - textfont_t tf = {NULL,NULL,NULL,0.0,0,0}; - double maxoffset, mxysize; - int simple = 1; /* one item per span, same font size/face, no flags */ - double prev_fsize = -1; - char* prev_fname = NULL; - - for (i = 0; i < ftxt->nspans; i++) { - if (ftxt->spans[i].nitems > 1) { - simple = 0; - break; - } - if (ftxt->spans[i].items[0].font) { - if (ftxt->spans[i].items[0].font->flags) { - simple = 0; - break; - } - if (ftxt->spans[i].items[0].font->size > 0) - tf.size = ftxt->spans[i].items[0].font->size; - else - tf.size = env->finfo.size; - if (ftxt->spans[i].items[0].font->name) - tf.name = ftxt->spans[i].items[0].font->name; - else - tf.name = env->finfo.name; - } - else { - tf.size = env->finfo.size; - tf.name = env->finfo.name; - } - if (prev_fsize == -1) - prev_fsize = tf.size; - else if (tf.size != prev_fsize) { - simple = 0; - break; - } - if (prev_fname == NULL) - prev_fname = tf.name; - else if (strcmp(tf.name,prev_fname)) { - simple = 0; - break; - } - } - ftxt->simple = simple; - - for (i = 0; i < ftxt->nspans; i++) { - width = 0; - mxysize = maxoffset = mxfsize = 0; - for (j = 0; j < ftxt->spans[i].nitems; j++) { - lp.str = - strdup_and_subst_obj(ftxt->spans[i].items[j].str, - env->obj); - if (ftxt->spans[i].items[j].font) { - if (ftxt->spans[i].items[j].font->flags) - tf.flags = ftxt->spans[i].items[j].font->flags; - else if (env->finfo.flags > 0) - tf.flags = env->finfo.flags; - else - tf.flags = 0; - if (ftxt->spans[i].items[j].font->size > 0) - tf.size = ftxt->spans[i].items[j].font->size; - else - tf.size = env->finfo.size; - if (ftxt->spans[i].items[j].font->name) - tf.name = ftxt->spans[i].items[j].font->name; - else - tf.name = env->finfo.name; - if (ftxt->spans[i].items[j].font->color) - tf.color = ftxt->spans[i].items[j].font->color; - else - tf.color = env->finfo.color; - } else { - tf.size = env->finfo.size; - tf.name = env->finfo.name; - tf.color = env->finfo.color; - tf.flags = env->finfo.flags; - } - lp.font = dtinsert(gvc->textfont_dt, &tf); - sz = textspan_size(gvc, &lp); - free(ftxt->spans[i].items[j].str); - ftxt->spans[i].items[j].str = lp.str; - ftxt->spans[i].items[j].size.x = sz.x; - ftxt->spans[i].items[j].yoffset_layout = lp.yoffset_layout; - ftxt->spans[i].items[j].yoffset_centerline = lp.yoffset_centerline; - ftxt->spans[i].items[j].font = lp.font; - ftxt->spans[i].items[j].layout = lp.layout; - ftxt->spans[i].items[j].free_layout = lp.free_layout; - width += sz.x; - mxfsize = MAX(tf.size, mxfsize); - mxysize = MAX(sz.y, mxysize); - maxoffset = MAX(lp.yoffset_centerline, maxoffset); - } - /* lsize = mxfsize * LINESPACING; */ - ftxt->spans[i].size = width; - /* ysize - curbline is the distance from the previous - * baseline to the bottom of the previous line. - * Then, in the current line, we set the baseline to - * be 5/6 of the max. font size. Thus, lfsize gives the - * distance from the previous baseline to the new one. - */ - /* ftxt->spans[i].lfsize = 5*mxfsize/6 + ysize - curbline; */ - if (simple) { - lsize = mxysize; - if (i == 0) - ftxt->spans[i].lfsize = mxfsize; - else - ftxt->spans[i].lfsize = mxysize; - } - else { - lsize = mxfsize; - if (i == 0) - ftxt->spans[i].lfsize = mxfsize - maxoffset; - else - ftxt->spans[i].lfsize = mxfsize + ysize - curbline - maxoffset; - } - curbline += ftxt->spans[i].lfsize; - xsize = MAX(width, xsize); - ysize += lsize; - } - ftxt->box.UR.x = xsize; - if (ftxt->nspans == 1) - ftxt->box.UR.y = mxysize; - else - ftxt->box.UR.y = ysize; - return 0; -} - -/* forward declarion for recursive usage */ -static int size_html_tbl(graph_t * g, htmltbl_t * tbl, htmlcell_t * parent, - htmlenv_t * env); - -/* size_html_img: - */ -static int size_html_img(htmlimg_t * img, htmlenv_t * env) -{ - box b; - int rv; - - b.LL.x = b.LL.y = 0; - b.UR = gvusershape_size(env->g, img->src); - if ((b.UR.x == -1) && (b.UR.y == -1)) { - rv = 1; - b.UR.x = b.UR.y = 0; - agerr(AGERR, "No or improper image file=\"%s\"\n", img->src); - } else { - rv = 0; - GD_has_images(env->g) = TRUE; - } - - B2BF(b, img->box); - return rv; -} - -/* size_html_cell: - */ -static int -size_html_cell(graph_t * g, htmlcell_t * cp, htmltbl_t * parent, - htmlenv_t * env) -{ - int rv; - pointf sz, child_sz; - int margin; - - cp->parent = parent; - if (!(cp->data.flags & PAD_SET)) { - if (parent->data.flags & PAD_SET) - cp->data.pad = parent->data.pad; - else - cp->data.pad = DEFAULT_CELLPADDING; - } - if (!(cp->data.flags & BORDER_SET)) { - if (parent->cb >= 0) - cp->data.border = parent->cb; - else if (parent->data.flags & BORDER_SET) - cp->data.border = parent->data.border; - else - cp->data.border = DEFAULT_BORDER; - } - - if (cp->child.kind == HTML_TBL) { - rv = size_html_tbl(g, cp->child.u.tbl, cp, env); - child_sz = cp->child.u.tbl->data.box.UR; - } else if (cp->child.kind == HTML_IMAGE) { - rv = size_html_img(cp->child.u.img, env); - child_sz = cp->child.u.img->box.UR; - } else { - rv = size_html_txt(GD_gvc(g), cp->child.u.txt, env); - child_sz = cp->child.u.txt->box.UR; - } - - margin = 2 * (cp->data.pad + cp->data.border); - sz.x = child_sz.x + margin; - sz.y = child_sz.y + margin; - - if (cp->data.flags & FIXED_FLAG) { - if (cp->data.width && cp->data.height) { - if (((cp->data.width < sz.x) || (cp->data.height < sz.y)) && (cp->child.kind != HTML_IMAGE)) { - agerr(AGWARN, "cell size too small for content\n"); - rv = 1; - } - sz.x = sz.y = 0; - - } else { - agerr(AGWARN, - "fixed cell size with unspecified width or height\n"); - rv = 1; - } - } - cp->data.box.UR.x = MAX(sz.x, cp->data.width); - cp->data.box.UR.y = MAX(sz.y, cp->data.height); - return rv; -} - -static int findCol(PointSet * ps, int row, int col, htmlcell_t * cellp) -{ - int notFound = 1; - int lastc; - int i, j, c; - int end = cellp->cspan - 1; - - while (notFound) { - lastc = col + end; - for (c = lastc; c >= col; c--) { - if (isInPS(ps, c, row)) - break; - } - if (c >= col) /* conflict : try column after */ - col = c + 1; - else - notFound = 0; - } - for (j = col; j < col + cellp->cspan; j++) { - for (i = row; i < row + cellp->rspan; i++) { - addPS(ps, j, i); - } - } - return col; -} - -/* processTbl: - * Convert parser representation of cells into final form. - * Find column and row positions of cells. - * Recursively size cells. - * Return 1 if problem sizing a cell. - */ -static int processTbl(graph_t * g, htmltbl_t * tbl, htmlenv_t * env) -{ - pitem *rp; - pitem *cp; - Dt_t *cdict; - int r, c; - htmlcell_t *cellp; - htmlcell_t **cells; - Dt_t *rows = tbl->u.p.rows; - int rv = 0; - int n_rows = 0; - int n_cols = 0; - PointSet *ps = newPS(); - Dt_t *is = openIntSet(); - - rp = (pitem *) dtflatten(rows); - size_t cnt = 0; - r = 0; - while (rp) { - cdict = rp->u.rp; - cp = (pitem *) dtflatten(cdict); - while (cp) { - cellp = cp->u.cp; - cnt++; - cp = (pitem *) dtlink(cdict, (Dtlink_t *) cp); - } - if (rp->ruled) { - addIntSet(is, r + 1); - } - rp = (pitem *) dtlink(rows, (Dtlink_t *) rp); - r++; - } - - cells = tbl->u.n.cells = N_NEW(cnt + 1, htmlcell_t *); - rp = (pitem *) dtflatten(rows); - r = 0; - while (rp) { - cdict = rp->u.rp; - cp = (pitem *) dtflatten(cdict); - c = 0; - while (cp) { - cellp = cp->u.cp; - *cells++ = cellp; - rv |= size_html_cell(g, cellp, tbl, env); - c = findCol(ps, r, c, cellp); - cellp->row = r; - cellp->col = c; - c += cellp->cspan; - n_cols = MAX(c, n_cols); - n_rows = MAX(r + cellp->rspan, n_rows); - if (inIntSet(is, r + cellp->rspan)) - cellp->ruled |= HTML_HRULE; - cp = (pitem *) dtlink(cdict, (Dtlink_t *) cp); - } - rp = (pitem *) dtlink(rows, (Dtlink_t *) rp); - r++; - } - tbl->rc = n_rows; - tbl->cc = n_cols; - dtclose(rows); - dtclose(is); - freePS(ps); - return rv; -} - -/* Split size x over n pieces with spacing s. - * We substract s*(n-1) from x, divide by n and - * take the ceiling. - */ -#define SPLIT(x,n,s) (((x) - ((s)-1)*((n)-1)) / (n)) - -/* sizeLinearArray: - * Determine sizes of rows and columns. The size of a column is the - * maximum width of any cell in it. Similarly for rows. - * A cell spanning columns contributes proportionately to each column - * it is in. - */ -void sizeLinearArray(htmltbl_t * tbl) -{ - htmlcell_t *cp; - htmlcell_t **cells; - int wd, ht, i, x, y; - - tbl->heights = N_NEW(tbl->rc + 1, int); - tbl->widths = N_NEW(tbl->cc + 1, int); - - for (cells = tbl->u.n.cells; *cells; cells++) { - cp = *cells; - if (cp->rspan == 1) - ht = cp->data.box.UR.y; - else { - ht = SPLIT(cp->data.box.UR.y, cp->rspan, tbl->data.space); - ht = MAX(ht, 1); - } - if (cp->cspan == 1) - wd = cp->data.box.UR.x; - else { - wd = SPLIT(cp->data.box.UR.x, cp->cspan, tbl->data.space); - wd = MAX(wd, 1); - } - for (i = cp->row; i < cp->row + cp->rspan; i++) { - y = tbl->heights[i]; - tbl->heights[i] = MAX(y, ht); - } - for (i = cp->col; i < cp->col + cp->cspan; i++) { - x = tbl->widths[i]; - tbl->widths[i] = MAX(x, wd); - } - } -} - -static char *nnames[] = { - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", - "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", -}; - -/* nToName: - * Convert int to its decimal string representation. - */ -char *nToName(int c) -{ - static char name[100]; - - if (c < sizeof(nnames) / sizeof(char *)) - return nnames[c]; - - sprintf(name, "%d", c); - return name; -} - -/* closeGraphs: - * Clean up graphs made for setting column and row widths. - */ -static void closeGraphs(graph_t * rowg, graph_t * colg) -{ - node_t *n; - for (n = GD_nlist(colg); n; n = ND_next(n)) { - free_list(ND_in(n)); - free_list(ND_out(n)); - } - - agclose(rowg); - agclose(colg); -} - -/* checkChain: - * For each pair of nodes in the node list, add an edge if none exists. - * Assumes node list has nodes ordered correctly. - */ -static void checkChain(graph_t * g) -{ - node_t *t; - node_t *h; - edge_t *e; - t = GD_nlist(g); - for (h = ND_next(t); h; h = ND_next(h)) { - if (!agfindedge(g, t, h)) { - e = agedge(g, t, h, NULL, 1); - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - ED_minlen(e) = 0; - elist_append(e, ND_out(t)); - elist_append(e, ND_in(h)); - } - t = h; - } -} - -/* checkEdge: - * Check for edge in g. If it exists, set its minlen to max of sz and - * current minlen. Else, create it and set minlen to sz. - */ -static void -checkEdge (graph_t* g, node_t* t, node_t* h, int sz) -{ - edge_t* e; - - e = agfindedge (g, t, h); - if (e) - ED_minlen(e) = MAX(ED_minlen(e), sz); - else { - e = agedge(g, t, h, NULL, 1); - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - ED_minlen(e) = sz; - elist_append(e, ND_out(t)); - elist_append(e, ND_in(h)); - } -} - -/* makeGraphs: - * Generate dags modeling the row and column constraints. - * If the table has cc columns, we create the graph - * 0 -> 1 -> 2 -> ... -> cc - * and if a cell starts in column c with span cspan, with - * width w, we add the edge c -> c+cspan [minlen = w]. - * Ditto for rows. - * - */ -void makeGraphs(htmltbl_t * tbl, graph_t * rowg, graph_t * colg) -{ - htmlcell_t *cp; - htmlcell_t **cells; - node_t *t; - node_t *lastn; - node_t *h; - int i; - - lastn = NULL; - for (i = 0; i <= tbl->cc; i++) { - t = agnode(colg, nToName(i), 1); - agbindrec(t, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - alloc_elist(tbl->rc, ND_in(t)); - alloc_elist(tbl->rc, ND_out(t)); - if (lastn) { - ND_next(lastn) = t; - lastn = t; - } else { - lastn = GD_nlist(colg) = t; - } - } - lastn = NULL; - for (i = 0; i <= tbl->rc; i++) { - t = agnode(rowg, nToName(i), 1); - agbindrec(t, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - alloc_elist(tbl->cc, ND_in(t)); - alloc_elist(tbl->cc, ND_out(t)); - if (lastn) { - ND_next(lastn) = t; - lastn = t; - } else { - lastn = GD_nlist(rowg) = t; - } - } - - for (cells = tbl->u.n.cells; *cells; cells++) { - cp = *cells; - t = agfindnode(colg, nToName(cp->col)); - h = agfindnode(colg, nToName(cp->col + cp->cspan)); - checkEdge (colg, t, h, cp->data.box.UR.x); - - t = agfindnode(rowg, nToName(cp->row)); - h = agfindnode(rowg, nToName(cp->row + cp->rspan)); - checkEdge (rowg, t, h, cp->data.box.UR.y); - } - - /* Make sure that 0 <= 1 <= 2 ...k. This implies graph connected. */ - checkChain(colg); - checkChain(rowg); -} - -/* setSizes: - * Use rankings to determine cell dimensions. The rank values - * give the coordinate, so to get the width/height, we have - * to subtract the previous value. - */ -void setSizes(htmltbl_t * tbl, graph_t * rowg, graph_t * colg) -{ - int i; - node_t *n; - int prev; - - prev = 0; - n = GD_nlist(rowg); - for (i = 0, n = ND_next(n); n; i++, n = ND_next(n)) { - tbl->heights[i] = ND_rank(n) - prev; - prev = ND_rank(n); - } - prev = 0; - n = GD_nlist(colg); - for (i = 0, n = ND_next(n); n; i++, n = ND_next(n)) { - tbl->widths[i] = ND_rank(n) - prev; - prev = ND_rank(n); - } - -} - -/* sizeArray: - * Set column and row sizes. Optimize for minimum width and - * height. Where there is slack, try to distribute evenly. - * We do this by encoding cells as edges with min length is - * a dag on a chain. We then run network simplex, using - * LR_balance. - */ -void sizeArray(htmltbl_t * tbl) -{ - graph_t *rowg; - graph_t *colg; -#ifdef _WIN32 - Agdesc_t dir = { 1, 1, 0, 1 }; -#else - Agdesc_t dir = Agstrictdirected; -#endif - - /* Do the 1D cases by hand */ - if ((tbl->rc == 1) || (tbl->cc == 1)) { - sizeLinearArray(tbl); - return; - } - - tbl->heights = N_NEW(tbl->rc + 1, int); - tbl->widths = N_NEW(tbl->cc + 1, int); - - rowg = agopen("rowg", dir, NIL(Agdisc_t *)); - colg = agopen("colg", dir, NIL(Agdisc_t *)); - /* Only need GD_nlist */ - agbindrec(rowg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data - agbindrec(colg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data - makeGraphs(tbl, rowg, colg); - rank(rowg, 2, INT_MAX); - rank(colg, 2, INT_MAX); - setSizes(tbl, rowg, colg); - closeGraphs(rowg, colg); -} - -static void pos_html_tbl(htmltbl_t *, boxf, int); /* forward declaration */ - -/* pos_html_img: - * Place image in cell - * storing allowed space handed by parent cell. - * How this space is used is handled in emit_html_img. - */ -static void pos_html_img(htmlimg_t * cp, boxf pos) -{ - cp->box = pos; -} - -/* pos_html_txt: - * Set default alignment. - */ -static void pos_html_txt(htmltxt_t * ftxt, char c) -{ - int i; - - for (i = 0; i < ftxt->nspans; i++) { - if (ftxt->spans[i].just == UNSET_ALIGN) /* unset */ - ftxt->spans[i].just = c; - } -} - -/* pos_html_cell: - */ -static void pos_html_cell(htmlcell_t * cp, boxf pos, int sides) -{ - double delx, dely; - pointf oldsz; - boxf cbox; - - if (!cp->data.pencolor && cp->parent->data.pencolor) - cp->data.pencolor = strdup(cp->parent->data.pencolor); - - /* If fixed, align cell */ - if (cp->data.flags & FIXED_FLAG) { - oldsz = cp->data.box.UR; - delx = (pos.UR.x - pos.LL.x) - oldsz.x; - if (delx > 0) { - switch (cp->data.flags & HALIGN_MASK) { - case HALIGN_LEFT: - pos.UR.x = pos.LL.x + oldsz.x; - break; - case HALIGN_RIGHT: - pos.UR.x += delx; - pos.LL.x += delx; - break; - default: - pos.LL.x += delx / 2; - pos.UR.x -= delx / 2; - break; - } - } - dely = (pos.UR.y - pos.LL.y) - oldsz.y; - if (dely > 0) { - switch (cp->data.flags & VALIGN_MASK) { - case VALIGN_BOTTOM: - pos.UR.y = pos.LL.y + oldsz.y; - break; - case VALIGN_TOP: - pos.UR.y += dely; - pos.LL.y += dely; - break; - default: - pos.LL.y += dely / 2; - pos.UR.y -= dely / 2; - break; - } - } - } - cp->data.box = pos; - cp->data.sides = sides; - - /* set up child's position */ - cbox.LL.x = pos.LL.x + cp->data.border + cp->data.pad; - cbox.LL.y = pos.LL.y + cp->data.border + cp->data.pad; - cbox.UR.x = pos.UR.x - cp->data.border - cp->data.pad; - cbox.UR.y = pos.UR.y - cp->data.border - cp->data.pad; - - if (cp->child.kind == HTML_TBL) { - pos_html_tbl(cp->child.u.tbl, cbox, sides); - } else if (cp->child.kind == HTML_IMAGE) { - /* Note that alignment trumps scaling */ - oldsz = cp->child.u.img->box.UR; - delx = (cbox.UR.x - cbox.LL.x) - oldsz.x; - if (delx > 0) { - switch (cp->data.flags & HALIGN_MASK) { - case HALIGN_LEFT: - cbox.UR.x -= delx; - break; - case HALIGN_RIGHT: - cbox.LL.x += delx; - break; - } - } - - dely = (cbox.UR.y - cbox.LL.y) - oldsz.y; - if (dely > 0) { - switch (cp->data.flags & VALIGN_MASK) { - case VALIGN_BOTTOM: - cbox.UR.y -= dely; - break; - case VALIGN_TOP: - cbox.LL.y += dely; - break; - } - } - pos_html_img(cp->child.u.img, cbox); - } else { - char dfltalign; - int af; - - oldsz = cp->child.u.txt->box.UR; - delx = (cbox.UR.x - cbox.LL.x) - oldsz.x; - /* If the cell is larger than the text block and alignment is - * done at textblock level, the text box is shrunk accordingly. - */ - if ((delx > 0) - && ((af = (cp->data.flags & HALIGN_MASK)) != HALIGN_TEXT)) { - switch (af) { - case HALIGN_LEFT: - cbox.UR.x -= delx; - break; - case HALIGN_RIGHT: - cbox.LL.x += delx; - break; - default: - cbox.LL.x += delx / 2; - cbox.UR.x -= delx / 2; - break; - } - } - - dely = (cbox.UR.y - cbox.LL.y) - oldsz.y; - if (dely > 0) { - switch (cp->data.flags & VALIGN_MASK) { - case VALIGN_BOTTOM: - cbox.UR.y -= dely; - break; - case VALIGN_TOP: - cbox.LL.y += dely; - break; - default: - cbox.LL.y += dely / 2; - cbox.UR.y -= dely / 2; - break; - } - } - cp->child.u.txt->box = cbox; - - /* Set default text alignment - */ - switch (cp->data.flags & BALIGN_MASK) { - case BALIGN_LEFT: - dfltalign = 'l'; - break; - case BALIGN_RIGHT: - dfltalign = 'r'; - break; - default: - dfltalign = 'n'; - break; - } - pos_html_txt(cp->child.u.txt, dfltalign); - } -} - -/* pos_html_tbl: - * Position table given its box, then calculate - * the position of each cell. In addition, set the sides - * attribute indicating which external sides of the node - * are accessible to the table. - */ -static void pos_html_tbl(htmltbl_t * tbl, boxf pos, int sides) -{ - int x, y, delx, dely, oldsz; - int i, extra, plus; - htmlcell_t **cells = tbl->u.n.cells; - htmlcell_t *cp; - boxf cbox; - - if (tbl->u.n.parent && tbl->u.n.parent->data.pencolor - && !tbl->data.pencolor) - tbl->data.pencolor = strdup(tbl->u.n.parent->data.pencolor); - - oldsz = tbl->data.box.UR.x; - delx = (pos.UR.x - pos.LL.x) - oldsz; - assert(delx >= 0); - oldsz = tbl->data.box.UR.y; - dely = (pos.UR.y - pos.LL.y) - oldsz; - assert(dely >= 0); - - /* If fixed, align box */ - if (tbl->data.flags & FIXED_FLAG) { - if (delx > 0) { - switch (tbl->data.flags & HALIGN_MASK) { - case HALIGN_LEFT: - pos.UR.x = pos.LL.x + oldsz; - break; - case HALIGN_RIGHT: - pos.UR.x += delx; - pos.LL.x += delx; - break; - default: - pos.LL.x += delx / 2; - pos.UR.x -= delx / 2; - break; - } - delx = 0; - } - if (dely > 0) { - switch (tbl->data.flags & VALIGN_MASK) { - case VALIGN_BOTTOM: - pos.UR.y = pos.LL.y + oldsz; - break; - case VALIGN_TOP: - pos.UR.y += dely; - pos.LL.y += dely; - break; - default: - pos.LL.y += dely / 2; - pos.UR.y -= dely / 2; - break; - } - dely = 0; - } - } - - /* change sizes to start positions and distribute extra space */ - x = pos.LL.x + tbl->data.border + tbl->data.space; - extra = delx / (tbl->cc); - plus = ROUND(delx - extra * (tbl->cc)); - for (i = 0; i <= tbl->cc; i++) { - delx = tbl->widths[i] + extra + (i < plus ? 1 : 0); - tbl->widths[i] = x; - x += delx + tbl->data.space; - } - y = pos.UR.y - tbl->data.border - tbl->data.space; - extra = dely / (tbl->rc); - plus = ROUND(dely - extra * (tbl->rc)); - for (i = 0; i <= tbl->rc; i++) { - dely = tbl->heights[i] + extra + (i < plus ? 1 : 0); - tbl->heights[i] = y; - y -= dely + tbl->data.space; - } - - while ((cp = *cells++)) { - int mask = 0; - if (sides) { - if (cp->col == 0) - mask |= LEFT; - if (cp->row == 0) - mask |= TOP; - if (cp->col + cp->cspan == tbl->cc) - mask |= RIGHT; - if (cp->row + cp->rspan == tbl->rc) - mask |= BOTTOM; - } - cbox.LL.x = tbl->widths[cp->col]; - cbox.UR.x = tbl->widths[cp->col + cp->cspan] - tbl->data.space; - cbox.UR.y = tbl->heights[cp->row]; - cbox.LL.y = tbl->heights[cp->row + cp->rspan] + tbl->data.space; - pos_html_cell(cp, cbox, sides & mask); - } - - tbl->data.sides = sides; - tbl->data.box = pos; -} - -/* size_html_tbl: - * Determine the size of a table by first determining the - * size of each cell. - */ -static int -size_html_tbl(graph_t * g, htmltbl_t * tbl, htmlcell_t * parent, - htmlenv_t * env) -{ - int i, wd, ht; - int rv = 0; - static textfont_t savef; - - if (tbl->font) - pushFontInfo(env, tbl->font, &savef); - tbl->u.n.parent = parent; - rv = processTbl(g, tbl, env); - - /* Set up border and spacing */ - if (!(tbl->data.flags & SPACE_SET)) { - tbl->data.space = DEFAULT_CELLSPACING; - } - if (!(tbl->data.flags & BORDER_SET)) { - tbl->data.border = DEFAULT_BORDER; - } - - sizeArray(tbl); - - wd = (tbl->cc + 1) * tbl->data.space + 2 * tbl->data.border; - ht = (tbl->rc + 1) * tbl->data.space + 2 * tbl->data.border; - for (i = 0; i < tbl->cc; i++) - wd += tbl->widths[i]; - for (i = 0; i < tbl->rc; i++) - ht += tbl->heights[i]; - - if (tbl->data.flags & FIXED_FLAG) { - if (tbl->data.width && tbl->data.height) { - if ((tbl->data.width < wd) || (tbl->data.height < ht)) { - agerr(AGWARN, "table size too small for content\n"); - rv = 1; - } - wd = ht = 0; - } else { - agerr(AGWARN, - "fixed table size with unspecified width or height\n"); - rv = 1; - } - } - tbl->data.box.UR.x = MAX(wd, tbl->data.width); - tbl->data.box.UR.y = MAX(ht, tbl->data.height); - - if (tbl->font) - popFontInfo(env, &savef); - return rv; -} - -static char *nameOf(void *obj, agxbuf * xb) -{ - Agedge_t *ep; - switch (agobjkind(obj)) { - case AGRAPH: - agxbput(xb, agnameof(((Agraph_t *) obj))); - break; - case AGNODE: - agxbput(xb, agnameof(((Agnode_t *) obj))); - break; - case AGEDGE: - ep = (Agedge_t *) obj; - agxbput(xb, agnameof(agtail(ep))); - agxbput(xb, agnameof(aghead(ep))); - if (agisdirected(agraphof(aghead(ep)))) - agxbput(xb, "->"); - else - agxbput(xb, "--"); - break; - } - return agxbuse(xb); -} - -#ifdef DEBUG -void indent(int i) -{ - while (i--) - fprintf(stderr, " "); -} - -void printBox(boxf b) -{ - fprintf(stderr, "(%f,%f)(%f,%f)", b.LL.x, b.LL.y, b.UR.x, b.UR.y); -} - -void printImage(htmlimg_t * ip, int ind) -{ - indent(ind); - fprintf(stderr, "img: %s\n", ip->src); -} - -void printTxt(htmltxt_t * txt, int ind) -{ - int i, j; - - indent(ind); - fprintf(stderr, "txt spans = %d \n", txt->nspans); - for (i = 0; i < txt->nspans; i++) { - indent(ind + 1); - fprintf(stderr, "[%d] %d items\n", i, txt->spans[i].nitems); - for (j = 0; j < txt->spans[i].nitems; j++) { - indent(ind + 2); - fprintf(stderr, "[%d] (%f,%f) \"%s\" ", - j, txt->spans[i].items[j].size.x, - txt->spans[i].items[j].size.y, - txt->spans[i].items[j].str); - if (txt->spans[i].items[j].font) - fprintf(stderr, "font %s color %s size %f\n", - txt->spans[i].items[j].font->name, - txt->spans[i].items[j].font->color, - txt->spans[i].items[j].font->size); - else - fprintf(stderr, "\n"); - } - } -} - -void printData(htmldata_t * dp) -{ - unsigned char flags = dp->flags; - char c; - - fprintf(stderr, "s%d(%d) ", dp->space, (flags & SPACE_SET ? 1 : 0)); - fprintf(stderr, "b%d(%d) ", dp->border, (flags & BORDER_SET ? 1 : 0)); - fprintf(stderr, "p%d(%d) ", dp->pad, (flags & PAD_SET ? 1 : 0)); - switch (flags & HALIGN_MASK) { - case HALIGN_RIGHT: - c = 'r'; - break; - case HALIGN_LEFT: - c = 'l'; - break; - default: - c = 'n'; - break; - } - fprintf(stderr, "%c", c); - switch (flags & VALIGN_MASK) { - case VALIGN_TOP: - c = 't'; - break; - case VALIGN_BOTTOM: - c = 'b'; - break; - default: - c = 'c'; - break; - } - fprintf(stderr, "%c ", c); - printBox(dp->box); -} - -void printTbl(htmltbl_t * tbl, int ind) -{ - htmlcell_t **cells = tbl->u.n.cells; - indent(ind); - fprintf(stderr, "tbl (%p) %d %d ", tbl, tbl->cc, tbl->rc); - printData(&tbl->data); - fputs("\n", stderr); - while (*cells) - printCell(*cells++, ind + 1); -} - -static void printCell(htmlcell_t * cp, int ind) -{ - indent(ind); - fprintf(stderr, "cell %d %d %d %d ", cp->cspan, cp->rspan, cp->col, - cp->row); - printData(&cp->data); - fputs("\n", stderr); - switch (cp->child.kind) { - case HTML_TBL: - printTbl(cp->child.u.tbl, ind + 1); - break; - case HTML_TEXT: - printTxt(cp->child.u.txt, ind + 1); - break; - case HTML_IMAGE: - printImage(cp->child.u.img, ind + 1); - break; - default: - break; - } -} - -void printLbl(htmllabel_t * lbl) -{ - if (lbl->kind == HTML_TBL) - printTbl(lbl->u.tbl, 0); - else - printTxt(lbl->u.txt, 0); -} -#endif /* DEBUG */ - -static char *getPenColor(void *obj) -{ - char *str; - - if (((str = agget(obj, "pencolor")) != 0) && str[0]) - return str; - else if (((str = agget(obj, "color")) != 0) && str[0]) - return str; - else - return NULL; -} - -/* make_html_label: - * Return non-zero if problem parsing HTML. In this case, use object name. - */ -int make_html_label(void *obj, textlabel_t * lp) -{ - int rv; - double wd2, ht2; - boxf box; - graph_t *g; - htmllabel_t *lbl; - htmlenv_t env; - char *s; - - env.obj = obj; - switch (agobjkind(obj)) { - case AGRAPH: - env.g = ((Agraph_t *) obj)->root; - break; - case AGNODE: - env.g = agraphof(((Agnode_t *) obj)); - break; - case AGEDGE: - env.g = agraphof(aghead(((Agedge_t *) obj))); - break; - } - g = env.g->root; - - env.finfo.size = lp->fontsize; - env.finfo.name = lp->fontname; - env.finfo.color = lp->fontcolor; - env.finfo.flags = 0; - lbl = parseHTML(lp->text, &rv, &env); - if (!lbl) { - /* Parse of label failed; revert to simple text label */ - agxbuf xb; - unsigned char buf[SMALLBUF]; - agxbinit(&xb, SMALLBUF, buf); - lp->html = FALSE; - lp->text = strdup(nameOf(obj, &xb)); - switch (lp->charset) { - case CHAR_LATIN1: - s = latin1ToUTF8(lp->text); - break; - default: /* UTF8 */ - s = htmlEntityUTF8(lp->text, env.g); - break; - } - free(lp->text); - lp->text = s; - make_simple_label(GD_gvc(g), lp); - agxbfree(&xb); - return rv; - } - - if (lbl->kind == HTML_TBL) { - if (!lbl->u.tbl->data.pencolor && getPenColor(obj)) - lbl->u.tbl->data.pencolor = strdup(getPenColor(obj)); - rv |= size_html_tbl(g, lbl->u.tbl, NULL, &env); - wd2 = (lbl->u.tbl->data.box.UR.x) / 2; - ht2 = (lbl->u.tbl->data.box.UR.y) / 2; - box = boxfof(-wd2, -ht2, wd2, ht2); - pos_html_tbl(lbl->u.tbl, box, BOTTOM | RIGHT | TOP | LEFT); - lp->dimen.x = box.UR.x - box.LL.x; - lp->dimen.y = box.UR.y - box.LL.y; - } else { - rv |= size_html_txt(GD_gvc(g), lbl->u.txt, &env); - wd2 = lbl->u.txt->box.UR.x / 2; - ht2 = lbl->u.txt->box.UR.y / 2; - box = boxfof(-wd2, -ht2, wd2, ht2); - lbl->u.txt->box = box; - lp->dimen.x = box.UR.x - box.LL.x; - lp->dimen.y = box.UR.y - box.LL.y; - } - - lp->u.html = lbl; - - /* If the label is a table, replace label text because this may - * be used for the title and alt fields in image maps. - */ - if (lbl->kind == HTML_TBL) { - free(lp->text); - lp->text = strdup(""); - } - - return rv; -} diff --git a/internal/ccall/common/htmltable.h b/internal/ccall/common/htmltable.h deleted file mode 100644 index dec26ea..0000000 --- a/internal/ccall/common/htmltable.h +++ /dev/null @@ -1,183 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef TABLE_H -#define TABLE_H - -#define FIXED_FLAG 1 -#define HALIGN_RIGHT (1 << 1) -#define HALIGN_LEFT (1 << 2) -#define HALIGN_MASK (HALIGN_RIGHT | HALIGN_LEFT) -#define HALIGN_TEXT HALIGN_MASK -#define VALIGN_TOP (1 << 3) -#define VALIGN_BOTTOM (1 << 4) -#define VALIGN_MASK (VALIGN_TOP | VALIGN_BOTTOM) -#define BORDER_SET (1 << 5) -#define PAD_SET (1 << 6) -#define SPACE_SET (1 << 7) -#define BALIGN_RIGHT (1 << 8) -#define BALIGN_LEFT (1 << 9) -#define BALIGN_MASK (BALIGN_RIGHT | BALIGN_LEFT) -#define BORDER_LEFT (1 << 10) -#define BORDER_TOP (1 << 11) -#define BORDER_RIGHT (1 << 12) -#define BORDER_BOTTOM (1 << 13) -#define BORDER_MASK (BORDER_LEFT|BORDER_TOP|BORDER_RIGHT|BORDER_BOTTOM) - -#define UNSET_ALIGN 0 - - /* spans of text within a cell - * NOTE: As required, the str field in span is utf-8. - * This translation is done when libexpat scans the input. - */ - - /* line of textspan_t's */ - typedef struct { - textspan_t *items; - short nitems; - char just; - double size; /* width of span */ - double lfsize; /* offset from previous baseline to current one */ - } htextspan_t; - - typedef struct { - htextspan_t *spans; - short nspans; - char simple; - boxf box; - } htmltxt_t; - - typedef struct { - boxf box; - char *src; - char *scale; - } htmlimg_t; - - typedef struct { - char *href; /* pointer to an external resource */ - char *port; - char *target; - char *title; - char *id; - char *bgcolor; - char *pencolor; - int gradientangle; - signed char space; - unsigned char border; - unsigned char pad; - unsigned char sides; /* set of sides exposed to field */ - unsigned short flags; - unsigned short width; - unsigned short height; - unsigned short style; - boxf box; /* its geometric placement in points */ - } htmldata_t; - -#define HTML_UNSET 0 -#define HTML_TBL 1 -#define HTML_TEXT 2 -#define HTML_IMAGE 3 - -#define HTML_VRULE 1 -#define HTML_HRULE 2 - - typedef struct htmlcell_t htmlcell_t; - typedef struct htmltbl_t htmltbl_t; - - struct htmltbl_t { - htmldata_t data; - union { - struct { - htmlcell_t *parent; /* enclosing cell */ - htmlcell_t **cells; /* cells */ - } n; - struct { - htmltbl_t *prev; /* stack */ - Dt_t *rows; /* cells */ - } p; - } u; - signed char cb; /* cell border */ - int *heights; /* heights of the rows */ - int *widths; /* widths of the columns */ - int rc; /* number of rows */ - int cc; /* number of columns */ - textfont_t *font; /* font info */ - unsigned char flags; - }; - - struct htmllabel_t { - union { - htmltbl_t *tbl; - htmltxt_t *txt; - htmlimg_t *img; - } u; - char kind; - }; - - struct htmlcell_t { - htmldata_t data; - unsigned short cspan; - unsigned short rspan; - unsigned short col; - unsigned short row; - htmllabel_t child; - htmltbl_t *parent; - unsigned char ruled; - }; - -/* During parsing, table contents are stored as rows of cells. - * A row is a list of cells - * Rows is a list of rows. - * pitems are used for both lists. - */ - typedef struct { - Dtlink_t link; - union { - Dt_t *rp; - htmlcell_t *cp; - } u; - unsigned char ruled; - } pitem; - - typedef struct { - pointf pos; - textfont_t finfo; - void *obj; - graph_t *g; - char *imgscale; - char *objid; - boolean objid_set; - } htmlenv_t; - - extern htmllabel_t *parseHTML(char *, int *, htmlenv_t *); - - extern int make_html_label(void *obj, textlabel_t * lp); - extern void emit_html_label(GVJ_t * job, htmllabel_t * lp, textlabel_t *); - - extern void free_html_label(htmllabel_t *, int); - extern void free_html_data(htmldata_t *); - extern void free_html_text(htmltxt_t *); - - extern boxf *html_port(node_t * n, char *pname, int* sides); - extern int html_path(node_t * n, port* p, int side, boxf * rv, int *k); - extern int html_inside(node_t * n, pointf p, edge_t * e); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/common/input.c b/internal/ccall/common/input.c deleted file mode 100644 index 98f1936..0000000 --- a/internal/ccall/common/input.c +++ /dev/null @@ -1,956 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include "render.h" -#include "htmltable.h" -#include "gvc.h" -#include "xdot.h" -#include "agxbuf.h" - -static char *usageFmt = - "Usage: %s [-Vv?] [-(GNE)name=val] [-(KTlso)] \n"; - -static char *genericItems = "\n\ - -V - Print version and exit\n\ - -v - Enable verbose mode \n\ - -Gname=val - Set graph attribute 'name' to 'val'\n\ - -Nname=val - Set node attribute 'name' to 'val'\n\ - -Ename=val - Set edge attribute 'name' to 'val'\n\ - -Tv - Set output format to 'v'\n\ - -Kv - Set layout engine to 'v' (overrides default based on command name)\n\ - -lv - Use external library 'v'\n\ - -ofile - Write output to 'file'\n\ - -O - Automatically generate an output filename based on the input filename with a .'format' appended. (Causes all -ofile options to be ignored.) \n\ - -P - Internally generate a graph of the current plugins. \n\ - -q[l] - Set level of message suppression (=1)\n\ - -s[v] - Scale input by 'v' (=72)\n\ - -y - Invert y coordinate in output\n"; - -static char *neatoFlags = - "(additional options for neato) [-x] [-n]\n"; -static char *neatoItems = "\n\ - -n[v] - No layout mode 'v' (=1)\n\ - -x - Reduce graph\n"; - -static char *fdpFlags = - "(additional options for fdp) [-L(gO)] [-L(nUCT)]\n"; -static char *fdpItems = "\n\ - -Lg - Don't use grid\n\ - -LO - Use old attractive force\n\ - -Ln - Set number of iterations to i\n\ - -LU - Set unscaled factor to i\n\ - -LC - Set overlap expansion factor to v\n\ - -LT[*] - Set temperature (temperature factor) to v\n"; - -static char *memtestFlags = "(additional options for memtest) [-m]\n"; -static char *memtestItems = "\n\ - -m - Memory test (Observe no growth with top. Kill when done.)\n\ - -m[v] - Memory test - v iterations.\n"; - -static char *configFlags = "(additional options for config) [-cv]\n"; -static char *configItems = "\n\ - -c - Configure plugins (Writes $prefix/lib/graphviz/config \n\ - with available plugin information. Needs write privilege.)\n\ - -? - Print usage and exit\n"; - -/* dotneato_usage: - * Print usage information. If GvExitOnUsage is set, exit with - * given exval, else return exval+1. - */ -int dotneato_usage(int exval) -{ - FILE *outs; - - if (exval > 0) - outs = stderr; - else - outs = stdout; - - fprintf(outs, usageFmt, CmdName); - fputs(neatoFlags, outs); - fputs(fdpFlags, outs); - fputs(memtestFlags, outs); - fputs(configFlags, outs); - fputs(genericItems, outs); - fputs(neatoItems, outs); - fputs(fdpItems, outs); - fputs(memtestItems, outs); - fputs(configItems, outs); - - if (GvExitOnUsage && (exval >= 0)) - exit(exval); - return (exval+1); - -} - -/* getFlagOpt: - * Look for flag parameter. idx is index of current argument. - * We assume argv[*idx] has the form "-x..." If there are characters - * after the x, return - * these, else if there are more arguments, return the next one, - * else return NULL. - */ -static char *getFlagOpt(int argc, char **argv, int *idx) -{ - int i = *idx; - char *arg = argv[i]; - - if (arg[2]) - return arg + 2; - if (i < argc - 1) { - i++; - arg = argv[i]; - if (*arg && (*arg != '-')) { - *idx = i; - return arg; - } - } - return 0; -} - -/* dotneato_basename: - * Partial implementation of real basename. - * Skip over any trailing slashes or backslashes; then - * find next (back)slash moving left; return string to the right. - * If no next slash is found, return the whole string. - */ -static char* dotneato_basename (char* path) -{ - char* ret; - char* s = path; - if (*s == '\0') return path; /* empty string */ -#ifdef _WIN32 - /* On Windows, executables, by convention, end in ".exe". Thus, - * this may be part of the path name and must be removed for - * matching to work. - */ - { - char* dotp = strrchr (s, '.'); - if (dotp && !strcasecmp(dotp+1,"exe")) *dotp = '\0'; - } -#endif - while (*s) s++; - s--; - /* skip over trailing slashes, nulling out as we go */ - while ((s > path) && ((*s == '/') || (*s == '\\'))) - *s-- = '\0'; - if (s == path) ret = path; - else { - while ((s > path) && ((*s != '/') && (*s != '\\'))) s--; - if ((*s == '/') || (*s == '\\')) ret = s+1; - else ret = path; - } -#ifdef _WIN32 - /* On Windows, names are case-insensitive, so make name lower-case - */ - { - char c; - for (s = ret; (c = *s); s++) - *s = tolower(c); - } -#endif - return ret; -} - -static void use_library(GVC_t *gvc, const char *name) -{ - static int cnt = 0; - if (name) { - Lib = ALLOC(cnt + 2, Lib, const char *); - Lib[cnt++] = name; - Lib[cnt] = NULL; - } - gvc->common.lib = Lib; -} - -static void global_def(agxbuf* xb, char *dcl, int kind, - attrsym_t * ((*dclfun) (Agraph_t *, int kind, char *, char *)) ) -{ - char *p; - char *rhs = "true"; - - attrsym_t *sym; - if ((p = strchr(dcl, '='))) { - agxbput_n (xb, dcl, p-dcl); - rhs = p+1; - } - else - agxbput (xb, dcl); - sym = dclfun(NULL, kind, agxbuse (xb), rhs); - sym->fixed = 1; -} - -static int gvg_init(GVC_t *gvc, graph_t *g, char *fn, int gidx) -{ - GVG_t *gvg; - - gvg = zmalloc(sizeof(GVG_t)); - if (!gvc->gvgs) - gvc->gvgs = gvg; - else - gvc->gvg->next = gvg; - gvc->gvg = gvg; - gvg->gvc = gvc; - gvg->g = g; - gvg->input_filename = fn; - gvg->graph_index = gidx; - return 0; -} - -static graph_t *P_graph; - -graph_t *gvPluginsGraph(GVC_t *gvc) -{ - gvg_init(gvc, P_graph, "", 0); - return P_graph; -} - -/* dotneato_args_initialize" - * Scan argv[] for allowed flags. - * Return 0 on success; v+1 if calling function should call exit(v). - * If -c is set, config file is created and we exit. - */ -int dotneato_args_initialize(GVC_t * gvc, int argc, char **argv) -{ - char c, *rest, *layout; - const char *val; - int i, v, nfiles; - unsigned char buf[SMALLBUF]; - agxbuf xb; - int Kflag = 0; - - /* establish if we are running in a CGI environment */ - HTTPServerEnVar = getenv("SERVER_NAME"); - - /* establish Gvfilepath, if any */ - Gvfilepath = getenv("GV_FILE_PATH"); - - gvc->common.cmdname = dotneato_basename(argv[0]); - if (gvc->common.verbose) { - fprintf(stderr, "%s - %s version %s (%s)\n", - gvc->common.cmdname, gvc->common.info[0], - gvc->common.info[1], gvc->common.info[2]); - } - - /* configure for available plugins */ - /* needs to know if "dot -c" is set (gvc->common.config) */ - /* must happen before trying to select any plugins */ - if (gvc->common.config) { - gvconfig(gvc, gvc->common.config); - exit (0); - } - - /* feed the globals */ - Verbose = gvc->common.verbose; - CmdName = gvc->common.cmdname; - - nfiles = 0; - for (i = 1; i < argc; i++) - if (argv[i] && argv[i][0] != '-') - nfiles++; - gvc->input_filenames = N_NEW(nfiles + 1, char *); - nfiles = 0; - agxbinit(&xb, SMALLBUF, buf); - for (i = 1; i < argc; i++) { - if (argv[i] && argv[i][0] == '-') { - rest = &(argv[i][2]); - switch (c = argv[i][1]) { - case 'G': - if (*rest) - global_def(&xb, rest, AGRAPH, agattr); - else { - fprintf(stderr, "Missing argument for -G flag\n"); - return (dotneato_usage(1)); - } - break; - case 'N': - if (*rest) - global_def(&xb, rest, AGNODE,agattr); - else { - fprintf(stderr, "Missing argument for -N flag\n"); - return (dotneato_usage(1)); - } - break; - case 'E': - if (*rest) - global_def(&xb, rest, AGEDGE,agattr); - else { - fprintf(stderr, "Missing argument for -E flag\n"); - return (dotneato_usage(1)); - } - break; - case 'T': - val = getFlagOpt(argc, argv, &i); - if (!val) { - fprintf(stderr, "Missing argument for -T flag\n"); - return (dotneato_usage(1)); - } - v = gvjobs_output_langname(gvc, val); - if (!v) { - fprintf(stderr, "Format: \"%s\" not recognized. Use one of:%s\n", - val, gvplugin_list(gvc, API_device, val)); - if (GvExitOnUsage) exit(1); - return(2); - } - break; - case 'K': - val = getFlagOpt(argc, argv, &i); - if (!val) { - fprintf(stderr, "Missing argument for -K flag\n"); - return (dotneato_usage(1)); - } - v = gvlayout_select(gvc, val); - if (v == NO_SUPPORT) { - fprintf(stderr, "There is no layout engine support for \"%s\"\n", val); - if (streq(val, "dot")) { - fprintf(stderr, "Perhaps \"dot -c\" needs to be run (with installer's privileges) to register the plugins?\n"); - } - else { - fprintf(stderr, "Use one of:%s\n", - gvplugin_list(gvc, API_layout, val)); - } - if (GvExitOnUsage) exit(1); - return(2); - } - Kflag = 1; - break; - case 'P': - P_graph = gvplugin_graph(gvc); - break; - case 'V': - fprintf(stderr, "%s - %s version %s (%s)\n", - gvc->common.cmdname, gvc->common.info[0], - gvc->common.info[1], gvc->common.info[2]); - if (GvExitOnUsage) exit(0); - return (1); - break; - case 'l': - val = getFlagOpt(argc, argv, &i); - if (!val) { - fprintf(stderr, "Missing argument for -l flag\n"); - return (dotneato_usage(1)); - } - use_library(gvc, val); - break; - case 'o': - val = getFlagOpt(argc, argv, &i); - if (!val) { - fprintf(stderr, "Missing argument for -o flag\n"); - return (dotneato_usage(1)); - } - if (! gvc->common.auto_outfile_names) - gvjobs_output_filename(gvc, val); - break; - case 'q': - if (*rest) { - v = atoi(rest); - if (v <= 0) { - fprintf(stderr, - "Invalid parameter \"%s\" for -q flag - ignored\n", - rest); - } else if (v == 1) - agseterr(AGERR); - else - agseterr(AGMAX); - } else - agseterr(AGERR); - break; - case 's': - if (*rest) { - PSinputscale = atof(rest); - if (PSinputscale < 0) { - fprintf(stderr, - "Invalid parameter \"%s\" for -s flag\n", - rest); - return (dotneato_usage(1)); - } - else if (PSinputscale == 0) - PSinputscale = POINTS_PER_INCH; - } else - PSinputscale = POINTS_PER_INCH; - break; - case 'x': - Reduce = TRUE; - break; - case 'y': - Y_invert = TRUE; - break; - case '?': - return (dotneato_usage(0)); - break; - default: - agerr(AGERR, "%s: option -%c unrecognized\n\n", gvc->common.cmdname, - c); - return (dotneato_usage(1)); - } - } else if (argv[i]) - gvc->input_filenames[nfiles++] = argv[i]; - } - agxbfree (&xb); - - /* if no -K, use cmd name to set layout type */ - if (!Kflag) { - layout = gvc->common.cmdname; - if (streq(layout, "dot_static") - || streq(layout, "dot_builtins") - || streq(layout, "lt-dot") - || streq(layout, "lt-dot_builtins") - || streq(layout, "") /* when run as a process from Gvedit on Windows */ - ) - layout = "dot"; - i = gvlayout_select(gvc, layout); - if (i == NO_SUPPORT) { - fprintf(stderr, "There is no layout engine support for \"%s\"\n", layout); - if (streq(layout, "dot")) - fprintf(stderr, "Perhaps \"dot -c\" needs to be run (with installer's privileges) to register the plugins?\n"); - else - fprintf(stderr, "Use one of:%s\n", gvplugin_list(gvc, API_layout, "")); - - if (GvExitOnUsage) exit(1); - return(2); - } - } - - /* if no -Txxx, then set default format */ - if (!gvc->jobs || !gvc->jobs->output_langname) { - v = gvjobs_output_langname(gvc, "dot"); - if (!v) { -// assert(v); /* "dot" should always be available as an output format */ - fprintf(stderr, - "Unable to find even the default \"-Tdot\" renderer. Has the config\nfile been generated by running \"dot -c\" with installer's priviledges?\n"); - return(2); - } - } - - /* set persistent attributes here (if not already set from command line options) */ - if (!agattr(NULL, AGNODE, "label", 0)) - agattr(NULL, AGNODE, "label", NODENAME_ESC); - return 0; -} - -/* getdoubles2ptf: - * converts a graph attribute in inches to a pointf in points. - * If only one number is given, it is used for both x and y. - * Returns true if the attribute ends in '!'. - */ -static boolean getdoubles2ptf(graph_t * g, char *name, pointf * result) -{ - char *p; - int i; - double xf, yf; - char c = '\0'; - boolean rv = FALSE; - - if ((p = agget(g, name))) { - i = sscanf(p, "%lf,%lf%c", &xf, &yf, &c); - if ((i > 1) && (xf > 0) && (yf > 0)) { - result->x = POINTS(xf); - result->y = POINTS(yf); - if (c == '!') - rv = TRUE; - } - else { - c = '\0'; - i = sscanf(p, "%lf%c", &xf, &c); - if ((i > 0) && (xf > 0)) { - result->y = result->x = POINTS(xf); - if (c == '!') rv = TRUE; - } - } - } - return rv; -} - -void getdouble(graph_t * g, char *name, double *result) -{ - char *p; - double f; - - if ((p = agget(g, name))) { - if (sscanf(p, "%lf", &f) >= 1) - *result = f; - } -} - -#ifdef EXPERIMENTAL_MYFGETS -/* - * Potential input filter - e.g. for iconv - */ - -/* - * myfgets - same api as fgets - * - * gets n chars at a time - * - * returns pointer to user buffer, - * or returns NULL on eof or error. - */ -static char *myfgets(char * ubuf, int n, FILE * fp) -{ - static char *buf; - static int bufsz, pos, len; - int cnt; - - if (!n) { /* a call with n==0 (from aglexinit) resets */ - ubuf[0] = '\0'; - pos = len = 0; - return NULL; - } - - if (!len) { - if (n > bufsz) { - bufsz = n; - buf = realloc(buf, bufsz); - } - if (!(fgets(buf, bufsz, fp))) { - ubuf[0] = '\0'; - return NULL; - } - len = strlen(buf); - pos = 0; - } - - cnt = n - 1; - if (len < cnt) - cnt = len; - - memcpy(ubuf, buf + pos, cnt); - pos += cnt; - len -= cnt; - ubuf[cnt] = '\0'; - - return ubuf; -} -#endif - -graph_t *gvNextInputGraph(GVC_t *gvc) -{ - graph_t *g = NULL; - static char *fn; - static FILE *fp; - static FILE *oldfp; - static int fidx, gidx; - - while (!g) { - if (!fp) { - if (!(fn = gvc->input_filenames[0])) { - if (fidx++ == 0) - fp = stdin; - } - else { - while ((fn = gvc->input_filenames[fidx++]) && !(fp = fopen(fn, "r"))) { - agerr(AGERR, "%s: can't open %s\n", gvc->common.cmdname, fn); - graphviz_errors++; - } - } - } - if (fp == NULL) - break; - if (oldfp != fp) { - agsetfile(fn ? fn : ""); - oldfp = fp; - } -#ifdef EXPERIMENTAL_MYFGETS - g = agread_usergets(fp, myfgets); -#else - g = agread(fp,NIL(Agdisc_t*)); -#endif - if (g) { - gvg_init(gvc, g, fn, gidx++); - break; - } - if (fp != stdin) - fclose (fp); - oldfp = fp = NULL; - gidx = 0; - } - return g; -} - -/* findCharset: - * Check if the charset attribute is defined for the graph and, if - * so, return the corresponding internal value. If undefined, return - * CHAR_UTF8 - */ -static int findCharset (graph_t * g) -{ - int enc; - char* p; - - p = late_nnstring(g,agfindgraphattr(g,"charset"),"utf-8"); - if (!strcasecmp(p,"latin-1") - || !strcasecmp(p,"latin1") - || !strcasecmp(p,"l1") - || !strcasecmp(p,"ISO-8859-1") - || !strcasecmp(p,"ISO_8859-1") - || !strcasecmp(p,"ISO8859-1") - || !strcasecmp(p,"ISO-IR-100")) - enc = CHAR_LATIN1; - else if (!strcasecmp(p,"big-5") - || !strcasecmp(p,"big5")) - enc = CHAR_BIG5; - else if (!strcasecmp(p,"utf-8") - || !strcasecmp(p,"utf8")) - enc = CHAR_UTF8; - else { - agerr(AGWARN, "Unsupported charset \"%s\" - assuming utf-8\n", p); - enc = CHAR_UTF8; - } - return enc; -} - -/* setRatio: - * Checks "ratio" attribute, if any, and sets enum type. - */ -static void setRatio(graph_t * g) -{ - char *p, c; - double ratio; - - if ((p = agget(g, "ratio")) && ((c = p[0]))) { - switch (c) { - case 'a': - if (streq(p, "auto")) - GD_drawing(g)->ratio_kind = R_AUTO; - break; - case 'c': - if (streq(p, "compress")) - GD_drawing(g)->ratio_kind = R_COMPRESS; - break; - case 'e': - if (streq(p, "expand")) - GD_drawing(g)->ratio_kind = R_EXPAND; - break; - case 'f': - if (streq(p, "fill")) - GD_drawing(g)->ratio_kind = R_FILL; - break; - default: - ratio = atof(p); - if (ratio > 0.0) { - GD_drawing(g)->ratio_kind = R_VALUE; - GD_drawing(g)->ratio = ratio; - } - break; - } - } -} - -/* - cgraph requires - -*/ -void graph_init(graph_t * g, boolean use_rankdir) -{ - char *p; - double xf; - static char *rankname[] = { "local", "global", "none", NULL }; - static int rankcode[] = { LOCAL, GLOBAL, NOCLUST, LOCAL }; - static char *fontnamenames[] = {"gd","ps","svg", NULL}; - static int fontnamecodes[] = {NATIVEFONTS,PSFONTS,SVGFONTS,-1}; - int rankdir; - GD_drawing(g) = NEW(layout_t); - - /* set this up fairly early in case any string sizes are needed */ - if ((p = agget(g, "fontpath")) || (p = getenv("DOTFONTPATH"))) { - /* overide GDFONTPATH in local environment if dot - * wants its own */ -#ifdef HAVE_SETENV - setenv("GDFONTPATH", p, 1); -#else - static char *buf = 0; - - buf = grealloc(buf, strlen("GDFONTPATH=") + strlen(p) + 1); - strcpy(buf, "GDFONTPATH="); - strcat(buf, p); - putenv(buf); -#endif - } - - GD_charset(g) = findCharset (g); - - if (!HTTPServerEnVar) { - Gvimagepath = agget (g, "imagepath"); - if (!Gvimagepath) - Gvimagepath = Gvfilepath; - } - - GD_drawing(g)->quantum = - late_double(g, agfindgraphattr(g, "quantum"), 0.0, 0.0); - - /* setting rankdir=LR is only defined in dot, - * but having it set causes shape code and others to use it. - * The result is confused output, so we turn it off unless requested. - * This effective rankdir is stored in the bottom 2 bits of g->u.rankdir. - * Sometimes, the code really needs the graph's rankdir, e.g., neato -n - * with record shapes, so we store the real rankdir in the next 2 bits. - */ - rankdir = RANKDIR_TB; - if ((p = agget(g, "rankdir"))) { - if (streq(p, "LR")) - rankdir = RANKDIR_LR; - else if (streq(p, "BT")) - rankdir = RANKDIR_BT; - else if (streq(p, "RL")) - rankdir = RANKDIR_RL; - } - if (use_rankdir) - SET_RANKDIR (g, (rankdir << 2) | rankdir); - else - SET_RANKDIR (g, (rankdir << 2)); - - xf = late_double(g, agfindgraphattr(g, "nodesep"), - DEFAULT_NODESEP, MIN_NODESEP); - GD_nodesep(g) = POINTS(xf); - - p = late_string(g, agfindgraphattr(g, "ranksep"), NULL); - if (p) { - if (sscanf(p, "%lf", &xf) == 0) - xf = DEFAULT_RANKSEP; - else { - if (xf < MIN_RANKSEP) - xf = MIN_RANKSEP; - } - if (strstr(p, "equally")) - GD_exact_ranksep(g) = TRUE; - } else - xf = DEFAULT_RANKSEP; - GD_ranksep(g) = POINTS(xf); - - GD_showboxes(g) = late_int(g, agfindgraphattr(g, "showboxes"), 0, 0); - p = late_string(g, agfindgraphattr(g, "fontnames"), NULL); - GD_fontnames(g) = maptoken(p, fontnamenames, fontnamecodes); - - setRatio(g); - GD_drawing(g)->filled = - getdoubles2ptf(g, "size", &(GD_drawing(g)->size)); - getdoubles2ptf(g, "page", &(GD_drawing(g)->page)); - - GD_drawing(g)->centered = mapbool(agget(g, "center")); - - if ((p = agget(g, "rotate"))) - GD_drawing(g)->landscape = (atoi(p) == 90); - else if ((p = agget(g, "orientation"))) - GD_drawing(g)->landscape = ((p[0] == 'l') || (p[0] == 'L')); - else if ((p = agget(g, "landscape"))) - GD_drawing(g)->landscape = mapbool(p); - - p = agget(g, "clusterrank"); - CL_type = maptoken(p, rankname, rankcode); - p = agget(g, "concentrate"); - Concentrate = mapbool(p); - State = GVBEGIN; - EdgeLabelsDone = 0; - - GD_drawing(g)->dpi = 0.0; - if (((p = agget(g, "dpi")) && p[0]) - || ((p = agget(g, "resolution")) && p[0])) - GD_drawing(g)->dpi = atof(p); - - do_graph_label(g); - - Initial_dist = MYHUGE; - - G_ordering = agfindgraphattr(g, "ordering"); - G_gradientangle = agfindgraphattr(g,"gradientangle"); - G_margin = agfindgraphattr(g, "margin"); - - /* initialize nodes */ - N_height = agfindnodeattr(g, "height"); - N_width = agfindnodeattr(g, "width"); - N_shape = agfindnodeattr(g, "shape"); - N_color = agfindnodeattr(g, "color"); - N_fillcolor = agfindnodeattr(g, "fillcolor"); - N_style = agfindnodeattr(g, "style"); - N_fontsize = agfindnodeattr(g, "fontsize"); - N_fontname = agfindnodeattr(g, "fontname"); - N_fontcolor = agfindnodeattr(g, "fontcolor"); - N_label = agfindnodeattr(g, "label"); - if (!N_label) - N_label = agattr(g, AGNODE, "label", NODENAME_ESC); - N_xlabel = agfindnodeattr(g, "xlabel"); - N_showboxes = agfindnodeattr(g, "showboxes"); - N_penwidth = agfindnodeattr(g, "penwidth"); - N_ordering = agfindnodeattr(g, "ordering"); - N_margin = agfindnodeattr(g, "margin"); - /* attribs for polygon shapes */ - N_sides = agfindnodeattr(g, "sides"); - N_peripheries = agfindnodeattr(g, "peripheries"); - N_skew = agfindnodeattr(g, "skew"); - N_orientation = agfindnodeattr(g, "orientation"); - N_distortion = agfindnodeattr(g, "distortion"); - N_fixed = agfindnodeattr(g, "fixedsize"); - N_imagescale = agfindnodeattr(g, "imagescale"); - N_nojustify = agfindnodeattr(g, "nojustify"); - N_layer = agfindnodeattr(g, "layer"); - N_group = agfindnodeattr(g, "group"); - N_comment = agfindnodeattr(g, "comment"); - N_vertices = agfindnodeattr(g, "vertices"); - N_z = agfindnodeattr(g, "z"); - N_gradientangle = agfindnodeattr(g,"gradientangle"); - - /* initialize edges */ - E_weight = agfindedgeattr(g, "weight"); - E_color = agfindedgeattr(g, "color"); - E_fillcolor = agfindedgeattr(g, "fillcolor"); - E_fontsize = agfindedgeattr(g, "fontsize"); - E_fontname = agfindedgeattr(g, "fontname"); - E_fontcolor = agfindedgeattr(g, "fontcolor"); - E_label = agfindedgeattr(g, "label"); - E_xlabel = agfindedgeattr(g, "xlabel"); - E_label_float = agfindedgeattr(g, "labelfloat"); - /* vladimir */ - E_dir = agfindedgeattr(g, "dir"); - E_arrowhead = agfindedgeattr(g, "arrowhead"); - E_arrowtail = agfindedgeattr(g, "arrowtail"); - E_headlabel = agfindedgeattr(g, "headlabel"); - E_taillabel = agfindedgeattr(g, "taillabel"); - E_labelfontsize = agfindedgeattr(g, "labelfontsize"); - E_labelfontname = agfindedgeattr(g, "labelfontname"); - E_labelfontcolor = agfindedgeattr(g, "labelfontcolor"); - E_labeldistance = agfindedgeattr(g, "labeldistance"); - E_labelangle = agfindedgeattr(g, "labelangle"); - /* end vladimir */ - E_minlen = agfindedgeattr(g, "minlen"); - E_showboxes = agfindedgeattr(g, "showboxes"); - E_style = agfindedgeattr(g, "style"); - E_decorate = agfindedgeattr(g, "decorate"); - E_arrowsz = agfindedgeattr(g, "arrowsize"); - E_constr = agfindedgeattr(g, "constraint"); - E_layer = agfindedgeattr(g, "layer"); - E_comment = agfindedgeattr(g, "comment"); - E_tailclip = agfindedgeattr(g, "tailclip"); - E_headclip = agfindedgeattr(g, "headclip"); - E_penwidth = agfindedgeattr(g, "penwidth"); - - /* background */ - GD_drawing(g)->xdots = init_xdot (g); - - /* initialize id, if any */ - - if ((p = agget(g, "id")) && *p) - GD_drawing(g)->id = strdup_and_subst_obj(p, g); -} - -void graph_cleanup(graph_t *g) -{ - if (GD_drawing(g) && GD_drawing(g)->xdots) - freeXDot ((xdot*)GD_drawing(g)->xdots); - if (GD_drawing(g) && GD_drawing(g)->id) - free (GD_drawing(g)->id); - free(GD_drawing(g)); - GD_drawing(g) = NULL; - free_label(GD_label(g)); - //FIX HERE , STILL SHALLOW - //memset(&(g->u), 0, sizeof(Agraphinfo_t)); - agclean(g, AGRAPH,"Agraphinfo_t"); -} - -/* charsetToStr: - * Given an internal charset value, return a canonical string - * representation. - */ -char* -charsetToStr (int c) -{ - char* s; - - switch (c) { - case CHAR_UTF8 : - s = "UTF-8"; - break; - case CHAR_LATIN1 : - s = "ISO-8859-1"; - break; - case CHAR_BIG5 : - s = "BIG-5"; - break; - default : - agerr(AGERR, "Unsupported charset value %d\n", c); - s = "UTF-8"; - break; - } - return s; -} - -/* do_graph_label: - * Set characteristics of graph label if it exists. - * - */ -void do_graph_label(graph_t * sg) -{ - char *str, *pos, *just; - int pos_ix; - - /* it would be nice to allow multiple graph labels in the future */ - if ((str = agget(sg, "label")) && (*str != '\0')) { - char pos_flag; - pointf dimen; - - GD_has_labels(sg->root) |= GRAPH_LABEL; - - GD_label(sg) = make_label((void*)sg, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - late_double(sg, agfindgraphattr(sg, "fontsize"), - DEFAULT_FONTSIZE, MIN_FONTSIZE), - late_nnstring(sg, agfindgraphattr(sg, "fontname"), - DEFAULT_FONTNAME), - late_nnstring(sg, agfindgraphattr(sg, "fontcolor"), - DEFAULT_COLOR)); - - /* set label position */ - pos = agget(sg, "labelloc"); - if (sg != agroot(sg)) { - if (pos && (pos[0] == 'b')) - pos_flag = LABEL_AT_BOTTOM; - else - pos_flag = LABEL_AT_TOP; - } else { - if (pos && (pos[0] == 't')) - pos_flag = LABEL_AT_TOP; - else - pos_flag = LABEL_AT_BOTTOM; - } - just = agget(sg, "labeljust"); - if (just) { - if (just[0] == 'l') - pos_flag |= LABEL_AT_LEFT; - else if (just[0] == 'r') - pos_flag |= LABEL_AT_RIGHT; - } - GD_label_pos(sg) = pos_flag; - - if (sg == agroot(sg)) - return; - - /* Set border information for cluster labels to allow space - */ - dimen = GD_label(sg)->dimen; - PAD(dimen); - if (!GD_flip(agroot(sg))) { - if (GD_label_pos(sg) & LABEL_AT_TOP) - pos_ix = TOP_IX; - else - pos_ix = BOTTOM_IX; - GD_border(sg)[pos_ix] = dimen; - } else { - /* when rotated, the labels will be restored to TOP or BOTTOM */ - if (GD_label_pos(sg) & LABEL_AT_TOP) - pos_ix = RIGHT_IX; - else - pos_ix = LEFT_IX; - GD_border(sg)[pos_ix].x = dimen.y; - GD_border(sg)[pos_ix].y = dimen.x; - } - } -} diff --git a/internal/ccall/common/intset.c b/internal/ccall/common/intset.c deleted file mode 100644 index edd3e3f..0000000 --- a/internal/ccall/common/intset.c +++ /dev/null @@ -1,74 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -static void* -mkIntItem(Dt_t* d,intitem* obj,Dtdisc_t* disc) -{ - intitem* np = NEW(intitem); - np->id = obj->id; - return (void*)np; -} - -static void -freeIntItem(Dt_t* d,intitem* obj,Dtdisc_t* disc) -{ - free (obj); -} - -static int -cmpid(Dt_t* d, int* key1, int* key2, Dtdisc_t* disc) -{ - if (*key1 > *key2) return 1; - else if (*key1 < *key2) return -1; - else return 0; -} - -static Dtdisc_t intSetDisc = { - offsetof(intitem,id), - sizeof(int), - offsetof(intitem,link), - (Dtmake_f)mkIntItem, - (Dtfree_f)freeIntItem, - (Dtcompar_f)cmpid, - 0, - 0, - 0 -}; - -Dt_t* -openIntSet (void) -{ - return dtopen(&intSetDisc,Dtoset); -} - -void -addIntSet (Dt_t* is, int v) -{ - intitem obj; - - obj.id = v; - dtinsert(is, &obj); -} - -int -inIntSet (Dt_t* is, int v) -{ - return (dtmatch (is, &v) != 0); -} - diff --git a/internal/ccall/common/intset.h b/internal/ccall/common/intset.h deleted file mode 100644 index 433f897..0000000 --- a/internal/ccall/common/intset.h +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef INTSET_H -#define INTSET_H - -#include - -typedef struct { - int id; - Dtlink_t link; -} intitem; - -extern Dt_t* openIntSet (void); -extern void addIntSet (Dt_t*, int); -extern int inIntSet (Dt_t*, int); -#endif diff --git a/internal/ccall/common/labels.c b/internal/ccall/common/labels.c deleted file mode 100644 index 4714347..0000000 --- a/internal/ccall/common/labels.c +++ /dev/null @@ -1,643 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" -#include "htmltable.h" -#include - -static char *strdup_and_subst_obj0 (char *str, void *obj, int escBackslash); - -static void storeline(GVC_t *gvc, textlabel_t *lp, char *line, char terminator) -{ - pointf size; - textspan_t *span; - static textfont_t tf; - int oldsz = lp->u.txt.nspans + 1; - - lp->u.txt.span = ZALLOC(oldsz + 1, lp->u.txt.span, textspan_t, oldsz); - span = &(lp->u.txt.span[lp->u.txt.nspans]); - span->str = line; - span->just = terminator; - if (line && line[0]) { - tf.name = lp->fontname; - tf.size = lp->fontsize; - span->font = dtinsert(gvc->textfont_dt, &tf); - size = textspan_size(gvc, span); - } - else { - size.x = 0.0; - span->size.y = size.y = (int)(lp->fontsize * LINESPACING); - } - - lp->u.txt.nspans++; - /* width = max line width */ - lp->dimen.x = MAX(lp->dimen.x, size.x); - /* accumulate height */ - lp->dimen.y += size.y; -} - -/* compiles into a label */ -void make_simple_label(GVC_t * gvc, textlabel_t * lp) -{ - char c, *p, *line, *lineptr, *str = lp->text; - unsigned char byte = 0x00; - - lp->dimen.x = lp->dimen.y = 0.0; - if (*str == '\0') - return; - - line = lineptr = NULL; - p = str; - line = lineptr = N_GNEW(strlen(p) + 1, char); - *line = 0; - while ((c = *p++)) { - byte = (unsigned char) c; - /* wingraphviz allows a combination of ascii and big-5. The latter - * is a two-byte encoding, with the first byte in 0xA1-0xFE, and - * the second in 0x40-0x7e or 0xa1-0xfe. We assume that the input - * is well-formed, but check that we don't go past the ending '\0'. - */ - if ((lp->charset == CHAR_BIG5) && 0xA1 <= byte && byte <= 0xFE) { - *lineptr++ = c; - c = *p++; - *lineptr++ = c; - if (!c) /* NB. Protect against unexpected string end here */ - break; - } else { - if (c == '\\') { - switch (*p) { - case 'n': - case 'l': - case 'r': - *lineptr++ = '\0'; - storeline(gvc, lp, line, *p); - line = lineptr; - break; - default: - *lineptr++ = *p; - } - if (*p) - p++; - /* tcldot can enter real linend characters */ - } else if (c == '\n') { - *lineptr++ = '\0'; - storeline(gvc, lp, line, 'n'); - line = lineptr; - } else { - *lineptr++ = c; - } - } - } - - if (line != lineptr) { - *lineptr++ = '\0'; - storeline(gvc, lp, line, 'n'); - } - - lp->space = lp->dimen; -} - -/* make_label: - * Assume str is freshly allocated for this instance, so it - * can be freed in free_label. - */ -textlabel_t *make_label(void *obj, char *str, int kind, double fontsize, char *fontname, char *fontcolor) -{ - textlabel_t *rv = NEW(textlabel_t); - graph_t *g = NULL, *sg = NULL; - node_t *n = NULL; - edge_t *e = NULL; - char *s; - - switch (agobjkind(obj)) { - case AGRAPH: - sg = (graph_t*)obj; - g = sg->root; - break; - case AGNODE: - n = (node_t*)obj; - g = agroot(agraphof(n)); - break; - case AGEDGE: - e = (edge_t*)obj; - g = agroot(agraphof(aghead(e))); - break; - } - rv->fontname = fontname; - rv->fontcolor = fontcolor; - rv->fontsize = fontsize; - rv->charset = GD_charset(g); - if (kind & LT_RECD) { - rv->text = strdup(str); - if (kind & LT_HTML) { - rv->html = TRUE; - } - } - else if (kind == LT_HTML) { - rv->text = strdup(str); - rv->html = TRUE; - if (make_html_label(obj, rv)) { - switch (agobjkind(obj)) { - case AGRAPH: - agerr(AGPREV, "in label of graph %s\n",agnameof(sg)); - break; - case AGNODE: - agerr(AGPREV, "in label of node %s\n", agnameof(n)); - break; - case AGEDGE: - agerr(AGPREV, "in label of edge %s %s %s\n", - agnameof(agtail(e)), agisdirected(g)?"->":"--", agnameof(aghead(e))); - break; - } - } - } - else { - assert(kind == LT_NONE); - /* This call just processes the graph object based escape sequences. The formatting escape - * sequences (\n, \l, \r) are processed in make_simple_label. That call also replaces \\ with \. - */ - rv->text = strdup_and_subst_obj0(str, obj, 0); - switch (rv->charset) { - case CHAR_LATIN1: - s = latin1ToUTF8(rv->text); - break; - default: /* UTF8 */ - s = htmlEntityUTF8(rv->text, g); - break; - } - free(rv->text); - rv->text = s; - make_simple_label(GD_gvc(g), rv); - } - return rv; -} - -/* free_textspan: - * Free resources related to textspan_t. - * tl is an array of cnt textspan_t's. - * It is also assumed that the text stored in the str field - * is all stored in one large buffer shared by all of the textspan_t, - * so only the first one needs to free its tlp->str. - */ -void free_textspan(textspan_t * tl, int cnt) -{ - int i; - textspan_t* tlp = tl; - - if (!tl) return; - for (i = 0; i < cnt; i++) { - if ((i == 0) && tlp->str) - free(tlp->str); - if (tlp->layout && tlp->free_layout) - tlp->free_layout (tlp->layout); - tlp++; - } - free(tl); -} - -void free_label(textlabel_t * p) -{ - if (p) { - free(p->text); - if (p->html) { - if (p->u.html) free_html_label(p->u.html, 1); - } else { - free_textspan(p->u.txt.span, p->u.txt.nspans); - } - free(p); - } -} - -void emit_label(GVJ_t * job, emit_state_t emit_state, textlabel_t * lp) -{ - obj_state_t *obj = job->obj; - int i; - pointf p; - emit_state_t old_emit_state; - - old_emit_state = obj->emit_state; - obj->emit_state = emit_state; - - if (lp->html) { - emit_html_label(job, lp->u.html, lp); - obj->emit_state = old_emit_state; - return; - } - - /* make sure that there is something to do */ - if (lp->u.txt.nspans < 1) - return; - - gvrender_begin_label(job, LABEL_PLAIN); - gvrender_set_pencolor(job, lp->fontcolor); - - /* position for first span */ - switch (lp->valign) { - case 't': - p.y = lp->pos.y + lp->space.y / 2.0 - lp->fontsize; - break; - case 'b': - p.y = lp->pos.y - lp->space.y / 2.0 + lp->dimen.y - lp->fontsize; - break; - case 'c': - default: - p.y = lp->pos.y + lp->dimen.y / 2.0 - lp->fontsize; - break; - } - if (obj->labeledgealigned) - p.y -= lp->pos.y; - for (i = 0; i < lp->u.txt.nspans; i++) { - switch (lp->u.txt.span[i].just) { - case 'l': - p.x = lp->pos.x - lp->space.x / 2.0; - break; - case 'r': - p.x = lp->pos.x + lp->space.x / 2.0; - break; - default: - case 'n': - p.x = lp->pos.x; - break; - } - gvrender_textspan(job, p, &(lp->u.txt.span[i])); - - /* UL position for next span */ - p.y -= lp->u.txt.span[i].size.y; - } - - gvrender_end_label(job); - obj->emit_state = old_emit_state; -} - -/* strdup_and_subst_obj0: - * Replace various escape sequences with the name of the associated - * graph object. A double backslash \\ can be used to avoid a replacement. - * If escBackslash is true, convert \\ to \; else leave alone. All other dyads - * of the form \. are passed through unchanged. - */ -static char *strdup_and_subst_obj0 (char *str, void *obj, int escBackslash) -{ - char c, *s, *p, *t, *newstr; - char *tp_str = "", *hp_str = ""; - char *g_str = "\\G", *n_str = "\\N", *e_str = "\\E", - *h_str = "\\H", *t_str = "\\T", *l_str = "\\L"; - size_t g_len = 2, n_len = 2, e_len = 2, - h_len = 2, t_len = 2, l_len = 2, - tp_len = 0, hp_len = 0; - size_t newlen = 0; - int isEdge = 0; - textlabel_t *tl; - port pt; - - /* prepare substitution strings */ - switch (agobjkind(obj)) { - case AGRAPH: - g_str = agnameof((graph_t *)obj); - g_len = strlen(g_str); - tl = GD_label((graph_t *)obj); - if (tl) { - l_str = tl->text; - if (str) l_len = strlen(l_str); - } - break; - case AGNODE: - g_str = agnameof(agraphof((node_t *)obj)); - g_len = strlen(g_str); - n_str = agnameof((node_t *)obj); - n_len = strlen(n_str); - tl = ND_label((node_t *)obj); - if (tl) { - l_str = tl->text; - if (str) l_len = strlen(l_str); - } - break; - case AGEDGE: - isEdge = 1; - g_str = agnameof(agroot(agraphof(agtail(((edge_t *)obj))))); - g_len = strlen(g_str); - t_str = agnameof(agtail(((edge_t *)obj))); - t_len = strlen(t_str); - pt = ED_tail_port((edge_t *)obj); - if ((tp_str = pt.name)) - tp_len = strlen(tp_str); - h_str = agnameof(aghead(((edge_t *)obj))); - h_len = strlen(h_str); - pt = ED_head_port((edge_t *)obj); - if ((hp_str = pt.name)) - hp_len = strlen(hp_str); - h_len = strlen(h_str); - tl = ED_label((edge_t *)obj); - if (tl) { - l_str = tl->text; - if (str) l_len = strlen(l_str); - } - if (agisdirected(agroot(agraphof(agtail(((edge_t*)obj)))))) - e_str = "->"; - else - e_str = "--"; - e_len = t_len + (tp_len?tp_len+1:0) + 2 + h_len + (hp_len?hp_len+1:0); - break; - } - - /* two passes over str. - * - * first pass prepares substitution strings and computes - * total length for newstring required from malloc. - */ - for (s = str; (c = *s++);) { - if (c == '\\') { - switch (c = *s++) { - case 'G': - newlen += g_len; - break; - case 'N': - newlen += n_len; - break; - case 'E': - newlen += e_len; - break; - case 'H': - newlen += h_len; - break; - case 'T': - newlen += t_len; - break; - case 'L': - newlen += l_len; - break; - case '\\': - if (escBackslash) { - newlen += 1; - break; - } - /* Fall through */ - default: /* leave other escape sequences unmodified, e.g. \n \l \r */ - newlen += 2; - } - } else { - newlen++; - } - } - /* allocate new string */ - newstr = gmalloc(newlen + 1); - - /* second pass over str assembles new string */ - for (s = str, p = newstr; (c = *s++);) { - if (c == '\\') { - switch (c = *s++) { - case 'G': - for (t = g_str; (*p = *t++); p++); - break; - case 'N': - for (t = n_str; (*p = *t++); p++); - break; - case 'E': - if (isEdge) { - for (t = t_str; (*p = *t++); p++); - if (tp_len) { - *p++ = ':'; - for (t = tp_str; (*p = *t++); p++); - } - for (t = e_str; (*p = *t++); p++); - for (t = h_str; (*p = *t++); p++); - if (hp_len) { - *p++ = ':'; - for (t = hp_str; (*p = *t++); p++); - } - } - break; - case 'T': - for (t = t_str; (*p = *t++); p++); - break; - case 'H': - for (t = h_str; (*p = *t++); p++); - break; - case 'L': - for (t = l_str; (*p = *t++); p++); - break; - case '\\': - if (escBackslash) { - *p++ = '\\'; - break; - } - /* Fall through */ - default: /* leave other escape sequences unmodified, e.g. \n \l \r */ - *p++ = '\\'; - *p++ = c; - break; - } - } else { - *p++ = c; - } - } - *p++ = '\0'; - return newstr; -} - -/* strdup_and_subst_obj: - * Processes graph object escape sequences; also collapses \\ to \. - */ -char *strdup_and_subst_obj(char *str, void *obj) -{ - return strdup_and_subst_obj0 (str, obj, 1); -} - -/* return true if *s points to &[A-Za-z]*; (e.g. Ç ) - * or &#[0-9]*; (e.g. & ) - * or &#x[0-9a-fA-F]*; (e.g. 水 ) - */ -static int xml_isentity(char *s) -{ - s++; /* already known to be '&' */ - if (*s == '#') { - s++; - if (*s == 'x' || *s == 'X') { - s++; - while ((*s >= '0' && *s <= '9') - || (*s >= 'a' && *s <= 'f') - || (*s >= 'A' && *s <= 'F')) - s++; - } else { - while (*s >= '0' && *s <= '9') - s++; - } - } else { - while ((*s >= 'a' && *s <= 'z') - || (*s >= 'A' && *s <= 'Z')) - s++; - } - if (*s == ';') - return 1; - return 0; -} - -char *xml_string(char *s) -{ - return xml_string0 (s, FALSE); -} - -/* xml_string0: - * Encode input string as an xml string. - * If raw is true, the input is interpreted as having no - * embedded escape sequences, and \n and \r are changed - * into and , respectively. - * Uses a static buffer, so non-re-entrant. - */ -char *xml_string0(char *s, boolean raw) -{ - static char *buf = NULL; - static int bufsize = 0; - char *p, *sub, *prev = NULL; - int len, pos = 0; - - if (!buf) { - bufsize = 64; - buf = gmalloc(bufsize); - } - - p = buf; - while (s && *s) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = grealloc(buf, bufsize); - p = buf + pos; - } - /* escape '&' only if not part of a legal entity sequence */ - if (*s == '&' && (raw || !(xml_isentity(s)))) { - sub = "&"; - len = 5; - } - /* '<' '>' are safe to substitute even if string is already UTF-8 coded - * since UTF-8 strings won't contain '<' or '>' */ - else if (*s == '<') { - sub = "<"; - len = 4; - } - else if (*s == '>') { - sub = ">"; - len = 4; - } - else if (*s == '-') { /* can't be used in xml comment strings */ - sub = "-"; - len = 5; - } - else if (*s == ' ' && prev && *prev == ' ') { - /* substitute 2nd and subsequent spaces with required_spaces */ - sub = " "; /* inkscape doesn't recognise   */ - len = 6; - } - else if (*s == '"') { - sub = """; - len = 6; - } - else if (*s == '\'') { - sub = "'"; - len = 5; - } - else if ((*s == '\n') && raw) { - sub = " "; - len = 5; - } - else if ((*s == '\r') && raw) { - sub = " "; - len = 5; - } - else { - sub = s; - len = 1; - } - while (len--) { - *p++ = *sub++; - pos++; - } - prev = s; - s++; - } - *p = '\0'; - return buf; -} - -/* a variant of xml_string for urls in hrefs */ -char *xml_url_string(char *s) -{ - static char *buf = NULL; - static int bufsize = 0; - char *p, *sub; -#if 0 - char *prev = NULL; -#endif - int len, pos = 0; - - if (!buf) { - bufsize = 64; - buf = gmalloc(bufsize); - } - - p = buf; - while (s && *s) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = grealloc(buf, bufsize); - p = buf + pos; - } - /* escape '&' only if not part of a legal entity sequence */ - if (*s == '&' && !(xml_isentity(s))) { - sub = "&"; - len = 5; - } - /* '<' '>' are safe to substitute even if string is already UTF-8 coded - * since UTF-8 strings won't contain '<' or '>' */ - else if (*s == '<') { - sub = "<"; - len = 4; - } - else if (*s == '>') { - sub = ">"; - len = 4; - } -#if 0 - else if (*s == '-') { /* can't be used in xml comment strings */ - sub = "-"; - len = 5; - } - else if (*s == ' ' && prev && *prev == ' ') { - /* substitute 2nd and subsequent spaces with required_spaces */ - sub = " "; /* inkscape doesn't recognise   */ - len = 6; - } -#endif - else if (*s == '"') { - sub = """; - len = 6; - } - else if (*s == '\'') { - sub = "'"; - len = 5; - } - else { - sub = s; - len = 1; - } - while (len--) { - *p++ = *sub++; - pos++; - } -#if 0 - prev = s; -#endif - s++; - } - *p = '\0'; - return buf; -} diff --git a/internal/ccall/common/logic.h b/internal/ccall/common/logic.h deleted file mode 100644 index ea93998..0000000 --- a/internal/ccall/common/logic.h +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_LOGIC_H -#define GV_LOGIC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined HAVE_STDBOOL_H && ! defined __cplusplus -#include -#endif - -#ifndef NOT -#define NOT(v) (!(v)) -#endif - -#ifndef FALSE -#define FALSE (0) -#endif -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#ifndef NOTUSED -#define NOTUSED(var) (void) var -#endif - -#ifndef NULL -#define NULL (void *)0 -#endif - -#ifndef NIL -#define NIL(type) ((type)0) -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/internal/ccall/common/macros.h b/internal/ccall/common/macros.h deleted file mode 100644 index b84f5c4..0000000 --- a/internal/ccall/common/macros.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_MACROS_H -#define GV_MACROS_H - -#ifndef NOTUSED -#define NOTUSED(var) (void) var -#endif - -#ifndef NIL -#define NIL(type) ((type)0) -#endif - -#define isPinned(n) (ND_pinned(n) == P_PIN) -#define hasPos(n) (ND_pinned(n) > 0) -#define isFixed(n) (ND_pinned(n) > P_SET) - -#define SET_CLUST_NODE(n) (ND_clustnode(n) = TRUE) -#define IS_CLUST_NODE(n) (ND_clustnode(n)) -#define HAS_CLUST_EDGE(g) (GD_flags(g) & 1) -#define SET_CLUST_EDGE(g) (GD_flags(g) |= 1) -#define EDGE_TYPE(g) (GD_flags(g) & (7 << 1)) - -#ifndef streq -#define streq(a,b) (*(a)==*(b)&&!strcmp(a,b)) -#endif - -#define XPAD(d) ((d).x += 4*GAP) -#define YPAD(d) ((d).y += 2*GAP) -#define PAD(d) {XPAD(d); YPAD(d);} - -#define OTHERDIR(dir) ((dir == CCW) ? CW : CCW) - -#define NEXTSIDE(side, dir) ((dir == CCW) ? \ - ((side & 0x8) ? BOTTOM : (side << 1)) : \ - ((side & 0x1) ? LEFT : (side >> 1))) - -#endif diff --git a/internal/ccall/common/memory.c b/internal/ccall/common/memory.c deleted file mode 100644 index 2c6649e..0000000 --- a/internal/ccall/common/memory.c +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include "memory.h" - -void *zmalloc(size_t nbytes) -{ - char *rv; - if (nbytes == 0) - return 0; - rv = gmalloc(nbytes); - memset(rv, 0, nbytes); - return rv; -} - -void *zrealloc(void *ptr, size_t size, size_t elt, size_t osize) -{ - void *p = realloc(ptr, size * elt); - if (p == NULL && size) { - fprintf(stderr, "out of memory\n"); - return p; - } - if (osize < size) - memset((char *) p + (osize * elt), '\0', (size - osize) * elt); - return p; -} - -void *gmalloc(size_t nbytes) -{ - char *rv; - if (nbytes == 0) - return NULL; - rv = malloc(nbytes); - if (rv == NULL) { - fprintf(stderr, "out of memory\n"); - } - return rv; -} - -void *grealloc(void *ptr, size_t size) -{ - void *p = realloc(ptr, size); - if (p == NULL && size) { - fprintf(stderr, "out of memory\n"); - } - return p; -} diff --git a/internal/ccall/common/memory.h b/internal/ccall/common/memory.h deleted file mode 100644 index bbd0696..0000000 --- a/internal/ccall/common/memory.h +++ /dev/null @@ -1,67 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_MEMORY_H -#define GV_MEMORY_H - -#include "config.h" -#include -#ifdef HAVE_MALLOC_H -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef DMALLOC -#define NEW(t) (t*)calloc(1,sizeof(t)) -#define N_NEW(n,t) (t*)calloc((n),sizeof(t)) -#define GNEW(t) (t*)malloc(sizeof(t)) -#define N_GNEW(n,t) (t*)malloc((n)*sizeof(t)) -#define ALLOC(size,ptr,type) (ptr? (type*)realloc(ptr,(size)*sizeof(type)):(type*)malloc((size)*sizeof(type))) -#define RALLOC(size,ptr,type) ((type*)realloc(ptr,(size)*sizeof(type))) -#define ZALLOC(size,ptr,type,osize) (ptr? (type*)recalloc(ptr,(size)*sizeof(type)):(type*)calloc((size),sizeof(type))) -#else -#define NEW(t) (t*)zmalloc(sizeof(t)) -#define N_NEW(n,t) (t*)zmalloc((n)*sizeof(t)) -#define GNEW(t) (t*)gmalloc(sizeof(t)) - -#define N_GNEW(n,t) (t*)gmalloc((n)*sizeof(t)) -#define N_GGNEW(n,t) (t*)malloc((n)*sizeof(t)) -#define ALLOC(size,ptr,type) (ptr? (type*)grealloc(ptr,(size)*sizeof(type)):(type*)gmalloc((size)*sizeof(type))) -#define RALLOC(size,ptr,type) ((type*)grealloc(ptr,(size)*sizeof(type))) -#define ZALLOC(size,ptr,type,osize) (ptr? (type*)zrealloc(ptr,size,sizeof(type),osize):(type*)zmalloc((size)*sizeof(type))) -#endif -#ifdef GVDLL -#define extern __declspec(dllexport) -#else -#ifdef _WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif - -#endif - - extern void *zmalloc(size_t); - extern void *zrealloc(void *, size_t, size_t, size_t); - extern void *gmalloc(size_t); - extern void *grealloc(void *, size_t); -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/common/mksvgfonts.pl b/internal/ccall/common/mksvgfonts.pl deleted file mode 100755 index 1802eec..0000000 --- a/internal/ccall/common/mksvgfonts.pl +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/perl - -# translate a ghostscript config to a graphviz ps_font_equiv.h table -use English; -my %features = (); - -my %map = ( -"roman" => "serif", -"sans-serif" => "sans-Serif", -"typewriter" => "monospace" -); - -# weight normal or bold -# style normal or italic - -if ($#ARGV + 1 != 2) { die "usage: cf2psfe.pl fontmap.cfg ps_font_equiv.txt";} - -open(CONFIG,"< $ARGV[0]"); -while () { - next if /^#/; - if (/\[(.+)\]/) { $fontname = $1;} - if (/features\s*=\s*(.+)/) { $features{$fontname} = $1;} -} - -open(SOURCE,"< $ARGV[1]"); -while () { - my ($fontfam, $weight, $style); - m/"([^"]+)"/; - $f = $features{$1}; - while (($key,$value) = each(%map)) { - $fontfam = $value if ($f =~ /$key/); - } - $style = ($f =~ /italic/? q("italic") : 0); - $weight= ($f =~ /bold/? q("bold") : 0); - if ($fontfam eq "") {warn "don't know about $1\n"; $fontfam = "fantasy";} - $_ =~ s/},$/,\t\"$fontfam\",\t$weight,\t$style},/; - print $_; -} diff --git a/internal/ccall/common/ns.c b/internal/ccall/common/ns.c deleted file mode 100644 index df52fb5..0000000 --- a/internal/ccall/common/ns.c +++ /dev/null @@ -1,1132 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Network Simplex Algorithm for Ranking Nodes of a DAG - */ - -#include "render.h" -#include - -static int init_graph(graph_t *); -static void dfs_cutval(node_t * v, edge_t * par); -static int dfs_range(node_t * v, edge_t * par, int low); -static int x_val(edge_t * e, node_t * v, int dir); -#ifdef DEBUG -static void check_cycles(graph_t * g); -#endif - -#define LENGTH(e) (ND_rank(aghead(e)) - ND_rank(agtail(e))) -#define SLACK(e) (LENGTH(e) - ED_minlen(e)) -#define SEQ(a,b,c) (((a) <= (b)) && ((b) <= (c))) -#define TREE_EDGE(e) (ED_tree_index(e) >= 0) - -static jmp_buf jbuf; -static graph_t *G; -static int N_nodes, N_edges; -static int Minrank, Maxrank; -static int S_i; /* search index for enter_edge */ -static int Search_size; -#define SEARCHSIZE 30 -static nlist_t Tree_node; -static elist Tree_edge; - -static void add_tree_edge(edge_t * e) -{ - node_t *n; - //fprintf(stderr,"add tree edge %p %s ", (void*)e, agnameof(agtail(e))) ; fprintf(stderr,"%s\n", agnameof(aghead(e))) ; - if (TREE_EDGE(e)) { - agerr(AGERR, "add_tree_edge: missing tree edge\n"); - longjmp (jbuf, 1); - } - ED_tree_index(e) = Tree_edge.size; - Tree_edge.list[Tree_edge.size++] = e; - if (ND_mark(agtail(e)) == FALSE) - Tree_node.list[Tree_node.size++] = agtail(e); - if (ND_mark(aghead(e)) == FALSE) - Tree_node.list[Tree_node.size++] = aghead(e); - n = agtail(e); - ND_mark(n) = TRUE; - ND_tree_out(n).list[ND_tree_out(n).size++] = e; - ND_tree_out(n).list[ND_tree_out(n).size] = NULL; - if (ND_out(n).list[ND_tree_out(n).size - 1] == 0) { - agerr(AGERR, "add_tree_edge: empty outedge list\n"); - longjmp (jbuf, 1); - } - n = aghead(e); - ND_mark(n) = TRUE; - ND_tree_in(n).list[ND_tree_in(n).size++] = e; - ND_tree_in(n).list[ND_tree_in(n).size] = NULL; - if (ND_in(n).list[ND_tree_in(n).size - 1] == 0) { - agerr(AGERR, "add_tree_edge: empty inedge list\n"); - longjmp (jbuf, 1); - } -} - -static void exchange_tree_edges(edge_t * e, edge_t * f) -{ - int i, j; - node_t *n; - - ED_tree_index(f) = ED_tree_index(e); - Tree_edge.list[ED_tree_index(e)] = f; - ED_tree_index(e) = -1; - - n = agtail(e); - i = --(ND_tree_out(n).size); - for (j = 0; j <= i; j++) - if (ND_tree_out(n).list[j] == e) - break; - ND_tree_out(n).list[j] = ND_tree_out(n).list[i]; - ND_tree_out(n).list[i] = NULL; - n = aghead(e); - i = --(ND_tree_in(n).size); - for (j = 0; j <= i; j++) - if (ND_tree_in(n).list[j] == e) - break; - ND_tree_in(n).list[j] = ND_tree_in(n).list[i]; - ND_tree_in(n).list[i] = NULL; - - n = agtail(f); - ND_tree_out(n).list[ND_tree_out(n).size++] = f; - ND_tree_out(n).list[ND_tree_out(n).size] = NULL; - n = aghead(f); - ND_tree_in(n).list[ND_tree_in(n).size++] = f; - ND_tree_in(n).list[ND_tree_in(n).size] = NULL; -} - -static -void init_rank(void) -{ - int i, ctr; - nodequeue *Q; - node_t *v; - edge_t *e; - - Q = new_queue(N_nodes); - ctr = 0; - - for (v = GD_nlist(G); v; v = ND_next(v)) { - if (ND_priority(v) == 0) - enqueue(Q, v); - } - - while ((v = dequeue(Q))) { - ND_rank(v) = 0; - ctr++; - for (i = 0; (e = ND_in(v).list[i]); i++) - ND_rank(v) = MAX(ND_rank(v), ND_rank(agtail(e)) + ED_minlen(e)); - for (i = 0; (e = ND_out(v).list[i]); i++) { - if (--(ND_priority(aghead(e))) <= 0) - enqueue(Q, aghead(e)); - } - } - if (ctr != N_nodes) { - agerr(AGERR, "trouble in init_rank\n"); - for (v = GD_nlist(G); v; v = ND_next(v)) - if (ND_priority(v)) - agerr(AGPREV, "\t%s %d\n", agnameof(v), ND_priority(v)); - } - free_queue(Q); -} - -static edge_t *leave_edge(void) -{ - edge_t *f, *rv = NULL; - int j, cnt = 0; - - j = S_i; - while (S_i < Tree_edge.size) { - if (ED_cutvalue(f = Tree_edge.list[S_i]) < 0) { - if (rv) { - if (ED_cutvalue(rv) > ED_cutvalue(f)) - rv = f; - } else - rv = Tree_edge.list[S_i]; - if (++cnt >= Search_size) - return rv; - } - S_i++; - } - if (j > 0) { - S_i = 0; - while (S_i < j) { - if (ED_cutvalue(f = Tree_edge.list[S_i]) < 0) { - if (rv) { - if (ED_cutvalue(rv) > ED_cutvalue(f)) - rv = f; - } else - rv = Tree_edge.list[S_i]; - if (++cnt >= Search_size) - return rv; - } - S_i++; - } - } - return rv; -} - -static edge_t *Enter; -static int Low, Lim, Slack; - -static void dfs_enter_outedge(node_t * v) -{ - int i, slack; - edge_t *e; - - for (i = 0; (e = ND_out(v).list[i]); i++) { - if (TREE_EDGE(e) == FALSE) { - if (!SEQ(Low, ND_lim(aghead(e)), Lim)) { - slack = SLACK(e); - if ((slack < Slack) || (Enter == NULL)) { - Enter = e; - Slack = slack; - } - } - } else if (ND_lim(aghead(e)) < ND_lim(v)) - dfs_enter_outedge(aghead(e)); - } - for (i = 0; (e = ND_tree_in(v).list[i]) && (Slack > 0); i++) - if (ND_lim(agtail(e)) < ND_lim(v)) - dfs_enter_outedge(agtail(e)); -} - -static void dfs_enter_inedge(node_t * v) -{ - int i, slack; - edge_t *e; - - for (i = 0; (e = ND_in(v).list[i]); i++) { - if (TREE_EDGE(e) == FALSE) { - if (!SEQ(Low, ND_lim(agtail(e)), Lim)) { - slack = SLACK(e); - if ((slack < Slack) || (Enter == NULL)) { - Enter = e; - Slack = slack; - } - } - } else if (ND_lim(agtail(e)) < ND_lim(v)) - dfs_enter_inedge(agtail(e)); - } - for (i = 0; (e = ND_tree_out(v).list[i]) && (Slack > 0); i++) - if (ND_lim(aghead(e)) < ND_lim(v)) - dfs_enter_inedge(aghead(e)); -} - -static edge_t *enter_edge(edge_t * e) -{ - node_t *v; - int outsearch; - - /* v is the down node */ - if (ND_lim(agtail(e)) < ND_lim(aghead(e))) { - v = agtail(e); - outsearch = FALSE; - } else { - v = aghead(e); - outsearch = TRUE; - } - Enter = NULL; - Slack = INT_MAX; - Low = ND_low(v); - Lim = ND_lim(v); - if (outsearch) - dfs_enter_outedge(v); - else - dfs_enter_inedge(v); - return Enter; -} - -static void init_cutvalues(void) -{ - dfs_range(GD_nlist(G), NULL, 1); - dfs_cutval(GD_nlist(G), NULL); -} - -/* functions for initial tight tree construction */ -// borrow field from network simplex - overwritten in init_cutvalues() forgive me -#define ND_subtree(n) (subtree_t*)ND_par(n) -#define ND_subtree_set(n,value) (ND_par(n) = (edge_t*)value) - -typedef struct subtree_s { - node_t *rep; /* some node in the tree */ - int size; /* total tight tree size */ - int heap_index; /* required to find non-min elts when merged */ - struct subtree_s *par; /* union find */ -} subtree_t; - -/* find initial tight subtrees */ -static int tight_subtree_search(Agnode_t *v, subtree_t *st) -{ - Agedge_t *e; - int i; - int rv; - - rv = 1; - ND_subtree_set(v,st); - for (i = 0; (e = ND_in(v).list[i]); i++) { - if (TREE_EDGE(e)) continue; - if ((ND_subtree(agtail(e)) == 0) && (SLACK(e) == 0)) { - add_tree_edge(e); - rv += tight_subtree_search(agtail(e),st); - } - } - for (i = 0; (e = ND_out(v).list[i]); i++) { - if (TREE_EDGE(e)) continue; - if ((ND_subtree(aghead(e)) == 0) && (SLACK(e) == 0)) { - add_tree_edge(e); - rv += tight_subtree_search(aghead(e),st); - } - } - return rv; -} - -static subtree_t *find_tight_subtree(Agnode_t *v) -{ - subtree_t *rv; - rv = NEW(subtree_t); - rv->rep = v; - rv->size = tight_subtree_search(v,rv); - rv->par = rv; - return rv; -} - -typedef struct STheap_s { - subtree_t **elt; - int size; -} STheap_t; - -static subtree_t *STsetFind(Agnode_t *n0) -{ - subtree_t *s0 = ND_subtree(n0); - while (s0->par && (s0->par != s0)) { - if (s0->par->par) {s0->par = s0->par->par;} /* path compression for the code weary */ - s0 = s0->par; - } - return s0; -} - -static subtree_t *STsetUnion(subtree_t *s0, subtree_t *s1) -{ - subtree_t *r0, *r1, *r; - - for (r0 = s0; r0->par && (r0->par != r0); r0 = r0->par); - for (r1 = s1; r1->par && (r1->par != r1); r1 = r1->par); - if (r0 == r1) return r0; /* safety code but shouldn't happen */ - assert((r0->heap_index > -1) || (r1->heap_index > -1)); - if (r1->heap_index == -1) r = r0; - else if (r0->heap_index == -1) r = r1; - else if (r1->size < r0->size) r = r0; - else r = r1; - - r0->par = r1->par = r; - r->size = r0->size + r1->size; - assert(r->heap_index >= 0); - return r; -} - -#define INCIDENT(e,treeset) ((STsetFind(agtail(e),treeset)) != STsetFind(aghead(e),treeset)) - -/* find tightest edge to another tree incident on the given tree */ -static Agedge_t *inter_tree_edge_search(Agnode_t *v, Agnode_t *from, Agedge_t *best) -{ - int i; - Agedge_t *e; - subtree_t *ts = STsetFind(v); - if (best && SLACK(best) == 0) return best; - for (i = 0; (e = ND_out(v).list[i]); i++) { - if (TREE_EDGE(e)) { - if (aghead(e) == from) continue; // do not search back in tree - best = inter_tree_edge_search(aghead(e),v,best); // search forward in tree - } - else { - if (STsetFind(aghead(e)) != ts) { // encountered candidate edge - if ((best == 0) || (SLACK(e) < SLACK(best))) best = e; - } - /* else ignore non-tree edge between nodes in the same tree */ - } - } - /* the following code must mirror the above, but for in-edges */ - for (i = 0; (e = ND_in(v).list[i]); i++) { - if (TREE_EDGE(e)) { - if (agtail(e) == from) continue; - best = inter_tree_edge_search(agtail(e),v,best); - } - else { - if (STsetFind(agtail(e)) != ts) { - if ((best == 0) || (SLACK(e) < SLACK(best))) best = e; - } - } - } - return best; -} - -static Agedge_t *inter_tree_edge(subtree_t *tree) -{ - Agedge_t *rv; - rv = inter_tree_edge_search(tree->rep, (Agnode_t *)0, (Agedge_t *)0); - return rv; -} - -static -int STheapsize(STheap_t *heap) { return heap->size; } - -static -void STheapify(STheap_t *heap, int i) -{ - int left, right, smallest; - subtree_t **elt = heap->elt; - do { - left = 2*(i+1)-1; - right = 2*(i+1); - if ((left < heap->size) && (elt[left]->size < elt[i]->size)) smallest = left; - else smallest = i; - if ((right < heap->size) && (elt[right]->size < elt[smallest]->size)) smallest = right; - else smallest = i; - if (smallest != i) { - subtree_t *temp; - temp = elt[i]; - elt[i] = elt[smallest]; - elt[smallest] = temp; - elt[i]->heap_index = i; - elt[smallest]->heap_index = smallest; - i = smallest; - } - else break; - } while (i < heap->size); -} - -static -STheap_t *STbuildheap(subtree_t **elt, int size) -{ - int i; - STheap_t *heap; - heap = NEW(STheap_t); - heap->elt = elt; - heap->size = size; - for (i = 0; i < heap->size; i++) heap->elt[i]->heap_index = i; - for (i = heap->size/2; i >= 0; i--) - STheapify(heap,i); - return heap; -} - -static -subtree_t *STextractmin(STheap_t *heap) -{ - subtree_t *rv; - rv = heap->elt[0]; - rv->heap_index = -1; - heap->elt[0] = heap->elt[heap->size - 1]; - heap->elt[0]->heap_index = 0; - heap->elt[heap->size -1] = rv; /* needed to free storage later */ - heap->size--; - STheapify(heap,0); - return rv; -} - -static -void tree_adjust(Agnode_t *v, Agnode_t *from, int delta) -{ - int i; - Agedge_t *e; - Agnode_t *w; - ND_rank(v) = ND_rank(v) + delta; - for (i = 0; (e = ND_tree_in(v).list[i]); i++) { - w = agtail(e); - if (w != from) - tree_adjust(w, v, delta); - } - for (i = 0; (e = ND_tree_out(v).list[i]); i++) { - w = aghead(e); - if (w != from) - tree_adjust(w, v, delta); - } -} - -static -subtree_t *merge_trees(Agedge_t *e) /* entering tree edge */ -{ - int delta; - subtree_t *t0, *t1, *rv; - - assert(!TREE_EDGE(e)); - - t0 = STsetFind(agtail(e)); - t1 = STsetFind(aghead(e)); - - //fprintf(stderr,"merge trees of %d %d of %d, delta %d\n",t0->size,t1->size,N_nodes,delta); - - if (t0->heap_index == -1) { // move t0 - delta = SLACK(e); - tree_adjust(t0->rep,(Agnode_t*)0,delta); - } - else { // move t1 - delta = -SLACK(e); - tree_adjust(t1->rep,0,delta); - } - add_tree_edge(e); - rv = STsetUnion(t0,t1); - - return rv; -} - -/* Construct initial tight tree. Graph must be connected, feasible. - * Adjust ND_rank(v) as needed. add_tree_edge() on tight tree edges. - * trees are basically lists of nodes stored in nodequeues. - */ -static -int feasible_tree(void) -{ - Agnode_t *n; - Agedge_t *ee; - subtree_t **tree, *tree0, *tree1; - int i, subtree_count = 0; - STheap_t *heap; - - /* initialization */ - for (n = GD_nlist(G); n; n = ND_next(n)) { - ND_subtree_set(n,0); - } - - tree = N_NEW(N_nodes,subtree_t*); - /* given init_rank, find all tight subtrees */ - for (n = GD_nlist(G); n; n = ND_next(n)) { - if (ND_subtree(n) == 0) { - tree[subtree_count] = find_tight_subtree(n); - subtree_count++; - } - } - - /* incrementally merge subtrees */ - heap = STbuildheap(tree,subtree_count); - while (STheapsize(heap) > 1) { - tree0 = STextractmin(heap); - ee = inter_tree_edge(tree0); - tree1 = merge_trees(ee); - STheapify(heap,tree1->heap_index); - } - - free(heap); - for (i = 0; i < subtree_count; i++) free(tree[i]); - free(tree); - assert(Tree_edge.size == N_nodes - 1); - init_cutvalues(); - return 0; -} - -/* utility functions for debugging */ -static subtree_t *nd_subtree(Agnode_t *n) {return ND_subtree(n);} -static int nd_priority(Agnode_t *n) {return ND_priority(n);} -static int nd_rank(Agnode_t *n) {return ND_rank(n);} -static int ed_minlen(Agedge_t *e) {return ED_minlen(e);} - -/* walk up from v to LCA(v,w), setting new cutvalues. */ -static Agnode_t *treeupdate(Agnode_t * v, Agnode_t * w, int cutvalue, int dir) -{ - edge_t *e; - int d; - - while (!SEQ(ND_low(v), ND_lim(w), ND_lim(v))) { - e = ND_par(v); - if (v == agtail(e)) - d = dir; - else - d = NOT(dir); - if (d) - ED_cutvalue(e) += cutvalue; - else - ED_cutvalue(e) -= cutvalue; - if (ND_lim(agtail(e)) > ND_lim(aghead(e))) - v = agtail(e); - else - v = aghead(e); - } - return v; -} - -static void rerank(Agnode_t * v, int delta) -{ - int i; - edge_t *e; - - ND_rank(v) -= delta; - for (i = 0; (e = ND_tree_out(v).list[i]); i++) - if (e != ND_par(v)) - rerank(aghead(e), delta); - for (i = 0; (e = ND_tree_in(v).list[i]); i++) - if (e != ND_par(v)) - rerank(agtail(e), delta); -} - -/* e is the tree edge that is leaving and f is the nontree edge that - * is entering. compute new cut values, ranks, and exchange e and f. - */ -static void -update(edge_t * e, edge_t * f) -{ - int cutvalue, delta; - Agnode_t *lca; - - delta = SLACK(f); - /* "for (v = in nodes in tail side of e) do ND_rank(v) -= delta;" */ - if (delta > 0) { - int s; - s = ND_tree_in(agtail(e)).size + ND_tree_out(agtail(e)).size; - if (s == 1) - rerank(agtail(e), delta); - else { - s = ND_tree_in(aghead(e)).size + ND_tree_out(aghead(e)).size; - if (s == 1) - rerank(aghead(e), -delta); - else { - if (ND_lim(agtail(e)) < ND_lim(aghead(e))) - rerank(agtail(e), delta); - else - rerank(aghead(e), -delta); - } - } - } - - cutvalue = ED_cutvalue(e); - lca = treeupdate(agtail(f), aghead(f), cutvalue, 1); - if (treeupdate(aghead(f), agtail(f), cutvalue, 0) != lca) { - agerr(AGERR, "update: mismatched lca in treeupdates\n"); - longjmp (jbuf, 1); - } - ED_cutvalue(f) = -cutvalue; - ED_cutvalue(e) = 0; - exchange_tree_edges(e, f); - dfs_range(lca, ND_par(lca), ND_low(lca)); -} - -static void scan_and_normalize(void) -{ - node_t *n; - - Minrank = INT_MAX; - Maxrank = -INT_MAX; - for (n = GD_nlist(G); n; n = ND_next(n)) { - if (ND_node_type(n) == NORMAL) { - Minrank = MIN(Minrank, ND_rank(n)); - Maxrank = MAX(Maxrank, ND_rank(n)); - } - } - if (Minrank != 0) { - for (n = GD_nlist(G); n; n = ND_next(n)) - ND_rank(n) -= Minrank; - Maxrank -= Minrank; - Minrank = 0; - } -} - -static void -freeTreeList (graph_t* g) -{ - node_t *n; - for (n = GD_nlist(G); n; n = ND_next(n)) { - free_list(ND_tree_in(n)); - free_list(ND_tree_out(n)); - ND_mark(n) = FALSE; - } -} - -static void LR_balance(void) -{ - int i, delta; - edge_t *e, *f; - - for (i = 0; i < Tree_edge.size; i++) { - e = Tree_edge.list[i]; - if (ED_cutvalue(e) == 0) { - f = enter_edge(e); - if (f == NULL) - continue; - delta = SLACK(f); - if (delta <= 1) - continue; - if (ND_lim(agtail(e)) < ND_lim(aghead(e))) - rerank(agtail(e), delta / 2); - else - rerank(aghead(e), -delta / 2); - } - } - freeTreeList (G); -} - -static void TB_balance(void) -{ - node_t *n; - edge_t *e; - int i, low, high, choice, *nrank; - int inweight, outweight; - - scan_and_normalize(); - - /* find nodes that are not tight and move to less populated ranks */ - nrank = N_NEW(Maxrank + 1, int); - for (i = 0; i <= Maxrank; i++) - nrank[i] = 0; - for (n = GD_nlist(G); n; n = ND_next(n)) - if (ND_node_type(n) == NORMAL) - nrank[ND_rank(n)]++; - for (n = GD_nlist(G); n; n = ND_next(n)) { - if (ND_node_type(n) != NORMAL) - continue; - inweight = outweight = 0; - low = 0; - high = Maxrank; - for (i = 0; (e = ND_in(n).list[i]); i++) { - inweight += ED_weight(e); - low = MAX(low, ND_rank(agtail(e)) + ED_minlen(e)); - } - for (i = 0; (e = ND_out(n).list[i]); i++) { - outweight += ED_weight(e); - high = MIN(high, ND_rank(aghead(e)) - ED_minlen(e)); - } - if (low < 0) - low = 0; /* vnodes can have ranks < 0 */ - if (inweight == outweight) { - choice = low; - for (i = low + 1; i <= high; i++) - if (nrank[i] < nrank[choice]) - choice = i; - nrank[ND_rank(n)]--; - nrank[choice]++; - ND_rank(n) = choice; - } - free_list(ND_tree_in(n)); - free_list(ND_tree_out(n)); - ND_mark(n) = FALSE; - } - free(nrank); -} - -static int init_graph(graph_t * g) -{ - int i, feasible; - node_t *n; - edge_t *e; - - G = g; - N_nodes = N_edges = S_i = 0; - for (n = GD_nlist(g); n; n = ND_next(n)) { - ND_mark(n) = FALSE; - N_nodes++; - for (i = 0; (e = ND_out(n).list[i]); i++) - N_edges++; - } - - Tree_node.list = ALLOC(N_nodes, Tree_node.list, node_t *); - Tree_node.size = 0; - Tree_edge.list = ALLOC(N_nodes, Tree_edge.list, edge_t *); - Tree_edge.size = 0; - - feasible = TRUE; - for (n = GD_nlist(g); n; n = ND_next(n)) { - ND_priority(n) = 0; - for (i = 0; (e = ND_in(n).list[i]); i++) { - ND_priority(n)++; - ED_cutvalue(e) = 0; - ED_tree_index(e) = -1; - if (feasible - && (ND_rank(aghead(e)) - ND_rank(agtail(e)) < ED_minlen(e))) - feasible = FALSE; - } - ND_tree_in(n).list = N_NEW(i + 1, edge_t *); - ND_tree_in(n).size = 0; - for (i = 0; (e = ND_out(n).list[i]); i++); - ND_tree_out(n).list = N_NEW(i + 1, edge_t *); - ND_tree_out(n).size = 0; - } - return feasible; -} - -/* graphSize: - * Compute no. of nodes and edges in the graph - */ -static void -graphSize (graph_t * g, int* nn, int* ne) -{ - int i, nnodes, nedges; - node_t *n; - edge_t *e; - - nnodes = nedges = 0; - for (n = GD_nlist(g); n; n = ND_next(n)) { - nnodes++; - for (i = 0; (e = ND_out(n).list[i]); i++) { - nedges++; - } - } - *nn = nnodes; - *ne = nedges; -} - -/* rank: - * Apply network simplex to rank the nodes in a graph. - * Uses ED_minlen as the internode constraint: if a->b with minlen=ml, - * rank b - rank a >= ml. - * Assumes the graph has the following additional structure: - * A list of all nodes, starting at GD_nlist, and linked using ND_next. - * Out and in edges lists stored in ND_out and ND_in, even if the node - * doesn't have any out or in edges. - * The node rank values are stored in ND_rank. - * Returns 0 if successful; returns 1 if `he graph was not connected; - * returns 2 if something seriously wrong; - */ -int rank2(graph_t * g, int balance, int maxiter, int search_size) -{ - int iter = 0, feasible; - char *ns = "network simplex: "; - edge_t *e, *f; - -#ifdef DEBUG - check_cycles(g); -#endif - if (Verbose) { - int nn, ne; - graphSize (g, &nn, &ne); - fprintf(stderr, "%s %d nodes %d edges maxiter=%d balance=%d\n", ns, - nn, ne, maxiter, balance); - start_timer(); - } - feasible = init_graph(g); - if (!feasible) - init_rank(); - if (maxiter <= 0) { - freeTreeList (g); - return 0; - } - - if (search_size >= 0) - Search_size = search_size; - else - Search_size = SEARCHSIZE; - - if (setjmp (jbuf)) { - return 2; - } - - if (feasible_tree()) { - freeTreeList (g); - return 1; - } - while ((e = leave_edge())) { - f = enter_edge(e); - update(e, f); - iter++; - if (Verbose && (iter % 100 == 0)) { - if (iter % 1000 == 100) - fputs(ns, stderr); - fprintf(stderr, "%d ", iter); - if (iter % 1000 == 0) - fputc('\n', stderr); - } - if (iter >= maxiter) - break; - } - switch (balance) { - case 1: - TB_balance(); - break; - case 2: - LR_balance(); - break; - default: - scan_and_normalize(); - freeTreeList (G); - break; - } - if (Verbose) { - if (iter >= 100) - fputc('\n', stderr); - fprintf(stderr, "%s%d nodes %d edges %d iter %.2f sec\n", - ns, N_nodes, N_edges, iter, elapsed_sec()); - } - return 0; -} - -int rank(graph_t * g, int balance, int maxiter) -{ - char *s; - int search_size; - - if ((s = agget(g, "searchsize"))) - search_size = atoi(s); - else - search_size = SEARCHSIZE; - - return rank2 (g, balance, maxiter, search_size); -} - -/* set cut value of f, assuming values of edges on one side were already set */ -static void x_cutval(edge_t * f) -{ - node_t *v; - edge_t *e; - int i, sum, dir; - - /* set v to the node on the side of the edge already searched */ - if (ND_par(agtail(f)) == f) { - v = agtail(f); - dir = 1; - } else { - v = aghead(f); - dir = -1; - } - - sum = 0; - for (i = 0; (e = ND_out(v).list[i]); i++) - sum += x_val(e, v, dir); - for (i = 0; (e = ND_in(v).list[i]); i++) - sum += x_val(e, v, dir); - ED_cutvalue(f) = sum; -} - -static int x_val(edge_t * e, node_t * v, int dir) -{ - node_t *other; - int d, rv, f; - - if (agtail(e) == v) - other = aghead(e); - else - other = agtail(e); - if (!(SEQ(ND_low(v), ND_lim(other), ND_lim(v)))) { - f = 1; - rv = ED_weight(e); - } else { - f = 0; - if (TREE_EDGE(e)) - rv = ED_cutvalue(e); - else - rv = 0; - rv -= ED_weight(e); - } - if (dir > 0) { - if (aghead(e) == v) - d = 1; - else - d = -1; - } else { - if (agtail(e) == v) - d = 1; - else - d = -1; - } - if (f) - d = -d; - if (d < 0) - rv = -rv; - return rv; -} - -static void dfs_cutval(node_t * v, edge_t * par) -{ - int i; - edge_t *e; - - for (i = 0; (e = ND_tree_out(v).list[i]); i++) - if (e != par) - dfs_cutval(aghead(e), e); - for (i = 0; (e = ND_tree_in(v).list[i]); i++) - if (e != par) - dfs_cutval(agtail(e), e); - if (par) - x_cutval(par); -} - -static int dfs_range(node_t * v, edge_t * par, int low) -{ - edge_t *e; - int i, lim; - - lim = low; - ND_par(v) = par; - ND_low(v) = low; - for (i = 0; (e = ND_tree_out(v).list[i]); i++) - if (e != par) - lim = dfs_range(aghead(e), e, lim); - for (i = 0; (e = ND_tree_in(v).list[i]); i++) - if (e != par) - lim = dfs_range(agtail(e), e, lim); - ND_lim(v) = lim; - return lim + 1; -} - -#ifdef DEBUG -void tchk(void) -{ - int i, n_cnt, e_cnt; - node_t *n; - edge_t *e; - - n_cnt = 0; - e_cnt = 0; - for (n = agfstnode(G); n; n = agnxtnode(G, n)) { - n_cnt++; - for (i = 0; (e = ND_tree_out(n).list[i]); i++) { - e_cnt++; - if (SLACK(e) > 0) - fprintf(stderr, "not a tight tree %p", e); - } - } - if ((n_cnt != Tree_node.size) || (e_cnt != Tree_edge.size)) - fprintf(stderr, "something missing\n"); -} - -void check_cutvalues(void) -{ - node_t *v; - edge_t *e; - int i, save; - - for (v = agfstnode(G); v; v = agnxtnode(G, v)) { - for (i = 0; (e = ND_tree_out(v).list[i]); i++) { - save = ED_cutvalue(e); - x_cutval(e); - if (save != ED_cutvalue(e)) - abort(); - } - } -} - -int check_ranks(void) -{ - int cost = 0; - node_t *n; - edge_t *e; - - for (n = agfstnode(G); n; n = agnxtnode(G, n)) { - for (e = agfstout(G, n); e; e = agnxtout(G, e)) { - cost += (ED_weight(e)) * abs(LENGTH(e)); - if (ND_rank(aghead(e)) - ND_rank(agtail(e)) - ED_minlen(e) < 0) - abort(); - } - } - fprintf(stderr, "rank cost %d\n", cost); - return cost; -} - -void checktree(void) -{ - int i, n = 0, m = 0; - node_t *v; - edge_t *e; - - for (v = agfstnode(G); v; v = agnxtnode(G, v)) { - for (i = 0; (e = ND_tree_out(v).list[i]); i++) - n++; - if (i != ND_tree_out(v).size) - abort(); - for (i = 0; (e = ND_tree_in(v).list[i]); i++) - m++; - if (i != ND_tree_in(v).size) - abort(); - } - fprintf(stderr, "%d %d %d\n", Tree_edge.size, n, m); -} - -void check_fast_node(node_t * n) -{ - node_t *nptr; - nptr = GD_nlist(agraphof(n)); - while (nptr && nptr != n) - nptr = ND_next(nptr); - assert(nptr != NULL); -} - -static char* dump_node (node_t* n) -{ - static char buf[50]; - - if (ND_node_type(n)) { - sprintf(buf, "%p", n); - return buf; - } - else - return agnameof(n); -} - -static void dump_graph (graph_t* g) -{ - int i; - edge_t *e; - node_t *n,*w; - FILE* fp = fopen ("ns.gv", "w"); - fprintf (fp, "digraph \"%s\" {\n", agnameof(g)); - for (n = GD_nlist(g); n; n = ND_next(n)) { - fprintf (fp, " \"%s\"\n", dump_node(n)); - } - for (n = GD_nlist(g); n; n = ND_next(n)) { - for (i = 0; (e = ND_out(n).list[i]); i++) { - fprintf (fp, " \"%s\"", dump_node(n)); - w = aghead(e); - fprintf (fp, " -> \"%s\"\n", dump_node(w)); - } - } - - fprintf (fp, "}\n"); - fclose (fp); -} - -static node_t *checkdfs(graph_t* g, node_t * n) -{ - edge_t *e; - node_t *w,*x; - int i; - - if (ND_mark(n)) - return 0; - ND_mark(n) = TRUE; - ND_onstack(n) = TRUE; - for (i = 0; (e = ND_out(n).list[i]); i++) { - w = aghead(e); - if (ND_onstack(w)) { - dump_graph (g); - fprintf(stderr, "cycle: last edge %lx %s(%lx) %s(%lx)\n", - (uint64_t)e, - agnameof(n), (uint64_t)n, - agnameof(w), (uint64_t)w); - return w; - } - else { - if (ND_mark(w) == FALSE) { - x = checkdfs(g, w); - if (x) { - fprintf(stderr,"unwind %lx %s(%lx)\n", - (uint64_t)e, - agnameof(n), (uint64_t)n); - if (x != n) return x; - fprintf(stderr,"unwound to root\n"); - fflush(stderr); - abort(); - return 0; - } - } - } - } - ND_onstack(n) = FALSE; - return 0; -} - -void check_cycles(graph_t * g) -{ - node_t *n; - for (n = GD_nlist(g); n; n = ND_next(n)) - ND_mark(n) = ND_onstack(n) = FALSE; - for (n = GD_nlist(g); n; n = ND_next(n)) - checkdfs(g, n); -} -#endif /* DEBUG */ diff --git a/internal/ccall/common/output.c b/internal/ccall/common/output.c deleted file mode 100644 index c4d32b8..0000000 --- a/internal/ccall/common/output.c +++ /dev/null @@ -1,404 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "render.h" -#include "agxbuf.h" -#include -#include - -#define YDIR(y) (Y_invert ? (Y_off - (y)) : (y)) -#define YFDIR(y) (Y_invert ? (YF_off - (y)) : (y)) - -static double Y_off; /* ymin + ymax */ -static double YF_off; /* Y_off in inches */ - -double yDir (double y) -{ - return YDIR(y); -} - -static int (*putstr) (void *chan, const char *str); - -static void agputs (const char* s, FILE* fp) -{ - putstr ((void*)fp, s); -} -static void agputc (int c, FILE* fp) -{ - static char buf[2] = {'\0','\0'}; - buf[0] = c; - putstr ((void*)fp, buf); -} - - -static void printstring(FILE * f, char *prefix, char *s) -{ - if (prefix) agputs(prefix, f); - agputs(s, f); -} - -static void printint(FILE * f, char *prefix, int i) -{ - char buf[BUFSIZ]; - - if (prefix) agputs(prefix, f); - sprintf(buf, "%d", i); - agputs(buf, f); -} - -static void printdouble(FILE * f, char *prefix, double v) -{ - char buf[BUFSIZ]; - - if (prefix) agputs(prefix, f); - sprintf(buf, "%.5g", v); - agputs(buf, f); -} - -static void printpoint(FILE * f, pointf p) -{ - printdouble(f, " ", PS2INCH(p.x)); - printdouble(f, " ", PS2INCH(YDIR(p.y))); -} - -/* setYInvert: - * Set parameters used to flip coordinate system (y=0 at top). - * Values do not need to be unset, since if Y_invert is set, it's - * set for * all graphs during current run, so each will - * reinitialize the values for its bbox. - */ -static void setYInvert(graph_t * g) -{ - if (Y_invert) { - Y_off = GD_bb(g).UR.y + GD_bb(g).LL.y; - YF_off = PS2INCH(Y_off); - } -} - -/* canon: - * Canonicalize a string which may not have been allocated using agstrdup. - */ -static char* canon (graph_t *g, char* s) -{ - char* ns = agstrdup (g, s); - char* cs = agcanonStr (ns); - agstrfree (g, ns); - return cs; -} - -static void writenodeandport(FILE * f, node_t * node, char *port) -{ - char *name; - if (IS_CLUST_NODE(node)) - name = canon (agraphof(node), strchr(agnameof(node), ':') + 1); - else - name = agcanonStr (agnameof(node)); - printstring(f, " ", name); /* slimey i know */ - if (port && *port) - printstring(f, ":", agcanonStr(port)); -} - -/* _write_plain: - */ -void write_plain(GVJ_t * job, graph_t * g, FILE * f, boolean extend) -{ - int i, j, splinePoints; - char *tport, *hport; - node_t *n; - edge_t *e; - bezier bz; - pointf pt; - char *lbl; - char* fillcolor; - - putstr = g->clos->disc.io->putstr; -// setup_graph(job, g); - setYInvert(g); - pt = GD_bb(g).UR; - printdouble(f, "graph ", job->zoom); - printdouble(f, " ", PS2INCH(pt.x)); - printdouble(f, " ", PS2INCH(pt.y)); - agputc('\n', f); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (IS_CLUST_NODE(n)) - continue; - printstring(f, "node ", agcanonStr(agnameof(n))); - printpoint(f, ND_coord(n)); - if (ND_label(n)->html) /* if html, get original text */ - lbl = agcanonStr (agxget(n, N_label)); - else - lbl = canon(agraphof(n),ND_label(n)->text); - printdouble(f, " ", ND_width(n)); - printdouble(f, " ", ND_height(n)); - printstring(f, " ", lbl); - printstring(f, " ", late_nnstring(n, N_style, "solid")); - printstring(f, " ", ND_shape(n)->name); - printstring(f, " ", late_nnstring(n, N_color, DEFAULT_COLOR)); - fillcolor = late_nnstring(n, N_fillcolor, ""); - if (fillcolor[0] == '\0') - fillcolor = late_nnstring(n, N_color, DEFAULT_FILL); - printstring(f, " ", fillcolor); - agputc('\n', f); - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - - if (extend) { //assuming these two attrs have already been created by cgraph - if (!(tport = agget(e,"tailport"))) - tport = ""; - if (!(hport = agget(e,"headport"))) - hport = ""; - } - else - tport = hport = ""; - if (ED_spl(e)) { - splinePoints = 0; - for (i = 0; i < ED_spl(e)->size; i++) { - bz = ED_spl(e)->list[i]; - splinePoints += bz.size; - } - printstring(f, NULL, "edge"); - writenodeandport(f, agtail(e), tport); - writenodeandport(f, aghead(e), hport); - printint(f, " ", splinePoints); - for (i = 0; i < ED_spl(e)->size; i++) { - bz = ED_spl(e)->list[i]; - for (j = 0; j < bz.size; j++) - printpoint(f, bz.list[j]); - } - } - if (ED_label(e)) { - printstring(f, " ", canon(agraphof(agtail(e)),ED_label(e)->text)); - printpoint(f, ED_label(e)->pos); - } - printstring(f, " ", late_nnstring(e, E_style, "solid")); - printstring(f, " ", late_nnstring(e, E_color, DEFAULT_COLOR)); - agputc('\n', f); - } - } - agputs("stop\n", f); -} - -static void set_record_rects(node_t * n, field_t * f, agxbuf * xb) -{ - int i; - char buf[BUFSIZ]; - - if (f->n_flds == 0) { - sprintf(buf, "%.5g,%.5g,%.5g,%.5g ", - f->b.LL.x + ND_coord(n).x, - YDIR(f->b.LL.y + ND_coord(n).y), - f->b.UR.x + ND_coord(n).x, - YDIR(f->b.UR.y + ND_coord(n).y)); - agxbput(xb, buf); - } - for (i = 0; i < f->n_flds; i++) - set_record_rects(n, f->fld[i], xb); -} - -static void rec_attach_bb(graph_t * g, Agsym_t* bbsym, Agsym_t* lpsym, Agsym_t* lwsym, Agsym_t* lhsym) -{ - int c; - char buf[BUFSIZ]; - pointf pt; - - sprintf(buf, "%.5g,%.5g,%.5g,%.5g", GD_bb(g).LL.x, YDIR(GD_bb(g).LL.y), - GD_bb(g).UR.x, YDIR(GD_bb(g).UR.y)); - agxset(g, bbsym, buf); - if (GD_label(g) && GD_label(g)->text[0]) { - pt = GD_label(g)->pos; - sprintf(buf, "%.5g,%.5g", pt.x, YDIR(pt.y)); - agxset(g, lpsym, buf); - pt = GD_label(g)->dimen; - sprintf(buf, "%.2f", PS2INCH(pt.x)); - agxset (g, lwsym, buf); - sprintf(buf, "%.2f", PS2INCH(pt.y)); - agxset (g, lhsym, buf); - } - for (c = 1; c <= GD_n_cluster(g); c++) - rec_attach_bb(GD_clust(g)[c], bbsym, lpsym, lwsym, lhsym); -} - -void attach_attrs_and_arrows(graph_t* g, int* sp, int* ep) -{ - int e_arrows; /* graph has edges with end arrows */ - int s_arrows; /* graph has edges with start arrows */ - int i, j, sides; - char buf[BUFSIZ]; /* Used only for small strings */ - unsigned char xbuffer[BUFSIZ]; /* Initial buffer for xb */ - agxbuf xb; - node_t *n; - edge_t *e; - pointf ptf; - int dim3 = (GD_odim(g) >= 3); - Agsym_t* bbsym = NULL; - Agsym_t* lpsym = NULL; - Agsym_t* lwsym = NULL; - Agsym_t* lhsym = NULL; - - gv_fixLocale (1); - e_arrows = s_arrows = 0; - setYInvert(g); - agxbinit(&xb, BUFSIZ, xbuffer); - safe_dcl(g, AGNODE, "pos", ""); - safe_dcl(g, AGNODE, "rects", ""); - N_width = safe_dcl(g, AGNODE, "width", ""); - N_height = safe_dcl(g, AGNODE, "height", ""); - safe_dcl(g, AGEDGE, "pos", ""); - if (GD_has_labels(g) & NODE_XLABEL) - safe_dcl(g, AGNODE, "xlp", ""); - if (GD_has_labels(g) & EDGE_LABEL) - safe_dcl(g, AGEDGE, "lp", ""); - if (GD_has_labels(g) & EDGE_XLABEL) - safe_dcl(g, AGEDGE, "xlp", ""); - if (GD_has_labels(g) & HEAD_LABEL) - safe_dcl(g, AGEDGE, "head_lp", ""); - if (GD_has_labels(g) & TAIL_LABEL) - safe_dcl(g, AGEDGE, "tail_lp", ""); - if (GD_has_labels(g) & GRAPH_LABEL) { - lpsym = safe_dcl(g, AGRAPH, "lp", ""); - lwsym = safe_dcl(g, AGRAPH, "lwidth", ""); - lhsym = safe_dcl(g, AGRAPH, "lheight", ""); - } - bbsym = safe_dcl(g, AGRAPH, "bb", ""); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (dim3) { - int k; - - sprintf(buf, "%.5g,%.5g,%.5g", ND_coord(n).x, YDIR(ND_coord(n).y), POINTS_PER_INCH*(ND_pos(n)[2])); - agxbput (&xb, buf); - for (k = 3; k < GD_odim(g); k++) { - sprintf(buf, ",%.5g", POINTS_PER_INCH*(ND_pos(n)[k])); - agxbput (&xb, buf); - } - agset(n, "pos", agxbuse(&xb)); - } else { - sprintf(buf, "%.5g,%.5g", ND_coord(n).x, YDIR(ND_coord(n).y)); - agset(n, "pos", buf); - } - sprintf(buf, "%.5g", PS2INCH(ND_ht(n))); - agxset(n, N_height, buf); - sprintf(buf, "%.5g", PS2INCH(ND_lw(n) + ND_rw(n))); - agxset(n, N_width, buf); - if (ND_xlabel(n) && ND_xlabel(n)->set) { - ptf = ND_xlabel(n)->pos; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agset(n, "xlp", buf); - } - if (strcmp(ND_shape(n)->name, "record") == 0) { - set_record_rects(n, ND_shape_info(n), &xb); - agxbpop(&xb); /* get rid of last space */ - agset(n, "rects", agxbuse(&xb)); - } else { - polygon_t *poly; - int i; - if (N_vertices && isPolygon(n)) { - poly = (polygon_t *) ND_shape_info(n); - sides = poly->sides; - if (sides < 3) { - char *p = agget(n, "samplepoints"); - if (p) - sides = atoi(p); - else - sides = 8; - if (sides < 3) - sides = 8; - } - for (i = 0; i < sides; i++) { - if (i > 0) - agxbputc(&xb, ' '); - if (poly->sides >= 3) - sprintf(buf, "%.5g %.5g", - PS2INCH(poly->vertices[i].x), - YFDIR(PS2INCH(poly->vertices[i].y))); - else - sprintf(buf, "%.5g %.5g", - ND_width(n) / 2.0 * cos(i / (double) sides * M_PI * 2.0), - YFDIR(ND_height(n) / 2.0 * sin(i / (double) sides * M_PI * 2.0))); - agxbput(&xb, buf); - } - agxset(n, N_vertices, agxbuse(&xb)); - } - } - if (State >= GVSPLINES) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (ED_edge_type(e) == IGNORED) - continue; - if (ED_spl(e) == NULL) - continue; /* reported in postproc */ - for (i = 0; i < ED_spl(e)->size; i++) { - if (i > 0) - agxbputc(&xb, ';'); - if (ED_spl(e)->list[i].sflag) { - s_arrows = 1; - sprintf(buf, "s,%.5g,%.5g ", - ED_spl(e)->list[i].sp.x, - YDIR(ED_spl(e)->list[i].sp.y)); - agxbput(&xb, buf); - } - if (ED_spl(e)->list[i].eflag) { - e_arrows = 1; - sprintf(buf, "e,%.5g,%.5g ", - ED_spl(e)->list[i].ep.x, - YDIR(ED_spl(e)->list[i].ep.y)); - agxbput(&xb, buf); - } - for (j = 0; j < ED_spl(e)->list[i].size; j++) { - if (j > 0) - agxbputc(&xb, ' '); - ptf = ED_spl(e)->list[i].list[j]; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agxbput(&xb, buf); - } - } - agset(e, "pos", agxbuse(&xb)); - if (ED_label(e)) { - ptf = ED_label(e)->pos; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agset(e, "lp", buf); - } - if (ED_xlabel(e) && ED_xlabel(e)->set) { - ptf = ED_xlabel(e)->pos; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agset(e, "xlp", buf); - } - if (ED_head_label(e)) { - ptf = ED_head_label(e)->pos; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agset(e, "head_lp", buf); - } - if (ED_tail_label(e)) { - ptf = ED_tail_label(e)->pos; - sprintf(buf, "%.5g,%.5g", ptf.x, YDIR(ptf.y)); - agset(e, "tail_lp", buf); - } - } - } - } - rec_attach_bb(g, bbsym, lpsym, lwsym, lhsym); - agxbfree(&xb); - - if (HAS_CLUST_EDGE(g)) - undoClusterEdges(g); - - *sp = s_arrows; - *ep = e_arrows; - gv_fixLocale (0); -} - -void attach_attrs(graph_t * g) -{ - int e, s; - attach_attrs_and_arrows (g, &s, &e); -} - diff --git a/internal/ccall/common/pointset.c b/internal/ccall/common/pointset.c deleted file mode 100644 index 257d189..0000000 --- a/internal/ccall/common/pointset.c +++ /dev/null @@ -1,226 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" -#include "pointset.h" - -typedef struct { - Dtlink_t link; - point id; -} pair; - -static pair *mkPair(point p) -{ - pair *pp; - - pp = NEW(pair); - pp->id = p; - return pp; -} - -static void freePair(Dt_t * d, pair* pp, Dtdisc_t * disc) -{ - free (pp); -} - -static int cmppair(Dt_t * d, point * key1, point * key2, Dtdisc_t * disc) -{ - if (key1->x > key2->x) - return 1; - else if (key1->x < key2->x) - return -1; - else if (key1->y > key2->y) - return 1; - else if (key1->y < key2->y) - return -1; - else - return 0; -} - -static Dtdisc_t intPairDisc = { - offsetof(pair, id), - sizeof(point), - offsetof(pair, link), - 0, - (Dtfree_f) freePair, - (Dtcompar_f) cmppair, - 0, - 0, - 0 -}; - -PointSet *newPS(void) -{ - return (dtopen(&intPairDisc, Dtoset)); -} - -void freePS(PointSet * ps) -{ - dtclose(ps); -} - -void insertPS(PointSet * ps, point pt) -{ - pair *pp; - - pp = mkPair(pt); - if (dtinsert(ps, pp) != pp) - free(pp); -} - -void addPS(PointSet * ps, int x, int y) -{ - point pt; - pair *pp; - - pt.x = x; - pt.y = y; - pp = mkPair(pt); - if (dtinsert(ps, pp) != pp) - free(pp); -} - -int inPS(PointSet * ps, point pt) -{ - pair p; - p.id = pt; - return ((dtsearch(ps, &p)) ? 1 : 0); -} - -int isInPS(PointSet * ps, int x, int y) -{ - pair p; - p.id.x = x; - p.id.y = y; - return ((dtsearch(ps, &p)) ? 1 : 0); -} - -int sizeOf(PointSet * ps) -{ - return dtsize(ps); -} - -point *pointsOf(PointSet * ps) -{ - int n = dtsize(ps); - point *pts = N_NEW(n, point); - pair *p; - point *pp = pts; - - for (p = (pair *) dtflatten(ps); p; - p = (pair *) dtlink(ps, (Dtlink_t *) p)) { - *pp++ = p->id; - } - - return pts; -} - -typedef struct { - Dtlink_t link; - point id; - int v; -} mpair; - -typedef struct { - Dtdisc_t disc; - mpair *flist; -} MPairDisc; - -static mpair *mkMPair(Dt_t * d, mpair * obj, MPairDisc * disc) -{ - mpair *ap; - - if (disc->flist) { - ap = disc->flist; - disc->flist = (mpair *) (ap->link.right); - } else - ap = GNEW(mpair); - ap->id = obj->id; - ap->v = obj->v; - return ap; -} - -static void freeMPair(Dt_t * d, mpair * ap, MPairDisc * disc) -{ - ap->link.right = (Dtlink_t *) (disc->flist); - disc->flist = ap; -} - -static Dtdisc_t intMPairDisc = { - offsetof(mpair, id), - sizeof(point), - offsetof(mpair, link), - (Dtmake_f) mkMPair, - (Dtfree_f) freeMPair, - (Dtcompar_f) cmppair, - 0, - 0, - 0 -}; - -PointMap *newPM(void) -{ - MPairDisc *dp = GNEW(MPairDisc); - - dp->disc = intMPairDisc; - dp->flist = 0; - - return (dtopen(&(dp->disc), Dtoset)); -} - -void clearPM(PointMap * ps) -{ - dtclear(ps); -} - -void freePM(PointMap * ps) -{ - MPairDisc *dp = (MPairDisc *) (ps->disc); - mpair *p; - mpair *next; - - dtclose(ps); - for (p = dp->flist; p; p = next) { - next = (mpair *) (p->link.right); - free(p); - } - free(dp); -} - -int updatePM(PointMap * pm, int x, int y, int v) -{ - mpair *p; - mpair dummy; - int old; - - dummy.id.x = x; - dummy.id.y = y; - dummy.v = v; - p = dtinsert(pm, &dummy); - old = p->v; - p->v = v; - return old; -} - -int insertPM(PointMap * pm, int x, int y, int v) -{ - mpair *p; - mpair dummy; - - dummy.id.x = x; - dummy.id.y = y; - dummy.v = v; - p = dtinsert(pm, &dummy); - return p->v; -} diff --git a/internal/ccall/common/pointset.h b/internal/ccall/common/pointset.h deleted file mode 100644 index c6bc2d9..0000000 --- a/internal/ccall/common/pointset.h +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _POINTSET_H -#define _POINTSET_H 1 - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - typedef Dict_t PointSet; - typedef Dict_t PointMap; -#ifdef GVDLL -#define extern __declspec(dllexport) -#else -#define extern -#endif - -/*visual studio*/ -#ifdef _WIN32 -#ifndef GVC_EXPORTS -#undef extern -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - - extern PointSet *newPS(void); - extern void freePS(PointSet *); - extern void insertPS(PointSet *, point); - extern void addPS(PointSet *, int, int); - extern int inPS(PointSet *, point); - extern int isInPS(PointSet *, int, int); - extern int sizeOf(PointSet *); - extern point *pointsOf(PointSet *); - - extern PointMap *newPM(void); - extern void clearPM(PointMap *); - extern void freePM(PointMap *); - extern int insertPM(PointMap *, int, int, int); - extern int updatePM(PointMap * pm, int x, int y, int v); - -#undef extern -#ifdef __cplusplus -} -#endif - -#endif /* _POINTSET_H */ diff --git a/internal/ccall/common/postproc.c b/internal/ccall/common/postproc.c deleted file mode 100644 index 0a57f76..0000000 --- a/internal/ccall/common/postproc.c +++ /dev/null @@ -1,763 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" -#include "xlabels.h" - -static int Rankdir; -static boolean Flip; -static pointf Offset; - -static void place_flip_graph_label(graph_t * g); - -#define M1 \ -"/pathbox {\n\ - /Y exch %.5g sub def\n\ - /X exch %.5g sub def\n\ - /y exch %.5g sub def\n\ - /x exch %.5g sub def\n\ - newpath x y moveto\n\ - X y lineto\n\ - X Y lineto\n\ - x Y lineto\n\ - closepath stroke\n \ -} def\n\ -/dbgstart { gsave %.5g %.5g translate } def\n\ -/arrowlength 10 def\n\ -/arrowwidth arrowlength 2 div def\n\ -/arrowhead {\n\ - gsave\n\ - rotate\n\ - currentpoint\n\ - newpath\n\ - moveto\n\ - arrowlength arrowwidth 2 div rlineto\n\ - 0 arrowwidth neg rlineto\n\ - closepath fill\n\ - grestore\n\ -} bind def\n\ -/makearrow {\n\ - currentpoint exch pop sub exch currentpoint pop sub atan\n\ - arrowhead\n\ -} bind def\n\ -/point {\ - newpath\ - 2 0 360 arc fill\ -} def\ -/makevec {\n\ - /Y exch def\n\ - /X exch def\n\ - /y exch def\n\ - /x exch def\n\ - newpath x y moveto\n\ - X Y lineto stroke\n\ - X Y moveto\n\ - x y makearrow\n\ -} def\n" - -#define M2 \ -"/pathbox {\n\ - /X exch neg %.5g sub def\n\ - /Y exch %.5g sub def\n\ - /x exch neg %.5g sub def\n\ - /y exch %.5g sub def\n\ - newpath x y moveto\n\ - X y lineto\n\ - X Y lineto\n\ - x Y lineto\n\ - closepath stroke\n\ -} def\n" - -static pointf map_point(pointf p) -{ - p = ccwrotatepf(p, Rankdir * 90); - p.x -= Offset.x; - p.y -= Offset.y; - return p; -} - -static void map_edge(edge_t * e) -{ - int j, k; - bezier bz; - - if (ED_spl(e) == NULL) { - if ((Concentrate == FALSE) && (ED_edge_type(e) != IGNORED)) - agerr(AGERR, "lost %s %s edge\n", agnameof(agtail(e)), - agnameof(aghead(e))); - return; - } - for (j = 0; j < ED_spl(e)->size; j++) { - bz = ED_spl(e)->list[j]; - for (k = 0; k < bz.size; k++) - bz.list[k] = map_point(bz.list[k]); - if (bz.sflag) - ED_spl(e)->list[j].sp = map_point(ED_spl(e)->list[j].sp); - if (bz.eflag) - ED_spl(e)->list[j].ep = map_point(ED_spl(e)->list[j].ep); - } - if (ED_label(e)) - ED_label(e)->pos = map_point(ED_label(e)->pos); - if (ED_xlabel(e)) - ED_xlabel(e)->pos = map_point(ED_xlabel(e)->pos); - /* vladimir */ - if (ED_head_label(e)) - ED_head_label(e)->pos = map_point(ED_head_label(e)->pos); - if (ED_tail_label(e)) - ED_tail_label(e)->pos = map_point(ED_tail_label(e)->pos); -} - -void translate_bb(graph_t * g, int rankdir) -{ - int c; - boxf bb, new_bb; - - bb = GD_bb(g); - if (rankdir == RANKDIR_LR || rankdir == RANKDIR_BT) { - new_bb.LL = map_point(pointfof(bb.LL.x, bb.UR.y)); - new_bb.UR = map_point(pointfof(bb.UR.x, bb.LL.y)); - } else { - new_bb.LL = map_point(pointfof(bb.LL.x, bb.LL.y)); - new_bb.UR = map_point(pointfof(bb.UR.x, bb.UR.y)); - } - GD_bb(g) = new_bb; - if (GD_label(g)) { - GD_label(g)->pos = map_point(GD_label(g)->pos); - } - for (c = 1; c <= GD_n_cluster(g); c++) - translate_bb(GD_clust(g)[c], rankdir); -} - -/* translate_drawing: - * Translate and/or rotate nodes, spline points, and bbox info if - * necessary. Also, if Rankdir (!= RANKDIR_BT), reset ND_lw, ND_rw, - * and ND_ht to correct value. - */ -static void translate_drawing(graph_t * g) -{ - node_t *v; - edge_t *e; - int shift = (Offset.x || Offset.y); - - if (!shift && !Rankdir) - return; - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (Rankdir) - gv_nodesize(v, FALSE); - ND_coord(v) = map_point(ND_coord(v)); - if (ND_xlabel(v)) - ND_xlabel(v)->pos = map_point(ND_xlabel(v)->pos); - if (State == GVSPLINES) - for (e = agfstout(g, v); e; e = agnxtout(g, e)) - map_edge(e); - } - translate_bb(g, GD_rankdir(g)); -} - -/* place_root_label: - * Set position of root graph label. - * Note that at this point, after translate_drawing, a - * flipped drawing has been transposed, so we don't have - * to worry about switching x and y. - */ -static void place_root_label(graph_t * g, pointf d) -{ - pointf p; - - if (GD_label_pos(g) & LABEL_AT_RIGHT) { - p.x = GD_bb(g).UR.x - d.x / 2; - } else if (GD_label_pos(g) & LABEL_AT_LEFT) { - p.x = GD_bb(g).LL.x + d.x / 2; - } else { - p.x = (GD_bb(g).LL.x + GD_bb(g).UR.x) / 2; - } - - if (GD_label_pos(g) & LABEL_AT_TOP) { - p.y = GD_bb(g).UR.y - d.y / 2; - } else { - p.y = GD_bb(g).LL.y + d.y / 2; - } - - GD_label(g)->pos = p; - GD_label(g)->set = TRUE; -} - -/* centerPt: - * Calculate the center point of the xlabel. The returned positions for - * xlabels always correspond to the lower left corner. - */ -static pointf -centerPt (xlabel_t* xlp) { - pointf p; - - p = xlp->pos; - p.x += (xlp->sz.x)/2.0; - p.y += (xlp->sz.y)/2.0; - - return p; -} - -static int -printData (object_t* objs, int n_objs, xlabel_t* lbls, int n_lbls, - label_params_t* params) { - int i; - xlabel_t* xp; - fprintf (stderr, "%d objs %d xlabels force=%d bb=(%.02f,%.02f) (%.02f,%.02f)\n", - n_objs, n_lbls, params->force, params->bb.LL.x, params->bb.LL.y, - params->bb.UR.x, params->bb.UR.y); - if (Verbose < 2) return 0; - fprintf(stderr, "objects\n"); - for (i = 0; i < n_objs; i++) { - xp = objs->lbl; - fprintf (stderr, " [%d] (%.02f,%.02f) (%.02f,%.02f) %p \"%s\"\n", - i, objs->pos.x,objs->pos.y,objs->sz.x,objs->sz.y, objs->lbl, - (xp?((textlabel_t*)(xp->lbl))->text:"")); - objs++; - } - fprintf(stderr, "xlabels\n"); - for (i = 0; i < n_lbls; i++) { - fprintf (stderr, " [%d] %p set %d (%.02f,%.02f) (%.02f,%.02f) %s\n", - i, lbls, lbls->set, lbls->pos.x,lbls->pos.y, lbls->sz.x,lbls->sz.y, ((textlabel_t*)lbls->lbl)->text); - lbls++; - } - return 0; -} - -static pointf -edgeTailpoint (Agedge_t* e) -{ - splines *spl; - bezier *bez; - - if ((spl = getsplinepoints(e)) == NULL) { - pointf p; - p.x = p.y = 0; - return p; - } - bez = &spl->list[0]; - if (bez->sflag) { - return bez->sp; - } else { - return bez->list[0]; - } -} - -static pointf -edgeHeadpoint (Agedge_t* e) -{ - splines *spl; - bezier *bez; - - if ((spl = getsplinepoints(e)) == NULL) { - pointf p; - p.x = p.y = 0; - return p; - } - bez = &spl->list[spl->size - 1]; - if (bez->eflag) { - return bez->ep; - } else { - return bez->list[bez->size - 1]; - } -} - -/* adjustBB: - */ -static boxf -adjustBB (object_t* objp, boxf bb) -{ - pointf ur; - - /* Adjust bounding box */ - bb.LL.x = MIN(bb.LL.x, objp->pos.x); - bb.LL.y = MIN(bb.LL.y, objp->pos.y); - ur.x = objp->pos.x + objp->sz.x; - ur.y = objp->pos.y + objp->sz.y; - bb.UR.x = MAX(bb.UR.x, ur.x); - bb.UR.y = MAX(bb.UR.y, ur.y); - - return bb; -} - -/* addXLabel: - * Set up xlabel_t object and connect with related object. - * If initObj is set, initialize the object. - */ -static void -addXLabel (textlabel_t* lp, object_t* objp, xlabel_t* xlp, int initObj, pointf pos) -{ - if (initObj) { - objp->sz.x = 0; - objp->sz.y = 0; - objp->pos = pos; - } - - if (Flip) { - xlp->sz.x = lp->dimen.y; - xlp->sz.y = lp->dimen.x; - } - else { - xlp->sz = lp->dimen; - } - xlp->lbl = lp; - xlp->set = 0; - objp->lbl = xlp; -} - -/* addLabelObj: - * Set up obstacle object based on set external label. - * This includes dot edge labels. - * Use label information to determine size and position of object. - * Then adjust given bounding box bb to include label and return new bb. - */ -static boxf -addLabelObj (textlabel_t* lp, object_t* objp, boxf bb) -{ - if (Flip) { - objp->sz.x = lp->dimen.y; - objp->sz.y = lp->dimen.x; - } - else { - objp->sz.x = lp->dimen.x; - objp->sz.y = lp->dimen.y; - } - objp->pos = lp->pos; - objp->pos.x -= (objp->sz.x) / 2.0; - objp->pos.y -= (objp->sz.y) / 2.0; - - return adjustBB(objp, bb); -} - -/* addNodeOjb: - * Set up obstacle object based on a node. - * Use node information to determine size and position of object. - * Then adjust given bounding box bb to include label and return new bb. - */ -static boxf -addNodeObj (node_t* np, object_t* objp, boxf bb) -{ - if (Flip) { - objp->sz.x = INCH2PS(ND_height(np)); - objp->sz.y = INCH2PS(ND_width(np)); - } - else { - objp->sz.x = INCH2PS(ND_width(np)); - objp->sz.y = INCH2PS(ND_height(np)); - } - objp->pos = ND_coord(np); - objp->pos.x -= (objp->sz.x) / 2.0; - objp->pos.y -= (objp->sz.y) / 2.0; - - return adjustBB(objp, bb); -} - -typedef struct { - boxf bb; - object_t* objp; -} cinfo_t; - -static cinfo_t -addClusterObj (Agraph_t* g, cinfo_t info) -{ - int c; - - for (c = 1; c <= GD_n_cluster(g); c++) - info = addClusterObj (GD_clust(g)[c], info); - if ((g != agroot(g)) && (GD_label(g)) && GD_label(g)->set) { - object_t* objp = info.objp; - info.bb = addLabelObj (GD_label(g), objp, info.bb); - info.objp++; - } - - return info; -} - -static int -countClusterLabels (Agraph_t* g) -{ - int c, i = 0; - if ((g != agroot(g)) && (GD_label(g)) && GD_label(g)->set) - i++; - for (c = 1; c <= GD_n_cluster(g); c++) - i += countClusterLabels (GD_clust(g)[c]); - return i; -} - -/* addXLabels: - * Position xlabels and any unpositioned edge labels using - * a map placement algorithm to avoid overlap. - * - * TODO: interaction with spline=ortho - */ - /* True if edges geometries were computed and this edge has a geometry */ -#define HAVE_EDGE(ep) ((et != ET_NONE) && (ED_spl(ep) != NULL)) - -static void addXLabels(Agraph_t * gp) -{ - Agnode_t *np; - Agedge_t *ep; - int cnt, i, n_objs, n_lbls; - int n_nlbls = 0; /* # of unset node xlabels */ - int n_elbls = 0; /* # of unset edge labels or xlabels */ - int n_set_lbls = 0; /* # of set xlabels and edge labels */ - int n_clbls = 0; /* # of set cluster labels */ - boxf bb; - pointf ur; - textlabel_t* lp; - label_params_t params; - object_t* objs; - xlabel_t* lbls; - object_t* objp; - xlabel_t* xlp; - Agsym_t* force; - int et = EDGE_TYPE(gp); - - if (!(GD_has_labels(gp) & NODE_XLABEL) && - !(GD_has_labels(gp) & EDGE_XLABEL) && - !(GD_has_labels(gp) & TAIL_LABEL) && - !(GD_has_labels(gp) & HEAD_LABEL) && - (!(GD_has_labels(gp) & EDGE_LABEL) || EdgeLabelsDone)) - return; - - for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) { - if (ND_xlabel(np)) { - if (ND_xlabel(np)->set) - n_set_lbls++; - else - n_nlbls++; - } - for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) { - if (ED_xlabel(ep)) { - if (ED_xlabel(ep)->set) - n_set_lbls++; - else if (HAVE_EDGE(ep)) - n_elbls++; - } - if (ED_head_label(ep)) { - if (ED_head_label(ep)->set) - n_set_lbls++; - else if (HAVE_EDGE(ep)) - n_elbls++; - } - if (ED_tail_label(ep)) { - if (ED_tail_label(ep)->set) - n_set_lbls++; - else if (HAVE_EDGE(ep)) - n_elbls++; - } - if (ED_label(ep)) { - if (ED_label(ep)->set) - n_set_lbls++; - else if (HAVE_EDGE(ep)) - n_elbls++; - } - } - } - if (GD_has_labels(gp) & GRAPH_LABEL) - n_clbls = countClusterLabels (gp); - - /* A label for each unpositioned external label */ - n_lbls = n_nlbls + n_elbls; - if (n_lbls == 0) return; - - /* An object for each node, each positioned external label, any cluster label, - * and all unset edge labels and xlabels. - */ - n_objs = agnnodes(gp) + n_set_lbls + n_clbls + n_elbls; - objp = objs = N_NEW(n_objs, object_t); - xlp = lbls = N_NEW(n_lbls, xlabel_t); - bb.LL = pointfof(INT_MAX, INT_MAX); - bb.UR = pointfof(-INT_MAX, -INT_MAX); - - for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) { - - bb = addNodeObj (np, objp, bb); - if ((lp = ND_xlabel(np))) { - if (lp->set) { - objp++; - bb = addLabelObj (lp, objp, bb); - } - else { - addXLabel (lp, objp, xlp, 0, ur); - xlp++; - } - } - objp++; - for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) { - if ((lp = ED_label(ep))) { - if (lp->set) { - bb = addLabelObj (lp, objp, bb); - } - else if (HAVE_EDGE(ep)) { - addXLabel (lp, objp, xlp, 1, edgeMidpoint(gp, ep)); - xlp++; - } - else { - agerr(AGWARN, "no position for edge with label %s", - ED_label(ep)->text); - continue; - } - objp++; - } - if ((lp = ED_tail_label(ep))) { - if (lp->set) { - bb = addLabelObj (lp, objp, bb); - } - else if (HAVE_EDGE(ep)) { - addXLabel (lp, objp, xlp, 1, edgeTailpoint(ep)); - xlp++; - } - else { - agerr(AGWARN, "no position for edge with tail label %s", - ED_tail_label(ep)->text); - continue; - } - objp++; - } - if ((lp = ED_head_label(ep))) { - if (lp->set) { - bb = addLabelObj (lp, objp, bb); - } - else if (HAVE_EDGE(ep)) { - addXLabel (lp, objp, xlp, 1, edgeHeadpoint(ep)); - xlp++; - } - else { - agerr(AGWARN, "no position for edge with head label %s", - ED_head_label(ep)->text); - continue; - } - objp++; - } - if ((lp = ED_xlabel(ep))) { - if (lp->set) { - bb = addLabelObj (lp, objp, bb); - } - else if (HAVE_EDGE(ep)) { - addXLabel (lp, objp, xlp, 1, edgeMidpoint(gp, ep)); - xlp++; - } - else { - agerr(AGWARN, "no position for edge with xlabel %s", - ED_xlabel(ep)->text); - continue; - } - objp++; - } - } - } - if (n_clbls) { - cinfo_t info; - info.bb = bb; - info.objp = objp; - info = addClusterObj (gp, info); - bb = info.bb; - } - - force = agfindgraphattr(gp, "forcelabels"); - - params.force = late_bool(gp, force, TRUE); - params.bb = bb; - placeLabels(objs, n_objs, lbls, n_lbls, ¶ms); - if (Verbose) - printData(objs, n_objs, lbls, n_lbls, ¶ms); - - xlp = lbls; - cnt = 0; - for (i = 0; i < n_lbls; i++) { - if (xlp->set) { - cnt++; - lp = (textlabel_t *) (xlp->lbl); - lp->set = 1; - lp->pos = centerPt(xlp); - updateBB (gp, lp); - } - xlp++; - } - if (Verbose) - fprintf (stderr, "%d out of %d labels positioned.\n", cnt, n_lbls); - else if (cnt != n_lbls) - agerr(AGWARN, "%d out of %d exterior labels positioned.\n", cnt, n_lbls); - free(objs); - free(lbls); -} - -/* gv_postprocess: - * Set graph and cluster label positions. - * Add space for root graph label and translate graph accordingly. - * Set final nodesize using ns. - * Assumes the boxes of all clusters have been computed. - * When done, the bounding box of g has LL at origin. - */ -void gv_postprocess(Agraph_t * g, int allowTranslation) -{ - double diff; - pointf dimen = { 0., 0. }; - - - Rankdir = GD_rankdir(g); - Flip = GD_flip(g); - /* Handle cluster labels */ - if (Flip) - place_flip_graph_label(g); - else - place_graph_label(g); - - /* Everything has been placed except the root graph label, if any. - * The graph positions have not yet been rotated back if necessary. - */ - addXLabels(g); - - /* Add space for graph label if necessary */ - if (GD_label(g) && !GD_label(g)->set) { - dimen = GD_label(g)->dimen; - PAD(dimen); - if (Flip) { - if (GD_label_pos(g) & LABEL_AT_TOP) { - GD_bb(g).UR.x += dimen.y; - } else { - GD_bb(g).LL.x -= dimen.y; - } - - if (dimen.x > (GD_bb(g).UR.y - GD_bb(g).LL.y)) { - diff = dimen.x - (GD_bb(g).UR.y - GD_bb(g).LL.y); - diff = diff / 2.; - GD_bb(g).LL.y -= diff; - GD_bb(g).UR.y += diff; - } - } else { - if (GD_label_pos(g) & LABEL_AT_TOP) { - if (Rankdir == RANKDIR_TB) - GD_bb(g).UR.y += dimen.y; - else - GD_bb(g).LL.y -= dimen.y; - } else { - if (Rankdir == RANKDIR_TB) - GD_bb(g).LL.y -= dimen.y; - else - GD_bb(g).UR.y += dimen.y; - } - - if (dimen.x > (GD_bb(g).UR.x - GD_bb(g).LL.x)) { - diff = dimen.x - (GD_bb(g).UR.x - GD_bb(g).LL.x); - diff = diff / 2.; - GD_bb(g).LL.x -= diff; - GD_bb(g).UR.x += diff; - } - } - } - if (allowTranslation) { - switch (Rankdir) { - case RANKDIR_TB: - Offset = GD_bb(g).LL; - break; - case RANKDIR_LR: - Offset = pointfof(-GD_bb(g).UR.y, GD_bb(g).LL.x); - break; - case RANKDIR_BT: - Offset = pointfof(GD_bb(g).LL.x, -GD_bb(g).UR.y); - break; - case RANKDIR_RL: - Offset = pointfof(GD_bb(g).LL.y, GD_bb(g).LL.x); - break; - } - translate_drawing(g); - } - if (GD_label(g) && !GD_label(g)->set) - place_root_label(g, dimen); - - if (Show_boxes) { - char buf[BUFSIZ]; - if (Flip) - sprintf(buf, M2, Offset.x, Offset.y, Offset.x, Offset.y); - else - sprintf(buf, M1, Offset.y, Offset.x, Offset.y, Offset.x, - -Offset.x, -Offset.y); - Show_boxes[0] = strdup(buf); - } -} - -/* dotneato_postprocess: - */ -void dotneato_postprocess(Agraph_t * g) -{ - gv_postprocess(g, 1); -} - -/* place_flip_graph_label: - * Put cluster labels recursively in the flip case. - */ -static void place_flip_graph_label(graph_t * g) -{ - int c; - pointf p, d; - - if ((g != agroot(g)) && (GD_label(g)) && !GD_label(g)->set) { - if (GD_label_pos(g) & LABEL_AT_TOP) { - d = GD_border(g)[RIGHT_IX]; - p.x = GD_bb(g).UR.x - d.x / 2; - } else { - d = GD_border(g)[LEFT_IX]; - p.x = GD_bb(g).LL.x + d.x / 2; - } - - if (GD_label_pos(g) & LABEL_AT_RIGHT) { - p.y = GD_bb(g).LL.y + d.y / 2; - } else if (GD_label_pos(g) & LABEL_AT_LEFT) { - p.y = GD_bb(g).UR.y - d.y / 2; - } else { - p.y = (GD_bb(g).LL.y + GD_bb(g).UR.y) / 2; - } - GD_label(g)->pos = p; - GD_label(g)->set = TRUE; - } - - for (c = 1; c <= GD_n_cluster(g); c++) - place_flip_graph_label(GD_clust(g)[c]); -} - -/* place_graph_label: - * Put cluster labels recursively in the non-flip case. - * The adjustments to the bounding boxes should no longer - * be necessary, since we now guarantee the label fits in - * the cluster. - */ -void place_graph_label(graph_t * g) -{ - int c; - pointf p, d; - - if ((g != agroot(g)) && (GD_label(g)) && !GD_label(g)->set) { - if (GD_label_pos(g) & LABEL_AT_TOP) { - d = GD_border(g)[TOP_IX]; - p.y = GD_bb(g).UR.y - d.y / 2; - } else { - d = GD_border(g)[BOTTOM_IX]; - p.y = GD_bb(g).LL.y + d.y / 2; - } - - if (GD_label_pos(g) & LABEL_AT_RIGHT) { - p.x = GD_bb(g).UR.x - d.x / 2; - } else if (GD_label_pos(g) & LABEL_AT_LEFT) { - p.x = GD_bb(g).LL.x + d.x / 2; - } else { - p.x = (GD_bb(g).LL.x + GD_bb(g).UR.x) / 2; - } - GD_label(g)->pos = p; - GD_label(g)->set = TRUE; - } - - for (c = 1; c <= GD_n_cluster(g); c++) - place_graph_label(GD_clust(g)[c]); -} diff --git a/internal/ccall/common/ps_font_equiv.h b/internal/ccall/common/ps_font_equiv.h deleted file mode 100644 index acc8c0f..0000000 --- a/internal/ccall/common/ps_font_equiv.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifdef DARWIN -#define TIMES "Times" -#elif defined(_WIN32) -#define TIMES "Times New Roman" -#else -#define TIMES "Times" -#endif -#define COURIER "Courier" -#define HELVETICA "Helvetica" -#define SYMBOL "Symbol" -#define PALATINO "Palatino Linotype" -{"AvantGarde-Book", "URW Gothic L", "book", 0, 0, 4 , "sans-Serif", 0, 0}, -{"AvantGarde-BookOblique", "URW Gothic L", "book", 0, "oblique", 5 , "sans-Serif", 0, "italic"}, -{"AvantGarde-Demi", "URW Gothic L", "demi", 0, 0, 6 , "sans-Serif", "bold", 0}, -{"AvantGarde-DemiOblique", "URW Gothic L", "demi", 0, "oblique", 7 , "sans-Serif", "bold", "italic"}, -{"Bookman-Demi", "URW Bookman L", "demi", 0, 0, 10, "serif", "bold", 0}, -{"Bookman-DemiItalic", "URW Bookman L", "demi", 0, "italic", 11, "serif", "bold", "italic"}, -{"Bookman-Light", "URW Bookman L", "light", 0, 0, 8 , "serif", 0, 0}, -{"Bookman-LightItalic", "URW Bookman L", "light", 0, "italic", 9 , "serif", 0, "italic"}, -{"Courier", COURIER, 0, 0, 0, 12, "monospace", 0, 0}, -{"Courier-Bold", COURIER, "bold", 0, 0, 14, "monospace", "bold", 0}, -{"Courier-BoldOblique", COURIER, "bold", 0, "oblique", 15, "monospace", "bold", "italic"}, -{"Courier-Oblique", COURIER, 0, 0, "oblique", 13, "monospace", 0, "italic"}, -{"Helvetica", HELVETICA, 0, 0, 0, 16, "sans-Serif", 0, 0}, -{"Helvetica-Bold", HELVETICA, "bold", 0, 0, 18, "sans-Serif", "bold", 0}, -{"Helvetica-BoldOblique", HELVETICA, "bold", 0, "oblique", 19, "sans-Serif", "bold", "italic"}, -{"Helvetica-Narrow", HELVETICA, 0, "condensed", 0, 20, "sans-Serif", 0, 0}, -{"Helvetica-Narrow-Bold", HELVETICA, "bold", "condensed", 0, 22, "sans-Serif", "bold", 0}, -{"Helvetica-Narrow-BoldOblique",HELVETICA, "bold", "condensed", "oblique", 23, "sans-Serif", "bold", "italic"}, -{"Helvetica-Narrow-Oblique", HELVETICA, 0, "condensed", "oblique", 21, "sans-Serif", 0, "italic"}, -{"Helvetica-Oblique", HELVETICA, 0, 0, "oblique", 17, "sans-Serif", 0, "italic"}, -{"NewCenturySchlbk-Bold", "Century Schoolbook L", "bold", 0, 0, 26, "serif", "bold", 0}, -{"NewCenturySchlbk-BoldItalic", "Century Schoolbook L", "bold", 0, "italic", 27, "serif", "bold", "italic"}, -{"NewCenturySchlbk-Italic", "Century Schoolbook L", 0, 0, "italic", 25, "serif", 0, "italic"}, -{"NewCenturySchlbk-Roman", "Century Schoolbook L", "roman", 0, 0, 24, "serif", 0, 0}, -{"Palatino-Bold", PALATINO, "bold", 0, 0, 30, "serif", "bold", 0}, -{"Palatino-BoldItalic", PALATINO, "bold", 0, "italic", 31, "serif", "bold", "italic"}, -{"Palatino-Italic", PALATINO, 0, 0, "italic", 29, "serif", 0, "italic"}, -{"Palatino-Roman", PALATINO, "roman", 0, 0, 28, "serif", 0, 0}, -{"Symbol", SYMBOL, 0, 0, 0, 32, "fantasy", 0, 0}, -{"Times-Bold", "Times", "bold", 0, 0, 2 , "serif", "bold", 0}, -{"Times-BoldItalic", "Times", "bold", 0, "italic", 3 , "serif", "bold", "italic"}, -{"Times-Italic", "Times", 0, 0, "italic", 1 , "serif", 0, "italic"}, -{"Times-Roman", TIMES, 0, 0, 0, 0 , "serif", 0, 0}, -{"ZapfChancery-MediumItalic", "URW Chancery L", "medium", 0, "italic", 33, "serif", 0, "italic"}, -{"ZapfDingbats", "Dingbats", 0, 0, 0, 34, "fantasy", 0, 0}, diff --git a/internal/ccall/common/ps_font_equiv.txt b/internal/ccall/common/ps_font_equiv.txt deleted file mode 100644 index 26a7684..0000000 --- a/internal/ccall/common/ps_font_equiv.txt +++ /dev/null @@ -1,35 +0,0 @@ -{"AvantGarde-Book", "URW Gothic L", "book", 0, 0, 4 }, -{"AvantGarde-BookOblique", "URW Gothic L", "book", 0, "oblique", 5 }, -{"AvantGarde-Demi", "URW Gothic L", "demi", 0, 0, 6 }, -{"AvantGarde-DemiOblique", "URW Gothic L", "demi", 0, "oblique", 7 }, -{"Bookman-Demi", "URW Bookman L", "demi", 0, 0, 10}, -{"Bookman-DemiItalic", "URW Bookman L", "demi", 0, "italic", 11}, -{"Bookman-Light", "URW Bookman L", "light", 0, 0, 8 }, -{"Bookman-LightItalic", "URW Bookman L", "light", 0, "italic", 9 }, -{"Courier", COURIER, 0, 0, 0, 12}, -{"Courier-Bold", COURIER, "bold", 0, 0, 14}, -{"Courier-BoldOblique", COURIER, "bold", 0, "oblique", 15}, -{"Courier-Oblique", COURIER, 0, 0, "oblique", 13}, -{"Helvetica", HELVETICA, 0, 0, 0, 16}, -{"Helvetica-Bold", HELVETICA, "bold", 0, 0, 18}, -{"Helvetica-BoldOblique", HELVETICA, "bold", 0, "oblique", 19}, -{"Helvetica-Narrow", HELVETICA, 0, "condensed", 0, 20}, -{"Helvetica-Narrow-Bold", HELVETICA, "bold", "condensed", 0, 22}, -{"Helvetica-Narrow-BoldOblique",HELVETICA, "bold", "condensed", "oblique", 23}, -{"Helvetica-Narrow-Oblique", HELVETICA, 0, "condensed", "oblique", 21}, -{"Helvetica-Oblique", HELVETICA, 0, 0, "oblique", 17}, -{"NewCenturySchlbk-Bold", "Century Schoolbook L", "bold", 0, 0, 26}, -{"NewCenturySchlbk-BoldItalic", "Century Schoolbook L", "bold", 0, "italic", 27}, -{"NewCenturySchlbk-Italic", "Century Schoolbook L", 0, 0, "italic", 25}, -{"NewCenturySchlbk-Roman", "Century Schoolbook L", "roman", 0, 0, 24}, -{"Palatino-Bold", PALATINO, "bold", 0, 0, 30}, -{"Palatino-BoldItalic", PALATINO, "bold", 0, "italic", 31}, -{"Palatino-Italic", PALATINO, 0, 0, "italic", 29}, -{"Palatino-Roman", PALATINO, "roman", 0, 0, 28}, -{"Symbol", SYMBOL, 0, 0, 0, 32}, -{"Times-Bold", "Times", "bold", 0, 0, 2 }, -{"Times-BoldItalic", "Times", "bold", 0, "italic", 3 }, -{"Times-Italic", "Times", 0, 0, "italic", 1 }, -{"Times-Roman", TIMES, 0, 0, 0, 0 }, -{"ZapfChancery-MediumItalic", "URW Chancery L", "medium", 0, "italic", 33}, -{"ZapfDingbats", "Dingbats", 0, 0, 0, 34}, diff --git a/internal/ccall/common/ps_fontmap.txt b/internal/ccall/common/ps_fontmap.txt deleted file mode 100644 index bdf1978..0000000 --- a/internal/ccall/common/ps_fontmap.txt +++ /dev/null @@ -1,11 +0,0 @@ -#ifdef DARWIN -#define TIMES "Times" -#elif defined(_WIN32) -#define TIMES "Times New Roman" -#else -#define TIMES "Times" -#endif -#define COURIER "Courier" -#define HELVETICA "Helvetica" -#define SYMBOL "Symbol" -#define PALATINO "Palatino Linotype" diff --git a/internal/ccall/common/psusershape.c b/internal/ccall/common/psusershape.c deleted file mode 100644 index d1a3d80..0000000 --- a/internal/ccall/common/psusershape.c +++ /dev/null @@ -1,318 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _WIN32 -#include -#endif - -#include - -#include "render.h" -#include "gvio.h" - -static int N_EPSF_files; -static Dict_t *EPSF_contents; - -static void ps_image_free(Dict_t * dict, usershape_t * p, Dtdisc_t * disc) -{ - free(p->data); -} - -static Dtdisc_t ImageDictDisc = { - offsetof(usershape_t, name),/* key */ - -1, /* size */ - 0, /* link offset */ - NIL(Dtmake_f), - (Dtfree_f) ps_image_free, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -static usershape_t *user_init(const char *str) -{ - char *contents; - char line[BUFSIZ]; - FILE *fp; - struct stat statbuf; - int saw_bb, must_inline, rc; - int lx, ly, ux, uy; - usershape_t *us; - - if (!EPSF_contents) - EPSF_contents = dtopen(&ImageDictDisc, Dtoset); - - us = dtmatch(EPSF_contents, str); - if (us) - return us; - - if (!(fp = fopen(str, "r"))) { - agerr(AGWARN, "couldn't open epsf file %s\n", str); - return NULL; - } - /* try to find size */ - saw_bb = must_inline = FALSE; - while (fgets(line, sizeof(line), fp)) { - if (sscanf - (line, "%%%%BoundingBox: %d %d %d %d", &lx, &ly, &ux, &uy) == 4) { - saw_bb = TRUE; - } - if ((line[0] != '%') && strstr(line,"read")) must_inline = TRUE; - if (saw_bb && must_inline) break; - } - - if (saw_bb) { - us = GNEW(usershape_t); - us->x = lx; - us->y = ly; - us->w = ux - lx; - us->y = uy - ly; - us->name = str; - us->macro_id = N_EPSF_files++; - fstat(fileno(fp), &statbuf); - contents = us->data = N_GNEW(statbuf.st_size + 1, char); - fseek(fp, 0, SEEK_SET); - rc = fread(contents, statbuf.st_size, 1, fp); - contents[statbuf.st_size] = '\0'; - dtinsert(EPSF_contents, us); - us->must_inline = must_inline; - } else { - agerr(AGWARN, "BoundingBox not found in epsf file %s\n", str); - us = NULL; - } - fclose(fp); - return us; -} - -void epsf_init(node_t * n) -{ - epsf_t *desc; - const char *str; - usershape_t *us; - int dx, dy; - - if ((str = safefile(agget(n, "shapefile")))) { - us = user_init(str); - if (!us) - return; - dx = us->w; - dy = us->h; - ND_width(n) = PS2INCH(dx); - ND_height(n) = PS2INCH(dy); - ND_shape_info(n) = desc = NEW(epsf_t); - desc->macro_id = us->macro_id; - desc->offset.x = -us->x - (dx) / 2; - desc->offset.y = -us->y - (dy) / 2; - } else - agerr(AGWARN, "shapefile not set or not found for epsf node %s\n", agnameof(n)); -} - -void epsf_free(node_t * n) -{ - - if (ND_shape_info(n)) - free(ND_shape_info(n)); -} - - -/* cat_libfile: - * Write library files onto the given file pointer. - * arglib is an NULL-terminated array of char* - * Each non-trivial entry should be the name of a file to be included. - * stdlib is an NULL-terminated array of char* - * Each of these is a line of a standard library to be included. - * If any item in arglib is the empty string, the stdlib is not used. - * The stdlib is printed first, if used, followed by the user libraries. - * We check that for web-safe file usage. - */ -void cat_libfile(GVJ_t * job, const char **arglib, const char **stdlib) -{ - FILE *fp; - const char **s, *bp, *p, *path; - int i; - boolean use_stdlib = TRUE; - - /* check for empty string to turn off stdlib */ - if (arglib) { - for (i = 0; use_stdlib && ((p = arglib[i])); i++) { - if (*p == '\0') - use_stdlib = FALSE; - } - } - if (use_stdlib) - for (s = stdlib; *s; s++) { - gvputs(job, *s); - gvputs(job, "\n"); - } - if (arglib) { - for (i = 0; (p = arglib[i]) != 0; i++) { - if (*p == '\0') - continue; /* ignore empty string */ - path = safefile(p); /* make sure filename is okay */ - if (!path) { - agerr(AGWARN, "can't find library file %s\n", p); - } - else if ((fp = fopen(path, "r"))) { - while ((bp = Fgets(fp))) - gvputs(job, bp); - gvputs(job, "\n"); /* append a newline just in case */ - fclose (fp); - } else - agerr(AGWARN, "can't open library file %s\n", path); - } - } -} - -#define FILTER_EPSF 1 -#ifdef FILTER_EPSF -/* this removes EPSF DSC comments that, when nested in another - * document, cause errors in Ghostview and other Postscript - * processors (although legal according to the Adobe EPSF spec). - * - * N.B. PostScript lines can end with \n, \r or \r\n. - */ -void epsf_emit_body(GVJ_t *job, usershape_t *us) -{ - char *p; - char c; - p = us->data; - while (*p) { - /* skip %%EOF lines */ - if ((p[0] == '%') && (p[1] == '%') - && (!strncasecmp(&p[2], "EOF", 3) - || !strncasecmp(&p[2], "BEGIN", 5) - || !strncasecmp(&p[2], "END", 3) - || !strncasecmp(&p[2], "TRAILER", 7) - )) { - /* check for *p since last line might not end in '\n' */ - while ((c = *p) && (c != '\r') && (c != '\n')) p++; - if ((*p == '\r') && (*(p+1) == '\n')) p += 2; - else if (*p) p++; - continue; - } - /* output line */ - while ((c = *p) && (c != '\r') && (c != '\n')) { - gvputc(job, c); - p++; - } - if ((*p == '\r') && (*(p+1) == '\n')) p += 2; - else if (*p) p++; - gvputc(job, '\n'); - } -} -#else -void epsf_emit_body(GVJ_t *job, usershape_t *us) -{ - gvputs(job, us->data); -} -#endif - -void epsf_define(GVJ_t *job) -{ - usershape_t *us; - - if (!EPSF_contents) - return; - for (us = dtfirst(EPSF_contents); us; us = dtnext(EPSF_contents, us)) { - if (us->must_inline) - continue; - gvprintf(job, "/user_shape_%d {\n", us->macro_id); - gvputs(job, "%%BeginDocument:\n"); - epsf_emit_body(job, us); - gvputs(job, "%%EndDocument\n"); - gvputs(job, "} bind def\n"); - } -} - -enum {ASCII, LATIN1, NONLATIN}; - -/* charsetOf: - * Assuming legal utf-8 input, determine if - * the character value range is ascii, latin-1 or otherwise. - */ -static int -charsetOf (char* s) -{ - int r = ASCII; - unsigned char c; - - while ((c = *(unsigned char*)s++)) { - if (c < 0x7F) - continue; - else if ((c & 0xFC) == 0xC0) { - r = LATIN1; - s++; /* eat second byte */ - } - else return NONLATIN; - } - return r; -} - -/* ps_string: - * internally, strings are always utf8. If chset is CHAR_LATIN1, we know - * all of the values can be represented by latin-1; if chset is - * CHAR_UTF8, we use the string as is; otherwise, we test to see if the - * string is ascii, latin-1 or non-latin, and translate to latin-l if - * possible. - */ -char *ps_string(char *ins, int chset) -{ - char *s; - char *base; - static agxbuf xb; - static int warned; - - switch (chset) { - case CHAR_UTF8 : - base = ins; - break; - case CHAR_LATIN1 : - base = utf8ToLatin1 (ins); - break; - default : - switch (charsetOf (ins)) { - case ASCII : - base = ins; - break; - case LATIN1 : - base = utf8ToLatin1 (ins); - break; - case NONLATIN : - if (!warned) { - agerr (AGWARN, "UTF-8 input uses non-Latin1 characters which cannot be handled by this PostScript driver\n"); - warned = 1; - } - base = ins; - break; - default: - base = ins; - break; - } - } - - if (xb.buf == NULL) - agxbinit (&xb, 0, NULL); - - agxbputc (&xb, LPAREN); - s = base; - while (*s) { - if ((*s == LPAREN) || (*s == RPAREN) || (*s == '\\')) - agxbputc (&xb, '\\'); - agxbputc (&xb, *s++); - } - agxbputc (&xb, RPAREN); - if (base != ins) free (base); - s = agxbuse(&xb); - return s; -} diff --git a/internal/ccall/common/render.h b/internal/ccall/common/render.h deleted file mode 100644 index 61f4001..0000000 --- a/internal/ccall/common/render.h +++ /dev/null @@ -1,173 +0,0 @@ - - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_RENDER_H -#define GV_RENDER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "config.h" - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#if !defined(_WIN32) && !defined(DARWIN) -#define __USE_GNU -#include -#undef __USE_GNU -#else -#include -#endif -#include -#ifdef HAVE_STRINGS_H -#include -#endif -#include - -#include - -#include "types.h" -#include "macros.h" -#include "const.h" -#include "globals.h" -#include "memory.h" -#include "colorprocs.h" /* must collow color.h (in types.h) */ -#include "geomprocs.h" /* must follow geom.h (in types.h) */ -#include "agxbuf.h" -#include "utils.h" /* must follow types.h and agxbuf.h */ -#include "gvplugin.h" /* must follow gvcext.h (in types.h) */ -#include "gvcjob.h" /* must follow gvcext.h (in types.h) */ -#include "gvcint.h" /* must follow gvcext.h (in types.h) */ -#include "gvcproc.h" /* must follow gvcext.h (in types.h) */ - - typedef struct epsf_s { - int macro_id; - point offset; - } epsf_t; - - typedef void (*nodesizefn_t) (Agnode_t *, boolean); - -/*visual studio*/ -#ifdef _WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - - extern void add_box(path *, boxf); - extern void arrow_flags(Agedge_t * e, int *sflag, int *eflag); - extern boxf arrow_bb(pointf p, pointf u, double arrowsize, int flag); - extern void arrow_gen(GVJ_t * job, emit_state_t emit_state, pointf p, pointf u, - double arrowsize, double penwidth, int flag); - extern double arrow_length(edge_t * e, int flag); - extern int arrowEndClip(edge_t*, pointf*, int, int , bezier*, int eflag); - extern int arrowStartClip(edge_t*, pointf* ps, int, int, bezier*, int sflag); - extern void arrowOrthoClip(edge_t*, pointf* ps, int, int, bezier*, int sflag, int eflag); - extern void beginpath(path *, Agedge_t *, int, pathend_t *, boolean); - extern void bezier_clip(inside_t * inside_context, - boolean(*insidefn) (inside_t * inside_context, - pointf p), pointf * sp, - boolean left_inside); - extern shape_desc *bind_shape(char *name, node_t *); - extern void makeStraightEdge(graph_t * g, edge_t * e, int edgetype, splineInfo * info); - extern void makeStraightEdges(graph_t* g, edge_t** edges, int e_cnt, int et, splineInfo* sinfo); - extern void clip_and_install(edge_t * fe, node_t * hn, - pointf * ps, int pn, splineInfo * info); - extern char* charsetToStr (int c); - extern pointf coord(node_t * n); - extern void do_graph_label(graph_t * sg); - extern void graph_init(graph_t * g, boolean use_rankdir); - extern void graph_cleanup(graph_t * g); - extern int dotneato_args_initialize(GVC_t * gvc, int, char **); - extern int dotneato_usage(int); - extern void dotneato_postprocess(Agraph_t *); - extern void gv_postprocess(Agraph_t *, int); - extern void dotneato_set_margins(GVC_t * gvc, Agraph_t *); - extern void dotneato_write(GVC_t * gvc, graph_t *g); - extern void dotneato_write_one(GVC_t * gvc, graph_t *g); - extern Ppolyline_t* ellipticWedge (pointf ctr, double major, double minor, double angle0, double angle1); - extern void emit_clusters(GVJ_t * job, Agraph_t * g, int flags); - extern char* getObjId (GVJ_t* job, void* obj, agxbuf* xb); - /* extern void emit_begin_edge(GVJ_t * job, edge_t * e, char**); */ - /* extern void emit_end_edge(GVJ_t * job); */ - extern void emit_graph(GVJ_t * job, graph_t * g); - extern void emit_label(GVJ_t * job, emit_state_t emit_state, textlabel_t *); - extern int emit_once(char *message); - extern void emit_jobs_eof(GVC_t * gvc); - extern void emit_map_rect(GVJ_t *job, boxf b); - extern void enqueue_neighbors(nodequeue *, Agnode_t *, int); - extern void endpath(path *, Agedge_t *, int, pathend_t *, boolean); - extern void epsf_init(node_t * n); - extern void epsf_free(node_t * n); - extern shape_desc *find_user_shape(const char *); - extern void free_line(textspan_t *); - extern void free_label(textlabel_t *); - extern void free_textspan(textspan_t * tl, int); - extern void getdouble(graph_t * g, char *name, double *result); - extern splines *getsplinepoints(edge_t * e); - extern void gv_fixLocale (int set); - extern void gv_free_splines(edge_t * e); - extern void gv_cleanup_edge(Agedge_t * e); - extern void gv_cleanup_node(Agnode_t * n); - extern void* init_xdot (Agraph_t* g); - extern int initMapData (GVJ_t*, char*, char*, char*, char*, char*, void*); - extern boolean isPolygon(node_t *); - extern void makeSelfEdge(path * P, edge_t * edges[], int ind, int cnt, - double sizex, double sizey, splineInfo * sinfo); - extern textlabel_t *make_label(void *obj, char *str, int kind, double fontsize, char *fontname, char *fontcolor); - extern bezier *new_spline(edge_t * e, int sz); - extern char **parse_style(char *s); - extern void place_graph_label(Agraph_t *); - extern int place_portlabel(edge_t * e, boolean head_p); - extern void makePortLabels(edge_t * e); - extern pointf edgeMidpoint(graph_t* g, edge_t * e); - extern void addEdgeLabels(graph_t* g, edge_t * e, pointf rp, pointf rq); - extern void pop_obj_state(GVJ_t *job); - extern obj_state_t* push_obj_state(GVJ_t *job); - extern int rank(graph_t * g, int balance, int maxiter); - extern port resolvePort(node_t* n, node_t* other, port* oldport); - extern void resolvePorts (edge_t* e); - extern void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled); - extern int routesplinesinit(void); - extern pointf *routesplines(path *, int *); - extern void routesplinesterm(void); - extern pointf* simpleSplineRoute (pointf, pointf, Ppoly_t, int*, int); - extern pointf *routepolylines(path* pp, int* npoints); - extern int selfRightSpace (edge_t* e); - extern void setup_graph(GVC_t * gvc, graph_t * g); - extern shape_kind shapeOf(node_t *); - extern void shape_clip(node_t * n, pointf curve[4]); - extern void make_simple_label (GVC_t * gvc, textlabel_t* rv); - extern int stripedBox (GVJ_t * job, pointf* AF, char* clrs, int rotate); - extern stroke_t* taper (bezier*, double (*radfunc_t)(double,double,double), double initwid, int linejoin, int linecap); - extern stroke_t* taper0 (bezier* bez, double initwid); - extern pointf textspan_size(GVC_t * gvc, textspan_t * span); - extern Dt_t * textfont_dict_open(GVC_t *gvc); - extern void textfont_dict_close(GVC_t *gvc); - extern void translate_bb(Agraph_t *, int); - extern int wedgedEllipse (GVJ_t* job, pointf * pf, char* clrs); - extern void update_bb_bz(boxf *bb, pointf *cp); - extern void write_attributed_dot(graph_t *g, FILE *f); - extern void write_canonical_dot(graph_t *g, FILE *f); - extern boxf xdotBB (graph_t* g); - extern char *findAttrColor(void *obj, attrsym_t *colorattr, char *dflt); - -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/common/routespl.c b/internal/ccall/common/routespl.c deleted file mode 100644 index ead266a..0000000 --- a/internal/ccall/common/routespl.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "render.h" -#include "pathplan.h" -#include - -#ifdef UNUSED -static box *bs = NULL; -static int bn; -static int maxbn = 0; -#define BINC 300 -#endif - -#define PINC 300 - -#ifdef NOTNOW -static edge_t *origedge; -#endif - -static int nedges, nboxes; /* total no. of edges and boxes used in routing */ - -static int routeinit; -/* static data used across multiple edges */ -static pointf *ps; /* final spline points */ -static int maxpn; /* size of ps[] */ -static Ppoint_t *polypoints; /* vertices of polygon defined by boxes */ -static int polypointn; /* size of polypoints[] */ -static Pedge_t *edges; /* polygon edges passed to Proutespline */ -static int edgen; /* size of edges[] */ - -static int checkpath(int, boxf*, path*); -static int mkspacep(int size); -static void printpath(path * pp); -#ifdef DEBUG -static void printboxes(int boxn, boxf* boxes) -{ - pointf ll, ur; - int bi; - char buf[BUFSIZ]; - int newcnt = Show_cnt + boxn; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - for (bi = 0; bi < boxn; bi++) { - ll = boxes[bi].LL, ur = boxes[bi].UR; - sprintf(buf, "%d %d %d %d pathbox", (int)ll.x, (int)ll.y, (int)ur.x, (int)ur.y); - Show_boxes[bi+1+Show_cnt] = strdup (buf); - } - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -#if DEBUG > 1 -static void psprintpolypts(Ppoint_t * p, int sz) -{ - int i; - - fprintf(stderr, "%%!\n"); - fprintf(stderr, "%% constraint poly\n"); - fprintf(stderr, "newpath\n"); - for (i = 0; i < sz; i++) - fprintf(stderr, "%f %f %s\n", p[i].x, p[i].y, - (i == 0 ? "moveto" : "lineto")); - fprintf(stderr, "closepath stroke\n"); -} -static void psprintpoint(point p) -{ - fprintf(stderr, "gsave\n"); - fprintf(stderr, - "newpath %d %d moveto %d %d 2 0 360 arc closepath fill stroke\n", - p.x, p.y, p.x, p.y); - fprintf(stderr, "/Times-Roman findfont 4 scalefont setfont\n"); - fprintf(stderr, "%d %d moveto (\\(%d,%d\\)) show\n", p.x + 5, p.y + 5, - p.x, p.y); - fprintf(stderr, "grestore\n"); -} -static void psprintpointf(pointf p) -{ - fprintf(stderr, "gsave\n"); - fprintf(stderr, - "newpath %.5g %.5g moveto %.5g %.5g 2 0 360 arc closepath fill stroke\n", - p.x, p.y, p.x, p.y); - fprintf(stderr, "/Times-Roman findfont 4 scalefont setfont\n"); - fprintf(stderr, "%.5g %.5g moveto (\\(%.5g,%.5g\\)) show\n", p.x + 5, p.y + 5, - p.x, p.y); - fprintf(stderr, "grestore\n"); -} -#endif - -static void psprintspline(Ppolyline_t spl) -{ - char buf[BUFSIZ]; - int newcnt = Show_cnt + spl.pn + 4; - int li, i; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - li = Show_cnt+1; - Show_boxes[li++] = strdup ("%%!"); - Show_boxes[li++] = strdup ("%% spline"); - Show_boxes[li++] = strdup ("gsave 1 0 0 setrgbcolor newpath"); - for (i = 0; i < spl.pn; i++) { - sprintf(buf, "%f %f %s", spl.ps[i].x, spl.ps[i].y, - (i == 0) ? "moveto" : ((i % 3 == 0) ? "curveto" : "")); - Show_boxes[li++] = strdup (buf); - } - Show_boxes[li++] = strdup ("stroke grestore"); - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -static void psprintline(Ppolyline_t pl) -{ - char buf[BUFSIZ]; - int newcnt = Show_cnt + pl.pn + 4; - int i, li; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - li = Show_cnt+1; - Show_boxes[li++] = strdup ("%%!"); - Show_boxes[li++] = strdup ("%% line"); - Show_boxes[li++] = strdup ("gsave 0 0 1 setrgbcolor newpath"); - for (i = 0; i < pl.pn; i++) { - sprintf(buf, "%f %f %s", pl.ps[i].x, pl.ps[i].y, - (i == 0 ? "moveto" : "lineto")); - Show_boxes[li++] = strdup (buf); - } - Show_boxes[li++] = strdup ("stroke grestore"); - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -static void psprintpoly(Ppoly_t p) -{ - char buf[BUFSIZ]; - int newcnt = Show_cnt + p.pn + 3; - point tl, hd; - int bi, li; - char* pfx; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - li = Show_cnt+1; - Show_boxes[li++] = strdup ("%% poly list"); - Show_boxes[li++] = strdup ("gsave 0 1 0 setrgbcolor"); - for (bi = 0; bi < p.pn; bi++) { - tl.x = (int)p.ps[bi].x; - tl.y = (int)p.ps[bi].y; - hd.x = (int)p.ps[(bi+1) % p.pn].x; - hd.y = (int)p.ps[(bi+1) % p.pn].y; - if ((tl.x == hd.x) && (tl.y == hd.y)) pfx = "%%"; - else pfx =""; - sprintf(buf, "%s%d %d %d %d makevec", pfx, tl.x, tl.y, hd.x, hd.y); - Show_boxes[li++] = strdup (buf); - } - Show_boxes[li++] = strdup ("grestore"); - - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -static void psprintboxes(int boxn, boxf* boxes) -{ - char buf[BUFSIZ]; - int newcnt = Show_cnt + 5*boxn + 3; - pointf ll, ur; - int bi, li; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - li = Show_cnt+1; - Show_boxes[li++] = strdup ("%% box list"); - Show_boxes[li++] = strdup ("gsave 0 1 0 setrgbcolor"); - for (bi = 0; bi < boxn; bi++) { - ll = boxes[bi].LL, ur = boxes[bi].UR; - sprintf(buf, "newpath\n%d %d moveto", (int)ll.x, (int)ll.y); - Show_boxes[li++] = strdup (buf); - sprintf(buf, "%d %d lineto", (int)ll.x, (int)ur.y); - Show_boxes[li++] = strdup (buf); - sprintf(buf, "%d %d lineto", (int)ur.x, (int)ur.y); - Show_boxes[li++] = strdup (buf); - sprintf(buf, "%d %d lineto", (int)ur.x, (int)ll.y); - Show_boxes[li++] = strdup (buf); - Show_boxes[li++] = strdup ("closepath stroke"); - } - Show_boxes[li++] = strdup ("grestore"); - - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -static void psprintinit (int begin) -{ - int newcnt = Show_cnt + 1; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - if (begin) - Show_boxes[1+Show_cnt] = strdup ("dbgstart"); - else - Show_boxes[1+Show_cnt] = strdup ("grestore"); - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} - -static int debugleveln(edge_t* realedge, int i) -{ - return (GD_showboxes(agraphof(aghead(realedge))) == i || - GD_showboxes(agraphof(agtail(realedge))) == i || - ED_showboxes(realedge) == i || - ND_showboxes(aghead(realedge)) == i || - ND_showboxes(agtail(realedge)) == i); -} -#endif /* DEBUG */ - - - -/* simpleSplineRoute: - * Given a simple (ccw) polygon, route an edge from tp to hp. - */ -pointf* -simpleSplineRoute (pointf tp, pointf hp, Ppoly_t poly, int* n_spl_pts, - int polyline) -{ - Ppolyline_t pl, spl; - Ppoint_t eps[2]; - Pvector_t evs[2]; - int i; - - eps[0].x = tp.x; - eps[0].y = tp.y; - eps[1].x = hp.x; - eps[1].y = hp.y; - if (Pshortestpath(&poly, eps, &pl) < 0) - return NULL; - - if (polyline) - make_polyline (pl, &spl); - else { - if (poly.pn > edgen) { - edges = ALLOC(poly.pn, edges, Pedge_t); - edgen = poly.pn; - } - for (i = 0; i < poly.pn; i++) { - edges[i].a = poly.ps[i]; - edges[i].b = poly.ps[(i + 1) % poly.pn]; - } -#if 0 - if (pp->start.constrained) { - evs[0].x = cos(pp->start.theta); - evs[0].y = sin(pp->start.theta); - } else -#endif - evs[0].x = evs[0].y = 0; -#if 0 - if (pp->end.constrained) { - evs[1].x = -cos(pp->end.theta); - evs[1].y = -sin(pp->end.theta); - } else -#endif - evs[1].x = evs[1].y = 0; - if (Proutespline(edges, poly.pn, pl, evs, &spl) < 0) - return NULL; - } - - if (mkspacep(spl.pn)) - return NULL; - for (i = 0; i < spl.pn; i++) { - ps[i] = spl.ps[i]; - } - *n_spl_pts = spl.pn; - return ps; -} - -/* routesplinesinit: - * Data initialized once until matching call to routeplineterm - * Allows recursive calls to dot - */ -int -routesplinesinit() -{ - if (++routeinit > 1) return 0; - if (!(ps = N_GNEW(PINC, pointf))) { - agerr(AGERR, "routesplinesinit: cannot allocate ps\n"); - return 1; - } - maxpn = PINC; -#ifdef DEBUG - if (Show_boxes) { - int i; - for (i = 0; Show_boxes[i]; i++) - free (Show_boxes[i]); - free (Show_boxes); - Show_boxes = NULL; - Show_cnt = 0; - } -#endif - nedges = 0; - nboxes = 0; - if (Verbose) - start_timer(); - return 0; -} - -void routesplinesterm() -{ - if (--routeinit > 0) return; - free(ps); -#ifdef UNUSED - free(bs), bs = NULL /*, maxbn = bn = 0 */ ; -#endif - if (Verbose) - fprintf(stderr, - "routesplines: %d edges, %d boxes %.2f sec\n", - nedges, nboxes, elapsed_sec()); -} - -static void -limitBoxes (boxf* boxes, int boxn, pointf *pps, int pn, int delta) -{ - int bi, si, splinepi; - double t; - pointf sp[4]; - int num_div = delta * boxn; - - for (splinepi = 0; splinepi + 3 < pn; splinepi += 3) { - for (si = 0; si <= num_div; si++) { - t = si / (double)num_div; - sp[0] = pps[splinepi]; - sp[1] = pps[splinepi + 1]; - sp[2] = pps[splinepi + 2]; - sp[3] = pps[splinepi + 3]; - sp[0].x = sp[0].x + t * (sp[1].x - sp[0].x); - sp[0].y = sp[0].y + t * (sp[1].y - sp[0].y); - sp[1].x = sp[1].x + t * (sp[2].x - sp[1].x); - sp[1].y = sp[1].y + t * (sp[2].y - sp[1].y); - sp[2].x = sp[2].x + t * (sp[3].x - sp[2].x); - sp[2].y = sp[2].y + t * (sp[3].y - sp[2].y); - sp[0].x = sp[0].x + t * (sp[1].x - sp[0].x); - sp[0].y = sp[0].y + t * (sp[1].y - sp[0].y); - sp[1].x = sp[1].x + t * (sp[2].x - sp[1].x); - sp[1].y = sp[1].y + t * (sp[2].y - sp[1].y); - sp[0].x = sp[0].x + t * (sp[1].x - sp[0].x); - sp[0].y = sp[0].y + t * (sp[1].y - sp[0].y); - for (bi = 0; bi < boxn; bi++) { -/* this tested ok on 64bit machines, but on 32bit we need this FUDGE - * or graphs/directed/records.gv fails */ -#define ROUTESPL_FUDGE .0001 - if (sp[0].y <= boxes[bi].UR.y+ROUTESPL_FUDGE && sp[0].y >= boxes[bi].LL.y-ROUTESPL_FUDGE) { - if (boxes[bi].LL.x > sp[0].x) - boxes[bi].LL.x = sp[0].x; - if (boxes[bi].UR.x < sp[0].x) - boxes[bi].UR.x = sp[0].x; - } - } - } - } -} - -#define INIT_DELTA 10 -#define LOOP_TRIES 15 /* number of times to try to limiting boxes to regain space, using smaller divisions */ - -/* routesplines: - * Route a path using the path info in pp. This includes start and end points - * plus a collection of contiguous boxes contain the terminal points. The boxes - * are converted into a containing polygon. A shortest path is constructed within - * the polygon from between the terminal points. If polyline is true, this path - * is converted to a spline representation. Otherwise, we call the path planner to - * convert the polyline into a smooth spline staying within the polygon. In both - * cases, the function returns an array of the computed control points. The number - * of these points is given in npoints. - * - * Note that the returned points are stored in a single array, so the points must be - * used before another call to this function. - * - * During cleanup, the function determines the x-extent of the spline in the box, so - * the box can be shrunk to the minimum width. The extra space can then be used by other - * edges. - * - * If a catastrophic error, return NULL. - */ -static pointf *_routesplines(path * pp, int *npoints, int polyline) -{ - Ppoly_t poly; - Ppolyline_t pl, spl; - int splinepi; - Ppoint_t eps[2]; - Pvector_t evs[2]; - int edgei, prev, next; - int pi, bi; - boxf *boxes; - int boxn; - edge_t* realedge; - int flip; - int loopcnt, delta = INIT_DELTA; - boolean unbounded; - - nedges++; - nboxes += pp->nbox; - - for (realedge = (edge_t *) pp->data; -#ifdef NOTNOW - origedge = realedge; -#endif - realedge && ED_edge_type(realedge) != NORMAL; - realedge = ED_to_orig(realedge)); - if (!realedge) { - agerr(AGERR, "in routesplines, cannot find NORMAL edge\n"); - return NULL; - } - - boxes = pp->boxes; - boxn = pp->nbox; - - if (checkpath(boxn, boxes, pp)) - return NULL; - -#ifdef DEBUG - if (debugleveln(realedge, 1)) - printboxes(boxn, boxes); - if (debugleveln(realedge, 3)) { - psprintinit(1); - psprintboxes(boxn, boxes); - } -#endif - - if (boxn * 8 > polypointn) { - polypoints = ALLOC(boxn * 8, polypoints, Ppoint_t); - polypointn = boxn * 8; - } - - if ((boxn > 1) && (boxes[0].LL.y > boxes[1].LL.y)) { - flip = 1; - for (bi = 0; bi < boxn; bi++) { - double v = boxes[bi].UR.y; - boxes[bi].UR.y = -1*boxes[bi].LL.y; - boxes[bi].LL.y = -v; - } - } - else flip = 0; - - if (agtail(realedge) != aghead(realedge)) { - /* I assume that the path goes either down only or - up - right - down */ - for (bi = 0, pi = 0; bi < boxn; bi++) { - next = prev = 0; - if (bi > 0) - prev = (boxes[bi].LL.y > boxes[bi - 1].LL.y) ? -1 : 1; - if (bi < boxn - 1) - next = (boxes[bi + 1].LL.y > boxes[bi].LL.y) ? 1 : -1; - if (prev != next) { - if (next == -1 || prev == 1) { - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].UR.y; - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].LL.y; - } else { - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].LL.y; - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].UR.y; - } - } - else if (prev == 0) { /* single box */ - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].UR.y; - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].LL.y; - } - else { - if (!(prev == -1 && next == -1)) { - agerr(AGERR, "in routesplines, illegal values of prev %d and next %d, line %d\n", prev, next, __LINE__); - return NULL; - } - } - } - for (bi = boxn - 1; bi >= 0; bi--) { - next = prev = 0; - if (bi < boxn - 1) - prev = (boxes[bi].LL.y > boxes[bi + 1].LL.y) ? -1 : 1; - if (bi > 0) - next = (boxes[bi - 1].LL.y > boxes[bi].LL.y) ? 1 : -1; - if (prev != next) { - if (next == -1 || prev == 1 ) { - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].UR.y; - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].LL.y; - } else { - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].LL.y; - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].UR.y; - } - } - else if (prev == 0) { /* single box */ - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].LL.y; - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].UR.y; - } - else { - if (!(prev == -1 && next == -1)) { - /* it went badly, e.g. degenerate box in boxlist */ - agerr(AGERR, "in routesplines, illegal values of prev %d and next %d, line %d\n", prev, next, __LINE__); - return NULL; /* for correctness sake, it's best to just stop */ - } - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].LL.y; - polypoints[pi].x = boxes[bi].UR.x; - polypoints[pi++].y = boxes[bi].UR.y; - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].UR.y; - polypoints[pi].x = boxes[bi].LL.x; - polypoints[pi++].y = boxes[bi].LL.y; - } - } - } - else { - agerr(AGERR, "in routesplines, edge is a loop at %s\n", agnameof(aghead(realedge))); - return NULL; - } - - if (flip) { - int i; - for (bi = 0; bi < boxn; bi++) { - double v = boxes[bi].UR.y; - boxes[bi].UR.y = -1*boxes[bi].LL.y; - boxes[bi].LL.y = -v; - } - for (i = 0; i < pi; i++) - polypoints[i].y *= -1; - } - - for (bi = 0; bi < boxn; bi++) - boxes[bi].LL.x = INT_MAX, boxes[bi].UR.x = INT_MIN; - poly.ps = polypoints, poly.pn = pi; - eps[0].x = pp->start.p.x, eps[0].y = pp->start.p.y; - eps[1].x = pp->end.p.x, eps[1].y = pp->end.p.y; - if (Pshortestpath(&poly, eps, &pl) < 0) { - agerr(AGERR, "in routesplines, Pshortestpath failed\n"); - return NULL; - } -#ifdef DEBUG - if (debugleveln(realedge, 3)) { - psprintpoly(poly); - psprintline(pl); - } -#endif - - if (polyline) { - make_polyline (pl, &spl); - } - else { - if (poly.pn > edgen) { - edges = ALLOC(poly.pn, edges, Pedge_t); - edgen = poly.pn; - } - for (edgei = 0; edgei < poly.pn; edgei++) { - edges[edgei].a = polypoints[edgei]; - edges[edgei].b = polypoints[(edgei + 1) % poly.pn]; - } - if (pp->start.constrained) { - evs[0].x = cos(pp->start.theta); - evs[0].y = sin(pp->start.theta); - } else - evs[0].x = evs[0].y = 0; - if (pp->end.constrained) { - evs[1].x = -cos(pp->end.theta); - evs[1].y = -sin(pp->end.theta); - } else - evs[1].x = evs[1].y = 0; - - if (Proutespline(edges, poly.pn, pl, evs, &spl) < 0) { - agerr(AGERR, "in routesplines, Proutespline failed\n"); - return NULL; - } -#ifdef DEBUG - if (debugleveln(realedge, 3)) { - psprintspline(spl); - psprintinit(0); - } -#endif - } - if (mkspacep(spl.pn)) - return NULL; /* Bailout if no memory left */ - - for (bi = 0; bi < boxn; bi++) { - boxes[bi].LL.x = INT_MAX; - boxes[bi].UR.x = INT_MIN; - } - unbounded = TRUE; - for (splinepi = 0; splinepi < spl.pn; splinepi++) { - ps[splinepi] = spl.ps[splinepi]; - } - - for (loopcnt = 0; unbounded && (loopcnt < LOOP_TRIES); loopcnt++) { - limitBoxes (boxes, boxn, ps, spl.pn, delta); - - /* The following check is necessary because if a box is not very - * high, it is possible that the sampling above might miss it. - * Therefore, we make the sample finer until all boxes have - * valid values. cf. bug 456. Would making sp[] pointfs help? - */ - for (bi = 0; bi < boxn; bi++) { - /* these fp equality tests are used only to detect if the - * values have been changed since initialization - ok */ - if ((boxes[bi].LL.x == INT_MAX) || (boxes[bi].UR.x == INT_MIN)) { - delta *= 2; /* try again with a finer interval */ - if (delta > INT_MAX/boxn) /* in limitBoxes, boxn*delta must fit in an int, so give up */ - loopcnt = LOOP_TRIES; - break; - } - } - if (bi == boxn) - unbounded = FALSE; - } - if (unbounded) { - /* Either an extremely short, even degenerate, box, or some failure with the path - * planner causing the spline to miss some boxes. In any case, use the shortest path - * to bound the boxes. This will probably mean a bad edge, but we avoid an infinite - * loop and we can see the bad edge, and even use the showboxes scaffolding. - */ - Ppolyline_t polyspl; - agerr(AGWARN, "Unable to reclaim box space in spline routing for edge \"%s\" -> \"%s\". Something is probably seriously wrong.\n", agnameof(agtail(realedge)), agnameof(aghead(realedge))); - make_polyline (pl, &polyspl); - limitBoxes (boxes, boxn, polyspl.ps, polyspl.pn, INIT_DELTA); - free (polyspl.ps); - } - - *npoints = spl.pn; - -#ifdef DEBUG - if (GD_showboxes(agraphof(aghead(realedge))) == 2 || - GD_showboxes(agraphof(agtail(realedge))) == 2 || - ED_showboxes(realedge) == 2 || - ND_showboxes(aghead(realedge)) == 2 || - ND_showboxes(agtail(realedge)) == 2) - printboxes(boxn, boxes); -#endif - - return ps; -} - -pointf *routesplines(path * pp, int *npoints) -{ - return _routesplines (pp, npoints, 0); -} - -pointf *routepolylines(path * pp, int *npoints) -{ - return _routesplines (pp, npoints, 1); -} - -static int overlap(int i0, int i1, int j0, int j1) -{ - /* i'll bet there's an elegant way to do this */ - if (i1 <= j0) - return 0; - if (i0 >= j1) - return 0; - if ((j0 <= i0) && (i0 <= j1)) - return (j1 - i0); - if ((j0 <= i1) && (i1 <= j1)) - return (i1 - j0); - return MIN(i1 - i0, j1 - j0); -} - - -/* - * repairs minor errors in the boxpath, such as boxes not joining - * or slightly intersecting. it's sort of the equivalent of the - * audit process in the 5E control program - if you've given up on - * fixing all the bugs, at least try to engineer around them! - * in postmodern CS, we could call this "self-healing code." - * - * Return 1 on failure; 0 on success. - */ -static int checkpath(int boxn, boxf* boxes, path* thepath) -{ - boxf *ba, *bb; - int bi, i, errs, l, r, d, u; - int xoverlap, yoverlap; - -#ifndef DONTFIXPATH - /* remove degenerate boxes. */ - i = 0; - for (bi = 0; bi < boxn; bi++) { - if (ABS(boxes[bi].LL.y - boxes[bi].UR.y) < .01) - continue; - if (ABS(boxes[bi].LL.x - boxes[bi].UR.x) < .01) - continue; - if (i != bi) - boxes[i] = boxes[bi]; - i++; - } - boxn = i; -#endif /* DONTFIXPATH */ - - ba = &boxes[0]; - if (ba->LL.x > ba->UR.x || ba->LL.y > ba->UR.y) { - agerr(AGERR, "in checkpath, box 0 has LL coord > UR coord\n"); - printpath(thepath); - return 1; - } - for (bi = 0; bi < boxn - 1; bi++) { - ba = &boxes[bi], bb = &boxes[bi + 1]; - if (bb->LL.x > bb->UR.x || bb->LL.y > bb->UR.y) { - agerr(AGERR, "in checkpath, box %d has LL coord > UR coord\n", - bi + 1); - printpath(thepath); - return 1; - } - l = (ba->UR.x < bb->LL.x) ? 1 : 0; - r = (ba->LL.x > bb->UR.x) ? 1 : 0; - d = (ba->UR.y < bb->LL.y) ? 1 : 0; - u = (ba->LL.y > bb->UR.y) ? 1 : 0; - errs = l + r + d + u; - if (errs > 0 && Verbose) { - fprintf(stderr, "in checkpath, boxes %d and %d don't touch\n", - bi, bi + 1); - printpath(thepath); - } -#ifndef DONTFIXPATH - if (errs > 0) { - int xy; - - if (l == 1) - xy = ba->UR.x, ba->UR.x = bb->LL.x, bb->LL.x = xy, l = 0; - else if (r == 1) - xy = ba->LL.x, ba->LL.x = bb->UR.x, bb->UR.x = xy, r = 0; - else if (d == 1) - xy = ba->UR.y, ba->UR.y = bb->LL.y, bb->LL.y = xy, d = 0; - else if (u == 1) - xy = ba->LL.y, ba->LL.y = bb->UR.y, bb->UR.y = xy, u = 0; - for (i = 0; i < errs - 1; i++) { - if (l == 1) - xy = (ba->UR.x + bb->LL.x) / 2.0 + 0.5, ba->UR.x = - bb->LL.x = xy, l = 0; - else if (r == 1) - xy = (ba->LL.x + bb->UR.x) / 2.0 + 0.5, ba->LL.x = - bb->UR.x = xy, r = 0; - else if (d == 1) - xy = (ba->UR.y + bb->LL.y) / 2.0 + 0.5, ba->UR.y = - bb->LL.y = xy, d = 0; - else if (u == 1) - xy = (ba->LL.y + bb->UR.y) / 2.0 + 0.5, ba->LL.y = - bb->UR.y = xy, u = 0; - } - } -#else - abort(); -#endif -#ifndef DONTFIXPATH - /* check for overlapping boxes */ - xoverlap = overlap(ba->LL.x, ba->UR.x, bb->LL.x, bb->UR.x); - yoverlap = overlap(ba->LL.y, ba->UR.y, bb->LL.y, bb->UR.y); - if (xoverlap && yoverlap) { - if (xoverlap < yoverlap) { - if (ba->UR.x - ba->LL.x > bb->UR.x - bb->LL.x) { - /* take space from ba */ - if (ba->UR.x < bb->UR.x) - ba->UR.x = bb->LL.x; - else - ba->LL.x = bb->UR.x; - } else { - /* take space from bb */ - if (ba->UR.x < bb->UR.x) - bb->LL.x = ba->UR.x; - else - bb->UR.x = ba->LL.x; - } - } else { /* symmetric for y coords */ - if (ba->UR.y - ba->LL.y > bb->UR.y - bb->LL.y) { - /* take space from ba */ - if (ba->UR.y < bb->UR.y) - ba->UR.y = bb->LL.y; - else - ba->LL.y = bb->UR.y; - } else { - /* take space from bb */ - if (ba->UR.y < bb->UR.y) - bb->LL.y = ba->UR.y; - else - bb->UR.y = ba->LL.y; - } - } - } - } -#endif /* DONTFIXPATH */ - - if (thepath->start.p.x < boxes[0].LL.x - || thepath->start.p.x > boxes[0].UR.x - || thepath->start.p.y < boxes[0].LL.y - || thepath->start.p.y > boxes[0].UR.y) { - if (Verbose) { - fprintf(stderr, "in checkpath, start port not in first box\n"); - printpath(thepath); - } -#ifndef DONTFIXPATH - if (thepath->start.p.x < boxes[0].LL.x) - thepath->start.p.x = boxes[0].LL.x; - if (thepath->start.p.x > boxes[0].UR.x) - thepath->start.p.x = boxes[0].UR.x; - if (thepath->start.p.y < boxes[0].LL.y) - thepath->start.p.y = boxes[0].LL.y; - if (thepath->start.p.y > boxes[0].UR.y) - thepath->start.p.y = boxes[0].UR.y; -#else - abort(); -#endif - } - if (thepath->end.p.x < boxes[boxn - 1].LL.x - || thepath->end.p.x > boxes[boxn - 1].UR.x - || thepath->end.p.y < boxes[boxn - 1].LL.y - || thepath->end.p.y > boxes[boxn - 1].UR.y) { - if (Verbose) { - fprintf(stderr, "in checkpath, end port not in last box\n"); - printpath(thepath); - } -#ifndef DONTFIXPATH - if (thepath->end.p.x < boxes[boxn - 1].LL.x) - thepath->end.p.x = boxes[boxn - 1].LL.x; - if (thepath->end.p.x > boxes[boxn - 1].UR.x) - thepath->end.p.x = boxes[boxn - 1].UR.x; - if (thepath->end.p.y < boxes[boxn - 1].LL.y) - thepath->end.p.y = boxes[boxn - 1].LL.y; - if (thepath->end.p.y > boxes[boxn - 1].UR.y) - thepath->end.p.y = boxes[boxn - 1].UR.y; -#else - abort(); -#endif - } - return 0; -} - -static int mkspacep(int size) -{ - if (size > maxpn) { - int newmax = maxpn + (size / PINC + 1) * PINC; - ps = RALLOC(newmax, ps, pointf); - if (!ps) { - agerr(AGERR, "cannot re-allocate ps\n"); - return 1; - } - maxpn = newmax; - } - return 0; -} - -static void printpath(path * pp) -{ - int bi; - -#ifdef NOTNOW - fprintf(stderr, "edge %d from %s to %s\n", nedges, - realedge->tail->name, realedge->head->name); - if (ED_count(origedge) > 1) - fprintf(stderr, " (it's part of a concentrator edge)\n"); -#endif - fprintf(stderr, "%d boxes:\n", pp->nbox); - for (bi = 0; bi < pp->nbox; bi++) - fprintf(stderr, "%d (%.5g, %.5g), (%.5g, %.5g)\n", bi, - pp->boxes[bi].LL.x, pp->boxes[bi].LL.y, - pp->boxes[bi].UR.x, pp->boxes[bi].UR.y); - fprintf(stderr, "start port: (%.5g, %.5g), tangent angle: %.5g, %s\n", - pp->start.p.x, pp->start.p.y, pp->start.theta, - pp->start.constrained ? "constrained" : "not constrained"); - fprintf(stderr, "end port: (%.5g, %.5g), tangent angle: %.5g, %s\n", - pp->end.p.x, pp->end.p.y, pp->end.theta, - pp->end.constrained ? "constrained" : "not constrained"); -} - -static pointf get_centroid(Agraph_t *g) -{ - int cnt = 0; - static pointf sum = {0.0, 0.0}; - static Agraph_t *save; - Agnode_t *n; - - sum.x = (GD_bb(g).LL.x + GD_bb(g).UR.x) / 2.0; - sum.y = (GD_bb(g).LL.y + GD_bb(g).UR.y) / 2.0; - return sum; - - if (save == g) return sum; - save = g; - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - sum.x += ND_pos(n)[0]; - sum.y += ND_pos(n)[1]; - cnt++; - } - sum.x = sum.x / cnt; - sum.y = sum.y / cnt; - return sum; -} - -static void bend(pointf spl[4], pointf centroid) -{ - pointf midpt,a; - double r; - double dist,dx,dy; - - midpt.x = (spl[0].x + spl[3].x)/2.0; - midpt.y = (spl[0].y + spl[3].y)/2.0; - dx = (spl[3].x - spl[0].x); - dy = (spl[3].y - spl[0].y); - dist = sqrt(dx*dx + dy*dy); - r = dist/5.0; - { - double vX = centroid.x - midpt.x; - double vY = centroid.y - midpt.y; - double magV = sqrt(vX*vX + vY*vY); - if (magV == 0) return; /* if midpoint == centroid, don't divide by zero */ - a.x = midpt.x - vX / magV * r; /* + would be closest point */ - a.y = midpt.y - vY / magV * r; - } - /* this can be improved */ - spl[1].x = spl[2].x = a.x; - spl[1].y = spl[2].y = a.y; -} - -/* makeStraightEdge: - * - * FIX: handle ports on boundary? - */ -#define MAX_EDGE 20 -void -makeStraightEdge(graph_t * g, edge_t * e, int et, splineInfo* sinfo) -{ - edge_t *e0; - edge_t** edges; - edge_t* elist[MAX_EDGE]; - int i, e_cnt; - - e_cnt = 1; - e0 = e; - while ((e0 != ED_to_virt(e0)) && (e0 = ED_to_virt(e0))) e_cnt++; - - if (e_cnt <= MAX_EDGE) - edges = elist; - else - edges = N_NEW(e_cnt,edge_t*); - e0 = e; - for (i = 0; i < e_cnt; i++) { - edges[i] = e0; - e0 = ED_to_virt(e0); - } - makeStraightEdges (g, edges, e_cnt, et, sinfo); - if (e_cnt > MAX_EDGE) free (edges); - -} - -void -makeStraightEdges(graph_t * g, edge_t** edges, int e_cnt, int et, splineInfo* sinfo) -{ - pointf dumb[4]; - node_t *n; - node_t *head; - int curved = (et == ET_CURVED); - pointf perp; - pointf del; - edge_t *e0; - edge_t *e; - int i, j, xstep, dx; - double l_perp; - pointf dumber[4]; - pointf p, q; - - e = edges[0]; - n = agtail(e); - head = aghead(e); - p = dumb[1] = dumb[0] = add_pointf(ND_coord(n), ED_tail_port(e).p); - q = dumb[2] = dumb[3] = add_pointf(ND_coord(head), ED_head_port(e).p); - if ((e_cnt == 1) || Concentrate) { - if (curved) bend(dumb,get_centroid(g)); - clip_and_install(e, aghead(e), dumb, 4, sinfo); - addEdgeLabels(g, e, p, q); - return; - } - - e0 = e; - if (APPROXEQPT(dumb[0], dumb[3], MILLIPOINT)) { - /* degenerate case */ - dumb[1] = dumb[0]; - dumb[2] = dumb[3]; - del.x = 0; - del.y = 0; - } - else { - perp.x = dumb[0].y - dumb[3].y; - perp.y = dumb[3].x - dumb[0].x; - l_perp = LEN(perp.x, perp.y); - xstep = GD_nodesep(g->root); - dx = xstep * (e_cnt - 1) / 2; - dumb[1].x = dumb[0].x + (dx * perp.x) / l_perp; - dumb[1].y = dumb[0].y + (dx * perp.y) / l_perp; - dumb[2].x = dumb[3].x + (dx * perp.x) / l_perp; - dumb[2].y = dumb[3].y + (dx * perp.y) / l_perp; - del.x = -xstep * perp.x / l_perp; - del.y = -xstep * perp.y / l_perp; - } - - for (i = 0; i < e_cnt; i++) { - e0 = edges[i]; - if (aghead(e0) == head) { - p = dumb[0]; - q = dumb[3]; - for (j = 0; j < 4; j++) { - dumber[j] = dumb[j]; - } - } else { - p = dumb[3]; - q = dumb[0]; - for (j = 0; j < 4; j++) { - dumber[3 - j] = dumb[j]; - } - } - if (et == ET_PLINE) { - Ppoint_t pts[4]; - Ppolyline_t spl, line; - - line.pn = 4; - line.ps = pts; - for (j=0; j < 4; j++) { - pts[j] = dumber[j]; - } - make_polyline (line, &spl); - clip_and_install(e0, aghead(e0), spl.ps, spl.pn, sinfo); - } - else - clip_and_install(e0, aghead(e0), dumber, 4, sinfo); - - addEdgeLabels(g, e0, p, q); - dumb[1].x += del.x; - dumb[1].y += del.y; - dumb[2].x += del.x; - dumb[2].y += del.y; - } -} - -#undef ROUTESPL_FUDGE diff --git a/internal/ccall/common/shapes.c b/internal/ccall/common/shapes.c deleted file mode 100644 index 61e4fe1..0000000 --- a/internal/ccall/common/shapes.c +++ /dev/null @@ -1,4223 +0,0 @@ -/* $id: shapes.c,v 1.82 2007/12/24 04:50:36 ellson Exp $ $Revision: 1.1 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "render.h" -#include "htmltable.h" -#include - -#define RBCONST 12 -#define RBCURVE .5 - -typedef struct { - pointf (*size_gen) (pointf); - void (*vertex_gen) (pointf*, pointf*); -} poly_desc_t; - -static port Center = { {0, 0}, -1, 0, 0, 0, 1, 0, 0, 0 }; - -#define ATTR_SET(a,n) ((a) && (*(agxget(n,a->index)) != '\0')) - /* Default point size = 0.05 inches or 3.6 points */ -#define DEF_POINT 0.05 - /* Minimum point size = 0.0003 inches or 0.02 points - * This will make the radius 0.01 points, which is the smallest - * non-zero number output by gvprintdouble in gvdevice.c - */ -#define MIN_POINT 0.0003 - /* extra null character needed to avoid style emitter from thinking - * there are arguments. - */ -static char *point_style[3] = { "invis\0", "filled\0", 0 }; - -/* forward declarations of functions used in shapes tables */ - -static void poly_init(node_t * n); -static void poly_free(node_t * n); -static port poly_port(node_t * n, char *portname, char *); -static boolean poly_inside(inside_t * inside_context, pointf p); -static int poly_path(node_t * n, port * p, int side, boxf rv[], int *kptr); -static void poly_gencode(GVJ_t * job, node_t * n); - -static void record_init(node_t * n); -static void record_free(node_t * n); -static port record_port(node_t * n, char *portname, char *); -static boolean record_inside(inside_t * inside_context, pointf p); -static int record_path(node_t * n, port * p, int side, boxf rv[], - int *kptr); -static void record_gencode(GVJ_t * job, node_t * n); - -static void point_init(node_t * n); -static void point_gencode(GVJ_t * job, node_t * n); -static boolean point_inside(inside_t * inside_context, pointf p); - -static boolean epsf_inside(inside_t * inside_context, pointf p); -static void epsf_gencode(GVJ_t * job, node_t * n); - -static pointf star_size (pointf); -static void star_vertices (pointf*, pointf*); -static boolean star_inside(inside_t * inside_context, pointf p); -static poly_desc_t star_gen = { - star_size, - star_vertices, -}; - -static pointf cylinder_size (pointf); -static void cylinder_vertices (pointf*, pointf*); -static void cylinder_draw(GVJ_t * job, pointf * AF, int sides, int style, int filled); -/* static boolean cylinder_inside(inside_t * inside_context, pointf p); */ -static poly_desc_t cylinder_gen = { - cylinder_size, - cylinder_vertices, -}; - -/* polygon descriptions. "polygon" with 0 sides takes all user control */ - -/* regul perip sides orien disto skew */ -static polygon_t p_polygon = { FALSE, 1, 0, 0., 0., 0. }; - -/* builtin polygon descriptions */ -static polygon_t p_ellipse = { FALSE, 1, 1, 0., 0., 0. }; -static polygon_t p_circle = { TRUE, 1, 1, 0., 0., 0. }; -static polygon_t p_egg = { FALSE, 1, 1, 0., -.3, 0. }; -static polygon_t p_triangle = { FALSE, 1, 3, 0., 0., 0. }; -static polygon_t p_box = { FALSE, 1, 4, 0., 0., 0. }; -static polygon_t p_square = { TRUE, 1, 4, 0., 0., 0. }; -static polygon_t p_plaintext = { FALSE, 0, 4, 0., 0., 0. }; -static polygon_t p_plain = { FALSE, 0, 4, 0., 0., 0. }; -static polygon_t p_diamond = { FALSE, 1, 4, 45., 0., 0. }; -static polygon_t p_trapezium = { FALSE, 1, 4, 0., -.4, 0. }; -static polygon_t p_parallelogram = { FALSE, 1, 4, 0., 0., .6 }; -static polygon_t p_house = { FALSE, 1, 5, 0., -.64, 0. }; -static polygon_t p_pentagon = { FALSE, 1, 5, 0., 0., 0. }; -static polygon_t p_hexagon = { FALSE, 1, 6, 0., 0., 0. }; -static polygon_t p_septagon = { FALSE, 1, 7, 0., 0., 0. }; -static polygon_t p_octagon = { FALSE, 1, 8, 0., 0., 0. }; -static polygon_t p_note = { FALSE, 1, 4, 0., 0., 0., DOGEAR }; -static polygon_t p_tab = { FALSE, 1, 4, 0., 0., 0., TAB }; -static polygon_t p_folder = { FALSE, 1, 4, 0., 0., 0., FOLDER }; -static polygon_t p_box3d = { FALSE, 1, 4, 0., 0., 0., BOX3D }; -static polygon_t p_component = { FALSE, 1, 4, 0., 0., 0., COMPONENT }; -static polygon_t p_underline = { FALSE, 1, 4, 0., 0., 0., UNDERLINE }; -static polygon_t p_cylinder = { FALSE, 1, 19, 0., 0., 0., CYLINDER, (pointf*)&cylinder_gen }; - -/* redundant and undocumented builtin polygons */ -static polygon_t p_doublecircle = { TRUE, 2, 1, 0., 0., 0. }; -static polygon_t p_invtriangle = { FALSE, 1, 3, 180., 0., 0. }; -static polygon_t p_invtrapezium = { FALSE, 1, 4, 180., -.4, 0. }; -static polygon_t p_invhouse = { FALSE, 1, 5, 180., -.64, 0. }; -static polygon_t p_doubleoctagon = { FALSE, 2, 8, 0., 0., 0. }; -static polygon_t p_tripleoctagon = { FALSE, 3, 8, 0., 0., 0. }; -static polygon_t p_Mdiamond = - { FALSE, 1, 4, 45., 0., 0., DIAGONALS | AUXLABELS }; -static polygon_t p_Msquare = { TRUE, 1, 4, 0., 0., 0., DIAGONALS }; -static polygon_t p_Mcircle = - { TRUE, 1, 1, 0., 0., 0., DIAGONALS | AUXLABELS }; - -/* non-convex polygons */ -static polygon_t p_star = { FALSE, 1, 10, 0., 0., 0., 0, (pointf*)&star_gen }; - -/* biological circuit shapes, as specified by SBOLv*/ -/** gene expression symbols **/ -static polygon_t p_promoter = { FALSE, 1, 4, 0., 0., 0., PROMOTER }; -static polygon_t p_cds = { FALSE, 1, 4, 0., 0., 0., CDS }; -static polygon_t p_terminator = { FALSE, 1, 4, 0., 0., 0., TERMINATOR}; -static polygon_t p_utr = { FALSE, 1, 4, 0., 0., 0., UTR}; -static polygon_t p_insulator = { FALSE, 1, 4, 0., 0., 0., INSULATOR}; -static polygon_t p_ribosite = { FALSE, 1, 4, 0., 0., 0., RIBOSITE}; -static polygon_t p_rnastab = { FALSE, 1, 4, 0., 0., 0., RNASTAB}; -static polygon_t p_proteasesite = { FALSE, 1, 4, 0., 0., 0., PROTEASESITE}; -static polygon_t p_proteinstab = { FALSE, 1, 4, 0., 0., 0., PROTEINSTAB}; -/** dna construction symbols **/ -static polygon_t p_primersite = { FALSE, 1, 4, 0., 0., 0., PRIMERSITE}; -static polygon_t p_restrictionsite = { FALSE, 1, 4, 0., 0., 0., RESTRICTIONSITE}; -static polygon_t p_fivepoverhang = { FALSE, 1, 4, 0., 0., 0., FIVEPOVERHANG}; -static polygon_t p_threepoverhang = { FALSE, 1, 4, 0., 0., 0., THREEPOVERHANG}; -static polygon_t p_noverhang = { FALSE, 1, 4, 0., 0., 0., NOVERHANG}; -static polygon_t p_assembly = { FALSE, 1, 4, 0., 0., 0., ASSEMBLY}; -static polygon_t p_signature = { FALSE, 1, 4, 0., 0., 0., SIGNATURE}; -static polygon_t p_rpromoter = { FALSE, 1, 4, 0., 0., 0., RPROMOTER}; -static polygon_t p_rarrow = { FALSE, 1, 4, 0., 0., 0., RARROW}; -static polygon_t p_larrow = { FALSE, 1, 4, 0., 0., 0., LARROW}; -static polygon_t p_lpromoter = { FALSE, 1, 4, 0., 0., 0., LPROMOTER}; - -#define IS_BOX(n) (ND_shape(n)->polygon == &p_box) -#define IS_PLAIN(n) (ND_shape(n)->polygon == &p_plain) - -/* True if style requires processing through round_corners. */ -#define SPECIAL_CORNERS(style) ((style) & (ROUNDED | DIAGONALS | SHAPE_MASK)) - - -/* - * every shape has these functions: - * - * void SHAPE_init(node_t *n) - * initialize the shape (usually at least its size). - * void SHAPE_free(node_t *n) - * free all memory used by the shape - * port SHAPE_port(node_t *n, char *portname) - * return the aiming point and slope (if constrained) - * of a port. - * int SHAPE_inside(inside_t *inside_context, pointf p, edge_t *e); - * test if point is inside the node shape which is - * assumed convex. - * the point is relative to the node center. the edge - * is passed in case the port affects spline clipping. - * int SHAPE_path(node *n, edge_t *e, int pt, boxf path[], int *nbox) - * create a path for the port of e that touches n, - * return side - * void SHAPE_gencode(GVJ_t *job, node_t *n) - * generate graphics code for a node. - * - * some shapes, polygons in particular, use additional shape control data * - * - */ - -static shape_functions poly_fns = { - poly_init, - poly_free, - poly_port, - poly_inside, - poly_path, - poly_gencode -}; -static shape_functions point_fns = { - point_init, - poly_free, - poly_port, - point_inside, - NULL, - point_gencode -}; -static shape_functions record_fns = { - record_init, - record_free, - record_port, - record_inside, - record_path, - record_gencode -}; -static shape_functions epsf_fns = { - epsf_init, - epsf_free, - poly_port, - epsf_inside, - NULL, - epsf_gencode -}; -static shape_functions star_fns = { - poly_init, - poly_free, - poly_port, - star_inside, - poly_path, - poly_gencode -}; -static shape_functions cylinder_fns = { - poly_init, - poly_free, - poly_port, - poly_inside, - poly_path, - poly_gencode -}; - -static shape_desc Shapes[] = { /* first entry is default for no such shape */ - {"box", &poly_fns, &p_box}, - {"polygon", &poly_fns, &p_polygon}, - {"ellipse", &poly_fns, &p_ellipse}, - {"oval", &poly_fns, &p_ellipse}, - {"circle", &poly_fns, &p_circle}, - {"point", &point_fns, &p_circle}, - {"egg", &poly_fns, &p_egg}, - {"triangle", &poly_fns, &p_triangle}, - {"none", &poly_fns, &p_plaintext}, - {"plaintext", &poly_fns, &p_plaintext}, - {"plain", &poly_fns, &p_plain}, - {"diamond", &poly_fns, &p_diamond}, - {"trapezium", &poly_fns, &p_trapezium}, - {"parallelogram", &poly_fns, &p_parallelogram}, - {"house", &poly_fns, &p_house}, - {"pentagon", &poly_fns, &p_pentagon}, - {"hexagon", &poly_fns, &p_hexagon}, - {"septagon", &poly_fns, &p_septagon}, - {"octagon", &poly_fns, &p_octagon}, - {"note", &poly_fns, &p_note}, - {"tab", &poly_fns, &p_tab}, - {"folder", &poly_fns, &p_folder}, - {"box3d", &poly_fns, &p_box3d}, - {"component", &poly_fns, &p_component}, - {"cylinder", &cylinder_fns, &p_cylinder}, - {"rect", &poly_fns, &p_box}, - {"rectangle", &poly_fns, &p_box}, - {"square", &poly_fns, &p_square}, - {"doublecircle", &poly_fns, &p_doublecircle}, - {"doubleoctagon", &poly_fns, &p_doubleoctagon}, - {"tripleoctagon", &poly_fns, &p_tripleoctagon}, - {"invtriangle", &poly_fns, &p_invtriangle}, - {"invtrapezium", &poly_fns, &p_invtrapezium}, - {"invhouse", &poly_fns, &p_invhouse}, - {"underline", &poly_fns, &p_underline}, - {"Mdiamond", &poly_fns, &p_Mdiamond}, - {"Msquare", &poly_fns, &p_Msquare}, - {"Mcircle", &poly_fns, &p_Mcircle}, - /* biological circuit shapes, as specified by SBOLv*/ - /** gene expression symbols **/ - {"promoter", &poly_fns, &p_promoter}, - {"cds", &poly_fns, &p_cds}, - {"terminator", &poly_fns, &p_terminator}, - {"utr", &poly_fns, &p_utr}, - {"insulator", &poly_fns, &p_insulator}, - {"ribosite", &poly_fns, &p_ribosite}, - {"rnastab", &poly_fns, &p_rnastab}, - {"proteasesite", &poly_fns, &p_proteasesite}, - {"proteinstab", &poly_fns, &p_proteinstab}, - /** dna construction symbols **/ - {"primersite", &poly_fns, &p_primersite}, - {"restrictionsite", &poly_fns, &p_restrictionsite}, - {"fivepoverhang", &poly_fns, &p_fivepoverhang}, - {"threepoverhang", &poly_fns, &p_threepoverhang}, - {"noverhang", &poly_fns, &p_noverhang}, - {"assembly", &poly_fns, &p_assembly}, - {"signature", &poly_fns, &p_signature}, - {"rpromoter", &poly_fns, &p_rpromoter}, - {"larrow", &poly_fns, &p_larrow}, - {"rarrow", &poly_fns, &p_rarrow}, - {"lpromoter", &poly_fns, &p_lpromoter}, - /* *** shapes other than polygons *** */ - {"record", &record_fns, NULL}, - {"Mrecord", &record_fns, NULL}, - {"epsf", &epsf_fns, NULL}, - {"star", &star_fns, &p_star}, - {NULL, NULL, NULL} -}; - -static void unrecognized(node_t * n, char *p) -{ - agerr(AGWARN, "node %s, port %s unrecognized\n", agnameof(n), p); -} - -static double quant(double val, double q) -{ - int i; - i = val / q; - if (i * q + .00001 < val) - i++; - return i * q; -} - -/* test if both p0 and p1 are on the same side of the line L0,L1 */ -static int same_side(pointf p0, pointf p1, pointf L0, pointf L1) -{ - int s0, s1; - double a, b, c; - - /* a x + b y = c */ - a = -(L1.y - L0.y); - b = (L1.x - L0.x); - c = a * L0.x + b * L0.y; - - s0 = (a * p0.x + b * p0.y - c >= 0); - s1 = (a * p1.x + b * p1.y - c >= 0); - return (s0 == s1); -} - -static -char* penColor(GVJ_t * job, node_t * n) -{ - char *color; - - color = late_nnstring(n, N_color, ""); - if (!color[0]) - color = DEFAULT_COLOR; - gvrender_set_pencolor(job, color); - return color; -} - -static -char *findFillDflt(node_t * n, char *dflt) -{ - char *color; - - color = late_nnstring(n, N_fillcolor, ""); - if (!color[0]) { - /* for backward compatibilty, default fill is same as pen */ - color = late_nnstring(n, N_color, ""); - if (!color[0]) { - color = dflt; - } - } - return color; -} - -static -char *findFill(node_t * n) -{ - return (findFillDflt(n, DEFAULT_FILL)); -} - -char *findAttrColor(void *obj, attrsym_t *colorattr, char *dflt){ - char *color; - - if(colorattr != NULL) - color = late_nnstring(obj, colorattr, dflt); - else if(dflt != NULL && dflt[0]) - color = dflt; - else - color = DEFAULT_FILL; - return color; -} - - -static int -isBox (node_t* n) -{ - polygon_t *p; - - if ((p = ND_shape(n)->polygon)) { - return (p->sides == 4 && (ROUND(p->orientation) % 90) == 0 && p->distortion == 0. && p->skew == 0.); - } - else - return 0; -} - -/* isEllipse: - */ -static int -isEllipse(node_t* n) -{ - polygon_t *p; - - if ((p = ND_shape(n)->polygon)) { - return (p->sides <= 2); - } - else - return 0; -} - -static char **checkStyle(node_t * n, int *flagp) -{ - char *style; - char **pstyle = 0; - int istyle = 0; - polygon_t *poly; - - style = late_nnstring(n, N_style, ""); - if (style[0]) { - char **pp; - char **qp; - char *p; - pp = pstyle = parse_style(style); - while ((p = *pp)) { - if (streq(p, "filled")) { - istyle |= FILLED; - pp++; - } else if (streq(p, "rounded")) { - istyle |= ROUNDED; - qp = pp; /* remove rounded from list passed to renderer */ - do { - qp++; - *(qp - 1) = *qp; - } while (*qp); - } else if (streq(p, "diagonals")) { - istyle |= DIAGONALS; - qp = pp; /* remove diagonals from list passed to renderer */ - do { - qp++; - *(qp - 1) = *qp; - } while (*qp); - } else if (streq(p, "invis")) { - istyle |= INVISIBLE; - pp++; - } else if (streq(p, "radial")) { - istyle |= (RADIAL|FILLED); - qp = pp; /* remove radial from list passed to renderer */ - do { - qp++; - *(qp - 1) = *qp; - } while (*qp); - } else if (streq(p, "striped") && isBox(n)) { - istyle |= STRIPED; - qp = pp; /* remove striped from list passed to renderer */ - do { - qp++; - *(qp - 1) = *qp; - } while (*qp); - } else if (streq(p, "wedged") && isEllipse(n)) { - istyle |= WEDGED; - qp = pp; /* remove wedged from list passed to renderer */ - do { - qp++; - *(qp - 1) = *qp; - } while (*qp); - } else - pp++; - } - } - if ((poly = ND_shape(n)->polygon)) - istyle |= poly->option; - - *flagp = istyle; - return pstyle; -} - -static int stylenode(GVJ_t * job, node_t * n) -{ - char **pstyle, *s; - int istyle; - double penwidth; - - if ((pstyle = checkStyle(n, &istyle))) - gvrender_set_style(job, pstyle); - - if (N_penwidth && ((s = agxget(n, N_penwidth)) && s[0])) { - penwidth = late_double(n, N_penwidth, 1.0, 0.0); - gvrender_set_penwidth(job, penwidth); - } - - return istyle; -} - -static void Mcircle_hack(GVJ_t * job, node_t * n) -{ - double x, y; - pointf AF[2], p; - - y = .7500; - x = .6614; /* x^2 + y^2 = 1.0 */ - p.y = y * ND_ht(n) / 2.0; - p.x = ND_rw(n) * x; /* assume node is symmetric */ - - AF[0] = add_pointf(p, ND_coord(n)); - AF[1].y = AF[0].y; - AF[1].x = AF[0].x - 2 * p.x; - gvrender_polyline(job, AF, 2); - AF[0].y -= 2 * p.y; - AF[1].y = AF[0].y; - gvrender_polyline(job, AF, 2); -} - -/* round_corners: - * Handle some special graphical cases, such as rounding the shape, - * adding diagonals at corners, or drawing certain non-simple figures. - * Any drawing done here should assume fillcolors, pencolors, etc. - * have been set by the calling routine. Normally, the drawing should - * consist of a region, filled or unfilled, followed by additional line - * segments. A single fill is necessary for gradient colors to work. - */ -void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled) -{ - pointf *B, C[5], *D, p0, p1; - double rbconst, d, dx, dy, t; - int i, seg, mode, shape; - pointf* pts; - - shape = style & SHAPE_MASK; - if (style & DIAGONALS) - mode = DIAGONALS; - else if (style & SHAPE_MASK) - mode = shape; - else - mode = ROUNDED; - if (mode == CYLINDER) { - cylinder_draw (job, AF, sides, style, filled); - return; - } - B = N_NEW(4 * sides + 4, pointf); - i = 0; - /* rbconst is distance offset from a corner of the polygon. - * It should be the same for every corner, and also never - * bigger than one-third the length of a side. - */ - rbconst = RBCONST; - for (seg = 0; seg < sides; seg++) { - p0 = AF[seg]; - if (seg < sides - 1) - p1 = AF[seg + 1]; - else - p1 = AF[0]; - dx = p1.x - p0.x; - dy = p1.y - p0.y; - d = sqrt(dx * dx + dy * dy); - rbconst = MIN(rbconst, d / 3.0); - } - for (seg = 0; seg < sides; seg++) { - p0 = AF[seg]; - if (seg < sides - 1) - p1 = AF[seg + 1]; - else - p1 = AF[0]; - dx = p1.x - p0.x; - dy = p1.y - p0.y; - d = sqrt(dx * dx + dy * dy); - t = rbconst / d; - if (shape == BOX3D || shape == COMPONENT) - t /= 3; - else if (shape == DOGEAR) - t /= 2; - if (mode != ROUNDED) - B[i++] = p0; - else - B[i++] = interpolate_pointf(RBCURVE * t, p0, p1); - B[i++] = interpolate_pointf(t, p0, p1); - B[i++] = interpolate_pointf(1.0 - t, p0, p1); - if (mode == ROUNDED) - B[i++] = interpolate_pointf(1.0 - RBCURVE * t, p0, p1); - } - B[i++] = B[0]; - B[i++] = B[1]; - B[i++] = B[2]; - - switch (mode) { - case ROUNDED: - pts = N_GNEW(6 * sides + 2, pointf); - i = 0; - for (seg = 0; seg < sides; seg++) { - pts[i++] = B[4 * seg]; - pts[i++] = B[4 * seg+1]; - pts[i++] = B[4 * seg+1]; - pts[i++] = B[4 * seg+2]; - pts[i++] = B[4 * seg+2]; - pts[i++] = B[4 * seg+3]; - } - pts[i++] = pts[0]; - pts[i++] = pts[1]; - gvrender_beziercurve(job, pts+1, i-1, FALSE, FALSE, filled); - free (pts); - -#if 0 - if (filled) { - pointf *pts = N_GNEW(2 * sides, pointf); - pts[j++] = B[4 * seg + 1]; - pts[j++] = B[4 * seg + 2]; - } - gvrender_polygon(job, pts, 2 * sides, filled); - free(pts); - for (seg = 0; seg < sides; seg++) { - } - } - if (penc) { - for (seg = 0; seg < sides; seg++) { - gvrender_polyline(job, B + 4 * seg + 1, 2); - gvrender_beziercurve(job, B + 4 * seg + 2, 4, FALSE, FALSE, FALSE); - } - } -#endif - break; - case DIAGONALS: - /* diagonals are weird. rewrite someday. */ - gvrender_polygon(job, AF, sides, filled); - - for (seg = 0; seg < sides; seg++) { -#ifdef NOTDEF - C[0] = B[3 * seg]; - C[1] = B[3 * seg + 3]; - gvrender_polyline(job, C, 2); -#endif - C[0] = B[3 * seg + 2]; - C[1] = B[3 * seg + 4]; - gvrender_polyline(job, C, 2); - } - break; - case DOGEAR: - /* Add the cutoff edge. */ - D = N_NEW(sides + 1, pointf); - for (seg = 1; seg < sides; seg++) - D[seg] = AF[seg]; - D[0] = B[3 * (sides - 1) + 4]; - D[sides] = B[3 * (sides - 1) + 2]; - gvrender_polygon(job, D, sides + 1, filled); - free(D); - - /* Draw the inner edge. */ - seg = sides - 1; - C[0] = B[3 * seg + 2]; - C[1] = B[3 * seg + 4]; - C[2].x = C[1].x + (C[0].x - B[3 * seg + 3].x); - C[2].y = C[1].y + (C[0].y - B[3 * seg + 3].y); - gvrender_polyline(job, C + 1, 2); - C[1] = C[2]; - gvrender_polyline(job, C, 2); - break; - case TAB: - /* - * Adjust the perimeter for the protrusions. - * - * D[3] +--+ D[2] - * | | B[1] - * B[3] + +----------+--+ AF[0]=B[0]=D[0] - * | B[2]=D[1] | - * B[4] + | - * | | - * B[5] + | - * +----------------+ - * - */ - /* Add the tab edges. */ - D = N_NEW(sides + 2, pointf); - D[0] = AF[0]; - D[1] = B[2]; - D[2].x = B[2].x + (B[3].x - B[4].x) / 3; - D[2].y = B[2].y + (B[3].y - B[4].y) / 3; - D[3].x = B[3].x + (B[3].x - B[4].x) / 3; - D[3].y = B[3].y + (B[3].y - B[4].y) / 3; - for (seg = 4; seg < sides + 2; seg++) - D[seg] = AF[seg - 2]; - gvrender_polygon(job, D, sides + 2, filled); - free(D); - - - /* Draw the inner edge. */ - C[0] = B[3]; - C[1] = B[2]; - gvrender_polyline(job, C, 2); - break; - case FOLDER: - /* - * Adjust the perimeter for the protrusions. - * - * D[2] +----+ D[1] - * B[3]= / \ - * D[4] +--+----+ + + AF[0]=B[0]=D[0] - * | B[2] D[3] B[1]| - * B[4] + | - * | | - * B[5] + | - * +----------------+ - * - */ - /* Add the folder edges. */ - D = N_NEW(sides + 3, pointf); - D[0] = AF[0]; - D[1].x = AF[0].x - (AF[0].x - B[1].x) / 4; - D[1].y = AF[0].y + (B[3].y - B[4].y) / 3; - D[2].x = AF[0].x - 2 * (AF[0].x - B[1].x); - D[2].y = D[1].y; - D[3].x = AF[0].x - 2.25 * (AF[0].x - B[1].x); - D[3].y = B[3].y; - D[4].x = B[3].x; - D[4].y = B[3].y; - for (seg = 4; seg < sides + 3; seg++) - D[seg] = AF[seg - 3]; - gvrender_polygon(job, D, sides + 3, filled); - free(D); - break; - case BOX3D: - assert(sides == 4); - /* Adjust for the cutoff edges. */ - D = N_NEW(sides + 2, pointf); - D[0] = AF[0]; - D[1] = B[2]; - D[2] = B[4]; - D[3] = AF[2]; - D[4] = B[8]; - D[5] = B[10]; - gvrender_polygon(job, D, sides + 2, filled); - free(D); - - /* Draw the inner vertices. */ - C[0].x = B[1].x + (B[11].x - B[0].x); - C[0].y = B[1].y + (B[11].y - B[0].y); - C[1] = B[4]; - gvrender_polyline(job, C, 2); - C[1] = B[8]; - gvrender_polyline(job, C, 2); - C[1] = B[0]; - gvrender_polyline(job, C, 2); - break; - case COMPONENT: - assert(sides == 4); - /* - * Adjust the perimeter for the protrusions. - * - * D[1] +----------------+ D[0] - * | | - * 3+---+2 | - * | | - * 4+---+5 | - * | | - * 7+---+6 | - * | | - * 8+---+9 | - * | | - * 10+----------------+ D[11] - * - */ - D = N_NEW(sides + 8, pointf); - D[0] = AF[0]; - D[1] = AF[1]; - D[2].x = B[3].x + (B[4].x - B[3].x); - D[2].y = B[3].y + (B[4].y - B[3].y); - D[3].x = D[2].x + (B[3].x - B[2].x); - D[3].y = D[2].y + (B[3].y - B[2].y); - D[4].x = D[3].x + (B[4].x - B[3].x); - D[4].y = D[3].y + (B[4].y - B[3].y); - D[5].x = D[4].x + (D[2].x - D[3].x); - D[5].y = D[4].y + (D[2].y - D[3].y); - - D[9].x = B[6].x + (B[5].x - B[6].x); - D[9].y = B[6].y + (B[5].y - B[6].y); - D[8].x = D[9].x + (B[6].x - B[7].x); - D[8].y = D[9].y + (B[6].y - B[7].y); - D[7].x = D[8].x + (B[5].x - B[6].x); - D[7].y = D[8].y + (B[5].y - B[6].y); - D[6].x = D[7].x + (D[9].x - D[8].x); - D[6].y = D[7].y + (D[9].y - D[8].y); - - D[10] = AF[2]; - D[11] = AF[3]; - gvrender_polygon(job, D, sides + 8, filled); - - /* Draw the internal vertices. */ - C[0] = D[2]; - C[1].x = D[2].x - (D[3].x - D[2].x); - C[1].y = D[2].y - (D[3].y - D[2].y); - C[2].x = C[1].x + (D[4].x - D[3].x); - C[2].y = C[1].y + (D[4].y - D[3].y); - C[3] = D[5]; - gvrender_polyline(job, C, 4); - C[0] = D[6]; - C[1].x = D[6].x - (D[7].x - D[6].x); - C[1].y = D[6].y - (D[7].y - D[6].y); - C[2].x = C[1].x + (D[8].x - D[7].x); - C[2].y = C[1].y + (D[8].y - D[7].y); - C[3] = D[9]; - gvrender_polyline(job, C, 4); - - free(D); - break; - - case PROMOTER: - /* - * L-shaped arrow on a center line, scales in the x direction - * - * - * D[1] |\ - * +----------------+ \ - * | D[0] \ - * | \ - * | / - * | D[5] / - * | +-------+ / - * | | |/ - * +--------+ - */ - /* Add the tab edges. */ - - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //the arrow's thickness is (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides + 5, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8; //x_center + width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)*3/2; //D[4].y + width - D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4; //x_center - 2*width - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - D[3].x = D[2].x + (B[2].x - B[3].x)/2; //D[2].x + width - D[3].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - D[4].x = D[3].x; - D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y); //highest cds point - D[5].x = D[0].x; - D[5].y = D[4].y; //highest cds point - D[6].x = D[0].x; - D[6].y = D[4].y - (B[3].y-B[4].y)/4; //D[4].y - width/2 - D[7].x = D[6].x + (B[2].x - B[3].x); //D[6].x + 2*width - D[7].y = D[6].y + (B[3].y - B[4].y)/2; //D[6].y + width - D[8].x = D[0].x; - D[8].y = D[0].y + (B[3].y - B[4].y)/4;//D[0].y + width/2 - gvrender_polygon(job, D, sides + 5, filled); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - - case CDS: - /* - * arrow without the protrusions, scales normally - * - * - * D[1] = AF[1] - * +----------------+\ - * | D[0]\ - * | \ - * | / - * | / - * +----------------+/ - * D[3] - * - */ - D = N_NEW(sides + 1, pointf); - D[0].x = B[1].x; - D[0].y = B[1].y - (B[3].y - B[4].y)/2; - D[1].x = B[3].x; - D[1].y = B[3].y - (B[3].y - B[4].y)/2; - D[2].x = AF[2].x; - D[2].y = AF[2].y + (B[3].y - B[4].y)/2; - D[3].x = B[1].x; - D[3].y = AF[2].y + (B[3].y - B[4].y)/2; - D[4].y = AF[0].y - (AF[0].y - AF[3].y)/2; - D[4].x = AF[0].x; - - gvrender_polygon(job, D, sides + 1, filled); - free(D); - - break; - - case TERMINATOR: - /* - * T-shape, does not scale, always in the center - * - * - * D[4] - * +----------------+ - * | D[3] - * | | - * | | - * | D[6] D[1] | - * D[5]+---+ +----+ D[2] - * | | - * +-------+ D[0] - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - D = N_NEW(sides + 4, pointf); - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center + width/2 - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/2; - D[2].x = D[1].x + (B[2].x-B[3].x)/2; - D[2].y = D[1].y; - D[3].x = D[2].x; - D[3].y = D[2].y + (B[3].y-B[4].y)/2; - D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //D[3].y mirrowed across the center - D[4].y = D[3].y; - D[5].x = D[4].x; - D[5].y = D[2].y; - D[6].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[1].x mirrowed across the center - D[6].y = D[1].y; - D[7].x = D[6].x; - D[7].y = D[0].y; - gvrender_polygon(job, D, sides + 4, filled); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - - case UTR: - /* - * half-octagon with line, does not scale, always in center - * - * D[3] - * _____ D[2] - * / \ - * / \ D[1] - * | | - * ----------- - * D[0] - * - * - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - D = N_NEW(sides + 2, pointf); - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/4; //D[0].y+width/2 - D[2].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+width/2 - D[2].y = D[1].y + (B[3].y-B[4].y)/2; //D[1].y+width - D[3].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[2].x mirrowed across the center - D[3].y = D[2].y; - D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4; - D[4].y = D[1].y; - D[5].x = D[4].x; - D[5].y = D[0].y; - gvrender_polygon(job, D, sides + 2, filled); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case PRIMERSITE: - /* - * half arrow shape, scales in the x-direction - * D[1] - * |\ - * | \ - * | \ - * ------------ \ - * | \ - * ------------------\ D[0] - * - * -------------------------------- - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides + 1, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x);//x_center + width*2 - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width - D[1].x = D[0].x - (B[2].x-B[3].x); //x_center - D[1].y = D[0].y + (B[3].y-B[4].y); - D[2].x = D[1].x; - D[2].y = D[0].y + (B[3].y-B[4].y)/2; - D[3].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4;//x_center - 2*(scalable width) - D[3].y = D[2].y; - D[4].x = D[3].x; - D[4].y = D[0].y; - gvrender_polygon(job, D, sides + 1, filled); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case RESTRICTIONSITE: - /* - * zigzag shape, scales in the x-direction (only the middle section) - * - * - * ----D[2] - * | |________ D[0] - * | |____ - * ---------- | - * D[4] --- D[7] - * - * - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides + 4, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8 + (B[2].x-B[3].x)/2;//x_center + scalable_width + width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width - D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/8; //x_center - width - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[2].x - (B[2].x-B[3].x)/2; //D[2].x - width - D[3].y = D[2].y; - D[4].x = D[3].x; - D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/4; //y_center - 1/2(width) - D[5].x = D[0].x - (B[2].x-B[3].x)/2; - D[5].y = D[4].y; - D[6].x = D[5].x; - D[6].y = D[5].y - (B[3].y-B[4].y)/2; - D[7].x = D[0].x; - D[7].y = D[6].y; - gvrender_polygon(job, D, sides + 4, filled); - - /*dsDNA line left half*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = D[4].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - - /*dsDNA line right half*/ - C[0].x = D[7].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case FIVEPOVERHANG: - /* - * does not scale, on the left side - * - * D[3]------D[2] - * | | - * D[0]------D[1] - * ----- ------------ - * | | - * D[0]--D[1] - * - * - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides, pointf); - D[0].x = AF[1].x;//the very left edge - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width - D[1].x = D[0].x + 2*(B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*second, lower shape*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (B[2].x-B[3].x); - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width - D[1].x = D[0].x + (B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*dsDNA line right half*/ - C[0].x = D[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case THREEPOVERHANG: - /* - * does not scale, on the right side - * - * D[2]------D[1] - * | | - *----------D[3]------D[0] - * ----- D[1] - * | | - * D[3]--D[0] - * - * - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides, pointf); - D[0].x = AF[0].x;//the very right edge - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/2; - D[2].x = D[1].x - 2*(B[3].y-B[4].y); - D[2].y = D[1].y; - D[3].x = D[2].x; - D[3].y = D[0].y; - gvrender_polygon(job, D, sides, filled); - - /*second, lower shape*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[0].x - (B[2].x-B[3].x); - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/2; - D[2].x = D[1].x - (B[3].y-B[4].y); - D[2].y = D[1].y; - D[3].x = D[2].x; - D[3].y = D[0].y; - gvrender_polygon(job, D, sides, filled); - - /*dsDNA line left half*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = D[3].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case NOVERHANG: - /* - * does not scale - * - * D[3]------D[2] D[3]------D[2] - * | | | | - * ---D[0]------D[1] D[0]------D[1]---- - * D[3]------D[2] D[3]------D[2] - * | | | | - * D[0]------D[1] D[0]------D[1] - * - * - * - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - /*upper left rectangle*/ - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width - D[1].x = D[0].x + (B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*lower, left rectangle*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width - D[1].x = D[0].x + (B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*lower, right rectangle*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width - D[1].x = D[0].x + (B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*upper, right rectangle*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center - width - 1/4 width - D[1].x = D[0].x + (B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*dsDNA line right half*/ - C[0].x = D[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - - /*dsDNA line left half*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //D[0].x of of the left rectangles - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[1].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case ASSEMBLY: - /* - * does not scale - * - * D[3]----------D[2] - * | | - * D[0]----------D[1] - * ---- --------- - * D[3]----------D[2] - * | | - * D[0]----------D[1] - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width - D[1].x = D[0].x + 2*(B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*second, lower shape*/ - free(D); - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width - D[1].x = D[0].x + 2*(B[2].x-B[3].x); - D[1].y = D[0].y; - D[2].x = D[1].x; - D[2].y = D[1].y + (B[3].y-B[4].y)/2; - D[3].x = D[0].x; - D[3].y = D[2].y; - gvrender_polygon(job, D, sides, filled); - - /*dsDNA line right half*/ - C[0].x = D[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - - /*dsDNA line left half*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = D[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case SIGNATURE: - /* - * - * - * +--------------+ - * | | - * |x | - * |_____________ | - * +--------------+ - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length - D = N_NEW(sides, pointf); - D[0].x = AF[0].x; - D[0].y = B[1].y - (B[3].y - B[4].y)/2; - D[1].x = B[3].x; - D[1].y = B[3].y - (B[3].y - B[4].y)/2; - D[2].x = AF[2].x; - D[2].y = AF[2].y + (B[3].y - B[4].y)/2; - D[3].x = AF[0].x; - D[3].y = AF[2].y + (B[3].y - B[4].y)/2; - gvrender_polygon(job, D, sides, filled); - - /* "\" of the X*/ - C[0].x = AF[1].x + (B[2].x-B[3].x)/4; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8; //y_center + 1/4 width - C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2 - C[1].y = C[0].y - (B[3].y-B[4].y)/4;//C[0].y - width/2 - gvrender_polyline(job, C, 2); - - /*"/" of the X*/ - C[0].x = AF[1].x + (B[2].x-B[3].x)/4; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/8; //y_center - 1/4 width - C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2 - C[1].y = C[0].y + (B[3].y-B[4].y)/4;//C[0].y + width/2 - gvrender_polyline(job, C, 2); - - /*bottom line*/ - C[0].x = AF[1].x + (B[2].x-B[3].x)/4; - C[0].y = AF[2].y + (B[3].y-B[4].y)*3/4; - C[1].x = AF[0].x - (B[2].x-B[3].x)/4; - C[1].y = C[0].y; - gvrender_polyline(job, C, 2); - free(D); - - break; - case INSULATOR: - /* - * double square - * - * +-----+ - *--| ___ |--- - * | |_| | - * +-----+ - * - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - D = N_NEW(sides, pointf); - D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/2; //x_center+width - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)/2; //y_center - D[1].x = D[0].x; - D[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)/2; //D[0].y- width - D[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)/2; //x_center-width - D[2].y = D[1].y; - D[3].x = D[2].x; - D[3].y = D[0].y; - gvrender_polygon(job, D, sides, filled); - free(D); - - /*outer square line*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+1.5*width - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)*3/4; //y_center - C[1].x = C[0].x; - C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)*3/4; //y_center- 1.5*width - C[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //x_center-1.5*width - C[2].y = C[1].y; - C[3].x = C[2].x; - C[3].y = C[0].y; - C[4] = C[0]; - gvrender_polyline(job, C, 5); - - /*dsDNA line right half*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - - /*dsDNA line left half*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - - break; - case RIBOSITE: - /* - * X with a dashed line on the bottom - * - * - * X - * | - * ------------ - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - - D = N_NEW(sides + 12, pointf); //12-sided x - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 - D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x - D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4 - D[3].x = D[0].x; - D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 - D[4].x = D[0].x; - D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x - D[5].x = D[2].x; - D[5].y = D[4].y; - D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center - D[6].y = D[3].y; //top nook - D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y - D[7].y = D[5].y; - D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner - D[8].y = D[7].y; - D[9].x = D[8].x; - D[9].y = D[3].y; - D[10].x = D[8].x + (B[2].x-B[3].x)/8; - D[10].y = D[2].y; - D[11].x = D[8].x; - D[11].y = D[1].y; - D[12].x = D[8].x; - D[12].y = D[0].y; - D[13].x = D[10].x; - D[13].y = D[12].y; - D[14].x = D[6].x; //bottom nook - D[14].y = D[1].y; - D[15].x = D[2].x; - D[15].y = D[0].y; - gvrender_polygon(job, D, sides + 12, filled); - - //2-part dash line - - /*line below the x, bottom dash*/ - C[0].x = D[14].x; //x_center - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - C[1].x = C[0].x; - C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width - gvrender_polyline(job, C, 2); - - /*line below the x, top dash*/ - C[0].x = D[14].x; //x_center - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4; - C[1].x = C[0].x; - C[1].y = C[0].y + (B[3].y-B[4].y)/8; - gvrender_polyline(job, C, 2); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case RNASTAB: - /* - * hexagon with a dashed line on the bottom - * - * - * O - * | - * ------------ - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - - D = N_NEW(sides + 4, pointf); //12-sided x - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width - D[1].x = D[0].x + (B[2].x-B[3].x)/8; - D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 - D[2].x = D[1].x; //D[0].x- width/4 - D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2 - D[3].x = D[0].x; - D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 - D[4].x = D[3].x - (B[2].x-B[3].x)/4; - D[4].y = D[3].y; //top of the hexagon - D[5].x = D[4].x - (B[2].x-B[3].x)/8; - D[5].y = D[2].y; - D[6].x = D[5].x; - D[6].y = D[1].y; //left side - D[7].x = D[4].x; - D[7].y = D[0].y; //bottom - gvrender_polygon(job, D, sides + 4, filled); - - //2-part dash line - - /*line below the x, bottom dash*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - C[1].x = C[0].x; - C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width - gvrender_polyline(job, C, 2); - - /*line below the x, top dash*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4; - C[1].x = C[0].x; - C[1].y = C[0].y + (B[3].y-B[4].y)/8; - gvrender_polyline(job, C, 2); - - - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case PROTEASESITE: - /* - * X with a solid line on the bottom - * - * - * X - * | - * ------------ - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - D = N_NEW(sides + 12, pointf); //12-sided x - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width - D[1].x = D[0].x; - D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 - D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x - D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4 - D[3].x = D[0].x; - D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 - D[4].x = D[0].x; - D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x - D[5].x = D[2].x; - D[5].y = D[4].y; - D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center - D[6].y = D[3].y; //top nook - D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y - D[7].y = D[5].y; - D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner - D[8].y = D[7].y; - D[9].x = D[8].x; - D[9].y = D[3].y; - D[10].x = D[8].x + (B[2].x-B[3].x)/8; - D[10].y = D[2].y; - D[11].x = D[8].x; - D[11].y = D[1].y; - D[12].x = D[8].x; - D[12].y = D[0].y; - D[13].x = D[10].x; - D[13].y = D[12].y; - D[14].x = D[6].x; //bottom nook - D[14].y = D[1].y; - D[15].x = D[2].x; - D[15].y = D[0].y; - gvrender_polygon(job, D, sides + 12, filled); - - - /*line below the x*/ - C[0] = D[14]; - C[1].x = C[0].x; - C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - gvrender_polyline(job, C, 2); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - case PROTEINSTAB: - /* - * hexagon with a dashed line on the bottom - * - * - * O - * | - * ------------ - */ - //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 - //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; - //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; - - D = N_NEW(sides + 4, pointf); //12-sided x - D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon - D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width - D[1].x = D[0].x + (B[2].x-B[3].x)/8; - D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 - D[2].x = D[1].x; //D[0].x- width/4 - D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2 - D[3].x = D[0].x; - D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 - D[4].x = D[3].x - (B[2].x-B[3].x)/4; - D[4].y = D[3].y; //top of the hexagon - D[5].x = D[4].x - (B[2].x-B[3].x)/8; - D[5].y = D[2].y; - D[6].x = D[5].x; - D[6].y = D[1].y; //left side - D[7].x = D[4].x; - D[7].y = D[0].y; //bottom - gvrender_polygon(job, D, sides + 4, filled); - - /*line below the x*/ - C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; - C[0].y = D[0].y; - C[1].x = C[0].x; - C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center - gvrender_polyline(job, C, 2); - - /*dsDNA line*/ - C[0].x = AF[1].x; - C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; - C[1].x = AF[0].x; - C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; - gvrender_polyline(job, C, 2); - free(D); - - break; - - case RPROMOTER: - /* - * Adjust the perimeter for the protrusions. - * - * - * D[1] = AF[1] |\ - * +----------------+ \ - * | D[0] \ - * | \ - * | / - * | / - * | +-------+ / - * | | |/ - * +--------+ - */ - /* Add the tab edges. */ - D = N_NEW(sides + 5, pointf); /*5 new points*/ - D[0].x = B[1].x - (B[2].x - B[3].x)/2; - D[0].y = B[1].y - (B[3].y - B[4].y)/2; - D[1].x = B[3].x; - D[1].y = B[3].y - (B[3].y - B[4].y)/2; - D[2].x = AF[2].x; - D[2].y = AF[2].y; - D[3].x = B[2].x + (B[2].x - B[3].x)/2; - D[3].y = AF[2].y; - D[4].x = B[2].x + (B[2].x - B[3].x)/2; - D[4].y = AF[2].y + (B[3].y - B[4].y)/2; - D[5].x = B[1].x - (B[2].x - B[3].x)/2; - D[5].y = AF[2].y + (B[3].y - B[4].y)/2; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; - D[6].y = AF[3].y; - D[7].y = AF[0].y - (AF[0].y - AF[3].y)/2; /*triangle point */ - D[7].x = AF[0].x; /*triangle point */ - D[8].y = AF[0].y; - D[8].x = B[1].x - (B[2].x - B[3].x)/2; - - gvrender_polygon(job, D, sides + 5, filled); - free(D); - break; - - case RARROW: - /* - * Adjust the perimeter for the protrusions. - * - * - * D[1] = AF[1] |\ - * +----------------+ \ - * | D[0] \ - * | \ - * | / - * | / - * +----------------+ / - * |/ - * - */ - /* Add the tab edges. */ - D = N_NEW(sides + 3, pointf); /*3 new points*/ - D[0].x = B[1].x - (B[2].x - B[3].x)/2; - D[0].y = B[1].y - (B[3].y - B[4].y)/2; - D[1].x = B[3].x; - D[1].y = B[3].y - (B[3].y - B[4].y)/2; - D[2].x = AF[2].x; - D[2].y = AF[2].y + (B[3].y - B[4].y)/2; - D[3].x = B[1].x - (B[2].x - B[3].x)/2; - D[3].y = AF[2].y + (B[3].y - B[4].y)/2; - D[4].x = B[1].x - (B[2].x - B[3].x)/2; - D[4].y = AF[3].y; - D[5].y = AF[0].y - (AF[0].y - AF[3].y)/2;/*triangle point*/ - D[5].x = AF[0].x; /*triangle point */ - D[6].y = AF[0].y; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; - - gvrender_polygon(job, D, sides + 3, filled); - free(D); - break; - - case LARROW: - /* - * Adjust the perimeter for the protrusions. - * - * - * /| - * / +----------------+ - * / | - * \ | - * \ +----------------+ - * \| - * - */ - /* Add the tab edges. */ - D = N_NEW(sides + 3, pointf); /*3 new points*/ - D[0].x = AF[0].x; - D[0].y = AF[0].y - (B[3].y-B[4].y)/2; - D[1].x = B[2].x + (B[2].x - B[3].x)/2; - D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/ - D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[2].y = B[2].y; - D[3].x = AF[1].x; /*triangle point*/ - D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/ - D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[4].y = AF[2].y; - D[5].y = AF[2].y + (B[3].y-B[4].y)/2; - D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[6].y = AF[3].y + (B[3].y - B[4].y)/2; - D[6].x = AF[0].x;/*D[0]*/ - - gvrender_polygon(job, D, sides + 3, filled); - free(D); - break; - - case LPROMOTER: - /* - * Adjust the perimeter for the protrusions. - * - * - * /| - * / +----------------+ - * / D[0] - * / | - * \ | - * \ | - * \ +--------+ + - * \| | | - * +-------+ - */ - /* Add the tab edges. */ - D = N_NEW(sides + 5, pointf); /*3 new points*/ - D[0].x = AF[0].x; - D[0].y = AF[0].y - (B[3].y-B[4].y)/2; - D[1].x = B[2].x + (B[2].x - B[3].x)/2; - D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/ - D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[2].y = B[2].y; - D[3].x = AF[1].x; /*triangle point*/ - D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/ - D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[4].y = AF[2].y; - D[5].y = AF[2].y + (B[3].y-B[4].y)/2; - D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[6].y = AF[3].y + (B[3].y - B[4].y)/2; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; - D[7].x = B[1].x - (B[2].x - B[3].x)/2;/*D[6].x*/ - D[7].y = AF[3].y; - D[8].x = AF[3].x; - D[8].y = AF[3].y; - - gvrender_polygon(job, D, sides + 5, filled); - free(D); - break; - } - free(B); -} - -/*=============================poly start=========================*/ - -/* userSize; - * Return maximum size, in points, of width and height supplied - * by user, if any. Return 0 otherwise. - */ -static double userSize(node_t * n) -{ - double w, h; - w = late_double(n, N_width, 0.0, MIN_NODEWIDTH); - h = late_double(n, N_height, 0.0, MIN_NODEHEIGHT); - return POINTS(MAX(w, h)); -} - -shape_kind shapeOf(node_t * n) -{ - shape_desc *sh = ND_shape(n); - void (*ifn) (node_t *); - - if (!sh) - return SH_UNSET; - ifn = ND_shape(n)->fns->initfn; - if (ifn == poly_init) - return SH_POLY; - else if (ifn == record_init) - return SH_RECORD; - else if (ifn == point_init) - return SH_POINT; - else if (ifn == epsf_init) - return SH_EPSF; - else - return SH_UNSET; -} - -boolean isPolygon(node_t * n) -{ - return (ND_shape(n) && (ND_shape(n)->fns->initfn == poly_init)); -} - -static void poly_init(node_t * n) -{ - pointf dimen, min_bb, bb; - point imagesize; - pointf P, Q, R; - pointf *vertices; - char *p, *sfile, *fxd; - double temp, alpha, beta, gamma; - double orientation, distortion, skew; - double sectorangle, sidelength, skewdist, gdistortion, gskew; - double angle, sinx, cosx, xmax, ymax, scalex, scaley; - double width, height, marginx, marginy, spacex; - int regular, peripheries, sides; - int i, j, isBox, outp; - polygon_t *poly = NEW(polygon_t); - boolean isPlain = IS_PLAIN(n); - - regular = ND_shape(n)->polygon->regular; - peripheries = ND_shape(n)->polygon->peripheries; - sides = ND_shape(n)->polygon->sides; - orientation = ND_shape(n)->polygon->orientation; - skew = ND_shape(n)->polygon->skew; - distortion = ND_shape(n)->polygon->distortion; - regular |= mapbool(agget(n, "regular")); - - /* all calculations in floating point POINTS */ - - /* make x and y dimensions equal if node is regular - * If the user has specified either width or height, use the max. - * Else use minimum default value. - * If node is not regular, use the current width and height. - */ - if (isPlain) { - width = height = 0; - } - else if (regular) { - double sz = userSize(n); - if (sz > 0.0) - width = height = sz; - else { - width = ND_width(n); - height = ND_height(n); - width = height = POINTS(MIN(width, height)); - } - } else { - width = POINTS(ND_width(n)); - height = POINTS(ND_height(n)); - } - - peripheries = late_int(n, N_peripheries, peripheries, 0); - orientation += late_double(n, N_orientation, 0.0, -360.0); - if (sides == 0) { /* not for builtins */ - skew = late_double(n, N_skew, 0.0, -100.0); - sides = late_int(n, N_sides, 4, 0); - distortion = late_double(n, N_distortion, 0.0, -100.0); - } - - /* get label dimensions */ - dimen = ND_label(n)->dimen; - - /* minimal whitespace around label */ - if ((dimen.x > 0) || (dimen.y > 0)) { - /* padding */ - if (!isPlain) { - if ((p = agget(n, "margin"))) { - marginx = marginy = 0; - i = sscanf(p, "%lf,%lf", &marginx, &marginy); - if (marginx < 0) - marginx = 0; - if (marginy < 0) - marginy = 0; - if (i > 0) { - dimen.x += 2 * POINTS(marginx); - if (i > 1) - dimen.y += 2 * POINTS(marginy); - else - dimen.y += 2 * POINTS(marginx); - } else - PAD(dimen); - } else - PAD(dimen); - } - } - spacex = dimen.x - ND_label(n)->dimen.x; - - /* quantization */ - if ((temp = GD_drawing(agraphof(n))->quantum) > 0.0) { - temp = POINTS(temp); - dimen.x = quant(dimen.x, temp); - dimen.y = quant(dimen.y, temp); - } - - imagesize.x = imagesize.y = 0; - if (ND_shape(n)->usershape) { - /* custom requires a shapefile - * not custom is an adaptable user shape such as a postscript - * function. - */ - if (streq(ND_shape(n)->name, "custom")) { - sfile = agget(n, "shapefile"); - imagesize = gvusershape_size(agraphof(n), sfile); - if ((imagesize.x == -1) && (imagesize.y == -1)) { - agerr(AGWARN, - "No or improper shapefile=\"%s\" for node \"%s\"\n", - (sfile ? sfile : ""), agnameof(n)); - imagesize.x = imagesize.y = 0; - } else { - GD_has_images(agraphof(n)) = TRUE; - imagesize.x += 2; /* some fixed padding */ - imagesize.y += 2; - } - } - } else if ((sfile = agget(n, "image")) && (*sfile != '\0')) { - imagesize = gvusershape_size(agraphof(n), sfile); - if ((imagesize.x == -1) && (imagesize.y == -1)) { - agerr(AGWARN, - "No or improper image=\"%s\" for node \"%s\"\n", - (sfile ? sfile : ""), agnameof(n)); - imagesize.x = imagesize.y = 0; - } else { - GD_has_images(agraphof(n)) = TRUE; - imagesize.x += 2; /* some fixed padding */ - imagesize.y += 2; - } - } - - /* initialize node bb to labelsize */ - bb.x = MAX(dimen.x, imagesize.x); - bb.y = MAX(dimen.y, imagesize.y); - - /* I don't know how to distort or skew ellipses in postscript */ - /* Convert request to a polygon with a large number of sides */ - if ((sides <= 2) && ((distortion != 0.) || (skew != 0.))) { - sides = 120; - } - - /* extra sizing depends on if label is centered vertically */ - p = agget(n, "labelloc"); - if (p && (p[0] == 't' || p[0] == 'b')) - ND_label(n)->valign = p[0]; - else - ND_label(n)->valign = 'c'; - - isBox = (sides == 4 && (ROUND(orientation) % 90) == 0 - && distortion == 0. && skew == 0.); - if (isBox) { - /* for regular boxes the fit should be exact */ - } else if (ND_shape(n)->polygon->vertices) { - poly_desc_t* pd = (poly_desc_t*)ND_shape(n)->polygon->vertices; - bb = pd->size_gen(bb); - } else { - /* for all other shapes, compute a smallest ellipse - * containing bb centered on the origin, and then pad for that. - * We assume the ellipse is defined by a scaling up of bb. - */ - temp = bb.y * SQRT2; - if (height > temp && ND_label(n)->valign == 'c') { - /* if there is height to spare - * and the label is centered vertically - * then just pad x in proportion to the spare height */ - bb.x *= sqrt(1. / (1. - SQR(bb.y / height))); - } else { - bb.x *= SQRT2; - bb.y = temp; - } -#if 1 - if (sides > 2) { - temp = cos(M_PI / sides); - bb.x /= temp; - bb.y /= temp; - /* FIXME - for odd-sided polygons, e.g. triangles, there - would be a better fit with some vertical adjustment of the shape */ - } -#endif - } - - /* at this point, bb is the minimum size of node that can hold the label */ - min_bb = bb; - - /* increase node size to width/height if needed */ - fxd = late_string(n, N_fixed, "false"); - if ((*fxd == 's') && streq(fxd,"shape")) { - bb.x = width; - bb.y = height; - poly->option |= FIXEDSHAPE; - } else if (mapbool(fxd)) { - /* check only label, as images we can scale to fit */ - if ((width < ND_label(n)->dimen.x) || (height < ND_label(n)->dimen.y)) - agerr(AGWARN, - "node '%s', graph '%s' size too small for label\n", - agnameof(n), agnameof(agraphof(n))); - bb.x = width; - bb.y = height; - } else { - bb.x = width = MAX(width, bb.x); - bb.y = height = MAX(height, bb.y); - } - - /* If regular, make dimensions the same. - * Need this to guarantee final node size is regular. - */ - if (regular) { - width = height = bb.x = bb.y = MAX(bb.x, bb.y); - } - - /* Compute space available for label. Provides the justification borders */ - if (!mapbool(late_string(n, N_nojustify, "false"))) { - if (isBox) { - ND_label(n)->space.x = MAX(dimen.x,bb.x) - spacex; - } - else if (dimen.y < bb.y) { - temp = bb.x * sqrt(1.0 - SQR(dimen.y) / SQR(bb.y)); - ND_label(n)->space.x = MAX(dimen.x,temp) - spacex; - } - else - ND_label(n)->space.x = dimen.x - spacex; - } else { - ND_label(n)->space.x = dimen.x - spacex; - } - - if ((poly->option & FIXEDSHAPE) == 0) { - temp = bb.y - min_bb.y; - if (dimen.y < imagesize.y) - temp += imagesize.y - dimen.y; - ND_label(n)->space.y = dimen.y + temp; - } - - outp = peripheries; - if (peripheries < 1) - outp = 1; - if (sides < 3) { /* ellipses */ - sides = 2; - vertices = N_NEW(outp * sides, pointf); - P.x = bb.x / 2.; - P.y = bb.y / 2.; - vertices[0].x = -P.x; - vertices[0].y = -P.y; - vertices[1] = P; - if (peripheries > 1) { - for (j = 1, i = 2; j < peripheries; j++) { - P.x += GAP; - P.y += GAP; - vertices[i].x = -P.x; - vertices[i].y = -P.y; - i++; - vertices[i].x = P.x; - vertices[i].y = P.y; - i++; - } - bb.x = 2. * P.x; - bb.y = 2. * P.y; - } - } else { - -/* - * FIXME - this code is wrong - it doesn't work for concave boundaries. - * (e.g. "folder" or "promoter") - * I don't think it even needs sectorangle, or knowledge of skewed shapes. - * (Concepts that only work for convex regular (modulo skew/distort) polygons.) - * - * I think it only needs to know inside v. outside (by always drawing - * boundaries clockwise, say), and the two adjacent segments. - * - * It needs to find the point where the two lines, parallel to - * the current segments, and outside by GAP distance, intersect. - */ - - vertices = N_NEW(outp * sides, pointf); - if (ND_shape(n)->polygon->vertices) { - poly_desc_t* pd = (poly_desc_t*)ND_shape(n)->polygon->vertices; - pd->vertex_gen (vertices, &bb); - xmax = bb.x/2; - ymax = bb.y/2; - } else { - sectorangle = 2. * M_PI / sides; - sidelength = sin(sectorangle / 2.); - skewdist = hypot(fabs(distortion) + fabs(skew), 1.); - gdistortion = distortion * SQRT2 / cos(sectorangle / 2.); - gskew = skew / 2.; - angle = (sectorangle - M_PI) / 2.; - sincos(angle, &sinx, &cosx); - R.x = .5 * cosx; - R.y = .5 * sinx; - xmax = ymax = 0.; - angle += (M_PI - sectorangle) / 2.; - for (i = 0; i < sides; i++) { - - /*next regular vertex */ - angle += sectorangle; - sincos(angle, &sinx, &cosx); - R.x += sidelength * cosx; - R.y += sidelength * sinx; - - /*distort and skew */ - P.x = R.x * (skewdist + R.y * gdistortion) + R.y * gskew; - P.y = R.y; - - /*orient P.x,P.y */ - alpha = RADIANS(orientation) + atan2(P.y, P.x); - sincos(alpha, &sinx, &cosx); - P.x = P.y = hypot(P.x, P.y); - P.x *= cosx; - P.y *= sinx; - - /*scale for label */ - P.x *= bb.x; - P.y *= bb.y; - - /*find max for bounding box */ - xmax = MAX(fabs(P.x), xmax); - ymax = MAX(fabs(P.y), ymax); - - /* store result in array of points */ - vertices[i] = P; - if (isBox) { /* enforce exact symmetry of box */ - vertices[1].x = -P.x; - vertices[1].y = P.y; - vertices[2].x = -P.x; - vertices[2].y = -P.y; - vertices[3].x = P.x; - vertices[3].y = -P.y; - break; - } - } - } - - /* apply minimum dimensions */ - xmax *= 2.; - ymax *= 2.; - bb.x = MAX(width, xmax); - bb.y = MAX(height, ymax); - scalex = bb.x / xmax; - scaley = bb.y / ymax; - - for (i = 0; i < sides; i++) { - P = vertices[i]; - P.x *= scalex; - P.y *= scaley; - vertices[i] = P; - } - - if (peripheries > 1) { - Q = vertices[(sides - 1)]; - R = vertices[0]; - beta = atan2(R.y - Q.y, R.x - Q.x); - for (i = 0; i < sides; i++) { - - /*for each vertex find the bisector */ - P = Q; - Q = R; - R = vertices[(i + 1) % sides]; - alpha = beta; - beta = atan2(R.y - Q.y, R.x - Q.x); - gamma = (alpha + M_PI - beta) / 2.; - - /*find distance along bisector to */ - /*intersection of next periphery */ - temp = GAP / sin(gamma); - - /*convert this distance to x and y */ - sincos((alpha - gamma), &sinx, &cosx); - sinx *= temp; - cosx *= temp; - - /*save the vertices of all the */ - /*peripheries at this base vertex */ - for (j = 1; j < peripheries; j++) { - Q.x += cosx; - Q.y += sinx; - vertices[i + j * sides] = Q; - } - } - for (i = 0; i < sides; i++) { - P = vertices[i + (peripheries - 1) * sides]; - bb.x = MAX(2. * fabs(P.x), bb.x); - bb.y = MAX(2. * fabs(P.y), bb.y); - } - } - } - poly->regular = regular; - poly->peripheries = peripheries; - poly->sides = sides; - poly->orientation = orientation; - poly->skew = skew; - poly->distortion = distortion; - poly->vertices = vertices; - - if (poly->option & FIXEDSHAPE) { - /* set width and height to reflect label and shape */ - ND_width(n) = PS2INCH(MAX(dimen.x,bb.x)); - ND_height(n) = PS2INCH(MAX(dimen.y,bb.y)); - } else { - ND_width(n) = PS2INCH(bb.x); - ND_height(n) = PS2INCH(bb.y); - } - ND_shape_info(n) = (void *) poly; -} - -static void poly_free(node_t * n) -{ - polygon_t *p = ND_shape_info(n); - - if (p) { - free(p->vertices); - free(p); - } -} - -#define GET_PORT_BOX(n,e) ((n) == (e)->head ? ED_head_port(e).bp : ED_tail_port(e).bp) - -/* poly_inside: - * Return true if point p is inside polygonal shape of node inside_context->s.n. - * Calculations are done using unrotated node shape. Thus, if p is in a rotated - * coordinate system, it is reset as P in the unrotated coordinate system. Similarly, - * the ND_rw, ND_lw and ND_ht values are rotated if the graph is flipped. - */ -static boolean poly_inside(inside_t * inside_context, pointf p) -{ - static node_t *lastn; /* last node argument */ - static polygon_t *poly; - static int last, outp, sides; - static pointf O; /* point (0,0) */ - static pointf *vertex; - static double xsize, ysize, scalex, scaley, box_URx, box_URy; - - int i, i1, j, s; - pointf P, Q, R; - boxf *bp; - node_t *n; - - if (!inside_context) { - lastn = NULL; - return FALSE; - } - - bp = inside_context->s.bp; - n = inside_context->s.n; - P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - - /* Quick test if port rectangle is target */ - if (bp) { - boxf bbox = *bp; - return INSIDE(P, bbox); - } - - if (n != lastn) { - double n_width, n_height; - poly = (polygon_t *) ND_shape_info(n); - vertex = poly->vertices; - sides = poly->sides; - - if (poly->option & FIXEDSHAPE) { - boxf bb = polyBB(poly); - n_width = bb.UR.x - bb.LL.x; - n_height = bb.UR.y - bb.LL.y; - /* get point and node size adjusted for rankdir=LR */ - if (GD_flip(agraphof(n))) { - ysize = n_width; - xsize = n_height; - } else { - xsize = n_width; - ysize = n_height; - } - } else { - /* get point and node size adjusted for rankdir=LR */ - if (GD_flip(agraphof(n))) { - ysize = ND_lw(n) + ND_rw(n); - xsize = ND_ht(n); - } else { - xsize = ND_lw(n) + ND_rw(n); - ysize = ND_ht(n); - } - n_width = POINTS(ND_width(n)); - n_height = POINTS(ND_height(n)); - } - - /* scale */ - if (xsize == 0.0) - xsize = 1.0; - if (ysize == 0.0) - ysize = 1.0; - scalex = n_width / xsize; - scaley = n_height / ysize; - box_URx = n_width / 2.0; - box_URy = n_height / 2.0; - - /* index to outer-periphery */ - outp = (poly->peripheries - 1) * sides; - if (outp < 0) - outp = 0; - lastn = n; - } - - /* scale */ - P.x *= scalex; - P.y *= scaley; - - /* inside bounding box? */ - if ((fabs(P.x) > box_URx) || (fabs(P.y) > box_URy)) - return FALSE; - - /* ellipses */ - if (sides <= 2) - return (hypot(P.x / box_URx, P.y / box_URy) < 1.); - - /* use fast test in case we are converging on a segment */ - i = last % sides; /* in case last left over from larger polygon */ - i1 = (i + 1) % sides; - Q = vertex[i + outp]; - R = vertex[i1 + outp]; - if (!(same_side(P, O, Q, R))) /* false if outside the segment's face */ - return FALSE; - /* else inside the segment face... */ - if ((s = same_side(P, Q, R, O)) && (same_side(P, R, O, Q))) /* true if between the segment's sides */ - return TRUE; - /* else maybe in another segment */ - for (j = 1; j < sides; j++) { /* iterate over remaining segments */ - if (s) { /* clockwise */ - i = i1; - i1 = (i + 1) % sides; - } else { /* counter clockwise */ - i1 = i; - i = (i + sides - 1) % sides; - } - if (!(same_side(P, O, vertex[i + outp], vertex[i1 + outp]))) { /* false if outside any other segment's face */ - last = i; - return FALSE; - } - } - /* inside all segments' faces */ - last = i; /* in case next edge is to same side */ - return TRUE; -} - -/* poly_path: - * Generate box path from port to border. - * Store boxes in rv and number of boxes in kptr. - * side gives preferred side of bounding box for last node. - * Return actual side. Returning 0 indicates nothing done. - */ -static int poly_path(node_t * n, port * p, int side, boxf rv[], int *kptr) -{ - side = 0; - - if (ND_label(n)->html && ND_has_port(n)) { - side = html_path(n, p, side, rv, kptr); - } - return side; -} - -/* invflip_side: - */ -static int invflip_side(int side, int rankdir) -{ - switch (rankdir) { - case RANKDIR_TB: - break; - case RANKDIR_BT: - switch (side) { - case TOP: - side = BOTTOM; - break; - case BOTTOM: - side = TOP; - break; - default: - break; - } - break; - case RANKDIR_LR: - switch (side) { - case TOP: - side = RIGHT; - break; - case BOTTOM: - side = LEFT; - break; - case LEFT: - side = TOP; - break; - case RIGHT: - side = BOTTOM; - break; - } - break; - case RANKDIR_RL: - switch (side) { - case TOP: - side = RIGHT; - break; - case BOTTOM: - side = LEFT; - break; - case LEFT: - side = BOTTOM; - break; - case RIGHT: - side = TOP; - break; - } - break; - } - return side; -} - -/* invflip_angle: - */ -static double invflip_angle(double angle, int rankdir) -{ - switch (rankdir) { - case RANKDIR_TB: - break; - case RANKDIR_BT: - angle *= -1; - break; - case RANKDIR_LR: - angle -= M_PI * 0.5; - break; - case RANKDIR_RL: - if (angle == M_PI) - angle = -0.5 * M_PI; - else if (angle == M_PI * 0.75) - angle = -0.25 * M_PI; - else if (angle == M_PI * 0.5) - angle = 0; -/* clang complains about self assignment of double - else if (angle == M_PI * 0.25) - angle = angle; - */ - else if (angle == 0) - angle = M_PI * 0.5; - else if (angle == M_PI * -0.25) - angle = M_PI * 0.75; - else if (angle == M_PI * -0.5) - angle = M_PI; -/* clang complains about self assignment of double - else if (angle == M_PI * -0.75) - angle = angle; - */ - break; - } - return angle; -} - -/* compassPoint: - * Compute compass points for non-trivial shapes. - * It finds where the ray ((0,0),(x,y)) hits the boundary and - * returns it. - * Assumes ictxt and ictxt->n are non-NULL. - * - * bezier_clip uses the shape's _inside function, which assumes the input - * point is in the rotated coordinate system (as determined by rankdir), so - * it rotates the point counterclockwise based on rankdir to get the node's - * coordinate system. - * To handle this, if rankdir is set, we rotate (x,y) clockwise, and then - * rotate the answer counterclockwise. - */ -static pointf compassPoint(inside_t * ictxt, double y, double x) -{ - pointf curve[4]; /* bezier control points for a straight line */ - node_t *n = ictxt->s.n; - graph_t* g = agraphof(n); - int rd = GD_rankdir(g); - pointf p; - - p.x = x; - p.y = y; - if (rd) - p = cwrotatepf(p, 90 * rd); - - curve[0].x = curve[0].y = 0; - curve[1] = curve[0]; - curve[3] = curve[2] = p; - - bezier_clip(ictxt, ND_shape(n)->fns->insidefn, curve, 1); - - if (rd) - curve[0] = ccwrotatepf(curve[0], 90 * rd); - return curve[0]; -} - -/* compassPort: - * Attach a compass point to a port pp, and fill in remaining fields. - * n is the corresponding node; bp is the bounding box of the port. - * compass is the compass point - * Return 1 if unrecognized compass point, in which case we - * use the center. - * - * This function also finishes initializing the port structure, - * even if no compass point is involved. - * The sides value gives the set of sides shared by the port. This - * is used with a compass point to indicate if the port is exposed, to - * set the port's side value. - * - * If ictxt is NULL, we are working with a simple rectangular shape (node or - * port of record of HTML label), so compass points are trivial. If ictxt is - * not NULL, it provides shape information so that the compass point can be - * calculated based on the shape. - * - * The code assumes the node has its unrotated shape to find the points, - * angles, etc. At the end, the parameters are adjusted to take into account - * the rankdir attribute. In particular, the first if-else statement flips - * the already adjusted ND_ht, ND_lw and ND_rw back to non-flipped values. - * - */ -static int -compassPort(node_t * n, boxf * bp, port * pp, char *compass, int sides, - inside_t * ictxt) -{ - boxf b; - pointf p, ctr; - int rv = 0; - double theta = 0.0; - boolean constrain = FALSE; - boolean dyna = FALSE; - int side = 0; - boolean clip = TRUE; - boolean defined; - double maxv; /* sufficiently large value outside of range of node */ - - if (bp) { - b = *bp; - p = pointfof((b.LL.x + b.UR.x) / 2, (b.LL.y + b.UR.y) / 2); - defined = TRUE; - } else { - p.x = p.y = 0.; - if (GD_flip(agraphof(n))) { - b.UR.x = ND_ht(n) / 2.; - b.LL.x = -b.UR.x; - b.UR.y = ND_lw(n); - b.LL.y = -b.UR.y; - } else { - b.UR.y = ND_ht(n) / 2.; - b.LL.y = -b.UR.y; - b.UR.x = ND_lw(n); - b.LL.x = -b.UR.x; - } - defined = FALSE; - } - maxv = MAX(b.UR.x,b.UR.y); - maxv *= 4.0; - ctr = p; - if (compass && *compass) { - switch (*compass++) { - case 'e': - if (*compass) - rv = 1; - else { - if (ictxt) - p = compassPoint(ictxt, ctr.y, maxv); - else - p.x = b.UR.x; - theta = 0.0; - constrain = TRUE; - defined = TRUE; - clip = FALSE; - side = sides & RIGHT; - } - break; - case 's': - p.y = b.LL.y; - constrain = TRUE; - clip = FALSE; - switch (*compass) { - case '\0': - theta = -M_PI * 0.5; - defined = TRUE; - if (ictxt) - p = compassPoint(ictxt, -maxv, ctr.x); - else - p.x = ctr.x; - side = sides & BOTTOM; - break; - case 'e': - theta = -M_PI * 0.25; - defined = TRUE; - if (ictxt) - p = compassPoint(ictxt, -maxv, maxv); - else - p.x = b.UR.x; - side = sides & (BOTTOM | RIGHT); - break; - case 'w': - theta = -M_PI * 0.75; - defined = TRUE; - if (ictxt) - p = compassPoint(ictxt, -maxv, -maxv); - else - p.x = b.LL.x; - side = sides & (BOTTOM | LEFT); - break; - default: - p.y = ctr.y; - constrain = FALSE; - clip = TRUE; - rv = 1; - break; - } - break; - case 'w': - if (*compass) - rv = 1; - else { - if (ictxt) - p = compassPoint(ictxt, ctr.y, -maxv); - else - p.x = b.LL.x; - theta = M_PI; - constrain = TRUE; - defined = TRUE; - clip = FALSE; - side = sides & LEFT; - } - break; - case 'n': - p.y = b.UR.y; - constrain = TRUE; - clip = FALSE; - switch (*compass) { - case '\0': - defined = TRUE; - theta = M_PI * 0.5; - if (ictxt) - p = compassPoint(ictxt, maxv, ctr.x); - else - p.x = ctr.x; - side = sides & TOP; - break; - case 'e': - defined = TRUE; - theta = M_PI * 0.25; - if (ictxt) - p = compassPoint(ictxt, maxv, maxv); - else - p.x = b.UR.x; - side = sides & (TOP | RIGHT); - break; - case 'w': - defined = TRUE; - theta = M_PI * 0.75; - if (ictxt) - p = compassPoint(ictxt, maxv, -maxv); - else - p.x = b.LL.x; - side = sides & (TOP | LEFT); - break; - default: - p.y = ctr.y; - constrain = FALSE; - clip = TRUE; - rv = 1; - break; - } - break; - case '_': - dyna = TRUE; - side = sides; - break; - case 'c': - break; - default: - rv = 1; - break; - } - } - p = cwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - if (dyna) - pp->side = side; - else - pp->side = invflip_side(side, GD_rankdir(agraphof(n))); - pp->bp = bp; - PF2P(p, pp->p); - pp->theta = invflip_angle(theta, GD_rankdir(agraphof(n))); - if ((p.x == 0) && (p.y == 0)) - pp->order = MC_SCALE / 2; - else { - /* compute angle with 0 at north pole, increasing CCW */ - double angle = atan2(p.y, p.x) + 1.5 * M_PI; - if (angle >= 2 * M_PI) - angle -= 2 * M_PI; - pp->order = (int) ((MC_SCALE * angle) / (2 * M_PI)); - } - pp->constrained = constrain; - pp->defined = defined; - pp->clip = clip; - pp->dyna = dyna; - return rv; -} - -static port poly_port(node_t * n, char *portname, char *compass) -{ - port rv; - boxf *bp; - int sides; /* bitmap of which sides the port lies along */ - - if (portname[0] == '\0') - return Center; - - if (compass == NULL) - compass = "_"; - sides = BOTTOM | RIGHT | TOP | LEFT; - if ((ND_label(n)->html) && (bp = html_port(n, portname, &sides))) { - if (compassPort(n, bp, &rv, compass, sides, NULL)) { - agerr(AGWARN, - "node %s, port %s, unrecognized compass point '%s' - ignored\n", - agnameof(n), portname, compass); - } - } else { - inside_t *ictxtp; - inside_t ictxt; - - if (IS_BOX(n)) - ictxtp = NULL; - else { - ictxt.s.n = n; - ictxt.s.bp = NULL; - ictxtp = &ictxt; - } - if (compassPort(n, NULL, &rv, portname, sides, ictxtp)) - unrecognized(n, portname); - } - - rv.name = NULL; - return rv; -} - -#define multicolor(f) (strchr(f,':')) - -/* generic polygon gencode routine */ -static void poly_gencode(GVJ_t * job, node_t * n) -{ - obj_state_t *obj = job->obj; - polygon_t *poly; - double xsize, ysize; - int i, j, peripheries, sides, style; - pointf P, *vertices; - static pointf *AF; - static int A_size; - boolean filled; - boolean usershape_p; - boolean pfilled; /* true if fill not handled by user shape */ - char *color, *name; - int doMap = (obj->url || obj->explicit_tooltip); - char* fillcolor=NULL; - char* pencolor=NULL; - char* clrs[2]; - - if (doMap && !(job->flags & EMIT_CLUSTERS_LAST)) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - - poly = (polygon_t *) ND_shape_info(n); - vertices = poly->vertices; - sides = poly->sides; - peripheries = poly->peripheries; - if (A_size < sides) { - A_size = sides + 5; - AF = ALLOC(A_size, AF, pointf); - } - - /* nominal label position in the center of the node */ - ND_label(n)->pos = ND_coord(n); - - xsize = (ND_lw(n) + ND_rw(n)) / POINTS(ND_width(n)); - ysize = ND_ht(n) / POINTS(ND_height(n)); - - style = stylenode(job, n); - clrs[0] = NULL; - - if (ND_gui_state(n) & GUI_STATE_ACTIVE) { - pencolor = late_nnstring(n, N_activepencolor, DEFAULT_ACTIVEPENCOLOR); - gvrender_set_pencolor(job, pencolor); - color = - late_nnstring(n, N_activefillcolor, DEFAULT_ACTIVEFILLCOLOR); - gvrender_set_fillcolor(job, color); - filled = FILL; - } else if (ND_gui_state(n) & GUI_STATE_SELECTED) { - pencolor = - late_nnstring(n, N_selectedpencolor, DEFAULT_SELECTEDPENCOLOR); - gvrender_set_pencolor(job, pencolor); - color = - late_nnstring(n, N_selectedfillcolor, - DEFAULT_SELECTEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - filled = FILL; - } else if (ND_gui_state(n) & GUI_STATE_DELETED) { - pencolor = - late_nnstring(n, N_deletedpencolor, DEFAULT_DELETEDPENCOLOR); - gvrender_set_pencolor(job, pencolor); - color = - late_nnstring(n, N_deletedfillcolor, DEFAULT_DELETEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - filled = FILL; - } else if (ND_gui_state(n) & GUI_STATE_VISITED) { - pencolor = - late_nnstring(n, N_visitedpencolor, DEFAULT_VISITEDPENCOLOR); - gvrender_set_pencolor(job, pencolor); - color = - late_nnstring(n, N_visitedfillcolor, DEFAULT_VISITEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - filled = FILL; - } else { - if (style & FILLED) { - float frac; - fillcolor = findFill (n); - if (findStopColor (fillcolor, clrs, &frac)) { - gvrender_set_fillcolor(job, clrs[0]); - if (clrs[1]) - gvrender_set_gradient_vals(job,clrs[1],late_int(n,N_gradientangle,0,0), frac); - else - gvrender_set_gradient_vals(job,DEFAULT_COLOR,late_int(n,N_gradientangle,0,0), frac); - if (style & RADIAL) - filled = RGRADIENT; - else - filled = GRADIENT; - } - else { - gvrender_set_fillcolor(job, fillcolor); - filled = FILL; - } - } - else if (style & (STRIPED|WEDGED)) { - fillcolor = findFill (n); - /* gvrender_set_fillcolor(job, fillcolor); */ - filled = TRUE; - } - else { - filled = FALSE; - } - pencolor = penColor(job, n); /* emit pen color */ - } - - pfilled = !ND_shape(n)->usershape || streq(ND_shape(n)->name, "custom"); - - /* if no boundary but filled, set boundary color to transparent */ - if ((peripheries == 0) && filled && pfilled) { - peripheries = 1; - gvrender_set_pencolor(job, "transparent"); - } - - /* draw peripheries first */ - for (j = 0; j < peripheries; j++) { - for (i = 0; i < sides; i++) { - P = vertices[i + j * sides]; - AF[i].x = P.x * xsize + ND_coord(n).x; - AF[i].y = P.y * ysize + ND_coord(n).y; - } - if (sides <= 2) { - if ((style & WEDGED) && (j == 0) && multicolor(fillcolor)) { - int rv = wedgedEllipse (job, AF, fillcolor); - if (rv > 1) - agerr (AGPREV, "in node %s\n", agnameof(n)); - filled = 0; - } - gvrender_ellipse(job, AF, sides, filled); - if (style & DIAGONALS) { - Mcircle_hack(job, n); - } - } else if (style & STRIPED) { - if (j == 0) { - int rv = stripedBox (job, AF, fillcolor, 1); - if (rv > 1) - agerr (AGPREV, "in node %s\n", agnameof(n)); - } - gvrender_polygon(job, AF, sides, 0); - } else if (style & UNDERLINE) { - gvrender_set_pencolor(job, "transparent"); - gvrender_polygon(job, AF, sides, filled); - gvrender_set_pencolor(job, pencolor); - gvrender_polyline(job, AF+2, 2); - } else if (SPECIAL_CORNERS(style)) { - round_corners(job, AF, sides, style, filled); - } else { - gvrender_polygon(job, AF, sides, filled); - } - /* fill innermost periphery only */ - filled = FALSE; - } - - usershape_p = FALSE; - if (ND_shape(n)->usershape) { - name = ND_shape(n)->name; - if (streq(name, "custom")) { - if ((name = agget(n, "shapefile")) && name[0]) - usershape_p = TRUE; - } else - usershape_p = TRUE; - } else if ((name = agget(n, "image")) && name[0]) { - usershape_p = TRUE; - } - if (usershape_p) { - /* get coords of innermost periphery */ - for (i = 0; i < sides; i++) { - P = vertices[i]; - AF[i].x = P.x * xsize + ND_coord(n).x; - AF[i].y = P.y * ysize + ND_coord(n).y; - } - /* lay down fill first */ - if (filled && pfilled) { - if (sides <= 2) { - if ((style & WEDGED) && (j == 0) && multicolor(fillcolor)) { - int rv = wedgedEllipse (job, AF, fillcolor); - if (rv > 1) - agerr (AGPREV, "in node %s\n", agnameof(n)); - filled = 0; - } - gvrender_ellipse(job, AF, sides, filled); - if (style & DIAGONALS) { - Mcircle_hack(job, n); - } - } else if (style & STRIPED) { - int rv = stripedBox (job, AF, fillcolor, 1); - if (rv > 1) - agerr (AGPREV, "in node %s\n", agnameof(n)); - gvrender_polygon(job, AF, sides, 0); - } else if (style & (ROUNDED | DIAGONALS)) { - round_corners(job, AF, sides, style, filled); - } else { - gvrender_polygon(job, AF, sides, filled); - } - } - gvrender_usershape(job, name, AF, sides, filled, - late_string(n, N_imagescale, "false")); - filled = FALSE; /* with user shapes, we have done the fill if needed */ - } - - free (clrs[0]); - - emit_label(job, EMIT_NLABEL, ND_label(n)); - if (doMap) { - if (job->flags & EMIT_CLUSTERS_LAST) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - gvrender_end_anchor(job); - } -} - -/*=======================end poly======================================*/ - -/*===============================point start========================*/ - -/* point_init: - * shorthand for shape=circle, style=filled, width=0.05, label="" - */ -static void point_init(node_t * n) -{ - polygon_t *poly = NEW(polygon_t); - int sides, outp, peripheries = ND_shape(n)->polygon->peripheries; - double sz; - pointf P, *vertices; - int i, j; - double w, h; - - /* set width and height, and make them equal - * if user has set weight or height, use it. - * if both are set, use smallest. - * if neither, use default - */ - w = late_double(n, N_width, MAXDOUBLE, 0.0); - h = late_double(n, N_height, MAXDOUBLE, 0.0); - w = MIN(w, h); - if ((w == MAXDOUBLE) && (h == MAXDOUBLE)) /* neither defined */ - ND_width(n) = ND_height(n) = DEF_POINT; - else { - w = MIN(w, h); - /* If w == 0, use it; otherwise, make w no less than MIN_POINT due - * to the restrictions mentioned above. - */ - if (w > 0.0) - w = MAX(w,MIN_POINT); - ND_width(n) = ND_height(n) = w; - } - - sz = ND_width(n) * POINTS_PER_INCH; - peripheries = late_int(n, N_peripheries, peripheries, 0); - if (peripheries < 1) - outp = 1; - else - outp = peripheries; - sides = 2; - vertices = N_NEW(outp * sides, pointf); - P.y = P.x = sz / 2.; - vertices[0].x = -P.x; - vertices[0].y = -P.y; - vertices[1] = P; - if (peripheries > 1) { - for (j = 1, i = 2; j < peripheries; j++) { - P.x += GAP; - P.y += GAP; - vertices[i].x = -P.x; - vertices[i].y = -P.y; - i++; - vertices[i].x = P.x; - vertices[i].y = P.y; - i++; - } - sz = 2. * P.x; - } - poly->regular = 1; - poly->peripheries = peripheries; - poly->sides = 2; - poly->orientation = 0; - poly->skew = 0; - poly->distortion = 0; - poly->vertices = vertices; - - ND_height(n) = ND_width(n) = PS2INCH(sz); - ND_shape_info(n) = (void *) poly; -} - -static boolean point_inside(inside_t * inside_context, pointf p) -{ - static node_t *lastn; /* last node argument */ - static double radius; - pointf P; - node_t *n; - - if (!inside_context) { - lastn = NULL; - return FALSE; - } - - n = inside_context->s.n; - P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - - if (n != lastn) { - int outp; - polygon_t *poly = (polygon_t *) ND_shape_info(n); - - /* index to outer-periphery */ - outp = 2 * (poly->peripheries - 1); - if (outp < 0) - outp = 0; - - radius = poly->vertices[outp + 1].x; - lastn = n; - } - - /* inside bounding box? */ - if ((fabs(P.x) > radius) || (fabs(P.y) > radius)) - return FALSE; - - return (hypot(P.x, P.y) <= radius); -} - -static void point_gencode(GVJ_t * job, node_t * n) -{ - obj_state_t *obj = job->obj; - polygon_t *poly; - int i, j, sides, peripheries, style; - pointf P, *vertices; - static pointf *AF; - static int A_size; - boolean filled; - char *color; - int doMap = (obj->url || obj->explicit_tooltip); - - if (doMap && !(job->flags & EMIT_CLUSTERS_LAST)) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - - poly = (polygon_t *) ND_shape_info(n); - vertices = poly->vertices; - sides = poly->sides; - peripheries = poly->peripheries; - if (A_size < sides) { - A_size = sides + 2; - AF = ALLOC(A_size, AF, pointf); - } - - checkStyle(n, &style); - if (style & INVISIBLE) - gvrender_set_style(job, point_style); - else - gvrender_set_style(job, &point_style[1]); - if (N_penwidth) - gvrender_set_penwidth(job, late_double(n, N_penwidth, 1.0, 0.0)); - - if (ND_gui_state(n) & GUI_STATE_ACTIVE) { - color = late_nnstring(n, N_activepencolor, DEFAULT_ACTIVEPENCOLOR); - gvrender_set_pencolor(job, color); - color = - late_nnstring(n, N_activefillcolor, DEFAULT_ACTIVEFILLCOLOR); - gvrender_set_fillcolor(job, color); - } else if (ND_gui_state(n) & GUI_STATE_SELECTED) { - color = - late_nnstring(n, N_selectedpencolor, DEFAULT_SELECTEDPENCOLOR); - gvrender_set_pencolor(job, color); - color = - late_nnstring(n, N_selectedfillcolor, - DEFAULT_SELECTEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - } else if (ND_gui_state(n) & GUI_STATE_DELETED) { - color = - late_nnstring(n, N_deletedpencolor, DEFAULT_DELETEDPENCOLOR); - gvrender_set_pencolor(job, color); - color = - late_nnstring(n, N_deletedfillcolor, DEFAULT_DELETEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - } else if (ND_gui_state(n) & GUI_STATE_VISITED) { - color = - late_nnstring(n, N_visitedpencolor, DEFAULT_VISITEDPENCOLOR); - gvrender_set_pencolor(job, color); - color = - late_nnstring(n, N_visitedfillcolor, DEFAULT_VISITEDFILLCOLOR); - gvrender_set_fillcolor(job, color); - } else { - color = findFillDflt(n, "black"); - gvrender_set_fillcolor(job, color); /* emit fill color */ - penColor(job, n); /* emit pen color */ - } - filled = TRUE; - - /* if no boundary but filled, set boundary color to fill color */ - if (peripheries == 0) { - peripheries = 1; - if (color[0]) - gvrender_set_pencolor(job, color); - } - - for (j = 0; j < peripheries; j++) { - for (i = 0; i < sides; i++) { - P = vertices[i + j * sides]; - AF[i].x = P.x + ND_coord(n).x; - AF[i].y = P.y + ND_coord(n).y; - } - gvrender_ellipse(job, AF, sides, filled); - /* fill innermost periphery only */ - filled = FALSE; - } - - if (doMap) { - if (job->flags & EMIT_CLUSTERS_LAST) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - gvrender_end_anchor(job); - } -} - -/* the "record" shape is a rudimentary table formatter */ - -#define HASTEXT 1 -#define HASPORT 2 -#define HASTABLE 4 -#define INTEXT 8 -#define INPORT 16 - -#define ISCTRL(c) ((c) == '{' || (c) == '}' || (c) == '|' || (c) == '<' || (c) == '>') - -static char *reclblp; - -static void free_field(field_t * f) -{ - int i; - - for (i = 0; i < f->n_flds; i++) { - free_field(f->fld[i]); - } - - free(f->id); - free_label(f->lp); - free(f->fld); - free(f); -} - -/* parse_error: - * Clean up memory allocated in parse_reclbl, then return NULL - */ -static field_t *parse_error(field_t * rv, char *port) -{ - free_field(rv); - if (port) - free(port); - return NULL; -} - -static field_t *parse_reclbl(node_t * n, int LR, int flag, char *text) -{ - field_t *fp, *rv = NEW(field_t); - char *tsp, *psp=NULL, *hstsp, *hspsp=NULL, *sp; - char *tmpport = NULL; - int maxf, cnt, mode, wflag, ishardspace, fi; - textlabel_t *lbl = ND_label(n); - unsigned char uc; - - fp = NULL; - for (maxf = 1, cnt = 0, sp = reclblp; *sp; sp++) { - if (*sp == '\\') { - sp++; - if (*sp - && (*sp == '{' || *sp == '}' || *sp == '|' || *sp == '\\')) - continue; - } - if (*sp == '{') - cnt++; - else if (*sp == '}') - cnt--; - else if (*sp == '|' && cnt == 0) - maxf++; - if (cnt < 0) - break; - } - rv->fld = N_NEW(maxf, field_t *); - rv->LR = LR; - mode = 0; - fi = 0; - hstsp = tsp = text; - wflag = TRUE; - ishardspace = FALSE; - while (wflag) { - if ((uc = *(unsigned char*)reclblp) && (uc < ' ')) { /* Ignore non-0 control characters */ - reclblp++; - continue; - } - switch (*reclblp) { - case '<': - if (mode & (HASTABLE | HASPORT)) - return parse_error(rv, tmpport); - if (lbl->html) - goto dotext; - mode |= (HASPORT | INPORT); - reclblp++; - hspsp = psp = text; - break; - case '>': - if (lbl->html) - goto dotext; - if (!(mode & INPORT)) - return parse_error(rv, tmpport); - if (psp > text + 1 && psp - 1 != hspsp && *(psp - 1) == ' ') - psp--; - *psp = '\000'; - tmpport = strdup(text); - mode &= ~INPORT; - reclblp++; - break; - case '{': - reclblp++; - if (mode != 0 || !*reclblp) - return parse_error(rv, tmpport); - mode = HASTABLE; - if (!(rv->fld[fi++] = parse_reclbl(n, NOT(LR), FALSE, text))) - return parse_error(rv, tmpport); - break; - case '}': - case '|': - case '\000': - if ((!*reclblp && !flag) || (mode & INPORT)) - return parse_error(rv, tmpport); - if (!(mode & HASTABLE)) - fp = rv->fld[fi++] = NEW(field_t); - if (tmpport) { - fp->id = tmpport; - tmpport = NULL; - } - if (!(mode & (HASTEXT | HASTABLE))) - mode |= HASTEXT, *tsp++ = ' '; - if (mode & HASTEXT) { - if (tsp > text + 1 && - tsp - 1 != hstsp && *(tsp - 1) == ' ') - tsp--; - *tsp = '\000'; - fp->lp = - make_label((void *) n, strdup(text), - (lbl->html ? LT_HTML : LT_NONE), - lbl->fontsize, lbl->fontname, - lbl->fontcolor); - fp->LR = TRUE; - hstsp = tsp = text; - } - if (*reclblp) { - if (*reclblp == '}') { - reclblp++; - rv->n_flds = fi; - return rv; - } - mode = 0; - reclblp++; - } else - wflag = FALSE; - break; - case '\\': - if (*(reclblp + 1)) { - if (ISCTRL(*(reclblp + 1))) - reclblp++; - else if ((*(reclblp + 1) == ' ') && !lbl->html) - ishardspace = TRUE, reclblp++; - else { - *tsp++ = '\\'; - mode |= (INTEXT | HASTEXT); - reclblp++; - } - } - /* falling through ... */ - default: - dotext: - if ((mode & HASTABLE) && *reclblp != ' ') - return parse_error(rv, tmpport); - if (!(mode & (INTEXT | INPORT)) && *reclblp != ' ') - mode |= (INTEXT | HASTEXT); - if (mode & INTEXT) { - if (! - (*reclblp == ' ' && !ishardspace && *(tsp - 1) == ' ' - && !lbl->html)) - *tsp++ = *reclblp; - if (ishardspace) - hstsp = tsp - 1; - } else if (mode & INPORT) { - if (!(*reclblp == ' ' && !ishardspace && - (psp == text || *(psp - 1) == ' '))) - *psp++ = *reclblp; - if (ishardspace) - hspsp = psp - 1; - } - reclblp++; - while (*reclblp & 128) - *tsp++ = *reclblp++; - break; - } - } - rv->n_flds = fi; - return rv; -} - -static pointf size_reclbl(node_t * n, field_t * f) -{ - int i; - char *p; - double marginx, marginy; - pointf d, d0; - pointf dimen; - - if (f->lp) { - dimen = f->lp->dimen; - - /* minimal whitespace around label */ - if ((dimen.x > 0.0) || (dimen.y > 0.0)) { - /* padding */ - if ((p = agget(n, "margin"))) { - i = sscanf(p, "%lf,%lf", &marginx, &marginy); - if (i > 0) { - dimen.x += 2 * POINTS(marginx); - if (i > 1) - dimen.y += 2 * POINTS(marginy); - else - dimen.y += 2 * POINTS(marginx); - } else - PAD(dimen); - } else - PAD(dimen); - } - d = dimen; - } else { - d.x = d.y = 0; - for (i = 0; i < f->n_flds; i++) { - d0 = size_reclbl(n, f->fld[i]); - if (f->LR) { - d.x += d0.x; - d.y = MAX(d.y, d0.y); - } else { - d.y += d0.y; - d.x = MAX(d.x, d0.x); - } - } - } - f->size = d; - return d; -} - -static void resize_reclbl(field_t * f, pointf sz, int nojustify_p) -{ - int i, amt; - double inc; - pointf d; - pointf newsz; - field_t *sf; - - /* adjust field */ - d.x = sz.x - f->size.x; - d.y = sz.y - f->size.y; - f->size = sz; - - /* adjust text area */ - if (f->lp && !nojustify_p) { - f->lp->space.x += d.x; - f->lp->space.y += d.y; - } - - /* adjust children */ - if (f->n_flds) { - - if (f->LR) - inc = d.x / f->n_flds; - else - inc = d.y / f->n_flds; - for (i = 0; i < f->n_flds; i++) { - sf = f->fld[i]; - amt = ((int) ((i + 1) * inc)) - ((int) (i * inc)); - if (f->LR) - newsz = pointfof(sf->size.x + amt, sz.y); - else - newsz = pointfof(sz.x, sf->size.y + amt); - resize_reclbl(sf, newsz, nojustify_p); - } - } -} - -/* pos_reclbl: - * Assign position info for each field. Also, set - * the sides attribute, which indicates which sides of the - * record are accessible to the field. - */ -static void pos_reclbl(field_t * f, pointf ul, int sides) -{ - int i, last, mask; - - f->sides = sides; - f->b.LL = pointfof(ul.x, ul.y - f->size.y); - f->b.UR = pointfof(ul.x + f->size.x, ul.y); - last = f->n_flds - 1; - for (i = 0; i <= last; i++) { - if (sides) { - if (f->LR) { - if (i == 0) { - if (i == last) - mask = TOP | BOTTOM | RIGHT | LEFT; - else - mask = TOP | BOTTOM | LEFT; - } else if (i == last) - mask = TOP | BOTTOM | RIGHT; - else - mask = TOP | BOTTOM; - } else { - if (i == 0) { - if (i == last) - mask = TOP | BOTTOM | RIGHT | LEFT; - else - mask = TOP | RIGHT | LEFT; - } else if (i == last) - mask = LEFT | BOTTOM | RIGHT; - else - mask = LEFT | RIGHT; - } - } else - mask = 0; - pos_reclbl(f->fld[i], ul, sides & mask); - if (f->LR) - ul.x = ul.x + f->fld[i]->size.x; - else - ul.y = ul.y - f->fld[i]->size.y; - } -} - -#if DEBUG > 1 -static void indent(int l) -{ - int i; - for (i = 0; i < l; i++) - fputs(" ", stderr); -} - -static void prbox(boxf b) -{ - fprintf(stderr, "((%.5g,%.5g),(%.5g,%.5g))\n", b.LL.x, b.LL.y, b.UR.x, - b.UR.y); -} - -static void dumpL(field_t * info, int level) -{ - int i; - - indent(level); - if (info->n_flds == 0) { - fprintf(stderr, "Label \"%s\" ", info->lp->text); - prbox(info->b); - } else { - fprintf(stderr, "Tbl "); - prbox(info->b); - for (i = 0; i < info->n_flds; i++) { - dumpL(info->fld[i], level + 1); - } - } -} -#endif - -/* syntax of labels: foo|bar|baz or foo|(recursive|label)|baz */ -static void record_init(node_t * n) -{ - field_t *info; - pointf ul, sz; - int flip, len; - char *textbuf; /* temp buffer for storing labels */ - int sides = BOTTOM | RIGHT | TOP | LEFT; - - /* Always use rankdir to determine how records are laid out */ - flip = NOT(GD_realflip(agraphof(n))); - reclblp = ND_label(n)->text; - len = strlen(reclblp); - /* For some forgotten reason, an empty label is parsed into a space, so - * we need at least two bytes in textbuf. - */ - len = MAX(len, 1); - textbuf = N_NEW(len + 1, char); - if (!(info = parse_reclbl(n, flip, TRUE, textbuf))) { - agerr(AGERR, "bad label format %s\n", ND_label(n)->text); - reclblp = "\\N"; - info = parse_reclbl(n, flip, TRUE, textbuf); - } - free(textbuf); - size_reclbl(n, info); - sz.x = POINTS(ND_width(n)); - sz.y = POINTS(ND_height(n)); - if (mapbool(late_string(n, N_fixed, "false"))) { - if ((sz.x < info->size.x) || (sz.y < info->size.y)) { -/* should check that the record really won't fit, e.g., there may be no text. - agerr(AGWARN, "node '%s' size may be too small\n", agnameof(n)); -*/ - } - } else { - sz.x = MAX(info->size.x, sz.x); - sz.y = MAX(info->size.y, sz.y); - } - resize_reclbl(info, sz, mapbool(late_string(n, N_nojustify, "false"))); - ul = pointfof(-sz.x / 2., sz.y / 2.); /* FIXME - is this still true: suspected to introduce ronding error - see Kluge below */ - pos_reclbl(info, ul, sides); - ND_width(n) = PS2INCH(info->size.x); - ND_height(n) = PS2INCH(info->size.y + 1); /* Kluge!! +1 to fix rounding diff between layout and rendering - otherwise we can get -1 coords in output */ - ND_shape_info(n) = (void *) info; -} - -static void record_free(node_t * n) -{ - field_t *p = ND_shape_info(n); - - free_field(p); -} - -static field_t *map_rec_port(field_t * f, char *str) -{ - field_t *rv; - int sub; - - if (f->id && (streq(f->id, str))) - rv = f; - else { - rv = NULL; - for (sub = 0; sub < f->n_flds; sub++) - if ((rv = map_rec_port(f->fld[sub], str))) - break; - } - return rv; -} - -static port record_port(node_t * n, char *portname, char *compass) -{ - field_t *f; - field_t *subf; - port rv; - int sides; /* bitmap of which sides the port lies along */ - - if (portname[0] == '\0') - return Center; - sides = BOTTOM | RIGHT | TOP | LEFT; - if (compass == NULL) - compass = "_"; - f = (field_t *) ND_shape_info(n); - if ((subf = map_rec_port(f, portname))) { - if (compassPort(n, &subf->b, &rv, compass, subf->sides, NULL)) { - agerr(AGWARN, - "node %s, port %s, unrecognized compass point '%s' - ignored\n", - agnameof(n), portname, compass); - } - } else if (compassPort(n, &f->b, &rv, portname, sides, NULL)) { - unrecognized(n, portname); - } - - return rv; -} - -/* record_inside: - * Note that this does not handle Mrecords correctly. It assumes - * everything is a rectangle. - */ -static boolean record_inside(inside_t * inside_context, pointf p) -{ - - field_t *fld0; - boxf *bp = inside_context->s.bp; - node_t *n = inside_context->s.n; - boxf bbox; - - /* convert point to node coordinate system */ - p = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - - if (bp == NULL) { - fld0 = (field_t *) ND_shape_info(n); - bbox = fld0->b; - } else - bbox = *bp; - - return INSIDE(p, bbox); -} - -/* record_path: - * Generate box path from port to border. - * See poly_path for constraints. - */ -static int record_path(node_t * n, port * prt, int side, boxf rv[], - int *kptr) -{ - int i, ls, rs; - pointf p; - field_t *info; - - if (!prt->defined) - return 0; - p = prt->p; - info = (field_t *) ND_shape_info(n); - - for (i = 0; i < info->n_flds; i++) { - if (!GD_flip(agraphof(n))) { - ls = info->fld[i]->b.LL.x; - rs = info->fld[i]->b.UR.x; - } else { - ls = info->fld[i]->b.LL.y; - rs = info->fld[i]->b.UR.y; - } - if (BETWEEN(ls, p.x, rs)) { - /* FIXME: I don't understand this code */ - if (GD_flip(agraphof(n))) { - rv[0] = flip_rec_boxf(info->fld[i]->b, ND_coord(n)); - } else { - rv[0].LL.x = ND_coord(n).x + ls; - rv[0].LL.y = ND_coord(n).y - (ND_ht(n) / 2); - rv[0].UR.x = ND_coord(n).x + rs; - } - rv[0].UR.y = ND_coord(n).y + (ND_ht(n) / 2); - *kptr = 1; - break; - } - } - return side; -} - -static void gen_fields(GVJ_t * job, node_t * n, field_t * f) -{ - int i; - pointf AF[2], coord; - - if (f->lp) { - f->lp->pos = add_pointf(mid_pointf(f->b.LL, f->b.UR), ND_coord(n)); - emit_label(job, EMIT_NLABEL, f->lp); - penColor(job, n); - } - - coord = ND_coord(n); - for (i = 0; i < f->n_flds; i++) { - if (i > 0) { - if (f->LR) { - AF[0] = f->fld[i]->b.LL; - AF[1].x = AF[0].x; - AF[1].y = f->fld[i]->b.UR.y; - } else { - AF[1] = f->fld[i]->b.UR; - AF[0].x = f->fld[i]->b.LL.x; - AF[0].y = AF[1].y; - } - AF[0] = add_pointf(AF[0], coord); - AF[1] = add_pointf(AF[1], coord); - gvrender_polyline(job, AF, 2); - } - gen_fields(job, n, f->fld[i]); - } -} - -static void record_gencode(GVJ_t * job, node_t * n) -{ - obj_state_t *obj = job->obj; - boxf BF; - pointf AF[4]; - int style; - field_t *f; - int doMap = (obj->url || obj->explicit_tooltip); - int filled; - char* clrs[2]; - - f = (field_t *) ND_shape_info(n); - BF = f->b; - BF.LL.x += ND_coord(n).x; - BF.LL.y += ND_coord(n).y; - BF.UR.x += ND_coord(n).x; - BF.UR.y += ND_coord(n).y; - - if (doMap && !(job->flags & EMIT_CLUSTERS_LAST)) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - style = stylenode(job, n); - penColor(job, n); - clrs[0] = NULL; - if (style & FILLED) { - char* fillcolor = findFill (n); - float frac; - - if (findStopColor (fillcolor, clrs, &frac)) { - gvrender_set_fillcolor(job, clrs[0]); - if (clrs[1]) - gvrender_set_gradient_vals(job,clrs[1],late_int(n,N_gradientangle,0,0), frac); - else - gvrender_set_gradient_vals(job,DEFAULT_COLOR,late_int(n,N_gradientangle,0,0), frac); - if (style & RADIAL) - filled = RGRADIENT; - else - filled = GRADIENT; - } - else { - filled = FILL; - gvrender_set_fillcolor(job, fillcolor); - } - } - else filled = FALSE; - - if (streq(ND_shape(n)->name, "Mrecord")) - style |= ROUNDED; - if (SPECIAL_CORNERS(style)) { - AF[0] = BF.LL; - AF[2] = BF.UR; - AF[1].x = AF[2].x; - AF[1].y = AF[0].y; - AF[3].x = AF[0].x; - AF[3].y = AF[2].y; - round_corners(job, AF, 4, style, filled); - } else { - gvrender_box(job, BF, filled); - } - - gen_fields(job, n, f); - - if (clrs[0]) free (clrs[0]); - - if (doMap) { - if (job->flags & EMIT_CLUSTERS_LAST) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - gvrender_end_anchor(job); - } -} - -static shape_desc **UserShape; -static int N_UserShape; - -shape_desc *find_user_shape(const char *name) -{ - int i; - if (UserShape) { - for (i = 0; i < N_UserShape; i++) { - if (streq(UserShape[i]->name, name)) - return UserShape[i]; - } - } - return NULL; -} - -static shape_desc *user_shape(char *name) -{ - int i; - shape_desc *p; - - if ((p = find_user_shape(name))) - return p; - i = N_UserShape++; - UserShape = ALLOC(N_UserShape, UserShape, shape_desc *); - p = UserShape[i] = NEW(shape_desc); - *p = Shapes[0]; - p->name = strdup(name); - if (Lib == NULL && !streq(name, "custom")) { - agerr(AGWARN, "using %s for unknown shape %s\n", Shapes[0].name, - p->name); - p->usershape = FALSE; - } else { - p->usershape = TRUE; - } - return p; -} - -shape_desc *bind_shape(char *name, node_t * np) -{ - shape_desc *ptr, *rv = NULL; - const char *str; - - str = safefile(agget(np, "shapefile")); - /* If shapefile is defined and not epsf, set shape = custom */ - if (str && !streq(name, "epsf")) - name = "custom"; - if (!streq(name, "custom")) { - for (ptr = Shapes; ptr->name; ptr++) { - if (streq(ptr->name, name)) { - rv = ptr; - break; - } - } - } - if (rv == NULL) - rv = user_shape(name); - return rv; -} - -static boolean epsf_inside(inside_t * inside_context, pointf p) -{ - pointf P; - double x2; - node_t *n = inside_context->s.n; - - P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - x2 = ND_ht(n) / 2; - return ((P.y >= -x2) && (P.y <= x2) && (P.x >= -ND_lw(n)) - && (P.x <= ND_rw(n))); -} - -static void epsf_gencode(GVJ_t * job, node_t * n) -{ - obj_state_t *obj = job->obj; - epsf_t *desc; - int doMap = (obj->url || obj->explicit_tooltip); - - desc = (epsf_t *) (ND_shape_info(n)); - if (!desc) - return; - - if (doMap && !(job->flags & EMIT_CLUSTERS_LAST)) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - if (desc) - fprintf(job->output_file, - "%.5g %.5g translate newpath user_shape_%d\n", - ND_coord(n).x + desc->offset.x, - ND_coord(n).y + desc->offset.y, desc->macro_id); - ND_label(n)->pos = ND_coord(n); - - emit_label(job, EMIT_NLABEL, ND_label(n)); - if (doMap) { - if (job->flags & EMIT_CLUSTERS_LAST) - gvrender_begin_anchor(job, - obj->url, obj->tooltip, obj->target, - obj->id); - gvrender_end_anchor(job); - } -} - -#define alpha (M_PI/10.0) -#define alpha2 (2*alpha) -#define alpha3 (3*alpha) -#define alpha4 (2*alpha2) - -static pointf star_size (pointf sz0) -{ - pointf sz; - double r0, r, rx, ry; - - rx = sz0.x/(2*cos(alpha)); - ry = sz0.y/(sin(alpha) + sin(alpha3)); - r0 = MAX(rx,ry); - r = (r0*sin(alpha4)*cos(alpha2))/(cos(alpha)*cos(alpha4)); - - sz.x = 2*r*cos(alpha); - sz.y = r*(1 + sin(alpha3)); - return sz; -} - -static void star_vertices (pointf* vertices, pointf* bb) -{ - int i; - pointf sz = *bb; - double offset, a, aspect = (1 + sin(alpha3))/(2*cos(alpha)); - double r, r0, theta = alpha; - - /* Scale up width or height to required aspect ratio */ - a = sz.y/sz.x; - if (a > aspect) { - sz.x = sz.y/aspect; - } - else if (a < aspect) { - sz.y = sz.x*aspect; - } - - /* for given sz, get radius */ - r = sz.x/(2*cos(alpha)); - r0 = (r*cos(alpha)*cos(alpha4))/(sin(alpha4)*cos(alpha2)); - - /* offset is the y shift of circle center from bb center */ - offset = (r*(1 - sin(alpha3)))/2; - - for (i = 0; i < 10; i += 2) { - vertices[i].x = r*cos(theta); - vertices[i].y = r*sin(theta) - offset; - theta += alpha2; - vertices[i+1].x = r0*cos(theta); - vertices[i+1].y = r0*sin(theta) - offset; - theta += alpha2; - } - - *bb = sz; -} - -static boolean star_inside(inside_t * inside_context, pointf p) -{ - static node_t *lastn; /* last node argument */ - static polygon_t *poly; - static int outp, sides; - static pointf *vertex; - static pointf O; /* point (0,0) */ - - if (!inside_context) { - lastn = NULL; - return FALSE; - } - boxf *bp = inside_context->s.bp; - node_t *n = inside_context->s.n; - pointf P, Q, R; - int i, outcnt; - - P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n))); - - /* Quick test if port rectangle is target */ - if (bp) { - boxf bbox = *bp; - return INSIDE(P, bbox); - } - - if (n != lastn) { - poly = (polygon_t *) ND_shape_info(n); - vertex = poly->vertices; - sides = poly->sides; - - /* index to outer-periphery */ - outp = (poly->peripheries - 1) * sides; - if (outp < 0) - outp = 0; - lastn = n; - } - - outcnt = 0; - for (i = 0; i < sides; i += 2) { - Q = vertex[i + outp]; - R = vertex[((i+4) % sides) + outp]; - if (!(same_side(P, O, Q, R))) { - outcnt++; - } - if (outcnt == 2) { - return FALSE; - } - } - return TRUE; -} - -/* cylinder: - * Code based on PostScript version by Brandon Rhodes. - * http://rhodesmill.org/brandon/2007/a-database-symbol-for-graphviz/ - */ -static pointf cylinder_size (pointf sz) -{ - sz.y *= 1.375; - return sz; -} - -static void cylinder_vertices (pointf* vertices, pointf* bb) -{ - double x = bb->x/2; - double y = bb->y/2; - double yr = bb->y/11; - - vertices[0].x = x; - vertices[0].y = y-yr; - vertices[1].x = x; - vertices[1].y = y-(1-0.551784)*yr; - vertices[2].x = 0.551784*x; - vertices[2].y = y; - vertices[3].x = 0; - vertices[3].y = y; - vertices[4].x = -0.551784*x; - vertices[4].y = y; - vertices[5].x = -x; - vertices[5].y = vertices[1].y; - vertices[6].x = -x; - vertices[6].y = y-yr; - vertices[7] = vertices[6]; - vertices[8].x = -x; - vertices[8].y = yr-y; - vertices[9] = vertices[8]; - vertices[10].x = -x; - vertices[10].y = -vertices[1].y; - vertices[11].x = vertices[4].x; - vertices[11].y = -vertices[4].y; - vertices[12].x = vertices[3].x; - vertices[12].y = -vertices[3].y; - vertices[13].x = vertices[2].x; - vertices[13].y = -vertices[2].y; - vertices[14].x = vertices[1].x; - vertices[14].y = -vertices[1].y; - vertices[15].x = vertices[0].x; - vertices[15].y = -vertices[0].y; - vertices[16] = vertices[15]; - vertices[18] = vertices[17] = vertices[0]; -} - -static void cylinder_draw(GVJ_t * job, pointf * AF, int sides, int style, int filled) -{ - pointf vertices[7]; - double y0 = AF[0].y; - double y02 = y0+y0; - - vertices[0] = AF[0]; - vertices[1].x = AF[1].x; - vertices[1].y = y02 - AF[1].y; - vertices[2].x = AF[2].x; - vertices[2].y = y02 - AF[2].y; - vertices[3].x = AF[3].x; - vertices[3].y = y02 - AF[3].y; - vertices[4].x = AF[4].x; - vertices[4].y = y02 - AF[4].y; - vertices[5].x = AF[5].x; - vertices[5].y = y02 - AF[5].y; - vertices[6] = AF[6]; - - gvrender_beziercurve(job, AF, sides, FALSE, FALSE, filled); - gvrender_beziercurve(job, vertices, 7, FALSE, FALSE, FALSE); -} - -#if 0 -/* cylinder_inside: - * At present, we use just the polygonal outline provided by vertices. - * This cold be made more precise by using a finer-grained polyline path - * to the spline top and bottom. Another approach might be to approximate - * the top and bottom by ellipses. Then the test would involve a check if - * the point is in the rectangle or one of the two ellipses. - */ -static boolean cylinder_inside(inside_t * inside_context, pointf p) -{ - return TRUE; -} -#endif - -static char *side_port[] = { "s", "e", "n", "w" }; - -static point cvtPt(pointf p, int rankdir) -{ - pointf q = { 0, 0 }; - point Q; - - switch (rankdir) { - case RANKDIR_TB: - q = p; - break; - case RANKDIR_BT: - q.x = p.x; - q.y = -p.y; - break; - case RANKDIR_LR: - q.y = p.x; - q.x = -p.y; - break; - case RANKDIR_RL: - q.y = p.x; - q.x = p.y; - break; - } - PF2P(q, Q); - return Q; -} - -/* closestSide: - * Resolve unspecified compass-point port to best available port. - * At present, this finds the available side closest to the center - * of the other port. - * - * This could be improved: - * - if other is unspecified, do them together - * - if dot, bias towards bottom of one to top of another, if possible - * - if line segment from port centers uses available sides, use these - * or center. (This latter may require spline routing to cooperate.) - */ -static char *closestSide(node_t * n, node_t * other, port * oldport) -{ - boxf b; - int rkd = GD_rankdir(agraphof(n)->root); - point p = { 0, 0 }; - point pt = cvtPt(ND_coord(n), rkd); - point opt = cvtPt(ND_coord(other), rkd); - int sides = oldport->side; - char *rv = NULL; - int i, d, mind = 0; - - if ((sides == 0) || (sides == (TOP | BOTTOM | LEFT | RIGHT))) - return rv; /* use center */ - - if (oldport->bp) { - b = *oldport->bp; - } else { - if (GD_flip(agraphof(n))) { - b.UR.x = ND_ht(n) / 2; - b.LL.x = -b.UR.x; - b.UR.y = ND_lw(n); - b.LL.y = -b.UR.y; - } else { - b.UR.y = ND_ht(n) / 2; - b.LL.y = -b.UR.y; - b.UR.x = ND_lw(n); - b.LL.x = -b.UR.x; - } - } - - for (i = 0; i < 4; i++) { - if ((sides & (1 << i)) == 0) - continue; - switch (i) { - case 0: - p.y = b.LL.y; - p.x = (b.LL.x + b.UR.x) / 2; - break; - case 1: - p.x = b.UR.x; - p.y = (b.LL.y + b.UR.y) / 2; - break; - case 2: - p.y = b.UR.y; - p.x = (b.LL.x + b.UR.x) / 2; - break; - case 3: - p.x = b.LL.x; - p.y = (b.LL.y + b.UR.y) / 2; - break; - } - p.x += pt.x; - p.y += pt.y; - d = DIST2(p, opt); - if (!rv || (d < mind)) { - mind = d; - rv = side_port[i]; - } - } - return rv; -} - -port resolvePort(node_t * n, node_t * other, port * oldport) -{ - port rv; - char *compass = closestSide(n, other, oldport); - - /* transfer name pointer; all other necessary fields will be regenerated */ - rv.name = oldport->name; - compassPort(n, oldport->bp, &rv, compass, oldport->side, NULL); - - return rv; -} - -void resolvePorts(edge_t * e) -{ - if (ED_tail_port(e).dyna) - ED_tail_port(e) = - resolvePort(agtail(e), aghead(e), &ED_tail_port(e)); - if (ED_head_port(e).dyna) - ED_head_port(e) = - resolvePort(aghead(e), agtail(e), &ED_head_port(e)); -} - -void gv_initShapes(void) -{ - pointf p = { 0, 0 }; - poly_inside(NULL, p); - point_inside(NULL, p); - star_inside(NULL, p); -} diff --git a/internal/ccall/common/splines.c b/internal/ccall/common/splines.c deleted file mode 100644 index 5700dcf..0000000 --- a/internal/ccall/common/splines.c +++ /dev/null @@ -1,1491 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* Functions related to creating a spline and attaching it to - * an edge, starting from a list of control points. - */ - -#include "render.h" - -#ifdef DEBUG -static int debugleveln(edge_t* e, int i) -{ - return (GD_showboxes(agraphof(aghead(e))) == i || - GD_showboxes(agraphof(agtail(e))) == i || - ED_showboxes(e) == i || - ND_showboxes(aghead(e)) == i || - ND_showboxes(agtail(e)) == i); -} - -static void showPoints(pointf ps[], int pn) -{ - char buf[BUFSIZ]; - int newcnt = Show_cnt + pn + 3; - int bi, li; - - Show_boxes = ALLOC(newcnt+2,Show_boxes,char*); - li = Show_cnt+1; - Show_boxes[li++] = strdup ("%% self list"); - Show_boxes[li++] = strdup ("dbgstart"); - for (bi = 0; bi < pn; bi++) { - sprintf(buf, "%.5g %.5g point", ps[bi].x, ps[bi].y); - Show_boxes[li++] = strdup (buf); - } - Show_boxes[li++] = strdup ("grestore"); - - Show_cnt = newcnt; - Show_boxes[Show_cnt+1] = NULL; -} -#endif - -/* arrow_clip: - * Clip arrow to node boundary. - * The real work is done elsewhere. Here we get the real edge, - * check that the edge has arrowheads, and that an endpoint - * isn't a merge point where several parts of an edge meet. - * (e.g., with edge concentrators). - */ -static void -arrow_clip(edge_t * fe, node_t * hn, - pointf * ps, int *startp, int *endp, - bezier * spl, splineInfo * info) -{ - edge_t *e; - int i, j, sflag, eflag; - - for (e = fe; ED_to_orig(e); e = ED_to_orig(e)); - - if (info->ignoreSwap) - j = 0; - else - j = info->swapEnds(e); - arrow_flags(e, &sflag, &eflag); - if (info->splineMerge(hn)) - eflag = ARR_NONE; - if (info->splineMerge(agtail(fe))) - sflag = ARR_NONE; - /* swap the two ends */ - if (j) { - i = sflag; - sflag = eflag; - eflag = i; - } - if (info->isOrtho) { - if (eflag || sflag) - arrowOrthoClip(e, ps, *startp, *endp, spl, sflag, eflag); - } - else { - if (sflag) - *startp = - arrowStartClip(e, ps, *startp, *endp, spl, sflag); - if (eflag) - *endp = - arrowEndClip(e, ps, *startp, *endp, spl, eflag); - } -} - -/* bezier_clip - * Clip bezier to shape using binary search. - * The details of the shape are passed in the inside_context; - * The function providing the inside test is passed as a parameter. - * left_inside specifies that sp[0] is inside the node, - * else sp[3] is taken as inside. - * The points p are in node coordinates. - */ -void bezier_clip(inside_t * inside_context, - boolean(*inside) (inside_t * inside_context, pointf p), - pointf * sp, boolean left_inside) -{ - pointf seg[4], best[4], pt, opt, *left, *right; - double low, high, t, *idir, *odir; - boolean found; - int i; - - if (left_inside) { - left = NULL; - right = seg; - pt = sp[0]; - idir = &low; - odir = &high; - } else { - left = seg; - right = NULL; - pt = sp[3]; - idir = &high; - odir = &low; - } - found = FALSE; - low = 0.0; - high = 1.0; - do { - opt = pt; - t = (high + low) / 2.0; - pt = Bezier(sp, 3, t, left, right); - if (inside(inside_context, pt)) { - *idir = t; - } else { - for (i = 0; i < 4; i++) - best[i] = seg[i]; - found = TRUE; - *odir = t; - } - } while (ABS(opt.x - pt.x) > .5 || ABS(opt.y - pt.y) > .5); - if (found) - for (i = 0; i < 4; i++) - sp[i] = best[i]; - else - for (i = 0; i < 4; i++) - sp[i] = seg[i]; -} - -/* shape_clip0: - * Clip Bezier to node shape using binary search. - * left_inside specifies that curve[0] is inside the node, else - * curve[3] is taken as inside. - * Assumes ND_shape(n) and ND_shape(n)->fns->insidefn are non-NULL. - * See note on shape_clip. - */ -static void -shape_clip0(inside_t * inside_context, node_t * n, pointf curve[4], - boolean left_inside) -{ - int i; - double save_real_size; - pointf c[4]; - - save_real_size = ND_rw(n); - for (i = 0; i < 4; i++) { - c[i].x = curve[i].x - ND_coord(n).x; - c[i].y = curve[i].y - ND_coord(n).y; - } - - bezier_clip(inside_context, ND_shape(n)->fns->insidefn, c, - left_inside); - - for (i = 0; i < 4; i++) { - curve[i].x = c[i].x + ND_coord(n).x; - curve[i].y = c[i].y + ND_coord(n).y; - } - ND_rw(n) = save_real_size; -} - -/* shape_clip: - * Clip Bezier to node shape - * Uses curve[0] to determine which which side is inside the node. - * NOTE: This test is bad. It is possible for previous call to - * shape_clip to produce a Bezier with curve[0] moved to the boundary - * for which insidefn(curve[0]) is true. Thus, if the new Bezier is - * fed back to shape_clip, it will again assume left_inside is true. - * To be safe, shape_clip0 should guarantee that the computed boundary - * point fails insidefn. - * The edge e is used to provide a port box. If NULL, the spline is - * clipped to the node shape. - */ -void shape_clip(node_t * n, pointf curve[4]) -{ - double save_real_size; - boolean left_inside; - pointf c; - inside_t inside_context; - - if (ND_shape(n) == NULL || ND_shape(n)->fns->insidefn == NULL) - return; - - inside_context.s.n = n; - inside_context.s.bp = NULL; - save_real_size = ND_rw(n); - c.x = curve[0].x - ND_coord(n).x; - c.y = curve[0].y - ND_coord(n).y; - left_inside = ND_shape(n)->fns->insidefn(&inside_context, c); - ND_rw(n) = save_real_size; - shape_clip0(&inside_context, n, curve, left_inside); -} - -/* new_spline: - * Create and attach a new bezier of size sz to the edge d - */ -bezier *new_spline(edge_t * e, int sz) -{ - bezier *rv; - while (ED_edge_type(e) != NORMAL) - e = ED_to_orig(e); - if (ED_spl(e) == NULL) - ED_spl(e) = NEW(splines); - ED_spl(e)->list = ALLOC(ED_spl(e)->size + 1, ED_spl(e)->list, bezier); - rv = &(ED_spl(e)->list[ED_spl(e)->size++]); - rv->list = N_NEW(sz, pointf); - rv->size = sz; - rv->sflag = rv->eflag = FALSE; - rv->sp.x = rv->sp.y = rv->ep.x = rv->ep.y = 0; - return rv; -} - -/* clip_and_install: - * Given a raw spline (pn control points in ps), representing - * a path from edge agtail(fe) ending in node hn, clip the ends to - * the node boundaries and attach the resulting spline to the - * edge. - */ -void -clip_and_install(edge_t * fe, node_t * hn, pointf * ps, int pn, - splineInfo * info) -{ - pointf p2; - bezier *newspl; - node_t *tn; - int start, end, i, clipTail, clipHead; - graph_t *g; - edge_t *orig; - boxf *tbox, *hbox; - inside_t inside_context; - - tn = agtail(fe); - g = agraphof(tn); - newspl = new_spline(fe, pn); - - for (orig = fe; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); - - /* may be a reversed flat edge */ - if (!info->ignoreSwap && (ND_rank(tn) == ND_rank(hn)) && (ND_order(tn) > ND_order(hn))) { - node_t *tmp; - tmp = hn; - hn = tn; - tn = tmp; - } - if (tn == agtail(orig)) { - clipTail = ED_tail_port(orig).clip; - clipHead = ED_head_port(orig).clip; - tbox = ED_tail_port(orig).bp; - hbox = ED_head_port(orig).bp; - } - else { /* fe and orig are reversed */ - clipTail = ED_head_port(orig).clip; - clipHead = ED_tail_port(orig).clip; - hbox = ED_tail_port(orig).bp; - tbox = ED_head_port(orig).bp; - } - - /* spline may be interior to node */ - if(clipTail && ND_shape(tn) && ND_shape(tn)->fns->insidefn) { - inside_context.s.n = tn; - inside_context.s.bp = tbox; - for (start = 0; start < pn - 4; start += 3) { - p2.x = ps[start + 3].x - ND_coord(tn).x; - p2.y = ps[start + 3].y - ND_coord(tn).y; - if (ND_shape(tn)->fns->insidefn(&inside_context, p2) == FALSE) - break; - } - shape_clip0(&inside_context, tn, &ps[start], TRUE); - } else - start = 0; - if(clipHead && ND_shape(hn) && ND_shape(hn)->fns->insidefn) { - inside_context.s.n = hn; - inside_context.s.bp = hbox; - for (end = pn - 4; end > 0; end -= 3) { - p2.x = ps[end].x - ND_coord(hn).x; - p2.y = ps[end].y - ND_coord(hn).y; - if (ND_shape(hn)->fns->insidefn(&inside_context, p2) == FALSE) - break; - } - shape_clip0(&inside_context, hn, &ps[end], FALSE); - } else - end = pn - 4; - for (; start < pn - 4; start += 3) - if (! APPROXEQPT(ps[start], ps[start + 3], MILLIPOINT)) - break; - for (; end > 0; end -= 3) - if (! APPROXEQPT(ps[end], ps[end + 3], MILLIPOINT)) - break; - arrow_clip(fe, hn, ps, &start, &end, newspl, info); - for (i = start; i < end + 4; ) { - pointf cp[4]; - newspl->list[i - start] = ps[i]; - cp[0] = ps[i]; - i++; - if ( i >= end + 4) - break; - newspl->list[i - start] = ps[i]; - cp[1] = ps[i]; - i++; - newspl->list[i - start] = ps[i]; - cp[2] = ps[i]; - i++; - cp[3] = ps[i]; - update_bb_bz(&GD_bb(g), cp); - } - newspl->size = end - start + 4; -} - -static double -conc_slope(node_t* n) -{ - double s_in, s_out, m_in, m_out; - int cnt_in, cnt_out; - pointf p; - edge_t *e; - - s_in = s_out = 0.0; - for (cnt_in = 0; (e = ND_in(n).list[cnt_in]); cnt_in++) - s_in += ND_coord(agtail(e)).x; - for (cnt_out = 0; (e = ND_out(n).list[cnt_out]); cnt_out++) - s_out += ND_coord(aghead(e)).x; - p.x = ND_coord(n).x - (s_in / cnt_in); - p.y = ND_coord(n).y - ND_coord(agtail(ND_in(n).list[0])).y; - m_in = atan2(p.y, p.x); - p.x = (s_out / cnt_out) - ND_coord(n).x; - p.y = ND_coord(aghead(ND_out(n).list[0])).y - ND_coord(n).y; - m_out = atan2(p.y, p.x); - return ((m_in + m_out) / 2.0); -} - -void add_box(path * P, boxf b) -{ - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - P->boxes[P->nbox++] = b; -} - -/* beginpath: - * Set up boxes near the tail node. - * For regular nodes, the result should be a list of contiguous rectangles - * such that the last one has the smallest LL.y and its LL.y is above - * the bottom of the rank (rank.ht1). - * - * For flat edges, we assume endp->sidemask has been set. For regular - * edges, we set this, but it doesn't appear to be needed any more. - * - * In many cases, we tweak the x or y coordinate of P->start.p by 1. - * This is because of a problem in the path routing code. If the starting - * point actually lies on the polygon, in some cases, the router gets - * confused and routes the path outside the polygon. So, the offset ensures - * the starting point is in the polygon. - * - * FIX: Creating the initial boxes only really works for rankdir=TB and - * rankdir=LR. For the others, we rely on compassPort flipping the side - * and then assume that the node shape has top-bottom symmetry. Since we - * at present only put compass points on the bounding box, this works. - * If we attempt to implement compass points on actual node perimeters, - * something major will probably be necessary. Doing the coordinate - * flip (postprocess) before spline routing will be too disruptive. The - * correct solution is probably to have beginpath/endpath create the - * boxes assuming an inverted node. Note that compassPort already does - * some flipping. Even better would be to allow the *_path function - * to provide a polygon. - * - * The extra space provided by FUDGE-2 prevents the edge from getting - * too close the side of the node. - * - */ -#define SPLINES_FUDGE 2 -#define HT2(n) (ND_ht(n)/2) - -void -beginpath(path * P, edge_t * e, int et, pathend_t * endp, boolean merge) -{ - int side, mask; - node_t *n; - int (*pboxfn) (node_t*, port*, int, boxf*, int*); - - n = agtail(e); - - if (ED_tail_port(e).dyna) - ED_tail_port(e) = resolvePort(agtail(e), aghead(e), &ED_tail_port(e)); - if (ND_shape(n)) - pboxfn = ND_shape(n)->fns->pboxfn; - else - pboxfn = NULL; - P->start.p = add_pointf(ND_coord(n), ED_tail_port(e).p); - if (merge) { - /*P->start.theta = - M_PI / 2; */ - P->start.theta = conc_slope(agtail(e)); - P->start.constrained = TRUE; - } else { - if (ED_tail_port(e).constrained) { - P->start.theta = ED_tail_port(e).theta; - P->start.constrained = TRUE; - } else - P->start.constrained = FALSE; - } - P->nbox = 0; - P->data = (void *) e; - endp->np = P->start.p; - if ((et == REGULAREDGE) && (ND_node_type(n) == NORMAL) && ((side = ED_tail_port(e).side))) { - edge_t* orig; - boxf b0, b = endp->nb; - if (side & TOP) { - endp->sidemask = TOP; - if (P->start.p.x < ND_coord(n).x) { /* go left */ - b0.LL.x = b.LL.x - 1; - /* b0.LL.y = ND_coord(n).y + HT2(n); */ - b0.LL.y = P->start.p.y; - b0.UR.x = b.UR.x; - b0.UR.y = ND_coord(n).y + HT2(n) + GD_ranksep(agraphof(n))/2; - b.UR.x = ND_coord(n).x - ND_lw(n) - (SPLINES_FUDGE-2); - b.UR.y = b0.LL.y; - b.LL.y = ND_coord(n).y - HT2(n); - b.LL.x -= 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - } - else { - b0.LL.x = b.LL.x; - b0.LL.y = P->start.p.y; - /* b0.LL.y = ND_coord(n).y + HT2(n); */ - b0.UR.x = b.UR.x+1; - b0.UR.y = ND_coord(n).y + HT2(n) + GD_ranksep(agraphof(n))/2; - b.LL.x = ND_coord(n).x + ND_rw(n) + (SPLINES_FUDGE-2); - b.UR.y = b0.LL.y; - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.x += 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - } - /* P->start.p.y += 1; */ - endp->boxn = 2; - } - else if (side & BOTTOM) { - endp->sidemask = BOTTOM; - b.UR.y = MAX(b.UR.y,P->start.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.y -= 1; */ - } - else if (side & LEFT) { - endp->sidemask = LEFT; - b.UR.x = P->start.p.x; - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->start.p.y; - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.x -= 1; */ - } - else { - endp->sidemask = RIGHT; - b.LL.x = P->start.p.x; - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->start.p.y; - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.x += 1; */ - } - for (orig = e; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); - if (n == agtail(orig)) - ED_tail_port(orig).clip = FALSE; - else - ED_head_port(orig).clip = FALSE; - return; - } - if ((et == FLATEDGE) && ((side = ED_tail_port(e).side))) { - boxf b0, b = endp->nb; - edge_t* orig; - if (side & TOP) { - b.LL.y = MIN(b.LL.y,P->start.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.y += 1; */ - } - else if (side & BOTTOM) { - if (endp->sidemask == TOP) { - b0.UR.y = ND_coord(n).y - HT2(n); - b0.UR.x = b.UR.x+1; - b0.LL.x = P->start.p.x; - b0.LL.y = b0.UR.y - GD_ranksep(agraphof(n))/2; - b.LL.x = ND_coord(n).x + ND_rw(n) + (SPLINES_FUDGE-2); - b.LL.y = b0.UR.y; - b.UR.y = ND_coord(n).y + HT2(n); - b.UR.x += 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - endp->boxn = 2; - } - else { - b.UR.y = MAX(b.UR.y,P->start.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - } - /* P->start.p.y -= 1; */ - } - else if (side & LEFT) { - b.UR.x = P->start.p.x+1; - if (endp->sidemask == TOP) { - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->start.p.y-1; - } - else { - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->start.p.y+1; - } - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.x -= 1; */ - } - else { - b.LL.x = P->start.p.x; - if (endp->sidemask == TOP) { - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->start.p.y; - } - else { - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->start.p.y+1; - } - endp->boxes[0] = b; - endp->boxn = 1; - /* P->start.p.x += 1; */ - } - for (orig = e; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); - if (n == agtail(orig)) - ED_tail_port(orig).clip = FALSE; - else - ED_head_port(orig).clip = FALSE; - endp->sidemask = side; - return; - } - - if (et == REGULAREDGE) side = BOTTOM; - else side = endp->sidemask; /* for flat edges */ - if (pboxfn - && (mask = (*pboxfn) (n, &ED_tail_port(e), side, &endp->boxes[0], &endp->boxn))) - endp->sidemask = mask; - else { - endp->boxes[0] = endp->nb; - endp->boxn = 1; - - switch (et) { - case SELFEDGE: - /* moving the box UR.y by + 1 avoids colinearity between - port point and box that confuses Proutespline(). it's - a bug in Proutespline() but this is the easiest fix. */ - assert(0); /* at present, we don't use beginpath for selfedges */ - endp->boxes[0].UR.y = P->start.p.y - 1; - endp->sidemask = BOTTOM; - break; - case FLATEDGE: - if (endp->sidemask == TOP) - endp->boxes[0].LL.y = P->start.p.y; - else - endp->boxes[0].UR.y = P->start.p.y; - break; - case REGULAREDGE: - endp->boxes[0].UR.y = P->start.p.y; - endp->sidemask = BOTTOM; - /* P->start.p.y -= 1; */ - break; - } - } -} - -void endpath(path * P, edge_t * e, int et, pathend_t * endp, boolean merge) -{ - int side, mask; - node_t *n; - int (*pboxfn) (node_t* n, port*, int, boxf*, int*); - - n = aghead(e); - - if (ED_head_port(e).dyna) - ED_head_port(e) = resolvePort(aghead(e), agtail(e), &ED_head_port(e)); - if (ND_shape(n)) - pboxfn = ND_shape(n)->fns->pboxfn; - else - pboxfn = NULL; - P->end.p = add_pointf(ND_coord(n), ED_head_port(e).p); - if (merge) { - /*P->end.theta = M_PI / 2; */ - P->end.theta = conc_slope(aghead(e)) + M_PI; - assert(P->end.theta < 2 * M_PI); - P->end.constrained = TRUE; - } else { - if (ED_head_port(e).constrained) { - P->end.theta = ED_head_port(e).theta; - P->end.constrained = TRUE; - } else - P->end.constrained = FALSE; - } - endp->np = P->end.p; - if ((et == REGULAREDGE) && (ND_node_type(n) == NORMAL) && ((side = ED_head_port(e).side))) { - edge_t* orig; - boxf b0, b = endp->nb; - if (side & TOP) { - endp->sidemask = TOP; - b.LL.y = MIN(b.LL.y,P->end.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.y += 1; */ - } - else if (side & BOTTOM) { - endp->sidemask = BOTTOM; - if (P->end.p.x < ND_coord(n).x) { /* go left */ - b0.LL.x = b.LL.x-1; - /* b0.UR.y = ND_coord(n).y - HT2(n); */ - b0.UR.y = P->end.p.y; - b0.UR.x = b.UR.x; - b0.LL.y = ND_coord(n).y - HT2(n) - GD_ranksep(agraphof(n))/2; - b.UR.x = ND_coord(n).x - ND_lw(n) - (SPLINES_FUDGE-2); - b.LL.y = b0.UR.y; - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.x -= 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - } - else { - b0.LL.x = b.LL.x; - b0.UR.y = P->end.p.y; - /* b0.UR.y = ND_coord(n).y - HT2(n); */ - b0.UR.x = b.UR.x+1; - b0.LL.y = ND_coord(n).y - HT2(n) - GD_ranksep(agraphof(n))/2; - b.LL.x = ND_coord(n).x + ND_rw(n) + (SPLINES_FUDGE-2); - b.LL.y = b0.UR.y; - b.UR.y = ND_coord(n).y + HT2(n); - b.UR.x += 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - } - endp->boxn = 2; - /* P->end.p.y -= 1; */ - } - else if (side & LEFT) { - endp->sidemask = LEFT; - b.UR.x = P->end.p.x; - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->end.p.y; - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.x -= 1; */ - } - else { - endp->sidemask = RIGHT; - b.LL.x = P->end.p.x; - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->end.p.y; - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.x += 1; */ - } - for (orig = e; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); - if (n == aghead(orig)) - ED_head_port(orig).clip = FALSE; - else - ED_tail_port(orig).clip = FALSE; - endp->sidemask = side; - return; - } - - if ((et == FLATEDGE) && ((side = ED_head_port(e).side))) { - boxf b0, b = endp->nb; - edge_t* orig; - if (side & TOP) { - b.LL.y = MIN(b.LL.y,P->end.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.y += 1; */ - } - else if (side & BOTTOM) { - if (endp->sidemask == TOP) { - b0.LL.x = b.LL.x-1; - b0.UR.y = ND_coord(n).y - HT2(n); - b0.UR.x = P->end.p.x; - b0.LL.y = b0.UR.y - GD_ranksep(agraphof(n))/2; - b.UR.x = ND_coord(n).x - ND_lw(n) - 2; - b.LL.y = b0.UR.y; - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.x -= 1; - endp->boxes[0] = b0; - endp->boxes[1] = b; - endp->boxn = 2; - } - else { - b.UR.y = MAX(b.UR.y,P->start.p.y); - endp->boxes[0] = b; - endp->boxn = 1; - } - /* P->end.p.y -= 1; */ - } - else if (side & LEFT) { - b.UR.x = P->end.p.x+1; - if (endp->sidemask == TOP) { - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->end.p.y-1; - } - else { - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->end.p.y+1; - } - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.x -= 1; */ - } - else { - b.LL.x = P->end.p.x-1; - if (endp->sidemask == TOP) { - b.UR.y = ND_coord(n).y + HT2(n); - b.LL.y = P->end.p.y-1; - } - else { - b.LL.y = ND_coord(n).y - HT2(n); - b.UR.y = P->end.p.y; - } - endp->boxes[0] = b; - endp->boxn = 1; - /* P->end.p.x += 1; */ - } - for (orig = e; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); - if (n == aghead(orig)) - ED_head_port(orig).clip = FALSE; - else - ED_tail_port(orig).clip = FALSE; - endp->sidemask = side; - return; - } - - if (et == REGULAREDGE) side = TOP; - else side = endp->sidemask; /* for flat edges */ - if (pboxfn - && (mask = (*pboxfn) (n, &ED_head_port(e), side, &endp->boxes[0], &endp->boxn))) - endp->sidemask = mask; - else { - endp->boxes[0] = endp->nb; - endp->boxn = 1; - - switch (et) { - case SELFEDGE: - /* offset of -1 is symmetric w.r.t. beginpath() - * FIXME: is any of this right? what if self-edge - * doesn't connect from BOTTOM to TOP??? */ - assert(0); /* at present, we don't use endpath for selfedges */ - endp->boxes[0].LL.y = P->end.p.y + 1; - endp->sidemask = TOP; - break; - case FLATEDGE: - if (endp->sidemask == TOP) - endp->boxes[0].LL.y = P->end.p.y; - else - endp->boxes[0].UR.y = P->end.p.y; - break; - case REGULAREDGE: - endp->boxes[0].LL.y = P->end.p.y; - endp->sidemask = TOP; - /* P->end.p.y += 1; */ - break; - } - } -} - - -static int convert_sides_to_points(int tail_side, int head_side) -{ -int vertices[] = {12,4,6,2,3,1,9,8}; //the cumulative side value of each node point -int i, tail_i, head_i; -int pair_a[8][8] = { //array of possible node point pairs -{11,12,13,14,15,16,17,18}, -{21,22,23,24,25,26,27,28}, -{31,32,33,34,35,36,37,38}, -{41,42,43,44,45,46,47,48}, -{51,52,53,54,55,56,57,58}, -{61,62,63,64,65,66,67,68}, -{71,72,73,74,75,76,77,78}, -{81,82,83,84,85,86,87,88} -}; - - tail_i = head_i = -1; - for(i=0;i< 8; i++){ - if(head_side == vertices[i]){ - head_i = i; - break; - } - } - for(i=0;i< 8; i++){ - if(tail_side == vertices[i]){ - tail_i = i; - break; - } - } - -if( tail_i < 0 || head_i < 0) - return 0; -else - return pair_a[tail_i][head_i]; -} - - -static void selfBottom (edge_t* edges[], int ind, int cnt, - double sizex, double stepy, splineInfo* sinfo) -{ - pointf tp, hp, np; - node_t *n; - edge_t *e; - int i, sgn, point_pair; - double hy, ty, stepx, dx, dy, width, height; - pointf points[1000]; - int pointn; - - e = edges[ind]; - n = agtail(e); - - stepx = (sizex / 2.) / cnt; - stepx = MAX(stepx,2.); - pointn = 0; - np = ND_coord(n); - tp = ED_tail_port(e).p; - tp.x += np.x; - tp.y += np.y; - hp = ED_head_port(e).p; - hp.x += np.x; - hp.y += np.y; - if (tp.x >= hp.x) sgn = 1; - else sgn = -1; - dy = ND_ht(n)/2., dx = 0.; - // certain adjustments are required for some point_pairs in order to improve the - // display of the edge path between them - point_pair = convert_sides_to_points(ED_tail_port(e).side,ED_head_port(e).side); - switch(point_pair){ - case 67: sgn = -sgn; - break; - default: - break; - } - ty = MIN(dy, 3*(tp.y + dy - np.y)); - hy = MIN(dy, 3*(hp.y + dy - np.y)); - for (i = 0; i < cnt; i++) { - e = edges[ind++]; - dy += stepy, ty += stepy, hy += stepy, dx += sgn*stepx; - pointn = 0; - points[pointn++] = tp; - points[pointn++] = pointfof(tp.x + dx, tp.y - ty / 3); - points[pointn++] = pointfof(tp.x + dx, np.y - dy); - points[pointn++] = pointfof((tp.x+hp.x)/2, np.y - dy); - points[pointn++] = pointfof(hp.x - dx, np.y - dy); - points[pointn++] = pointfof(hp.x - dx, hp.y - hy / 3); - points[pointn++] = hp; - if (ED_label(e)) { - if (GD_flip(agraphof(agtail(e)))) { - width = ED_label(e)->dimen.y; - height = ED_label(e)->dimen.x; - } else { - width = ED_label(e)->dimen.x; - height = ED_label(e)->dimen.y; - } - ED_label(e)->pos.y = ND_coord(n).y - dy - height / 2.0; - ED_label(e)->pos.x = ND_coord(n).x; - ED_label(e)->set = TRUE; - if (height > stepy) - dy += height - stepy; - } - clip_and_install(e, aghead(e), points, pointn, sinfo); -#ifdef DEBUG - if (debugleveln(e,1)) - showPoints (points, pointn); -#endif - } -} - - -static void -selfTop (edge_t* edges[], int ind, int cnt, double sizex, double stepy, - splineInfo* sinfo) -{ - int i, sgn, point_pair; - double hy, ty, stepx, dx, dy, width, height; - pointf tp, hp, np; - node_t *n; - edge_t *e; - pointf points[1000]; - int pointn; - - e = edges[ind]; - n = agtail(e); - - stepx = (sizex / 2.) / cnt; - stepx = MAX(stepx, 2.); - pointn = 0; - np = ND_coord(n); - tp = ED_tail_port(e).p; - tp.x += np.x; - tp.y += np.y; - hp = ED_head_port(e).p; - hp.x += np.x; - hp.y += np.y; - if (tp.x >= hp.x) sgn = 1; - else sgn = -1; - dy = ND_ht(n)/2., dx = 0.; - // certain adjustments are required for some point_pairs in order to improve the - // display of the edge path between them - point_pair = convert_sides_to_points(ED_tail_port(e).side,ED_head_port(e).side); - switch(point_pair){ - case 15: - dx = sgn*(ND_rw(n) - (hp.x-np.x) + stepx); - break; - - case 38: - dx = sgn*(ND_lw(n)-(np.x-hp.x) + stepx); - break; - case 41: - dx = sgn*(ND_rw(n)-(tp.x-np.x) + stepx); - break; - case 48: - dx = sgn*(ND_rw(n)-(tp.x-np.x) + stepx); - break; - - case 14: - case 37: - case 47: - case 51: - case 57: - case 58: - dx = sgn*((((ND_lw(n)-(np.x-tp.x)) + (ND_rw(n)-(hp.x-np.x)))/3.)); - break; - case 73: - dx = sgn*(ND_lw(n)-(np.x-tp.x) + stepx); - break; - case 83: - dx = sgn*(ND_lw(n)-(np.x-tp.x)); - break; - case 84: - dx = sgn*((((ND_lw(n)-(np.x-tp.x)) + (ND_rw(n)-(hp.x-np.x)))/2.) + stepx); - break; - case 74: - case 75: - case 85: - dx = sgn*((((ND_lw(n)-(np.x-tp.x)) + (ND_rw(n)-(hp.x-np.x)))/2.) + 2*stepx); - break; - default: - break; - } - ty = MIN(dy, 3*(np.y + dy - tp.y)); - hy = MIN(dy, 3*(np.y + dy - hp.y)); - for (i = 0; i < cnt; i++) { - e = edges[ind++]; - dy += stepy, ty += stepy, hy += stepy, dx += sgn*stepx; - pointn = 0; - points[pointn++] = tp; - points[pointn++] = pointfof(tp.x + dx, tp.y + ty / 3); - points[pointn++] = pointfof(tp.x + dx, np.y + dy); - points[pointn++] = pointfof((tp.x+hp.x)/2, np.y + dy); - points[pointn++] = pointfof(hp.x - dx, np.y + dy); - points[pointn++] = pointfof(hp.x - dx, hp.y + hy / 3); - points[pointn++] = hp; - if (ED_label(e)) { - if (GD_flip(agraphof(agtail(e)))) { - width = ED_label(e)->dimen.y; - height = ED_label(e)->dimen.x; - } else { - width = ED_label(e)->dimen.x; - height = ED_label(e)->dimen.y; - } - ED_label(e)->pos.y = ND_coord(n).y + dy + height / 2.0; - ED_label(e)->pos.x = ND_coord(n).x; - ED_label(e)->set = TRUE; - if (height > stepy) - dy += height - stepy; - } - clip_and_install(e, aghead(e), points, pointn, sinfo); -#ifdef DEBUG - if (debugleveln(e,1)) - showPoints (points, pointn); -#endif - } - return; -} - -static void -selfRight (edge_t* edges[], int ind, int cnt, double stepx, double sizey, - splineInfo* sinfo) -{ - int i, sgn, point_pair; - double hx, tx, stepy, dx, dy, width, height; - pointf tp, hp, np; - node_t *n; - edge_t *e; - pointf points[1000]; - int pointn; - - e = edges[ind]; - n = agtail(e); - - stepy = (sizey / 2.) / cnt; - stepy = MAX(stepy, 2.); - pointn = 0; - np = ND_coord(n); - tp = ED_tail_port(e).p; - tp.x += np.x; - tp.y += np.y; - hp = ED_head_port(e).p; - hp.x += np.x; - hp.y += np.y; - if (tp.y >= hp.y) sgn = 1; - else sgn = -1; - dx = ND_rw(n), dy = 0; - // certain adjustments are required for some point_pairs in order to improve the - // display of the edge path between them - point_pair = convert_sides_to_points(ED_tail_port(e).side,ED_head_port(e).side); - switch(point_pair){ - case 32: - case 65: if(tp.y == hp.y) - sgn = -sgn; - break; - default: - break; - } - tx = MIN(dx, 3*(np.x + dx - tp.x)); - hx = MIN(dx, 3*(np.x + dx - hp.x)); - for (i = 0; i < cnt; i++) { - e = edges[ind++]; - dx += stepx, tx += stepx, hx += stepx, dy += sgn*stepy; - pointn = 0; - points[pointn++] = tp; - points[pointn++] = pointfof(tp.x + tx / 3, tp.y + dy); - points[pointn++] = pointfof(np.x + dx, tp.y + dy); - points[pointn++] = pointfof(np.x + dx, (tp.y+hp.y)/2); - points[pointn++] = pointfof(np.x + dx, hp.y - dy); - points[pointn++] = pointfof(hp.x + hx / 3, hp.y - dy); - points[pointn++] = hp; - if (ED_label(e)) { - if (GD_flip(agraphof(agtail(e)))) { - width = ED_label(e)->dimen.y; - height = ED_label(e)->dimen.x; - } else { - width = ED_label(e)->dimen.x; - height = ED_label(e)->dimen.y; - } - ED_label(e)->pos.x = ND_coord(n).x + dx + width / 2.0; - ED_label(e)->pos.y = ND_coord(n).y; - ED_label(e)->set = TRUE; - if (width > stepx) - dx += width - stepx; - } - clip_and_install(e, aghead(e), points, pointn, sinfo); -#ifdef DEBUG - if (debugleveln(e,1)) - showPoints (points, pointn); -#endif - } - return; -} - -static void -selfLeft (edge_t* edges[], int ind, int cnt, double stepx, double sizey, - splineInfo* sinfo) -{ - int i, sgn,point_pair; - double hx, tx, stepy, dx, dy, width, height; - pointf tp, hp, np; - node_t *n; - edge_t *e; - pointf points[1000]; - int pointn; - - e = edges[ind]; - n = agtail(e); - - stepy = (sizey / 2.) / cnt; - stepy = MAX(stepy,2.); - pointn = 0; - np = ND_coord(n); - tp = ED_tail_port(e).p; - tp.x += np.x; - tp.y += np.y; - hp = ED_head_port(e).p; - hp.x += np.x; - hp.y += np.y; - - - if (tp.y >= hp.y) sgn = 1; - else sgn = -1; - dx = ND_lw(n), dy = 0.; - // certain adjustments are required for some point_pairs in order to improve the - // display of the edge path between them - point_pair = convert_sides_to_points(ED_tail_port(e).side,ED_head_port(e).side); - switch(point_pair){ - case 12: - case 67: - if(tp.y == hp.y) - sgn = -sgn; - break; - default: - break; - } - tx = MIN(dx, 3*(tp.x + dx - np.x)); - hx = MIN(dx, 3*(hp.x + dx - np.x)); - for (i = 0; i < cnt; i++) { - e = edges[ind++]; - dx += stepx, tx += stepx, hx += stepx, dy += sgn*stepy; - pointn = 0; - points[pointn++] = tp; - points[pointn++] = pointfof(tp.x - tx / 3, tp.y + dy); - points[pointn++] = pointfof(np.x - dx, tp.y + dy); - points[pointn++] = pointfof(np.x - dx, (tp.y+hp.y)/2); - points[pointn++] = pointfof(np.x - dx, hp.y - dy); - points[pointn++] = pointfof(hp.x - hx / 3, hp.y - dy); - - points[pointn++] = hp; - if (ED_label(e)) { - if (GD_flip(agraphof(agtail(e)))) { - width = ED_label(e)->dimen.y; - height = ED_label(e)->dimen.x; - } else { - width = ED_label(e)->dimen.x; - height = ED_label(e)->dimen.y; - } - ED_label(e)->pos.x = ND_coord(n).x - dx - width / 2.0; - ED_label(e)->pos.y = ND_coord(n).y; - ED_label(e)->set = TRUE; - if (width > stepx) - dx += width - stepx; - } - - clip_and_install(e, aghead(e), points, pointn, sinfo); -#ifdef DEBUG - if (debugleveln(e,1)) - showPoints (points, pointn); -#endif - } -} - -/* selfRightSpace: - * Assume e is self-edge. - * Return extra space necessary on the right for this edge. - * If the edge does not go on the right, return 0. - * NOTE: the actual space is determined dynamically by GD_nodesep, - * so using the constant SELF_EDGE_SIZE is going to be wrong. - * Fortunately, the default nodesep is the same as SELF_EDGE_SIZE. - */ -int -selfRightSpace (edge_t* e) -{ - int sw; - double label_width; - textlabel_t* l = ED_label(e); - - if (((!ED_tail_port(e).defined) && (!ED_head_port(e).defined)) || - (!(ED_tail_port(e).side & LEFT) && - !(ED_head_port(e).side & LEFT) && - ((ED_tail_port(e).side != ED_head_port(e).side) || - (!(ED_tail_port(e).side & (TOP|BOTTOM)))))) { - sw = SELF_EDGE_SIZE; - if (l) { - label_width = GD_flip(agraphof(aghead(e))) ? l->dimen.y : l->dimen.x; - sw += label_width; - } - } - else sw = 0; - return sw; -} - -/* makeSelfEdge: - * The routing is biased towards the right side because this is what - * dot supports, and leaves room for. - * FIX: With this bias, labels tend to be placed on top of each other. - * Perhaps for self-edges, the label should be centered. - */ -void -makeSelfEdge(path * P, edge_t * edges[], int ind, int cnt, double sizex, - double sizey, splineInfo * sinfo) -{ - edge_t *e; - - e = edges[ind]; - - /* self edge without ports or - * self edge with all ports inside, on the right, or at most 1 on top - * and at most 1 on bottom - */ - - if (((!ED_tail_port(e).defined) && (!ED_head_port(e).defined)) || - (!(ED_tail_port(e).side & LEFT) && - !(ED_head_port(e).side & LEFT) && - ((ED_tail_port(e).side != ED_head_port(e).side) || - (!(ED_tail_port(e).side & (TOP|BOTTOM)))))) { - selfRight(edges, ind, cnt, sizex, sizey, sinfo); - } - - /* self edge with port on left side */ - else if ((ED_tail_port(e).side & LEFT) || (ED_head_port(e).side & LEFT)) { - - /* handle L-R specially */ - if ((ED_tail_port(e).side & RIGHT) || (ED_head_port(e).side & RIGHT)) { - selfTop(edges, ind, cnt, sizex, sizey, sinfo); - } - else { - selfLeft(edges, ind, cnt, sizex, sizey, sinfo); - } - } - - /* self edge with both ports on top side */ - else if (ED_tail_port(e).side & TOP) { - selfTop(edges, ind, cnt, sizex, sizey, sinfo); - } - else if (ED_tail_port(e).side & BOTTOM) { - selfBottom(edges, ind, cnt, sizex, sizey, sinfo); - } - - else assert(0); -} - -/* makePortLabels: - * Add head and tail labels if necessary and update bounding box. - */ -void makePortLabels(edge_t * e) -{ - /* Only use this if labelangle or labeldistance is set for the edge; - * otherwise, handle with external labels. - */ - if (!E_labelangle && !E_labeldistance) return; - - if (ED_head_label(e) && !ED_head_label(e)->set) { - if (place_portlabel(e, TRUE)) - updateBB(agraphof(agtail(e)), ED_head_label(e)); - } - if (ED_tail_label(e) && !ED_tail_label(e)->set) { - if (place_portlabel(e, FALSE)) - updateBB(agraphof(agtail(e)), ED_tail_label(e)); - } -} - -/* endPoints: - * Extract the actual end points of the spline, where - * they touch the node. - */ -static void endPoints(splines * spl, pointf * p, pointf * q) -{ - bezier bz; - - bz = spl->list[0]; - if (bz.sflag) { - *p = bz.sp; - } - else { - *p = bz.list[0]; - } - bz = spl->list[spl->size - 1]; - if (bz.eflag) { - *q = bz.ep; - } - else { - *q = bz.list[bz.size - 1]; - } -} - -/* polylineMidpoint; - * Find midpoint of polyline. - * pp and pq are set to the endpoints of the line segment containing it. - */ -static pointf -polylineMidpoint (splines* spl, pointf* pp, pointf* pq) -{ - bezier bz; - int i, j, k; - double d, dist = 0; - pointf pf, qf, mf; - - for (i = 0; i < spl->size; i++) { - bz = spl->list[i]; - for (j = 0, k=3; k < bz.size; j+=3,k+=3) { - pf = bz.list[j]; - qf = bz.list[k]; - dist += DIST(pf, qf); - } - } - dist /= 2; - for (i = 0; i < spl->size; i++) { - bz = spl->list[i]; - for (j = 0, k=3; k < bz.size; j+=3,k+=3) { - pf = bz.list[j]; - qf = bz.list[k]; - d = DIST(pf,qf); - if (d >= dist) { - *pp = pf; - *pq = qf; - mf.x = ((qf.x*dist) + (pf.x*(d-dist)))/d; - mf.y = ((qf.y*dist) + (pf.y*(d-dist)))/d; - return mf; - } - else - dist -= d; - } - } - assert (FALSE); /* should never get here */ - return mf; -} - -pointf -edgeMidpoint (graph_t* g, edge_t * e) -{ - int et = EDGE_TYPE (g); - pointf d, spf, p, q; - - endPoints(ED_spl(e), &p, &q); - if (APPROXEQPT(p, q, MILLIPOINT)) { /* degenerate spline */ - spf = p; - } - else if ((et == ET_SPLINE) || (et == ET_CURVED)) { - d.x = (q.x + p.x) / 2.; - d.y = (p.y + q.y) / 2.; - spf = dotneato_closest(ED_spl(e), d); - } - else { /* ET_PLINE, ET_ORTHO or ET_LINE */ - spf = polylineMidpoint (ED_spl(e), &p, &q); - } - - return spf; -} - -#define LEFTOF(a,b,c) (((a.y - b.y)*(c.x - b.x) - (c.y - b.y)*(a.x - b.x)) > 0) -#define MAXLABELWD (POINTS_PER_INCH/2.0) - -/* addEdgeLabels: - * rp and rq are the port points of the tail and head node. - * Adds label, headlabel and taillabel. - * The use of 2 and 4 in computing ld.x and ld.y are fudge factors, to - * introduce a bit of spacing. - * Updates bounding box. - * We try to use the actual endpoints of the spline, as they may differ - * significantly from rp and rq, but if the spline is degenerate (e.g., - * the nodes overlap), we use rp and rq. - */ -void addEdgeLabels(graph_t* g, edge_t * e, pointf rp, pointf rq) -{ -#if 0 - int et = EDGE_TYPE (g); - pointf p, q; - pointf d; /* midpoint of segment p-q */ - point ld; - point del; - pointf spf; - double f, ht, wd, dist2; - int leftOf; - - if (ED_label(e) && !ED_label(e)->set) { - endPoints(ED_spl(e), &p, &q); - if (APPROXEQPT(p, q, MILLIPOINT)) { /* degenerate spline */ - p = rp; - q = rq; - spf = p; - } - else if (et == ET_SPLINE) { - d.x = (q.x + p.x) / 2.; - d.y = (p.y + q.y) / 2.; - spf = dotneato_closest(ED_spl(e), d); - } - else { /* ET_PLINE, ET_ORTHO or ET_LINE */ - spf = polylineMidpoint (ED_spl(e), &p, &q); - } - del.x = q.x - p.x; - del.y = q.y - p.y; - dist2 = del.x*del.x + del.y*del.y; - ht = (ED_label(e)->dimen.y + 2)/2.0; - if (dist2) { - wd = (MIN(ED_label(e)->dimen.x + 2, MAXLABELWD))/2.0; - leftOf = LEFTOF(p, q, spf); - if ((leftOf && (del.y >= 0)) || (!leftOf && (del.y < 0))) { - if (del.x*del.y >= 0) - ht *= -1; - } - else { - wd *= -1; - if (del.x*del.y < 0) - ht *= -1; - } - f = (del.y*wd - del.x*ht)/dist2; - ld.x = -f*del.y; - ld.y = f*del.x; - } - else { /* end points the same */ - ld.x = 0; - ld.y = -ht; - } - - ED_label(e)->pos.x = spf.x + ld.x; - ED_label(e)->pos.y = spf.y + ld.y; - ED_label(e)->set = TRUE; - updateBB(agraphof(agtail(e)), ED_label(e)); - } -#endif - makePortLabels(e); -} - -#define AGXGET(o,a) agxget(o,a) - -/* vladimir */ -/* place_portlabel: - * place the {head,tail}label (depending on HEAD_P) of edge E - * N.B. Assume edges are normalized, so tail is at spl->list[0].list[0] - * and head is at spl->list[spl->size-l].list[bez->size-1] - * Return 1 on success - */ -int place_portlabel(edge_t * e, boolean head_p) -{ - textlabel_t *l; - splines *spl; - bezier *bez; - double dist, angle; - pointf c[4], pe, pf; - int i; - char* la; - char* ld; - - if (ED_edge_type(e) == IGNORED) - return 0; - /* add label here only if labelangle or labeldistance is defined; else, use external label */ - if ((!E_labelangle || (*(la = AGXGET(e,E_labelangle)) == '\0')) && - (!E_labeldistance || (*(ld = AGXGET(e,E_labeldistance)) == '\0'))) { - return 0; - } - - l = head_p ? ED_head_label(e) : ED_tail_label(e); - if ((spl = getsplinepoints(e)) == NULL) return 0; - if (!head_p) { - bez = &spl->list[0]; - if (bez->sflag) { - pe = bez->sp; - pf = bez->list[0]; - } else { - pe = bez->list[0]; - for (i = 0; i < 4; i++) - c[i] = bez->list[i]; - pf = Bezier(c, 3, 0.1, NULL, NULL); - } - } else { - bez = &spl->list[spl->size - 1]; - if (bez->eflag) { - pe = bez->ep; - pf = bez->list[bez->size - 1]; - } else { - pe = bez->list[bez->size - 1]; - for (i = 0; i < 4; i++) - c[i] = bez->list[bez->size - 4 + i]; - pf = Bezier(c, 3, 0.9, NULL, NULL); - } - } - angle = atan2(pf.y - pe.y, pf.x - pe.x) + - RADIANS(late_double(e, E_labelangle, PORT_LABEL_ANGLE, -180.0)); - dist = PORT_LABEL_DISTANCE * late_double(e, E_labeldistance, 1.0, 0.0); - l->pos.x = pe.x + dist * cos(angle); - l->pos.y = pe.y + dist * sin(angle); - l->set = TRUE; - return 1; -} - -splines *getsplinepoints(edge_t * e) -{ - edge_t *le; - splines *sp; - - for (le = e; !(sp = ED_spl(le)) && ED_edge_type(le) != NORMAL; - le = ED_to_orig(le)); - if (sp == NULL) - agerr (AGERR, "getsplinepoints: no spline points available for edge (%s,%s)\n", - agnameof(agtail(e)), agnameof(aghead(e))); - return sp; -} - -#undef SPLINES_FUDGE diff --git a/internal/ccall/common/strcasecmp.c b/internal/ccall/common/strcasecmp.c deleted file mode 100644 index 6bca610..0000000 --- a/internal/ccall/common/strcasecmp.c +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - - -#include -#include - - -int strcasecmp(const char *s1, const char *s2) -{ - while ((*s1 != '\0') - && (tolower(*(unsigned char *) s1) == - tolower(*(unsigned char *) s2))) { - s1++; - s2++; - } - - return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); -} - diff --git a/internal/ccall/common/strncasecmp.c b/internal/ccall/common/strncasecmp.c deleted file mode 100644 index 48983fe..0000000 --- a/internal/ccall/common/strncasecmp.c +++ /dev/null @@ -1,36 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - - -#include -#include - -int strncasecmp(const char *s1, const char *s2, unsigned int n) -{ - if (n == 0) - return 0; - - while ((n-- != 0) - && (tolower(*(unsigned char *) s1) == - tolower(*(unsigned char *) s2))) { - if (n == 0 || *s1 == '\0' || *s2 == '\0') - return 0; - s1++; - s2++; - } - - return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); -} - diff --git a/internal/ccall/common/svgcolor_lib b/internal/ccall/common/svgcolor_lib deleted file mode 100644 index ef1f403..0000000 --- a/internal/ccall/common/svgcolor_lib +++ /dev/null @@ -1,147 +0,0 @@ -/svg/aliceblue 240 248 255 255 -/svg/antiquewhite 250 235 215 255 -/svg/aqua 0 255 255 255 -/svg/aquamarine 127 255 212 255 -/svg/azure 240 255 255 255 -/svg/beige 245 245 220 255 -/svg/bisque 255 228 196 255 -/svg/black 0 0 0 255 -/svg/blanchedalmond 255 235 205 255 -/svg/blue 0 0 255 255 -/svg/blueviolet 138 43 226 255 -/svg/brown 165 42 42 255 -/svg/burlywood 222 184 135 255 -/svg/cadetblue 95 158 160 255 -/svg/chartreuse 127 255 0 255 -/svg/chocolate 210 105 30 255 -/svg/coral 255 127 80 255 -/svg/cornflowerblue 100 149 237 255 -/svg/cornsilk 255 248 220 255 -/svg/crimson 220 20 60 255 -/svg/cyan 0 255 255 255 -/svg/darkblue 0 0 139 255 -/svg/darkcyan 0 139 139 255 -/svg/darkgoldenrod 184 134 11 255 -/svg/darkgray 169 169 169 255 -/svg/darkgreen 0 100 0 255 -/svg/darkgrey 169 169 169 255 -/svg/darkkhaki 189 183 107 255 -/svg/darkmagenta 139 0 139 255 -/svg/darkolivegreen 85 107 47 255 -/svg/darkorange 255 140 0 255 -/svg/darkorchid 153 50 204 255 -/svg/darkred 139 0 0 255 -/svg/darksalmon 233 150 122 255 -/svg/darkseagreen 143 188 143 255 -/svg/darkslateblue 72 61 139 255 -/svg/darkslategray 47 79 79 255 -/svg/darkslategrey 47 79 79 255 -/svg/darkturquoise 0 206 209 255 -/svg/darkviolet 148 0 211 255 -/svg/deeppink 255 20 147 255 -/svg/deepskyblue 0 191 255 255 -/svg/dimgray 105 105 105 255 -/svg/dimgrey 105 105 105 255 -/svg/dodgerblue 30 144 255 255 -/svg/firebrick 178 34 34 255 -/svg/floralwhite 255 250 240 255 -/svg/forestgreen 34 139 34 255 -/svg/fuchsia 255 0 255 255 -/svg/gainsboro 220 220 220 255 -/svg/ghostwhite 248 248 255 255 -/svg/gold 255 215 0 255 -/svg/goldenrod 218 165 32 255 -/svg/gray 128 128 128 255 -/svg/grey 128 128 128 255 -/svg/green 0 128 0 255 -/svg/greenyellow 173 255 47 255 -/svg/honeydew 240 255 240 255 -/svg/hotpink 255 105 180 255 -/svg/indianred 205 92 92 255 -/svg/indigo 75 0 130 255 -/svg/ivory 255 255 240 255 -/svg/khaki 240 230 140 255 -/svg/lavender 230 230 250 255 -/svg/lavenderblush 255 240 245 255 -/svg/lawngreen 124 252 0 255 -/svg/lemonchiffon 255 250 205 255 -/svg/lightblue 173 216 230 255 -/svg/lightcoral 240 128 128 255 -/svg/lightcyan 224 255 255 255 -/svg/lightgoldenrodyellow 250 250 210 255 -/svg/lightgray 211 211 211 255 -/svg/lightgreen 144 238 144 255 -/svg/lightgrey 211 211 211 255 -/svg/lightpink 255 182 193 255 -/svg/lightsalmon 255 160 122 255 -/svg/lightseagreen 32 178 170 255 -/svg/lightskyblue 135 206 250 255 -/svg/lightslategray 119 136 153 255 -/svg/lightslategrey 119 136 153 255 -/svg/lightsteelblue 176 196 222 255 -/svg/lightyellow 255 255 224 255 -/svg/lime 0 255 0 255 -/svg/limegreen 50 205 50 255 -/svg/linen 250 240 230 255 -/svg/magenta 255 0 255 255 -/svg/maroon 128 0 0 255 -/svg/mediumaquamarine 102 205 170 255 -/svg/mediumblue 0 0 205 255 -/svg/mediumorchid 186 85 211 255 -/svg/mediumpurple 147 112 219 255 -/svg/mediumseagreen 60 179 113 255 -/svg/mediumslateblue 123 104 238 255 -/svg/mediumspringgreen 0 250 154 255 -/svg/mediumturquoise 72 209 204 255 -/svg/mediumvioletred 199 21 133 255 -/svg/midnightblue 25 25 112 255 -/svg/mintcream 245 255 250 255 -/svg/mistyrose 255 228 225 255 -/svg/moccasin 255 228 181 255 -/svg/navajowhite 255 222 173 255 -/svg/navy 0 0 128 255 -/svg/oldlace 253 245 230 255 -/svg/olive 128 128 0 255 -/svg/olivedrab 107 142 35 255 -/svg/orange 255 165 0 255 -/svg/orangered 255 69 0 255 -/svg/orchid 218 112 214 255 -/svg/palegoldenrod 238 232 170 255 -/svg/palegreen 152 251 152 255 -/svg/paleturquoise 175 238 238 255 -/svg/palevioletred 219 112 147 255 -/svg/papayawhip 255 239 213 255 -/svg/peachpuff 255 218 185 255 -/svg/peru 205 133 63 255 -/svg/pink 255 192 203 255 -/svg/plum 221 160 221 255 -/svg/powderblue 176 224 230 255 -/svg/purple 128 0 128 255 -/svg/red 255 0 0 255 -/svg/rosybrown 188 143 143 255 -/svg/royalblue 65 105 225 255 -/svg/saddlebrown 139 69 19 255 -/svg/salmon 250 128 114 255 -/svg/sandybrown 244 164 96 255 -/svg/seagreen 46 139 87 255 -/svg/seashell 255 245 238 255 -/svg/sienna 160 82 45 255 -/svg/silver 192 192 192 255 -/svg/skyblue 135 206 235 255 -/svg/slateblue 106 90 205 255 -/svg/slategray 112 128 144 255 -/svg/slategrey 112 128 144 255 -/svg/snow 255 250 250 255 -/svg/springgreen 0 255 127 255 -/svg/steelblue 70 130 180 255 -/svg/tan 210 180 140 255 -/svg/teal 0 128 128 255 -/svg/thistle 216 191 216 255 -/svg/tomato 255 99 71 255 -/svg/turquoise 64 224 208 255 -/svg/violet 238 130 238 255 -/svg/wheat 245 222 179 255 -/svg/white 255 255 255 255 -/svg/whitesmoke 245 245 245 255 -/svg/yellow 255 255 0 255 -/svg/yellowgreen 154 205 50 255 diff --git a/internal/ccall/common/svgcolor_names b/internal/ccall/common/svgcolor_names deleted file mode 100644 index da0648c..0000000 --- a/internal/ccall/common/svgcolor_names +++ /dev/null @@ -1,154 +0,0 @@ -# -# This data was obtained by cut&paste from a firefox rendering of: -# http://www.w3.org/TR/SVG/types.html#ColorKeywords -# - -aliceblue color-patch aliceblue rgb(240, 248, 255) -antiquewhite color-patch antiquewhite rgb(250, 235, 215) -aqua color-patch aqua rgb( 0, 255, 255) -aquamarine color-patch aquamarine rgb(127, 255, 212) -azure color-patch azure rgb(240, 255, 255) -beige color-patch beige rgb(245, 245, 220) -bisque color-patch bisque rgb(255, 228, 196) -black color-patch black rgb( 0, 0, 0) -blanchedalmond color-patch blanchedalmond rgb(255, 235, 205) -blue color-patch blue rgb( 0, 0, 255) -blueviolet color-patch blueviolet rgb(138, 43, 226) -brown color-patch brown rgb(165, 42, 42) -burlywood color-patch burlywood rgb(222, 184, 135) -cadetblue color-patch cadetblue rgb( 95, 158, 160) -chartreuse color-patch chartreuse rgb(127, 255, 0) -chocolate color-patch chocolate rgb(210, 105, 30) -coral color-patch coral rgb(255, 127, 80) -cornflowerblue color-patch cornflowerblue rgb(100, 149, 237) -cornsilk color-patch cornsilk rgb(255, 248, 220) -crimson color-patch crimson rgb(220, 20, 60) -cyan color-patch cyan rgb( 0, 255, 255) -darkblue color-patch darkblue rgb( 0, 0, 139) -darkcyan color-patch darkcyan rgb( 0, 139, 139) -darkgoldenrod color-patch darkgoldenrod rgb(184, 134, 11) -darkgray color-patch darkgray rgb(169, 169, 169) -darkgreen color-patch darkgreen rgb( 0, 100, 0) -darkgrey color-patch darkgrey rgb(169, 169, 169) -darkkhaki color-patch darkkhaki rgb(189, 183, 107) -darkmagenta color-patch darkmagenta rgb(139, 0, 139) -darkolivegreen color-patch darkolivegreen rgb( 85, 107, 47) -darkorange color-patch darkorange rgb(255, 140, 0) -darkorchid color-patch darkorchid rgb(153, 50, 204) -darkred color-patch darkred rgb(139, 0, 0) -darksalmon color-patch darksalmon rgb(233, 150, 122) -darkseagreen color-patch darkseagreen rgb(143, 188, 143) -darkslateblue color-patch darkslateblue rgb( 72, 61, 139) -darkslategray color-patch darkslategray rgb( 47, 79, 79) -darkslategrey color-patch darkslategrey rgb( 47, 79, 79) -darkturquoise color-patch darkturquoise rgb( 0, 206, 209) -darkviolet color-patch darkviolet rgb(148, 0, 211) -deeppink color-patch deeppink rgb(255, 20, 147) -deepskyblue color-patch deepskyblue rgb( 0, 191, 255) -dimgray color-patch dimgray rgb(105, 105, 105) -dimgrey color-patch dimgrey rgb(105, 105, 105) -dodgerblue color-patch dodgerblue rgb( 30, 144, 255) -firebrick color-patch firebrick rgb(178, 34, 34) -floralwhite color-patch floralwhite rgb(255, 250, 240) -forestgreen color-patch forestgreen rgb( 34, 139, 34) -fuchsia color-patch fuchsia rgb(255, 0, 255) -gainsboro color-patch gainsboro rgb(220, 220, 220) -ghostwhite color-patch ghostwhite rgb(248, 248, 255) -gold color-patch gold rgb(255, 215, 0) -goldenrod color-patch goldenrod rgb(218, 165, 32) -gray color-patch gray rgb(128, 128, 128) -grey color-patch grey rgb(128, 128, 128) -green color-patch green rgb( 0, 128, 0) -greenyellow color-patch greenyellow rgb(173, 255, 47) -honeydew color-patch honeydew rgb(240, 255, 240) -hotpink color-patch hotpink rgb(255, 105, 180) -indianred color-patch indianred rgb(205, 92, 92) -indigo color-patch indigo rgb( 75, 0, 130) -ivory color-patch ivory rgb(255, 255, 240) -khaki color-patch khaki rgb(240, 230, 140) -lavender color-patch lavender rgb(230, 230, 250) -lavenderblush color-patch lavenderblush rgb(255, 240, 245) -lawngreen color-patch lawngreen rgb(124, 252, 0) -lemonchiffon color-patch lemonchiffon rgb(255, 250, 205) -lightblue color-patch lightblue rgb(173, 216, 230) -lightcoral color-patch lightcoral rgb(240, 128, 128) -lightcyan color-patch lightcyan rgb(224, 255, 255) -lightgoldenrodyellow color-patch lightgoldenrodyellow rgb(250, 250, 210) -lightgray color-patch lightgray rgb(211, 211, 211) -lightgreen color-patch lightgreen rgb(144, 238, 144) -lightgrey color-patch lightgrey rgb(211, 211, 211) - -lightpink color-patch lightpink rgb(255, 182, 193) -lightsalmon color-patch lightsalmon rgb(255, 160, 122) -lightseagreen color-patch lightseagreen rgb( 32, 178, 170) -lightskyblue color-patch lightskyblue rgb(135, 206, 250) -lightslategray color-patch lightslategray rgb(119, 136, 153) -lightslategrey color-patch lightslategrey rgb(119, 136, 153) -lightsteelblue color-patch lightsteelblue rgb(176, 196, 222) -lightyellow color-patch lightyellow rgb(255, 255, 224) -lime color-patch lime rgb( 0, 255, 0) -limegreen color-patch limegreen rgb( 50, 205, 50) -linen color-patch linen rgb(250, 240, 230) -magenta color-patch magenta rgb(255, 0, 255) -maroon color-patch maroon rgb(128, 0, 0) -mediumaquamarine color-patch mediumaquamarine rgb(102, 205, 170) -mediumblue color-patch mediumblue rgb( 0, 0, 205) -mediumorchid color-patch mediumorchid rgb(186, 85, 211) -mediumpurple color-patch mediumpurple rgb(147, 112, 219) -mediumseagreen color-patch mediumseagreen rgb( 60, 179, 113) -mediumslateblue color-patch mediumslateblue rgb(123, 104, 238) -mediumspringgreen color-patch mediumspringgreen rgb( 0, 250, 154) -mediumturquoise color-patch mediumturquoise rgb( 72, 209, 204) -mediumvioletred color-patch mediumvioletred rgb(199, 21, 133) -midnightblue color-patch midnightblue rgb( 25, 25, 112) -mintcream color-patch mintcream rgb(245, 255, 250) -mistyrose color-patch mistyrose rgb(255, 228, 225) -moccasin color-patch moccasin rgb(255, 228, 181) -navajowhite color-patch navajowhite rgb(255, 222, 173) -navy color-patch navy rgb( 0, 0, 128) -oldlace color-patch oldlace rgb(253, 245, 230) -olive color-patch olive rgb(128, 128, 0) -olivedrab color-patch olivedrab rgb(107, 142, 35) -orange color-patch orange rgb(255, 165, 0) -orangered color-patch orangered rgb(255, 69, 0) -orchid color-patch orchid rgb(218, 112, 214) -palegoldenrod color-patch palegoldenrod rgb(238, 232, 170) -palegreen color-patch palegreen rgb(152, 251, 152) -paleturquoise color-patch paleturquoise rgb(175, 238, 238) -palevioletred color-patch palevioletred rgb(219, 112, 147) -papayawhip color-patch papayawhip rgb(255, 239, 213) -peachpuff color-patch peachpuff rgb(255, 218, 185) -peru color-patch peru rgb(205, 133, 63) -pink color-patch pink rgb(255, 192, 203) -plum color-patch plum rgb(221, 160, 221) -powderblue color-patch powderblue rgb(176, 224, 230) -purple color-patch purple rgb(128, 0, 128) -red color-patch red rgb(255, 0, 0) -rosybrown color-patch rosybrown rgb(188, 143, 143) -royalblue color-patch royalblue rgb( 65, 105, 225) -saddlebrown color-patch saddlebrown rgb(139, 69, 19) -salmon color-patch salmon rgb(250, 128, 114) -sandybrown color-patch sandybrown rgb(244, 164, 96) -seagreen color-patch seagreen rgb( 46, 139, 87) -seashell color-patch seashell rgb(255, 245, 238) -sienna color-patch sienna rgb(160, 82, 45) -silver color-patch silver rgb(192, 192, 192) -skyblue color-patch skyblue rgb(135, 206, 235) -slateblue color-patch slateblue rgb(106, 90, 205) -slategray color-patch slategray rgb(112, 128, 144) -slategrey color-patch slategrey rgb(112, 128, 144) -snow color-patch snow rgb(255, 250, 250) -springgreen color-patch springgreen rgb( 0, 255, 127) -steelblue color-patch steelblue rgb( 70, 130, 180) -tan color-patch tan rgb(210, 180, 140) -teal color-patch teal rgb( 0, 128, 128) -thistle color-patch thistle rgb(216, 191, 216) -tomato color-patch tomato rgb(255, 99, 71) -turquoise color-patch turquoise rgb( 64, 224, 208) -violet color-patch violet rgb(238, 130, 238) -wheat color-patch wheat rgb(245, 222, 179) -white color-patch white rgb(255, 255, 255) -whitesmoke color-patch whitesmoke rgb(245, 245, 245) -yellow color-patch yellow rgb(255, 255, 0) -yellowgreen color-patch yellowgreen rgb(154, 205, 50) - diff --git a/internal/ccall/common/taper.c b/internal/ccall/common/taper.c deleted file mode 100644 index fe0ca4c..0000000 --- a/internal/ccall/common/taper.c +++ /dev/null @@ -1,451 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Tapered edges, based on lines.ps written by Denis Moskowitz. - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include - - /* sample point size; should be dynamic based on dpi or under user control */ -#define BEZIERSUBDIVISION 20 - - /* initial guess of array size */ -#define INITSZ 2000 - - /* convert degrees to radians and vice versa */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#define D2R(d) (M_PI*(d)/180.0) -#define R2D(r) (180.0*(r)/M_PI) - -static double currentmiterlimit = 10.0; - -#define moveto(p,x,y) addto(p,x,y) -#define lineto(p,x,y) addto(p,x,y) - -static void addto (stroke_t* p, double x, double y) -{ - pointf pt; - - if (p->nvertices >= p->flags) { - p->flags =+ INITSZ; - p->vertices = RALLOC(p->flags,p->vertices,pointf); - } - pt.x = x; - pt.y = y; - p->vertices[p->nvertices++] = pt; -} - -static void arcn (stroke_t* p, double x, double y, double r, double a1, double a2) -{ - double theta; - int i; - - addto (p, x+r*cos(a1), y+r*sin(a1)); - if (r == 0) return; - while (a2 > a1) a2 -= 2*M_PI; - theta = a1 - a2; - while (theta > 2*M_PI) theta -= 2*M_PI; - theta /= (BEZIERSUBDIVISION-1); - for (i = 1; i < BEZIERSUBDIVISION; i++) - addto (p, x+r*cos(a1-i*theta), y+r*sin(a1-i*theta)); -} - -#if 0 -static void closepath (stroke_t* p) -{ - pointf pt = p->vertices[0]; - - addto (p, pt.x, pt.y); - if (p->flags > p->nvertices) - p->vertices = RALLOC(p->nvertices,p->vertices,pointf); -} -#endif - -/* - * handle zeros - */ -static double myatan (double y, double x) -{ - double v; - if ((x == 0) && (y == 0)) - return 0; - else { - v = atan2 (y, x); - if (v >= 0) return v; - else return (v + 2*M_PI); - } -} - -/* - * mod that accepts floats and makes negatives positive - */ -static double mymod (double original, double modulus) -{ - double v; - if ((original < 0) || (original >= modulus)) { - v = -floor(original/modulus); - return ((v*modulus) + original); - } - return original; -} - -typedef struct { - double x; - double y; - double lengthsofar; - char type; - double dir; - double lout; - int bevel; - double dir2; -} pathpoint; - -typedef struct { - pathpoint* pts; - int cnt; - int sz; -} vararr_t; - - -static vararr_t* -newArr (void) -{ - vararr_t* arr = NEW(vararr_t); - - arr->cnt = 0; - arr->sz = INITSZ; - arr->pts = N_NEW(INITSZ,pathpoint); - - return arr; -} - -static void -insertArr (vararr_t* arr, pointf p, double l) -{ - if (arr->cnt >= arr->sz) { - arr->sz *= 2; - arr->pts = RALLOC(arr->sz,arr->pts,pathpoint); - } - - arr->pts[arr->cnt].x = p.x; - arr->pts[arr->cnt].y = p.y; - arr->pts[arr->cnt++].lengthsofar = l; -} - -#ifdef DEBUG -static void -printArr (vararr_t* arr, FILE* fp) -{ - int i; - pathpoint pt; - - fprintf (fp, "cnt %d sz %d\n", arr->cnt, arr->sz); - for (i = 0; i < arr->cnt; i++) { - pt = arr->pts[i]; - fprintf (fp, " [%d] x %.02f y %.02f d %.02f\n", i, pt.x, pt.y, pt.lengthsofar); - } -} -#endif - -static void -fixArr (vararr_t* arr) -{ - if (arr->sz > arr->cnt) - arr->pts = RALLOC(arr->cnt,arr->pts,pathpoint); -} - -static void -freeArr (vararr_t* arr) -{ - free (arr->pts); - free (arr); -} - -static double l2dist (pointf p0, pointf p1) -{ - double delx = p0.x - p1.x; - double dely = p0.y - p1.y; - return sqrt(delx*delx + dely*dely); -} - -/* analyze current path, creating pathpoints array - * turn all curves into lines - */ -static vararr_t* pathtolines (bezier* bez, double initwid) -{ - int i, j, step; - double seglen, linelen = 0; - vararr_t* arr = newArr(); - pointf p0, p1, V[4]; - int n = bez->size; - pointf* A = bez->list; - - insertArr (arr, A[0], 0); - V[3] = A[0]; - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) - V[j] = A[i + j]; - p0 = V[0]; - for (step = 1; step <= BEZIERSUBDIVISION; step++) { - p1 = Bezier(V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - seglen = l2dist(p0, p1); - /* If initwid is large, this may never happen, so turn off. I assume this is to prevent - * too man points or too small a movement. Perhaps a better test can be made, but for now - * we turn it off. - */ - /* if (seglen > initwid/10) { */ - linelen += seglen; - insertArr (arr, p1, linelen); - /* } */ - p0 = p1; - } - } - fixArr (arr); -#ifdef DEBUG - printArr (arr, stderr); -#endif - return arr; -} - -static void drawbevel(double x, double y, double lineout, int forward, double dir, double dir2, int linejoin, stroke_t* p) -{ - double a, a1, a2; - - if (forward) { - a1 = dir; - a2 = dir2; - } else { - a1 = dir2; - a2 = dir; - } - if (linejoin == 1) { - a = a1 - a2; - if (a <= D2R(0.1)) a += D2R(360); - if (a < D2R(180)) { - a1 = a + a2; - arcn (p,x,y,lineout,a1,a2); - } else { - lineto (p, x + lineout*cos(a2), x + lineout*sin(a2)); - } - } else { - lineto (p, x + lineout*cos(a2), x + lineout*sin(a2)); - } -} - -typedef double (*radfunc_t) (double curlen, double totallen, double initwid); - -/* taper: - * Given a B-spline bez, returns a polygon that represents spline as a tapered - * edge, starting with width initwid. - * The radfunc determines the half-width along the curve. Typically, this will - * decrease from initwid to 0 as the curlen goes from 0 to totallen. - * The linejoin and linecap parameters have roughly the same meaning as in postscript. - * - linejoin = 0 or 1 - * - linecap = 0 or 1 or 2 - * - * Calling function needs to free the allocated stoke_t. - */ -stroke_t* taper (bezier* bez, radfunc_t radfunc, double initwid, int linejoin, int linecap) -{ - int i, l, n; - int pathcount, bevel; - double direction=0, direction_2=0; - vararr_t* arr = pathtolines (bez, initwid); - pathpoint* pathpoints; - pathpoint cur_point, last_point, next_point; - double x=0, y=0, dist; - double nx, ny, ndir; - double lx, ly, ldir; - double lineout=0, linerad=0, linelen=0; - double theta, phi; - stroke_t* p; - - pathcount = arr->cnt; - pathpoints = arr->pts; - linelen = pathpoints[pathcount-1].lengthsofar; - - /* determine miter and bevel points and directions */ - for (i = 0; i < pathcount; i++) { - l = mymod(i-1,pathcount); - n = mymod(i+1,pathcount); - - cur_point = pathpoints[i]; - x = cur_point.x; - y = cur_point.y; - dist = cur_point.lengthsofar; - - next_point = pathpoints[n]; - nx = next_point.x; - ny = next_point.y; - ndir = myatan (ny-y, nx-x); - - last_point = pathpoints[l]; - lx = last_point.x; - ly = last_point.y; - ldir = myatan (ly-y, lx-x); - - bevel = FALSE; - direction_2 = 0; - - /* effective line radius at this point */ - linerad = radfunc(dist, linelen, initwid); - - if ((i == 0) || (i == pathcount-1)) { - lineout = linerad; - if (i == 0) { - direction = ndir + D2R(90); - if (linecap == 2) { - x -= cos(ndir)*lineout; - y -= sin(ndir)*lineout; - } - } else { - direction = ldir - D2R(90); - if (linecap == 2) { - x -= cos(ldir)*lineout; - y -= sin(ldir)*lineout; - } - } - direction_2 = direction; - } else { - theta = ndir-ldir; - if (theta < 0) { - theta += D2R(360); - } - phi = D2R(90)-(theta/2); - /* actual distance to junction point */ - if (cos(phi) == 0) { - lineout = 0; - } else { - lineout = linerad/(cos(phi)); - } - /* direction to junction point */ - direction = ndir+D2R(90)+phi; - if ((0 != linejoin) || (lineout > currentmiterlimit * linerad)) { - bevel = TRUE; - lineout = linerad; - direction = mymod(ldir-D2R(90),D2R(360)); - direction_2 = mymod(ndir+D2R(90),D2R(360)); - if (i == pathcount-1) { - bevel = FALSE; - } - } else { - direction_2 = direction; - } - } - pathpoints[i].x = x; - pathpoints[i].y = y; - pathpoints[i].lengthsofar = dist; - pathpoints[i].type = 'l'; - pathpoints[i].dir = direction; - pathpoints[i].lout = lineout; - pathpoints[i].bevel = bevel; - pathpoints[i].dir2 = direction_2; - } - - /* draw line */ - p = NEW(stroke_t); - /* side 1 */ - for (i = 0; i < pathcount; i++) { - cur_point = pathpoints[i]; - x = cur_point.x; - y = cur_point.y; - direction = cur_point.dir; - lineout = cur_point.lout; - bevel = cur_point.bevel; - direction_2 = cur_point.dir2; - if (i == 0) { - moveto (p, x+cos(direction)*lineout, y+sin(direction)*lineout); - } else { - lineto (p, x+cos(direction)*lineout, y+sin(direction)*lineout); - } - if (bevel) { - drawbevel (x, y, lineout, TRUE, direction, direction_2, linejoin, p); - } - } - /* end circle as needed */ - if (linecap == 1) { - arcn (p, x,y,lineout,direction,direction+D2R(180)); - } else { - direction += D2R(180); - lineto (p, x+cos(direction)*lineout, y+sin(direction)*lineout); - } - /* side 2 */ - for (i = pathcount-2; i >= 0; i--) { - cur_point = pathpoints[i]; - x = cur_point.x; - y = cur_point.y; - direction = cur_point.dir + D2R(180); - lineout = cur_point.lout; - bevel = cur_point.bevel; - direction_2 = cur_point.dir2 + D2R(180); - lineto (p, x+cos(direction_2)*lineout, y+sin(direction_2)*lineout); - if (bevel) { - drawbevel (x, y, lineout, FALSE, direction, direction_2, linejoin, p); - } - } - /* start circle if needed */ - if (linecap == 1) { - arcn (p, x,y,lineout,direction,direction+D2R(180)); - } - /* closepath (p); */ - freeArr (arr); - return p; -} - -static double halffunc (double curlen, double totallen, double initwid) -{ - return ((1 - (curlen/totallen))*initwid/2.0); -} - -stroke_t* taper0 (bezier* bez, double initwid) -{ - return taper(bez, halffunc, initwid, 0, 0); -} - -#ifdef TEST -static pointf pts[] = { - {100,100}, - {150,150}, - {200,100}, - {250,200}, -}; - -main () -{ - stroke_t* sp; - bezier bez; - int i; - - bez.size = sizeof(pts)/sizeof(pointf); - bez.list = pts; - sp = taper0 (&bez, 20); - printf ("newpath\n"); - printf ("%.02f %.02f moveto\n", sp->vertices[0].x, sp->vertices[0].y); - for (i=1; invertices; i++) - printf ("%.02f %.02f lineto\n", sp->vertices[i].x, sp->vertices[i].y); - printf ("fill showpage\n"); -} -#endif diff --git a/internal/ccall/common/textspan.c b/internal/ccall/common/textspan.c deleted file mode 100644 index 5799a26..0000000 --- a/internal/ccall/common/textspan.c +++ /dev/null @@ -1,289 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include "cdt.h" -#include "render.h" - -static double timesFontWidth[] = { - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.3329, 0.4079, 0.5000, 0.5000, 0.8329, 0.7779, 0.3329, /* !"#$%&' */ - 0.3329, 0.3329, 0.5000, 0.5639, 0.2500, 0.3329, 0.2500, 0.2779, /* ()*+,-./ */ - 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, /* 01234567 */ - 0.5000, 0.5000, 0.2779, 0.2779, 0.5639, 0.5639, 0.5639, 0.4439, /* 89:;<=>? */ - 0.9209, 0.7219, 0.6669, 0.6669, 0.7219, 0.6109, 0.5559, 0.7219, /* @ABCDEFG */ - 0.7219, 0.3329, 0.3889, 0.7219, 0.6109, 0.8889, 0.7219, 0.7219, /* HIJKLMNO */ - 0.5559, 0.7219, 0.6669, 0.5559, 0.6109, 0.7219, 0.7219, 0.9439, /* PQRSTUVW */ - 0.7219, 0.7219, 0.6109, 0.3329, 0.2779, 0.3329, 0.4689, 0.5000, /* XYZ[\]^_ */ - 0.3329, 0.4439, 0.5000, 0.4439, 0.5000, 0.4439, 0.3329, 0.5000, /* `abcdefg */ - 0.5000, 0.2779, 0.2779, 0.5000, 0.2779, 0.7779, 0.5000, 0.5000, /* hijklmno */ - 0.5000, 0.5000, 0.3329, 0.3889, 0.2779, 0.5000, 0.5000, 0.7219, /* pqrstuvw */ - 0.5000, 0.5000, 0.4439, 0.4799, 0.1999, 0.4799, 0.5409, 0.2500, /* xyz{|}~ */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.3329, 0.5000, 0.5000, 0.1669, 0.5000, 0.5000, 0.5000, /* ¡¢£¤¥¦§ */ - 0.5000, 0.1799, 0.4439, 0.5000, 0.3329, 0.3329, 0.5559, 0.5559, /* ¨©ª«¬­®¯ */ - 0.2500, 0.5000, 0.5000, 0.5000, 0.2500, 0.2500, 0.4529, 0.3499, /* ±²³´ ¶· */ - 0.3329, 0.4439, 0.4439, 0.5000, 1.0000, 1.0000, 0.2500, 0.4439, /* ¸¹º»¼½ ¿ */ - 0.2500, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, /* ÁÂÃÄÅÆÇ */ - 0.3329, 0.2500, 0.3329, 0.3329, 0.2500, 0.3329, 0.3329, 0.3329, /* È ÊË ÍÎÏ */ - 1.0000, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* Ð */ - 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, 0.2500, /* */ - 0.2500, 0.8889, 0.2500, 0.2759, 0.2500, 0.2500, 0.2500, 0.2500, /* á ã */ - 0.6109, 0.7219, 0.8889, 0.3099, 0.2500, 0.2500, 0.2500, 0.2500, /* èéêë */ - 0.2500, 0.6669, 0.2500, 0.2500, 0.2500, 0.2779, 0.2500, 0.2500, /* ñ õ */ - 0.2779, 0.5000, 0.7219, 0.5000, 0.2500, 0.2500, 0.2500, 0.2500, /* øùúû */ -}; -static double arialFontWidth[] = { - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.3549, 0.5559, 0.5559, 0.8889, 0.6669, 0.2209, /* !"#$%&' */ - 0.3329, 0.3329, 0.3889, 0.5839, 0.2779, 0.3329, 0.2779, 0.2779, /* ()*+,-./ */ - 0.5559, 0.5559, 0.5559, 0.5559, 0.5559, 0.5559, 0.5559, 0.5559, /* 01234567 */ - 0.5559, 0.5559, 0.2779, 0.2779, 0.5839, 0.5839, 0.5839, 0.5559, /* 89:;<=>? */ - 1.0149, 0.6669, 0.6669, 0.7219, 0.7219, 0.6669, 0.6109, 0.7779, /* @ABCDEFG */ - 0.7219, 0.2779, 0.5000, 0.6669, 0.5559, 0.8329, 0.7219, 0.7779, /* HIJKLMNO */ - 0.6669, 0.7779, 0.7219, 0.6669, 0.6109, 0.7219, 0.6669, 0.9439, /* PQRSTUVW */ - 0.6669, 0.6669, 0.6109, 0.2779, 0.2779, 0.2779, 0.4689, 0.5559, /* XYZ[\]^_ */ - 0.2219, 0.5559, 0.5559, 0.5000, 0.5559, 0.5559, 0.2779, 0.5559, /* `abcdefg */ - 0.5559, 0.2219, 0.2219, 0.5000, 0.2219, 0.8329, 0.5559, 0.5559, /* hijklmno */ - 0.5559, 0.5559, 0.3329, 0.5000, 0.2779, 0.5559, 0.5000, 0.7219, /* pqrstuvw */ - 0.5000, 0.5000, 0.5000, 0.3339, 0.2599, 0.3339, 0.5839, 0.2779, /* xyz{|}~ */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 0.3329, 0.5559, 0.5559, 0.1669, 0.5559, 0.5559, 0.5559, /* ¡¢£¤¥¦§ */ - 0.5559, 0.1909, 0.3329, 0.5559, 0.3329, 0.3329, 0.5000, 0.5000, /* ¨©ª«¬­®¯ */ - 0.2779, 0.5559, 0.5559, 0.5559, 0.2779, 0.2779, 0.5369, 0.3499, /* ±²³´ ¶· */ - 0.2219, 0.3329, 0.3329, 0.5559, 1.0000, 1.0000, 0.2779, 0.6109, /* ¸¹º»¼½ ¿ */ - 0.2779, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, 0.3329, /* ÁÂÃÄÅÆÇ */ - 0.3329, 0.2779, 0.3329, 0.3329, 0.2779, 0.3329, 0.3329, 0.3329, /* È ÊË ÍÎÏ */ - 1.0000, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* Ð */ - 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* */ - 0.2779, 1.0000, 0.2779, 0.3699, 0.2779, 0.2779, 0.2779, 0.2779, /* á ã */ - 0.5559, 0.7779, 1.0000, 0.3649, 0.2779, 0.2779, 0.2779, 0.2779, /* èéêë */ - 0.2779, 0.8889, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, 0.2779, /* ñ õ */ - 0.2219, 0.6109, 0.9439, 0.6109, 0.2779, 0.2779, 0.2779, 0.2779, /* øùúû */ -}; -static double courFontWidth[] = { - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* !"#$%&' */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ()*+,-./ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* 01234567 */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* 89:;<=>? */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* @ABCDEFG */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* HIJKLMNO */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* PQRSTUVW */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* XYZ[\]^_ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* `abcdefg */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* hijklmno */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* pqrstuvw */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* xyz{|}~ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ¡¢£¤¥¦§ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ¨©ª«¬­®¯ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ±²³´ ¶· */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ¸¹º»¼½ ¿ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ÁÂÃÄÅÆÇ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* È ÊË ÍÎÏ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* Ð */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* á ã */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* èéêë */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* ñ õ */ - 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, 0.5999, /* øùúû */ -}; - -/* estimate_textspan_size: - * Estimate size of textspan, for given face and size, in points. - */ -static void -estimate_textspan_size(textspan_t * span, char **fontpath) -{ - double *Fontwidth, fontsize; - char c, *p, *fpp, *fontname; - - fontname = span->font->name; - fontsize = span->font->size; - - span->size.x = 0.0; - span->size.y = fontsize * LINESPACING; - span->yoffset_layout = 0.0; - span->yoffset_centerline = 0.1 * fontsize; - span->layout = NULL; - span->free_layout = NULL; - - if (!strncasecmp(fontname, "cour", 4)) { - fpp = "[internal courier]"; - Fontwidth = courFontWidth; - } else if (!strncasecmp(fontname, "arial", 5) - || !strncasecmp(fontname, "helvetica", 9)) { - fpp = "[internal arial]"; - Fontwidth = arialFontWidth; - } else { - fpp = "[internal times]"; - Fontwidth = timesFontWidth; - } - if (fontpath) - *fontpath = fpp; - if ((p = span->str)) { - while ((c = *p++)) - span->size.x += Fontwidth[(unsigned char) c]; - /* NOTE: Tables are based on a font of size 1. Need to multiply by - * fontsize to get appropriate value. - */ - span->size.x *= fontsize; - } -} - -/* - * This table maps standard Postscript font names to URW Type 1 fonts. - * - * The original source is in ps_font_equiv.txt. This is sorted - * during make into ps_font_equiv.h to ensure that it is in the right - * order for bsearch() - */ -static PostscriptAlias postscript_alias[] = { -#include "ps_font_equiv.h" -}; - -static int fontcmpf(const void *a, const void *b) -{ - return (strcasecmp(((PostscriptAlias*)a)->name, ((PostscriptAlias*)b)->name)); -} - -static PostscriptAlias* translate_postscript_fontname(char* fontname) -{ - static PostscriptAlias key; - static PostscriptAlias *result; - - if (key.name == NULL || strcasecmp(key.name, fontname)) { - free(key.name); - key.name = strdup(fontname); - result = (PostscriptAlias *) bsearch((void *) &key, - (void *) postscript_alias, - sizeof(postscript_alias) / sizeof(PostscriptAlias), - sizeof(PostscriptAlias), - fontcmpf); - } - return result; -} - -pointf textspan_size(GVC_t *gvc, textspan_t * span) -{ - char **fpp = NULL, *fontpath = NULL; - textfont_t *font; - - assert(span->font); - font = span->font; - - assert(font->name); - - /* only need to find alias once per font, since they are unique in dict */ - if (! font->postscript_alias) - font->postscript_alias = translate_postscript_fontname(font->name); - - if (Verbose && emit_once(font->name)) - fpp = &fontpath; - - if (! gvtextlayout(gvc, span, fpp)) - estimate_textspan_size(span, fpp); - - if (fpp) { - if (fontpath) - fprintf(stderr, "fontname: \"%s\" resolved to: %s\n", - font->name, fontpath); - else - fprintf(stderr, "fontname: unable to resolve \"%s\"\n", font->name); - } - - return span->size; -} - -static void* textfont_makef(Dt_t* dt, void* obj, Dtdisc_t* disc) -{ - textfont_t *f1 = (textfont_t*)obj; - textfont_t *f2 = calloc(1,sizeof(textfont_t)); - - /* key */ - if (f1->name) f2->name = strdup(f1->name); - if (f1->color) f2->color = strdup(f1->color); - f2->flags = f1->flags; - f2->size = f1->size; - - /* non key */ - f2->postscript_alias = f1->postscript_alias; - - return f2; -} - -static void textfont_freef(Dt_t* dt, void* obj, Dtdisc_t* disc) -{ - textfont_t *f = (textfont_t*)obj; - - if (f->name) free(f->name); - if (f->color) free(f->color); - free(f); -} - -static int textfont_comparf (Dt_t* dt, void* key1, void* key2, Dtdisc_t* disc) -{ - int rc; - textfont_t *f1 = (textfont_t*)key1, *f2 = (textfont_t*)key2; - - if (f1->name || f2->name) { - if (! f1->name) return -1; - if (! f2->name) return 1; - rc = strcmp(f1->name, f2->name); - if (rc) return rc; - } - if (f1->color || f2->color) { - if (! f1->color) return -1; - if (! f2->color) return 1; - rc = strcmp(f1->color, f2->color); - if (rc) return rc; - } - rc = (f1->flags - f2->flags); - if (rc) return rc; - if (f1->size < f2->size) return -1; - if (f1->size > f2->size) return 1; - return 0; -} - -Dt_t * textfont_dict_open(GVC_t *gvc) -{ - DTDISC(&(gvc->textfont_disc),0,sizeof(textfont_t),-1,textfont_makef,textfont_freef,textfont_comparf,NULL,NULL,NULL); - gvc->textfont_dt = dtopen(&(gvc->textfont_disc), Dtoset); - return gvc->textfont_dt; -} - -void textfont_dict_close(GVC_t *gvc) -{ - dtclose(gvc->textfont_dt); -} diff --git a/internal/ccall/common/textspan.h b/internal/ccall/common/textspan.h deleted file mode 100644 index 64ba97f..0000000 --- a/internal/ccall/common/textspan.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef TEXTSPAN_H -#define TEXTSPAN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Bold, Italic, Underline, Sup, Sub, Strike */ -/* Stored in textfont_t.flags, which is 7 bits, so full */ -/* Probably should be moved to textspan_t */ -#define HTML_BF (1 << 0) -#define HTML_IF (1 << 1) -#define HTML_UL (1 << 2) -#define HTML_SUP (1 << 3) -#define HTML_SUB (1 << 4) -#define HTML_S (1 << 5) -#define HTML_OL (1 << 6) - - typedef struct _PostscriptAlias { - char* name; - char* family; - char* weight; - char* stretch; - char* style; - int xfig_code; - char* svg_font_family; - char* svg_font_weight; - char* svg_font_style; - } PostscriptAlias; - - /* font information - * If name or color is NULL, or size < 0, that attribute - * is unspecified. - */ - typedef struct { - char* name; - char* color; - PostscriptAlias *postscript_alias; - double size; - unsigned int flags:7; /* HTML_UL, HTML_IF, HTML_BF, etc. */ - unsigned int cnt:(sizeof(unsigned int) * 8 - 7); /* reference count */ - } textfont_t; - - /* atomic unit of text emitted using a single htmlfont_t */ - typedef struct { - char *str; /* stored in utf-8 */ - textfont_t *font; - void *layout; - void (*free_layout) (void *layout); /* FIXME - this is ugly */ - double yoffset_layout, yoffset_centerline; - pointf size; - char just; /* 'l' 'n' 'r' */ /* FIXME */ - } textspan_t; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/timing.c b/internal/ccall/common/timing.c deleted file mode 100644 index dc684d2..0000000 --- a/internal/ccall/common/timing.c +++ /dev/null @@ -1,58 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _WIN32 - -#include -#include -#include -#include - - - -#ifndef HZ -#define HZ 60 -#endif -typedef struct tms mytime_t; -#define GET_TIME(S) times(&(S)) -#define DIFF_IN_SECS(S,T) ((S.tms_utime + S.tms_stime - T.tms_utime - T.tms_stime)/(double)HZ) - -#else - -#include -#include "render.h" -#include "utils.h" - -typedef clock_t mytime_t; -#define GET_TIME(S) S = clock() -#define DIFF_IN_SECS(S,T) ((S - T) / (double)CLOCKS_PER_SEC) - -#endif - - -static mytime_t T; - -void start_timer(void) -{ - GET_TIME(T); -} - -double elapsed_sec(void) -{ - mytime_t S; - double rv; - - GET_TIME(S); - rv = DIFF_IN_SECS(S, T); - return rv; -} diff --git a/internal/ccall/common/types.h b/internal/ccall/common/types.h deleted file mode 100644 index 933af78..0000000 --- a/internal/ccall/common/types.h +++ /dev/null @@ -1,576 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_TYPES_H -#define GV_TYPES_H - -/* Define if you want CGRAPH */ -#define WITH_CGRAPH 1 - -#include -#include -#include - -typedef unsigned char boolean; -#ifndef NOT -#define NOT(v) (!(v)) -#endif -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE NOT(FALSE) -#endif - -#include "geom.h" -#include "gvcext.h" -#include "pathgeom.h" -#include "textspan.h" -#include "cgraph.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef int (*qsort_cmpf) (const void *, const void *); - typedef int (*bsearch_cmpf) (const void *, const void *); - typedef struct Agraph_s graph_t; - typedef struct Agnode_s node_t; - typedef struct Agedge_s edge_t; - typedef struct Agsym_s attrsym_t; -#define TAIL_ID "tailport" -#define HEAD_ID "headport" - - typedef struct htmllabel_t htmllabel_t; - - typedef union inside_t { - struct { - pointf* p; - double* r; - } a; - struct { - node_t* n; - boxf* bp; - } s; - } inside_t; - - typedef struct port { /* internal edge endpoint specification */ - pointf p; /* aiming point relative to node center */ - double theta; /* slope in radians */ - boxf *bp; /* if not null, points to bbox of - * rectangular area that is port target - */ - boolean defined; /* if true, edge has port info at this end */ - boolean constrained; /* if true, constraints such as theta are set */ - boolean clip; /* if true, clip end to node/port shape */ - boolean dyna; /* if true, assign compass point dynamically */ - unsigned char order; /* for mincross */ - unsigned char side; /* if port is on perimeter of node, this - * contains the bitwise OR of the sides (TOP, - * BOTTOM, etc.) it is on. - */ - char *name; /* port name, if it was explicitly given, otherwise NULL */ - } port; - - typedef struct { - boolean(*swapEnds) (edge_t * e); /* Should head and tail be swapped? */ - boolean(*splineMerge) (node_t * n); /* Is n a node in the middle of an edge? */ - boolean ignoreSwap; /* Test for swapped edges if false */ - boolean isOrtho; /* Orthogonal routing used */ - } splineInfo; - - typedef struct pathend_t { - boxf nb; /* the node box */ - pointf np; /* node port */ - int sidemask; - int boxn; - boxf boxes[20]; - } pathend_t; - - typedef struct path { /* internal specification for an edge spline */ - port start, end; - int nbox; /* number of subdivisions */ - boxf *boxes; /* rectangular regions of subdivision */ - void *data; - } path; - - typedef struct bezier { - pointf *list; - int size; - int sflag, eflag; - pointf sp, ep; - } bezier; - - typedef struct splines { - bezier *list; - int size; - boxf bb; - } splines; - - typedef struct textlabel_t { - char *text, *fontname, *fontcolor; - int charset; - double fontsize; - pointf dimen; /* the diagonal size of the label (estimated by layout) */ - pointf space; /* the diagonal size of the space for the label */ - /* the rendered label is aligned in this box */ - /* space does not include pad or margin */ - pointf pos; /* the center of the space for the label */ - union { - struct { - textspan_t *span; - short nspans; - } txt; - htmllabel_t *html; - } u; - char valign; /* 't' 'c' 'b' */ - boolean set; /* true if position is set */ - boolean html; /* true if html label */ - } textlabel_t; - - typedef struct polygon_t { /* mutable shape information for a node */ - int regular; /* true for symmetric shapes */ - int peripheries; /* number of periphery lines */ - int sides; /* number of sides */ - double orientation; /* orientation of shape (+ve degrees) */ - double distortion; /* distortion factor - as in trapezium */ - double skew; /* skew factor - as in parallelogram */ - int option; /* ROUNDED, DIAGONAL corners, etc. */ - pointf *vertices; /* array of vertex points */ - } polygon_t; - - typedef struct stroke_t { /* information about a single stroke */ - /* we would have called it a path if that term wasn't already used */ - int nvertices; /* number of points in the stroke */ - int flags; /* stroke style flags */ - pointf *vertices; /* array of vertex points */ - } stroke_t; - -/* flag definitions for stroke_t */ -#define STROKE_CLOSED (1 << 0) -#define STROKE_FILLED (1 << 1) -#define STROKE_PENDOWN (1 << 2) -#define STROKE_VERTICES_ALLOCATED (1 << 3) - - typedef struct shape_t { /* mutable shape information for a node */ - int nstrokes; /* number of strokes in array */ - stroke_t *strokes; /* array of strokes */ - /* The last stroke must always be closed, but can be pen_up. - * It is used as the clipping path */ - } shape_t; - - typedef struct shape_functions { /* read-only shape functions */ - void (*initfn) (node_t *); /* initializes shape from node u.shape_info structure */ - void (*freefn) (node_t *); /* frees shape from node u.shape_info structure */ - port(*portfn) (node_t *, char *, char *); /* finds aiming point and slope of port */ - boolean(*insidefn) (inside_t * inside_context, pointf); /* clips incident gvc->e spline on shape of gvc->n */ - int (*pboxfn)(node_t* n, port* p, int side, boxf rv[], int *kptr); /* finds box path to reach port */ - void (*codefn) (GVJ_t * job, node_t * n); /* emits graphics code for node */ - } shape_functions; - - typedef enum { SH_UNSET, SH_POLY, SH_RECORD, SH_POINT, SH_EPSF} shape_kind; - - typedef struct shape_desc { /* read-only shape descriptor */ - char *name; /* as read from graph file */ - shape_functions *fns; - polygon_t *polygon; /* base polygon info */ - boolean usershape; - } shape_desc; - -#include "usershape.h" /* usershapes needed by gvc */ - - typedef struct nodequeue { - node_t **store, **limit, **head, **tail; - } nodequeue; - - typedef struct adjmatrix_t { - int nrows, ncols; - char *data; - } adjmatrix_t; - - typedef struct rank_t { - int n; /* number of nodes in this rank */ - node_t **v; /* ordered list of nodes in rank */ - int an; /* globally allocated number of nodes */ - node_t **av; /* allocated list of nodes in rank */ - double ht1, ht2; /* height below/above centerline */ - double pht1, pht2; /* as above, but only primitive nodes */ - boolean candidate; /* for transpose () */ - boolean valid; - int cache_nc; /* caches number of crossings */ - adjmatrix_t *flat; - } rank_t; - - typedef enum { R_NONE = - 0, R_VALUE, R_FILL, R_COMPRESS, R_AUTO, R_EXPAND } ratio_t; - - typedef struct layout_t { - double quantum; - double scale; - double ratio; /* set only if ratio_kind == R_VALUE */ - double dpi; - pointf margin; - pointf page; - pointf size; - boolean filled; - boolean landscape; - boolean centered; - ratio_t ratio_kind; - void* xdots; - char* id; - } layout_t; - -/* for "record" shapes */ - typedef struct field_t { - pointf size; /* its dimension */ - boxf b; /* its placement in node's coordinates */ - int n_flds; - textlabel_t *lp; /* n_flds == 0 */ - struct field_t **fld; /* n_flds > 0 */ - char *id; /* user's identifier */ - unsigned char LR; /* if box list is horizontal (left to right) */ - unsigned char sides; /* sides of node exposed to field */ - } field_t; - - typedef struct nlist_t { - node_t **list; - int size; - } nlist_t; - - typedef struct elist { - edge_t **list; - int size; - } elist; - -#define GUI_STATE_ACTIVE (1<<0) -#define GUI_STATE_SELECTED (1<<1) -#define GUI_STATE_VISITED (1<<2) -#define GUI_STATE_DELETED (1<<3) - -#define elist_fastapp(item,L) do {L.list[L.size++] = item; L.list[L.size] = NULL;} while(0) -#define elist_append(item,L) do {L.list = ALLOC(L.size + 2,L.list,edge_t*); L.list[L.size++] = item; L.list[L.size] = NULL;} while(0) -#define alloc_elist(n,L) do {L.size = 0; L.list = N_NEW(n + 1,edge_t*); } while (0) -#define free_list(L) do {if (L.list) free(L.list);} while (0) - -typedef enum {NATIVEFONTS,PSFONTS,SVGFONTS} fontname_kind; - - typedef struct Agraphinfo_t { - Agrec_t hdr; - /* to generate code */ - layout_t *drawing; - textlabel_t *label; /* if the cluster has a title */ - boxf bb; /* bounding box */ - pointf border[4]; /* sizes of margins for graph labels */ - unsigned char gui_state; /* Graph state for GUI ops */ - unsigned char has_labels; - boolean has_images; - unsigned char charset; /* input character set */ - int rankdir; - double ht1, ht2; /* below and above extremal ranks */ - unsigned short flags; - void *alg; - GVC_t *gvc; /* context for "globals" over multiple graphs */ - void (*cleanup) (graph_t * g); /* function to deallocate layout-specific data */ - -#ifndef DOT_ONLY - /* to place nodes */ - node_t **neato_nlist; - int move; - double **dist, **spring, **sum_t, ***t; - unsigned short ndim; - unsigned short odim; -#endif -#ifndef NEATO_ONLY - /* to have subgraphs */ - int n_cluster; - graph_t **clust; /* clusters are in clust[1..n_cluster] !!! */ - graph_t *dotroot; - node_t *nlist; - rank_t *rank; - graph_t *parent; /* containing cluster (not parent subgraph) */ - int level; /* cluster nesting level (not node level!) */ - node_t *minrep, *maxrep; /* set leaders for min and max rank */ - - /* fast graph node list */ - nlist_t comp; - /* connected components */ - node_t *minset, *maxset; /* set leaders */ - long n_nodes; - /* includes virtual */ - short minrank, maxrank; - - /* various flags */ - boolean has_flat_edges; - boolean has_sourcerank; - boolean has_sinkrank; - unsigned char showboxes; - fontname_kind fontnames; /* to override mangling in SVG */ - - int nodesep, ranksep; - node_t *ln, *rn; /* left, right nodes of bounding box */ - - /* for clusters */ - node_t *leader, **rankleader; - boolean expanded; - char installed; - char set_type; - char label_pos; - boolean exact_ranksep; -#endif - - } Agraphinfo_t; - -#define GD_parent(g) (((Agraphinfo_t*)AGDATA(g))->parent) -#define GD_level(g) (((Agraphinfo_t*)AGDATA(g))->level) -#define GD_drawing(g) (((Agraphinfo_t*)AGDATA(g))->drawing) -#define GD_bb(g) (((Agraphinfo_t*)AGDATA(g))->bb) -#define GD_gvc(g) (((Agraphinfo_t*)AGDATA(g))->gvc) -#define GD_cleanup(g) (((Agraphinfo_t*)AGDATA(g))->cleanup) -#define GD_dist(g) (((Agraphinfo_t*)AGDATA(g))->dist) -#define GD_alg(g) (((Agraphinfo_t*)AGDATA(g))->alg) -#define GD_border(g) (((Agraphinfo_t*)AGDATA(g))->border) -#define GD_cl_cnt(g) (((Agraphinfo_t*)AGDATA(g))->cl_nt) -#define GD_clust(g) (((Agraphinfo_t*)AGDATA(g))->clust) -#define GD_dotroot(g) (((Agraphinfo_t*)AGDATA(g))->dotroot) -#define GD_comp(g) (((Agraphinfo_t*)AGDATA(g))->comp) -#define GD_exact_ranksep(g) (((Agraphinfo_t*)AGDATA(g))->exact_ranksep) -#define GD_expanded(g) (((Agraphinfo_t*)AGDATA(g))->expanded) -#define GD_flags(g) (((Agraphinfo_t*)AGDATA(g))->flags) -#define GD_gui_state(g) (((Agraphinfo_t*)AGDATA(g))->gui_state) -#define GD_charset(g) (((Agraphinfo_t*)AGDATA(g))->charset) -#define GD_has_labels(g) (((Agraphinfo_t*)AGDATA(g))->has_labels) -#define GD_has_images(g) (((Agraphinfo_t*)AGDATA(g))->has_images) -#define GD_has_flat_edges(g) (((Agraphinfo_t*)AGDATA(g))->has_flat_edges) -#define GD_has_sourcerank(g) (((Agraphinfo_t*)AGDATA(g))->has_sourcerank) -#define GD_has_sinkrank(g) (((Agraphinfo_t*)AGDATA(g))->has_sinkrank) -#define GD_ht1(g) (((Agraphinfo_t*)AGDATA(g))->ht1) -#define GD_ht2(g) (((Agraphinfo_t*)AGDATA(g))->ht2) -#define GD_inleaf(g) (((Agraphinfo_t*)AGDATA(g))->inleaf) -#define GD_installed(g) (((Agraphinfo_t*)AGDATA(g))->installed) -#define GD_label(g) (((Agraphinfo_t*)AGDATA(g))->label) -#define GD_leader(g) (((Agraphinfo_t*)AGDATA(g))->leader) -#define GD_rankdir2(g) (((Agraphinfo_t*)AGDATA(g))->rankdir) -#define GD_rankdir(g) (((Agraphinfo_t*)AGDATA(g))->rankdir & 0x3) -#define GD_flip(g) (GD_rankdir(g) & 1) -#define GD_realrankdir(g) ((((Agraphinfo_t*)AGDATA(g))->rankdir) >> 2) -#define GD_realflip(g) (GD_realrankdir(g) & 1) -#define GD_ln(g) (((Agraphinfo_t*)AGDATA(g))->ln) -#define GD_maxrank(g) (((Agraphinfo_t*)AGDATA(g))->maxrank) -#define GD_maxset(g) (((Agraphinfo_t*)AGDATA(g))->maxset) -#define GD_minrank(g) (((Agraphinfo_t*)AGDATA(g))->minrank) -#define GD_minset(g) (((Agraphinfo_t*)AGDATA(g))->minset) -#define GD_minrep(g) (((Agraphinfo_t*)AGDATA(g))->minrep) -#define GD_maxrep(g) (((Agraphinfo_t*)AGDATA(g))->maxrep) -#define GD_move(g) (((Agraphinfo_t*)AGDATA(g))->move) -#define GD_n_cluster(g) (((Agraphinfo_t*)AGDATA(g))->n_cluster) -#define GD_n_nodes(g) (((Agraphinfo_t*)AGDATA(g))->n_nodes) -#define GD_ndim(g) (((Agraphinfo_t*)AGDATA(g))->ndim) -#define GD_odim(g) (((Agraphinfo_t*)AGDATA(g))->odim) -#define GD_neato_nlist(g) (((Agraphinfo_t*)AGDATA(g))->neato_nlist) -#define GD_nlist(g) (((Agraphinfo_t*)AGDATA(g))->nlist) -#define GD_nodesep(g) (((Agraphinfo_t*)AGDATA(g))->nodesep) -#define GD_outleaf(g) (((Agraphinfo_t*)AGDATA(g))->outleaf) -#define GD_rank(g) (((Agraphinfo_t*)AGDATA(g))->rank) -#define GD_rankleader(g) (((Agraphinfo_t*)AGDATA(g))->rankleader) -#define GD_ranksep(g) (((Agraphinfo_t*)AGDATA(g))->ranksep) -#define GD_rn(g) (((Agraphinfo_t*)AGDATA(g))->rn) -#define GD_set_type(g) (((Agraphinfo_t*)AGDATA(g))->set_type) -#define GD_label_pos(g) (((Agraphinfo_t*)AGDATA(g))->label_pos) -#define GD_showboxes(g) (((Agraphinfo_t*)AGDATA(g))->showboxes) -#define GD_fontnames(g) (((Agraphinfo_t*)AGDATA(g))->fontnames) -#define GD_spring(g) (((Agraphinfo_t*)AGDATA(g))->spring) -#define GD_sum_t(g) (((Agraphinfo_t*)AGDATA(g))->sum_t) -#define GD_t(g) (((Agraphinfo_t*)AGDATA(g))->t) - - typedef struct Agnodeinfo_t { - Agrec_t hdr; - shape_desc *shape; - void *shape_info; - pointf coord; - double width, height; /* inches */ - boxf bb; - double ht, lw, rw; - textlabel_t *label; - textlabel_t *xlabel; - void *alg; - char state; - unsigned char gui_state; /* Node state for GUI ops */ - boolean clustnode; - -#ifndef DOT_ONLY - unsigned char pinned; - int id, heapindex, hops; - double *pos, dist; -#endif -#ifndef NEATO_ONLY - unsigned char showboxes; - boolean has_port; - node_t* rep; - node_t *set; - - /* fast graph */ - char node_type, mark, onstack; - char ranktype, weight_class; - node_t *next, *prev; - elist in, out, flat_out, flat_in, other; - graph_t *clust; - - /* for union-find and collapsing nodes */ - int UF_size; - node_t *UF_parent; - node_t *inleaf, *outleaf; - - /* for placing nodes */ - int rank, order; /* initially, order = 1 for ordered edges */ - double mval; - elist save_in, save_out; - - /* for network-simplex */ - elist tree_in, tree_out; - edge_t *par; - int low, lim; - int priority; - - double pad[1]; -#endif - - } Agnodeinfo_t; - -#define ND_id(n) (((Agnodeinfo_t*)AGDATA(n))->id) -#define ND_alg(n) (((Agnodeinfo_t*)AGDATA(n))->alg) -#define ND_UF_parent(n) (((Agnodeinfo_t*)AGDATA(n))->UF_parent) -#define ND_set(n) (((Agnodeinfo_t*)AGDATA(n))->set) -#define ND_UF_size(n) (((Agnodeinfo_t*)AGDATA(n))->UF_size) -#define ND_bb(n) (((Agnodeinfo_t*)AGDATA(n))->bb) -#define ND_clust(n) (((Agnodeinfo_t*)AGDATA(n))->clust) -#define ND_coord(n) (((Agnodeinfo_t*)AGDATA(n))->coord) -#define ND_dist(n) (((Agnodeinfo_t*)AGDATA(n))->dist) -#define ND_flat_in(n) (((Agnodeinfo_t*)AGDATA(n))->flat_in) -#define ND_flat_out(n) (((Agnodeinfo_t*)AGDATA(n))->flat_out) -#define ND_gui_state(n) (((Agnodeinfo_t*)AGDATA(n))->gui_state) -#define ND_has_port(n) (((Agnodeinfo_t*)AGDATA(n))->has_port) -#define ND_rep(n) (((Agnodeinfo_t*)AGDATA(n))->rep) -#define ND_heapindex(n) (((Agnodeinfo_t*)AGDATA(n))->heapindex) -#define ND_height(n) (((Agnodeinfo_t*)AGDATA(n))->height) -#define ND_hops(n) (((Agnodeinfo_t*)AGDATA(n))->hops) -#define ND_ht(n) (((Agnodeinfo_t*)AGDATA(n))->ht) -#define ND_in(n) (((Agnodeinfo_t*)AGDATA(n))->in) -#define ND_inleaf(n) (((Agnodeinfo_t*)AGDATA(n))->inleaf) -#define ND_label(n) (((Agnodeinfo_t*)AGDATA(n))->label) -#define ND_xlabel(n) (((Agnodeinfo_t*)AGDATA(n))->xlabel) -#define ND_lim(n) (((Agnodeinfo_t*)AGDATA(n))->lim) -#define ND_low(n) (((Agnodeinfo_t*)AGDATA(n))->low) -#define ND_lw(n) (((Agnodeinfo_t*)AGDATA(n))->lw) -#define ND_mark(n) (((Agnodeinfo_t*)AGDATA(n))->mark) -#define ND_mval(n) (((Agnodeinfo_t*)AGDATA(n))->mval) -#define ND_n_cluster(n) (((Agnodeinfo_t*)AGDATA(n))->n_cluster) -#define ND_next(n) (((Agnodeinfo_t*)AGDATA(n))->next) -#define ND_node_type(n) (((Agnodeinfo_t*)AGDATA(n))->node_type) -#define ND_onstack(n) (((Agnodeinfo_t*)AGDATA(n))->onstack) -#define ND_order(n) (((Agnodeinfo_t*)AGDATA(n))->order) -#define ND_other(n) (((Agnodeinfo_t*)AGDATA(n))->other) -#define ND_out(n) (((Agnodeinfo_t*)AGDATA(n))->out) -#define ND_outleaf(n) (((Agnodeinfo_t*)AGDATA(n))->outleaf) -#define ND_par(n) (((Agnodeinfo_t*)AGDATA(n))->par) -#define ND_pinned(n) (((Agnodeinfo_t*)AGDATA(n))->pinned) -#define ND_pos(n) (((Agnodeinfo_t*)AGDATA(n))->pos) -#define ND_prev(n) (((Agnodeinfo_t*)AGDATA(n))->prev) -#define ND_priority(n) (((Agnodeinfo_t*)AGDATA(n))->priority) -#define ND_rank(n) (((Agnodeinfo_t*)AGDATA(n))->rank) -#define ND_ranktype(n) (((Agnodeinfo_t*)AGDATA(n))->ranktype) -#define ND_rw(n) (((Agnodeinfo_t*)AGDATA(n))->rw) -#define ND_save_in(n) (((Agnodeinfo_t*)AGDATA(n))->save_in) -#define ND_save_out(n) (((Agnodeinfo_t*)AGDATA(n))->save_out) -#define ND_shape(n) (((Agnodeinfo_t*)AGDATA(n))->shape) -#define ND_shape_info(n) (((Agnodeinfo_t*)AGDATA(n))->shape_info) -#define ND_showboxes(n) (((Agnodeinfo_t*)AGDATA(n))->showboxes) -#define ND_state(n) (((Agnodeinfo_t*)AGDATA(n))->state) -#define ND_clustnode(n) (((Agnodeinfo_t*)AGDATA(n))->clustnode) -#define ND_tree_in(n) (((Agnodeinfo_t*)AGDATA(n))->tree_in) -#define ND_tree_out(n) (((Agnodeinfo_t*)AGDATA(n))->tree_out) -#define ND_weight_class(n) (((Agnodeinfo_t*)AGDATA(n))->weight_class) -#define ND_width(n) (((Agnodeinfo_t*)AGDATA(n))->width) -#define ND_xsize(n) (ND_lw(n)+ND_rw(n)) -#define ND_ysize(n) (ND_ht(n)) - - typedef struct Agedgeinfo_t { - Agrec_t hdr; - splines *spl; - port tail_port, head_port; - textlabel_t *label, *head_label, *tail_label, *xlabel; - char edge_type; - char adjacent; /* true for flat edge with adjacent nodes */ - char label_ontop; - unsigned char gui_state; /* Edge state for GUI ops */ - edge_t *to_orig; /* for dot's shapes.c */ - void *alg; - -#ifndef DOT_ONLY - double factor; - double dist; - Ppolyline_t path; -#endif -#ifndef NEATO_ONLY - unsigned char showboxes; - boolean conc_opp_flag; - short xpenalty; - int weight; - int cutvalue, tree_index; - short count; - unsigned short minlen; - edge_t *to_virt; -#endif - } Agedgeinfo_t; - -#define ED_alg(e) (((Agedgeinfo_t*)AGDATA(e))->alg) -#define ED_conc_opp_flag(e) (((Agedgeinfo_t*)AGDATA(e))->conc_opp_flag) -#define ED_count(e) (((Agedgeinfo_t*)AGDATA(e))->count) -#define ED_cutvalue(e) (((Agedgeinfo_t*)AGDATA(e))->cutvalue) -#define ED_edge_type(e) (((Agedgeinfo_t*)AGDATA(e))->edge_type) -#define ED_adjacent(e) (((Agedgeinfo_t*)AGDATA(e))->adjacent) -#define ED_factor(e) (((Agedgeinfo_t*)AGDATA(e))->factor) -#define ED_gui_state(e) (((Agedgeinfo_t*)AGDATA(e))->gui_state) -#define ED_head_label(e) (((Agedgeinfo_t*)AGDATA(e))->head_label) -#define ED_head_port(e) (((Agedgeinfo_t*)AGDATA(e))->head_port) -#define ED_label(e) (((Agedgeinfo_t*)AGDATA(e))->label) -#define ED_xlabel(e) (((Agedgeinfo_t*)AGDATA(e))->xlabel) -#define ED_label_ontop(e) (((Agedgeinfo_t*)AGDATA(e))->label_ontop) -#define ED_minlen(e) (((Agedgeinfo_t*)AGDATA(e))->minlen) -#define ED_path(e) (((Agedgeinfo_t*)AGDATA(e))->path) -#define ED_showboxes(e) (((Agedgeinfo_t*)AGDATA(e))->showboxes) -#define ED_spl(e) (((Agedgeinfo_t*)AGDATA(e))->spl) -#define ED_tail_label(e) (((Agedgeinfo_t*)AGDATA(e))->tail_label) -#define ED_tail_port(e) (((Agedgeinfo_t*)AGDATA(e))->tail_port) -#define ED_to_orig(e) (((Agedgeinfo_t*)AGDATA(e))->to_orig) -#define ED_to_virt(e) (((Agedgeinfo_t*)AGDATA(e))->to_virt) -#define ED_tree_index(e) (((Agedgeinfo_t*)AGDATA(e))->tree_index) -#define ED_xpenalty(e) (((Agedgeinfo_t*)AGDATA(e))->xpenalty) -#define ED_dist(e) (((Agedgeinfo_t*)AGDATA(e))->dist) -#define ED_weight(e) (((Agedgeinfo_t*)AGDATA(e))->weight) - -#define ag_xget(x,a) agxget(x,a) -#define SET_RANKDIR(g,rd) (GD_rankdir2(g) = rd) -#define agfindedge(g,t,h) (agedge(g,t,h,NULL,0)) -#define agfindnode(g,n) (agnode(g,n,0)) -#define agfindgraphattr(g,a) (agattr(g,AGRAPH,a,NULL)) -#define agfindnodeattr(g,a) (agattr(g,AGNODE,a,NULL)) -#define agfindedgeattr(g,a) (agattr(g,AGEDGE,a,NULL)) - - typedef struct { - int flags; - } gvlayout_features_t; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/usershape.h b/internal/ccall/common/usershape.h deleted file mode 100644 index c1fcf4c..0000000 --- a/internal/ccall/common/usershape.h +++ /dev/null @@ -1,57 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef USERSHAPE_H -#define USERSHAPE_H - -#include "cdt.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef enum { FT_NULL, - FT_BMP, FT_GIF, FT_PNG, FT_JPEG, - FT_PDF, FT_PS, FT_EPS, FT_SVG, FT_XML, - FT_RIFF, FT_WEBP, FT_ICO, FT_TIFF - } imagetype_t; - - typedef enum { - IMAGESCALE_FALSE, /* no image scaling */ - IMAGESCALE_TRUE, /* scale image to fit but keep aspect ratio */ - IMAGESCALE_WIDTH, /* scale image width to fit, keep height fixed */ - IMAGESCALE_HEIGHT, /* scale image height to fit, keep width fixed */ - IMAGESCALE_BOTH /* scale image to fit without regard for aspect ratio */ - } imagescale_t; - - typedef struct usershape_s usershape_t; - - struct usershape_s { - Dtlink_t link; - const char *name; - int macro_id; - boolean must_inline; - boolean nocache; - FILE *f; - imagetype_t type; - char *stringtype; - int x, y, w, h, dpi; - void *data; /* data loaded by a renderer */ - size_t datasize; /* size of data (if mmap'ed) */ - void (*datafree)(usershape_t *us); /* renderer's function for freeing data */ - }; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/common/utils.c b/internal/ccall/common/utils.c deleted file mode 100644 index 9acc749..0000000 --- a/internal/ccall/common/utils.c +++ /dev/null @@ -1,2054 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "render.h" -#include "agxbuf.h" -#include "htmltable.h" -#include "entities.h" -#include "logic.h" -#include "gvc.h" - -//#ifdef _WIN32 -//#include "libltdl/lt_system.h" -//#endif - -#include -#include - -/* - * a queue of nodes - */ -nodequeue *new_queue(int sz) -{ - nodequeue *q = NEW(nodequeue); - - if (sz <= 1) - sz = 2; - q->head = q->tail = q->store = N_NEW(sz, node_t *); - q->limit = q->store + sz; - return q; -} - -void free_queue(nodequeue * q) -{ - free(q->store); - free(q); -} - -void enqueue(nodequeue * q, node_t * n) -{ - *(q->tail++) = n; - if (q->tail >= q->limit) - q->tail = q->store; -} - -node_t *dequeue(nodequeue * q) -{ - node_t *n; - if (q->head == q->tail) - n = NULL; - else { - n = *(q->head++); - if (q->head >= q->limit) - q->head = q->store; - } - return n; -} - -int late_int(void *obj, attrsym_t * attr, int def, int low) -{ - char *p; - char *endp; - int rv; - if (attr == NULL) - return def; - p = ag_xget(obj, attr); - if (!p || p[0] == '\0') - return def; - rv = strtol (p, &endp, 10); - if (p == endp) return def; /* invalid int format */ - if (rv < low) return low; - else return rv; -} - -double late_double(void *obj, attrsym_t * attr, double def, double low) -{ - char *p; - char *endp; - double rv; - - if (!attr || !obj) - return def; - p = ag_xget(obj, attr); - if (!p || p[0] == '\0') - return def; - rv = strtod (p, &endp); - if (p == endp) return def; /* invalid double format */ - if (rv < low) return low; - else return rv; -} - -/* get_inputscale: - * Return value for PSinputscale. If this is > 0, it has been set on the - * command line and this value is used. - * Otherwise, we check the graph's inputscale attribute. If this is not set - * or has a bad value, we return -1. - * If the value is 0, we return the default. Otherwise, we return the value. - * Set but negative values are treated like 0. - */ -double get_inputscale (graph_t* g) -{ - double d; - - if (PSinputscale > 0) return PSinputscale; /* command line flag prevails */ - d = late_double(g, agfindgraphattr(g, "inputscale"), -1, 0); - if (d == 0) return POINTS_PER_INCH; - else return d; -} - -char *late_string(void *obj, attrsym_t * attr, char *def) -{ - if (!attr || !obj) - return def; - return agxget(obj, attr); -} - -char *late_nnstring(void *obj, attrsym_t * attr, char *def) -{ - char *rv = late_string(obj, attr, def); - if (!rv || (rv[0] == '\0')) - rv = def; - return rv; -} - -boolean late_bool(void *obj, attrsym_t * attr, int def) -{ - if (attr == NULL) - return def; - - return mapbool(agxget(obj, attr)); -} - -/* union-find */ -node_t *UF_find(node_t * n) -{ - while (ND_UF_parent(n) && (ND_UF_parent(n) != n)) { - if (ND_UF_parent(ND_UF_parent(n))) - ND_UF_parent(n) = ND_UF_parent(ND_UF_parent(n)); - n = ND_UF_parent(n); - } - return n; -} - -node_t *UF_union(node_t * u, node_t * v) -{ - if (u == v) - return u; - if (ND_UF_parent(u) == NULL) { - ND_UF_parent(u) = u; - ND_UF_size(u) = 1; - } else - u = UF_find(u); - if (ND_UF_parent(v) == NULL) { - ND_UF_parent(v) = v; - ND_UF_size(v) = 1; - } else - v = UF_find(v); - if (ND_id(u) > ND_id(v)) { - ND_UF_parent(u) = v; - ND_UF_size(v) += ND_UF_size(u); - } else { - ND_UF_parent(v) = u; - ND_UF_size(u) += ND_UF_size(v); - v = u; - } - return v; -} - -void UF_remove(node_t * u, node_t * v) -{ - assert(ND_UF_size(u) == 1); - ND_UF_parent(u) = u; - ND_UF_size(v) -= ND_UF_size(u); -} - -void UF_singleton(node_t * u) -{ - ND_UF_size(u) = 1; - ND_UF_parent(u) = NULL; - ND_ranktype(u) = NORMAL; -} - -void UF_setname(node_t * u, node_t * v) -{ - assert(u == UF_find(u)); - ND_UF_parent(u) = v; - ND_UF_size(v) += ND_UF_size(u); -} - -pointf coord(node_t * n) -{ - pointf r; - - r.x = POINTS_PER_INCH * ND_pos(n)[0]; - r.y = POINTS_PER_INCH * ND_pos(n)[1]; - return r; -} - -/* from Glassner's Graphics Gems */ -#define W_DEGREE 5 - -/* - * Bezier : - * Evaluate a Bezier curve at a particular parameter value - * Fill in control points for resulting sub-curves if "Left" and - * "Right" are non-null. - * - */ -pointf Bezier(pointf * V, int degree, double t, pointf * Left, pointf * Right) -{ - int i, j; /* Index variables */ - pointf Vtemp[W_DEGREE + 1][W_DEGREE + 1]; - - /* Copy control points */ - for (j = 0; j <= degree; j++) { - Vtemp[0][j] = V[j]; - } - - /* Triangle computation */ - for (i = 1; i <= degree; i++) { - for (j = 0; j <= degree - i; j++) { - Vtemp[i][j].x = - (1.0 - t) * Vtemp[i - 1][j].x + t * Vtemp[i - 1][j + 1].x; - Vtemp[i][j].y = - (1.0 - t) * Vtemp[i - 1][j].y + t * Vtemp[i - 1][j + 1].y; - } - } - - if (Left != NULL) - for (j = 0; j <= degree; j++) - Left[j] = Vtemp[j][0]; - if (Right != NULL) - for (j = 0; j <= degree; j++) - Right[j] = Vtemp[degree - j][j]; - - return (Vtemp[degree][0]); -} - -#ifdef DEBUG -edge_t *debug_getedge(graph_t * g, char *s0, char *s1) -{ - node_t *n0, *n1; - n0 = agfindnode(g, s0); - n1 = agfindnode(g, s1); - if (n0 && n1) - return agfindedge(g, n0, n1); - else - return NULL; -} -Agraphinfo_t* GD_info(graph_t * g) { return ((Agraphinfo_t*)AGDATA(g));} -Agnodeinfo_t* ND_info(node_t * n) { return ((Agnodeinfo_t*)AGDATA(n));} -#endif - -#if !defined(MSWIN32) && !defined(_WIN32) -#include - -#if 0 -static void cleanup(void) -{ - agxbfree(&xb); -} -#endif -#endif - -/* Fgets: - * Read a complete line. - * Return pointer to line, - * or 0 on EOF - */ -char *Fgets(FILE * fp) -{ - static int bsize = 0; - static char *buf; - char *lp; - int len; - - len = 0; - do { - if (bsize - len < BUFSIZ) { - bsize += BUFSIZ; - buf = grealloc(buf, bsize); - } - lp = fgets(buf + len, bsize - len, fp); - if (lp == 0) - break; - len += strlen(lp); /* since lp != NULL, len > 0 */ - } while (buf[len - 1] != '\n'); - - if (len > 0) - return buf; - else - return 0; -} - -/* safefile: - * Check to make sure it is okay to read in files. - * It returns NULL if the filename is trivial. - * - * If the application has set the SERVER_NAME environment variable, - * this indicates it is web-active. In this case, it requires that the GV_FILE_PATH - * environment variable be set. This gives the legal directories - * from which files may be read. safefile then derives the rightmost component - * of filename, where components are separated by a slash, backslash or colon, - * It then checks for the existence of a file consisting of a directory from - * GV_FILE_PATH followed by the rightmost component of filename. It returns the - * first such found, or NULL otherwise. - * The filename returned is thus - * Gvfilepath concatenated with the last component of filename, - * where a component is determined by a slash, backslash or colon - * character. - * - * If filename contains multiple components, the user is - * warned, once, that everything to the left is ignored. - * - * For non-server applications, we use the path list in Gvimagepath to - * resolve relative pathnames. - * - * N.B. safefile uses a fixed buffer, so functions using it should use the - * value immediately or make a copy. - */ -#ifdef _WIN32 -#define PATHSEP ";" -#else -#define PATHSEP ":" -#endif - -static char** mkDirlist (const char* list, int* maxdirlen) -{ - int cnt = 0; - char* s = strdup (list); - char* dir; - char** dirs = NULL; - int maxlen = 0; - - for (dir = strtok (s, PATHSEP); dir; dir = strtok (NULL, PATHSEP)) { - dirs = ALLOC (cnt+2,dirs,char*); - dirs[cnt++] = dir; - maxlen = MAX(maxlen, strlen (dir)); - } - dirs[cnt] = NULL; - *maxdirlen = maxlen; - return dirs; -} - -static char* findPath (char** dirs, int maxdirlen, const char* str) -{ - static char *safefilename = NULL; - char** dp; - - /* allocate a buffer that we are sure is big enough - * +1 for null character. - * +1 for directory separator character. - */ - safefilename = realloc(safefilename, (maxdirlen + strlen(str) + 2)); - - for (dp = dirs; *dp; dp++) { - sprintf (safefilename, "%s%s%s", *dp, DIRSEP, str); - if (access (safefilename, R_OK) == 0) - return safefilename; - } - return NULL; -} - -const char *safefile(const char *filename) -{ - static boolean onetime = TRUE; - static char *pathlist = NULL; - static int maxdirlen; - static char** dirs; - const char *str, *p; - - if (!filename || !filename[0]) - return NULL; - - if (HTTPServerEnVar) { /* If used as a server */ - /* - * If we are running in an http server we allow - * files only from the directory specified in - * the GV_FILE_PATH environment variable. - */ - if (!Gvfilepath || (*Gvfilepath == '\0')) { - if (onetime) { - agerr(AGWARN, - "file loading is disabled because the environment contains SERVER_NAME=\"%s\"\n" - "and the GV_FILE_PATH variable is unset or empty.\n", - HTTPServerEnVar); - onetime = FALSE; - } - return NULL; - } - if (!pathlist) { - dirs = mkDirlist (Gvfilepath, &maxdirlen); - pathlist = Gvfilepath; - } - - str = filename; - if ((p = strrchr(str, '/'))) - str = ++p; - if ((p = strrchr(str, '\\'))) - str = ++p; - if ((p = strrchr(str, ':'))) - str = ++p; - - if (onetime && str != filename) { - agerr(AGWARN, "Path provided to file: \"%s\" has been ignored" - " because files are only permitted to be loaded from the directories in \"%s\"" - " when running in an http server.\n", filename, Gvfilepath); - onetime = FALSE; - } - - return findPath (dirs, maxdirlen, str); - } - - if (pathlist != Gvimagepath) { - if (dirs) { - free (dirs[0]); - free (dirs); - dirs = NULL; - } - pathlist = Gvimagepath; - if (pathlist && *pathlist) - dirs = mkDirlist (pathlist, &maxdirlen); - } - - if ((*filename == DIRSEP[0]) || !dirs) - return filename; - - return findPath (dirs, maxdirlen, filename); -} - -int maptoken(char *p, char **name, int *val) -{ - int i; - char *q; - - for (i = 0; (q = name[i]) != 0; i++) - if (p && streq(p, q)) - break; - return val[i]; -} - -boolean mapBool(char *p, boolean dflt) -{ - if (!p || (*p == '\0')) - return dflt; - if (!strcasecmp(p, "false")) - return FALSE; - if (!strcasecmp(p, "no")) - return FALSE; - if (!strcasecmp(p, "true")) - return TRUE; - if (!strcasecmp(p, "yes")) - return TRUE; - if (isdigit(*p)) - return atoi(p); - else - return dflt; -} - -boolean mapbool(char *p) -{ - return mapBool (p, FALSE); -} - -pointf dotneato_closest(splines * spl, pointf pt) -{ - int i, j, k, besti, bestj; - double bestdist2, d2, dlow2, dhigh2; /* squares of distances */ - double low, high, t; - pointf c[4], pt2; - bezier bz; - - besti = bestj = -1; - bestdist2 = 1e+38; - for (i = 0; i < spl->size; i++) { - bz = spl->list[i]; - for (j = 0; j < bz.size; j++) { - pointf b; - - b.x = bz.list[j].x; - b.y = bz.list[j].y; - d2 = DIST2(b, pt); - if ((bestj == -1) || (d2 < bestdist2)) { - besti = i; - bestj = j; - bestdist2 = d2; - } - } - } - - bz = spl->list[besti]; - /* Pick best Bezier. If bestj is the last point in the B-spline, decrement. - * Then set j to be the first point in the corresponding Bezier by dividing - * then multiplying be 3. Thus, 0,1,2 => 0; 3,4,5 => 3, etc. - */ - if (bestj == bz.size-1) - bestj--; - j = 3*(bestj / 3); - for (k = 0; k < 4; k++) { - c[k].x = bz.list[j + k].x; - c[k].y = bz.list[j + k].y; - } - low = 0.0; - high = 1.0; - dlow2 = DIST2(c[0], pt); - dhigh2 = DIST2(c[3], pt); - do { - t = (low + high) / 2.0; - pt2 = Bezier(c, 3, t, NULL, NULL); - if (fabs(dlow2 - dhigh2) < 1.0) - break; - if (fabs(high - low) < .00001) - break; - if (dlow2 < dhigh2) { - high = t; - dhigh2 = DIST2(pt2, pt); - } else { - low = t; - dlow2 = DIST2(pt2, pt); - } - } while (1); - return pt2; -} - -pointf spline_at_y(splines * spl, double y) -{ - int i, j; - double low, high, d, t; - pointf c[4], p; - static bezier bz; - -/* this caching seems to prevent p.x from getting set from bz.list[0].x - - optimizer problem ? */ - -#if 0 - static splines *mem = NULL; - - if (mem != spl) { - mem = spl; -#endif - for (i = 0; i < spl->size; i++) { - bz = spl->list[i]; - if (BETWEEN(bz.list[bz.size - 1].y, y, bz.list[0].y)) - break; - } -#if 0 - } -#endif - if (y > bz.list[0].y) - p = bz.list[0]; - else if (y < bz.list[bz.size - 1].y) - p = bz.list[bz.size - 1]; - else { - for (i = 0; i < bz.size; i += 3) { - for (j = 0; j < 3; j++) { - if ((bz.list[i + j].y <= y) && (y <= bz.list[i + j + 1].y)) - break; - if ((bz.list[i + j].y >= y) && (y >= bz.list[i + j + 1].y)) - break; - } - if (j < 3) - break; - } - assert(i < bz.size); - for (j = 0; j < 4; j++) { - c[j].x = bz.list[i + j].x; - c[j].y = bz.list[i + j].y; - /* make the spline be monotonic in Y, awful but it works for now */ - if ((j > 0) && (c[j].y > c[j - 1].y)) - c[j].y = c[j - 1].y; - } - low = 0.0; - high = 1.0; - do { - t = (low + high) / 2.0; - p = Bezier(c, 3, t, NULL, NULL); - d = p.y - y; - if (ABS(d) <= 1) - break; - if (d < 0) - high = t; - else - low = t; - } while (1); - } - p.y = y; - return p; -} - -pointf neato_closest(splines * spl, pointf p) -{ -/* this is a stub so that we can share a common emit.c between dot and neato */ - - return spline_at_y(spl, p.y); -} - -static int Tflag; -void gvToggle(int s) -{ - Tflag = !Tflag; -#if !defined(MSWIN32) && !defined(_WIN32) - signal(SIGUSR1, gvToggle); -#endif -} - -int test_toggle() -{ - return Tflag; -} - -struct fontinfo { - double fontsize; - char *fontname; - char *fontcolor; -}; - -void common_init_node(node_t * n) -{ - struct fontinfo fi; - char *str; - ND_width(n) = - late_double(n, N_width, DEFAULT_NODEWIDTH, MIN_NODEWIDTH); - ND_height(n) = - late_double(n, N_height, DEFAULT_NODEHEIGHT, MIN_NODEHEIGHT); - ND_shape(n) = - bind_shape(late_nnstring(n, N_shape, DEFAULT_NODESHAPE), n); - str = agxget(n, N_label); - fi.fontsize = late_double(n, N_fontsize, DEFAULT_FONTSIZE, MIN_FONTSIZE); - fi.fontname = late_nnstring(n, N_fontname, DEFAULT_FONTNAME); - fi.fontcolor = late_nnstring(n, N_fontcolor, DEFAULT_COLOR); - ND_label(n) = make_label((void*)n, str, - ((aghtmlstr(str) ? LT_HTML : LT_NONE) | ( (shapeOf(n) == SH_RECORD) ? LT_RECD : LT_NONE)), - fi.fontsize, fi.fontname, fi.fontcolor); - if (N_xlabel && (str = agxget(n, N_xlabel)) && (str[0])) { - ND_xlabel(n) = make_label((void*)n, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - fi.fontsize, fi.fontname, fi.fontcolor); - GD_has_labels(agraphof(n)) |= NODE_XLABEL; - } - - ND_showboxes(n) = late_int(n, N_showboxes, 0, 0); - ND_shape(n)->fns->initfn(n); -} - -static void initFontEdgeAttr(edge_t * e, struct fontinfo *fi) -{ - fi->fontsize = late_double(e, E_fontsize, DEFAULT_FONTSIZE, MIN_FONTSIZE); - fi->fontname = late_nnstring(e, E_fontname, DEFAULT_FONTNAME); - fi->fontcolor = late_nnstring(e, E_fontcolor, DEFAULT_COLOR); -} - -static void -initFontLabelEdgeAttr(edge_t * e, struct fontinfo *fi, - struct fontinfo *lfi) -{ - if (!fi->fontname) initFontEdgeAttr(e, fi); - lfi->fontsize = late_double(e, E_labelfontsize, fi->fontsize, MIN_FONTSIZE); - lfi->fontname = late_nnstring(e, E_labelfontname, fi->fontname); - lfi->fontcolor = late_nnstring(e, E_labelfontcolor, fi->fontcolor); -} - -/* noClip: - * Return true if head/tail end of edge should not be clipped - * to node. - */ -static boolean -noClip(edge_t *e, attrsym_t* sym) -{ - char *str; - boolean rv = FALSE; - - if (sym) { /* mapbool isn't a good fit, because we want "" to mean true */ - str = agxget(e,sym); - if (str && str[0]) rv = !mapbool(str); - else rv = FALSE; - } - return rv; -} - -/*chkPort: - */ -static port -chkPort (port (*pf)(node_t*, char*, char*), node_t* n, char* s) -{ - port pt; - char* cp=NULL; - if(s) - cp= strchr(s,':'); - if (cp) { - *cp = '\0'; - pt = pf(n, s, cp+1); - *cp = ':'; - pt.name = cp+1; - } - else { - pt = pf(n, s, NULL); - pt.name = s; - } - return pt; -} - -/* return true if edge has label */ -int common_init_edge(edge_t * e) -{ - char *str; - int r = 0; - struct fontinfo fi; - struct fontinfo lfi; - graph_t *sg = agraphof(agtail(e)); - - fi.fontname = NULL; - lfi.fontname = NULL; - if (E_label && (str = agxget(e, E_label)) && (str[0])) { - r = 1; - initFontEdgeAttr(e, &fi); - ED_label(e) = make_label((void*)e, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - fi.fontsize, fi.fontname, fi.fontcolor); - GD_has_labels(sg) |= EDGE_LABEL; - ED_label_ontop(e) = - mapbool(late_string(e, E_label_float, "false")); - } - - if (E_xlabel && (str = agxget(e, E_xlabel)) && (str[0])) { - if (!fi.fontname) - initFontEdgeAttr(e, &fi); - ED_xlabel(e) = make_label((void*)e, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - fi.fontsize, fi.fontname, fi.fontcolor); - GD_has_labels(sg) |= EDGE_XLABEL; - } - - - /* vladimir */ - if (E_headlabel && (str = agxget(e, E_headlabel)) && (str[0])) { - initFontLabelEdgeAttr(e, &fi, &lfi); - ED_head_label(e) = make_label((void*)e, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - lfi.fontsize, lfi.fontname, lfi.fontcolor); - GD_has_labels(sg) |= HEAD_LABEL; - } - if (E_taillabel && (str = agxget(e, E_taillabel)) && (str[0])) { - if (!lfi.fontname) - initFontLabelEdgeAttr(e, &fi, &lfi); - ED_tail_label(e) = make_label((void*)e, str, (aghtmlstr(str) ? LT_HTML : LT_NONE), - lfi.fontsize, lfi.fontname, lfi.fontcolor); - GD_has_labels(sg) |= TAIL_LABEL; - } - /* end vladimir */ - - /* We still accept ports beginning with colons but this is deprecated - * That is, we allow tailport = ":abc" as well as the preferred - * tailport = "abc". - */ - str = agget(e, TAIL_ID); - /* libgraph always defines tailport/headport; libcgraph doesn't */ - if (!str) str = ""; - if (str && str[0]) - ND_has_port(agtail(e)) = TRUE; - ED_tail_port(e) = chkPort (ND_shape(agtail(e))->fns->portfn, agtail(e), str); - if (noClip(e, E_tailclip)) - ED_tail_port(e).clip = FALSE; - str = agget(e, HEAD_ID); - /* libgraph always defines tailport/headport; libcgraph doesn't */ - if (!str) str = ""; - if (str && str[0]) - ND_has_port(aghead(e)) = TRUE; - ED_head_port(e) = chkPort(ND_shape(aghead(e))->fns->portfn, aghead(e), str); - if (noClip(e, E_headclip)) - ED_head_port(e).clip = FALSE; - - return r; -} - -/* addLabelBB: - */ -static boxf addLabelBB(boxf bb, textlabel_t * lp, boolean flipxy) -{ - double width, height; - pointf p = lp->pos; - double min, max; - - if (flipxy) { - height = lp->dimen.x; - width = lp->dimen.y; - } - else { - width = lp->dimen.x; - height = lp->dimen.y; - } - min = p.x - width / 2.; - max = p.x + width / 2.; - if (min < bb.LL.x) - bb.LL.x = min; - if (max > bb.UR.x) - bb.UR.x = max; - - min = p.y - height / 2.; - max = p.y + height / 2.; - if (min < bb.LL.y) - bb.LL.y = min; - if (max > bb.UR.y) - bb.UR.y = max; - - return bb; -} - -/* polyBB: - * Compute the bounding box of a polygon. - * We only need to use the outer periphery. - */ -boxf -polyBB (polygon_t* poly) -{ - int i, sides = poly->sides; - int peris = MAX(poly->peripheries,1); - pointf* verts = poly->vertices + (peris-1)*sides; - boxf bb; - - bb.LL = bb.UR = verts[0]; - for (i = 1; i < sides; i++) { - bb.LL.x = MIN(bb.LL.x,verts[i].x); - bb.LL.y = MIN(bb.LL.y,verts[i].y); - bb.UR.x = MAX(bb.UR.x,verts[i].x); - bb.UR.y = MAX(bb.UR.y,verts[i].y); - } - return bb; -} - -/* updateBB: - * Reset graph's bounding box to include bounding box of the given label. - * Assume the label's position has been set. - */ -void updateBB(graph_t * g, textlabel_t * lp) -{ - GD_bb(g) = addLabelBB(GD_bb(g), lp, GD_flip(g)); -} - -/* compute_bb: - * Compute bounding box of g using nodes, splines, and clusters. - * Assumes bb of clusters already computed. - * store in GD_bb. - */ -void compute_bb(graph_t * g) -{ - node_t *n; - edge_t *e; - boxf b, bb; - boxf BF; - pointf ptf, s2; - int i, j; - - if ((agnnodes(g) == 0) && (GD_n_cluster(g) ==0)) { - bb.LL = pointfof(0, 0); - bb.UR = pointfof(0, 0); - return; - } - - bb.LL = pointfof(INT_MAX, INT_MAX); - bb.UR = pointfof(-INT_MAX, -INT_MAX); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ptf = coord(n); - s2.x = ND_xsize(n) / 2.0; - s2.y = ND_ysize(n) / 2.0; - b.LL = sub_pointf(ptf, s2); - b.UR = add_pointf(ptf, s2); - - EXPANDBB(bb,b); - if (ND_xlabel(n) && ND_xlabel(n)->set) { - bb = addLabelBB(bb, ND_xlabel(n), GD_flip(g)); - } - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (ED_spl(e) == 0) - continue; - for (i = 0; i < ED_spl(e)->size; i++) { - for (j = 0; j < (((Agedgeinfo_t*)AGDATA(e))->spl)->list[i].size; j++) { - ptf = ED_spl(e)->list[i].list[j]; - EXPANDBP(bb,ptf); - } - } - if (ED_label(e) && ED_label(e)->set) { - bb = addLabelBB(bb, ED_label(e), GD_flip(g)); - } - if (ED_head_label(e) && ED_head_label(e)->set) { - bb = addLabelBB(bb, ED_head_label(e), GD_flip(g)); - } - if (ED_tail_label(e) && ED_tail_label(e)->set) { - bb = addLabelBB(bb, ED_tail_label(e), GD_flip(g)); - } - if (ED_xlabel(e) && ED_xlabel(e)->set) { - bb = addLabelBB(bb, ED_xlabel(e), GD_flip(g)); - } - } - } - - for (i = 1; i <= GD_n_cluster(g); i++) { - B2BF(GD_bb(GD_clust(g)[i]), BF); - EXPANDBB(bb,BF); - } - if (GD_label(g) && GD_label(g)->set) { - bb = addLabelBB(bb, GD_label(g), GD_flip(g)); - } - - GD_bb(g) = bb; -} - -int is_a_cluster (Agraph_t* g) -{ - return ((g == g->root) || (!strncasecmp(agnameof(g), "cluster", 7))); -} - -/* setAttr: - * Sets object's name attribute to the given value. - * Creates the attribute if not already set. - */ -Agsym_t *setAttr(graph_t * g, void *obj, char *name, char *value, - Agsym_t * ap) -{ - if (ap == NULL) { - switch (agobjkind(obj)) { - case AGRAPH: - ap = agattr(g, AGRAPH,name, ""); - break; - case AGNODE: - ap = agattr(g,AGNODE, name, ""); - break; - case AGEDGE: - ap = agattr(g,AGEDGE, name, ""); - break; - } - } - agxset(obj, ap, value); - return ap; -} - -/* clustNode: - * Generate a special cluster node representing the end node - * of an edge to the cluster cg. n is a node whose name is the same - * as the cluster cg. clg is the subgraph of all of - * the original nodes, which will be deleted later. - */ -static node_t *clustNode(node_t * n, graph_t * cg, agxbuf * xb, - graph_t * clg) -{ - node_t *cn; - static int idx = 0; - char num[100]; - - agxbput(xb, "__"); - sprintf(num, "%d", idx++); - agxbput(xb, num); - agxbputc(xb, ':'); - agxbput(xb, agnameof(cg)); - - cn = agnode(agroot(cg), agxbuse(xb), 1); - agbindrec(cn, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - - SET_CLUST_NODE(cn); - agsubnode(cg,cn,1); - //aginsert(cg, cn); - agsubnode(clg,n,1); - //aginsert(clg, n); - - /* set attributes */ - N_label = setAttr(agraphof(cn), cn, "label", "", N_label); - N_style = setAttr(agraphof(cn), cn, "style", "invis", N_style); - N_shape = setAttr(agraphof(cn), cn, "shape", "box", N_shape); - /* N_width = setAttr (cn->graph, cn, "width", "0.0001", N_width); */ - - return cn; -} - -typedef struct { - Dtlink_t link; /* cdt data */ - void *p[2]; /* key */ - node_t *t; - node_t *h; -} item; - -static int cmpItem(Dt_t * d, void *p1[], void *p2[], Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - - if (p1[0] < p2[0]) - return -1; - else if (p1[0] > p2[0]) - return 1; - else if (p1[1] < p2[1]) - return -1; - else if (p1[1] > p2[1]) - return 1; - else - return 0; -} - -/* newItem: - */ -static void *newItem(Dt_t * d, item * objp, Dtdisc_t * disc) -{ - item *newp = NEW(item); - - NOTUSED(disc); - newp->p[0] = objp->p[0]; - newp->p[1] = objp->p[1]; - newp->t = objp->t; - newp->h = objp->h; - - return newp; -} - -/* freeItem: - */ -static void freeItem(Dt_t * d, item * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static Dtdisc_t mapDisc = { - offsetof(item, p), - sizeof(2 * sizeof(void *)), - offsetof(item, link), - (Dtmake_f) newItem, - (Dtfree_f) freeItem, - (Dtcompar_f) cmpItem, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* cloneEdge: - * Make a copy of e in e's graph but using ct and ch as nodes - */ -static edge_t *cloneEdge(edge_t * e, node_t * ct, node_t * ch) -{ - graph_t *g = agraphof(ct); - edge_t *ce = agedge(g, ct, ch,NULL,1); - agbindrec(ce, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - agcopyattr(e, ce); - - return ce; -} - -/* insertEdge: - */ -static void insertEdge(Dt_t * map, void *t, void *h, edge_t * e) -{ - item dummy; - - dummy.p[0] = t; - dummy.p[1] = h; - dummy.t = agtail(e); - dummy.h = aghead(e); - dtinsert(map, &dummy); - - dummy.p[0] = h; - dummy.p[1] = t; - dummy.t = aghead(e); - dummy.h = agtail(e); - dtinsert(map, &dummy); -} - -/* mapEdge: - * Check if we already have cluster edge corresponding to t->h, - * and return it. - */ -static item *mapEdge(Dt_t * map, edge_t * e) -{ - void *key[2]; - - key[0] = agtail(e); - key[1] = aghead(e); - return (item *) dtmatch(map, &key); -} - -/* checkCompound: - * If endpoint names a cluster, mark for temporary deletion and create - * special node and insert into cluster. Then clone the edge. Real edge - * will be deleted when we delete the original node. - * Invariant: new edge has same sense as old. That is, given t->h with - * t and h mapped to ct and ch, the new edge is ct->ch. - * - * In the current model, we create a cluster node for each cluster edge - * between the cluster and some other node or cluster, treating the - * cluster node as a port on the cluster. This should help with better - * routing to avoid edge crossings. At present, this is not implemented, - * so we could use a simpler model in which we create a single cluster - * node for each cluster used in a cluster edge. - */ -#define MAPC(n) (strncmp(agnameof(n),"cluster",7)?NULL:findCluster(cmap,agnameof(n))) - - -static void -checkCompound(edge_t * e, graph_t * clg, agxbuf * xb, Dt_t * map, Dt_t* cmap) -{ - graph_t *tg; - graph_t *hg; - node_t *cn; - node_t *cn1; - node_t *t = agtail(e); - node_t *h = aghead(e); - edge_t *ce; - item *ip; - - if (IS_CLUST_NODE(h)) return; - tg = MAPC(t); - hg = MAPC(h); - if (!tg && !hg) - return; - if (tg == hg) { - agerr(AGWARN, "cluster cycle %s -- %s not supported\n", agnameof(t), - agnameof(t)); - return; - } - ip = mapEdge(map, e); - if (ip) { - cloneEdge(e, ip->t, ip->h); - return; - } - - if (hg) { - if (tg) { - if (agcontains(hg, tg)) { - agerr(AGWARN, "tail cluster %s inside head cluster %s\n", - agnameof(tg), agnameof(hg)); - return; - } - if (agcontains(tg, hg)) { - agerr(AGWARN, "head cluster %s inside tail cluster %s\n", - agnameof(hg),agnameof(tg)); - return; - } - cn = clustNode(t, tg, xb, clg); - cn1 = clustNode(h, hg, xb, clg); - ce = cloneEdge(e, cn, cn1); - insertEdge(map, t, h, ce); - } else { - if (agcontains(hg, t)) { - agerr(AGWARN, "tail node %s inside head cluster %s\n", - agnameof(t), agnameof(hg)); - return; - } - cn = clustNode(h, hg, xb, clg); - ce = cloneEdge(e, t, cn); - insertEdge(map, t, h, ce); - } - } else { - if (agcontains(tg, h)) { - agerr(AGWARN, "head node %s inside tail cluster %s\n", agnameof(h), - agnameof(tg)); - return; - } - cn = clustNode(t, tg, xb, clg); - ce = cloneEdge(e, cn, h); - insertEdge(map, t, h, ce); - } -} - -/* processClusterEdges: - * Look for cluster edges. Replace cluster edge endpoints - * corresponding to a cluster with special cluster nodes. - * Delete original nodes. - * Return 0 if no cluster edges; 1 otherwise. - */ -int processClusterEdges(graph_t * g) -{ - int rv; - node_t *n; - node_t *nxt; - edge_t *e; - graph_t *clg; - agxbuf xb; - Dt_t *map; - Dt_t *cmap = mkClustMap (g); - unsigned char buf[SMALLBUF]; - - map = dtopen(&mapDisc, Dtoset); - clg = agsubg(g, "__clusternodes",1); - agbindrec(clg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - agxbinit(&xb, SMALLBUF, buf); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (IS_CLUST_NODE(n)) continue; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - checkCompound(e, clg, &xb, map, cmap); - } - } - agxbfree(&xb); - dtclose(map); - rv = agnnodes(clg); - for (n = agfstnode(clg); n; n = nxt) { - nxt = agnxtnode(clg, n); - agdelete(g, n); - } - agclose(clg); - if (rv) - SET_CLUST_EDGE(g); - dtclose(cmap); - return rv; -} - -/* mapN: - * Convert cluster nodes back to ordinary nodes - * If n is already ordinary, return it. - * Otherwise, we know node's name is "__i:xxx" - * where i is some number and xxx is the nodes's original name. - * Create new node of name xxx if it doesn't exist and add n to clg - * for later deletion. - */ -static node_t *mapN(node_t * n, graph_t * clg) -{ - node_t *nn; - char *name; - graph_t *g = agraphof(n); - Agsym_t *sym; - - if (!(IS_CLUST_NODE(n))) - return n; - agsubnode(clg, n, 1); - name = strchr(agnameof(n), ':'); - assert(name); - name++; - if ((nn = agfindnode(g, name))) - return nn; - nn = agnode(g, name, 1); - agbindrec(nn, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - - /* Set all attributes to default */ - for (sym = agnxtattr(g, AGNODE, NULL); sym; (sym = agnxtattr(g, AGNODE, sym))) { - if (agxget(nn, sym) != sym->defval) - agxset(nn, sym, sym->defval); - } - return nn; -} - -static void undoCompound(edge_t * e, graph_t * clg) -{ - node_t *t = agtail(e); - node_t *h = aghead(e); - node_t *ntail; - node_t *nhead; - edge_t* ce; - - if (!(IS_CLUST_NODE(t) || IS_CLUST_NODE(h))) - return; - ntail = mapN(t, clg); - nhead = mapN(h, clg); - ce = cloneEdge(e, ntail, nhead); - - /* transfer drawing information */ - ED_spl(ce) = ED_spl(e); - ED_spl(e) = NULL; - ED_label(ce) = ED_label(e); - ED_label(e) = NULL; - ED_xlabel(ce) = ED_xlabel(e); - ED_xlabel(e) = NULL; - ED_head_label(ce) = ED_head_label(e); - ED_head_label(e) = NULL; - ED_tail_label(ce) = ED_tail_label(e); - ED_tail_label(e) = NULL; - gv_cleanup_edge(e); -} - -/* undoClusterEdges: - * Replace cluster nodes with originals. Make sure original has - * no attributes. Replace original edges. Delete cluster nodes, - * which will also delete cluster edges. - */ -void undoClusterEdges(graph_t * g) -{ - node_t *n; - node_t *nextn; - edge_t *e; - graph_t *clg; - - clg = agsubg(g, "__clusternodes",1); - agbindrec(clg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - undoCompound(e, clg); - } - } - for (n = agfstnode(clg); n; n = nextn) { - nextn = agnxtnode(clg, n); - gv_cleanup_node(n); - agdelete(g, n); - } - agclose(clg); -} - -/* safe_dcl: - * Find the attribute belonging to graph g for objects like obj - * with given name. If one does not exist, create it with the - * default value def. - */ -attrsym_t* -safe_dcl(graph_t * g, int obj_kind, char *name, char *def) -{ - attrsym_t *a = agattr(g,obj_kind,name, NULL); - if (!a) /* attribute does not exist */ - a = agattr(g,obj_kind,name,def); - return a; -} - -static int comp_entities(const void *e1, const void *e2) { - return strcmp(((struct entities_s *)e1)->name, ((struct entities_s *)e2)->name); -} - -#define MAXENTLEN 8 - -/* scanEntity: - * Scan non-numeric entity, convert to &#...; form and store in xbuf. - * t points to first char after '&'. Return after final semicolon. - * If unknown, we return t and let libexpat flag the error. - * */ -char* scanEntity (char* t, agxbuf* xb) -{ - char* endp = strchr (t, ';'); - struct entities_s key, *res; - int len; - char buf[MAXENTLEN+1]; - - agxbputc(xb, '&'); - if (!endp) return t; - if (((len = endp-t) > MAXENTLEN) || (len < 2)) return t; - strncpy (buf, t, len); - buf[len] = '\0'; - key.name = buf; - res = bsearch(&key, entities, NR_OF_ENTITIES, - sizeof(entities[0]), comp_entities); - if (!res) return t; - sprintf (buf, "%d", res->value); - agxbputc(xb, '#'); - agxbput(xb, buf); - agxbputc(xb, ';'); - return (endp+1); -} - - -/* htmlEntity: - * Check for an HTML entity for a special character. - * Assume *s points to first byte after '&'. - * If successful, return the corresponding value and update s to - * point after the terminating ';'. - * On failure, return 0 and leave s unchanged. - */ -static int -htmlEntity (char** s) -{ - char *p; - struct entities_s key, *res; - char entity_name_buf[ENTITY_NAME_LENGTH_MAX+1]; - unsigned char* str = *(unsigned char**)s; - unsigned int byte; - int i, n = 0; - - byte = *str; - if (byte == '#') { - byte = *(str + 1); - if (byte == 'x' || byte == 'X') { - for (i = 2; i < 8; i++) { - byte = *(str + i); - if (byte >= 'A' && byte <= 'F') - byte = byte - 'A' + 10; - else if (byte >= 'a' && byte <= 'f') - byte = byte - 'a' + 10; - else if (byte >= '0' && byte <= '9') - byte = byte - '0'; - else - break; - n = (n * 16) + byte; - } - } - else { - for (i = 1; i < 8; i++) { - byte = *(str + i); - if (byte >= '0' && byte <= '9') - n = (n * 10) + (byte - '0'); - else - break; - } - } - if (byte == ';') { - str += i+1; - } - else { - n = 0; - } - } - else { - key.name = p = entity_name_buf; - for (i = 0; i < ENTITY_NAME_LENGTH_MAX; i++) { - byte = *(str + i); - if (byte == '\0') break; - if (byte == ';') { - *p++ = '\0'; - res = bsearch(&key, entities, NR_OF_ENTITIES, - sizeof(entities[0]), *comp_entities); - if (res) { - n = res->value; - str += i+1; - } - break; - } - *p++ = byte; - } - } - *s = (char*)str; - return n; -} - -static unsigned char -cvtAndAppend (unsigned char c, agxbuf* xb) -{ - char buf[2]; - char* s; - char* p; - int len; - - buf[0] = c; - buf[1] = '\0'; - - p = s = latin1ToUTF8 (buf); - len = strlen(s); - while (len-- > 1) - agxbputc(xb, *p++); - c = *p; - free (s); - return c; -} - -/* htmlEntityUTF8: - * substitute html entities like: { and: & with the UTF8 equivalents - * check for invalid utf8. If found, treat a single byte as Latin-1, convert it to - * utf8 and warn the user. - */ -char* htmlEntityUTF8 (char* s, graph_t* g) -{ - static graph_t* lastg; - static boolean warned; - char* ns; - agxbuf xb; - unsigned char buf[BUFSIZ]; - unsigned char c; - unsigned int v; - - int uc; - int ui; - - if (lastg != g) { - lastg = g; - warned = 0; - } - - agxbinit(&xb, BUFSIZ, buf); - - while ((c = *(unsigned char*)s++)) { - if (c < 0xC0) - /* - * Handles properly formed UTF-8 characters between - * 0x01 and 0x7F. Also treats \0 and naked trail - * bytes 0x80 to 0xBF as valid characters representing - * themselves. - */ - uc = 0; - else if (c < 0xE0) - uc = 1; - else if (c < 0xF0) - uc = 2; - else if (c < 0xF8) - uc = 3; - else { - uc = -1; - if (!warned) { - agerr(AGWARN, "UTF8 codes > 4 bytes are not currently supported (graph %s) - treated as Latin-1. Perhaps \"-Gcharset=latin1\" is needed?\n", agnameof(g)); - warned = 1; - } - c = cvtAndAppend (c, &xb); - } - - if (uc == 0 && c == '&') { - /* replace html entity sequences like: & - * and: { with their UTF8 equivalents */ - v = htmlEntity (&s); - if (v) { - if (v < 0x7F) /* entity needs 1 byte in UTF8 */ - c = v; - else if (v < 0x07FF) { /* entity needs 2 bytes in UTF8 */ - agxbputc(&xb, (v >> 6) | 0xC0); - c = (v & 0x3F) | 0x80; - } - else { /* entity needs 3 bytes in UTF8 */ - agxbputc(&xb, (v >> 12) | 0xE0); - agxbputc(&xb, ((v >> 6) & 0x3F) | 0x80); - c = (v & 0x3F) | 0x80; - } - } - } - else /* copy n byte UTF8 characters */ - for (ui = 0; ui < uc; ++ui) - if ((*s & 0xC0) == 0x80) { - agxbputc(&xb, c); - c = *(unsigned char*)s++; - } - else { - if (!warned) { - agerr(AGWARN, "Invalid %d-byte UTF8 found in input of graph %s - treated as Latin-1. Perhaps \"-Gcharset=latin1\" is needed?\n", uc + 1, agnameof(g)); - warned = 1; - } - c = cvtAndAppend (c, &xb); - break; - } - agxbputc(&xb, c); - } - ns = strdup (agxbuse(&xb)); - agxbfree(&xb); - return ns; -} - -/* latin1ToUTF8: - * Converts string from Latin1 encoding to utf8 - * Also translates HTML entities. - * - */ -char* latin1ToUTF8 (char* s) -{ - char* ns; - agxbuf xb; - unsigned char buf[BUFSIZ]; - unsigned int v; - - agxbinit(&xb, BUFSIZ, buf); - - /* Values are either a byte (<= 256) or come from htmlEntity, whose - * values are all less than 0x07FF, so we need at most 3 bytes. - */ - while ((v = *(unsigned char*)s++)) { - if (v == '&') { - v = htmlEntity (&s); - if (!v) v = '&'; - } - if (v < 0x7F) - agxbputc(&xb, v); - else if (v < 0x07FF) { - agxbputc(&xb, (v >> 6) | 0xC0); - agxbputc(&xb, (v & 0x3F) | 0x80); - } - else { - agxbputc(&xb, (v >> 12) | 0xE0); - agxbputc(&xb, ((v >> 6) & 0x3F) | 0x80); - agxbputc(&xb, (v & 0x3F) | 0x80); - } - } - ns = strdup (agxbuse(&xb)); - agxbfree(&xb); - return ns; -} - -/* utf8ToLatin1: - * Converts string from utf8 encoding to Latin1 - * Note that it does not attempt to reproduce HTML entities. - * We assume the input string comes from latin1ToUTF8. - */ -char* -utf8ToLatin1 (char* s) -{ - char* ns; - agxbuf xb; - unsigned char buf[BUFSIZ]; - unsigned char c; - unsigned char outc; - - agxbinit(&xb, BUFSIZ, buf); - - while ((c = *(unsigned char*)s++)) { - if (c < 0x7F) - agxbputc(&xb, c); - else { - outc = (c & 0x03) << 6; - c = *(unsigned char*)s++; - outc = outc | (c & 0x3F); - agxbputc(&xb, outc); - } - } - ns = strdup (agxbuse(&xb)); - agxbfree(&xb); - return ns; -} - -boolean overlap_node(node_t *n, boxf b) -{ - inside_t ictxt; - pointf p; - - if (! OVERLAP(b, ND_bb(n))) - return FALSE; - -/* FIXME - need to do something better about CLOSEENOUGH */ - p = sub_pointf(ND_coord(n), mid_pointf(b.UR, b.LL)); - - ictxt.s.n = n; - ictxt.s.bp = NULL; - - return ND_shape(n)->fns->insidefn(&ictxt, p); -} - -boolean overlap_label(textlabel_t *lp, boxf b) -{ - pointf s; - boxf bb; - - s.x = lp->dimen.x / 2.; - s.y = lp->dimen.y / 2.; - bb.LL = sub_pointf(lp->pos, s); - bb.UR = add_pointf(lp->pos, s); - return OVERLAP(b, bb); -} - -static boolean overlap_arrow(pointf p, pointf u, double scale, int flag, boxf b) -{ - if (OVERLAP(b, arrow_bb(p, u, scale, flag))) { - /* FIXME - check inside arrow shape */ - return TRUE; - } - return FALSE; -} - -static boolean overlap_bezier(bezier bz, boxf b) -{ - int i; - pointf p, u; - - assert(bz.size); - u = bz.list[0]; - for (i = 1; i < bz.size; i++) { - p = bz.list[i]; - if (lineToBox(p, u, b) != -1) - return TRUE; - u = p; - } - - /* check arrows */ - if (bz.sflag) { - if (overlap_arrow(bz.sp, bz.list[0], 1, bz.sflag, b)) - return TRUE; - } - if (bz.eflag) { - if (overlap_arrow(bz.ep, bz.list[bz.size - 1], 1, bz.eflag, b)) - return TRUE; - } - return FALSE; -} - -boolean overlap_edge(edge_t *e, boxf b) -{ - int i; - splines *spl; - textlabel_t *lp; - - spl = ED_spl(e); - if (spl && boxf_overlap(spl->bb, b)) - for (i = 0; i < spl->size; i++) - if (overlap_bezier(spl->list[i], b)) - return TRUE; - - lp = ED_label(e); - if (lp && overlap_label(lp, b)) - return TRUE; - - return FALSE; -} - -/* edgeType: - * Convert string to edge type. - */ -int edgeType (char* s, int dflt) -{ - int et; - - if (!s || (*s == '\0')) return dflt; - - et = ET_NONE; - switch (*s) { - case '0' : /* false */ - et = ET_LINE; - break; - case '1' : /* true */ - case '2' : - case '3' : - case '4' : - case '5' : - case '6' : - case '7' : - case '8' : - case '9' : - et = ET_SPLINE; - break; - case 'c' : - case 'C' : - if (!strcasecmp (s+1, "urved")) - et = ET_CURVED; - else if (!strcasecmp (s+1, "ompound")) - et = ET_COMPOUND; - break; - case 'f' : - case 'F' : - if (!strcasecmp (s+1, "alse")) - et = ET_LINE; - break; - case 'l' : - case 'L' : - if (!strcasecmp (s+1, "ine")) - et = ET_LINE; - break; - case 'n' : - case 'N' : - if (!strcasecmp (s+1, "one")) return et; - if (!strcasecmp (s+1, "o")) return ET_LINE; - break; - case 'o' : - case 'O' : - if (!strcasecmp (s+1, "rtho")) - et = ET_ORTHO; - break; - case 'p' : - case 'P' : - if (!strcasecmp (s+1, "olyline")) - et = ET_PLINE; - break; - case 's' : - case 'S' : - if (!strcasecmp (s+1, "pline")) - et = ET_SPLINE; - break; - case 't' : - case 'T' : - if (!strcasecmp (s+1, "rue")) - et = ET_SPLINE; - break; - case 'y' : - case 'Y' : - if (!strcasecmp (s+1, "es")) - et = ET_SPLINE; - break; - } - if (!et) { - agerr(AGWARN, "Unknown \"splines\" value: \"%s\" - ignored\n", s); - et = dflt; - } - return et; -} - -/* setEdgeType: - * Sets graph's edge type based on the "splines" attribute. - * If the attribute is not defined, use default. - * If the attribute is "", use NONE. - * If attribute value matches (case indepedent), use match. - * ortho => ET_ORTHO - * none => ET_NONE - * line => ET_LINE - * polyline => ET_PLINE - * spline => ET_SPLINE - * If attribute is boolean, true means ET_SPLINE, false means ET_LINE. - * Else warn and use default. - */ -void setEdgeType (graph_t* g, int dflt) -{ - char* s = agget(g, "splines"); - int et; - - if (!s) { - et = dflt; - } - else if (*s == '\0') { - et = ET_NONE; - } - else et = edgeType (s, dflt); - GD_flags(g) |= et; -} - - -/* get_gradient_points - * Evaluates the extreme points of an ellipse or polygon - * Determines the point at the center of the extreme points - * If isRadial is true,sets the inner radius to half the distance to the min point; - * else uses the angle parameter to identify two points on a line that defines the - * gradient direction - * By default, this assumes a left-hand coordinate system (for svg); if RHS = 2 flag - * is set, use standard coordinate system. - */ -void get_gradient_points(pointf * A, pointf * G, int n, float angle, int flags) -{ - int i; - double rx, ry; - pointf min,max,center; - int isRadial = flags & 1; - int isRHS = flags & 2; - - if (n == 2) { - rx = A[1].x - A[0].x; - ry = A[1].y - A[0].y; - min.x = A[0].x - rx; - max.x = A[0].x + rx; - min.y = A[0].y - ry; - max.y = A[0].y + ry; - } - else { - min.x = max.x = A[0].x; - min.y = max.y = A[0].y; - for (i = 0; i < n; i++){ - min.x = MIN(A[i].x,min.x); - min.y = MIN(A[i].y,min.y); - max.x = MAX(A[i].x,max.x); - max.y = MAX(A[i].y,max.y); - } - } - center.x = min.x + (max.x - min.x)/2; - center.y = min.y + (max.y - min.y)/2; - if (isRadial) { - double inner_r, outer_r; - outer_r = sqrt((center.x - min.x)*(center.x - min.x) + - (center.y - min.y)*(center.y - min.y)); - inner_r = outer_r /4.; - if (isRHS) { - G[0].y = center.y; - } - else { - G[0].y = -center.y; - } - G[0].x = center.x; - G[1].x = inner_r; - G[1].y = outer_r; - } - else { - double half_x = max.x - center.x; - double half_y = max.y - center.y; - double sina = sin(angle); - double cosa = cos(angle); - if (isRHS) { - G[0].y = center.y - half_y * sina; - G[1].y = center.y + half_y * sina; - } - else { - G[0].y = -center.y + (max.y - center.y) * sin(angle); - G[1].y = -center.y - (center.y - min.y) * sin(angle); - } - G[0].x = center.x - half_x * cosa; - G[1].x = center.x + half_x * cosa; - } -} - -#ifndef WIN32_STATIC -#ifndef HAVE_STRCASECMP - - -#include -//#include - - -int strcasecmp(const char *s1, const char *s2) -{ - while ((*s1 != '\0') - && (tolower(*(unsigned char *) s1) == - tolower(*(unsigned char *) s2))) { - s1++; - s2++; - } - - return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); -} - -#endif /* HAVE_STRCASECMP */ -#endif /* WIN32_STATIC */ - -#ifndef WIN32_STATIC -#ifndef HAVE_STRNCASECMP -#include -//#include - -int strncasecmp(const char *s1, const char *s2, unsigned int n) -{ - if (n == 0) - return 0; - - while ((n-- != 0) - && (tolower(*(unsigned char *) s1) == - tolower(*(unsigned char *) s2))) { - if (n == 0 || *s1 == '\0' || *s2 == '\0') - return 0; - s1++; - s2++; - } - - return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); -} - -#endif /* HAVE_STRNCASECMP */ -#endif /* WIN32_STATIC */ -void gv_free_splines(edge_t * e) -{ - int i; - if (ED_spl(e)) { - for (i = 0; i < ED_spl(e)->size; i++) - free(ED_spl(e)->list[i].list); - free(ED_spl(e)->list); - free(ED_spl(e)); - } - ED_spl(e) = NULL; -} - -void gv_cleanup_edge(edge_t * e) -{ - free (ED_path(e).ps); - gv_free_splines(e); - free_label(ED_label(e)); - free_label(ED_xlabel(e)); - free_label(ED_head_label(e)); - free_label(ED_tail_label(e)); - /*FIX HERE , shallow cleaning may not be enough here */ - agdelrec(e, "Agedgeinfo_t"); -} - -void gv_cleanup_node(node_t * n) -{ - if (ND_pos(n)) free(ND_pos(n)); - if (ND_shape(n)) - ND_shape(n)->fns->freefn(n); - free_label(ND_label(n)); - free_label(ND_xlabel(n)); - /*FIX HERE , shallow cleaning may not be enough here */ - agdelrec(n, "Agnodeinfo_t"); -} - -void gv_nodesize(node_t * n, boolean flip) -{ - double w; - - if (flip) { - w = INCH2PS(ND_height(n)); - ND_lw(n) = ND_rw(n) = w / 2; - ND_ht(n) = INCH2PS(ND_width(n)); - } - else { - w = INCH2PS(ND_width(n)); - ND_lw(n) = ND_rw(n) = w / 2; - ND_ht(n) = INCH2PS(ND_height(n)); - } -} - -#ifdef _WIN32 -void fix_fc(void) -{ - char buf[28192]; - char buf2[28192]; - int cur=0; - FILE* fp; - - if((fp = fopen("fix-fc.exe", "r")) == NULL) - return ; - fclose (fp); - if (!system ("fix-fc.exe")) { - system ("del fix-fc.exe"); - system ("dot -c"); //run dot -c once too since we already run things :) - } -} -#endif - -#ifndef HAVE_DRAND48 -double drand48(void) -{ - double d; - d = rand(); - d = d / RAND_MAX; - return d; -} -#endif -typedef struct { - Dtlink_t link; - char* name; - Agraph_t* clp; -} clust_t; - -static void free_clust (Dt_t* dt, clust_t* clp, Dtdisc_t* disc) -{ - free (clp); -} - -static Dtdisc_t strDisc = { - offsetof(clust_t,name), - -1, - offsetof(clust_t,link), - NIL(Dtmake_f), - (Dtfree_f)free_clust, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -static void fillMap (Agraph_t* g, Dt_t* map) -{ - Agraph_t* cl; - int c; - char* s; - clust_t* ip; - - for (c = 1; c <= GD_n_cluster(g); c++) { - cl = GD_clust(g)[c]; - s = agnameof(cl); - if (dtmatch (map, s)) { - agerr(AGWARN, "Two clusters named %s - the second will be ignored\n", s); - } - else { - ip = NEW(clust_t); - ip->name = s; - ip->clp = cl; - dtinsert (map, ip); - } - fillMap (cl, map); - } -} - -/* mkClustMap: - * Generates a dictionary mapping cluster names to corresponding cluster. - * Used with cgraph as the latter does not support a flat namespace of clusters. - * Assumes G has already built a cluster tree using GD_n_cluster and GD_clust. - */ -Dt_t* mkClustMap (Agraph_t* g) -{ - Dt_t* map = dtopen (&strDisc, Dtoset); - - fillMap (g, map); - - return map; -} - -Agraph_t* -findCluster (Dt_t* map, char* name) -{ - clust_t* clp = dtmatch (map, name); - if (clp) - return clp->clp; - else - return NULL; -} - -Agnodeinfo_t* ninf(Agnode_t* n) {return (Agnodeinfo_t*)AGDATA(n);} -Agraphinfo_t* ginf(Agraph_t* g) {return (Agraphinfo_t*)AGDATA(g);} -Agedgeinfo_t* einf(Agedge_t* e) {return (Agedgeinfo_t*)AGDATA(e);} -/* void dumpG(Agraph_t* g) { agwrite(g, stderr); } */ diff --git a/internal/ccall/common/utils.h b/internal/ccall/common/utils.h deleted file mode 100644 index 4d49c0c..0000000 --- a/internal/ccall/common/utils.h +++ /dev/null @@ -1,132 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _UTILS_H -#define _UTILS_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/*visual studio*/ -#ifdef _WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - -#ifndef HAVE_STRCASECMP - extern int strcasecmp(const char *s1, const char *s2); -#endif -#ifndef HAVE_STRNCASECMP - extern int strncasecmp(const char *s1, const char *s2, size_t n); -#endif - - extern nodequeue *new_queue(int); - extern void free_queue(nodequeue *); - extern void enqueue(nodequeue *, Agnode_t *); - extern Agnode_t *dequeue(nodequeue *); - extern pointf Bezier(pointf *, int, double, pointf *, pointf *); - extern void attach_attrs(graph_t * g); - extern void attach_attrs_and_arrows(graph_t*, int*, int*); - extern char *xml_string(char *str); - extern char *xml_string0(char *str, boolean raw); - extern void write_plain(GVJ_t * job, graph_t * g, FILE * f, boolean extend); - extern double yDir (double y); - extern char *ps_string(char *s, int); - extern char *strdup_and_subst_obj(char *str, void *obj); - extern char *xml_url_string(char *s); - extern void epsf_emit_body(GVJ_t *job, usershape_t *us); - extern void epsf_define(GVJ_t * job); - extern void undoClusterEdges(graph_t * g); - extern Dt_t* mkClustMap (Agraph_t* g); - extern Agraph_t* findCluster (Dt_t* map, char* name); - extern attrsym_t* safe_dcl(graph_t * g, int obj_kind, char *name, char *def); - - extern int late_int(void *, Agsym_t *, int, int); - extern double late_double(void *, Agsym_t *, double, double); - extern char *late_nnstring(void *, Agsym_t *, char *); - extern char *late_string(void *, Agsym_t *, char *); - extern boolean late_bool(void *, Agsym_t *, int); - extern double get_inputscale (graph_t* g); - - extern Agnode_t *UF_find(Agnode_t *); - extern Agnode_t *UF_union(Agnode_t *, Agnode_t *); - extern void UF_remove(Agnode_t *, Agnode_t *); - extern void UF_singleton(Agnode_t *); - extern void UF_setname(Agnode_t *, Agnode_t *); - - extern char *Fgets(FILE * fp); - extern const char *safefile(const char *filename); - - extern boolean mapBool(char *, boolean); - extern boolean mapbool(char *); - extern int maptoken(char *, char **, int *); - - extern boolean findStopColor (char* colorlist, char* clrs[2], float* frac); - extern int test_toggle(void); - - extern void common_init_node(node_t * n); - extern int common_init_edge(edge_t * e); - - extern void updateBB(graph_t * g, textlabel_t * lp); - extern void compute_bb(Agraph_t *); - extern boxf polyBB (polygon_t* poly); - extern boolean overlap_node(node_t *n, boxf b); - extern boolean overlap_label(textlabel_t *lp, boxf b); - extern boolean overlap_edge(edge_t *e, boxf b); - - extern void get_gradient_points(pointf * A, pointf * G, int n, float angle, int flags); - - extern int processClusterEdges(graph_t * g); - - extern char *latin1ToUTF8(char *); - extern char *htmlEntityUTF8(char *, graph_t* g); - extern char* utf8ToLatin1 (char* ins); - extern char* scanEntity (char* t, agxbuf* xb); - - extern pointf dotneato_closest(splines * spl, pointf p); - extern pointf neato_closest(splines * spl, pointf p); - extern pointf spline_at_y(splines * spl, double y); - - extern Agsym_t *setAttr(graph_t*, void*, char*name, char *value, Agsym_t*); - extern void setEdgeType (graph_t* g, int dflt); - extern int edgeType (char* s, int dflt); - extern int is_a_cluster (Agraph_t* g); - - /* from postproc.c */ - extern void gv_nodesize(Agnode_t * n, boolean flip); - - /* from timing.c */ - extern void start_timer(void); - extern double elapsed_sec(void); - - /* from psusershape.c */ - extern void cat_libfile(GVJ_t * job, const char **arglib, const char **stdlib); - -Agnodeinfo_t* ninf(Agnode_t* n); -Agraphinfo_t* ginf(Agraph_t* g); -Agedgeinfo_t* einf(Agedge_t* e); - /**/ -#ifdef _WIN32 - extern void fix_fc(void); -#endif - -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif /* _UTILS_H */ diff --git a/internal/ccall/common/y.output b/internal/ccall/common/y.output deleted file mode 100644 index a6318a6..0000000 --- a/internal/ccall/common/y.output +++ /dev/null @@ -1,1742 +0,0 @@ -Terminals unused in grammar - - T_error - - -State 27 conflicts: 1 shift/reduce -State 40 conflicts: 1 shift/reduce - - -Grammar - - 0 $accept: html $end - - 1 html: T_html fonttext T_end_html - 2 | T_html fonttable T_end_html - 3 | error - - 4 fonttext: text - - 5 text: text textitem - 6 | textitem - - 7 textitem: string - 8 | br - 9 | font text n_font - 10 | italic text n_italic - 11 | underline text n_underline - 12 | overline text n_overline - 13 | bold text n_bold - 14 | sup text n_sup - 15 | sub text n_sub - 16 | strike text n_strike - - 17 font: T_font - - 18 n_font: T_end_font - - 19 italic: T_italic - - 20 n_italic: T_n_italic - - 21 bold: T_bold - - 22 n_bold: T_n_bold - - 23 strike: T_s - - 24 n_strike: T_n_s - - 25 underline: T_underline - - 26 n_underline: T_n_underline - - 27 overline: T_overline - - 28 n_overline: T_n_overline - - 29 sup: T_sup - - 30 n_sup: T_n_sup - - 31 sub: T_sub - - 32 n_sub: T_n_sub - - 33 br: T_br T_end_br - 34 | T_BR - - 35 string: T_string - 36 | string T_string - - 37 @1: /* empty */ - - 38 table: opt_space T_table @1 rows T_end_table opt_space - - 39 fonttable: table - 40 | font table n_font - 41 | italic table n_italic - 42 | underline table n_underline - 43 | overline table n_overline - 44 | bold table n_bold - - 45 opt_space: string - 46 | /* empty */ - - 47 rows: row - 48 | rows row - 49 | rows HR row - - 50 $@2: /* empty */ - - 51 row: T_row $@2 cells T_end_row - - 52 cells: cell - 53 | cells cell - 54 | cells VR cell - - 55 $@3: /* empty */ - - 56 cell: T_cell fonttable $@3 T_end_cell - - 57 $@4: /* empty */ - - 58 cell: T_cell fonttext $@4 T_end_cell - - 59 $@5: /* empty */ - - 60 cell: T_cell image $@5 T_end_cell - - 61 $@6: /* empty */ - - 62 cell: T_cell $@6 T_end_cell - - 63 image: T_img T_end_img - 64 | T_IMG - - 65 HR: T_hr T_end_hr - 66 | T_HR - - 67 VR: T_vr T_end_vr - 68 | T_VR - - -Terminals, with rules where they appear - -$end (0) 0 -error (256) 3 -T_end_br (258) 33 -T_end_img (259) 63 -T_row (260) 51 -T_end_row (261) 51 -T_html (262) 1 2 -T_end_html (263) 1 2 -T_end_table (264) 38 -T_end_cell (265) 56 58 60 62 -T_end_font (266) 18 -T_string (267) 35 36 -T_error (268) -T_n_italic (269) 20 -T_n_bold (270) 22 -T_n_underline (271) 26 -T_n_overline (272) 28 -T_n_sup (273) 30 -T_n_sub (274) 32 -T_n_s (275) 24 -T_HR (276) 66 -T_hr (277) 65 -T_end_hr (278) 65 -T_VR (279) 68 -T_vr (280) 67 -T_end_vr (281) 67 -T_BR (282) 34 -T_br (283) 33 -T_IMG (284) 64 -T_img (285) 63 -T_table (286) 38 -T_cell (287) 56 58 60 62 -T_font (288) 17 -T_italic (289) 19 -T_bold (290) 21 -T_underline (291) 25 -T_overline (292) 27 -T_sup (293) 29 -T_sub (294) 31 -T_s (295) 23 - - -Nonterminals, with rules where they appear - -$accept (41) - on left: 0 -html (42) - on left: 1 2 3, on right: 0 -fonttext (43) - on left: 4, on right: 1 58 -text (44) - on left: 5 6, on right: 4 5 9 10 11 12 13 14 15 16 -textitem (45) - on left: 7 8 9 10 11 12 13 14 15 16, on right: 5 6 -font (46) - on left: 17, on right: 9 40 -n_font (47) - on left: 18, on right: 9 40 -italic (48) - on left: 19, on right: 10 41 -n_italic (49) - on left: 20, on right: 10 41 -bold (50) - on left: 21, on right: 13 44 -n_bold (51) - on left: 22, on right: 13 44 -strike (52) - on left: 23, on right: 16 -n_strike (53) - on left: 24, on right: 16 -underline (54) - on left: 25, on right: 11 42 -n_underline (55) - on left: 26, on right: 11 42 -overline (56) - on left: 27, on right: 12 43 -n_overline (57) - on left: 28, on right: 12 43 -sup (58) - on left: 29, on right: 14 -n_sup (59) - on left: 30, on right: 14 -sub (60) - on left: 31, on right: 15 -n_sub (61) - on left: 32, on right: 15 -br (62) - on left: 33 34, on right: 8 -string (63) - on left: 35 36, on right: 7 36 45 -table (64) - on left: 38, on right: 39 40 41 42 43 44 -@1 (65) - on left: 37, on right: 38 -fonttable (66) - on left: 39 40 41 42 43 44, on right: 2 56 -opt_space (67) - on left: 45 46, on right: 38 -rows (68) - on left: 47 48 49, on right: 38 48 49 -row (69) - on left: 51, on right: 47 48 49 -$@2 (70) - on left: 50, on right: 51 -cells (71) - on left: 52 53 54, on right: 51 53 54 -cell (72) - on left: 56 58 60 62, on right: 52 53 54 -$@3 (73) - on left: 55, on right: 56 -$@4 (74) - on left: 57, on right: 58 -$@5 (75) - on left: 59, on right: 60 -$@6 (76) - on left: 61, on right: 62 -image (77) - on left: 63 64, on right: 60 -HR (78) - on left: 65 66, on right: 49 -VR (79) - on left: 67 68, on right: 54 - - -State 0 - - 0 $accept: . html $end - - error shift, and go to state 1 - T_html shift, and go to state 2 - - html go to state 3 - - -State 1 - - 3 html: error . - - $default reduce using rule 3 (html) - - -State 2 - - 1 html: T_html . fonttext T_end_html - 2 | T_html . fonttable T_end_html - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - fonttext go to state 15 - text go to state 16 - textitem go to state 17 - font go to state 18 - italic go to state 19 - bold go to state 20 - strike go to state 21 - underline go to state 22 - overline go to state 23 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 28 - fonttable go to state 29 - opt_space go to state 30 - - -State 3 - - 0 $accept: html . $end - - $end shift, and go to state 31 - - -State 4 - - 35 string: T_string . - - $default reduce using rule 35 (string) - - -State 5 - - 34 br: T_BR . - - $default reduce using rule 34 (br) - - -State 6 - - 33 br: T_br . T_end_br - - T_end_br shift, and go to state 32 - - -State 7 - - 17 font: T_font . - - $default reduce using rule 17 (font) - - -State 8 - - 19 italic: T_italic . - - $default reduce using rule 19 (italic) - - -State 9 - - 21 bold: T_bold . - - $default reduce using rule 21 (bold) - - -State 10 - - 25 underline: T_underline . - - $default reduce using rule 25 (underline) - - -State 11 - - 27 overline: T_overline . - - $default reduce using rule 27 (overline) - - -State 12 - - 29 sup: T_sup . - - $default reduce using rule 29 (sup) - - -State 13 - - 31 sub: T_sub . - - $default reduce using rule 31 (sub) - - -State 14 - - 23 strike: T_s . - - $default reduce using rule 23 (strike) - - -State 15 - - 1 html: T_html fonttext . T_end_html - - T_end_html shift, and go to state 33 - - -State 16 - - 4 fonttext: text . - 5 text: text . textitem - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 4 (fonttext) - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 17 - - 6 text: textitem . - - $default reduce using rule 6 (text) - - -State 18 - - 9 textitem: font . text n_font - 40 fonttable: font . table n_font - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - text go to state 41 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 42 - opt_space go to state 30 - - -State 19 - - 10 textitem: italic . text n_italic - 41 fonttable: italic . table n_italic - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - text go to state 43 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 44 - opt_space go to state 30 - - -State 20 - - 13 textitem: bold . text n_bold - 44 fonttable: bold . table n_bold - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - text go to state 45 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 46 - opt_space go to state 30 - - -State 21 - - 16 textitem: strike . text n_strike - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 47 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 22 - - 11 textitem: underline . text n_underline - 42 fonttable: underline . table n_underline - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - text go to state 48 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 49 - opt_space go to state 30 - - -State 23 - - 12 textitem: overline . text n_overline - 43 fonttable: overline . table n_overline - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - $default reduce using rule 46 (opt_space) - - text go to state 50 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 51 - opt_space go to state 30 - - -State 24 - - 14 textitem: sup . text n_sup - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 52 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 25 - - 15 textitem: sub . text n_sub - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 53 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 26 - - 8 textitem: br . - - $default reduce using rule 8 (textitem) - - -State 27 - - 7 textitem: string . - 36 string: string . T_string - 45 opt_space: string . - - T_string shift, and go to state 54 - - T_string [reduce using rule 7 (textitem)] - T_table reduce using rule 45 (opt_space) - $default reduce using rule 7 (textitem) - - -State 28 - - 39 fonttable: table . - - $default reduce using rule 39 (fonttable) - - -State 29 - - 2 html: T_html fonttable . T_end_html - - T_end_html shift, and go to state 55 - - -State 30 - - 38 table: opt_space . T_table @1 rows T_end_table opt_space - - T_table shift, and go to state 56 - - -State 31 - - 0 $accept: html $end . - - $default accept - - -State 32 - - 33 br: T_br T_end_br . - - $default reduce using rule 33 (br) - - -State 33 - - 1 html: T_html fonttext T_end_html . - - $default reduce using rule 1 (html) - - -State 34 - - 5 text: text textitem . - - $default reduce using rule 5 (text) - - -State 35 - - 9 textitem: font . text n_font - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 41 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 36 - - 10 textitem: italic . text n_italic - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 43 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 37 - - 13 textitem: bold . text n_bold - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 45 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 38 - - 11 textitem: underline . text n_underline - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 48 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 39 - - 12 textitem: overline . text n_overline - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - text go to state 50 - textitem go to state 17 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 40 - - 7 textitem: string . - 36 string: string . T_string - - T_string shift, and go to state 54 - - T_string [reduce using rule 7 (textitem)] - $default reduce using rule 7 (textitem) - - -State 41 - - 5 text: text . textitem - 9 textitem: font text . n_font - - T_end_font shift, and go to state 57 - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - n_font go to state 58 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 42 - - 40 fonttable: font table . n_font - - T_end_font shift, and go to state 57 - - n_font go to state 59 - - -State 43 - - 5 text: text . textitem - 10 textitem: italic text . n_italic - - T_string shift, and go to state 4 - T_n_italic shift, and go to state 60 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - n_italic go to state 61 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 44 - - 41 fonttable: italic table . n_italic - - T_n_italic shift, and go to state 60 - - n_italic go to state 62 - - -State 45 - - 5 text: text . textitem - 13 textitem: bold text . n_bold - - T_string shift, and go to state 4 - T_n_bold shift, and go to state 63 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - n_bold go to state 64 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 46 - - 44 fonttable: bold table . n_bold - - T_n_bold shift, and go to state 63 - - n_bold go to state 65 - - -State 47 - - 5 text: text . textitem - 16 textitem: strike text . n_strike - - T_string shift, and go to state 4 - T_n_s shift, and go to state 66 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - n_strike go to state 67 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 48 - - 5 text: text . textitem - 11 textitem: underline text . n_underline - - T_string shift, and go to state 4 - T_n_underline shift, and go to state 68 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - n_underline go to state 69 - overline go to state 39 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 49 - - 42 fonttable: underline table . n_underline - - T_n_underline shift, and go to state 68 - - n_underline go to state 70 - - -State 50 - - 5 text: text . textitem - 12 textitem: overline text . n_overline - - T_string shift, and go to state 4 - T_n_overline shift, and go to state 71 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - n_overline go to state 72 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 51 - - 43 fonttable: overline table . n_overline - - T_n_overline shift, and go to state 71 - - n_overline go to state 73 - - -State 52 - - 5 text: text . textitem - 14 textitem: sup text . n_sup - - T_string shift, and go to state 4 - T_n_sup shift, and go to state 74 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - n_sup go to state 75 - sub go to state 25 - br go to state 26 - string go to state 40 - - -State 53 - - 5 text: text . textitem - 15 textitem: sub text . n_sub - - T_string shift, and go to state 4 - T_n_sub shift, and go to state 76 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - textitem go to state 34 - font go to state 35 - italic go to state 36 - bold go to state 37 - strike go to state 21 - underline go to state 38 - overline go to state 39 - sup go to state 24 - sub go to state 25 - n_sub go to state 77 - br go to state 26 - string go to state 40 - - -State 54 - - 36 string: string T_string . - - $default reduce using rule 36 (string) - - -State 55 - - 2 html: T_html fonttable T_end_html . - - $default reduce using rule 2 (html) - - -State 56 - - 38 table: opt_space T_table . @1 rows T_end_table opt_space - - $default reduce using rule 37 (@1) - - @1 go to state 78 - - -State 57 - - 18 n_font: T_end_font . - - $default reduce using rule 18 (n_font) - - -State 58 - - 9 textitem: font text n_font . - - $default reduce using rule 9 (textitem) - - -State 59 - - 40 fonttable: font table n_font . - - $default reduce using rule 40 (fonttable) - - -State 60 - - 20 n_italic: T_n_italic . - - $default reduce using rule 20 (n_italic) - - -State 61 - - 10 textitem: italic text n_italic . - - $default reduce using rule 10 (textitem) - - -State 62 - - 41 fonttable: italic table n_italic . - - $default reduce using rule 41 (fonttable) - - -State 63 - - 22 n_bold: T_n_bold . - - $default reduce using rule 22 (n_bold) - - -State 64 - - 13 textitem: bold text n_bold . - - $default reduce using rule 13 (textitem) - - -State 65 - - 44 fonttable: bold table n_bold . - - $default reduce using rule 44 (fonttable) - - -State 66 - - 24 n_strike: T_n_s . - - $default reduce using rule 24 (n_strike) - - -State 67 - - 16 textitem: strike text n_strike . - - $default reduce using rule 16 (textitem) - - -State 68 - - 26 n_underline: T_n_underline . - - $default reduce using rule 26 (n_underline) - - -State 69 - - 11 textitem: underline text n_underline . - - $default reduce using rule 11 (textitem) - - -State 70 - - 42 fonttable: underline table n_underline . - - $default reduce using rule 42 (fonttable) - - -State 71 - - 28 n_overline: T_n_overline . - - $default reduce using rule 28 (n_overline) - - -State 72 - - 12 textitem: overline text n_overline . - - $default reduce using rule 12 (textitem) - - -State 73 - - 43 fonttable: overline table n_overline . - - $default reduce using rule 43 (fonttable) - - -State 74 - - 30 n_sup: T_n_sup . - - $default reduce using rule 30 (n_sup) - - -State 75 - - 14 textitem: sup text n_sup . - - $default reduce using rule 14 (textitem) - - -State 76 - - 32 n_sub: T_n_sub . - - $default reduce using rule 32 (n_sub) - - -State 77 - - 15 textitem: sub text n_sub . - - $default reduce using rule 15 (textitem) - - -State 78 - - 38 table: opt_space T_table @1 . rows T_end_table opt_space - - T_row shift, and go to state 79 - - rows go to state 80 - row go to state 81 - - -State 79 - - 51 row: T_row . $@2 cells T_end_row - - $default reduce using rule 50 ($@2) - - $@2 go to state 82 - - -State 80 - - 38 table: opt_space T_table @1 rows . T_end_table opt_space - 48 rows: rows . row - 49 | rows . HR row - - T_row shift, and go to state 79 - T_end_table shift, and go to state 83 - T_HR shift, and go to state 84 - T_hr shift, and go to state 85 - - row go to state 86 - HR go to state 87 - - -State 81 - - 47 rows: row . - - $default reduce using rule 47 (rows) - - -State 82 - - 51 row: T_row $@2 . cells T_end_row - - T_cell shift, and go to state 88 - - cells go to state 89 - cell go to state 90 - - -State 83 - - 38 table: opt_space T_table @1 rows T_end_table . opt_space - - T_string shift, and go to state 4 - - $default reduce using rule 46 (opt_space) - - string go to state 91 - opt_space go to state 92 - - -State 84 - - 66 HR: T_HR . - - $default reduce using rule 66 (HR) - - -State 85 - - 65 HR: T_hr . T_end_hr - - T_end_hr shift, and go to state 93 - - -State 86 - - 48 rows: rows row . - - $default reduce using rule 48 (rows) - - -State 87 - - 49 rows: rows HR . row - - T_row shift, and go to state 79 - - row go to state 94 - - -State 88 - - 56 cell: T_cell . fonttable $@3 T_end_cell - 58 | T_cell . fonttext $@4 T_end_cell - 60 | T_cell . image $@5 T_end_cell - 62 | T_cell . $@6 T_end_cell - - T_string shift, and go to state 4 - T_BR shift, and go to state 5 - T_br shift, and go to state 6 - T_IMG shift, and go to state 95 - T_img shift, and go to state 96 - T_font shift, and go to state 7 - T_italic shift, and go to state 8 - T_bold shift, and go to state 9 - T_underline shift, and go to state 10 - T_overline shift, and go to state 11 - T_sup shift, and go to state 12 - T_sub shift, and go to state 13 - T_s shift, and go to state 14 - - T_end_cell reduce using rule 61 ($@6) - $default reduce using rule 46 (opt_space) - - fonttext go to state 97 - text go to state 16 - textitem go to state 17 - font go to state 18 - italic go to state 19 - bold go to state 20 - strike go to state 21 - underline go to state 22 - overline go to state 23 - sup go to state 24 - sub go to state 25 - br go to state 26 - string go to state 27 - table go to state 28 - fonttable go to state 98 - opt_space go to state 30 - $@6 go to state 99 - image go to state 100 - - -State 89 - - 51 row: T_row $@2 cells . T_end_row - 53 cells: cells . cell - 54 | cells . VR cell - - T_end_row shift, and go to state 101 - T_VR shift, and go to state 102 - T_vr shift, and go to state 103 - T_cell shift, and go to state 88 - - cell go to state 104 - VR go to state 105 - - -State 90 - - 52 cells: cell . - - $default reduce using rule 52 (cells) - - -State 91 - - 36 string: string . T_string - 45 opt_space: string . - - T_string shift, and go to state 54 - - $default reduce using rule 45 (opt_space) - - -State 92 - - 38 table: opt_space T_table @1 rows T_end_table opt_space . - - $default reduce using rule 38 (table) - - -State 93 - - 65 HR: T_hr T_end_hr . - - $default reduce using rule 65 (HR) - - -State 94 - - 49 rows: rows HR row . - - $default reduce using rule 49 (rows) - - -State 95 - - 64 image: T_IMG . - - $default reduce using rule 64 (image) - - -State 96 - - 63 image: T_img . T_end_img - - T_end_img shift, and go to state 106 - - -State 97 - - 58 cell: T_cell fonttext . $@4 T_end_cell - - $default reduce using rule 57 ($@4) - - $@4 go to state 107 - - -State 98 - - 56 cell: T_cell fonttable . $@3 T_end_cell - - $default reduce using rule 55 ($@3) - - $@3 go to state 108 - - -State 99 - - 62 cell: T_cell $@6 . T_end_cell - - T_end_cell shift, and go to state 109 - - -State 100 - - 60 cell: T_cell image . $@5 T_end_cell - - $default reduce using rule 59 ($@5) - - $@5 go to state 110 - - -State 101 - - 51 row: T_row $@2 cells T_end_row . - - $default reduce using rule 51 (row) - - -State 102 - - 68 VR: T_VR . - - $default reduce using rule 68 (VR) - - -State 103 - - 67 VR: T_vr . T_end_vr - - T_end_vr shift, and go to state 111 - - -State 104 - - 53 cells: cells cell . - - $default reduce using rule 53 (cells) - - -State 105 - - 54 cells: cells VR . cell - - T_cell shift, and go to state 88 - - cell go to state 112 - - -State 106 - - 63 image: T_img T_end_img . - - $default reduce using rule 63 (image) - - -State 107 - - 58 cell: T_cell fonttext $@4 . T_end_cell - - T_end_cell shift, and go to state 113 - - -State 108 - - 56 cell: T_cell fonttable $@3 . T_end_cell - - T_end_cell shift, and go to state 114 - - -State 109 - - 62 cell: T_cell $@6 T_end_cell . - - $default reduce using rule 62 (cell) - - -State 110 - - 60 cell: T_cell image $@5 . T_end_cell - - T_end_cell shift, and go to state 115 - - -State 111 - - 67 VR: T_vr T_end_vr . - - $default reduce using rule 67 (VR) - - -State 112 - - 54 cells: cells VR cell . - - $default reduce using rule 54 (cells) - - -State 113 - - 58 cell: T_cell fonttext $@4 T_end_cell . - - $default reduce using rule 58 (cell) - - -State 114 - - 56 cell: T_cell fonttable $@3 T_end_cell . - - $default reduce using rule 56 (cell) - - -State 115 - - 60 cell: T_cell image $@5 T_end_cell . - - $default reduce using rule 60 (cell) diff --git a/internal/ccall/common/y.tab.c b/internal/ccall/common/y.tab.c deleted file mode 100644 index 0209a94..0000000 --- a/internal/ccall/common/y.tab.c +++ /dev/null @@ -1,2556 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.7" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 14 "../../lib/common/htmlparse.y" - - -#include "render.h" -#include "htmltable.h" -#include "htmllex.h" - -extern int yyparse(void); - -typedef struct sfont_t { - textfont_t *cfont; - struct sfont_t *pfont; -} sfont_t; - -static struct { - htmllabel_t* lbl; /* Generated label */ - htmltbl_t* tblstack; /* Stack of tables maintained during parsing */ - Dt_t* fitemList; /* Dictionary for font text items */ - Dt_t* fspanList; - agxbuf* str; /* Buffer for text */ - sfont_t* fontstack; - GVC_t* gvc; -} HTMLstate; - -/* free_ritem: - * Free row. This closes and frees row's list, then - * the pitem itself is freed. - */ -static void -free_ritem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - dtclose (p->u.rp); - free (p); -} - -/* free_item: - * Generic Dt free. Only frees container, assuming contents - * have been copied elsewhere. - */ -static void -free_item(Dt_t* d, void* p,Dtdisc_t* ds) -{ - free (p); -} - -/* cleanTbl: - * Clean up table if error in parsing. - */ -static void -cleanTbl (htmltbl_t* tp) -{ - dtclose (tp->u.p.rows); - free_html_data (&tp->data); - free (tp); -} - -/* cleanCell: - * Clean up cell if error in parsing. - */ -static void -cleanCell (htmlcell_t* cp) -{ - if (cp->child.kind == HTML_TBL) cleanTbl (cp->child.u.tbl); - else if (cp->child.kind == HTML_TEXT) free_html_text (cp->child.u.txt); - free_html_data (&cp->data); - free (cp); -} - -/* free_citem: - * Free cell item during parsing. This frees cell and pitem. - */ -static void -free_citem(Dt_t* d, pitem* p,Dtdisc_t* ds) -{ - cleanCell (p->u.cp); - free (p); -} - -static Dtdisc_t rowDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_ritem, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; -static Dtdisc_t cellDisc = { - offsetof(pitem,u), - sizeof(void*), - offsetof(pitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -typedef struct { - Dtlink_t link; - textspan_t ti; -} fitem; - -typedef struct { - Dtlink_t link; - htextspan_t lp; -} fspan; - -static void -free_fitem(Dt_t* d, fitem* p, Dtdisc_t* ds) -{ - if (p->ti.str) - free (p->ti.str); - free (p); -} - -static void -free_fspan(Dt_t* d, fspan* p, Dtdisc_t* ds) -{ - textspan_t* ti; - - if (p->lp.nitems) { - int i; - ti = p->lp.items; - for (i = 0; i < p->lp.nitems; i++) { - if (ti->str) free (ti->str); - ti++; - } - free (p->lp.items); - } - free (p); -} - -static Dtdisc_t fstrDisc = { - 0, - 0, - offsetof(fitem,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - - -static Dtdisc_t fspanDisc = { - 0, - 0, - offsetof(fspan,link), - NIL(Dtmake_f), - (Dtfree_f)free_item, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* appendFItemList: - * Append a new fitem to the list. - */ -static void -appendFItemList (agxbuf *ag) -{ - fitem *fi = NEW(fitem); - - fi->ti.str = strdup(agxbuse(ag)); - fi->ti.font = HTMLstate.fontstack->cfont; - dtinsert(HTMLstate.fitemList, fi); -} - -/* appendFLineList: - */ -static void -appendFLineList (int v) -{ - int cnt; - fspan *ln = NEW(fspan); - fitem *fi; - Dt_t *ilist = HTMLstate.fitemList; - - cnt = dtsize(ilist); - ln->lp.just = v; - if (cnt) { - int i = 0; - ln->lp.nitems = cnt; - ln->lp.items = N_NEW(cnt, textspan_t); - - fi = (fitem*)dtflatten(ilist); - for (; fi; fi = (fitem*)dtlink(fitemList,(Dtlink_t*)fi)) { - /* NOTE: When fitemList is closed, it uses free_item, which only frees the container, - * not the contents, so this copy is safe. - */ - ln->lp.items[i] = fi->ti; - i++; - } - } - else { - ln->lp.items = NEW(textspan_t); - ln->lp.nitems = 1; - ln->lp.items[0].str = strdup(""); - ln->lp.items[0].font = HTMLstate.fontstack->cfont; - } - - dtclear(ilist); - - dtinsert(HTMLstate.fspanList, ln); -} - -static htmltxt_t* -mkText(void) -{ - int cnt; - Dt_t * ispan = HTMLstate.fspanList; - fspan *fl ; - htmltxt_t *hft = NEW(htmltxt_t); - - if (dtsize (HTMLstate.fitemList)) - appendFLineList (UNSET_ALIGN); - - cnt = dtsize(ispan); - hft->nspans = cnt; - - if (cnt) { - int i = 0; - hft->spans = N_NEW(cnt,htextspan_t); - for(fl=(fspan *)dtfirst(ispan); fl; fl=(fspan *)dtnext(ispan,fl)) { - hft->spans[i] = fl->lp; - i++; - } - } - - dtclear(ispan); - - return hft; -} - -static pitem* lastRow (void) -{ - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = dtlast (tbl->u.p.rows); - return sp; -} - -/* addRow: - * Add new cell row to current table. - */ -static pitem* addRow (void) -{ - Dt_t* dp = dtopen(&cellDisc, Dtqueue); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* sp = NEW(pitem); - sp->u.rp = dp; - if (tbl->flags & HTML_HRULE) - sp->ruled = 1; - dtinsert (tbl->u.p.rows, sp); - return sp; -} - -/* setCell: - * Set cell body and type and attach to row - */ -static void setCell (htmlcell_t* cp, void* obj, int kind) -{ - pitem* sp = NEW(pitem); - htmltbl_t* tbl = HTMLstate.tblstack; - pitem* rp = (pitem*)dtlast (tbl->u.p.rows); - Dt_t* row = rp->u.rp; - sp->u.cp = cp; - dtinsert (row, sp); - cp->child.kind = kind; - if (tbl->flags & HTML_VRULE) - cp->ruled = HTML_VRULE; - - if(kind == HTML_TEXT) - cp->child.u.txt = (htmltxt_t*)obj; - else if (kind == HTML_IMAGE) - cp->child.u.img = (htmlimg_t*)obj; - else - cp->child.u.tbl = (htmltbl_t*)obj; -} - -/* mkLabel: - * Create label, given body and type. - */ -static htmllabel_t* mkLabel (void* obj, int kind) -{ - htmllabel_t* lp = NEW(htmllabel_t); - - lp->kind = kind; - if (kind == HTML_TEXT) - lp->u.txt = (htmltxt_t*)obj; - else - lp->u.tbl = (htmltbl_t*)obj; - return lp; -} - -/* freeFontstack: - * Free all stack items but the last, which is - * put on artificially during in parseHTML. - */ -static void -freeFontstack(void) -{ - sfont_t* s; - sfont_t* next; - - for (s = HTMLstate.fontstack; (next = s->pfont); s = next) { - free(s); - } -} - -/* cleanup: - * Called on error. Frees resources allocated during parsing. - * This includes a label, plus a walk down the stack of - * tables. Note that we use the free_citem function to actually - * free cells. - */ -static void cleanup (void) -{ - htmltbl_t* tp = HTMLstate.tblstack; - htmltbl_t* next; - - if (HTMLstate.lbl) { - free_html_label (HTMLstate.lbl,1); - HTMLstate.lbl = NULL; - } - cellDisc.freef = (Dtfree_f)free_citem; - while (tp) { - next = tp->u.p.prev; - cleanTbl (tp); - tp = next; - } - cellDisc.freef = (Dtfree_f)free_item; - - fstrDisc.freef = (Dtfree_f)free_fitem; - dtclear (HTMLstate.fitemList); - fstrDisc.freef = (Dtfree_f)free_item; - - fspanDisc.freef = (Dtfree_f)free_fspan; - dtclear (HTMLstate.fspanList); - fspanDisc.freef = (Dtfree_f)free_item; - - freeFontstack(); -} - -/* nonSpace: - * Return 1 if s contains a non-space character. - */ -static int nonSpace (char* s) -{ - char c; - - while ((c = *s++)) { - if (c != ' ') return 1; - } - return 0; -} - -/* pushFont: - * Fonts are allocated in the lexer. - */ -static void -pushFont (textfont_t *fp) -{ - sfont_t *ft = NEW(sfont_t); - textfont_t* curfont = HTMLstate.fontstack->cfont; - textfont_t f = *fp; - - if (curfont) { - if (!f.color && curfont->color) - f.color = curfont->color; - if ((f.size < 0.0) && (curfont->size >= 0.0)) - f.size = curfont->size; - if (!f.name && curfont->name) - f.name = curfont->name; - if (curfont->flags) - f.flags |= curfont->flags; - } - - ft->cfont = dtinsert(HTMLstate.gvc->textfont_dt, &f); - ft->pfont = HTMLstate.fontstack; - HTMLstate.fontstack = ft; -} - -/* popFont: - */ -static void -popFont (void) -{ - sfont_t* curfont = HTMLstate.fontstack; - sfont_t* prevfont = curfont->pfont; - - free (curfont); - HTMLstate.fontstack = prevfont; -} - - -/* Line 371 of yacc.c */ -#line 469 "y.tab.c" - -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - T_end_br = 258, - T_end_img = 259, - T_row = 260, - T_end_row = 261, - T_html = 262, - T_end_html = 263, - T_end_table = 264, - T_end_cell = 265, - T_end_font = 266, - T_string = 267, - T_error = 268, - T_n_italic = 269, - T_n_bold = 270, - T_n_underline = 271, - T_n_overline = 272, - T_n_sup = 273, - T_n_sub = 274, - T_n_s = 275, - T_HR = 276, - T_hr = 277, - T_end_hr = 278, - T_VR = 279, - T_vr = 280, - T_end_vr = 281, - T_BR = 282, - T_br = 283, - T_IMG = 284, - T_img = 285, - T_table = 286, - T_cell = 287, - T_font = 288, - T_italic = 289, - T_bold = 290, - T_underline = 291, - T_overline = 292, - T_sup = 293, - T_sub = 294, - T_s = 295 - }; -#endif -/* Tokens. */ -#define T_end_br 258 -#define T_end_img 259 -#define T_row 260 -#define T_end_row 261 -#define T_html 262 -#define T_end_html 263 -#define T_end_table 264 -#define T_end_cell 265 -#define T_end_font 266 -#define T_string 267 -#define T_error 268 -#define T_n_italic 269 -#define T_n_bold 270 -#define T_n_underline 271 -#define T_n_overline 272 -#define T_n_sup 273 -#define T_n_sub 274 -#define T_n_s 275 -#define T_HR 276 -#define T_hr 277 -#define T_end_hr 278 -#define T_VR 279 -#define T_vr 280 -#define T_end_vr 281 -#define T_BR 282 -#define T_br 283 -#define T_IMG 284 -#define T_img 285 -#define T_table 286 -#define T_cell 287 -#define T_font 288 -#define T_italic 289 -#define T_bold 290 -#define T_underline 291 -#define T_overline 292 -#define T_sup 293 -#define T_sub 294 -#define T_s 295 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 387 of yacc.c */ -#line 415 "../../lib/common/htmlparse.y" - - int i; - htmltxt_t* txt; - htmlcell_t* cell; - htmltbl_t* tbl; - textfont_t* font; - htmlimg_t* img; - pitem* p; - - -/* Line 387 of yacc.c */ -#line 603 "y.tab.c" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ - -/* Line 390 of yacc.c */ -#line 631 "y.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; -#else -typedef short int yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) -#else -static int -YYID (yyi) - int yyi; -#endif -{ - return yyi; -} -#endif - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 31 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 271 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 41 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 39 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 69 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 116 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 295 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint8 yyprhs[] = -{ - 0, 0, 3, 7, 11, 13, 15, 18, 20, 22, - 24, 28, 32, 36, 40, 44, 48, 52, 56, 58, - 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, - 80, 82, 84, 86, 88, 91, 93, 95, 98, 99, - 106, 108, 112, 116, 120, 124, 128, 130, 131, 133, - 136, 140, 141, 146, 148, 151, 155, 156, 161, 162, - 167, 168, 173, 174, 178, 181, 183, 186, 188, 191 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int8 yyrhs[] = -{ - 42, 0, -1, 7, 43, 8, -1, 7, 66, 8, - -1, 1, -1, 44, -1, 44, 45, -1, 45, -1, - 63, -1, 62, -1, 46, 44, 47, -1, 48, 44, - 49, -1, 54, 44, 55, -1, 56, 44, 57, -1, - 50, 44, 51, -1, 58, 44, 59, -1, 60, 44, - 61, -1, 52, 44, 53, -1, 33, -1, 11, -1, - 34, -1, 14, -1, 35, -1, 15, -1, 40, -1, - 20, -1, 36, -1, 16, -1, 37, -1, 17, -1, - 38, -1, 18, -1, 39, -1, 19, -1, 28, 3, - -1, 27, -1, 12, -1, 63, 12, -1, -1, 67, - 31, 65, 68, 9, 67, -1, 64, -1, 46, 64, - 47, -1, 48, 64, 49, -1, 54, 64, 55, -1, - 56, 64, 57, -1, 50, 64, 51, -1, 63, -1, - -1, 69, -1, 68, 69, -1, 68, 78, 69, -1, - -1, 5, 70, 71, 6, -1, 72, -1, 71, 72, - -1, 71, 79, 72, -1, -1, 32, 66, 73, 10, - -1, -1, 32, 43, 74, 10, -1, -1, 32, 77, - 75, 10, -1, -1, 32, 76, 10, -1, 30, 4, - -1, 29, -1, 22, 23, -1, 21, -1, 25, 26, - -1, 24, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 447, 447, 448, 449, 452, 455, 456, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 471, 474, - 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, - 507, 510, 513, 516, 519, 520, 523, 524, 527, 527, - 548, 549, 550, 551, 552, 553, 556, 557, 560, 561, - 562, 565, 565, 568, 569, 570, 573, 573, 574, 574, - 575, 575, 576, 576, 579, 580, 583, 584, 587, 588 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "T_end_br", "T_end_img", "T_row", - "T_end_row", "T_html", "T_end_html", "T_end_table", "T_end_cell", - "T_end_font", "T_string", "T_error", "T_n_italic", "T_n_bold", - "T_n_underline", "T_n_overline", "T_n_sup", "T_n_sub", "T_n_s", "T_HR", - "T_hr", "T_end_hr", "T_VR", "T_vr", "T_end_vr", "T_BR", "T_br", "T_IMG", - "T_img", "T_table", "T_cell", "T_font", "T_italic", "T_bold", - "T_underline", "T_overline", "T_sup", "T_sub", "T_s", "$accept", "html", - "fonttext", "text", "textitem", "font", "n_font", "italic", "n_italic", - "bold", "n_bold", "strike", "n_strike", "underline", "n_underline", - "overline", "n_overline", "sup", "n_sup", "sub", "n_sub", "br", "string", - "table", "@1", "fonttable", "opt_space", "rows", "row", "$@2", "cells", - "cell", "$@3", "$@4", "$@5", "$@6", "image", "HR", "VR", YY_NULL -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 41, 42, 42, 42, 43, 44, 44, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 62, 63, 63, 65, 64, - 66, 66, 66, 66, 66, 66, 67, 67, 68, 68, - 68, 70, 69, 71, 71, 71, 73, 72, 74, 72, - 75, 72, 76, 72, 77, 77, 78, 78, 79, 79 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 3, 3, 1, 1, 2, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 2, 0, 6, - 1, 3, 3, 3, 3, 3, 1, 0, 1, 2, - 3, 0, 4, 1, 2, 3, 0, 4, 0, 4, - 0, 4, 0, 3, 2, 1, 2, 1, 2, 1 -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 0, 4, 47, 0, 36, 35, 0, 18, 20, 22, - 26, 28, 30, 32, 24, 0, 5, 7, 47, 47, - 47, 0, 47, 47, 0, 0, 9, 8, 40, 0, - 0, 1, 34, 2, 6, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 3, 38, 19, 10, 41, - 21, 11, 42, 23, 14, 45, 25, 17, 27, 12, - 43, 29, 13, 44, 31, 15, 33, 16, 0, 51, - 0, 48, 0, 47, 67, 0, 49, 0, 47, 0, - 53, 46, 39, 66, 50, 65, 0, 58, 56, 0, - 60, 52, 69, 0, 54, 0, 64, 0, 0, 63, - 0, 68, 55, 59, 57, 61 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int8 yydefgoto[] = -{ - -1, 3, 15, 16, 17, 35, 58, 36, 61, 37, - 64, 21, 67, 38, 69, 39, 72, 24, 75, 25, - 77, 26, 40, 28, 78, 29, 30, 80, 81, 82, - 89, 90, 108, 107, 110, 99, 100, 87, 105 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -82 -static const yytype_int16 yypact[] = -{ - 8, -82, 209, 10, -82, -82, 11, -82, -82, -82, - -82, -82, -82, -82, -82, 5, 209, -82, 209, 209, - 209, 209, 209, 209, 209, 209, -82, -5, -82, 14, - -20, -82, -82, -82, -82, 209, 209, 209, 209, 209, - 13, 37, 12, 66, 16, 80, 19, 109, 123, 20, - 152, 15, 166, 195, -82, -82, -82, -82, -82, -82, - -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, - -82, -82, -82, -82, -82, -82, -82, -82, 23, -82, - 119, -82, 7, 46, -82, 38, -82, 23, 17, 35, - -82, 13, -82, -82, -82, -82, 58, -82, -82, 53, - -82, -82, -82, 40, -82, 7, -82, 59, 69, -82, - 72, -82, -82, -82, -82, -82 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -82, -82, -4, 232, -10, -1, 26, 0, 39, 1, - 50, -82, -82, 2, 36, 3, 47, -82, -82, -82, - -82, -82, -2, 148, -82, 9, 27, -82, -68, -82, - -82, -81, -82, -82, -82, -82, -82, -82, -82 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -63 -static const yytype_int8 yytable[] = -{ - 27, 18, 19, 20, 22, 23, 34, 54, 104, 1, - 31, 56, 86, 33, 32, 2, 27, 27, 27, 94, - 27, 27, 55, 57, 112, 54, -46, -62, 79, 4, - 60, 34, 71, 34, 63, 34, 68, 34, 34, 88, - 34, 101, 34, 34, 5, 6, 95, 96, 57, 4, - 7, 8, 9, 10, 11, 12, 13, 14, 4, 102, - 103, 93, 106, 109, 5, 6, 111, 88, 59, 113, - 7, 8, 9, 10, 11, 12, 13, 14, 4, 114, - 60, 91, 115, 62, 97, 70, 27, 18, 19, 20, - 22, 23, 4, 5, 6, 63, 65, 98, 73, 7, - 8, 9, 10, 11, 12, 13, 14, 5, 6, 0, - 92, 0, 0, 7, 8, 9, 10, 11, 12, 13, - 14, 4, 0, 0, 79, 0, 0, 0, 83, 66, - 0, 0, 0, 0, 0, 4, 5, 6, 0, 68, - 84, 85, 7, 8, 9, 10, 11, 12, 13, 14, - 5, 6, 0, 0, 0, 0, 7, 8, 9, 10, - 11, 12, 13, 14, 4, 0, 42, 44, 46, 71, - 49, 51, 0, 0, 0, 0, 0, 0, 4, 5, - 6, 0, 0, 0, 74, 7, 8, 9, 10, 11, - 12, 13, 14, 5, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 11, 12, 13, 14, 4, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, - 0, 4, 5, 6, 0, 0, 0, 0, 7, 8, - 9, 10, 11, 12, 13, 14, 5, 6, 0, 0, - 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, - 41, 43, 45, 47, 48, 50, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 43, 45, - 48, 50 -}; - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-82))) - -#define yytable_value_is_error(Yytable_value) \ - YYID (0) - -static const yytype_int8 yycheck[] = -{ - 2, 2, 2, 2, 2, 2, 16, 12, 89, 1, - 0, 31, 80, 8, 3, 7, 18, 19, 20, 87, - 22, 23, 8, 11, 105, 12, 31, 10, 5, 12, - 14, 41, 17, 43, 15, 45, 16, 47, 48, 32, - 50, 6, 52, 53, 27, 28, 29, 30, 11, 12, - 33, 34, 35, 36, 37, 38, 39, 40, 12, 24, - 25, 23, 4, 10, 27, 28, 26, 32, 42, 10, - 33, 34, 35, 36, 37, 38, 39, 40, 12, 10, - 14, 83, 10, 44, 88, 49, 88, 88, 88, 88, - 88, 88, 12, 27, 28, 15, 46, 88, 51, 33, - 34, 35, 36, 37, 38, 39, 40, 27, 28, -1, - 83, -1, -1, 33, 34, 35, 36, 37, 38, 39, - 40, 12, -1, -1, 5, -1, -1, -1, 9, 20, - -1, -1, -1, -1, -1, 12, 27, 28, -1, 16, - 21, 22, 33, 34, 35, 36, 37, 38, 39, 40, - 27, 28, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, 12, -1, 18, 19, 20, 17, - 22, 23, -1, -1, -1, -1, -1, -1, 12, 27, - 28, -1, -1, -1, 18, 33, 34, 35, 36, 37, - 38, 39, 40, 27, 28, -1, -1, -1, -1, 33, - 34, 35, 36, 37, 38, 39, 40, 12, -1, -1, - -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, - -1, 12, 27, 28, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, 27, 28, -1, -1, - -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, - 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 35, 36, 37, - 38, 39 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 1, 7, 42, 12, 27, 28, 33, 34, 35, - 36, 37, 38, 39, 40, 43, 44, 45, 46, 48, - 50, 52, 54, 56, 58, 60, 62, 63, 64, 66, - 67, 0, 3, 8, 45, 46, 48, 50, 54, 56, - 63, 44, 64, 44, 64, 44, 64, 44, 44, 64, - 44, 64, 44, 44, 12, 8, 31, 11, 47, 47, - 14, 49, 49, 15, 51, 51, 20, 53, 16, 55, - 55, 17, 57, 57, 18, 59, 19, 61, 65, 5, - 68, 69, 70, 9, 21, 22, 69, 78, 32, 71, - 72, 63, 67, 23, 69, 29, 30, 43, 66, 76, - 77, 6, 24, 25, 72, 79, 4, 74, 73, 10, - 75, 26, 72, 10, 10, 10 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); -# endif - switch (yytype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif -{ - int yynrhs = yyr2[yyrule]; - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULL; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int yychar; - - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); - -/* Number of syntax errors so far. */ -int yynerrs; - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -/* Line 1792 of yacc.c */ -#line 447 "../../lib/common/htmlparse.y" - { HTMLstate.lbl = mkLabel((yyvsp[(2) - (3)].txt),HTML_TEXT); } - break; - - case 3: -/* Line 1792 of yacc.c */ -#line 448 "../../lib/common/htmlparse.y" - { HTMLstate.lbl = mkLabel((yyvsp[(2) - (3)].tbl),HTML_TBL); } - break; - - case 4: -/* Line 1792 of yacc.c */ -#line 449 "../../lib/common/htmlparse.y" - { cleanup(); YYABORT; } - break; - - case 5: -/* Line 1792 of yacc.c */ -#line 452 "../../lib/common/htmlparse.y" - { (yyval.txt) = mkText(); } - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 459 "../../lib/common/htmlparse.y" - { appendFItemList(HTMLstate.str);} - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 460 "../../lib/common/htmlparse.y" - {appendFLineList((yyvsp[(1) - (1)].i));} - break; - - case 18: -/* Line 1792 of yacc.c */ -#line 471 "../../lib/common/htmlparse.y" - { pushFont ((yyvsp[(1) - (1)].font)); } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 474 "../../lib/common/htmlparse.y" - { popFont (); } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 477 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 480 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 483 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 486 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 489 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 492 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 495 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 27: -/* Line 1792 of yacc.c */ -#line 498 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 28: -/* Line 1792 of yacc.c */ -#line 501 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 29: -/* Line 1792 of yacc.c */ -#line 504 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 30: -/* Line 1792 of yacc.c */ -#line 507 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 510 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 513 "../../lib/common/htmlparse.y" - {pushFont((yyvsp[(1) - (1)].font));} - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 516 "../../lib/common/htmlparse.y" - {popFont();} - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 519 "../../lib/common/htmlparse.y" - { (yyval.i) = (yyvsp[(1) - (2)].i); } - break; - - case 35: -/* Line 1792 of yacc.c */ -#line 520 "../../lib/common/htmlparse.y" - { (yyval.i) = (yyvsp[(1) - (1)].i); } - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 527 "../../lib/common/htmlparse.y" - { - if (nonSpace(agxbuse(HTMLstate.str))) { - yyerror ("Syntax error: non-space string used before
"); - cleanup(); YYABORT; - } - (yyvsp[(2) - (2)].tbl)->u.p.prev = HTMLstate.tblstack; - (yyvsp[(2) - (2)].tbl)->u.p.rows = dtopen(&rowDisc, Dtqueue); - HTMLstate.tblstack = (yyvsp[(2) - (2)].tbl); - (yyvsp[(2) - (2)].tbl)->font = HTMLstate.fontstack->cfont; - (yyval.tbl) = (yyvsp[(2) - (2)].tbl); - } - break; - - case 39: -/* Line 1792 of yacc.c */ -#line 538 "../../lib/common/htmlparse.y" - { - if (nonSpace(agxbuse(HTMLstate.str))) { - yyerror ("Syntax error: non-space string used after
"); - cleanup(); YYABORT; - } - (yyval.tbl) = HTMLstate.tblstack; - HTMLstate.tblstack = HTMLstate.tblstack->u.p.prev; - } - break; - - case 40: -/* Line 1792 of yacc.c */ -#line 548 "../../lib/common/htmlparse.y" - { (yyval.tbl) = (yyvsp[(1) - (1)].tbl); } - break; - - case 41: -/* Line 1792 of yacc.c */ -#line 549 "../../lib/common/htmlparse.y" - { (yyval.tbl)=(yyvsp[(2) - (3)].tbl); } - break; - - case 42: -/* Line 1792 of yacc.c */ -#line 550 "../../lib/common/htmlparse.y" - { (yyval.tbl)=(yyvsp[(2) - (3)].tbl); } - break; - - case 43: -/* Line 1792 of yacc.c */ -#line 551 "../../lib/common/htmlparse.y" - { (yyval.tbl)=(yyvsp[(2) - (3)].tbl); } - break; - - case 44: -/* Line 1792 of yacc.c */ -#line 552 "../../lib/common/htmlparse.y" - { (yyval.tbl)=(yyvsp[(2) - (3)].tbl); } - break; - - case 45: -/* Line 1792 of yacc.c */ -#line 553 "../../lib/common/htmlparse.y" - { (yyval.tbl)=(yyvsp[(2) - (3)].tbl); } - break; - - case 48: -/* Line 1792 of yacc.c */ -#line 560 "../../lib/common/htmlparse.y" - { (yyval.p) = (yyvsp[(1) - (1)].p); } - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 561 "../../lib/common/htmlparse.y" - { (yyval.p) = (yyvsp[(2) - (2)].p); } - break; - - case 50: -/* Line 1792 of yacc.c */ -#line 562 "../../lib/common/htmlparse.y" - { (yyvsp[(1) - (3)].p)->ruled = 1; (yyval.p) = (yyvsp[(3) - (3)].p); } - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 565 "../../lib/common/htmlparse.y" - { addRow (); } - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 565 "../../lib/common/htmlparse.y" - { (yyval.p) = lastRow(); } - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 568 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(1) - (1)].cell); } - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 569 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(2) - (2)].cell); } - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 570 "../../lib/common/htmlparse.y" - { (yyvsp[(1) - (3)].cell)->ruled |= HTML_VRULE; (yyval.cell) = (yyvsp[(3) - (3)].cell); } - break; - - case 56: -/* Line 1792 of yacc.c */ -#line 573 "../../lib/common/htmlparse.y" - { setCell((yyvsp[(1) - (2)].cell),(yyvsp[(2) - (2)].tbl),HTML_TBL); } - break; - - case 57: -/* Line 1792 of yacc.c */ -#line 573 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(1) - (4)].cell); } - break; - - case 58: -/* Line 1792 of yacc.c */ -#line 574 "../../lib/common/htmlparse.y" - { setCell((yyvsp[(1) - (2)].cell),(yyvsp[(2) - (2)].txt),HTML_TEXT); } - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 574 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(1) - (4)].cell); } - break; - - case 60: -/* Line 1792 of yacc.c */ -#line 575 "../../lib/common/htmlparse.y" - { setCell((yyvsp[(1) - (2)].cell),(yyvsp[(2) - (2)].img),HTML_IMAGE); } - break; - - case 61: -/* Line 1792 of yacc.c */ -#line 575 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(1) - (4)].cell); } - break; - - case 62: -/* Line 1792 of yacc.c */ -#line 576 "../../lib/common/htmlparse.y" - { setCell((yyvsp[(1) - (1)].cell),mkText(),HTML_TEXT); } - break; - - case 63: -/* Line 1792 of yacc.c */ -#line 576 "../../lib/common/htmlparse.y" - { (yyval.cell) = (yyvsp[(1) - (3)].cell); } - break; - - case 64: -/* Line 1792 of yacc.c */ -#line 579 "../../lib/common/htmlparse.y" - { (yyval.img) = (yyvsp[(1) - (2)].img); } - break; - - case 65: -/* Line 1792 of yacc.c */ -#line 580 "../../lib/common/htmlparse.y" - { (yyval.img) = (yyvsp[(1) - (1)].img); } - break; - - -/* Line 1792 of yacc.c */ -#line 2277 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - /* Make sure YYID is used. */ - return YYID (yyresult); -} - - -/* Line 2055 of yacc.c */ -#line 592 "../../lib/common/htmlparse.y" - - -/* parseHTML: - * Return parsed label or NULL if failure. - * Set warn to 0 on success; 1 for warning message; 2 if no expat. - */ -htmllabel_t* -parseHTML (char* txt, int* warn, htmlenv_t *env) -{ - unsigned char buf[SMALLBUF]; - agxbuf str; - htmllabel_t* l; - sfont_t dfltf; - - dfltf.cfont = NULL; - dfltf.pfont = NULL; - HTMLstate.fontstack = &dfltf; - HTMLstate.tblstack = 0; - HTMLstate.lbl = 0; - HTMLstate.gvc = GD_gvc(env->g); - HTMLstate.fitemList = dtopen(&fstrDisc, Dtqueue); - HTMLstate.fspanList = dtopen(&fspanDisc, Dtqueue); - - agxbinit (&str, SMALLBUF, buf); - HTMLstate.str = &str; - - if (initHTMLlexer (txt, &str, env)) {/* failed: no libexpat - give up */ - *warn = 2; - l = NULL; - } - else { - yyparse(); - *warn = clearHTMLlexer (); - l = HTMLstate.lbl; - } - - dtclose (HTMLstate.fitemList); - dtclose (HTMLstate.fspanList); - - HTMLstate.fitemList = NULL; - HTMLstate.fspanList = NULL; - HTMLstate.fontstack = NULL; - - agxbfree (&str); - - return l; -} - diff --git a/internal/ccall/common/y.tab.h b/internal/ccall/common/y.tab.h deleted file mode 100644 index aaa50f9..0000000 --- a/internal/ccall/common/y.tab.h +++ /dev/null @@ -1,170 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - T_end_br = 258, - T_end_img = 259, - T_row = 260, - T_end_row = 261, - T_html = 262, - T_end_html = 263, - T_end_table = 264, - T_end_cell = 265, - T_end_font = 266, - T_string = 267, - T_error = 268, - T_n_italic = 269, - T_n_bold = 270, - T_n_underline = 271, - T_n_overline = 272, - T_n_sup = 273, - T_n_sub = 274, - T_n_s = 275, - T_HR = 276, - T_hr = 277, - T_end_hr = 278, - T_VR = 279, - T_vr = 280, - T_end_vr = 281, - T_BR = 282, - T_br = 283, - T_IMG = 284, - T_img = 285, - T_table = 286, - T_cell = 287, - T_font = 288, - T_italic = 289, - T_bold = 290, - T_underline = 291, - T_overline = 292, - T_sup = 293, - T_sub = 294, - T_s = 295 - }; -#endif -/* Tokens. */ -#define T_end_br 258 -#define T_end_img 259 -#define T_row 260 -#define T_end_row 261 -#define T_html 262 -#define T_end_html 263 -#define T_end_table 264 -#define T_end_cell 265 -#define T_end_font 266 -#define T_string 267 -#define T_error 268 -#define T_n_italic 269 -#define T_n_bold 270 -#define T_n_underline 271 -#define T_n_overline 272 -#define T_n_sup 273 -#define T_n_sub 274 -#define T_n_s 275 -#define T_HR 276 -#define T_hr 277 -#define T_end_hr 278 -#define T_VR 279 -#define T_vr 280 -#define T_end_vr 281 -#define T_BR 282 -#define T_br 283 -#define T_IMG 284 -#define T_img 285 -#define T_table 286 -#define T_cell 287 -#define T_font 288 -#define T_italic 289 -#define T_bold 290 -#define T_underline 291 -#define T_overline 292 -#define T_sup 293 -#define T_sub 294 -#define T_s 295 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 2058 of yacc.c */ -#line 415 "../../lib/common/htmlparse.y" - - int i; - htmltxt_t* txt; - htmlcell_t* cell; - htmltbl_t* tbl; - textfont_t* font; - htmlimg_t* img; - pitem* p; - - -/* Line 2058 of yacc.c */ -#line 148 "y.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/internal/ccall/dotgen.c b/internal/ccall/dotgen.c deleted file mode 100644 index 92ca3a4..0000000 --- a/internal/ccall/dotgen.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "dotgen/acyclic.c" -#include "dotgen/class1.c" -#include "dotgen/class2.c" -#include "dotgen/cluster.c" -#include "dotgen/compound.c" -#include "dotgen/conc.c" -#include "dotgen/decomp.c" -#include "dotgen/fastgr.c" -#include "dotgen/flat.c" -#include "dotgen/dotinit.c" -#include "dotgen/mincross.c" -#include "dotgen/position.c" -#include "dotgen/rank.c" -#include "dotgen/sameport.c" -#include "dotgen/dotsplines.c" -#include "dotgen/aspect.c" diff --git a/internal/ccall/dotgen/acyclic.c b/internal/ccall/dotgen/acyclic.c deleted file mode 100644 index 107c8d9..0000000 --- a/internal/ccall/dotgen/acyclic.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Break cycles in a directed graph by depth-first search. - */ - -#include "dot.h" - -void reverse_edge(edge_t * e) -{ - edge_t *f; - - delete_fast_edge(e); - if ((f = find_fast_edge(aghead(e), agtail(e)))) - merge_oneway(e, f); - else - virtual_edge(aghead(e), agtail(e), e); -} - -static void -dfs(node_t * n) -{ - int i; - edge_t *e; - node_t *w; - - if (ND_mark(n)) - return; - ND_mark(n) = TRUE; - ND_onstack(n) = TRUE; - for (i = 0; (e = ND_out(n).list[i]); i++) { - w = aghead(e); - if (ND_onstack(w)) { - reverse_edge(e); - i--; - } else { - if (ND_mark(w) == FALSE) - dfs(w); - } - } - ND_onstack(n) = FALSE; -} - - -void acyclic(graph_t * g) -{ - int c; - node_t *n; - - for (c = 0; c < GD_comp(g).size; c++) { - GD_nlist(g) = GD_comp(g).list[c]; - for (n = GD_nlist(g); n; n = ND_next(n)) - ND_mark(n) = FALSE; - for (n = GD_nlist(g); n; n = ND_next(n)) - dfs(n); - } -} - diff --git a/internal/ccall/dotgen/aspect.c b/internal/ccall/dotgen/aspect.c deleted file mode 100644 index 39678a0..0000000 --- a/internal/ccall/dotgen/aspect.c +++ /dev/null @@ -1,2007 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "dot.h" - -/* - * Author: Mohammad T. Irfan - * Summer, 2008 - */ - -/* TODO: - * - Support clusters - * - Support disconnected graphs - * - Provide algorithms for aspect ratios < 1 - */ - -#define MIN_AR 1.0 -#define MAX_AR 20.0 -#define DEF_PASSES 5 -#define DPI 72 - -/* - * NODE GROUPS FOR SAME RANKING - * Node group data structure groups nodes together for - * MIN, MAX, SOURCE, SINK constraints. - * The grouping is based on the union-find data structure and - * provides sequential access to the nodes in the same group. - */ - -/* data structure for node groups */ -typedef struct nodeGroup_t { - node_t **nodes; - int nNodes; - double width, height; -} nodeGroup_t; - -static nodeGroup_t *nodeGroups; -static int nNodeGroups = 0; - -/* computeNodeGroups: - * computeNodeGroups function does the groupings of nodes. - * The grouping is based on the union-find data structure. - */ -static void computeNodeGroups(graph_t * g) -{ - node_t *n; - - nodeGroups = N_GNEW(agnnodes(g), nodeGroup_t); - - nNodeGroups = 0; - - /* initialize node ids. Id of a node is used as an index to the group. */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_id(n) = -1; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_UF_size(n) == 0) { /* no same ranking constraint */ - nodeGroups[nNodeGroups].nodes = NEW(node_t *); - nodeGroups[nNodeGroups].nodes[0] = n; - nodeGroups[nNodeGroups].nNodes = 1; - nodeGroups[nNodeGroups].width = ND_width(n); - nodeGroups[nNodeGroups].height = ND_height(n); - - ND_id(n) = nNodeGroups; - nNodeGroups++; - } else /* group same ranked nodes */ - { - node_t *l = UF_find(n); - if (ND_id(l) > -1) /* leader is already grouped */ - { - int index = ND_id(l); - nodeGroups[index].nodes[nodeGroups[index].nNodes++] = n; - nodeGroups[index].width += ND_width(n); - nodeGroups[index].height = - (nodeGroups[index].height < - ND_height(n)) ? ND_height(n) : nodeGroups[index]. - height; - - ND_id(n) = index; - } else /* create a new group */ - { - nodeGroups[nNodeGroups].nodes = - N_NEW(ND_UF_size(l), node_t *); - - if (l == n) /* node n is the leader */ - { - nodeGroups[nNodeGroups].nodes[0] = l; - nodeGroups[nNodeGroups].nNodes = 1; - nodeGroups[nNodeGroups].width = ND_width(l); - nodeGroups[nNodeGroups].height = ND_height(l); - } else { - nodeGroups[nNodeGroups].nodes[0] = l; - nodeGroups[nNodeGroups].nodes[1] = n; - nodeGroups[nNodeGroups].nNodes = 2; - nodeGroups[nNodeGroups].width = - ND_width(l) + ND_width(n); - nodeGroups[nNodeGroups].height = - (ND_height(l) < - ND_height(n)) ? ND_height(n) : ND_height(l); - } - - ND_id(l) = nNodeGroups; - ND_id(n) = nNodeGroups; - nNodeGroups++; - } - } - } - -} - -/* - * END OF CODES FOR NODE GROUPS - */ - -/* countDummyNodes: - * Count the number of dummy nodes - */ -int countDummyNodes(graph_t * g) -{ - int count = 0; - node_t *n; - edge_t *e; - - /* Count dummy nodes */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { -#ifdef UNUSED - /* this loop can be avoided */ - for (k = ND_rank(agtail(e))+1; k < ND_rank(aghead(e)); k++) { - count++; - } -#endif - /* flat edges do not have dummy nodes */ - if (ND_rank(aghead(e)) != ND_rank(agtail(e))) - count += abs(ND_rank(aghead(e)) - ND_rank(agtail(e))) - 1; - } - } - return count; -} - -/* - * FFDH PACKING ALGORITHM TO ACHIEVE TARGET ASPECT RATIO - */ - -/* - * layerWidthInfo_t: data structure for keeping layer width information - * Each layer consists of a number of node groups. - */ -typedef struct layerWidthInfo_t { - int layerNumber; - nodeGroup_t **nodeGroupsInLayer; - int *removed; /* is the node group removed? */ - int nNodeGroupsInLayer; - int nDummyNodes; - double width; - double height; -} layerWidthInfo_t; - -static layerWidthInfo_t *layerWidthInfo = NULL; -static int *sortedLayerIndex; -static int nLayers = 0; - -/* computeLayerWidths: - */ -static void computeLayerWidths(graph_t * g) -{ - int i; - node_t *v; - node_t *n; - edge_t *e; - - nLayers = 0; - - /* free previously allocated memory */ - if (layerWidthInfo) { - for (i = 0; i < nNodeGroups; i++) { - if (layerWidthInfo[i].nodeGroupsInLayer) { - int j; - for (j = 0; j < layerWidthInfo[i].nNodeGroupsInLayer; j++) { - //if (layerWidthInfo[i].nodeGroupsInLayer[j]) - //free(layerWidthInfo[i].nodeGroupsInLayer[j]); - } - free(layerWidthInfo[i].nodeGroupsInLayer); - } - if (layerWidthInfo[i].removed) - free(layerWidthInfo[i].removed); - } - - free(layerWidthInfo); - } - /* allocate memory - * the number of layers can go up to the number of node groups - */ - layerWidthInfo = N_NEW(nNodeGroups, layerWidthInfo_t); - - for (i = 0; i < nNodeGroups; i++) { - layerWidthInfo[i].nodeGroupsInLayer = - N_NEW(nNodeGroups, nodeGroup_t *); - - layerWidthInfo[i].removed = N_NEW(nNodeGroups, int); - - layerWidthInfo[i].layerNumber = i; - layerWidthInfo[i].nNodeGroupsInLayer = 0; - layerWidthInfo[i].nDummyNodes = 0; - layerWidthInfo[i].width = 0.0; - layerWidthInfo[i].height = 0.0; - } - - - - /* Count dummy nodes in the layer */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - int k; - - /* FIX: This loop maybe unnecessary, but removing it and using - * the commented codes next, gives a segmentation fault. I - * forgot the reason why. - */ - for (k = ND_rank(agtail(e)) + 1; k < ND_rank(aghead(e)); k++) { - layerWidthInfo[k].nDummyNodes++; - } - -#ifdef UNUSED - if (ND_rank(aghead(e)) != ND_rank(agtail(e))) - /* flat edges do not have dummy nodes */ - layerWidthInfo[k].nDummyNodes = abs(ND_rank(aghead(e)) - ND_rank(agtail(e))) - 1; -#endif - } - -#ifdef UNUSED - /***************************************************************** - * This code is removed. It considers dummy nodes in layer width, - * which does not give good results in experiments. - *****************************************************************/ - - for (i = 0; i < nNodeGroups; i++) { - v = nodeGroups[i].nodes[0]; - layerWidthInfo[ND_rank(v)].width = (layerWidthInfo[ND_rank(v)].nDummyNodes - 1) * GD_nodesep(g); - } -#endif - - /* gather the layer information */ - for (i = 0; i < nNodeGroups; i++) { - v = nodeGroups[i].nodes[0]; - if (ND_rank(v) + 1 > nLayers) /* update the number of layers */ - nLayers = ND_rank(v) + 1; - - layerWidthInfo[ND_rank(v)].width += - nodeGroups[i].width * DPI + (layerWidthInfo[ND_rank(v)].width > - 0) * GD_nodesep(g); - if (layerWidthInfo[ND_rank(v)].height < nodeGroups[i].height * DPI) - layerWidthInfo[ND_rank(v)].height = nodeGroups[i].height * DPI; - layerWidthInfo[ND_rank(v)]. - nodeGroupsInLayer[layerWidthInfo[ND_rank(v)]. - nNodeGroupsInLayer] = &nodeGroups[i]; - layerWidthInfo[ND_rank(v)].nNodeGroupsInLayer++; - } - -} - -/* compFunction: - * Comparison function to be used in qsort. - * For sorting the layers by nonincreasing width - */ -static int compFunction(const void *a, const void *b) -{ - int *ind1 = (int *) a; - int *ind2 = (int *) b; - - return (layerWidthInfo[*ind2].width > - layerWidthInfo[*ind1].width) - (layerWidthInfo[*ind2].width < - layerWidthInfo[*ind1].width); -} - -/* sortLayers: - * Sort the layers by width (nonincreasing order) - * qsort should be replaced by insertion sort for better performance. - * (layers are "almost" sorted during iterations) - */ -static void sortLayers(graph_t * g) -{ - qsort(sortedLayerIndex, agnnodes(g), sizeof(int), compFunction); -} - -#ifdef UNUSED -/* getMaxDummyNodes: - * get the max # of dummy nodes on the incoming edges to a nodeGroup - */ -static int getMaxDummyNodes(nodeGroup_t * ng) -{ - int i, max = 0, cnt = 0; - for (i = 0; i < ng->nNodes; i++) { - node_t *n = ng->nodes[i]; - edge_t *e; - graph_t *g = agraphof(n); - for (e = agfstin(g, n); e; e = agnxtin(g, e)) { - cnt += ND_rank(aghead(e)) - ND_rank(agtail(e)); // it's 1 more than the original count - if (ND_rank(aghead(e)) - ND_rank(agtail(e)) > max) - max = ND_rank(aghead(e)) - ND_rank(agtail(e)); - } - } - - return max; -} -#endif - -/* getOutDegree: - * Return the sum of out degrees of the nodes in a node group. - */ -static int getOutDegree(nodeGroup_t * ng) -{ - int i, cnt = 0; - for (i = 0; i < ng->nNodes; i++) { - node_t *n = ng->nodes[i]; - edge_t *e; - graph_t *g = agraphof(n); - - /* count outdegree. This loop might be unnecessary. */ - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - cnt++; - } - } - - return cnt; -} - -/* compFunction2: - * Comparison function to be used in qsort. - * For sorting the node groups by their out degrees (nondecreasing) - */ -static int compFunction2(const void *a, const void *b) -{ - nodeGroup_t **ind1 = (nodeGroup_t **) a, **ind2 = (nodeGroup_t **) b; - - int cnt1 = getOutDegree(*ind1); - int cnt2 = getOutDegree(*ind2); - - return (cnt2 < cnt1) - (cnt2 > cnt1); -} - -#ifdef UNUSED -/* compFunction3: - * Comparison function to be used in qsort. - * For sorting the node groups by their height & width - */ -static int compFunction3(const void *a, const void *b) -{ - nodeGroup_t **ind1 = (nodeGroup_t **) a, **ind2 = (nodeGroup_t **) b; - if ((*ind2)->height == (*ind1)->height) - return ((*ind2)->width < (*ind1)->width) - ((*ind2)->width > - (*ind1)->width); - - return ((*ind2)->height < (*ind1)->height) - ((*ind2)->height > - (*ind1)->height); -} - -/***************************************************************** - * The following commented codes are no longer used - * Originally used in the cocktail tool. - *****************************************************************/ -/* checkLayerConstraints: - * check if there is any node group in the layer - * that is not constrained by MIN/MAX/SOURCE/SINK-RANK constraints. - */ -static int checkLayerConstraints(layerWidthInfo_t lwi) -{ - int i; - for (i = 0; i < lwi.nNodeGroupsInLayer; i++) { - if (lwi.nodeGroupsInLayer[i]->nNodes > 0) { - int rtype = ND_ranktype(lwi.nodeGroupsInLayer[i]->nodes[0]); - if (rtype != MINRANK && rtype != MAXRANK && rtype != SOURCERANK - && rtype != SINKRANK) - return 1; - } - } - - return 0; -} - -/* checkLayerConstraints: - * check if all the node groups in the layer are - * constrained by MIN/MAX/SOURCE/SINK-RANK constraints - */ -static int checkLayerConstraints(layerWidthInfo_t lwi) -{ - int i; - for (i = 0; i < lwi.nNodeGroupsInLayer; i++) { - if (lwi.nodeGroupsInLayer[i]->nNodes > 0) { - int rtype = ND_ranktype(lwi.nodeGroupsInLayer[i]->nodes[0]); - if (rtype != MINRANK && rtype != MAXRANK && rtype != SOURCERANK - && rtype != SINKRANK) - return 0; - } - } - - return 1; -} - -/* checkNodeGroupConstraints: - * check if the node group is not constrained by - * MIN/MAX/SOURCE/SINK-RANK constraints - * Only used in the cocktail tool. - */ -static int checkNodeGroupConstraints(nodeGroup_t * ndg) -{ - int i; - int rtype = ND_ranktype(ndg->nodes[0]); - - if (rtype != MINRANK && rtype != MAXRANK && rtype != SOURCERANK - && rtype != SINKRANK) - return 1; - - return 0; -} - -/* checkHorizontalEdge: - * check if there is an edge from ng to a node in - * layerWidthInfo[nextLayerIndex]. - * Only used in the cocktail tool. - */ -static int -checkHorizontalEdge(graph_t * g, nodeGroup_t * ng, int nextLayerIndex) -{ - int i; - edge_t *e; - - for (i = 0; i < ng->nNodes; i++) { - for (e = agfstout(g, ng->nodes[i]); e; e = agnxtout(g, e)) { - if (layerWidthInfo[nextLayerIndex].layerNumber == - ND_rank(aghead(e))) { - return 1; - } - } - } - - - return 0; -} - -/* hasMaxOrSinkNodes: - * check if the the layer lwi has MAX or SINK nodes - * Only used in the cocktail tool. - */ -static int hasMaxOrSinkNodes(layerWidthInfo_t * lwi) -{ - int i, j; - - for (i = 0; i < lwi->nNodeGroupsInLayer; i++) { - if (lwi->removed[i]) - continue; - for (j = 0; j < lwi->nodeGroupsInLayer[i]->nNodes; j++) { - if (ND_ranktype(lwi->nodeGroupsInLayer[i]->nodes[j]) == MAXRANK - || ND_ranktype(lwi->nodeGroupsInLayer[i]->nodes[j]) == - SINKRANK) - return 1; - } - } - - return 0; -} - -/* reduceMaxWidth: - * The following function is no longer used. - * Originally used for FFDH packing heuristic - * FFDH procedure - */ -static void reduceMaxWidth(graph_t * g) -{ - int i; - int maxLayerIndex; // = sortedLayerIndex[0]; - double nextMaxWidth; // = (nLayers > 1) ? layerWidthInfo[sortedLayerIndex[1]].width : 0; - double w = 0; - Agnode_t *v; - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[sortedLayerIndex[i]].nNodeGroupsInLayer <= 1) // || !checkLayerConstraints(layerWidthInfo[sortedLayerIndex[i]])) - continue; - else { - maxLayerIndex = sortedLayerIndex[i]; - nextMaxWidth = - (nLayers > - i + 1) ? layerWidthInfo[sortedLayerIndex[i + - 1]].width : 0; - break; - } - } - - if (i == nLayers) - return; //reduction of layerwidth is not possible. - - - //sort the node groups in maxLayerIndex layer by height and then width, nonincreasing - qsort(layerWidthInfo[maxLayerIndex].nodeGroupsInLayer, - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer, - sizeof(nodeGroup_t *), compFunction2); - //printf("ht0 = %lf, ht1 = %lf\n", ND_height(layerWidthInfo[maxLayerIndex].nodes[0]), ND_height(layerWidthInfo[maxLayerIndex].nodes[1])); - - - if (nextMaxWidth <= layerWidthInfo[maxLayerIndex].width / 2 - || nextMaxWidth == layerWidthInfo[maxLayerIndex].width) - nextMaxWidth = layerWidthInfo[maxLayerIndex].width / 2; - - double targetWidth = nextMaxWidth; //layerWidthInfo[maxLayerIndex].width/2; - - //printf("max = %lf, target = %lf\n", layerWidthInfo[maxLayerIndex].width, targetWidth);//, w + (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])->width ); - //getchar(); - - - //packing by node demotion - int nextLayerIndex = -1; - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].layerNumber == - layerWidthInfo[maxLayerIndex].layerNumber + 1) - nextLayerIndex = i; - } - - if (nextLayerIndex > -1) { - //if (layerWidthInfo[nextLayerIndex].width <= 0.5*layerWidthInfo[maxLayerIndex].width) - //{ - int changed = 0; - //demote nodes to the next layer - for (i = 0; i < layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer; - i++) { - if (layerWidthInfo[maxLayerIndex].removed[i]) - continue; - - if (!checkHorizontalEdge - (g, layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i], - nextLayerIndex) - && w + layerWidthInfo[nextLayerIndex].width + - (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])-> - width <= targetWidth) { - w += (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])-> - width; - changed++; - - int j; - nodeGroup_t *ng = - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]; - - layerWidthInfo[maxLayerIndex].removed[i] = 1; - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer--; - layerWidthInfo[maxLayerIndex].width -= ng->width; - for (j = 0; j < ng->nNodes; j++) - ND_rank(ng->nodes[j])++; - - - layerWidthInfo[nextLayerIndex]. - nodeGroupsInLayer[layerWidthInfo[nextLayerIndex]. - nNodeGroupsInLayer] = ng; - layerWidthInfo[nextLayerIndex]. - removed[layerWidthInfo[nextLayerIndex]. - nNodeGroupsInLayer] = 0; - layerWidthInfo[nextLayerIndex].nNodeGroupsInLayer++; - layerWidthInfo[nextLayerIndex].width += ng->width; - - //int jj; - //for (jj = 0; jj < layerWidthInfo[nextLayerIndex].nNodeGroupsInLayer; jj++) { - //Agnode_t *node = layerWidthInfo[nextLayerIndex].nodeGroupsInLayer[jj]->nodes[0]; - //printf("%s\n", agnameof(node)); - //} - } - - } - - if (changed) { - //printf("Demoted %d nodes\n", changed); - return; - } - //} - } - //packing by creating new layers. Must be commented out if packing by demotion is used - - //going to create a new layer. increase the rank of all higher ranked nodes. (to be modified...) - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (ND_rank(v) > layerWidthInfo[maxLayerIndex].layerNumber) ///////////******** +1 - ND_rank(v)++; - } - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].layerNumber > - layerWidthInfo[maxLayerIndex].layerNumber) - layerWidthInfo[i].layerNumber++; - } - - //now partition the current layer into two layers (to be modified to support general case of > 2 layers) - int flag = 0; //is a new layer created? - int alt = 0; - for (i = 0; i < layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer; i++) { - if (layerWidthInfo[maxLayerIndex].removed[i]) - continue; - - //nodesep-> only if there are > 1 nodes******************************* - if ((w + - (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])->width * - DPI + (w > 0) * GD_nodesep(g) <= targetWidth && alt == 0 - && ND_ranktype(layerWidthInfo[maxLayerIndex]. - nodeGroupsInLayer[i]->nodes[0]) != SINKRANK - && ND_ranktype(layerWidthInfo[maxLayerIndex]. - nodeGroupsInLayer[i]->nodes[0]) != MAXRANK) - || - (ND_ranktype - (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]-> - nodes[0]) != SINKRANK - && ND_ranktype(layerWidthInfo[maxLayerIndex]. - nodeGroupsInLayer[i]->nodes[0]) != MAXRANK - && hasMaxOrSinkNodes(&layerWidthInfo[maxLayerIndex])) - ) - //&& ND_pinned(layerWidthInfo[maxLayerIndex].nodes[i]) == 0 ) - { - w += (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])-> - width * DPI + (w > 0) * GD_nodesep(g); - alt = 1; - } else { - int j; - nodeGroup_t *ng = - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]; - - flag = 1; - - layerWidthInfo[maxLayerIndex].removed[i] = 1; - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer--; - layerWidthInfo[maxLayerIndex].nDummyNodes++; /////************** SHOULD BE INCREASED BY THE SUM OF INDEG OF ALL NODES IN GROUP - layerWidthInfo[maxLayerIndex].width -= - (ng->width * DPI + GD_nodesep(g)); - for (j = 0; j < ng->nNodes; j++) - ND_rank(ng->nodes[j])++; - - //create new layer - layerWidthInfo[nLayers]. - nodeGroupsInLayer[layerWidthInfo[nLayers]. - nNodeGroupsInLayer] = ng; - layerWidthInfo[nLayers].nNodeGroupsInLayer++; - layerWidthInfo[nLayers].layerNumber = ND_rank(ng->nodes[0]); - - layerWidthInfo[nLayers].width += (ng->width * DPI + (layerWidthInfo[nLayers].nNodeGroupsInLayer > 1) * GD_nodesep(g)); // just add the node widths now. - - alt = 0; - } - } - - if (flag) { - //calculate number of dummy nodes - node_t *n; - edge_t *e; - int nDummy = 0; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if ((ND_rank(aghead(e)) > layerWidthInfo[nLayers].layerNumber - && ND_rank(agtail(e)) < - layerWidthInfo[nLayers].layerNumber) - || (ND_rank(aghead(e)) < - layerWidthInfo[nLayers].layerNumber - && ND_rank(agtail(e)) > - layerWidthInfo[nLayers].layerNumber) - ) - nDummy++; - } - - layerWidthInfo[nLayers].nDummyNodes = nDummy; - layerWidthInfo[nLayers].width += - (layerWidthInfo[nLayers].nDummyNodes - 1) * GD_nodesep(g); - nLayers++; - } - - else { - //undo increment of ranks and layerNumbers.***************** - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (ND_rank(v) > layerWidthInfo[maxLayerIndex].layerNumber + 1) - ND_rank(v)--; - } - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].layerNumber > - layerWidthInfo[maxLayerIndex].layerNumber + 1) - layerWidthInfo[i].layerNumber--; - } - } -} -#endif - -/* reduceMaxWidth2: - * This is the main heuristic for partitioning the widest layer. - * Partitioning is based on outdegrees of nodes. - * Replace compFunction2 by compFunction3 if you want to partition - * by node widths and heights. - * FFDH procedure - */ -static void reduceMaxWidth2(graph_t * g) -{ - int i; - int maxLayerIndex = 0; - double nextMaxWidth = 0.0; - double w = 0; - double targetWidth; - int fst; - nodeGroup_t *fstNdGrp; - int ndem; - int p, q; - int limit; - int rem; - int rem2; - - - /* Find the widest layer. it must have at least 2 nodes. */ - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[sortedLayerIndex[i]].nNodeGroupsInLayer <= 1) - continue; - else { - maxLayerIndex = sortedLayerIndex[i]; - /* get the width of the next widest layer */ - nextMaxWidth = - (nLayers > - i + 1) ? layerWidthInfo[sortedLayerIndex[i + - 1]].width : 0; - break; - } - } - - if (i == nLayers) - return; /* reduction of layerwidth is not possible. */ - - /* sort the node groups in maxLayerIndex layer by height and - * then width, nonincreasing - */ - qsort(layerWidthInfo[maxLayerIndex].nodeGroupsInLayer, - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer, - sizeof(nodeGroup_t *), compFunction2); - -#if 0 - printf("\nSorted nodes in mx layer:\n---------------------------\n"); - for (i = 0; i < layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer; i++) { - Agnode_t *node = layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]->nodes[0]; - printf("%s. width=%lf, height=%lf\n", - agnameof(node), node->width, node->height); - } -#endif - - if (nextMaxWidth <= layerWidthInfo[maxLayerIndex].width / 4 - || nextMaxWidth >= layerWidthInfo[maxLayerIndex].width * 3 / 4) - nextMaxWidth = layerWidthInfo[maxLayerIndex].width / 2; - - targetWidth = nextMaxWidth; /* layerWidthInfo[maxLayerIndex].width/2; */ - - /* now partition the current layer into two or more - * layers (determined by the ranking algorithm) - */ - fst = 0; - ndem = 0; - limit = layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer; - rem = 0; - rem2 = 0; - - /* initialize w, the width of the widest layer after partitioning */ - w = 0; - - for (i = 0; i < limit + rem; i++) { - if (layerWidthInfo[maxLayerIndex].removed[i]) { - rem++; - continue; - } - - if ((w + - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]->width * - DPI + (w > 0) * GD_nodesep(g) <= targetWidth) - || !fst) { - w += (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])-> - width * DPI + (w > 0) * GD_nodesep(g); - if (!fst) { - fstNdGrp = - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]; - fst = 1; - } - } else { - nodeGroup_t *ng = - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]; - - -#ifdef UNUSED - /* The following code corrects w by adding dummy node spacing. - * It's no longer used - */ - int l; - for (l = 0; l < ng->nNodes; l++) { - w += (ND_in(ng->nodes[l]).size - 1) * GD_nodesep(g); - } -#endif - - for (p = 0; p < fstNdGrp->nNodes; p++) - for (q = 0; q < ng->nNodes; q++) { - //printf("Trying to add virtual edge: %s -> %s\n", - // agnameof(fstNdGrp->nodes[p]), agnameof(ng->nodes[q])); - - /* The following code is for deletion of long virtual edges. - * It's no longer used. - */ -#ifdef UNUSED - for (s = ND_in(ng->nodes[q]).size - 1; s >= 0; s--) { - ev = ND_in(ng->nodes[q]).list[s]; - - edge_t *et; - int fail = 0; - cnt = 0; - - for (et = agfstin(g, aghead(ev)); et; - et = agnxtin(g, et)) { - if (aghead(et) == aghead(ev) - && agtail(et) == agtail(ev)) { - fail = 1; - break; - } - } - - if (fail) { - //printf("FAIL DETECTED\n"); - continue; - } - - - if (ED_edge_type(ev) == VIRTUAL - && ND_rank(aghead(ev)) > ND_rank(agtail(ev)) + 1) { - //printf("%d. inNode= %s.deleted: %s->%s\n", - // test++, agnameof(ng->nodes[q]), - // agnameof(agtail(ev)), agnameof(aghead(ev))); - - delete_fast_edge(ev); - free(ev); - } - } -#endif - - /* add a new virtual edge */ - edge_t *newVEdge = - virtual_edge(fstNdGrp->nodes[p], ng->nodes[q], - NULL); - ED_edge_type(newVEdge) = VIRTUAL; - ndem++; /* increase number of node demotions */ - } - - /* the following code updates the layer width information. The - * update is not useful in the current version of the heuristic. - */ - layerWidthInfo[maxLayerIndex].removed[i] = 1; - rem2++; - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer--; - /* SHOULD BE INCREASED BY THE SUM OF INDEG OF ALL NODES IN GROUP */ - layerWidthInfo[maxLayerIndex].nDummyNodes++; - layerWidthInfo[maxLayerIndex].width -= - (ng->width * DPI + GD_nodesep(g)); - } - } -} - -#ifdef UNUSED -/* balanceLayers: - * The following is the layer balancing heuristic. - * Balance the widths of the layers as much as possible. - * It's no longer used. - */ -static void balanceLayers(graph_t * g) -{ - int maxLayerIndex, nextLayerIndex, i; - double maxWidth, w; - - //get the max width layer number - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[sortedLayerIndex[i]].nNodeGroupsInLayer <= 1 - || - layerWidthInfo[sortedLayerIndex[i]].layerNumber + 1 == nLayers) - continue; - else { - maxLayerIndex = sortedLayerIndex[i]; - maxWidth = layerWidthInfo[maxLayerIndex].width; - printf("Balancing: maxLayerIndex = %d\n", maxLayerIndex); - break; - } - } - - if (i == nLayers) - return; //reduction of layerwidth is not possible. - - //balancing ~~ packing by node demotion - nextLayerIndex = -1; - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].layerNumber == - layerWidthInfo[maxLayerIndex].layerNumber + 1) { - nextLayerIndex = i; - } - } - - if (nextLayerIndex > -1) { - //if (layerWidthInfo[nextLayerIndex].width <= 0.5*layerWidthInfo[maxLayerIndex].width) - //{ - int changed = 0; - w = 0; - - //demote nodes to the next layer - for (i = 0; i < layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer; - i++) { - if (layerWidthInfo[maxLayerIndex].removed[i]) - continue; - - if (!checkHorizontalEdge - (g, layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i], - nextLayerIndex) - && layerWidthInfo[nextLayerIndex].width - /*+ (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])->width */ - <= layerWidthInfo[maxLayerIndex].width - /*- (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])->width*/ - ) { - w += (layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i])-> - width; - changed++; - - int j; - nodeGroup_t *ng = - layerWidthInfo[maxLayerIndex].nodeGroupsInLayer[i]; - - layerWidthInfo[maxLayerIndex].removed[i] = 1; - layerWidthInfo[maxLayerIndex].nNodeGroupsInLayer--; - layerWidthInfo[maxLayerIndex].width -= (ng->width); - layerWidthInfo[maxLayerIndex].nDummyNodes++; - for (j = 0; j < ng->nNodes; j++) - ND_rank(ng->nodes[j])++; - - - layerWidthInfo[nextLayerIndex]. - nodeGroupsInLayer[layerWidthInfo[nextLayerIndex]. - nNodeGroupsInLayer] = ng; - layerWidthInfo[nextLayerIndex]. - removed[layerWidthInfo[nextLayerIndex]. - nNodeGroupsInLayer] = 0; - layerWidthInfo[nextLayerIndex].nNodeGroupsInLayer++; - layerWidthInfo[nextLayerIndex].width += - (ng->width + GD_nodesep(g)); - } - - } - - if (changed) { - //printf("Demoted %d nodes\n", changed); - return; - } - //} - } -} - -/* applyPacking: - * The following is the initial packing heuristic - * It's no longer used. - */ -static void applyPacking(graph_t * g, double targetAR) -{ - int i; - - sortedLayerIndex = N_NEW(agnnodes(g), int); - - for (i = 0; i < agnnodes(g); i++) { - sortedLayerIndex[i] = i; - } - - - node_t *v; - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - //printf("%s, rank = %d, ranktype = %d\n", agnameof(v), ND_rank(v), ND_ranktype(v)); - } - - //GD_nodesep(g) = 0.25; - //GD_ranksep(g) = 0.25; - //////////////////// - //printf("Nodesep = %d, Ranksep = %d\n",GD_nodesep(g), GD_ranksep(g)); - - - for (i = 0; i < 1; i++) { - //printf("iteration = %d\n----------------------\n", i); - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - //printf("%s rank = %d\n", agnameof(v), ND_rank(v)); - } - - computeLayerWidths(g); - sortLayers(g); - reduceMaxWidth(g); - - //printf("====================\n"); - } - - - int k; - - for (k = 0; k < nLayers - 1; k++) { - int cnt = 0, tg; - if (layerWidthInfo[k].nNodeGroupsInLayer > 7) { - - cnt = 0; - tg = layerWidthInfo[k].nNodeGroupsInLayer - 7; - - for (i = layerWidthInfo[k].nNodeGroupsInLayer - 1; i >= 0; i--) { - - if (layerWidthInfo[k].removed[i]) - continue; - - int j; - nodeGroup_t *ng = layerWidthInfo[k].nodeGroupsInLayer[i]; - - - layerWidthInfo[k].removed[i] = 1; - layerWidthInfo[k].nNodeGroupsInLayer--; - layerWidthInfo[k].nDummyNodes++; - layerWidthInfo[k].width -= - (ng->width * DPI + GD_nodesep(g)); - for (j = 0; j < ng->nNodes; j++) - ND_rank(ng->nodes[j])++; - - //create new layer - layerWidthInfo[k + - 1].nodeGroupsInLayer[layerWidthInfo[k + - 1]. - nNodeGroupsInLayer] = - ng; - layerWidthInfo[k + 1].nNodeGroupsInLayer++; - //layerWidthInfo[k+1].layerNumber = ND_rank(ng->nodes[0]); - - //layerWidthInfo[k+1].width += ( ng->width*DPI + (layerWidthInfo[nLayers].nNodeGroupsInLayer > 1) * GD_nodesep(g) ); // just add the node widths now. - - cnt++; - - if (cnt == tg) - break; - - } - } - } - - //calcualte the max width - int maxW = 0; - int nNodeG = 0, l, nDummy = 0; - int index; - - for (k = 0; k < nLayers; k++) { - //printf("Layer#=%d, #dumNd=%d, width=%0.1lf, node=%s\n", layerWidthInfo[k].layerNumber, layerWidthInfo[k].nDummyNodes, layerWidthInfo[k].width, - // agnameof(layerWidthInfo[k].nodeGroupsInLayer[0]->nodes[0])); - if (layerWidthInfo[k].width > maxW) // && layerWidthInfo[k].nNodeGroupsInLayer > 0) - { - maxW = layerWidthInfo[k].width; - nNodeG = layerWidthInfo[k].nNodeGroupsInLayer; - l = layerWidthInfo[k].layerNumber; - nDummy = layerWidthInfo[k].nDummyNodes; - index = k; - } - } - //printf("Ht=%d, MxW=%d, #ndGr=%d, #dumNd=%d, lyr#=%d, 1stNd=%s\n", (nLayers-1)*DPI, maxW, nNodeG, nDummy, l, agnameof(layerWidthInfo[index].nodeGroupsInLayer[0]->nodes[0])); - - // printf("Finally...\n------------------\n"); - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - //printf("%s, rank = %d, ranktype = %d\n", agnameof(v, ND_rank(v), ND_ranktype(v)); - } - -} -#endif - -/* applyPacking2: - * The following is the packing heuristic for wide layout. - */ -static void applyPacking2(graph_t * g) -{ - int i; - - sortedLayerIndex = N_NEW(agnnodes(g), int); - - for (i = 0; i < agnnodes(g); i++) { - sortedLayerIndex[i] = i; - } - - computeLayerWidths(g); - sortLayers(g); - reduceMaxWidth2(g); - -} - -#ifdef UNUSED -/* applyPacking4: - * The following is the packing heuristic for wide layout. - * It's used with Nikolov-Healy healy heuristic. - */ -void applyPacking4(graph_t * g) -{ - int i; - - sortedLayerIndex = N_NEW(agnnodes(g), int); - - for (i = 0; i < agnnodes(g); i++) { - sortedLayerIndex[i] = i; - } - - - for (i = 0; i < 1; i++) { - /* printf("iteration = %d\n----------------------\n", i); - for (v = agfstnode(g); v; v = agnxtnode(g,v)) - { - printf("%s rank = %d\n", agnameof(v), ND_rank(v)); - } - */ - - - computeLayerWidths(g); - sortLayers(g); - reduceMaxWidth2(g); - //printf("====================\n"); - } -} - -/* - * NOCOLOV & HEALY'S NODE PROMOTION HEURISTIC - */ - -/**************************************************************** - * This data structure is needed for backing up node information - * during node promotion - ****************************************************************/ -typedef struct myNodeInfo_t { - int indegree; - int outdegree; - int rank; - Agnode_t *node; -} myNodeInfo_t; - -myNodeInfo_t *myNodeInfo; - - -/* getMaxLevelNumber: - * return the maximum level number assigned - */ -int getMaxLevelNumber(graph_t * g) -{ - int max; - Agnode_t *n; - - max = ND_rank(agfstnode(g)); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_rank(n) > max) - max = ND_rank(n); - } - - return max; -} - -/* countDummyDiff: - * return the difference in the count of dummy nodes before - * and after promoting the node v - */ -static int countDummyDiff(graph_t * g, Agnode_t * v, int max) -{ - int dummydiff = 0; - Agedge_t *e; - Agnode_t *u; - int maxR = 0; - int j; - - for (j = 0; j < ND_in(v).size; j++) { - e = ND_in(v).list[j]; - u = agtail(e); - - if (myNodeInfo[ND_id(u)].rank == myNodeInfo[ND_id(v)].rank + 1) { - dummydiff += countDummyDiff(g, u, max); - } - } - - if (myNodeInfo[ND_id(v)].rank + 1 < max - || (ND_in(v).size == 0 && myNodeInfo[ND_id(v)].rank + 1 <= max)) - myNodeInfo[ND_id(v)].rank += 1; - - dummydiff = dummydiff - ND_in(v).size + ND_out(v).size; - - - return dummydiff; -} - -/* applyPromotionHeuristic: - * Node Promotion Heuristic - * by Nikolov and Healy - */ -static void applyPromotionHeuristic(graph_t * g) -{ - graph_t graphBkup = *g; - Agnode_t *v; - int promotions; - - int max = getMaxLevelNumber(g); - int count = 0; - int nNodes = agnnodes(g); - int i, j; - - myNodeInfo = N_NEW(nNodes, myNodeInfo_t); - myNodeInfo_t *myNodeInfoBak = N_NEW(nNodes, myNodeInfo_t); - - for (v = agfstnode(g), i = 0; v; v = agnxtnode(g, v), i++) { - myNodeInfo[i].indegree = ND_in(v).size; - myNodeInfo[i].outdegree = ND_out(v).size; - myNodeInfo[i].rank = ND_rank(v); - myNodeInfo[i].node = v; - ND_id(v) = i; - - myNodeInfoBak[i] = myNodeInfo[i]; - } - - do { - promotions = 0; - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (ND_in(v).size > 0) { - if (countDummyDiff(g, v, max) <= 0) { - promotions++; - - for (j = 0; j < nNodes; j++) { - myNodeInfoBak[j] = myNodeInfo[j]; - } - - } else { - for (j = 0; j < nNodes; j++) { - myNodeInfo[j] = myNodeInfoBak[j]; - } - } - } - } - count++; - } while (count < max); - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - ND_rank(v) = myNodeInfo[ND_id(v)].rank; - } -} - -/* - * LONGEST PATH ALGORITHM - */ - -/* allNeighborsAreBelow: - * Return 1 if all the neighbors of n already ranked, else 0 - */ -static int allNeighborsAreBelow(Agnode_t * n) -{ - Agedge_t *e; - /* graph_t *g = agraphof(n); */ - int i; - - //for (e = agfstout(g,n); e; e = agnxtout(g,e)) - for (i = 0; i < ND_out(n).size; i++) { - e = ND_out(n).list[i]; - if (ED_edge_type(e) == VIRTUAL) { - if (ED_to_orig(e) != NULL) - e = ED_to_orig(e); - else if (ND_node_type(aghead(e)) == VIRTUAL) - continue; - } - - if (ND_pinned(aghead(e)) != 2) //neighbor of n is not below - { - return 0; - } - } - - return 1; -} - -/* reverseLevelNumbers: - * In Nikolov and Healy ranking, bottom layer ranking is 0 and - * top layer ranking is the maximum. - * Graphviz does the opposite. - * This function does the reversing from Nikolov to Graphviz. - */ -static void reverseLevelNumbers(graph_t * g) -{ - Agnode_t *n; - int max; - - max = getMaxLevelNumber(g); - - //printf("max = %d\n", max); - - //return; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_rank(n) = max - ND_rank(n); - } -} - -/* doSameRank: - * Maintain the same ranking constraint. - * Can only be used with the Nikolov and Healy algorithm - */ -static void doSameRank(graph_t * g) -{ - int i; - for (i = 0; i < nNodeGroups; i++) { - int j; - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - if (ND_ranktype(nodeGroups[i].nodes[j]) == SAMERANK) //once we find a SAMERANK node in a group- make all the members of the group SAMERANK - { - int k; - int r = ND_rank(UF_find(nodeGroups[i].nodes[j])); - for (k = 0; k < nodeGroups[i].nNodes; k++) { - ND_rank(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = r; - } - - break; - } - } - } -} - -/* doMinRank: - * Maintain the MIN ranking constraint. - * Can only be used with the Nikolov and Healy algorithm - */ -void doMinRank(graph_t * g) -{ - int i; - for (i = 0; i < nNodeGroups; i++) { - int j; - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - if (ND_ranktype(nodeGroups[i].nodes[j]) == MINRANK) //once we find a MINRANK node in a group- make the rank of all the members of the group 0 - { - int k; - for (k = 0; k < nodeGroups[i].nNodes; k++) { - ND_rank(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = 0; - if (ND_ranktype - (nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) != - SOURCERANK) - ND_ranktype(nodeGroups[i]. - nodes[(j + - k) % nodeGroups[i].nNodes]) = - MINRANK; - } - - break; - } - } - } -} - -/* getMaxRank: - * Return the maximum rank among all nodes. - */ -static int getMaxRank(graph_t * g) -{ - int i; - node_t *v; - int maxR = ND_rank(agfstnode(g)); - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - if (ND_rank(v) > maxR) - maxR = ND_rank(v); - } - - return maxR; -} - -/* doMaxRank: - * Maintain the MAX ranking constraint. - * Can only be used with the Nikolov and Healy algorithm - */ -static void doMaxRank(graph_t * g) -{ - int i; - for (i = 0; i < nNodeGroups; i++) { - int j; - int maxR = getMaxRank(g); - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - if (ND_ranktype(nodeGroups[i].nodes[j]) == MAXRANK) //once we find a MAXRANK node in a group- make the rank of all the members of the group MAX - { - int k; - for (k = 0; k < nodeGroups[i].nNodes; k++) { - ND_rank(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = maxR; - if (ND_ranktype - (nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) != - SINKRANK) - ND_ranktype(nodeGroups[i]. - nodes[(j + - k) % nodeGroups[i].nNodes]) = - MAXRANK; - } - - break; - } - } - } -} - -/* doSourceRank: - * Maintain the SOURCE ranking constraint. - * Can only be used with the Nikolov and Healy algorithm - */ -static void doSourceRank(graph_t * g) -{ - int i; - int flag = 0; - - for (i = 0; i < nNodeGroups; i++) { - int j; - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - //once we find a SOURCERANK node in a group- make the rank of all the members of the group 0 - if (ND_ranktype(nodeGroups[i].nodes[j]) == SOURCERANK) { - int k; - for (k = 0; k < nodeGroups[i].nNodes; k++) { - ND_rank(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = 0; - ND_ranktype(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = - SOURCERANK; - } - - flag = 1; - break; - } - } - } - - if (!flag) - return; - - flag = 0; - - //The SourceRank group might be the only group having rank 0. Check if increment of ranking of other nodes is necessary at all. - for (i = 0; i < nNodeGroups; i++) { - if (nodeGroups[i].nNodes > 0 - && ND_ranktype(nodeGroups[i].nodes[0]) != SOURCERANK - && ND_rank(nodeGroups[i].nodes[0]) == 0) { - flag = 1; - break; - } - } - - - if (!flag) - return; - - //Now make all NON-SourceRank nodes' ranking nonzero (increment) - for (i = 0; i < nNodeGroups; i++) { - if (nodeGroups[i].nNodes > 0 - && ND_ranktype(nodeGroups[i].nodes[0]) != SOURCERANK) { - int j; - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - ND_rank(nodeGroups[i].nodes[j])++; - } - } - } -} - -/* doSinkRank: - * Maintain the SINK ranking constraint. - * Can only be used with the Nikolov and Healy algorithm - */ -static void doSinkRank(graph_t * g) -{ - int i, max; - int flag = 0; - - max = getMaxRank(g); - - - //Check if any non-sink node has rank = max - for (i = 0; i < nNodeGroups; i++) { - if (nodeGroups[i].nNodes > 0 - && ND_ranktype(nodeGroups[i].nodes[0]) != SINKRANK - && ND_rank(nodeGroups[i].nodes[0]) == max) { - flag = 1; - break; - } - } - - if (!flag) - return; - - for (i = 0; i < nNodeGroups; i++) { - int j; - - for (j = 0; j < nodeGroups[i].nNodes; j++) { - if (ND_ranktype(nodeGroups[i].nodes[j]) == SINKRANK) //once we find a SINKRANK node in a group- make the rank of all the members of the group: max+1 - { - int k; - for (k = 0; k < nodeGroups[i].nNodes; k++) { - ND_rank(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = - max + 1; - ND_ranktype(nodeGroups[i]. - nodes[(j + k) % nodeGroups[i].nNodes]) = - SINKRANK; - } - - break; - } - } - } -} - -/* rank2: - * Initial codes for ranking (Nikolov-Healy). - * It's no longer used. - */ -void rank2(graph_t * g) -{ - int currentLayer = 1; - int nNodes = agnnodes(g); - int nEdges = agnedges(g); - int nPinnedNodes = 0, nSelected = 0; - Agnode_t *n, **UArray; - int USize = 0; - int i, prevSize = 0; - - UArray = N_NEW(nEdges * 2, Agnode_t *); - - /* make all pinning values 0 */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pinned(n) = 0; - } - - while (nPinnedNodes != nNodes) { - for (nSelected = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_pinned(n) == 0) { - if (allNeighborsAreBelow(n)) { - ND_pinned(n) = 1; - - UArray[USize] = n; - USize++; - - ND_rank(n) = currentLayer; - nPinnedNodes++; - nSelected++; - } - } - } - - if (nSelected == 0) //no node has been selected - { - currentLayer++; - for (i = prevSize; i < USize; i++) { - ND_pinned(UArray[i]) = 2; //pinning value of 2 indicates this node is below the current node under consideration - } - - prevSize = USize; - } - } - - //Apply Nikolov's node promotion heuristic - applyPromotionHeuristic(g); - - //this is for the sake of graphViz layer numbering scheme - reverseLevelNumbers(g); - - computeNodeGroups(g); //groups of UF DS nodes - - //modify the ranking to respect the same ranking constraint - doSameRank(g); - - //satisfy min ranking constraints - doMinRank(g); - doMaxRank(g); - - //satisfy source ranking constraints - doSourceRank(g); - doSinkRank(g); - - //Apply the FFDH algorithm to achieve better aspect ratio; - applyPacking(g, 1); //achieve an aspect ratio of 1 -} -#endif - -/**************************************************************** - * Initialize all the edge types to NORMAL - ****************************************************************/ -void initEdgeTypes(graph_t * g) -{ - edge_t *e; - node_t *n; - int lc; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (lc = 0; lc < ND_in(n).size; lc++) { - e = ND_in(n).list[lc]; - ED_edge_type(e) = NORMAL; - } - } -} - -/* computeCombiAR: - * Compute and return combinatorial aspect ratio - * = - * Width of the widest layer / Height - * (in ranking phase) - */ -static double computeCombiAR(graph_t * g) -{ - int i, maxLayerIndex; - double maxW = 0; - double maxH; - double ratio; - - computeLayerWidths(g); - maxH = (nLayers - 1) * GD_ranksep(g); - - for (i = 0; i < nLayers; i++) { - if (maxW < - layerWidthInfo[i].width + - layerWidthInfo[i].nDummyNodes * GD_nodesep(g)) { - maxW = - layerWidthInfo[i].width + - layerWidthInfo[i].nDummyNodes * GD_nodesep(g); - maxLayerIndex = i; - } - maxH += layerWidthInfo[i].height; - } - - ratio = maxW / maxH; - - return ratio; -} - -#ifdef UNUSED -/* applyExpansion: - * Heuristic for expanding very narrow graphs by edge reversal. - * Needs improvement. - */ -void applyExpansion(graph_t * g) -{ - node_t *sink = NULL; - int i, k; - edge_t *e; - - computeLayerWidths(g); - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].layerNumber == nLayers / 2) { - k = i; - break; - } - } - - //now reverse the edges, from the k-th layer nodes to their parents - for (i = 0; i < layerWidthInfo[k].nNodeGroupsInLayer; i++) { - int p; - nodeGroup_t *ng = layerWidthInfo[k].nodeGroupsInLayer[i]; - for (p = 0; p < ng->nNodes; p++) { - node_t *nd = ng->nodes[p]; - - while (e = ND_in(nd).list[0]) { - printf("Reversing edge: %s->%s\n", agnemeof(agtail(e)), - agnameof(aghead(e))); - reverse_edge(e); - } - - int j, l; - node_t *v3; - edge_t *e3; - for (v3 = agfstnode(g); v3; v3 = agnxtnode(g, v3)) { - for (e3 = agfstout(g, v3); e3; e3 = agnxtout(g, e3)) { - if (ND_rank(aghead(e3)) > k && ND_rank(agtail(e3)) < k) { - printf("Reversing long edge: %s->%s\n", - agnameof(agtail(e3)), agnameof(aghead(e3))); - reverse_edge(e3); - } - - } - } - - /*for (l = 0; l < nLayers; l++) { - if (layerWidthInfo[l].layerNumber <= k) - continue; - - for (j = 0; j < layerWidthInfo[l].nNodeGroupsInLayer; j++) { - int q; - nodeGroup_t *ng2 = layerWidthInfo[l].nodeGroupsInLayer[j]; - for (q = 0; q < ng2->nNodes; q++) { - node_t *nd2 = ng2->nodes[q]; - edge_t *e2; - int s = 0; - while (e2 = ND_in(nd2).list[s]) { - if (ND_rank(agtail(e2)) < k) { - printf("Reversing edge: %s->%s\n", - agnameof(agtail(e2)), agnameof(aghead(e2))); - getchar(); - //reverse_edge(e2); - } - else s++; - } - } - } - } */ - - if (sink == NULL) { - int brFlag = 1; - for (l = 0; l < nLayers && brFlag; l++) { - for (j = 0; - j < layerWidthInfo[l].nNodeGroupsInLayer - && brFlag; j++) { - int q; - nodeGroup_t *ng2 = - layerWidthInfo[l].nodeGroupsInLayer[j]; - for (q = 0; q < ng2->nNodes && brFlag; q++) { - node_t *nd2 = ng2->nodes[q]; - if (ND_in(nd2).size == 0) { - sink = nd2; - brFlag = 0; - } - } - } - } - - } - - virtual_edge(nd, /*sink */ - layerWidthInfo[0].nodeGroupsInLayer[0]->nodes[0], - NULL); - } - } - - //collapse_sets(g); -} -#endif - -/* zapLayers: - * After applying the expansion heuristic, some layers are - * found to be empty. - * This function removes the empty layers. - */ -static void zapLayers(graph_t * g) -{ - int i, j; - int start = 0; - int count = 0; - - /* the layers are sorted by the layer number. now zap the empty layers */ - - for (i = 0; i < nLayers; i++) { - if (layerWidthInfo[i].nNodeGroupsInLayer == 0) { - if (count == 0) - start = layerWidthInfo[i].layerNumber; - count++; - } else if (count && layerWidthInfo[i].layerNumber > start) { - for (j = 0; j < layerWidthInfo[i].nNodeGroupsInLayer; j++) { - int q; - nodeGroup_t *ng = layerWidthInfo[i].nodeGroupsInLayer[j]; - for (q = 0; q < ng->nNodes; q++) { - node_t *nd = ng->nodes[q]; - ND_rank(nd) -= count; - } - } - } - } -} - -/* rank3: - * ranking function for dealing with wide/narrow graphs, - * or graphs with varying node widths and heights. - * This function iteratively calls dot's rank1() function and - * applies packing (by calling the applyPacking2 function. - * applyPacking2 function calls the reduceMaxWidth2 function - * for partitioning the widest layer). - * Initially the iterations argument is -1, for which rank3 - * callse applyPacking2 function until the combinatorial aspect - * ratio is <= the desired aspect ratio. - */ -void rank3(graph_t * g, aspect_t * asp) -{ - Agnode_t *n; - int i; - int iterations = asp->nextIter; - double lastAR = MAXDOUBLE; - - computeNodeGroups(g); /* groups of UF DS nodes */ - - for (i = 0; (i < iterations) || (iterations == -1); i++) { - /* initialize all ranks to be 0 */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_rank(n) = 0; - } - - /* need to compute ranking first--- by Network flow */ - - rank1(g); - - asp->combiAR = computeCombiAR(g); - if (Verbose) - fprintf(stderr, "combiAR = %lf\n", asp->combiAR); - - - /* Uncomment the following codes, for working with narrow graphs */ -#ifdef UNUSED - if (combiAR < 0.8 * targetAR) { - char str[20]; - printf("Apply expansion? (y/n):"); - scanf("%s", str); - if (strcmp(str, "y") == 0) - applyExpansion(g); - break; - } else -#endif - /* Success or if no improvement */ - if ((asp->combiAR <= asp->targetAR) || ((iterations == -1) && (lastAR <= asp->combiAR))) { - asp->prevIterations = asp->curIterations; - asp->curIterations = i; - - break; - } - lastAR = asp->combiAR; - /* Apply the FFDH algorithm to reduce the aspect ratio; */ - applyPacking2(g); - } - - /* do network flow once again... incorporating the added edges */ - rank1(g); - - computeLayerWidths(g); - zapLayers(g); - asp->combiAR = computeCombiAR(g); -} - -#ifdef UNUSED -/* NikolovHealy: - * Nikolov-Healy approach to ranking. - * First, use longest path algorithm. - * Then use node promotion heuristic. - * This function is called by rank4 function. - */ -static void NikolovHealy(graph_t * g) -{ - int currentLayer = 1; - int nNodes = agnnodes(g); - int nEdges = agnedges(g); - int nPinnedNodes = 0, nSelected = 0; - Agnode_t *n, **UArray; - int USize = 0; - int i, prevSize = 0; - - /************************************************************************ - * longest path algorithm - ************************************************************************/ - UArray = N_NEW(nEdges * 2, Agnode_t *); - - /* make all pinning values 0 */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pinned(n) = 0; - } - - while (nPinnedNodes != nNodes) { - for (nSelected = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_pinned(n) == 0) { - if (allNeighborsAreBelow(n)) { - ND_pinned(n) = 1; - - UArray[USize] = n; - USize++; - - ND_rank(n) = currentLayer; - nPinnedNodes++; - nSelected++; - } - } - } - - if (nSelected == 0) //no node has been selected - { - currentLayer++; - for (i = prevSize; i < USize; i++) { - ND_pinned(UArray[i]) = 2; //pinning value of 2 indicates this node is below the current node under consideration - } - - prevSize = USize; - } - - } - - /************************************************************************ - * end of longest path algorithm - ************************************************************************/ - - //Apply node promotion heuristic - applyPromotionHeuristic(g); - - //this is for the sake of graphViz layer numbering scheme - reverseLevelNumbers(g); - -} - - -/* rank4: - * This function is calls the NikolovHealy function - * for ranking in the Nikolov-Healy approach. - */ -void rank4(graph_t * g, int iterations) -{ - int currentLayer = 1; - int nNodes = agnnodes(g); - int nEdges = agnedges(g); - int nPinnedNodes = 0, nSelected = 0; - Agnode_t *n, **UArray; - int USize = 0; - int i, prevSize = 0; - - int it; - printf("# of interations of packing: "); - scanf("%d", &it); - printf("it=%d\n", it); - - computeNodeGroups(g); //groups of UF DS nodes - - for (i = 0; i < it; i++) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_rank(n) = 0; - } - - NikolovHealy(g); - - edge_t *e; - int cnt = 0; - int lc; - - - combiAR = computeCombiAR(g); - printf("%d. combiAR = %lf\n", i, combiAR); - - /* - //modify the ranking to respect the same ranking constraint - doSameRank(g); - - //satisfy min ranking constraints - doMinRank(g); - doMaxRank(g); - - //satisfy source ranking constraints - doSourceRank(g); - doSinkRank(g); - */ - - //Apply the FFDH algorithm to achieve better aspect ratio; - applyPacking4(g); - - } - -} -#endif - -/* init_UF_size: - * Initialize the Union Find data structure - */ -void init_UF_size(graph_t * g) -{ - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_UF_size(n) = 0; -} - -aspect_t* -setAspect (Agraph_t * g, aspect_t* adata) -{ - double rv; - char *p; - int r, passes = DEF_PASSES; - - p = agget (g, "aspect"); - - if (!p || ((r = sscanf (p, "%lf,%d", &rv, &passes)) <= 0)) { - adata->nextIter = 0; - adata->badGraph = 0; - return NULL; - } - agerr (AGWARN, "the aspect attribute has been disabled due to implementation flaws - attribute ignored.\n"); - adata->nextIter = 0; - adata->badGraph = 0; - return NULL; - - if (rv < MIN_AR) rv = MIN_AR; - else if (rv > MAX_AR) rv = MAX_AR; - adata->targetAR = rv; - adata->nextIter = -1; - adata->nPasses = passes; - adata->badGraph = 0; - - if (Verbose) - fprintf(stderr, "Target AR = %g\n", adata->targetAR); - - return adata; -} diff --git a/internal/ccall/dotgen/aspect.h b/internal/ccall/dotgen/aspect.h deleted file mode 100644 index f0b8436..0000000 --- a/internal/ccall/dotgen/aspect.h +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef ASPECT_H -#define ASPECT_H - -typedef struct aspect_t { - double targetAR; /* target aspect ratio */ - double combiAR; - int prevIterations; /* no. of iterations in previous pass */ - int curIterations; /* no. of iterations in current pass */ - int nextIter; /* dynamically adjusted no. of iterations */ - int nPasses; /* bound on no. of top-level passes */ - int badGraph; /* hack: set if graph is disconnected or has - * clusters. If so, turn off aspect */ -} aspect_t; - -extern aspect_t* setAspect (Agraph_t * g, aspect_t* adata); -extern void rank3(graph_t * g, aspect_t * asp); -extern void initEdgeTypes(graph_t * g); -extern void init_UF_size(graph_t * g); -extern int countDummyNodes(graph_t * g); - -#endif /* ASPECT_H */ - diff --git a/internal/ccall/dotgen/class1.c b/internal/ccall/dotgen/class1.c deleted file mode 100644 index 721cb04..0000000 --- a/internal/ccall/dotgen/class1.c +++ /dev/null @@ -1,123 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Classify edges for rank assignment phase to - * create temporary edges. - */ - -#include "dot.h" - - -int nonconstraint_edge(edge_t * e) -{ - char *constr; - - if (E_constr && (constr = agxget(e, E_constr))) { - if (constr[0] && mapbool(constr) == FALSE) - return TRUE; - } - return FALSE; -} - -static void -interclust1(graph_t * g, node_t * t, node_t * h, edge_t * e) -{ - node_t *v, *t0, *h0; - int offset, t_len, h_len, t_rank, h_rank; - edge_t *rt, *rh; - - if (ND_clust(agtail(e))) - t_rank = ND_rank(agtail(e)) - ND_rank(GD_leader(ND_clust(agtail(e)))); - else - t_rank = 0; - if (ND_clust(aghead(e))) - h_rank = ND_rank(aghead(e)) - ND_rank(GD_leader(ND_clust(aghead(e)))); - else - h_rank = 0; - offset = ED_minlen(e) + t_rank - h_rank; - if (offset > 0) { - t_len = 0; - h_len = offset; - } else { - t_len = -offset; - h_len = 0; - } - - v = virtual_node(g); - ND_node_type(v) = SLACKNODE; - t0 = UF_find(t); - h0 = UF_find(h); - rt = make_aux_edge(v, t0, t_len, CL_BACK * ED_weight(e)); - rh = make_aux_edge(v, h0, h_len, ED_weight(e)); - ED_to_orig(rt) = ED_to_orig(rh) = e; -} -void class1(graph_t * g) -{ - node_t *n, *t, *h; - edge_t *e, *rep; - - mark_clusters(g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - - /* skip edges already processed */ - if (ED_to_virt(e)) - continue; - - /* skip edges that we want to ignore in this phase */ - if (nonconstraint_edge(e)) - continue; - - t = UF_find(agtail(e)); - h = UF_find(aghead(e)); - - /* skip self, flat, and intra-cluster edges */ - if (t == h) - continue; - - - /* inter-cluster edges require special treatment */ - if (ND_clust(t) || ND_clust(h)) { - interclust1(g, agtail(e), aghead(e), e); - continue; - } - - if ((rep = find_fast_edge(t, h))) - merge_oneway(e, rep); - else - virtual_edge(t, h, e); - -#ifdef NOTDEF - if ((t == agtail(e)) && (h == aghead(e))) { - if (rep = find_fast_edge(t, h)) - merge_oneway(e, rep); - else - virtual_edge(t, h, e); - } else { - f = agfindedge(g, t, h); - if (f && (ED_to_virt(f) == NULL)) - rep = virtual_edge(t, h, f); - else - rep = find_fast_edge(t, h); - if (rep) - merge_oneway(e, rep); - else - virtual_edge(t, h, e); - } -#endif - } - } -} - diff --git a/internal/ccall/dotgen/class2.c b/internal/ccall/dotgen/class2.c deleted file mode 100644 index 349c305..0000000 --- a/internal/ccall/dotgen/class2.c +++ /dev/null @@ -1,307 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* classify edges for mincross/nodepos/splines, using given ranks */ - -#include "dot.h" - -static node_t* -label_vnode(graph_t * g, edge_t * orig) -{ - node_t *v; - pointf dimen; - - dimen = ED_label(orig)->dimen; - v = virtual_node(g); - ND_label(v) = ED_label(orig); - ND_lw(v) = GD_nodesep(agroot(v)); - if (!ED_label_ontop(orig)) { - if (GD_flip(agroot(g))) { - ND_ht(v) = dimen.x; - ND_rw(v) = dimen.y; - } else { - ND_ht(v) = dimen.y; - ND_rw(v) = dimen.x; - } - } - return v; -} - -static void -incr_width(graph_t * g, node_t * v) -{ - int width = GD_nodesep(g) / 2; - ND_lw(v) += width; - ND_rw(v) += width; -} - -static node_t* -plain_vnode(graph_t * g, edge_t * orig) -{ - node_t *v; - v = virtual_node(g); - incr_width(g, v); - return v; -} - -static node_t* -leader_of(graph_t * g, node_t * v) -{ - graph_t *clust; - node_t *rv; - - if (ND_ranktype(v) != CLUSTER) { - /*assert(v == UF_find(v)); could be leaf, so comment out */ - rv = UF_find(v); - } else { - clust = ND_clust(v); - rv = GD_rankleader(clust)[ND_rank(v)]; - } - return rv; -} - -/* make_chain: - * Create chain of dummy nodes for edge orig. - */ -static void -make_chain(graph_t * g, node_t * from, node_t * to, edge_t * orig) -{ - int r, label_rank; - node_t *u, *v; - edge_t *e; - - u = from; - if (ED_label(orig)) - label_rank = (ND_rank(from) + ND_rank(to)) / 2; - else - label_rank = -1; - assert(ED_to_virt(orig) == NULL); - for (r = ND_rank(from) + 1; r <= ND_rank(to); r++) { - if (r < ND_rank(to)) { - if (r == label_rank) - v = label_vnode(g, orig); - else - v = plain_vnode(g, orig); - ND_rank(v) = r; - } else - v = to; - e = virtual_edge(u, v, orig); - virtual_weight(e); - u = v; - } - assert(ED_to_virt(orig) != NULL); -} - -static void -interclrep(graph_t * g, edge_t * e) -{ - node_t *t, *h; - edge_t *ve; - - t = leader_of(g, agtail(e)); - h = leader_of(g, aghead(e)); - if (ND_rank(t) > ND_rank(h)) { - node_t *t0 = t; - t = h; - h = t0; - } - if (ND_clust(t) != ND_clust(h)) { - if ((ve = find_fast_edge(t, h))) { - merge_chain(g, e, ve, TRUE); - return; - } - if (ND_rank(t) == ND_rank(h)) - return; - make_chain(g, t, h, e); - - /* mark as cluster edge */ - for (ve = ED_to_virt(e); ve && (ND_rank(aghead(ve)) <= ND_rank(h)); - ve = ND_out(aghead(ve)).list[0]) - ED_edge_type(ve) = CLUSTER_EDGE; - } - /* else ignore intra-cluster edges at this point */ -} - -static int -is_cluster_edge(edge_t * e) -{ - return ((ND_ranktype(agtail(e)) == CLUSTER) - || (ND_ranktype(aghead(e)) == CLUSTER)); -} - -void merge_chain(graph_t * g, edge_t * e, edge_t * f, int flag) -{ - edge_t *rep; - int lastrank = MAX(ND_rank(agtail(e)), ND_rank(aghead(e))); - - assert(ED_to_virt(e) == NULL); - ED_to_virt(e) = f; - rep = f; - do { - /* interclust multi-edges are not counted now */ - if (flag) - ED_count(rep) += ED_count(e); - ED_xpenalty(rep) += ED_xpenalty(e); - ED_weight(rep) += ED_weight(e); - if (ND_rank(aghead(rep)) == lastrank) - break; - incr_width(g, aghead(rep)); - rep = ND_out(aghead(rep)).list[0]; - } while (rep); -} - -int mergeable(edge_t * e, edge_t * f) -{ - if (e && f && (agtail(e) == agtail(f)) && (aghead(e) == aghead(f)) && - (ED_label(e) == ED_label(f)) && ports_eq(e, f)) - return TRUE; - return FALSE; -} - -void class2(graph_t * g) -{ - int c; - node_t *n, *t, *h; - edge_t *e, *prev, *opp; - - GD_nlist(g) = NULL; - - GD_n_nodes(g) = 0; /* new */ - - mark_clusters(g); - for (c = 1; c <= GD_n_cluster(g); c++) - build_skeleton(g, GD_clust(g)[c]); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (ND_weight_class(aghead(e)) <= 2) - ND_weight_class(aghead(e))++; - if (ND_weight_class(agtail(e)) <= 2) - ND_weight_class(agtail(e))++; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if ((ND_clust(n) == NULL) && (n == UF_find(n))) { - fast_node(g, n); - GD_n_nodes(g)++; - } - prev = NULL; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - - /* already processed */ - if (ED_to_virt(e)) { - prev = e; - continue; - } - - /* edges involving sub-clusters of g */ - if (is_cluster_edge(e)) { - /* following is new cluster multi-edge code */ - if (mergeable(prev, e)) { - if (ED_to_virt(prev)) { - merge_chain(g, e, ED_to_virt(prev), FALSE); - other_edge(e); - } else if (ND_rank(agtail(e)) == ND_rank(aghead(e))) { - merge_oneway(e, prev); - other_edge(e); - } - /* else is an intra-cluster edge */ - continue; - } - interclrep(g, e); - prev = e; - continue; - } - /* merge multi-edges */ - if (prev && (agtail(e) == agtail(prev)) && (aghead(e) == aghead(prev))) { - if (ND_rank(agtail(e)) == ND_rank(aghead(e))) { - merge_oneway(e, prev); - other_edge(e); - continue; - } - if ((ED_label(e) == NULL) && (ED_label(prev) == NULL) - && ports_eq(e, prev)) { - if (Concentrate) - ED_edge_type(e) = IGNORED; - else { - merge_chain(g, e, ED_to_virt(prev), TRUE); - other_edge(e); - } - continue; - } - /* parallel edges with different labels fall through here */ - } - - /* self edges */ - if (agtail(e) == aghead(e)) { - other_edge(e); - prev = e; - continue; - } - - t = UF_find(agtail(e)); - h = UF_find(aghead(e)); - - /* non-leader leaf nodes */ - if ((agtail(e) != t) || (aghead(e) != h)) { - /* FIX need to merge stuff */ - continue; - } - - - /* flat edges */ - if (ND_rank(agtail(e)) == ND_rank(aghead(e))) { - flat_edge(g, e); - prev = e; - continue; - } - - /* forward edges */ - if (ND_rank(aghead(e)) > ND_rank(agtail(e))) { - make_chain(g, agtail(e), aghead(e), e); - prev = e; - continue; - } - - /* backward edges */ - else { - /*other_edge(e); */ - /* avoid when opp==e in undirected graph */ - if ((opp = agfindedge(g, aghead(e), agtail(e))) && (aghead(opp) != aghead(e))) { - /* shadows a forward edge */ - if (ED_to_virt(opp) == NULL) - make_chain(g, agtail(opp), aghead(opp), opp); - if ((ED_label(e) == NULL) && (ED_label(opp) == NULL) - && ports_eq(e, opp)) { - if (Concentrate) { - ED_edge_type(e) = IGNORED; - ED_conc_opp_flag(opp) = TRUE; - } else { /* see above. this is getting out of hand */ - other_edge(e); - merge_chain(g, e, ED_to_virt(opp), TRUE); - } - continue; - } - } - make_chain(g, aghead(e), agtail(e), e); - prev = e; - } - } - } - /* since decompose() is not called on subgraphs */ - if (g != dot_root(g)) { - GD_comp(g).list = ALLOC(1, GD_comp(g).list, node_t *); - GD_comp(g).list[0] = GD_nlist(g); - } -} - diff --git a/internal/ccall/dotgen/cluster.c b/internal/ccall/dotgen/cluster.c deleted file mode 100644 index c84ef3f..0000000 --- a/internal/ccall/dotgen/cluster.c +++ /dev/null @@ -1,442 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "dot.h" - -static node_t* -map_interclust_node(node_t * n) -{ - node_t *rv; - - if ((ND_clust(n) == NULL) || ( GD_expanded(ND_clust(n))) ) - rv = n; - else - rv = GD_rankleader(ND_clust(n))[ND_rank(n)]; - return rv; -} - -/* make d slots starting at position pos (where 1 already exists) */ -static void -make_slots(graph_t * root, int r, int pos, int d) -{ - int i; - node_t *v, **vlist; - vlist = GD_rank(root)[r].v; - if (d <= 0) { - for (i = pos - d + 1; i < GD_rank(root)[r].n; i++) { - v = vlist[i]; - ND_order(v) = i + d - 1; - vlist[ND_order(v)] = v; - } - for (i = GD_rank(root)[r].n + d - 1; i < GD_rank(root)[r].n; i++) - vlist[i] = NULL; - } else { -/*assert(ND_rank(root)[r].n + d - 1 <= ND_rank(root)[r].an);*/ - for (i = GD_rank(root)[r].n - 1; i > pos; i--) { - v = vlist[i]; - ND_order(v) = i + d - 1; - vlist[ND_order(v)] = v; - } - for (i = pos + 1; i < pos + d; i++) - vlist[i] = NULL; - } - GD_rank(root)[r].n += d - 1; -} - -static node_t* -clone_vn(graph_t * g, node_t * vn) -{ - node_t *rv; - int r; - - r = ND_rank(vn); - make_slots(g, r, ND_order(vn), 2); - rv = virtual_node(g); - ND_lw(rv) = ND_lw(vn); - ND_rw(rv) = ND_rw(vn); - ND_rank(rv) = ND_rank(vn); - ND_order(rv) = ND_order(vn) + 1; - GD_rank(g)[r].v[ND_order(rv)] = rv; - return rv; -} - -static void -map_path(node_t * from, node_t * to, edge_t * orig, edge_t * ve, int type) -{ - int r; - node_t *u, *v; - edge_t *e; - - assert(ND_rank(from) < ND_rank(to)); - - if ((agtail(ve) == from) && (aghead(ve) == to)) - return; - - if (ED_count(ve) > 1) { - ED_to_virt(orig) = NULL; - if (ND_rank(to) - ND_rank(from) == 1) { - if ((e = find_fast_edge(from, to)) && (ports_eq(orig, e))) { - merge_oneway(orig, e); - if ((ND_node_type(from) == NORMAL) - && (ND_node_type(to) == NORMAL)) - other_edge(orig); - return; - } - } - u = from; - for (r = ND_rank(from); r < ND_rank(to); r++) { - if (r < ND_rank(to) - 1) - v = clone_vn(dot_root(from), aghead(ve)); - else - v = to; - e = virtual_edge(u, v, orig); - ED_edge_type(e) = type; - u = v; - ED_count(ve)--; - ve = ND_out(aghead(ve)).list[0]; - } - } else { - if (ND_rank(to) - ND_rank(from) == 1) { - if ((ve = find_fast_edge(from, to)) && (ports_eq(orig, ve))) { - /*ED_to_orig(ve) = orig; */ - ED_to_virt(orig) = ve; - ED_edge_type(ve) = type; - ED_count(ve)++; - if ((ND_node_type(from) == NORMAL) - && (ND_node_type(to) == NORMAL)) - other_edge(orig); - } else { - ED_to_virt(orig) = NULL; - ve = virtual_edge(from, to, orig); - ED_edge_type(ve) = type; - } - } - if (ND_rank(to) - ND_rank(from) > 1) { - e = ve; - if (agtail(ve) != from) { - ED_to_virt(orig) = NULL; - e = ED_to_virt(orig) = virtual_edge(from, aghead(ve), orig); - delete_fast_edge(ve); - } else - e = ve; - while (ND_rank(aghead(e)) != ND_rank(to)) - e = ND_out(aghead(e)).list[0]; - if (aghead(e) != to) { - ve = e; - e = virtual_edge(agtail(e), to, orig); - ED_edge_type(e) = type; - delete_fast_edge(ve); - } - } - } -} - -static void -make_interclust_chain(graph_t * g, node_t * from, node_t * to, edge_t * orig) -{ - int newtype; - node_t *u, *v; - - u = map_interclust_node(from); - v = map_interclust_node(to); - if ((u == from) && (v == to)) - newtype = VIRTUAL; - else - newtype = CLUSTER_EDGE; - map_path(u, v, orig, ED_to_virt(orig), newtype); -} - -/* - * attach and install edges between clusters. - * essentially, class2() for interclust edges. - */ -void interclexp(graph_t * subg) -{ - graph_t *g; - node_t *n; - edge_t *e, *prev, *next; - - g = dot_root(subg); - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - - /* N.B. n may be in a sub-cluster of subg */ - prev = NULL; - for (e = agfstedge(g, n); e; e = next) { - next = agnxtedge(g, e, n); - if (agcontains(subg, e)) - continue; - - /* canonicalize edge */ - e = AGMKOUT(e); - /* short/flat multi edges */ - if (mergeable(prev, e)) { - if (ND_rank(agtail(e)) == ND_rank(aghead(e))) - ED_to_virt(e) = prev; - else - ED_to_virt(e) = NULL; - if (ED_to_virt(prev) == NULL) - continue; /* internal edge */ - merge_chain(subg, e, ED_to_virt(prev), FALSE); - safe_other_edge(e); - continue; - } - - /* flat edges */ - if (ND_rank(agtail(e)) == ND_rank(aghead(e))) { - edge_t* fe; - if ((fe = find_flat_edge(agtail(e), aghead(e))) == NULL) { - flat_edge(g, e); - prev = e; - } else if (e != fe) { - safe_other_edge(e); - if (!ED_to_virt(e)) merge_oneway(e, fe); - } - continue; - } - - /* forward edges */ - if (ND_rank(aghead(e)) > ND_rank(agtail(e))) { - make_interclust_chain(g, agtail(e), aghead(e), e); - prev = e; - continue; - } - - /* backward edges */ - else { -/* -I think that make_interclust_chain should create call other_edge(e) anyway - if (agcontains(subg,agtail(e)) - && agfindedge(g,aghead(e),agtail(e))) other_edge(e); -*/ - make_interclust_chain(g, aghead(e), agtail(e), e); - prev = e; - } - } - } -} - -static void -merge_ranks(graph_t * subg) -{ - int i, d, r, pos, ipos; - node_t *v; - graph_t *root; - - root = dot_root(subg); - if (GD_minrank(subg) > 0) - GD_rank(root)[GD_minrank(subg) - 1].valid = FALSE; - for (r = GD_minrank(subg); r <= GD_maxrank(subg); r++) { - d = GD_rank(subg)[r].n; - ipos = pos = ND_order(GD_rankleader(subg)[r]); - make_slots(root, r, pos, d); - for (i = 0; i < GD_rank(subg)[r].n; i++) { - v = GD_rank(root)[r].v[pos] = GD_rank(subg)[r].v[i]; - ND_order(v) = pos++; - /* real nodes automatically have v->root = root graph */ - if (ND_node_type(v) == VIRTUAL) - v->root = agroot(root); - delete_fast_node(subg, v); - fast_node(root, v); - GD_n_nodes(root)++; - } - GD_rank(subg)[r].v = GD_rank(root)[r].v + ipos; - GD_rank(root)[r].valid = FALSE; - } - if (r < GD_maxrank(root)) - GD_rank(root)[r].valid = FALSE; - GD_expanded(subg) = TRUE; -} - -static void -remove_rankleaders(graph_t * g) -{ - int r; - node_t *v; - edge_t *e; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - v = GD_rankleader(g)[r]; - - /* remove the entire chain */ - while ((e = ND_out(v).list[0])) - delete_fast_edge(e); - while ((e = ND_in(v).list[0])) - delete_fast_edge(e); - delete_fast_node(dot_root(g), v); - GD_rankleader(g)[r] = NULL; - } -} - -/* delete virtual nodes of a cluster, and install real nodes or sub-clusters */ -void expand_cluster(graph_t * subg) -{ - /* build internal structure of the cluster */ - class2(subg); - GD_comp(subg).size = 1; - GD_comp(subg).list[0] = GD_nlist(subg); - allocate_ranks(subg); - build_ranks(subg, 0); - merge_ranks(subg); - - /* build external structure of the cluster */ - interclexp(subg); - remove_rankleaders(subg); -} - -/* this function marks every node in with its top-level cluster under */ -void mark_clusters(graph_t * g) -{ - int c; - node_t *n, *nn, *vn; - edge_t *orig, *e; - graph_t *clust; - - /* remove sub-clusters below this level */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_ranktype(n) == CLUSTER) - UF_singleton(n); - ND_clust(n) = NULL; - } - - for (c = 1; c <= GD_n_cluster(g); c++) { - clust = GD_clust(g)[c]; - for (n = agfstnode(clust); n; n = nn) { - nn = agnxtnode(clust,n); - if (ND_ranktype(n) != NORMAL) { - agerr(AGWARN, - "%s was already in a rankset, deleted from cluster %s\n", - agnameof(n), agnameof(g)); - agdelete(clust,n); - continue; - } - UF_setname(n, GD_leader(clust)); - ND_clust(n) = clust; - ND_ranktype(n) = CLUSTER; - - /* here we mark the vnodes of edges in the cluster */ - for (orig = agfstout(clust, n); orig; - orig = agnxtout(clust, orig)) { - if ((e = ED_to_virt(orig))) { - while (e && ND_node_type(vn =aghead(e)) == VIRTUAL) { - ND_clust(vn) = clust; - e = ND_out(aghead(e)).list[0]; - /* trouble if concentrators and clusters are mixed */ - } - } - } - } - } -} - -void build_skeleton(graph_t * g, graph_t * subg) -{ - int r; - node_t *v, *prev, *rl; - edge_t *e; - - prev = NULL; - GD_rankleader(subg) = N_NEW(GD_maxrank(subg) + 2, node_t *); - for (r = GD_minrank(subg); r <= GD_maxrank(subg); r++) { - v = GD_rankleader(subg)[r] = virtual_node(g); - ND_rank(v) = r; - ND_ranktype(v) = CLUSTER; - ND_clust(v) = subg; - if (prev) { - e = virtual_edge(prev, v, NULL); - ED_xpenalty(e) *= CL_CROSS; - } - prev = v; - } - - /* set the counts on virtual edges of the cluster skeleton */ - for (v = agfstnode(subg); v; v = agnxtnode(subg, v)) { - rl = GD_rankleader(subg)[ND_rank(v)]; - ND_UF_size(rl)++; - for (e = agfstout(subg, v); e; e = agnxtout(subg, e)) { - for (r = ND_rank(agtail(e)); r < ND_rank(aghead(e)); r++) { - ED_count(ND_out(rl).list[0])++; - } - } - } - for (r = GD_minrank(subg); r <= GD_maxrank(subg); r++) { - rl = GD_rankleader(subg)[r]; - if (ND_UF_size(rl) > 1) - ND_UF_size(rl)--; - } -} - -void install_cluster(graph_t * g, node_t * n, int pass, nodequeue * q) -{ - int r; - graph_t *clust; - - clust = ND_clust(n); - if (GD_installed(clust) != pass + 1) { - for (r = GD_minrank(clust); r <= GD_maxrank(clust); r++) - install_in_rank(g, GD_rankleader(clust)[r]); - for (r = GD_minrank(clust); r <= GD_maxrank(clust); r++) - enqueue_neighbors(q, GD_rankleader(clust)[r], pass); - GD_installed(clust) = pass + 1; - } -} - -static void mark_lowcluster_basic(Agraph_t * g); -void mark_lowclusters(Agraph_t * root) -{ - Agnode_t *n, *vn; - Agedge_t *orig, *e; - - /* first, zap any previous cluster labelings */ - for (n = agfstnode(root); n; n = agnxtnode(root, n)) { - ND_clust(n) = NULL; - for (orig = agfstout(root, n); orig; orig = agnxtout(root, orig)) { - if ((e = ED_to_virt(orig))) { - while (e && (ND_node_type(vn = aghead(e))) == VIRTUAL) { - ND_clust(vn) = NULL; - e = ND_out(aghead(e)).list[0]; - } - } - } - } - - /* do the recursion */ - mark_lowcluster_basic(root); -} - -static void mark_lowcluster_basic(Agraph_t * g) -{ - Agraph_t *clust; - Agnode_t *n, *vn; - Agedge_t *orig, *e; - int c; - - for (c = 1; c <= GD_n_cluster(g); c++) { - clust = GD_clust(g)[c]; - mark_lowcluster_basic(clust); - } - /* see what belongs to this graph that wasn't already marked */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_clust(n) == NULL) - ND_clust(n) = g; - for (orig = agfstout(g, n); orig; orig = agnxtout(g, orig)) { - if ((e = ED_to_virt(orig))) { - while (e && (ND_node_type(vn = aghead(e))) == VIRTUAL) { - if (ND_clust(vn) == NULL) - ND_clust(vn) = g; - e = ND_out(aghead(e)).list[0]; - } - } - } - } -} diff --git a/internal/ccall/dotgen/compound.c b/internal/ccall/dotgen/compound.c deleted file mode 100644 index bcf2d70..0000000 --- a/internal/ccall/dotgen/compound.c +++ /dev/null @@ -1,505 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* Module for clipping splines to cluster boxes. - */ - -#include "dot.h" - -/* pf2s: - * Convert a pointf to its string representation. - */ -static char *pf2s(pointf p, char *buf) -{ - sprintf(buf, "(%.5g,%.5g)", p.x, p.y); - return buf; -} - -/* Return point where line segment [pp,cp] intersects - * the box bp. Assume cp is outside the box, and pp is - * on or in the box. - */ -static pointf boxIntersectf(pointf pp, pointf cp, boxf * bp) -{ - pointf ipp; - double ppx = pp.x; - double ppy = pp.y; - double cpx = cp.x; - double cpy = cp.y; - pointf ll; - pointf ur; - - ll = bp->LL; - ur = bp->UR; - if (cp.x < ll.x) { - ipp.x = ll.x; - ipp.y = pp.y + (int) ((ipp.x - ppx) * (ppy - cpy) / (ppx - cpx)); - if (ipp.y >= ll.y && ipp.y <= ur.y) - return ipp; - } - if (cp.x > ur.x) { - ipp.x = ur.x; - ipp.y = pp.y + (int) ((ipp.x - ppx) * (ppy - cpy) / (ppx - cpx)); - if (ipp.y >= ll.y && ipp.y <= ur.y) - return ipp; - } - if (cp.y < ll.y) { - ipp.y = ll.y; - ipp.x = pp.x + (int) ((ipp.y - ppy) * (ppx - cpx) / (ppy - cpy)); - if (ipp.x >= ll.x && ipp.x <= ur.x) - return ipp; - } - if (cp.y > ur.y) { - ipp.y = ur.y; - ipp.x = pp.x + (int) ((ipp.y - ppy) * (ppx - cpx) / (ppy - cpy)); - if (ipp.x >= ll.x && ipp.x <= ur.x) - return ipp; - } - - /* failure */ - { - char ppbuf[100], cpbuf[100], llbuf[100], urbuf[100]; - - agerr(AGERR, - "segment [%s,%s] does not intersect box ll=%s,ur=%s\n", - pf2s(pp, ppbuf), pf2s(cp, cpbuf), - pf2s(ll, llbuf), pf2s(ur, urbuf)); - assert(0); - } - return ipp; -} - -/* inBoxf: - * Returns true if p is on or in box bb - */ -static int inBoxf(pointf p, boxf * bb) -{ - return INSIDE(p, *bb); -} - -/* getCluster: - * Returns subgraph of g with given name. - * Returns NULL if no name is given, or subgraph of - * that name does not exist. - */ -static graph_t *getCluster(graph_t * g, char *cluster_name, Dt_t* map) -{ - Agraph_t* sg; - - if (!cluster_name || (*cluster_name == '\0')) - return NULL; - sg = findCluster (map, cluster_name); - if (sg == NULL) { - agerr(AGWARN, "cluster named %s not found\n", cluster_name); - } - return sg; -} - -/* The following functions are derived from pp. 411-415 (pp. 791-795) - * of Graphics Gems. In the code there, they use a SGN function to - * count crossings. This doesn't seem to handle certain special cases, - * as when the last point is on the line. It certainly didn't work - * for us when we used int values; see bug 145. We needed to use CMP instead. - * - * Possibly unnecessary with double values, but harmless. - */ - -/* countVertCross: - * Return the number of times the Bezier control polygon crosses - * the vertical line x = xcoord. - */ -static int countVertCross(pointf * pts, double xcoord) -{ - int i; - int sign, old_sign; - int num_crossings = 0; - - sign = CMP(pts[0].x, xcoord); - if (sign == 0) - num_crossings++; - for (i = 1; i <= 3; i++) { - old_sign = sign; - sign = CMP(pts[i].x, xcoord); - if ((sign != old_sign) && (old_sign != 0)) - num_crossings++; - } - return num_crossings; -} - -/* countHorzCross: - * Return the number of times the Bezier control polygon crosses - * the horizontal line y = ycoord. - */ -static int countHorzCross(pointf * pts, double ycoord) -{ - int i; - int sign, old_sign; - int num_crossings = 0; - - sign = CMP(pts[0].y, ycoord); - if (sign == 0) - num_crossings++; - for (i = 1; i <= 3; i++) { - old_sign = sign; - sign = CMP(pts[i].y, ycoord); - if ((sign != old_sign) && (old_sign != 0)) - num_crossings++; - } - return num_crossings; -} - -/* findVertical: - * Given 4 Bezier control points pts, corresponding to the portion - * of an initial spline with path parameter in the range - * 0.0 <= tmin <= t <= tmax <= 1.0, return t where the spline - * first crosses a vertical line segment - * [(xcoord,ymin),(xcoord,ymax)]. Return -1 if not found. - * This is done by binary subdivision. - */ -static double -findVertical(pointf * pts, double tmin, double tmax, - double xcoord, double ymin, double ymax) -{ - pointf Left[4]; - pointf Right[4]; - double t; - int no_cross; - - if (tmin == tmax) - return tmin; - - no_cross = countVertCross(pts, xcoord); - if (no_cross == 0) - return -1.0; - - /* if 1 crossing and on the line x == xcoord (within 0.005 point) */ - if ((no_cross == 1) && (fabs(pts[3].x - xcoord) <= 0.005)) { - if ((ymin <= pts[3].y) && (pts[3].y <= ymax)) { - return tmax; - } else - return -1.0; - } - - /* split the Bezier into halves, trying the first half first. */ - Bezier(pts, 3, 0.5, Left, Right); - t = findVertical(Left, tmin, (tmin + tmax) / 2.0, xcoord, ymin, ymax); - if (t >= 0.0) - return t; - return findVertical(Right, (tmin + tmax) / 2.0, tmax, xcoord, ymin, - ymax); - -} - -/* findHorizontal: - * Given 4 Bezier control points pts, corresponding to the portion - * of an initial spline with path parameter in the range - * 0.0 <= tmin <= t <= tmax <= 1.0, return t where the spline - * first crosses a horizontal line segment - * [(xmin,ycoord),(xmax,ycoord)]. Return -1 if not found. - * This is done by binary subdivision. - */ -static double -findHorizontal(pointf * pts, double tmin, double tmax, - double ycoord, double xmin, double xmax) -{ - pointf Left[4]; - pointf Right[4]; - double t; - int no_cross; - - if (tmin == tmax) - return tmin; - - no_cross = countHorzCross(pts, ycoord); - if (no_cross == 0) - return -1.0; - - /* if 1 crossing and on the line y == ycoord (within 0.005 point) */ - if ((no_cross == 1) && (fabs(pts[3].y - ycoord) <= 0.005)) { - if ((xmin <= pts[3].x) && (pts[3].x <= xmax)) { - return tmax; - } else - return -1.0; - } - - /* split the Bezier into halves, trying the first half first. */ - Bezier(pts, 3, 0.5, Left, Right); - t = findHorizontal(Left, tmin, (tmin + tmax) / 2.0, ycoord, xmin, - xmax); - if (t >= 0.0) - return t; - return findHorizontal(Right, (tmin + tmax) / 2.0, tmax, ycoord, xmin, - xmax); -} - -/* splineIntersectf: - * Given four spline control points and a box, - * find the shortest portion of the spline from - * pts[0] to the intersection with the box, if any. - * If an intersection is found, the four points are stored in pts[0..3] - * with pts[3] being on the box, and 1 is returned. Otherwise, pts - * is left unchanged and 0 is returned. - */ -static int splineIntersectf(pointf * pts, boxf * bb) -{ - double tmin = 2.0; - double t; - pointf origpts[4]; - int i; - - for (i = 0; i < 4; i++) { - origpts[i] = pts[i]; - } - - t = findVertical(pts, 0.0, 1.0, bb->LL.x, bb->LL.y, bb->UR.y); - if ((t >= 0) && (t < tmin)) { - Bezier(origpts, 3, t, pts, NULL); - tmin = t; - } - t = findVertical(pts, 0.0, MIN(1.0, tmin), bb->UR.x, bb->LL.y, - bb->UR.y); - if ((t >= 0) && (t < tmin)) { - Bezier(origpts, 3, t, pts, NULL); - tmin = t; - } - t = findHorizontal(pts, 0.0, MIN(1.0, tmin), bb->LL.y, bb->LL.x, - bb->UR.x); - if ((t >= 0) && (t < tmin)) { - Bezier(origpts, 3, t, pts, NULL); - tmin = t; - } - t = findHorizontal(pts, 0.0, MIN(1.0, tmin), bb->UR.y, bb->LL.x, - bb->UR.x); - if ((t >= 0) && (t < tmin)) { - Bezier(origpts, 3, t, pts, NULL); - tmin = t; - } - - if (tmin < 2.0) { - return 1; - } else - return 0; -} - -/* makeCompoundEdge: - * If edge e has a cluster head and/or cluster tail, - * clip spline to outside of cluster. - * Requirement: spline is composed of only one part, - * with n control points where n >= 4 and n (mod 3) = 1. - * If edge has arrowheads, reposition them. - */ -static void makeCompoundEdge(graph_t * g, edge_t * e, Dt_t* clustMap) -{ - graph_t *lh; /* cluster containing head */ - graph_t *lt; /* cluster containing tail */ - bezier *bez; /* original Bezier for e */ - bezier *nbez; /* new Bezier for e */ - int starti = 0, endi = 0; /* index of first and last control point */ - node_t *head; - node_t *tail; - boxf *bb; - int i, j; - int size; - pointf pts[4]; - pointf p; - int fixed; - - /* find head and tail target clusters, if defined */ - lh = getCluster(g, agget(e, "lhead"), clustMap); - lt = getCluster(g, agget(e, "ltail"), clustMap); - if (!lt && !lh) - return; - if (!ED_spl(e)) return; - - /* at present, we only handle single spline case */ - if (ED_spl(e)->size > 1) { - agerr(AGWARN, "%s -> %s: spline size > 1 not supported\n", - agnameof(agtail(e)), agnameof(aghead(e))); - return; - } - bez = ED_spl(e)->list; - size = bez->size; - - head = aghead(e); - tail = agtail(e); - - /* allocate new Bezier */ - nbez = GNEW(bezier); - nbez->eflag = bez->eflag; - nbez->sflag = bez->sflag; - - /* if Bezier has four points, almost collinear, - * make line - unimplemented optimization? - */ - - /* If head cluster defined, find first Bezier - * crossing head cluster, and truncate spline to - * box edge. - * Otherwise, leave end alone. - */ - fixed = 0; - if (lh) { - bb = &(GD_bb(lh)); - if (!inBoxf(ND_coord(head), bb)) { - agerr(AGWARN, "%s -> %s: head not inside head cluster %s\n", - agnameof(agtail(e)), agnameof(aghead(e)), agget(e, "lhead")); - } else { - /* If first control point is in bb, degenerate case. Spline - * reduces to four points between the arrow head and the point - * where the segment between the first control point and arrow head - * crosses box. - */ - if (inBoxf(bez->list[0], bb)) { - if (inBoxf(ND_coord(tail), bb)) { - agerr(AGWARN, - "%s -> %s: tail is inside head cluster %s\n", - agnameof(agtail(e)), agnameof(aghead(e)), agget(e, "lhead")); - } else { - assert(bez->sflag); /* must be arrowhead on tail */ - p = boxIntersectf(bez->list[0], bez->sp, bb); - bez->list[3] = p; - bez->list[1] = mid_pointf(p, bez->sp); - bez->list[0] = mid_pointf(bez->list[1], bez->sp); - bez->list[2] = mid_pointf(bez->list[1], p); - if (bez->eflag) - endi = arrowEndClip(e, bez->list, - starti, 0, nbez, bez->eflag); - endi += 3; - fixed = 1; - } - } else { - for (endi = 0; endi < size - 1; endi += 3) { - if (splineIntersectf(&(bez->list[endi]), bb)) - break; - } - if (endi == size - 1) { /* no intersection */ - assert(bez->eflag); - nbez->ep = boxIntersectf(bez->ep, bez->list[endi], bb); - } else { - if (bez->eflag) - endi = - arrowEndClip(e, bez->list, - starti, endi, nbez, bez->eflag); - endi += 3; - } - fixed = 1; - } - } - } - if (fixed == 0) { /* if no lh, or something went wrong, use original head */ - endi = size - 1; - if (bez->eflag) - nbez->ep = bez->ep; - } - - /* If tail cluster defined, find last Bezier - * crossing tail cluster, and truncate spline to - * box edge. - * Otherwise, leave end alone. - */ - fixed = 0; - if (lt) { - bb = &(GD_bb(lt)); - if (!inBoxf(ND_coord(tail), bb)) { - agerr(AGWARN, "%s -> %s: tail not inside tail cluster %s\n", - agnameof(agtail(e)), agnameof(aghead(e)), agget(e, "ltail")); - } else { - /* If last control point is in bb, degenerate case. Spline - * reduces to four points between arrow head, and the point - * where the segment between the last control point and the - * arrow head crosses box. - */ - if (inBoxf(bez->list[endi], bb)) { - if (inBoxf(ND_coord(head), bb)) { - agerr(AGWARN, - "%s -> %s: head is inside tail cluster %s\n", - agnameof(agtail(e)), agnameof(aghead(e)), agget(e, "ltail")); - } else { - assert(bez->eflag); /* must be arrowhead on head */ - p = boxIntersectf(bez->list[endi], nbez->ep, bb); - starti = endi - 3; - bez->list[starti] = p; - bez->list[starti + 2] = mid_pointf(p, nbez->ep); - bez->list[starti + 3] = mid_pointf(bez->list[starti + 2], nbez->ep); - bez->list[starti + 1] = mid_pointf(bez->list[starti + 2], p); - if (bez->sflag) - starti = arrowStartClip(e, bez->list, starti, - endi - 3, nbez, bez->sflag); - fixed = 1; - } - } else { - for (starti = endi; starti > 0; starti -= 3) { - for (i = 0; i < 4; i++) - pts[i] = bez->list[starti - i]; - if (splineIntersectf(pts, bb)) { - for (i = 0; i < 4; i++) - bez->list[starti - i] = pts[i]; - break; - } - } - if (starti == 0) { - assert(bez->sflag); - nbez->sp = - boxIntersectf(bez->sp, bez->list[starti], bb); - } else { - starti -= 3; - if (bez->sflag) - starti = arrowStartClip(e, bez->list, starti, - endi - 3, nbez, bez->sflag); - } - fixed = 1; - } - } - } - if (fixed == 0) { /* if no lt, or something went wrong, use original tail */ - /* Note: starti == 0 */ - if (bez->sflag) - nbez->sp = bez->sp; - } - - /* complete Bezier, free garbage and attach new Bezier to edge - */ - nbez->size = endi - starti + 1; - nbez->list = N_GNEW(nbez->size, pointf); - for (i = 0, j = starti; i < nbez->size; i++, j++) - nbez->list[i] = bez->list[j]; - free(bez->list); - free(bez); - ED_spl(e)->list = nbez; -} -#if 0 -static void dump(Dt_t* map) -{ - clust_t* p; - fprintf (stderr, "# in map: %d\n", dtsize(map)); - for (p=(clust_t*)dtfirst(map);p; p = (clust_t*)dtnext(map,p)) { - fprintf (stderr, " %s\n", p->name); - } -} -#endif - -/* dot_compoundEdges: - */ -void dot_compoundEdges(graph_t * g) -{ - edge_t *e; - node_t *n; - Dt_t* clustMap = mkClustMap (g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - makeCompoundEdge(g, e, clustMap); - } - } - dtclose(clustMap); -} diff --git a/internal/ccall/dotgen/conc.c b/internal/ccall/dotgen/conc.c deleted file mode 100644 index dd13e93..0000000 --- a/internal/ccall/dotgen/conc.c +++ /dev/null @@ -1,243 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * build edge_t concentrators for parallel edges with a common endpoint - */ - -#include "dot.h" -#include - -#define UP 0 -#define DOWN 1 - -static jmp_buf jbuf; - -static boolean samedir(edge_t * e, edge_t * f) -{ - edge_t *e0, *f0; - - for (e0 = e; ED_edge_type(e0) != NORMAL; e0 = ED_to_orig(e0)); - for (f0 = f; ED_edge_type(f0) != NORMAL; f0 = ED_to_orig(f0)); - if (ED_conc_opp_flag(e0)) - return FALSE; - if (ED_conc_opp_flag(f0)) - return FALSE; - return ((ND_rank(agtail(f0)) - ND_rank(aghead(f0))) - * (ND_rank(agtail(e0)) - ND_rank(aghead(e0))) > 0); -} - -static boolean downcandidate(node_t * v) -{ - return ((ND_node_type(v) == VIRTUAL) && (ND_in(v).size == 1) - && (ND_out(v).size == 1) && (ND_label(v) == NULL)); -} - -static boolean bothdowncandidates(node_t * u, node_t * v) -{ - edge_t *e, *f; - e = ND_in(u).list[0]; - f = ND_in(v).list[0]; - if (downcandidate(v) && (agtail(e) == agtail(f))) { - return samedir(e, f) - && (portcmp(ED_tail_port(e), ED_tail_port(f)) == 0); - } - return FALSE; -} - -static boolean upcandidate(node_t * v) -{ - return ((ND_node_type(v) == VIRTUAL) && (ND_out(v).size == 1) - && (ND_in(v).size == 1) && (ND_label(v) == NULL)); -} - -static boolean bothupcandidates(node_t * u, node_t * v) -{ - edge_t *e, *f; - e = ND_out(u).list[0]; - f = ND_out(v).list[0]; - if (upcandidate(v) && (aghead(e) == aghead(f))) { - return samedir(e, f) - && (portcmp(ED_head_port(e), ED_head_port(f)) == 0); - } - return FALSE; -} - -static void mergevirtual(graph_t * g, int r, int lpos, int rpos, int dir) -{ - int i, k; - node_t *left, *right; - edge_t *e, *f, *e0; - - left = GD_rank(g)[r].v[lpos]; - /* merge all right nodes into the leftmost one */ - for (i = lpos + 1; i <= rpos; i++) { - right = GD_rank(g)[r].v[i]; - if (dir == DOWN) { - while ((e = ND_out(right).list[0])) { - for (k = 0; (f = ND_out(left).list[k]); k++) - if (aghead(f) == aghead(e)) - break; - if (f == NULL) - f = virtual_edge(left, aghead(e), e); - while ((e0 = ND_in(right).list[0])) { - merge_oneway(e0, f); - /*ED_weight(f) += ED_weight(e0); */ - delete_fast_edge(e0); - } - delete_fast_edge(e); - } - } else { - while ((e = ND_in(right).list[0])) { - for (k = 0; (f = ND_in(left).list[k]); k++) - if (agtail(f) == agtail(e)) - break; - if (f == NULL) - f = virtual_edge(agtail(e), left, e); - while ((e0 = ND_out(right).list[0])) { - merge_oneway(e0, f); - delete_fast_edge(e0); - } - delete_fast_edge(e); - } - } - assert(ND_in(right).size + ND_out(right).size == 0); - delete_fast_node(g, right); - } - k = lpos + 1; - i = rpos + 1; - while (i < GD_rank(g)[r].n) { - node_t *n; - n = GD_rank(g)[r].v[k] = GD_rank(g)[r].v[i]; - ND_order(n) = k; - k++; - i++; - } - GD_rank(g)[r].n = k; - GD_rank(g)[r].v[k] = NULL; -} - -static void infuse(graph_t * g, node_t * n) -{ - node_t *lead; - - lead = GD_rankleader(g)[ND_rank(n)]; - if ((lead == NULL) || (ND_order(lead) > ND_order(n))) - GD_rankleader(g)[ND_rank(n)] = n; -} - -static void rebuild_vlists(graph_t * g) -{ - int c, i, r, maxi; - node_t *n, *lead; - edge_t *e, *rep; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) - GD_rankleader(g)[r] = NULL; - dot_scan_ranks(g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - infuse(g, n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - for (rep = e; ED_to_virt(rep); rep = ED_to_virt(rep)); - while (ND_rank(aghead(rep)) < ND_rank(aghead(e))) { - infuse(g, aghead(rep)); - rep = ND_out(aghead(rep)).list[0]; - } - } - } - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - lead = GD_rankleader(g)[r]; - if (GD_rank(dot_root(g))[r].v[ND_order(lead)] != lead) { - agerr(AGERR, "rebuiltd_vlists: rank lead %s not in order %d of rank %d\n", - agnameof(lead), ND_order(lead), r); - longjmp(jbuf, 1); - } - GD_rank(g)[r].v = - GD_rank(dot_root(g))[r].v + ND_order((GD_rankleader(g)[r])); - maxi = -1; - for (i = 0; i < GD_rank(g)[r].n; i++) { - if ((n = GD_rank(g)[r].v[i]) == NULL) - break; - if (ND_node_type(n) == NORMAL) { - if (agcontains(g, n)) - maxi = i; - else - break; - } else { - edge_t *e; - for (e = ND_in(n).list[0]; e && ED_to_orig(e); - e = ED_to_orig(e)); - if (e && (agcontains(g, agtail(e))) - && agcontains(g, aghead(e))) - maxi = i; - } - } - if (maxi == -1) - agerr(AGWARN, "degenerate concentrated rank %s,%d\n", agnameof(g), - r); - GD_rank(g)[r].n = maxi + 1; - } - - for (c = 1; c <= GD_n_cluster(g); c++) - rebuild_vlists(GD_clust(g)[c]); -} - -void dot_concentrate(graph_t * g) -{ - int c, r, leftpos, rightpos; - node_t *left, *right; - - if (GD_maxrank(g) - GD_minrank(g) <= 1) - return; - /* this is the downward looking pass. r is a candidate rank. */ - for (r = 1; GD_rank(g)[r + 1].n; r++) { - for (leftpos = 0; leftpos < GD_rank(g)[r].n; leftpos++) { - left = GD_rank(g)[r].v[leftpos]; - if (downcandidate(left) == FALSE) - continue; - for (rightpos = leftpos + 1; rightpos < GD_rank(g)[r].n; - rightpos++) { - right = GD_rank(g)[r].v[rightpos]; - if (bothdowncandidates(left, right) == FALSE) - break; - } - if (rightpos - leftpos > 1) - mergevirtual(g, r, leftpos, rightpos - 1, DOWN); - } - } - /* this is the corresponding upward pass */ - while (r > 0) { - for (leftpos = 0; leftpos < GD_rank(g)[r].n; leftpos++) { - left = GD_rank(g)[r].v[leftpos]; - if (upcandidate(left) == FALSE) - continue; - for (rightpos = leftpos + 1; rightpos < GD_rank(g)[r].n; - rightpos++) { - right = GD_rank(g)[r].v[rightpos]; - if (bothupcandidates(left, right) == FALSE) - break; - } - if (rightpos - leftpos > 1) - mergevirtual(g, r, leftpos, rightpos - 1, UP); - } - r--; - } - if (setjmp(jbuf)) { - agerr(AGPREV, "concentrate=true may not work correctly.\n"); - return; - } - for (c = 1; c <= GD_n_cluster(g); c++) - rebuild_vlists(GD_clust(g)[c]); -} diff --git a/internal/ccall/dotgen/decomp.c b/internal/ccall/dotgen/decomp.c deleted file mode 100644 index 01bae58..0000000 --- a/internal/ccall/dotgen/decomp.c +++ /dev/null @@ -1,225 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Decompose finds the connected components of a graph. - * It searches the temporary edges and ignores non-root nodes. - * The roots of the search are the real nodes of the graph, - * but any virtual nodes discovered are also included in the - * component. - */ - -#include "dot.h" - -static node_t *Last_node; -static char Cmark; - -static void -begin_component(graph_t* g) -{ - Last_node = GD_nlist(g) = NULL; -} - -static void -add_to_component(graph_t* g, node_t * n) -{ - GD_n_nodes(g)++; - ND_mark(n) = Cmark; - if (Last_node) { - ND_prev(n) = Last_node; - ND_next(Last_node) = n; - } else { - ND_prev(n) = NULL; - GD_nlist(g) = n; - } - Last_node = n; - ND_next(n) = NULL; -} - -static void -end_component(graph_t* g) -{ - int i; - - i = GD_comp(g).size++; - GD_comp(g).list = ALLOC(GD_comp(g).size, GD_comp(g).list, node_t *); - GD_comp(g).list[i] = GD_nlist(g); -} - -typedef struct blk_t { - Agnode_t **data; - Agnode_t **endp; - struct blk_t *prev; - struct blk_t *next; -} blk_t; - -typedef struct { - blk_t *fstblk; - blk_t *curblk; - Agnode_t **curp; -} stk_t; - -#define BIGBUF 1000000 - -static void initStk(stk_t* sp, blk_t* bp, node_t** base, int size) -{ - bp->data = base; - bp->endp = bp->data + size; - bp->next = NULL; - bp->prev = NULL; - sp->curblk = sp->fstblk = bp; - sp->curp = sp->curblk->data; -} - -static void freeStk(stk_t* sp) -{ - blk_t* bp = sp->fstblk->next; - blk_t* nbp; - while (bp) { - nbp = bp->next; - free (bp->data); - free (bp); - bp = nbp; - } -} - -static void push(stk_t* sp, node_t * np) -{ - if (sp->curp == sp->curblk->endp) { - if (sp->curblk->next == NULL) { - blk_t *bp = NEW(blk_t); - if (bp == 0) { - agerr(AGERR, "gc: Out of memory\n"); - } - bp->prev = sp->curblk; - bp->next = NULL; - bp->data = N_NEW(BIGBUF, Agnode_t *); - if (bp->data == 0) { - agerr(AGERR, "dot: Out of memory\n"); - } - bp->endp = bp->data + BIGBUF; - sp->curblk->next = bp; - } - sp->curblk = sp->curblk->next; - sp->curp = sp->curblk->data; - } - ND_mark(np) = Cmark+1; - *sp->curp++ = np; -} - -static node_t *pop(stk_t* sp) -{ - if (sp->curp == sp->curblk->data) { - if (sp->curblk == sp->fstblk) - return 0; - sp->curblk = sp->curblk->prev; - sp->curp = sp->curblk->endp; - } - sp->curp--; - return *sp->curp; -} - -/* search_component: - * iterative dfs for components. - * We process the edges in reverse order of the recursive version to maintain - * the processing order of the nodes. - * Since are using a stack, we need to indicate nodes on the stack. Nodes unprocessed - * in this call to decompose will have mark < Cmark; processed nodes will have mark=Cmark; - * so we use mark = Cmark+1 to indicate nodes on the stack. - */ -static void -search_component(stk_t* stk, graph_t * g, node_t * n) -{ - int c, i; - elist vec[4]; - node_t *other; - edge_t *e; - edge_t **ep; - - push(stk, n); - while ((n = pop(stk))) { - if (ND_mark(n) == Cmark) continue; - add_to_component(g, n); - vec[0] = ND_out(n); - vec[1] = ND_in(n); - vec[2] = ND_flat_out(n); - vec[3] = ND_flat_in(n); - - for (c = 3; c >= 0; c--) { - if (vec[c].list) { - for (i = vec[c].size-1, ep = vec[c].list+i; i >= 0; i--, ep--) { - e = *ep; - if ((other = aghead(e)) == n) - other = agtail(e); - if ((ND_mark(other) != Cmark) && (other == UF_find(other))) - push(stk, other); - } - } - } - } -} - -#if 0 -static void -osearch_component(graph_t * g, node_t * n) -{ - int c, i; - elist vec[4]; - node_t *other; - edge_t *e; - - add_to_component(g, n); - vec[0] = ND_out(n); - vec[1] = ND_in(n); - vec[2] = ND_flat_out(n); - vec[3] = ND_flat_in(n); - - for (c = 0; c <= 3; c++) { - if (vec[c].list) - for (i = 0; (e = vec[c].list[i]); i++) { - if ((other = aghead(e)) == n) - other = agtail(e); - if ((ND_mark(other) != Cmark) && (other == UF_find(other))) - osearch_component(g, other); - } - } -} -#endif - -void decompose(graph_t * g, int pass) -{ - graph_t *subg; - node_t *n, *v; - stk_t stk; - blk_t blk; - Agnode_t *base[SMALLBUF]; - - initStk (&stk, &blk, base, SMALLBUF); - if (++Cmark == 0) - Cmark = 1; - GD_n_nodes(g) = GD_comp(g).size = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - v = n; - if ((pass > 0) && (subg = ND_clust(v))) - v = GD_rankleader(subg)[ND_rank(v)]; - else if (v != UF_find(v)) - continue; - if (ND_mark(v) != Cmark) { - begin_component(g); - search_component(&stk, g, v); - end_component(g); - } - } - freeStk (&stk); -} diff --git a/internal/ccall/dotgen/dot.h b/internal/ccall/dotgen/dot.h deleted file mode 100644 index 768b47d..0000000 --- a/internal/ccall/dotgen/dot.h +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#ifndef DOT_H -#define DOT_H - -#include "render.h" -#include "dotprocs.h" - -#endif /* DOT_H */ diff --git a/internal/ccall/dotgen/dotinit.c b/internal/ccall/dotgen/dotinit.c deleted file mode 100644 index f56697c..0000000 --- a/internal/ccall/dotgen/dotinit.c +++ /dev/null @@ -1,517 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include "dot.h" -#include "pack.h" -#include "aspect.h" - -static void -dot_init_subg(graph_t * g, graph_t* droot) -{ - graph_t* subg; - - if ((g != agroot(g))) - agbindrec(g, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - if (g == droot) - GD_dotroot(agroot(g)) = droot; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - dot_init_subg(subg, droot); - } -} - - -static void -dot_init_node(node_t * n) -{ - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //graph custom data - common_init_node(n); - gv_nodesize(n, GD_flip(agraphof(n))); - alloc_elist(4, ND_in(n)); - alloc_elist(4, ND_out(n)); - alloc_elist(2, ND_flat_in(n)); - alloc_elist(2, ND_flat_out(n)); - alloc_elist(2, ND_other(n)); - ND_UF_size(n) = 1; -} - -static void -dot_init_edge(edge_t * e) -{ - char *tailgroup, *headgroup; - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //graph custom data - common_init_edge(e); - - ED_weight(e) = late_int(e, E_weight, 1, 0); - tailgroup = late_string(agtail(e), N_group, ""); - headgroup = late_string(aghead(e), N_group, ""); - ED_count(e) = ED_xpenalty(e) = 1; - if (tailgroup[0] && (tailgroup == headgroup)) { - ED_xpenalty(e) = CL_CROSS; - ED_weight(e) *= 100; - } - if (nonconstraint_edge(e)) { - ED_xpenalty(e) = 0; - ED_weight(e) = 0; - } - - ED_showboxes(e) = late_int(e, E_showboxes, 0, 0); - ED_minlen(e) = late_int(e, E_minlen, 1, 0); -} - -void -dot_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - dot_init_node(n); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - dot_init_edge(e); - } -} - -#if 0 /* not used */ -static void free_edge_list(elist L) -{ - edge_t *e; - int i; - - for (i = 0; i < L.size; i++) { - e = L.list[i]; - free(e); - } -} -#endif - -static void -dot_cleanup_node(node_t * n) -{ - free_list(ND_in(n)); - free_list(ND_out(n)); - free_list(ND_flat_out(n)); - free_list(ND_flat_in(n)); - free_list(ND_other(n)); - free_label(ND_label(n)); - free_label(ND_xlabel(n)); - if (ND_shape(n)) - ND_shape(n)->fns->freefn(n); - agdelrec(n, "Agnodeinfo_t"); -} - -static void free_virtual_edge_list(node_t * n) -{ - edge_t *e; - int i; - - for (i = ND_in(n).size - 1; i >= 0; i--) { - e = ND_in(n).list[i]; - delete_fast_edge(e); - free(e->base.data); - free(e); - } - for (i = ND_out(n).size - 1; i >= 0; i--) { - e = ND_out(n).list[i]; - delete_fast_edge(e); - free(e->base.data); - free(e); - } -} - -static void free_virtual_node_list(node_t * vn) -{ - node_t *next_vn; - - while (vn) { - next_vn = ND_next(vn); - free_virtual_edge_list(vn); - if (ND_node_type(vn) == VIRTUAL) { - free_list(ND_out(vn)); - free_list(ND_in(vn)); - free(vn->base.data); - free(vn); - } - vn = next_vn; - } -} - -static void -dot_cleanup_graph(graph_t * g) -{ - int i; - graph_t *subg; - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - dot_cleanup_graph(subg); - } - if (! agbindrec(g, "Agraphinfo_t", 0, TRUE)) return; - if (GD_clust(g)) free (GD_clust(g)); - if (GD_rankleader(g)) free (GD_rankleader(g)); - - free_list(GD_comp(g)); - if (GD_rank(g)) { - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) - free(GD_rank(g)[i].av); - if (GD_minrank(g) == -1) - free(GD_rank(g)-1); - else - free(GD_rank(g)); - } - if (g != agroot(g)) { - free_label (GD_label(g)); - agdelrec(g,"Agraphinfo_t"); - } -} - -/* delete the layout (but retain the underlying graph) */ -void dot_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - free_virtual_node_list(GD_nlist(g)); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - dot_cleanup_node(n); - } - dot_cleanup_graph(g); -} - -#ifdef DEBUG -int -fastn (graph_t * g) -{ - node_t* u; - int cnt = 0; - for (u = GD_nlist(g); u; u = ND_next(u)) cnt++; - return cnt; -} - -#if DEBUG > 1 -static void -dumpRanks (graph_t * g) -{ - int i, j; - node_t* u; - rank_t *rank = GD_rank(g); - int rcnt = 0; - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - fprintf (stderr, "[%d] :", i); - for (j = 0; j < rank[i].n; j++) { - u = rank[i].v[j]; - rcnt++; - if (streq(agnameof(u),"virtual")) - fprintf (stderr, " %x", u); - else - fprintf (stderr, " %s", agnameof(u)); - - } - fprintf (stderr, "\n"); - } - fprintf (stderr, "count %d rank count = %d\n", fastn(g), rcnt); -} -#endif -#endif - - -static void -remove_from_rank (Agraph_t * g, Agnode_t* n) -{ - Agnode_t* v = NULL; - int j, rk = ND_rank(n); - - for (j = 0; j < GD_rank(g)[rk].n; j++) { - v = GD_rank(g)[rk].v[j]; - if (v == n) { - for (j++; j < GD_rank(g)[rk].n; j++) { - GD_rank(g)[rk].v[j-1] = GD_rank(g)[rk].v[j]; - } - GD_rank(g)[rk].n--; - break; - } - } - assert (v == n); /* if found */ -} - -/* removeFill: - * This removes all of the fill nodes added in mincross. - * It appears to be sufficient to remove them only from the - * rank array and fast node list of the root graph. - */ -static void -removeFill (Agraph_t * g) -{ - Agnode_t* n; - Agnode_t* nxt; - Agraph_t* sg = agsubg (g, "_new_rank", 0); - - if (!sg) return; - for (n = agfstnode(sg); n; n = nxt) { - nxt = agnxtnode(sg, n); - delete_fast_node (g, n); - remove_from_rank (g, n); - dot_cleanup_node (n); - agdelnode(g, n); - } - agdelsubg (g, sg); - -} - -#define ag_xset(x,a,v) agxset(x,a,v) -#define agnodeattr(g,n,v) agattr(g,AGNODE,n,v) - -static void -attach_phase_attrs (Agraph_t * g, int maxphase) -{ - Agsym_t* rk = agnodeattr(g,"rank",""); - Agsym_t* order = agnodeattr(g,"order",""); - Agnode_t* n; - char buf[BUFSIZ]; - - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - if (maxphase >= 1) { - sprintf(buf, "%d", ND_rank(n)); - ag_xset(n,rk,buf); - } - if (maxphase >= 2) { - sprintf(buf, "%d", ND_order(n)); - ag_xset(n,order,buf); - } - } -} - -static void dotLayout(Agraph_t * g) -{ - aspect_t aspect; - aspect_t* asp; - int maxphase = late_int(g, agfindgraphattr(g,"phase"), -1, 1); - - setEdgeType (g, ET_SPLINE); - asp = setAspect (g, &aspect); - - dot_init_subg(g,g); - dot_init_node_edge(g); - - do { - dot_rank(g, asp); - if (maxphase == 1) { - attach_phase_attrs (g, 1); - return; - } - if (aspect.badGraph) { - agerr(AGWARN, "dot does not support the aspect attribute for disconnected graphs or graphs with clusters\n"); - asp = NULL; - aspect.nextIter = 0; - } - dot_mincross(g, (asp != NULL)); - if (maxphase == 2) { - attach_phase_attrs (g, 2); - return; - } - dot_position(g, asp); - if (maxphase == 3) { - attach_phase_attrs (g, 2); /* positions will be attached on output */ - return; - } - aspect.nPasses--; - } while (aspect.nextIter && aspect.nPasses); - if (GD_flags(g) & NEW_RANK) - removeFill (g); - dot_sameports(g); - dot_splines(g); - if (mapbool(agget(g, "compound"))) - dot_compoundEdges(g); -} - -static void -initSubg (Agraph_t* sg, Agraph_t* g) -{ - agbindrec(sg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_drawing(sg) = NEW(layout_t); - GD_drawing(sg)->quantum = GD_drawing(g)->quantum; - GD_drawing(sg)->dpi = GD_drawing(g)->dpi; - GD_gvc(sg) = GD_gvc (g); - GD_charset(sg) = GD_charset (g); - GD_rankdir2(sg) = GD_rankdir2 (g); - GD_nodesep(sg) = GD_nodesep(g); - GD_ranksep(sg) = GD_ranksep(g); - GD_fontnames(sg) = GD_fontnames(g); -} - -/* attachPos: - * the packing library assumes all units are in inches stored in ND_pos, so we - * have to copy the position info there. - */ -static void -attachPos (Agraph_t* g) -{ - node_t* np; - double* ps = N_NEW(2*agnnodes(g), double); - - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - ND_pos(np) = ps; - ps[0] = PS2INCH(ND_coord(np).x); - ps[1] = PS2INCH(ND_coord(np).y); - ps += 2; - } -} - -/* resetCoord: - * Store new position info from pack library call, stored in ND_pos in inches, - * back to ND_coord in points. - */ -static void -resetCoord (Agraph_t* g) -{ - node_t* np = agfstnode(g); - double* sp = ND_pos(np); - double* ps = sp; - - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - ND_pos(np) = 0; - ND_coord(np).x = INCH2PS(ps[0]); - ND_coord(np).y = INCH2PS(ps[1]); - ps += 2; - } - free (sp); -} - -/* copyCluster: - */ -static void -copyCluster (Agraph_t* scl, Agraph_t* cl) -{ - int nclust, j; - Agraph_t* cg; - - agbindrec(cl, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_bb(cl) = GD_bb(scl); - GD_label_pos(cl) = GD_label_pos(scl); - memcpy(GD_border(cl), GD_border(scl), 4*sizeof(pointf)); - nclust = GD_n_cluster(cl) = GD_n_cluster(scl); - GD_clust(cl) = N_NEW(nclust+1,Agraph_t*); - for (j = 1; j <= nclust; j++) { - cg = mapClust(GD_clust(scl)[j]); - GD_clust(cl)[j] = cg; - copyCluster (GD_clust(scl)[j], cg); - } - /* transfer cluster label to original cluster */ - GD_label(cl) = GD_label(scl); - GD_label(scl) = NULL; -} - -/* copyClusterInfo: - * Copy cluster tree and info from components to main graph. - * Note that the original clusters have no Agraphinfo_t at this time. - */ -static void -copyClusterInfo (int ncc, Agraph_t** ccs, Agraph_t* root) -{ - int j, i, nclust = 0; - Agraph_t* sg; - Agraph_t* cg; - - for (i = 0; i < ncc; i++) - nclust += GD_n_cluster(ccs[i]); - - GD_n_cluster(root) = nclust; - GD_clust(root) = N_NEW(nclust+1,Agraph_t*); - nclust = 1; - for (i = 0; i < ncc; i++) { - sg = ccs[i]; - for (j = 1; j <= GD_n_cluster(sg); j++) { - cg = mapClust(GD_clust(sg)[j]); - GD_clust(root)[nclust++] = cg; - copyCluster (GD_clust(sg)[j], cg); - } - } -} - -/* doDot: - * Assume g has nodes. - */ -static void doDot (Agraph_t* g) -{ - Agraph_t **ccs; - Agraph_t *sg; - int ncc; - int i; - pack_info pinfo; - int Pack = getPack(g, -1, CL_OFFSET); - pack_mode mode = getPackModeInfo (g, l_undef, &pinfo); - getPackInfo(g, l_node, CL_OFFSET, &pinfo); - - if ((mode == l_undef) && (Pack < 0)) { - /* No pack information; use old dot with components - * handled during layout - */ - dotLayout(g); - } else { - /* fill in default values */ - if (mode == l_undef) - pinfo.mode = l_graph; - else if (Pack < 0) - Pack = CL_OFFSET; - pinfo.margin = Pack; - pinfo.fixed = 0; - - /* components using clusters */ - ccs = cccomps(g, &ncc, 0); - if (ncc == 1) { - dotLayout(g); - } else if (GD_drawing(g)->ratio_kind == R_NONE) { - pinfo.doSplines = 1; - - for (i = 0; i < ncc; i++) { - sg = ccs[i]; - initSubg (sg, g); - dotLayout (sg); - } - attachPos (g); - packSubgraphs(ncc, ccs, g, &pinfo); - resetCoord (g); - copyClusterInfo (ncc, ccs, g); - } else { - /* Not sure what semantics should be for non-trivial ratio - * attribute with multiple components. - * One possibility is to layout nodes, pack, then apply the ratio - * adjustment. We would then have to re-adjust all positions. - */ - dotLayout(g); - } - - for (i = 0; i < ncc; i++) { - free (GD_drawing(ccs[i])); - dot_cleanup_graph(ccs[i]); - agdelete(g, ccs[i]); - } - free(ccs); - } -} - -void dot_layout(Agraph_t * g) -{ - if (agnnodes(g)) doDot (g); - dotneato_postprocess(g); -} - -Agraph_t * dot_root (void* p) -{ - return GD_dotroot(agroot(p)); -} - diff --git a/internal/ccall/dotgen/dotprocs.h b/internal/ccall/dotgen/dotprocs.h deleted file mode 100644 index 4bef785..0000000 --- a/internal/ccall/dotgen/dotprocs.h +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef DOTPROCS_H -#define DOTPROCS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "aspect.h" - - extern void acyclic(Agraph_t *); - extern void allocate_ranks(Agraph_t *); - extern void build_ranks(Agraph_t *, int); - extern void build_skeleton(Agraph_t *, Agraph_t *); - extern void checkLabelOrder (graph_t* g); - extern void class1(Agraph_t *); - extern void class2(Agraph_t *); - extern void decompose(Agraph_t *, int); - extern void delete_fast_edge(Agedge_t *); - extern void delete_fast_node(Agraph_t *, Agnode_t *); - extern void delete_flat_edge(Agedge_t *); - extern void dot_cleanup(graph_t * g); - extern void dot_layout(Agraph_t * g); - extern void dot_init_node_edge(graph_t * g); - extern void dot_scan_ranks(graph_t * g); - extern void enqueue_neighbors(nodequeue * q, node_t * n0, int pass); - extern void expand_cluster(Agraph_t *); - extern Agedge_t *fast_edge(Agedge_t *); - extern void fast_node(Agraph_t *, Agnode_t *); - extern void fast_nodeapp(Agnode_t *, Agnode_t *); - extern Agedge_t *find_fast_edge(Agnode_t *, Agnode_t *); - extern Agedge_t *find_flat_edge(Agnode_t *, Agnode_t *); - extern void flat_edge(Agraph_t *, Agedge_t *); - extern int flat_edges(Agraph_t *); - extern void install_cluster(Agraph_t *, Agnode_t *, int, nodequeue *); - extern void install_in_rank(Agraph_t *, Agnode_t *); - extern int is_cluster(Agraph_t *); - extern void dot_compoundEdges(Agraph_t *); - extern Agedge_t *make_aux_edge(Agnode_t *, Agnode_t *, double, int); - extern void mark_clusters(Agraph_t *); - extern void mark_lowclusters(Agraph_t *); - extern int mergeable(edge_t * e, edge_t * f); - extern void merge_chain(Agraph_t *, Agedge_t *, Agedge_t *, int); - extern void merge_oneway(Agedge_t *, Agedge_t *); - extern int ncross(Agraph_t *); - extern Agedge_t *new_virtual_edge(Agnode_t *, Agnode_t *, Agedge_t *); - extern int nonconstraint_edge(Agedge_t *); - extern void other_edge(Agedge_t *); - extern void rank1(graph_t * g); - extern int portcmp(port p0, port p1); - extern int ports_eq(edge_t *, edge_t *); - extern void rec_reset_vlists(Agraph_t *); - extern void rec_save_vlists(Agraph_t *); - extern void reverse_edge(Agedge_t *); - extern void safe_other_edge(Agedge_t *); - extern void save_vlist(Agraph_t *); - extern void unmerge_oneway(Agedge_t *); - extern Agedge_t *virtual_edge(Agnode_t *, Agnode_t *, Agedge_t *); - extern Agnode_t *virtual_node(Agraph_t *); - extern void virtual_weight(Agedge_t *); - extern void zapinlist(elist *, Agedge_t *); - -#if defined(_BLD_dot) && defined(_DLL) -# define extern __EXPORT__ -#endif - extern Agraph_t* dot_root(void *); - extern void dot_concentrate(Agraph_t *); - extern void dot_mincross(Agraph_t *, int); - extern void dot_position(Agraph_t *, aspect_t*); - extern void dot_rank(Agraph_t *, aspect_t*); - extern void dot_sameports(Agraph_t *); - extern void dot_splines(Agraph_t *); -#undef extern - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/dotgen/dotsplines.c b/internal/ccall/dotgen/dotsplines.c deleted file mode 100644 index 4e9fc60..0000000 --- a/internal/ccall/dotgen/dotsplines.c +++ /dev/null @@ -1,2564 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * set edge splines. - */ - -#include "dot.h" - -#ifdef ORTHO -#include -#endif - -#define NSUB 9 /* number of subdivisions, re-aiming splines */ -#define CHUNK 128 /* in building list of edges */ - -#define MINW 16 /* minimum width of a box in the edge path */ -#define HALFMINW 8 - -#define FWDEDGE 16 -#define BWDEDGE 32 - -#define MAINGRAPH 64 -#define AUXGRAPH 128 -#define GRAPHTYPEMASK 192 /* the OR of the above */ - -#define MAKEFWDEDGE(new, old) { \ - edge_t *newp; \ - Agedgeinfo_t *info; \ - newp = new; \ - info = (Agedgeinfo_t*)newp->base.data; \ - *info = *(Agedgeinfo_t*)old->base.data; \ - *newp = *old; \ - newp->base.data = (Agrec_t*)info; \ - AGTAIL(newp) = AGHEAD(old); \ - AGHEAD(newp) = AGTAIL(old); \ - ED_tail_port(newp) = ED_head_port(old); \ - ED_head_port(newp) = ED_tail_port(old); \ - ED_edge_type(newp) = VIRTUAL; \ - ED_to_orig(newp) = old; \ -} - -static boxf boxes[1000]; -typedef struct { - int LeftBound, RightBound, Splinesep, Multisep; - boxf* Rank_box; -} spline_info_t; - -static void adjustregularpath(path *, int, int); -static Agedge_t *bot_bound(Agedge_t *, int); -static boolean pathscross(Agnode_t *, Agnode_t *, Agedge_t *, Agedge_t *); -static Agraph_t *cl_bound(graph_t*, Agnode_t *, Agnode_t *); -static int cl_vninside(Agraph_t *, Agnode_t *); -static void completeregularpath(path *, Agedge_t *, Agedge_t *, - pathend_t *, pathend_t *, boxf *, int, int); -static int edgecmp(Agedge_t **, Agedge_t **); -static void make_flat_edge(graph_t*, spline_info_t*, path *, Agedge_t **, int, int, int); -static void make_regular_edge(graph_t* g, spline_info_t*, path *, Agedge_t **, int, int, int); -static boxf makeregularend(boxf, int, double); -static boxf maximal_bbox(graph_t* g, spline_info_t*, Agnode_t *, Agedge_t *, Agedge_t *); -static Agnode_t *_neighbor(graph_t*, Agnode_t *, Agedge_t *, Agedge_t *, int); -static void place_vnlabel(Agnode_t *); -static boxf rank_box(spline_info_t* sp, Agraph_t *, int); -static void recover_slack(Agedge_t *, path *); -static void resize_vn(Agnode_t *, int, int, int); -static void setflags(Agedge_t *, int, int, int); -static int straight_len(Agnode_t *); -static Agedge_t *straight_path(Agedge_t *, int, pointf *, int *); -static Agedge_t *top_bound(Agedge_t *, int); - -#define GROWEDGES (edges = ALLOC (n_edges + CHUNK, edges, edge_t*)) - -static edge_t* -getmainedge(edge_t * e) -{ - edge_t *le = e; - while (ED_to_virt(le)) - le = ED_to_virt(le); - while (ED_to_orig(le)) - le = ED_to_orig(le); - return le; -} - -static boolean spline_merge(node_t * n) -{ - return ((ND_node_type(n) == VIRTUAL) - && ((ND_in(n).size > 1) || (ND_out(n).size > 1))); -} - -static boolean swap_ends_p(edge_t * e) -{ - while (ED_to_orig(e)) - e = ED_to_orig(e); - if (ND_rank(aghead(e)) > ND_rank(agtail(e))) - return FALSE; - if (ND_rank(aghead(e)) < ND_rank(agtail(e))) - return TRUE; - if (ND_order(aghead(e)) >= ND_order(agtail(e))) - return FALSE; - return TRUE; -} - -static splineInfo sinfo = { swap_ends_p, spline_merge }; - -int portcmp(port p0, port p1) -{ - int rv; - if (p1.defined == FALSE) - return (p0.defined ? 1 : 0); - if (p0.defined == FALSE) - return -1; - rv = p0.p.x - p1.p.x; - if (rv == 0) - rv = p0.p.y - p1.p.y; - return rv; -} - -/* swap_bezier: - */ -static void swap_bezier(bezier * old, bezier * new) -{ - pointf *list; - pointf *lp; - pointf *olp; - int i, sz; - - sz = old->size; - list = N_GNEW(sz, pointf); - lp = list; - olp = old->list + (sz - 1); - for (i = 0; i < sz; i++) { /* reverse list of points */ - *lp++ = *olp--; - } - - new->list = list; - new->size = sz; - new->sflag = old->eflag; - new->eflag = old->sflag; - new->sp = old->ep; - new->ep = old->sp; -} - -/* swap_spline: - */ -static void swap_spline(splines * s) -{ - bezier *list; - bezier *lp; - bezier *olp; - int i, sz; - - sz = s->size; - list = N_GNEW(sz, bezier); - lp = list; - olp = s->list + (sz - 1); - for (i = 0; i < sz; i++) { /* reverse and swap list of beziers */ - swap_bezier(olp--, lp++); - } - - /* free old structures */ - for (i = 0; i < sz; i++) - free(s->list[i].list); - free(s->list); - - s->list = list; -} - -/* edge_normalize: - * Some back edges are reversed during layout and the reversed edge - * is used to compute the spline. We would like to guarantee that - * the order of control points always goes from tail to head, so - * we reverse them if necessary. - */ -static void edge_normalize(graph_t * g) -{ - edge_t *e; - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (sinfo.swapEnds(e) && ED_spl(e)) - swap_spline(ED_spl(e)); - } - } -} - -/* resetRW: - * In position, each node has its rw stored in mval and, - * if a node is part of a loop, rw may be increased to - * reflect the loops and associated labels. We restore - * the original value here. - */ -static void -resetRW (graph_t * g) -{ - node_t* n; - - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - if (ND_other(n).list) { - double tmp = ND_rw(n); - ND_rw(n) = ND_mval(n); - ND_mval(n) = tmp; - } - } -} - -/* setEdgeLabelPos: - * Set edge label position information for regular and non-adjacent flat edges. - * Dot has allocated space and position for these labels. This info will be - * used when routing orthogonal edges. - */ -static void -setEdgeLabelPos (graph_t * g) -{ - node_t* n; - textlabel_t* l; - - /* place regular edge labels */ - for (n = GD_nlist(g); n; n = ND_next(n)) { - if (ND_node_type(n) == VIRTUAL) { - if (ND_alg(n)) { // label of non-adjacent flat edge - edge_t* fe = (edge_t*)ND_alg(n); - assert ((l = ED_label(fe))); - l->pos = ND_coord(n); - l->set = TRUE; - } - else if ((l = ND_label(n))) {// label of regular edge - place_vnlabel(n); - } - if (l) updateBB(g, l); - } - } -} - -/* _dot_splines: - * Main spline routing code. - * The normalize parameter allows this function to be called by the - * recursive call in make_flat_edge without normalization occurring, - * so that the edge will only be normalized once in the top level call - * of dot_splines. - */ -static void _dot_splines(graph_t * g, int normalize) -{ - int i, j, k, n_nodes, n_edges, ind, cnt; - node_t *n; - Agedgeinfo_t fwdedgeai, fwdedgebi; - Agedgepair_t fwdedgea, fwdedgeb; - edge_t *e, *e0, *e1, *ea, *eb, *le0, *le1, **edges = NULL; - path *P = NULL; - spline_info_t sd; - int et = EDGE_TYPE(g); - fwdedgea.out.base.data = (Agrec_t*)&fwdedgeai; - fwdedgeb.out.base.data = (Agrec_t*)&fwdedgebi; - - if (et == ET_NONE) return; - if (et == ET_CURVED) { - resetRW (g); - if (GD_has_labels(g->root) & EDGE_LABEL) { - agerr (AGWARN, "edge labels with splines=curved not supported in dot - use xlabels\n"); - } - } -#ifdef ORTHO - if (et == ET_ORTHO) { - resetRW (g); - if (GD_has_labels(g->root) & EDGE_LABEL) { - setEdgeLabelPos (g); - orthoEdges (g, 1); - } - else - orthoEdges (g, 0); - goto finish; - } -#endif - - mark_lowclusters(g); - if (routesplinesinit()) return; - P = NEW(path); - /* FlatHeight = 2 * GD_nodesep(g); */ - sd.Splinesep = GD_nodesep(g) / 4; - sd.Multisep = GD_nodesep(g); - edges = N_NEW(CHUNK, edge_t *); - - /* compute boundaries and list of splines */ - sd.LeftBound = sd.RightBound = 0; - n_edges = n_nodes = 0; - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - n_nodes += GD_rank(g)[i].n; - if ((n = GD_rank(g)[i].v[0])) - sd.LeftBound = MIN(sd.LeftBound, (ND_coord(n).x - ND_lw(n))); - if (GD_rank(g)[i].n && (n = GD_rank(g)[i].v[GD_rank(g)[i].n - 1])) - sd.RightBound = MAX(sd.RightBound, (ND_coord(n).x + ND_rw(n))); - sd.LeftBound -= MINW; - sd.RightBound += MINW; - - for (j = 0; j < GD_rank(g)[i].n; j++) { - n = GD_rank(g)[i].v[j]; - /* if n is the label of a flat edge, copy its position to - * the label. - */ - if (ND_alg(n)) { - edge_t* fe = (edge_t*)ND_alg(n); - assert (ED_label(fe)); - ED_label(fe)->pos = ND_coord(n); - ED_label(fe)->set = TRUE; - } - if ((ND_node_type(n) != NORMAL) && - (sinfo.splineMerge(n) == FALSE)) - continue; - for (k = 0; (e = ND_out(n).list[k]); k++) { - if ((ED_edge_type(e) == FLATORDER) - || (ED_edge_type(e) == IGNORED)) - continue; - setflags(e, REGULAREDGE, FWDEDGE, MAINGRAPH); - edges[n_edges++] = e; - if (n_edges % CHUNK == 0) - GROWEDGES; - } - if (ND_flat_out(n).list) - for (k = 0; (e = ND_flat_out(n).list[k]); k++) { - setflags(e, FLATEDGE, 0, AUXGRAPH); - edges[n_edges++] = e; - if (n_edges % CHUNK == 0) - GROWEDGES; - } - if (ND_other(n).list) { - /* In position, each node has its rw stored in mval and, - * if a node is part of a loop, rw may be increased to - * reflect the loops and associated labels. We restore - * the original value here. - */ - if (ND_node_type(n) == NORMAL) { - double tmp = ND_rw(n); - ND_rw(n) = ND_mval(n); - ND_mval(n) = tmp; - } - for (k = 0; (e = ND_other(n).list[k]); k++) { - setflags(e, 0, 0, AUXGRAPH); - edges[n_edges++] = e; - if (n_edges % CHUNK == 0) - GROWEDGES; - } - } - } - } - - /* Sort so that equivalent edges are contiguous. - * Equivalence should basically mean that 2 edges have the - * same set {(tailnode,tailport),(headnode,headport)}, or - * alternatively, the edges would be routed identically if - * routed separately. - */ - qsort((char *) &edges[0], n_edges, sizeof(edges[0]), - (qsort_cmpf) edgecmp); - - /* FIXME: just how many boxes can there be? */ - P->boxes = N_NEW(n_nodes + 20 * 2 * NSUB, boxf); - sd.Rank_box = N_NEW(i, boxf); - - if (et == ET_LINE) { - /* place regular edge labels */ - for (n = GD_nlist(g); n; n = ND_next(n)) { - if ((ND_node_type(n) == VIRTUAL) && (ND_label(n))) { - place_vnlabel(n); - } - } - } - - for (i = 0; i < n_edges;) { - ind = i; - le0 = getmainedge((e0 = edges[i++])); - if (ED_tail_port(e0).defined || ED_head_port(e0).defined) { - ea = e0; - } else { - ea = le0; - } - if (ED_tree_index(ea) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgea.out, ea); - ea = &fwdedgea.out; - } - for (cnt = 1; i < n_edges; cnt++, i++) { - if (le0 != (le1 = getmainedge((e1 = edges[i])))) - break; - if (ED_adjacent(e0)) continue; /* all flat adjacent edges at once */ - if (ED_tail_port(e1).defined || ED_head_port(e1).defined) { - eb = e1; - } else { - eb = le1; - } - if (ED_tree_index(eb) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgeb.out, eb); - eb = &fwdedgeb.out; - } - if (portcmp(ED_tail_port(ea), ED_tail_port(eb))) - break; - if (portcmp(ED_head_port(ea), ED_head_port(eb))) - break; - if ((ED_tree_index(e0) & EDGETYPEMASK) == FLATEDGE - && ED_label(e0) != ED_label(e1)) - break; - if (ED_tree_index(edges[i]) & MAINGRAPH) /* Aha! -C is on */ - break; - } - - if (et == ET_CURVED) { - int ii; - edge_t* e0; - edge_t** edgelist; - if (cnt == 1) - edgelist = &e0; - else - edgelist = N_NEW(cnt, edge_t*); - edgelist[0] = getmainedge((edges+ind)[0]); - for (ii = 1; ii < cnt; ii++) - edgelist[ii] = (edges+ind)[ii]; - makeStraightEdges (g, edgelist, cnt, et, &sinfo); - if (cnt > 1) - free (edgelist); - } - else if (agtail(e0) == aghead(e0)) { - int b, sizey, r; - n = agtail(e0); - r = ND_rank(n); - if (r == GD_maxrank(g)) { - if (r > 0) - sizey = ND_coord(GD_rank(g)[r-1].v[0]).y - ND_coord(n).y; - else - sizey = ND_ht(n); - } - else if (r == GD_minrank(g)) { - sizey = ND_coord(n).y - ND_coord(GD_rank(g)[r+1].v[0]).y; - } - else { - int upy = ND_coord(GD_rank(g)[r-1].v[0]).y - ND_coord(n).y; - int dwny = ND_coord(n).y - ND_coord(GD_rank(g)[r+1].v[0]).y; - sizey = MIN(upy, dwny); - } - makeSelfEdge(P, edges, ind, cnt, sd.Multisep, sizey/2, &sinfo); - for (b = 0; b < cnt; b++) { - e = edges[ind+b]; - if (ED_label(e)) - updateBB(g, ED_label(e)); - } - } - else if (ND_rank(agtail(e0)) == ND_rank(aghead(e0))) { - make_flat_edge(g, &sd, P, edges, ind, cnt, et); - } - else - make_regular_edge(g, &sd, P, edges, ind, cnt, et); - } - - /* place regular edge labels */ - for (n = GD_nlist(g); n; n = ND_next(n)) { - if ((ND_node_type(n) == VIRTUAL) && (ND_label(n))) { - place_vnlabel(n); - updateBB(g, ND_label(n)); - } - } - - /* normalize splines so they always go from tail to head */ - /* place_portlabel relies on this being done first */ - if (normalize) - edge_normalize(g); - -finish : - /* vladimir: place port labels */ - /* FIX: head and tail labels are not part of cluster bbox */ - if ((E_headlabel || E_taillabel) && (E_labelangle || E_labeldistance)) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (E_headlabel) { - for (e = agfstin(g, n); e; e = agnxtin(g, e)) - if (ED_head_label(AGMKOUT(e))) { - place_portlabel(AGMKOUT(e), TRUE); - updateBB(g, ED_head_label(AGMKOUT(e))); - } - - } - if (E_taillabel) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (ED_tail_label(e)) { - if (place_portlabel(e, FALSE)) - updateBB(g, ED_tail_label(e)); - } - } - } - } - } - /* end vladimir */ - -#ifdef ORTHO - if ((et != ET_ORTHO) && (et != ET_CURVED)) { -#else - if (et != ET_CURVED) { -#endif - free(edges); - free(P->boxes); - free(P); - free(sd.Rank_box); - routesplinesterm(); - } - State = GVSPLINES; - EdgeLabelsDone = 1; -} - -/* dot_splines: - * If the splines attribute is defined but equal to "", skip edge routing. - */ -void dot_splines(graph_t * g) -{ - _dot_splines (g, 1); -} - -/* place_vnlabel: - * assign position of an edge label from its virtual node - * This is for regular edges only. - */ -static void -place_vnlabel(node_t * n) -{ - pointf dimen; - double width; - edge_t *e; - if (ND_in(n).size == 0) - return; /* skip flat edge labels here */ - for (e = ND_out(n).list[0]; ED_edge_type(e) != NORMAL; - e = ED_to_orig(e)); - dimen = ED_label(e)->dimen; - width = GD_flip(agraphof(n)) ? dimen.y : dimen.x; - ED_label(e)->pos.x = ND_coord(n).x + width / 2.0; - ED_label(e)->pos.y = ND_coord(n).y; - ED_label(e)->set = TRUE; -} - -static void -setflags(edge_t *e, int hint1, int hint2, int f3) -{ - int f1, f2; - if (hint1 != 0) - f1 = hint1; - else { - if (agtail(e) == aghead(e)) - if (ED_tail_port(e).defined || ED_head_port(e).defined) - f1 = SELFWPEDGE; - else - f1 = SELFNPEDGE; - else if (ND_rank(agtail(e)) == ND_rank(aghead(e))) - f1 = FLATEDGE; - else - f1 = REGULAREDGE; - } - if (hint2 != 0) - f2 = hint2; - else { - if (f1 == REGULAREDGE) - f2 = (ND_rank(agtail(e)) < ND_rank(aghead(e))) ? FWDEDGE : BWDEDGE; - else if (f1 == FLATEDGE) - f2 = (ND_order(agtail(e)) < ND_order(aghead(e))) ? FWDEDGE : BWDEDGE; - else /* f1 == SELF*EDGE */ - f2 = FWDEDGE; - } - ED_tree_index(e) = (f1 | f2 | f3); -} - -/* edgecmp: - * lexicographically order edges by - * - edge type - * - |rank difference of nodes| - * - |x difference of nodes| - * - id of witness edge for equivalence class - * - port comparison - * - graph type - * - labels if flat edges - * - edge id - */ -static int edgecmp(edge_t** ptr0, edge_t** ptr1) -{ - Agedgeinfo_t fwdedgeai, fwdedgebi; - Agedgepair_t fwdedgea, fwdedgeb; - edge_t *e0, *e1, *ea, *eb, *le0, *le1; - int et0, et1, v0, v1, rv; - double t0, t1; - - fwdedgea.out.base.data = (Agrec_t*)&fwdedgeai; - fwdedgeb.out.base.data = (Agrec_t*)&fwdedgebi; - e0 = (edge_t *) * ptr0; - e1 = (edge_t *) * ptr1; - et0 = ED_tree_index(e0) & EDGETYPEMASK; - et1 = ED_tree_index(e1) & EDGETYPEMASK; - if (et0 != et1) - return (et1 - et0); - - le0 = getmainedge(e0); - le1 = getmainedge(e1); - - t0 = ND_rank(agtail(le0)) - ND_rank(aghead(le0)); - t1 = ND_rank(agtail(le1)) - ND_rank(aghead(le1)); - v0 = ABS((int)t0); /* ugly, but explicit as to how we avoid equality tests on fp numbers */ - v1 = ABS((int)t1); - if (v0 != v1) - return (v0 - v1); - - t0 = ND_coord(agtail(le0)).x - ND_coord(aghead(le0)).x; - t1 = ND_coord(agtail(le1)).x - ND_coord(aghead(le1)).x; - v0 = ABS((int)t0); - v1 = ABS((int)t1); - if (v0 != v1) - return (v0 - v1); - - /* This provides a cheap test for edges having the same set of endpoints. */ - if (AGSEQ(le0) != AGSEQ(le1)) - return (AGSEQ(le0) - AGSEQ(le1)); - - ea = (ED_tail_port(e0).defined || ED_head_port(e0).defined) ? e0 : le0; - if (ED_tree_index(ea) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgea.out, ea); - ea = &fwdedgea.out; - } - eb = (ED_tail_port(e1).defined || ED_head_port(e1).defined) ? e1 : le1; - if (ED_tree_index(eb) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgeb.out, eb); - eb = &fwdedgeb.out; - } - if ((rv = portcmp(ED_tail_port(ea), ED_tail_port(eb)))) - return rv; - if ((rv = portcmp(ED_head_port(ea), ED_head_port(eb)))) - return rv; - - et0 = ED_tree_index(e0) & GRAPHTYPEMASK; - et1 = ED_tree_index(e1) & GRAPHTYPEMASK; - if (et0 != et1) - return (et0 - et1); - - if (et0 == FLATEDGE && ED_label(e0) != ED_label(e1)) - return (int) (ED_label(e0) - ED_label(e1)); - - return (AGSEQ(e0) - AGSEQ(e1)); -} - -/* cloneGraph: - */ -typedef struct { - attrsym_t* E_constr; - attrsym_t* E_samehead; - attrsym_t* E_sametail; - attrsym_t* E_weight; - attrsym_t* E_minlen; - attrsym_t* E_fontcolor; - attrsym_t* E_fontname; - attrsym_t* E_fontsize; - attrsym_t* E_headclip; - attrsym_t* E_headlabel; - attrsym_t* E_label; - attrsym_t* E_label_float; - attrsym_t* E_labelfontcolor; - attrsym_t* E_labelfontname; - attrsym_t* E_labelfontsize; - attrsym_t* E_tailclip; - attrsym_t* E_taillabel; - attrsym_t* E_xlabel; - - attrsym_t* N_height; - attrsym_t* N_width; - attrsym_t* N_shape; - attrsym_t* N_style; - attrsym_t* N_fontsize; - attrsym_t* N_fontname; - attrsym_t* N_fontcolor; - attrsym_t* N_label; - attrsym_t* N_xlabel; - attrsym_t* N_showboxes; - attrsym_t* N_ordering; - attrsym_t* N_sides; - attrsym_t* N_peripheries; - attrsym_t* N_skew; - attrsym_t* N_orientation; - attrsym_t* N_distortion; - attrsym_t* N_fixed; - attrsym_t* N_nojustify; - attrsym_t* N_group; - - attrsym_t* G_ordering; - int State; -} attr_state_t; - -static void -setState (graph_t* auxg, attr_state_t* attr_state) -{ - /* save state */ - attr_state->E_constr = E_constr; - attr_state->E_samehead = E_samehead; - attr_state->E_sametail = E_sametail; - attr_state->E_weight = E_weight; - attr_state->E_minlen = E_minlen; - attr_state->E_fontcolor = E_fontcolor; - attr_state->E_fontname = E_fontname; - attr_state->E_fontsize = E_fontsize; - attr_state->E_headclip = E_headclip; - attr_state->E_headlabel = E_headlabel; - attr_state->E_label = E_label; - attr_state->E_label_float = E_label_float; - attr_state->E_labelfontcolor = E_labelfontcolor; - attr_state->E_labelfontname = E_labelfontname; - attr_state->E_labelfontsize = E_labelfontsize; - attr_state->E_tailclip = E_tailclip; - attr_state->E_taillabel = E_taillabel; - attr_state->E_xlabel = E_xlabel; - attr_state->N_height = N_height; - attr_state->N_width = N_width; - attr_state->N_shape = N_shape; - attr_state->N_style = N_style; - attr_state->N_fontsize = N_fontsize; - attr_state->N_fontname = N_fontname; - attr_state->N_fontcolor = N_fontcolor; - attr_state->N_label = N_label; - attr_state->N_xlabel = N_xlabel; - attr_state->N_showboxes = N_showboxes; - attr_state->N_ordering = N_ordering; - attr_state->N_sides = N_sides; - attr_state->N_peripheries = N_peripheries; - attr_state->N_skew = N_skew; - attr_state->N_orientation = N_orientation; - attr_state->N_distortion = N_distortion; - attr_state->N_fixed = N_fixed; - attr_state->N_nojustify = N_nojustify; - attr_state->N_group = N_group; - attr_state->State = State; - attr_state->G_ordering = G_ordering; - - E_constr = NULL; - E_samehead = agattr(auxg,AGEDGE, "samehead", NULL); - E_sametail = agattr(auxg,AGEDGE, "sametail", NULL); - E_weight = agattr(auxg,AGEDGE, "weight", NULL); - if (!E_weight) - E_weight = agattr (auxg,AGEDGE,"weight", ""); - E_minlen = NULL; - E_fontcolor = NULL; - E_fontname = agfindedgeattr(auxg, "fontname"); - E_fontsize = agfindedgeattr(auxg, "fontsize"); - E_headclip = agfindedgeattr(auxg, "headclip"); - E_headlabel = NULL; - E_label = agfindedgeattr(auxg, "label"); - E_label_float = agfindedgeattr(auxg, "label_float"); - E_labelfontcolor = NULL; - E_labelfontname = agfindedgeattr(auxg, "labelfontname"); - E_labelfontsize = agfindedgeattr(auxg, "labelfontsize"); - E_tailclip = agfindedgeattr(auxg, "tailclip"); - E_taillabel = NULL; - E_xlabel = NULL; - N_height = agfindnodeattr(auxg, "height"); - N_width = agfindnodeattr(auxg, "width"); - N_shape = agfindnodeattr(auxg, "shape"); - N_style = NULL; - N_fontsize = agfindnodeattr(auxg, "fontsize"); - N_fontname = agfindnodeattr(auxg, "fontname"); - N_fontcolor = NULL; - N_label = agfindnodeattr(auxg, "label"); - N_xlabel = NULL; - N_showboxes = NULL; - N_ordering = agfindnodeattr(auxg, "ordering"); - N_sides = agfindnodeattr(auxg, "sides"); - N_peripheries = agfindnodeattr(auxg, "peripheries"); - N_skew = agfindnodeattr(auxg, "skew"); - N_orientation = agfindnodeattr(auxg, "orientation"); - N_distortion = agfindnodeattr(auxg, "distortion"); - N_fixed = agfindnodeattr(auxg, "fixed"); - N_nojustify = NULL; - N_group = NULL; - G_ordering = agfindgraphattr (auxg, "ordering"); -} - -/* cloneGraph: - * Create clone graph. It stores the global Agsyms, to be - * restored in cleanupCloneGraph. The graph uses the main - * graph's settings for certain geometry parameters, and - * declares all node and edge attributes used in the original - * graph. - */ -static graph_t* -cloneGraph (graph_t* g, attr_state_t* attr_state) -{ - Agsym_t* sym; - graph_t* auxg; - if (agisdirected(g)) - auxg = agopen ("auxg",Agdirected, NIL(Agdisc_t *)); - else - auxg = agopen ("auxg",Agundirected, NIL(Agdisc_t *)); - agbindrec(auxg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - agattr(auxg, AGRAPH, "rank", ""); - GD_drawing(auxg) = NEW(layout_t); - GD_drawing(auxg)->quantum = GD_drawing(g)->quantum; - GD_drawing(auxg)->dpi = GD_drawing(g)->dpi; - - GD_charset(auxg) = GD_charset (g); - if (GD_flip(g)) - SET_RANKDIR(auxg, RANKDIR_TB); - else - SET_RANKDIR(auxg, RANKDIR_LR); - GD_nodesep(auxg) = GD_nodesep(g); - GD_ranksep(auxg) = GD_ranksep(g); - - //copy node attrs to auxg - sym=agnxtattr(agroot(g),AGNODE,NULL); //get the first attr. - for (; sym; sym = agnxtattr(agroot(g),AGNODE,sym)) - agattr (auxg, AGNODE,sym->name, sym->defval); - - //copy edge attributes - sym=agnxtattr(agroot(g),AGEDGE,NULL); //get the first attr. - for (; sym; sym = agnxtattr(agroot(g),AGEDGE,sym)) - agattr (auxg, AGEDGE,sym->name, sym->defval); - - if (!agattr(auxg,AGEDGE, "headport", NULL)) - agattr(auxg,AGEDGE, "headport", ""); - if (!agattr(auxg,AGEDGE, "tailport", NULL)) - agattr(auxg,AGEDGE, "tailport", ""); - - setState (auxg, attr_state); - - return auxg; -} - -/* cleanupCloneGraph: - */ -static void -cleanupCloneGraph (graph_t* g, attr_state_t* attr_state) -{ - /* restore main graph syms */ - E_constr = attr_state->E_constr; - E_samehead = attr_state->E_samehead; - E_sametail = attr_state->E_sametail; - E_weight = attr_state->E_weight; - E_minlen = attr_state->E_minlen; - E_fontcolor = attr_state->E_fontcolor; - E_fontname = attr_state->E_fontname; - E_fontsize = attr_state->E_fontsize; - E_headclip = attr_state->E_headclip; - E_headlabel = attr_state->E_headlabel; - E_label = attr_state->E_label; - E_label_float = attr_state->E_label_float; - E_labelfontcolor = attr_state->E_labelfontcolor; - E_labelfontname = attr_state->E_labelfontname; - E_labelfontsize = attr_state->E_labelfontsize; - E_tailclip = attr_state->E_tailclip; - E_taillabel = attr_state->E_taillabel; - E_xlabel = attr_state->E_xlabel; - N_height = attr_state->N_height; - N_width = attr_state->N_width; - N_shape = attr_state->N_shape; - N_style = attr_state->N_style; - N_fontsize = attr_state->N_fontsize; - N_fontname = attr_state->N_fontname; - N_fontcolor = attr_state->N_fontcolor; - N_label = attr_state->N_label; - N_xlabel = attr_state->N_xlabel; - N_showboxes = attr_state->N_showboxes; - N_ordering = attr_state->N_ordering; - N_sides = attr_state->N_sides; - N_peripheries = attr_state->N_peripheries; - N_skew = attr_state->N_skew; - N_orientation = attr_state->N_orientation; - N_distortion = attr_state->N_distortion; - N_fixed = attr_state->N_fixed; - N_nojustify = attr_state->N_nojustify; - N_group = attr_state->N_group; - G_ordering = attr_state->G_ordering; - State = attr_state->State; - - free (attr_state); - dot_cleanup(g); - agclose(g); -} - -/* cloneNode: - * If flipped is true, original graph has rankdir=LR or RL. - * In this case, records change shape, so we wrap a record node's - * label in "{...}" to prevent this. - */ -static node_t* -cloneNode (graph_t* g, node_t* orign, int flipped) -{ - node_t* n = agnode(g, agnameof(orign),1); - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - agcopyattr (orign, n); - if (shapeOf(orign) == SH_RECORD) { - int lbllen = strlen(ND_label(orign)->text); - char* buf = N_GNEW(lbllen+3,char); - sprintf (buf, "{%s}", ND_label(orign)->text); - agset (n, "label", buf); - } - - return n; -} - -/* cloneEdge: - */ -static edge_t* -cloneEdge (graph_t* g, node_t* tn, node_t* hn, edge_t* orig) -{ - edge_t* e = agedge(g, tn, hn,NULL,1); - /* for (; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); */ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - agcopyattr (orig, e); -/* - if (orig->tail != ND_alg(tn)) { - char* hdport = agget (orig, HEAD_ID); - char* tlport = agget (orig, TAIL_ID); - agset (e, TAIL_ID, (hdport ? hdport : "")); - agset (e, HEAD_ID, (tlport ? tlport : "")); - } -*/ - - return e; -} - -/* transformf: - * Rotate, if necessary, then translate points. - */ -static pointf -transformf (pointf p, pointf del, int flip) -{ - if (flip) { - double i = p.x; - p.x = p.y; - p.y = -i; - } - return add_pointf(p, del); -} - -/* edgelblcmpfn: - * lexicographically order edges by - * - has label - * - label is wider - * - label is higher - */ -static int edgelblcmpfn(edge_t** ptr0, edge_t** ptr1) -{ - edge_t *e0, *e1; - pointf sz0, sz1; - - e0 = (edge_t *) * ptr0; - e1 = (edge_t *) * ptr1; - - if (ED_label(e0)) { - if (ED_label(e1)) { - sz0 = ED_label(e0)->dimen; - sz1 = ED_label(e1)->dimen; - if (sz0.x > sz1.x) return -1; - else if (sz0.x < sz1.x) return 1; - else if (sz0.y > sz1.y) return -1; - else if (sz0.y < sz1.y) return 1; - else return 0; - } - else - return -1; - } - else if (ED_label(e1)) { - return 1; - } - else - return 0; -} - -#define LBL_SPACE 6 /* space between labels, in points */ - -/* makeSimpleFlatLabels: - * This handles the second simplest case for flat edges between - * two adjacent nodes. We still invoke a dot on a rotated problem - * to handle edges with ports. This usually works, but fails for - * records because of their weird nature. - */ -static void -makeSimpleFlatLabels (node_t* tn, node_t* hn, edge_t** edges, int ind, int cnt, int et, int n_lbls) -{ - pointf *ps; - Ppoly_t poly; - int pn; - edge_t* e = edges[ind]; - pointf points[10], tp, hp; - int i, pointn; - double leftend, rightend, ctrx, ctry, miny, maxy; - double uminx, umaxx; - double lminx=0.0, lmaxx=0.0; - - edge_t** earray = N_NEW(cnt, edge_t*); - - for (i = 0; i < cnt; i++) { - earray[i] = edges[ind + i]; - } - - qsort (earray, cnt, sizeof(edge_t*), (qsort_cmpf) edgelblcmpfn); - - tp = add_pointf(ND_coord(tn), ED_tail_port(e).p); - hp = add_pointf(ND_coord(hn), ED_head_port(e).p); - - leftend = tp.x+ND_rw(tn); - rightend = hp.x-ND_lw(hn); - ctrx = (leftend + rightend)/2.0; - - /* do first edge */ - e = earray[0]; - pointn = 0; - points[pointn++] = tp; - points[pointn++] = tp; - points[pointn++] = hp; - points[pointn++] = hp; - clip_and_install(e, aghead(e), points, pointn, &sinfo); - ED_label(e)->pos.x = ctrx; - ED_label(e)->pos.y = tp.y + (ED_label(e)->dimen.y+LBL_SPACE)/2.0; - ED_label(e)->set = TRUE; - - miny = tp.y + LBL_SPACE/2.0; - maxy = miny + ED_label(e)->dimen.y; - uminx = ctrx - (ED_label(e)->dimen.x)/2.0; - umaxx = ctrx + (ED_label(e)->dimen.x)/2.0; - - for (i = 1; i < n_lbls; i++) { - e = earray[i]; - if (i%2) { /* down */ - if (i == 1) { - lminx = ctrx - (ED_label(e)->dimen.x)/2.0; - lmaxx = ctrx + (ED_label(e)->dimen.x)/2.0; - } - miny -= LBL_SPACE + ED_label(e)->dimen.y; - points[0] = tp; - points[1].x = tp.x; - points[1].y = miny - LBL_SPACE; - points[2].x = hp.x; - points[2].y = points[1].y; - points[3] = hp; - points[4].x = lmaxx; - points[4].y = hp.y; - points[5].x = lmaxx; - points[5].y = miny; - points[6].x = lminx; - points[6].y = miny; - points[7].x = lminx; - points[7].y = tp.y; - ctry = miny + (ED_label(e)->dimen.y)/2.0; - } - else { /* up */ - points[0] = tp; - points[1].x = uminx; - points[1].y = tp.y; - points[2].x = uminx; - points[2].y = maxy; - points[3].x = umaxx; - points[3].y = maxy; - points[4].x = umaxx; - points[4].y = hp.y; - points[5].x = hp.x; - points[5].y = hp.y; - points[6].x = hp.x; - points[6].y = maxy + LBL_SPACE; - points[7].x = tp.x; - points[7].y = maxy + LBL_SPACE; - ctry = maxy + (ED_label(e)->dimen.y)/2.0 + LBL_SPACE; - maxy += ED_label(e)->dimen.y + LBL_SPACE; - } - poly.pn = 8; - poly.ps = (Ppoint_t*)points; - ps = simpleSplineRoute (tp, hp, poly, &pn, et == ET_PLINE); - if (pn == 0) return; - ED_label(e)->pos.x = ctrx; - ED_label(e)->pos.y = ctry; - ED_label(e)->set = TRUE; - clip_and_install(e, aghead(e), ps, pn, &sinfo); - } - - /* edges with no labels */ - for (; i < cnt; i++) { - e = earray[i]; - if (i%2) { /* down */ - if (i == 1) { - lminx = (2*leftend + rightend)/3.0; - lmaxx = (leftend + 2*rightend)/3.0; - } - miny -= LBL_SPACE; - points[0] = tp; - points[1].x = tp.x; - points[1].y = miny - LBL_SPACE; - points[2].x = hp.x; - points[2].y = points[1].y; - points[3] = hp; - points[4].x = lmaxx; - points[4].y = hp.y; - points[5].x = lmaxx; - points[5].y = miny; - points[6].x = lminx; - points[6].y = miny; - points[7].x = lminx; - points[7].y = tp.y; - } - else { /* up */ - points[0] = tp; - points[1].x = uminx; - points[1].y = tp.y; - points[2].x = uminx; - points[2].y = maxy; - points[3].x = umaxx; - points[3].y = maxy; - points[4].x = umaxx; - points[4].y = hp.y; - points[5].x = hp.x; - points[5].y = hp.y; - points[6].x = hp.x; - points[6].y = maxy + LBL_SPACE; - points[7].x = tp.x; - points[7].y = maxy + LBL_SPACE; - maxy += + LBL_SPACE; - } - poly.pn = 8; - poly.ps = (Ppoint_t*)points; - ps = simpleSplineRoute (tp, hp, poly, &pn, et == ET_PLINE); - if (pn == 0) return; - clip_and_install(e, aghead(e), ps, pn, &sinfo); - } - - free (earray); -} - -/* makeSimpleFlat: - */ -static void -makeSimpleFlat (node_t* tn, node_t* hn, edge_t** edges, int ind, int cnt, int et) -{ - edge_t* e = edges[ind]; - pointf points[10], tp, hp; - int i, pointn; - double stepy, dy; - - tp = add_pointf(ND_coord(tn), ED_tail_port(e).p); - hp = add_pointf(ND_coord(hn), ED_head_port(e).p); - - stepy = (cnt > 1) ? ND_ht(tn) / (double)(cnt - 1) : 0.; - dy = tp.y - ((cnt > 1) ? ND_ht(tn) / 2. : 0.); - - for (i = 0; i < cnt; i++) { - e = edges[ind + i]; - pointn = 0; - if ((et == ET_SPLINE) || (et == ET_LINE)) { - points[pointn++] = tp; - points[pointn++] = pointfof((2 * tp.x + hp.x) / 3, dy); - points[pointn++] = pointfof((2 * hp.x + tp.x) / 3, dy); - points[pointn++] = hp; - } - else { /* ET_PLINE */ - points[pointn++] = tp; - points[pointn++] = tp; - points[pointn++] = pointfof((2 * tp.x + hp.x) / 3, dy); - points[pointn++] = pointfof((2 * tp.x + hp.x) / 3, dy); - points[pointn++] = pointfof((2 * tp.x + hp.x) / 3, dy); - points[pointn++] = pointfof((2 * hp.x + tp.x) / 3, dy); - points[pointn++] = pointfof((2 * hp.x + tp.x) / 3, dy); - points[pointn++] = pointfof((2 * hp.x + tp.x) / 3, dy); - points[pointn++] = hp; - points[pointn++] = hp; - } - dy += stepy; - clip_and_install(e, aghead(e), points, pointn, &sinfo); - } -} - -/* make_flat_adj_edges: - * In the simple case, with no labels or ports, this creates a simple - * spindle of splines. - * If there are only labels, cobble something together. - * Otherwise, we run dot recursively on the 2 nodes and the edges, - * essentially using rankdir=LR, to get the needed spline info. - * This is probably to cute and fragile, and should be rewritten in a - * more straightforward and laborious fashion. - */ -static void -make_flat_adj_edges(graph_t* g, path* P, edge_t** edges, int ind, int cnt, edge_t* e0, - int et) -{ - node_t* n; - node_t *tn, *hn; - edge_t* e; - int labels = 0, ports = 0; - graph_t* auxg; - graph_t* subg; - node_t *auxt, *auxh; - edge_t* auxe; - int i, j, midx, midy, leftx, rightx; - pointf del; - edge_t* hvye = NULL; - attr_state_t* attrs; - static int warned; - - tn = agtail(e0), hn = aghead(e0); - if ((shapeOf(tn) == SH_RECORD) || (shapeOf(hn) == SH_RECORD)) { - if (!warned) { - warned = 1; - agerr (AGWARN, "flat edge between adjacent nodes one of which has a record shape - replace records with HTML-like labels\n"); - agerr(AGPREV, " Edge %s %s %s\n", - agnameof(tn), agisdirected(g)?"->":"--", agnameof(hn)); - - } - return; - } - for (i = 0; i < cnt; i++) { - e = edges[ind + i]; - if (ED_label(e)) labels++; - if (ED_tail_port(e).defined || ED_head_port(e).defined) ports = 1; - } - - if (ports == 0) { - /* flat edges without ports and labels can go straight left to right */ - if (labels == 0) { - makeSimpleFlat (tn, hn, edges, ind, cnt, et); - } - /* flat edges without ports but with labels take more work */ - else { - makeSimpleFlatLabels (tn, hn, edges, ind, cnt, et, labels); - } - return; - } - - attrs = NEW(attr_state_t); - auxg = cloneGraph (g, attrs); - subg = agsubg (auxg, "xxx",1); - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - agset (subg, "rank", "source"); - rightx = ND_coord(hn).x; - leftx = ND_coord(tn).x; - if (GD_flip(g)) { - node_t* n; - n = tn; - tn = hn; - hn = n; - } - auxt = cloneNode(subg, tn, GD_flip(g)); - auxh = cloneNode(auxg, hn, GD_flip(g)); - for (i = 0; i < cnt; i++) { - e = edges[ind + i]; - for (; ED_edge_type(e) != NORMAL; e = ED_to_orig(e)); - if (agtail(e) == tn) - auxe = cloneEdge (auxg, auxt, auxh, e); - else - auxe = cloneEdge (auxg, auxh, auxt, e); - ED_alg(e) = auxe; - if (!hvye && !ED_tail_port(e).defined && !ED_head_port(e).defined) { - hvye = auxe; - ED_alg(hvye) = e; - } - } - if (!hvye) { - hvye = agedge (auxg, auxt, auxh,NULL,1); - } - agxset (hvye, E_weight, "10000"); - GD_gvc(auxg) = GD_gvc(g); - GD_dotroot(auxg) = auxg; - setEdgeType (auxg, et); - dot_init_node_edge(auxg); - - dot_rank(auxg, 0); - dot_mincross(auxg, 0); - dot_position(auxg, 0); - - /* reposition */ - midx = (ND_coord(tn).x - ND_rw(tn) + ND_coord(hn).x + ND_lw(hn))/2; - midy = (ND_coord(auxt).x + ND_coord(auxh).x)/2; - for (n = GD_nlist(auxg); n; n = ND_next(n)) { - if (n == auxt) { - ND_coord(n).y = rightx; - ND_coord(n).x = midy; - } - else if (n == auxh) { - ND_coord(n).y = leftx; - ND_coord(n).x = midy; - } - else ND_coord(n).y = midx; - } - dot_sameports(auxg); - _dot_splines(auxg, 0); - dotneato_postprocess(auxg); - - /* copy splines */ - if (GD_flip(g)) { - del.x = ND_coord(tn).x - ND_coord(auxt).y; - del.y = ND_coord(tn).y + ND_coord(auxt).x; - } - else { - del.x = ND_coord(tn).x - ND_coord(auxt).x; - del.y = ND_coord(tn).y - ND_coord(auxt).y; - } - for (i = 0; i < cnt; i++) { - bezier* auxbz; - bezier* bz; - - e = edges[ind + i]; - for (; ED_edge_type(e) != NORMAL; e = ED_to_orig(e)); - auxe = (edge_t*)ED_alg(e); - if ((auxe == hvye) & !ED_alg(auxe)) continue; /* pseudo-edge */ - auxbz = ED_spl(auxe)->list; - bz = new_spline(e, auxbz->size); - bz->sflag = auxbz->sflag; - bz->sp = transformf(auxbz->sp, del, GD_flip(g)); - bz->eflag = auxbz->eflag; - bz->ep = transformf(auxbz->ep, del, GD_flip(g)); - for (j = 0; j < auxbz->size; ) { - pointf cp[4]; - cp[0] = bz->list[j] = transformf(auxbz->list[j], del, GD_flip(g)); - j++; - if ( j >= auxbz->size ) - break; - cp[1] = bz->list[j] = transformf(auxbz->list[j], del, GD_flip(g)); - j++; - cp[2] = bz->list[j] = transformf(auxbz->list[j], del, GD_flip(g)); - j++; - cp[3] = transformf(auxbz->list[j], del, GD_flip(g)); - update_bb_bz(&GD_bb(g), cp); - } - if (ED_label(e)) { - ED_label(e)->pos = transformf(ED_label(auxe)->pos, del, GD_flip(g)); - ED_label(e)->set = TRUE; - updateBB(g, ED_label(e)); - } - } - - cleanupCloneGraph (auxg, attrs); -} - -/* makeFlatEnd; - */ -static void -makeFlatEnd (graph_t* g, spline_info_t* sp, path* P, node_t* n, edge_t* e, pathend_t* endp, - boolean isBegin) -{ - boxf b; - - b = endp->nb = maximal_bbox(g, sp, n, NULL, e); - endp->sidemask = TOP; - if (isBegin) beginpath(P, e, FLATEDGE, endp, FALSE); - else endpath(P, e, FLATEDGE, endp, FALSE); - b.UR.y = endp->boxes[endp->boxn - 1].UR.y; - b.LL.y = endp->boxes[endp->boxn - 1].LL.y; - b = makeregularend(b, TOP, ND_coord(n).y + GD_rank(g)[ND_rank(n)].ht2); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - endp->boxes[endp->boxn++] = b; -} -/* makeBottomFlatEnd; - */ -static void -makeBottomFlatEnd (graph_t* g, spline_info_t* sp, path* P, node_t* n, edge_t* e, - pathend_t* endp, boolean isBegin) -{ - boxf b; - - b = endp->nb = maximal_bbox(g, sp, n, NULL, e); - endp->sidemask = BOTTOM; - if (isBegin) beginpath(P, e, FLATEDGE, endp, FALSE); - else endpath(P, e, FLATEDGE, endp, FALSE); - b.UR.y = endp->boxes[endp->boxn - 1].UR.y; - b.LL.y = endp->boxes[endp->boxn - 1].LL.y; - b = makeregularend(b, BOTTOM, ND_coord(n).y - GD_rank(g)[ND_rank(n)].ht2); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - endp->boxes[endp->boxn++] = b; -} - - -/* make_flat_labeled_edge: - */ -static void -make_flat_labeled_edge(graph_t* g, spline_info_t* sp, path* P, edge_t* e, int et) -{ - node_t *tn, *hn, *ln; - pointf *ps; - pathend_t tend, hend; - boxf lb; - int boxn, i, pn, ydelta; - edge_t *f; - pointf points[7]; - - tn = agtail(e); - hn = aghead(e); - - for (f = ED_to_virt(e); ED_to_virt(f); f = ED_to_virt(f)); - ln = agtail(f); - ED_label(e)->pos = ND_coord(ln); - ED_label(e)->set = TRUE; - - if (et == ET_LINE) { - pointf startp, endp, lp; - - startp = add_pointf(ND_coord(tn), ED_tail_port(e).p); - endp = add_pointf(ND_coord(hn), ED_head_port(e).p); - - lp = ED_label(e)->pos; - lp.y -= (ED_label(e)->dimen.y)/2.0; - points[1] = points[0] = startp; - points[2] = points[3] = points[4] = lp; - points[5] = points[6] = endp; - ps = points; - pn = 7; - } - else { - lb.LL.x = ND_coord(ln).x - ND_lw(ln); - lb.UR.x = ND_coord(ln).x + ND_rw(ln); - lb.UR.y = ND_coord(ln).y + ND_ht(ln)/2; - ydelta = ND_coord(ln).y - GD_rank(g)[ND_rank(tn)].ht1 - - ND_coord(tn).y + GD_rank(g)[ND_rank(tn)].ht2; - ydelta /= 6.; - lb.LL.y = lb.UR.y - MAX(5.,ydelta); - - boxn = 0; - makeFlatEnd (g, sp, P, tn, e, &tend, TRUE); - makeFlatEnd (g, sp, P, hn, e, &hend, FALSE); - - boxes[boxn].LL.x = tend.boxes[tend.boxn - 1].LL.x; - boxes[boxn].LL.y = tend.boxes[tend.boxn - 1].UR.y; - boxes[boxn].UR.x = lb.LL.x; - boxes[boxn].UR.y = lb.LL.y; - boxn++; - boxes[boxn].LL.x = tend.boxes[tend.boxn - 1].LL.x; - boxes[boxn].LL.y = lb.LL.y; - boxes[boxn].UR.x = hend.boxes[hend.boxn - 1].UR.x; - boxes[boxn].UR.y = lb.UR.y; - boxn++; - boxes[boxn].LL.x = lb.UR.x; - boxes[boxn].UR.y = lb.LL.y; - boxes[boxn].LL.y = hend.boxes[hend.boxn - 1].UR.y; - boxes[boxn].UR.x = hend.boxes[hend.boxn - 1].UR.x; - boxn++; - - for (i = 0; i < tend.boxn; i++) add_box(P, tend.boxes[i]); - for (i = 0; i < boxn; i++) add_box(P, boxes[i]); - for (i = hend.boxn - 1; i >= 0; i--) add_box(P, hend.boxes[i]); - - if (et == ET_SPLINE) ps = routesplines(P, &pn); - else ps = routepolylines(P, &pn); - if (pn == 0) return; - } - clip_and_install(e, aghead(e), ps, pn, &sinfo); -} - -/* make_flat_bottom_edges: - */ -static void -make_flat_bottom_edges(graph_t* g, spline_info_t* sp, path * P, edge_t ** edges, int - ind, int cnt, edge_t* e, int splines) -{ - node_t *tn, *hn; - int j, i, r; - double stepx, stepy, vspace; - rank_t* nextr; - int pn; - pointf *ps; - pathend_t tend, hend; - - tn = agtail(e); - hn = aghead(e); - r = ND_rank(tn); - if (r < GD_maxrank(g)) { - nextr = GD_rank(g) + (r+1); - vspace = ND_coord(tn).y - GD_rank(g)[r].pht1 - - (ND_coord(nextr->v[0]).y + nextr->pht2); - } - else { - vspace = GD_ranksep(g); - } - stepx = ((double)(sp->Multisep)) / (cnt+1); - stepy = vspace / (cnt+1); - - makeBottomFlatEnd (g, sp, P, tn, e, &tend, TRUE); - makeBottomFlatEnd (g, sp, P, hn, e, &hend, FALSE); - - for (i = 0; i < cnt; i++) { - int boxn; - boxf b; - e = edges[ind + i]; - boxn = 0; - - b = tend.boxes[tend.boxn - 1]; - boxes[boxn].LL.x = b.LL.x; - boxes[boxn].UR.y = b.LL.y; - boxes[boxn].UR.x = b.UR.x + (i + 1) * stepx; - boxes[boxn].LL.y = b.LL.y - (i + 1) * stepy; - boxn++; - boxes[boxn].LL.x = tend.boxes[tend.boxn - 1].LL.x; - boxes[boxn].UR.y = boxes[boxn-1].LL.y; - boxes[boxn].UR.x = hend.boxes[hend.boxn - 1].UR.x; - boxes[boxn].LL.y = boxes[boxn].UR.y - stepy; - boxn++; - b = hend.boxes[hend.boxn - 1]; - boxes[boxn].UR.x = b.UR.x; - boxes[boxn].UR.y = b.LL.y; - boxes[boxn].LL.x = b.LL.x - (i + 1) * stepx; - boxes[boxn].LL.y = boxes[boxn-1].UR.y; - boxn++; - - for (j = 0; j < tend.boxn; j++) add_box(P, tend.boxes[j]); - for (j = 0; j < boxn; j++) add_box(P, boxes[j]); - for (j = hend.boxn - 1; j >= 0; j--) add_box(P, hend.boxes[j]); - - if (splines) ps = routesplines(P, &pn); - else ps = routepolylines(P, &pn); - if (pn == 0) - return; - clip_and_install(e, aghead(e), ps, pn, &sinfo); - P->nbox = 0; - } -} - -/* make_flat_edge: - * Construct flat edges edges[ind...ind+cnt-1] - * There are 4 main cases: - * - all edges between a and b where a and b are adjacent - * - one labeled edge - * - all non-labeled edges with identical ports between non-adjacent a and b - * = connecting bottom to bottom/left/right - route along bottom - * = the rest - route along top - */ -static void -make_flat_edge(graph_t* g, spline_info_t* sp, path * P, edge_t ** edges, int ind, int cnt, int et) -{ - node_t *tn, *hn; - Agedgeinfo_t fwdedgei; - Agedgepair_t fwdedge; - edge_t *e; - int j, i, r, isAdjacent; - double stepx, stepy, vspace; - int tside, hside, pn; - pointf *ps; - pathend_t tend, hend; - - fwdedge.out.base.data = (Agrec_t*)&fwdedgei; - - /* Get sample edge; normalize to go from left to right */ - e = edges[ind]; - isAdjacent = ED_adjacent(e); - if (ED_tree_index(e) & BWDEDGE) { - MAKEFWDEDGE(&fwdedge.out, e); - e = &fwdedge.out; - } - for (i = 1; i < cnt; i++) { - if (ED_adjacent(edges[ind+i])) { - isAdjacent = 1; - break; - } - } - /* The lead edge edges[ind] might not have been marked earlier as adjacent, - * so check them all. - */ - if (isAdjacent) { - make_flat_adj_edges (g, P, edges, ind, cnt, e, et); - return; - } - if (ED_label(e)) { /* edges with labels aren't multi-edges */ - make_flat_labeled_edge (g, sp, P, e, et); - return; - } - - if (et == ET_LINE) { - makeSimpleFlat (agtail(e), aghead(e), edges, ind, cnt, et); - return; - } - - tside = ED_tail_port(e).side; - hside = ED_head_port(e).side; - if (((tside == BOTTOM) && (hside != TOP)) || - ((hside == BOTTOM) && (tside != TOP))) { - make_flat_bottom_edges (g, sp, P, edges, ind, cnt, e, et == ET_SPLINE); - return; - } - - tn = agtail(e); - hn = aghead(e); - r = ND_rank(tn); - if (r > 0) { - rank_t* prevr; - if (GD_has_labels(g->root) & EDGE_LABEL) - prevr = GD_rank(g) + (r-2); - else - prevr = GD_rank(g) + (r-1); - vspace = ND_coord(prevr->v[0]).y - prevr->ht1 - ND_coord(tn).y - GD_rank(g)[r].ht2; - } - else { - vspace = GD_ranksep(g); - } - stepx = ((double)sp->Multisep) / (cnt+1); - stepy = vspace / (cnt+1); - - makeFlatEnd (g, sp, P, tn, e, &tend, TRUE); - makeFlatEnd (g, sp, P, hn, e, &hend, FALSE); - - for (i = 0; i < cnt; i++) { - int boxn; - boxf b; - e = edges[ind + i]; - boxn = 0; - - b = tend.boxes[tend.boxn - 1]; - boxes[boxn].LL.x = b.LL.x; - boxes[boxn].LL.y = b.UR.y; - boxes[boxn].UR.x = b.UR.x + (i + 1) * stepx; - boxes[boxn].UR.y = b.UR.y + (i + 1) * stepy; - boxn++; - boxes[boxn].LL.x = tend.boxes[tend.boxn - 1].LL.x; - boxes[boxn].LL.y = boxes[boxn-1].UR.y; - boxes[boxn].UR.x = hend.boxes[hend.boxn - 1].UR.x; - boxes[boxn].UR.y = boxes[boxn].LL.y + stepy; - boxn++; - b = hend.boxes[hend.boxn - 1]; - boxes[boxn].UR.x = b.UR.x; - boxes[boxn].LL.y = b.UR.y; - boxes[boxn].LL.x = b.LL.x - (i + 1) * stepx; - boxes[boxn].UR.y = boxes[boxn-1].LL.y; - boxn++; - - for (j = 0; j < tend.boxn; j++) add_box(P, tend.boxes[j]); - for (j = 0; j < boxn; j++) add_box(P, boxes[j]); - for (j = hend.boxn - 1; j >= 0; j--) add_box(P, hend.boxes[j]); - - if (et == ET_SPLINE) ps = routesplines(P, &pn); - else ps = routepolylines(P, &pn); - if (pn == 0) - return; - clip_and_install(e, aghead(e), ps, pn, &sinfo); - P->nbox = 0; - } -} - -/* ccw: - * Return true if p3 is to left of ray p1->p2 - */ -static int -leftOf (pointf p1, pointf p2, pointf p3) -{ - int d; - - d = ((p1.y - p2.y) * (p3.x - p2.x)) - - ((p3.y - p2.y) * (p1.x - p2.x)); - return (d > 0); -} - -/* makeLineEdge: - * Create an edge as line segment. We guarantee that the points - * are always drawn downwards. This means that for flipped edges, - * we draw from the head to the tail. The routine returns the - * end node of the edge in *hp. The points are stored in the - * given array of points, and the number of points is returned. - * - * If the edge has a label, the edge is draw as two segments, with - * the bend near the label. - * - * If the endpoints are on adjacent ranks, revert to usual code by - * returning 0. - * This is done because the usual code handles the interaction of - * multiple edges better. - */ -static int -makeLineEdge(graph_t* g, edge_t* fe, pointf* points, node_t** hp) -{ - int delr, pn; - node_t* hn; - node_t* tn; - edge_t* e = fe; - pointf startp, endp, lp; - pointf dimen; - double width, height; - - while (ED_edge_type(e) != NORMAL) - e = ED_to_orig(e); - hn = aghead(e); - tn = agtail(e); - delr = ABS(ND_rank(hn)-ND_rank(tn)); - if ((delr == 1) || ((delr == 2) && (GD_has_labels(g->root) & EDGE_LABEL))) - return 0; - if (agtail(fe) == agtail(e)) { - *hp = hn; - startp = add_pointf(ND_coord(tn), ED_tail_port(e).p); - endp = add_pointf(ND_coord(hn), ED_head_port(e).p); - } - else { - *hp = tn; - startp = add_pointf(ND_coord(hn), ED_head_port(e).p); - endp = add_pointf(ND_coord(tn), ED_tail_port(e).p); - } - - if (ED_label(e)) { - dimen = ED_label(e)->dimen; - if (GD_flip(agraphof(hn))) { - width = dimen.y; - height = dimen.x; - } - else { - width = dimen.x; - height = dimen.y; - } - - lp = ED_label(e)->pos; - if (leftOf (endp,startp,lp)) { - lp.x += width/2.0; - lp.y -= height/2.0; - } - else { - lp.x -= width/2.0; - lp.y += height/2.0; - } - - points[1] = points[0] = startp; - points[2] = points[3] = points[4] = lp; - points[5] = points[6] = endp; - pn = 7; - } - else { - points[1] = points[0] = startp; - points[3] = points[2] = endp; - pn = 4; - } - - return pn; -} - -#define NUMPTS 2000 - -/* make_regular_edge: - */ -static void -make_regular_edge(graph_t* g, spline_info_t* sp, path * P, edge_t ** edges, int ind, int cnt, int et) -{ - node_t *tn, *hn; - Agedgeinfo_t fwdedgeai, fwdedgebi, fwdedgei; - Agedgepair_t fwdedgea, fwdedgeb, fwdedge; - edge_t *e, *fe, *le, *segfirst; - pointf *ps; - pathend_t tend, hend; - boxf b; - int boxn, sl, si, smode, i, j, dx, pn, hackflag, longedge; - static pointf* pointfs; - static pointf* pointfs2; - static int numpts; - static int numpts2; - int pointn; - - fwdedgea.out.base.data = (Agrec_t*)&fwdedgeai; - fwdedgeb.out.base.data = (Agrec_t*)&fwdedgebi; - fwdedge.out.base.data = (Agrec_t*)&fwdedgei; - - if (!pointfs) { - pointfs = N_GNEW(NUMPTS, pointf); - pointfs2 = N_GNEW(NUMPTS, pointf); - numpts = NUMPTS; - numpts2 = NUMPTS; - } - sl = 0; - e = edges[ind]; - hackflag = FALSE; - if (ABS(ND_rank(agtail(e)) - ND_rank(aghead(e))) > 1) { - fwdedgeai = *(Agedgeinfo_t*)e->base.data; - fwdedgea.out = *e; - fwdedgea.in = *AGOUT2IN(e); - fwdedgea.out.base.data = (Agrec_t*)&fwdedgeai; - if (ED_tree_index(e) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgeb.out, e); - agtail(&fwdedgea.out) = aghead(e); - ED_tail_port(&fwdedgea.out) = ED_head_port(e); - } else { - fwdedgebi = *(Agedgeinfo_t*)e->base.data; - fwdedgeb.out = *e; - fwdedgeb.out.base.data = (Agrec_t*)&fwdedgebi; - agtail(&fwdedgea.out) = agtail(e); - fwdedgeb.in = *AGOUT2IN(e); - } - le = getmainedge(e); - while (ED_to_virt(le)) - le = ED_to_virt(le); - aghead(&fwdedgea.out) = aghead(le); - ED_head_port(&fwdedgea.out).defined = FALSE; - ED_edge_type(&fwdedgea.out) = VIRTUAL; - ED_head_port(&fwdedgea.out).p.x = ED_head_port(&fwdedgea.out).p.y = 0; - ED_to_orig(&fwdedgea.out) = e; - e = &fwdedgea.out; - hackflag = TRUE; - } else { - if (ED_tree_index(e) & BWDEDGE) { - MAKEFWDEDGE(&fwdedgea.out, e); - e = &fwdedgea.out; - } - } - fe = e; - - /* compute the spline points for the edge */ - - if ((et == ET_LINE) && (pointn = makeLineEdge (g, fe, pointfs, &hn))) { - } - else { - int splines = et == ET_SPLINE; - boxn = 0; - pointn = 0; - segfirst = e; - tn = agtail(e); - hn = aghead(e); - b = tend.nb = maximal_bbox(g, sp, tn, NULL, e); - beginpath(P, e, REGULAREDGE, &tend, spline_merge(tn)); - b.UR.y = tend.boxes[tend.boxn - 1].UR.y; - b.LL.y = tend.boxes[tend.boxn - 1].LL.y; - b = makeregularend(b, BOTTOM, - ND_coord(tn).y - GD_rank(g)[ND_rank(tn)].ht1); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - tend.boxes[tend.boxn++] = b; - longedge = 0; - smode = FALSE, si = -1; - while (ND_node_type(hn) == VIRTUAL && !sinfo.splineMerge(hn)) { - longedge = 1; - boxes[boxn++] = rank_box(sp, g, ND_rank(tn)); - if (!smode - && ((sl = straight_len(hn)) >= - ((GD_has_labels(g->root) & EDGE_LABEL) ? 4 + 1 : 2 + 1))) { - smode = TRUE; - si = 1, sl -= 2; - } - if (!smode || si > 0) { - si--; - boxes[boxn++] = maximal_bbox(g, sp, hn, e, ND_out(hn).list[0]); - e = ND_out(hn).list[0]; - tn = agtail(e); - hn = aghead(e); - continue; - } - hend.nb = maximal_bbox(g, sp, hn, e, ND_out(hn).list[0]); - endpath(P, e, REGULAREDGE, &hend, spline_merge(aghead(e))); - b = makeregularend(hend.boxes[hend.boxn - 1], TOP, - ND_coord(hn).y + GD_rank(g)[ND_rank(hn)].ht2); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - hend.boxes[hend.boxn++] = b; - P->end.theta = M_PI / 2, P->end.constrained = TRUE; - completeregularpath(P, segfirst, e, &tend, &hend, boxes, boxn, 1); - if (splines) ps = routesplines(P, &pn); - else { - ps = routepolylines (P, &pn); - if ((et == ET_LINE) && (pn > 4)) { - ps[1] = ps[0]; - ps[3] = ps[2] = ps[pn-1]; - pn = 4; - } - } - if (pn == 0) - return; - - if (pointn + pn > numpts) { - /* This should be enough to include 3 extra points added by - * straight_path below. - */ - numpts = 2*(pointn+pn); - pointfs = RALLOC(numpts, pointfs, pointf); - } - for (i = 0; i < pn; i++) { - pointfs[pointn++] = ps[i]; - } - e = straight_path(ND_out(hn).list[0], sl, pointfs, &pointn); - recover_slack(segfirst, P); - segfirst = e; - tn = agtail(e); - hn = aghead(e); - boxn = 0; - tend.nb = maximal_bbox(g, sp, tn, ND_in(tn).list[0], e); - beginpath(P, e, REGULAREDGE, &tend, spline_merge(tn)); - b = makeregularend(tend.boxes[tend.boxn - 1], BOTTOM, - ND_coord(tn).y - GD_rank(g)[ND_rank(tn)].ht1); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - tend.boxes[tend.boxn++] = b; - P->start.theta = -M_PI / 2, P->start.constrained = TRUE; - smode = FALSE; - } - boxes[boxn++] = rank_box(sp, g, ND_rank(tn)); - b = hend.nb = maximal_bbox(g, sp, hn, e, NULL); - endpath(P, hackflag ? &fwdedgeb.out : e, REGULAREDGE, &hend, spline_merge(aghead(e))); - b.UR.y = hend.boxes[hend.boxn - 1].UR.y; - b.LL.y = hend.boxes[hend.boxn - 1].LL.y; - b = makeregularend(b, TOP, - ND_coord(hn).y + GD_rank(g)[ND_rank(hn)].ht2); - if (b.LL.x < b.UR.x && b.LL.y < b.UR.y) - hend.boxes[hend.boxn++] = b; - completeregularpath(P, segfirst, e, &tend, &hend, boxes, boxn, - longedge); - if (splines) ps = routesplines(P, &pn); - else ps = routepolylines (P, &pn); - if ((et == ET_LINE) && (pn > 4)) { - /* Here we have used the polyline case to handle - * an edge between two nodes on adjacent ranks. If the - * results really is a polyline, straighten it. - */ - ps[1] = ps[0]; - ps[3] = ps[2] = ps[pn-1]; - pn = 4; - } - if (pn == 0) - return; - if (pointn + pn > numpts) { - numpts = 2*(pointn+pn); - pointfs = RALLOC(numpts, pointfs, pointf); - } - for (i = 0; i < pn; i++) { - pointfs[pointn++] = ps[i]; - } - recover_slack(segfirst, P); - hn = hackflag ? aghead(&fwdedgeb.out) : aghead(e); - } - - /* make copies of the spline points, one per multi-edge */ - - if (cnt == 1) { - clip_and_install(fe, hn, pointfs, pointn, &sinfo); - return; - } - dx = sp->Multisep * (cnt - 1) / 2; - for (i = 1; i < pointn - 1; i++) - pointfs[i].x -= dx; - - if (numpts > numpts2) { - numpts2 = numpts; - pointfs2 = RALLOC(numpts2, pointfs2, pointf); - } - for (i = 0; i < pointn; i++) - pointfs2[i] = pointfs[i]; - clip_and_install(fe, hn, pointfs2, pointn, &sinfo); - for (j = 1; j < cnt; j++) { - e = edges[ind + j]; - if (ED_tree_index(e) & BWDEDGE) { - MAKEFWDEDGE(&fwdedge.out, e); - e = &fwdedge.out; - } - for (i = 1; i < pointn - 1; i++) - pointfs[i].x += sp->Multisep; - for (i = 0; i < pointn; i++) - pointfs2[i] = pointfs[i]; - clip_and_install(e, aghead(e), pointfs2, pointn, &sinfo); - } -} - -/* regular edges */ - -#define DONT_WANT_ANY_ENDPOINT_PATH_REFINEMENT -#ifdef DONT_WANT_ANY_ENDPOINT_PATH_REFINEMENT -static void -completeregularpath(path * P, edge_t * first, edge_t * last, - pathend_t * tendp, pathend_t * hendp, boxf * boxes, - int boxn, int flag) -{ - edge_t *uleft, *uright, *lleft, *lright; - int i, fb, lb; - splines *spl; - pointf *pp; - int pn; - - fb = lb = -1; - uleft = uright = NULL; - uleft = top_bound(first, -1), uright = top_bound(first, 1); - if (uleft) { - if (!(spl = getsplinepoints(uleft))) return; - pp = spl->list[0].list; - pn = spl->list[0].size; - } - if (uright) { - if (!(spl = getsplinepoints(uright))) return; - pp = spl->list[0].list; - pn = spl->list[0].size; - } - lleft = lright = NULL; - lleft = bot_bound(last, -1), lright = bot_bound(last, 1); - if (lleft) { - if (!(spl = getsplinepoints(lleft))) return; - pp = spl->list[spl->size - 1].list; - pn = spl->list[spl->size - 1].size; - } - if (lright) { - if (!(spl = getsplinepoints(lright))) return; - pp = spl->list[spl->size - 1].list; - pn = spl->list[spl->size - 1].size; - } - for (i = 0; i < tendp->boxn; i++) - add_box(P, tendp->boxes[i]); - fb = P->nbox + 1; - lb = fb + boxn - 3; - for (i = 0; i < boxn; i++) - add_box(P, boxes[i]); - for (i = hendp->boxn - 1; i >= 0; i--) - add_box(P, hendp->boxes[i]); - adjustregularpath(P, fb, lb); -} -#else -void refineregularends(edge_t * left, edge_t * right, pathend_t * endp, - int dir, boxf b, boxf * boxes, int *boxnp); - -/* box subdivision is obsolete, I think... ek */ -static void -completeregularpath(path * P, edge_t * first, edge_t * last, - pathend_t * tendp, pathend_t * hendp, boxf * boxes, - int boxn, int flag) -{ - edge_t *uleft, *uright, *lleft, *lright; - boxf uboxes[NSUB], lboxes[NSUB]; - boxf b; - int uboxn, lboxn, i, y, fb, lb; - - fb = lb = -1; - uleft = uright = NULL; - if (flag || ND_rank(agtail(first)) + 1 != ND_rank(aghead(last))) - uleft = top_bound(first, -1), uright = top_bound(first, 1); - refineregularends(uleft, uright, tendp, 1, boxes[0], uboxes, &uboxn); - lleft = lright = NULL; - if (flag || ND_rank(agtail(first)) + 1 != ND_rank(aghead(last))) - lleft = bot_bound(last, -1), lright = bot_bound(last, 1); - refineregularends(lleft, lright, hendp, -1, boxes[boxn - 1], lboxes, - &lboxn); - for (i = 0; i < tendp->boxn; i++) - add_box(P, tendp->boxes[i]); - if (ND_rank(agtail(first)) + 1 == ND_rank(aghead(last))) { - if ((!uleft && !uright) && (lleft || lright)) { - b = boxes[0]; - y = b.UR.y - b.LL.y; - for (i = 0; i < NSUB; i++) { - uboxes[i] = b; - uboxes[i].UR.y = b.UR.y - y * i / NSUB; - uboxes[i].LL.y = b.UR.y - y * (i + 1) / NSUB; - } - uboxn = NSUB; - } else if ((uleft || uright) && (!lleft && !lright)) { - b = boxes[boxn - 1]; - y = b.UR.y - b.LL.y; - for (i = 0; i < NSUB; i++) { - lboxes[i] = b; - lboxes[i].UR.y = b.UR.y - y * i / NSUB; - lboxes[i].LL.y = b.UR.y - y * (i + 1) / NSUB; - } - lboxn = NSUB; - } - for (i = 0; i < uboxn; i++) { - uboxes[i].LL.x = MAX(uboxes[i].LL.x, lboxes[i].LL.x); - uboxes[i].UR.x = MIN(uboxes[i].UR.x, lboxes[i].UR.x); - } - for (i = 0; i < uboxn; i++) - add_box(P, uboxes[i]); - } else { - for (i = 0; i < uboxn; i++) - add_box(P, uboxes[i]); - fb = P->nbox; - lb = fb + boxn - 3; - for (i = 1; i < boxn - 1; i++) - add_box(P, boxes[i]); - for (i = 0; i < lboxn; i++) - add_box(P, lboxes[i]); - } - for (i = hendp->boxn - 1; i >= 0; i--) - add_box(P, hendp->boxes[i]); - adjustregularpath(P, fb, lb); -} -#endif - -/* makeregularend: - * Add box to fill between node and interrank space. Needed because - * nodes in a given rank can differ in height. - * for now, regular edges always go from top to bottom - */ -static boxf makeregularend(boxf b, int side, double y) -{ - boxf newb; - switch (side) { - case BOTTOM: - newb = boxfof(b.LL.x, y, b.UR.x, b.LL.y); - break; - case TOP: - newb = boxfof(b.LL.x, b.UR.y, b.UR.x, y); - break; - } - return newb; -} - -#ifndef DONT_WANT_ANY_ENDPOINT_PATH_REFINEMENT -void refineregularends(left, right, endp, dir, b, boxes, boxnp) -edge_t *left, *right; -pathend_t *endp; -int dir; -box b; -box *boxes; -int *boxnp; -{ - splines *lspls, *rspls; - point pp, cp; - box eb; - box *bp; - int y, i, j, k; - int nsub; - - y = b.UR.y - b.LL.y; - if ((y == 1) || (!left && !right)) { - boxes[0] = b; - *boxnp = 1; - return; - } - nsub = MIN(NSUB, y); - for (i = 0; i < nsub; i++) { - boxes[i] = b; - boxes[i].UR.y = b.UR.y - y * i / nsub; - boxes[i].LL.y = b.UR.y - y * (i + 1) / nsub; - if (boxes[i].UR.y == boxes[i].LL.y) - abort(); - } - *boxnp = nsub; - /* only break big boxes */ - for (j = 0; j < endp->boxn; j++) { - eb = endp->boxes[j]; - y = eb.UR.y - eb.LL.y; -#ifdef STEVE_AND_LEFTY_GRASPING_AT_STRAWS - if (y < 15) - continue; -#else - if (y < nsub) - continue; -#endif - for (k = endp->boxn - 1; k > j; k--) - endp->boxes[k + (nsub - 1)] = endp->boxes[k]; - for (i = 0; i < nsub; i++) { - bp = &endp->boxes[j + ((dir == 1) ? i : (nsub - i - 1))]; - *bp = eb; - bp->UR.y = eb.UR.y - y * i / nsub; - bp->LL.y = eb.UR.y - y * (i + 1) / nsub; - if (bp->UR.y == bp->LL.y) - abort(); - } - endp->boxn += (nsub - 1); - j += nsub - 1; - } - if (left) { - if (!(lspls = getsplinepoints(left))) return; - pp = spline_at_y(lspls, boxes[0].UR.y); - for (i = 0; i < nsub; i++) { - cp = spline_at_y(lspls, boxes[i].LL.y); - /*boxes[i].LL.x = AVG (pp.x, cp.x); */ - boxes[i].LL.x = MAX(pp.x, cp.x); - pp = cp; - } - pp = spline_at_y(lspls, (dir == 1) ? - endp->boxes[1].UR.y : endp->boxes[1].LL.y); - for (i = 1; i < endp->boxn; i++) { - cp = spline_at_y(lspls, (dir == 1) ? - endp->boxes[i].LL.y : endp->boxes[i].UR.y); - endp->boxes[i].LL.x = MIN(endp->nb.UR.x, MAX(pp.x, cp.x)); - pp = cp; - } - i = (dir == 1) ? 0 : *boxnp - 1; - if (boxes[i].LL.x > endp->boxes[endp->boxn - 1].UR.x - MINW) - boxes[i].LL.x = endp->boxes[endp->boxn - 1].UR.x - MINW; - } - if (right) { - if (!(rspls = getsplinepoints(right))) return; - pp = spline_at_y(rspls, boxes[0].UR.y); - for (i = 0; i < nsub; i++) { - cp = spline_at_y(rspls, boxes[i].LL.y); - /*boxes[i].UR.x = AVG (pp.x, cp.x); */ - boxes[i].UR.x = AVG(pp.x, cp.x); - pp = cp; - } - pp = spline_at_y(rspls, (dir == 1) ? - endp->boxes[1].UR.y : endp->boxes[1].LL.y); - for (i = 1; i < endp->boxn; i++) { - cp = spline_at_y(rspls, (dir == 1) ? - endp->boxes[i].LL.y : endp->boxes[i].UR.y); - endp->boxes[i].UR.x = MAX(endp->nb.LL.x, AVG(pp.x, cp.x)); - pp = cp; - } - i = (dir == 1) ? 0 : *boxnp - 1; - if (boxes[i].UR.x < endp->boxes[endp->boxn - 1].LL.x + MINW) - boxes[i].UR.x = endp->boxes[endp->boxn - 1].LL.x + MINW; - } -} -#endif - -/* adjustregularpath: - * make sure the path is wide enough. - * the % 2 was so that in rank boxes would only be grown if - * they were == 0 while inter-rank boxes could be stretched to a min - * width. - * The list of boxes has three parts: tail boxes, path boxes, and head - * boxes. (Note that because of back edges, the tail boxes might actually - * belong to the head node, and vice versa.) fb is the index of the - * first interrank path box and lb is the last interrank path box. - * If fb > lb, there are none. - * - * The second for loop was added by ek long ago, and apparently is intended - * to guarantee an overlap between adjacent boxes of at least MINW. - * It doesn't do this, and the ifdef'ed part has the potential of moving - * a box within a node for more complex paths. - */ -static void adjustregularpath(path * P, int fb, int lb) -{ - boxf *bp1, *bp2; - int i, x; - - for (i = fb-1; i < lb+1; i++) { - bp1 = &P->boxes[i]; - if ((i - fb) % 2 == 0) { - if (bp1->LL.x >= bp1->UR.x) { - x = (bp1->LL.x + bp1->UR.x) / 2; - bp1->LL.x = x - HALFMINW, bp1->UR.x = x + HALFMINW; - } - } else { - if (bp1->LL.x + MINW > bp1->UR.x) { - x = (bp1->LL.x + bp1->UR.x) / 2; - bp1->LL.x = x - HALFMINW, bp1->UR.x = x + HALFMINW; - } - } - } - for (i = 0; i < P->nbox - 1; i++) { - bp1 = &P->boxes[i], bp2 = &P->boxes[i + 1]; - if (i >= fb && i <= lb && (i - fb) % 2 == 0) { - if (bp1->LL.x + MINW > bp2->UR.x) - bp2->UR.x = bp1->LL.x + MINW; - if (bp1->UR.x - MINW < bp2->LL.x) - bp2->LL.x = bp1->UR.x - MINW; - } else if (i + 1 >= fb && i < lb && (i + 1 - fb) % 2 == 0) { - if (bp1->LL.x + MINW > bp2->UR.x) - bp1->LL.x = bp2->UR.x - MINW; - if (bp1->UR.x - MINW < bp2->LL.x) - bp1->UR.x = bp2->LL.x + MINW; - } - } -} - -static boxf rank_box(spline_info_t* sp, graph_t * g, int r) -{ - boxf b; - node_t /* *right0, *right1, */ * left0, *left1; - - b = sp->Rank_box[r]; - if (b.LL.x == b.UR.x) { - left0 = GD_rank(g)[r].v[0]; - /* right0 = GD_rank(g)[r].v[GD_rank(g)[r].n - 1]; */ - left1 = GD_rank(g)[r + 1].v[0]; - /* right1 = GD_rank(g)[r + 1].v[GD_rank(g)[r + 1].n - 1]; */ - b.LL.x = sp->LeftBound; - b.LL.y = ND_coord(left1).y + GD_rank(g)[r + 1].ht2; - b.UR.x = sp->RightBound; - b.UR.y = ND_coord(left0).y - GD_rank(g)[r].ht1; - sp->Rank_box[r] = b; - } - return b; -} - -/* returns count of vertically aligned edges starting at n */ -static int straight_len(node_t * n) -{ - int cnt = 0; - node_t *v; - - v = n; - while (1) { - v = aghead(ND_out(v).list[0]); - if (ND_node_type(v) != VIRTUAL) - break; - if ((ND_out(v).size != 1) || (ND_in(v).size != 1)) - break; - if (ND_coord(v).x != ND_coord(n).x) - break; - cnt++; - } - return cnt; -} - -static edge_t *straight_path(edge_t * e, int cnt, pointf * plist, int *np) -{ - int n = *np; - edge_t *f = e; - - while (cnt--) - f = ND_out(aghead(f)).list[0]; - plist[(*np)++] = plist[n - 1]; - plist[(*np)++] = plist[n - 1]; - plist[(*np)] = ND_coord(agtail(f)); /* will be overwritten by next spline */ - - return f; -} - -static void recover_slack(edge_t * e, path * p) -{ - int b; - node_t *vn; - - b = 0; /* skip first rank box */ - for (vn = aghead(e); - ND_node_type(vn) == VIRTUAL && !sinfo.splineMerge(vn); - vn = aghead(ND_out(vn).list[0])) { - while ((b < p->nbox) && (p->boxes[b].LL.y > ND_coord(vn).y)) - b++; - if (b >= p->nbox) - break; - if (p->boxes[b].UR.y < ND_coord(vn).y) - continue; - if (ND_label(vn)) - resize_vn(vn, p->boxes[b].LL.x, p->boxes[b].UR.x, - p->boxes[b].UR.x + ND_rw(vn)); - else - resize_vn(vn, p->boxes[b].LL.x, (p->boxes[b].LL.x + - p->boxes[b].UR.x) / 2, - p->boxes[b].UR.x); - } -} - -static void resize_vn(node_t * vn, int lx, int cx, int rx) -{ - ND_coord(vn).x = cx; - ND_lw(vn) = cx - lx, ND_rw(vn) = rx - cx; -} - -/* side > 0 means right. side < 0 means left */ -static edge_t *top_bound(edge_t * e, int side) -{ - edge_t *f, *ans = NULL; - int i; - - for (i = 0; (f = ND_out(agtail(e)).list[i]); i++) { -#if 0 /* were we out of our minds? */ - if (ED_tail_port(e).p.x != ED_tail_port(f).p.x) - continue; -#endif - if (side * (ND_order(aghead(f)) - ND_order(aghead(e))) <= 0) - continue; - if ((ED_spl(f) == NULL) - && ((ED_to_orig(f) == NULL) || (ED_spl(ED_to_orig(f)) == NULL))) - continue; - if ((ans == NULL) - || (side * (ND_order(aghead(ans)) - ND_order(aghead(f))) > 0)) - ans = f; - } - return ans; -} - -static edge_t *bot_bound(edge_t * e, int side) -{ - edge_t *f, *ans = NULL; - int i; - - for (i = 0; (f = ND_in(aghead(e)).list[i]); i++) { -#if 0 /* same here */ - if (ED_head_port(e).p.x != ED_head_port(f).p.x) - continue; -#endif - if (side * (ND_order(agtail(f)) - ND_order(agtail(e))) <= 0) - continue; - if ((ED_spl(f) == NULL) - && ((ED_to_orig(f) == NULL) || (ED_spl(ED_to_orig(f)) == NULL))) - continue; - if ((ans == NULL) - || (side * (ND_order(agtail(ans)) - ND_order(agtail(f))) > 0)) - ans = f; - } - return ans; -} - -/* common routines */ - -static int cl_vninside(graph_t * cl, node_t * n) -{ - return (BETWEEN(GD_bb(cl).LL.x, (double)(ND_coord(n).x), GD_bb(cl).UR.x) && - BETWEEN(GD_bb(cl).LL.y, (double)(ND_coord(n).y), GD_bb(cl).UR.y)); -} - -/* All nodes belong to some cluster, which may be the root graph. - * For the following, we only want a cluster if it is a real cluster - * It is not clear this will handle all potential problems. It seems one - * could have hcl and tcl contained in cl, which would also cause problems. - */ -#define REAL_CLUSTER(n) (ND_clust(n)==g?NULL:ND_clust(n)) - -/* returns the cluster of (adj) that interferes with n, - */ -static Agraph_t *cl_bound(graph_t* g, node_t *n, node_t *adj) -{ - graph_t *rv, *cl, *tcl, *hcl; - edge_t *orig; - - rv = NULL; - if (ND_node_type(n) == NORMAL) - tcl = hcl = ND_clust(n); - else { - orig = ED_to_orig(ND_out(n).list[0]); - tcl = ND_clust(agtail(orig)); - hcl = ND_clust(aghead(orig)); - } - if (ND_node_type(adj) == NORMAL) { - cl = REAL_CLUSTER(adj); - if (cl && (cl != tcl) && (cl != hcl)) - rv = cl; - } else { - orig = ED_to_orig(ND_out(adj).list[0]); - cl = REAL_CLUSTER(agtail(orig)); - if (cl && (cl != tcl) && (cl != hcl) && cl_vninside(cl, adj)) - rv = cl; - else { - cl = REAL_CLUSTER(aghead(orig)); - if (cl && (cl != tcl) && (cl != hcl) && cl_vninside(cl, adj)) - rv = cl; - } - } - return rv; -} - -/* maximal_bbox: - * Return an initial bounding box to be used for building the - * beginning or ending of the path of boxes. - * Height reflects height of tallest node on rank. - * The extra space provided by FUDGE allows begin/endpath to create a box - * FUDGE-2 away from the node, so the routing can avoid the node and the - * box is at least 2 wide. - */ -#define DOTSPLINES_FUDGE 4 - -static boxf maximal_bbox(graph_t* g, spline_info_t* sp, node_t* vn, edge_t* ie, edge_t* oe) -{ - double b, nb; - graph_t *left_cl, *right_cl; - node_t *left, *right; - boxf rv; - - left_cl = right_cl = NULL; - - /* give this node all the available space up to its neighbors */ - b = (double)(ND_coord(vn).x - ND_lw(vn) - DOTSPLINES_FUDGE); - if ((left = _neighbor(g, vn, ie, oe, -1))) { - if ((left_cl = cl_bound(g, vn, left))) - nb = GD_bb(left_cl).UR.x + (double)(sp->Splinesep); - else { - nb = (double)(ND_coord(left).x + ND_mval(left)); - if (ND_node_type(left) == NORMAL) - nb += GD_nodesep(g) / 2.; - else - nb += (double)(sp->Splinesep); - } - if (nb < b) - b = nb; - rv.LL.x = ROUND(b); - } else - rv.LL.x = MIN(ROUND(b), sp->LeftBound); - - /* we have to leave room for our own label! */ - if ((ND_node_type(vn) == VIRTUAL) && (ND_label(vn))) - b = (double)(ND_coord(vn).x + 10); - else - b = (double)(ND_coord(vn).x + ND_rw(vn) + DOTSPLINES_FUDGE); - if ((right = _neighbor(g, vn, ie, oe, 1))) { - if ((right_cl = cl_bound(g, vn, right))) - nb = GD_bb(right_cl).LL.x - (double)(sp->Splinesep); - else { - nb = ND_coord(right).x - ND_lw(right); - if (ND_node_type(right) == NORMAL) - nb -= GD_nodesep(g) / 2.; - else - nb -= (double)(sp->Splinesep); - } - if (nb > b) - b = nb; - rv.UR.x = ROUND(b); - } else - rv.UR.x = MAX(ROUND(b), sp->RightBound); - - if ((ND_node_type(vn) == VIRTUAL) && (ND_label(vn))) { - rv.UR.x -= ND_rw(vn); - if (rv.UR.x < rv.LL.x) rv.UR.x = ND_coord(vn).x; - } - - rv.LL.y = ND_coord(vn).y - GD_rank(g)[ND_rank(vn)].ht1; - rv.UR.y = ND_coord(vn).y + GD_rank(g)[ND_rank(vn)].ht2; - return rv; -} - -static node_t * -_neighbor(graph_t* g, node_t *vn, edge_t *ie, edge_t *oe, int dir) -{ - int i; - node_t *n, *rv = NULL; - rank_t *rank = &(GD_rank(g)[ND_rank(vn)]); - - for (i = ND_order(vn) + dir; ((i >= 0) && (i < rank->n)); i += dir) { - n = rank->v[i]; - if ((ND_node_type(n) == VIRTUAL) && (ND_label(n))) { - rv = n; - break; - } - if (ND_node_type(n) == NORMAL) { - rv = n; - break; - } - if (pathscross(n, vn, ie, oe) == FALSE) { - rv = n; - break; - } - } - return rv; -} - -static boolean pathscross(node_t * n0, node_t * n1, edge_t * ie1, edge_t * oe1) -{ - edge_t *e0, *e1; - node_t *na, *nb; - int order, cnt; - - order = (ND_order(n0) > ND_order(n1)); - if ((ND_out(n0).size != 1) && (ND_out(n0).size != 1)) - return FALSE; - e1 = oe1; - if (ND_out(n0).size == 1 && e1) { - e0 = ND_out(n0).list[0]; - for (cnt = 0; cnt < 2; cnt++) { - if ((na = aghead(e0)) == (nb = aghead(e1))) - break; - if (order != (ND_order(na) > ND_order(nb))) - return TRUE; - if ((ND_out(na).size != 1) || (ND_node_type(na) == NORMAL)) - break; - e0 = ND_out(na).list[0]; - if ((ND_out(nb).size != 1) || (ND_node_type(nb) == NORMAL)) - break; - e1 = ND_out(nb).list[0]; - } - } - e1 = ie1; - if (ND_in(n0).size == 1 && e1) { - e0 = ND_in(n0).list[0]; - for (cnt = 0; cnt < 2; cnt++) { - if ((na = agtail(e0)) == (nb = agtail(e1))) - break; - if (order != (ND_order(na) > ND_order(nb))) - return TRUE; - if ((ND_in(na).size != 1) || (ND_node_type(na) == NORMAL)) - break; - e0 = ND_in(na).list[0]; - if ((ND_in(nb).size != 1) || (ND_node_type(nb) == NORMAL)) - break; - e1 = ND_in(nb).list[0]; - } - } - return FALSE; -} - -#ifdef DEBUG -void showpath(path * p) -{ - int i; - pointf LL, UR; - - fprintf(stderr, "%%!PS\n"); - for (i = 0; i < p->nbox; i++) { - LL = p->boxes[i].LL; - UR = p->boxes[i].UR; - fprintf(stderr, - "newpath %.04f %.04f moveto %.04f %.04f lineto %.04f %.04f lineto %.04f %.04f lineto closepath stroke\n", - LL.x, LL.y, UR.x, LL.y, UR.x, UR.y, LL.x, UR.y); - } - fprintf(stderr, "showpage\n"); -} -#endif - -#undef DOTSPLINES_FUDGE diff --git a/internal/ccall/dotgen/dummy.go b/internal/ccall/dotgen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/dotgen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/dotgen/fastgr.c b/internal/ccall/dotgen/fastgr.c deleted file mode 100644 index 1dd763c..0000000 --- a/internal/ccall/dotgen/fastgr.c +++ /dev/null @@ -1,384 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "dot.h" - - -/* - * operations on the fast internal graph. - */ - -static edge_t *ffe(node_t * u, elist uL, node_t * v, elist vL) -{ - int i; - edge_t *e; - - if ((uL.size > 0) && (vL.size > 0)) { - if (uL.size < vL.size) { - for (i = 0; (e = uL.list[i]); i++) - if (aghead(e) == v) - break; - } else { - for (i = 0; (e = vL.list[i]); i++) - if (agtail(e) == u) - break; - } - } else - e = 0; - return e; -} - -edge_t *find_fast_edge(node_t * u, node_t * v) -{ - return ffe(u, ND_out(u), v, ND_in(v)); -} - -static node_t* -find_fast_node(graph_t * g, node_t * n) -{ - node_t *v; - for (v = GD_nlist(g); v; v = ND_next(v)) - if (v == n) - break; - return v; -} - -edge_t *find_flat_edge(node_t * u, node_t * v) -{ - return ffe(u, ND_flat_out(u), v, ND_flat_in(v)); -} - -/* safe_list_append - append e to list L only if e not already a member */ -static void -safe_list_append(edge_t * e, elist * L) -{ - int i; - - for (i = 0; i < L->size; i++) - if (e == L->list[i]) - return; - elist_append(e, (*L)); -} - -edge_t *fast_edge(edge_t * e) -{ -#ifdef DEBUG - int i; - edge_t *f; - for (i = 0; (f = ND_out(agtail(e)).list[i]); i++) { - if (e == f) { - fprintf(stderr, "duplicate fast edge\n"); - return 0; - } - assert(aghead(e) != aghead(f)); - } - for (i = 0; (f = ND_in(aghead(e)).list[i]); i++) { - if (e == f) { - fprintf(stderr, "duplicate fast edge\n"); - return 0; - } - assert(agtail(e) != agtail(f)); - } -#endif - elist_append(e, ND_out(agtail(e))); - elist_append(e, ND_in(aghead(e))); - return e; -} - -/* zapinlist - remove e from list and fill hole with last member of list */ -void zapinlist(elist * L, edge_t * e) -{ - int i; - - for (i = 0; i < L->size; i++) { - if (L->list[i] == e) { - L->size--; - L->list[i] = L->list[L->size]; - L->list[L->size] = NULL; - break; - } - } -} - -/* disconnects e from graph */ -void delete_fast_edge(edge_t * e) -{ - assert(e != NULL); - zapinlist(&(ND_out(agtail(e))), e); - zapinlist(&(ND_in(aghead(e))), e); -} - -static void -safe_delete_fast_edge(edge_t * e) -{ - int i; - edge_t *f; - - assert(e != NULL); - for (i = 0; (f = ND_out(agtail(e)).list[i]); i++) - if (f == e) - zapinlist(&(ND_out(agtail(e))), e); - for (i = 0; (f = ND_in(aghead(e)).list[i]); i++) - if (f == e) - zapinlist(&(ND_in(aghead(e))), e); -} - -void other_edge(edge_t * e) -{ - elist_append(e, ND_other(agtail(e))); -} - -void safe_other_edge(edge_t * e) -{ - safe_list_append(e, &(ND_other(agtail(e)))); -} - -#ifdef OBSOLETE -void -delete_other_edge(edge_t * e) -{ - assert(e != NULL); - zapinlist(&(ND_other(agtail(e))), e); -} -#endif - -/* new_virtual_edge: - * Create and return a new virtual edge e attached to orig. - * ED_to_orig(e) = orig - * ED_to_virt(orig) = e if e is the first virtual edge attached. - * orig might be an input edge, reverse of an input edge, or virtual edge - */ -edge_t *new_virtual_edge(node_t * u, node_t * v, edge_t * orig) -{ - edge_t *e; - - Agedgepair_t* e2 = NEW(Agedgepair_t); - AGTYPE(&(e2->in)) = AGINEDGE; - AGTYPE(&(e2->out)) = AGOUTEDGE; - e2->out.base.data = (Agrec_t*)NEW(Agedgeinfo_t); - e = &(e2->out); - agtail(e) = u; - aghead(e) = v; - ED_edge_type(e) = VIRTUAL; - - if (orig) { - AGSEQ(e) = AGSEQ(orig); - AGSEQ(&(e2->in)) = AGSEQ(orig); - ED_count(e) = ED_count(orig); - ED_xpenalty(e) = ED_xpenalty(orig); - ED_weight(e) = ED_weight(orig); - ED_minlen(e) = ED_minlen(orig); - if (agtail(e) == agtail(orig)) - ED_tail_port(e) = ED_tail_port(orig); - else if (agtail(e) == aghead(orig)) - ED_tail_port(e) = ED_head_port(orig); - if (aghead(e) == aghead(orig)) - ED_head_port(e) = ED_head_port(orig); - else if (aghead(e) == agtail(orig)) - ED_head_port(e) = ED_tail_port(orig); - - if (ED_to_virt(orig) == NULL) - ED_to_virt(orig) = e; - ED_to_orig(e) = orig; - } else - ED_minlen(e) = ED_count(e) = ED_xpenalty(e) = ED_weight(e) = 1; - return e; -} - -edge_t *virtual_edge(node_t * u, node_t * v, edge_t * orig) -{ - return fast_edge(new_virtual_edge(u, v, orig)); -} - -void fast_node(graph_t * g, Agnode_t * n) -{ - -#ifdef DEBUG - assert(find_fast_node(g, n) == NULL); -#endif - ND_next(n) = GD_nlist(g); - if (ND_next(n)) - ND_prev(ND_next(n)) = n; - GD_nlist(g) = n; - ND_prev(n) = NULL; - assert(n != ND_next(n)); -} - -void fast_nodeapp(node_t * u, node_t * v) -{ - assert(u != v); - assert(ND_next(v) == NULL); - ND_next(v) = ND_next(u); - if (ND_next(u)) - ND_prev(ND_next(u)) = v; - ND_prev(v) = u; - ND_next(u) = v; -} - -void delete_fast_node(graph_t * g, node_t * n) -{ - assert(find_fast_node(g, n)); - if (ND_next(n)) - ND_prev(ND_next(n)) = ND_prev(n); - if (ND_prev(n)) - ND_next(ND_prev(n)) = ND_next(n); - else - GD_nlist(g) = ND_next(n); -} - -node_t *virtual_node(graph_t * g) -{ - node_t *n; - - n = NEW(node_t); -// agnameof(n) = "virtual"; - AGTYPE(n) = AGNODE; - n->base.data = (Agrec_t*)NEW(Agnodeinfo_t); - n->root = agroot(g); - ND_node_type(n) = VIRTUAL; - ND_lw(n) = ND_rw(n) = 1; - ND_ht(n) = 1; - ND_UF_size(n) = 1; - alloc_elist(4, ND_in(n)); - alloc_elist(4, ND_out(n)); - fast_node(g, n); - GD_n_nodes(g)++; - return n; -} - -void flat_edge(graph_t * g, edge_t * e) -{ - elist_append(e, ND_flat_out(agtail(e))); - elist_append(e, ND_flat_in(aghead(e))); - GD_has_flat_edges(dot_root(g)) = GD_has_flat_edges(g) = TRUE; -} - -void delete_flat_edge(edge_t * e) -{ - assert(e != NULL); - if (ED_to_orig(e) && ED_to_virt(ED_to_orig(e)) == e) - ED_to_virt(ED_to_orig(e)) = NULL; - zapinlist(&(ND_flat_out(agtail(e))), e); - zapinlist(&(ND_flat_in(aghead(e))), e); -} - -#ifdef DEBUG -static char *NAME(node_t * n) -{ - static char buf[20]; - if (ND_node_type(n) == NORMAL) - return agnameof(n); - sprintf(buf, "V%p", n); - return buf; -} - -void fastgr(graph_t * g) -{ - int i, j; - node_t *n, *w; - edge_t *e, *f; - - for (n = GD_nlist(g); n; n = ND_next(n)) { - fprintf(stderr, "%s %d: (", NAME(n), ND_rank(n)); - for (i = 0; (e = ND_out(n).list[i]); i++) { - fprintf(stderr, " %s:%d", NAME(aghead(e)), ED_count(e)); - w = aghead(e); - if (g == agroot(g)) { - for (j = 0; (f = ND_in(w).list[j]); j++) - if (e == f) - break; - assert(f != NULL); - } - } - fprintf(stderr, " ) ("); - for (i = 0; (e = ND_in(n).list[i]); i++) { - fprintf(stderr, " %s:%d", NAME(agtail(e)), ED_count(e)); - w = agtail(e); - if (g == agroot(g)) { - for (j = 0; (f = ND_out(w).list[j]); j++) - if (e == f) - break; - assert(f != NULL); - } - } - fprintf(stderr, " )\n"); - } -} -#endif - -static void -basic_merge(edge_t * e, edge_t * rep) -{ - if (ED_minlen(rep) < ED_minlen(e)) - ED_minlen(rep) = ED_minlen(e); - while (rep) { - ED_count(rep) += ED_count(e); - ED_xpenalty(rep) += ED_xpenalty(e); - ED_weight(rep) += ED_weight(e); - rep = ED_to_virt(rep); - } -} - -void -merge_oneway(edge_t * e, edge_t * rep) -{ - if (rep == ED_to_virt(e)) { - agerr(AGWARN, "merge_oneway glitch\n"); - return; - } - assert(ED_to_virt(e) == NULL); - ED_to_virt(e) = rep; - basic_merge(e, rep); -} - -static void -unrep(edge_t * rep, edge_t * e) -{ - ED_count(rep) -= ED_count(e); - ED_xpenalty(rep) -= ED_xpenalty(e); - ED_weight(rep) -= ED_weight(e); -} - -void unmerge_oneway(edge_t * e) -{ - edge_t *rep, *nextrep; - for (rep = ED_to_virt(e); rep; rep = nextrep) { - unrep(rep, e); - nextrep = ED_to_virt(rep); - if (ED_count(rep) == 0) - safe_delete_fast_edge(rep); /* free(rep)? */ - - /* unmerge from a virtual edge chain */ - while ((ED_edge_type(rep) == VIRTUAL) - && (ND_node_type(aghead(rep)) == VIRTUAL) - && (ND_out(aghead(rep)).size == 1)) { - rep = ND_out(aghead(rep)).list[0]; - unrep(rep, e); - } - } - ED_to_virt(e) = NULL; -} - -#ifdef OBSOLETET -static int -is_fast_node(graph_t * g, node_t * v) -{ - node_t *n; - - for (n = GD_nlist(g); n; n = ND_next(n)) - if (v == n) - return TRUE; - return FALSE; -} -#endif diff --git a/internal/ccall/dotgen/flat.c b/internal/ccall/dotgen/flat.c deleted file mode 100644 index e2ed9dd..0000000 --- a/internal/ccall/dotgen/flat.c +++ /dev/null @@ -1,339 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "dot.h" - - -static node_t *make_vn_slot(graph_t * g, int r, int pos) -{ - int i; - node_t **v, *n; - - v = GD_rank(g)[r].v = - ALLOC(GD_rank(g)[r].n + 2, GD_rank(g)[r].v, node_t *); - for (i = GD_rank(g)[r].n; i > pos; i--) { - v[i] = v[i - 1]; - ND_order(v[i])++; - } - n = v[pos] = virtual_node(g); - ND_order(n) = pos; - ND_rank(n) = r; - v[++(GD_rank(g)[r].n)] = NULL; - return v[pos]; -} - -#define HLB 0 /* hard left bound */ -#define HRB 1 /* hard right bound */ -#define SLB 2 /* soft left bound */ -#define SRB 3 /* soft right bound */ - -static void findlr(node_t * u, node_t * v, int *lp, int *rp) -{ - int l, r; - l = ND_order(u); - r = ND_order(v); - if (l > r) { - int t = l; - l = r; - r = t; - } - *lp = l; - *rp = r; -} - -static void setbounds(node_t * v, int *bounds, int lpos, int rpos) -{ - int i, l, r, ord; - edge_t *f; - - if (ND_node_type(v) == VIRTUAL) { - ord = ND_order(v); - if (ND_in(v).size == 0) { /* flat */ - assert(ND_out(v).size == 2); - findlr(aghead(ND_out(v).list[0]), aghead(ND_out(v).list[1]), &l, - &r); - /* the other flat edge could be to the left or right */ - if (r <= lpos) - bounds[SLB] = bounds[HLB] = ord; - else if (l >= rpos) - bounds[SRB] = bounds[HRB] = ord; - /* could be spanning this one */ - else if ((l < lpos) && (r > rpos)); /* ignore */ - /* must have intersecting ranges */ - else { - if ((l < lpos) || ((l == lpos) && (r < rpos))) - bounds[SLB] = ord; - if ((r > rpos) || ((r == rpos) && (l > lpos))) - bounds[SRB] = ord; - } - } else { /* forward */ - boolean onleft, onright; - onleft = onright = FALSE; - for (i = 0; (f = ND_out(v).list[i]); i++) { - if (ND_order(aghead(f)) <= lpos) { - onleft = TRUE; - continue; - } - if (ND_order(aghead(f)) >= rpos) { - onright = TRUE; - continue; - } - } - if (onleft && (onright == FALSE)) - bounds[HLB] = ord + 1; - if (onright && (onleft == FALSE)) - bounds[HRB] = ord - 1; - } - } -} - -static int flat_limits(graph_t * g, edge_t * e) -{ - int lnode, rnode, r, bounds[4], lpos, rpos, pos; - node_t **rank; - - r = ND_rank(agtail(e)) - 1; - rank = GD_rank(g)[r].v; - lnode = 0; - rnode = GD_rank(g)[r].n - 1; - bounds[HLB] = bounds[SLB] = lnode - 1; - bounds[HRB] = bounds[SRB] = rnode + 1; - findlr(agtail(e), aghead(e), &lpos, &rpos); - while (lnode <= rnode) { - setbounds(rank[lnode], bounds, lpos, rpos); - if (lnode != rnode) - setbounds(rank[rnode], bounds, lpos, rpos); - lnode++; - rnode--; - if (bounds[HRB] - bounds[HLB] <= 1) - break; - } - if (bounds[HLB] <= bounds[HRB]) - pos = (bounds[HLB] + bounds[HRB] + 1) / 2; - else - pos = (bounds[SLB] + bounds[SRB] + 1) / 2; - return pos; -} - -/* flat_node: - * Create virtual node representing edge label between - * actual ends of edge e. - * This node is characterized by being virtual and having a non-NULL - * ND_alg pointing to e. - */ -static void -flat_node(edge_t * e) -{ - int r, place, ypos, h2; - graph_t *g; - node_t *n, *vn; - edge_t *ve; - pointf dimen; - - if (ED_label(e) == NULL) - return; - g = dot_root(agtail(e)); - r = ND_rank(agtail(e)); - - place = flat_limits(g, e); - /* grab ypos = LL.y of label box before make_vn_slot() */ - if ((n = GD_rank(g)[r - 1].v[0])) - ypos = ND_coord(n).y - GD_rank(g)[r - 1].ht1; - else { - n = GD_rank(g)[r].v[0]; - ypos = ND_coord(n).y + GD_rank(g)[r].ht2 + GD_ranksep(g); - } - vn = make_vn_slot(g, r - 1, place); - dimen = ED_label(e)->dimen; - if (GD_flip(g)) { - double f = dimen.x; - dimen.x = dimen.y; - dimen.y = f; - } - ND_ht(vn) = dimen.y; - h2 = ND_ht(vn) / 2; - ND_lw(vn) = ND_rw(vn) = dimen.x / 2; - ND_label(vn) = ED_label(e); - ND_coord(vn).y = ypos + h2; - ve = virtual_edge(vn, agtail(e), e); /* was NULL? */ - ED_tail_port(ve).p.x = -ND_lw(vn); - ED_head_port(ve).p.x = ND_rw(agtail(e)); - ED_edge_type(ve) = FLATORDER; - ve = virtual_edge(vn, aghead(e), e); - ED_tail_port(ve).p.x = ND_rw(vn); - ED_head_port(ve).p.x = ND_lw(aghead(e)); - ED_edge_type(ve) = FLATORDER; - /* another assumed symmetry of ht1/ht2 of a label node */ - if (GD_rank(g)[r - 1].ht1 < h2) - GD_rank(g)[r - 1].ht1 = h2; - if (GD_rank(g)[r - 1].ht2 < h2) - GD_rank(g)[r - 1].ht2 = h2; - ND_alg(vn) = e; -} - -static void abomination(graph_t * g) -{ - int r; - rank_t *rptr; - - assert(GD_minrank(g) == 0); - /* 3 = one for new rank, one for sentinel, one for off-by-one */ - r = GD_maxrank(g) + 3; - rptr = ALLOC(r, GD_rank(g), rank_t); - GD_rank(g) = rptr + 1; - for (r = GD_maxrank(g); r >= 0; r--) - GD_rank(g)[r] = GD_rank(g)[r - 1]; - GD_rank(g)[r].n = GD_rank(g)[r].an = 0; - GD_rank(g)[r].v = GD_rank(g)[r].av = N_NEW(2, node_t *); - GD_rank(g)[r].flat = NULL; - GD_rank(g)[r].ht1 = GD_rank(g)[r].ht2 = 1; - GD_rank(g)[r].pht1 = GD_rank(g)[r].pht2 = 1; - GD_minrank(g)--; -} - -/* checkFlatAdjacent: - * Check if tn and hn are adjacent. - * If so, set adjacent bit on all related edges. - * Assume e is flat. - */ -static void -checkFlatAdjacent (edge_t* e) -{ - node_t* tn = agtail(e); - node_t* hn = aghead(e); - int i, lo, hi; - node_t* n; - rank_t *rank; - - if (ND_order(tn) < ND_order(hn)) { - lo = ND_order(tn); - hi = ND_order(hn); - } - else { - lo = ND_order(hn); - hi = ND_order(tn); - } - rank = &(GD_rank(dot_root(tn))[ND_rank(tn)]); - for (i = lo + 1; i < hi; i++) { - n = rank->v[i]; - if ((ND_node_type(n) == VIRTUAL && ND_label(n)) || - ND_node_type(n) == NORMAL) - break; - } - if (i == hi) { /* adjacent edge */ - do { - ED_adjacent(e) = 1; - e = ED_to_virt(e); - } while (e); - } -} - -/* flat_edges: - * Process flat edges. - * First, mark flat edges as having adjacent endpoints or not. - * - * Second, if there are edge labels, nodes are placed on ranks 0,2,4,... - * If we have a labeled flat edge on rank 0, add a rank -1. - * - * Finally, create label information. Add a virtual label node in the - * previous rank for each labeled, non-adjacent flat edge. If this is - * done for any edge, return true, so that main code will reset y coords. - * For labeled adjacent flat edges, store label width in representative edge. - * FIX: We should take into account any extra height needed for the latter - * labels. - * - * We leave equivalent flat edges in ND_other. Their ED_virt field should - * still point to the class representative. - */ -int -flat_edges(graph_t * g) -{ - int i, j, reset = FALSE; - node_t *n; - edge_t *e; - int found = FALSE; - - for (n = GD_nlist(g); n; n = ND_next(n)) { - if (ND_flat_out(n).list) { - for (j = 0; (e = ND_flat_out(n).list[j]); j++) { - checkFlatAdjacent (e); - } - } - for (j = 0; j < ND_other(n).size; j++) { - e = ND_other(n).list[j]; - if (ND_rank(aghead(e)) == ND_rank(agtail(e))) - checkFlatAdjacent (e); - } - } - - if ((GD_rank(g)[0].flat) || (GD_n_cluster(g) > 0)) { - for (i = 0; (n = GD_rank(g)[0].v[i]); i++) { - for (j = 0; (e = ND_flat_in(n).list[j]); j++) { - if ((ED_label(e)) && !ED_adjacent(e)) { - abomination(g); - found = TRUE; - break; - } - } - if (found) - break; - } - } - - rec_save_vlists(g); - for (n = GD_nlist(g); n; n = ND_next(n)) { - /* if n is the tail of any flat edge, one will be in flat_out */ - if (ND_flat_out(n).list) { - for (i = 0; (e = ND_flat_out(n).list[i]); i++) { - if (ED_label(e)) { - if (ED_adjacent(e)) { - if (GD_flip(g)) ED_dist(e) = ED_label(e)->dimen.y; - else ED_dist(e) = ED_label(e)->dimen.x; - } - else { - reset = TRUE; - flat_node(e); - } - } - } - /* look for other flat edges with labels */ - for (j = 0; j < ND_other(n).size; j++) { - edge_t* le; - e = ND_other(n).list[j]; - if (ND_rank(agtail(e)) != ND_rank(aghead(e))) continue; - if (agtail(e) == aghead(e)) continue; /* skip loops */ - le = e; - while (ED_to_virt(le)) le = ED_to_virt(le); - ED_adjacent(e) = ED_adjacent(le); - if (ED_label(e)) { - if (ED_adjacent(e)) { - double lw; - if (GD_flip(g)) lw = ED_label(e)->dimen.y; - else lw = ED_label(e)->dimen.x; - ED_dist(le) = MAX(lw,ED_dist(le)); - } - else { - reset = TRUE; - flat_node(e); - } - } - } - } - } - if (reset) { - checkLabelOrder(g); - rec_reset_vlists(g); - } - return reset; -} diff --git a/internal/ccall/dotgen/mincross.c b/internal/ccall/dotgen/mincross.c deleted file mode 100644 index 44ee2f1..0000000 --- a/internal/ccall/dotgen/mincross.c +++ /dev/null @@ -1,2018 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * dot_mincross(g) takes a ranked graphs, and finds an ordering - * that avoids edge crossings. clusters are expanded. - * N.B. the rank structure is global (not allocated per cluster) - * because mincross may compare nodes in different clusters. - */ - -#include "dot.h" - -/* #define DEBUG */ -#define MARK(v) (ND_mark(v)) -#define saveorder(v) (ND_coord(v)).x -#define flatindex(v) ND_low(v) - - /* forward declarations */ -static boolean medians(graph_t * g, int r0, int r1); -static int nodeposcmpf(node_t ** n0, node_t ** n1); -static int edgeidcmpf(edge_t ** e0, edge_t ** e1); -static void flat_breakcycles(graph_t * g); -static void flat_reorder(graph_t * g); -static void flat_search(graph_t * g, node_t * v); -static void init_mincross(graph_t * g); -static void merge2(graph_t * g); -static void init_mccomp(graph_t * g, int c); -static void cleanup2(graph_t * g, int nc); -static int mincross_clust(graph_t * par, graph_t * g, int); -static int mincross(graph_t * g, int startpass, int endpass, int); -static void mincross_step(graph_t * g, int pass); -static void mincross_options(graph_t * g); -static void save_best(graph_t * g); -static void restore_best(graph_t * g); -static adjmatrix_t *new_matrix(int i, int j); -static void free_matrix(adjmatrix_t * p); -static int ordercmpf(int *i0, int *i1); -#ifdef DEBUG -#if DEBUG > 1 -static int gd_minrank(Agraph_t *g) {return GD_minrank(g);} -static int gd_maxrank(Agraph_t *g) {return GD_maxrank(g);} -static rank_t *gd_rank(Agraph_t *g, int r) {return &GD_rank(g)[r];} -static int nd_order(Agnode_t *v) { return ND_order(v); } -#endif -void check_rs(graph_t * g, int null_ok); -void check_order(void); -void check_vlists(graph_t * g); -void node_in_root_vlist(node_t * n); -#endif - - - /* mincross parameters */ -static int MinQuit; -static double Convergence; - -static graph_t *Root; -static int GlobalMinRank, GlobalMaxRank; -static edge_t **TE_list; -static int *TI_list; -static boolean ReMincross; - -#if DEBUG > 1 -static void indent(graph_t* g) -{ - if (g->parent) { - fprintf (stderr, " "); - indent(g->parent); - } -} - -static char* nname(node_t* v) -{ - static char buf[1000]; - if (ND_node_type(v)) { - if (ND_ranktype(v) == CLUSTER) - sprintf (buf, "v%s_%p", agnameof(ND_clust(v)), v); - else - sprintf (buf, "v_%p", v); - } else - sprintf (buf, "%s", agnameof(v)); - return buf; -} -static void dumpg (graph_t* g) -{ - int j, i, r; - node_t* v; - edge_t* e; - - fprintf (stderr, "digraph A {\n"); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - fprintf (stderr, " subgraph {rank=same "); - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - if (i > 0) - fprintf (stderr, " -> %s", nname(v)); - else - fprintf (stderr, "%s", nname(v)); - } - if (i > 1) fprintf (stderr, " [style=invis]}\n"); - else fprintf (stderr, " }\n"); - } - for (r = GD_minrank(g); r < GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - for (j = 0; (e = ND_out(v).list[j]); j++) { - fprintf (stderr, "%s -> ", nname(v)); - fprintf (stderr, "%s\n", nname(aghead(e))); - } - } - } - fprintf (stderr, "}\n"); -} -static void dumpr (graph_t* g, int edges) -{ - int j, i, r; - node_t* v; - edge_t* e; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - fprintf (stderr, "[%d] ", r); - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - fprintf (stderr, "%s(%.02f,%d) ", nname(v), saveorder(v),ND_order(v)); - } - fprintf (stderr, "\n"); - } - if (edges == 0) return; - for (r = GD_minrank(g); r < GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - for (j = 0; (e = ND_out(v).list[j]); j++) { - fprintf (stderr, "%s -> ", nname(v)); - fprintf (stderr, "%s\n", nname(aghead(e))); - } - } - } -} -#endif - -typedef struct { - Agrec_t h; - int x, lo, hi; - Agnode_t* np; -} info_t; - -#define ND_x(n) (((info_t*)AGDATA(n))->x) -#define ND_lo(n) (((info_t*)AGDATA(n))->lo) -#define ND_hi(n) (((info_t*)AGDATA(n))->hi) -#define ND_np(n) (((info_t*)AGDATA(n))->np) -#define ND_idx(n) (ND_order(ND_np(n))) - -static void -emptyComp (graph_t* sg) -{ - Agnode_t* n; - Agnode_t* nxt; - - for (n = agfstnode(sg); n; n = nxt) { - nxt = agnxtnode (sg, n); - agdelnode(sg,n); - } -} - -#define isBackedge(e) (ND_idx(aghead(e)) > ND_idx(agtail(e))) - -static Agnode_t* -findSource (Agraph_t* g, Agraph_t* sg) -{ - Agnode_t* n; - - for (n = agfstnode(sg); n; n = agnxtnode(sg, n)) - if (agdegree(g,n,1,0) == 0) return n; - return NULL; -} - -static int -topsort (Agraph_t* g, Agraph_t* sg, Agnode_t** arr) -{ - Agnode_t* n; - Agedge_t* e; - Agedge_t* nxte; - int cnt = 0; - - while ((n = findSource(g, sg))) { - arr[cnt++] = ND_np(n); - agdelnode(sg, n); - for (e = agfstout(g, n); e; e = nxte) { - nxte = agnxtout(g, e); - agdeledge(g, e); - } - } - return cnt; -} - -static int -getComp (graph_t* g, node_t* n, graph_t* comp, int* indices) -{ - int backedge = 0; - Agedge_t* e; - - ND_x(n) = 1; - indices[agnnodes(comp)] = ND_idx(n); - agsubnode(comp, n, 1); - for (e = agfstout(g,n); e; e = agnxtout(g,e)) { - if (isBackedge(e)) backedge++; - if (!ND_x(aghead(e))) - backedge += getComp(g, aghead(e), comp, indices); - } - for (e = agfstin(g,n); e; e = agnxtin(g,e)) { - if (isBackedge(e)) backedge++; - if (!ND_x(agtail(e))) - backedge += getComp(g, agtail(e), comp, indices); - } - return backedge; -} - -/* fixLabelOrder: - * For each pair of nodes (labels), we add an edge - */ -static void -fixLabelOrder (graph_t* g, rank_t* rk) -{ - int cnt, haveBackedge = FALSE; - Agnode_t** arr; - int* indices; - Agraph_t* sg; - Agnode_t* n; - Agnode_t* nxtp; - Agnode_t* v; - - for (n = agfstnode(g); n; n = nxtp) { - v = nxtp = agnxtnode(g, n); - for (; v; v = agnxtnode(g, v)) { - if (ND_hi(v) <= ND_lo(n)) { - haveBackedge = TRUE; - agedge(g, v, n, NULL, 1); - } - else if (ND_hi(n) <= ND_lo(v)) { - agedge(g, n, v, NULL, 1); - } - } - } - if (!haveBackedge) return; - - sg = agsubg(g, "comp", 1); - arr = N_NEW(agnnodes(g), Agnode_t*); - indices = N_NEW(agnnodes(g), int); - - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - if (ND_x(n) || (agdegree(g,n,1,1) == 0)) continue; - if (getComp(g, n, sg, indices)) { - int i, sz = agnnodes(sg); - cnt = topsort (g, sg, arr); - assert (cnt == sz); - qsort(indices, cnt, sizeof(int), (qsort_cmpf)ordercmpf); - for (i = 0; i < sz; i++) { - ND_order(arr[i]) = indices[i]; - rk->v[indices[i]] = arr[i]; - } - } - emptyComp(sg); - } - free (arr); -} - -/* checkLabelOrder: - * Check that the ordering of labels for flat edges is consistent. - * This is necessary because dot_position will attempt to force the label - * to be between the edge's vertices. This can lead to an infeasible problem. - * - * We check each rank for any flat edge labels (as dummy nodes) and create a - * graph with a node for each label. If the graph contains more than 1 node, we - * call fixLabelOrder to see if there really is a problem and, if so, fix it. - */ -void -checkLabelOrder (graph_t* g) -{ - int j, r, lo, hi; - graph_t* lg = NULL; - char buf[BUFSIZ]; - rank_t* rk; - Agnode_t* u; - Agnode_t* n; - Agedge_t* e; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - rk = GD_rank(g)+r; - for (j = 0; j < rk->n; j++) { - u = rk->v[j]; - if ((e = (edge_t*)ND_alg(u))) { - if (!lg) lg = agopen ("lg", Agstrictdirected, 0); - sprintf (buf, "%d", j); - n = agnode(lg, buf, 1); - agbindrec(n, "info", sizeof(info_t), 1); - lo = ND_order(aghead(ND_out(u).list[0])); - hi = ND_order(aghead(ND_out(u).list[1])); - if (lo > hi) { - int tmp; - tmp = lo; - lo = hi; - hi = tmp; - } - ND_lo(n) = lo; - ND_hi(n) = hi; - ND_np(n) = u; - } - } - if (lg) { - if (agnnodes(lg) > 1) fixLabelOrder (lg, rk); - agclose(lg); - lg = NULL; - } - } -} - -/* dot_mincross: - * Minimize edge crossings - * Note that nodes are not placed into GD_rank(g) until mincross() - * is called. - */ -void dot_mincross(graph_t * g, int doBalance) -{ - int c, nc; - char *s; - - init_mincross(g); - - for (nc = c = 0; c < GD_comp(g).size; c++) { - init_mccomp(g, c); - nc += mincross(g, 0, 2, doBalance); - } - - merge2(g); - - /* run mincross on contents of each cluster */ - for (c = 1; c <= GD_n_cluster(g); c++) { - nc += mincross_clust(g, GD_clust(g)[c], doBalance); -#ifdef DEBUG - check_vlists(GD_clust(g)[c]); - check_order(); -#endif - } - - if ((GD_n_cluster(g) > 0) - && (!(s = agget(g, "remincross")) || (mapbool(s)))) { - mark_lowclusters(g); - ReMincross = TRUE; - nc = mincross(g, 2, 2, doBalance); -#ifdef DEBUG - for (c = 1; c <= GD_n_cluster(g); c++) - check_vlists(GD_clust(g)[c]); -#endif - } - cleanup2(g, nc); -} - -static adjmatrix_t *new_matrix(int i, int j) -{ - adjmatrix_t *rv = NEW(adjmatrix_t); - rv->nrows = i; - rv->ncols = j; - rv->data = N_NEW(i * j, char); - return rv; -} - -static void free_matrix(adjmatrix_t * p) -{ - if (p) { - free(p->data); - free(p); - } -} - -#define ELT(M,i,j) (M->data[((i)*M->ncols)+(j)]) - -static void init_mccomp(graph_t * g, int c) -{ - int r; - - GD_nlist(g) = GD_comp(g).list[c]; - if (c > 0) { - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - GD_rank(g)[r].v = GD_rank(g)[r].v + GD_rank(g)[r].n; - GD_rank(g)[r].n = 0; - } - } -} - -static int betweenclust(edge_t * e) -{ - while (ED_to_orig(e)) - e = ED_to_orig(e); - return (ND_clust(agtail(e)) != ND_clust(aghead(e))); -} - -static void do_ordering_node (graph_t * g, node_t* n, int outflag) -{ - int i, ne; - node_t *u, *v; - edge_t *e, *f, *fe; - edge_t **sortlist = TE_list; - - if (ND_clust(n)) - return; - if (outflag) { - for (i = ne = 0; (e = ND_out(n).list[i]); i++) - if (!betweenclust(e)) - sortlist[ne++] = e; - } else { - for (i = ne = 0; (e = ND_in(n).list[i]); i++) - if (!betweenclust(e)) - sortlist[ne++] = e; - } - if (ne <= 1) - return; - /* write null terminator at end of list. - requires +1 in TE_list alloccation */ - sortlist[ne] = 0; - qsort(sortlist, ne, sizeof(sortlist[0]), (qsort_cmpf) edgeidcmpf); - for (ne = 1; (f = sortlist[ne]); ne++) { - e = sortlist[ne - 1]; - if (outflag) { - u = aghead(e); - v = aghead(f); - } else { - u = agtail(e); - v = agtail(f); - } - if (find_flat_edge(u, v)) - return; - fe = new_virtual_edge(u, v, NULL); - ED_edge_type(fe) = FLATORDER; - flat_edge(g, fe); - } -} - -static void do_ordering(graph_t * g, int outflag) -{ - /* Order all nodes in graph */ - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - do_ordering_node (g, n, outflag); - } -} - -static void do_ordering_for_nodes(graph_t * g) -{ - /* Order nodes which have the "ordered" attribute */ - node_t *n; - const char *ordering; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if ((ordering = late_string(n, N_ordering, NULL))) { - if (streq(ordering, "out")) - do_ordering_node(g, n, TRUE); - else if (streq(ordering, "in")) - do_ordering_node(g, n, FALSE); - else if (ordering[0]) - agerr(AGERR, "ordering '%s' not recognized for node '%s'.\n", ordering, agnameof(n)); - } - } -} - -/* ordered_edges: - * handle case where graph specifies edge ordering - * If the graph does not have an ordering attribute, we then - * check for nodes having the attribute. - * Note that, in this implementation, the value of G_ordering - * dominates the value of N_ordering. - */ -static void ordered_edges(graph_t * g) -{ - char *ordering; - - if (!G_ordering && !N_ordering) - return; - if ((ordering = late_string(g, G_ordering, NULL))) { - if (streq(ordering, "out")) - do_ordering(g, TRUE); - else if (streq(ordering, "in")) - do_ordering(g, FALSE); - else if (ordering[0]) - agerr(AGERR, "ordering '%s' not recognized.\n", ordering); - } - else - { - graph_t *subg; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - /* clusters are processed by separate calls to ordered_edges */ - if (!is_cluster(subg)) - ordered_edges(subg); - } - if (N_ordering) do_ordering_for_nodes (g); - } -} - -static int mincross_clust(graph_t * par, graph_t * g, int doBalance) -{ - int c, nc; - - expand_cluster(g); - ordered_edges(g); - flat_breakcycles(g); - flat_reorder(g); - nc = mincross(g, 2, 2, doBalance); - - for (c = 1; c <= GD_n_cluster(g); c++) - nc += mincross_clust(g, GD_clust(g)[c], doBalance); - - save_vlist(g); - return nc; -} - -static int left2right(graph_t * g, node_t * v, node_t * w) -{ - adjmatrix_t *M; - int rv; - - /* CLUSTER indicates orig nodes of clusters, and vnodes of skeletons */ - if (ReMincross == FALSE) { - if ((ND_clust(v) != ND_clust(w)) && (ND_clust(v)) && (ND_clust(w))) { - /* the following allows cluster skeletons to be swapped */ - if ((ND_ranktype(v) == CLUSTER) - && (ND_node_type(v) == VIRTUAL)) - return FALSE; - if ((ND_ranktype(w) == CLUSTER) - && (ND_node_type(w) == VIRTUAL)) - return FALSE; - return TRUE; - /*return ((ND_ranktype(v) != CLUSTER) && (ND_ranktype(w) != CLUSTER)); */ - } - } else { - if ((ND_clust(v)) != (ND_clust(w))) - return TRUE; - } - M = GD_rank(g)[ND_rank(v)].flat; - if (M == NULL) - rv = FALSE; - else { - if (GD_flip(g)) { - node_t *t = v; - v = w; - w = t; - } - rv = ELT(M, flatindex(v), flatindex(w)); - } - return rv; -} - -static int in_cross(node_t * v, node_t * w) -{ - register edge_t **e1, **e2; - register int inv, cross = 0, t; - - for (e2 = ND_in(w).list; *e2; e2++) { - register int cnt = ED_xpenalty(*e2); - - inv = ND_order((agtail(*e2))); - - for (e1 = ND_in(v).list; *e1; e1++) { - t = ND_order(agtail(*e1)) - inv; - if ((t > 0) - || ((t == 0) - && ( ED_tail_port(*e1).p.x > ED_tail_port(*e2).p.x))) - cross += ED_xpenalty(*e1) * cnt; - } - } - return cross; -} - -static int out_cross(node_t * v, node_t * w) -{ - register edge_t **e1, **e2; - register int inv, cross = 0, t; - - for (e2 = ND_out(w).list; *e2; e2++) { - register int cnt = ED_xpenalty(*e2); - inv = ND_order(aghead(*e2)); - - for (e1 = ND_out(v).list; *e1; e1++) { - t = ND_order(aghead(*e1)) - inv; - if ((t > 0) - || ((t == 0) - && ((ED_head_port(*e1)).p.x > (ED_head_port(*e2)).p.x))) - cross += ((ED_xpenalty(*e1)) * cnt); - } - } - return cross; - -} - -static void exchange(node_t * v, node_t * w) -{ - int vi, wi, r; - - r = ND_rank(v); - vi = ND_order(v); - wi = ND_order(w); - ND_order(v) = wi; - GD_rank(Root)[r].v[wi] = v; - ND_order(w) = vi; - GD_rank(Root)[r].v[vi] = w; -} - -static void balanceNodes(graph_t * g, int r, node_t * v, node_t * w) -{ - node_t *s; /* separator node */ - int sepIndex = 0; - int nullType; /* type of null nodes */ - int cntDummy = 0, cntOri = 0; - int k = 0, m = 0, k1 = 0, m1 = 0, i = 0; - - /* we only consider v and w of different types */ - if (ND_node_type(v) == ND_node_type(w)) - return; - - /* count the number of dummy and original nodes */ - for (i = 0; i < GD_rank(g)[r].n; i++) { - if (ND_node_type(GD_rank(g)[r].v[i]) == NORMAL) - cntOri++; - else - cntDummy++; - } - - if (cntOri < cntDummy) { - if (ND_node_type(v) == NORMAL) - s = v; - else - s = w; - } else { - if (ND_node_type(v) == NORMAL) - s = w; - else - s = v; - } - - /* get the separator node index */ - for (i = 0; i < GD_rank(g)[r].n; i++) { - if (GD_rank(g)[r].v[i] == s) - sepIndex = i; - } - - nullType = (ND_node_type(s) == NORMAL) ? VIRTUAL : NORMAL; - - /* count the number of null nodes to the left and - * right of the separator node - */ - for (i = sepIndex - 1; i >= 0; i--) { - if (ND_node_type(GD_rank(g)[r].v[i]) == nullType) - k++; - else - break; - } - - for (i = sepIndex + 1; i < GD_rank(g)[r].n; i++) { - if (ND_node_type(GD_rank(g)[r].v[i]) == nullType) - m++; - else - break; - } - - /* now exchange v,w and calculate the same counts */ - - exchange(v, w); - - /* get the separator node index */ - for (i = 0; i < GD_rank(g)[r].n; i++) { - if (GD_rank(g)[r].v[i] == s) - sepIndex = i; - } - - /* count the number of null nodes to the left and - * right of the separator node - */ - for (i = sepIndex - 1; i >= 0; i--) { - if (ND_node_type(GD_rank(g)[r].v[i]) == nullType) - k1++; - else - break; - } - - for (i = sepIndex + 1; i < GD_rank(g)[r].n; i++) { - if (ND_node_type(GD_rank(g)[r].v[i]) == nullType) - m1++; - else - break; - } - - if (abs(k1 - m1) > abs(k - m)) { - exchange(v, w); //revert to the original ordering - } -} - -static int balance(graph_t * g) -{ - int i, c0, c1, rv; - node_t *v, *w; - int r; - - rv = 0; - - for (r = GD_maxrank(g); r >= GD_minrank(g); r--) { - - GD_rank(g)[r].candidate = FALSE; - for (i = 0; i < GD_rank(g)[r].n - 1; i++) { - v = GD_rank(g)[r].v[i]; - w = GD_rank(g)[r].v[i + 1]; - assert(ND_order(v) < ND_order(w)); - if (left2right(g, v, w)) - continue; - c0 = c1 = 0; - if (r > 0) { - c0 += in_cross(v, w); - c1 += in_cross(w, v); - } - - if (GD_rank(g)[r + 1].n > 0) { - c0 += out_cross(v, w); - c1 += out_cross(w, v); - } -#if 0 - if ((c1 < c0) || ((c0 > 0) && reverse && (c1 == c0))) { - exchange(v, w); - rv += (c0 - c1); - GD_rank(Root)[r].valid = FALSE; - GD_rank(g)[r].candidate = TRUE; - - if (r > GD_minrank(g)) { - GD_rank(Root)[r - 1].valid = FALSE; - GD_rank(g)[r - 1].candidate = TRUE; - } - if (r < GD_maxrank(g)) { - GD_rank(Root)[r + 1].valid = FALSE; - GD_rank(g)[r + 1].candidate = TRUE; - } - } -#endif - - if (c1 <= c0) { - balanceNodes(g, r, v, w); - } - } - } - return rv; -} - -static int transpose_step(graph_t * g, int r, int reverse) -{ - int i, c0, c1, rv; - node_t *v, *w; - - rv = 0; - GD_rank(g)[r].candidate = FALSE; - for (i = 0; i < GD_rank(g)[r].n - 1; i++) { - v = GD_rank(g)[r].v[i]; - w = GD_rank(g)[r].v[i + 1]; - assert(ND_order(v) < ND_order(w)); - if (left2right(g, v, w)) - continue; - c0 = c1 = 0; - if (r > 0) { - c0 += in_cross(v, w); - c1 += in_cross(w, v); - } - if (GD_rank(g)[r + 1].n > 0) { - c0 += out_cross(v, w); - c1 += out_cross(w, v); - } - if ((c1 < c0) || ((c0 > 0) && reverse && (c1 == c0))) { - exchange(v, w); - rv += (c0 - c1); - GD_rank(Root)[r].valid = FALSE; - GD_rank(g)[r].candidate = TRUE; - - if (r > GD_minrank(g)) { - GD_rank(Root)[r - 1].valid = FALSE; - GD_rank(g)[r - 1].candidate = TRUE; - } - if (r < GD_maxrank(g)) { - GD_rank(Root)[r + 1].valid = FALSE; - GD_rank(g)[r + 1].candidate = TRUE; - } - } - } - return rv; -} - -static void transpose(graph_t * g, int reverse) -{ - int r, delta; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) - GD_rank(g)[r].candidate = TRUE; - do { - delta = 0; -#ifdef NOTDEF - /* don't run both the upward and downward passes- they cancel. - i tried making it depend on whether an odd or even pass, - but that didn't help. */ - for (r = GD_maxrank(g); r >= GD_minrank(g); r--) - if (GD_rank(g)[r].candidate) - delta += transpose_step(g, r, reverse); -#endif - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - if (GD_rank(g)[r].candidate) { - delta += transpose_step(g, r, reverse); - } - } - /*} while (delta > ncross(g)*(1.0 - Convergence)); */ - } while (delta >= 1); -} - -static int mincross(graph_t * g, int startpass, int endpass, int doBalance) -{ - int maxthispass, iter, trying, pass; - int cur_cross, best_cross; - - if (startpass > 1) { - cur_cross = best_cross = ncross(g); - save_best(g); - } else - cur_cross = best_cross = INT_MAX; - for (pass = startpass; pass <= endpass; pass++) { - if (pass <= 1) { - maxthispass = MIN(4, MaxIter); - if (g == dot_root(g)) - build_ranks(g, pass); - if (pass == 0) - flat_breakcycles(g); - flat_reorder(g); - - if ((cur_cross = ncross(g)) <= best_cross) { - save_best(g); - best_cross = cur_cross; - } - trying = 0; - } else { - maxthispass = MaxIter; - if (cur_cross > best_cross) - restore_best(g); - cur_cross = best_cross; - } - trying = 0; - for (iter = 0; iter < maxthispass; iter++) { - if (Verbose) - fprintf(stderr, - "mincross: pass %d iter %d trying %d cur_cross %d best_cross %d\n", - pass, iter, trying, cur_cross, best_cross); - if (trying++ >= MinQuit) - break; - if (cur_cross == 0) - break; - mincross_step(g, iter); - if ((cur_cross = ncross(g)) <= best_cross) { - save_best(g); - if (cur_cross < Convergence * best_cross) - trying = 0; - best_cross = cur_cross; - } - } - if (cur_cross == 0) - break; - } - if (cur_cross > best_cross) - restore_best(g); - if (best_cross > 0) { - transpose(g, FALSE); - best_cross = ncross(g); - } - if (doBalance) { - for (iter = 0; iter < maxthispass; iter++) - balance(g); - } - - return best_cross; -} - -static void restore_best(graph_t * g) -{ - node_t *n; - int i, r; - - /* for (n = GD_nlist(g); n; n = ND_next(n)) */ - /* ND_order(n) = saveorder(n); */ - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - n = GD_rank(g)[r].v[i]; - ND_order(n) = saveorder(n); - } - } - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - GD_rank(Root)[r].valid = FALSE; - qsort(GD_rank(g)[r].v, GD_rank(g)[r].n, sizeof(GD_rank(g)[0].v[0]), - (qsort_cmpf) nodeposcmpf); - } -} - -static void save_best(graph_t * g) -{ - node_t *n; - /* for (n = GD_nlist(g); n; n = ND_next(n)) */ - /* saveorder(n) = ND_order(n); */ - int i, r; - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - n = GD_rank(g)[r].v[i]; - saveorder(n) = ND_order(n); - } - } -} - -/* merges the connected components of g */ -static void merge_components(graph_t * g) -{ - int c; - node_t *u, *v; - - if (GD_comp(g).size <= 1) - return; - u = NULL; - for (c = 0; c < GD_comp(g).size; c++) { - v = GD_comp(g).list[c]; - if (u) - ND_next(u) = v; - ND_prev(v) = u; - while (ND_next(v)) { - v = ND_next(v); - } - u = v; - } - GD_comp(g).size = 1; - GD_nlist(g) = GD_comp(g).list[0]; - GD_minrank(g) = GlobalMinRank; - GD_maxrank(g) = GlobalMaxRank; -} - -/* merge connected components, create globally consistent rank lists */ -static void merge2(graph_t * g) -{ - int i, r; - node_t *v; - - /* merge the components and rank limits */ - merge_components(g); - - /* install complete ranks */ - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - GD_rank(g)[r].n = GD_rank(g)[r].an; - GD_rank(g)[r].v = GD_rank(g)[r].av; - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - if (v == NULL) { - if (Verbose) - fprintf(stderr, - "merge2: graph %s, rank %d has only %d < %d nodes\n", - agnameof(g), r, i, GD_rank(g)[r].n); - GD_rank(g)[r].n = i; - break; - } - ND_order(v) = i; - } - } -} - -static void cleanup2(graph_t * g, int nc) -{ - int i, j, r, c; - node_t *v; - edge_t *e; - - if (TI_list) { - free(TI_list); - TI_list = NULL; - } - if (TE_list) { - free(TE_list); - TE_list = NULL; - } - /* fix vlists of clusters */ - for (c = 1; c <= GD_n_cluster(g); c++) - rec_reset_vlists(GD_clust(g)[c]); - - /* remove node temporary edges for ordering nodes */ - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - ND_order(v) = i; - if (ND_flat_out(v).list) { - for (j = 0; (e = ND_flat_out(v).list[j]); j++) - if (ED_edge_type(e) == FLATORDER) { - delete_flat_edge(e); - free(e->base.data); - free(e); - j--; - } - } - } - free_matrix(GD_rank(g)[r].flat); - } - if (Verbose) - fprintf(stderr, "mincross %s: %d crossings, %.2f secs.\n", - agnameof(g), nc, elapsed_sec()); -} - -static node_t *neighbor(node_t * v, int dir) -{ - node_t *rv; - - rv = NULL; -assert(v); - if (dir < 0) { - if (ND_order(v) > 0) - rv = GD_rank(Root)[ND_rank(v)].v[ND_order(v) - 1]; - } else - rv = GD_rank(Root)[ND_rank(v)].v[ND_order(v) + 1]; -assert((rv == 0) || (ND_order(rv)-ND_order(v))*dir > 0); - return rv; -} - -static int is_a_normal_node_of(graph_t * g, node_t * v) -{ - return ((ND_node_type(v) == NORMAL) && agcontains(g, v)); -} - -static int is_a_vnode_of_an_edge_of(graph_t * g, node_t * v) -{ - if ((ND_node_type(v) == VIRTUAL) - && (ND_in(v).size == 1) && (ND_out(v).size == 1)) { - edge_t *e = ND_out(v).list[0]; - while (ED_edge_type(e) != NORMAL) - e = ED_to_orig(e); - if (agcontains(g, e)) - return TRUE; - } - return FALSE; -} - -static int inside_cluster(graph_t * g, node_t * v) -{ - return (is_a_normal_node_of(g, v) | is_a_vnode_of_an_edge_of(g, v)); -} - -static node_t *furthestnode(graph_t * g, node_t * v, int dir) -{ - node_t *u, *rv; - - rv = u = v; - while ((u = neighbor(u, dir))) { - if (is_a_normal_node_of(g, u)) - rv = u; - else if (is_a_vnode_of_an_edge_of(g, u)) - rv = u; - } - return rv; -} - -void save_vlist(graph_t * g) -{ - int r; - - if (GD_rankleader(g)) - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - GD_rankleader(g)[r] = GD_rank(g)[r].v[0]; - } -} - -void rec_save_vlists(graph_t * g) -{ - int c; - - save_vlist(g); - for (c = 1; c <= GD_n_cluster(g); c++) - rec_save_vlists(GD_clust(g)[c]); -} - - -void rec_reset_vlists(graph_t * g) -{ - int r, c; - node_t *u, *v, *w; - - /* fix vlists of sub-clusters */ - for (c = 1; c <= GD_n_cluster(g); c++) - rec_reset_vlists(GD_clust(g)[c]); - - if (GD_rankleader(g)) - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - v = GD_rankleader(g)[r]; -#ifdef DEBUG - node_in_root_vlist(v); -#endif - u = furthestnode(g, v, -1); - w = furthestnode(g, v, 1); - GD_rankleader(g)[r] = u; -#ifdef DEBUG - assert(GD_rank(dot_root(g))[r].v[ND_order(u)] == u); -#endif - GD_rank(g)[r].v = GD_rank(dot_root(g))[r].v + ND_order(u); - GD_rank(g)[r].n = ND_order(w) - ND_order(u) + 1; - } -} - -/* realFillRanks: - * The structures in crossing minimization and positioning require - * that clusters have some node on each rank. This function recursively - * guarantees this property. It takes into account nodes and edges in - * a cluster, the latter causing dummy nodes for intervening ranks. - * For any rank without node, we create a real node of small size. This - * is stored in the subgraph sg, for easy removal later. - * - * I believe it is not necessary to do this for the root graph, as these - * are laid out one component at a time and these will necessarily have a - * node on each rank from source to sink levels. - */ -static Agraph_t* -realFillRanks (Agraph_t* g, int rnks[], int rnks_sz, Agraph_t* sg) -{ - int i, c; - Agedge_t* e; - Agnode_t* n; - - for (c = 1; c <= GD_n_cluster(g); c++) - sg = realFillRanks (GD_clust(g)[c], rnks, rnks_sz, sg); - - if (dot_root(g) == g) - return sg; - memset (rnks, 0, sizeof(int)*rnks_sz); - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - rnks[ND_rank(n)] = 1; - for (e = agfstout(g,n); e; e = agnxtout(g,e)) { - for (i = ND_rank(n)+1; i <= ND_rank(aghead(e)); i++) - rnks[i] = 1; - } - } - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - if (rnks[i] == 0) { - if (!sg) { - sg = agsubg (dot_root(g), "_new_rank", 1); - } - n = agnode (sg, NULL, 1); - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - ND_rank(n) = i; - ND_lw(n) = ND_rw(n) = 0.5; - ND_ht(n) = 1; - ND_UF_size(n) = 1; - alloc_elist(4, ND_in(n)); - alloc_elist(4, ND_out(n)); - agsubnode (g, n, 1); - } - } - return sg; -} - -static void -fillRanks (Agraph_t* g) -{ - Agraph_t* sg; - int rnks_sz = GD_maxrank(g) + 2; - int* rnks = N_NEW(rnks_sz, int); - sg = realFillRanks (g, rnks, rnks_sz, NULL); - free (rnks); -} - -static void init_mincross(graph_t * g) -{ - int size; - - if (Verbose) - start_timer(); - - ReMincross = FALSE; - Root = g; - /* alloc +1 for the null terminator usage in do_ordering() */ - /* also, the +1 avoids attempts to alloc 0 sizes, something - that efence complains about */ - size = agnedges(dot_root(g)) + 1; - TE_list = N_NEW(size, edge_t *); - TI_list = N_NEW(size, int); - mincross_options(g); - if (GD_flags(g) & NEW_RANK) - fillRanks (g); - class2(g); - decompose(g, 1); - allocate_ranks(g); - ordered_edges(g); - GlobalMinRank = GD_minrank(g); - GlobalMaxRank = GD_maxrank(g); -} - -void flat_rev(Agraph_t * g, Agedge_t * e) -{ - int j; - Agedge_t *rev; - - if (!ND_flat_out(aghead(e)).list) - rev = NULL; - else - for (j = 0; (rev = ND_flat_out(aghead(e)).list[j]); j++) - if (aghead(rev) == agtail(e)) - break; - if (rev) { - merge_oneway(e, rev); - if (ED_to_virt(e) == 0) - ED_to_virt(e) = rev; - if ((ED_edge_type(rev) == FLATORDER) - && (ED_to_orig(rev) == 0)) - ED_to_orig(rev) = e; - elist_append(e, ND_other(agtail(e))); - } else { - rev = new_virtual_edge(aghead(e), agtail(e), e); - if (ED_edge_type(e) == FLATORDER) - ED_edge_type(rev) = FLATORDER; - else - ED_edge_type(rev) = REVERSED; - ED_label(rev) = ED_label(e); - flat_edge(g, rev); - } -} - -static void flat_search(graph_t * g, node_t * v) -{ - int i; - boolean hascl; - edge_t *e; - adjmatrix_t *M = GD_rank(g)[ND_rank(v)].flat; - - ND_mark(v) = TRUE; - ND_onstack(v) = TRUE; - hascl = (GD_n_cluster(dot_root(g)) > 0); - if (ND_flat_out(v).list) - for (i = 0; (e = ND_flat_out(v).list[i]); i++) { - if (hascl - && NOT(agcontains(g, agtail(e)) && agcontains(g, aghead(e)))) - continue; - if (ED_weight(e) == 0) - continue; - if (ND_onstack(aghead(e)) == TRUE) { - assert(flatindex(aghead(e)) < M->nrows); - assert(flatindex(agtail(e)) < M->ncols); - ELT(M, flatindex(aghead(e)), flatindex(agtail(e))) = 1; - delete_flat_edge(e); - i--; - if (ED_edge_type(e) == FLATORDER) - continue; - flat_rev(g, e); - } else { - assert(flatindex(aghead(e)) < M->nrows); - assert(flatindex(agtail(e)) < M->ncols); - ELT(M, flatindex(agtail(e)), flatindex(aghead(e))) = 1; - if (ND_mark(aghead(e)) == FALSE) - flat_search(g, aghead(e)); - } - } - ND_onstack(v) = FALSE; -} - -static void flat_breakcycles(graph_t * g) -{ - int i, r, flat; - node_t *v; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - flat = 0; - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - ND_mark(v) = ND_onstack(v) = FALSE; - flatindex(v) = i; - if ((ND_flat_out(v).size > 0) && (flat == 0)) { - GD_rank(g)[r].flat = - new_matrix(GD_rank(g)[r].n, GD_rank(g)[r].n); - flat = 1; - } - } - if (flat) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - if (ND_mark(v) == FALSE) - flat_search(g, v); - } - } - } -} - -/* allocate_ranks: - * Allocate rank structure, determining number of nodes per rank. - * Note that no nodes are put into the structure yet. - */ -void allocate_ranks(graph_t * g) -{ - int r, low, high, *cn; - node_t *n; - edge_t *e; - - cn = N_NEW(GD_maxrank(g) + 2, int); /* must be 0 based, not GD_minrank */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - cn[ND_rank(n)]++; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - low = ND_rank(agtail(e)); - high = ND_rank(aghead(e)); - if (low > high) { - int t = low; - low = high; - high = t; - } - for (r = low + 1; r < high; r++) - cn[r]++; - } - } - GD_rank(g) = N_NEW(GD_maxrank(g) + 2, rank_t); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - GD_rank(g)[r].an = GD_rank(g)[r].n = cn[r]; - GD_rank(g)[r].av = GD_rank(g)[r].v = N_NEW(cn[r] + 1, node_t *); - } - free(cn); -} - -/* install a node at the current right end of its rank */ -void install_in_rank(graph_t * g, node_t * n) -{ - int i, r; - - r = ND_rank(n); - i = GD_rank(g)[r].n; - if (GD_rank(g)[r].an <= 0) { - agerr(AGERR, "install_in_rank, line %d: %s %s rank %d i = %d an = 0\n", - __LINE__, agnameof(g), agnameof(n), r, i); - return; - } - - GD_rank(g)[r].v[i] = n; - ND_order(n) = i; - GD_rank(g)[r].n++; - assert(GD_rank(g)[r].n <= GD_rank(g)[r].an); -#ifdef DEBUG - { - node_t *v; - - for (v = GD_nlist(g); v; v = ND_next(v)) - if (v == n) - break; - assert(v != NULL); - } -#endif - if (ND_order(n) > GD_rank(Root)[r].an) { - agerr(AGERR, "install_in_rank, line %d: ND_order(%s) [%d] > GD_rank(Root)[%d].an [%d]\n", - __LINE__, agnameof(n), ND_order(n), r, GD_rank(Root)[r].an); - return; - } - if ((r < GD_minrank(g)) || (r > GD_maxrank(g))) { - agerr(AGERR, "install_in_rank, line %d: rank %d not in rank range [%d,%d]\n", - __LINE__, r, GD_minrank(g), GD_maxrank(g)); - return; - } - if (GD_rank(g)[r].v + ND_order(n) > - GD_rank(g)[r].av + GD_rank(Root)[r].an) { - agerr(AGERR, "install_in_rank, line %d: GD_rank(g)[%d].v + ND_order(%s) [%d] > GD_rank(g)[%d].av + GD_rank(Root)[%d].an [%d]\n", - __LINE__, r, agnameof(n),GD_rank(g)[r].v + ND_order(n), r, r, GD_rank(g)[r].av+GD_rank(Root)[r].an); - return; - } -} - -/* install nodes in ranks. the initial ordering ensure that series-parallel - * graphs such as trees are drawn with no crossings. it tries searching - * in- and out-edges and takes the better of the two initial orderings. - */ -void build_ranks(graph_t * g, int pass) -{ - int i, j; - node_t *n, *n0; - edge_t **otheredges; - nodequeue *q; - - q = new_queue(GD_n_nodes(g)); - for (n = GD_nlist(g); n; n = ND_next(n)) - MARK(n) = FALSE; - -#ifdef DEBUG - { - edge_t *e; - for (n = GD_nlist(g); n; n = ND_next(n)) { - for (i = 0; (e = ND_out(n).list[i]); i++) - assert(MARK(aghead(e)) == FALSE); - for (i = 0; (e = ND_in(n).list[i]); i++) - assert(MARK(agtail(e)) == FALSE); - } - } -#endif - - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) - GD_rank(g)[i].n = 0; - - for (n = GD_nlist(g); n; n = ND_next(n)) { - otheredges = ((pass == 0) ? ND_in(n).list : ND_out(n).list); - if (otheredges[0] != NULL) - continue; - if (MARK(n) == FALSE) { - MARK(n) = TRUE; - enqueue(q, n); - while ((n0 = dequeue(q))) { - if (ND_ranktype(n0) != CLUSTER) { - install_in_rank(g, n0); - enqueue_neighbors(q, n0, pass); - } else { - install_cluster(g, n0, pass, q); - } - } - } - } - if (dequeue(q)) - agerr(AGERR, "surprise\n"); - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - GD_rank(Root)[i].valid = FALSE; - if (GD_flip(g) && (GD_rank(g)[i].n > 0)) { - int n, ndiv2; - node_t **vlist = GD_rank(g)[i].v; - n = GD_rank(g)[i].n - 1; - ndiv2 = n / 2; - for (j = 0; j <= ndiv2; j++) - exchange(vlist[j], vlist[n - j]); - } - } - - if ((g == dot_root(g)) && ncross(g) > 0) - transpose(g, FALSE); - free_queue(q); -} - -void enqueue_neighbors(nodequeue * q, node_t * n0, int pass) -{ - int i; - edge_t *e; - - if (pass == 0) { - for (i = 0; i < ND_out(n0).size; i++) { - e = ND_out(n0).list[i]; - if ((MARK(aghead(e))) == FALSE) { - MARK(aghead(e)) = TRUE; - enqueue(q, aghead(e)); - } - } - } else { - for (i = 0; i < ND_in(n0).size; i++) { - e = ND_in(n0).list[i]; - if ((MARK(agtail(e))) == FALSE) { - MARK(agtail(e)) = TRUE; - enqueue(q, agtail(e)); - } - } - } -} - -static int constraining_flat_edge(Agraph_t *g, Agnode_t *v, Agedge_t *e) -{ - if (ED_weight(e) == 0) return FALSE; - if (!inside_cluster(g,agtail(e))) return FALSE; - if (!inside_cluster(g,aghead(e))) return FALSE; - return TRUE; -} - - -/* construct nodes reachable from 'here' in post-order. -* This is the same as doing a topological sort in reverse order. -*/ -static int postorder(graph_t * g, node_t * v, node_t ** list, int r) -{ - edge_t *e; - int i, cnt = 0; - - MARK(v) = TRUE; - if (ND_flat_out(v).size > 0) { - for (i = 0; (e = ND_flat_out(v).list[i]); i++) { - if (!constraining_flat_edge(g,v,e)) continue; - if (MARK(aghead(e)) == FALSE) - cnt += postorder(g, aghead(e), list + cnt, r); - } - } - assert(ND_rank(v) == r); - list[cnt++] = v; - return cnt; -} - -static void flat_reorder(graph_t * g) -{ - int i, j, r, pos, n_search, local_in_cnt, local_out_cnt, base_order; - node_t *v, **left, **right, *t; - node_t **temprank = NULL; - edge_t *flat_e, *e; - - if (GD_has_flat_edges(g) == FALSE) - return; - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - if (GD_rank(g)[r].n == 0) continue; - base_order = ND_order(GD_rank(g)[r].v[0]); - for (i = 0; i < GD_rank(g)[r].n; i++) - MARK(GD_rank(g)[r].v[i]) = FALSE; - temprank = ALLOC(i + 1, temprank, node_t *); - pos = 0; - - /* construct reverse topological sort order in temprank */ - for (i = 0; i < GD_rank(g)[r].n; i++) { - if (GD_flip(g)) v = GD_rank(g)[r].v[i]; - else v = GD_rank(g)[r].v[GD_rank(g)[r].n - i - 1]; - - local_in_cnt = local_out_cnt = 0; - for (j = 0; j < ND_flat_in(v).size; j++) { - flat_e = ND_flat_in(v).list[j]; - if (constraining_flat_edge(g,v,flat_e)) local_in_cnt++; - } - for (j = 0; j < ND_flat_out(v).size; j++) { - flat_e = ND_flat_out(v).list[j]; - if (constraining_flat_edge(g,v,flat_e)) local_out_cnt++; - } - if ((local_in_cnt == 0) && (local_out_cnt == 0)) - temprank[pos++] = v; - else { - if ((MARK(v) == FALSE) && (local_in_cnt == 0)) { - left = temprank + pos; - n_search = postorder(g, v, left, r); - pos += n_search; - } - } - } - - if (pos) { - if (GD_flip(g) == FALSE) { - left = temprank; - right = temprank + pos - 1; - while (left < right) { - t = *left; - *left = *right; - *right = t; - left++; - right--; - } - } - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i] = temprank[i]; - ND_order(v) = i + base_order; - } - - /* nonconstraint flat edges must be made LR */ - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - if (ND_flat_out(v).list) { - for (j = 0; (e = ND_flat_out(v).list[j]); j++) { - if ( ((GD_flip(g) == FALSE) && (ND_order(aghead(e)) < ND_order(agtail(e)))) || - ( (GD_flip(g)) && (ND_order(aghead(e)) > ND_order(agtail(e)) ))) { - assert(constraining_flat_edge(g,v,e) == FALSE); - delete_flat_edge(e); - j--; - flat_rev(g, e); - } - } - } - } - /* postprocess to restore intended order */ - } - /* else do no harm! */ - GD_rank(Root)[r].valid = FALSE; - } - if (temprank) - free(temprank); -} - -static void reorder(graph_t * g, int r, int reverse, int hasfixed) -{ - int changed = 0, nelt; - boolean muststay, sawclust; - node_t **vlist = GD_rank(g)[r].v; - node_t **lp, **rp, **ep = vlist + GD_rank(g)[r].n; - - for (nelt = GD_rank(g)[r].n - 1; nelt >= 0; nelt--) { - lp = vlist; - while (lp < ep) { - /* find leftmost node that can be compared */ - while ((lp < ep) && (ND_mval(*lp) < 0)) - lp++; - if (lp >= ep) - break; - /* find the node that can be compared */ - sawclust = muststay = FALSE; - for (rp = lp + 1; rp < ep; rp++) { - if (sawclust && ND_clust(*rp)) - continue; /* ### */ - if (left2right(g, *lp, *rp)) { - muststay = TRUE; - break; - } - if (ND_mval(*rp) >= 0) - break; - if (ND_clust(*rp)) - sawclust = TRUE; /* ### */ - } - if (rp >= ep) - break; - if (muststay == FALSE) { - register int p1 = (ND_mval(*lp)); - register int p2 = (ND_mval(*rp)); - if ((p1 > p2) || ((p1 == p2) && (reverse))) { - exchange(*lp, *rp); - changed++; - } - } - lp = rp; - } - if ((hasfixed == FALSE) && (reverse == FALSE)) - ep--; - } - - if (changed) { - GD_rank(Root)[r].valid = FALSE; - if (r > 0) - GD_rank(Root)[r - 1].valid = FALSE; - } -} - -static void mincross_step(graph_t * g, int pass) -{ - int r, other, first, last, dir; - int hasfixed, reverse; - - if ((pass % 4) < 2) - reverse = TRUE; - else - reverse = FALSE; - if (pass % 2) { - r = GD_maxrank(g) - 1; - dir = -1; - } /* up pass */ - else { - r = 1; - dir = 1; - } /* down pass */ - - if (pass % 2 == 0) { /* down pass */ - first = GD_minrank(g) + 1; - if (GD_minrank(g) > GD_minrank(Root)) - first--; - last = GD_maxrank(g); - dir = 1; - } else { /* up pass */ - first = GD_maxrank(g) - 1; - last = GD_minrank(g); - if (GD_maxrank(g) < GD_maxrank(Root)) - first++; - dir = -1; - } - - for (r = first; r != last + dir; r += dir) { - other = r - dir; - hasfixed = medians(g, r, other); - reorder(g, r, reverse, hasfixed); - } - transpose(g, NOT(reverse)); -} - -static int local_cross(elist l, int dir) -{ - int i, j, is_out; - int cross = 0; - edge_t *e, *f; - if (dir > 0) - is_out = TRUE; - else - is_out = FALSE; - for (i = 0; (e = l.list[i]); i++) { - if (is_out) - for (j = i + 1; (f = l.list[j]); j++) { - if ((ND_order(aghead(f)) - ND_order(aghead(e))) - * (ED_tail_port(f).p.x - ED_tail_port(e).p.x) < 0) - cross += ED_xpenalty(e) * ED_xpenalty(f); - } else - for (j = i + 1; (f = l.list[j]); j++) { - if ((ND_order(agtail(f)) - ND_order(agtail(e))) - * (ED_head_port(f).p.x - ED_head_port(e).p.x) < 0) - cross += ED_xpenalty(e) * ED_xpenalty(f); - } - } - return cross; -} - -static int rcross(graph_t * g, int r) -{ - static int *Count, C; - int top, bot, cross, max, i, k; - node_t **rtop, *v; - - cross = 0; - max = 0; - rtop = GD_rank(g)[r].v; - - if (C <= GD_rank(Root)[r + 1].n) { - C = GD_rank(Root)[r + 1].n + 1; - Count = ALLOC(C, Count, int); - } - - for (i = 0; i < GD_rank(g)[r + 1].n; i++) - Count[i] = 0; - - for (top = 0; top < GD_rank(g)[r].n; top++) { - register edge_t *e; - if (max > 0) { - for (i = 0; (e = ND_out(rtop[top]).list[i]); i++) { - for (k = ND_order(aghead(e)) + 1; k <= max; k++) - cross += Count[k] * ED_xpenalty(e); - } - } - for (i = 0; (e = ND_out(rtop[top]).list[i]); i++) { - register int inv = ND_order(aghead(e)); - if (inv > max) - max = inv; - Count[inv] += ED_xpenalty(e); - } - } - for (top = 0; top < GD_rank(g)[r].n; top++) { - v = GD_rank(g)[r].v[top]; - if (ND_has_port(v)) - cross += local_cross(ND_out(v), 1); - } - for (bot = 0; bot < GD_rank(g)[r + 1].n; bot++) { - v = GD_rank(g)[r + 1].v[bot]; - if (ND_has_port(v)) - cross += local_cross(ND_in(v), -1); - } - return cross; -} - -int ncross(graph_t * g) -{ - int r, count, nc; - - g = Root; - count = 0; - for (r = GD_minrank(g); r < GD_maxrank(g); r++) { - if (GD_rank(g)[r].valid) - count += GD_rank(g)[r].cache_nc; - else { - nc = GD_rank(g)[r].cache_nc = rcross(g, r); - count += nc; - GD_rank(g)[r].valid = TRUE; - } - } - return count; -} - -static int ordercmpf(int *i0, int *i1) -{ - return (*i0) - (*i1); -} - -/* flat_mval: - * Calculate a mval for nodes with no in or out non-flat edges. - * Assume (ND_out(n).size == 0) && (ND_in(n).size == 0) - * Find flat edge a->n where a has the largest order and set - * n.mval = a.mval+1, assuming a.mval is defined (>=0). - * If there are no flat in edges, find flat edge n->a where a - * has the smallest order and set * n.mval = a.mval-1, assuming - * a.mval is > 0. - * Return true if n.mval is left -1, indicating a fixed node for sorting. - */ -static int flat_mval(node_t * n) -{ - int i; - edge_t *e, **fl; - node_t *nn; - - if (ND_flat_in(n).size > 0) { - fl = ND_flat_in(n).list; - nn = agtail(fl[0]); - for (i = 1; (e = fl[i]); i++) - if (ND_order(agtail(e)) > ND_order(nn)) - nn = agtail(e); - if (ND_mval(nn) >= 0) { - ND_mval(n) = ND_mval(nn) + 1; - return FALSE; - } - } else if (ND_flat_out(n).size > 0) { - fl = ND_flat_out(n).list; - nn = aghead(fl[0]); - for (i = 1; (e = fl[i]); i++) - if (ND_order(aghead(e)) < ND_order(nn)) - nn = aghead(e); - if (ND_mval(nn) > 0) { - ND_mval(n) = ND_mval(nn) - 1; - return FALSE; - } - } - return TRUE; -} - -#define VAL(node,port) (MC_SCALE * ND_order(node) + (port).order) - -static boolean medians(graph_t * g, int r0, int r1) -{ - int i, j, j0, lm, rm, lspan, rspan, *list; - node_t *n, **v; - edge_t *e; - boolean hasfixed = FALSE; - - list = TI_list; - v = GD_rank(g)[r0].v; - for (i = 0; i < GD_rank(g)[r0].n; i++) { - n = v[i]; - j = 0; - if (r1 > r0) - for (j0 = 0; (e = ND_out(n).list[j0]); j0++) { - if (ED_xpenalty(e) > 0) - list[j++] = VAL(aghead(e), ED_head_port(e)); - } else - for (j0 = 0; (e = ND_in(n).list[j0]); j0++) { - if (ED_xpenalty(e) > 0) - list[j++] = VAL(agtail(e), ED_tail_port(e)); - } - switch (j) { - case 0: - ND_mval(n) = -1; - break; - case 1: - ND_mval(n) = list[0]; - break; - case 2: - ND_mval(n) = (list[0] + list[1]) / 2; - break; - default: - qsort(list, j, sizeof(int), (qsort_cmpf) ordercmpf); - if (j % 2) - ND_mval(n) = list[j / 2]; - else { - /* weighted median */ - rm = j / 2; - lm = rm - 1; - rspan = list[j - 1] - list[rm]; - lspan = list[lm] - list[0]; - if (lspan == rspan) - ND_mval(n) = (list[lm] + list[rm]) / 2; - else { - int w = list[lm] * rspan + list[rm] * lspan; - ND_mval(n) = w / (lspan + rspan); - } - } - } - } - for (i = 0; i < GD_rank(g)[r0].n; i++) { - n = v[i]; - if ((ND_out(n).size == 0) && (ND_in(n).size == 0)) - hasfixed |= flat_mval(n); - } - return hasfixed; -} - -static int nodeposcmpf(node_t ** n0, node_t ** n1) -{ - return (ND_order(*n0) - ND_order(*n1)); -} - -static int edgeidcmpf(edge_t ** e0, edge_t ** e1) -{ - return (AGSEQ(*e0) - AGSEQ(*e1)); -} - -/* following code deals with weights of edges of "virtual" nodes */ -#define ORDINARY 0 -#define SINGLETON 1 -#define VIRTUALNODE 2 -#define NTYPES 3 - -#define C_EE 1 -#define C_VS 2 -#define C_SS 2 -#define C_VV 4 - -static int table[NTYPES][NTYPES] = { - /* ordinary */ {C_EE, C_EE, C_EE}, - /* singleton */ {C_EE, C_SS, C_VS}, - /* virtual */ {C_EE, C_VS, C_VV} -}; - -static int endpoint_class(node_t * n) -{ - if (ND_node_type(n) == VIRTUAL) - return VIRTUALNODE; - if (ND_weight_class(n) <= 1) - return SINGLETON; - return ORDINARY; -} - -void virtual_weight(edge_t * e) -{ - int t; - t = table[endpoint_class(agtail(e))][endpoint_class(aghead(e))]; - ED_weight(e) *= t; -} - -#ifdef DEBUG -void check_rs(graph_t * g, int null_ok) -{ - int i, r; - node_t *v, *prev; - - fprintf(stderr, "\n\n%s:\n", agnameof(g)); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - fprintf(stderr, "%d: ", r); - prev = NULL; - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - if (v == NULL) { - fprintf(stderr, "NULL\t"); - if (null_ok == FALSE) - abort(); - } else { - fprintf(stderr, "%s(%f)\t", agnameof(v), ND_mval(v)); - assert(ND_rank(v) == r); - assert(v != prev); - prev = v; - } - } - fprintf(stderr, "\n"); - } -} - -void check_order(void) -{ - int i, r; - node_t *v; - graph_t *g = Root; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - assert(GD_rank(g)[r].v[GD_rank(g)[r].n] == NULL); - for (i = 0; (v = GD_rank(g)[r].v[i]); i++) { - assert(ND_rank(v) == r); - assert(ND_order(v) == i); - } - } -} -#endif - -static void mincross_options(graph_t * g) -{ - char *p; - double f; - - /* set default values */ - MinQuit = 8; - MaxIter = 24; - Convergence = .995; - - p = agget(g, "mclimit"); - if (p && ((f = atof(p)) > 0.0)) { - MinQuit = MAX(1, MinQuit * f); - MaxIter = MAX(1, MaxIter * f); - } -} - -#ifdef DEBUG -void check_exchange(node_t * v, node_t * w) -{ - int i, r; - node_t *u; - - if ((ND_clust(v) == NULL) && (ND_clust(w) == NULL)) - return; - assert((ND_clust(v) == NULL) || (ND_clust(w) == NULL)); - assert(ND_rank(v) == ND_rank(w)); - assert(ND_order(v) < ND_order(w)); - r = ND_rank(v); - - for (i = ND_order(v) + 1; i < ND_order(w); i++) { - u = GD_rank(dot_root(v))[r].v[i]; - if (ND_clust(u)) - abort(); - } -} - -void check_vlists(graph_t * g) -{ - int c, i, j, r; - node_t *u; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - for (i = 0; i < GD_rank(g)[r].n; i++) { - u = GD_rank(g)[r].v[i]; - j = ND_order(u); - assert(GD_rank(Root)[r].v[j] == u); - } - if (GD_rankleader(g)) { - u = GD_rankleader(g)[r]; - j = ND_order(u); - assert(GD_rank(Root)[r].v[j] == u); - } - } - for (c = 1; c <= GD_n_cluster(g); c++) - check_vlists(GD_clust(g)[c]); -} - -void node_in_root_vlist(node_t * n) -{ - node_t **vptr; - - for (vptr = GD_rank(Root)[ND_rank(n)].v; *vptr; vptr++) - if (*vptr == n) - break; - if (*vptr == 0) - abort(); -} -#endif /* DEBUG code */ diff --git a/internal/ccall/dotgen/position.c b/internal/ccall/dotgen/position.c deleted file mode 100644 index 21c9b08..0000000 --- a/internal/ccall/dotgen/position.c +++ /dev/null @@ -1,1262 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * position(g): set ND_coord(n) (x and y) for all nodes n of g, using GD_rank(g). - * (the graph may be modified by merging certain edges with a common endpoint.) - * the coordinates are computed by constructing and ranking an auxiliary graph. - * then leaf nodes are inserted in the fast graph. cluster boundary nodes are - * created and correctly separated. - */ - -#include "dot.h" -#include "aspect.h" - -static int nsiter2(graph_t * g); -static void create_aux_edges(graph_t * g); -static void remove_aux_edges(graph_t * g); -static void set_xcoords(graph_t * g); -static void set_ycoords(graph_t * g); -static void set_aspect(graph_t * g, aspect_t* ); -static void expand_leaves(graph_t * g); -static void make_lrvn(graph_t * g); -static void contain_nodes(graph_t * g); -static boolean idealsize(graph_t * g, double); - -#if DEBUG > 1 -static void -dumpNS (graph_t * g) -{ - node_t* n = GD_nlist(g); - elist el; - edge_t* e; - int i; - - while (n) { - el = ND_out(n); - for (i = 0; i < el.size; i++) { - e = el.list[i]; - fprintf (stderr, "%s(%x) -> ", agnameof(agtail(e)),agtail(e)); - fprintf (stderr, "%s(%x) : %d\n", agnameof(aghead(e)), aghead(e), - ED_minlen(e)); - } - n = ND_next(n); - } -} -#endif - -static double -largeMinlen (double l) -{ - agerr (AGERR, "Edge length %f larger than maximum %u allowed.\nCheck for overwide node(s).\n", l, USHRT_MAX); - return (double)USHRT_MAX; -} - -/* connectGraph: - * When source and/or sink nodes are defined, it is possible that - * after the auxiliary edges are added, the graph may still have 2 or - * 3 components. To fix this, we put trivial constraints connecting the - * first items of each rank. - */ -static void -connectGraph (graph_t* g) -{ - int i, j, r, found; - node_t* tp; - node_t* hp; - node_t* sn; - edge_t* e; - rank_t* rp; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - rp = GD_rank(g)+r; - found =FALSE; - tp = NULL; - for (i = 0; i < rp->n; i++) { - tp = rp->v[i]; - if (ND_save_out(tp).list) { - for (j = 0; (e = ND_save_out(tp).list[j]); j++) { - if ((ND_rank(aghead(e)) > r) || (ND_rank(agtail(e)) > r)) { - found = TRUE; - break; - } - } - if (found) break; - } - if (ND_save_in(tp).list) { - for (j = 0; (e = ND_save_in(tp).list[j]); j++) { - if ((ND_rank(agtail(e)) > r) || (ND_rank(aghead(e)) > r)) { - found = TRUE; - break; - } - } - if (found) break; - } - } - if (found || !tp) continue; - tp = rp->v[0]; - if (r < GD_maxrank(g)) hp = (rp+1)->v[0]; - else hp = (rp-1)->v[0]; - assert (hp); - sn = virtual_node(g); - ND_node_type(sn) = SLACKNODE; - make_aux_edge(sn, tp, 0, 0); - make_aux_edge(sn, hp, 0, 0); - ND_rank(sn) = MIN(ND_rank(tp), ND_rank(hp)); - } -} - -void dot_position(graph_t * g, aspect_t* asp) -{ - if (GD_nlist(g) == NULL) - return; /* ignore empty graph */ - mark_lowclusters(g); /* we could remove from splines.c now */ - set_ycoords(g); - if (Concentrate) - dot_concentrate(g); - expand_leaves(g); - if (flat_edges(g)) - set_ycoords(g); - create_aux_edges(g); - if (rank(g, 2, nsiter2(g))) { /* LR balance == 2 */ - connectGraph (g); - assert(rank(g, 2, nsiter2(g)) == 0); - } - set_xcoords(g); - set_aspect(g, asp); - remove_aux_edges(g); /* must come after set_aspect since we now - * use GD_ln and GD_rn for bbox width. - */ -} - -static int nsiter2(graph_t * g) -{ - int maxiter = INT_MAX; - char *s; - - if ((s = agget(g, "nslimit"))) - maxiter = atof(s) * agnnodes(g); - return maxiter; -} - -static int go(node_t * u, node_t * v) -{ - int i; - edge_t *e; - - if (u == v) - return TRUE; - for (i = 0; (e = ND_out(u).list[i]); i++) { - if (go(aghead(e), v)) - return TRUE; - } - return FALSE; -} - -static int canreach(node_t * u, node_t * v) -{ - return go(u, v); -} - -edge_t *make_aux_edge(node_t * u, node_t * v, double len, int wt) -{ - edge_t *e; - - Agedgepair_t* e2 = NEW(Agedgepair_t); - AGTYPE(&(e2->in)) = AGINEDGE; - AGTYPE(&(e2->out)) = AGOUTEDGE; - e2->out.base.data = (Agrec_t*)NEW(Agedgeinfo_t); - e = &(e2->out); - - agtail(e) = u; - aghead(e) = v; - if (len > USHRT_MAX) - len = largeMinlen (len); - ED_minlen(e) = ROUND(len); - ED_weight(e) = wt; - fast_edge(e); - return e; -} - -static void allocate_aux_edges(graph_t * g) -{ - int i, j, n_in; - node_t *n; - - /* allocate space for aux edge lists */ - for (n = GD_nlist(g); n; n = ND_next(n)) { - ND_save_in(n) = ND_in(n); - ND_save_out(n) = ND_out(n); - for (i = 0; ND_out(n).list[i]; i++); - for (j = 0; ND_in(n).list[j]; j++); - n_in = i + j; - alloc_elist(n_in + 3, ND_in(n)); - alloc_elist(3, ND_out(n)); - } -} - -/* make_LR_constraints: - */ -static void -make_LR_constraints(graph_t * g) -{ - int i, j, k; - int sw; /* self width */ - int m0, m1; - double width; - int sep[2]; - int nodesep; /* separation between nodes on same rank */ - edge_t *e, *e0, *e1, *ff; - node_t *u, *v, *t0, *h0; - rank_t *rank = GD_rank(g); - - /* Use smaller separation on odd ranks if g has edge labels */ - if (GD_has_labels(g->root) & EDGE_LABEL) { - sep[0] = GD_nodesep(g); - sep[1] = 5; - } - else { - sep[1] = sep[0] = GD_nodesep(g); - } - /* make edges to constrain left-to-right ordering */ - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - double last; - last = ND_rank(rank[i].v[0]) = 0; - nodesep = sep[i & 1]; - for (j = 0; j < rank[i].n; j++) { - u = rank[i].v[j]; - ND_mval(u) = ND_rw(u); /* keep it somewhere safe */ - if (ND_other(u).size > 0) { /* compute self size */ - /* FIX: dot assumes all self-edges go to the right. This - * is no longer true, though makeSelfEdge still attempts to - * put as many as reasonable on the right. The dot code - * should be modified to allow a box reflecting the placement - * of all self-edges, and use that to reposition the nodes. - * Note that this would not only affect left and right - * positioning but may also affect interrank spacing. - */ - sw = 0; - for (k = 0; (e = ND_other(u).list[k]); k++) { - if (agtail(e) == aghead(e)) { - sw += selfRightSpace (e); - } - } - ND_rw(u) += sw; /* increment to include self edges */ - } - v = rank[i].v[j + 1]; - if (v) { - width = ND_rw(u) + ND_lw(v) + nodesep; - e0 = make_aux_edge(u, v, width, 0); - last = (ND_rank(v) = last + width); - } - - /* constraints from labels of flat edges on previous rank */ - if ((e = (edge_t*)ND_alg(u))) { - e0 = ND_save_out(u).list[0]; - e1 = ND_save_out(u).list[1]; - if (ND_order(aghead(e0)) > ND_order(aghead(e1))) { - ff = e0; - e0 = e1; - e1 = ff; - } - m0 = (ED_minlen(e) * GD_nodesep(g)) / 2; - m1 = m0 + ND_rw(aghead(e0)) + ND_lw(agtail(e0)); - /* these guards are needed because the flat edges - * work very poorly with cluster layout */ - if (canreach(agtail(e0), aghead(e0)) == FALSE) - make_aux_edge(aghead(e0), agtail(e0), m1, - ED_weight(e)); - m1 = m0 + ND_rw(agtail(e1)) + ND_lw(aghead(e1)); - if (canreach(aghead(e1), agtail(e1)) == FALSE) - make_aux_edge(agtail(e1), aghead(e1), m1, - ED_weight(e)); - } - - /* position flat edge endpoints */ - for (k = 0; k < ND_flat_out(u).size; k++) { - e = ND_flat_out(u).list[k]; - if (ND_order(agtail(e)) < ND_order(aghead(e))) { - t0 = agtail(e); - h0 = aghead(e); - } else { - t0 = aghead(e); - h0 = agtail(e); - } - - width = ND_rw(t0) + ND_lw(h0); - m0 = ED_minlen(e) * GD_nodesep(g) + width; - - if ((e0 = find_fast_edge(t0, h0))) { - /* flat edge between adjacent neighbors - * ED_dist contains the largest label width. - */ - m0 = MAX(m0, width + GD_nodesep(g) + ROUND(ED_dist(e))); - if (m0 > USHRT_MAX) - m0 = largeMinlen (m0); - ED_minlen(e0) = MAX(ED_minlen(e0), m0); - ED_weight(e0) = MAX(ED_weight(e0), ED_weight(e)); - } - else if (!ED_label(e)) { - /* unlabeled flat edge between non-neighbors - * ED_minlen(e) is max of ED_minlen of all equivalent - * edges. - */ - make_aux_edge(t0, h0, m0, ED_weight(e)); - } - /* labeled flat edges between non-neighbors have already - * been constrained by the label above. - */ - } - } - } -} - -/* make_edge_pairs: make virtual edge pairs corresponding to input edges */ -static void make_edge_pairs(graph_t * g) -{ - int i, m0, m1; - node_t *n, *sn; - edge_t *e; - - for (n = GD_nlist(g); n; n = ND_next(n)) { - if (ND_save_out(n).list) - for (i = 0; (e = ND_save_out(n).list[i]); i++) { - sn = virtual_node(g); - ND_node_type(sn) = SLACKNODE; - m0 = (ED_head_port(e).p.x - ED_tail_port(e).p.x); - if (m0 > 0) - m1 = 0; - else { - m1 = -m0; - m0 = 0; - } -#ifdef NOTDEF -/* was trying to improve LR balance */ - if ((ND_save_out(n).size % 2 == 0) - && (i == ND_save_out(n).size / 2 - 1)) { - node_t *u = ND_save_out(n).list[i]->head; - node_t *v = ND_save_out(n).list[i + 1]->head; - double width = ND_rw(u) + ND_lw(v) + GD_nodesep(g); - m0 = width / 2 - 1; - } -#endif - make_aux_edge(sn, agtail(e), m0 + 1, ED_weight(e)); - make_aux_edge(sn, aghead(e), m1 + 1, ED_weight(e)); - ND_rank(sn) = - MIN(ND_rank(agtail(e)) - m0 - 1, - ND_rank(aghead(e)) - m1 - 1); - } - } -} - -static void contain_clustnodes(graph_t * g) -{ - int c; - edge_t *e; - - if (g != dot_root(g)) { - contain_nodes(g); - if ((e = find_fast_edge(GD_ln(g),GD_rn(g)))) /* maybe from lrvn()?*/ - ED_weight(e) += 128; - else - make_aux_edge(GD_ln(g), GD_rn(g), 1, 128); /* clust compaction edge */ - } - for (c = 1; c <= GD_n_cluster(g); c++) - contain_clustnodes(GD_clust(g)[c]); -} - -static int vnode_not_related_to(graph_t * g, node_t * v) -{ - edge_t *e; - - if (ND_node_type(v) != VIRTUAL) - return FALSE; - for (e = ND_save_out(v).list[0]; ED_to_orig(e); e = ED_to_orig(e)); - if (agcontains(g, agtail(e))) - return FALSE; - if (agcontains(g, aghead(e))) - return FALSE; - return TRUE; -} - -/* keepout_othernodes: - * Guarantee nodes outside the cluster g are placed outside of it. - * This is done by adding constraints to make sure such nodes have - * a gap of margin from the left or right bounding box node ln or rn. - * - * We could probably reduce some of these constraints by checking if - * the node is in a cluster, since elsewhere we make constrain a - * separate between clusters. Also, we should be able to skip the - * first loop if g is the root graph. - */ -static void keepout_othernodes(graph_t * g) -{ - int i, c, r, margin; - node_t *u, *v; - - margin = late_int (g, G_margin, CL_OFFSET, 0); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - if (GD_rank(g)[r].n == 0) - continue; - v = GD_rank(g)[r].v[0]; - if (v == NULL) - continue; - for (i = ND_order(v) - 1; i >= 0; i--) { - u = GD_rank(dot_root(g))[r].v[i]; - /* can't use "is_a_vnode_of" because elists are swapped */ - if ((ND_node_type(u) == NORMAL) || vnode_not_related_to(g, u)) { - make_aux_edge(u, GD_ln(g), margin + ND_rw(u), 0); - break; - } - } - for (i = ND_order(v) + GD_rank(g)[r].n; i < GD_rank(dot_root(g))[r].n; - i++) { - u = GD_rank(dot_root(g))[r].v[i]; - if ((ND_node_type(u) == NORMAL) || vnode_not_related_to(g, u)) { - make_aux_edge(GD_rn(g), u, margin + ND_lw(u), 0); - break; - } - } - } - - for (c = 1; c <= GD_n_cluster(g); c++) - keepout_othernodes(GD_clust(g)[c]); -} - -/* contain_subclust: - * Make sure boxes of subclusters of g are offset from the - * box of g. This is done by a constraint between the left and - * right bounding box nodes ln and rn of g and a subcluster. - * The gap needs to include any left or right labels. - */ -static void contain_subclust(graph_t * g) -{ - int margin, c; - graph_t *subg; - - margin = late_int (g, G_margin, CL_OFFSET, 0); - make_lrvn(g); - for (c = 1; c <= GD_n_cluster(g); c++) { - subg = GD_clust(g)[c]; - make_lrvn(subg); - make_aux_edge(GD_ln(g), GD_ln(subg), - margin + GD_border(g)[LEFT_IX].x, 0); - make_aux_edge(GD_rn(subg), GD_rn(g), - margin + GD_border(g)[RIGHT_IX].x, 0); - contain_subclust(subg); - } -} - -/* separate_subclust: - * Guarantee space between subcluster of g. - * This is done by adding a constraint between the right bbox node rn - * of the left cluster and the left bbox node ln of the right cluster. - * This is only done if the two clusters overlap in some rank. - */ -static void separate_subclust(graph_t * g) -{ - int i, j, margin; - graph_t *low, *high; - graph_t *left, *right; - - margin = late_int (g, G_margin, CL_OFFSET, 0); - for (i = 1; i <= GD_n_cluster(g); i++) - make_lrvn(GD_clust(g)[i]); - for (i = 1; i <= GD_n_cluster(g); i++) { - for (j = i + 1; j <= GD_n_cluster(g); j++) { - low = GD_clust(g)[i]; - high = GD_clust(g)[j]; - if (GD_minrank(low) > GD_minrank(high)) { - graph_t *temp = low; - low = high; - high = temp; - } - if (GD_maxrank(low) < GD_minrank(high)) - continue; - if (ND_order(GD_rank(low)[GD_minrank(high)].v[0]) - < ND_order(GD_rank(high)[GD_minrank(high)].v[0])) { - left = low; - right = high; - } else { - left = high; - right = low; - } - make_aux_edge(GD_rn(left), GD_ln(right), margin, 0); - } - separate_subclust(GD_clust(g)[i]); - } -} - -/* pos_clusters: create constraints for: - * node containment in clusters, - * cluster containment in clusters, - * separation of sibling clusters. - */ -static void pos_clusters(graph_t * g) -{ - if (GD_n_cluster(g) > 0) { - contain_clustnodes(g); - keepout_othernodes(g); - contain_subclust(g); - separate_subclust(g); - } -} - -static void compress_graph(graph_t * g) -{ - double x; - pointf p; - - if (GD_drawing(g)->ratio_kind != R_COMPRESS) - return; - p = GD_drawing(g)->size; - if (p.x * p.y <= 1) - return; - contain_nodes(g); - if (GD_flip(g) == FALSE) - x = p.x; - else - x = p.y; - - /* Guard against huge size attribute since max. edge length is USHRT_MAX - * A warning might be called for. Also, one could check that the graph - * already fits GD_drawing(g)->size and return immediately. - */ - x = MIN(x,USHRT_MAX); - make_aux_edge(GD_ln(g), GD_rn(g), x, 1000); -} - -static void create_aux_edges(graph_t * g) -{ - allocate_aux_edges(g); - make_LR_constraints(g); - make_edge_pairs(g); - pos_clusters(g); - compress_graph(g); -} - -static void remove_aux_edges(graph_t * g) -{ - int i; - node_t *n, *nnext, *nprev; - edge_t *e; - - for (n = GD_nlist(g); n; n = ND_next(n)) { - for (i = 0; (e = ND_out(n).list[i]); i++) { - free(e->base.data); - free(e); - } - free_list(ND_out(n)); - free_list(ND_in(n)); - ND_out(n) = ND_save_out(n); - ND_in(n) = ND_save_in(n); - } - /* cannot be merged with previous loop */ - nprev = NULL; - for (n = GD_nlist(g); n; n = nnext) { - nnext = ND_next(n); - if (ND_node_type(n) == SLACKNODE) { - if (nprev) - ND_next(nprev) = nnext; - else - GD_nlist(g) = nnext; - free(n->base.data); - free(n); - } else - nprev = n; - } - ND_prev(GD_nlist(g)) = NULL; -} - -/* set_xcoords: - * Set x coords of nodes. - */ -static void -set_xcoords(graph_t * g) -{ - int i, j; - node_t *v; - rank_t *rank = GD_rank(g); - - for (i = GD_minrank(g); i <= GD_maxrank(g); i++) { - for (j = 0; j < rank[i].n; j++) { - v = rank[i].v[j]; - ND_coord(v).x = ND_rank(v); - ND_rank(v) = i; - } - } -} - -/* adjustSimple: - * Expand cluster height by delta, adding half to top - * and half to bottom. If the bottom expansion exceeds the - * ht1 of the rank, shift the ranks in the cluster up. - * If the top expansion, including any shift from the bottom - * expansion, exceeds to ht2 of the rank, shift the ranks above - * the cluster up. - * - * FIX: There can be excess space between ranks. Not sure where this is - * coming from but it could be cleaned up. - */ -static void adjustSimple(graph_t * g, int delta, int margin_total) -{ - int r, bottom, deltop, delbottom; - graph_t *root = dot_root(g); - rank_t *rank = GD_rank(root); - int maxr = GD_maxrank(g); - int minr = GD_minrank(g); - - bottom = (delta+1) / 2; - delbottom = GD_ht1(g) + bottom - (rank[maxr].ht1 - margin_total); - if (delbottom > 0) { - for (r = maxr; r >= minr; r--) { - if (rank[r].n > 0) - ND_coord(rank[r].v[0]).y += delbottom; - } - deltop = GD_ht2(g) + (delta-bottom) + delbottom - (rank[minr].ht2 - margin_total); - } - else - deltop = GD_ht2(g) + (delta-bottom) - (rank[minr].ht2 - margin_total); - if (deltop > 0) { - for (r = minr-1; r >= GD_minrank(root); r--) { - if (rank[r].n > 0) - ND_coord(rank[r].v[0]).y += deltop; - } - } - GD_ht2(g) += (delta - bottom); - GD_ht1(g) += bottom; -} - -/* adjustRanks: - * Recursively adjust ranks to take into account - * wide cluster labels when rankdir=LR. - * We divide the extra space between the top and bottom. - * Adjust the ht1 and ht2 values in the process. - */ -static void adjustRanks(graph_t * g, int margin_total) -{ - double lht; /* label height */ - double rht; /* height between top and bottom ranks */ - int maxr, minr, margin; - int c; - double delta, ht1, ht2; - - rank_t *rank = GD_rank(dot_root(g)); - if (g == dot_root(g)) - margin = 0; - else - margin = late_int (g, G_margin, CL_OFFSET, 0); - - ht1 = GD_ht1(g); - ht2 = GD_ht2(g); - - for (c = 1; c <= GD_n_cluster(g); c++) { - graph_t *subg = GD_clust(g)[c]; - adjustRanks(subg, margin+margin_total); - if (GD_maxrank(subg) == GD_maxrank(g)) - ht1 = MAX(ht1, GD_ht1(subg) + margin); - if (GD_minrank(subg) == GD_minrank(g)) - ht2 = MAX(ht2, GD_ht2(subg) + margin); - } - - GD_ht1(g) = ht1; - GD_ht2(g) = ht2; - - if ((g != dot_root(g)) && GD_label(g)) { - lht = MAX(GD_border(g)[LEFT_IX].y, GD_border(g)[RIGHT_IX].y); - maxr = GD_maxrank(g); - minr = GD_minrank(g); - rht = ND_coord(rank[minr].v[0]).y - ND_coord(rank[maxr].v[0]).y; - delta = lht - (rht + ht1 + ht2); - if (delta > 0) { - adjustSimple(g, delta, margin_total); - } - } - - /* update the global ranks */ - if (g != dot_root(g)) { - rank[GD_minrank(g)].ht2 = MAX(rank[GD_minrank(g)].ht2, GD_ht2(g)); - rank[GD_maxrank(g)].ht1 = MAX(rank[GD_maxrank(g)].ht1, GD_ht1(g)); - } -} - -/* clust_ht: - * recursively compute cluster ht requirements. assumes GD_ht1(subg) and ht2 - * are computed from primitive nodes only. updates ht1 and ht2 to reflect - * cluster nesting and labels. also maintains global rank ht1 and ht2. - * Return true if some cluster has a label. - */ -static int clust_ht(Agraph_t * g) -{ - int c; - double ht1, ht2; - graph_t *subg; - rank_t *rank = GD_rank(dot_root(g)); - int margin, haveClustLabel = 0; - - if (g == dot_root(g)) - margin = CL_OFFSET; - else - margin = late_int (g, G_margin, CL_OFFSET, 0); - - ht1 = GD_ht1(g); - ht2 = GD_ht2(g); - - /* account for sub-clusters */ - for (c = 1; c <= GD_n_cluster(g); c++) { - subg = GD_clust(g)[c]; - haveClustLabel |= clust_ht(subg); - if (GD_maxrank(subg) == GD_maxrank(g)) - ht1 = MAX(ht1, GD_ht1(subg) + margin); - if (GD_minrank(subg) == GD_minrank(g)) - ht2 = MAX(ht2, GD_ht2(subg) + margin); - } - - /* account for a possible cluster label in clusters */ - /* room for root graph label is handled in dotneato_postprocess */ - if ((g != dot_root(g)) && GD_label(g)) { - haveClustLabel = 1; - if (!GD_flip(agroot(g))) { - ht1 += GD_border(g)[BOTTOM_IX].y; - ht2 += GD_border(g)[TOP_IX].y; - } - } - GD_ht1(g) = ht1; - GD_ht2(g) = ht2; - - /* update the global ranks */ - if (g != dot_root(g)) { - rank[GD_minrank(g)].ht2 = MAX(rank[GD_minrank(g)].ht2, ht2); - rank[GD_maxrank(g)].ht1 = MAX(rank[GD_maxrank(g)].ht1, ht1); - } - - return haveClustLabel; -} - -/* set y coordinates of nodes, a rank at a time */ -static void set_ycoords(graph_t * g) -{ - int i, j, r; - double ht2, maxht, delta, d0, d1; - node_t *n; - edge_t *e; - rank_t *rank = GD_rank(g); - graph_t *clust; - int lbl; - - ht2 = maxht = 0; - - /* scan ranks for tallest nodes. */ - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - for (i = 0; i < rank[r].n; i++) { - n = rank[r].v[i]; - - /* assumes symmetry, ht1 = ht2 */ - ht2 = ND_ht(n) / 2; - - - /* have to look for high self-edge labels, too */ - if (ND_other(n).list) - for (j = 0; (e = ND_other(n).list[j]); j++) { - if (agtail(e) == aghead(e)) { - if (ED_label(e)) - ht2 = MAX(ht2, ED_label(e)->dimen.y / 2); - } - } - - /* update global rank ht */ - if (rank[r].pht2 < ht2) - rank[r].pht2 = rank[r].ht2 = ht2; - if (rank[r].pht1 < ht2) - rank[r].pht1 = rank[r].ht1 = ht2; - - /* update nearest enclosing cluster rank ht */ - if ((clust = ND_clust(n))) { - int yoff = (clust == g ? 0 : late_int (clust, G_margin, CL_OFFSET, 0)); - if (ND_rank(n) == GD_minrank(clust)) - GD_ht2(clust) = MAX(GD_ht2(clust), ht2 + yoff); - if (ND_rank(n) == GD_maxrank(clust)) - GD_ht1(clust) = MAX(GD_ht1(clust), ht2 + yoff); - } - } - } - - /* scan sub-clusters */ - lbl = clust_ht(g); - - /* make the initial assignment of ycoords to leftmost nodes by ranks */ - maxht = 0; - r = GD_maxrank(g); - (ND_coord(rank[r].v[0])).y = rank[r].ht1; - while (--r >= GD_minrank(g)) { - d0 = rank[r + 1].pht2 + rank[r].pht1 + GD_ranksep(g); /* prim node sep */ - d1 = rank[r + 1].ht2 + rank[r].ht1 + CL_OFFSET; /* cluster sep */ - delta = MAX(d0, d1); - if (rank[r].n > 0) /* this may reflect some problem */ - (ND_coord(rank[r].v[0])).y = (ND_coord(rank[r + 1].v[0])).y + delta; -#ifdef DEBUG - else - fprintf(stderr, "dot set_ycoords: rank %d is empty\n", - rank[r].n); -#endif - maxht = MAX(maxht, delta); - } - - /* If there are cluster labels and the drawing is rotated, we need special processing to - * allocate enough room. We use adjustRanks for this, and then recompute the maxht if - * the ranks are to be equally spaced. This seems simpler and appears to work better than - * handling equal spacing as a special case. - */ - if (lbl && GD_flip(g)) { - adjustRanks(g, 0); - if (GD_exact_ranksep(g)) { /* recompute maxht */ - maxht = 0; - r = GD_maxrank(g); - d0 = (ND_coord(rank[r].v[0])).y; - while (--r >= GD_minrank(g)) { - d1 = (ND_coord(rank[r].v[0])).y; - delta = d1 - d0; - maxht = MAX(maxht, delta); - d0 = d1; - } - } - } - - /* re-assign if ranks are equally spaced */ - if (GD_exact_ranksep(g)) { - for (r = GD_maxrank(g) - 1; r >= GD_minrank(g); r--) - if (rank[r].n > 0) /* this may reflect the same problem :-() */ - (ND_coord(rank[r].v[0])).y= - (ND_coord(rank[r + 1].v[0])).y + maxht; - } - - /* copy ycoord assignment from leftmost nodes to others */ - for (n = GD_nlist(g); n; n = ND_next(n)) - ND_coord(n).y = (ND_coord(rank[ND_rank(n)].v[0])).y; -} - -/* dot_compute_bb: - * Compute bounding box of g. - * The x limits of clusters are given by the x positions of ln and rn. - * This information is stored in the rank field, since it was calculated - * using network simplex. - * For the root graph, we don't enforce all the constraints on lr and - * rn, so we traverse the nodes and subclusters. - */ -static void dot_compute_bb(graph_t * g, graph_t * root) -{ - int r, c; - double x, offset; - node_t *v; - pointf LL, UR; - - if (g == dot_root(g)) { - LL.x = (double)(INT_MAX); - UR.x = (double)(-INT_MAX); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - int rnkn = GD_rank(g)[r].n; - if (rnkn == 0) - continue; - if ((v = GD_rank(g)[r].v[0]) == NULL) - continue; - for (c = 1; (ND_node_type(v) != NORMAL) && c < rnkn; c++) - v = GD_rank(g)[r].v[c]; - if (ND_node_type(v) == NORMAL) { - x = ND_coord(v).x - ND_lw(v); - LL.x = MIN(LL.x, x); - } - else continue; - /* At this point, we know the rank contains a NORMAL node */ - v = GD_rank(g)[r].v[rnkn - 1]; - for (c = rnkn-2; ND_node_type(v) != NORMAL; c--) - v = GD_rank(g)[r].v[c]; - x = ND_coord(v).x + ND_rw(v); - UR.x = MAX(UR.x, x); - } - offset = CL_OFFSET; - for (c = 1; c <= GD_n_cluster(g); c++) { - x = (double)(GD_bb(GD_clust(g)[c]).LL.x - offset); - LL.x = MIN(LL.x, x); - x = (double)(GD_bb(GD_clust(g)[c]).UR.x + offset); - UR.x = MAX(UR.x, x); - } - } else { - LL.x = (double)(ND_rank(GD_ln(g))); - UR.x = (double)(ND_rank(GD_rn(g))); - } - LL.y = ND_coord(GD_rank(root)[GD_maxrank(g)].v[0]).y - GD_ht1(g); - UR.y = ND_coord(GD_rank(root)[GD_minrank(g)].v[0]).y + GD_ht2(g); - GD_bb(g).LL = LL; - GD_bb(g).UR = UR; -} - -static void rec_bb(graph_t * g, graph_t * root) -{ - int c; - for (c = 1; c <= GD_n_cluster(g); c++) - rec_bb(GD_clust(g)[c], root); - dot_compute_bb(g, root); -} - -/* scale_bb: - * Recursively rescale all bounding boxes using scale factors - * xf and yf. We assume all the bboxes have been computed. - */ -static void scale_bb(graph_t * g, graph_t * root, double xf, double yf) -{ - int c; - - for (c = 1; c <= GD_n_cluster(g); c++) - scale_bb(GD_clust(g)[c], root, xf, yf); - GD_bb(g).LL.x *= xf; - GD_bb(g).LL.y *= yf; - GD_bb(g).UR.x *= xf; - GD_bb(g).UR.y *= yf; -} - -/* adjustAspectRatio: - */ -static void adjustAspectRatio (graph_t* g, aspect_t* asp) -{ - double AR = (GD_bb(g).UR.x - GD_bb(g).LL.x)/(GD_bb(g).UR.y - GD_bb(g).LL.y); - if (Verbose) { - fprintf(stderr, "AR=%0.4lf\t Area= %0.4lf\t", AR, (double)(GD_bb(g).UR.x - GD_bb(g).LL.x)*(GD_bb(g).UR.y - GD_bb(g).LL.y)/10000.0); - fprintf(stderr, "Dummy=%d\n", countDummyNodes(g)); - } - if (AR > 1.1*asp->targetAR) { - asp->nextIter = (int)(asp->targetAR * (double)(asp->curIterations - asp->prevIterations)/(AR)); - } - else if (AR <= 0.8 * asp->targetAR) { - asp->nextIter = -1; - if (Verbose) - fprintf(stderr, "Going to apply another expansion.\n"); - } - else { - asp->nextIter = 0; - } - if (Verbose) - fprintf(stderr, "next#iter=%d\n", asp->nextIter); -} - -/* set_aspect: - * Set bounding boxes and, if ratio is set, rescale graph. - * Note that if some dimension shrinks, there may be problems - * with labels. - */ -static void set_aspect(graph_t * g, aspect_t* asp) -{ - double xf = 0.0, yf = 0.0, actual, desired; - node_t *n; - boolean scale_it, filled; - point sz; - - rec_bb(g, g); - if ((GD_maxrank(g) > 0) && (GD_drawing(g)->ratio_kind)) { - sz.x = GD_bb(g).UR.x - GD_bb(g).LL.x; - sz.y = GD_bb(g).UR.y - GD_bb(g).LL.y; /* normalize */ - if (GD_flip(g)) { - int t = sz.x; - sz.x = sz.y; - sz.y = t; - } - scale_it = TRUE; - if (GD_drawing(g)->ratio_kind == R_AUTO) - filled = idealsize(g, .5); - else - filled = (GD_drawing(g)->ratio_kind == R_FILL); - if (filled) { - /* fill is weird because both X and Y can stretch */ - if (GD_drawing(g)->size.x <= 0) - scale_it = FALSE; - else { - xf = (double) GD_drawing(g)->size.x / (double) sz.x; - yf = (double) GD_drawing(g)->size.y / (double) sz.y; - if ((xf < 1.0) || (yf < 1.0)) { - if (xf < yf) { - yf = yf / xf; - xf = 1.0; - } else { - xf = xf / yf; - yf = 1.0; - } - } - } - } else if (GD_drawing(g)->ratio_kind == R_EXPAND) { - if (GD_drawing(g)->size.x <= 0) - scale_it = FALSE; - else { - xf = (double) GD_drawing(g)->size.x / - (double) GD_bb(g).UR.x; - yf = (double) GD_drawing(g)->size.y / - (double) GD_bb(g).UR.y; - if ((xf > 1.0) && (yf > 1.0)) { - double scale = MIN(xf, yf); - xf = yf = scale; - } else - scale_it = FALSE; - } - } else if (GD_drawing(g)->ratio_kind == R_VALUE) { - desired = GD_drawing(g)->ratio; - actual = ((double) sz.y) / ((double) sz.x); - if (actual < desired) { - yf = desired / actual; - xf = 1.0; - } else { - xf = actual / desired; - yf = 1.0; - } - } else - scale_it = FALSE; - if (scale_it) { - if (GD_flip(g)) { - double t = xf; - xf = yf; - yf = t; - } - for (n = GD_nlist(g); n; n = ND_next(n)) { - ND_coord(n).x = ROUND(ND_coord(n).x * xf); - ND_coord(n).y = ROUND(ND_coord(n).y * yf); - } - scale_bb(g, g, xf, yf); - } - } - - if (asp) adjustAspectRatio (g, asp); -} - -static point resize_leaf(node_t * leaf, point lbound) -{ - gv_nodesize(leaf, GD_flip(agraphof(leaf))); - ND_coord(leaf).y = lbound.y; - ND_coord(leaf).x = lbound.x + ND_lw(leaf); - lbound.x = lbound.x + ND_lw(leaf) + ND_rw(leaf) + GD_nodesep(agraphof(leaf)); - return lbound; -} - -static point place_leaf(graph_t* ing, node_t * leaf, point lbound, int order) -{ - node_t *leader; - graph_t *g = dot_root(ing); - - leader = UF_find(leaf); - if (leaf != leader) - fast_nodeapp(leader, leaf); - ND_order(leaf) = order; - ND_rank(leaf) = ND_rank(leader); - GD_rank(g)[ND_rank(leaf)].v[ND_order(leaf)] = leaf; - return resize_leaf(leaf, lbound); -} - -/* make space for the leaf nodes of each rank */ -static void make_leafslots(graph_t * g) -{ - int i, j, r; - node_t *v; - - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - j = 0; - for (i = 0; i < GD_rank(g)[r].n; i++) { - v = GD_rank(g)[r].v[i]; - ND_order(v) = j; - if (ND_ranktype(v) == LEAFSET) - j = j + ND_UF_size(v); - else - j++; - } - if (j <= GD_rank(g)[r].n) - continue; - GD_rank(g)[r].v = ALLOC(j + 1, GD_rank(g)[r].v, node_t *); - for (i = GD_rank(g)[r].n - 1; i >= 0; i--) { - v = GD_rank(g)[r].v[i]; - GD_rank(g)[r].v[ND_order(v)] = v; - } - GD_rank(g)[r].n = j; - GD_rank(g)[r].v[j] = NULL; - } -} - -static void do_leaves(graph_t * g, node_t * leader) -{ - int j; - point lbound; - node_t *n; - edge_t *e; - - if (ND_UF_size(leader) <= 1) - return; - lbound.x = ND_coord(leader).x - ND_lw(leader); - lbound.y = ND_coord(leader).y; - lbound = resize_leaf(leader, lbound); - if (ND_out(leader).size > 0) { /* in-edge leaves */ - n = aghead(ND_out(leader).list[0]); - j = ND_order(leader) + 1; - for (e = agfstin(g, n); e; e = agnxtin(g, e)) { - edge_t *e1 = AGMKOUT(e); - if ((agtail(e1) != leader) && (UF_find(agtail(e1)) == leader)) { - lbound = place_leaf(g, agtail(e1), lbound, j++); - unmerge_oneway(e1); - elist_append(e1, ND_in(aghead(e1))); - } - } - } else { /* out edge leaves */ - n = agtail(ND_in(leader).list[0]); - j = ND_order(leader) + 1; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if ((aghead(e) != leader) && (UF_find(aghead(e)) == leader)) { - lbound = place_leaf(g, aghead(e), lbound, j++); - unmerge_oneway(e); - elist_append(e, ND_out(agtail(e))); - } - } - } -} - -int ports_eq(edge_t * e, edge_t * f) -{ - return ((ED_head_port(e).defined == ED_head_port(f).defined) - && (((ED_head_port(e).p.x == ED_head_port(f).p.x) && - (ED_head_port(e).p.y == ED_head_port(f).p.y)) - || (ED_head_port(e).defined == FALSE)) - && (((ED_tail_port(e).p.x == ED_tail_port(f).p.x) && - (ED_tail_port(e).p.y == ED_tail_port(f).p.y)) - || (ED_tail_port(e).defined == FALSE)) - ); -} - -static void expand_leaves(graph_t * g) -{ - int i, d; - node_t *n; - edge_t *e, *f; - - make_leafslots(g); - for (n = GD_nlist(g); n; n = ND_next(n)) { - if (ND_inleaf(n)) - do_leaves(g, ND_inleaf(n)); - if (ND_outleaf(n)) - do_leaves(g, ND_outleaf(n)); - if (ND_other(n).list) - for (i = 0; (e = ND_other(n).list[i]); i++) { - if ((d = ND_rank(aghead(e)) - ND_rank(aghead(e))) == 0) - continue; - f = ED_to_orig(e); - if (ports_eq(e, f) == FALSE) { - zapinlist(&(ND_other(n)), e); - if (d == 1) - fast_edge(e); - /*else unitize(e); ### */ - i--; - } - } - } -} - -/* make_lrvn: - * Add left and right slacknodes to a cluster which - * are used in the LP to constrain nodes not in g but - * sharing its ranks to be to the left or right of g - * by a specified amount. - * The slacknodes ln and rn give the x position of the - * left and right side of the cluster's bounding box. In - * particular, any cluster labels on the left or right side - * are inside. - * If a cluster has a label, and we have rankdir!=LR, we make - * sure the cluster is wide enough for the label. Note that - * if the label is wider than the cluster, the nodes in the - * cluster may not be centered. - */ -static void make_lrvn(graph_t * g) -{ - node_t *ln, *rn; - - if (GD_ln(g)) - return; - ln = virtual_node(dot_root(g)); - ND_node_type(ln) = SLACKNODE; - rn = virtual_node(dot_root(g)); - ND_node_type(rn) = SLACKNODE; - - if (GD_label(g) && (g != dot_root(g)) && !GD_flip(agroot(g))) { - int w = MAX(GD_border(g)[BOTTOM_IX].x, GD_border(g)[TOP_IX].x); - make_aux_edge(ln, rn, w, 0); - } - - GD_ln(g) = ln; - GD_rn(g) = rn; -} - -/* contain_nodes: - * make left and right bounding box virtual nodes ln and rn - * constrain interior nodes - */ -static void contain_nodes(graph_t * g) -{ - int margin, r; - node_t *ln, *rn, *v; - - margin = late_int (g, G_margin, CL_OFFSET, 0); - make_lrvn(g); - ln = GD_ln(g); - rn = GD_rn(g); - for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { - if (GD_rank(g)[r].n == 0) - continue; - v = GD_rank(g)[r].v[0]; - if (v == NULL) { - agerr(AGERR, "contain_nodes clust %s rank %d missing node\n", - agnameof(g), r); - continue; - } - make_aux_edge(ln, v, - ND_lw(v) + margin + GD_border(g)[LEFT_IX].x, 0); - v = GD_rank(g)[r].v[GD_rank(g)[r].n - 1]; - make_aux_edge(v, rn, - ND_rw(v) + margin + GD_border(g)[RIGHT_IX].x, 0); - } -} - -/* idealsize: - * set g->drawing->size to a reasonable default. - * returns a boolean to indicate if drawing is to - * be scaled and filled */ -static boolean idealsize(graph_t * g, double minallowed) -{ - double xf, yf, f, R; - pointf b, relpage, margin; - - /* try for one page */ - relpage = GD_drawing(g)->page; - if (relpage.x < 0.001 || relpage.y < 0.001) - return FALSE; /* no page was specified */ - margin = GD_drawing(g)->margin; - relpage = sub_pointf(relpage, margin); - relpage = sub_pointf(relpage, margin); - b.x = GD_bb(g).UR.x; - b.y = GD_bb(g).UR.y; - xf = relpage.x / b.x; - yf = relpage.y / b.y; - if ((xf >= 1.0) && (yf >= 1.0)) - return FALSE; /* fits on one page */ - - f = MIN(xf, yf); - xf = yf = MAX(f, minallowed); - - R = ceil((xf * b.x) / relpage.x); - xf = ((R * relpage.x) / b.x); - R = ceil((yf * b.y) / relpage.y); - yf = ((R * relpage.y) / b.y); - GD_drawing(g)->size.x = b.x * xf; - GD_drawing(g)->size.y = b.y * yf; - return TRUE; -} diff --git a/internal/ccall/dotgen/rank.c b/internal/ccall/dotgen/rank.c deleted file mode 100644 index 7492e6f..0000000 --- a/internal/ccall/dotgen/rank.c +++ /dev/null @@ -1,1238 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Rank the nodes of a directed graph, subject to user-defined - * sets of nodes to be kept on the same, min, or max rank. - * The temporary acyclic fast graph is constructed and ranked - * by a network-simplex technique. Then ranks are propagated - * to non-leader nodes and temporary edges are deleted. - * Leaf nodes and top-level clusters are left collapsed, though. - * Assigns global minrank and maxrank of graph and all clusters. - * - * TODO: safety code. must not be in two clusters at same level. - * must not be in same/min/max/rank and a cluster at the same time. - * watch out for interactions between leaves and clusters. - */ - -#include "dot.h" - -static void dot1_rank(graph_t * g, aspect_t* asp); -static void dot2_rank(graph_t * g, aspect_t* asp); - -static void -renewlist(elist * L) -{ - int i; - for (i = L->size; i >= 0; i--) - L->list[i] = NULL; - L->size = 0; -} - -static void -cleanup1(graph_t * g) -{ - node_t *n; - edge_t *e, *f; - int c; - - for (c = 0; c < GD_comp(g).size; c++) { - GD_nlist(g) = GD_comp(g).list[c]; - for (n = GD_nlist(g); n; n = ND_next(n)) { - renewlist(&ND_in(n)); - renewlist(&ND_out(n)); - ND_mark(n) = FALSE; - } - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - f = ED_to_virt(e); - /* Null out any other references to f to make sure we don't - * handle it a second time. For example, parallel multiedges - * share a virtual edge. - */ - if (f && (e == ED_to_orig(f))) { - edge_t *e1, *f1; - node_t *n1; - for (n1 = agfstnode(g); n1; n1 = agnxtnode(g, n1)) { - for (e1 = agfstout(g, n1); e1; e1 = agnxtout(g, e1)) { - if (e != e1) { - f1 = ED_to_virt(e1); - if (f1 && (f == f1)) { - ED_to_virt(e1) = NULL; - } - } - } - } - free(f->base.data); - free(f); - } - ED_to_virt(e) = NULL; - } - } - free(GD_comp(g).list); - GD_comp(g).list = NULL; - GD_comp(g).size = 0; -} - -/* When there are edge labels, extra ranks are reserved here for the virtual - * nodes of the labels. This is done by doubling the input edge lengths. - * The input rank separation is adjusted to compensate. - */ -static void -edgelabel_ranks(graph_t * g) -{ - node_t *n; - edge_t *e; - - if (GD_has_labels(g->root) & EDGE_LABEL) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - ED_minlen(e) *= 2; - GD_ranksep(g) = (GD_ranksep(g) + 1) / 2; - } -} - -/* Merge the nodes of a min, max, or same rank set. */ -static void -collapse_rankset(graph_t * g, graph_t * subg, int kind) -{ - node_t *u, *v; - - u = v = agfstnode(subg); - if (u) { - ND_ranktype(u) = kind; - while ((v = agnxtnode(subg, v))) { - UF_union(u, v); - ND_ranktype(v) = ND_ranktype(u); - } - switch (kind) { - case MINRANK: - case SOURCERANK: - if (GD_minset(g) == NULL) - GD_minset(g) = u; - else - GD_minset(g) = UF_union(GD_minset(g), u); - break; - case MAXRANK: - case SINKRANK: - if (GD_maxset(g) == NULL) - GD_maxset(g) = u; - else - GD_maxset(g) = UF_union(GD_maxset(g), u); - break; - } - switch (kind) { - case SOURCERANK: - ND_ranktype(GD_minset(g)) = kind; - break; - case SINKRANK: - ND_ranktype(GD_maxset(g)) = kind; - break; - } - } -} - -static int -rank_set_class(graph_t * g) -{ - static char *name[] = { "same", "min", "source", "max", "sink", NULL }; - static int class[] = - { SAMERANK, MINRANK, SOURCERANK, MAXRANK, SINKRANK, 0 }; - int val; - - if (is_cluster(g)) - return CLUSTER; - val = maptoken(agget(g, "rank"), name, class); - GD_set_type(g) = val; - return val; -} - -static int -make_new_cluster(graph_t * g, graph_t * subg) -{ - int cno; - cno = ++(GD_n_cluster(g)); - GD_clust(g) = ZALLOC(cno + 1, GD_clust(g), graph_t *, GD_n_cluster(g)); - GD_clust(g)[cno] = subg; - do_graph_label(subg); - return cno; -} - -static void -node_induce(graph_t * par, graph_t * g) -{ - node_t *n, *nn; - edge_t *e; - int i; - - /* enforce that a node is in at most one cluster at this level */ - for (n = agfstnode(g); n; n = nn) { - nn = agnxtnode(g, n); - if (ND_ranktype(n)) { - agdelete(g, n); - continue; - } - for (i = 1; i < GD_n_cluster(par); i++) - if (agcontains(GD_clust(par)[i], n)) - break; - if (i < GD_n_cluster(par)) - agdelete(g, n); - ND_clust(n) = NULL; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(dot_root(g), n); e; e = agnxtout(dot_root(g), e)) { - if (agcontains(g, aghead(e))) - agsubedge(g,e,1); - } - } -} - -void -dot_scan_ranks(graph_t * g) -{ - node_t *n, *leader = NULL; - GD_minrank(g) = MAXSHORT; - GD_maxrank(g) = -1; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (GD_maxrank(g) < ND_rank(n)) - GD_maxrank(g) = ND_rank(n); - if (GD_minrank(g) > ND_rank(n)) - GD_minrank(g) = ND_rank(n); - if (leader == NULL) - leader = n; - else { - if (ND_rank(n) < ND_rank(leader)) - leader = n; - } - } - GD_leader(g) = leader; -} - -static void -cluster_leader(graph_t * clust) -{ - node_t *leader, *n; - int maxrank = 0; - - /* find number of ranks and select a leader */ - leader = NULL; - for (n = GD_nlist(clust); n; n = ND_next(n)) { - if ((ND_rank(n) == 0) && (ND_node_type(n) == NORMAL)) - leader = n; - if (maxrank < ND_rank(n)) - maxrank = ND_rank(n); - } - assert(leader != NULL); - GD_leader(clust) = leader; - - for (n = agfstnode(clust); n; n = agnxtnode(clust, n)) { - assert((ND_UF_size(n) <= 1) || (n == leader)); - UF_union(n, leader); - ND_ranktype(n) = CLUSTER; - } -} - -/* - * A cluster is collapsed in three steps. - * 1) The nodes of the cluster are ranked locally. - * 2) The cluster is collapsed into one node on the least rank. - * 3) In class1(), any inter-cluster edges are converted using - * the "virtual node + 2 edges" trick. - */ -static void -collapse_cluster(graph_t * g, graph_t * subg) -{ - if (GD_parent(subg)) { - return; - } - GD_parent(subg) = g; - node_induce(g, subg); - if (agfstnode(subg) == NULL) - return; - make_new_cluster(g, subg); - if (CL_type == LOCAL) { - dot1_rank(subg, 0); - cluster_leader(subg); - } else - dot_scan_ranks(subg); -} - -/* Execute union commands for "same rank" subgraphs and clusters. */ -static void -collapse_sets(graph_t *rg, graph_t *g) -{ - int c; - graph_t *subg; -#ifdef OBSOLETE - node_t *n; -#endif - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - c = rank_set_class(subg); - if (c) { - if ((c == CLUSTER) && CL_type == LOCAL) - collapse_cluster(rg, subg); - else - collapse_rankset(rg, subg, c); - } - else collapse_sets(rg, subg); - -#ifdef OBSOLETE - Collapsing leaves is currently obsolete - - /* mark nodes with ordered edges so their leaves are not collapsed */ - if (agget(subg, "ordering")) - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) - ND_order(n) = 1; -#endif - } -} - -static void -find_clusters(graph_t * g) -{ - graph_t *subg; - for (subg = agfstsubg(dot_root(g)); subg; subg = agnxtsubg(subg)) { - if (GD_set_type(subg) == CLUSTER) - collapse_cluster(g, subg); - } -} - -static void -set_minmax(graph_t * g) -{ - int c; - - GD_minrank(g) += ND_rank(GD_leader(g)); - GD_maxrank(g) += ND_rank(GD_leader(g)); - for (c = 1; c <= GD_n_cluster(g); c++) - set_minmax(GD_clust(g)[c]); -} - -/* To ensure that min and max rank nodes always have the intended rank - * assignment, reverse any incompatible edges. - */ -static point -minmax_edges(graph_t * g) -{ - node_t *n; - edge_t *e; - point slen; - - slen.x = slen.y = 0; - if ((GD_maxset(g) == NULL) && (GD_minset(g) == NULL)) - return slen; - if (GD_minset(g) != NULL) - GD_minset(g) = UF_find(GD_minset(g)); - if (GD_maxset(g) != NULL) - GD_maxset(g) = UF_find(GD_maxset(g)); - - if ((n = GD_maxset(g))) { - slen.y = (ND_ranktype(GD_maxset(g)) == SINKRANK); - while ((e = ND_out(n).list[0])) { - assert(aghead(e) == UF_find(aghead(e))); - reverse_edge(e); - } - } - if ((n = GD_minset(g))) { - slen.x = (ND_ranktype(GD_minset(g)) == SOURCERANK); - while ((e = ND_in(n).list[0])) { - assert(agtail(e) == UF_find(agtail(e))); - reverse_edge(e); - } - } - return slen; -} - -static int -minmax_edges2(graph_t * g, point slen) -{ - node_t *n; - edge_t *e = 0; - - if ((GD_maxset(g)) || (GD_minset(g))) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (n != UF_find(n)) - continue; - if ((ND_out(n).size == 0) && GD_maxset(g) && (n != GD_maxset(g))) { - e = virtual_edge(n, GD_maxset(g), NULL); - ED_minlen(e) = slen.y; - ED_weight(e) = 0; - } - if ((ND_in(n).size == 0) && GD_minset(g) && (n != GD_minset(g))) { - e = virtual_edge(GD_minset(g), n, NULL); - ED_minlen(e) = slen.x; - ED_weight(e) = 0; - } - } - } - return (e != 0); -} - -/* Run the network simplex algorithm on each component. */ -void rank1(graph_t * g) -{ - int maxiter = INT_MAX; - int c; - char *s; - - if ((s = agget(g, "nslimit1"))) - maxiter = atof(s) * agnnodes(g); - for (c = 0; c < GD_comp(g).size; c++) { - GD_nlist(g) = GD_comp(g).list[c]; - rank(g, (GD_n_cluster(g) == 0 ? 1 : 0), maxiter); /* TB balance */ - } -} - -/* - * Assigns ranks of non-leader nodes. - * Expands same, min, max rank sets. - * Leaf sets and clusters remain merged. - * Sets minrank and maxrank appropriately. - */ -static void expand_ranksets(graph_t * g, aspect_t* asp) -{ - int c; - node_t *n, *leader; - - if ((n = agfstnode(g))) { - GD_minrank(g) = MAXSHORT; - GD_maxrank(g) = -1; - while (n) { - leader = UF_find(n); - /* The following works because ND_rank(n) == 0 if n is not in a - * cluster, and ND_rank(n) = the local rank offset if n is in - * a cluster. */ - if ((leader != n) && (!asp || (ND_rank(n) == 0))) - ND_rank(n) += ND_rank(leader); - - if (GD_maxrank(g) < ND_rank(n)) - GD_maxrank(g) = ND_rank(n); - if (GD_minrank(g) > ND_rank(n)) - GD_minrank(g) = ND_rank(n); - - if (ND_ranktype(n) && (ND_ranktype(n) != LEAFSET)) - UF_singleton(n); - n = agnxtnode(g, n); - } - if (g == dot_root(g)) { - if (CL_type == LOCAL) { - for (c = 1; c <= GD_n_cluster(g); c++) - set_minmax(GD_clust(g)[c]); - } else { - find_clusters(g); - } - } - } else { - GD_minrank(g) = GD_maxrank(g) = 0; - } -} - -#ifdef ALLOW_LEVELS -void -setRanks (graph_t* g, attrsym_t* lsym) -{ - node_t* n; - char* s; - char* ep; - long v; - - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - s = agxget (n, lsym); - v = strtol (s, &ep, 10); - if (ep == s) - agerr(AGWARN, "no level attribute for node \"%s\"\n", agnameof(n)); - ND_rank(n) = v; - } -} -#endif - -#ifdef UNUSED -static node_t **virtualEdgeHeadList = NULL; -static node_t **virtualEdgeTailList = NULL; -static int nVirtualEdges = 0; - -static void -saveVirtualEdges(graph_t *g) -{ - edge_t *e; - node_t *n; - int cnt = 0; - int lc; - - if (virtualEdgeHeadList != NULL) { - free(virtualEdgeHeadList); - } - if (virtualEdgeTailList != NULL) { - free(virtualEdgeTailList); - } - - /* allocate memory */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (lc = 0; lc < ND_in(n).size; lc++) { - e = ND_in(n).list[lc]; - if (ED_edge_type(e) == VIRTUAL) cnt++; - } - } - - nVirtualEdges = cnt; - virtualEdgeHeadList = N_GNEW(cnt, node_t*); - virtualEdgeTailList = N_GNEW(cnt, node_t*); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (lc = 0, cnt = 0; lc < ND_in(n).size; lc++) { - e = ND_in(n).list[lc]; - if (ED_edge_type(e) == VIRTUAL) { - virtualEdgeHeadList[cnt] = e->head; - virtualEdgeTailList[cnt] = e->tail; - if (Verbose) - printf("saved virtual edge: %s->%s\n", - virtualEdgeTailList[cnt]->name, - virtualEdgeHeadList[cnt]->name); - cnt++; - } - } - } -} - -static void -restoreVirtualEdges(graph_t *g) -{ - int i; - edge_t e; - - for (i = 0; i < nVirtualEdges; i++) { - if (virtualEdgeTailList[i] && virtualEdgeHeadList[i]) { - if (Verbose) - printf("restoring virtual edge: %s->%s\n", - virtualEdgeTailList[i]->name, virtualEdgeHeadList[i]->name); - virtual_edge(virtualEdgeTailList[i], virtualEdgeHeadList[i], NULL); - } - } - if (Verbose) - printf("restored %d virt edges\n", nVirtualEdges); -} -#endif - -/* dot1_rank: - * asp != NULL => g is root - */ -static void dot1_rank(graph_t * g, aspect_t* asp) -{ - point p; -#ifdef ALLOW_LEVELS - attrsym_t* N_level; -#endif - edgelabel_ranks(g); - - if (asp) { - init_UF_size(g); - initEdgeTypes(g); - } - - collapse_sets(g,g); - /*collapse_leaves(g); */ - class1(g); - p = minmax_edges(g); - decompose(g, 0); - if (asp && ((GD_comp(g).size > 1)||(GD_n_cluster(g) > 0))) { - asp->badGraph = 1; - asp = NULL; - } - acyclic(g); - if (minmax_edges2(g, p)) - decompose(g, 0); -#ifdef ALLOW_LEVELS - if ((N_level = agattr(g,AGNODE,"level",NULL))) - setRanks(g, N_level); - else -#endif - - if (asp) - rank3(g, asp); - else - rank1(g); - - expand_ranksets(g, asp); - cleanup1(g); -} - -void dot_rank(graph_t * g, aspect_t* asp) -{ - if (agget (g, "newrank")) { - GD_flags(g) |= NEW_RANK; - dot2_rank (g, asp); - } - else - dot1_rank (g, asp); - if (Verbose) - fprintf (stderr, "Maxrank = %d, minrank = %d\n", GD_maxrank(g), GD_minrank(g)); -} - -int is_cluster(graph_t * g) -{ - return (strncmp(agnameof(g), "cluster", 7) == 0); -} - -#ifdef OBSOLETE -static node_t* -merge_leaves(graph_t * g, node_t * cur, node_t * new) -{ - node_t *rv; - - if (cur == NULL) - rv = new; - else { - rv = UF_union(cur, new); - ND_ht(rv) = MAX(ND_ht(cur), ND_ht(new)); - ND_lw(rv) = ND_lw(cur) + ND_lw(new) + GD_nodesep(g) / 2; - ND_rw(rv) = ND_rw(cur) + ND_rw(new) + GD_nodesep(g) / 2; - } - return rv; -} - -static void -potential_leaf(graph_t * g, edge_t * e, node_t * leaf) -{ - node_t *par; - - if ((ED_tail_port(e).p.x) || (ED_head_port(e).p.x)) - return; - if ((ED_minlen(e) != 1) || (ND_order(agtail(e)) > 0)) - return; - par = ((leaf != aghead(e)) ? aghead(e) : agtail(e)); - ND_ranktype(leaf) = LEAFSET; - if (par == agtail(e)) - GD_outleaf(par) = merge_leaves(g, GD_outleaf(par), leaf); - else - GD_inleaf(par) = merge_leaves(g, GD_inleaf(par), leaf); -} - -static void -collapse_leaves(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - - /* consider n as a potential leaf of some other node. */ - if ((ND_ranktype(n) != NOCMD) || (ND_order(n))) - continue; - if (agfstout(g, n) == NULL) { - if ((e = agfstin(g, n)) && (agnxtin(g, e) == NULL)) { - potential_leaf(g, AGMKOUT(e), n); - continue; - } - } - if (agfstin(g, n) == NULL) { - if ((e = agfstout(g, n)) && (agnxtout(g, e) == NULL)) { - potential_leaf(g, e, n); - continue; - } - } - } -} -#endif - -/* new ranking code: - * Allows more constraints - * Copy of level.c in dotgen2 - * Many of the utility functions are simpler or gone with - * cgraph library. - */ -#define BACKWARD_PENALTY 1000 -#define STRONG_CLUSTER_WEIGHT 1000 -#define NORANK 6 -#define ROOT "\177root" -#define TOPNODE "\177top" -#define BOTNODE "\177bot" - -/* hops is not used in dot, so we overload it to - * contain the index of the connected component - */ -#define ND_comp(n) ND_hops(n) - -extern int rank2(Agraph_t *, int, int, int); - -static void set_parent(graph_t* g, graph_t* p) -{ - GD_parent(g) = p; - make_new_cluster(p, g); - node_induce(p, g); -} - -static int is_empty(graph_t * g) -{ - return (!agfstnode(g)); -} - -static int is_a_strong_cluster(graph_t * g) -{ - int rv; - char *str = agget(g, "compact"); - /* rv = mapBool((str), TRUE); */ - rv = mapBool((str), FALSE); - return rv; -} - -static int rankset_kind(graph_t * g) -{ - char *str = agget(g, "rank"); - - if (str && str[0]) { - if (!strcmp(str, "min")) - return MINRANK; - if (!strcmp(str, "source")) - return SOURCERANK; - if (!strcmp(str, "max")) - return MAXRANK; - if (!strcmp(str, "sink")) - return SINKRANK; - if (!strcmp(str, "same")) - return SAMERANK; - } - return NORANK; -} - -static int is_nonconstraint(edge_t * e) -{ - char *constr; - - if (E_constr && (constr = agxget(e, E_constr))) { - if (constr[0] && mapbool(constr) == FALSE) - return TRUE; - } - return FALSE; -} - -static node_t *find(node_t * n) -{ - node_t *set; - if ((set = ND_set(n))) { - if (set != n) - set = ND_set(n) = find(set); - } else - set = ND_set(n) = n; - return set; -} - -static node_t *union_one(node_t * leader, node_t * n) -{ - if (n) - return (ND_set(find(n)) = find(leader)); - else - return leader; -} - -static node_t *union_all(graph_t * g) -{ - node_t *n, *leader; - - n = agfstnode(g); - if (!n) - return n; - leader = find(n); - while ((n = agnxtnode(g, n))) - union_one(leader, n); - return leader; -} - -static void compile_samerank(graph_t * ug, graph_t * parent_clust) -{ - graph_t *s; /* subgraph being scanned */ - graph_t *clust; /* cluster that contains the rankset */ - node_t *n, *leader; - - if (is_empty(ug)) - return; - if (is_a_cluster(ug)) { - clust = ug; - if (parent_clust) { - GD_level(ug) = GD_level(parent_clust) + 1; - set_parent(ug, parent_clust); - } - else - GD_level(ug) = 0; - } else - clust = parent_clust; - - /* process subgraphs of this subgraph */ - for (s = agfstsubg(ug); s; s = agnxtsubg(s)) - compile_samerank(s, clust); - - /* process this subgraph as a cluster */ - if (is_a_cluster(ug)) { - for (n = agfstnode(ug); n; n = agnxtnode(ug, n)) { - if (ND_clust(n) == 0) - ND_clust(n) = ug; -#ifdef DEBUG - fprintf(stderr, "(%s) %s %p\n", agnameof(ug), agnameof(n), - ND_clust(n)); -#endif - } - } - - /* process this subgraph as a rankset */ - switch (rankset_kind(ug)) { - case SOURCERANK: - GD_has_sourcerank(clust) = TRUE; /* fall through */ - case MINRANK: - leader = union_all(ug); - GD_minrep(clust) = union_one(leader, GD_minrep(clust)); - break; - case SINKRANK: - GD_has_sinkrank(clust) = TRUE; /* fall through */ - case MAXRANK: - leader = union_all(ug); - GD_maxrep(clust) = union_one(leader, GD_maxrep(clust)); - break; - case SAMERANK: - leader = union_all(ug); - /* do we need to record these ranksets? */ - break; - case NORANK: - break; - default: /* unrecognized - warn and do nothing */ - agerr(AGWARN, "%s has unrecognized rank=%s", agnameof(ug), - agget(ug, "rank")); - } - - /* a cluster may become degenerate */ - if (is_a_cluster(ug) && GD_minrep(ug)) { - if (GD_minrep(ug) == GD_maxrep(ug)) { - node_t *up = union_all(ug); - GD_minrep(ug) = up; - GD_maxrep(ug) = up; - } - } -} - -static graph_t *dot_lca(graph_t * c0, graph_t * c1) -{ - while (c0 != c1) { - if (GD_level(c0) >= GD_level(c1)) - c0 = GD_parent(c0); - else - c1 = GD_parent(c1); - } - return c0; -} - -static int is_internal_to_cluster(edge_t * e) -{ - graph_t *par, *ct, *ch; - ct = ND_clust(agtail(e)); - ch = ND_clust(aghead(e)); - if (ct == ch) - return TRUE; - par = dot_lca(ct, ch); - /* if (par == agroot(par)) */ - /* return FALSE; */ - if ((par == ct) || (par == ch)) - return TRUE; - return FALSE; -} - -static node_t* Last_node; -static node_t* makeXnode (graph_t* G, char* name) -{ - node_t *n = agnode(G, name, 1); - alloc_elist(4, ND_in(n)); - alloc_elist(4, ND_out(n)); - if (Last_node) { - ND_prev(n) = Last_node; - ND_next(Last_node) = n; - } else { - ND_prev(n) = NULL; - GD_nlist(G) = n; - } - Last_node = n; - ND_next(n) = NULL; - - return n; -} - -static void compile_nodes(graph_t * g, graph_t * Xg) -{ - /* build variables */ - node_t *n; - - Last_node = NULL; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (find(n) == n) - ND_rep(n) = makeXnode (Xg, agnameof(n)); - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_rep(n) == 0) - ND_rep(n) = ND_rep(find(n)); - } -} - -static void merge(edge_t * e, int minlen, int weight) -{ - ED_minlen(e) = MAX(ED_minlen(e), minlen); - ED_weight(e) += weight; -} - -static void strong(graph_t * g, node_t * t, node_t * h, edge_t * orig) -{ - edge_t *e; - if ((e = agfindedge(g, t, h)) || - (e = agfindedge(g, h, t)) || (e = agedge(g, t, h, 0, 1))) - merge(e, ED_minlen(orig), ED_weight(orig)); - else - agerr(AGERR, "ranking: failure to create strong constraint edge between nodes %s and %s\n", - agnameof(t), agnameof(h)); -} - -static void weak(graph_t * g, node_t * t, node_t * h, edge_t * orig) -{ - node_t *v; - edge_t *e, *f; - static int id; - char buf[100]; - - for (e = agfstin(g, t); e; e = agnxtin(g, e)) { - /* merge with existing weak edge (e,f) */ - v = agtail(e); - if ((f = agfstout(g, v)) && (aghead(f) == h)) { - return; - } - } - if (!e) { - sprintf (buf, "_weak_%d", id++); - v = makeXnode(g, buf); - e = agedge(g, v, t, 0, 1); - f = agedge(g, v, h, 0, 1); - } - ED_minlen(e) = MAX(ED_minlen(e), 0); /* effectively a nop */ - ED_weight(e) += ED_weight(orig) * BACKWARD_PENALTY; - ED_minlen(f) = MAX(ED_minlen(f), ED_minlen(orig)); - ED_weight(f) += ED_weight(orig); -} - -static void compile_edges(graph_t * ug, graph_t * Xg) -{ - node_t *n; - edge_t *e; - node_t *Xt, *Xh; - graph_t *tc, *hc; - - /* build edge constraints */ - for (n = agfstnode(ug); n; n = agnxtnode(ug, n)) { - Xt = ND_rep(n); - for (e = agfstout(ug, n); e; e = agnxtout(ug, e)) { - if (is_nonconstraint(e)) - continue; - Xh = ND_rep(find(aghead(e))); - if (Xt == Xh) - continue; - - tc = ND_clust(agtail(e)); - hc = ND_clust(aghead(e)); - - if (is_internal_to_cluster(e)) { - /* determine if graph requires reversed edge */ - if ((find(agtail(e)) == GD_maxrep(ND_clust(agtail(e)))) - || (find(aghead(e)) == GD_minrep(ND_clust(aghead(e))))) { - node_t *temp = Xt; - Xt = Xh; - Xh = temp; - } - strong(Xg, Xt, Xh, e); - } else { - if (is_a_strong_cluster(tc) || is_a_strong_cluster(hc)) - weak(Xg, Xt, Xh, e); - else - strong(Xg, Xt, Xh, e); - } - } - } -} - -static void compile_clusters(graph_t* g, graph_t* Xg, node_t* top, node_t* bot) -{ - node_t *n; - node_t *rep; - edge_t *e; - graph_t *sub; - - if (is_a_cluster(g) && is_a_strong_cluster(g)) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (agfstin(g, n) == 0) { - rep = ND_rep(find(n)); - if (!top) top = makeXnode(Xg,TOPNODE); - agedge(Xg, top, rep, 0, 1); - } - if (agfstout(g, n) == 0) { - rep = ND_rep(find(n)); - if (!bot) bot = makeXnode(Xg,BOTNODE); - agedge(Xg, rep, bot, 0, 1); - } - } - if (top && bot) { - e = agedge(Xg, top, bot, 0, 1); - merge(e, 0, STRONG_CLUSTER_WEIGHT); - } - } - for (sub = agfstsubg(g); sub; sub = agnxtsubg(sub)) - compile_clusters(sub, Xg, top, bot); -} - -static void reverse_edge2(graph_t * g, edge_t * e) -{ - edge_t *rev; - - rev = agfindedge(g, aghead(e), agtail(e)); - if (!rev) - rev = agedge(g, aghead(e), agtail(e), 0, 1); - merge(rev, ED_minlen(e), ED_weight(e)); - agdelete(g, e); -} - -static void _dfs(graph_t * g, node_t * v) -{ - edge_t *e, *f; - node_t *w; - - if (ND_mark(v)) - return; - ND_mark(v) = TRUE; - ND_onstack(v) = TRUE; - for (e = agfstout(g, v); e; e = f) { - f = agnxtout(g, e); - w = aghead(e); - if (ND_onstack(w)) - reverse_edge2(g, e); - else { - if (ND_mark(w) == FALSE) - _dfs(g, w); - } - } - ND_onstack(v) = FALSE; -} - -static void break_cycles(graph_t * g) -{ - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_mark(n) = ND_onstack(n) = FALSE; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - _dfs(g, n); -} -/* setMinMax: - * This will only be called with the root graph or a cluster - * which are guarenteed to contain nodes. Thus, leader will be - * set. - */ -static void setMinMax (graph_t* g, int doRoot) -{ - int c, v; - node_t *n; - node_t* leader = NULL; - - /* Do child clusters */ - for (c = 1; c <= GD_n_cluster(g); c++) - setMinMax(GD_clust(g)[c], 0); - - if (!GD_parent(g) && !doRoot) // root graph - return; - - GD_minrank(g) = MAXSHORT; - GD_maxrank(g) = -1; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - v = ND_rank(n); - if (GD_maxrank(g) < v) - GD_maxrank(g) = v; - if (GD_minrank(g) > v) { - GD_minrank(g) = v; - leader = n; - } - } - GD_leader(g) = leader; -} - -/* readout_levels: - * Store node rank information in original graph. - * Set rank bounds in graph and clusters - * Free added data structures. - * - * rank2 is called with balance=1, which ensures that minrank=0 - */ -static void readout_levels(graph_t * g, graph_t * Xg, int ncc) -{ - node_t *n; - node_t *xn; - int* minrk = NULL; - int doRoot = 0; - - GD_minrank(g) = MAXSHORT; - GD_maxrank(g) = -1; - if (ncc > 1) { - int i; - minrk = N_NEW(ncc+1,int); - for (i = 1; i <= ncc; i++) - minrk[i] = MAXSHORT; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - xn = ND_rep(find(n)); - ND_rank(n) = ND_rank(xn); - if (GD_maxrank(g) < ND_rank(n)) - GD_maxrank(g) = ND_rank(n); - if (GD_minrank(g) > ND_rank(n)) - GD_minrank(g) = ND_rank(n); - if (minrk) { - ND_comp(n) = ND_comp(xn); - minrk[ND_comp(n)] = MIN(minrk[ND_comp(n)],ND_rank(n)); - } - } - if (minrk) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_rank(n) -= minrk[ND_comp(n)]; - /* Non-uniform shifting, so recompute maxrank/minrank of root graph */ - doRoot = 1; - } - else if (GD_minrank(g) > 0) { /* should never happen */ - int delta = GD_minrank(g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_rank(n) -= delta; - GD_minrank(g) -= delta; - GD_maxrank(g) -= delta; - } - - setMinMax(g, doRoot); - - /* release fastgraph memory from Xg */ - for (n = agfstnode(Xg); n; n = agnxtnode(Xg, n)) { - free_list(ND_in(n)); - free_list(ND_out(n)); - } - - free(ND_alg(agfstnode(g))); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_alg(n) = NULL; - } - if (minrk) - free (minrk); -} - -static void dfscc(graph_t * g, node_t * n, int cc) -{ - edge_t *e; - if (ND_comp(n) == 0) { - ND_comp(n) = cc; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - dfscc(g, aghead(e), cc); - for (e = agfstin(g, n); e; e = agnxtin(g, e)) - dfscc(g, agtail(e), cc); - } -} - -static int connect_components(graph_t * g) -{ - int cc = 0; - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_comp(n) = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - if (ND_comp(n) == 0) - dfscc(g, n, ++cc); - if (cc > 1) { - node_t *root = makeXnode(g, ROOT); - int ncc = 1; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_comp(n) == ncc) { - (void) agedge(g, root, n, 0, 1); - ncc++; - } - } - } - return (cc); -} - -static void add_fast_edges (graph_t * g) -{ - node_t *n; - edge_t *e; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - elist_append(e, ND_out(n)); - elist_append(e, ND_in(aghead(e))); - } - } -} - -static void my_init_graph(Agraph_t *g, Agobj_t *graph, void *arg) -{ int *sz = arg; agbindrec(graph,"level graph rec",sz[0],TRUE); } -static void my_init_node(Agraph_t *g, Agobj_t *node, void *arg) -{ int *sz = arg; agbindrec(node,"level node rec",sz[1],TRUE); } -static void my_init_edge(Agraph_t *g, Agobj_t *edge, void *arg) -{ int *sz = arg; agbindrec(edge,"level edge rec",sz[2],TRUE); } -static Agcbdisc_t mydisc = { {my_init_graph,0,0}, {my_init_node,0,0}, {my_init_edge,0,0} }; - -int infosizes[] = { - sizeof(Agraphinfo_t), - sizeof(Agnodeinfo_t), - sizeof(Agedgeinfo_t) -}; - -void dot2_rank(graph_t * g, aspect_t* asp) -{ - int ssize; - int ncc, maxiter = INT_MAX; - char *s; - graph_t *Xg; - - Last_node = NULL; - Xg = agopen("level assignment constraints", Agstrictdirected, 0); - agbindrec(Xg,"level graph rec",sizeof(Agraphinfo_t),TRUE); - agpushdisc(Xg,&mydisc,infosizes); - - edgelabel_ranks(g); - - if ((s = agget(g, "nslimit1"))) - maxiter = atof(s) * agnnodes(g); - else - maxiter = INT_MAX; - - compile_samerank(g, 0); - compile_nodes(g, Xg); - compile_edges(g, Xg); - compile_clusters(g, Xg, 0, 0); - break_cycles(Xg); - ncc = connect_components(Xg); - add_fast_edges (Xg); - - if (asp) { - init_UF_size(Xg); - initEdgeTypes(Xg); - } - - if ((s = agget(g, "searchsize"))) - ssize = atoi(s); - else - ssize = -1; - rank2(Xg, 1, maxiter, ssize); -/* fastgr(Xg); */ - readout_levels(g, Xg, ncc); -#ifdef DEBUG - fprintf (stderr, "Xg %d nodes %d edges\n", agnnodes(Xg), agnedges(Xg)); -#endif - agclose(Xg); -} diff --git a/internal/ccall/dotgen/sameport.c b/internal/ccall/dotgen/sameport.c deleted file mode 100644 index f5ce02b..0000000 --- a/internal/ccall/dotgen/sameport.c +++ /dev/null @@ -1,259 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* vladimir@cs.ualberta.ca, 9-Dec-1997 - * merge edges with specified samehead/sametail onto the same port - */ - -#include "dot.h" - - -#define MAXSAME 5 /* max no of same{head,tail} groups on a node */ - -typedef struct same_t { - char *id; /* group id */ - elist l; /* edges in the group */ - int n_arr; /* number of edges with arrows */ - double arr_len; /* arrow length of an edge in the group */ -} same_t; - -static int sameedge(same_t * same, int n_same, node_t * n, edge_t * e, char *id); -static void sameport(node_t * u, elist * l, double arr_len); - -void dot_sameports(graph_t * g) -/* merge edge ports in G */ -{ - node_t *n; - edge_t *e; - char *id; - same_t samehead[MAXSAME]; - same_t sametail[MAXSAME]; - int n_samehead; /* number of same_t groups on current node */ - int n_sametail; /* number of same_t groups on current node */ - int i; - - E_samehead = agattr(g, AGEDGE, "samehead",(char*)0); - E_sametail = agattr(g, AGEDGE, "sametail",(char*)0); - if (!(E_samehead || E_sametail)) - return; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - n_samehead = n_sametail = 0; - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - if (aghead(e) == agtail(e)) continue; /* Don't support same* for loops */ - if (aghead(e) == n && E_samehead && - (id = agxget(e, E_samehead))[0]) - n_samehead = sameedge(samehead, n_samehead, n, e, id); - else if (agtail(e) == n && E_sametail && - (id = agxget(e, E_sametail))[0]) - n_sametail = sameedge(sametail, n_sametail, n, e, id); - } - for (i = 0; i < n_samehead; i++) { - if (samehead[i].l.size > 1) - sameport(n, &samehead[i].l, samehead[i].arr_len); - free_list(samehead[i].l); - /* I sure hope I don't need to free the char* id */ - } - for (i = 0; i < n_sametail; i++) { - if (sametail[i].l.size > 1) - sameport(n, &sametail[i].l, sametail[i].arr_len); - free_list(sametail[i].l); - /* I sure hope I don't need to free the char* id */ - } - } -} - -static int sameedge(same_t * same, int n_same, node_t * n, edge_t * e, char *id) -/* register E in the SAME structure of N under ID. Uses static int N_SAME */ -{ - int i, sflag, eflag, flag; - - for (i = 0; i < n_same; i++) - if (streq(same[i].id, id)) { - elist_append(e, same[i].l); - goto set_arrow; - } - if (++n_same > MAXSAME) { - n_same--; - agerr(AGERR, "too many (> %d) same{head,tail} groups for node %s\n", - MAXSAME, agnameof(n)); - return n_same; - } - alloc_elist(1, same[i].l); - elist_fastapp(e, same[i].l); - same[i].id = id; - same[i].n_arr = 0; - same[i].arr_len = 0; - set_arrow: - arrow_flags(e, &sflag, &eflag); - if ((flag = aghead(e) == n ? eflag : sflag)) - same[i].arr_len = - /* only consider arrows if there's exactly one arrow */ - (++same[i].n_arr == 1) ? arrow_length(e, flag) : 0; - return n_same; -} - -static void sameport(node_t * u, elist * l, double arr_len) -/* make all edges in L share the same port on U. The port is placed on the - node boundary and the average angle between the edges. FIXME: this assumes - naively that the edges are straight lines, which is wrong if they are long. - In that case something like concentration could be done. - - An arr_port is also computed that's ARR_LEN away from the node boundary. - It's used for edges that don't themselves have an arrow. -*/ -{ - node_t *v; - edge_t *e, *f; - int i; - double x = 0, y = 0, x1, y1, x2, y2, r; - port prt; - int sflag, eflag; -#ifdef OLD - int ht; - port arr_prt; -#endif - - /* Compute the direction vector (x,y) of the average direction. We compute - with direction vectors instead of angles because else we have to first - bring the angles within PI of each other. av(a,b)!=av(a,b+2*PI) */ - for (i = 0; i < l->size; i++) { - e = l->list[i]; - if (aghead(e) == u) - v = agtail(e); - else - v = aghead(e); - x1 = ND_coord(v).x - ND_coord(u).x; - y1 = ND_coord(v).y - ND_coord(u).y; - r = hypot(x1, y1); - x += x1 / r; - y += y1 / r; - } - r = hypot(x, y); - x /= r; - y /= r; - - /* (x1,y1),(x2,y2) is a segment that must cross the node boundary */ - x1 = ND_coord(u).x; - y1 = ND_coord(u).y; /* center of node */ - r = MAX(ND_lw(u) + ND_rw(u), ND_ht(u) + GD_ranksep(agraphof(u))); /* far away */ - x2 = x * r + ND_coord(u).x; - y2 = y * r + ND_coord(u).y; - { /* now move (x1,y1) to the node boundary */ - pointf curve[4]; /* bezier control points for a straight line */ - curve[0].x = x1; - curve[0].y = y1; - curve[1].x = (2 * x1 + x2) / 3; - curve[1].y = (2 * y1 + y2) / 3; - curve[2].x = (2 * x2 + x1) / 3; - curve[2].y = (2 * y2 + y1) / 3; - curve[3].x = x2; - curve[3].y = y2; - - shape_clip(u, curve); - x1 = curve[0].x - ND_coord(u).x; - y1 = curve[0].y - ND_coord(u).y; - } - - /* compute PORT on the boundary */ - prt.p.x = ROUND(x1); - prt.p.y = ROUND(y1); - prt.bp = 0; - prt.order = - (MC_SCALE * (ND_lw(u) + prt.p.x)) / (ND_lw(u) + ND_rw(u)); - prt.constrained = FALSE; - prt.defined = TRUE; - prt.clip = FALSE; - prt.dyna = FALSE; - prt.theta = 0; - prt.side = 0; - prt.name = NULL; - -#ifdef OBSOLETE -/* This is commented because a version of gcc cannot handle it otherwise. -This code appears obsolete and wrong. First, we don't use arr_prt -anymore, as we have previously ifdef'ed out the code below where it -is used. In addition, it resets the rank height. But we've already -positioned the nodes, so it can cause the new ht2, when added to a -node's y coordinate to give a value in the middle of the rank above. -This causes havoc when constructing box for spline routing. -See bug 419. -If we really want to make room for arrowheads, this should be done in -the general case that the user sets a small ranksep, and requires repositioning -nodes and maintaining equal separation when specified -*/ - /* compute ARR_PORT at a distance ARR_LEN away from the boundary */ - if ((arr_prt.defined = arr_len && TRUE)) { - arr_prt.p.x = ROUND(x1 + x * arr_len); - arr_prt.p.y = ROUND(y1 + y * arr_len); - arr_prt.bp = 0; - arr_prt.side = 0; - arr_prt.constrained = FALSE; - arr_prt.order = - (MC_SCALE * (ND_lw_i(u) + arr_prt.p.x)) / (ND_lw_i(u) + - ND_rw_i(u)); - /* adjust ht so that splines.c uses feasible boxes. - FIXME: I guess this adds an extra box for all edges in the rank */ - if (u == l->list[0]->head) { - if (GD_rank(u->graph)[ND_rank(u)].ht2 < - (ht = ABS(arr_prt.p.y))) - GD_rank(u->graph)[ND_rank(u)].ht2 = ht; - } else { - if (GD_rank(u->graph)[ND_rank(u)].ht1 < - (ht = ABS(arr_prt.p.y))) - GD_rank(u->graph)[ND_rank(u)].ht1 = ht; - } - } -#endif - - /* assign one of the ports to every edge */ - for (i = 0; i < l->size; i++) { - e = l->list[i]; - arrow_flags(e, &sflag, &eflag); -#ifndef OBSOLETE - for (; e; e = ED_to_virt(e)) { /* assign to all virt edges of e */ - for (f = e; f; - f = ED_edge_type(f) == VIRTUAL && - ND_node_type(aghead(f)) == VIRTUAL && - ND_out(aghead(f)).size == 1 ? - ND_out(aghead(f)).list[0] : NULL) { - if (aghead(f) == u) - ED_head_port(f) = prt; - if (agtail(f) == u) - ED_tail_port(f) = prt; - } - for (f = e; f; - f = ED_edge_type(f) == VIRTUAL && - ND_node_type(agtail(f)) == VIRTUAL && - ND_in(agtail(f)).size == 1 ? - ND_in(agtail(f)).list[0] : NULL) { - if (aghead(f) == u) - ED_head_port(f) = prt; - if (agtail(f) == u) - ED_tail_port(f) = prt; - } - } -#else - for (; e; e = ED_to_virt(e)) { /* assign to all virt edges of e */ - if (aghead(e) == u) - ED_head_port(e) = - arr_port.defined && !eflag ? arr_prt : prt; - if (agtail(e) == u) - ED_tail_port(e) = - arr_port.defined && !sflag ? arr_prt : prt; - } -#endif - } - - ND_has_port(u) = TRUE; /* kinda pointless, because mincross is already done */ -} diff --git a/internal/ccall/edgepaint/dummy.go b/internal/ccall/edgepaint/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/edgepaint/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/edgepaint/edge_distinct_coloring.c b/internal/ccall/edgepaint/edge_distinct_coloring.c deleted file mode 100644 index f5b4d17..0000000 --- a/internal/ccall/edgepaint/edge_distinct_coloring.c +++ /dev/null @@ -1,318 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#include "general.h" -#include "time.h" -#include "SparseMatrix.h" -#include "node_distinct_coloring.h" -#include "DotIO.h" -#include "intersection.h" -#include "QuadTree.h" - -static int splines_intersect(int dim, int u1, int v1, int u2, int v2, - real cos_critical, int check_edges_with_same_endpoint, - real *x, char *xsplines1, char *xsplines2){ - /* u1, v2 an u2, v2: the node index of the two edn points of two edges. - cos_critical: cos of critical angle - check_edges_with_same_endpoint: whether need to treat two splines from - . the same end point specially in ignoring splines that exit/enter the same end pont at around 180 - x: the coordinates of nodes - xsplines1,xsplines2: the first and second splines corresponding to two edges - - */ - int itmp; - int len1 = 100, len2 = 100; - real *x1, *x2; - int ns1 = 0, ns2 = 0; - int i, j, iter1 = 0, iter2 = 0; - real cos_a, tmp[2]; - int endp1 = 0, endp2 = 0; - - tmp[0] = tmp[1] = 0; - x1 = MALLOC(sizeof(real)*len1); - x2 = MALLOC(sizeof(real)*len2); - - assert(dim <= 3); - /* if two end points are the same, make sure they are the first in each edge */ - if (u1 == v2){/* switch u2 and v2 */ - itmp = u2; u2 = v2; v2 = itmp; - } else if (v1 == u2){/* switch u1 and v1 */ - itmp = u1; u1 = v1; v1 = itmp; - } else if (v1 == v2){/* switch both */ - itmp = u2; u2 = v2; v2 = itmp; - itmp = u1; u1 = v1; v1 = itmp; - } - - /* origonally I though the two end points has to be included. But now I think it does not need to since - the splie might start from the border of the label box - MEMCPY(x1, &(x[dim*u1]), sizeof(real)*dim); - MEMCPY(x2, &(x[dim*u2]), sizeof(real)*dim); - ns1++; ns2++; - */ - - /* splines could be a list of - 1. 3n points - 2. of the form "e,x,y" followed by 3n points, where x,y is really padded to the end of the 3n points - 3. of the form "s,x,y" followed by 3n points, where x,y is padded to the start of the 3n points - */ - if (xsplines1){ - if(strstr(xsplines1, "e,")){ - endp1 = 1; - xsplines1 = strstr(xsplines1, "e,") + 2; - } else if (strstr(xsplines2, "s,")){ - xsplines1 = strstr(xsplines1, "s,") + 2; - } - } - while (xsplines1 && sscanf(xsplines1,"%lf,%lf", &(x1[ns1*dim]), &x1[ns1*dim + 1]) == 2){ - if (endp1 && iter1 == 0){ - tmp[0] = x1[ns1*dim]; tmp[1] = x1[ns1*dim + 1]; - } else { - ns1++; - } - iter1++; - xsplines1 = strstr(xsplines1, " "); - if (!xsplines1) break; - xsplines1++; - if (ns1*dim >= len1){ - len1 = ns1*dim + (int)MAX(10, 0.2*ns1*dim); - x1 = REALLOC(x1, sizeof(real)*len1); - } - } - if (endp1){/* pad the end point at the last position */ - ns1++; - if (ns1*dim >= len1){ - len1 = ns1*dim + (int)MAX(10, 0.2*ns1*dim); - x1 = REALLOC(x1, sizeof(real)*len1); - } - x1[(ns1-1)*dim] = tmp[0]; x1[(ns1-1)*dim + 1] = tmp[1]; - } - - - /* splines could be a list of - 1. 3n points - 2. of the form "e,x,y" followed by 3n points, where x,y is really padded to the end of the 3n points - 3. of the form "s,x,y" followed by 3n points, where x,y is padded to the start of the 3n points - */ - if (xsplines2){ - if(strstr(xsplines2, "e,")){ - endp2 = 1; - xsplines2 = strstr(xsplines2, "e,") + 2; - } else if (strstr(xsplines2, "s,")){ - xsplines2 = strstr(xsplines2, "s,") + 2; - } - } - while (xsplines2 && sscanf(xsplines2,"%lf,%lf", &(x2[ns2*dim]), &x2[ns2*dim + 1]) == 2){ - if (endp2 && iter2 == 0){ - tmp[0] = x2[ns2*dim]; tmp[1] = x2[ns2*dim + 1]; - } else { - ns2++; - } - iter2++; - xsplines2 = strstr(xsplines2, " "); - if (!xsplines2) break; - xsplines2++; - if (ns2*dim >= len2){ - len2 = ns2*dim + (int)MAX(10, 0.2*ns2*dim); - x2 = REALLOC(x2, sizeof(real)*len2); - } - } - if (endp2){/* pad the end point at the last position */ - ns2++; - if (ns2*dim >= len2){ - len2 = ns2*dim + (int)MAX(10, 0.2*ns2*dim); - x2 = REALLOC(x2, sizeof(real)*len2); - } - x2[(ns2-1)*dim] = tmp[0]; x2[(ns2-1)*dim + 1] = tmp[1]; - } - - /* origonally I though the two end points has to be included. But now I think it does not need to since - the splie might start from the border of the label box - MEMCPY(&(x2[dim*ns2]), &(x[dim*v2]), sizeof(real)*dim); - ns2++; - MEMCPY(&(x1[dim*ns1]), &(x[dim*v1]), sizeof(real)*dim); - ns1++; - */ - -for (i = 0; i < ns1 - 1; i++){ - for (j = 0; j < ns2 - 1; j++){ - cos_a = intersection_angle(&(x1[dim*i]), &(x1[dim*(i + 1)]), &(x2[dim*j]), &(x2[dim*(j+1)])); - if (!check_edges_with_same_endpoint && cos_a >= -1) cos_a = ABS(cos_a); - if (cos_a > cos_critical) { - return 1; - } - - } - } - - FREE(x1); - FREE(x2); - return 0; -} - - -Agraph_t* edge_distinct_coloring(char *color_scheme, char *lightness, Agraph_t* g, real angle, real accuracy, int check_edges_with_same_endpoint, int seed){ - /* color the edges of a graph so that conflicting edges are as dinstrinct in color as possibl. - color_scheme: rgb, lab, gray, or a list of comma separaterd RGB colors in hex, like #ff0000,#00ff00 - lightness: of the form 0,70, specifying the range of lightness of LAB color. Ignored if scheme is not COLOR_LAB. - . if NULL, 0,70 is assumed - g: the graph - angle: if two edges cross at an angle < "angle", consider they as conflict - accuracy: how accurate when finding color of an edge to be as different from others - check_edges_with_same_endpoint: if TRUE, we will check edges with same end point and only consider them as conflict if - . their angle is very small. Edges that share an end point and is close to 180 degree - . are not consider conflict. - seed: random_seed. If negative, consider -seed as the number of random start iterations - */ - real *x = NULL; - int dim = 2; - SparseMatrix A, B, C; - int *irn, *jcn, nz, nz2 = 0; - real cos_critical = cos(angle/180*3.14159), cos_a; - int u1, v1, u2, v2, i, j; - real *colors = NULL, color_diff, color_diff_sum; - int flag, ne; - char **xsplines = NULL; - int cdim; - - A = SparseMatrix_import_dot(g, dim, NULL, &x, NULL, NULL, FORMAT_COORD, NULL); - if (!x){ - fprintf(stderr,"The gv file contains no or improper 2D coordinates\n"); - return NULL; - } - - - irn = A->ia; jcn = A->ja; - nz = A->nz; - - /* get rid of self edges */ - for (i = 0; i < nz; i++){ - if (irn[i] != jcn[i]){ - irn[nz2] = irn[i]; - jcn[nz2++] = jcn[i]; - } - } - - if (Verbose) - fprintf(stderr,"cos = %f, nz2 = %d\n", cos_critical, nz2); - /* now find edge collision */ - nz = 0; - B = SparseMatrix_new(nz2, nz2, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - - if (Import_dot_splines(g, &ne, &xsplines)){ -#ifdef TIME - clock_t start = clock(); -#endif - assert(ne == nz2); - cos_a = 1.;/* for splines we exit conflict check as soon as we find an conflict, so the anle may not be representitive, hence set to constant */ - for (i = 0; i < nz2; i++){ - u1 = irn[i]; v1 = jcn[i]; - for (j = i+1; j < nz2; j++){ - u2 = irn[j]; v2 = jcn[j]; - if (splines_intersect(dim, u1, v1, u2, v2, cos_critical, check_edges_with_same_endpoint, x, xsplines[i], xsplines[j])){ - B = SparseMatrix_coordinate_form_add_entries(B, 1, &i, &j, &cos_a); - } - } - } -#ifdef TIME - fprintf(stderr, "cpu for dual graph =%10.3f", ((real) (clock() - start))/CLOCKS_PER_SEC); -#endif - - } else { - /* no splines, justsimple edges */ -#ifdef TIME - clock_t start = clock(); -#endif - - - for (i = 0; i < nz2; i++){ - u1 = irn[i]; v1 = jcn[i]; - for (j = i+1; j < nz2; j++){ - u2 = irn[j]; v2 = jcn[j]; - cos_a = intersection_angle(&(x[dim*u1]), &(x[dim*v1]), &(x[dim*u2]), &(x[dim*v2])); - if (!check_edges_with_same_endpoint && cos_a >= -1) cos_a = ABS(cos_a); - if (cos_a > cos_critical) { - B = SparseMatrix_coordinate_form_add_entries(B, 1, &i, &j, &cos_a); - } - } - } -#ifdef TIME - fprintf(stderr, "cpu for dual graph (splines) =%10.3f\n", ((real) (clock() - start))/CLOCKS_PER_SEC); -#endif - } - C = SparseMatrix_from_coordinate_format(B); - if (B != C) SparseMatrix_delete(B); - - { -#ifdef TIME - clock_t start = clock(); -#endif - int weightedQ = FALSE; - int iter_max = 100; - node_distinct_coloring(color_scheme, lightness, weightedQ, C, accuracy, iter_max, seed, &cdim, &colors, &color_diff, &color_diff_sum, &flag); - if (flag) goto RETURN; -#ifdef TIME - fprintf(stderr, "cpu for color assignmment =%10.3f\n", ((real) (clock() - start))/CLOCKS_PER_SEC); -#endif - } - - /* for printing dual*/ -#if 0 - { - FILE*fp; - fp = fopen("/tmp/dual.gv","w"); - fprintf(fp,"graph {\n"); - for (i = 0; i < nz2; i++){ - u1 = irn[i]; v1 = jcn[i]; - for (j = i+1; j < nz2; j++){ - u2 = irn[j]; v2 = jcn[j]; - cos_a = intersection_angle(&(x[dim*u1]), &(x[dim*v1]), &(x[dim*u2]), &(x[dim*v2])); - if (!check_edges_with_same_endpoint && cos_a >= -1) cos_a = ABS(cos_a); - if (cos_a > cos_critical) { - fprintf(fp,"\"%d_%d\" -- \"%d_%d\"\n", u1,v1,u2,v2); - } - } - } - for (i = 0; i < nz2; i++){ - u1 = irn[i]; v1 = jcn[i]; - if (cdim == 3) { - fprintf(fp,"\"%d_%d\" [label2=%d pos=\"%f,%f\", color=\"#%02x%02x%02x\"]\n", u1,v1, i, 0.5*(x[dim*u1] + x[dim*v1]), 0.5*(x[dim*u1+1] + x[dim*v1+1]), - MIN((unsigned int)(colors[i*cdim]*255),255), MIN((unsigned int) (colors[i*cdim+1]*255), 255), MIN((unsigned int)(colors[i*cdim+2]*255), 255)); - } else if (cdim == 2){ - fprintf(fp,"\"%d_%d\" [label2=%d pos=\"%f,%f\", color=\"#%02x%02x%02x\"]\n", u1,v1, i, 0.5*(x[dim*u1] + x[dim*v1]), 0.5*(x[dim*u1+1] + x[dim*v1+1]), - MIN((unsigned int)(colors[i*cdim]*255),255), MIN((unsigned int) (colors[i*cdim+1]*255), 255), 255); - } else { - fprintf(fp,"\"%d_%d\" [label2=%d pos=\"%f,%f\", color=\"#%02x%02x%02x\"]\n", u1,v1, i, 0.5*(x[dim*u1] + x[dim*v1]), 0.5*(x[dim*u1+1] + x[dim*v1+1]), - MIN((unsigned int)(colors[i*cdim]*255),255), MIN((unsigned int) (colors[i*cdim]*255), 255), MIN((unsigned int)(colors[i*cdim]*255), 255)); - } - } - fprintf(fp,"}\n"); - } -#endif - - if (Verbose) - fprintf(stderr,"The edge conflict graph has %d nodes and %d edges, final color_diff=%f color_diff_sum = %f\n", - C->m, C->nz, color_diff, color_diff_sum); - - attach_edge_colors(g, cdim, colors); - - RETURN: - SparseMatrix_delete(A); - SparseMatrix_delete(C); - FREE(colors); - FREE(x); - if (xsplines){ - for (i = 0; i < ne; i++){ - if (xsplines[i]) FREE(xsplines[i]); - } - FREE(xsplines); - } - return g; - -} - diff --git a/internal/ccall/edgepaint/edge_distinct_coloring.h b/internal/ccall/edgepaint/edge_distinct_coloring.h deleted file mode 100644 index 7252283..0000000 --- a/internal/ccall/edgepaint/edge_distinct_coloring.h +++ /dev/null @@ -1,16 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef EDGE_DISTINCT_COLORING_H -#define EDGE_DISTINCT_COLORING_H - -Agraph_t* edge_distinct_coloring(char *color_scheme, char *lightness, Agraph_t* g, real angle, real accuracy, int check_edges_with_same_endpoint, int seed); - -#endif diff --git a/internal/ccall/edgepaint/furtherest_point.c b/internal/ccall/edgepaint/furtherest_point.c deleted file mode 100644 index 73daf22..0000000 --- a/internal/ccall/edgepaint/furtherest_point.c +++ /dev/null @@ -1,295 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#include "general.h" -#include "QuadTree.h" -#include "furtherest_point.h" - -static real dist(int dim, real *x, real *y){ - int k; - real d = 0; - for (k = 0; k < dim; k++) d += (x[k] - y[k])*(x[k]-y[k]); - return sqrt(d); -} - - -static real distance_to_group(int k, int dim, real *wgt, real *pts, real *center, real (*usr_dist)(int, real*, real*)){ - int i; - real distance = -1, dist_min = 0; - if (!wgt){ - for (i = 0; i < k; i++){ - distance = (*usr_dist)(dim, &(pts[i*dim]), center); - if (i == 0){ - dist_min = distance; - } else { - dist_min = MIN(dist_min, distance); - } - } - } else { - for (i = 0; i < k; i++){ - distance = (*usr_dist)(dim, &(pts[i*dim]), center); - if (i == 0){ - dist_min = wgt[i]*distance; - } else { - dist_min = MIN(dist_min, wgt[i]*distance); - } - } - } - return dist_min; -} - -void furtherest_point(int k, int dim, real *wgt, real *pts, real *center, real width, int max_level, real (*usr_dist)(int, real*, real*), real *dist_max, real **argmax){ - /* Assume that in the box defined by {center, width} are feasible; - find, in the, a point "furtherest_point" that is furtherest away from a group of k-points pts, using quadtree, - with up to max_level. Here the distance of a point to a group of point is defined as the minimum - of the distance of that point to all the points in the group, - and each distance is defined by the function dist. - - Input: - - k: number of points in the group - dim: dimension - wgt: if not null, the weighting factor for the i-th point is wgt[i]. The color distance - . of a point p to a group of points pts is min_i(wgt[i]*dist(p, pts[i])), instead of min_i(dist(p, pts[i])) - pts: the i-th point is [i*k, (i+1)*k) - center: the center of the root of quadtree - width: the width of the root - max_level: max level to go down - usr_dist: the distance function. If NULL, assume Euclidean. If NULL, set to Euclidean. - argmax: on entry, if NULL, will be allocated, iotherwise must be an array of size >= dim which will hold the furtherest point. - - Return: the point (argmax) furtherest away from the group, and the distance dist_max. - */ - QuadTree qt, qt0; - int ncandidates = 10, ncandidates_max = 10, ntmp; - QuadTree *candidates, *ctmp;/* a cadidate array of quadtrees */ - int ncandidates2 = 10, ncandidates2_max = 10; - QuadTree *candidates2;/* a cadidate array of quadtrees */ - real distance; - int level = 0; - int i, ii, j, pruned; - real wmax = 0; - - if (!usr_dist) usr_dist = dist; - if (wgt){ - for (i = 0; i < k; i++) wmax = MAX(wgt[i], wmax); - } else { - wmax = 1.; - } - - qt0 = qt = QuadTree_new(dim, center, width, max_level); - - qt->total_weight = *dist_max = distance_to_group(k, dim, wgt, pts, center, usr_dist);/* store distance in total_weight */ - if (!(*argmax)) *argmax = MALLOC(sizeof(real)*dim); - MEMCPY(*argmax, center, sizeof(real)*dim); - - candidates = MALLOC(sizeof(qt)*ncandidates_max); - candidates2 = MALLOC(sizeof(qt)*ncandidates2_max); - candidates[0] = qt; - ncandidates = 1; - - /* idea: maintain the current best point and best (largest) distance. check the list of candidate. Subdivide each into quadrants, if any quadrant gives better distance, update, and put on the candidate - list. If we can not prune a quadrant (a auadrant can be pruned if the distance of its center to the group of points pts, plus that from the center to the corner of the quadrant, is smaller than the best), we - also put it down on the candidate list. We then recurse on the candidate list, unless the max level is reached. */ - while (level++ < max_level){ - if (Verbose > 10) { - fprintf(stderr,"level=%d=================\n", level); - } - ncandidates2 = 0; - for (i = 0; i < ncandidates; i++){ - - - qt = candidates[i]; - assert(!(qt->qts)); - - if (Verbose > 10) { - fprintf(stderr,"candidate %d at {", i); - for (j = 0; j < dim; j++) fprintf(stderr,"%f, ", qt->center[j]); - fprintf(stderr,"}, width = %f, dist = %f\n", qt->width, qt->total_weight); - } - - distance = qt->total_weight;/* total_weight is used to store the distance from teh center to the group */ - if (distance + wmax*sqrt(((real) dim))*qt->width < *dist_max) continue;/* this could happen if this candidate was entered into the list earlier than a better one later in the list */ - qt->qts = MALLOC(sizeof(QuadTree)*(1<qts[ii] = QuadTree_new_in_quadrant(qt->dim, qt->center, (qt->width)/2, max_level, ii); - qt->qts[ii]->total_weight = distance = distance_to_group(k, dim, wgt, pts, qt->qts[ii]->center, usr_dist);/* store distance in total_weight */ - pruned = FALSE; - if (distance > *dist_max){ - *dist_max = distance; - if (Verbose > 10) { - fprintf(stderr,"new distmax=%f, pt={", *dist_max); - for (j = 0; j < dim; j++) fprintf(stderr,"%f, ", qt->qts[ii]->center[j]); - fprintf(stderr,"}\n"); - } - MEMCPY(*argmax, qt->qts[ii]->center, sizeof(real)*dim); - } else if (distance + wmax*sqrt(((real) dim))*(qt->width)/2 < *dist_max){ - pruned = TRUE; - } - if (!pruned){ - if (ncandidates2 >= ncandidates2_max){ - ncandidates2_max += (int)MAX(0.2*ncandidates2_max, 10); - candidates2 = REALLOC(candidates2, sizeof(QuadTree)*ncandidates2_max); - } - candidates2[ncandidates2++] = qt->qts[ii]; - } - }/* finish checking every of the 2^dim siblings */ - }/* finish checking all the candidates */ - - /* sawp the two lists */ - ntmp = ncandidates; - ncandidates = ncandidates2; - ncandidates2 = ntmp; - - ntmp = ncandidates_max; - ncandidates_max = ncandidates2_max; - ncandidates2_max = ntmp; - - ctmp = candidates; - candidates = candidates2; - candidates2 = ctmp; - - }/* continue down the quadtree */ - - if (Verbose > 10) { - FILE *fp; - fp = fopen("/tmp/1.m","w"); - QuadTree_print(fp, qt0); - } - - QuadTree_delete(qt0); - - FREE(candidates); - FREE(candidates2); - -} - - -void furtherest_point_in_list(int k, int dim, real *wgt, real *pts, QuadTree qt, int max_level, - real (*usr_dist)(int, real*, real*), real *dist_max, real **argmax){ - /* Given a list of points in the Euclidean space contained in the quadtree qt (called the feasible points), find among them one that - is closest to another list of point {dim, k, pts}. - - - find, in the, a point "furtherest_point" that is furtherest away from a group of k-points pts, using quadtree, - with up to max_level. Here the distance of a point to a group of point is defined as the minimum - of the distance of that point to all the points in the group, - and each distance is defined by the function dist. - - Input: - - k: number of points in the group - dim: dimension - wgt: if not null, the weighting factor for the i-th point is wgt[i]. The color distance - . of a point p to a group of points pts is min_i(wgt[i]*dist(p, pts[i])), instead of min_i(dist(p, pts[i])) - pts: the i-th point is [i*k, (i+1)*k) - center: the center of the root of quadtree - width: the width of the root - max_level: max level to go down - usr_dist: the distance function. If NULL, assume Euclidean. If NULL, set to Euclidean. - argmax: on entry, if NULL, will be allocated, iotherwise must be an array of size >= dim which will hold the furtherest point. - - Return: the point (argmax) furtherest away from the group, and the distance dist_max. - */ - - int ncandidates = 10, ncandidates_max = 10, ntmp; - QuadTree *candidates, *ctmp;/* a cadidate array of quadtrees */ - int ncandidates2 = 10, ncandidates2_max = 10; - QuadTree *candidates2;/* a cadidate array of quadtrees */ - real distance; - int level = 0; - int i, ii, j, pruned; - real *average; - real wmax = 0.; - - if (!usr_dist) usr_dist = dist; - - if (wgt){ - for (i = 0; i < k; i++) wmax = MAX(wgt[i], wmax); - } else { - wmax = 1.; - } - - average = qt->average; - qt->total_weight = *dist_max = distance_to_group(k, dim, wgt, pts, average, usr_dist);/* store distance in total_weight */ - if (!(*argmax)) *argmax = MALLOC(sizeof(real)*dim); - MEMCPY(*argmax, average, sizeof(real)*dim); - - candidates = MALLOC(sizeof(qt)*ncandidates_max); - candidates2 = MALLOC(sizeof(qt)*ncandidates2_max); - candidates[0] = qt; - ncandidates = 1; - - /* idea: maintain the current best point and best (largest) distance. check the list of candidate. Subdivide each into quadrants, if any quadrant gives better distance, update, and put on the candidate - list. If we can not prune a quadrant (a auadrant can be pruned if the distance of its center to the group of points pts, plus that from the center to the corner of the quadrant, is smaller than the best), we - also put it down on the candidate list. We then recurse on the candidate list, unless the max level is reached. */ - while (level++ < max_level){ - if (Verbose > 10) { - fprintf(stderr,"level=%d=================\n", level); - } - ncandidates2 = 0; - for (i = 0; i < ncandidates; i++){ - qt = candidates[i]; - - if (Verbose > 10) { - fprintf(stderr,"candidate %d at {", i); - for (j = 0; j < dim; j++) fprintf(stderr,"%f, ", qt->center[j]); - fprintf(stderr,"}, width = %f, dist = %f\n", qt->width, qt->total_weight); - } - - distance = qt->total_weight;/* total_weight is used to store the distance from average feasible points to the group */ - if (qt->n == 1 || distance + wmax*2*sqrt(((real) dim))*qt->width < *dist_max) continue;/* this could happen if this candidate was entered into the list earlier than a better one later in the list. Since the distance - is from the average of the feasible points in the square which may not be at the center */ - - if (!(qt->qts)) continue; - - for (ii = 0; ii < 1<qts[ii])) continue; - qt->qts[ii]->total_weight = distance = distance_to_group(k, dim, wgt, pts, qt->qts[ii]->average, usr_dist);/* store distance in total_weight */ - pruned = FALSE; - if (distance > *dist_max){ - *dist_max = distance; - if (Verbose > 10) { - fprintf(stderr,"new distmax=%f, pt={", *dist_max); - for (j = 0; j < dim; j++) fprintf(stderr,"%f, ", qt->qts[ii]->average[j]); - fprintf(stderr,"}\n"); - } - MEMCPY(*argmax, qt->qts[ii]->average, sizeof(real)*dim); - } else if (distance + wmax*sqrt(((real) dim))*(qt->width) < *dist_max){/* average feasible point in this square is too close to the point set */ - pruned = TRUE; - } - if (!pruned){ - if (ncandidates2 >= ncandidates2_max){ - ncandidates2_max += (int)MAX(0.2*ncandidates2_max, 10); - candidates2 = REALLOC(candidates2, sizeof(QuadTree)*ncandidates2_max); - } - candidates2[ncandidates2++] = qt->qts[ii]; - } - }/* finish checking every of the 2^dim siblings */ - }/* finish checking all the candidates */ - - /* sawp the two lists */ - ntmp = ncandidates; - ncandidates = ncandidates2; - ncandidates2 = ntmp; - - ntmp = ncandidates_max; - ncandidates_max = ncandidates2_max; - ncandidates2_max = ntmp; - - ctmp = candidates; - candidates = candidates2; - candidates2 = ctmp; - - }/* continue down the quadtree */ - - FREE(candidates); - FREE(candidates2); - -} diff --git a/internal/ccall/edgepaint/furtherest_point.h b/internal/ccall/edgepaint/furtherest_point.h deleted file mode 100644 index c12a2da..0000000 --- a/internal/ccall/edgepaint/furtherest_point.h +++ /dev/null @@ -1,18 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef FURTHEREST_POINT_H -#define FURTHEREST_POINT_H - -void furtherest_point(int k, int dim, real *wgt, real *pts, real *center, real width, int max_level, real (*usr_dist)(int, real*, real*), real *dist_max, real **argmax); -void furtherest_point_in_list(int k, int dim, real *wgt, real *pts, QuadTree qt, int max_level, - real (*usr_dist)(int, real*, real*), real *dist_max, real **argmax); - -#endif diff --git a/internal/ccall/edgepaint/intersection.c b/internal/ccall/edgepaint/intersection.c deleted file mode 100644 index e7063d0..0000000 --- a/internal/ccall/edgepaint/intersection.c +++ /dev/null @@ -1,180 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#include "general.h" - -static real cross(real *u, real *v){ - return u[0]*v[1] - u[1]*v[0]; -} - - -/* - -There's a nice approach to this problem that uses vector cross -products. Define the 2-dimensional vector cross product v * w to be -vxwy \[Minus] vywx (this is the magnitude of the 3-dimensional cross -product). - -Suppose the two line segments run from p to p + r and from q to q +s. -Then any point on the first line is representable as p + t r (for a -scalar parameter t) and any point on the second line as q + u s (for a -scalar parameter u). - -The two lines intersect if we can find t and u such that: - -p + t r = q + u s - -cross both sides with s, getting - -(p + t r) * s = (q + u s) * s - -And since s * s = 0, this means - -t(r * s) = (q \[Minus] p) * s - -And therefore, solving for t: - -t = (q \[Minus] p) * s / (r * s) - -In the same way, we can solve for u: - -u = (q \[Minus] p) * r / (r * s) - -Now if r * s = 0 then the two lines are parallel. -(There are two cases: if (q \[Minus] p) * r = 0 too, -then the lines are collinear, otherwise they never intersect.) - -Otherwise the intersection point is on the original pair -of line segments if 0 <= t <= 1 and 0 <= u <= 1. - -*/ - -static real dist(int dim, real *x, real *y){ - int k; - real d = 0; - for (k = 0; k < dim; k++) d += (x[k] - y[k])*(x[k]-y[k]); - return sqrt(d); -} - -real point_line_distance(real *p, real *q, real *r){ - /* distance between point p and line q--r */ - enum {dim = 2}; - real t = 0, b = 0; - int i; - real tmp; - - /* t = ((p - q).(r - q))/((r - q).(r - q)) gives the position of the project of p on line r--q */ - for (i = 0; i < dim; i++){ - t += (p[i] - q[i])*(r[i] - q[i]); - b += (r[i] - q[i])*(r[i] - q[i]); - } - if (b <= MACHINEACC) return dist(dim, p, q); - t = t/b; - - /* pointLine = Norm[p - (q + t (r - q))]; - If [t >= 0 && t <= 1, pointLine, Min[{Norm[p - q], Norm[p - r]}]]]; - */ - - if (t >= 0 && t <= 1){ - b = 0; - for (i = 0; i < dim; i++){ - tmp = p[i] - (q[i] + t*(r[i] - q[i])); - b += tmp*tmp; - } - return sqrt(b); - } - t = dist(dim, p, q); - b = dist(dim, p, r); - return MIN(t, b); - -} - -static real line_segments_distance(real *p1, real *p2, real *q1, real *q2){ - /* distance between line segments p1--p2 and q1--q2 */ - real t1, t2, t3, t4; - t1 = point_line_distance(p1, q1, q2); - t2 = point_line_distance(p2, q1, q2); - t3 = point_line_distance(q1, p1, p2); - t4 = point_line_distance(q2, p1, p2); - t1 = MIN(t1,t2); - t3 = MIN(t3,t4); - return MIN(t1, t3); -} - - -real intersection_angle(real *p1, real *p2, real *q1, real *q2){ - - /* give two lines p1--p2 and q1--q2, find their intersection agle - and return Abs[Cos[theta]] of that angle. - - If the two lines are very close, treat as if they intersect. - - If they do not intersect or being very close, return -2. - - If the return value is close to 1, the two lines intersects and is close to an angle of 0 o Pi; - . lines that intersect at close to 90 degree give return value close to 0 - - in the special case of two lines sharing an end point, we return Cos[theta], instead of - . the absolute value, where theta - . is the angle of the two rays emitting from the shared end point, thus the value can be - . from -1 to 1. - */ - enum {dim = 2}; - real r[dim], s[dim], qp[dim]; - real rnorm = 0, snorm = 0, b, t, u; - // real epsilon = sqrt(MACHINEACC), close = 0.01; - //this may be better. Apply to ngk10_4 and look at double edge between 28 and 43. real epsilon = sin(10/180.), close = 0.1; - real epsilon = sin(1/180.), close = 0.01; - int line_dist_close; - int i; - real res; - - for (i = 0; i < dim; i++) { - r[i] = p2[i] - p1[i]; - rnorm += r[i]*r[i]; - } - rnorm = sqrt(rnorm); - - for (i = 0; i < dim; i++) { - s[i] = q2[i] - q1[i]; - snorm += s[i]*s[i]; - } - snorm = sqrt(snorm); - b = cross(r, s); - line_dist_close = (line_segments_distance(p1, p2, q1, q2) <= close*MAX(rnorm, snorm)); - if (ABS(b) <= epsilon*snorm*rnorm){/* parallel */ - if (line_dist_close) {/* two parallel lines that are close */ - return 1; - } - return -2;/* parallel but not close */ - } - for (i = 0; i < dim; i++) qp[i] = q1[i] - p1[i]; - t = cross(qp, s)/b; - u = cross(qp, r)/b; - if ((t >= 0 && t <= 1 && u >= 0 && u <= 1) /* they intersect */ - || line_dist_close){/* or lines are close */ - real rs = 0; - if (rnorm*snorm < MACHINEACC) return 0; - for (i = 0; i < dim; i++){ - rs += r[i]*s[i]; - } - res = rs/(rnorm*snorm); - /* if the two lines share an end point */ - if (p1[0] == q1[0] && p1[1] == q1[1]){ - return res; - } else if (p1[0] == q2[0] && p1[1] == q2[1]){ - return -res; - } else if (p2[0] == q1[0] && p2[1] == q1[1]){ - return -res; - } else if (p2[0] == q2[0] && p2[1] == q2[1]){ - return res; - } - - /* normal case of intersect or very close */ - return ABS(res); - } - return -2;/* no intersection, and lines are not even close */ -} - diff --git a/internal/ccall/edgepaint/intersection.h b/internal/ccall/edgepaint/intersection.h deleted file mode 100644 index 30f6b64..0000000 --- a/internal/ccall/edgepaint/intersection.h +++ /dev/null @@ -1,16 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef INTERSECTION_H -#define INTERSECTION_H - -real intersection_angle(real *p1, real *p2, real *q1, real *q2); - -#endif diff --git a/internal/ccall/edgepaint/lab.c b/internal/ccall/edgepaint/lab.c deleted file mode 100644 index d3b256e..0000000 --- a/internal/ccall/edgepaint/lab.c +++ /dev/null @@ -1,443 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#include "general.h" -#include "QuadTree.h" -#include "lab.h" -#include "math.h" -#include "stdio.h" -#include "stdlib.h" -#include "color_palette.h" -#include "lab_gamut.h" - -color_rgb color_rgb_init(double r, double g, double b){ - color_rgb rgb; - rgb.r = r; rgb.g = g; rgb.b = b; - return rgb; -} - -color_xyz color_xyz_init(double x, double y, double z){ - color_xyz xyz; - xyz.x = x; xyz.y = y; xyz.z = z; - return xyz; -} - - -color_lab color_lab_init(double l, double a, double b){ - color_lab lab; - lab.l = l; lab.a = a; lab.b = b; - return lab; -} - -double XYZEpsilon = 216./24389.; -double XYZKappa = 24389./27.; - -static double PivotXYZ(double n){ - if (n > XYZEpsilon) return pow(n, 1/3.); - return (XYZKappa*n + 16)/116; -} - -static double PivotRgb(double n){ - if (n > 0.04045) return 100*pow((n + 0.055)/1.055, 2.4); - return 100*n/12.92; -} - -color_xyz RGB2XYZ(color_rgb color){ - double r = PivotRgb(color.r/255.0); - double g = PivotRgb(color.g/255.0); - double b = PivotRgb(color.b/255.0); - return color_xyz_init(r*0.4124 + g*0.3576 + b*0.1805, r*0.2126 + g*0.7152 + b*0.0722, r*0.0193 + g*0.1192 + b*0.9505); -} - -color_lab RGB2LAB(color_rgb color){ - color_xyz white = color_xyz_init(95.047, 100.000, 108.883); - color_xyz xyz = RGB2XYZ(color); - double x = PivotXYZ(xyz.x/white.x); - double y = PivotXYZ(xyz.y/white.y); - double z = PivotXYZ(xyz.z/white.z); - double L = MAX(0, 116*y - 16); - double A = 500*(x - y); - double B = 200*(y - z); - return color_lab_init(L, A, B); -} - -void LAB2RGB_real_01(real *color){ - /* convert an array[3] of LAB colors to RGB between 0 to 1, in place */ - color_rgb rgb; - color_lab lab; - - lab.l = color[0]; - lab.a = color[1]; - lab.b = color[2]; - rgb = LAB2RGB(lab); - color[0] = rgb.r/255; - color[1] = rgb.g/255; - color[2] = rgb.b/255; -} -color_rgb LAB2RGB(color_lab color){ - double y = (color.l + 16.0)/116.0; - double x = color.a/500.0 + y; - double z = y - color.b/200.0; - color_xyz white = color_xyz_init(95.047, 100.000, 108.883), xyz; - double t1, t2, t3; - if(pow(x, 3.) > XYZEpsilon){ - t1 = pow(x, 3.); - } else { - t1 = (x - 16.0/116.0)/7.787; - } - if (color.l > (XYZKappa*XYZEpsilon)){ - t2 = pow(((color.l + 16.0)/116.0), 3.); - } else { - t2 = color.l/XYZKappa; - } - if (pow(z, 3.) > XYZEpsilon){ - t3 = pow(z, 3.); - } else { - t3 = (z - 16.0/116.0)/7.787; - } - xyz = color_xyz_init(white.x*t1, white.y*t2, white.z*t3); - return XYZ2RGB(xyz); -} - -color_rgb XYZ2RGB(color_xyz color){ - double x = color.x/100.0; - double y = color.y/100.0; - double z = color.z/100.0; - double r = x*3.2406 + y*(-1.5372) + z*(-0.4986); - double g = x*(-0.9689) + y*1.8758 + z*0.0415; - double b = x*0.0557 + y*(-0.2040) + z*1.0570; - if (r > 0.0031308){ - r = 1.055*pow(r, 1/2.4) - 0.055; - } else { - r = 12.92*r; - } - if (g > 0.0031308) { - g = 1.055*pow(g, 1/2.4) - 0.055; - } else { - g = 12.92*g; - } - if (b > 0.0031308){ - b = 1.055*pow(b, 1/2.4) - 0.055; - } else { - b = 12.92*b; - } - r = MAX(0, r); - r = MIN(255, r*255); - g = MAX(0, g); - g = MIN(255, g*255); - b = MAX(0, b); - b = MIN(255, b*255); - - return color_rgb_init(r, g, b); -} - -void get_level(QuadTree qt, int *level0){ - QuadTree q; - int level_max = 0, level; - int i; - - if (!qt->qts) return; - for (i = 0; i < 1<<(qt->dim); i++){ - q = qt->qts[i]; - if (q) { - level = *level0 + 1; - get_level(q, &level); - level_max = MAX(level_max, level); - } - } - *level0 = level_max; -} - -double *lab_gamut_from_file(char *gamut_file, const char *lightness, int *n){ - /* give a list of n points in the file defining the LAB color gamut. return NULL if the mgamut file is not found. - lightness is a string of the form 0,70, or NULL. - */ - FILE *fp; - enum {buf_len = 10000}; - char buf[buf_len]; - double *xx, *x; - - int l1 = 0, l2 = 70; - - if (lightness && sscanf(lightness, "%d,%d", &l1, &l2) == 2){ - if (l1 < 0) l1 = 0; - if (l2 > 100) l2 = 100; - if (l1 > l2) l1 = l2; - } else { - l1 = 0; l2 = 70; - } - - - *n = 0; - - if (Verbose) - fprintf(stderr,"LAB color lightness range = %d,%d\n", l1, l2); - - fp = fopen(gamut_file, "r"); - if (!fp) return NULL; - while (fgets(buf, buf_len, fp)){ - (*n)++; - } - rewind(fp); - - x = malloc(sizeof(double)*3*(*n)); - xx = x; - *n = 0; - while (fgets(buf, buf_len, fp)){ - sscanf(buf,"%lf %lf %lf", xx, xx+1, xx+2); - if (*xx >= l1 && *xx <= l2){ - xx += 3; - (*n)++; - } - } - fclose(fp); - return x; -} - - -double *lab_gamut(const char *lightness, int *n){ - /* give a list of n points in the file defining the LAB color gamut. return NULL if the mgamut file is not found. - lightness is a string of the form 0,70, or NULL. - */ - double *xx, *x; - - int l1 = 0, l2 = 70, m, i; - - - if (lightness && sscanf(lightness, "%d,%d", &l1, &l2) == 2){ - if (l1 < 0) l1 = 0; - if (l2 > 100) l2 = 100; - if (l1 > l2) l1 = l2; - } else { - l1 = 0; l2 = 70; - } - - - if (Verbose) - fprintf(stderr,"LAB color lightness range = %d,%d\n", l1, l2); - - /* m = sizeof(lab_gamut_data)/sizeof(lab_gamut_data[0]); */ - m = lab_gamut_data_size; - - if (Verbose) - fprintf(stderr,"size of lab gamut = %d\n", m); - - x = malloc(sizeof(double)*3*m); - xx = x; - *n = 0; - for (i = 0; i < m; i++){ - if (lab_gamut_data[i].l >= l1 && lab_gamut_data[i].l <= l2){ - xx[0] = lab_gamut_data[i].l; - xx[1] = lab_gamut_data[i].a; - xx[2] = lab_gamut_data[i].b; - xx += 3; - (*n)++; - } - } - - return x; -} - -QuadTree lab_gamut_quadtree(char *gamut_file, const char *lightness, int max_qtree_level){ - /* read the color gamut points list in the form "x y z\n ..." and store in the octtree. return NULL if file not openable */ - int n; - // double *x = lab_gamut_from_file(gamut_file, lightness, &n); - double *x = lab_gamut(lightness, &n); - QuadTree qt; - int dim = 3; - - if (!x) return NULL; - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - - - FREE(x); - return qt; -} - -static double lab_dist(color_lab x, color_lab y){ - return sqrt((x.l-y.l)*(x.l-y.l) +(x.a-y.a)*(x.a-y.a) +(x.b-y.b)*(x.b-y.b)); -} - -static void lab_interpolate(color_lab lab1, color_lab lab2, double t, double *colors){ - colors[0] = lab1.l + t*(lab2.l - lab1.l); - colors[1] = lab1.a + t*(lab2.a - lab1.a); - colors[2] = lab1.b + t*(lab2.b - lab1.b); -} - -void color_blend_rgb2lab(char *color_list, const int maxpoints, double **colors0){ - /* give a color list of the form "#ff0000,#00ff00,...", get a list of around maxpoints - colors in an array colors0 of size [maxpoints*3] of the form {{l,a,b},...}. - If *colors0 is NULL, it will be allocated. - color_list: either "#ff0000,#00ff00,...", or "pastel" - */ - - int nc = 1, r, g, b, i, ii, jj, cdim = 3; - char *cl; - color_lab *lab; - color_rgb rgb; - double *dists, step, dist_current; - double *colors = NULL; - char *cp; - - cp = color_palettes_get(color_list); - if (cp){ - color_list = cp; - } - - if (maxpoints <= 0) return; - - cl = color_list; - while ((cl=strstr(cl, ",")) != NULL){ - cl++; nc++; - } - lab = malloc(sizeof(color_lab)*MAX(nc,1)); - - cl = color_list - 1; - nc = 0; - do { - cl++; - if (sscanf(cl,"#%02X%02X%02X", &r, &g, &b) != 3) break; - rgb.r = r; rgb.g = g; rgb.b = b; - lab[nc++] = RGB2LAB(rgb); - } while ((cl=strstr(cl, ",")) != NULL); - - dists = malloc(sizeof(double)*MAX(1, nc)); - dists[0] = 0; - for (i = 0; i < nc - 1; i++){ - dists[i+1] = lab_dist(lab[i], lab[i+1]); - } - /* dists[i] is now the summed color distance from the 0-th color to the i-th color */ - for (i = 0; i < nc - 1; i++){ - dists[i+1] += dists[i]; - } - if (Verbose) - fprintf(stderr,"sum = %f\n", dists[nc-1]); - - if (!(*colors0)){ - *colors0 = malloc(sizeof(double)*maxpoints*cdim); - } - colors = *colors0; - if (maxpoints == 1){ - colors[0] = lab[0].l; - colors[1] = lab[0].a; - colors[2] = lab[0].b; - } else { - step = dists[nc-1]/(maxpoints - 1); - ii = 0; jj = 0; dist_current = 0; - while (dists[jj] < dists[ii] + step) jj++; - - for (i = 0; i < maxpoints; i++){ - lab_interpolate(lab[ii], lab[jj], (dist_current - dists[ii])/MAX(0.001, (dists[jj] - dists[ii])), colors); - dist_current += step; - colors += cdim; - if (dist_current > dists[jj]) ii = jj; - while (jj < nc -1 && dists[jj] < dists[ii] + step) jj++; - } - } - FREE(dists); - FREE(lab); -} - - - - - -color_rgb color_blend_rgb(char *color_list, real ratio, int *flag){ - /* give a color list of the form "#ff0000,#00ff00,...", get a blend at ratio*100 percent of the position in that list and return in string color0 of the form #abcdef - If *colors0 is NULL, it will be allocated. - color_list: either "#ff0000,#00ff00,...", or "pastel" - */ - - int nc = 1, r, g, b, i, ii; - char *cl; - color_lab *lab = NULL; - color_rgb rgb; - double *dists = NULL; - char *cp; - color_lab clab; - double color[3]; - - *flag = 0; - - ratio = MAX(ratio, 0); - ratio = MIN(ratio, 1); - - cp = color_palettes_get(color_list); - if (cp){ - color_list = cp; - } - - cl = color_list; - while ((cl=strstr(cl, ",")) != NULL){ - cl++; nc++; - } - - lab = malloc(sizeof(color_lab)*MAX(nc,1)); - - cl = color_list - 1; - nc = 0; - do { - cl++; - if (sscanf(cl,"#%02X%02X%02X", &r, &g, &b) != 3) break; - rgb.r = r; rgb.g = g; rgb.b = b; - lab[nc++] = RGB2LAB(rgb); - } while ((cl=strstr(cl, ",")) != NULL); - - if (nc == 1 || ratio == 0){ - rgb = LAB2RGB(lab[0]); - goto RETURN; - } else if (nc == 0){ - fprintf(stderr, "no color\n"); - *flag = -1; - goto RETURN; - } - - dists = malloc(sizeof(double)*MAX(1, nc)); - dists[0] = 0; - for (i = 0; i < nc - 1; i++){ - dists[i+1] = lab_dist(lab[i], lab[i+1]); - } - /* dists[i] is now the summed color distance from the 0-th color to the i-th color */ - for (i = 0; i < nc - 1; i++){ - dists[i+1] += dists[i]; - } - if (dists[nc-1] == 0){/* same color in the list */ - rgb = LAB2RGB(lab[0]); - goto RETURN; - } - for (i = 0; i < nc; i++){ - dists[i] /= dists[nc - 1]; - } - - ii = 0; - while (dists[ii] < ratio) ii++; - - assert(ii < nc && ii > 0); - - lab_interpolate(lab[ii - 1], lab[ii], (ratio - dists[ii - 1])/MAX(0.001, (dists[ii] - dists[ii - 1])), color); - clab = color_lab_init(color[0], color[1], color[2]); - rgb = LAB2RGB(clab); - - - - RETURN: - if (dists) FREE(dists); - if (lab) FREE(lab); - return rgb; -} - -void color_blend_rgbstring(char *color_list, real ratio, char **color0, int *flag){ - color_rgb rgb; - - if (!(*color0)){ - *color0 = malloc(sizeof(char)*7); - } - rgb = color_blend_rgb(color_list, ratio, flag); - sprintf(*color0, "%02X%02X%02X", (int) (rgb.r), (int) (rgb.g), (int) (rgb.b)); -} diff --git a/internal/ccall/edgepaint/lab.h b/internal/ccall/edgepaint/lab.h deleted file mode 100644 index 98e2c5b..0000000 --- a/internal/ccall/edgepaint/lab.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef LAB_H -#define LAB_H - -struct rgb_struct { - double r, g, b;/* 0 to 255 */ -}; -typedef struct rgb_struct color_rgb; - -struct xyz_struct { - double x, y, z; -}; -typedef struct xyz_struct color_xyz; - -struct lab_struct { - signed char l, a, b;/* l: 0 to 100, a,b: -128 tp 128 */ -}; -typedef struct lab_struct color_lab; - -color_xyz RGB2XYZ(color_rgb color); -color_rgb XYZ2RGB(color_xyz color); -color_lab RGB2LAB(color_rgb color); -void LAB2RGB_real_01(real *color); /* convert an array[3] of LAB colors to RGB between 0 to 1, in place */ -color_rgb LAB2RGB(color_lab color); -color_rgb color_rgb_init(double r, double g, double b); -color_xyz color_xyz_init(double x, double y, double z); -color_lab color_lab_init(double l, double a, double b); -QuadTree lab_gamut_quadtree(char *gamut_file, const char *lightness, int max_qtree_level); /* construct a quadtree of the LAB gamut points */ -double *lab_gamut_from_file(char *gamut_file, const char *lightness, int *n); /* give a list of n points in the file defining the LAB color gamut */ -double *lab_gamut(const char *lightness, int *n); /* give a list of n points in the file defining the LAB color gamut */ -void color_blend_rgb2lab(char *color_list, const int maxpoints, double **colors); /* give a color list of the form "#ff0000,#00ff00,...", get a list of around maxpoints - colors in an array colors0 of size [maxpoints*3] of the form {{l,a,b},...}. - If *colors0 is NULL, it will be allocated. */ - -color_rgb color_blend_rgb(char *color_list, const real ratio, int *flag);/* blend a color list to get one color at ratio*100 percent of the list */ -void color_blend_rgbstring(char *color_list, const real ratio, char **color0, int *flag);/* blend a color list to get one color at ratio*100 percent of the list */ - -#endif diff --git a/internal/ccall/edgepaint/lab_gamut.c b/internal/ccall/edgepaint/lab_gamut.c deleted file mode 100644 index dc8616b..0000000 --- a/internal/ccall/edgepaint/lab_gamut.c +++ /dev/null @@ -1,826830 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -const char_color_lab lab_gamut_data[] = {{0,0,0}, -{1,-2,1}, -{1,-1,-1}, -{1,-1,0}, -{1,-1,1}, -{1,0,-3}, -{1,0,-2}, -{1,0,-1}, -{1,0,0}, -{1,0,1}, -{1,1,-5}, -{1,1,-4}, -{1,1,-3}, -{1,1,-2}, -{1,1,-1}, -{1,1,0}, -{1,1,1}, -{1,2,-8}, -{1,2,-7}, -{1,2,-6}, -{1,2,-5}, -{1,2,-4}, -{1,2,-3}, -{1,2,-2}, -{1,2,-1}, -{1,2,0}, -{1,2,1}, -{1,3,-10}, -{1,3,-9}, -{1,3,-8}, -{1,3,-7}, -{1,3,-6}, -{1,3,-5}, -{1,3,-4}, -{1,3,-3}, -{1,3,-2}, -{1,3,-1}, -{1,3,0}, -{1,3,1}, -{1,4,-12}, -{1,4,-11}, -{1,4,-10}, -{1,4,-9}, -{1,4,-8}, -{1,4,-7}, -{1,4,-6}, -{1,4,-5}, -{1,4,-4}, -{1,4,-3}, -{1,4,-2}, -{1,4,-1}, -{1,4,0}, -{1,4,1}, -{1,5,-14}, -{1,5,-13}, -{1,5,-12}, -{1,5,-11}, -{1,5,-10}, -{1,5,-9}, -{1,5,-8}, -{1,5,-7}, -{1,5,-6}, -{1,5,-5}, -{1,5,-4}, -{1,5,-3}, -{1,5,-2}, -{1,5,-1}, -{1,6,-16}, -{1,6,-15}, -{1,6,-14}, -{1,6,-13}, -{1,6,-12}, -{1,6,-11}, -{1,6,-10}, -{1,6,-9}, -{1,7,-18}, -{1,7,-17}, -{2,-4,3}, -{2,-3,1}, -{2,-3,2}, -{2,-3,3}, -{2,-2,-2}, -{2,-2,-1}, -{2,-2,0}, -{2,-2,1}, -{2,-2,2}, -{2,-2,3}, -{2,-1,-4}, -{2,-1,-3}, -{2,-1,-2}, -{2,-1,-1}, -{2,-1,0}, -{2,-1,1}, -{2,-1,2}, -{2,-1,3}, -{2,0,-6}, -{2,0,-5}, -{2,0,-4}, -{2,0,-3}, -{2,0,-2}, -{2,0,-1}, -{2,0,0}, -{2,0,1}, -{2,0,2}, -{2,0,3}, -{2,1,-9}, -{2,1,-8}, -{2,1,-7}, -{2,1,-6}, -{2,1,-5}, -{2,1,-4}, -{2,1,-3}, -{2,1,-2}, -{2,1,-1}, -{2,1,0}, -{2,1,1}, -{2,1,2}, -{2,1,3}, -{2,2,-11}, -{2,2,-10}, -{2,2,-9}, -{2,2,-8}, -{2,2,-7}, -{2,2,-6}, -{2,2,-5}, -{2,2,-4}, -{2,2,-3}, -{2,2,-2}, -{2,2,-1}, -{2,2,0}, -{2,2,1}, -{2,2,2}, -{2,2,3}, -{2,3,-13}, -{2,3,-12}, -{2,3,-11}, -{2,3,-10}, -{2,3,-9}, -{2,3,-8}, -{2,3,-7}, -{2,3,-6}, -{2,3,-5}, -{2,3,-4}, -{2,3,-3}, -{2,3,-2}, -{2,3,-1}, -{2,3,0}, -{2,3,1}, -{2,3,2}, -{2,3,3}, -{2,4,-15}, -{2,4,-14}, -{2,4,-13}, -{2,4,-12}, -{2,4,-11}, -{2,4,-10}, -{2,4,-9}, -{2,4,-8}, -{2,4,-7}, -{2,4,-6}, -{2,4,-5}, -{2,4,-4}, -{2,4,-3}, -{2,4,-2}, -{2,4,-1}, -{2,4,0}, -{2,4,1}, -{2,4,2}, -{2,4,3}, -{2,5,-16}, -{2,5,-15}, -{2,5,-14}, -{2,5,-13}, -{2,5,-12}, -{2,5,-11}, -{2,5,-10}, -{2,5,-9}, -{2,5,-8}, -{2,5,-7}, -{2,5,-6}, -{2,5,-5}, -{2,5,-4}, -{2,5,-3}, -{2,5,-2}, -{2,5,-1}, -{2,5,0}, -{2,5,1}, -{2,5,2}, -{2,5,3}, -{2,6,-18}, -{2,6,-17}, -{2,6,-16}, -{2,6,-15}, -{2,6,-14}, -{2,6,-13}, -{2,6,-12}, -{2,6,-11}, -{2,6,-10}, -{2,6,-9}, -{2,6,-8}, -{2,6,-7}, -{2,6,-6}, -{2,6,-5}, -{2,6,-4}, -{2,6,-3}, -{2,6,-2}, -{2,6,-1}, -{2,6,0}, -{2,6,1}, -{2,6,2}, -{2,6,3}, -{2,7,-20}, -{2,7,-19}, -{2,7,-18}, -{2,7,-17}, -{2,7,-16}, -{2,7,-15}, -{2,7,-14}, -{2,7,-13}, -{2,7,-12}, -{2,7,-11}, -{2,7,-10}, -{2,7,-9}, -{2,7,-8}, -{2,7,-7}, -{2,7,-6}, -{2,7,-5}, -{2,7,-4}, -{2,7,-3}, -{2,7,-2}, -{2,7,-1}, -{2,7,0}, -{2,7,1}, -{2,7,2}, -{2,7,3}, -{2,8,-21}, -{2,8,-20}, -{2,8,-19}, -{2,8,-18}, -{2,8,-17}, -{2,8,-16}, -{2,8,-15}, -{2,8,-14}, -{2,8,-13}, -{2,8,-12}, -{2,8,-11}, -{2,8,-10}, -{2,8,-9}, -{2,8,-8}, -{2,8,-7}, -{2,8,-6}, -{2,8,-5}, -{2,8,-4}, -{2,8,-3}, -{2,8,-2}, -{2,8,-1}, -{2,8,0}, -{2,8,1}, -{2,8,2}, -{2,8,3}, -{2,9,-22}, -{2,9,-21}, -{2,9,-20}, -{2,9,-19}, -{2,9,-18}, -{2,9,-17}, -{2,9,-16}, -{2,9,-15}, -{2,9,-14}, -{2,9,-13}, -{2,9,-12}, -{2,9,-11}, -{2,9,-10}, -{2,9,-9}, -{2,9,-8}, -{2,9,-7}, -{2,9,-6}, -{2,9,-5}, -{2,9,-4}, -{2,9,-3}, -{2,9,-2}, -{2,9,-1}, -{2,9,0}, -{2,9,1}, -{2,9,2}, -{2,9,3}, -{2,10,-24}, -{2,10,-23}, -{2,10,-22}, -{2,10,-21}, -{2,10,-20}, -{2,10,-19}, -{2,10,-18}, -{2,10,-17}, -{2,10,-16}, -{2,10,-15}, -{2,10,-14}, -{2,10,-13}, -{2,10,-12}, -{2,10,-11}, -{2,10,-10}, -{2,10,-9}, -{2,10,-8}, -{2,10,-7}, -{2,10,-6}, -{2,10,-5}, -{2,10,-4}, -{2,10,-3}, -{2,11,-25}, -{2,11,-24}, -{2,11,-23}, -{2,11,-22}, -{2,11,-21}, -{2,11,-20}, -{2,11,-19}, -{2,11,-18}, -{2,11,-17}, -{2,11,-16}, -{2,11,-15}, -{2,11,-14}, -{2,11,-13}, -{2,11,-12}, -{2,11,-11}, -{2,12,-26}, -{2,12,-25}, -{2,12,-24}, -{2,12,-23}, -{2,12,-22}, -{2,12,-21}, -{2,12,-20}, -{2,12,-19}, -{2,12,-18}, -{2,13,-27}, -{2,13,-26}, -{2,13,-25}, -{2,13,-24}, -{2,14,-28}, -{3,-6,4}, -{3,-5,2}, -{3,-5,3}, -{3,-5,4}, -{3,-4,0}, -{3,-4,1}, -{3,-4,2}, -{3,-4,3}, -{3,-4,4}, -{3,-3,-3}, -{3,-3,-2}, -{3,-3,-1}, -{3,-3,0}, -{3,-3,1}, -{3,-3,2}, -{3,-3,3}, -{3,-3,4}, -{3,-2,-5}, -{3,-2,-4}, -{3,-2,-3}, -{3,-2,-2}, -{3,-2,-1}, -{3,-2,0}, -{3,-2,1}, -{3,-2,2}, -{3,-2,3}, -{3,-2,4}, -{3,-1,-7}, -{3,-1,-6}, -{3,-1,-5}, -{3,-1,-4}, -{3,-1,-3}, -{3,-1,-2}, -{3,-1,-1}, -{3,-1,0}, -{3,-1,1}, -{3,-1,2}, -{3,-1,3}, -{3,-1,4}, -{3,0,-9}, -{3,0,-8}, -{3,0,-7}, -{3,0,-6}, -{3,0,-5}, -{3,0,-4}, -{3,0,-3}, -{3,0,-2}, -{3,0,-1}, -{3,0,0}, -{3,0,1}, -{3,0,2}, -{3,0,3}, -{3,0,4}, -{3,1,-11}, -{3,1,-10}, -{3,1,-9}, -{3,1,-8}, -{3,1,-7}, -{3,1,-6}, -{3,1,-5}, -{3,1,-4}, -{3,1,-3}, -{3,1,-2}, -{3,1,-1}, -{3,1,0}, -{3,1,1}, -{3,1,2}, -{3,1,3}, -{3,1,4}, -{3,2,-13}, -{3,2,-12}, -{3,2,-11}, -{3,2,-10}, -{3,2,-9}, -{3,2,-8}, -{3,2,-7}, -{3,2,-6}, -{3,2,-5}, -{3,2,-4}, -{3,2,-3}, -{3,2,-2}, -{3,2,-1}, -{3,2,0}, -{3,2,1}, -{3,2,2}, -{3,2,3}, -{3,2,4}, -{3,3,-15}, -{3,3,-14}, -{3,3,-13}, -{3,3,-12}, -{3,3,-11}, -{3,3,-10}, -{3,3,-9}, -{3,3,-8}, -{3,3,-7}, -{3,3,-6}, -{3,3,-5}, -{3,3,-4}, -{3,3,-3}, -{3,3,-2}, -{3,3,-1}, -{3,3,0}, -{3,3,1}, -{3,3,2}, -{3,3,3}, -{3,3,4}, -{3,4,-17}, -{3,4,-16}, -{3,4,-15}, -{3,4,-14}, -{3,4,-13}, -{3,4,-12}, -{3,4,-11}, -{3,4,-10}, -{3,4,-9}, -{3,4,-8}, -{3,4,-7}, -{3,4,-6}, -{3,4,-5}, -{3,4,-4}, -{3,4,-3}, -{3,4,-2}, -{3,4,-1}, -{3,4,0}, -{3,4,1}, -{3,4,2}, -{3,4,3}, -{3,4,4}, -{3,5,-18}, -{3,5,-17}, -{3,5,-16}, -{3,5,-15}, -{3,5,-14}, -{3,5,-13}, -{3,5,-12}, -{3,5,-11}, -{3,5,-10}, -{3,5,-9}, -{3,5,-8}, -{3,5,-7}, -{3,5,-6}, -{3,5,-5}, -{3,5,-4}, -{3,5,-3}, -{3,5,-2}, -{3,5,-1}, -{3,5,0}, -{3,5,1}, -{3,5,2}, -{3,5,3}, -{3,5,4}, -{3,6,-20}, -{3,6,-19}, -{3,6,-18}, -{3,6,-17}, -{3,6,-16}, -{3,6,-15}, -{3,6,-14}, -{3,6,-13}, -{3,6,-12}, -{3,6,-11}, -{3,6,-10}, -{3,6,-9}, -{3,6,-8}, -{3,6,-7}, -{3,6,-6}, -{3,6,-5}, -{3,6,-4}, -{3,6,-3}, -{3,6,-2}, -{3,6,-1}, -{3,6,0}, -{3,6,1}, -{3,6,2}, -{3,6,3}, -{3,6,4}, -{3,7,-21}, -{3,7,-20}, -{3,7,-19}, -{3,7,-18}, -{3,7,-17}, -{3,7,-16}, -{3,7,-15}, -{3,7,-14}, -{3,7,-13}, -{3,7,-12}, -{3,7,-11}, -{3,7,-10}, -{3,7,-9}, -{3,7,-8}, -{3,7,-7}, -{3,7,-6}, -{3,7,-5}, -{3,7,-4}, -{3,7,-3}, -{3,7,-2}, -{3,7,-1}, -{3,7,0}, -{3,7,1}, -{3,7,2}, -{3,7,3}, -{3,7,4}, -{3,8,-22}, -{3,8,-21}, -{3,8,-20}, -{3,8,-19}, -{3,8,-18}, -{3,8,-17}, -{3,8,-16}, -{3,8,-15}, -{3,8,-14}, -{3,8,-13}, -{3,8,-12}, -{3,8,-11}, -{3,8,-10}, -{3,8,-9}, -{3,8,-8}, -{3,8,-7}, -{3,8,-6}, -{3,8,-5}, -{3,8,-4}, -{3,8,-3}, -{3,8,-2}, -{3,8,-1}, -{3,8,0}, -{3,8,1}, -{3,8,2}, -{3,8,3}, -{3,8,4}, -{3,9,-23}, -{3,9,-22}, -{3,9,-21}, -{3,9,-20}, -{3,9,-19}, -{3,9,-18}, -{3,9,-17}, -{3,9,-16}, -{3,9,-15}, -{3,9,-14}, -{3,9,-13}, -{3,9,-12}, -{3,9,-11}, -{3,9,-10}, -{3,9,-9}, -{3,9,-8}, -{3,9,-7}, -{3,9,-6}, -{3,9,-5}, -{3,9,-4}, -{3,9,-3}, -{3,9,-2}, -{3,9,-1}, -{3,9,0}, -{3,9,1}, -{3,9,2}, -{3,9,3}, -{3,9,4}, -{3,10,-25}, -{3,10,-24}, -{3,10,-23}, -{3,10,-22}, -{3,10,-21}, -{3,10,-20}, -{3,10,-19}, -{3,10,-18}, -{3,10,-17}, -{3,10,-16}, -{3,10,-15}, -{3,10,-14}, -{3,10,-13}, -{3,10,-12}, -{3,10,-11}, -{3,10,-10}, -{3,10,-9}, -{3,10,-8}, -{3,10,-7}, -{3,10,-6}, -{3,10,-5}, -{3,10,-4}, -{3,10,-3}, -{3,10,-2}, -{3,10,-1}, -{3,10,0}, -{3,10,1}, -{3,10,2}, -{3,10,3}, -{3,10,4}, -{3,11,-26}, -{3,11,-25}, -{3,11,-24}, -{3,11,-23}, -{3,11,-22}, -{3,11,-21}, -{3,11,-20}, -{3,11,-19}, -{3,11,-18}, -{3,11,-17}, -{3,11,-16}, -{3,11,-15}, -{3,11,-14}, -{3,11,-13}, -{3,11,-12}, -{3,11,-11}, -{3,11,-10}, -{3,11,-9}, -{3,11,-8}, -{3,11,-7}, -{3,11,-6}, -{3,11,-5}, -{3,11,-4}, -{3,11,-3}, -{3,11,-2}, -{3,11,-1}, -{3,11,0}, -{3,11,1}, -{3,11,2}, -{3,11,3}, -{3,11,4}, -{3,12,-27}, -{3,12,-26}, -{3,12,-25}, -{3,12,-24}, -{3,12,-23}, -{3,12,-22}, -{3,12,-21}, -{3,12,-20}, -{3,12,-19}, -{3,12,-18}, -{3,12,-17}, -{3,12,-16}, -{3,12,-15}, -{3,12,-14}, -{3,12,-13}, -{3,12,-12}, -{3,12,-11}, -{3,12,-10}, -{3,12,-9}, -{3,12,-8}, -{3,12,-7}, -{3,12,-6}, -{3,12,-5}, -{3,12,-4}, -{3,12,-3}, -{3,12,-2}, -{3,12,-1}, -{3,12,0}, -{3,12,1}, -{3,12,2}, -{3,12,3}, -{3,12,4}, -{3,13,-28}, -{3,13,-27}, -{3,13,-26}, -{3,13,-25}, -{3,13,-24}, -{3,13,-23}, -{3,13,-22}, -{3,13,-21}, -{3,13,-20}, -{3,13,-19}, -{3,13,-18}, -{3,13,-17}, -{3,13,-16}, -{3,13,-15}, -{3,13,-14}, -{3,13,-13}, -{3,13,-12}, -{3,13,-11}, -{3,13,-10}, -{3,13,-9}, -{3,13,-8}, -{3,13,-7}, -{3,13,-6}, -{3,13,-5}, -{3,13,-4}, -{3,13,-3}, -{3,13,-2}, -{3,13,-1}, -{3,13,0}, -{3,13,1}, -{3,13,2}, -{3,13,3}, -{3,13,4}, -{3,14,-29}, -{3,14,-28}, -{3,14,-27}, -{3,14,-26}, -{3,14,-25}, -{3,14,-24}, -{3,14,-23}, -{3,14,-22}, -{3,14,-21}, -{3,14,-20}, -{3,14,-19}, -{3,14,-18}, -{3,14,-17}, -{3,14,-16}, -{3,14,-15}, -{3,14,-14}, -{3,14,-13}, -{3,14,-12}, -{3,14,-11}, -{3,14,-10}, -{3,14,-9}, -{3,14,-8}, -{3,14,-7}, -{3,14,-6}, -{3,14,-5}, -{3,14,-4}, -{3,14,-3}, -{3,14,-2}, -{3,14,-1}, -{3,14,0}, -{3,14,1}, -{3,14,2}, -{3,15,-30}, -{3,15,-29}, -{3,15,-28}, -{3,15,-27}, -{3,15,-26}, -{3,15,-25}, -{3,15,-24}, -{3,15,-23}, -{3,15,-22}, -{3,15,-21}, -{3,15,-20}, -{3,15,-19}, -{3,15,-18}, -{3,15,-17}, -{3,15,-16}, -{3,15,-15}, -{3,15,-14}, -{3,15,-13}, -{3,15,-12}, -{3,15,-11}, -{3,15,-10}, -{3,15,-9}, -{3,15,-8}, -{3,15,-7}, -{3,15,-6}, -{3,16,-31}, -{3,16,-30}, -{3,16,-29}, -{3,16,-28}, -{3,16,-27}, -{3,16,-26}, -{3,16,-25}, -{3,16,-24}, -{3,16,-23}, -{3,16,-22}, -{3,16,-21}, -{3,16,-20}, -{3,16,-19}, -{3,16,-18}, -{3,16,-17}, -{3,16,-16}, -{3,16,-15}, -{3,16,-14}, -{3,17,-32}, -{3,17,-31}, -{3,17,-30}, -{3,17,-29}, -{3,17,-28}, -{3,17,-27}, -{3,17,-26}, -{3,17,-25}, -{3,17,-24}, -{3,17,-23}, -{3,17,-22}, -{3,17,-21}, -{3,17,-20}, -{3,17,-19}, -{3,18,-33}, -{3,18,-32}, -{3,18,-31}, -{3,18,-30}, -{3,18,-29}, -{3,18,-28}, -{3,18,-27}, -{3,18,-26}, -{3,18,-25}, -{3,18,-24}, -{3,19,-34}, -{3,19,-33}, -{3,19,-32}, -{3,19,-31}, -{3,19,-30}, -{3,19,-29}, -{3,19,-28}, -{3,20,-34}, -{3,20,-33}, -{3,20,-32}, -{3,21,-35}, -{4,-7,3}, -{4,-7,4}, -{4,-7,5}, -{4,-7,6}, -{4,-6,1}, -{4,-6,2}, -{4,-6,3}, -{4,-6,4}, -{4,-6,5}, -{4,-6,6}, -{4,-5,-1}, -{4,-5,0}, -{4,-5,1}, -{4,-5,2}, -{4,-5,3}, -{4,-5,4}, -{4,-5,5}, -{4,-5,6}, -{4,-4,-4}, -{4,-4,-3}, -{4,-4,-2}, -{4,-4,-1}, -{4,-4,0}, -{4,-4,1}, -{4,-4,2}, -{4,-4,3}, -{4,-4,4}, -{4,-4,5}, -{4,-4,6}, -{4,-3,-6}, -{4,-3,-5}, -{4,-3,-4}, -{4,-3,-3}, -{4,-3,-2}, -{4,-3,-1}, -{4,-3,0}, -{4,-3,1}, -{4,-3,2}, -{4,-3,3}, -{4,-3,4}, -{4,-3,5}, -{4,-3,6}, -{4,-2,-8}, -{4,-2,-7}, -{4,-2,-6}, -{4,-2,-5}, -{4,-2,-4}, -{4,-2,-3}, -{4,-2,-2}, -{4,-2,-1}, -{4,-2,0}, -{4,-2,1}, -{4,-2,2}, -{4,-2,3}, -{4,-2,4}, -{4,-2,5}, -{4,-2,6}, -{4,-1,-10}, -{4,-1,-9}, -{4,-1,-8}, -{4,-1,-7}, -{4,-1,-6}, -{4,-1,-5}, -{4,-1,-4}, -{4,-1,-3}, -{4,-1,-2}, -{4,-1,-1}, -{4,-1,0}, -{4,-1,1}, -{4,-1,2}, -{4,-1,3}, -{4,-1,4}, -{4,-1,5}, -{4,-1,6}, -{4,0,-12}, -{4,0,-11}, -{4,0,-10}, -{4,0,-9}, -{4,0,-8}, -{4,0,-7}, -{4,0,-6}, -{4,0,-5}, -{4,0,-4}, -{4,0,-3}, -{4,0,-2}, -{4,0,-1}, -{4,0,0}, -{4,0,1}, -{4,0,2}, -{4,0,3}, -{4,0,4}, -{4,0,5}, -{4,0,6}, -{4,1,-14}, -{4,1,-13}, -{4,1,-12}, -{4,1,-11}, -{4,1,-10}, -{4,1,-9}, -{4,1,-8}, -{4,1,-7}, -{4,1,-6}, -{4,1,-5}, -{4,1,-4}, -{4,1,-3}, -{4,1,-2}, -{4,1,-1}, -{4,1,0}, -{4,1,1}, -{4,1,2}, -{4,1,3}, -{4,1,4}, -{4,1,5}, -{4,1,6}, -{4,2,-15}, -{4,2,-14}, -{4,2,-13}, -{4,2,-12}, -{4,2,-11}, -{4,2,-10}, -{4,2,-9}, -{4,2,-8}, -{4,2,-7}, -{4,2,-6}, -{4,2,-5}, -{4,2,-4}, -{4,2,-3}, -{4,2,-2}, -{4,2,-1}, -{4,2,0}, -{4,2,1}, -{4,2,2}, -{4,2,3}, -{4,2,4}, -{4,2,5}, -{4,2,6}, -{4,3,-17}, -{4,3,-16}, -{4,3,-15}, -{4,3,-14}, -{4,3,-13}, -{4,3,-12}, -{4,3,-11}, -{4,3,-10}, -{4,3,-9}, -{4,3,-8}, -{4,3,-7}, -{4,3,-6}, -{4,3,-5}, -{4,3,-4}, -{4,3,-3}, -{4,3,-2}, -{4,3,-1}, -{4,3,0}, -{4,3,1}, -{4,3,2}, -{4,3,3}, -{4,3,4}, -{4,3,5}, -{4,3,6}, -{4,4,-18}, -{4,4,-17}, -{4,4,-16}, -{4,4,-15}, -{4,4,-14}, -{4,4,-13}, -{4,4,-12}, -{4,4,-11}, -{4,4,-10}, -{4,4,-9}, -{4,4,-8}, -{4,4,-7}, -{4,4,-6}, -{4,4,-5}, -{4,4,-4}, -{4,4,-3}, -{4,4,-2}, -{4,4,-1}, -{4,4,0}, -{4,4,1}, -{4,4,2}, -{4,4,3}, -{4,4,4}, -{4,4,5}, -{4,4,6}, -{4,5,-19}, -{4,5,-18}, -{4,5,-17}, -{4,5,-16}, -{4,5,-15}, -{4,5,-14}, -{4,5,-13}, -{4,5,-12}, -{4,5,-11}, -{4,5,-10}, -{4,5,-9}, -{4,5,-8}, -{4,5,-7}, -{4,5,-6}, -{4,5,-5}, -{4,5,-4}, -{4,5,-3}, -{4,5,-2}, -{4,5,-1}, -{4,5,0}, -{4,5,1}, -{4,5,2}, -{4,5,3}, -{4,5,4}, -{4,5,5}, -{4,5,6}, -{4,6,-21}, -{4,6,-20}, -{4,6,-19}, -{4,6,-18}, -{4,6,-17}, -{4,6,-16}, -{4,6,-15}, -{4,6,-14}, -{4,6,-13}, -{4,6,-12}, -{4,6,-11}, -{4,6,-10}, -{4,6,-9}, -{4,6,-8}, -{4,6,-7}, -{4,6,-6}, -{4,6,-5}, -{4,6,-4}, -{4,6,-3}, -{4,6,-2}, -{4,6,-1}, -{4,6,0}, -{4,6,1}, -{4,6,2}, -{4,6,3}, -{4,6,4}, -{4,6,5}, -{4,6,6}, -{4,7,-22}, -{4,7,-21}, -{4,7,-20}, -{4,7,-19}, -{4,7,-18}, -{4,7,-17}, -{4,7,-16}, -{4,7,-15}, -{4,7,-14}, -{4,7,-13}, -{4,7,-12}, -{4,7,-11}, -{4,7,-10}, -{4,7,-9}, -{4,7,-8}, -{4,7,-7}, -{4,7,-6}, -{4,7,-5}, -{4,7,-4}, -{4,7,-3}, -{4,7,-2}, -{4,7,-1}, -{4,7,0}, -{4,7,1}, -{4,7,2}, -{4,7,3}, -{4,7,4}, -{4,7,5}, -{4,7,6}, -{4,8,-23}, -{4,8,-22}, -{4,8,-21}, -{4,8,-20}, -{4,8,-19}, -{4,8,-18}, -{4,8,-17}, -{4,8,-16}, -{4,8,-15}, -{4,8,-14}, -{4,8,-13}, -{4,8,-12}, -{4,8,-11}, -{4,8,-10}, -{4,8,-9}, -{4,8,-8}, -{4,8,-7}, -{4,8,-6}, -{4,8,-5}, -{4,8,-4}, -{4,8,-3}, -{4,8,-2}, -{4,8,-1}, -{4,8,0}, -{4,8,1}, -{4,8,2}, -{4,8,3}, -{4,8,4}, -{4,8,5}, -{4,8,6}, -{4,9,-24}, -{4,9,-23}, -{4,9,-22}, -{4,9,-21}, -{4,9,-20}, -{4,9,-19}, -{4,9,-18}, -{4,9,-17}, -{4,9,-16}, -{4,9,-15}, -{4,9,-14}, -{4,9,-13}, -{4,9,-12}, -{4,9,-11}, -{4,9,-10}, -{4,9,-9}, -{4,9,-8}, -{4,9,-7}, -{4,9,-6}, -{4,9,-5}, -{4,9,-4}, -{4,9,-3}, -{4,9,-2}, -{4,9,-1}, -{4,9,0}, -{4,9,1}, -{4,9,2}, -{4,9,3}, -{4,9,4}, -{4,9,5}, -{4,9,6}, -{4,10,-25}, -{4,10,-24}, -{4,10,-23}, -{4,10,-22}, -{4,10,-21}, -{4,10,-20}, -{4,10,-19}, -{4,10,-18}, -{4,10,-17}, -{4,10,-16}, -{4,10,-15}, -{4,10,-14}, -{4,10,-13}, -{4,10,-12}, -{4,10,-11}, -{4,10,-10}, -{4,10,-9}, -{4,10,-8}, -{4,10,-7}, -{4,10,-6}, -{4,10,-5}, -{4,10,-4}, -{4,10,-3}, -{4,10,-2}, -{4,10,-1}, -{4,10,0}, -{4,10,1}, -{4,10,2}, -{4,10,3}, -{4,10,4}, -{4,10,5}, -{4,10,6}, -{4,11,-26}, -{4,11,-25}, -{4,11,-24}, -{4,11,-23}, -{4,11,-22}, -{4,11,-21}, -{4,11,-20}, -{4,11,-19}, -{4,11,-18}, -{4,11,-17}, -{4,11,-16}, -{4,11,-15}, -{4,11,-14}, -{4,11,-13}, -{4,11,-12}, -{4,11,-11}, -{4,11,-10}, -{4,11,-9}, -{4,11,-8}, -{4,11,-7}, -{4,11,-6}, -{4,11,-5}, -{4,11,-4}, -{4,11,-3}, -{4,11,-2}, -{4,11,-1}, -{4,11,0}, -{4,11,1}, -{4,11,2}, -{4,11,3}, -{4,11,4}, -{4,11,5}, -{4,11,6}, -{4,12,-27}, -{4,12,-26}, -{4,12,-25}, -{4,12,-24}, -{4,12,-23}, -{4,12,-22}, -{4,12,-21}, -{4,12,-20}, -{4,12,-19}, -{4,12,-18}, -{4,12,-17}, -{4,12,-16}, -{4,12,-15}, -{4,12,-14}, -{4,12,-13}, -{4,12,-12}, -{4,12,-11}, -{4,12,-10}, -{4,12,-9}, -{4,12,-8}, -{4,12,-7}, -{4,12,-6}, -{4,12,-5}, -{4,12,-4}, -{4,12,-3}, -{4,12,-2}, -{4,12,-1}, -{4,12,0}, -{4,12,1}, -{4,12,2}, -{4,12,3}, -{4,12,4}, -{4,12,5}, -{4,12,6}, -{4,13,-28}, -{4,13,-27}, -{4,13,-26}, -{4,13,-25}, -{4,13,-24}, -{4,13,-23}, -{4,13,-22}, -{4,13,-21}, -{4,13,-20}, -{4,13,-19}, -{4,13,-18}, -{4,13,-17}, -{4,13,-16}, -{4,13,-15}, -{4,13,-14}, -{4,13,-13}, -{4,13,-12}, -{4,13,-11}, -{4,13,-10}, -{4,13,-9}, -{4,13,-8}, -{4,13,-7}, -{4,13,-6}, -{4,13,-5}, -{4,13,-4}, -{4,13,-3}, -{4,13,-2}, -{4,13,-1}, -{4,13,0}, -{4,13,1}, -{4,13,2}, -{4,13,3}, -{4,13,4}, -{4,13,5}, -{4,13,6}, -{4,14,-29}, -{4,14,-28}, -{4,14,-27}, -{4,14,-26}, -{4,14,-25}, -{4,14,-24}, -{4,14,-23}, -{4,14,-22}, -{4,14,-21}, -{4,14,-20}, -{4,14,-19}, -{4,14,-18}, -{4,14,-17}, -{4,14,-16}, -{4,14,-15}, -{4,14,-14}, -{4,14,-13}, -{4,14,-12}, -{4,14,-11}, -{4,14,-10}, -{4,14,-9}, -{4,14,-8}, -{4,14,-7}, -{4,14,-6}, -{4,14,-5}, -{4,14,-4}, -{4,14,-3}, -{4,14,-2}, -{4,14,-1}, -{4,14,0}, -{4,14,1}, -{4,14,2}, -{4,14,3}, -{4,14,4}, -{4,14,5}, -{4,14,6}, -{4,15,-30}, -{4,15,-29}, -{4,15,-28}, -{4,15,-27}, -{4,15,-26}, -{4,15,-25}, -{4,15,-24}, -{4,15,-23}, -{4,15,-22}, -{4,15,-21}, -{4,15,-20}, -{4,15,-19}, -{4,15,-18}, -{4,15,-17}, -{4,15,-16}, -{4,15,-15}, -{4,15,-14}, -{4,15,-13}, -{4,15,-12}, -{4,15,-11}, -{4,15,-10}, -{4,15,-9}, -{4,15,-8}, -{4,15,-7}, -{4,15,-6}, -{4,15,-5}, -{4,15,-4}, -{4,15,-3}, -{4,15,-2}, -{4,15,-1}, -{4,15,0}, -{4,15,1}, -{4,15,2}, -{4,15,3}, -{4,15,4}, -{4,15,5}, -{4,15,6}, -{4,16,-31}, -{4,16,-30}, -{4,16,-29}, -{4,16,-28}, -{4,16,-27}, -{4,16,-26}, -{4,16,-25}, -{4,16,-24}, -{4,16,-23}, -{4,16,-22}, -{4,16,-21}, -{4,16,-20}, -{4,16,-19}, -{4,16,-18}, -{4,16,-17}, -{4,16,-16}, -{4,16,-15}, -{4,16,-14}, -{4,16,-13}, -{4,16,-12}, -{4,16,-11}, -{4,16,-10}, -{4,16,-9}, -{4,16,-8}, -{4,16,-7}, -{4,16,-6}, -{4,16,-5}, -{4,16,-4}, -{4,16,-3}, -{4,16,-2}, -{4,16,-1}, -{4,16,0}, -{4,16,1}, -{4,16,2}, -{4,16,3}, -{4,16,4}, -{4,16,5}, -{4,16,6}, -{4,17,-32}, -{4,17,-31}, -{4,17,-30}, -{4,17,-29}, -{4,17,-28}, -{4,17,-27}, -{4,17,-26}, -{4,17,-25}, -{4,17,-24}, -{4,17,-23}, -{4,17,-22}, -{4,17,-21}, -{4,17,-20}, -{4,17,-19}, -{4,17,-18}, -{4,17,-17}, -{4,17,-16}, -{4,17,-15}, -{4,17,-14}, -{4,17,-13}, -{4,17,-12}, -{4,17,-11}, -{4,17,-10}, -{4,17,-9}, -{4,17,-8}, -{4,17,-7}, -{4,17,-6}, -{4,17,-5}, -{4,17,-4}, -{4,17,-3}, -{4,17,-2}, -{4,17,-1}, -{4,17,0}, -{4,17,1}, -{4,17,2}, -{4,17,3}, -{4,17,4}, -{4,17,5}, -{4,17,6}, -{4,18,-33}, -{4,18,-32}, -{4,18,-31}, -{4,18,-30}, -{4,18,-29}, -{4,18,-28}, -{4,18,-27}, -{4,18,-26}, -{4,18,-25}, -{4,18,-24}, -{4,18,-23}, -{4,18,-22}, -{4,18,-21}, -{4,18,-20}, -{4,18,-19}, -{4,18,-18}, -{4,18,-17}, -{4,18,-16}, -{4,18,-15}, -{4,18,-14}, -{4,18,-13}, -{4,18,-12}, -{4,18,-11}, -{4,18,-10}, -{4,18,-9}, -{4,18,-8}, -{4,18,-7}, -{4,18,-6}, -{4,18,-5}, -{4,18,-4}, -{4,18,-3}, -{4,18,-2}, -{4,18,-1}, -{4,18,0}, -{4,18,1}, -{4,18,2}, -{4,18,3}, -{4,18,4}, -{4,18,5}, -{4,18,6}, -{4,19,-34}, -{4,19,-33}, -{4,19,-32}, -{4,19,-31}, -{4,19,-30}, -{4,19,-29}, -{4,19,-28}, -{4,19,-27}, -{4,19,-26}, -{4,19,-25}, -{4,19,-24}, -{4,19,-23}, -{4,19,-22}, -{4,19,-21}, -{4,19,-20}, -{4,19,-19}, -{4,19,-18}, -{4,19,-17}, -{4,19,-16}, -{4,19,-15}, -{4,19,-14}, -{4,19,-13}, -{4,19,-12}, -{4,19,-11}, -{4,19,-10}, -{4,19,-9}, -{4,19,-8}, -{4,19,-7}, -{4,19,-6}, -{4,19,-5}, -{4,19,-4}, -{4,19,-3}, -{4,19,-2}, -{4,19,-1}, -{4,20,-35}, -{4,20,-34}, -{4,20,-33}, -{4,20,-32}, -{4,20,-31}, -{4,20,-30}, -{4,20,-29}, -{4,20,-28}, -{4,20,-27}, -{4,20,-26}, -{4,20,-25}, -{4,20,-24}, -{4,20,-23}, -{4,20,-22}, -{4,20,-21}, -{4,20,-20}, -{4,20,-19}, -{4,20,-18}, -{4,20,-17}, -{4,20,-16}, -{4,20,-15}, -{4,20,-14}, -{4,20,-13}, -{4,20,-12}, -{4,20,-11}, -{4,20,-10}, -{4,20,-9}, -{4,21,-35}, -{4,21,-34}, -{4,21,-33}, -{4,21,-32}, -{4,21,-31}, -{4,21,-30}, -{4,21,-29}, -{4,21,-28}, -{4,21,-27}, -{4,21,-26}, -{4,21,-25}, -{4,21,-24}, -{4,21,-23}, -{4,21,-22}, -{4,21,-21}, -{4,21,-20}, -{4,21,-19}, -{4,21,-18}, -{4,21,-17}, -{4,21,-16}, -{4,22,-36}, -{4,22,-35}, -{4,22,-34}, -{4,22,-33}, -{4,22,-32}, -{4,22,-31}, -{4,22,-30}, -{4,22,-29}, -{4,22,-28}, -{4,22,-27}, -{4,22,-26}, -{4,22,-25}, -{4,22,-24}, -{4,22,-23}, -{4,22,-22}, -{4,22,-21}, -{4,23,-37}, -{4,23,-36}, -{4,23,-35}, -{4,23,-34}, -{4,23,-33}, -{4,23,-32}, -{4,23,-31}, -{4,23,-30}, -{4,23,-29}, -{4,23,-28}, -{4,23,-27}, -{4,23,-26}, -{4,24,-38}, -{4,24,-37}, -{4,24,-36}, -{4,24,-35}, -{4,24,-34}, -{4,24,-33}, -{4,24,-32}, -{4,24,-31}, -{4,24,-30}, -{4,25,-39}, -{4,25,-38}, -{4,25,-37}, -{4,25,-36}, -{4,25,-35}, -{4,25,-34}, -{4,26,-40}, -{4,26,-39}, -{4,26,-38}, -{4,26,-37}, -{4,27,-40}, -{5,-10,7}, -{5,-9,5}, -{5,-9,6}, -{5,-9,7}, -{5,-8,2}, -{5,-8,3}, -{5,-8,4}, -{5,-8,5}, -{5,-8,6}, -{5,-8,7}, -{5,-7,0}, -{5,-7,1}, -{5,-7,2}, -{5,-7,3}, -{5,-7,4}, -{5,-7,5}, -{5,-7,6}, -{5,-7,7}, -{5,-6,-2}, -{5,-6,-1}, -{5,-6,0}, -{5,-6,1}, -{5,-6,2}, -{5,-6,3}, -{5,-6,4}, -{5,-6,5}, -{5,-6,6}, -{5,-6,7}, -{5,-5,-4}, -{5,-5,-3}, -{5,-5,-2}, -{5,-5,-1}, -{5,-5,0}, -{5,-5,1}, -{5,-5,2}, -{5,-5,3}, -{5,-5,4}, -{5,-5,5}, -{5,-5,6}, -{5,-5,7}, -{5,-4,-7}, -{5,-4,-6}, -{5,-4,-5}, -{5,-4,-4}, -{5,-4,-3}, -{5,-4,-2}, -{5,-4,-1}, -{5,-4,0}, -{5,-4,1}, -{5,-4,2}, -{5,-4,3}, -{5,-4,4}, -{5,-4,5}, -{5,-4,6}, -{5,-4,7}, -{5,-3,-9}, -{5,-3,-8}, -{5,-3,-7}, -{5,-3,-6}, -{5,-3,-5}, -{5,-3,-4}, -{5,-3,-3}, -{5,-3,-2}, -{5,-3,-1}, -{5,-3,0}, -{5,-3,1}, -{5,-3,2}, -{5,-3,3}, -{5,-3,4}, -{5,-3,5}, -{5,-3,6}, -{5,-3,7}, -{5,-2,-10}, -{5,-2,-9}, -{5,-2,-8}, -{5,-2,-7}, -{5,-2,-6}, -{5,-2,-5}, -{5,-2,-4}, -{5,-2,-3}, -{5,-2,-2}, -{5,-2,-1}, -{5,-2,0}, -{5,-2,1}, -{5,-2,2}, -{5,-2,3}, -{5,-2,4}, -{5,-2,5}, -{5,-2,6}, -{5,-2,7}, -{5,-1,-12}, -{5,-1,-11}, -{5,-1,-10}, -{5,-1,-9}, -{5,-1,-8}, -{5,-1,-7}, -{5,-1,-6}, -{5,-1,-5}, -{5,-1,-4}, -{5,-1,-3}, -{5,-1,-2}, -{5,-1,-1}, -{5,-1,0}, -{5,-1,1}, -{5,-1,2}, -{5,-1,3}, -{5,-1,4}, -{5,-1,5}, -{5,-1,6}, -{5,-1,7}, -{5,0,-14}, -{5,0,-13}, -{5,0,-12}, -{5,0,-11}, -{5,0,-10}, -{5,0,-9}, -{5,0,-8}, -{5,0,-7}, -{5,0,-6}, -{5,0,-5}, -{5,0,-4}, -{5,0,-3}, -{5,0,-2}, -{5,0,-1}, -{5,0,0}, -{5,0,1}, -{5,0,2}, -{5,0,3}, -{5,0,4}, -{5,0,5}, -{5,0,6}, -{5,0,7}, -{5,1,-15}, -{5,1,-14}, -{5,1,-13}, -{5,1,-12}, -{5,1,-11}, -{5,1,-10}, -{5,1,-9}, -{5,1,-8}, -{5,1,-7}, -{5,1,-6}, -{5,1,-5}, -{5,1,-4}, -{5,1,-3}, -{5,1,-2}, -{5,1,-1}, -{5,1,0}, -{5,1,1}, -{5,1,2}, -{5,1,3}, -{5,1,4}, -{5,1,5}, -{5,1,6}, -{5,1,7}, -{5,2,-17}, -{5,2,-16}, -{5,2,-15}, -{5,2,-14}, -{5,2,-13}, -{5,2,-12}, -{5,2,-11}, -{5,2,-10}, -{5,2,-9}, -{5,2,-8}, -{5,2,-7}, -{5,2,-6}, -{5,2,-5}, -{5,2,-4}, -{5,2,-3}, -{5,2,-2}, -{5,2,-1}, -{5,2,0}, -{5,2,1}, -{5,2,2}, -{5,2,3}, -{5,2,4}, -{5,2,5}, -{5,2,6}, -{5,2,7}, -{5,3,-18}, -{5,3,-17}, -{5,3,-16}, -{5,3,-15}, -{5,3,-14}, -{5,3,-13}, -{5,3,-12}, -{5,3,-11}, -{5,3,-10}, -{5,3,-9}, -{5,3,-8}, -{5,3,-7}, -{5,3,-6}, -{5,3,-5}, -{5,3,-4}, -{5,3,-3}, -{5,3,-2}, -{5,3,-1}, -{5,3,0}, -{5,3,1}, -{5,3,2}, -{5,3,3}, -{5,3,4}, -{5,3,5}, -{5,3,6}, -{5,3,7}, -{5,4,-19}, -{5,4,-18}, -{5,4,-17}, -{5,4,-16}, -{5,4,-15}, -{5,4,-14}, -{5,4,-13}, -{5,4,-12}, -{5,4,-11}, -{5,4,-10}, -{5,4,-9}, -{5,4,-8}, -{5,4,-7}, -{5,4,-6}, -{5,4,-5}, -{5,4,-4}, -{5,4,-3}, -{5,4,-2}, -{5,4,-1}, -{5,4,0}, -{5,4,1}, -{5,4,2}, -{5,4,3}, -{5,4,4}, -{5,4,5}, -{5,4,6}, -{5,4,7}, -{5,5,-20}, -{5,5,-19}, -{5,5,-18}, -{5,5,-17}, -{5,5,-16}, -{5,5,-15}, -{5,5,-14}, -{5,5,-13}, -{5,5,-12}, -{5,5,-11}, -{5,5,-10}, -{5,5,-9}, -{5,5,-8}, -{5,5,-7}, -{5,5,-6}, -{5,5,-5}, -{5,5,-4}, -{5,5,-3}, -{5,5,-2}, -{5,5,-1}, -{5,5,0}, -{5,5,1}, -{5,5,2}, -{5,5,3}, -{5,5,4}, -{5,5,5}, -{5,5,6}, -{5,5,7}, -{5,6,-22}, -{5,6,-21}, -{5,6,-20}, -{5,6,-19}, -{5,6,-18}, -{5,6,-17}, -{5,6,-16}, -{5,6,-15}, -{5,6,-14}, -{5,6,-13}, -{5,6,-12}, -{5,6,-11}, -{5,6,-10}, -{5,6,-9}, -{5,6,-8}, -{5,6,-7}, -{5,6,-6}, -{5,6,-5}, -{5,6,-4}, -{5,6,-3}, -{5,6,-2}, -{5,6,-1}, -{5,6,0}, -{5,6,1}, -{5,6,2}, -{5,6,3}, -{5,6,4}, -{5,6,5}, -{5,6,6}, -{5,6,7}, -{5,7,-23}, -{5,7,-22}, -{5,7,-21}, -{5,7,-20}, -{5,7,-19}, -{5,7,-18}, -{5,7,-17}, -{5,7,-16}, -{5,7,-15}, -{5,7,-14}, -{5,7,-13}, -{5,7,-12}, -{5,7,-11}, -{5,7,-10}, -{5,7,-9}, -{5,7,-8}, -{5,7,-7}, -{5,7,-6}, -{5,7,-5}, -{5,7,-4}, -{5,7,-3}, -{5,7,-2}, -{5,7,-1}, -{5,7,0}, -{5,7,1}, -{5,7,2}, -{5,7,3}, -{5,7,4}, -{5,7,5}, -{5,7,6}, -{5,7,7}, -{5,8,-24}, -{5,8,-23}, -{5,8,-22}, -{5,8,-21}, -{5,8,-20}, -{5,8,-19}, -{5,8,-18}, -{5,8,-17}, -{5,8,-16}, -{5,8,-15}, -{5,8,-14}, -{5,8,-13}, -{5,8,-12}, -{5,8,-11}, -{5,8,-10}, -{5,8,-9}, -{5,8,-8}, -{5,8,-7}, -{5,8,-6}, -{5,8,-5}, -{5,8,-4}, -{5,8,-3}, -{5,8,-2}, -{5,8,-1}, -{5,8,0}, -{5,8,1}, -{5,8,2}, -{5,8,3}, -{5,8,4}, -{5,8,5}, -{5,8,6}, -{5,8,7}, -{5,9,-25}, -{5,9,-24}, -{5,9,-23}, -{5,9,-22}, -{5,9,-21}, -{5,9,-20}, -{5,9,-19}, -{5,9,-18}, -{5,9,-17}, -{5,9,-16}, -{5,9,-15}, -{5,9,-14}, -{5,9,-13}, -{5,9,-12}, -{5,9,-11}, -{5,9,-10}, -{5,9,-9}, -{5,9,-8}, -{5,9,-7}, -{5,9,-6}, -{5,9,-5}, -{5,9,-4}, -{5,9,-3}, -{5,9,-2}, -{5,9,-1}, -{5,9,0}, -{5,9,1}, -{5,9,2}, -{5,9,3}, -{5,9,4}, -{5,9,5}, -{5,9,6}, -{5,9,7}, -{5,10,-26}, -{5,10,-25}, -{5,10,-24}, -{5,10,-23}, -{5,10,-22}, -{5,10,-21}, -{5,10,-20}, -{5,10,-19}, -{5,10,-18}, -{5,10,-17}, -{5,10,-16}, -{5,10,-15}, -{5,10,-14}, -{5,10,-13}, -{5,10,-12}, -{5,10,-11}, -{5,10,-10}, -{5,10,-9}, -{5,10,-8}, -{5,10,-7}, -{5,10,-6}, -{5,10,-5}, -{5,10,-4}, -{5,10,-3}, -{5,10,-2}, -{5,10,-1}, -{5,10,0}, -{5,10,1}, -{5,10,2}, -{5,10,3}, -{5,10,4}, -{5,10,5}, -{5,10,6}, -{5,10,7}, -{5,11,-27}, -{5,11,-26}, -{5,11,-25}, -{5,11,-24}, -{5,11,-23}, -{5,11,-22}, -{5,11,-21}, -{5,11,-20}, -{5,11,-19}, -{5,11,-18}, -{5,11,-17}, -{5,11,-16}, -{5,11,-15}, -{5,11,-14}, -{5,11,-13}, -{5,11,-12}, -{5,11,-11}, -{5,11,-10}, -{5,11,-9}, -{5,11,-8}, -{5,11,-7}, -{5,11,-6}, -{5,11,-5}, -{5,11,-4}, -{5,11,-3}, -{5,11,-2}, -{5,11,-1}, -{5,11,0}, -{5,11,1}, -{5,11,2}, -{5,11,3}, -{5,11,4}, -{5,11,5}, -{5,11,6}, -{5,11,7}, -{5,12,-28}, -{5,12,-27}, -{5,12,-26}, -{5,12,-25}, -{5,12,-24}, -{5,12,-23}, -{5,12,-22}, -{5,12,-21}, -{5,12,-20}, -{5,12,-19}, -{5,12,-18}, -{5,12,-17}, -{5,12,-16}, -{5,12,-15}, -{5,12,-14}, -{5,12,-13}, -{5,12,-12}, -{5,12,-11}, -{5,12,-10}, -{5,12,-9}, -{5,12,-8}, -{5,12,-7}, -{5,12,-6}, -{5,12,-5}, -{5,12,-4}, -{5,12,-3}, -{5,12,-2}, -{5,12,-1}, -{5,12,0}, -{5,12,1}, -{5,12,2}, -{5,12,3}, -{5,12,4}, -{5,12,5}, -{5,12,6}, -{5,12,7}, -{5,13,-29}, -{5,13,-28}, -{5,13,-27}, -{5,13,-26}, -{5,13,-25}, -{5,13,-24}, -{5,13,-23}, -{5,13,-22}, -{5,13,-21}, -{5,13,-20}, -{5,13,-19}, -{5,13,-18}, -{5,13,-17}, -{5,13,-16}, -{5,13,-15}, -{5,13,-14}, -{5,13,-13}, -{5,13,-12}, -{5,13,-11}, -{5,13,-10}, -{5,13,-9}, -{5,13,-8}, -{5,13,-7}, -{5,13,-6}, -{5,13,-5}, -{5,13,-4}, -{5,13,-3}, -{5,13,-2}, -{5,13,-1}, -{5,13,0}, -{5,13,1}, -{5,13,2}, -{5,13,3}, -{5,13,4}, -{5,13,5}, -{5,13,6}, -{5,13,7}, -{5,14,-30}, -{5,14,-29}, -{5,14,-28}, -{5,14,-27}, -{5,14,-26}, -{5,14,-25}, -{5,14,-24}, -{5,14,-23}, -{5,14,-22}, -{5,14,-21}, -{5,14,-20}, -{5,14,-19}, -{5,14,-18}, -{5,14,-17}, -{5,14,-16}, -{5,14,-15}, -{5,14,-14}, -{5,14,-13}, -{5,14,-12}, -{5,14,-11}, -{5,14,-10}, -{5,14,-9}, -{5,14,-8}, -{5,14,-7}, -{5,14,-6}, -{5,14,-5}, -{5,14,-4}, -{5,14,-3}, -{5,14,-2}, -{5,14,-1}, -{5,14,0}, -{5,14,1}, -{5,14,2}, -{5,14,3}, -{5,14,4}, -{5,14,5}, -{5,14,6}, -{5,14,7}, -{5,15,-30}, -{5,15,-29}, -{5,15,-28}, -{5,15,-27}, -{5,15,-26}, -{5,15,-25}, -{5,15,-24}, -{5,15,-23}, -{5,15,-22}, -{5,15,-21}, -{5,15,-20}, -{5,15,-19}, -{5,15,-18}, -{5,15,-17}, -{5,15,-16}, -{5,15,-15}, -{5,15,-14}, -{5,15,-13}, -{5,15,-12}, -{5,15,-11}, -{5,15,-10}, -{5,15,-9}, -{5,15,-8}, -{5,15,-7}, -{5,15,-6}, -{5,15,-5}, -{5,15,-4}, -{5,15,-3}, -{5,15,-2}, -{5,15,-1}, -{5,15,0}, -{5,15,1}, -{5,15,2}, -{5,15,3}, -{5,15,4}, -{5,15,5}, -{5,15,6}, -{5,15,7}, -{5,16,-31}, -{5,16,-30}, -{5,16,-29}, -{5,16,-28}, -{5,16,-27}, -{5,16,-26}, -{5,16,-25}, -{5,16,-24}, -{5,16,-23}, -{5,16,-22}, -{5,16,-21}, -{5,16,-20}, -{5,16,-19}, -{5,16,-18}, -{5,16,-17}, -{5,16,-16}, -{5,16,-15}, -{5,16,-14}, -{5,16,-13}, -{5,16,-12}, -{5,16,-11}, -{5,16,-10}, -{5,16,-9}, -{5,16,-8}, -{5,16,-7}, -{5,16,-6}, -{5,16,-5}, -{5,16,-4}, -{5,16,-3}, -{5,16,-2}, -{5,16,-1}, -{5,16,0}, -{5,16,1}, -{5,16,2}, -{5,16,3}, -{5,16,4}, -{5,16,5}, -{5,16,6}, -{5,16,7}, -{5,17,-32}, -{5,17,-31}, -{5,17,-30}, -{5,17,-29}, -{5,17,-28}, -{5,17,-27}, -{5,17,-26}, -{5,17,-25}, -{5,17,-24}, -{5,17,-23}, -{5,17,-22}, -{5,17,-21}, -{5,17,-20}, -{5,17,-19}, -{5,17,-18}, -{5,17,-17}, -{5,17,-16}, -{5,17,-15}, -{5,17,-14}, -{5,17,-13}, -{5,17,-12}, -{5,17,-11}, -{5,17,-10}, -{5,17,-9}, -{5,17,-8}, -{5,17,-7}, -{5,17,-6}, -{5,17,-5}, -{5,17,-4}, -{5,17,-3}, -{5,17,-2}, -{5,17,-1}, -{5,17,0}, -{5,17,1}, -{5,17,2}, -{5,17,3}, -{5,17,4}, -{5,17,5}, -{5,17,6}, -{5,17,7}, -{5,18,-33}, -{5,18,-32}, -{5,18,-31}, -{5,18,-30}, -{5,18,-29}, -{5,18,-28}, -{5,18,-27}, -{5,18,-26}, -{5,18,-25}, -{5,18,-24}, -{5,18,-23}, -{5,18,-22}, -{5,18,-21}, -{5,18,-20}, -{5,18,-19}, -{5,18,-18}, -{5,18,-17}, -{5,18,-16}, -{5,18,-15}, -{5,18,-14}, -{5,18,-13}, -{5,18,-12}, -{5,18,-11}, -{5,18,-10}, -{5,18,-9}, -{5,18,-8}, -{5,18,-7}, -{5,18,-6}, -{5,18,-5}, -{5,18,-4}, -{5,18,-3}, -{5,18,-2}, -{5,18,-1}, -{5,18,0}, -{5,18,1}, -{5,18,2}, -{5,18,3}, -{5,18,4}, -{5,18,5}, -{5,18,6}, -{5,18,7}, -{5,19,-34}, -{5,19,-33}, -{5,19,-32}, -{5,19,-31}, -{5,19,-30}, -{5,19,-29}, -{5,19,-28}, -{5,19,-27}, -{5,19,-26}, -{5,19,-25}, -{5,19,-24}, -{5,19,-23}, -{5,19,-22}, -{5,19,-21}, -{5,19,-20}, -{5,19,-19}, -{5,19,-18}, -{5,19,-17}, -{5,19,-16}, -{5,19,-15}, -{5,19,-14}, -{5,19,-13}, -{5,19,-12}, -{5,19,-11}, -{5,19,-10}, -{5,19,-9}, -{5,19,-8}, -{5,19,-7}, -{5,19,-6}, -{5,19,-5}, -{5,19,-4}, -{5,19,-3}, -{5,19,-2}, -{5,19,-1}, -{5,19,0}, -{5,19,1}, -{5,19,2}, -{5,19,3}, -{5,19,4}, -{5,19,5}, -{5,19,6}, -{5,19,7}, -{5,19,8}, -{5,20,-35}, -{5,20,-34}, -{5,20,-33}, -{5,20,-32}, -{5,20,-31}, -{5,20,-30}, -{5,20,-29}, -{5,20,-28}, -{5,20,-27}, -{5,20,-26}, -{5,20,-25}, -{5,20,-24}, -{5,20,-23}, -{5,20,-22}, -{5,20,-21}, -{5,20,-20}, -{5,20,-19}, -{5,20,-18}, -{5,20,-17}, -{5,20,-16}, -{5,20,-15}, -{5,20,-14}, -{5,20,-13}, -{5,20,-12}, -{5,20,-11}, -{5,20,-10}, -{5,20,-9}, -{5,20,-8}, -{5,20,-7}, -{5,20,-6}, -{5,20,-5}, -{5,20,-4}, -{5,20,-3}, -{5,20,-2}, -{5,20,-1}, -{5,20,0}, -{5,20,1}, -{5,20,2}, -{5,20,3}, -{5,20,4}, -{5,20,5}, -{5,20,6}, -{5,20,7}, -{5,20,8}, -{5,21,-36}, -{5,21,-35}, -{5,21,-34}, -{5,21,-33}, -{5,21,-32}, -{5,21,-31}, -{5,21,-30}, -{5,21,-29}, -{5,21,-28}, -{5,21,-27}, -{5,21,-26}, -{5,21,-25}, -{5,21,-24}, -{5,21,-23}, -{5,21,-22}, -{5,21,-21}, -{5,21,-20}, -{5,21,-19}, -{5,21,-18}, -{5,21,-17}, -{5,21,-16}, -{5,21,-15}, -{5,21,-14}, -{5,21,-13}, -{5,21,-12}, -{5,21,-11}, -{5,21,-10}, -{5,21,-9}, -{5,21,-8}, -{5,21,-7}, -{5,21,-6}, -{5,21,-5}, -{5,21,-4}, -{5,21,-3}, -{5,21,-2}, -{5,21,-1}, -{5,21,0}, -{5,21,1}, -{5,21,2}, -{5,21,3}, -{5,21,4}, -{5,21,5}, -{5,21,6}, -{5,21,7}, -{5,21,8}, -{5,22,-37}, -{5,22,-36}, -{5,22,-35}, -{5,22,-34}, -{5,22,-33}, -{5,22,-32}, -{5,22,-31}, -{5,22,-30}, -{5,22,-29}, -{5,22,-28}, -{5,22,-27}, -{5,22,-26}, -{5,22,-25}, -{5,22,-24}, -{5,22,-23}, -{5,22,-22}, -{5,22,-21}, -{5,22,-20}, -{5,22,-19}, -{5,22,-18}, -{5,22,-17}, -{5,22,-16}, -{5,22,-15}, -{5,22,-14}, -{5,22,-13}, -{5,22,-12}, -{5,22,-11}, -{5,22,-10}, -{5,22,-9}, -{5,22,-8}, -{5,22,-7}, -{5,22,-6}, -{5,22,-5}, -{5,22,-4}, -{5,22,-3}, -{5,22,-2}, -{5,22,-1}, -{5,22,0}, -{5,22,1}, -{5,22,2}, -{5,22,3}, -{5,22,4}, -{5,22,5}, -{5,22,6}, -{5,22,8}, -{5,23,-37}, -{5,23,-36}, -{5,23,-35}, -{5,23,-34}, -{5,23,-33}, -{5,23,-32}, -{5,23,-31}, -{5,23,-30}, -{5,23,-29}, -{5,23,-28}, -{5,23,-27}, -{5,23,-26}, -{5,23,-25}, -{5,23,-24}, -{5,23,-23}, -{5,23,-22}, -{5,23,-21}, -{5,23,-20}, -{5,23,-19}, -{5,23,-18}, -{5,23,-17}, -{5,23,-16}, -{5,23,-15}, -{5,23,-14}, -{5,23,-13}, -{5,23,-12}, -{5,23,-11}, -{5,23,-10}, -{5,23,-9}, -{5,23,-8}, -{5,23,-7}, -{5,23,-6}, -{5,23,-5}, -{5,23,-4}, -{5,23,-3}, -{5,24,-38}, -{5,24,-37}, -{5,24,-36}, -{5,24,-35}, -{5,24,-34}, -{5,24,-33}, -{5,24,-32}, -{5,24,-31}, -{5,24,-30}, -{5,24,-29}, -{5,24,-28}, -{5,24,-27}, -{5,24,-26}, -{5,24,-25}, -{5,24,-24}, -{5,24,-23}, -{5,24,-22}, -{5,24,-21}, -{5,24,-20}, -{5,24,-19}, -{5,24,-18}, -{5,24,-17}, -{5,24,-16}, -{5,24,-15}, -{5,24,-14}, -{5,24,-13}, -{5,24,-12}, -{5,25,-39}, -{5,25,-38}, -{5,25,-37}, -{5,25,-36}, -{5,25,-35}, -{5,25,-34}, -{5,25,-33}, -{5,25,-32}, -{5,25,-31}, -{5,25,-30}, -{5,25,-29}, -{5,25,-28}, -{5,25,-27}, -{5,25,-26}, -{5,25,-25}, -{5,25,-24}, -{5,25,-23}, -{5,25,-22}, -{5,25,-21}, -{5,25,-20}, -{5,25,-19}, -{5,26,-40}, -{5,26,-39}, -{5,26,-38}, -{5,26,-37}, -{5,26,-36}, -{5,26,-35}, -{5,26,-34}, -{5,26,-33}, -{5,26,-32}, -{5,26,-31}, -{5,26,-30}, -{5,26,-29}, -{5,26,-28}, -{5,26,-27}, -{5,26,-26}, -{5,26,-25}, -{5,26,-24}, -{5,27,-41}, -{5,27,-40}, -{5,27,-39}, -{5,27,-38}, -{5,27,-37}, -{5,27,-36}, -{5,27,-35}, -{5,27,-34}, -{5,27,-33}, -{5,27,-32}, -{5,27,-31}, -{5,27,-30}, -{5,27,-29}, -{5,28,-42}, -{5,28,-41}, -{5,28,-40}, -{5,28,-39}, -{5,28,-38}, -{5,28,-37}, -{5,28,-36}, -{5,28,-35}, -{5,28,-34}, -{5,28,-33}, -{5,29,-43}, -{5,29,-42}, -{5,29,-41}, -{5,29,-40}, -{5,29,-39}, -{5,29,-38}, -{5,29,-37}, -{5,30,-43}, -{5,30,-42}, -{5,30,-41}, -{5,30,-40}, -{5,31,-44}, -{5,31,-43}, -{6,-12,8}, -{6,-11,6}, -{6,-11,7}, -{6,-11,8}, -{6,-10,4}, -{6,-10,5}, -{6,-10,6}, -{6,-10,7}, -{6,-10,8}, -{6,-9,1}, -{6,-9,2}, -{6,-9,3}, -{6,-9,4}, -{6,-9,5}, -{6,-9,6}, -{6,-9,7}, -{6,-9,8}, -{6,-8,-1}, -{6,-8,0}, -{6,-8,1}, -{6,-8,2}, -{6,-8,3}, -{6,-8,4}, -{6,-8,5}, -{6,-8,6}, -{6,-8,7}, -{6,-8,8}, -{6,-7,-3}, -{6,-7,-2}, -{6,-7,-1}, -{6,-7,0}, -{6,-7,1}, -{6,-7,2}, -{6,-7,3}, -{6,-7,4}, -{6,-7,5}, -{6,-7,6}, -{6,-7,7}, -{6,-7,8}, -{6,-7,9}, -{6,-6,-5}, -{6,-6,-4}, -{6,-6,-3}, -{6,-6,-2}, -{6,-6,-1}, -{6,-6,0}, -{6,-6,1}, -{6,-6,2}, -{6,-6,3}, -{6,-6,4}, -{6,-6,5}, -{6,-6,6}, -{6,-6,7}, -{6,-6,8}, -{6,-6,9}, -{6,-5,-7}, -{6,-5,-6}, -{6,-5,-5}, -{6,-5,-4}, -{6,-5,-3}, -{6,-5,-2}, -{6,-5,-1}, -{6,-5,0}, -{6,-5,1}, -{6,-5,2}, -{6,-5,3}, -{6,-5,4}, -{6,-5,5}, -{6,-5,6}, -{6,-5,7}, -{6,-5,8}, -{6,-5,9}, -{6,-4,-9}, -{6,-4,-8}, -{6,-4,-7}, -{6,-4,-6}, -{6,-4,-5}, -{6,-4,-4}, -{6,-4,-3}, -{6,-4,-2}, -{6,-4,-1}, -{6,-4,0}, -{6,-4,1}, -{6,-4,2}, -{6,-4,3}, -{6,-4,4}, -{6,-4,5}, -{6,-4,6}, -{6,-4,7}, -{6,-4,8}, -{6,-4,9}, -{6,-3,-11}, -{6,-3,-10}, -{6,-3,-9}, -{6,-3,-8}, -{6,-3,-7}, -{6,-3,-6}, -{6,-3,-5}, -{6,-3,-4}, -{6,-3,-3}, -{6,-3,-2}, -{6,-3,-1}, -{6,-3,0}, -{6,-3,1}, -{6,-3,2}, -{6,-3,3}, -{6,-3,4}, -{6,-3,5}, -{6,-3,6}, -{6,-3,7}, -{6,-3,8}, -{6,-3,9}, -{6,-2,-12}, -{6,-2,-11}, -{6,-2,-10}, -{6,-2,-9}, -{6,-2,-8}, -{6,-2,-7}, -{6,-2,-6}, -{6,-2,-5}, -{6,-2,-4}, -{6,-2,-3}, -{6,-2,-2}, -{6,-2,-1}, -{6,-2,0}, -{6,-2,1}, -{6,-2,2}, -{6,-2,3}, -{6,-2,4}, -{6,-2,5}, -{6,-2,6}, -{6,-2,7}, -{6,-2,8}, -{6,-2,9}, -{6,-1,-14}, -{6,-1,-13}, -{6,-1,-12}, -{6,-1,-11}, -{6,-1,-10}, -{6,-1,-9}, -{6,-1,-8}, -{6,-1,-7}, -{6,-1,-6}, -{6,-1,-5}, -{6,-1,-4}, -{6,-1,-3}, -{6,-1,-2}, -{6,-1,-1}, -{6,-1,0}, -{6,-1,1}, -{6,-1,2}, -{6,-1,3}, -{6,-1,4}, -{6,-1,5}, -{6,-1,6}, -{6,-1,7}, -{6,-1,8}, -{6,-1,9}, -{6,0,-15}, -{6,0,-14}, -{6,0,-13}, -{6,0,-12}, -{6,0,-11}, -{6,0,-10}, -{6,0,-9}, -{6,0,-8}, -{6,0,-7}, -{6,0,-6}, -{6,0,-5}, -{6,0,-4}, -{6,0,-3}, -{6,0,-2}, -{6,0,-1}, -{6,0,0}, -{6,0,1}, -{6,0,2}, -{6,0,3}, -{6,0,4}, -{6,0,5}, -{6,0,6}, -{6,0,7}, -{6,0,8}, -{6,0,9}, -{6,1,-16}, -{6,1,-15}, -{6,1,-14}, -{6,1,-13}, -{6,1,-12}, -{6,1,-11}, -{6,1,-10}, -{6,1,-9}, -{6,1,-8}, -{6,1,-7}, -{6,1,-6}, -{6,1,-5}, -{6,1,-4}, -{6,1,-3}, -{6,1,-2}, -{6,1,-1}, -{6,1,0}, -{6,1,1}, -{6,1,2}, -{6,1,3}, -{6,1,4}, -{6,1,5}, -{6,1,6}, -{6,1,7}, -{6,1,8}, -{6,1,9}, -{6,2,-18}, -{6,2,-17}, -{6,2,-16}, -{6,2,-15}, -{6,2,-14}, -{6,2,-13}, -{6,2,-12}, -{6,2,-11}, -{6,2,-10}, -{6,2,-9}, -{6,2,-8}, -{6,2,-7}, -{6,2,-6}, -{6,2,-5}, -{6,2,-4}, -{6,2,-3}, -{6,2,-2}, -{6,2,-1}, -{6,2,0}, -{6,2,1}, -{6,2,2}, -{6,2,3}, -{6,2,4}, -{6,2,5}, -{6,2,6}, -{6,2,7}, -{6,2,8}, -{6,2,9}, -{6,3,-19}, -{6,3,-18}, -{6,3,-17}, -{6,3,-16}, -{6,3,-15}, -{6,3,-14}, -{6,3,-13}, -{6,3,-12}, -{6,3,-11}, -{6,3,-10}, -{6,3,-9}, -{6,3,-8}, -{6,3,-7}, -{6,3,-6}, -{6,3,-5}, -{6,3,-4}, -{6,3,-3}, -{6,3,-2}, -{6,3,-1}, -{6,3,0}, -{6,3,1}, -{6,3,2}, -{6,3,3}, -{6,3,4}, -{6,3,5}, -{6,3,6}, -{6,3,7}, -{6,3,8}, -{6,3,9}, -{6,4,-20}, -{6,4,-19}, -{6,4,-18}, -{6,4,-17}, -{6,4,-16}, -{6,4,-15}, -{6,4,-14}, -{6,4,-13}, -{6,4,-12}, -{6,4,-11}, -{6,4,-10}, -{6,4,-9}, -{6,4,-8}, -{6,4,-7}, -{6,4,-6}, -{6,4,-5}, -{6,4,-4}, -{6,4,-3}, -{6,4,-2}, -{6,4,-1}, -{6,4,0}, -{6,4,1}, -{6,4,2}, -{6,4,3}, -{6,4,4}, -{6,4,5}, -{6,4,6}, -{6,4,7}, -{6,4,8}, -{6,4,9}, -{6,5,-21}, -{6,5,-20}, -{6,5,-19}, -{6,5,-18}, -{6,5,-17}, -{6,5,-16}, -{6,5,-15}, -{6,5,-14}, -{6,5,-13}, -{6,5,-12}, -{6,5,-11}, -{6,5,-10}, -{6,5,-9}, -{6,5,-8}, -{6,5,-7}, -{6,5,-6}, -{6,5,-5}, -{6,5,-4}, -{6,5,-3}, -{6,5,-2}, -{6,5,-1}, -{6,5,0}, -{6,5,1}, -{6,5,2}, -{6,5,3}, -{6,5,4}, -{6,5,5}, -{6,5,6}, -{6,5,7}, -{6,5,8}, -{6,5,9}, -{6,6,-22}, -{6,6,-21}, -{6,6,-20}, -{6,6,-19}, -{6,6,-18}, -{6,6,-17}, -{6,6,-16}, -{6,6,-15}, -{6,6,-14}, -{6,6,-13}, -{6,6,-12}, -{6,6,-11}, -{6,6,-10}, -{6,6,-9}, -{6,6,-8}, -{6,6,-7}, -{6,6,-6}, -{6,6,-5}, -{6,6,-4}, -{6,6,-3}, -{6,6,-2}, -{6,6,-1}, -{6,6,0}, -{6,6,1}, -{6,6,2}, -{6,6,3}, -{6,6,4}, -{6,6,5}, -{6,6,6}, -{6,6,7}, -{6,6,8}, -{6,6,9}, -{6,7,-23}, -{6,7,-22}, -{6,7,-21}, -{6,7,-20}, -{6,7,-19}, -{6,7,-18}, -{6,7,-17}, -{6,7,-16}, -{6,7,-15}, -{6,7,-14}, -{6,7,-13}, -{6,7,-12}, -{6,7,-11}, -{6,7,-10}, -{6,7,-9}, -{6,7,-8}, -{6,7,-7}, -{6,7,-6}, -{6,7,-5}, -{6,7,-4}, -{6,7,-3}, -{6,7,-2}, -{6,7,-1}, -{6,7,0}, -{6,7,1}, -{6,7,2}, -{6,7,3}, -{6,7,4}, -{6,7,5}, -{6,7,6}, -{6,7,7}, -{6,7,8}, -{6,7,9}, -{6,8,-24}, -{6,8,-23}, -{6,8,-22}, -{6,8,-21}, -{6,8,-20}, -{6,8,-19}, -{6,8,-18}, -{6,8,-17}, -{6,8,-16}, -{6,8,-15}, -{6,8,-14}, -{6,8,-13}, -{6,8,-12}, -{6,8,-11}, -{6,8,-10}, -{6,8,-9}, -{6,8,-8}, -{6,8,-7}, -{6,8,-6}, -{6,8,-5}, -{6,8,-4}, -{6,8,-3}, -{6,8,-2}, -{6,8,-1}, -{6,8,0}, -{6,8,1}, -{6,8,2}, -{6,8,3}, -{6,8,4}, -{6,8,5}, -{6,8,6}, -{6,8,7}, -{6,8,8}, -{6,8,9}, -{6,9,-25}, -{6,9,-24}, -{6,9,-23}, -{6,9,-22}, -{6,9,-21}, -{6,9,-20}, -{6,9,-19}, -{6,9,-18}, -{6,9,-17}, -{6,9,-16}, -{6,9,-15}, -{6,9,-14}, -{6,9,-13}, -{6,9,-12}, -{6,9,-11}, -{6,9,-10}, -{6,9,-9}, -{6,9,-8}, -{6,9,-7}, -{6,9,-6}, -{6,9,-5}, -{6,9,-4}, -{6,9,-3}, -{6,9,-2}, -{6,9,-1}, -{6,9,0}, -{6,9,1}, -{6,9,2}, -{6,9,3}, -{6,9,4}, -{6,9,5}, -{6,9,6}, -{6,9,7}, -{6,9,8}, -{6,9,9}, -{6,10,-26}, -{6,10,-25}, -{6,10,-24}, -{6,10,-23}, -{6,10,-22}, -{6,10,-21}, -{6,10,-20}, -{6,10,-19}, -{6,10,-18}, -{6,10,-17}, -{6,10,-16}, -{6,10,-15}, -{6,10,-14}, -{6,10,-13}, -{6,10,-12}, -{6,10,-11}, -{6,10,-10}, -{6,10,-9}, -{6,10,-8}, -{6,10,-7}, -{6,10,-6}, -{6,10,-5}, -{6,10,-4}, -{6,10,-3}, -{6,10,-2}, -{6,10,-1}, -{6,10,0}, -{6,10,1}, -{6,10,2}, -{6,10,3}, -{6,10,4}, -{6,10,5}, -{6,10,6}, -{6,10,7}, -{6,10,8}, -{6,10,9}, -{6,11,-27}, -{6,11,-26}, -{6,11,-25}, -{6,11,-24}, -{6,11,-23}, -{6,11,-22}, -{6,11,-21}, -{6,11,-20}, -{6,11,-19}, -{6,11,-18}, -{6,11,-17}, -{6,11,-16}, -{6,11,-15}, -{6,11,-14}, -{6,11,-13}, -{6,11,-12}, -{6,11,-11}, -{6,11,-10}, -{6,11,-9}, -{6,11,-8}, -{6,11,-7}, -{6,11,-6}, -{6,11,-5}, -{6,11,-4}, -{6,11,-3}, -{6,11,-2}, -{6,11,-1}, -{6,11,0}, -{6,11,1}, -{6,11,2}, -{6,11,3}, -{6,11,4}, -{6,11,5}, -{6,11,6}, -{6,11,7}, -{6,11,8}, -{6,11,9}, -{6,12,-28}, -{6,12,-27}, -{6,12,-26}, -{6,12,-25}, -{6,12,-24}, -{6,12,-23}, -{6,12,-22}, -{6,12,-21}, -{6,12,-20}, -{6,12,-19}, -{6,12,-18}, -{6,12,-17}, -{6,12,-16}, -{6,12,-15}, -{6,12,-14}, -{6,12,-13}, -{6,12,-12}, -{6,12,-11}, -{6,12,-10}, -{6,12,-9}, -{6,12,-8}, -{6,12,-7}, -{6,12,-6}, -{6,12,-5}, -{6,12,-4}, -{6,12,-3}, -{6,12,-2}, -{6,12,-1}, -{6,12,0}, -{6,12,1}, -{6,12,2}, -{6,12,3}, -{6,12,4}, -{6,12,5}, -{6,12,6}, -{6,12,7}, -{6,12,8}, -{6,12,9}, -{6,13,-29}, -{6,13,-28}, -{6,13,-27}, -{6,13,-26}, -{6,13,-25}, -{6,13,-24}, -{6,13,-23}, -{6,13,-22}, -{6,13,-21}, -{6,13,-20}, -{6,13,-19}, -{6,13,-18}, -{6,13,-17}, -{6,13,-16}, -{6,13,-15}, -{6,13,-14}, -{6,13,-13}, -{6,13,-12}, -{6,13,-11}, -{6,13,-10}, -{6,13,-9}, -{6,13,-8}, -{6,13,-7}, -{6,13,-6}, -{6,13,-5}, -{6,13,-4}, -{6,13,-3}, -{6,13,-2}, -{6,13,-1}, -{6,13,0}, -{6,13,1}, -{6,13,2}, -{6,13,3}, -{6,13,4}, -{6,13,5}, -{6,13,6}, -{6,13,7}, -{6,13,8}, -{6,13,9}, -{6,14,-30}, -{6,14,-29}, -{6,14,-28}, -{6,14,-27}, -{6,14,-26}, -{6,14,-25}, -{6,14,-24}, -{6,14,-23}, -{6,14,-22}, -{6,14,-21}, -{6,14,-20}, -{6,14,-19}, -{6,14,-18}, -{6,14,-17}, -{6,14,-16}, -{6,14,-15}, -{6,14,-14}, -{6,14,-13}, -{6,14,-12}, -{6,14,-11}, -{6,14,-10}, -{6,14,-9}, -{6,14,-8}, -{6,14,-7}, -{6,14,-6}, -{6,14,-5}, -{6,14,-4}, -{6,14,-3}, -{6,14,-2}, -{6,14,-1}, -{6,14,0}, -{6,14,1}, -{6,14,2}, -{6,14,3}, -{6,14,4}, -{6,14,5}, -{6,14,6}, -{6,14,7}, -{6,14,8}, -{6,14,9}, -{6,15,-31}, -{6,15,-30}, -{6,15,-29}, -{6,15,-28}, -{6,15,-27}, -{6,15,-26}, -{6,15,-25}, -{6,15,-24}, -{6,15,-23}, -{6,15,-22}, -{6,15,-21}, -{6,15,-20}, -{6,15,-19}, -{6,15,-18}, -{6,15,-17}, -{6,15,-16}, -{6,15,-15}, -{6,15,-14}, -{6,15,-13}, -{6,15,-12}, -{6,15,-11}, -{6,15,-10}, -{6,15,-9}, -{6,15,-8}, -{6,15,-7}, -{6,15,-6}, -{6,15,-5}, -{6,15,-4}, -{6,15,-3}, -{6,15,-2}, -{6,15,-1}, -{6,15,0}, -{6,15,1}, -{6,15,2}, -{6,15,3}, -{6,15,4}, -{6,15,5}, -{6,15,6}, -{6,15,7}, -{6,15,8}, -{6,15,9}, -{6,16,-32}, -{6,16,-31}, -{6,16,-30}, -{6,16,-29}, -{6,16,-28}, -{6,16,-27}, -{6,16,-26}, -{6,16,-25}, -{6,16,-24}, -{6,16,-23}, -{6,16,-22}, -{6,16,-21}, -{6,16,-20}, -{6,16,-19}, -{6,16,-18}, -{6,16,-17}, -{6,16,-16}, -{6,16,-15}, -{6,16,-14}, -{6,16,-13}, -{6,16,-12}, -{6,16,-11}, -{6,16,-10}, -{6,16,-9}, -{6,16,-8}, -{6,16,-7}, -{6,16,-6}, -{6,16,-5}, -{6,16,-4}, -{6,16,-3}, -{6,16,-2}, -{6,16,-1}, -{6,16,0}, -{6,16,1}, -{6,16,2}, -{6,16,3}, -{6,16,4}, -{6,16,5}, -{6,16,6}, -{6,16,7}, -{6,16,8}, -{6,16,9}, -{6,17,-33}, -{6,17,-32}, -{6,17,-31}, -{6,17,-30}, -{6,17,-29}, -{6,17,-28}, -{6,17,-27}, -{6,17,-26}, -{6,17,-25}, -{6,17,-24}, -{6,17,-23}, -{6,17,-22}, -{6,17,-21}, -{6,17,-20}, -{6,17,-19}, -{6,17,-18}, -{6,17,-17}, -{6,17,-16}, -{6,17,-15}, -{6,17,-14}, -{6,17,-13}, -{6,17,-12}, -{6,17,-11}, -{6,17,-10}, -{6,17,-9}, -{6,17,-8}, -{6,17,-7}, -{6,17,-6}, -{6,17,-5}, -{6,17,-4}, -{6,17,-3}, -{6,17,-2}, -{6,17,-1}, -{6,17,0}, -{6,17,1}, -{6,17,2}, -{6,17,3}, -{6,17,4}, -{6,17,5}, -{6,17,6}, -{6,17,7}, -{6,17,8}, -{6,17,9}, -{6,18,-34}, -{6,18,-33}, -{6,18,-32}, -{6,18,-31}, -{6,18,-30}, -{6,18,-29}, -{6,18,-28}, -{6,18,-27}, -{6,18,-26}, -{6,18,-25}, -{6,18,-24}, -{6,18,-23}, -{6,18,-22}, -{6,18,-21}, -{6,18,-20}, -{6,18,-19}, -{6,18,-18}, -{6,18,-17}, -{6,18,-16}, -{6,18,-15}, -{6,18,-14}, -{6,18,-13}, -{6,18,-12}, -{6,18,-11}, -{6,18,-10}, -{6,18,-9}, -{6,18,-8}, -{6,18,-7}, -{6,18,-6}, -{6,18,-5}, -{6,18,-4}, -{6,18,-3}, -{6,18,-2}, -{6,18,-1}, -{6,18,0}, -{6,18,1}, -{6,18,2}, -{6,18,3}, -{6,18,4}, -{6,18,5}, -{6,18,6}, -{6,18,7}, -{6,18,8}, -{6,18,9}, -{6,19,-34}, -{6,19,-33}, -{6,19,-32}, -{6,19,-31}, -{6,19,-30}, -{6,19,-29}, -{6,19,-28}, -{6,19,-27}, -{6,19,-26}, -{6,19,-25}, -{6,19,-24}, -{6,19,-23}, -{6,19,-22}, -{6,19,-21}, -{6,19,-20}, -{6,19,-19}, -{6,19,-18}, -{6,19,-17}, -{6,19,-16}, -{6,19,-15}, -{6,19,-14}, -{6,19,-13}, -{6,19,-12}, -{6,19,-11}, -{6,19,-10}, -{6,19,-9}, -{6,19,-8}, -{6,19,-7}, -{6,19,-6}, -{6,19,-5}, -{6,19,-4}, -{6,19,-3}, -{6,19,-2}, -{6,19,-1}, -{6,19,0}, -{6,19,1}, -{6,19,2}, -{6,19,3}, -{6,19,4}, -{6,19,5}, -{6,19,6}, -{6,19,7}, -{6,19,8}, -{6,19,9}, -{6,20,-35}, -{6,20,-34}, -{6,20,-33}, -{6,20,-32}, -{6,20,-31}, -{6,20,-30}, -{6,20,-29}, -{6,20,-28}, -{6,20,-27}, -{6,20,-26}, -{6,20,-25}, -{6,20,-24}, -{6,20,-23}, -{6,20,-22}, -{6,20,-21}, -{6,20,-20}, -{6,20,-19}, -{6,20,-18}, -{6,20,-17}, -{6,20,-16}, -{6,20,-15}, -{6,20,-14}, -{6,20,-13}, -{6,20,-12}, -{6,20,-11}, -{6,20,-10}, -{6,20,-9}, -{6,20,-8}, -{6,20,-7}, -{6,20,-6}, -{6,20,-5}, -{6,20,-4}, -{6,20,-3}, -{6,20,-2}, -{6,20,-1}, -{6,20,0}, -{6,20,1}, -{6,20,2}, -{6,20,3}, -{6,20,4}, -{6,20,5}, -{6,20,6}, -{6,20,7}, -{6,20,8}, -{6,20,9}, -{6,21,-36}, -{6,21,-35}, -{6,21,-34}, -{6,21,-33}, -{6,21,-32}, -{6,21,-31}, -{6,21,-30}, -{6,21,-29}, -{6,21,-28}, -{6,21,-27}, -{6,21,-26}, -{6,21,-25}, -{6,21,-24}, -{6,21,-23}, -{6,21,-22}, -{6,21,-21}, -{6,21,-20}, -{6,21,-19}, -{6,21,-18}, -{6,21,-17}, -{6,21,-16}, -{6,21,-15}, -{6,21,-14}, -{6,21,-13}, -{6,21,-12}, -{6,21,-11}, -{6,21,-10}, -{6,21,-9}, -{6,21,-8}, -{6,21,-7}, -{6,21,-6}, -{6,21,-5}, -{6,21,-4}, -{6,21,-3}, -{6,21,-2}, -{6,21,-1}, -{6,21,0}, -{6,21,1}, -{6,21,2}, -{6,21,3}, -{6,21,4}, -{6,21,5}, -{6,21,6}, -{6,21,7}, -{6,21,8}, -{6,21,9}, -{6,22,-37}, -{6,22,-36}, -{6,22,-35}, -{6,22,-34}, -{6,22,-33}, -{6,22,-32}, -{6,22,-31}, -{6,22,-30}, -{6,22,-29}, -{6,22,-28}, -{6,22,-27}, -{6,22,-26}, -{6,22,-25}, -{6,22,-24}, -{6,22,-23}, -{6,22,-22}, -{6,22,-21}, -{6,22,-20}, -{6,22,-19}, -{6,22,-18}, -{6,22,-17}, -{6,22,-16}, -{6,22,-15}, -{6,22,-14}, -{6,22,-13}, -{6,22,-12}, -{6,22,-11}, -{6,22,-10}, -{6,22,-9}, -{6,22,-8}, -{6,22,-7}, -{6,22,-6}, -{6,22,-5}, -{6,22,-4}, -{6,22,-3}, -{6,22,-2}, -{6,22,-1}, -{6,22,0}, -{6,22,1}, -{6,22,2}, -{6,22,3}, -{6,22,4}, -{6,22,5}, -{6,22,6}, -{6,22,7}, -{6,22,8}, -{6,22,9}, -{6,23,-38}, -{6,23,-37}, -{6,23,-36}, -{6,23,-35}, -{6,23,-34}, -{6,23,-33}, -{6,23,-32}, -{6,23,-31}, -{6,23,-30}, -{6,23,-29}, -{6,23,-28}, -{6,23,-27}, -{6,23,-26}, -{6,23,-25}, -{6,23,-24}, -{6,23,-23}, -{6,23,-22}, -{6,23,-21}, -{6,23,-20}, -{6,23,-19}, -{6,23,-18}, -{6,23,-17}, -{6,23,-16}, -{6,23,-15}, -{6,23,-14}, -{6,23,-13}, -{6,23,-12}, -{6,23,-11}, -{6,23,-10}, -{6,23,-9}, -{6,23,-8}, -{6,23,-7}, -{6,23,-6}, -{6,23,-5}, -{6,23,-4}, -{6,23,-3}, -{6,23,-2}, -{6,23,-1}, -{6,23,0}, -{6,23,1}, -{6,23,2}, -{6,23,3}, -{6,23,4}, -{6,23,5}, -{6,23,6}, -{6,23,7}, -{6,23,8}, -{6,23,9}, -{6,24,-39}, -{6,24,-38}, -{6,24,-37}, -{6,24,-36}, -{6,24,-35}, -{6,24,-34}, -{6,24,-33}, -{6,24,-32}, -{6,24,-31}, -{6,24,-30}, -{6,24,-29}, -{6,24,-28}, -{6,24,-27}, -{6,24,-26}, -{6,24,-25}, -{6,24,-24}, -{6,24,-23}, -{6,24,-22}, -{6,24,-21}, -{6,24,-20}, -{6,24,-19}, -{6,24,-18}, -{6,24,-17}, -{6,24,-16}, -{6,24,-15}, -{6,24,-14}, -{6,24,-13}, -{6,24,-12}, -{6,24,-11}, -{6,24,-10}, -{6,24,-9}, -{6,24,-8}, -{6,24,-7}, -{6,24,-6}, -{6,24,-5}, -{6,24,-4}, -{6,24,-3}, -{6,24,-2}, -{6,24,-1}, -{6,24,0}, -{6,24,1}, -{6,24,2}, -{6,24,3}, -{6,24,4}, -{6,24,5}, -{6,24,6}, -{6,24,7}, -{6,24,8}, -{6,24,9}, -{6,25,-40}, -{6,25,-39}, -{6,25,-38}, -{6,25,-37}, -{6,25,-36}, -{6,25,-35}, -{6,25,-34}, -{6,25,-33}, -{6,25,-32}, -{6,25,-31}, -{6,25,-30}, -{6,25,-29}, -{6,25,-28}, -{6,25,-27}, -{6,25,-26}, -{6,25,-25}, -{6,25,-24}, -{6,25,-23}, -{6,25,-22}, -{6,25,-21}, -{6,25,-20}, -{6,25,-19}, -{6,25,-18}, -{6,25,-17}, -{6,25,-16}, -{6,25,-15}, -{6,25,-14}, -{6,25,-13}, -{6,25,-12}, -{6,25,-11}, -{6,25,-10}, -{6,25,-9}, -{6,25,-8}, -{6,25,-7}, -{6,25,-6}, -{6,25,-5}, -{6,25,-4}, -{6,25,-3}, -{6,25,-2}, -{6,25,-1}, -{6,25,0}, -{6,25,1}, -{6,25,2}, -{6,25,3}, -{6,25,4}, -{6,26,-41}, -{6,26,-40}, -{6,26,-39}, -{6,26,-38}, -{6,26,-37}, -{6,26,-36}, -{6,26,-35}, -{6,26,-34}, -{6,26,-33}, -{6,26,-32}, -{6,26,-31}, -{6,26,-30}, -{6,26,-29}, -{6,26,-28}, -{6,26,-27}, -{6,26,-26}, -{6,26,-25}, -{6,26,-24}, -{6,26,-23}, -{6,26,-22}, -{6,26,-21}, -{6,26,-20}, -{6,26,-19}, -{6,26,-18}, -{6,26,-17}, -{6,26,-16}, -{6,26,-15}, -{6,26,-14}, -{6,26,-13}, -{6,26,-12}, -{6,26,-11}, -{6,26,-10}, -{6,26,-9}, -{6,26,-8}, -{6,26,-7}, -{6,26,-6}, -{6,27,-41}, -{6,27,-40}, -{6,27,-39}, -{6,27,-38}, -{6,27,-37}, -{6,27,-36}, -{6,27,-35}, -{6,27,-34}, -{6,27,-33}, -{6,27,-32}, -{6,27,-31}, -{6,27,-30}, -{6,27,-29}, -{6,27,-28}, -{6,27,-27}, -{6,27,-26}, -{6,27,-25}, -{6,27,-24}, -{6,27,-23}, -{6,27,-22}, -{6,27,-21}, -{6,27,-20}, -{6,27,-19}, -{6,27,-18}, -{6,27,-17}, -{6,27,-16}, -{6,27,-15}, -{6,28,-42}, -{6,28,-41}, -{6,28,-40}, -{6,28,-39}, -{6,28,-38}, -{6,28,-37}, -{6,28,-36}, -{6,28,-35}, -{6,28,-34}, -{6,28,-33}, -{6,28,-32}, -{6,28,-31}, -{6,28,-30}, -{6,28,-29}, -{6,28,-28}, -{6,28,-27}, -{6,28,-26}, -{6,28,-25}, -{6,28,-24}, -{6,28,-23}, -{6,28,-22}, -{6,28,-21}, -{6,29,-43}, -{6,29,-42}, -{6,29,-41}, -{6,29,-40}, -{6,29,-39}, -{6,29,-38}, -{6,29,-37}, -{6,29,-36}, -{6,29,-35}, -{6,29,-34}, -{6,29,-33}, -{6,29,-32}, -{6,29,-31}, -{6,29,-30}, -{6,29,-29}, -{6,29,-28}, -{6,29,-27}, -{6,29,-26}, -{6,30,-44}, -{6,30,-43}, -{6,30,-42}, -{6,30,-41}, -{6,30,-40}, -{6,30,-39}, -{6,30,-38}, -{6,30,-37}, -{6,30,-36}, -{6,30,-35}, -{6,30,-34}, -{6,30,-33}, -{6,30,-32}, -{6,30,-31}, -{6,31,-45}, -{6,31,-44}, -{6,31,-43}, -{6,31,-42}, -{6,31,-41}, -{6,31,-40}, -{6,31,-39}, -{6,31,-38}, -{6,31,-37}, -{6,31,-36}, -{6,31,-35}, -{6,32,-46}, -{6,32,-45}, -{6,32,-44}, -{6,32,-43}, -{6,32,-42}, -{6,32,-41}, -{6,32,-40}, -{6,32,-39}, -{6,33,-46}, -{6,33,-45}, -{6,33,-44}, -{6,33,-43}, -{6,33,-42}, -{6,34,-47}, -{6,34,-46}, -{7,-14,10}, -{7,-13,7}, -{7,-13,8}, -{7,-13,9}, -{7,-13,10}, -{7,-12,5}, -{7,-12,6}, -{7,-12,7}, -{7,-12,8}, -{7,-12,9}, -{7,-12,10}, -{7,-11,3}, -{7,-11,4}, -{7,-11,5}, -{7,-11,6}, -{7,-11,7}, -{7,-11,8}, -{7,-11,9}, -{7,-11,10}, -{7,-10,1}, -{7,-10,2}, -{7,-10,3}, -{7,-10,4}, -{7,-10,5}, -{7,-10,6}, -{7,-10,7}, -{7,-10,8}, -{7,-10,9}, -{7,-10,10}, -{7,-9,-2}, -{7,-9,-1}, -{7,-9,0}, -{7,-9,1}, -{7,-9,2}, -{7,-9,3}, -{7,-9,4}, -{7,-9,5}, -{7,-9,6}, -{7,-9,7}, -{7,-9,8}, -{7,-9,9}, -{7,-9,10}, -{7,-8,-4}, -{7,-8,-3}, -{7,-8,-2}, -{7,-8,-1}, -{7,-8,0}, -{7,-8,1}, -{7,-8,2}, -{7,-8,3}, -{7,-8,4}, -{7,-8,5}, -{7,-8,6}, -{7,-8,7}, -{7,-8,8}, -{7,-8,9}, -{7,-8,10}, -{7,-7,-6}, -{7,-7,-5}, -{7,-7,-4}, -{7,-7,-3}, -{7,-7,-2}, -{7,-7,-1}, -{7,-7,0}, -{7,-7,1}, -{7,-7,2}, -{7,-7,3}, -{7,-7,4}, -{7,-7,5}, -{7,-7,6}, -{7,-7,7}, -{7,-7,8}, -{7,-7,9}, -{7,-7,10}, -{7,-6,-8}, -{7,-6,-7}, -{7,-6,-6}, -{7,-6,-5}, -{7,-6,-4}, -{7,-6,-3}, -{7,-6,-2}, -{7,-6,-1}, -{7,-6,0}, -{7,-6,1}, -{7,-6,2}, -{7,-6,3}, -{7,-6,4}, -{7,-6,5}, -{7,-6,6}, -{7,-6,7}, -{7,-6,8}, -{7,-6,9}, -{7,-6,10}, -{7,-5,-9}, -{7,-5,-8}, -{7,-5,-7}, -{7,-5,-6}, -{7,-5,-5}, -{7,-5,-4}, -{7,-5,-3}, -{7,-5,-2}, -{7,-5,-1}, -{7,-5,0}, -{7,-5,1}, -{7,-5,2}, -{7,-5,3}, -{7,-5,4}, -{7,-5,5}, -{7,-5,6}, -{7,-5,7}, -{7,-5,8}, -{7,-5,9}, -{7,-5,10}, -{7,-4,-11}, -{7,-4,-10}, -{7,-4,-9}, -{7,-4,-8}, -{7,-4,-7}, -{7,-4,-6}, -{7,-4,-5}, -{7,-4,-4}, -{7,-4,-3}, -{7,-4,-2}, -{7,-4,-1}, -{7,-4,0}, -{7,-4,1}, -{7,-4,2}, -{7,-4,3}, -{7,-4,4}, -{7,-4,5}, -{7,-4,6}, -{7,-4,7}, -{7,-4,8}, -{7,-4,9}, -{7,-4,10}, -{7,-3,-12}, -{7,-3,-11}, -{7,-3,-10}, -{7,-3,-9}, -{7,-3,-8}, -{7,-3,-7}, -{7,-3,-6}, -{7,-3,-5}, -{7,-3,-4}, -{7,-3,-3}, -{7,-3,-2}, -{7,-3,-1}, -{7,-3,0}, -{7,-3,1}, -{7,-3,2}, -{7,-3,3}, -{7,-3,4}, -{7,-3,5}, -{7,-3,6}, -{7,-3,7}, -{7,-3,8}, -{7,-3,9}, -{7,-3,10}, -{7,-2,-14}, -{7,-2,-13}, -{7,-2,-12}, -{7,-2,-11}, -{7,-2,-10}, -{7,-2,-9}, -{7,-2,-8}, -{7,-2,-7}, -{7,-2,-6}, -{7,-2,-5}, -{7,-2,-4}, -{7,-2,-3}, -{7,-2,-2}, -{7,-2,-1}, -{7,-2,0}, -{7,-2,1}, -{7,-2,2}, -{7,-2,3}, -{7,-2,4}, -{7,-2,5}, -{7,-2,6}, -{7,-2,7}, -{7,-2,8}, -{7,-2,9}, -{7,-2,10}, -{7,-1,-15}, -{7,-1,-14}, -{7,-1,-13}, -{7,-1,-12}, -{7,-1,-11}, -{7,-1,-10}, -{7,-1,-9}, -{7,-1,-8}, -{7,-1,-7}, -{7,-1,-6}, -{7,-1,-5}, -{7,-1,-4}, -{7,-1,-3}, -{7,-1,-2}, -{7,-1,-1}, -{7,-1,0}, -{7,-1,1}, -{7,-1,2}, -{7,-1,3}, -{7,-1,4}, -{7,-1,5}, -{7,-1,6}, -{7,-1,7}, -{7,-1,8}, -{7,-1,9}, -{7,-1,10}, -{7,0,-16}, -{7,0,-15}, -{7,0,-14}, -{7,0,-13}, -{7,0,-12}, -{7,0,-11}, -{7,0,-10}, -{7,0,-9}, -{7,0,-8}, -{7,0,-7}, -{7,0,-6}, -{7,0,-5}, -{7,0,-4}, -{7,0,-3}, -{7,0,-2}, -{7,0,-1}, -{7,0,0}, -{7,0,1}, -{7,0,2}, -{7,0,3}, -{7,0,4}, -{7,0,5}, -{7,0,6}, -{7,0,7}, -{7,0,8}, -{7,0,9}, -{7,0,10}, -{7,1,-17}, -{7,1,-16}, -{7,1,-15}, -{7,1,-14}, -{7,1,-13}, -{7,1,-12}, -{7,1,-11}, -{7,1,-10}, -{7,1,-9}, -{7,1,-8}, -{7,1,-7}, -{7,1,-6}, -{7,1,-5}, -{7,1,-4}, -{7,1,-3}, -{7,1,-2}, -{7,1,-1}, -{7,1,0}, -{7,1,1}, -{7,1,2}, -{7,1,3}, -{7,1,4}, -{7,1,5}, -{7,1,6}, -{7,1,7}, -{7,1,8}, -{7,1,9}, -{7,1,10}, -{7,2,-18}, -{7,2,-17}, -{7,2,-16}, -{7,2,-15}, -{7,2,-14}, -{7,2,-13}, -{7,2,-12}, -{7,2,-11}, -{7,2,-10}, -{7,2,-9}, -{7,2,-8}, -{7,2,-7}, -{7,2,-6}, -{7,2,-5}, -{7,2,-4}, -{7,2,-3}, -{7,2,-2}, -{7,2,-1}, -{7,2,0}, -{7,2,1}, -{7,2,2}, -{7,2,3}, -{7,2,4}, -{7,2,5}, -{7,2,6}, -{7,2,7}, -{7,2,8}, -{7,2,9}, -{7,2,10}, -{7,3,-20}, -{7,3,-19}, -{7,3,-18}, -{7,3,-17}, -{7,3,-16}, -{7,3,-15}, -{7,3,-14}, -{7,3,-13}, -{7,3,-12}, -{7,3,-11}, -{7,3,-10}, -{7,3,-9}, -{7,3,-8}, -{7,3,-7}, -{7,3,-6}, -{7,3,-5}, -{7,3,-4}, -{7,3,-3}, -{7,3,-2}, -{7,3,-1}, -{7,3,0}, -{7,3,1}, -{7,3,2}, -{7,3,3}, -{7,3,4}, -{7,3,5}, -{7,3,6}, -{7,3,7}, -{7,3,8}, -{7,3,9}, -{7,3,10}, -{7,4,-21}, -{7,4,-20}, -{7,4,-19}, -{7,4,-18}, -{7,4,-17}, -{7,4,-16}, -{7,4,-15}, -{7,4,-14}, -{7,4,-13}, -{7,4,-12}, -{7,4,-11}, -{7,4,-10}, -{7,4,-9}, -{7,4,-8}, -{7,4,-7}, -{7,4,-6}, -{7,4,-5}, -{7,4,-4}, -{7,4,-3}, -{7,4,-2}, -{7,4,-1}, -{7,4,0}, -{7,4,1}, -{7,4,2}, -{7,4,3}, -{7,4,4}, -{7,4,5}, -{7,4,6}, -{7,4,7}, -{7,4,8}, -{7,4,9}, -{7,4,10}, -{7,5,-22}, -{7,5,-21}, -{7,5,-20}, -{7,5,-19}, -{7,5,-18}, -{7,5,-17}, -{7,5,-16}, -{7,5,-15}, -{7,5,-14}, -{7,5,-13}, -{7,5,-12}, -{7,5,-11}, -{7,5,-10}, -{7,5,-9}, -{7,5,-8}, -{7,5,-7}, -{7,5,-6}, -{7,5,-5}, -{7,5,-4}, -{7,5,-3}, -{7,5,-2}, -{7,5,-1}, -{7,5,0}, -{7,5,1}, -{7,5,2}, -{7,5,3}, -{7,5,4}, -{7,5,5}, -{7,5,6}, -{7,5,7}, -{7,5,8}, -{7,5,9}, -{7,5,10}, -{7,6,-23}, -{7,6,-22}, -{7,6,-21}, -{7,6,-20}, -{7,6,-19}, -{7,6,-18}, -{7,6,-17}, -{7,6,-16}, -{7,6,-15}, -{7,6,-14}, -{7,6,-13}, -{7,6,-12}, -{7,6,-11}, -{7,6,-10}, -{7,6,-9}, -{7,6,-8}, -{7,6,-7}, -{7,6,-6}, -{7,6,-5}, -{7,6,-4}, -{7,6,-3}, -{7,6,-2}, -{7,6,-1}, -{7,6,0}, -{7,6,1}, -{7,6,2}, -{7,6,3}, -{7,6,4}, -{7,6,5}, -{7,6,6}, -{7,6,7}, -{7,6,8}, -{7,6,9}, -{7,6,10}, -{7,7,-24}, -{7,7,-23}, -{7,7,-22}, -{7,7,-21}, -{7,7,-20}, -{7,7,-19}, -{7,7,-18}, -{7,7,-17}, -{7,7,-16}, -{7,7,-15}, -{7,7,-14}, -{7,7,-13}, -{7,7,-12}, -{7,7,-11}, -{7,7,-10}, -{7,7,-9}, -{7,7,-8}, -{7,7,-7}, -{7,7,-6}, -{7,7,-5}, -{7,7,-4}, -{7,7,-3}, -{7,7,-2}, -{7,7,-1}, -{7,7,0}, -{7,7,1}, -{7,7,2}, -{7,7,3}, -{7,7,4}, -{7,7,5}, -{7,7,6}, -{7,7,7}, -{7,7,8}, -{7,7,9}, -{7,7,10}, -{7,8,-25}, -{7,8,-24}, -{7,8,-23}, -{7,8,-22}, -{7,8,-21}, -{7,8,-20}, -{7,8,-19}, -{7,8,-18}, -{7,8,-17}, -{7,8,-16}, -{7,8,-15}, -{7,8,-14}, -{7,8,-13}, -{7,8,-12}, -{7,8,-11}, -{7,8,-10}, -{7,8,-9}, -{7,8,-8}, -{7,8,-7}, -{7,8,-6}, -{7,8,-5}, -{7,8,-4}, -{7,8,-3}, -{7,8,-2}, -{7,8,-1}, -{7,8,0}, -{7,8,1}, -{7,8,2}, -{7,8,3}, -{7,8,4}, -{7,8,5}, -{7,8,6}, -{7,8,7}, -{7,8,8}, -{7,8,9}, -{7,8,10}, -{7,9,-26}, -{7,9,-25}, -{7,9,-24}, -{7,9,-23}, -{7,9,-22}, -{7,9,-21}, -{7,9,-20}, -{7,9,-19}, -{7,9,-18}, -{7,9,-17}, -{7,9,-16}, -{7,9,-15}, -{7,9,-14}, -{7,9,-13}, -{7,9,-12}, -{7,9,-11}, -{7,9,-10}, -{7,9,-9}, -{7,9,-8}, -{7,9,-7}, -{7,9,-6}, -{7,9,-5}, -{7,9,-4}, -{7,9,-3}, -{7,9,-2}, -{7,9,-1}, -{7,9,0}, -{7,9,1}, -{7,9,2}, -{7,9,3}, -{7,9,4}, -{7,9,5}, -{7,9,6}, -{7,9,7}, -{7,9,8}, -{7,9,9}, -{7,9,10}, -{7,10,-27}, -{7,10,-26}, -{7,10,-25}, -{7,10,-24}, -{7,10,-23}, -{7,10,-22}, -{7,10,-21}, -{7,10,-20}, -{7,10,-19}, -{7,10,-18}, -{7,10,-17}, -{7,10,-16}, -{7,10,-15}, -{7,10,-14}, -{7,10,-13}, -{7,10,-12}, -{7,10,-11}, -{7,10,-10}, -{7,10,-9}, -{7,10,-8}, -{7,10,-7}, -{7,10,-6}, -{7,10,-5}, -{7,10,-4}, -{7,10,-3}, -{7,10,-2}, -{7,10,-1}, -{7,10,0}, -{7,10,1}, -{7,10,2}, -{7,10,3}, -{7,10,4}, -{7,10,5}, -{7,10,6}, -{7,10,7}, -{7,10,8}, -{7,10,9}, -{7,10,10}, -{7,11,-28}, -{7,11,-27}, -{7,11,-26}, -{7,11,-25}, -{7,11,-24}, -{7,11,-23}, -{7,11,-22}, -{7,11,-21}, -{7,11,-20}, -{7,11,-19}, -{7,11,-18}, -{7,11,-17}, -{7,11,-16}, -{7,11,-15}, -{7,11,-14}, -{7,11,-13}, -{7,11,-12}, -{7,11,-11}, -{7,11,-10}, -{7,11,-9}, -{7,11,-8}, -{7,11,-7}, -{7,11,-6}, -{7,11,-5}, -{7,11,-4}, -{7,11,-3}, -{7,11,-2}, -{7,11,-1}, -{7,11,0}, -{7,11,1}, -{7,11,2}, -{7,11,3}, -{7,11,4}, -{7,11,5}, -{7,11,6}, -{7,11,7}, -{7,11,8}, -{7,11,9}, -{7,11,10}, -{7,12,-29}, -{7,12,-28}, -{7,12,-27}, -{7,12,-26}, -{7,12,-25}, -{7,12,-24}, -{7,12,-23}, -{7,12,-22}, -{7,12,-21}, -{7,12,-20}, -{7,12,-19}, -{7,12,-18}, -{7,12,-17}, -{7,12,-16}, -{7,12,-15}, -{7,12,-14}, -{7,12,-13}, -{7,12,-12}, -{7,12,-11}, -{7,12,-10}, -{7,12,-9}, -{7,12,-8}, -{7,12,-7}, -{7,12,-6}, -{7,12,-5}, -{7,12,-4}, -{7,12,-3}, -{7,12,-2}, -{7,12,-1}, -{7,12,0}, -{7,12,1}, -{7,12,2}, -{7,12,3}, -{7,12,4}, -{7,12,5}, -{7,12,6}, -{7,12,7}, -{7,12,8}, -{7,12,9}, -{7,12,10}, -{7,13,-30}, -{7,13,-29}, -{7,13,-28}, -{7,13,-27}, -{7,13,-26}, -{7,13,-25}, -{7,13,-24}, -{7,13,-23}, -{7,13,-22}, -{7,13,-21}, -{7,13,-20}, -{7,13,-19}, -{7,13,-18}, -{7,13,-17}, -{7,13,-16}, -{7,13,-15}, -{7,13,-14}, -{7,13,-13}, -{7,13,-12}, -{7,13,-11}, -{7,13,-10}, -{7,13,-9}, -{7,13,-8}, -{7,13,-7}, -{7,13,-6}, -{7,13,-5}, -{7,13,-4}, -{7,13,-3}, -{7,13,-2}, -{7,13,-1}, -{7,13,0}, -{7,13,1}, -{7,13,2}, -{7,13,3}, -{7,13,4}, -{7,13,5}, -{7,13,6}, -{7,13,7}, -{7,13,8}, -{7,13,9}, -{7,13,10}, -{7,14,-31}, -{7,14,-30}, -{7,14,-29}, -{7,14,-28}, -{7,14,-27}, -{7,14,-26}, -{7,14,-25}, -{7,14,-24}, -{7,14,-23}, -{7,14,-22}, -{7,14,-21}, -{7,14,-20}, -{7,14,-19}, -{7,14,-18}, -{7,14,-17}, -{7,14,-16}, -{7,14,-15}, -{7,14,-14}, -{7,14,-13}, -{7,14,-12}, -{7,14,-11}, -{7,14,-10}, -{7,14,-9}, -{7,14,-8}, -{7,14,-7}, -{7,14,-6}, -{7,14,-5}, -{7,14,-4}, -{7,14,-3}, -{7,14,-2}, -{7,14,-1}, -{7,14,0}, -{7,14,1}, -{7,14,2}, -{7,14,3}, -{7,14,4}, -{7,14,5}, -{7,14,6}, -{7,14,7}, -{7,14,8}, -{7,14,9}, -{7,14,10}, -{7,15,-31}, -{7,15,-30}, -{7,15,-29}, -{7,15,-28}, -{7,15,-27}, -{7,15,-26}, -{7,15,-25}, -{7,15,-24}, -{7,15,-23}, -{7,15,-22}, -{7,15,-21}, -{7,15,-20}, -{7,15,-19}, -{7,15,-18}, -{7,15,-17}, -{7,15,-16}, -{7,15,-15}, -{7,15,-14}, -{7,15,-13}, -{7,15,-12}, -{7,15,-11}, -{7,15,-10}, -{7,15,-9}, -{7,15,-8}, -{7,15,-7}, -{7,15,-6}, -{7,15,-5}, -{7,15,-4}, -{7,15,-3}, -{7,15,-2}, -{7,15,-1}, -{7,15,0}, -{7,15,1}, -{7,15,2}, -{7,15,3}, -{7,15,4}, -{7,15,5}, -{7,15,6}, -{7,15,7}, -{7,15,8}, -{7,15,9}, -{7,15,10}, -{7,16,-32}, -{7,16,-31}, -{7,16,-30}, -{7,16,-29}, -{7,16,-28}, -{7,16,-27}, -{7,16,-26}, -{7,16,-25}, -{7,16,-24}, -{7,16,-23}, -{7,16,-22}, -{7,16,-21}, -{7,16,-20}, -{7,16,-19}, -{7,16,-18}, -{7,16,-17}, -{7,16,-16}, -{7,16,-15}, -{7,16,-14}, -{7,16,-13}, -{7,16,-12}, -{7,16,-11}, -{7,16,-10}, -{7,16,-9}, -{7,16,-8}, -{7,16,-7}, -{7,16,-6}, -{7,16,-5}, -{7,16,-4}, -{7,16,-3}, -{7,16,-2}, -{7,16,-1}, -{7,16,0}, -{7,16,1}, -{7,16,2}, -{7,16,3}, -{7,16,4}, -{7,16,5}, -{7,16,6}, -{7,16,7}, -{7,16,8}, -{7,16,9}, -{7,16,10}, -{7,17,-33}, -{7,17,-32}, -{7,17,-31}, -{7,17,-30}, -{7,17,-29}, -{7,17,-28}, -{7,17,-27}, -{7,17,-26}, -{7,17,-25}, -{7,17,-24}, -{7,17,-23}, -{7,17,-22}, -{7,17,-21}, -{7,17,-20}, -{7,17,-19}, -{7,17,-18}, -{7,17,-17}, -{7,17,-16}, -{7,17,-15}, -{7,17,-14}, -{7,17,-13}, -{7,17,-12}, -{7,17,-11}, -{7,17,-10}, -{7,17,-9}, -{7,17,-8}, -{7,17,-7}, -{7,17,-6}, -{7,17,-5}, -{7,17,-4}, -{7,17,-3}, -{7,17,-2}, -{7,17,-1}, -{7,17,0}, -{7,17,1}, -{7,17,2}, -{7,17,3}, -{7,17,4}, -{7,17,5}, -{7,17,6}, -{7,17,7}, -{7,17,8}, -{7,17,9}, -{7,17,10}, -{7,18,-34}, -{7,18,-33}, -{7,18,-32}, -{7,18,-31}, -{7,18,-30}, -{7,18,-29}, -{7,18,-28}, -{7,18,-27}, -{7,18,-26}, -{7,18,-25}, -{7,18,-24}, -{7,18,-23}, -{7,18,-22}, -{7,18,-21}, -{7,18,-20}, -{7,18,-19}, -{7,18,-18}, -{7,18,-17}, -{7,18,-16}, -{7,18,-15}, -{7,18,-14}, -{7,18,-13}, -{7,18,-12}, -{7,18,-11}, -{7,18,-10}, -{7,18,-9}, -{7,18,-8}, -{7,18,-7}, -{7,18,-6}, -{7,18,-5}, -{7,18,-4}, -{7,18,-3}, -{7,18,-2}, -{7,18,-1}, -{7,18,0}, -{7,18,1}, -{7,18,2}, -{7,18,3}, -{7,18,4}, -{7,18,5}, -{7,18,6}, -{7,18,7}, -{7,18,8}, -{7,18,9}, -{7,18,10}, -{7,18,11}, -{7,19,-35}, -{7,19,-34}, -{7,19,-33}, -{7,19,-32}, -{7,19,-31}, -{7,19,-30}, -{7,19,-29}, -{7,19,-28}, -{7,19,-27}, -{7,19,-26}, -{7,19,-25}, -{7,19,-24}, -{7,19,-23}, -{7,19,-22}, -{7,19,-21}, -{7,19,-20}, -{7,19,-19}, -{7,19,-18}, -{7,19,-17}, -{7,19,-16}, -{7,19,-15}, -{7,19,-14}, -{7,19,-13}, -{7,19,-12}, -{7,19,-11}, -{7,19,-10}, -{7,19,-9}, -{7,19,-8}, -{7,19,-7}, -{7,19,-6}, -{7,19,-5}, -{7,19,-4}, -{7,19,-3}, -{7,19,-2}, -{7,19,-1}, -{7,19,0}, -{7,19,1}, -{7,19,2}, -{7,19,3}, -{7,19,4}, -{7,19,5}, -{7,19,6}, -{7,19,7}, -{7,19,8}, -{7,19,9}, -{7,19,10}, -{7,19,11}, -{7,20,-36}, -{7,20,-35}, -{7,20,-34}, -{7,20,-33}, -{7,20,-32}, -{7,20,-31}, -{7,20,-30}, -{7,20,-29}, -{7,20,-28}, -{7,20,-27}, -{7,20,-26}, -{7,20,-25}, -{7,20,-24}, -{7,20,-23}, -{7,20,-22}, -{7,20,-21}, -{7,20,-20}, -{7,20,-19}, -{7,20,-18}, -{7,20,-17}, -{7,20,-16}, -{7,20,-15}, -{7,20,-14}, -{7,20,-13}, -{7,20,-12}, -{7,20,-11}, -{7,20,-10}, -{7,20,-9}, -{7,20,-8}, -{7,20,-7}, -{7,20,-6}, -{7,20,-5}, -{7,20,-4}, -{7,20,-3}, -{7,20,-2}, -{7,20,-1}, -{7,20,0}, -{7,20,1}, -{7,20,2}, -{7,20,3}, -{7,20,4}, -{7,20,5}, -{7,20,6}, -{7,20,7}, -{7,20,8}, -{7,20,9}, -{7,20,10}, -{7,20,11}, -{7,21,-37}, -{7,21,-36}, -{7,21,-35}, -{7,21,-34}, -{7,21,-33}, -{7,21,-32}, -{7,21,-31}, -{7,21,-30}, -{7,21,-29}, -{7,21,-28}, -{7,21,-27}, -{7,21,-26}, -{7,21,-25}, -{7,21,-24}, -{7,21,-23}, -{7,21,-22}, -{7,21,-21}, -{7,21,-20}, -{7,21,-19}, -{7,21,-18}, -{7,21,-17}, -{7,21,-16}, -{7,21,-15}, -{7,21,-14}, -{7,21,-13}, -{7,21,-12}, -{7,21,-11}, -{7,21,-10}, -{7,21,-9}, -{7,21,-8}, -{7,21,-7}, -{7,21,-6}, -{7,21,-5}, -{7,21,-4}, -{7,21,-3}, -{7,21,-2}, -{7,21,-1}, -{7,21,0}, -{7,21,1}, -{7,21,2}, -{7,21,3}, -{7,21,4}, -{7,21,5}, -{7,21,6}, -{7,21,7}, -{7,21,8}, -{7,21,9}, -{7,21,10}, -{7,21,11}, -{7,22,-38}, -{7,22,-37}, -{7,22,-36}, -{7,22,-35}, -{7,22,-34}, -{7,22,-33}, -{7,22,-32}, -{7,22,-31}, -{7,22,-30}, -{7,22,-29}, -{7,22,-28}, -{7,22,-27}, -{7,22,-26}, -{7,22,-25}, -{7,22,-24}, -{7,22,-23}, -{7,22,-22}, -{7,22,-21}, -{7,22,-20}, -{7,22,-19}, -{7,22,-18}, -{7,22,-17}, -{7,22,-16}, -{7,22,-15}, -{7,22,-14}, -{7,22,-13}, -{7,22,-12}, -{7,22,-11}, -{7,22,-10}, -{7,22,-9}, -{7,22,-8}, -{7,22,-7}, -{7,22,-6}, -{7,22,-5}, -{7,22,-4}, -{7,22,-3}, -{7,22,-2}, -{7,22,-1}, -{7,22,0}, -{7,22,1}, -{7,22,2}, -{7,22,3}, -{7,22,4}, -{7,22,5}, -{7,22,6}, -{7,22,7}, -{7,22,8}, -{7,22,9}, -{7,22,10}, -{7,22,11}, -{7,23,-39}, -{7,23,-38}, -{7,23,-37}, -{7,23,-36}, -{7,23,-35}, -{7,23,-34}, -{7,23,-33}, -{7,23,-32}, -{7,23,-31}, -{7,23,-30}, -{7,23,-29}, -{7,23,-28}, -{7,23,-27}, -{7,23,-26}, -{7,23,-25}, -{7,23,-24}, -{7,23,-23}, -{7,23,-22}, -{7,23,-21}, -{7,23,-20}, -{7,23,-19}, -{7,23,-18}, -{7,23,-17}, -{7,23,-16}, -{7,23,-15}, -{7,23,-14}, -{7,23,-13}, -{7,23,-12}, -{7,23,-11}, -{7,23,-10}, -{7,23,-9}, -{7,23,-8}, -{7,23,-7}, -{7,23,-6}, -{7,23,-5}, -{7,23,-4}, -{7,23,-3}, -{7,23,-2}, -{7,23,-1}, -{7,23,0}, -{7,23,1}, -{7,23,2}, -{7,23,3}, -{7,23,4}, -{7,23,5}, -{7,23,6}, -{7,23,7}, -{7,23,8}, -{7,23,9}, -{7,23,10}, -{7,23,11}, -{7,24,-40}, -{7,24,-39}, -{7,24,-38}, -{7,24,-37}, -{7,24,-36}, -{7,24,-35}, -{7,24,-34}, -{7,24,-33}, -{7,24,-32}, -{7,24,-31}, -{7,24,-30}, -{7,24,-29}, -{7,24,-28}, -{7,24,-27}, -{7,24,-26}, -{7,24,-25}, -{7,24,-24}, -{7,24,-23}, -{7,24,-22}, -{7,24,-21}, -{7,24,-20}, -{7,24,-19}, -{7,24,-18}, -{7,24,-17}, -{7,24,-16}, -{7,24,-15}, -{7,24,-14}, -{7,24,-13}, -{7,24,-12}, -{7,24,-11}, -{7,24,-10}, -{7,24,-9}, -{7,24,-8}, -{7,24,-7}, -{7,24,-6}, -{7,24,-5}, -{7,24,-4}, -{7,24,-3}, -{7,24,-2}, -{7,24,-1}, -{7,24,0}, -{7,24,1}, -{7,24,2}, -{7,24,3}, -{7,24,4}, -{7,24,5}, -{7,24,6}, -{7,24,7}, -{7,24,8}, -{7,24,9}, -{7,24,10}, -{7,24,11}, -{7,25,-40}, -{7,25,-39}, -{7,25,-38}, -{7,25,-37}, -{7,25,-36}, -{7,25,-35}, -{7,25,-34}, -{7,25,-33}, -{7,25,-32}, -{7,25,-31}, -{7,25,-30}, -{7,25,-29}, -{7,25,-28}, -{7,25,-27}, -{7,25,-26}, -{7,25,-25}, -{7,25,-24}, -{7,25,-23}, -{7,25,-22}, -{7,25,-21}, -{7,25,-20}, -{7,25,-19}, -{7,25,-18}, -{7,25,-17}, -{7,25,-16}, -{7,25,-15}, -{7,25,-14}, -{7,25,-13}, -{7,25,-12}, -{7,25,-11}, -{7,25,-10}, -{7,25,-9}, -{7,25,-8}, -{7,25,-7}, -{7,25,-6}, -{7,25,-5}, -{7,25,-4}, -{7,25,-3}, -{7,25,-2}, -{7,25,-1}, -{7,25,0}, -{7,25,1}, -{7,25,2}, -{7,25,3}, -{7,25,4}, -{7,25,5}, -{7,25,6}, -{7,25,7}, -{7,25,8}, -{7,25,9}, -{7,25,10}, -{7,25,11}, -{7,26,-41}, -{7,26,-40}, -{7,26,-39}, -{7,26,-38}, -{7,26,-37}, -{7,26,-36}, -{7,26,-35}, -{7,26,-34}, -{7,26,-33}, -{7,26,-32}, -{7,26,-31}, -{7,26,-30}, -{7,26,-29}, -{7,26,-28}, -{7,26,-27}, -{7,26,-26}, -{7,26,-25}, -{7,26,-24}, -{7,26,-23}, -{7,26,-22}, -{7,26,-21}, -{7,26,-20}, -{7,26,-19}, -{7,26,-18}, -{7,26,-17}, -{7,26,-16}, -{7,26,-15}, -{7,26,-14}, -{7,26,-13}, -{7,26,-12}, -{7,26,-11}, -{7,26,-10}, -{7,26,-9}, -{7,26,-8}, -{7,26,-7}, -{7,26,-6}, -{7,26,-5}, -{7,26,-4}, -{7,26,-3}, -{7,26,-2}, -{7,26,-1}, -{7,26,0}, -{7,26,1}, -{7,26,2}, -{7,26,3}, -{7,26,4}, -{7,26,5}, -{7,26,6}, -{7,26,7}, -{7,26,8}, -{7,26,9}, -{7,26,10}, -{7,26,11}, -{7,27,-42}, -{7,27,-41}, -{7,27,-40}, -{7,27,-39}, -{7,27,-38}, -{7,27,-37}, -{7,27,-36}, -{7,27,-35}, -{7,27,-34}, -{7,27,-33}, -{7,27,-32}, -{7,27,-31}, -{7,27,-30}, -{7,27,-29}, -{7,27,-28}, -{7,27,-27}, -{7,27,-26}, -{7,27,-25}, -{7,27,-24}, -{7,27,-23}, -{7,27,-22}, -{7,27,-21}, -{7,27,-20}, -{7,27,-19}, -{7,27,-18}, -{7,27,-17}, -{7,27,-16}, -{7,27,-15}, -{7,27,-14}, -{7,27,-13}, -{7,27,-12}, -{7,27,-11}, -{7,27,-10}, -{7,27,-9}, -{7,27,-8}, -{7,27,-7}, -{7,27,-6}, -{7,27,-5}, -{7,27,-4}, -{7,27,-3}, -{7,27,-2}, -{7,27,-1}, -{7,27,0}, -{7,27,1}, -{7,27,2}, -{7,27,3}, -{7,27,4}, -{7,27,5}, -{7,28,-43}, -{7,28,-42}, -{7,28,-41}, -{7,28,-40}, -{7,28,-39}, -{7,28,-38}, -{7,28,-37}, -{7,28,-36}, -{7,28,-35}, -{7,28,-34}, -{7,28,-33}, -{7,28,-32}, -{7,28,-31}, -{7,28,-30}, -{7,28,-29}, -{7,28,-28}, -{7,28,-27}, -{7,28,-26}, -{7,28,-25}, -{7,28,-24}, -{7,28,-23}, -{7,28,-22}, -{7,28,-21}, -{7,28,-20}, -{7,28,-19}, -{7,28,-18}, -{7,28,-17}, -{7,28,-16}, -{7,28,-15}, -{7,28,-14}, -{7,28,-13}, -{7,28,-12}, -{7,28,-11}, -{7,28,-10}, -{7,28,-9}, -{7,28,-8}, -{7,28,-7}, -{7,29,-44}, -{7,29,-43}, -{7,29,-42}, -{7,29,-41}, -{7,29,-40}, -{7,29,-39}, -{7,29,-38}, -{7,29,-37}, -{7,29,-36}, -{7,29,-35}, -{7,29,-34}, -{7,29,-33}, -{7,29,-32}, -{7,29,-31}, -{7,29,-30}, -{7,29,-29}, -{7,29,-28}, -{7,29,-27}, -{7,29,-26}, -{7,29,-25}, -{7,29,-24}, -{7,29,-23}, -{7,29,-22}, -{7,29,-21}, -{7,29,-20}, -{7,29,-19}, -{7,29,-18}, -{7,29,-17}, -{7,29,-16}, -{7,29,-15}, -{7,30,-45}, -{7,30,-44}, -{7,30,-43}, -{7,30,-42}, -{7,30,-41}, -{7,30,-40}, -{7,30,-39}, -{7,30,-38}, -{7,30,-37}, -{7,30,-36}, -{7,30,-35}, -{7,30,-34}, -{7,30,-33}, -{7,30,-32}, -{7,30,-31}, -{7,30,-30}, -{7,30,-29}, -{7,30,-28}, -{7,30,-27}, -{7,30,-26}, -{7,30,-25}, -{7,30,-24}, -{7,30,-23}, -{7,30,-22}, -{7,31,-46}, -{7,31,-45}, -{7,31,-44}, -{7,31,-43}, -{7,31,-42}, -{7,31,-41}, -{7,31,-40}, -{7,31,-39}, -{7,31,-38}, -{7,31,-37}, -{7,31,-36}, -{7,31,-35}, -{7,31,-34}, -{7,31,-33}, -{7,31,-32}, -{7,31,-31}, -{7,31,-30}, -{7,31,-29}, -{7,31,-28}, -{7,31,-27}, -{7,32,-46}, -{7,32,-45}, -{7,32,-44}, -{7,32,-43}, -{7,32,-42}, -{7,32,-41}, -{7,32,-40}, -{7,32,-39}, -{7,32,-38}, -{7,32,-37}, -{7,32,-36}, -{7,32,-35}, -{7,32,-34}, -{7,32,-33}, -{7,32,-32}, -{7,33,-47}, -{7,33,-46}, -{7,33,-45}, -{7,33,-44}, -{7,33,-43}, -{7,33,-42}, -{7,33,-41}, -{7,33,-40}, -{7,33,-39}, -{7,33,-38}, -{7,33,-37}, -{7,33,-36}, -{7,34,-48}, -{7,34,-47}, -{7,34,-46}, -{7,34,-45}, -{7,34,-44}, -{7,34,-43}, -{7,34,-42}, -{7,34,-41}, -{7,34,-40}, -{7,35,-49}, -{7,35,-48}, -{7,35,-47}, -{7,35,-46}, -{7,35,-45}, -{7,35,-44}, -{7,36,-50}, -{7,36,-49}, -{7,36,-48}, -{7,36,-47}, -{7,37,-50}, -{8,-16,11}, -{8,-15,9}, -{8,-15,10}, -{8,-15,11}, -{8,-14,6}, -{8,-14,7}, -{8,-14,8}, -{8,-14,9}, -{8,-14,10}, -{8,-14,11}, -{8,-13,4}, -{8,-13,5}, -{8,-13,6}, -{8,-13,7}, -{8,-13,8}, -{8,-13,9}, -{8,-13,10}, -{8,-13,11}, -{8,-12,2}, -{8,-12,3}, -{8,-12,4}, -{8,-12,5}, -{8,-12,6}, -{8,-12,7}, -{8,-12,8}, -{8,-12,9}, -{8,-12,10}, -{8,-12,11}, -{8,-11,0}, -{8,-11,1}, -{8,-11,2}, -{8,-11,3}, -{8,-11,4}, -{8,-11,5}, -{8,-11,6}, -{8,-11,7}, -{8,-11,8}, -{8,-11,9}, -{8,-11,10}, -{8,-11,11}, -{8,-10,-2}, -{8,-10,-1}, -{8,-10,0}, -{8,-10,1}, -{8,-10,2}, -{8,-10,3}, -{8,-10,4}, -{8,-10,5}, -{8,-10,6}, -{8,-10,7}, -{8,-10,8}, -{8,-10,9}, -{8,-10,10}, -{8,-10,11}, -{8,-9,-4}, -{8,-9,-3}, -{8,-9,-2}, -{8,-9,-1}, -{8,-9,0}, -{8,-9,1}, -{8,-9,2}, -{8,-9,3}, -{8,-9,4}, -{8,-9,5}, -{8,-9,6}, -{8,-9,7}, -{8,-9,8}, -{8,-9,9}, -{8,-9,10}, -{8,-9,11}, -{8,-8,-6}, -{8,-8,-5}, -{8,-8,-4}, -{8,-8,-3}, -{8,-8,-2}, -{8,-8,-1}, -{8,-8,0}, -{8,-8,1}, -{8,-8,2}, -{8,-8,3}, -{8,-8,4}, -{8,-8,5}, -{8,-8,6}, -{8,-8,7}, -{8,-8,8}, -{8,-8,9}, -{8,-8,10}, -{8,-8,11}, -{8,-7,-8}, -{8,-7,-7}, -{8,-7,-6}, -{8,-7,-5}, -{8,-7,-4}, -{8,-7,-3}, -{8,-7,-2}, -{8,-7,-1}, -{8,-7,0}, -{8,-7,1}, -{8,-7,2}, -{8,-7,3}, -{8,-7,4}, -{8,-7,5}, -{8,-7,6}, -{8,-7,7}, -{8,-7,8}, -{8,-7,9}, -{8,-7,10}, -{8,-7,11}, -{8,-7,12}, -{8,-6,-9}, -{8,-6,-8}, -{8,-6,-7}, -{8,-6,-6}, -{8,-6,-5}, -{8,-6,-4}, -{8,-6,-3}, -{8,-6,-2}, -{8,-6,-1}, -{8,-6,0}, -{8,-6,1}, -{8,-6,2}, -{8,-6,3}, -{8,-6,4}, -{8,-6,5}, -{8,-6,6}, -{8,-6,7}, -{8,-6,8}, -{8,-6,9}, -{8,-6,10}, -{8,-6,11}, -{8,-6,12}, -{8,-5,-11}, -{8,-5,-10}, -{8,-5,-9}, -{8,-5,-8}, -{8,-5,-7}, -{8,-5,-6}, -{8,-5,-5}, -{8,-5,-4}, -{8,-5,-3}, -{8,-5,-2}, -{8,-5,-1}, -{8,-5,0}, -{8,-5,1}, -{8,-5,2}, -{8,-5,3}, -{8,-5,4}, -{8,-5,5}, -{8,-5,6}, -{8,-5,7}, -{8,-5,8}, -{8,-5,9}, -{8,-5,10}, -{8,-5,11}, -{8,-5,12}, -{8,-4,-12}, -{8,-4,-11}, -{8,-4,-10}, -{8,-4,-9}, -{8,-4,-8}, -{8,-4,-7}, -{8,-4,-6}, -{8,-4,-5}, -{8,-4,-4}, -{8,-4,-3}, -{8,-4,-2}, -{8,-4,-1}, -{8,-4,0}, -{8,-4,1}, -{8,-4,2}, -{8,-4,3}, -{8,-4,4}, -{8,-4,5}, -{8,-4,6}, -{8,-4,7}, -{8,-4,8}, -{8,-4,9}, -{8,-4,10}, -{8,-4,11}, -{8,-4,12}, -{8,-3,-13}, -{8,-3,-12}, -{8,-3,-11}, -{8,-3,-10}, -{8,-3,-9}, -{8,-3,-8}, -{8,-3,-7}, -{8,-3,-6}, -{8,-3,-5}, -{8,-3,-4}, -{8,-3,-3}, -{8,-3,-2}, -{8,-3,-1}, -{8,-3,0}, -{8,-3,1}, -{8,-3,2}, -{8,-3,3}, -{8,-3,4}, -{8,-3,5}, -{8,-3,6}, -{8,-3,7}, -{8,-3,8}, -{8,-3,9}, -{8,-3,10}, -{8,-3,11}, -{8,-3,12}, -{8,-2,-15}, -{8,-2,-14}, -{8,-2,-13}, -{8,-2,-12}, -{8,-2,-11}, -{8,-2,-10}, -{8,-2,-9}, -{8,-2,-8}, -{8,-2,-7}, -{8,-2,-6}, -{8,-2,-5}, -{8,-2,-4}, -{8,-2,-3}, -{8,-2,-2}, -{8,-2,-1}, -{8,-2,0}, -{8,-2,1}, -{8,-2,2}, -{8,-2,3}, -{8,-2,4}, -{8,-2,5}, -{8,-2,6}, -{8,-2,7}, -{8,-2,8}, -{8,-2,9}, -{8,-2,10}, -{8,-2,11}, -{8,-2,12}, -{8,-1,-16}, -{8,-1,-15}, -{8,-1,-14}, -{8,-1,-13}, -{8,-1,-12}, -{8,-1,-11}, -{8,-1,-10}, -{8,-1,-9}, -{8,-1,-8}, -{8,-1,-7}, -{8,-1,-6}, -{8,-1,-5}, -{8,-1,-4}, -{8,-1,-3}, -{8,-1,-2}, -{8,-1,-1}, -{8,-1,0}, -{8,-1,1}, -{8,-1,2}, -{8,-1,3}, -{8,-1,4}, -{8,-1,5}, -{8,-1,6}, -{8,-1,7}, -{8,-1,8}, -{8,-1,9}, -{8,-1,10}, -{8,-1,11}, -{8,-1,12}, -{8,0,-17}, -{8,0,-16}, -{8,0,-15}, -{8,0,-14}, -{8,0,-13}, -{8,0,-12}, -{8,0,-11}, -{8,0,-10}, -{8,0,-9}, -{8,0,-8}, -{8,0,-7}, -{8,0,-6}, -{8,0,-5}, -{8,0,-4}, -{8,0,-3}, -{8,0,-2}, -{8,0,-1}, -{8,0,0}, -{8,0,1}, -{8,0,2}, -{8,0,3}, -{8,0,4}, -{8,0,5}, -{8,0,6}, -{8,0,7}, -{8,0,8}, -{8,0,9}, -{8,0,10}, -{8,0,11}, -{8,0,12}, -{8,1,-18}, -{8,1,-17}, -{8,1,-16}, -{8,1,-15}, -{8,1,-14}, -{8,1,-13}, -{8,1,-12}, -{8,1,-11}, -{8,1,-10}, -{8,1,-9}, -{8,1,-8}, -{8,1,-7}, -{8,1,-6}, -{8,1,-5}, -{8,1,-4}, -{8,1,-3}, -{8,1,-2}, -{8,1,-1}, -{8,1,0}, -{8,1,1}, -{8,1,2}, -{8,1,3}, -{8,1,4}, -{8,1,5}, -{8,1,6}, -{8,1,7}, -{8,1,8}, -{8,1,9}, -{8,1,10}, -{8,1,11}, -{8,1,12}, -{8,2,-19}, -{8,2,-18}, -{8,2,-17}, -{8,2,-16}, -{8,2,-15}, -{8,2,-14}, -{8,2,-13}, -{8,2,-12}, -{8,2,-11}, -{8,2,-10}, -{8,2,-9}, -{8,2,-8}, -{8,2,-7}, -{8,2,-6}, -{8,2,-5}, -{8,2,-4}, -{8,2,-3}, -{8,2,-2}, -{8,2,-1}, -{8,2,0}, -{8,2,1}, -{8,2,2}, -{8,2,3}, -{8,2,4}, -{8,2,5}, -{8,2,6}, -{8,2,7}, -{8,2,8}, -{8,2,9}, -{8,2,10}, -{8,2,11}, -{8,2,12}, -{8,3,-20}, -{8,3,-19}, -{8,3,-18}, -{8,3,-17}, -{8,3,-16}, -{8,3,-15}, -{8,3,-14}, -{8,3,-13}, -{8,3,-12}, -{8,3,-11}, -{8,3,-10}, -{8,3,-9}, -{8,3,-8}, -{8,3,-7}, -{8,3,-6}, -{8,3,-5}, -{8,3,-4}, -{8,3,-3}, -{8,3,-2}, -{8,3,-1}, -{8,3,0}, -{8,3,1}, -{8,3,2}, -{8,3,3}, -{8,3,4}, -{8,3,5}, -{8,3,6}, -{8,3,7}, -{8,3,8}, -{8,3,9}, -{8,3,10}, -{8,3,11}, -{8,3,12}, -{8,4,-21}, -{8,4,-20}, -{8,4,-19}, -{8,4,-18}, -{8,4,-17}, -{8,4,-16}, -{8,4,-15}, -{8,4,-14}, -{8,4,-13}, -{8,4,-12}, -{8,4,-11}, -{8,4,-10}, -{8,4,-9}, -{8,4,-8}, -{8,4,-7}, -{8,4,-6}, -{8,4,-5}, -{8,4,-4}, -{8,4,-3}, -{8,4,-2}, -{8,4,-1}, -{8,4,0}, -{8,4,1}, -{8,4,2}, -{8,4,3}, -{8,4,4}, -{8,4,5}, -{8,4,6}, -{8,4,7}, -{8,4,8}, -{8,4,9}, -{8,4,10}, -{8,4,11}, -{8,4,12}, -{8,5,-22}, -{8,5,-21}, -{8,5,-20}, -{8,5,-19}, -{8,5,-18}, -{8,5,-17}, -{8,5,-16}, -{8,5,-15}, -{8,5,-14}, -{8,5,-13}, -{8,5,-12}, -{8,5,-11}, -{8,5,-10}, -{8,5,-9}, -{8,5,-8}, -{8,5,-7}, -{8,5,-6}, -{8,5,-5}, -{8,5,-4}, -{8,5,-3}, -{8,5,-2}, -{8,5,-1}, -{8,5,0}, -{8,5,1}, -{8,5,2}, -{8,5,3}, -{8,5,4}, -{8,5,5}, -{8,5,6}, -{8,5,7}, -{8,5,8}, -{8,5,9}, -{8,5,10}, -{8,5,11}, -{8,5,12}, -{8,6,-23}, -{8,6,-22}, -{8,6,-21}, -{8,6,-20}, -{8,6,-19}, -{8,6,-18}, -{8,6,-17}, -{8,6,-16}, -{8,6,-15}, -{8,6,-14}, -{8,6,-13}, -{8,6,-12}, -{8,6,-11}, -{8,6,-10}, -{8,6,-9}, -{8,6,-8}, -{8,6,-7}, -{8,6,-6}, -{8,6,-5}, -{8,6,-4}, -{8,6,-3}, -{8,6,-2}, -{8,6,-1}, -{8,6,0}, -{8,6,1}, -{8,6,2}, -{8,6,3}, -{8,6,4}, -{8,6,5}, -{8,6,6}, -{8,6,7}, -{8,6,8}, -{8,6,9}, -{8,6,10}, -{8,6,11}, -{8,6,12}, -{8,7,-24}, -{8,7,-23}, -{8,7,-22}, -{8,7,-21}, -{8,7,-20}, -{8,7,-19}, -{8,7,-18}, -{8,7,-17}, -{8,7,-16}, -{8,7,-15}, -{8,7,-14}, -{8,7,-13}, -{8,7,-12}, -{8,7,-11}, -{8,7,-10}, -{8,7,-9}, -{8,7,-8}, -{8,7,-7}, -{8,7,-6}, -{8,7,-5}, -{8,7,-4}, -{8,7,-3}, -{8,7,-2}, -{8,7,-1}, -{8,7,0}, -{8,7,1}, -{8,7,2}, -{8,7,3}, -{8,7,4}, -{8,7,5}, -{8,7,6}, -{8,7,7}, -{8,7,8}, -{8,7,9}, -{8,7,10}, -{8,7,11}, -{8,7,12}, -{8,8,-25}, -{8,8,-24}, -{8,8,-23}, -{8,8,-22}, -{8,8,-21}, -{8,8,-20}, -{8,8,-19}, -{8,8,-18}, -{8,8,-17}, -{8,8,-16}, -{8,8,-15}, -{8,8,-14}, -{8,8,-13}, -{8,8,-12}, -{8,8,-11}, -{8,8,-10}, -{8,8,-9}, -{8,8,-8}, -{8,8,-7}, -{8,8,-6}, -{8,8,-5}, -{8,8,-4}, -{8,8,-3}, -{8,8,-2}, -{8,8,-1}, -{8,8,0}, -{8,8,1}, -{8,8,2}, -{8,8,3}, -{8,8,4}, -{8,8,5}, -{8,8,6}, -{8,8,7}, -{8,8,8}, -{8,8,9}, -{8,8,10}, -{8,8,11}, -{8,8,12}, -{8,9,-26}, -{8,9,-25}, -{8,9,-24}, -{8,9,-23}, -{8,9,-22}, -{8,9,-21}, -{8,9,-20}, -{8,9,-19}, -{8,9,-18}, -{8,9,-17}, -{8,9,-16}, -{8,9,-15}, -{8,9,-14}, -{8,9,-13}, -{8,9,-12}, -{8,9,-11}, -{8,9,-10}, -{8,9,-9}, -{8,9,-8}, -{8,9,-7}, -{8,9,-6}, -{8,9,-5}, -{8,9,-4}, -{8,9,-3}, -{8,9,-2}, -{8,9,-1}, -{8,9,0}, -{8,9,1}, -{8,9,2}, -{8,9,3}, -{8,9,4}, -{8,9,5}, -{8,9,6}, -{8,9,7}, -{8,9,8}, -{8,9,9}, -{8,9,10}, -{8,9,11}, -{8,9,12}, -{8,10,-27}, -{8,10,-26}, -{8,10,-25}, -{8,10,-24}, -{8,10,-23}, -{8,10,-22}, -{8,10,-21}, -{8,10,-20}, -{8,10,-19}, -{8,10,-18}, -{8,10,-17}, -{8,10,-16}, -{8,10,-15}, -{8,10,-14}, -{8,10,-13}, -{8,10,-12}, -{8,10,-11}, -{8,10,-10}, -{8,10,-9}, -{8,10,-8}, -{8,10,-7}, -{8,10,-6}, -{8,10,-5}, -{8,10,-4}, -{8,10,-3}, -{8,10,-2}, -{8,10,-1}, -{8,10,0}, -{8,10,1}, -{8,10,2}, -{8,10,3}, -{8,10,4}, -{8,10,5}, -{8,10,6}, -{8,10,7}, -{8,10,8}, -{8,10,9}, -{8,10,10}, -{8,10,11}, -{8,10,12}, -{8,11,-28}, -{8,11,-27}, -{8,11,-26}, -{8,11,-25}, -{8,11,-24}, -{8,11,-23}, -{8,11,-22}, -{8,11,-21}, -{8,11,-20}, -{8,11,-19}, -{8,11,-18}, -{8,11,-17}, -{8,11,-16}, -{8,11,-15}, -{8,11,-14}, -{8,11,-13}, -{8,11,-12}, -{8,11,-11}, -{8,11,-10}, -{8,11,-9}, -{8,11,-8}, -{8,11,-7}, -{8,11,-6}, -{8,11,-5}, -{8,11,-4}, -{8,11,-3}, -{8,11,-2}, -{8,11,-1}, -{8,11,0}, -{8,11,1}, -{8,11,2}, -{8,11,3}, -{8,11,4}, -{8,11,5}, -{8,11,6}, -{8,11,7}, -{8,11,8}, -{8,11,9}, -{8,11,10}, -{8,11,11}, -{8,11,12}, -{8,12,-29}, -{8,12,-28}, -{8,12,-27}, -{8,12,-26}, -{8,12,-25}, -{8,12,-24}, -{8,12,-23}, -{8,12,-22}, -{8,12,-21}, -{8,12,-20}, -{8,12,-19}, -{8,12,-18}, -{8,12,-17}, -{8,12,-16}, -{8,12,-15}, -{8,12,-14}, -{8,12,-13}, -{8,12,-12}, -{8,12,-11}, -{8,12,-10}, -{8,12,-9}, -{8,12,-8}, -{8,12,-7}, -{8,12,-6}, -{8,12,-5}, -{8,12,-4}, -{8,12,-3}, -{8,12,-2}, -{8,12,-1}, -{8,12,0}, -{8,12,1}, -{8,12,2}, -{8,12,3}, -{8,12,4}, -{8,12,5}, -{8,12,6}, -{8,12,7}, -{8,12,8}, -{8,12,9}, -{8,12,10}, -{8,12,11}, -{8,12,12}, -{8,13,-30}, -{8,13,-29}, -{8,13,-28}, -{8,13,-27}, -{8,13,-26}, -{8,13,-25}, -{8,13,-24}, -{8,13,-23}, -{8,13,-22}, -{8,13,-21}, -{8,13,-20}, -{8,13,-19}, -{8,13,-18}, -{8,13,-17}, -{8,13,-16}, -{8,13,-15}, -{8,13,-14}, -{8,13,-13}, -{8,13,-12}, -{8,13,-11}, -{8,13,-10}, -{8,13,-9}, -{8,13,-8}, -{8,13,-7}, -{8,13,-6}, -{8,13,-5}, -{8,13,-4}, -{8,13,-3}, -{8,13,-2}, -{8,13,-1}, -{8,13,0}, -{8,13,1}, -{8,13,2}, -{8,13,3}, -{8,13,4}, -{8,13,5}, -{8,13,6}, -{8,13,7}, -{8,13,8}, -{8,13,9}, -{8,13,10}, -{8,13,11}, -{8,13,12}, -{8,14,-31}, -{8,14,-30}, -{8,14,-29}, -{8,14,-28}, -{8,14,-27}, -{8,14,-26}, -{8,14,-25}, -{8,14,-24}, -{8,14,-23}, -{8,14,-22}, -{8,14,-21}, -{8,14,-20}, -{8,14,-19}, -{8,14,-18}, -{8,14,-17}, -{8,14,-16}, -{8,14,-15}, -{8,14,-14}, -{8,14,-13}, -{8,14,-12}, -{8,14,-11}, -{8,14,-10}, -{8,14,-9}, -{8,14,-8}, -{8,14,-7}, -{8,14,-6}, -{8,14,-5}, -{8,14,-4}, -{8,14,-3}, -{8,14,-2}, -{8,14,-1}, -{8,14,0}, -{8,14,1}, -{8,14,2}, -{8,14,3}, -{8,14,4}, -{8,14,5}, -{8,14,6}, -{8,14,7}, -{8,14,8}, -{8,14,9}, -{8,14,10}, -{8,14,11}, -{8,14,12}, -{8,15,-32}, -{8,15,-31}, -{8,15,-30}, -{8,15,-29}, -{8,15,-28}, -{8,15,-27}, -{8,15,-26}, -{8,15,-25}, -{8,15,-24}, -{8,15,-23}, -{8,15,-22}, -{8,15,-21}, -{8,15,-20}, -{8,15,-19}, -{8,15,-18}, -{8,15,-17}, -{8,15,-16}, -{8,15,-15}, -{8,15,-14}, -{8,15,-13}, -{8,15,-12}, -{8,15,-11}, -{8,15,-10}, -{8,15,-9}, -{8,15,-8}, -{8,15,-7}, -{8,15,-6}, -{8,15,-5}, -{8,15,-4}, -{8,15,-3}, -{8,15,-2}, -{8,15,-1}, -{8,15,0}, -{8,15,1}, -{8,15,2}, -{8,15,3}, -{8,15,4}, -{8,15,5}, -{8,15,6}, -{8,15,7}, -{8,15,8}, -{8,15,9}, -{8,15,10}, -{8,15,11}, -{8,15,12}, -{8,16,-33}, -{8,16,-32}, -{8,16,-31}, -{8,16,-30}, -{8,16,-29}, -{8,16,-28}, -{8,16,-27}, -{8,16,-26}, -{8,16,-25}, -{8,16,-24}, -{8,16,-23}, -{8,16,-22}, -{8,16,-21}, -{8,16,-20}, -{8,16,-19}, -{8,16,-18}, -{8,16,-17}, -{8,16,-16}, -{8,16,-15}, -{8,16,-14}, -{8,16,-13}, -{8,16,-12}, -{8,16,-11}, -{8,16,-10}, -{8,16,-9}, -{8,16,-8}, -{8,16,-7}, -{8,16,-6}, -{8,16,-5}, -{8,16,-4}, -{8,16,-3}, -{8,16,-2}, -{8,16,-1}, -{8,16,0}, -{8,16,1}, -{8,16,2}, -{8,16,3}, -{8,16,4}, -{8,16,5}, -{8,16,6}, -{8,16,7}, -{8,16,8}, -{8,16,9}, -{8,16,10}, -{8,16,11}, -{8,16,12}, -{8,17,-34}, -{8,17,-33}, -{8,17,-32}, -{8,17,-31}, -{8,17,-30}, -{8,17,-29}, -{8,17,-28}, -{8,17,-27}, -{8,17,-26}, -{8,17,-25}, -{8,17,-24}, -{8,17,-23}, -{8,17,-22}, -{8,17,-21}, -{8,17,-20}, -{8,17,-19}, -{8,17,-18}, -{8,17,-17}, -{8,17,-16}, -{8,17,-15}, -{8,17,-14}, -{8,17,-13}, -{8,17,-12}, -{8,17,-11}, -{8,17,-10}, -{8,17,-9}, -{8,17,-8}, -{8,17,-7}, -{8,17,-6}, -{8,17,-5}, -{8,17,-4}, -{8,17,-3}, -{8,17,-2}, -{8,17,-1}, -{8,17,0}, -{8,17,1}, -{8,17,2}, -{8,17,3}, -{8,17,4}, -{8,17,5}, -{8,17,6}, -{8,17,7}, -{8,17,8}, -{8,17,9}, -{8,17,10}, -{8,17,11}, -{8,17,12}, -{8,18,-35}, -{8,18,-34}, -{8,18,-33}, -{8,18,-32}, -{8,18,-31}, -{8,18,-30}, -{8,18,-29}, -{8,18,-28}, -{8,18,-27}, -{8,18,-26}, -{8,18,-25}, -{8,18,-24}, -{8,18,-23}, -{8,18,-22}, -{8,18,-21}, -{8,18,-20}, -{8,18,-19}, -{8,18,-18}, -{8,18,-17}, -{8,18,-16}, -{8,18,-15}, -{8,18,-14}, -{8,18,-13}, -{8,18,-12}, -{8,18,-11}, -{8,18,-10}, -{8,18,-9}, -{8,18,-8}, -{8,18,-7}, -{8,18,-6}, -{8,18,-5}, -{8,18,-4}, -{8,18,-3}, -{8,18,-2}, -{8,18,-1}, -{8,18,0}, -{8,18,1}, -{8,18,2}, -{8,18,3}, -{8,18,4}, -{8,18,5}, -{8,18,6}, -{8,18,7}, -{8,18,8}, -{8,18,9}, -{8,18,10}, -{8,18,11}, -{8,18,12}, -{8,19,-36}, -{8,19,-35}, -{8,19,-34}, -{8,19,-33}, -{8,19,-32}, -{8,19,-31}, -{8,19,-30}, -{8,19,-29}, -{8,19,-28}, -{8,19,-27}, -{8,19,-26}, -{8,19,-25}, -{8,19,-24}, -{8,19,-23}, -{8,19,-22}, -{8,19,-21}, -{8,19,-20}, -{8,19,-19}, -{8,19,-18}, -{8,19,-17}, -{8,19,-16}, -{8,19,-15}, -{8,19,-14}, -{8,19,-13}, -{8,19,-12}, -{8,19,-11}, -{8,19,-10}, -{8,19,-9}, -{8,19,-8}, -{8,19,-7}, -{8,19,-6}, -{8,19,-5}, -{8,19,-4}, -{8,19,-3}, -{8,19,-2}, -{8,19,-1}, -{8,19,0}, -{8,19,1}, -{8,19,2}, -{8,19,3}, -{8,19,4}, -{8,19,5}, -{8,19,6}, -{8,19,7}, -{8,19,8}, -{8,19,9}, -{8,19,10}, -{8,19,11}, -{8,19,12}, -{8,20,-37}, -{8,20,-36}, -{8,20,-35}, -{8,20,-34}, -{8,20,-33}, -{8,20,-32}, -{8,20,-31}, -{8,20,-30}, -{8,20,-29}, -{8,20,-28}, -{8,20,-27}, -{8,20,-26}, -{8,20,-25}, -{8,20,-24}, -{8,20,-23}, -{8,20,-22}, -{8,20,-21}, -{8,20,-20}, -{8,20,-19}, -{8,20,-18}, -{8,20,-17}, -{8,20,-16}, -{8,20,-15}, -{8,20,-14}, -{8,20,-13}, -{8,20,-12}, -{8,20,-11}, -{8,20,-10}, -{8,20,-9}, -{8,20,-8}, -{8,20,-7}, -{8,20,-6}, -{8,20,-5}, -{8,20,-4}, -{8,20,-3}, -{8,20,-2}, -{8,20,-1}, -{8,20,0}, -{8,20,1}, -{8,20,2}, -{8,20,3}, -{8,20,4}, -{8,20,5}, -{8,20,6}, -{8,20,7}, -{8,20,8}, -{8,20,9}, -{8,20,10}, -{8,20,11}, -{8,20,12}, -{8,21,-38}, -{8,21,-37}, -{8,21,-36}, -{8,21,-35}, -{8,21,-34}, -{8,21,-33}, -{8,21,-32}, -{8,21,-31}, -{8,21,-30}, -{8,21,-29}, -{8,21,-28}, -{8,21,-27}, -{8,21,-26}, -{8,21,-25}, -{8,21,-24}, -{8,21,-23}, -{8,21,-22}, -{8,21,-21}, -{8,21,-20}, -{8,21,-19}, -{8,21,-18}, -{8,21,-17}, -{8,21,-16}, -{8,21,-15}, -{8,21,-14}, -{8,21,-13}, -{8,21,-12}, -{8,21,-11}, -{8,21,-10}, -{8,21,-9}, -{8,21,-8}, -{8,21,-7}, -{8,21,-6}, -{8,21,-5}, -{8,21,-4}, -{8,21,-3}, -{8,21,-2}, -{8,21,-1}, -{8,21,0}, -{8,21,1}, -{8,21,2}, -{8,21,3}, -{8,21,4}, -{8,21,5}, -{8,21,6}, -{8,21,7}, -{8,21,8}, -{8,21,9}, -{8,21,10}, -{8,21,11}, -{8,21,12}, -{8,22,-39}, -{8,22,-38}, -{8,22,-37}, -{8,22,-36}, -{8,22,-35}, -{8,22,-34}, -{8,22,-33}, -{8,22,-32}, -{8,22,-31}, -{8,22,-30}, -{8,22,-29}, -{8,22,-28}, -{8,22,-27}, -{8,22,-26}, -{8,22,-25}, -{8,22,-24}, -{8,22,-23}, -{8,22,-22}, -{8,22,-21}, -{8,22,-20}, -{8,22,-19}, -{8,22,-18}, -{8,22,-17}, -{8,22,-16}, -{8,22,-15}, -{8,22,-14}, -{8,22,-13}, -{8,22,-12}, -{8,22,-11}, -{8,22,-10}, -{8,22,-9}, -{8,22,-8}, -{8,22,-7}, -{8,22,-6}, -{8,22,-5}, -{8,22,-4}, -{8,22,-3}, -{8,22,-2}, -{8,22,-1}, -{8,22,0}, -{8,22,1}, -{8,22,2}, -{8,22,3}, -{8,22,4}, -{8,22,5}, -{8,22,6}, -{8,22,7}, -{8,22,8}, -{8,22,9}, -{8,22,10}, -{8,22,11}, -{8,22,12}, -{8,23,-39}, -{8,23,-38}, -{8,23,-37}, -{8,23,-36}, -{8,23,-35}, -{8,23,-34}, -{8,23,-33}, -{8,23,-32}, -{8,23,-31}, -{8,23,-30}, -{8,23,-29}, -{8,23,-28}, -{8,23,-27}, -{8,23,-26}, -{8,23,-25}, -{8,23,-24}, -{8,23,-23}, -{8,23,-22}, -{8,23,-21}, -{8,23,-20}, -{8,23,-19}, -{8,23,-18}, -{8,23,-17}, -{8,23,-16}, -{8,23,-15}, -{8,23,-14}, -{8,23,-13}, -{8,23,-12}, -{8,23,-11}, -{8,23,-10}, -{8,23,-9}, -{8,23,-8}, -{8,23,-7}, -{8,23,-6}, -{8,23,-5}, -{8,23,-4}, -{8,23,-3}, -{8,23,-2}, -{8,23,-1}, -{8,23,0}, -{8,23,1}, -{8,23,2}, -{8,23,3}, -{8,23,4}, -{8,23,5}, -{8,23,6}, -{8,23,7}, -{8,23,8}, -{8,23,9}, -{8,23,10}, -{8,23,11}, -{8,23,12}, -{8,24,-40}, -{8,24,-39}, -{8,24,-38}, -{8,24,-37}, -{8,24,-36}, -{8,24,-35}, -{8,24,-34}, -{8,24,-33}, -{8,24,-32}, -{8,24,-31}, -{8,24,-30}, -{8,24,-29}, -{8,24,-28}, -{8,24,-27}, -{8,24,-26}, -{8,24,-25}, -{8,24,-24}, -{8,24,-23}, -{8,24,-22}, -{8,24,-21}, -{8,24,-20}, -{8,24,-19}, -{8,24,-18}, -{8,24,-17}, -{8,24,-16}, -{8,24,-15}, -{8,24,-14}, -{8,24,-13}, -{8,24,-12}, -{8,24,-11}, -{8,24,-10}, -{8,24,-9}, -{8,24,-8}, -{8,24,-7}, -{8,24,-6}, -{8,24,-5}, -{8,24,-4}, -{8,24,-3}, -{8,24,-2}, -{8,24,-1}, -{8,24,0}, -{8,24,1}, -{8,24,2}, -{8,24,3}, -{8,24,4}, -{8,24,5}, -{8,24,6}, -{8,24,7}, -{8,24,8}, -{8,24,9}, -{8,24,10}, -{8,24,11}, -{8,24,12}, -{8,25,-41}, -{8,25,-40}, -{8,25,-39}, -{8,25,-38}, -{8,25,-37}, -{8,25,-36}, -{8,25,-35}, -{8,25,-34}, -{8,25,-33}, -{8,25,-32}, -{8,25,-31}, -{8,25,-30}, -{8,25,-29}, -{8,25,-28}, -{8,25,-27}, -{8,25,-26}, -{8,25,-25}, -{8,25,-24}, -{8,25,-23}, -{8,25,-22}, -{8,25,-21}, -{8,25,-20}, -{8,25,-19}, -{8,25,-18}, -{8,25,-17}, -{8,25,-16}, -{8,25,-15}, -{8,25,-14}, -{8,25,-13}, -{8,25,-12}, -{8,25,-11}, -{8,25,-10}, -{8,25,-9}, -{8,25,-8}, -{8,25,-7}, -{8,25,-6}, -{8,25,-5}, -{8,25,-4}, -{8,25,-3}, -{8,25,-2}, -{8,25,-1}, -{8,25,0}, -{8,25,1}, -{8,25,2}, -{8,25,3}, -{8,25,4}, -{8,25,5}, -{8,25,6}, -{8,25,7}, -{8,25,8}, -{8,25,9}, -{8,25,10}, -{8,25,11}, -{8,25,12}, -{8,26,-42}, -{8,26,-41}, -{8,26,-40}, -{8,26,-39}, -{8,26,-38}, -{8,26,-37}, -{8,26,-36}, -{8,26,-35}, -{8,26,-34}, -{8,26,-33}, -{8,26,-32}, -{8,26,-31}, -{8,26,-30}, -{8,26,-29}, -{8,26,-28}, -{8,26,-27}, -{8,26,-26}, -{8,26,-25}, -{8,26,-24}, -{8,26,-23}, -{8,26,-22}, -{8,26,-21}, -{8,26,-20}, -{8,26,-19}, -{8,26,-18}, -{8,26,-17}, -{8,26,-16}, -{8,26,-15}, -{8,26,-14}, -{8,26,-13}, -{8,26,-12}, -{8,26,-11}, -{8,26,-10}, -{8,26,-9}, -{8,26,-8}, -{8,26,-7}, -{8,26,-6}, -{8,26,-5}, -{8,26,-4}, -{8,26,-3}, -{8,26,-2}, -{8,26,-1}, -{8,26,0}, -{8,26,1}, -{8,26,2}, -{8,26,3}, -{8,26,4}, -{8,26,5}, -{8,26,6}, -{8,26,7}, -{8,26,8}, -{8,26,9}, -{8,26,10}, -{8,26,11}, -{8,26,12}, -{8,27,-43}, -{8,27,-42}, -{8,27,-41}, -{8,27,-40}, -{8,27,-39}, -{8,27,-38}, -{8,27,-37}, -{8,27,-36}, -{8,27,-35}, -{8,27,-34}, -{8,27,-33}, -{8,27,-32}, -{8,27,-31}, -{8,27,-30}, -{8,27,-29}, -{8,27,-28}, -{8,27,-27}, -{8,27,-26}, -{8,27,-25}, -{8,27,-24}, -{8,27,-23}, -{8,27,-22}, -{8,27,-21}, -{8,27,-20}, -{8,27,-19}, -{8,27,-18}, -{8,27,-17}, -{8,27,-16}, -{8,27,-15}, -{8,27,-14}, -{8,27,-13}, -{8,27,-12}, -{8,27,-11}, -{8,27,-10}, -{8,27,-9}, -{8,27,-8}, -{8,27,-7}, -{8,27,-6}, -{8,27,-5}, -{8,27,-4}, -{8,27,-3}, -{8,27,-2}, -{8,27,-1}, -{8,27,0}, -{8,27,1}, -{8,27,2}, -{8,27,3}, -{8,27,4}, -{8,27,5}, -{8,27,6}, -{8,27,7}, -{8,27,8}, -{8,27,9}, -{8,27,10}, -{8,27,11}, -{8,27,12}, -{8,28,-44}, -{8,28,-43}, -{8,28,-42}, -{8,28,-41}, -{8,28,-40}, -{8,28,-39}, -{8,28,-38}, -{8,28,-37}, -{8,28,-36}, -{8,28,-35}, -{8,28,-34}, -{8,28,-33}, -{8,28,-32}, -{8,28,-31}, -{8,28,-30}, -{8,28,-29}, -{8,28,-28}, -{8,28,-27}, -{8,28,-26}, -{8,28,-25}, -{8,28,-24}, -{8,28,-23}, -{8,28,-22}, -{8,28,-21}, -{8,28,-20}, -{8,28,-19}, -{8,28,-18}, -{8,28,-17}, -{8,28,-16}, -{8,28,-15}, -{8,28,-14}, -{8,28,-13}, -{8,28,-12}, -{8,28,-11}, -{8,28,-10}, -{8,28,-9}, -{8,28,-8}, -{8,28,-7}, -{8,28,-6}, -{8,28,-5}, -{8,28,-4}, -{8,28,-3}, -{8,28,-2}, -{8,28,-1}, -{8,28,0}, -{8,28,1}, -{8,28,2}, -{8,28,3}, -{8,28,4}, -{8,28,5}, -{8,28,6}, -{8,28,7}, -{8,28,8}, -{8,28,9}, -{8,28,10}, -{8,28,11}, -{8,29,-45}, -{8,29,-44}, -{8,29,-43}, -{8,29,-42}, -{8,29,-41}, -{8,29,-40}, -{8,29,-39}, -{8,29,-38}, -{8,29,-37}, -{8,29,-36}, -{8,29,-35}, -{8,29,-34}, -{8,29,-33}, -{8,29,-32}, -{8,29,-31}, -{8,29,-30}, -{8,29,-29}, -{8,29,-28}, -{8,29,-27}, -{8,29,-26}, -{8,29,-25}, -{8,29,-24}, -{8,29,-23}, -{8,29,-22}, -{8,29,-21}, -{8,29,-20}, -{8,29,-19}, -{8,29,-18}, -{8,29,-17}, -{8,29,-16}, -{8,29,-15}, -{8,29,-14}, -{8,29,-13}, -{8,29,-12}, -{8,29,-11}, -{8,29,-10}, -{8,29,-9}, -{8,29,-8}, -{8,29,-7}, -{8,29,-6}, -{8,29,-5}, -{8,29,-4}, -{8,29,-3}, -{8,29,-2}, -{8,30,-45}, -{8,30,-44}, -{8,30,-43}, -{8,30,-42}, -{8,30,-41}, -{8,30,-40}, -{8,30,-39}, -{8,30,-38}, -{8,30,-37}, -{8,30,-36}, -{8,30,-35}, -{8,30,-34}, -{8,30,-33}, -{8,30,-32}, -{8,30,-31}, -{8,30,-30}, -{8,30,-29}, -{8,30,-28}, -{8,30,-27}, -{8,30,-26}, -{8,30,-25}, -{8,30,-24}, -{8,30,-23}, -{8,30,-22}, -{8,30,-21}, -{8,30,-20}, -{8,30,-19}, -{8,30,-18}, -{8,30,-17}, -{8,30,-16}, -{8,30,-15}, -{8,30,-14}, -{8,30,-13}, -{8,30,-12}, -{8,31,-46}, -{8,31,-45}, -{8,31,-44}, -{8,31,-43}, -{8,31,-42}, -{8,31,-41}, -{8,31,-40}, -{8,31,-39}, -{8,31,-38}, -{8,31,-37}, -{8,31,-36}, -{8,31,-35}, -{8,31,-34}, -{8,31,-33}, -{8,31,-32}, -{8,31,-31}, -{8,31,-30}, -{8,31,-29}, -{8,31,-28}, -{8,31,-27}, -{8,31,-26}, -{8,31,-25}, -{8,31,-24}, -{8,31,-23}, -{8,31,-22}, -{8,31,-21}, -{8,31,-20}, -{8,31,-19}, -{8,32,-47}, -{8,32,-46}, -{8,32,-45}, -{8,32,-44}, -{8,32,-43}, -{8,32,-42}, -{8,32,-41}, -{8,32,-40}, -{8,32,-39}, -{8,32,-38}, -{8,32,-37}, -{8,32,-36}, -{8,32,-35}, -{8,32,-34}, -{8,32,-33}, -{8,32,-32}, -{8,32,-31}, -{8,32,-30}, -{8,32,-29}, -{8,32,-28}, -{8,32,-27}, -{8,32,-26}, -{8,32,-25}, -{8,33,-48}, -{8,33,-47}, -{8,33,-46}, -{8,33,-45}, -{8,33,-44}, -{8,33,-43}, -{8,33,-42}, -{8,33,-41}, -{8,33,-40}, -{8,33,-39}, -{8,33,-38}, -{8,33,-37}, -{8,33,-36}, -{8,33,-35}, -{8,33,-34}, -{8,33,-33}, -{8,33,-32}, -{8,33,-31}, -{8,33,-30}, -{8,34,-49}, -{8,34,-48}, -{8,34,-47}, -{8,34,-46}, -{8,34,-45}, -{8,34,-44}, -{8,34,-43}, -{8,34,-42}, -{8,34,-41}, -{8,34,-40}, -{8,34,-39}, -{8,34,-38}, -{8,34,-37}, -{8,34,-36}, -{8,34,-35}, -{8,35,-50}, -{8,35,-49}, -{8,35,-48}, -{8,35,-47}, -{8,35,-46}, -{8,35,-45}, -{8,35,-44}, -{8,35,-43}, -{8,35,-42}, -{8,35,-41}, -{8,35,-40}, -{8,35,-39}, -{8,36,-51}, -{8,36,-50}, -{8,36,-49}, -{8,36,-48}, -{8,36,-47}, -{8,36,-46}, -{8,36,-45}, -{8,36,-44}, -{8,36,-43}, -{8,37,-51}, -{8,37,-50}, -{8,37,-49}, -{8,37,-48}, -{8,37,-47}, -{8,37,-46}, -{8,38,-52}, -{8,38,-51}, -{8,38,-50}, -{8,39,-53}, -{9,-18,13}, -{9,-17,10}, -{9,-17,11}, -{9,-17,12}, -{9,-17,13}, -{9,-16,8}, -{9,-16,9}, -{9,-16,10}, -{9,-16,11}, -{9,-16,12}, -{9,-16,13}, -{9,-15,6}, -{9,-15,7}, -{9,-15,8}, -{9,-15,9}, -{9,-15,10}, -{9,-15,11}, -{9,-15,12}, -{9,-15,13}, -{9,-14,3}, -{9,-14,4}, -{9,-14,5}, -{9,-14,6}, -{9,-14,7}, -{9,-14,8}, -{9,-14,9}, -{9,-14,10}, -{9,-14,11}, -{9,-14,12}, -{9,-14,13}, -{9,-13,1}, -{9,-13,2}, -{9,-13,3}, -{9,-13,4}, -{9,-13,5}, -{9,-13,6}, -{9,-13,7}, -{9,-13,8}, -{9,-13,9}, -{9,-13,10}, -{9,-13,11}, -{9,-13,12}, -{9,-13,13}, -{9,-12,-1}, -{9,-12,0}, -{9,-12,1}, -{9,-12,2}, -{9,-12,3}, -{9,-12,4}, -{9,-12,5}, -{9,-12,6}, -{9,-12,7}, -{9,-12,8}, -{9,-12,9}, -{9,-12,10}, -{9,-12,11}, -{9,-12,12}, -{9,-12,13}, -{9,-11,-3}, -{9,-11,-2}, -{9,-11,-1}, -{9,-11,0}, -{9,-11,1}, -{9,-11,2}, -{9,-11,3}, -{9,-11,4}, -{9,-11,5}, -{9,-11,6}, -{9,-11,7}, -{9,-11,8}, -{9,-11,9}, -{9,-11,10}, -{9,-11,11}, -{9,-11,12}, -{9,-11,13}, -{9,-10,-4}, -{9,-10,-3}, -{9,-10,-2}, -{9,-10,-1}, -{9,-10,0}, -{9,-10,1}, -{9,-10,2}, -{9,-10,3}, -{9,-10,4}, -{9,-10,5}, -{9,-10,6}, -{9,-10,7}, -{9,-10,8}, -{9,-10,9}, -{9,-10,10}, -{9,-10,11}, -{9,-10,12}, -{9,-10,13}, -{9,-9,-6}, -{9,-9,-5}, -{9,-9,-4}, -{9,-9,-3}, -{9,-9,-2}, -{9,-9,-1}, -{9,-9,0}, -{9,-9,1}, -{9,-9,2}, -{9,-9,3}, -{9,-9,4}, -{9,-9,5}, -{9,-9,6}, -{9,-9,7}, -{9,-9,8}, -{9,-9,9}, -{9,-9,10}, -{9,-9,11}, -{9,-9,12}, -{9,-9,13}, -{9,-8,-8}, -{9,-8,-7}, -{9,-8,-6}, -{9,-8,-5}, -{9,-8,-4}, -{9,-8,-3}, -{9,-8,-2}, -{9,-8,-1}, -{9,-8,0}, -{9,-8,1}, -{9,-8,2}, -{9,-8,3}, -{9,-8,4}, -{9,-8,5}, -{9,-8,6}, -{9,-8,7}, -{9,-8,8}, -{9,-8,9}, -{9,-8,10}, -{9,-8,11}, -{9,-8,12}, -{9,-8,13}, -{9,-7,-9}, -{9,-7,-8}, -{9,-7,-7}, -{9,-7,-6}, -{9,-7,-5}, -{9,-7,-4}, -{9,-7,-3}, -{9,-7,-2}, -{9,-7,-1}, -{9,-7,0}, -{9,-7,1}, -{9,-7,2}, -{9,-7,3}, -{9,-7,4}, -{9,-7,5}, -{9,-7,6}, -{9,-7,7}, -{9,-7,8}, -{9,-7,9}, -{9,-7,10}, -{9,-7,11}, -{9,-7,12}, -{9,-7,13}, -{9,-6,-10}, -{9,-6,-9}, -{9,-6,-8}, -{9,-6,-7}, -{9,-6,-6}, -{9,-6,-5}, -{9,-6,-4}, -{9,-6,-3}, -{9,-6,-2}, -{9,-6,-1}, -{9,-6,0}, -{9,-6,1}, -{9,-6,2}, -{9,-6,3}, -{9,-6,4}, -{9,-6,5}, -{9,-6,6}, -{9,-6,7}, -{9,-6,8}, -{9,-6,9}, -{9,-6,10}, -{9,-6,11}, -{9,-6,12}, -{9,-6,13}, -{9,-5,-12}, -{9,-5,-11}, -{9,-5,-10}, -{9,-5,-9}, -{9,-5,-8}, -{9,-5,-7}, -{9,-5,-6}, -{9,-5,-5}, -{9,-5,-4}, -{9,-5,-3}, -{9,-5,-2}, -{9,-5,-1}, -{9,-5,0}, -{9,-5,1}, -{9,-5,2}, -{9,-5,3}, -{9,-5,4}, -{9,-5,5}, -{9,-5,6}, -{9,-5,7}, -{9,-5,8}, -{9,-5,9}, -{9,-5,10}, -{9,-5,11}, -{9,-5,12}, -{9,-5,13}, -{9,-4,-13}, -{9,-4,-12}, -{9,-4,-11}, -{9,-4,-10}, -{9,-4,-9}, -{9,-4,-8}, -{9,-4,-7}, -{9,-4,-6}, -{9,-4,-5}, -{9,-4,-4}, -{9,-4,-3}, -{9,-4,-2}, -{9,-4,-1}, -{9,-4,0}, -{9,-4,1}, -{9,-4,2}, -{9,-4,3}, -{9,-4,4}, -{9,-4,5}, -{9,-4,6}, -{9,-4,7}, -{9,-4,8}, -{9,-4,9}, -{9,-4,10}, -{9,-4,11}, -{9,-4,12}, -{9,-4,13}, -{9,-3,-14}, -{9,-3,-13}, -{9,-3,-12}, -{9,-3,-11}, -{9,-3,-10}, -{9,-3,-9}, -{9,-3,-8}, -{9,-3,-7}, -{9,-3,-6}, -{9,-3,-5}, -{9,-3,-4}, -{9,-3,-3}, -{9,-3,-2}, -{9,-3,-1}, -{9,-3,0}, -{9,-3,1}, -{9,-3,2}, -{9,-3,3}, -{9,-3,4}, -{9,-3,5}, -{9,-3,6}, -{9,-3,7}, -{9,-3,8}, -{9,-3,9}, -{9,-3,10}, -{9,-3,11}, -{9,-3,12}, -{9,-3,13}, -{9,-2,-15}, -{9,-2,-14}, -{9,-2,-13}, -{9,-2,-12}, -{9,-2,-11}, -{9,-2,-10}, -{9,-2,-9}, -{9,-2,-8}, -{9,-2,-7}, -{9,-2,-6}, -{9,-2,-5}, -{9,-2,-4}, -{9,-2,-3}, -{9,-2,-2}, -{9,-2,-1}, -{9,-2,0}, -{9,-2,1}, -{9,-2,2}, -{9,-2,3}, -{9,-2,4}, -{9,-2,5}, -{9,-2,6}, -{9,-2,7}, -{9,-2,8}, -{9,-2,9}, -{9,-2,10}, -{9,-2,11}, -{9,-2,12}, -{9,-2,13}, -{9,-1,-17}, -{9,-1,-16}, -{9,-1,-15}, -{9,-1,-14}, -{9,-1,-13}, -{9,-1,-12}, -{9,-1,-11}, -{9,-1,-10}, -{9,-1,-9}, -{9,-1,-8}, -{9,-1,-7}, -{9,-1,-6}, -{9,-1,-5}, -{9,-1,-4}, -{9,-1,-3}, -{9,-1,-2}, -{9,-1,-1}, -{9,-1,0}, -{9,-1,1}, -{9,-1,2}, -{9,-1,3}, -{9,-1,4}, -{9,-1,5}, -{9,-1,6}, -{9,-1,7}, -{9,-1,8}, -{9,-1,9}, -{9,-1,10}, -{9,-1,11}, -{9,-1,12}, -{9,-1,13}, -{9,0,-18}, -{9,0,-17}, -{9,0,-16}, -{9,0,-15}, -{9,0,-14}, -{9,0,-13}, -{9,0,-12}, -{9,0,-11}, -{9,0,-10}, -{9,0,-9}, -{9,0,-8}, -{9,0,-7}, -{9,0,-6}, -{9,0,-5}, -{9,0,-4}, -{9,0,-3}, -{9,0,-2}, -{9,0,-1}, -{9,0,0}, -{9,0,1}, -{9,0,2}, -{9,0,3}, -{9,0,4}, -{9,0,5}, -{9,0,6}, -{9,0,7}, -{9,0,8}, -{9,0,9}, -{9,0,10}, -{9,0,11}, -{9,0,12}, -{9,0,13}, -{9,1,-19}, -{9,1,-18}, -{9,1,-17}, -{9,1,-16}, -{9,1,-15}, -{9,1,-14}, -{9,1,-13}, -{9,1,-12}, -{9,1,-11}, -{9,1,-10}, -{9,1,-9}, -{9,1,-8}, -{9,1,-7}, -{9,1,-6}, -{9,1,-5}, -{9,1,-4}, -{9,1,-3}, -{9,1,-2}, -{9,1,-1}, -{9,1,0}, -{9,1,1}, -{9,1,2}, -{9,1,3}, -{9,1,4}, -{9,1,5}, -{9,1,6}, -{9,1,7}, -{9,1,8}, -{9,1,9}, -{9,1,10}, -{9,1,11}, -{9,1,12}, -{9,1,13}, -{9,2,-20}, -{9,2,-19}, -{9,2,-18}, -{9,2,-17}, -{9,2,-16}, -{9,2,-15}, -{9,2,-14}, -{9,2,-13}, -{9,2,-12}, -{9,2,-11}, -{9,2,-10}, -{9,2,-9}, -{9,2,-8}, -{9,2,-7}, -{9,2,-6}, -{9,2,-5}, -{9,2,-4}, -{9,2,-3}, -{9,2,-2}, -{9,2,-1}, -{9,2,0}, -{9,2,1}, -{9,2,2}, -{9,2,3}, -{9,2,4}, -{9,2,5}, -{9,2,6}, -{9,2,7}, -{9,2,8}, -{9,2,9}, -{9,2,10}, -{9,2,11}, -{9,2,12}, -{9,2,13}, -{9,3,-21}, -{9,3,-20}, -{9,3,-19}, -{9,3,-18}, -{9,3,-17}, -{9,3,-16}, -{9,3,-15}, -{9,3,-14}, -{9,3,-13}, -{9,3,-12}, -{9,3,-11}, -{9,3,-10}, -{9,3,-9}, -{9,3,-8}, -{9,3,-7}, -{9,3,-6}, -{9,3,-5}, -{9,3,-4}, -{9,3,-3}, -{9,3,-2}, -{9,3,-1}, -{9,3,0}, -{9,3,1}, -{9,3,2}, -{9,3,3}, -{9,3,4}, -{9,3,5}, -{9,3,6}, -{9,3,7}, -{9,3,8}, -{9,3,9}, -{9,3,10}, -{9,3,11}, -{9,3,12}, -{9,3,13}, -{9,4,-22}, -{9,4,-21}, -{9,4,-20}, -{9,4,-19}, -{9,4,-18}, -{9,4,-17}, -{9,4,-16}, -{9,4,-15}, -{9,4,-14}, -{9,4,-13}, -{9,4,-12}, -{9,4,-11}, -{9,4,-10}, -{9,4,-9}, -{9,4,-8}, -{9,4,-7}, -{9,4,-6}, -{9,4,-5}, -{9,4,-4}, -{9,4,-3}, -{9,4,-2}, -{9,4,-1}, -{9,4,0}, -{9,4,1}, -{9,4,2}, -{9,4,3}, -{9,4,4}, -{9,4,5}, -{9,4,6}, -{9,4,7}, -{9,4,8}, -{9,4,9}, -{9,4,10}, -{9,4,11}, -{9,4,12}, -{9,4,13}, -{9,5,-23}, -{9,5,-22}, -{9,5,-21}, -{9,5,-20}, -{9,5,-19}, -{9,5,-18}, -{9,5,-17}, -{9,5,-16}, -{9,5,-15}, -{9,5,-14}, -{9,5,-13}, -{9,5,-12}, -{9,5,-11}, -{9,5,-10}, -{9,5,-9}, -{9,5,-8}, -{9,5,-7}, -{9,5,-6}, -{9,5,-5}, -{9,5,-4}, -{9,5,-3}, -{9,5,-2}, -{9,5,-1}, -{9,5,0}, -{9,5,1}, -{9,5,2}, -{9,5,3}, -{9,5,4}, -{9,5,5}, -{9,5,6}, -{9,5,7}, -{9,5,8}, -{9,5,9}, -{9,5,10}, -{9,5,11}, -{9,5,12}, -{9,5,13}, -{9,6,-24}, -{9,6,-23}, -{9,6,-22}, -{9,6,-21}, -{9,6,-20}, -{9,6,-19}, -{9,6,-18}, -{9,6,-17}, -{9,6,-16}, -{9,6,-15}, -{9,6,-14}, -{9,6,-13}, -{9,6,-12}, -{9,6,-11}, -{9,6,-10}, -{9,6,-9}, -{9,6,-8}, -{9,6,-7}, -{9,6,-6}, -{9,6,-5}, -{9,6,-4}, -{9,6,-3}, -{9,6,-2}, -{9,6,-1}, -{9,6,0}, -{9,6,1}, -{9,6,2}, -{9,6,3}, -{9,6,4}, -{9,6,5}, -{9,6,6}, -{9,6,7}, -{9,6,8}, -{9,6,9}, -{9,6,10}, -{9,6,11}, -{9,6,12}, -{9,6,13}, -{9,7,-25}, -{9,7,-24}, -{9,7,-23}, -{9,7,-22}, -{9,7,-21}, -{9,7,-20}, -{9,7,-19}, -{9,7,-18}, -{9,7,-17}, -{9,7,-16}, -{9,7,-15}, -{9,7,-14}, -{9,7,-13}, -{9,7,-12}, -{9,7,-11}, -{9,7,-10}, -{9,7,-9}, -{9,7,-8}, -{9,7,-7}, -{9,7,-6}, -{9,7,-5}, -{9,7,-4}, -{9,7,-3}, -{9,7,-2}, -{9,7,-1}, -{9,7,0}, -{9,7,1}, -{9,7,2}, -{9,7,3}, -{9,7,4}, -{9,7,5}, -{9,7,6}, -{9,7,7}, -{9,7,8}, -{9,7,9}, -{9,7,10}, -{9,7,11}, -{9,7,12}, -{9,7,13}, -{9,8,-26}, -{9,8,-25}, -{9,8,-24}, -{9,8,-23}, -{9,8,-22}, -{9,8,-21}, -{9,8,-20}, -{9,8,-19}, -{9,8,-18}, -{9,8,-17}, -{9,8,-16}, -{9,8,-15}, -{9,8,-14}, -{9,8,-13}, -{9,8,-12}, -{9,8,-11}, -{9,8,-10}, -{9,8,-9}, -{9,8,-8}, -{9,8,-7}, -{9,8,-6}, -{9,8,-5}, -{9,8,-4}, -{9,8,-3}, -{9,8,-2}, -{9,8,-1}, -{9,8,0}, -{9,8,1}, -{9,8,2}, -{9,8,3}, -{9,8,4}, -{9,8,5}, -{9,8,6}, -{9,8,7}, -{9,8,8}, -{9,8,9}, -{9,8,10}, -{9,8,11}, -{9,8,12}, -{9,8,13}, -{9,9,-27}, -{9,9,-26}, -{9,9,-25}, -{9,9,-24}, -{9,9,-23}, -{9,9,-22}, -{9,9,-21}, -{9,9,-20}, -{9,9,-19}, -{9,9,-18}, -{9,9,-17}, -{9,9,-16}, -{9,9,-15}, -{9,9,-14}, -{9,9,-13}, -{9,9,-12}, -{9,9,-11}, -{9,9,-10}, -{9,9,-9}, -{9,9,-8}, -{9,9,-7}, -{9,9,-6}, -{9,9,-5}, -{9,9,-4}, -{9,9,-3}, -{9,9,-2}, -{9,9,-1}, -{9,9,0}, -{9,9,1}, -{9,9,2}, -{9,9,3}, -{9,9,4}, -{9,9,5}, -{9,9,6}, -{9,9,7}, -{9,9,8}, -{9,9,9}, -{9,9,10}, -{9,9,11}, -{9,9,12}, -{9,9,13}, -{9,10,-28}, -{9,10,-27}, -{9,10,-26}, -{9,10,-25}, -{9,10,-24}, -{9,10,-23}, -{9,10,-22}, -{9,10,-21}, -{9,10,-20}, -{9,10,-19}, -{9,10,-18}, -{9,10,-17}, -{9,10,-16}, -{9,10,-15}, -{9,10,-14}, -{9,10,-13}, -{9,10,-12}, -{9,10,-11}, -{9,10,-10}, -{9,10,-9}, -{9,10,-8}, -{9,10,-7}, -{9,10,-6}, -{9,10,-5}, -{9,10,-4}, -{9,10,-3}, -{9,10,-2}, -{9,10,-1}, -{9,10,0}, -{9,10,1}, -{9,10,2}, -{9,10,3}, -{9,10,4}, -{9,10,5}, -{9,10,6}, -{9,10,7}, -{9,10,8}, -{9,10,9}, -{9,10,10}, -{9,10,11}, -{9,10,12}, -{9,10,13}, -{9,11,-29}, -{9,11,-28}, -{9,11,-27}, -{9,11,-26}, -{9,11,-25}, -{9,11,-24}, -{9,11,-23}, -{9,11,-22}, -{9,11,-21}, -{9,11,-20}, -{9,11,-19}, -{9,11,-18}, -{9,11,-17}, -{9,11,-16}, -{9,11,-15}, -{9,11,-14}, -{9,11,-13}, -{9,11,-12}, -{9,11,-11}, -{9,11,-10}, -{9,11,-9}, -{9,11,-8}, -{9,11,-7}, -{9,11,-6}, -{9,11,-5}, -{9,11,-4}, -{9,11,-3}, -{9,11,-2}, -{9,11,-1}, -{9,11,0}, -{9,11,1}, -{9,11,2}, -{9,11,3}, -{9,11,4}, -{9,11,5}, -{9,11,6}, -{9,11,7}, -{9,11,8}, -{9,11,9}, -{9,11,10}, -{9,11,11}, -{9,11,12}, -{9,11,13}, -{9,12,-30}, -{9,12,-29}, -{9,12,-28}, -{9,12,-27}, -{9,12,-26}, -{9,12,-25}, -{9,12,-24}, -{9,12,-23}, -{9,12,-22}, -{9,12,-21}, -{9,12,-20}, -{9,12,-19}, -{9,12,-18}, -{9,12,-17}, -{9,12,-16}, -{9,12,-15}, -{9,12,-14}, -{9,12,-13}, -{9,12,-12}, -{9,12,-11}, -{9,12,-10}, -{9,12,-9}, -{9,12,-8}, -{9,12,-7}, -{9,12,-6}, -{9,12,-5}, -{9,12,-4}, -{9,12,-3}, -{9,12,-2}, -{9,12,-1}, -{9,12,0}, -{9,12,1}, -{9,12,2}, -{9,12,3}, -{9,12,4}, -{9,12,5}, -{9,12,6}, -{9,12,7}, -{9,12,8}, -{9,12,9}, -{9,12,10}, -{9,12,11}, -{9,12,12}, -{9,12,13}, -{9,13,-31}, -{9,13,-30}, -{9,13,-29}, -{9,13,-28}, -{9,13,-27}, -{9,13,-26}, -{9,13,-25}, -{9,13,-24}, -{9,13,-23}, -{9,13,-22}, -{9,13,-21}, -{9,13,-20}, -{9,13,-19}, -{9,13,-18}, -{9,13,-17}, -{9,13,-16}, -{9,13,-15}, -{9,13,-14}, -{9,13,-13}, -{9,13,-12}, -{9,13,-11}, -{9,13,-10}, -{9,13,-9}, -{9,13,-8}, -{9,13,-7}, -{9,13,-6}, -{9,13,-5}, -{9,13,-4}, -{9,13,-3}, -{9,13,-2}, -{9,13,-1}, -{9,13,0}, -{9,13,1}, -{9,13,2}, -{9,13,3}, -{9,13,4}, -{9,13,5}, -{9,13,6}, -{9,13,7}, -{9,13,8}, -{9,13,9}, -{9,13,10}, -{9,13,11}, -{9,13,12}, -{9,13,13}, -{9,14,-32}, -{9,14,-31}, -{9,14,-30}, -{9,14,-29}, -{9,14,-28}, -{9,14,-27}, -{9,14,-26}, -{9,14,-25}, -{9,14,-24}, -{9,14,-23}, -{9,14,-22}, -{9,14,-21}, -{9,14,-20}, -{9,14,-19}, -{9,14,-18}, -{9,14,-17}, -{9,14,-16}, -{9,14,-15}, -{9,14,-14}, -{9,14,-13}, -{9,14,-12}, -{9,14,-11}, -{9,14,-10}, -{9,14,-9}, -{9,14,-8}, -{9,14,-7}, -{9,14,-6}, -{9,14,-5}, -{9,14,-4}, -{9,14,-3}, -{9,14,-2}, -{9,14,-1}, -{9,14,0}, -{9,14,1}, -{9,14,2}, -{9,14,3}, -{9,14,4}, -{9,14,5}, -{9,14,6}, -{9,14,7}, -{9,14,8}, -{9,14,9}, -{9,14,10}, -{9,14,11}, -{9,14,12}, -{9,14,13}, -{9,15,-33}, -{9,15,-32}, -{9,15,-31}, -{9,15,-30}, -{9,15,-29}, -{9,15,-28}, -{9,15,-27}, -{9,15,-26}, -{9,15,-25}, -{9,15,-24}, -{9,15,-23}, -{9,15,-22}, -{9,15,-21}, -{9,15,-20}, -{9,15,-19}, -{9,15,-18}, -{9,15,-17}, -{9,15,-16}, -{9,15,-15}, -{9,15,-14}, -{9,15,-13}, -{9,15,-12}, -{9,15,-11}, -{9,15,-10}, -{9,15,-9}, -{9,15,-8}, -{9,15,-7}, -{9,15,-6}, -{9,15,-5}, -{9,15,-4}, -{9,15,-3}, -{9,15,-2}, -{9,15,-1}, -{9,15,0}, -{9,15,1}, -{9,15,2}, -{9,15,3}, -{9,15,4}, -{9,15,5}, -{9,15,6}, -{9,15,7}, -{9,15,8}, -{9,15,9}, -{9,15,10}, -{9,15,11}, -{9,15,12}, -{9,15,13}, -{9,16,-34}, -{9,16,-33}, -{9,16,-32}, -{9,16,-31}, -{9,16,-30}, -{9,16,-29}, -{9,16,-28}, -{9,16,-27}, -{9,16,-26}, -{9,16,-25}, -{9,16,-24}, -{9,16,-23}, -{9,16,-22}, -{9,16,-21}, -{9,16,-20}, -{9,16,-19}, -{9,16,-18}, -{9,16,-17}, -{9,16,-16}, -{9,16,-15}, -{9,16,-14}, -{9,16,-13}, -{9,16,-12}, -{9,16,-11}, -{9,16,-10}, -{9,16,-9}, -{9,16,-8}, -{9,16,-7}, -{9,16,-6}, -{9,16,-5}, -{9,16,-4}, -{9,16,-3}, -{9,16,-2}, -{9,16,-1}, -{9,16,0}, -{9,16,1}, -{9,16,2}, -{9,16,3}, -{9,16,4}, -{9,16,5}, -{9,16,6}, -{9,16,7}, -{9,16,8}, -{9,16,9}, -{9,16,10}, -{9,16,11}, -{9,16,12}, -{9,16,13}, -{9,16,14}, -{9,17,-35}, -{9,17,-34}, -{9,17,-33}, -{9,17,-32}, -{9,17,-31}, -{9,17,-30}, -{9,17,-29}, -{9,17,-28}, -{9,17,-27}, -{9,17,-26}, -{9,17,-25}, -{9,17,-24}, -{9,17,-23}, -{9,17,-22}, -{9,17,-21}, -{9,17,-20}, -{9,17,-19}, -{9,17,-18}, -{9,17,-17}, -{9,17,-16}, -{9,17,-15}, -{9,17,-14}, -{9,17,-13}, -{9,17,-12}, -{9,17,-11}, -{9,17,-10}, -{9,17,-9}, -{9,17,-8}, -{9,17,-7}, -{9,17,-6}, -{9,17,-5}, -{9,17,-4}, -{9,17,-3}, -{9,17,-2}, -{9,17,-1}, -{9,17,0}, -{9,17,1}, -{9,17,2}, -{9,17,3}, -{9,17,4}, -{9,17,5}, -{9,17,6}, -{9,17,7}, -{9,17,8}, -{9,17,9}, -{9,17,10}, -{9,17,11}, -{9,17,12}, -{9,17,13}, -{9,17,14}, -{9,18,-36}, -{9,18,-35}, -{9,18,-34}, -{9,18,-33}, -{9,18,-32}, -{9,18,-31}, -{9,18,-30}, -{9,18,-29}, -{9,18,-28}, -{9,18,-27}, -{9,18,-26}, -{9,18,-25}, -{9,18,-24}, -{9,18,-23}, -{9,18,-22}, -{9,18,-21}, -{9,18,-20}, -{9,18,-19}, -{9,18,-18}, -{9,18,-17}, -{9,18,-16}, -{9,18,-15}, -{9,18,-14}, -{9,18,-13}, -{9,18,-12}, -{9,18,-11}, -{9,18,-10}, -{9,18,-9}, -{9,18,-8}, -{9,18,-7}, -{9,18,-6}, -{9,18,-5}, -{9,18,-4}, -{9,18,-3}, -{9,18,-2}, -{9,18,-1}, -{9,18,0}, -{9,18,1}, -{9,18,2}, -{9,18,3}, -{9,18,4}, -{9,18,5}, -{9,18,6}, -{9,18,7}, -{9,18,8}, -{9,18,9}, -{9,18,10}, -{9,18,11}, -{9,18,12}, -{9,18,13}, -{9,18,14}, -{9,19,-37}, -{9,19,-36}, -{9,19,-35}, -{9,19,-34}, -{9,19,-33}, -{9,19,-32}, -{9,19,-31}, -{9,19,-30}, -{9,19,-29}, -{9,19,-28}, -{9,19,-27}, -{9,19,-26}, -{9,19,-25}, -{9,19,-24}, -{9,19,-23}, -{9,19,-22}, -{9,19,-21}, -{9,19,-20}, -{9,19,-19}, -{9,19,-18}, -{9,19,-17}, -{9,19,-16}, -{9,19,-15}, -{9,19,-14}, -{9,19,-13}, -{9,19,-12}, -{9,19,-11}, -{9,19,-10}, -{9,19,-9}, -{9,19,-8}, -{9,19,-7}, -{9,19,-6}, -{9,19,-5}, -{9,19,-4}, -{9,19,-3}, -{9,19,-2}, -{9,19,-1}, -{9,19,0}, -{9,19,1}, -{9,19,2}, -{9,19,3}, -{9,19,4}, -{9,19,5}, -{9,19,6}, -{9,19,7}, -{9,19,8}, -{9,19,9}, -{9,19,10}, -{9,19,11}, -{9,19,12}, -{9,19,13}, -{9,19,14}, -{9,20,-38}, -{9,20,-37}, -{9,20,-36}, -{9,20,-35}, -{9,20,-34}, -{9,20,-33}, -{9,20,-32}, -{9,20,-31}, -{9,20,-30}, -{9,20,-29}, -{9,20,-28}, -{9,20,-27}, -{9,20,-26}, -{9,20,-25}, -{9,20,-24}, -{9,20,-23}, -{9,20,-22}, -{9,20,-21}, -{9,20,-20}, -{9,20,-19}, -{9,20,-18}, -{9,20,-17}, -{9,20,-16}, -{9,20,-15}, -{9,20,-14}, -{9,20,-13}, -{9,20,-12}, -{9,20,-11}, -{9,20,-10}, -{9,20,-9}, -{9,20,-8}, -{9,20,-7}, -{9,20,-6}, -{9,20,-5}, -{9,20,-4}, -{9,20,-3}, -{9,20,-2}, -{9,20,-1}, -{9,20,0}, -{9,20,1}, -{9,20,2}, -{9,20,3}, -{9,20,4}, -{9,20,5}, -{9,20,6}, -{9,20,7}, -{9,20,8}, -{9,20,9}, -{9,20,10}, -{9,20,11}, -{9,20,12}, -{9,20,13}, -{9,20,14}, -{9,21,-38}, -{9,21,-37}, -{9,21,-36}, -{9,21,-35}, -{9,21,-34}, -{9,21,-33}, -{9,21,-32}, -{9,21,-31}, -{9,21,-30}, -{9,21,-29}, -{9,21,-28}, -{9,21,-27}, -{9,21,-26}, -{9,21,-25}, -{9,21,-24}, -{9,21,-23}, -{9,21,-22}, -{9,21,-21}, -{9,21,-20}, -{9,21,-19}, -{9,21,-18}, -{9,21,-17}, -{9,21,-16}, -{9,21,-15}, -{9,21,-14}, -{9,21,-13}, -{9,21,-12}, -{9,21,-11}, -{9,21,-10}, -{9,21,-9}, -{9,21,-8}, -{9,21,-7}, -{9,21,-6}, -{9,21,-5}, -{9,21,-4}, -{9,21,-3}, -{9,21,-2}, -{9,21,-1}, -{9,21,0}, -{9,21,1}, -{9,21,2}, -{9,21,3}, -{9,21,4}, -{9,21,5}, -{9,21,6}, -{9,21,7}, -{9,21,8}, -{9,21,9}, -{9,21,10}, -{9,21,11}, -{9,21,12}, -{9,21,13}, -{9,21,14}, -{9,22,-39}, -{9,22,-38}, -{9,22,-37}, -{9,22,-36}, -{9,22,-35}, -{9,22,-34}, -{9,22,-33}, -{9,22,-32}, -{9,22,-31}, -{9,22,-30}, -{9,22,-29}, -{9,22,-28}, -{9,22,-27}, -{9,22,-26}, -{9,22,-25}, -{9,22,-24}, -{9,22,-23}, -{9,22,-22}, -{9,22,-21}, -{9,22,-20}, -{9,22,-19}, -{9,22,-18}, -{9,22,-17}, -{9,22,-16}, -{9,22,-15}, -{9,22,-14}, -{9,22,-13}, -{9,22,-12}, -{9,22,-11}, -{9,22,-10}, -{9,22,-9}, -{9,22,-8}, -{9,22,-7}, -{9,22,-6}, -{9,22,-5}, -{9,22,-4}, -{9,22,-3}, -{9,22,-2}, -{9,22,-1}, -{9,22,0}, -{9,22,1}, -{9,22,2}, -{9,22,3}, -{9,22,4}, -{9,22,5}, -{9,22,6}, -{9,22,7}, -{9,22,8}, -{9,22,9}, -{9,22,10}, -{9,22,11}, -{9,22,12}, -{9,22,13}, -{9,22,14}, -{9,23,-40}, -{9,23,-39}, -{9,23,-38}, -{9,23,-37}, -{9,23,-36}, -{9,23,-35}, -{9,23,-34}, -{9,23,-33}, -{9,23,-32}, -{9,23,-31}, -{9,23,-30}, -{9,23,-29}, -{9,23,-28}, -{9,23,-27}, -{9,23,-26}, -{9,23,-25}, -{9,23,-24}, -{9,23,-23}, -{9,23,-22}, -{9,23,-21}, -{9,23,-20}, -{9,23,-19}, -{9,23,-18}, -{9,23,-17}, -{9,23,-16}, -{9,23,-15}, -{9,23,-14}, -{9,23,-13}, -{9,23,-12}, -{9,23,-11}, -{9,23,-10}, -{9,23,-9}, -{9,23,-8}, -{9,23,-7}, -{9,23,-6}, -{9,23,-5}, -{9,23,-4}, -{9,23,-3}, -{9,23,-2}, -{9,23,-1}, -{9,23,0}, -{9,23,1}, -{9,23,2}, -{9,23,3}, -{9,23,4}, -{9,23,5}, -{9,23,6}, -{9,23,7}, -{9,23,8}, -{9,23,9}, -{9,23,10}, -{9,23,11}, -{9,23,12}, -{9,23,13}, -{9,23,14}, -{9,24,-41}, -{9,24,-40}, -{9,24,-39}, -{9,24,-38}, -{9,24,-37}, -{9,24,-36}, -{9,24,-35}, -{9,24,-34}, -{9,24,-33}, -{9,24,-32}, -{9,24,-31}, -{9,24,-30}, -{9,24,-29}, -{9,24,-28}, -{9,24,-27}, -{9,24,-26}, -{9,24,-25}, -{9,24,-24}, -{9,24,-23}, -{9,24,-22}, -{9,24,-21}, -{9,24,-20}, -{9,24,-19}, -{9,24,-18}, -{9,24,-17}, -{9,24,-16}, -{9,24,-15}, -{9,24,-14}, -{9,24,-13}, -{9,24,-12}, -{9,24,-11}, -{9,24,-10}, -{9,24,-9}, -{9,24,-8}, -{9,24,-7}, -{9,24,-6}, -{9,24,-5}, -{9,24,-4}, -{9,24,-3}, -{9,24,-2}, -{9,24,-1}, -{9,24,0}, -{9,24,1}, -{9,24,2}, -{9,24,3}, -{9,24,4}, -{9,24,5}, -{9,24,6}, -{9,24,7}, -{9,24,8}, -{9,24,9}, -{9,24,10}, -{9,24,11}, -{9,24,12}, -{9,24,13}, -{9,24,14}, -{9,25,-42}, -{9,25,-41}, -{9,25,-40}, -{9,25,-39}, -{9,25,-38}, -{9,25,-37}, -{9,25,-36}, -{9,25,-35}, -{9,25,-34}, -{9,25,-33}, -{9,25,-32}, -{9,25,-31}, -{9,25,-30}, -{9,25,-29}, -{9,25,-28}, -{9,25,-27}, -{9,25,-26}, -{9,25,-25}, -{9,25,-24}, -{9,25,-23}, -{9,25,-22}, -{9,25,-21}, -{9,25,-20}, -{9,25,-19}, -{9,25,-18}, -{9,25,-17}, -{9,25,-16}, -{9,25,-15}, -{9,25,-14}, -{9,25,-13}, -{9,25,-12}, -{9,25,-11}, -{9,25,-10}, -{9,25,-9}, -{9,25,-8}, -{9,25,-7}, -{9,25,-6}, -{9,25,-5}, -{9,25,-4}, -{9,25,-3}, -{9,25,-2}, -{9,25,-1}, -{9,25,0}, -{9,25,1}, -{9,25,2}, -{9,25,3}, -{9,25,4}, -{9,25,5}, -{9,25,6}, -{9,25,7}, -{9,25,8}, -{9,25,9}, -{9,25,10}, -{9,25,11}, -{9,25,12}, -{9,25,13}, -{9,25,14}, -{9,26,-43}, -{9,26,-42}, -{9,26,-41}, -{9,26,-40}, -{9,26,-39}, -{9,26,-38}, -{9,26,-37}, -{9,26,-36}, -{9,26,-35}, -{9,26,-34}, -{9,26,-33}, -{9,26,-32}, -{9,26,-31}, -{9,26,-30}, -{9,26,-29}, -{9,26,-28}, -{9,26,-27}, -{9,26,-26}, -{9,26,-25}, -{9,26,-24}, -{9,26,-23}, -{9,26,-22}, -{9,26,-21}, -{9,26,-20}, -{9,26,-19}, -{9,26,-18}, -{9,26,-17}, -{9,26,-16}, -{9,26,-15}, -{9,26,-14}, -{9,26,-13}, -{9,26,-12}, -{9,26,-11}, -{9,26,-10}, -{9,26,-9}, -{9,26,-8}, -{9,26,-7}, -{9,26,-6}, -{9,26,-5}, -{9,26,-4}, -{9,26,-3}, -{9,26,-2}, -{9,26,-1}, -{9,26,0}, -{9,26,1}, -{9,26,2}, -{9,26,3}, -{9,26,4}, -{9,26,5}, -{9,26,6}, -{9,26,7}, -{9,26,8}, -{9,26,9}, -{9,26,10}, -{9,26,11}, -{9,26,12}, -{9,26,13}, -{9,26,14}, -{9,27,-44}, -{9,27,-43}, -{9,27,-42}, -{9,27,-41}, -{9,27,-40}, -{9,27,-39}, -{9,27,-38}, -{9,27,-37}, -{9,27,-36}, -{9,27,-35}, -{9,27,-34}, -{9,27,-33}, -{9,27,-32}, -{9,27,-31}, -{9,27,-30}, -{9,27,-29}, -{9,27,-28}, -{9,27,-27}, -{9,27,-26}, -{9,27,-25}, -{9,27,-24}, -{9,27,-23}, -{9,27,-22}, -{9,27,-21}, -{9,27,-20}, -{9,27,-19}, -{9,27,-18}, -{9,27,-17}, -{9,27,-16}, -{9,27,-15}, -{9,27,-14}, -{9,27,-13}, -{9,27,-12}, -{9,27,-11}, -{9,27,-10}, -{9,27,-9}, -{9,27,-8}, -{9,27,-7}, -{9,27,-6}, -{9,27,-5}, -{9,27,-4}, -{9,27,-3}, -{9,27,-2}, -{9,27,-1}, -{9,27,0}, -{9,27,1}, -{9,27,2}, -{9,27,3}, -{9,27,4}, -{9,27,5}, -{9,27,6}, -{9,27,7}, -{9,27,8}, -{9,27,9}, -{9,27,10}, -{9,27,11}, -{9,27,12}, -{9,27,13}, -{9,27,14}, -{9,28,-45}, -{9,28,-44}, -{9,28,-43}, -{9,28,-42}, -{9,28,-41}, -{9,28,-40}, -{9,28,-39}, -{9,28,-38}, -{9,28,-37}, -{9,28,-36}, -{9,28,-35}, -{9,28,-34}, -{9,28,-33}, -{9,28,-32}, -{9,28,-31}, -{9,28,-30}, -{9,28,-29}, -{9,28,-28}, -{9,28,-27}, -{9,28,-26}, -{9,28,-25}, -{9,28,-24}, -{9,28,-23}, -{9,28,-22}, -{9,28,-21}, -{9,28,-20}, -{9,28,-19}, -{9,28,-18}, -{9,28,-17}, -{9,28,-16}, -{9,28,-15}, -{9,28,-14}, -{9,28,-13}, -{9,28,-12}, -{9,28,-11}, -{9,28,-10}, -{9,28,-9}, -{9,28,-8}, -{9,28,-7}, -{9,28,-6}, -{9,28,-5}, -{9,28,-4}, -{9,28,-3}, -{9,28,-2}, -{9,28,-1}, -{9,28,0}, -{9,28,1}, -{9,28,2}, -{9,28,3}, -{9,28,4}, -{9,28,5}, -{9,28,6}, -{9,28,7}, -{9,28,8}, -{9,28,9}, -{9,28,10}, -{9,28,11}, -{9,28,12}, -{9,28,13}, -{9,28,14}, -{9,29,-45}, -{9,29,-44}, -{9,29,-43}, -{9,29,-42}, -{9,29,-41}, -{9,29,-40}, -{9,29,-39}, -{9,29,-38}, -{9,29,-37}, -{9,29,-36}, -{9,29,-35}, -{9,29,-34}, -{9,29,-33}, -{9,29,-32}, -{9,29,-31}, -{9,29,-30}, -{9,29,-29}, -{9,29,-28}, -{9,29,-27}, -{9,29,-26}, -{9,29,-25}, -{9,29,-24}, -{9,29,-23}, -{9,29,-22}, -{9,29,-21}, -{9,29,-20}, -{9,29,-19}, -{9,29,-18}, -{9,29,-17}, -{9,29,-16}, -{9,29,-15}, -{9,29,-14}, -{9,29,-13}, -{9,29,-12}, -{9,29,-11}, -{9,29,-10}, -{9,29,-9}, -{9,29,-8}, -{9,29,-7}, -{9,29,-6}, -{9,29,-5}, -{9,29,-4}, -{9,29,-3}, -{9,29,-2}, -{9,29,-1}, -{9,29,0}, -{9,29,1}, -{9,29,2}, -{9,29,3}, -{9,29,4}, -{9,29,5}, -{9,29,6}, -{9,29,7}, -{9,29,8}, -{9,29,9}, -{9,29,10}, -{9,29,11}, -{9,29,12}, -{9,29,13}, -{9,29,14}, -{9,30,-46}, -{9,30,-45}, -{9,30,-44}, -{9,30,-43}, -{9,30,-42}, -{9,30,-41}, -{9,30,-40}, -{9,30,-39}, -{9,30,-38}, -{9,30,-37}, -{9,30,-36}, -{9,30,-35}, -{9,30,-34}, -{9,30,-33}, -{9,30,-32}, -{9,30,-31}, -{9,30,-30}, -{9,30,-29}, -{9,30,-28}, -{9,30,-27}, -{9,30,-26}, -{9,30,-25}, -{9,30,-24}, -{9,30,-23}, -{9,30,-22}, -{9,30,-21}, -{9,30,-20}, -{9,30,-19}, -{9,30,-18}, -{9,30,-17}, -{9,30,-16}, -{9,30,-15}, -{9,30,-14}, -{9,30,-13}, -{9,30,-12}, -{9,30,-11}, -{9,30,-10}, -{9,30,-9}, -{9,30,-8}, -{9,30,-7}, -{9,30,-6}, -{9,30,-5}, -{9,30,-4}, -{9,30,-3}, -{9,30,-2}, -{9,30,-1}, -{9,30,0}, -{9,30,1}, -{9,31,-47}, -{9,31,-46}, -{9,31,-45}, -{9,31,-44}, -{9,31,-43}, -{9,31,-42}, -{9,31,-41}, -{9,31,-40}, -{9,31,-39}, -{9,31,-38}, -{9,31,-37}, -{9,31,-36}, -{9,31,-35}, -{9,31,-34}, -{9,31,-33}, -{9,31,-32}, -{9,31,-31}, -{9,31,-30}, -{9,31,-29}, -{9,31,-28}, -{9,31,-27}, -{9,31,-26}, -{9,31,-25}, -{9,31,-24}, -{9,31,-23}, -{9,31,-22}, -{9,31,-21}, -{9,31,-20}, -{9,31,-19}, -{9,31,-18}, -{9,31,-17}, -{9,31,-16}, -{9,31,-15}, -{9,31,-14}, -{9,31,-13}, -{9,31,-12}, -{9,31,-11}, -{9,31,-10}, -{9,32,-48}, -{9,32,-47}, -{9,32,-46}, -{9,32,-45}, -{9,32,-44}, -{9,32,-43}, -{9,32,-42}, -{9,32,-41}, -{9,32,-40}, -{9,32,-39}, -{9,32,-38}, -{9,32,-37}, -{9,32,-36}, -{9,32,-35}, -{9,32,-34}, -{9,32,-33}, -{9,32,-32}, -{9,32,-31}, -{9,32,-30}, -{9,32,-29}, -{9,32,-28}, -{9,32,-27}, -{9,32,-26}, -{9,32,-25}, -{9,32,-24}, -{9,32,-23}, -{9,32,-22}, -{9,32,-21}, -{9,32,-20}, -{9,32,-19}, -{9,32,-18}, -{9,33,-49}, -{9,33,-48}, -{9,33,-47}, -{9,33,-46}, -{9,33,-45}, -{9,33,-44}, -{9,33,-43}, -{9,33,-42}, -{9,33,-41}, -{9,33,-40}, -{9,33,-39}, -{9,33,-38}, -{9,33,-37}, -{9,33,-36}, -{9,33,-35}, -{9,33,-34}, -{9,33,-33}, -{9,33,-32}, -{9,33,-31}, -{9,33,-30}, -{9,33,-29}, -{9,33,-28}, -{9,33,-27}, -{9,33,-26}, -{9,33,-25}, -{9,34,-50}, -{9,34,-49}, -{9,34,-48}, -{9,34,-47}, -{9,34,-46}, -{9,34,-45}, -{9,34,-44}, -{9,34,-43}, -{9,34,-42}, -{9,34,-41}, -{9,34,-40}, -{9,34,-39}, -{9,34,-38}, -{9,34,-37}, -{9,34,-36}, -{9,34,-35}, -{9,34,-34}, -{9,34,-33}, -{9,34,-32}, -{9,34,-31}, -{9,34,-30}, -{9,35,-51}, -{9,35,-50}, -{9,35,-49}, -{9,35,-48}, -{9,35,-47}, -{9,35,-46}, -{9,35,-45}, -{9,35,-44}, -{9,35,-43}, -{9,35,-42}, -{9,35,-41}, -{9,35,-40}, -{9,35,-39}, -{9,35,-38}, -{9,35,-37}, -{9,35,-36}, -{9,35,-35}, -{9,36,-51}, -{9,36,-50}, -{9,36,-49}, -{9,36,-48}, -{9,36,-47}, -{9,36,-46}, -{9,36,-45}, -{9,36,-44}, -{9,36,-43}, -{9,36,-42}, -{9,36,-41}, -{9,36,-40}, -{9,36,-39}, -{9,37,-52}, -{9,37,-51}, -{9,37,-50}, -{9,37,-49}, -{9,37,-48}, -{9,37,-47}, -{9,37,-46}, -{9,37,-45}, -{9,37,-44}, -{9,37,-43}, -{9,38,-53}, -{9,38,-52}, -{9,38,-51}, -{9,38,-50}, -{9,38,-49}, -{9,38,-48}, -{9,38,-47}, -{9,38,-46}, -{9,39,-54}, -{9,39,-53}, -{9,39,-52}, -{9,39,-51}, -{9,39,-50}, -{9,40,-55}, -{9,40,-54}, -{9,40,-53}, -{9,41,-56}, -{10,-19,12}, -{10,-19,13}, -{10,-19,14}, -{10,-18,10}, -{10,-18,11}, -{10,-18,12}, -{10,-18,13}, -{10,-18,14}, -{10,-17,8}, -{10,-17,9}, -{10,-17,10}, -{10,-17,11}, -{10,-17,12}, -{10,-17,13}, -{10,-17,14}, -{10,-16,5}, -{10,-16,6}, -{10,-16,7}, -{10,-16,8}, -{10,-16,9}, -{10,-16,10}, -{10,-16,11}, -{10,-16,12}, -{10,-16,13}, -{10,-16,14}, -{10,-15,3}, -{10,-15,4}, -{10,-15,5}, -{10,-15,6}, -{10,-15,7}, -{10,-15,8}, -{10,-15,9}, -{10,-15,10}, -{10,-15,11}, -{10,-15,12}, -{10,-15,13}, -{10,-15,14}, -{10,-14,1}, -{10,-14,2}, -{10,-14,3}, -{10,-14,4}, -{10,-14,5}, -{10,-14,6}, -{10,-14,7}, -{10,-14,8}, -{10,-14,9}, -{10,-14,10}, -{10,-14,11}, -{10,-14,12}, -{10,-14,13}, -{10,-14,14}, -{10,-13,-1}, -{10,-13,0}, -{10,-13,1}, -{10,-13,2}, -{10,-13,3}, -{10,-13,4}, -{10,-13,5}, -{10,-13,6}, -{10,-13,7}, -{10,-13,8}, -{10,-13,9}, -{10,-13,10}, -{10,-13,11}, -{10,-13,12}, -{10,-13,13}, -{10,-13,14}, -{10,-12,-3}, -{10,-12,-2}, -{10,-12,-1}, -{10,-12,0}, -{10,-12,1}, -{10,-12,2}, -{10,-12,3}, -{10,-12,4}, -{10,-12,5}, -{10,-12,6}, -{10,-12,7}, -{10,-12,8}, -{10,-12,9}, -{10,-12,10}, -{10,-12,11}, -{10,-12,12}, -{10,-12,13}, -{10,-12,14}, -{10,-11,-4}, -{10,-11,-3}, -{10,-11,-2}, -{10,-11,-1}, -{10,-11,0}, -{10,-11,1}, -{10,-11,2}, -{10,-11,3}, -{10,-11,4}, -{10,-11,5}, -{10,-11,6}, -{10,-11,7}, -{10,-11,8}, -{10,-11,9}, -{10,-11,10}, -{10,-11,11}, -{10,-11,12}, -{10,-11,13}, -{10,-11,14}, -{10,-10,-6}, -{10,-10,-5}, -{10,-10,-4}, -{10,-10,-3}, -{10,-10,-2}, -{10,-10,-1}, -{10,-10,0}, -{10,-10,1}, -{10,-10,2}, -{10,-10,3}, -{10,-10,4}, -{10,-10,5}, -{10,-10,6}, -{10,-10,7}, -{10,-10,8}, -{10,-10,9}, -{10,-10,10}, -{10,-10,11}, -{10,-10,12}, -{10,-10,13}, -{10,-10,14}, -{10,-9,-7}, -{10,-9,-6}, -{10,-9,-5}, -{10,-9,-4}, -{10,-9,-3}, -{10,-9,-2}, -{10,-9,-1}, -{10,-9,0}, -{10,-9,1}, -{10,-9,2}, -{10,-9,3}, -{10,-9,4}, -{10,-9,5}, -{10,-9,6}, -{10,-9,7}, -{10,-9,8}, -{10,-9,9}, -{10,-9,10}, -{10,-9,11}, -{10,-9,12}, -{10,-9,13}, -{10,-9,14}, -{10,-8,-9}, -{10,-8,-8}, -{10,-8,-7}, -{10,-8,-6}, -{10,-8,-5}, -{10,-8,-4}, -{10,-8,-3}, -{10,-8,-2}, -{10,-8,-1}, -{10,-8,0}, -{10,-8,1}, -{10,-8,2}, -{10,-8,3}, -{10,-8,4}, -{10,-8,5}, -{10,-8,6}, -{10,-8,7}, -{10,-8,8}, -{10,-8,9}, -{10,-8,10}, -{10,-8,11}, -{10,-8,12}, -{10,-8,13}, -{10,-8,14}, -{10,-7,-10}, -{10,-7,-9}, -{10,-7,-8}, -{10,-7,-7}, -{10,-7,-6}, -{10,-7,-5}, -{10,-7,-4}, -{10,-7,-3}, -{10,-7,-2}, -{10,-7,-1}, -{10,-7,0}, -{10,-7,1}, -{10,-7,2}, -{10,-7,3}, -{10,-7,4}, -{10,-7,5}, -{10,-7,6}, -{10,-7,7}, -{10,-7,8}, -{10,-7,9}, -{10,-7,10}, -{10,-7,11}, -{10,-7,12}, -{10,-7,13}, -{10,-7,14}, -{10,-6,-11}, -{10,-6,-10}, -{10,-6,-9}, -{10,-6,-8}, -{10,-6,-7}, -{10,-6,-6}, -{10,-6,-5}, -{10,-6,-4}, -{10,-6,-3}, -{10,-6,-2}, -{10,-6,-1}, -{10,-6,0}, -{10,-6,1}, -{10,-6,2}, -{10,-6,3}, -{10,-6,4}, -{10,-6,5}, -{10,-6,6}, -{10,-6,7}, -{10,-6,8}, -{10,-6,9}, -{10,-6,10}, -{10,-6,11}, -{10,-6,12}, -{10,-6,13}, -{10,-6,14}, -{10,-5,-12}, -{10,-5,-11}, -{10,-5,-10}, -{10,-5,-9}, -{10,-5,-8}, -{10,-5,-7}, -{10,-5,-6}, -{10,-5,-5}, -{10,-5,-4}, -{10,-5,-3}, -{10,-5,-2}, -{10,-5,-1}, -{10,-5,0}, -{10,-5,1}, -{10,-5,2}, -{10,-5,3}, -{10,-5,4}, -{10,-5,5}, -{10,-5,6}, -{10,-5,7}, -{10,-5,8}, -{10,-5,9}, -{10,-5,10}, -{10,-5,11}, -{10,-5,12}, -{10,-5,13}, -{10,-5,14}, -{10,-4,-14}, -{10,-4,-13}, -{10,-4,-12}, -{10,-4,-11}, -{10,-4,-10}, -{10,-4,-9}, -{10,-4,-8}, -{10,-4,-7}, -{10,-4,-6}, -{10,-4,-5}, -{10,-4,-4}, -{10,-4,-3}, -{10,-4,-2}, -{10,-4,-1}, -{10,-4,0}, -{10,-4,1}, -{10,-4,2}, -{10,-4,3}, -{10,-4,4}, -{10,-4,5}, -{10,-4,6}, -{10,-4,7}, -{10,-4,8}, -{10,-4,9}, -{10,-4,10}, -{10,-4,11}, -{10,-4,12}, -{10,-4,13}, -{10,-4,14}, -{10,-4,15}, -{10,-3,-15}, -{10,-3,-14}, -{10,-3,-13}, -{10,-3,-12}, -{10,-3,-11}, -{10,-3,-10}, -{10,-3,-9}, -{10,-3,-8}, -{10,-3,-7}, -{10,-3,-6}, -{10,-3,-5}, -{10,-3,-4}, -{10,-3,-3}, -{10,-3,-2}, -{10,-3,-1}, -{10,-3,0}, -{10,-3,1}, -{10,-3,2}, -{10,-3,3}, -{10,-3,4}, -{10,-3,5}, -{10,-3,6}, -{10,-3,7}, -{10,-3,8}, -{10,-3,9}, -{10,-3,10}, -{10,-3,11}, -{10,-3,12}, -{10,-3,13}, -{10,-3,14}, -{10,-3,15}, -{10,-2,-16}, -{10,-2,-15}, -{10,-2,-14}, -{10,-2,-13}, -{10,-2,-12}, -{10,-2,-11}, -{10,-2,-10}, -{10,-2,-9}, -{10,-2,-8}, -{10,-2,-7}, -{10,-2,-6}, -{10,-2,-5}, -{10,-2,-4}, -{10,-2,-3}, -{10,-2,-2}, -{10,-2,-1}, -{10,-2,0}, -{10,-2,1}, -{10,-2,2}, -{10,-2,3}, -{10,-2,4}, -{10,-2,5}, -{10,-2,6}, -{10,-2,7}, -{10,-2,8}, -{10,-2,9}, -{10,-2,10}, -{10,-2,11}, -{10,-2,12}, -{10,-2,13}, -{10,-2,14}, -{10,-2,15}, -{10,-1,-17}, -{10,-1,-16}, -{10,-1,-15}, -{10,-1,-14}, -{10,-1,-13}, -{10,-1,-12}, -{10,-1,-11}, -{10,-1,-10}, -{10,-1,-9}, -{10,-1,-8}, -{10,-1,-7}, -{10,-1,-6}, -{10,-1,-5}, -{10,-1,-4}, -{10,-1,-3}, -{10,-1,-2}, -{10,-1,-1}, -{10,-1,0}, -{10,-1,1}, -{10,-1,2}, -{10,-1,3}, -{10,-1,4}, -{10,-1,5}, -{10,-1,6}, -{10,-1,7}, -{10,-1,8}, -{10,-1,9}, -{10,-1,10}, -{10,-1,11}, -{10,-1,12}, -{10,-1,13}, -{10,-1,14}, -{10,-1,15}, -{10,0,-18}, -{10,0,-17}, -{10,0,-16}, -{10,0,-15}, -{10,0,-14}, -{10,0,-13}, -{10,0,-12}, -{10,0,-11}, -{10,0,-10}, -{10,0,-9}, -{10,0,-8}, -{10,0,-7}, -{10,0,-6}, -{10,0,-5}, -{10,0,-4}, -{10,0,-3}, -{10,0,-2}, -{10,0,-1}, -{10,0,0}, -{10,0,1}, -{10,0,2}, -{10,0,3}, -{10,0,4}, -{10,0,5}, -{10,0,6}, -{10,0,7}, -{10,0,8}, -{10,0,9}, -{10,0,10}, -{10,0,11}, -{10,0,12}, -{10,0,13}, -{10,0,14}, -{10,0,15}, -{10,1,-19}, -{10,1,-18}, -{10,1,-17}, -{10,1,-16}, -{10,1,-15}, -{10,1,-14}, -{10,1,-13}, -{10,1,-12}, -{10,1,-11}, -{10,1,-10}, -{10,1,-9}, -{10,1,-8}, -{10,1,-7}, -{10,1,-6}, -{10,1,-5}, -{10,1,-4}, -{10,1,-3}, -{10,1,-2}, -{10,1,-1}, -{10,1,0}, -{10,1,1}, -{10,1,2}, -{10,1,3}, -{10,1,4}, -{10,1,5}, -{10,1,6}, -{10,1,7}, -{10,1,8}, -{10,1,9}, -{10,1,10}, -{10,1,11}, -{10,1,12}, -{10,1,13}, -{10,1,14}, -{10,1,15}, -{10,2,-21}, -{10,2,-20}, -{10,2,-19}, -{10,2,-18}, -{10,2,-17}, -{10,2,-16}, -{10,2,-15}, -{10,2,-14}, -{10,2,-13}, -{10,2,-12}, -{10,2,-11}, -{10,2,-10}, -{10,2,-9}, -{10,2,-8}, -{10,2,-7}, -{10,2,-6}, -{10,2,-5}, -{10,2,-4}, -{10,2,-3}, -{10,2,-2}, -{10,2,-1}, -{10,2,0}, -{10,2,1}, -{10,2,2}, -{10,2,3}, -{10,2,4}, -{10,2,5}, -{10,2,6}, -{10,2,7}, -{10,2,8}, -{10,2,9}, -{10,2,10}, -{10,2,11}, -{10,2,12}, -{10,2,13}, -{10,2,14}, -{10,2,15}, -{10,3,-22}, -{10,3,-21}, -{10,3,-20}, -{10,3,-19}, -{10,3,-18}, -{10,3,-17}, -{10,3,-16}, -{10,3,-15}, -{10,3,-14}, -{10,3,-13}, -{10,3,-12}, -{10,3,-11}, -{10,3,-10}, -{10,3,-9}, -{10,3,-8}, -{10,3,-7}, -{10,3,-6}, -{10,3,-5}, -{10,3,-4}, -{10,3,-3}, -{10,3,-2}, -{10,3,-1}, -{10,3,0}, -{10,3,1}, -{10,3,2}, -{10,3,3}, -{10,3,4}, -{10,3,5}, -{10,3,6}, -{10,3,7}, -{10,3,8}, -{10,3,9}, -{10,3,10}, -{10,3,11}, -{10,3,12}, -{10,3,13}, -{10,3,14}, -{10,3,15}, -{10,4,-23}, -{10,4,-22}, -{10,4,-21}, -{10,4,-20}, -{10,4,-19}, -{10,4,-18}, -{10,4,-17}, -{10,4,-16}, -{10,4,-15}, -{10,4,-14}, -{10,4,-13}, -{10,4,-12}, -{10,4,-11}, -{10,4,-10}, -{10,4,-9}, -{10,4,-8}, -{10,4,-7}, -{10,4,-6}, -{10,4,-5}, -{10,4,-4}, -{10,4,-3}, -{10,4,-2}, -{10,4,-1}, -{10,4,0}, -{10,4,1}, -{10,4,2}, -{10,4,3}, -{10,4,4}, -{10,4,5}, -{10,4,6}, -{10,4,7}, -{10,4,8}, -{10,4,9}, -{10,4,10}, -{10,4,11}, -{10,4,12}, -{10,4,13}, -{10,4,14}, -{10,4,15}, -{10,5,-24}, -{10,5,-23}, -{10,5,-22}, -{10,5,-21}, -{10,5,-20}, -{10,5,-19}, -{10,5,-18}, -{10,5,-17}, -{10,5,-16}, -{10,5,-15}, -{10,5,-14}, -{10,5,-13}, -{10,5,-12}, -{10,5,-11}, -{10,5,-10}, -{10,5,-9}, -{10,5,-8}, -{10,5,-7}, -{10,5,-6}, -{10,5,-5}, -{10,5,-4}, -{10,5,-3}, -{10,5,-2}, -{10,5,-1}, -{10,5,0}, -{10,5,1}, -{10,5,2}, -{10,5,3}, -{10,5,4}, -{10,5,5}, -{10,5,6}, -{10,5,7}, -{10,5,8}, -{10,5,9}, -{10,5,10}, -{10,5,11}, -{10,5,12}, -{10,5,13}, -{10,5,14}, -{10,5,15}, -{10,6,-25}, -{10,6,-24}, -{10,6,-23}, -{10,6,-22}, -{10,6,-21}, -{10,6,-20}, -{10,6,-19}, -{10,6,-18}, -{10,6,-17}, -{10,6,-16}, -{10,6,-15}, -{10,6,-14}, -{10,6,-13}, -{10,6,-12}, -{10,6,-11}, -{10,6,-10}, -{10,6,-9}, -{10,6,-8}, -{10,6,-7}, -{10,6,-6}, -{10,6,-5}, -{10,6,-4}, -{10,6,-3}, -{10,6,-2}, -{10,6,-1}, -{10,6,0}, -{10,6,1}, -{10,6,2}, -{10,6,3}, -{10,6,4}, -{10,6,5}, -{10,6,6}, -{10,6,7}, -{10,6,8}, -{10,6,9}, -{10,6,10}, -{10,6,11}, -{10,6,12}, -{10,6,13}, -{10,6,14}, -{10,6,15}, -{10,7,-26}, -{10,7,-25}, -{10,7,-24}, -{10,7,-23}, -{10,7,-22}, -{10,7,-21}, -{10,7,-20}, -{10,7,-19}, -{10,7,-18}, -{10,7,-17}, -{10,7,-16}, -{10,7,-15}, -{10,7,-14}, -{10,7,-13}, -{10,7,-12}, -{10,7,-11}, -{10,7,-10}, -{10,7,-9}, -{10,7,-8}, -{10,7,-7}, -{10,7,-6}, -{10,7,-5}, -{10,7,-4}, -{10,7,-3}, -{10,7,-2}, -{10,7,-1}, -{10,7,0}, -{10,7,1}, -{10,7,2}, -{10,7,3}, -{10,7,4}, -{10,7,5}, -{10,7,6}, -{10,7,7}, -{10,7,8}, -{10,7,9}, -{10,7,10}, -{10,7,11}, -{10,7,12}, -{10,7,13}, -{10,7,14}, -{10,7,15}, -{10,8,-27}, -{10,8,-26}, -{10,8,-25}, -{10,8,-24}, -{10,8,-23}, -{10,8,-22}, -{10,8,-21}, -{10,8,-20}, -{10,8,-19}, -{10,8,-18}, -{10,8,-17}, -{10,8,-16}, -{10,8,-15}, -{10,8,-14}, -{10,8,-13}, -{10,8,-12}, -{10,8,-11}, -{10,8,-10}, -{10,8,-9}, -{10,8,-8}, -{10,8,-7}, -{10,8,-6}, -{10,8,-5}, -{10,8,-4}, -{10,8,-3}, -{10,8,-2}, -{10,8,-1}, -{10,8,0}, -{10,8,1}, -{10,8,2}, -{10,8,3}, -{10,8,4}, -{10,8,5}, -{10,8,6}, -{10,8,7}, -{10,8,8}, -{10,8,9}, -{10,8,10}, -{10,8,11}, -{10,8,12}, -{10,8,13}, -{10,8,14}, -{10,8,15}, -{10,9,-28}, -{10,9,-27}, -{10,9,-26}, -{10,9,-25}, -{10,9,-24}, -{10,9,-23}, -{10,9,-22}, -{10,9,-21}, -{10,9,-20}, -{10,9,-19}, -{10,9,-18}, -{10,9,-17}, -{10,9,-16}, -{10,9,-15}, -{10,9,-14}, -{10,9,-13}, -{10,9,-12}, -{10,9,-11}, -{10,9,-10}, -{10,9,-9}, -{10,9,-8}, -{10,9,-7}, -{10,9,-6}, -{10,9,-5}, -{10,9,-4}, -{10,9,-3}, -{10,9,-2}, -{10,9,-1}, -{10,9,0}, -{10,9,1}, -{10,9,2}, -{10,9,3}, -{10,9,4}, -{10,9,5}, -{10,9,6}, -{10,9,7}, -{10,9,8}, -{10,9,9}, -{10,9,10}, -{10,9,11}, -{10,9,12}, -{10,9,13}, -{10,9,14}, -{10,9,15}, -{10,10,-29}, -{10,10,-28}, -{10,10,-27}, -{10,10,-26}, -{10,10,-25}, -{10,10,-24}, -{10,10,-23}, -{10,10,-22}, -{10,10,-21}, -{10,10,-20}, -{10,10,-19}, -{10,10,-18}, -{10,10,-17}, -{10,10,-16}, -{10,10,-15}, -{10,10,-14}, -{10,10,-13}, -{10,10,-12}, -{10,10,-11}, -{10,10,-10}, -{10,10,-9}, -{10,10,-8}, -{10,10,-7}, -{10,10,-6}, -{10,10,-5}, -{10,10,-4}, -{10,10,-3}, -{10,10,-2}, -{10,10,-1}, -{10,10,0}, -{10,10,1}, -{10,10,2}, -{10,10,3}, -{10,10,4}, -{10,10,5}, -{10,10,6}, -{10,10,7}, -{10,10,8}, -{10,10,9}, -{10,10,10}, -{10,10,11}, -{10,10,12}, -{10,10,13}, -{10,10,14}, -{10,10,15}, -{10,11,-30}, -{10,11,-29}, -{10,11,-28}, -{10,11,-27}, -{10,11,-26}, -{10,11,-25}, -{10,11,-24}, -{10,11,-23}, -{10,11,-22}, -{10,11,-21}, -{10,11,-20}, -{10,11,-19}, -{10,11,-18}, -{10,11,-17}, -{10,11,-16}, -{10,11,-15}, -{10,11,-14}, -{10,11,-13}, -{10,11,-12}, -{10,11,-11}, -{10,11,-10}, -{10,11,-9}, -{10,11,-8}, -{10,11,-7}, -{10,11,-6}, -{10,11,-5}, -{10,11,-4}, -{10,11,-3}, -{10,11,-2}, -{10,11,-1}, -{10,11,0}, -{10,11,1}, -{10,11,2}, -{10,11,3}, -{10,11,4}, -{10,11,5}, -{10,11,6}, -{10,11,7}, -{10,11,8}, -{10,11,9}, -{10,11,10}, -{10,11,11}, -{10,11,12}, -{10,11,13}, -{10,11,14}, -{10,11,15}, -{10,12,-31}, -{10,12,-30}, -{10,12,-29}, -{10,12,-28}, -{10,12,-27}, -{10,12,-26}, -{10,12,-25}, -{10,12,-24}, -{10,12,-23}, -{10,12,-22}, -{10,12,-21}, -{10,12,-20}, -{10,12,-19}, -{10,12,-18}, -{10,12,-17}, -{10,12,-16}, -{10,12,-15}, -{10,12,-14}, -{10,12,-13}, -{10,12,-12}, -{10,12,-11}, -{10,12,-10}, -{10,12,-9}, -{10,12,-8}, -{10,12,-7}, -{10,12,-6}, -{10,12,-5}, -{10,12,-4}, -{10,12,-3}, -{10,12,-2}, -{10,12,-1}, -{10,12,0}, -{10,12,1}, -{10,12,2}, -{10,12,3}, -{10,12,4}, -{10,12,5}, -{10,12,6}, -{10,12,7}, -{10,12,8}, -{10,12,9}, -{10,12,10}, -{10,12,11}, -{10,12,12}, -{10,12,13}, -{10,12,14}, -{10,12,15}, -{10,13,-32}, -{10,13,-31}, -{10,13,-30}, -{10,13,-29}, -{10,13,-28}, -{10,13,-27}, -{10,13,-26}, -{10,13,-25}, -{10,13,-24}, -{10,13,-23}, -{10,13,-22}, -{10,13,-21}, -{10,13,-20}, -{10,13,-19}, -{10,13,-18}, -{10,13,-17}, -{10,13,-16}, -{10,13,-15}, -{10,13,-14}, -{10,13,-13}, -{10,13,-12}, -{10,13,-11}, -{10,13,-10}, -{10,13,-9}, -{10,13,-8}, -{10,13,-7}, -{10,13,-6}, -{10,13,-5}, -{10,13,-4}, -{10,13,-3}, -{10,13,-2}, -{10,13,-1}, -{10,13,0}, -{10,13,1}, -{10,13,2}, -{10,13,3}, -{10,13,4}, -{10,13,5}, -{10,13,6}, -{10,13,7}, -{10,13,8}, -{10,13,9}, -{10,13,10}, -{10,13,11}, -{10,13,12}, -{10,13,13}, -{10,13,14}, -{10,13,15}, -{10,14,-33}, -{10,14,-32}, -{10,14,-31}, -{10,14,-30}, -{10,14,-29}, -{10,14,-28}, -{10,14,-27}, -{10,14,-26}, -{10,14,-25}, -{10,14,-24}, -{10,14,-23}, -{10,14,-22}, -{10,14,-21}, -{10,14,-20}, -{10,14,-19}, -{10,14,-18}, -{10,14,-17}, -{10,14,-16}, -{10,14,-15}, -{10,14,-14}, -{10,14,-13}, -{10,14,-12}, -{10,14,-11}, -{10,14,-10}, -{10,14,-9}, -{10,14,-8}, -{10,14,-7}, -{10,14,-6}, -{10,14,-5}, -{10,14,-4}, -{10,14,-3}, -{10,14,-2}, -{10,14,-1}, -{10,14,0}, -{10,14,1}, -{10,14,2}, -{10,14,3}, -{10,14,4}, -{10,14,5}, -{10,14,6}, -{10,14,7}, -{10,14,8}, -{10,14,9}, -{10,14,10}, -{10,14,11}, -{10,14,12}, -{10,14,13}, -{10,14,14}, -{10,14,15}, -{10,15,-34}, -{10,15,-33}, -{10,15,-32}, -{10,15,-31}, -{10,15,-30}, -{10,15,-29}, -{10,15,-28}, -{10,15,-27}, -{10,15,-26}, -{10,15,-25}, -{10,15,-24}, -{10,15,-23}, -{10,15,-22}, -{10,15,-21}, -{10,15,-20}, -{10,15,-19}, -{10,15,-18}, -{10,15,-17}, -{10,15,-16}, -{10,15,-15}, -{10,15,-14}, -{10,15,-13}, -{10,15,-12}, -{10,15,-11}, -{10,15,-10}, -{10,15,-9}, -{10,15,-8}, -{10,15,-7}, -{10,15,-6}, -{10,15,-5}, -{10,15,-4}, -{10,15,-3}, -{10,15,-2}, -{10,15,-1}, -{10,15,0}, -{10,15,1}, -{10,15,2}, -{10,15,3}, -{10,15,4}, -{10,15,5}, -{10,15,6}, -{10,15,7}, -{10,15,8}, -{10,15,9}, -{10,15,10}, -{10,15,11}, -{10,15,12}, -{10,15,13}, -{10,15,14}, -{10,15,15}, -{10,16,-35}, -{10,16,-34}, -{10,16,-33}, -{10,16,-32}, -{10,16,-31}, -{10,16,-30}, -{10,16,-29}, -{10,16,-28}, -{10,16,-27}, -{10,16,-26}, -{10,16,-25}, -{10,16,-24}, -{10,16,-23}, -{10,16,-22}, -{10,16,-21}, -{10,16,-20}, -{10,16,-19}, -{10,16,-18}, -{10,16,-17}, -{10,16,-16}, -{10,16,-15}, -{10,16,-14}, -{10,16,-13}, -{10,16,-12}, -{10,16,-11}, -{10,16,-10}, -{10,16,-9}, -{10,16,-8}, -{10,16,-7}, -{10,16,-6}, -{10,16,-5}, -{10,16,-4}, -{10,16,-3}, -{10,16,-2}, -{10,16,-1}, -{10,16,0}, -{10,16,1}, -{10,16,2}, -{10,16,3}, -{10,16,4}, -{10,16,5}, -{10,16,6}, -{10,16,7}, -{10,16,8}, -{10,16,9}, -{10,16,10}, -{10,16,11}, -{10,16,12}, -{10,16,13}, -{10,16,14}, -{10,16,15}, -{10,17,-36}, -{10,17,-35}, -{10,17,-34}, -{10,17,-33}, -{10,17,-32}, -{10,17,-31}, -{10,17,-30}, -{10,17,-29}, -{10,17,-28}, -{10,17,-27}, -{10,17,-26}, -{10,17,-25}, -{10,17,-24}, -{10,17,-23}, -{10,17,-22}, -{10,17,-21}, -{10,17,-20}, -{10,17,-19}, -{10,17,-18}, -{10,17,-17}, -{10,17,-16}, -{10,17,-15}, -{10,17,-14}, -{10,17,-13}, -{10,17,-12}, -{10,17,-11}, -{10,17,-10}, -{10,17,-9}, -{10,17,-8}, -{10,17,-7}, -{10,17,-6}, -{10,17,-5}, -{10,17,-4}, -{10,17,-3}, -{10,17,-2}, -{10,17,-1}, -{10,17,0}, -{10,17,1}, -{10,17,2}, -{10,17,3}, -{10,17,4}, -{10,17,5}, -{10,17,6}, -{10,17,7}, -{10,17,8}, -{10,17,9}, -{10,17,10}, -{10,17,11}, -{10,17,12}, -{10,17,13}, -{10,17,14}, -{10,17,15}, -{10,18,-36}, -{10,18,-35}, -{10,18,-34}, -{10,18,-33}, -{10,18,-32}, -{10,18,-31}, -{10,18,-30}, -{10,18,-29}, -{10,18,-28}, -{10,18,-27}, -{10,18,-26}, -{10,18,-25}, -{10,18,-24}, -{10,18,-23}, -{10,18,-22}, -{10,18,-21}, -{10,18,-20}, -{10,18,-19}, -{10,18,-18}, -{10,18,-17}, -{10,18,-16}, -{10,18,-15}, -{10,18,-14}, -{10,18,-13}, -{10,18,-12}, -{10,18,-11}, -{10,18,-10}, -{10,18,-9}, -{10,18,-8}, -{10,18,-7}, -{10,18,-6}, -{10,18,-5}, -{10,18,-4}, -{10,18,-3}, -{10,18,-2}, -{10,18,-1}, -{10,18,0}, -{10,18,1}, -{10,18,2}, -{10,18,3}, -{10,18,4}, -{10,18,5}, -{10,18,6}, -{10,18,7}, -{10,18,8}, -{10,18,9}, -{10,18,10}, -{10,18,11}, -{10,18,12}, -{10,18,13}, -{10,18,14}, -{10,18,15}, -{10,19,-37}, -{10,19,-36}, -{10,19,-35}, -{10,19,-34}, -{10,19,-33}, -{10,19,-32}, -{10,19,-31}, -{10,19,-30}, -{10,19,-29}, -{10,19,-28}, -{10,19,-27}, -{10,19,-26}, -{10,19,-25}, -{10,19,-24}, -{10,19,-23}, -{10,19,-22}, -{10,19,-21}, -{10,19,-20}, -{10,19,-19}, -{10,19,-18}, -{10,19,-17}, -{10,19,-16}, -{10,19,-15}, -{10,19,-14}, -{10,19,-13}, -{10,19,-12}, -{10,19,-11}, -{10,19,-10}, -{10,19,-9}, -{10,19,-8}, -{10,19,-7}, -{10,19,-6}, -{10,19,-5}, -{10,19,-4}, -{10,19,-3}, -{10,19,-2}, -{10,19,-1}, -{10,19,0}, -{10,19,1}, -{10,19,2}, -{10,19,3}, -{10,19,4}, -{10,19,5}, -{10,19,6}, -{10,19,7}, -{10,19,8}, -{10,19,9}, -{10,19,10}, -{10,19,11}, -{10,19,12}, -{10,19,13}, -{10,19,14}, -{10,19,15}, -{10,20,-38}, -{10,20,-37}, -{10,20,-36}, -{10,20,-35}, -{10,20,-34}, -{10,20,-33}, -{10,20,-32}, -{10,20,-31}, -{10,20,-30}, -{10,20,-29}, -{10,20,-28}, -{10,20,-27}, -{10,20,-26}, -{10,20,-25}, -{10,20,-24}, -{10,20,-23}, -{10,20,-22}, -{10,20,-21}, -{10,20,-20}, -{10,20,-19}, -{10,20,-18}, -{10,20,-17}, -{10,20,-16}, -{10,20,-15}, -{10,20,-14}, -{10,20,-13}, -{10,20,-12}, -{10,20,-11}, -{10,20,-10}, -{10,20,-9}, -{10,20,-8}, -{10,20,-7}, -{10,20,-6}, -{10,20,-5}, -{10,20,-4}, -{10,20,-3}, -{10,20,-2}, -{10,20,-1}, -{10,20,0}, -{10,20,1}, -{10,20,2}, -{10,20,3}, -{10,20,4}, -{10,20,5}, -{10,20,6}, -{10,20,7}, -{10,20,8}, -{10,20,9}, -{10,20,10}, -{10,20,11}, -{10,20,12}, -{10,20,13}, -{10,20,14}, -{10,20,15}, -{10,21,-39}, -{10,21,-38}, -{10,21,-37}, -{10,21,-36}, -{10,21,-35}, -{10,21,-34}, -{10,21,-33}, -{10,21,-32}, -{10,21,-31}, -{10,21,-30}, -{10,21,-29}, -{10,21,-28}, -{10,21,-27}, -{10,21,-26}, -{10,21,-25}, -{10,21,-24}, -{10,21,-23}, -{10,21,-22}, -{10,21,-21}, -{10,21,-20}, -{10,21,-19}, -{10,21,-18}, -{10,21,-17}, -{10,21,-16}, -{10,21,-15}, -{10,21,-14}, -{10,21,-13}, -{10,21,-12}, -{10,21,-11}, -{10,21,-10}, -{10,21,-9}, -{10,21,-8}, -{10,21,-7}, -{10,21,-6}, -{10,21,-5}, -{10,21,-4}, -{10,21,-3}, -{10,21,-2}, -{10,21,-1}, -{10,21,0}, -{10,21,1}, -{10,21,2}, -{10,21,3}, -{10,21,4}, -{10,21,5}, -{10,21,6}, -{10,21,7}, -{10,21,8}, -{10,21,9}, -{10,21,10}, -{10,21,11}, -{10,21,12}, -{10,21,13}, -{10,21,14}, -{10,21,15}, -{10,22,-40}, -{10,22,-39}, -{10,22,-38}, -{10,22,-37}, -{10,22,-36}, -{10,22,-35}, -{10,22,-34}, -{10,22,-33}, -{10,22,-32}, -{10,22,-31}, -{10,22,-30}, -{10,22,-29}, -{10,22,-28}, -{10,22,-27}, -{10,22,-26}, -{10,22,-25}, -{10,22,-24}, -{10,22,-23}, -{10,22,-22}, -{10,22,-21}, -{10,22,-20}, -{10,22,-19}, -{10,22,-18}, -{10,22,-17}, -{10,22,-16}, -{10,22,-15}, -{10,22,-14}, -{10,22,-13}, -{10,22,-12}, -{10,22,-11}, -{10,22,-10}, -{10,22,-9}, -{10,22,-8}, -{10,22,-7}, -{10,22,-6}, -{10,22,-5}, -{10,22,-4}, -{10,22,-3}, -{10,22,-2}, -{10,22,-1}, -{10,22,0}, -{10,22,1}, -{10,22,2}, -{10,22,3}, -{10,22,4}, -{10,22,5}, -{10,22,6}, -{10,22,7}, -{10,22,8}, -{10,22,9}, -{10,22,10}, -{10,22,11}, -{10,22,12}, -{10,22,13}, -{10,22,14}, -{10,22,15}, -{10,23,-41}, -{10,23,-40}, -{10,23,-39}, -{10,23,-38}, -{10,23,-37}, -{10,23,-36}, -{10,23,-35}, -{10,23,-34}, -{10,23,-33}, -{10,23,-32}, -{10,23,-31}, -{10,23,-30}, -{10,23,-29}, -{10,23,-28}, -{10,23,-27}, -{10,23,-26}, -{10,23,-25}, -{10,23,-24}, -{10,23,-23}, -{10,23,-22}, -{10,23,-21}, -{10,23,-20}, -{10,23,-19}, -{10,23,-18}, -{10,23,-17}, -{10,23,-16}, -{10,23,-15}, -{10,23,-14}, -{10,23,-13}, -{10,23,-12}, -{10,23,-11}, -{10,23,-10}, -{10,23,-9}, -{10,23,-8}, -{10,23,-7}, -{10,23,-6}, -{10,23,-5}, -{10,23,-4}, -{10,23,-3}, -{10,23,-2}, -{10,23,-1}, -{10,23,0}, -{10,23,1}, -{10,23,2}, -{10,23,3}, -{10,23,4}, -{10,23,5}, -{10,23,6}, -{10,23,7}, -{10,23,8}, -{10,23,9}, -{10,23,10}, -{10,23,11}, -{10,23,12}, -{10,23,13}, -{10,23,14}, -{10,23,15}, -{10,24,-42}, -{10,24,-41}, -{10,24,-40}, -{10,24,-39}, -{10,24,-38}, -{10,24,-37}, -{10,24,-36}, -{10,24,-35}, -{10,24,-34}, -{10,24,-33}, -{10,24,-32}, -{10,24,-31}, -{10,24,-30}, -{10,24,-29}, -{10,24,-28}, -{10,24,-27}, -{10,24,-26}, -{10,24,-25}, -{10,24,-24}, -{10,24,-23}, -{10,24,-22}, -{10,24,-21}, -{10,24,-20}, -{10,24,-19}, -{10,24,-18}, -{10,24,-17}, -{10,24,-16}, -{10,24,-15}, -{10,24,-14}, -{10,24,-13}, -{10,24,-12}, -{10,24,-11}, -{10,24,-10}, -{10,24,-9}, -{10,24,-8}, -{10,24,-7}, -{10,24,-6}, -{10,24,-5}, -{10,24,-4}, -{10,24,-3}, -{10,24,-2}, -{10,24,-1}, -{10,24,0}, -{10,24,1}, -{10,24,2}, -{10,24,3}, -{10,24,4}, -{10,24,5}, -{10,24,6}, -{10,24,7}, -{10,24,8}, -{10,24,9}, -{10,24,10}, -{10,24,11}, -{10,24,12}, -{10,24,13}, -{10,24,14}, -{10,24,15}, -{10,25,-43}, -{10,25,-42}, -{10,25,-41}, -{10,25,-40}, -{10,25,-39}, -{10,25,-38}, -{10,25,-37}, -{10,25,-36}, -{10,25,-35}, -{10,25,-34}, -{10,25,-33}, -{10,25,-32}, -{10,25,-31}, -{10,25,-30}, -{10,25,-29}, -{10,25,-28}, -{10,25,-27}, -{10,25,-26}, -{10,25,-25}, -{10,25,-24}, -{10,25,-23}, -{10,25,-22}, -{10,25,-21}, -{10,25,-20}, -{10,25,-19}, -{10,25,-18}, -{10,25,-17}, -{10,25,-16}, -{10,25,-15}, -{10,25,-14}, -{10,25,-13}, -{10,25,-12}, -{10,25,-11}, -{10,25,-10}, -{10,25,-9}, -{10,25,-8}, -{10,25,-7}, -{10,25,-6}, -{10,25,-5}, -{10,25,-4}, -{10,25,-3}, -{10,25,-2}, -{10,25,-1}, -{10,25,0}, -{10,25,1}, -{10,25,2}, -{10,25,3}, -{10,25,4}, -{10,25,5}, -{10,25,6}, -{10,25,7}, -{10,25,8}, -{10,25,9}, -{10,25,10}, -{10,25,11}, -{10,25,12}, -{10,25,13}, -{10,25,14}, -{10,25,15}, -{10,26,-44}, -{10,26,-43}, -{10,26,-42}, -{10,26,-41}, -{10,26,-40}, -{10,26,-39}, -{10,26,-38}, -{10,26,-37}, -{10,26,-36}, -{10,26,-35}, -{10,26,-34}, -{10,26,-33}, -{10,26,-32}, -{10,26,-31}, -{10,26,-30}, -{10,26,-29}, -{10,26,-28}, -{10,26,-27}, -{10,26,-26}, -{10,26,-25}, -{10,26,-24}, -{10,26,-23}, -{10,26,-22}, -{10,26,-21}, -{10,26,-20}, -{10,26,-19}, -{10,26,-18}, -{10,26,-17}, -{10,26,-16}, -{10,26,-15}, -{10,26,-14}, -{10,26,-13}, -{10,26,-12}, -{10,26,-11}, -{10,26,-10}, -{10,26,-9}, -{10,26,-8}, -{10,26,-7}, -{10,26,-6}, -{10,26,-5}, -{10,26,-4}, -{10,26,-3}, -{10,26,-2}, -{10,26,-1}, -{10,26,0}, -{10,26,1}, -{10,26,2}, -{10,26,3}, -{10,26,4}, -{10,26,5}, -{10,26,6}, -{10,26,7}, -{10,26,8}, -{10,26,9}, -{10,26,10}, -{10,26,11}, -{10,26,12}, -{10,26,13}, -{10,26,14}, -{10,26,15}, -{10,27,-45}, -{10,27,-44}, -{10,27,-43}, -{10,27,-42}, -{10,27,-41}, -{10,27,-40}, -{10,27,-39}, -{10,27,-38}, -{10,27,-37}, -{10,27,-36}, -{10,27,-35}, -{10,27,-34}, -{10,27,-33}, -{10,27,-32}, -{10,27,-31}, -{10,27,-30}, -{10,27,-29}, -{10,27,-28}, -{10,27,-27}, -{10,27,-26}, -{10,27,-25}, -{10,27,-24}, -{10,27,-23}, -{10,27,-22}, -{10,27,-21}, -{10,27,-20}, -{10,27,-19}, -{10,27,-18}, -{10,27,-17}, -{10,27,-16}, -{10,27,-15}, -{10,27,-14}, -{10,27,-13}, -{10,27,-12}, -{10,27,-11}, -{10,27,-10}, -{10,27,-9}, -{10,27,-8}, -{10,27,-7}, -{10,27,-6}, -{10,27,-5}, -{10,27,-4}, -{10,27,-3}, -{10,27,-2}, -{10,27,-1}, -{10,27,0}, -{10,27,1}, -{10,27,2}, -{10,27,3}, -{10,27,4}, -{10,27,5}, -{10,27,6}, -{10,27,7}, -{10,27,8}, -{10,27,9}, -{10,27,10}, -{10,27,11}, -{10,27,12}, -{10,27,13}, -{10,27,14}, -{10,27,15}, -{10,28,-45}, -{10,28,-44}, -{10,28,-43}, -{10,28,-42}, -{10,28,-41}, -{10,28,-40}, -{10,28,-39}, -{10,28,-38}, -{10,28,-37}, -{10,28,-36}, -{10,28,-35}, -{10,28,-34}, -{10,28,-33}, -{10,28,-32}, -{10,28,-31}, -{10,28,-30}, -{10,28,-29}, -{10,28,-28}, -{10,28,-27}, -{10,28,-26}, -{10,28,-25}, -{10,28,-24}, -{10,28,-23}, -{10,28,-22}, -{10,28,-21}, -{10,28,-20}, -{10,28,-19}, -{10,28,-18}, -{10,28,-17}, -{10,28,-16}, -{10,28,-15}, -{10,28,-14}, -{10,28,-13}, -{10,28,-12}, -{10,28,-11}, -{10,28,-10}, -{10,28,-9}, -{10,28,-8}, -{10,28,-7}, -{10,28,-6}, -{10,28,-5}, -{10,28,-4}, -{10,28,-3}, -{10,28,-2}, -{10,28,-1}, -{10,28,0}, -{10,28,1}, -{10,28,2}, -{10,28,3}, -{10,28,4}, -{10,28,5}, -{10,28,6}, -{10,28,7}, -{10,28,8}, -{10,28,9}, -{10,28,10}, -{10,28,11}, -{10,28,12}, -{10,28,13}, -{10,28,14}, -{10,28,15}, -{10,29,-46}, -{10,29,-45}, -{10,29,-44}, -{10,29,-43}, -{10,29,-42}, -{10,29,-41}, -{10,29,-40}, -{10,29,-39}, -{10,29,-38}, -{10,29,-37}, -{10,29,-36}, -{10,29,-35}, -{10,29,-34}, -{10,29,-33}, -{10,29,-32}, -{10,29,-31}, -{10,29,-30}, -{10,29,-29}, -{10,29,-28}, -{10,29,-27}, -{10,29,-26}, -{10,29,-25}, -{10,29,-24}, -{10,29,-23}, -{10,29,-22}, -{10,29,-21}, -{10,29,-20}, -{10,29,-19}, -{10,29,-18}, -{10,29,-17}, -{10,29,-16}, -{10,29,-15}, -{10,29,-14}, -{10,29,-13}, -{10,29,-12}, -{10,29,-11}, -{10,29,-10}, -{10,29,-9}, -{10,29,-8}, -{10,29,-7}, -{10,29,-6}, -{10,29,-5}, -{10,29,-4}, -{10,29,-3}, -{10,29,-2}, -{10,29,-1}, -{10,29,0}, -{10,29,1}, -{10,29,2}, -{10,29,3}, -{10,29,4}, -{10,29,5}, -{10,29,6}, -{10,29,7}, -{10,29,8}, -{10,29,9}, -{10,29,10}, -{10,29,11}, -{10,29,12}, -{10,29,13}, -{10,29,14}, -{10,29,15}, -{10,30,-47}, -{10,30,-46}, -{10,30,-45}, -{10,30,-44}, -{10,30,-43}, -{10,30,-42}, -{10,30,-41}, -{10,30,-40}, -{10,30,-39}, -{10,30,-38}, -{10,30,-37}, -{10,30,-36}, -{10,30,-35}, -{10,30,-34}, -{10,30,-33}, -{10,30,-32}, -{10,30,-31}, -{10,30,-30}, -{10,30,-29}, -{10,30,-28}, -{10,30,-27}, -{10,30,-26}, -{10,30,-25}, -{10,30,-24}, -{10,30,-23}, -{10,30,-22}, -{10,30,-21}, -{10,30,-20}, -{10,30,-19}, -{10,30,-18}, -{10,30,-17}, -{10,30,-16}, -{10,30,-15}, -{10,30,-14}, -{10,30,-13}, -{10,30,-12}, -{10,30,-11}, -{10,30,-10}, -{10,30,-9}, -{10,30,-8}, -{10,30,-7}, -{10,30,-6}, -{10,30,-5}, -{10,30,-4}, -{10,30,-3}, -{10,30,-2}, -{10,30,-1}, -{10,30,0}, -{10,30,1}, -{10,30,2}, -{10,30,3}, -{10,30,4}, -{10,30,5}, -{10,30,6}, -{10,30,7}, -{10,30,8}, -{10,30,9}, -{10,30,10}, -{10,30,11}, -{10,30,12}, -{10,30,13}, -{10,30,14}, -{10,30,15}, -{10,31,-48}, -{10,31,-47}, -{10,31,-46}, -{10,31,-45}, -{10,31,-44}, -{10,31,-43}, -{10,31,-42}, -{10,31,-41}, -{10,31,-40}, -{10,31,-39}, -{10,31,-38}, -{10,31,-37}, -{10,31,-36}, -{10,31,-35}, -{10,31,-34}, -{10,31,-33}, -{10,31,-32}, -{10,31,-31}, -{10,31,-30}, -{10,31,-29}, -{10,31,-28}, -{10,31,-27}, -{10,31,-26}, -{10,31,-25}, -{10,31,-24}, -{10,31,-23}, -{10,31,-22}, -{10,31,-21}, -{10,31,-20}, -{10,31,-19}, -{10,31,-18}, -{10,31,-17}, -{10,31,-16}, -{10,31,-15}, -{10,31,-14}, -{10,31,-13}, -{10,31,-12}, -{10,31,-11}, -{10,31,-10}, -{10,31,-9}, -{10,31,-8}, -{10,31,-7}, -{10,31,-6}, -{10,31,-5}, -{10,31,-4}, -{10,31,-3}, -{10,31,-2}, -{10,31,-1}, -{10,31,0}, -{10,31,1}, -{10,31,2}, -{10,31,3}, -{10,32,-49}, -{10,32,-48}, -{10,32,-47}, -{10,32,-46}, -{10,32,-45}, -{10,32,-44}, -{10,32,-43}, -{10,32,-42}, -{10,32,-41}, -{10,32,-40}, -{10,32,-39}, -{10,32,-38}, -{10,32,-37}, -{10,32,-36}, -{10,32,-35}, -{10,32,-34}, -{10,32,-33}, -{10,32,-32}, -{10,32,-31}, -{10,32,-30}, -{10,32,-29}, -{10,32,-28}, -{10,32,-27}, -{10,32,-26}, -{10,32,-25}, -{10,32,-24}, -{10,32,-23}, -{10,32,-22}, -{10,32,-21}, -{10,32,-20}, -{10,32,-19}, -{10,32,-18}, -{10,32,-17}, -{10,32,-16}, -{10,32,-15}, -{10,32,-14}, -{10,32,-13}, -{10,32,-12}, -{10,32,-11}, -{10,32,-10}, -{10,32,-9}, -{10,33,-50}, -{10,33,-49}, -{10,33,-48}, -{10,33,-47}, -{10,33,-46}, -{10,33,-45}, -{10,33,-44}, -{10,33,-43}, -{10,33,-42}, -{10,33,-41}, -{10,33,-40}, -{10,33,-39}, -{10,33,-38}, -{10,33,-37}, -{10,33,-36}, -{10,33,-35}, -{10,33,-34}, -{10,33,-33}, -{10,33,-32}, -{10,33,-31}, -{10,33,-30}, -{10,33,-29}, -{10,33,-28}, -{10,33,-27}, -{10,33,-26}, -{10,33,-25}, -{10,33,-24}, -{10,33,-23}, -{10,33,-22}, -{10,33,-21}, -{10,33,-20}, -{10,33,-19}, -{10,33,-18}, -{10,33,-17}, -{10,34,-51}, -{10,34,-50}, -{10,34,-49}, -{10,34,-48}, -{10,34,-47}, -{10,34,-46}, -{10,34,-45}, -{10,34,-44}, -{10,34,-43}, -{10,34,-42}, -{10,34,-41}, -{10,34,-40}, -{10,34,-39}, -{10,34,-38}, -{10,34,-37}, -{10,34,-36}, -{10,34,-35}, -{10,34,-34}, -{10,34,-33}, -{10,34,-32}, -{10,34,-31}, -{10,34,-30}, -{10,34,-29}, -{10,34,-28}, -{10,34,-27}, -{10,34,-26}, -{10,34,-25}, -{10,34,-24}, -{10,35,-51}, -{10,35,-50}, -{10,35,-49}, -{10,35,-48}, -{10,35,-47}, -{10,35,-46}, -{10,35,-45}, -{10,35,-44}, -{10,35,-43}, -{10,35,-42}, -{10,35,-41}, -{10,35,-40}, -{10,35,-39}, -{10,35,-38}, -{10,35,-37}, -{10,35,-36}, -{10,35,-35}, -{10,35,-34}, -{10,35,-33}, -{10,35,-32}, -{10,35,-31}, -{10,35,-30}, -{10,35,-29}, -{10,36,-52}, -{10,36,-51}, -{10,36,-50}, -{10,36,-49}, -{10,36,-48}, -{10,36,-47}, -{10,36,-46}, -{10,36,-45}, -{10,36,-44}, -{10,36,-43}, -{10,36,-42}, -{10,36,-41}, -{10,36,-40}, -{10,36,-39}, -{10,36,-38}, -{10,36,-37}, -{10,36,-36}, -{10,36,-35}, -{10,36,-34}, -{10,37,-53}, -{10,37,-52}, -{10,37,-51}, -{10,37,-50}, -{10,37,-49}, -{10,37,-48}, -{10,37,-47}, -{10,37,-46}, -{10,37,-45}, -{10,37,-44}, -{10,37,-43}, -{10,37,-42}, -{10,37,-41}, -{10,37,-40}, -{10,37,-39}, -{10,38,-54}, -{10,38,-53}, -{10,38,-52}, -{10,38,-51}, -{10,38,-50}, -{10,38,-49}, -{10,38,-48}, -{10,38,-47}, -{10,38,-46}, -{10,38,-45}, -{10,38,-44}, -{10,38,-43}, -{10,39,-55}, -{10,39,-54}, -{10,39,-53}, -{10,39,-52}, -{10,39,-51}, -{10,39,-50}, -{10,39,-49}, -{10,39,-48}, -{10,39,-47}, -{10,39,-46}, -{10,40,-56}, -{10,40,-55}, -{10,40,-54}, -{10,40,-53}, -{10,40,-52}, -{10,40,-51}, -{10,40,-50}, -{10,41,-56}, -{10,41,-55}, -{10,41,-54}, -{10,41,-53}, -{10,42,-57}, -{10,42,-56}, -{11,-21,15}, -{11,-21,16}, -{11,-20,12}, -{11,-20,13}, -{11,-20,14}, -{11,-20,15}, -{11,-20,16}, -{11,-19,10}, -{11,-19,11}, -{11,-19,12}, -{11,-19,13}, -{11,-19,14}, -{11,-19,15}, -{11,-19,16}, -{11,-18,8}, -{11,-18,9}, -{11,-18,10}, -{11,-18,11}, -{11,-18,12}, -{11,-18,13}, -{11,-18,14}, -{11,-18,15}, -{11,-18,16}, -{11,-17,6}, -{11,-17,7}, -{11,-17,8}, -{11,-17,9}, -{11,-17,10}, -{11,-17,11}, -{11,-17,12}, -{11,-17,13}, -{11,-17,14}, -{11,-17,15}, -{11,-17,16}, -{11,-16,3}, -{11,-16,4}, -{11,-16,5}, -{11,-16,6}, -{11,-16,7}, -{11,-16,8}, -{11,-16,9}, -{11,-16,10}, -{11,-16,11}, -{11,-16,12}, -{11,-16,13}, -{11,-16,14}, -{11,-16,15}, -{11,-16,16}, -{11,-15,2}, -{11,-15,3}, -{11,-15,4}, -{11,-15,5}, -{11,-15,6}, -{11,-15,7}, -{11,-15,8}, -{11,-15,9}, -{11,-15,10}, -{11,-15,11}, -{11,-15,12}, -{11,-15,13}, -{11,-15,14}, -{11,-15,15}, -{11,-15,16}, -{11,-14,0}, -{11,-14,1}, -{11,-14,2}, -{11,-14,3}, -{11,-14,4}, -{11,-14,5}, -{11,-14,6}, -{11,-14,7}, -{11,-14,8}, -{11,-14,9}, -{11,-14,10}, -{11,-14,11}, -{11,-14,12}, -{11,-14,13}, -{11,-14,14}, -{11,-14,15}, -{11,-14,16}, -{11,-13,-2}, -{11,-13,-1}, -{11,-13,0}, -{11,-13,1}, -{11,-13,2}, -{11,-13,3}, -{11,-13,4}, -{11,-13,5}, -{11,-13,6}, -{11,-13,7}, -{11,-13,8}, -{11,-13,9}, -{11,-13,10}, -{11,-13,11}, -{11,-13,12}, -{11,-13,13}, -{11,-13,14}, -{11,-13,15}, -{11,-13,16}, -{11,-12,-4}, -{11,-12,-3}, -{11,-12,-2}, -{11,-12,-1}, -{11,-12,0}, -{11,-12,1}, -{11,-12,2}, -{11,-12,3}, -{11,-12,4}, -{11,-12,5}, -{11,-12,6}, -{11,-12,7}, -{11,-12,8}, -{11,-12,9}, -{11,-12,10}, -{11,-12,11}, -{11,-12,12}, -{11,-12,13}, -{11,-12,14}, -{11,-12,15}, -{11,-12,16}, -{11,-11,-5}, -{11,-11,-4}, -{11,-11,-3}, -{11,-11,-2}, -{11,-11,-1}, -{11,-11,0}, -{11,-11,1}, -{11,-11,2}, -{11,-11,3}, -{11,-11,4}, -{11,-11,5}, -{11,-11,6}, -{11,-11,7}, -{11,-11,8}, -{11,-11,9}, -{11,-11,10}, -{11,-11,11}, -{11,-11,12}, -{11,-11,13}, -{11,-11,14}, -{11,-11,15}, -{11,-11,16}, -{11,-10,-7}, -{11,-10,-6}, -{11,-10,-5}, -{11,-10,-4}, -{11,-10,-3}, -{11,-10,-2}, -{11,-10,-1}, -{11,-10,0}, -{11,-10,1}, -{11,-10,2}, -{11,-10,3}, -{11,-10,4}, -{11,-10,5}, -{11,-10,6}, -{11,-10,7}, -{11,-10,8}, -{11,-10,9}, -{11,-10,10}, -{11,-10,11}, -{11,-10,12}, -{11,-10,13}, -{11,-10,14}, -{11,-10,15}, -{11,-10,16}, -{11,-9,-8}, -{11,-9,-7}, -{11,-9,-6}, -{11,-9,-5}, -{11,-9,-4}, -{11,-9,-3}, -{11,-9,-2}, -{11,-9,-1}, -{11,-9,0}, -{11,-9,1}, -{11,-9,2}, -{11,-9,3}, -{11,-9,4}, -{11,-9,5}, -{11,-9,6}, -{11,-9,7}, -{11,-9,8}, -{11,-9,9}, -{11,-9,10}, -{11,-9,11}, -{11,-9,12}, -{11,-9,13}, -{11,-9,14}, -{11,-9,15}, -{11,-9,16}, -{11,-8,-9}, -{11,-8,-8}, -{11,-8,-7}, -{11,-8,-6}, -{11,-8,-5}, -{11,-8,-4}, -{11,-8,-3}, -{11,-8,-2}, -{11,-8,-1}, -{11,-8,0}, -{11,-8,1}, -{11,-8,2}, -{11,-8,3}, -{11,-8,4}, -{11,-8,5}, -{11,-8,6}, -{11,-8,7}, -{11,-8,8}, -{11,-8,9}, -{11,-8,10}, -{11,-8,11}, -{11,-8,12}, -{11,-8,13}, -{11,-8,14}, -{11,-8,15}, -{11,-8,16}, -{11,-7,-11}, -{11,-7,-10}, -{11,-7,-9}, -{11,-7,-8}, -{11,-7,-7}, -{11,-7,-6}, -{11,-7,-5}, -{11,-7,-4}, -{11,-7,-3}, -{11,-7,-2}, -{11,-7,-1}, -{11,-7,0}, -{11,-7,1}, -{11,-7,2}, -{11,-7,3}, -{11,-7,4}, -{11,-7,5}, -{11,-7,6}, -{11,-7,7}, -{11,-7,8}, -{11,-7,9}, -{11,-7,10}, -{11,-7,11}, -{11,-7,12}, -{11,-7,13}, -{11,-7,14}, -{11,-7,15}, -{11,-7,16}, -{11,-6,-12}, -{11,-6,-11}, -{11,-6,-10}, -{11,-6,-9}, -{11,-6,-8}, -{11,-6,-7}, -{11,-6,-6}, -{11,-6,-5}, -{11,-6,-4}, -{11,-6,-3}, -{11,-6,-2}, -{11,-6,-1}, -{11,-6,0}, -{11,-6,1}, -{11,-6,2}, -{11,-6,3}, -{11,-6,4}, -{11,-6,5}, -{11,-6,6}, -{11,-6,7}, -{11,-6,8}, -{11,-6,9}, -{11,-6,10}, -{11,-6,11}, -{11,-6,12}, -{11,-6,13}, -{11,-6,14}, -{11,-6,15}, -{11,-6,16}, -{11,-5,-13}, -{11,-5,-12}, -{11,-5,-11}, -{11,-5,-10}, -{11,-5,-9}, -{11,-5,-8}, -{11,-5,-7}, -{11,-5,-6}, -{11,-5,-5}, -{11,-5,-4}, -{11,-5,-3}, -{11,-5,-2}, -{11,-5,-1}, -{11,-5,0}, -{11,-5,1}, -{11,-5,2}, -{11,-5,3}, -{11,-5,4}, -{11,-5,5}, -{11,-5,6}, -{11,-5,7}, -{11,-5,8}, -{11,-5,9}, -{11,-5,10}, -{11,-5,11}, -{11,-5,12}, -{11,-5,13}, -{11,-5,14}, -{11,-5,15}, -{11,-5,16}, -{11,-4,-14}, -{11,-4,-13}, -{11,-4,-12}, -{11,-4,-11}, -{11,-4,-10}, -{11,-4,-9}, -{11,-4,-8}, -{11,-4,-7}, -{11,-4,-6}, -{11,-4,-5}, -{11,-4,-4}, -{11,-4,-3}, -{11,-4,-2}, -{11,-4,-1}, -{11,-4,0}, -{11,-4,1}, -{11,-4,2}, -{11,-4,3}, -{11,-4,4}, -{11,-4,5}, -{11,-4,6}, -{11,-4,7}, -{11,-4,8}, -{11,-4,9}, -{11,-4,10}, -{11,-4,11}, -{11,-4,12}, -{11,-4,13}, -{11,-4,14}, -{11,-4,15}, -{11,-4,16}, -{11,-3,-16}, -{11,-3,-15}, -{11,-3,-14}, -{11,-3,-13}, -{11,-3,-12}, -{11,-3,-11}, -{11,-3,-10}, -{11,-3,-9}, -{11,-3,-8}, -{11,-3,-7}, -{11,-3,-6}, -{11,-3,-5}, -{11,-3,-4}, -{11,-3,-3}, -{11,-3,-2}, -{11,-3,-1}, -{11,-3,0}, -{11,-3,1}, -{11,-3,2}, -{11,-3,3}, -{11,-3,4}, -{11,-3,5}, -{11,-3,6}, -{11,-3,7}, -{11,-3,8}, -{11,-3,9}, -{11,-3,10}, -{11,-3,11}, -{11,-3,12}, -{11,-3,13}, -{11,-3,14}, -{11,-3,15}, -{11,-3,16}, -{11,-2,-17}, -{11,-2,-16}, -{11,-2,-15}, -{11,-2,-14}, -{11,-2,-13}, -{11,-2,-12}, -{11,-2,-11}, -{11,-2,-10}, -{11,-2,-9}, -{11,-2,-8}, -{11,-2,-7}, -{11,-2,-6}, -{11,-2,-5}, -{11,-2,-4}, -{11,-2,-3}, -{11,-2,-2}, -{11,-2,-1}, -{11,-2,0}, -{11,-2,1}, -{11,-2,2}, -{11,-2,3}, -{11,-2,4}, -{11,-2,5}, -{11,-2,6}, -{11,-2,7}, -{11,-2,8}, -{11,-2,9}, -{11,-2,10}, -{11,-2,11}, -{11,-2,12}, -{11,-2,13}, -{11,-2,14}, -{11,-2,15}, -{11,-2,16}, -{11,-1,-18}, -{11,-1,-17}, -{11,-1,-16}, -{11,-1,-15}, -{11,-1,-14}, -{11,-1,-13}, -{11,-1,-12}, -{11,-1,-11}, -{11,-1,-10}, -{11,-1,-9}, -{11,-1,-8}, -{11,-1,-7}, -{11,-1,-6}, -{11,-1,-5}, -{11,-1,-4}, -{11,-1,-3}, -{11,-1,-2}, -{11,-1,-1}, -{11,-1,0}, -{11,-1,1}, -{11,-1,2}, -{11,-1,3}, -{11,-1,4}, -{11,-1,5}, -{11,-1,6}, -{11,-1,7}, -{11,-1,8}, -{11,-1,9}, -{11,-1,10}, -{11,-1,11}, -{11,-1,12}, -{11,-1,13}, -{11,-1,14}, -{11,-1,15}, -{11,-1,16}, -{11,0,-19}, -{11,0,-18}, -{11,0,-17}, -{11,0,-16}, -{11,0,-15}, -{11,0,-14}, -{11,0,-13}, -{11,0,-12}, -{11,0,-11}, -{11,0,-10}, -{11,0,-9}, -{11,0,-8}, -{11,0,-7}, -{11,0,-6}, -{11,0,-5}, -{11,0,-4}, -{11,0,-3}, -{11,0,-2}, -{11,0,-1}, -{11,0,0}, -{11,0,1}, -{11,0,2}, -{11,0,3}, -{11,0,4}, -{11,0,5}, -{11,0,6}, -{11,0,7}, -{11,0,8}, -{11,0,9}, -{11,0,10}, -{11,0,11}, -{11,0,12}, -{11,0,13}, -{11,0,14}, -{11,0,15}, -{11,0,16}, -{11,1,-20}, -{11,1,-19}, -{11,1,-18}, -{11,1,-17}, -{11,1,-16}, -{11,1,-15}, -{11,1,-14}, -{11,1,-13}, -{11,1,-12}, -{11,1,-11}, -{11,1,-10}, -{11,1,-9}, -{11,1,-8}, -{11,1,-7}, -{11,1,-6}, -{11,1,-5}, -{11,1,-4}, -{11,1,-3}, -{11,1,-2}, -{11,1,-1}, -{11,1,0}, -{11,1,1}, -{11,1,2}, -{11,1,3}, -{11,1,4}, -{11,1,5}, -{11,1,6}, -{11,1,7}, -{11,1,8}, -{11,1,9}, -{11,1,10}, -{11,1,11}, -{11,1,12}, -{11,1,13}, -{11,1,14}, -{11,1,15}, -{11,1,16}, -{11,2,-21}, -{11,2,-20}, -{11,2,-19}, -{11,2,-18}, -{11,2,-17}, -{11,2,-16}, -{11,2,-15}, -{11,2,-14}, -{11,2,-13}, -{11,2,-12}, -{11,2,-11}, -{11,2,-10}, -{11,2,-9}, -{11,2,-8}, -{11,2,-7}, -{11,2,-6}, -{11,2,-5}, -{11,2,-4}, -{11,2,-3}, -{11,2,-2}, -{11,2,-1}, -{11,2,0}, -{11,2,1}, -{11,2,2}, -{11,2,3}, -{11,2,4}, -{11,2,5}, -{11,2,6}, -{11,2,7}, -{11,2,8}, -{11,2,9}, -{11,2,10}, -{11,2,11}, -{11,2,12}, -{11,2,13}, -{11,2,14}, -{11,2,15}, -{11,2,16}, -{11,3,-22}, -{11,3,-21}, -{11,3,-20}, -{11,3,-19}, -{11,3,-18}, -{11,3,-17}, -{11,3,-16}, -{11,3,-15}, -{11,3,-14}, -{11,3,-13}, -{11,3,-12}, -{11,3,-11}, -{11,3,-10}, -{11,3,-9}, -{11,3,-8}, -{11,3,-7}, -{11,3,-6}, -{11,3,-5}, -{11,3,-4}, -{11,3,-3}, -{11,3,-2}, -{11,3,-1}, -{11,3,0}, -{11,3,1}, -{11,3,2}, -{11,3,3}, -{11,3,4}, -{11,3,5}, -{11,3,6}, -{11,3,7}, -{11,3,8}, -{11,3,9}, -{11,3,10}, -{11,3,11}, -{11,3,12}, -{11,3,13}, -{11,3,14}, -{11,3,15}, -{11,3,16}, -{11,4,-23}, -{11,4,-22}, -{11,4,-21}, -{11,4,-20}, -{11,4,-19}, -{11,4,-18}, -{11,4,-17}, -{11,4,-16}, -{11,4,-15}, -{11,4,-14}, -{11,4,-13}, -{11,4,-12}, -{11,4,-11}, -{11,4,-10}, -{11,4,-9}, -{11,4,-8}, -{11,4,-7}, -{11,4,-6}, -{11,4,-5}, -{11,4,-4}, -{11,4,-3}, -{11,4,-2}, -{11,4,-1}, -{11,4,0}, -{11,4,1}, -{11,4,2}, -{11,4,3}, -{11,4,4}, -{11,4,5}, -{11,4,6}, -{11,4,7}, -{11,4,8}, -{11,4,9}, -{11,4,10}, -{11,4,11}, -{11,4,12}, -{11,4,13}, -{11,4,14}, -{11,4,15}, -{11,4,16}, -{11,5,-25}, -{11,5,-24}, -{11,5,-23}, -{11,5,-22}, -{11,5,-21}, -{11,5,-20}, -{11,5,-19}, -{11,5,-18}, -{11,5,-17}, -{11,5,-16}, -{11,5,-15}, -{11,5,-14}, -{11,5,-13}, -{11,5,-12}, -{11,5,-11}, -{11,5,-10}, -{11,5,-9}, -{11,5,-8}, -{11,5,-7}, -{11,5,-6}, -{11,5,-5}, -{11,5,-4}, -{11,5,-3}, -{11,5,-2}, -{11,5,-1}, -{11,5,0}, -{11,5,1}, -{11,5,2}, -{11,5,3}, -{11,5,4}, -{11,5,5}, -{11,5,6}, -{11,5,7}, -{11,5,8}, -{11,5,9}, -{11,5,10}, -{11,5,11}, -{11,5,12}, -{11,5,13}, -{11,5,14}, -{11,5,15}, -{11,5,16}, -{11,6,-26}, -{11,6,-25}, -{11,6,-24}, -{11,6,-23}, -{11,6,-22}, -{11,6,-21}, -{11,6,-20}, -{11,6,-19}, -{11,6,-18}, -{11,6,-17}, -{11,6,-16}, -{11,6,-15}, -{11,6,-14}, -{11,6,-13}, -{11,6,-12}, -{11,6,-11}, -{11,6,-10}, -{11,6,-9}, -{11,6,-8}, -{11,6,-7}, -{11,6,-6}, -{11,6,-5}, -{11,6,-4}, -{11,6,-3}, -{11,6,-2}, -{11,6,-1}, -{11,6,0}, -{11,6,1}, -{11,6,2}, -{11,6,3}, -{11,6,4}, -{11,6,5}, -{11,6,6}, -{11,6,7}, -{11,6,8}, -{11,6,9}, -{11,6,10}, -{11,6,11}, -{11,6,12}, -{11,6,13}, -{11,6,14}, -{11,6,15}, -{11,6,16}, -{11,7,-27}, -{11,7,-26}, -{11,7,-25}, -{11,7,-24}, -{11,7,-23}, -{11,7,-22}, -{11,7,-21}, -{11,7,-20}, -{11,7,-19}, -{11,7,-18}, -{11,7,-17}, -{11,7,-16}, -{11,7,-15}, -{11,7,-14}, -{11,7,-13}, -{11,7,-12}, -{11,7,-11}, -{11,7,-10}, -{11,7,-9}, -{11,7,-8}, -{11,7,-7}, -{11,7,-6}, -{11,7,-5}, -{11,7,-4}, -{11,7,-3}, -{11,7,-2}, -{11,7,-1}, -{11,7,0}, -{11,7,1}, -{11,7,2}, -{11,7,3}, -{11,7,4}, -{11,7,5}, -{11,7,6}, -{11,7,7}, -{11,7,8}, -{11,7,9}, -{11,7,10}, -{11,7,11}, -{11,7,12}, -{11,7,13}, -{11,7,14}, -{11,7,15}, -{11,7,16}, -{11,8,-28}, -{11,8,-27}, -{11,8,-26}, -{11,8,-25}, -{11,8,-24}, -{11,8,-23}, -{11,8,-22}, -{11,8,-21}, -{11,8,-20}, -{11,8,-19}, -{11,8,-18}, -{11,8,-17}, -{11,8,-16}, -{11,8,-15}, -{11,8,-14}, -{11,8,-13}, -{11,8,-12}, -{11,8,-11}, -{11,8,-10}, -{11,8,-9}, -{11,8,-8}, -{11,8,-7}, -{11,8,-6}, -{11,8,-5}, -{11,8,-4}, -{11,8,-3}, -{11,8,-2}, -{11,8,-1}, -{11,8,0}, -{11,8,1}, -{11,8,2}, -{11,8,3}, -{11,8,4}, -{11,8,5}, -{11,8,6}, -{11,8,7}, -{11,8,8}, -{11,8,9}, -{11,8,10}, -{11,8,11}, -{11,8,12}, -{11,8,13}, -{11,8,14}, -{11,8,15}, -{11,8,16}, -{11,9,-29}, -{11,9,-28}, -{11,9,-27}, -{11,9,-26}, -{11,9,-25}, -{11,9,-24}, -{11,9,-23}, -{11,9,-22}, -{11,9,-21}, -{11,9,-20}, -{11,9,-19}, -{11,9,-18}, -{11,9,-17}, -{11,9,-16}, -{11,9,-15}, -{11,9,-14}, -{11,9,-13}, -{11,9,-12}, -{11,9,-11}, -{11,9,-10}, -{11,9,-9}, -{11,9,-8}, -{11,9,-7}, -{11,9,-6}, -{11,9,-5}, -{11,9,-4}, -{11,9,-3}, -{11,9,-2}, -{11,9,-1}, -{11,9,0}, -{11,9,1}, -{11,9,2}, -{11,9,3}, -{11,9,4}, -{11,9,5}, -{11,9,6}, -{11,9,7}, -{11,9,8}, -{11,9,9}, -{11,9,10}, -{11,9,11}, -{11,9,12}, -{11,9,13}, -{11,9,14}, -{11,9,15}, -{11,9,16}, -{11,10,-30}, -{11,10,-29}, -{11,10,-28}, -{11,10,-27}, -{11,10,-26}, -{11,10,-25}, -{11,10,-24}, -{11,10,-23}, -{11,10,-22}, -{11,10,-21}, -{11,10,-20}, -{11,10,-19}, -{11,10,-18}, -{11,10,-17}, -{11,10,-16}, -{11,10,-15}, -{11,10,-14}, -{11,10,-13}, -{11,10,-12}, -{11,10,-11}, -{11,10,-10}, -{11,10,-9}, -{11,10,-8}, -{11,10,-7}, -{11,10,-6}, -{11,10,-5}, -{11,10,-4}, -{11,10,-3}, -{11,10,-2}, -{11,10,-1}, -{11,10,0}, -{11,10,1}, -{11,10,2}, -{11,10,3}, -{11,10,4}, -{11,10,5}, -{11,10,6}, -{11,10,7}, -{11,10,8}, -{11,10,9}, -{11,10,10}, -{11,10,11}, -{11,10,12}, -{11,10,13}, -{11,10,14}, -{11,10,15}, -{11,10,16}, -{11,11,-31}, -{11,11,-30}, -{11,11,-29}, -{11,11,-28}, -{11,11,-27}, -{11,11,-26}, -{11,11,-25}, -{11,11,-24}, -{11,11,-23}, -{11,11,-22}, -{11,11,-21}, -{11,11,-20}, -{11,11,-19}, -{11,11,-18}, -{11,11,-17}, -{11,11,-16}, -{11,11,-15}, -{11,11,-14}, -{11,11,-13}, -{11,11,-12}, -{11,11,-11}, -{11,11,-10}, -{11,11,-9}, -{11,11,-8}, -{11,11,-7}, -{11,11,-6}, -{11,11,-5}, -{11,11,-4}, -{11,11,-3}, -{11,11,-2}, -{11,11,-1}, -{11,11,0}, -{11,11,1}, -{11,11,2}, -{11,11,3}, -{11,11,4}, -{11,11,5}, -{11,11,6}, -{11,11,7}, -{11,11,8}, -{11,11,9}, -{11,11,10}, -{11,11,11}, -{11,11,12}, -{11,11,13}, -{11,11,14}, -{11,11,15}, -{11,11,16}, -{11,12,-32}, -{11,12,-31}, -{11,12,-30}, -{11,12,-29}, -{11,12,-28}, -{11,12,-27}, -{11,12,-26}, -{11,12,-25}, -{11,12,-24}, -{11,12,-23}, -{11,12,-22}, -{11,12,-21}, -{11,12,-20}, -{11,12,-19}, -{11,12,-18}, -{11,12,-17}, -{11,12,-16}, -{11,12,-15}, -{11,12,-14}, -{11,12,-13}, -{11,12,-12}, -{11,12,-11}, -{11,12,-10}, -{11,12,-9}, -{11,12,-8}, -{11,12,-7}, -{11,12,-6}, -{11,12,-5}, -{11,12,-4}, -{11,12,-3}, -{11,12,-2}, -{11,12,-1}, -{11,12,0}, -{11,12,1}, -{11,12,2}, -{11,12,3}, -{11,12,4}, -{11,12,5}, -{11,12,6}, -{11,12,7}, -{11,12,8}, -{11,12,9}, -{11,12,10}, -{11,12,11}, -{11,12,12}, -{11,12,13}, -{11,12,14}, -{11,12,15}, -{11,12,16}, -{11,13,-33}, -{11,13,-32}, -{11,13,-31}, -{11,13,-30}, -{11,13,-29}, -{11,13,-28}, -{11,13,-27}, -{11,13,-26}, -{11,13,-25}, -{11,13,-24}, -{11,13,-23}, -{11,13,-22}, -{11,13,-21}, -{11,13,-20}, -{11,13,-19}, -{11,13,-18}, -{11,13,-17}, -{11,13,-16}, -{11,13,-15}, -{11,13,-14}, -{11,13,-13}, -{11,13,-12}, -{11,13,-11}, -{11,13,-10}, -{11,13,-9}, -{11,13,-8}, -{11,13,-7}, -{11,13,-6}, -{11,13,-5}, -{11,13,-4}, -{11,13,-3}, -{11,13,-2}, -{11,13,-1}, -{11,13,0}, -{11,13,1}, -{11,13,2}, -{11,13,3}, -{11,13,4}, -{11,13,5}, -{11,13,6}, -{11,13,7}, -{11,13,8}, -{11,13,9}, -{11,13,10}, -{11,13,11}, -{11,13,12}, -{11,13,13}, -{11,13,14}, -{11,13,15}, -{11,13,16}, -{11,14,-34}, -{11,14,-33}, -{11,14,-32}, -{11,14,-31}, -{11,14,-30}, -{11,14,-29}, -{11,14,-28}, -{11,14,-27}, -{11,14,-26}, -{11,14,-25}, -{11,14,-24}, -{11,14,-23}, -{11,14,-22}, -{11,14,-21}, -{11,14,-20}, -{11,14,-19}, -{11,14,-18}, -{11,14,-17}, -{11,14,-16}, -{11,14,-15}, -{11,14,-14}, -{11,14,-13}, -{11,14,-12}, -{11,14,-11}, -{11,14,-10}, -{11,14,-9}, -{11,14,-8}, -{11,14,-7}, -{11,14,-6}, -{11,14,-5}, -{11,14,-4}, -{11,14,-3}, -{11,14,-2}, -{11,14,-1}, -{11,14,0}, -{11,14,1}, -{11,14,2}, -{11,14,3}, -{11,14,4}, -{11,14,5}, -{11,14,6}, -{11,14,7}, -{11,14,8}, -{11,14,9}, -{11,14,10}, -{11,14,11}, -{11,14,12}, -{11,14,13}, -{11,14,14}, -{11,14,15}, -{11,14,16}, -{11,15,-34}, -{11,15,-33}, -{11,15,-32}, -{11,15,-31}, -{11,15,-30}, -{11,15,-29}, -{11,15,-28}, -{11,15,-27}, -{11,15,-26}, -{11,15,-25}, -{11,15,-24}, -{11,15,-23}, -{11,15,-22}, -{11,15,-21}, -{11,15,-20}, -{11,15,-19}, -{11,15,-18}, -{11,15,-17}, -{11,15,-16}, -{11,15,-15}, -{11,15,-14}, -{11,15,-13}, -{11,15,-12}, -{11,15,-11}, -{11,15,-10}, -{11,15,-9}, -{11,15,-8}, -{11,15,-7}, -{11,15,-6}, -{11,15,-5}, -{11,15,-4}, -{11,15,-3}, -{11,15,-2}, -{11,15,-1}, -{11,15,0}, -{11,15,1}, -{11,15,2}, -{11,15,3}, -{11,15,4}, -{11,15,5}, -{11,15,6}, -{11,15,7}, -{11,15,8}, -{11,15,9}, -{11,15,10}, -{11,15,11}, -{11,15,12}, -{11,15,13}, -{11,15,14}, -{11,15,15}, -{11,15,16}, -{11,16,-35}, -{11,16,-34}, -{11,16,-33}, -{11,16,-32}, -{11,16,-31}, -{11,16,-30}, -{11,16,-29}, -{11,16,-28}, -{11,16,-27}, -{11,16,-26}, -{11,16,-25}, -{11,16,-24}, -{11,16,-23}, -{11,16,-22}, -{11,16,-21}, -{11,16,-20}, -{11,16,-19}, -{11,16,-18}, -{11,16,-17}, -{11,16,-16}, -{11,16,-15}, -{11,16,-14}, -{11,16,-13}, -{11,16,-12}, -{11,16,-11}, -{11,16,-10}, -{11,16,-9}, -{11,16,-8}, -{11,16,-7}, -{11,16,-6}, -{11,16,-5}, -{11,16,-4}, -{11,16,-3}, -{11,16,-2}, -{11,16,-1}, -{11,16,0}, -{11,16,1}, -{11,16,2}, -{11,16,3}, -{11,16,4}, -{11,16,5}, -{11,16,6}, -{11,16,7}, -{11,16,8}, -{11,16,9}, -{11,16,10}, -{11,16,11}, -{11,16,12}, -{11,16,13}, -{11,16,14}, -{11,16,15}, -{11,16,16}, -{11,17,-36}, -{11,17,-35}, -{11,17,-34}, -{11,17,-33}, -{11,17,-32}, -{11,17,-31}, -{11,17,-30}, -{11,17,-29}, -{11,17,-28}, -{11,17,-27}, -{11,17,-26}, -{11,17,-25}, -{11,17,-24}, -{11,17,-23}, -{11,17,-22}, -{11,17,-21}, -{11,17,-20}, -{11,17,-19}, -{11,17,-18}, -{11,17,-17}, -{11,17,-16}, -{11,17,-15}, -{11,17,-14}, -{11,17,-13}, -{11,17,-12}, -{11,17,-11}, -{11,17,-10}, -{11,17,-9}, -{11,17,-8}, -{11,17,-7}, -{11,17,-6}, -{11,17,-5}, -{11,17,-4}, -{11,17,-3}, -{11,17,-2}, -{11,17,-1}, -{11,17,0}, -{11,17,1}, -{11,17,2}, -{11,17,3}, -{11,17,4}, -{11,17,5}, -{11,17,6}, -{11,17,7}, -{11,17,8}, -{11,17,9}, -{11,17,10}, -{11,17,11}, -{11,17,12}, -{11,17,13}, -{11,17,14}, -{11,17,15}, -{11,17,16}, -{11,17,17}, -{11,18,-37}, -{11,18,-36}, -{11,18,-35}, -{11,18,-34}, -{11,18,-33}, -{11,18,-32}, -{11,18,-31}, -{11,18,-30}, -{11,18,-29}, -{11,18,-28}, -{11,18,-27}, -{11,18,-26}, -{11,18,-25}, -{11,18,-24}, -{11,18,-23}, -{11,18,-22}, -{11,18,-21}, -{11,18,-20}, -{11,18,-19}, -{11,18,-18}, -{11,18,-17}, -{11,18,-16}, -{11,18,-15}, -{11,18,-14}, -{11,18,-13}, -{11,18,-12}, -{11,18,-11}, -{11,18,-10}, -{11,18,-9}, -{11,18,-8}, -{11,18,-7}, -{11,18,-6}, -{11,18,-5}, -{11,18,-4}, -{11,18,-3}, -{11,18,-2}, -{11,18,-1}, -{11,18,0}, -{11,18,1}, -{11,18,2}, -{11,18,3}, -{11,18,4}, -{11,18,5}, -{11,18,6}, -{11,18,7}, -{11,18,8}, -{11,18,9}, -{11,18,10}, -{11,18,11}, -{11,18,12}, -{11,18,13}, -{11,18,14}, -{11,18,15}, -{11,18,16}, -{11,18,17}, -{11,19,-38}, -{11,19,-37}, -{11,19,-36}, -{11,19,-35}, -{11,19,-34}, -{11,19,-33}, -{11,19,-32}, -{11,19,-31}, -{11,19,-30}, -{11,19,-29}, -{11,19,-28}, -{11,19,-27}, -{11,19,-26}, -{11,19,-25}, -{11,19,-24}, -{11,19,-23}, -{11,19,-22}, -{11,19,-21}, -{11,19,-20}, -{11,19,-19}, -{11,19,-18}, -{11,19,-17}, -{11,19,-16}, -{11,19,-15}, -{11,19,-14}, -{11,19,-13}, -{11,19,-12}, -{11,19,-11}, -{11,19,-10}, -{11,19,-9}, -{11,19,-8}, -{11,19,-7}, -{11,19,-6}, -{11,19,-5}, -{11,19,-4}, -{11,19,-3}, -{11,19,-2}, -{11,19,-1}, -{11,19,0}, -{11,19,1}, -{11,19,2}, -{11,19,3}, -{11,19,4}, -{11,19,5}, -{11,19,6}, -{11,19,7}, -{11,19,8}, -{11,19,9}, -{11,19,10}, -{11,19,11}, -{11,19,12}, -{11,19,13}, -{11,19,14}, -{11,19,15}, -{11,19,16}, -{11,19,17}, -{11,20,-39}, -{11,20,-38}, -{11,20,-37}, -{11,20,-36}, -{11,20,-35}, -{11,20,-34}, -{11,20,-33}, -{11,20,-32}, -{11,20,-31}, -{11,20,-30}, -{11,20,-29}, -{11,20,-28}, -{11,20,-27}, -{11,20,-26}, -{11,20,-25}, -{11,20,-24}, -{11,20,-23}, -{11,20,-22}, -{11,20,-21}, -{11,20,-20}, -{11,20,-19}, -{11,20,-18}, -{11,20,-17}, -{11,20,-16}, -{11,20,-15}, -{11,20,-14}, -{11,20,-13}, -{11,20,-12}, -{11,20,-11}, -{11,20,-10}, -{11,20,-9}, -{11,20,-8}, -{11,20,-7}, -{11,20,-6}, -{11,20,-5}, -{11,20,-4}, -{11,20,-3}, -{11,20,-2}, -{11,20,-1}, -{11,20,0}, -{11,20,1}, -{11,20,2}, -{11,20,3}, -{11,20,4}, -{11,20,5}, -{11,20,6}, -{11,20,7}, -{11,20,8}, -{11,20,9}, -{11,20,10}, -{11,20,11}, -{11,20,12}, -{11,20,13}, -{11,20,14}, -{11,20,15}, -{11,20,16}, -{11,20,17}, -{11,21,-40}, -{11,21,-39}, -{11,21,-38}, -{11,21,-37}, -{11,21,-36}, -{11,21,-35}, -{11,21,-34}, -{11,21,-33}, -{11,21,-32}, -{11,21,-31}, -{11,21,-30}, -{11,21,-29}, -{11,21,-28}, -{11,21,-27}, -{11,21,-26}, -{11,21,-25}, -{11,21,-24}, -{11,21,-23}, -{11,21,-22}, -{11,21,-21}, -{11,21,-20}, -{11,21,-19}, -{11,21,-18}, -{11,21,-17}, -{11,21,-16}, -{11,21,-15}, -{11,21,-14}, -{11,21,-13}, -{11,21,-12}, -{11,21,-11}, -{11,21,-10}, -{11,21,-9}, -{11,21,-8}, -{11,21,-7}, -{11,21,-6}, -{11,21,-5}, -{11,21,-4}, -{11,21,-3}, -{11,21,-2}, -{11,21,-1}, -{11,21,0}, -{11,21,1}, -{11,21,2}, -{11,21,3}, -{11,21,4}, -{11,21,5}, -{11,21,6}, -{11,21,7}, -{11,21,8}, -{11,21,9}, -{11,21,10}, -{11,21,11}, -{11,21,12}, -{11,21,13}, -{11,21,14}, -{11,21,15}, -{11,21,16}, -{11,21,17}, -{11,22,-41}, -{11,22,-40}, -{11,22,-39}, -{11,22,-38}, -{11,22,-37}, -{11,22,-36}, -{11,22,-35}, -{11,22,-34}, -{11,22,-33}, -{11,22,-32}, -{11,22,-31}, -{11,22,-30}, -{11,22,-29}, -{11,22,-28}, -{11,22,-27}, -{11,22,-26}, -{11,22,-25}, -{11,22,-24}, -{11,22,-23}, -{11,22,-22}, -{11,22,-21}, -{11,22,-20}, -{11,22,-19}, -{11,22,-18}, -{11,22,-17}, -{11,22,-16}, -{11,22,-15}, -{11,22,-14}, -{11,22,-13}, -{11,22,-12}, -{11,22,-11}, -{11,22,-10}, -{11,22,-9}, -{11,22,-8}, -{11,22,-7}, -{11,22,-6}, -{11,22,-5}, -{11,22,-4}, -{11,22,-3}, -{11,22,-2}, -{11,22,-1}, -{11,22,0}, -{11,22,1}, -{11,22,2}, -{11,22,3}, -{11,22,4}, -{11,22,5}, -{11,22,6}, -{11,22,7}, -{11,22,8}, -{11,22,9}, -{11,22,10}, -{11,22,11}, -{11,22,12}, -{11,22,13}, -{11,22,14}, -{11,22,15}, -{11,22,16}, -{11,22,17}, -{11,23,-42}, -{11,23,-41}, -{11,23,-40}, -{11,23,-39}, -{11,23,-38}, -{11,23,-37}, -{11,23,-36}, -{11,23,-35}, -{11,23,-34}, -{11,23,-33}, -{11,23,-32}, -{11,23,-31}, -{11,23,-30}, -{11,23,-29}, -{11,23,-28}, -{11,23,-27}, -{11,23,-26}, -{11,23,-25}, -{11,23,-24}, -{11,23,-23}, -{11,23,-22}, -{11,23,-21}, -{11,23,-20}, -{11,23,-19}, -{11,23,-18}, -{11,23,-17}, -{11,23,-16}, -{11,23,-15}, -{11,23,-14}, -{11,23,-13}, -{11,23,-12}, -{11,23,-11}, -{11,23,-10}, -{11,23,-9}, -{11,23,-8}, -{11,23,-7}, -{11,23,-6}, -{11,23,-5}, -{11,23,-4}, -{11,23,-3}, -{11,23,-2}, -{11,23,-1}, -{11,23,0}, -{11,23,1}, -{11,23,2}, -{11,23,3}, -{11,23,4}, -{11,23,5}, -{11,23,6}, -{11,23,7}, -{11,23,8}, -{11,23,9}, -{11,23,10}, -{11,23,11}, -{11,23,12}, -{11,23,13}, -{11,23,14}, -{11,23,15}, -{11,23,16}, -{11,23,17}, -{11,24,-43}, -{11,24,-42}, -{11,24,-41}, -{11,24,-40}, -{11,24,-39}, -{11,24,-38}, -{11,24,-37}, -{11,24,-36}, -{11,24,-35}, -{11,24,-34}, -{11,24,-33}, -{11,24,-32}, -{11,24,-31}, -{11,24,-30}, -{11,24,-29}, -{11,24,-28}, -{11,24,-27}, -{11,24,-26}, -{11,24,-25}, -{11,24,-24}, -{11,24,-23}, -{11,24,-22}, -{11,24,-21}, -{11,24,-20}, -{11,24,-19}, -{11,24,-18}, -{11,24,-17}, -{11,24,-16}, -{11,24,-15}, -{11,24,-14}, -{11,24,-13}, -{11,24,-12}, -{11,24,-11}, -{11,24,-10}, -{11,24,-9}, -{11,24,-8}, -{11,24,-7}, -{11,24,-6}, -{11,24,-5}, -{11,24,-4}, -{11,24,-3}, -{11,24,-2}, -{11,24,-1}, -{11,24,0}, -{11,24,1}, -{11,24,2}, -{11,24,3}, -{11,24,4}, -{11,24,5}, -{11,24,6}, -{11,24,7}, -{11,24,8}, -{11,24,9}, -{11,24,10}, -{11,24,11}, -{11,24,12}, -{11,24,13}, -{11,24,14}, -{11,24,15}, -{11,24,16}, -{11,24,17}, -{11,25,-44}, -{11,25,-43}, -{11,25,-42}, -{11,25,-41}, -{11,25,-40}, -{11,25,-39}, -{11,25,-38}, -{11,25,-37}, -{11,25,-36}, -{11,25,-35}, -{11,25,-34}, -{11,25,-33}, -{11,25,-32}, -{11,25,-31}, -{11,25,-30}, -{11,25,-29}, -{11,25,-28}, -{11,25,-27}, -{11,25,-26}, -{11,25,-25}, -{11,25,-24}, -{11,25,-23}, -{11,25,-22}, -{11,25,-21}, -{11,25,-20}, -{11,25,-19}, -{11,25,-18}, -{11,25,-17}, -{11,25,-16}, -{11,25,-15}, -{11,25,-14}, -{11,25,-13}, -{11,25,-12}, -{11,25,-11}, -{11,25,-10}, -{11,25,-9}, -{11,25,-8}, -{11,25,-7}, -{11,25,-6}, -{11,25,-5}, -{11,25,-4}, -{11,25,-3}, -{11,25,-2}, -{11,25,-1}, -{11,25,0}, -{11,25,1}, -{11,25,2}, -{11,25,3}, -{11,25,4}, -{11,25,5}, -{11,25,6}, -{11,25,7}, -{11,25,8}, -{11,25,9}, -{11,25,10}, -{11,25,11}, -{11,25,12}, -{11,25,13}, -{11,25,14}, -{11,25,15}, -{11,25,16}, -{11,25,17}, -{11,26,-44}, -{11,26,-43}, -{11,26,-42}, -{11,26,-41}, -{11,26,-40}, -{11,26,-39}, -{11,26,-38}, -{11,26,-37}, -{11,26,-36}, -{11,26,-35}, -{11,26,-34}, -{11,26,-33}, -{11,26,-32}, -{11,26,-31}, -{11,26,-30}, -{11,26,-29}, -{11,26,-28}, -{11,26,-27}, -{11,26,-26}, -{11,26,-25}, -{11,26,-24}, -{11,26,-23}, -{11,26,-22}, -{11,26,-21}, -{11,26,-20}, -{11,26,-19}, -{11,26,-18}, -{11,26,-17}, -{11,26,-16}, -{11,26,-15}, -{11,26,-14}, -{11,26,-13}, -{11,26,-12}, -{11,26,-11}, -{11,26,-10}, -{11,26,-9}, -{11,26,-8}, -{11,26,-7}, -{11,26,-6}, -{11,26,-5}, -{11,26,-4}, -{11,26,-3}, -{11,26,-2}, -{11,26,-1}, -{11,26,0}, -{11,26,1}, -{11,26,2}, -{11,26,3}, -{11,26,4}, -{11,26,5}, -{11,26,6}, -{11,26,7}, -{11,26,8}, -{11,26,9}, -{11,26,10}, -{11,26,11}, -{11,26,12}, -{11,26,13}, -{11,26,14}, -{11,26,15}, -{11,26,16}, -{11,26,17}, -{11,27,-45}, -{11,27,-44}, -{11,27,-43}, -{11,27,-42}, -{11,27,-41}, -{11,27,-40}, -{11,27,-39}, -{11,27,-38}, -{11,27,-37}, -{11,27,-36}, -{11,27,-35}, -{11,27,-34}, -{11,27,-33}, -{11,27,-32}, -{11,27,-31}, -{11,27,-30}, -{11,27,-29}, -{11,27,-28}, -{11,27,-27}, -{11,27,-26}, -{11,27,-25}, -{11,27,-24}, -{11,27,-23}, -{11,27,-22}, -{11,27,-21}, -{11,27,-20}, -{11,27,-19}, -{11,27,-18}, -{11,27,-17}, -{11,27,-16}, -{11,27,-15}, -{11,27,-14}, -{11,27,-13}, -{11,27,-12}, -{11,27,-11}, -{11,27,-10}, -{11,27,-9}, -{11,27,-8}, -{11,27,-7}, -{11,27,-6}, -{11,27,-5}, -{11,27,-4}, -{11,27,-3}, -{11,27,-2}, -{11,27,-1}, -{11,27,0}, -{11,27,1}, -{11,27,2}, -{11,27,3}, -{11,27,4}, -{11,27,5}, -{11,27,6}, -{11,27,7}, -{11,27,8}, -{11,27,9}, -{11,27,10}, -{11,27,11}, -{11,27,12}, -{11,27,13}, -{11,27,14}, -{11,27,15}, -{11,27,16}, -{11,27,17}, -{11,28,-46}, -{11,28,-45}, -{11,28,-44}, -{11,28,-43}, -{11,28,-42}, -{11,28,-41}, -{11,28,-40}, -{11,28,-39}, -{11,28,-38}, -{11,28,-37}, -{11,28,-36}, -{11,28,-35}, -{11,28,-34}, -{11,28,-33}, -{11,28,-32}, -{11,28,-31}, -{11,28,-30}, -{11,28,-29}, -{11,28,-28}, -{11,28,-27}, -{11,28,-26}, -{11,28,-25}, -{11,28,-24}, -{11,28,-23}, -{11,28,-22}, -{11,28,-21}, -{11,28,-20}, -{11,28,-19}, -{11,28,-18}, -{11,28,-17}, -{11,28,-16}, -{11,28,-15}, -{11,28,-14}, -{11,28,-13}, -{11,28,-12}, -{11,28,-11}, -{11,28,-10}, -{11,28,-9}, -{11,28,-8}, -{11,28,-7}, -{11,28,-6}, -{11,28,-5}, -{11,28,-4}, -{11,28,-3}, -{11,28,-2}, -{11,28,-1}, -{11,28,0}, -{11,28,1}, -{11,28,2}, -{11,28,3}, -{11,28,4}, -{11,28,5}, -{11,28,6}, -{11,28,7}, -{11,28,8}, -{11,28,9}, -{11,28,10}, -{11,28,11}, -{11,28,12}, -{11,28,13}, -{11,28,14}, -{11,28,15}, -{11,28,16}, -{11,28,17}, -{11,29,-47}, -{11,29,-46}, -{11,29,-45}, -{11,29,-44}, -{11,29,-43}, -{11,29,-42}, -{11,29,-41}, -{11,29,-40}, -{11,29,-39}, -{11,29,-38}, -{11,29,-37}, -{11,29,-36}, -{11,29,-35}, -{11,29,-34}, -{11,29,-33}, -{11,29,-32}, -{11,29,-31}, -{11,29,-30}, -{11,29,-29}, -{11,29,-28}, -{11,29,-27}, -{11,29,-26}, -{11,29,-25}, -{11,29,-24}, -{11,29,-23}, -{11,29,-22}, -{11,29,-21}, -{11,29,-20}, -{11,29,-19}, -{11,29,-18}, -{11,29,-17}, -{11,29,-16}, -{11,29,-15}, -{11,29,-14}, -{11,29,-13}, -{11,29,-12}, -{11,29,-11}, -{11,29,-10}, -{11,29,-9}, -{11,29,-8}, -{11,29,-7}, -{11,29,-6}, -{11,29,-5}, -{11,29,-4}, -{11,29,-3}, -{11,29,-2}, -{11,29,-1}, -{11,29,0}, -{11,29,1}, -{11,29,2}, -{11,29,3}, -{11,29,4}, -{11,29,5}, -{11,29,6}, -{11,29,7}, -{11,29,8}, -{11,29,9}, -{11,29,10}, -{11,29,11}, -{11,29,12}, -{11,29,13}, -{11,29,14}, -{11,29,15}, -{11,29,16}, -{11,29,17}, -{11,30,-48}, -{11,30,-47}, -{11,30,-46}, -{11,30,-45}, -{11,30,-44}, -{11,30,-43}, -{11,30,-42}, -{11,30,-41}, -{11,30,-40}, -{11,30,-39}, -{11,30,-38}, -{11,30,-37}, -{11,30,-36}, -{11,30,-35}, -{11,30,-34}, -{11,30,-33}, -{11,30,-32}, -{11,30,-31}, -{11,30,-30}, -{11,30,-29}, -{11,30,-28}, -{11,30,-27}, -{11,30,-26}, -{11,30,-25}, -{11,30,-24}, -{11,30,-23}, -{11,30,-22}, -{11,30,-21}, -{11,30,-20}, -{11,30,-19}, -{11,30,-18}, -{11,30,-17}, -{11,30,-16}, -{11,30,-15}, -{11,30,-14}, -{11,30,-13}, -{11,30,-12}, -{11,30,-11}, -{11,30,-10}, -{11,30,-9}, -{11,30,-8}, -{11,30,-7}, -{11,30,-6}, -{11,30,-5}, -{11,30,-4}, -{11,30,-3}, -{11,30,-2}, -{11,30,-1}, -{11,30,0}, -{11,30,1}, -{11,30,2}, -{11,30,3}, -{11,30,4}, -{11,30,5}, -{11,30,6}, -{11,30,7}, -{11,30,8}, -{11,30,9}, -{11,30,10}, -{11,30,11}, -{11,30,12}, -{11,30,13}, -{11,30,14}, -{11,30,15}, -{11,30,16}, -{11,30,17}, -{11,31,-49}, -{11,31,-48}, -{11,31,-47}, -{11,31,-46}, -{11,31,-45}, -{11,31,-44}, -{11,31,-43}, -{11,31,-42}, -{11,31,-41}, -{11,31,-40}, -{11,31,-39}, -{11,31,-38}, -{11,31,-37}, -{11,31,-36}, -{11,31,-35}, -{11,31,-34}, -{11,31,-33}, -{11,31,-32}, -{11,31,-31}, -{11,31,-30}, -{11,31,-29}, -{11,31,-28}, -{11,31,-27}, -{11,31,-26}, -{11,31,-25}, -{11,31,-24}, -{11,31,-23}, -{11,31,-22}, -{11,31,-21}, -{11,31,-20}, -{11,31,-19}, -{11,31,-18}, -{11,31,-17}, -{11,31,-16}, -{11,31,-15}, -{11,31,-14}, -{11,31,-13}, -{11,31,-12}, -{11,31,-11}, -{11,31,-10}, -{11,31,-9}, -{11,31,-8}, -{11,31,-7}, -{11,31,-6}, -{11,31,-5}, -{11,31,-4}, -{11,31,-3}, -{11,31,-2}, -{11,31,-1}, -{11,31,0}, -{11,31,1}, -{11,31,2}, -{11,31,3}, -{11,31,4}, -{11,31,5}, -{11,31,6}, -{11,31,7}, -{11,31,8}, -{11,31,9}, -{11,31,10}, -{11,31,11}, -{11,31,12}, -{11,31,13}, -{11,31,14}, -{11,31,15}, -{11,31,16}, -{11,31,17}, -{11,32,-50}, -{11,32,-49}, -{11,32,-48}, -{11,32,-47}, -{11,32,-46}, -{11,32,-45}, -{11,32,-44}, -{11,32,-43}, -{11,32,-42}, -{11,32,-41}, -{11,32,-40}, -{11,32,-39}, -{11,32,-38}, -{11,32,-37}, -{11,32,-36}, -{11,32,-35}, -{11,32,-34}, -{11,32,-33}, -{11,32,-32}, -{11,32,-31}, -{11,32,-30}, -{11,32,-29}, -{11,32,-28}, -{11,32,-27}, -{11,32,-26}, -{11,32,-25}, -{11,32,-24}, -{11,32,-23}, -{11,32,-22}, -{11,32,-21}, -{11,32,-20}, -{11,32,-19}, -{11,32,-18}, -{11,32,-17}, -{11,32,-16}, -{11,32,-15}, -{11,32,-14}, -{11,32,-13}, -{11,32,-12}, -{11,32,-11}, -{11,32,-10}, -{11,32,-9}, -{11,32,-8}, -{11,32,-7}, -{11,32,-6}, -{11,32,-5}, -{11,32,-4}, -{11,32,-3}, -{11,32,-2}, -{11,32,-1}, -{11,32,0}, -{11,32,1}, -{11,32,2}, -{11,32,3}, -{11,32,4}, -{11,32,5}, -{11,32,6}, -{11,32,7}, -{11,33,-51}, -{11,33,-50}, -{11,33,-49}, -{11,33,-48}, -{11,33,-47}, -{11,33,-46}, -{11,33,-45}, -{11,33,-44}, -{11,33,-43}, -{11,33,-42}, -{11,33,-41}, -{11,33,-40}, -{11,33,-39}, -{11,33,-38}, -{11,33,-37}, -{11,33,-36}, -{11,33,-35}, -{11,33,-34}, -{11,33,-33}, -{11,33,-32}, -{11,33,-31}, -{11,33,-30}, -{11,33,-29}, -{11,33,-28}, -{11,33,-27}, -{11,33,-26}, -{11,33,-25}, -{11,33,-24}, -{11,33,-23}, -{11,33,-22}, -{11,33,-21}, -{11,33,-20}, -{11,33,-19}, -{11,33,-18}, -{11,33,-17}, -{11,33,-16}, -{11,33,-15}, -{11,33,-14}, -{11,33,-13}, -{11,33,-12}, -{11,33,-11}, -{11,33,-10}, -{11,33,-9}, -{11,33,-8}, -{11,33,-7}, -{11,34,-51}, -{11,34,-50}, -{11,34,-49}, -{11,34,-48}, -{11,34,-47}, -{11,34,-46}, -{11,34,-45}, -{11,34,-44}, -{11,34,-43}, -{11,34,-42}, -{11,34,-41}, -{11,34,-40}, -{11,34,-39}, -{11,34,-38}, -{11,34,-37}, -{11,34,-36}, -{11,34,-35}, -{11,34,-34}, -{11,34,-33}, -{11,34,-32}, -{11,34,-31}, -{11,34,-30}, -{11,34,-29}, -{11,34,-28}, -{11,34,-27}, -{11,34,-26}, -{11,34,-25}, -{11,34,-24}, -{11,34,-23}, -{11,34,-22}, -{11,34,-21}, -{11,34,-20}, -{11,34,-19}, -{11,34,-18}, -{11,34,-17}, -{11,34,-16}, -{11,35,-52}, -{11,35,-51}, -{11,35,-50}, -{11,35,-49}, -{11,35,-48}, -{11,35,-47}, -{11,35,-46}, -{11,35,-45}, -{11,35,-44}, -{11,35,-43}, -{11,35,-42}, -{11,35,-41}, -{11,35,-40}, -{11,35,-39}, -{11,35,-38}, -{11,35,-37}, -{11,35,-36}, -{11,35,-35}, -{11,35,-34}, -{11,35,-33}, -{11,35,-32}, -{11,35,-31}, -{11,35,-30}, -{11,35,-29}, -{11,35,-28}, -{11,35,-27}, -{11,35,-26}, -{11,35,-25}, -{11,35,-24}, -{11,35,-23}, -{11,36,-53}, -{11,36,-52}, -{11,36,-51}, -{11,36,-50}, -{11,36,-49}, -{11,36,-48}, -{11,36,-47}, -{11,36,-46}, -{11,36,-45}, -{11,36,-44}, -{11,36,-43}, -{11,36,-42}, -{11,36,-41}, -{11,36,-40}, -{11,36,-39}, -{11,36,-38}, -{11,36,-37}, -{11,36,-36}, -{11,36,-35}, -{11,36,-34}, -{11,36,-33}, -{11,36,-32}, -{11,36,-31}, -{11,36,-30}, -{11,36,-29}, -{11,37,-54}, -{11,37,-53}, -{11,37,-52}, -{11,37,-51}, -{11,37,-50}, -{11,37,-49}, -{11,37,-48}, -{11,37,-47}, -{11,37,-46}, -{11,37,-45}, -{11,37,-44}, -{11,37,-43}, -{11,37,-42}, -{11,37,-41}, -{11,37,-40}, -{11,37,-39}, -{11,37,-38}, -{11,37,-37}, -{11,37,-36}, -{11,37,-35}, -{11,37,-34}, -{11,38,-55}, -{11,38,-54}, -{11,38,-53}, -{11,38,-52}, -{11,38,-51}, -{11,38,-50}, -{11,38,-49}, -{11,38,-48}, -{11,38,-47}, -{11,38,-46}, -{11,38,-45}, -{11,38,-44}, -{11,38,-43}, -{11,38,-42}, -{11,38,-41}, -{11,38,-40}, -{11,38,-39}, -{11,38,-38}, -{11,39,-56}, -{11,39,-55}, -{11,39,-54}, -{11,39,-53}, -{11,39,-52}, -{11,39,-51}, -{11,39,-50}, -{11,39,-49}, -{11,39,-48}, -{11,39,-47}, -{11,39,-46}, -{11,39,-45}, -{11,39,-44}, -{11,39,-43}, -{11,39,-42}, -{11,40,-56}, -{11,40,-55}, -{11,40,-54}, -{11,40,-53}, -{11,40,-52}, -{11,40,-51}, -{11,40,-50}, -{11,40,-49}, -{11,40,-48}, -{11,40,-47}, -{11,40,-46}, -{11,41,-57}, -{11,41,-56}, -{11,41,-55}, -{11,41,-54}, -{11,41,-53}, -{11,41,-52}, -{11,41,-51}, -{11,41,-50}, -{11,42,-58}, -{11,42,-57}, -{11,42,-56}, -{11,42,-55}, -{11,42,-54}, -{11,42,-53}, -{11,43,-59}, -{11,43,-58}, -{11,43,-57}, -{11,44,-60}, -{12,-22,15}, -{12,-22,16}, -{12,-22,17}, -{12,-21,13}, -{12,-21,14}, -{12,-21,15}, -{12,-21,16}, -{12,-21,17}, -{12,-20,11}, -{12,-20,12}, -{12,-20,13}, -{12,-20,14}, -{12,-20,15}, -{12,-20,16}, -{12,-20,17}, -{12,-19,9}, -{12,-19,10}, -{12,-19,11}, -{12,-19,12}, -{12,-19,13}, -{12,-19,14}, -{12,-19,15}, -{12,-19,16}, -{12,-19,17}, -{12,-18,6}, -{12,-18,7}, -{12,-18,8}, -{12,-18,9}, -{12,-18,10}, -{12,-18,11}, -{12,-18,12}, -{12,-18,13}, -{12,-18,14}, -{12,-18,15}, -{12,-18,16}, -{12,-18,17}, -{12,-17,4}, -{12,-17,5}, -{12,-17,6}, -{12,-17,7}, -{12,-17,8}, -{12,-17,9}, -{12,-17,10}, -{12,-17,11}, -{12,-17,12}, -{12,-17,13}, -{12,-17,14}, -{12,-17,15}, -{12,-17,16}, -{12,-17,17}, -{12,-16,2}, -{12,-16,3}, -{12,-16,4}, -{12,-16,5}, -{12,-16,6}, -{12,-16,7}, -{12,-16,8}, -{12,-16,9}, -{12,-16,10}, -{12,-16,11}, -{12,-16,12}, -{12,-16,13}, -{12,-16,14}, -{12,-16,15}, -{12,-16,16}, -{12,-16,17}, -{12,-15,1}, -{12,-15,2}, -{12,-15,3}, -{12,-15,4}, -{12,-15,5}, -{12,-15,6}, -{12,-15,7}, -{12,-15,8}, -{12,-15,9}, -{12,-15,10}, -{12,-15,11}, -{12,-15,12}, -{12,-15,13}, -{12,-15,14}, -{12,-15,15}, -{12,-15,16}, -{12,-15,17}, -{12,-14,-1}, -{12,-14,0}, -{12,-14,1}, -{12,-14,2}, -{12,-14,3}, -{12,-14,4}, -{12,-14,5}, -{12,-14,6}, -{12,-14,7}, -{12,-14,8}, -{12,-14,9}, -{12,-14,10}, -{12,-14,11}, -{12,-14,12}, -{12,-14,13}, -{12,-14,14}, -{12,-14,15}, -{12,-14,16}, -{12,-14,17}, -{12,-13,-3}, -{12,-13,-2}, -{12,-13,-1}, -{12,-13,0}, -{12,-13,1}, -{12,-13,2}, -{12,-13,3}, -{12,-13,4}, -{12,-13,5}, -{12,-13,6}, -{12,-13,7}, -{12,-13,8}, -{12,-13,9}, -{12,-13,10}, -{12,-13,11}, -{12,-13,12}, -{12,-13,13}, -{12,-13,14}, -{12,-13,15}, -{12,-13,16}, -{12,-13,17}, -{12,-12,-4}, -{12,-12,-3}, -{12,-12,-2}, -{12,-12,-1}, -{12,-12,0}, -{12,-12,1}, -{12,-12,2}, -{12,-12,3}, -{12,-12,4}, -{12,-12,5}, -{12,-12,6}, -{12,-12,7}, -{12,-12,8}, -{12,-12,9}, -{12,-12,10}, -{12,-12,11}, -{12,-12,12}, -{12,-12,13}, -{12,-12,14}, -{12,-12,15}, -{12,-12,16}, -{12,-12,17}, -{12,-11,-6}, -{12,-11,-5}, -{12,-11,-4}, -{12,-11,-3}, -{12,-11,-2}, -{12,-11,-1}, -{12,-11,0}, -{12,-11,1}, -{12,-11,2}, -{12,-11,3}, -{12,-11,4}, -{12,-11,5}, -{12,-11,6}, -{12,-11,7}, -{12,-11,8}, -{12,-11,9}, -{12,-11,10}, -{12,-11,11}, -{12,-11,12}, -{12,-11,13}, -{12,-11,14}, -{12,-11,15}, -{12,-11,16}, -{12,-11,17}, -{12,-10,-7}, -{12,-10,-6}, -{12,-10,-5}, -{12,-10,-4}, -{12,-10,-3}, -{12,-10,-2}, -{12,-10,-1}, -{12,-10,0}, -{12,-10,1}, -{12,-10,2}, -{12,-10,3}, -{12,-10,4}, -{12,-10,5}, -{12,-10,6}, -{12,-10,7}, -{12,-10,8}, -{12,-10,9}, -{12,-10,10}, -{12,-10,11}, -{12,-10,12}, -{12,-10,13}, -{12,-10,14}, -{12,-10,15}, -{12,-10,16}, -{12,-10,17}, -{12,-9,-9}, -{12,-9,-8}, -{12,-9,-7}, -{12,-9,-6}, -{12,-9,-5}, -{12,-9,-4}, -{12,-9,-3}, -{12,-9,-2}, -{12,-9,-1}, -{12,-9,0}, -{12,-9,1}, -{12,-9,2}, -{12,-9,3}, -{12,-9,4}, -{12,-9,5}, -{12,-9,6}, -{12,-9,7}, -{12,-9,8}, -{12,-9,9}, -{12,-9,10}, -{12,-9,11}, -{12,-9,12}, -{12,-9,13}, -{12,-9,14}, -{12,-9,15}, -{12,-9,16}, -{12,-9,17}, -{12,-8,-10}, -{12,-8,-9}, -{12,-8,-8}, -{12,-8,-7}, -{12,-8,-6}, -{12,-8,-5}, -{12,-8,-4}, -{12,-8,-3}, -{12,-8,-2}, -{12,-8,-1}, -{12,-8,0}, -{12,-8,1}, -{12,-8,2}, -{12,-8,3}, -{12,-8,4}, -{12,-8,5}, -{12,-8,6}, -{12,-8,7}, -{12,-8,8}, -{12,-8,9}, -{12,-8,10}, -{12,-8,11}, -{12,-8,12}, -{12,-8,13}, -{12,-8,14}, -{12,-8,15}, -{12,-8,16}, -{12,-8,17}, -{12,-7,-11}, -{12,-7,-10}, -{12,-7,-9}, -{12,-7,-8}, -{12,-7,-7}, -{12,-7,-6}, -{12,-7,-5}, -{12,-7,-4}, -{12,-7,-3}, -{12,-7,-2}, -{12,-7,-1}, -{12,-7,0}, -{12,-7,1}, -{12,-7,2}, -{12,-7,3}, -{12,-7,4}, -{12,-7,5}, -{12,-7,6}, -{12,-7,7}, -{12,-7,8}, -{12,-7,9}, -{12,-7,10}, -{12,-7,11}, -{12,-7,12}, -{12,-7,13}, -{12,-7,14}, -{12,-7,15}, -{12,-7,16}, -{12,-7,17}, -{12,-6,-13}, -{12,-6,-12}, -{12,-6,-11}, -{12,-6,-10}, -{12,-6,-9}, -{12,-6,-8}, -{12,-6,-7}, -{12,-6,-6}, -{12,-6,-5}, -{12,-6,-4}, -{12,-6,-3}, -{12,-6,-2}, -{12,-6,-1}, -{12,-6,0}, -{12,-6,1}, -{12,-6,2}, -{12,-6,3}, -{12,-6,4}, -{12,-6,5}, -{12,-6,6}, -{12,-6,7}, -{12,-6,8}, -{12,-6,9}, -{12,-6,10}, -{12,-6,11}, -{12,-6,12}, -{12,-6,13}, -{12,-6,14}, -{12,-6,15}, -{12,-6,16}, -{12,-6,17}, -{12,-5,-14}, -{12,-5,-13}, -{12,-5,-12}, -{12,-5,-11}, -{12,-5,-10}, -{12,-5,-9}, -{12,-5,-8}, -{12,-5,-7}, -{12,-5,-6}, -{12,-5,-5}, -{12,-5,-4}, -{12,-5,-3}, -{12,-5,-2}, -{12,-5,-1}, -{12,-5,0}, -{12,-5,1}, -{12,-5,2}, -{12,-5,3}, -{12,-5,4}, -{12,-5,5}, -{12,-5,6}, -{12,-5,7}, -{12,-5,8}, -{12,-5,9}, -{12,-5,10}, -{12,-5,11}, -{12,-5,12}, -{12,-5,13}, -{12,-5,14}, -{12,-5,15}, -{12,-5,16}, -{12,-5,17}, -{12,-4,-15}, -{12,-4,-14}, -{12,-4,-13}, -{12,-4,-12}, -{12,-4,-11}, -{12,-4,-10}, -{12,-4,-9}, -{12,-4,-8}, -{12,-4,-7}, -{12,-4,-6}, -{12,-4,-5}, -{12,-4,-4}, -{12,-4,-3}, -{12,-4,-2}, -{12,-4,-1}, -{12,-4,0}, -{12,-4,1}, -{12,-4,2}, -{12,-4,3}, -{12,-4,4}, -{12,-4,5}, -{12,-4,6}, -{12,-4,7}, -{12,-4,8}, -{12,-4,9}, -{12,-4,10}, -{12,-4,11}, -{12,-4,12}, -{12,-4,13}, -{12,-4,14}, -{12,-4,15}, -{12,-4,16}, -{12,-4,17}, -{12,-3,-16}, -{12,-3,-15}, -{12,-3,-14}, -{12,-3,-13}, -{12,-3,-12}, -{12,-3,-11}, -{12,-3,-10}, -{12,-3,-9}, -{12,-3,-8}, -{12,-3,-7}, -{12,-3,-6}, -{12,-3,-5}, -{12,-3,-4}, -{12,-3,-3}, -{12,-3,-2}, -{12,-3,-1}, -{12,-3,0}, -{12,-3,1}, -{12,-3,2}, -{12,-3,3}, -{12,-3,4}, -{12,-3,5}, -{12,-3,6}, -{12,-3,7}, -{12,-3,8}, -{12,-3,9}, -{12,-3,10}, -{12,-3,11}, -{12,-3,12}, -{12,-3,13}, -{12,-3,14}, -{12,-3,15}, -{12,-3,16}, -{12,-3,17}, -{12,-2,-18}, -{12,-2,-17}, -{12,-2,-16}, -{12,-2,-15}, -{12,-2,-14}, -{12,-2,-13}, -{12,-2,-12}, -{12,-2,-11}, -{12,-2,-10}, -{12,-2,-9}, -{12,-2,-8}, -{12,-2,-7}, -{12,-2,-6}, -{12,-2,-5}, -{12,-2,-4}, -{12,-2,-3}, -{12,-2,-2}, -{12,-2,-1}, -{12,-2,0}, -{12,-2,1}, -{12,-2,2}, -{12,-2,3}, -{12,-2,4}, -{12,-2,5}, -{12,-2,6}, -{12,-2,7}, -{12,-2,8}, -{12,-2,9}, -{12,-2,10}, -{12,-2,11}, -{12,-2,12}, -{12,-2,13}, -{12,-2,14}, -{12,-2,15}, -{12,-2,16}, -{12,-2,17}, -{12,-1,-19}, -{12,-1,-18}, -{12,-1,-17}, -{12,-1,-16}, -{12,-1,-15}, -{12,-1,-14}, -{12,-1,-13}, -{12,-1,-12}, -{12,-1,-11}, -{12,-1,-10}, -{12,-1,-9}, -{12,-1,-8}, -{12,-1,-7}, -{12,-1,-6}, -{12,-1,-5}, -{12,-1,-4}, -{12,-1,-3}, -{12,-1,-2}, -{12,-1,-1}, -{12,-1,0}, -{12,-1,1}, -{12,-1,2}, -{12,-1,3}, -{12,-1,4}, -{12,-1,5}, -{12,-1,6}, -{12,-1,7}, -{12,-1,8}, -{12,-1,9}, -{12,-1,10}, -{12,-1,11}, -{12,-1,12}, -{12,-1,13}, -{12,-1,14}, -{12,-1,15}, -{12,-1,16}, -{12,-1,17}, -{12,0,-20}, -{12,0,-19}, -{12,0,-18}, -{12,0,-17}, -{12,0,-16}, -{12,0,-15}, -{12,0,-14}, -{12,0,-13}, -{12,0,-12}, -{12,0,-11}, -{12,0,-10}, -{12,0,-9}, -{12,0,-8}, -{12,0,-7}, -{12,0,-6}, -{12,0,-5}, -{12,0,-4}, -{12,0,-3}, -{12,0,-2}, -{12,0,-1}, -{12,0,0}, -{12,0,1}, -{12,0,2}, -{12,0,3}, -{12,0,4}, -{12,0,5}, -{12,0,6}, -{12,0,7}, -{12,0,8}, -{12,0,9}, -{12,0,10}, -{12,0,11}, -{12,0,12}, -{12,0,13}, -{12,0,14}, -{12,0,15}, -{12,0,16}, -{12,0,17}, -{12,1,-21}, -{12,1,-20}, -{12,1,-19}, -{12,1,-18}, -{12,1,-17}, -{12,1,-16}, -{12,1,-15}, -{12,1,-14}, -{12,1,-13}, -{12,1,-12}, -{12,1,-11}, -{12,1,-10}, -{12,1,-9}, -{12,1,-8}, -{12,1,-7}, -{12,1,-6}, -{12,1,-5}, -{12,1,-4}, -{12,1,-3}, -{12,1,-2}, -{12,1,-1}, -{12,1,0}, -{12,1,1}, -{12,1,2}, -{12,1,3}, -{12,1,4}, -{12,1,5}, -{12,1,6}, -{12,1,7}, -{12,1,8}, -{12,1,9}, -{12,1,10}, -{12,1,11}, -{12,1,12}, -{12,1,13}, -{12,1,14}, -{12,1,15}, -{12,1,16}, -{12,1,17}, -{12,1,18}, -{12,2,-22}, -{12,2,-21}, -{12,2,-20}, -{12,2,-19}, -{12,2,-18}, -{12,2,-17}, -{12,2,-16}, -{12,2,-15}, -{12,2,-14}, -{12,2,-13}, -{12,2,-12}, -{12,2,-11}, -{12,2,-10}, -{12,2,-9}, -{12,2,-8}, -{12,2,-7}, -{12,2,-6}, -{12,2,-5}, -{12,2,-4}, -{12,2,-3}, -{12,2,-2}, -{12,2,-1}, -{12,2,0}, -{12,2,1}, -{12,2,2}, -{12,2,3}, -{12,2,4}, -{12,2,5}, -{12,2,6}, -{12,2,7}, -{12,2,8}, -{12,2,9}, -{12,2,10}, -{12,2,11}, -{12,2,12}, -{12,2,13}, -{12,2,14}, -{12,2,15}, -{12,2,16}, -{12,2,17}, -{12,2,18}, -{12,3,-23}, -{12,3,-22}, -{12,3,-21}, -{12,3,-20}, -{12,3,-19}, -{12,3,-18}, -{12,3,-17}, -{12,3,-16}, -{12,3,-15}, -{12,3,-14}, -{12,3,-13}, -{12,3,-12}, -{12,3,-11}, -{12,3,-10}, -{12,3,-9}, -{12,3,-8}, -{12,3,-7}, -{12,3,-6}, -{12,3,-5}, -{12,3,-4}, -{12,3,-3}, -{12,3,-2}, -{12,3,-1}, -{12,3,0}, -{12,3,1}, -{12,3,2}, -{12,3,3}, -{12,3,4}, -{12,3,5}, -{12,3,6}, -{12,3,7}, -{12,3,8}, -{12,3,9}, -{12,3,10}, -{12,3,11}, -{12,3,12}, -{12,3,13}, -{12,3,14}, -{12,3,15}, -{12,3,16}, -{12,3,17}, -{12,3,18}, -{12,4,-24}, -{12,4,-23}, -{12,4,-22}, -{12,4,-21}, -{12,4,-20}, -{12,4,-19}, -{12,4,-18}, -{12,4,-17}, -{12,4,-16}, -{12,4,-15}, -{12,4,-14}, -{12,4,-13}, -{12,4,-12}, -{12,4,-11}, -{12,4,-10}, -{12,4,-9}, -{12,4,-8}, -{12,4,-7}, -{12,4,-6}, -{12,4,-5}, -{12,4,-4}, -{12,4,-3}, -{12,4,-2}, -{12,4,-1}, -{12,4,0}, -{12,4,1}, -{12,4,2}, -{12,4,3}, -{12,4,4}, -{12,4,5}, -{12,4,6}, -{12,4,7}, -{12,4,8}, -{12,4,9}, -{12,4,10}, -{12,4,11}, -{12,4,12}, -{12,4,13}, -{12,4,14}, -{12,4,15}, -{12,4,16}, -{12,4,17}, -{12,4,18}, -{12,5,-25}, -{12,5,-24}, -{12,5,-23}, -{12,5,-22}, -{12,5,-21}, -{12,5,-20}, -{12,5,-19}, -{12,5,-18}, -{12,5,-17}, -{12,5,-16}, -{12,5,-15}, -{12,5,-14}, -{12,5,-13}, -{12,5,-12}, -{12,5,-11}, -{12,5,-10}, -{12,5,-9}, -{12,5,-8}, -{12,5,-7}, -{12,5,-6}, -{12,5,-5}, -{12,5,-4}, -{12,5,-3}, -{12,5,-2}, -{12,5,-1}, -{12,5,0}, -{12,5,1}, -{12,5,2}, -{12,5,3}, -{12,5,4}, -{12,5,5}, -{12,5,6}, -{12,5,7}, -{12,5,8}, -{12,5,9}, -{12,5,10}, -{12,5,11}, -{12,5,12}, -{12,5,13}, -{12,5,14}, -{12,5,15}, -{12,5,16}, -{12,5,17}, -{12,5,18}, -{12,6,-26}, -{12,6,-25}, -{12,6,-24}, -{12,6,-23}, -{12,6,-22}, -{12,6,-21}, -{12,6,-20}, -{12,6,-19}, -{12,6,-18}, -{12,6,-17}, -{12,6,-16}, -{12,6,-15}, -{12,6,-14}, -{12,6,-13}, -{12,6,-12}, -{12,6,-11}, -{12,6,-10}, -{12,6,-9}, -{12,6,-8}, -{12,6,-7}, -{12,6,-6}, -{12,6,-5}, -{12,6,-4}, -{12,6,-3}, -{12,6,-2}, -{12,6,-1}, -{12,6,0}, -{12,6,1}, -{12,6,2}, -{12,6,3}, -{12,6,4}, -{12,6,5}, -{12,6,6}, -{12,6,7}, -{12,6,8}, -{12,6,9}, -{12,6,10}, -{12,6,11}, -{12,6,12}, -{12,6,13}, -{12,6,14}, -{12,6,15}, -{12,6,16}, -{12,6,17}, -{12,6,18}, -{12,7,-27}, -{12,7,-26}, -{12,7,-25}, -{12,7,-24}, -{12,7,-23}, -{12,7,-22}, -{12,7,-21}, -{12,7,-20}, -{12,7,-19}, -{12,7,-18}, -{12,7,-17}, -{12,7,-16}, -{12,7,-15}, -{12,7,-14}, -{12,7,-13}, -{12,7,-12}, -{12,7,-11}, -{12,7,-10}, -{12,7,-9}, -{12,7,-8}, -{12,7,-7}, -{12,7,-6}, -{12,7,-5}, -{12,7,-4}, -{12,7,-3}, -{12,7,-2}, -{12,7,-1}, -{12,7,0}, -{12,7,1}, -{12,7,2}, -{12,7,3}, -{12,7,4}, -{12,7,5}, -{12,7,6}, -{12,7,7}, -{12,7,8}, -{12,7,9}, -{12,7,10}, -{12,7,11}, -{12,7,12}, -{12,7,13}, -{12,7,14}, -{12,7,15}, -{12,7,16}, -{12,7,17}, -{12,7,18}, -{12,8,-28}, -{12,8,-27}, -{12,8,-26}, -{12,8,-25}, -{12,8,-24}, -{12,8,-23}, -{12,8,-22}, -{12,8,-21}, -{12,8,-20}, -{12,8,-19}, -{12,8,-18}, -{12,8,-17}, -{12,8,-16}, -{12,8,-15}, -{12,8,-14}, -{12,8,-13}, -{12,8,-12}, -{12,8,-11}, -{12,8,-10}, -{12,8,-9}, -{12,8,-8}, -{12,8,-7}, -{12,8,-6}, -{12,8,-5}, -{12,8,-4}, -{12,8,-3}, -{12,8,-2}, -{12,8,-1}, -{12,8,0}, -{12,8,1}, -{12,8,2}, -{12,8,3}, -{12,8,4}, -{12,8,5}, -{12,8,6}, -{12,8,7}, -{12,8,8}, -{12,8,9}, -{12,8,10}, -{12,8,11}, -{12,8,12}, -{12,8,13}, -{12,8,14}, -{12,8,15}, -{12,8,16}, -{12,8,17}, -{12,8,18}, -{12,9,-29}, -{12,9,-28}, -{12,9,-27}, -{12,9,-26}, -{12,9,-25}, -{12,9,-24}, -{12,9,-23}, -{12,9,-22}, -{12,9,-21}, -{12,9,-20}, -{12,9,-19}, -{12,9,-18}, -{12,9,-17}, -{12,9,-16}, -{12,9,-15}, -{12,9,-14}, -{12,9,-13}, -{12,9,-12}, -{12,9,-11}, -{12,9,-10}, -{12,9,-9}, -{12,9,-8}, -{12,9,-7}, -{12,9,-6}, -{12,9,-5}, -{12,9,-4}, -{12,9,-3}, -{12,9,-2}, -{12,9,-1}, -{12,9,0}, -{12,9,1}, -{12,9,2}, -{12,9,3}, -{12,9,4}, -{12,9,5}, -{12,9,6}, -{12,9,7}, -{12,9,8}, -{12,9,9}, -{12,9,10}, -{12,9,11}, -{12,9,12}, -{12,9,13}, -{12,9,14}, -{12,9,15}, -{12,9,16}, -{12,9,17}, -{12,9,18}, -{12,10,-30}, -{12,10,-29}, -{12,10,-28}, -{12,10,-27}, -{12,10,-26}, -{12,10,-25}, -{12,10,-24}, -{12,10,-23}, -{12,10,-22}, -{12,10,-21}, -{12,10,-20}, -{12,10,-19}, -{12,10,-18}, -{12,10,-17}, -{12,10,-16}, -{12,10,-15}, -{12,10,-14}, -{12,10,-13}, -{12,10,-12}, -{12,10,-11}, -{12,10,-10}, -{12,10,-9}, -{12,10,-8}, -{12,10,-7}, -{12,10,-6}, -{12,10,-5}, -{12,10,-4}, -{12,10,-3}, -{12,10,-2}, -{12,10,-1}, -{12,10,0}, -{12,10,1}, -{12,10,2}, -{12,10,3}, -{12,10,4}, -{12,10,5}, -{12,10,6}, -{12,10,7}, -{12,10,8}, -{12,10,9}, -{12,10,10}, -{12,10,11}, -{12,10,12}, -{12,10,13}, -{12,10,14}, -{12,10,15}, -{12,10,16}, -{12,10,17}, -{12,10,18}, -{12,11,-31}, -{12,11,-30}, -{12,11,-29}, -{12,11,-28}, -{12,11,-27}, -{12,11,-26}, -{12,11,-25}, -{12,11,-24}, -{12,11,-23}, -{12,11,-22}, -{12,11,-21}, -{12,11,-20}, -{12,11,-19}, -{12,11,-18}, -{12,11,-17}, -{12,11,-16}, -{12,11,-15}, -{12,11,-14}, -{12,11,-13}, -{12,11,-12}, -{12,11,-11}, -{12,11,-10}, -{12,11,-9}, -{12,11,-8}, -{12,11,-7}, -{12,11,-6}, -{12,11,-5}, -{12,11,-4}, -{12,11,-3}, -{12,11,-2}, -{12,11,-1}, -{12,11,0}, -{12,11,1}, -{12,11,2}, -{12,11,3}, -{12,11,4}, -{12,11,5}, -{12,11,6}, -{12,11,7}, -{12,11,8}, -{12,11,9}, -{12,11,10}, -{12,11,11}, -{12,11,12}, -{12,11,13}, -{12,11,14}, -{12,11,15}, -{12,11,16}, -{12,11,17}, -{12,11,18}, -{12,12,-32}, -{12,12,-31}, -{12,12,-30}, -{12,12,-29}, -{12,12,-28}, -{12,12,-27}, -{12,12,-26}, -{12,12,-25}, -{12,12,-24}, -{12,12,-23}, -{12,12,-22}, -{12,12,-21}, -{12,12,-20}, -{12,12,-19}, -{12,12,-18}, -{12,12,-17}, -{12,12,-16}, -{12,12,-15}, -{12,12,-14}, -{12,12,-13}, -{12,12,-12}, -{12,12,-11}, -{12,12,-10}, -{12,12,-9}, -{12,12,-8}, -{12,12,-7}, -{12,12,-6}, -{12,12,-5}, -{12,12,-4}, -{12,12,-3}, -{12,12,-2}, -{12,12,-1}, -{12,12,0}, -{12,12,1}, -{12,12,2}, -{12,12,3}, -{12,12,4}, -{12,12,5}, -{12,12,6}, -{12,12,7}, -{12,12,8}, -{12,12,9}, -{12,12,10}, -{12,12,11}, -{12,12,12}, -{12,12,13}, -{12,12,14}, -{12,12,15}, -{12,12,16}, -{12,12,17}, -{12,12,18}, -{12,13,-33}, -{12,13,-32}, -{12,13,-31}, -{12,13,-30}, -{12,13,-29}, -{12,13,-28}, -{12,13,-27}, -{12,13,-26}, -{12,13,-25}, -{12,13,-24}, -{12,13,-23}, -{12,13,-22}, -{12,13,-21}, -{12,13,-20}, -{12,13,-19}, -{12,13,-18}, -{12,13,-17}, -{12,13,-16}, -{12,13,-15}, -{12,13,-14}, -{12,13,-13}, -{12,13,-12}, -{12,13,-11}, -{12,13,-10}, -{12,13,-9}, -{12,13,-8}, -{12,13,-7}, -{12,13,-6}, -{12,13,-5}, -{12,13,-4}, -{12,13,-3}, -{12,13,-2}, -{12,13,-1}, -{12,13,0}, -{12,13,1}, -{12,13,2}, -{12,13,3}, -{12,13,4}, -{12,13,5}, -{12,13,6}, -{12,13,7}, -{12,13,8}, -{12,13,9}, -{12,13,10}, -{12,13,11}, -{12,13,12}, -{12,13,13}, -{12,13,14}, -{12,13,15}, -{12,13,16}, -{12,13,17}, -{12,13,18}, -{12,14,-34}, -{12,14,-33}, -{12,14,-32}, -{12,14,-31}, -{12,14,-30}, -{12,14,-29}, -{12,14,-28}, -{12,14,-27}, -{12,14,-26}, -{12,14,-25}, -{12,14,-24}, -{12,14,-23}, -{12,14,-22}, -{12,14,-21}, -{12,14,-20}, -{12,14,-19}, -{12,14,-18}, -{12,14,-17}, -{12,14,-16}, -{12,14,-15}, -{12,14,-14}, -{12,14,-13}, -{12,14,-12}, -{12,14,-11}, -{12,14,-10}, -{12,14,-9}, -{12,14,-8}, -{12,14,-7}, -{12,14,-6}, -{12,14,-5}, -{12,14,-4}, -{12,14,-3}, -{12,14,-2}, -{12,14,-1}, -{12,14,0}, -{12,14,1}, -{12,14,2}, -{12,14,3}, -{12,14,4}, -{12,14,5}, -{12,14,6}, -{12,14,7}, -{12,14,8}, -{12,14,9}, -{12,14,10}, -{12,14,11}, -{12,14,12}, -{12,14,13}, -{12,14,14}, -{12,14,15}, -{12,14,16}, -{12,14,17}, -{12,14,18}, -{12,15,-35}, -{12,15,-34}, -{12,15,-33}, -{12,15,-32}, -{12,15,-31}, -{12,15,-30}, -{12,15,-29}, -{12,15,-28}, -{12,15,-27}, -{12,15,-26}, -{12,15,-25}, -{12,15,-24}, -{12,15,-23}, -{12,15,-22}, -{12,15,-21}, -{12,15,-20}, -{12,15,-19}, -{12,15,-18}, -{12,15,-17}, -{12,15,-16}, -{12,15,-15}, -{12,15,-14}, -{12,15,-13}, -{12,15,-12}, -{12,15,-11}, -{12,15,-10}, -{12,15,-9}, -{12,15,-8}, -{12,15,-7}, -{12,15,-6}, -{12,15,-5}, -{12,15,-4}, -{12,15,-3}, -{12,15,-2}, -{12,15,-1}, -{12,15,0}, -{12,15,1}, -{12,15,2}, -{12,15,3}, -{12,15,4}, -{12,15,5}, -{12,15,6}, -{12,15,7}, -{12,15,8}, -{12,15,9}, -{12,15,10}, -{12,15,11}, -{12,15,12}, -{12,15,13}, -{12,15,14}, -{12,15,15}, -{12,15,16}, -{12,15,17}, -{12,15,18}, -{12,16,-36}, -{12,16,-35}, -{12,16,-34}, -{12,16,-33}, -{12,16,-32}, -{12,16,-31}, -{12,16,-30}, -{12,16,-29}, -{12,16,-28}, -{12,16,-27}, -{12,16,-26}, -{12,16,-25}, -{12,16,-24}, -{12,16,-23}, -{12,16,-22}, -{12,16,-21}, -{12,16,-20}, -{12,16,-19}, -{12,16,-18}, -{12,16,-17}, -{12,16,-16}, -{12,16,-15}, -{12,16,-14}, -{12,16,-13}, -{12,16,-12}, -{12,16,-11}, -{12,16,-10}, -{12,16,-9}, -{12,16,-8}, -{12,16,-7}, -{12,16,-6}, -{12,16,-5}, -{12,16,-4}, -{12,16,-3}, -{12,16,-2}, -{12,16,-1}, -{12,16,0}, -{12,16,1}, -{12,16,2}, -{12,16,3}, -{12,16,4}, -{12,16,5}, -{12,16,6}, -{12,16,7}, -{12,16,8}, -{12,16,9}, -{12,16,10}, -{12,16,11}, -{12,16,12}, -{12,16,13}, -{12,16,14}, -{12,16,15}, -{12,16,16}, -{12,16,17}, -{12,16,18}, -{12,17,-37}, -{12,17,-36}, -{12,17,-35}, -{12,17,-34}, -{12,17,-33}, -{12,17,-32}, -{12,17,-31}, -{12,17,-30}, -{12,17,-29}, -{12,17,-28}, -{12,17,-27}, -{12,17,-26}, -{12,17,-25}, -{12,17,-24}, -{12,17,-23}, -{12,17,-22}, -{12,17,-21}, -{12,17,-20}, -{12,17,-19}, -{12,17,-18}, -{12,17,-17}, -{12,17,-16}, -{12,17,-15}, -{12,17,-14}, -{12,17,-13}, -{12,17,-12}, -{12,17,-11}, -{12,17,-10}, -{12,17,-9}, -{12,17,-8}, -{12,17,-7}, -{12,17,-6}, -{12,17,-5}, -{12,17,-4}, -{12,17,-3}, -{12,17,-2}, -{12,17,-1}, -{12,17,0}, -{12,17,1}, -{12,17,2}, -{12,17,3}, -{12,17,4}, -{12,17,5}, -{12,17,6}, -{12,17,7}, -{12,17,8}, -{12,17,9}, -{12,17,10}, -{12,17,11}, -{12,17,12}, -{12,17,13}, -{12,17,14}, -{12,17,15}, -{12,17,16}, -{12,17,17}, -{12,17,18}, -{12,18,-38}, -{12,18,-37}, -{12,18,-36}, -{12,18,-35}, -{12,18,-34}, -{12,18,-33}, -{12,18,-32}, -{12,18,-31}, -{12,18,-30}, -{12,18,-29}, -{12,18,-28}, -{12,18,-27}, -{12,18,-26}, -{12,18,-25}, -{12,18,-24}, -{12,18,-23}, -{12,18,-22}, -{12,18,-21}, -{12,18,-20}, -{12,18,-19}, -{12,18,-18}, -{12,18,-17}, -{12,18,-16}, -{12,18,-15}, -{12,18,-14}, -{12,18,-13}, -{12,18,-12}, -{12,18,-11}, -{12,18,-10}, -{12,18,-9}, -{12,18,-8}, -{12,18,-7}, -{12,18,-6}, -{12,18,-5}, -{12,18,-4}, -{12,18,-3}, -{12,18,-2}, -{12,18,-1}, -{12,18,0}, -{12,18,1}, -{12,18,2}, -{12,18,3}, -{12,18,4}, -{12,18,5}, -{12,18,6}, -{12,18,7}, -{12,18,8}, -{12,18,9}, -{12,18,10}, -{12,18,11}, -{12,18,12}, -{12,18,13}, -{12,18,14}, -{12,18,15}, -{12,18,16}, -{12,18,17}, -{12,18,18}, -{12,19,-39}, -{12,19,-38}, -{12,19,-37}, -{12,19,-36}, -{12,19,-35}, -{12,19,-34}, -{12,19,-33}, -{12,19,-32}, -{12,19,-31}, -{12,19,-30}, -{12,19,-29}, -{12,19,-28}, -{12,19,-27}, -{12,19,-26}, -{12,19,-25}, -{12,19,-24}, -{12,19,-23}, -{12,19,-22}, -{12,19,-21}, -{12,19,-20}, -{12,19,-19}, -{12,19,-18}, -{12,19,-17}, -{12,19,-16}, -{12,19,-15}, -{12,19,-14}, -{12,19,-13}, -{12,19,-12}, -{12,19,-11}, -{12,19,-10}, -{12,19,-9}, -{12,19,-8}, -{12,19,-7}, -{12,19,-6}, -{12,19,-5}, -{12,19,-4}, -{12,19,-3}, -{12,19,-2}, -{12,19,-1}, -{12,19,0}, -{12,19,1}, -{12,19,2}, -{12,19,3}, -{12,19,4}, -{12,19,5}, -{12,19,6}, -{12,19,7}, -{12,19,8}, -{12,19,9}, -{12,19,10}, -{12,19,11}, -{12,19,12}, -{12,19,13}, -{12,19,14}, -{12,19,15}, -{12,19,16}, -{12,19,17}, -{12,19,18}, -{12,20,-40}, -{12,20,-39}, -{12,20,-38}, -{12,20,-37}, -{12,20,-36}, -{12,20,-35}, -{12,20,-34}, -{12,20,-33}, -{12,20,-32}, -{12,20,-31}, -{12,20,-30}, -{12,20,-29}, -{12,20,-28}, -{12,20,-27}, -{12,20,-26}, -{12,20,-25}, -{12,20,-24}, -{12,20,-23}, -{12,20,-22}, -{12,20,-21}, -{12,20,-20}, -{12,20,-19}, -{12,20,-18}, -{12,20,-17}, -{12,20,-16}, -{12,20,-15}, -{12,20,-14}, -{12,20,-13}, -{12,20,-12}, -{12,20,-11}, -{12,20,-10}, -{12,20,-9}, -{12,20,-8}, -{12,20,-7}, -{12,20,-6}, -{12,20,-5}, -{12,20,-4}, -{12,20,-3}, -{12,20,-2}, -{12,20,-1}, -{12,20,0}, -{12,20,1}, -{12,20,2}, -{12,20,3}, -{12,20,4}, -{12,20,5}, -{12,20,6}, -{12,20,7}, -{12,20,8}, -{12,20,9}, -{12,20,10}, -{12,20,11}, -{12,20,12}, -{12,20,13}, -{12,20,14}, -{12,20,15}, -{12,20,16}, -{12,20,17}, -{12,20,18}, -{12,21,-41}, -{12,21,-40}, -{12,21,-39}, -{12,21,-38}, -{12,21,-37}, -{12,21,-36}, -{12,21,-35}, -{12,21,-34}, -{12,21,-33}, -{12,21,-32}, -{12,21,-31}, -{12,21,-30}, -{12,21,-29}, -{12,21,-28}, -{12,21,-27}, -{12,21,-26}, -{12,21,-25}, -{12,21,-24}, -{12,21,-23}, -{12,21,-22}, -{12,21,-21}, -{12,21,-20}, -{12,21,-19}, -{12,21,-18}, -{12,21,-17}, -{12,21,-16}, -{12,21,-15}, -{12,21,-14}, -{12,21,-13}, -{12,21,-12}, -{12,21,-11}, -{12,21,-10}, -{12,21,-9}, -{12,21,-8}, -{12,21,-7}, -{12,21,-6}, -{12,21,-5}, -{12,21,-4}, -{12,21,-3}, -{12,21,-2}, -{12,21,-1}, -{12,21,0}, -{12,21,1}, -{12,21,2}, -{12,21,3}, -{12,21,4}, -{12,21,5}, -{12,21,6}, -{12,21,7}, -{12,21,8}, -{12,21,9}, -{12,21,10}, -{12,21,11}, -{12,21,12}, -{12,21,13}, -{12,21,14}, -{12,21,15}, -{12,21,16}, -{12,21,17}, -{12,21,18}, -{12,22,-42}, -{12,22,-41}, -{12,22,-40}, -{12,22,-39}, -{12,22,-38}, -{12,22,-37}, -{12,22,-36}, -{12,22,-35}, -{12,22,-34}, -{12,22,-33}, -{12,22,-32}, -{12,22,-31}, -{12,22,-30}, -{12,22,-29}, -{12,22,-28}, -{12,22,-27}, -{12,22,-26}, -{12,22,-25}, -{12,22,-24}, -{12,22,-23}, -{12,22,-22}, -{12,22,-21}, -{12,22,-20}, -{12,22,-19}, -{12,22,-18}, -{12,22,-17}, -{12,22,-16}, -{12,22,-15}, -{12,22,-14}, -{12,22,-13}, -{12,22,-12}, -{12,22,-11}, -{12,22,-10}, -{12,22,-9}, -{12,22,-8}, -{12,22,-7}, -{12,22,-6}, -{12,22,-5}, -{12,22,-4}, -{12,22,-3}, -{12,22,-2}, -{12,22,-1}, -{12,22,0}, -{12,22,1}, -{12,22,2}, -{12,22,3}, -{12,22,4}, -{12,22,5}, -{12,22,6}, -{12,22,7}, -{12,22,8}, -{12,22,9}, -{12,22,10}, -{12,22,11}, -{12,22,12}, -{12,22,13}, -{12,22,14}, -{12,22,15}, -{12,22,16}, -{12,22,17}, -{12,22,18}, -{12,23,-43}, -{12,23,-42}, -{12,23,-41}, -{12,23,-40}, -{12,23,-39}, -{12,23,-38}, -{12,23,-37}, -{12,23,-36}, -{12,23,-35}, -{12,23,-34}, -{12,23,-33}, -{12,23,-32}, -{12,23,-31}, -{12,23,-30}, -{12,23,-29}, -{12,23,-28}, -{12,23,-27}, -{12,23,-26}, -{12,23,-25}, -{12,23,-24}, -{12,23,-23}, -{12,23,-22}, -{12,23,-21}, -{12,23,-20}, -{12,23,-19}, -{12,23,-18}, -{12,23,-17}, -{12,23,-16}, -{12,23,-15}, -{12,23,-14}, -{12,23,-13}, -{12,23,-12}, -{12,23,-11}, -{12,23,-10}, -{12,23,-9}, -{12,23,-8}, -{12,23,-7}, -{12,23,-6}, -{12,23,-5}, -{12,23,-4}, -{12,23,-3}, -{12,23,-2}, -{12,23,-1}, -{12,23,0}, -{12,23,1}, -{12,23,2}, -{12,23,3}, -{12,23,4}, -{12,23,5}, -{12,23,6}, -{12,23,7}, -{12,23,8}, -{12,23,9}, -{12,23,10}, -{12,23,11}, -{12,23,12}, -{12,23,13}, -{12,23,14}, -{12,23,15}, -{12,23,16}, -{12,23,17}, -{12,23,18}, -{12,24,-44}, -{12,24,-43}, -{12,24,-42}, -{12,24,-41}, -{12,24,-40}, -{12,24,-39}, -{12,24,-38}, -{12,24,-37}, -{12,24,-36}, -{12,24,-35}, -{12,24,-34}, -{12,24,-33}, -{12,24,-32}, -{12,24,-31}, -{12,24,-30}, -{12,24,-29}, -{12,24,-28}, -{12,24,-27}, -{12,24,-26}, -{12,24,-25}, -{12,24,-24}, -{12,24,-23}, -{12,24,-22}, -{12,24,-21}, -{12,24,-20}, -{12,24,-19}, -{12,24,-18}, -{12,24,-17}, -{12,24,-16}, -{12,24,-15}, -{12,24,-14}, -{12,24,-13}, -{12,24,-12}, -{12,24,-11}, -{12,24,-10}, -{12,24,-9}, -{12,24,-8}, -{12,24,-7}, -{12,24,-6}, -{12,24,-5}, -{12,24,-4}, -{12,24,-3}, -{12,24,-2}, -{12,24,-1}, -{12,24,0}, -{12,24,1}, -{12,24,2}, -{12,24,3}, -{12,24,4}, -{12,24,5}, -{12,24,6}, -{12,24,7}, -{12,24,8}, -{12,24,9}, -{12,24,10}, -{12,24,11}, -{12,24,12}, -{12,24,13}, -{12,24,14}, -{12,24,15}, -{12,24,16}, -{12,24,17}, -{12,24,18}, -{12,25,-44}, -{12,25,-43}, -{12,25,-42}, -{12,25,-41}, -{12,25,-40}, -{12,25,-39}, -{12,25,-38}, -{12,25,-37}, -{12,25,-36}, -{12,25,-35}, -{12,25,-34}, -{12,25,-33}, -{12,25,-32}, -{12,25,-31}, -{12,25,-30}, -{12,25,-29}, -{12,25,-28}, -{12,25,-27}, -{12,25,-26}, -{12,25,-25}, -{12,25,-24}, -{12,25,-23}, -{12,25,-22}, -{12,25,-21}, -{12,25,-20}, -{12,25,-19}, -{12,25,-18}, -{12,25,-17}, -{12,25,-16}, -{12,25,-15}, -{12,25,-14}, -{12,25,-13}, -{12,25,-12}, -{12,25,-11}, -{12,25,-10}, -{12,25,-9}, -{12,25,-8}, -{12,25,-7}, -{12,25,-6}, -{12,25,-5}, -{12,25,-4}, -{12,25,-3}, -{12,25,-2}, -{12,25,-1}, -{12,25,0}, -{12,25,1}, -{12,25,2}, -{12,25,3}, -{12,25,4}, -{12,25,5}, -{12,25,6}, -{12,25,7}, -{12,25,8}, -{12,25,9}, -{12,25,10}, -{12,25,11}, -{12,25,12}, -{12,25,13}, -{12,25,14}, -{12,25,15}, -{12,25,16}, -{12,25,17}, -{12,25,18}, -{12,26,-45}, -{12,26,-44}, -{12,26,-43}, -{12,26,-42}, -{12,26,-41}, -{12,26,-40}, -{12,26,-39}, -{12,26,-38}, -{12,26,-37}, -{12,26,-36}, -{12,26,-35}, -{12,26,-34}, -{12,26,-33}, -{12,26,-32}, -{12,26,-31}, -{12,26,-30}, -{12,26,-29}, -{12,26,-28}, -{12,26,-27}, -{12,26,-26}, -{12,26,-25}, -{12,26,-24}, -{12,26,-23}, -{12,26,-22}, -{12,26,-21}, -{12,26,-20}, -{12,26,-19}, -{12,26,-18}, -{12,26,-17}, -{12,26,-16}, -{12,26,-15}, -{12,26,-14}, -{12,26,-13}, -{12,26,-12}, -{12,26,-11}, -{12,26,-10}, -{12,26,-9}, -{12,26,-8}, -{12,26,-7}, -{12,26,-6}, -{12,26,-5}, -{12,26,-4}, -{12,26,-3}, -{12,26,-2}, -{12,26,-1}, -{12,26,0}, -{12,26,1}, -{12,26,2}, -{12,26,3}, -{12,26,4}, -{12,26,5}, -{12,26,6}, -{12,26,7}, -{12,26,8}, -{12,26,9}, -{12,26,10}, -{12,26,11}, -{12,26,12}, -{12,26,13}, -{12,26,14}, -{12,26,15}, -{12,26,16}, -{12,26,17}, -{12,26,18}, -{12,27,-46}, -{12,27,-45}, -{12,27,-44}, -{12,27,-43}, -{12,27,-42}, -{12,27,-41}, -{12,27,-40}, -{12,27,-39}, -{12,27,-38}, -{12,27,-37}, -{12,27,-36}, -{12,27,-35}, -{12,27,-34}, -{12,27,-33}, -{12,27,-32}, -{12,27,-31}, -{12,27,-30}, -{12,27,-29}, -{12,27,-28}, -{12,27,-27}, -{12,27,-26}, -{12,27,-25}, -{12,27,-24}, -{12,27,-23}, -{12,27,-22}, -{12,27,-21}, -{12,27,-20}, -{12,27,-19}, -{12,27,-18}, -{12,27,-17}, -{12,27,-16}, -{12,27,-15}, -{12,27,-14}, -{12,27,-13}, -{12,27,-12}, -{12,27,-11}, -{12,27,-10}, -{12,27,-9}, -{12,27,-8}, -{12,27,-7}, -{12,27,-6}, -{12,27,-5}, -{12,27,-4}, -{12,27,-3}, -{12,27,-2}, -{12,27,-1}, -{12,27,0}, -{12,27,1}, -{12,27,2}, -{12,27,3}, -{12,27,4}, -{12,27,5}, -{12,27,6}, -{12,27,7}, -{12,27,8}, -{12,27,9}, -{12,27,10}, -{12,27,11}, -{12,27,12}, -{12,27,13}, -{12,27,14}, -{12,27,15}, -{12,27,16}, -{12,27,17}, -{12,27,18}, -{12,28,-47}, -{12,28,-46}, -{12,28,-45}, -{12,28,-44}, -{12,28,-43}, -{12,28,-42}, -{12,28,-41}, -{12,28,-40}, -{12,28,-39}, -{12,28,-38}, -{12,28,-37}, -{12,28,-36}, -{12,28,-35}, -{12,28,-34}, -{12,28,-33}, -{12,28,-32}, -{12,28,-31}, -{12,28,-30}, -{12,28,-29}, -{12,28,-28}, -{12,28,-27}, -{12,28,-26}, -{12,28,-25}, -{12,28,-24}, -{12,28,-23}, -{12,28,-22}, -{12,28,-21}, -{12,28,-20}, -{12,28,-19}, -{12,28,-18}, -{12,28,-17}, -{12,28,-16}, -{12,28,-15}, -{12,28,-14}, -{12,28,-13}, -{12,28,-12}, -{12,28,-11}, -{12,28,-10}, -{12,28,-9}, -{12,28,-8}, -{12,28,-7}, -{12,28,-6}, -{12,28,-5}, -{12,28,-4}, -{12,28,-3}, -{12,28,-2}, -{12,28,-1}, -{12,28,0}, -{12,28,1}, -{12,28,2}, -{12,28,3}, -{12,28,4}, -{12,28,5}, -{12,28,6}, -{12,28,7}, -{12,28,8}, -{12,28,9}, -{12,28,10}, -{12,28,11}, -{12,28,12}, -{12,28,13}, -{12,28,14}, -{12,28,15}, -{12,28,16}, -{12,28,17}, -{12,28,18}, -{12,29,-48}, -{12,29,-47}, -{12,29,-46}, -{12,29,-45}, -{12,29,-44}, -{12,29,-43}, -{12,29,-42}, -{12,29,-41}, -{12,29,-40}, -{12,29,-39}, -{12,29,-38}, -{12,29,-37}, -{12,29,-36}, -{12,29,-35}, -{12,29,-34}, -{12,29,-33}, -{12,29,-32}, -{12,29,-31}, -{12,29,-30}, -{12,29,-29}, -{12,29,-28}, -{12,29,-27}, -{12,29,-26}, -{12,29,-25}, -{12,29,-24}, -{12,29,-23}, -{12,29,-22}, -{12,29,-21}, -{12,29,-20}, -{12,29,-19}, -{12,29,-18}, -{12,29,-17}, -{12,29,-16}, -{12,29,-15}, -{12,29,-14}, -{12,29,-13}, -{12,29,-12}, -{12,29,-11}, -{12,29,-10}, -{12,29,-9}, -{12,29,-8}, -{12,29,-7}, -{12,29,-6}, -{12,29,-5}, -{12,29,-4}, -{12,29,-3}, -{12,29,-2}, -{12,29,-1}, -{12,29,0}, -{12,29,1}, -{12,29,2}, -{12,29,3}, -{12,29,4}, -{12,29,5}, -{12,29,6}, -{12,29,7}, -{12,29,8}, -{12,29,9}, -{12,29,10}, -{12,29,11}, -{12,29,12}, -{12,29,13}, -{12,29,14}, -{12,29,15}, -{12,29,16}, -{12,29,17}, -{12,29,18}, -{12,30,-49}, -{12,30,-48}, -{12,30,-47}, -{12,30,-46}, -{12,30,-45}, -{12,30,-44}, -{12,30,-43}, -{12,30,-42}, -{12,30,-41}, -{12,30,-40}, -{12,30,-39}, -{12,30,-38}, -{12,30,-37}, -{12,30,-36}, -{12,30,-35}, -{12,30,-34}, -{12,30,-33}, -{12,30,-32}, -{12,30,-31}, -{12,30,-30}, -{12,30,-29}, -{12,30,-28}, -{12,30,-27}, -{12,30,-26}, -{12,30,-25}, -{12,30,-24}, -{12,30,-23}, -{12,30,-22}, -{12,30,-21}, -{12,30,-20}, -{12,30,-19}, -{12,30,-18}, -{12,30,-17}, -{12,30,-16}, -{12,30,-15}, -{12,30,-14}, -{12,30,-13}, -{12,30,-12}, -{12,30,-11}, -{12,30,-10}, -{12,30,-9}, -{12,30,-8}, -{12,30,-7}, -{12,30,-6}, -{12,30,-5}, -{12,30,-4}, -{12,30,-3}, -{12,30,-2}, -{12,30,-1}, -{12,30,0}, -{12,30,1}, -{12,30,2}, -{12,30,3}, -{12,30,4}, -{12,30,5}, -{12,30,6}, -{12,30,7}, -{12,30,8}, -{12,30,9}, -{12,30,10}, -{12,30,11}, -{12,30,12}, -{12,30,13}, -{12,30,14}, -{12,30,15}, -{12,30,16}, -{12,30,17}, -{12,30,18}, -{12,31,-50}, -{12,31,-49}, -{12,31,-48}, -{12,31,-47}, -{12,31,-46}, -{12,31,-45}, -{12,31,-44}, -{12,31,-43}, -{12,31,-42}, -{12,31,-41}, -{12,31,-40}, -{12,31,-39}, -{12,31,-38}, -{12,31,-37}, -{12,31,-36}, -{12,31,-35}, -{12,31,-34}, -{12,31,-33}, -{12,31,-32}, -{12,31,-31}, -{12,31,-30}, -{12,31,-29}, -{12,31,-28}, -{12,31,-27}, -{12,31,-26}, -{12,31,-25}, -{12,31,-24}, -{12,31,-23}, -{12,31,-22}, -{12,31,-21}, -{12,31,-20}, -{12,31,-19}, -{12,31,-18}, -{12,31,-17}, -{12,31,-16}, -{12,31,-15}, -{12,31,-14}, -{12,31,-13}, -{12,31,-12}, -{12,31,-11}, -{12,31,-10}, -{12,31,-9}, -{12,31,-8}, -{12,31,-7}, -{12,31,-6}, -{12,31,-5}, -{12,31,-4}, -{12,31,-3}, -{12,31,-2}, -{12,31,-1}, -{12,31,0}, -{12,31,1}, -{12,31,2}, -{12,31,3}, -{12,31,4}, -{12,31,5}, -{12,31,6}, -{12,31,7}, -{12,31,8}, -{12,31,9}, -{12,31,10}, -{12,31,11}, -{12,31,12}, -{12,31,13}, -{12,31,14}, -{12,31,15}, -{12,31,16}, -{12,31,17}, -{12,31,18}, -{12,32,-51}, -{12,32,-50}, -{12,32,-49}, -{12,32,-48}, -{12,32,-47}, -{12,32,-46}, -{12,32,-45}, -{12,32,-44}, -{12,32,-43}, -{12,32,-42}, -{12,32,-41}, -{12,32,-40}, -{12,32,-39}, -{12,32,-38}, -{12,32,-37}, -{12,32,-36}, -{12,32,-35}, -{12,32,-34}, -{12,32,-33}, -{12,32,-32}, -{12,32,-31}, -{12,32,-30}, -{12,32,-29}, -{12,32,-28}, -{12,32,-27}, -{12,32,-26}, -{12,32,-25}, -{12,32,-24}, -{12,32,-23}, -{12,32,-22}, -{12,32,-21}, -{12,32,-20}, -{12,32,-19}, -{12,32,-18}, -{12,32,-17}, -{12,32,-16}, -{12,32,-15}, -{12,32,-14}, -{12,32,-13}, -{12,32,-12}, -{12,32,-11}, -{12,32,-10}, -{12,32,-9}, -{12,32,-8}, -{12,32,-7}, -{12,32,-6}, -{12,32,-5}, -{12,32,-4}, -{12,32,-3}, -{12,32,-2}, -{12,32,-1}, -{12,32,0}, -{12,32,1}, -{12,32,2}, -{12,32,3}, -{12,32,4}, -{12,32,5}, -{12,32,6}, -{12,32,7}, -{12,32,8}, -{12,32,9}, -{12,32,10}, -{12,32,11}, -{12,32,12}, -{12,32,13}, -{12,32,14}, -{12,32,15}, -{12,32,16}, -{12,32,17}, -{12,32,18}, -{12,32,19}, -{12,33,-51}, -{12,33,-50}, -{12,33,-49}, -{12,33,-48}, -{12,33,-47}, -{12,33,-46}, -{12,33,-45}, -{12,33,-44}, -{12,33,-43}, -{12,33,-42}, -{12,33,-41}, -{12,33,-40}, -{12,33,-39}, -{12,33,-38}, -{12,33,-37}, -{12,33,-36}, -{12,33,-35}, -{12,33,-34}, -{12,33,-33}, -{12,33,-32}, -{12,33,-31}, -{12,33,-30}, -{12,33,-29}, -{12,33,-28}, -{12,33,-27}, -{12,33,-26}, -{12,33,-25}, -{12,33,-24}, -{12,33,-23}, -{12,33,-22}, -{12,33,-21}, -{12,33,-20}, -{12,33,-19}, -{12,33,-18}, -{12,33,-17}, -{12,33,-16}, -{12,33,-15}, -{12,33,-14}, -{12,33,-13}, -{12,33,-12}, -{12,33,-11}, -{12,33,-10}, -{12,33,-9}, -{12,33,-8}, -{12,33,-7}, -{12,33,-6}, -{12,33,-5}, -{12,33,-4}, -{12,33,-3}, -{12,33,-2}, -{12,33,-1}, -{12,33,0}, -{12,33,1}, -{12,33,2}, -{12,33,3}, -{12,33,4}, -{12,33,5}, -{12,33,6}, -{12,33,7}, -{12,33,8}, -{12,33,9}, -{12,33,10}, -{12,34,-52}, -{12,34,-51}, -{12,34,-50}, -{12,34,-49}, -{12,34,-48}, -{12,34,-47}, -{12,34,-46}, -{12,34,-45}, -{12,34,-44}, -{12,34,-43}, -{12,34,-42}, -{12,34,-41}, -{12,34,-40}, -{12,34,-39}, -{12,34,-38}, -{12,34,-37}, -{12,34,-36}, -{12,34,-35}, -{12,34,-34}, -{12,34,-33}, -{12,34,-32}, -{12,34,-31}, -{12,34,-30}, -{12,34,-29}, -{12,34,-28}, -{12,34,-27}, -{12,34,-26}, -{12,34,-25}, -{12,34,-24}, -{12,34,-23}, -{12,34,-22}, -{12,34,-21}, -{12,34,-20}, -{12,34,-19}, -{12,34,-18}, -{12,34,-17}, -{12,34,-16}, -{12,34,-15}, -{12,34,-14}, -{12,34,-13}, -{12,34,-12}, -{12,34,-11}, -{12,34,-10}, -{12,34,-9}, -{12,34,-8}, -{12,34,-7}, -{12,34,-6}, -{12,34,-5}, -{12,35,-53}, -{12,35,-52}, -{12,35,-51}, -{12,35,-50}, -{12,35,-49}, -{12,35,-48}, -{12,35,-47}, -{12,35,-46}, -{12,35,-45}, -{12,35,-44}, -{12,35,-43}, -{12,35,-42}, -{12,35,-41}, -{12,35,-40}, -{12,35,-39}, -{12,35,-38}, -{12,35,-37}, -{12,35,-36}, -{12,35,-35}, -{12,35,-34}, -{12,35,-33}, -{12,35,-32}, -{12,35,-31}, -{12,35,-30}, -{12,35,-29}, -{12,35,-28}, -{12,35,-27}, -{12,35,-26}, -{12,35,-25}, -{12,35,-24}, -{12,35,-23}, -{12,35,-22}, -{12,35,-21}, -{12,35,-20}, -{12,35,-19}, -{12,35,-18}, -{12,35,-17}, -{12,35,-16}, -{12,35,-15}, -{12,35,-14}, -{12,36,-54}, -{12,36,-53}, -{12,36,-52}, -{12,36,-51}, -{12,36,-50}, -{12,36,-49}, -{12,36,-48}, -{12,36,-47}, -{12,36,-46}, -{12,36,-45}, -{12,36,-44}, -{12,36,-43}, -{12,36,-42}, -{12,36,-41}, -{12,36,-40}, -{12,36,-39}, -{12,36,-38}, -{12,36,-37}, -{12,36,-36}, -{12,36,-35}, -{12,36,-34}, -{12,36,-33}, -{12,36,-32}, -{12,36,-31}, -{12,36,-30}, -{12,36,-29}, -{12,36,-28}, -{12,36,-27}, -{12,36,-26}, -{12,36,-25}, -{12,36,-24}, -{12,36,-23}, -{12,36,-22}, -{12,37,-55}, -{12,37,-54}, -{12,37,-53}, -{12,37,-52}, -{12,37,-51}, -{12,37,-50}, -{12,37,-49}, -{12,37,-48}, -{12,37,-47}, -{12,37,-46}, -{12,37,-45}, -{12,37,-44}, -{12,37,-43}, -{12,37,-42}, -{12,37,-41}, -{12,37,-40}, -{12,37,-39}, -{12,37,-38}, -{12,37,-37}, -{12,37,-36}, -{12,37,-35}, -{12,37,-34}, -{12,37,-33}, -{12,37,-32}, -{12,37,-31}, -{12,37,-30}, -{12,37,-29}, -{12,37,-28}, -{12,38,-56}, -{12,38,-55}, -{12,38,-54}, -{12,38,-53}, -{12,38,-52}, -{12,38,-51}, -{12,38,-50}, -{12,38,-49}, -{12,38,-48}, -{12,38,-47}, -{12,38,-46}, -{12,38,-45}, -{12,38,-44}, -{12,38,-43}, -{12,38,-42}, -{12,38,-41}, -{12,38,-40}, -{12,38,-39}, -{12,38,-38}, -{12,38,-37}, -{12,38,-36}, -{12,38,-35}, -{12,38,-34}, -{12,38,-33}, -{12,39,-56}, -{12,39,-55}, -{12,39,-54}, -{12,39,-53}, -{12,39,-52}, -{12,39,-51}, -{12,39,-50}, -{12,39,-49}, -{12,39,-48}, -{12,39,-47}, -{12,39,-46}, -{12,39,-45}, -{12,39,-44}, -{12,39,-43}, -{12,39,-42}, -{12,39,-41}, -{12,39,-40}, -{12,39,-39}, -{12,39,-38}, -{12,40,-57}, -{12,40,-56}, -{12,40,-55}, -{12,40,-54}, -{12,40,-53}, -{12,40,-52}, -{12,40,-51}, -{12,40,-50}, -{12,40,-49}, -{12,40,-48}, -{12,40,-47}, -{12,40,-46}, -{12,40,-45}, -{12,40,-44}, -{12,40,-43}, -{12,40,-42}, -{12,41,-58}, -{12,41,-57}, -{12,41,-56}, -{12,41,-55}, -{12,41,-54}, -{12,41,-53}, -{12,41,-52}, -{12,41,-51}, -{12,41,-50}, -{12,41,-49}, -{12,41,-48}, -{12,41,-47}, -{12,41,-46}, -{12,42,-59}, -{12,42,-58}, -{12,42,-57}, -{12,42,-56}, -{12,42,-55}, -{12,42,-54}, -{12,42,-53}, -{12,42,-52}, -{12,42,-51}, -{12,42,-50}, -{12,43,-60}, -{12,43,-59}, -{12,43,-58}, -{12,43,-57}, -{12,43,-56}, -{12,43,-55}, -{12,43,-54}, -{12,43,-53}, -{12,44,-61}, -{12,44,-60}, -{12,44,-59}, -{12,44,-58}, -{12,44,-57}, -{12,45,-61}, -{12,45,-60}, -{13,-23,16}, -{13,-23,17}, -{13,-23,18}, -{13,-22,14}, -{13,-22,15}, -{13,-22,16}, -{13,-22,17}, -{13,-22,18}, -{13,-21,12}, -{13,-21,13}, -{13,-21,14}, -{13,-21,15}, -{13,-21,16}, -{13,-21,17}, -{13,-21,18}, -{13,-20,10}, -{13,-20,11}, -{13,-20,12}, -{13,-20,13}, -{13,-20,14}, -{13,-20,15}, -{13,-20,16}, -{13,-20,17}, -{13,-20,18}, -{13,-19,7}, -{13,-19,8}, -{13,-19,9}, -{13,-19,10}, -{13,-19,11}, -{13,-19,12}, -{13,-19,13}, -{13,-19,14}, -{13,-19,15}, -{13,-19,16}, -{13,-19,17}, -{13,-19,18}, -{13,-18,5}, -{13,-18,6}, -{13,-18,7}, -{13,-18,8}, -{13,-18,9}, -{13,-18,10}, -{13,-18,11}, -{13,-18,12}, -{13,-18,13}, -{13,-18,14}, -{13,-18,15}, -{13,-18,16}, -{13,-18,17}, -{13,-18,18}, -{13,-17,3}, -{13,-17,4}, -{13,-17,5}, -{13,-17,6}, -{13,-17,7}, -{13,-17,8}, -{13,-17,9}, -{13,-17,10}, -{13,-17,11}, -{13,-17,12}, -{13,-17,13}, -{13,-17,14}, -{13,-17,15}, -{13,-17,16}, -{13,-17,17}, -{13,-17,18}, -{13,-16,1}, -{13,-16,2}, -{13,-16,3}, -{13,-16,4}, -{13,-16,5}, -{13,-16,6}, -{13,-16,7}, -{13,-16,8}, -{13,-16,9}, -{13,-16,10}, -{13,-16,11}, -{13,-16,12}, -{13,-16,13}, -{13,-16,14}, -{13,-16,15}, -{13,-16,16}, -{13,-16,17}, -{13,-16,18}, -{13,-15,0}, -{13,-15,1}, -{13,-15,2}, -{13,-15,3}, -{13,-15,4}, -{13,-15,5}, -{13,-15,6}, -{13,-15,7}, -{13,-15,8}, -{13,-15,9}, -{13,-15,10}, -{13,-15,11}, -{13,-15,12}, -{13,-15,13}, -{13,-15,14}, -{13,-15,15}, -{13,-15,16}, -{13,-15,17}, -{13,-15,18}, -{13,-15,19}, -{13,-14,-2}, -{13,-14,-1}, -{13,-14,0}, -{13,-14,1}, -{13,-14,2}, -{13,-14,3}, -{13,-14,4}, -{13,-14,5}, -{13,-14,6}, -{13,-14,7}, -{13,-14,8}, -{13,-14,9}, -{13,-14,10}, -{13,-14,11}, -{13,-14,12}, -{13,-14,13}, -{13,-14,14}, -{13,-14,15}, -{13,-14,16}, -{13,-14,17}, -{13,-14,18}, -{13,-14,19}, -{13,-13,-4}, -{13,-13,-3}, -{13,-13,-2}, -{13,-13,-1}, -{13,-13,0}, -{13,-13,1}, -{13,-13,2}, -{13,-13,3}, -{13,-13,4}, -{13,-13,5}, -{13,-13,6}, -{13,-13,7}, -{13,-13,8}, -{13,-13,9}, -{13,-13,10}, -{13,-13,11}, -{13,-13,12}, -{13,-13,13}, -{13,-13,14}, -{13,-13,15}, -{13,-13,16}, -{13,-13,17}, -{13,-13,18}, -{13,-13,19}, -{13,-12,-5}, -{13,-12,-4}, -{13,-12,-3}, -{13,-12,-2}, -{13,-12,-1}, -{13,-12,0}, -{13,-12,1}, -{13,-12,2}, -{13,-12,3}, -{13,-12,4}, -{13,-12,5}, -{13,-12,6}, -{13,-12,7}, -{13,-12,8}, -{13,-12,9}, -{13,-12,10}, -{13,-12,11}, -{13,-12,12}, -{13,-12,13}, -{13,-12,14}, -{13,-12,15}, -{13,-12,16}, -{13,-12,17}, -{13,-12,18}, -{13,-12,19}, -{13,-11,-7}, -{13,-11,-6}, -{13,-11,-5}, -{13,-11,-4}, -{13,-11,-3}, -{13,-11,-2}, -{13,-11,-1}, -{13,-11,0}, -{13,-11,1}, -{13,-11,2}, -{13,-11,3}, -{13,-11,4}, -{13,-11,5}, -{13,-11,6}, -{13,-11,7}, -{13,-11,8}, -{13,-11,9}, -{13,-11,10}, -{13,-11,11}, -{13,-11,12}, -{13,-11,13}, -{13,-11,14}, -{13,-11,15}, -{13,-11,16}, -{13,-11,17}, -{13,-11,18}, -{13,-11,19}, -{13,-10,-8}, -{13,-10,-7}, -{13,-10,-6}, -{13,-10,-5}, -{13,-10,-4}, -{13,-10,-3}, -{13,-10,-2}, -{13,-10,-1}, -{13,-10,0}, -{13,-10,1}, -{13,-10,2}, -{13,-10,3}, -{13,-10,4}, -{13,-10,5}, -{13,-10,6}, -{13,-10,7}, -{13,-10,8}, -{13,-10,9}, -{13,-10,10}, -{13,-10,11}, -{13,-10,12}, -{13,-10,13}, -{13,-10,14}, -{13,-10,15}, -{13,-10,16}, -{13,-10,17}, -{13,-10,18}, -{13,-10,19}, -{13,-9,-9}, -{13,-9,-8}, -{13,-9,-7}, -{13,-9,-6}, -{13,-9,-5}, -{13,-9,-4}, -{13,-9,-3}, -{13,-9,-2}, -{13,-9,-1}, -{13,-9,0}, -{13,-9,1}, -{13,-9,2}, -{13,-9,3}, -{13,-9,4}, -{13,-9,5}, -{13,-9,6}, -{13,-9,7}, -{13,-9,8}, -{13,-9,9}, -{13,-9,10}, -{13,-9,11}, -{13,-9,12}, -{13,-9,13}, -{13,-9,14}, -{13,-9,15}, -{13,-9,16}, -{13,-9,17}, -{13,-9,18}, -{13,-9,19}, -{13,-8,-11}, -{13,-8,-10}, -{13,-8,-9}, -{13,-8,-8}, -{13,-8,-7}, -{13,-8,-6}, -{13,-8,-5}, -{13,-8,-4}, -{13,-8,-3}, -{13,-8,-2}, -{13,-8,-1}, -{13,-8,0}, -{13,-8,1}, -{13,-8,2}, -{13,-8,3}, -{13,-8,4}, -{13,-8,5}, -{13,-8,6}, -{13,-8,7}, -{13,-8,8}, -{13,-8,9}, -{13,-8,10}, -{13,-8,11}, -{13,-8,12}, -{13,-8,13}, -{13,-8,14}, -{13,-8,15}, -{13,-8,16}, -{13,-8,17}, -{13,-8,18}, -{13,-8,19}, -{13,-7,-12}, -{13,-7,-11}, -{13,-7,-10}, -{13,-7,-9}, -{13,-7,-8}, -{13,-7,-7}, -{13,-7,-6}, -{13,-7,-5}, -{13,-7,-4}, -{13,-7,-3}, -{13,-7,-2}, -{13,-7,-1}, -{13,-7,0}, -{13,-7,1}, -{13,-7,2}, -{13,-7,3}, -{13,-7,4}, -{13,-7,5}, -{13,-7,6}, -{13,-7,7}, -{13,-7,8}, -{13,-7,9}, -{13,-7,10}, -{13,-7,11}, -{13,-7,12}, -{13,-7,13}, -{13,-7,14}, -{13,-7,15}, -{13,-7,16}, -{13,-7,17}, -{13,-7,18}, -{13,-7,19}, -{13,-6,-13}, -{13,-6,-12}, -{13,-6,-11}, -{13,-6,-10}, -{13,-6,-9}, -{13,-6,-8}, -{13,-6,-7}, -{13,-6,-6}, -{13,-6,-5}, -{13,-6,-4}, -{13,-6,-3}, -{13,-6,-2}, -{13,-6,-1}, -{13,-6,0}, -{13,-6,1}, -{13,-6,2}, -{13,-6,3}, -{13,-6,4}, -{13,-6,5}, -{13,-6,6}, -{13,-6,7}, -{13,-6,8}, -{13,-6,9}, -{13,-6,10}, -{13,-6,11}, -{13,-6,12}, -{13,-6,13}, -{13,-6,14}, -{13,-6,15}, -{13,-6,16}, -{13,-6,17}, -{13,-6,18}, -{13,-6,19}, -{13,-5,-15}, -{13,-5,-14}, -{13,-5,-13}, -{13,-5,-12}, -{13,-5,-11}, -{13,-5,-10}, -{13,-5,-9}, -{13,-5,-8}, -{13,-5,-7}, -{13,-5,-6}, -{13,-5,-5}, -{13,-5,-4}, -{13,-5,-3}, -{13,-5,-2}, -{13,-5,-1}, -{13,-5,0}, -{13,-5,1}, -{13,-5,2}, -{13,-5,3}, -{13,-5,4}, -{13,-5,5}, -{13,-5,6}, -{13,-5,7}, -{13,-5,8}, -{13,-5,9}, -{13,-5,10}, -{13,-5,11}, -{13,-5,12}, -{13,-5,13}, -{13,-5,14}, -{13,-5,15}, -{13,-5,16}, -{13,-5,17}, -{13,-5,18}, -{13,-5,19}, -{13,-4,-16}, -{13,-4,-15}, -{13,-4,-14}, -{13,-4,-13}, -{13,-4,-12}, -{13,-4,-11}, -{13,-4,-10}, -{13,-4,-9}, -{13,-4,-8}, -{13,-4,-7}, -{13,-4,-6}, -{13,-4,-5}, -{13,-4,-4}, -{13,-4,-3}, -{13,-4,-2}, -{13,-4,-1}, -{13,-4,0}, -{13,-4,1}, -{13,-4,2}, -{13,-4,3}, -{13,-4,4}, -{13,-4,5}, -{13,-4,6}, -{13,-4,7}, -{13,-4,8}, -{13,-4,9}, -{13,-4,10}, -{13,-4,11}, -{13,-4,12}, -{13,-4,13}, -{13,-4,14}, -{13,-4,15}, -{13,-4,16}, -{13,-4,17}, -{13,-4,18}, -{13,-4,19}, -{13,-3,-17}, -{13,-3,-16}, -{13,-3,-15}, -{13,-3,-14}, -{13,-3,-13}, -{13,-3,-12}, -{13,-3,-11}, -{13,-3,-10}, -{13,-3,-9}, -{13,-3,-8}, -{13,-3,-7}, -{13,-3,-6}, -{13,-3,-5}, -{13,-3,-4}, -{13,-3,-3}, -{13,-3,-2}, -{13,-3,-1}, -{13,-3,0}, -{13,-3,1}, -{13,-3,2}, -{13,-3,3}, -{13,-3,4}, -{13,-3,5}, -{13,-3,6}, -{13,-3,7}, -{13,-3,8}, -{13,-3,9}, -{13,-3,10}, -{13,-3,11}, -{13,-3,12}, -{13,-3,13}, -{13,-3,14}, -{13,-3,15}, -{13,-3,16}, -{13,-3,17}, -{13,-3,18}, -{13,-3,19}, -{13,-2,-18}, -{13,-2,-17}, -{13,-2,-16}, -{13,-2,-15}, -{13,-2,-14}, -{13,-2,-13}, -{13,-2,-12}, -{13,-2,-11}, -{13,-2,-10}, -{13,-2,-9}, -{13,-2,-8}, -{13,-2,-7}, -{13,-2,-6}, -{13,-2,-5}, -{13,-2,-4}, -{13,-2,-3}, -{13,-2,-2}, -{13,-2,-1}, -{13,-2,0}, -{13,-2,1}, -{13,-2,2}, -{13,-2,3}, -{13,-2,4}, -{13,-2,5}, -{13,-2,6}, -{13,-2,7}, -{13,-2,8}, -{13,-2,9}, -{13,-2,10}, -{13,-2,11}, -{13,-2,12}, -{13,-2,13}, -{13,-2,14}, -{13,-2,15}, -{13,-2,16}, -{13,-2,17}, -{13,-2,18}, -{13,-2,19}, -{13,-1,-19}, -{13,-1,-18}, -{13,-1,-17}, -{13,-1,-16}, -{13,-1,-15}, -{13,-1,-14}, -{13,-1,-13}, -{13,-1,-12}, -{13,-1,-11}, -{13,-1,-10}, -{13,-1,-9}, -{13,-1,-8}, -{13,-1,-7}, -{13,-1,-6}, -{13,-1,-5}, -{13,-1,-4}, -{13,-1,-3}, -{13,-1,-2}, -{13,-1,-1}, -{13,-1,0}, -{13,-1,1}, -{13,-1,2}, -{13,-1,3}, -{13,-1,4}, -{13,-1,5}, -{13,-1,6}, -{13,-1,7}, -{13,-1,8}, -{13,-1,9}, -{13,-1,10}, -{13,-1,11}, -{13,-1,12}, -{13,-1,13}, -{13,-1,14}, -{13,-1,15}, -{13,-1,16}, -{13,-1,17}, -{13,-1,18}, -{13,-1,19}, -{13,0,-21}, -{13,0,-20}, -{13,0,-19}, -{13,0,-18}, -{13,0,-17}, -{13,0,-16}, -{13,0,-15}, -{13,0,-14}, -{13,0,-13}, -{13,0,-12}, -{13,0,-11}, -{13,0,-10}, -{13,0,-9}, -{13,0,-8}, -{13,0,-7}, -{13,0,-6}, -{13,0,-5}, -{13,0,-4}, -{13,0,-3}, -{13,0,-2}, -{13,0,-1}, -{13,0,0}, -{13,0,1}, -{13,0,2}, -{13,0,3}, -{13,0,4}, -{13,0,5}, -{13,0,6}, -{13,0,7}, -{13,0,8}, -{13,0,9}, -{13,0,10}, -{13,0,11}, -{13,0,12}, -{13,0,13}, -{13,0,14}, -{13,0,15}, -{13,0,16}, -{13,0,17}, -{13,0,18}, -{13,0,19}, -{13,1,-22}, -{13,1,-21}, -{13,1,-20}, -{13,1,-19}, -{13,1,-18}, -{13,1,-17}, -{13,1,-16}, -{13,1,-15}, -{13,1,-14}, -{13,1,-13}, -{13,1,-12}, -{13,1,-11}, -{13,1,-10}, -{13,1,-9}, -{13,1,-8}, -{13,1,-7}, -{13,1,-6}, -{13,1,-5}, -{13,1,-4}, -{13,1,-3}, -{13,1,-2}, -{13,1,-1}, -{13,1,0}, -{13,1,1}, -{13,1,2}, -{13,1,3}, -{13,1,4}, -{13,1,5}, -{13,1,6}, -{13,1,7}, -{13,1,8}, -{13,1,9}, -{13,1,10}, -{13,1,11}, -{13,1,12}, -{13,1,13}, -{13,1,14}, -{13,1,15}, -{13,1,16}, -{13,1,17}, -{13,1,18}, -{13,1,19}, -{13,2,-23}, -{13,2,-22}, -{13,2,-21}, -{13,2,-20}, -{13,2,-19}, -{13,2,-18}, -{13,2,-17}, -{13,2,-16}, -{13,2,-15}, -{13,2,-14}, -{13,2,-13}, -{13,2,-12}, -{13,2,-11}, -{13,2,-10}, -{13,2,-9}, -{13,2,-8}, -{13,2,-7}, -{13,2,-6}, -{13,2,-5}, -{13,2,-4}, -{13,2,-3}, -{13,2,-2}, -{13,2,-1}, -{13,2,0}, -{13,2,1}, -{13,2,2}, -{13,2,3}, -{13,2,4}, -{13,2,5}, -{13,2,6}, -{13,2,7}, -{13,2,8}, -{13,2,9}, -{13,2,10}, -{13,2,11}, -{13,2,12}, -{13,2,13}, -{13,2,14}, -{13,2,15}, -{13,2,16}, -{13,2,17}, -{13,2,18}, -{13,2,19}, -{13,3,-24}, -{13,3,-23}, -{13,3,-22}, -{13,3,-21}, -{13,3,-20}, -{13,3,-19}, -{13,3,-18}, -{13,3,-17}, -{13,3,-16}, -{13,3,-15}, -{13,3,-14}, -{13,3,-13}, -{13,3,-12}, -{13,3,-11}, -{13,3,-10}, -{13,3,-9}, -{13,3,-8}, -{13,3,-7}, -{13,3,-6}, -{13,3,-5}, -{13,3,-4}, -{13,3,-3}, -{13,3,-2}, -{13,3,-1}, -{13,3,0}, -{13,3,1}, -{13,3,2}, -{13,3,3}, -{13,3,4}, -{13,3,5}, -{13,3,6}, -{13,3,7}, -{13,3,8}, -{13,3,9}, -{13,3,10}, -{13,3,11}, -{13,3,12}, -{13,3,13}, -{13,3,14}, -{13,3,15}, -{13,3,16}, -{13,3,17}, -{13,3,18}, -{13,3,19}, -{13,4,-25}, -{13,4,-24}, -{13,4,-23}, -{13,4,-22}, -{13,4,-21}, -{13,4,-20}, -{13,4,-19}, -{13,4,-18}, -{13,4,-17}, -{13,4,-16}, -{13,4,-15}, -{13,4,-14}, -{13,4,-13}, -{13,4,-12}, -{13,4,-11}, -{13,4,-10}, -{13,4,-9}, -{13,4,-8}, -{13,4,-7}, -{13,4,-6}, -{13,4,-5}, -{13,4,-4}, -{13,4,-3}, -{13,4,-2}, -{13,4,-1}, -{13,4,0}, -{13,4,1}, -{13,4,2}, -{13,4,3}, -{13,4,4}, -{13,4,5}, -{13,4,6}, -{13,4,7}, -{13,4,8}, -{13,4,9}, -{13,4,10}, -{13,4,11}, -{13,4,12}, -{13,4,13}, -{13,4,14}, -{13,4,15}, -{13,4,16}, -{13,4,17}, -{13,4,18}, -{13,4,19}, -{13,5,-26}, -{13,5,-25}, -{13,5,-24}, -{13,5,-23}, -{13,5,-22}, -{13,5,-21}, -{13,5,-20}, -{13,5,-19}, -{13,5,-18}, -{13,5,-17}, -{13,5,-16}, -{13,5,-15}, -{13,5,-14}, -{13,5,-13}, -{13,5,-12}, -{13,5,-11}, -{13,5,-10}, -{13,5,-9}, -{13,5,-8}, -{13,5,-7}, -{13,5,-6}, -{13,5,-5}, -{13,5,-4}, -{13,5,-3}, -{13,5,-2}, -{13,5,-1}, -{13,5,0}, -{13,5,1}, -{13,5,2}, -{13,5,3}, -{13,5,4}, -{13,5,5}, -{13,5,6}, -{13,5,7}, -{13,5,8}, -{13,5,9}, -{13,5,10}, -{13,5,11}, -{13,5,12}, -{13,5,13}, -{13,5,14}, -{13,5,15}, -{13,5,16}, -{13,5,17}, -{13,5,18}, -{13,5,19}, -{13,6,-27}, -{13,6,-26}, -{13,6,-25}, -{13,6,-24}, -{13,6,-23}, -{13,6,-22}, -{13,6,-21}, -{13,6,-20}, -{13,6,-19}, -{13,6,-18}, -{13,6,-17}, -{13,6,-16}, -{13,6,-15}, -{13,6,-14}, -{13,6,-13}, -{13,6,-12}, -{13,6,-11}, -{13,6,-10}, -{13,6,-9}, -{13,6,-8}, -{13,6,-7}, -{13,6,-6}, -{13,6,-5}, -{13,6,-4}, -{13,6,-3}, -{13,6,-2}, -{13,6,-1}, -{13,6,0}, -{13,6,1}, -{13,6,2}, -{13,6,3}, -{13,6,4}, -{13,6,5}, -{13,6,6}, -{13,6,7}, -{13,6,8}, -{13,6,9}, -{13,6,10}, -{13,6,11}, -{13,6,12}, -{13,6,13}, -{13,6,14}, -{13,6,15}, -{13,6,16}, -{13,6,17}, -{13,6,18}, -{13,6,19}, -{13,7,-28}, -{13,7,-27}, -{13,7,-26}, -{13,7,-25}, -{13,7,-24}, -{13,7,-23}, -{13,7,-22}, -{13,7,-21}, -{13,7,-20}, -{13,7,-19}, -{13,7,-18}, -{13,7,-17}, -{13,7,-16}, -{13,7,-15}, -{13,7,-14}, -{13,7,-13}, -{13,7,-12}, -{13,7,-11}, -{13,7,-10}, -{13,7,-9}, -{13,7,-8}, -{13,7,-7}, -{13,7,-6}, -{13,7,-5}, -{13,7,-4}, -{13,7,-3}, -{13,7,-2}, -{13,7,-1}, -{13,7,0}, -{13,7,1}, -{13,7,2}, -{13,7,3}, -{13,7,4}, -{13,7,5}, -{13,7,6}, -{13,7,7}, -{13,7,8}, -{13,7,9}, -{13,7,10}, -{13,7,11}, -{13,7,12}, -{13,7,13}, -{13,7,14}, -{13,7,15}, -{13,7,16}, -{13,7,17}, -{13,7,18}, -{13,7,19}, -{13,8,-29}, -{13,8,-28}, -{13,8,-27}, -{13,8,-26}, -{13,8,-25}, -{13,8,-24}, -{13,8,-23}, -{13,8,-22}, -{13,8,-21}, -{13,8,-20}, -{13,8,-19}, -{13,8,-18}, -{13,8,-17}, -{13,8,-16}, -{13,8,-15}, -{13,8,-14}, -{13,8,-13}, -{13,8,-12}, -{13,8,-11}, -{13,8,-10}, -{13,8,-9}, -{13,8,-8}, -{13,8,-7}, -{13,8,-6}, -{13,8,-5}, -{13,8,-4}, -{13,8,-3}, -{13,8,-2}, -{13,8,-1}, -{13,8,0}, -{13,8,1}, -{13,8,2}, -{13,8,3}, -{13,8,4}, -{13,8,5}, -{13,8,6}, -{13,8,7}, -{13,8,8}, -{13,8,9}, -{13,8,10}, -{13,8,11}, -{13,8,12}, -{13,8,13}, -{13,8,14}, -{13,8,15}, -{13,8,16}, -{13,8,17}, -{13,8,18}, -{13,8,19}, -{13,9,-30}, -{13,9,-29}, -{13,9,-28}, -{13,9,-27}, -{13,9,-26}, -{13,9,-25}, -{13,9,-24}, -{13,9,-23}, -{13,9,-22}, -{13,9,-21}, -{13,9,-20}, -{13,9,-19}, -{13,9,-18}, -{13,9,-17}, -{13,9,-16}, -{13,9,-15}, -{13,9,-14}, -{13,9,-13}, -{13,9,-12}, -{13,9,-11}, -{13,9,-10}, -{13,9,-9}, -{13,9,-8}, -{13,9,-7}, -{13,9,-6}, -{13,9,-5}, -{13,9,-4}, -{13,9,-3}, -{13,9,-2}, -{13,9,-1}, -{13,9,0}, -{13,9,1}, -{13,9,2}, -{13,9,3}, -{13,9,4}, -{13,9,5}, -{13,9,6}, -{13,9,7}, -{13,9,8}, -{13,9,9}, -{13,9,10}, -{13,9,11}, -{13,9,12}, -{13,9,13}, -{13,9,14}, -{13,9,15}, -{13,9,16}, -{13,9,17}, -{13,9,18}, -{13,9,19}, -{13,10,-31}, -{13,10,-30}, -{13,10,-29}, -{13,10,-28}, -{13,10,-27}, -{13,10,-26}, -{13,10,-25}, -{13,10,-24}, -{13,10,-23}, -{13,10,-22}, -{13,10,-21}, -{13,10,-20}, -{13,10,-19}, -{13,10,-18}, -{13,10,-17}, -{13,10,-16}, -{13,10,-15}, -{13,10,-14}, -{13,10,-13}, -{13,10,-12}, -{13,10,-11}, -{13,10,-10}, -{13,10,-9}, -{13,10,-8}, -{13,10,-7}, -{13,10,-6}, -{13,10,-5}, -{13,10,-4}, -{13,10,-3}, -{13,10,-2}, -{13,10,-1}, -{13,10,0}, -{13,10,1}, -{13,10,2}, -{13,10,3}, -{13,10,4}, -{13,10,5}, -{13,10,6}, -{13,10,7}, -{13,10,8}, -{13,10,9}, -{13,10,10}, -{13,10,11}, -{13,10,12}, -{13,10,13}, -{13,10,14}, -{13,10,15}, -{13,10,16}, -{13,10,17}, -{13,10,18}, -{13,10,19}, -{13,11,-32}, -{13,11,-31}, -{13,11,-30}, -{13,11,-29}, -{13,11,-28}, -{13,11,-27}, -{13,11,-26}, -{13,11,-25}, -{13,11,-24}, -{13,11,-23}, -{13,11,-22}, -{13,11,-21}, -{13,11,-20}, -{13,11,-19}, -{13,11,-18}, -{13,11,-17}, -{13,11,-16}, -{13,11,-15}, -{13,11,-14}, -{13,11,-13}, -{13,11,-12}, -{13,11,-11}, -{13,11,-10}, -{13,11,-9}, -{13,11,-8}, -{13,11,-7}, -{13,11,-6}, -{13,11,-5}, -{13,11,-4}, -{13,11,-3}, -{13,11,-2}, -{13,11,-1}, -{13,11,0}, -{13,11,1}, -{13,11,2}, -{13,11,3}, -{13,11,4}, -{13,11,5}, -{13,11,6}, -{13,11,7}, -{13,11,8}, -{13,11,9}, -{13,11,10}, -{13,11,11}, -{13,11,12}, -{13,11,13}, -{13,11,14}, -{13,11,15}, -{13,11,16}, -{13,11,17}, -{13,11,18}, -{13,11,19}, -{13,12,-33}, -{13,12,-32}, -{13,12,-31}, -{13,12,-30}, -{13,12,-29}, -{13,12,-28}, -{13,12,-27}, -{13,12,-26}, -{13,12,-25}, -{13,12,-24}, -{13,12,-23}, -{13,12,-22}, -{13,12,-21}, -{13,12,-20}, -{13,12,-19}, -{13,12,-18}, -{13,12,-17}, -{13,12,-16}, -{13,12,-15}, -{13,12,-14}, -{13,12,-13}, -{13,12,-12}, -{13,12,-11}, -{13,12,-10}, -{13,12,-9}, -{13,12,-8}, -{13,12,-7}, -{13,12,-6}, -{13,12,-5}, -{13,12,-4}, -{13,12,-3}, -{13,12,-2}, -{13,12,-1}, -{13,12,0}, -{13,12,1}, -{13,12,2}, -{13,12,3}, -{13,12,4}, -{13,12,5}, -{13,12,6}, -{13,12,7}, -{13,12,8}, -{13,12,9}, -{13,12,10}, -{13,12,11}, -{13,12,12}, -{13,12,13}, -{13,12,14}, -{13,12,15}, -{13,12,16}, -{13,12,17}, -{13,12,18}, -{13,12,19}, -{13,13,-34}, -{13,13,-33}, -{13,13,-32}, -{13,13,-31}, -{13,13,-30}, -{13,13,-29}, -{13,13,-28}, -{13,13,-27}, -{13,13,-26}, -{13,13,-25}, -{13,13,-24}, -{13,13,-23}, -{13,13,-22}, -{13,13,-21}, -{13,13,-20}, -{13,13,-19}, -{13,13,-18}, -{13,13,-17}, -{13,13,-16}, -{13,13,-15}, -{13,13,-14}, -{13,13,-13}, -{13,13,-12}, -{13,13,-11}, -{13,13,-10}, -{13,13,-9}, -{13,13,-8}, -{13,13,-7}, -{13,13,-6}, -{13,13,-5}, -{13,13,-4}, -{13,13,-3}, -{13,13,-2}, -{13,13,-1}, -{13,13,0}, -{13,13,1}, -{13,13,2}, -{13,13,3}, -{13,13,4}, -{13,13,5}, -{13,13,6}, -{13,13,7}, -{13,13,8}, -{13,13,9}, -{13,13,10}, -{13,13,11}, -{13,13,12}, -{13,13,13}, -{13,13,14}, -{13,13,15}, -{13,13,16}, -{13,13,17}, -{13,13,18}, -{13,13,19}, -{13,14,-35}, -{13,14,-34}, -{13,14,-33}, -{13,14,-32}, -{13,14,-31}, -{13,14,-30}, -{13,14,-29}, -{13,14,-28}, -{13,14,-27}, -{13,14,-26}, -{13,14,-25}, -{13,14,-24}, -{13,14,-23}, -{13,14,-22}, -{13,14,-21}, -{13,14,-20}, -{13,14,-19}, -{13,14,-18}, -{13,14,-17}, -{13,14,-16}, -{13,14,-15}, -{13,14,-14}, -{13,14,-13}, -{13,14,-12}, -{13,14,-11}, -{13,14,-10}, -{13,14,-9}, -{13,14,-8}, -{13,14,-7}, -{13,14,-6}, -{13,14,-5}, -{13,14,-4}, -{13,14,-3}, -{13,14,-2}, -{13,14,-1}, -{13,14,0}, -{13,14,1}, -{13,14,2}, -{13,14,3}, -{13,14,4}, -{13,14,5}, -{13,14,6}, -{13,14,7}, -{13,14,8}, -{13,14,9}, -{13,14,10}, -{13,14,11}, -{13,14,12}, -{13,14,13}, -{13,14,14}, -{13,14,15}, -{13,14,16}, -{13,14,17}, -{13,14,18}, -{13,14,19}, -{13,15,-36}, -{13,15,-35}, -{13,15,-34}, -{13,15,-33}, -{13,15,-32}, -{13,15,-31}, -{13,15,-30}, -{13,15,-29}, -{13,15,-28}, -{13,15,-27}, -{13,15,-26}, -{13,15,-25}, -{13,15,-24}, -{13,15,-23}, -{13,15,-22}, -{13,15,-21}, -{13,15,-20}, -{13,15,-19}, -{13,15,-18}, -{13,15,-17}, -{13,15,-16}, -{13,15,-15}, -{13,15,-14}, -{13,15,-13}, -{13,15,-12}, -{13,15,-11}, -{13,15,-10}, -{13,15,-9}, -{13,15,-8}, -{13,15,-7}, -{13,15,-6}, -{13,15,-5}, -{13,15,-4}, -{13,15,-3}, -{13,15,-2}, -{13,15,-1}, -{13,15,0}, -{13,15,1}, -{13,15,2}, -{13,15,3}, -{13,15,4}, -{13,15,5}, -{13,15,6}, -{13,15,7}, -{13,15,8}, -{13,15,9}, -{13,15,10}, -{13,15,11}, -{13,15,12}, -{13,15,13}, -{13,15,14}, -{13,15,15}, -{13,15,16}, -{13,15,17}, -{13,15,18}, -{13,15,19}, -{13,16,-37}, -{13,16,-36}, -{13,16,-35}, -{13,16,-34}, -{13,16,-33}, -{13,16,-32}, -{13,16,-31}, -{13,16,-30}, -{13,16,-29}, -{13,16,-28}, -{13,16,-27}, -{13,16,-26}, -{13,16,-25}, -{13,16,-24}, -{13,16,-23}, -{13,16,-22}, -{13,16,-21}, -{13,16,-20}, -{13,16,-19}, -{13,16,-18}, -{13,16,-17}, -{13,16,-16}, -{13,16,-15}, -{13,16,-14}, -{13,16,-13}, -{13,16,-12}, -{13,16,-11}, -{13,16,-10}, -{13,16,-9}, -{13,16,-8}, -{13,16,-7}, -{13,16,-6}, -{13,16,-5}, -{13,16,-4}, -{13,16,-3}, -{13,16,-2}, -{13,16,-1}, -{13,16,0}, -{13,16,1}, -{13,16,2}, -{13,16,3}, -{13,16,4}, -{13,16,5}, -{13,16,6}, -{13,16,7}, -{13,16,8}, -{13,16,9}, -{13,16,10}, -{13,16,11}, -{13,16,12}, -{13,16,13}, -{13,16,14}, -{13,16,15}, -{13,16,16}, -{13,16,17}, -{13,16,18}, -{13,16,19}, -{13,17,-38}, -{13,17,-37}, -{13,17,-36}, -{13,17,-35}, -{13,17,-34}, -{13,17,-33}, -{13,17,-32}, -{13,17,-31}, -{13,17,-30}, -{13,17,-29}, -{13,17,-28}, -{13,17,-27}, -{13,17,-26}, -{13,17,-25}, -{13,17,-24}, -{13,17,-23}, -{13,17,-22}, -{13,17,-21}, -{13,17,-20}, -{13,17,-19}, -{13,17,-18}, -{13,17,-17}, -{13,17,-16}, -{13,17,-15}, -{13,17,-14}, -{13,17,-13}, -{13,17,-12}, -{13,17,-11}, -{13,17,-10}, -{13,17,-9}, -{13,17,-8}, -{13,17,-7}, -{13,17,-6}, -{13,17,-5}, -{13,17,-4}, -{13,17,-3}, -{13,17,-2}, -{13,17,-1}, -{13,17,0}, -{13,17,1}, -{13,17,2}, -{13,17,3}, -{13,17,4}, -{13,17,5}, -{13,17,6}, -{13,17,7}, -{13,17,8}, -{13,17,9}, -{13,17,10}, -{13,17,11}, -{13,17,12}, -{13,17,13}, -{13,17,14}, -{13,17,15}, -{13,17,16}, -{13,17,17}, -{13,17,18}, -{13,17,19}, -{13,18,-39}, -{13,18,-38}, -{13,18,-37}, -{13,18,-36}, -{13,18,-35}, -{13,18,-34}, -{13,18,-33}, -{13,18,-32}, -{13,18,-31}, -{13,18,-30}, -{13,18,-29}, -{13,18,-28}, -{13,18,-27}, -{13,18,-26}, -{13,18,-25}, -{13,18,-24}, -{13,18,-23}, -{13,18,-22}, -{13,18,-21}, -{13,18,-20}, -{13,18,-19}, -{13,18,-18}, -{13,18,-17}, -{13,18,-16}, -{13,18,-15}, -{13,18,-14}, -{13,18,-13}, -{13,18,-12}, -{13,18,-11}, -{13,18,-10}, -{13,18,-9}, -{13,18,-8}, -{13,18,-7}, -{13,18,-6}, -{13,18,-5}, -{13,18,-4}, -{13,18,-3}, -{13,18,-2}, -{13,18,-1}, -{13,18,0}, -{13,18,1}, -{13,18,2}, -{13,18,3}, -{13,18,4}, -{13,18,5}, -{13,18,6}, -{13,18,7}, -{13,18,8}, -{13,18,9}, -{13,18,10}, -{13,18,11}, -{13,18,12}, -{13,18,13}, -{13,18,14}, -{13,18,15}, -{13,18,16}, -{13,18,17}, -{13,18,18}, -{13,18,19}, -{13,19,-40}, -{13,19,-39}, -{13,19,-38}, -{13,19,-37}, -{13,19,-36}, -{13,19,-35}, -{13,19,-34}, -{13,19,-33}, -{13,19,-32}, -{13,19,-31}, -{13,19,-30}, -{13,19,-29}, -{13,19,-28}, -{13,19,-27}, -{13,19,-26}, -{13,19,-25}, -{13,19,-24}, -{13,19,-23}, -{13,19,-22}, -{13,19,-21}, -{13,19,-20}, -{13,19,-19}, -{13,19,-18}, -{13,19,-17}, -{13,19,-16}, -{13,19,-15}, -{13,19,-14}, -{13,19,-13}, -{13,19,-12}, -{13,19,-11}, -{13,19,-10}, -{13,19,-9}, -{13,19,-8}, -{13,19,-7}, -{13,19,-6}, -{13,19,-5}, -{13,19,-4}, -{13,19,-3}, -{13,19,-2}, -{13,19,-1}, -{13,19,0}, -{13,19,1}, -{13,19,2}, -{13,19,3}, -{13,19,4}, -{13,19,5}, -{13,19,6}, -{13,19,7}, -{13,19,8}, -{13,19,9}, -{13,19,10}, -{13,19,11}, -{13,19,12}, -{13,19,13}, -{13,19,14}, -{13,19,15}, -{13,19,16}, -{13,19,17}, -{13,19,18}, -{13,19,19}, -{13,20,-41}, -{13,20,-40}, -{13,20,-39}, -{13,20,-38}, -{13,20,-37}, -{13,20,-36}, -{13,20,-35}, -{13,20,-34}, -{13,20,-33}, -{13,20,-32}, -{13,20,-31}, -{13,20,-30}, -{13,20,-29}, -{13,20,-28}, -{13,20,-27}, -{13,20,-26}, -{13,20,-25}, -{13,20,-24}, -{13,20,-23}, -{13,20,-22}, -{13,20,-21}, -{13,20,-20}, -{13,20,-19}, -{13,20,-18}, -{13,20,-17}, -{13,20,-16}, -{13,20,-15}, -{13,20,-14}, -{13,20,-13}, -{13,20,-12}, -{13,20,-11}, -{13,20,-10}, -{13,20,-9}, -{13,20,-8}, -{13,20,-7}, -{13,20,-6}, -{13,20,-5}, -{13,20,-4}, -{13,20,-3}, -{13,20,-2}, -{13,20,-1}, -{13,20,0}, -{13,20,1}, -{13,20,2}, -{13,20,3}, -{13,20,4}, -{13,20,5}, -{13,20,6}, -{13,20,7}, -{13,20,8}, -{13,20,9}, -{13,20,10}, -{13,20,11}, -{13,20,12}, -{13,20,13}, -{13,20,14}, -{13,20,15}, -{13,20,16}, -{13,20,17}, -{13,20,18}, -{13,20,19}, -{13,20,20}, -{13,21,-42}, -{13,21,-41}, -{13,21,-40}, -{13,21,-39}, -{13,21,-38}, -{13,21,-37}, -{13,21,-36}, -{13,21,-35}, -{13,21,-34}, -{13,21,-33}, -{13,21,-32}, -{13,21,-31}, -{13,21,-30}, -{13,21,-29}, -{13,21,-28}, -{13,21,-27}, -{13,21,-26}, -{13,21,-25}, -{13,21,-24}, -{13,21,-23}, -{13,21,-22}, -{13,21,-21}, -{13,21,-20}, -{13,21,-19}, -{13,21,-18}, -{13,21,-17}, -{13,21,-16}, -{13,21,-15}, -{13,21,-14}, -{13,21,-13}, -{13,21,-12}, -{13,21,-11}, -{13,21,-10}, -{13,21,-9}, -{13,21,-8}, -{13,21,-7}, -{13,21,-6}, -{13,21,-5}, -{13,21,-4}, -{13,21,-3}, -{13,21,-2}, -{13,21,-1}, -{13,21,0}, -{13,21,1}, -{13,21,2}, -{13,21,3}, -{13,21,4}, -{13,21,5}, -{13,21,6}, -{13,21,7}, -{13,21,8}, -{13,21,9}, -{13,21,10}, -{13,21,11}, -{13,21,12}, -{13,21,13}, -{13,21,14}, -{13,21,15}, -{13,21,16}, -{13,21,17}, -{13,21,18}, -{13,21,19}, -{13,21,20}, -{13,22,-42}, -{13,22,-41}, -{13,22,-40}, -{13,22,-39}, -{13,22,-38}, -{13,22,-37}, -{13,22,-36}, -{13,22,-35}, -{13,22,-34}, -{13,22,-33}, -{13,22,-32}, -{13,22,-31}, -{13,22,-30}, -{13,22,-29}, -{13,22,-28}, -{13,22,-27}, -{13,22,-26}, -{13,22,-25}, -{13,22,-24}, -{13,22,-23}, -{13,22,-22}, -{13,22,-21}, -{13,22,-20}, -{13,22,-19}, -{13,22,-18}, -{13,22,-17}, -{13,22,-16}, -{13,22,-15}, -{13,22,-14}, -{13,22,-13}, -{13,22,-12}, -{13,22,-11}, -{13,22,-10}, -{13,22,-9}, -{13,22,-8}, -{13,22,-7}, -{13,22,-6}, -{13,22,-5}, -{13,22,-4}, -{13,22,-3}, -{13,22,-2}, -{13,22,-1}, -{13,22,0}, -{13,22,1}, -{13,22,2}, -{13,22,3}, -{13,22,4}, -{13,22,5}, -{13,22,6}, -{13,22,7}, -{13,22,8}, -{13,22,9}, -{13,22,10}, -{13,22,11}, -{13,22,12}, -{13,22,13}, -{13,22,14}, -{13,22,15}, -{13,22,16}, -{13,22,17}, -{13,22,18}, -{13,22,19}, -{13,22,20}, -{13,23,-43}, -{13,23,-42}, -{13,23,-41}, -{13,23,-40}, -{13,23,-39}, -{13,23,-38}, -{13,23,-37}, -{13,23,-36}, -{13,23,-35}, -{13,23,-34}, -{13,23,-33}, -{13,23,-32}, -{13,23,-31}, -{13,23,-30}, -{13,23,-29}, -{13,23,-28}, -{13,23,-27}, -{13,23,-26}, -{13,23,-25}, -{13,23,-24}, -{13,23,-23}, -{13,23,-22}, -{13,23,-21}, -{13,23,-20}, -{13,23,-19}, -{13,23,-18}, -{13,23,-17}, -{13,23,-16}, -{13,23,-15}, -{13,23,-14}, -{13,23,-13}, -{13,23,-12}, -{13,23,-11}, -{13,23,-10}, -{13,23,-9}, -{13,23,-8}, -{13,23,-7}, -{13,23,-6}, -{13,23,-5}, -{13,23,-4}, -{13,23,-3}, -{13,23,-2}, -{13,23,-1}, -{13,23,0}, -{13,23,1}, -{13,23,2}, -{13,23,3}, -{13,23,4}, -{13,23,5}, -{13,23,6}, -{13,23,7}, -{13,23,8}, -{13,23,9}, -{13,23,10}, -{13,23,11}, -{13,23,12}, -{13,23,13}, -{13,23,14}, -{13,23,15}, -{13,23,16}, -{13,23,17}, -{13,23,18}, -{13,23,19}, -{13,23,20}, -{13,24,-44}, -{13,24,-43}, -{13,24,-42}, -{13,24,-41}, -{13,24,-40}, -{13,24,-39}, -{13,24,-38}, -{13,24,-37}, -{13,24,-36}, -{13,24,-35}, -{13,24,-34}, -{13,24,-33}, -{13,24,-32}, -{13,24,-31}, -{13,24,-30}, -{13,24,-29}, -{13,24,-28}, -{13,24,-27}, -{13,24,-26}, -{13,24,-25}, -{13,24,-24}, -{13,24,-23}, -{13,24,-22}, -{13,24,-21}, -{13,24,-20}, -{13,24,-19}, -{13,24,-18}, -{13,24,-17}, -{13,24,-16}, -{13,24,-15}, -{13,24,-14}, -{13,24,-13}, -{13,24,-12}, -{13,24,-11}, -{13,24,-10}, -{13,24,-9}, -{13,24,-8}, -{13,24,-7}, -{13,24,-6}, -{13,24,-5}, -{13,24,-4}, -{13,24,-3}, -{13,24,-2}, -{13,24,-1}, -{13,24,0}, -{13,24,1}, -{13,24,2}, -{13,24,3}, -{13,24,4}, -{13,24,5}, -{13,24,6}, -{13,24,7}, -{13,24,8}, -{13,24,9}, -{13,24,10}, -{13,24,11}, -{13,24,12}, -{13,24,13}, -{13,24,14}, -{13,24,15}, -{13,24,16}, -{13,24,17}, -{13,24,18}, -{13,24,19}, -{13,24,20}, -{13,25,-45}, -{13,25,-44}, -{13,25,-43}, -{13,25,-42}, -{13,25,-41}, -{13,25,-40}, -{13,25,-39}, -{13,25,-38}, -{13,25,-37}, -{13,25,-36}, -{13,25,-35}, -{13,25,-34}, -{13,25,-33}, -{13,25,-32}, -{13,25,-31}, -{13,25,-30}, -{13,25,-29}, -{13,25,-28}, -{13,25,-27}, -{13,25,-26}, -{13,25,-25}, -{13,25,-24}, -{13,25,-23}, -{13,25,-22}, -{13,25,-21}, -{13,25,-20}, -{13,25,-19}, -{13,25,-18}, -{13,25,-17}, -{13,25,-16}, -{13,25,-15}, -{13,25,-14}, -{13,25,-13}, -{13,25,-12}, -{13,25,-11}, -{13,25,-10}, -{13,25,-9}, -{13,25,-8}, -{13,25,-7}, -{13,25,-6}, -{13,25,-5}, -{13,25,-4}, -{13,25,-3}, -{13,25,-2}, -{13,25,-1}, -{13,25,0}, -{13,25,1}, -{13,25,2}, -{13,25,3}, -{13,25,4}, -{13,25,5}, -{13,25,6}, -{13,25,7}, -{13,25,8}, -{13,25,9}, -{13,25,10}, -{13,25,11}, -{13,25,12}, -{13,25,13}, -{13,25,14}, -{13,25,15}, -{13,25,16}, -{13,25,17}, -{13,25,18}, -{13,25,19}, -{13,25,20}, -{13,26,-46}, -{13,26,-45}, -{13,26,-44}, -{13,26,-43}, -{13,26,-42}, -{13,26,-41}, -{13,26,-40}, -{13,26,-39}, -{13,26,-38}, -{13,26,-37}, -{13,26,-36}, -{13,26,-35}, -{13,26,-34}, -{13,26,-33}, -{13,26,-32}, -{13,26,-31}, -{13,26,-30}, -{13,26,-29}, -{13,26,-28}, -{13,26,-27}, -{13,26,-26}, -{13,26,-25}, -{13,26,-24}, -{13,26,-23}, -{13,26,-22}, -{13,26,-21}, -{13,26,-20}, -{13,26,-19}, -{13,26,-18}, -{13,26,-17}, -{13,26,-16}, -{13,26,-15}, -{13,26,-14}, -{13,26,-13}, -{13,26,-12}, -{13,26,-11}, -{13,26,-10}, -{13,26,-9}, -{13,26,-8}, -{13,26,-7}, -{13,26,-6}, -{13,26,-5}, -{13,26,-4}, -{13,26,-3}, -{13,26,-2}, -{13,26,-1}, -{13,26,0}, -{13,26,1}, -{13,26,2}, -{13,26,3}, -{13,26,4}, -{13,26,5}, -{13,26,6}, -{13,26,7}, -{13,26,8}, -{13,26,9}, -{13,26,10}, -{13,26,11}, -{13,26,12}, -{13,26,13}, -{13,26,14}, -{13,26,15}, -{13,26,16}, -{13,26,17}, -{13,26,18}, -{13,26,19}, -{13,26,20}, -{13,27,-47}, -{13,27,-46}, -{13,27,-45}, -{13,27,-44}, -{13,27,-43}, -{13,27,-42}, -{13,27,-41}, -{13,27,-40}, -{13,27,-39}, -{13,27,-38}, -{13,27,-37}, -{13,27,-36}, -{13,27,-35}, -{13,27,-34}, -{13,27,-33}, -{13,27,-32}, -{13,27,-31}, -{13,27,-30}, -{13,27,-29}, -{13,27,-28}, -{13,27,-27}, -{13,27,-26}, -{13,27,-25}, -{13,27,-24}, -{13,27,-23}, -{13,27,-22}, -{13,27,-21}, -{13,27,-20}, -{13,27,-19}, -{13,27,-18}, -{13,27,-17}, -{13,27,-16}, -{13,27,-15}, -{13,27,-14}, -{13,27,-13}, -{13,27,-12}, -{13,27,-11}, -{13,27,-10}, -{13,27,-9}, -{13,27,-8}, -{13,27,-7}, -{13,27,-6}, -{13,27,-5}, -{13,27,-4}, -{13,27,-3}, -{13,27,-2}, -{13,27,-1}, -{13,27,0}, -{13,27,1}, -{13,27,2}, -{13,27,3}, -{13,27,4}, -{13,27,5}, -{13,27,6}, -{13,27,7}, -{13,27,8}, -{13,27,9}, -{13,27,10}, -{13,27,11}, -{13,27,12}, -{13,27,13}, -{13,27,14}, -{13,27,15}, -{13,27,16}, -{13,27,17}, -{13,27,18}, -{13,27,19}, -{13,27,20}, -{13,28,-48}, -{13,28,-47}, -{13,28,-46}, -{13,28,-45}, -{13,28,-44}, -{13,28,-43}, -{13,28,-42}, -{13,28,-41}, -{13,28,-40}, -{13,28,-39}, -{13,28,-38}, -{13,28,-37}, -{13,28,-36}, -{13,28,-35}, -{13,28,-34}, -{13,28,-33}, -{13,28,-32}, -{13,28,-31}, -{13,28,-30}, -{13,28,-29}, -{13,28,-28}, -{13,28,-27}, -{13,28,-26}, -{13,28,-25}, -{13,28,-24}, -{13,28,-23}, -{13,28,-22}, -{13,28,-21}, -{13,28,-20}, -{13,28,-19}, -{13,28,-18}, -{13,28,-17}, -{13,28,-16}, -{13,28,-15}, -{13,28,-14}, -{13,28,-13}, -{13,28,-12}, -{13,28,-11}, -{13,28,-10}, -{13,28,-9}, -{13,28,-8}, -{13,28,-7}, -{13,28,-6}, -{13,28,-5}, -{13,28,-4}, -{13,28,-3}, -{13,28,-2}, -{13,28,-1}, -{13,28,0}, -{13,28,1}, -{13,28,2}, -{13,28,3}, -{13,28,4}, -{13,28,5}, -{13,28,6}, -{13,28,7}, -{13,28,8}, -{13,28,9}, -{13,28,10}, -{13,28,11}, -{13,28,12}, -{13,28,13}, -{13,28,14}, -{13,28,15}, -{13,28,16}, -{13,28,17}, -{13,28,18}, -{13,28,19}, -{13,28,20}, -{13,29,-49}, -{13,29,-48}, -{13,29,-47}, -{13,29,-46}, -{13,29,-45}, -{13,29,-44}, -{13,29,-43}, -{13,29,-42}, -{13,29,-41}, -{13,29,-40}, -{13,29,-39}, -{13,29,-38}, -{13,29,-37}, -{13,29,-36}, -{13,29,-35}, -{13,29,-34}, -{13,29,-33}, -{13,29,-32}, -{13,29,-31}, -{13,29,-30}, -{13,29,-29}, -{13,29,-28}, -{13,29,-27}, -{13,29,-26}, -{13,29,-25}, -{13,29,-24}, -{13,29,-23}, -{13,29,-22}, -{13,29,-21}, -{13,29,-20}, -{13,29,-19}, -{13,29,-18}, -{13,29,-17}, -{13,29,-16}, -{13,29,-15}, -{13,29,-14}, -{13,29,-13}, -{13,29,-12}, -{13,29,-11}, -{13,29,-10}, -{13,29,-9}, -{13,29,-8}, -{13,29,-7}, -{13,29,-6}, -{13,29,-5}, -{13,29,-4}, -{13,29,-3}, -{13,29,-2}, -{13,29,-1}, -{13,29,0}, -{13,29,1}, -{13,29,2}, -{13,29,3}, -{13,29,4}, -{13,29,5}, -{13,29,6}, -{13,29,7}, -{13,29,8}, -{13,29,9}, -{13,29,10}, -{13,29,11}, -{13,29,12}, -{13,29,13}, -{13,29,14}, -{13,29,15}, -{13,29,16}, -{13,29,17}, -{13,29,18}, -{13,29,19}, -{13,29,20}, -{13,30,-50}, -{13,30,-49}, -{13,30,-48}, -{13,30,-47}, -{13,30,-46}, -{13,30,-45}, -{13,30,-44}, -{13,30,-43}, -{13,30,-42}, -{13,30,-41}, -{13,30,-40}, -{13,30,-39}, -{13,30,-38}, -{13,30,-37}, -{13,30,-36}, -{13,30,-35}, -{13,30,-34}, -{13,30,-33}, -{13,30,-32}, -{13,30,-31}, -{13,30,-30}, -{13,30,-29}, -{13,30,-28}, -{13,30,-27}, -{13,30,-26}, -{13,30,-25}, -{13,30,-24}, -{13,30,-23}, -{13,30,-22}, -{13,30,-21}, -{13,30,-20}, -{13,30,-19}, -{13,30,-18}, -{13,30,-17}, -{13,30,-16}, -{13,30,-15}, -{13,30,-14}, -{13,30,-13}, -{13,30,-12}, -{13,30,-11}, -{13,30,-10}, -{13,30,-9}, -{13,30,-8}, -{13,30,-7}, -{13,30,-6}, -{13,30,-5}, -{13,30,-4}, -{13,30,-3}, -{13,30,-2}, -{13,30,-1}, -{13,30,0}, -{13,30,1}, -{13,30,2}, -{13,30,3}, -{13,30,4}, -{13,30,5}, -{13,30,6}, -{13,30,7}, -{13,30,8}, -{13,30,9}, -{13,30,10}, -{13,30,11}, -{13,30,12}, -{13,30,13}, -{13,30,14}, -{13,30,15}, -{13,30,16}, -{13,30,17}, -{13,30,18}, -{13,30,19}, -{13,30,20}, -{13,31,-50}, -{13,31,-49}, -{13,31,-48}, -{13,31,-47}, -{13,31,-46}, -{13,31,-45}, -{13,31,-44}, -{13,31,-43}, -{13,31,-42}, -{13,31,-41}, -{13,31,-40}, -{13,31,-39}, -{13,31,-38}, -{13,31,-37}, -{13,31,-36}, -{13,31,-35}, -{13,31,-34}, -{13,31,-33}, -{13,31,-32}, -{13,31,-31}, -{13,31,-30}, -{13,31,-29}, -{13,31,-28}, -{13,31,-27}, -{13,31,-26}, -{13,31,-25}, -{13,31,-24}, -{13,31,-23}, -{13,31,-22}, -{13,31,-21}, -{13,31,-20}, -{13,31,-19}, -{13,31,-18}, -{13,31,-17}, -{13,31,-16}, -{13,31,-15}, -{13,31,-14}, -{13,31,-13}, -{13,31,-12}, -{13,31,-11}, -{13,31,-10}, -{13,31,-9}, -{13,31,-8}, -{13,31,-7}, -{13,31,-6}, -{13,31,-5}, -{13,31,-4}, -{13,31,-3}, -{13,31,-2}, -{13,31,-1}, -{13,31,0}, -{13,31,1}, -{13,31,2}, -{13,31,3}, -{13,31,4}, -{13,31,5}, -{13,31,6}, -{13,31,7}, -{13,31,8}, -{13,31,9}, -{13,31,10}, -{13,31,11}, -{13,31,12}, -{13,31,13}, -{13,31,14}, -{13,31,15}, -{13,31,16}, -{13,31,17}, -{13,31,18}, -{13,31,19}, -{13,31,20}, -{13,32,-51}, -{13,32,-50}, -{13,32,-49}, -{13,32,-48}, -{13,32,-47}, -{13,32,-46}, -{13,32,-45}, -{13,32,-44}, -{13,32,-43}, -{13,32,-42}, -{13,32,-41}, -{13,32,-40}, -{13,32,-39}, -{13,32,-38}, -{13,32,-37}, -{13,32,-36}, -{13,32,-35}, -{13,32,-34}, -{13,32,-33}, -{13,32,-32}, -{13,32,-31}, -{13,32,-30}, -{13,32,-29}, -{13,32,-28}, -{13,32,-27}, -{13,32,-26}, -{13,32,-25}, -{13,32,-24}, -{13,32,-23}, -{13,32,-22}, -{13,32,-21}, -{13,32,-20}, -{13,32,-19}, -{13,32,-18}, -{13,32,-17}, -{13,32,-16}, -{13,32,-15}, -{13,32,-14}, -{13,32,-13}, -{13,32,-12}, -{13,32,-11}, -{13,32,-10}, -{13,32,-9}, -{13,32,-8}, -{13,32,-7}, -{13,32,-6}, -{13,32,-5}, -{13,32,-4}, -{13,32,-3}, -{13,32,-2}, -{13,32,-1}, -{13,32,0}, -{13,32,1}, -{13,32,2}, -{13,32,3}, -{13,32,4}, -{13,32,5}, -{13,32,6}, -{13,32,7}, -{13,32,8}, -{13,32,9}, -{13,32,10}, -{13,32,11}, -{13,32,12}, -{13,32,13}, -{13,32,14}, -{13,32,15}, -{13,32,16}, -{13,32,17}, -{13,32,18}, -{13,32,19}, -{13,32,20}, -{13,33,-52}, -{13,33,-51}, -{13,33,-50}, -{13,33,-49}, -{13,33,-48}, -{13,33,-47}, -{13,33,-46}, -{13,33,-45}, -{13,33,-44}, -{13,33,-43}, -{13,33,-42}, -{13,33,-41}, -{13,33,-40}, -{13,33,-39}, -{13,33,-38}, -{13,33,-37}, -{13,33,-36}, -{13,33,-35}, -{13,33,-34}, -{13,33,-33}, -{13,33,-32}, -{13,33,-31}, -{13,33,-30}, -{13,33,-29}, -{13,33,-28}, -{13,33,-27}, -{13,33,-26}, -{13,33,-25}, -{13,33,-24}, -{13,33,-23}, -{13,33,-22}, -{13,33,-21}, -{13,33,-20}, -{13,33,-19}, -{13,33,-18}, -{13,33,-17}, -{13,33,-16}, -{13,33,-15}, -{13,33,-14}, -{13,33,-13}, -{13,33,-12}, -{13,33,-11}, -{13,33,-10}, -{13,33,-9}, -{13,33,-8}, -{13,33,-7}, -{13,33,-6}, -{13,33,-5}, -{13,33,-4}, -{13,33,-3}, -{13,33,-2}, -{13,33,-1}, -{13,33,0}, -{13,33,1}, -{13,33,2}, -{13,33,3}, -{13,33,4}, -{13,33,5}, -{13,33,6}, -{13,33,7}, -{13,33,8}, -{13,33,9}, -{13,33,10}, -{13,33,11}, -{13,33,12}, -{13,33,13}, -{13,33,14}, -{13,33,15}, -{13,33,16}, -{13,33,17}, -{13,33,18}, -{13,33,19}, -{13,33,20}, -{13,34,-53}, -{13,34,-52}, -{13,34,-51}, -{13,34,-50}, -{13,34,-49}, -{13,34,-48}, -{13,34,-47}, -{13,34,-46}, -{13,34,-45}, -{13,34,-44}, -{13,34,-43}, -{13,34,-42}, -{13,34,-41}, -{13,34,-40}, -{13,34,-39}, -{13,34,-38}, -{13,34,-37}, -{13,34,-36}, -{13,34,-35}, -{13,34,-34}, -{13,34,-33}, -{13,34,-32}, -{13,34,-31}, -{13,34,-30}, -{13,34,-29}, -{13,34,-28}, -{13,34,-27}, -{13,34,-26}, -{13,34,-25}, -{13,34,-24}, -{13,34,-23}, -{13,34,-22}, -{13,34,-21}, -{13,34,-20}, -{13,34,-19}, -{13,34,-18}, -{13,34,-17}, -{13,34,-16}, -{13,34,-15}, -{13,34,-14}, -{13,34,-13}, -{13,34,-12}, -{13,34,-11}, -{13,34,-10}, -{13,34,-9}, -{13,34,-8}, -{13,34,-7}, -{13,34,-6}, -{13,34,-5}, -{13,34,-4}, -{13,34,-3}, -{13,34,-2}, -{13,34,-1}, -{13,34,0}, -{13,34,1}, -{13,34,2}, -{13,34,3}, -{13,34,4}, -{13,34,5}, -{13,34,6}, -{13,34,7}, -{13,34,8}, -{13,34,9}, -{13,34,10}, -{13,34,11}, -{13,34,12}, -{13,34,13}, -{13,34,14}, -{13,35,-54}, -{13,35,-53}, -{13,35,-52}, -{13,35,-51}, -{13,35,-50}, -{13,35,-49}, -{13,35,-48}, -{13,35,-47}, -{13,35,-46}, -{13,35,-45}, -{13,35,-44}, -{13,35,-43}, -{13,35,-42}, -{13,35,-41}, -{13,35,-40}, -{13,35,-39}, -{13,35,-38}, -{13,35,-37}, -{13,35,-36}, -{13,35,-35}, -{13,35,-34}, -{13,35,-33}, -{13,35,-32}, -{13,35,-31}, -{13,35,-30}, -{13,35,-29}, -{13,35,-28}, -{13,35,-27}, -{13,35,-26}, -{13,35,-25}, -{13,35,-24}, -{13,35,-23}, -{13,35,-22}, -{13,35,-21}, -{13,35,-20}, -{13,35,-19}, -{13,35,-18}, -{13,35,-17}, -{13,35,-16}, -{13,35,-15}, -{13,35,-14}, -{13,35,-13}, -{13,35,-12}, -{13,35,-11}, -{13,35,-10}, -{13,35,-9}, -{13,35,-8}, -{13,35,-7}, -{13,35,-6}, -{13,35,-5}, -{13,35,-4}, -{13,35,-3}, -{13,35,-2}, -{13,36,-55}, -{13,36,-54}, -{13,36,-53}, -{13,36,-52}, -{13,36,-51}, -{13,36,-50}, -{13,36,-49}, -{13,36,-48}, -{13,36,-47}, -{13,36,-46}, -{13,36,-45}, -{13,36,-44}, -{13,36,-43}, -{13,36,-42}, -{13,36,-41}, -{13,36,-40}, -{13,36,-39}, -{13,36,-38}, -{13,36,-37}, -{13,36,-36}, -{13,36,-35}, -{13,36,-34}, -{13,36,-33}, -{13,36,-32}, -{13,36,-31}, -{13,36,-30}, -{13,36,-29}, -{13,36,-28}, -{13,36,-27}, -{13,36,-26}, -{13,36,-25}, -{13,36,-24}, -{13,36,-23}, -{13,36,-22}, -{13,36,-21}, -{13,36,-20}, -{13,36,-19}, -{13,36,-18}, -{13,36,-17}, -{13,36,-16}, -{13,36,-15}, -{13,36,-14}, -{13,36,-13}, -{13,37,-56}, -{13,37,-55}, -{13,37,-54}, -{13,37,-53}, -{13,37,-52}, -{13,37,-51}, -{13,37,-50}, -{13,37,-49}, -{13,37,-48}, -{13,37,-47}, -{13,37,-46}, -{13,37,-45}, -{13,37,-44}, -{13,37,-43}, -{13,37,-42}, -{13,37,-41}, -{13,37,-40}, -{13,37,-39}, -{13,37,-38}, -{13,37,-37}, -{13,37,-36}, -{13,37,-35}, -{13,37,-34}, -{13,37,-33}, -{13,37,-32}, -{13,37,-31}, -{13,37,-30}, -{13,37,-29}, -{13,37,-28}, -{13,37,-27}, -{13,37,-26}, -{13,37,-25}, -{13,37,-24}, -{13,37,-23}, -{13,37,-22}, -{13,37,-21}, -{13,37,-20}, -{13,38,-56}, -{13,38,-55}, -{13,38,-54}, -{13,38,-53}, -{13,38,-52}, -{13,38,-51}, -{13,38,-50}, -{13,38,-49}, -{13,38,-48}, -{13,38,-47}, -{13,38,-46}, -{13,38,-45}, -{13,38,-44}, -{13,38,-43}, -{13,38,-42}, -{13,38,-41}, -{13,38,-40}, -{13,38,-39}, -{13,38,-38}, -{13,38,-37}, -{13,38,-36}, -{13,38,-35}, -{13,38,-34}, -{13,38,-33}, -{13,38,-32}, -{13,38,-31}, -{13,38,-30}, -{13,38,-29}, -{13,38,-28}, -{13,38,-27}, -{13,39,-57}, -{13,39,-56}, -{13,39,-55}, -{13,39,-54}, -{13,39,-53}, -{13,39,-52}, -{13,39,-51}, -{13,39,-50}, -{13,39,-49}, -{13,39,-48}, -{13,39,-47}, -{13,39,-46}, -{13,39,-45}, -{13,39,-44}, -{13,39,-43}, -{13,39,-42}, -{13,39,-41}, -{13,39,-40}, -{13,39,-39}, -{13,39,-38}, -{13,39,-37}, -{13,39,-36}, -{13,39,-35}, -{13,39,-34}, -{13,39,-33}, -{13,39,-32}, -{13,40,-58}, -{13,40,-57}, -{13,40,-56}, -{13,40,-55}, -{13,40,-54}, -{13,40,-53}, -{13,40,-52}, -{13,40,-51}, -{13,40,-50}, -{13,40,-49}, -{13,40,-48}, -{13,40,-47}, -{13,40,-46}, -{13,40,-45}, -{13,40,-44}, -{13,40,-43}, -{13,40,-42}, -{13,40,-41}, -{13,40,-40}, -{13,40,-39}, -{13,40,-38}, -{13,40,-37}, -{13,41,-59}, -{13,41,-58}, -{13,41,-57}, -{13,41,-56}, -{13,41,-55}, -{13,41,-54}, -{13,41,-53}, -{13,41,-52}, -{13,41,-51}, -{13,41,-50}, -{13,41,-49}, -{13,41,-48}, -{13,41,-47}, -{13,41,-46}, -{13,41,-45}, -{13,41,-44}, -{13,41,-43}, -{13,41,-42}, -{13,42,-60}, -{13,42,-59}, -{13,42,-58}, -{13,42,-57}, -{13,42,-56}, -{13,42,-55}, -{13,42,-54}, -{13,42,-53}, -{13,42,-52}, -{13,42,-51}, -{13,42,-50}, -{13,42,-49}, -{13,42,-48}, -{13,42,-47}, -{13,42,-46}, -{13,43,-61}, -{13,43,-60}, -{13,43,-59}, -{13,43,-58}, -{13,43,-57}, -{13,43,-56}, -{13,43,-55}, -{13,43,-54}, -{13,43,-53}, -{13,43,-52}, -{13,43,-51}, -{13,43,-50}, -{13,44,-62}, -{13,44,-61}, -{13,44,-60}, -{13,44,-59}, -{13,44,-58}, -{13,44,-57}, -{13,44,-56}, -{13,44,-55}, -{13,44,-54}, -{13,44,-53}, -{13,45,-62}, -{13,45,-61}, -{13,45,-60}, -{13,45,-59}, -{13,45,-58}, -{13,45,-57}, -{13,46,-63}, -{13,46,-62}, -{13,46,-61}, -{13,46,-60}, -{13,47,-64}, -{13,47,-63}, -{14,-25,20}, -{14,-24,18}, -{14,-24,19}, -{14,-24,20}, -{14,-23,16}, -{14,-23,17}, -{14,-23,18}, -{14,-23,19}, -{14,-23,20}, -{14,-22,13}, -{14,-22,14}, -{14,-22,15}, -{14,-22,16}, -{14,-22,17}, -{14,-22,18}, -{14,-22,19}, -{14,-22,20}, -{14,-21,11}, -{14,-21,12}, -{14,-21,13}, -{14,-21,14}, -{14,-21,15}, -{14,-21,16}, -{14,-21,17}, -{14,-21,18}, -{14,-21,19}, -{14,-21,20}, -{14,-20,8}, -{14,-20,9}, -{14,-20,10}, -{14,-20,11}, -{14,-20,12}, -{14,-20,13}, -{14,-20,14}, -{14,-20,15}, -{14,-20,16}, -{14,-20,17}, -{14,-20,18}, -{14,-20,19}, -{14,-20,20}, -{14,-19,6}, -{14,-19,7}, -{14,-19,8}, -{14,-19,9}, -{14,-19,10}, -{14,-19,11}, -{14,-19,12}, -{14,-19,13}, -{14,-19,14}, -{14,-19,15}, -{14,-19,16}, -{14,-19,17}, -{14,-19,18}, -{14,-19,19}, -{14,-19,20}, -{14,-18,4}, -{14,-18,5}, -{14,-18,6}, -{14,-18,7}, -{14,-18,8}, -{14,-18,9}, -{14,-18,10}, -{14,-18,11}, -{14,-18,12}, -{14,-18,13}, -{14,-18,14}, -{14,-18,15}, -{14,-18,16}, -{14,-18,17}, -{14,-18,18}, -{14,-18,19}, -{14,-18,20}, -{14,-17,2}, -{14,-17,3}, -{14,-17,4}, -{14,-17,5}, -{14,-17,6}, -{14,-17,7}, -{14,-17,8}, -{14,-17,9}, -{14,-17,10}, -{14,-17,11}, -{14,-17,12}, -{14,-17,13}, -{14,-17,14}, -{14,-17,15}, -{14,-17,16}, -{14,-17,17}, -{14,-17,18}, -{14,-17,19}, -{14,-17,20}, -{14,-16,0}, -{14,-16,1}, -{14,-16,2}, -{14,-16,3}, -{14,-16,4}, -{14,-16,5}, -{14,-16,6}, -{14,-16,7}, -{14,-16,8}, -{14,-16,9}, -{14,-16,10}, -{14,-16,11}, -{14,-16,12}, -{14,-16,13}, -{14,-16,14}, -{14,-16,15}, -{14,-16,16}, -{14,-16,17}, -{14,-16,18}, -{14,-16,19}, -{14,-16,20}, -{14,-15,-1}, -{14,-15,0}, -{14,-15,1}, -{14,-15,2}, -{14,-15,3}, -{14,-15,4}, -{14,-15,5}, -{14,-15,6}, -{14,-15,7}, -{14,-15,8}, -{14,-15,9}, -{14,-15,10}, -{14,-15,11}, -{14,-15,12}, -{14,-15,13}, -{14,-15,14}, -{14,-15,15}, -{14,-15,16}, -{14,-15,17}, -{14,-15,18}, -{14,-15,19}, -{14,-15,20}, -{14,-14,-3}, -{14,-14,-2}, -{14,-14,-1}, -{14,-14,0}, -{14,-14,1}, -{14,-14,2}, -{14,-14,3}, -{14,-14,4}, -{14,-14,5}, -{14,-14,6}, -{14,-14,7}, -{14,-14,8}, -{14,-14,9}, -{14,-14,10}, -{14,-14,11}, -{14,-14,12}, -{14,-14,13}, -{14,-14,14}, -{14,-14,15}, -{14,-14,16}, -{14,-14,17}, -{14,-14,18}, -{14,-14,19}, -{14,-14,20}, -{14,-13,-4}, -{14,-13,-3}, -{14,-13,-2}, -{14,-13,-1}, -{14,-13,0}, -{14,-13,1}, -{14,-13,2}, -{14,-13,3}, -{14,-13,4}, -{14,-13,5}, -{14,-13,6}, -{14,-13,7}, -{14,-13,8}, -{14,-13,9}, -{14,-13,10}, -{14,-13,11}, -{14,-13,12}, -{14,-13,13}, -{14,-13,14}, -{14,-13,15}, -{14,-13,16}, -{14,-13,17}, -{14,-13,18}, -{14,-13,19}, -{14,-13,20}, -{14,-12,-6}, -{14,-12,-5}, -{14,-12,-4}, -{14,-12,-3}, -{14,-12,-2}, -{14,-12,-1}, -{14,-12,0}, -{14,-12,1}, -{14,-12,2}, -{14,-12,3}, -{14,-12,4}, -{14,-12,5}, -{14,-12,6}, -{14,-12,7}, -{14,-12,8}, -{14,-12,9}, -{14,-12,10}, -{14,-12,11}, -{14,-12,12}, -{14,-12,13}, -{14,-12,14}, -{14,-12,15}, -{14,-12,16}, -{14,-12,17}, -{14,-12,18}, -{14,-12,19}, -{14,-12,20}, -{14,-11,-7}, -{14,-11,-6}, -{14,-11,-5}, -{14,-11,-4}, -{14,-11,-3}, -{14,-11,-2}, -{14,-11,-1}, -{14,-11,0}, -{14,-11,1}, -{14,-11,2}, -{14,-11,3}, -{14,-11,4}, -{14,-11,5}, -{14,-11,6}, -{14,-11,7}, -{14,-11,8}, -{14,-11,9}, -{14,-11,10}, -{14,-11,11}, -{14,-11,12}, -{14,-11,13}, -{14,-11,14}, -{14,-11,15}, -{14,-11,16}, -{14,-11,17}, -{14,-11,18}, -{14,-11,19}, -{14,-11,20}, -{14,-10,-9}, -{14,-10,-8}, -{14,-10,-7}, -{14,-10,-6}, -{14,-10,-5}, -{14,-10,-4}, -{14,-10,-3}, -{14,-10,-2}, -{14,-10,-1}, -{14,-10,0}, -{14,-10,1}, -{14,-10,2}, -{14,-10,3}, -{14,-10,4}, -{14,-10,5}, -{14,-10,6}, -{14,-10,7}, -{14,-10,8}, -{14,-10,9}, -{14,-10,10}, -{14,-10,11}, -{14,-10,12}, -{14,-10,13}, -{14,-10,14}, -{14,-10,15}, -{14,-10,16}, -{14,-10,17}, -{14,-10,18}, -{14,-10,19}, -{14,-10,20}, -{14,-9,-10}, -{14,-9,-9}, -{14,-9,-8}, -{14,-9,-7}, -{14,-9,-6}, -{14,-9,-5}, -{14,-9,-4}, -{14,-9,-3}, -{14,-9,-2}, -{14,-9,-1}, -{14,-9,0}, -{14,-9,1}, -{14,-9,2}, -{14,-9,3}, -{14,-9,4}, -{14,-9,5}, -{14,-9,6}, -{14,-9,7}, -{14,-9,8}, -{14,-9,9}, -{14,-9,10}, -{14,-9,11}, -{14,-9,12}, -{14,-9,13}, -{14,-9,14}, -{14,-9,15}, -{14,-9,16}, -{14,-9,17}, -{14,-9,18}, -{14,-9,19}, -{14,-9,20}, -{14,-8,-12}, -{14,-8,-11}, -{14,-8,-10}, -{14,-8,-9}, -{14,-8,-8}, -{14,-8,-7}, -{14,-8,-6}, -{14,-8,-5}, -{14,-8,-4}, -{14,-8,-3}, -{14,-8,-2}, -{14,-8,-1}, -{14,-8,0}, -{14,-8,1}, -{14,-8,2}, -{14,-8,3}, -{14,-8,4}, -{14,-8,5}, -{14,-8,6}, -{14,-8,7}, -{14,-8,8}, -{14,-8,9}, -{14,-8,10}, -{14,-8,11}, -{14,-8,12}, -{14,-8,13}, -{14,-8,14}, -{14,-8,15}, -{14,-8,16}, -{14,-8,17}, -{14,-8,18}, -{14,-8,19}, -{14,-8,20}, -{14,-7,-13}, -{14,-7,-12}, -{14,-7,-11}, -{14,-7,-10}, -{14,-7,-9}, -{14,-7,-8}, -{14,-7,-7}, -{14,-7,-6}, -{14,-7,-5}, -{14,-7,-4}, -{14,-7,-3}, -{14,-7,-2}, -{14,-7,-1}, -{14,-7,0}, -{14,-7,1}, -{14,-7,2}, -{14,-7,3}, -{14,-7,4}, -{14,-7,5}, -{14,-7,6}, -{14,-7,7}, -{14,-7,8}, -{14,-7,9}, -{14,-7,10}, -{14,-7,11}, -{14,-7,12}, -{14,-7,13}, -{14,-7,14}, -{14,-7,15}, -{14,-7,16}, -{14,-7,17}, -{14,-7,18}, -{14,-7,19}, -{14,-7,20}, -{14,-6,-14}, -{14,-6,-13}, -{14,-6,-12}, -{14,-6,-11}, -{14,-6,-10}, -{14,-6,-9}, -{14,-6,-8}, -{14,-6,-7}, -{14,-6,-6}, -{14,-6,-5}, -{14,-6,-4}, -{14,-6,-3}, -{14,-6,-2}, -{14,-6,-1}, -{14,-6,0}, -{14,-6,1}, -{14,-6,2}, -{14,-6,3}, -{14,-6,4}, -{14,-6,5}, -{14,-6,6}, -{14,-6,7}, -{14,-6,8}, -{14,-6,9}, -{14,-6,10}, -{14,-6,11}, -{14,-6,12}, -{14,-6,13}, -{14,-6,14}, -{14,-6,15}, -{14,-6,16}, -{14,-6,17}, -{14,-6,18}, -{14,-6,19}, -{14,-6,20}, -{14,-5,-15}, -{14,-5,-14}, -{14,-5,-13}, -{14,-5,-12}, -{14,-5,-11}, -{14,-5,-10}, -{14,-5,-9}, -{14,-5,-8}, -{14,-5,-7}, -{14,-5,-6}, -{14,-5,-5}, -{14,-5,-4}, -{14,-5,-3}, -{14,-5,-2}, -{14,-5,-1}, -{14,-5,0}, -{14,-5,1}, -{14,-5,2}, -{14,-5,3}, -{14,-5,4}, -{14,-5,5}, -{14,-5,6}, -{14,-5,7}, -{14,-5,8}, -{14,-5,9}, -{14,-5,10}, -{14,-5,11}, -{14,-5,12}, -{14,-5,13}, -{14,-5,14}, -{14,-5,15}, -{14,-5,16}, -{14,-5,17}, -{14,-5,18}, -{14,-5,19}, -{14,-5,20}, -{14,-4,-17}, -{14,-4,-16}, -{14,-4,-15}, -{14,-4,-14}, -{14,-4,-13}, -{14,-4,-12}, -{14,-4,-11}, -{14,-4,-10}, -{14,-4,-9}, -{14,-4,-8}, -{14,-4,-7}, -{14,-4,-6}, -{14,-4,-5}, -{14,-4,-4}, -{14,-4,-3}, -{14,-4,-2}, -{14,-4,-1}, -{14,-4,0}, -{14,-4,1}, -{14,-4,2}, -{14,-4,3}, -{14,-4,4}, -{14,-4,5}, -{14,-4,6}, -{14,-4,7}, -{14,-4,8}, -{14,-4,9}, -{14,-4,10}, -{14,-4,11}, -{14,-4,12}, -{14,-4,13}, -{14,-4,14}, -{14,-4,15}, -{14,-4,16}, -{14,-4,17}, -{14,-4,18}, -{14,-4,19}, -{14,-4,20}, -{14,-3,-18}, -{14,-3,-17}, -{14,-3,-16}, -{14,-3,-15}, -{14,-3,-14}, -{14,-3,-13}, -{14,-3,-12}, -{14,-3,-11}, -{14,-3,-10}, -{14,-3,-9}, -{14,-3,-8}, -{14,-3,-7}, -{14,-3,-6}, -{14,-3,-5}, -{14,-3,-4}, -{14,-3,-3}, -{14,-3,-2}, -{14,-3,-1}, -{14,-3,0}, -{14,-3,1}, -{14,-3,2}, -{14,-3,3}, -{14,-3,4}, -{14,-3,5}, -{14,-3,6}, -{14,-3,7}, -{14,-3,8}, -{14,-3,9}, -{14,-3,10}, -{14,-3,11}, -{14,-3,12}, -{14,-3,13}, -{14,-3,14}, -{14,-3,15}, -{14,-3,16}, -{14,-3,17}, -{14,-3,18}, -{14,-3,19}, -{14,-3,20}, -{14,-2,-19}, -{14,-2,-18}, -{14,-2,-17}, -{14,-2,-16}, -{14,-2,-15}, -{14,-2,-14}, -{14,-2,-13}, -{14,-2,-12}, -{14,-2,-11}, -{14,-2,-10}, -{14,-2,-9}, -{14,-2,-8}, -{14,-2,-7}, -{14,-2,-6}, -{14,-2,-5}, -{14,-2,-4}, -{14,-2,-3}, -{14,-2,-2}, -{14,-2,-1}, -{14,-2,0}, -{14,-2,1}, -{14,-2,2}, -{14,-2,3}, -{14,-2,4}, -{14,-2,5}, -{14,-2,6}, -{14,-2,7}, -{14,-2,8}, -{14,-2,9}, -{14,-2,10}, -{14,-2,11}, -{14,-2,12}, -{14,-2,13}, -{14,-2,14}, -{14,-2,15}, -{14,-2,16}, -{14,-2,17}, -{14,-2,18}, -{14,-2,19}, -{14,-2,20}, -{14,-1,-20}, -{14,-1,-19}, -{14,-1,-18}, -{14,-1,-17}, -{14,-1,-16}, -{14,-1,-15}, -{14,-1,-14}, -{14,-1,-13}, -{14,-1,-12}, -{14,-1,-11}, -{14,-1,-10}, -{14,-1,-9}, -{14,-1,-8}, -{14,-1,-7}, -{14,-1,-6}, -{14,-1,-5}, -{14,-1,-4}, -{14,-1,-3}, -{14,-1,-2}, -{14,-1,-1}, -{14,-1,0}, -{14,-1,1}, -{14,-1,2}, -{14,-1,3}, -{14,-1,4}, -{14,-1,5}, -{14,-1,6}, -{14,-1,7}, -{14,-1,8}, -{14,-1,9}, -{14,-1,10}, -{14,-1,11}, -{14,-1,12}, -{14,-1,13}, -{14,-1,14}, -{14,-1,15}, -{14,-1,16}, -{14,-1,17}, -{14,-1,18}, -{14,-1,19}, -{14,-1,20}, -{14,0,-21}, -{14,0,-20}, -{14,0,-19}, -{14,0,-18}, -{14,0,-17}, -{14,0,-16}, -{14,0,-15}, -{14,0,-14}, -{14,0,-13}, -{14,0,-12}, -{14,0,-11}, -{14,0,-10}, -{14,0,-9}, -{14,0,-8}, -{14,0,-7}, -{14,0,-6}, -{14,0,-5}, -{14,0,-4}, -{14,0,-3}, -{14,0,-2}, -{14,0,-1}, -{14,0,0}, -{14,0,1}, -{14,0,2}, -{14,0,3}, -{14,0,4}, -{14,0,5}, -{14,0,6}, -{14,0,7}, -{14,0,8}, -{14,0,9}, -{14,0,10}, -{14,0,11}, -{14,0,12}, -{14,0,13}, -{14,0,14}, -{14,0,15}, -{14,0,16}, -{14,0,17}, -{14,0,18}, -{14,0,19}, -{14,0,20}, -{14,1,-22}, -{14,1,-21}, -{14,1,-20}, -{14,1,-19}, -{14,1,-18}, -{14,1,-17}, -{14,1,-16}, -{14,1,-15}, -{14,1,-14}, -{14,1,-13}, -{14,1,-12}, -{14,1,-11}, -{14,1,-10}, -{14,1,-9}, -{14,1,-8}, -{14,1,-7}, -{14,1,-6}, -{14,1,-5}, -{14,1,-4}, -{14,1,-3}, -{14,1,-2}, -{14,1,-1}, -{14,1,0}, -{14,1,1}, -{14,1,2}, -{14,1,3}, -{14,1,4}, -{14,1,5}, -{14,1,6}, -{14,1,7}, -{14,1,8}, -{14,1,9}, -{14,1,10}, -{14,1,11}, -{14,1,12}, -{14,1,13}, -{14,1,14}, -{14,1,15}, -{14,1,16}, -{14,1,17}, -{14,1,18}, -{14,1,19}, -{14,1,20}, -{14,2,-23}, -{14,2,-22}, -{14,2,-21}, -{14,2,-20}, -{14,2,-19}, -{14,2,-18}, -{14,2,-17}, -{14,2,-16}, -{14,2,-15}, -{14,2,-14}, -{14,2,-13}, -{14,2,-12}, -{14,2,-11}, -{14,2,-10}, -{14,2,-9}, -{14,2,-8}, -{14,2,-7}, -{14,2,-6}, -{14,2,-5}, -{14,2,-4}, -{14,2,-3}, -{14,2,-2}, -{14,2,-1}, -{14,2,0}, -{14,2,1}, -{14,2,2}, -{14,2,3}, -{14,2,4}, -{14,2,5}, -{14,2,6}, -{14,2,7}, -{14,2,8}, -{14,2,9}, -{14,2,10}, -{14,2,11}, -{14,2,12}, -{14,2,13}, -{14,2,14}, -{14,2,15}, -{14,2,16}, -{14,2,17}, -{14,2,18}, -{14,2,19}, -{14,2,20}, -{14,3,-25}, -{14,3,-24}, -{14,3,-23}, -{14,3,-22}, -{14,3,-21}, -{14,3,-20}, -{14,3,-19}, -{14,3,-18}, -{14,3,-17}, -{14,3,-16}, -{14,3,-15}, -{14,3,-14}, -{14,3,-13}, -{14,3,-12}, -{14,3,-11}, -{14,3,-10}, -{14,3,-9}, -{14,3,-8}, -{14,3,-7}, -{14,3,-6}, -{14,3,-5}, -{14,3,-4}, -{14,3,-3}, -{14,3,-2}, -{14,3,-1}, -{14,3,0}, -{14,3,1}, -{14,3,2}, -{14,3,3}, -{14,3,4}, -{14,3,5}, -{14,3,6}, -{14,3,7}, -{14,3,8}, -{14,3,9}, -{14,3,10}, -{14,3,11}, -{14,3,12}, -{14,3,13}, -{14,3,14}, -{14,3,15}, -{14,3,16}, -{14,3,17}, -{14,3,18}, -{14,3,19}, -{14,3,20}, -{14,4,-26}, -{14,4,-25}, -{14,4,-24}, -{14,4,-23}, -{14,4,-22}, -{14,4,-21}, -{14,4,-20}, -{14,4,-19}, -{14,4,-18}, -{14,4,-17}, -{14,4,-16}, -{14,4,-15}, -{14,4,-14}, -{14,4,-13}, -{14,4,-12}, -{14,4,-11}, -{14,4,-10}, -{14,4,-9}, -{14,4,-8}, -{14,4,-7}, -{14,4,-6}, -{14,4,-5}, -{14,4,-4}, -{14,4,-3}, -{14,4,-2}, -{14,4,-1}, -{14,4,0}, -{14,4,1}, -{14,4,2}, -{14,4,3}, -{14,4,4}, -{14,4,5}, -{14,4,6}, -{14,4,7}, -{14,4,8}, -{14,4,9}, -{14,4,10}, -{14,4,11}, -{14,4,12}, -{14,4,13}, -{14,4,14}, -{14,4,15}, -{14,4,16}, -{14,4,17}, -{14,4,18}, -{14,4,19}, -{14,4,20}, -{14,5,-27}, -{14,5,-26}, -{14,5,-25}, -{14,5,-24}, -{14,5,-23}, -{14,5,-22}, -{14,5,-21}, -{14,5,-20}, -{14,5,-19}, -{14,5,-18}, -{14,5,-17}, -{14,5,-16}, -{14,5,-15}, -{14,5,-14}, -{14,5,-13}, -{14,5,-12}, -{14,5,-11}, -{14,5,-10}, -{14,5,-9}, -{14,5,-8}, -{14,5,-7}, -{14,5,-6}, -{14,5,-5}, -{14,5,-4}, -{14,5,-3}, -{14,5,-2}, -{14,5,-1}, -{14,5,0}, -{14,5,1}, -{14,5,2}, -{14,5,3}, -{14,5,4}, -{14,5,5}, -{14,5,6}, -{14,5,7}, -{14,5,8}, -{14,5,9}, -{14,5,10}, -{14,5,11}, -{14,5,12}, -{14,5,13}, -{14,5,14}, -{14,5,15}, -{14,5,16}, -{14,5,17}, -{14,5,18}, -{14,5,19}, -{14,5,20}, -{14,6,-28}, -{14,6,-27}, -{14,6,-26}, -{14,6,-25}, -{14,6,-24}, -{14,6,-23}, -{14,6,-22}, -{14,6,-21}, -{14,6,-20}, -{14,6,-19}, -{14,6,-18}, -{14,6,-17}, -{14,6,-16}, -{14,6,-15}, -{14,6,-14}, -{14,6,-13}, -{14,6,-12}, -{14,6,-11}, -{14,6,-10}, -{14,6,-9}, -{14,6,-8}, -{14,6,-7}, -{14,6,-6}, -{14,6,-5}, -{14,6,-4}, -{14,6,-3}, -{14,6,-2}, -{14,6,-1}, -{14,6,0}, -{14,6,1}, -{14,6,2}, -{14,6,3}, -{14,6,4}, -{14,6,5}, -{14,6,6}, -{14,6,7}, -{14,6,8}, -{14,6,9}, -{14,6,10}, -{14,6,11}, -{14,6,12}, -{14,6,13}, -{14,6,14}, -{14,6,15}, -{14,6,16}, -{14,6,17}, -{14,6,18}, -{14,6,19}, -{14,6,20}, -{14,7,-29}, -{14,7,-28}, -{14,7,-27}, -{14,7,-26}, -{14,7,-25}, -{14,7,-24}, -{14,7,-23}, -{14,7,-22}, -{14,7,-21}, -{14,7,-20}, -{14,7,-19}, -{14,7,-18}, -{14,7,-17}, -{14,7,-16}, -{14,7,-15}, -{14,7,-14}, -{14,7,-13}, -{14,7,-12}, -{14,7,-11}, -{14,7,-10}, -{14,7,-9}, -{14,7,-8}, -{14,7,-7}, -{14,7,-6}, -{14,7,-5}, -{14,7,-4}, -{14,7,-3}, -{14,7,-2}, -{14,7,-1}, -{14,7,0}, -{14,7,1}, -{14,7,2}, -{14,7,3}, -{14,7,4}, -{14,7,5}, -{14,7,6}, -{14,7,7}, -{14,7,8}, -{14,7,9}, -{14,7,10}, -{14,7,11}, -{14,7,12}, -{14,7,13}, -{14,7,14}, -{14,7,15}, -{14,7,16}, -{14,7,17}, -{14,7,18}, -{14,7,19}, -{14,7,20}, -{14,8,-30}, -{14,8,-29}, -{14,8,-28}, -{14,8,-27}, -{14,8,-26}, -{14,8,-25}, -{14,8,-24}, -{14,8,-23}, -{14,8,-22}, -{14,8,-21}, -{14,8,-20}, -{14,8,-19}, -{14,8,-18}, -{14,8,-17}, -{14,8,-16}, -{14,8,-15}, -{14,8,-14}, -{14,8,-13}, -{14,8,-12}, -{14,8,-11}, -{14,8,-10}, -{14,8,-9}, -{14,8,-8}, -{14,8,-7}, -{14,8,-6}, -{14,8,-5}, -{14,8,-4}, -{14,8,-3}, -{14,8,-2}, -{14,8,-1}, -{14,8,0}, -{14,8,1}, -{14,8,2}, -{14,8,3}, -{14,8,4}, -{14,8,5}, -{14,8,6}, -{14,8,7}, -{14,8,8}, -{14,8,9}, -{14,8,10}, -{14,8,11}, -{14,8,12}, -{14,8,13}, -{14,8,14}, -{14,8,15}, -{14,8,16}, -{14,8,17}, -{14,8,18}, -{14,8,19}, -{14,8,20}, -{14,8,21}, -{14,9,-31}, -{14,9,-30}, -{14,9,-29}, -{14,9,-28}, -{14,9,-27}, -{14,9,-26}, -{14,9,-25}, -{14,9,-24}, -{14,9,-23}, -{14,9,-22}, -{14,9,-21}, -{14,9,-20}, -{14,9,-19}, -{14,9,-18}, -{14,9,-17}, -{14,9,-16}, -{14,9,-15}, -{14,9,-14}, -{14,9,-13}, -{14,9,-12}, -{14,9,-11}, -{14,9,-10}, -{14,9,-9}, -{14,9,-8}, -{14,9,-7}, -{14,9,-6}, -{14,9,-5}, -{14,9,-4}, -{14,9,-3}, -{14,9,-2}, -{14,9,-1}, -{14,9,0}, -{14,9,1}, -{14,9,2}, -{14,9,3}, -{14,9,4}, -{14,9,5}, -{14,9,6}, -{14,9,7}, -{14,9,8}, -{14,9,9}, -{14,9,10}, -{14,9,11}, -{14,9,12}, -{14,9,13}, -{14,9,14}, -{14,9,15}, -{14,9,16}, -{14,9,17}, -{14,9,18}, -{14,9,19}, -{14,9,20}, -{14,9,21}, -{14,10,-32}, -{14,10,-31}, -{14,10,-30}, -{14,10,-29}, -{14,10,-28}, -{14,10,-27}, -{14,10,-26}, -{14,10,-25}, -{14,10,-24}, -{14,10,-23}, -{14,10,-22}, -{14,10,-21}, -{14,10,-20}, -{14,10,-19}, -{14,10,-18}, -{14,10,-17}, -{14,10,-16}, -{14,10,-15}, -{14,10,-14}, -{14,10,-13}, -{14,10,-12}, -{14,10,-11}, -{14,10,-10}, -{14,10,-9}, -{14,10,-8}, -{14,10,-7}, -{14,10,-6}, -{14,10,-5}, -{14,10,-4}, -{14,10,-3}, -{14,10,-2}, -{14,10,-1}, -{14,10,0}, -{14,10,1}, -{14,10,2}, -{14,10,3}, -{14,10,4}, -{14,10,5}, -{14,10,6}, -{14,10,7}, -{14,10,8}, -{14,10,9}, -{14,10,10}, -{14,10,11}, -{14,10,12}, -{14,10,13}, -{14,10,14}, -{14,10,15}, -{14,10,16}, -{14,10,17}, -{14,10,18}, -{14,10,19}, -{14,10,20}, -{14,10,21}, -{14,11,-33}, -{14,11,-32}, -{14,11,-31}, -{14,11,-30}, -{14,11,-29}, -{14,11,-28}, -{14,11,-27}, -{14,11,-26}, -{14,11,-25}, -{14,11,-24}, -{14,11,-23}, -{14,11,-22}, -{14,11,-21}, -{14,11,-20}, -{14,11,-19}, -{14,11,-18}, -{14,11,-17}, -{14,11,-16}, -{14,11,-15}, -{14,11,-14}, -{14,11,-13}, -{14,11,-12}, -{14,11,-11}, -{14,11,-10}, -{14,11,-9}, -{14,11,-8}, -{14,11,-7}, -{14,11,-6}, -{14,11,-5}, -{14,11,-4}, -{14,11,-3}, -{14,11,-2}, -{14,11,-1}, -{14,11,0}, -{14,11,1}, -{14,11,2}, -{14,11,3}, -{14,11,4}, -{14,11,5}, -{14,11,6}, -{14,11,7}, -{14,11,8}, -{14,11,9}, -{14,11,10}, -{14,11,11}, -{14,11,12}, -{14,11,13}, -{14,11,14}, -{14,11,15}, -{14,11,16}, -{14,11,17}, -{14,11,18}, -{14,11,19}, -{14,11,20}, -{14,11,21}, -{14,12,-34}, -{14,12,-33}, -{14,12,-32}, -{14,12,-31}, -{14,12,-30}, -{14,12,-29}, -{14,12,-28}, -{14,12,-27}, -{14,12,-26}, -{14,12,-25}, -{14,12,-24}, -{14,12,-23}, -{14,12,-22}, -{14,12,-21}, -{14,12,-20}, -{14,12,-19}, -{14,12,-18}, -{14,12,-17}, -{14,12,-16}, -{14,12,-15}, -{14,12,-14}, -{14,12,-13}, -{14,12,-12}, -{14,12,-11}, -{14,12,-10}, -{14,12,-9}, -{14,12,-8}, -{14,12,-7}, -{14,12,-6}, -{14,12,-5}, -{14,12,-4}, -{14,12,-3}, -{14,12,-2}, -{14,12,-1}, -{14,12,0}, -{14,12,1}, -{14,12,2}, -{14,12,3}, -{14,12,4}, -{14,12,5}, -{14,12,6}, -{14,12,7}, -{14,12,8}, -{14,12,9}, -{14,12,10}, -{14,12,11}, -{14,12,12}, -{14,12,13}, -{14,12,14}, -{14,12,15}, -{14,12,16}, -{14,12,17}, -{14,12,18}, -{14,12,19}, -{14,12,20}, -{14,12,21}, -{14,13,-35}, -{14,13,-34}, -{14,13,-33}, -{14,13,-32}, -{14,13,-31}, -{14,13,-30}, -{14,13,-29}, -{14,13,-28}, -{14,13,-27}, -{14,13,-26}, -{14,13,-25}, -{14,13,-24}, -{14,13,-23}, -{14,13,-22}, -{14,13,-21}, -{14,13,-20}, -{14,13,-19}, -{14,13,-18}, -{14,13,-17}, -{14,13,-16}, -{14,13,-15}, -{14,13,-14}, -{14,13,-13}, -{14,13,-12}, -{14,13,-11}, -{14,13,-10}, -{14,13,-9}, -{14,13,-8}, -{14,13,-7}, -{14,13,-6}, -{14,13,-5}, -{14,13,-4}, -{14,13,-3}, -{14,13,-2}, -{14,13,-1}, -{14,13,0}, -{14,13,1}, -{14,13,2}, -{14,13,3}, -{14,13,4}, -{14,13,5}, -{14,13,6}, -{14,13,7}, -{14,13,8}, -{14,13,9}, -{14,13,10}, -{14,13,11}, -{14,13,12}, -{14,13,13}, -{14,13,14}, -{14,13,15}, -{14,13,16}, -{14,13,17}, -{14,13,18}, -{14,13,19}, -{14,13,20}, -{14,13,21}, -{14,14,-36}, -{14,14,-35}, -{14,14,-34}, -{14,14,-33}, -{14,14,-32}, -{14,14,-31}, -{14,14,-30}, -{14,14,-29}, -{14,14,-28}, -{14,14,-27}, -{14,14,-26}, -{14,14,-25}, -{14,14,-24}, -{14,14,-23}, -{14,14,-22}, -{14,14,-21}, -{14,14,-20}, -{14,14,-19}, -{14,14,-18}, -{14,14,-17}, -{14,14,-16}, -{14,14,-15}, -{14,14,-14}, -{14,14,-13}, -{14,14,-12}, -{14,14,-11}, -{14,14,-10}, -{14,14,-9}, -{14,14,-8}, -{14,14,-7}, -{14,14,-6}, -{14,14,-5}, -{14,14,-4}, -{14,14,-3}, -{14,14,-2}, -{14,14,-1}, -{14,14,0}, -{14,14,1}, -{14,14,2}, -{14,14,3}, -{14,14,4}, -{14,14,5}, -{14,14,6}, -{14,14,7}, -{14,14,8}, -{14,14,9}, -{14,14,10}, -{14,14,11}, -{14,14,12}, -{14,14,13}, -{14,14,14}, -{14,14,15}, -{14,14,16}, -{14,14,17}, -{14,14,18}, -{14,14,19}, -{14,14,20}, -{14,14,21}, -{14,15,-37}, -{14,15,-36}, -{14,15,-35}, -{14,15,-34}, -{14,15,-33}, -{14,15,-32}, -{14,15,-31}, -{14,15,-30}, -{14,15,-29}, -{14,15,-28}, -{14,15,-27}, -{14,15,-26}, -{14,15,-25}, -{14,15,-24}, -{14,15,-23}, -{14,15,-22}, -{14,15,-21}, -{14,15,-20}, -{14,15,-19}, -{14,15,-18}, -{14,15,-17}, -{14,15,-16}, -{14,15,-15}, -{14,15,-14}, -{14,15,-13}, -{14,15,-12}, -{14,15,-11}, -{14,15,-10}, -{14,15,-9}, -{14,15,-8}, -{14,15,-7}, -{14,15,-6}, -{14,15,-5}, -{14,15,-4}, -{14,15,-3}, -{14,15,-2}, -{14,15,-1}, -{14,15,0}, -{14,15,1}, -{14,15,2}, -{14,15,3}, -{14,15,4}, -{14,15,5}, -{14,15,6}, -{14,15,7}, -{14,15,8}, -{14,15,9}, -{14,15,10}, -{14,15,11}, -{14,15,12}, -{14,15,13}, -{14,15,14}, -{14,15,15}, -{14,15,16}, -{14,15,17}, -{14,15,18}, -{14,15,19}, -{14,15,20}, -{14,15,21}, -{14,16,-38}, -{14,16,-37}, -{14,16,-36}, -{14,16,-35}, -{14,16,-34}, -{14,16,-33}, -{14,16,-32}, -{14,16,-31}, -{14,16,-30}, -{14,16,-29}, -{14,16,-28}, -{14,16,-27}, -{14,16,-26}, -{14,16,-25}, -{14,16,-24}, -{14,16,-23}, -{14,16,-22}, -{14,16,-21}, -{14,16,-20}, -{14,16,-19}, -{14,16,-18}, -{14,16,-17}, -{14,16,-16}, -{14,16,-15}, -{14,16,-14}, -{14,16,-13}, -{14,16,-12}, -{14,16,-11}, -{14,16,-10}, -{14,16,-9}, -{14,16,-8}, -{14,16,-7}, -{14,16,-6}, -{14,16,-5}, -{14,16,-4}, -{14,16,-3}, -{14,16,-2}, -{14,16,-1}, -{14,16,0}, -{14,16,1}, -{14,16,2}, -{14,16,3}, -{14,16,4}, -{14,16,5}, -{14,16,6}, -{14,16,7}, -{14,16,8}, -{14,16,9}, -{14,16,10}, -{14,16,11}, -{14,16,12}, -{14,16,13}, -{14,16,14}, -{14,16,15}, -{14,16,16}, -{14,16,17}, -{14,16,18}, -{14,16,19}, -{14,16,20}, -{14,16,21}, -{14,17,-39}, -{14,17,-38}, -{14,17,-37}, -{14,17,-36}, -{14,17,-35}, -{14,17,-34}, -{14,17,-33}, -{14,17,-32}, -{14,17,-31}, -{14,17,-30}, -{14,17,-29}, -{14,17,-28}, -{14,17,-27}, -{14,17,-26}, -{14,17,-25}, -{14,17,-24}, -{14,17,-23}, -{14,17,-22}, -{14,17,-21}, -{14,17,-20}, -{14,17,-19}, -{14,17,-18}, -{14,17,-17}, -{14,17,-16}, -{14,17,-15}, -{14,17,-14}, -{14,17,-13}, -{14,17,-12}, -{14,17,-11}, -{14,17,-10}, -{14,17,-9}, -{14,17,-8}, -{14,17,-7}, -{14,17,-6}, -{14,17,-5}, -{14,17,-4}, -{14,17,-3}, -{14,17,-2}, -{14,17,-1}, -{14,17,0}, -{14,17,1}, -{14,17,2}, -{14,17,3}, -{14,17,4}, -{14,17,5}, -{14,17,6}, -{14,17,7}, -{14,17,8}, -{14,17,9}, -{14,17,10}, -{14,17,11}, -{14,17,12}, -{14,17,13}, -{14,17,14}, -{14,17,15}, -{14,17,16}, -{14,17,17}, -{14,17,18}, -{14,17,19}, -{14,17,20}, -{14,17,21}, -{14,18,-40}, -{14,18,-39}, -{14,18,-38}, -{14,18,-37}, -{14,18,-36}, -{14,18,-35}, -{14,18,-34}, -{14,18,-33}, -{14,18,-32}, -{14,18,-31}, -{14,18,-30}, -{14,18,-29}, -{14,18,-28}, -{14,18,-27}, -{14,18,-26}, -{14,18,-25}, -{14,18,-24}, -{14,18,-23}, -{14,18,-22}, -{14,18,-21}, -{14,18,-20}, -{14,18,-19}, -{14,18,-18}, -{14,18,-17}, -{14,18,-16}, -{14,18,-15}, -{14,18,-14}, -{14,18,-13}, -{14,18,-12}, -{14,18,-11}, -{14,18,-10}, -{14,18,-9}, -{14,18,-8}, -{14,18,-7}, -{14,18,-6}, -{14,18,-5}, -{14,18,-4}, -{14,18,-3}, -{14,18,-2}, -{14,18,-1}, -{14,18,0}, -{14,18,1}, -{14,18,2}, -{14,18,3}, -{14,18,4}, -{14,18,5}, -{14,18,6}, -{14,18,7}, -{14,18,8}, -{14,18,9}, -{14,18,10}, -{14,18,11}, -{14,18,12}, -{14,18,13}, -{14,18,14}, -{14,18,15}, -{14,18,16}, -{14,18,17}, -{14,18,18}, -{14,18,19}, -{14,18,20}, -{14,18,21}, -{14,19,-41}, -{14,19,-40}, -{14,19,-39}, -{14,19,-38}, -{14,19,-37}, -{14,19,-36}, -{14,19,-35}, -{14,19,-34}, -{14,19,-33}, -{14,19,-32}, -{14,19,-31}, -{14,19,-30}, -{14,19,-29}, -{14,19,-28}, -{14,19,-27}, -{14,19,-26}, -{14,19,-25}, -{14,19,-24}, -{14,19,-23}, -{14,19,-22}, -{14,19,-21}, -{14,19,-20}, -{14,19,-19}, -{14,19,-18}, -{14,19,-17}, -{14,19,-16}, -{14,19,-15}, -{14,19,-14}, -{14,19,-13}, -{14,19,-12}, -{14,19,-11}, -{14,19,-10}, -{14,19,-9}, -{14,19,-8}, -{14,19,-7}, -{14,19,-6}, -{14,19,-5}, -{14,19,-4}, -{14,19,-3}, -{14,19,-2}, -{14,19,-1}, -{14,19,0}, -{14,19,1}, -{14,19,2}, -{14,19,3}, -{14,19,4}, -{14,19,5}, -{14,19,6}, -{14,19,7}, -{14,19,8}, -{14,19,9}, -{14,19,10}, -{14,19,11}, -{14,19,12}, -{14,19,13}, -{14,19,14}, -{14,19,15}, -{14,19,16}, -{14,19,17}, -{14,19,18}, -{14,19,19}, -{14,19,20}, -{14,19,21}, -{14,20,-41}, -{14,20,-40}, -{14,20,-39}, -{14,20,-38}, -{14,20,-37}, -{14,20,-36}, -{14,20,-35}, -{14,20,-34}, -{14,20,-33}, -{14,20,-32}, -{14,20,-31}, -{14,20,-30}, -{14,20,-29}, -{14,20,-28}, -{14,20,-27}, -{14,20,-26}, -{14,20,-25}, -{14,20,-24}, -{14,20,-23}, -{14,20,-22}, -{14,20,-21}, -{14,20,-20}, -{14,20,-19}, -{14,20,-18}, -{14,20,-17}, -{14,20,-16}, -{14,20,-15}, -{14,20,-14}, -{14,20,-13}, -{14,20,-12}, -{14,20,-11}, -{14,20,-10}, -{14,20,-9}, -{14,20,-8}, -{14,20,-7}, -{14,20,-6}, -{14,20,-5}, -{14,20,-4}, -{14,20,-3}, -{14,20,-2}, -{14,20,-1}, -{14,20,0}, -{14,20,1}, -{14,20,2}, -{14,20,3}, -{14,20,4}, -{14,20,5}, -{14,20,6}, -{14,20,7}, -{14,20,8}, -{14,20,9}, -{14,20,10}, -{14,20,11}, -{14,20,12}, -{14,20,13}, -{14,20,14}, -{14,20,15}, -{14,20,16}, -{14,20,17}, -{14,20,18}, -{14,20,19}, -{14,20,20}, -{14,20,21}, -{14,21,-42}, -{14,21,-41}, -{14,21,-40}, -{14,21,-39}, -{14,21,-38}, -{14,21,-37}, -{14,21,-36}, -{14,21,-35}, -{14,21,-34}, -{14,21,-33}, -{14,21,-32}, -{14,21,-31}, -{14,21,-30}, -{14,21,-29}, -{14,21,-28}, -{14,21,-27}, -{14,21,-26}, -{14,21,-25}, -{14,21,-24}, -{14,21,-23}, -{14,21,-22}, -{14,21,-21}, -{14,21,-20}, -{14,21,-19}, -{14,21,-18}, -{14,21,-17}, -{14,21,-16}, -{14,21,-15}, -{14,21,-14}, -{14,21,-13}, -{14,21,-12}, -{14,21,-11}, -{14,21,-10}, -{14,21,-9}, -{14,21,-8}, -{14,21,-7}, -{14,21,-6}, -{14,21,-5}, -{14,21,-4}, -{14,21,-3}, -{14,21,-2}, -{14,21,-1}, -{14,21,0}, -{14,21,1}, -{14,21,2}, -{14,21,3}, -{14,21,4}, -{14,21,5}, -{14,21,6}, -{14,21,7}, -{14,21,8}, -{14,21,9}, -{14,21,10}, -{14,21,11}, -{14,21,12}, -{14,21,13}, -{14,21,14}, -{14,21,15}, -{14,21,16}, -{14,21,17}, -{14,21,18}, -{14,21,19}, -{14,21,20}, -{14,21,21}, -{14,22,-43}, -{14,22,-42}, -{14,22,-41}, -{14,22,-40}, -{14,22,-39}, -{14,22,-38}, -{14,22,-37}, -{14,22,-36}, -{14,22,-35}, -{14,22,-34}, -{14,22,-33}, -{14,22,-32}, -{14,22,-31}, -{14,22,-30}, -{14,22,-29}, -{14,22,-28}, -{14,22,-27}, -{14,22,-26}, -{14,22,-25}, -{14,22,-24}, -{14,22,-23}, -{14,22,-22}, -{14,22,-21}, -{14,22,-20}, -{14,22,-19}, -{14,22,-18}, -{14,22,-17}, -{14,22,-16}, -{14,22,-15}, -{14,22,-14}, -{14,22,-13}, -{14,22,-12}, -{14,22,-11}, -{14,22,-10}, -{14,22,-9}, -{14,22,-8}, -{14,22,-7}, -{14,22,-6}, -{14,22,-5}, -{14,22,-4}, -{14,22,-3}, -{14,22,-2}, -{14,22,-1}, -{14,22,0}, -{14,22,1}, -{14,22,2}, -{14,22,3}, -{14,22,4}, -{14,22,5}, -{14,22,6}, -{14,22,7}, -{14,22,8}, -{14,22,9}, -{14,22,10}, -{14,22,11}, -{14,22,12}, -{14,22,13}, -{14,22,14}, -{14,22,15}, -{14,22,16}, -{14,22,17}, -{14,22,18}, -{14,22,19}, -{14,22,20}, -{14,22,21}, -{14,23,-44}, -{14,23,-43}, -{14,23,-42}, -{14,23,-41}, -{14,23,-40}, -{14,23,-39}, -{14,23,-38}, -{14,23,-37}, -{14,23,-36}, -{14,23,-35}, -{14,23,-34}, -{14,23,-33}, -{14,23,-32}, -{14,23,-31}, -{14,23,-30}, -{14,23,-29}, -{14,23,-28}, -{14,23,-27}, -{14,23,-26}, -{14,23,-25}, -{14,23,-24}, -{14,23,-23}, -{14,23,-22}, -{14,23,-21}, -{14,23,-20}, -{14,23,-19}, -{14,23,-18}, -{14,23,-17}, -{14,23,-16}, -{14,23,-15}, -{14,23,-14}, -{14,23,-13}, -{14,23,-12}, -{14,23,-11}, -{14,23,-10}, -{14,23,-9}, -{14,23,-8}, -{14,23,-7}, -{14,23,-6}, -{14,23,-5}, -{14,23,-4}, -{14,23,-3}, -{14,23,-2}, -{14,23,-1}, -{14,23,0}, -{14,23,1}, -{14,23,2}, -{14,23,3}, -{14,23,4}, -{14,23,5}, -{14,23,6}, -{14,23,7}, -{14,23,8}, -{14,23,9}, -{14,23,10}, -{14,23,11}, -{14,23,12}, -{14,23,13}, -{14,23,14}, -{14,23,15}, -{14,23,16}, -{14,23,17}, -{14,23,18}, -{14,23,19}, -{14,23,20}, -{14,23,21}, -{14,24,-45}, -{14,24,-44}, -{14,24,-43}, -{14,24,-42}, -{14,24,-41}, -{14,24,-40}, -{14,24,-39}, -{14,24,-38}, -{14,24,-37}, -{14,24,-36}, -{14,24,-35}, -{14,24,-34}, -{14,24,-33}, -{14,24,-32}, -{14,24,-31}, -{14,24,-30}, -{14,24,-29}, -{14,24,-28}, -{14,24,-27}, -{14,24,-26}, -{14,24,-25}, -{14,24,-24}, -{14,24,-23}, -{14,24,-22}, -{14,24,-21}, -{14,24,-20}, -{14,24,-19}, -{14,24,-18}, -{14,24,-17}, -{14,24,-16}, -{14,24,-15}, -{14,24,-14}, -{14,24,-13}, -{14,24,-12}, -{14,24,-11}, -{14,24,-10}, -{14,24,-9}, -{14,24,-8}, -{14,24,-7}, -{14,24,-6}, -{14,24,-5}, -{14,24,-4}, -{14,24,-3}, -{14,24,-2}, -{14,24,-1}, -{14,24,0}, -{14,24,1}, -{14,24,2}, -{14,24,3}, -{14,24,4}, -{14,24,5}, -{14,24,6}, -{14,24,7}, -{14,24,8}, -{14,24,9}, -{14,24,10}, -{14,24,11}, -{14,24,12}, -{14,24,13}, -{14,24,14}, -{14,24,15}, -{14,24,16}, -{14,24,17}, -{14,24,18}, -{14,24,19}, -{14,24,20}, -{14,24,21}, -{14,25,-46}, -{14,25,-45}, -{14,25,-44}, -{14,25,-43}, -{14,25,-42}, -{14,25,-41}, -{14,25,-40}, -{14,25,-39}, -{14,25,-38}, -{14,25,-37}, -{14,25,-36}, -{14,25,-35}, -{14,25,-34}, -{14,25,-33}, -{14,25,-32}, -{14,25,-31}, -{14,25,-30}, -{14,25,-29}, -{14,25,-28}, -{14,25,-27}, -{14,25,-26}, -{14,25,-25}, -{14,25,-24}, -{14,25,-23}, -{14,25,-22}, -{14,25,-21}, -{14,25,-20}, -{14,25,-19}, -{14,25,-18}, -{14,25,-17}, -{14,25,-16}, -{14,25,-15}, -{14,25,-14}, -{14,25,-13}, -{14,25,-12}, -{14,25,-11}, -{14,25,-10}, -{14,25,-9}, -{14,25,-8}, -{14,25,-7}, -{14,25,-6}, -{14,25,-5}, -{14,25,-4}, -{14,25,-3}, -{14,25,-2}, -{14,25,-1}, -{14,25,0}, -{14,25,1}, -{14,25,2}, -{14,25,3}, -{14,25,4}, -{14,25,5}, -{14,25,6}, -{14,25,7}, -{14,25,8}, -{14,25,9}, -{14,25,10}, -{14,25,11}, -{14,25,12}, -{14,25,13}, -{14,25,14}, -{14,25,15}, -{14,25,16}, -{14,25,17}, -{14,25,18}, -{14,25,19}, -{14,25,20}, -{14,25,21}, -{14,26,-47}, -{14,26,-46}, -{14,26,-45}, -{14,26,-44}, -{14,26,-43}, -{14,26,-42}, -{14,26,-41}, -{14,26,-40}, -{14,26,-39}, -{14,26,-38}, -{14,26,-37}, -{14,26,-36}, -{14,26,-35}, -{14,26,-34}, -{14,26,-33}, -{14,26,-32}, -{14,26,-31}, -{14,26,-30}, -{14,26,-29}, -{14,26,-28}, -{14,26,-27}, -{14,26,-26}, -{14,26,-25}, -{14,26,-24}, -{14,26,-23}, -{14,26,-22}, -{14,26,-21}, -{14,26,-20}, -{14,26,-19}, -{14,26,-18}, -{14,26,-17}, -{14,26,-16}, -{14,26,-15}, -{14,26,-14}, -{14,26,-13}, -{14,26,-12}, -{14,26,-11}, -{14,26,-10}, -{14,26,-9}, -{14,26,-8}, -{14,26,-7}, -{14,26,-6}, -{14,26,-5}, -{14,26,-4}, -{14,26,-3}, -{14,26,-2}, -{14,26,-1}, -{14,26,0}, -{14,26,1}, -{14,26,2}, -{14,26,3}, -{14,26,4}, -{14,26,5}, -{14,26,6}, -{14,26,7}, -{14,26,8}, -{14,26,9}, -{14,26,10}, -{14,26,11}, -{14,26,12}, -{14,26,13}, -{14,26,14}, -{14,26,15}, -{14,26,16}, -{14,26,17}, -{14,26,18}, -{14,26,19}, -{14,26,20}, -{14,26,21}, -{14,27,-48}, -{14,27,-47}, -{14,27,-46}, -{14,27,-45}, -{14,27,-44}, -{14,27,-43}, -{14,27,-42}, -{14,27,-41}, -{14,27,-40}, -{14,27,-39}, -{14,27,-38}, -{14,27,-37}, -{14,27,-36}, -{14,27,-35}, -{14,27,-34}, -{14,27,-33}, -{14,27,-32}, -{14,27,-31}, -{14,27,-30}, -{14,27,-29}, -{14,27,-28}, -{14,27,-27}, -{14,27,-26}, -{14,27,-25}, -{14,27,-24}, -{14,27,-23}, -{14,27,-22}, -{14,27,-21}, -{14,27,-20}, -{14,27,-19}, -{14,27,-18}, -{14,27,-17}, -{14,27,-16}, -{14,27,-15}, -{14,27,-14}, -{14,27,-13}, -{14,27,-12}, -{14,27,-11}, -{14,27,-10}, -{14,27,-9}, -{14,27,-8}, -{14,27,-7}, -{14,27,-6}, -{14,27,-5}, -{14,27,-4}, -{14,27,-3}, -{14,27,-2}, -{14,27,-1}, -{14,27,0}, -{14,27,1}, -{14,27,2}, -{14,27,3}, -{14,27,4}, -{14,27,5}, -{14,27,6}, -{14,27,7}, -{14,27,8}, -{14,27,9}, -{14,27,10}, -{14,27,11}, -{14,27,12}, -{14,27,13}, -{14,27,14}, -{14,27,15}, -{14,27,16}, -{14,27,17}, -{14,27,18}, -{14,27,19}, -{14,27,20}, -{14,27,21}, -{14,28,-49}, -{14,28,-48}, -{14,28,-47}, -{14,28,-46}, -{14,28,-45}, -{14,28,-44}, -{14,28,-43}, -{14,28,-42}, -{14,28,-41}, -{14,28,-40}, -{14,28,-39}, -{14,28,-38}, -{14,28,-37}, -{14,28,-36}, -{14,28,-35}, -{14,28,-34}, -{14,28,-33}, -{14,28,-32}, -{14,28,-31}, -{14,28,-30}, -{14,28,-29}, -{14,28,-28}, -{14,28,-27}, -{14,28,-26}, -{14,28,-25}, -{14,28,-24}, -{14,28,-23}, -{14,28,-22}, -{14,28,-21}, -{14,28,-20}, -{14,28,-19}, -{14,28,-18}, -{14,28,-17}, -{14,28,-16}, -{14,28,-15}, -{14,28,-14}, -{14,28,-13}, -{14,28,-12}, -{14,28,-11}, -{14,28,-10}, -{14,28,-9}, -{14,28,-8}, -{14,28,-7}, -{14,28,-6}, -{14,28,-5}, -{14,28,-4}, -{14,28,-3}, -{14,28,-2}, -{14,28,-1}, -{14,28,0}, -{14,28,1}, -{14,28,2}, -{14,28,3}, -{14,28,4}, -{14,28,5}, -{14,28,6}, -{14,28,7}, -{14,28,8}, -{14,28,9}, -{14,28,10}, -{14,28,11}, -{14,28,12}, -{14,28,13}, -{14,28,14}, -{14,28,15}, -{14,28,16}, -{14,28,17}, -{14,28,18}, -{14,28,19}, -{14,28,20}, -{14,28,21}, -{14,29,-50}, -{14,29,-49}, -{14,29,-48}, -{14,29,-47}, -{14,29,-46}, -{14,29,-45}, -{14,29,-44}, -{14,29,-43}, -{14,29,-42}, -{14,29,-41}, -{14,29,-40}, -{14,29,-39}, -{14,29,-38}, -{14,29,-37}, -{14,29,-36}, -{14,29,-35}, -{14,29,-34}, -{14,29,-33}, -{14,29,-32}, -{14,29,-31}, -{14,29,-30}, -{14,29,-29}, -{14,29,-28}, -{14,29,-27}, -{14,29,-26}, -{14,29,-25}, -{14,29,-24}, -{14,29,-23}, -{14,29,-22}, -{14,29,-21}, -{14,29,-20}, -{14,29,-19}, -{14,29,-18}, -{14,29,-17}, -{14,29,-16}, -{14,29,-15}, -{14,29,-14}, -{14,29,-13}, -{14,29,-12}, -{14,29,-11}, -{14,29,-10}, -{14,29,-9}, -{14,29,-8}, -{14,29,-7}, -{14,29,-6}, -{14,29,-5}, -{14,29,-4}, -{14,29,-3}, -{14,29,-2}, -{14,29,-1}, -{14,29,0}, -{14,29,1}, -{14,29,2}, -{14,29,3}, -{14,29,4}, -{14,29,5}, -{14,29,6}, -{14,29,7}, -{14,29,8}, -{14,29,9}, -{14,29,10}, -{14,29,11}, -{14,29,12}, -{14,29,13}, -{14,29,14}, -{14,29,15}, -{14,29,16}, -{14,29,17}, -{14,29,18}, -{14,29,19}, -{14,29,20}, -{14,29,21}, -{14,30,-50}, -{14,30,-49}, -{14,30,-48}, -{14,30,-47}, -{14,30,-46}, -{14,30,-45}, -{14,30,-44}, -{14,30,-43}, -{14,30,-42}, -{14,30,-41}, -{14,30,-40}, -{14,30,-39}, -{14,30,-38}, -{14,30,-37}, -{14,30,-36}, -{14,30,-35}, -{14,30,-34}, -{14,30,-33}, -{14,30,-32}, -{14,30,-31}, -{14,30,-30}, -{14,30,-29}, -{14,30,-28}, -{14,30,-27}, -{14,30,-26}, -{14,30,-25}, -{14,30,-24}, -{14,30,-23}, -{14,30,-22}, -{14,30,-21}, -{14,30,-20}, -{14,30,-19}, -{14,30,-18}, -{14,30,-17}, -{14,30,-16}, -{14,30,-15}, -{14,30,-14}, -{14,30,-13}, -{14,30,-12}, -{14,30,-11}, -{14,30,-10}, -{14,30,-9}, -{14,30,-8}, -{14,30,-7}, -{14,30,-6}, -{14,30,-5}, -{14,30,-4}, -{14,30,-3}, -{14,30,-2}, -{14,30,-1}, -{14,30,0}, -{14,30,1}, -{14,30,2}, -{14,30,3}, -{14,30,4}, -{14,30,5}, -{14,30,6}, -{14,30,7}, -{14,30,8}, -{14,30,9}, -{14,30,10}, -{14,30,11}, -{14,30,12}, -{14,30,13}, -{14,30,14}, -{14,30,15}, -{14,30,16}, -{14,30,17}, -{14,30,18}, -{14,30,19}, -{14,30,20}, -{14,30,21}, -{14,31,-51}, -{14,31,-50}, -{14,31,-49}, -{14,31,-48}, -{14,31,-47}, -{14,31,-46}, -{14,31,-45}, -{14,31,-44}, -{14,31,-43}, -{14,31,-42}, -{14,31,-41}, -{14,31,-40}, -{14,31,-39}, -{14,31,-38}, -{14,31,-37}, -{14,31,-36}, -{14,31,-35}, -{14,31,-34}, -{14,31,-33}, -{14,31,-32}, -{14,31,-31}, -{14,31,-30}, -{14,31,-29}, -{14,31,-28}, -{14,31,-27}, -{14,31,-26}, -{14,31,-25}, -{14,31,-24}, -{14,31,-23}, -{14,31,-22}, -{14,31,-21}, -{14,31,-20}, -{14,31,-19}, -{14,31,-18}, -{14,31,-17}, -{14,31,-16}, -{14,31,-15}, -{14,31,-14}, -{14,31,-13}, -{14,31,-12}, -{14,31,-11}, -{14,31,-10}, -{14,31,-9}, -{14,31,-8}, -{14,31,-7}, -{14,31,-6}, -{14,31,-5}, -{14,31,-4}, -{14,31,-3}, -{14,31,-2}, -{14,31,-1}, -{14,31,0}, -{14,31,1}, -{14,31,2}, -{14,31,3}, -{14,31,4}, -{14,31,5}, -{14,31,6}, -{14,31,7}, -{14,31,8}, -{14,31,9}, -{14,31,10}, -{14,31,11}, -{14,31,12}, -{14,31,13}, -{14,31,14}, -{14,31,15}, -{14,31,16}, -{14,31,17}, -{14,31,18}, -{14,31,19}, -{14,31,20}, -{14,31,21}, -{14,32,-52}, -{14,32,-51}, -{14,32,-50}, -{14,32,-49}, -{14,32,-48}, -{14,32,-47}, -{14,32,-46}, -{14,32,-45}, -{14,32,-44}, -{14,32,-43}, -{14,32,-42}, -{14,32,-41}, -{14,32,-40}, -{14,32,-39}, -{14,32,-38}, -{14,32,-37}, -{14,32,-36}, -{14,32,-35}, -{14,32,-34}, -{14,32,-33}, -{14,32,-32}, -{14,32,-31}, -{14,32,-30}, -{14,32,-29}, -{14,32,-28}, -{14,32,-27}, -{14,32,-26}, -{14,32,-25}, -{14,32,-24}, -{14,32,-23}, -{14,32,-22}, -{14,32,-21}, -{14,32,-20}, -{14,32,-19}, -{14,32,-18}, -{14,32,-17}, -{14,32,-16}, -{14,32,-15}, -{14,32,-14}, -{14,32,-13}, -{14,32,-12}, -{14,32,-11}, -{14,32,-10}, -{14,32,-9}, -{14,32,-8}, -{14,32,-7}, -{14,32,-6}, -{14,32,-5}, -{14,32,-4}, -{14,32,-3}, -{14,32,-2}, -{14,32,-1}, -{14,32,0}, -{14,32,1}, -{14,32,2}, -{14,32,3}, -{14,32,4}, -{14,32,5}, -{14,32,6}, -{14,32,7}, -{14,32,8}, -{14,32,9}, -{14,32,10}, -{14,32,11}, -{14,32,12}, -{14,32,13}, -{14,32,14}, -{14,32,15}, -{14,32,16}, -{14,32,17}, -{14,32,18}, -{14,32,19}, -{14,32,20}, -{14,32,21}, -{14,33,-53}, -{14,33,-52}, -{14,33,-51}, -{14,33,-50}, -{14,33,-49}, -{14,33,-48}, -{14,33,-47}, -{14,33,-46}, -{14,33,-45}, -{14,33,-44}, -{14,33,-43}, -{14,33,-42}, -{14,33,-41}, -{14,33,-40}, -{14,33,-39}, -{14,33,-38}, -{14,33,-37}, -{14,33,-36}, -{14,33,-35}, -{14,33,-34}, -{14,33,-33}, -{14,33,-32}, -{14,33,-31}, -{14,33,-30}, -{14,33,-29}, -{14,33,-28}, -{14,33,-27}, -{14,33,-26}, -{14,33,-25}, -{14,33,-24}, -{14,33,-23}, -{14,33,-22}, -{14,33,-21}, -{14,33,-20}, -{14,33,-19}, -{14,33,-18}, -{14,33,-17}, -{14,33,-16}, -{14,33,-15}, -{14,33,-14}, -{14,33,-13}, -{14,33,-12}, -{14,33,-11}, -{14,33,-10}, -{14,33,-9}, -{14,33,-8}, -{14,33,-7}, -{14,33,-6}, -{14,33,-5}, -{14,33,-4}, -{14,33,-3}, -{14,33,-2}, -{14,33,-1}, -{14,33,0}, -{14,33,1}, -{14,33,2}, -{14,33,3}, -{14,33,4}, -{14,33,5}, -{14,33,6}, -{14,33,7}, -{14,33,8}, -{14,33,9}, -{14,33,10}, -{14,33,11}, -{14,33,12}, -{14,33,13}, -{14,33,14}, -{14,33,15}, -{14,33,16}, -{14,33,17}, -{14,33,18}, -{14,33,19}, -{14,33,20}, -{14,33,21}, -{14,33,22}, -{14,34,-54}, -{14,34,-53}, -{14,34,-52}, -{14,34,-51}, -{14,34,-50}, -{14,34,-49}, -{14,34,-48}, -{14,34,-47}, -{14,34,-46}, -{14,34,-45}, -{14,34,-44}, -{14,34,-43}, -{14,34,-42}, -{14,34,-41}, -{14,34,-40}, -{14,34,-39}, -{14,34,-38}, -{14,34,-37}, -{14,34,-36}, -{14,34,-35}, -{14,34,-34}, -{14,34,-33}, -{14,34,-32}, -{14,34,-31}, -{14,34,-30}, -{14,34,-29}, -{14,34,-28}, -{14,34,-27}, -{14,34,-26}, -{14,34,-25}, -{14,34,-24}, -{14,34,-23}, -{14,34,-22}, -{14,34,-21}, -{14,34,-20}, -{14,34,-19}, -{14,34,-18}, -{14,34,-17}, -{14,34,-16}, -{14,34,-15}, -{14,34,-14}, -{14,34,-13}, -{14,34,-12}, -{14,34,-11}, -{14,34,-10}, -{14,34,-9}, -{14,34,-8}, -{14,34,-7}, -{14,34,-6}, -{14,34,-5}, -{14,34,-4}, -{14,34,-3}, -{14,34,-2}, -{14,34,-1}, -{14,34,0}, -{14,34,1}, -{14,34,2}, -{14,34,3}, -{14,34,4}, -{14,34,5}, -{14,34,6}, -{14,34,7}, -{14,34,8}, -{14,34,9}, -{14,34,10}, -{14,34,11}, -{14,34,12}, -{14,34,13}, -{14,34,14}, -{14,34,15}, -{14,34,16}, -{14,34,17}, -{14,34,18}, -{14,34,19}, -{14,34,20}, -{14,34,21}, -{14,34,22}, -{14,35,-55}, -{14,35,-54}, -{14,35,-53}, -{14,35,-52}, -{14,35,-51}, -{14,35,-50}, -{14,35,-49}, -{14,35,-48}, -{14,35,-47}, -{14,35,-46}, -{14,35,-45}, -{14,35,-44}, -{14,35,-43}, -{14,35,-42}, -{14,35,-41}, -{14,35,-40}, -{14,35,-39}, -{14,35,-38}, -{14,35,-37}, -{14,35,-36}, -{14,35,-35}, -{14,35,-34}, -{14,35,-33}, -{14,35,-32}, -{14,35,-31}, -{14,35,-30}, -{14,35,-29}, -{14,35,-28}, -{14,35,-27}, -{14,35,-26}, -{14,35,-25}, -{14,35,-24}, -{14,35,-23}, -{14,35,-22}, -{14,35,-21}, -{14,35,-20}, -{14,35,-19}, -{14,35,-18}, -{14,35,-17}, -{14,35,-16}, -{14,35,-15}, -{14,35,-14}, -{14,35,-13}, -{14,35,-12}, -{14,35,-11}, -{14,35,-10}, -{14,35,-9}, -{14,35,-8}, -{14,35,-7}, -{14,35,-6}, -{14,35,-5}, -{14,35,-4}, -{14,35,-3}, -{14,35,-2}, -{14,35,-1}, -{14,35,0}, -{14,35,1}, -{14,35,2}, -{14,35,3}, -{14,35,4}, -{14,35,5}, -{14,35,6}, -{14,35,7}, -{14,35,8}, -{14,35,9}, -{14,35,10}, -{14,35,11}, -{14,35,12}, -{14,35,13}, -{14,35,14}, -{14,35,15}, -{14,35,16}, -{14,35,17}, -{14,35,18}, -{14,35,19}, -{14,36,-56}, -{14,36,-55}, -{14,36,-54}, -{14,36,-53}, -{14,36,-52}, -{14,36,-51}, -{14,36,-50}, -{14,36,-49}, -{14,36,-48}, -{14,36,-47}, -{14,36,-46}, -{14,36,-45}, -{14,36,-44}, -{14,36,-43}, -{14,36,-42}, -{14,36,-41}, -{14,36,-40}, -{14,36,-39}, -{14,36,-38}, -{14,36,-37}, -{14,36,-36}, -{14,36,-35}, -{14,36,-34}, -{14,36,-33}, -{14,36,-32}, -{14,36,-31}, -{14,36,-30}, -{14,36,-29}, -{14,36,-28}, -{14,36,-27}, -{14,36,-26}, -{14,36,-25}, -{14,36,-24}, -{14,36,-23}, -{14,36,-22}, -{14,36,-21}, -{14,36,-20}, -{14,36,-19}, -{14,36,-18}, -{14,36,-17}, -{14,36,-16}, -{14,36,-15}, -{14,36,-14}, -{14,36,-13}, -{14,36,-12}, -{14,36,-11}, -{14,36,-10}, -{14,36,-9}, -{14,36,-8}, -{14,36,-7}, -{14,36,-6}, -{14,36,-5}, -{14,36,-4}, -{14,36,-3}, -{14,36,-2}, -{14,36,-1}, -{14,36,0}, -{14,37,-56}, -{14,37,-55}, -{14,37,-54}, -{14,37,-53}, -{14,37,-52}, -{14,37,-51}, -{14,37,-50}, -{14,37,-49}, -{14,37,-48}, -{14,37,-47}, -{14,37,-46}, -{14,37,-45}, -{14,37,-44}, -{14,37,-43}, -{14,37,-42}, -{14,37,-41}, -{14,37,-40}, -{14,37,-39}, -{14,37,-38}, -{14,37,-37}, -{14,37,-36}, -{14,37,-35}, -{14,37,-34}, -{14,37,-33}, -{14,37,-32}, -{14,37,-31}, -{14,37,-30}, -{14,37,-29}, -{14,37,-28}, -{14,37,-27}, -{14,37,-26}, -{14,37,-25}, -{14,37,-24}, -{14,37,-23}, -{14,37,-22}, -{14,37,-21}, -{14,37,-20}, -{14,37,-19}, -{14,37,-18}, -{14,37,-17}, -{14,37,-16}, -{14,37,-15}, -{14,37,-14}, -{14,37,-13}, -{14,37,-12}, -{14,37,-11}, -{14,38,-57}, -{14,38,-56}, -{14,38,-55}, -{14,38,-54}, -{14,38,-53}, -{14,38,-52}, -{14,38,-51}, -{14,38,-50}, -{14,38,-49}, -{14,38,-48}, -{14,38,-47}, -{14,38,-46}, -{14,38,-45}, -{14,38,-44}, -{14,38,-43}, -{14,38,-42}, -{14,38,-41}, -{14,38,-40}, -{14,38,-39}, -{14,38,-38}, -{14,38,-37}, -{14,38,-36}, -{14,38,-35}, -{14,38,-34}, -{14,38,-33}, -{14,38,-32}, -{14,38,-31}, -{14,38,-30}, -{14,38,-29}, -{14,38,-28}, -{14,38,-27}, -{14,38,-26}, -{14,38,-25}, -{14,38,-24}, -{14,38,-23}, -{14,38,-22}, -{14,38,-21}, -{14,38,-20}, -{14,38,-19}, -{14,39,-58}, -{14,39,-57}, -{14,39,-56}, -{14,39,-55}, -{14,39,-54}, -{14,39,-53}, -{14,39,-52}, -{14,39,-51}, -{14,39,-50}, -{14,39,-49}, -{14,39,-48}, -{14,39,-47}, -{14,39,-46}, -{14,39,-45}, -{14,39,-44}, -{14,39,-43}, -{14,39,-42}, -{14,39,-41}, -{14,39,-40}, -{14,39,-39}, -{14,39,-38}, -{14,39,-37}, -{14,39,-36}, -{14,39,-35}, -{14,39,-34}, -{14,39,-33}, -{14,39,-32}, -{14,39,-31}, -{14,39,-30}, -{14,39,-29}, -{14,39,-28}, -{14,39,-27}, -{14,39,-26}, -{14,40,-59}, -{14,40,-58}, -{14,40,-57}, -{14,40,-56}, -{14,40,-55}, -{14,40,-54}, -{14,40,-53}, -{14,40,-52}, -{14,40,-51}, -{14,40,-50}, -{14,40,-49}, -{14,40,-48}, -{14,40,-47}, -{14,40,-46}, -{14,40,-45}, -{14,40,-44}, -{14,40,-43}, -{14,40,-42}, -{14,40,-41}, -{14,40,-40}, -{14,40,-39}, -{14,40,-38}, -{14,40,-37}, -{14,40,-36}, -{14,40,-35}, -{14,40,-34}, -{14,40,-33}, -{14,40,-32}, -{14,41,-60}, -{14,41,-59}, -{14,41,-58}, -{14,41,-57}, -{14,41,-56}, -{14,41,-55}, -{14,41,-54}, -{14,41,-53}, -{14,41,-52}, -{14,41,-51}, -{14,41,-50}, -{14,41,-49}, -{14,41,-48}, -{14,41,-47}, -{14,41,-46}, -{14,41,-45}, -{14,41,-44}, -{14,41,-43}, -{14,41,-42}, -{14,41,-41}, -{14,41,-40}, -{14,41,-39}, -{14,41,-38}, -{14,41,-37}, -{14,42,-61}, -{14,42,-60}, -{14,42,-59}, -{14,42,-58}, -{14,42,-57}, -{14,42,-56}, -{14,42,-55}, -{14,42,-54}, -{14,42,-53}, -{14,42,-52}, -{14,42,-51}, -{14,42,-50}, -{14,42,-49}, -{14,42,-48}, -{14,42,-47}, -{14,42,-46}, -{14,42,-45}, -{14,42,-44}, -{14,42,-43}, -{14,42,-42}, -{14,43,-62}, -{14,43,-61}, -{14,43,-60}, -{14,43,-59}, -{14,43,-58}, -{14,43,-57}, -{14,43,-56}, -{14,43,-55}, -{14,43,-54}, -{14,43,-53}, -{14,43,-52}, -{14,43,-51}, -{14,43,-50}, -{14,43,-49}, -{14,43,-48}, -{14,43,-47}, -{14,43,-46}, -{14,44,-62}, -{14,44,-61}, -{14,44,-60}, -{14,44,-59}, -{14,44,-58}, -{14,44,-57}, -{14,44,-56}, -{14,44,-55}, -{14,44,-54}, -{14,44,-53}, -{14,44,-52}, -{14,44,-51}, -{14,44,-50}, -{14,45,-63}, -{14,45,-62}, -{14,45,-61}, -{14,45,-60}, -{14,45,-59}, -{14,45,-58}, -{14,45,-57}, -{14,45,-56}, -{14,45,-55}, -{14,45,-54}, -{14,45,-53}, -{14,46,-64}, -{14,46,-63}, -{14,46,-62}, -{14,46,-61}, -{14,46,-60}, -{14,46,-59}, -{14,46,-58}, -{14,46,-57}, -{14,47,-65}, -{14,47,-64}, -{14,47,-63}, -{14,47,-62}, -{14,47,-61}, -{14,47,-60}, -{14,48,-66}, -{14,48,-65}, -{14,48,-64}, -{14,49,-67}, -{15,-25,20}, -{15,-25,21}, -{15,-24,17}, -{15,-24,18}, -{15,-24,19}, -{15,-24,20}, -{15,-24,21}, -{15,-23,14}, -{15,-23,15}, -{15,-23,16}, -{15,-23,17}, -{15,-23,18}, -{15,-23,19}, -{15,-23,20}, -{15,-23,21}, -{15,-22,12}, -{15,-22,13}, -{15,-22,14}, -{15,-22,15}, -{15,-22,16}, -{15,-22,17}, -{15,-22,18}, -{15,-22,19}, -{15,-22,20}, -{15,-22,21}, -{15,-21,9}, -{15,-21,10}, -{15,-21,11}, -{15,-21,12}, -{15,-21,13}, -{15,-21,14}, -{15,-21,15}, -{15,-21,16}, -{15,-21,17}, -{15,-21,18}, -{15,-21,19}, -{15,-21,20}, -{15,-21,21}, -{15,-20,7}, -{15,-20,8}, -{15,-20,9}, -{15,-20,10}, -{15,-20,11}, -{15,-20,12}, -{15,-20,13}, -{15,-20,14}, -{15,-20,15}, -{15,-20,16}, -{15,-20,17}, -{15,-20,18}, -{15,-20,19}, -{15,-20,20}, -{15,-20,21}, -{15,-19,5}, -{15,-19,6}, -{15,-19,7}, -{15,-19,8}, -{15,-19,9}, -{15,-19,10}, -{15,-19,11}, -{15,-19,12}, -{15,-19,13}, -{15,-19,14}, -{15,-19,15}, -{15,-19,16}, -{15,-19,17}, -{15,-19,18}, -{15,-19,19}, -{15,-19,20}, -{15,-19,21}, -{15,-18,3}, -{15,-18,4}, -{15,-18,5}, -{15,-18,6}, -{15,-18,7}, -{15,-18,8}, -{15,-18,9}, -{15,-18,10}, -{15,-18,11}, -{15,-18,12}, -{15,-18,13}, -{15,-18,14}, -{15,-18,15}, -{15,-18,16}, -{15,-18,17}, -{15,-18,18}, -{15,-18,19}, -{15,-18,20}, -{15,-18,21}, -{15,-17,1}, -{15,-17,2}, -{15,-17,3}, -{15,-17,4}, -{15,-17,5}, -{15,-17,6}, -{15,-17,7}, -{15,-17,8}, -{15,-17,9}, -{15,-17,10}, -{15,-17,11}, -{15,-17,12}, -{15,-17,13}, -{15,-17,14}, -{15,-17,15}, -{15,-17,16}, -{15,-17,17}, -{15,-17,18}, -{15,-17,19}, -{15,-17,20}, -{15,-17,21}, -{15,-16,0}, -{15,-16,1}, -{15,-16,2}, -{15,-16,3}, -{15,-16,4}, -{15,-16,5}, -{15,-16,6}, -{15,-16,7}, -{15,-16,8}, -{15,-16,9}, -{15,-16,10}, -{15,-16,11}, -{15,-16,12}, -{15,-16,13}, -{15,-16,14}, -{15,-16,15}, -{15,-16,16}, -{15,-16,17}, -{15,-16,18}, -{15,-16,19}, -{15,-16,20}, -{15,-16,21}, -{15,-15,-2}, -{15,-15,-1}, -{15,-15,0}, -{15,-15,1}, -{15,-15,2}, -{15,-15,3}, -{15,-15,4}, -{15,-15,5}, -{15,-15,6}, -{15,-15,7}, -{15,-15,8}, -{15,-15,9}, -{15,-15,10}, -{15,-15,11}, -{15,-15,12}, -{15,-15,13}, -{15,-15,14}, -{15,-15,15}, -{15,-15,16}, -{15,-15,17}, -{15,-15,18}, -{15,-15,19}, -{15,-15,20}, -{15,-15,21}, -{15,-14,-4}, -{15,-14,-3}, -{15,-14,-2}, -{15,-14,-1}, -{15,-14,0}, -{15,-14,1}, -{15,-14,2}, -{15,-14,3}, -{15,-14,4}, -{15,-14,5}, -{15,-14,6}, -{15,-14,7}, -{15,-14,8}, -{15,-14,9}, -{15,-14,10}, -{15,-14,11}, -{15,-14,12}, -{15,-14,13}, -{15,-14,14}, -{15,-14,15}, -{15,-14,16}, -{15,-14,17}, -{15,-14,18}, -{15,-14,19}, -{15,-14,20}, -{15,-14,21}, -{15,-13,-5}, -{15,-13,-4}, -{15,-13,-3}, -{15,-13,-2}, -{15,-13,-1}, -{15,-13,0}, -{15,-13,1}, -{15,-13,2}, -{15,-13,3}, -{15,-13,4}, -{15,-13,5}, -{15,-13,6}, -{15,-13,7}, -{15,-13,8}, -{15,-13,9}, -{15,-13,10}, -{15,-13,11}, -{15,-13,12}, -{15,-13,13}, -{15,-13,14}, -{15,-13,15}, -{15,-13,16}, -{15,-13,17}, -{15,-13,18}, -{15,-13,19}, -{15,-13,20}, -{15,-13,21}, -{15,-12,-7}, -{15,-12,-6}, -{15,-12,-5}, -{15,-12,-4}, -{15,-12,-3}, -{15,-12,-2}, -{15,-12,-1}, -{15,-12,0}, -{15,-12,1}, -{15,-12,2}, -{15,-12,3}, -{15,-12,4}, -{15,-12,5}, -{15,-12,6}, -{15,-12,7}, -{15,-12,8}, -{15,-12,9}, -{15,-12,10}, -{15,-12,11}, -{15,-12,12}, -{15,-12,13}, -{15,-12,14}, -{15,-12,15}, -{15,-12,16}, -{15,-12,17}, -{15,-12,18}, -{15,-12,19}, -{15,-12,20}, -{15,-12,21}, -{15,-11,-8}, -{15,-11,-7}, -{15,-11,-6}, -{15,-11,-5}, -{15,-11,-4}, -{15,-11,-3}, -{15,-11,-2}, -{15,-11,-1}, -{15,-11,0}, -{15,-11,1}, -{15,-11,2}, -{15,-11,3}, -{15,-11,4}, -{15,-11,5}, -{15,-11,6}, -{15,-11,7}, -{15,-11,8}, -{15,-11,9}, -{15,-11,10}, -{15,-11,11}, -{15,-11,12}, -{15,-11,13}, -{15,-11,14}, -{15,-11,15}, -{15,-11,16}, -{15,-11,17}, -{15,-11,18}, -{15,-11,19}, -{15,-11,20}, -{15,-11,21}, -{15,-10,-10}, -{15,-10,-9}, -{15,-10,-8}, -{15,-10,-7}, -{15,-10,-6}, -{15,-10,-5}, -{15,-10,-4}, -{15,-10,-3}, -{15,-10,-2}, -{15,-10,-1}, -{15,-10,0}, -{15,-10,1}, -{15,-10,2}, -{15,-10,3}, -{15,-10,4}, -{15,-10,5}, -{15,-10,6}, -{15,-10,7}, -{15,-10,8}, -{15,-10,9}, -{15,-10,10}, -{15,-10,11}, -{15,-10,12}, -{15,-10,13}, -{15,-10,14}, -{15,-10,15}, -{15,-10,16}, -{15,-10,17}, -{15,-10,18}, -{15,-10,19}, -{15,-10,20}, -{15,-10,21}, -{15,-9,-11}, -{15,-9,-10}, -{15,-9,-9}, -{15,-9,-8}, -{15,-9,-7}, -{15,-9,-6}, -{15,-9,-5}, -{15,-9,-4}, -{15,-9,-3}, -{15,-9,-2}, -{15,-9,-1}, -{15,-9,0}, -{15,-9,1}, -{15,-9,2}, -{15,-9,3}, -{15,-9,4}, -{15,-9,5}, -{15,-9,6}, -{15,-9,7}, -{15,-9,8}, -{15,-9,9}, -{15,-9,10}, -{15,-9,11}, -{15,-9,12}, -{15,-9,13}, -{15,-9,14}, -{15,-9,15}, -{15,-9,16}, -{15,-9,17}, -{15,-9,18}, -{15,-9,19}, -{15,-9,20}, -{15,-9,21}, -{15,-8,-12}, -{15,-8,-11}, -{15,-8,-10}, -{15,-8,-9}, -{15,-8,-8}, -{15,-8,-7}, -{15,-8,-6}, -{15,-8,-5}, -{15,-8,-4}, -{15,-8,-3}, -{15,-8,-2}, -{15,-8,-1}, -{15,-8,0}, -{15,-8,1}, -{15,-8,2}, -{15,-8,3}, -{15,-8,4}, -{15,-8,5}, -{15,-8,6}, -{15,-8,7}, -{15,-8,8}, -{15,-8,9}, -{15,-8,10}, -{15,-8,11}, -{15,-8,12}, -{15,-8,13}, -{15,-8,14}, -{15,-8,15}, -{15,-8,16}, -{15,-8,17}, -{15,-8,18}, -{15,-8,19}, -{15,-8,20}, -{15,-8,21}, -{15,-7,-14}, -{15,-7,-13}, -{15,-7,-12}, -{15,-7,-11}, -{15,-7,-10}, -{15,-7,-9}, -{15,-7,-8}, -{15,-7,-7}, -{15,-7,-6}, -{15,-7,-5}, -{15,-7,-4}, -{15,-7,-3}, -{15,-7,-2}, -{15,-7,-1}, -{15,-7,0}, -{15,-7,1}, -{15,-7,2}, -{15,-7,3}, -{15,-7,4}, -{15,-7,5}, -{15,-7,6}, -{15,-7,7}, -{15,-7,8}, -{15,-7,9}, -{15,-7,10}, -{15,-7,11}, -{15,-7,12}, -{15,-7,13}, -{15,-7,14}, -{15,-7,15}, -{15,-7,16}, -{15,-7,17}, -{15,-7,18}, -{15,-7,19}, -{15,-7,20}, -{15,-7,21}, -{15,-6,-15}, -{15,-6,-14}, -{15,-6,-13}, -{15,-6,-12}, -{15,-6,-11}, -{15,-6,-10}, -{15,-6,-9}, -{15,-6,-8}, -{15,-6,-7}, -{15,-6,-6}, -{15,-6,-5}, -{15,-6,-4}, -{15,-6,-3}, -{15,-6,-2}, -{15,-6,-1}, -{15,-6,0}, -{15,-6,1}, -{15,-6,2}, -{15,-6,3}, -{15,-6,4}, -{15,-6,5}, -{15,-6,6}, -{15,-6,7}, -{15,-6,8}, -{15,-6,9}, -{15,-6,10}, -{15,-6,11}, -{15,-6,12}, -{15,-6,13}, -{15,-6,14}, -{15,-6,15}, -{15,-6,16}, -{15,-6,17}, -{15,-6,18}, -{15,-6,19}, -{15,-6,20}, -{15,-6,21}, -{15,-5,-16}, -{15,-5,-15}, -{15,-5,-14}, -{15,-5,-13}, -{15,-5,-12}, -{15,-5,-11}, -{15,-5,-10}, -{15,-5,-9}, -{15,-5,-8}, -{15,-5,-7}, -{15,-5,-6}, -{15,-5,-5}, -{15,-5,-4}, -{15,-5,-3}, -{15,-5,-2}, -{15,-5,-1}, -{15,-5,0}, -{15,-5,1}, -{15,-5,2}, -{15,-5,3}, -{15,-5,4}, -{15,-5,5}, -{15,-5,6}, -{15,-5,7}, -{15,-5,8}, -{15,-5,9}, -{15,-5,10}, -{15,-5,11}, -{15,-5,12}, -{15,-5,13}, -{15,-5,14}, -{15,-5,15}, -{15,-5,16}, -{15,-5,17}, -{15,-5,18}, -{15,-5,19}, -{15,-5,20}, -{15,-5,21}, -{15,-4,-17}, -{15,-4,-16}, -{15,-4,-15}, -{15,-4,-14}, -{15,-4,-13}, -{15,-4,-12}, -{15,-4,-11}, -{15,-4,-10}, -{15,-4,-9}, -{15,-4,-8}, -{15,-4,-7}, -{15,-4,-6}, -{15,-4,-5}, -{15,-4,-4}, -{15,-4,-3}, -{15,-4,-2}, -{15,-4,-1}, -{15,-4,0}, -{15,-4,1}, -{15,-4,2}, -{15,-4,3}, -{15,-4,4}, -{15,-4,5}, -{15,-4,6}, -{15,-4,7}, -{15,-4,8}, -{15,-4,9}, -{15,-4,10}, -{15,-4,11}, -{15,-4,12}, -{15,-4,13}, -{15,-4,14}, -{15,-4,15}, -{15,-4,16}, -{15,-4,17}, -{15,-4,18}, -{15,-4,19}, -{15,-4,20}, -{15,-4,21}, -{15,-4,22}, -{15,-3,-19}, -{15,-3,-18}, -{15,-3,-17}, -{15,-3,-16}, -{15,-3,-15}, -{15,-3,-14}, -{15,-3,-13}, -{15,-3,-12}, -{15,-3,-11}, -{15,-3,-10}, -{15,-3,-9}, -{15,-3,-8}, -{15,-3,-7}, -{15,-3,-6}, -{15,-3,-5}, -{15,-3,-4}, -{15,-3,-3}, -{15,-3,-2}, -{15,-3,-1}, -{15,-3,0}, -{15,-3,1}, -{15,-3,2}, -{15,-3,3}, -{15,-3,4}, -{15,-3,5}, -{15,-3,6}, -{15,-3,7}, -{15,-3,8}, -{15,-3,9}, -{15,-3,10}, -{15,-3,11}, -{15,-3,12}, -{15,-3,13}, -{15,-3,14}, -{15,-3,15}, -{15,-3,16}, -{15,-3,17}, -{15,-3,18}, -{15,-3,19}, -{15,-3,20}, -{15,-3,21}, -{15,-3,22}, -{15,-2,-20}, -{15,-2,-19}, -{15,-2,-18}, -{15,-2,-17}, -{15,-2,-16}, -{15,-2,-15}, -{15,-2,-14}, -{15,-2,-13}, -{15,-2,-12}, -{15,-2,-11}, -{15,-2,-10}, -{15,-2,-9}, -{15,-2,-8}, -{15,-2,-7}, -{15,-2,-6}, -{15,-2,-5}, -{15,-2,-4}, -{15,-2,-3}, -{15,-2,-2}, -{15,-2,-1}, -{15,-2,0}, -{15,-2,1}, -{15,-2,2}, -{15,-2,3}, -{15,-2,4}, -{15,-2,5}, -{15,-2,6}, -{15,-2,7}, -{15,-2,8}, -{15,-2,9}, -{15,-2,10}, -{15,-2,11}, -{15,-2,12}, -{15,-2,13}, -{15,-2,14}, -{15,-2,15}, -{15,-2,16}, -{15,-2,17}, -{15,-2,18}, -{15,-2,19}, -{15,-2,20}, -{15,-2,21}, -{15,-2,22}, -{15,-1,-21}, -{15,-1,-20}, -{15,-1,-19}, -{15,-1,-18}, -{15,-1,-17}, -{15,-1,-16}, -{15,-1,-15}, -{15,-1,-14}, -{15,-1,-13}, -{15,-1,-12}, -{15,-1,-11}, -{15,-1,-10}, -{15,-1,-9}, -{15,-1,-8}, -{15,-1,-7}, -{15,-1,-6}, -{15,-1,-5}, -{15,-1,-4}, -{15,-1,-3}, -{15,-1,-2}, -{15,-1,-1}, -{15,-1,0}, -{15,-1,1}, -{15,-1,2}, -{15,-1,3}, -{15,-1,4}, -{15,-1,5}, -{15,-1,6}, -{15,-1,7}, -{15,-1,8}, -{15,-1,9}, -{15,-1,10}, -{15,-1,11}, -{15,-1,12}, -{15,-1,13}, -{15,-1,14}, -{15,-1,15}, -{15,-1,16}, -{15,-1,17}, -{15,-1,18}, -{15,-1,19}, -{15,-1,20}, -{15,-1,21}, -{15,-1,22}, -{15,0,-22}, -{15,0,-21}, -{15,0,-20}, -{15,0,-19}, -{15,0,-18}, -{15,0,-17}, -{15,0,-16}, -{15,0,-15}, -{15,0,-14}, -{15,0,-13}, -{15,0,-12}, -{15,0,-11}, -{15,0,-10}, -{15,0,-9}, -{15,0,-8}, -{15,0,-7}, -{15,0,-6}, -{15,0,-5}, -{15,0,-4}, -{15,0,-3}, -{15,0,-2}, -{15,0,-1}, -{15,0,0}, -{15,0,1}, -{15,0,2}, -{15,0,3}, -{15,0,4}, -{15,0,5}, -{15,0,6}, -{15,0,7}, -{15,0,8}, -{15,0,9}, -{15,0,10}, -{15,0,11}, -{15,0,12}, -{15,0,13}, -{15,0,14}, -{15,0,15}, -{15,0,16}, -{15,0,17}, -{15,0,18}, -{15,0,19}, -{15,0,20}, -{15,0,21}, -{15,0,22}, -{15,1,-23}, -{15,1,-22}, -{15,1,-21}, -{15,1,-20}, -{15,1,-19}, -{15,1,-18}, -{15,1,-17}, -{15,1,-16}, -{15,1,-15}, -{15,1,-14}, -{15,1,-13}, -{15,1,-12}, -{15,1,-11}, -{15,1,-10}, -{15,1,-9}, -{15,1,-8}, -{15,1,-7}, -{15,1,-6}, -{15,1,-5}, -{15,1,-4}, -{15,1,-3}, -{15,1,-2}, -{15,1,-1}, -{15,1,0}, -{15,1,1}, -{15,1,2}, -{15,1,3}, -{15,1,4}, -{15,1,5}, -{15,1,6}, -{15,1,7}, -{15,1,8}, -{15,1,9}, -{15,1,10}, -{15,1,11}, -{15,1,12}, -{15,1,13}, -{15,1,14}, -{15,1,15}, -{15,1,16}, -{15,1,17}, -{15,1,18}, -{15,1,19}, -{15,1,20}, -{15,1,21}, -{15,1,22}, -{15,2,-24}, -{15,2,-23}, -{15,2,-22}, -{15,2,-21}, -{15,2,-20}, -{15,2,-19}, -{15,2,-18}, -{15,2,-17}, -{15,2,-16}, -{15,2,-15}, -{15,2,-14}, -{15,2,-13}, -{15,2,-12}, -{15,2,-11}, -{15,2,-10}, -{15,2,-9}, -{15,2,-8}, -{15,2,-7}, -{15,2,-6}, -{15,2,-5}, -{15,2,-4}, -{15,2,-3}, -{15,2,-2}, -{15,2,-1}, -{15,2,0}, -{15,2,1}, -{15,2,2}, -{15,2,3}, -{15,2,4}, -{15,2,5}, -{15,2,6}, -{15,2,7}, -{15,2,8}, -{15,2,9}, -{15,2,10}, -{15,2,11}, -{15,2,12}, -{15,2,13}, -{15,2,14}, -{15,2,15}, -{15,2,16}, -{15,2,17}, -{15,2,18}, -{15,2,19}, -{15,2,20}, -{15,2,21}, -{15,2,22}, -{15,3,-25}, -{15,3,-24}, -{15,3,-23}, -{15,3,-22}, -{15,3,-21}, -{15,3,-20}, -{15,3,-19}, -{15,3,-18}, -{15,3,-17}, -{15,3,-16}, -{15,3,-15}, -{15,3,-14}, -{15,3,-13}, -{15,3,-12}, -{15,3,-11}, -{15,3,-10}, -{15,3,-9}, -{15,3,-8}, -{15,3,-7}, -{15,3,-6}, -{15,3,-5}, -{15,3,-4}, -{15,3,-3}, -{15,3,-2}, -{15,3,-1}, -{15,3,0}, -{15,3,1}, -{15,3,2}, -{15,3,3}, -{15,3,4}, -{15,3,5}, -{15,3,6}, -{15,3,7}, -{15,3,8}, -{15,3,9}, -{15,3,10}, -{15,3,11}, -{15,3,12}, -{15,3,13}, -{15,3,14}, -{15,3,15}, -{15,3,16}, -{15,3,17}, -{15,3,18}, -{15,3,19}, -{15,3,20}, -{15,3,21}, -{15,3,22}, -{15,4,-26}, -{15,4,-25}, -{15,4,-24}, -{15,4,-23}, -{15,4,-22}, -{15,4,-21}, -{15,4,-20}, -{15,4,-19}, -{15,4,-18}, -{15,4,-17}, -{15,4,-16}, -{15,4,-15}, -{15,4,-14}, -{15,4,-13}, -{15,4,-12}, -{15,4,-11}, -{15,4,-10}, -{15,4,-9}, -{15,4,-8}, -{15,4,-7}, -{15,4,-6}, -{15,4,-5}, -{15,4,-4}, -{15,4,-3}, -{15,4,-2}, -{15,4,-1}, -{15,4,0}, -{15,4,1}, -{15,4,2}, -{15,4,3}, -{15,4,4}, -{15,4,5}, -{15,4,6}, -{15,4,7}, -{15,4,8}, -{15,4,9}, -{15,4,10}, -{15,4,11}, -{15,4,12}, -{15,4,13}, -{15,4,14}, -{15,4,15}, -{15,4,16}, -{15,4,17}, -{15,4,18}, -{15,4,19}, -{15,4,20}, -{15,4,21}, -{15,4,22}, -{15,5,-27}, -{15,5,-26}, -{15,5,-25}, -{15,5,-24}, -{15,5,-23}, -{15,5,-22}, -{15,5,-21}, -{15,5,-20}, -{15,5,-19}, -{15,5,-18}, -{15,5,-17}, -{15,5,-16}, -{15,5,-15}, -{15,5,-14}, -{15,5,-13}, -{15,5,-12}, -{15,5,-11}, -{15,5,-10}, -{15,5,-9}, -{15,5,-8}, -{15,5,-7}, -{15,5,-6}, -{15,5,-5}, -{15,5,-4}, -{15,5,-3}, -{15,5,-2}, -{15,5,-1}, -{15,5,0}, -{15,5,1}, -{15,5,2}, -{15,5,3}, -{15,5,4}, -{15,5,5}, -{15,5,6}, -{15,5,7}, -{15,5,8}, -{15,5,9}, -{15,5,10}, -{15,5,11}, -{15,5,12}, -{15,5,13}, -{15,5,14}, -{15,5,15}, -{15,5,16}, -{15,5,17}, -{15,5,18}, -{15,5,19}, -{15,5,20}, -{15,5,21}, -{15,5,22}, -{15,6,-28}, -{15,6,-27}, -{15,6,-26}, -{15,6,-25}, -{15,6,-24}, -{15,6,-23}, -{15,6,-22}, -{15,6,-21}, -{15,6,-20}, -{15,6,-19}, -{15,6,-18}, -{15,6,-17}, -{15,6,-16}, -{15,6,-15}, -{15,6,-14}, -{15,6,-13}, -{15,6,-12}, -{15,6,-11}, -{15,6,-10}, -{15,6,-9}, -{15,6,-8}, -{15,6,-7}, -{15,6,-6}, -{15,6,-5}, -{15,6,-4}, -{15,6,-3}, -{15,6,-2}, -{15,6,-1}, -{15,6,0}, -{15,6,1}, -{15,6,2}, -{15,6,3}, -{15,6,4}, -{15,6,5}, -{15,6,6}, -{15,6,7}, -{15,6,8}, -{15,6,9}, -{15,6,10}, -{15,6,11}, -{15,6,12}, -{15,6,13}, -{15,6,14}, -{15,6,15}, -{15,6,16}, -{15,6,17}, -{15,6,18}, -{15,6,19}, -{15,6,20}, -{15,6,21}, -{15,6,22}, -{15,7,-30}, -{15,7,-29}, -{15,7,-28}, -{15,7,-27}, -{15,7,-26}, -{15,7,-25}, -{15,7,-24}, -{15,7,-23}, -{15,7,-22}, -{15,7,-21}, -{15,7,-20}, -{15,7,-19}, -{15,7,-18}, -{15,7,-17}, -{15,7,-16}, -{15,7,-15}, -{15,7,-14}, -{15,7,-13}, -{15,7,-12}, -{15,7,-11}, -{15,7,-10}, -{15,7,-9}, -{15,7,-8}, -{15,7,-7}, -{15,7,-6}, -{15,7,-5}, -{15,7,-4}, -{15,7,-3}, -{15,7,-2}, -{15,7,-1}, -{15,7,0}, -{15,7,1}, -{15,7,2}, -{15,7,3}, -{15,7,4}, -{15,7,5}, -{15,7,6}, -{15,7,7}, -{15,7,8}, -{15,7,9}, -{15,7,10}, -{15,7,11}, -{15,7,12}, -{15,7,13}, -{15,7,14}, -{15,7,15}, -{15,7,16}, -{15,7,17}, -{15,7,18}, -{15,7,19}, -{15,7,20}, -{15,7,21}, -{15,7,22}, -{15,8,-31}, -{15,8,-30}, -{15,8,-29}, -{15,8,-28}, -{15,8,-27}, -{15,8,-26}, -{15,8,-25}, -{15,8,-24}, -{15,8,-23}, -{15,8,-22}, -{15,8,-21}, -{15,8,-20}, -{15,8,-19}, -{15,8,-18}, -{15,8,-17}, -{15,8,-16}, -{15,8,-15}, -{15,8,-14}, -{15,8,-13}, -{15,8,-12}, -{15,8,-11}, -{15,8,-10}, -{15,8,-9}, -{15,8,-8}, -{15,8,-7}, -{15,8,-6}, -{15,8,-5}, -{15,8,-4}, -{15,8,-3}, -{15,8,-2}, -{15,8,-1}, -{15,8,0}, -{15,8,1}, -{15,8,2}, -{15,8,3}, -{15,8,4}, -{15,8,5}, -{15,8,6}, -{15,8,7}, -{15,8,8}, -{15,8,9}, -{15,8,10}, -{15,8,11}, -{15,8,12}, -{15,8,13}, -{15,8,14}, -{15,8,15}, -{15,8,16}, -{15,8,17}, -{15,8,18}, -{15,8,19}, -{15,8,20}, -{15,8,21}, -{15,8,22}, -{15,9,-32}, -{15,9,-31}, -{15,9,-30}, -{15,9,-29}, -{15,9,-28}, -{15,9,-27}, -{15,9,-26}, -{15,9,-25}, -{15,9,-24}, -{15,9,-23}, -{15,9,-22}, -{15,9,-21}, -{15,9,-20}, -{15,9,-19}, -{15,9,-18}, -{15,9,-17}, -{15,9,-16}, -{15,9,-15}, -{15,9,-14}, -{15,9,-13}, -{15,9,-12}, -{15,9,-11}, -{15,9,-10}, -{15,9,-9}, -{15,9,-8}, -{15,9,-7}, -{15,9,-6}, -{15,9,-5}, -{15,9,-4}, -{15,9,-3}, -{15,9,-2}, -{15,9,-1}, -{15,9,0}, -{15,9,1}, -{15,9,2}, -{15,9,3}, -{15,9,4}, -{15,9,5}, -{15,9,6}, -{15,9,7}, -{15,9,8}, -{15,9,9}, -{15,9,10}, -{15,9,11}, -{15,9,12}, -{15,9,13}, -{15,9,14}, -{15,9,15}, -{15,9,16}, -{15,9,17}, -{15,9,18}, -{15,9,19}, -{15,9,20}, -{15,9,21}, -{15,9,22}, -{15,10,-33}, -{15,10,-32}, -{15,10,-31}, -{15,10,-30}, -{15,10,-29}, -{15,10,-28}, -{15,10,-27}, -{15,10,-26}, -{15,10,-25}, -{15,10,-24}, -{15,10,-23}, -{15,10,-22}, -{15,10,-21}, -{15,10,-20}, -{15,10,-19}, -{15,10,-18}, -{15,10,-17}, -{15,10,-16}, -{15,10,-15}, -{15,10,-14}, -{15,10,-13}, -{15,10,-12}, -{15,10,-11}, -{15,10,-10}, -{15,10,-9}, -{15,10,-8}, -{15,10,-7}, -{15,10,-6}, -{15,10,-5}, -{15,10,-4}, -{15,10,-3}, -{15,10,-2}, -{15,10,-1}, -{15,10,0}, -{15,10,1}, -{15,10,2}, -{15,10,3}, -{15,10,4}, -{15,10,5}, -{15,10,6}, -{15,10,7}, -{15,10,8}, -{15,10,9}, -{15,10,10}, -{15,10,11}, -{15,10,12}, -{15,10,13}, -{15,10,14}, -{15,10,15}, -{15,10,16}, -{15,10,17}, -{15,10,18}, -{15,10,19}, -{15,10,20}, -{15,10,21}, -{15,10,22}, -{15,11,-34}, -{15,11,-33}, -{15,11,-32}, -{15,11,-31}, -{15,11,-30}, -{15,11,-29}, -{15,11,-28}, -{15,11,-27}, -{15,11,-26}, -{15,11,-25}, -{15,11,-24}, -{15,11,-23}, -{15,11,-22}, -{15,11,-21}, -{15,11,-20}, -{15,11,-19}, -{15,11,-18}, -{15,11,-17}, -{15,11,-16}, -{15,11,-15}, -{15,11,-14}, -{15,11,-13}, -{15,11,-12}, -{15,11,-11}, -{15,11,-10}, -{15,11,-9}, -{15,11,-8}, -{15,11,-7}, -{15,11,-6}, -{15,11,-5}, -{15,11,-4}, -{15,11,-3}, -{15,11,-2}, -{15,11,-1}, -{15,11,0}, -{15,11,1}, -{15,11,2}, -{15,11,3}, -{15,11,4}, -{15,11,5}, -{15,11,6}, -{15,11,7}, -{15,11,8}, -{15,11,9}, -{15,11,10}, -{15,11,11}, -{15,11,12}, -{15,11,13}, -{15,11,14}, -{15,11,15}, -{15,11,16}, -{15,11,17}, -{15,11,18}, -{15,11,19}, -{15,11,20}, -{15,11,21}, -{15,11,22}, -{15,12,-35}, -{15,12,-34}, -{15,12,-33}, -{15,12,-32}, -{15,12,-31}, -{15,12,-30}, -{15,12,-29}, -{15,12,-28}, -{15,12,-27}, -{15,12,-26}, -{15,12,-25}, -{15,12,-24}, -{15,12,-23}, -{15,12,-22}, -{15,12,-21}, -{15,12,-20}, -{15,12,-19}, -{15,12,-18}, -{15,12,-17}, -{15,12,-16}, -{15,12,-15}, -{15,12,-14}, -{15,12,-13}, -{15,12,-12}, -{15,12,-11}, -{15,12,-10}, -{15,12,-9}, -{15,12,-8}, -{15,12,-7}, -{15,12,-6}, -{15,12,-5}, -{15,12,-4}, -{15,12,-3}, -{15,12,-2}, -{15,12,-1}, -{15,12,0}, -{15,12,1}, -{15,12,2}, -{15,12,3}, -{15,12,4}, -{15,12,5}, -{15,12,6}, -{15,12,7}, -{15,12,8}, -{15,12,9}, -{15,12,10}, -{15,12,11}, -{15,12,12}, -{15,12,13}, -{15,12,14}, -{15,12,15}, -{15,12,16}, -{15,12,17}, -{15,12,18}, -{15,12,19}, -{15,12,20}, -{15,12,21}, -{15,12,22}, -{15,13,-36}, -{15,13,-35}, -{15,13,-34}, -{15,13,-33}, -{15,13,-32}, -{15,13,-31}, -{15,13,-30}, -{15,13,-29}, -{15,13,-28}, -{15,13,-27}, -{15,13,-26}, -{15,13,-25}, -{15,13,-24}, -{15,13,-23}, -{15,13,-22}, -{15,13,-21}, -{15,13,-20}, -{15,13,-19}, -{15,13,-18}, -{15,13,-17}, -{15,13,-16}, -{15,13,-15}, -{15,13,-14}, -{15,13,-13}, -{15,13,-12}, -{15,13,-11}, -{15,13,-10}, -{15,13,-9}, -{15,13,-8}, -{15,13,-7}, -{15,13,-6}, -{15,13,-5}, -{15,13,-4}, -{15,13,-3}, -{15,13,-2}, -{15,13,-1}, -{15,13,0}, -{15,13,1}, -{15,13,2}, -{15,13,3}, -{15,13,4}, -{15,13,5}, -{15,13,6}, -{15,13,7}, -{15,13,8}, -{15,13,9}, -{15,13,10}, -{15,13,11}, -{15,13,12}, -{15,13,13}, -{15,13,14}, -{15,13,15}, -{15,13,16}, -{15,13,17}, -{15,13,18}, -{15,13,19}, -{15,13,20}, -{15,13,21}, -{15,13,22}, -{15,14,-37}, -{15,14,-36}, -{15,14,-35}, -{15,14,-34}, -{15,14,-33}, -{15,14,-32}, -{15,14,-31}, -{15,14,-30}, -{15,14,-29}, -{15,14,-28}, -{15,14,-27}, -{15,14,-26}, -{15,14,-25}, -{15,14,-24}, -{15,14,-23}, -{15,14,-22}, -{15,14,-21}, -{15,14,-20}, -{15,14,-19}, -{15,14,-18}, -{15,14,-17}, -{15,14,-16}, -{15,14,-15}, -{15,14,-14}, -{15,14,-13}, -{15,14,-12}, -{15,14,-11}, -{15,14,-10}, -{15,14,-9}, -{15,14,-8}, -{15,14,-7}, -{15,14,-6}, -{15,14,-5}, -{15,14,-4}, -{15,14,-3}, -{15,14,-2}, -{15,14,-1}, -{15,14,0}, -{15,14,1}, -{15,14,2}, -{15,14,3}, -{15,14,4}, -{15,14,5}, -{15,14,6}, -{15,14,7}, -{15,14,8}, -{15,14,9}, -{15,14,10}, -{15,14,11}, -{15,14,12}, -{15,14,13}, -{15,14,14}, -{15,14,15}, -{15,14,16}, -{15,14,17}, -{15,14,18}, -{15,14,19}, -{15,14,20}, -{15,14,21}, -{15,14,22}, -{15,15,-37}, -{15,15,-36}, -{15,15,-35}, -{15,15,-34}, -{15,15,-33}, -{15,15,-32}, -{15,15,-31}, -{15,15,-30}, -{15,15,-29}, -{15,15,-28}, -{15,15,-27}, -{15,15,-26}, -{15,15,-25}, -{15,15,-24}, -{15,15,-23}, -{15,15,-22}, -{15,15,-21}, -{15,15,-20}, -{15,15,-19}, -{15,15,-18}, -{15,15,-17}, -{15,15,-16}, -{15,15,-15}, -{15,15,-14}, -{15,15,-13}, -{15,15,-12}, -{15,15,-11}, -{15,15,-10}, -{15,15,-9}, -{15,15,-8}, -{15,15,-7}, -{15,15,-6}, -{15,15,-5}, -{15,15,-4}, -{15,15,-3}, -{15,15,-2}, -{15,15,-1}, -{15,15,0}, -{15,15,1}, -{15,15,2}, -{15,15,3}, -{15,15,4}, -{15,15,5}, -{15,15,6}, -{15,15,7}, -{15,15,8}, -{15,15,9}, -{15,15,10}, -{15,15,11}, -{15,15,12}, -{15,15,13}, -{15,15,14}, -{15,15,15}, -{15,15,16}, -{15,15,17}, -{15,15,18}, -{15,15,19}, -{15,15,20}, -{15,15,21}, -{15,15,22}, -{15,16,-38}, -{15,16,-37}, -{15,16,-36}, -{15,16,-35}, -{15,16,-34}, -{15,16,-33}, -{15,16,-32}, -{15,16,-31}, -{15,16,-30}, -{15,16,-29}, -{15,16,-28}, -{15,16,-27}, -{15,16,-26}, -{15,16,-25}, -{15,16,-24}, -{15,16,-23}, -{15,16,-22}, -{15,16,-21}, -{15,16,-20}, -{15,16,-19}, -{15,16,-18}, -{15,16,-17}, -{15,16,-16}, -{15,16,-15}, -{15,16,-14}, -{15,16,-13}, -{15,16,-12}, -{15,16,-11}, -{15,16,-10}, -{15,16,-9}, -{15,16,-8}, -{15,16,-7}, -{15,16,-6}, -{15,16,-5}, -{15,16,-4}, -{15,16,-3}, -{15,16,-2}, -{15,16,-1}, -{15,16,0}, -{15,16,1}, -{15,16,2}, -{15,16,3}, -{15,16,4}, -{15,16,5}, -{15,16,6}, -{15,16,7}, -{15,16,8}, -{15,16,9}, -{15,16,10}, -{15,16,11}, -{15,16,12}, -{15,16,13}, -{15,16,14}, -{15,16,15}, -{15,16,16}, -{15,16,17}, -{15,16,18}, -{15,16,19}, -{15,16,20}, -{15,16,21}, -{15,16,22}, -{15,17,-39}, -{15,17,-38}, -{15,17,-37}, -{15,17,-36}, -{15,17,-35}, -{15,17,-34}, -{15,17,-33}, -{15,17,-32}, -{15,17,-31}, -{15,17,-30}, -{15,17,-29}, -{15,17,-28}, -{15,17,-27}, -{15,17,-26}, -{15,17,-25}, -{15,17,-24}, -{15,17,-23}, -{15,17,-22}, -{15,17,-21}, -{15,17,-20}, -{15,17,-19}, -{15,17,-18}, -{15,17,-17}, -{15,17,-16}, -{15,17,-15}, -{15,17,-14}, -{15,17,-13}, -{15,17,-12}, -{15,17,-11}, -{15,17,-10}, -{15,17,-9}, -{15,17,-8}, -{15,17,-7}, -{15,17,-6}, -{15,17,-5}, -{15,17,-4}, -{15,17,-3}, -{15,17,-2}, -{15,17,-1}, -{15,17,0}, -{15,17,1}, -{15,17,2}, -{15,17,3}, -{15,17,4}, -{15,17,5}, -{15,17,6}, -{15,17,7}, -{15,17,8}, -{15,17,9}, -{15,17,10}, -{15,17,11}, -{15,17,12}, -{15,17,13}, -{15,17,14}, -{15,17,15}, -{15,17,16}, -{15,17,17}, -{15,17,18}, -{15,17,19}, -{15,17,20}, -{15,17,21}, -{15,17,22}, -{15,18,-40}, -{15,18,-39}, -{15,18,-38}, -{15,18,-37}, -{15,18,-36}, -{15,18,-35}, -{15,18,-34}, -{15,18,-33}, -{15,18,-32}, -{15,18,-31}, -{15,18,-30}, -{15,18,-29}, -{15,18,-28}, -{15,18,-27}, -{15,18,-26}, -{15,18,-25}, -{15,18,-24}, -{15,18,-23}, -{15,18,-22}, -{15,18,-21}, -{15,18,-20}, -{15,18,-19}, -{15,18,-18}, -{15,18,-17}, -{15,18,-16}, -{15,18,-15}, -{15,18,-14}, -{15,18,-13}, -{15,18,-12}, -{15,18,-11}, -{15,18,-10}, -{15,18,-9}, -{15,18,-8}, -{15,18,-7}, -{15,18,-6}, -{15,18,-5}, -{15,18,-4}, -{15,18,-3}, -{15,18,-2}, -{15,18,-1}, -{15,18,0}, -{15,18,1}, -{15,18,2}, -{15,18,3}, -{15,18,4}, -{15,18,5}, -{15,18,6}, -{15,18,7}, -{15,18,8}, -{15,18,9}, -{15,18,10}, -{15,18,11}, -{15,18,12}, -{15,18,13}, -{15,18,14}, -{15,18,15}, -{15,18,16}, -{15,18,17}, -{15,18,18}, -{15,18,19}, -{15,18,20}, -{15,18,21}, -{15,18,22}, -{15,19,-41}, -{15,19,-40}, -{15,19,-39}, -{15,19,-38}, -{15,19,-37}, -{15,19,-36}, -{15,19,-35}, -{15,19,-34}, -{15,19,-33}, -{15,19,-32}, -{15,19,-31}, -{15,19,-30}, -{15,19,-29}, -{15,19,-28}, -{15,19,-27}, -{15,19,-26}, -{15,19,-25}, -{15,19,-24}, -{15,19,-23}, -{15,19,-22}, -{15,19,-21}, -{15,19,-20}, -{15,19,-19}, -{15,19,-18}, -{15,19,-17}, -{15,19,-16}, -{15,19,-15}, -{15,19,-14}, -{15,19,-13}, -{15,19,-12}, -{15,19,-11}, -{15,19,-10}, -{15,19,-9}, -{15,19,-8}, -{15,19,-7}, -{15,19,-6}, -{15,19,-5}, -{15,19,-4}, -{15,19,-3}, -{15,19,-2}, -{15,19,-1}, -{15,19,0}, -{15,19,1}, -{15,19,2}, -{15,19,3}, -{15,19,4}, -{15,19,5}, -{15,19,6}, -{15,19,7}, -{15,19,8}, -{15,19,9}, -{15,19,10}, -{15,19,11}, -{15,19,12}, -{15,19,13}, -{15,19,14}, -{15,19,15}, -{15,19,16}, -{15,19,17}, -{15,19,18}, -{15,19,19}, -{15,19,20}, -{15,19,21}, -{15,19,22}, -{15,20,-42}, -{15,20,-41}, -{15,20,-40}, -{15,20,-39}, -{15,20,-38}, -{15,20,-37}, -{15,20,-36}, -{15,20,-35}, -{15,20,-34}, -{15,20,-33}, -{15,20,-32}, -{15,20,-31}, -{15,20,-30}, -{15,20,-29}, -{15,20,-28}, -{15,20,-27}, -{15,20,-26}, -{15,20,-25}, -{15,20,-24}, -{15,20,-23}, -{15,20,-22}, -{15,20,-21}, -{15,20,-20}, -{15,20,-19}, -{15,20,-18}, -{15,20,-17}, -{15,20,-16}, -{15,20,-15}, -{15,20,-14}, -{15,20,-13}, -{15,20,-12}, -{15,20,-11}, -{15,20,-10}, -{15,20,-9}, -{15,20,-8}, -{15,20,-7}, -{15,20,-6}, -{15,20,-5}, -{15,20,-4}, -{15,20,-3}, -{15,20,-2}, -{15,20,-1}, -{15,20,0}, -{15,20,1}, -{15,20,2}, -{15,20,3}, -{15,20,4}, -{15,20,5}, -{15,20,6}, -{15,20,7}, -{15,20,8}, -{15,20,9}, -{15,20,10}, -{15,20,11}, -{15,20,12}, -{15,20,13}, -{15,20,14}, -{15,20,15}, -{15,20,16}, -{15,20,17}, -{15,20,18}, -{15,20,19}, -{15,20,20}, -{15,20,21}, -{15,20,22}, -{15,21,-43}, -{15,21,-42}, -{15,21,-41}, -{15,21,-40}, -{15,21,-39}, -{15,21,-38}, -{15,21,-37}, -{15,21,-36}, -{15,21,-35}, -{15,21,-34}, -{15,21,-33}, -{15,21,-32}, -{15,21,-31}, -{15,21,-30}, -{15,21,-29}, -{15,21,-28}, -{15,21,-27}, -{15,21,-26}, -{15,21,-25}, -{15,21,-24}, -{15,21,-23}, -{15,21,-22}, -{15,21,-21}, -{15,21,-20}, -{15,21,-19}, -{15,21,-18}, -{15,21,-17}, -{15,21,-16}, -{15,21,-15}, -{15,21,-14}, -{15,21,-13}, -{15,21,-12}, -{15,21,-11}, -{15,21,-10}, -{15,21,-9}, -{15,21,-8}, -{15,21,-7}, -{15,21,-6}, -{15,21,-5}, -{15,21,-4}, -{15,21,-3}, -{15,21,-2}, -{15,21,-1}, -{15,21,0}, -{15,21,1}, -{15,21,2}, -{15,21,3}, -{15,21,4}, -{15,21,5}, -{15,21,6}, -{15,21,7}, -{15,21,8}, -{15,21,9}, -{15,21,10}, -{15,21,11}, -{15,21,12}, -{15,21,13}, -{15,21,14}, -{15,21,15}, -{15,21,16}, -{15,21,17}, -{15,21,18}, -{15,21,19}, -{15,21,20}, -{15,21,21}, -{15,21,22}, -{15,22,-44}, -{15,22,-43}, -{15,22,-42}, -{15,22,-41}, -{15,22,-40}, -{15,22,-39}, -{15,22,-38}, -{15,22,-37}, -{15,22,-36}, -{15,22,-35}, -{15,22,-34}, -{15,22,-33}, -{15,22,-32}, -{15,22,-31}, -{15,22,-30}, -{15,22,-29}, -{15,22,-28}, -{15,22,-27}, -{15,22,-26}, -{15,22,-25}, -{15,22,-24}, -{15,22,-23}, -{15,22,-22}, -{15,22,-21}, -{15,22,-20}, -{15,22,-19}, -{15,22,-18}, -{15,22,-17}, -{15,22,-16}, -{15,22,-15}, -{15,22,-14}, -{15,22,-13}, -{15,22,-12}, -{15,22,-11}, -{15,22,-10}, -{15,22,-9}, -{15,22,-8}, -{15,22,-7}, -{15,22,-6}, -{15,22,-5}, -{15,22,-4}, -{15,22,-3}, -{15,22,-2}, -{15,22,-1}, -{15,22,0}, -{15,22,1}, -{15,22,2}, -{15,22,3}, -{15,22,4}, -{15,22,5}, -{15,22,6}, -{15,22,7}, -{15,22,8}, -{15,22,9}, -{15,22,10}, -{15,22,11}, -{15,22,12}, -{15,22,13}, -{15,22,14}, -{15,22,15}, -{15,22,16}, -{15,22,17}, -{15,22,18}, -{15,22,19}, -{15,22,20}, -{15,22,21}, -{15,22,22}, -{15,23,-45}, -{15,23,-44}, -{15,23,-43}, -{15,23,-42}, -{15,23,-41}, -{15,23,-40}, -{15,23,-39}, -{15,23,-38}, -{15,23,-37}, -{15,23,-36}, -{15,23,-35}, -{15,23,-34}, -{15,23,-33}, -{15,23,-32}, -{15,23,-31}, -{15,23,-30}, -{15,23,-29}, -{15,23,-28}, -{15,23,-27}, -{15,23,-26}, -{15,23,-25}, -{15,23,-24}, -{15,23,-23}, -{15,23,-22}, -{15,23,-21}, -{15,23,-20}, -{15,23,-19}, -{15,23,-18}, -{15,23,-17}, -{15,23,-16}, -{15,23,-15}, -{15,23,-14}, -{15,23,-13}, -{15,23,-12}, -{15,23,-11}, -{15,23,-10}, -{15,23,-9}, -{15,23,-8}, -{15,23,-7}, -{15,23,-6}, -{15,23,-5}, -{15,23,-4}, -{15,23,-3}, -{15,23,-2}, -{15,23,-1}, -{15,23,0}, -{15,23,1}, -{15,23,2}, -{15,23,3}, -{15,23,4}, -{15,23,5}, -{15,23,6}, -{15,23,7}, -{15,23,8}, -{15,23,9}, -{15,23,10}, -{15,23,11}, -{15,23,12}, -{15,23,13}, -{15,23,14}, -{15,23,15}, -{15,23,16}, -{15,23,17}, -{15,23,18}, -{15,23,19}, -{15,23,20}, -{15,23,21}, -{15,23,22}, -{15,24,-46}, -{15,24,-45}, -{15,24,-44}, -{15,24,-43}, -{15,24,-42}, -{15,24,-41}, -{15,24,-40}, -{15,24,-39}, -{15,24,-38}, -{15,24,-37}, -{15,24,-36}, -{15,24,-35}, -{15,24,-34}, -{15,24,-33}, -{15,24,-32}, -{15,24,-31}, -{15,24,-30}, -{15,24,-29}, -{15,24,-28}, -{15,24,-27}, -{15,24,-26}, -{15,24,-25}, -{15,24,-24}, -{15,24,-23}, -{15,24,-22}, -{15,24,-21}, -{15,24,-20}, -{15,24,-19}, -{15,24,-18}, -{15,24,-17}, -{15,24,-16}, -{15,24,-15}, -{15,24,-14}, -{15,24,-13}, -{15,24,-12}, -{15,24,-11}, -{15,24,-10}, -{15,24,-9}, -{15,24,-8}, -{15,24,-7}, -{15,24,-6}, -{15,24,-5}, -{15,24,-4}, -{15,24,-3}, -{15,24,-2}, -{15,24,-1}, -{15,24,0}, -{15,24,1}, -{15,24,2}, -{15,24,3}, -{15,24,4}, -{15,24,5}, -{15,24,6}, -{15,24,7}, -{15,24,8}, -{15,24,9}, -{15,24,10}, -{15,24,11}, -{15,24,12}, -{15,24,13}, -{15,24,14}, -{15,24,15}, -{15,24,16}, -{15,24,17}, -{15,24,18}, -{15,24,19}, -{15,24,20}, -{15,24,21}, -{15,24,22}, -{15,24,23}, -{15,25,-47}, -{15,25,-46}, -{15,25,-45}, -{15,25,-44}, -{15,25,-43}, -{15,25,-42}, -{15,25,-41}, -{15,25,-40}, -{15,25,-39}, -{15,25,-38}, -{15,25,-37}, -{15,25,-36}, -{15,25,-35}, -{15,25,-34}, -{15,25,-33}, -{15,25,-32}, -{15,25,-31}, -{15,25,-30}, -{15,25,-29}, -{15,25,-28}, -{15,25,-27}, -{15,25,-26}, -{15,25,-25}, -{15,25,-24}, -{15,25,-23}, -{15,25,-22}, -{15,25,-21}, -{15,25,-20}, -{15,25,-19}, -{15,25,-18}, -{15,25,-17}, -{15,25,-16}, -{15,25,-15}, -{15,25,-14}, -{15,25,-13}, -{15,25,-12}, -{15,25,-11}, -{15,25,-10}, -{15,25,-9}, -{15,25,-8}, -{15,25,-7}, -{15,25,-6}, -{15,25,-5}, -{15,25,-4}, -{15,25,-3}, -{15,25,-2}, -{15,25,-1}, -{15,25,0}, -{15,25,1}, -{15,25,2}, -{15,25,3}, -{15,25,4}, -{15,25,5}, -{15,25,6}, -{15,25,7}, -{15,25,8}, -{15,25,9}, -{15,25,10}, -{15,25,11}, -{15,25,12}, -{15,25,13}, -{15,25,14}, -{15,25,15}, -{15,25,16}, -{15,25,17}, -{15,25,18}, -{15,25,19}, -{15,25,20}, -{15,25,21}, -{15,25,22}, -{15,25,23}, -{15,26,-48}, -{15,26,-47}, -{15,26,-46}, -{15,26,-45}, -{15,26,-44}, -{15,26,-43}, -{15,26,-42}, -{15,26,-41}, -{15,26,-40}, -{15,26,-39}, -{15,26,-38}, -{15,26,-37}, -{15,26,-36}, -{15,26,-35}, -{15,26,-34}, -{15,26,-33}, -{15,26,-32}, -{15,26,-31}, -{15,26,-30}, -{15,26,-29}, -{15,26,-28}, -{15,26,-27}, -{15,26,-26}, -{15,26,-25}, -{15,26,-24}, -{15,26,-23}, -{15,26,-22}, -{15,26,-21}, -{15,26,-20}, -{15,26,-19}, -{15,26,-18}, -{15,26,-17}, -{15,26,-16}, -{15,26,-15}, -{15,26,-14}, -{15,26,-13}, -{15,26,-12}, -{15,26,-11}, -{15,26,-10}, -{15,26,-9}, -{15,26,-8}, -{15,26,-7}, -{15,26,-6}, -{15,26,-5}, -{15,26,-4}, -{15,26,-3}, -{15,26,-2}, -{15,26,-1}, -{15,26,0}, -{15,26,1}, -{15,26,2}, -{15,26,3}, -{15,26,4}, -{15,26,5}, -{15,26,6}, -{15,26,7}, -{15,26,8}, -{15,26,9}, -{15,26,10}, -{15,26,11}, -{15,26,12}, -{15,26,13}, -{15,26,14}, -{15,26,15}, -{15,26,16}, -{15,26,17}, -{15,26,18}, -{15,26,19}, -{15,26,20}, -{15,26,21}, -{15,26,22}, -{15,26,23}, -{15,27,-49}, -{15,27,-48}, -{15,27,-47}, -{15,27,-46}, -{15,27,-45}, -{15,27,-44}, -{15,27,-43}, -{15,27,-42}, -{15,27,-41}, -{15,27,-40}, -{15,27,-39}, -{15,27,-38}, -{15,27,-37}, -{15,27,-36}, -{15,27,-35}, -{15,27,-34}, -{15,27,-33}, -{15,27,-32}, -{15,27,-31}, -{15,27,-30}, -{15,27,-29}, -{15,27,-28}, -{15,27,-27}, -{15,27,-26}, -{15,27,-25}, -{15,27,-24}, -{15,27,-23}, -{15,27,-22}, -{15,27,-21}, -{15,27,-20}, -{15,27,-19}, -{15,27,-18}, -{15,27,-17}, -{15,27,-16}, -{15,27,-15}, -{15,27,-14}, -{15,27,-13}, -{15,27,-12}, -{15,27,-11}, -{15,27,-10}, -{15,27,-9}, -{15,27,-8}, -{15,27,-7}, -{15,27,-6}, -{15,27,-5}, -{15,27,-4}, -{15,27,-3}, -{15,27,-2}, -{15,27,-1}, -{15,27,0}, -{15,27,1}, -{15,27,2}, -{15,27,3}, -{15,27,4}, -{15,27,5}, -{15,27,6}, -{15,27,7}, -{15,27,8}, -{15,27,9}, -{15,27,10}, -{15,27,11}, -{15,27,12}, -{15,27,13}, -{15,27,14}, -{15,27,15}, -{15,27,16}, -{15,27,17}, -{15,27,18}, -{15,27,19}, -{15,27,20}, -{15,27,21}, -{15,27,22}, -{15,27,23}, -{15,28,-49}, -{15,28,-48}, -{15,28,-47}, -{15,28,-46}, -{15,28,-45}, -{15,28,-44}, -{15,28,-43}, -{15,28,-42}, -{15,28,-41}, -{15,28,-40}, -{15,28,-39}, -{15,28,-38}, -{15,28,-37}, -{15,28,-36}, -{15,28,-35}, -{15,28,-34}, -{15,28,-33}, -{15,28,-32}, -{15,28,-31}, -{15,28,-30}, -{15,28,-29}, -{15,28,-28}, -{15,28,-27}, -{15,28,-26}, -{15,28,-25}, -{15,28,-24}, -{15,28,-23}, -{15,28,-22}, -{15,28,-21}, -{15,28,-20}, -{15,28,-19}, -{15,28,-18}, -{15,28,-17}, -{15,28,-16}, -{15,28,-15}, -{15,28,-14}, -{15,28,-13}, -{15,28,-12}, -{15,28,-11}, -{15,28,-10}, -{15,28,-9}, -{15,28,-8}, -{15,28,-7}, -{15,28,-6}, -{15,28,-5}, -{15,28,-4}, -{15,28,-3}, -{15,28,-2}, -{15,28,-1}, -{15,28,0}, -{15,28,1}, -{15,28,2}, -{15,28,3}, -{15,28,4}, -{15,28,5}, -{15,28,6}, -{15,28,7}, -{15,28,8}, -{15,28,9}, -{15,28,10}, -{15,28,11}, -{15,28,12}, -{15,28,13}, -{15,28,14}, -{15,28,15}, -{15,28,16}, -{15,28,17}, -{15,28,18}, -{15,28,19}, -{15,28,20}, -{15,28,21}, -{15,28,22}, -{15,28,23}, -{15,29,-50}, -{15,29,-49}, -{15,29,-48}, -{15,29,-47}, -{15,29,-46}, -{15,29,-45}, -{15,29,-44}, -{15,29,-43}, -{15,29,-42}, -{15,29,-41}, -{15,29,-40}, -{15,29,-39}, -{15,29,-38}, -{15,29,-37}, -{15,29,-36}, -{15,29,-35}, -{15,29,-34}, -{15,29,-33}, -{15,29,-32}, -{15,29,-31}, -{15,29,-30}, -{15,29,-29}, -{15,29,-28}, -{15,29,-27}, -{15,29,-26}, -{15,29,-25}, -{15,29,-24}, -{15,29,-23}, -{15,29,-22}, -{15,29,-21}, -{15,29,-20}, -{15,29,-19}, -{15,29,-18}, -{15,29,-17}, -{15,29,-16}, -{15,29,-15}, -{15,29,-14}, -{15,29,-13}, -{15,29,-12}, -{15,29,-11}, -{15,29,-10}, -{15,29,-9}, -{15,29,-8}, -{15,29,-7}, -{15,29,-6}, -{15,29,-5}, -{15,29,-4}, -{15,29,-3}, -{15,29,-2}, -{15,29,-1}, -{15,29,0}, -{15,29,1}, -{15,29,2}, -{15,29,3}, -{15,29,4}, -{15,29,5}, -{15,29,6}, -{15,29,7}, -{15,29,8}, -{15,29,9}, -{15,29,10}, -{15,29,11}, -{15,29,12}, -{15,29,13}, -{15,29,14}, -{15,29,15}, -{15,29,16}, -{15,29,17}, -{15,29,18}, -{15,29,19}, -{15,29,20}, -{15,29,21}, -{15,29,22}, -{15,29,23}, -{15,30,-51}, -{15,30,-50}, -{15,30,-49}, -{15,30,-48}, -{15,30,-47}, -{15,30,-46}, -{15,30,-45}, -{15,30,-44}, -{15,30,-43}, -{15,30,-42}, -{15,30,-41}, -{15,30,-40}, -{15,30,-39}, -{15,30,-38}, -{15,30,-37}, -{15,30,-36}, -{15,30,-35}, -{15,30,-34}, -{15,30,-33}, -{15,30,-32}, -{15,30,-31}, -{15,30,-30}, -{15,30,-29}, -{15,30,-28}, -{15,30,-27}, -{15,30,-26}, -{15,30,-25}, -{15,30,-24}, -{15,30,-23}, -{15,30,-22}, -{15,30,-21}, -{15,30,-20}, -{15,30,-19}, -{15,30,-18}, -{15,30,-17}, -{15,30,-16}, -{15,30,-15}, -{15,30,-14}, -{15,30,-13}, -{15,30,-12}, -{15,30,-11}, -{15,30,-10}, -{15,30,-9}, -{15,30,-8}, -{15,30,-7}, -{15,30,-6}, -{15,30,-5}, -{15,30,-4}, -{15,30,-3}, -{15,30,-2}, -{15,30,-1}, -{15,30,0}, -{15,30,1}, -{15,30,2}, -{15,30,3}, -{15,30,4}, -{15,30,5}, -{15,30,6}, -{15,30,7}, -{15,30,8}, -{15,30,9}, -{15,30,10}, -{15,30,11}, -{15,30,12}, -{15,30,13}, -{15,30,14}, -{15,30,15}, -{15,30,16}, -{15,30,17}, -{15,30,18}, -{15,30,19}, -{15,30,20}, -{15,30,21}, -{15,30,22}, -{15,30,23}, -{15,31,-52}, -{15,31,-51}, -{15,31,-50}, -{15,31,-49}, -{15,31,-48}, -{15,31,-47}, -{15,31,-46}, -{15,31,-45}, -{15,31,-44}, -{15,31,-43}, -{15,31,-42}, -{15,31,-41}, -{15,31,-40}, -{15,31,-39}, -{15,31,-38}, -{15,31,-37}, -{15,31,-36}, -{15,31,-35}, -{15,31,-34}, -{15,31,-33}, -{15,31,-32}, -{15,31,-31}, -{15,31,-30}, -{15,31,-29}, -{15,31,-28}, -{15,31,-27}, -{15,31,-26}, -{15,31,-25}, -{15,31,-24}, -{15,31,-23}, -{15,31,-22}, -{15,31,-21}, -{15,31,-20}, -{15,31,-19}, -{15,31,-18}, -{15,31,-17}, -{15,31,-16}, -{15,31,-15}, -{15,31,-14}, -{15,31,-13}, -{15,31,-12}, -{15,31,-11}, -{15,31,-10}, -{15,31,-9}, -{15,31,-8}, -{15,31,-7}, -{15,31,-6}, -{15,31,-5}, -{15,31,-4}, -{15,31,-3}, -{15,31,-2}, -{15,31,-1}, -{15,31,0}, -{15,31,1}, -{15,31,2}, -{15,31,3}, -{15,31,4}, -{15,31,5}, -{15,31,6}, -{15,31,7}, -{15,31,8}, -{15,31,9}, -{15,31,10}, -{15,31,11}, -{15,31,12}, -{15,31,13}, -{15,31,14}, -{15,31,15}, -{15,31,16}, -{15,31,17}, -{15,31,18}, -{15,31,19}, -{15,31,20}, -{15,31,21}, -{15,31,22}, -{15,31,23}, -{15,32,-53}, -{15,32,-52}, -{15,32,-51}, -{15,32,-50}, -{15,32,-49}, -{15,32,-48}, -{15,32,-47}, -{15,32,-46}, -{15,32,-45}, -{15,32,-44}, -{15,32,-43}, -{15,32,-42}, -{15,32,-41}, -{15,32,-40}, -{15,32,-39}, -{15,32,-38}, -{15,32,-37}, -{15,32,-36}, -{15,32,-35}, -{15,32,-34}, -{15,32,-33}, -{15,32,-32}, -{15,32,-31}, -{15,32,-30}, -{15,32,-29}, -{15,32,-28}, -{15,32,-27}, -{15,32,-26}, -{15,32,-25}, -{15,32,-24}, -{15,32,-23}, -{15,32,-22}, -{15,32,-21}, -{15,32,-20}, -{15,32,-19}, -{15,32,-18}, -{15,32,-17}, -{15,32,-16}, -{15,32,-15}, -{15,32,-14}, -{15,32,-13}, -{15,32,-12}, -{15,32,-11}, -{15,32,-10}, -{15,32,-9}, -{15,32,-8}, -{15,32,-7}, -{15,32,-6}, -{15,32,-5}, -{15,32,-4}, -{15,32,-3}, -{15,32,-2}, -{15,32,-1}, -{15,32,0}, -{15,32,1}, -{15,32,2}, -{15,32,3}, -{15,32,4}, -{15,32,5}, -{15,32,6}, -{15,32,7}, -{15,32,8}, -{15,32,9}, -{15,32,10}, -{15,32,11}, -{15,32,12}, -{15,32,13}, -{15,32,14}, -{15,32,15}, -{15,32,16}, -{15,32,17}, -{15,32,18}, -{15,32,19}, -{15,32,20}, -{15,32,21}, -{15,32,22}, -{15,32,23}, -{15,33,-54}, -{15,33,-53}, -{15,33,-52}, -{15,33,-51}, -{15,33,-50}, -{15,33,-49}, -{15,33,-48}, -{15,33,-47}, -{15,33,-46}, -{15,33,-45}, -{15,33,-44}, -{15,33,-43}, -{15,33,-42}, -{15,33,-41}, -{15,33,-40}, -{15,33,-39}, -{15,33,-38}, -{15,33,-37}, -{15,33,-36}, -{15,33,-35}, -{15,33,-34}, -{15,33,-33}, -{15,33,-32}, -{15,33,-31}, -{15,33,-30}, -{15,33,-29}, -{15,33,-28}, -{15,33,-27}, -{15,33,-26}, -{15,33,-25}, -{15,33,-24}, -{15,33,-23}, -{15,33,-22}, -{15,33,-21}, -{15,33,-20}, -{15,33,-19}, -{15,33,-18}, -{15,33,-17}, -{15,33,-16}, -{15,33,-15}, -{15,33,-14}, -{15,33,-13}, -{15,33,-12}, -{15,33,-11}, -{15,33,-10}, -{15,33,-9}, -{15,33,-8}, -{15,33,-7}, -{15,33,-6}, -{15,33,-5}, -{15,33,-4}, -{15,33,-3}, -{15,33,-2}, -{15,33,-1}, -{15,33,0}, -{15,33,1}, -{15,33,2}, -{15,33,3}, -{15,33,4}, -{15,33,5}, -{15,33,6}, -{15,33,7}, -{15,33,8}, -{15,33,9}, -{15,33,10}, -{15,33,11}, -{15,33,12}, -{15,33,13}, -{15,33,14}, -{15,33,15}, -{15,33,16}, -{15,33,17}, -{15,33,18}, -{15,33,19}, -{15,33,20}, -{15,33,21}, -{15,33,22}, -{15,33,23}, -{15,34,-55}, -{15,34,-54}, -{15,34,-53}, -{15,34,-52}, -{15,34,-51}, -{15,34,-50}, -{15,34,-49}, -{15,34,-48}, -{15,34,-47}, -{15,34,-46}, -{15,34,-45}, -{15,34,-44}, -{15,34,-43}, -{15,34,-42}, -{15,34,-41}, -{15,34,-40}, -{15,34,-39}, -{15,34,-38}, -{15,34,-37}, -{15,34,-36}, -{15,34,-35}, -{15,34,-34}, -{15,34,-33}, -{15,34,-32}, -{15,34,-31}, -{15,34,-30}, -{15,34,-29}, -{15,34,-28}, -{15,34,-27}, -{15,34,-26}, -{15,34,-25}, -{15,34,-24}, -{15,34,-23}, -{15,34,-22}, -{15,34,-21}, -{15,34,-20}, -{15,34,-19}, -{15,34,-18}, -{15,34,-17}, -{15,34,-16}, -{15,34,-15}, -{15,34,-14}, -{15,34,-13}, -{15,34,-12}, -{15,34,-11}, -{15,34,-10}, -{15,34,-9}, -{15,34,-8}, -{15,34,-7}, -{15,34,-6}, -{15,34,-5}, -{15,34,-4}, -{15,34,-3}, -{15,34,-2}, -{15,34,-1}, -{15,34,0}, -{15,34,1}, -{15,34,2}, -{15,34,3}, -{15,34,4}, -{15,34,5}, -{15,34,6}, -{15,34,7}, -{15,34,8}, -{15,34,9}, -{15,34,10}, -{15,34,11}, -{15,34,12}, -{15,34,13}, -{15,34,14}, -{15,34,15}, -{15,34,16}, -{15,34,17}, -{15,34,18}, -{15,34,19}, -{15,34,20}, -{15,34,21}, -{15,34,22}, -{15,34,23}, -{15,35,-56}, -{15,35,-55}, -{15,35,-54}, -{15,35,-53}, -{15,35,-52}, -{15,35,-51}, -{15,35,-50}, -{15,35,-49}, -{15,35,-48}, -{15,35,-47}, -{15,35,-46}, -{15,35,-45}, -{15,35,-44}, -{15,35,-43}, -{15,35,-42}, -{15,35,-41}, -{15,35,-40}, -{15,35,-39}, -{15,35,-38}, -{15,35,-37}, -{15,35,-36}, -{15,35,-35}, -{15,35,-34}, -{15,35,-33}, -{15,35,-32}, -{15,35,-31}, -{15,35,-30}, -{15,35,-29}, -{15,35,-28}, -{15,35,-27}, -{15,35,-26}, -{15,35,-25}, -{15,35,-24}, -{15,35,-23}, -{15,35,-22}, -{15,35,-21}, -{15,35,-20}, -{15,35,-19}, -{15,35,-18}, -{15,35,-17}, -{15,35,-16}, -{15,35,-15}, -{15,35,-14}, -{15,35,-13}, -{15,35,-12}, -{15,35,-11}, -{15,35,-10}, -{15,35,-9}, -{15,35,-8}, -{15,35,-7}, -{15,35,-6}, -{15,35,-5}, -{15,35,-4}, -{15,35,-3}, -{15,35,-2}, -{15,35,-1}, -{15,35,0}, -{15,35,1}, -{15,35,2}, -{15,35,3}, -{15,35,4}, -{15,35,5}, -{15,35,6}, -{15,35,7}, -{15,35,8}, -{15,35,9}, -{15,35,10}, -{15,35,11}, -{15,35,12}, -{15,35,13}, -{15,35,14}, -{15,35,15}, -{15,35,16}, -{15,35,17}, -{15,35,18}, -{15,35,19}, -{15,35,20}, -{15,35,21}, -{15,35,22}, -{15,35,23}, -{15,36,-56}, -{15,36,-55}, -{15,36,-54}, -{15,36,-53}, -{15,36,-52}, -{15,36,-51}, -{15,36,-50}, -{15,36,-49}, -{15,36,-48}, -{15,36,-47}, -{15,36,-46}, -{15,36,-45}, -{15,36,-44}, -{15,36,-43}, -{15,36,-42}, -{15,36,-41}, -{15,36,-40}, -{15,36,-39}, -{15,36,-38}, -{15,36,-37}, -{15,36,-36}, -{15,36,-35}, -{15,36,-34}, -{15,36,-33}, -{15,36,-32}, -{15,36,-31}, -{15,36,-30}, -{15,36,-29}, -{15,36,-28}, -{15,36,-27}, -{15,36,-26}, -{15,36,-25}, -{15,36,-24}, -{15,36,-23}, -{15,36,-22}, -{15,36,-21}, -{15,36,-20}, -{15,36,-19}, -{15,36,-18}, -{15,36,-17}, -{15,36,-16}, -{15,36,-15}, -{15,36,-14}, -{15,36,-13}, -{15,36,-12}, -{15,36,-11}, -{15,36,-10}, -{15,36,-9}, -{15,36,-8}, -{15,36,-7}, -{15,36,-6}, -{15,36,-5}, -{15,36,-4}, -{15,36,-3}, -{15,36,-2}, -{15,36,-1}, -{15,36,0}, -{15,36,1}, -{15,36,2}, -{15,36,3}, -{15,36,4}, -{15,36,5}, -{15,36,6}, -{15,36,7}, -{15,36,8}, -{15,36,9}, -{15,36,10}, -{15,36,11}, -{15,36,12}, -{15,36,13}, -{15,36,14}, -{15,36,15}, -{15,36,16}, -{15,36,17}, -{15,36,18}, -{15,36,19}, -{15,36,20}, -{15,36,21}, -{15,36,22}, -{15,36,23}, -{15,37,-57}, -{15,37,-56}, -{15,37,-55}, -{15,37,-54}, -{15,37,-53}, -{15,37,-52}, -{15,37,-51}, -{15,37,-50}, -{15,37,-49}, -{15,37,-48}, -{15,37,-47}, -{15,37,-46}, -{15,37,-45}, -{15,37,-44}, -{15,37,-43}, -{15,37,-42}, -{15,37,-41}, -{15,37,-40}, -{15,37,-39}, -{15,37,-38}, -{15,37,-37}, -{15,37,-36}, -{15,37,-35}, -{15,37,-34}, -{15,37,-33}, -{15,37,-32}, -{15,37,-31}, -{15,37,-30}, -{15,37,-29}, -{15,37,-28}, -{15,37,-27}, -{15,37,-26}, -{15,37,-25}, -{15,37,-24}, -{15,37,-23}, -{15,37,-22}, -{15,37,-21}, -{15,37,-20}, -{15,37,-19}, -{15,37,-18}, -{15,37,-17}, -{15,37,-16}, -{15,37,-15}, -{15,37,-14}, -{15,37,-13}, -{15,37,-12}, -{15,37,-11}, -{15,37,-10}, -{15,37,-9}, -{15,37,-8}, -{15,37,-7}, -{15,37,-6}, -{15,37,-5}, -{15,37,-4}, -{15,37,-3}, -{15,37,-2}, -{15,37,-1}, -{15,37,0}, -{15,37,1}, -{15,37,2}, -{15,37,3}, -{15,38,-58}, -{15,38,-57}, -{15,38,-56}, -{15,38,-55}, -{15,38,-54}, -{15,38,-53}, -{15,38,-52}, -{15,38,-51}, -{15,38,-50}, -{15,38,-49}, -{15,38,-48}, -{15,38,-47}, -{15,38,-46}, -{15,38,-45}, -{15,38,-44}, -{15,38,-43}, -{15,38,-42}, -{15,38,-41}, -{15,38,-40}, -{15,38,-39}, -{15,38,-38}, -{15,38,-37}, -{15,38,-36}, -{15,38,-35}, -{15,38,-34}, -{15,38,-33}, -{15,38,-32}, -{15,38,-31}, -{15,38,-30}, -{15,38,-29}, -{15,38,-28}, -{15,38,-27}, -{15,38,-26}, -{15,38,-25}, -{15,38,-24}, -{15,38,-23}, -{15,38,-22}, -{15,38,-21}, -{15,38,-20}, -{15,38,-19}, -{15,38,-18}, -{15,38,-17}, -{15,38,-16}, -{15,38,-15}, -{15,38,-14}, -{15,38,-13}, -{15,38,-12}, -{15,38,-11}, -{15,38,-10}, -{15,38,-9}, -{15,39,-59}, -{15,39,-58}, -{15,39,-57}, -{15,39,-56}, -{15,39,-55}, -{15,39,-54}, -{15,39,-53}, -{15,39,-52}, -{15,39,-51}, -{15,39,-50}, -{15,39,-49}, -{15,39,-48}, -{15,39,-47}, -{15,39,-46}, -{15,39,-45}, -{15,39,-44}, -{15,39,-43}, -{15,39,-42}, -{15,39,-41}, -{15,39,-40}, -{15,39,-39}, -{15,39,-38}, -{15,39,-37}, -{15,39,-36}, -{15,39,-35}, -{15,39,-34}, -{15,39,-33}, -{15,39,-32}, -{15,39,-31}, -{15,39,-30}, -{15,39,-29}, -{15,39,-28}, -{15,39,-27}, -{15,39,-26}, -{15,39,-25}, -{15,39,-24}, -{15,39,-23}, -{15,39,-22}, -{15,39,-21}, -{15,39,-20}, -{15,39,-19}, -{15,39,-18}, -{15,40,-60}, -{15,40,-59}, -{15,40,-58}, -{15,40,-57}, -{15,40,-56}, -{15,40,-55}, -{15,40,-54}, -{15,40,-53}, -{15,40,-52}, -{15,40,-51}, -{15,40,-50}, -{15,40,-49}, -{15,40,-48}, -{15,40,-47}, -{15,40,-46}, -{15,40,-45}, -{15,40,-44}, -{15,40,-43}, -{15,40,-42}, -{15,40,-41}, -{15,40,-40}, -{15,40,-39}, -{15,40,-38}, -{15,40,-37}, -{15,40,-36}, -{15,40,-35}, -{15,40,-34}, -{15,40,-33}, -{15,40,-32}, -{15,40,-31}, -{15,40,-30}, -{15,40,-29}, -{15,40,-28}, -{15,40,-27}, -{15,40,-26}, -{15,40,-25}, -{15,41,-61}, -{15,41,-60}, -{15,41,-59}, -{15,41,-58}, -{15,41,-57}, -{15,41,-56}, -{15,41,-55}, -{15,41,-54}, -{15,41,-53}, -{15,41,-52}, -{15,41,-51}, -{15,41,-50}, -{15,41,-49}, -{15,41,-48}, -{15,41,-47}, -{15,41,-46}, -{15,41,-45}, -{15,41,-44}, -{15,41,-43}, -{15,41,-42}, -{15,41,-41}, -{15,41,-40}, -{15,41,-39}, -{15,41,-38}, -{15,41,-37}, -{15,41,-36}, -{15,41,-35}, -{15,41,-34}, -{15,41,-33}, -{15,41,-32}, -{15,41,-31}, -{15,42,-62}, -{15,42,-61}, -{15,42,-60}, -{15,42,-59}, -{15,42,-58}, -{15,42,-57}, -{15,42,-56}, -{15,42,-55}, -{15,42,-54}, -{15,42,-53}, -{15,42,-52}, -{15,42,-51}, -{15,42,-50}, -{15,42,-49}, -{15,42,-48}, -{15,42,-47}, -{15,42,-46}, -{15,42,-45}, -{15,42,-44}, -{15,42,-43}, -{15,42,-42}, -{15,42,-41}, -{15,42,-40}, -{15,42,-39}, -{15,42,-38}, -{15,42,-37}, -{15,42,-36}, -{15,43,-62}, -{15,43,-61}, -{15,43,-60}, -{15,43,-59}, -{15,43,-58}, -{15,43,-57}, -{15,43,-56}, -{15,43,-55}, -{15,43,-54}, -{15,43,-53}, -{15,43,-52}, -{15,43,-51}, -{15,43,-50}, -{15,43,-49}, -{15,43,-48}, -{15,43,-47}, -{15,43,-46}, -{15,43,-45}, -{15,43,-44}, -{15,43,-43}, -{15,43,-42}, -{15,43,-41}, -{15,44,-63}, -{15,44,-62}, -{15,44,-61}, -{15,44,-60}, -{15,44,-59}, -{15,44,-58}, -{15,44,-57}, -{15,44,-56}, -{15,44,-55}, -{15,44,-54}, -{15,44,-53}, -{15,44,-52}, -{15,44,-51}, -{15,44,-50}, -{15,44,-49}, -{15,44,-48}, -{15,44,-47}, -{15,44,-46}, -{15,45,-64}, -{15,45,-63}, -{15,45,-62}, -{15,45,-61}, -{15,45,-60}, -{15,45,-59}, -{15,45,-58}, -{15,45,-57}, -{15,45,-56}, -{15,45,-55}, -{15,45,-54}, -{15,45,-53}, -{15,45,-52}, -{15,45,-51}, -{15,45,-50}, -{15,46,-65}, -{15,46,-64}, -{15,46,-63}, -{15,46,-62}, -{15,46,-61}, -{15,46,-60}, -{15,46,-59}, -{15,46,-58}, -{15,46,-57}, -{15,46,-56}, -{15,46,-55}, -{15,46,-54}, -{15,46,-53}, -{15,47,-66}, -{15,47,-65}, -{15,47,-64}, -{15,47,-63}, -{15,47,-62}, -{15,47,-61}, -{15,47,-60}, -{15,47,-59}, -{15,47,-58}, -{15,47,-57}, -{15,48,-67}, -{15,48,-66}, -{15,48,-65}, -{15,48,-64}, -{15,48,-63}, -{15,48,-62}, -{15,48,-61}, -{15,48,-60}, -{15,49,-67}, -{15,49,-66}, -{15,49,-65}, -{15,49,-64}, -{15,50,-68}, -{15,50,-67}, -{16,-26,21}, -{16,-26,22}, -{16,-25,18}, -{16,-25,19}, -{16,-25,20}, -{16,-25,21}, -{16,-25,22}, -{16,-24,16}, -{16,-24,17}, -{16,-24,18}, -{16,-24,19}, -{16,-24,20}, -{16,-24,21}, -{16,-24,22}, -{16,-23,13}, -{16,-23,14}, -{16,-23,15}, -{16,-23,16}, -{16,-23,17}, -{16,-23,18}, -{16,-23,19}, -{16,-23,20}, -{16,-23,21}, -{16,-23,22}, -{16,-22,10}, -{16,-22,11}, -{16,-22,12}, -{16,-22,13}, -{16,-22,14}, -{16,-22,15}, -{16,-22,16}, -{16,-22,17}, -{16,-22,18}, -{16,-22,19}, -{16,-22,20}, -{16,-22,21}, -{16,-22,22}, -{16,-21,8}, -{16,-21,9}, -{16,-21,10}, -{16,-21,11}, -{16,-21,12}, -{16,-21,13}, -{16,-21,14}, -{16,-21,15}, -{16,-21,16}, -{16,-21,17}, -{16,-21,18}, -{16,-21,19}, -{16,-21,20}, -{16,-21,21}, -{16,-21,22}, -{16,-20,6}, -{16,-20,7}, -{16,-20,8}, -{16,-20,9}, -{16,-20,10}, -{16,-20,11}, -{16,-20,12}, -{16,-20,13}, -{16,-20,14}, -{16,-20,15}, -{16,-20,16}, -{16,-20,17}, -{16,-20,18}, -{16,-20,19}, -{16,-20,20}, -{16,-20,21}, -{16,-20,22}, -{16,-19,4}, -{16,-19,5}, -{16,-19,6}, -{16,-19,7}, -{16,-19,8}, -{16,-19,9}, -{16,-19,10}, -{16,-19,11}, -{16,-19,12}, -{16,-19,13}, -{16,-19,14}, -{16,-19,15}, -{16,-19,16}, -{16,-19,17}, -{16,-19,18}, -{16,-19,19}, -{16,-19,20}, -{16,-19,21}, -{16,-19,22}, -{16,-18,2}, -{16,-18,3}, -{16,-18,4}, -{16,-18,5}, -{16,-18,6}, -{16,-18,7}, -{16,-18,8}, -{16,-18,9}, -{16,-18,10}, -{16,-18,11}, -{16,-18,12}, -{16,-18,13}, -{16,-18,14}, -{16,-18,15}, -{16,-18,16}, -{16,-18,17}, -{16,-18,18}, -{16,-18,19}, -{16,-18,20}, -{16,-18,21}, -{16,-18,22}, -{16,-17,0}, -{16,-17,1}, -{16,-17,2}, -{16,-17,3}, -{16,-17,4}, -{16,-17,5}, -{16,-17,6}, -{16,-17,7}, -{16,-17,8}, -{16,-17,9}, -{16,-17,10}, -{16,-17,11}, -{16,-17,12}, -{16,-17,13}, -{16,-17,14}, -{16,-17,15}, -{16,-17,16}, -{16,-17,17}, -{16,-17,18}, -{16,-17,19}, -{16,-17,20}, -{16,-17,21}, -{16,-17,22}, -{16,-16,-1}, -{16,-16,0}, -{16,-16,1}, -{16,-16,2}, -{16,-16,3}, -{16,-16,4}, -{16,-16,5}, -{16,-16,6}, -{16,-16,7}, -{16,-16,8}, -{16,-16,9}, -{16,-16,10}, -{16,-16,11}, -{16,-16,12}, -{16,-16,13}, -{16,-16,14}, -{16,-16,15}, -{16,-16,16}, -{16,-16,17}, -{16,-16,18}, -{16,-16,19}, -{16,-16,20}, -{16,-16,21}, -{16,-16,22}, -{16,-15,-3}, -{16,-15,-2}, -{16,-15,-1}, -{16,-15,0}, -{16,-15,1}, -{16,-15,2}, -{16,-15,3}, -{16,-15,4}, -{16,-15,5}, -{16,-15,6}, -{16,-15,7}, -{16,-15,8}, -{16,-15,9}, -{16,-15,10}, -{16,-15,11}, -{16,-15,12}, -{16,-15,13}, -{16,-15,14}, -{16,-15,15}, -{16,-15,16}, -{16,-15,17}, -{16,-15,18}, -{16,-15,19}, -{16,-15,20}, -{16,-15,21}, -{16,-15,22}, -{16,-15,23}, -{16,-14,-5}, -{16,-14,-4}, -{16,-14,-3}, -{16,-14,-2}, -{16,-14,-1}, -{16,-14,0}, -{16,-14,1}, -{16,-14,2}, -{16,-14,3}, -{16,-14,4}, -{16,-14,5}, -{16,-14,6}, -{16,-14,7}, -{16,-14,8}, -{16,-14,9}, -{16,-14,10}, -{16,-14,11}, -{16,-14,12}, -{16,-14,13}, -{16,-14,14}, -{16,-14,15}, -{16,-14,16}, -{16,-14,17}, -{16,-14,18}, -{16,-14,19}, -{16,-14,20}, -{16,-14,21}, -{16,-14,22}, -{16,-14,23}, -{16,-13,-6}, -{16,-13,-5}, -{16,-13,-4}, -{16,-13,-3}, -{16,-13,-2}, -{16,-13,-1}, -{16,-13,0}, -{16,-13,1}, -{16,-13,2}, -{16,-13,3}, -{16,-13,4}, -{16,-13,5}, -{16,-13,6}, -{16,-13,7}, -{16,-13,8}, -{16,-13,9}, -{16,-13,10}, -{16,-13,11}, -{16,-13,12}, -{16,-13,13}, -{16,-13,14}, -{16,-13,15}, -{16,-13,16}, -{16,-13,17}, -{16,-13,18}, -{16,-13,19}, -{16,-13,20}, -{16,-13,21}, -{16,-13,22}, -{16,-13,23}, -{16,-12,-8}, -{16,-12,-7}, -{16,-12,-6}, -{16,-12,-5}, -{16,-12,-4}, -{16,-12,-3}, -{16,-12,-2}, -{16,-12,-1}, -{16,-12,0}, -{16,-12,1}, -{16,-12,2}, -{16,-12,3}, -{16,-12,4}, -{16,-12,5}, -{16,-12,6}, -{16,-12,7}, -{16,-12,8}, -{16,-12,9}, -{16,-12,10}, -{16,-12,11}, -{16,-12,12}, -{16,-12,13}, -{16,-12,14}, -{16,-12,15}, -{16,-12,16}, -{16,-12,17}, -{16,-12,18}, -{16,-12,19}, -{16,-12,20}, -{16,-12,21}, -{16,-12,22}, -{16,-12,23}, -{16,-11,-9}, -{16,-11,-8}, -{16,-11,-7}, -{16,-11,-6}, -{16,-11,-5}, -{16,-11,-4}, -{16,-11,-3}, -{16,-11,-2}, -{16,-11,-1}, -{16,-11,0}, -{16,-11,1}, -{16,-11,2}, -{16,-11,3}, -{16,-11,4}, -{16,-11,5}, -{16,-11,6}, -{16,-11,7}, -{16,-11,8}, -{16,-11,9}, -{16,-11,10}, -{16,-11,11}, -{16,-11,12}, -{16,-11,13}, -{16,-11,14}, -{16,-11,15}, -{16,-11,16}, -{16,-11,17}, -{16,-11,18}, -{16,-11,19}, -{16,-11,20}, -{16,-11,21}, -{16,-11,22}, -{16,-11,23}, -{16,-10,-10}, -{16,-10,-9}, -{16,-10,-8}, -{16,-10,-7}, -{16,-10,-6}, -{16,-10,-5}, -{16,-10,-4}, -{16,-10,-3}, -{16,-10,-2}, -{16,-10,-1}, -{16,-10,0}, -{16,-10,1}, -{16,-10,2}, -{16,-10,3}, -{16,-10,4}, -{16,-10,5}, -{16,-10,6}, -{16,-10,7}, -{16,-10,8}, -{16,-10,9}, -{16,-10,10}, -{16,-10,11}, -{16,-10,12}, -{16,-10,13}, -{16,-10,14}, -{16,-10,15}, -{16,-10,16}, -{16,-10,17}, -{16,-10,18}, -{16,-10,19}, -{16,-10,20}, -{16,-10,21}, -{16,-10,22}, -{16,-10,23}, -{16,-9,-12}, -{16,-9,-11}, -{16,-9,-10}, -{16,-9,-9}, -{16,-9,-8}, -{16,-9,-7}, -{16,-9,-6}, -{16,-9,-5}, -{16,-9,-4}, -{16,-9,-3}, -{16,-9,-2}, -{16,-9,-1}, -{16,-9,0}, -{16,-9,1}, -{16,-9,2}, -{16,-9,3}, -{16,-9,4}, -{16,-9,5}, -{16,-9,6}, -{16,-9,7}, -{16,-9,8}, -{16,-9,9}, -{16,-9,10}, -{16,-9,11}, -{16,-9,12}, -{16,-9,13}, -{16,-9,14}, -{16,-9,15}, -{16,-9,16}, -{16,-9,17}, -{16,-9,18}, -{16,-9,19}, -{16,-9,20}, -{16,-9,21}, -{16,-9,22}, -{16,-9,23}, -{16,-8,-13}, -{16,-8,-12}, -{16,-8,-11}, -{16,-8,-10}, -{16,-8,-9}, -{16,-8,-8}, -{16,-8,-7}, -{16,-8,-6}, -{16,-8,-5}, -{16,-8,-4}, -{16,-8,-3}, -{16,-8,-2}, -{16,-8,-1}, -{16,-8,0}, -{16,-8,1}, -{16,-8,2}, -{16,-8,3}, -{16,-8,4}, -{16,-8,5}, -{16,-8,6}, -{16,-8,7}, -{16,-8,8}, -{16,-8,9}, -{16,-8,10}, -{16,-8,11}, -{16,-8,12}, -{16,-8,13}, -{16,-8,14}, -{16,-8,15}, -{16,-8,16}, -{16,-8,17}, -{16,-8,18}, -{16,-8,19}, -{16,-8,20}, -{16,-8,21}, -{16,-8,22}, -{16,-8,23}, -{16,-7,-14}, -{16,-7,-13}, -{16,-7,-12}, -{16,-7,-11}, -{16,-7,-10}, -{16,-7,-9}, -{16,-7,-8}, -{16,-7,-7}, -{16,-7,-6}, -{16,-7,-5}, -{16,-7,-4}, -{16,-7,-3}, -{16,-7,-2}, -{16,-7,-1}, -{16,-7,0}, -{16,-7,1}, -{16,-7,2}, -{16,-7,3}, -{16,-7,4}, -{16,-7,5}, -{16,-7,6}, -{16,-7,7}, -{16,-7,8}, -{16,-7,9}, -{16,-7,10}, -{16,-7,11}, -{16,-7,12}, -{16,-7,13}, -{16,-7,14}, -{16,-7,15}, -{16,-7,16}, -{16,-7,17}, -{16,-7,18}, -{16,-7,19}, -{16,-7,20}, -{16,-7,21}, -{16,-7,22}, -{16,-7,23}, -{16,-6,-16}, -{16,-6,-15}, -{16,-6,-14}, -{16,-6,-13}, -{16,-6,-12}, -{16,-6,-11}, -{16,-6,-10}, -{16,-6,-9}, -{16,-6,-8}, -{16,-6,-7}, -{16,-6,-6}, -{16,-6,-5}, -{16,-6,-4}, -{16,-6,-3}, -{16,-6,-2}, -{16,-6,-1}, -{16,-6,0}, -{16,-6,1}, -{16,-6,2}, -{16,-6,3}, -{16,-6,4}, -{16,-6,5}, -{16,-6,6}, -{16,-6,7}, -{16,-6,8}, -{16,-6,9}, -{16,-6,10}, -{16,-6,11}, -{16,-6,12}, -{16,-6,13}, -{16,-6,14}, -{16,-6,15}, -{16,-6,16}, -{16,-6,17}, -{16,-6,18}, -{16,-6,19}, -{16,-6,20}, -{16,-6,21}, -{16,-6,22}, -{16,-6,23}, -{16,-5,-17}, -{16,-5,-16}, -{16,-5,-15}, -{16,-5,-14}, -{16,-5,-13}, -{16,-5,-12}, -{16,-5,-11}, -{16,-5,-10}, -{16,-5,-9}, -{16,-5,-8}, -{16,-5,-7}, -{16,-5,-6}, -{16,-5,-5}, -{16,-5,-4}, -{16,-5,-3}, -{16,-5,-2}, -{16,-5,-1}, -{16,-5,0}, -{16,-5,1}, -{16,-5,2}, -{16,-5,3}, -{16,-5,4}, -{16,-5,5}, -{16,-5,6}, -{16,-5,7}, -{16,-5,8}, -{16,-5,9}, -{16,-5,10}, -{16,-5,11}, -{16,-5,12}, -{16,-5,13}, -{16,-5,14}, -{16,-5,15}, -{16,-5,16}, -{16,-5,17}, -{16,-5,18}, -{16,-5,19}, -{16,-5,20}, -{16,-5,21}, -{16,-5,22}, -{16,-5,23}, -{16,-4,-18}, -{16,-4,-17}, -{16,-4,-16}, -{16,-4,-15}, -{16,-4,-14}, -{16,-4,-13}, -{16,-4,-12}, -{16,-4,-11}, -{16,-4,-10}, -{16,-4,-9}, -{16,-4,-8}, -{16,-4,-7}, -{16,-4,-6}, -{16,-4,-5}, -{16,-4,-4}, -{16,-4,-3}, -{16,-4,-2}, -{16,-4,-1}, -{16,-4,0}, -{16,-4,1}, -{16,-4,2}, -{16,-4,3}, -{16,-4,4}, -{16,-4,5}, -{16,-4,6}, -{16,-4,7}, -{16,-4,8}, -{16,-4,9}, -{16,-4,10}, -{16,-4,11}, -{16,-4,12}, -{16,-4,13}, -{16,-4,14}, -{16,-4,15}, -{16,-4,16}, -{16,-4,17}, -{16,-4,18}, -{16,-4,19}, -{16,-4,20}, -{16,-4,21}, -{16,-4,22}, -{16,-4,23}, -{16,-3,-19}, -{16,-3,-18}, -{16,-3,-17}, -{16,-3,-16}, -{16,-3,-15}, -{16,-3,-14}, -{16,-3,-13}, -{16,-3,-12}, -{16,-3,-11}, -{16,-3,-10}, -{16,-3,-9}, -{16,-3,-8}, -{16,-3,-7}, -{16,-3,-6}, -{16,-3,-5}, -{16,-3,-4}, -{16,-3,-3}, -{16,-3,-2}, -{16,-3,-1}, -{16,-3,0}, -{16,-3,1}, -{16,-3,2}, -{16,-3,3}, -{16,-3,4}, -{16,-3,5}, -{16,-3,6}, -{16,-3,7}, -{16,-3,8}, -{16,-3,9}, -{16,-3,10}, -{16,-3,11}, -{16,-3,12}, -{16,-3,13}, -{16,-3,14}, -{16,-3,15}, -{16,-3,16}, -{16,-3,17}, -{16,-3,18}, -{16,-3,19}, -{16,-3,20}, -{16,-3,21}, -{16,-3,22}, -{16,-3,23}, -{16,-2,-20}, -{16,-2,-19}, -{16,-2,-18}, -{16,-2,-17}, -{16,-2,-16}, -{16,-2,-15}, -{16,-2,-14}, -{16,-2,-13}, -{16,-2,-12}, -{16,-2,-11}, -{16,-2,-10}, -{16,-2,-9}, -{16,-2,-8}, -{16,-2,-7}, -{16,-2,-6}, -{16,-2,-5}, -{16,-2,-4}, -{16,-2,-3}, -{16,-2,-2}, -{16,-2,-1}, -{16,-2,0}, -{16,-2,1}, -{16,-2,2}, -{16,-2,3}, -{16,-2,4}, -{16,-2,5}, -{16,-2,6}, -{16,-2,7}, -{16,-2,8}, -{16,-2,9}, -{16,-2,10}, -{16,-2,11}, -{16,-2,12}, -{16,-2,13}, -{16,-2,14}, -{16,-2,15}, -{16,-2,16}, -{16,-2,17}, -{16,-2,18}, -{16,-2,19}, -{16,-2,20}, -{16,-2,21}, -{16,-2,22}, -{16,-2,23}, -{16,-1,-22}, -{16,-1,-21}, -{16,-1,-20}, -{16,-1,-19}, -{16,-1,-18}, -{16,-1,-17}, -{16,-1,-16}, -{16,-1,-15}, -{16,-1,-14}, -{16,-1,-13}, -{16,-1,-12}, -{16,-1,-11}, -{16,-1,-10}, -{16,-1,-9}, -{16,-1,-8}, -{16,-1,-7}, -{16,-1,-6}, -{16,-1,-5}, -{16,-1,-4}, -{16,-1,-3}, -{16,-1,-2}, -{16,-1,-1}, -{16,-1,0}, -{16,-1,1}, -{16,-1,2}, -{16,-1,3}, -{16,-1,4}, -{16,-1,5}, -{16,-1,6}, -{16,-1,7}, -{16,-1,8}, -{16,-1,9}, -{16,-1,10}, -{16,-1,11}, -{16,-1,12}, -{16,-1,13}, -{16,-1,14}, -{16,-1,15}, -{16,-1,16}, -{16,-1,17}, -{16,-1,18}, -{16,-1,19}, -{16,-1,20}, -{16,-1,21}, -{16,-1,22}, -{16,-1,23}, -{16,0,-23}, -{16,0,-22}, -{16,0,-21}, -{16,0,-20}, -{16,0,-19}, -{16,0,-18}, -{16,0,-17}, -{16,0,-16}, -{16,0,-15}, -{16,0,-14}, -{16,0,-13}, -{16,0,-12}, -{16,0,-11}, -{16,0,-10}, -{16,0,-9}, -{16,0,-8}, -{16,0,-7}, -{16,0,-6}, -{16,0,-5}, -{16,0,-4}, -{16,0,-3}, -{16,0,-2}, -{16,0,-1}, -{16,0,0}, -{16,0,1}, -{16,0,2}, -{16,0,3}, -{16,0,4}, -{16,0,5}, -{16,0,6}, -{16,0,7}, -{16,0,8}, -{16,0,9}, -{16,0,10}, -{16,0,11}, -{16,0,12}, -{16,0,13}, -{16,0,14}, -{16,0,15}, -{16,0,16}, -{16,0,17}, -{16,0,18}, -{16,0,19}, -{16,0,20}, -{16,0,21}, -{16,0,22}, -{16,0,23}, -{16,1,-24}, -{16,1,-23}, -{16,1,-22}, -{16,1,-21}, -{16,1,-20}, -{16,1,-19}, -{16,1,-18}, -{16,1,-17}, -{16,1,-16}, -{16,1,-15}, -{16,1,-14}, -{16,1,-13}, -{16,1,-12}, -{16,1,-11}, -{16,1,-10}, -{16,1,-9}, -{16,1,-8}, -{16,1,-7}, -{16,1,-6}, -{16,1,-5}, -{16,1,-4}, -{16,1,-3}, -{16,1,-2}, -{16,1,-1}, -{16,1,0}, -{16,1,1}, -{16,1,2}, -{16,1,3}, -{16,1,4}, -{16,1,5}, -{16,1,6}, -{16,1,7}, -{16,1,8}, -{16,1,9}, -{16,1,10}, -{16,1,11}, -{16,1,12}, -{16,1,13}, -{16,1,14}, -{16,1,15}, -{16,1,16}, -{16,1,17}, -{16,1,18}, -{16,1,19}, -{16,1,20}, -{16,1,21}, -{16,1,22}, -{16,1,23}, -{16,2,-25}, -{16,2,-24}, -{16,2,-23}, -{16,2,-22}, -{16,2,-21}, -{16,2,-20}, -{16,2,-19}, -{16,2,-18}, -{16,2,-17}, -{16,2,-16}, -{16,2,-15}, -{16,2,-14}, -{16,2,-13}, -{16,2,-12}, -{16,2,-11}, -{16,2,-10}, -{16,2,-9}, -{16,2,-8}, -{16,2,-7}, -{16,2,-6}, -{16,2,-5}, -{16,2,-4}, -{16,2,-3}, -{16,2,-2}, -{16,2,-1}, -{16,2,0}, -{16,2,1}, -{16,2,2}, -{16,2,3}, -{16,2,4}, -{16,2,5}, -{16,2,6}, -{16,2,7}, -{16,2,8}, -{16,2,9}, -{16,2,10}, -{16,2,11}, -{16,2,12}, -{16,2,13}, -{16,2,14}, -{16,2,15}, -{16,2,16}, -{16,2,17}, -{16,2,18}, -{16,2,19}, -{16,2,20}, -{16,2,21}, -{16,2,22}, -{16,2,23}, -{16,3,-26}, -{16,3,-25}, -{16,3,-24}, -{16,3,-23}, -{16,3,-22}, -{16,3,-21}, -{16,3,-20}, -{16,3,-19}, -{16,3,-18}, -{16,3,-17}, -{16,3,-16}, -{16,3,-15}, -{16,3,-14}, -{16,3,-13}, -{16,3,-12}, -{16,3,-11}, -{16,3,-10}, -{16,3,-9}, -{16,3,-8}, -{16,3,-7}, -{16,3,-6}, -{16,3,-5}, -{16,3,-4}, -{16,3,-3}, -{16,3,-2}, -{16,3,-1}, -{16,3,0}, -{16,3,1}, -{16,3,2}, -{16,3,3}, -{16,3,4}, -{16,3,5}, -{16,3,6}, -{16,3,7}, -{16,3,8}, -{16,3,9}, -{16,3,10}, -{16,3,11}, -{16,3,12}, -{16,3,13}, -{16,3,14}, -{16,3,15}, -{16,3,16}, -{16,3,17}, -{16,3,18}, -{16,3,19}, -{16,3,20}, -{16,3,21}, -{16,3,22}, -{16,3,23}, -{16,4,-27}, -{16,4,-26}, -{16,4,-25}, -{16,4,-24}, -{16,4,-23}, -{16,4,-22}, -{16,4,-21}, -{16,4,-20}, -{16,4,-19}, -{16,4,-18}, -{16,4,-17}, -{16,4,-16}, -{16,4,-15}, -{16,4,-14}, -{16,4,-13}, -{16,4,-12}, -{16,4,-11}, -{16,4,-10}, -{16,4,-9}, -{16,4,-8}, -{16,4,-7}, -{16,4,-6}, -{16,4,-5}, -{16,4,-4}, -{16,4,-3}, -{16,4,-2}, -{16,4,-1}, -{16,4,0}, -{16,4,1}, -{16,4,2}, -{16,4,3}, -{16,4,4}, -{16,4,5}, -{16,4,6}, -{16,4,7}, -{16,4,8}, -{16,4,9}, -{16,4,10}, -{16,4,11}, -{16,4,12}, -{16,4,13}, -{16,4,14}, -{16,4,15}, -{16,4,16}, -{16,4,17}, -{16,4,18}, -{16,4,19}, -{16,4,20}, -{16,4,21}, -{16,4,22}, -{16,4,23}, -{16,5,-28}, -{16,5,-27}, -{16,5,-26}, -{16,5,-25}, -{16,5,-24}, -{16,5,-23}, -{16,5,-22}, -{16,5,-21}, -{16,5,-20}, -{16,5,-19}, -{16,5,-18}, -{16,5,-17}, -{16,5,-16}, -{16,5,-15}, -{16,5,-14}, -{16,5,-13}, -{16,5,-12}, -{16,5,-11}, -{16,5,-10}, -{16,5,-9}, -{16,5,-8}, -{16,5,-7}, -{16,5,-6}, -{16,5,-5}, -{16,5,-4}, -{16,5,-3}, -{16,5,-2}, -{16,5,-1}, -{16,5,0}, -{16,5,1}, -{16,5,2}, -{16,5,3}, -{16,5,4}, -{16,5,5}, -{16,5,6}, -{16,5,7}, -{16,5,8}, -{16,5,9}, -{16,5,10}, -{16,5,11}, -{16,5,12}, -{16,5,13}, -{16,5,14}, -{16,5,15}, -{16,5,16}, -{16,5,17}, -{16,5,18}, -{16,5,19}, -{16,5,20}, -{16,5,21}, -{16,5,22}, -{16,5,23}, -{16,6,-29}, -{16,6,-28}, -{16,6,-27}, -{16,6,-26}, -{16,6,-25}, -{16,6,-24}, -{16,6,-23}, -{16,6,-22}, -{16,6,-21}, -{16,6,-20}, -{16,6,-19}, -{16,6,-18}, -{16,6,-17}, -{16,6,-16}, -{16,6,-15}, -{16,6,-14}, -{16,6,-13}, -{16,6,-12}, -{16,6,-11}, -{16,6,-10}, -{16,6,-9}, -{16,6,-8}, -{16,6,-7}, -{16,6,-6}, -{16,6,-5}, -{16,6,-4}, -{16,6,-3}, -{16,6,-2}, -{16,6,-1}, -{16,6,0}, -{16,6,1}, -{16,6,2}, -{16,6,3}, -{16,6,4}, -{16,6,5}, -{16,6,6}, -{16,6,7}, -{16,6,8}, -{16,6,9}, -{16,6,10}, -{16,6,11}, -{16,6,12}, -{16,6,13}, -{16,6,14}, -{16,6,15}, -{16,6,16}, -{16,6,17}, -{16,6,18}, -{16,6,19}, -{16,6,20}, -{16,6,21}, -{16,6,22}, -{16,6,23}, -{16,7,-30}, -{16,7,-29}, -{16,7,-28}, -{16,7,-27}, -{16,7,-26}, -{16,7,-25}, -{16,7,-24}, -{16,7,-23}, -{16,7,-22}, -{16,7,-21}, -{16,7,-20}, -{16,7,-19}, -{16,7,-18}, -{16,7,-17}, -{16,7,-16}, -{16,7,-15}, -{16,7,-14}, -{16,7,-13}, -{16,7,-12}, -{16,7,-11}, -{16,7,-10}, -{16,7,-9}, -{16,7,-8}, -{16,7,-7}, -{16,7,-6}, -{16,7,-5}, -{16,7,-4}, -{16,7,-3}, -{16,7,-2}, -{16,7,-1}, -{16,7,0}, -{16,7,1}, -{16,7,2}, -{16,7,3}, -{16,7,4}, -{16,7,5}, -{16,7,6}, -{16,7,7}, -{16,7,8}, -{16,7,9}, -{16,7,10}, -{16,7,11}, -{16,7,12}, -{16,7,13}, -{16,7,14}, -{16,7,15}, -{16,7,16}, -{16,7,17}, -{16,7,18}, -{16,7,19}, -{16,7,20}, -{16,7,21}, -{16,7,22}, -{16,7,23}, -{16,8,-31}, -{16,8,-30}, -{16,8,-29}, -{16,8,-28}, -{16,8,-27}, -{16,8,-26}, -{16,8,-25}, -{16,8,-24}, -{16,8,-23}, -{16,8,-22}, -{16,8,-21}, -{16,8,-20}, -{16,8,-19}, -{16,8,-18}, -{16,8,-17}, -{16,8,-16}, -{16,8,-15}, -{16,8,-14}, -{16,8,-13}, -{16,8,-12}, -{16,8,-11}, -{16,8,-10}, -{16,8,-9}, -{16,8,-8}, -{16,8,-7}, -{16,8,-6}, -{16,8,-5}, -{16,8,-4}, -{16,8,-3}, -{16,8,-2}, -{16,8,-1}, -{16,8,0}, -{16,8,1}, -{16,8,2}, -{16,8,3}, -{16,8,4}, -{16,8,5}, -{16,8,6}, -{16,8,7}, -{16,8,8}, -{16,8,9}, -{16,8,10}, -{16,8,11}, -{16,8,12}, -{16,8,13}, -{16,8,14}, -{16,8,15}, -{16,8,16}, -{16,8,17}, -{16,8,18}, -{16,8,19}, -{16,8,20}, -{16,8,21}, -{16,8,22}, -{16,8,23}, -{16,9,-32}, -{16,9,-31}, -{16,9,-30}, -{16,9,-29}, -{16,9,-28}, -{16,9,-27}, -{16,9,-26}, -{16,9,-25}, -{16,9,-24}, -{16,9,-23}, -{16,9,-22}, -{16,9,-21}, -{16,9,-20}, -{16,9,-19}, -{16,9,-18}, -{16,9,-17}, -{16,9,-16}, -{16,9,-15}, -{16,9,-14}, -{16,9,-13}, -{16,9,-12}, -{16,9,-11}, -{16,9,-10}, -{16,9,-9}, -{16,9,-8}, -{16,9,-7}, -{16,9,-6}, -{16,9,-5}, -{16,9,-4}, -{16,9,-3}, -{16,9,-2}, -{16,9,-1}, -{16,9,0}, -{16,9,1}, -{16,9,2}, -{16,9,3}, -{16,9,4}, -{16,9,5}, -{16,9,6}, -{16,9,7}, -{16,9,8}, -{16,9,9}, -{16,9,10}, -{16,9,11}, -{16,9,12}, -{16,9,13}, -{16,9,14}, -{16,9,15}, -{16,9,16}, -{16,9,17}, -{16,9,18}, -{16,9,19}, -{16,9,20}, -{16,9,21}, -{16,9,22}, -{16,9,23}, -{16,10,-33}, -{16,10,-32}, -{16,10,-31}, -{16,10,-30}, -{16,10,-29}, -{16,10,-28}, -{16,10,-27}, -{16,10,-26}, -{16,10,-25}, -{16,10,-24}, -{16,10,-23}, -{16,10,-22}, -{16,10,-21}, -{16,10,-20}, -{16,10,-19}, -{16,10,-18}, -{16,10,-17}, -{16,10,-16}, -{16,10,-15}, -{16,10,-14}, -{16,10,-13}, -{16,10,-12}, -{16,10,-11}, -{16,10,-10}, -{16,10,-9}, -{16,10,-8}, -{16,10,-7}, -{16,10,-6}, -{16,10,-5}, -{16,10,-4}, -{16,10,-3}, -{16,10,-2}, -{16,10,-1}, -{16,10,0}, -{16,10,1}, -{16,10,2}, -{16,10,3}, -{16,10,4}, -{16,10,5}, -{16,10,6}, -{16,10,7}, -{16,10,8}, -{16,10,9}, -{16,10,10}, -{16,10,11}, -{16,10,12}, -{16,10,13}, -{16,10,14}, -{16,10,15}, -{16,10,16}, -{16,10,17}, -{16,10,18}, -{16,10,19}, -{16,10,20}, -{16,10,21}, -{16,10,22}, -{16,10,23}, -{16,11,-34}, -{16,11,-33}, -{16,11,-32}, -{16,11,-31}, -{16,11,-30}, -{16,11,-29}, -{16,11,-28}, -{16,11,-27}, -{16,11,-26}, -{16,11,-25}, -{16,11,-24}, -{16,11,-23}, -{16,11,-22}, -{16,11,-21}, -{16,11,-20}, -{16,11,-19}, -{16,11,-18}, -{16,11,-17}, -{16,11,-16}, -{16,11,-15}, -{16,11,-14}, -{16,11,-13}, -{16,11,-12}, -{16,11,-11}, -{16,11,-10}, -{16,11,-9}, -{16,11,-8}, -{16,11,-7}, -{16,11,-6}, -{16,11,-5}, -{16,11,-4}, -{16,11,-3}, -{16,11,-2}, -{16,11,-1}, -{16,11,0}, -{16,11,1}, -{16,11,2}, -{16,11,3}, -{16,11,4}, -{16,11,5}, -{16,11,6}, -{16,11,7}, -{16,11,8}, -{16,11,9}, -{16,11,10}, -{16,11,11}, -{16,11,12}, -{16,11,13}, -{16,11,14}, -{16,11,15}, -{16,11,16}, -{16,11,17}, -{16,11,18}, -{16,11,19}, -{16,11,20}, -{16,11,21}, -{16,11,22}, -{16,11,23}, -{16,12,-35}, -{16,12,-34}, -{16,12,-33}, -{16,12,-32}, -{16,12,-31}, -{16,12,-30}, -{16,12,-29}, -{16,12,-28}, -{16,12,-27}, -{16,12,-26}, -{16,12,-25}, -{16,12,-24}, -{16,12,-23}, -{16,12,-22}, -{16,12,-21}, -{16,12,-20}, -{16,12,-19}, -{16,12,-18}, -{16,12,-17}, -{16,12,-16}, -{16,12,-15}, -{16,12,-14}, -{16,12,-13}, -{16,12,-12}, -{16,12,-11}, -{16,12,-10}, -{16,12,-9}, -{16,12,-8}, -{16,12,-7}, -{16,12,-6}, -{16,12,-5}, -{16,12,-4}, -{16,12,-3}, -{16,12,-2}, -{16,12,-1}, -{16,12,0}, -{16,12,1}, -{16,12,2}, -{16,12,3}, -{16,12,4}, -{16,12,5}, -{16,12,6}, -{16,12,7}, -{16,12,8}, -{16,12,9}, -{16,12,10}, -{16,12,11}, -{16,12,12}, -{16,12,13}, -{16,12,14}, -{16,12,15}, -{16,12,16}, -{16,12,17}, -{16,12,18}, -{16,12,19}, -{16,12,20}, -{16,12,21}, -{16,12,22}, -{16,12,23}, -{16,13,-36}, -{16,13,-35}, -{16,13,-34}, -{16,13,-33}, -{16,13,-32}, -{16,13,-31}, -{16,13,-30}, -{16,13,-29}, -{16,13,-28}, -{16,13,-27}, -{16,13,-26}, -{16,13,-25}, -{16,13,-24}, -{16,13,-23}, -{16,13,-22}, -{16,13,-21}, -{16,13,-20}, -{16,13,-19}, -{16,13,-18}, -{16,13,-17}, -{16,13,-16}, -{16,13,-15}, -{16,13,-14}, -{16,13,-13}, -{16,13,-12}, -{16,13,-11}, -{16,13,-10}, -{16,13,-9}, -{16,13,-8}, -{16,13,-7}, -{16,13,-6}, -{16,13,-5}, -{16,13,-4}, -{16,13,-3}, -{16,13,-2}, -{16,13,-1}, -{16,13,0}, -{16,13,1}, -{16,13,2}, -{16,13,3}, -{16,13,4}, -{16,13,5}, -{16,13,6}, -{16,13,7}, -{16,13,8}, -{16,13,9}, -{16,13,10}, -{16,13,11}, -{16,13,12}, -{16,13,13}, -{16,13,14}, -{16,13,15}, -{16,13,16}, -{16,13,17}, -{16,13,18}, -{16,13,19}, -{16,13,20}, -{16,13,21}, -{16,13,22}, -{16,13,23}, -{16,14,-37}, -{16,14,-36}, -{16,14,-35}, -{16,14,-34}, -{16,14,-33}, -{16,14,-32}, -{16,14,-31}, -{16,14,-30}, -{16,14,-29}, -{16,14,-28}, -{16,14,-27}, -{16,14,-26}, -{16,14,-25}, -{16,14,-24}, -{16,14,-23}, -{16,14,-22}, -{16,14,-21}, -{16,14,-20}, -{16,14,-19}, -{16,14,-18}, -{16,14,-17}, -{16,14,-16}, -{16,14,-15}, -{16,14,-14}, -{16,14,-13}, -{16,14,-12}, -{16,14,-11}, -{16,14,-10}, -{16,14,-9}, -{16,14,-8}, -{16,14,-7}, -{16,14,-6}, -{16,14,-5}, -{16,14,-4}, -{16,14,-3}, -{16,14,-2}, -{16,14,-1}, -{16,14,0}, -{16,14,1}, -{16,14,2}, -{16,14,3}, -{16,14,4}, -{16,14,5}, -{16,14,6}, -{16,14,7}, -{16,14,8}, -{16,14,9}, -{16,14,10}, -{16,14,11}, -{16,14,12}, -{16,14,13}, -{16,14,14}, -{16,14,15}, -{16,14,16}, -{16,14,17}, -{16,14,18}, -{16,14,19}, -{16,14,20}, -{16,14,21}, -{16,14,22}, -{16,14,23}, -{16,15,-38}, -{16,15,-37}, -{16,15,-36}, -{16,15,-35}, -{16,15,-34}, -{16,15,-33}, -{16,15,-32}, -{16,15,-31}, -{16,15,-30}, -{16,15,-29}, -{16,15,-28}, -{16,15,-27}, -{16,15,-26}, -{16,15,-25}, -{16,15,-24}, -{16,15,-23}, -{16,15,-22}, -{16,15,-21}, -{16,15,-20}, -{16,15,-19}, -{16,15,-18}, -{16,15,-17}, -{16,15,-16}, -{16,15,-15}, -{16,15,-14}, -{16,15,-13}, -{16,15,-12}, -{16,15,-11}, -{16,15,-10}, -{16,15,-9}, -{16,15,-8}, -{16,15,-7}, -{16,15,-6}, -{16,15,-5}, -{16,15,-4}, -{16,15,-3}, -{16,15,-2}, -{16,15,-1}, -{16,15,0}, -{16,15,1}, -{16,15,2}, -{16,15,3}, -{16,15,4}, -{16,15,5}, -{16,15,6}, -{16,15,7}, -{16,15,8}, -{16,15,9}, -{16,15,10}, -{16,15,11}, -{16,15,12}, -{16,15,13}, -{16,15,14}, -{16,15,15}, -{16,15,16}, -{16,15,17}, -{16,15,18}, -{16,15,19}, -{16,15,20}, -{16,15,21}, -{16,15,22}, -{16,15,23}, -{16,15,24}, -{16,16,-39}, -{16,16,-38}, -{16,16,-37}, -{16,16,-36}, -{16,16,-35}, -{16,16,-34}, -{16,16,-33}, -{16,16,-32}, -{16,16,-31}, -{16,16,-30}, -{16,16,-29}, -{16,16,-28}, -{16,16,-27}, -{16,16,-26}, -{16,16,-25}, -{16,16,-24}, -{16,16,-23}, -{16,16,-22}, -{16,16,-21}, -{16,16,-20}, -{16,16,-19}, -{16,16,-18}, -{16,16,-17}, -{16,16,-16}, -{16,16,-15}, -{16,16,-14}, -{16,16,-13}, -{16,16,-12}, -{16,16,-11}, -{16,16,-10}, -{16,16,-9}, -{16,16,-8}, -{16,16,-7}, -{16,16,-6}, -{16,16,-5}, -{16,16,-4}, -{16,16,-3}, -{16,16,-2}, -{16,16,-1}, -{16,16,0}, -{16,16,1}, -{16,16,2}, -{16,16,3}, -{16,16,4}, -{16,16,5}, -{16,16,6}, -{16,16,7}, -{16,16,8}, -{16,16,9}, -{16,16,10}, -{16,16,11}, -{16,16,12}, -{16,16,13}, -{16,16,14}, -{16,16,15}, -{16,16,16}, -{16,16,17}, -{16,16,18}, -{16,16,19}, -{16,16,20}, -{16,16,21}, -{16,16,22}, -{16,16,23}, -{16,16,24}, -{16,17,-40}, -{16,17,-39}, -{16,17,-38}, -{16,17,-37}, -{16,17,-36}, -{16,17,-35}, -{16,17,-34}, -{16,17,-33}, -{16,17,-32}, -{16,17,-31}, -{16,17,-30}, -{16,17,-29}, -{16,17,-28}, -{16,17,-27}, -{16,17,-26}, -{16,17,-25}, -{16,17,-24}, -{16,17,-23}, -{16,17,-22}, -{16,17,-21}, -{16,17,-20}, -{16,17,-19}, -{16,17,-18}, -{16,17,-17}, -{16,17,-16}, -{16,17,-15}, -{16,17,-14}, -{16,17,-13}, -{16,17,-12}, -{16,17,-11}, -{16,17,-10}, -{16,17,-9}, -{16,17,-8}, -{16,17,-7}, -{16,17,-6}, -{16,17,-5}, -{16,17,-4}, -{16,17,-3}, -{16,17,-2}, -{16,17,-1}, -{16,17,0}, -{16,17,1}, -{16,17,2}, -{16,17,3}, -{16,17,4}, -{16,17,5}, -{16,17,6}, -{16,17,7}, -{16,17,8}, -{16,17,9}, -{16,17,10}, -{16,17,11}, -{16,17,12}, -{16,17,13}, -{16,17,14}, -{16,17,15}, -{16,17,16}, -{16,17,17}, -{16,17,18}, -{16,17,19}, -{16,17,20}, -{16,17,21}, -{16,17,22}, -{16,17,23}, -{16,17,24}, -{16,18,-41}, -{16,18,-40}, -{16,18,-39}, -{16,18,-38}, -{16,18,-37}, -{16,18,-36}, -{16,18,-35}, -{16,18,-34}, -{16,18,-33}, -{16,18,-32}, -{16,18,-31}, -{16,18,-30}, -{16,18,-29}, -{16,18,-28}, -{16,18,-27}, -{16,18,-26}, -{16,18,-25}, -{16,18,-24}, -{16,18,-23}, -{16,18,-22}, -{16,18,-21}, -{16,18,-20}, -{16,18,-19}, -{16,18,-18}, -{16,18,-17}, -{16,18,-16}, -{16,18,-15}, -{16,18,-14}, -{16,18,-13}, -{16,18,-12}, -{16,18,-11}, -{16,18,-10}, -{16,18,-9}, -{16,18,-8}, -{16,18,-7}, -{16,18,-6}, -{16,18,-5}, -{16,18,-4}, -{16,18,-3}, -{16,18,-2}, -{16,18,-1}, -{16,18,0}, -{16,18,1}, -{16,18,2}, -{16,18,3}, -{16,18,4}, -{16,18,5}, -{16,18,6}, -{16,18,7}, -{16,18,8}, -{16,18,9}, -{16,18,10}, -{16,18,11}, -{16,18,12}, -{16,18,13}, -{16,18,14}, -{16,18,15}, -{16,18,16}, -{16,18,17}, -{16,18,18}, -{16,18,19}, -{16,18,20}, -{16,18,21}, -{16,18,22}, -{16,18,23}, -{16,18,24}, -{16,19,-42}, -{16,19,-41}, -{16,19,-40}, -{16,19,-39}, -{16,19,-38}, -{16,19,-37}, -{16,19,-36}, -{16,19,-35}, -{16,19,-34}, -{16,19,-33}, -{16,19,-32}, -{16,19,-31}, -{16,19,-30}, -{16,19,-29}, -{16,19,-28}, -{16,19,-27}, -{16,19,-26}, -{16,19,-25}, -{16,19,-24}, -{16,19,-23}, -{16,19,-22}, -{16,19,-21}, -{16,19,-20}, -{16,19,-19}, -{16,19,-18}, -{16,19,-17}, -{16,19,-16}, -{16,19,-15}, -{16,19,-14}, -{16,19,-13}, -{16,19,-12}, -{16,19,-11}, -{16,19,-10}, -{16,19,-9}, -{16,19,-8}, -{16,19,-7}, -{16,19,-6}, -{16,19,-5}, -{16,19,-4}, -{16,19,-3}, -{16,19,-2}, -{16,19,-1}, -{16,19,0}, -{16,19,1}, -{16,19,2}, -{16,19,3}, -{16,19,4}, -{16,19,5}, -{16,19,6}, -{16,19,7}, -{16,19,8}, -{16,19,9}, -{16,19,10}, -{16,19,11}, -{16,19,12}, -{16,19,13}, -{16,19,14}, -{16,19,15}, -{16,19,16}, -{16,19,17}, -{16,19,18}, -{16,19,19}, -{16,19,20}, -{16,19,21}, -{16,19,22}, -{16,19,23}, -{16,19,24}, -{16,20,-43}, -{16,20,-42}, -{16,20,-41}, -{16,20,-40}, -{16,20,-39}, -{16,20,-38}, -{16,20,-37}, -{16,20,-36}, -{16,20,-35}, -{16,20,-34}, -{16,20,-33}, -{16,20,-32}, -{16,20,-31}, -{16,20,-30}, -{16,20,-29}, -{16,20,-28}, -{16,20,-27}, -{16,20,-26}, -{16,20,-25}, -{16,20,-24}, -{16,20,-23}, -{16,20,-22}, -{16,20,-21}, -{16,20,-20}, -{16,20,-19}, -{16,20,-18}, -{16,20,-17}, -{16,20,-16}, -{16,20,-15}, -{16,20,-14}, -{16,20,-13}, -{16,20,-12}, -{16,20,-11}, -{16,20,-10}, -{16,20,-9}, -{16,20,-8}, -{16,20,-7}, -{16,20,-6}, -{16,20,-5}, -{16,20,-4}, -{16,20,-3}, -{16,20,-2}, -{16,20,-1}, -{16,20,0}, -{16,20,1}, -{16,20,2}, -{16,20,3}, -{16,20,4}, -{16,20,5}, -{16,20,6}, -{16,20,7}, -{16,20,8}, -{16,20,9}, -{16,20,10}, -{16,20,11}, -{16,20,12}, -{16,20,13}, -{16,20,14}, -{16,20,15}, -{16,20,16}, -{16,20,17}, -{16,20,18}, -{16,20,19}, -{16,20,20}, -{16,20,21}, -{16,20,22}, -{16,20,23}, -{16,20,24}, -{16,21,-44}, -{16,21,-43}, -{16,21,-42}, -{16,21,-41}, -{16,21,-40}, -{16,21,-39}, -{16,21,-38}, -{16,21,-37}, -{16,21,-36}, -{16,21,-35}, -{16,21,-34}, -{16,21,-33}, -{16,21,-32}, -{16,21,-31}, -{16,21,-30}, -{16,21,-29}, -{16,21,-28}, -{16,21,-27}, -{16,21,-26}, -{16,21,-25}, -{16,21,-24}, -{16,21,-23}, -{16,21,-22}, -{16,21,-21}, -{16,21,-20}, -{16,21,-19}, -{16,21,-18}, -{16,21,-17}, -{16,21,-16}, -{16,21,-15}, -{16,21,-14}, -{16,21,-13}, -{16,21,-12}, -{16,21,-11}, -{16,21,-10}, -{16,21,-9}, -{16,21,-8}, -{16,21,-7}, -{16,21,-6}, -{16,21,-5}, -{16,21,-4}, -{16,21,-3}, -{16,21,-2}, -{16,21,-1}, -{16,21,0}, -{16,21,1}, -{16,21,2}, -{16,21,3}, -{16,21,4}, -{16,21,5}, -{16,21,6}, -{16,21,7}, -{16,21,8}, -{16,21,9}, -{16,21,10}, -{16,21,11}, -{16,21,12}, -{16,21,13}, -{16,21,14}, -{16,21,15}, -{16,21,16}, -{16,21,17}, -{16,21,18}, -{16,21,19}, -{16,21,20}, -{16,21,21}, -{16,21,22}, -{16,21,23}, -{16,21,24}, -{16,22,-45}, -{16,22,-44}, -{16,22,-43}, -{16,22,-42}, -{16,22,-41}, -{16,22,-40}, -{16,22,-39}, -{16,22,-38}, -{16,22,-37}, -{16,22,-36}, -{16,22,-35}, -{16,22,-34}, -{16,22,-33}, -{16,22,-32}, -{16,22,-31}, -{16,22,-30}, -{16,22,-29}, -{16,22,-28}, -{16,22,-27}, -{16,22,-26}, -{16,22,-25}, -{16,22,-24}, -{16,22,-23}, -{16,22,-22}, -{16,22,-21}, -{16,22,-20}, -{16,22,-19}, -{16,22,-18}, -{16,22,-17}, -{16,22,-16}, -{16,22,-15}, -{16,22,-14}, -{16,22,-13}, -{16,22,-12}, -{16,22,-11}, -{16,22,-10}, -{16,22,-9}, -{16,22,-8}, -{16,22,-7}, -{16,22,-6}, -{16,22,-5}, -{16,22,-4}, -{16,22,-3}, -{16,22,-2}, -{16,22,-1}, -{16,22,0}, -{16,22,1}, -{16,22,2}, -{16,22,3}, -{16,22,4}, -{16,22,5}, -{16,22,6}, -{16,22,7}, -{16,22,8}, -{16,22,9}, -{16,22,10}, -{16,22,11}, -{16,22,12}, -{16,22,13}, -{16,22,14}, -{16,22,15}, -{16,22,16}, -{16,22,17}, -{16,22,18}, -{16,22,19}, -{16,22,20}, -{16,22,21}, -{16,22,22}, -{16,22,23}, -{16,22,24}, -{16,23,-46}, -{16,23,-45}, -{16,23,-44}, -{16,23,-43}, -{16,23,-42}, -{16,23,-41}, -{16,23,-40}, -{16,23,-39}, -{16,23,-38}, -{16,23,-37}, -{16,23,-36}, -{16,23,-35}, -{16,23,-34}, -{16,23,-33}, -{16,23,-32}, -{16,23,-31}, -{16,23,-30}, -{16,23,-29}, -{16,23,-28}, -{16,23,-27}, -{16,23,-26}, -{16,23,-25}, -{16,23,-24}, -{16,23,-23}, -{16,23,-22}, -{16,23,-21}, -{16,23,-20}, -{16,23,-19}, -{16,23,-18}, -{16,23,-17}, -{16,23,-16}, -{16,23,-15}, -{16,23,-14}, -{16,23,-13}, -{16,23,-12}, -{16,23,-11}, -{16,23,-10}, -{16,23,-9}, -{16,23,-8}, -{16,23,-7}, -{16,23,-6}, -{16,23,-5}, -{16,23,-4}, -{16,23,-3}, -{16,23,-2}, -{16,23,-1}, -{16,23,0}, -{16,23,1}, -{16,23,2}, -{16,23,3}, -{16,23,4}, -{16,23,5}, -{16,23,6}, -{16,23,7}, -{16,23,8}, -{16,23,9}, -{16,23,10}, -{16,23,11}, -{16,23,12}, -{16,23,13}, -{16,23,14}, -{16,23,15}, -{16,23,16}, -{16,23,17}, -{16,23,18}, -{16,23,19}, -{16,23,20}, -{16,23,21}, -{16,23,22}, -{16,23,23}, -{16,23,24}, -{16,24,-47}, -{16,24,-46}, -{16,24,-45}, -{16,24,-44}, -{16,24,-43}, -{16,24,-42}, -{16,24,-41}, -{16,24,-40}, -{16,24,-39}, -{16,24,-38}, -{16,24,-37}, -{16,24,-36}, -{16,24,-35}, -{16,24,-34}, -{16,24,-33}, -{16,24,-32}, -{16,24,-31}, -{16,24,-30}, -{16,24,-29}, -{16,24,-28}, -{16,24,-27}, -{16,24,-26}, -{16,24,-25}, -{16,24,-24}, -{16,24,-23}, -{16,24,-22}, -{16,24,-21}, -{16,24,-20}, -{16,24,-19}, -{16,24,-18}, -{16,24,-17}, -{16,24,-16}, -{16,24,-15}, -{16,24,-14}, -{16,24,-13}, -{16,24,-12}, -{16,24,-11}, -{16,24,-10}, -{16,24,-9}, -{16,24,-8}, -{16,24,-7}, -{16,24,-6}, -{16,24,-5}, -{16,24,-4}, -{16,24,-3}, -{16,24,-2}, -{16,24,-1}, -{16,24,0}, -{16,24,1}, -{16,24,2}, -{16,24,3}, -{16,24,4}, -{16,24,5}, -{16,24,6}, -{16,24,7}, -{16,24,8}, -{16,24,9}, -{16,24,10}, -{16,24,11}, -{16,24,12}, -{16,24,13}, -{16,24,14}, -{16,24,15}, -{16,24,16}, -{16,24,17}, -{16,24,18}, -{16,24,19}, -{16,24,20}, -{16,24,21}, -{16,24,22}, -{16,24,23}, -{16,24,24}, -{16,25,-48}, -{16,25,-47}, -{16,25,-46}, -{16,25,-45}, -{16,25,-44}, -{16,25,-43}, -{16,25,-42}, -{16,25,-41}, -{16,25,-40}, -{16,25,-39}, -{16,25,-38}, -{16,25,-37}, -{16,25,-36}, -{16,25,-35}, -{16,25,-34}, -{16,25,-33}, -{16,25,-32}, -{16,25,-31}, -{16,25,-30}, -{16,25,-29}, -{16,25,-28}, -{16,25,-27}, -{16,25,-26}, -{16,25,-25}, -{16,25,-24}, -{16,25,-23}, -{16,25,-22}, -{16,25,-21}, -{16,25,-20}, -{16,25,-19}, -{16,25,-18}, -{16,25,-17}, -{16,25,-16}, -{16,25,-15}, -{16,25,-14}, -{16,25,-13}, -{16,25,-12}, -{16,25,-11}, -{16,25,-10}, -{16,25,-9}, -{16,25,-8}, -{16,25,-7}, -{16,25,-6}, -{16,25,-5}, -{16,25,-4}, -{16,25,-3}, -{16,25,-2}, -{16,25,-1}, -{16,25,0}, -{16,25,1}, -{16,25,2}, -{16,25,3}, -{16,25,4}, -{16,25,5}, -{16,25,6}, -{16,25,7}, -{16,25,8}, -{16,25,9}, -{16,25,10}, -{16,25,11}, -{16,25,12}, -{16,25,13}, -{16,25,14}, -{16,25,15}, -{16,25,16}, -{16,25,17}, -{16,25,18}, -{16,25,19}, -{16,25,20}, -{16,25,21}, -{16,25,22}, -{16,25,23}, -{16,25,24}, -{16,26,-48}, -{16,26,-47}, -{16,26,-46}, -{16,26,-45}, -{16,26,-44}, -{16,26,-43}, -{16,26,-42}, -{16,26,-41}, -{16,26,-40}, -{16,26,-39}, -{16,26,-38}, -{16,26,-37}, -{16,26,-36}, -{16,26,-35}, -{16,26,-34}, -{16,26,-33}, -{16,26,-32}, -{16,26,-31}, -{16,26,-30}, -{16,26,-29}, -{16,26,-28}, -{16,26,-27}, -{16,26,-26}, -{16,26,-25}, -{16,26,-24}, -{16,26,-23}, -{16,26,-22}, -{16,26,-21}, -{16,26,-20}, -{16,26,-19}, -{16,26,-18}, -{16,26,-17}, -{16,26,-16}, -{16,26,-15}, -{16,26,-14}, -{16,26,-13}, -{16,26,-12}, -{16,26,-11}, -{16,26,-10}, -{16,26,-9}, -{16,26,-8}, -{16,26,-7}, -{16,26,-6}, -{16,26,-5}, -{16,26,-4}, -{16,26,-3}, -{16,26,-2}, -{16,26,-1}, -{16,26,0}, -{16,26,1}, -{16,26,2}, -{16,26,3}, -{16,26,4}, -{16,26,5}, -{16,26,6}, -{16,26,7}, -{16,26,8}, -{16,26,9}, -{16,26,10}, -{16,26,11}, -{16,26,12}, -{16,26,13}, -{16,26,14}, -{16,26,15}, -{16,26,16}, -{16,26,17}, -{16,26,18}, -{16,26,19}, -{16,26,20}, -{16,26,21}, -{16,26,22}, -{16,26,23}, -{16,26,24}, -{16,27,-49}, -{16,27,-48}, -{16,27,-47}, -{16,27,-46}, -{16,27,-45}, -{16,27,-44}, -{16,27,-43}, -{16,27,-42}, -{16,27,-41}, -{16,27,-40}, -{16,27,-39}, -{16,27,-38}, -{16,27,-37}, -{16,27,-36}, -{16,27,-35}, -{16,27,-34}, -{16,27,-33}, -{16,27,-32}, -{16,27,-31}, -{16,27,-30}, -{16,27,-29}, -{16,27,-28}, -{16,27,-27}, -{16,27,-26}, -{16,27,-25}, -{16,27,-24}, -{16,27,-23}, -{16,27,-22}, -{16,27,-21}, -{16,27,-20}, -{16,27,-19}, -{16,27,-18}, -{16,27,-17}, -{16,27,-16}, -{16,27,-15}, -{16,27,-14}, -{16,27,-13}, -{16,27,-12}, -{16,27,-11}, -{16,27,-10}, -{16,27,-9}, -{16,27,-8}, -{16,27,-7}, -{16,27,-6}, -{16,27,-5}, -{16,27,-4}, -{16,27,-3}, -{16,27,-2}, -{16,27,-1}, -{16,27,0}, -{16,27,1}, -{16,27,2}, -{16,27,3}, -{16,27,4}, -{16,27,5}, -{16,27,6}, -{16,27,7}, -{16,27,8}, -{16,27,9}, -{16,27,10}, -{16,27,11}, -{16,27,12}, -{16,27,13}, -{16,27,14}, -{16,27,15}, -{16,27,16}, -{16,27,17}, -{16,27,18}, -{16,27,19}, -{16,27,20}, -{16,27,21}, -{16,27,22}, -{16,27,23}, -{16,27,24}, -{16,28,-50}, -{16,28,-49}, -{16,28,-48}, -{16,28,-47}, -{16,28,-46}, -{16,28,-45}, -{16,28,-44}, -{16,28,-43}, -{16,28,-42}, -{16,28,-41}, -{16,28,-40}, -{16,28,-39}, -{16,28,-38}, -{16,28,-37}, -{16,28,-36}, -{16,28,-35}, -{16,28,-34}, -{16,28,-33}, -{16,28,-32}, -{16,28,-31}, -{16,28,-30}, -{16,28,-29}, -{16,28,-28}, -{16,28,-27}, -{16,28,-26}, -{16,28,-25}, -{16,28,-24}, -{16,28,-23}, -{16,28,-22}, -{16,28,-21}, -{16,28,-20}, -{16,28,-19}, -{16,28,-18}, -{16,28,-17}, -{16,28,-16}, -{16,28,-15}, -{16,28,-14}, -{16,28,-13}, -{16,28,-12}, -{16,28,-11}, -{16,28,-10}, -{16,28,-9}, -{16,28,-8}, -{16,28,-7}, -{16,28,-6}, -{16,28,-5}, -{16,28,-4}, -{16,28,-3}, -{16,28,-2}, -{16,28,-1}, -{16,28,0}, -{16,28,1}, -{16,28,2}, -{16,28,3}, -{16,28,4}, -{16,28,5}, -{16,28,6}, -{16,28,7}, -{16,28,8}, -{16,28,9}, -{16,28,10}, -{16,28,11}, -{16,28,12}, -{16,28,13}, -{16,28,14}, -{16,28,15}, -{16,28,16}, -{16,28,17}, -{16,28,18}, -{16,28,19}, -{16,28,20}, -{16,28,21}, -{16,28,22}, -{16,28,23}, -{16,28,24}, -{16,29,-51}, -{16,29,-50}, -{16,29,-49}, -{16,29,-48}, -{16,29,-47}, -{16,29,-46}, -{16,29,-45}, -{16,29,-44}, -{16,29,-43}, -{16,29,-42}, -{16,29,-41}, -{16,29,-40}, -{16,29,-39}, -{16,29,-38}, -{16,29,-37}, -{16,29,-36}, -{16,29,-35}, -{16,29,-34}, -{16,29,-33}, -{16,29,-32}, -{16,29,-31}, -{16,29,-30}, -{16,29,-29}, -{16,29,-28}, -{16,29,-27}, -{16,29,-26}, -{16,29,-25}, -{16,29,-24}, -{16,29,-23}, -{16,29,-22}, -{16,29,-21}, -{16,29,-20}, -{16,29,-19}, -{16,29,-18}, -{16,29,-17}, -{16,29,-16}, -{16,29,-15}, -{16,29,-14}, -{16,29,-13}, -{16,29,-12}, -{16,29,-11}, -{16,29,-10}, -{16,29,-9}, -{16,29,-8}, -{16,29,-7}, -{16,29,-6}, -{16,29,-5}, -{16,29,-4}, -{16,29,-3}, -{16,29,-2}, -{16,29,-1}, -{16,29,0}, -{16,29,1}, -{16,29,2}, -{16,29,3}, -{16,29,4}, -{16,29,5}, -{16,29,6}, -{16,29,7}, -{16,29,8}, -{16,29,9}, -{16,29,10}, -{16,29,11}, -{16,29,12}, -{16,29,13}, -{16,29,14}, -{16,29,15}, -{16,29,16}, -{16,29,17}, -{16,29,18}, -{16,29,19}, -{16,29,20}, -{16,29,21}, -{16,29,22}, -{16,29,23}, -{16,29,24}, -{16,30,-52}, -{16,30,-51}, -{16,30,-50}, -{16,30,-49}, -{16,30,-48}, -{16,30,-47}, -{16,30,-46}, -{16,30,-45}, -{16,30,-44}, -{16,30,-43}, -{16,30,-42}, -{16,30,-41}, -{16,30,-40}, -{16,30,-39}, -{16,30,-38}, -{16,30,-37}, -{16,30,-36}, -{16,30,-35}, -{16,30,-34}, -{16,30,-33}, -{16,30,-32}, -{16,30,-31}, -{16,30,-30}, -{16,30,-29}, -{16,30,-28}, -{16,30,-27}, -{16,30,-26}, -{16,30,-25}, -{16,30,-24}, -{16,30,-23}, -{16,30,-22}, -{16,30,-21}, -{16,30,-20}, -{16,30,-19}, -{16,30,-18}, -{16,30,-17}, -{16,30,-16}, -{16,30,-15}, -{16,30,-14}, -{16,30,-13}, -{16,30,-12}, -{16,30,-11}, -{16,30,-10}, -{16,30,-9}, -{16,30,-8}, -{16,30,-7}, -{16,30,-6}, -{16,30,-5}, -{16,30,-4}, -{16,30,-3}, -{16,30,-2}, -{16,30,-1}, -{16,30,0}, -{16,30,1}, -{16,30,2}, -{16,30,3}, -{16,30,4}, -{16,30,5}, -{16,30,6}, -{16,30,7}, -{16,30,8}, -{16,30,9}, -{16,30,10}, -{16,30,11}, -{16,30,12}, -{16,30,13}, -{16,30,14}, -{16,30,15}, -{16,30,16}, -{16,30,17}, -{16,30,18}, -{16,30,19}, -{16,30,20}, -{16,30,21}, -{16,30,22}, -{16,30,23}, -{16,30,24}, -{16,31,-53}, -{16,31,-52}, -{16,31,-51}, -{16,31,-50}, -{16,31,-49}, -{16,31,-48}, -{16,31,-47}, -{16,31,-46}, -{16,31,-45}, -{16,31,-44}, -{16,31,-43}, -{16,31,-42}, -{16,31,-41}, -{16,31,-40}, -{16,31,-39}, -{16,31,-38}, -{16,31,-37}, -{16,31,-36}, -{16,31,-35}, -{16,31,-34}, -{16,31,-33}, -{16,31,-32}, -{16,31,-31}, -{16,31,-30}, -{16,31,-29}, -{16,31,-28}, -{16,31,-27}, -{16,31,-26}, -{16,31,-25}, -{16,31,-24}, -{16,31,-23}, -{16,31,-22}, -{16,31,-21}, -{16,31,-20}, -{16,31,-19}, -{16,31,-18}, -{16,31,-17}, -{16,31,-16}, -{16,31,-15}, -{16,31,-14}, -{16,31,-13}, -{16,31,-12}, -{16,31,-11}, -{16,31,-10}, -{16,31,-9}, -{16,31,-8}, -{16,31,-7}, -{16,31,-6}, -{16,31,-5}, -{16,31,-4}, -{16,31,-3}, -{16,31,-2}, -{16,31,-1}, -{16,31,0}, -{16,31,1}, -{16,31,2}, -{16,31,3}, -{16,31,4}, -{16,31,5}, -{16,31,6}, -{16,31,7}, -{16,31,8}, -{16,31,9}, -{16,31,10}, -{16,31,11}, -{16,31,12}, -{16,31,13}, -{16,31,14}, -{16,31,15}, -{16,31,16}, -{16,31,17}, -{16,31,18}, -{16,31,19}, -{16,31,20}, -{16,31,21}, -{16,31,22}, -{16,31,23}, -{16,31,24}, -{16,32,-54}, -{16,32,-53}, -{16,32,-52}, -{16,32,-51}, -{16,32,-50}, -{16,32,-49}, -{16,32,-48}, -{16,32,-47}, -{16,32,-46}, -{16,32,-45}, -{16,32,-44}, -{16,32,-43}, -{16,32,-42}, -{16,32,-41}, -{16,32,-40}, -{16,32,-39}, -{16,32,-38}, -{16,32,-37}, -{16,32,-36}, -{16,32,-35}, -{16,32,-34}, -{16,32,-33}, -{16,32,-32}, -{16,32,-31}, -{16,32,-30}, -{16,32,-29}, -{16,32,-28}, -{16,32,-27}, -{16,32,-26}, -{16,32,-25}, -{16,32,-24}, -{16,32,-23}, -{16,32,-22}, -{16,32,-21}, -{16,32,-20}, -{16,32,-19}, -{16,32,-18}, -{16,32,-17}, -{16,32,-16}, -{16,32,-15}, -{16,32,-14}, -{16,32,-13}, -{16,32,-12}, -{16,32,-11}, -{16,32,-10}, -{16,32,-9}, -{16,32,-8}, -{16,32,-7}, -{16,32,-6}, -{16,32,-5}, -{16,32,-4}, -{16,32,-3}, -{16,32,-2}, -{16,32,-1}, -{16,32,0}, -{16,32,1}, -{16,32,2}, -{16,32,3}, -{16,32,4}, -{16,32,5}, -{16,32,6}, -{16,32,7}, -{16,32,8}, -{16,32,9}, -{16,32,10}, -{16,32,11}, -{16,32,12}, -{16,32,13}, -{16,32,14}, -{16,32,15}, -{16,32,16}, -{16,32,17}, -{16,32,18}, -{16,32,19}, -{16,32,20}, -{16,32,21}, -{16,32,22}, -{16,32,23}, -{16,32,24}, -{16,33,-55}, -{16,33,-54}, -{16,33,-53}, -{16,33,-52}, -{16,33,-51}, -{16,33,-50}, -{16,33,-49}, -{16,33,-48}, -{16,33,-47}, -{16,33,-46}, -{16,33,-45}, -{16,33,-44}, -{16,33,-43}, -{16,33,-42}, -{16,33,-41}, -{16,33,-40}, -{16,33,-39}, -{16,33,-38}, -{16,33,-37}, -{16,33,-36}, -{16,33,-35}, -{16,33,-34}, -{16,33,-33}, -{16,33,-32}, -{16,33,-31}, -{16,33,-30}, -{16,33,-29}, -{16,33,-28}, -{16,33,-27}, -{16,33,-26}, -{16,33,-25}, -{16,33,-24}, -{16,33,-23}, -{16,33,-22}, -{16,33,-21}, -{16,33,-20}, -{16,33,-19}, -{16,33,-18}, -{16,33,-17}, -{16,33,-16}, -{16,33,-15}, -{16,33,-14}, -{16,33,-13}, -{16,33,-12}, -{16,33,-11}, -{16,33,-10}, -{16,33,-9}, -{16,33,-8}, -{16,33,-7}, -{16,33,-6}, -{16,33,-5}, -{16,33,-4}, -{16,33,-3}, -{16,33,-2}, -{16,33,-1}, -{16,33,0}, -{16,33,1}, -{16,33,2}, -{16,33,3}, -{16,33,4}, -{16,33,5}, -{16,33,6}, -{16,33,7}, -{16,33,8}, -{16,33,9}, -{16,33,10}, -{16,33,11}, -{16,33,12}, -{16,33,13}, -{16,33,14}, -{16,33,15}, -{16,33,16}, -{16,33,17}, -{16,33,18}, -{16,33,19}, -{16,33,20}, -{16,33,21}, -{16,33,22}, -{16,33,23}, -{16,33,24}, -{16,34,-56}, -{16,34,-55}, -{16,34,-54}, -{16,34,-53}, -{16,34,-52}, -{16,34,-51}, -{16,34,-50}, -{16,34,-49}, -{16,34,-48}, -{16,34,-47}, -{16,34,-46}, -{16,34,-45}, -{16,34,-44}, -{16,34,-43}, -{16,34,-42}, -{16,34,-41}, -{16,34,-40}, -{16,34,-39}, -{16,34,-38}, -{16,34,-37}, -{16,34,-36}, -{16,34,-35}, -{16,34,-34}, -{16,34,-33}, -{16,34,-32}, -{16,34,-31}, -{16,34,-30}, -{16,34,-29}, -{16,34,-28}, -{16,34,-27}, -{16,34,-26}, -{16,34,-25}, -{16,34,-24}, -{16,34,-23}, -{16,34,-22}, -{16,34,-21}, -{16,34,-20}, -{16,34,-19}, -{16,34,-18}, -{16,34,-17}, -{16,34,-16}, -{16,34,-15}, -{16,34,-14}, -{16,34,-13}, -{16,34,-12}, -{16,34,-11}, -{16,34,-10}, -{16,34,-9}, -{16,34,-8}, -{16,34,-7}, -{16,34,-6}, -{16,34,-5}, -{16,34,-4}, -{16,34,-3}, -{16,34,-2}, -{16,34,-1}, -{16,34,0}, -{16,34,1}, -{16,34,2}, -{16,34,3}, -{16,34,4}, -{16,34,5}, -{16,34,6}, -{16,34,7}, -{16,34,8}, -{16,34,9}, -{16,34,10}, -{16,34,11}, -{16,34,12}, -{16,34,13}, -{16,34,14}, -{16,34,15}, -{16,34,16}, -{16,34,17}, -{16,34,18}, -{16,34,19}, -{16,34,20}, -{16,34,21}, -{16,34,22}, -{16,34,23}, -{16,34,24}, -{16,35,-56}, -{16,35,-55}, -{16,35,-54}, -{16,35,-53}, -{16,35,-52}, -{16,35,-51}, -{16,35,-50}, -{16,35,-49}, -{16,35,-48}, -{16,35,-47}, -{16,35,-46}, -{16,35,-45}, -{16,35,-44}, -{16,35,-43}, -{16,35,-42}, -{16,35,-41}, -{16,35,-40}, -{16,35,-39}, -{16,35,-38}, -{16,35,-37}, -{16,35,-36}, -{16,35,-35}, -{16,35,-34}, -{16,35,-33}, -{16,35,-32}, -{16,35,-31}, -{16,35,-30}, -{16,35,-29}, -{16,35,-28}, -{16,35,-27}, -{16,35,-26}, -{16,35,-25}, -{16,35,-24}, -{16,35,-23}, -{16,35,-22}, -{16,35,-21}, -{16,35,-20}, -{16,35,-19}, -{16,35,-18}, -{16,35,-17}, -{16,35,-16}, -{16,35,-15}, -{16,35,-14}, -{16,35,-13}, -{16,35,-12}, -{16,35,-11}, -{16,35,-10}, -{16,35,-9}, -{16,35,-8}, -{16,35,-7}, -{16,35,-6}, -{16,35,-5}, -{16,35,-4}, -{16,35,-3}, -{16,35,-2}, -{16,35,-1}, -{16,35,0}, -{16,35,1}, -{16,35,2}, -{16,35,3}, -{16,35,4}, -{16,35,5}, -{16,35,6}, -{16,35,7}, -{16,35,8}, -{16,35,9}, -{16,35,10}, -{16,35,11}, -{16,35,12}, -{16,35,13}, -{16,35,14}, -{16,35,15}, -{16,35,16}, -{16,35,17}, -{16,35,18}, -{16,35,19}, -{16,35,20}, -{16,35,21}, -{16,35,22}, -{16,35,23}, -{16,35,24}, -{16,36,-57}, -{16,36,-56}, -{16,36,-55}, -{16,36,-54}, -{16,36,-53}, -{16,36,-52}, -{16,36,-51}, -{16,36,-50}, -{16,36,-49}, -{16,36,-48}, -{16,36,-47}, -{16,36,-46}, -{16,36,-45}, -{16,36,-44}, -{16,36,-43}, -{16,36,-42}, -{16,36,-41}, -{16,36,-40}, -{16,36,-39}, -{16,36,-38}, -{16,36,-37}, -{16,36,-36}, -{16,36,-35}, -{16,36,-34}, -{16,36,-33}, -{16,36,-32}, -{16,36,-31}, -{16,36,-30}, -{16,36,-29}, -{16,36,-28}, -{16,36,-27}, -{16,36,-26}, -{16,36,-25}, -{16,36,-24}, -{16,36,-23}, -{16,36,-22}, -{16,36,-21}, -{16,36,-20}, -{16,36,-19}, -{16,36,-18}, -{16,36,-17}, -{16,36,-16}, -{16,36,-15}, -{16,36,-14}, -{16,36,-13}, -{16,36,-12}, -{16,36,-11}, -{16,36,-10}, -{16,36,-9}, -{16,36,-8}, -{16,36,-7}, -{16,36,-6}, -{16,36,-5}, -{16,36,-4}, -{16,36,-3}, -{16,36,-2}, -{16,36,-1}, -{16,36,0}, -{16,36,1}, -{16,36,2}, -{16,36,3}, -{16,36,4}, -{16,36,5}, -{16,36,6}, -{16,36,7}, -{16,36,8}, -{16,36,9}, -{16,36,10}, -{16,36,11}, -{16,36,12}, -{16,36,13}, -{16,36,14}, -{16,36,15}, -{16,36,16}, -{16,36,17}, -{16,36,18}, -{16,36,19}, -{16,36,20}, -{16,36,21}, -{16,36,22}, -{16,36,23}, -{16,36,24}, -{16,37,-58}, -{16,37,-57}, -{16,37,-56}, -{16,37,-55}, -{16,37,-54}, -{16,37,-53}, -{16,37,-52}, -{16,37,-51}, -{16,37,-50}, -{16,37,-49}, -{16,37,-48}, -{16,37,-47}, -{16,37,-46}, -{16,37,-45}, -{16,37,-44}, -{16,37,-43}, -{16,37,-42}, -{16,37,-41}, -{16,37,-40}, -{16,37,-39}, -{16,37,-38}, -{16,37,-37}, -{16,37,-36}, -{16,37,-35}, -{16,37,-34}, -{16,37,-33}, -{16,37,-32}, -{16,37,-31}, -{16,37,-30}, -{16,37,-29}, -{16,37,-28}, -{16,37,-27}, -{16,37,-26}, -{16,37,-25}, -{16,37,-24}, -{16,37,-23}, -{16,37,-22}, -{16,37,-21}, -{16,37,-20}, -{16,37,-19}, -{16,37,-18}, -{16,37,-17}, -{16,37,-16}, -{16,37,-15}, -{16,37,-14}, -{16,37,-13}, -{16,37,-12}, -{16,37,-11}, -{16,37,-10}, -{16,37,-9}, -{16,37,-8}, -{16,37,-7}, -{16,37,-6}, -{16,37,-5}, -{16,37,-4}, -{16,37,-3}, -{16,37,-2}, -{16,37,-1}, -{16,37,0}, -{16,37,1}, -{16,37,2}, -{16,37,3}, -{16,37,4}, -{16,37,5}, -{16,37,6}, -{16,37,7}, -{16,37,8}, -{16,37,9}, -{16,37,10}, -{16,37,11}, -{16,37,12}, -{16,37,13}, -{16,37,14}, -{16,37,15}, -{16,37,16}, -{16,37,17}, -{16,37,18}, -{16,37,19}, -{16,37,20}, -{16,37,21}, -{16,37,22}, -{16,37,23}, -{16,37,24}, -{16,37,25}, -{16,38,-59}, -{16,38,-58}, -{16,38,-57}, -{16,38,-56}, -{16,38,-55}, -{16,38,-54}, -{16,38,-53}, -{16,38,-52}, -{16,38,-51}, -{16,38,-50}, -{16,38,-49}, -{16,38,-48}, -{16,38,-47}, -{16,38,-46}, -{16,38,-45}, -{16,38,-44}, -{16,38,-43}, -{16,38,-42}, -{16,38,-41}, -{16,38,-40}, -{16,38,-39}, -{16,38,-38}, -{16,38,-37}, -{16,38,-36}, -{16,38,-35}, -{16,38,-34}, -{16,38,-33}, -{16,38,-32}, -{16,38,-31}, -{16,38,-30}, -{16,38,-29}, -{16,38,-28}, -{16,38,-27}, -{16,38,-26}, -{16,38,-25}, -{16,38,-24}, -{16,38,-23}, -{16,38,-22}, -{16,38,-21}, -{16,38,-20}, -{16,38,-19}, -{16,38,-18}, -{16,38,-17}, -{16,38,-16}, -{16,38,-15}, -{16,38,-14}, -{16,38,-13}, -{16,38,-12}, -{16,38,-11}, -{16,38,-10}, -{16,38,-9}, -{16,38,-8}, -{16,38,-7}, -{16,38,-6}, -{16,38,-5}, -{16,38,-4}, -{16,38,-3}, -{16,38,-2}, -{16,38,-1}, -{16,38,0}, -{16,38,1}, -{16,38,2}, -{16,38,3}, -{16,38,4}, -{16,38,5}, -{16,38,6}, -{16,39,-60}, -{16,39,-59}, -{16,39,-58}, -{16,39,-57}, -{16,39,-56}, -{16,39,-55}, -{16,39,-54}, -{16,39,-53}, -{16,39,-52}, -{16,39,-51}, -{16,39,-50}, -{16,39,-49}, -{16,39,-48}, -{16,39,-47}, -{16,39,-46}, -{16,39,-45}, -{16,39,-44}, -{16,39,-43}, -{16,39,-42}, -{16,39,-41}, -{16,39,-40}, -{16,39,-39}, -{16,39,-38}, -{16,39,-37}, -{16,39,-36}, -{16,39,-35}, -{16,39,-34}, -{16,39,-33}, -{16,39,-32}, -{16,39,-31}, -{16,39,-30}, -{16,39,-29}, -{16,39,-28}, -{16,39,-27}, -{16,39,-26}, -{16,39,-25}, -{16,39,-24}, -{16,39,-23}, -{16,39,-22}, -{16,39,-21}, -{16,39,-20}, -{16,39,-19}, -{16,39,-18}, -{16,39,-17}, -{16,39,-16}, -{16,39,-15}, -{16,39,-14}, -{16,39,-13}, -{16,39,-12}, -{16,39,-11}, -{16,39,-10}, -{16,39,-9}, -{16,39,-8}, -{16,39,-7}, -{16,40,-61}, -{16,40,-60}, -{16,40,-59}, -{16,40,-58}, -{16,40,-57}, -{16,40,-56}, -{16,40,-55}, -{16,40,-54}, -{16,40,-53}, -{16,40,-52}, -{16,40,-51}, -{16,40,-50}, -{16,40,-49}, -{16,40,-48}, -{16,40,-47}, -{16,40,-46}, -{16,40,-45}, -{16,40,-44}, -{16,40,-43}, -{16,40,-42}, -{16,40,-41}, -{16,40,-40}, -{16,40,-39}, -{16,40,-38}, -{16,40,-37}, -{16,40,-36}, -{16,40,-35}, -{16,40,-34}, -{16,40,-33}, -{16,40,-32}, -{16,40,-31}, -{16,40,-30}, -{16,40,-29}, -{16,40,-28}, -{16,40,-27}, -{16,40,-26}, -{16,40,-25}, -{16,40,-24}, -{16,40,-23}, -{16,40,-22}, -{16,40,-21}, -{16,40,-20}, -{16,40,-19}, -{16,40,-18}, -{16,40,-17}, -{16,40,-16}, -{16,41,-62}, -{16,41,-61}, -{16,41,-60}, -{16,41,-59}, -{16,41,-58}, -{16,41,-57}, -{16,41,-56}, -{16,41,-55}, -{16,41,-54}, -{16,41,-53}, -{16,41,-52}, -{16,41,-51}, -{16,41,-50}, -{16,41,-49}, -{16,41,-48}, -{16,41,-47}, -{16,41,-46}, -{16,41,-45}, -{16,41,-44}, -{16,41,-43}, -{16,41,-42}, -{16,41,-41}, -{16,41,-40}, -{16,41,-39}, -{16,41,-38}, -{16,41,-37}, -{16,41,-36}, -{16,41,-35}, -{16,41,-34}, -{16,41,-33}, -{16,41,-32}, -{16,41,-31}, -{16,41,-30}, -{16,41,-29}, -{16,41,-28}, -{16,41,-27}, -{16,41,-26}, -{16,41,-25}, -{16,41,-24}, -{16,42,-62}, -{16,42,-61}, -{16,42,-60}, -{16,42,-59}, -{16,42,-58}, -{16,42,-57}, -{16,42,-56}, -{16,42,-55}, -{16,42,-54}, -{16,42,-53}, -{16,42,-52}, -{16,42,-51}, -{16,42,-50}, -{16,42,-49}, -{16,42,-48}, -{16,42,-47}, -{16,42,-46}, -{16,42,-45}, -{16,42,-44}, -{16,42,-43}, -{16,42,-42}, -{16,42,-41}, -{16,42,-40}, -{16,42,-39}, -{16,42,-38}, -{16,42,-37}, -{16,42,-36}, -{16,42,-35}, -{16,42,-34}, -{16,42,-33}, -{16,42,-32}, -{16,42,-31}, -{16,42,-30}, -{16,43,-63}, -{16,43,-62}, -{16,43,-61}, -{16,43,-60}, -{16,43,-59}, -{16,43,-58}, -{16,43,-57}, -{16,43,-56}, -{16,43,-55}, -{16,43,-54}, -{16,43,-53}, -{16,43,-52}, -{16,43,-51}, -{16,43,-50}, -{16,43,-49}, -{16,43,-48}, -{16,43,-47}, -{16,43,-46}, -{16,43,-45}, -{16,43,-44}, -{16,43,-43}, -{16,43,-42}, -{16,43,-41}, -{16,43,-40}, -{16,43,-39}, -{16,43,-38}, -{16,43,-37}, -{16,43,-36}, -{16,44,-64}, -{16,44,-63}, -{16,44,-62}, -{16,44,-61}, -{16,44,-60}, -{16,44,-59}, -{16,44,-58}, -{16,44,-57}, -{16,44,-56}, -{16,44,-55}, -{16,44,-54}, -{16,44,-53}, -{16,44,-52}, -{16,44,-51}, -{16,44,-50}, -{16,44,-49}, -{16,44,-48}, -{16,44,-47}, -{16,44,-46}, -{16,44,-45}, -{16,44,-44}, -{16,44,-43}, -{16,44,-42}, -{16,44,-41}, -{16,45,-65}, -{16,45,-64}, -{16,45,-63}, -{16,45,-62}, -{16,45,-61}, -{16,45,-60}, -{16,45,-59}, -{16,45,-58}, -{16,45,-57}, -{16,45,-56}, -{16,45,-55}, -{16,45,-54}, -{16,45,-53}, -{16,45,-52}, -{16,45,-51}, -{16,45,-50}, -{16,45,-49}, -{16,45,-48}, -{16,45,-47}, -{16,45,-46}, -{16,45,-45}, -{16,46,-66}, -{16,46,-65}, -{16,46,-64}, -{16,46,-63}, -{16,46,-62}, -{16,46,-61}, -{16,46,-60}, -{16,46,-59}, -{16,46,-58}, -{16,46,-57}, -{16,46,-56}, -{16,46,-55}, -{16,46,-54}, -{16,46,-53}, -{16,46,-52}, -{16,46,-51}, -{16,46,-50}, -{16,46,-49}, -{16,47,-67}, -{16,47,-66}, -{16,47,-65}, -{16,47,-64}, -{16,47,-63}, -{16,47,-62}, -{16,47,-61}, -{16,47,-60}, -{16,47,-59}, -{16,47,-58}, -{16,47,-57}, -{16,47,-56}, -{16,47,-55}, -{16,47,-54}, -{16,47,-53}, -{16,48,-67}, -{16,48,-66}, -{16,48,-65}, -{16,48,-64}, -{16,48,-63}, -{16,48,-62}, -{16,48,-61}, -{16,48,-60}, -{16,48,-59}, -{16,48,-58}, -{16,48,-57}, -{16,49,-68}, -{16,49,-67}, -{16,49,-66}, -{16,49,-65}, -{16,49,-64}, -{16,49,-63}, -{16,49,-62}, -{16,49,-61}, -{16,50,-69}, -{16,50,-68}, -{16,50,-67}, -{16,50,-66}, -{16,50,-65}, -{16,50,-64}, -{16,51,-70}, -{16,51,-69}, -{16,51,-68}, -{16,51,-67}, -{16,52,-71}, -{16,52,-70}, -{17,-27,23}, -{17,-26,20}, -{17,-26,21}, -{17,-26,22}, -{17,-26,23}, -{17,-26,24}, -{17,-25,17}, -{17,-25,18}, -{17,-25,19}, -{17,-25,20}, -{17,-25,21}, -{17,-25,22}, -{17,-25,23}, -{17,-25,24}, -{17,-24,14}, -{17,-24,15}, -{17,-24,16}, -{17,-24,17}, -{17,-24,18}, -{17,-24,19}, -{17,-24,20}, -{17,-24,21}, -{17,-24,22}, -{17,-24,23}, -{17,-24,24}, -{17,-23,11}, -{17,-23,12}, -{17,-23,13}, -{17,-23,14}, -{17,-23,15}, -{17,-23,16}, -{17,-23,17}, -{17,-23,18}, -{17,-23,19}, -{17,-23,20}, -{17,-23,21}, -{17,-23,22}, -{17,-23,23}, -{17,-23,24}, -{17,-22,9}, -{17,-22,10}, -{17,-22,11}, -{17,-22,12}, -{17,-22,13}, -{17,-22,14}, -{17,-22,15}, -{17,-22,16}, -{17,-22,17}, -{17,-22,18}, -{17,-22,19}, -{17,-22,20}, -{17,-22,21}, -{17,-22,22}, -{17,-22,23}, -{17,-22,24}, -{17,-21,7}, -{17,-21,8}, -{17,-21,9}, -{17,-21,10}, -{17,-21,11}, -{17,-21,12}, -{17,-21,13}, -{17,-21,14}, -{17,-21,15}, -{17,-21,16}, -{17,-21,17}, -{17,-21,18}, -{17,-21,19}, -{17,-21,20}, -{17,-21,21}, -{17,-21,22}, -{17,-21,23}, -{17,-21,24}, -{17,-20,5}, -{17,-20,6}, -{17,-20,7}, -{17,-20,8}, -{17,-20,9}, -{17,-20,10}, -{17,-20,11}, -{17,-20,12}, -{17,-20,13}, -{17,-20,14}, -{17,-20,15}, -{17,-20,16}, -{17,-20,17}, -{17,-20,18}, -{17,-20,19}, -{17,-20,20}, -{17,-20,21}, -{17,-20,22}, -{17,-20,23}, -{17,-20,24}, -{17,-19,3}, -{17,-19,4}, -{17,-19,5}, -{17,-19,6}, -{17,-19,7}, -{17,-19,8}, -{17,-19,9}, -{17,-19,10}, -{17,-19,11}, -{17,-19,12}, -{17,-19,13}, -{17,-19,14}, -{17,-19,15}, -{17,-19,16}, -{17,-19,17}, -{17,-19,18}, -{17,-19,19}, -{17,-19,20}, -{17,-19,21}, -{17,-19,22}, -{17,-19,23}, -{17,-19,24}, -{17,-18,1}, -{17,-18,2}, -{17,-18,3}, -{17,-18,4}, -{17,-18,5}, -{17,-18,6}, -{17,-18,7}, -{17,-18,8}, -{17,-18,9}, -{17,-18,10}, -{17,-18,11}, -{17,-18,12}, -{17,-18,13}, -{17,-18,14}, -{17,-18,15}, -{17,-18,16}, -{17,-18,17}, -{17,-18,18}, -{17,-18,19}, -{17,-18,20}, -{17,-18,21}, -{17,-18,22}, -{17,-18,23}, -{17,-18,24}, -{17,-17,-1}, -{17,-17,0}, -{17,-17,1}, -{17,-17,2}, -{17,-17,3}, -{17,-17,4}, -{17,-17,5}, -{17,-17,6}, -{17,-17,7}, -{17,-17,8}, -{17,-17,9}, -{17,-17,10}, -{17,-17,11}, -{17,-17,12}, -{17,-17,13}, -{17,-17,14}, -{17,-17,15}, -{17,-17,16}, -{17,-17,17}, -{17,-17,18}, -{17,-17,19}, -{17,-17,20}, -{17,-17,21}, -{17,-17,22}, -{17,-17,23}, -{17,-17,24}, -{17,-16,-2}, -{17,-16,-1}, -{17,-16,0}, -{17,-16,1}, -{17,-16,2}, -{17,-16,3}, -{17,-16,4}, -{17,-16,5}, -{17,-16,6}, -{17,-16,7}, -{17,-16,8}, -{17,-16,9}, -{17,-16,10}, -{17,-16,11}, -{17,-16,12}, -{17,-16,13}, -{17,-16,14}, -{17,-16,15}, -{17,-16,16}, -{17,-16,17}, -{17,-16,18}, -{17,-16,19}, -{17,-16,20}, -{17,-16,21}, -{17,-16,22}, -{17,-16,23}, -{17,-16,24}, -{17,-15,-4}, -{17,-15,-3}, -{17,-15,-2}, -{17,-15,-1}, -{17,-15,0}, -{17,-15,1}, -{17,-15,2}, -{17,-15,3}, -{17,-15,4}, -{17,-15,5}, -{17,-15,6}, -{17,-15,7}, -{17,-15,8}, -{17,-15,9}, -{17,-15,10}, -{17,-15,11}, -{17,-15,12}, -{17,-15,13}, -{17,-15,14}, -{17,-15,15}, -{17,-15,16}, -{17,-15,17}, -{17,-15,18}, -{17,-15,19}, -{17,-15,20}, -{17,-15,21}, -{17,-15,22}, -{17,-15,23}, -{17,-15,24}, -{17,-14,-5}, -{17,-14,-4}, -{17,-14,-3}, -{17,-14,-2}, -{17,-14,-1}, -{17,-14,0}, -{17,-14,1}, -{17,-14,2}, -{17,-14,3}, -{17,-14,4}, -{17,-14,5}, -{17,-14,6}, -{17,-14,7}, -{17,-14,8}, -{17,-14,9}, -{17,-14,10}, -{17,-14,11}, -{17,-14,12}, -{17,-14,13}, -{17,-14,14}, -{17,-14,15}, -{17,-14,16}, -{17,-14,17}, -{17,-14,18}, -{17,-14,19}, -{17,-14,20}, -{17,-14,21}, -{17,-14,22}, -{17,-14,23}, -{17,-14,24}, -{17,-13,-7}, -{17,-13,-6}, -{17,-13,-5}, -{17,-13,-4}, -{17,-13,-3}, -{17,-13,-2}, -{17,-13,-1}, -{17,-13,0}, -{17,-13,1}, -{17,-13,2}, -{17,-13,3}, -{17,-13,4}, -{17,-13,5}, -{17,-13,6}, -{17,-13,7}, -{17,-13,8}, -{17,-13,9}, -{17,-13,10}, -{17,-13,11}, -{17,-13,12}, -{17,-13,13}, -{17,-13,14}, -{17,-13,15}, -{17,-13,16}, -{17,-13,17}, -{17,-13,18}, -{17,-13,19}, -{17,-13,20}, -{17,-13,21}, -{17,-13,22}, -{17,-13,23}, -{17,-13,24}, -{17,-12,-8}, -{17,-12,-7}, -{17,-12,-6}, -{17,-12,-5}, -{17,-12,-4}, -{17,-12,-3}, -{17,-12,-2}, -{17,-12,-1}, -{17,-12,0}, -{17,-12,1}, -{17,-12,2}, -{17,-12,3}, -{17,-12,4}, -{17,-12,5}, -{17,-12,6}, -{17,-12,7}, -{17,-12,8}, -{17,-12,9}, -{17,-12,10}, -{17,-12,11}, -{17,-12,12}, -{17,-12,13}, -{17,-12,14}, -{17,-12,15}, -{17,-12,16}, -{17,-12,17}, -{17,-12,18}, -{17,-12,19}, -{17,-12,20}, -{17,-12,21}, -{17,-12,22}, -{17,-12,23}, -{17,-12,24}, -{17,-11,-10}, -{17,-11,-9}, -{17,-11,-8}, -{17,-11,-7}, -{17,-11,-6}, -{17,-11,-5}, -{17,-11,-4}, -{17,-11,-3}, -{17,-11,-2}, -{17,-11,-1}, -{17,-11,0}, -{17,-11,1}, -{17,-11,2}, -{17,-11,3}, -{17,-11,4}, -{17,-11,5}, -{17,-11,6}, -{17,-11,7}, -{17,-11,8}, -{17,-11,9}, -{17,-11,10}, -{17,-11,11}, -{17,-11,12}, -{17,-11,13}, -{17,-11,14}, -{17,-11,15}, -{17,-11,16}, -{17,-11,17}, -{17,-11,18}, -{17,-11,19}, -{17,-11,20}, -{17,-11,21}, -{17,-11,22}, -{17,-11,23}, -{17,-11,24}, -{17,-10,-11}, -{17,-10,-10}, -{17,-10,-9}, -{17,-10,-8}, -{17,-10,-7}, -{17,-10,-6}, -{17,-10,-5}, -{17,-10,-4}, -{17,-10,-3}, -{17,-10,-2}, -{17,-10,-1}, -{17,-10,0}, -{17,-10,1}, -{17,-10,2}, -{17,-10,3}, -{17,-10,4}, -{17,-10,5}, -{17,-10,6}, -{17,-10,7}, -{17,-10,8}, -{17,-10,9}, -{17,-10,10}, -{17,-10,11}, -{17,-10,12}, -{17,-10,13}, -{17,-10,14}, -{17,-10,15}, -{17,-10,16}, -{17,-10,17}, -{17,-10,18}, -{17,-10,19}, -{17,-10,20}, -{17,-10,21}, -{17,-10,22}, -{17,-10,23}, -{17,-10,24}, -{17,-9,-12}, -{17,-9,-11}, -{17,-9,-10}, -{17,-9,-9}, -{17,-9,-8}, -{17,-9,-7}, -{17,-9,-6}, -{17,-9,-5}, -{17,-9,-4}, -{17,-9,-3}, -{17,-9,-2}, -{17,-9,-1}, -{17,-9,0}, -{17,-9,1}, -{17,-9,2}, -{17,-9,3}, -{17,-9,4}, -{17,-9,5}, -{17,-9,6}, -{17,-9,7}, -{17,-9,8}, -{17,-9,9}, -{17,-9,10}, -{17,-9,11}, -{17,-9,12}, -{17,-9,13}, -{17,-9,14}, -{17,-9,15}, -{17,-9,16}, -{17,-9,17}, -{17,-9,18}, -{17,-9,19}, -{17,-9,20}, -{17,-9,21}, -{17,-9,22}, -{17,-9,23}, -{17,-9,24}, -{17,-8,-14}, -{17,-8,-13}, -{17,-8,-12}, -{17,-8,-11}, -{17,-8,-10}, -{17,-8,-9}, -{17,-8,-8}, -{17,-8,-7}, -{17,-8,-6}, -{17,-8,-5}, -{17,-8,-4}, -{17,-8,-3}, -{17,-8,-2}, -{17,-8,-1}, -{17,-8,0}, -{17,-8,1}, -{17,-8,2}, -{17,-8,3}, -{17,-8,4}, -{17,-8,5}, -{17,-8,6}, -{17,-8,7}, -{17,-8,8}, -{17,-8,9}, -{17,-8,10}, -{17,-8,11}, -{17,-8,12}, -{17,-8,13}, -{17,-8,14}, -{17,-8,15}, -{17,-8,16}, -{17,-8,17}, -{17,-8,18}, -{17,-8,19}, -{17,-8,20}, -{17,-8,21}, -{17,-8,22}, -{17,-8,23}, -{17,-8,24}, -{17,-7,-15}, -{17,-7,-14}, -{17,-7,-13}, -{17,-7,-12}, -{17,-7,-11}, -{17,-7,-10}, -{17,-7,-9}, -{17,-7,-8}, -{17,-7,-7}, -{17,-7,-6}, -{17,-7,-5}, -{17,-7,-4}, -{17,-7,-3}, -{17,-7,-2}, -{17,-7,-1}, -{17,-7,0}, -{17,-7,1}, -{17,-7,2}, -{17,-7,3}, -{17,-7,4}, -{17,-7,5}, -{17,-7,6}, -{17,-7,7}, -{17,-7,8}, -{17,-7,9}, -{17,-7,10}, -{17,-7,11}, -{17,-7,12}, -{17,-7,13}, -{17,-7,14}, -{17,-7,15}, -{17,-7,16}, -{17,-7,17}, -{17,-7,18}, -{17,-7,19}, -{17,-7,20}, -{17,-7,21}, -{17,-7,22}, -{17,-7,23}, -{17,-7,24}, -{17,-6,-16}, -{17,-6,-15}, -{17,-6,-14}, -{17,-6,-13}, -{17,-6,-12}, -{17,-6,-11}, -{17,-6,-10}, -{17,-6,-9}, -{17,-6,-8}, -{17,-6,-7}, -{17,-6,-6}, -{17,-6,-5}, -{17,-6,-4}, -{17,-6,-3}, -{17,-6,-2}, -{17,-6,-1}, -{17,-6,0}, -{17,-6,1}, -{17,-6,2}, -{17,-6,3}, -{17,-6,4}, -{17,-6,5}, -{17,-6,6}, -{17,-6,7}, -{17,-6,8}, -{17,-6,9}, -{17,-6,10}, -{17,-6,11}, -{17,-6,12}, -{17,-6,13}, -{17,-6,14}, -{17,-6,15}, -{17,-6,16}, -{17,-6,17}, -{17,-6,18}, -{17,-6,19}, -{17,-6,20}, -{17,-6,21}, -{17,-6,22}, -{17,-6,23}, -{17,-6,24}, -{17,-5,-18}, -{17,-5,-17}, -{17,-5,-16}, -{17,-5,-15}, -{17,-5,-14}, -{17,-5,-13}, -{17,-5,-12}, -{17,-5,-11}, -{17,-5,-10}, -{17,-5,-9}, -{17,-5,-8}, -{17,-5,-7}, -{17,-5,-6}, -{17,-5,-5}, -{17,-5,-4}, -{17,-5,-3}, -{17,-5,-2}, -{17,-5,-1}, -{17,-5,0}, -{17,-5,1}, -{17,-5,2}, -{17,-5,3}, -{17,-5,4}, -{17,-5,5}, -{17,-5,6}, -{17,-5,7}, -{17,-5,8}, -{17,-5,9}, -{17,-5,10}, -{17,-5,11}, -{17,-5,12}, -{17,-5,13}, -{17,-5,14}, -{17,-5,15}, -{17,-5,16}, -{17,-5,17}, -{17,-5,18}, -{17,-5,19}, -{17,-5,20}, -{17,-5,21}, -{17,-5,22}, -{17,-5,23}, -{17,-5,24}, -{17,-4,-19}, -{17,-4,-18}, -{17,-4,-17}, -{17,-4,-16}, -{17,-4,-15}, -{17,-4,-14}, -{17,-4,-13}, -{17,-4,-12}, -{17,-4,-11}, -{17,-4,-10}, -{17,-4,-9}, -{17,-4,-8}, -{17,-4,-7}, -{17,-4,-6}, -{17,-4,-5}, -{17,-4,-4}, -{17,-4,-3}, -{17,-4,-2}, -{17,-4,-1}, -{17,-4,0}, -{17,-4,1}, -{17,-4,2}, -{17,-4,3}, -{17,-4,4}, -{17,-4,5}, -{17,-4,6}, -{17,-4,7}, -{17,-4,8}, -{17,-4,9}, -{17,-4,10}, -{17,-4,11}, -{17,-4,12}, -{17,-4,13}, -{17,-4,14}, -{17,-4,15}, -{17,-4,16}, -{17,-4,17}, -{17,-4,18}, -{17,-4,19}, -{17,-4,20}, -{17,-4,21}, -{17,-4,22}, -{17,-4,23}, -{17,-4,24}, -{17,-3,-20}, -{17,-3,-19}, -{17,-3,-18}, -{17,-3,-17}, -{17,-3,-16}, -{17,-3,-15}, -{17,-3,-14}, -{17,-3,-13}, -{17,-3,-12}, -{17,-3,-11}, -{17,-3,-10}, -{17,-3,-9}, -{17,-3,-8}, -{17,-3,-7}, -{17,-3,-6}, -{17,-3,-5}, -{17,-3,-4}, -{17,-3,-3}, -{17,-3,-2}, -{17,-3,-1}, -{17,-3,0}, -{17,-3,1}, -{17,-3,2}, -{17,-3,3}, -{17,-3,4}, -{17,-3,5}, -{17,-3,6}, -{17,-3,7}, -{17,-3,8}, -{17,-3,9}, -{17,-3,10}, -{17,-3,11}, -{17,-3,12}, -{17,-3,13}, -{17,-3,14}, -{17,-3,15}, -{17,-3,16}, -{17,-3,17}, -{17,-3,18}, -{17,-3,19}, -{17,-3,20}, -{17,-3,21}, -{17,-3,22}, -{17,-3,23}, -{17,-3,24}, -{17,-2,-21}, -{17,-2,-20}, -{17,-2,-19}, -{17,-2,-18}, -{17,-2,-17}, -{17,-2,-16}, -{17,-2,-15}, -{17,-2,-14}, -{17,-2,-13}, -{17,-2,-12}, -{17,-2,-11}, -{17,-2,-10}, -{17,-2,-9}, -{17,-2,-8}, -{17,-2,-7}, -{17,-2,-6}, -{17,-2,-5}, -{17,-2,-4}, -{17,-2,-3}, -{17,-2,-2}, -{17,-2,-1}, -{17,-2,0}, -{17,-2,1}, -{17,-2,2}, -{17,-2,3}, -{17,-2,4}, -{17,-2,5}, -{17,-2,6}, -{17,-2,7}, -{17,-2,8}, -{17,-2,9}, -{17,-2,10}, -{17,-2,11}, -{17,-2,12}, -{17,-2,13}, -{17,-2,14}, -{17,-2,15}, -{17,-2,16}, -{17,-2,17}, -{17,-2,18}, -{17,-2,19}, -{17,-2,20}, -{17,-2,21}, -{17,-2,22}, -{17,-2,23}, -{17,-2,24}, -{17,-1,-22}, -{17,-1,-21}, -{17,-1,-20}, -{17,-1,-19}, -{17,-1,-18}, -{17,-1,-17}, -{17,-1,-16}, -{17,-1,-15}, -{17,-1,-14}, -{17,-1,-13}, -{17,-1,-12}, -{17,-1,-11}, -{17,-1,-10}, -{17,-1,-9}, -{17,-1,-8}, -{17,-1,-7}, -{17,-1,-6}, -{17,-1,-5}, -{17,-1,-4}, -{17,-1,-3}, -{17,-1,-2}, -{17,-1,-1}, -{17,-1,0}, -{17,-1,1}, -{17,-1,2}, -{17,-1,3}, -{17,-1,4}, -{17,-1,5}, -{17,-1,6}, -{17,-1,7}, -{17,-1,8}, -{17,-1,9}, -{17,-1,10}, -{17,-1,11}, -{17,-1,12}, -{17,-1,13}, -{17,-1,14}, -{17,-1,15}, -{17,-1,16}, -{17,-1,17}, -{17,-1,18}, -{17,-1,19}, -{17,-1,20}, -{17,-1,21}, -{17,-1,22}, -{17,-1,23}, -{17,-1,24}, -{17,0,-23}, -{17,0,-22}, -{17,0,-21}, -{17,0,-20}, -{17,0,-19}, -{17,0,-18}, -{17,0,-17}, -{17,0,-16}, -{17,0,-15}, -{17,0,-14}, -{17,0,-13}, -{17,0,-12}, -{17,0,-11}, -{17,0,-10}, -{17,0,-9}, -{17,0,-8}, -{17,0,-7}, -{17,0,-6}, -{17,0,-5}, -{17,0,-4}, -{17,0,-3}, -{17,0,-2}, -{17,0,-1}, -{17,0,0}, -{17,0,1}, -{17,0,2}, -{17,0,3}, -{17,0,4}, -{17,0,5}, -{17,0,6}, -{17,0,7}, -{17,0,8}, -{17,0,9}, -{17,0,10}, -{17,0,11}, -{17,0,12}, -{17,0,13}, -{17,0,14}, -{17,0,15}, -{17,0,16}, -{17,0,17}, -{17,0,18}, -{17,0,19}, -{17,0,20}, -{17,0,21}, -{17,0,22}, -{17,0,23}, -{17,0,24}, -{17,1,-25}, -{17,1,-24}, -{17,1,-23}, -{17,1,-22}, -{17,1,-21}, -{17,1,-20}, -{17,1,-19}, -{17,1,-18}, -{17,1,-17}, -{17,1,-16}, -{17,1,-15}, -{17,1,-14}, -{17,1,-13}, -{17,1,-12}, -{17,1,-11}, -{17,1,-10}, -{17,1,-9}, -{17,1,-8}, -{17,1,-7}, -{17,1,-6}, -{17,1,-5}, -{17,1,-4}, -{17,1,-3}, -{17,1,-2}, -{17,1,-1}, -{17,1,0}, -{17,1,1}, -{17,1,2}, -{17,1,3}, -{17,1,4}, -{17,1,5}, -{17,1,6}, -{17,1,7}, -{17,1,8}, -{17,1,9}, -{17,1,10}, -{17,1,11}, -{17,1,12}, -{17,1,13}, -{17,1,14}, -{17,1,15}, -{17,1,16}, -{17,1,17}, -{17,1,18}, -{17,1,19}, -{17,1,20}, -{17,1,21}, -{17,1,22}, -{17,1,23}, -{17,1,24}, -{17,2,-26}, -{17,2,-25}, -{17,2,-24}, -{17,2,-23}, -{17,2,-22}, -{17,2,-21}, -{17,2,-20}, -{17,2,-19}, -{17,2,-18}, -{17,2,-17}, -{17,2,-16}, -{17,2,-15}, -{17,2,-14}, -{17,2,-13}, -{17,2,-12}, -{17,2,-11}, -{17,2,-10}, -{17,2,-9}, -{17,2,-8}, -{17,2,-7}, -{17,2,-6}, -{17,2,-5}, -{17,2,-4}, -{17,2,-3}, -{17,2,-2}, -{17,2,-1}, -{17,2,0}, -{17,2,1}, -{17,2,2}, -{17,2,3}, -{17,2,4}, -{17,2,5}, -{17,2,6}, -{17,2,7}, -{17,2,8}, -{17,2,9}, -{17,2,10}, -{17,2,11}, -{17,2,12}, -{17,2,13}, -{17,2,14}, -{17,2,15}, -{17,2,16}, -{17,2,17}, -{17,2,18}, -{17,2,19}, -{17,2,20}, -{17,2,21}, -{17,2,22}, -{17,2,23}, -{17,2,24}, -{17,3,-27}, -{17,3,-26}, -{17,3,-25}, -{17,3,-24}, -{17,3,-23}, -{17,3,-22}, -{17,3,-21}, -{17,3,-20}, -{17,3,-19}, -{17,3,-18}, -{17,3,-17}, -{17,3,-16}, -{17,3,-15}, -{17,3,-14}, -{17,3,-13}, -{17,3,-12}, -{17,3,-11}, -{17,3,-10}, -{17,3,-9}, -{17,3,-8}, -{17,3,-7}, -{17,3,-6}, -{17,3,-5}, -{17,3,-4}, -{17,3,-3}, -{17,3,-2}, -{17,3,-1}, -{17,3,0}, -{17,3,1}, -{17,3,2}, -{17,3,3}, -{17,3,4}, -{17,3,5}, -{17,3,6}, -{17,3,7}, -{17,3,8}, -{17,3,9}, -{17,3,10}, -{17,3,11}, -{17,3,12}, -{17,3,13}, -{17,3,14}, -{17,3,15}, -{17,3,16}, -{17,3,17}, -{17,3,18}, -{17,3,19}, -{17,3,20}, -{17,3,21}, -{17,3,22}, -{17,3,23}, -{17,3,24}, -{17,4,-28}, -{17,4,-27}, -{17,4,-26}, -{17,4,-25}, -{17,4,-24}, -{17,4,-23}, -{17,4,-22}, -{17,4,-21}, -{17,4,-20}, -{17,4,-19}, -{17,4,-18}, -{17,4,-17}, -{17,4,-16}, -{17,4,-15}, -{17,4,-14}, -{17,4,-13}, -{17,4,-12}, -{17,4,-11}, -{17,4,-10}, -{17,4,-9}, -{17,4,-8}, -{17,4,-7}, -{17,4,-6}, -{17,4,-5}, -{17,4,-4}, -{17,4,-3}, -{17,4,-2}, -{17,4,-1}, -{17,4,0}, -{17,4,1}, -{17,4,2}, -{17,4,3}, -{17,4,4}, -{17,4,5}, -{17,4,6}, -{17,4,7}, -{17,4,8}, -{17,4,9}, -{17,4,10}, -{17,4,11}, -{17,4,12}, -{17,4,13}, -{17,4,14}, -{17,4,15}, -{17,4,16}, -{17,4,17}, -{17,4,18}, -{17,4,19}, -{17,4,20}, -{17,4,21}, -{17,4,22}, -{17,4,23}, -{17,4,24}, -{17,5,-29}, -{17,5,-28}, -{17,5,-27}, -{17,5,-26}, -{17,5,-25}, -{17,5,-24}, -{17,5,-23}, -{17,5,-22}, -{17,5,-21}, -{17,5,-20}, -{17,5,-19}, -{17,5,-18}, -{17,5,-17}, -{17,5,-16}, -{17,5,-15}, -{17,5,-14}, -{17,5,-13}, -{17,5,-12}, -{17,5,-11}, -{17,5,-10}, -{17,5,-9}, -{17,5,-8}, -{17,5,-7}, -{17,5,-6}, -{17,5,-5}, -{17,5,-4}, -{17,5,-3}, -{17,5,-2}, -{17,5,-1}, -{17,5,0}, -{17,5,1}, -{17,5,2}, -{17,5,3}, -{17,5,4}, -{17,5,5}, -{17,5,6}, -{17,5,7}, -{17,5,8}, -{17,5,9}, -{17,5,10}, -{17,5,11}, -{17,5,12}, -{17,5,13}, -{17,5,14}, -{17,5,15}, -{17,5,16}, -{17,5,17}, -{17,5,18}, -{17,5,19}, -{17,5,20}, -{17,5,21}, -{17,5,22}, -{17,5,23}, -{17,5,24}, -{17,6,-30}, -{17,6,-29}, -{17,6,-28}, -{17,6,-27}, -{17,6,-26}, -{17,6,-25}, -{17,6,-24}, -{17,6,-23}, -{17,6,-22}, -{17,6,-21}, -{17,6,-20}, -{17,6,-19}, -{17,6,-18}, -{17,6,-17}, -{17,6,-16}, -{17,6,-15}, -{17,6,-14}, -{17,6,-13}, -{17,6,-12}, -{17,6,-11}, -{17,6,-10}, -{17,6,-9}, -{17,6,-8}, -{17,6,-7}, -{17,6,-6}, -{17,6,-5}, -{17,6,-4}, -{17,6,-3}, -{17,6,-2}, -{17,6,-1}, -{17,6,0}, -{17,6,1}, -{17,6,2}, -{17,6,3}, -{17,6,4}, -{17,6,5}, -{17,6,6}, -{17,6,7}, -{17,6,8}, -{17,6,9}, -{17,6,10}, -{17,6,11}, -{17,6,12}, -{17,6,13}, -{17,6,14}, -{17,6,15}, -{17,6,16}, -{17,6,17}, -{17,6,18}, -{17,6,19}, -{17,6,20}, -{17,6,21}, -{17,6,22}, -{17,6,23}, -{17,6,24}, -{17,7,-31}, -{17,7,-30}, -{17,7,-29}, -{17,7,-28}, -{17,7,-27}, -{17,7,-26}, -{17,7,-25}, -{17,7,-24}, -{17,7,-23}, -{17,7,-22}, -{17,7,-21}, -{17,7,-20}, -{17,7,-19}, -{17,7,-18}, -{17,7,-17}, -{17,7,-16}, -{17,7,-15}, -{17,7,-14}, -{17,7,-13}, -{17,7,-12}, -{17,7,-11}, -{17,7,-10}, -{17,7,-9}, -{17,7,-8}, -{17,7,-7}, -{17,7,-6}, -{17,7,-5}, -{17,7,-4}, -{17,7,-3}, -{17,7,-2}, -{17,7,-1}, -{17,7,0}, -{17,7,1}, -{17,7,2}, -{17,7,3}, -{17,7,4}, -{17,7,5}, -{17,7,6}, -{17,7,7}, -{17,7,8}, -{17,7,9}, -{17,7,10}, -{17,7,11}, -{17,7,12}, -{17,7,13}, -{17,7,14}, -{17,7,15}, -{17,7,16}, -{17,7,17}, -{17,7,18}, -{17,7,19}, -{17,7,20}, -{17,7,21}, -{17,7,22}, -{17,7,23}, -{17,7,24}, -{17,7,25}, -{17,8,-32}, -{17,8,-31}, -{17,8,-30}, -{17,8,-29}, -{17,8,-28}, -{17,8,-27}, -{17,8,-26}, -{17,8,-25}, -{17,8,-24}, -{17,8,-23}, -{17,8,-22}, -{17,8,-21}, -{17,8,-20}, -{17,8,-19}, -{17,8,-18}, -{17,8,-17}, -{17,8,-16}, -{17,8,-15}, -{17,8,-14}, -{17,8,-13}, -{17,8,-12}, -{17,8,-11}, -{17,8,-10}, -{17,8,-9}, -{17,8,-8}, -{17,8,-7}, -{17,8,-6}, -{17,8,-5}, -{17,8,-4}, -{17,8,-3}, -{17,8,-2}, -{17,8,-1}, -{17,8,0}, -{17,8,1}, -{17,8,2}, -{17,8,3}, -{17,8,4}, -{17,8,5}, -{17,8,6}, -{17,8,7}, -{17,8,8}, -{17,8,9}, -{17,8,10}, -{17,8,11}, -{17,8,12}, -{17,8,13}, -{17,8,14}, -{17,8,15}, -{17,8,16}, -{17,8,17}, -{17,8,18}, -{17,8,19}, -{17,8,20}, -{17,8,21}, -{17,8,22}, -{17,8,23}, -{17,8,24}, -{17,8,25}, -{17,9,-33}, -{17,9,-32}, -{17,9,-31}, -{17,9,-30}, -{17,9,-29}, -{17,9,-28}, -{17,9,-27}, -{17,9,-26}, -{17,9,-25}, -{17,9,-24}, -{17,9,-23}, -{17,9,-22}, -{17,9,-21}, -{17,9,-20}, -{17,9,-19}, -{17,9,-18}, -{17,9,-17}, -{17,9,-16}, -{17,9,-15}, -{17,9,-14}, -{17,9,-13}, -{17,9,-12}, -{17,9,-11}, -{17,9,-10}, -{17,9,-9}, -{17,9,-8}, -{17,9,-7}, -{17,9,-6}, -{17,9,-5}, -{17,9,-4}, -{17,9,-3}, -{17,9,-2}, -{17,9,-1}, -{17,9,0}, -{17,9,1}, -{17,9,2}, -{17,9,3}, -{17,9,4}, -{17,9,5}, -{17,9,6}, -{17,9,7}, -{17,9,8}, -{17,9,9}, -{17,9,10}, -{17,9,11}, -{17,9,12}, -{17,9,13}, -{17,9,14}, -{17,9,15}, -{17,9,16}, -{17,9,17}, -{17,9,18}, -{17,9,19}, -{17,9,20}, -{17,9,21}, -{17,9,22}, -{17,9,23}, -{17,9,24}, -{17,9,25}, -{17,10,-34}, -{17,10,-33}, -{17,10,-32}, -{17,10,-31}, -{17,10,-30}, -{17,10,-29}, -{17,10,-28}, -{17,10,-27}, -{17,10,-26}, -{17,10,-25}, -{17,10,-24}, -{17,10,-23}, -{17,10,-22}, -{17,10,-21}, -{17,10,-20}, -{17,10,-19}, -{17,10,-18}, -{17,10,-17}, -{17,10,-16}, -{17,10,-15}, -{17,10,-14}, -{17,10,-13}, -{17,10,-12}, -{17,10,-11}, -{17,10,-10}, -{17,10,-9}, -{17,10,-8}, -{17,10,-7}, -{17,10,-6}, -{17,10,-5}, -{17,10,-4}, -{17,10,-3}, -{17,10,-2}, -{17,10,-1}, -{17,10,0}, -{17,10,1}, -{17,10,2}, -{17,10,3}, -{17,10,4}, -{17,10,5}, -{17,10,6}, -{17,10,7}, -{17,10,8}, -{17,10,9}, -{17,10,10}, -{17,10,11}, -{17,10,12}, -{17,10,13}, -{17,10,14}, -{17,10,15}, -{17,10,16}, -{17,10,17}, -{17,10,18}, -{17,10,19}, -{17,10,20}, -{17,10,21}, -{17,10,22}, -{17,10,23}, -{17,10,24}, -{17,10,25}, -{17,11,-35}, -{17,11,-34}, -{17,11,-33}, -{17,11,-32}, -{17,11,-31}, -{17,11,-30}, -{17,11,-29}, -{17,11,-28}, -{17,11,-27}, -{17,11,-26}, -{17,11,-25}, -{17,11,-24}, -{17,11,-23}, -{17,11,-22}, -{17,11,-21}, -{17,11,-20}, -{17,11,-19}, -{17,11,-18}, -{17,11,-17}, -{17,11,-16}, -{17,11,-15}, -{17,11,-14}, -{17,11,-13}, -{17,11,-12}, -{17,11,-11}, -{17,11,-10}, -{17,11,-9}, -{17,11,-8}, -{17,11,-7}, -{17,11,-6}, -{17,11,-5}, -{17,11,-4}, -{17,11,-3}, -{17,11,-2}, -{17,11,-1}, -{17,11,0}, -{17,11,1}, -{17,11,2}, -{17,11,3}, -{17,11,4}, -{17,11,5}, -{17,11,6}, -{17,11,7}, -{17,11,8}, -{17,11,9}, -{17,11,10}, -{17,11,11}, -{17,11,12}, -{17,11,13}, -{17,11,14}, -{17,11,15}, -{17,11,16}, -{17,11,17}, -{17,11,18}, -{17,11,19}, -{17,11,20}, -{17,11,21}, -{17,11,22}, -{17,11,23}, -{17,11,24}, -{17,11,25}, -{17,12,-36}, -{17,12,-35}, -{17,12,-34}, -{17,12,-33}, -{17,12,-32}, -{17,12,-31}, -{17,12,-30}, -{17,12,-29}, -{17,12,-28}, -{17,12,-27}, -{17,12,-26}, -{17,12,-25}, -{17,12,-24}, -{17,12,-23}, -{17,12,-22}, -{17,12,-21}, -{17,12,-20}, -{17,12,-19}, -{17,12,-18}, -{17,12,-17}, -{17,12,-16}, -{17,12,-15}, -{17,12,-14}, -{17,12,-13}, -{17,12,-12}, -{17,12,-11}, -{17,12,-10}, -{17,12,-9}, -{17,12,-8}, -{17,12,-7}, -{17,12,-6}, -{17,12,-5}, -{17,12,-4}, -{17,12,-3}, -{17,12,-2}, -{17,12,-1}, -{17,12,0}, -{17,12,1}, -{17,12,2}, -{17,12,3}, -{17,12,4}, -{17,12,5}, -{17,12,6}, -{17,12,7}, -{17,12,8}, -{17,12,9}, -{17,12,10}, -{17,12,11}, -{17,12,12}, -{17,12,13}, -{17,12,14}, -{17,12,15}, -{17,12,16}, -{17,12,17}, -{17,12,18}, -{17,12,19}, -{17,12,20}, -{17,12,21}, -{17,12,22}, -{17,12,23}, -{17,12,24}, -{17,12,25}, -{17,13,-37}, -{17,13,-36}, -{17,13,-35}, -{17,13,-34}, -{17,13,-33}, -{17,13,-32}, -{17,13,-31}, -{17,13,-30}, -{17,13,-29}, -{17,13,-28}, -{17,13,-27}, -{17,13,-26}, -{17,13,-25}, -{17,13,-24}, -{17,13,-23}, -{17,13,-22}, -{17,13,-21}, -{17,13,-20}, -{17,13,-19}, -{17,13,-18}, -{17,13,-17}, -{17,13,-16}, -{17,13,-15}, -{17,13,-14}, -{17,13,-13}, -{17,13,-12}, -{17,13,-11}, -{17,13,-10}, -{17,13,-9}, -{17,13,-8}, -{17,13,-7}, -{17,13,-6}, -{17,13,-5}, -{17,13,-4}, -{17,13,-3}, -{17,13,-2}, -{17,13,-1}, -{17,13,0}, -{17,13,1}, -{17,13,2}, -{17,13,3}, -{17,13,4}, -{17,13,5}, -{17,13,6}, -{17,13,7}, -{17,13,8}, -{17,13,9}, -{17,13,10}, -{17,13,11}, -{17,13,12}, -{17,13,13}, -{17,13,14}, -{17,13,15}, -{17,13,16}, -{17,13,17}, -{17,13,18}, -{17,13,19}, -{17,13,20}, -{17,13,21}, -{17,13,22}, -{17,13,23}, -{17,13,24}, -{17,13,25}, -{17,14,-38}, -{17,14,-37}, -{17,14,-36}, -{17,14,-35}, -{17,14,-34}, -{17,14,-33}, -{17,14,-32}, -{17,14,-31}, -{17,14,-30}, -{17,14,-29}, -{17,14,-28}, -{17,14,-27}, -{17,14,-26}, -{17,14,-25}, -{17,14,-24}, -{17,14,-23}, -{17,14,-22}, -{17,14,-21}, -{17,14,-20}, -{17,14,-19}, -{17,14,-18}, -{17,14,-17}, -{17,14,-16}, -{17,14,-15}, -{17,14,-14}, -{17,14,-13}, -{17,14,-12}, -{17,14,-11}, -{17,14,-10}, -{17,14,-9}, -{17,14,-8}, -{17,14,-7}, -{17,14,-6}, -{17,14,-5}, -{17,14,-4}, -{17,14,-3}, -{17,14,-2}, -{17,14,-1}, -{17,14,0}, -{17,14,1}, -{17,14,2}, -{17,14,3}, -{17,14,4}, -{17,14,5}, -{17,14,6}, -{17,14,7}, -{17,14,8}, -{17,14,9}, -{17,14,10}, -{17,14,11}, -{17,14,12}, -{17,14,13}, -{17,14,14}, -{17,14,15}, -{17,14,16}, -{17,14,17}, -{17,14,18}, -{17,14,19}, -{17,14,20}, -{17,14,21}, -{17,14,22}, -{17,14,23}, -{17,14,24}, -{17,14,25}, -{17,15,-39}, -{17,15,-38}, -{17,15,-37}, -{17,15,-36}, -{17,15,-35}, -{17,15,-34}, -{17,15,-33}, -{17,15,-32}, -{17,15,-31}, -{17,15,-30}, -{17,15,-29}, -{17,15,-28}, -{17,15,-27}, -{17,15,-26}, -{17,15,-25}, -{17,15,-24}, -{17,15,-23}, -{17,15,-22}, -{17,15,-21}, -{17,15,-20}, -{17,15,-19}, -{17,15,-18}, -{17,15,-17}, -{17,15,-16}, -{17,15,-15}, -{17,15,-14}, -{17,15,-13}, -{17,15,-12}, -{17,15,-11}, -{17,15,-10}, -{17,15,-9}, -{17,15,-8}, -{17,15,-7}, -{17,15,-6}, -{17,15,-5}, -{17,15,-4}, -{17,15,-3}, -{17,15,-2}, -{17,15,-1}, -{17,15,0}, -{17,15,1}, -{17,15,2}, -{17,15,3}, -{17,15,4}, -{17,15,5}, -{17,15,6}, -{17,15,7}, -{17,15,8}, -{17,15,9}, -{17,15,10}, -{17,15,11}, -{17,15,12}, -{17,15,13}, -{17,15,14}, -{17,15,15}, -{17,15,16}, -{17,15,17}, -{17,15,18}, -{17,15,19}, -{17,15,20}, -{17,15,21}, -{17,15,22}, -{17,15,23}, -{17,15,24}, -{17,15,25}, -{17,16,-40}, -{17,16,-39}, -{17,16,-38}, -{17,16,-37}, -{17,16,-36}, -{17,16,-35}, -{17,16,-34}, -{17,16,-33}, -{17,16,-32}, -{17,16,-31}, -{17,16,-30}, -{17,16,-29}, -{17,16,-28}, -{17,16,-27}, -{17,16,-26}, -{17,16,-25}, -{17,16,-24}, -{17,16,-23}, -{17,16,-22}, -{17,16,-21}, -{17,16,-20}, -{17,16,-19}, -{17,16,-18}, -{17,16,-17}, -{17,16,-16}, -{17,16,-15}, -{17,16,-14}, -{17,16,-13}, -{17,16,-12}, -{17,16,-11}, -{17,16,-10}, -{17,16,-9}, -{17,16,-8}, -{17,16,-7}, -{17,16,-6}, -{17,16,-5}, -{17,16,-4}, -{17,16,-3}, -{17,16,-2}, -{17,16,-1}, -{17,16,0}, -{17,16,1}, -{17,16,2}, -{17,16,3}, -{17,16,4}, -{17,16,5}, -{17,16,6}, -{17,16,7}, -{17,16,8}, -{17,16,9}, -{17,16,10}, -{17,16,11}, -{17,16,12}, -{17,16,13}, -{17,16,14}, -{17,16,15}, -{17,16,16}, -{17,16,17}, -{17,16,18}, -{17,16,19}, -{17,16,20}, -{17,16,21}, -{17,16,22}, -{17,16,23}, -{17,16,24}, -{17,16,25}, -{17,17,-41}, -{17,17,-40}, -{17,17,-39}, -{17,17,-38}, -{17,17,-37}, -{17,17,-36}, -{17,17,-35}, -{17,17,-34}, -{17,17,-33}, -{17,17,-32}, -{17,17,-31}, -{17,17,-30}, -{17,17,-29}, -{17,17,-28}, -{17,17,-27}, -{17,17,-26}, -{17,17,-25}, -{17,17,-24}, -{17,17,-23}, -{17,17,-22}, -{17,17,-21}, -{17,17,-20}, -{17,17,-19}, -{17,17,-18}, -{17,17,-17}, -{17,17,-16}, -{17,17,-15}, -{17,17,-14}, -{17,17,-13}, -{17,17,-12}, -{17,17,-11}, -{17,17,-10}, -{17,17,-9}, -{17,17,-8}, -{17,17,-7}, -{17,17,-6}, -{17,17,-5}, -{17,17,-4}, -{17,17,-3}, -{17,17,-2}, -{17,17,-1}, -{17,17,0}, -{17,17,1}, -{17,17,2}, -{17,17,3}, -{17,17,4}, -{17,17,5}, -{17,17,6}, -{17,17,7}, -{17,17,8}, -{17,17,9}, -{17,17,10}, -{17,17,11}, -{17,17,12}, -{17,17,13}, -{17,17,14}, -{17,17,15}, -{17,17,16}, -{17,17,17}, -{17,17,18}, -{17,17,19}, -{17,17,20}, -{17,17,21}, -{17,17,22}, -{17,17,23}, -{17,17,24}, -{17,17,25}, -{17,18,-42}, -{17,18,-41}, -{17,18,-40}, -{17,18,-39}, -{17,18,-38}, -{17,18,-37}, -{17,18,-36}, -{17,18,-35}, -{17,18,-34}, -{17,18,-33}, -{17,18,-32}, -{17,18,-31}, -{17,18,-30}, -{17,18,-29}, -{17,18,-28}, -{17,18,-27}, -{17,18,-26}, -{17,18,-25}, -{17,18,-24}, -{17,18,-23}, -{17,18,-22}, -{17,18,-21}, -{17,18,-20}, -{17,18,-19}, -{17,18,-18}, -{17,18,-17}, -{17,18,-16}, -{17,18,-15}, -{17,18,-14}, -{17,18,-13}, -{17,18,-12}, -{17,18,-11}, -{17,18,-10}, -{17,18,-9}, -{17,18,-8}, -{17,18,-7}, -{17,18,-6}, -{17,18,-5}, -{17,18,-4}, -{17,18,-3}, -{17,18,-2}, -{17,18,-1}, -{17,18,0}, -{17,18,1}, -{17,18,2}, -{17,18,3}, -{17,18,4}, -{17,18,5}, -{17,18,6}, -{17,18,7}, -{17,18,8}, -{17,18,9}, -{17,18,10}, -{17,18,11}, -{17,18,12}, -{17,18,13}, -{17,18,14}, -{17,18,15}, -{17,18,16}, -{17,18,17}, -{17,18,18}, -{17,18,19}, -{17,18,20}, -{17,18,21}, -{17,18,22}, -{17,18,23}, -{17,18,24}, -{17,18,25}, -{17,19,-43}, -{17,19,-42}, -{17,19,-41}, -{17,19,-40}, -{17,19,-39}, -{17,19,-38}, -{17,19,-37}, -{17,19,-36}, -{17,19,-35}, -{17,19,-34}, -{17,19,-33}, -{17,19,-32}, -{17,19,-31}, -{17,19,-30}, -{17,19,-29}, -{17,19,-28}, -{17,19,-27}, -{17,19,-26}, -{17,19,-25}, -{17,19,-24}, -{17,19,-23}, -{17,19,-22}, -{17,19,-21}, -{17,19,-20}, -{17,19,-19}, -{17,19,-18}, -{17,19,-17}, -{17,19,-16}, -{17,19,-15}, -{17,19,-14}, -{17,19,-13}, -{17,19,-12}, -{17,19,-11}, -{17,19,-10}, -{17,19,-9}, -{17,19,-8}, -{17,19,-7}, -{17,19,-6}, -{17,19,-5}, -{17,19,-4}, -{17,19,-3}, -{17,19,-2}, -{17,19,-1}, -{17,19,0}, -{17,19,1}, -{17,19,2}, -{17,19,3}, -{17,19,4}, -{17,19,5}, -{17,19,6}, -{17,19,7}, -{17,19,8}, -{17,19,9}, -{17,19,10}, -{17,19,11}, -{17,19,12}, -{17,19,13}, -{17,19,14}, -{17,19,15}, -{17,19,16}, -{17,19,17}, -{17,19,18}, -{17,19,19}, -{17,19,20}, -{17,19,21}, -{17,19,22}, -{17,19,23}, -{17,19,24}, -{17,19,25}, -{17,20,-44}, -{17,20,-43}, -{17,20,-42}, -{17,20,-41}, -{17,20,-40}, -{17,20,-39}, -{17,20,-38}, -{17,20,-37}, -{17,20,-36}, -{17,20,-35}, -{17,20,-34}, -{17,20,-33}, -{17,20,-32}, -{17,20,-31}, -{17,20,-30}, -{17,20,-29}, -{17,20,-28}, -{17,20,-27}, -{17,20,-26}, -{17,20,-25}, -{17,20,-24}, -{17,20,-23}, -{17,20,-22}, -{17,20,-21}, -{17,20,-20}, -{17,20,-19}, -{17,20,-18}, -{17,20,-17}, -{17,20,-16}, -{17,20,-15}, -{17,20,-14}, -{17,20,-13}, -{17,20,-12}, -{17,20,-11}, -{17,20,-10}, -{17,20,-9}, -{17,20,-8}, -{17,20,-7}, -{17,20,-6}, -{17,20,-5}, -{17,20,-4}, -{17,20,-3}, -{17,20,-2}, -{17,20,-1}, -{17,20,0}, -{17,20,1}, -{17,20,2}, -{17,20,3}, -{17,20,4}, -{17,20,5}, -{17,20,6}, -{17,20,7}, -{17,20,8}, -{17,20,9}, -{17,20,10}, -{17,20,11}, -{17,20,12}, -{17,20,13}, -{17,20,14}, -{17,20,15}, -{17,20,16}, -{17,20,17}, -{17,20,18}, -{17,20,19}, -{17,20,20}, -{17,20,21}, -{17,20,22}, -{17,20,23}, -{17,20,24}, -{17,20,25}, -{17,21,-45}, -{17,21,-44}, -{17,21,-43}, -{17,21,-42}, -{17,21,-41}, -{17,21,-40}, -{17,21,-39}, -{17,21,-38}, -{17,21,-37}, -{17,21,-36}, -{17,21,-35}, -{17,21,-34}, -{17,21,-33}, -{17,21,-32}, -{17,21,-31}, -{17,21,-30}, -{17,21,-29}, -{17,21,-28}, -{17,21,-27}, -{17,21,-26}, -{17,21,-25}, -{17,21,-24}, -{17,21,-23}, -{17,21,-22}, -{17,21,-21}, -{17,21,-20}, -{17,21,-19}, -{17,21,-18}, -{17,21,-17}, -{17,21,-16}, -{17,21,-15}, -{17,21,-14}, -{17,21,-13}, -{17,21,-12}, -{17,21,-11}, -{17,21,-10}, -{17,21,-9}, -{17,21,-8}, -{17,21,-7}, -{17,21,-6}, -{17,21,-5}, -{17,21,-4}, -{17,21,-3}, -{17,21,-2}, -{17,21,-1}, -{17,21,0}, -{17,21,1}, -{17,21,2}, -{17,21,3}, -{17,21,4}, -{17,21,5}, -{17,21,6}, -{17,21,7}, -{17,21,8}, -{17,21,9}, -{17,21,10}, -{17,21,11}, -{17,21,12}, -{17,21,13}, -{17,21,14}, -{17,21,15}, -{17,21,16}, -{17,21,17}, -{17,21,18}, -{17,21,19}, -{17,21,20}, -{17,21,21}, -{17,21,22}, -{17,21,23}, -{17,21,24}, -{17,21,25}, -{17,22,-46}, -{17,22,-45}, -{17,22,-44}, -{17,22,-43}, -{17,22,-42}, -{17,22,-41}, -{17,22,-40}, -{17,22,-39}, -{17,22,-38}, -{17,22,-37}, -{17,22,-36}, -{17,22,-35}, -{17,22,-34}, -{17,22,-33}, -{17,22,-32}, -{17,22,-31}, -{17,22,-30}, -{17,22,-29}, -{17,22,-28}, -{17,22,-27}, -{17,22,-26}, -{17,22,-25}, -{17,22,-24}, -{17,22,-23}, -{17,22,-22}, -{17,22,-21}, -{17,22,-20}, -{17,22,-19}, -{17,22,-18}, -{17,22,-17}, -{17,22,-16}, -{17,22,-15}, -{17,22,-14}, -{17,22,-13}, -{17,22,-12}, -{17,22,-11}, -{17,22,-10}, -{17,22,-9}, -{17,22,-8}, -{17,22,-7}, -{17,22,-6}, -{17,22,-5}, -{17,22,-4}, -{17,22,-3}, -{17,22,-2}, -{17,22,-1}, -{17,22,0}, -{17,22,1}, -{17,22,2}, -{17,22,3}, -{17,22,4}, -{17,22,5}, -{17,22,6}, -{17,22,7}, -{17,22,8}, -{17,22,9}, -{17,22,10}, -{17,22,11}, -{17,22,12}, -{17,22,13}, -{17,22,14}, -{17,22,15}, -{17,22,16}, -{17,22,17}, -{17,22,18}, -{17,22,19}, -{17,22,20}, -{17,22,21}, -{17,22,22}, -{17,22,23}, -{17,22,24}, -{17,22,25}, -{17,23,-47}, -{17,23,-46}, -{17,23,-45}, -{17,23,-44}, -{17,23,-43}, -{17,23,-42}, -{17,23,-41}, -{17,23,-40}, -{17,23,-39}, -{17,23,-38}, -{17,23,-37}, -{17,23,-36}, -{17,23,-35}, -{17,23,-34}, -{17,23,-33}, -{17,23,-32}, -{17,23,-31}, -{17,23,-30}, -{17,23,-29}, -{17,23,-28}, -{17,23,-27}, -{17,23,-26}, -{17,23,-25}, -{17,23,-24}, -{17,23,-23}, -{17,23,-22}, -{17,23,-21}, -{17,23,-20}, -{17,23,-19}, -{17,23,-18}, -{17,23,-17}, -{17,23,-16}, -{17,23,-15}, -{17,23,-14}, -{17,23,-13}, -{17,23,-12}, -{17,23,-11}, -{17,23,-10}, -{17,23,-9}, -{17,23,-8}, -{17,23,-7}, -{17,23,-6}, -{17,23,-5}, -{17,23,-4}, -{17,23,-3}, -{17,23,-2}, -{17,23,-1}, -{17,23,0}, -{17,23,1}, -{17,23,2}, -{17,23,3}, -{17,23,4}, -{17,23,5}, -{17,23,6}, -{17,23,7}, -{17,23,8}, -{17,23,9}, -{17,23,10}, -{17,23,11}, -{17,23,12}, -{17,23,13}, -{17,23,14}, -{17,23,15}, -{17,23,16}, -{17,23,17}, -{17,23,18}, -{17,23,19}, -{17,23,20}, -{17,23,21}, -{17,23,22}, -{17,23,23}, -{17,23,24}, -{17,23,25}, -{17,24,-47}, -{17,24,-46}, -{17,24,-45}, -{17,24,-44}, -{17,24,-43}, -{17,24,-42}, -{17,24,-41}, -{17,24,-40}, -{17,24,-39}, -{17,24,-38}, -{17,24,-37}, -{17,24,-36}, -{17,24,-35}, -{17,24,-34}, -{17,24,-33}, -{17,24,-32}, -{17,24,-31}, -{17,24,-30}, -{17,24,-29}, -{17,24,-28}, -{17,24,-27}, -{17,24,-26}, -{17,24,-25}, -{17,24,-24}, -{17,24,-23}, -{17,24,-22}, -{17,24,-21}, -{17,24,-20}, -{17,24,-19}, -{17,24,-18}, -{17,24,-17}, -{17,24,-16}, -{17,24,-15}, -{17,24,-14}, -{17,24,-13}, -{17,24,-12}, -{17,24,-11}, -{17,24,-10}, -{17,24,-9}, -{17,24,-8}, -{17,24,-7}, -{17,24,-6}, -{17,24,-5}, -{17,24,-4}, -{17,24,-3}, -{17,24,-2}, -{17,24,-1}, -{17,24,0}, -{17,24,1}, -{17,24,2}, -{17,24,3}, -{17,24,4}, -{17,24,5}, -{17,24,6}, -{17,24,7}, -{17,24,8}, -{17,24,9}, -{17,24,10}, -{17,24,11}, -{17,24,12}, -{17,24,13}, -{17,24,14}, -{17,24,15}, -{17,24,16}, -{17,24,17}, -{17,24,18}, -{17,24,19}, -{17,24,20}, -{17,24,21}, -{17,24,22}, -{17,24,23}, -{17,24,24}, -{17,24,25}, -{17,25,-48}, -{17,25,-47}, -{17,25,-46}, -{17,25,-45}, -{17,25,-44}, -{17,25,-43}, -{17,25,-42}, -{17,25,-41}, -{17,25,-40}, -{17,25,-39}, -{17,25,-38}, -{17,25,-37}, -{17,25,-36}, -{17,25,-35}, -{17,25,-34}, -{17,25,-33}, -{17,25,-32}, -{17,25,-31}, -{17,25,-30}, -{17,25,-29}, -{17,25,-28}, -{17,25,-27}, -{17,25,-26}, -{17,25,-25}, -{17,25,-24}, -{17,25,-23}, -{17,25,-22}, -{17,25,-21}, -{17,25,-20}, -{17,25,-19}, -{17,25,-18}, -{17,25,-17}, -{17,25,-16}, -{17,25,-15}, -{17,25,-14}, -{17,25,-13}, -{17,25,-12}, -{17,25,-11}, -{17,25,-10}, -{17,25,-9}, -{17,25,-8}, -{17,25,-7}, -{17,25,-6}, -{17,25,-5}, -{17,25,-4}, -{17,25,-3}, -{17,25,-2}, -{17,25,-1}, -{17,25,0}, -{17,25,1}, -{17,25,2}, -{17,25,3}, -{17,25,4}, -{17,25,5}, -{17,25,6}, -{17,25,7}, -{17,25,8}, -{17,25,9}, -{17,25,10}, -{17,25,11}, -{17,25,12}, -{17,25,13}, -{17,25,14}, -{17,25,15}, -{17,25,16}, -{17,25,17}, -{17,25,18}, -{17,25,19}, -{17,25,20}, -{17,25,21}, -{17,25,22}, -{17,25,23}, -{17,25,24}, -{17,25,25}, -{17,26,-49}, -{17,26,-48}, -{17,26,-47}, -{17,26,-46}, -{17,26,-45}, -{17,26,-44}, -{17,26,-43}, -{17,26,-42}, -{17,26,-41}, -{17,26,-40}, -{17,26,-39}, -{17,26,-38}, -{17,26,-37}, -{17,26,-36}, -{17,26,-35}, -{17,26,-34}, -{17,26,-33}, -{17,26,-32}, -{17,26,-31}, -{17,26,-30}, -{17,26,-29}, -{17,26,-28}, -{17,26,-27}, -{17,26,-26}, -{17,26,-25}, -{17,26,-24}, -{17,26,-23}, -{17,26,-22}, -{17,26,-21}, -{17,26,-20}, -{17,26,-19}, -{17,26,-18}, -{17,26,-17}, -{17,26,-16}, -{17,26,-15}, -{17,26,-14}, -{17,26,-13}, -{17,26,-12}, -{17,26,-11}, -{17,26,-10}, -{17,26,-9}, -{17,26,-8}, -{17,26,-7}, -{17,26,-6}, -{17,26,-5}, -{17,26,-4}, -{17,26,-3}, -{17,26,-2}, -{17,26,-1}, -{17,26,0}, -{17,26,1}, -{17,26,2}, -{17,26,3}, -{17,26,4}, -{17,26,5}, -{17,26,6}, -{17,26,7}, -{17,26,8}, -{17,26,9}, -{17,26,10}, -{17,26,11}, -{17,26,12}, -{17,26,13}, -{17,26,14}, -{17,26,15}, -{17,26,16}, -{17,26,17}, -{17,26,18}, -{17,26,19}, -{17,26,20}, -{17,26,21}, -{17,26,22}, -{17,26,23}, -{17,26,24}, -{17,26,25}, -{17,27,-50}, -{17,27,-49}, -{17,27,-48}, -{17,27,-47}, -{17,27,-46}, -{17,27,-45}, -{17,27,-44}, -{17,27,-43}, -{17,27,-42}, -{17,27,-41}, -{17,27,-40}, -{17,27,-39}, -{17,27,-38}, -{17,27,-37}, -{17,27,-36}, -{17,27,-35}, -{17,27,-34}, -{17,27,-33}, -{17,27,-32}, -{17,27,-31}, -{17,27,-30}, -{17,27,-29}, -{17,27,-28}, -{17,27,-27}, -{17,27,-26}, -{17,27,-25}, -{17,27,-24}, -{17,27,-23}, -{17,27,-22}, -{17,27,-21}, -{17,27,-20}, -{17,27,-19}, -{17,27,-18}, -{17,27,-17}, -{17,27,-16}, -{17,27,-15}, -{17,27,-14}, -{17,27,-13}, -{17,27,-12}, -{17,27,-11}, -{17,27,-10}, -{17,27,-9}, -{17,27,-8}, -{17,27,-7}, -{17,27,-6}, -{17,27,-5}, -{17,27,-4}, -{17,27,-3}, -{17,27,-2}, -{17,27,-1}, -{17,27,0}, -{17,27,1}, -{17,27,2}, -{17,27,3}, -{17,27,4}, -{17,27,5}, -{17,27,6}, -{17,27,7}, -{17,27,8}, -{17,27,9}, -{17,27,10}, -{17,27,11}, -{17,27,12}, -{17,27,13}, -{17,27,14}, -{17,27,15}, -{17,27,16}, -{17,27,17}, -{17,27,18}, -{17,27,19}, -{17,27,20}, -{17,27,21}, -{17,27,22}, -{17,27,23}, -{17,27,24}, -{17,27,25}, -{17,28,-51}, -{17,28,-50}, -{17,28,-49}, -{17,28,-48}, -{17,28,-47}, -{17,28,-46}, -{17,28,-45}, -{17,28,-44}, -{17,28,-43}, -{17,28,-42}, -{17,28,-41}, -{17,28,-40}, -{17,28,-39}, -{17,28,-38}, -{17,28,-37}, -{17,28,-36}, -{17,28,-35}, -{17,28,-34}, -{17,28,-33}, -{17,28,-32}, -{17,28,-31}, -{17,28,-30}, -{17,28,-29}, -{17,28,-28}, -{17,28,-27}, -{17,28,-26}, -{17,28,-25}, -{17,28,-24}, -{17,28,-23}, -{17,28,-22}, -{17,28,-21}, -{17,28,-20}, -{17,28,-19}, -{17,28,-18}, -{17,28,-17}, -{17,28,-16}, -{17,28,-15}, -{17,28,-14}, -{17,28,-13}, -{17,28,-12}, -{17,28,-11}, -{17,28,-10}, -{17,28,-9}, -{17,28,-8}, -{17,28,-7}, -{17,28,-6}, -{17,28,-5}, -{17,28,-4}, -{17,28,-3}, -{17,28,-2}, -{17,28,-1}, -{17,28,0}, -{17,28,1}, -{17,28,2}, -{17,28,3}, -{17,28,4}, -{17,28,5}, -{17,28,6}, -{17,28,7}, -{17,28,8}, -{17,28,9}, -{17,28,10}, -{17,28,11}, -{17,28,12}, -{17,28,13}, -{17,28,14}, -{17,28,15}, -{17,28,16}, -{17,28,17}, -{17,28,18}, -{17,28,19}, -{17,28,20}, -{17,28,21}, -{17,28,22}, -{17,28,23}, -{17,28,24}, -{17,28,25}, -{17,29,-52}, -{17,29,-51}, -{17,29,-50}, -{17,29,-49}, -{17,29,-48}, -{17,29,-47}, -{17,29,-46}, -{17,29,-45}, -{17,29,-44}, -{17,29,-43}, -{17,29,-42}, -{17,29,-41}, -{17,29,-40}, -{17,29,-39}, -{17,29,-38}, -{17,29,-37}, -{17,29,-36}, -{17,29,-35}, -{17,29,-34}, -{17,29,-33}, -{17,29,-32}, -{17,29,-31}, -{17,29,-30}, -{17,29,-29}, -{17,29,-28}, -{17,29,-27}, -{17,29,-26}, -{17,29,-25}, -{17,29,-24}, -{17,29,-23}, -{17,29,-22}, -{17,29,-21}, -{17,29,-20}, -{17,29,-19}, -{17,29,-18}, -{17,29,-17}, -{17,29,-16}, -{17,29,-15}, -{17,29,-14}, -{17,29,-13}, -{17,29,-12}, -{17,29,-11}, -{17,29,-10}, -{17,29,-9}, -{17,29,-8}, -{17,29,-7}, -{17,29,-6}, -{17,29,-5}, -{17,29,-4}, -{17,29,-3}, -{17,29,-2}, -{17,29,-1}, -{17,29,0}, -{17,29,1}, -{17,29,2}, -{17,29,3}, -{17,29,4}, -{17,29,5}, -{17,29,6}, -{17,29,7}, -{17,29,8}, -{17,29,9}, -{17,29,10}, -{17,29,11}, -{17,29,12}, -{17,29,13}, -{17,29,14}, -{17,29,15}, -{17,29,16}, -{17,29,17}, -{17,29,18}, -{17,29,19}, -{17,29,20}, -{17,29,21}, -{17,29,22}, -{17,29,23}, -{17,29,24}, -{17,29,25}, -{17,29,26}, -{17,30,-53}, -{17,30,-52}, -{17,30,-51}, -{17,30,-50}, -{17,30,-49}, -{17,30,-48}, -{17,30,-47}, -{17,30,-46}, -{17,30,-45}, -{17,30,-44}, -{17,30,-43}, -{17,30,-42}, -{17,30,-41}, -{17,30,-40}, -{17,30,-39}, -{17,30,-38}, -{17,30,-37}, -{17,30,-36}, -{17,30,-35}, -{17,30,-34}, -{17,30,-33}, -{17,30,-32}, -{17,30,-31}, -{17,30,-30}, -{17,30,-29}, -{17,30,-28}, -{17,30,-27}, -{17,30,-26}, -{17,30,-25}, -{17,30,-24}, -{17,30,-23}, -{17,30,-22}, -{17,30,-21}, -{17,30,-20}, -{17,30,-19}, -{17,30,-18}, -{17,30,-17}, -{17,30,-16}, -{17,30,-15}, -{17,30,-14}, -{17,30,-13}, -{17,30,-12}, -{17,30,-11}, -{17,30,-10}, -{17,30,-9}, -{17,30,-8}, -{17,30,-7}, -{17,30,-6}, -{17,30,-5}, -{17,30,-4}, -{17,30,-3}, -{17,30,-2}, -{17,30,-1}, -{17,30,0}, -{17,30,1}, -{17,30,2}, -{17,30,3}, -{17,30,4}, -{17,30,5}, -{17,30,6}, -{17,30,7}, -{17,30,8}, -{17,30,9}, -{17,30,10}, -{17,30,11}, -{17,30,12}, -{17,30,13}, -{17,30,14}, -{17,30,15}, -{17,30,16}, -{17,30,17}, -{17,30,18}, -{17,30,19}, -{17,30,20}, -{17,30,21}, -{17,30,22}, -{17,30,23}, -{17,30,24}, -{17,30,25}, -{17,30,26}, -{17,31,-54}, -{17,31,-53}, -{17,31,-52}, -{17,31,-51}, -{17,31,-50}, -{17,31,-49}, -{17,31,-48}, -{17,31,-47}, -{17,31,-46}, -{17,31,-45}, -{17,31,-44}, -{17,31,-43}, -{17,31,-42}, -{17,31,-41}, -{17,31,-40}, -{17,31,-39}, -{17,31,-38}, -{17,31,-37}, -{17,31,-36}, -{17,31,-35}, -{17,31,-34}, -{17,31,-33}, -{17,31,-32}, -{17,31,-31}, -{17,31,-30}, -{17,31,-29}, -{17,31,-28}, -{17,31,-27}, -{17,31,-26}, -{17,31,-25}, -{17,31,-24}, -{17,31,-23}, -{17,31,-22}, -{17,31,-21}, -{17,31,-20}, -{17,31,-19}, -{17,31,-18}, -{17,31,-17}, -{17,31,-16}, -{17,31,-15}, -{17,31,-14}, -{17,31,-13}, -{17,31,-12}, -{17,31,-11}, -{17,31,-10}, -{17,31,-9}, -{17,31,-8}, -{17,31,-7}, -{17,31,-6}, -{17,31,-5}, -{17,31,-4}, -{17,31,-3}, -{17,31,-2}, -{17,31,-1}, -{17,31,0}, -{17,31,1}, -{17,31,2}, -{17,31,3}, -{17,31,4}, -{17,31,5}, -{17,31,6}, -{17,31,7}, -{17,31,8}, -{17,31,9}, -{17,31,10}, -{17,31,11}, -{17,31,12}, -{17,31,13}, -{17,31,14}, -{17,31,15}, -{17,31,16}, -{17,31,17}, -{17,31,18}, -{17,31,19}, -{17,31,20}, -{17,31,21}, -{17,31,22}, -{17,31,23}, -{17,31,24}, -{17,31,25}, -{17,31,26}, -{17,32,-55}, -{17,32,-54}, -{17,32,-53}, -{17,32,-52}, -{17,32,-51}, -{17,32,-50}, -{17,32,-49}, -{17,32,-48}, -{17,32,-47}, -{17,32,-46}, -{17,32,-45}, -{17,32,-44}, -{17,32,-43}, -{17,32,-42}, -{17,32,-41}, -{17,32,-40}, -{17,32,-39}, -{17,32,-38}, -{17,32,-37}, -{17,32,-36}, -{17,32,-35}, -{17,32,-34}, -{17,32,-33}, -{17,32,-32}, -{17,32,-31}, -{17,32,-30}, -{17,32,-29}, -{17,32,-28}, -{17,32,-27}, -{17,32,-26}, -{17,32,-25}, -{17,32,-24}, -{17,32,-23}, -{17,32,-22}, -{17,32,-21}, -{17,32,-20}, -{17,32,-19}, -{17,32,-18}, -{17,32,-17}, -{17,32,-16}, -{17,32,-15}, -{17,32,-14}, -{17,32,-13}, -{17,32,-12}, -{17,32,-11}, -{17,32,-10}, -{17,32,-9}, -{17,32,-8}, -{17,32,-7}, -{17,32,-6}, -{17,32,-5}, -{17,32,-4}, -{17,32,-3}, -{17,32,-2}, -{17,32,-1}, -{17,32,0}, -{17,32,1}, -{17,32,2}, -{17,32,3}, -{17,32,4}, -{17,32,5}, -{17,32,6}, -{17,32,7}, -{17,32,8}, -{17,32,9}, -{17,32,10}, -{17,32,11}, -{17,32,12}, -{17,32,13}, -{17,32,14}, -{17,32,15}, -{17,32,16}, -{17,32,17}, -{17,32,18}, -{17,32,19}, -{17,32,20}, -{17,32,21}, -{17,32,22}, -{17,32,23}, -{17,32,24}, -{17,32,25}, -{17,32,26}, -{17,33,-56}, -{17,33,-55}, -{17,33,-54}, -{17,33,-53}, -{17,33,-52}, -{17,33,-51}, -{17,33,-50}, -{17,33,-49}, -{17,33,-48}, -{17,33,-47}, -{17,33,-46}, -{17,33,-45}, -{17,33,-44}, -{17,33,-43}, -{17,33,-42}, -{17,33,-41}, -{17,33,-40}, -{17,33,-39}, -{17,33,-38}, -{17,33,-37}, -{17,33,-36}, -{17,33,-35}, -{17,33,-34}, -{17,33,-33}, -{17,33,-32}, -{17,33,-31}, -{17,33,-30}, -{17,33,-29}, -{17,33,-28}, -{17,33,-27}, -{17,33,-26}, -{17,33,-25}, -{17,33,-24}, -{17,33,-23}, -{17,33,-22}, -{17,33,-21}, -{17,33,-20}, -{17,33,-19}, -{17,33,-18}, -{17,33,-17}, -{17,33,-16}, -{17,33,-15}, -{17,33,-14}, -{17,33,-13}, -{17,33,-12}, -{17,33,-11}, -{17,33,-10}, -{17,33,-9}, -{17,33,-8}, -{17,33,-7}, -{17,33,-6}, -{17,33,-5}, -{17,33,-4}, -{17,33,-3}, -{17,33,-2}, -{17,33,-1}, -{17,33,0}, -{17,33,1}, -{17,33,2}, -{17,33,3}, -{17,33,4}, -{17,33,5}, -{17,33,6}, -{17,33,7}, -{17,33,8}, -{17,33,9}, -{17,33,10}, -{17,33,11}, -{17,33,12}, -{17,33,13}, -{17,33,14}, -{17,33,15}, -{17,33,16}, -{17,33,17}, -{17,33,18}, -{17,33,19}, -{17,33,20}, -{17,33,21}, -{17,33,22}, -{17,33,23}, -{17,33,24}, -{17,33,25}, -{17,33,26}, -{17,34,-56}, -{17,34,-55}, -{17,34,-54}, -{17,34,-53}, -{17,34,-52}, -{17,34,-51}, -{17,34,-50}, -{17,34,-49}, -{17,34,-48}, -{17,34,-47}, -{17,34,-46}, -{17,34,-45}, -{17,34,-44}, -{17,34,-43}, -{17,34,-42}, -{17,34,-41}, -{17,34,-40}, -{17,34,-39}, -{17,34,-38}, -{17,34,-37}, -{17,34,-36}, -{17,34,-35}, -{17,34,-34}, -{17,34,-33}, -{17,34,-32}, -{17,34,-31}, -{17,34,-30}, -{17,34,-29}, -{17,34,-28}, -{17,34,-27}, -{17,34,-26}, -{17,34,-25}, -{17,34,-24}, -{17,34,-23}, -{17,34,-22}, -{17,34,-21}, -{17,34,-20}, -{17,34,-19}, -{17,34,-18}, -{17,34,-17}, -{17,34,-16}, -{17,34,-15}, -{17,34,-14}, -{17,34,-13}, -{17,34,-12}, -{17,34,-11}, -{17,34,-10}, -{17,34,-9}, -{17,34,-8}, -{17,34,-7}, -{17,34,-6}, -{17,34,-5}, -{17,34,-4}, -{17,34,-3}, -{17,34,-2}, -{17,34,-1}, -{17,34,0}, -{17,34,1}, -{17,34,2}, -{17,34,3}, -{17,34,4}, -{17,34,5}, -{17,34,6}, -{17,34,7}, -{17,34,8}, -{17,34,9}, -{17,34,10}, -{17,34,11}, -{17,34,12}, -{17,34,13}, -{17,34,14}, -{17,34,15}, -{17,34,16}, -{17,34,17}, -{17,34,18}, -{17,34,19}, -{17,34,20}, -{17,34,21}, -{17,34,22}, -{17,34,23}, -{17,34,24}, -{17,34,25}, -{17,34,26}, -{17,35,-57}, -{17,35,-56}, -{17,35,-55}, -{17,35,-54}, -{17,35,-53}, -{17,35,-52}, -{17,35,-51}, -{17,35,-50}, -{17,35,-49}, -{17,35,-48}, -{17,35,-47}, -{17,35,-46}, -{17,35,-45}, -{17,35,-44}, -{17,35,-43}, -{17,35,-42}, -{17,35,-41}, -{17,35,-40}, -{17,35,-39}, -{17,35,-38}, -{17,35,-37}, -{17,35,-36}, -{17,35,-35}, -{17,35,-34}, -{17,35,-33}, -{17,35,-32}, -{17,35,-31}, -{17,35,-30}, -{17,35,-29}, -{17,35,-28}, -{17,35,-27}, -{17,35,-26}, -{17,35,-25}, -{17,35,-24}, -{17,35,-23}, -{17,35,-22}, -{17,35,-21}, -{17,35,-20}, -{17,35,-19}, -{17,35,-18}, -{17,35,-17}, -{17,35,-16}, -{17,35,-15}, -{17,35,-14}, -{17,35,-13}, -{17,35,-12}, -{17,35,-11}, -{17,35,-10}, -{17,35,-9}, -{17,35,-8}, -{17,35,-7}, -{17,35,-6}, -{17,35,-5}, -{17,35,-4}, -{17,35,-3}, -{17,35,-2}, -{17,35,-1}, -{17,35,0}, -{17,35,1}, -{17,35,2}, -{17,35,3}, -{17,35,4}, -{17,35,5}, -{17,35,6}, -{17,35,7}, -{17,35,8}, -{17,35,9}, -{17,35,10}, -{17,35,11}, -{17,35,12}, -{17,35,13}, -{17,35,14}, -{17,35,15}, -{17,35,16}, -{17,35,17}, -{17,35,18}, -{17,35,19}, -{17,35,20}, -{17,35,21}, -{17,35,22}, -{17,35,23}, -{17,35,24}, -{17,35,25}, -{17,35,26}, -{17,36,-58}, -{17,36,-57}, -{17,36,-56}, -{17,36,-55}, -{17,36,-54}, -{17,36,-53}, -{17,36,-52}, -{17,36,-51}, -{17,36,-50}, -{17,36,-49}, -{17,36,-48}, -{17,36,-47}, -{17,36,-46}, -{17,36,-45}, -{17,36,-44}, -{17,36,-43}, -{17,36,-42}, -{17,36,-41}, -{17,36,-40}, -{17,36,-39}, -{17,36,-38}, -{17,36,-37}, -{17,36,-36}, -{17,36,-35}, -{17,36,-34}, -{17,36,-33}, -{17,36,-32}, -{17,36,-31}, -{17,36,-30}, -{17,36,-29}, -{17,36,-28}, -{17,36,-27}, -{17,36,-26}, -{17,36,-25}, -{17,36,-24}, -{17,36,-23}, -{17,36,-22}, -{17,36,-21}, -{17,36,-20}, -{17,36,-19}, -{17,36,-18}, -{17,36,-17}, -{17,36,-16}, -{17,36,-15}, -{17,36,-14}, -{17,36,-13}, -{17,36,-12}, -{17,36,-11}, -{17,36,-10}, -{17,36,-9}, -{17,36,-8}, -{17,36,-7}, -{17,36,-6}, -{17,36,-5}, -{17,36,-4}, -{17,36,-3}, -{17,36,-2}, -{17,36,-1}, -{17,36,0}, -{17,36,1}, -{17,36,2}, -{17,36,3}, -{17,36,4}, -{17,36,5}, -{17,36,6}, -{17,36,7}, -{17,36,8}, -{17,36,9}, -{17,36,10}, -{17,36,11}, -{17,36,12}, -{17,36,13}, -{17,36,14}, -{17,36,15}, -{17,36,16}, -{17,36,17}, -{17,36,18}, -{17,36,19}, -{17,36,20}, -{17,36,21}, -{17,36,22}, -{17,36,23}, -{17,36,24}, -{17,36,25}, -{17,36,26}, -{17,37,-59}, -{17,37,-58}, -{17,37,-57}, -{17,37,-56}, -{17,37,-55}, -{17,37,-54}, -{17,37,-53}, -{17,37,-52}, -{17,37,-51}, -{17,37,-50}, -{17,37,-49}, -{17,37,-48}, -{17,37,-47}, -{17,37,-46}, -{17,37,-45}, -{17,37,-44}, -{17,37,-43}, -{17,37,-42}, -{17,37,-41}, -{17,37,-40}, -{17,37,-39}, -{17,37,-38}, -{17,37,-37}, -{17,37,-36}, -{17,37,-35}, -{17,37,-34}, -{17,37,-33}, -{17,37,-32}, -{17,37,-31}, -{17,37,-30}, -{17,37,-29}, -{17,37,-28}, -{17,37,-27}, -{17,37,-26}, -{17,37,-25}, -{17,37,-24}, -{17,37,-23}, -{17,37,-22}, -{17,37,-21}, -{17,37,-20}, -{17,37,-19}, -{17,37,-18}, -{17,37,-17}, -{17,37,-16}, -{17,37,-15}, -{17,37,-14}, -{17,37,-13}, -{17,37,-12}, -{17,37,-11}, -{17,37,-10}, -{17,37,-9}, -{17,37,-8}, -{17,37,-7}, -{17,37,-6}, -{17,37,-5}, -{17,37,-4}, -{17,37,-3}, -{17,37,-2}, -{17,37,-1}, -{17,37,0}, -{17,37,1}, -{17,37,2}, -{17,37,3}, -{17,37,4}, -{17,37,5}, -{17,37,6}, -{17,37,7}, -{17,37,8}, -{17,37,9}, -{17,37,10}, -{17,37,11}, -{17,37,12}, -{17,37,13}, -{17,37,14}, -{17,37,15}, -{17,37,16}, -{17,37,17}, -{17,37,18}, -{17,37,19}, -{17,37,20}, -{17,37,21}, -{17,37,22}, -{17,37,23}, -{17,37,24}, -{17,37,25}, -{17,37,26}, -{17,38,-60}, -{17,38,-59}, -{17,38,-58}, -{17,38,-57}, -{17,38,-56}, -{17,38,-55}, -{17,38,-54}, -{17,38,-53}, -{17,38,-52}, -{17,38,-51}, -{17,38,-50}, -{17,38,-49}, -{17,38,-48}, -{17,38,-47}, -{17,38,-46}, -{17,38,-45}, -{17,38,-44}, -{17,38,-43}, -{17,38,-42}, -{17,38,-41}, -{17,38,-40}, -{17,38,-39}, -{17,38,-38}, -{17,38,-37}, -{17,38,-36}, -{17,38,-35}, -{17,38,-34}, -{17,38,-33}, -{17,38,-32}, -{17,38,-31}, -{17,38,-30}, -{17,38,-29}, -{17,38,-28}, -{17,38,-27}, -{17,38,-26}, -{17,38,-25}, -{17,38,-24}, -{17,38,-23}, -{17,38,-22}, -{17,38,-21}, -{17,38,-20}, -{17,38,-19}, -{17,38,-18}, -{17,38,-17}, -{17,38,-16}, -{17,38,-15}, -{17,38,-14}, -{17,38,-13}, -{17,38,-12}, -{17,38,-11}, -{17,38,-10}, -{17,38,-9}, -{17,38,-8}, -{17,38,-7}, -{17,38,-6}, -{17,38,-5}, -{17,38,-4}, -{17,38,-3}, -{17,38,-2}, -{17,38,-1}, -{17,38,0}, -{17,38,1}, -{17,38,2}, -{17,38,3}, -{17,38,4}, -{17,38,5}, -{17,38,6}, -{17,38,7}, -{17,38,8}, -{17,38,9}, -{17,38,10}, -{17,38,11}, -{17,38,12}, -{17,38,13}, -{17,38,14}, -{17,38,15}, -{17,38,16}, -{17,38,17}, -{17,38,18}, -{17,38,19}, -{17,38,20}, -{17,38,21}, -{17,38,22}, -{17,38,23}, -{17,38,24}, -{17,38,25}, -{17,38,26}, -{17,39,-61}, -{17,39,-60}, -{17,39,-59}, -{17,39,-58}, -{17,39,-57}, -{17,39,-56}, -{17,39,-55}, -{17,39,-54}, -{17,39,-53}, -{17,39,-52}, -{17,39,-51}, -{17,39,-50}, -{17,39,-49}, -{17,39,-48}, -{17,39,-47}, -{17,39,-46}, -{17,39,-45}, -{17,39,-44}, -{17,39,-43}, -{17,39,-42}, -{17,39,-41}, -{17,39,-40}, -{17,39,-39}, -{17,39,-38}, -{17,39,-37}, -{17,39,-36}, -{17,39,-35}, -{17,39,-34}, -{17,39,-33}, -{17,39,-32}, -{17,39,-31}, -{17,39,-30}, -{17,39,-29}, -{17,39,-28}, -{17,39,-27}, -{17,39,-26}, -{17,39,-25}, -{17,39,-24}, -{17,39,-23}, -{17,39,-22}, -{17,39,-21}, -{17,39,-20}, -{17,39,-19}, -{17,39,-18}, -{17,39,-17}, -{17,39,-16}, -{17,39,-15}, -{17,39,-14}, -{17,39,-13}, -{17,39,-12}, -{17,39,-11}, -{17,39,-10}, -{17,39,-9}, -{17,39,-8}, -{17,39,-7}, -{17,39,-6}, -{17,39,-5}, -{17,39,-4}, -{17,39,-3}, -{17,39,-2}, -{17,39,-1}, -{17,39,0}, -{17,39,1}, -{17,39,2}, -{17,39,3}, -{17,39,4}, -{17,39,5}, -{17,39,6}, -{17,39,7}, -{17,39,8}, -{17,39,9}, -{17,39,10}, -{17,40,-62}, -{17,40,-61}, -{17,40,-60}, -{17,40,-59}, -{17,40,-58}, -{17,40,-57}, -{17,40,-56}, -{17,40,-55}, -{17,40,-54}, -{17,40,-53}, -{17,40,-52}, -{17,40,-51}, -{17,40,-50}, -{17,40,-49}, -{17,40,-48}, -{17,40,-47}, -{17,40,-46}, -{17,40,-45}, -{17,40,-44}, -{17,40,-43}, -{17,40,-42}, -{17,40,-41}, -{17,40,-40}, -{17,40,-39}, -{17,40,-38}, -{17,40,-37}, -{17,40,-36}, -{17,40,-35}, -{17,40,-34}, -{17,40,-33}, -{17,40,-32}, -{17,40,-31}, -{17,40,-30}, -{17,40,-29}, -{17,40,-28}, -{17,40,-27}, -{17,40,-26}, -{17,40,-25}, -{17,40,-24}, -{17,40,-23}, -{17,40,-22}, -{17,40,-21}, -{17,40,-20}, -{17,40,-19}, -{17,40,-18}, -{17,40,-17}, -{17,40,-16}, -{17,40,-15}, -{17,40,-14}, -{17,40,-13}, -{17,40,-12}, -{17,40,-11}, -{17,40,-10}, -{17,40,-9}, -{17,40,-8}, -{17,40,-7}, -{17,40,-6}, -{17,40,-5}, -{17,41,-62}, -{17,41,-61}, -{17,41,-60}, -{17,41,-59}, -{17,41,-58}, -{17,41,-57}, -{17,41,-56}, -{17,41,-55}, -{17,41,-54}, -{17,41,-53}, -{17,41,-52}, -{17,41,-51}, -{17,41,-50}, -{17,41,-49}, -{17,41,-48}, -{17,41,-47}, -{17,41,-46}, -{17,41,-45}, -{17,41,-44}, -{17,41,-43}, -{17,41,-42}, -{17,41,-41}, -{17,41,-40}, -{17,41,-39}, -{17,41,-38}, -{17,41,-37}, -{17,41,-36}, -{17,41,-35}, -{17,41,-34}, -{17,41,-33}, -{17,41,-32}, -{17,41,-31}, -{17,41,-30}, -{17,41,-29}, -{17,41,-28}, -{17,41,-27}, -{17,41,-26}, -{17,41,-25}, -{17,41,-24}, -{17,41,-23}, -{17,41,-22}, -{17,41,-21}, -{17,41,-20}, -{17,41,-19}, -{17,41,-18}, -{17,41,-17}, -{17,41,-16}, -{17,41,-15}, -{17,42,-63}, -{17,42,-62}, -{17,42,-61}, -{17,42,-60}, -{17,42,-59}, -{17,42,-58}, -{17,42,-57}, -{17,42,-56}, -{17,42,-55}, -{17,42,-54}, -{17,42,-53}, -{17,42,-52}, -{17,42,-51}, -{17,42,-50}, -{17,42,-49}, -{17,42,-48}, -{17,42,-47}, -{17,42,-46}, -{17,42,-45}, -{17,42,-44}, -{17,42,-43}, -{17,42,-42}, -{17,42,-41}, -{17,42,-40}, -{17,42,-39}, -{17,42,-38}, -{17,42,-37}, -{17,42,-36}, -{17,42,-35}, -{17,42,-34}, -{17,42,-33}, -{17,42,-32}, -{17,42,-31}, -{17,42,-30}, -{17,42,-29}, -{17,42,-28}, -{17,42,-27}, -{17,42,-26}, -{17,42,-25}, -{17,42,-24}, -{17,42,-23}, -{17,43,-64}, -{17,43,-63}, -{17,43,-62}, -{17,43,-61}, -{17,43,-60}, -{17,43,-59}, -{17,43,-58}, -{17,43,-57}, -{17,43,-56}, -{17,43,-55}, -{17,43,-54}, -{17,43,-53}, -{17,43,-52}, -{17,43,-51}, -{17,43,-50}, -{17,43,-49}, -{17,43,-48}, -{17,43,-47}, -{17,43,-46}, -{17,43,-45}, -{17,43,-44}, -{17,43,-43}, -{17,43,-42}, -{17,43,-41}, -{17,43,-40}, -{17,43,-39}, -{17,43,-38}, -{17,43,-37}, -{17,43,-36}, -{17,43,-35}, -{17,43,-34}, -{17,43,-33}, -{17,43,-32}, -{17,43,-31}, -{17,43,-30}, -{17,43,-29}, -{17,44,-65}, -{17,44,-64}, -{17,44,-63}, -{17,44,-62}, -{17,44,-61}, -{17,44,-60}, -{17,44,-59}, -{17,44,-58}, -{17,44,-57}, -{17,44,-56}, -{17,44,-55}, -{17,44,-54}, -{17,44,-53}, -{17,44,-52}, -{17,44,-51}, -{17,44,-50}, -{17,44,-49}, -{17,44,-48}, -{17,44,-47}, -{17,44,-46}, -{17,44,-45}, -{17,44,-44}, -{17,44,-43}, -{17,44,-42}, -{17,44,-41}, -{17,44,-40}, -{17,44,-39}, -{17,44,-38}, -{17,44,-37}, -{17,44,-36}, -{17,44,-35}, -{17,45,-66}, -{17,45,-65}, -{17,45,-64}, -{17,45,-63}, -{17,45,-62}, -{17,45,-61}, -{17,45,-60}, -{17,45,-59}, -{17,45,-58}, -{17,45,-57}, -{17,45,-56}, -{17,45,-55}, -{17,45,-54}, -{17,45,-53}, -{17,45,-52}, -{17,45,-51}, -{17,45,-50}, -{17,45,-49}, -{17,45,-48}, -{17,45,-47}, -{17,45,-46}, -{17,45,-45}, -{17,45,-44}, -{17,45,-43}, -{17,45,-42}, -{17,45,-41}, -{17,45,-40}, -{17,46,-67}, -{17,46,-66}, -{17,46,-65}, -{17,46,-64}, -{17,46,-63}, -{17,46,-62}, -{17,46,-61}, -{17,46,-60}, -{17,46,-59}, -{17,46,-58}, -{17,46,-57}, -{17,46,-56}, -{17,46,-55}, -{17,46,-54}, -{17,46,-53}, -{17,46,-52}, -{17,46,-51}, -{17,46,-50}, -{17,46,-49}, -{17,46,-48}, -{17,46,-47}, -{17,46,-46}, -{17,46,-45}, -{17,47,-67}, -{17,47,-66}, -{17,47,-65}, -{17,47,-64}, -{17,47,-63}, -{17,47,-62}, -{17,47,-61}, -{17,47,-60}, -{17,47,-59}, -{17,47,-58}, -{17,47,-57}, -{17,47,-56}, -{17,47,-55}, -{17,47,-54}, -{17,47,-53}, -{17,47,-52}, -{17,47,-51}, -{17,47,-50}, -{17,47,-49}, -{17,48,-68}, -{17,48,-67}, -{17,48,-66}, -{17,48,-65}, -{17,48,-64}, -{17,48,-63}, -{17,48,-62}, -{17,48,-61}, -{17,48,-60}, -{17,48,-59}, -{17,48,-58}, -{17,48,-57}, -{17,48,-56}, -{17,48,-55}, -{17,48,-54}, -{17,48,-53}, -{17,49,-69}, -{17,49,-68}, -{17,49,-67}, -{17,49,-66}, -{17,49,-65}, -{17,49,-64}, -{17,49,-63}, -{17,49,-62}, -{17,49,-61}, -{17,49,-60}, -{17,49,-59}, -{17,49,-58}, -{17,49,-57}, -{17,50,-70}, -{17,50,-69}, -{17,50,-68}, -{17,50,-67}, -{17,50,-66}, -{17,50,-65}, -{17,50,-64}, -{17,50,-63}, -{17,50,-62}, -{17,50,-61}, -{17,51,-71}, -{17,51,-70}, -{17,51,-69}, -{17,51,-68}, -{17,51,-67}, -{17,51,-66}, -{17,51,-65}, -{17,51,-64}, -{17,52,-72}, -{17,52,-71}, -{17,52,-70}, -{17,52,-69}, -{17,52,-68}, -{17,52,-67}, -{17,53,-72}, -{17,53,-71}, -{17,53,-70}, -{18,-28,24}, -{18,-28,25}, -{18,-27,21}, -{18,-27,22}, -{18,-27,23}, -{18,-27,24}, -{18,-27,25}, -{18,-26,18}, -{18,-26,19}, -{18,-26,20}, -{18,-26,21}, -{18,-26,22}, -{18,-26,23}, -{18,-26,24}, -{18,-26,25}, -{18,-25,15}, -{18,-25,16}, -{18,-25,17}, -{18,-25,18}, -{18,-25,19}, -{18,-25,20}, -{18,-25,21}, -{18,-25,22}, -{18,-25,23}, -{18,-25,24}, -{18,-25,25}, -{18,-24,13}, -{18,-24,14}, -{18,-24,15}, -{18,-24,16}, -{18,-24,17}, -{18,-24,18}, -{18,-24,19}, -{18,-24,20}, -{18,-24,21}, -{18,-24,22}, -{18,-24,23}, -{18,-24,24}, -{18,-24,25}, -{18,-23,10}, -{18,-23,11}, -{18,-23,12}, -{18,-23,13}, -{18,-23,14}, -{18,-23,15}, -{18,-23,16}, -{18,-23,17}, -{18,-23,18}, -{18,-23,19}, -{18,-23,20}, -{18,-23,21}, -{18,-23,22}, -{18,-23,23}, -{18,-23,24}, -{18,-23,25}, -{18,-22,8}, -{18,-22,9}, -{18,-22,10}, -{18,-22,11}, -{18,-22,12}, -{18,-22,13}, -{18,-22,14}, -{18,-22,15}, -{18,-22,16}, -{18,-22,17}, -{18,-22,18}, -{18,-22,19}, -{18,-22,20}, -{18,-22,21}, -{18,-22,22}, -{18,-22,23}, -{18,-22,24}, -{18,-22,25}, -{18,-21,6}, -{18,-21,7}, -{18,-21,8}, -{18,-21,9}, -{18,-21,10}, -{18,-21,11}, -{18,-21,12}, -{18,-21,13}, -{18,-21,14}, -{18,-21,15}, -{18,-21,16}, -{18,-21,17}, -{18,-21,18}, -{18,-21,19}, -{18,-21,20}, -{18,-21,21}, -{18,-21,22}, -{18,-21,23}, -{18,-21,24}, -{18,-21,25}, -{18,-20,4}, -{18,-20,5}, -{18,-20,6}, -{18,-20,7}, -{18,-20,8}, -{18,-20,9}, -{18,-20,10}, -{18,-20,11}, -{18,-20,12}, -{18,-20,13}, -{18,-20,14}, -{18,-20,15}, -{18,-20,16}, -{18,-20,17}, -{18,-20,18}, -{18,-20,19}, -{18,-20,20}, -{18,-20,21}, -{18,-20,22}, -{18,-20,23}, -{18,-20,24}, -{18,-20,25}, -{18,-19,2}, -{18,-19,3}, -{18,-19,4}, -{18,-19,5}, -{18,-19,6}, -{18,-19,7}, -{18,-19,8}, -{18,-19,9}, -{18,-19,10}, -{18,-19,11}, -{18,-19,12}, -{18,-19,13}, -{18,-19,14}, -{18,-19,15}, -{18,-19,16}, -{18,-19,17}, -{18,-19,18}, -{18,-19,19}, -{18,-19,20}, -{18,-19,21}, -{18,-19,22}, -{18,-19,23}, -{18,-19,24}, -{18,-19,25}, -{18,-18,0}, -{18,-18,1}, -{18,-18,2}, -{18,-18,3}, -{18,-18,4}, -{18,-18,5}, -{18,-18,6}, -{18,-18,7}, -{18,-18,8}, -{18,-18,9}, -{18,-18,10}, -{18,-18,11}, -{18,-18,12}, -{18,-18,13}, -{18,-18,14}, -{18,-18,15}, -{18,-18,16}, -{18,-18,17}, -{18,-18,18}, -{18,-18,19}, -{18,-18,20}, -{18,-18,21}, -{18,-18,22}, -{18,-18,23}, -{18,-18,24}, -{18,-18,25}, -{18,-17,-1}, -{18,-17,0}, -{18,-17,1}, -{18,-17,2}, -{18,-17,3}, -{18,-17,4}, -{18,-17,5}, -{18,-17,6}, -{18,-17,7}, -{18,-17,8}, -{18,-17,9}, -{18,-17,10}, -{18,-17,11}, -{18,-17,12}, -{18,-17,13}, -{18,-17,14}, -{18,-17,15}, -{18,-17,16}, -{18,-17,17}, -{18,-17,18}, -{18,-17,19}, -{18,-17,20}, -{18,-17,21}, -{18,-17,22}, -{18,-17,23}, -{18,-17,24}, -{18,-17,25}, -{18,-16,-3}, -{18,-16,-2}, -{18,-16,-1}, -{18,-16,0}, -{18,-16,1}, -{18,-16,2}, -{18,-16,3}, -{18,-16,4}, -{18,-16,5}, -{18,-16,6}, -{18,-16,7}, -{18,-16,8}, -{18,-16,9}, -{18,-16,10}, -{18,-16,11}, -{18,-16,12}, -{18,-16,13}, -{18,-16,14}, -{18,-16,15}, -{18,-16,16}, -{18,-16,17}, -{18,-16,18}, -{18,-16,19}, -{18,-16,20}, -{18,-16,21}, -{18,-16,22}, -{18,-16,23}, -{18,-16,24}, -{18,-16,25}, -{18,-15,-5}, -{18,-15,-4}, -{18,-15,-3}, -{18,-15,-2}, -{18,-15,-1}, -{18,-15,0}, -{18,-15,1}, -{18,-15,2}, -{18,-15,3}, -{18,-15,4}, -{18,-15,5}, -{18,-15,6}, -{18,-15,7}, -{18,-15,8}, -{18,-15,9}, -{18,-15,10}, -{18,-15,11}, -{18,-15,12}, -{18,-15,13}, -{18,-15,14}, -{18,-15,15}, -{18,-15,16}, -{18,-15,17}, -{18,-15,18}, -{18,-15,19}, -{18,-15,20}, -{18,-15,21}, -{18,-15,22}, -{18,-15,23}, -{18,-15,24}, -{18,-15,25}, -{18,-14,-6}, -{18,-14,-5}, -{18,-14,-4}, -{18,-14,-3}, -{18,-14,-2}, -{18,-14,-1}, -{18,-14,0}, -{18,-14,1}, -{18,-14,2}, -{18,-14,3}, -{18,-14,4}, -{18,-14,5}, -{18,-14,6}, -{18,-14,7}, -{18,-14,8}, -{18,-14,9}, -{18,-14,10}, -{18,-14,11}, -{18,-14,12}, -{18,-14,13}, -{18,-14,14}, -{18,-14,15}, -{18,-14,16}, -{18,-14,17}, -{18,-14,18}, -{18,-14,19}, -{18,-14,20}, -{18,-14,21}, -{18,-14,22}, -{18,-14,23}, -{18,-14,24}, -{18,-14,25}, -{18,-13,-8}, -{18,-13,-7}, -{18,-13,-6}, -{18,-13,-5}, -{18,-13,-4}, -{18,-13,-3}, -{18,-13,-2}, -{18,-13,-1}, -{18,-13,0}, -{18,-13,1}, -{18,-13,2}, -{18,-13,3}, -{18,-13,4}, -{18,-13,5}, -{18,-13,6}, -{18,-13,7}, -{18,-13,8}, -{18,-13,9}, -{18,-13,10}, -{18,-13,11}, -{18,-13,12}, -{18,-13,13}, -{18,-13,14}, -{18,-13,15}, -{18,-13,16}, -{18,-13,17}, -{18,-13,18}, -{18,-13,19}, -{18,-13,20}, -{18,-13,21}, -{18,-13,22}, -{18,-13,23}, -{18,-13,24}, -{18,-13,25}, -{18,-12,-9}, -{18,-12,-8}, -{18,-12,-7}, -{18,-12,-6}, -{18,-12,-5}, -{18,-12,-4}, -{18,-12,-3}, -{18,-12,-2}, -{18,-12,-1}, -{18,-12,0}, -{18,-12,1}, -{18,-12,2}, -{18,-12,3}, -{18,-12,4}, -{18,-12,5}, -{18,-12,6}, -{18,-12,7}, -{18,-12,8}, -{18,-12,9}, -{18,-12,10}, -{18,-12,11}, -{18,-12,12}, -{18,-12,13}, -{18,-12,14}, -{18,-12,15}, -{18,-12,16}, -{18,-12,17}, -{18,-12,18}, -{18,-12,19}, -{18,-12,20}, -{18,-12,21}, -{18,-12,22}, -{18,-12,23}, -{18,-12,24}, -{18,-12,25}, -{18,-11,-11}, -{18,-11,-10}, -{18,-11,-9}, -{18,-11,-8}, -{18,-11,-7}, -{18,-11,-6}, -{18,-11,-5}, -{18,-11,-4}, -{18,-11,-3}, -{18,-11,-2}, -{18,-11,-1}, -{18,-11,0}, -{18,-11,1}, -{18,-11,2}, -{18,-11,3}, -{18,-11,4}, -{18,-11,5}, -{18,-11,6}, -{18,-11,7}, -{18,-11,8}, -{18,-11,9}, -{18,-11,10}, -{18,-11,11}, -{18,-11,12}, -{18,-11,13}, -{18,-11,14}, -{18,-11,15}, -{18,-11,16}, -{18,-11,17}, -{18,-11,18}, -{18,-11,19}, -{18,-11,20}, -{18,-11,21}, -{18,-11,22}, -{18,-11,23}, -{18,-11,24}, -{18,-11,25}, -{18,-10,-12}, -{18,-10,-11}, -{18,-10,-10}, -{18,-10,-9}, -{18,-10,-8}, -{18,-10,-7}, -{18,-10,-6}, -{18,-10,-5}, -{18,-10,-4}, -{18,-10,-3}, -{18,-10,-2}, -{18,-10,-1}, -{18,-10,0}, -{18,-10,1}, -{18,-10,2}, -{18,-10,3}, -{18,-10,4}, -{18,-10,5}, -{18,-10,6}, -{18,-10,7}, -{18,-10,8}, -{18,-10,9}, -{18,-10,10}, -{18,-10,11}, -{18,-10,12}, -{18,-10,13}, -{18,-10,14}, -{18,-10,15}, -{18,-10,16}, -{18,-10,17}, -{18,-10,18}, -{18,-10,19}, -{18,-10,20}, -{18,-10,21}, -{18,-10,22}, -{18,-10,23}, -{18,-10,24}, -{18,-10,25}, -{18,-9,-13}, -{18,-9,-12}, -{18,-9,-11}, -{18,-9,-10}, -{18,-9,-9}, -{18,-9,-8}, -{18,-9,-7}, -{18,-9,-6}, -{18,-9,-5}, -{18,-9,-4}, -{18,-9,-3}, -{18,-9,-2}, -{18,-9,-1}, -{18,-9,0}, -{18,-9,1}, -{18,-9,2}, -{18,-9,3}, -{18,-9,4}, -{18,-9,5}, -{18,-9,6}, -{18,-9,7}, -{18,-9,8}, -{18,-9,9}, -{18,-9,10}, -{18,-9,11}, -{18,-9,12}, -{18,-9,13}, -{18,-9,14}, -{18,-9,15}, -{18,-9,16}, -{18,-9,17}, -{18,-9,18}, -{18,-9,19}, -{18,-9,20}, -{18,-9,21}, -{18,-9,22}, -{18,-9,23}, -{18,-9,24}, -{18,-9,25}, -{18,-8,-15}, -{18,-8,-14}, -{18,-8,-13}, -{18,-8,-12}, -{18,-8,-11}, -{18,-8,-10}, -{18,-8,-9}, -{18,-8,-8}, -{18,-8,-7}, -{18,-8,-6}, -{18,-8,-5}, -{18,-8,-4}, -{18,-8,-3}, -{18,-8,-2}, -{18,-8,-1}, -{18,-8,0}, -{18,-8,1}, -{18,-8,2}, -{18,-8,3}, -{18,-8,4}, -{18,-8,5}, -{18,-8,6}, -{18,-8,7}, -{18,-8,8}, -{18,-8,9}, -{18,-8,10}, -{18,-8,11}, -{18,-8,12}, -{18,-8,13}, -{18,-8,14}, -{18,-8,15}, -{18,-8,16}, -{18,-8,17}, -{18,-8,18}, -{18,-8,19}, -{18,-8,20}, -{18,-8,21}, -{18,-8,22}, -{18,-8,23}, -{18,-8,24}, -{18,-8,25}, -{18,-7,-16}, -{18,-7,-15}, -{18,-7,-14}, -{18,-7,-13}, -{18,-7,-12}, -{18,-7,-11}, -{18,-7,-10}, -{18,-7,-9}, -{18,-7,-8}, -{18,-7,-7}, -{18,-7,-6}, -{18,-7,-5}, -{18,-7,-4}, -{18,-7,-3}, -{18,-7,-2}, -{18,-7,-1}, -{18,-7,0}, -{18,-7,1}, -{18,-7,2}, -{18,-7,3}, -{18,-7,4}, -{18,-7,5}, -{18,-7,6}, -{18,-7,7}, -{18,-7,8}, -{18,-7,9}, -{18,-7,10}, -{18,-7,11}, -{18,-7,12}, -{18,-7,13}, -{18,-7,14}, -{18,-7,15}, -{18,-7,16}, -{18,-7,17}, -{18,-7,18}, -{18,-7,19}, -{18,-7,20}, -{18,-7,21}, -{18,-7,22}, -{18,-7,23}, -{18,-7,24}, -{18,-7,25}, -{18,-6,-17}, -{18,-6,-16}, -{18,-6,-15}, -{18,-6,-14}, -{18,-6,-13}, -{18,-6,-12}, -{18,-6,-11}, -{18,-6,-10}, -{18,-6,-9}, -{18,-6,-8}, -{18,-6,-7}, -{18,-6,-6}, -{18,-6,-5}, -{18,-6,-4}, -{18,-6,-3}, -{18,-6,-2}, -{18,-6,-1}, -{18,-6,0}, -{18,-6,1}, -{18,-6,2}, -{18,-6,3}, -{18,-6,4}, -{18,-6,5}, -{18,-6,6}, -{18,-6,7}, -{18,-6,8}, -{18,-6,9}, -{18,-6,10}, -{18,-6,11}, -{18,-6,12}, -{18,-6,13}, -{18,-6,14}, -{18,-6,15}, -{18,-6,16}, -{18,-6,17}, -{18,-6,18}, -{18,-6,19}, -{18,-6,20}, -{18,-6,21}, -{18,-6,22}, -{18,-6,23}, -{18,-6,24}, -{18,-6,25}, -{18,-5,-18}, -{18,-5,-17}, -{18,-5,-16}, -{18,-5,-15}, -{18,-5,-14}, -{18,-5,-13}, -{18,-5,-12}, -{18,-5,-11}, -{18,-5,-10}, -{18,-5,-9}, -{18,-5,-8}, -{18,-5,-7}, -{18,-5,-6}, -{18,-5,-5}, -{18,-5,-4}, -{18,-5,-3}, -{18,-5,-2}, -{18,-5,-1}, -{18,-5,0}, -{18,-5,1}, -{18,-5,2}, -{18,-5,3}, -{18,-5,4}, -{18,-5,5}, -{18,-5,6}, -{18,-5,7}, -{18,-5,8}, -{18,-5,9}, -{18,-5,10}, -{18,-5,11}, -{18,-5,12}, -{18,-5,13}, -{18,-5,14}, -{18,-5,15}, -{18,-5,16}, -{18,-5,17}, -{18,-5,18}, -{18,-5,19}, -{18,-5,20}, -{18,-5,21}, -{18,-5,22}, -{18,-5,23}, -{18,-5,24}, -{18,-5,25}, -{18,-4,-19}, -{18,-4,-18}, -{18,-4,-17}, -{18,-4,-16}, -{18,-4,-15}, -{18,-4,-14}, -{18,-4,-13}, -{18,-4,-12}, -{18,-4,-11}, -{18,-4,-10}, -{18,-4,-9}, -{18,-4,-8}, -{18,-4,-7}, -{18,-4,-6}, -{18,-4,-5}, -{18,-4,-4}, -{18,-4,-3}, -{18,-4,-2}, -{18,-4,-1}, -{18,-4,0}, -{18,-4,1}, -{18,-4,2}, -{18,-4,3}, -{18,-4,4}, -{18,-4,5}, -{18,-4,6}, -{18,-4,7}, -{18,-4,8}, -{18,-4,9}, -{18,-4,10}, -{18,-4,11}, -{18,-4,12}, -{18,-4,13}, -{18,-4,14}, -{18,-4,15}, -{18,-4,16}, -{18,-4,17}, -{18,-4,18}, -{18,-4,19}, -{18,-4,20}, -{18,-4,21}, -{18,-4,22}, -{18,-4,23}, -{18,-4,24}, -{18,-4,25}, -{18,-3,-21}, -{18,-3,-20}, -{18,-3,-19}, -{18,-3,-18}, -{18,-3,-17}, -{18,-3,-16}, -{18,-3,-15}, -{18,-3,-14}, -{18,-3,-13}, -{18,-3,-12}, -{18,-3,-11}, -{18,-3,-10}, -{18,-3,-9}, -{18,-3,-8}, -{18,-3,-7}, -{18,-3,-6}, -{18,-3,-5}, -{18,-3,-4}, -{18,-3,-3}, -{18,-3,-2}, -{18,-3,-1}, -{18,-3,0}, -{18,-3,1}, -{18,-3,2}, -{18,-3,3}, -{18,-3,4}, -{18,-3,5}, -{18,-3,6}, -{18,-3,7}, -{18,-3,8}, -{18,-3,9}, -{18,-3,10}, -{18,-3,11}, -{18,-3,12}, -{18,-3,13}, -{18,-3,14}, -{18,-3,15}, -{18,-3,16}, -{18,-3,17}, -{18,-3,18}, -{18,-3,19}, -{18,-3,20}, -{18,-3,21}, -{18,-3,22}, -{18,-3,23}, -{18,-3,24}, -{18,-3,25}, -{18,-2,-22}, -{18,-2,-21}, -{18,-2,-20}, -{18,-2,-19}, -{18,-2,-18}, -{18,-2,-17}, -{18,-2,-16}, -{18,-2,-15}, -{18,-2,-14}, -{18,-2,-13}, -{18,-2,-12}, -{18,-2,-11}, -{18,-2,-10}, -{18,-2,-9}, -{18,-2,-8}, -{18,-2,-7}, -{18,-2,-6}, -{18,-2,-5}, -{18,-2,-4}, -{18,-2,-3}, -{18,-2,-2}, -{18,-2,-1}, -{18,-2,0}, -{18,-2,1}, -{18,-2,2}, -{18,-2,3}, -{18,-2,4}, -{18,-2,5}, -{18,-2,6}, -{18,-2,7}, -{18,-2,8}, -{18,-2,9}, -{18,-2,10}, -{18,-2,11}, -{18,-2,12}, -{18,-2,13}, -{18,-2,14}, -{18,-2,15}, -{18,-2,16}, -{18,-2,17}, -{18,-2,18}, -{18,-2,19}, -{18,-2,20}, -{18,-2,21}, -{18,-2,22}, -{18,-2,23}, -{18,-2,24}, -{18,-2,25}, -{18,-1,-23}, -{18,-1,-22}, -{18,-1,-21}, -{18,-1,-20}, -{18,-1,-19}, -{18,-1,-18}, -{18,-1,-17}, -{18,-1,-16}, -{18,-1,-15}, -{18,-1,-14}, -{18,-1,-13}, -{18,-1,-12}, -{18,-1,-11}, -{18,-1,-10}, -{18,-1,-9}, -{18,-1,-8}, -{18,-1,-7}, -{18,-1,-6}, -{18,-1,-5}, -{18,-1,-4}, -{18,-1,-3}, -{18,-1,-2}, -{18,-1,-1}, -{18,-1,0}, -{18,-1,1}, -{18,-1,2}, -{18,-1,3}, -{18,-1,4}, -{18,-1,5}, -{18,-1,6}, -{18,-1,7}, -{18,-1,8}, -{18,-1,9}, -{18,-1,10}, -{18,-1,11}, -{18,-1,12}, -{18,-1,13}, -{18,-1,14}, -{18,-1,15}, -{18,-1,16}, -{18,-1,17}, -{18,-1,18}, -{18,-1,19}, -{18,-1,20}, -{18,-1,21}, -{18,-1,22}, -{18,-1,23}, -{18,-1,24}, -{18,-1,25}, -{18,-1,26}, -{18,0,-24}, -{18,0,-23}, -{18,0,-22}, -{18,0,-21}, -{18,0,-20}, -{18,0,-19}, -{18,0,-18}, -{18,0,-17}, -{18,0,-16}, -{18,0,-15}, -{18,0,-14}, -{18,0,-13}, -{18,0,-12}, -{18,0,-11}, -{18,0,-10}, -{18,0,-9}, -{18,0,-8}, -{18,0,-7}, -{18,0,-6}, -{18,0,-5}, -{18,0,-4}, -{18,0,-3}, -{18,0,-2}, -{18,0,-1}, -{18,0,0}, -{18,0,1}, -{18,0,2}, -{18,0,3}, -{18,0,4}, -{18,0,5}, -{18,0,6}, -{18,0,7}, -{18,0,8}, -{18,0,9}, -{18,0,10}, -{18,0,11}, -{18,0,12}, -{18,0,13}, -{18,0,14}, -{18,0,15}, -{18,0,16}, -{18,0,17}, -{18,0,18}, -{18,0,19}, -{18,0,20}, -{18,0,21}, -{18,0,22}, -{18,0,23}, -{18,0,24}, -{18,0,25}, -{18,0,26}, -{18,1,-25}, -{18,1,-24}, -{18,1,-23}, -{18,1,-22}, -{18,1,-21}, -{18,1,-20}, -{18,1,-19}, -{18,1,-18}, -{18,1,-17}, -{18,1,-16}, -{18,1,-15}, -{18,1,-14}, -{18,1,-13}, -{18,1,-12}, -{18,1,-11}, -{18,1,-10}, -{18,1,-9}, -{18,1,-8}, -{18,1,-7}, -{18,1,-6}, -{18,1,-5}, -{18,1,-4}, -{18,1,-3}, -{18,1,-2}, -{18,1,-1}, -{18,1,0}, -{18,1,1}, -{18,1,2}, -{18,1,3}, -{18,1,4}, -{18,1,5}, -{18,1,6}, -{18,1,7}, -{18,1,8}, -{18,1,9}, -{18,1,10}, -{18,1,11}, -{18,1,12}, -{18,1,13}, -{18,1,14}, -{18,1,15}, -{18,1,16}, -{18,1,17}, -{18,1,18}, -{18,1,19}, -{18,1,20}, -{18,1,21}, -{18,1,22}, -{18,1,23}, -{18,1,24}, -{18,1,25}, -{18,1,26}, -{18,2,-26}, -{18,2,-25}, -{18,2,-24}, -{18,2,-23}, -{18,2,-22}, -{18,2,-21}, -{18,2,-20}, -{18,2,-19}, -{18,2,-18}, -{18,2,-17}, -{18,2,-16}, -{18,2,-15}, -{18,2,-14}, -{18,2,-13}, -{18,2,-12}, -{18,2,-11}, -{18,2,-10}, -{18,2,-9}, -{18,2,-8}, -{18,2,-7}, -{18,2,-6}, -{18,2,-5}, -{18,2,-4}, -{18,2,-3}, -{18,2,-2}, -{18,2,-1}, -{18,2,0}, -{18,2,1}, -{18,2,2}, -{18,2,3}, -{18,2,4}, -{18,2,5}, -{18,2,6}, -{18,2,7}, -{18,2,8}, -{18,2,9}, -{18,2,10}, -{18,2,11}, -{18,2,12}, -{18,2,13}, -{18,2,14}, -{18,2,15}, -{18,2,16}, -{18,2,17}, -{18,2,18}, -{18,2,19}, -{18,2,20}, -{18,2,21}, -{18,2,22}, -{18,2,23}, -{18,2,24}, -{18,2,25}, -{18,2,26}, -{18,3,-27}, -{18,3,-26}, -{18,3,-25}, -{18,3,-24}, -{18,3,-23}, -{18,3,-22}, -{18,3,-21}, -{18,3,-20}, -{18,3,-19}, -{18,3,-18}, -{18,3,-17}, -{18,3,-16}, -{18,3,-15}, -{18,3,-14}, -{18,3,-13}, -{18,3,-12}, -{18,3,-11}, -{18,3,-10}, -{18,3,-9}, -{18,3,-8}, -{18,3,-7}, -{18,3,-6}, -{18,3,-5}, -{18,3,-4}, -{18,3,-3}, -{18,3,-2}, -{18,3,-1}, -{18,3,0}, -{18,3,1}, -{18,3,2}, -{18,3,3}, -{18,3,4}, -{18,3,5}, -{18,3,6}, -{18,3,7}, -{18,3,8}, -{18,3,9}, -{18,3,10}, -{18,3,11}, -{18,3,12}, -{18,3,13}, -{18,3,14}, -{18,3,15}, -{18,3,16}, -{18,3,17}, -{18,3,18}, -{18,3,19}, -{18,3,20}, -{18,3,21}, -{18,3,22}, -{18,3,23}, -{18,3,24}, -{18,3,25}, -{18,3,26}, -{18,4,-29}, -{18,4,-28}, -{18,4,-27}, -{18,4,-26}, -{18,4,-25}, -{18,4,-24}, -{18,4,-23}, -{18,4,-22}, -{18,4,-21}, -{18,4,-20}, -{18,4,-19}, -{18,4,-18}, -{18,4,-17}, -{18,4,-16}, -{18,4,-15}, -{18,4,-14}, -{18,4,-13}, -{18,4,-12}, -{18,4,-11}, -{18,4,-10}, -{18,4,-9}, -{18,4,-8}, -{18,4,-7}, -{18,4,-6}, -{18,4,-5}, -{18,4,-4}, -{18,4,-3}, -{18,4,-2}, -{18,4,-1}, -{18,4,0}, -{18,4,1}, -{18,4,2}, -{18,4,3}, -{18,4,4}, -{18,4,5}, -{18,4,6}, -{18,4,7}, -{18,4,8}, -{18,4,9}, -{18,4,10}, -{18,4,11}, -{18,4,12}, -{18,4,13}, -{18,4,14}, -{18,4,15}, -{18,4,16}, -{18,4,17}, -{18,4,18}, -{18,4,19}, -{18,4,20}, -{18,4,21}, -{18,4,22}, -{18,4,23}, -{18,4,24}, -{18,4,25}, -{18,4,26}, -{18,5,-30}, -{18,5,-29}, -{18,5,-28}, -{18,5,-27}, -{18,5,-26}, -{18,5,-25}, -{18,5,-24}, -{18,5,-23}, -{18,5,-22}, -{18,5,-21}, -{18,5,-20}, -{18,5,-19}, -{18,5,-18}, -{18,5,-17}, -{18,5,-16}, -{18,5,-15}, -{18,5,-14}, -{18,5,-13}, -{18,5,-12}, -{18,5,-11}, -{18,5,-10}, -{18,5,-9}, -{18,5,-8}, -{18,5,-7}, -{18,5,-6}, -{18,5,-5}, -{18,5,-4}, -{18,5,-3}, -{18,5,-2}, -{18,5,-1}, -{18,5,0}, -{18,5,1}, -{18,5,2}, -{18,5,3}, -{18,5,4}, -{18,5,5}, -{18,5,6}, -{18,5,7}, -{18,5,8}, -{18,5,9}, -{18,5,10}, -{18,5,11}, -{18,5,12}, -{18,5,13}, -{18,5,14}, -{18,5,15}, -{18,5,16}, -{18,5,17}, -{18,5,18}, -{18,5,19}, -{18,5,20}, -{18,5,21}, -{18,5,22}, -{18,5,23}, -{18,5,24}, -{18,5,25}, -{18,5,26}, -{18,6,-31}, -{18,6,-30}, -{18,6,-29}, -{18,6,-28}, -{18,6,-27}, -{18,6,-26}, -{18,6,-25}, -{18,6,-24}, -{18,6,-23}, -{18,6,-22}, -{18,6,-21}, -{18,6,-20}, -{18,6,-19}, -{18,6,-18}, -{18,6,-17}, -{18,6,-16}, -{18,6,-15}, -{18,6,-14}, -{18,6,-13}, -{18,6,-12}, -{18,6,-11}, -{18,6,-10}, -{18,6,-9}, -{18,6,-8}, -{18,6,-7}, -{18,6,-6}, -{18,6,-5}, -{18,6,-4}, -{18,6,-3}, -{18,6,-2}, -{18,6,-1}, -{18,6,0}, -{18,6,1}, -{18,6,2}, -{18,6,3}, -{18,6,4}, -{18,6,5}, -{18,6,6}, -{18,6,7}, -{18,6,8}, -{18,6,9}, -{18,6,10}, -{18,6,11}, -{18,6,12}, -{18,6,13}, -{18,6,14}, -{18,6,15}, -{18,6,16}, -{18,6,17}, -{18,6,18}, -{18,6,19}, -{18,6,20}, -{18,6,21}, -{18,6,22}, -{18,6,23}, -{18,6,24}, -{18,6,25}, -{18,6,26}, -{18,7,-32}, -{18,7,-31}, -{18,7,-30}, -{18,7,-29}, -{18,7,-28}, -{18,7,-27}, -{18,7,-26}, -{18,7,-25}, -{18,7,-24}, -{18,7,-23}, -{18,7,-22}, -{18,7,-21}, -{18,7,-20}, -{18,7,-19}, -{18,7,-18}, -{18,7,-17}, -{18,7,-16}, -{18,7,-15}, -{18,7,-14}, -{18,7,-13}, -{18,7,-12}, -{18,7,-11}, -{18,7,-10}, -{18,7,-9}, -{18,7,-8}, -{18,7,-7}, -{18,7,-6}, -{18,7,-5}, -{18,7,-4}, -{18,7,-3}, -{18,7,-2}, -{18,7,-1}, -{18,7,0}, -{18,7,1}, -{18,7,2}, -{18,7,3}, -{18,7,4}, -{18,7,5}, -{18,7,6}, -{18,7,7}, -{18,7,8}, -{18,7,9}, -{18,7,10}, -{18,7,11}, -{18,7,12}, -{18,7,13}, -{18,7,14}, -{18,7,15}, -{18,7,16}, -{18,7,17}, -{18,7,18}, -{18,7,19}, -{18,7,20}, -{18,7,21}, -{18,7,22}, -{18,7,23}, -{18,7,24}, -{18,7,25}, -{18,7,26}, -{18,8,-33}, -{18,8,-32}, -{18,8,-31}, -{18,8,-30}, -{18,8,-29}, -{18,8,-28}, -{18,8,-27}, -{18,8,-26}, -{18,8,-25}, -{18,8,-24}, -{18,8,-23}, -{18,8,-22}, -{18,8,-21}, -{18,8,-20}, -{18,8,-19}, -{18,8,-18}, -{18,8,-17}, -{18,8,-16}, -{18,8,-15}, -{18,8,-14}, -{18,8,-13}, -{18,8,-12}, -{18,8,-11}, -{18,8,-10}, -{18,8,-9}, -{18,8,-8}, -{18,8,-7}, -{18,8,-6}, -{18,8,-5}, -{18,8,-4}, -{18,8,-3}, -{18,8,-2}, -{18,8,-1}, -{18,8,0}, -{18,8,1}, -{18,8,2}, -{18,8,3}, -{18,8,4}, -{18,8,5}, -{18,8,6}, -{18,8,7}, -{18,8,8}, -{18,8,9}, -{18,8,10}, -{18,8,11}, -{18,8,12}, -{18,8,13}, -{18,8,14}, -{18,8,15}, -{18,8,16}, -{18,8,17}, -{18,8,18}, -{18,8,19}, -{18,8,20}, -{18,8,21}, -{18,8,22}, -{18,8,23}, -{18,8,24}, -{18,8,25}, -{18,8,26}, -{18,9,-34}, -{18,9,-33}, -{18,9,-32}, -{18,9,-31}, -{18,9,-30}, -{18,9,-29}, -{18,9,-28}, -{18,9,-27}, -{18,9,-26}, -{18,9,-25}, -{18,9,-24}, -{18,9,-23}, -{18,9,-22}, -{18,9,-21}, -{18,9,-20}, -{18,9,-19}, -{18,9,-18}, -{18,9,-17}, -{18,9,-16}, -{18,9,-15}, -{18,9,-14}, -{18,9,-13}, -{18,9,-12}, -{18,9,-11}, -{18,9,-10}, -{18,9,-9}, -{18,9,-8}, -{18,9,-7}, -{18,9,-6}, -{18,9,-5}, -{18,9,-4}, -{18,9,-3}, -{18,9,-2}, -{18,9,-1}, -{18,9,0}, -{18,9,1}, -{18,9,2}, -{18,9,3}, -{18,9,4}, -{18,9,5}, -{18,9,6}, -{18,9,7}, -{18,9,8}, -{18,9,9}, -{18,9,10}, -{18,9,11}, -{18,9,12}, -{18,9,13}, -{18,9,14}, -{18,9,15}, -{18,9,16}, -{18,9,17}, -{18,9,18}, -{18,9,19}, -{18,9,20}, -{18,9,21}, -{18,9,22}, -{18,9,23}, -{18,9,24}, -{18,9,25}, -{18,9,26}, -{18,10,-35}, -{18,10,-34}, -{18,10,-33}, -{18,10,-32}, -{18,10,-31}, -{18,10,-30}, -{18,10,-29}, -{18,10,-28}, -{18,10,-27}, -{18,10,-26}, -{18,10,-25}, -{18,10,-24}, -{18,10,-23}, -{18,10,-22}, -{18,10,-21}, -{18,10,-20}, -{18,10,-19}, -{18,10,-18}, -{18,10,-17}, -{18,10,-16}, -{18,10,-15}, -{18,10,-14}, -{18,10,-13}, -{18,10,-12}, -{18,10,-11}, -{18,10,-10}, -{18,10,-9}, -{18,10,-8}, -{18,10,-7}, -{18,10,-6}, -{18,10,-5}, -{18,10,-4}, -{18,10,-3}, -{18,10,-2}, -{18,10,-1}, -{18,10,0}, -{18,10,1}, -{18,10,2}, -{18,10,3}, -{18,10,4}, -{18,10,5}, -{18,10,6}, -{18,10,7}, -{18,10,8}, -{18,10,9}, -{18,10,10}, -{18,10,11}, -{18,10,12}, -{18,10,13}, -{18,10,14}, -{18,10,15}, -{18,10,16}, -{18,10,17}, -{18,10,18}, -{18,10,19}, -{18,10,20}, -{18,10,21}, -{18,10,22}, -{18,10,23}, -{18,10,24}, -{18,10,25}, -{18,10,26}, -{18,11,-36}, -{18,11,-35}, -{18,11,-34}, -{18,11,-33}, -{18,11,-32}, -{18,11,-31}, -{18,11,-30}, -{18,11,-29}, -{18,11,-28}, -{18,11,-27}, -{18,11,-26}, -{18,11,-25}, -{18,11,-24}, -{18,11,-23}, -{18,11,-22}, -{18,11,-21}, -{18,11,-20}, -{18,11,-19}, -{18,11,-18}, -{18,11,-17}, -{18,11,-16}, -{18,11,-15}, -{18,11,-14}, -{18,11,-13}, -{18,11,-12}, -{18,11,-11}, -{18,11,-10}, -{18,11,-9}, -{18,11,-8}, -{18,11,-7}, -{18,11,-6}, -{18,11,-5}, -{18,11,-4}, -{18,11,-3}, -{18,11,-2}, -{18,11,-1}, -{18,11,0}, -{18,11,1}, -{18,11,2}, -{18,11,3}, -{18,11,4}, -{18,11,5}, -{18,11,6}, -{18,11,7}, -{18,11,8}, -{18,11,9}, -{18,11,10}, -{18,11,11}, -{18,11,12}, -{18,11,13}, -{18,11,14}, -{18,11,15}, -{18,11,16}, -{18,11,17}, -{18,11,18}, -{18,11,19}, -{18,11,20}, -{18,11,21}, -{18,11,22}, -{18,11,23}, -{18,11,24}, -{18,11,25}, -{18,11,26}, -{18,12,-37}, -{18,12,-36}, -{18,12,-35}, -{18,12,-34}, -{18,12,-33}, -{18,12,-32}, -{18,12,-31}, -{18,12,-30}, -{18,12,-29}, -{18,12,-28}, -{18,12,-27}, -{18,12,-26}, -{18,12,-25}, -{18,12,-24}, -{18,12,-23}, -{18,12,-22}, -{18,12,-21}, -{18,12,-20}, -{18,12,-19}, -{18,12,-18}, -{18,12,-17}, -{18,12,-16}, -{18,12,-15}, -{18,12,-14}, -{18,12,-13}, -{18,12,-12}, -{18,12,-11}, -{18,12,-10}, -{18,12,-9}, -{18,12,-8}, -{18,12,-7}, -{18,12,-6}, -{18,12,-5}, -{18,12,-4}, -{18,12,-3}, -{18,12,-2}, -{18,12,-1}, -{18,12,0}, -{18,12,1}, -{18,12,2}, -{18,12,3}, -{18,12,4}, -{18,12,5}, -{18,12,6}, -{18,12,7}, -{18,12,8}, -{18,12,9}, -{18,12,10}, -{18,12,11}, -{18,12,12}, -{18,12,13}, -{18,12,14}, -{18,12,15}, -{18,12,16}, -{18,12,17}, -{18,12,18}, -{18,12,19}, -{18,12,20}, -{18,12,21}, -{18,12,22}, -{18,12,23}, -{18,12,24}, -{18,12,25}, -{18,12,26}, -{18,13,-38}, -{18,13,-37}, -{18,13,-36}, -{18,13,-35}, -{18,13,-34}, -{18,13,-33}, -{18,13,-32}, -{18,13,-31}, -{18,13,-30}, -{18,13,-29}, -{18,13,-28}, -{18,13,-27}, -{18,13,-26}, -{18,13,-25}, -{18,13,-24}, -{18,13,-23}, -{18,13,-22}, -{18,13,-21}, -{18,13,-20}, -{18,13,-19}, -{18,13,-18}, -{18,13,-17}, -{18,13,-16}, -{18,13,-15}, -{18,13,-14}, -{18,13,-13}, -{18,13,-12}, -{18,13,-11}, -{18,13,-10}, -{18,13,-9}, -{18,13,-8}, -{18,13,-7}, -{18,13,-6}, -{18,13,-5}, -{18,13,-4}, -{18,13,-3}, -{18,13,-2}, -{18,13,-1}, -{18,13,0}, -{18,13,1}, -{18,13,2}, -{18,13,3}, -{18,13,4}, -{18,13,5}, -{18,13,6}, -{18,13,7}, -{18,13,8}, -{18,13,9}, -{18,13,10}, -{18,13,11}, -{18,13,12}, -{18,13,13}, -{18,13,14}, -{18,13,15}, -{18,13,16}, -{18,13,17}, -{18,13,18}, -{18,13,19}, -{18,13,20}, -{18,13,21}, -{18,13,22}, -{18,13,23}, -{18,13,24}, -{18,13,25}, -{18,13,26}, -{18,14,-39}, -{18,14,-38}, -{18,14,-37}, -{18,14,-36}, -{18,14,-35}, -{18,14,-34}, -{18,14,-33}, -{18,14,-32}, -{18,14,-31}, -{18,14,-30}, -{18,14,-29}, -{18,14,-28}, -{18,14,-27}, -{18,14,-26}, -{18,14,-25}, -{18,14,-24}, -{18,14,-23}, -{18,14,-22}, -{18,14,-21}, -{18,14,-20}, -{18,14,-19}, -{18,14,-18}, -{18,14,-17}, -{18,14,-16}, -{18,14,-15}, -{18,14,-14}, -{18,14,-13}, -{18,14,-12}, -{18,14,-11}, -{18,14,-10}, -{18,14,-9}, -{18,14,-8}, -{18,14,-7}, -{18,14,-6}, -{18,14,-5}, -{18,14,-4}, -{18,14,-3}, -{18,14,-2}, -{18,14,-1}, -{18,14,0}, -{18,14,1}, -{18,14,2}, -{18,14,3}, -{18,14,4}, -{18,14,5}, -{18,14,6}, -{18,14,7}, -{18,14,8}, -{18,14,9}, -{18,14,10}, -{18,14,11}, -{18,14,12}, -{18,14,13}, -{18,14,14}, -{18,14,15}, -{18,14,16}, -{18,14,17}, -{18,14,18}, -{18,14,19}, -{18,14,20}, -{18,14,21}, -{18,14,22}, -{18,14,23}, -{18,14,24}, -{18,14,25}, -{18,14,26}, -{18,15,-40}, -{18,15,-39}, -{18,15,-38}, -{18,15,-37}, -{18,15,-36}, -{18,15,-35}, -{18,15,-34}, -{18,15,-33}, -{18,15,-32}, -{18,15,-31}, -{18,15,-30}, -{18,15,-29}, -{18,15,-28}, -{18,15,-27}, -{18,15,-26}, -{18,15,-25}, -{18,15,-24}, -{18,15,-23}, -{18,15,-22}, -{18,15,-21}, -{18,15,-20}, -{18,15,-19}, -{18,15,-18}, -{18,15,-17}, -{18,15,-16}, -{18,15,-15}, -{18,15,-14}, -{18,15,-13}, -{18,15,-12}, -{18,15,-11}, -{18,15,-10}, -{18,15,-9}, -{18,15,-8}, -{18,15,-7}, -{18,15,-6}, -{18,15,-5}, -{18,15,-4}, -{18,15,-3}, -{18,15,-2}, -{18,15,-1}, -{18,15,0}, -{18,15,1}, -{18,15,2}, -{18,15,3}, -{18,15,4}, -{18,15,5}, -{18,15,6}, -{18,15,7}, -{18,15,8}, -{18,15,9}, -{18,15,10}, -{18,15,11}, -{18,15,12}, -{18,15,13}, -{18,15,14}, -{18,15,15}, -{18,15,16}, -{18,15,17}, -{18,15,18}, -{18,15,19}, -{18,15,20}, -{18,15,21}, -{18,15,22}, -{18,15,23}, -{18,15,24}, -{18,15,25}, -{18,15,26}, -{18,16,-41}, -{18,16,-40}, -{18,16,-39}, -{18,16,-38}, -{18,16,-37}, -{18,16,-36}, -{18,16,-35}, -{18,16,-34}, -{18,16,-33}, -{18,16,-32}, -{18,16,-31}, -{18,16,-30}, -{18,16,-29}, -{18,16,-28}, -{18,16,-27}, -{18,16,-26}, -{18,16,-25}, -{18,16,-24}, -{18,16,-23}, -{18,16,-22}, -{18,16,-21}, -{18,16,-20}, -{18,16,-19}, -{18,16,-18}, -{18,16,-17}, -{18,16,-16}, -{18,16,-15}, -{18,16,-14}, -{18,16,-13}, -{18,16,-12}, -{18,16,-11}, -{18,16,-10}, -{18,16,-9}, -{18,16,-8}, -{18,16,-7}, -{18,16,-6}, -{18,16,-5}, -{18,16,-4}, -{18,16,-3}, -{18,16,-2}, -{18,16,-1}, -{18,16,0}, -{18,16,1}, -{18,16,2}, -{18,16,3}, -{18,16,4}, -{18,16,5}, -{18,16,6}, -{18,16,7}, -{18,16,8}, -{18,16,9}, -{18,16,10}, -{18,16,11}, -{18,16,12}, -{18,16,13}, -{18,16,14}, -{18,16,15}, -{18,16,16}, -{18,16,17}, -{18,16,18}, -{18,16,19}, -{18,16,20}, -{18,16,21}, -{18,16,22}, -{18,16,23}, -{18,16,24}, -{18,16,25}, -{18,16,26}, -{18,17,-42}, -{18,17,-41}, -{18,17,-40}, -{18,17,-39}, -{18,17,-38}, -{18,17,-37}, -{18,17,-36}, -{18,17,-35}, -{18,17,-34}, -{18,17,-33}, -{18,17,-32}, -{18,17,-31}, -{18,17,-30}, -{18,17,-29}, -{18,17,-28}, -{18,17,-27}, -{18,17,-26}, -{18,17,-25}, -{18,17,-24}, -{18,17,-23}, -{18,17,-22}, -{18,17,-21}, -{18,17,-20}, -{18,17,-19}, -{18,17,-18}, -{18,17,-17}, -{18,17,-16}, -{18,17,-15}, -{18,17,-14}, -{18,17,-13}, -{18,17,-12}, -{18,17,-11}, -{18,17,-10}, -{18,17,-9}, -{18,17,-8}, -{18,17,-7}, -{18,17,-6}, -{18,17,-5}, -{18,17,-4}, -{18,17,-3}, -{18,17,-2}, -{18,17,-1}, -{18,17,0}, -{18,17,1}, -{18,17,2}, -{18,17,3}, -{18,17,4}, -{18,17,5}, -{18,17,6}, -{18,17,7}, -{18,17,8}, -{18,17,9}, -{18,17,10}, -{18,17,11}, -{18,17,12}, -{18,17,13}, -{18,17,14}, -{18,17,15}, -{18,17,16}, -{18,17,17}, -{18,17,18}, -{18,17,19}, -{18,17,20}, -{18,17,21}, -{18,17,22}, -{18,17,23}, -{18,17,24}, -{18,17,25}, -{18,17,26}, -{18,18,-43}, -{18,18,-42}, -{18,18,-41}, -{18,18,-40}, -{18,18,-39}, -{18,18,-38}, -{18,18,-37}, -{18,18,-36}, -{18,18,-35}, -{18,18,-34}, -{18,18,-33}, -{18,18,-32}, -{18,18,-31}, -{18,18,-30}, -{18,18,-29}, -{18,18,-28}, -{18,18,-27}, -{18,18,-26}, -{18,18,-25}, -{18,18,-24}, -{18,18,-23}, -{18,18,-22}, -{18,18,-21}, -{18,18,-20}, -{18,18,-19}, -{18,18,-18}, -{18,18,-17}, -{18,18,-16}, -{18,18,-15}, -{18,18,-14}, -{18,18,-13}, -{18,18,-12}, -{18,18,-11}, -{18,18,-10}, -{18,18,-9}, -{18,18,-8}, -{18,18,-7}, -{18,18,-6}, -{18,18,-5}, -{18,18,-4}, -{18,18,-3}, -{18,18,-2}, -{18,18,-1}, -{18,18,0}, -{18,18,1}, -{18,18,2}, -{18,18,3}, -{18,18,4}, -{18,18,5}, -{18,18,6}, -{18,18,7}, -{18,18,8}, -{18,18,9}, -{18,18,10}, -{18,18,11}, -{18,18,12}, -{18,18,13}, -{18,18,14}, -{18,18,15}, -{18,18,16}, -{18,18,17}, -{18,18,18}, -{18,18,19}, -{18,18,20}, -{18,18,21}, -{18,18,22}, -{18,18,23}, -{18,18,24}, -{18,18,25}, -{18,18,26}, -{18,19,-44}, -{18,19,-43}, -{18,19,-42}, -{18,19,-41}, -{18,19,-40}, -{18,19,-39}, -{18,19,-38}, -{18,19,-37}, -{18,19,-36}, -{18,19,-35}, -{18,19,-34}, -{18,19,-33}, -{18,19,-32}, -{18,19,-31}, -{18,19,-30}, -{18,19,-29}, -{18,19,-28}, -{18,19,-27}, -{18,19,-26}, -{18,19,-25}, -{18,19,-24}, -{18,19,-23}, -{18,19,-22}, -{18,19,-21}, -{18,19,-20}, -{18,19,-19}, -{18,19,-18}, -{18,19,-17}, -{18,19,-16}, -{18,19,-15}, -{18,19,-14}, -{18,19,-13}, -{18,19,-12}, -{18,19,-11}, -{18,19,-10}, -{18,19,-9}, -{18,19,-8}, -{18,19,-7}, -{18,19,-6}, -{18,19,-5}, -{18,19,-4}, -{18,19,-3}, -{18,19,-2}, -{18,19,-1}, -{18,19,0}, -{18,19,1}, -{18,19,2}, -{18,19,3}, -{18,19,4}, -{18,19,5}, -{18,19,6}, -{18,19,7}, -{18,19,8}, -{18,19,9}, -{18,19,10}, -{18,19,11}, -{18,19,12}, -{18,19,13}, -{18,19,14}, -{18,19,15}, -{18,19,16}, -{18,19,17}, -{18,19,18}, -{18,19,19}, -{18,19,20}, -{18,19,21}, -{18,19,22}, -{18,19,23}, -{18,19,24}, -{18,19,25}, -{18,19,26}, -{18,20,-45}, -{18,20,-44}, -{18,20,-43}, -{18,20,-42}, -{18,20,-41}, -{18,20,-40}, -{18,20,-39}, -{18,20,-38}, -{18,20,-37}, -{18,20,-36}, -{18,20,-35}, -{18,20,-34}, -{18,20,-33}, -{18,20,-32}, -{18,20,-31}, -{18,20,-30}, -{18,20,-29}, -{18,20,-28}, -{18,20,-27}, -{18,20,-26}, -{18,20,-25}, -{18,20,-24}, -{18,20,-23}, -{18,20,-22}, -{18,20,-21}, -{18,20,-20}, -{18,20,-19}, -{18,20,-18}, -{18,20,-17}, -{18,20,-16}, -{18,20,-15}, -{18,20,-14}, -{18,20,-13}, -{18,20,-12}, -{18,20,-11}, -{18,20,-10}, -{18,20,-9}, -{18,20,-8}, -{18,20,-7}, -{18,20,-6}, -{18,20,-5}, -{18,20,-4}, -{18,20,-3}, -{18,20,-2}, -{18,20,-1}, -{18,20,0}, -{18,20,1}, -{18,20,2}, -{18,20,3}, -{18,20,4}, -{18,20,5}, -{18,20,6}, -{18,20,7}, -{18,20,8}, -{18,20,9}, -{18,20,10}, -{18,20,11}, -{18,20,12}, -{18,20,13}, -{18,20,14}, -{18,20,15}, -{18,20,16}, -{18,20,17}, -{18,20,18}, -{18,20,19}, -{18,20,20}, -{18,20,21}, -{18,20,22}, -{18,20,23}, -{18,20,24}, -{18,20,25}, -{18,20,26}, -{18,21,-45}, -{18,21,-44}, -{18,21,-43}, -{18,21,-42}, -{18,21,-41}, -{18,21,-40}, -{18,21,-39}, -{18,21,-38}, -{18,21,-37}, -{18,21,-36}, -{18,21,-35}, -{18,21,-34}, -{18,21,-33}, -{18,21,-32}, -{18,21,-31}, -{18,21,-30}, -{18,21,-29}, -{18,21,-28}, -{18,21,-27}, -{18,21,-26}, -{18,21,-25}, -{18,21,-24}, -{18,21,-23}, -{18,21,-22}, -{18,21,-21}, -{18,21,-20}, -{18,21,-19}, -{18,21,-18}, -{18,21,-17}, -{18,21,-16}, -{18,21,-15}, -{18,21,-14}, -{18,21,-13}, -{18,21,-12}, -{18,21,-11}, -{18,21,-10}, -{18,21,-9}, -{18,21,-8}, -{18,21,-7}, -{18,21,-6}, -{18,21,-5}, -{18,21,-4}, -{18,21,-3}, -{18,21,-2}, -{18,21,-1}, -{18,21,0}, -{18,21,1}, -{18,21,2}, -{18,21,3}, -{18,21,4}, -{18,21,5}, -{18,21,6}, -{18,21,7}, -{18,21,8}, -{18,21,9}, -{18,21,10}, -{18,21,11}, -{18,21,12}, -{18,21,13}, -{18,21,14}, -{18,21,15}, -{18,21,16}, -{18,21,17}, -{18,21,18}, -{18,21,19}, -{18,21,20}, -{18,21,21}, -{18,21,22}, -{18,21,23}, -{18,21,24}, -{18,21,25}, -{18,21,26}, -{18,22,-46}, -{18,22,-45}, -{18,22,-44}, -{18,22,-43}, -{18,22,-42}, -{18,22,-41}, -{18,22,-40}, -{18,22,-39}, -{18,22,-38}, -{18,22,-37}, -{18,22,-36}, -{18,22,-35}, -{18,22,-34}, -{18,22,-33}, -{18,22,-32}, -{18,22,-31}, -{18,22,-30}, -{18,22,-29}, -{18,22,-28}, -{18,22,-27}, -{18,22,-26}, -{18,22,-25}, -{18,22,-24}, -{18,22,-23}, -{18,22,-22}, -{18,22,-21}, -{18,22,-20}, -{18,22,-19}, -{18,22,-18}, -{18,22,-17}, -{18,22,-16}, -{18,22,-15}, -{18,22,-14}, -{18,22,-13}, -{18,22,-12}, -{18,22,-11}, -{18,22,-10}, -{18,22,-9}, -{18,22,-8}, -{18,22,-7}, -{18,22,-6}, -{18,22,-5}, -{18,22,-4}, -{18,22,-3}, -{18,22,-2}, -{18,22,-1}, -{18,22,0}, -{18,22,1}, -{18,22,2}, -{18,22,3}, -{18,22,4}, -{18,22,5}, -{18,22,6}, -{18,22,7}, -{18,22,8}, -{18,22,9}, -{18,22,10}, -{18,22,11}, -{18,22,12}, -{18,22,13}, -{18,22,14}, -{18,22,15}, -{18,22,16}, -{18,22,17}, -{18,22,18}, -{18,22,19}, -{18,22,20}, -{18,22,21}, -{18,22,22}, -{18,22,23}, -{18,22,24}, -{18,22,25}, -{18,22,26}, -{18,22,27}, -{18,23,-47}, -{18,23,-46}, -{18,23,-45}, -{18,23,-44}, -{18,23,-43}, -{18,23,-42}, -{18,23,-41}, -{18,23,-40}, -{18,23,-39}, -{18,23,-38}, -{18,23,-37}, -{18,23,-36}, -{18,23,-35}, -{18,23,-34}, -{18,23,-33}, -{18,23,-32}, -{18,23,-31}, -{18,23,-30}, -{18,23,-29}, -{18,23,-28}, -{18,23,-27}, -{18,23,-26}, -{18,23,-25}, -{18,23,-24}, -{18,23,-23}, -{18,23,-22}, -{18,23,-21}, -{18,23,-20}, -{18,23,-19}, -{18,23,-18}, -{18,23,-17}, -{18,23,-16}, -{18,23,-15}, -{18,23,-14}, -{18,23,-13}, -{18,23,-12}, -{18,23,-11}, -{18,23,-10}, -{18,23,-9}, -{18,23,-8}, -{18,23,-7}, -{18,23,-6}, -{18,23,-5}, -{18,23,-4}, -{18,23,-3}, -{18,23,-2}, -{18,23,-1}, -{18,23,0}, -{18,23,1}, -{18,23,2}, -{18,23,3}, -{18,23,4}, -{18,23,5}, -{18,23,6}, -{18,23,7}, -{18,23,8}, -{18,23,9}, -{18,23,10}, -{18,23,11}, -{18,23,12}, -{18,23,13}, -{18,23,14}, -{18,23,15}, -{18,23,16}, -{18,23,17}, -{18,23,18}, -{18,23,19}, -{18,23,20}, -{18,23,21}, -{18,23,22}, -{18,23,23}, -{18,23,24}, -{18,23,25}, -{18,23,26}, -{18,23,27}, -{18,24,-48}, -{18,24,-47}, -{18,24,-46}, -{18,24,-45}, -{18,24,-44}, -{18,24,-43}, -{18,24,-42}, -{18,24,-41}, -{18,24,-40}, -{18,24,-39}, -{18,24,-38}, -{18,24,-37}, -{18,24,-36}, -{18,24,-35}, -{18,24,-34}, -{18,24,-33}, -{18,24,-32}, -{18,24,-31}, -{18,24,-30}, -{18,24,-29}, -{18,24,-28}, -{18,24,-27}, -{18,24,-26}, -{18,24,-25}, -{18,24,-24}, -{18,24,-23}, -{18,24,-22}, -{18,24,-21}, -{18,24,-20}, -{18,24,-19}, -{18,24,-18}, -{18,24,-17}, -{18,24,-16}, -{18,24,-15}, -{18,24,-14}, -{18,24,-13}, -{18,24,-12}, -{18,24,-11}, -{18,24,-10}, -{18,24,-9}, -{18,24,-8}, -{18,24,-7}, -{18,24,-6}, -{18,24,-5}, -{18,24,-4}, -{18,24,-3}, -{18,24,-2}, -{18,24,-1}, -{18,24,0}, -{18,24,1}, -{18,24,2}, -{18,24,3}, -{18,24,4}, -{18,24,5}, -{18,24,6}, -{18,24,7}, -{18,24,8}, -{18,24,9}, -{18,24,10}, -{18,24,11}, -{18,24,12}, -{18,24,13}, -{18,24,14}, -{18,24,15}, -{18,24,16}, -{18,24,17}, -{18,24,18}, -{18,24,19}, -{18,24,20}, -{18,24,21}, -{18,24,22}, -{18,24,23}, -{18,24,24}, -{18,24,25}, -{18,24,26}, -{18,24,27}, -{18,25,-49}, -{18,25,-48}, -{18,25,-47}, -{18,25,-46}, -{18,25,-45}, -{18,25,-44}, -{18,25,-43}, -{18,25,-42}, -{18,25,-41}, -{18,25,-40}, -{18,25,-39}, -{18,25,-38}, -{18,25,-37}, -{18,25,-36}, -{18,25,-35}, -{18,25,-34}, -{18,25,-33}, -{18,25,-32}, -{18,25,-31}, -{18,25,-30}, -{18,25,-29}, -{18,25,-28}, -{18,25,-27}, -{18,25,-26}, -{18,25,-25}, -{18,25,-24}, -{18,25,-23}, -{18,25,-22}, -{18,25,-21}, -{18,25,-20}, -{18,25,-19}, -{18,25,-18}, -{18,25,-17}, -{18,25,-16}, -{18,25,-15}, -{18,25,-14}, -{18,25,-13}, -{18,25,-12}, -{18,25,-11}, -{18,25,-10}, -{18,25,-9}, -{18,25,-8}, -{18,25,-7}, -{18,25,-6}, -{18,25,-5}, -{18,25,-4}, -{18,25,-3}, -{18,25,-2}, -{18,25,-1}, -{18,25,0}, -{18,25,1}, -{18,25,2}, -{18,25,3}, -{18,25,4}, -{18,25,5}, -{18,25,6}, -{18,25,7}, -{18,25,8}, -{18,25,9}, -{18,25,10}, -{18,25,11}, -{18,25,12}, -{18,25,13}, -{18,25,14}, -{18,25,15}, -{18,25,16}, -{18,25,17}, -{18,25,18}, -{18,25,19}, -{18,25,20}, -{18,25,21}, -{18,25,22}, -{18,25,23}, -{18,25,24}, -{18,25,25}, -{18,25,26}, -{18,25,27}, -{18,26,-50}, -{18,26,-49}, -{18,26,-48}, -{18,26,-47}, -{18,26,-46}, -{18,26,-45}, -{18,26,-44}, -{18,26,-43}, -{18,26,-42}, -{18,26,-41}, -{18,26,-40}, -{18,26,-39}, -{18,26,-38}, -{18,26,-37}, -{18,26,-36}, -{18,26,-35}, -{18,26,-34}, -{18,26,-33}, -{18,26,-32}, -{18,26,-31}, -{18,26,-30}, -{18,26,-29}, -{18,26,-28}, -{18,26,-27}, -{18,26,-26}, -{18,26,-25}, -{18,26,-24}, -{18,26,-23}, -{18,26,-22}, -{18,26,-21}, -{18,26,-20}, -{18,26,-19}, -{18,26,-18}, -{18,26,-17}, -{18,26,-16}, -{18,26,-15}, -{18,26,-14}, -{18,26,-13}, -{18,26,-12}, -{18,26,-11}, -{18,26,-10}, -{18,26,-9}, -{18,26,-8}, -{18,26,-7}, -{18,26,-6}, -{18,26,-5}, -{18,26,-4}, -{18,26,-3}, -{18,26,-2}, -{18,26,-1}, -{18,26,0}, -{18,26,1}, -{18,26,2}, -{18,26,3}, -{18,26,4}, -{18,26,5}, -{18,26,6}, -{18,26,7}, -{18,26,8}, -{18,26,9}, -{18,26,10}, -{18,26,11}, -{18,26,12}, -{18,26,13}, -{18,26,14}, -{18,26,15}, -{18,26,16}, -{18,26,17}, -{18,26,18}, -{18,26,19}, -{18,26,20}, -{18,26,21}, -{18,26,22}, -{18,26,23}, -{18,26,24}, -{18,26,25}, -{18,26,26}, -{18,26,27}, -{18,27,-51}, -{18,27,-50}, -{18,27,-49}, -{18,27,-48}, -{18,27,-47}, -{18,27,-46}, -{18,27,-45}, -{18,27,-44}, -{18,27,-43}, -{18,27,-42}, -{18,27,-41}, -{18,27,-40}, -{18,27,-39}, -{18,27,-38}, -{18,27,-37}, -{18,27,-36}, -{18,27,-35}, -{18,27,-34}, -{18,27,-33}, -{18,27,-32}, -{18,27,-31}, -{18,27,-30}, -{18,27,-29}, -{18,27,-28}, -{18,27,-27}, -{18,27,-26}, -{18,27,-25}, -{18,27,-24}, -{18,27,-23}, -{18,27,-22}, -{18,27,-21}, -{18,27,-20}, -{18,27,-19}, -{18,27,-18}, -{18,27,-17}, -{18,27,-16}, -{18,27,-15}, -{18,27,-14}, -{18,27,-13}, -{18,27,-12}, -{18,27,-11}, -{18,27,-10}, -{18,27,-9}, -{18,27,-8}, -{18,27,-7}, -{18,27,-6}, -{18,27,-5}, -{18,27,-4}, -{18,27,-3}, -{18,27,-2}, -{18,27,-1}, -{18,27,0}, -{18,27,1}, -{18,27,2}, -{18,27,3}, -{18,27,4}, -{18,27,5}, -{18,27,6}, -{18,27,7}, -{18,27,8}, -{18,27,9}, -{18,27,10}, -{18,27,11}, -{18,27,12}, -{18,27,13}, -{18,27,14}, -{18,27,15}, -{18,27,16}, -{18,27,17}, -{18,27,18}, -{18,27,19}, -{18,27,20}, -{18,27,21}, -{18,27,22}, -{18,27,23}, -{18,27,24}, -{18,27,25}, -{18,27,26}, -{18,27,27}, -{18,28,-52}, -{18,28,-51}, -{18,28,-50}, -{18,28,-49}, -{18,28,-48}, -{18,28,-47}, -{18,28,-46}, -{18,28,-45}, -{18,28,-44}, -{18,28,-43}, -{18,28,-42}, -{18,28,-41}, -{18,28,-40}, -{18,28,-39}, -{18,28,-38}, -{18,28,-37}, -{18,28,-36}, -{18,28,-35}, -{18,28,-34}, -{18,28,-33}, -{18,28,-32}, -{18,28,-31}, -{18,28,-30}, -{18,28,-29}, -{18,28,-28}, -{18,28,-27}, -{18,28,-26}, -{18,28,-25}, -{18,28,-24}, -{18,28,-23}, -{18,28,-22}, -{18,28,-21}, -{18,28,-20}, -{18,28,-19}, -{18,28,-18}, -{18,28,-17}, -{18,28,-16}, -{18,28,-15}, -{18,28,-14}, -{18,28,-13}, -{18,28,-12}, -{18,28,-11}, -{18,28,-10}, -{18,28,-9}, -{18,28,-8}, -{18,28,-7}, -{18,28,-6}, -{18,28,-5}, -{18,28,-4}, -{18,28,-3}, -{18,28,-2}, -{18,28,-1}, -{18,28,0}, -{18,28,1}, -{18,28,2}, -{18,28,3}, -{18,28,4}, -{18,28,5}, -{18,28,6}, -{18,28,7}, -{18,28,8}, -{18,28,9}, -{18,28,10}, -{18,28,11}, -{18,28,12}, -{18,28,13}, -{18,28,14}, -{18,28,15}, -{18,28,16}, -{18,28,17}, -{18,28,18}, -{18,28,19}, -{18,28,20}, -{18,28,21}, -{18,28,22}, -{18,28,23}, -{18,28,24}, -{18,28,25}, -{18,28,26}, -{18,28,27}, -{18,29,-53}, -{18,29,-52}, -{18,29,-51}, -{18,29,-50}, -{18,29,-49}, -{18,29,-48}, -{18,29,-47}, -{18,29,-46}, -{18,29,-45}, -{18,29,-44}, -{18,29,-43}, -{18,29,-42}, -{18,29,-41}, -{18,29,-40}, -{18,29,-39}, -{18,29,-38}, -{18,29,-37}, -{18,29,-36}, -{18,29,-35}, -{18,29,-34}, -{18,29,-33}, -{18,29,-32}, -{18,29,-31}, -{18,29,-30}, -{18,29,-29}, -{18,29,-28}, -{18,29,-27}, -{18,29,-26}, -{18,29,-25}, -{18,29,-24}, -{18,29,-23}, -{18,29,-22}, -{18,29,-21}, -{18,29,-20}, -{18,29,-19}, -{18,29,-18}, -{18,29,-17}, -{18,29,-16}, -{18,29,-15}, -{18,29,-14}, -{18,29,-13}, -{18,29,-12}, -{18,29,-11}, -{18,29,-10}, -{18,29,-9}, -{18,29,-8}, -{18,29,-7}, -{18,29,-6}, -{18,29,-5}, -{18,29,-4}, -{18,29,-3}, -{18,29,-2}, -{18,29,-1}, -{18,29,0}, -{18,29,1}, -{18,29,2}, -{18,29,3}, -{18,29,4}, -{18,29,5}, -{18,29,6}, -{18,29,7}, -{18,29,8}, -{18,29,9}, -{18,29,10}, -{18,29,11}, -{18,29,12}, -{18,29,13}, -{18,29,14}, -{18,29,15}, -{18,29,16}, -{18,29,17}, -{18,29,18}, -{18,29,19}, -{18,29,20}, -{18,29,21}, -{18,29,22}, -{18,29,23}, -{18,29,24}, -{18,29,25}, -{18,29,26}, -{18,29,27}, -{18,30,-54}, -{18,30,-53}, -{18,30,-52}, -{18,30,-51}, -{18,30,-50}, -{18,30,-49}, -{18,30,-48}, -{18,30,-47}, -{18,30,-46}, -{18,30,-45}, -{18,30,-44}, -{18,30,-43}, -{18,30,-42}, -{18,30,-41}, -{18,30,-40}, -{18,30,-39}, -{18,30,-38}, -{18,30,-37}, -{18,30,-36}, -{18,30,-35}, -{18,30,-34}, -{18,30,-33}, -{18,30,-32}, -{18,30,-31}, -{18,30,-30}, -{18,30,-29}, -{18,30,-28}, -{18,30,-27}, -{18,30,-26}, -{18,30,-25}, -{18,30,-24}, -{18,30,-23}, -{18,30,-22}, -{18,30,-21}, -{18,30,-20}, -{18,30,-19}, -{18,30,-18}, -{18,30,-17}, -{18,30,-16}, -{18,30,-15}, -{18,30,-14}, -{18,30,-13}, -{18,30,-12}, -{18,30,-11}, -{18,30,-10}, -{18,30,-9}, -{18,30,-8}, -{18,30,-7}, -{18,30,-6}, -{18,30,-5}, -{18,30,-4}, -{18,30,-3}, -{18,30,-2}, -{18,30,-1}, -{18,30,0}, -{18,30,1}, -{18,30,2}, -{18,30,3}, -{18,30,4}, -{18,30,5}, -{18,30,6}, -{18,30,7}, -{18,30,8}, -{18,30,9}, -{18,30,10}, -{18,30,11}, -{18,30,12}, -{18,30,13}, -{18,30,14}, -{18,30,15}, -{18,30,16}, -{18,30,17}, -{18,30,18}, -{18,30,19}, -{18,30,20}, -{18,30,21}, -{18,30,22}, -{18,30,23}, -{18,30,24}, -{18,30,25}, -{18,30,26}, -{18,30,27}, -{18,31,-55}, -{18,31,-54}, -{18,31,-53}, -{18,31,-52}, -{18,31,-51}, -{18,31,-50}, -{18,31,-49}, -{18,31,-48}, -{18,31,-47}, -{18,31,-46}, -{18,31,-45}, -{18,31,-44}, -{18,31,-43}, -{18,31,-42}, -{18,31,-41}, -{18,31,-40}, -{18,31,-39}, -{18,31,-38}, -{18,31,-37}, -{18,31,-36}, -{18,31,-35}, -{18,31,-34}, -{18,31,-33}, -{18,31,-32}, -{18,31,-31}, -{18,31,-30}, -{18,31,-29}, -{18,31,-28}, -{18,31,-27}, -{18,31,-26}, -{18,31,-25}, -{18,31,-24}, -{18,31,-23}, -{18,31,-22}, -{18,31,-21}, -{18,31,-20}, -{18,31,-19}, -{18,31,-18}, -{18,31,-17}, -{18,31,-16}, -{18,31,-15}, -{18,31,-14}, -{18,31,-13}, -{18,31,-12}, -{18,31,-11}, -{18,31,-10}, -{18,31,-9}, -{18,31,-8}, -{18,31,-7}, -{18,31,-6}, -{18,31,-5}, -{18,31,-4}, -{18,31,-3}, -{18,31,-2}, -{18,31,-1}, -{18,31,0}, -{18,31,1}, -{18,31,2}, -{18,31,3}, -{18,31,4}, -{18,31,5}, -{18,31,6}, -{18,31,7}, -{18,31,8}, -{18,31,9}, -{18,31,10}, -{18,31,11}, -{18,31,12}, -{18,31,13}, -{18,31,14}, -{18,31,15}, -{18,31,16}, -{18,31,17}, -{18,31,18}, -{18,31,19}, -{18,31,20}, -{18,31,21}, -{18,31,22}, -{18,31,23}, -{18,31,24}, -{18,31,25}, -{18,31,26}, -{18,31,27}, -{18,32,-55}, -{18,32,-54}, -{18,32,-53}, -{18,32,-52}, -{18,32,-51}, -{18,32,-50}, -{18,32,-49}, -{18,32,-48}, -{18,32,-47}, -{18,32,-46}, -{18,32,-45}, -{18,32,-44}, -{18,32,-43}, -{18,32,-42}, -{18,32,-41}, -{18,32,-40}, -{18,32,-39}, -{18,32,-38}, -{18,32,-37}, -{18,32,-36}, -{18,32,-35}, -{18,32,-34}, -{18,32,-33}, -{18,32,-32}, -{18,32,-31}, -{18,32,-30}, -{18,32,-29}, -{18,32,-28}, -{18,32,-27}, -{18,32,-26}, -{18,32,-25}, -{18,32,-24}, -{18,32,-23}, -{18,32,-22}, -{18,32,-21}, -{18,32,-20}, -{18,32,-19}, -{18,32,-18}, -{18,32,-17}, -{18,32,-16}, -{18,32,-15}, -{18,32,-14}, -{18,32,-13}, -{18,32,-12}, -{18,32,-11}, -{18,32,-10}, -{18,32,-9}, -{18,32,-8}, -{18,32,-7}, -{18,32,-6}, -{18,32,-5}, -{18,32,-4}, -{18,32,-3}, -{18,32,-2}, -{18,32,-1}, -{18,32,0}, -{18,32,1}, -{18,32,2}, -{18,32,3}, -{18,32,4}, -{18,32,5}, -{18,32,6}, -{18,32,7}, -{18,32,8}, -{18,32,9}, -{18,32,10}, -{18,32,11}, -{18,32,12}, -{18,32,13}, -{18,32,14}, -{18,32,15}, -{18,32,16}, -{18,32,17}, -{18,32,18}, -{18,32,19}, -{18,32,20}, -{18,32,21}, -{18,32,22}, -{18,32,23}, -{18,32,24}, -{18,32,25}, -{18,32,26}, -{18,32,27}, -{18,33,-56}, -{18,33,-55}, -{18,33,-54}, -{18,33,-53}, -{18,33,-52}, -{18,33,-51}, -{18,33,-50}, -{18,33,-49}, -{18,33,-48}, -{18,33,-47}, -{18,33,-46}, -{18,33,-45}, -{18,33,-44}, -{18,33,-43}, -{18,33,-42}, -{18,33,-41}, -{18,33,-40}, -{18,33,-39}, -{18,33,-38}, -{18,33,-37}, -{18,33,-36}, -{18,33,-35}, -{18,33,-34}, -{18,33,-33}, -{18,33,-32}, -{18,33,-31}, -{18,33,-30}, -{18,33,-29}, -{18,33,-28}, -{18,33,-27}, -{18,33,-26}, -{18,33,-25}, -{18,33,-24}, -{18,33,-23}, -{18,33,-22}, -{18,33,-21}, -{18,33,-20}, -{18,33,-19}, -{18,33,-18}, -{18,33,-17}, -{18,33,-16}, -{18,33,-15}, -{18,33,-14}, -{18,33,-13}, -{18,33,-12}, -{18,33,-11}, -{18,33,-10}, -{18,33,-9}, -{18,33,-8}, -{18,33,-7}, -{18,33,-6}, -{18,33,-5}, -{18,33,-4}, -{18,33,-3}, -{18,33,-2}, -{18,33,-1}, -{18,33,0}, -{18,33,1}, -{18,33,2}, -{18,33,3}, -{18,33,4}, -{18,33,5}, -{18,33,6}, -{18,33,7}, -{18,33,8}, -{18,33,9}, -{18,33,10}, -{18,33,11}, -{18,33,12}, -{18,33,13}, -{18,33,14}, -{18,33,15}, -{18,33,16}, -{18,33,17}, -{18,33,18}, -{18,33,19}, -{18,33,20}, -{18,33,21}, -{18,33,22}, -{18,33,23}, -{18,33,24}, -{18,33,25}, -{18,33,26}, -{18,33,27}, -{18,34,-57}, -{18,34,-56}, -{18,34,-55}, -{18,34,-54}, -{18,34,-53}, -{18,34,-52}, -{18,34,-51}, -{18,34,-50}, -{18,34,-49}, -{18,34,-48}, -{18,34,-47}, -{18,34,-46}, -{18,34,-45}, -{18,34,-44}, -{18,34,-43}, -{18,34,-42}, -{18,34,-41}, -{18,34,-40}, -{18,34,-39}, -{18,34,-38}, -{18,34,-37}, -{18,34,-36}, -{18,34,-35}, -{18,34,-34}, -{18,34,-33}, -{18,34,-32}, -{18,34,-31}, -{18,34,-30}, -{18,34,-29}, -{18,34,-28}, -{18,34,-27}, -{18,34,-26}, -{18,34,-25}, -{18,34,-24}, -{18,34,-23}, -{18,34,-22}, -{18,34,-21}, -{18,34,-20}, -{18,34,-19}, -{18,34,-18}, -{18,34,-17}, -{18,34,-16}, -{18,34,-15}, -{18,34,-14}, -{18,34,-13}, -{18,34,-12}, -{18,34,-11}, -{18,34,-10}, -{18,34,-9}, -{18,34,-8}, -{18,34,-7}, -{18,34,-6}, -{18,34,-5}, -{18,34,-4}, -{18,34,-3}, -{18,34,-2}, -{18,34,-1}, -{18,34,0}, -{18,34,1}, -{18,34,2}, -{18,34,3}, -{18,34,4}, -{18,34,5}, -{18,34,6}, -{18,34,7}, -{18,34,8}, -{18,34,9}, -{18,34,10}, -{18,34,11}, -{18,34,12}, -{18,34,13}, -{18,34,14}, -{18,34,15}, -{18,34,16}, -{18,34,17}, -{18,34,18}, -{18,34,19}, -{18,34,20}, -{18,34,21}, -{18,34,22}, -{18,34,23}, -{18,34,24}, -{18,34,25}, -{18,34,26}, -{18,34,27}, -{18,35,-58}, -{18,35,-57}, -{18,35,-56}, -{18,35,-55}, -{18,35,-54}, -{18,35,-53}, -{18,35,-52}, -{18,35,-51}, -{18,35,-50}, -{18,35,-49}, -{18,35,-48}, -{18,35,-47}, -{18,35,-46}, -{18,35,-45}, -{18,35,-44}, -{18,35,-43}, -{18,35,-42}, -{18,35,-41}, -{18,35,-40}, -{18,35,-39}, -{18,35,-38}, -{18,35,-37}, -{18,35,-36}, -{18,35,-35}, -{18,35,-34}, -{18,35,-33}, -{18,35,-32}, -{18,35,-31}, -{18,35,-30}, -{18,35,-29}, -{18,35,-28}, -{18,35,-27}, -{18,35,-26}, -{18,35,-25}, -{18,35,-24}, -{18,35,-23}, -{18,35,-22}, -{18,35,-21}, -{18,35,-20}, -{18,35,-19}, -{18,35,-18}, -{18,35,-17}, -{18,35,-16}, -{18,35,-15}, -{18,35,-14}, -{18,35,-13}, -{18,35,-12}, -{18,35,-11}, -{18,35,-10}, -{18,35,-9}, -{18,35,-8}, -{18,35,-7}, -{18,35,-6}, -{18,35,-5}, -{18,35,-4}, -{18,35,-3}, -{18,35,-2}, -{18,35,-1}, -{18,35,0}, -{18,35,1}, -{18,35,2}, -{18,35,3}, -{18,35,4}, -{18,35,5}, -{18,35,6}, -{18,35,7}, -{18,35,8}, -{18,35,9}, -{18,35,10}, -{18,35,11}, -{18,35,12}, -{18,35,13}, -{18,35,14}, -{18,35,15}, -{18,35,16}, -{18,35,17}, -{18,35,18}, -{18,35,19}, -{18,35,20}, -{18,35,21}, -{18,35,22}, -{18,35,23}, -{18,35,24}, -{18,35,25}, -{18,35,26}, -{18,35,27}, -{18,36,-59}, -{18,36,-58}, -{18,36,-57}, -{18,36,-56}, -{18,36,-55}, -{18,36,-54}, -{18,36,-53}, -{18,36,-52}, -{18,36,-51}, -{18,36,-50}, -{18,36,-49}, -{18,36,-48}, -{18,36,-47}, -{18,36,-46}, -{18,36,-45}, -{18,36,-44}, -{18,36,-43}, -{18,36,-42}, -{18,36,-41}, -{18,36,-40}, -{18,36,-39}, -{18,36,-38}, -{18,36,-37}, -{18,36,-36}, -{18,36,-35}, -{18,36,-34}, -{18,36,-33}, -{18,36,-32}, -{18,36,-31}, -{18,36,-30}, -{18,36,-29}, -{18,36,-28}, -{18,36,-27}, -{18,36,-26}, -{18,36,-25}, -{18,36,-24}, -{18,36,-23}, -{18,36,-22}, -{18,36,-21}, -{18,36,-20}, -{18,36,-19}, -{18,36,-18}, -{18,36,-17}, -{18,36,-16}, -{18,36,-15}, -{18,36,-14}, -{18,36,-13}, -{18,36,-12}, -{18,36,-11}, -{18,36,-10}, -{18,36,-9}, -{18,36,-8}, -{18,36,-7}, -{18,36,-6}, -{18,36,-5}, -{18,36,-4}, -{18,36,-3}, -{18,36,-2}, -{18,36,-1}, -{18,36,0}, -{18,36,1}, -{18,36,2}, -{18,36,3}, -{18,36,4}, -{18,36,5}, -{18,36,6}, -{18,36,7}, -{18,36,8}, -{18,36,9}, -{18,36,10}, -{18,36,11}, -{18,36,12}, -{18,36,13}, -{18,36,14}, -{18,36,15}, -{18,36,16}, -{18,36,17}, -{18,36,18}, -{18,36,19}, -{18,36,20}, -{18,36,21}, -{18,36,22}, -{18,36,23}, -{18,36,24}, -{18,36,25}, -{18,36,26}, -{18,36,27}, -{18,37,-60}, -{18,37,-59}, -{18,37,-58}, -{18,37,-57}, -{18,37,-56}, -{18,37,-55}, -{18,37,-54}, -{18,37,-53}, -{18,37,-52}, -{18,37,-51}, -{18,37,-50}, -{18,37,-49}, -{18,37,-48}, -{18,37,-47}, -{18,37,-46}, -{18,37,-45}, -{18,37,-44}, -{18,37,-43}, -{18,37,-42}, -{18,37,-41}, -{18,37,-40}, -{18,37,-39}, -{18,37,-38}, -{18,37,-37}, -{18,37,-36}, -{18,37,-35}, -{18,37,-34}, -{18,37,-33}, -{18,37,-32}, -{18,37,-31}, -{18,37,-30}, -{18,37,-29}, -{18,37,-28}, -{18,37,-27}, -{18,37,-26}, -{18,37,-25}, -{18,37,-24}, -{18,37,-23}, -{18,37,-22}, -{18,37,-21}, -{18,37,-20}, -{18,37,-19}, -{18,37,-18}, -{18,37,-17}, -{18,37,-16}, -{18,37,-15}, -{18,37,-14}, -{18,37,-13}, -{18,37,-12}, -{18,37,-11}, -{18,37,-10}, -{18,37,-9}, -{18,37,-8}, -{18,37,-7}, -{18,37,-6}, -{18,37,-5}, -{18,37,-4}, -{18,37,-3}, -{18,37,-2}, -{18,37,-1}, -{18,37,0}, -{18,37,1}, -{18,37,2}, -{18,37,3}, -{18,37,4}, -{18,37,5}, -{18,37,6}, -{18,37,7}, -{18,37,8}, -{18,37,9}, -{18,37,10}, -{18,37,11}, -{18,37,12}, -{18,37,13}, -{18,37,14}, -{18,37,15}, -{18,37,16}, -{18,37,17}, -{18,37,18}, -{18,37,19}, -{18,37,20}, -{18,37,21}, -{18,37,22}, -{18,37,23}, -{18,37,24}, -{18,37,25}, -{18,37,26}, -{18,37,27}, -{18,38,-61}, -{18,38,-60}, -{18,38,-59}, -{18,38,-58}, -{18,38,-57}, -{18,38,-56}, -{18,38,-55}, -{18,38,-54}, -{18,38,-53}, -{18,38,-52}, -{18,38,-51}, -{18,38,-50}, -{18,38,-49}, -{18,38,-48}, -{18,38,-47}, -{18,38,-46}, -{18,38,-45}, -{18,38,-44}, -{18,38,-43}, -{18,38,-42}, -{18,38,-41}, -{18,38,-40}, -{18,38,-39}, -{18,38,-38}, -{18,38,-37}, -{18,38,-36}, -{18,38,-35}, -{18,38,-34}, -{18,38,-33}, -{18,38,-32}, -{18,38,-31}, -{18,38,-30}, -{18,38,-29}, -{18,38,-28}, -{18,38,-27}, -{18,38,-26}, -{18,38,-25}, -{18,38,-24}, -{18,38,-23}, -{18,38,-22}, -{18,38,-21}, -{18,38,-20}, -{18,38,-19}, -{18,38,-18}, -{18,38,-17}, -{18,38,-16}, -{18,38,-15}, -{18,38,-14}, -{18,38,-13}, -{18,38,-12}, -{18,38,-11}, -{18,38,-10}, -{18,38,-9}, -{18,38,-8}, -{18,38,-7}, -{18,38,-6}, -{18,38,-5}, -{18,38,-4}, -{18,38,-3}, -{18,38,-2}, -{18,38,-1}, -{18,38,0}, -{18,38,1}, -{18,38,2}, -{18,38,3}, -{18,38,4}, -{18,38,5}, -{18,38,6}, -{18,38,7}, -{18,38,8}, -{18,38,9}, -{18,38,10}, -{18,38,11}, -{18,38,12}, -{18,38,13}, -{18,38,14}, -{18,38,15}, -{18,38,16}, -{18,38,17}, -{18,38,18}, -{18,38,19}, -{18,38,20}, -{18,38,21}, -{18,38,22}, -{18,38,23}, -{18,38,24}, -{18,38,25}, -{18,38,26}, -{18,38,27}, -{18,39,-62}, -{18,39,-61}, -{18,39,-60}, -{18,39,-59}, -{18,39,-58}, -{18,39,-57}, -{18,39,-56}, -{18,39,-55}, -{18,39,-54}, -{18,39,-53}, -{18,39,-52}, -{18,39,-51}, -{18,39,-50}, -{18,39,-49}, -{18,39,-48}, -{18,39,-47}, -{18,39,-46}, -{18,39,-45}, -{18,39,-44}, -{18,39,-43}, -{18,39,-42}, -{18,39,-41}, -{18,39,-40}, -{18,39,-39}, -{18,39,-38}, -{18,39,-37}, -{18,39,-36}, -{18,39,-35}, -{18,39,-34}, -{18,39,-33}, -{18,39,-32}, -{18,39,-31}, -{18,39,-30}, -{18,39,-29}, -{18,39,-28}, -{18,39,-27}, -{18,39,-26}, -{18,39,-25}, -{18,39,-24}, -{18,39,-23}, -{18,39,-22}, -{18,39,-21}, -{18,39,-20}, -{18,39,-19}, -{18,39,-18}, -{18,39,-17}, -{18,39,-16}, -{18,39,-15}, -{18,39,-14}, -{18,39,-13}, -{18,39,-12}, -{18,39,-11}, -{18,39,-10}, -{18,39,-9}, -{18,39,-8}, -{18,39,-7}, -{18,39,-6}, -{18,39,-5}, -{18,39,-4}, -{18,39,-3}, -{18,39,-2}, -{18,39,-1}, -{18,39,0}, -{18,39,1}, -{18,39,2}, -{18,39,3}, -{18,39,4}, -{18,39,5}, -{18,39,6}, -{18,39,7}, -{18,39,8}, -{18,39,9}, -{18,39,10}, -{18,39,11}, -{18,39,12}, -{18,39,13}, -{18,39,14}, -{18,39,15}, -{18,39,16}, -{18,39,17}, -{18,39,18}, -{18,39,19}, -{18,39,20}, -{18,39,21}, -{18,39,22}, -{18,39,23}, -{18,39,24}, -{18,39,25}, -{18,39,26}, -{18,39,27}, -{18,40,-62}, -{18,40,-61}, -{18,40,-60}, -{18,40,-59}, -{18,40,-58}, -{18,40,-57}, -{18,40,-56}, -{18,40,-55}, -{18,40,-54}, -{18,40,-53}, -{18,40,-52}, -{18,40,-51}, -{18,40,-50}, -{18,40,-49}, -{18,40,-48}, -{18,40,-47}, -{18,40,-46}, -{18,40,-45}, -{18,40,-44}, -{18,40,-43}, -{18,40,-42}, -{18,40,-41}, -{18,40,-40}, -{18,40,-39}, -{18,40,-38}, -{18,40,-37}, -{18,40,-36}, -{18,40,-35}, -{18,40,-34}, -{18,40,-33}, -{18,40,-32}, -{18,40,-31}, -{18,40,-30}, -{18,40,-29}, -{18,40,-28}, -{18,40,-27}, -{18,40,-26}, -{18,40,-25}, -{18,40,-24}, -{18,40,-23}, -{18,40,-22}, -{18,40,-21}, -{18,40,-20}, -{18,40,-19}, -{18,40,-18}, -{18,40,-17}, -{18,40,-16}, -{18,40,-15}, -{18,40,-14}, -{18,40,-13}, -{18,40,-12}, -{18,40,-11}, -{18,40,-10}, -{18,40,-9}, -{18,40,-8}, -{18,40,-7}, -{18,40,-6}, -{18,40,-5}, -{18,40,-4}, -{18,40,-3}, -{18,40,-2}, -{18,40,-1}, -{18,40,0}, -{18,40,1}, -{18,40,2}, -{18,40,3}, -{18,40,4}, -{18,40,5}, -{18,40,6}, -{18,40,7}, -{18,40,8}, -{18,40,9}, -{18,40,10}, -{18,40,11}, -{18,40,12}, -{18,40,13}, -{18,40,14}, -{18,41,-63}, -{18,41,-62}, -{18,41,-61}, -{18,41,-60}, -{18,41,-59}, -{18,41,-58}, -{18,41,-57}, -{18,41,-56}, -{18,41,-55}, -{18,41,-54}, -{18,41,-53}, -{18,41,-52}, -{18,41,-51}, -{18,41,-50}, -{18,41,-49}, -{18,41,-48}, -{18,41,-47}, -{18,41,-46}, -{18,41,-45}, -{18,41,-44}, -{18,41,-43}, -{18,41,-42}, -{18,41,-41}, -{18,41,-40}, -{18,41,-39}, -{18,41,-38}, -{18,41,-37}, -{18,41,-36}, -{18,41,-35}, -{18,41,-34}, -{18,41,-33}, -{18,41,-32}, -{18,41,-31}, -{18,41,-30}, -{18,41,-29}, -{18,41,-28}, -{18,41,-27}, -{18,41,-26}, -{18,41,-25}, -{18,41,-24}, -{18,41,-23}, -{18,41,-22}, -{18,41,-21}, -{18,41,-20}, -{18,41,-19}, -{18,41,-18}, -{18,41,-17}, -{18,41,-16}, -{18,41,-15}, -{18,41,-14}, -{18,41,-13}, -{18,41,-12}, -{18,41,-11}, -{18,41,-10}, -{18,41,-9}, -{18,41,-8}, -{18,41,-7}, -{18,41,-6}, -{18,41,-5}, -{18,41,-4}, -{18,41,-3}, -{18,41,-2}, -{18,42,-64}, -{18,42,-63}, -{18,42,-62}, -{18,42,-61}, -{18,42,-60}, -{18,42,-59}, -{18,42,-58}, -{18,42,-57}, -{18,42,-56}, -{18,42,-55}, -{18,42,-54}, -{18,42,-53}, -{18,42,-52}, -{18,42,-51}, -{18,42,-50}, -{18,42,-49}, -{18,42,-48}, -{18,42,-47}, -{18,42,-46}, -{18,42,-45}, -{18,42,-44}, -{18,42,-43}, -{18,42,-42}, -{18,42,-41}, -{18,42,-40}, -{18,42,-39}, -{18,42,-38}, -{18,42,-37}, -{18,42,-36}, -{18,42,-35}, -{18,42,-34}, -{18,42,-33}, -{18,42,-32}, -{18,42,-31}, -{18,42,-30}, -{18,42,-29}, -{18,42,-28}, -{18,42,-27}, -{18,42,-26}, -{18,42,-25}, -{18,42,-24}, -{18,42,-23}, -{18,42,-22}, -{18,42,-21}, -{18,42,-20}, -{18,42,-19}, -{18,42,-18}, -{18,42,-17}, -{18,42,-16}, -{18,42,-15}, -{18,42,-14}, -{18,42,-13}, -{18,43,-65}, -{18,43,-64}, -{18,43,-63}, -{18,43,-62}, -{18,43,-61}, -{18,43,-60}, -{18,43,-59}, -{18,43,-58}, -{18,43,-57}, -{18,43,-56}, -{18,43,-55}, -{18,43,-54}, -{18,43,-53}, -{18,43,-52}, -{18,43,-51}, -{18,43,-50}, -{18,43,-49}, -{18,43,-48}, -{18,43,-47}, -{18,43,-46}, -{18,43,-45}, -{18,43,-44}, -{18,43,-43}, -{18,43,-42}, -{18,43,-41}, -{18,43,-40}, -{18,43,-39}, -{18,43,-38}, -{18,43,-37}, -{18,43,-36}, -{18,43,-35}, -{18,43,-34}, -{18,43,-33}, -{18,43,-32}, -{18,43,-31}, -{18,43,-30}, -{18,43,-29}, -{18,43,-28}, -{18,43,-27}, -{18,43,-26}, -{18,43,-25}, -{18,43,-24}, -{18,43,-23}, -{18,43,-22}, -{18,43,-21}, -{18,44,-66}, -{18,44,-65}, -{18,44,-64}, -{18,44,-63}, -{18,44,-62}, -{18,44,-61}, -{18,44,-60}, -{18,44,-59}, -{18,44,-58}, -{18,44,-57}, -{18,44,-56}, -{18,44,-55}, -{18,44,-54}, -{18,44,-53}, -{18,44,-52}, -{18,44,-51}, -{18,44,-50}, -{18,44,-49}, -{18,44,-48}, -{18,44,-47}, -{18,44,-46}, -{18,44,-45}, -{18,44,-44}, -{18,44,-43}, -{18,44,-42}, -{18,44,-41}, -{18,44,-40}, -{18,44,-39}, -{18,44,-38}, -{18,44,-37}, -{18,44,-36}, -{18,44,-35}, -{18,44,-34}, -{18,44,-33}, -{18,44,-32}, -{18,44,-31}, -{18,44,-30}, -{18,44,-29}, -{18,44,-28}, -{18,45,-67}, -{18,45,-66}, -{18,45,-65}, -{18,45,-64}, -{18,45,-63}, -{18,45,-62}, -{18,45,-61}, -{18,45,-60}, -{18,45,-59}, -{18,45,-58}, -{18,45,-57}, -{18,45,-56}, -{18,45,-55}, -{18,45,-54}, -{18,45,-53}, -{18,45,-52}, -{18,45,-51}, -{18,45,-50}, -{18,45,-49}, -{18,45,-48}, -{18,45,-47}, -{18,45,-46}, -{18,45,-45}, -{18,45,-44}, -{18,45,-43}, -{18,45,-42}, -{18,45,-41}, -{18,45,-40}, -{18,45,-39}, -{18,45,-38}, -{18,45,-37}, -{18,45,-36}, -{18,45,-35}, -{18,45,-34}, -{18,46,-68}, -{18,46,-67}, -{18,46,-66}, -{18,46,-65}, -{18,46,-64}, -{18,46,-63}, -{18,46,-62}, -{18,46,-61}, -{18,46,-60}, -{18,46,-59}, -{18,46,-58}, -{18,46,-57}, -{18,46,-56}, -{18,46,-55}, -{18,46,-54}, -{18,46,-53}, -{18,46,-52}, -{18,46,-51}, -{18,46,-50}, -{18,46,-49}, -{18,46,-48}, -{18,46,-47}, -{18,46,-46}, -{18,46,-45}, -{18,46,-44}, -{18,46,-43}, -{18,46,-42}, -{18,46,-41}, -{18,46,-40}, -{18,46,-39}, -{18,47,-68}, -{18,47,-67}, -{18,47,-66}, -{18,47,-65}, -{18,47,-64}, -{18,47,-63}, -{18,47,-62}, -{18,47,-61}, -{18,47,-60}, -{18,47,-59}, -{18,47,-58}, -{18,47,-57}, -{18,47,-56}, -{18,47,-55}, -{18,47,-54}, -{18,47,-53}, -{18,47,-52}, -{18,47,-51}, -{18,47,-50}, -{18,47,-49}, -{18,47,-48}, -{18,47,-47}, -{18,47,-46}, -{18,47,-45}, -{18,47,-44}, -{18,48,-69}, -{18,48,-68}, -{18,48,-67}, -{18,48,-66}, -{18,48,-65}, -{18,48,-64}, -{18,48,-63}, -{18,48,-62}, -{18,48,-61}, -{18,48,-60}, -{18,48,-59}, -{18,48,-58}, -{18,48,-57}, -{18,48,-56}, -{18,48,-55}, -{18,48,-54}, -{18,48,-53}, -{18,48,-52}, -{18,48,-51}, -{18,48,-50}, -{18,48,-49}, -{18,49,-70}, -{18,49,-69}, -{18,49,-68}, -{18,49,-67}, -{18,49,-66}, -{18,49,-65}, -{18,49,-64}, -{18,49,-63}, -{18,49,-62}, -{18,49,-61}, -{18,49,-60}, -{18,49,-59}, -{18,49,-58}, -{18,49,-57}, -{18,49,-56}, -{18,49,-55}, -{18,49,-54}, -{18,49,-53}, -{18,50,-71}, -{18,50,-70}, -{18,50,-69}, -{18,50,-68}, -{18,50,-67}, -{18,50,-66}, -{18,50,-65}, -{18,50,-64}, -{18,50,-63}, -{18,50,-62}, -{18,50,-61}, -{18,50,-60}, -{18,50,-59}, -{18,50,-58}, -{18,50,-57}, -{18,51,-72}, -{18,51,-71}, -{18,51,-70}, -{18,51,-69}, -{18,51,-68}, -{18,51,-67}, -{18,51,-66}, -{18,51,-65}, -{18,51,-64}, -{18,51,-63}, -{18,51,-62}, -{18,51,-61}, -{18,52,-73}, -{18,52,-72}, -{18,52,-71}, -{18,52,-70}, -{18,52,-69}, -{18,52,-68}, -{18,52,-67}, -{18,52,-66}, -{18,52,-65}, -{18,52,-64}, -{18,53,-73}, -{18,53,-72}, -{18,53,-71}, -{18,53,-70}, -{18,53,-69}, -{18,53,-68}, -{18,54,-74}, -{18,54,-73}, -{18,54,-72}, -{18,54,-71}, -{18,55,-75}, -{18,55,-74}, -{19,-29,26}, -{19,-28,23}, -{19,-28,24}, -{19,-28,25}, -{19,-28,26}, -{19,-27,19}, -{19,-27,20}, -{19,-27,21}, -{19,-27,22}, -{19,-27,23}, -{19,-27,24}, -{19,-27,25}, -{19,-27,26}, -{19,-26,16}, -{19,-26,17}, -{19,-26,18}, -{19,-26,19}, -{19,-26,20}, -{19,-26,21}, -{19,-26,22}, -{19,-26,23}, -{19,-26,24}, -{19,-26,25}, -{19,-26,26}, -{19,-25,14}, -{19,-25,15}, -{19,-25,16}, -{19,-25,17}, -{19,-25,18}, -{19,-25,19}, -{19,-25,20}, -{19,-25,21}, -{19,-25,22}, -{19,-25,23}, -{19,-25,24}, -{19,-25,25}, -{19,-25,26}, -{19,-24,11}, -{19,-24,12}, -{19,-24,13}, -{19,-24,14}, -{19,-24,15}, -{19,-24,16}, -{19,-24,17}, -{19,-24,18}, -{19,-24,19}, -{19,-24,20}, -{19,-24,21}, -{19,-24,22}, -{19,-24,23}, -{19,-24,24}, -{19,-24,25}, -{19,-24,26}, -{19,-23,9}, -{19,-23,10}, -{19,-23,11}, -{19,-23,12}, -{19,-23,13}, -{19,-23,14}, -{19,-23,15}, -{19,-23,16}, -{19,-23,17}, -{19,-23,18}, -{19,-23,19}, -{19,-23,20}, -{19,-23,21}, -{19,-23,22}, -{19,-23,23}, -{19,-23,24}, -{19,-23,25}, -{19,-23,26}, -{19,-22,7}, -{19,-22,8}, -{19,-22,9}, -{19,-22,10}, -{19,-22,11}, -{19,-22,12}, -{19,-22,13}, -{19,-22,14}, -{19,-22,15}, -{19,-22,16}, -{19,-22,17}, -{19,-22,18}, -{19,-22,19}, -{19,-22,20}, -{19,-22,21}, -{19,-22,22}, -{19,-22,23}, -{19,-22,24}, -{19,-22,25}, -{19,-22,26}, -{19,-21,5}, -{19,-21,6}, -{19,-21,7}, -{19,-21,8}, -{19,-21,9}, -{19,-21,10}, -{19,-21,11}, -{19,-21,12}, -{19,-21,13}, -{19,-21,14}, -{19,-21,15}, -{19,-21,16}, -{19,-21,17}, -{19,-21,18}, -{19,-21,19}, -{19,-21,20}, -{19,-21,21}, -{19,-21,22}, -{19,-21,23}, -{19,-21,24}, -{19,-21,25}, -{19,-21,26}, -{19,-20,3}, -{19,-20,4}, -{19,-20,5}, -{19,-20,6}, -{19,-20,7}, -{19,-20,8}, -{19,-20,9}, -{19,-20,10}, -{19,-20,11}, -{19,-20,12}, -{19,-20,13}, -{19,-20,14}, -{19,-20,15}, -{19,-20,16}, -{19,-20,17}, -{19,-20,18}, -{19,-20,19}, -{19,-20,20}, -{19,-20,21}, -{19,-20,22}, -{19,-20,23}, -{19,-20,24}, -{19,-20,25}, -{19,-20,26}, -{19,-19,1}, -{19,-19,2}, -{19,-19,3}, -{19,-19,4}, -{19,-19,5}, -{19,-19,6}, -{19,-19,7}, -{19,-19,8}, -{19,-19,9}, -{19,-19,10}, -{19,-19,11}, -{19,-19,12}, -{19,-19,13}, -{19,-19,14}, -{19,-19,15}, -{19,-19,16}, -{19,-19,17}, -{19,-19,18}, -{19,-19,19}, -{19,-19,20}, -{19,-19,21}, -{19,-19,22}, -{19,-19,23}, -{19,-19,24}, -{19,-19,25}, -{19,-19,26}, -{19,-18,-1}, -{19,-18,0}, -{19,-18,1}, -{19,-18,2}, -{19,-18,3}, -{19,-18,4}, -{19,-18,5}, -{19,-18,6}, -{19,-18,7}, -{19,-18,8}, -{19,-18,9}, -{19,-18,10}, -{19,-18,11}, -{19,-18,12}, -{19,-18,13}, -{19,-18,14}, -{19,-18,15}, -{19,-18,16}, -{19,-18,17}, -{19,-18,18}, -{19,-18,19}, -{19,-18,20}, -{19,-18,21}, -{19,-18,22}, -{19,-18,23}, -{19,-18,24}, -{19,-18,25}, -{19,-18,26}, -{19,-17,-2}, -{19,-17,-1}, -{19,-17,0}, -{19,-17,1}, -{19,-17,2}, -{19,-17,3}, -{19,-17,4}, -{19,-17,5}, -{19,-17,6}, -{19,-17,7}, -{19,-17,8}, -{19,-17,9}, -{19,-17,10}, -{19,-17,11}, -{19,-17,12}, -{19,-17,13}, -{19,-17,14}, -{19,-17,15}, -{19,-17,16}, -{19,-17,17}, -{19,-17,18}, -{19,-17,19}, -{19,-17,20}, -{19,-17,21}, -{19,-17,22}, -{19,-17,23}, -{19,-17,24}, -{19,-17,25}, -{19,-17,26}, -{19,-16,-4}, -{19,-16,-3}, -{19,-16,-2}, -{19,-16,-1}, -{19,-16,0}, -{19,-16,1}, -{19,-16,2}, -{19,-16,3}, -{19,-16,4}, -{19,-16,5}, -{19,-16,6}, -{19,-16,7}, -{19,-16,8}, -{19,-16,9}, -{19,-16,10}, -{19,-16,11}, -{19,-16,12}, -{19,-16,13}, -{19,-16,14}, -{19,-16,15}, -{19,-16,16}, -{19,-16,17}, -{19,-16,18}, -{19,-16,19}, -{19,-16,20}, -{19,-16,21}, -{19,-16,22}, -{19,-16,23}, -{19,-16,24}, -{19,-16,25}, -{19,-16,26}, -{19,-15,-5}, -{19,-15,-4}, -{19,-15,-3}, -{19,-15,-2}, -{19,-15,-1}, -{19,-15,0}, -{19,-15,1}, -{19,-15,2}, -{19,-15,3}, -{19,-15,4}, -{19,-15,5}, -{19,-15,6}, -{19,-15,7}, -{19,-15,8}, -{19,-15,9}, -{19,-15,10}, -{19,-15,11}, -{19,-15,12}, -{19,-15,13}, -{19,-15,14}, -{19,-15,15}, -{19,-15,16}, -{19,-15,17}, -{19,-15,18}, -{19,-15,19}, -{19,-15,20}, -{19,-15,21}, -{19,-15,22}, -{19,-15,23}, -{19,-15,24}, -{19,-15,25}, -{19,-15,26}, -{19,-14,-7}, -{19,-14,-6}, -{19,-14,-5}, -{19,-14,-4}, -{19,-14,-3}, -{19,-14,-2}, -{19,-14,-1}, -{19,-14,0}, -{19,-14,1}, -{19,-14,2}, -{19,-14,3}, -{19,-14,4}, -{19,-14,5}, -{19,-14,6}, -{19,-14,7}, -{19,-14,8}, -{19,-14,9}, -{19,-14,10}, -{19,-14,11}, -{19,-14,12}, -{19,-14,13}, -{19,-14,14}, -{19,-14,15}, -{19,-14,16}, -{19,-14,17}, -{19,-14,18}, -{19,-14,19}, -{19,-14,20}, -{19,-14,21}, -{19,-14,22}, -{19,-14,23}, -{19,-14,24}, -{19,-14,25}, -{19,-14,26}, -{19,-13,-8}, -{19,-13,-7}, -{19,-13,-6}, -{19,-13,-5}, -{19,-13,-4}, -{19,-13,-3}, -{19,-13,-2}, -{19,-13,-1}, -{19,-13,0}, -{19,-13,1}, -{19,-13,2}, -{19,-13,3}, -{19,-13,4}, -{19,-13,5}, -{19,-13,6}, -{19,-13,7}, -{19,-13,8}, -{19,-13,9}, -{19,-13,10}, -{19,-13,11}, -{19,-13,12}, -{19,-13,13}, -{19,-13,14}, -{19,-13,15}, -{19,-13,16}, -{19,-13,17}, -{19,-13,18}, -{19,-13,19}, -{19,-13,20}, -{19,-13,21}, -{19,-13,22}, -{19,-13,23}, -{19,-13,24}, -{19,-13,25}, -{19,-13,26}, -{19,-12,-10}, -{19,-12,-9}, -{19,-12,-8}, -{19,-12,-7}, -{19,-12,-6}, -{19,-12,-5}, -{19,-12,-4}, -{19,-12,-3}, -{19,-12,-2}, -{19,-12,-1}, -{19,-12,0}, -{19,-12,1}, -{19,-12,2}, -{19,-12,3}, -{19,-12,4}, -{19,-12,5}, -{19,-12,6}, -{19,-12,7}, -{19,-12,8}, -{19,-12,9}, -{19,-12,10}, -{19,-12,11}, -{19,-12,12}, -{19,-12,13}, -{19,-12,14}, -{19,-12,15}, -{19,-12,16}, -{19,-12,17}, -{19,-12,18}, -{19,-12,19}, -{19,-12,20}, -{19,-12,21}, -{19,-12,22}, -{19,-12,23}, -{19,-12,24}, -{19,-12,25}, -{19,-12,26}, -{19,-11,-11}, -{19,-11,-10}, -{19,-11,-9}, -{19,-11,-8}, -{19,-11,-7}, -{19,-11,-6}, -{19,-11,-5}, -{19,-11,-4}, -{19,-11,-3}, -{19,-11,-2}, -{19,-11,-1}, -{19,-11,0}, -{19,-11,1}, -{19,-11,2}, -{19,-11,3}, -{19,-11,4}, -{19,-11,5}, -{19,-11,6}, -{19,-11,7}, -{19,-11,8}, -{19,-11,9}, -{19,-11,10}, -{19,-11,11}, -{19,-11,12}, -{19,-11,13}, -{19,-11,14}, -{19,-11,15}, -{19,-11,16}, -{19,-11,17}, -{19,-11,18}, -{19,-11,19}, -{19,-11,20}, -{19,-11,21}, -{19,-11,22}, -{19,-11,23}, -{19,-11,24}, -{19,-11,25}, -{19,-11,26}, -{19,-10,-13}, -{19,-10,-12}, -{19,-10,-11}, -{19,-10,-10}, -{19,-10,-9}, -{19,-10,-8}, -{19,-10,-7}, -{19,-10,-6}, -{19,-10,-5}, -{19,-10,-4}, -{19,-10,-3}, -{19,-10,-2}, -{19,-10,-1}, -{19,-10,0}, -{19,-10,1}, -{19,-10,2}, -{19,-10,3}, -{19,-10,4}, -{19,-10,5}, -{19,-10,6}, -{19,-10,7}, -{19,-10,8}, -{19,-10,9}, -{19,-10,10}, -{19,-10,11}, -{19,-10,12}, -{19,-10,13}, -{19,-10,14}, -{19,-10,15}, -{19,-10,16}, -{19,-10,17}, -{19,-10,18}, -{19,-10,19}, -{19,-10,20}, -{19,-10,21}, -{19,-10,22}, -{19,-10,23}, -{19,-10,24}, -{19,-10,25}, -{19,-10,26}, -{19,-9,-14}, -{19,-9,-13}, -{19,-9,-12}, -{19,-9,-11}, -{19,-9,-10}, -{19,-9,-9}, -{19,-9,-8}, -{19,-9,-7}, -{19,-9,-6}, -{19,-9,-5}, -{19,-9,-4}, -{19,-9,-3}, -{19,-9,-2}, -{19,-9,-1}, -{19,-9,0}, -{19,-9,1}, -{19,-9,2}, -{19,-9,3}, -{19,-9,4}, -{19,-9,5}, -{19,-9,6}, -{19,-9,7}, -{19,-9,8}, -{19,-9,9}, -{19,-9,10}, -{19,-9,11}, -{19,-9,12}, -{19,-9,13}, -{19,-9,14}, -{19,-9,15}, -{19,-9,16}, -{19,-9,17}, -{19,-9,18}, -{19,-9,19}, -{19,-9,20}, -{19,-9,21}, -{19,-9,22}, -{19,-9,23}, -{19,-9,24}, -{19,-9,25}, -{19,-9,26}, -{19,-8,-15}, -{19,-8,-14}, -{19,-8,-13}, -{19,-8,-12}, -{19,-8,-11}, -{19,-8,-10}, -{19,-8,-9}, -{19,-8,-8}, -{19,-8,-7}, -{19,-8,-6}, -{19,-8,-5}, -{19,-8,-4}, -{19,-8,-3}, -{19,-8,-2}, -{19,-8,-1}, -{19,-8,0}, -{19,-8,1}, -{19,-8,2}, -{19,-8,3}, -{19,-8,4}, -{19,-8,5}, -{19,-8,6}, -{19,-8,7}, -{19,-8,8}, -{19,-8,9}, -{19,-8,10}, -{19,-8,11}, -{19,-8,12}, -{19,-8,13}, -{19,-8,14}, -{19,-8,15}, -{19,-8,16}, -{19,-8,17}, -{19,-8,18}, -{19,-8,19}, -{19,-8,20}, -{19,-8,21}, -{19,-8,22}, -{19,-8,23}, -{19,-8,24}, -{19,-8,25}, -{19,-8,26}, -{19,-8,27}, -{19,-7,-17}, -{19,-7,-16}, -{19,-7,-15}, -{19,-7,-14}, -{19,-7,-13}, -{19,-7,-12}, -{19,-7,-11}, -{19,-7,-10}, -{19,-7,-9}, -{19,-7,-8}, -{19,-7,-7}, -{19,-7,-6}, -{19,-7,-5}, -{19,-7,-4}, -{19,-7,-3}, -{19,-7,-2}, -{19,-7,-1}, -{19,-7,0}, -{19,-7,1}, -{19,-7,2}, -{19,-7,3}, -{19,-7,4}, -{19,-7,5}, -{19,-7,6}, -{19,-7,7}, -{19,-7,8}, -{19,-7,9}, -{19,-7,10}, -{19,-7,11}, -{19,-7,12}, -{19,-7,13}, -{19,-7,14}, -{19,-7,15}, -{19,-7,16}, -{19,-7,17}, -{19,-7,18}, -{19,-7,19}, -{19,-7,20}, -{19,-7,21}, -{19,-7,22}, -{19,-7,23}, -{19,-7,24}, -{19,-7,25}, -{19,-7,26}, -{19,-7,27}, -{19,-6,-18}, -{19,-6,-17}, -{19,-6,-16}, -{19,-6,-15}, -{19,-6,-14}, -{19,-6,-13}, -{19,-6,-12}, -{19,-6,-11}, -{19,-6,-10}, -{19,-6,-9}, -{19,-6,-8}, -{19,-6,-7}, -{19,-6,-6}, -{19,-6,-5}, -{19,-6,-4}, -{19,-6,-3}, -{19,-6,-2}, -{19,-6,-1}, -{19,-6,0}, -{19,-6,1}, -{19,-6,2}, -{19,-6,3}, -{19,-6,4}, -{19,-6,5}, -{19,-6,6}, -{19,-6,7}, -{19,-6,8}, -{19,-6,9}, -{19,-6,10}, -{19,-6,11}, -{19,-6,12}, -{19,-6,13}, -{19,-6,14}, -{19,-6,15}, -{19,-6,16}, -{19,-6,17}, -{19,-6,18}, -{19,-6,19}, -{19,-6,20}, -{19,-6,21}, -{19,-6,22}, -{19,-6,23}, -{19,-6,24}, -{19,-6,25}, -{19,-6,26}, -{19,-6,27}, -{19,-5,-19}, -{19,-5,-18}, -{19,-5,-17}, -{19,-5,-16}, -{19,-5,-15}, -{19,-5,-14}, -{19,-5,-13}, -{19,-5,-12}, -{19,-5,-11}, -{19,-5,-10}, -{19,-5,-9}, -{19,-5,-8}, -{19,-5,-7}, -{19,-5,-6}, -{19,-5,-5}, -{19,-5,-4}, -{19,-5,-3}, -{19,-5,-2}, -{19,-5,-1}, -{19,-5,0}, -{19,-5,1}, -{19,-5,2}, -{19,-5,3}, -{19,-5,4}, -{19,-5,5}, -{19,-5,6}, -{19,-5,7}, -{19,-5,8}, -{19,-5,9}, -{19,-5,10}, -{19,-5,11}, -{19,-5,12}, -{19,-5,13}, -{19,-5,14}, -{19,-5,15}, -{19,-5,16}, -{19,-5,17}, -{19,-5,18}, -{19,-5,19}, -{19,-5,20}, -{19,-5,21}, -{19,-5,22}, -{19,-5,23}, -{19,-5,24}, -{19,-5,25}, -{19,-5,26}, -{19,-5,27}, -{19,-4,-20}, -{19,-4,-19}, -{19,-4,-18}, -{19,-4,-17}, -{19,-4,-16}, -{19,-4,-15}, -{19,-4,-14}, -{19,-4,-13}, -{19,-4,-12}, -{19,-4,-11}, -{19,-4,-10}, -{19,-4,-9}, -{19,-4,-8}, -{19,-4,-7}, -{19,-4,-6}, -{19,-4,-5}, -{19,-4,-4}, -{19,-4,-3}, -{19,-4,-2}, -{19,-4,-1}, -{19,-4,0}, -{19,-4,1}, -{19,-4,2}, -{19,-4,3}, -{19,-4,4}, -{19,-4,5}, -{19,-4,6}, -{19,-4,7}, -{19,-4,8}, -{19,-4,9}, -{19,-4,10}, -{19,-4,11}, -{19,-4,12}, -{19,-4,13}, -{19,-4,14}, -{19,-4,15}, -{19,-4,16}, -{19,-4,17}, -{19,-4,18}, -{19,-4,19}, -{19,-4,20}, -{19,-4,21}, -{19,-4,22}, -{19,-4,23}, -{19,-4,24}, -{19,-4,25}, -{19,-4,26}, -{19,-4,27}, -{19,-3,-21}, -{19,-3,-20}, -{19,-3,-19}, -{19,-3,-18}, -{19,-3,-17}, -{19,-3,-16}, -{19,-3,-15}, -{19,-3,-14}, -{19,-3,-13}, -{19,-3,-12}, -{19,-3,-11}, -{19,-3,-10}, -{19,-3,-9}, -{19,-3,-8}, -{19,-3,-7}, -{19,-3,-6}, -{19,-3,-5}, -{19,-3,-4}, -{19,-3,-3}, -{19,-3,-2}, -{19,-3,-1}, -{19,-3,0}, -{19,-3,1}, -{19,-3,2}, -{19,-3,3}, -{19,-3,4}, -{19,-3,5}, -{19,-3,6}, -{19,-3,7}, -{19,-3,8}, -{19,-3,9}, -{19,-3,10}, -{19,-3,11}, -{19,-3,12}, -{19,-3,13}, -{19,-3,14}, -{19,-3,15}, -{19,-3,16}, -{19,-3,17}, -{19,-3,18}, -{19,-3,19}, -{19,-3,20}, -{19,-3,21}, -{19,-3,22}, -{19,-3,23}, -{19,-3,24}, -{19,-3,25}, -{19,-3,26}, -{19,-3,27}, -{19,-2,-23}, -{19,-2,-22}, -{19,-2,-21}, -{19,-2,-20}, -{19,-2,-19}, -{19,-2,-18}, -{19,-2,-17}, -{19,-2,-16}, -{19,-2,-15}, -{19,-2,-14}, -{19,-2,-13}, -{19,-2,-12}, -{19,-2,-11}, -{19,-2,-10}, -{19,-2,-9}, -{19,-2,-8}, -{19,-2,-7}, -{19,-2,-6}, -{19,-2,-5}, -{19,-2,-4}, -{19,-2,-3}, -{19,-2,-2}, -{19,-2,-1}, -{19,-2,0}, -{19,-2,1}, -{19,-2,2}, -{19,-2,3}, -{19,-2,4}, -{19,-2,5}, -{19,-2,6}, -{19,-2,7}, -{19,-2,8}, -{19,-2,9}, -{19,-2,10}, -{19,-2,11}, -{19,-2,12}, -{19,-2,13}, -{19,-2,14}, -{19,-2,15}, -{19,-2,16}, -{19,-2,17}, -{19,-2,18}, -{19,-2,19}, -{19,-2,20}, -{19,-2,21}, -{19,-2,22}, -{19,-2,23}, -{19,-2,24}, -{19,-2,25}, -{19,-2,26}, -{19,-2,27}, -{19,-1,-24}, -{19,-1,-23}, -{19,-1,-22}, -{19,-1,-21}, -{19,-1,-20}, -{19,-1,-19}, -{19,-1,-18}, -{19,-1,-17}, -{19,-1,-16}, -{19,-1,-15}, -{19,-1,-14}, -{19,-1,-13}, -{19,-1,-12}, -{19,-1,-11}, -{19,-1,-10}, -{19,-1,-9}, -{19,-1,-8}, -{19,-1,-7}, -{19,-1,-6}, -{19,-1,-5}, -{19,-1,-4}, -{19,-1,-3}, -{19,-1,-2}, -{19,-1,-1}, -{19,-1,0}, -{19,-1,1}, -{19,-1,2}, -{19,-1,3}, -{19,-1,4}, -{19,-1,5}, -{19,-1,6}, -{19,-1,7}, -{19,-1,8}, -{19,-1,9}, -{19,-1,10}, -{19,-1,11}, -{19,-1,12}, -{19,-1,13}, -{19,-1,14}, -{19,-1,15}, -{19,-1,16}, -{19,-1,17}, -{19,-1,18}, -{19,-1,19}, -{19,-1,20}, -{19,-1,21}, -{19,-1,22}, -{19,-1,23}, -{19,-1,24}, -{19,-1,25}, -{19,-1,26}, -{19,-1,27}, -{19,0,-25}, -{19,0,-24}, -{19,0,-23}, -{19,0,-22}, -{19,0,-21}, -{19,0,-20}, -{19,0,-19}, -{19,0,-18}, -{19,0,-17}, -{19,0,-16}, -{19,0,-15}, -{19,0,-14}, -{19,0,-13}, -{19,0,-12}, -{19,0,-11}, -{19,0,-10}, -{19,0,-9}, -{19,0,-8}, -{19,0,-7}, -{19,0,-6}, -{19,0,-5}, -{19,0,-4}, -{19,0,-3}, -{19,0,-2}, -{19,0,-1}, -{19,0,0}, -{19,0,1}, -{19,0,2}, -{19,0,3}, -{19,0,4}, -{19,0,5}, -{19,0,6}, -{19,0,7}, -{19,0,8}, -{19,0,9}, -{19,0,10}, -{19,0,11}, -{19,0,12}, -{19,0,13}, -{19,0,14}, -{19,0,15}, -{19,0,16}, -{19,0,17}, -{19,0,18}, -{19,0,19}, -{19,0,20}, -{19,0,21}, -{19,0,22}, -{19,0,23}, -{19,0,24}, -{19,0,25}, -{19,0,26}, -{19,0,27}, -{19,1,-26}, -{19,1,-25}, -{19,1,-24}, -{19,1,-23}, -{19,1,-22}, -{19,1,-21}, -{19,1,-20}, -{19,1,-19}, -{19,1,-18}, -{19,1,-17}, -{19,1,-16}, -{19,1,-15}, -{19,1,-14}, -{19,1,-13}, -{19,1,-12}, -{19,1,-11}, -{19,1,-10}, -{19,1,-9}, -{19,1,-8}, -{19,1,-7}, -{19,1,-6}, -{19,1,-5}, -{19,1,-4}, -{19,1,-3}, -{19,1,-2}, -{19,1,-1}, -{19,1,0}, -{19,1,1}, -{19,1,2}, -{19,1,3}, -{19,1,4}, -{19,1,5}, -{19,1,6}, -{19,1,7}, -{19,1,8}, -{19,1,9}, -{19,1,10}, -{19,1,11}, -{19,1,12}, -{19,1,13}, -{19,1,14}, -{19,1,15}, -{19,1,16}, -{19,1,17}, -{19,1,18}, -{19,1,19}, -{19,1,20}, -{19,1,21}, -{19,1,22}, -{19,1,23}, -{19,1,24}, -{19,1,25}, -{19,1,26}, -{19,1,27}, -{19,2,-27}, -{19,2,-26}, -{19,2,-25}, -{19,2,-24}, -{19,2,-23}, -{19,2,-22}, -{19,2,-21}, -{19,2,-20}, -{19,2,-19}, -{19,2,-18}, -{19,2,-17}, -{19,2,-16}, -{19,2,-15}, -{19,2,-14}, -{19,2,-13}, -{19,2,-12}, -{19,2,-11}, -{19,2,-10}, -{19,2,-9}, -{19,2,-8}, -{19,2,-7}, -{19,2,-6}, -{19,2,-5}, -{19,2,-4}, -{19,2,-3}, -{19,2,-2}, -{19,2,-1}, -{19,2,0}, -{19,2,1}, -{19,2,2}, -{19,2,3}, -{19,2,4}, -{19,2,5}, -{19,2,6}, -{19,2,7}, -{19,2,8}, -{19,2,9}, -{19,2,10}, -{19,2,11}, -{19,2,12}, -{19,2,13}, -{19,2,14}, -{19,2,15}, -{19,2,16}, -{19,2,17}, -{19,2,18}, -{19,2,19}, -{19,2,20}, -{19,2,21}, -{19,2,22}, -{19,2,23}, -{19,2,24}, -{19,2,25}, -{19,2,26}, -{19,2,27}, -{19,3,-28}, -{19,3,-27}, -{19,3,-26}, -{19,3,-25}, -{19,3,-24}, -{19,3,-23}, -{19,3,-22}, -{19,3,-21}, -{19,3,-20}, -{19,3,-19}, -{19,3,-18}, -{19,3,-17}, -{19,3,-16}, -{19,3,-15}, -{19,3,-14}, -{19,3,-13}, -{19,3,-12}, -{19,3,-11}, -{19,3,-10}, -{19,3,-9}, -{19,3,-8}, -{19,3,-7}, -{19,3,-6}, -{19,3,-5}, -{19,3,-4}, -{19,3,-3}, -{19,3,-2}, -{19,3,-1}, -{19,3,0}, -{19,3,1}, -{19,3,2}, -{19,3,3}, -{19,3,4}, -{19,3,5}, -{19,3,6}, -{19,3,7}, -{19,3,8}, -{19,3,9}, -{19,3,10}, -{19,3,11}, -{19,3,12}, -{19,3,13}, -{19,3,14}, -{19,3,15}, -{19,3,16}, -{19,3,17}, -{19,3,18}, -{19,3,19}, -{19,3,20}, -{19,3,21}, -{19,3,22}, -{19,3,23}, -{19,3,24}, -{19,3,25}, -{19,3,26}, -{19,3,27}, -{19,4,-29}, -{19,4,-28}, -{19,4,-27}, -{19,4,-26}, -{19,4,-25}, -{19,4,-24}, -{19,4,-23}, -{19,4,-22}, -{19,4,-21}, -{19,4,-20}, -{19,4,-19}, -{19,4,-18}, -{19,4,-17}, -{19,4,-16}, -{19,4,-15}, -{19,4,-14}, -{19,4,-13}, -{19,4,-12}, -{19,4,-11}, -{19,4,-10}, -{19,4,-9}, -{19,4,-8}, -{19,4,-7}, -{19,4,-6}, -{19,4,-5}, -{19,4,-4}, -{19,4,-3}, -{19,4,-2}, -{19,4,-1}, -{19,4,0}, -{19,4,1}, -{19,4,2}, -{19,4,3}, -{19,4,4}, -{19,4,5}, -{19,4,6}, -{19,4,7}, -{19,4,8}, -{19,4,9}, -{19,4,10}, -{19,4,11}, -{19,4,12}, -{19,4,13}, -{19,4,14}, -{19,4,15}, -{19,4,16}, -{19,4,17}, -{19,4,18}, -{19,4,19}, -{19,4,20}, -{19,4,21}, -{19,4,22}, -{19,4,23}, -{19,4,24}, -{19,4,25}, -{19,4,26}, -{19,4,27}, -{19,5,-30}, -{19,5,-29}, -{19,5,-28}, -{19,5,-27}, -{19,5,-26}, -{19,5,-25}, -{19,5,-24}, -{19,5,-23}, -{19,5,-22}, -{19,5,-21}, -{19,5,-20}, -{19,5,-19}, -{19,5,-18}, -{19,5,-17}, -{19,5,-16}, -{19,5,-15}, -{19,5,-14}, -{19,5,-13}, -{19,5,-12}, -{19,5,-11}, -{19,5,-10}, -{19,5,-9}, -{19,5,-8}, -{19,5,-7}, -{19,5,-6}, -{19,5,-5}, -{19,5,-4}, -{19,5,-3}, -{19,5,-2}, -{19,5,-1}, -{19,5,0}, -{19,5,1}, -{19,5,2}, -{19,5,3}, -{19,5,4}, -{19,5,5}, -{19,5,6}, -{19,5,7}, -{19,5,8}, -{19,5,9}, -{19,5,10}, -{19,5,11}, -{19,5,12}, -{19,5,13}, -{19,5,14}, -{19,5,15}, -{19,5,16}, -{19,5,17}, -{19,5,18}, -{19,5,19}, -{19,5,20}, -{19,5,21}, -{19,5,22}, -{19,5,23}, -{19,5,24}, -{19,5,25}, -{19,5,26}, -{19,5,27}, -{19,6,-31}, -{19,6,-30}, -{19,6,-29}, -{19,6,-28}, -{19,6,-27}, -{19,6,-26}, -{19,6,-25}, -{19,6,-24}, -{19,6,-23}, -{19,6,-22}, -{19,6,-21}, -{19,6,-20}, -{19,6,-19}, -{19,6,-18}, -{19,6,-17}, -{19,6,-16}, -{19,6,-15}, -{19,6,-14}, -{19,6,-13}, -{19,6,-12}, -{19,6,-11}, -{19,6,-10}, -{19,6,-9}, -{19,6,-8}, -{19,6,-7}, -{19,6,-6}, -{19,6,-5}, -{19,6,-4}, -{19,6,-3}, -{19,6,-2}, -{19,6,-1}, -{19,6,0}, -{19,6,1}, -{19,6,2}, -{19,6,3}, -{19,6,4}, -{19,6,5}, -{19,6,6}, -{19,6,7}, -{19,6,8}, -{19,6,9}, -{19,6,10}, -{19,6,11}, -{19,6,12}, -{19,6,13}, -{19,6,14}, -{19,6,15}, -{19,6,16}, -{19,6,17}, -{19,6,18}, -{19,6,19}, -{19,6,20}, -{19,6,21}, -{19,6,22}, -{19,6,23}, -{19,6,24}, -{19,6,25}, -{19,6,26}, -{19,6,27}, -{19,7,-32}, -{19,7,-31}, -{19,7,-30}, -{19,7,-29}, -{19,7,-28}, -{19,7,-27}, -{19,7,-26}, -{19,7,-25}, -{19,7,-24}, -{19,7,-23}, -{19,7,-22}, -{19,7,-21}, -{19,7,-20}, -{19,7,-19}, -{19,7,-18}, -{19,7,-17}, -{19,7,-16}, -{19,7,-15}, -{19,7,-14}, -{19,7,-13}, -{19,7,-12}, -{19,7,-11}, -{19,7,-10}, -{19,7,-9}, -{19,7,-8}, -{19,7,-7}, -{19,7,-6}, -{19,7,-5}, -{19,7,-4}, -{19,7,-3}, -{19,7,-2}, -{19,7,-1}, -{19,7,0}, -{19,7,1}, -{19,7,2}, -{19,7,3}, -{19,7,4}, -{19,7,5}, -{19,7,6}, -{19,7,7}, -{19,7,8}, -{19,7,9}, -{19,7,10}, -{19,7,11}, -{19,7,12}, -{19,7,13}, -{19,7,14}, -{19,7,15}, -{19,7,16}, -{19,7,17}, -{19,7,18}, -{19,7,19}, -{19,7,20}, -{19,7,21}, -{19,7,22}, -{19,7,23}, -{19,7,24}, -{19,7,25}, -{19,7,26}, -{19,7,27}, -{19,8,-33}, -{19,8,-32}, -{19,8,-31}, -{19,8,-30}, -{19,8,-29}, -{19,8,-28}, -{19,8,-27}, -{19,8,-26}, -{19,8,-25}, -{19,8,-24}, -{19,8,-23}, -{19,8,-22}, -{19,8,-21}, -{19,8,-20}, -{19,8,-19}, -{19,8,-18}, -{19,8,-17}, -{19,8,-16}, -{19,8,-15}, -{19,8,-14}, -{19,8,-13}, -{19,8,-12}, -{19,8,-11}, -{19,8,-10}, -{19,8,-9}, -{19,8,-8}, -{19,8,-7}, -{19,8,-6}, -{19,8,-5}, -{19,8,-4}, -{19,8,-3}, -{19,8,-2}, -{19,8,-1}, -{19,8,0}, -{19,8,1}, -{19,8,2}, -{19,8,3}, -{19,8,4}, -{19,8,5}, -{19,8,6}, -{19,8,7}, -{19,8,8}, -{19,8,9}, -{19,8,10}, -{19,8,11}, -{19,8,12}, -{19,8,13}, -{19,8,14}, -{19,8,15}, -{19,8,16}, -{19,8,17}, -{19,8,18}, -{19,8,19}, -{19,8,20}, -{19,8,21}, -{19,8,22}, -{19,8,23}, -{19,8,24}, -{19,8,25}, -{19,8,26}, -{19,8,27}, -{19,9,-34}, -{19,9,-33}, -{19,9,-32}, -{19,9,-31}, -{19,9,-30}, -{19,9,-29}, -{19,9,-28}, -{19,9,-27}, -{19,9,-26}, -{19,9,-25}, -{19,9,-24}, -{19,9,-23}, -{19,9,-22}, -{19,9,-21}, -{19,9,-20}, -{19,9,-19}, -{19,9,-18}, -{19,9,-17}, -{19,9,-16}, -{19,9,-15}, -{19,9,-14}, -{19,9,-13}, -{19,9,-12}, -{19,9,-11}, -{19,9,-10}, -{19,9,-9}, -{19,9,-8}, -{19,9,-7}, -{19,9,-6}, -{19,9,-5}, -{19,9,-4}, -{19,9,-3}, -{19,9,-2}, -{19,9,-1}, -{19,9,0}, -{19,9,1}, -{19,9,2}, -{19,9,3}, -{19,9,4}, -{19,9,5}, -{19,9,6}, -{19,9,7}, -{19,9,8}, -{19,9,9}, -{19,9,10}, -{19,9,11}, -{19,9,12}, -{19,9,13}, -{19,9,14}, -{19,9,15}, -{19,9,16}, -{19,9,17}, -{19,9,18}, -{19,9,19}, -{19,9,20}, -{19,9,21}, -{19,9,22}, -{19,9,23}, -{19,9,24}, -{19,9,25}, -{19,9,26}, -{19,9,27}, -{19,10,-36}, -{19,10,-35}, -{19,10,-34}, -{19,10,-33}, -{19,10,-32}, -{19,10,-31}, -{19,10,-30}, -{19,10,-29}, -{19,10,-28}, -{19,10,-27}, -{19,10,-26}, -{19,10,-25}, -{19,10,-24}, -{19,10,-23}, -{19,10,-22}, -{19,10,-21}, -{19,10,-20}, -{19,10,-19}, -{19,10,-18}, -{19,10,-17}, -{19,10,-16}, -{19,10,-15}, -{19,10,-14}, -{19,10,-13}, -{19,10,-12}, -{19,10,-11}, -{19,10,-10}, -{19,10,-9}, -{19,10,-8}, -{19,10,-7}, -{19,10,-6}, -{19,10,-5}, -{19,10,-4}, -{19,10,-3}, -{19,10,-2}, -{19,10,-1}, -{19,10,0}, -{19,10,1}, -{19,10,2}, -{19,10,3}, -{19,10,4}, -{19,10,5}, -{19,10,6}, -{19,10,7}, -{19,10,8}, -{19,10,9}, -{19,10,10}, -{19,10,11}, -{19,10,12}, -{19,10,13}, -{19,10,14}, -{19,10,15}, -{19,10,16}, -{19,10,17}, -{19,10,18}, -{19,10,19}, -{19,10,20}, -{19,10,21}, -{19,10,22}, -{19,10,23}, -{19,10,24}, -{19,10,25}, -{19,10,26}, -{19,10,27}, -{19,11,-37}, -{19,11,-36}, -{19,11,-35}, -{19,11,-34}, -{19,11,-33}, -{19,11,-32}, -{19,11,-31}, -{19,11,-30}, -{19,11,-29}, -{19,11,-28}, -{19,11,-27}, -{19,11,-26}, -{19,11,-25}, -{19,11,-24}, -{19,11,-23}, -{19,11,-22}, -{19,11,-21}, -{19,11,-20}, -{19,11,-19}, -{19,11,-18}, -{19,11,-17}, -{19,11,-16}, -{19,11,-15}, -{19,11,-14}, -{19,11,-13}, -{19,11,-12}, -{19,11,-11}, -{19,11,-10}, -{19,11,-9}, -{19,11,-8}, -{19,11,-7}, -{19,11,-6}, -{19,11,-5}, -{19,11,-4}, -{19,11,-3}, -{19,11,-2}, -{19,11,-1}, -{19,11,0}, -{19,11,1}, -{19,11,2}, -{19,11,3}, -{19,11,4}, -{19,11,5}, -{19,11,6}, -{19,11,7}, -{19,11,8}, -{19,11,9}, -{19,11,10}, -{19,11,11}, -{19,11,12}, -{19,11,13}, -{19,11,14}, -{19,11,15}, -{19,11,16}, -{19,11,17}, -{19,11,18}, -{19,11,19}, -{19,11,20}, -{19,11,21}, -{19,11,22}, -{19,11,23}, -{19,11,24}, -{19,11,25}, -{19,11,26}, -{19,11,27}, -{19,12,-38}, -{19,12,-37}, -{19,12,-36}, -{19,12,-35}, -{19,12,-34}, -{19,12,-33}, -{19,12,-32}, -{19,12,-31}, -{19,12,-30}, -{19,12,-29}, -{19,12,-28}, -{19,12,-27}, -{19,12,-26}, -{19,12,-25}, -{19,12,-24}, -{19,12,-23}, -{19,12,-22}, -{19,12,-21}, -{19,12,-20}, -{19,12,-19}, -{19,12,-18}, -{19,12,-17}, -{19,12,-16}, -{19,12,-15}, -{19,12,-14}, -{19,12,-13}, -{19,12,-12}, -{19,12,-11}, -{19,12,-10}, -{19,12,-9}, -{19,12,-8}, -{19,12,-7}, -{19,12,-6}, -{19,12,-5}, -{19,12,-4}, -{19,12,-3}, -{19,12,-2}, -{19,12,-1}, -{19,12,0}, -{19,12,1}, -{19,12,2}, -{19,12,3}, -{19,12,4}, -{19,12,5}, -{19,12,6}, -{19,12,7}, -{19,12,8}, -{19,12,9}, -{19,12,10}, -{19,12,11}, -{19,12,12}, -{19,12,13}, -{19,12,14}, -{19,12,15}, -{19,12,16}, -{19,12,17}, -{19,12,18}, -{19,12,19}, -{19,12,20}, -{19,12,21}, -{19,12,22}, -{19,12,23}, -{19,12,24}, -{19,12,25}, -{19,12,26}, -{19,12,27}, -{19,13,-39}, -{19,13,-38}, -{19,13,-37}, -{19,13,-36}, -{19,13,-35}, -{19,13,-34}, -{19,13,-33}, -{19,13,-32}, -{19,13,-31}, -{19,13,-30}, -{19,13,-29}, -{19,13,-28}, -{19,13,-27}, -{19,13,-26}, -{19,13,-25}, -{19,13,-24}, -{19,13,-23}, -{19,13,-22}, -{19,13,-21}, -{19,13,-20}, -{19,13,-19}, -{19,13,-18}, -{19,13,-17}, -{19,13,-16}, -{19,13,-15}, -{19,13,-14}, -{19,13,-13}, -{19,13,-12}, -{19,13,-11}, -{19,13,-10}, -{19,13,-9}, -{19,13,-8}, -{19,13,-7}, -{19,13,-6}, -{19,13,-5}, -{19,13,-4}, -{19,13,-3}, -{19,13,-2}, -{19,13,-1}, -{19,13,0}, -{19,13,1}, -{19,13,2}, -{19,13,3}, -{19,13,4}, -{19,13,5}, -{19,13,6}, -{19,13,7}, -{19,13,8}, -{19,13,9}, -{19,13,10}, -{19,13,11}, -{19,13,12}, -{19,13,13}, -{19,13,14}, -{19,13,15}, -{19,13,16}, -{19,13,17}, -{19,13,18}, -{19,13,19}, -{19,13,20}, -{19,13,21}, -{19,13,22}, -{19,13,23}, -{19,13,24}, -{19,13,25}, -{19,13,26}, -{19,13,27}, -{19,14,-40}, -{19,14,-39}, -{19,14,-38}, -{19,14,-37}, -{19,14,-36}, -{19,14,-35}, -{19,14,-34}, -{19,14,-33}, -{19,14,-32}, -{19,14,-31}, -{19,14,-30}, -{19,14,-29}, -{19,14,-28}, -{19,14,-27}, -{19,14,-26}, -{19,14,-25}, -{19,14,-24}, -{19,14,-23}, -{19,14,-22}, -{19,14,-21}, -{19,14,-20}, -{19,14,-19}, -{19,14,-18}, -{19,14,-17}, -{19,14,-16}, -{19,14,-15}, -{19,14,-14}, -{19,14,-13}, -{19,14,-12}, -{19,14,-11}, -{19,14,-10}, -{19,14,-9}, -{19,14,-8}, -{19,14,-7}, -{19,14,-6}, -{19,14,-5}, -{19,14,-4}, -{19,14,-3}, -{19,14,-2}, -{19,14,-1}, -{19,14,0}, -{19,14,1}, -{19,14,2}, -{19,14,3}, -{19,14,4}, -{19,14,5}, -{19,14,6}, -{19,14,7}, -{19,14,8}, -{19,14,9}, -{19,14,10}, -{19,14,11}, -{19,14,12}, -{19,14,13}, -{19,14,14}, -{19,14,15}, -{19,14,16}, -{19,14,17}, -{19,14,18}, -{19,14,19}, -{19,14,20}, -{19,14,21}, -{19,14,22}, -{19,14,23}, -{19,14,24}, -{19,14,25}, -{19,14,26}, -{19,14,27}, -{19,15,-40}, -{19,15,-39}, -{19,15,-38}, -{19,15,-37}, -{19,15,-36}, -{19,15,-35}, -{19,15,-34}, -{19,15,-33}, -{19,15,-32}, -{19,15,-31}, -{19,15,-30}, -{19,15,-29}, -{19,15,-28}, -{19,15,-27}, -{19,15,-26}, -{19,15,-25}, -{19,15,-24}, -{19,15,-23}, -{19,15,-22}, -{19,15,-21}, -{19,15,-20}, -{19,15,-19}, -{19,15,-18}, -{19,15,-17}, -{19,15,-16}, -{19,15,-15}, -{19,15,-14}, -{19,15,-13}, -{19,15,-12}, -{19,15,-11}, -{19,15,-10}, -{19,15,-9}, -{19,15,-8}, -{19,15,-7}, -{19,15,-6}, -{19,15,-5}, -{19,15,-4}, -{19,15,-3}, -{19,15,-2}, -{19,15,-1}, -{19,15,0}, -{19,15,1}, -{19,15,2}, -{19,15,3}, -{19,15,4}, -{19,15,5}, -{19,15,6}, -{19,15,7}, -{19,15,8}, -{19,15,9}, -{19,15,10}, -{19,15,11}, -{19,15,12}, -{19,15,13}, -{19,15,14}, -{19,15,15}, -{19,15,16}, -{19,15,17}, -{19,15,18}, -{19,15,19}, -{19,15,20}, -{19,15,21}, -{19,15,22}, -{19,15,23}, -{19,15,24}, -{19,15,25}, -{19,15,26}, -{19,15,27}, -{19,16,-41}, -{19,16,-40}, -{19,16,-39}, -{19,16,-38}, -{19,16,-37}, -{19,16,-36}, -{19,16,-35}, -{19,16,-34}, -{19,16,-33}, -{19,16,-32}, -{19,16,-31}, -{19,16,-30}, -{19,16,-29}, -{19,16,-28}, -{19,16,-27}, -{19,16,-26}, -{19,16,-25}, -{19,16,-24}, -{19,16,-23}, -{19,16,-22}, -{19,16,-21}, -{19,16,-20}, -{19,16,-19}, -{19,16,-18}, -{19,16,-17}, -{19,16,-16}, -{19,16,-15}, -{19,16,-14}, -{19,16,-13}, -{19,16,-12}, -{19,16,-11}, -{19,16,-10}, -{19,16,-9}, -{19,16,-8}, -{19,16,-7}, -{19,16,-6}, -{19,16,-5}, -{19,16,-4}, -{19,16,-3}, -{19,16,-2}, -{19,16,-1}, -{19,16,0}, -{19,16,1}, -{19,16,2}, -{19,16,3}, -{19,16,4}, -{19,16,5}, -{19,16,6}, -{19,16,7}, -{19,16,8}, -{19,16,9}, -{19,16,10}, -{19,16,11}, -{19,16,12}, -{19,16,13}, -{19,16,14}, -{19,16,15}, -{19,16,16}, -{19,16,17}, -{19,16,18}, -{19,16,19}, -{19,16,20}, -{19,16,21}, -{19,16,22}, -{19,16,23}, -{19,16,24}, -{19,16,25}, -{19,16,26}, -{19,16,27}, -{19,16,28}, -{19,17,-42}, -{19,17,-41}, -{19,17,-40}, -{19,17,-39}, -{19,17,-38}, -{19,17,-37}, -{19,17,-36}, -{19,17,-35}, -{19,17,-34}, -{19,17,-33}, -{19,17,-32}, -{19,17,-31}, -{19,17,-30}, -{19,17,-29}, -{19,17,-28}, -{19,17,-27}, -{19,17,-26}, -{19,17,-25}, -{19,17,-24}, -{19,17,-23}, -{19,17,-22}, -{19,17,-21}, -{19,17,-20}, -{19,17,-19}, -{19,17,-18}, -{19,17,-17}, -{19,17,-16}, -{19,17,-15}, -{19,17,-14}, -{19,17,-13}, -{19,17,-12}, -{19,17,-11}, -{19,17,-10}, -{19,17,-9}, -{19,17,-8}, -{19,17,-7}, -{19,17,-6}, -{19,17,-5}, -{19,17,-4}, -{19,17,-3}, -{19,17,-2}, -{19,17,-1}, -{19,17,0}, -{19,17,1}, -{19,17,2}, -{19,17,3}, -{19,17,4}, -{19,17,5}, -{19,17,6}, -{19,17,7}, -{19,17,8}, -{19,17,9}, -{19,17,10}, -{19,17,11}, -{19,17,12}, -{19,17,13}, -{19,17,14}, -{19,17,15}, -{19,17,16}, -{19,17,17}, -{19,17,18}, -{19,17,19}, -{19,17,20}, -{19,17,21}, -{19,17,22}, -{19,17,23}, -{19,17,24}, -{19,17,25}, -{19,17,26}, -{19,17,27}, -{19,17,28}, -{19,18,-43}, -{19,18,-42}, -{19,18,-41}, -{19,18,-40}, -{19,18,-39}, -{19,18,-38}, -{19,18,-37}, -{19,18,-36}, -{19,18,-35}, -{19,18,-34}, -{19,18,-33}, -{19,18,-32}, -{19,18,-31}, -{19,18,-30}, -{19,18,-29}, -{19,18,-28}, -{19,18,-27}, -{19,18,-26}, -{19,18,-25}, -{19,18,-24}, -{19,18,-23}, -{19,18,-22}, -{19,18,-21}, -{19,18,-20}, -{19,18,-19}, -{19,18,-18}, -{19,18,-17}, -{19,18,-16}, -{19,18,-15}, -{19,18,-14}, -{19,18,-13}, -{19,18,-12}, -{19,18,-11}, -{19,18,-10}, -{19,18,-9}, -{19,18,-8}, -{19,18,-7}, -{19,18,-6}, -{19,18,-5}, -{19,18,-4}, -{19,18,-3}, -{19,18,-2}, -{19,18,-1}, -{19,18,0}, -{19,18,1}, -{19,18,2}, -{19,18,3}, -{19,18,4}, -{19,18,5}, -{19,18,6}, -{19,18,7}, -{19,18,8}, -{19,18,9}, -{19,18,10}, -{19,18,11}, -{19,18,12}, -{19,18,13}, -{19,18,14}, -{19,18,15}, -{19,18,16}, -{19,18,17}, -{19,18,18}, -{19,18,19}, -{19,18,20}, -{19,18,21}, -{19,18,22}, -{19,18,23}, -{19,18,24}, -{19,18,25}, -{19,18,26}, -{19,18,27}, -{19,18,28}, -{19,19,-44}, -{19,19,-43}, -{19,19,-42}, -{19,19,-41}, -{19,19,-40}, -{19,19,-39}, -{19,19,-38}, -{19,19,-37}, -{19,19,-36}, -{19,19,-35}, -{19,19,-34}, -{19,19,-33}, -{19,19,-32}, -{19,19,-31}, -{19,19,-30}, -{19,19,-29}, -{19,19,-28}, -{19,19,-27}, -{19,19,-26}, -{19,19,-25}, -{19,19,-24}, -{19,19,-23}, -{19,19,-22}, -{19,19,-21}, -{19,19,-20}, -{19,19,-19}, -{19,19,-18}, -{19,19,-17}, -{19,19,-16}, -{19,19,-15}, -{19,19,-14}, -{19,19,-13}, -{19,19,-12}, -{19,19,-11}, -{19,19,-10}, -{19,19,-9}, -{19,19,-8}, -{19,19,-7}, -{19,19,-6}, -{19,19,-5}, -{19,19,-4}, -{19,19,-3}, -{19,19,-2}, -{19,19,-1}, -{19,19,0}, -{19,19,1}, -{19,19,2}, -{19,19,3}, -{19,19,4}, -{19,19,5}, -{19,19,6}, -{19,19,7}, -{19,19,8}, -{19,19,9}, -{19,19,10}, -{19,19,11}, -{19,19,12}, -{19,19,13}, -{19,19,14}, -{19,19,15}, -{19,19,16}, -{19,19,17}, -{19,19,18}, -{19,19,19}, -{19,19,20}, -{19,19,21}, -{19,19,22}, -{19,19,23}, -{19,19,24}, -{19,19,25}, -{19,19,26}, -{19,19,27}, -{19,19,28}, -{19,20,-45}, -{19,20,-44}, -{19,20,-43}, -{19,20,-42}, -{19,20,-41}, -{19,20,-40}, -{19,20,-39}, -{19,20,-38}, -{19,20,-37}, -{19,20,-36}, -{19,20,-35}, -{19,20,-34}, -{19,20,-33}, -{19,20,-32}, -{19,20,-31}, -{19,20,-30}, -{19,20,-29}, -{19,20,-28}, -{19,20,-27}, -{19,20,-26}, -{19,20,-25}, -{19,20,-24}, -{19,20,-23}, -{19,20,-22}, -{19,20,-21}, -{19,20,-20}, -{19,20,-19}, -{19,20,-18}, -{19,20,-17}, -{19,20,-16}, -{19,20,-15}, -{19,20,-14}, -{19,20,-13}, -{19,20,-12}, -{19,20,-11}, -{19,20,-10}, -{19,20,-9}, -{19,20,-8}, -{19,20,-7}, -{19,20,-6}, -{19,20,-5}, -{19,20,-4}, -{19,20,-3}, -{19,20,-2}, -{19,20,-1}, -{19,20,0}, -{19,20,1}, -{19,20,2}, -{19,20,3}, -{19,20,4}, -{19,20,5}, -{19,20,6}, -{19,20,7}, -{19,20,8}, -{19,20,9}, -{19,20,10}, -{19,20,11}, -{19,20,12}, -{19,20,13}, -{19,20,14}, -{19,20,15}, -{19,20,16}, -{19,20,17}, -{19,20,18}, -{19,20,19}, -{19,20,20}, -{19,20,21}, -{19,20,22}, -{19,20,23}, -{19,20,24}, -{19,20,25}, -{19,20,26}, -{19,20,27}, -{19,20,28}, -{19,21,-46}, -{19,21,-45}, -{19,21,-44}, -{19,21,-43}, -{19,21,-42}, -{19,21,-41}, -{19,21,-40}, -{19,21,-39}, -{19,21,-38}, -{19,21,-37}, -{19,21,-36}, -{19,21,-35}, -{19,21,-34}, -{19,21,-33}, -{19,21,-32}, -{19,21,-31}, -{19,21,-30}, -{19,21,-29}, -{19,21,-28}, -{19,21,-27}, -{19,21,-26}, -{19,21,-25}, -{19,21,-24}, -{19,21,-23}, -{19,21,-22}, -{19,21,-21}, -{19,21,-20}, -{19,21,-19}, -{19,21,-18}, -{19,21,-17}, -{19,21,-16}, -{19,21,-15}, -{19,21,-14}, -{19,21,-13}, -{19,21,-12}, -{19,21,-11}, -{19,21,-10}, -{19,21,-9}, -{19,21,-8}, -{19,21,-7}, -{19,21,-6}, -{19,21,-5}, -{19,21,-4}, -{19,21,-3}, -{19,21,-2}, -{19,21,-1}, -{19,21,0}, -{19,21,1}, -{19,21,2}, -{19,21,3}, -{19,21,4}, -{19,21,5}, -{19,21,6}, -{19,21,7}, -{19,21,8}, -{19,21,9}, -{19,21,10}, -{19,21,11}, -{19,21,12}, -{19,21,13}, -{19,21,14}, -{19,21,15}, -{19,21,16}, -{19,21,17}, -{19,21,18}, -{19,21,19}, -{19,21,20}, -{19,21,21}, -{19,21,22}, -{19,21,23}, -{19,21,24}, -{19,21,25}, -{19,21,26}, -{19,21,27}, -{19,21,28}, -{19,22,-47}, -{19,22,-46}, -{19,22,-45}, -{19,22,-44}, -{19,22,-43}, -{19,22,-42}, -{19,22,-41}, -{19,22,-40}, -{19,22,-39}, -{19,22,-38}, -{19,22,-37}, -{19,22,-36}, -{19,22,-35}, -{19,22,-34}, -{19,22,-33}, -{19,22,-32}, -{19,22,-31}, -{19,22,-30}, -{19,22,-29}, -{19,22,-28}, -{19,22,-27}, -{19,22,-26}, -{19,22,-25}, -{19,22,-24}, -{19,22,-23}, -{19,22,-22}, -{19,22,-21}, -{19,22,-20}, -{19,22,-19}, -{19,22,-18}, -{19,22,-17}, -{19,22,-16}, -{19,22,-15}, -{19,22,-14}, -{19,22,-13}, -{19,22,-12}, -{19,22,-11}, -{19,22,-10}, -{19,22,-9}, -{19,22,-8}, -{19,22,-7}, -{19,22,-6}, -{19,22,-5}, -{19,22,-4}, -{19,22,-3}, -{19,22,-2}, -{19,22,-1}, -{19,22,0}, -{19,22,1}, -{19,22,2}, -{19,22,3}, -{19,22,4}, -{19,22,5}, -{19,22,6}, -{19,22,7}, -{19,22,8}, -{19,22,9}, -{19,22,10}, -{19,22,11}, -{19,22,12}, -{19,22,13}, -{19,22,14}, -{19,22,15}, -{19,22,16}, -{19,22,17}, -{19,22,18}, -{19,22,19}, -{19,22,20}, -{19,22,21}, -{19,22,22}, -{19,22,23}, -{19,22,24}, -{19,22,25}, -{19,22,26}, -{19,22,27}, -{19,22,28}, -{19,23,-48}, -{19,23,-47}, -{19,23,-46}, -{19,23,-45}, -{19,23,-44}, -{19,23,-43}, -{19,23,-42}, -{19,23,-41}, -{19,23,-40}, -{19,23,-39}, -{19,23,-38}, -{19,23,-37}, -{19,23,-36}, -{19,23,-35}, -{19,23,-34}, -{19,23,-33}, -{19,23,-32}, -{19,23,-31}, -{19,23,-30}, -{19,23,-29}, -{19,23,-28}, -{19,23,-27}, -{19,23,-26}, -{19,23,-25}, -{19,23,-24}, -{19,23,-23}, -{19,23,-22}, -{19,23,-21}, -{19,23,-20}, -{19,23,-19}, -{19,23,-18}, -{19,23,-17}, -{19,23,-16}, -{19,23,-15}, -{19,23,-14}, -{19,23,-13}, -{19,23,-12}, -{19,23,-11}, -{19,23,-10}, -{19,23,-9}, -{19,23,-8}, -{19,23,-7}, -{19,23,-6}, -{19,23,-5}, -{19,23,-4}, -{19,23,-3}, -{19,23,-2}, -{19,23,-1}, -{19,23,0}, -{19,23,1}, -{19,23,2}, -{19,23,3}, -{19,23,4}, -{19,23,5}, -{19,23,6}, -{19,23,7}, -{19,23,8}, -{19,23,9}, -{19,23,10}, -{19,23,11}, -{19,23,12}, -{19,23,13}, -{19,23,14}, -{19,23,15}, -{19,23,16}, -{19,23,17}, -{19,23,18}, -{19,23,19}, -{19,23,20}, -{19,23,21}, -{19,23,22}, -{19,23,23}, -{19,23,24}, -{19,23,25}, -{19,23,26}, -{19,23,27}, -{19,23,28}, -{19,24,-49}, -{19,24,-48}, -{19,24,-47}, -{19,24,-46}, -{19,24,-45}, -{19,24,-44}, -{19,24,-43}, -{19,24,-42}, -{19,24,-41}, -{19,24,-40}, -{19,24,-39}, -{19,24,-38}, -{19,24,-37}, -{19,24,-36}, -{19,24,-35}, -{19,24,-34}, -{19,24,-33}, -{19,24,-32}, -{19,24,-31}, -{19,24,-30}, -{19,24,-29}, -{19,24,-28}, -{19,24,-27}, -{19,24,-26}, -{19,24,-25}, -{19,24,-24}, -{19,24,-23}, -{19,24,-22}, -{19,24,-21}, -{19,24,-20}, -{19,24,-19}, -{19,24,-18}, -{19,24,-17}, -{19,24,-16}, -{19,24,-15}, -{19,24,-14}, -{19,24,-13}, -{19,24,-12}, -{19,24,-11}, -{19,24,-10}, -{19,24,-9}, -{19,24,-8}, -{19,24,-7}, -{19,24,-6}, -{19,24,-5}, -{19,24,-4}, -{19,24,-3}, -{19,24,-2}, -{19,24,-1}, -{19,24,0}, -{19,24,1}, -{19,24,2}, -{19,24,3}, -{19,24,4}, -{19,24,5}, -{19,24,6}, -{19,24,7}, -{19,24,8}, -{19,24,9}, -{19,24,10}, -{19,24,11}, -{19,24,12}, -{19,24,13}, -{19,24,14}, -{19,24,15}, -{19,24,16}, -{19,24,17}, -{19,24,18}, -{19,24,19}, -{19,24,20}, -{19,24,21}, -{19,24,22}, -{19,24,23}, -{19,24,24}, -{19,24,25}, -{19,24,26}, -{19,24,27}, -{19,24,28}, -{19,25,-50}, -{19,25,-49}, -{19,25,-48}, -{19,25,-47}, -{19,25,-46}, -{19,25,-45}, -{19,25,-44}, -{19,25,-43}, -{19,25,-42}, -{19,25,-41}, -{19,25,-40}, -{19,25,-39}, -{19,25,-38}, -{19,25,-37}, -{19,25,-36}, -{19,25,-35}, -{19,25,-34}, -{19,25,-33}, -{19,25,-32}, -{19,25,-31}, -{19,25,-30}, -{19,25,-29}, -{19,25,-28}, -{19,25,-27}, -{19,25,-26}, -{19,25,-25}, -{19,25,-24}, -{19,25,-23}, -{19,25,-22}, -{19,25,-21}, -{19,25,-20}, -{19,25,-19}, -{19,25,-18}, -{19,25,-17}, -{19,25,-16}, -{19,25,-15}, -{19,25,-14}, -{19,25,-13}, -{19,25,-12}, -{19,25,-11}, -{19,25,-10}, -{19,25,-9}, -{19,25,-8}, -{19,25,-7}, -{19,25,-6}, -{19,25,-5}, -{19,25,-4}, -{19,25,-3}, -{19,25,-2}, -{19,25,-1}, -{19,25,0}, -{19,25,1}, -{19,25,2}, -{19,25,3}, -{19,25,4}, -{19,25,5}, -{19,25,6}, -{19,25,7}, -{19,25,8}, -{19,25,9}, -{19,25,10}, -{19,25,11}, -{19,25,12}, -{19,25,13}, -{19,25,14}, -{19,25,15}, -{19,25,16}, -{19,25,17}, -{19,25,18}, -{19,25,19}, -{19,25,20}, -{19,25,21}, -{19,25,22}, -{19,25,23}, -{19,25,24}, -{19,25,25}, -{19,25,26}, -{19,25,27}, -{19,25,28}, -{19,26,-51}, -{19,26,-50}, -{19,26,-49}, -{19,26,-48}, -{19,26,-47}, -{19,26,-46}, -{19,26,-45}, -{19,26,-44}, -{19,26,-43}, -{19,26,-42}, -{19,26,-41}, -{19,26,-40}, -{19,26,-39}, -{19,26,-38}, -{19,26,-37}, -{19,26,-36}, -{19,26,-35}, -{19,26,-34}, -{19,26,-33}, -{19,26,-32}, -{19,26,-31}, -{19,26,-30}, -{19,26,-29}, -{19,26,-28}, -{19,26,-27}, -{19,26,-26}, -{19,26,-25}, -{19,26,-24}, -{19,26,-23}, -{19,26,-22}, -{19,26,-21}, -{19,26,-20}, -{19,26,-19}, -{19,26,-18}, -{19,26,-17}, -{19,26,-16}, -{19,26,-15}, -{19,26,-14}, -{19,26,-13}, -{19,26,-12}, -{19,26,-11}, -{19,26,-10}, -{19,26,-9}, -{19,26,-8}, -{19,26,-7}, -{19,26,-6}, -{19,26,-5}, -{19,26,-4}, -{19,26,-3}, -{19,26,-2}, -{19,26,-1}, -{19,26,0}, -{19,26,1}, -{19,26,2}, -{19,26,3}, -{19,26,4}, -{19,26,5}, -{19,26,6}, -{19,26,7}, -{19,26,8}, -{19,26,9}, -{19,26,10}, -{19,26,11}, -{19,26,12}, -{19,26,13}, -{19,26,14}, -{19,26,15}, -{19,26,16}, -{19,26,17}, -{19,26,18}, -{19,26,19}, -{19,26,20}, -{19,26,21}, -{19,26,22}, -{19,26,23}, -{19,26,24}, -{19,26,25}, -{19,26,26}, -{19,26,27}, -{19,26,28}, -{19,27,-52}, -{19,27,-51}, -{19,27,-50}, -{19,27,-49}, -{19,27,-48}, -{19,27,-47}, -{19,27,-46}, -{19,27,-45}, -{19,27,-44}, -{19,27,-43}, -{19,27,-42}, -{19,27,-41}, -{19,27,-40}, -{19,27,-39}, -{19,27,-38}, -{19,27,-37}, -{19,27,-36}, -{19,27,-35}, -{19,27,-34}, -{19,27,-33}, -{19,27,-32}, -{19,27,-31}, -{19,27,-30}, -{19,27,-29}, -{19,27,-28}, -{19,27,-27}, -{19,27,-26}, -{19,27,-25}, -{19,27,-24}, -{19,27,-23}, -{19,27,-22}, -{19,27,-21}, -{19,27,-20}, -{19,27,-19}, -{19,27,-18}, -{19,27,-17}, -{19,27,-16}, -{19,27,-15}, -{19,27,-14}, -{19,27,-13}, -{19,27,-12}, -{19,27,-11}, -{19,27,-10}, -{19,27,-9}, -{19,27,-8}, -{19,27,-7}, -{19,27,-6}, -{19,27,-5}, -{19,27,-4}, -{19,27,-3}, -{19,27,-2}, -{19,27,-1}, -{19,27,0}, -{19,27,1}, -{19,27,2}, -{19,27,3}, -{19,27,4}, -{19,27,5}, -{19,27,6}, -{19,27,7}, -{19,27,8}, -{19,27,9}, -{19,27,10}, -{19,27,11}, -{19,27,12}, -{19,27,13}, -{19,27,14}, -{19,27,15}, -{19,27,16}, -{19,27,17}, -{19,27,18}, -{19,27,19}, -{19,27,20}, -{19,27,21}, -{19,27,22}, -{19,27,23}, -{19,27,24}, -{19,27,25}, -{19,27,26}, -{19,27,27}, -{19,27,28}, -{19,28,-53}, -{19,28,-52}, -{19,28,-51}, -{19,28,-50}, -{19,28,-49}, -{19,28,-48}, -{19,28,-47}, -{19,28,-46}, -{19,28,-45}, -{19,28,-44}, -{19,28,-43}, -{19,28,-42}, -{19,28,-41}, -{19,28,-40}, -{19,28,-39}, -{19,28,-38}, -{19,28,-37}, -{19,28,-36}, -{19,28,-35}, -{19,28,-34}, -{19,28,-33}, -{19,28,-32}, -{19,28,-31}, -{19,28,-30}, -{19,28,-29}, -{19,28,-28}, -{19,28,-27}, -{19,28,-26}, -{19,28,-25}, -{19,28,-24}, -{19,28,-23}, -{19,28,-22}, -{19,28,-21}, -{19,28,-20}, -{19,28,-19}, -{19,28,-18}, -{19,28,-17}, -{19,28,-16}, -{19,28,-15}, -{19,28,-14}, -{19,28,-13}, -{19,28,-12}, -{19,28,-11}, -{19,28,-10}, -{19,28,-9}, -{19,28,-8}, -{19,28,-7}, -{19,28,-6}, -{19,28,-5}, -{19,28,-4}, -{19,28,-3}, -{19,28,-2}, -{19,28,-1}, -{19,28,0}, -{19,28,1}, -{19,28,2}, -{19,28,3}, -{19,28,4}, -{19,28,5}, -{19,28,6}, -{19,28,7}, -{19,28,8}, -{19,28,9}, -{19,28,10}, -{19,28,11}, -{19,28,12}, -{19,28,13}, -{19,28,14}, -{19,28,15}, -{19,28,16}, -{19,28,17}, -{19,28,18}, -{19,28,19}, -{19,28,20}, -{19,28,21}, -{19,28,22}, -{19,28,23}, -{19,28,24}, -{19,28,25}, -{19,28,26}, -{19,28,27}, -{19,28,28}, -{19,29,-54}, -{19,29,-53}, -{19,29,-52}, -{19,29,-51}, -{19,29,-50}, -{19,29,-49}, -{19,29,-48}, -{19,29,-47}, -{19,29,-46}, -{19,29,-45}, -{19,29,-44}, -{19,29,-43}, -{19,29,-42}, -{19,29,-41}, -{19,29,-40}, -{19,29,-39}, -{19,29,-38}, -{19,29,-37}, -{19,29,-36}, -{19,29,-35}, -{19,29,-34}, -{19,29,-33}, -{19,29,-32}, -{19,29,-31}, -{19,29,-30}, -{19,29,-29}, -{19,29,-28}, -{19,29,-27}, -{19,29,-26}, -{19,29,-25}, -{19,29,-24}, -{19,29,-23}, -{19,29,-22}, -{19,29,-21}, -{19,29,-20}, -{19,29,-19}, -{19,29,-18}, -{19,29,-17}, -{19,29,-16}, -{19,29,-15}, -{19,29,-14}, -{19,29,-13}, -{19,29,-12}, -{19,29,-11}, -{19,29,-10}, -{19,29,-9}, -{19,29,-8}, -{19,29,-7}, -{19,29,-6}, -{19,29,-5}, -{19,29,-4}, -{19,29,-3}, -{19,29,-2}, -{19,29,-1}, -{19,29,0}, -{19,29,1}, -{19,29,2}, -{19,29,3}, -{19,29,4}, -{19,29,5}, -{19,29,6}, -{19,29,7}, -{19,29,8}, -{19,29,9}, -{19,29,10}, -{19,29,11}, -{19,29,12}, -{19,29,13}, -{19,29,14}, -{19,29,15}, -{19,29,16}, -{19,29,17}, -{19,29,18}, -{19,29,19}, -{19,29,20}, -{19,29,21}, -{19,29,22}, -{19,29,23}, -{19,29,24}, -{19,29,25}, -{19,29,26}, -{19,29,27}, -{19,29,28}, -{19,30,-54}, -{19,30,-53}, -{19,30,-52}, -{19,30,-51}, -{19,30,-50}, -{19,30,-49}, -{19,30,-48}, -{19,30,-47}, -{19,30,-46}, -{19,30,-45}, -{19,30,-44}, -{19,30,-43}, -{19,30,-42}, -{19,30,-41}, -{19,30,-40}, -{19,30,-39}, -{19,30,-38}, -{19,30,-37}, -{19,30,-36}, -{19,30,-35}, -{19,30,-34}, -{19,30,-33}, -{19,30,-32}, -{19,30,-31}, -{19,30,-30}, -{19,30,-29}, -{19,30,-28}, -{19,30,-27}, -{19,30,-26}, -{19,30,-25}, -{19,30,-24}, -{19,30,-23}, -{19,30,-22}, -{19,30,-21}, -{19,30,-20}, -{19,30,-19}, -{19,30,-18}, -{19,30,-17}, -{19,30,-16}, -{19,30,-15}, -{19,30,-14}, -{19,30,-13}, -{19,30,-12}, -{19,30,-11}, -{19,30,-10}, -{19,30,-9}, -{19,30,-8}, -{19,30,-7}, -{19,30,-6}, -{19,30,-5}, -{19,30,-4}, -{19,30,-3}, -{19,30,-2}, -{19,30,-1}, -{19,30,0}, -{19,30,1}, -{19,30,2}, -{19,30,3}, -{19,30,4}, -{19,30,5}, -{19,30,6}, -{19,30,7}, -{19,30,8}, -{19,30,9}, -{19,30,10}, -{19,30,11}, -{19,30,12}, -{19,30,13}, -{19,30,14}, -{19,30,15}, -{19,30,16}, -{19,30,17}, -{19,30,18}, -{19,30,19}, -{19,30,20}, -{19,30,21}, -{19,30,22}, -{19,30,23}, -{19,30,24}, -{19,30,25}, -{19,30,26}, -{19,30,27}, -{19,30,28}, -{19,31,-55}, -{19,31,-54}, -{19,31,-53}, -{19,31,-52}, -{19,31,-51}, -{19,31,-50}, -{19,31,-49}, -{19,31,-48}, -{19,31,-47}, -{19,31,-46}, -{19,31,-45}, -{19,31,-44}, -{19,31,-43}, -{19,31,-42}, -{19,31,-41}, -{19,31,-40}, -{19,31,-39}, -{19,31,-38}, -{19,31,-37}, -{19,31,-36}, -{19,31,-35}, -{19,31,-34}, -{19,31,-33}, -{19,31,-32}, -{19,31,-31}, -{19,31,-30}, -{19,31,-29}, -{19,31,-28}, -{19,31,-27}, -{19,31,-26}, -{19,31,-25}, -{19,31,-24}, -{19,31,-23}, -{19,31,-22}, -{19,31,-21}, -{19,31,-20}, -{19,31,-19}, -{19,31,-18}, -{19,31,-17}, -{19,31,-16}, -{19,31,-15}, -{19,31,-14}, -{19,31,-13}, -{19,31,-12}, -{19,31,-11}, -{19,31,-10}, -{19,31,-9}, -{19,31,-8}, -{19,31,-7}, -{19,31,-6}, -{19,31,-5}, -{19,31,-4}, -{19,31,-3}, -{19,31,-2}, -{19,31,-1}, -{19,31,0}, -{19,31,1}, -{19,31,2}, -{19,31,3}, -{19,31,4}, -{19,31,5}, -{19,31,6}, -{19,31,7}, -{19,31,8}, -{19,31,9}, -{19,31,10}, -{19,31,11}, -{19,31,12}, -{19,31,13}, -{19,31,14}, -{19,31,15}, -{19,31,16}, -{19,31,17}, -{19,31,18}, -{19,31,19}, -{19,31,20}, -{19,31,21}, -{19,31,22}, -{19,31,23}, -{19,31,24}, -{19,31,25}, -{19,31,26}, -{19,31,27}, -{19,31,28}, -{19,32,-56}, -{19,32,-55}, -{19,32,-54}, -{19,32,-53}, -{19,32,-52}, -{19,32,-51}, -{19,32,-50}, -{19,32,-49}, -{19,32,-48}, -{19,32,-47}, -{19,32,-46}, -{19,32,-45}, -{19,32,-44}, -{19,32,-43}, -{19,32,-42}, -{19,32,-41}, -{19,32,-40}, -{19,32,-39}, -{19,32,-38}, -{19,32,-37}, -{19,32,-36}, -{19,32,-35}, -{19,32,-34}, -{19,32,-33}, -{19,32,-32}, -{19,32,-31}, -{19,32,-30}, -{19,32,-29}, -{19,32,-28}, -{19,32,-27}, -{19,32,-26}, -{19,32,-25}, -{19,32,-24}, -{19,32,-23}, -{19,32,-22}, -{19,32,-21}, -{19,32,-20}, -{19,32,-19}, -{19,32,-18}, -{19,32,-17}, -{19,32,-16}, -{19,32,-15}, -{19,32,-14}, -{19,32,-13}, -{19,32,-12}, -{19,32,-11}, -{19,32,-10}, -{19,32,-9}, -{19,32,-8}, -{19,32,-7}, -{19,32,-6}, -{19,32,-5}, -{19,32,-4}, -{19,32,-3}, -{19,32,-2}, -{19,32,-1}, -{19,32,0}, -{19,32,1}, -{19,32,2}, -{19,32,3}, -{19,32,4}, -{19,32,5}, -{19,32,6}, -{19,32,7}, -{19,32,8}, -{19,32,9}, -{19,32,10}, -{19,32,11}, -{19,32,12}, -{19,32,13}, -{19,32,14}, -{19,32,15}, -{19,32,16}, -{19,32,17}, -{19,32,18}, -{19,32,19}, -{19,32,20}, -{19,32,21}, -{19,32,22}, -{19,32,23}, -{19,32,24}, -{19,32,25}, -{19,32,26}, -{19,32,27}, -{19,32,28}, -{19,33,-57}, -{19,33,-56}, -{19,33,-55}, -{19,33,-54}, -{19,33,-53}, -{19,33,-52}, -{19,33,-51}, -{19,33,-50}, -{19,33,-49}, -{19,33,-48}, -{19,33,-47}, -{19,33,-46}, -{19,33,-45}, -{19,33,-44}, -{19,33,-43}, -{19,33,-42}, -{19,33,-41}, -{19,33,-40}, -{19,33,-39}, -{19,33,-38}, -{19,33,-37}, -{19,33,-36}, -{19,33,-35}, -{19,33,-34}, -{19,33,-33}, -{19,33,-32}, -{19,33,-31}, -{19,33,-30}, -{19,33,-29}, -{19,33,-28}, -{19,33,-27}, -{19,33,-26}, -{19,33,-25}, -{19,33,-24}, -{19,33,-23}, -{19,33,-22}, -{19,33,-21}, -{19,33,-20}, -{19,33,-19}, -{19,33,-18}, -{19,33,-17}, -{19,33,-16}, -{19,33,-15}, -{19,33,-14}, -{19,33,-13}, -{19,33,-12}, -{19,33,-11}, -{19,33,-10}, -{19,33,-9}, -{19,33,-8}, -{19,33,-7}, -{19,33,-6}, -{19,33,-5}, -{19,33,-4}, -{19,33,-3}, -{19,33,-2}, -{19,33,-1}, -{19,33,0}, -{19,33,1}, -{19,33,2}, -{19,33,3}, -{19,33,4}, -{19,33,5}, -{19,33,6}, -{19,33,7}, -{19,33,8}, -{19,33,9}, -{19,33,10}, -{19,33,11}, -{19,33,12}, -{19,33,13}, -{19,33,14}, -{19,33,15}, -{19,33,16}, -{19,33,17}, -{19,33,18}, -{19,33,19}, -{19,33,20}, -{19,33,21}, -{19,33,22}, -{19,33,23}, -{19,33,24}, -{19,33,25}, -{19,33,26}, -{19,33,27}, -{19,33,28}, -{19,34,-58}, -{19,34,-57}, -{19,34,-56}, -{19,34,-55}, -{19,34,-54}, -{19,34,-53}, -{19,34,-52}, -{19,34,-51}, -{19,34,-50}, -{19,34,-49}, -{19,34,-48}, -{19,34,-47}, -{19,34,-46}, -{19,34,-45}, -{19,34,-44}, -{19,34,-43}, -{19,34,-42}, -{19,34,-41}, -{19,34,-40}, -{19,34,-39}, -{19,34,-38}, -{19,34,-37}, -{19,34,-36}, -{19,34,-35}, -{19,34,-34}, -{19,34,-33}, -{19,34,-32}, -{19,34,-31}, -{19,34,-30}, -{19,34,-29}, -{19,34,-28}, -{19,34,-27}, -{19,34,-26}, -{19,34,-25}, -{19,34,-24}, -{19,34,-23}, -{19,34,-22}, -{19,34,-21}, -{19,34,-20}, -{19,34,-19}, -{19,34,-18}, -{19,34,-17}, -{19,34,-16}, -{19,34,-15}, -{19,34,-14}, -{19,34,-13}, -{19,34,-12}, -{19,34,-11}, -{19,34,-10}, -{19,34,-9}, -{19,34,-8}, -{19,34,-7}, -{19,34,-6}, -{19,34,-5}, -{19,34,-4}, -{19,34,-3}, -{19,34,-2}, -{19,34,-1}, -{19,34,0}, -{19,34,1}, -{19,34,2}, -{19,34,3}, -{19,34,4}, -{19,34,5}, -{19,34,6}, -{19,34,7}, -{19,34,8}, -{19,34,9}, -{19,34,10}, -{19,34,11}, -{19,34,12}, -{19,34,13}, -{19,34,14}, -{19,34,15}, -{19,34,16}, -{19,34,17}, -{19,34,18}, -{19,34,19}, -{19,34,20}, -{19,34,21}, -{19,34,22}, -{19,34,23}, -{19,34,24}, -{19,34,25}, -{19,34,26}, -{19,34,27}, -{19,34,28}, -{19,35,-59}, -{19,35,-58}, -{19,35,-57}, -{19,35,-56}, -{19,35,-55}, -{19,35,-54}, -{19,35,-53}, -{19,35,-52}, -{19,35,-51}, -{19,35,-50}, -{19,35,-49}, -{19,35,-48}, -{19,35,-47}, -{19,35,-46}, -{19,35,-45}, -{19,35,-44}, -{19,35,-43}, -{19,35,-42}, -{19,35,-41}, -{19,35,-40}, -{19,35,-39}, -{19,35,-38}, -{19,35,-37}, -{19,35,-36}, -{19,35,-35}, -{19,35,-34}, -{19,35,-33}, -{19,35,-32}, -{19,35,-31}, -{19,35,-30}, -{19,35,-29}, -{19,35,-28}, -{19,35,-27}, -{19,35,-26}, -{19,35,-25}, -{19,35,-24}, -{19,35,-23}, -{19,35,-22}, -{19,35,-21}, -{19,35,-20}, -{19,35,-19}, -{19,35,-18}, -{19,35,-17}, -{19,35,-16}, -{19,35,-15}, -{19,35,-14}, -{19,35,-13}, -{19,35,-12}, -{19,35,-11}, -{19,35,-10}, -{19,35,-9}, -{19,35,-8}, -{19,35,-7}, -{19,35,-6}, -{19,35,-5}, -{19,35,-4}, -{19,35,-3}, -{19,35,-2}, -{19,35,-1}, -{19,35,0}, -{19,35,1}, -{19,35,2}, -{19,35,3}, -{19,35,4}, -{19,35,5}, -{19,35,6}, -{19,35,7}, -{19,35,8}, -{19,35,9}, -{19,35,10}, -{19,35,11}, -{19,35,12}, -{19,35,13}, -{19,35,14}, -{19,35,15}, -{19,35,16}, -{19,35,17}, -{19,35,18}, -{19,35,19}, -{19,35,20}, -{19,35,21}, -{19,35,22}, -{19,35,23}, -{19,35,24}, -{19,35,25}, -{19,35,26}, -{19,35,27}, -{19,35,28}, -{19,35,29}, -{19,36,-60}, -{19,36,-59}, -{19,36,-58}, -{19,36,-57}, -{19,36,-56}, -{19,36,-55}, -{19,36,-54}, -{19,36,-53}, -{19,36,-52}, -{19,36,-51}, -{19,36,-50}, -{19,36,-49}, -{19,36,-48}, -{19,36,-47}, -{19,36,-46}, -{19,36,-45}, -{19,36,-44}, -{19,36,-43}, -{19,36,-42}, -{19,36,-41}, -{19,36,-40}, -{19,36,-39}, -{19,36,-38}, -{19,36,-37}, -{19,36,-36}, -{19,36,-35}, -{19,36,-34}, -{19,36,-33}, -{19,36,-32}, -{19,36,-31}, -{19,36,-30}, -{19,36,-29}, -{19,36,-28}, -{19,36,-27}, -{19,36,-26}, -{19,36,-25}, -{19,36,-24}, -{19,36,-23}, -{19,36,-22}, -{19,36,-21}, -{19,36,-20}, -{19,36,-19}, -{19,36,-18}, -{19,36,-17}, -{19,36,-16}, -{19,36,-15}, -{19,36,-14}, -{19,36,-13}, -{19,36,-12}, -{19,36,-11}, -{19,36,-10}, -{19,36,-9}, -{19,36,-8}, -{19,36,-7}, -{19,36,-6}, -{19,36,-5}, -{19,36,-4}, -{19,36,-3}, -{19,36,-2}, -{19,36,-1}, -{19,36,0}, -{19,36,1}, -{19,36,2}, -{19,36,3}, -{19,36,4}, -{19,36,5}, -{19,36,6}, -{19,36,7}, -{19,36,8}, -{19,36,9}, -{19,36,10}, -{19,36,11}, -{19,36,12}, -{19,36,13}, -{19,36,14}, -{19,36,15}, -{19,36,16}, -{19,36,17}, -{19,36,18}, -{19,36,19}, -{19,36,20}, -{19,36,21}, -{19,36,22}, -{19,36,23}, -{19,36,24}, -{19,36,25}, -{19,36,26}, -{19,36,27}, -{19,36,28}, -{19,36,29}, -{19,37,-61}, -{19,37,-60}, -{19,37,-59}, -{19,37,-58}, -{19,37,-57}, -{19,37,-56}, -{19,37,-55}, -{19,37,-54}, -{19,37,-53}, -{19,37,-52}, -{19,37,-51}, -{19,37,-50}, -{19,37,-49}, -{19,37,-48}, -{19,37,-47}, -{19,37,-46}, -{19,37,-45}, -{19,37,-44}, -{19,37,-43}, -{19,37,-42}, -{19,37,-41}, -{19,37,-40}, -{19,37,-39}, -{19,37,-38}, -{19,37,-37}, -{19,37,-36}, -{19,37,-35}, -{19,37,-34}, -{19,37,-33}, -{19,37,-32}, -{19,37,-31}, -{19,37,-30}, -{19,37,-29}, -{19,37,-28}, -{19,37,-27}, -{19,37,-26}, -{19,37,-25}, -{19,37,-24}, -{19,37,-23}, -{19,37,-22}, -{19,37,-21}, -{19,37,-20}, -{19,37,-19}, -{19,37,-18}, -{19,37,-17}, -{19,37,-16}, -{19,37,-15}, -{19,37,-14}, -{19,37,-13}, -{19,37,-12}, -{19,37,-11}, -{19,37,-10}, -{19,37,-9}, -{19,37,-8}, -{19,37,-7}, -{19,37,-6}, -{19,37,-5}, -{19,37,-4}, -{19,37,-3}, -{19,37,-2}, -{19,37,-1}, -{19,37,0}, -{19,37,1}, -{19,37,2}, -{19,37,3}, -{19,37,4}, -{19,37,5}, -{19,37,6}, -{19,37,7}, -{19,37,8}, -{19,37,9}, -{19,37,10}, -{19,37,11}, -{19,37,12}, -{19,37,13}, -{19,37,14}, -{19,37,15}, -{19,37,16}, -{19,37,17}, -{19,37,18}, -{19,37,19}, -{19,37,20}, -{19,37,21}, -{19,37,22}, -{19,37,23}, -{19,37,24}, -{19,37,25}, -{19,37,26}, -{19,37,27}, -{19,37,28}, -{19,37,29}, -{19,38,-62}, -{19,38,-61}, -{19,38,-60}, -{19,38,-59}, -{19,38,-58}, -{19,38,-57}, -{19,38,-56}, -{19,38,-55}, -{19,38,-54}, -{19,38,-53}, -{19,38,-52}, -{19,38,-51}, -{19,38,-50}, -{19,38,-49}, -{19,38,-48}, -{19,38,-47}, -{19,38,-46}, -{19,38,-45}, -{19,38,-44}, -{19,38,-43}, -{19,38,-42}, -{19,38,-41}, -{19,38,-40}, -{19,38,-39}, -{19,38,-38}, -{19,38,-37}, -{19,38,-36}, -{19,38,-35}, -{19,38,-34}, -{19,38,-33}, -{19,38,-32}, -{19,38,-31}, -{19,38,-30}, -{19,38,-29}, -{19,38,-28}, -{19,38,-27}, -{19,38,-26}, -{19,38,-25}, -{19,38,-24}, -{19,38,-23}, -{19,38,-22}, -{19,38,-21}, -{19,38,-20}, -{19,38,-19}, -{19,38,-18}, -{19,38,-17}, -{19,38,-16}, -{19,38,-15}, -{19,38,-14}, -{19,38,-13}, -{19,38,-12}, -{19,38,-11}, -{19,38,-10}, -{19,38,-9}, -{19,38,-8}, -{19,38,-7}, -{19,38,-6}, -{19,38,-5}, -{19,38,-4}, -{19,38,-3}, -{19,38,-2}, -{19,38,-1}, -{19,38,0}, -{19,38,1}, -{19,38,2}, -{19,38,3}, -{19,38,4}, -{19,38,5}, -{19,38,6}, -{19,38,7}, -{19,38,8}, -{19,38,9}, -{19,38,10}, -{19,38,11}, -{19,38,12}, -{19,38,13}, -{19,38,14}, -{19,38,15}, -{19,38,16}, -{19,38,17}, -{19,38,18}, -{19,38,19}, -{19,38,20}, -{19,38,21}, -{19,38,22}, -{19,38,23}, -{19,38,24}, -{19,38,25}, -{19,38,26}, -{19,38,27}, -{19,38,28}, -{19,38,29}, -{19,39,-62}, -{19,39,-61}, -{19,39,-60}, -{19,39,-59}, -{19,39,-58}, -{19,39,-57}, -{19,39,-56}, -{19,39,-55}, -{19,39,-54}, -{19,39,-53}, -{19,39,-52}, -{19,39,-51}, -{19,39,-50}, -{19,39,-49}, -{19,39,-48}, -{19,39,-47}, -{19,39,-46}, -{19,39,-45}, -{19,39,-44}, -{19,39,-43}, -{19,39,-42}, -{19,39,-41}, -{19,39,-40}, -{19,39,-39}, -{19,39,-38}, -{19,39,-37}, -{19,39,-36}, -{19,39,-35}, -{19,39,-34}, -{19,39,-33}, -{19,39,-32}, -{19,39,-31}, -{19,39,-30}, -{19,39,-29}, -{19,39,-28}, -{19,39,-27}, -{19,39,-26}, -{19,39,-25}, -{19,39,-24}, -{19,39,-23}, -{19,39,-22}, -{19,39,-21}, -{19,39,-20}, -{19,39,-19}, -{19,39,-18}, -{19,39,-17}, -{19,39,-16}, -{19,39,-15}, -{19,39,-14}, -{19,39,-13}, -{19,39,-12}, -{19,39,-11}, -{19,39,-10}, -{19,39,-9}, -{19,39,-8}, -{19,39,-7}, -{19,39,-6}, -{19,39,-5}, -{19,39,-4}, -{19,39,-3}, -{19,39,-2}, -{19,39,-1}, -{19,39,0}, -{19,39,1}, -{19,39,2}, -{19,39,3}, -{19,39,4}, -{19,39,5}, -{19,39,6}, -{19,39,7}, -{19,39,8}, -{19,39,9}, -{19,39,10}, -{19,39,11}, -{19,39,12}, -{19,39,13}, -{19,39,14}, -{19,39,15}, -{19,39,16}, -{19,39,17}, -{19,39,18}, -{19,39,19}, -{19,39,20}, -{19,39,21}, -{19,39,22}, -{19,39,23}, -{19,39,24}, -{19,39,25}, -{19,39,26}, -{19,39,27}, -{19,39,28}, -{19,39,29}, -{19,40,-63}, -{19,40,-62}, -{19,40,-61}, -{19,40,-60}, -{19,40,-59}, -{19,40,-58}, -{19,40,-57}, -{19,40,-56}, -{19,40,-55}, -{19,40,-54}, -{19,40,-53}, -{19,40,-52}, -{19,40,-51}, -{19,40,-50}, -{19,40,-49}, -{19,40,-48}, -{19,40,-47}, -{19,40,-46}, -{19,40,-45}, -{19,40,-44}, -{19,40,-43}, -{19,40,-42}, -{19,40,-41}, -{19,40,-40}, -{19,40,-39}, -{19,40,-38}, -{19,40,-37}, -{19,40,-36}, -{19,40,-35}, -{19,40,-34}, -{19,40,-33}, -{19,40,-32}, -{19,40,-31}, -{19,40,-30}, -{19,40,-29}, -{19,40,-28}, -{19,40,-27}, -{19,40,-26}, -{19,40,-25}, -{19,40,-24}, -{19,40,-23}, -{19,40,-22}, -{19,40,-21}, -{19,40,-20}, -{19,40,-19}, -{19,40,-18}, -{19,40,-17}, -{19,40,-16}, -{19,40,-15}, -{19,40,-14}, -{19,40,-13}, -{19,40,-12}, -{19,40,-11}, -{19,40,-10}, -{19,40,-9}, -{19,40,-8}, -{19,40,-7}, -{19,40,-6}, -{19,40,-5}, -{19,40,-4}, -{19,40,-3}, -{19,40,-2}, -{19,40,-1}, -{19,40,0}, -{19,40,1}, -{19,40,2}, -{19,40,3}, -{19,40,4}, -{19,40,5}, -{19,40,6}, -{19,40,7}, -{19,40,8}, -{19,40,9}, -{19,40,10}, -{19,40,11}, -{19,40,12}, -{19,40,13}, -{19,40,14}, -{19,40,15}, -{19,40,16}, -{19,40,17}, -{19,40,18}, -{19,40,19}, -{19,40,20}, -{19,40,21}, -{19,40,22}, -{19,40,23}, -{19,40,24}, -{19,40,25}, -{19,40,26}, -{19,40,27}, -{19,40,28}, -{19,40,29}, -{19,41,-64}, -{19,41,-63}, -{19,41,-62}, -{19,41,-61}, -{19,41,-60}, -{19,41,-59}, -{19,41,-58}, -{19,41,-57}, -{19,41,-56}, -{19,41,-55}, -{19,41,-54}, -{19,41,-53}, -{19,41,-52}, -{19,41,-51}, -{19,41,-50}, -{19,41,-49}, -{19,41,-48}, -{19,41,-47}, -{19,41,-46}, -{19,41,-45}, -{19,41,-44}, -{19,41,-43}, -{19,41,-42}, -{19,41,-41}, -{19,41,-40}, -{19,41,-39}, -{19,41,-38}, -{19,41,-37}, -{19,41,-36}, -{19,41,-35}, -{19,41,-34}, -{19,41,-33}, -{19,41,-32}, -{19,41,-31}, -{19,41,-30}, -{19,41,-29}, -{19,41,-28}, -{19,41,-27}, -{19,41,-26}, -{19,41,-25}, -{19,41,-24}, -{19,41,-23}, -{19,41,-22}, -{19,41,-21}, -{19,41,-20}, -{19,41,-19}, -{19,41,-18}, -{19,41,-17}, -{19,41,-16}, -{19,41,-15}, -{19,41,-14}, -{19,41,-13}, -{19,41,-12}, -{19,41,-11}, -{19,41,-10}, -{19,41,-9}, -{19,41,-8}, -{19,41,-7}, -{19,41,-6}, -{19,41,-5}, -{19,41,-4}, -{19,41,-3}, -{19,41,-2}, -{19,41,-1}, -{19,41,0}, -{19,41,1}, -{19,41,2}, -{19,41,3}, -{19,41,4}, -{19,41,5}, -{19,41,6}, -{19,41,7}, -{19,41,8}, -{19,41,9}, -{19,41,10}, -{19,41,11}, -{19,41,12}, -{19,41,13}, -{19,41,14}, -{19,41,15}, -{19,41,16}, -{19,41,17}, -{19,41,18}, -{19,41,19}, -{19,42,-65}, -{19,42,-64}, -{19,42,-63}, -{19,42,-62}, -{19,42,-61}, -{19,42,-60}, -{19,42,-59}, -{19,42,-58}, -{19,42,-57}, -{19,42,-56}, -{19,42,-55}, -{19,42,-54}, -{19,42,-53}, -{19,42,-52}, -{19,42,-51}, -{19,42,-50}, -{19,42,-49}, -{19,42,-48}, -{19,42,-47}, -{19,42,-46}, -{19,42,-45}, -{19,42,-44}, -{19,42,-43}, -{19,42,-42}, -{19,42,-41}, -{19,42,-40}, -{19,42,-39}, -{19,42,-38}, -{19,42,-37}, -{19,42,-36}, -{19,42,-35}, -{19,42,-34}, -{19,42,-33}, -{19,42,-32}, -{19,42,-31}, -{19,42,-30}, -{19,42,-29}, -{19,42,-28}, -{19,42,-27}, -{19,42,-26}, -{19,42,-25}, -{19,42,-24}, -{19,42,-23}, -{19,42,-22}, -{19,42,-21}, -{19,42,-20}, -{19,42,-19}, -{19,42,-18}, -{19,42,-17}, -{19,42,-16}, -{19,42,-15}, -{19,42,-14}, -{19,42,-13}, -{19,42,-12}, -{19,42,-11}, -{19,42,-10}, -{19,42,-9}, -{19,42,-8}, -{19,42,-7}, -{19,42,-6}, -{19,42,-5}, -{19,42,-4}, -{19,42,-3}, -{19,42,-2}, -{19,42,-1}, -{19,42,0}, -{19,43,-66}, -{19,43,-65}, -{19,43,-64}, -{19,43,-63}, -{19,43,-62}, -{19,43,-61}, -{19,43,-60}, -{19,43,-59}, -{19,43,-58}, -{19,43,-57}, -{19,43,-56}, -{19,43,-55}, -{19,43,-54}, -{19,43,-53}, -{19,43,-52}, -{19,43,-51}, -{19,43,-50}, -{19,43,-49}, -{19,43,-48}, -{19,43,-47}, -{19,43,-46}, -{19,43,-45}, -{19,43,-44}, -{19,43,-43}, -{19,43,-42}, -{19,43,-41}, -{19,43,-40}, -{19,43,-39}, -{19,43,-38}, -{19,43,-37}, -{19,43,-36}, -{19,43,-35}, -{19,43,-34}, -{19,43,-33}, -{19,43,-32}, -{19,43,-31}, -{19,43,-30}, -{19,43,-29}, -{19,43,-28}, -{19,43,-27}, -{19,43,-26}, -{19,43,-25}, -{19,43,-24}, -{19,43,-23}, -{19,43,-22}, -{19,43,-21}, -{19,43,-20}, -{19,43,-19}, -{19,43,-18}, -{19,43,-17}, -{19,43,-16}, -{19,43,-15}, -{19,43,-14}, -{19,43,-13}, -{19,43,-12}, -{19,43,-11}, -{19,44,-67}, -{19,44,-66}, -{19,44,-65}, -{19,44,-64}, -{19,44,-63}, -{19,44,-62}, -{19,44,-61}, -{19,44,-60}, -{19,44,-59}, -{19,44,-58}, -{19,44,-57}, -{19,44,-56}, -{19,44,-55}, -{19,44,-54}, -{19,44,-53}, -{19,44,-52}, -{19,44,-51}, -{19,44,-50}, -{19,44,-49}, -{19,44,-48}, -{19,44,-47}, -{19,44,-46}, -{19,44,-45}, -{19,44,-44}, -{19,44,-43}, -{19,44,-42}, -{19,44,-41}, -{19,44,-40}, -{19,44,-39}, -{19,44,-38}, -{19,44,-37}, -{19,44,-36}, -{19,44,-35}, -{19,44,-34}, -{19,44,-33}, -{19,44,-32}, -{19,44,-31}, -{19,44,-30}, -{19,44,-29}, -{19,44,-28}, -{19,44,-27}, -{19,44,-26}, -{19,44,-25}, -{19,44,-24}, -{19,44,-23}, -{19,44,-22}, -{19,44,-21}, -{19,44,-20}, -{19,45,-68}, -{19,45,-67}, -{19,45,-66}, -{19,45,-65}, -{19,45,-64}, -{19,45,-63}, -{19,45,-62}, -{19,45,-61}, -{19,45,-60}, -{19,45,-59}, -{19,45,-58}, -{19,45,-57}, -{19,45,-56}, -{19,45,-55}, -{19,45,-54}, -{19,45,-53}, -{19,45,-52}, -{19,45,-51}, -{19,45,-50}, -{19,45,-49}, -{19,45,-48}, -{19,45,-47}, -{19,45,-46}, -{19,45,-45}, -{19,45,-44}, -{19,45,-43}, -{19,45,-42}, -{19,45,-41}, -{19,45,-40}, -{19,45,-39}, -{19,45,-38}, -{19,45,-37}, -{19,45,-36}, -{19,45,-35}, -{19,45,-34}, -{19,45,-33}, -{19,45,-32}, -{19,45,-31}, -{19,45,-30}, -{19,45,-29}, -{19,45,-28}, -{19,45,-27}, -{19,46,-68}, -{19,46,-67}, -{19,46,-66}, -{19,46,-65}, -{19,46,-64}, -{19,46,-63}, -{19,46,-62}, -{19,46,-61}, -{19,46,-60}, -{19,46,-59}, -{19,46,-58}, -{19,46,-57}, -{19,46,-56}, -{19,46,-55}, -{19,46,-54}, -{19,46,-53}, -{19,46,-52}, -{19,46,-51}, -{19,46,-50}, -{19,46,-49}, -{19,46,-48}, -{19,46,-47}, -{19,46,-46}, -{19,46,-45}, -{19,46,-44}, -{19,46,-43}, -{19,46,-42}, -{19,46,-41}, -{19,46,-40}, -{19,46,-39}, -{19,46,-38}, -{19,46,-37}, -{19,46,-36}, -{19,46,-35}, -{19,46,-34}, -{19,46,-33}, -{19,47,-69}, -{19,47,-68}, -{19,47,-67}, -{19,47,-66}, -{19,47,-65}, -{19,47,-64}, -{19,47,-63}, -{19,47,-62}, -{19,47,-61}, -{19,47,-60}, -{19,47,-59}, -{19,47,-58}, -{19,47,-57}, -{19,47,-56}, -{19,47,-55}, -{19,47,-54}, -{19,47,-53}, -{19,47,-52}, -{19,47,-51}, -{19,47,-50}, -{19,47,-49}, -{19,47,-48}, -{19,47,-47}, -{19,47,-46}, -{19,47,-45}, -{19,47,-44}, -{19,47,-43}, -{19,47,-42}, -{19,47,-41}, -{19,47,-40}, -{19,47,-39}, -{19,48,-70}, -{19,48,-69}, -{19,48,-68}, -{19,48,-67}, -{19,48,-66}, -{19,48,-65}, -{19,48,-64}, -{19,48,-63}, -{19,48,-62}, -{19,48,-61}, -{19,48,-60}, -{19,48,-59}, -{19,48,-58}, -{19,48,-57}, -{19,48,-56}, -{19,48,-55}, -{19,48,-54}, -{19,48,-53}, -{19,48,-52}, -{19,48,-51}, -{19,48,-50}, -{19,48,-49}, -{19,48,-48}, -{19,48,-47}, -{19,48,-46}, -{19,48,-45}, -{19,48,-44}, -{19,49,-71}, -{19,49,-70}, -{19,49,-69}, -{19,49,-68}, -{19,49,-67}, -{19,49,-66}, -{19,49,-65}, -{19,49,-64}, -{19,49,-63}, -{19,49,-62}, -{19,49,-61}, -{19,49,-60}, -{19,49,-59}, -{19,49,-58}, -{19,49,-57}, -{19,49,-56}, -{19,49,-55}, -{19,49,-54}, -{19,49,-53}, -{19,49,-52}, -{19,49,-51}, -{19,49,-50}, -{19,49,-49}, -{19,49,-48}, -{19,50,-72}, -{19,50,-71}, -{19,50,-70}, -{19,50,-69}, -{19,50,-68}, -{19,50,-67}, -{19,50,-66}, -{19,50,-65}, -{19,50,-64}, -{19,50,-63}, -{19,50,-62}, -{19,50,-61}, -{19,50,-60}, -{19,50,-59}, -{19,50,-58}, -{19,50,-57}, -{19,50,-56}, -{19,50,-55}, -{19,50,-54}, -{19,50,-53}, -{19,51,-73}, -{19,51,-72}, -{19,51,-71}, -{19,51,-70}, -{19,51,-69}, -{19,51,-68}, -{19,51,-67}, -{19,51,-66}, -{19,51,-65}, -{19,51,-64}, -{19,51,-63}, -{19,51,-62}, -{19,51,-61}, -{19,51,-60}, -{19,51,-59}, -{19,51,-58}, -{19,51,-57}, -{19,52,-73}, -{19,52,-72}, -{19,52,-71}, -{19,52,-70}, -{19,52,-69}, -{19,52,-68}, -{19,52,-67}, -{19,52,-66}, -{19,52,-65}, -{19,52,-64}, -{19,52,-63}, -{19,52,-62}, -{19,52,-61}, -{19,53,-74}, -{19,53,-73}, -{19,53,-72}, -{19,53,-71}, -{19,53,-70}, -{19,53,-69}, -{19,53,-68}, -{19,53,-67}, -{19,53,-66}, -{19,53,-65}, -{19,53,-64}, -{19,54,-75}, -{19,54,-74}, -{19,54,-73}, -{19,54,-72}, -{19,54,-71}, -{19,54,-70}, -{19,54,-69}, -{19,54,-68}, -{19,55,-76}, -{19,55,-75}, -{19,55,-74}, -{19,55,-73}, -{19,55,-72}, -{19,55,-71}, -{19,56,-77}, -{19,56,-76}, -{19,56,-75}, -{19,56,-74}, -{19,57,-78}, -{19,57,-77}, -{20,-29,24}, -{20,-29,25}, -{20,-29,26}, -{20,-29,27}, -{20,-28,21}, -{20,-28,22}, -{20,-28,23}, -{20,-28,24}, -{20,-28,25}, -{20,-28,26}, -{20,-28,27}, -{20,-27,18}, -{20,-27,19}, -{20,-27,20}, -{20,-27,21}, -{20,-27,22}, -{20,-27,23}, -{20,-27,24}, -{20,-27,25}, -{20,-27,26}, -{20,-27,27}, -{20,-26,15}, -{20,-26,16}, -{20,-26,17}, -{20,-26,18}, -{20,-26,19}, -{20,-26,20}, -{20,-26,21}, -{20,-26,22}, -{20,-26,23}, -{20,-26,24}, -{20,-26,25}, -{20,-26,26}, -{20,-26,27}, -{20,-25,12}, -{20,-25,13}, -{20,-25,14}, -{20,-25,15}, -{20,-25,16}, -{20,-25,17}, -{20,-25,18}, -{20,-25,19}, -{20,-25,20}, -{20,-25,21}, -{20,-25,22}, -{20,-25,23}, -{20,-25,24}, -{20,-25,25}, -{20,-25,26}, -{20,-25,27}, -{20,-24,10}, -{20,-24,11}, -{20,-24,12}, -{20,-24,13}, -{20,-24,14}, -{20,-24,15}, -{20,-24,16}, -{20,-24,17}, -{20,-24,18}, -{20,-24,19}, -{20,-24,20}, -{20,-24,21}, -{20,-24,22}, -{20,-24,23}, -{20,-24,24}, -{20,-24,25}, -{20,-24,26}, -{20,-24,27}, -{20,-23,8}, -{20,-23,9}, -{20,-23,10}, -{20,-23,11}, -{20,-23,12}, -{20,-23,13}, -{20,-23,14}, -{20,-23,15}, -{20,-23,16}, -{20,-23,17}, -{20,-23,18}, -{20,-23,19}, -{20,-23,20}, -{20,-23,21}, -{20,-23,22}, -{20,-23,23}, -{20,-23,24}, -{20,-23,25}, -{20,-23,26}, -{20,-23,27}, -{20,-22,6}, -{20,-22,7}, -{20,-22,8}, -{20,-22,9}, -{20,-22,10}, -{20,-22,11}, -{20,-22,12}, -{20,-22,13}, -{20,-22,14}, -{20,-22,15}, -{20,-22,16}, -{20,-22,17}, -{20,-22,18}, -{20,-22,19}, -{20,-22,20}, -{20,-22,21}, -{20,-22,22}, -{20,-22,23}, -{20,-22,24}, -{20,-22,25}, -{20,-22,26}, -{20,-22,27}, -{20,-21,4}, -{20,-21,5}, -{20,-21,6}, -{20,-21,7}, -{20,-21,8}, -{20,-21,9}, -{20,-21,10}, -{20,-21,11}, -{20,-21,12}, -{20,-21,13}, -{20,-21,14}, -{20,-21,15}, -{20,-21,16}, -{20,-21,17}, -{20,-21,18}, -{20,-21,19}, -{20,-21,20}, -{20,-21,21}, -{20,-21,22}, -{20,-21,23}, -{20,-21,24}, -{20,-21,25}, -{20,-21,26}, -{20,-21,27}, -{20,-20,2}, -{20,-20,3}, -{20,-20,4}, -{20,-20,5}, -{20,-20,6}, -{20,-20,7}, -{20,-20,8}, -{20,-20,9}, -{20,-20,10}, -{20,-20,11}, -{20,-20,12}, -{20,-20,13}, -{20,-20,14}, -{20,-20,15}, -{20,-20,16}, -{20,-20,17}, -{20,-20,18}, -{20,-20,19}, -{20,-20,20}, -{20,-20,21}, -{20,-20,22}, -{20,-20,23}, -{20,-20,24}, -{20,-20,25}, -{20,-20,26}, -{20,-20,27}, -{20,-19,0}, -{20,-19,1}, -{20,-19,2}, -{20,-19,3}, -{20,-19,4}, -{20,-19,5}, -{20,-19,6}, -{20,-19,7}, -{20,-19,8}, -{20,-19,9}, -{20,-19,10}, -{20,-19,11}, -{20,-19,12}, -{20,-19,13}, -{20,-19,14}, -{20,-19,15}, -{20,-19,16}, -{20,-19,17}, -{20,-19,18}, -{20,-19,19}, -{20,-19,20}, -{20,-19,21}, -{20,-19,22}, -{20,-19,23}, -{20,-19,24}, -{20,-19,25}, -{20,-19,26}, -{20,-19,27}, -{20,-18,-2}, -{20,-18,-1}, -{20,-18,0}, -{20,-18,1}, -{20,-18,2}, -{20,-18,3}, -{20,-18,4}, -{20,-18,5}, -{20,-18,6}, -{20,-18,7}, -{20,-18,8}, -{20,-18,9}, -{20,-18,10}, -{20,-18,11}, -{20,-18,12}, -{20,-18,13}, -{20,-18,14}, -{20,-18,15}, -{20,-18,16}, -{20,-18,17}, -{20,-18,18}, -{20,-18,19}, -{20,-18,20}, -{20,-18,21}, -{20,-18,22}, -{20,-18,23}, -{20,-18,24}, -{20,-18,25}, -{20,-18,26}, -{20,-18,27}, -{20,-17,-3}, -{20,-17,-2}, -{20,-17,-1}, -{20,-17,0}, -{20,-17,1}, -{20,-17,2}, -{20,-17,3}, -{20,-17,4}, -{20,-17,5}, -{20,-17,6}, -{20,-17,7}, -{20,-17,8}, -{20,-17,9}, -{20,-17,10}, -{20,-17,11}, -{20,-17,12}, -{20,-17,13}, -{20,-17,14}, -{20,-17,15}, -{20,-17,16}, -{20,-17,17}, -{20,-17,18}, -{20,-17,19}, -{20,-17,20}, -{20,-17,21}, -{20,-17,22}, -{20,-17,23}, -{20,-17,24}, -{20,-17,25}, -{20,-17,26}, -{20,-17,27}, -{20,-16,-5}, -{20,-16,-4}, -{20,-16,-3}, -{20,-16,-2}, -{20,-16,-1}, -{20,-16,0}, -{20,-16,1}, -{20,-16,2}, -{20,-16,3}, -{20,-16,4}, -{20,-16,5}, -{20,-16,6}, -{20,-16,7}, -{20,-16,8}, -{20,-16,9}, -{20,-16,10}, -{20,-16,11}, -{20,-16,12}, -{20,-16,13}, -{20,-16,14}, -{20,-16,15}, -{20,-16,16}, -{20,-16,17}, -{20,-16,18}, -{20,-16,19}, -{20,-16,20}, -{20,-16,21}, -{20,-16,22}, -{20,-16,23}, -{20,-16,24}, -{20,-16,25}, -{20,-16,26}, -{20,-16,27}, -{20,-15,-6}, -{20,-15,-5}, -{20,-15,-4}, -{20,-15,-3}, -{20,-15,-2}, -{20,-15,-1}, -{20,-15,0}, -{20,-15,1}, -{20,-15,2}, -{20,-15,3}, -{20,-15,4}, -{20,-15,5}, -{20,-15,6}, -{20,-15,7}, -{20,-15,8}, -{20,-15,9}, -{20,-15,10}, -{20,-15,11}, -{20,-15,12}, -{20,-15,13}, -{20,-15,14}, -{20,-15,15}, -{20,-15,16}, -{20,-15,17}, -{20,-15,18}, -{20,-15,19}, -{20,-15,20}, -{20,-15,21}, -{20,-15,22}, -{20,-15,23}, -{20,-15,24}, -{20,-15,25}, -{20,-15,26}, -{20,-15,27}, -{20,-14,-8}, -{20,-14,-7}, -{20,-14,-6}, -{20,-14,-5}, -{20,-14,-4}, -{20,-14,-3}, -{20,-14,-2}, -{20,-14,-1}, -{20,-14,0}, -{20,-14,1}, -{20,-14,2}, -{20,-14,3}, -{20,-14,4}, -{20,-14,5}, -{20,-14,6}, -{20,-14,7}, -{20,-14,8}, -{20,-14,9}, -{20,-14,10}, -{20,-14,11}, -{20,-14,12}, -{20,-14,13}, -{20,-14,14}, -{20,-14,15}, -{20,-14,16}, -{20,-14,17}, -{20,-14,18}, -{20,-14,19}, -{20,-14,20}, -{20,-14,21}, -{20,-14,22}, -{20,-14,23}, -{20,-14,24}, -{20,-14,25}, -{20,-14,26}, -{20,-14,27}, -{20,-14,28}, -{20,-13,-9}, -{20,-13,-8}, -{20,-13,-7}, -{20,-13,-6}, -{20,-13,-5}, -{20,-13,-4}, -{20,-13,-3}, -{20,-13,-2}, -{20,-13,-1}, -{20,-13,0}, -{20,-13,1}, -{20,-13,2}, -{20,-13,3}, -{20,-13,4}, -{20,-13,5}, -{20,-13,6}, -{20,-13,7}, -{20,-13,8}, -{20,-13,9}, -{20,-13,10}, -{20,-13,11}, -{20,-13,12}, -{20,-13,13}, -{20,-13,14}, -{20,-13,15}, -{20,-13,16}, -{20,-13,17}, -{20,-13,18}, -{20,-13,19}, -{20,-13,20}, -{20,-13,21}, -{20,-13,22}, -{20,-13,23}, -{20,-13,24}, -{20,-13,25}, -{20,-13,26}, -{20,-13,27}, -{20,-13,28}, -{20,-12,-11}, -{20,-12,-10}, -{20,-12,-9}, -{20,-12,-8}, -{20,-12,-7}, -{20,-12,-6}, -{20,-12,-5}, -{20,-12,-4}, -{20,-12,-3}, -{20,-12,-2}, -{20,-12,-1}, -{20,-12,0}, -{20,-12,1}, -{20,-12,2}, -{20,-12,3}, -{20,-12,4}, -{20,-12,5}, -{20,-12,6}, -{20,-12,7}, -{20,-12,8}, -{20,-12,9}, -{20,-12,10}, -{20,-12,11}, -{20,-12,12}, -{20,-12,13}, -{20,-12,14}, -{20,-12,15}, -{20,-12,16}, -{20,-12,17}, -{20,-12,18}, -{20,-12,19}, -{20,-12,20}, -{20,-12,21}, -{20,-12,22}, -{20,-12,23}, -{20,-12,24}, -{20,-12,25}, -{20,-12,26}, -{20,-12,27}, -{20,-12,28}, -{20,-11,-12}, -{20,-11,-11}, -{20,-11,-10}, -{20,-11,-9}, -{20,-11,-8}, -{20,-11,-7}, -{20,-11,-6}, -{20,-11,-5}, -{20,-11,-4}, -{20,-11,-3}, -{20,-11,-2}, -{20,-11,-1}, -{20,-11,0}, -{20,-11,1}, -{20,-11,2}, -{20,-11,3}, -{20,-11,4}, -{20,-11,5}, -{20,-11,6}, -{20,-11,7}, -{20,-11,8}, -{20,-11,9}, -{20,-11,10}, -{20,-11,11}, -{20,-11,12}, -{20,-11,13}, -{20,-11,14}, -{20,-11,15}, -{20,-11,16}, -{20,-11,17}, -{20,-11,18}, -{20,-11,19}, -{20,-11,20}, -{20,-11,21}, -{20,-11,22}, -{20,-11,23}, -{20,-11,24}, -{20,-11,25}, -{20,-11,26}, -{20,-11,27}, -{20,-11,28}, -{20,-10,-13}, -{20,-10,-12}, -{20,-10,-11}, -{20,-10,-10}, -{20,-10,-9}, -{20,-10,-8}, -{20,-10,-7}, -{20,-10,-6}, -{20,-10,-5}, -{20,-10,-4}, -{20,-10,-3}, -{20,-10,-2}, -{20,-10,-1}, -{20,-10,0}, -{20,-10,1}, -{20,-10,2}, -{20,-10,3}, -{20,-10,4}, -{20,-10,5}, -{20,-10,6}, -{20,-10,7}, -{20,-10,8}, -{20,-10,9}, -{20,-10,10}, -{20,-10,11}, -{20,-10,12}, -{20,-10,13}, -{20,-10,14}, -{20,-10,15}, -{20,-10,16}, -{20,-10,17}, -{20,-10,18}, -{20,-10,19}, -{20,-10,20}, -{20,-10,21}, -{20,-10,22}, -{20,-10,23}, -{20,-10,24}, -{20,-10,25}, -{20,-10,26}, -{20,-10,27}, -{20,-10,28}, -{20,-9,-15}, -{20,-9,-14}, -{20,-9,-13}, -{20,-9,-12}, -{20,-9,-11}, -{20,-9,-10}, -{20,-9,-9}, -{20,-9,-8}, -{20,-9,-7}, -{20,-9,-6}, -{20,-9,-5}, -{20,-9,-4}, -{20,-9,-3}, -{20,-9,-2}, -{20,-9,-1}, -{20,-9,0}, -{20,-9,1}, -{20,-9,2}, -{20,-9,3}, -{20,-9,4}, -{20,-9,5}, -{20,-9,6}, -{20,-9,7}, -{20,-9,8}, -{20,-9,9}, -{20,-9,10}, -{20,-9,11}, -{20,-9,12}, -{20,-9,13}, -{20,-9,14}, -{20,-9,15}, -{20,-9,16}, -{20,-9,17}, -{20,-9,18}, -{20,-9,19}, -{20,-9,20}, -{20,-9,21}, -{20,-9,22}, -{20,-9,23}, -{20,-9,24}, -{20,-9,25}, -{20,-9,26}, -{20,-9,27}, -{20,-9,28}, -{20,-8,-16}, -{20,-8,-15}, -{20,-8,-14}, -{20,-8,-13}, -{20,-8,-12}, -{20,-8,-11}, -{20,-8,-10}, -{20,-8,-9}, -{20,-8,-8}, -{20,-8,-7}, -{20,-8,-6}, -{20,-8,-5}, -{20,-8,-4}, -{20,-8,-3}, -{20,-8,-2}, -{20,-8,-1}, -{20,-8,0}, -{20,-8,1}, -{20,-8,2}, -{20,-8,3}, -{20,-8,4}, -{20,-8,5}, -{20,-8,6}, -{20,-8,7}, -{20,-8,8}, -{20,-8,9}, -{20,-8,10}, -{20,-8,11}, -{20,-8,12}, -{20,-8,13}, -{20,-8,14}, -{20,-8,15}, -{20,-8,16}, -{20,-8,17}, -{20,-8,18}, -{20,-8,19}, -{20,-8,20}, -{20,-8,21}, -{20,-8,22}, -{20,-8,23}, -{20,-8,24}, -{20,-8,25}, -{20,-8,26}, -{20,-8,27}, -{20,-8,28}, -{20,-7,-17}, -{20,-7,-16}, -{20,-7,-15}, -{20,-7,-14}, -{20,-7,-13}, -{20,-7,-12}, -{20,-7,-11}, -{20,-7,-10}, -{20,-7,-9}, -{20,-7,-8}, -{20,-7,-7}, -{20,-7,-6}, -{20,-7,-5}, -{20,-7,-4}, -{20,-7,-3}, -{20,-7,-2}, -{20,-7,-1}, -{20,-7,0}, -{20,-7,1}, -{20,-7,2}, -{20,-7,3}, -{20,-7,4}, -{20,-7,5}, -{20,-7,6}, -{20,-7,7}, -{20,-7,8}, -{20,-7,9}, -{20,-7,10}, -{20,-7,11}, -{20,-7,12}, -{20,-7,13}, -{20,-7,14}, -{20,-7,15}, -{20,-7,16}, -{20,-7,17}, -{20,-7,18}, -{20,-7,19}, -{20,-7,20}, -{20,-7,21}, -{20,-7,22}, -{20,-7,23}, -{20,-7,24}, -{20,-7,25}, -{20,-7,26}, -{20,-7,27}, -{20,-7,28}, -{20,-6,-18}, -{20,-6,-17}, -{20,-6,-16}, -{20,-6,-15}, -{20,-6,-14}, -{20,-6,-13}, -{20,-6,-12}, -{20,-6,-11}, -{20,-6,-10}, -{20,-6,-9}, -{20,-6,-8}, -{20,-6,-7}, -{20,-6,-6}, -{20,-6,-5}, -{20,-6,-4}, -{20,-6,-3}, -{20,-6,-2}, -{20,-6,-1}, -{20,-6,0}, -{20,-6,1}, -{20,-6,2}, -{20,-6,3}, -{20,-6,4}, -{20,-6,5}, -{20,-6,6}, -{20,-6,7}, -{20,-6,8}, -{20,-6,9}, -{20,-6,10}, -{20,-6,11}, -{20,-6,12}, -{20,-6,13}, -{20,-6,14}, -{20,-6,15}, -{20,-6,16}, -{20,-6,17}, -{20,-6,18}, -{20,-6,19}, -{20,-6,20}, -{20,-6,21}, -{20,-6,22}, -{20,-6,23}, -{20,-6,24}, -{20,-6,25}, -{20,-6,26}, -{20,-6,27}, -{20,-6,28}, -{20,-5,-20}, -{20,-5,-19}, -{20,-5,-18}, -{20,-5,-17}, -{20,-5,-16}, -{20,-5,-15}, -{20,-5,-14}, -{20,-5,-13}, -{20,-5,-12}, -{20,-5,-11}, -{20,-5,-10}, -{20,-5,-9}, -{20,-5,-8}, -{20,-5,-7}, -{20,-5,-6}, -{20,-5,-5}, -{20,-5,-4}, -{20,-5,-3}, -{20,-5,-2}, -{20,-5,-1}, -{20,-5,0}, -{20,-5,1}, -{20,-5,2}, -{20,-5,3}, -{20,-5,4}, -{20,-5,5}, -{20,-5,6}, -{20,-5,7}, -{20,-5,8}, -{20,-5,9}, -{20,-5,10}, -{20,-5,11}, -{20,-5,12}, -{20,-5,13}, -{20,-5,14}, -{20,-5,15}, -{20,-5,16}, -{20,-5,17}, -{20,-5,18}, -{20,-5,19}, -{20,-5,20}, -{20,-5,21}, -{20,-5,22}, -{20,-5,23}, -{20,-5,24}, -{20,-5,25}, -{20,-5,26}, -{20,-5,27}, -{20,-5,28}, -{20,-4,-21}, -{20,-4,-20}, -{20,-4,-19}, -{20,-4,-18}, -{20,-4,-17}, -{20,-4,-16}, -{20,-4,-15}, -{20,-4,-14}, -{20,-4,-13}, -{20,-4,-12}, -{20,-4,-11}, -{20,-4,-10}, -{20,-4,-9}, -{20,-4,-8}, -{20,-4,-7}, -{20,-4,-6}, -{20,-4,-5}, -{20,-4,-4}, -{20,-4,-3}, -{20,-4,-2}, -{20,-4,-1}, -{20,-4,0}, -{20,-4,1}, -{20,-4,2}, -{20,-4,3}, -{20,-4,4}, -{20,-4,5}, -{20,-4,6}, -{20,-4,7}, -{20,-4,8}, -{20,-4,9}, -{20,-4,10}, -{20,-4,11}, -{20,-4,12}, -{20,-4,13}, -{20,-4,14}, -{20,-4,15}, -{20,-4,16}, -{20,-4,17}, -{20,-4,18}, -{20,-4,19}, -{20,-4,20}, -{20,-4,21}, -{20,-4,22}, -{20,-4,23}, -{20,-4,24}, -{20,-4,25}, -{20,-4,26}, -{20,-4,27}, -{20,-4,28}, -{20,-3,-22}, -{20,-3,-21}, -{20,-3,-20}, -{20,-3,-19}, -{20,-3,-18}, -{20,-3,-17}, -{20,-3,-16}, -{20,-3,-15}, -{20,-3,-14}, -{20,-3,-13}, -{20,-3,-12}, -{20,-3,-11}, -{20,-3,-10}, -{20,-3,-9}, -{20,-3,-8}, -{20,-3,-7}, -{20,-3,-6}, -{20,-3,-5}, -{20,-3,-4}, -{20,-3,-3}, -{20,-3,-2}, -{20,-3,-1}, -{20,-3,0}, -{20,-3,1}, -{20,-3,2}, -{20,-3,3}, -{20,-3,4}, -{20,-3,5}, -{20,-3,6}, -{20,-3,7}, -{20,-3,8}, -{20,-3,9}, -{20,-3,10}, -{20,-3,11}, -{20,-3,12}, -{20,-3,13}, -{20,-3,14}, -{20,-3,15}, -{20,-3,16}, -{20,-3,17}, -{20,-3,18}, -{20,-3,19}, -{20,-3,20}, -{20,-3,21}, -{20,-3,22}, -{20,-3,23}, -{20,-3,24}, -{20,-3,25}, -{20,-3,26}, -{20,-3,27}, -{20,-3,28}, -{20,-2,-23}, -{20,-2,-22}, -{20,-2,-21}, -{20,-2,-20}, -{20,-2,-19}, -{20,-2,-18}, -{20,-2,-17}, -{20,-2,-16}, -{20,-2,-15}, -{20,-2,-14}, -{20,-2,-13}, -{20,-2,-12}, -{20,-2,-11}, -{20,-2,-10}, -{20,-2,-9}, -{20,-2,-8}, -{20,-2,-7}, -{20,-2,-6}, -{20,-2,-5}, -{20,-2,-4}, -{20,-2,-3}, -{20,-2,-2}, -{20,-2,-1}, -{20,-2,0}, -{20,-2,1}, -{20,-2,2}, -{20,-2,3}, -{20,-2,4}, -{20,-2,5}, -{20,-2,6}, -{20,-2,7}, -{20,-2,8}, -{20,-2,9}, -{20,-2,10}, -{20,-2,11}, -{20,-2,12}, -{20,-2,13}, -{20,-2,14}, -{20,-2,15}, -{20,-2,16}, -{20,-2,17}, -{20,-2,18}, -{20,-2,19}, -{20,-2,20}, -{20,-2,21}, -{20,-2,22}, -{20,-2,23}, -{20,-2,24}, -{20,-2,25}, -{20,-2,26}, -{20,-2,27}, -{20,-2,28}, -{20,-1,-24}, -{20,-1,-23}, -{20,-1,-22}, -{20,-1,-21}, -{20,-1,-20}, -{20,-1,-19}, -{20,-1,-18}, -{20,-1,-17}, -{20,-1,-16}, -{20,-1,-15}, -{20,-1,-14}, -{20,-1,-13}, -{20,-1,-12}, -{20,-1,-11}, -{20,-1,-10}, -{20,-1,-9}, -{20,-1,-8}, -{20,-1,-7}, -{20,-1,-6}, -{20,-1,-5}, -{20,-1,-4}, -{20,-1,-3}, -{20,-1,-2}, -{20,-1,-1}, -{20,-1,0}, -{20,-1,1}, -{20,-1,2}, -{20,-1,3}, -{20,-1,4}, -{20,-1,5}, -{20,-1,6}, -{20,-1,7}, -{20,-1,8}, -{20,-1,9}, -{20,-1,10}, -{20,-1,11}, -{20,-1,12}, -{20,-1,13}, -{20,-1,14}, -{20,-1,15}, -{20,-1,16}, -{20,-1,17}, -{20,-1,18}, -{20,-1,19}, -{20,-1,20}, -{20,-1,21}, -{20,-1,22}, -{20,-1,23}, -{20,-1,24}, -{20,-1,25}, -{20,-1,26}, -{20,-1,27}, -{20,-1,28}, -{20,0,-26}, -{20,0,-25}, -{20,0,-24}, -{20,0,-23}, -{20,0,-22}, -{20,0,-21}, -{20,0,-20}, -{20,0,-19}, -{20,0,-18}, -{20,0,-17}, -{20,0,-16}, -{20,0,-15}, -{20,0,-14}, -{20,0,-13}, -{20,0,-12}, -{20,0,-11}, -{20,0,-10}, -{20,0,-9}, -{20,0,-8}, -{20,0,-7}, -{20,0,-6}, -{20,0,-5}, -{20,0,-4}, -{20,0,-3}, -{20,0,-2}, -{20,0,-1}, -{20,0,0}, -{20,0,1}, -{20,0,2}, -{20,0,3}, -{20,0,4}, -{20,0,5}, -{20,0,6}, -{20,0,7}, -{20,0,8}, -{20,0,9}, -{20,0,10}, -{20,0,11}, -{20,0,12}, -{20,0,13}, -{20,0,14}, -{20,0,15}, -{20,0,16}, -{20,0,17}, -{20,0,18}, -{20,0,19}, -{20,0,20}, -{20,0,21}, -{20,0,22}, -{20,0,23}, -{20,0,24}, -{20,0,25}, -{20,0,26}, -{20,0,27}, -{20,0,28}, -{20,1,-27}, -{20,1,-26}, -{20,1,-25}, -{20,1,-24}, -{20,1,-23}, -{20,1,-22}, -{20,1,-21}, -{20,1,-20}, -{20,1,-19}, -{20,1,-18}, -{20,1,-17}, -{20,1,-16}, -{20,1,-15}, -{20,1,-14}, -{20,1,-13}, -{20,1,-12}, -{20,1,-11}, -{20,1,-10}, -{20,1,-9}, -{20,1,-8}, -{20,1,-7}, -{20,1,-6}, -{20,1,-5}, -{20,1,-4}, -{20,1,-3}, -{20,1,-2}, -{20,1,-1}, -{20,1,0}, -{20,1,1}, -{20,1,2}, -{20,1,3}, -{20,1,4}, -{20,1,5}, -{20,1,6}, -{20,1,7}, -{20,1,8}, -{20,1,9}, -{20,1,10}, -{20,1,11}, -{20,1,12}, -{20,1,13}, -{20,1,14}, -{20,1,15}, -{20,1,16}, -{20,1,17}, -{20,1,18}, -{20,1,19}, -{20,1,20}, -{20,1,21}, -{20,1,22}, -{20,1,23}, -{20,1,24}, -{20,1,25}, -{20,1,26}, -{20,1,27}, -{20,1,28}, -{20,2,-28}, -{20,2,-27}, -{20,2,-26}, -{20,2,-25}, -{20,2,-24}, -{20,2,-23}, -{20,2,-22}, -{20,2,-21}, -{20,2,-20}, -{20,2,-19}, -{20,2,-18}, -{20,2,-17}, -{20,2,-16}, -{20,2,-15}, -{20,2,-14}, -{20,2,-13}, -{20,2,-12}, -{20,2,-11}, -{20,2,-10}, -{20,2,-9}, -{20,2,-8}, -{20,2,-7}, -{20,2,-6}, -{20,2,-5}, -{20,2,-4}, -{20,2,-3}, -{20,2,-2}, -{20,2,-1}, -{20,2,0}, -{20,2,1}, -{20,2,2}, -{20,2,3}, -{20,2,4}, -{20,2,5}, -{20,2,6}, -{20,2,7}, -{20,2,8}, -{20,2,9}, -{20,2,10}, -{20,2,11}, -{20,2,12}, -{20,2,13}, -{20,2,14}, -{20,2,15}, -{20,2,16}, -{20,2,17}, -{20,2,18}, -{20,2,19}, -{20,2,20}, -{20,2,21}, -{20,2,22}, -{20,2,23}, -{20,2,24}, -{20,2,25}, -{20,2,26}, -{20,2,27}, -{20,2,28}, -{20,3,-29}, -{20,3,-28}, -{20,3,-27}, -{20,3,-26}, -{20,3,-25}, -{20,3,-24}, -{20,3,-23}, -{20,3,-22}, -{20,3,-21}, -{20,3,-20}, -{20,3,-19}, -{20,3,-18}, -{20,3,-17}, -{20,3,-16}, -{20,3,-15}, -{20,3,-14}, -{20,3,-13}, -{20,3,-12}, -{20,3,-11}, -{20,3,-10}, -{20,3,-9}, -{20,3,-8}, -{20,3,-7}, -{20,3,-6}, -{20,3,-5}, -{20,3,-4}, -{20,3,-3}, -{20,3,-2}, -{20,3,-1}, -{20,3,0}, -{20,3,1}, -{20,3,2}, -{20,3,3}, -{20,3,4}, -{20,3,5}, -{20,3,6}, -{20,3,7}, -{20,3,8}, -{20,3,9}, -{20,3,10}, -{20,3,11}, -{20,3,12}, -{20,3,13}, -{20,3,14}, -{20,3,15}, -{20,3,16}, -{20,3,17}, -{20,3,18}, -{20,3,19}, -{20,3,20}, -{20,3,21}, -{20,3,22}, -{20,3,23}, -{20,3,24}, -{20,3,25}, -{20,3,26}, -{20,3,27}, -{20,3,28}, -{20,4,-30}, -{20,4,-29}, -{20,4,-28}, -{20,4,-27}, -{20,4,-26}, -{20,4,-25}, -{20,4,-24}, -{20,4,-23}, -{20,4,-22}, -{20,4,-21}, -{20,4,-20}, -{20,4,-19}, -{20,4,-18}, -{20,4,-17}, -{20,4,-16}, -{20,4,-15}, -{20,4,-14}, -{20,4,-13}, -{20,4,-12}, -{20,4,-11}, -{20,4,-10}, -{20,4,-9}, -{20,4,-8}, -{20,4,-7}, -{20,4,-6}, -{20,4,-5}, -{20,4,-4}, -{20,4,-3}, -{20,4,-2}, -{20,4,-1}, -{20,4,0}, -{20,4,1}, -{20,4,2}, -{20,4,3}, -{20,4,4}, -{20,4,5}, -{20,4,6}, -{20,4,7}, -{20,4,8}, -{20,4,9}, -{20,4,10}, -{20,4,11}, -{20,4,12}, -{20,4,13}, -{20,4,14}, -{20,4,15}, -{20,4,16}, -{20,4,17}, -{20,4,18}, -{20,4,19}, -{20,4,20}, -{20,4,21}, -{20,4,22}, -{20,4,23}, -{20,4,24}, -{20,4,25}, -{20,4,26}, -{20,4,27}, -{20,4,28}, -{20,5,-31}, -{20,5,-30}, -{20,5,-29}, -{20,5,-28}, -{20,5,-27}, -{20,5,-26}, -{20,5,-25}, -{20,5,-24}, -{20,5,-23}, -{20,5,-22}, -{20,5,-21}, -{20,5,-20}, -{20,5,-19}, -{20,5,-18}, -{20,5,-17}, -{20,5,-16}, -{20,5,-15}, -{20,5,-14}, -{20,5,-13}, -{20,5,-12}, -{20,5,-11}, -{20,5,-10}, -{20,5,-9}, -{20,5,-8}, -{20,5,-7}, -{20,5,-6}, -{20,5,-5}, -{20,5,-4}, -{20,5,-3}, -{20,5,-2}, -{20,5,-1}, -{20,5,0}, -{20,5,1}, -{20,5,2}, -{20,5,3}, -{20,5,4}, -{20,5,5}, -{20,5,6}, -{20,5,7}, -{20,5,8}, -{20,5,9}, -{20,5,10}, -{20,5,11}, -{20,5,12}, -{20,5,13}, -{20,5,14}, -{20,5,15}, -{20,5,16}, -{20,5,17}, -{20,5,18}, -{20,5,19}, -{20,5,20}, -{20,5,21}, -{20,5,22}, -{20,5,23}, -{20,5,24}, -{20,5,25}, -{20,5,26}, -{20,5,27}, -{20,5,28}, -{20,6,-32}, -{20,6,-31}, -{20,6,-30}, -{20,6,-29}, -{20,6,-28}, -{20,6,-27}, -{20,6,-26}, -{20,6,-25}, -{20,6,-24}, -{20,6,-23}, -{20,6,-22}, -{20,6,-21}, -{20,6,-20}, -{20,6,-19}, -{20,6,-18}, -{20,6,-17}, -{20,6,-16}, -{20,6,-15}, -{20,6,-14}, -{20,6,-13}, -{20,6,-12}, -{20,6,-11}, -{20,6,-10}, -{20,6,-9}, -{20,6,-8}, -{20,6,-7}, -{20,6,-6}, -{20,6,-5}, -{20,6,-4}, -{20,6,-3}, -{20,6,-2}, -{20,6,-1}, -{20,6,0}, -{20,6,1}, -{20,6,2}, -{20,6,3}, -{20,6,4}, -{20,6,5}, -{20,6,6}, -{20,6,7}, -{20,6,8}, -{20,6,9}, -{20,6,10}, -{20,6,11}, -{20,6,12}, -{20,6,13}, -{20,6,14}, -{20,6,15}, -{20,6,16}, -{20,6,17}, -{20,6,18}, -{20,6,19}, -{20,6,20}, -{20,6,21}, -{20,6,22}, -{20,6,23}, -{20,6,24}, -{20,6,25}, -{20,6,26}, -{20,6,27}, -{20,6,28}, -{20,7,-33}, -{20,7,-32}, -{20,7,-31}, -{20,7,-30}, -{20,7,-29}, -{20,7,-28}, -{20,7,-27}, -{20,7,-26}, -{20,7,-25}, -{20,7,-24}, -{20,7,-23}, -{20,7,-22}, -{20,7,-21}, -{20,7,-20}, -{20,7,-19}, -{20,7,-18}, -{20,7,-17}, -{20,7,-16}, -{20,7,-15}, -{20,7,-14}, -{20,7,-13}, -{20,7,-12}, -{20,7,-11}, -{20,7,-10}, -{20,7,-9}, -{20,7,-8}, -{20,7,-7}, -{20,7,-6}, -{20,7,-5}, -{20,7,-4}, -{20,7,-3}, -{20,7,-2}, -{20,7,-1}, -{20,7,0}, -{20,7,1}, -{20,7,2}, -{20,7,3}, -{20,7,4}, -{20,7,5}, -{20,7,6}, -{20,7,7}, -{20,7,8}, -{20,7,9}, -{20,7,10}, -{20,7,11}, -{20,7,12}, -{20,7,13}, -{20,7,14}, -{20,7,15}, -{20,7,16}, -{20,7,17}, -{20,7,18}, -{20,7,19}, -{20,7,20}, -{20,7,21}, -{20,7,22}, -{20,7,23}, -{20,7,24}, -{20,7,25}, -{20,7,26}, -{20,7,27}, -{20,7,28}, -{20,8,-34}, -{20,8,-33}, -{20,8,-32}, -{20,8,-31}, -{20,8,-30}, -{20,8,-29}, -{20,8,-28}, -{20,8,-27}, -{20,8,-26}, -{20,8,-25}, -{20,8,-24}, -{20,8,-23}, -{20,8,-22}, -{20,8,-21}, -{20,8,-20}, -{20,8,-19}, -{20,8,-18}, -{20,8,-17}, -{20,8,-16}, -{20,8,-15}, -{20,8,-14}, -{20,8,-13}, -{20,8,-12}, -{20,8,-11}, -{20,8,-10}, -{20,8,-9}, -{20,8,-8}, -{20,8,-7}, -{20,8,-6}, -{20,8,-5}, -{20,8,-4}, -{20,8,-3}, -{20,8,-2}, -{20,8,-1}, -{20,8,0}, -{20,8,1}, -{20,8,2}, -{20,8,3}, -{20,8,4}, -{20,8,5}, -{20,8,6}, -{20,8,7}, -{20,8,8}, -{20,8,9}, -{20,8,10}, -{20,8,11}, -{20,8,12}, -{20,8,13}, -{20,8,14}, -{20,8,15}, -{20,8,16}, -{20,8,17}, -{20,8,18}, -{20,8,19}, -{20,8,20}, -{20,8,21}, -{20,8,22}, -{20,8,23}, -{20,8,24}, -{20,8,25}, -{20,8,26}, -{20,8,27}, -{20,8,28}, -{20,9,-35}, -{20,9,-34}, -{20,9,-33}, -{20,9,-32}, -{20,9,-31}, -{20,9,-30}, -{20,9,-29}, -{20,9,-28}, -{20,9,-27}, -{20,9,-26}, -{20,9,-25}, -{20,9,-24}, -{20,9,-23}, -{20,9,-22}, -{20,9,-21}, -{20,9,-20}, -{20,9,-19}, -{20,9,-18}, -{20,9,-17}, -{20,9,-16}, -{20,9,-15}, -{20,9,-14}, -{20,9,-13}, -{20,9,-12}, -{20,9,-11}, -{20,9,-10}, -{20,9,-9}, -{20,9,-8}, -{20,9,-7}, -{20,9,-6}, -{20,9,-5}, -{20,9,-4}, -{20,9,-3}, -{20,9,-2}, -{20,9,-1}, -{20,9,0}, -{20,9,1}, -{20,9,2}, -{20,9,3}, -{20,9,4}, -{20,9,5}, -{20,9,6}, -{20,9,7}, -{20,9,8}, -{20,9,9}, -{20,9,10}, -{20,9,11}, -{20,9,12}, -{20,9,13}, -{20,9,14}, -{20,9,15}, -{20,9,16}, -{20,9,17}, -{20,9,18}, -{20,9,19}, -{20,9,20}, -{20,9,21}, -{20,9,22}, -{20,9,23}, -{20,9,24}, -{20,9,25}, -{20,9,26}, -{20,9,27}, -{20,9,28}, -{20,10,-36}, -{20,10,-35}, -{20,10,-34}, -{20,10,-33}, -{20,10,-32}, -{20,10,-31}, -{20,10,-30}, -{20,10,-29}, -{20,10,-28}, -{20,10,-27}, -{20,10,-26}, -{20,10,-25}, -{20,10,-24}, -{20,10,-23}, -{20,10,-22}, -{20,10,-21}, -{20,10,-20}, -{20,10,-19}, -{20,10,-18}, -{20,10,-17}, -{20,10,-16}, -{20,10,-15}, -{20,10,-14}, -{20,10,-13}, -{20,10,-12}, -{20,10,-11}, -{20,10,-10}, -{20,10,-9}, -{20,10,-8}, -{20,10,-7}, -{20,10,-6}, -{20,10,-5}, -{20,10,-4}, -{20,10,-3}, -{20,10,-2}, -{20,10,-1}, -{20,10,0}, -{20,10,1}, -{20,10,2}, -{20,10,3}, -{20,10,4}, -{20,10,5}, -{20,10,6}, -{20,10,7}, -{20,10,8}, -{20,10,9}, -{20,10,10}, -{20,10,11}, -{20,10,12}, -{20,10,13}, -{20,10,14}, -{20,10,15}, -{20,10,16}, -{20,10,17}, -{20,10,18}, -{20,10,19}, -{20,10,20}, -{20,10,21}, -{20,10,22}, -{20,10,23}, -{20,10,24}, -{20,10,25}, -{20,10,26}, -{20,10,27}, -{20,10,28}, -{20,11,-37}, -{20,11,-36}, -{20,11,-35}, -{20,11,-34}, -{20,11,-33}, -{20,11,-32}, -{20,11,-31}, -{20,11,-30}, -{20,11,-29}, -{20,11,-28}, -{20,11,-27}, -{20,11,-26}, -{20,11,-25}, -{20,11,-24}, -{20,11,-23}, -{20,11,-22}, -{20,11,-21}, -{20,11,-20}, -{20,11,-19}, -{20,11,-18}, -{20,11,-17}, -{20,11,-16}, -{20,11,-15}, -{20,11,-14}, -{20,11,-13}, -{20,11,-12}, -{20,11,-11}, -{20,11,-10}, -{20,11,-9}, -{20,11,-8}, -{20,11,-7}, -{20,11,-6}, -{20,11,-5}, -{20,11,-4}, -{20,11,-3}, -{20,11,-2}, -{20,11,-1}, -{20,11,0}, -{20,11,1}, -{20,11,2}, -{20,11,3}, -{20,11,4}, -{20,11,5}, -{20,11,6}, -{20,11,7}, -{20,11,8}, -{20,11,9}, -{20,11,10}, -{20,11,11}, -{20,11,12}, -{20,11,13}, -{20,11,14}, -{20,11,15}, -{20,11,16}, -{20,11,17}, -{20,11,18}, -{20,11,19}, -{20,11,20}, -{20,11,21}, -{20,11,22}, -{20,11,23}, -{20,11,24}, -{20,11,25}, -{20,11,26}, -{20,11,27}, -{20,11,28}, -{20,11,29}, -{20,12,-38}, -{20,12,-37}, -{20,12,-36}, -{20,12,-35}, -{20,12,-34}, -{20,12,-33}, -{20,12,-32}, -{20,12,-31}, -{20,12,-30}, -{20,12,-29}, -{20,12,-28}, -{20,12,-27}, -{20,12,-26}, -{20,12,-25}, -{20,12,-24}, -{20,12,-23}, -{20,12,-22}, -{20,12,-21}, -{20,12,-20}, -{20,12,-19}, -{20,12,-18}, -{20,12,-17}, -{20,12,-16}, -{20,12,-15}, -{20,12,-14}, -{20,12,-13}, -{20,12,-12}, -{20,12,-11}, -{20,12,-10}, -{20,12,-9}, -{20,12,-8}, -{20,12,-7}, -{20,12,-6}, -{20,12,-5}, -{20,12,-4}, -{20,12,-3}, -{20,12,-2}, -{20,12,-1}, -{20,12,0}, -{20,12,1}, -{20,12,2}, -{20,12,3}, -{20,12,4}, -{20,12,5}, -{20,12,6}, -{20,12,7}, -{20,12,8}, -{20,12,9}, -{20,12,10}, -{20,12,11}, -{20,12,12}, -{20,12,13}, -{20,12,14}, -{20,12,15}, -{20,12,16}, -{20,12,17}, -{20,12,18}, -{20,12,19}, -{20,12,20}, -{20,12,21}, -{20,12,22}, -{20,12,23}, -{20,12,24}, -{20,12,25}, -{20,12,26}, -{20,12,27}, -{20,12,28}, -{20,12,29}, -{20,13,-39}, -{20,13,-38}, -{20,13,-37}, -{20,13,-36}, -{20,13,-35}, -{20,13,-34}, -{20,13,-33}, -{20,13,-32}, -{20,13,-31}, -{20,13,-30}, -{20,13,-29}, -{20,13,-28}, -{20,13,-27}, -{20,13,-26}, -{20,13,-25}, -{20,13,-24}, -{20,13,-23}, -{20,13,-22}, -{20,13,-21}, -{20,13,-20}, -{20,13,-19}, -{20,13,-18}, -{20,13,-17}, -{20,13,-16}, -{20,13,-15}, -{20,13,-14}, -{20,13,-13}, -{20,13,-12}, -{20,13,-11}, -{20,13,-10}, -{20,13,-9}, -{20,13,-8}, -{20,13,-7}, -{20,13,-6}, -{20,13,-5}, -{20,13,-4}, -{20,13,-3}, -{20,13,-2}, -{20,13,-1}, -{20,13,0}, -{20,13,1}, -{20,13,2}, -{20,13,3}, -{20,13,4}, -{20,13,5}, -{20,13,6}, -{20,13,7}, -{20,13,8}, -{20,13,9}, -{20,13,10}, -{20,13,11}, -{20,13,12}, -{20,13,13}, -{20,13,14}, -{20,13,15}, -{20,13,16}, -{20,13,17}, -{20,13,18}, -{20,13,19}, -{20,13,20}, -{20,13,21}, -{20,13,22}, -{20,13,23}, -{20,13,24}, -{20,13,25}, -{20,13,26}, -{20,13,27}, -{20,13,28}, -{20,13,29}, -{20,14,-40}, -{20,14,-39}, -{20,14,-38}, -{20,14,-37}, -{20,14,-36}, -{20,14,-35}, -{20,14,-34}, -{20,14,-33}, -{20,14,-32}, -{20,14,-31}, -{20,14,-30}, -{20,14,-29}, -{20,14,-28}, -{20,14,-27}, -{20,14,-26}, -{20,14,-25}, -{20,14,-24}, -{20,14,-23}, -{20,14,-22}, -{20,14,-21}, -{20,14,-20}, -{20,14,-19}, -{20,14,-18}, -{20,14,-17}, -{20,14,-16}, -{20,14,-15}, -{20,14,-14}, -{20,14,-13}, -{20,14,-12}, -{20,14,-11}, -{20,14,-10}, -{20,14,-9}, -{20,14,-8}, -{20,14,-7}, -{20,14,-6}, -{20,14,-5}, -{20,14,-4}, -{20,14,-3}, -{20,14,-2}, -{20,14,-1}, -{20,14,0}, -{20,14,1}, -{20,14,2}, -{20,14,3}, -{20,14,4}, -{20,14,5}, -{20,14,6}, -{20,14,7}, -{20,14,8}, -{20,14,9}, -{20,14,10}, -{20,14,11}, -{20,14,12}, -{20,14,13}, -{20,14,14}, -{20,14,15}, -{20,14,16}, -{20,14,17}, -{20,14,18}, -{20,14,19}, -{20,14,20}, -{20,14,21}, -{20,14,22}, -{20,14,23}, -{20,14,24}, -{20,14,25}, -{20,14,26}, -{20,14,27}, -{20,14,28}, -{20,14,29}, -{20,15,-41}, -{20,15,-40}, -{20,15,-39}, -{20,15,-38}, -{20,15,-37}, -{20,15,-36}, -{20,15,-35}, -{20,15,-34}, -{20,15,-33}, -{20,15,-32}, -{20,15,-31}, -{20,15,-30}, -{20,15,-29}, -{20,15,-28}, -{20,15,-27}, -{20,15,-26}, -{20,15,-25}, -{20,15,-24}, -{20,15,-23}, -{20,15,-22}, -{20,15,-21}, -{20,15,-20}, -{20,15,-19}, -{20,15,-18}, -{20,15,-17}, -{20,15,-16}, -{20,15,-15}, -{20,15,-14}, -{20,15,-13}, -{20,15,-12}, -{20,15,-11}, -{20,15,-10}, -{20,15,-9}, -{20,15,-8}, -{20,15,-7}, -{20,15,-6}, -{20,15,-5}, -{20,15,-4}, -{20,15,-3}, -{20,15,-2}, -{20,15,-1}, -{20,15,0}, -{20,15,1}, -{20,15,2}, -{20,15,3}, -{20,15,4}, -{20,15,5}, -{20,15,6}, -{20,15,7}, -{20,15,8}, -{20,15,9}, -{20,15,10}, -{20,15,11}, -{20,15,12}, -{20,15,13}, -{20,15,14}, -{20,15,15}, -{20,15,16}, -{20,15,17}, -{20,15,18}, -{20,15,19}, -{20,15,20}, -{20,15,21}, -{20,15,22}, -{20,15,23}, -{20,15,24}, -{20,15,25}, -{20,15,26}, -{20,15,27}, -{20,15,28}, -{20,15,29}, -{20,16,-42}, -{20,16,-41}, -{20,16,-40}, -{20,16,-39}, -{20,16,-38}, -{20,16,-37}, -{20,16,-36}, -{20,16,-35}, -{20,16,-34}, -{20,16,-33}, -{20,16,-32}, -{20,16,-31}, -{20,16,-30}, -{20,16,-29}, -{20,16,-28}, -{20,16,-27}, -{20,16,-26}, -{20,16,-25}, -{20,16,-24}, -{20,16,-23}, -{20,16,-22}, -{20,16,-21}, -{20,16,-20}, -{20,16,-19}, -{20,16,-18}, -{20,16,-17}, -{20,16,-16}, -{20,16,-15}, -{20,16,-14}, -{20,16,-13}, -{20,16,-12}, -{20,16,-11}, -{20,16,-10}, -{20,16,-9}, -{20,16,-8}, -{20,16,-7}, -{20,16,-6}, -{20,16,-5}, -{20,16,-4}, -{20,16,-3}, -{20,16,-2}, -{20,16,-1}, -{20,16,0}, -{20,16,1}, -{20,16,2}, -{20,16,3}, -{20,16,4}, -{20,16,5}, -{20,16,6}, -{20,16,7}, -{20,16,8}, -{20,16,9}, -{20,16,10}, -{20,16,11}, -{20,16,12}, -{20,16,13}, -{20,16,14}, -{20,16,15}, -{20,16,16}, -{20,16,17}, -{20,16,18}, -{20,16,19}, -{20,16,20}, -{20,16,21}, -{20,16,22}, -{20,16,23}, -{20,16,24}, -{20,16,25}, -{20,16,26}, -{20,16,27}, -{20,16,28}, -{20,16,29}, -{20,17,-43}, -{20,17,-42}, -{20,17,-41}, -{20,17,-40}, -{20,17,-39}, -{20,17,-38}, -{20,17,-37}, -{20,17,-36}, -{20,17,-35}, -{20,17,-34}, -{20,17,-33}, -{20,17,-32}, -{20,17,-31}, -{20,17,-30}, -{20,17,-29}, -{20,17,-28}, -{20,17,-27}, -{20,17,-26}, -{20,17,-25}, -{20,17,-24}, -{20,17,-23}, -{20,17,-22}, -{20,17,-21}, -{20,17,-20}, -{20,17,-19}, -{20,17,-18}, -{20,17,-17}, -{20,17,-16}, -{20,17,-15}, -{20,17,-14}, -{20,17,-13}, -{20,17,-12}, -{20,17,-11}, -{20,17,-10}, -{20,17,-9}, -{20,17,-8}, -{20,17,-7}, -{20,17,-6}, -{20,17,-5}, -{20,17,-4}, -{20,17,-3}, -{20,17,-2}, -{20,17,-1}, -{20,17,0}, -{20,17,1}, -{20,17,2}, -{20,17,3}, -{20,17,4}, -{20,17,5}, -{20,17,6}, -{20,17,7}, -{20,17,8}, -{20,17,9}, -{20,17,10}, -{20,17,11}, -{20,17,12}, -{20,17,13}, -{20,17,14}, -{20,17,15}, -{20,17,16}, -{20,17,17}, -{20,17,18}, -{20,17,19}, -{20,17,20}, -{20,17,21}, -{20,17,22}, -{20,17,23}, -{20,17,24}, -{20,17,25}, -{20,17,26}, -{20,17,27}, -{20,17,28}, -{20,17,29}, -{20,18,-44}, -{20,18,-43}, -{20,18,-42}, -{20,18,-41}, -{20,18,-40}, -{20,18,-39}, -{20,18,-38}, -{20,18,-37}, -{20,18,-36}, -{20,18,-35}, -{20,18,-34}, -{20,18,-33}, -{20,18,-32}, -{20,18,-31}, -{20,18,-30}, -{20,18,-29}, -{20,18,-28}, -{20,18,-27}, -{20,18,-26}, -{20,18,-25}, -{20,18,-24}, -{20,18,-23}, -{20,18,-22}, -{20,18,-21}, -{20,18,-20}, -{20,18,-19}, -{20,18,-18}, -{20,18,-17}, -{20,18,-16}, -{20,18,-15}, -{20,18,-14}, -{20,18,-13}, -{20,18,-12}, -{20,18,-11}, -{20,18,-10}, -{20,18,-9}, -{20,18,-8}, -{20,18,-7}, -{20,18,-6}, -{20,18,-5}, -{20,18,-4}, -{20,18,-3}, -{20,18,-2}, -{20,18,-1}, -{20,18,0}, -{20,18,1}, -{20,18,2}, -{20,18,3}, -{20,18,4}, -{20,18,5}, -{20,18,6}, -{20,18,7}, -{20,18,8}, -{20,18,9}, -{20,18,10}, -{20,18,11}, -{20,18,12}, -{20,18,13}, -{20,18,14}, -{20,18,15}, -{20,18,16}, -{20,18,17}, -{20,18,18}, -{20,18,19}, -{20,18,20}, -{20,18,21}, -{20,18,22}, -{20,18,23}, -{20,18,24}, -{20,18,25}, -{20,18,26}, -{20,18,27}, -{20,18,28}, -{20,18,29}, -{20,19,-45}, -{20,19,-44}, -{20,19,-43}, -{20,19,-42}, -{20,19,-41}, -{20,19,-40}, -{20,19,-39}, -{20,19,-38}, -{20,19,-37}, -{20,19,-36}, -{20,19,-35}, -{20,19,-34}, -{20,19,-33}, -{20,19,-32}, -{20,19,-31}, -{20,19,-30}, -{20,19,-29}, -{20,19,-28}, -{20,19,-27}, -{20,19,-26}, -{20,19,-25}, -{20,19,-24}, -{20,19,-23}, -{20,19,-22}, -{20,19,-21}, -{20,19,-20}, -{20,19,-19}, -{20,19,-18}, -{20,19,-17}, -{20,19,-16}, -{20,19,-15}, -{20,19,-14}, -{20,19,-13}, -{20,19,-12}, -{20,19,-11}, -{20,19,-10}, -{20,19,-9}, -{20,19,-8}, -{20,19,-7}, -{20,19,-6}, -{20,19,-5}, -{20,19,-4}, -{20,19,-3}, -{20,19,-2}, -{20,19,-1}, -{20,19,0}, -{20,19,1}, -{20,19,2}, -{20,19,3}, -{20,19,4}, -{20,19,5}, -{20,19,6}, -{20,19,7}, -{20,19,8}, -{20,19,9}, -{20,19,10}, -{20,19,11}, -{20,19,12}, -{20,19,13}, -{20,19,14}, -{20,19,15}, -{20,19,16}, -{20,19,17}, -{20,19,18}, -{20,19,19}, -{20,19,20}, -{20,19,21}, -{20,19,22}, -{20,19,23}, -{20,19,24}, -{20,19,25}, -{20,19,26}, -{20,19,27}, -{20,19,28}, -{20,19,29}, -{20,20,-46}, -{20,20,-45}, -{20,20,-44}, -{20,20,-43}, -{20,20,-42}, -{20,20,-41}, -{20,20,-40}, -{20,20,-39}, -{20,20,-38}, -{20,20,-37}, -{20,20,-36}, -{20,20,-35}, -{20,20,-34}, -{20,20,-33}, -{20,20,-32}, -{20,20,-31}, -{20,20,-30}, -{20,20,-29}, -{20,20,-28}, -{20,20,-27}, -{20,20,-26}, -{20,20,-25}, -{20,20,-24}, -{20,20,-23}, -{20,20,-22}, -{20,20,-21}, -{20,20,-20}, -{20,20,-19}, -{20,20,-18}, -{20,20,-17}, -{20,20,-16}, -{20,20,-15}, -{20,20,-14}, -{20,20,-13}, -{20,20,-12}, -{20,20,-11}, -{20,20,-10}, -{20,20,-9}, -{20,20,-8}, -{20,20,-7}, -{20,20,-6}, -{20,20,-5}, -{20,20,-4}, -{20,20,-3}, -{20,20,-2}, -{20,20,-1}, -{20,20,0}, -{20,20,1}, -{20,20,2}, -{20,20,3}, -{20,20,4}, -{20,20,5}, -{20,20,6}, -{20,20,7}, -{20,20,8}, -{20,20,9}, -{20,20,10}, -{20,20,11}, -{20,20,12}, -{20,20,13}, -{20,20,14}, -{20,20,15}, -{20,20,16}, -{20,20,17}, -{20,20,18}, -{20,20,19}, -{20,20,20}, -{20,20,21}, -{20,20,22}, -{20,20,23}, -{20,20,24}, -{20,20,25}, -{20,20,26}, -{20,20,27}, -{20,20,28}, -{20,20,29}, -{20,21,-47}, -{20,21,-46}, -{20,21,-45}, -{20,21,-44}, -{20,21,-43}, -{20,21,-42}, -{20,21,-41}, -{20,21,-40}, -{20,21,-39}, -{20,21,-38}, -{20,21,-37}, -{20,21,-36}, -{20,21,-35}, -{20,21,-34}, -{20,21,-33}, -{20,21,-32}, -{20,21,-31}, -{20,21,-30}, -{20,21,-29}, -{20,21,-28}, -{20,21,-27}, -{20,21,-26}, -{20,21,-25}, -{20,21,-24}, -{20,21,-23}, -{20,21,-22}, -{20,21,-21}, -{20,21,-20}, -{20,21,-19}, -{20,21,-18}, -{20,21,-17}, -{20,21,-16}, -{20,21,-15}, -{20,21,-14}, -{20,21,-13}, -{20,21,-12}, -{20,21,-11}, -{20,21,-10}, -{20,21,-9}, -{20,21,-8}, -{20,21,-7}, -{20,21,-6}, -{20,21,-5}, -{20,21,-4}, -{20,21,-3}, -{20,21,-2}, -{20,21,-1}, -{20,21,0}, -{20,21,1}, -{20,21,2}, -{20,21,3}, -{20,21,4}, -{20,21,5}, -{20,21,6}, -{20,21,7}, -{20,21,8}, -{20,21,9}, -{20,21,10}, -{20,21,11}, -{20,21,12}, -{20,21,13}, -{20,21,14}, -{20,21,15}, -{20,21,16}, -{20,21,17}, -{20,21,18}, -{20,21,19}, -{20,21,20}, -{20,21,21}, -{20,21,22}, -{20,21,23}, -{20,21,24}, -{20,21,25}, -{20,21,26}, -{20,21,27}, -{20,21,28}, -{20,21,29}, -{20,22,-48}, -{20,22,-47}, -{20,22,-46}, -{20,22,-45}, -{20,22,-44}, -{20,22,-43}, -{20,22,-42}, -{20,22,-41}, -{20,22,-40}, -{20,22,-39}, -{20,22,-38}, -{20,22,-37}, -{20,22,-36}, -{20,22,-35}, -{20,22,-34}, -{20,22,-33}, -{20,22,-32}, -{20,22,-31}, -{20,22,-30}, -{20,22,-29}, -{20,22,-28}, -{20,22,-27}, -{20,22,-26}, -{20,22,-25}, -{20,22,-24}, -{20,22,-23}, -{20,22,-22}, -{20,22,-21}, -{20,22,-20}, -{20,22,-19}, -{20,22,-18}, -{20,22,-17}, -{20,22,-16}, -{20,22,-15}, -{20,22,-14}, -{20,22,-13}, -{20,22,-12}, -{20,22,-11}, -{20,22,-10}, -{20,22,-9}, -{20,22,-8}, -{20,22,-7}, -{20,22,-6}, -{20,22,-5}, -{20,22,-4}, -{20,22,-3}, -{20,22,-2}, -{20,22,-1}, -{20,22,0}, -{20,22,1}, -{20,22,2}, -{20,22,3}, -{20,22,4}, -{20,22,5}, -{20,22,6}, -{20,22,7}, -{20,22,8}, -{20,22,9}, -{20,22,10}, -{20,22,11}, -{20,22,12}, -{20,22,13}, -{20,22,14}, -{20,22,15}, -{20,22,16}, -{20,22,17}, -{20,22,18}, -{20,22,19}, -{20,22,20}, -{20,22,21}, -{20,22,22}, -{20,22,23}, -{20,22,24}, -{20,22,25}, -{20,22,26}, -{20,22,27}, -{20,22,28}, -{20,22,29}, -{20,23,-49}, -{20,23,-48}, -{20,23,-47}, -{20,23,-46}, -{20,23,-45}, -{20,23,-44}, -{20,23,-43}, -{20,23,-42}, -{20,23,-41}, -{20,23,-40}, -{20,23,-39}, -{20,23,-38}, -{20,23,-37}, -{20,23,-36}, -{20,23,-35}, -{20,23,-34}, -{20,23,-33}, -{20,23,-32}, -{20,23,-31}, -{20,23,-30}, -{20,23,-29}, -{20,23,-28}, -{20,23,-27}, -{20,23,-26}, -{20,23,-25}, -{20,23,-24}, -{20,23,-23}, -{20,23,-22}, -{20,23,-21}, -{20,23,-20}, -{20,23,-19}, -{20,23,-18}, -{20,23,-17}, -{20,23,-16}, -{20,23,-15}, -{20,23,-14}, -{20,23,-13}, -{20,23,-12}, -{20,23,-11}, -{20,23,-10}, -{20,23,-9}, -{20,23,-8}, -{20,23,-7}, -{20,23,-6}, -{20,23,-5}, -{20,23,-4}, -{20,23,-3}, -{20,23,-2}, -{20,23,-1}, -{20,23,0}, -{20,23,1}, -{20,23,2}, -{20,23,3}, -{20,23,4}, -{20,23,5}, -{20,23,6}, -{20,23,7}, -{20,23,8}, -{20,23,9}, -{20,23,10}, -{20,23,11}, -{20,23,12}, -{20,23,13}, -{20,23,14}, -{20,23,15}, -{20,23,16}, -{20,23,17}, -{20,23,18}, -{20,23,19}, -{20,23,20}, -{20,23,21}, -{20,23,22}, -{20,23,23}, -{20,23,24}, -{20,23,25}, -{20,23,26}, -{20,23,27}, -{20,23,28}, -{20,23,29}, -{20,24,-50}, -{20,24,-49}, -{20,24,-48}, -{20,24,-47}, -{20,24,-46}, -{20,24,-45}, -{20,24,-44}, -{20,24,-43}, -{20,24,-42}, -{20,24,-41}, -{20,24,-40}, -{20,24,-39}, -{20,24,-38}, -{20,24,-37}, -{20,24,-36}, -{20,24,-35}, -{20,24,-34}, -{20,24,-33}, -{20,24,-32}, -{20,24,-31}, -{20,24,-30}, -{20,24,-29}, -{20,24,-28}, -{20,24,-27}, -{20,24,-26}, -{20,24,-25}, -{20,24,-24}, -{20,24,-23}, -{20,24,-22}, -{20,24,-21}, -{20,24,-20}, -{20,24,-19}, -{20,24,-18}, -{20,24,-17}, -{20,24,-16}, -{20,24,-15}, -{20,24,-14}, -{20,24,-13}, -{20,24,-12}, -{20,24,-11}, -{20,24,-10}, -{20,24,-9}, -{20,24,-8}, -{20,24,-7}, -{20,24,-6}, -{20,24,-5}, -{20,24,-4}, -{20,24,-3}, -{20,24,-2}, -{20,24,-1}, -{20,24,0}, -{20,24,1}, -{20,24,2}, -{20,24,3}, -{20,24,4}, -{20,24,5}, -{20,24,6}, -{20,24,7}, -{20,24,8}, -{20,24,9}, -{20,24,10}, -{20,24,11}, -{20,24,12}, -{20,24,13}, -{20,24,14}, -{20,24,15}, -{20,24,16}, -{20,24,17}, -{20,24,18}, -{20,24,19}, -{20,24,20}, -{20,24,21}, -{20,24,22}, -{20,24,23}, -{20,24,24}, -{20,24,25}, -{20,24,26}, -{20,24,27}, -{20,24,28}, -{20,24,29}, -{20,25,-51}, -{20,25,-50}, -{20,25,-49}, -{20,25,-48}, -{20,25,-47}, -{20,25,-46}, -{20,25,-45}, -{20,25,-44}, -{20,25,-43}, -{20,25,-42}, -{20,25,-41}, -{20,25,-40}, -{20,25,-39}, -{20,25,-38}, -{20,25,-37}, -{20,25,-36}, -{20,25,-35}, -{20,25,-34}, -{20,25,-33}, -{20,25,-32}, -{20,25,-31}, -{20,25,-30}, -{20,25,-29}, -{20,25,-28}, -{20,25,-27}, -{20,25,-26}, -{20,25,-25}, -{20,25,-24}, -{20,25,-23}, -{20,25,-22}, -{20,25,-21}, -{20,25,-20}, -{20,25,-19}, -{20,25,-18}, -{20,25,-17}, -{20,25,-16}, -{20,25,-15}, -{20,25,-14}, -{20,25,-13}, -{20,25,-12}, -{20,25,-11}, -{20,25,-10}, -{20,25,-9}, -{20,25,-8}, -{20,25,-7}, -{20,25,-6}, -{20,25,-5}, -{20,25,-4}, -{20,25,-3}, -{20,25,-2}, -{20,25,-1}, -{20,25,0}, -{20,25,1}, -{20,25,2}, -{20,25,3}, -{20,25,4}, -{20,25,5}, -{20,25,6}, -{20,25,7}, -{20,25,8}, -{20,25,9}, -{20,25,10}, -{20,25,11}, -{20,25,12}, -{20,25,13}, -{20,25,14}, -{20,25,15}, -{20,25,16}, -{20,25,17}, -{20,25,18}, -{20,25,19}, -{20,25,20}, -{20,25,21}, -{20,25,22}, -{20,25,23}, -{20,25,24}, -{20,25,25}, -{20,25,26}, -{20,25,27}, -{20,25,28}, -{20,25,29}, -{20,26,-52}, -{20,26,-51}, -{20,26,-50}, -{20,26,-49}, -{20,26,-48}, -{20,26,-47}, -{20,26,-46}, -{20,26,-45}, -{20,26,-44}, -{20,26,-43}, -{20,26,-42}, -{20,26,-41}, -{20,26,-40}, -{20,26,-39}, -{20,26,-38}, -{20,26,-37}, -{20,26,-36}, -{20,26,-35}, -{20,26,-34}, -{20,26,-33}, -{20,26,-32}, -{20,26,-31}, -{20,26,-30}, -{20,26,-29}, -{20,26,-28}, -{20,26,-27}, -{20,26,-26}, -{20,26,-25}, -{20,26,-24}, -{20,26,-23}, -{20,26,-22}, -{20,26,-21}, -{20,26,-20}, -{20,26,-19}, -{20,26,-18}, -{20,26,-17}, -{20,26,-16}, -{20,26,-15}, -{20,26,-14}, -{20,26,-13}, -{20,26,-12}, -{20,26,-11}, -{20,26,-10}, -{20,26,-9}, -{20,26,-8}, -{20,26,-7}, -{20,26,-6}, -{20,26,-5}, -{20,26,-4}, -{20,26,-3}, -{20,26,-2}, -{20,26,-1}, -{20,26,0}, -{20,26,1}, -{20,26,2}, -{20,26,3}, -{20,26,4}, -{20,26,5}, -{20,26,6}, -{20,26,7}, -{20,26,8}, -{20,26,9}, -{20,26,10}, -{20,26,11}, -{20,26,12}, -{20,26,13}, -{20,26,14}, -{20,26,15}, -{20,26,16}, -{20,26,17}, -{20,26,18}, -{20,26,19}, -{20,26,20}, -{20,26,21}, -{20,26,22}, -{20,26,23}, -{20,26,24}, -{20,26,25}, -{20,26,26}, -{20,26,27}, -{20,26,28}, -{20,26,29}, -{20,27,-53}, -{20,27,-52}, -{20,27,-51}, -{20,27,-50}, -{20,27,-49}, -{20,27,-48}, -{20,27,-47}, -{20,27,-46}, -{20,27,-45}, -{20,27,-44}, -{20,27,-43}, -{20,27,-42}, -{20,27,-41}, -{20,27,-40}, -{20,27,-39}, -{20,27,-38}, -{20,27,-37}, -{20,27,-36}, -{20,27,-35}, -{20,27,-34}, -{20,27,-33}, -{20,27,-32}, -{20,27,-31}, -{20,27,-30}, -{20,27,-29}, -{20,27,-28}, -{20,27,-27}, -{20,27,-26}, -{20,27,-25}, -{20,27,-24}, -{20,27,-23}, -{20,27,-22}, -{20,27,-21}, -{20,27,-20}, -{20,27,-19}, -{20,27,-18}, -{20,27,-17}, -{20,27,-16}, -{20,27,-15}, -{20,27,-14}, -{20,27,-13}, -{20,27,-12}, -{20,27,-11}, -{20,27,-10}, -{20,27,-9}, -{20,27,-8}, -{20,27,-7}, -{20,27,-6}, -{20,27,-5}, -{20,27,-4}, -{20,27,-3}, -{20,27,-2}, -{20,27,-1}, -{20,27,0}, -{20,27,1}, -{20,27,2}, -{20,27,3}, -{20,27,4}, -{20,27,5}, -{20,27,6}, -{20,27,7}, -{20,27,8}, -{20,27,9}, -{20,27,10}, -{20,27,11}, -{20,27,12}, -{20,27,13}, -{20,27,14}, -{20,27,15}, -{20,27,16}, -{20,27,17}, -{20,27,18}, -{20,27,19}, -{20,27,20}, -{20,27,21}, -{20,27,22}, -{20,27,23}, -{20,27,24}, -{20,27,25}, -{20,27,26}, -{20,27,27}, -{20,27,28}, -{20,27,29}, -{20,28,-53}, -{20,28,-52}, -{20,28,-51}, -{20,28,-50}, -{20,28,-49}, -{20,28,-48}, -{20,28,-47}, -{20,28,-46}, -{20,28,-45}, -{20,28,-44}, -{20,28,-43}, -{20,28,-42}, -{20,28,-41}, -{20,28,-40}, -{20,28,-39}, -{20,28,-38}, -{20,28,-37}, -{20,28,-36}, -{20,28,-35}, -{20,28,-34}, -{20,28,-33}, -{20,28,-32}, -{20,28,-31}, -{20,28,-30}, -{20,28,-29}, -{20,28,-28}, -{20,28,-27}, -{20,28,-26}, -{20,28,-25}, -{20,28,-24}, -{20,28,-23}, -{20,28,-22}, -{20,28,-21}, -{20,28,-20}, -{20,28,-19}, -{20,28,-18}, -{20,28,-17}, -{20,28,-16}, -{20,28,-15}, -{20,28,-14}, -{20,28,-13}, -{20,28,-12}, -{20,28,-11}, -{20,28,-10}, -{20,28,-9}, -{20,28,-8}, -{20,28,-7}, -{20,28,-6}, -{20,28,-5}, -{20,28,-4}, -{20,28,-3}, -{20,28,-2}, -{20,28,-1}, -{20,28,0}, -{20,28,1}, -{20,28,2}, -{20,28,3}, -{20,28,4}, -{20,28,5}, -{20,28,6}, -{20,28,7}, -{20,28,8}, -{20,28,9}, -{20,28,10}, -{20,28,11}, -{20,28,12}, -{20,28,13}, -{20,28,14}, -{20,28,15}, -{20,28,16}, -{20,28,17}, -{20,28,18}, -{20,28,19}, -{20,28,20}, -{20,28,21}, -{20,28,22}, -{20,28,23}, -{20,28,24}, -{20,28,25}, -{20,28,26}, -{20,28,27}, -{20,28,28}, -{20,28,29}, -{20,29,-54}, -{20,29,-53}, -{20,29,-52}, -{20,29,-51}, -{20,29,-50}, -{20,29,-49}, -{20,29,-48}, -{20,29,-47}, -{20,29,-46}, -{20,29,-45}, -{20,29,-44}, -{20,29,-43}, -{20,29,-42}, -{20,29,-41}, -{20,29,-40}, -{20,29,-39}, -{20,29,-38}, -{20,29,-37}, -{20,29,-36}, -{20,29,-35}, -{20,29,-34}, -{20,29,-33}, -{20,29,-32}, -{20,29,-31}, -{20,29,-30}, -{20,29,-29}, -{20,29,-28}, -{20,29,-27}, -{20,29,-26}, -{20,29,-25}, -{20,29,-24}, -{20,29,-23}, -{20,29,-22}, -{20,29,-21}, -{20,29,-20}, -{20,29,-19}, -{20,29,-18}, -{20,29,-17}, -{20,29,-16}, -{20,29,-15}, -{20,29,-14}, -{20,29,-13}, -{20,29,-12}, -{20,29,-11}, -{20,29,-10}, -{20,29,-9}, -{20,29,-8}, -{20,29,-7}, -{20,29,-6}, -{20,29,-5}, -{20,29,-4}, -{20,29,-3}, -{20,29,-2}, -{20,29,-1}, -{20,29,0}, -{20,29,1}, -{20,29,2}, -{20,29,3}, -{20,29,4}, -{20,29,5}, -{20,29,6}, -{20,29,7}, -{20,29,8}, -{20,29,9}, -{20,29,10}, -{20,29,11}, -{20,29,12}, -{20,29,13}, -{20,29,14}, -{20,29,15}, -{20,29,16}, -{20,29,17}, -{20,29,18}, -{20,29,19}, -{20,29,20}, -{20,29,21}, -{20,29,22}, -{20,29,23}, -{20,29,24}, -{20,29,25}, -{20,29,26}, -{20,29,27}, -{20,29,28}, -{20,29,29}, -{20,29,30}, -{20,30,-55}, -{20,30,-54}, -{20,30,-53}, -{20,30,-52}, -{20,30,-51}, -{20,30,-50}, -{20,30,-49}, -{20,30,-48}, -{20,30,-47}, -{20,30,-46}, -{20,30,-45}, -{20,30,-44}, -{20,30,-43}, -{20,30,-42}, -{20,30,-41}, -{20,30,-40}, -{20,30,-39}, -{20,30,-38}, -{20,30,-37}, -{20,30,-36}, -{20,30,-35}, -{20,30,-34}, -{20,30,-33}, -{20,30,-32}, -{20,30,-31}, -{20,30,-30}, -{20,30,-29}, -{20,30,-28}, -{20,30,-27}, -{20,30,-26}, -{20,30,-25}, -{20,30,-24}, -{20,30,-23}, -{20,30,-22}, -{20,30,-21}, -{20,30,-20}, -{20,30,-19}, -{20,30,-18}, -{20,30,-17}, -{20,30,-16}, -{20,30,-15}, -{20,30,-14}, -{20,30,-13}, -{20,30,-12}, -{20,30,-11}, -{20,30,-10}, -{20,30,-9}, -{20,30,-8}, -{20,30,-7}, -{20,30,-6}, -{20,30,-5}, -{20,30,-4}, -{20,30,-3}, -{20,30,-2}, -{20,30,-1}, -{20,30,0}, -{20,30,1}, -{20,30,2}, -{20,30,3}, -{20,30,4}, -{20,30,5}, -{20,30,6}, -{20,30,7}, -{20,30,8}, -{20,30,9}, -{20,30,10}, -{20,30,11}, -{20,30,12}, -{20,30,13}, -{20,30,14}, -{20,30,15}, -{20,30,16}, -{20,30,17}, -{20,30,18}, -{20,30,19}, -{20,30,20}, -{20,30,21}, -{20,30,22}, -{20,30,23}, -{20,30,24}, -{20,30,25}, -{20,30,26}, -{20,30,27}, -{20,30,28}, -{20,30,29}, -{20,30,30}, -{20,31,-56}, -{20,31,-55}, -{20,31,-54}, -{20,31,-53}, -{20,31,-52}, -{20,31,-51}, -{20,31,-50}, -{20,31,-49}, -{20,31,-48}, -{20,31,-47}, -{20,31,-46}, -{20,31,-45}, -{20,31,-44}, -{20,31,-43}, -{20,31,-42}, -{20,31,-41}, -{20,31,-40}, -{20,31,-39}, -{20,31,-38}, -{20,31,-37}, -{20,31,-36}, -{20,31,-35}, -{20,31,-34}, -{20,31,-33}, -{20,31,-32}, -{20,31,-31}, -{20,31,-30}, -{20,31,-29}, -{20,31,-28}, -{20,31,-27}, -{20,31,-26}, -{20,31,-25}, -{20,31,-24}, -{20,31,-23}, -{20,31,-22}, -{20,31,-21}, -{20,31,-20}, -{20,31,-19}, -{20,31,-18}, -{20,31,-17}, -{20,31,-16}, -{20,31,-15}, -{20,31,-14}, -{20,31,-13}, -{20,31,-12}, -{20,31,-11}, -{20,31,-10}, -{20,31,-9}, -{20,31,-8}, -{20,31,-7}, -{20,31,-6}, -{20,31,-5}, -{20,31,-4}, -{20,31,-3}, -{20,31,-2}, -{20,31,-1}, -{20,31,0}, -{20,31,1}, -{20,31,2}, -{20,31,3}, -{20,31,4}, -{20,31,5}, -{20,31,6}, -{20,31,7}, -{20,31,8}, -{20,31,9}, -{20,31,10}, -{20,31,11}, -{20,31,12}, -{20,31,13}, -{20,31,14}, -{20,31,15}, -{20,31,16}, -{20,31,17}, -{20,31,18}, -{20,31,19}, -{20,31,20}, -{20,31,21}, -{20,31,22}, -{20,31,23}, -{20,31,24}, -{20,31,25}, -{20,31,26}, -{20,31,27}, -{20,31,28}, -{20,31,29}, -{20,31,30}, -{20,32,-57}, -{20,32,-56}, -{20,32,-55}, -{20,32,-54}, -{20,32,-53}, -{20,32,-52}, -{20,32,-51}, -{20,32,-50}, -{20,32,-49}, -{20,32,-48}, -{20,32,-47}, -{20,32,-46}, -{20,32,-45}, -{20,32,-44}, -{20,32,-43}, -{20,32,-42}, -{20,32,-41}, -{20,32,-40}, -{20,32,-39}, -{20,32,-38}, -{20,32,-37}, -{20,32,-36}, -{20,32,-35}, -{20,32,-34}, -{20,32,-33}, -{20,32,-32}, -{20,32,-31}, -{20,32,-30}, -{20,32,-29}, -{20,32,-28}, -{20,32,-27}, -{20,32,-26}, -{20,32,-25}, -{20,32,-24}, -{20,32,-23}, -{20,32,-22}, -{20,32,-21}, -{20,32,-20}, -{20,32,-19}, -{20,32,-18}, -{20,32,-17}, -{20,32,-16}, -{20,32,-15}, -{20,32,-14}, -{20,32,-13}, -{20,32,-12}, -{20,32,-11}, -{20,32,-10}, -{20,32,-9}, -{20,32,-8}, -{20,32,-7}, -{20,32,-6}, -{20,32,-5}, -{20,32,-4}, -{20,32,-3}, -{20,32,-2}, -{20,32,-1}, -{20,32,0}, -{20,32,1}, -{20,32,2}, -{20,32,3}, -{20,32,4}, -{20,32,5}, -{20,32,6}, -{20,32,7}, -{20,32,8}, -{20,32,9}, -{20,32,10}, -{20,32,11}, -{20,32,12}, -{20,32,13}, -{20,32,14}, -{20,32,15}, -{20,32,16}, -{20,32,17}, -{20,32,18}, -{20,32,19}, -{20,32,20}, -{20,32,21}, -{20,32,22}, -{20,32,23}, -{20,32,24}, -{20,32,25}, -{20,32,26}, -{20,32,27}, -{20,32,28}, -{20,32,29}, -{20,32,30}, -{20,33,-58}, -{20,33,-57}, -{20,33,-56}, -{20,33,-55}, -{20,33,-54}, -{20,33,-53}, -{20,33,-52}, -{20,33,-51}, -{20,33,-50}, -{20,33,-49}, -{20,33,-48}, -{20,33,-47}, -{20,33,-46}, -{20,33,-45}, -{20,33,-44}, -{20,33,-43}, -{20,33,-42}, -{20,33,-41}, -{20,33,-40}, -{20,33,-39}, -{20,33,-38}, -{20,33,-37}, -{20,33,-36}, -{20,33,-35}, -{20,33,-34}, -{20,33,-33}, -{20,33,-32}, -{20,33,-31}, -{20,33,-30}, -{20,33,-29}, -{20,33,-28}, -{20,33,-27}, -{20,33,-26}, -{20,33,-25}, -{20,33,-24}, -{20,33,-23}, -{20,33,-22}, -{20,33,-21}, -{20,33,-20}, -{20,33,-19}, -{20,33,-18}, -{20,33,-17}, -{20,33,-16}, -{20,33,-15}, -{20,33,-14}, -{20,33,-13}, -{20,33,-12}, -{20,33,-11}, -{20,33,-10}, -{20,33,-9}, -{20,33,-8}, -{20,33,-7}, -{20,33,-6}, -{20,33,-5}, -{20,33,-4}, -{20,33,-3}, -{20,33,-2}, -{20,33,-1}, -{20,33,0}, -{20,33,1}, -{20,33,2}, -{20,33,3}, -{20,33,4}, -{20,33,5}, -{20,33,6}, -{20,33,7}, -{20,33,8}, -{20,33,9}, -{20,33,10}, -{20,33,11}, -{20,33,12}, -{20,33,13}, -{20,33,14}, -{20,33,15}, -{20,33,16}, -{20,33,17}, -{20,33,18}, -{20,33,19}, -{20,33,20}, -{20,33,21}, -{20,33,22}, -{20,33,23}, -{20,33,24}, -{20,33,25}, -{20,33,26}, -{20,33,27}, -{20,33,28}, -{20,33,29}, -{20,33,30}, -{20,34,-59}, -{20,34,-58}, -{20,34,-57}, -{20,34,-56}, -{20,34,-55}, -{20,34,-54}, -{20,34,-53}, -{20,34,-52}, -{20,34,-51}, -{20,34,-50}, -{20,34,-49}, -{20,34,-48}, -{20,34,-47}, -{20,34,-46}, -{20,34,-45}, -{20,34,-44}, -{20,34,-43}, -{20,34,-42}, -{20,34,-41}, -{20,34,-40}, -{20,34,-39}, -{20,34,-38}, -{20,34,-37}, -{20,34,-36}, -{20,34,-35}, -{20,34,-34}, -{20,34,-33}, -{20,34,-32}, -{20,34,-31}, -{20,34,-30}, -{20,34,-29}, -{20,34,-28}, -{20,34,-27}, -{20,34,-26}, -{20,34,-25}, -{20,34,-24}, -{20,34,-23}, -{20,34,-22}, -{20,34,-21}, -{20,34,-20}, -{20,34,-19}, -{20,34,-18}, -{20,34,-17}, -{20,34,-16}, -{20,34,-15}, -{20,34,-14}, -{20,34,-13}, -{20,34,-12}, -{20,34,-11}, -{20,34,-10}, -{20,34,-9}, -{20,34,-8}, -{20,34,-7}, -{20,34,-6}, -{20,34,-5}, -{20,34,-4}, -{20,34,-3}, -{20,34,-2}, -{20,34,-1}, -{20,34,0}, -{20,34,1}, -{20,34,2}, -{20,34,3}, -{20,34,4}, -{20,34,5}, -{20,34,6}, -{20,34,7}, -{20,34,8}, -{20,34,9}, -{20,34,10}, -{20,34,11}, -{20,34,12}, -{20,34,13}, -{20,34,14}, -{20,34,15}, -{20,34,16}, -{20,34,17}, -{20,34,18}, -{20,34,19}, -{20,34,20}, -{20,34,21}, -{20,34,22}, -{20,34,23}, -{20,34,24}, -{20,34,25}, -{20,34,26}, -{20,34,27}, -{20,34,28}, -{20,34,29}, -{20,34,30}, -{20,35,-60}, -{20,35,-59}, -{20,35,-58}, -{20,35,-57}, -{20,35,-56}, -{20,35,-55}, -{20,35,-54}, -{20,35,-53}, -{20,35,-52}, -{20,35,-51}, -{20,35,-50}, -{20,35,-49}, -{20,35,-48}, -{20,35,-47}, -{20,35,-46}, -{20,35,-45}, -{20,35,-44}, -{20,35,-43}, -{20,35,-42}, -{20,35,-41}, -{20,35,-40}, -{20,35,-39}, -{20,35,-38}, -{20,35,-37}, -{20,35,-36}, -{20,35,-35}, -{20,35,-34}, -{20,35,-33}, -{20,35,-32}, -{20,35,-31}, -{20,35,-30}, -{20,35,-29}, -{20,35,-28}, -{20,35,-27}, -{20,35,-26}, -{20,35,-25}, -{20,35,-24}, -{20,35,-23}, -{20,35,-22}, -{20,35,-21}, -{20,35,-20}, -{20,35,-19}, -{20,35,-18}, -{20,35,-17}, -{20,35,-16}, -{20,35,-15}, -{20,35,-14}, -{20,35,-13}, -{20,35,-12}, -{20,35,-11}, -{20,35,-10}, -{20,35,-9}, -{20,35,-8}, -{20,35,-7}, -{20,35,-6}, -{20,35,-5}, -{20,35,-4}, -{20,35,-3}, -{20,35,-2}, -{20,35,-1}, -{20,35,0}, -{20,35,1}, -{20,35,2}, -{20,35,3}, -{20,35,4}, -{20,35,5}, -{20,35,6}, -{20,35,7}, -{20,35,8}, -{20,35,9}, -{20,35,10}, -{20,35,11}, -{20,35,12}, -{20,35,13}, -{20,35,14}, -{20,35,15}, -{20,35,16}, -{20,35,17}, -{20,35,18}, -{20,35,19}, -{20,35,20}, -{20,35,21}, -{20,35,22}, -{20,35,23}, -{20,35,24}, -{20,35,25}, -{20,35,26}, -{20,35,27}, -{20,35,28}, -{20,35,29}, -{20,35,30}, -{20,36,-61}, -{20,36,-60}, -{20,36,-59}, -{20,36,-58}, -{20,36,-57}, -{20,36,-56}, -{20,36,-55}, -{20,36,-54}, -{20,36,-53}, -{20,36,-52}, -{20,36,-51}, -{20,36,-50}, -{20,36,-49}, -{20,36,-48}, -{20,36,-47}, -{20,36,-46}, -{20,36,-45}, -{20,36,-44}, -{20,36,-43}, -{20,36,-42}, -{20,36,-41}, -{20,36,-40}, -{20,36,-39}, -{20,36,-38}, -{20,36,-37}, -{20,36,-36}, -{20,36,-35}, -{20,36,-34}, -{20,36,-33}, -{20,36,-32}, -{20,36,-31}, -{20,36,-30}, -{20,36,-29}, -{20,36,-28}, -{20,36,-27}, -{20,36,-26}, -{20,36,-25}, -{20,36,-24}, -{20,36,-23}, -{20,36,-22}, -{20,36,-21}, -{20,36,-20}, -{20,36,-19}, -{20,36,-18}, -{20,36,-17}, -{20,36,-16}, -{20,36,-15}, -{20,36,-14}, -{20,36,-13}, -{20,36,-12}, -{20,36,-11}, -{20,36,-10}, -{20,36,-9}, -{20,36,-8}, -{20,36,-7}, -{20,36,-6}, -{20,36,-5}, -{20,36,-4}, -{20,36,-3}, -{20,36,-2}, -{20,36,-1}, -{20,36,0}, -{20,36,1}, -{20,36,2}, -{20,36,3}, -{20,36,4}, -{20,36,5}, -{20,36,6}, -{20,36,7}, -{20,36,8}, -{20,36,9}, -{20,36,10}, -{20,36,11}, -{20,36,12}, -{20,36,13}, -{20,36,14}, -{20,36,15}, -{20,36,16}, -{20,36,17}, -{20,36,18}, -{20,36,19}, -{20,36,20}, -{20,36,21}, -{20,36,22}, -{20,36,23}, -{20,36,24}, -{20,36,25}, -{20,36,26}, -{20,36,27}, -{20,36,28}, -{20,36,29}, -{20,36,30}, -{20,37,-61}, -{20,37,-60}, -{20,37,-59}, -{20,37,-58}, -{20,37,-57}, -{20,37,-56}, -{20,37,-55}, -{20,37,-54}, -{20,37,-53}, -{20,37,-52}, -{20,37,-51}, -{20,37,-50}, -{20,37,-49}, -{20,37,-48}, -{20,37,-47}, -{20,37,-46}, -{20,37,-45}, -{20,37,-44}, -{20,37,-43}, -{20,37,-42}, -{20,37,-41}, -{20,37,-40}, -{20,37,-39}, -{20,37,-38}, -{20,37,-37}, -{20,37,-36}, -{20,37,-35}, -{20,37,-34}, -{20,37,-33}, -{20,37,-32}, -{20,37,-31}, -{20,37,-30}, -{20,37,-29}, -{20,37,-28}, -{20,37,-27}, -{20,37,-26}, -{20,37,-25}, -{20,37,-24}, -{20,37,-23}, -{20,37,-22}, -{20,37,-21}, -{20,37,-20}, -{20,37,-19}, -{20,37,-18}, -{20,37,-17}, -{20,37,-16}, -{20,37,-15}, -{20,37,-14}, -{20,37,-13}, -{20,37,-12}, -{20,37,-11}, -{20,37,-10}, -{20,37,-9}, -{20,37,-8}, -{20,37,-7}, -{20,37,-6}, -{20,37,-5}, -{20,37,-4}, -{20,37,-3}, -{20,37,-2}, -{20,37,-1}, -{20,37,0}, -{20,37,1}, -{20,37,2}, -{20,37,3}, -{20,37,4}, -{20,37,5}, -{20,37,6}, -{20,37,7}, -{20,37,8}, -{20,37,9}, -{20,37,10}, -{20,37,11}, -{20,37,12}, -{20,37,13}, -{20,37,14}, -{20,37,15}, -{20,37,16}, -{20,37,17}, -{20,37,18}, -{20,37,19}, -{20,37,20}, -{20,37,21}, -{20,37,22}, -{20,37,23}, -{20,37,24}, -{20,37,25}, -{20,37,26}, -{20,37,27}, -{20,37,28}, -{20,37,29}, -{20,37,30}, -{20,38,-62}, -{20,38,-61}, -{20,38,-60}, -{20,38,-59}, -{20,38,-58}, -{20,38,-57}, -{20,38,-56}, -{20,38,-55}, -{20,38,-54}, -{20,38,-53}, -{20,38,-52}, -{20,38,-51}, -{20,38,-50}, -{20,38,-49}, -{20,38,-48}, -{20,38,-47}, -{20,38,-46}, -{20,38,-45}, -{20,38,-44}, -{20,38,-43}, -{20,38,-42}, -{20,38,-41}, -{20,38,-40}, -{20,38,-39}, -{20,38,-38}, -{20,38,-37}, -{20,38,-36}, -{20,38,-35}, -{20,38,-34}, -{20,38,-33}, -{20,38,-32}, -{20,38,-31}, -{20,38,-30}, -{20,38,-29}, -{20,38,-28}, -{20,38,-27}, -{20,38,-26}, -{20,38,-25}, -{20,38,-24}, -{20,38,-23}, -{20,38,-22}, -{20,38,-21}, -{20,38,-20}, -{20,38,-19}, -{20,38,-18}, -{20,38,-17}, -{20,38,-16}, -{20,38,-15}, -{20,38,-14}, -{20,38,-13}, -{20,38,-12}, -{20,38,-11}, -{20,38,-10}, -{20,38,-9}, -{20,38,-8}, -{20,38,-7}, -{20,38,-6}, -{20,38,-5}, -{20,38,-4}, -{20,38,-3}, -{20,38,-2}, -{20,38,-1}, -{20,38,0}, -{20,38,1}, -{20,38,2}, -{20,38,3}, -{20,38,4}, -{20,38,5}, -{20,38,6}, -{20,38,7}, -{20,38,8}, -{20,38,9}, -{20,38,10}, -{20,38,11}, -{20,38,12}, -{20,38,13}, -{20,38,14}, -{20,38,15}, -{20,38,16}, -{20,38,17}, -{20,38,18}, -{20,38,19}, -{20,38,20}, -{20,38,21}, -{20,38,22}, -{20,38,23}, -{20,38,24}, -{20,38,25}, -{20,38,26}, -{20,38,27}, -{20,38,28}, -{20,38,29}, -{20,38,30}, -{20,39,-63}, -{20,39,-62}, -{20,39,-61}, -{20,39,-60}, -{20,39,-59}, -{20,39,-58}, -{20,39,-57}, -{20,39,-56}, -{20,39,-55}, -{20,39,-54}, -{20,39,-53}, -{20,39,-52}, -{20,39,-51}, -{20,39,-50}, -{20,39,-49}, -{20,39,-48}, -{20,39,-47}, -{20,39,-46}, -{20,39,-45}, -{20,39,-44}, -{20,39,-43}, -{20,39,-42}, -{20,39,-41}, -{20,39,-40}, -{20,39,-39}, -{20,39,-38}, -{20,39,-37}, -{20,39,-36}, -{20,39,-35}, -{20,39,-34}, -{20,39,-33}, -{20,39,-32}, -{20,39,-31}, -{20,39,-30}, -{20,39,-29}, -{20,39,-28}, -{20,39,-27}, -{20,39,-26}, -{20,39,-25}, -{20,39,-24}, -{20,39,-23}, -{20,39,-22}, -{20,39,-21}, -{20,39,-20}, -{20,39,-19}, -{20,39,-18}, -{20,39,-17}, -{20,39,-16}, -{20,39,-15}, -{20,39,-14}, -{20,39,-13}, -{20,39,-12}, -{20,39,-11}, -{20,39,-10}, -{20,39,-9}, -{20,39,-8}, -{20,39,-7}, -{20,39,-6}, -{20,39,-5}, -{20,39,-4}, -{20,39,-3}, -{20,39,-2}, -{20,39,-1}, -{20,39,0}, -{20,39,1}, -{20,39,2}, -{20,39,3}, -{20,39,4}, -{20,39,5}, -{20,39,6}, -{20,39,7}, -{20,39,8}, -{20,39,9}, -{20,39,10}, -{20,39,11}, -{20,39,12}, -{20,39,13}, -{20,39,14}, -{20,39,15}, -{20,39,16}, -{20,39,17}, -{20,39,18}, -{20,39,19}, -{20,39,20}, -{20,39,21}, -{20,39,22}, -{20,39,23}, -{20,39,24}, -{20,39,25}, -{20,39,26}, -{20,39,27}, -{20,39,28}, -{20,39,29}, -{20,39,30}, -{20,40,-64}, -{20,40,-63}, -{20,40,-62}, -{20,40,-61}, -{20,40,-60}, -{20,40,-59}, -{20,40,-58}, -{20,40,-57}, -{20,40,-56}, -{20,40,-55}, -{20,40,-54}, -{20,40,-53}, -{20,40,-52}, -{20,40,-51}, -{20,40,-50}, -{20,40,-49}, -{20,40,-48}, -{20,40,-47}, -{20,40,-46}, -{20,40,-45}, -{20,40,-44}, -{20,40,-43}, -{20,40,-42}, -{20,40,-41}, -{20,40,-40}, -{20,40,-39}, -{20,40,-38}, -{20,40,-37}, -{20,40,-36}, -{20,40,-35}, -{20,40,-34}, -{20,40,-33}, -{20,40,-32}, -{20,40,-31}, -{20,40,-30}, -{20,40,-29}, -{20,40,-28}, -{20,40,-27}, -{20,40,-26}, -{20,40,-25}, -{20,40,-24}, -{20,40,-23}, -{20,40,-22}, -{20,40,-21}, -{20,40,-20}, -{20,40,-19}, -{20,40,-18}, -{20,40,-17}, -{20,40,-16}, -{20,40,-15}, -{20,40,-14}, -{20,40,-13}, -{20,40,-12}, -{20,40,-11}, -{20,40,-10}, -{20,40,-9}, -{20,40,-8}, -{20,40,-7}, -{20,40,-6}, -{20,40,-5}, -{20,40,-4}, -{20,40,-3}, -{20,40,-2}, -{20,40,-1}, -{20,40,0}, -{20,40,1}, -{20,40,2}, -{20,40,3}, -{20,40,4}, -{20,40,5}, -{20,40,6}, -{20,40,7}, -{20,40,8}, -{20,40,9}, -{20,40,10}, -{20,40,11}, -{20,40,12}, -{20,40,13}, -{20,40,14}, -{20,40,15}, -{20,40,16}, -{20,40,17}, -{20,40,18}, -{20,40,19}, -{20,40,20}, -{20,40,21}, -{20,40,22}, -{20,40,23}, -{20,40,24}, -{20,40,25}, -{20,40,26}, -{20,40,27}, -{20,40,28}, -{20,40,29}, -{20,40,30}, -{20,41,-65}, -{20,41,-64}, -{20,41,-63}, -{20,41,-62}, -{20,41,-61}, -{20,41,-60}, -{20,41,-59}, -{20,41,-58}, -{20,41,-57}, -{20,41,-56}, -{20,41,-55}, -{20,41,-54}, -{20,41,-53}, -{20,41,-52}, -{20,41,-51}, -{20,41,-50}, -{20,41,-49}, -{20,41,-48}, -{20,41,-47}, -{20,41,-46}, -{20,41,-45}, -{20,41,-44}, -{20,41,-43}, -{20,41,-42}, -{20,41,-41}, -{20,41,-40}, -{20,41,-39}, -{20,41,-38}, -{20,41,-37}, -{20,41,-36}, -{20,41,-35}, -{20,41,-34}, -{20,41,-33}, -{20,41,-32}, -{20,41,-31}, -{20,41,-30}, -{20,41,-29}, -{20,41,-28}, -{20,41,-27}, -{20,41,-26}, -{20,41,-25}, -{20,41,-24}, -{20,41,-23}, -{20,41,-22}, -{20,41,-21}, -{20,41,-20}, -{20,41,-19}, -{20,41,-18}, -{20,41,-17}, -{20,41,-16}, -{20,41,-15}, -{20,41,-14}, -{20,41,-13}, -{20,41,-12}, -{20,41,-11}, -{20,41,-10}, -{20,41,-9}, -{20,41,-8}, -{20,41,-7}, -{20,41,-6}, -{20,41,-5}, -{20,41,-4}, -{20,41,-3}, -{20,41,-2}, -{20,41,-1}, -{20,41,0}, -{20,41,1}, -{20,41,2}, -{20,41,3}, -{20,41,4}, -{20,41,5}, -{20,41,6}, -{20,41,7}, -{20,41,8}, -{20,41,9}, -{20,41,10}, -{20,41,11}, -{20,41,12}, -{20,41,13}, -{20,41,14}, -{20,41,15}, -{20,41,16}, -{20,41,17}, -{20,41,18}, -{20,41,19}, -{20,41,20}, -{20,41,21}, -{20,41,22}, -{20,41,23}, -{20,41,24}, -{20,41,25}, -{20,41,26}, -{20,41,27}, -{20,41,28}, -{20,41,29}, -{20,41,30}, -{20,42,-66}, -{20,42,-65}, -{20,42,-64}, -{20,42,-63}, -{20,42,-62}, -{20,42,-61}, -{20,42,-60}, -{20,42,-59}, -{20,42,-58}, -{20,42,-57}, -{20,42,-56}, -{20,42,-55}, -{20,42,-54}, -{20,42,-53}, -{20,42,-52}, -{20,42,-51}, -{20,42,-50}, -{20,42,-49}, -{20,42,-48}, -{20,42,-47}, -{20,42,-46}, -{20,42,-45}, -{20,42,-44}, -{20,42,-43}, -{20,42,-42}, -{20,42,-41}, -{20,42,-40}, -{20,42,-39}, -{20,42,-38}, -{20,42,-37}, -{20,42,-36}, -{20,42,-35}, -{20,42,-34}, -{20,42,-33}, -{20,42,-32}, -{20,42,-31}, -{20,42,-30}, -{20,42,-29}, -{20,42,-28}, -{20,42,-27}, -{20,42,-26}, -{20,42,-25}, -{20,42,-24}, -{20,42,-23}, -{20,42,-22}, -{20,42,-21}, -{20,42,-20}, -{20,42,-19}, -{20,42,-18}, -{20,42,-17}, -{20,42,-16}, -{20,42,-15}, -{20,42,-14}, -{20,42,-13}, -{20,42,-12}, -{20,42,-11}, -{20,42,-10}, -{20,42,-9}, -{20,42,-8}, -{20,42,-7}, -{20,42,-6}, -{20,42,-5}, -{20,42,-4}, -{20,42,-3}, -{20,42,-2}, -{20,42,-1}, -{20,42,0}, -{20,42,1}, -{20,42,2}, -{20,42,3}, -{20,42,4}, -{20,42,5}, -{20,42,6}, -{20,42,7}, -{20,42,8}, -{20,42,9}, -{20,42,10}, -{20,42,11}, -{20,42,12}, -{20,42,13}, -{20,42,14}, -{20,42,15}, -{20,42,16}, -{20,42,17}, -{20,42,18}, -{20,42,19}, -{20,42,20}, -{20,42,21}, -{20,42,22}, -{20,42,23}, -{20,42,24}, -{20,42,25}, -{20,43,-67}, -{20,43,-66}, -{20,43,-65}, -{20,43,-64}, -{20,43,-63}, -{20,43,-62}, -{20,43,-61}, -{20,43,-60}, -{20,43,-59}, -{20,43,-58}, -{20,43,-57}, -{20,43,-56}, -{20,43,-55}, -{20,43,-54}, -{20,43,-53}, -{20,43,-52}, -{20,43,-51}, -{20,43,-50}, -{20,43,-49}, -{20,43,-48}, -{20,43,-47}, -{20,43,-46}, -{20,43,-45}, -{20,43,-44}, -{20,43,-43}, -{20,43,-42}, -{20,43,-41}, -{20,43,-40}, -{20,43,-39}, -{20,43,-38}, -{20,43,-37}, -{20,43,-36}, -{20,43,-35}, -{20,43,-34}, -{20,43,-33}, -{20,43,-32}, -{20,43,-31}, -{20,43,-30}, -{20,43,-29}, -{20,43,-28}, -{20,43,-27}, -{20,43,-26}, -{20,43,-25}, -{20,43,-24}, -{20,43,-23}, -{20,43,-22}, -{20,43,-21}, -{20,43,-20}, -{20,43,-19}, -{20,43,-18}, -{20,43,-17}, -{20,43,-16}, -{20,43,-15}, -{20,43,-14}, -{20,43,-13}, -{20,43,-12}, -{20,43,-11}, -{20,43,-10}, -{20,43,-9}, -{20,43,-8}, -{20,43,-7}, -{20,43,-6}, -{20,43,-5}, -{20,43,-4}, -{20,43,-3}, -{20,43,-2}, -{20,43,-1}, -{20,43,0}, -{20,43,1}, -{20,43,2}, -{20,43,3}, -{20,44,-68}, -{20,44,-67}, -{20,44,-66}, -{20,44,-65}, -{20,44,-64}, -{20,44,-63}, -{20,44,-62}, -{20,44,-61}, -{20,44,-60}, -{20,44,-59}, -{20,44,-58}, -{20,44,-57}, -{20,44,-56}, -{20,44,-55}, -{20,44,-54}, -{20,44,-53}, -{20,44,-52}, -{20,44,-51}, -{20,44,-50}, -{20,44,-49}, -{20,44,-48}, -{20,44,-47}, -{20,44,-46}, -{20,44,-45}, -{20,44,-44}, -{20,44,-43}, -{20,44,-42}, -{20,44,-41}, -{20,44,-40}, -{20,44,-39}, -{20,44,-38}, -{20,44,-37}, -{20,44,-36}, -{20,44,-35}, -{20,44,-34}, -{20,44,-33}, -{20,44,-32}, -{20,44,-31}, -{20,44,-30}, -{20,44,-29}, -{20,44,-28}, -{20,44,-27}, -{20,44,-26}, -{20,44,-25}, -{20,44,-24}, -{20,44,-23}, -{20,44,-22}, -{20,44,-21}, -{20,44,-20}, -{20,44,-19}, -{20,44,-18}, -{20,44,-17}, -{20,44,-16}, -{20,44,-15}, -{20,44,-14}, -{20,44,-13}, -{20,44,-12}, -{20,44,-11}, -{20,44,-10}, -{20,44,-9}, -{20,45,-68}, -{20,45,-67}, -{20,45,-66}, -{20,45,-65}, -{20,45,-64}, -{20,45,-63}, -{20,45,-62}, -{20,45,-61}, -{20,45,-60}, -{20,45,-59}, -{20,45,-58}, -{20,45,-57}, -{20,45,-56}, -{20,45,-55}, -{20,45,-54}, -{20,45,-53}, -{20,45,-52}, -{20,45,-51}, -{20,45,-50}, -{20,45,-49}, -{20,45,-48}, -{20,45,-47}, -{20,45,-46}, -{20,45,-45}, -{20,45,-44}, -{20,45,-43}, -{20,45,-42}, -{20,45,-41}, -{20,45,-40}, -{20,45,-39}, -{20,45,-38}, -{20,45,-37}, -{20,45,-36}, -{20,45,-35}, -{20,45,-34}, -{20,45,-33}, -{20,45,-32}, -{20,45,-31}, -{20,45,-30}, -{20,45,-29}, -{20,45,-28}, -{20,45,-27}, -{20,45,-26}, -{20,45,-25}, -{20,45,-24}, -{20,45,-23}, -{20,45,-22}, -{20,45,-21}, -{20,45,-20}, -{20,45,-19}, -{20,45,-18}, -{20,46,-69}, -{20,46,-68}, -{20,46,-67}, -{20,46,-66}, -{20,46,-65}, -{20,46,-64}, -{20,46,-63}, -{20,46,-62}, -{20,46,-61}, -{20,46,-60}, -{20,46,-59}, -{20,46,-58}, -{20,46,-57}, -{20,46,-56}, -{20,46,-55}, -{20,46,-54}, -{20,46,-53}, -{20,46,-52}, -{20,46,-51}, -{20,46,-50}, -{20,46,-49}, -{20,46,-48}, -{20,46,-47}, -{20,46,-46}, -{20,46,-45}, -{20,46,-44}, -{20,46,-43}, -{20,46,-42}, -{20,46,-41}, -{20,46,-40}, -{20,46,-39}, -{20,46,-38}, -{20,46,-37}, -{20,46,-36}, -{20,46,-35}, -{20,46,-34}, -{20,46,-33}, -{20,46,-32}, -{20,46,-31}, -{20,46,-30}, -{20,46,-29}, -{20,46,-28}, -{20,46,-27}, -{20,46,-26}, -{20,47,-70}, -{20,47,-69}, -{20,47,-68}, -{20,47,-67}, -{20,47,-66}, -{20,47,-65}, -{20,47,-64}, -{20,47,-63}, -{20,47,-62}, -{20,47,-61}, -{20,47,-60}, -{20,47,-59}, -{20,47,-58}, -{20,47,-57}, -{20,47,-56}, -{20,47,-55}, -{20,47,-54}, -{20,47,-53}, -{20,47,-52}, -{20,47,-51}, -{20,47,-50}, -{20,47,-49}, -{20,47,-48}, -{20,47,-47}, -{20,47,-46}, -{20,47,-45}, -{20,47,-44}, -{20,47,-43}, -{20,47,-42}, -{20,47,-41}, -{20,47,-40}, -{20,47,-39}, -{20,47,-38}, -{20,47,-37}, -{20,47,-36}, -{20,47,-35}, -{20,47,-34}, -{20,47,-33}, -{20,47,-32}, -{20,48,-71}, -{20,48,-70}, -{20,48,-69}, -{20,48,-68}, -{20,48,-67}, -{20,48,-66}, -{20,48,-65}, -{20,48,-64}, -{20,48,-63}, -{20,48,-62}, -{20,48,-61}, -{20,48,-60}, -{20,48,-59}, -{20,48,-58}, -{20,48,-57}, -{20,48,-56}, -{20,48,-55}, -{20,48,-54}, -{20,48,-53}, -{20,48,-52}, -{20,48,-51}, -{20,48,-50}, -{20,48,-49}, -{20,48,-48}, -{20,48,-47}, -{20,48,-46}, -{20,48,-45}, -{20,48,-44}, -{20,48,-43}, -{20,48,-42}, -{20,48,-41}, -{20,48,-40}, -{20,48,-39}, -{20,48,-38}, -{20,49,-72}, -{20,49,-71}, -{20,49,-70}, -{20,49,-69}, -{20,49,-68}, -{20,49,-67}, -{20,49,-66}, -{20,49,-65}, -{20,49,-64}, -{20,49,-63}, -{20,49,-62}, -{20,49,-61}, -{20,49,-60}, -{20,49,-59}, -{20,49,-58}, -{20,49,-57}, -{20,49,-56}, -{20,49,-55}, -{20,49,-54}, -{20,49,-53}, -{20,49,-52}, -{20,49,-51}, -{20,49,-50}, -{20,49,-49}, -{20,49,-48}, -{20,49,-47}, -{20,49,-46}, -{20,49,-45}, -{20,49,-44}, -{20,49,-43}, -{20,50,-73}, -{20,50,-72}, -{20,50,-71}, -{20,50,-70}, -{20,50,-69}, -{20,50,-68}, -{20,50,-67}, -{20,50,-66}, -{20,50,-65}, -{20,50,-64}, -{20,50,-63}, -{20,50,-62}, -{20,50,-61}, -{20,50,-60}, -{20,50,-59}, -{20,50,-58}, -{20,50,-57}, -{20,50,-56}, -{20,50,-55}, -{20,50,-54}, -{20,50,-53}, -{20,50,-52}, -{20,50,-51}, -{20,50,-50}, -{20,50,-49}, -{20,50,-48}, -{20,51,-73}, -{20,51,-72}, -{20,51,-71}, -{20,51,-70}, -{20,51,-69}, -{20,51,-68}, -{20,51,-67}, -{20,51,-66}, -{20,51,-65}, -{20,51,-64}, -{20,51,-63}, -{20,51,-62}, -{20,51,-61}, -{20,51,-60}, -{20,51,-59}, -{20,51,-58}, -{20,51,-57}, -{20,51,-56}, -{20,51,-55}, -{20,51,-54}, -{20,51,-53}, -{20,51,-52}, -{20,52,-74}, -{20,52,-73}, -{20,52,-72}, -{20,52,-71}, -{20,52,-70}, -{20,52,-69}, -{20,52,-68}, -{20,52,-67}, -{20,52,-66}, -{20,52,-65}, -{20,52,-64}, -{20,52,-63}, -{20,52,-62}, -{20,52,-61}, -{20,52,-60}, -{20,52,-59}, -{20,52,-58}, -{20,52,-57}, -{20,53,-75}, -{20,53,-74}, -{20,53,-73}, -{20,53,-72}, -{20,53,-71}, -{20,53,-70}, -{20,53,-69}, -{20,53,-68}, -{20,53,-67}, -{20,53,-66}, -{20,53,-65}, -{20,53,-64}, -{20,53,-63}, -{20,53,-62}, -{20,53,-61}, -{20,53,-60}, -{20,54,-76}, -{20,54,-75}, -{20,54,-74}, -{20,54,-73}, -{20,54,-72}, -{20,54,-71}, -{20,54,-70}, -{20,54,-69}, -{20,54,-68}, -{20,54,-67}, -{20,54,-66}, -{20,54,-65}, -{20,54,-64}, -{20,55,-77}, -{20,55,-76}, -{20,55,-75}, -{20,55,-74}, -{20,55,-73}, -{20,55,-72}, -{20,55,-71}, -{20,55,-70}, -{20,55,-69}, -{20,55,-68}, -{20,56,-78}, -{20,56,-77}, -{20,56,-76}, -{20,56,-75}, -{20,56,-74}, -{20,56,-73}, -{20,56,-72}, -{20,56,-71}, -{20,57,-78}, -{20,57,-77}, -{20,57,-76}, -{20,57,-75}, -{20,57,-74}, -{20,58,-79}, -{20,58,-78}, -{20,58,-77}, -{20,59,-80}, -{21,-30,26}, -{21,-30,27}, -{21,-30,28}, -{21,-29,22}, -{21,-29,23}, -{21,-29,24}, -{21,-29,25}, -{21,-29,26}, -{21,-29,27}, -{21,-29,28}, -{21,-28,19}, -{21,-28,20}, -{21,-28,21}, -{21,-28,22}, -{21,-28,23}, -{21,-28,24}, -{21,-28,25}, -{21,-28,26}, -{21,-28,27}, -{21,-28,28}, -{21,-27,16}, -{21,-27,17}, -{21,-27,18}, -{21,-27,19}, -{21,-27,20}, -{21,-27,21}, -{21,-27,22}, -{21,-27,23}, -{21,-27,24}, -{21,-27,25}, -{21,-27,26}, -{21,-27,27}, -{21,-27,28}, -{21,-26,13}, -{21,-26,14}, -{21,-26,15}, -{21,-26,16}, -{21,-26,17}, -{21,-26,18}, -{21,-26,19}, -{21,-26,20}, -{21,-26,21}, -{21,-26,22}, -{21,-26,23}, -{21,-26,24}, -{21,-26,25}, -{21,-26,26}, -{21,-26,27}, -{21,-26,28}, -{21,-25,11}, -{21,-25,12}, -{21,-25,13}, -{21,-25,14}, -{21,-25,15}, -{21,-25,16}, -{21,-25,17}, -{21,-25,18}, -{21,-25,19}, -{21,-25,20}, -{21,-25,21}, -{21,-25,22}, -{21,-25,23}, -{21,-25,24}, -{21,-25,25}, -{21,-25,26}, -{21,-25,27}, -{21,-25,28}, -{21,-24,9}, -{21,-24,10}, -{21,-24,11}, -{21,-24,12}, -{21,-24,13}, -{21,-24,14}, -{21,-24,15}, -{21,-24,16}, -{21,-24,17}, -{21,-24,18}, -{21,-24,19}, -{21,-24,20}, -{21,-24,21}, -{21,-24,22}, -{21,-24,23}, -{21,-24,24}, -{21,-24,25}, -{21,-24,26}, -{21,-24,27}, -{21,-24,28}, -{21,-23,7}, -{21,-23,8}, -{21,-23,9}, -{21,-23,10}, -{21,-23,11}, -{21,-23,12}, -{21,-23,13}, -{21,-23,14}, -{21,-23,15}, -{21,-23,16}, -{21,-23,17}, -{21,-23,18}, -{21,-23,19}, -{21,-23,20}, -{21,-23,21}, -{21,-23,22}, -{21,-23,23}, -{21,-23,24}, -{21,-23,25}, -{21,-23,26}, -{21,-23,27}, -{21,-23,28}, -{21,-22,5}, -{21,-22,6}, -{21,-22,7}, -{21,-22,8}, -{21,-22,9}, -{21,-22,10}, -{21,-22,11}, -{21,-22,12}, -{21,-22,13}, -{21,-22,14}, -{21,-22,15}, -{21,-22,16}, -{21,-22,17}, -{21,-22,18}, -{21,-22,19}, -{21,-22,20}, -{21,-22,21}, -{21,-22,22}, -{21,-22,23}, -{21,-22,24}, -{21,-22,25}, -{21,-22,26}, -{21,-22,27}, -{21,-22,28}, -{21,-21,3}, -{21,-21,4}, -{21,-21,5}, -{21,-21,6}, -{21,-21,7}, -{21,-21,8}, -{21,-21,9}, -{21,-21,10}, -{21,-21,11}, -{21,-21,12}, -{21,-21,13}, -{21,-21,14}, -{21,-21,15}, -{21,-21,16}, -{21,-21,17}, -{21,-21,18}, -{21,-21,19}, -{21,-21,20}, -{21,-21,21}, -{21,-21,22}, -{21,-21,23}, -{21,-21,24}, -{21,-21,25}, -{21,-21,26}, -{21,-21,27}, -{21,-21,28}, -{21,-20,1}, -{21,-20,2}, -{21,-20,3}, -{21,-20,4}, -{21,-20,5}, -{21,-20,6}, -{21,-20,7}, -{21,-20,8}, -{21,-20,9}, -{21,-20,10}, -{21,-20,11}, -{21,-20,12}, -{21,-20,13}, -{21,-20,14}, -{21,-20,15}, -{21,-20,16}, -{21,-20,17}, -{21,-20,18}, -{21,-20,19}, -{21,-20,20}, -{21,-20,21}, -{21,-20,22}, -{21,-20,23}, -{21,-20,24}, -{21,-20,25}, -{21,-20,26}, -{21,-20,27}, -{21,-20,28}, -{21,-19,-1}, -{21,-19,0}, -{21,-19,1}, -{21,-19,2}, -{21,-19,3}, -{21,-19,4}, -{21,-19,5}, -{21,-19,6}, -{21,-19,7}, -{21,-19,8}, -{21,-19,9}, -{21,-19,10}, -{21,-19,11}, -{21,-19,12}, -{21,-19,13}, -{21,-19,14}, -{21,-19,15}, -{21,-19,16}, -{21,-19,17}, -{21,-19,18}, -{21,-19,19}, -{21,-19,20}, -{21,-19,21}, -{21,-19,22}, -{21,-19,23}, -{21,-19,24}, -{21,-19,25}, -{21,-19,26}, -{21,-19,27}, -{21,-19,28}, -{21,-19,29}, -{21,-18,-2}, -{21,-18,-1}, -{21,-18,0}, -{21,-18,1}, -{21,-18,2}, -{21,-18,3}, -{21,-18,4}, -{21,-18,5}, -{21,-18,6}, -{21,-18,7}, -{21,-18,8}, -{21,-18,9}, -{21,-18,10}, -{21,-18,11}, -{21,-18,12}, -{21,-18,13}, -{21,-18,14}, -{21,-18,15}, -{21,-18,16}, -{21,-18,17}, -{21,-18,18}, -{21,-18,19}, -{21,-18,20}, -{21,-18,21}, -{21,-18,22}, -{21,-18,23}, -{21,-18,24}, -{21,-18,25}, -{21,-18,26}, -{21,-18,27}, -{21,-18,28}, -{21,-18,29}, -{21,-17,-4}, -{21,-17,-3}, -{21,-17,-2}, -{21,-17,-1}, -{21,-17,0}, -{21,-17,1}, -{21,-17,2}, -{21,-17,3}, -{21,-17,4}, -{21,-17,5}, -{21,-17,6}, -{21,-17,7}, -{21,-17,8}, -{21,-17,9}, -{21,-17,10}, -{21,-17,11}, -{21,-17,12}, -{21,-17,13}, -{21,-17,14}, -{21,-17,15}, -{21,-17,16}, -{21,-17,17}, -{21,-17,18}, -{21,-17,19}, -{21,-17,20}, -{21,-17,21}, -{21,-17,22}, -{21,-17,23}, -{21,-17,24}, -{21,-17,25}, -{21,-17,26}, -{21,-17,27}, -{21,-17,28}, -{21,-17,29}, -{21,-16,-6}, -{21,-16,-5}, -{21,-16,-4}, -{21,-16,-3}, -{21,-16,-2}, -{21,-16,-1}, -{21,-16,0}, -{21,-16,1}, -{21,-16,2}, -{21,-16,3}, -{21,-16,4}, -{21,-16,5}, -{21,-16,6}, -{21,-16,7}, -{21,-16,8}, -{21,-16,9}, -{21,-16,10}, -{21,-16,11}, -{21,-16,12}, -{21,-16,13}, -{21,-16,14}, -{21,-16,15}, -{21,-16,16}, -{21,-16,17}, -{21,-16,18}, -{21,-16,19}, -{21,-16,20}, -{21,-16,21}, -{21,-16,22}, -{21,-16,23}, -{21,-16,24}, -{21,-16,25}, -{21,-16,26}, -{21,-16,27}, -{21,-16,28}, -{21,-16,29}, -{21,-15,-7}, -{21,-15,-6}, -{21,-15,-5}, -{21,-15,-4}, -{21,-15,-3}, -{21,-15,-2}, -{21,-15,-1}, -{21,-15,0}, -{21,-15,1}, -{21,-15,2}, -{21,-15,3}, -{21,-15,4}, -{21,-15,5}, -{21,-15,6}, -{21,-15,7}, -{21,-15,8}, -{21,-15,9}, -{21,-15,10}, -{21,-15,11}, -{21,-15,12}, -{21,-15,13}, -{21,-15,14}, -{21,-15,15}, -{21,-15,16}, -{21,-15,17}, -{21,-15,18}, -{21,-15,19}, -{21,-15,20}, -{21,-15,21}, -{21,-15,22}, -{21,-15,23}, -{21,-15,24}, -{21,-15,25}, -{21,-15,26}, -{21,-15,27}, -{21,-15,28}, -{21,-15,29}, -{21,-14,-9}, -{21,-14,-8}, -{21,-14,-7}, -{21,-14,-6}, -{21,-14,-5}, -{21,-14,-4}, -{21,-14,-3}, -{21,-14,-2}, -{21,-14,-1}, -{21,-14,0}, -{21,-14,1}, -{21,-14,2}, -{21,-14,3}, -{21,-14,4}, -{21,-14,5}, -{21,-14,6}, -{21,-14,7}, -{21,-14,8}, -{21,-14,9}, -{21,-14,10}, -{21,-14,11}, -{21,-14,12}, -{21,-14,13}, -{21,-14,14}, -{21,-14,15}, -{21,-14,16}, -{21,-14,17}, -{21,-14,18}, -{21,-14,19}, -{21,-14,20}, -{21,-14,21}, -{21,-14,22}, -{21,-14,23}, -{21,-14,24}, -{21,-14,25}, -{21,-14,26}, -{21,-14,27}, -{21,-14,28}, -{21,-14,29}, -{21,-13,-10}, -{21,-13,-9}, -{21,-13,-8}, -{21,-13,-7}, -{21,-13,-6}, -{21,-13,-5}, -{21,-13,-4}, -{21,-13,-3}, -{21,-13,-2}, -{21,-13,-1}, -{21,-13,0}, -{21,-13,1}, -{21,-13,2}, -{21,-13,3}, -{21,-13,4}, -{21,-13,5}, -{21,-13,6}, -{21,-13,7}, -{21,-13,8}, -{21,-13,9}, -{21,-13,10}, -{21,-13,11}, -{21,-13,12}, -{21,-13,13}, -{21,-13,14}, -{21,-13,15}, -{21,-13,16}, -{21,-13,17}, -{21,-13,18}, -{21,-13,19}, -{21,-13,20}, -{21,-13,21}, -{21,-13,22}, -{21,-13,23}, -{21,-13,24}, -{21,-13,25}, -{21,-13,26}, -{21,-13,27}, -{21,-13,28}, -{21,-13,29}, -{21,-12,-11}, -{21,-12,-10}, -{21,-12,-9}, -{21,-12,-8}, -{21,-12,-7}, -{21,-12,-6}, -{21,-12,-5}, -{21,-12,-4}, -{21,-12,-3}, -{21,-12,-2}, -{21,-12,-1}, -{21,-12,0}, -{21,-12,1}, -{21,-12,2}, -{21,-12,3}, -{21,-12,4}, -{21,-12,5}, -{21,-12,6}, -{21,-12,7}, -{21,-12,8}, -{21,-12,9}, -{21,-12,10}, -{21,-12,11}, -{21,-12,12}, -{21,-12,13}, -{21,-12,14}, -{21,-12,15}, -{21,-12,16}, -{21,-12,17}, -{21,-12,18}, -{21,-12,19}, -{21,-12,20}, -{21,-12,21}, -{21,-12,22}, -{21,-12,23}, -{21,-12,24}, -{21,-12,25}, -{21,-12,26}, -{21,-12,27}, -{21,-12,28}, -{21,-12,29}, -{21,-11,-13}, -{21,-11,-12}, -{21,-11,-11}, -{21,-11,-10}, -{21,-11,-9}, -{21,-11,-8}, -{21,-11,-7}, -{21,-11,-6}, -{21,-11,-5}, -{21,-11,-4}, -{21,-11,-3}, -{21,-11,-2}, -{21,-11,-1}, -{21,-11,0}, -{21,-11,1}, -{21,-11,2}, -{21,-11,3}, -{21,-11,4}, -{21,-11,5}, -{21,-11,6}, -{21,-11,7}, -{21,-11,8}, -{21,-11,9}, -{21,-11,10}, -{21,-11,11}, -{21,-11,12}, -{21,-11,13}, -{21,-11,14}, -{21,-11,15}, -{21,-11,16}, -{21,-11,17}, -{21,-11,18}, -{21,-11,19}, -{21,-11,20}, -{21,-11,21}, -{21,-11,22}, -{21,-11,23}, -{21,-11,24}, -{21,-11,25}, -{21,-11,26}, -{21,-11,27}, -{21,-11,28}, -{21,-11,29}, -{21,-10,-14}, -{21,-10,-13}, -{21,-10,-12}, -{21,-10,-11}, -{21,-10,-10}, -{21,-10,-9}, -{21,-10,-8}, -{21,-10,-7}, -{21,-10,-6}, -{21,-10,-5}, -{21,-10,-4}, -{21,-10,-3}, -{21,-10,-2}, -{21,-10,-1}, -{21,-10,0}, -{21,-10,1}, -{21,-10,2}, -{21,-10,3}, -{21,-10,4}, -{21,-10,5}, -{21,-10,6}, -{21,-10,7}, -{21,-10,8}, -{21,-10,9}, -{21,-10,10}, -{21,-10,11}, -{21,-10,12}, -{21,-10,13}, -{21,-10,14}, -{21,-10,15}, -{21,-10,16}, -{21,-10,17}, -{21,-10,18}, -{21,-10,19}, -{21,-10,20}, -{21,-10,21}, -{21,-10,22}, -{21,-10,23}, -{21,-10,24}, -{21,-10,25}, -{21,-10,26}, -{21,-10,27}, -{21,-10,28}, -{21,-10,29}, -{21,-9,-15}, -{21,-9,-14}, -{21,-9,-13}, -{21,-9,-12}, -{21,-9,-11}, -{21,-9,-10}, -{21,-9,-9}, -{21,-9,-8}, -{21,-9,-7}, -{21,-9,-6}, -{21,-9,-5}, -{21,-9,-4}, -{21,-9,-3}, -{21,-9,-2}, -{21,-9,-1}, -{21,-9,0}, -{21,-9,1}, -{21,-9,2}, -{21,-9,3}, -{21,-9,4}, -{21,-9,5}, -{21,-9,6}, -{21,-9,7}, -{21,-9,8}, -{21,-9,9}, -{21,-9,10}, -{21,-9,11}, -{21,-9,12}, -{21,-9,13}, -{21,-9,14}, -{21,-9,15}, -{21,-9,16}, -{21,-9,17}, -{21,-9,18}, -{21,-9,19}, -{21,-9,20}, -{21,-9,21}, -{21,-9,22}, -{21,-9,23}, -{21,-9,24}, -{21,-9,25}, -{21,-9,26}, -{21,-9,27}, -{21,-9,28}, -{21,-9,29}, -{21,-8,-17}, -{21,-8,-16}, -{21,-8,-15}, -{21,-8,-14}, -{21,-8,-13}, -{21,-8,-12}, -{21,-8,-11}, -{21,-8,-10}, -{21,-8,-9}, -{21,-8,-8}, -{21,-8,-7}, -{21,-8,-6}, -{21,-8,-5}, -{21,-8,-4}, -{21,-8,-3}, -{21,-8,-2}, -{21,-8,-1}, -{21,-8,0}, -{21,-8,1}, -{21,-8,2}, -{21,-8,3}, -{21,-8,4}, -{21,-8,5}, -{21,-8,6}, -{21,-8,7}, -{21,-8,8}, -{21,-8,9}, -{21,-8,10}, -{21,-8,11}, -{21,-8,12}, -{21,-8,13}, -{21,-8,14}, -{21,-8,15}, -{21,-8,16}, -{21,-8,17}, -{21,-8,18}, -{21,-8,19}, -{21,-8,20}, -{21,-8,21}, -{21,-8,22}, -{21,-8,23}, -{21,-8,24}, -{21,-8,25}, -{21,-8,26}, -{21,-8,27}, -{21,-8,28}, -{21,-8,29}, -{21,-7,-18}, -{21,-7,-17}, -{21,-7,-16}, -{21,-7,-15}, -{21,-7,-14}, -{21,-7,-13}, -{21,-7,-12}, -{21,-7,-11}, -{21,-7,-10}, -{21,-7,-9}, -{21,-7,-8}, -{21,-7,-7}, -{21,-7,-6}, -{21,-7,-5}, -{21,-7,-4}, -{21,-7,-3}, -{21,-7,-2}, -{21,-7,-1}, -{21,-7,0}, -{21,-7,1}, -{21,-7,2}, -{21,-7,3}, -{21,-7,4}, -{21,-7,5}, -{21,-7,6}, -{21,-7,7}, -{21,-7,8}, -{21,-7,9}, -{21,-7,10}, -{21,-7,11}, -{21,-7,12}, -{21,-7,13}, -{21,-7,14}, -{21,-7,15}, -{21,-7,16}, -{21,-7,17}, -{21,-7,18}, -{21,-7,19}, -{21,-7,20}, -{21,-7,21}, -{21,-7,22}, -{21,-7,23}, -{21,-7,24}, -{21,-7,25}, -{21,-7,26}, -{21,-7,27}, -{21,-7,28}, -{21,-7,29}, -{21,-6,-19}, -{21,-6,-18}, -{21,-6,-17}, -{21,-6,-16}, -{21,-6,-15}, -{21,-6,-14}, -{21,-6,-13}, -{21,-6,-12}, -{21,-6,-11}, -{21,-6,-10}, -{21,-6,-9}, -{21,-6,-8}, -{21,-6,-7}, -{21,-6,-6}, -{21,-6,-5}, -{21,-6,-4}, -{21,-6,-3}, -{21,-6,-2}, -{21,-6,-1}, -{21,-6,0}, -{21,-6,1}, -{21,-6,2}, -{21,-6,3}, -{21,-6,4}, -{21,-6,5}, -{21,-6,6}, -{21,-6,7}, -{21,-6,8}, -{21,-6,9}, -{21,-6,10}, -{21,-6,11}, -{21,-6,12}, -{21,-6,13}, -{21,-6,14}, -{21,-6,15}, -{21,-6,16}, -{21,-6,17}, -{21,-6,18}, -{21,-6,19}, -{21,-6,20}, -{21,-6,21}, -{21,-6,22}, -{21,-6,23}, -{21,-6,24}, -{21,-6,25}, -{21,-6,26}, -{21,-6,27}, -{21,-6,28}, -{21,-6,29}, -{21,-5,-20}, -{21,-5,-19}, -{21,-5,-18}, -{21,-5,-17}, -{21,-5,-16}, -{21,-5,-15}, -{21,-5,-14}, -{21,-5,-13}, -{21,-5,-12}, -{21,-5,-11}, -{21,-5,-10}, -{21,-5,-9}, -{21,-5,-8}, -{21,-5,-7}, -{21,-5,-6}, -{21,-5,-5}, -{21,-5,-4}, -{21,-5,-3}, -{21,-5,-2}, -{21,-5,-1}, -{21,-5,0}, -{21,-5,1}, -{21,-5,2}, -{21,-5,3}, -{21,-5,4}, -{21,-5,5}, -{21,-5,6}, -{21,-5,7}, -{21,-5,8}, -{21,-5,9}, -{21,-5,10}, -{21,-5,11}, -{21,-5,12}, -{21,-5,13}, -{21,-5,14}, -{21,-5,15}, -{21,-5,16}, -{21,-5,17}, -{21,-5,18}, -{21,-5,19}, -{21,-5,20}, -{21,-5,21}, -{21,-5,22}, -{21,-5,23}, -{21,-5,24}, -{21,-5,25}, -{21,-5,26}, -{21,-5,27}, -{21,-5,28}, -{21,-5,29}, -{21,-4,-22}, -{21,-4,-21}, -{21,-4,-20}, -{21,-4,-19}, -{21,-4,-18}, -{21,-4,-17}, -{21,-4,-16}, -{21,-4,-15}, -{21,-4,-14}, -{21,-4,-13}, -{21,-4,-12}, -{21,-4,-11}, -{21,-4,-10}, -{21,-4,-9}, -{21,-4,-8}, -{21,-4,-7}, -{21,-4,-6}, -{21,-4,-5}, -{21,-4,-4}, -{21,-4,-3}, -{21,-4,-2}, -{21,-4,-1}, -{21,-4,0}, -{21,-4,1}, -{21,-4,2}, -{21,-4,3}, -{21,-4,4}, -{21,-4,5}, -{21,-4,6}, -{21,-4,7}, -{21,-4,8}, -{21,-4,9}, -{21,-4,10}, -{21,-4,11}, -{21,-4,12}, -{21,-4,13}, -{21,-4,14}, -{21,-4,15}, -{21,-4,16}, -{21,-4,17}, -{21,-4,18}, -{21,-4,19}, -{21,-4,20}, -{21,-4,21}, -{21,-4,22}, -{21,-4,23}, -{21,-4,24}, -{21,-4,25}, -{21,-4,26}, -{21,-4,27}, -{21,-4,28}, -{21,-4,29}, -{21,-3,-23}, -{21,-3,-22}, -{21,-3,-21}, -{21,-3,-20}, -{21,-3,-19}, -{21,-3,-18}, -{21,-3,-17}, -{21,-3,-16}, -{21,-3,-15}, -{21,-3,-14}, -{21,-3,-13}, -{21,-3,-12}, -{21,-3,-11}, -{21,-3,-10}, -{21,-3,-9}, -{21,-3,-8}, -{21,-3,-7}, -{21,-3,-6}, -{21,-3,-5}, -{21,-3,-4}, -{21,-3,-3}, -{21,-3,-2}, -{21,-3,-1}, -{21,-3,0}, -{21,-3,1}, -{21,-3,2}, -{21,-3,3}, -{21,-3,4}, -{21,-3,5}, -{21,-3,6}, -{21,-3,7}, -{21,-3,8}, -{21,-3,9}, -{21,-3,10}, -{21,-3,11}, -{21,-3,12}, -{21,-3,13}, -{21,-3,14}, -{21,-3,15}, -{21,-3,16}, -{21,-3,17}, -{21,-3,18}, -{21,-3,19}, -{21,-3,20}, -{21,-3,21}, -{21,-3,22}, -{21,-3,23}, -{21,-3,24}, -{21,-3,25}, -{21,-3,26}, -{21,-3,27}, -{21,-3,28}, -{21,-3,29}, -{21,-2,-24}, -{21,-2,-23}, -{21,-2,-22}, -{21,-2,-21}, -{21,-2,-20}, -{21,-2,-19}, -{21,-2,-18}, -{21,-2,-17}, -{21,-2,-16}, -{21,-2,-15}, -{21,-2,-14}, -{21,-2,-13}, -{21,-2,-12}, -{21,-2,-11}, -{21,-2,-10}, -{21,-2,-9}, -{21,-2,-8}, -{21,-2,-7}, -{21,-2,-6}, -{21,-2,-5}, -{21,-2,-4}, -{21,-2,-3}, -{21,-2,-2}, -{21,-2,-1}, -{21,-2,0}, -{21,-2,1}, -{21,-2,2}, -{21,-2,3}, -{21,-2,4}, -{21,-2,5}, -{21,-2,6}, -{21,-2,7}, -{21,-2,8}, -{21,-2,9}, -{21,-2,10}, -{21,-2,11}, -{21,-2,12}, -{21,-2,13}, -{21,-2,14}, -{21,-2,15}, -{21,-2,16}, -{21,-2,17}, -{21,-2,18}, -{21,-2,19}, -{21,-2,20}, -{21,-2,21}, -{21,-2,22}, -{21,-2,23}, -{21,-2,24}, -{21,-2,25}, -{21,-2,26}, -{21,-2,27}, -{21,-2,28}, -{21,-2,29}, -{21,-1,-25}, -{21,-1,-24}, -{21,-1,-23}, -{21,-1,-22}, -{21,-1,-21}, -{21,-1,-20}, -{21,-1,-19}, -{21,-1,-18}, -{21,-1,-17}, -{21,-1,-16}, -{21,-1,-15}, -{21,-1,-14}, -{21,-1,-13}, -{21,-1,-12}, -{21,-1,-11}, -{21,-1,-10}, -{21,-1,-9}, -{21,-1,-8}, -{21,-1,-7}, -{21,-1,-6}, -{21,-1,-5}, -{21,-1,-4}, -{21,-1,-3}, -{21,-1,-2}, -{21,-1,-1}, -{21,-1,0}, -{21,-1,1}, -{21,-1,2}, -{21,-1,3}, -{21,-1,4}, -{21,-1,5}, -{21,-1,6}, -{21,-1,7}, -{21,-1,8}, -{21,-1,9}, -{21,-1,10}, -{21,-1,11}, -{21,-1,12}, -{21,-1,13}, -{21,-1,14}, -{21,-1,15}, -{21,-1,16}, -{21,-1,17}, -{21,-1,18}, -{21,-1,19}, -{21,-1,20}, -{21,-1,21}, -{21,-1,22}, -{21,-1,23}, -{21,-1,24}, -{21,-1,25}, -{21,-1,26}, -{21,-1,27}, -{21,-1,28}, -{21,-1,29}, -{21,0,-26}, -{21,0,-25}, -{21,0,-24}, -{21,0,-23}, -{21,0,-22}, -{21,0,-21}, -{21,0,-20}, -{21,0,-19}, -{21,0,-18}, -{21,0,-17}, -{21,0,-16}, -{21,0,-15}, -{21,0,-14}, -{21,0,-13}, -{21,0,-12}, -{21,0,-11}, -{21,0,-10}, -{21,0,-9}, -{21,0,-8}, -{21,0,-7}, -{21,0,-6}, -{21,0,-5}, -{21,0,-4}, -{21,0,-3}, -{21,0,-2}, -{21,0,-1}, -{21,0,0}, -{21,0,1}, -{21,0,2}, -{21,0,3}, -{21,0,4}, -{21,0,5}, -{21,0,6}, -{21,0,7}, -{21,0,8}, -{21,0,9}, -{21,0,10}, -{21,0,11}, -{21,0,12}, -{21,0,13}, -{21,0,14}, -{21,0,15}, -{21,0,16}, -{21,0,17}, -{21,0,18}, -{21,0,19}, -{21,0,20}, -{21,0,21}, -{21,0,22}, -{21,0,23}, -{21,0,24}, -{21,0,25}, -{21,0,26}, -{21,0,27}, -{21,0,28}, -{21,0,29}, -{21,1,-27}, -{21,1,-26}, -{21,1,-25}, -{21,1,-24}, -{21,1,-23}, -{21,1,-22}, -{21,1,-21}, -{21,1,-20}, -{21,1,-19}, -{21,1,-18}, -{21,1,-17}, -{21,1,-16}, -{21,1,-15}, -{21,1,-14}, -{21,1,-13}, -{21,1,-12}, -{21,1,-11}, -{21,1,-10}, -{21,1,-9}, -{21,1,-8}, -{21,1,-7}, -{21,1,-6}, -{21,1,-5}, -{21,1,-4}, -{21,1,-3}, -{21,1,-2}, -{21,1,-1}, -{21,1,0}, -{21,1,1}, -{21,1,2}, -{21,1,3}, -{21,1,4}, -{21,1,5}, -{21,1,6}, -{21,1,7}, -{21,1,8}, -{21,1,9}, -{21,1,10}, -{21,1,11}, -{21,1,12}, -{21,1,13}, -{21,1,14}, -{21,1,15}, -{21,1,16}, -{21,1,17}, -{21,1,18}, -{21,1,19}, -{21,1,20}, -{21,1,21}, -{21,1,22}, -{21,1,23}, -{21,1,24}, -{21,1,25}, -{21,1,26}, -{21,1,27}, -{21,1,28}, -{21,1,29}, -{21,2,-29}, -{21,2,-28}, -{21,2,-27}, -{21,2,-26}, -{21,2,-25}, -{21,2,-24}, -{21,2,-23}, -{21,2,-22}, -{21,2,-21}, -{21,2,-20}, -{21,2,-19}, -{21,2,-18}, -{21,2,-17}, -{21,2,-16}, -{21,2,-15}, -{21,2,-14}, -{21,2,-13}, -{21,2,-12}, -{21,2,-11}, -{21,2,-10}, -{21,2,-9}, -{21,2,-8}, -{21,2,-7}, -{21,2,-6}, -{21,2,-5}, -{21,2,-4}, -{21,2,-3}, -{21,2,-2}, -{21,2,-1}, -{21,2,0}, -{21,2,1}, -{21,2,2}, -{21,2,3}, -{21,2,4}, -{21,2,5}, -{21,2,6}, -{21,2,7}, -{21,2,8}, -{21,2,9}, -{21,2,10}, -{21,2,11}, -{21,2,12}, -{21,2,13}, -{21,2,14}, -{21,2,15}, -{21,2,16}, -{21,2,17}, -{21,2,18}, -{21,2,19}, -{21,2,20}, -{21,2,21}, -{21,2,22}, -{21,2,23}, -{21,2,24}, -{21,2,25}, -{21,2,26}, -{21,2,27}, -{21,2,28}, -{21,2,29}, -{21,3,-30}, -{21,3,-29}, -{21,3,-28}, -{21,3,-27}, -{21,3,-26}, -{21,3,-25}, -{21,3,-24}, -{21,3,-23}, -{21,3,-22}, -{21,3,-21}, -{21,3,-20}, -{21,3,-19}, -{21,3,-18}, -{21,3,-17}, -{21,3,-16}, -{21,3,-15}, -{21,3,-14}, -{21,3,-13}, -{21,3,-12}, -{21,3,-11}, -{21,3,-10}, -{21,3,-9}, -{21,3,-8}, -{21,3,-7}, -{21,3,-6}, -{21,3,-5}, -{21,3,-4}, -{21,3,-3}, -{21,3,-2}, -{21,3,-1}, -{21,3,0}, -{21,3,1}, -{21,3,2}, -{21,3,3}, -{21,3,4}, -{21,3,5}, -{21,3,6}, -{21,3,7}, -{21,3,8}, -{21,3,9}, -{21,3,10}, -{21,3,11}, -{21,3,12}, -{21,3,13}, -{21,3,14}, -{21,3,15}, -{21,3,16}, -{21,3,17}, -{21,3,18}, -{21,3,19}, -{21,3,20}, -{21,3,21}, -{21,3,22}, -{21,3,23}, -{21,3,24}, -{21,3,25}, -{21,3,26}, -{21,3,27}, -{21,3,28}, -{21,3,29}, -{21,4,-31}, -{21,4,-30}, -{21,4,-29}, -{21,4,-28}, -{21,4,-27}, -{21,4,-26}, -{21,4,-25}, -{21,4,-24}, -{21,4,-23}, -{21,4,-22}, -{21,4,-21}, -{21,4,-20}, -{21,4,-19}, -{21,4,-18}, -{21,4,-17}, -{21,4,-16}, -{21,4,-15}, -{21,4,-14}, -{21,4,-13}, -{21,4,-12}, -{21,4,-11}, -{21,4,-10}, -{21,4,-9}, -{21,4,-8}, -{21,4,-7}, -{21,4,-6}, -{21,4,-5}, -{21,4,-4}, -{21,4,-3}, -{21,4,-2}, -{21,4,-1}, -{21,4,0}, -{21,4,1}, -{21,4,2}, -{21,4,3}, -{21,4,4}, -{21,4,5}, -{21,4,6}, -{21,4,7}, -{21,4,8}, -{21,4,9}, -{21,4,10}, -{21,4,11}, -{21,4,12}, -{21,4,13}, -{21,4,14}, -{21,4,15}, -{21,4,16}, -{21,4,17}, -{21,4,18}, -{21,4,19}, -{21,4,20}, -{21,4,21}, -{21,4,22}, -{21,4,23}, -{21,4,24}, -{21,4,25}, -{21,4,26}, -{21,4,27}, -{21,4,28}, -{21,4,29}, -{21,5,-32}, -{21,5,-31}, -{21,5,-30}, -{21,5,-29}, -{21,5,-28}, -{21,5,-27}, -{21,5,-26}, -{21,5,-25}, -{21,5,-24}, -{21,5,-23}, -{21,5,-22}, -{21,5,-21}, -{21,5,-20}, -{21,5,-19}, -{21,5,-18}, -{21,5,-17}, -{21,5,-16}, -{21,5,-15}, -{21,5,-14}, -{21,5,-13}, -{21,5,-12}, -{21,5,-11}, -{21,5,-10}, -{21,5,-9}, -{21,5,-8}, -{21,5,-7}, -{21,5,-6}, -{21,5,-5}, -{21,5,-4}, -{21,5,-3}, -{21,5,-2}, -{21,5,-1}, -{21,5,0}, -{21,5,1}, -{21,5,2}, -{21,5,3}, -{21,5,4}, -{21,5,5}, -{21,5,6}, -{21,5,7}, -{21,5,8}, -{21,5,9}, -{21,5,10}, -{21,5,11}, -{21,5,12}, -{21,5,13}, -{21,5,14}, -{21,5,15}, -{21,5,16}, -{21,5,17}, -{21,5,18}, -{21,5,19}, -{21,5,20}, -{21,5,21}, -{21,5,22}, -{21,5,23}, -{21,5,24}, -{21,5,25}, -{21,5,26}, -{21,5,27}, -{21,5,28}, -{21,5,29}, -{21,6,-33}, -{21,6,-32}, -{21,6,-31}, -{21,6,-30}, -{21,6,-29}, -{21,6,-28}, -{21,6,-27}, -{21,6,-26}, -{21,6,-25}, -{21,6,-24}, -{21,6,-23}, -{21,6,-22}, -{21,6,-21}, -{21,6,-20}, -{21,6,-19}, -{21,6,-18}, -{21,6,-17}, -{21,6,-16}, -{21,6,-15}, -{21,6,-14}, -{21,6,-13}, -{21,6,-12}, -{21,6,-11}, -{21,6,-10}, -{21,6,-9}, -{21,6,-8}, -{21,6,-7}, -{21,6,-6}, -{21,6,-5}, -{21,6,-4}, -{21,6,-3}, -{21,6,-2}, -{21,6,-1}, -{21,6,0}, -{21,6,1}, -{21,6,2}, -{21,6,3}, -{21,6,4}, -{21,6,5}, -{21,6,6}, -{21,6,7}, -{21,6,8}, -{21,6,9}, -{21,6,10}, -{21,6,11}, -{21,6,12}, -{21,6,13}, -{21,6,14}, -{21,6,15}, -{21,6,16}, -{21,6,17}, -{21,6,18}, -{21,6,19}, -{21,6,20}, -{21,6,21}, -{21,6,22}, -{21,6,23}, -{21,6,24}, -{21,6,25}, -{21,6,26}, -{21,6,27}, -{21,6,28}, -{21,6,29}, -{21,6,30}, -{21,7,-34}, -{21,7,-33}, -{21,7,-32}, -{21,7,-31}, -{21,7,-30}, -{21,7,-29}, -{21,7,-28}, -{21,7,-27}, -{21,7,-26}, -{21,7,-25}, -{21,7,-24}, -{21,7,-23}, -{21,7,-22}, -{21,7,-21}, -{21,7,-20}, -{21,7,-19}, -{21,7,-18}, -{21,7,-17}, -{21,7,-16}, -{21,7,-15}, -{21,7,-14}, -{21,7,-13}, -{21,7,-12}, -{21,7,-11}, -{21,7,-10}, -{21,7,-9}, -{21,7,-8}, -{21,7,-7}, -{21,7,-6}, -{21,7,-5}, -{21,7,-4}, -{21,7,-3}, -{21,7,-2}, -{21,7,-1}, -{21,7,0}, -{21,7,1}, -{21,7,2}, -{21,7,3}, -{21,7,4}, -{21,7,5}, -{21,7,6}, -{21,7,7}, -{21,7,8}, -{21,7,9}, -{21,7,10}, -{21,7,11}, -{21,7,12}, -{21,7,13}, -{21,7,14}, -{21,7,15}, -{21,7,16}, -{21,7,17}, -{21,7,18}, -{21,7,19}, -{21,7,20}, -{21,7,21}, -{21,7,22}, -{21,7,23}, -{21,7,24}, -{21,7,25}, -{21,7,26}, -{21,7,27}, -{21,7,28}, -{21,7,29}, -{21,7,30}, -{21,8,-35}, -{21,8,-34}, -{21,8,-33}, -{21,8,-32}, -{21,8,-31}, -{21,8,-30}, -{21,8,-29}, -{21,8,-28}, -{21,8,-27}, -{21,8,-26}, -{21,8,-25}, -{21,8,-24}, -{21,8,-23}, -{21,8,-22}, -{21,8,-21}, -{21,8,-20}, -{21,8,-19}, -{21,8,-18}, -{21,8,-17}, -{21,8,-16}, -{21,8,-15}, -{21,8,-14}, -{21,8,-13}, -{21,8,-12}, -{21,8,-11}, -{21,8,-10}, -{21,8,-9}, -{21,8,-8}, -{21,8,-7}, -{21,8,-6}, -{21,8,-5}, -{21,8,-4}, -{21,8,-3}, -{21,8,-2}, -{21,8,-1}, -{21,8,0}, -{21,8,1}, -{21,8,2}, -{21,8,3}, -{21,8,4}, -{21,8,5}, -{21,8,6}, -{21,8,7}, -{21,8,8}, -{21,8,9}, -{21,8,10}, -{21,8,11}, -{21,8,12}, -{21,8,13}, -{21,8,14}, -{21,8,15}, -{21,8,16}, -{21,8,17}, -{21,8,18}, -{21,8,19}, -{21,8,20}, -{21,8,21}, -{21,8,22}, -{21,8,23}, -{21,8,24}, -{21,8,25}, -{21,8,26}, -{21,8,27}, -{21,8,28}, -{21,8,29}, -{21,8,30}, -{21,9,-36}, -{21,9,-35}, -{21,9,-34}, -{21,9,-33}, -{21,9,-32}, -{21,9,-31}, -{21,9,-30}, -{21,9,-29}, -{21,9,-28}, -{21,9,-27}, -{21,9,-26}, -{21,9,-25}, -{21,9,-24}, -{21,9,-23}, -{21,9,-22}, -{21,9,-21}, -{21,9,-20}, -{21,9,-19}, -{21,9,-18}, -{21,9,-17}, -{21,9,-16}, -{21,9,-15}, -{21,9,-14}, -{21,9,-13}, -{21,9,-12}, -{21,9,-11}, -{21,9,-10}, -{21,9,-9}, -{21,9,-8}, -{21,9,-7}, -{21,9,-6}, -{21,9,-5}, -{21,9,-4}, -{21,9,-3}, -{21,9,-2}, -{21,9,-1}, -{21,9,0}, -{21,9,1}, -{21,9,2}, -{21,9,3}, -{21,9,4}, -{21,9,5}, -{21,9,6}, -{21,9,7}, -{21,9,8}, -{21,9,9}, -{21,9,10}, -{21,9,11}, -{21,9,12}, -{21,9,13}, -{21,9,14}, -{21,9,15}, -{21,9,16}, -{21,9,17}, -{21,9,18}, -{21,9,19}, -{21,9,20}, -{21,9,21}, -{21,9,22}, -{21,9,23}, -{21,9,24}, -{21,9,25}, -{21,9,26}, -{21,9,27}, -{21,9,28}, -{21,9,29}, -{21,9,30}, -{21,10,-37}, -{21,10,-36}, -{21,10,-35}, -{21,10,-34}, -{21,10,-33}, -{21,10,-32}, -{21,10,-31}, -{21,10,-30}, -{21,10,-29}, -{21,10,-28}, -{21,10,-27}, -{21,10,-26}, -{21,10,-25}, -{21,10,-24}, -{21,10,-23}, -{21,10,-22}, -{21,10,-21}, -{21,10,-20}, -{21,10,-19}, -{21,10,-18}, -{21,10,-17}, -{21,10,-16}, -{21,10,-15}, -{21,10,-14}, -{21,10,-13}, -{21,10,-12}, -{21,10,-11}, -{21,10,-10}, -{21,10,-9}, -{21,10,-8}, -{21,10,-7}, -{21,10,-6}, -{21,10,-5}, -{21,10,-4}, -{21,10,-3}, -{21,10,-2}, -{21,10,-1}, -{21,10,0}, -{21,10,1}, -{21,10,2}, -{21,10,3}, -{21,10,4}, -{21,10,5}, -{21,10,6}, -{21,10,7}, -{21,10,8}, -{21,10,9}, -{21,10,10}, -{21,10,11}, -{21,10,12}, -{21,10,13}, -{21,10,14}, -{21,10,15}, -{21,10,16}, -{21,10,17}, -{21,10,18}, -{21,10,19}, -{21,10,20}, -{21,10,21}, -{21,10,22}, -{21,10,23}, -{21,10,24}, -{21,10,25}, -{21,10,26}, -{21,10,27}, -{21,10,28}, -{21,10,29}, -{21,10,30}, -{21,11,-38}, -{21,11,-37}, -{21,11,-36}, -{21,11,-35}, -{21,11,-34}, -{21,11,-33}, -{21,11,-32}, -{21,11,-31}, -{21,11,-30}, -{21,11,-29}, -{21,11,-28}, -{21,11,-27}, -{21,11,-26}, -{21,11,-25}, -{21,11,-24}, -{21,11,-23}, -{21,11,-22}, -{21,11,-21}, -{21,11,-20}, -{21,11,-19}, -{21,11,-18}, -{21,11,-17}, -{21,11,-16}, -{21,11,-15}, -{21,11,-14}, -{21,11,-13}, -{21,11,-12}, -{21,11,-11}, -{21,11,-10}, -{21,11,-9}, -{21,11,-8}, -{21,11,-7}, -{21,11,-6}, -{21,11,-5}, -{21,11,-4}, -{21,11,-3}, -{21,11,-2}, -{21,11,-1}, -{21,11,0}, -{21,11,1}, -{21,11,2}, -{21,11,3}, -{21,11,4}, -{21,11,5}, -{21,11,6}, -{21,11,7}, -{21,11,8}, -{21,11,9}, -{21,11,10}, -{21,11,11}, -{21,11,12}, -{21,11,13}, -{21,11,14}, -{21,11,15}, -{21,11,16}, -{21,11,17}, -{21,11,18}, -{21,11,19}, -{21,11,20}, -{21,11,21}, -{21,11,22}, -{21,11,23}, -{21,11,24}, -{21,11,25}, -{21,11,26}, -{21,11,27}, -{21,11,28}, -{21,11,29}, -{21,11,30}, -{21,12,-39}, -{21,12,-38}, -{21,12,-37}, -{21,12,-36}, -{21,12,-35}, -{21,12,-34}, -{21,12,-33}, -{21,12,-32}, -{21,12,-31}, -{21,12,-30}, -{21,12,-29}, -{21,12,-28}, -{21,12,-27}, -{21,12,-26}, -{21,12,-25}, -{21,12,-24}, -{21,12,-23}, -{21,12,-22}, -{21,12,-21}, -{21,12,-20}, -{21,12,-19}, -{21,12,-18}, -{21,12,-17}, -{21,12,-16}, -{21,12,-15}, -{21,12,-14}, -{21,12,-13}, -{21,12,-12}, -{21,12,-11}, -{21,12,-10}, -{21,12,-9}, -{21,12,-8}, -{21,12,-7}, -{21,12,-6}, -{21,12,-5}, -{21,12,-4}, -{21,12,-3}, -{21,12,-2}, -{21,12,-1}, -{21,12,0}, -{21,12,1}, -{21,12,2}, -{21,12,3}, -{21,12,4}, -{21,12,5}, -{21,12,6}, -{21,12,7}, -{21,12,8}, -{21,12,9}, -{21,12,10}, -{21,12,11}, -{21,12,12}, -{21,12,13}, -{21,12,14}, -{21,12,15}, -{21,12,16}, -{21,12,17}, -{21,12,18}, -{21,12,19}, -{21,12,20}, -{21,12,21}, -{21,12,22}, -{21,12,23}, -{21,12,24}, -{21,12,25}, -{21,12,26}, -{21,12,27}, -{21,12,28}, -{21,12,29}, -{21,12,30}, -{21,13,-40}, -{21,13,-39}, -{21,13,-38}, -{21,13,-37}, -{21,13,-36}, -{21,13,-35}, -{21,13,-34}, -{21,13,-33}, -{21,13,-32}, -{21,13,-31}, -{21,13,-30}, -{21,13,-29}, -{21,13,-28}, -{21,13,-27}, -{21,13,-26}, -{21,13,-25}, -{21,13,-24}, -{21,13,-23}, -{21,13,-22}, -{21,13,-21}, -{21,13,-20}, -{21,13,-19}, -{21,13,-18}, -{21,13,-17}, -{21,13,-16}, -{21,13,-15}, -{21,13,-14}, -{21,13,-13}, -{21,13,-12}, -{21,13,-11}, -{21,13,-10}, -{21,13,-9}, -{21,13,-8}, -{21,13,-7}, -{21,13,-6}, -{21,13,-5}, -{21,13,-4}, -{21,13,-3}, -{21,13,-2}, -{21,13,-1}, -{21,13,0}, -{21,13,1}, -{21,13,2}, -{21,13,3}, -{21,13,4}, -{21,13,5}, -{21,13,6}, -{21,13,7}, -{21,13,8}, -{21,13,9}, -{21,13,10}, -{21,13,11}, -{21,13,12}, -{21,13,13}, -{21,13,14}, -{21,13,15}, -{21,13,16}, -{21,13,17}, -{21,13,18}, -{21,13,19}, -{21,13,20}, -{21,13,21}, -{21,13,22}, -{21,13,23}, -{21,13,24}, -{21,13,25}, -{21,13,26}, -{21,13,27}, -{21,13,28}, -{21,13,29}, -{21,13,30}, -{21,14,-41}, -{21,14,-40}, -{21,14,-39}, -{21,14,-38}, -{21,14,-37}, -{21,14,-36}, -{21,14,-35}, -{21,14,-34}, -{21,14,-33}, -{21,14,-32}, -{21,14,-31}, -{21,14,-30}, -{21,14,-29}, -{21,14,-28}, -{21,14,-27}, -{21,14,-26}, -{21,14,-25}, -{21,14,-24}, -{21,14,-23}, -{21,14,-22}, -{21,14,-21}, -{21,14,-20}, -{21,14,-19}, -{21,14,-18}, -{21,14,-17}, -{21,14,-16}, -{21,14,-15}, -{21,14,-14}, -{21,14,-13}, -{21,14,-12}, -{21,14,-11}, -{21,14,-10}, -{21,14,-9}, -{21,14,-8}, -{21,14,-7}, -{21,14,-6}, -{21,14,-5}, -{21,14,-4}, -{21,14,-3}, -{21,14,-2}, -{21,14,-1}, -{21,14,0}, -{21,14,1}, -{21,14,2}, -{21,14,3}, -{21,14,4}, -{21,14,5}, -{21,14,6}, -{21,14,7}, -{21,14,8}, -{21,14,9}, -{21,14,10}, -{21,14,11}, -{21,14,12}, -{21,14,13}, -{21,14,14}, -{21,14,15}, -{21,14,16}, -{21,14,17}, -{21,14,18}, -{21,14,19}, -{21,14,20}, -{21,14,21}, -{21,14,22}, -{21,14,23}, -{21,14,24}, -{21,14,25}, -{21,14,26}, -{21,14,27}, -{21,14,28}, -{21,14,29}, -{21,14,30}, -{21,15,-42}, -{21,15,-41}, -{21,15,-40}, -{21,15,-39}, -{21,15,-38}, -{21,15,-37}, -{21,15,-36}, -{21,15,-35}, -{21,15,-34}, -{21,15,-33}, -{21,15,-32}, -{21,15,-31}, -{21,15,-30}, -{21,15,-29}, -{21,15,-28}, -{21,15,-27}, -{21,15,-26}, -{21,15,-25}, -{21,15,-24}, -{21,15,-23}, -{21,15,-22}, -{21,15,-21}, -{21,15,-20}, -{21,15,-19}, -{21,15,-18}, -{21,15,-17}, -{21,15,-16}, -{21,15,-15}, -{21,15,-14}, -{21,15,-13}, -{21,15,-12}, -{21,15,-11}, -{21,15,-10}, -{21,15,-9}, -{21,15,-8}, -{21,15,-7}, -{21,15,-6}, -{21,15,-5}, -{21,15,-4}, -{21,15,-3}, -{21,15,-2}, -{21,15,-1}, -{21,15,0}, -{21,15,1}, -{21,15,2}, -{21,15,3}, -{21,15,4}, -{21,15,5}, -{21,15,6}, -{21,15,7}, -{21,15,8}, -{21,15,9}, -{21,15,10}, -{21,15,11}, -{21,15,12}, -{21,15,13}, -{21,15,14}, -{21,15,15}, -{21,15,16}, -{21,15,17}, -{21,15,18}, -{21,15,19}, -{21,15,20}, -{21,15,21}, -{21,15,22}, -{21,15,23}, -{21,15,24}, -{21,15,25}, -{21,15,26}, -{21,15,27}, -{21,15,28}, -{21,15,29}, -{21,15,30}, -{21,16,-43}, -{21,16,-42}, -{21,16,-41}, -{21,16,-40}, -{21,16,-39}, -{21,16,-38}, -{21,16,-37}, -{21,16,-36}, -{21,16,-35}, -{21,16,-34}, -{21,16,-33}, -{21,16,-32}, -{21,16,-31}, -{21,16,-30}, -{21,16,-29}, -{21,16,-28}, -{21,16,-27}, -{21,16,-26}, -{21,16,-25}, -{21,16,-24}, -{21,16,-23}, -{21,16,-22}, -{21,16,-21}, -{21,16,-20}, -{21,16,-19}, -{21,16,-18}, -{21,16,-17}, -{21,16,-16}, -{21,16,-15}, -{21,16,-14}, -{21,16,-13}, -{21,16,-12}, -{21,16,-11}, -{21,16,-10}, -{21,16,-9}, -{21,16,-8}, -{21,16,-7}, -{21,16,-6}, -{21,16,-5}, -{21,16,-4}, -{21,16,-3}, -{21,16,-2}, -{21,16,-1}, -{21,16,0}, -{21,16,1}, -{21,16,2}, -{21,16,3}, -{21,16,4}, -{21,16,5}, -{21,16,6}, -{21,16,7}, -{21,16,8}, -{21,16,9}, -{21,16,10}, -{21,16,11}, -{21,16,12}, -{21,16,13}, -{21,16,14}, -{21,16,15}, -{21,16,16}, -{21,16,17}, -{21,16,18}, -{21,16,19}, -{21,16,20}, -{21,16,21}, -{21,16,22}, -{21,16,23}, -{21,16,24}, -{21,16,25}, -{21,16,26}, -{21,16,27}, -{21,16,28}, -{21,16,29}, -{21,16,30}, -{21,17,-44}, -{21,17,-43}, -{21,17,-42}, -{21,17,-41}, -{21,17,-40}, -{21,17,-39}, -{21,17,-38}, -{21,17,-37}, -{21,17,-36}, -{21,17,-35}, -{21,17,-34}, -{21,17,-33}, -{21,17,-32}, -{21,17,-31}, -{21,17,-30}, -{21,17,-29}, -{21,17,-28}, -{21,17,-27}, -{21,17,-26}, -{21,17,-25}, -{21,17,-24}, -{21,17,-23}, -{21,17,-22}, -{21,17,-21}, -{21,17,-20}, -{21,17,-19}, -{21,17,-18}, -{21,17,-17}, -{21,17,-16}, -{21,17,-15}, -{21,17,-14}, -{21,17,-13}, -{21,17,-12}, -{21,17,-11}, -{21,17,-10}, -{21,17,-9}, -{21,17,-8}, -{21,17,-7}, -{21,17,-6}, -{21,17,-5}, -{21,17,-4}, -{21,17,-3}, -{21,17,-2}, -{21,17,-1}, -{21,17,0}, -{21,17,1}, -{21,17,2}, -{21,17,3}, -{21,17,4}, -{21,17,5}, -{21,17,6}, -{21,17,7}, -{21,17,8}, -{21,17,9}, -{21,17,10}, -{21,17,11}, -{21,17,12}, -{21,17,13}, -{21,17,14}, -{21,17,15}, -{21,17,16}, -{21,17,17}, -{21,17,18}, -{21,17,19}, -{21,17,20}, -{21,17,21}, -{21,17,22}, -{21,17,23}, -{21,17,24}, -{21,17,25}, -{21,17,26}, -{21,17,27}, -{21,17,28}, -{21,17,29}, -{21,17,30}, -{21,18,-45}, -{21,18,-44}, -{21,18,-43}, -{21,18,-42}, -{21,18,-41}, -{21,18,-40}, -{21,18,-39}, -{21,18,-38}, -{21,18,-37}, -{21,18,-36}, -{21,18,-35}, -{21,18,-34}, -{21,18,-33}, -{21,18,-32}, -{21,18,-31}, -{21,18,-30}, -{21,18,-29}, -{21,18,-28}, -{21,18,-27}, -{21,18,-26}, -{21,18,-25}, -{21,18,-24}, -{21,18,-23}, -{21,18,-22}, -{21,18,-21}, -{21,18,-20}, -{21,18,-19}, -{21,18,-18}, -{21,18,-17}, -{21,18,-16}, -{21,18,-15}, -{21,18,-14}, -{21,18,-13}, -{21,18,-12}, -{21,18,-11}, -{21,18,-10}, -{21,18,-9}, -{21,18,-8}, -{21,18,-7}, -{21,18,-6}, -{21,18,-5}, -{21,18,-4}, -{21,18,-3}, -{21,18,-2}, -{21,18,-1}, -{21,18,0}, -{21,18,1}, -{21,18,2}, -{21,18,3}, -{21,18,4}, -{21,18,5}, -{21,18,6}, -{21,18,7}, -{21,18,8}, -{21,18,9}, -{21,18,10}, -{21,18,11}, -{21,18,12}, -{21,18,13}, -{21,18,14}, -{21,18,15}, -{21,18,16}, -{21,18,17}, -{21,18,18}, -{21,18,19}, -{21,18,20}, -{21,18,21}, -{21,18,22}, -{21,18,23}, -{21,18,24}, -{21,18,25}, -{21,18,26}, -{21,18,27}, -{21,18,28}, -{21,18,29}, -{21,18,30}, -{21,19,-46}, -{21,19,-45}, -{21,19,-44}, -{21,19,-43}, -{21,19,-42}, -{21,19,-41}, -{21,19,-40}, -{21,19,-39}, -{21,19,-38}, -{21,19,-37}, -{21,19,-36}, -{21,19,-35}, -{21,19,-34}, -{21,19,-33}, -{21,19,-32}, -{21,19,-31}, -{21,19,-30}, -{21,19,-29}, -{21,19,-28}, -{21,19,-27}, -{21,19,-26}, -{21,19,-25}, -{21,19,-24}, -{21,19,-23}, -{21,19,-22}, -{21,19,-21}, -{21,19,-20}, -{21,19,-19}, -{21,19,-18}, -{21,19,-17}, -{21,19,-16}, -{21,19,-15}, -{21,19,-14}, -{21,19,-13}, -{21,19,-12}, -{21,19,-11}, -{21,19,-10}, -{21,19,-9}, -{21,19,-8}, -{21,19,-7}, -{21,19,-6}, -{21,19,-5}, -{21,19,-4}, -{21,19,-3}, -{21,19,-2}, -{21,19,-1}, -{21,19,0}, -{21,19,1}, -{21,19,2}, -{21,19,3}, -{21,19,4}, -{21,19,5}, -{21,19,6}, -{21,19,7}, -{21,19,8}, -{21,19,9}, -{21,19,10}, -{21,19,11}, -{21,19,12}, -{21,19,13}, -{21,19,14}, -{21,19,15}, -{21,19,16}, -{21,19,17}, -{21,19,18}, -{21,19,19}, -{21,19,20}, -{21,19,21}, -{21,19,22}, -{21,19,23}, -{21,19,24}, -{21,19,25}, -{21,19,26}, -{21,19,27}, -{21,19,28}, -{21,19,29}, -{21,19,30}, -{21,20,-47}, -{21,20,-46}, -{21,20,-45}, -{21,20,-44}, -{21,20,-43}, -{21,20,-42}, -{21,20,-41}, -{21,20,-40}, -{21,20,-39}, -{21,20,-38}, -{21,20,-37}, -{21,20,-36}, -{21,20,-35}, -{21,20,-34}, -{21,20,-33}, -{21,20,-32}, -{21,20,-31}, -{21,20,-30}, -{21,20,-29}, -{21,20,-28}, -{21,20,-27}, -{21,20,-26}, -{21,20,-25}, -{21,20,-24}, -{21,20,-23}, -{21,20,-22}, -{21,20,-21}, -{21,20,-20}, -{21,20,-19}, -{21,20,-18}, -{21,20,-17}, -{21,20,-16}, -{21,20,-15}, -{21,20,-14}, -{21,20,-13}, -{21,20,-12}, -{21,20,-11}, -{21,20,-10}, -{21,20,-9}, -{21,20,-8}, -{21,20,-7}, -{21,20,-6}, -{21,20,-5}, -{21,20,-4}, -{21,20,-3}, -{21,20,-2}, -{21,20,-1}, -{21,20,0}, -{21,20,1}, -{21,20,2}, -{21,20,3}, -{21,20,4}, -{21,20,5}, -{21,20,6}, -{21,20,7}, -{21,20,8}, -{21,20,9}, -{21,20,10}, -{21,20,11}, -{21,20,12}, -{21,20,13}, -{21,20,14}, -{21,20,15}, -{21,20,16}, -{21,20,17}, -{21,20,18}, -{21,20,19}, -{21,20,20}, -{21,20,21}, -{21,20,22}, -{21,20,23}, -{21,20,24}, -{21,20,25}, -{21,20,26}, -{21,20,27}, -{21,20,28}, -{21,20,29}, -{21,20,30}, -{21,21,-48}, -{21,21,-47}, -{21,21,-46}, -{21,21,-45}, -{21,21,-44}, -{21,21,-43}, -{21,21,-42}, -{21,21,-41}, -{21,21,-40}, -{21,21,-39}, -{21,21,-38}, -{21,21,-37}, -{21,21,-36}, -{21,21,-35}, -{21,21,-34}, -{21,21,-33}, -{21,21,-32}, -{21,21,-31}, -{21,21,-30}, -{21,21,-29}, -{21,21,-28}, -{21,21,-27}, -{21,21,-26}, -{21,21,-25}, -{21,21,-24}, -{21,21,-23}, -{21,21,-22}, -{21,21,-21}, -{21,21,-20}, -{21,21,-19}, -{21,21,-18}, -{21,21,-17}, -{21,21,-16}, -{21,21,-15}, -{21,21,-14}, -{21,21,-13}, -{21,21,-12}, -{21,21,-11}, -{21,21,-10}, -{21,21,-9}, -{21,21,-8}, -{21,21,-7}, -{21,21,-6}, -{21,21,-5}, -{21,21,-4}, -{21,21,-3}, -{21,21,-2}, -{21,21,-1}, -{21,21,0}, -{21,21,1}, -{21,21,2}, -{21,21,3}, -{21,21,4}, -{21,21,5}, -{21,21,6}, -{21,21,7}, -{21,21,8}, -{21,21,9}, -{21,21,10}, -{21,21,11}, -{21,21,12}, -{21,21,13}, -{21,21,14}, -{21,21,15}, -{21,21,16}, -{21,21,17}, -{21,21,18}, -{21,21,19}, -{21,21,20}, -{21,21,21}, -{21,21,22}, -{21,21,23}, -{21,21,24}, -{21,21,25}, -{21,21,26}, -{21,21,27}, -{21,21,28}, -{21,21,29}, -{21,21,30}, -{21,22,-49}, -{21,22,-48}, -{21,22,-47}, -{21,22,-46}, -{21,22,-45}, -{21,22,-44}, -{21,22,-43}, -{21,22,-42}, -{21,22,-41}, -{21,22,-40}, -{21,22,-39}, -{21,22,-38}, -{21,22,-37}, -{21,22,-36}, -{21,22,-35}, -{21,22,-34}, -{21,22,-33}, -{21,22,-32}, -{21,22,-31}, -{21,22,-30}, -{21,22,-29}, -{21,22,-28}, -{21,22,-27}, -{21,22,-26}, -{21,22,-25}, -{21,22,-24}, -{21,22,-23}, -{21,22,-22}, -{21,22,-21}, -{21,22,-20}, -{21,22,-19}, -{21,22,-18}, -{21,22,-17}, -{21,22,-16}, -{21,22,-15}, -{21,22,-14}, -{21,22,-13}, -{21,22,-12}, -{21,22,-11}, -{21,22,-10}, -{21,22,-9}, -{21,22,-8}, -{21,22,-7}, -{21,22,-6}, -{21,22,-5}, -{21,22,-4}, -{21,22,-3}, -{21,22,-2}, -{21,22,-1}, -{21,22,0}, -{21,22,1}, -{21,22,2}, -{21,22,3}, -{21,22,4}, -{21,22,5}, -{21,22,6}, -{21,22,7}, -{21,22,8}, -{21,22,9}, -{21,22,10}, -{21,22,11}, -{21,22,12}, -{21,22,13}, -{21,22,14}, -{21,22,15}, -{21,22,16}, -{21,22,17}, -{21,22,18}, -{21,22,19}, -{21,22,20}, -{21,22,21}, -{21,22,22}, -{21,22,23}, -{21,22,24}, -{21,22,25}, -{21,22,26}, -{21,22,27}, -{21,22,28}, -{21,22,29}, -{21,22,30}, -{21,23,-50}, -{21,23,-49}, -{21,23,-48}, -{21,23,-47}, -{21,23,-46}, -{21,23,-45}, -{21,23,-44}, -{21,23,-43}, -{21,23,-42}, -{21,23,-41}, -{21,23,-40}, -{21,23,-39}, -{21,23,-38}, -{21,23,-37}, -{21,23,-36}, -{21,23,-35}, -{21,23,-34}, -{21,23,-33}, -{21,23,-32}, -{21,23,-31}, -{21,23,-30}, -{21,23,-29}, -{21,23,-28}, -{21,23,-27}, -{21,23,-26}, -{21,23,-25}, -{21,23,-24}, -{21,23,-23}, -{21,23,-22}, -{21,23,-21}, -{21,23,-20}, -{21,23,-19}, -{21,23,-18}, -{21,23,-17}, -{21,23,-16}, -{21,23,-15}, -{21,23,-14}, -{21,23,-13}, -{21,23,-12}, -{21,23,-11}, -{21,23,-10}, -{21,23,-9}, -{21,23,-8}, -{21,23,-7}, -{21,23,-6}, -{21,23,-5}, -{21,23,-4}, -{21,23,-3}, -{21,23,-2}, -{21,23,-1}, -{21,23,0}, -{21,23,1}, -{21,23,2}, -{21,23,3}, -{21,23,4}, -{21,23,5}, -{21,23,6}, -{21,23,7}, -{21,23,8}, -{21,23,9}, -{21,23,10}, -{21,23,11}, -{21,23,12}, -{21,23,13}, -{21,23,14}, -{21,23,15}, -{21,23,16}, -{21,23,17}, -{21,23,18}, -{21,23,19}, -{21,23,20}, -{21,23,21}, -{21,23,22}, -{21,23,23}, -{21,23,24}, -{21,23,25}, -{21,23,26}, -{21,23,27}, -{21,23,28}, -{21,23,29}, -{21,23,30}, -{21,24,-51}, -{21,24,-50}, -{21,24,-49}, -{21,24,-48}, -{21,24,-47}, -{21,24,-46}, -{21,24,-45}, -{21,24,-44}, -{21,24,-43}, -{21,24,-42}, -{21,24,-41}, -{21,24,-40}, -{21,24,-39}, -{21,24,-38}, -{21,24,-37}, -{21,24,-36}, -{21,24,-35}, -{21,24,-34}, -{21,24,-33}, -{21,24,-32}, -{21,24,-31}, -{21,24,-30}, -{21,24,-29}, -{21,24,-28}, -{21,24,-27}, -{21,24,-26}, -{21,24,-25}, -{21,24,-24}, -{21,24,-23}, -{21,24,-22}, -{21,24,-21}, -{21,24,-20}, -{21,24,-19}, -{21,24,-18}, -{21,24,-17}, -{21,24,-16}, -{21,24,-15}, -{21,24,-14}, -{21,24,-13}, -{21,24,-12}, -{21,24,-11}, -{21,24,-10}, -{21,24,-9}, -{21,24,-8}, -{21,24,-7}, -{21,24,-6}, -{21,24,-5}, -{21,24,-4}, -{21,24,-3}, -{21,24,-2}, -{21,24,-1}, -{21,24,0}, -{21,24,1}, -{21,24,2}, -{21,24,3}, -{21,24,4}, -{21,24,5}, -{21,24,6}, -{21,24,7}, -{21,24,8}, -{21,24,9}, -{21,24,10}, -{21,24,11}, -{21,24,12}, -{21,24,13}, -{21,24,14}, -{21,24,15}, -{21,24,16}, -{21,24,17}, -{21,24,18}, -{21,24,19}, -{21,24,20}, -{21,24,21}, -{21,24,22}, -{21,24,23}, -{21,24,24}, -{21,24,25}, -{21,24,26}, -{21,24,27}, -{21,24,28}, -{21,24,29}, -{21,24,30}, -{21,25,-51}, -{21,25,-50}, -{21,25,-49}, -{21,25,-48}, -{21,25,-47}, -{21,25,-46}, -{21,25,-45}, -{21,25,-44}, -{21,25,-43}, -{21,25,-42}, -{21,25,-41}, -{21,25,-40}, -{21,25,-39}, -{21,25,-38}, -{21,25,-37}, -{21,25,-36}, -{21,25,-35}, -{21,25,-34}, -{21,25,-33}, -{21,25,-32}, -{21,25,-31}, -{21,25,-30}, -{21,25,-29}, -{21,25,-28}, -{21,25,-27}, -{21,25,-26}, -{21,25,-25}, -{21,25,-24}, -{21,25,-23}, -{21,25,-22}, -{21,25,-21}, -{21,25,-20}, -{21,25,-19}, -{21,25,-18}, -{21,25,-17}, -{21,25,-16}, -{21,25,-15}, -{21,25,-14}, -{21,25,-13}, -{21,25,-12}, -{21,25,-11}, -{21,25,-10}, -{21,25,-9}, -{21,25,-8}, -{21,25,-7}, -{21,25,-6}, -{21,25,-5}, -{21,25,-4}, -{21,25,-3}, -{21,25,-2}, -{21,25,-1}, -{21,25,0}, -{21,25,1}, -{21,25,2}, -{21,25,3}, -{21,25,4}, -{21,25,5}, -{21,25,6}, -{21,25,7}, -{21,25,8}, -{21,25,9}, -{21,25,10}, -{21,25,11}, -{21,25,12}, -{21,25,13}, -{21,25,14}, -{21,25,15}, -{21,25,16}, -{21,25,17}, -{21,25,18}, -{21,25,19}, -{21,25,20}, -{21,25,21}, -{21,25,22}, -{21,25,23}, -{21,25,24}, -{21,25,25}, -{21,25,26}, -{21,25,27}, -{21,25,28}, -{21,25,29}, -{21,25,30}, -{21,25,31}, -{21,26,-52}, -{21,26,-51}, -{21,26,-50}, -{21,26,-49}, -{21,26,-48}, -{21,26,-47}, -{21,26,-46}, -{21,26,-45}, -{21,26,-44}, -{21,26,-43}, -{21,26,-42}, -{21,26,-41}, -{21,26,-40}, -{21,26,-39}, -{21,26,-38}, -{21,26,-37}, -{21,26,-36}, -{21,26,-35}, -{21,26,-34}, -{21,26,-33}, -{21,26,-32}, -{21,26,-31}, -{21,26,-30}, -{21,26,-29}, -{21,26,-28}, -{21,26,-27}, -{21,26,-26}, -{21,26,-25}, -{21,26,-24}, -{21,26,-23}, -{21,26,-22}, -{21,26,-21}, -{21,26,-20}, -{21,26,-19}, -{21,26,-18}, -{21,26,-17}, -{21,26,-16}, -{21,26,-15}, -{21,26,-14}, -{21,26,-13}, -{21,26,-12}, -{21,26,-11}, -{21,26,-10}, -{21,26,-9}, -{21,26,-8}, -{21,26,-7}, -{21,26,-6}, -{21,26,-5}, -{21,26,-4}, -{21,26,-3}, -{21,26,-2}, -{21,26,-1}, -{21,26,0}, -{21,26,1}, -{21,26,2}, -{21,26,3}, -{21,26,4}, -{21,26,5}, -{21,26,6}, -{21,26,7}, -{21,26,8}, -{21,26,9}, -{21,26,10}, -{21,26,11}, -{21,26,12}, -{21,26,13}, -{21,26,14}, -{21,26,15}, -{21,26,16}, -{21,26,17}, -{21,26,18}, -{21,26,19}, -{21,26,20}, -{21,26,21}, -{21,26,22}, -{21,26,23}, -{21,26,24}, -{21,26,25}, -{21,26,26}, -{21,26,27}, -{21,26,28}, -{21,26,29}, -{21,26,30}, -{21,26,31}, -{21,27,-53}, -{21,27,-52}, -{21,27,-51}, -{21,27,-50}, -{21,27,-49}, -{21,27,-48}, -{21,27,-47}, -{21,27,-46}, -{21,27,-45}, -{21,27,-44}, -{21,27,-43}, -{21,27,-42}, -{21,27,-41}, -{21,27,-40}, -{21,27,-39}, -{21,27,-38}, -{21,27,-37}, -{21,27,-36}, -{21,27,-35}, -{21,27,-34}, -{21,27,-33}, -{21,27,-32}, -{21,27,-31}, -{21,27,-30}, -{21,27,-29}, -{21,27,-28}, -{21,27,-27}, -{21,27,-26}, -{21,27,-25}, -{21,27,-24}, -{21,27,-23}, -{21,27,-22}, -{21,27,-21}, -{21,27,-20}, -{21,27,-19}, -{21,27,-18}, -{21,27,-17}, -{21,27,-16}, -{21,27,-15}, -{21,27,-14}, -{21,27,-13}, -{21,27,-12}, -{21,27,-11}, -{21,27,-10}, -{21,27,-9}, -{21,27,-8}, -{21,27,-7}, -{21,27,-6}, -{21,27,-5}, -{21,27,-4}, -{21,27,-3}, -{21,27,-2}, -{21,27,-1}, -{21,27,0}, -{21,27,1}, -{21,27,2}, -{21,27,3}, -{21,27,4}, -{21,27,5}, -{21,27,6}, -{21,27,7}, -{21,27,8}, -{21,27,9}, -{21,27,10}, -{21,27,11}, -{21,27,12}, -{21,27,13}, -{21,27,14}, -{21,27,15}, -{21,27,16}, -{21,27,17}, -{21,27,18}, -{21,27,19}, -{21,27,20}, -{21,27,21}, -{21,27,22}, -{21,27,23}, -{21,27,24}, -{21,27,25}, -{21,27,26}, -{21,27,27}, -{21,27,28}, -{21,27,29}, -{21,27,30}, -{21,27,31}, -{21,28,-54}, -{21,28,-53}, -{21,28,-52}, -{21,28,-51}, -{21,28,-50}, -{21,28,-49}, -{21,28,-48}, -{21,28,-47}, -{21,28,-46}, -{21,28,-45}, -{21,28,-44}, -{21,28,-43}, -{21,28,-42}, -{21,28,-41}, -{21,28,-40}, -{21,28,-39}, -{21,28,-38}, -{21,28,-37}, -{21,28,-36}, -{21,28,-35}, -{21,28,-34}, -{21,28,-33}, -{21,28,-32}, -{21,28,-31}, -{21,28,-30}, -{21,28,-29}, -{21,28,-28}, -{21,28,-27}, -{21,28,-26}, -{21,28,-25}, -{21,28,-24}, -{21,28,-23}, -{21,28,-22}, -{21,28,-21}, -{21,28,-20}, -{21,28,-19}, -{21,28,-18}, -{21,28,-17}, -{21,28,-16}, -{21,28,-15}, -{21,28,-14}, -{21,28,-13}, -{21,28,-12}, -{21,28,-11}, -{21,28,-10}, -{21,28,-9}, -{21,28,-8}, -{21,28,-7}, -{21,28,-6}, -{21,28,-5}, -{21,28,-4}, -{21,28,-3}, -{21,28,-2}, -{21,28,-1}, -{21,28,0}, -{21,28,1}, -{21,28,2}, -{21,28,3}, -{21,28,4}, -{21,28,5}, -{21,28,6}, -{21,28,7}, -{21,28,8}, -{21,28,9}, -{21,28,10}, -{21,28,11}, -{21,28,12}, -{21,28,13}, -{21,28,14}, -{21,28,15}, -{21,28,16}, -{21,28,17}, -{21,28,18}, -{21,28,19}, -{21,28,20}, -{21,28,21}, -{21,28,22}, -{21,28,23}, -{21,28,24}, -{21,28,25}, -{21,28,26}, -{21,28,27}, -{21,28,28}, -{21,28,29}, -{21,28,30}, -{21,28,31}, -{21,29,-55}, -{21,29,-54}, -{21,29,-53}, -{21,29,-52}, -{21,29,-51}, -{21,29,-50}, -{21,29,-49}, -{21,29,-48}, -{21,29,-47}, -{21,29,-46}, -{21,29,-45}, -{21,29,-44}, -{21,29,-43}, -{21,29,-42}, -{21,29,-41}, -{21,29,-40}, -{21,29,-39}, -{21,29,-38}, -{21,29,-37}, -{21,29,-36}, -{21,29,-35}, -{21,29,-34}, -{21,29,-33}, -{21,29,-32}, -{21,29,-31}, -{21,29,-30}, -{21,29,-29}, -{21,29,-28}, -{21,29,-27}, -{21,29,-26}, -{21,29,-25}, -{21,29,-24}, -{21,29,-23}, -{21,29,-22}, -{21,29,-21}, -{21,29,-20}, -{21,29,-19}, -{21,29,-18}, -{21,29,-17}, -{21,29,-16}, -{21,29,-15}, -{21,29,-14}, -{21,29,-13}, -{21,29,-12}, -{21,29,-11}, -{21,29,-10}, -{21,29,-9}, -{21,29,-8}, -{21,29,-7}, -{21,29,-6}, -{21,29,-5}, -{21,29,-4}, -{21,29,-3}, -{21,29,-2}, -{21,29,-1}, -{21,29,0}, -{21,29,1}, -{21,29,2}, -{21,29,3}, -{21,29,4}, -{21,29,5}, -{21,29,6}, -{21,29,7}, -{21,29,8}, -{21,29,9}, -{21,29,10}, -{21,29,11}, -{21,29,12}, -{21,29,13}, -{21,29,14}, -{21,29,15}, -{21,29,16}, -{21,29,17}, -{21,29,18}, -{21,29,19}, -{21,29,20}, -{21,29,21}, -{21,29,22}, -{21,29,23}, -{21,29,24}, -{21,29,25}, -{21,29,26}, -{21,29,27}, -{21,29,28}, -{21,29,29}, -{21,29,30}, -{21,29,31}, -{21,30,-56}, -{21,30,-55}, -{21,30,-54}, -{21,30,-53}, -{21,30,-52}, -{21,30,-51}, -{21,30,-50}, -{21,30,-49}, -{21,30,-48}, -{21,30,-47}, -{21,30,-46}, -{21,30,-45}, -{21,30,-44}, -{21,30,-43}, -{21,30,-42}, -{21,30,-41}, -{21,30,-40}, -{21,30,-39}, -{21,30,-38}, -{21,30,-37}, -{21,30,-36}, -{21,30,-35}, -{21,30,-34}, -{21,30,-33}, -{21,30,-32}, -{21,30,-31}, -{21,30,-30}, -{21,30,-29}, -{21,30,-28}, -{21,30,-27}, -{21,30,-26}, -{21,30,-25}, -{21,30,-24}, -{21,30,-23}, -{21,30,-22}, -{21,30,-21}, -{21,30,-20}, -{21,30,-19}, -{21,30,-18}, -{21,30,-17}, -{21,30,-16}, -{21,30,-15}, -{21,30,-14}, -{21,30,-13}, -{21,30,-12}, -{21,30,-11}, -{21,30,-10}, -{21,30,-9}, -{21,30,-8}, -{21,30,-7}, -{21,30,-6}, -{21,30,-5}, -{21,30,-4}, -{21,30,-3}, -{21,30,-2}, -{21,30,-1}, -{21,30,0}, -{21,30,1}, -{21,30,2}, -{21,30,3}, -{21,30,4}, -{21,30,5}, -{21,30,6}, -{21,30,7}, -{21,30,8}, -{21,30,9}, -{21,30,10}, -{21,30,11}, -{21,30,12}, -{21,30,13}, -{21,30,14}, -{21,30,15}, -{21,30,16}, -{21,30,17}, -{21,30,18}, -{21,30,19}, -{21,30,20}, -{21,30,21}, -{21,30,22}, -{21,30,23}, -{21,30,24}, -{21,30,25}, -{21,30,26}, -{21,30,27}, -{21,30,28}, -{21,30,29}, -{21,30,30}, -{21,30,31}, -{21,31,-57}, -{21,31,-56}, -{21,31,-55}, -{21,31,-54}, -{21,31,-53}, -{21,31,-52}, -{21,31,-51}, -{21,31,-50}, -{21,31,-49}, -{21,31,-48}, -{21,31,-47}, -{21,31,-46}, -{21,31,-45}, -{21,31,-44}, -{21,31,-43}, -{21,31,-42}, -{21,31,-41}, -{21,31,-40}, -{21,31,-39}, -{21,31,-38}, -{21,31,-37}, -{21,31,-36}, -{21,31,-35}, -{21,31,-34}, -{21,31,-33}, -{21,31,-32}, -{21,31,-31}, -{21,31,-30}, -{21,31,-29}, -{21,31,-28}, -{21,31,-27}, -{21,31,-26}, -{21,31,-25}, -{21,31,-24}, -{21,31,-23}, -{21,31,-22}, -{21,31,-21}, -{21,31,-20}, -{21,31,-19}, -{21,31,-18}, -{21,31,-17}, -{21,31,-16}, -{21,31,-15}, -{21,31,-14}, -{21,31,-13}, -{21,31,-12}, -{21,31,-11}, -{21,31,-10}, -{21,31,-9}, -{21,31,-8}, -{21,31,-7}, -{21,31,-6}, -{21,31,-5}, -{21,31,-4}, -{21,31,-3}, -{21,31,-2}, -{21,31,-1}, -{21,31,0}, -{21,31,1}, -{21,31,2}, -{21,31,3}, -{21,31,4}, -{21,31,5}, -{21,31,6}, -{21,31,7}, -{21,31,8}, -{21,31,9}, -{21,31,10}, -{21,31,11}, -{21,31,12}, -{21,31,13}, -{21,31,14}, -{21,31,15}, -{21,31,16}, -{21,31,17}, -{21,31,18}, -{21,31,19}, -{21,31,20}, -{21,31,21}, -{21,31,22}, -{21,31,23}, -{21,31,24}, -{21,31,25}, -{21,31,26}, -{21,31,27}, -{21,31,28}, -{21,31,29}, -{21,31,30}, -{21,31,31}, -{21,32,-58}, -{21,32,-57}, -{21,32,-56}, -{21,32,-55}, -{21,32,-54}, -{21,32,-53}, -{21,32,-52}, -{21,32,-51}, -{21,32,-50}, -{21,32,-49}, -{21,32,-48}, -{21,32,-47}, -{21,32,-46}, -{21,32,-45}, -{21,32,-44}, -{21,32,-43}, -{21,32,-42}, -{21,32,-41}, -{21,32,-40}, -{21,32,-39}, -{21,32,-38}, -{21,32,-37}, -{21,32,-36}, -{21,32,-35}, -{21,32,-34}, -{21,32,-33}, -{21,32,-32}, -{21,32,-31}, -{21,32,-30}, -{21,32,-29}, -{21,32,-28}, -{21,32,-27}, -{21,32,-26}, -{21,32,-25}, -{21,32,-24}, -{21,32,-23}, -{21,32,-22}, -{21,32,-21}, -{21,32,-20}, -{21,32,-19}, -{21,32,-18}, -{21,32,-17}, -{21,32,-16}, -{21,32,-15}, -{21,32,-14}, -{21,32,-13}, -{21,32,-12}, -{21,32,-11}, -{21,32,-10}, -{21,32,-9}, -{21,32,-8}, -{21,32,-7}, -{21,32,-6}, -{21,32,-5}, -{21,32,-4}, -{21,32,-3}, -{21,32,-2}, -{21,32,-1}, -{21,32,0}, -{21,32,1}, -{21,32,2}, -{21,32,3}, -{21,32,4}, -{21,32,5}, -{21,32,6}, -{21,32,7}, -{21,32,8}, -{21,32,9}, -{21,32,10}, -{21,32,11}, -{21,32,12}, -{21,32,13}, -{21,32,14}, -{21,32,15}, -{21,32,16}, -{21,32,17}, -{21,32,18}, -{21,32,19}, -{21,32,20}, -{21,32,21}, -{21,32,22}, -{21,32,23}, -{21,32,24}, -{21,32,25}, -{21,32,26}, -{21,32,27}, -{21,32,28}, -{21,32,29}, -{21,32,30}, -{21,32,31}, -{21,33,-59}, -{21,33,-58}, -{21,33,-57}, -{21,33,-56}, -{21,33,-55}, -{21,33,-54}, -{21,33,-53}, -{21,33,-52}, -{21,33,-51}, -{21,33,-50}, -{21,33,-49}, -{21,33,-48}, -{21,33,-47}, -{21,33,-46}, -{21,33,-45}, -{21,33,-44}, -{21,33,-43}, -{21,33,-42}, -{21,33,-41}, -{21,33,-40}, -{21,33,-39}, -{21,33,-38}, -{21,33,-37}, -{21,33,-36}, -{21,33,-35}, -{21,33,-34}, -{21,33,-33}, -{21,33,-32}, -{21,33,-31}, -{21,33,-30}, -{21,33,-29}, -{21,33,-28}, -{21,33,-27}, -{21,33,-26}, -{21,33,-25}, -{21,33,-24}, -{21,33,-23}, -{21,33,-22}, -{21,33,-21}, -{21,33,-20}, -{21,33,-19}, -{21,33,-18}, -{21,33,-17}, -{21,33,-16}, -{21,33,-15}, -{21,33,-14}, -{21,33,-13}, -{21,33,-12}, -{21,33,-11}, -{21,33,-10}, -{21,33,-9}, -{21,33,-8}, -{21,33,-7}, -{21,33,-6}, -{21,33,-5}, -{21,33,-4}, -{21,33,-3}, -{21,33,-2}, -{21,33,-1}, -{21,33,0}, -{21,33,1}, -{21,33,2}, -{21,33,3}, -{21,33,4}, -{21,33,5}, -{21,33,6}, -{21,33,7}, -{21,33,8}, -{21,33,9}, -{21,33,10}, -{21,33,11}, -{21,33,12}, -{21,33,13}, -{21,33,14}, -{21,33,15}, -{21,33,16}, -{21,33,17}, -{21,33,18}, -{21,33,19}, -{21,33,20}, -{21,33,21}, -{21,33,22}, -{21,33,23}, -{21,33,24}, -{21,33,25}, -{21,33,26}, -{21,33,27}, -{21,33,28}, -{21,33,29}, -{21,33,30}, -{21,33,31}, -{21,34,-60}, -{21,34,-59}, -{21,34,-58}, -{21,34,-57}, -{21,34,-56}, -{21,34,-55}, -{21,34,-54}, -{21,34,-53}, -{21,34,-52}, -{21,34,-51}, -{21,34,-50}, -{21,34,-49}, -{21,34,-48}, -{21,34,-47}, -{21,34,-46}, -{21,34,-45}, -{21,34,-44}, -{21,34,-43}, -{21,34,-42}, -{21,34,-41}, -{21,34,-40}, -{21,34,-39}, -{21,34,-38}, -{21,34,-37}, -{21,34,-36}, -{21,34,-35}, -{21,34,-34}, -{21,34,-33}, -{21,34,-32}, -{21,34,-31}, -{21,34,-30}, -{21,34,-29}, -{21,34,-28}, -{21,34,-27}, -{21,34,-26}, -{21,34,-25}, -{21,34,-24}, -{21,34,-23}, -{21,34,-22}, -{21,34,-21}, -{21,34,-20}, -{21,34,-19}, -{21,34,-18}, -{21,34,-17}, -{21,34,-16}, -{21,34,-15}, -{21,34,-14}, -{21,34,-13}, -{21,34,-12}, -{21,34,-11}, -{21,34,-10}, -{21,34,-9}, -{21,34,-8}, -{21,34,-7}, -{21,34,-6}, -{21,34,-5}, -{21,34,-4}, -{21,34,-3}, -{21,34,-2}, -{21,34,-1}, -{21,34,0}, -{21,34,1}, -{21,34,2}, -{21,34,3}, -{21,34,4}, -{21,34,5}, -{21,34,6}, -{21,34,7}, -{21,34,8}, -{21,34,9}, -{21,34,10}, -{21,34,11}, -{21,34,12}, -{21,34,13}, -{21,34,14}, -{21,34,15}, -{21,34,16}, -{21,34,17}, -{21,34,18}, -{21,34,19}, -{21,34,20}, -{21,34,21}, -{21,34,22}, -{21,34,23}, -{21,34,24}, -{21,34,25}, -{21,34,26}, -{21,34,27}, -{21,34,28}, -{21,34,29}, -{21,34,30}, -{21,34,31}, -{21,35,-61}, -{21,35,-60}, -{21,35,-59}, -{21,35,-58}, -{21,35,-57}, -{21,35,-56}, -{21,35,-55}, -{21,35,-54}, -{21,35,-53}, -{21,35,-52}, -{21,35,-51}, -{21,35,-50}, -{21,35,-49}, -{21,35,-48}, -{21,35,-47}, -{21,35,-46}, -{21,35,-45}, -{21,35,-44}, -{21,35,-43}, -{21,35,-42}, -{21,35,-41}, -{21,35,-40}, -{21,35,-39}, -{21,35,-38}, -{21,35,-37}, -{21,35,-36}, -{21,35,-35}, -{21,35,-34}, -{21,35,-33}, -{21,35,-32}, -{21,35,-31}, -{21,35,-30}, -{21,35,-29}, -{21,35,-28}, -{21,35,-27}, -{21,35,-26}, -{21,35,-25}, -{21,35,-24}, -{21,35,-23}, -{21,35,-22}, -{21,35,-21}, -{21,35,-20}, -{21,35,-19}, -{21,35,-18}, -{21,35,-17}, -{21,35,-16}, -{21,35,-15}, -{21,35,-14}, -{21,35,-13}, -{21,35,-12}, -{21,35,-11}, -{21,35,-10}, -{21,35,-9}, -{21,35,-8}, -{21,35,-7}, -{21,35,-6}, -{21,35,-5}, -{21,35,-4}, -{21,35,-3}, -{21,35,-2}, -{21,35,-1}, -{21,35,0}, -{21,35,1}, -{21,35,2}, -{21,35,3}, -{21,35,4}, -{21,35,5}, -{21,35,6}, -{21,35,7}, -{21,35,8}, -{21,35,9}, -{21,35,10}, -{21,35,11}, -{21,35,12}, -{21,35,13}, -{21,35,14}, -{21,35,15}, -{21,35,16}, -{21,35,17}, -{21,35,18}, -{21,35,19}, -{21,35,20}, -{21,35,21}, -{21,35,22}, -{21,35,23}, -{21,35,24}, -{21,35,25}, -{21,35,26}, -{21,35,27}, -{21,35,28}, -{21,35,29}, -{21,35,30}, -{21,35,31}, -{21,36,-61}, -{21,36,-60}, -{21,36,-59}, -{21,36,-58}, -{21,36,-57}, -{21,36,-56}, -{21,36,-55}, -{21,36,-54}, -{21,36,-53}, -{21,36,-52}, -{21,36,-51}, -{21,36,-50}, -{21,36,-49}, -{21,36,-48}, -{21,36,-47}, -{21,36,-46}, -{21,36,-45}, -{21,36,-44}, -{21,36,-43}, -{21,36,-42}, -{21,36,-41}, -{21,36,-40}, -{21,36,-39}, -{21,36,-38}, -{21,36,-37}, -{21,36,-36}, -{21,36,-35}, -{21,36,-34}, -{21,36,-33}, -{21,36,-32}, -{21,36,-31}, -{21,36,-30}, -{21,36,-29}, -{21,36,-28}, -{21,36,-27}, -{21,36,-26}, -{21,36,-25}, -{21,36,-24}, -{21,36,-23}, -{21,36,-22}, -{21,36,-21}, -{21,36,-20}, -{21,36,-19}, -{21,36,-18}, -{21,36,-17}, -{21,36,-16}, -{21,36,-15}, -{21,36,-14}, -{21,36,-13}, -{21,36,-12}, -{21,36,-11}, -{21,36,-10}, -{21,36,-9}, -{21,36,-8}, -{21,36,-7}, -{21,36,-6}, -{21,36,-5}, -{21,36,-4}, -{21,36,-3}, -{21,36,-2}, -{21,36,-1}, -{21,36,0}, -{21,36,1}, -{21,36,2}, -{21,36,3}, -{21,36,4}, -{21,36,5}, -{21,36,6}, -{21,36,7}, -{21,36,8}, -{21,36,9}, -{21,36,10}, -{21,36,11}, -{21,36,12}, -{21,36,13}, -{21,36,14}, -{21,36,15}, -{21,36,16}, -{21,36,17}, -{21,36,18}, -{21,36,19}, -{21,36,20}, -{21,36,21}, -{21,36,22}, -{21,36,23}, -{21,36,24}, -{21,36,25}, -{21,36,26}, -{21,36,27}, -{21,36,28}, -{21,36,29}, -{21,36,30}, -{21,36,31}, -{21,37,-62}, -{21,37,-61}, -{21,37,-60}, -{21,37,-59}, -{21,37,-58}, -{21,37,-57}, -{21,37,-56}, -{21,37,-55}, -{21,37,-54}, -{21,37,-53}, -{21,37,-52}, -{21,37,-51}, -{21,37,-50}, -{21,37,-49}, -{21,37,-48}, -{21,37,-47}, -{21,37,-46}, -{21,37,-45}, -{21,37,-44}, -{21,37,-43}, -{21,37,-42}, -{21,37,-41}, -{21,37,-40}, -{21,37,-39}, -{21,37,-38}, -{21,37,-37}, -{21,37,-36}, -{21,37,-35}, -{21,37,-34}, -{21,37,-33}, -{21,37,-32}, -{21,37,-31}, -{21,37,-30}, -{21,37,-29}, -{21,37,-28}, -{21,37,-27}, -{21,37,-26}, -{21,37,-25}, -{21,37,-24}, -{21,37,-23}, -{21,37,-22}, -{21,37,-21}, -{21,37,-20}, -{21,37,-19}, -{21,37,-18}, -{21,37,-17}, -{21,37,-16}, -{21,37,-15}, -{21,37,-14}, -{21,37,-13}, -{21,37,-12}, -{21,37,-11}, -{21,37,-10}, -{21,37,-9}, -{21,37,-8}, -{21,37,-7}, -{21,37,-6}, -{21,37,-5}, -{21,37,-4}, -{21,37,-3}, -{21,37,-2}, -{21,37,-1}, -{21,37,0}, -{21,37,1}, -{21,37,2}, -{21,37,3}, -{21,37,4}, -{21,37,5}, -{21,37,6}, -{21,37,7}, -{21,37,8}, -{21,37,9}, -{21,37,10}, -{21,37,11}, -{21,37,12}, -{21,37,13}, -{21,37,14}, -{21,37,15}, -{21,37,16}, -{21,37,17}, -{21,37,18}, -{21,37,19}, -{21,37,20}, -{21,37,21}, -{21,37,22}, -{21,37,23}, -{21,37,24}, -{21,37,25}, -{21,37,26}, -{21,37,27}, -{21,37,28}, -{21,37,29}, -{21,37,30}, -{21,37,31}, -{21,38,-63}, -{21,38,-62}, -{21,38,-61}, -{21,38,-60}, -{21,38,-59}, -{21,38,-58}, -{21,38,-57}, -{21,38,-56}, -{21,38,-55}, -{21,38,-54}, -{21,38,-53}, -{21,38,-52}, -{21,38,-51}, -{21,38,-50}, -{21,38,-49}, -{21,38,-48}, -{21,38,-47}, -{21,38,-46}, -{21,38,-45}, -{21,38,-44}, -{21,38,-43}, -{21,38,-42}, -{21,38,-41}, -{21,38,-40}, -{21,38,-39}, -{21,38,-38}, -{21,38,-37}, -{21,38,-36}, -{21,38,-35}, -{21,38,-34}, -{21,38,-33}, -{21,38,-32}, -{21,38,-31}, -{21,38,-30}, -{21,38,-29}, -{21,38,-28}, -{21,38,-27}, -{21,38,-26}, -{21,38,-25}, -{21,38,-24}, -{21,38,-23}, -{21,38,-22}, -{21,38,-21}, -{21,38,-20}, -{21,38,-19}, -{21,38,-18}, -{21,38,-17}, -{21,38,-16}, -{21,38,-15}, -{21,38,-14}, -{21,38,-13}, -{21,38,-12}, -{21,38,-11}, -{21,38,-10}, -{21,38,-9}, -{21,38,-8}, -{21,38,-7}, -{21,38,-6}, -{21,38,-5}, -{21,38,-4}, -{21,38,-3}, -{21,38,-2}, -{21,38,-1}, -{21,38,0}, -{21,38,1}, -{21,38,2}, -{21,38,3}, -{21,38,4}, -{21,38,5}, -{21,38,6}, -{21,38,7}, -{21,38,8}, -{21,38,9}, -{21,38,10}, -{21,38,11}, -{21,38,12}, -{21,38,13}, -{21,38,14}, -{21,38,15}, -{21,38,16}, -{21,38,17}, -{21,38,18}, -{21,38,19}, -{21,38,20}, -{21,38,21}, -{21,38,22}, -{21,38,23}, -{21,38,24}, -{21,38,25}, -{21,38,26}, -{21,38,27}, -{21,38,28}, -{21,38,29}, -{21,38,30}, -{21,38,31}, -{21,39,-64}, -{21,39,-63}, -{21,39,-62}, -{21,39,-61}, -{21,39,-60}, -{21,39,-59}, -{21,39,-58}, -{21,39,-57}, -{21,39,-56}, -{21,39,-55}, -{21,39,-54}, -{21,39,-53}, -{21,39,-52}, -{21,39,-51}, -{21,39,-50}, -{21,39,-49}, -{21,39,-48}, -{21,39,-47}, -{21,39,-46}, -{21,39,-45}, -{21,39,-44}, -{21,39,-43}, -{21,39,-42}, -{21,39,-41}, -{21,39,-40}, -{21,39,-39}, -{21,39,-38}, -{21,39,-37}, -{21,39,-36}, -{21,39,-35}, -{21,39,-34}, -{21,39,-33}, -{21,39,-32}, -{21,39,-31}, -{21,39,-30}, -{21,39,-29}, -{21,39,-28}, -{21,39,-27}, -{21,39,-26}, -{21,39,-25}, -{21,39,-24}, -{21,39,-23}, -{21,39,-22}, -{21,39,-21}, -{21,39,-20}, -{21,39,-19}, -{21,39,-18}, -{21,39,-17}, -{21,39,-16}, -{21,39,-15}, -{21,39,-14}, -{21,39,-13}, -{21,39,-12}, -{21,39,-11}, -{21,39,-10}, -{21,39,-9}, -{21,39,-8}, -{21,39,-7}, -{21,39,-6}, -{21,39,-5}, -{21,39,-4}, -{21,39,-3}, -{21,39,-2}, -{21,39,-1}, -{21,39,0}, -{21,39,1}, -{21,39,2}, -{21,39,3}, -{21,39,4}, -{21,39,5}, -{21,39,6}, -{21,39,7}, -{21,39,8}, -{21,39,9}, -{21,39,10}, -{21,39,11}, -{21,39,12}, -{21,39,13}, -{21,39,14}, -{21,39,15}, -{21,39,16}, -{21,39,17}, -{21,39,18}, -{21,39,19}, -{21,39,20}, -{21,39,21}, -{21,39,22}, -{21,39,23}, -{21,39,24}, -{21,39,25}, -{21,39,26}, -{21,39,27}, -{21,39,28}, -{21,39,29}, -{21,39,30}, -{21,39,31}, -{21,40,-65}, -{21,40,-64}, -{21,40,-63}, -{21,40,-62}, -{21,40,-61}, -{21,40,-60}, -{21,40,-59}, -{21,40,-58}, -{21,40,-57}, -{21,40,-56}, -{21,40,-55}, -{21,40,-54}, -{21,40,-53}, -{21,40,-52}, -{21,40,-51}, -{21,40,-50}, -{21,40,-49}, -{21,40,-48}, -{21,40,-47}, -{21,40,-46}, -{21,40,-45}, -{21,40,-44}, -{21,40,-43}, -{21,40,-42}, -{21,40,-41}, -{21,40,-40}, -{21,40,-39}, -{21,40,-38}, -{21,40,-37}, -{21,40,-36}, -{21,40,-35}, -{21,40,-34}, -{21,40,-33}, -{21,40,-32}, -{21,40,-31}, -{21,40,-30}, -{21,40,-29}, -{21,40,-28}, -{21,40,-27}, -{21,40,-26}, -{21,40,-25}, -{21,40,-24}, -{21,40,-23}, -{21,40,-22}, -{21,40,-21}, -{21,40,-20}, -{21,40,-19}, -{21,40,-18}, -{21,40,-17}, -{21,40,-16}, -{21,40,-15}, -{21,40,-14}, -{21,40,-13}, -{21,40,-12}, -{21,40,-11}, -{21,40,-10}, -{21,40,-9}, -{21,40,-8}, -{21,40,-7}, -{21,40,-6}, -{21,40,-5}, -{21,40,-4}, -{21,40,-3}, -{21,40,-2}, -{21,40,-1}, -{21,40,0}, -{21,40,1}, -{21,40,2}, -{21,40,3}, -{21,40,4}, -{21,40,5}, -{21,40,6}, -{21,40,7}, -{21,40,8}, -{21,40,9}, -{21,40,10}, -{21,40,11}, -{21,40,12}, -{21,40,13}, -{21,40,14}, -{21,40,15}, -{21,40,16}, -{21,40,17}, -{21,40,18}, -{21,40,19}, -{21,40,20}, -{21,40,21}, -{21,40,22}, -{21,40,23}, -{21,40,24}, -{21,40,25}, -{21,40,26}, -{21,40,27}, -{21,40,28}, -{21,40,29}, -{21,40,30}, -{21,40,31}, -{21,41,-66}, -{21,41,-65}, -{21,41,-64}, -{21,41,-63}, -{21,41,-62}, -{21,41,-61}, -{21,41,-60}, -{21,41,-59}, -{21,41,-58}, -{21,41,-57}, -{21,41,-56}, -{21,41,-55}, -{21,41,-54}, -{21,41,-53}, -{21,41,-52}, -{21,41,-51}, -{21,41,-50}, -{21,41,-49}, -{21,41,-48}, -{21,41,-47}, -{21,41,-46}, -{21,41,-45}, -{21,41,-44}, -{21,41,-43}, -{21,41,-42}, -{21,41,-41}, -{21,41,-40}, -{21,41,-39}, -{21,41,-38}, -{21,41,-37}, -{21,41,-36}, -{21,41,-35}, -{21,41,-34}, -{21,41,-33}, -{21,41,-32}, -{21,41,-31}, -{21,41,-30}, -{21,41,-29}, -{21,41,-28}, -{21,41,-27}, -{21,41,-26}, -{21,41,-25}, -{21,41,-24}, -{21,41,-23}, -{21,41,-22}, -{21,41,-21}, -{21,41,-20}, -{21,41,-19}, -{21,41,-18}, -{21,41,-17}, -{21,41,-16}, -{21,41,-15}, -{21,41,-14}, -{21,41,-13}, -{21,41,-12}, -{21,41,-11}, -{21,41,-10}, -{21,41,-9}, -{21,41,-8}, -{21,41,-7}, -{21,41,-6}, -{21,41,-5}, -{21,41,-4}, -{21,41,-3}, -{21,41,-2}, -{21,41,-1}, -{21,41,0}, -{21,41,1}, -{21,41,2}, -{21,41,3}, -{21,41,4}, -{21,41,5}, -{21,41,6}, -{21,41,7}, -{21,41,8}, -{21,41,9}, -{21,41,10}, -{21,41,11}, -{21,41,12}, -{21,41,13}, -{21,41,14}, -{21,41,15}, -{21,41,16}, -{21,41,17}, -{21,41,18}, -{21,41,19}, -{21,41,20}, -{21,41,21}, -{21,41,22}, -{21,41,23}, -{21,41,24}, -{21,41,25}, -{21,41,26}, -{21,41,27}, -{21,41,28}, -{21,41,29}, -{21,41,30}, -{21,41,31}, -{21,41,32}, -{21,42,-67}, -{21,42,-66}, -{21,42,-65}, -{21,42,-64}, -{21,42,-63}, -{21,42,-62}, -{21,42,-61}, -{21,42,-60}, -{21,42,-59}, -{21,42,-58}, -{21,42,-57}, -{21,42,-56}, -{21,42,-55}, -{21,42,-54}, -{21,42,-53}, -{21,42,-52}, -{21,42,-51}, -{21,42,-50}, -{21,42,-49}, -{21,42,-48}, -{21,42,-47}, -{21,42,-46}, -{21,42,-45}, -{21,42,-44}, -{21,42,-43}, -{21,42,-42}, -{21,42,-41}, -{21,42,-40}, -{21,42,-39}, -{21,42,-38}, -{21,42,-37}, -{21,42,-36}, -{21,42,-35}, -{21,42,-34}, -{21,42,-33}, -{21,42,-32}, -{21,42,-31}, -{21,42,-30}, -{21,42,-29}, -{21,42,-28}, -{21,42,-27}, -{21,42,-26}, -{21,42,-25}, -{21,42,-24}, -{21,42,-23}, -{21,42,-22}, -{21,42,-21}, -{21,42,-20}, -{21,42,-19}, -{21,42,-18}, -{21,42,-17}, -{21,42,-16}, -{21,42,-15}, -{21,42,-14}, -{21,42,-13}, -{21,42,-12}, -{21,42,-11}, -{21,42,-10}, -{21,42,-9}, -{21,42,-8}, -{21,42,-7}, -{21,42,-6}, -{21,42,-5}, -{21,42,-4}, -{21,42,-3}, -{21,42,-2}, -{21,42,-1}, -{21,42,0}, -{21,42,1}, -{21,42,2}, -{21,42,3}, -{21,42,4}, -{21,42,5}, -{21,42,6}, -{21,42,7}, -{21,42,8}, -{21,42,9}, -{21,42,10}, -{21,42,11}, -{21,42,12}, -{21,42,13}, -{21,42,14}, -{21,42,15}, -{21,42,16}, -{21,42,17}, -{21,42,18}, -{21,42,19}, -{21,42,20}, -{21,42,21}, -{21,42,22}, -{21,42,23}, -{21,42,24}, -{21,42,25}, -{21,42,26}, -{21,42,27}, -{21,42,28}, -{21,42,29}, -{21,42,30}, -{21,42,31}, -{21,42,32}, -{21,43,-67}, -{21,43,-66}, -{21,43,-65}, -{21,43,-64}, -{21,43,-63}, -{21,43,-62}, -{21,43,-61}, -{21,43,-60}, -{21,43,-59}, -{21,43,-58}, -{21,43,-57}, -{21,43,-56}, -{21,43,-55}, -{21,43,-54}, -{21,43,-53}, -{21,43,-52}, -{21,43,-51}, -{21,43,-50}, -{21,43,-49}, -{21,43,-48}, -{21,43,-47}, -{21,43,-46}, -{21,43,-45}, -{21,43,-44}, -{21,43,-43}, -{21,43,-42}, -{21,43,-41}, -{21,43,-40}, -{21,43,-39}, -{21,43,-38}, -{21,43,-37}, -{21,43,-36}, -{21,43,-35}, -{21,43,-34}, -{21,43,-33}, -{21,43,-32}, -{21,43,-31}, -{21,43,-30}, -{21,43,-29}, -{21,43,-28}, -{21,43,-27}, -{21,43,-26}, -{21,43,-25}, -{21,43,-24}, -{21,43,-23}, -{21,43,-22}, -{21,43,-21}, -{21,43,-20}, -{21,43,-19}, -{21,43,-18}, -{21,43,-17}, -{21,43,-16}, -{21,43,-15}, -{21,43,-14}, -{21,43,-13}, -{21,43,-12}, -{21,43,-11}, -{21,43,-10}, -{21,43,-9}, -{21,43,-8}, -{21,43,-7}, -{21,43,-6}, -{21,43,-5}, -{21,43,-4}, -{21,43,-3}, -{21,43,-2}, -{21,43,-1}, -{21,43,0}, -{21,43,1}, -{21,43,2}, -{21,43,3}, -{21,43,4}, -{21,43,5}, -{21,43,6}, -{21,43,7}, -{21,43,8}, -{21,43,9}, -{21,43,10}, -{21,43,11}, -{21,43,12}, -{21,43,13}, -{21,43,14}, -{21,43,15}, -{21,43,16}, -{21,43,17}, -{21,43,18}, -{21,43,19}, -{21,43,20}, -{21,43,21}, -{21,43,22}, -{21,43,23}, -{21,43,24}, -{21,43,25}, -{21,43,26}, -{21,43,27}, -{21,43,28}, -{21,43,29}, -{21,43,30}, -{21,43,31}, -{21,44,-68}, -{21,44,-67}, -{21,44,-66}, -{21,44,-65}, -{21,44,-64}, -{21,44,-63}, -{21,44,-62}, -{21,44,-61}, -{21,44,-60}, -{21,44,-59}, -{21,44,-58}, -{21,44,-57}, -{21,44,-56}, -{21,44,-55}, -{21,44,-54}, -{21,44,-53}, -{21,44,-52}, -{21,44,-51}, -{21,44,-50}, -{21,44,-49}, -{21,44,-48}, -{21,44,-47}, -{21,44,-46}, -{21,44,-45}, -{21,44,-44}, -{21,44,-43}, -{21,44,-42}, -{21,44,-41}, -{21,44,-40}, -{21,44,-39}, -{21,44,-38}, -{21,44,-37}, -{21,44,-36}, -{21,44,-35}, -{21,44,-34}, -{21,44,-33}, -{21,44,-32}, -{21,44,-31}, -{21,44,-30}, -{21,44,-29}, -{21,44,-28}, -{21,44,-27}, -{21,44,-26}, -{21,44,-25}, -{21,44,-24}, -{21,44,-23}, -{21,44,-22}, -{21,44,-21}, -{21,44,-20}, -{21,44,-19}, -{21,44,-18}, -{21,44,-17}, -{21,44,-16}, -{21,44,-15}, -{21,44,-14}, -{21,44,-13}, -{21,44,-12}, -{21,44,-11}, -{21,44,-10}, -{21,44,-9}, -{21,44,-8}, -{21,44,-7}, -{21,44,-6}, -{21,44,-5}, -{21,44,-4}, -{21,44,-3}, -{21,44,-2}, -{21,44,-1}, -{21,44,0}, -{21,44,1}, -{21,44,2}, -{21,44,3}, -{21,44,4}, -{21,44,5}, -{21,44,6}, -{21,45,-69}, -{21,45,-68}, -{21,45,-67}, -{21,45,-66}, -{21,45,-65}, -{21,45,-64}, -{21,45,-63}, -{21,45,-62}, -{21,45,-61}, -{21,45,-60}, -{21,45,-59}, -{21,45,-58}, -{21,45,-57}, -{21,45,-56}, -{21,45,-55}, -{21,45,-54}, -{21,45,-53}, -{21,45,-52}, -{21,45,-51}, -{21,45,-50}, -{21,45,-49}, -{21,45,-48}, -{21,45,-47}, -{21,45,-46}, -{21,45,-45}, -{21,45,-44}, -{21,45,-43}, -{21,45,-42}, -{21,45,-41}, -{21,45,-40}, -{21,45,-39}, -{21,45,-38}, -{21,45,-37}, -{21,45,-36}, -{21,45,-35}, -{21,45,-34}, -{21,45,-33}, -{21,45,-32}, -{21,45,-31}, -{21,45,-30}, -{21,45,-29}, -{21,45,-28}, -{21,45,-27}, -{21,45,-26}, -{21,45,-25}, -{21,45,-24}, -{21,45,-23}, -{21,45,-22}, -{21,45,-21}, -{21,45,-20}, -{21,45,-19}, -{21,45,-18}, -{21,45,-17}, -{21,45,-16}, -{21,45,-15}, -{21,45,-14}, -{21,45,-13}, -{21,45,-12}, -{21,45,-11}, -{21,45,-10}, -{21,45,-9}, -{21,45,-8}, -{21,45,-7}, -{21,46,-70}, -{21,46,-69}, -{21,46,-68}, -{21,46,-67}, -{21,46,-66}, -{21,46,-65}, -{21,46,-64}, -{21,46,-63}, -{21,46,-62}, -{21,46,-61}, -{21,46,-60}, -{21,46,-59}, -{21,46,-58}, -{21,46,-57}, -{21,46,-56}, -{21,46,-55}, -{21,46,-54}, -{21,46,-53}, -{21,46,-52}, -{21,46,-51}, -{21,46,-50}, -{21,46,-49}, -{21,46,-48}, -{21,46,-47}, -{21,46,-46}, -{21,46,-45}, -{21,46,-44}, -{21,46,-43}, -{21,46,-42}, -{21,46,-41}, -{21,46,-40}, -{21,46,-39}, -{21,46,-38}, -{21,46,-37}, -{21,46,-36}, -{21,46,-35}, -{21,46,-34}, -{21,46,-33}, -{21,46,-32}, -{21,46,-31}, -{21,46,-30}, -{21,46,-29}, -{21,46,-28}, -{21,46,-27}, -{21,46,-26}, -{21,46,-25}, -{21,46,-24}, -{21,46,-23}, -{21,46,-22}, -{21,46,-21}, -{21,46,-20}, -{21,46,-19}, -{21,46,-18}, -{21,46,-17}, -{21,47,-71}, -{21,47,-70}, -{21,47,-69}, -{21,47,-68}, -{21,47,-67}, -{21,47,-66}, -{21,47,-65}, -{21,47,-64}, -{21,47,-63}, -{21,47,-62}, -{21,47,-61}, -{21,47,-60}, -{21,47,-59}, -{21,47,-58}, -{21,47,-57}, -{21,47,-56}, -{21,47,-55}, -{21,47,-54}, -{21,47,-53}, -{21,47,-52}, -{21,47,-51}, -{21,47,-50}, -{21,47,-49}, -{21,47,-48}, -{21,47,-47}, -{21,47,-46}, -{21,47,-45}, -{21,47,-44}, -{21,47,-43}, -{21,47,-42}, -{21,47,-41}, -{21,47,-40}, -{21,47,-39}, -{21,47,-38}, -{21,47,-37}, -{21,47,-36}, -{21,47,-35}, -{21,47,-34}, -{21,47,-33}, -{21,47,-32}, -{21,47,-31}, -{21,47,-30}, -{21,47,-29}, -{21,47,-28}, -{21,47,-27}, -{21,47,-26}, -{21,47,-25}, -{21,48,-72}, -{21,48,-71}, -{21,48,-70}, -{21,48,-69}, -{21,48,-68}, -{21,48,-67}, -{21,48,-66}, -{21,48,-65}, -{21,48,-64}, -{21,48,-63}, -{21,48,-62}, -{21,48,-61}, -{21,48,-60}, -{21,48,-59}, -{21,48,-58}, -{21,48,-57}, -{21,48,-56}, -{21,48,-55}, -{21,48,-54}, -{21,48,-53}, -{21,48,-52}, -{21,48,-51}, -{21,48,-50}, -{21,48,-49}, -{21,48,-48}, -{21,48,-47}, -{21,48,-46}, -{21,48,-45}, -{21,48,-44}, -{21,48,-43}, -{21,48,-42}, -{21,48,-41}, -{21,48,-40}, -{21,48,-39}, -{21,48,-38}, -{21,48,-37}, -{21,48,-36}, -{21,48,-35}, -{21,48,-34}, -{21,48,-33}, -{21,48,-32}, -{21,48,-31}, -{21,49,-73}, -{21,49,-72}, -{21,49,-71}, -{21,49,-70}, -{21,49,-69}, -{21,49,-68}, -{21,49,-67}, -{21,49,-66}, -{21,49,-65}, -{21,49,-64}, -{21,49,-63}, -{21,49,-62}, -{21,49,-61}, -{21,49,-60}, -{21,49,-59}, -{21,49,-58}, -{21,49,-57}, -{21,49,-56}, -{21,49,-55}, -{21,49,-54}, -{21,49,-53}, -{21,49,-52}, -{21,49,-51}, -{21,49,-50}, -{21,49,-49}, -{21,49,-48}, -{21,49,-47}, -{21,49,-46}, -{21,49,-45}, -{21,49,-44}, -{21,49,-43}, -{21,49,-42}, -{21,49,-41}, -{21,49,-40}, -{21,49,-39}, -{21,49,-38}, -{21,49,-37}, -{21,50,-73}, -{21,50,-72}, -{21,50,-71}, -{21,50,-70}, -{21,50,-69}, -{21,50,-68}, -{21,50,-67}, -{21,50,-66}, -{21,50,-65}, -{21,50,-64}, -{21,50,-63}, -{21,50,-62}, -{21,50,-61}, -{21,50,-60}, -{21,50,-59}, -{21,50,-58}, -{21,50,-57}, -{21,50,-56}, -{21,50,-55}, -{21,50,-54}, -{21,50,-53}, -{21,50,-52}, -{21,50,-51}, -{21,50,-50}, -{21,50,-49}, -{21,50,-48}, -{21,50,-47}, -{21,50,-46}, -{21,50,-45}, -{21,50,-44}, -{21,50,-43}, -{21,51,-74}, -{21,51,-73}, -{21,51,-72}, -{21,51,-71}, -{21,51,-70}, -{21,51,-69}, -{21,51,-68}, -{21,51,-67}, -{21,51,-66}, -{21,51,-65}, -{21,51,-64}, -{21,51,-63}, -{21,51,-62}, -{21,51,-61}, -{21,51,-60}, -{21,51,-59}, -{21,51,-58}, -{21,51,-57}, -{21,51,-56}, -{21,51,-55}, -{21,51,-54}, -{21,51,-53}, -{21,51,-52}, -{21,51,-51}, -{21,51,-50}, -{21,51,-49}, -{21,51,-48}, -{21,52,-75}, -{21,52,-74}, -{21,52,-73}, -{21,52,-72}, -{21,52,-71}, -{21,52,-70}, -{21,52,-69}, -{21,52,-68}, -{21,52,-67}, -{21,52,-66}, -{21,52,-65}, -{21,52,-64}, -{21,52,-63}, -{21,52,-62}, -{21,52,-61}, -{21,52,-60}, -{21,52,-59}, -{21,52,-58}, -{21,52,-57}, -{21,52,-56}, -{21,52,-55}, -{21,52,-54}, -{21,52,-53}, -{21,52,-52}, -{21,53,-76}, -{21,53,-75}, -{21,53,-74}, -{21,53,-73}, -{21,53,-72}, -{21,53,-71}, -{21,53,-70}, -{21,53,-69}, -{21,53,-68}, -{21,53,-67}, -{21,53,-66}, -{21,53,-65}, -{21,53,-64}, -{21,53,-63}, -{21,53,-62}, -{21,53,-61}, -{21,53,-60}, -{21,53,-59}, -{21,53,-58}, -{21,53,-57}, -{21,53,-56}, -{21,54,-77}, -{21,54,-76}, -{21,54,-75}, -{21,54,-74}, -{21,54,-73}, -{21,54,-72}, -{21,54,-71}, -{21,54,-70}, -{21,54,-69}, -{21,54,-68}, -{21,54,-67}, -{21,54,-66}, -{21,54,-65}, -{21,54,-64}, -{21,54,-63}, -{21,54,-62}, -{21,54,-61}, -{21,54,-60}, -{21,55,-78}, -{21,55,-77}, -{21,55,-76}, -{21,55,-75}, -{21,55,-74}, -{21,55,-73}, -{21,55,-72}, -{21,55,-71}, -{21,55,-70}, -{21,55,-69}, -{21,55,-68}, -{21,55,-67}, -{21,55,-66}, -{21,55,-65}, -{21,55,-64}, -{21,56,-78}, -{21,56,-77}, -{21,56,-76}, -{21,56,-75}, -{21,56,-74}, -{21,56,-73}, -{21,56,-72}, -{21,56,-71}, -{21,56,-70}, -{21,56,-69}, -{21,56,-68}, -{21,57,-79}, -{21,57,-78}, -{21,57,-77}, -{21,57,-76}, -{21,57,-75}, -{21,57,-74}, -{21,57,-73}, -{21,57,-72}, -{21,57,-71}, -{21,58,-80}, -{21,58,-79}, -{21,58,-78}, -{21,58,-77}, -{21,58,-76}, -{21,58,-75}, -{21,59,-81}, -{21,59,-80}, -{21,59,-79}, -{21,59,-78}, -{21,60,-82}, -{21,60,-81}, -{22,-31,27}, -{22,-31,28}, -{22,-31,29}, -{22,-30,24}, -{22,-30,25}, -{22,-30,26}, -{22,-30,27}, -{22,-30,28}, -{22,-30,29}, -{22,-29,20}, -{22,-29,21}, -{22,-29,22}, -{22,-29,23}, -{22,-29,24}, -{22,-29,25}, -{22,-29,26}, -{22,-29,27}, -{22,-29,28}, -{22,-29,29}, -{22,-28,17}, -{22,-28,18}, -{22,-28,19}, -{22,-28,20}, -{22,-28,21}, -{22,-28,22}, -{22,-28,23}, -{22,-28,24}, -{22,-28,25}, -{22,-28,26}, -{22,-28,27}, -{22,-28,28}, -{22,-28,29}, -{22,-27,15}, -{22,-27,16}, -{22,-27,17}, -{22,-27,18}, -{22,-27,19}, -{22,-27,20}, -{22,-27,21}, -{22,-27,22}, -{22,-27,23}, -{22,-27,24}, -{22,-27,25}, -{22,-27,26}, -{22,-27,27}, -{22,-27,28}, -{22,-27,29}, -{22,-26,12}, -{22,-26,13}, -{22,-26,14}, -{22,-26,15}, -{22,-26,16}, -{22,-26,17}, -{22,-26,18}, -{22,-26,19}, -{22,-26,20}, -{22,-26,21}, -{22,-26,22}, -{22,-26,23}, -{22,-26,24}, -{22,-26,25}, -{22,-26,26}, -{22,-26,27}, -{22,-26,28}, -{22,-26,29}, -{22,-25,10}, -{22,-25,11}, -{22,-25,12}, -{22,-25,13}, -{22,-25,14}, -{22,-25,15}, -{22,-25,16}, -{22,-25,17}, -{22,-25,18}, -{22,-25,19}, -{22,-25,20}, -{22,-25,21}, -{22,-25,22}, -{22,-25,23}, -{22,-25,24}, -{22,-25,25}, -{22,-25,26}, -{22,-25,27}, -{22,-25,28}, -{22,-25,29}, -{22,-24,8}, -{22,-24,9}, -{22,-24,10}, -{22,-24,11}, -{22,-24,12}, -{22,-24,13}, -{22,-24,14}, -{22,-24,15}, -{22,-24,16}, -{22,-24,17}, -{22,-24,18}, -{22,-24,19}, -{22,-24,20}, -{22,-24,21}, -{22,-24,22}, -{22,-24,23}, -{22,-24,24}, -{22,-24,25}, -{22,-24,26}, -{22,-24,27}, -{22,-24,28}, -{22,-24,29}, -{22,-23,6}, -{22,-23,7}, -{22,-23,8}, -{22,-23,9}, -{22,-23,10}, -{22,-23,11}, -{22,-23,12}, -{22,-23,13}, -{22,-23,14}, -{22,-23,15}, -{22,-23,16}, -{22,-23,17}, -{22,-23,18}, -{22,-23,19}, -{22,-23,20}, -{22,-23,21}, -{22,-23,22}, -{22,-23,23}, -{22,-23,24}, -{22,-23,25}, -{22,-23,26}, -{22,-23,27}, -{22,-23,28}, -{22,-23,29}, -{22,-22,4}, -{22,-22,5}, -{22,-22,6}, -{22,-22,7}, -{22,-22,8}, -{22,-22,9}, -{22,-22,10}, -{22,-22,11}, -{22,-22,12}, -{22,-22,13}, -{22,-22,14}, -{22,-22,15}, -{22,-22,16}, -{22,-22,17}, -{22,-22,18}, -{22,-22,19}, -{22,-22,20}, -{22,-22,21}, -{22,-22,22}, -{22,-22,23}, -{22,-22,24}, -{22,-22,25}, -{22,-22,26}, -{22,-22,27}, -{22,-22,28}, -{22,-22,29}, -{22,-22,30}, -{22,-21,2}, -{22,-21,3}, -{22,-21,4}, -{22,-21,5}, -{22,-21,6}, -{22,-21,7}, -{22,-21,8}, -{22,-21,9}, -{22,-21,10}, -{22,-21,11}, -{22,-21,12}, -{22,-21,13}, -{22,-21,14}, -{22,-21,15}, -{22,-21,16}, -{22,-21,17}, -{22,-21,18}, -{22,-21,19}, -{22,-21,20}, -{22,-21,21}, -{22,-21,22}, -{22,-21,23}, -{22,-21,24}, -{22,-21,25}, -{22,-21,26}, -{22,-21,27}, -{22,-21,28}, -{22,-21,29}, -{22,-21,30}, -{22,-20,0}, -{22,-20,1}, -{22,-20,2}, -{22,-20,3}, -{22,-20,4}, -{22,-20,5}, -{22,-20,6}, -{22,-20,7}, -{22,-20,8}, -{22,-20,9}, -{22,-20,10}, -{22,-20,11}, -{22,-20,12}, -{22,-20,13}, -{22,-20,14}, -{22,-20,15}, -{22,-20,16}, -{22,-20,17}, -{22,-20,18}, -{22,-20,19}, -{22,-20,20}, -{22,-20,21}, -{22,-20,22}, -{22,-20,23}, -{22,-20,24}, -{22,-20,25}, -{22,-20,26}, -{22,-20,27}, -{22,-20,28}, -{22,-20,29}, -{22,-20,30}, -{22,-19,-2}, -{22,-19,-1}, -{22,-19,0}, -{22,-19,1}, -{22,-19,2}, -{22,-19,3}, -{22,-19,4}, -{22,-19,5}, -{22,-19,6}, -{22,-19,7}, -{22,-19,8}, -{22,-19,9}, -{22,-19,10}, -{22,-19,11}, -{22,-19,12}, -{22,-19,13}, -{22,-19,14}, -{22,-19,15}, -{22,-19,16}, -{22,-19,17}, -{22,-19,18}, -{22,-19,19}, -{22,-19,20}, -{22,-19,21}, -{22,-19,22}, -{22,-19,23}, -{22,-19,24}, -{22,-19,25}, -{22,-19,26}, -{22,-19,27}, -{22,-19,28}, -{22,-19,29}, -{22,-19,30}, -{22,-18,-3}, -{22,-18,-2}, -{22,-18,-1}, -{22,-18,0}, -{22,-18,1}, -{22,-18,2}, -{22,-18,3}, -{22,-18,4}, -{22,-18,5}, -{22,-18,6}, -{22,-18,7}, -{22,-18,8}, -{22,-18,9}, -{22,-18,10}, -{22,-18,11}, -{22,-18,12}, -{22,-18,13}, -{22,-18,14}, -{22,-18,15}, -{22,-18,16}, -{22,-18,17}, -{22,-18,18}, -{22,-18,19}, -{22,-18,20}, -{22,-18,21}, -{22,-18,22}, -{22,-18,23}, -{22,-18,24}, -{22,-18,25}, -{22,-18,26}, -{22,-18,27}, -{22,-18,28}, -{22,-18,29}, -{22,-18,30}, -{22,-17,-5}, -{22,-17,-4}, -{22,-17,-3}, -{22,-17,-2}, -{22,-17,-1}, -{22,-17,0}, -{22,-17,1}, -{22,-17,2}, -{22,-17,3}, -{22,-17,4}, -{22,-17,5}, -{22,-17,6}, -{22,-17,7}, -{22,-17,8}, -{22,-17,9}, -{22,-17,10}, -{22,-17,11}, -{22,-17,12}, -{22,-17,13}, -{22,-17,14}, -{22,-17,15}, -{22,-17,16}, -{22,-17,17}, -{22,-17,18}, -{22,-17,19}, -{22,-17,20}, -{22,-17,21}, -{22,-17,22}, -{22,-17,23}, -{22,-17,24}, -{22,-17,25}, -{22,-17,26}, -{22,-17,27}, -{22,-17,28}, -{22,-17,29}, -{22,-17,30}, -{22,-16,-6}, -{22,-16,-5}, -{22,-16,-4}, -{22,-16,-3}, -{22,-16,-2}, -{22,-16,-1}, -{22,-16,0}, -{22,-16,1}, -{22,-16,2}, -{22,-16,3}, -{22,-16,4}, -{22,-16,5}, -{22,-16,6}, -{22,-16,7}, -{22,-16,8}, -{22,-16,9}, -{22,-16,10}, -{22,-16,11}, -{22,-16,12}, -{22,-16,13}, -{22,-16,14}, -{22,-16,15}, -{22,-16,16}, -{22,-16,17}, -{22,-16,18}, -{22,-16,19}, -{22,-16,20}, -{22,-16,21}, -{22,-16,22}, -{22,-16,23}, -{22,-16,24}, -{22,-16,25}, -{22,-16,26}, -{22,-16,27}, -{22,-16,28}, -{22,-16,29}, -{22,-16,30}, -{22,-15,-8}, -{22,-15,-7}, -{22,-15,-6}, -{22,-15,-5}, -{22,-15,-4}, -{22,-15,-3}, -{22,-15,-2}, -{22,-15,-1}, -{22,-15,0}, -{22,-15,1}, -{22,-15,2}, -{22,-15,3}, -{22,-15,4}, -{22,-15,5}, -{22,-15,6}, -{22,-15,7}, -{22,-15,8}, -{22,-15,9}, -{22,-15,10}, -{22,-15,11}, -{22,-15,12}, -{22,-15,13}, -{22,-15,14}, -{22,-15,15}, -{22,-15,16}, -{22,-15,17}, -{22,-15,18}, -{22,-15,19}, -{22,-15,20}, -{22,-15,21}, -{22,-15,22}, -{22,-15,23}, -{22,-15,24}, -{22,-15,25}, -{22,-15,26}, -{22,-15,27}, -{22,-15,28}, -{22,-15,29}, -{22,-15,30}, -{22,-14,-9}, -{22,-14,-8}, -{22,-14,-7}, -{22,-14,-6}, -{22,-14,-5}, -{22,-14,-4}, -{22,-14,-3}, -{22,-14,-2}, -{22,-14,-1}, -{22,-14,0}, -{22,-14,1}, -{22,-14,2}, -{22,-14,3}, -{22,-14,4}, -{22,-14,5}, -{22,-14,6}, -{22,-14,7}, -{22,-14,8}, -{22,-14,9}, -{22,-14,10}, -{22,-14,11}, -{22,-14,12}, -{22,-14,13}, -{22,-14,14}, -{22,-14,15}, -{22,-14,16}, -{22,-14,17}, -{22,-14,18}, -{22,-14,19}, -{22,-14,20}, -{22,-14,21}, -{22,-14,22}, -{22,-14,23}, -{22,-14,24}, -{22,-14,25}, -{22,-14,26}, -{22,-14,27}, -{22,-14,28}, -{22,-14,29}, -{22,-14,30}, -{22,-13,-11}, -{22,-13,-10}, -{22,-13,-9}, -{22,-13,-8}, -{22,-13,-7}, -{22,-13,-6}, -{22,-13,-5}, -{22,-13,-4}, -{22,-13,-3}, -{22,-13,-2}, -{22,-13,-1}, -{22,-13,0}, -{22,-13,1}, -{22,-13,2}, -{22,-13,3}, -{22,-13,4}, -{22,-13,5}, -{22,-13,6}, -{22,-13,7}, -{22,-13,8}, -{22,-13,9}, -{22,-13,10}, -{22,-13,11}, -{22,-13,12}, -{22,-13,13}, -{22,-13,14}, -{22,-13,15}, -{22,-13,16}, -{22,-13,17}, -{22,-13,18}, -{22,-13,19}, -{22,-13,20}, -{22,-13,21}, -{22,-13,22}, -{22,-13,23}, -{22,-13,24}, -{22,-13,25}, -{22,-13,26}, -{22,-13,27}, -{22,-13,28}, -{22,-13,29}, -{22,-13,30}, -{22,-12,-12}, -{22,-12,-11}, -{22,-12,-10}, -{22,-12,-9}, -{22,-12,-8}, -{22,-12,-7}, -{22,-12,-6}, -{22,-12,-5}, -{22,-12,-4}, -{22,-12,-3}, -{22,-12,-2}, -{22,-12,-1}, -{22,-12,0}, -{22,-12,1}, -{22,-12,2}, -{22,-12,3}, -{22,-12,4}, -{22,-12,5}, -{22,-12,6}, -{22,-12,7}, -{22,-12,8}, -{22,-12,9}, -{22,-12,10}, -{22,-12,11}, -{22,-12,12}, -{22,-12,13}, -{22,-12,14}, -{22,-12,15}, -{22,-12,16}, -{22,-12,17}, -{22,-12,18}, -{22,-12,19}, -{22,-12,20}, -{22,-12,21}, -{22,-12,22}, -{22,-12,23}, -{22,-12,24}, -{22,-12,25}, -{22,-12,26}, -{22,-12,27}, -{22,-12,28}, -{22,-12,29}, -{22,-12,30}, -{22,-11,-14}, -{22,-11,-13}, -{22,-11,-12}, -{22,-11,-11}, -{22,-11,-10}, -{22,-11,-9}, -{22,-11,-8}, -{22,-11,-7}, -{22,-11,-6}, -{22,-11,-5}, -{22,-11,-4}, -{22,-11,-3}, -{22,-11,-2}, -{22,-11,-1}, -{22,-11,0}, -{22,-11,1}, -{22,-11,2}, -{22,-11,3}, -{22,-11,4}, -{22,-11,5}, -{22,-11,6}, -{22,-11,7}, -{22,-11,8}, -{22,-11,9}, -{22,-11,10}, -{22,-11,11}, -{22,-11,12}, -{22,-11,13}, -{22,-11,14}, -{22,-11,15}, -{22,-11,16}, -{22,-11,17}, -{22,-11,18}, -{22,-11,19}, -{22,-11,20}, -{22,-11,21}, -{22,-11,22}, -{22,-11,23}, -{22,-11,24}, -{22,-11,25}, -{22,-11,26}, -{22,-11,27}, -{22,-11,28}, -{22,-11,29}, -{22,-11,30}, -{22,-10,-15}, -{22,-10,-14}, -{22,-10,-13}, -{22,-10,-12}, -{22,-10,-11}, -{22,-10,-10}, -{22,-10,-9}, -{22,-10,-8}, -{22,-10,-7}, -{22,-10,-6}, -{22,-10,-5}, -{22,-10,-4}, -{22,-10,-3}, -{22,-10,-2}, -{22,-10,-1}, -{22,-10,0}, -{22,-10,1}, -{22,-10,2}, -{22,-10,3}, -{22,-10,4}, -{22,-10,5}, -{22,-10,6}, -{22,-10,7}, -{22,-10,8}, -{22,-10,9}, -{22,-10,10}, -{22,-10,11}, -{22,-10,12}, -{22,-10,13}, -{22,-10,14}, -{22,-10,15}, -{22,-10,16}, -{22,-10,17}, -{22,-10,18}, -{22,-10,19}, -{22,-10,20}, -{22,-10,21}, -{22,-10,22}, -{22,-10,23}, -{22,-10,24}, -{22,-10,25}, -{22,-10,26}, -{22,-10,27}, -{22,-10,28}, -{22,-10,29}, -{22,-10,30}, -{22,-9,-16}, -{22,-9,-15}, -{22,-9,-14}, -{22,-9,-13}, -{22,-9,-12}, -{22,-9,-11}, -{22,-9,-10}, -{22,-9,-9}, -{22,-9,-8}, -{22,-9,-7}, -{22,-9,-6}, -{22,-9,-5}, -{22,-9,-4}, -{22,-9,-3}, -{22,-9,-2}, -{22,-9,-1}, -{22,-9,0}, -{22,-9,1}, -{22,-9,2}, -{22,-9,3}, -{22,-9,4}, -{22,-9,5}, -{22,-9,6}, -{22,-9,7}, -{22,-9,8}, -{22,-9,9}, -{22,-9,10}, -{22,-9,11}, -{22,-9,12}, -{22,-9,13}, -{22,-9,14}, -{22,-9,15}, -{22,-9,16}, -{22,-9,17}, -{22,-9,18}, -{22,-9,19}, -{22,-9,20}, -{22,-9,21}, -{22,-9,22}, -{22,-9,23}, -{22,-9,24}, -{22,-9,25}, -{22,-9,26}, -{22,-9,27}, -{22,-9,28}, -{22,-9,29}, -{22,-9,30}, -{22,-8,-17}, -{22,-8,-16}, -{22,-8,-15}, -{22,-8,-14}, -{22,-8,-13}, -{22,-8,-12}, -{22,-8,-11}, -{22,-8,-10}, -{22,-8,-9}, -{22,-8,-8}, -{22,-8,-7}, -{22,-8,-6}, -{22,-8,-5}, -{22,-8,-4}, -{22,-8,-3}, -{22,-8,-2}, -{22,-8,-1}, -{22,-8,0}, -{22,-8,1}, -{22,-8,2}, -{22,-8,3}, -{22,-8,4}, -{22,-8,5}, -{22,-8,6}, -{22,-8,7}, -{22,-8,8}, -{22,-8,9}, -{22,-8,10}, -{22,-8,11}, -{22,-8,12}, -{22,-8,13}, -{22,-8,14}, -{22,-8,15}, -{22,-8,16}, -{22,-8,17}, -{22,-8,18}, -{22,-8,19}, -{22,-8,20}, -{22,-8,21}, -{22,-8,22}, -{22,-8,23}, -{22,-8,24}, -{22,-8,25}, -{22,-8,26}, -{22,-8,27}, -{22,-8,28}, -{22,-8,29}, -{22,-8,30}, -{22,-7,-19}, -{22,-7,-18}, -{22,-7,-17}, -{22,-7,-16}, -{22,-7,-15}, -{22,-7,-14}, -{22,-7,-13}, -{22,-7,-12}, -{22,-7,-11}, -{22,-7,-10}, -{22,-7,-9}, -{22,-7,-8}, -{22,-7,-7}, -{22,-7,-6}, -{22,-7,-5}, -{22,-7,-4}, -{22,-7,-3}, -{22,-7,-2}, -{22,-7,-1}, -{22,-7,0}, -{22,-7,1}, -{22,-7,2}, -{22,-7,3}, -{22,-7,4}, -{22,-7,5}, -{22,-7,6}, -{22,-7,7}, -{22,-7,8}, -{22,-7,9}, -{22,-7,10}, -{22,-7,11}, -{22,-7,12}, -{22,-7,13}, -{22,-7,14}, -{22,-7,15}, -{22,-7,16}, -{22,-7,17}, -{22,-7,18}, -{22,-7,19}, -{22,-7,20}, -{22,-7,21}, -{22,-7,22}, -{22,-7,23}, -{22,-7,24}, -{22,-7,25}, -{22,-7,26}, -{22,-7,27}, -{22,-7,28}, -{22,-7,29}, -{22,-7,30}, -{22,-6,-20}, -{22,-6,-19}, -{22,-6,-18}, -{22,-6,-17}, -{22,-6,-16}, -{22,-6,-15}, -{22,-6,-14}, -{22,-6,-13}, -{22,-6,-12}, -{22,-6,-11}, -{22,-6,-10}, -{22,-6,-9}, -{22,-6,-8}, -{22,-6,-7}, -{22,-6,-6}, -{22,-6,-5}, -{22,-6,-4}, -{22,-6,-3}, -{22,-6,-2}, -{22,-6,-1}, -{22,-6,0}, -{22,-6,1}, -{22,-6,2}, -{22,-6,3}, -{22,-6,4}, -{22,-6,5}, -{22,-6,6}, -{22,-6,7}, -{22,-6,8}, -{22,-6,9}, -{22,-6,10}, -{22,-6,11}, -{22,-6,12}, -{22,-6,13}, -{22,-6,14}, -{22,-6,15}, -{22,-6,16}, -{22,-6,17}, -{22,-6,18}, -{22,-6,19}, -{22,-6,20}, -{22,-6,21}, -{22,-6,22}, -{22,-6,23}, -{22,-6,24}, -{22,-6,25}, -{22,-6,26}, -{22,-6,27}, -{22,-6,28}, -{22,-6,29}, -{22,-6,30}, -{22,-5,-21}, -{22,-5,-20}, -{22,-5,-19}, -{22,-5,-18}, -{22,-5,-17}, -{22,-5,-16}, -{22,-5,-15}, -{22,-5,-14}, -{22,-5,-13}, -{22,-5,-12}, -{22,-5,-11}, -{22,-5,-10}, -{22,-5,-9}, -{22,-5,-8}, -{22,-5,-7}, -{22,-5,-6}, -{22,-5,-5}, -{22,-5,-4}, -{22,-5,-3}, -{22,-5,-2}, -{22,-5,-1}, -{22,-5,0}, -{22,-5,1}, -{22,-5,2}, -{22,-5,3}, -{22,-5,4}, -{22,-5,5}, -{22,-5,6}, -{22,-5,7}, -{22,-5,8}, -{22,-5,9}, -{22,-5,10}, -{22,-5,11}, -{22,-5,12}, -{22,-5,13}, -{22,-5,14}, -{22,-5,15}, -{22,-5,16}, -{22,-5,17}, -{22,-5,18}, -{22,-5,19}, -{22,-5,20}, -{22,-5,21}, -{22,-5,22}, -{22,-5,23}, -{22,-5,24}, -{22,-5,25}, -{22,-5,26}, -{22,-5,27}, -{22,-5,28}, -{22,-5,29}, -{22,-5,30}, -{22,-4,-22}, -{22,-4,-21}, -{22,-4,-20}, -{22,-4,-19}, -{22,-4,-18}, -{22,-4,-17}, -{22,-4,-16}, -{22,-4,-15}, -{22,-4,-14}, -{22,-4,-13}, -{22,-4,-12}, -{22,-4,-11}, -{22,-4,-10}, -{22,-4,-9}, -{22,-4,-8}, -{22,-4,-7}, -{22,-4,-6}, -{22,-4,-5}, -{22,-4,-4}, -{22,-4,-3}, -{22,-4,-2}, -{22,-4,-1}, -{22,-4,0}, -{22,-4,1}, -{22,-4,2}, -{22,-4,3}, -{22,-4,4}, -{22,-4,5}, -{22,-4,6}, -{22,-4,7}, -{22,-4,8}, -{22,-4,9}, -{22,-4,10}, -{22,-4,11}, -{22,-4,12}, -{22,-4,13}, -{22,-4,14}, -{22,-4,15}, -{22,-4,16}, -{22,-4,17}, -{22,-4,18}, -{22,-4,19}, -{22,-4,20}, -{22,-4,21}, -{22,-4,22}, -{22,-4,23}, -{22,-4,24}, -{22,-4,25}, -{22,-4,26}, -{22,-4,27}, -{22,-4,28}, -{22,-4,29}, -{22,-4,30}, -{22,-3,-24}, -{22,-3,-23}, -{22,-3,-22}, -{22,-3,-21}, -{22,-3,-20}, -{22,-3,-19}, -{22,-3,-18}, -{22,-3,-17}, -{22,-3,-16}, -{22,-3,-15}, -{22,-3,-14}, -{22,-3,-13}, -{22,-3,-12}, -{22,-3,-11}, -{22,-3,-10}, -{22,-3,-9}, -{22,-3,-8}, -{22,-3,-7}, -{22,-3,-6}, -{22,-3,-5}, -{22,-3,-4}, -{22,-3,-3}, -{22,-3,-2}, -{22,-3,-1}, -{22,-3,0}, -{22,-3,1}, -{22,-3,2}, -{22,-3,3}, -{22,-3,4}, -{22,-3,5}, -{22,-3,6}, -{22,-3,7}, -{22,-3,8}, -{22,-3,9}, -{22,-3,10}, -{22,-3,11}, -{22,-3,12}, -{22,-3,13}, -{22,-3,14}, -{22,-3,15}, -{22,-3,16}, -{22,-3,17}, -{22,-3,18}, -{22,-3,19}, -{22,-3,20}, -{22,-3,21}, -{22,-3,22}, -{22,-3,23}, -{22,-3,24}, -{22,-3,25}, -{22,-3,26}, -{22,-3,27}, -{22,-3,28}, -{22,-3,29}, -{22,-3,30}, -{22,-2,-25}, -{22,-2,-24}, -{22,-2,-23}, -{22,-2,-22}, -{22,-2,-21}, -{22,-2,-20}, -{22,-2,-19}, -{22,-2,-18}, -{22,-2,-17}, -{22,-2,-16}, -{22,-2,-15}, -{22,-2,-14}, -{22,-2,-13}, -{22,-2,-12}, -{22,-2,-11}, -{22,-2,-10}, -{22,-2,-9}, -{22,-2,-8}, -{22,-2,-7}, -{22,-2,-6}, -{22,-2,-5}, -{22,-2,-4}, -{22,-2,-3}, -{22,-2,-2}, -{22,-2,-1}, -{22,-2,0}, -{22,-2,1}, -{22,-2,2}, -{22,-2,3}, -{22,-2,4}, -{22,-2,5}, -{22,-2,6}, -{22,-2,7}, -{22,-2,8}, -{22,-2,9}, -{22,-2,10}, -{22,-2,11}, -{22,-2,12}, -{22,-2,13}, -{22,-2,14}, -{22,-2,15}, -{22,-2,16}, -{22,-2,17}, -{22,-2,18}, -{22,-2,19}, -{22,-2,20}, -{22,-2,21}, -{22,-2,22}, -{22,-2,23}, -{22,-2,24}, -{22,-2,25}, -{22,-2,26}, -{22,-2,27}, -{22,-2,28}, -{22,-2,29}, -{22,-2,30}, -{22,-1,-26}, -{22,-1,-25}, -{22,-1,-24}, -{22,-1,-23}, -{22,-1,-22}, -{22,-1,-21}, -{22,-1,-20}, -{22,-1,-19}, -{22,-1,-18}, -{22,-1,-17}, -{22,-1,-16}, -{22,-1,-15}, -{22,-1,-14}, -{22,-1,-13}, -{22,-1,-12}, -{22,-1,-11}, -{22,-1,-10}, -{22,-1,-9}, -{22,-1,-8}, -{22,-1,-7}, -{22,-1,-6}, -{22,-1,-5}, -{22,-1,-4}, -{22,-1,-3}, -{22,-1,-2}, -{22,-1,-1}, -{22,-1,0}, -{22,-1,1}, -{22,-1,2}, -{22,-1,3}, -{22,-1,4}, -{22,-1,5}, -{22,-1,6}, -{22,-1,7}, -{22,-1,8}, -{22,-1,9}, -{22,-1,10}, -{22,-1,11}, -{22,-1,12}, -{22,-1,13}, -{22,-1,14}, -{22,-1,15}, -{22,-1,16}, -{22,-1,17}, -{22,-1,18}, -{22,-1,19}, -{22,-1,20}, -{22,-1,21}, -{22,-1,22}, -{22,-1,23}, -{22,-1,24}, -{22,-1,25}, -{22,-1,26}, -{22,-1,27}, -{22,-1,28}, -{22,-1,29}, -{22,-1,30}, -{22,0,-27}, -{22,0,-26}, -{22,0,-25}, -{22,0,-24}, -{22,0,-23}, -{22,0,-22}, -{22,0,-21}, -{22,0,-20}, -{22,0,-19}, -{22,0,-18}, -{22,0,-17}, -{22,0,-16}, -{22,0,-15}, -{22,0,-14}, -{22,0,-13}, -{22,0,-12}, -{22,0,-11}, -{22,0,-10}, -{22,0,-9}, -{22,0,-8}, -{22,0,-7}, -{22,0,-6}, -{22,0,-5}, -{22,0,-4}, -{22,0,-3}, -{22,0,-2}, -{22,0,-1}, -{22,0,0}, -{22,0,1}, -{22,0,2}, -{22,0,3}, -{22,0,4}, -{22,0,5}, -{22,0,6}, -{22,0,7}, -{22,0,8}, -{22,0,9}, -{22,0,10}, -{22,0,11}, -{22,0,12}, -{22,0,13}, -{22,0,14}, -{22,0,15}, -{22,0,16}, -{22,0,17}, -{22,0,18}, -{22,0,19}, -{22,0,20}, -{22,0,21}, -{22,0,22}, -{22,0,23}, -{22,0,24}, -{22,0,25}, -{22,0,26}, -{22,0,27}, -{22,0,28}, -{22,0,29}, -{22,0,30}, -{22,1,-28}, -{22,1,-27}, -{22,1,-26}, -{22,1,-25}, -{22,1,-24}, -{22,1,-23}, -{22,1,-22}, -{22,1,-21}, -{22,1,-20}, -{22,1,-19}, -{22,1,-18}, -{22,1,-17}, -{22,1,-16}, -{22,1,-15}, -{22,1,-14}, -{22,1,-13}, -{22,1,-12}, -{22,1,-11}, -{22,1,-10}, -{22,1,-9}, -{22,1,-8}, -{22,1,-7}, -{22,1,-6}, -{22,1,-5}, -{22,1,-4}, -{22,1,-3}, -{22,1,-2}, -{22,1,-1}, -{22,1,0}, -{22,1,1}, -{22,1,2}, -{22,1,3}, -{22,1,4}, -{22,1,5}, -{22,1,6}, -{22,1,7}, -{22,1,8}, -{22,1,9}, -{22,1,10}, -{22,1,11}, -{22,1,12}, -{22,1,13}, -{22,1,14}, -{22,1,15}, -{22,1,16}, -{22,1,17}, -{22,1,18}, -{22,1,19}, -{22,1,20}, -{22,1,21}, -{22,1,22}, -{22,1,23}, -{22,1,24}, -{22,1,25}, -{22,1,26}, -{22,1,27}, -{22,1,28}, -{22,1,29}, -{22,1,30}, -{22,2,-29}, -{22,2,-28}, -{22,2,-27}, -{22,2,-26}, -{22,2,-25}, -{22,2,-24}, -{22,2,-23}, -{22,2,-22}, -{22,2,-21}, -{22,2,-20}, -{22,2,-19}, -{22,2,-18}, -{22,2,-17}, -{22,2,-16}, -{22,2,-15}, -{22,2,-14}, -{22,2,-13}, -{22,2,-12}, -{22,2,-11}, -{22,2,-10}, -{22,2,-9}, -{22,2,-8}, -{22,2,-7}, -{22,2,-6}, -{22,2,-5}, -{22,2,-4}, -{22,2,-3}, -{22,2,-2}, -{22,2,-1}, -{22,2,0}, -{22,2,1}, -{22,2,2}, -{22,2,3}, -{22,2,4}, -{22,2,5}, -{22,2,6}, -{22,2,7}, -{22,2,8}, -{22,2,9}, -{22,2,10}, -{22,2,11}, -{22,2,12}, -{22,2,13}, -{22,2,14}, -{22,2,15}, -{22,2,16}, -{22,2,17}, -{22,2,18}, -{22,2,19}, -{22,2,20}, -{22,2,21}, -{22,2,22}, -{22,2,23}, -{22,2,24}, -{22,2,25}, -{22,2,26}, -{22,2,27}, -{22,2,28}, -{22,2,29}, -{22,2,30}, -{22,2,31}, -{22,3,-30}, -{22,3,-29}, -{22,3,-28}, -{22,3,-27}, -{22,3,-26}, -{22,3,-25}, -{22,3,-24}, -{22,3,-23}, -{22,3,-22}, -{22,3,-21}, -{22,3,-20}, -{22,3,-19}, -{22,3,-18}, -{22,3,-17}, -{22,3,-16}, -{22,3,-15}, -{22,3,-14}, -{22,3,-13}, -{22,3,-12}, -{22,3,-11}, -{22,3,-10}, -{22,3,-9}, -{22,3,-8}, -{22,3,-7}, -{22,3,-6}, -{22,3,-5}, -{22,3,-4}, -{22,3,-3}, -{22,3,-2}, -{22,3,-1}, -{22,3,0}, -{22,3,1}, -{22,3,2}, -{22,3,3}, -{22,3,4}, -{22,3,5}, -{22,3,6}, -{22,3,7}, -{22,3,8}, -{22,3,9}, -{22,3,10}, -{22,3,11}, -{22,3,12}, -{22,3,13}, -{22,3,14}, -{22,3,15}, -{22,3,16}, -{22,3,17}, -{22,3,18}, -{22,3,19}, -{22,3,20}, -{22,3,21}, -{22,3,22}, -{22,3,23}, -{22,3,24}, -{22,3,25}, -{22,3,26}, -{22,3,27}, -{22,3,28}, -{22,3,29}, -{22,3,30}, -{22,3,31}, -{22,4,-31}, -{22,4,-30}, -{22,4,-29}, -{22,4,-28}, -{22,4,-27}, -{22,4,-26}, -{22,4,-25}, -{22,4,-24}, -{22,4,-23}, -{22,4,-22}, -{22,4,-21}, -{22,4,-20}, -{22,4,-19}, -{22,4,-18}, -{22,4,-17}, -{22,4,-16}, -{22,4,-15}, -{22,4,-14}, -{22,4,-13}, -{22,4,-12}, -{22,4,-11}, -{22,4,-10}, -{22,4,-9}, -{22,4,-8}, -{22,4,-7}, -{22,4,-6}, -{22,4,-5}, -{22,4,-4}, -{22,4,-3}, -{22,4,-2}, -{22,4,-1}, -{22,4,0}, -{22,4,1}, -{22,4,2}, -{22,4,3}, -{22,4,4}, -{22,4,5}, -{22,4,6}, -{22,4,7}, -{22,4,8}, -{22,4,9}, -{22,4,10}, -{22,4,11}, -{22,4,12}, -{22,4,13}, -{22,4,14}, -{22,4,15}, -{22,4,16}, -{22,4,17}, -{22,4,18}, -{22,4,19}, -{22,4,20}, -{22,4,21}, -{22,4,22}, -{22,4,23}, -{22,4,24}, -{22,4,25}, -{22,4,26}, -{22,4,27}, -{22,4,28}, -{22,4,29}, -{22,4,30}, -{22,4,31}, -{22,5,-32}, -{22,5,-31}, -{22,5,-30}, -{22,5,-29}, -{22,5,-28}, -{22,5,-27}, -{22,5,-26}, -{22,5,-25}, -{22,5,-24}, -{22,5,-23}, -{22,5,-22}, -{22,5,-21}, -{22,5,-20}, -{22,5,-19}, -{22,5,-18}, -{22,5,-17}, -{22,5,-16}, -{22,5,-15}, -{22,5,-14}, -{22,5,-13}, -{22,5,-12}, -{22,5,-11}, -{22,5,-10}, -{22,5,-9}, -{22,5,-8}, -{22,5,-7}, -{22,5,-6}, -{22,5,-5}, -{22,5,-4}, -{22,5,-3}, -{22,5,-2}, -{22,5,-1}, -{22,5,0}, -{22,5,1}, -{22,5,2}, -{22,5,3}, -{22,5,4}, -{22,5,5}, -{22,5,6}, -{22,5,7}, -{22,5,8}, -{22,5,9}, -{22,5,10}, -{22,5,11}, -{22,5,12}, -{22,5,13}, -{22,5,14}, -{22,5,15}, -{22,5,16}, -{22,5,17}, -{22,5,18}, -{22,5,19}, -{22,5,20}, -{22,5,21}, -{22,5,22}, -{22,5,23}, -{22,5,24}, -{22,5,25}, -{22,5,26}, -{22,5,27}, -{22,5,28}, -{22,5,29}, -{22,5,30}, -{22,5,31}, -{22,6,-34}, -{22,6,-33}, -{22,6,-32}, -{22,6,-31}, -{22,6,-30}, -{22,6,-29}, -{22,6,-28}, -{22,6,-27}, -{22,6,-26}, -{22,6,-25}, -{22,6,-24}, -{22,6,-23}, -{22,6,-22}, -{22,6,-21}, -{22,6,-20}, -{22,6,-19}, -{22,6,-18}, -{22,6,-17}, -{22,6,-16}, -{22,6,-15}, -{22,6,-14}, -{22,6,-13}, -{22,6,-12}, -{22,6,-11}, -{22,6,-10}, -{22,6,-9}, -{22,6,-8}, -{22,6,-7}, -{22,6,-6}, -{22,6,-5}, -{22,6,-4}, -{22,6,-3}, -{22,6,-2}, -{22,6,-1}, -{22,6,0}, -{22,6,1}, -{22,6,2}, -{22,6,3}, -{22,6,4}, -{22,6,5}, -{22,6,6}, -{22,6,7}, -{22,6,8}, -{22,6,9}, -{22,6,10}, -{22,6,11}, -{22,6,12}, -{22,6,13}, -{22,6,14}, -{22,6,15}, -{22,6,16}, -{22,6,17}, -{22,6,18}, -{22,6,19}, -{22,6,20}, -{22,6,21}, -{22,6,22}, -{22,6,23}, -{22,6,24}, -{22,6,25}, -{22,6,26}, -{22,6,27}, -{22,6,28}, -{22,6,29}, -{22,6,30}, -{22,6,31}, -{22,7,-35}, -{22,7,-34}, -{22,7,-33}, -{22,7,-32}, -{22,7,-31}, -{22,7,-30}, -{22,7,-29}, -{22,7,-28}, -{22,7,-27}, -{22,7,-26}, -{22,7,-25}, -{22,7,-24}, -{22,7,-23}, -{22,7,-22}, -{22,7,-21}, -{22,7,-20}, -{22,7,-19}, -{22,7,-18}, -{22,7,-17}, -{22,7,-16}, -{22,7,-15}, -{22,7,-14}, -{22,7,-13}, -{22,7,-12}, -{22,7,-11}, -{22,7,-10}, -{22,7,-9}, -{22,7,-8}, -{22,7,-7}, -{22,7,-6}, -{22,7,-5}, -{22,7,-4}, -{22,7,-3}, -{22,7,-2}, -{22,7,-1}, -{22,7,0}, -{22,7,1}, -{22,7,2}, -{22,7,3}, -{22,7,4}, -{22,7,5}, -{22,7,6}, -{22,7,7}, -{22,7,8}, -{22,7,9}, -{22,7,10}, -{22,7,11}, -{22,7,12}, -{22,7,13}, -{22,7,14}, -{22,7,15}, -{22,7,16}, -{22,7,17}, -{22,7,18}, -{22,7,19}, -{22,7,20}, -{22,7,21}, -{22,7,22}, -{22,7,23}, -{22,7,24}, -{22,7,25}, -{22,7,26}, -{22,7,27}, -{22,7,28}, -{22,7,29}, -{22,7,30}, -{22,7,31}, -{22,8,-36}, -{22,8,-35}, -{22,8,-34}, -{22,8,-33}, -{22,8,-32}, -{22,8,-31}, -{22,8,-30}, -{22,8,-29}, -{22,8,-28}, -{22,8,-27}, -{22,8,-26}, -{22,8,-25}, -{22,8,-24}, -{22,8,-23}, -{22,8,-22}, -{22,8,-21}, -{22,8,-20}, -{22,8,-19}, -{22,8,-18}, -{22,8,-17}, -{22,8,-16}, -{22,8,-15}, -{22,8,-14}, -{22,8,-13}, -{22,8,-12}, -{22,8,-11}, -{22,8,-10}, -{22,8,-9}, -{22,8,-8}, -{22,8,-7}, -{22,8,-6}, -{22,8,-5}, -{22,8,-4}, -{22,8,-3}, -{22,8,-2}, -{22,8,-1}, -{22,8,0}, -{22,8,1}, -{22,8,2}, -{22,8,3}, -{22,8,4}, -{22,8,5}, -{22,8,6}, -{22,8,7}, -{22,8,8}, -{22,8,9}, -{22,8,10}, -{22,8,11}, -{22,8,12}, -{22,8,13}, -{22,8,14}, -{22,8,15}, -{22,8,16}, -{22,8,17}, -{22,8,18}, -{22,8,19}, -{22,8,20}, -{22,8,21}, -{22,8,22}, -{22,8,23}, -{22,8,24}, -{22,8,25}, -{22,8,26}, -{22,8,27}, -{22,8,28}, -{22,8,29}, -{22,8,30}, -{22,8,31}, -{22,9,-37}, -{22,9,-36}, -{22,9,-35}, -{22,9,-34}, -{22,9,-33}, -{22,9,-32}, -{22,9,-31}, -{22,9,-30}, -{22,9,-29}, -{22,9,-28}, -{22,9,-27}, -{22,9,-26}, -{22,9,-25}, -{22,9,-24}, -{22,9,-23}, -{22,9,-22}, -{22,9,-21}, -{22,9,-20}, -{22,9,-19}, -{22,9,-18}, -{22,9,-17}, -{22,9,-16}, -{22,9,-15}, -{22,9,-14}, -{22,9,-13}, -{22,9,-12}, -{22,9,-11}, -{22,9,-10}, -{22,9,-9}, -{22,9,-8}, -{22,9,-7}, -{22,9,-6}, -{22,9,-5}, -{22,9,-4}, -{22,9,-3}, -{22,9,-2}, -{22,9,-1}, -{22,9,0}, -{22,9,1}, -{22,9,2}, -{22,9,3}, -{22,9,4}, -{22,9,5}, -{22,9,6}, -{22,9,7}, -{22,9,8}, -{22,9,9}, -{22,9,10}, -{22,9,11}, -{22,9,12}, -{22,9,13}, -{22,9,14}, -{22,9,15}, -{22,9,16}, -{22,9,17}, -{22,9,18}, -{22,9,19}, -{22,9,20}, -{22,9,21}, -{22,9,22}, -{22,9,23}, -{22,9,24}, -{22,9,25}, -{22,9,26}, -{22,9,27}, -{22,9,28}, -{22,9,29}, -{22,9,30}, -{22,9,31}, -{22,10,-38}, -{22,10,-37}, -{22,10,-36}, -{22,10,-35}, -{22,10,-34}, -{22,10,-33}, -{22,10,-32}, -{22,10,-31}, -{22,10,-30}, -{22,10,-29}, -{22,10,-28}, -{22,10,-27}, -{22,10,-26}, -{22,10,-25}, -{22,10,-24}, -{22,10,-23}, -{22,10,-22}, -{22,10,-21}, -{22,10,-20}, -{22,10,-19}, -{22,10,-18}, -{22,10,-17}, -{22,10,-16}, -{22,10,-15}, -{22,10,-14}, -{22,10,-13}, -{22,10,-12}, -{22,10,-11}, -{22,10,-10}, -{22,10,-9}, -{22,10,-8}, -{22,10,-7}, -{22,10,-6}, -{22,10,-5}, -{22,10,-4}, -{22,10,-3}, -{22,10,-2}, -{22,10,-1}, -{22,10,0}, -{22,10,1}, -{22,10,2}, -{22,10,3}, -{22,10,4}, -{22,10,5}, -{22,10,6}, -{22,10,7}, -{22,10,8}, -{22,10,9}, -{22,10,10}, -{22,10,11}, -{22,10,12}, -{22,10,13}, -{22,10,14}, -{22,10,15}, -{22,10,16}, -{22,10,17}, -{22,10,18}, -{22,10,19}, -{22,10,20}, -{22,10,21}, -{22,10,22}, -{22,10,23}, -{22,10,24}, -{22,10,25}, -{22,10,26}, -{22,10,27}, -{22,10,28}, -{22,10,29}, -{22,10,30}, -{22,10,31}, -{22,11,-39}, -{22,11,-38}, -{22,11,-37}, -{22,11,-36}, -{22,11,-35}, -{22,11,-34}, -{22,11,-33}, -{22,11,-32}, -{22,11,-31}, -{22,11,-30}, -{22,11,-29}, -{22,11,-28}, -{22,11,-27}, -{22,11,-26}, -{22,11,-25}, -{22,11,-24}, -{22,11,-23}, -{22,11,-22}, -{22,11,-21}, -{22,11,-20}, -{22,11,-19}, -{22,11,-18}, -{22,11,-17}, -{22,11,-16}, -{22,11,-15}, -{22,11,-14}, -{22,11,-13}, -{22,11,-12}, -{22,11,-11}, -{22,11,-10}, -{22,11,-9}, -{22,11,-8}, -{22,11,-7}, -{22,11,-6}, -{22,11,-5}, -{22,11,-4}, -{22,11,-3}, -{22,11,-2}, -{22,11,-1}, -{22,11,0}, -{22,11,1}, -{22,11,2}, -{22,11,3}, -{22,11,4}, -{22,11,5}, -{22,11,6}, -{22,11,7}, -{22,11,8}, -{22,11,9}, -{22,11,10}, -{22,11,11}, -{22,11,12}, -{22,11,13}, -{22,11,14}, -{22,11,15}, -{22,11,16}, -{22,11,17}, -{22,11,18}, -{22,11,19}, -{22,11,20}, -{22,11,21}, -{22,11,22}, -{22,11,23}, -{22,11,24}, -{22,11,25}, -{22,11,26}, -{22,11,27}, -{22,11,28}, -{22,11,29}, -{22,11,30}, -{22,11,31}, -{22,12,-40}, -{22,12,-39}, -{22,12,-38}, -{22,12,-37}, -{22,12,-36}, -{22,12,-35}, -{22,12,-34}, -{22,12,-33}, -{22,12,-32}, -{22,12,-31}, -{22,12,-30}, -{22,12,-29}, -{22,12,-28}, -{22,12,-27}, -{22,12,-26}, -{22,12,-25}, -{22,12,-24}, -{22,12,-23}, -{22,12,-22}, -{22,12,-21}, -{22,12,-20}, -{22,12,-19}, -{22,12,-18}, -{22,12,-17}, -{22,12,-16}, -{22,12,-15}, -{22,12,-14}, -{22,12,-13}, -{22,12,-12}, -{22,12,-11}, -{22,12,-10}, -{22,12,-9}, -{22,12,-8}, -{22,12,-7}, -{22,12,-6}, -{22,12,-5}, -{22,12,-4}, -{22,12,-3}, -{22,12,-2}, -{22,12,-1}, -{22,12,0}, -{22,12,1}, -{22,12,2}, -{22,12,3}, -{22,12,4}, -{22,12,5}, -{22,12,6}, -{22,12,7}, -{22,12,8}, -{22,12,9}, -{22,12,10}, -{22,12,11}, -{22,12,12}, -{22,12,13}, -{22,12,14}, -{22,12,15}, -{22,12,16}, -{22,12,17}, -{22,12,18}, -{22,12,19}, -{22,12,20}, -{22,12,21}, -{22,12,22}, -{22,12,23}, -{22,12,24}, -{22,12,25}, -{22,12,26}, -{22,12,27}, -{22,12,28}, -{22,12,29}, -{22,12,30}, -{22,12,31}, -{22,13,-41}, -{22,13,-40}, -{22,13,-39}, -{22,13,-38}, -{22,13,-37}, -{22,13,-36}, -{22,13,-35}, -{22,13,-34}, -{22,13,-33}, -{22,13,-32}, -{22,13,-31}, -{22,13,-30}, -{22,13,-29}, -{22,13,-28}, -{22,13,-27}, -{22,13,-26}, -{22,13,-25}, -{22,13,-24}, -{22,13,-23}, -{22,13,-22}, -{22,13,-21}, -{22,13,-20}, -{22,13,-19}, -{22,13,-18}, -{22,13,-17}, -{22,13,-16}, -{22,13,-15}, -{22,13,-14}, -{22,13,-13}, -{22,13,-12}, -{22,13,-11}, -{22,13,-10}, -{22,13,-9}, -{22,13,-8}, -{22,13,-7}, -{22,13,-6}, -{22,13,-5}, -{22,13,-4}, -{22,13,-3}, -{22,13,-2}, -{22,13,-1}, -{22,13,0}, -{22,13,1}, -{22,13,2}, -{22,13,3}, -{22,13,4}, -{22,13,5}, -{22,13,6}, -{22,13,7}, -{22,13,8}, -{22,13,9}, -{22,13,10}, -{22,13,11}, -{22,13,12}, -{22,13,13}, -{22,13,14}, -{22,13,15}, -{22,13,16}, -{22,13,17}, -{22,13,18}, -{22,13,19}, -{22,13,20}, -{22,13,21}, -{22,13,22}, -{22,13,23}, -{22,13,24}, -{22,13,25}, -{22,13,26}, -{22,13,27}, -{22,13,28}, -{22,13,29}, -{22,13,30}, -{22,13,31}, -{22,14,-42}, -{22,14,-41}, -{22,14,-40}, -{22,14,-39}, -{22,14,-38}, -{22,14,-37}, -{22,14,-36}, -{22,14,-35}, -{22,14,-34}, -{22,14,-33}, -{22,14,-32}, -{22,14,-31}, -{22,14,-30}, -{22,14,-29}, -{22,14,-28}, -{22,14,-27}, -{22,14,-26}, -{22,14,-25}, -{22,14,-24}, -{22,14,-23}, -{22,14,-22}, -{22,14,-21}, -{22,14,-20}, -{22,14,-19}, -{22,14,-18}, -{22,14,-17}, -{22,14,-16}, -{22,14,-15}, -{22,14,-14}, -{22,14,-13}, -{22,14,-12}, -{22,14,-11}, -{22,14,-10}, -{22,14,-9}, -{22,14,-8}, -{22,14,-7}, -{22,14,-6}, -{22,14,-5}, -{22,14,-4}, -{22,14,-3}, -{22,14,-2}, -{22,14,-1}, -{22,14,0}, -{22,14,1}, -{22,14,2}, -{22,14,3}, -{22,14,4}, -{22,14,5}, -{22,14,6}, -{22,14,7}, -{22,14,8}, -{22,14,9}, -{22,14,10}, -{22,14,11}, -{22,14,12}, -{22,14,13}, -{22,14,14}, -{22,14,15}, -{22,14,16}, -{22,14,17}, -{22,14,18}, -{22,14,19}, -{22,14,20}, -{22,14,21}, -{22,14,22}, -{22,14,23}, -{22,14,24}, -{22,14,25}, -{22,14,26}, -{22,14,27}, -{22,14,28}, -{22,14,29}, -{22,14,30}, -{22,14,31}, -{22,15,-43}, -{22,15,-42}, -{22,15,-41}, -{22,15,-40}, -{22,15,-39}, -{22,15,-38}, -{22,15,-37}, -{22,15,-36}, -{22,15,-35}, -{22,15,-34}, -{22,15,-33}, -{22,15,-32}, -{22,15,-31}, -{22,15,-30}, -{22,15,-29}, -{22,15,-28}, -{22,15,-27}, -{22,15,-26}, -{22,15,-25}, -{22,15,-24}, -{22,15,-23}, -{22,15,-22}, -{22,15,-21}, -{22,15,-20}, -{22,15,-19}, -{22,15,-18}, -{22,15,-17}, -{22,15,-16}, -{22,15,-15}, -{22,15,-14}, -{22,15,-13}, -{22,15,-12}, -{22,15,-11}, -{22,15,-10}, -{22,15,-9}, -{22,15,-8}, -{22,15,-7}, -{22,15,-6}, -{22,15,-5}, -{22,15,-4}, -{22,15,-3}, -{22,15,-2}, -{22,15,-1}, -{22,15,0}, -{22,15,1}, -{22,15,2}, -{22,15,3}, -{22,15,4}, -{22,15,5}, -{22,15,6}, -{22,15,7}, -{22,15,8}, -{22,15,9}, -{22,15,10}, -{22,15,11}, -{22,15,12}, -{22,15,13}, -{22,15,14}, -{22,15,15}, -{22,15,16}, -{22,15,17}, -{22,15,18}, -{22,15,19}, -{22,15,20}, -{22,15,21}, -{22,15,22}, -{22,15,23}, -{22,15,24}, -{22,15,25}, -{22,15,26}, -{22,15,27}, -{22,15,28}, -{22,15,29}, -{22,15,30}, -{22,15,31}, -{22,16,-44}, -{22,16,-43}, -{22,16,-42}, -{22,16,-41}, -{22,16,-40}, -{22,16,-39}, -{22,16,-38}, -{22,16,-37}, -{22,16,-36}, -{22,16,-35}, -{22,16,-34}, -{22,16,-33}, -{22,16,-32}, -{22,16,-31}, -{22,16,-30}, -{22,16,-29}, -{22,16,-28}, -{22,16,-27}, -{22,16,-26}, -{22,16,-25}, -{22,16,-24}, -{22,16,-23}, -{22,16,-22}, -{22,16,-21}, -{22,16,-20}, -{22,16,-19}, -{22,16,-18}, -{22,16,-17}, -{22,16,-16}, -{22,16,-15}, -{22,16,-14}, -{22,16,-13}, -{22,16,-12}, -{22,16,-11}, -{22,16,-10}, -{22,16,-9}, -{22,16,-8}, -{22,16,-7}, -{22,16,-6}, -{22,16,-5}, -{22,16,-4}, -{22,16,-3}, -{22,16,-2}, -{22,16,-1}, -{22,16,0}, -{22,16,1}, -{22,16,2}, -{22,16,3}, -{22,16,4}, -{22,16,5}, -{22,16,6}, -{22,16,7}, -{22,16,8}, -{22,16,9}, -{22,16,10}, -{22,16,11}, -{22,16,12}, -{22,16,13}, -{22,16,14}, -{22,16,15}, -{22,16,16}, -{22,16,17}, -{22,16,18}, -{22,16,19}, -{22,16,20}, -{22,16,21}, -{22,16,22}, -{22,16,23}, -{22,16,24}, -{22,16,25}, -{22,16,26}, -{22,16,27}, -{22,16,28}, -{22,16,29}, -{22,16,30}, -{22,16,31}, -{22,17,-45}, -{22,17,-44}, -{22,17,-43}, -{22,17,-42}, -{22,17,-41}, -{22,17,-40}, -{22,17,-39}, -{22,17,-38}, -{22,17,-37}, -{22,17,-36}, -{22,17,-35}, -{22,17,-34}, -{22,17,-33}, -{22,17,-32}, -{22,17,-31}, -{22,17,-30}, -{22,17,-29}, -{22,17,-28}, -{22,17,-27}, -{22,17,-26}, -{22,17,-25}, -{22,17,-24}, -{22,17,-23}, -{22,17,-22}, -{22,17,-21}, -{22,17,-20}, -{22,17,-19}, -{22,17,-18}, -{22,17,-17}, -{22,17,-16}, -{22,17,-15}, -{22,17,-14}, -{22,17,-13}, -{22,17,-12}, -{22,17,-11}, -{22,17,-10}, -{22,17,-9}, -{22,17,-8}, -{22,17,-7}, -{22,17,-6}, -{22,17,-5}, -{22,17,-4}, -{22,17,-3}, -{22,17,-2}, -{22,17,-1}, -{22,17,0}, -{22,17,1}, -{22,17,2}, -{22,17,3}, -{22,17,4}, -{22,17,5}, -{22,17,6}, -{22,17,7}, -{22,17,8}, -{22,17,9}, -{22,17,10}, -{22,17,11}, -{22,17,12}, -{22,17,13}, -{22,17,14}, -{22,17,15}, -{22,17,16}, -{22,17,17}, -{22,17,18}, -{22,17,19}, -{22,17,20}, -{22,17,21}, -{22,17,22}, -{22,17,23}, -{22,17,24}, -{22,17,25}, -{22,17,26}, -{22,17,27}, -{22,17,28}, -{22,17,29}, -{22,17,30}, -{22,17,31}, -{22,18,-46}, -{22,18,-45}, -{22,18,-44}, -{22,18,-43}, -{22,18,-42}, -{22,18,-41}, -{22,18,-40}, -{22,18,-39}, -{22,18,-38}, -{22,18,-37}, -{22,18,-36}, -{22,18,-35}, -{22,18,-34}, -{22,18,-33}, -{22,18,-32}, -{22,18,-31}, -{22,18,-30}, -{22,18,-29}, -{22,18,-28}, -{22,18,-27}, -{22,18,-26}, -{22,18,-25}, -{22,18,-24}, -{22,18,-23}, -{22,18,-22}, -{22,18,-21}, -{22,18,-20}, -{22,18,-19}, -{22,18,-18}, -{22,18,-17}, -{22,18,-16}, -{22,18,-15}, -{22,18,-14}, -{22,18,-13}, -{22,18,-12}, -{22,18,-11}, -{22,18,-10}, -{22,18,-9}, -{22,18,-8}, -{22,18,-7}, -{22,18,-6}, -{22,18,-5}, -{22,18,-4}, -{22,18,-3}, -{22,18,-2}, -{22,18,-1}, -{22,18,0}, -{22,18,1}, -{22,18,2}, -{22,18,3}, -{22,18,4}, -{22,18,5}, -{22,18,6}, -{22,18,7}, -{22,18,8}, -{22,18,9}, -{22,18,10}, -{22,18,11}, -{22,18,12}, -{22,18,13}, -{22,18,14}, -{22,18,15}, -{22,18,16}, -{22,18,17}, -{22,18,18}, -{22,18,19}, -{22,18,20}, -{22,18,21}, -{22,18,22}, -{22,18,23}, -{22,18,24}, -{22,18,25}, -{22,18,26}, -{22,18,27}, -{22,18,28}, -{22,18,29}, -{22,18,30}, -{22,18,31}, -{22,19,-47}, -{22,19,-46}, -{22,19,-45}, -{22,19,-44}, -{22,19,-43}, -{22,19,-42}, -{22,19,-41}, -{22,19,-40}, -{22,19,-39}, -{22,19,-38}, -{22,19,-37}, -{22,19,-36}, -{22,19,-35}, -{22,19,-34}, -{22,19,-33}, -{22,19,-32}, -{22,19,-31}, -{22,19,-30}, -{22,19,-29}, -{22,19,-28}, -{22,19,-27}, -{22,19,-26}, -{22,19,-25}, -{22,19,-24}, -{22,19,-23}, -{22,19,-22}, -{22,19,-21}, -{22,19,-20}, -{22,19,-19}, -{22,19,-18}, -{22,19,-17}, -{22,19,-16}, -{22,19,-15}, -{22,19,-14}, -{22,19,-13}, -{22,19,-12}, -{22,19,-11}, -{22,19,-10}, -{22,19,-9}, -{22,19,-8}, -{22,19,-7}, -{22,19,-6}, -{22,19,-5}, -{22,19,-4}, -{22,19,-3}, -{22,19,-2}, -{22,19,-1}, -{22,19,0}, -{22,19,1}, -{22,19,2}, -{22,19,3}, -{22,19,4}, -{22,19,5}, -{22,19,6}, -{22,19,7}, -{22,19,8}, -{22,19,9}, -{22,19,10}, -{22,19,11}, -{22,19,12}, -{22,19,13}, -{22,19,14}, -{22,19,15}, -{22,19,16}, -{22,19,17}, -{22,19,18}, -{22,19,19}, -{22,19,20}, -{22,19,21}, -{22,19,22}, -{22,19,23}, -{22,19,24}, -{22,19,25}, -{22,19,26}, -{22,19,27}, -{22,19,28}, -{22,19,29}, -{22,19,30}, -{22,19,31}, -{22,20,-48}, -{22,20,-47}, -{22,20,-46}, -{22,20,-45}, -{22,20,-44}, -{22,20,-43}, -{22,20,-42}, -{22,20,-41}, -{22,20,-40}, -{22,20,-39}, -{22,20,-38}, -{22,20,-37}, -{22,20,-36}, -{22,20,-35}, -{22,20,-34}, -{22,20,-33}, -{22,20,-32}, -{22,20,-31}, -{22,20,-30}, -{22,20,-29}, -{22,20,-28}, -{22,20,-27}, -{22,20,-26}, -{22,20,-25}, -{22,20,-24}, -{22,20,-23}, -{22,20,-22}, -{22,20,-21}, -{22,20,-20}, -{22,20,-19}, -{22,20,-18}, -{22,20,-17}, -{22,20,-16}, -{22,20,-15}, -{22,20,-14}, -{22,20,-13}, -{22,20,-12}, -{22,20,-11}, -{22,20,-10}, -{22,20,-9}, -{22,20,-8}, -{22,20,-7}, -{22,20,-6}, -{22,20,-5}, -{22,20,-4}, -{22,20,-3}, -{22,20,-2}, -{22,20,-1}, -{22,20,0}, -{22,20,1}, -{22,20,2}, -{22,20,3}, -{22,20,4}, -{22,20,5}, -{22,20,6}, -{22,20,7}, -{22,20,8}, -{22,20,9}, -{22,20,10}, -{22,20,11}, -{22,20,12}, -{22,20,13}, -{22,20,14}, -{22,20,15}, -{22,20,16}, -{22,20,17}, -{22,20,18}, -{22,20,19}, -{22,20,20}, -{22,20,21}, -{22,20,22}, -{22,20,23}, -{22,20,24}, -{22,20,25}, -{22,20,26}, -{22,20,27}, -{22,20,28}, -{22,20,29}, -{22,20,30}, -{22,20,31}, -{22,21,-49}, -{22,21,-48}, -{22,21,-47}, -{22,21,-46}, -{22,21,-45}, -{22,21,-44}, -{22,21,-43}, -{22,21,-42}, -{22,21,-41}, -{22,21,-40}, -{22,21,-39}, -{22,21,-38}, -{22,21,-37}, -{22,21,-36}, -{22,21,-35}, -{22,21,-34}, -{22,21,-33}, -{22,21,-32}, -{22,21,-31}, -{22,21,-30}, -{22,21,-29}, -{22,21,-28}, -{22,21,-27}, -{22,21,-26}, -{22,21,-25}, -{22,21,-24}, -{22,21,-23}, -{22,21,-22}, -{22,21,-21}, -{22,21,-20}, -{22,21,-19}, -{22,21,-18}, -{22,21,-17}, -{22,21,-16}, -{22,21,-15}, -{22,21,-14}, -{22,21,-13}, -{22,21,-12}, -{22,21,-11}, -{22,21,-10}, -{22,21,-9}, -{22,21,-8}, -{22,21,-7}, -{22,21,-6}, -{22,21,-5}, -{22,21,-4}, -{22,21,-3}, -{22,21,-2}, -{22,21,-1}, -{22,21,0}, -{22,21,1}, -{22,21,2}, -{22,21,3}, -{22,21,4}, -{22,21,5}, -{22,21,6}, -{22,21,7}, -{22,21,8}, -{22,21,9}, -{22,21,10}, -{22,21,11}, -{22,21,12}, -{22,21,13}, -{22,21,14}, -{22,21,15}, -{22,21,16}, -{22,21,17}, -{22,21,18}, -{22,21,19}, -{22,21,20}, -{22,21,21}, -{22,21,22}, -{22,21,23}, -{22,21,24}, -{22,21,25}, -{22,21,26}, -{22,21,27}, -{22,21,28}, -{22,21,29}, -{22,21,30}, -{22,21,31}, -{22,21,32}, -{22,22,-49}, -{22,22,-48}, -{22,22,-47}, -{22,22,-46}, -{22,22,-45}, -{22,22,-44}, -{22,22,-43}, -{22,22,-42}, -{22,22,-41}, -{22,22,-40}, -{22,22,-39}, -{22,22,-38}, -{22,22,-37}, -{22,22,-36}, -{22,22,-35}, -{22,22,-34}, -{22,22,-33}, -{22,22,-32}, -{22,22,-31}, -{22,22,-30}, -{22,22,-29}, -{22,22,-28}, -{22,22,-27}, -{22,22,-26}, -{22,22,-25}, -{22,22,-24}, -{22,22,-23}, -{22,22,-22}, -{22,22,-21}, -{22,22,-20}, -{22,22,-19}, -{22,22,-18}, -{22,22,-17}, -{22,22,-16}, -{22,22,-15}, -{22,22,-14}, -{22,22,-13}, -{22,22,-12}, -{22,22,-11}, -{22,22,-10}, -{22,22,-9}, -{22,22,-8}, -{22,22,-7}, -{22,22,-6}, -{22,22,-5}, -{22,22,-4}, -{22,22,-3}, -{22,22,-2}, -{22,22,-1}, -{22,22,0}, -{22,22,1}, -{22,22,2}, -{22,22,3}, -{22,22,4}, -{22,22,5}, -{22,22,6}, -{22,22,7}, -{22,22,8}, -{22,22,9}, -{22,22,10}, -{22,22,11}, -{22,22,12}, -{22,22,13}, -{22,22,14}, -{22,22,15}, -{22,22,16}, -{22,22,17}, -{22,22,18}, -{22,22,19}, -{22,22,20}, -{22,22,21}, -{22,22,22}, -{22,22,23}, -{22,22,24}, -{22,22,25}, -{22,22,26}, -{22,22,27}, -{22,22,28}, -{22,22,29}, -{22,22,30}, -{22,22,31}, -{22,22,32}, -{22,23,-50}, -{22,23,-49}, -{22,23,-48}, -{22,23,-47}, -{22,23,-46}, -{22,23,-45}, -{22,23,-44}, -{22,23,-43}, -{22,23,-42}, -{22,23,-41}, -{22,23,-40}, -{22,23,-39}, -{22,23,-38}, -{22,23,-37}, -{22,23,-36}, -{22,23,-35}, -{22,23,-34}, -{22,23,-33}, -{22,23,-32}, -{22,23,-31}, -{22,23,-30}, -{22,23,-29}, -{22,23,-28}, -{22,23,-27}, -{22,23,-26}, -{22,23,-25}, -{22,23,-24}, -{22,23,-23}, -{22,23,-22}, -{22,23,-21}, -{22,23,-20}, -{22,23,-19}, -{22,23,-18}, -{22,23,-17}, -{22,23,-16}, -{22,23,-15}, -{22,23,-14}, -{22,23,-13}, -{22,23,-12}, -{22,23,-11}, -{22,23,-10}, -{22,23,-9}, -{22,23,-8}, -{22,23,-7}, -{22,23,-6}, -{22,23,-5}, -{22,23,-4}, -{22,23,-3}, -{22,23,-2}, -{22,23,-1}, -{22,23,0}, -{22,23,1}, -{22,23,2}, -{22,23,3}, -{22,23,4}, -{22,23,5}, -{22,23,6}, -{22,23,7}, -{22,23,8}, -{22,23,9}, -{22,23,10}, -{22,23,11}, -{22,23,12}, -{22,23,13}, -{22,23,14}, -{22,23,15}, -{22,23,16}, -{22,23,17}, -{22,23,18}, -{22,23,19}, -{22,23,20}, -{22,23,21}, -{22,23,22}, -{22,23,23}, -{22,23,24}, -{22,23,25}, -{22,23,26}, -{22,23,27}, -{22,23,28}, -{22,23,29}, -{22,23,30}, -{22,23,31}, -{22,23,32}, -{22,24,-51}, -{22,24,-50}, -{22,24,-49}, -{22,24,-48}, -{22,24,-47}, -{22,24,-46}, -{22,24,-45}, -{22,24,-44}, -{22,24,-43}, -{22,24,-42}, -{22,24,-41}, -{22,24,-40}, -{22,24,-39}, -{22,24,-38}, -{22,24,-37}, -{22,24,-36}, -{22,24,-35}, -{22,24,-34}, -{22,24,-33}, -{22,24,-32}, -{22,24,-31}, -{22,24,-30}, -{22,24,-29}, -{22,24,-28}, -{22,24,-27}, -{22,24,-26}, -{22,24,-25}, -{22,24,-24}, -{22,24,-23}, -{22,24,-22}, -{22,24,-21}, -{22,24,-20}, -{22,24,-19}, -{22,24,-18}, -{22,24,-17}, -{22,24,-16}, -{22,24,-15}, -{22,24,-14}, -{22,24,-13}, -{22,24,-12}, -{22,24,-11}, -{22,24,-10}, -{22,24,-9}, -{22,24,-8}, -{22,24,-7}, -{22,24,-6}, -{22,24,-5}, -{22,24,-4}, -{22,24,-3}, -{22,24,-2}, -{22,24,-1}, -{22,24,0}, -{22,24,1}, -{22,24,2}, -{22,24,3}, -{22,24,4}, -{22,24,5}, -{22,24,6}, -{22,24,7}, -{22,24,8}, -{22,24,9}, -{22,24,10}, -{22,24,11}, -{22,24,12}, -{22,24,13}, -{22,24,14}, -{22,24,15}, -{22,24,16}, -{22,24,17}, -{22,24,18}, -{22,24,19}, -{22,24,20}, -{22,24,21}, -{22,24,22}, -{22,24,23}, -{22,24,24}, -{22,24,25}, -{22,24,26}, -{22,24,27}, -{22,24,28}, -{22,24,29}, -{22,24,30}, -{22,24,31}, -{22,24,32}, -{22,25,-52}, -{22,25,-51}, -{22,25,-50}, -{22,25,-49}, -{22,25,-48}, -{22,25,-47}, -{22,25,-46}, -{22,25,-45}, -{22,25,-44}, -{22,25,-43}, -{22,25,-42}, -{22,25,-41}, -{22,25,-40}, -{22,25,-39}, -{22,25,-38}, -{22,25,-37}, -{22,25,-36}, -{22,25,-35}, -{22,25,-34}, -{22,25,-33}, -{22,25,-32}, -{22,25,-31}, -{22,25,-30}, -{22,25,-29}, -{22,25,-28}, -{22,25,-27}, -{22,25,-26}, -{22,25,-25}, -{22,25,-24}, -{22,25,-23}, -{22,25,-22}, -{22,25,-21}, -{22,25,-20}, -{22,25,-19}, -{22,25,-18}, -{22,25,-17}, -{22,25,-16}, -{22,25,-15}, -{22,25,-14}, -{22,25,-13}, -{22,25,-12}, -{22,25,-11}, -{22,25,-10}, -{22,25,-9}, -{22,25,-8}, -{22,25,-7}, -{22,25,-6}, -{22,25,-5}, -{22,25,-4}, -{22,25,-3}, -{22,25,-2}, -{22,25,-1}, -{22,25,0}, -{22,25,1}, -{22,25,2}, -{22,25,3}, -{22,25,4}, -{22,25,5}, -{22,25,6}, -{22,25,7}, -{22,25,8}, -{22,25,9}, -{22,25,10}, -{22,25,11}, -{22,25,12}, -{22,25,13}, -{22,25,14}, -{22,25,15}, -{22,25,16}, -{22,25,17}, -{22,25,18}, -{22,25,19}, -{22,25,20}, -{22,25,21}, -{22,25,22}, -{22,25,23}, -{22,25,24}, -{22,25,25}, -{22,25,26}, -{22,25,27}, -{22,25,28}, -{22,25,29}, -{22,25,30}, -{22,25,31}, -{22,25,32}, -{22,26,-53}, -{22,26,-52}, -{22,26,-51}, -{22,26,-50}, -{22,26,-49}, -{22,26,-48}, -{22,26,-47}, -{22,26,-46}, -{22,26,-45}, -{22,26,-44}, -{22,26,-43}, -{22,26,-42}, -{22,26,-41}, -{22,26,-40}, -{22,26,-39}, -{22,26,-38}, -{22,26,-37}, -{22,26,-36}, -{22,26,-35}, -{22,26,-34}, -{22,26,-33}, -{22,26,-32}, -{22,26,-31}, -{22,26,-30}, -{22,26,-29}, -{22,26,-28}, -{22,26,-27}, -{22,26,-26}, -{22,26,-25}, -{22,26,-24}, -{22,26,-23}, -{22,26,-22}, -{22,26,-21}, -{22,26,-20}, -{22,26,-19}, -{22,26,-18}, -{22,26,-17}, -{22,26,-16}, -{22,26,-15}, -{22,26,-14}, -{22,26,-13}, -{22,26,-12}, -{22,26,-11}, -{22,26,-10}, -{22,26,-9}, -{22,26,-8}, -{22,26,-7}, -{22,26,-6}, -{22,26,-5}, -{22,26,-4}, -{22,26,-3}, -{22,26,-2}, -{22,26,-1}, -{22,26,0}, -{22,26,1}, -{22,26,2}, -{22,26,3}, -{22,26,4}, -{22,26,5}, -{22,26,6}, -{22,26,7}, -{22,26,8}, -{22,26,9}, -{22,26,10}, -{22,26,11}, -{22,26,12}, -{22,26,13}, -{22,26,14}, -{22,26,15}, -{22,26,16}, -{22,26,17}, -{22,26,18}, -{22,26,19}, -{22,26,20}, -{22,26,21}, -{22,26,22}, -{22,26,23}, -{22,26,24}, -{22,26,25}, -{22,26,26}, -{22,26,27}, -{22,26,28}, -{22,26,29}, -{22,26,30}, -{22,26,31}, -{22,26,32}, -{22,27,-54}, -{22,27,-53}, -{22,27,-52}, -{22,27,-51}, -{22,27,-50}, -{22,27,-49}, -{22,27,-48}, -{22,27,-47}, -{22,27,-46}, -{22,27,-45}, -{22,27,-44}, -{22,27,-43}, -{22,27,-42}, -{22,27,-41}, -{22,27,-40}, -{22,27,-39}, -{22,27,-38}, -{22,27,-37}, -{22,27,-36}, -{22,27,-35}, -{22,27,-34}, -{22,27,-33}, -{22,27,-32}, -{22,27,-31}, -{22,27,-30}, -{22,27,-29}, -{22,27,-28}, -{22,27,-27}, -{22,27,-26}, -{22,27,-25}, -{22,27,-24}, -{22,27,-23}, -{22,27,-22}, -{22,27,-21}, -{22,27,-20}, -{22,27,-19}, -{22,27,-18}, -{22,27,-17}, -{22,27,-16}, -{22,27,-15}, -{22,27,-14}, -{22,27,-13}, -{22,27,-12}, -{22,27,-11}, -{22,27,-10}, -{22,27,-9}, -{22,27,-8}, -{22,27,-7}, -{22,27,-6}, -{22,27,-5}, -{22,27,-4}, -{22,27,-3}, -{22,27,-2}, -{22,27,-1}, -{22,27,0}, -{22,27,1}, -{22,27,2}, -{22,27,3}, -{22,27,4}, -{22,27,5}, -{22,27,6}, -{22,27,7}, -{22,27,8}, -{22,27,9}, -{22,27,10}, -{22,27,11}, -{22,27,12}, -{22,27,13}, -{22,27,14}, -{22,27,15}, -{22,27,16}, -{22,27,17}, -{22,27,18}, -{22,27,19}, -{22,27,20}, -{22,27,21}, -{22,27,22}, -{22,27,23}, -{22,27,24}, -{22,27,25}, -{22,27,26}, -{22,27,27}, -{22,27,28}, -{22,27,29}, -{22,27,30}, -{22,27,31}, -{22,27,32}, -{22,28,-55}, -{22,28,-54}, -{22,28,-53}, -{22,28,-52}, -{22,28,-51}, -{22,28,-50}, -{22,28,-49}, -{22,28,-48}, -{22,28,-47}, -{22,28,-46}, -{22,28,-45}, -{22,28,-44}, -{22,28,-43}, -{22,28,-42}, -{22,28,-41}, -{22,28,-40}, -{22,28,-39}, -{22,28,-38}, -{22,28,-37}, -{22,28,-36}, -{22,28,-35}, -{22,28,-34}, -{22,28,-33}, -{22,28,-32}, -{22,28,-31}, -{22,28,-30}, -{22,28,-29}, -{22,28,-28}, -{22,28,-27}, -{22,28,-26}, -{22,28,-25}, -{22,28,-24}, -{22,28,-23}, -{22,28,-22}, -{22,28,-21}, -{22,28,-20}, -{22,28,-19}, -{22,28,-18}, -{22,28,-17}, -{22,28,-16}, -{22,28,-15}, -{22,28,-14}, -{22,28,-13}, -{22,28,-12}, -{22,28,-11}, -{22,28,-10}, -{22,28,-9}, -{22,28,-8}, -{22,28,-7}, -{22,28,-6}, -{22,28,-5}, -{22,28,-4}, -{22,28,-3}, -{22,28,-2}, -{22,28,-1}, -{22,28,0}, -{22,28,1}, -{22,28,2}, -{22,28,3}, -{22,28,4}, -{22,28,5}, -{22,28,6}, -{22,28,7}, -{22,28,8}, -{22,28,9}, -{22,28,10}, -{22,28,11}, -{22,28,12}, -{22,28,13}, -{22,28,14}, -{22,28,15}, -{22,28,16}, -{22,28,17}, -{22,28,18}, -{22,28,19}, -{22,28,20}, -{22,28,21}, -{22,28,22}, -{22,28,23}, -{22,28,24}, -{22,28,25}, -{22,28,26}, -{22,28,27}, -{22,28,28}, -{22,28,29}, -{22,28,30}, -{22,28,31}, -{22,28,32}, -{22,29,-56}, -{22,29,-55}, -{22,29,-54}, -{22,29,-53}, -{22,29,-52}, -{22,29,-51}, -{22,29,-50}, -{22,29,-49}, -{22,29,-48}, -{22,29,-47}, -{22,29,-46}, -{22,29,-45}, -{22,29,-44}, -{22,29,-43}, -{22,29,-42}, -{22,29,-41}, -{22,29,-40}, -{22,29,-39}, -{22,29,-38}, -{22,29,-37}, -{22,29,-36}, -{22,29,-35}, -{22,29,-34}, -{22,29,-33}, -{22,29,-32}, -{22,29,-31}, -{22,29,-30}, -{22,29,-29}, -{22,29,-28}, -{22,29,-27}, -{22,29,-26}, -{22,29,-25}, -{22,29,-24}, -{22,29,-23}, -{22,29,-22}, -{22,29,-21}, -{22,29,-20}, -{22,29,-19}, -{22,29,-18}, -{22,29,-17}, -{22,29,-16}, -{22,29,-15}, -{22,29,-14}, -{22,29,-13}, -{22,29,-12}, -{22,29,-11}, -{22,29,-10}, -{22,29,-9}, -{22,29,-8}, -{22,29,-7}, -{22,29,-6}, -{22,29,-5}, -{22,29,-4}, -{22,29,-3}, -{22,29,-2}, -{22,29,-1}, -{22,29,0}, -{22,29,1}, -{22,29,2}, -{22,29,3}, -{22,29,4}, -{22,29,5}, -{22,29,6}, -{22,29,7}, -{22,29,8}, -{22,29,9}, -{22,29,10}, -{22,29,11}, -{22,29,12}, -{22,29,13}, -{22,29,14}, -{22,29,15}, -{22,29,16}, -{22,29,17}, -{22,29,18}, -{22,29,19}, -{22,29,20}, -{22,29,21}, -{22,29,22}, -{22,29,23}, -{22,29,24}, -{22,29,25}, -{22,29,26}, -{22,29,27}, -{22,29,28}, -{22,29,29}, -{22,29,30}, -{22,29,31}, -{22,29,32}, -{22,30,-57}, -{22,30,-56}, -{22,30,-55}, -{22,30,-54}, -{22,30,-53}, -{22,30,-52}, -{22,30,-51}, -{22,30,-50}, -{22,30,-49}, -{22,30,-48}, -{22,30,-47}, -{22,30,-46}, -{22,30,-45}, -{22,30,-44}, -{22,30,-43}, -{22,30,-42}, -{22,30,-41}, -{22,30,-40}, -{22,30,-39}, -{22,30,-38}, -{22,30,-37}, -{22,30,-36}, -{22,30,-35}, -{22,30,-34}, -{22,30,-33}, -{22,30,-32}, -{22,30,-31}, -{22,30,-30}, -{22,30,-29}, -{22,30,-28}, -{22,30,-27}, -{22,30,-26}, -{22,30,-25}, -{22,30,-24}, -{22,30,-23}, -{22,30,-22}, -{22,30,-21}, -{22,30,-20}, -{22,30,-19}, -{22,30,-18}, -{22,30,-17}, -{22,30,-16}, -{22,30,-15}, -{22,30,-14}, -{22,30,-13}, -{22,30,-12}, -{22,30,-11}, -{22,30,-10}, -{22,30,-9}, -{22,30,-8}, -{22,30,-7}, -{22,30,-6}, -{22,30,-5}, -{22,30,-4}, -{22,30,-3}, -{22,30,-2}, -{22,30,-1}, -{22,30,0}, -{22,30,1}, -{22,30,2}, -{22,30,3}, -{22,30,4}, -{22,30,5}, -{22,30,6}, -{22,30,7}, -{22,30,8}, -{22,30,9}, -{22,30,10}, -{22,30,11}, -{22,30,12}, -{22,30,13}, -{22,30,14}, -{22,30,15}, -{22,30,16}, -{22,30,17}, -{22,30,18}, -{22,30,19}, -{22,30,20}, -{22,30,21}, -{22,30,22}, -{22,30,23}, -{22,30,24}, -{22,30,25}, -{22,30,26}, -{22,30,27}, -{22,30,28}, -{22,30,29}, -{22,30,30}, -{22,30,31}, -{22,30,32}, -{22,31,-58}, -{22,31,-57}, -{22,31,-56}, -{22,31,-55}, -{22,31,-54}, -{22,31,-53}, -{22,31,-52}, -{22,31,-51}, -{22,31,-50}, -{22,31,-49}, -{22,31,-48}, -{22,31,-47}, -{22,31,-46}, -{22,31,-45}, -{22,31,-44}, -{22,31,-43}, -{22,31,-42}, -{22,31,-41}, -{22,31,-40}, -{22,31,-39}, -{22,31,-38}, -{22,31,-37}, -{22,31,-36}, -{22,31,-35}, -{22,31,-34}, -{22,31,-33}, -{22,31,-32}, -{22,31,-31}, -{22,31,-30}, -{22,31,-29}, -{22,31,-28}, -{22,31,-27}, -{22,31,-26}, -{22,31,-25}, -{22,31,-24}, -{22,31,-23}, -{22,31,-22}, -{22,31,-21}, -{22,31,-20}, -{22,31,-19}, -{22,31,-18}, -{22,31,-17}, -{22,31,-16}, -{22,31,-15}, -{22,31,-14}, -{22,31,-13}, -{22,31,-12}, -{22,31,-11}, -{22,31,-10}, -{22,31,-9}, -{22,31,-8}, -{22,31,-7}, -{22,31,-6}, -{22,31,-5}, -{22,31,-4}, -{22,31,-3}, -{22,31,-2}, -{22,31,-1}, -{22,31,0}, -{22,31,1}, -{22,31,2}, -{22,31,3}, -{22,31,4}, -{22,31,5}, -{22,31,6}, -{22,31,7}, -{22,31,8}, -{22,31,9}, -{22,31,10}, -{22,31,11}, -{22,31,12}, -{22,31,13}, -{22,31,14}, -{22,31,15}, -{22,31,16}, -{22,31,17}, -{22,31,18}, -{22,31,19}, -{22,31,20}, -{22,31,21}, -{22,31,22}, -{22,31,23}, -{22,31,24}, -{22,31,25}, -{22,31,26}, -{22,31,27}, -{22,31,28}, -{22,31,29}, -{22,31,30}, -{22,31,31}, -{22,31,32}, -{22,32,-59}, -{22,32,-58}, -{22,32,-57}, -{22,32,-56}, -{22,32,-55}, -{22,32,-54}, -{22,32,-53}, -{22,32,-52}, -{22,32,-51}, -{22,32,-50}, -{22,32,-49}, -{22,32,-48}, -{22,32,-47}, -{22,32,-46}, -{22,32,-45}, -{22,32,-44}, -{22,32,-43}, -{22,32,-42}, -{22,32,-41}, -{22,32,-40}, -{22,32,-39}, -{22,32,-38}, -{22,32,-37}, -{22,32,-36}, -{22,32,-35}, -{22,32,-34}, -{22,32,-33}, -{22,32,-32}, -{22,32,-31}, -{22,32,-30}, -{22,32,-29}, -{22,32,-28}, -{22,32,-27}, -{22,32,-26}, -{22,32,-25}, -{22,32,-24}, -{22,32,-23}, -{22,32,-22}, -{22,32,-21}, -{22,32,-20}, -{22,32,-19}, -{22,32,-18}, -{22,32,-17}, -{22,32,-16}, -{22,32,-15}, -{22,32,-14}, -{22,32,-13}, -{22,32,-12}, -{22,32,-11}, -{22,32,-10}, -{22,32,-9}, -{22,32,-8}, -{22,32,-7}, -{22,32,-6}, -{22,32,-5}, -{22,32,-4}, -{22,32,-3}, -{22,32,-2}, -{22,32,-1}, -{22,32,0}, -{22,32,1}, -{22,32,2}, -{22,32,3}, -{22,32,4}, -{22,32,5}, -{22,32,6}, -{22,32,7}, -{22,32,8}, -{22,32,9}, -{22,32,10}, -{22,32,11}, -{22,32,12}, -{22,32,13}, -{22,32,14}, -{22,32,15}, -{22,32,16}, -{22,32,17}, -{22,32,18}, -{22,32,19}, -{22,32,20}, -{22,32,21}, -{22,32,22}, -{22,32,23}, -{22,32,24}, -{22,32,25}, -{22,32,26}, -{22,32,27}, -{22,32,28}, -{22,32,29}, -{22,32,30}, -{22,32,31}, -{22,32,32}, -{22,33,-60}, -{22,33,-59}, -{22,33,-58}, -{22,33,-57}, -{22,33,-56}, -{22,33,-55}, -{22,33,-54}, -{22,33,-53}, -{22,33,-52}, -{22,33,-51}, -{22,33,-50}, -{22,33,-49}, -{22,33,-48}, -{22,33,-47}, -{22,33,-46}, -{22,33,-45}, -{22,33,-44}, -{22,33,-43}, -{22,33,-42}, -{22,33,-41}, -{22,33,-40}, -{22,33,-39}, -{22,33,-38}, -{22,33,-37}, -{22,33,-36}, -{22,33,-35}, -{22,33,-34}, -{22,33,-33}, -{22,33,-32}, -{22,33,-31}, -{22,33,-30}, -{22,33,-29}, -{22,33,-28}, -{22,33,-27}, -{22,33,-26}, -{22,33,-25}, -{22,33,-24}, -{22,33,-23}, -{22,33,-22}, -{22,33,-21}, -{22,33,-20}, -{22,33,-19}, -{22,33,-18}, -{22,33,-17}, -{22,33,-16}, -{22,33,-15}, -{22,33,-14}, -{22,33,-13}, -{22,33,-12}, -{22,33,-11}, -{22,33,-10}, -{22,33,-9}, -{22,33,-8}, -{22,33,-7}, -{22,33,-6}, -{22,33,-5}, -{22,33,-4}, -{22,33,-3}, -{22,33,-2}, -{22,33,-1}, -{22,33,0}, -{22,33,1}, -{22,33,2}, -{22,33,3}, -{22,33,4}, -{22,33,5}, -{22,33,6}, -{22,33,7}, -{22,33,8}, -{22,33,9}, -{22,33,10}, -{22,33,11}, -{22,33,12}, -{22,33,13}, -{22,33,14}, -{22,33,15}, -{22,33,16}, -{22,33,17}, -{22,33,18}, -{22,33,19}, -{22,33,20}, -{22,33,21}, -{22,33,22}, -{22,33,23}, -{22,33,24}, -{22,33,25}, -{22,33,26}, -{22,33,27}, -{22,33,28}, -{22,33,29}, -{22,33,30}, -{22,33,31}, -{22,33,32}, -{22,34,-60}, -{22,34,-59}, -{22,34,-58}, -{22,34,-57}, -{22,34,-56}, -{22,34,-55}, -{22,34,-54}, -{22,34,-53}, -{22,34,-52}, -{22,34,-51}, -{22,34,-50}, -{22,34,-49}, -{22,34,-48}, -{22,34,-47}, -{22,34,-46}, -{22,34,-45}, -{22,34,-44}, -{22,34,-43}, -{22,34,-42}, -{22,34,-41}, -{22,34,-40}, -{22,34,-39}, -{22,34,-38}, -{22,34,-37}, -{22,34,-36}, -{22,34,-35}, -{22,34,-34}, -{22,34,-33}, -{22,34,-32}, -{22,34,-31}, -{22,34,-30}, -{22,34,-29}, -{22,34,-28}, -{22,34,-27}, -{22,34,-26}, -{22,34,-25}, -{22,34,-24}, -{22,34,-23}, -{22,34,-22}, -{22,34,-21}, -{22,34,-20}, -{22,34,-19}, -{22,34,-18}, -{22,34,-17}, -{22,34,-16}, -{22,34,-15}, -{22,34,-14}, -{22,34,-13}, -{22,34,-12}, -{22,34,-11}, -{22,34,-10}, -{22,34,-9}, -{22,34,-8}, -{22,34,-7}, -{22,34,-6}, -{22,34,-5}, -{22,34,-4}, -{22,34,-3}, -{22,34,-2}, -{22,34,-1}, -{22,34,0}, -{22,34,1}, -{22,34,2}, -{22,34,3}, -{22,34,4}, -{22,34,5}, -{22,34,6}, -{22,34,7}, -{22,34,8}, -{22,34,9}, -{22,34,10}, -{22,34,11}, -{22,34,12}, -{22,34,13}, -{22,34,14}, -{22,34,15}, -{22,34,16}, -{22,34,17}, -{22,34,18}, -{22,34,19}, -{22,34,20}, -{22,34,21}, -{22,34,22}, -{22,34,23}, -{22,34,24}, -{22,34,25}, -{22,34,26}, -{22,34,27}, -{22,34,28}, -{22,34,29}, -{22,34,30}, -{22,34,31}, -{22,34,32}, -{22,35,-61}, -{22,35,-60}, -{22,35,-59}, -{22,35,-58}, -{22,35,-57}, -{22,35,-56}, -{22,35,-55}, -{22,35,-54}, -{22,35,-53}, -{22,35,-52}, -{22,35,-51}, -{22,35,-50}, -{22,35,-49}, -{22,35,-48}, -{22,35,-47}, -{22,35,-46}, -{22,35,-45}, -{22,35,-44}, -{22,35,-43}, -{22,35,-42}, -{22,35,-41}, -{22,35,-40}, -{22,35,-39}, -{22,35,-38}, -{22,35,-37}, -{22,35,-36}, -{22,35,-35}, -{22,35,-34}, -{22,35,-33}, -{22,35,-32}, -{22,35,-31}, -{22,35,-30}, -{22,35,-29}, -{22,35,-28}, -{22,35,-27}, -{22,35,-26}, -{22,35,-25}, -{22,35,-24}, -{22,35,-23}, -{22,35,-22}, -{22,35,-21}, -{22,35,-20}, -{22,35,-19}, -{22,35,-18}, -{22,35,-17}, -{22,35,-16}, -{22,35,-15}, -{22,35,-14}, -{22,35,-13}, -{22,35,-12}, -{22,35,-11}, -{22,35,-10}, -{22,35,-9}, -{22,35,-8}, -{22,35,-7}, -{22,35,-6}, -{22,35,-5}, -{22,35,-4}, -{22,35,-3}, -{22,35,-2}, -{22,35,-1}, -{22,35,0}, -{22,35,1}, -{22,35,2}, -{22,35,3}, -{22,35,4}, -{22,35,5}, -{22,35,6}, -{22,35,7}, -{22,35,8}, -{22,35,9}, -{22,35,10}, -{22,35,11}, -{22,35,12}, -{22,35,13}, -{22,35,14}, -{22,35,15}, -{22,35,16}, -{22,35,17}, -{22,35,18}, -{22,35,19}, -{22,35,20}, -{22,35,21}, -{22,35,22}, -{22,35,23}, -{22,35,24}, -{22,35,25}, -{22,35,26}, -{22,35,27}, -{22,35,28}, -{22,35,29}, -{22,35,30}, -{22,35,31}, -{22,35,32}, -{22,36,-62}, -{22,36,-61}, -{22,36,-60}, -{22,36,-59}, -{22,36,-58}, -{22,36,-57}, -{22,36,-56}, -{22,36,-55}, -{22,36,-54}, -{22,36,-53}, -{22,36,-52}, -{22,36,-51}, -{22,36,-50}, -{22,36,-49}, -{22,36,-48}, -{22,36,-47}, -{22,36,-46}, -{22,36,-45}, -{22,36,-44}, -{22,36,-43}, -{22,36,-42}, -{22,36,-41}, -{22,36,-40}, -{22,36,-39}, -{22,36,-38}, -{22,36,-37}, -{22,36,-36}, -{22,36,-35}, -{22,36,-34}, -{22,36,-33}, -{22,36,-32}, -{22,36,-31}, -{22,36,-30}, -{22,36,-29}, -{22,36,-28}, -{22,36,-27}, -{22,36,-26}, -{22,36,-25}, -{22,36,-24}, -{22,36,-23}, -{22,36,-22}, -{22,36,-21}, -{22,36,-20}, -{22,36,-19}, -{22,36,-18}, -{22,36,-17}, -{22,36,-16}, -{22,36,-15}, -{22,36,-14}, -{22,36,-13}, -{22,36,-12}, -{22,36,-11}, -{22,36,-10}, -{22,36,-9}, -{22,36,-8}, -{22,36,-7}, -{22,36,-6}, -{22,36,-5}, -{22,36,-4}, -{22,36,-3}, -{22,36,-2}, -{22,36,-1}, -{22,36,0}, -{22,36,1}, -{22,36,2}, -{22,36,3}, -{22,36,4}, -{22,36,5}, -{22,36,6}, -{22,36,7}, -{22,36,8}, -{22,36,9}, -{22,36,10}, -{22,36,11}, -{22,36,12}, -{22,36,13}, -{22,36,14}, -{22,36,15}, -{22,36,16}, -{22,36,17}, -{22,36,18}, -{22,36,19}, -{22,36,20}, -{22,36,21}, -{22,36,22}, -{22,36,23}, -{22,36,24}, -{22,36,25}, -{22,36,26}, -{22,36,27}, -{22,36,28}, -{22,36,29}, -{22,36,30}, -{22,36,31}, -{22,36,32}, -{22,37,-63}, -{22,37,-62}, -{22,37,-61}, -{22,37,-60}, -{22,37,-59}, -{22,37,-58}, -{22,37,-57}, -{22,37,-56}, -{22,37,-55}, -{22,37,-54}, -{22,37,-53}, -{22,37,-52}, -{22,37,-51}, -{22,37,-50}, -{22,37,-49}, -{22,37,-48}, -{22,37,-47}, -{22,37,-46}, -{22,37,-45}, -{22,37,-44}, -{22,37,-43}, -{22,37,-42}, -{22,37,-41}, -{22,37,-40}, -{22,37,-39}, -{22,37,-38}, -{22,37,-37}, -{22,37,-36}, -{22,37,-35}, -{22,37,-34}, -{22,37,-33}, -{22,37,-32}, -{22,37,-31}, -{22,37,-30}, -{22,37,-29}, -{22,37,-28}, -{22,37,-27}, -{22,37,-26}, -{22,37,-25}, -{22,37,-24}, -{22,37,-23}, -{22,37,-22}, -{22,37,-21}, -{22,37,-20}, -{22,37,-19}, -{22,37,-18}, -{22,37,-17}, -{22,37,-16}, -{22,37,-15}, -{22,37,-14}, -{22,37,-13}, -{22,37,-12}, -{22,37,-11}, -{22,37,-10}, -{22,37,-9}, -{22,37,-8}, -{22,37,-7}, -{22,37,-6}, -{22,37,-5}, -{22,37,-4}, -{22,37,-3}, -{22,37,-2}, -{22,37,-1}, -{22,37,0}, -{22,37,1}, -{22,37,2}, -{22,37,3}, -{22,37,4}, -{22,37,5}, -{22,37,6}, -{22,37,7}, -{22,37,8}, -{22,37,9}, -{22,37,10}, -{22,37,11}, -{22,37,12}, -{22,37,13}, -{22,37,14}, -{22,37,15}, -{22,37,16}, -{22,37,17}, -{22,37,18}, -{22,37,19}, -{22,37,20}, -{22,37,21}, -{22,37,22}, -{22,37,23}, -{22,37,24}, -{22,37,25}, -{22,37,26}, -{22,37,27}, -{22,37,28}, -{22,37,29}, -{22,37,30}, -{22,37,31}, -{22,37,32}, -{22,37,33}, -{22,38,-64}, -{22,38,-63}, -{22,38,-62}, -{22,38,-61}, -{22,38,-60}, -{22,38,-59}, -{22,38,-58}, -{22,38,-57}, -{22,38,-56}, -{22,38,-55}, -{22,38,-54}, -{22,38,-53}, -{22,38,-52}, -{22,38,-51}, -{22,38,-50}, -{22,38,-49}, -{22,38,-48}, -{22,38,-47}, -{22,38,-46}, -{22,38,-45}, -{22,38,-44}, -{22,38,-43}, -{22,38,-42}, -{22,38,-41}, -{22,38,-40}, -{22,38,-39}, -{22,38,-38}, -{22,38,-37}, -{22,38,-36}, -{22,38,-35}, -{22,38,-34}, -{22,38,-33}, -{22,38,-32}, -{22,38,-31}, -{22,38,-30}, -{22,38,-29}, -{22,38,-28}, -{22,38,-27}, -{22,38,-26}, -{22,38,-25}, -{22,38,-24}, -{22,38,-23}, -{22,38,-22}, -{22,38,-21}, -{22,38,-20}, -{22,38,-19}, -{22,38,-18}, -{22,38,-17}, -{22,38,-16}, -{22,38,-15}, -{22,38,-14}, -{22,38,-13}, -{22,38,-12}, -{22,38,-11}, -{22,38,-10}, -{22,38,-9}, -{22,38,-8}, -{22,38,-7}, -{22,38,-6}, -{22,38,-5}, -{22,38,-4}, -{22,38,-3}, -{22,38,-2}, -{22,38,-1}, -{22,38,0}, -{22,38,1}, -{22,38,2}, -{22,38,3}, -{22,38,4}, -{22,38,5}, -{22,38,6}, -{22,38,7}, -{22,38,8}, -{22,38,9}, -{22,38,10}, -{22,38,11}, -{22,38,12}, -{22,38,13}, -{22,38,14}, -{22,38,15}, -{22,38,16}, -{22,38,17}, -{22,38,18}, -{22,38,19}, -{22,38,20}, -{22,38,21}, -{22,38,22}, -{22,38,23}, -{22,38,24}, -{22,38,25}, -{22,38,26}, -{22,38,27}, -{22,38,28}, -{22,38,29}, -{22,38,30}, -{22,38,31}, -{22,38,32}, -{22,38,33}, -{22,39,-65}, -{22,39,-64}, -{22,39,-63}, -{22,39,-62}, -{22,39,-61}, -{22,39,-60}, -{22,39,-59}, -{22,39,-58}, -{22,39,-57}, -{22,39,-56}, -{22,39,-55}, -{22,39,-54}, -{22,39,-53}, -{22,39,-52}, -{22,39,-51}, -{22,39,-50}, -{22,39,-49}, -{22,39,-48}, -{22,39,-47}, -{22,39,-46}, -{22,39,-45}, -{22,39,-44}, -{22,39,-43}, -{22,39,-42}, -{22,39,-41}, -{22,39,-40}, -{22,39,-39}, -{22,39,-38}, -{22,39,-37}, -{22,39,-36}, -{22,39,-35}, -{22,39,-34}, -{22,39,-33}, -{22,39,-32}, -{22,39,-31}, -{22,39,-30}, -{22,39,-29}, -{22,39,-28}, -{22,39,-27}, -{22,39,-26}, -{22,39,-25}, -{22,39,-24}, -{22,39,-23}, -{22,39,-22}, -{22,39,-21}, -{22,39,-20}, -{22,39,-19}, -{22,39,-18}, -{22,39,-17}, -{22,39,-16}, -{22,39,-15}, -{22,39,-14}, -{22,39,-13}, -{22,39,-12}, -{22,39,-11}, -{22,39,-10}, -{22,39,-9}, -{22,39,-8}, -{22,39,-7}, -{22,39,-6}, -{22,39,-5}, -{22,39,-4}, -{22,39,-3}, -{22,39,-2}, -{22,39,-1}, -{22,39,0}, -{22,39,1}, -{22,39,2}, -{22,39,3}, -{22,39,4}, -{22,39,5}, -{22,39,6}, -{22,39,7}, -{22,39,8}, -{22,39,9}, -{22,39,10}, -{22,39,11}, -{22,39,12}, -{22,39,13}, -{22,39,14}, -{22,39,15}, -{22,39,16}, -{22,39,17}, -{22,39,18}, -{22,39,19}, -{22,39,20}, -{22,39,21}, -{22,39,22}, -{22,39,23}, -{22,39,24}, -{22,39,25}, -{22,39,26}, -{22,39,27}, -{22,39,28}, -{22,39,29}, -{22,39,30}, -{22,39,31}, -{22,39,32}, -{22,39,33}, -{22,40,-66}, -{22,40,-65}, -{22,40,-64}, -{22,40,-63}, -{22,40,-62}, -{22,40,-61}, -{22,40,-60}, -{22,40,-59}, -{22,40,-58}, -{22,40,-57}, -{22,40,-56}, -{22,40,-55}, -{22,40,-54}, -{22,40,-53}, -{22,40,-52}, -{22,40,-51}, -{22,40,-50}, -{22,40,-49}, -{22,40,-48}, -{22,40,-47}, -{22,40,-46}, -{22,40,-45}, -{22,40,-44}, -{22,40,-43}, -{22,40,-42}, -{22,40,-41}, -{22,40,-40}, -{22,40,-39}, -{22,40,-38}, -{22,40,-37}, -{22,40,-36}, -{22,40,-35}, -{22,40,-34}, -{22,40,-33}, -{22,40,-32}, -{22,40,-31}, -{22,40,-30}, -{22,40,-29}, -{22,40,-28}, -{22,40,-27}, -{22,40,-26}, -{22,40,-25}, -{22,40,-24}, -{22,40,-23}, -{22,40,-22}, -{22,40,-21}, -{22,40,-20}, -{22,40,-19}, -{22,40,-18}, -{22,40,-17}, -{22,40,-16}, -{22,40,-15}, -{22,40,-14}, -{22,40,-13}, -{22,40,-12}, -{22,40,-11}, -{22,40,-10}, -{22,40,-9}, -{22,40,-8}, -{22,40,-7}, -{22,40,-6}, -{22,40,-5}, -{22,40,-4}, -{22,40,-3}, -{22,40,-2}, -{22,40,-1}, -{22,40,0}, -{22,40,1}, -{22,40,2}, -{22,40,3}, -{22,40,4}, -{22,40,5}, -{22,40,6}, -{22,40,7}, -{22,40,8}, -{22,40,9}, -{22,40,10}, -{22,40,11}, -{22,40,12}, -{22,40,13}, -{22,40,14}, -{22,40,15}, -{22,40,16}, -{22,40,17}, -{22,40,18}, -{22,40,19}, -{22,40,20}, -{22,40,21}, -{22,40,22}, -{22,40,23}, -{22,40,24}, -{22,40,25}, -{22,40,26}, -{22,40,27}, -{22,40,28}, -{22,40,29}, -{22,40,30}, -{22,40,31}, -{22,40,32}, -{22,40,33}, -{22,41,-67}, -{22,41,-66}, -{22,41,-65}, -{22,41,-64}, -{22,41,-63}, -{22,41,-62}, -{22,41,-61}, -{22,41,-60}, -{22,41,-59}, -{22,41,-58}, -{22,41,-57}, -{22,41,-56}, -{22,41,-55}, -{22,41,-54}, -{22,41,-53}, -{22,41,-52}, -{22,41,-51}, -{22,41,-50}, -{22,41,-49}, -{22,41,-48}, -{22,41,-47}, -{22,41,-46}, -{22,41,-45}, -{22,41,-44}, -{22,41,-43}, -{22,41,-42}, -{22,41,-41}, -{22,41,-40}, -{22,41,-39}, -{22,41,-38}, -{22,41,-37}, -{22,41,-36}, -{22,41,-35}, -{22,41,-34}, -{22,41,-33}, -{22,41,-32}, -{22,41,-31}, -{22,41,-30}, -{22,41,-29}, -{22,41,-28}, -{22,41,-27}, -{22,41,-26}, -{22,41,-25}, -{22,41,-24}, -{22,41,-23}, -{22,41,-22}, -{22,41,-21}, -{22,41,-20}, -{22,41,-19}, -{22,41,-18}, -{22,41,-17}, -{22,41,-16}, -{22,41,-15}, -{22,41,-14}, -{22,41,-13}, -{22,41,-12}, -{22,41,-11}, -{22,41,-10}, -{22,41,-9}, -{22,41,-8}, -{22,41,-7}, -{22,41,-6}, -{22,41,-5}, -{22,41,-4}, -{22,41,-3}, -{22,41,-2}, -{22,41,-1}, -{22,41,0}, -{22,41,1}, -{22,41,2}, -{22,41,3}, -{22,41,4}, -{22,41,5}, -{22,41,6}, -{22,41,7}, -{22,41,8}, -{22,41,9}, -{22,41,10}, -{22,41,11}, -{22,41,12}, -{22,41,13}, -{22,41,14}, -{22,41,15}, -{22,41,16}, -{22,41,17}, -{22,41,18}, -{22,41,19}, -{22,41,20}, -{22,41,21}, -{22,41,22}, -{22,41,23}, -{22,41,24}, -{22,41,25}, -{22,41,26}, -{22,41,27}, -{22,41,28}, -{22,41,29}, -{22,41,30}, -{22,41,31}, -{22,41,32}, -{22,41,33}, -{22,42,-67}, -{22,42,-66}, -{22,42,-65}, -{22,42,-64}, -{22,42,-63}, -{22,42,-62}, -{22,42,-61}, -{22,42,-60}, -{22,42,-59}, -{22,42,-58}, -{22,42,-57}, -{22,42,-56}, -{22,42,-55}, -{22,42,-54}, -{22,42,-53}, -{22,42,-52}, -{22,42,-51}, -{22,42,-50}, -{22,42,-49}, -{22,42,-48}, -{22,42,-47}, -{22,42,-46}, -{22,42,-45}, -{22,42,-44}, -{22,42,-43}, -{22,42,-42}, -{22,42,-41}, -{22,42,-40}, -{22,42,-39}, -{22,42,-38}, -{22,42,-37}, -{22,42,-36}, -{22,42,-35}, -{22,42,-34}, -{22,42,-33}, -{22,42,-32}, -{22,42,-31}, -{22,42,-30}, -{22,42,-29}, -{22,42,-28}, -{22,42,-27}, -{22,42,-26}, -{22,42,-25}, -{22,42,-24}, -{22,42,-23}, -{22,42,-22}, -{22,42,-21}, -{22,42,-20}, -{22,42,-19}, -{22,42,-18}, -{22,42,-17}, -{22,42,-16}, -{22,42,-15}, -{22,42,-14}, -{22,42,-13}, -{22,42,-12}, -{22,42,-11}, -{22,42,-10}, -{22,42,-9}, -{22,42,-8}, -{22,42,-7}, -{22,42,-6}, -{22,42,-5}, -{22,42,-4}, -{22,42,-3}, -{22,42,-2}, -{22,42,-1}, -{22,42,0}, -{22,42,1}, -{22,42,2}, -{22,42,3}, -{22,42,4}, -{22,42,5}, -{22,42,6}, -{22,42,7}, -{22,42,8}, -{22,42,9}, -{22,42,10}, -{22,42,11}, -{22,42,12}, -{22,42,13}, -{22,42,14}, -{22,42,15}, -{22,42,16}, -{22,42,17}, -{22,42,18}, -{22,42,19}, -{22,42,20}, -{22,42,21}, -{22,42,22}, -{22,42,23}, -{22,42,24}, -{22,42,25}, -{22,42,26}, -{22,42,27}, -{22,42,28}, -{22,42,29}, -{22,42,30}, -{22,42,31}, -{22,42,32}, -{22,42,33}, -{22,43,-68}, -{22,43,-67}, -{22,43,-66}, -{22,43,-65}, -{22,43,-64}, -{22,43,-63}, -{22,43,-62}, -{22,43,-61}, -{22,43,-60}, -{22,43,-59}, -{22,43,-58}, -{22,43,-57}, -{22,43,-56}, -{22,43,-55}, -{22,43,-54}, -{22,43,-53}, -{22,43,-52}, -{22,43,-51}, -{22,43,-50}, -{22,43,-49}, -{22,43,-48}, -{22,43,-47}, -{22,43,-46}, -{22,43,-45}, -{22,43,-44}, -{22,43,-43}, -{22,43,-42}, -{22,43,-41}, -{22,43,-40}, -{22,43,-39}, -{22,43,-38}, -{22,43,-37}, -{22,43,-36}, -{22,43,-35}, -{22,43,-34}, -{22,43,-33}, -{22,43,-32}, -{22,43,-31}, -{22,43,-30}, -{22,43,-29}, -{22,43,-28}, -{22,43,-27}, -{22,43,-26}, -{22,43,-25}, -{22,43,-24}, -{22,43,-23}, -{22,43,-22}, -{22,43,-21}, -{22,43,-20}, -{22,43,-19}, -{22,43,-18}, -{22,43,-17}, -{22,43,-16}, -{22,43,-15}, -{22,43,-14}, -{22,43,-13}, -{22,43,-12}, -{22,43,-11}, -{22,43,-10}, -{22,43,-9}, -{22,43,-8}, -{22,43,-7}, -{22,43,-6}, -{22,43,-5}, -{22,43,-4}, -{22,43,-3}, -{22,43,-2}, -{22,43,-1}, -{22,43,0}, -{22,43,1}, -{22,43,2}, -{22,43,3}, -{22,43,4}, -{22,43,5}, -{22,43,6}, -{22,43,7}, -{22,43,8}, -{22,43,9}, -{22,43,10}, -{22,43,11}, -{22,43,12}, -{22,43,13}, -{22,43,14}, -{22,43,15}, -{22,43,16}, -{22,43,17}, -{22,43,18}, -{22,43,19}, -{22,43,20}, -{22,43,21}, -{22,43,22}, -{22,43,23}, -{22,43,24}, -{22,43,25}, -{22,43,26}, -{22,43,27}, -{22,43,28}, -{22,43,29}, -{22,43,30}, -{22,43,31}, -{22,43,32}, -{22,43,33}, -{22,44,-69}, -{22,44,-68}, -{22,44,-67}, -{22,44,-66}, -{22,44,-65}, -{22,44,-64}, -{22,44,-63}, -{22,44,-62}, -{22,44,-61}, -{22,44,-60}, -{22,44,-59}, -{22,44,-58}, -{22,44,-57}, -{22,44,-56}, -{22,44,-55}, -{22,44,-54}, -{22,44,-53}, -{22,44,-52}, -{22,44,-51}, -{22,44,-50}, -{22,44,-49}, -{22,44,-48}, -{22,44,-47}, -{22,44,-46}, -{22,44,-45}, -{22,44,-44}, -{22,44,-43}, -{22,44,-42}, -{22,44,-41}, -{22,44,-40}, -{22,44,-39}, -{22,44,-38}, -{22,44,-37}, -{22,44,-36}, -{22,44,-35}, -{22,44,-34}, -{22,44,-33}, -{22,44,-32}, -{22,44,-31}, -{22,44,-30}, -{22,44,-29}, -{22,44,-28}, -{22,44,-27}, -{22,44,-26}, -{22,44,-25}, -{22,44,-24}, -{22,44,-23}, -{22,44,-22}, -{22,44,-21}, -{22,44,-20}, -{22,44,-19}, -{22,44,-18}, -{22,44,-17}, -{22,44,-16}, -{22,44,-15}, -{22,44,-14}, -{22,44,-13}, -{22,44,-12}, -{22,44,-11}, -{22,44,-10}, -{22,44,-9}, -{22,44,-8}, -{22,44,-7}, -{22,44,-6}, -{22,44,-5}, -{22,44,-4}, -{22,44,-3}, -{22,44,-2}, -{22,44,-1}, -{22,44,0}, -{22,44,1}, -{22,44,2}, -{22,44,3}, -{22,44,4}, -{22,44,5}, -{22,44,6}, -{22,44,7}, -{22,44,8}, -{22,44,9}, -{22,44,10}, -{22,44,11}, -{22,44,12}, -{22,44,13}, -{22,44,14}, -{22,44,15}, -{22,44,16}, -{22,44,17}, -{22,44,18}, -{22,44,19}, -{22,44,20}, -{22,44,21}, -{22,44,22}, -{22,44,23}, -{22,44,24}, -{22,44,25}, -{22,44,26}, -{22,44,27}, -{22,44,28}, -{22,44,29}, -{22,44,30}, -{22,44,31}, -{22,44,32}, -{22,44,33}, -{22,45,-70}, -{22,45,-69}, -{22,45,-68}, -{22,45,-67}, -{22,45,-66}, -{22,45,-65}, -{22,45,-64}, -{22,45,-63}, -{22,45,-62}, -{22,45,-61}, -{22,45,-60}, -{22,45,-59}, -{22,45,-58}, -{22,45,-57}, -{22,45,-56}, -{22,45,-55}, -{22,45,-54}, -{22,45,-53}, -{22,45,-52}, -{22,45,-51}, -{22,45,-50}, -{22,45,-49}, -{22,45,-48}, -{22,45,-47}, -{22,45,-46}, -{22,45,-45}, -{22,45,-44}, -{22,45,-43}, -{22,45,-42}, -{22,45,-41}, -{22,45,-40}, -{22,45,-39}, -{22,45,-38}, -{22,45,-37}, -{22,45,-36}, -{22,45,-35}, -{22,45,-34}, -{22,45,-33}, -{22,45,-32}, -{22,45,-31}, -{22,45,-30}, -{22,45,-29}, -{22,45,-28}, -{22,45,-27}, -{22,45,-26}, -{22,45,-25}, -{22,45,-24}, -{22,45,-23}, -{22,45,-22}, -{22,45,-21}, -{22,45,-20}, -{22,45,-19}, -{22,45,-18}, -{22,45,-17}, -{22,45,-16}, -{22,45,-15}, -{22,45,-14}, -{22,45,-13}, -{22,45,-12}, -{22,45,-11}, -{22,45,-10}, -{22,45,-9}, -{22,45,-8}, -{22,45,-7}, -{22,45,-6}, -{22,45,-5}, -{22,45,-4}, -{22,45,-3}, -{22,45,-2}, -{22,45,-1}, -{22,45,0}, -{22,45,1}, -{22,45,2}, -{22,45,3}, -{22,45,4}, -{22,45,5}, -{22,45,6}, -{22,45,7}, -{22,45,8}, -{22,45,9}, -{22,46,-71}, -{22,46,-70}, -{22,46,-69}, -{22,46,-68}, -{22,46,-67}, -{22,46,-66}, -{22,46,-65}, -{22,46,-64}, -{22,46,-63}, -{22,46,-62}, -{22,46,-61}, -{22,46,-60}, -{22,46,-59}, -{22,46,-58}, -{22,46,-57}, -{22,46,-56}, -{22,46,-55}, -{22,46,-54}, -{22,46,-53}, -{22,46,-52}, -{22,46,-51}, -{22,46,-50}, -{22,46,-49}, -{22,46,-48}, -{22,46,-47}, -{22,46,-46}, -{22,46,-45}, -{22,46,-44}, -{22,46,-43}, -{22,46,-42}, -{22,46,-41}, -{22,46,-40}, -{22,46,-39}, -{22,46,-38}, -{22,46,-37}, -{22,46,-36}, -{22,46,-35}, -{22,46,-34}, -{22,46,-33}, -{22,46,-32}, -{22,46,-31}, -{22,46,-30}, -{22,46,-29}, -{22,46,-28}, -{22,46,-27}, -{22,46,-26}, -{22,46,-25}, -{22,46,-24}, -{22,46,-23}, -{22,46,-22}, -{22,46,-21}, -{22,46,-20}, -{22,46,-19}, -{22,46,-18}, -{22,46,-17}, -{22,46,-16}, -{22,46,-15}, -{22,46,-14}, -{22,46,-13}, -{22,46,-12}, -{22,46,-11}, -{22,46,-10}, -{22,46,-9}, -{22,46,-8}, -{22,46,-7}, -{22,46,-6}, -{22,46,-5}, -{22,47,-72}, -{22,47,-71}, -{22,47,-70}, -{22,47,-69}, -{22,47,-68}, -{22,47,-67}, -{22,47,-66}, -{22,47,-65}, -{22,47,-64}, -{22,47,-63}, -{22,47,-62}, -{22,47,-61}, -{22,47,-60}, -{22,47,-59}, -{22,47,-58}, -{22,47,-57}, -{22,47,-56}, -{22,47,-55}, -{22,47,-54}, -{22,47,-53}, -{22,47,-52}, -{22,47,-51}, -{22,47,-50}, -{22,47,-49}, -{22,47,-48}, -{22,47,-47}, -{22,47,-46}, -{22,47,-45}, -{22,47,-44}, -{22,47,-43}, -{22,47,-42}, -{22,47,-41}, -{22,47,-40}, -{22,47,-39}, -{22,47,-38}, -{22,47,-37}, -{22,47,-36}, -{22,47,-35}, -{22,47,-34}, -{22,47,-33}, -{22,47,-32}, -{22,47,-31}, -{22,47,-30}, -{22,47,-29}, -{22,47,-28}, -{22,47,-27}, -{22,47,-26}, -{22,47,-25}, -{22,47,-24}, -{22,47,-23}, -{22,47,-22}, -{22,47,-21}, -{22,47,-20}, -{22,47,-19}, -{22,47,-18}, -{22,47,-17}, -{22,47,-16}, -{22,47,-15}, -{22,48,-73}, -{22,48,-72}, -{22,48,-71}, -{22,48,-70}, -{22,48,-69}, -{22,48,-68}, -{22,48,-67}, -{22,48,-66}, -{22,48,-65}, -{22,48,-64}, -{22,48,-63}, -{22,48,-62}, -{22,48,-61}, -{22,48,-60}, -{22,48,-59}, -{22,48,-58}, -{22,48,-57}, -{22,48,-56}, -{22,48,-55}, -{22,48,-54}, -{22,48,-53}, -{22,48,-52}, -{22,48,-51}, -{22,48,-50}, -{22,48,-49}, -{22,48,-48}, -{22,48,-47}, -{22,48,-46}, -{22,48,-45}, -{22,48,-44}, -{22,48,-43}, -{22,48,-42}, -{22,48,-41}, -{22,48,-40}, -{22,48,-39}, -{22,48,-38}, -{22,48,-37}, -{22,48,-36}, -{22,48,-35}, -{22,48,-34}, -{22,48,-33}, -{22,48,-32}, -{22,48,-31}, -{22,48,-30}, -{22,48,-29}, -{22,48,-28}, -{22,48,-27}, -{22,48,-26}, -{22,48,-25}, -{22,48,-24}, -{22,48,-23}, -{22,49,-73}, -{22,49,-72}, -{22,49,-71}, -{22,49,-70}, -{22,49,-69}, -{22,49,-68}, -{22,49,-67}, -{22,49,-66}, -{22,49,-65}, -{22,49,-64}, -{22,49,-63}, -{22,49,-62}, -{22,49,-61}, -{22,49,-60}, -{22,49,-59}, -{22,49,-58}, -{22,49,-57}, -{22,49,-56}, -{22,49,-55}, -{22,49,-54}, -{22,49,-53}, -{22,49,-52}, -{22,49,-51}, -{22,49,-50}, -{22,49,-49}, -{22,49,-48}, -{22,49,-47}, -{22,49,-46}, -{22,49,-45}, -{22,49,-44}, -{22,49,-43}, -{22,49,-42}, -{22,49,-41}, -{22,49,-40}, -{22,49,-39}, -{22,49,-38}, -{22,49,-37}, -{22,49,-36}, -{22,49,-35}, -{22,49,-34}, -{22,49,-33}, -{22,49,-32}, -{22,49,-31}, -{22,49,-30}, -{22,50,-74}, -{22,50,-73}, -{22,50,-72}, -{22,50,-71}, -{22,50,-70}, -{22,50,-69}, -{22,50,-68}, -{22,50,-67}, -{22,50,-66}, -{22,50,-65}, -{22,50,-64}, -{22,50,-63}, -{22,50,-62}, -{22,50,-61}, -{22,50,-60}, -{22,50,-59}, -{22,50,-58}, -{22,50,-57}, -{22,50,-56}, -{22,50,-55}, -{22,50,-54}, -{22,50,-53}, -{22,50,-52}, -{22,50,-51}, -{22,50,-50}, -{22,50,-49}, -{22,50,-48}, -{22,50,-47}, -{22,50,-46}, -{22,50,-45}, -{22,50,-44}, -{22,50,-43}, -{22,50,-42}, -{22,50,-41}, -{22,50,-40}, -{22,50,-39}, -{22,50,-38}, -{22,50,-37}, -{22,51,-75}, -{22,51,-74}, -{22,51,-73}, -{22,51,-72}, -{22,51,-71}, -{22,51,-70}, -{22,51,-69}, -{22,51,-68}, -{22,51,-67}, -{22,51,-66}, -{22,51,-65}, -{22,51,-64}, -{22,51,-63}, -{22,51,-62}, -{22,51,-61}, -{22,51,-60}, -{22,51,-59}, -{22,51,-58}, -{22,51,-57}, -{22,51,-56}, -{22,51,-55}, -{22,51,-54}, -{22,51,-53}, -{22,51,-52}, -{22,51,-51}, -{22,51,-50}, -{22,51,-49}, -{22,51,-48}, -{22,51,-47}, -{22,51,-46}, -{22,51,-45}, -{22,51,-44}, -{22,51,-43}, -{22,51,-42}, -{22,52,-76}, -{22,52,-75}, -{22,52,-74}, -{22,52,-73}, -{22,52,-72}, -{22,52,-71}, -{22,52,-70}, -{22,52,-69}, -{22,52,-68}, -{22,52,-67}, -{22,52,-66}, -{22,52,-65}, -{22,52,-64}, -{22,52,-63}, -{22,52,-62}, -{22,52,-61}, -{22,52,-60}, -{22,52,-59}, -{22,52,-58}, -{22,52,-57}, -{22,52,-56}, -{22,52,-55}, -{22,52,-54}, -{22,52,-53}, -{22,52,-52}, -{22,52,-51}, -{22,52,-50}, -{22,52,-49}, -{22,52,-48}, -{22,52,-47}, -{22,53,-77}, -{22,53,-76}, -{22,53,-75}, -{22,53,-74}, -{22,53,-73}, -{22,53,-72}, -{22,53,-71}, -{22,53,-70}, -{22,53,-69}, -{22,53,-68}, -{22,53,-67}, -{22,53,-66}, -{22,53,-65}, -{22,53,-64}, -{22,53,-63}, -{22,53,-62}, -{22,53,-61}, -{22,53,-60}, -{22,53,-59}, -{22,53,-58}, -{22,53,-57}, -{22,53,-56}, -{22,53,-55}, -{22,53,-54}, -{22,53,-53}, -{22,53,-52}, -{22,54,-78}, -{22,54,-77}, -{22,54,-76}, -{22,54,-75}, -{22,54,-74}, -{22,54,-73}, -{22,54,-72}, -{22,54,-71}, -{22,54,-70}, -{22,54,-69}, -{22,54,-68}, -{22,54,-67}, -{22,54,-66}, -{22,54,-65}, -{22,54,-64}, -{22,54,-63}, -{22,54,-62}, -{22,54,-61}, -{22,54,-60}, -{22,54,-59}, -{22,54,-58}, -{22,54,-57}, -{22,54,-56}, -{22,55,-78}, -{22,55,-77}, -{22,55,-76}, -{22,55,-75}, -{22,55,-74}, -{22,55,-73}, -{22,55,-72}, -{22,55,-71}, -{22,55,-70}, -{22,55,-69}, -{22,55,-68}, -{22,55,-67}, -{22,55,-66}, -{22,55,-65}, -{22,55,-64}, -{22,55,-63}, -{22,55,-62}, -{22,55,-61}, -{22,55,-60}, -{22,56,-79}, -{22,56,-78}, -{22,56,-77}, -{22,56,-76}, -{22,56,-75}, -{22,56,-74}, -{22,56,-73}, -{22,56,-72}, -{22,56,-71}, -{22,56,-70}, -{22,56,-69}, -{22,56,-68}, -{22,56,-67}, -{22,56,-66}, -{22,56,-65}, -{22,56,-64}, -{22,57,-80}, -{22,57,-79}, -{22,57,-78}, -{22,57,-77}, -{22,57,-76}, -{22,57,-75}, -{22,57,-74}, -{22,57,-73}, -{22,57,-72}, -{22,57,-71}, -{22,57,-70}, -{22,57,-69}, -{22,57,-68}, -{22,58,-81}, -{22,58,-80}, -{22,58,-79}, -{22,58,-78}, -{22,58,-77}, -{22,58,-76}, -{22,58,-75}, -{22,58,-74}, -{22,58,-73}, -{22,58,-72}, -{22,58,-71}, -{22,59,-82}, -{22,59,-81}, -{22,59,-80}, -{22,59,-79}, -{22,59,-78}, -{22,59,-77}, -{22,59,-76}, -{22,59,-75}, -{22,60,-83}, -{22,60,-82}, -{22,60,-81}, -{22,60,-80}, -{22,60,-79}, -{22,60,-78}, -{22,61,-83}, -{22,61,-82}, -{22,61,-81}, -{22,62,-84}, -{23,-32,29}, -{23,-32,30}, -{23,-31,25}, -{23,-31,26}, -{23,-31,27}, -{23,-31,28}, -{23,-31,29}, -{23,-31,30}, -{23,-30,21}, -{23,-30,22}, -{23,-30,23}, -{23,-30,24}, -{23,-30,25}, -{23,-30,26}, -{23,-30,27}, -{23,-30,28}, -{23,-30,29}, -{23,-30,30}, -{23,-29,18}, -{23,-29,19}, -{23,-29,20}, -{23,-29,21}, -{23,-29,22}, -{23,-29,23}, -{23,-29,24}, -{23,-29,25}, -{23,-29,26}, -{23,-29,27}, -{23,-29,28}, -{23,-29,29}, -{23,-29,30}, -{23,-28,16}, -{23,-28,17}, -{23,-28,18}, -{23,-28,19}, -{23,-28,20}, -{23,-28,21}, -{23,-28,22}, -{23,-28,23}, -{23,-28,24}, -{23,-28,25}, -{23,-28,26}, -{23,-28,27}, -{23,-28,28}, -{23,-28,29}, -{23,-28,30}, -{23,-27,13}, -{23,-27,14}, -{23,-27,15}, -{23,-27,16}, -{23,-27,17}, -{23,-27,18}, -{23,-27,19}, -{23,-27,20}, -{23,-27,21}, -{23,-27,22}, -{23,-27,23}, -{23,-27,24}, -{23,-27,25}, -{23,-27,26}, -{23,-27,27}, -{23,-27,28}, -{23,-27,29}, -{23,-27,30}, -{23,-26,11}, -{23,-26,12}, -{23,-26,13}, -{23,-26,14}, -{23,-26,15}, -{23,-26,16}, -{23,-26,17}, -{23,-26,18}, -{23,-26,19}, -{23,-26,20}, -{23,-26,21}, -{23,-26,22}, -{23,-26,23}, -{23,-26,24}, -{23,-26,25}, -{23,-26,26}, -{23,-26,27}, -{23,-26,28}, -{23,-26,29}, -{23,-26,30}, -{23,-25,9}, -{23,-25,10}, -{23,-25,11}, -{23,-25,12}, -{23,-25,13}, -{23,-25,14}, -{23,-25,15}, -{23,-25,16}, -{23,-25,17}, -{23,-25,18}, -{23,-25,19}, -{23,-25,20}, -{23,-25,21}, -{23,-25,22}, -{23,-25,23}, -{23,-25,24}, -{23,-25,25}, -{23,-25,26}, -{23,-25,27}, -{23,-25,28}, -{23,-25,29}, -{23,-25,30}, -{23,-25,31}, -{23,-24,7}, -{23,-24,8}, -{23,-24,9}, -{23,-24,10}, -{23,-24,11}, -{23,-24,12}, -{23,-24,13}, -{23,-24,14}, -{23,-24,15}, -{23,-24,16}, -{23,-24,17}, -{23,-24,18}, -{23,-24,19}, -{23,-24,20}, -{23,-24,21}, -{23,-24,22}, -{23,-24,23}, -{23,-24,24}, -{23,-24,25}, -{23,-24,26}, -{23,-24,27}, -{23,-24,28}, -{23,-24,29}, -{23,-24,30}, -{23,-24,31}, -{23,-23,5}, -{23,-23,6}, -{23,-23,7}, -{23,-23,8}, -{23,-23,9}, -{23,-23,10}, -{23,-23,11}, -{23,-23,12}, -{23,-23,13}, -{23,-23,14}, -{23,-23,15}, -{23,-23,16}, -{23,-23,17}, -{23,-23,18}, -{23,-23,19}, -{23,-23,20}, -{23,-23,21}, -{23,-23,22}, -{23,-23,23}, -{23,-23,24}, -{23,-23,25}, -{23,-23,26}, -{23,-23,27}, -{23,-23,28}, -{23,-23,29}, -{23,-23,30}, -{23,-23,31}, -{23,-22,3}, -{23,-22,4}, -{23,-22,5}, -{23,-22,6}, -{23,-22,7}, -{23,-22,8}, -{23,-22,9}, -{23,-22,10}, -{23,-22,11}, -{23,-22,12}, -{23,-22,13}, -{23,-22,14}, -{23,-22,15}, -{23,-22,16}, -{23,-22,17}, -{23,-22,18}, -{23,-22,19}, -{23,-22,20}, -{23,-22,21}, -{23,-22,22}, -{23,-22,23}, -{23,-22,24}, -{23,-22,25}, -{23,-22,26}, -{23,-22,27}, -{23,-22,28}, -{23,-22,29}, -{23,-22,30}, -{23,-22,31}, -{23,-21,1}, -{23,-21,2}, -{23,-21,3}, -{23,-21,4}, -{23,-21,5}, -{23,-21,6}, -{23,-21,7}, -{23,-21,8}, -{23,-21,9}, -{23,-21,10}, -{23,-21,11}, -{23,-21,12}, -{23,-21,13}, -{23,-21,14}, -{23,-21,15}, -{23,-21,16}, -{23,-21,17}, -{23,-21,18}, -{23,-21,19}, -{23,-21,20}, -{23,-21,21}, -{23,-21,22}, -{23,-21,23}, -{23,-21,24}, -{23,-21,25}, -{23,-21,26}, -{23,-21,27}, -{23,-21,28}, -{23,-21,29}, -{23,-21,30}, -{23,-21,31}, -{23,-20,-1}, -{23,-20,0}, -{23,-20,1}, -{23,-20,2}, -{23,-20,3}, -{23,-20,4}, -{23,-20,5}, -{23,-20,6}, -{23,-20,7}, -{23,-20,8}, -{23,-20,9}, -{23,-20,10}, -{23,-20,11}, -{23,-20,12}, -{23,-20,13}, -{23,-20,14}, -{23,-20,15}, -{23,-20,16}, -{23,-20,17}, -{23,-20,18}, -{23,-20,19}, -{23,-20,20}, -{23,-20,21}, -{23,-20,22}, -{23,-20,23}, -{23,-20,24}, -{23,-20,25}, -{23,-20,26}, -{23,-20,27}, -{23,-20,28}, -{23,-20,29}, -{23,-20,30}, -{23,-20,31}, -{23,-19,-3}, -{23,-19,-2}, -{23,-19,-1}, -{23,-19,0}, -{23,-19,1}, -{23,-19,2}, -{23,-19,3}, -{23,-19,4}, -{23,-19,5}, -{23,-19,6}, -{23,-19,7}, -{23,-19,8}, -{23,-19,9}, -{23,-19,10}, -{23,-19,11}, -{23,-19,12}, -{23,-19,13}, -{23,-19,14}, -{23,-19,15}, -{23,-19,16}, -{23,-19,17}, -{23,-19,18}, -{23,-19,19}, -{23,-19,20}, -{23,-19,21}, -{23,-19,22}, -{23,-19,23}, -{23,-19,24}, -{23,-19,25}, -{23,-19,26}, -{23,-19,27}, -{23,-19,28}, -{23,-19,29}, -{23,-19,30}, -{23,-19,31}, -{23,-18,-4}, -{23,-18,-3}, -{23,-18,-2}, -{23,-18,-1}, -{23,-18,0}, -{23,-18,1}, -{23,-18,2}, -{23,-18,3}, -{23,-18,4}, -{23,-18,5}, -{23,-18,6}, -{23,-18,7}, -{23,-18,8}, -{23,-18,9}, -{23,-18,10}, -{23,-18,11}, -{23,-18,12}, -{23,-18,13}, -{23,-18,14}, -{23,-18,15}, -{23,-18,16}, -{23,-18,17}, -{23,-18,18}, -{23,-18,19}, -{23,-18,20}, -{23,-18,21}, -{23,-18,22}, -{23,-18,23}, -{23,-18,24}, -{23,-18,25}, -{23,-18,26}, -{23,-18,27}, -{23,-18,28}, -{23,-18,29}, -{23,-18,30}, -{23,-18,31}, -{23,-17,-6}, -{23,-17,-5}, -{23,-17,-4}, -{23,-17,-3}, -{23,-17,-2}, -{23,-17,-1}, -{23,-17,0}, -{23,-17,1}, -{23,-17,2}, -{23,-17,3}, -{23,-17,4}, -{23,-17,5}, -{23,-17,6}, -{23,-17,7}, -{23,-17,8}, -{23,-17,9}, -{23,-17,10}, -{23,-17,11}, -{23,-17,12}, -{23,-17,13}, -{23,-17,14}, -{23,-17,15}, -{23,-17,16}, -{23,-17,17}, -{23,-17,18}, -{23,-17,19}, -{23,-17,20}, -{23,-17,21}, -{23,-17,22}, -{23,-17,23}, -{23,-17,24}, -{23,-17,25}, -{23,-17,26}, -{23,-17,27}, -{23,-17,28}, -{23,-17,29}, -{23,-17,30}, -{23,-17,31}, -{23,-16,-7}, -{23,-16,-6}, -{23,-16,-5}, -{23,-16,-4}, -{23,-16,-3}, -{23,-16,-2}, -{23,-16,-1}, -{23,-16,0}, -{23,-16,1}, -{23,-16,2}, -{23,-16,3}, -{23,-16,4}, -{23,-16,5}, -{23,-16,6}, -{23,-16,7}, -{23,-16,8}, -{23,-16,9}, -{23,-16,10}, -{23,-16,11}, -{23,-16,12}, -{23,-16,13}, -{23,-16,14}, -{23,-16,15}, -{23,-16,16}, -{23,-16,17}, -{23,-16,18}, -{23,-16,19}, -{23,-16,20}, -{23,-16,21}, -{23,-16,22}, -{23,-16,23}, -{23,-16,24}, -{23,-16,25}, -{23,-16,26}, -{23,-16,27}, -{23,-16,28}, -{23,-16,29}, -{23,-16,30}, -{23,-16,31}, -{23,-15,-9}, -{23,-15,-8}, -{23,-15,-7}, -{23,-15,-6}, -{23,-15,-5}, -{23,-15,-4}, -{23,-15,-3}, -{23,-15,-2}, -{23,-15,-1}, -{23,-15,0}, -{23,-15,1}, -{23,-15,2}, -{23,-15,3}, -{23,-15,4}, -{23,-15,5}, -{23,-15,6}, -{23,-15,7}, -{23,-15,8}, -{23,-15,9}, -{23,-15,10}, -{23,-15,11}, -{23,-15,12}, -{23,-15,13}, -{23,-15,14}, -{23,-15,15}, -{23,-15,16}, -{23,-15,17}, -{23,-15,18}, -{23,-15,19}, -{23,-15,20}, -{23,-15,21}, -{23,-15,22}, -{23,-15,23}, -{23,-15,24}, -{23,-15,25}, -{23,-15,26}, -{23,-15,27}, -{23,-15,28}, -{23,-15,29}, -{23,-15,30}, -{23,-15,31}, -{23,-14,-10}, -{23,-14,-9}, -{23,-14,-8}, -{23,-14,-7}, -{23,-14,-6}, -{23,-14,-5}, -{23,-14,-4}, -{23,-14,-3}, -{23,-14,-2}, -{23,-14,-1}, -{23,-14,0}, -{23,-14,1}, -{23,-14,2}, -{23,-14,3}, -{23,-14,4}, -{23,-14,5}, -{23,-14,6}, -{23,-14,7}, -{23,-14,8}, -{23,-14,9}, -{23,-14,10}, -{23,-14,11}, -{23,-14,12}, -{23,-14,13}, -{23,-14,14}, -{23,-14,15}, -{23,-14,16}, -{23,-14,17}, -{23,-14,18}, -{23,-14,19}, -{23,-14,20}, -{23,-14,21}, -{23,-14,22}, -{23,-14,23}, -{23,-14,24}, -{23,-14,25}, -{23,-14,26}, -{23,-14,27}, -{23,-14,28}, -{23,-14,29}, -{23,-14,30}, -{23,-14,31}, -{23,-13,-12}, -{23,-13,-11}, -{23,-13,-10}, -{23,-13,-9}, -{23,-13,-8}, -{23,-13,-7}, -{23,-13,-6}, -{23,-13,-5}, -{23,-13,-4}, -{23,-13,-3}, -{23,-13,-2}, -{23,-13,-1}, -{23,-13,0}, -{23,-13,1}, -{23,-13,2}, -{23,-13,3}, -{23,-13,4}, -{23,-13,5}, -{23,-13,6}, -{23,-13,7}, -{23,-13,8}, -{23,-13,9}, -{23,-13,10}, -{23,-13,11}, -{23,-13,12}, -{23,-13,13}, -{23,-13,14}, -{23,-13,15}, -{23,-13,16}, -{23,-13,17}, -{23,-13,18}, -{23,-13,19}, -{23,-13,20}, -{23,-13,21}, -{23,-13,22}, -{23,-13,23}, -{23,-13,24}, -{23,-13,25}, -{23,-13,26}, -{23,-13,27}, -{23,-13,28}, -{23,-13,29}, -{23,-13,30}, -{23,-13,31}, -{23,-12,-13}, -{23,-12,-12}, -{23,-12,-11}, -{23,-12,-10}, -{23,-12,-9}, -{23,-12,-8}, -{23,-12,-7}, -{23,-12,-6}, -{23,-12,-5}, -{23,-12,-4}, -{23,-12,-3}, -{23,-12,-2}, -{23,-12,-1}, -{23,-12,0}, -{23,-12,1}, -{23,-12,2}, -{23,-12,3}, -{23,-12,4}, -{23,-12,5}, -{23,-12,6}, -{23,-12,7}, -{23,-12,8}, -{23,-12,9}, -{23,-12,10}, -{23,-12,11}, -{23,-12,12}, -{23,-12,13}, -{23,-12,14}, -{23,-12,15}, -{23,-12,16}, -{23,-12,17}, -{23,-12,18}, -{23,-12,19}, -{23,-12,20}, -{23,-12,21}, -{23,-12,22}, -{23,-12,23}, -{23,-12,24}, -{23,-12,25}, -{23,-12,26}, -{23,-12,27}, -{23,-12,28}, -{23,-12,29}, -{23,-12,30}, -{23,-12,31}, -{23,-11,-14}, -{23,-11,-13}, -{23,-11,-12}, -{23,-11,-11}, -{23,-11,-10}, -{23,-11,-9}, -{23,-11,-8}, -{23,-11,-7}, -{23,-11,-6}, -{23,-11,-5}, -{23,-11,-4}, -{23,-11,-3}, -{23,-11,-2}, -{23,-11,-1}, -{23,-11,0}, -{23,-11,1}, -{23,-11,2}, -{23,-11,3}, -{23,-11,4}, -{23,-11,5}, -{23,-11,6}, -{23,-11,7}, -{23,-11,8}, -{23,-11,9}, -{23,-11,10}, -{23,-11,11}, -{23,-11,12}, -{23,-11,13}, -{23,-11,14}, -{23,-11,15}, -{23,-11,16}, -{23,-11,17}, -{23,-11,18}, -{23,-11,19}, -{23,-11,20}, -{23,-11,21}, -{23,-11,22}, -{23,-11,23}, -{23,-11,24}, -{23,-11,25}, -{23,-11,26}, -{23,-11,27}, -{23,-11,28}, -{23,-11,29}, -{23,-11,30}, -{23,-11,31}, -{23,-10,-16}, -{23,-10,-15}, -{23,-10,-14}, -{23,-10,-13}, -{23,-10,-12}, -{23,-10,-11}, -{23,-10,-10}, -{23,-10,-9}, -{23,-10,-8}, -{23,-10,-7}, -{23,-10,-6}, -{23,-10,-5}, -{23,-10,-4}, -{23,-10,-3}, -{23,-10,-2}, -{23,-10,-1}, -{23,-10,0}, -{23,-10,1}, -{23,-10,2}, -{23,-10,3}, -{23,-10,4}, -{23,-10,5}, -{23,-10,6}, -{23,-10,7}, -{23,-10,8}, -{23,-10,9}, -{23,-10,10}, -{23,-10,11}, -{23,-10,12}, -{23,-10,13}, -{23,-10,14}, -{23,-10,15}, -{23,-10,16}, -{23,-10,17}, -{23,-10,18}, -{23,-10,19}, -{23,-10,20}, -{23,-10,21}, -{23,-10,22}, -{23,-10,23}, -{23,-10,24}, -{23,-10,25}, -{23,-10,26}, -{23,-10,27}, -{23,-10,28}, -{23,-10,29}, -{23,-10,30}, -{23,-10,31}, -{23,-9,-17}, -{23,-9,-16}, -{23,-9,-15}, -{23,-9,-14}, -{23,-9,-13}, -{23,-9,-12}, -{23,-9,-11}, -{23,-9,-10}, -{23,-9,-9}, -{23,-9,-8}, -{23,-9,-7}, -{23,-9,-6}, -{23,-9,-5}, -{23,-9,-4}, -{23,-9,-3}, -{23,-9,-2}, -{23,-9,-1}, -{23,-9,0}, -{23,-9,1}, -{23,-9,2}, -{23,-9,3}, -{23,-9,4}, -{23,-9,5}, -{23,-9,6}, -{23,-9,7}, -{23,-9,8}, -{23,-9,9}, -{23,-9,10}, -{23,-9,11}, -{23,-9,12}, -{23,-9,13}, -{23,-9,14}, -{23,-9,15}, -{23,-9,16}, -{23,-9,17}, -{23,-9,18}, -{23,-9,19}, -{23,-9,20}, -{23,-9,21}, -{23,-9,22}, -{23,-9,23}, -{23,-9,24}, -{23,-9,25}, -{23,-9,26}, -{23,-9,27}, -{23,-9,28}, -{23,-9,29}, -{23,-9,30}, -{23,-9,31}, -{23,-8,-18}, -{23,-8,-17}, -{23,-8,-16}, -{23,-8,-15}, -{23,-8,-14}, -{23,-8,-13}, -{23,-8,-12}, -{23,-8,-11}, -{23,-8,-10}, -{23,-8,-9}, -{23,-8,-8}, -{23,-8,-7}, -{23,-8,-6}, -{23,-8,-5}, -{23,-8,-4}, -{23,-8,-3}, -{23,-8,-2}, -{23,-8,-1}, -{23,-8,0}, -{23,-8,1}, -{23,-8,2}, -{23,-8,3}, -{23,-8,4}, -{23,-8,5}, -{23,-8,6}, -{23,-8,7}, -{23,-8,8}, -{23,-8,9}, -{23,-8,10}, -{23,-8,11}, -{23,-8,12}, -{23,-8,13}, -{23,-8,14}, -{23,-8,15}, -{23,-8,16}, -{23,-8,17}, -{23,-8,18}, -{23,-8,19}, -{23,-8,20}, -{23,-8,21}, -{23,-8,22}, -{23,-8,23}, -{23,-8,24}, -{23,-8,25}, -{23,-8,26}, -{23,-8,27}, -{23,-8,28}, -{23,-8,29}, -{23,-8,30}, -{23,-8,31}, -{23,-7,-19}, -{23,-7,-18}, -{23,-7,-17}, -{23,-7,-16}, -{23,-7,-15}, -{23,-7,-14}, -{23,-7,-13}, -{23,-7,-12}, -{23,-7,-11}, -{23,-7,-10}, -{23,-7,-9}, -{23,-7,-8}, -{23,-7,-7}, -{23,-7,-6}, -{23,-7,-5}, -{23,-7,-4}, -{23,-7,-3}, -{23,-7,-2}, -{23,-7,-1}, -{23,-7,0}, -{23,-7,1}, -{23,-7,2}, -{23,-7,3}, -{23,-7,4}, -{23,-7,5}, -{23,-7,6}, -{23,-7,7}, -{23,-7,8}, -{23,-7,9}, -{23,-7,10}, -{23,-7,11}, -{23,-7,12}, -{23,-7,13}, -{23,-7,14}, -{23,-7,15}, -{23,-7,16}, -{23,-7,17}, -{23,-7,18}, -{23,-7,19}, -{23,-7,20}, -{23,-7,21}, -{23,-7,22}, -{23,-7,23}, -{23,-7,24}, -{23,-7,25}, -{23,-7,26}, -{23,-7,27}, -{23,-7,28}, -{23,-7,29}, -{23,-7,30}, -{23,-7,31}, -{23,-6,-21}, -{23,-6,-20}, -{23,-6,-19}, -{23,-6,-18}, -{23,-6,-17}, -{23,-6,-16}, -{23,-6,-15}, -{23,-6,-14}, -{23,-6,-13}, -{23,-6,-12}, -{23,-6,-11}, -{23,-6,-10}, -{23,-6,-9}, -{23,-6,-8}, -{23,-6,-7}, -{23,-6,-6}, -{23,-6,-5}, -{23,-6,-4}, -{23,-6,-3}, -{23,-6,-2}, -{23,-6,-1}, -{23,-6,0}, -{23,-6,1}, -{23,-6,2}, -{23,-6,3}, -{23,-6,4}, -{23,-6,5}, -{23,-6,6}, -{23,-6,7}, -{23,-6,8}, -{23,-6,9}, -{23,-6,10}, -{23,-6,11}, -{23,-6,12}, -{23,-6,13}, -{23,-6,14}, -{23,-6,15}, -{23,-6,16}, -{23,-6,17}, -{23,-6,18}, -{23,-6,19}, -{23,-6,20}, -{23,-6,21}, -{23,-6,22}, -{23,-6,23}, -{23,-6,24}, -{23,-6,25}, -{23,-6,26}, -{23,-6,27}, -{23,-6,28}, -{23,-6,29}, -{23,-6,30}, -{23,-6,31}, -{23,-5,-22}, -{23,-5,-21}, -{23,-5,-20}, -{23,-5,-19}, -{23,-5,-18}, -{23,-5,-17}, -{23,-5,-16}, -{23,-5,-15}, -{23,-5,-14}, -{23,-5,-13}, -{23,-5,-12}, -{23,-5,-11}, -{23,-5,-10}, -{23,-5,-9}, -{23,-5,-8}, -{23,-5,-7}, -{23,-5,-6}, -{23,-5,-5}, -{23,-5,-4}, -{23,-5,-3}, -{23,-5,-2}, -{23,-5,-1}, -{23,-5,0}, -{23,-5,1}, -{23,-5,2}, -{23,-5,3}, -{23,-5,4}, -{23,-5,5}, -{23,-5,6}, -{23,-5,7}, -{23,-5,8}, -{23,-5,9}, -{23,-5,10}, -{23,-5,11}, -{23,-5,12}, -{23,-5,13}, -{23,-5,14}, -{23,-5,15}, -{23,-5,16}, -{23,-5,17}, -{23,-5,18}, -{23,-5,19}, -{23,-5,20}, -{23,-5,21}, -{23,-5,22}, -{23,-5,23}, -{23,-5,24}, -{23,-5,25}, -{23,-5,26}, -{23,-5,27}, -{23,-5,28}, -{23,-5,29}, -{23,-5,30}, -{23,-5,31}, -{23,-4,-23}, -{23,-4,-22}, -{23,-4,-21}, -{23,-4,-20}, -{23,-4,-19}, -{23,-4,-18}, -{23,-4,-17}, -{23,-4,-16}, -{23,-4,-15}, -{23,-4,-14}, -{23,-4,-13}, -{23,-4,-12}, -{23,-4,-11}, -{23,-4,-10}, -{23,-4,-9}, -{23,-4,-8}, -{23,-4,-7}, -{23,-4,-6}, -{23,-4,-5}, -{23,-4,-4}, -{23,-4,-3}, -{23,-4,-2}, -{23,-4,-1}, -{23,-4,0}, -{23,-4,1}, -{23,-4,2}, -{23,-4,3}, -{23,-4,4}, -{23,-4,5}, -{23,-4,6}, -{23,-4,7}, -{23,-4,8}, -{23,-4,9}, -{23,-4,10}, -{23,-4,11}, -{23,-4,12}, -{23,-4,13}, -{23,-4,14}, -{23,-4,15}, -{23,-4,16}, -{23,-4,17}, -{23,-4,18}, -{23,-4,19}, -{23,-4,20}, -{23,-4,21}, -{23,-4,22}, -{23,-4,23}, -{23,-4,24}, -{23,-4,25}, -{23,-4,26}, -{23,-4,27}, -{23,-4,28}, -{23,-4,29}, -{23,-4,30}, -{23,-4,31}, -{23,-3,-24}, -{23,-3,-23}, -{23,-3,-22}, -{23,-3,-21}, -{23,-3,-20}, -{23,-3,-19}, -{23,-3,-18}, -{23,-3,-17}, -{23,-3,-16}, -{23,-3,-15}, -{23,-3,-14}, -{23,-3,-13}, -{23,-3,-12}, -{23,-3,-11}, -{23,-3,-10}, -{23,-3,-9}, -{23,-3,-8}, -{23,-3,-7}, -{23,-3,-6}, -{23,-3,-5}, -{23,-3,-4}, -{23,-3,-3}, -{23,-3,-2}, -{23,-3,-1}, -{23,-3,0}, -{23,-3,1}, -{23,-3,2}, -{23,-3,3}, -{23,-3,4}, -{23,-3,5}, -{23,-3,6}, -{23,-3,7}, -{23,-3,8}, -{23,-3,9}, -{23,-3,10}, -{23,-3,11}, -{23,-3,12}, -{23,-3,13}, -{23,-3,14}, -{23,-3,15}, -{23,-3,16}, -{23,-3,17}, -{23,-3,18}, -{23,-3,19}, -{23,-3,20}, -{23,-3,21}, -{23,-3,22}, -{23,-3,23}, -{23,-3,24}, -{23,-3,25}, -{23,-3,26}, -{23,-3,27}, -{23,-3,28}, -{23,-3,29}, -{23,-3,30}, -{23,-3,31}, -{23,-2,-25}, -{23,-2,-24}, -{23,-2,-23}, -{23,-2,-22}, -{23,-2,-21}, -{23,-2,-20}, -{23,-2,-19}, -{23,-2,-18}, -{23,-2,-17}, -{23,-2,-16}, -{23,-2,-15}, -{23,-2,-14}, -{23,-2,-13}, -{23,-2,-12}, -{23,-2,-11}, -{23,-2,-10}, -{23,-2,-9}, -{23,-2,-8}, -{23,-2,-7}, -{23,-2,-6}, -{23,-2,-5}, -{23,-2,-4}, -{23,-2,-3}, -{23,-2,-2}, -{23,-2,-1}, -{23,-2,0}, -{23,-2,1}, -{23,-2,2}, -{23,-2,3}, -{23,-2,4}, -{23,-2,5}, -{23,-2,6}, -{23,-2,7}, -{23,-2,8}, -{23,-2,9}, -{23,-2,10}, -{23,-2,11}, -{23,-2,12}, -{23,-2,13}, -{23,-2,14}, -{23,-2,15}, -{23,-2,16}, -{23,-2,17}, -{23,-2,18}, -{23,-2,19}, -{23,-2,20}, -{23,-2,21}, -{23,-2,22}, -{23,-2,23}, -{23,-2,24}, -{23,-2,25}, -{23,-2,26}, -{23,-2,27}, -{23,-2,28}, -{23,-2,29}, -{23,-2,30}, -{23,-2,31}, -{23,-1,-27}, -{23,-1,-26}, -{23,-1,-25}, -{23,-1,-24}, -{23,-1,-23}, -{23,-1,-22}, -{23,-1,-21}, -{23,-1,-20}, -{23,-1,-19}, -{23,-1,-18}, -{23,-1,-17}, -{23,-1,-16}, -{23,-1,-15}, -{23,-1,-14}, -{23,-1,-13}, -{23,-1,-12}, -{23,-1,-11}, -{23,-1,-10}, -{23,-1,-9}, -{23,-1,-8}, -{23,-1,-7}, -{23,-1,-6}, -{23,-1,-5}, -{23,-1,-4}, -{23,-1,-3}, -{23,-1,-2}, -{23,-1,-1}, -{23,-1,0}, -{23,-1,1}, -{23,-1,2}, -{23,-1,3}, -{23,-1,4}, -{23,-1,5}, -{23,-1,6}, -{23,-1,7}, -{23,-1,8}, -{23,-1,9}, -{23,-1,10}, -{23,-1,11}, -{23,-1,12}, -{23,-1,13}, -{23,-1,14}, -{23,-1,15}, -{23,-1,16}, -{23,-1,17}, -{23,-1,18}, -{23,-1,19}, -{23,-1,20}, -{23,-1,21}, -{23,-1,22}, -{23,-1,23}, -{23,-1,24}, -{23,-1,25}, -{23,-1,26}, -{23,-1,27}, -{23,-1,28}, -{23,-1,29}, -{23,-1,30}, -{23,-1,31}, -{23,-1,32}, -{23,0,-28}, -{23,0,-27}, -{23,0,-26}, -{23,0,-25}, -{23,0,-24}, -{23,0,-23}, -{23,0,-22}, -{23,0,-21}, -{23,0,-20}, -{23,0,-19}, -{23,0,-18}, -{23,0,-17}, -{23,0,-16}, -{23,0,-15}, -{23,0,-14}, -{23,0,-13}, -{23,0,-12}, -{23,0,-11}, -{23,0,-10}, -{23,0,-9}, -{23,0,-8}, -{23,0,-7}, -{23,0,-6}, -{23,0,-5}, -{23,0,-4}, -{23,0,-3}, -{23,0,-2}, -{23,0,-1}, -{23,0,0}, -{23,0,1}, -{23,0,2}, -{23,0,3}, -{23,0,4}, -{23,0,5}, -{23,0,6}, -{23,0,7}, -{23,0,8}, -{23,0,9}, -{23,0,10}, -{23,0,11}, -{23,0,12}, -{23,0,13}, -{23,0,14}, -{23,0,15}, -{23,0,16}, -{23,0,17}, -{23,0,18}, -{23,0,19}, -{23,0,20}, -{23,0,21}, -{23,0,22}, -{23,0,23}, -{23,0,24}, -{23,0,25}, -{23,0,26}, -{23,0,27}, -{23,0,28}, -{23,0,29}, -{23,0,30}, -{23,0,31}, -{23,0,32}, -{23,1,-29}, -{23,1,-28}, -{23,1,-27}, -{23,1,-26}, -{23,1,-25}, -{23,1,-24}, -{23,1,-23}, -{23,1,-22}, -{23,1,-21}, -{23,1,-20}, -{23,1,-19}, -{23,1,-18}, -{23,1,-17}, -{23,1,-16}, -{23,1,-15}, -{23,1,-14}, -{23,1,-13}, -{23,1,-12}, -{23,1,-11}, -{23,1,-10}, -{23,1,-9}, -{23,1,-8}, -{23,1,-7}, -{23,1,-6}, -{23,1,-5}, -{23,1,-4}, -{23,1,-3}, -{23,1,-2}, -{23,1,-1}, -{23,1,0}, -{23,1,1}, -{23,1,2}, -{23,1,3}, -{23,1,4}, -{23,1,5}, -{23,1,6}, -{23,1,7}, -{23,1,8}, -{23,1,9}, -{23,1,10}, -{23,1,11}, -{23,1,12}, -{23,1,13}, -{23,1,14}, -{23,1,15}, -{23,1,16}, -{23,1,17}, -{23,1,18}, -{23,1,19}, -{23,1,20}, -{23,1,21}, -{23,1,22}, -{23,1,23}, -{23,1,24}, -{23,1,25}, -{23,1,26}, -{23,1,27}, -{23,1,28}, -{23,1,29}, -{23,1,30}, -{23,1,31}, -{23,1,32}, -{23,2,-30}, -{23,2,-29}, -{23,2,-28}, -{23,2,-27}, -{23,2,-26}, -{23,2,-25}, -{23,2,-24}, -{23,2,-23}, -{23,2,-22}, -{23,2,-21}, -{23,2,-20}, -{23,2,-19}, -{23,2,-18}, -{23,2,-17}, -{23,2,-16}, -{23,2,-15}, -{23,2,-14}, -{23,2,-13}, -{23,2,-12}, -{23,2,-11}, -{23,2,-10}, -{23,2,-9}, -{23,2,-8}, -{23,2,-7}, -{23,2,-6}, -{23,2,-5}, -{23,2,-4}, -{23,2,-3}, -{23,2,-2}, -{23,2,-1}, -{23,2,0}, -{23,2,1}, -{23,2,2}, -{23,2,3}, -{23,2,4}, -{23,2,5}, -{23,2,6}, -{23,2,7}, -{23,2,8}, -{23,2,9}, -{23,2,10}, -{23,2,11}, -{23,2,12}, -{23,2,13}, -{23,2,14}, -{23,2,15}, -{23,2,16}, -{23,2,17}, -{23,2,18}, -{23,2,19}, -{23,2,20}, -{23,2,21}, -{23,2,22}, -{23,2,23}, -{23,2,24}, -{23,2,25}, -{23,2,26}, -{23,2,27}, -{23,2,28}, -{23,2,29}, -{23,2,30}, -{23,2,31}, -{23,2,32}, -{23,3,-31}, -{23,3,-30}, -{23,3,-29}, -{23,3,-28}, -{23,3,-27}, -{23,3,-26}, -{23,3,-25}, -{23,3,-24}, -{23,3,-23}, -{23,3,-22}, -{23,3,-21}, -{23,3,-20}, -{23,3,-19}, -{23,3,-18}, -{23,3,-17}, -{23,3,-16}, -{23,3,-15}, -{23,3,-14}, -{23,3,-13}, -{23,3,-12}, -{23,3,-11}, -{23,3,-10}, -{23,3,-9}, -{23,3,-8}, -{23,3,-7}, -{23,3,-6}, -{23,3,-5}, -{23,3,-4}, -{23,3,-3}, -{23,3,-2}, -{23,3,-1}, -{23,3,0}, -{23,3,1}, -{23,3,2}, -{23,3,3}, -{23,3,4}, -{23,3,5}, -{23,3,6}, -{23,3,7}, -{23,3,8}, -{23,3,9}, -{23,3,10}, -{23,3,11}, -{23,3,12}, -{23,3,13}, -{23,3,14}, -{23,3,15}, -{23,3,16}, -{23,3,17}, -{23,3,18}, -{23,3,19}, -{23,3,20}, -{23,3,21}, -{23,3,22}, -{23,3,23}, -{23,3,24}, -{23,3,25}, -{23,3,26}, -{23,3,27}, -{23,3,28}, -{23,3,29}, -{23,3,30}, -{23,3,31}, -{23,3,32}, -{23,4,-32}, -{23,4,-31}, -{23,4,-30}, -{23,4,-29}, -{23,4,-28}, -{23,4,-27}, -{23,4,-26}, -{23,4,-25}, -{23,4,-24}, -{23,4,-23}, -{23,4,-22}, -{23,4,-21}, -{23,4,-20}, -{23,4,-19}, -{23,4,-18}, -{23,4,-17}, -{23,4,-16}, -{23,4,-15}, -{23,4,-14}, -{23,4,-13}, -{23,4,-12}, -{23,4,-11}, -{23,4,-10}, -{23,4,-9}, -{23,4,-8}, -{23,4,-7}, -{23,4,-6}, -{23,4,-5}, -{23,4,-4}, -{23,4,-3}, -{23,4,-2}, -{23,4,-1}, -{23,4,0}, -{23,4,1}, -{23,4,2}, -{23,4,3}, -{23,4,4}, -{23,4,5}, -{23,4,6}, -{23,4,7}, -{23,4,8}, -{23,4,9}, -{23,4,10}, -{23,4,11}, -{23,4,12}, -{23,4,13}, -{23,4,14}, -{23,4,15}, -{23,4,16}, -{23,4,17}, -{23,4,18}, -{23,4,19}, -{23,4,20}, -{23,4,21}, -{23,4,22}, -{23,4,23}, -{23,4,24}, -{23,4,25}, -{23,4,26}, -{23,4,27}, -{23,4,28}, -{23,4,29}, -{23,4,30}, -{23,4,31}, -{23,4,32}, -{23,5,-33}, -{23,5,-32}, -{23,5,-31}, -{23,5,-30}, -{23,5,-29}, -{23,5,-28}, -{23,5,-27}, -{23,5,-26}, -{23,5,-25}, -{23,5,-24}, -{23,5,-23}, -{23,5,-22}, -{23,5,-21}, -{23,5,-20}, -{23,5,-19}, -{23,5,-18}, -{23,5,-17}, -{23,5,-16}, -{23,5,-15}, -{23,5,-14}, -{23,5,-13}, -{23,5,-12}, -{23,5,-11}, -{23,5,-10}, -{23,5,-9}, -{23,5,-8}, -{23,5,-7}, -{23,5,-6}, -{23,5,-5}, -{23,5,-4}, -{23,5,-3}, -{23,5,-2}, -{23,5,-1}, -{23,5,0}, -{23,5,1}, -{23,5,2}, -{23,5,3}, -{23,5,4}, -{23,5,5}, -{23,5,6}, -{23,5,7}, -{23,5,8}, -{23,5,9}, -{23,5,10}, -{23,5,11}, -{23,5,12}, -{23,5,13}, -{23,5,14}, -{23,5,15}, -{23,5,16}, -{23,5,17}, -{23,5,18}, -{23,5,19}, -{23,5,20}, -{23,5,21}, -{23,5,22}, -{23,5,23}, -{23,5,24}, -{23,5,25}, -{23,5,26}, -{23,5,27}, -{23,5,28}, -{23,5,29}, -{23,5,30}, -{23,5,31}, -{23,5,32}, -{23,6,-34}, -{23,6,-33}, -{23,6,-32}, -{23,6,-31}, -{23,6,-30}, -{23,6,-29}, -{23,6,-28}, -{23,6,-27}, -{23,6,-26}, -{23,6,-25}, -{23,6,-24}, -{23,6,-23}, -{23,6,-22}, -{23,6,-21}, -{23,6,-20}, -{23,6,-19}, -{23,6,-18}, -{23,6,-17}, -{23,6,-16}, -{23,6,-15}, -{23,6,-14}, -{23,6,-13}, -{23,6,-12}, -{23,6,-11}, -{23,6,-10}, -{23,6,-9}, -{23,6,-8}, -{23,6,-7}, -{23,6,-6}, -{23,6,-5}, -{23,6,-4}, -{23,6,-3}, -{23,6,-2}, -{23,6,-1}, -{23,6,0}, -{23,6,1}, -{23,6,2}, -{23,6,3}, -{23,6,4}, -{23,6,5}, -{23,6,6}, -{23,6,7}, -{23,6,8}, -{23,6,9}, -{23,6,10}, -{23,6,11}, -{23,6,12}, -{23,6,13}, -{23,6,14}, -{23,6,15}, -{23,6,16}, -{23,6,17}, -{23,6,18}, -{23,6,19}, -{23,6,20}, -{23,6,21}, -{23,6,22}, -{23,6,23}, -{23,6,24}, -{23,6,25}, -{23,6,26}, -{23,6,27}, -{23,6,28}, -{23,6,29}, -{23,6,30}, -{23,6,31}, -{23,6,32}, -{23,7,-35}, -{23,7,-34}, -{23,7,-33}, -{23,7,-32}, -{23,7,-31}, -{23,7,-30}, -{23,7,-29}, -{23,7,-28}, -{23,7,-27}, -{23,7,-26}, -{23,7,-25}, -{23,7,-24}, -{23,7,-23}, -{23,7,-22}, -{23,7,-21}, -{23,7,-20}, -{23,7,-19}, -{23,7,-18}, -{23,7,-17}, -{23,7,-16}, -{23,7,-15}, -{23,7,-14}, -{23,7,-13}, -{23,7,-12}, -{23,7,-11}, -{23,7,-10}, -{23,7,-9}, -{23,7,-8}, -{23,7,-7}, -{23,7,-6}, -{23,7,-5}, -{23,7,-4}, -{23,7,-3}, -{23,7,-2}, -{23,7,-1}, -{23,7,0}, -{23,7,1}, -{23,7,2}, -{23,7,3}, -{23,7,4}, -{23,7,5}, -{23,7,6}, -{23,7,7}, -{23,7,8}, -{23,7,9}, -{23,7,10}, -{23,7,11}, -{23,7,12}, -{23,7,13}, -{23,7,14}, -{23,7,15}, -{23,7,16}, -{23,7,17}, -{23,7,18}, -{23,7,19}, -{23,7,20}, -{23,7,21}, -{23,7,22}, -{23,7,23}, -{23,7,24}, -{23,7,25}, -{23,7,26}, -{23,7,27}, -{23,7,28}, -{23,7,29}, -{23,7,30}, -{23,7,31}, -{23,7,32}, -{23,8,-36}, -{23,8,-35}, -{23,8,-34}, -{23,8,-33}, -{23,8,-32}, -{23,8,-31}, -{23,8,-30}, -{23,8,-29}, -{23,8,-28}, -{23,8,-27}, -{23,8,-26}, -{23,8,-25}, -{23,8,-24}, -{23,8,-23}, -{23,8,-22}, -{23,8,-21}, -{23,8,-20}, -{23,8,-19}, -{23,8,-18}, -{23,8,-17}, -{23,8,-16}, -{23,8,-15}, -{23,8,-14}, -{23,8,-13}, -{23,8,-12}, -{23,8,-11}, -{23,8,-10}, -{23,8,-9}, -{23,8,-8}, -{23,8,-7}, -{23,8,-6}, -{23,8,-5}, -{23,8,-4}, -{23,8,-3}, -{23,8,-2}, -{23,8,-1}, -{23,8,0}, -{23,8,1}, -{23,8,2}, -{23,8,3}, -{23,8,4}, -{23,8,5}, -{23,8,6}, -{23,8,7}, -{23,8,8}, -{23,8,9}, -{23,8,10}, -{23,8,11}, -{23,8,12}, -{23,8,13}, -{23,8,14}, -{23,8,15}, -{23,8,16}, -{23,8,17}, -{23,8,18}, -{23,8,19}, -{23,8,20}, -{23,8,21}, -{23,8,22}, -{23,8,23}, -{23,8,24}, -{23,8,25}, -{23,8,26}, -{23,8,27}, -{23,8,28}, -{23,8,29}, -{23,8,30}, -{23,8,31}, -{23,8,32}, -{23,9,-37}, -{23,9,-36}, -{23,9,-35}, -{23,9,-34}, -{23,9,-33}, -{23,9,-32}, -{23,9,-31}, -{23,9,-30}, -{23,9,-29}, -{23,9,-28}, -{23,9,-27}, -{23,9,-26}, -{23,9,-25}, -{23,9,-24}, -{23,9,-23}, -{23,9,-22}, -{23,9,-21}, -{23,9,-20}, -{23,9,-19}, -{23,9,-18}, -{23,9,-17}, -{23,9,-16}, -{23,9,-15}, -{23,9,-14}, -{23,9,-13}, -{23,9,-12}, -{23,9,-11}, -{23,9,-10}, -{23,9,-9}, -{23,9,-8}, -{23,9,-7}, -{23,9,-6}, -{23,9,-5}, -{23,9,-4}, -{23,9,-3}, -{23,9,-2}, -{23,9,-1}, -{23,9,0}, -{23,9,1}, -{23,9,2}, -{23,9,3}, -{23,9,4}, -{23,9,5}, -{23,9,6}, -{23,9,7}, -{23,9,8}, -{23,9,9}, -{23,9,10}, -{23,9,11}, -{23,9,12}, -{23,9,13}, -{23,9,14}, -{23,9,15}, -{23,9,16}, -{23,9,17}, -{23,9,18}, -{23,9,19}, -{23,9,20}, -{23,9,21}, -{23,9,22}, -{23,9,23}, -{23,9,24}, -{23,9,25}, -{23,9,26}, -{23,9,27}, -{23,9,28}, -{23,9,29}, -{23,9,30}, -{23,9,31}, -{23,9,32}, -{23,10,-38}, -{23,10,-37}, -{23,10,-36}, -{23,10,-35}, -{23,10,-34}, -{23,10,-33}, -{23,10,-32}, -{23,10,-31}, -{23,10,-30}, -{23,10,-29}, -{23,10,-28}, -{23,10,-27}, -{23,10,-26}, -{23,10,-25}, -{23,10,-24}, -{23,10,-23}, -{23,10,-22}, -{23,10,-21}, -{23,10,-20}, -{23,10,-19}, -{23,10,-18}, -{23,10,-17}, -{23,10,-16}, -{23,10,-15}, -{23,10,-14}, -{23,10,-13}, -{23,10,-12}, -{23,10,-11}, -{23,10,-10}, -{23,10,-9}, -{23,10,-8}, -{23,10,-7}, -{23,10,-6}, -{23,10,-5}, -{23,10,-4}, -{23,10,-3}, -{23,10,-2}, -{23,10,-1}, -{23,10,0}, -{23,10,1}, -{23,10,2}, -{23,10,3}, -{23,10,4}, -{23,10,5}, -{23,10,6}, -{23,10,7}, -{23,10,8}, -{23,10,9}, -{23,10,10}, -{23,10,11}, -{23,10,12}, -{23,10,13}, -{23,10,14}, -{23,10,15}, -{23,10,16}, -{23,10,17}, -{23,10,18}, -{23,10,19}, -{23,10,20}, -{23,10,21}, -{23,10,22}, -{23,10,23}, -{23,10,24}, -{23,10,25}, -{23,10,26}, -{23,10,27}, -{23,10,28}, -{23,10,29}, -{23,10,30}, -{23,10,31}, -{23,10,32}, -{23,11,-39}, -{23,11,-38}, -{23,11,-37}, -{23,11,-36}, -{23,11,-35}, -{23,11,-34}, -{23,11,-33}, -{23,11,-32}, -{23,11,-31}, -{23,11,-30}, -{23,11,-29}, -{23,11,-28}, -{23,11,-27}, -{23,11,-26}, -{23,11,-25}, -{23,11,-24}, -{23,11,-23}, -{23,11,-22}, -{23,11,-21}, -{23,11,-20}, -{23,11,-19}, -{23,11,-18}, -{23,11,-17}, -{23,11,-16}, -{23,11,-15}, -{23,11,-14}, -{23,11,-13}, -{23,11,-12}, -{23,11,-11}, -{23,11,-10}, -{23,11,-9}, -{23,11,-8}, -{23,11,-7}, -{23,11,-6}, -{23,11,-5}, -{23,11,-4}, -{23,11,-3}, -{23,11,-2}, -{23,11,-1}, -{23,11,0}, -{23,11,1}, -{23,11,2}, -{23,11,3}, -{23,11,4}, -{23,11,5}, -{23,11,6}, -{23,11,7}, -{23,11,8}, -{23,11,9}, -{23,11,10}, -{23,11,11}, -{23,11,12}, -{23,11,13}, -{23,11,14}, -{23,11,15}, -{23,11,16}, -{23,11,17}, -{23,11,18}, -{23,11,19}, -{23,11,20}, -{23,11,21}, -{23,11,22}, -{23,11,23}, -{23,11,24}, -{23,11,25}, -{23,11,26}, -{23,11,27}, -{23,11,28}, -{23,11,29}, -{23,11,30}, -{23,11,31}, -{23,11,32}, -{23,12,-40}, -{23,12,-39}, -{23,12,-38}, -{23,12,-37}, -{23,12,-36}, -{23,12,-35}, -{23,12,-34}, -{23,12,-33}, -{23,12,-32}, -{23,12,-31}, -{23,12,-30}, -{23,12,-29}, -{23,12,-28}, -{23,12,-27}, -{23,12,-26}, -{23,12,-25}, -{23,12,-24}, -{23,12,-23}, -{23,12,-22}, -{23,12,-21}, -{23,12,-20}, -{23,12,-19}, -{23,12,-18}, -{23,12,-17}, -{23,12,-16}, -{23,12,-15}, -{23,12,-14}, -{23,12,-13}, -{23,12,-12}, -{23,12,-11}, -{23,12,-10}, -{23,12,-9}, -{23,12,-8}, -{23,12,-7}, -{23,12,-6}, -{23,12,-5}, -{23,12,-4}, -{23,12,-3}, -{23,12,-2}, -{23,12,-1}, -{23,12,0}, -{23,12,1}, -{23,12,2}, -{23,12,3}, -{23,12,4}, -{23,12,5}, -{23,12,6}, -{23,12,7}, -{23,12,8}, -{23,12,9}, -{23,12,10}, -{23,12,11}, -{23,12,12}, -{23,12,13}, -{23,12,14}, -{23,12,15}, -{23,12,16}, -{23,12,17}, -{23,12,18}, -{23,12,19}, -{23,12,20}, -{23,12,21}, -{23,12,22}, -{23,12,23}, -{23,12,24}, -{23,12,25}, -{23,12,26}, -{23,12,27}, -{23,12,28}, -{23,12,29}, -{23,12,30}, -{23,12,31}, -{23,12,32}, -{23,13,-41}, -{23,13,-40}, -{23,13,-39}, -{23,13,-38}, -{23,13,-37}, -{23,13,-36}, -{23,13,-35}, -{23,13,-34}, -{23,13,-33}, -{23,13,-32}, -{23,13,-31}, -{23,13,-30}, -{23,13,-29}, -{23,13,-28}, -{23,13,-27}, -{23,13,-26}, -{23,13,-25}, -{23,13,-24}, -{23,13,-23}, -{23,13,-22}, -{23,13,-21}, -{23,13,-20}, -{23,13,-19}, -{23,13,-18}, -{23,13,-17}, -{23,13,-16}, -{23,13,-15}, -{23,13,-14}, -{23,13,-13}, -{23,13,-12}, -{23,13,-11}, -{23,13,-10}, -{23,13,-9}, -{23,13,-8}, -{23,13,-7}, -{23,13,-6}, -{23,13,-5}, -{23,13,-4}, -{23,13,-3}, -{23,13,-2}, -{23,13,-1}, -{23,13,0}, -{23,13,1}, -{23,13,2}, -{23,13,3}, -{23,13,4}, -{23,13,5}, -{23,13,6}, -{23,13,7}, -{23,13,8}, -{23,13,9}, -{23,13,10}, -{23,13,11}, -{23,13,12}, -{23,13,13}, -{23,13,14}, -{23,13,15}, -{23,13,16}, -{23,13,17}, -{23,13,18}, -{23,13,19}, -{23,13,20}, -{23,13,21}, -{23,13,22}, -{23,13,23}, -{23,13,24}, -{23,13,25}, -{23,13,26}, -{23,13,27}, -{23,13,28}, -{23,13,29}, -{23,13,30}, -{23,13,31}, -{23,13,32}, -{23,14,-42}, -{23,14,-41}, -{23,14,-40}, -{23,14,-39}, -{23,14,-38}, -{23,14,-37}, -{23,14,-36}, -{23,14,-35}, -{23,14,-34}, -{23,14,-33}, -{23,14,-32}, -{23,14,-31}, -{23,14,-30}, -{23,14,-29}, -{23,14,-28}, -{23,14,-27}, -{23,14,-26}, -{23,14,-25}, -{23,14,-24}, -{23,14,-23}, -{23,14,-22}, -{23,14,-21}, -{23,14,-20}, -{23,14,-19}, -{23,14,-18}, -{23,14,-17}, -{23,14,-16}, -{23,14,-15}, -{23,14,-14}, -{23,14,-13}, -{23,14,-12}, -{23,14,-11}, -{23,14,-10}, -{23,14,-9}, -{23,14,-8}, -{23,14,-7}, -{23,14,-6}, -{23,14,-5}, -{23,14,-4}, -{23,14,-3}, -{23,14,-2}, -{23,14,-1}, -{23,14,0}, -{23,14,1}, -{23,14,2}, -{23,14,3}, -{23,14,4}, -{23,14,5}, -{23,14,6}, -{23,14,7}, -{23,14,8}, -{23,14,9}, -{23,14,10}, -{23,14,11}, -{23,14,12}, -{23,14,13}, -{23,14,14}, -{23,14,15}, -{23,14,16}, -{23,14,17}, -{23,14,18}, -{23,14,19}, -{23,14,20}, -{23,14,21}, -{23,14,22}, -{23,14,23}, -{23,14,24}, -{23,14,25}, -{23,14,26}, -{23,14,27}, -{23,14,28}, -{23,14,29}, -{23,14,30}, -{23,14,31}, -{23,14,32}, -{23,15,-43}, -{23,15,-42}, -{23,15,-41}, -{23,15,-40}, -{23,15,-39}, -{23,15,-38}, -{23,15,-37}, -{23,15,-36}, -{23,15,-35}, -{23,15,-34}, -{23,15,-33}, -{23,15,-32}, -{23,15,-31}, -{23,15,-30}, -{23,15,-29}, -{23,15,-28}, -{23,15,-27}, -{23,15,-26}, -{23,15,-25}, -{23,15,-24}, -{23,15,-23}, -{23,15,-22}, -{23,15,-21}, -{23,15,-20}, -{23,15,-19}, -{23,15,-18}, -{23,15,-17}, -{23,15,-16}, -{23,15,-15}, -{23,15,-14}, -{23,15,-13}, -{23,15,-12}, -{23,15,-11}, -{23,15,-10}, -{23,15,-9}, -{23,15,-8}, -{23,15,-7}, -{23,15,-6}, -{23,15,-5}, -{23,15,-4}, -{23,15,-3}, -{23,15,-2}, -{23,15,-1}, -{23,15,0}, -{23,15,1}, -{23,15,2}, -{23,15,3}, -{23,15,4}, -{23,15,5}, -{23,15,6}, -{23,15,7}, -{23,15,8}, -{23,15,9}, -{23,15,10}, -{23,15,11}, -{23,15,12}, -{23,15,13}, -{23,15,14}, -{23,15,15}, -{23,15,16}, -{23,15,17}, -{23,15,18}, -{23,15,19}, -{23,15,20}, -{23,15,21}, -{23,15,22}, -{23,15,23}, -{23,15,24}, -{23,15,25}, -{23,15,26}, -{23,15,27}, -{23,15,28}, -{23,15,29}, -{23,15,30}, -{23,15,31}, -{23,15,32}, -{23,16,-44}, -{23,16,-43}, -{23,16,-42}, -{23,16,-41}, -{23,16,-40}, -{23,16,-39}, -{23,16,-38}, -{23,16,-37}, -{23,16,-36}, -{23,16,-35}, -{23,16,-34}, -{23,16,-33}, -{23,16,-32}, -{23,16,-31}, -{23,16,-30}, -{23,16,-29}, -{23,16,-28}, -{23,16,-27}, -{23,16,-26}, -{23,16,-25}, -{23,16,-24}, -{23,16,-23}, -{23,16,-22}, -{23,16,-21}, -{23,16,-20}, -{23,16,-19}, -{23,16,-18}, -{23,16,-17}, -{23,16,-16}, -{23,16,-15}, -{23,16,-14}, -{23,16,-13}, -{23,16,-12}, -{23,16,-11}, -{23,16,-10}, -{23,16,-9}, -{23,16,-8}, -{23,16,-7}, -{23,16,-6}, -{23,16,-5}, -{23,16,-4}, -{23,16,-3}, -{23,16,-2}, -{23,16,-1}, -{23,16,0}, -{23,16,1}, -{23,16,2}, -{23,16,3}, -{23,16,4}, -{23,16,5}, -{23,16,6}, -{23,16,7}, -{23,16,8}, -{23,16,9}, -{23,16,10}, -{23,16,11}, -{23,16,12}, -{23,16,13}, -{23,16,14}, -{23,16,15}, -{23,16,16}, -{23,16,17}, -{23,16,18}, -{23,16,19}, -{23,16,20}, -{23,16,21}, -{23,16,22}, -{23,16,23}, -{23,16,24}, -{23,16,25}, -{23,16,26}, -{23,16,27}, -{23,16,28}, -{23,16,29}, -{23,16,30}, -{23,16,31}, -{23,16,32}, -{23,17,-45}, -{23,17,-44}, -{23,17,-43}, -{23,17,-42}, -{23,17,-41}, -{23,17,-40}, -{23,17,-39}, -{23,17,-38}, -{23,17,-37}, -{23,17,-36}, -{23,17,-35}, -{23,17,-34}, -{23,17,-33}, -{23,17,-32}, -{23,17,-31}, -{23,17,-30}, -{23,17,-29}, -{23,17,-28}, -{23,17,-27}, -{23,17,-26}, -{23,17,-25}, -{23,17,-24}, -{23,17,-23}, -{23,17,-22}, -{23,17,-21}, -{23,17,-20}, -{23,17,-19}, -{23,17,-18}, -{23,17,-17}, -{23,17,-16}, -{23,17,-15}, -{23,17,-14}, -{23,17,-13}, -{23,17,-12}, -{23,17,-11}, -{23,17,-10}, -{23,17,-9}, -{23,17,-8}, -{23,17,-7}, -{23,17,-6}, -{23,17,-5}, -{23,17,-4}, -{23,17,-3}, -{23,17,-2}, -{23,17,-1}, -{23,17,0}, -{23,17,1}, -{23,17,2}, -{23,17,3}, -{23,17,4}, -{23,17,5}, -{23,17,6}, -{23,17,7}, -{23,17,8}, -{23,17,9}, -{23,17,10}, -{23,17,11}, -{23,17,12}, -{23,17,13}, -{23,17,14}, -{23,17,15}, -{23,17,16}, -{23,17,17}, -{23,17,18}, -{23,17,19}, -{23,17,20}, -{23,17,21}, -{23,17,22}, -{23,17,23}, -{23,17,24}, -{23,17,25}, -{23,17,26}, -{23,17,27}, -{23,17,28}, -{23,17,29}, -{23,17,30}, -{23,17,31}, -{23,17,32}, -{23,18,-46}, -{23,18,-45}, -{23,18,-44}, -{23,18,-43}, -{23,18,-42}, -{23,18,-41}, -{23,18,-40}, -{23,18,-39}, -{23,18,-38}, -{23,18,-37}, -{23,18,-36}, -{23,18,-35}, -{23,18,-34}, -{23,18,-33}, -{23,18,-32}, -{23,18,-31}, -{23,18,-30}, -{23,18,-29}, -{23,18,-28}, -{23,18,-27}, -{23,18,-26}, -{23,18,-25}, -{23,18,-24}, -{23,18,-23}, -{23,18,-22}, -{23,18,-21}, -{23,18,-20}, -{23,18,-19}, -{23,18,-18}, -{23,18,-17}, -{23,18,-16}, -{23,18,-15}, -{23,18,-14}, -{23,18,-13}, -{23,18,-12}, -{23,18,-11}, -{23,18,-10}, -{23,18,-9}, -{23,18,-8}, -{23,18,-7}, -{23,18,-6}, -{23,18,-5}, -{23,18,-4}, -{23,18,-3}, -{23,18,-2}, -{23,18,-1}, -{23,18,0}, -{23,18,1}, -{23,18,2}, -{23,18,3}, -{23,18,4}, -{23,18,5}, -{23,18,6}, -{23,18,7}, -{23,18,8}, -{23,18,9}, -{23,18,10}, -{23,18,11}, -{23,18,12}, -{23,18,13}, -{23,18,14}, -{23,18,15}, -{23,18,16}, -{23,18,17}, -{23,18,18}, -{23,18,19}, -{23,18,20}, -{23,18,21}, -{23,18,22}, -{23,18,23}, -{23,18,24}, -{23,18,25}, -{23,18,26}, -{23,18,27}, -{23,18,28}, -{23,18,29}, -{23,18,30}, -{23,18,31}, -{23,18,32}, -{23,18,33}, -{23,19,-47}, -{23,19,-46}, -{23,19,-45}, -{23,19,-44}, -{23,19,-43}, -{23,19,-42}, -{23,19,-41}, -{23,19,-40}, -{23,19,-39}, -{23,19,-38}, -{23,19,-37}, -{23,19,-36}, -{23,19,-35}, -{23,19,-34}, -{23,19,-33}, -{23,19,-32}, -{23,19,-31}, -{23,19,-30}, -{23,19,-29}, -{23,19,-28}, -{23,19,-27}, -{23,19,-26}, -{23,19,-25}, -{23,19,-24}, -{23,19,-23}, -{23,19,-22}, -{23,19,-21}, -{23,19,-20}, -{23,19,-19}, -{23,19,-18}, -{23,19,-17}, -{23,19,-16}, -{23,19,-15}, -{23,19,-14}, -{23,19,-13}, -{23,19,-12}, -{23,19,-11}, -{23,19,-10}, -{23,19,-9}, -{23,19,-8}, -{23,19,-7}, -{23,19,-6}, -{23,19,-5}, -{23,19,-4}, -{23,19,-3}, -{23,19,-2}, -{23,19,-1}, -{23,19,0}, -{23,19,1}, -{23,19,2}, -{23,19,3}, -{23,19,4}, -{23,19,5}, -{23,19,6}, -{23,19,7}, -{23,19,8}, -{23,19,9}, -{23,19,10}, -{23,19,11}, -{23,19,12}, -{23,19,13}, -{23,19,14}, -{23,19,15}, -{23,19,16}, -{23,19,17}, -{23,19,18}, -{23,19,19}, -{23,19,20}, -{23,19,21}, -{23,19,22}, -{23,19,23}, -{23,19,24}, -{23,19,25}, -{23,19,26}, -{23,19,27}, -{23,19,28}, -{23,19,29}, -{23,19,30}, -{23,19,31}, -{23,19,32}, -{23,19,33}, -{23,20,-48}, -{23,20,-47}, -{23,20,-46}, -{23,20,-45}, -{23,20,-44}, -{23,20,-43}, -{23,20,-42}, -{23,20,-41}, -{23,20,-40}, -{23,20,-39}, -{23,20,-38}, -{23,20,-37}, -{23,20,-36}, -{23,20,-35}, -{23,20,-34}, -{23,20,-33}, -{23,20,-32}, -{23,20,-31}, -{23,20,-30}, -{23,20,-29}, -{23,20,-28}, -{23,20,-27}, -{23,20,-26}, -{23,20,-25}, -{23,20,-24}, -{23,20,-23}, -{23,20,-22}, -{23,20,-21}, -{23,20,-20}, -{23,20,-19}, -{23,20,-18}, -{23,20,-17}, -{23,20,-16}, -{23,20,-15}, -{23,20,-14}, -{23,20,-13}, -{23,20,-12}, -{23,20,-11}, -{23,20,-10}, -{23,20,-9}, -{23,20,-8}, -{23,20,-7}, -{23,20,-6}, -{23,20,-5}, -{23,20,-4}, -{23,20,-3}, -{23,20,-2}, -{23,20,-1}, -{23,20,0}, -{23,20,1}, -{23,20,2}, -{23,20,3}, -{23,20,4}, -{23,20,5}, -{23,20,6}, -{23,20,7}, -{23,20,8}, -{23,20,9}, -{23,20,10}, -{23,20,11}, -{23,20,12}, -{23,20,13}, -{23,20,14}, -{23,20,15}, -{23,20,16}, -{23,20,17}, -{23,20,18}, -{23,20,19}, -{23,20,20}, -{23,20,21}, -{23,20,22}, -{23,20,23}, -{23,20,24}, -{23,20,25}, -{23,20,26}, -{23,20,27}, -{23,20,28}, -{23,20,29}, -{23,20,30}, -{23,20,31}, -{23,20,32}, -{23,20,33}, -{23,21,-49}, -{23,21,-48}, -{23,21,-47}, -{23,21,-46}, -{23,21,-45}, -{23,21,-44}, -{23,21,-43}, -{23,21,-42}, -{23,21,-41}, -{23,21,-40}, -{23,21,-39}, -{23,21,-38}, -{23,21,-37}, -{23,21,-36}, -{23,21,-35}, -{23,21,-34}, -{23,21,-33}, -{23,21,-32}, -{23,21,-31}, -{23,21,-30}, -{23,21,-29}, -{23,21,-28}, -{23,21,-27}, -{23,21,-26}, -{23,21,-25}, -{23,21,-24}, -{23,21,-23}, -{23,21,-22}, -{23,21,-21}, -{23,21,-20}, -{23,21,-19}, -{23,21,-18}, -{23,21,-17}, -{23,21,-16}, -{23,21,-15}, -{23,21,-14}, -{23,21,-13}, -{23,21,-12}, -{23,21,-11}, -{23,21,-10}, -{23,21,-9}, -{23,21,-8}, -{23,21,-7}, -{23,21,-6}, -{23,21,-5}, -{23,21,-4}, -{23,21,-3}, -{23,21,-2}, -{23,21,-1}, -{23,21,0}, -{23,21,1}, -{23,21,2}, -{23,21,3}, -{23,21,4}, -{23,21,5}, -{23,21,6}, -{23,21,7}, -{23,21,8}, -{23,21,9}, -{23,21,10}, -{23,21,11}, -{23,21,12}, -{23,21,13}, -{23,21,14}, -{23,21,15}, -{23,21,16}, -{23,21,17}, -{23,21,18}, -{23,21,19}, -{23,21,20}, -{23,21,21}, -{23,21,22}, -{23,21,23}, -{23,21,24}, -{23,21,25}, -{23,21,26}, -{23,21,27}, -{23,21,28}, -{23,21,29}, -{23,21,30}, -{23,21,31}, -{23,21,32}, -{23,21,33}, -{23,22,-50}, -{23,22,-49}, -{23,22,-48}, -{23,22,-47}, -{23,22,-46}, -{23,22,-45}, -{23,22,-44}, -{23,22,-43}, -{23,22,-42}, -{23,22,-41}, -{23,22,-40}, -{23,22,-39}, -{23,22,-38}, -{23,22,-37}, -{23,22,-36}, -{23,22,-35}, -{23,22,-34}, -{23,22,-33}, -{23,22,-32}, -{23,22,-31}, -{23,22,-30}, -{23,22,-29}, -{23,22,-28}, -{23,22,-27}, -{23,22,-26}, -{23,22,-25}, -{23,22,-24}, -{23,22,-23}, -{23,22,-22}, -{23,22,-21}, -{23,22,-20}, -{23,22,-19}, -{23,22,-18}, -{23,22,-17}, -{23,22,-16}, -{23,22,-15}, -{23,22,-14}, -{23,22,-13}, -{23,22,-12}, -{23,22,-11}, -{23,22,-10}, -{23,22,-9}, -{23,22,-8}, -{23,22,-7}, -{23,22,-6}, -{23,22,-5}, -{23,22,-4}, -{23,22,-3}, -{23,22,-2}, -{23,22,-1}, -{23,22,0}, -{23,22,1}, -{23,22,2}, -{23,22,3}, -{23,22,4}, -{23,22,5}, -{23,22,6}, -{23,22,7}, -{23,22,8}, -{23,22,9}, -{23,22,10}, -{23,22,11}, -{23,22,12}, -{23,22,13}, -{23,22,14}, -{23,22,15}, -{23,22,16}, -{23,22,17}, -{23,22,18}, -{23,22,19}, -{23,22,20}, -{23,22,21}, -{23,22,22}, -{23,22,23}, -{23,22,24}, -{23,22,25}, -{23,22,26}, -{23,22,27}, -{23,22,28}, -{23,22,29}, -{23,22,30}, -{23,22,31}, -{23,22,32}, -{23,22,33}, -{23,23,-51}, -{23,23,-50}, -{23,23,-49}, -{23,23,-48}, -{23,23,-47}, -{23,23,-46}, -{23,23,-45}, -{23,23,-44}, -{23,23,-43}, -{23,23,-42}, -{23,23,-41}, -{23,23,-40}, -{23,23,-39}, -{23,23,-38}, -{23,23,-37}, -{23,23,-36}, -{23,23,-35}, -{23,23,-34}, -{23,23,-33}, -{23,23,-32}, -{23,23,-31}, -{23,23,-30}, -{23,23,-29}, -{23,23,-28}, -{23,23,-27}, -{23,23,-26}, -{23,23,-25}, -{23,23,-24}, -{23,23,-23}, -{23,23,-22}, -{23,23,-21}, -{23,23,-20}, -{23,23,-19}, -{23,23,-18}, -{23,23,-17}, -{23,23,-16}, -{23,23,-15}, -{23,23,-14}, -{23,23,-13}, -{23,23,-12}, -{23,23,-11}, -{23,23,-10}, -{23,23,-9}, -{23,23,-8}, -{23,23,-7}, -{23,23,-6}, -{23,23,-5}, -{23,23,-4}, -{23,23,-3}, -{23,23,-2}, -{23,23,-1}, -{23,23,0}, -{23,23,1}, -{23,23,2}, -{23,23,3}, -{23,23,4}, -{23,23,5}, -{23,23,6}, -{23,23,7}, -{23,23,8}, -{23,23,9}, -{23,23,10}, -{23,23,11}, -{23,23,12}, -{23,23,13}, -{23,23,14}, -{23,23,15}, -{23,23,16}, -{23,23,17}, -{23,23,18}, -{23,23,19}, -{23,23,20}, -{23,23,21}, -{23,23,22}, -{23,23,23}, -{23,23,24}, -{23,23,25}, -{23,23,26}, -{23,23,27}, -{23,23,28}, -{23,23,29}, -{23,23,30}, -{23,23,31}, -{23,23,32}, -{23,23,33}, -{23,24,-52}, -{23,24,-51}, -{23,24,-50}, -{23,24,-49}, -{23,24,-48}, -{23,24,-47}, -{23,24,-46}, -{23,24,-45}, -{23,24,-44}, -{23,24,-43}, -{23,24,-42}, -{23,24,-41}, -{23,24,-40}, -{23,24,-39}, -{23,24,-38}, -{23,24,-37}, -{23,24,-36}, -{23,24,-35}, -{23,24,-34}, -{23,24,-33}, -{23,24,-32}, -{23,24,-31}, -{23,24,-30}, -{23,24,-29}, -{23,24,-28}, -{23,24,-27}, -{23,24,-26}, -{23,24,-25}, -{23,24,-24}, -{23,24,-23}, -{23,24,-22}, -{23,24,-21}, -{23,24,-20}, -{23,24,-19}, -{23,24,-18}, -{23,24,-17}, -{23,24,-16}, -{23,24,-15}, -{23,24,-14}, -{23,24,-13}, -{23,24,-12}, -{23,24,-11}, -{23,24,-10}, -{23,24,-9}, -{23,24,-8}, -{23,24,-7}, -{23,24,-6}, -{23,24,-5}, -{23,24,-4}, -{23,24,-3}, -{23,24,-2}, -{23,24,-1}, -{23,24,0}, -{23,24,1}, -{23,24,2}, -{23,24,3}, -{23,24,4}, -{23,24,5}, -{23,24,6}, -{23,24,7}, -{23,24,8}, -{23,24,9}, -{23,24,10}, -{23,24,11}, -{23,24,12}, -{23,24,13}, -{23,24,14}, -{23,24,15}, -{23,24,16}, -{23,24,17}, -{23,24,18}, -{23,24,19}, -{23,24,20}, -{23,24,21}, -{23,24,22}, -{23,24,23}, -{23,24,24}, -{23,24,25}, -{23,24,26}, -{23,24,27}, -{23,24,28}, -{23,24,29}, -{23,24,30}, -{23,24,31}, -{23,24,32}, -{23,24,33}, -{23,25,-53}, -{23,25,-52}, -{23,25,-51}, -{23,25,-50}, -{23,25,-49}, -{23,25,-48}, -{23,25,-47}, -{23,25,-46}, -{23,25,-45}, -{23,25,-44}, -{23,25,-43}, -{23,25,-42}, -{23,25,-41}, -{23,25,-40}, -{23,25,-39}, -{23,25,-38}, -{23,25,-37}, -{23,25,-36}, -{23,25,-35}, -{23,25,-34}, -{23,25,-33}, -{23,25,-32}, -{23,25,-31}, -{23,25,-30}, -{23,25,-29}, -{23,25,-28}, -{23,25,-27}, -{23,25,-26}, -{23,25,-25}, -{23,25,-24}, -{23,25,-23}, -{23,25,-22}, -{23,25,-21}, -{23,25,-20}, -{23,25,-19}, -{23,25,-18}, -{23,25,-17}, -{23,25,-16}, -{23,25,-15}, -{23,25,-14}, -{23,25,-13}, -{23,25,-12}, -{23,25,-11}, -{23,25,-10}, -{23,25,-9}, -{23,25,-8}, -{23,25,-7}, -{23,25,-6}, -{23,25,-5}, -{23,25,-4}, -{23,25,-3}, -{23,25,-2}, -{23,25,-1}, -{23,25,0}, -{23,25,1}, -{23,25,2}, -{23,25,3}, -{23,25,4}, -{23,25,5}, -{23,25,6}, -{23,25,7}, -{23,25,8}, -{23,25,9}, -{23,25,10}, -{23,25,11}, -{23,25,12}, -{23,25,13}, -{23,25,14}, -{23,25,15}, -{23,25,16}, -{23,25,17}, -{23,25,18}, -{23,25,19}, -{23,25,20}, -{23,25,21}, -{23,25,22}, -{23,25,23}, -{23,25,24}, -{23,25,25}, -{23,25,26}, -{23,25,27}, -{23,25,28}, -{23,25,29}, -{23,25,30}, -{23,25,31}, -{23,25,32}, -{23,25,33}, -{23,26,-54}, -{23,26,-53}, -{23,26,-52}, -{23,26,-51}, -{23,26,-50}, -{23,26,-49}, -{23,26,-48}, -{23,26,-47}, -{23,26,-46}, -{23,26,-45}, -{23,26,-44}, -{23,26,-43}, -{23,26,-42}, -{23,26,-41}, -{23,26,-40}, -{23,26,-39}, -{23,26,-38}, -{23,26,-37}, -{23,26,-36}, -{23,26,-35}, -{23,26,-34}, -{23,26,-33}, -{23,26,-32}, -{23,26,-31}, -{23,26,-30}, -{23,26,-29}, -{23,26,-28}, -{23,26,-27}, -{23,26,-26}, -{23,26,-25}, -{23,26,-24}, -{23,26,-23}, -{23,26,-22}, -{23,26,-21}, -{23,26,-20}, -{23,26,-19}, -{23,26,-18}, -{23,26,-17}, -{23,26,-16}, -{23,26,-15}, -{23,26,-14}, -{23,26,-13}, -{23,26,-12}, -{23,26,-11}, -{23,26,-10}, -{23,26,-9}, -{23,26,-8}, -{23,26,-7}, -{23,26,-6}, -{23,26,-5}, -{23,26,-4}, -{23,26,-3}, -{23,26,-2}, -{23,26,-1}, -{23,26,0}, -{23,26,1}, -{23,26,2}, -{23,26,3}, -{23,26,4}, -{23,26,5}, -{23,26,6}, -{23,26,7}, -{23,26,8}, -{23,26,9}, -{23,26,10}, -{23,26,11}, -{23,26,12}, -{23,26,13}, -{23,26,14}, -{23,26,15}, -{23,26,16}, -{23,26,17}, -{23,26,18}, -{23,26,19}, -{23,26,20}, -{23,26,21}, -{23,26,22}, -{23,26,23}, -{23,26,24}, -{23,26,25}, -{23,26,26}, -{23,26,27}, -{23,26,28}, -{23,26,29}, -{23,26,30}, -{23,26,31}, -{23,26,32}, -{23,26,33}, -{23,27,-55}, -{23,27,-54}, -{23,27,-53}, -{23,27,-52}, -{23,27,-51}, -{23,27,-50}, -{23,27,-49}, -{23,27,-48}, -{23,27,-47}, -{23,27,-46}, -{23,27,-45}, -{23,27,-44}, -{23,27,-43}, -{23,27,-42}, -{23,27,-41}, -{23,27,-40}, -{23,27,-39}, -{23,27,-38}, -{23,27,-37}, -{23,27,-36}, -{23,27,-35}, -{23,27,-34}, -{23,27,-33}, -{23,27,-32}, -{23,27,-31}, -{23,27,-30}, -{23,27,-29}, -{23,27,-28}, -{23,27,-27}, -{23,27,-26}, -{23,27,-25}, -{23,27,-24}, -{23,27,-23}, -{23,27,-22}, -{23,27,-21}, -{23,27,-20}, -{23,27,-19}, -{23,27,-18}, -{23,27,-17}, -{23,27,-16}, -{23,27,-15}, -{23,27,-14}, -{23,27,-13}, -{23,27,-12}, -{23,27,-11}, -{23,27,-10}, -{23,27,-9}, -{23,27,-8}, -{23,27,-7}, -{23,27,-6}, -{23,27,-5}, -{23,27,-4}, -{23,27,-3}, -{23,27,-2}, -{23,27,-1}, -{23,27,0}, -{23,27,1}, -{23,27,2}, -{23,27,3}, -{23,27,4}, -{23,27,5}, -{23,27,6}, -{23,27,7}, -{23,27,8}, -{23,27,9}, -{23,27,10}, -{23,27,11}, -{23,27,12}, -{23,27,13}, -{23,27,14}, -{23,27,15}, -{23,27,16}, -{23,27,17}, -{23,27,18}, -{23,27,19}, -{23,27,20}, -{23,27,21}, -{23,27,22}, -{23,27,23}, -{23,27,24}, -{23,27,25}, -{23,27,26}, -{23,27,27}, -{23,27,28}, -{23,27,29}, -{23,27,30}, -{23,27,31}, -{23,27,32}, -{23,27,33}, -{23,28,-56}, -{23,28,-55}, -{23,28,-54}, -{23,28,-53}, -{23,28,-52}, -{23,28,-51}, -{23,28,-50}, -{23,28,-49}, -{23,28,-48}, -{23,28,-47}, -{23,28,-46}, -{23,28,-45}, -{23,28,-44}, -{23,28,-43}, -{23,28,-42}, -{23,28,-41}, -{23,28,-40}, -{23,28,-39}, -{23,28,-38}, -{23,28,-37}, -{23,28,-36}, -{23,28,-35}, -{23,28,-34}, -{23,28,-33}, -{23,28,-32}, -{23,28,-31}, -{23,28,-30}, -{23,28,-29}, -{23,28,-28}, -{23,28,-27}, -{23,28,-26}, -{23,28,-25}, -{23,28,-24}, -{23,28,-23}, -{23,28,-22}, -{23,28,-21}, -{23,28,-20}, -{23,28,-19}, -{23,28,-18}, -{23,28,-17}, -{23,28,-16}, -{23,28,-15}, -{23,28,-14}, -{23,28,-13}, -{23,28,-12}, -{23,28,-11}, -{23,28,-10}, -{23,28,-9}, -{23,28,-8}, -{23,28,-7}, -{23,28,-6}, -{23,28,-5}, -{23,28,-4}, -{23,28,-3}, -{23,28,-2}, -{23,28,-1}, -{23,28,0}, -{23,28,1}, -{23,28,2}, -{23,28,3}, -{23,28,4}, -{23,28,5}, -{23,28,6}, -{23,28,7}, -{23,28,8}, -{23,28,9}, -{23,28,10}, -{23,28,11}, -{23,28,12}, -{23,28,13}, -{23,28,14}, -{23,28,15}, -{23,28,16}, -{23,28,17}, -{23,28,18}, -{23,28,19}, -{23,28,20}, -{23,28,21}, -{23,28,22}, -{23,28,23}, -{23,28,24}, -{23,28,25}, -{23,28,26}, -{23,28,27}, -{23,28,28}, -{23,28,29}, -{23,28,30}, -{23,28,31}, -{23,28,32}, -{23,28,33}, -{23,29,-57}, -{23,29,-56}, -{23,29,-55}, -{23,29,-54}, -{23,29,-53}, -{23,29,-52}, -{23,29,-51}, -{23,29,-50}, -{23,29,-49}, -{23,29,-48}, -{23,29,-47}, -{23,29,-46}, -{23,29,-45}, -{23,29,-44}, -{23,29,-43}, -{23,29,-42}, -{23,29,-41}, -{23,29,-40}, -{23,29,-39}, -{23,29,-38}, -{23,29,-37}, -{23,29,-36}, -{23,29,-35}, -{23,29,-34}, -{23,29,-33}, -{23,29,-32}, -{23,29,-31}, -{23,29,-30}, -{23,29,-29}, -{23,29,-28}, -{23,29,-27}, -{23,29,-26}, -{23,29,-25}, -{23,29,-24}, -{23,29,-23}, -{23,29,-22}, -{23,29,-21}, -{23,29,-20}, -{23,29,-19}, -{23,29,-18}, -{23,29,-17}, -{23,29,-16}, -{23,29,-15}, -{23,29,-14}, -{23,29,-13}, -{23,29,-12}, -{23,29,-11}, -{23,29,-10}, -{23,29,-9}, -{23,29,-8}, -{23,29,-7}, -{23,29,-6}, -{23,29,-5}, -{23,29,-4}, -{23,29,-3}, -{23,29,-2}, -{23,29,-1}, -{23,29,0}, -{23,29,1}, -{23,29,2}, -{23,29,3}, -{23,29,4}, -{23,29,5}, -{23,29,6}, -{23,29,7}, -{23,29,8}, -{23,29,9}, -{23,29,10}, -{23,29,11}, -{23,29,12}, -{23,29,13}, -{23,29,14}, -{23,29,15}, -{23,29,16}, -{23,29,17}, -{23,29,18}, -{23,29,19}, -{23,29,20}, -{23,29,21}, -{23,29,22}, -{23,29,23}, -{23,29,24}, -{23,29,25}, -{23,29,26}, -{23,29,27}, -{23,29,28}, -{23,29,29}, -{23,29,30}, -{23,29,31}, -{23,29,32}, -{23,29,33}, -{23,30,-58}, -{23,30,-57}, -{23,30,-56}, -{23,30,-55}, -{23,30,-54}, -{23,30,-53}, -{23,30,-52}, -{23,30,-51}, -{23,30,-50}, -{23,30,-49}, -{23,30,-48}, -{23,30,-47}, -{23,30,-46}, -{23,30,-45}, -{23,30,-44}, -{23,30,-43}, -{23,30,-42}, -{23,30,-41}, -{23,30,-40}, -{23,30,-39}, -{23,30,-38}, -{23,30,-37}, -{23,30,-36}, -{23,30,-35}, -{23,30,-34}, -{23,30,-33}, -{23,30,-32}, -{23,30,-31}, -{23,30,-30}, -{23,30,-29}, -{23,30,-28}, -{23,30,-27}, -{23,30,-26}, -{23,30,-25}, -{23,30,-24}, -{23,30,-23}, -{23,30,-22}, -{23,30,-21}, -{23,30,-20}, -{23,30,-19}, -{23,30,-18}, -{23,30,-17}, -{23,30,-16}, -{23,30,-15}, -{23,30,-14}, -{23,30,-13}, -{23,30,-12}, -{23,30,-11}, -{23,30,-10}, -{23,30,-9}, -{23,30,-8}, -{23,30,-7}, -{23,30,-6}, -{23,30,-5}, -{23,30,-4}, -{23,30,-3}, -{23,30,-2}, -{23,30,-1}, -{23,30,0}, -{23,30,1}, -{23,30,2}, -{23,30,3}, -{23,30,4}, -{23,30,5}, -{23,30,6}, -{23,30,7}, -{23,30,8}, -{23,30,9}, -{23,30,10}, -{23,30,11}, -{23,30,12}, -{23,30,13}, -{23,30,14}, -{23,30,15}, -{23,30,16}, -{23,30,17}, -{23,30,18}, -{23,30,19}, -{23,30,20}, -{23,30,21}, -{23,30,22}, -{23,30,23}, -{23,30,24}, -{23,30,25}, -{23,30,26}, -{23,30,27}, -{23,30,28}, -{23,30,29}, -{23,30,30}, -{23,30,31}, -{23,30,32}, -{23,30,33}, -{23,31,-59}, -{23,31,-58}, -{23,31,-57}, -{23,31,-56}, -{23,31,-55}, -{23,31,-54}, -{23,31,-53}, -{23,31,-52}, -{23,31,-51}, -{23,31,-50}, -{23,31,-49}, -{23,31,-48}, -{23,31,-47}, -{23,31,-46}, -{23,31,-45}, -{23,31,-44}, -{23,31,-43}, -{23,31,-42}, -{23,31,-41}, -{23,31,-40}, -{23,31,-39}, -{23,31,-38}, -{23,31,-37}, -{23,31,-36}, -{23,31,-35}, -{23,31,-34}, -{23,31,-33}, -{23,31,-32}, -{23,31,-31}, -{23,31,-30}, -{23,31,-29}, -{23,31,-28}, -{23,31,-27}, -{23,31,-26}, -{23,31,-25}, -{23,31,-24}, -{23,31,-23}, -{23,31,-22}, -{23,31,-21}, -{23,31,-20}, -{23,31,-19}, -{23,31,-18}, -{23,31,-17}, -{23,31,-16}, -{23,31,-15}, -{23,31,-14}, -{23,31,-13}, -{23,31,-12}, -{23,31,-11}, -{23,31,-10}, -{23,31,-9}, -{23,31,-8}, -{23,31,-7}, -{23,31,-6}, -{23,31,-5}, -{23,31,-4}, -{23,31,-3}, -{23,31,-2}, -{23,31,-1}, -{23,31,0}, -{23,31,1}, -{23,31,2}, -{23,31,3}, -{23,31,4}, -{23,31,5}, -{23,31,6}, -{23,31,7}, -{23,31,8}, -{23,31,9}, -{23,31,10}, -{23,31,11}, -{23,31,12}, -{23,31,13}, -{23,31,14}, -{23,31,15}, -{23,31,16}, -{23,31,17}, -{23,31,18}, -{23,31,19}, -{23,31,20}, -{23,31,21}, -{23,31,22}, -{23,31,23}, -{23,31,24}, -{23,31,25}, -{23,31,26}, -{23,31,27}, -{23,31,28}, -{23,31,29}, -{23,31,30}, -{23,31,31}, -{23,31,32}, -{23,31,33}, -{23,32,-59}, -{23,32,-58}, -{23,32,-57}, -{23,32,-56}, -{23,32,-55}, -{23,32,-54}, -{23,32,-53}, -{23,32,-52}, -{23,32,-51}, -{23,32,-50}, -{23,32,-49}, -{23,32,-48}, -{23,32,-47}, -{23,32,-46}, -{23,32,-45}, -{23,32,-44}, -{23,32,-43}, -{23,32,-42}, -{23,32,-41}, -{23,32,-40}, -{23,32,-39}, -{23,32,-38}, -{23,32,-37}, -{23,32,-36}, -{23,32,-35}, -{23,32,-34}, -{23,32,-33}, -{23,32,-32}, -{23,32,-31}, -{23,32,-30}, -{23,32,-29}, -{23,32,-28}, -{23,32,-27}, -{23,32,-26}, -{23,32,-25}, -{23,32,-24}, -{23,32,-23}, -{23,32,-22}, -{23,32,-21}, -{23,32,-20}, -{23,32,-19}, -{23,32,-18}, -{23,32,-17}, -{23,32,-16}, -{23,32,-15}, -{23,32,-14}, -{23,32,-13}, -{23,32,-12}, -{23,32,-11}, -{23,32,-10}, -{23,32,-9}, -{23,32,-8}, -{23,32,-7}, -{23,32,-6}, -{23,32,-5}, -{23,32,-4}, -{23,32,-3}, -{23,32,-2}, -{23,32,-1}, -{23,32,0}, -{23,32,1}, -{23,32,2}, -{23,32,3}, -{23,32,4}, -{23,32,5}, -{23,32,6}, -{23,32,7}, -{23,32,8}, -{23,32,9}, -{23,32,10}, -{23,32,11}, -{23,32,12}, -{23,32,13}, -{23,32,14}, -{23,32,15}, -{23,32,16}, -{23,32,17}, -{23,32,18}, -{23,32,19}, -{23,32,20}, -{23,32,21}, -{23,32,22}, -{23,32,23}, -{23,32,24}, -{23,32,25}, -{23,32,26}, -{23,32,27}, -{23,32,28}, -{23,32,29}, -{23,32,30}, -{23,32,31}, -{23,32,32}, -{23,32,33}, -{23,33,-60}, -{23,33,-59}, -{23,33,-58}, -{23,33,-57}, -{23,33,-56}, -{23,33,-55}, -{23,33,-54}, -{23,33,-53}, -{23,33,-52}, -{23,33,-51}, -{23,33,-50}, -{23,33,-49}, -{23,33,-48}, -{23,33,-47}, -{23,33,-46}, -{23,33,-45}, -{23,33,-44}, -{23,33,-43}, -{23,33,-42}, -{23,33,-41}, -{23,33,-40}, -{23,33,-39}, -{23,33,-38}, -{23,33,-37}, -{23,33,-36}, -{23,33,-35}, -{23,33,-34}, -{23,33,-33}, -{23,33,-32}, -{23,33,-31}, -{23,33,-30}, -{23,33,-29}, -{23,33,-28}, -{23,33,-27}, -{23,33,-26}, -{23,33,-25}, -{23,33,-24}, -{23,33,-23}, -{23,33,-22}, -{23,33,-21}, -{23,33,-20}, -{23,33,-19}, -{23,33,-18}, -{23,33,-17}, -{23,33,-16}, -{23,33,-15}, -{23,33,-14}, -{23,33,-13}, -{23,33,-12}, -{23,33,-11}, -{23,33,-10}, -{23,33,-9}, -{23,33,-8}, -{23,33,-7}, -{23,33,-6}, -{23,33,-5}, -{23,33,-4}, -{23,33,-3}, -{23,33,-2}, -{23,33,-1}, -{23,33,0}, -{23,33,1}, -{23,33,2}, -{23,33,3}, -{23,33,4}, -{23,33,5}, -{23,33,6}, -{23,33,7}, -{23,33,8}, -{23,33,9}, -{23,33,10}, -{23,33,11}, -{23,33,12}, -{23,33,13}, -{23,33,14}, -{23,33,15}, -{23,33,16}, -{23,33,17}, -{23,33,18}, -{23,33,19}, -{23,33,20}, -{23,33,21}, -{23,33,22}, -{23,33,23}, -{23,33,24}, -{23,33,25}, -{23,33,26}, -{23,33,27}, -{23,33,28}, -{23,33,29}, -{23,33,30}, -{23,33,31}, -{23,33,32}, -{23,33,33}, -{23,33,34}, -{23,34,-61}, -{23,34,-60}, -{23,34,-59}, -{23,34,-58}, -{23,34,-57}, -{23,34,-56}, -{23,34,-55}, -{23,34,-54}, -{23,34,-53}, -{23,34,-52}, -{23,34,-51}, -{23,34,-50}, -{23,34,-49}, -{23,34,-48}, -{23,34,-47}, -{23,34,-46}, -{23,34,-45}, -{23,34,-44}, -{23,34,-43}, -{23,34,-42}, -{23,34,-41}, -{23,34,-40}, -{23,34,-39}, -{23,34,-38}, -{23,34,-37}, -{23,34,-36}, -{23,34,-35}, -{23,34,-34}, -{23,34,-33}, -{23,34,-32}, -{23,34,-31}, -{23,34,-30}, -{23,34,-29}, -{23,34,-28}, -{23,34,-27}, -{23,34,-26}, -{23,34,-25}, -{23,34,-24}, -{23,34,-23}, -{23,34,-22}, -{23,34,-21}, -{23,34,-20}, -{23,34,-19}, -{23,34,-18}, -{23,34,-17}, -{23,34,-16}, -{23,34,-15}, -{23,34,-14}, -{23,34,-13}, -{23,34,-12}, -{23,34,-11}, -{23,34,-10}, -{23,34,-9}, -{23,34,-8}, -{23,34,-7}, -{23,34,-6}, -{23,34,-5}, -{23,34,-4}, -{23,34,-3}, -{23,34,-2}, -{23,34,-1}, -{23,34,0}, -{23,34,1}, -{23,34,2}, -{23,34,3}, -{23,34,4}, -{23,34,5}, -{23,34,6}, -{23,34,7}, -{23,34,8}, -{23,34,9}, -{23,34,10}, -{23,34,11}, -{23,34,12}, -{23,34,13}, -{23,34,14}, -{23,34,15}, -{23,34,16}, -{23,34,17}, -{23,34,18}, -{23,34,19}, -{23,34,20}, -{23,34,21}, -{23,34,22}, -{23,34,23}, -{23,34,24}, -{23,34,25}, -{23,34,26}, -{23,34,27}, -{23,34,28}, -{23,34,29}, -{23,34,30}, -{23,34,31}, -{23,34,32}, -{23,34,33}, -{23,34,34}, -{23,35,-62}, -{23,35,-61}, -{23,35,-60}, -{23,35,-59}, -{23,35,-58}, -{23,35,-57}, -{23,35,-56}, -{23,35,-55}, -{23,35,-54}, -{23,35,-53}, -{23,35,-52}, -{23,35,-51}, -{23,35,-50}, -{23,35,-49}, -{23,35,-48}, -{23,35,-47}, -{23,35,-46}, -{23,35,-45}, -{23,35,-44}, -{23,35,-43}, -{23,35,-42}, -{23,35,-41}, -{23,35,-40}, -{23,35,-39}, -{23,35,-38}, -{23,35,-37}, -{23,35,-36}, -{23,35,-35}, -{23,35,-34}, -{23,35,-33}, -{23,35,-32}, -{23,35,-31}, -{23,35,-30}, -{23,35,-29}, -{23,35,-28}, -{23,35,-27}, -{23,35,-26}, -{23,35,-25}, -{23,35,-24}, -{23,35,-23}, -{23,35,-22}, -{23,35,-21}, -{23,35,-20}, -{23,35,-19}, -{23,35,-18}, -{23,35,-17}, -{23,35,-16}, -{23,35,-15}, -{23,35,-14}, -{23,35,-13}, -{23,35,-12}, -{23,35,-11}, -{23,35,-10}, -{23,35,-9}, -{23,35,-8}, -{23,35,-7}, -{23,35,-6}, -{23,35,-5}, -{23,35,-4}, -{23,35,-3}, -{23,35,-2}, -{23,35,-1}, -{23,35,0}, -{23,35,1}, -{23,35,2}, -{23,35,3}, -{23,35,4}, -{23,35,5}, -{23,35,6}, -{23,35,7}, -{23,35,8}, -{23,35,9}, -{23,35,10}, -{23,35,11}, -{23,35,12}, -{23,35,13}, -{23,35,14}, -{23,35,15}, -{23,35,16}, -{23,35,17}, -{23,35,18}, -{23,35,19}, -{23,35,20}, -{23,35,21}, -{23,35,22}, -{23,35,23}, -{23,35,24}, -{23,35,25}, -{23,35,26}, -{23,35,27}, -{23,35,28}, -{23,35,29}, -{23,35,30}, -{23,35,31}, -{23,35,32}, -{23,35,33}, -{23,35,34}, -{23,36,-63}, -{23,36,-62}, -{23,36,-61}, -{23,36,-60}, -{23,36,-59}, -{23,36,-58}, -{23,36,-57}, -{23,36,-56}, -{23,36,-55}, -{23,36,-54}, -{23,36,-53}, -{23,36,-52}, -{23,36,-51}, -{23,36,-50}, -{23,36,-49}, -{23,36,-48}, -{23,36,-47}, -{23,36,-46}, -{23,36,-45}, -{23,36,-44}, -{23,36,-43}, -{23,36,-42}, -{23,36,-41}, -{23,36,-40}, -{23,36,-39}, -{23,36,-38}, -{23,36,-37}, -{23,36,-36}, -{23,36,-35}, -{23,36,-34}, -{23,36,-33}, -{23,36,-32}, -{23,36,-31}, -{23,36,-30}, -{23,36,-29}, -{23,36,-28}, -{23,36,-27}, -{23,36,-26}, -{23,36,-25}, -{23,36,-24}, -{23,36,-23}, -{23,36,-22}, -{23,36,-21}, -{23,36,-20}, -{23,36,-19}, -{23,36,-18}, -{23,36,-17}, -{23,36,-16}, -{23,36,-15}, -{23,36,-14}, -{23,36,-13}, -{23,36,-12}, -{23,36,-11}, -{23,36,-10}, -{23,36,-9}, -{23,36,-8}, -{23,36,-7}, -{23,36,-6}, -{23,36,-5}, -{23,36,-4}, -{23,36,-3}, -{23,36,-2}, -{23,36,-1}, -{23,36,0}, -{23,36,1}, -{23,36,2}, -{23,36,3}, -{23,36,4}, -{23,36,5}, -{23,36,6}, -{23,36,7}, -{23,36,8}, -{23,36,9}, -{23,36,10}, -{23,36,11}, -{23,36,12}, -{23,36,13}, -{23,36,14}, -{23,36,15}, -{23,36,16}, -{23,36,17}, -{23,36,18}, -{23,36,19}, -{23,36,20}, -{23,36,21}, -{23,36,22}, -{23,36,23}, -{23,36,24}, -{23,36,25}, -{23,36,26}, -{23,36,27}, -{23,36,28}, -{23,36,29}, -{23,36,30}, -{23,36,31}, -{23,36,32}, -{23,36,33}, -{23,36,34}, -{23,37,-64}, -{23,37,-63}, -{23,37,-62}, -{23,37,-61}, -{23,37,-60}, -{23,37,-59}, -{23,37,-58}, -{23,37,-57}, -{23,37,-56}, -{23,37,-55}, -{23,37,-54}, -{23,37,-53}, -{23,37,-52}, -{23,37,-51}, -{23,37,-50}, -{23,37,-49}, -{23,37,-48}, -{23,37,-47}, -{23,37,-46}, -{23,37,-45}, -{23,37,-44}, -{23,37,-43}, -{23,37,-42}, -{23,37,-41}, -{23,37,-40}, -{23,37,-39}, -{23,37,-38}, -{23,37,-37}, -{23,37,-36}, -{23,37,-35}, -{23,37,-34}, -{23,37,-33}, -{23,37,-32}, -{23,37,-31}, -{23,37,-30}, -{23,37,-29}, -{23,37,-28}, -{23,37,-27}, -{23,37,-26}, -{23,37,-25}, -{23,37,-24}, -{23,37,-23}, -{23,37,-22}, -{23,37,-21}, -{23,37,-20}, -{23,37,-19}, -{23,37,-18}, -{23,37,-17}, -{23,37,-16}, -{23,37,-15}, -{23,37,-14}, -{23,37,-13}, -{23,37,-12}, -{23,37,-11}, -{23,37,-10}, -{23,37,-9}, -{23,37,-8}, -{23,37,-7}, -{23,37,-6}, -{23,37,-5}, -{23,37,-4}, -{23,37,-3}, -{23,37,-2}, -{23,37,-1}, -{23,37,0}, -{23,37,1}, -{23,37,2}, -{23,37,3}, -{23,37,4}, -{23,37,5}, -{23,37,6}, -{23,37,7}, -{23,37,8}, -{23,37,9}, -{23,37,10}, -{23,37,11}, -{23,37,12}, -{23,37,13}, -{23,37,14}, -{23,37,15}, -{23,37,16}, -{23,37,17}, -{23,37,18}, -{23,37,19}, -{23,37,20}, -{23,37,21}, -{23,37,22}, -{23,37,23}, -{23,37,24}, -{23,37,25}, -{23,37,26}, -{23,37,27}, -{23,37,28}, -{23,37,29}, -{23,37,30}, -{23,37,31}, -{23,37,32}, -{23,37,33}, -{23,37,34}, -{23,38,-65}, -{23,38,-64}, -{23,38,-63}, -{23,38,-62}, -{23,38,-61}, -{23,38,-60}, -{23,38,-59}, -{23,38,-58}, -{23,38,-57}, -{23,38,-56}, -{23,38,-55}, -{23,38,-54}, -{23,38,-53}, -{23,38,-52}, -{23,38,-51}, -{23,38,-50}, -{23,38,-49}, -{23,38,-48}, -{23,38,-47}, -{23,38,-46}, -{23,38,-45}, -{23,38,-44}, -{23,38,-43}, -{23,38,-42}, -{23,38,-41}, -{23,38,-40}, -{23,38,-39}, -{23,38,-38}, -{23,38,-37}, -{23,38,-36}, -{23,38,-35}, -{23,38,-34}, -{23,38,-33}, -{23,38,-32}, -{23,38,-31}, -{23,38,-30}, -{23,38,-29}, -{23,38,-28}, -{23,38,-27}, -{23,38,-26}, -{23,38,-25}, -{23,38,-24}, -{23,38,-23}, -{23,38,-22}, -{23,38,-21}, -{23,38,-20}, -{23,38,-19}, -{23,38,-18}, -{23,38,-17}, -{23,38,-16}, -{23,38,-15}, -{23,38,-14}, -{23,38,-13}, -{23,38,-12}, -{23,38,-11}, -{23,38,-10}, -{23,38,-9}, -{23,38,-8}, -{23,38,-7}, -{23,38,-6}, -{23,38,-5}, -{23,38,-4}, -{23,38,-3}, -{23,38,-2}, -{23,38,-1}, -{23,38,0}, -{23,38,1}, -{23,38,2}, -{23,38,3}, -{23,38,4}, -{23,38,5}, -{23,38,6}, -{23,38,7}, -{23,38,8}, -{23,38,9}, -{23,38,10}, -{23,38,11}, -{23,38,12}, -{23,38,13}, -{23,38,14}, -{23,38,15}, -{23,38,16}, -{23,38,17}, -{23,38,18}, -{23,38,19}, -{23,38,20}, -{23,38,21}, -{23,38,22}, -{23,38,23}, -{23,38,24}, -{23,38,25}, -{23,38,26}, -{23,38,27}, -{23,38,28}, -{23,38,29}, -{23,38,30}, -{23,38,31}, -{23,38,32}, -{23,38,33}, -{23,38,34}, -{23,39,-66}, -{23,39,-65}, -{23,39,-64}, -{23,39,-63}, -{23,39,-62}, -{23,39,-61}, -{23,39,-60}, -{23,39,-59}, -{23,39,-58}, -{23,39,-57}, -{23,39,-56}, -{23,39,-55}, -{23,39,-54}, -{23,39,-53}, -{23,39,-52}, -{23,39,-51}, -{23,39,-50}, -{23,39,-49}, -{23,39,-48}, -{23,39,-47}, -{23,39,-46}, -{23,39,-45}, -{23,39,-44}, -{23,39,-43}, -{23,39,-42}, -{23,39,-41}, -{23,39,-40}, -{23,39,-39}, -{23,39,-38}, -{23,39,-37}, -{23,39,-36}, -{23,39,-35}, -{23,39,-34}, -{23,39,-33}, -{23,39,-32}, -{23,39,-31}, -{23,39,-30}, -{23,39,-29}, -{23,39,-28}, -{23,39,-27}, -{23,39,-26}, -{23,39,-25}, -{23,39,-24}, -{23,39,-23}, -{23,39,-22}, -{23,39,-21}, -{23,39,-20}, -{23,39,-19}, -{23,39,-18}, -{23,39,-17}, -{23,39,-16}, -{23,39,-15}, -{23,39,-14}, -{23,39,-13}, -{23,39,-12}, -{23,39,-11}, -{23,39,-10}, -{23,39,-9}, -{23,39,-8}, -{23,39,-7}, -{23,39,-6}, -{23,39,-5}, -{23,39,-4}, -{23,39,-3}, -{23,39,-2}, -{23,39,-1}, -{23,39,0}, -{23,39,1}, -{23,39,2}, -{23,39,3}, -{23,39,4}, -{23,39,5}, -{23,39,6}, -{23,39,7}, -{23,39,8}, -{23,39,9}, -{23,39,10}, -{23,39,11}, -{23,39,12}, -{23,39,13}, -{23,39,14}, -{23,39,15}, -{23,39,16}, -{23,39,17}, -{23,39,18}, -{23,39,19}, -{23,39,20}, -{23,39,21}, -{23,39,22}, -{23,39,23}, -{23,39,24}, -{23,39,25}, -{23,39,26}, -{23,39,27}, -{23,39,28}, -{23,39,29}, -{23,39,30}, -{23,39,31}, -{23,39,32}, -{23,39,33}, -{23,39,34}, -{23,40,-67}, -{23,40,-66}, -{23,40,-65}, -{23,40,-64}, -{23,40,-63}, -{23,40,-62}, -{23,40,-61}, -{23,40,-60}, -{23,40,-59}, -{23,40,-58}, -{23,40,-57}, -{23,40,-56}, -{23,40,-55}, -{23,40,-54}, -{23,40,-53}, -{23,40,-52}, -{23,40,-51}, -{23,40,-50}, -{23,40,-49}, -{23,40,-48}, -{23,40,-47}, -{23,40,-46}, -{23,40,-45}, -{23,40,-44}, -{23,40,-43}, -{23,40,-42}, -{23,40,-41}, -{23,40,-40}, -{23,40,-39}, -{23,40,-38}, -{23,40,-37}, -{23,40,-36}, -{23,40,-35}, -{23,40,-34}, -{23,40,-33}, -{23,40,-32}, -{23,40,-31}, -{23,40,-30}, -{23,40,-29}, -{23,40,-28}, -{23,40,-27}, -{23,40,-26}, -{23,40,-25}, -{23,40,-24}, -{23,40,-23}, -{23,40,-22}, -{23,40,-21}, -{23,40,-20}, -{23,40,-19}, -{23,40,-18}, -{23,40,-17}, -{23,40,-16}, -{23,40,-15}, -{23,40,-14}, -{23,40,-13}, -{23,40,-12}, -{23,40,-11}, -{23,40,-10}, -{23,40,-9}, -{23,40,-8}, -{23,40,-7}, -{23,40,-6}, -{23,40,-5}, -{23,40,-4}, -{23,40,-3}, -{23,40,-2}, -{23,40,-1}, -{23,40,0}, -{23,40,1}, -{23,40,2}, -{23,40,3}, -{23,40,4}, -{23,40,5}, -{23,40,6}, -{23,40,7}, -{23,40,8}, -{23,40,9}, -{23,40,10}, -{23,40,11}, -{23,40,12}, -{23,40,13}, -{23,40,14}, -{23,40,15}, -{23,40,16}, -{23,40,17}, -{23,40,18}, -{23,40,19}, -{23,40,20}, -{23,40,21}, -{23,40,22}, -{23,40,23}, -{23,40,24}, -{23,40,25}, -{23,40,26}, -{23,40,27}, -{23,40,28}, -{23,40,29}, -{23,40,30}, -{23,40,31}, -{23,40,32}, -{23,40,33}, -{23,40,34}, -{23,41,-67}, -{23,41,-66}, -{23,41,-65}, -{23,41,-64}, -{23,41,-63}, -{23,41,-62}, -{23,41,-61}, -{23,41,-60}, -{23,41,-59}, -{23,41,-58}, -{23,41,-57}, -{23,41,-56}, -{23,41,-55}, -{23,41,-54}, -{23,41,-53}, -{23,41,-52}, -{23,41,-51}, -{23,41,-50}, -{23,41,-49}, -{23,41,-48}, -{23,41,-47}, -{23,41,-46}, -{23,41,-45}, -{23,41,-44}, -{23,41,-43}, -{23,41,-42}, -{23,41,-41}, -{23,41,-40}, -{23,41,-39}, -{23,41,-38}, -{23,41,-37}, -{23,41,-36}, -{23,41,-35}, -{23,41,-34}, -{23,41,-33}, -{23,41,-32}, -{23,41,-31}, -{23,41,-30}, -{23,41,-29}, -{23,41,-28}, -{23,41,-27}, -{23,41,-26}, -{23,41,-25}, -{23,41,-24}, -{23,41,-23}, -{23,41,-22}, -{23,41,-21}, -{23,41,-20}, -{23,41,-19}, -{23,41,-18}, -{23,41,-17}, -{23,41,-16}, -{23,41,-15}, -{23,41,-14}, -{23,41,-13}, -{23,41,-12}, -{23,41,-11}, -{23,41,-10}, -{23,41,-9}, -{23,41,-8}, -{23,41,-7}, -{23,41,-6}, -{23,41,-5}, -{23,41,-4}, -{23,41,-3}, -{23,41,-2}, -{23,41,-1}, -{23,41,0}, -{23,41,1}, -{23,41,2}, -{23,41,3}, -{23,41,4}, -{23,41,5}, -{23,41,6}, -{23,41,7}, -{23,41,8}, -{23,41,9}, -{23,41,10}, -{23,41,11}, -{23,41,12}, -{23,41,13}, -{23,41,14}, -{23,41,15}, -{23,41,16}, -{23,41,17}, -{23,41,18}, -{23,41,19}, -{23,41,20}, -{23,41,21}, -{23,41,22}, -{23,41,23}, -{23,41,24}, -{23,41,25}, -{23,41,26}, -{23,41,27}, -{23,41,28}, -{23,41,29}, -{23,41,30}, -{23,41,31}, -{23,41,32}, -{23,41,33}, -{23,41,34}, -{23,42,-68}, -{23,42,-67}, -{23,42,-66}, -{23,42,-65}, -{23,42,-64}, -{23,42,-63}, -{23,42,-62}, -{23,42,-61}, -{23,42,-60}, -{23,42,-59}, -{23,42,-58}, -{23,42,-57}, -{23,42,-56}, -{23,42,-55}, -{23,42,-54}, -{23,42,-53}, -{23,42,-52}, -{23,42,-51}, -{23,42,-50}, -{23,42,-49}, -{23,42,-48}, -{23,42,-47}, -{23,42,-46}, -{23,42,-45}, -{23,42,-44}, -{23,42,-43}, -{23,42,-42}, -{23,42,-41}, -{23,42,-40}, -{23,42,-39}, -{23,42,-38}, -{23,42,-37}, -{23,42,-36}, -{23,42,-35}, -{23,42,-34}, -{23,42,-33}, -{23,42,-32}, -{23,42,-31}, -{23,42,-30}, -{23,42,-29}, -{23,42,-28}, -{23,42,-27}, -{23,42,-26}, -{23,42,-25}, -{23,42,-24}, -{23,42,-23}, -{23,42,-22}, -{23,42,-21}, -{23,42,-20}, -{23,42,-19}, -{23,42,-18}, -{23,42,-17}, -{23,42,-16}, -{23,42,-15}, -{23,42,-14}, -{23,42,-13}, -{23,42,-12}, -{23,42,-11}, -{23,42,-10}, -{23,42,-9}, -{23,42,-8}, -{23,42,-7}, -{23,42,-6}, -{23,42,-5}, -{23,42,-4}, -{23,42,-3}, -{23,42,-2}, -{23,42,-1}, -{23,42,0}, -{23,42,1}, -{23,42,2}, -{23,42,3}, -{23,42,4}, -{23,42,5}, -{23,42,6}, -{23,42,7}, -{23,42,8}, -{23,42,9}, -{23,42,10}, -{23,42,11}, -{23,42,12}, -{23,42,13}, -{23,42,14}, -{23,42,15}, -{23,42,16}, -{23,42,17}, -{23,42,18}, -{23,42,19}, -{23,42,20}, -{23,42,21}, -{23,42,22}, -{23,42,23}, -{23,42,24}, -{23,42,25}, -{23,42,26}, -{23,42,27}, -{23,42,28}, -{23,42,29}, -{23,42,30}, -{23,42,31}, -{23,42,32}, -{23,42,33}, -{23,42,34}, -{23,43,-69}, -{23,43,-68}, -{23,43,-67}, -{23,43,-66}, -{23,43,-65}, -{23,43,-64}, -{23,43,-63}, -{23,43,-62}, -{23,43,-61}, -{23,43,-60}, -{23,43,-59}, -{23,43,-58}, -{23,43,-57}, -{23,43,-56}, -{23,43,-55}, -{23,43,-54}, -{23,43,-53}, -{23,43,-52}, -{23,43,-51}, -{23,43,-50}, -{23,43,-49}, -{23,43,-48}, -{23,43,-47}, -{23,43,-46}, -{23,43,-45}, -{23,43,-44}, -{23,43,-43}, -{23,43,-42}, -{23,43,-41}, -{23,43,-40}, -{23,43,-39}, -{23,43,-38}, -{23,43,-37}, -{23,43,-36}, -{23,43,-35}, -{23,43,-34}, -{23,43,-33}, -{23,43,-32}, -{23,43,-31}, -{23,43,-30}, -{23,43,-29}, -{23,43,-28}, -{23,43,-27}, -{23,43,-26}, -{23,43,-25}, -{23,43,-24}, -{23,43,-23}, -{23,43,-22}, -{23,43,-21}, -{23,43,-20}, -{23,43,-19}, -{23,43,-18}, -{23,43,-17}, -{23,43,-16}, -{23,43,-15}, -{23,43,-14}, -{23,43,-13}, -{23,43,-12}, -{23,43,-11}, -{23,43,-10}, -{23,43,-9}, -{23,43,-8}, -{23,43,-7}, -{23,43,-6}, -{23,43,-5}, -{23,43,-4}, -{23,43,-3}, -{23,43,-2}, -{23,43,-1}, -{23,43,0}, -{23,43,1}, -{23,43,2}, -{23,43,3}, -{23,43,4}, -{23,43,5}, -{23,43,6}, -{23,43,7}, -{23,43,8}, -{23,43,9}, -{23,43,10}, -{23,43,11}, -{23,43,12}, -{23,43,13}, -{23,43,14}, -{23,43,15}, -{23,43,16}, -{23,43,17}, -{23,43,18}, -{23,43,19}, -{23,43,20}, -{23,43,21}, -{23,43,22}, -{23,43,23}, -{23,43,24}, -{23,43,25}, -{23,43,26}, -{23,43,27}, -{23,43,28}, -{23,43,29}, -{23,43,30}, -{23,43,31}, -{23,43,32}, -{23,43,33}, -{23,43,34}, -{23,44,-70}, -{23,44,-69}, -{23,44,-68}, -{23,44,-67}, -{23,44,-66}, -{23,44,-65}, -{23,44,-64}, -{23,44,-63}, -{23,44,-62}, -{23,44,-61}, -{23,44,-60}, -{23,44,-59}, -{23,44,-58}, -{23,44,-57}, -{23,44,-56}, -{23,44,-55}, -{23,44,-54}, -{23,44,-53}, -{23,44,-52}, -{23,44,-51}, -{23,44,-50}, -{23,44,-49}, -{23,44,-48}, -{23,44,-47}, -{23,44,-46}, -{23,44,-45}, -{23,44,-44}, -{23,44,-43}, -{23,44,-42}, -{23,44,-41}, -{23,44,-40}, -{23,44,-39}, -{23,44,-38}, -{23,44,-37}, -{23,44,-36}, -{23,44,-35}, -{23,44,-34}, -{23,44,-33}, -{23,44,-32}, -{23,44,-31}, -{23,44,-30}, -{23,44,-29}, -{23,44,-28}, -{23,44,-27}, -{23,44,-26}, -{23,44,-25}, -{23,44,-24}, -{23,44,-23}, -{23,44,-22}, -{23,44,-21}, -{23,44,-20}, -{23,44,-19}, -{23,44,-18}, -{23,44,-17}, -{23,44,-16}, -{23,44,-15}, -{23,44,-14}, -{23,44,-13}, -{23,44,-12}, -{23,44,-11}, -{23,44,-10}, -{23,44,-9}, -{23,44,-8}, -{23,44,-7}, -{23,44,-6}, -{23,44,-5}, -{23,44,-4}, -{23,44,-3}, -{23,44,-2}, -{23,44,-1}, -{23,44,0}, -{23,44,1}, -{23,44,2}, -{23,44,3}, -{23,44,4}, -{23,44,5}, -{23,44,6}, -{23,44,7}, -{23,44,8}, -{23,44,9}, -{23,44,10}, -{23,44,11}, -{23,44,12}, -{23,44,13}, -{23,44,14}, -{23,44,15}, -{23,44,16}, -{23,44,17}, -{23,44,18}, -{23,44,19}, -{23,44,20}, -{23,44,21}, -{23,44,22}, -{23,44,23}, -{23,44,24}, -{23,44,25}, -{23,44,26}, -{23,44,27}, -{23,44,28}, -{23,44,29}, -{23,44,30}, -{23,44,31}, -{23,44,32}, -{23,44,33}, -{23,44,34}, -{23,45,-71}, -{23,45,-70}, -{23,45,-69}, -{23,45,-68}, -{23,45,-67}, -{23,45,-66}, -{23,45,-65}, -{23,45,-64}, -{23,45,-63}, -{23,45,-62}, -{23,45,-61}, -{23,45,-60}, -{23,45,-59}, -{23,45,-58}, -{23,45,-57}, -{23,45,-56}, -{23,45,-55}, -{23,45,-54}, -{23,45,-53}, -{23,45,-52}, -{23,45,-51}, -{23,45,-50}, -{23,45,-49}, -{23,45,-48}, -{23,45,-47}, -{23,45,-46}, -{23,45,-45}, -{23,45,-44}, -{23,45,-43}, -{23,45,-42}, -{23,45,-41}, -{23,45,-40}, -{23,45,-39}, -{23,45,-38}, -{23,45,-37}, -{23,45,-36}, -{23,45,-35}, -{23,45,-34}, -{23,45,-33}, -{23,45,-32}, -{23,45,-31}, -{23,45,-30}, -{23,45,-29}, -{23,45,-28}, -{23,45,-27}, -{23,45,-26}, -{23,45,-25}, -{23,45,-24}, -{23,45,-23}, -{23,45,-22}, -{23,45,-21}, -{23,45,-20}, -{23,45,-19}, -{23,45,-18}, -{23,45,-17}, -{23,45,-16}, -{23,45,-15}, -{23,45,-14}, -{23,45,-13}, -{23,45,-12}, -{23,45,-11}, -{23,45,-10}, -{23,45,-9}, -{23,45,-8}, -{23,45,-7}, -{23,45,-6}, -{23,45,-5}, -{23,45,-4}, -{23,45,-3}, -{23,45,-2}, -{23,45,-1}, -{23,45,0}, -{23,45,1}, -{23,45,2}, -{23,45,3}, -{23,45,4}, -{23,45,5}, -{23,45,6}, -{23,45,7}, -{23,45,8}, -{23,45,9}, -{23,45,10}, -{23,45,11}, -{23,45,12}, -{23,45,13}, -{23,45,14}, -{23,45,15}, -{23,45,16}, -{23,45,17}, -{23,45,18}, -{23,45,19}, -{23,45,20}, -{23,45,21}, -{23,45,22}, -{23,45,23}, -{23,45,24}, -{23,45,25}, -{23,45,26}, -{23,45,27}, -{23,45,28}, -{23,45,29}, -{23,45,30}, -{23,45,31}, -{23,45,32}, -{23,45,33}, -{23,45,34}, -{23,46,-72}, -{23,46,-71}, -{23,46,-70}, -{23,46,-69}, -{23,46,-68}, -{23,46,-67}, -{23,46,-66}, -{23,46,-65}, -{23,46,-64}, -{23,46,-63}, -{23,46,-62}, -{23,46,-61}, -{23,46,-60}, -{23,46,-59}, -{23,46,-58}, -{23,46,-57}, -{23,46,-56}, -{23,46,-55}, -{23,46,-54}, -{23,46,-53}, -{23,46,-52}, -{23,46,-51}, -{23,46,-50}, -{23,46,-49}, -{23,46,-48}, -{23,46,-47}, -{23,46,-46}, -{23,46,-45}, -{23,46,-44}, -{23,46,-43}, -{23,46,-42}, -{23,46,-41}, -{23,46,-40}, -{23,46,-39}, -{23,46,-38}, -{23,46,-37}, -{23,46,-36}, -{23,46,-35}, -{23,46,-34}, -{23,46,-33}, -{23,46,-32}, -{23,46,-31}, -{23,46,-30}, -{23,46,-29}, -{23,46,-28}, -{23,46,-27}, -{23,46,-26}, -{23,46,-25}, -{23,46,-24}, -{23,46,-23}, -{23,46,-22}, -{23,46,-21}, -{23,46,-20}, -{23,46,-19}, -{23,46,-18}, -{23,46,-17}, -{23,46,-16}, -{23,46,-15}, -{23,46,-14}, -{23,46,-13}, -{23,46,-12}, -{23,46,-11}, -{23,46,-10}, -{23,46,-9}, -{23,46,-8}, -{23,46,-7}, -{23,46,-6}, -{23,46,-5}, -{23,46,-4}, -{23,46,-3}, -{23,46,-2}, -{23,46,-1}, -{23,46,0}, -{23,46,1}, -{23,46,2}, -{23,46,3}, -{23,46,4}, -{23,46,5}, -{23,46,6}, -{23,46,7}, -{23,46,8}, -{23,46,9}, -{23,46,10}, -{23,46,11}, -{23,46,12}, -{23,46,13}, -{23,47,-73}, -{23,47,-72}, -{23,47,-71}, -{23,47,-70}, -{23,47,-69}, -{23,47,-68}, -{23,47,-67}, -{23,47,-66}, -{23,47,-65}, -{23,47,-64}, -{23,47,-63}, -{23,47,-62}, -{23,47,-61}, -{23,47,-60}, -{23,47,-59}, -{23,47,-58}, -{23,47,-57}, -{23,47,-56}, -{23,47,-55}, -{23,47,-54}, -{23,47,-53}, -{23,47,-52}, -{23,47,-51}, -{23,47,-50}, -{23,47,-49}, -{23,47,-48}, -{23,47,-47}, -{23,47,-46}, -{23,47,-45}, -{23,47,-44}, -{23,47,-43}, -{23,47,-42}, -{23,47,-41}, -{23,47,-40}, -{23,47,-39}, -{23,47,-38}, -{23,47,-37}, -{23,47,-36}, -{23,47,-35}, -{23,47,-34}, -{23,47,-33}, -{23,47,-32}, -{23,47,-31}, -{23,47,-30}, -{23,47,-29}, -{23,47,-28}, -{23,47,-27}, -{23,47,-26}, -{23,47,-25}, -{23,47,-24}, -{23,47,-23}, -{23,47,-22}, -{23,47,-21}, -{23,47,-20}, -{23,47,-19}, -{23,47,-18}, -{23,47,-17}, -{23,47,-16}, -{23,47,-15}, -{23,47,-14}, -{23,47,-13}, -{23,47,-12}, -{23,47,-11}, -{23,47,-10}, -{23,47,-9}, -{23,47,-8}, -{23,47,-7}, -{23,47,-6}, -{23,47,-5}, -{23,47,-4}, -{23,47,-3}, -{23,48,-73}, -{23,48,-72}, -{23,48,-71}, -{23,48,-70}, -{23,48,-69}, -{23,48,-68}, -{23,48,-67}, -{23,48,-66}, -{23,48,-65}, -{23,48,-64}, -{23,48,-63}, -{23,48,-62}, -{23,48,-61}, -{23,48,-60}, -{23,48,-59}, -{23,48,-58}, -{23,48,-57}, -{23,48,-56}, -{23,48,-55}, -{23,48,-54}, -{23,48,-53}, -{23,48,-52}, -{23,48,-51}, -{23,48,-50}, -{23,48,-49}, -{23,48,-48}, -{23,48,-47}, -{23,48,-46}, -{23,48,-45}, -{23,48,-44}, -{23,48,-43}, -{23,48,-42}, -{23,48,-41}, -{23,48,-40}, -{23,48,-39}, -{23,48,-38}, -{23,48,-37}, -{23,48,-36}, -{23,48,-35}, -{23,48,-34}, -{23,48,-33}, -{23,48,-32}, -{23,48,-31}, -{23,48,-30}, -{23,48,-29}, -{23,48,-28}, -{23,48,-27}, -{23,48,-26}, -{23,48,-25}, -{23,48,-24}, -{23,48,-23}, -{23,48,-22}, -{23,48,-21}, -{23,48,-20}, -{23,48,-19}, -{23,48,-18}, -{23,48,-17}, -{23,48,-16}, -{23,48,-15}, -{23,48,-14}, -{23,49,-74}, -{23,49,-73}, -{23,49,-72}, -{23,49,-71}, -{23,49,-70}, -{23,49,-69}, -{23,49,-68}, -{23,49,-67}, -{23,49,-66}, -{23,49,-65}, -{23,49,-64}, -{23,49,-63}, -{23,49,-62}, -{23,49,-61}, -{23,49,-60}, -{23,49,-59}, -{23,49,-58}, -{23,49,-57}, -{23,49,-56}, -{23,49,-55}, -{23,49,-54}, -{23,49,-53}, -{23,49,-52}, -{23,49,-51}, -{23,49,-50}, -{23,49,-49}, -{23,49,-48}, -{23,49,-47}, -{23,49,-46}, -{23,49,-45}, -{23,49,-44}, -{23,49,-43}, -{23,49,-42}, -{23,49,-41}, -{23,49,-40}, -{23,49,-39}, -{23,49,-38}, -{23,49,-37}, -{23,49,-36}, -{23,49,-35}, -{23,49,-34}, -{23,49,-33}, -{23,49,-32}, -{23,49,-31}, -{23,49,-30}, -{23,49,-29}, -{23,49,-28}, -{23,49,-27}, -{23,49,-26}, -{23,49,-25}, -{23,49,-24}, -{23,49,-23}, -{23,49,-22}, -{23,50,-75}, -{23,50,-74}, -{23,50,-73}, -{23,50,-72}, -{23,50,-71}, -{23,50,-70}, -{23,50,-69}, -{23,50,-68}, -{23,50,-67}, -{23,50,-66}, -{23,50,-65}, -{23,50,-64}, -{23,50,-63}, -{23,50,-62}, -{23,50,-61}, -{23,50,-60}, -{23,50,-59}, -{23,50,-58}, -{23,50,-57}, -{23,50,-56}, -{23,50,-55}, -{23,50,-54}, -{23,50,-53}, -{23,50,-52}, -{23,50,-51}, -{23,50,-50}, -{23,50,-49}, -{23,50,-48}, -{23,50,-47}, -{23,50,-46}, -{23,50,-45}, -{23,50,-44}, -{23,50,-43}, -{23,50,-42}, -{23,50,-41}, -{23,50,-40}, -{23,50,-39}, -{23,50,-38}, -{23,50,-37}, -{23,50,-36}, -{23,50,-35}, -{23,50,-34}, -{23,50,-33}, -{23,50,-32}, -{23,50,-31}, -{23,50,-30}, -{23,50,-29}, -{23,51,-76}, -{23,51,-75}, -{23,51,-74}, -{23,51,-73}, -{23,51,-72}, -{23,51,-71}, -{23,51,-70}, -{23,51,-69}, -{23,51,-68}, -{23,51,-67}, -{23,51,-66}, -{23,51,-65}, -{23,51,-64}, -{23,51,-63}, -{23,51,-62}, -{23,51,-61}, -{23,51,-60}, -{23,51,-59}, -{23,51,-58}, -{23,51,-57}, -{23,51,-56}, -{23,51,-55}, -{23,51,-54}, -{23,51,-53}, -{23,51,-52}, -{23,51,-51}, -{23,51,-50}, -{23,51,-49}, -{23,51,-48}, -{23,51,-47}, -{23,51,-46}, -{23,51,-45}, -{23,51,-44}, -{23,51,-43}, -{23,51,-42}, -{23,51,-41}, -{23,51,-40}, -{23,51,-39}, -{23,51,-38}, -{23,51,-37}, -{23,51,-36}, -{23,52,-77}, -{23,52,-76}, -{23,52,-75}, -{23,52,-74}, -{23,52,-73}, -{23,52,-72}, -{23,52,-71}, -{23,52,-70}, -{23,52,-69}, -{23,52,-68}, -{23,52,-67}, -{23,52,-66}, -{23,52,-65}, -{23,52,-64}, -{23,52,-63}, -{23,52,-62}, -{23,52,-61}, -{23,52,-60}, -{23,52,-59}, -{23,52,-58}, -{23,52,-57}, -{23,52,-56}, -{23,52,-55}, -{23,52,-54}, -{23,52,-53}, -{23,52,-52}, -{23,52,-51}, -{23,52,-50}, -{23,52,-49}, -{23,52,-48}, -{23,52,-47}, -{23,52,-46}, -{23,52,-45}, -{23,52,-44}, -{23,52,-43}, -{23,52,-42}, -{23,52,-41}, -{23,53,-78}, -{23,53,-77}, -{23,53,-76}, -{23,53,-75}, -{23,53,-74}, -{23,53,-73}, -{23,53,-72}, -{23,53,-71}, -{23,53,-70}, -{23,53,-69}, -{23,53,-68}, -{23,53,-67}, -{23,53,-66}, -{23,53,-65}, -{23,53,-64}, -{23,53,-63}, -{23,53,-62}, -{23,53,-61}, -{23,53,-60}, -{23,53,-59}, -{23,53,-58}, -{23,53,-57}, -{23,53,-56}, -{23,53,-55}, -{23,53,-54}, -{23,53,-53}, -{23,53,-52}, -{23,53,-51}, -{23,53,-50}, -{23,53,-49}, -{23,53,-48}, -{23,53,-47}, -{23,54,-79}, -{23,54,-78}, -{23,54,-77}, -{23,54,-76}, -{23,54,-75}, -{23,54,-74}, -{23,54,-73}, -{23,54,-72}, -{23,54,-71}, -{23,54,-70}, -{23,54,-69}, -{23,54,-68}, -{23,54,-67}, -{23,54,-66}, -{23,54,-65}, -{23,54,-64}, -{23,54,-63}, -{23,54,-62}, -{23,54,-61}, -{23,54,-60}, -{23,54,-59}, -{23,54,-58}, -{23,54,-57}, -{23,54,-56}, -{23,54,-55}, -{23,54,-54}, -{23,54,-53}, -{23,54,-52}, -{23,54,-51}, -{23,55,-79}, -{23,55,-78}, -{23,55,-77}, -{23,55,-76}, -{23,55,-75}, -{23,55,-74}, -{23,55,-73}, -{23,55,-72}, -{23,55,-71}, -{23,55,-70}, -{23,55,-69}, -{23,55,-68}, -{23,55,-67}, -{23,55,-66}, -{23,55,-65}, -{23,55,-64}, -{23,55,-63}, -{23,55,-62}, -{23,55,-61}, -{23,55,-60}, -{23,55,-59}, -{23,55,-58}, -{23,55,-57}, -{23,55,-56}, -{23,56,-80}, -{23,56,-79}, -{23,56,-78}, -{23,56,-77}, -{23,56,-76}, -{23,56,-75}, -{23,56,-74}, -{23,56,-73}, -{23,56,-72}, -{23,56,-71}, -{23,56,-70}, -{23,56,-69}, -{23,56,-68}, -{23,56,-67}, -{23,56,-66}, -{23,56,-65}, -{23,56,-64}, -{23,56,-63}, -{23,56,-62}, -{23,56,-61}, -{23,56,-60}, -{23,57,-81}, -{23,57,-80}, -{23,57,-79}, -{23,57,-78}, -{23,57,-77}, -{23,57,-76}, -{23,57,-75}, -{23,57,-74}, -{23,57,-73}, -{23,57,-72}, -{23,57,-71}, -{23,57,-70}, -{23,57,-69}, -{23,57,-68}, -{23,57,-67}, -{23,57,-66}, -{23,57,-65}, -{23,57,-64}, -{23,58,-82}, -{23,58,-81}, -{23,58,-80}, -{23,58,-79}, -{23,58,-78}, -{23,58,-77}, -{23,58,-76}, -{23,58,-75}, -{23,58,-74}, -{23,58,-73}, -{23,58,-72}, -{23,58,-71}, -{23,58,-70}, -{23,58,-69}, -{23,58,-68}, -{23,59,-83}, -{23,59,-82}, -{23,59,-81}, -{23,59,-80}, -{23,59,-79}, -{23,59,-78}, -{23,59,-77}, -{23,59,-76}, -{23,59,-75}, -{23,59,-74}, -{23,59,-73}, -{23,59,-72}, -{23,59,-71}, -{23,60,-84}, -{23,60,-83}, -{23,60,-82}, -{23,60,-81}, -{23,60,-80}, -{23,60,-79}, -{23,60,-78}, -{23,60,-77}, -{23,60,-76}, -{23,60,-75}, -{23,61,-84}, -{23,61,-83}, -{23,61,-82}, -{23,61,-81}, -{23,61,-80}, -{23,61,-79}, -{23,61,-78}, -{23,62,-85}, -{23,62,-84}, -{23,62,-83}, -{23,62,-82}, -{23,62,-81}, -{23,63,-86}, -{23,63,-85}, -{23,63,-84}, -{23,64,-87}, -{24,-33,30}, -{24,-33,31}, -{24,-32,26}, -{24,-32,27}, -{24,-32,28}, -{24,-32,29}, -{24,-32,30}, -{24,-32,31}, -{24,-31,23}, -{24,-31,24}, -{24,-31,25}, -{24,-31,26}, -{24,-31,27}, -{24,-31,28}, -{24,-31,29}, -{24,-31,30}, -{24,-31,31}, -{24,-30,20}, -{24,-30,21}, -{24,-30,22}, -{24,-30,23}, -{24,-30,24}, -{24,-30,25}, -{24,-30,26}, -{24,-30,27}, -{24,-30,28}, -{24,-30,29}, -{24,-30,30}, -{24,-30,31}, -{24,-29,17}, -{24,-29,18}, -{24,-29,19}, -{24,-29,20}, -{24,-29,21}, -{24,-29,22}, -{24,-29,23}, -{24,-29,24}, -{24,-29,25}, -{24,-29,26}, -{24,-29,27}, -{24,-29,28}, -{24,-29,29}, -{24,-29,30}, -{24,-29,31}, -{24,-28,14}, -{24,-28,15}, -{24,-28,16}, -{24,-28,17}, -{24,-28,18}, -{24,-28,19}, -{24,-28,20}, -{24,-28,21}, -{24,-28,22}, -{24,-28,23}, -{24,-28,24}, -{24,-28,25}, -{24,-28,26}, -{24,-28,27}, -{24,-28,28}, -{24,-28,29}, -{24,-28,30}, -{24,-28,31}, -{24,-27,12}, -{24,-27,13}, -{24,-27,14}, -{24,-27,15}, -{24,-27,16}, -{24,-27,17}, -{24,-27,18}, -{24,-27,19}, -{24,-27,20}, -{24,-27,21}, -{24,-27,22}, -{24,-27,23}, -{24,-27,24}, -{24,-27,25}, -{24,-27,26}, -{24,-27,27}, -{24,-27,28}, -{24,-27,29}, -{24,-27,30}, -{24,-27,31}, -{24,-26,10}, -{24,-26,11}, -{24,-26,12}, -{24,-26,13}, -{24,-26,14}, -{24,-26,15}, -{24,-26,16}, -{24,-26,17}, -{24,-26,18}, -{24,-26,19}, -{24,-26,20}, -{24,-26,21}, -{24,-26,22}, -{24,-26,23}, -{24,-26,24}, -{24,-26,25}, -{24,-26,26}, -{24,-26,27}, -{24,-26,28}, -{24,-26,29}, -{24,-26,30}, -{24,-26,31}, -{24,-26,32}, -{24,-25,7}, -{24,-25,8}, -{24,-25,9}, -{24,-25,10}, -{24,-25,11}, -{24,-25,12}, -{24,-25,13}, -{24,-25,14}, -{24,-25,15}, -{24,-25,16}, -{24,-25,17}, -{24,-25,18}, -{24,-25,19}, -{24,-25,20}, -{24,-25,21}, -{24,-25,22}, -{24,-25,23}, -{24,-25,24}, -{24,-25,25}, -{24,-25,26}, -{24,-25,27}, -{24,-25,28}, -{24,-25,29}, -{24,-25,30}, -{24,-25,31}, -{24,-25,32}, -{24,-24,5}, -{24,-24,6}, -{24,-24,7}, -{24,-24,8}, -{24,-24,9}, -{24,-24,10}, -{24,-24,11}, -{24,-24,12}, -{24,-24,13}, -{24,-24,14}, -{24,-24,15}, -{24,-24,16}, -{24,-24,17}, -{24,-24,18}, -{24,-24,19}, -{24,-24,20}, -{24,-24,21}, -{24,-24,22}, -{24,-24,23}, -{24,-24,24}, -{24,-24,25}, -{24,-24,26}, -{24,-24,27}, -{24,-24,28}, -{24,-24,29}, -{24,-24,30}, -{24,-24,31}, -{24,-24,32}, -{24,-23,4}, -{24,-23,5}, -{24,-23,6}, -{24,-23,7}, -{24,-23,8}, -{24,-23,9}, -{24,-23,10}, -{24,-23,11}, -{24,-23,12}, -{24,-23,13}, -{24,-23,14}, -{24,-23,15}, -{24,-23,16}, -{24,-23,17}, -{24,-23,18}, -{24,-23,19}, -{24,-23,20}, -{24,-23,21}, -{24,-23,22}, -{24,-23,23}, -{24,-23,24}, -{24,-23,25}, -{24,-23,26}, -{24,-23,27}, -{24,-23,28}, -{24,-23,29}, -{24,-23,30}, -{24,-23,31}, -{24,-23,32}, -{24,-22,2}, -{24,-22,3}, -{24,-22,4}, -{24,-22,5}, -{24,-22,6}, -{24,-22,7}, -{24,-22,8}, -{24,-22,9}, -{24,-22,10}, -{24,-22,11}, -{24,-22,12}, -{24,-22,13}, -{24,-22,14}, -{24,-22,15}, -{24,-22,16}, -{24,-22,17}, -{24,-22,18}, -{24,-22,19}, -{24,-22,20}, -{24,-22,21}, -{24,-22,22}, -{24,-22,23}, -{24,-22,24}, -{24,-22,25}, -{24,-22,26}, -{24,-22,27}, -{24,-22,28}, -{24,-22,29}, -{24,-22,30}, -{24,-22,31}, -{24,-22,32}, -{24,-21,0}, -{24,-21,1}, -{24,-21,2}, -{24,-21,3}, -{24,-21,4}, -{24,-21,5}, -{24,-21,6}, -{24,-21,7}, -{24,-21,8}, -{24,-21,9}, -{24,-21,10}, -{24,-21,11}, -{24,-21,12}, -{24,-21,13}, -{24,-21,14}, -{24,-21,15}, -{24,-21,16}, -{24,-21,17}, -{24,-21,18}, -{24,-21,19}, -{24,-21,20}, -{24,-21,21}, -{24,-21,22}, -{24,-21,23}, -{24,-21,24}, -{24,-21,25}, -{24,-21,26}, -{24,-21,27}, -{24,-21,28}, -{24,-21,29}, -{24,-21,30}, -{24,-21,31}, -{24,-21,32}, -{24,-20,-2}, -{24,-20,-1}, -{24,-20,0}, -{24,-20,1}, -{24,-20,2}, -{24,-20,3}, -{24,-20,4}, -{24,-20,5}, -{24,-20,6}, -{24,-20,7}, -{24,-20,8}, -{24,-20,9}, -{24,-20,10}, -{24,-20,11}, -{24,-20,12}, -{24,-20,13}, -{24,-20,14}, -{24,-20,15}, -{24,-20,16}, -{24,-20,17}, -{24,-20,18}, -{24,-20,19}, -{24,-20,20}, -{24,-20,21}, -{24,-20,22}, -{24,-20,23}, -{24,-20,24}, -{24,-20,25}, -{24,-20,26}, -{24,-20,27}, -{24,-20,28}, -{24,-20,29}, -{24,-20,30}, -{24,-20,31}, -{24,-20,32}, -{24,-19,-3}, -{24,-19,-2}, -{24,-19,-1}, -{24,-19,0}, -{24,-19,1}, -{24,-19,2}, -{24,-19,3}, -{24,-19,4}, -{24,-19,5}, -{24,-19,6}, -{24,-19,7}, -{24,-19,8}, -{24,-19,9}, -{24,-19,10}, -{24,-19,11}, -{24,-19,12}, -{24,-19,13}, -{24,-19,14}, -{24,-19,15}, -{24,-19,16}, -{24,-19,17}, -{24,-19,18}, -{24,-19,19}, -{24,-19,20}, -{24,-19,21}, -{24,-19,22}, -{24,-19,23}, -{24,-19,24}, -{24,-19,25}, -{24,-19,26}, -{24,-19,27}, -{24,-19,28}, -{24,-19,29}, -{24,-19,30}, -{24,-19,31}, -{24,-19,32}, -{24,-18,-5}, -{24,-18,-4}, -{24,-18,-3}, -{24,-18,-2}, -{24,-18,-1}, -{24,-18,0}, -{24,-18,1}, -{24,-18,2}, -{24,-18,3}, -{24,-18,4}, -{24,-18,5}, -{24,-18,6}, -{24,-18,7}, -{24,-18,8}, -{24,-18,9}, -{24,-18,10}, -{24,-18,11}, -{24,-18,12}, -{24,-18,13}, -{24,-18,14}, -{24,-18,15}, -{24,-18,16}, -{24,-18,17}, -{24,-18,18}, -{24,-18,19}, -{24,-18,20}, -{24,-18,21}, -{24,-18,22}, -{24,-18,23}, -{24,-18,24}, -{24,-18,25}, -{24,-18,26}, -{24,-18,27}, -{24,-18,28}, -{24,-18,29}, -{24,-18,30}, -{24,-18,31}, -{24,-18,32}, -{24,-17,-7}, -{24,-17,-6}, -{24,-17,-5}, -{24,-17,-4}, -{24,-17,-3}, -{24,-17,-2}, -{24,-17,-1}, -{24,-17,0}, -{24,-17,1}, -{24,-17,2}, -{24,-17,3}, -{24,-17,4}, -{24,-17,5}, -{24,-17,6}, -{24,-17,7}, -{24,-17,8}, -{24,-17,9}, -{24,-17,10}, -{24,-17,11}, -{24,-17,12}, -{24,-17,13}, -{24,-17,14}, -{24,-17,15}, -{24,-17,16}, -{24,-17,17}, -{24,-17,18}, -{24,-17,19}, -{24,-17,20}, -{24,-17,21}, -{24,-17,22}, -{24,-17,23}, -{24,-17,24}, -{24,-17,25}, -{24,-17,26}, -{24,-17,27}, -{24,-17,28}, -{24,-17,29}, -{24,-17,30}, -{24,-17,31}, -{24,-17,32}, -{24,-16,-8}, -{24,-16,-7}, -{24,-16,-6}, -{24,-16,-5}, -{24,-16,-4}, -{24,-16,-3}, -{24,-16,-2}, -{24,-16,-1}, -{24,-16,0}, -{24,-16,1}, -{24,-16,2}, -{24,-16,3}, -{24,-16,4}, -{24,-16,5}, -{24,-16,6}, -{24,-16,7}, -{24,-16,8}, -{24,-16,9}, -{24,-16,10}, -{24,-16,11}, -{24,-16,12}, -{24,-16,13}, -{24,-16,14}, -{24,-16,15}, -{24,-16,16}, -{24,-16,17}, -{24,-16,18}, -{24,-16,19}, -{24,-16,20}, -{24,-16,21}, -{24,-16,22}, -{24,-16,23}, -{24,-16,24}, -{24,-16,25}, -{24,-16,26}, -{24,-16,27}, -{24,-16,28}, -{24,-16,29}, -{24,-16,30}, -{24,-16,31}, -{24,-16,32}, -{24,-15,-9}, -{24,-15,-8}, -{24,-15,-7}, -{24,-15,-6}, -{24,-15,-5}, -{24,-15,-4}, -{24,-15,-3}, -{24,-15,-2}, -{24,-15,-1}, -{24,-15,0}, -{24,-15,1}, -{24,-15,2}, -{24,-15,3}, -{24,-15,4}, -{24,-15,5}, -{24,-15,6}, -{24,-15,7}, -{24,-15,8}, -{24,-15,9}, -{24,-15,10}, -{24,-15,11}, -{24,-15,12}, -{24,-15,13}, -{24,-15,14}, -{24,-15,15}, -{24,-15,16}, -{24,-15,17}, -{24,-15,18}, -{24,-15,19}, -{24,-15,20}, -{24,-15,21}, -{24,-15,22}, -{24,-15,23}, -{24,-15,24}, -{24,-15,25}, -{24,-15,26}, -{24,-15,27}, -{24,-15,28}, -{24,-15,29}, -{24,-15,30}, -{24,-15,31}, -{24,-15,32}, -{24,-14,-11}, -{24,-14,-10}, -{24,-14,-9}, -{24,-14,-8}, -{24,-14,-7}, -{24,-14,-6}, -{24,-14,-5}, -{24,-14,-4}, -{24,-14,-3}, -{24,-14,-2}, -{24,-14,-1}, -{24,-14,0}, -{24,-14,1}, -{24,-14,2}, -{24,-14,3}, -{24,-14,4}, -{24,-14,5}, -{24,-14,6}, -{24,-14,7}, -{24,-14,8}, -{24,-14,9}, -{24,-14,10}, -{24,-14,11}, -{24,-14,12}, -{24,-14,13}, -{24,-14,14}, -{24,-14,15}, -{24,-14,16}, -{24,-14,17}, -{24,-14,18}, -{24,-14,19}, -{24,-14,20}, -{24,-14,21}, -{24,-14,22}, -{24,-14,23}, -{24,-14,24}, -{24,-14,25}, -{24,-14,26}, -{24,-14,27}, -{24,-14,28}, -{24,-14,29}, -{24,-14,30}, -{24,-14,31}, -{24,-14,32}, -{24,-13,-12}, -{24,-13,-11}, -{24,-13,-10}, -{24,-13,-9}, -{24,-13,-8}, -{24,-13,-7}, -{24,-13,-6}, -{24,-13,-5}, -{24,-13,-4}, -{24,-13,-3}, -{24,-13,-2}, -{24,-13,-1}, -{24,-13,0}, -{24,-13,1}, -{24,-13,2}, -{24,-13,3}, -{24,-13,4}, -{24,-13,5}, -{24,-13,6}, -{24,-13,7}, -{24,-13,8}, -{24,-13,9}, -{24,-13,10}, -{24,-13,11}, -{24,-13,12}, -{24,-13,13}, -{24,-13,14}, -{24,-13,15}, -{24,-13,16}, -{24,-13,17}, -{24,-13,18}, -{24,-13,19}, -{24,-13,20}, -{24,-13,21}, -{24,-13,22}, -{24,-13,23}, -{24,-13,24}, -{24,-13,25}, -{24,-13,26}, -{24,-13,27}, -{24,-13,28}, -{24,-13,29}, -{24,-13,30}, -{24,-13,31}, -{24,-13,32}, -{24,-12,-14}, -{24,-12,-13}, -{24,-12,-12}, -{24,-12,-11}, -{24,-12,-10}, -{24,-12,-9}, -{24,-12,-8}, -{24,-12,-7}, -{24,-12,-6}, -{24,-12,-5}, -{24,-12,-4}, -{24,-12,-3}, -{24,-12,-2}, -{24,-12,-1}, -{24,-12,0}, -{24,-12,1}, -{24,-12,2}, -{24,-12,3}, -{24,-12,4}, -{24,-12,5}, -{24,-12,6}, -{24,-12,7}, -{24,-12,8}, -{24,-12,9}, -{24,-12,10}, -{24,-12,11}, -{24,-12,12}, -{24,-12,13}, -{24,-12,14}, -{24,-12,15}, -{24,-12,16}, -{24,-12,17}, -{24,-12,18}, -{24,-12,19}, -{24,-12,20}, -{24,-12,21}, -{24,-12,22}, -{24,-12,23}, -{24,-12,24}, -{24,-12,25}, -{24,-12,26}, -{24,-12,27}, -{24,-12,28}, -{24,-12,29}, -{24,-12,30}, -{24,-12,31}, -{24,-12,32}, -{24,-11,-15}, -{24,-11,-14}, -{24,-11,-13}, -{24,-11,-12}, -{24,-11,-11}, -{24,-11,-10}, -{24,-11,-9}, -{24,-11,-8}, -{24,-11,-7}, -{24,-11,-6}, -{24,-11,-5}, -{24,-11,-4}, -{24,-11,-3}, -{24,-11,-2}, -{24,-11,-1}, -{24,-11,0}, -{24,-11,1}, -{24,-11,2}, -{24,-11,3}, -{24,-11,4}, -{24,-11,5}, -{24,-11,6}, -{24,-11,7}, -{24,-11,8}, -{24,-11,9}, -{24,-11,10}, -{24,-11,11}, -{24,-11,12}, -{24,-11,13}, -{24,-11,14}, -{24,-11,15}, -{24,-11,16}, -{24,-11,17}, -{24,-11,18}, -{24,-11,19}, -{24,-11,20}, -{24,-11,21}, -{24,-11,22}, -{24,-11,23}, -{24,-11,24}, -{24,-11,25}, -{24,-11,26}, -{24,-11,27}, -{24,-11,28}, -{24,-11,29}, -{24,-11,30}, -{24,-11,31}, -{24,-11,32}, -{24,-10,-16}, -{24,-10,-15}, -{24,-10,-14}, -{24,-10,-13}, -{24,-10,-12}, -{24,-10,-11}, -{24,-10,-10}, -{24,-10,-9}, -{24,-10,-8}, -{24,-10,-7}, -{24,-10,-6}, -{24,-10,-5}, -{24,-10,-4}, -{24,-10,-3}, -{24,-10,-2}, -{24,-10,-1}, -{24,-10,0}, -{24,-10,1}, -{24,-10,2}, -{24,-10,3}, -{24,-10,4}, -{24,-10,5}, -{24,-10,6}, -{24,-10,7}, -{24,-10,8}, -{24,-10,9}, -{24,-10,10}, -{24,-10,11}, -{24,-10,12}, -{24,-10,13}, -{24,-10,14}, -{24,-10,15}, -{24,-10,16}, -{24,-10,17}, -{24,-10,18}, -{24,-10,19}, -{24,-10,20}, -{24,-10,21}, -{24,-10,22}, -{24,-10,23}, -{24,-10,24}, -{24,-10,25}, -{24,-10,26}, -{24,-10,27}, -{24,-10,28}, -{24,-10,29}, -{24,-10,30}, -{24,-10,31}, -{24,-10,32}, -{24,-9,-18}, -{24,-9,-17}, -{24,-9,-16}, -{24,-9,-15}, -{24,-9,-14}, -{24,-9,-13}, -{24,-9,-12}, -{24,-9,-11}, -{24,-9,-10}, -{24,-9,-9}, -{24,-9,-8}, -{24,-9,-7}, -{24,-9,-6}, -{24,-9,-5}, -{24,-9,-4}, -{24,-9,-3}, -{24,-9,-2}, -{24,-9,-1}, -{24,-9,0}, -{24,-9,1}, -{24,-9,2}, -{24,-9,3}, -{24,-9,4}, -{24,-9,5}, -{24,-9,6}, -{24,-9,7}, -{24,-9,8}, -{24,-9,9}, -{24,-9,10}, -{24,-9,11}, -{24,-9,12}, -{24,-9,13}, -{24,-9,14}, -{24,-9,15}, -{24,-9,16}, -{24,-9,17}, -{24,-9,18}, -{24,-9,19}, -{24,-9,20}, -{24,-9,21}, -{24,-9,22}, -{24,-9,23}, -{24,-9,24}, -{24,-9,25}, -{24,-9,26}, -{24,-9,27}, -{24,-9,28}, -{24,-9,29}, -{24,-9,30}, -{24,-9,31}, -{24,-9,32}, -{24,-8,-19}, -{24,-8,-18}, -{24,-8,-17}, -{24,-8,-16}, -{24,-8,-15}, -{24,-8,-14}, -{24,-8,-13}, -{24,-8,-12}, -{24,-8,-11}, -{24,-8,-10}, -{24,-8,-9}, -{24,-8,-8}, -{24,-8,-7}, -{24,-8,-6}, -{24,-8,-5}, -{24,-8,-4}, -{24,-8,-3}, -{24,-8,-2}, -{24,-8,-1}, -{24,-8,0}, -{24,-8,1}, -{24,-8,2}, -{24,-8,3}, -{24,-8,4}, -{24,-8,5}, -{24,-8,6}, -{24,-8,7}, -{24,-8,8}, -{24,-8,9}, -{24,-8,10}, -{24,-8,11}, -{24,-8,12}, -{24,-8,13}, -{24,-8,14}, -{24,-8,15}, -{24,-8,16}, -{24,-8,17}, -{24,-8,18}, -{24,-8,19}, -{24,-8,20}, -{24,-8,21}, -{24,-8,22}, -{24,-8,23}, -{24,-8,24}, -{24,-8,25}, -{24,-8,26}, -{24,-8,27}, -{24,-8,28}, -{24,-8,29}, -{24,-8,30}, -{24,-8,31}, -{24,-8,32}, -{24,-7,-20}, -{24,-7,-19}, -{24,-7,-18}, -{24,-7,-17}, -{24,-7,-16}, -{24,-7,-15}, -{24,-7,-14}, -{24,-7,-13}, -{24,-7,-12}, -{24,-7,-11}, -{24,-7,-10}, -{24,-7,-9}, -{24,-7,-8}, -{24,-7,-7}, -{24,-7,-6}, -{24,-7,-5}, -{24,-7,-4}, -{24,-7,-3}, -{24,-7,-2}, -{24,-7,-1}, -{24,-7,0}, -{24,-7,1}, -{24,-7,2}, -{24,-7,3}, -{24,-7,4}, -{24,-7,5}, -{24,-7,6}, -{24,-7,7}, -{24,-7,8}, -{24,-7,9}, -{24,-7,10}, -{24,-7,11}, -{24,-7,12}, -{24,-7,13}, -{24,-7,14}, -{24,-7,15}, -{24,-7,16}, -{24,-7,17}, -{24,-7,18}, -{24,-7,19}, -{24,-7,20}, -{24,-7,21}, -{24,-7,22}, -{24,-7,23}, -{24,-7,24}, -{24,-7,25}, -{24,-7,26}, -{24,-7,27}, -{24,-7,28}, -{24,-7,29}, -{24,-7,30}, -{24,-7,31}, -{24,-7,32}, -{24,-6,-21}, -{24,-6,-20}, -{24,-6,-19}, -{24,-6,-18}, -{24,-6,-17}, -{24,-6,-16}, -{24,-6,-15}, -{24,-6,-14}, -{24,-6,-13}, -{24,-6,-12}, -{24,-6,-11}, -{24,-6,-10}, -{24,-6,-9}, -{24,-6,-8}, -{24,-6,-7}, -{24,-6,-6}, -{24,-6,-5}, -{24,-6,-4}, -{24,-6,-3}, -{24,-6,-2}, -{24,-6,-1}, -{24,-6,0}, -{24,-6,1}, -{24,-6,2}, -{24,-6,3}, -{24,-6,4}, -{24,-6,5}, -{24,-6,6}, -{24,-6,7}, -{24,-6,8}, -{24,-6,9}, -{24,-6,10}, -{24,-6,11}, -{24,-6,12}, -{24,-6,13}, -{24,-6,14}, -{24,-6,15}, -{24,-6,16}, -{24,-6,17}, -{24,-6,18}, -{24,-6,19}, -{24,-6,20}, -{24,-6,21}, -{24,-6,22}, -{24,-6,23}, -{24,-6,24}, -{24,-6,25}, -{24,-6,26}, -{24,-6,27}, -{24,-6,28}, -{24,-6,29}, -{24,-6,30}, -{24,-6,31}, -{24,-6,32}, -{24,-5,-23}, -{24,-5,-22}, -{24,-5,-21}, -{24,-5,-20}, -{24,-5,-19}, -{24,-5,-18}, -{24,-5,-17}, -{24,-5,-16}, -{24,-5,-15}, -{24,-5,-14}, -{24,-5,-13}, -{24,-5,-12}, -{24,-5,-11}, -{24,-5,-10}, -{24,-5,-9}, -{24,-5,-8}, -{24,-5,-7}, -{24,-5,-6}, -{24,-5,-5}, -{24,-5,-4}, -{24,-5,-3}, -{24,-5,-2}, -{24,-5,-1}, -{24,-5,0}, -{24,-5,1}, -{24,-5,2}, -{24,-5,3}, -{24,-5,4}, -{24,-5,5}, -{24,-5,6}, -{24,-5,7}, -{24,-5,8}, -{24,-5,9}, -{24,-5,10}, -{24,-5,11}, -{24,-5,12}, -{24,-5,13}, -{24,-5,14}, -{24,-5,15}, -{24,-5,16}, -{24,-5,17}, -{24,-5,18}, -{24,-5,19}, -{24,-5,20}, -{24,-5,21}, -{24,-5,22}, -{24,-5,23}, -{24,-5,24}, -{24,-5,25}, -{24,-5,26}, -{24,-5,27}, -{24,-5,28}, -{24,-5,29}, -{24,-5,30}, -{24,-5,31}, -{24,-5,32}, -{24,-4,-24}, -{24,-4,-23}, -{24,-4,-22}, -{24,-4,-21}, -{24,-4,-20}, -{24,-4,-19}, -{24,-4,-18}, -{24,-4,-17}, -{24,-4,-16}, -{24,-4,-15}, -{24,-4,-14}, -{24,-4,-13}, -{24,-4,-12}, -{24,-4,-11}, -{24,-4,-10}, -{24,-4,-9}, -{24,-4,-8}, -{24,-4,-7}, -{24,-4,-6}, -{24,-4,-5}, -{24,-4,-4}, -{24,-4,-3}, -{24,-4,-2}, -{24,-4,-1}, -{24,-4,0}, -{24,-4,1}, -{24,-4,2}, -{24,-4,3}, -{24,-4,4}, -{24,-4,5}, -{24,-4,6}, -{24,-4,7}, -{24,-4,8}, -{24,-4,9}, -{24,-4,10}, -{24,-4,11}, -{24,-4,12}, -{24,-4,13}, -{24,-4,14}, -{24,-4,15}, -{24,-4,16}, -{24,-4,17}, -{24,-4,18}, -{24,-4,19}, -{24,-4,20}, -{24,-4,21}, -{24,-4,22}, -{24,-4,23}, -{24,-4,24}, -{24,-4,25}, -{24,-4,26}, -{24,-4,27}, -{24,-4,28}, -{24,-4,29}, -{24,-4,30}, -{24,-4,31}, -{24,-4,32}, -{24,-3,-25}, -{24,-3,-24}, -{24,-3,-23}, -{24,-3,-22}, -{24,-3,-21}, -{24,-3,-20}, -{24,-3,-19}, -{24,-3,-18}, -{24,-3,-17}, -{24,-3,-16}, -{24,-3,-15}, -{24,-3,-14}, -{24,-3,-13}, -{24,-3,-12}, -{24,-3,-11}, -{24,-3,-10}, -{24,-3,-9}, -{24,-3,-8}, -{24,-3,-7}, -{24,-3,-6}, -{24,-3,-5}, -{24,-3,-4}, -{24,-3,-3}, -{24,-3,-2}, -{24,-3,-1}, -{24,-3,0}, -{24,-3,1}, -{24,-3,2}, -{24,-3,3}, -{24,-3,4}, -{24,-3,5}, -{24,-3,6}, -{24,-3,7}, -{24,-3,8}, -{24,-3,9}, -{24,-3,10}, -{24,-3,11}, -{24,-3,12}, -{24,-3,13}, -{24,-3,14}, -{24,-3,15}, -{24,-3,16}, -{24,-3,17}, -{24,-3,18}, -{24,-3,19}, -{24,-3,20}, -{24,-3,21}, -{24,-3,22}, -{24,-3,23}, -{24,-3,24}, -{24,-3,25}, -{24,-3,26}, -{24,-3,27}, -{24,-3,28}, -{24,-3,29}, -{24,-3,30}, -{24,-3,31}, -{24,-3,32}, -{24,-3,33}, -{24,-2,-26}, -{24,-2,-25}, -{24,-2,-24}, -{24,-2,-23}, -{24,-2,-22}, -{24,-2,-21}, -{24,-2,-20}, -{24,-2,-19}, -{24,-2,-18}, -{24,-2,-17}, -{24,-2,-16}, -{24,-2,-15}, -{24,-2,-14}, -{24,-2,-13}, -{24,-2,-12}, -{24,-2,-11}, -{24,-2,-10}, -{24,-2,-9}, -{24,-2,-8}, -{24,-2,-7}, -{24,-2,-6}, -{24,-2,-5}, -{24,-2,-4}, -{24,-2,-3}, -{24,-2,-2}, -{24,-2,-1}, -{24,-2,0}, -{24,-2,1}, -{24,-2,2}, -{24,-2,3}, -{24,-2,4}, -{24,-2,5}, -{24,-2,6}, -{24,-2,7}, -{24,-2,8}, -{24,-2,9}, -{24,-2,10}, -{24,-2,11}, -{24,-2,12}, -{24,-2,13}, -{24,-2,14}, -{24,-2,15}, -{24,-2,16}, -{24,-2,17}, -{24,-2,18}, -{24,-2,19}, -{24,-2,20}, -{24,-2,21}, -{24,-2,22}, -{24,-2,23}, -{24,-2,24}, -{24,-2,25}, -{24,-2,26}, -{24,-2,27}, -{24,-2,28}, -{24,-2,29}, -{24,-2,30}, -{24,-2,31}, -{24,-2,32}, -{24,-2,33}, -{24,-1,-27}, -{24,-1,-26}, -{24,-1,-25}, -{24,-1,-24}, -{24,-1,-23}, -{24,-1,-22}, -{24,-1,-21}, -{24,-1,-20}, -{24,-1,-19}, -{24,-1,-18}, -{24,-1,-17}, -{24,-1,-16}, -{24,-1,-15}, -{24,-1,-14}, -{24,-1,-13}, -{24,-1,-12}, -{24,-1,-11}, -{24,-1,-10}, -{24,-1,-9}, -{24,-1,-8}, -{24,-1,-7}, -{24,-1,-6}, -{24,-1,-5}, -{24,-1,-4}, -{24,-1,-3}, -{24,-1,-2}, -{24,-1,-1}, -{24,-1,0}, -{24,-1,1}, -{24,-1,2}, -{24,-1,3}, -{24,-1,4}, -{24,-1,5}, -{24,-1,6}, -{24,-1,7}, -{24,-1,8}, -{24,-1,9}, -{24,-1,10}, -{24,-1,11}, -{24,-1,12}, -{24,-1,13}, -{24,-1,14}, -{24,-1,15}, -{24,-1,16}, -{24,-1,17}, -{24,-1,18}, -{24,-1,19}, -{24,-1,20}, -{24,-1,21}, -{24,-1,22}, -{24,-1,23}, -{24,-1,24}, -{24,-1,25}, -{24,-1,26}, -{24,-1,27}, -{24,-1,28}, -{24,-1,29}, -{24,-1,30}, -{24,-1,31}, -{24,-1,32}, -{24,-1,33}, -{24,0,-28}, -{24,0,-27}, -{24,0,-26}, -{24,0,-25}, -{24,0,-24}, -{24,0,-23}, -{24,0,-22}, -{24,0,-21}, -{24,0,-20}, -{24,0,-19}, -{24,0,-18}, -{24,0,-17}, -{24,0,-16}, -{24,0,-15}, -{24,0,-14}, -{24,0,-13}, -{24,0,-12}, -{24,0,-11}, -{24,0,-10}, -{24,0,-9}, -{24,0,-8}, -{24,0,-7}, -{24,0,-6}, -{24,0,-5}, -{24,0,-4}, -{24,0,-3}, -{24,0,-2}, -{24,0,-1}, -{24,0,0}, -{24,0,1}, -{24,0,2}, -{24,0,3}, -{24,0,4}, -{24,0,5}, -{24,0,6}, -{24,0,7}, -{24,0,8}, -{24,0,9}, -{24,0,10}, -{24,0,11}, -{24,0,12}, -{24,0,13}, -{24,0,14}, -{24,0,15}, -{24,0,16}, -{24,0,17}, -{24,0,18}, -{24,0,19}, -{24,0,20}, -{24,0,21}, -{24,0,22}, -{24,0,23}, -{24,0,24}, -{24,0,25}, -{24,0,26}, -{24,0,27}, -{24,0,28}, -{24,0,29}, -{24,0,30}, -{24,0,31}, -{24,0,32}, -{24,0,33}, -{24,1,-30}, -{24,1,-29}, -{24,1,-28}, -{24,1,-27}, -{24,1,-26}, -{24,1,-25}, -{24,1,-24}, -{24,1,-23}, -{24,1,-22}, -{24,1,-21}, -{24,1,-20}, -{24,1,-19}, -{24,1,-18}, -{24,1,-17}, -{24,1,-16}, -{24,1,-15}, -{24,1,-14}, -{24,1,-13}, -{24,1,-12}, -{24,1,-11}, -{24,1,-10}, -{24,1,-9}, -{24,1,-8}, -{24,1,-7}, -{24,1,-6}, -{24,1,-5}, -{24,1,-4}, -{24,1,-3}, -{24,1,-2}, -{24,1,-1}, -{24,1,0}, -{24,1,1}, -{24,1,2}, -{24,1,3}, -{24,1,4}, -{24,1,5}, -{24,1,6}, -{24,1,7}, -{24,1,8}, -{24,1,9}, -{24,1,10}, -{24,1,11}, -{24,1,12}, -{24,1,13}, -{24,1,14}, -{24,1,15}, -{24,1,16}, -{24,1,17}, -{24,1,18}, -{24,1,19}, -{24,1,20}, -{24,1,21}, -{24,1,22}, -{24,1,23}, -{24,1,24}, -{24,1,25}, -{24,1,26}, -{24,1,27}, -{24,1,28}, -{24,1,29}, -{24,1,30}, -{24,1,31}, -{24,1,32}, -{24,1,33}, -{24,2,-31}, -{24,2,-30}, -{24,2,-29}, -{24,2,-28}, -{24,2,-27}, -{24,2,-26}, -{24,2,-25}, -{24,2,-24}, -{24,2,-23}, -{24,2,-22}, -{24,2,-21}, -{24,2,-20}, -{24,2,-19}, -{24,2,-18}, -{24,2,-17}, -{24,2,-16}, -{24,2,-15}, -{24,2,-14}, -{24,2,-13}, -{24,2,-12}, -{24,2,-11}, -{24,2,-10}, -{24,2,-9}, -{24,2,-8}, -{24,2,-7}, -{24,2,-6}, -{24,2,-5}, -{24,2,-4}, -{24,2,-3}, -{24,2,-2}, -{24,2,-1}, -{24,2,0}, -{24,2,1}, -{24,2,2}, -{24,2,3}, -{24,2,4}, -{24,2,5}, -{24,2,6}, -{24,2,7}, -{24,2,8}, -{24,2,9}, -{24,2,10}, -{24,2,11}, -{24,2,12}, -{24,2,13}, -{24,2,14}, -{24,2,15}, -{24,2,16}, -{24,2,17}, -{24,2,18}, -{24,2,19}, -{24,2,20}, -{24,2,21}, -{24,2,22}, -{24,2,23}, -{24,2,24}, -{24,2,25}, -{24,2,26}, -{24,2,27}, -{24,2,28}, -{24,2,29}, -{24,2,30}, -{24,2,31}, -{24,2,32}, -{24,2,33}, -{24,3,-32}, -{24,3,-31}, -{24,3,-30}, -{24,3,-29}, -{24,3,-28}, -{24,3,-27}, -{24,3,-26}, -{24,3,-25}, -{24,3,-24}, -{24,3,-23}, -{24,3,-22}, -{24,3,-21}, -{24,3,-20}, -{24,3,-19}, -{24,3,-18}, -{24,3,-17}, -{24,3,-16}, -{24,3,-15}, -{24,3,-14}, -{24,3,-13}, -{24,3,-12}, -{24,3,-11}, -{24,3,-10}, -{24,3,-9}, -{24,3,-8}, -{24,3,-7}, -{24,3,-6}, -{24,3,-5}, -{24,3,-4}, -{24,3,-3}, -{24,3,-2}, -{24,3,-1}, -{24,3,0}, -{24,3,1}, -{24,3,2}, -{24,3,3}, -{24,3,4}, -{24,3,5}, -{24,3,6}, -{24,3,7}, -{24,3,8}, -{24,3,9}, -{24,3,10}, -{24,3,11}, -{24,3,12}, -{24,3,13}, -{24,3,14}, -{24,3,15}, -{24,3,16}, -{24,3,17}, -{24,3,18}, -{24,3,19}, -{24,3,20}, -{24,3,21}, -{24,3,22}, -{24,3,23}, -{24,3,24}, -{24,3,25}, -{24,3,26}, -{24,3,27}, -{24,3,28}, -{24,3,29}, -{24,3,30}, -{24,3,31}, -{24,3,32}, -{24,3,33}, -{24,4,-33}, -{24,4,-32}, -{24,4,-31}, -{24,4,-30}, -{24,4,-29}, -{24,4,-28}, -{24,4,-27}, -{24,4,-26}, -{24,4,-25}, -{24,4,-24}, -{24,4,-23}, -{24,4,-22}, -{24,4,-21}, -{24,4,-20}, -{24,4,-19}, -{24,4,-18}, -{24,4,-17}, -{24,4,-16}, -{24,4,-15}, -{24,4,-14}, -{24,4,-13}, -{24,4,-12}, -{24,4,-11}, -{24,4,-10}, -{24,4,-9}, -{24,4,-8}, -{24,4,-7}, -{24,4,-6}, -{24,4,-5}, -{24,4,-4}, -{24,4,-3}, -{24,4,-2}, -{24,4,-1}, -{24,4,0}, -{24,4,1}, -{24,4,2}, -{24,4,3}, -{24,4,4}, -{24,4,5}, -{24,4,6}, -{24,4,7}, -{24,4,8}, -{24,4,9}, -{24,4,10}, -{24,4,11}, -{24,4,12}, -{24,4,13}, -{24,4,14}, -{24,4,15}, -{24,4,16}, -{24,4,17}, -{24,4,18}, -{24,4,19}, -{24,4,20}, -{24,4,21}, -{24,4,22}, -{24,4,23}, -{24,4,24}, -{24,4,25}, -{24,4,26}, -{24,4,27}, -{24,4,28}, -{24,4,29}, -{24,4,30}, -{24,4,31}, -{24,4,32}, -{24,4,33}, -{24,5,-34}, -{24,5,-33}, -{24,5,-32}, -{24,5,-31}, -{24,5,-30}, -{24,5,-29}, -{24,5,-28}, -{24,5,-27}, -{24,5,-26}, -{24,5,-25}, -{24,5,-24}, -{24,5,-23}, -{24,5,-22}, -{24,5,-21}, -{24,5,-20}, -{24,5,-19}, -{24,5,-18}, -{24,5,-17}, -{24,5,-16}, -{24,5,-15}, -{24,5,-14}, -{24,5,-13}, -{24,5,-12}, -{24,5,-11}, -{24,5,-10}, -{24,5,-9}, -{24,5,-8}, -{24,5,-7}, -{24,5,-6}, -{24,5,-5}, -{24,5,-4}, -{24,5,-3}, -{24,5,-2}, -{24,5,-1}, -{24,5,0}, -{24,5,1}, -{24,5,2}, -{24,5,3}, -{24,5,4}, -{24,5,5}, -{24,5,6}, -{24,5,7}, -{24,5,8}, -{24,5,9}, -{24,5,10}, -{24,5,11}, -{24,5,12}, -{24,5,13}, -{24,5,14}, -{24,5,15}, -{24,5,16}, -{24,5,17}, -{24,5,18}, -{24,5,19}, -{24,5,20}, -{24,5,21}, -{24,5,22}, -{24,5,23}, -{24,5,24}, -{24,5,25}, -{24,5,26}, -{24,5,27}, -{24,5,28}, -{24,5,29}, -{24,5,30}, -{24,5,31}, -{24,5,32}, -{24,5,33}, -{24,6,-35}, -{24,6,-34}, -{24,6,-33}, -{24,6,-32}, -{24,6,-31}, -{24,6,-30}, -{24,6,-29}, -{24,6,-28}, -{24,6,-27}, -{24,6,-26}, -{24,6,-25}, -{24,6,-24}, -{24,6,-23}, -{24,6,-22}, -{24,6,-21}, -{24,6,-20}, -{24,6,-19}, -{24,6,-18}, -{24,6,-17}, -{24,6,-16}, -{24,6,-15}, -{24,6,-14}, -{24,6,-13}, -{24,6,-12}, -{24,6,-11}, -{24,6,-10}, -{24,6,-9}, -{24,6,-8}, -{24,6,-7}, -{24,6,-6}, -{24,6,-5}, -{24,6,-4}, -{24,6,-3}, -{24,6,-2}, -{24,6,-1}, -{24,6,0}, -{24,6,1}, -{24,6,2}, -{24,6,3}, -{24,6,4}, -{24,6,5}, -{24,6,6}, -{24,6,7}, -{24,6,8}, -{24,6,9}, -{24,6,10}, -{24,6,11}, -{24,6,12}, -{24,6,13}, -{24,6,14}, -{24,6,15}, -{24,6,16}, -{24,6,17}, -{24,6,18}, -{24,6,19}, -{24,6,20}, -{24,6,21}, -{24,6,22}, -{24,6,23}, -{24,6,24}, -{24,6,25}, -{24,6,26}, -{24,6,27}, -{24,6,28}, -{24,6,29}, -{24,6,30}, -{24,6,31}, -{24,6,32}, -{24,6,33}, -{24,7,-36}, -{24,7,-35}, -{24,7,-34}, -{24,7,-33}, -{24,7,-32}, -{24,7,-31}, -{24,7,-30}, -{24,7,-29}, -{24,7,-28}, -{24,7,-27}, -{24,7,-26}, -{24,7,-25}, -{24,7,-24}, -{24,7,-23}, -{24,7,-22}, -{24,7,-21}, -{24,7,-20}, -{24,7,-19}, -{24,7,-18}, -{24,7,-17}, -{24,7,-16}, -{24,7,-15}, -{24,7,-14}, -{24,7,-13}, -{24,7,-12}, -{24,7,-11}, -{24,7,-10}, -{24,7,-9}, -{24,7,-8}, -{24,7,-7}, -{24,7,-6}, -{24,7,-5}, -{24,7,-4}, -{24,7,-3}, -{24,7,-2}, -{24,7,-1}, -{24,7,0}, -{24,7,1}, -{24,7,2}, -{24,7,3}, -{24,7,4}, -{24,7,5}, -{24,7,6}, -{24,7,7}, -{24,7,8}, -{24,7,9}, -{24,7,10}, -{24,7,11}, -{24,7,12}, -{24,7,13}, -{24,7,14}, -{24,7,15}, -{24,7,16}, -{24,7,17}, -{24,7,18}, -{24,7,19}, -{24,7,20}, -{24,7,21}, -{24,7,22}, -{24,7,23}, -{24,7,24}, -{24,7,25}, -{24,7,26}, -{24,7,27}, -{24,7,28}, -{24,7,29}, -{24,7,30}, -{24,7,31}, -{24,7,32}, -{24,7,33}, -{24,8,-37}, -{24,8,-36}, -{24,8,-35}, -{24,8,-34}, -{24,8,-33}, -{24,8,-32}, -{24,8,-31}, -{24,8,-30}, -{24,8,-29}, -{24,8,-28}, -{24,8,-27}, -{24,8,-26}, -{24,8,-25}, -{24,8,-24}, -{24,8,-23}, -{24,8,-22}, -{24,8,-21}, -{24,8,-20}, -{24,8,-19}, -{24,8,-18}, -{24,8,-17}, -{24,8,-16}, -{24,8,-15}, -{24,8,-14}, -{24,8,-13}, -{24,8,-12}, -{24,8,-11}, -{24,8,-10}, -{24,8,-9}, -{24,8,-8}, -{24,8,-7}, -{24,8,-6}, -{24,8,-5}, -{24,8,-4}, -{24,8,-3}, -{24,8,-2}, -{24,8,-1}, -{24,8,0}, -{24,8,1}, -{24,8,2}, -{24,8,3}, -{24,8,4}, -{24,8,5}, -{24,8,6}, -{24,8,7}, -{24,8,8}, -{24,8,9}, -{24,8,10}, -{24,8,11}, -{24,8,12}, -{24,8,13}, -{24,8,14}, -{24,8,15}, -{24,8,16}, -{24,8,17}, -{24,8,18}, -{24,8,19}, -{24,8,20}, -{24,8,21}, -{24,8,22}, -{24,8,23}, -{24,8,24}, -{24,8,25}, -{24,8,26}, -{24,8,27}, -{24,8,28}, -{24,8,29}, -{24,8,30}, -{24,8,31}, -{24,8,32}, -{24,8,33}, -{24,9,-38}, -{24,9,-37}, -{24,9,-36}, -{24,9,-35}, -{24,9,-34}, -{24,9,-33}, -{24,9,-32}, -{24,9,-31}, -{24,9,-30}, -{24,9,-29}, -{24,9,-28}, -{24,9,-27}, -{24,9,-26}, -{24,9,-25}, -{24,9,-24}, -{24,9,-23}, -{24,9,-22}, -{24,9,-21}, -{24,9,-20}, -{24,9,-19}, -{24,9,-18}, -{24,9,-17}, -{24,9,-16}, -{24,9,-15}, -{24,9,-14}, -{24,9,-13}, -{24,9,-12}, -{24,9,-11}, -{24,9,-10}, -{24,9,-9}, -{24,9,-8}, -{24,9,-7}, -{24,9,-6}, -{24,9,-5}, -{24,9,-4}, -{24,9,-3}, -{24,9,-2}, -{24,9,-1}, -{24,9,0}, -{24,9,1}, -{24,9,2}, -{24,9,3}, -{24,9,4}, -{24,9,5}, -{24,9,6}, -{24,9,7}, -{24,9,8}, -{24,9,9}, -{24,9,10}, -{24,9,11}, -{24,9,12}, -{24,9,13}, -{24,9,14}, -{24,9,15}, -{24,9,16}, -{24,9,17}, -{24,9,18}, -{24,9,19}, -{24,9,20}, -{24,9,21}, -{24,9,22}, -{24,9,23}, -{24,9,24}, -{24,9,25}, -{24,9,26}, -{24,9,27}, -{24,9,28}, -{24,9,29}, -{24,9,30}, -{24,9,31}, -{24,9,32}, -{24,9,33}, -{24,10,-39}, -{24,10,-38}, -{24,10,-37}, -{24,10,-36}, -{24,10,-35}, -{24,10,-34}, -{24,10,-33}, -{24,10,-32}, -{24,10,-31}, -{24,10,-30}, -{24,10,-29}, -{24,10,-28}, -{24,10,-27}, -{24,10,-26}, -{24,10,-25}, -{24,10,-24}, -{24,10,-23}, -{24,10,-22}, -{24,10,-21}, -{24,10,-20}, -{24,10,-19}, -{24,10,-18}, -{24,10,-17}, -{24,10,-16}, -{24,10,-15}, -{24,10,-14}, -{24,10,-13}, -{24,10,-12}, -{24,10,-11}, -{24,10,-10}, -{24,10,-9}, -{24,10,-8}, -{24,10,-7}, -{24,10,-6}, -{24,10,-5}, -{24,10,-4}, -{24,10,-3}, -{24,10,-2}, -{24,10,-1}, -{24,10,0}, -{24,10,1}, -{24,10,2}, -{24,10,3}, -{24,10,4}, -{24,10,5}, -{24,10,6}, -{24,10,7}, -{24,10,8}, -{24,10,9}, -{24,10,10}, -{24,10,11}, -{24,10,12}, -{24,10,13}, -{24,10,14}, -{24,10,15}, -{24,10,16}, -{24,10,17}, -{24,10,18}, -{24,10,19}, -{24,10,20}, -{24,10,21}, -{24,10,22}, -{24,10,23}, -{24,10,24}, -{24,10,25}, -{24,10,26}, -{24,10,27}, -{24,10,28}, -{24,10,29}, -{24,10,30}, -{24,10,31}, -{24,10,32}, -{24,10,33}, -{24,11,-40}, -{24,11,-39}, -{24,11,-38}, -{24,11,-37}, -{24,11,-36}, -{24,11,-35}, -{24,11,-34}, -{24,11,-33}, -{24,11,-32}, -{24,11,-31}, -{24,11,-30}, -{24,11,-29}, -{24,11,-28}, -{24,11,-27}, -{24,11,-26}, -{24,11,-25}, -{24,11,-24}, -{24,11,-23}, -{24,11,-22}, -{24,11,-21}, -{24,11,-20}, -{24,11,-19}, -{24,11,-18}, -{24,11,-17}, -{24,11,-16}, -{24,11,-15}, -{24,11,-14}, -{24,11,-13}, -{24,11,-12}, -{24,11,-11}, -{24,11,-10}, -{24,11,-9}, -{24,11,-8}, -{24,11,-7}, -{24,11,-6}, -{24,11,-5}, -{24,11,-4}, -{24,11,-3}, -{24,11,-2}, -{24,11,-1}, -{24,11,0}, -{24,11,1}, -{24,11,2}, -{24,11,3}, -{24,11,4}, -{24,11,5}, -{24,11,6}, -{24,11,7}, -{24,11,8}, -{24,11,9}, -{24,11,10}, -{24,11,11}, -{24,11,12}, -{24,11,13}, -{24,11,14}, -{24,11,15}, -{24,11,16}, -{24,11,17}, -{24,11,18}, -{24,11,19}, -{24,11,20}, -{24,11,21}, -{24,11,22}, -{24,11,23}, -{24,11,24}, -{24,11,25}, -{24,11,26}, -{24,11,27}, -{24,11,28}, -{24,11,29}, -{24,11,30}, -{24,11,31}, -{24,11,32}, -{24,11,33}, -{24,12,-41}, -{24,12,-40}, -{24,12,-39}, -{24,12,-38}, -{24,12,-37}, -{24,12,-36}, -{24,12,-35}, -{24,12,-34}, -{24,12,-33}, -{24,12,-32}, -{24,12,-31}, -{24,12,-30}, -{24,12,-29}, -{24,12,-28}, -{24,12,-27}, -{24,12,-26}, -{24,12,-25}, -{24,12,-24}, -{24,12,-23}, -{24,12,-22}, -{24,12,-21}, -{24,12,-20}, -{24,12,-19}, -{24,12,-18}, -{24,12,-17}, -{24,12,-16}, -{24,12,-15}, -{24,12,-14}, -{24,12,-13}, -{24,12,-12}, -{24,12,-11}, -{24,12,-10}, -{24,12,-9}, -{24,12,-8}, -{24,12,-7}, -{24,12,-6}, -{24,12,-5}, -{24,12,-4}, -{24,12,-3}, -{24,12,-2}, -{24,12,-1}, -{24,12,0}, -{24,12,1}, -{24,12,2}, -{24,12,3}, -{24,12,4}, -{24,12,5}, -{24,12,6}, -{24,12,7}, -{24,12,8}, -{24,12,9}, -{24,12,10}, -{24,12,11}, -{24,12,12}, -{24,12,13}, -{24,12,14}, -{24,12,15}, -{24,12,16}, -{24,12,17}, -{24,12,18}, -{24,12,19}, -{24,12,20}, -{24,12,21}, -{24,12,22}, -{24,12,23}, -{24,12,24}, -{24,12,25}, -{24,12,26}, -{24,12,27}, -{24,12,28}, -{24,12,29}, -{24,12,30}, -{24,12,31}, -{24,12,32}, -{24,12,33}, -{24,13,-42}, -{24,13,-41}, -{24,13,-40}, -{24,13,-39}, -{24,13,-38}, -{24,13,-37}, -{24,13,-36}, -{24,13,-35}, -{24,13,-34}, -{24,13,-33}, -{24,13,-32}, -{24,13,-31}, -{24,13,-30}, -{24,13,-29}, -{24,13,-28}, -{24,13,-27}, -{24,13,-26}, -{24,13,-25}, -{24,13,-24}, -{24,13,-23}, -{24,13,-22}, -{24,13,-21}, -{24,13,-20}, -{24,13,-19}, -{24,13,-18}, -{24,13,-17}, -{24,13,-16}, -{24,13,-15}, -{24,13,-14}, -{24,13,-13}, -{24,13,-12}, -{24,13,-11}, -{24,13,-10}, -{24,13,-9}, -{24,13,-8}, -{24,13,-7}, -{24,13,-6}, -{24,13,-5}, -{24,13,-4}, -{24,13,-3}, -{24,13,-2}, -{24,13,-1}, -{24,13,0}, -{24,13,1}, -{24,13,2}, -{24,13,3}, -{24,13,4}, -{24,13,5}, -{24,13,6}, -{24,13,7}, -{24,13,8}, -{24,13,9}, -{24,13,10}, -{24,13,11}, -{24,13,12}, -{24,13,13}, -{24,13,14}, -{24,13,15}, -{24,13,16}, -{24,13,17}, -{24,13,18}, -{24,13,19}, -{24,13,20}, -{24,13,21}, -{24,13,22}, -{24,13,23}, -{24,13,24}, -{24,13,25}, -{24,13,26}, -{24,13,27}, -{24,13,28}, -{24,13,29}, -{24,13,30}, -{24,13,31}, -{24,13,32}, -{24,13,33}, -{24,14,-43}, -{24,14,-42}, -{24,14,-41}, -{24,14,-40}, -{24,14,-39}, -{24,14,-38}, -{24,14,-37}, -{24,14,-36}, -{24,14,-35}, -{24,14,-34}, -{24,14,-33}, -{24,14,-32}, -{24,14,-31}, -{24,14,-30}, -{24,14,-29}, -{24,14,-28}, -{24,14,-27}, -{24,14,-26}, -{24,14,-25}, -{24,14,-24}, -{24,14,-23}, -{24,14,-22}, -{24,14,-21}, -{24,14,-20}, -{24,14,-19}, -{24,14,-18}, -{24,14,-17}, -{24,14,-16}, -{24,14,-15}, -{24,14,-14}, -{24,14,-13}, -{24,14,-12}, -{24,14,-11}, -{24,14,-10}, -{24,14,-9}, -{24,14,-8}, -{24,14,-7}, -{24,14,-6}, -{24,14,-5}, -{24,14,-4}, -{24,14,-3}, -{24,14,-2}, -{24,14,-1}, -{24,14,0}, -{24,14,1}, -{24,14,2}, -{24,14,3}, -{24,14,4}, -{24,14,5}, -{24,14,6}, -{24,14,7}, -{24,14,8}, -{24,14,9}, -{24,14,10}, -{24,14,11}, -{24,14,12}, -{24,14,13}, -{24,14,14}, -{24,14,15}, -{24,14,16}, -{24,14,17}, -{24,14,18}, -{24,14,19}, -{24,14,20}, -{24,14,21}, -{24,14,22}, -{24,14,23}, -{24,14,24}, -{24,14,25}, -{24,14,26}, -{24,14,27}, -{24,14,28}, -{24,14,29}, -{24,14,30}, -{24,14,31}, -{24,14,32}, -{24,14,33}, -{24,15,-44}, -{24,15,-43}, -{24,15,-42}, -{24,15,-41}, -{24,15,-40}, -{24,15,-39}, -{24,15,-38}, -{24,15,-37}, -{24,15,-36}, -{24,15,-35}, -{24,15,-34}, -{24,15,-33}, -{24,15,-32}, -{24,15,-31}, -{24,15,-30}, -{24,15,-29}, -{24,15,-28}, -{24,15,-27}, -{24,15,-26}, -{24,15,-25}, -{24,15,-24}, -{24,15,-23}, -{24,15,-22}, -{24,15,-21}, -{24,15,-20}, -{24,15,-19}, -{24,15,-18}, -{24,15,-17}, -{24,15,-16}, -{24,15,-15}, -{24,15,-14}, -{24,15,-13}, -{24,15,-12}, -{24,15,-11}, -{24,15,-10}, -{24,15,-9}, -{24,15,-8}, -{24,15,-7}, -{24,15,-6}, -{24,15,-5}, -{24,15,-4}, -{24,15,-3}, -{24,15,-2}, -{24,15,-1}, -{24,15,0}, -{24,15,1}, -{24,15,2}, -{24,15,3}, -{24,15,4}, -{24,15,5}, -{24,15,6}, -{24,15,7}, -{24,15,8}, -{24,15,9}, -{24,15,10}, -{24,15,11}, -{24,15,12}, -{24,15,13}, -{24,15,14}, -{24,15,15}, -{24,15,16}, -{24,15,17}, -{24,15,18}, -{24,15,19}, -{24,15,20}, -{24,15,21}, -{24,15,22}, -{24,15,23}, -{24,15,24}, -{24,15,25}, -{24,15,26}, -{24,15,27}, -{24,15,28}, -{24,15,29}, -{24,15,30}, -{24,15,31}, -{24,15,32}, -{24,15,33}, -{24,15,34}, -{24,16,-45}, -{24,16,-44}, -{24,16,-43}, -{24,16,-42}, -{24,16,-41}, -{24,16,-40}, -{24,16,-39}, -{24,16,-38}, -{24,16,-37}, -{24,16,-36}, -{24,16,-35}, -{24,16,-34}, -{24,16,-33}, -{24,16,-32}, -{24,16,-31}, -{24,16,-30}, -{24,16,-29}, -{24,16,-28}, -{24,16,-27}, -{24,16,-26}, -{24,16,-25}, -{24,16,-24}, -{24,16,-23}, -{24,16,-22}, -{24,16,-21}, -{24,16,-20}, -{24,16,-19}, -{24,16,-18}, -{24,16,-17}, -{24,16,-16}, -{24,16,-15}, -{24,16,-14}, -{24,16,-13}, -{24,16,-12}, -{24,16,-11}, -{24,16,-10}, -{24,16,-9}, -{24,16,-8}, -{24,16,-7}, -{24,16,-6}, -{24,16,-5}, -{24,16,-4}, -{24,16,-3}, -{24,16,-2}, -{24,16,-1}, -{24,16,0}, -{24,16,1}, -{24,16,2}, -{24,16,3}, -{24,16,4}, -{24,16,5}, -{24,16,6}, -{24,16,7}, -{24,16,8}, -{24,16,9}, -{24,16,10}, -{24,16,11}, -{24,16,12}, -{24,16,13}, -{24,16,14}, -{24,16,15}, -{24,16,16}, -{24,16,17}, -{24,16,18}, -{24,16,19}, -{24,16,20}, -{24,16,21}, -{24,16,22}, -{24,16,23}, -{24,16,24}, -{24,16,25}, -{24,16,26}, -{24,16,27}, -{24,16,28}, -{24,16,29}, -{24,16,30}, -{24,16,31}, -{24,16,32}, -{24,16,33}, -{24,16,34}, -{24,17,-46}, -{24,17,-45}, -{24,17,-44}, -{24,17,-43}, -{24,17,-42}, -{24,17,-41}, -{24,17,-40}, -{24,17,-39}, -{24,17,-38}, -{24,17,-37}, -{24,17,-36}, -{24,17,-35}, -{24,17,-34}, -{24,17,-33}, -{24,17,-32}, -{24,17,-31}, -{24,17,-30}, -{24,17,-29}, -{24,17,-28}, -{24,17,-27}, -{24,17,-26}, -{24,17,-25}, -{24,17,-24}, -{24,17,-23}, -{24,17,-22}, -{24,17,-21}, -{24,17,-20}, -{24,17,-19}, -{24,17,-18}, -{24,17,-17}, -{24,17,-16}, -{24,17,-15}, -{24,17,-14}, -{24,17,-13}, -{24,17,-12}, -{24,17,-11}, -{24,17,-10}, -{24,17,-9}, -{24,17,-8}, -{24,17,-7}, -{24,17,-6}, -{24,17,-5}, -{24,17,-4}, -{24,17,-3}, -{24,17,-2}, -{24,17,-1}, -{24,17,0}, -{24,17,1}, -{24,17,2}, -{24,17,3}, -{24,17,4}, -{24,17,5}, -{24,17,6}, -{24,17,7}, -{24,17,8}, -{24,17,9}, -{24,17,10}, -{24,17,11}, -{24,17,12}, -{24,17,13}, -{24,17,14}, -{24,17,15}, -{24,17,16}, -{24,17,17}, -{24,17,18}, -{24,17,19}, -{24,17,20}, -{24,17,21}, -{24,17,22}, -{24,17,23}, -{24,17,24}, -{24,17,25}, -{24,17,26}, -{24,17,27}, -{24,17,28}, -{24,17,29}, -{24,17,30}, -{24,17,31}, -{24,17,32}, -{24,17,33}, -{24,17,34}, -{24,18,-47}, -{24,18,-46}, -{24,18,-45}, -{24,18,-44}, -{24,18,-43}, -{24,18,-42}, -{24,18,-41}, -{24,18,-40}, -{24,18,-39}, -{24,18,-38}, -{24,18,-37}, -{24,18,-36}, -{24,18,-35}, -{24,18,-34}, -{24,18,-33}, -{24,18,-32}, -{24,18,-31}, -{24,18,-30}, -{24,18,-29}, -{24,18,-28}, -{24,18,-27}, -{24,18,-26}, -{24,18,-25}, -{24,18,-24}, -{24,18,-23}, -{24,18,-22}, -{24,18,-21}, -{24,18,-20}, -{24,18,-19}, -{24,18,-18}, -{24,18,-17}, -{24,18,-16}, -{24,18,-15}, -{24,18,-14}, -{24,18,-13}, -{24,18,-12}, -{24,18,-11}, -{24,18,-10}, -{24,18,-9}, -{24,18,-8}, -{24,18,-7}, -{24,18,-6}, -{24,18,-5}, -{24,18,-4}, -{24,18,-3}, -{24,18,-2}, -{24,18,-1}, -{24,18,0}, -{24,18,1}, -{24,18,2}, -{24,18,3}, -{24,18,4}, -{24,18,5}, -{24,18,6}, -{24,18,7}, -{24,18,8}, -{24,18,9}, -{24,18,10}, -{24,18,11}, -{24,18,12}, -{24,18,13}, -{24,18,14}, -{24,18,15}, -{24,18,16}, -{24,18,17}, -{24,18,18}, -{24,18,19}, -{24,18,20}, -{24,18,21}, -{24,18,22}, -{24,18,23}, -{24,18,24}, -{24,18,25}, -{24,18,26}, -{24,18,27}, -{24,18,28}, -{24,18,29}, -{24,18,30}, -{24,18,31}, -{24,18,32}, -{24,18,33}, -{24,18,34}, -{24,19,-48}, -{24,19,-47}, -{24,19,-46}, -{24,19,-45}, -{24,19,-44}, -{24,19,-43}, -{24,19,-42}, -{24,19,-41}, -{24,19,-40}, -{24,19,-39}, -{24,19,-38}, -{24,19,-37}, -{24,19,-36}, -{24,19,-35}, -{24,19,-34}, -{24,19,-33}, -{24,19,-32}, -{24,19,-31}, -{24,19,-30}, -{24,19,-29}, -{24,19,-28}, -{24,19,-27}, -{24,19,-26}, -{24,19,-25}, -{24,19,-24}, -{24,19,-23}, -{24,19,-22}, -{24,19,-21}, -{24,19,-20}, -{24,19,-19}, -{24,19,-18}, -{24,19,-17}, -{24,19,-16}, -{24,19,-15}, -{24,19,-14}, -{24,19,-13}, -{24,19,-12}, -{24,19,-11}, -{24,19,-10}, -{24,19,-9}, -{24,19,-8}, -{24,19,-7}, -{24,19,-6}, -{24,19,-5}, -{24,19,-4}, -{24,19,-3}, -{24,19,-2}, -{24,19,-1}, -{24,19,0}, -{24,19,1}, -{24,19,2}, -{24,19,3}, -{24,19,4}, -{24,19,5}, -{24,19,6}, -{24,19,7}, -{24,19,8}, -{24,19,9}, -{24,19,10}, -{24,19,11}, -{24,19,12}, -{24,19,13}, -{24,19,14}, -{24,19,15}, -{24,19,16}, -{24,19,17}, -{24,19,18}, -{24,19,19}, -{24,19,20}, -{24,19,21}, -{24,19,22}, -{24,19,23}, -{24,19,24}, -{24,19,25}, -{24,19,26}, -{24,19,27}, -{24,19,28}, -{24,19,29}, -{24,19,30}, -{24,19,31}, -{24,19,32}, -{24,19,33}, -{24,19,34}, -{24,20,-49}, -{24,20,-48}, -{24,20,-47}, -{24,20,-46}, -{24,20,-45}, -{24,20,-44}, -{24,20,-43}, -{24,20,-42}, -{24,20,-41}, -{24,20,-40}, -{24,20,-39}, -{24,20,-38}, -{24,20,-37}, -{24,20,-36}, -{24,20,-35}, -{24,20,-34}, -{24,20,-33}, -{24,20,-32}, -{24,20,-31}, -{24,20,-30}, -{24,20,-29}, -{24,20,-28}, -{24,20,-27}, -{24,20,-26}, -{24,20,-25}, -{24,20,-24}, -{24,20,-23}, -{24,20,-22}, -{24,20,-21}, -{24,20,-20}, -{24,20,-19}, -{24,20,-18}, -{24,20,-17}, -{24,20,-16}, -{24,20,-15}, -{24,20,-14}, -{24,20,-13}, -{24,20,-12}, -{24,20,-11}, -{24,20,-10}, -{24,20,-9}, -{24,20,-8}, -{24,20,-7}, -{24,20,-6}, -{24,20,-5}, -{24,20,-4}, -{24,20,-3}, -{24,20,-2}, -{24,20,-1}, -{24,20,0}, -{24,20,1}, -{24,20,2}, -{24,20,3}, -{24,20,4}, -{24,20,5}, -{24,20,6}, -{24,20,7}, -{24,20,8}, -{24,20,9}, -{24,20,10}, -{24,20,11}, -{24,20,12}, -{24,20,13}, -{24,20,14}, -{24,20,15}, -{24,20,16}, -{24,20,17}, -{24,20,18}, -{24,20,19}, -{24,20,20}, -{24,20,21}, -{24,20,22}, -{24,20,23}, -{24,20,24}, -{24,20,25}, -{24,20,26}, -{24,20,27}, -{24,20,28}, -{24,20,29}, -{24,20,30}, -{24,20,31}, -{24,20,32}, -{24,20,33}, -{24,20,34}, -{24,21,-50}, -{24,21,-49}, -{24,21,-48}, -{24,21,-47}, -{24,21,-46}, -{24,21,-45}, -{24,21,-44}, -{24,21,-43}, -{24,21,-42}, -{24,21,-41}, -{24,21,-40}, -{24,21,-39}, -{24,21,-38}, -{24,21,-37}, -{24,21,-36}, -{24,21,-35}, -{24,21,-34}, -{24,21,-33}, -{24,21,-32}, -{24,21,-31}, -{24,21,-30}, -{24,21,-29}, -{24,21,-28}, -{24,21,-27}, -{24,21,-26}, -{24,21,-25}, -{24,21,-24}, -{24,21,-23}, -{24,21,-22}, -{24,21,-21}, -{24,21,-20}, -{24,21,-19}, -{24,21,-18}, -{24,21,-17}, -{24,21,-16}, -{24,21,-15}, -{24,21,-14}, -{24,21,-13}, -{24,21,-12}, -{24,21,-11}, -{24,21,-10}, -{24,21,-9}, -{24,21,-8}, -{24,21,-7}, -{24,21,-6}, -{24,21,-5}, -{24,21,-4}, -{24,21,-3}, -{24,21,-2}, -{24,21,-1}, -{24,21,0}, -{24,21,1}, -{24,21,2}, -{24,21,3}, -{24,21,4}, -{24,21,5}, -{24,21,6}, -{24,21,7}, -{24,21,8}, -{24,21,9}, -{24,21,10}, -{24,21,11}, -{24,21,12}, -{24,21,13}, -{24,21,14}, -{24,21,15}, -{24,21,16}, -{24,21,17}, -{24,21,18}, -{24,21,19}, -{24,21,20}, -{24,21,21}, -{24,21,22}, -{24,21,23}, -{24,21,24}, -{24,21,25}, -{24,21,26}, -{24,21,27}, -{24,21,28}, -{24,21,29}, -{24,21,30}, -{24,21,31}, -{24,21,32}, -{24,21,33}, -{24,21,34}, -{24,22,-51}, -{24,22,-50}, -{24,22,-49}, -{24,22,-48}, -{24,22,-47}, -{24,22,-46}, -{24,22,-45}, -{24,22,-44}, -{24,22,-43}, -{24,22,-42}, -{24,22,-41}, -{24,22,-40}, -{24,22,-39}, -{24,22,-38}, -{24,22,-37}, -{24,22,-36}, -{24,22,-35}, -{24,22,-34}, -{24,22,-33}, -{24,22,-32}, -{24,22,-31}, -{24,22,-30}, -{24,22,-29}, -{24,22,-28}, -{24,22,-27}, -{24,22,-26}, -{24,22,-25}, -{24,22,-24}, -{24,22,-23}, -{24,22,-22}, -{24,22,-21}, -{24,22,-20}, -{24,22,-19}, -{24,22,-18}, -{24,22,-17}, -{24,22,-16}, -{24,22,-15}, -{24,22,-14}, -{24,22,-13}, -{24,22,-12}, -{24,22,-11}, -{24,22,-10}, -{24,22,-9}, -{24,22,-8}, -{24,22,-7}, -{24,22,-6}, -{24,22,-5}, -{24,22,-4}, -{24,22,-3}, -{24,22,-2}, -{24,22,-1}, -{24,22,0}, -{24,22,1}, -{24,22,2}, -{24,22,3}, -{24,22,4}, -{24,22,5}, -{24,22,6}, -{24,22,7}, -{24,22,8}, -{24,22,9}, -{24,22,10}, -{24,22,11}, -{24,22,12}, -{24,22,13}, -{24,22,14}, -{24,22,15}, -{24,22,16}, -{24,22,17}, -{24,22,18}, -{24,22,19}, -{24,22,20}, -{24,22,21}, -{24,22,22}, -{24,22,23}, -{24,22,24}, -{24,22,25}, -{24,22,26}, -{24,22,27}, -{24,22,28}, -{24,22,29}, -{24,22,30}, -{24,22,31}, -{24,22,32}, -{24,22,33}, -{24,22,34}, -{24,23,-52}, -{24,23,-51}, -{24,23,-50}, -{24,23,-49}, -{24,23,-48}, -{24,23,-47}, -{24,23,-46}, -{24,23,-45}, -{24,23,-44}, -{24,23,-43}, -{24,23,-42}, -{24,23,-41}, -{24,23,-40}, -{24,23,-39}, -{24,23,-38}, -{24,23,-37}, -{24,23,-36}, -{24,23,-35}, -{24,23,-34}, -{24,23,-33}, -{24,23,-32}, -{24,23,-31}, -{24,23,-30}, -{24,23,-29}, -{24,23,-28}, -{24,23,-27}, -{24,23,-26}, -{24,23,-25}, -{24,23,-24}, -{24,23,-23}, -{24,23,-22}, -{24,23,-21}, -{24,23,-20}, -{24,23,-19}, -{24,23,-18}, -{24,23,-17}, -{24,23,-16}, -{24,23,-15}, -{24,23,-14}, -{24,23,-13}, -{24,23,-12}, -{24,23,-11}, -{24,23,-10}, -{24,23,-9}, -{24,23,-8}, -{24,23,-7}, -{24,23,-6}, -{24,23,-5}, -{24,23,-4}, -{24,23,-3}, -{24,23,-2}, -{24,23,-1}, -{24,23,0}, -{24,23,1}, -{24,23,2}, -{24,23,3}, -{24,23,4}, -{24,23,5}, -{24,23,6}, -{24,23,7}, -{24,23,8}, -{24,23,9}, -{24,23,10}, -{24,23,11}, -{24,23,12}, -{24,23,13}, -{24,23,14}, -{24,23,15}, -{24,23,16}, -{24,23,17}, -{24,23,18}, -{24,23,19}, -{24,23,20}, -{24,23,21}, -{24,23,22}, -{24,23,23}, -{24,23,24}, -{24,23,25}, -{24,23,26}, -{24,23,27}, -{24,23,28}, -{24,23,29}, -{24,23,30}, -{24,23,31}, -{24,23,32}, -{24,23,33}, -{24,23,34}, -{24,24,-53}, -{24,24,-52}, -{24,24,-51}, -{24,24,-50}, -{24,24,-49}, -{24,24,-48}, -{24,24,-47}, -{24,24,-46}, -{24,24,-45}, -{24,24,-44}, -{24,24,-43}, -{24,24,-42}, -{24,24,-41}, -{24,24,-40}, -{24,24,-39}, -{24,24,-38}, -{24,24,-37}, -{24,24,-36}, -{24,24,-35}, -{24,24,-34}, -{24,24,-33}, -{24,24,-32}, -{24,24,-31}, -{24,24,-30}, -{24,24,-29}, -{24,24,-28}, -{24,24,-27}, -{24,24,-26}, -{24,24,-25}, -{24,24,-24}, -{24,24,-23}, -{24,24,-22}, -{24,24,-21}, -{24,24,-20}, -{24,24,-19}, -{24,24,-18}, -{24,24,-17}, -{24,24,-16}, -{24,24,-15}, -{24,24,-14}, -{24,24,-13}, -{24,24,-12}, -{24,24,-11}, -{24,24,-10}, -{24,24,-9}, -{24,24,-8}, -{24,24,-7}, -{24,24,-6}, -{24,24,-5}, -{24,24,-4}, -{24,24,-3}, -{24,24,-2}, -{24,24,-1}, -{24,24,0}, -{24,24,1}, -{24,24,2}, -{24,24,3}, -{24,24,4}, -{24,24,5}, -{24,24,6}, -{24,24,7}, -{24,24,8}, -{24,24,9}, -{24,24,10}, -{24,24,11}, -{24,24,12}, -{24,24,13}, -{24,24,14}, -{24,24,15}, -{24,24,16}, -{24,24,17}, -{24,24,18}, -{24,24,19}, -{24,24,20}, -{24,24,21}, -{24,24,22}, -{24,24,23}, -{24,24,24}, -{24,24,25}, -{24,24,26}, -{24,24,27}, -{24,24,28}, -{24,24,29}, -{24,24,30}, -{24,24,31}, -{24,24,32}, -{24,24,33}, -{24,24,34}, -{24,25,-54}, -{24,25,-53}, -{24,25,-52}, -{24,25,-51}, -{24,25,-50}, -{24,25,-49}, -{24,25,-48}, -{24,25,-47}, -{24,25,-46}, -{24,25,-45}, -{24,25,-44}, -{24,25,-43}, -{24,25,-42}, -{24,25,-41}, -{24,25,-40}, -{24,25,-39}, -{24,25,-38}, -{24,25,-37}, -{24,25,-36}, -{24,25,-35}, -{24,25,-34}, -{24,25,-33}, -{24,25,-32}, -{24,25,-31}, -{24,25,-30}, -{24,25,-29}, -{24,25,-28}, -{24,25,-27}, -{24,25,-26}, -{24,25,-25}, -{24,25,-24}, -{24,25,-23}, -{24,25,-22}, -{24,25,-21}, -{24,25,-20}, -{24,25,-19}, -{24,25,-18}, -{24,25,-17}, -{24,25,-16}, -{24,25,-15}, -{24,25,-14}, -{24,25,-13}, -{24,25,-12}, -{24,25,-11}, -{24,25,-10}, -{24,25,-9}, -{24,25,-8}, -{24,25,-7}, -{24,25,-6}, -{24,25,-5}, -{24,25,-4}, -{24,25,-3}, -{24,25,-2}, -{24,25,-1}, -{24,25,0}, -{24,25,1}, -{24,25,2}, -{24,25,3}, -{24,25,4}, -{24,25,5}, -{24,25,6}, -{24,25,7}, -{24,25,8}, -{24,25,9}, -{24,25,10}, -{24,25,11}, -{24,25,12}, -{24,25,13}, -{24,25,14}, -{24,25,15}, -{24,25,16}, -{24,25,17}, -{24,25,18}, -{24,25,19}, -{24,25,20}, -{24,25,21}, -{24,25,22}, -{24,25,23}, -{24,25,24}, -{24,25,25}, -{24,25,26}, -{24,25,27}, -{24,25,28}, -{24,25,29}, -{24,25,30}, -{24,25,31}, -{24,25,32}, -{24,25,33}, -{24,25,34}, -{24,26,-55}, -{24,26,-54}, -{24,26,-53}, -{24,26,-52}, -{24,26,-51}, -{24,26,-50}, -{24,26,-49}, -{24,26,-48}, -{24,26,-47}, -{24,26,-46}, -{24,26,-45}, -{24,26,-44}, -{24,26,-43}, -{24,26,-42}, -{24,26,-41}, -{24,26,-40}, -{24,26,-39}, -{24,26,-38}, -{24,26,-37}, -{24,26,-36}, -{24,26,-35}, -{24,26,-34}, -{24,26,-33}, -{24,26,-32}, -{24,26,-31}, -{24,26,-30}, -{24,26,-29}, -{24,26,-28}, -{24,26,-27}, -{24,26,-26}, -{24,26,-25}, -{24,26,-24}, -{24,26,-23}, -{24,26,-22}, -{24,26,-21}, -{24,26,-20}, -{24,26,-19}, -{24,26,-18}, -{24,26,-17}, -{24,26,-16}, -{24,26,-15}, -{24,26,-14}, -{24,26,-13}, -{24,26,-12}, -{24,26,-11}, -{24,26,-10}, -{24,26,-9}, -{24,26,-8}, -{24,26,-7}, -{24,26,-6}, -{24,26,-5}, -{24,26,-4}, -{24,26,-3}, -{24,26,-2}, -{24,26,-1}, -{24,26,0}, -{24,26,1}, -{24,26,2}, -{24,26,3}, -{24,26,4}, -{24,26,5}, -{24,26,6}, -{24,26,7}, -{24,26,8}, -{24,26,9}, -{24,26,10}, -{24,26,11}, -{24,26,12}, -{24,26,13}, -{24,26,14}, -{24,26,15}, -{24,26,16}, -{24,26,17}, -{24,26,18}, -{24,26,19}, -{24,26,20}, -{24,26,21}, -{24,26,22}, -{24,26,23}, -{24,26,24}, -{24,26,25}, -{24,26,26}, -{24,26,27}, -{24,26,28}, -{24,26,29}, -{24,26,30}, -{24,26,31}, -{24,26,32}, -{24,26,33}, -{24,26,34}, -{24,27,-56}, -{24,27,-55}, -{24,27,-54}, -{24,27,-53}, -{24,27,-52}, -{24,27,-51}, -{24,27,-50}, -{24,27,-49}, -{24,27,-48}, -{24,27,-47}, -{24,27,-46}, -{24,27,-45}, -{24,27,-44}, -{24,27,-43}, -{24,27,-42}, -{24,27,-41}, -{24,27,-40}, -{24,27,-39}, -{24,27,-38}, -{24,27,-37}, -{24,27,-36}, -{24,27,-35}, -{24,27,-34}, -{24,27,-33}, -{24,27,-32}, -{24,27,-31}, -{24,27,-30}, -{24,27,-29}, -{24,27,-28}, -{24,27,-27}, -{24,27,-26}, -{24,27,-25}, -{24,27,-24}, -{24,27,-23}, -{24,27,-22}, -{24,27,-21}, -{24,27,-20}, -{24,27,-19}, -{24,27,-18}, -{24,27,-17}, -{24,27,-16}, -{24,27,-15}, -{24,27,-14}, -{24,27,-13}, -{24,27,-12}, -{24,27,-11}, -{24,27,-10}, -{24,27,-9}, -{24,27,-8}, -{24,27,-7}, -{24,27,-6}, -{24,27,-5}, -{24,27,-4}, -{24,27,-3}, -{24,27,-2}, -{24,27,-1}, -{24,27,0}, -{24,27,1}, -{24,27,2}, -{24,27,3}, -{24,27,4}, -{24,27,5}, -{24,27,6}, -{24,27,7}, -{24,27,8}, -{24,27,9}, -{24,27,10}, -{24,27,11}, -{24,27,12}, -{24,27,13}, -{24,27,14}, -{24,27,15}, -{24,27,16}, -{24,27,17}, -{24,27,18}, -{24,27,19}, -{24,27,20}, -{24,27,21}, -{24,27,22}, -{24,27,23}, -{24,27,24}, -{24,27,25}, -{24,27,26}, -{24,27,27}, -{24,27,28}, -{24,27,29}, -{24,27,30}, -{24,27,31}, -{24,27,32}, -{24,27,33}, -{24,27,34}, -{24,28,-57}, -{24,28,-56}, -{24,28,-55}, -{24,28,-54}, -{24,28,-53}, -{24,28,-52}, -{24,28,-51}, -{24,28,-50}, -{24,28,-49}, -{24,28,-48}, -{24,28,-47}, -{24,28,-46}, -{24,28,-45}, -{24,28,-44}, -{24,28,-43}, -{24,28,-42}, -{24,28,-41}, -{24,28,-40}, -{24,28,-39}, -{24,28,-38}, -{24,28,-37}, -{24,28,-36}, -{24,28,-35}, -{24,28,-34}, -{24,28,-33}, -{24,28,-32}, -{24,28,-31}, -{24,28,-30}, -{24,28,-29}, -{24,28,-28}, -{24,28,-27}, -{24,28,-26}, -{24,28,-25}, -{24,28,-24}, -{24,28,-23}, -{24,28,-22}, -{24,28,-21}, -{24,28,-20}, -{24,28,-19}, -{24,28,-18}, -{24,28,-17}, -{24,28,-16}, -{24,28,-15}, -{24,28,-14}, -{24,28,-13}, -{24,28,-12}, -{24,28,-11}, -{24,28,-10}, -{24,28,-9}, -{24,28,-8}, -{24,28,-7}, -{24,28,-6}, -{24,28,-5}, -{24,28,-4}, -{24,28,-3}, -{24,28,-2}, -{24,28,-1}, -{24,28,0}, -{24,28,1}, -{24,28,2}, -{24,28,3}, -{24,28,4}, -{24,28,5}, -{24,28,6}, -{24,28,7}, -{24,28,8}, -{24,28,9}, -{24,28,10}, -{24,28,11}, -{24,28,12}, -{24,28,13}, -{24,28,14}, -{24,28,15}, -{24,28,16}, -{24,28,17}, -{24,28,18}, -{24,28,19}, -{24,28,20}, -{24,28,21}, -{24,28,22}, -{24,28,23}, -{24,28,24}, -{24,28,25}, -{24,28,26}, -{24,28,27}, -{24,28,28}, -{24,28,29}, -{24,28,30}, -{24,28,31}, -{24,28,32}, -{24,28,33}, -{24,28,34}, -{24,29,-58}, -{24,29,-57}, -{24,29,-56}, -{24,29,-55}, -{24,29,-54}, -{24,29,-53}, -{24,29,-52}, -{24,29,-51}, -{24,29,-50}, -{24,29,-49}, -{24,29,-48}, -{24,29,-47}, -{24,29,-46}, -{24,29,-45}, -{24,29,-44}, -{24,29,-43}, -{24,29,-42}, -{24,29,-41}, -{24,29,-40}, -{24,29,-39}, -{24,29,-38}, -{24,29,-37}, -{24,29,-36}, -{24,29,-35}, -{24,29,-34}, -{24,29,-33}, -{24,29,-32}, -{24,29,-31}, -{24,29,-30}, -{24,29,-29}, -{24,29,-28}, -{24,29,-27}, -{24,29,-26}, -{24,29,-25}, -{24,29,-24}, -{24,29,-23}, -{24,29,-22}, -{24,29,-21}, -{24,29,-20}, -{24,29,-19}, -{24,29,-18}, -{24,29,-17}, -{24,29,-16}, -{24,29,-15}, -{24,29,-14}, -{24,29,-13}, -{24,29,-12}, -{24,29,-11}, -{24,29,-10}, -{24,29,-9}, -{24,29,-8}, -{24,29,-7}, -{24,29,-6}, -{24,29,-5}, -{24,29,-4}, -{24,29,-3}, -{24,29,-2}, -{24,29,-1}, -{24,29,0}, -{24,29,1}, -{24,29,2}, -{24,29,3}, -{24,29,4}, -{24,29,5}, -{24,29,6}, -{24,29,7}, -{24,29,8}, -{24,29,9}, -{24,29,10}, -{24,29,11}, -{24,29,12}, -{24,29,13}, -{24,29,14}, -{24,29,15}, -{24,29,16}, -{24,29,17}, -{24,29,18}, -{24,29,19}, -{24,29,20}, -{24,29,21}, -{24,29,22}, -{24,29,23}, -{24,29,24}, -{24,29,25}, -{24,29,26}, -{24,29,27}, -{24,29,28}, -{24,29,29}, -{24,29,30}, -{24,29,31}, -{24,29,32}, -{24,29,33}, -{24,29,34}, -{24,30,-58}, -{24,30,-57}, -{24,30,-56}, -{24,30,-55}, -{24,30,-54}, -{24,30,-53}, -{24,30,-52}, -{24,30,-51}, -{24,30,-50}, -{24,30,-49}, -{24,30,-48}, -{24,30,-47}, -{24,30,-46}, -{24,30,-45}, -{24,30,-44}, -{24,30,-43}, -{24,30,-42}, -{24,30,-41}, -{24,30,-40}, -{24,30,-39}, -{24,30,-38}, -{24,30,-37}, -{24,30,-36}, -{24,30,-35}, -{24,30,-34}, -{24,30,-33}, -{24,30,-32}, -{24,30,-31}, -{24,30,-30}, -{24,30,-29}, -{24,30,-28}, -{24,30,-27}, -{24,30,-26}, -{24,30,-25}, -{24,30,-24}, -{24,30,-23}, -{24,30,-22}, -{24,30,-21}, -{24,30,-20}, -{24,30,-19}, -{24,30,-18}, -{24,30,-17}, -{24,30,-16}, -{24,30,-15}, -{24,30,-14}, -{24,30,-13}, -{24,30,-12}, -{24,30,-11}, -{24,30,-10}, -{24,30,-9}, -{24,30,-8}, -{24,30,-7}, -{24,30,-6}, -{24,30,-5}, -{24,30,-4}, -{24,30,-3}, -{24,30,-2}, -{24,30,-1}, -{24,30,0}, -{24,30,1}, -{24,30,2}, -{24,30,3}, -{24,30,4}, -{24,30,5}, -{24,30,6}, -{24,30,7}, -{24,30,8}, -{24,30,9}, -{24,30,10}, -{24,30,11}, -{24,30,12}, -{24,30,13}, -{24,30,14}, -{24,30,15}, -{24,30,16}, -{24,30,17}, -{24,30,18}, -{24,30,19}, -{24,30,20}, -{24,30,21}, -{24,30,22}, -{24,30,23}, -{24,30,24}, -{24,30,25}, -{24,30,26}, -{24,30,27}, -{24,30,28}, -{24,30,29}, -{24,30,30}, -{24,30,31}, -{24,30,32}, -{24,30,33}, -{24,30,34}, -{24,30,35}, -{24,31,-59}, -{24,31,-58}, -{24,31,-57}, -{24,31,-56}, -{24,31,-55}, -{24,31,-54}, -{24,31,-53}, -{24,31,-52}, -{24,31,-51}, -{24,31,-50}, -{24,31,-49}, -{24,31,-48}, -{24,31,-47}, -{24,31,-46}, -{24,31,-45}, -{24,31,-44}, -{24,31,-43}, -{24,31,-42}, -{24,31,-41}, -{24,31,-40}, -{24,31,-39}, -{24,31,-38}, -{24,31,-37}, -{24,31,-36}, -{24,31,-35}, -{24,31,-34}, -{24,31,-33}, -{24,31,-32}, -{24,31,-31}, -{24,31,-30}, -{24,31,-29}, -{24,31,-28}, -{24,31,-27}, -{24,31,-26}, -{24,31,-25}, -{24,31,-24}, -{24,31,-23}, -{24,31,-22}, -{24,31,-21}, -{24,31,-20}, -{24,31,-19}, -{24,31,-18}, -{24,31,-17}, -{24,31,-16}, -{24,31,-15}, -{24,31,-14}, -{24,31,-13}, -{24,31,-12}, -{24,31,-11}, -{24,31,-10}, -{24,31,-9}, -{24,31,-8}, -{24,31,-7}, -{24,31,-6}, -{24,31,-5}, -{24,31,-4}, -{24,31,-3}, -{24,31,-2}, -{24,31,-1}, -{24,31,0}, -{24,31,1}, -{24,31,2}, -{24,31,3}, -{24,31,4}, -{24,31,5}, -{24,31,6}, -{24,31,7}, -{24,31,8}, -{24,31,9}, -{24,31,10}, -{24,31,11}, -{24,31,12}, -{24,31,13}, -{24,31,14}, -{24,31,15}, -{24,31,16}, -{24,31,17}, -{24,31,18}, -{24,31,19}, -{24,31,20}, -{24,31,21}, -{24,31,22}, -{24,31,23}, -{24,31,24}, -{24,31,25}, -{24,31,26}, -{24,31,27}, -{24,31,28}, -{24,31,29}, -{24,31,30}, -{24,31,31}, -{24,31,32}, -{24,31,33}, -{24,31,34}, -{24,31,35}, -{24,32,-60}, -{24,32,-59}, -{24,32,-58}, -{24,32,-57}, -{24,32,-56}, -{24,32,-55}, -{24,32,-54}, -{24,32,-53}, -{24,32,-52}, -{24,32,-51}, -{24,32,-50}, -{24,32,-49}, -{24,32,-48}, -{24,32,-47}, -{24,32,-46}, -{24,32,-45}, -{24,32,-44}, -{24,32,-43}, -{24,32,-42}, -{24,32,-41}, -{24,32,-40}, -{24,32,-39}, -{24,32,-38}, -{24,32,-37}, -{24,32,-36}, -{24,32,-35}, -{24,32,-34}, -{24,32,-33}, -{24,32,-32}, -{24,32,-31}, -{24,32,-30}, -{24,32,-29}, -{24,32,-28}, -{24,32,-27}, -{24,32,-26}, -{24,32,-25}, -{24,32,-24}, -{24,32,-23}, -{24,32,-22}, -{24,32,-21}, -{24,32,-20}, -{24,32,-19}, -{24,32,-18}, -{24,32,-17}, -{24,32,-16}, -{24,32,-15}, -{24,32,-14}, -{24,32,-13}, -{24,32,-12}, -{24,32,-11}, -{24,32,-10}, -{24,32,-9}, -{24,32,-8}, -{24,32,-7}, -{24,32,-6}, -{24,32,-5}, -{24,32,-4}, -{24,32,-3}, -{24,32,-2}, -{24,32,-1}, -{24,32,0}, -{24,32,1}, -{24,32,2}, -{24,32,3}, -{24,32,4}, -{24,32,5}, -{24,32,6}, -{24,32,7}, -{24,32,8}, -{24,32,9}, -{24,32,10}, -{24,32,11}, -{24,32,12}, -{24,32,13}, -{24,32,14}, -{24,32,15}, -{24,32,16}, -{24,32,17}, -{24,32,18}, -{24,32,19}, -{24,32,20}, -{24,32,21}, -{24,32,22}, -{24,32,23}, -{24,32,24}, -{24,32,25}, -{24,32,26}, -{24,32,27}, -{24,32,28}, -{24,32,29}, -{24,32,30}, -{24,32,31}, -{24,32,32}, -{24,32,33}, -{24,32,34}, -{24,32,35}, -{24,33,-61}, -{24,33,-60}, -{24,33,-59}, -{24,33,-58}, -{24,33,-57}, -{24,33,-56}, -{24,33,-55}, -{24,33,-54}, -{24,33,-53}, -{24,33,-52}, -{24,33,-51}, -{24,33,-50}, -{24,33,-49}, -{24,33,-48}, -{24,33,-47}, -{24,33,-46}, -{24,33,-45}, -{24,33,-44}, -{24,33,-43}, -{24,33,-42}, -{24,33,-41}, -{24,33,-40}, -{24,33,-39}, -{24,33,-38}, -{24,33,-37}, -{24,33,-36}, -{24,33,-35}, -{24,33,-34}, -{24,33,-33}, -{24,33,-32}, -{24,33,-31}, -{24,33,-30}, -{24,33,-29}, -{24,33,-28}, -{24,33,-27}, -{24,33,-26}, -{24,33,-25}, -{24,33,-24}, -{24,33,-23}, -{24,33,-22}, -{24,33,-21}, -{24,33,-20}, -{24,33,-19}, -{24,33,-18}, -{24,33,-17}, -{24,33,-16}, -{24,33,-15}, -{24,33,-14}, -{24,33,-13}, -{24,33,-12}, -{24,33,-11}, -{24,33,-10}, -{24,33,-9}, -{24,33,-8}, -{24,33,-7}, -{24,33,-6}, -{24,33,-5}, -{24,33,-4}, -{24,33,-3}, -{24,33,-2}, -{24,33,-1}, -{24,33,0}, -{24,33,1}, -{24,33,2}, -{24,33,3}, -{24,33,4}, -{24,33,5}, -{24,33,6}, -{24,33,7}, -{24,33,8}, -{24,33,9}, -{24,33,10}, -{24,33,11}, -{24,33,12}, -{24,33,13}, -{24,33,14}, -{24,33,15}, -{24,33,16}, -{24,33,17}, -{24,33,18}, -{24,33,19}, -{24,33,20}, -{24,33,21}, -{24,33,22}, -{24,33,23}, -{24,33,24}, -{24,33,25}, -{24,33,26}, -{24,33,27}, -{24,33,28}, -{24,33,29}, -{24,33,30}, -{24,33,31}, -{24,33,32}, -{24,33,33}, -{24,33,34}, -{24,33,35}, -{24,34,-62}, -{24,34,-61}, -{24,34,-60}, -{24,34,-59}, -{24,34,-58}, -{24,34,-57}, -{24,34,-56}, -{24,34,-55}, -{24,34,-54}, -{24,34,-53}, -{24,34,-52}, -{24,34,-51}, -{24,34,-50}, -{24,34,-49}, -{24,34,-48}, -{24,34,-47}, -{24,34,-46}, -{24,34,-45}, -{24,34,-44}, -{24,34,-43}, -{24,34,-42}, -{24,34,-41}, -{24,34,-40}, -{24,34,-39}, -{24,34,-38}, -{24,34,-37}, -{24,34,-36}, -{24,34,-35}, -{24,34,-34}, -{24,34,-33}, -{24,34,-32}, -{24,34,-31}, -{24,34,-30}, -{24,34,-29}, -{24,34,-28}, -{24,34,-27}, -{24,34,-26}, -{24,34,-25}, -{24,34,-24}, -{24,34,-23}, -{24,34,-22}, -{24,34,-21}, -{24,34,-20}, -{24,34,-19}, -{24,34,-18}, -{24,34,-17}, -{24,34,-16}, -{24,34,-15}, -{24,34,-14}, -{24,34,-13}, -{24,34,-12}, -{24,34,-11}, -{24,34,-10}, -{24,34,-9}, -{24,34,-8}, -{24,34,-7}, -{24,34,-6}, -{24,34,-5}, -{24,34,-4}, -{24,34,-3}, -{24,34,-2}, -{24,34,-1}, -{24,34,0}, -{24,34,1}, -{24,34,2}, -{24,34,3}, -{24,34,4}, -{24,34,5}, -{24,34,6}, -{24,34,7}, -{24,34,8}, -{24,34,9}, -{24,34,10}, -{24,34,11}, -{24,34,12}, -{24,34,13}, -{24,34,14}, -{24,34,15}, -{24,34,16}, -{24,34,17}, -{24,34,18}, -{24,34,19}, -{24,34,20}, -{24,34,21}, -{24,34,22}, -{24,34,23}, -{24,34,24}, -{24,34,25}, -{24,34,26}, -{24,34,27}, -{24,34,28}, -{24,34,29}, -{24,34,30}, -{24,34,31}, -{24,34,32}, -{24,34,33}, -{24,34,34}, -{24,34,35}, -{24,35,-63}, -{24,35,-62}, -{24,35,-61}, -{24,35,-60}, -{24,35,-59}, -{24,35,-58}, -{24,35,-57}, -{24,35,-56}, -{24,35,-55}, -{24,35,-54}, -{24,35,-53}, -{24,35,-52}, -{24,35,-51}, -{24,35,-50}, -{24,35,-49}, -{24,35,-48}, -{24,35,-47}, -{24,35,-46}, -{24,35,-45}, -{24,35,-44}, -{24,35,-43}, -{24,35,-42}, -{24,35,-41}, -{24,35,-40}, -{24,35,-39}, -{24,35,-38}, -{24,35,-37}, -{24,35,-36}, -{24,35,-35}, -{24,35,-34}, -{24,35,-33}, -{24,35,-32}, -{24,35,-31}, -{24,35,-30}, -{24,35,-29}, -{24,35,-28}, -{24,35,-27}, -{24,35,-26}, -{24,35,-25}, -{24,35,-24}, -{24,35,-23}, -{24,35,-22}, -{24,35,-21}, -{24,35,-20}, -{24,35,-19}, -{24,35,-18}, -{24,35,-17}, -{24,35,-16}, -{24,35,-15}, -{24,35,-14}, -{24,35,-13}, -{24,35,-12}, -{24,35,-11}, -{24,35,-10}, -{24,35,-9}, -{24,35,-8}, -{24,35,-7}, -{24,35,-6}, -{24,35,-5}, -{24,35,-4}, -{24,35,-3}, -{24,35,-2}, -{24,35,-1}, -{24,35,0}, -{24,35,1}, -{24,35,2}, -{24,35,3}, -{24,35,4}, -{24,35,5}, -{24,35,6}, -{24,35,7}, -{24,35,8}, -{24,35,9}, -{24,35,10}, -{24,35,11}, -{24,35,12}, -{24,35,13}, -{24,35,14}, -{24,35,15}, -{24,35,16}, -{24,35,17}, -{24,35,18}, -{24,35,19}, -{24,35,20}, -{24,35,21}, -{24,35,22}, -{24,35,23}, -{24,35,24}, -{24,35,25}, -{24,35,26}, -{24,35,27}, -{24,35,28}, -{24,35,29}, -{24,35,30}, -{24,35,31}, -{24,35,32}, -{24,35,33}, -{24,35,34}, -{24,35,35}, -{24,36,-64}, -{24,36,-63}, -{24,36,-62}, -{24,36,-61}, -{24,36,-60}, -{24,36,-59}, -{24,36,-58}, -{24,36,-57}, -{24,36,-56}, -{24,36,-55}, -{24,36,-54}, -{24,36,-53}, -{24,36,-52}, -{24,36,-51}, -{24,36,-50}, -{24,36,-49}, -{24,36,-48}, -{24,36,-47}, -{24,36,-46}, -{24,36,-45}, -{24,36,-44}, -{24,36,-43}, -{24,36,-42}, -{24,36,-41}, -{24,36,-40}, -{24,36,-39}, -{24,36,-38}, -{24,36,-37}, -{24,36,-36}, -{24,36,-35}, -{24,36,-34}, -{24,36,-33}, -{24,36,-32}, -{24,36,-31}, -{24,36,-30}, -{24,36,-29}, -{24,36,-28}, -{24,36,-27}, -{24,36,-26}, -{24,36,-25}, -{24,36,-24}, -{24,36,-23}, -{24,36,-22}, -{24,36,-21}, -{24,36,-20}, -{24,36,-19}, -{24,36,-18}, -{24,36,-17}, -{24,36,-16}, -{24,36,-15}, -{24,36,-14}, -{24,36,-13}, -{24,36,-12}, -{24,36,-11}, -{24,36,-10}, -{24,36,-9}, -{24,36,-8}, -{24,36,-7}, -{24,36,-6}, -{24,36,-5}, -{24,36,-4}, -{24,36,-3}, -{24,36,-2}, -{24,36,-1}, -{24,36,0}, -{24,36,1}, -{24,36,2}, -{24,36,3}, -{24,36,4}, -{24,36,5}, -{24,36,6}, -{24,36,7}, -{24,36,8}, -{24,36,9}, -{24,36,10}, -{24,36,11}, -{24,36,12}, -{24,36,13}, -{24,36,14}, -{24,36,15}, -{24,36,16}, -{24,36,17}, -{24,36,18}, -{24,36,19}, -{24,36,20}, -{24,36,21}, -{24,36,22}, -{24,36,23}, -{24,36,24}, -{24,36,25}, -{24,36,26}, -{24,36,27}, -{24,36,28}, -{24,36,29}, -{24,36,30}, -{24,36,31}, -{24,36,32}, -{24,36,33}, -{24,36,34}, -{24,36,35}, -{24,37,-65}, -{24,37,-64}, -{24,37,-63}, -{24,37,-62}, -{24,37,-61}, -{24,37,-60}, -{24,37,-59}, -{24,37,-58}, -{24,37,-57}, -{24,37,-56}, -{24,37,-55}, -{24,37,-54}, -{24,37,-53}, -{24,37,-52}, -{24,37,-51}, -{24,37,-50}, -{24,37,-49}, -{24,37,-48}, -{24,37,-47}, -{24,37,-46}, -{24,37,-45}, -{24,37,-44}, -{24,37,-43}, -{24,37,-42}, -{24,37,-41}, -{24,37,-40}, -{24,37,-39}, -{24,37,-38}, -{24,37,-37}, -{24,37,-36}, -{24,37,-35}, -{24,37,-34}, -{24,37,-33}, -{24,37,-32}, -{24,37,-31}, -{24,37,-30}, -{24,37,-29}, -{24,37,-28}, -{24,37,-27}, -{24,37,-26}, -{24,37,-25}, -{24,37,-24}, -{24,37,-23}, -{24,37,-22}, -{24,37,-21}, -{24,37,-20}, -{24,37,-19}, -{24,37,-18}, -{24,37,-17}, -{24,37,-16}, -{24,37,-15}, -{24,37,-14}, -{24,37,-13}, -{24,37,-12}, -{24,37,-11}, -{24,37,-10}, -{24,37,-9}, -{24,37,-8}, -{24,37,-7}, -{24,37,-6}, -{24,37,-5}, -{24,37,-4}, -{24,37,-3}, -{24,37,-2}, -{24,37,-1}, -{24,37,0}, -{24,37,1}, -{24,37,2}, -{24,37,3}, -{24,37,4}, -{24,37,5}, -{24,37,6}, -{24,37,7}, -{24,37,8}, -{24,37,9}, -{24,37,10}, -{24,37,11}, -{24,37,12}, -{24,37,13}, -{24,37,14}, -{24,37,15}, -{24,37,16}, -{24,37,17}, -{24,37,18}, -{24,37,19}, -{24,37,20}, -{24,37,21}, -{24,37,22}, -{24,37,23}, -{24,37,24}, -{24,37,25}, -{24,37,26}, -{24,37,27}, -{24,37,28}, -{24,37,29}, -{24,37,30}, -{24,37,31}, -{24,37,32}, -{24,37,33}, -{24,37,34}, -{24,37,35}, -{24,38,-66}, -{24,38,-65}, -{24,38,-64}, -{24,38,-63}, -{24,38,-62}, -{24,38,-61}, -{24,38,-60}, -{24,38,-59}, -{24,38,-58}, -{24,38,-57}, -{24,38,-56}, -{24,38,-55}, -{24,38,-54}, -{24,38,-53}, -{24,38,-52}, -{24,38,-51}, -{24,38,-50}, -{24,38,-49}, -{24,38,-48}, -{24,38,-47}, -{24,38,-46}, -{24,38,-45}, -{24,38,-44}, -{24,38,-43}, -{24,38,-42}, -{24,38,-41}, -{24,38,-40}, -{24,38,-39}, -{24,38,-38}, -{24,38,-37}, -{24,38,-36}, -{24,38,-35}, -{24,38,-34}, -{24,38,-33}, -{24,38,-32}, -{24,38,-31}, -{24,38,-30}, -{24,38,-29}, -{24,38,-28}, -{24,38,-27}, -{24,38,-26}, -{24,38,-25}, -{24,38,-24}, -{24,38,-23}, -{24,38,-22}, -{24,38,-21}, -{24,38,-20}, -{24,38,-19}, -{24,38,-18}, -{24,38,-17}, -{24,38,-16}, -{24,38,-15}, -{24,38,-14}, -{24,38,-13}, -{24,38,-12}, -{24,38,-11}, -{24,38,-10}, -{24,38,-9}, -{24,38,-8}, -{24,38,-7}, -{24,38,-6}, -{24,38,-5}, -{24,38,-4}, -{24,38,-3}, -{24,38,-2}, -{24,38,-1}, -{24,38,0}, -{24,38,1}, -{24,38,2}, -{24,38,3}, -{24,38,4}, -{24,38,5}, -{24,38,6}, -{24,38,7}, -{24,38,8}, -{24,38,9}, -{24,38,10}, -{24,38,11}, -{24,38,12}, -{24,38,13}, -{24,38,14}, -{24,38,15}, -{24,38,16}, -{24,38,17}, -{24,38,18}, -{24,38,19}, -{24,38,20}, -{24,38,21}, -{24,38,22}, -{24,38,23}, -{24,38,24}, -{24,38,25}, -{24,38,26}, -{24,38,27}, -{24,38,28}, -{24,38,29}, -{24,38,30}, -{24,38,31}, -{24,38,32}, -{24,38,33}, -{24,38,34}, -{24,38,35}, -{24,39,-66}, -{24,39,-65}, -{24,39,-64}, -{24,39,-63}, -{24,39,-62}, -{24,39,-61}, -{24,39,-60}, -{24,39,-59}, -{24,39,-58}, -{24,39,-57}, -{24,39,-56}, -{24,39,-55}, -{24,39,-54}, -{24,39,-53}, -{24,39,-52}, -{24,39,-51}, -{24,39,-50}, -{24,39,-49}, -{24,39,-48}, -{24,39,-47}, -{24,39,-46}, -{24,39,-45}, -{24,39,-44}, -{24,39,-43}, -{24,39,-42}, -{24,39,-41}, -{24,39,-40}, -{24,39,-39}, -{24,39,-38}, -{24,39,-37}, -{24,39,-36}, -{24,39,-35}, -{24,39,-34}, -{24,39,-33}, -{24,39,-32}, -{24,39,-31}, -{24,39,-30}, -{24,39,-29}, -{24,39,-28}, -{24,39,-27}, -{24,39,-26}, -{24,39,-25}, -{24,39,-24}, -{24,39,-23}, -{24,39,-22}, -{24,39,-21}, -{24,39,-20}, -{24,39,-19}, -{24,39,-18}, -{24,39,-17}, -{24,39,-16}, -{24,39,-15}, -{24,39,-14}, -{24,39,-13}, -{24,39,-12}, -{24,39,-11}, -{24,39,-10}, -{24,39,-9}, -{24,39,-8}, -{24,39,-7}, -{24,39,-6}, -{24,39,-5}, -{24,39,-4}, -{24,39,-3}, -{24,39,-2}, -{24,39,-1}, -{24,39,0}, -{24,39,1}, -{24,39,2}, -{24,39,3}, -{24,39,4}, -{24,39,5}, -{24,39,6}, -{24,39,7}, -{24,39,8}, -{24,39,9}, -{24,39,10}, -{24,39,11}, -{24,39,12}, -{24,39,13}, -{24,39,14}, -{24,39,15}, -{24,39,16}, -{24,39,17}, -{24,39,18}, -{24,39,19}, -{24,39,20}, -{24,39,21}, -{24,39,22}, -{24,39,23}, -{24,39,24}, -{24,39,25}, -{24,39,26}, -{24,39,27}, -{24,39,28}, -{24,39,29}, -{24,39,30}, -{24,39,31}, -{24,39,32}, -{24,39,33}, -{24,39,34}, -{24,39,35}, -{24,40,-67}, -{24,40,-66}, -{24,40,-65}, -{24,40,-64}, -{24,40,-63}, -{24,40,-62}, -{24,40,-61}, -{24,40,-60}, -{24,40,-59}, -{24,40,-58}, -{24,40,-57}, -{24,40,-56}, -{24,40,-55}, -{24,40,-54}, -{24,40,-53}, -{24,40,-52}, -{24,40,-51}, -{24,40,-50}, -{24,40,-49}, -{24,40,-48}, -{24,40,-47}, -{24,40,-46}, -{24,40,-45}, -{24,40,-44}, -{24,40,-43}, -{24,40,-42}, -{24,40,-41}, -{24,40,-40}, -{24,40,-39}, -{24,40,-38}, -{24,40,-37}, -{24,40,-36}, -{24,40,-35}, -{24,40,-34}, -{24,40,-33}, -{24,40,-32}, -{24,40,-31}, -{24,40,-30}, -{24,40,-29}, -{24,40,-28}, -{24,40,-27}, -{24,40,-26}, -{24,40,-25}, -{24,40,-24}, -{24,40,-23}, -{24,40,-22}, -{24,40,-21}, -{24,40,-20}, -{24,40,-19}, -{24,40,-18}, -{24,40,-17}, -{24,40,-16}, -{24,40,-15}, -{24,40,-14}, -{24,40,-13}, -{24,40,-12}, -{24,40,-11}, -{24,40,-10}, -{24,40,-9}, -{24,40,-8}, -{24,40,-7}, -{24,40,-6}, -{24,40,-5}, -{24,40,-4}, -{24,40,-3}, -{24,40,-2}, -{24,40,-1}, -{24,40,0}, -{24,40,1}, -{24,40,2}, -{24,40,3}, -{24,40,4}, -{24,40,5}, -{24,40,6}, -{24,40,7}, -{24,40,8}, -{24,40,9}, -{24,40,10}, -{24,40,11}, -{24,40,12}, -{24,40,13}, -{24,40,14}, -{24,40,15}, -{24,40,16}, -{24,40,17}, -{24,40,18}, -{24,40,19}, -{24,40,20}, -{24,40,21}, -{24,40,22}, -{24,40,23}, -{24,40,24}, -{24,40,25}, -{24,40,26}, -{24,40,27}, -{24,40,28}, -{24,40,29}, -{24,40,30}, -{24,40,31}, -{24,40,32}, -{24,40,33}, -{24,40,34}, -{24,40,35}, -{24,41,-68}, -{24,41,-67}, -{24,41,-66}, -{24,41,-65}, -{24,41,-64}, -{24,41,-63}, -{24,41,-62}, -{24,41,-61}, -{24,41,-60}, -{24,41,-59}, -{24,41,-58}, -{24,41,-57}, -{24,41,-56}, -{24,41,-55}, -{24,41,-54}, -{24,41,-53}, -{24,41,-52}, -{24,41,-51}, -{24,41,-50}, -{24,41,-49}, -{24,41,-48}, -{24,41,-47}, -{24,41,-46}, -{24,41,-45}, -{24,41,-44}, -{24,41,-43}, -{24,41,-42}, -{24,41,-41}, -{24,41,-40}, -{24,41,-39}, -{24,41,-38}, -{24,41,-37}, -{24,41,-36}, -{24,41,-35}, -{24,41,-34}, -{24,41,-33}, -{24,41,-32}, -{24,41,-31}, -{24,41,-30}, -{24,41,-29}, -{24,41,-28}, -{24,41,-27}, -{24,41,-26}, -{24,41,-25}, -{24,41,-24}, -{24,41,-23}, -{24,41,-22}, -{24,41,-21}, -{24,41,-20}, -{24,41,-19}, -{24,41,-18}, -{24,41,-17}, -{24,41,-16}, -{24,41,-15}, -{24,41,-14}, -{24,41,-13}, -{24,41,-12}, -{24,41,-11}, -{24,41,-10}, -{24,41,-9}, -{24,41,-8}, -{24,41,-7}, -{24,41,-6}, -{24,41,-5}, -{24,41,-4}, -{24,41,-3}, -{24,41,-2}, -{24,41,-1}, -{24,41,0}, -{24,41,1}, -{24,41,2}, -{24,41,3}, -{24,41,4}, -{24,41,5}, -{24,41,6}, -{24,41,7}, -{24,41,8}, -{24,41,9}, -{24,41,10}, -{24,41,11}, -{24,41,12}, -{24,41,13}, -{24,41,14}, -{24,41,15}, -{24,41,16}, -{24,41,17}, -{24,41,18}, -{24,41,19}, -{24,41,20}, -{24,41,21}, -{24,41,22}, -{24,41,23}, -{24,41,24}, -{24,41,25}, -{24,41,26}, -{24,41,27}, -{24,41,28}, -{24,41,29}, -{24,41,30}, -{24,41,31}, -{24,41,32}, -{24,41,33}, -{24,41,34}, -{24,41,35}, -{24,42,-69}, -{24,42,-68}, -{24,42,-67}, -{24,42,-66}, -{24,42,-65}, -{24,42,-64}, -{24,42,-63}, -{24,42,-62}, -{24,42,-61}, -{24,42,-60}, -{24,42,-59}, -{24,42,-58}, -{24,42,-57}, -{24,42,-56}, -{24,42,-55}, -{24,42,-54}, -{24,42,-53}, -{24,42,-52}, -{24,42,-51}, -{24,42,-50}, -{24,42,-49}, -{24,42,-48}, -{24,42,-47}, -{24,42,-46}, -{24,42,-45}, -{24,42,-44}, -{24,42,-43}, -{24,42,-42}, -{24,42,-41}, -{24,42,-40}, -{24,42,-39}, -{24,42,-38}, -{24,42,-37}, -{24,42,-36}, -{24,42,-35}, -{24,42,-34}, -{24,42,-33}, -{24,42,-32}, -{24,42,-31}, -{24,42,-30}, -{24,42,-29}, -{24,42,-28}, -{24,42,-27}, -{24,42,-26}, -{24,42,-25}, -{24,42,-24}, -{24,42,-23}, -{24,42,-22}, -{24,42,-21}, -{24,42,-20}, -{24,42,-19}, -{24,42,-18}, -{24,42,-17}, -{24,42,-16}, -{24,42,-15}, -{24,42,-14}, -{24,42,-13}, -{24,42,-12}, -{24,42,-11}, -{24,42,-10}, -{24,42,-9}, -{24,42,-8}, -{24,42,-7}, -{24,42,-6}, -{24,42,-5}, -{24,42,-4}, -{24,42,-3}, -{24,42,-2}, -{24,42,-1}, -{24,42,0}, -{24,42,1}, -{24,42,2}, -{24,42,3}, -{24,42,4}, -{24,42,5}, -{24,42,6}, -{24,42,7}, -{24,42,8}, -{24,42,9}, -{24,42,10}, -{24,42,11}, -{24,42,12}, -{24,42,13}, -{24,42,14}, -{24,42,15}, -{24,42,16}, -{24,42,17}, -{24,42,18}, -{24,42,19}, -{24,42,20}, -{24,42,21}, -{24,42,22}, -{24,42,23}, -{24,42,24}, -{24,42,25}, -{24,42,26}, -{24,42,27}, -{24,42,28}, -{24,42,29}, -{24,42,30}, -{24,42,31}, -{24,42,32}, -{24,42,33}, -{24,42,34}, -{24,42,35}, -{24,43,-70}, -{24,43,-69}, -{24,43,-68}, -{24,43,-67}, -{24,43,-66}, -{24,43,-65}, -{24,43,-64}, -{24,43,-63}, -{24,43,-62}, -{24,43,-61}, -{24,43,-60}, -{24,43,-59}, -{24,43,-58}, -{24,43,-57}, -{24,43,-56}, -{24,43,-55}, -{24,43,-54}, -{24,43,-53}, -{24,43,-52}, -{24,43,-51}, -{24,43,-50}, -{24,43,-49}, -{24,43,-48}, -{24,43,-47}, -{24,43,-46}, -{24,43,-45}, -{24,43,-44}, -{24,43,-43}, -{24,43,-42}, -{24,43,-41}, -{24,43,-40}, -{24,43,-39}, -{24,43,-38}, -{24,43,-37}, -{24,43,-36}, -{24,43,-35}, -{24,43,-34}, -{24,43,-33}, -{24,43,-32}, -{24,43,-31}, -{24,43,-30}, -{24,43,-29}, -{24,43,-28}, -{24,43,-27}, -{24,43,-26}, -{24,43,-25}, -{24,43,-24}, -{24,43,-23}, -{24,43,-22}, -{24,43,-21}, -{24,43,-20}, -{24,43,-19}, -{24,43,-18}, -{24,43,-17}, -{24,43,-16}, -{24,43,-15}, -{24,43,-14}, -{24,43,-13}, -{24,43,-12}, -{24,43,-11}, -{24,43,-10}, -{24,43,-9}, -{24,43,-8}, -{24,43,-7}, -{24,43,-6}, -{24,43,-5}, -{24,43,-4}, -{24,43,-3}, -{24,43,-2}, -{24,43,-1}, -{24,43,0}, -{24,43,1}, -{24,43,2}, -{24,43,3}, -{24,43,4}, -{24,43,5}, -{24,43,6}, -{24,43,7}, -{24,43,8}, -{24,43,9}, -{24,43,10}, -{24,43,11}, -{24,43,12}, -{24,43,13}, -{24,43,14}, -{24,43,15}, -{24,43,16}, -{24,43,17}, -{24,43,18}, -{24,43,19}, -{24,43,20}, -{24,43,21}, -{24,43,22}, -{24,43,23}, -{24,43,24}, -{24,43,25}, -{24,43,26}, -{24,43,27}, -{24,43,28}, -{24,43,29}, -{24,43,30}, -{24,43,31}, -{24,43,32}, -{24,43,33}, -{24,43,34}, -{24,43,35}, -{24,44,-71}, -{24,44,-70}, -{24,44,-69}, -{24,44,-68}, -{24,44,-67}, -{24,44,-66}, -{24,44,-65}, -{24,44,-64}, -{24,44,-63}, -{24,44,-62}, -{24,44,-61}, -{24,44,-60}, -{24,44,-59}, -{24,44,-58}, -{24,44,-57}, -{24,44,-56}, -{24,44,-55}, -{24,44,-54}, -{24,44,-53}, -{24,44,-52}, -{24,44,-51}, -{24,44,-50}, -{24,44,-49}, -{24,44,-48}, -{24,44,-47}, -{24,44,-46}, -{24,44,-45}, -{24,44,-44}, -{24,44,-43}, -{24,44,-42}, -{24,44,-41}, -{24,44,-40}, -{24,44,-39}, -{24,44,-38}, -{24,44,-37}, -{24,44,-36}, -{24,44,-35}, -{24,44,-34}, -{24,44,-33}, -{24,44,-32}, -{24,44,-31}, -{24,44,-30}, -{24,44,-29}, -{24,44,-28}, -{24,44,-27}, -{24,44,-26}, -{24,44,-25}, -{24,44,-24}, -{24,44,-23}, -{24,44,-22}, -{24,44,-21}, -{24,44,-20}, -{24,44,-19}, -{24,44,-18}, -{24,44,-17}, -{24,44,-16}, -{24,44,-15}, -{24,44,-14}, -{24,44,-13}, -{24,44,-12}, -{24,44,-11}, -{24,44,-10}, -{24,44,-9}, -{24,44,-8}, -{24,44,-7}, -{24,44,-6}, -{24,44,-5}, -{24,44,-4}, -{24,44,-3}, -{24,44,-2}, -{24,44,-1}, -{24,44,0}, -{24,44,1}, -{24,44,2}, -{24,44,3}, -{24,44,4}, -{24,44,5}, -{24,44,6}, -{24,44,7}, -{24,44,8}, -{24,44,9}, -{24,44,10}, -{24,44,11}, -{24,44,12}, -{24,44,13}, -{24,44,14}, -{24,44,15}, -{24,44,16}, -{24,44,17}, -{24,44,18}, -{24,44,19}, -{24,44,20}, -{24,44,21}, -{24,44,22}, -{24,44,23}, -{24,44,24}, -{24,44,25}, -{24,44,26}, -{24,44,27}, -{24,44,28}, -{24,44,29}, -{24,44,30}, -{24,44,31}, -{24,44,32}, -{24,44,33}, -{24,44,34}, -{24,44,35}, -{24,44,36}, -{24,45,-72}, -{24,45,-71}, -{24,45,-70}, -{24,45,-69}, -{24,45,-68}, -{24,45,-67}, -{24,45,-66}, -{24,45,-65}, -{24,45,-64}, -{24,45,-63}, -{24,45,-62}, -{24,45,-61}, -{24,45,-60}, -{24,45,-59}, -{24,45,-58}, -{24,45,-57}, -{24,45,-56}, -{24,45,-55}, -{24,45,-54}, -{24,45,-53}, -{24,45,-52}, -{24,45,-51}, -{24,45,-50}, -{24,45,-49}, -{24,45,-48}, -{24,45,-47}, -{24,45,-46}, -{24,45,-45}, -{24,45,-44}, -{24,45,-43}, -{24,45,-42}, -{24,45,-41}, -{24,45,-40}, -{24,45,-39}, -{24,45,-38}, -{24,45,-37}, -{24,45,-36}, -{24,45,-35}, -{24,45,-34}, -{24,45,-33}, -{24,45,-32}, -{24,45,-31}, -{24,45,-30}, -{24,45,-29}, -{24,45,-28}, -{24,45,-27}, -{24,45,-26}, -{24,45,-25}, -{24,45,-24}, -{24,45,-23}, -{24,45,-22}, -{24,45,-21}, -{24,45,-20}, -{24,45,-19}, -{24,45,-18}, -{24,45,-17}, -{24,45,-16}, -{24,45,-15}, -{24,45,-14}, -{24,45,-13}, -{24,45,-12}, -{24,45,-11}, -{24,45,-10}, -{24,45,-9}, -{24,45,-8}, -{24,45,-7}, -{24,45,-6}, -{24,45,-5}, -{24,45,-4}, -{24,45,-3}, -{24,45,-2}, -{24,45,-1}, -{24,45,0}, -{24,45,1}, -{24,45,2}, -{24,45,3}, -{24,45,4}, -{24,45,5}, -{24,45,6}, -{24,45,7}, -{24,45,8}, -{24,45,9}, -{24,45,10}, -{24,45,11}, -{24,45,12}, -{24,45,13}, -{24,45,14}, -{24,45,15}, -{24,45,16}, -{24,45,17}, -{24,45,18}, -{24,45,19}, -{24,45,20}, -{24,45,21}, -{24,45,22}, -{24,45,23}, -{24,45,24}, -{24,45,25}, -{24,45,26}, -{24,45,27}, -{24,45,28}, -{24,45,29}, -{24,45,30}, -{24,45,31}, -{24,45,32}, -{24,45,33}, -{24,45,34}, -{24,45,35}, -{24,45,36}, -{24,46,-73}, -{24,46,-72}, -{24,46,-71}, -{24,46,-70}, -{24,46,-69}, -{24,46,-68}, -{24,46,-67}, -{24,46,-66}, -{24,46,-65}, -{24,46,-64}, -{24,46,-63}, -{24,46,-62}, -{24,46,-61}, -{24,46,-60}, -{24,46,-59}, -{24,46,-58}, -{24,46,-57}, -{24,46,-56}, -{24,46,-55}, -{24,46,-54}, -{24,46,-53}, -{24,46,-52}, -{24,46,-51}, -{24,46,-50}, -{24,46,-49}, -{24,46,-48}, -{24,46,-47}, -{24,46,-46}, -{24,46,-45}, -{24,46,-44}, -{24,46,-43}, -{24,46,-42}, -{24,46,-41}, -{24,46,-40}, -{24,46,-39}, -{24,46,-38}, -{24,46,-37}, -{24,46,-36}, -{24,46,-35}, -{24,46,-34}, -{24,46,-33}, -{24,46,-32}, -{24,46,-31}, -{24,46,-30}, -{24,46,-29}, -{24,46,-28}, -{24,46,-27}, -{24,46,-26}, -{24,46,-25}, -{24,46,-24}, -{24,46,-23}, -{24,46,-22}, -{24,46,-21}, -{24,46,-20}, -{24,46,-19}, -{24,46,-18}, -{24,46,-17}, -{24,46,-16}, -{24,46,-15}, -{24,46,-14}, -{24,46,-13}, -{24,46,-12}, -{24,46,-11}, -{24,46,-10}, -{24,46,-9}, -{24,46,-8}, -{24,46,-7}, -{24,46,-6}, -{24,46,-5}, -{24,46,-4}, -{24,46,-3}, -{24,46,-2}, -{24,46,-1}, -{24,46,0}, -{24,46,1}, -{24,46,2}, -{24,46,3}, -{24,46,4}, -{24,46,5}, -{24,46,6}, -{24,46,7}, -{24,46,8}, -{24,46,9}, -{24,46,10}, -{24,46,11}, -{24,46,12}, -{24,46,13}, -{24,46,14}, -{24,46,15}, -{24,46,16}, -{24,46,17}, -{24,46,18}, -{24,46,19}, -{24,46,20}, -{24,46,21}, -{24,46,22}, -{24,46,23}, -{24,46,24}, -{24,46,25}, -{24,46,26}, -{24,46,27}, -{24,46,28}, -{24,46,29}, -{24,46,30}, -{24,46,31}, -{24,46,32}, -{24,46,33}, -{24,46,34}, -{24,46,35}, -{24,46,36}, -{24,47,-73}, -{24,47,-72}, -{24,47,-71}, -{24,47,-70}, -{24,47,-69}, -{24,47,-68}, -{24,47,-67}, -{24,47,-66}, -{24,47,-65}, -{24,47,-64}, -{24,47,-63}, -{24,47,-62}, -{24,47,-61}, -{24,47,-60}, -{24,47,-59}, -{24,47,-58}, -{24,47,-57}, -{24,47,-56}, -{24,47,-55}, -{24,47,-54}, -{24,47,-53}, -{24,47,-52}, -{24,47,-51}, -{24,47,-50}, -{24,47,-49}, -{24,47,-48}, -{24,47,-47}, -{24,47,-46}, -{24,47,-45}, -{24,47,-44}, -{24,47,-43}, -{24,47,-42}, -{24,47,-41}, -{24,47,-40}, -{24,47,-39}, -{24,47,-38}, -{24,47,-37}, -{24,47,-36}, -{24,47,-35}, -{24,47,-34}, -{24,47,-33}, -{24,47,-32}, -{24,47,-31}, -{24,47,-30}, -{24,47,-29}, -{24,47,-28}, -{24,47,-27}, -{24,47,-26}, -{24,47,-25}, -{24,47,-24}, -{24,47,-23}, -{24,47,-22}, -{24,47,-21}, -{24,47,-20}, -{24,47,-19}, -{24,47,-18}, -{24,47,-17}, -{24,47,-16}, -{24,47,-15}, -{24,47,-14}, -{24,47,-13}, -{24,47,-12}, -{24,47,-11}, -{24,47,-10}, -{24,47,-9}, -{24,47,-8}, -{24,47,-7}, -{24,47,-6}, -{24,47,-5}, -{24,47,-4}, -{24,47,-3}, -{24,47,-2}, -{24,47,-1}, -{24,47,0}, -{24,47,1}, -{24,47,2}, -{24,47,3}, -{24,47,4}, -{24,47,5}, -{24,47,6}, -{24,47,7}, -{24,47,8}, -{24,47,9}, -{24,47,10}, -{24,47,11}, -{24,47,12}, -{24,47,13}, -{24,47,14}, -{24,47,15}, -{24,47,16}, -{24,47,17}, -{24,47,18}, -{24,48,-74}, -{24,48,-73}, -{24,48,-72}, -{24,48,-71}, -{24,48,-70}, -{24,48,-69}, -{24,48,-68}, -{24,48,-67}, -{24,48,-66}, -{24,48,-65}, -{24,48,-64}, -{24,48,-63}, -{24,48,-62}, -{24,48,-61}, -{24,48,-60}, -{24,48,-59}, -{24,48,-58}, -{24,48,-57}, -{24,48,-56}, -{24,48,-55}, -{24,48,-54}, -{24,48,-53}, -{24,48,-52}, -{24,48,-51}, -{24,48,-50}, -{24,48,-49}, -{24,48,-48}, -{24,48,-47}, -{24,48,-46}, -{24,48,-45}, -{24,48,-44}, -{24,48,-43}, -{24,48,-42}, -{24,48,-41}, -{24,48,-40}, -{24,48,-39}, -{24,48,-38}, -{24,48,-37}, -{24,48,-36}, -{24,48,-35}, -{24,48,-34}, -{24,48,-33}, -{24,48,-32}, -{24,48,-31}, -{24,48,-30}, -{24,48,-29}, -{24,48,-28}, -{24,48,-27}, -{24,48,-26}, -{24,48,-25}, -{24,48,-24}, -{24,48,-23}, -{24,48,-22}, -{24,48,-21}, -{24,48,-20}, -{24,48,-19}, -{24,48,-18}, -{24,48,-17}, -{24,48,-16}, -{24,48,-15}, -{24,48,-14}, -{24,48,-13}, -{24,48,-12}, -{24,48,-11}, -{24,48,-10}, -{24,48,-9}, -{24,48,-8}, -{24,48,-7}, -{24,48,-6}, -{24,48,-5}, -{24,48,-4}, -{24,48,-3}, -{24,48,-2}, -{24,48,-1}, -{24,48,0}, -{24,49,-75}, -{24,49,-74}, -{24,49,-73}, -{24,49,-72}, -{24,49,-71}, -{24,49,-70}, -{24,49,-69}, -{24,49,-68}, -{24,49,-67}, -{24,49,-66}, -{24,49,-65}, -{24,49,-64}, -{24,49,-63}, -{24,49,-62}, -{24,49,-61}, -{24,49,-60}, -{24,49,-59}, -{24,49,-58}, -{24,49,-57}, -{24,49,-56}, -{24,49,-55}, -{24,49,-54}, -{24,49,-53}, -{24,49,-52}, -{24,49,-51}, -{24,49,-50}, -{24,49,-49}, -{24,49,-48}, -{24,49,-47}, -{24,49,-46}, -{24,49,-45}, -{24,49,-44}, -{24,49,-43}, -{24,49,-42}, -{24,49,-41}, -{24,49,-40}, -{24,49,-39}, -{24,49,-38}, -{24,49,-37}, -{24,49,-36}, -{24,49,-35}, -{24,49,-34}, -{24,49,-33}, -{24,49,-32}, -{24,49,-31}, -{24,49,-30}, -{24,49,-29}, -{24,49,-28}, -{24,49,-27}, -{24,49,-26}, -{24,49,-25}, -{24,49,-24}, -{24,49,-23}, -{24,49,-22}, -{24,49,-21}, -{24,49,-20}, -{24,49,-19}, -{24,49,-18}, -{24,49,-17}, -{24,49,-16}, -{24,49,-15}, -{24,49,-14}, -{24,49,-13}, -{24,49,-12}, -{24,50,-76}, -{24,50,-75}, -{24,50,-74}, -{24,50,-73}, -{24,50,-72}, -{24,50,-71}, -{24,50,-70}, -{24,50,-69}, -{24,50,-68}, -{24,50,-67}, -{24,50,-66}, -{24,50,-65}, -{24,50,-64}, -{24,50,-63}, -{24,50,-62}, -{24,50,-61}, -{24,50,-60}, -{24,50,-59}, -{24,50,-58}, -{24,50,-57}, -{24,50,-56}, -{24,50,-55}, -{24,50,-54}, -{24,50,-53}, -{24,50,-52}, -{24,50,-51}, -{24,50,-50}, -{24,50,-49}, -{24,50,-48}, -{24,50,-47}, -{24,50,-46}, -{24,50,-45}, -{24,50,-44}, -{24,50,-43}, -{24,50,-42}, -{24,50,-41}, -{24,50,-40}, -{24,50,-39}, -{24,50,-38}, -{24,50,-37}, -{24,50,-36}, -{24,50,-35}, -{24,50,-34}, -{24,50,-33}, -{24,50,-32}, -{24,50,-31}, -{24,50,-30}, -{24,50,-29}, -{24,50,-28}, -{24,50,-27}, -{24,50,-26}, -{24,50,-25}, -{24,50,-24}, -{24,50,-23}, -{24,50,-22}, -{24,50,-21}, -{24,51,-77}, -{24,51,-76}, -{24,51,-75}, -{24,51,-74}, -{24,51,-73}, -{24,51,-72}, -{24,51,-71}, -{24,51,-70}, -{24,51,-69}, -{24,51,-68}, -{24,51,-67}, -{24,51,-66}, -{24,51,-65}, -{24,51,-64}, -{24,51,-63}, -{24,51,-62}, -{24,51,-61}, -{24,51,-60}, -{24,51,-59}, -{24,51,-58}, -{24,51,-57}, -{24,51,-56}, -{24,51,-55}, -{24,51,-54}, -{24,51,-53}, -{24,51,-52}, -{24,51,-51}, -{24,51,-50}, -{24,51,-49}, -{24,51,-48}, -{24,51,-47}, -{24,51,-46}, -{24,51,-45}, -{24,51,-44}, -{24,51,-43}, -{24,51,-42}, -{24,51,-41}, -{24,51,-40}, -{24,51,-39}, -{24,51,-38}, -{24,51,-37}, -{24,51,-36}, -{24,51,-35}, -{24,51,-34}, -{24,51,-33}, -{24,51,-32}, -{24,51,-31}, -{24,51,-30}, -{24,51,-29}, -{24,51,-28}, -{24,52,-78}, -{24,52,-77}, -{24,52,-76}, -{24,52,-75}, -{24,52,-74}, -{24,52,-73}, -{24,52,-72}, -{24,52,-71}, -{24,52,-70}, -{24,52,-69}, -{24,52,-68}, -{24,52,-67}, -{24,52,-66}, -{24,52,-65}, -{24,52,-64}, -{24,52,-63}, -{24,52,-62}, -{24,52,-61}, -{24,52,-60}, -{24,52,-59}, -{24,52,-58}, -{24,52,-57}, -{24,52,-56}, -{24,52,-55}, -{24,52,-54}, -{24,52,-53}, -{24,52,-52}, -{24,52,-51}, -{24,52,-50}, -{24,52,-49}, -{24,52,-48}, -{24,52,-47}, -{24,52,-46}, -{24,52,-45}, -{24,52,-44}, -{24,52,-43}, -{24,52,-42}, -{24,52,-41}, -{24,52,-40}, -{24,52,-39}, -{24,52,-38}, -{24,52,-37}, -{24,52,-36}, -{24,52,-35}, -{24,53,-79}, -{24,53,-78}, -{24,53,-77}, -{24,53,-76}, -{24,53,-75}, -{24,53,-74}, -{24,53,-73}, -{24,53,-72}, -{24,53,-71}, -{24,53,-70}, -{24,53,-69}, -{24,53,-68}, -{24,53,-67}, -{24,53,-66}, -{24,53,-65}, -{24,53,-64}, -{24,53,-63}, -{24,53,-62}, -{24,53,-61}, -{24,53,-60}, -{24,53,-59}, -{24,53,-58}, -{24,53,-57}, -{24,53,-56}, -{24,53,-55}, -{24,53,-54}, -{24,53,-53}, -{24,53,-52}, -{24,53,-51}, -{24,53,-50}, -{24,53,-49}, -{24,53,-48}, -{24,53,-47}, -{24,53,-46}, -{24,53,-45}, -{24,53,-44}, -{24,53,-43}, -{24,53,-42}, -{24,53,-41}, -{24,54,-79}, -{24,54,-78}, -{24,54,-77}, -{24,54,-76}, -{24,54,-75}, -{24,54,-74}, -{24,54,-73}, -{24,54,-72}, -{24,54,-71}, -{24,54,-70}, -{24,54,-69}, -{24,54,-68}, -{24,54,-67}, -{24,54,-66}, -{24,54,-65}, -{24,54,-64}, -{24,54,-63}, -{24,54,-62}, -{24,54,-61}, -{24,54,-60}, -{24,54,-59}, -{24,54,-58}, -{24,54,-57}, -{24,54,-56}, -{24,54,-55}, -{24,54,-54}, -{24,54,-53}, -{24,54,-52}, -{24,54,-51}, -{24,54,-50}, -{24,54,-49}, -{24,54,-48}, -{24,54,-47}, -{24,54,-46}, -{24,55,-80}, -{24,55,-79}, -{24,55,-78}, -{24,55,-77}, -{24,55,-76}, -{24,55,-75}, -{24,55,-74}, -{24,55,-73}, -{24,55,-72}, -{24,55,-71}, -{24,55,-70}, -{24,55,-69}, -{24,55,-68}, -{24,55,-67}, -{24,55,-66}, -{24,55,-65}, -{24,55,-64}, -{24,55,-63}, -{24,55,-62}, -{24,55,-61}, -{24,55,-60}, -{24,55,-59}, -{24,55,-58}, -{24,55,-57}, -{24,55,-56}, -{24,55,-55}, -{24,55,-54}, -{24,55,-53}, -{24,55,-52}, -{24,55,-51}, -{24,56,-81}, -{24,56,-80}, -{24,56,-79}, -{24,56,-78}, -{24,56,-77}, -{24,56,-76}, -{24,56,-75}, -{24,56,-74}, -{24,56,-73}, -{24,56,-72}, -{24,56,-71}, -{24,56,-70}, -{24,56,-69}, -{24,56,-68}, -{24,56,-67}, -{24,56,-66}, -{24,56,-65}, -{24,56,-64}, -{24,56,-63}, -{24,56,-62}, -{24,56,-61}, -{24,56,-60}, -{24,56,-59}, -{24,56,-58}, -{24,56,-57}, -{24,56,-56}, -{24,56,-55}, -{24,57,-82}, -{24,57,-81}, -{24,57,-80}, -{24,57,-79}, -{24,57,-78}, -{24,57,-77}, -{24,57,-76}, -{24,57,-75}, -{24,57,-74}, -{24,57,-73}, -{24,57,-72}, -{24,57,-71}, -{24,57,-70}, -{24,57,-69}, -{24,57,-68}, -{24,57,-67}, -{24,57,-66}, -{24,57,-65}, -{24,57,-64}, -{24,57,-63}, -{24,57,-62}, -{24,57,-61}, -{24,57,-60}, -{24,58,-83}, -{24,58,-82}, -{24,58,-81}, -{24,58,-80}, -{24,58,-79}, -{24,58,-78}, -{24,58,-77}, -{24,58,-76}, -{24,58,-75}, -{24,58,-74}, -{24,58,-73}, -{24,58,-72}, -{24,58,-71}, -{24,58,-70}, -{24,58,-69}, -{24,58,-68}, -{24,58,-67}, -{24,58,-66}, -{24,58,-65}, -{24,58,-64}, -{24,59,-84}, -{24,59,-83}, -{24,59,-82}, -{24,59,-81}, -{24,59,-80}, -{24,59,-79}, -{24,59,-78}, -{24,59,-77}, -{24,59,-76}, -{24,59,-75}, -{24,59,-74}, -{24,59,-73}, -{24,59,-72}, -{24,59,-71}, -{24,59,-70}, -{24,59,-69}, -{24,59,-68}, -{24,60,-84}, -{24,60,-83}, -{24,60,-82}, -{24,60,-81}, -{24,60,-80}, -{24,60,-79}, -{24,60,-78}, -{24,60,-77}, -{24,60,-76}, -{24,60,-75}, -{24,60,-74}, -{24,60,-73}, -{24,60,-72}, -{24,60,-71}, -{24,61,-85}, -{24,61,-84}, -{24,61,-83}, -{24,61,-82}, -{24,61,-81}, -{24,61,-80}, -{24,61,-79}, -{24,61,-78}, -{24,61,-77}, -{24,61,-76}, -{24,61,-75}, -{24,62,-86}, -{24,62,-85}, -{24,62,-84}, -{24,62,-83}, -{24,62,-82}, -{24,62,-81}, -{24,62,-80}, -{24,62,-79}, -{24,62,-78}, -{24,63,-87}, -{24,63,-86}, -{24,63,-85}, -{24,63,-84}, -{24,63,-83}, -{24,63,-82}, -{24,64,-88}, -{24,64,-87}, -{24,64,-86}, -{24,64,-85}, -{24,65,-89}, -{24,65,-88}, -{25,-34,32}, -{25,-33,28}, -{25,-33,29}, -{25,-33,30}, -{25,-33,31}, -{25,-33,32}, -{25,-32,24}, -{25,-32,25}, -{25,-32,26}, -{25,-32,27}, -{25,-32,28}, -{25,-32,29}, -{25,-32,30}, -{25,-32,31}, -{25,-32,32}, -{25,-31,21}, -{25,-31,22}, -{25,-31,23}, -{25,-31,24}, -{25,-31,25}, -{25,-31,26}, -{25,-31,27}, -{25,-31,28}, -{25,-31,29}, -{25,-31,30}, -{25,-31,31}, -{25,-31,32}, -{25,-30,18}, -{25,-30,19}, -{25,-30,20}, -{25,-30,21}, -{25,-30,22}, -{25,-30,23}, -{25,-30,24}, -{25,-30,25}, -{25,-30,26}, -{25,-30,27}, -{25,-30,28}, -{25,-30,29}, -{25,-30,30}, -{25,-30,31}, -{25,-30,32}, -{25,-29,15}, -{25,-29,16}, -{25,-29,17}, -{25,-29,18}, -{25,-29,19}, -{25,-29,20}, -{25,-29,21}, -{25,-29,22}, -{25,-29,23}, -{25,-29,24}, -{25,-29,25}, -{25,-29,26}, -{25,-29,27}, -{25,-29,28}, -{25,-29,29}, -{25,-29,30}, -{25,-29,31}, -{25,-29,32}, -{25,-28,13}, -{25,-28,14}, -{25,-28,15}, -{25,-28,16}, -{25,-28,17}, -{25,-28,18}, -{25,-28,19}, -{25,-28,20}, -{25,-28,21}, -{25,-28,22}, -{25,-28,23}, -{25,-28,24}, -{25,-28,25}, -{25,-28,26}, -{25,-28,27}, -{25,-28,28}, -{25,-28,29}, -{25,-28,30}, -{25,-28,31}, -{25,-28,32}, -{25,-27,11}, -{25,-27,12}, -{25,-27,13}, -{25,-27,14}, -{25,-27,15}, -{25,-27,16}, -{25,-27,17}, -{25,-27,18}, -{25,-27,19}, -{25,-27,20}, -{25,-27,21}, -{25,-27,22}, -{25,-27,23}, -{25,-27,24}, -{25,-27,25}, -{25,-27,26}, -{25,-27,27}, -{25,-27,28}, -{25,-27,29}, -{25,-27,30}, -{25,-27,31}, -{25,-27,32}, -{25,-27,33}, -{25,-26,8}, -{25,-26,9}, -{25,-26,10}, -{25,-26,11}, -{25,-26,12}, -{25,-26,13}, -{25,-26,14}, -{25,-26,15}, -{25,-26,16}, -{25,-26,17}, -{25,-26,18}, -{25,-26,19}, -{25,-26,20}, -{25,-26,21}, -{25,-26,22}, -{25,-26,23}, -{25,-26,24}, -{25,-26,25}, -{25,-26,26}, -{25,-26,27}, -{25,-26,28}, -{25,-26,29}, -{25,-26,30}, -{25,-26,31}, -{25,-26,32}, -{25,-26,33}, -{25,-25,6}, -{25,-25,7}, -{25,-25,8}, -{25,-25,9}, -{25,-25,10}, -{25,-25,11}, -{25,-25,12}, -{25,-25,13}, -{25,-25,14}, -{25,-25,15}, -{25,-25,16}, -{25,-25,17}, -{25,-25,18}, -{25,-25,19}, -{25,-25,20}, -{25,-25,21}, -{25,-25,22}, -{25,-25,23}, -{25,-25,24}, -{25,-25,25}, -{25,-25,26}, -{25,-25,27}, -{25,-25,28}, -{25,-25,29}, -{25,-25,30}, -{25,-25,31}, -{25,-25,32}, -{25,-25,33}, -{25,-24,4}, -{25,-24,5}, -{25,-24,6}, -{25,-24,7}, -{25,-24,8}, -{25,-24,9}, -{25,-24,10}, -{25,-24,11}, -{25,-24,12}, -{25,-24,13}, -{25,-24,14}, -{25,-24,15}, -{25,-24,16}, -{25,-24,17}, -{25,-24,18}, -{25,-24,19}, -{25,-24,20}, -{25,-24,21}, -{25,-24,22}, -{25,-24,23}, -{25,-24,24}, -{25,-24,25}, -{25,-24,26}, -{25,-24,27}, -{25,-24,28}, -{25,-24,29}, -{25,-24,30}, -{25,-24,31}, -{25,-24,32}, -{25,-24,33}, -{25,-23,3}, -{25,-23,4}, -{25,-23,5}, -{25,-23,6}, -{25,-23,7}, -{25,-23,8}, -{25,-23,9}, -{25,-23,10}, -{25,-23,11}, -{25,-23,12}, -{25,-23,13}, -{25,-23,14}, -{25,-23,15}, -{25,-23,16}, -{25,-23,17}, -{25,-23,18}, -{25,-23,19}, -{25,-23,20}, -{25,-23,21}, -{25,-23,22}, -{25,-23,23}, -{25,-23,24}, -{25,-23,25}, -{25,-23,26}, -{25,-23,27}, -{25,-23,28}, -{25,-23,29}, -{25,-23,30}, -{25,-23,31}, -{25,-23,32}, -{25,-23,33}, -{25,-22,1}, -{25,-22,2}, -{25,-22,3}, -{25,-22,4}, -{25,-22,5}, -{25,-22,6}, -{25,-22,7}, -{25,-22,8}, -{25,-22,9}, -{25,-22,10}, -{25,-22,11}, -{25,-22,12}, -{25,-22,13}, -{25,-22,14}, -{25,-22,15}, -{25,-22,16}, -{25,-22,17}, -{25,-22,18}, -{25,-22,19}, -{25,-22,20}, -{25,-22,21}, -{25,-22,22}, -{25,-22,23}, -{25,-22,24}, -{25,-22,25}, -{25,-22,26}, -{25,-22,27}, -{25,-22,28}, -{25,-22,29}, -{25,-22,30}, -{25,-22,31}, -{25,-22,32}, -{25,-22,33}, -{25,-21,-1}, -{25,-21,0}, -{25,-21,1}, -{25,-21,2}, -{25,-21,3}, -{25,-21,4}, -{25,-21,5}, -{25,-21,6}, -{25,-21,7}, -{25,-21,8}, -{25,-21,9}, -{25,-21,10}, -{25,-21,11}, -{25,-21,12}, -{25,-21,13}, -{25,-21,14}, -{25,-21,15}, -{25,-21,16}, -{25,-21,17}, -{25,-21,18}, -{25,-21,19}, -{25,-21,20}, -{25,-21,21}, -{25,-21,22}, -{25,-21,23}, -{25,-21,24}, -{25,-21,25}, -{25,-21,26}, -{25,-21,27}, -{25,-21,28}, -{25,-21,29}, -{25,-21,30}, -{25,-21,31}, -{25,-21,32}, -{25,-21,33}, -{25,-20,-3}, -{25,-20,-2}, -{25,-20,-1}, -{25,-20,0}, -{25,-20,1}, -{25,-20,2}, -{25,-20,3}, -{25,-20,4}, -{25,-20,5}, -{25,-20,6}, -{25,-20,7}, -{25,-20,8}, -{25,-20,9}, -{25,-20,10}, -{25,-20,11}, -{25,-20,12}, -{25,-20,13}, -{25,-20,14}, -{25,-20,15}, -{25,-20,16}, -{25,-20,17}, -{25,-20,18}, -{25,-20,19}, -{25,-20,20}, -{25,-20,21}, -{25,-20,22}, -{25,-20,23}, -{25,-20,24}, -{25,-20,25}, -{25,-20,26}, -{25,-20,27}, -{25,-20,28}, -{25,-20,29}, -{25,-20,30}, -{25,-20,31}, -{25,-20,32}, -{25,-20,33}, -{25,-19,-4}, -{25,-19,-3}, -{25,-19,-2}, -{25,-19,-1}, -{25,-19,0}, -{25,-19,1}, -{25,-19,2}, -{25,-19,3}, -{25,-19,4}, -{25,-19,5}, -{25,-19,6}, -{25,-19,7}, -{25,-19,8}, -{25,-19,9}, -{25,-19,10}, -{25,-19,11}, -{25,-19,12}, -{25,-19,13}, -{25,-19,14}, -{25,-19,15}, -{25,-19,16}, -{25,-19,17}, -{25,-19,18}, -{25,-19,19}, -{25,-19,20}, -{25,-19,21}, -{25,-19,22}, -{25,-19,23}, -{25,-19,24}, -{25,-19,25}, -{25,-19,26}, -{25,-19,27}, -{25,-19,28}, -{25,-19,29}, -{25,-19,30}, -{25,-19,31}, -{25,-19,32}, -{25,-19,33}, -{25,-18,-6}, -{25,-18,-5}, -{25,-18,-4}, -{25,-18,-3}, -{25,-18,-2}, -{25,-18,-1}, -{25,-18,0}, -{25,-18,1}, -{25,-18,2}, -{25,-18,3}, -{25,-18,4}, -{25,-18,5}, -{25,-18,6}, -{25,-18,7}, -{25,-18,8}, -{25,-18,9}, -{25,-18,10}, -{25,-18,11}, -{25,-18,12}, -{25,-18,13}, -{25,-18,14}, -{25,-18,15}, -{25,-18,16}, -{25,-18,17}, -{25,-18,18}, -{25,-18,19}, -{25,-18,20}, -{25,-18,21}, -{25,-18,22}, -{25,-18,23}, -{25,-18,24}, -{25,-18,25}, -{25,-18,26}, -{25,-18,27}, -{25,-18,28}, -{25,-18,29}, -{25,-18,30}, -{25,-18,31}, -{25,-18,32}, -{25,-18,33}, -{25,-17,-7}, -{25,-17,-6}, -{25,-17,-5}, -{25,-17,-4}, -{25,-17,-3}, -{25,-17,-2}, -{25,-17,-1}, -{25,-17,0}, -{25,-17,1}, -{25,-17,2}, -{25,-17,3}, -{25,-17,4}, -{25,-17,5}, -{25,-17,6}, -{25,-17,7}, -{25,-17,8}, -{25,-17,9}, -{25,-17,10}, -{25,-17,11}, -{25,-17,12}, -{25,-17,13}, -{25,-17,14}, -{25,-17,15}, -{25,-17,16}, -{25,-17,17}, -{25,-17,18}, -{25,-17,19}, -{25,-17,20}, -{25,-17,21}, -{25,-17,22}, -{25,-17,23}, -{25,-17,24}, -{25,-17,25}, -{25,-17,26}, -{25,-17,27}, -{25,-17,28}, -{25,-17,29}, -{25,-17,30}, -{25,-17,31}, -{25,-17,32}, -{25,-17,33}, -{25,-16,-9}, -{25,-16,-8}, -{25,-16,-7}, -{25,-16,-6}, -{25,-16,-5}, -{25,-16,-4}, -{25,-16,-3}, -{25,-16,-2}, -{25,-16,-1}, -{25,-16,0}, -{25,-16,1}, -{25,-16,2}, -{25,-16,3}, -{25,-16,4}, -{25,-16,5}, -{25,-16,6}, -{25,-16,7}, -{25,-16,8}, -{25,-16,9}, -{25,-16,10}, -{25,-16,11}, -{25,-16,12}, -{25,-16,13}, -{25,-16,14}, -{25,-16,15}, -{25,-16,16}, -{25,-16,17}, -{25,-16,18}, -{25,-16,19}, -{25,-16,20}, -{25,-16,21}, -{25,-16,22}, -{25,-16,23}, -{25,-16,24}, -{25,-16,25}, -{25,-16,26}, -{25,-16,27}, -{25,-16,28}, -{25,-16,29}, -{25,-16,30}, -{25,-16,31}, -{25,-16,32}, -{25,-16,33}, -{25,-15,-10}, -{25,-15,-9}, -{25,-15,-8}, -{25,-15,-7}, -{25,-15,-6}, -{25,-15,-5}, -{25,-15,-4}, -{25,-15,-3}, -{25,-15,-2}, -{25,-15,-1}, -{25,-15,0}, -{25,-15,1}, -{25,-15,2}, -{25,-15,3}, -{25,-15,4}, -{25,-15,5}, -{25,-15,6}, -{25,-15,7}, -{25,-15,8}, -{25,-15,9}, -{25,-15,10}, -{25,-15,11}, -{25,-15,12}, -{25,-15,13}, -{25,-15,14}, -{25,-15,15}, -{25,-15,16}, -{25,-15,17}, -{25,-15,18}, -{25,-15,19}, -{25,-15,20}, -{25,-15,21}, -{25,-15,22}, -{25,-15,23}, -{25,-15,24}, -{25,-15,25}, -{25,-15,26}, -{25,-15,27}, -{25,-15,28}, -{25,-15,29}, -{25,-15,30}, -{25,-15,31}, -{25,-15,32}, -{25,-15,33}, -{25,-14,-12}, -{25,-14,-11}, -{25,-14,-10}, -{25,-14,-9}, -{25,-14,-8}, -{25,-14,-7}, -{25,-14,-6}, -{25,-14,-5}, -{25,-14,-4}, -{25,-14,-3}, -{25,-14,-2}, -{25,-14,-1}, -{25,-14,0}, -{25,-14,1}, -{25,-14,2}, -{25,-14,3}, -{25,-14,4}, -{25,-14,5}, -{25,-14,6}, -{25,-14,7}, -{25,-14,8}, -{25,-14,9}, -{25,-14,10}, -{25,-14,11}, -{25,-14,12}, -{25,-14,13}, -{25,-14,14}, -{25,-14,15}, -{25,-14,16}, -{25,-14,17}, -{25,-14,18}, -{25,-14,19}, -{25,-14,20}, -{25,-14,21}, -{25,-14,22}, -{25,-14,23}, -{25,-14,24}, -{25,-14,25}, -{25,-14,26}, -{25,-14,27}, -{25,-14,28}, -{25,-14,29}, -{25,-14,30}, -{25,-14,31}, -{25,-14,32}, -{25,-14,33}, -{25,-13,-13}, -{25,-13,-12}, -{25,-13,-11}, -{25,-13,-10}, -{25,-13,-9}, -{25,-13,-8}, -{25,-13,-7}, -{25,-13,-6}, -{25,-13,-5}, -{25,-13,-4}, -{25,-13,-3}, -{25,-13,-2}, -{25,-13,-1}, -{25,-13,0}, -{25,-13,1}, -{25,-13,2}, -{25,-13,3}, -{25,-13,4}, -{25,-13,5}, -{25,-13,6}, -{25,-13,7}, -{25,-13,8}, -{25,-13,9}, -{25,-13,10}, -{25,-13,11}, -{25,-13,12}, -{25,-13,13}, -{25,-13,14}, -{25,-13,15}, -{25,-13,16}, -{25,-13,17}, -{25,-13,18}, -{25,-13,19}, -{25,-13,20}, -{25,-13,21}, -{25,-13,22}, -{25,-13,23}, -{25,-13,24}, -{25,-13,25}, -{25,-13,26}, -{25,-13,27}, -{25,-13,28}, -{25,-13,29}, -{25,-13,30}, -{25,-13,31}, -{25,-13,32}, -{25,-13,33}, -{25,-12,-14}, -{25,-12,-13}, -{25,-12,-12}, -{25,-12,-11}, -{25,-12,-10}, -{25,-12,-9}, -{25,-12,-8}, -{25,-12,-7}, -{25,-12,-6}, -{25,-12,-5}, -{25,-12,-4}, -{25,-12,-3}, -{25,-12,-2}, -{25,-12,-1}, -{25,-12,0}, -{25,-12,1}, -{25,-12,2}, -{25,-12,3}, -{25,-12,4}, -{25,-12,5}, -{25,-12,6}, -{25,-12,7}, -{25,-12,8}, -{25,-12,9}, -{25,-12,10}, -{25,-12,11}, -{25,-12,12}, -{25,-12,13}, -{25,-12,14}, -{25,-12,15}, -{25,-12,16}, -{25,-12,17}, -{25,-12,18}, -{25,-12,19}, -{25,-12,20}, -{25,-12,21}, -{25,-12,22}, -{25,-12,23}, -{25,-12,24}, -{25,-12,25}, -{25,-12,26}, -{25,-12,27}, -{25,-12,28}, -{25,-12,29}, -{25,-12,30}, -{25,-12,31}, -{25,-12,32}, -{25,-12,33}, -{25,-11,-16}, -{25,-11,-15}, -{25,-11,-14}, -{25,-11,-13}, -{25,-11,-12}, -{25,-11,-11}, -{25,-11,-10}, -{25,-11,-9}, -{25,-11,-8}, -{25,-11,-7}, -{25,-11,-6}, -{25,-11,-5}, -{25,-11,-4}, -{25,-11,-3}, -{25,-11,-2}, -{25,-11,-1}, -{25,-11,0}, -{25,-11,1}, -{25,-11,2}, -{25,-11,3}, -{25,-11,4}, -{25,-11,5}, -{25,-11,6}, -{25,-11,7}, -{25,-11,8}, -{25,-11,9}, -{25,-11,10}, -{25,-11,11}, -{25,-11,12}, -{25,-11,13}, -{25,-11,14}, -{25,-11,15}, -{25,-11,16}, -{25,-11,17}, -{25,-11,18}, -{25,-11,19}, -{25,-11,20}, -{25,-11,21}, -{25,-11,22}, -{25,-11,23}, -{25,-11,24}, -{25,-11,25}, -{25,-11,26}, -{25,-11,27}, -{25,-11,28}, -{25,-11,29}, -{25,-11,30}, -{25,-11,31}, -{25,-11,32}, -{25,-11,33}, -{25,-10,-17}, -{25,-10,-16}, -{25,-10,-15}, -{25,-10,-14}, -{25,-10,-13}, -{25,-10,-12}, -{25,-10,-11}, -{25,-10,-10}, -{25,-10,-9}, -{25,-10,-8}, -{25,-10,-7}, -{25,-10,-6}, -{25,-10,-5}, -{25,-10,-4}, -{25,-10,-3}, -{25,-10,-2}, -{25,-10,-1}, -{25,-10,0}, -{25,-10,1}, -{25,-10,2}, -{25,-10,3}, -{25,-10,4}, -{25,-10,5}, -{25,-10,6}, -{25,-10,7}, -{25,-10,8}, -{25,-10,9}, -{25,-10,10}, -{25,-10,11}, -{25,-10,12}, -{25,-10,13}, -{25,-10,14}, -{25,-10,15}, -{25,-10,16}, -{25,-10,17}, -{25,-10,18}, -{25,-10,19}, -{25,-10,20}, -{25,-10,21}, -{25,-10,22}, -{25,-10,23}, -{25,-10,24}, -{25,-10,25}, -{25,-10,26}, -{25,-10,27}, -{25,-10,28}, -{25,-10,29}, -{25,-10,30}, -{25,-10,31}, -{25,-10,32}, -{25,-10,33}, -{25,-9,-18}, -{25,-9,-17}, -{25,-9,-16}, -{25,-9,-15}, -{25,-9,-14}, -{25,-9,-13}, -{25,-9,-12}, -{25,-9,-11}, -{25,-9,-10}, -{25,-9,-9}, -{25,-9,-8}, -{25,-9,-7}, -{25,-9,-6}, -{25,-9,-5}, -{25,-9,-4}, -{25,-9,-3}, -{25,-9,-2}, -{25,-9,-1}, -{25,-9,0}, -{25,-9,1}, -{25,-9,2}, -{25,-9,3}, -{25,-9,4}, -{25,-9,5}, -{25,-9,6}, -{25,-9,7}, -{25,-9,8}, -{25,-9,9}, -{25,-9,10}, -{25,-9,11}, -{25,-9,12}, -{25,-9,13}, -{25,-9,14}, -{25,-9,15}, -{25,-9,16}, -{25,-9,17}, -{25,-9,18}, -{25,-9,19}, -{25,-9,20}, -{25,-9,21}, -{25,-9,22}, -{25,-9,23}, -{25,-9,24}, -{25,-9,25}, -{25,-9,26}, -{25,-9,27}, -{25,-9,28}, -{25,-9,29}, -{25,-9,30}, -{25,-9,31}, -{25,-9,32}, -{25,-9,33}, -{25,-8,-20}, -{25,-8,-19}, -{25,-8,-18}, -{25,-8,-17}, -{25,-8,-16}, -{25,-8,-15}, -{25,-8,-14}, -{25,-8,-13}, -{25,-8,-12}, -{25,-8,-11}, -{25,-8,-10}, -{25,-8,-9}, -{25,-8,-8}, -{25,-8,-7}, -{25,-8,-6}, -{25,-8,-5}, -{25,-8,-4}, -{25,-8,-3}, -{25,-8,-2}, -{25,-8,-1}, -{25,-8,0}, -{25,-8,1}, -{25,-8,2}, -{25,-8,3}, -{25,-8,4}, -{25,-8,5}, -{25,-8,6}, -{25,-8,7}, -{25,-8,8}, -{25,-8,9}, -{25,-8,10}, -{25,-8,11}, -{25,-8,12}, -{25,-8,13}, -{25,-8,14}, -{25,-8,15}, -{25,-8,16}, -{25,-8,17}, -{25,-8,18}, -{25,-8,19}, -{25,-8,20}, -{25,-8,21}, -{25,-8,22}, -{25,-8,23}, -{25,-8,24}, -{25,-8,25}, -{25,-8,26}, -{25,-8,27}, -{25,-8,28}, -{25,-8,29}, -{25,-8,30}, -{25,-8,31}, -{25,-8,32}, -{25,-8,33}, -{25,-7,-21}, -{25,-7,-20}, -{25,-7,-19}, -{25,-7,-18}, -{25,-7,-17}, -{25,-7,-16}, -{25,-7,-15}, -{25,-7,-14}, -{25,-7,-13}, -{25,-7,-12}, -{25,-7,-11}, -{25,-7,-10}, -{25,-7,-9}, -{25,-7,-8}, -{25,-7,-7}, -{25,-7,-6}, -{25,-7,-5}, -{25,-7,-4}, -{25,-7,-3}, -{25,-7,-2}, -{25,-7,-1}, -{25,-7,0}, -{25,-7,1}, -{25,-7,2}, -{25,-7,3}, -{25,-7,4}, -{25,-7,5}, -{25,-7,6}, -{25,-7,7}, -{25,-7,8}, -{25,-7,9}, -{25,-7,10}, -{25,-7,11}, -{25,-7,12}, -{25,-7,13}, -{25,-7,14}, -{25,-7,15}, -{25,-7,16}, -{25,-7,17}, -{25,-7,18}, -{25,-7,19}, -{25,-7,20}, -{25,-7,21}, -{25,-7,22}, -{25,-7,23}, -{25,-7,24}, -{25,-7,25}, -{25,-7,26}, -{25,-7,27}, -{25,-7,28}, -{25,-7,29}, -{25,-7,30}, -{25,-7,31}, -{25,-7,32}, -{25,-7,33}, -{25,-6,-22}, -{25,-6,-21}, -{25,-6,-20}, -{25,-6,-19}, -{25,-6,-18}, -{25,-6,-17}, -{25,-6,-16}, -{25,-6,-15}, -{25,-6,-14}, -{25,-6,-13}, -{25,-6,-12}, -{25,-6,-11}, -{25,-6,-10}, -{25,-6,-9}, -{25,-6,-8}, -{25,-6,-7}, -{25,-6,-6}, -{25,-6,-5}, -{25,-6,-4}, -{25,-6,-3}, -{25,-6,-2}, -{25,-6,-1}, -{25,-6,0}, -{25,-6,1}, -{25,-6,2}, -{25,-6,3}, -{25,-6,4}, -{25,-6,5}, -{25,-6,6}, -{25,-6,7}, -{25,-6,8}, -{25,-6,9}, -{25,-6,10}, -{25,-6,11}, -{25,-6,12}, -{25,-6,13}, -{25,-6,14}, -{25,-6,15}, -{25,-6,16}, -{25,-6,17}, -{25,-6,18}, -{25,-6,19}, -{25,-6,20}, -{25,-6,21}, -{25,-6,22}, -{25,-6,23}, -{25,-6,24}, -{25,-6,25}, -{25,-6,26}, -{25,-6,27}, -{25,-6,28}, -{25,-6,29}, -{25,-6,30}, -{25,-6,31}, -{25,-6,32}, -{25,-6,33}, -{25,-5,-23}, -{25,-5,-22}, -{25,-5,-21}, -{25,-5,-20}, -{25,-5,-19}, -{25,-5,-18}, -{25,-5,-17}, -{25,-5,-16}, -{25,-5,-15}, -{25,-5,-14}, -{25,-5,-13}, -{25,-5,-12}, -{25,-5,-11}, -{25,-5,-10}, -{25,-5,-9}, -{25,-5,-8}, -{25,-5,-7}, -{25,-5,-6}, -{25,-5,-5}, -{25,-5,-4}, -{25,-5,-3}, -{25,-5,-2}, -{25,-5,-1}, -{25,-5,0}, -{25,-5,1}, -{25,-5,2}, -{25,-5,3}, -{25,-5,4}, -{25,-5,5}, -{25,-5,6}, -{25,-5,7}, -{25,-5,8}, -{25,-5,9}, -{25,-5,10}, -{25,-5,11}, -{25,-5,12}, -{25,-5,13}, -{25,-5,14}, -{25,-5,15}, -{25,-5,16}, -{25,-5,17}, -{25,-5,18}, -{25,-5,19}, -{25,-5,20}, -{25,-5,21}, -{25,-5,22}, -{25,-5,23}, -{25,-5,24}, -{25,-5,25}, -{25,-5,26}, -{25,-5,27}, -{25,-5,28}, -{25,-5,29}, -{25,-5,30}, -{25,-5,31}, -{25,-5,32}, -{25,-5,33}, -{25,-4,-25}, -{25,-4,-24}, -{25,-4,-23}, -{25,-4,-22}, -{25,-4,-21}, -{25,-4,-20}, -{25,-4,-19}, -{25,-4,-18}, -{25,-4,-17}, -{25,-4,-16}, -{25,-4,-15}, -{25,-4,-14}, -{25,-4,-13}, -{25,-4,-12}, -{25,-4,-11}, -{25,-4,-10}, -{25,-4,-9}, -{25,-4,-8}, -{25,-4,-7}, -{25,-4,-6}, -{25,-4,-5}, -{25,-4,-4}, -{25,-4,-3}, -{25,-4,-2}, -{25,-4,-1}, -{25,-4,0}, -{25,-4,1}, -{25,-4,2}, -{25,-4,3}, -{25,-4,4}, -{25,-4,5}, -{25,-4,6}, -{25,-4,7}, -{25,-4,8}, -{25,-4,9}, -{25,-4,10}, -{25,-4,11}, -{25,-4,12}, -{25,-4,13}, -{25,-4,14}, -{25,-4,15}, -{25,-4,16}, -{25,-4,17}, -{25,-4,18}, -{25,-4,19}, -{25,-4,20}, -{25,-4,21}, -{25,-4,22}, -{25,-4,23}, -{25,-4,24}, -{25,-4,25}, -{25,-4,26}, -{25,-4,27}, -{25,-4,28}, -{25,-4,29}, -{25,-4,30}, -{25,-4,31}, -{25,-4,32}, -{25,-4,33}, -{25,-4,34}, -{25,-3,-26}, -{25,-3,-25}, -{25,-3,-24}, -{25,-3,-23}, -{25,-3,-22}, -{25,-3,-21}, -{25,-3,-20}, -{25,-3,-19}, -{25,-3,-18}, -{25,-3,-17}, -{25,-3,-16}, -{25,-3,-15}, -{25,-3,-14}, -{25,-3,-13}, -{25,-3,-12}, -{25,-3,-11}, -{25,-3,-10}, -{25,-3,-9}, -{25,-3,-8}, -{25,-3,-7}, -{25,-3,-6}, -{25,-3,-5}, -{25,-3,-4}, -{25,-3,-3}, -{25,-3,-2}, -{25,-3,-1}, -{25,-3,0}, -{25,-3,1}, -{25,-3,2}, -{25,-3,3}, -{25,-3,4}, -{25,-3,5}, -{25,-3,6}, -{25,-3,7}, -{25,-3,8}, -{25,-3,9}, -{25,-3,10}, -{25,-3,11}, -{25,-3,12}, -{25,-3,13}, -{25,-3,14}, -{25,-3,15}, -{25,-3,16}, -{25,-3,17}, -{25,-3,18}, -{25,-3,19}, -{25,-3,20}, -{25,-3,21}, -{25,-3,22}, -{25,-3,23}, -{25,-3,24}, -{25,-3,25}, -{25,-3,26}, -{25,-3,27}, -{25,-3,28}, -{25,-3,29}, -{25,-3,30}, -{25,-3,31}, -{25,-3,32}, -{25,-3,33}, -{25,-3,34}, -{25,-2,-27}, -{25,-2,-26}, -{25,-2,-25}, -{25,-2,-24}, -{25,-2,-23}, -{25,-2,-22}, -{25,-2,-21}, -{25,-2,-20}, -{25,-2,-19}, -{25,-2,-18}, -{25,-2,-17}, -{25,-2,-16}, -{25,-2,-15}, -{25,-2,-14}, -{25,-2,-13}, -{25,-2,-12}, -{25,-2,-11}, -{25,-2,-10}, -{25,-2,-9}, -{25,-2,-8}, -{25,-2,-7}, -{25,-2,-6}, -{25,-2,-5}, -{25,-2,-4}, -{25,-2,-3}, -{25,-2,-2}, -{25,-2,-1}, -{25,-2,0}, -{25,-2,1}, -{25,-2,2}, -{25,-2,3}, -{25,-2,4}, -{25,-2,5}, -{25,-2,6}, -{25,-2,7}, -{25,-2,8}, -{25,-2,9}, -{25,-2,10}, -{25,-2,11}, -{25,-2,12}, -{25,-2,13}, -{25,-2,14}, -{25,-2,15}, -{25,-2,16}, -{25,-2,17}, -{25,-2,18}, -{25,-2,19}, -{25,-2,20}, -{25,-2,21}, -{25,-2,22}, -{25,-2,23}, -{25,-2,24}, -{25,-2,25}, -{25,-2,26}, -{25,-2,27}, -{25,-2,28}, -{25,-2,29}, -{25,-2,30}, -{25,-2,31}, -{25,-2,32}, -{25,-2,33}, -{25,-2,34}, -{25,-1,-28}, -{25,-1,-27}, -{25,-1,-26}, -{25,-1,-25}, -{25,-1,-24}, -{25,-1,-23}, -{25,-1,-22}, -{25,-1,-21}, -{25,-1,-20}, -{25,-1,-19}, -{25,-1,-18}, -{25,-1,-17}, -{25,-1,-16}, -{25,-1,-15}, -{25,-1,-14}, -{25,-1,-13}, -{25,-1,-12}, -{25,-1,-11}, -{25,-1,-10}, -{25,-1,-9}, -{25,-1,-8}, -{25,-1,-7}, -{25,-1,-6}, -{25,-1,-5}, -{25,-1,-4}, -{25,-1,-3}, -{25,-1,-2}, -{25,-1,-1}, -{25,-1,0}, -{25,-1,1}, -{25,-1,2}, -{25,-1,3}, -{25,-1,4}, -{25,-1,5}, -{25,-1,6}, -{25,-1,7}, -{25,-1,8}, -{25,-1,9}, -{25,-1,10}, -{25,-1,11}, -{25,-1,12}, -{25,-1,13}, -{25,-1,14}, -{25,-1,15}, -{25,-1,16}, -{25,-1,17}, -{25,-1,18}, -{25,-1,19}, -{25,-1,20}, -{25,-1,21}, -{25,-1,22}, -{25,-1,23}, -{25,-1,24}, -{25,-1,25}, -{25,-1,26}, -{25,-1,27}, -{25,-1,28}, -{25,-1,29}, -{25,-1,30}, -{25,-1,31}, -{25,-1,32}, -{25,-1,33}, -{25,-1,34}, -{25,0,-29}, -{25,0,-28}, -{25,0,-27}, -{25,0,-26}, -{25,0,-25}, -{25,0,-24}, -{25,0,-23}, -{25,0,-22}, -{25,0,-21}, -{25,0,-20}, -{25,0,-19}, -{25,0,-18}, -{25,0,-17}, -{25,0,-16}, -{25,0,-15}, -{25,0,-14}, -{25,0,-13}, -{25,0,-12}, -{25,0,-11}, -{25,0,-10}, -{25,0,-9}, -{25,0,-8}, -{25,0,-7}, -{25,0,-6}, -{25,0,-5}, -{25,0,-4}, -{25,0,-3}, -{25,0,-2}, -{25,0,-1}, -{25,0,0}, -{25,0,1}, -{25,0,2}, -{25,0,3}, -{25,0,4}, -{25,0,5}, -{25,0,6}, -{25,0,7}, -{25,0,8}, -{25,0,9}, -{25,0,10}, -{25,0,11}, -{25,0,12}, -{25,0,13}, -{25,0,14}, -{25,0,15}, -{25,0,16}, -{25,0,17}, -{25,0,18}, -{25,0,19}, -{25,0,20}, -{25,0,21}, -{25,0,22}, -{25,0,23}, -{25,0,24}, -{25,0,25}, -{25,0,26}, -{25,0,27}, -{25,0,28}, -{25,0,29}, -{25,0,30}, -{25,0,31}, -{25,0,32}, -{25,0,33}, -{25,0,34}, -{25,1,-30}, -{25,1,-29}, -{25,1,-28}, -{25,1,-27}, -{25,1,-26}, -{25,1,-25}, -{25,1,-24}, -{25,1,-23}, -{25,1,-22}, -{25,1,-21}, -{25,1,-20}, -{25,1,-19}, -{25,1,-18}, -{25,1,-17}, -{25,1,-16}, -{25,1,-15}, -{25,1,-14}, -{25,1,-13}, -{25,1,-12}, -{25,1,-11}, -{25,1,-10}, -{25,1,-9}, -{25,1,-8}, -{25,1,-7}, -{25,1,-6}, -{25,1,-5}, -{25,1,-4}, -{25,1,-3}, -{25,1,-2}, -{25,1,-1}, -{25,1,0}, -{25,1,1}, -{25,1,2}, -{25,1,3}, -{25,1,4}, -{25,1,5}, -{25,1,6}, -{25,1,7}, -{25,1,8}, -{25,1,9}, -{25,1,10}, -{25,1,11}, -{25,1,12}, -{25,1,13}, -{25,1,14}, -{25,1,15}, -{25,1,16}, -{25,1,17}, -{25,1,18}, -{25,1,19}, -{25,1,20}, -{25,1,21}, -{25,1,22}, -{25,1,23}, -{25,1,24}, -{25,1,25}, -{25,1,26}, -{25,1,27}, -{25,1,28}, -{25,1,29}, -{25,1,30}, -{25,1,31}, -{25,1,32}, -{25,1,33}, -{25,1,34}, -{25,2,-31}, -{25,2,-30}, -{25,2,-29}, -{25,2,-28}, -{25,2,-27}, -{25,2,-26}, -{25,2,-25}, -{25,2,-24}, -{25,2,-23}, -{25,2,-22}, -{25,2,-21}, -{25,2,-20}, -{25,2,-19}, -{25,2,-18}, -{25,2,-17}, -{25,2,-16}, -{25,2,-15}, -{25,2,-14}, -{25,2,-13}, -{25,2,-12}, -{25,2,-11}, -{25,2,-10}, -{25,2,-9}, -{25,2,-8}, -{25,2,-7}, -{25,2,-6}, -{25,2,-5}, -{25,2,-4}, -{25,2,-3}, -{25,2,-2}, -{25,2,-1}, -{25,2,0}, -{25,2,1}, -{25,2,2}, -{25,2,3}, -{25,2,4}, -{25,2,5}, -{25,2,6}, -{25,2,7}, -{25,2,8}, -{25,2,9}, -{25,2,10}, -{25,2,11}, -{25,2,12}, -{25,2,13}, -{25,2,14}, -{25,2,15}, -{25,2,16}, -{25,2,17}, -{25,2,18}, -{25,2,19}, -{25,2,20}, -{25,2,21}, -{25,2,22}, -{25,2,23}, -{25,2,24}, -{25,2,25}, -{25,2,26}, -{25,2,27}, -{25,2,28}, -{25,2,29}, -{25,2,30}, -{25,2,31}, -{25,2,32}, -{25,2,33}, -{25,2,34}, -{25,3,-32}, -{25,3,-31}, -{25,3,-30}, -{25,3,-29}, -{25,3,-28}, -{25,3,-27}, -{25,3,-26}, -{25,3,-25}, -{25,3,-24}, -{25,3,-23}, -{25,3,-22}, -{25,3,-21}, -{25,3,-20}, -{25,3,-19}, -{25,3,-18}, -{25,3,-17}, -{25,3,-16}, -{25,3,-15}, -{25,3,-14}, -{25,3,-13}, -{25,3,-12}, -{25,3,-11}, -{25,3,-10}, -{25,3,-9}, -{25,3,-8}, -{25,3,-7}, -{25,3,-6}, -{25,3,-5}, -{25,3,-4}, -{25,3,-3}, -{25,3,-2}, -{25,3,-1}, -{25,3,0}, -{25,3,1}, -{25,3,2}, -{25,3,3}, -{25,3,4}, -{25,3,5}, -{25,3,6}, -{25,3,7}, -{25,3,8}, -{25,3,9}, -{25,3,10}, -{25,3,11}, -{25,3,12}, -{25,3,13}, -{25,3,14}, -{25,3,15}, -{25,3,16}, -{25,3,17}, -{25,3,18}, -{25,3,19}, -{25,3,20}, -{25,3,21}, -{25,3,22}, -{25,3,23}, -{25,3,24}, -{25,3,25}, -{25,3,26}, -{25,3,27}, -{25,3,28}, -{25,3,29}, -{25,3,30}, -{25,3,31}, -{25,3,32}, -{25,3,33}, -{25,3,34}, -{25,4,-34}, -{25,4,-33}, -{25,4,-32}, -{25,4,-31}, -{25,4,-30}, -{25,4,-29}, -{25,4,-28}, -{25,4,-27}, -{25,4,-26}, -{25,4,-25}, -{25,4,-24}, -{25,4,-23}, -{25,4,-22}, -{25,4,-21}, -{25,4,-20}, -{25,4,-19}, -{25,4,-18}, -{25,4,-17}, -{25,4,-16}, -{25,4,-15}, -{25,4,-14}, -{25,4,-13}, -{25,4,-12}, -{25,4,-11}, -{25,4,-10}, -{25,4,-9}, -{25,4,-8}, -{25,4,-7}, -{25,4,-6}, -{25,4,-5}, -{25,4,-4}, -{25,4,-3}, -{25,4,-2}, -{25,4,-1}, -{25,4,0}, -{25,4,1}, -{25,4,2}, -{25,4,3}, -{25,4,4}, -{25,4,5}, -{25,4,6}, -{25,4,7}, -{25,4,8}, -{25,4,9}, -{25,4,10}, -{25,4,11}, -{25,4,12}, -{25,4,13}, -{25,4,14}, -{25,4,15}, -{25,4,16}, -{25,4,17}, -{25,4,18}, -{25,4,19}, -{25,4,20}, -{25,4,21}, -{25,4,22}, -{25,4,23}, -{25,4,24}, -{25,4,25}, -{25,4,26}, -{25,4,27}, -{25,4,28}, -{25,4,29}, -{25,4,30}, -{25,4,31}, -{25,4,32}, -{25,4,33}, -{25,4,34}, -{25,5,-35}, -{25,5,-34}, -{25,5,-33}, -{25,5,-32}, -{25,5,-31}, -{25,5,-30}, -{25,5,-29}, -{25,5,-28}, -{25,5,-27}, -{25,5,-26}, -{25,5,-25}, -{25,5,-24}, -{25,5,-23}, -{25,5,-22}, -{25,5,-21}, -{25,5,-20}, -{25,5,-19}, -{25,5,-18}, -{25,5,-17}, -{25,5,-16}, -{25,5,-15}, -{25,5,-14}, -{25,5,-13}, -{25,5,-12}, -{25,5,-11}, -{25,5,-10}, -{25,5,-9}, -{25,5,-8}, -{25,5,-7}, -{25,5,-6}, -{25,5,-5}, -{25,5,-4}, -{25,5,-3}, -{25,5,-2}, -{25,5,-1}, -{25,5,0}, -{25,5,1}, -{25,5,2}, -{25,5,3}, -{25,5,4}, -{25,5,5}, -{25,5,6}, -{25,5,7}, -{25,5,8}, -{25,5,9}, -{25,5,10}, -{25,5,11}, -{25,5,12}, -{25,5,13}, -{25,5,14}, -{25,5,15}, -{25,5,16}, -{25,5,17}, -{25,5,18}, -{25,5,19}, -{25,5,20}, -{25,5,21}, -{25,5,22}, -{25,5,23}, -{25,5,24}, -{25,5,25}, -{25,5,26}, -{25,5,27}, -{25,5,28}, -{25,5,29}, -{25,5,30}, -{25,5,31}, -{25,5,32}, -{25,5,33}, -{25,5,34}, -{25,6,-36}, -{25,6,-35}, -{25,6,-34}, -{25,6,-33}, -{25,6,-32}, -{25,6,-31}, -{25,6,-30}, -{25,6,-29}, -{25,6,-28}, -{25,6,-27}, -{25,6,-26}, -{25,6,-25}, -{25,6,-24}, -{25,6,-23}, -{25,6,-22}, -{25,6,-21}, -{25,6,-20}, -{25,6,-19}, -{25,6,-18}, -{25,6,-17}, -{25,6,-16}, -{25,6,-15}, -{25,6,-14}, -{25,6,-13}, -{25,6,-12}, -{25,6,-11}, -{25,6,-10}, -{25,6,-9}, -{25,6,-8}, -{25,6,-7}, -{25,6,-6}, -{25,6,-5}, -{25,6,-4}, -{25,6,-3}, -{25,6,-2}, -{25,6,-1}, -{25,6,0}, -{25,6,1}, -{25,6,2}, -{25,6,3}, -{25,6,4}, -{25,6,5}, -{25,6,6}, -{25,6,7}, -{25,6,8}, -{25,6,9}, -{25,6,10}, -{25,6,11}, -{25,6,12}, -{25,6,13}, -{25,6,14}, -{25,6,15}, -{25,6,16}, -{25,6,17}, -{25,6,18}, -{25,6,19}, -{25,6,20}, -{25,6,21}, -{25,6,22}, -{25,6,23}, -{25,6,24}, -{25,6,25}, -{25,6,26}, -{25,6,27}, -{25,6,28}, -{25,6,29}, -{25,6,30}, -{25,6,31}, -{25,6,32}, -{25,6,33}, -{25,6,34}, -{25,7,-37}, -{25,7,-36}, -{25,7,-35}, -{25,7,-34}, -{25,7,-33}, -{25,7,-32}, -{25,7,-31}, -{25,7,-30}, -{25,7,-29}, -{25,7,-28}, -{25,7,-27}, -{25,7,-26}, -{25,7,-25}, -{25,7,-24}, -{25,7,-23}, -{25,7,-22}, -{25,7,-21}, -{25,7,-20}, -{25,7,-19}, -{25,7,-18}, -{25,7,-17}, -{25,7,-16}, -{25,7,-15}, -{25,7,-14}, -{25,7,-13}, -{25,7,-12}, -{25,7,-11}, -{25,7,-10}, -{25,7,-9}, -{25,7,-8}, -{25,7,-7}, -{25,7,-6}, -{25,7,-5}, -{25,7,-4}, -{25,7,-3}, -{25,7,-2}, -{25,7,-1}, -{25,7,0}, -{25,7,1}, -{25,7,2}, -{25,7,3}, -{25,7,4}, -{25,7,5}, -{25,7,6}, -{25,7,7}, -{25,7,8}, -{25,7,9}, -{25,7,10}, -{25,7,11}, -{25,7,12}, -{25,7,13}, -{25,7,14}, -{25,7,15}, -{25,7,16}, -{25,7,17}, -{25,7,18}, -{25,7,19}, -{25,7,20}, -{25,7,21}, -{25,7,22}, -{25,7,23}, -{25,7,24}, -{25,7,25}, -{25,7,26}, -{25,7,27}, -{25,7,28}, -{25,7,29}, -{25,7,30}, -{25,7,31}, -{25,7,32}, -{25,7,33}, -{25,7,34}, -{25,8,-38}, -{25,8,-37}, -{25,8,-36}, -{25,8,-35}, -{25,8,-34}, -{25,8,-33}, -{25,8,-32}, -{25,8,-31}, -{25,8,-30}, -{25,8,-29}, -{25,8,-28}, -{25,8,-27}, -{25,8,-26}, -{25,8,-25}, -{25,8,-24}, -{25,8,-23}, -{25,8,-22}, -{25,8,-21}, -{25,8,-20}, -{25,8,-19}, -{25,8,-18}, -{25,8,-17}, -{25,8,-16}, -{25,8,-15}, -{25,8,-14}, -{25,8,-13}, -{25,8,-12}, -{25,8,-11}, -{25,8,-10}, -{25,8,-9}, -{25,8,-8}, -{25,8,-7}, -{25,8,-6}, -{25,8,-5}, -{25,8,-4}, -{25,8,-3}, -{25,8,-2}, -{25,8,-1}, -{25,8,0}, -{25,8,1}, -{25,8,2}, -{25,8,3}, -{25,8,4}, -{25,8,5}, -{25,8,6}, -{25,8,7}, -{25,8,8}, -{25,8,9}, -{25,8,10}, -{25,8,11}, -{25,8,12}, -{25,8,13}, -{25,8,14}, -{25,8,15}, -{25,8,16}, -{25,8,17}, -{25,8,18}, -{25,8,19}, -{25,8,20}, -{25,8,21}, -{25,8,22}, -{25,8,23}, -{25,8,24}, -{25,8,25}, -{25,8,26}, -{25,8,27}, -{25,8,28}, -{25,8,29}, -{25,8,30}, -{25,8,31}, -{25,8,32}, -{25,8,33}, -{25,8,34}, -{25,9,-39}, -{25,9,-38}, -{25,9,-37}, -{25,9,-36}, -{25,9,-35}, -{25,9,-34}, -{25,9,-33}, -{25,9,-32}, -{25,9,-31}, -{25,9,-30}, -{25,9,-29}, -{25,9,-28}, -{25,9,-27}, -{25,9,-26}, -{25,9,-25}, -{25,9,-24}, -{25,9,-23}, -{25,9,-22}, -{25,9,-21}, -{25,9,-20}, -{25,9,-19}, -{25,9,-18}, -{25,9,-17}, -{25,9,-16}, -{25,9,-15}, -{25,9,-14}, -{25,9,-13}, -{25,9,-12}, -{25,9,-11}, -{25,9,-10}, -{25,9,-9}, -{25,9,-8}, -{25,9,-7}, -{25,9,-6}, -{25,9,-5}, -{25,9,-4}, -{25,9,-3}, -{25,9,-2}, -{25,9,-1}, -{25,9,0}, -{25,9,1}, -{25,9,2}, -{25,9,3}, -{25,9,4}, -{25,9,5}, -{25,9,6}, -{25,9,7}, -{25,9,8}, -{25,9,9}, -{25,9,10}, -{25,9,11}, -{25,9,12}, -{25,9,13}, -{25,9,14}, -{25,9,15}, -{25,9,16}, -{25,9,17}, -{25,9,18}, -{25,9,19}, -{25,9,20}, -{25,9,21}, -{25,9,22}, -{25,9,23}, -{25,9,24}, -{25,9,25}, -{25,9,26}, -{25,9,27}, -{25,9,28}, -{25,9,29}, -{25,9,30}, -{25,9,31}, -{25,9,32}, -{25,9,33}, -{25,9,34}, -{25,10,-40}, -{25,10,-39}, -{25,10,-38}, -{25,10,-37}, -{25,10,-36}, -{25,10,-35}, -{25,10,-34}, -{25,10,-33}, -{25,10,-32}, -{25,10,-31}, -{25,10,-30}, -{25,10,-29}, -{25,10,-28}, -{25,10,-27}, -{25,10,-26}, -{25,10,-25}, -{25,10,-24}, -{25,10,-23}, -{25,10,-22}, -{25,10,-21}, -{25,10,-20}, -{25,10,-19}, -{25,10,-18}, -{25,10,-17}, -{25,10,-16}, -{25,10,-15}, -{25,10,-14}, -{25,10,-13}, -{25,10,-12}, -{25,10,-11}, -{25,10,-10}, -{25,10,-9}, -{25,10,-8}, -{25,10,-7}, -{25,10,-6}, -{25,10,-5}, -{25,10,-4}, -{25,10,-3}, -{25,10,-2}, -{25,10,-1}, -{25,10,0}, -{25,10,1}, -{25,10,2}, -{25,10,3}, -{25,10,4}, -{25,10,5}, -{25,10,6}, -{25,10,7}, -{25,10,8}, -{25,10,9}, -{25,10,10}, -{25,10,11}, -{25,10,12}, -{25,10,13}, -{25,10,14}, -{25,10,15}, -{25,10,16}, -{25,10,17}, -{25,10,18}, -{25,10,19}, -{25,10,20}, -{25,10,21}, -{25,10,22}, -{25,10,23}, -{25,10,24}, -{25,10,25}, -{25,10,26}, -{25,10,27}, -{25,10,28}, -{25,10,29}, -{25,10,30}, -{25,10,31}, -{25,10,32}, -{25,10,33}, -{25,10,34}, -{25,11,-41}, -{25,11,-40}, -{25,11,-39}, -{25,11,-38}, -{25,11,-37}, -{25,11,-36}, -{25,11,-35}, -{25,11,-34}, -{25,11,-33}, -{25,11,-32}, -{25,11,-31}, -{25,11,-30}, -{25,11,-29}, -{25,11,-28}, -{25,11,-27}, -{25,11,-26}, -{25,11,-25}, -{25,11,-24}, -{25,11,-23}, -{25,11,-22}, -{25,11,-21}, -{25,11,-20}, -{25,11,-19}, -{25,11,-18}, -{25,11,-17}, -{25,11,-16}, -{25,11,-15}, -{25,11,-14}, -{25,11,-13}, -{25,11,-12}, -{25,11,-11}, -{25,11,-10}, -{25,11,-9}, -{25,11,-8}, -{25,11,-7}, -{25,11,-6}, -{25,11,-5}, -{25,11,-4}, -{25,11,-3}, -{25,11,-2}, -{25,11,-1}, -{25,11,0}, -{25,11,1}, -{25,11,2}, -{25,11,3}, -{25,11,4}, -{25,11,5}, -{25,11,6}, -{25,11,7}, -{25,11,8}, -{25,11,9}, -{25,11,10}, -{25,11,11}, -{25,11,12}, -{25,11,13}, -{25,11,14}, -{25,11,15}, -{25,11,16}, -{25,11,17}, -{25,11,18}, -{25,11,19}, -{25,11,20}, -{25,11,21}, -{25,11,22}, -{25,11,23}, -{25,11,24}, -{25,11,25}, -{25,11,26}, -{25,11,27}, -{25,11,28}, -{25,11,29}, -{25,11,30}, -{25,11,31}, -{25,11,32}, -{25,11,33}, -{25,11,34}, -{25,12,-42}, -{25,12,-41}, -{25,12,-40}, -{25,12,-39}, -{25,12,-38}, -{25,12,-37}, -{25,12,-36}, -{25,12,-35}, -{25,12,-34}, -{25,12,-33}, -{25,12,-32}, -{25,12,-31}, -{25,12,-30}, -{25,12,-29}, -{25,12,-28}, -{25,12,-27}, -{25,12,-26}, -{25,12,-25}, -{25,12,-24}, -{25,12,-23}, -{25,12,-22}, -{25,12,-21}, -{25,12,-20}, -{25,12,-19}, -{25,12,-18}, -{25,12,-17}, -{25,12,-16}, -{25,12,-15}, -{25,12,-14}, -{25,12,-13}, -{25,12,-12}, -{25,12,-11}, -{25,12,-10}, -{25,12,-9}, -{25,12,-8}, -{25,12,-7}, -{25,12,-6}, -{25,12,-5}, -{25,12,-4}, -{25,12,-3}, -{25,12,-2}, -{25,12,-1}, -{25,12,0}, -{25,12,1}, -{25,12,2}, -{25,12,3}, -{25,12,4}, -{25,12,5}, -{25,12,6}, -{25,12,7}, -{25,12,8}, -{25,12,9}, -{25,12,10}, -{25,12,11}, -{25,12,12}, -{25,12,13}, -{25,12,14}, -{25,12,15}, -{25,12,16}, -{25,12,17}, -{25,12,18}, -{25,12,19}, -{25,12,20}, -{25,12,21}, -{25,12,22}, -{25,12,23}, -{25,12,24}, -{25,12,25}, -{25,12,26}, -{25,12,27}, -{25,12,28}, -{25,12,29}, -{25,12,30}, -{25,12,31}, -{25,12,32}, -{25,12,33}, -{25,12,34}, -{25,13,-43}, -{25,13,-42}, -{25,13,-41}, -{25,13,-40}, -{25,13,-39}, -{25,13,-38}, -{25,13,-37}, -{25,13,-36}, -{25,13,-35}, -{25,13,-34}, -{25,13,-33}, -{25,13,-32}, -{25,13,-31}, -{25,13,-30}, -{25,13,-29}, -{25,13,-28}, -{25,13,-27}, -{25,13,-26}, -{25,13,-25}, -{25,13,-24}, -{25,13,-23}, -{25,13,-22}, -{25,13,-21}, -{25,13,-20}, -{25,13,-19}, -{25,13,-18}, -{25,13,-17}, -{25,13,-16}, -{25,13,-15}, -{25,13,-14}, -{25,13,-13}, -{25,13,-12}, -{25,13,-11}, -{25,13,-10}, -{25,13,-9}, -{25,13,-8}, -{25,13,-7}, -{25,13,-6}, -{25,13,-5}, -{25,13,-4}, -{25,13,-3}, -{25,13,-2}, -{25,13,-1}, -{25,13,0}, -{25,13,1}, -{25,13,2}, -{25,13,3}, -{25,13,4}, -{25,13,5}, -{25,13,6}, -{25,13,7}, -{25,13,8}, -{25,13,9}, -{25,13,10}, -{25,13,11}, -{25,13,12}, -{25,13,13}, -{25,13,14}, -{25,13,15}, -{25,13,16}, -{25,13,17}, -{25,13,18}, -{25,13,19}, -{25,13,20}, -{25,13,21}, -{25,13,22}, -{25,13,23}, -{25,13,24}, -{25,13,25}, -{25,13,26}, -{25,13,27}, -{25,13,28}, -{25,13,29}, -{25,13,30}, -{25,13,31}, -{25,13,32}, -{25,13,33}, -{25,13,34}, -{25,13,35}, -{25,14,-44}, -{25,14,-43}, -{25,14,-42}, -{25,14,-41}, -{25,14,-40}, -{25,14,-39}, -{25,14,-38}, -{25,14,-37}, -{25,14,-36}, -{25,14,-35}, -{25,14,-34}, -{25,14,-33}, -{25,14,-32}, -{25,14,-31}, -{25,14,-30}, -{25,14,-29}, -{25,14,-28}, -{25,14,-27}, -{25,14,-26}, -{25,14,-25}, -{25,14,-24}, -{25,14,-23}, -{25,14,-22}, -{25,14,-21}, -{25,14,-20}, -{25,14,-19}, -{25,14,-18}, -{25,14,-17}, -{25,14,-16}, -{25,14,-15}, -{25,14,-14}, -{25,14,-13}, -{25,14,-12}, -{25,14,-11}, -{25,14,-10}, -{25,14,-9}, -{25,14,-8}, -{25,14,-7}, -{25,14,-6}, -{25,14,-5}, -{25,14,-4}, -{25,14,-3}, -{25,14,-2}, -{25,14,-1}, -{25,14,0}, -{25,14,1}, -{25,14,2}, -{25,14,3}, -{25,14,4}, -{25,14,5}, -{25,14,6}, -{25,14,7}, -{25,14,8}, -{25,14,9}, -{25,14,10}, -{25,14,11}, -{25,14,12}, -{25,14,13}, -{25,14,14}, -{25,14,15}, -{25,14,16}, -{25,14,17}, -{25,14,18}, -{25,14,19}, -{25,14,20}, -{25,14,21}, -{25,14,22}, -{25,14,23}, -{25,14,24}, -{25,14,25}, -{25,14,26}, -{25,14,27}, -{25,14,28}, -{25,14,29}, -{25,14,30}, -{25,14,31}, -{25,14,32}, -{25,14,33}, -{25,14,34}, -{25,14,35}, -{25,15,-45}, -{25,15,-44}, -{25,15,-43}, -{25,15,-42}, -{25,15,-41}, -{25,15,-40}, -{25,15,-39}, -{25,15,-38}, -{25,15,-37}, -{25,15,-36}, -{25,15,-35}, -{25,15,-34}, -{25,15,-33}, -{25,15,-32}, -{25,15,-31}, -{25,15,-30}, -{25,15,-29}, -{25,15,-28}, -{25,15,-27}, -{25,15,-26}, -{25,15,-25}, -{25,15,-24}, -{25,15,-23}, -{25,15,-22}, -{25,15,-21}, -{25,15,-20}, -{25,15,-19}, -{25,15,-18}, -{25,15,-17}, -{25,15,-16}, -{25,15,-15}, -{25,15,-14}, -{25,15,-13}, -{25,15,-12}, -{25,15,-11}, -{25,15,-10}, -{25,15,-9}, -{25,15,-8}, -{25,15,-7}, -{25,15,-6}, -{25,15,-5}, -{25,15,-4}, -{25,15,-3}, -{25,15,-2}, -{25,15,-1}, -{25,15,0}, -{25,15,1}, -{25,15,2}, -{25,15,3}, -{25,15,4}, -{25,15,5}, -{25,15,6}, -{25,15,7}, -{25,15,8}, -{25,15,9}, -{25,15,10}, -{25,15,11}, -{25,15,12}, -{25,15,13}, -{25,15,14}, -{25,15,15}, -{25,15,16}, -{25,15,17}, -{25,15,18}, -{25,15,19}, -{25,15,20}, -{25,15,21}, -{25,15,22}, -{25,15,23}, -{25,15,24}, -{25,15,25}, -{25,15,26}, -{25,15,27}, -{25,15,28}, -{25,15,29}, -{25,15,30}, -{25,15,31}, -{25,15,32}, -{25,15,33}, -{25,15,34}, -{25,15,35}, -{25,16,-46}, -{25,16,-45}, -{25,16,-44}, -{25,16,-43}, -{25,16,-42}, -{25,16,-41}, -{25,16,-40}, -{25,16,-39}, -{25,16,-38}, -{25,16,-37}, -{25,16,-36}, -{25,16,-35}, -{25,16,-34}, -{25,16,-33}, -{25,16,-32}, -{25,16,-31}, -{25,16,-30}, -{25,16,-29}, -{25,16,-28}, -{25,16,-27}, -{25,16,-26}, -{25,16,-25}, -{25,16,-24}, -{25,16,-23}, -{25,16,-22}, -{25,16,-21}, -{25,16,-20}, -{25,16,-19}, -{25,16,-18}, -{25,16,-17}, -{25,16,-16}, -{25,16,-15}, -{25,16,-14}, -{25,16,-13}, -{25,16,-12}, -{25,16,-11}, -{25,16,-10}, -{25,16,-9}, -{25,16,-8}, -{25,16,-7}, -{25,16,-6}, -{25,16,-5}, -{25,16,-4}, -{25,16,-3}, -{25,16,-2}, -{25,16,-1}, -{25,16,0}, -{25,16,1}, -{25,16,2}, -{25,16,3}, -{25,16,4}, -{25,16,5}, -{25,16,6}, -{25,16,7}, -{25,16,8}, -{25,16,9}, -{25,16,10}, -{25,16,11}, -{25,16,12}, -{25,16,13}, -{25,16,14}, -{25,16,15}, -{25,16,16}, -{25,16,17}, -{25,16,18}, -{25,16,19}, -{25,16,20}, -{25,16,21}, -{25,16,22}, -{25,16,23}, -{25,16,24}, -{25,16,25}, -{25,16,26}, -{25,16,27}, -{25,16,28}, -{25,16,29}, -{25,16,30}, -{25,16,31}, -{25,16,32}, -{25,16,33}, -{25,16,34}, -{25,16,35}, -{25,17,-47}, -{25,17,-46}, -{25,17,-45}, -{25,17,-44}, -{25,17,-43}, -{25,17,-42}, -{25,17,-41}, -{25,17,-40}, -{25,17,-39}, -{25,17,-38}, -{25,17,-37}, -{25,17,-36}, -{25,17,-35}, -{25,17,-34}, -{25,17,-33}, -{25,17,-32}, -{25,17,-31}, -{25,17,-30}, -{25,17,-29}, -{25,17,-28}, -{25,17,-27}, -{25,17,-26}, -{25,17,-25}, -{25,17,-24}, -{25,17,-23}, -{25,17,-22}, -{25,17,-21}, -{25,17,-20}, -{25,17,-19}, -{25,17,-18}, -{25,17,-17}, -{25,17,-16}, -{25,17,-15}, -{25,17,-14}, -{25,17,-13}, -{25,17,-12}, -{25,17,-11}, -{25,17,-10}, -{25,17,-9}, -{25,17,-8}, -{25,17,-7}, -{25,17,-6}, -{25,17,-5}, -{25,17,-4}, -{25,17,-3}, -{25,17,-2}, -{25,17,-1}, -{25,17,0}, -{25,17,1}, -{25,17,2}, -{25,17,3}, -{25,17,4}, -{25,17,5}, -{25,17,6}, -{25,17,7}, -{25,17,8}, -{25,17,9}, -{25,17,10}, -{25,17,11}, -{25,17,12}, -{25,17,13}, -{25,17,14}, -{25,17,15}, -{25,17,16}, -{25,17,17}, -{25,17,18}, -{25,17,19}, -{25,17,20}, -{25,17,21}, -{25,17,22}, -{25,17,23}, -{25,17,24}, -{25,17,25}, -{25,17,26}, -{25,17,27}, -{25,17,28}, -{25,17,29}, -{25,17,30}, -{25,17,31}, -{25,17,32}, -{25,17,33}, -{25,17,34}, -{25,17,35}, -{25,18,-48}, -{25,18,-47}, -{25,18,-46}, -{25,18,-45}, -{25,18,-44}, -{25,18,-43}, -{25,18,-42}, -{25,18,-41}, -{25,18,-40}, -{25,18,-39}, -{25,18,-38}, -{25,18,-37}, -{25,18,-36}, -{25,18,-35}, -{25,18,-34}, -{25,18,-33}, -{25,18,-32}, -{25,18,-31}, -{25,18,-30}, -{25,18,-29}, -{25,18,-28}, -{25,18,-27}, -{25,18,-26}, -{25,18,-25}, -{25,18,-24}, -{25,18,-23}, -{25,18,-22}, -{25,18,-21}, -{25,18,-20}, -{25,18,-19}, -{25,18,-18}, -{25,18,-17}, -{25,18,-16}, -{25,18,-15}, -{25,18,-14}, -{25,18,-13}, -{25,18,-12}, -{25,18,-11}, -{25,18,-10}, -{25,18,-9}, -{25,18,-8}, -{25,18,-7}, -{25,18,-6}, -{25,18,-5}, -{25,18,-4}, -{25,18,-3}, -{25,18,-2}, -{25,18,-1}, -{25,18,0}, -{25,18,1}, -{25,18,2}, -{25,18,3}, -{25,18,4}, -{25,18,5}, -{25,18,6}, -{25,18,7}, -{25,18,8}, -{25,18,9}, -{25,18,10}, -{25,18,11}, -{25,18,12}, -{25,18,13}, -{25,18,14}, -{25,18,15}, -{25,18,16}, -{25,18,17}, -{25,18,18}, -{25,18,19}, -{25,18,20}, -{25,18,21}, -{25,18,22}, -{25,18,23}, -{25,18,24}, -{25,18,25}, -{25,18,26}, -{25,18,27}, -{25,18,28}, -{25,18,29}, -{25,18,30}, -{25,18,31}, -{25,18,32}, -{25,18,33}, -{25,18,34}, -{25,18,35}, -{25,19,-49}, -{25,19,-48}, -{25,19,-47}, -{25,19,-46}, -{25,19,-45}, -{25,19,-44}, -{25,19,-43}, -{25,19,-42}, -{25,19,-41}, -{25,19,-40}, -{25,19,-39}, -{25,19,-38}, -{25,19,-37}, -{25,19,-36}, -{25,19,-35}, -{25,19,-34}, -{25,19,-33}, -{25,19,-32}, -{25,19,-31}, -{25,19,-30}, -{25,19,-29}, -{25,19,-28}, -{25,19,-27}, -{25,19,-26}, -{25,19,-25}, -{25,19,-24}, -{25,19,-23}, -{25,19,-22}, -{25,19,-21}, -{25,19,-20}, -{25,19,-19}, -{25,19,-18}, -{25,19,-17}, -{25,19,-16}, -{25,19,-15}, -{25,19,-14}, -{25,19,-13}, -{25,19,-12}, -{25,19,-11}, -{25,19,-10}, -{25,19,-9}, -{25,19,-8}, -{25,19,-7}, -{25,19,-6}, -{25,19,-5}, -{25,19,-4}, -{25,19,-3}, -{25,19,-2}, -{25,19,-1}, -{25,19,0}, -{25,19,1}, -{25,19,2}, -{25,19,3}, -{25,19,4}, -{25,19,5}, -{25,19,6}, -{25,19,7}, -{25,19,8}, -{25,19,9}, -{25,19,10}, -{25,19,11}, -{25,19,12}, -{25,19,13}, -{25,19,14}, -{25,19,15}, -{25,19,16}, -{25,19,17}, -{25,19,18}, -{25,19,19}, -{25,19,20}, -{25,19,21}, -{25,19,22}, -{25,19,23}, -{25,19,24}, -{25,19,25}, -{25,19,26}, -{25,19,27}, -{25,19,28}, -{25,19,29}, -{25,19,30}, -{25,19,31}, -{25,19,32}, -{25,19,33}, -{25,19,34}, -{25,19,35}, -{25,20,-50}, -{25,20,-49}, -{25,20,-48}, -{25,20,-47}, -{25,20,-46}, -{25,20,-45}, -{25,20,-44}, -{25,20,-43}, -{25,20,-42}, -{25,20,-41}, -{25,20,-40}, -{25,20,-39}, -{25,20,-38}, -{25,20,-37}, -{25,20,-36}, -{25,20,-35}, -{25,20,-34}, -{25,20,-33}, -{25,20,-32}, -{25,20,-31}, -{25,20,-30}, -{25,20,-29}, -{25,20,-28}, -{25,20,-27}, -{25,20,-26}, -{25,20,-25}, -{25,20,-24}, -{25,20,-23}, -{25,20,-22}, -{25,20,-21}, -{25,20,-20}, -{25,20,-19}, -{25,20,-18}, -{25,20,-17}, -{25,20,-16}, -{25,20,-15}, -{25,20,-14}, -{25,20,-13}, -{25,20,-12}, -{25,20,-11}, -{25,20,-10}, -{25,20,-9}, -{25,20,-8}, -{25,20,-7}, -{25,20,-6}, -{25,20,-5}, -{25,20,-4}, -{25,20,-3}, -{25,20,-2}, -{25,20,-1}, -{25,20,0}, -{25,20,1}, -{25,20,2}, -{25,20,3}, -{25,20,4}, -{25,20,5}, -{25,20,6}, -{25,20,7}, -{25,20,8}, -{25,20,9}, -{25,20,10}, -{25,20,11}, -{25,20,12}, -{25,20,13}, -{25,20,14}, -{25,20,15}, -{25,20,16}, -{25,20,17}, -{25,20,18}, -{25,20,19}, -{25,20,20}, -{25,20,21}, -{25,20,22}, -{25,20,23}, -{25,20,24}, -{25,20,25}, -{25,20,26}, -{25,20,27}, -{25,20,28}, -{25,20,29}, -{25,20,30}, -{25,20,31}, -{25,20,32}, -{25,20,33}, -{25,20,34}, -{25,20,35}, -{25,21,-51}, -{25,21,-50}, -{25,21,-49}, -{25,21,-48}, -{25,21,-47}, -{25,21,-46}, -{25,21,-45}, -{25,21,-44}, -{25,21,-43}, -{25,21,-42}, -{25,21,-41}, -{25,21,-40}, -{25,21,-39}, -{25,21,-38}, -{25,21,-37}, -{25,21,-36}, -{25,21,-35}, -{25,21,-34}, -{25,21,-33}, -{25,21,-32}, -{25,21,-31}, -{25,21,-30}, -{25,21,-29}, -{25,21,-28}, -{25,21,-27}, -{25,21,-26}, -{25,21,-25}, -{25,21,-24}, -{25,21,-23}, -{25,21,-22}, -{25,21,-21}, -{25,21,-20}, -{25,21,-19}, -{25,21,-18}, -{25,21,-17}, -{25,21,-16}, -{25,21,-15}, -{25,21,-14}, -{25,21,-13}, -{25,21,-12}, -{25,21,-11}, -{25,21,-10}, -{25,21,-9}, -{25,21,-8}, -{25,21,-7}, -{25,21,-6}, -{25,21,-5}, -{25,21,-4}, -{25,21,-3}, -{25,21,-2}, -{25,21,-1}, -{25,21,0}, -{25,21,1}, -{25,21,2}, -{25,21,3}, -{25,21,4}, -{25,21,5}, -{25,21,6}, -{25,21,7}, -{25,21,8}, -{25,21,9}, -{25,21,10}, -{25,21,11}, -{25,21,12}, -{25,21,13}, -{25,21,14}, -{25,21,15}, -{25,21,16}, -{25,21,17}, -{25,21,18}, -{25,21,19}, -{25,21,20}, -{25,21,21}, -{25,21,22}, -{25,21,23}, -{25,21,24}, -{25,21,25}, -{25,21,26}, -{25,21,27}, -{25,21,28}, -{25,21,29}, -{25,21,30}, -{25,21,31}, -{25,21,32}, -{25,21,33}, -{25,21,34}, -{25,21,35}, -{25,22,-52}, -{25,22,-51}, -{25,22,-50}, -{25,22,-49}, -{25,22,-48}, -{25,22,-47}, -{25,22,-46}, -{25,22,-45}, -{25,22,-44}, -{25,22,-43}, -{25,22,-42}, -{25,22,-41}, -{25,22,-40}, -{25,22,-39}, -{25,22,-38}, -{25,22,-37}, -{25,22,-36}, -{25,22,-35}, -{25,22,-34}, -{25,22,-33}, -{25,22,-32}, -{25,22,-31}, -{25,22,-30}, -{25,22,-29}, -{25,22,-28}, -{25,22,-27}, -{25,22,-26}, -{25,22,-25}, -{25,22,-24}, -{25,22,-23}, -{25,22,-22}, -{25,22,-21}, -{25,22,-20}, -{25,22,-19}, -{25,22,-18}, -{25,22,-17}, -{25,22,-16}, -{25,22,-15}, -{25,22,-14}, -{25,22,-13}, -{25,22,-12}, -{25,22,-11}, -{25,22,-10}, -{25,22,-9}, -{25,22,-8}, -{25,22,-7}, -{25,22,-6}, -{25,22,-5}, -{25,22,-4}, -{25,22,-3}, -{25,22,-2}, -{25,22,-1}, -{25,22,0}, -{25,22,1}, -{25,22,2}, -{25,22,3}, -{25,22,4}, -{25,22,5}, -{25,22,6}, -{25,22,7}, -{25,22,8}, -{25,22,9}, -{25,22,10}, -{25,22,11}, -{25,22,12}, -{25,22,13}, -{25,22,14}, -{25,22,15}, -{25,22,16}, -{25,22,17}, -{25,22,18}, -{25,22,19}, -{25,22,20}, -{25,22,21}, -{25,22,22}, -{25,22,23}, -{25,22,24}, -{25,22,25}, -{25,22,26}, -{25,22,27}, -{25,22,28}, -{25,22,29}, -{25,22,30}, -{25,22,31}, -{25,22,32}, -{25,22,33}, -{25,22,34}, -{25,22,35}, -{25,23,-53}, -{25,23,-52}, -{25,23,-51}, -{25,23,-50}, -{25,23,-49}, -{25,23,-48}, -{25,23,-47}, -{25,23,-46}, -{25,23,-45}, -{25,23,-44}, -{25,23,-43}, -{25,23,-42}, -{25,23,-41}, -{25,23,-40}, -{25,23,-39}, -{25,23,-38}, -{25,23,-37}, -{25,23,-36}, -{25,23,-35}, -{25,23,-34}, -{25,23,-33}, -{25,23,-32}, -{25,23,-31}, -{25,23,-30}, -{25,23,-29}, -{25,23,-28}, -{25,23,-27}, -{25,23,-26}, -{25,23,-25}, -{25,23,-24}, -{25,23,-23}, -{25,23,-22}, -{25,23,-21}, -{25,23,-20}, -{25,23,-19}, -{25,23,-18}, -{25,23,-17}, -{25,23,-16}, -{25,23,-15}, -{25,23,-14}, -{25,23,-13}, -{25,23,-12}, -{25,23,-11}, -{25,23,-10}, -{25,23,-9}, -{25,23,-8}, -{25,23,-7}, -{25,23,-6}, -{25,23,-5}, -{25,23,-4}, -{25,23,-3}, -{25,23,-2}, -{25,23,-1}, -{25,23,0}, -{25,23,1}, -{25,23,2}, -{25,23,3}, -{25,23,4}, -{25,23,5}, -{25,23,6}, -{25,23,7}, -{25,23,8}, -{25,23,9}, -{25,23,10}, -{25,23,11}, -{25,23,12}, -{25,23,13}, -{25,23,14}, -{25,23,15}, -{25,23,16}, -{25,23,17}, -{25,23,18}, -{25,23,19}, -{25,23,20}, -{25,23,21}, -{25,23,22}, -{25,23,23}, -{25,23,24}, -{25,23,25}, -{25,23,26}, -{25,23,27}, -{25,23,28}, -{25,23,29}, -{25,23,30}, -{25,23,31}, -{25,23,32}, -{25,23,33}, -{25,23,34}, -{25,23,35}, -{25,24,-54}, -{25,24,-53}, -{25,24,-52}, -{25,24,-51}, -{25,24,-50}, -{25,24,-49}, -{25,24,-48}, -{25,24,-47}, -{25,24,-46}, -{25,24,-45}, -{25,24,-44}, -{25,24,-43}, -{25,24,-42}, -{25,24,-41}, -{25,24,-40}, -{25,24,-39}, -{25,24,-38}, -{25,24,-37}, -{25,24,-36}, -{25,24,-35}, -{25,24,-34}, -{25,24,-33}, -{25,24,-32}, -{25,24,-31}, -{25,24,-30}, -{25,24,-29}, -{25,24,-28}, -{25,24,-27}, -{25,24,-26}, -{25,24,-25}, -{25,24,-24}, -{25,24,-23}, -{25,24,-22}, -{25,24,-21}, -{25,24,-20}, -{25,24,-19}, -{25,24,-18}, -{25,24,-17}, -{25,24,-16}, -{25,24,-15}, -{25,24,-14}, -{25,24,-13}, -{25,24,-12}, -{25,24,-11}, -{25,24,-10}, -{25,24,-9}, -{25,24,-8}, -{25,24,-7}, -{25,24,-6}, -{25,24,-5}, -{25,24,-4}, -{25,24,-3}, -{25,24,-2}, -{25,24,-1}, -{25,24,0}, -{25,24,1}, -{25,24,2}, -{25,24,3}, -{25,24,4}, -{25,24,5}, -{25,24,6}, -{25,24,7}, -{25,24,8}, -{25,24,9}, -{25,24,10}, -{25,24,11}, -{25,24,12}, -{25,24,13}, -{25,24,14}, -{25,24,15}, -{25,24,16}, -{25,24,17}, -{25,24,18}, -{25,24,19}, -{25,24,20}, -{25,24,21}, -{25,24,22}, -{25,24,23}, -{25,24,24}, -{25,24,25}, -{25,24,26}, -{25,24,27}, -{25,24,28}, -{25,24,29}, -{25,24,30}, -{25,24,31}, -{25,24,32}, -{25,24,33}, -{25,24,34}, -{25,24,35}, -{25,25,-55}, -{25,25,-54}, -{25,25,-53}, -{25,25,-52}, -{25,25,-51}, -{25,25,-50}, -{25,25,-49}, -{25,25,-48}, -{25,25,-47}, -{25,25,-46}, -{25,25,-45}, -{25,25,-44}, -{25,25,-43}, -{25,25,-42}, -{25,25,-41}, -{25,25,-40}, -{25,25,-39}, -{25,25,-38}, -{25,25,-37}, -{25,25,-36}, -{25,25,-35}, -{25,25,-34}, -{25,25,-33}, -{25,25,-32}, -{25,25,-31}, -{25,25,-30}, -{25,25,-29}, -{25,25,-28}, -{25,25,-27}, -{25,25,-26}, -{25,25,-25}, -{25,25,-24}, -{25,25,-23}, -{25,25,-22}, -{25,25,-21}, -{25,25,-20}, -{25,25,-19}, -{25,25,-18}, -{25,25,-17}, -{25,25,-16}, -{25,25,-15}, -{25,25,-14}, -{25,25,-13}, -{25,25,-12}, -{25,25,-11}, -{25,25,-10}, -{25,25,-9}, -{25,25,-8}, -{25,25,-7}, -{25,25,-6}, -{25,25,-5}, -{25,25,-4}, -{25,25,-3}, -{25,25,-2}, -{25,25,-1}, -{25,25,0}, -{25,25,1}, -{25,25,2}, -{25,25,3}, -{25,25,4}, -{25,25,5}, -{25,25,6}, -{25,25,7}, -{25,25,8}, -{25,25,9}, -{25,25,10}, -{25,25,11}, -{25,25,12}, -{25,25,13}, -{25,25,14}, -{25,25,15}, -{25,25,16}, -{25,25,17}, -{25,25,18}, -{25,25,19}, -{25,25,20}, -{25,25,21}, -{25,25,22}, -{25,25,23}, -{25,25,24}, -{25,25,25}, -{25,25,26}, -{25,25,27}, -{25,25,28}, -{25,25,29}, -{25,25,30}, -{25,25,31}, -{25,25,32}, -{25,25,33}, -{25,25,34}, -{25,25,35}, -{25,26,-56}, -{25,26,-55}, -{25,26,-54}, -{25,26,-53}, -{25,26,-52}, -{25,26,-51}, -{25,26,-50}, -{25,26,-49}, -{25,26,-48}, -{25,26,-47}, -{25,26,-46}, -{25,26,-45}, -{25,26,-44}, -{25,26,-43}, -{25,26,-42}, -{25,26,-41}, -{25,26,-40}, -{25,26,-39}, -{25,26,-38}, -{25,26,-37}, -{25,26,-36}, -{25,26,-35}, -{25,26,-34}, -{25,26,-33}, -{25,26,-32}, -{25,26,-31}, -{25,26,-30}, -{25,26,-29}, -{25,26,-28}, -{25,26,-27}, -{25,26,-26}, -{25,26,-25}, -{25,26,-24}, -{25,26,-23}, -{25,26,-22}, -{25,26,-21}, -{25,26,-20}, -{25,26,-19}, -{25,26,-18}, -{25,26,-17}, -{25,26,-16}, -{25,26,-15}, -{25,26,-14}, -{25,26,-13}, -{25,26,-12}, -{25,26,-11}, -{25,26,-10}, -{25,26,-9}, -{25,26,-8}, -{25,26,-7}, -{25,26,-6}, -{25,26,-5}, -{25,26,-4}, -{25,26,-3}, -{25,26,-2}, -{25,26,-1}, -{25,26,0}, -{25,26,1}, -{25,26,2}, -{25,26,3}, -{25,26,4}, -{25,26,5}, -{25,26,6}, -{25,26,7}, -{25,26,8}, -{25,26,9}, -{25,26,10}, -{25,26,11}, -{25,26,12}, -{25,26,13}, -{25,26,14}, -{25,26,15}, -{25,26,16}, -{25,26,17}, -{25,26,18}, -{25,26,19}, -{25,26,20}, -{25,26,21}, -{25,26,22}, -{25,26,23}, -{25,26,24}, -{25,26,25}, -{25,26,26}, -{25,26,27}, -{25,26,28}, -{25,26,29}, -{25,26,30}, -{25,26,31}, -{25,26,32}, -{25,26,33}, -{25,26,34}, -{25,26,35}, -{25,27,-56}, -{25,27,-55}, -{25,27,-54}, -{25,27,-53}, -{25,27,-52}, -{25,27,-51}, -{25,27,-50}, -{25,27,-49}, -{25,27,-48}, -{25,27,-47}, -{25,27,-46}, -{25,27,-45}, -{25,27,-44}, -{25,27,-43}, -{25,27,-42}, -{25,27,-41}, -{25,27,-40}, -{25,27,-39}, -{25,27,-38}, -{25,27,-37}, -{25,27,-36}, -{25,27,-35}, -{25,27,-34}, -{25,27,-33}, -{25,27,-32}, -{25,27,-31}, -{25,27,-30}, -{25,27,-29}, -{25,27,-28}, -{25,27,-27}, -{25,27,-26}, -{25,27,-25}, -{25,27,-24}, -{25,27,-23}, -{25,27,-22}, -{25,27,-21}, -{25,27,-20}, -{25,27,-19}, -{25,27,-18}, -{25,27,-17}, -{25,27,-16}, -{25,27,-15}, -{25,27,-14}, -{25,27,-13}, -{25,27,-12}, -{25,27,-11}, -{25,27,-10}, -{25,27,-9}, -{25,27,-8}, -{25,27,-7}, -{25,27,-6}, -{25,27,-5}, -{25,27,-4}, -{25,27,-3}, -{25,27,-2}, -{25,27,-1}, -{25,27,0}, -{25,27,1}, -{25,27,2}, -{25,27,3}, -{25,27,4}, -{25,27,5}, -{25,27,6}, -{25,27,7}, -{25,27,8}, -{25,27,9}, -{25,27,10}, -{25,27,11}, -{25,27,12}, -{25,27,13}, -{25,27,14}, -{25,27,15}, -{25,27,16}, -{25,27,17}, -{25,27,18}, -{25,27,19}, -{25,27,20}, -{25,27,21}, -{25,27,22}, -{25,27,23}, -{25,27,24}, -{25,27,25}, -{25,27,26}, -{25,27,27}, -{25,27,28}, -{25,27,29}, -{25,27,30}, -{25,27,31}, -{25,27,32}, -{25,27,33}, -{25,27,34}, -{25,27,35}, -{25,28,-57}, -{25,28,-56}, -{25,28,-55}, -{25,28,-54}, -{25,28,-53}, -{25,28,-52}, -{25,28,-51}, -{25,28,-50}, -{25,28,-49}, -{25,28,-48}, -{25,28,-47}, -{25,28,-46}, -{25,28,-45}, -{25,28,-44}, -{25,28,-43}, -{25,28,-42}, -{25,28,-41}, -{25,28,-40}, -{25,28,-39}, -{25,28,-38}, -{25,28,-37}, -{25,28,-36}, -{25,28,-35}, -{25,28,-34}, -{25,28,-33}, -{25,28,-32}, -{25,28,-31}, -{25,28,-30}, -{25,28,-29}, -{25,28,-28}, -{25,28,-27}, -{25,28,-26}, -{25,28,-25}, -{25,28,-24}, -{25,28,-23}, -{25,28,-22}, -{25,28,-21}, -{25,28,-20}, -{25,28,-19}, -{25,28,-18}, -{25,28,-17}, -{25,28,-16}, -{25,28,-15}, -{25,28,-14}, -{25,28,-13}, -{25,28,-12}, -{25,28,-11}, -{25,28,-10}, -{25,28,-9}, -{25,28,-8}, -{25,28,-7}, -{25,28,-6}, -{25,28,-5}, -{25,28,-4}, -{25,28,-3}, -{25,28,-2}, -{25,28,-1}, -{25,28,0}, -{25,28,1}, -{25,28,2}, -{25,28,3}, -{25,28,4}, -{25,28,5}, -{25,28,6}, -{25,28,7}, -{25,28,8}, -{25,28,9}, -{25,28,10}, -{25,28,11}, -{25,28,12}, -{25,28,13}, -{25,28,14}, -{25,28,15}, -{25,28,16}, -{25,28,17}, -{25,28,18}, -{25,28,19}, -{25,28,20}, -{25,28,21}, -{25,28,22}, -{25,28,23}, -{25,28,24}, -{25,28,25}, -{25,28,26}, -{25,28,27}, -{25,28,28}, -{25,28,29}, -{25,28,30}, -{25,28,31}, -{25,28,32}, -{25,28,33}, -{25,28,34}, -{25,28,35}, -{25,28,36}, -{25,29,-58}, -{25,29,-57}, -{25,29,-56}, -{25,29,-55}, -{25,29,-54}, -{25,29,-53}, -{25,29,-52}, -{25,29,-51}, -{25,29,-50}, -{25,29,-49}, -{25,29,-48}, -{25,29,-47}, -{25,29,-46}, -{25,29,-45}, -{25,29,-44}, -{25,29,-43}, -{25,29,-42}, -{25,29,-41}, -{25,29,-40}, -{25,29,-39}, -{25,29,-38}, -{25,29,-37}, -{25,29,-36}, -{25,29,-35}, -{25,29,-34}, -{25,29,-33}, -{25,29,-32}, -{25,29,-31}, -{25,29,-30}, -{25,29,-29}, -{25,29,-28}, -{25,29,-27}, -{25,29,-26}, -{25,29,-25}, -{25,29,-24}, -{25,29,-23}, -{25,29,-22}, -{25,29,-21}, -{25,29,-20}, -{25,29,-19}, -{25,29,-18}, -{25,29,-17}, -{25,29,-16}, -{25,29,-15}, -{25,29,-14}, -{25,29,-13}, -{25,29,-12}, -{25,29,-11}, -{25,29,-10}, -{25,29,-9}, -{25,29,-8}, -{25,29,-7}, -{25,29,-6}, -{25,29,-5}, -{25,29,-4}, -{25,29,-3}, -{25,29,-2}, -{25,29,-1}, -{25,29,0}, -{25,29,1}, -{25,29,2}, -{25,29,3}, -{25,29,4}, -{25,29,5}, -{25,29,6}, -{25,29,7}, -{25,29,8}, -{25,29,9}, -{25,29,10}, -{25,29,11}, -{25,29,12}, -{25,29,13}, -{25,29,14}, -{25,29,15}, -{25,29,16}, -{25,29,17}, -{25,29,18}, -{25,29,19}, -{25,29,20}, -{25,29,21}, -{25,29,22}, -{25,29,23}, -{25,29,24}, -{25,29,25}, -{25,29,26}, -{25,29,27}, -{25,29,28}, -{25,29,29}, -{25,29,30}, -{25,29,31}, -{25,29,32}, -{25,29,33}, -{25,29,34}, -{25,29,35}, -{25,29,36}, -{25,30,-59}, -{25,30,-58}, -{25,30,-57}, -{25,30,-56}, -{25,30,-55}, -{25,30,-54}, -{25,30,-53}, -{25,30,-52}, -{25,30,-51}, -{25,30,-50}, -{25,30,-49}, -{25,30,-48}, -{25,30,-47}, -{25,30,-46}, -{25,30,-45}, -{25,30,-44}, -{25,30,-43}, -{25,30,-42}, -{25,30,-41}, -{25,30,-40}, -{25,30,-39}, -{25,30,-38}, -{25,30,-37}, -{25,30,-36}, -{25,30,-35}, -{25,30,-34}, -{25,30,-33}, -{25,30,-32}, -{25,30,-31}, -{25,30,-30}, -{25,30,-29}, -{25,30,-28}, -{25,30,-27}, -{25,30,-26}, -{25,30,-25}, -{25,30,-24}, -{25,30,-23}, -{25,30,-22}, -{25,30,-21}, -{25,30,-20}, -{25,30,-19}, -{25,30,-18}, -{25,30,-17}, -{25,30,-16}, -{25,30,-15}, -{25,30,-14}, -{25,30,-13}, -{25,30,-12}, -{25,30,-11}, -{25,30,-10}, -{25,30,-9}, -{25,30,-8}, -{25,30,-7}, -{25,30,-6}, -{25,30,-5}, -{25,30,-4}, -{25,30,-3}, -{25,30,-2}, -{25,30,-1}, -{25,30,0}, -{25,30,1}, -{25,30,2}, -{25,30,3}, -{25,30,4}, -{25,30,5}, -{25,30,6}, -{25,30,7}, -{25,30,8}, -{25,30,9}, -{25,30,10}, -{25,30,11}, -{25,30,12}, -{25,30,13}, -{25,30,14}, -{25,30,15}, -{25,30,16}, -{25,30,17}, -{25,30,18}, -{25,30,19}, -{25,30,20}, -{25,30,21}, -{25,30,22}, -{25,30,23}, -{25,30,24}, -{25,30,25}, -{25,30,26}, -{25,30,27}, -{25,30,28}, -{25,30,29}, -{25,30,30}, -{25,30,31}, -{25,30,32}, -{25,30,33}, -{25,30,34}, -{25,30,35}, -{25,30,36}, -{25,31,-60}, -{25,31,-59}, -{25,31,-58}, -{25,31,-57}, -{25,31,-56}, -{25,31,-55}, -{25,31,-54}, -{25,31,-53}, -{25,31,-52}, -{25,31,-51}, -{25,31,-50}, -{25,31,-49}, -{25,31,-48}, -{25,31,-47}, -{25,31,-46}, -{25,31,-45}, -{25,31,-44}, -{25,31,-43}, -{25,31,-42}, -{25,31,-41}, -{25,31,-40}, -{25,31,-39}, -{25,31,-38}, -{25,31,-37}, -{25,31,-36}, -{25,31,-35}, -{25,31,-34}, -{25,31,-33}, -{25,31,-32}, -{25,31,-31}, -{25,31,-30}, -{25,31,-29}, -{25,31,-28}, -{25,31,-27}, -{25,31,-26}, -{25,31,-25}, -{25,31,-24}, -{25,31,-23}, -{25,31,-22}, -{25,31,-21}, -{25,31,-20}, -{25,31,-19}, -{25,31,-18}, -{25,31,-17}, -{25,31,-16}, -{25,31,-15}, -{25,31,-14}, -{25,31,-13}, -{25,31,-12}, -{25,31,-11}, -{25,31,-10}, -{25,31,-9}, -{25,31,-8}, -{25,31,-7}, -{25,31,-6}, -{25,31,-5}, -{25,31,-4}, -{25,31,-3}, -{25,31,-2}, -{25,31,-1}, -{25,31,0}, -{25,31,1}, -{25,31,2}, -{25,31,3}, -{25,31,4}, -{25,31,5}, -{25,31,6}, -{25,31,7}, -{25,31,8}, -{25,31,9}, -{25,31,10}, -{25,31,11}, -{25,31,12}, -{25,31,13}, -{25,31,14}, -{25,31,15}, -{25,31,16}, -{25,31,17}, -{25,31,18}, -{25,31,19}, -{25,31,20}, -{25,31,21}, -{25,31,22}, -{25,31,23}, -{25,31,24}, -{25,31,25}, -{25,31,26}, -{25,31,27}, -{25,31,28}, -{25,31,29}, -{25,31,30}, -{25,31,31}, -{25,31,32}, -{25,31,33}, -{25,31,34}, -{25,31,35}, -{25,31,36}, -{25,32,-61}, -{25,32,-60}, -{25,32,-59}, -{25,32,-58}, -{25,32,-57}, -{25,32,-56}, -{25,32,-55}, -{25,32,-54}, -{25,32,-53}, -{25,32,-52}, -{25,32,-51}, -{25,32,-50}, -{25,32,-49}, -{25,32,-48}, -{25,32,-47}, -{25,32,-46}, -{25,32,-45}, -{25,32,-44}, -{25,32,-43}, -{25,32,-42}, -{25,32,-41}, -{25,32,-40}, -{25,32,-39}, -{25,32,-38}, -{25,32,-37}, -{25,32,-36}, -{25,32,-35}, -{25,32,-34}, -{25,32,-33}, -{25,32,-32}, -{25,32,-31}, -{25,32,-30}, -{25,32,-29}, -{25,32,-28}, -{25,32,-27}, -{25,32,-26}, -{25,32,-25}, -{25,32,-24}, -{25,32,-23}, -{25,32,-22}, -{25,32,-21}, -{25,32,-20}, -{25,32,-19}, -{25,32,-18}, -{25,32,-17}, -{25,32,-16}, -{25,32,-15}, -{25,32,-14}, -{25,32,-13}, -{25,32,-12}, -{25,32,-11}, -{25,32,-10}, -{25,32,-9}, -{25,32,-8}, -{25,32,-7}, -{25,32,-6}, -{25,32,-5}, -{25,32,-4}, -{25,32,-3}, -{25,32,-2}, -{25,32,-1}, -{25,32,0}, -{25,32,1}, -{25,32,2}, -{25,32,3}, -{25,32,4}, -{25,32,5}, -{25,32,6}, -{25,32,7}, -{25,32,8}, -{25,32,9}, -{25,32,10}, -{25,32,11}, -{25,32,12}, -{25,32,13}, -{25,32,14}, -{25,32,15}, -{25,32,16}, -{25,32,17}, -{25,32,18}, -{25,32,19}, -{25,32,20}, -{25,32,21}, -{25,32,22}, -{25,32,23}, -{25,32,24}, -{25,32,25}, -{25,32,26}, -{25,32,27}, -{25,32,28}, -{25,32,29}, -{25,32,30}, -{25,32,31}, -{25,32,32}, -{25,32,33}, -{25,32,34}, -{25,32,35}, -{25,32,36}, -{25,33,-62}, -{25,33,-61}, -{25,33,-60}, -{25,33,-59}, -{25,33,-58}, -{25,33,-57}, -{25,33,-56}, -{25,33,-55}, -{25,33,-54}, -{25,33,-53}, -{25,33,-52}, -{25,33,-51}, -{25,33,-50}, -{25,33,-49}, -{25,33,-48}, -{25,33,-47}, -{25,33,-46}, -{25,33,-45}, -{25,33,-44}, -{25,33,-43}, -{25,33,-42}, -{25,33,-41}, -{25,33,-40}, -{25,33,-39}, -{25,33,-38}, -{25,33,-37}, -{25,33,-36}, -{25,33,-35}, -{25,33,-34}, -{25,33,-33}, -{25,33,-32}, -{25,33,-31}, -{25,33,-30}, -{25,33,-29}, -{25,33,-28}, -{25,33,-27}, -{25,33,-26}, -{25,33,-25}, -{25,33,-24}, -{25,33,-23}, -{25,33,-22}, -{25,33,-21}, -{25,33,-20}, -{25,33,-19}, -{25,33,-18}, -{25,33,-17}, -{25,33,-16}, -{25,33,-15}, -{25,33,-14}, -{25,33,-13}, -{25,33,-12}, -{25,33,-11}, -{25,33,-10}, -{25,33,-9}, -{25,33,-8}, -{25,33,-7}, -{25,33,-6}, -{25,33,-5}, -{25,33,-4}, -{25,33,-3}, -{25,33,-2}, -{25,33,-1}, -{25,33,0}, -{25,33,1}, -{25,33,2}, -{25,33,3}, -{25,33,4}, -{25,33,5}, -{25,33,6}, -{25,33,7}, -{25,33,8}, -{25,33,9}, -{25,33,10}, -{25,33,11}, -{25,33,12}, -{25,33,13}, -{25,33,14}, -{25,33,15}, -{25,33,16}, -{25,33,17}, -{25,33,18}, -{25,33,19}, -{25,33,20}, -{25,33,21}, -{25,33,22}, -{25,33,23}, -{25,33,24}, -{25,33,25}, -{25,33,26}, -{25,33,27}, -{25,33,28}, -{25,33,29}, -{25,33,30}, -{25,33,31}, -{25,33,32}, -{25,33,33}, -{25,33,34}, -{25,33,35}, -{25,33,36}, -{25,34,-63}, -{25,34,-62}, -{25,34,-61}, -{25,34,-60}, -{25,34,-59}, -{25,34,-58}, -{25,34,-57}, -{25,34,-56}, -{25,34,-55}, -{25,34,-54}, -{25,34,-53}, -{25,34,-52}, -{25,34,-51}, -{25,34,-50}, -{25,34,-49}, -{25,34,-48}, -{25,34,-47}, -{25,34,-46}, -{25,34,-45}, -{25,34,-44}, -{25,34,-43}, -{25,34,-42}, -{25,34,-41}, -{25,34,-40}, -{25,34,-39}, -{25,34,-38}, -{25,34,-37}, -{25,34,-36}, -{25,34,-35}, -{25,34,-34}, -{25,34,-33}, -{25,34,-32}, -{25,34,-31}, -{25,34,-30}, -{25,34,-29}, -{25,34,-28}, -{25,34,-27}, -{25,34,-26}, -{25,34,-25}, -{25,34,-24}, -{25,34,-23}, -{25,34,-22}, -{25,34,-21}, -{25,34,-20}, -{25,34,-19}, -{25,34,-18}, -{25,34,-17}, -{25,34,-16}, -{25,34,-15}, -{25,34,-14}, -{25,34,-13}, -{25,34,-12}, -{25,34,-11}, -{25,34,-10}, -{25,34,-9}, -{25,34,-8}, -{25,34,-7}, -{25,34,-6}, -{25,34,-5}, -{25,34,-4}, -{25,34,-3}, -{25,34,-2}, -{25,34,-1}, -{25,34,0}, -{25,34,1}, -{25,34,2}, -{25,34,3}, -{25,34,4}, -{25,34,5}, -{25,34,6}, -{25,34,7}, -{25,34,8}, -{25,34,9}, -{25,34,10}, -{25,34,11}, -{25,34,12}, -{25,34,13}, -{25,34,14}, -{25,34,15}, -{25,34,16}, -{25,34,17}, -{25,34,18}, -{25,34,19}, -{25,34,20}, -{25,34,21}, -{25,34,22}, -{25,34,23}, -{25,34,24}, -{25,34,25}, -{25,34,26}, -{25,34,27}, -{25,34,28}, -{25,34,29}, -{25,34,30}, -{25,34,31}, -{25,34,32}, -{25,34,33}, -{25,34,34}, -{25,34,35}, -{25,34,36}, -{25,35,-64}, -{25,35,-63}, -{25,35,-62}, -{25,35,-61}, -{25,35,-60}, -{25,35,-59}, -{25,35,-58}, -{25,35,-57}, -{25,35,-56}, -{25,35,-55}, -{25,35,-54}, -{25,35,-53}, -{25,35,-52}, -{25,35,-51}, -{25,35,-50}, -{25,35,-49}, -{25,35,-48}, -{25,35,-47}, -{25,35,-46}, -{25,35,-45}, -{25,35,-44}, -{25,35,-43}, -{25,35,-42}, -{25,35,-41}, -{25,35,-40}, -{25,35,-39}, -{25,35,-38}, -{25,35,-37}, -{25,35,-36}, -{25,35,-35}, -{25,35,-34}, -{25,35,-33}, -{25,35,-32}, -{25,35,-31}, -{25,35,-30}, -{25,35,-29}, -{25,35,-28}, -{25,35,-27}, -{25,35,-26}, -{25,35,-25}, -{25,35,-24}, -{25,35,-23}, -{25,35,-22}, -{25,35,-21}, -{25,35,-20}, -{25,35,-19}, -{25,35,-18}, -{25,35,-17}, -{25,35,-16}, -{25,35,-15}, -{25,35,-14}, -{25,35,-13}, -{25,35,-12}, -{25,35,-11}, -{25,35,-10}, -{25,35,-9}, -{25,35,-8}, -{25,35,-7}, -{25,35,-6}, -{25,35,-5}, -{25,35,-4}, -{25,35,-3}, -{25,35,-2}, -{25,35,-1}, -{25,35,0}, -{25,35,1}, -{25,35,2}, -{25,35,3}, -{25,35,4}, -{25,35,5}, -{25,35,6}, -{25,35,7}, -{25,35,8}, -{25,35,9}, -{25,35,10}, -{25,35,11}, -{25,35,12}, -{25,35,13}, -{25,35,14}, -{25,35,15}, -{25,35,16}, -{25,35,17}, -{25,35,18}, -{25,35,19}, -{25,35,20}, -{25,35,21}, -{25,35,22}, -{25,35,23}, -{25,35,24}, -{25,35,25}, -{25,35,26}, -{25,35,27}, -{25,35,28}, -{25,35,29}, -{25,35,30}, -{25,35,31}, -{25,35,32}, -{25,35,33}, -{25,35,34}, -{25,35,35}, -{25,35,36}, -{25,36,-65}, -{25,36,-64}, -{25,36,-63}, -{25,36,-62}, -{25,36,-61}, -{25,36,-60}, -{25,36,-59}, -{25,36,-58}, -{25,36,-57}, -{25,36,-56}, -{25,36,-55}, -{25,36,-54}, -{25,36,-53}, -{25,36,-52}, -{25,36,-51}, -{25,36,-50}, -{25,36,-49}, -{25,36,-48}, -{25,36,-47}, -{25,36,-46}, -{25,36,-45}, -{25,36,-44}, -{25,36,-43}, -{25,36,-42}, -{25,36,-41}, -{25,36,-40}, -{25,36,-39}, -{25,36,-38}, -{25,36,-37}, -{25,36,-36}, -{25,36,-35}, -{25,36,-34}, -{25,36,-33}, -{25,36,-32}, -{25,36,-31}, -{25,36,-30}, -{25,36,-29}, -{25,36,-28}, -{25,36,-27}, -{25,36,-26}, -{25,36,-25}, -{25,36,-24}, -{25,36,-23}, -{25,36,-22}, -{25,36,-21}, -{25,36,-20}, -{25,36,-19}, -{25,36,-18}, -{25,36,-17}, -{25,36,-16}, -{25,36,-15}, -{25,36,-14}, -{25,36,-13}, -{25,36,-12}, -{25,36,-11}, -{25,36,-10}, -{25,36,-9}, -{25,36,-8}, -{25,36,-7}, -{25,36,-6}, -{25,36,-5}, -{25,36,-4}, -{25,36,-3}, -{25,36,-2}, -{25,36,-1}, -{25,36,0}, -{25,36,1}, -{25,36,2}, -{25,36,3}, -{25,36,4}, -{25,36,5}, -{25,36,6}, -{25,36,7}, -{25,36,8}, -{25,36,9}, -{25,36,10}, -{25,36,11}, -{25,36,12}, -{25,36,13}, -{25,36,14}, -{25,36,15}, -{25,36,16}, -{25,36,17}, -{25,36,18}, -{25,36,19}, -{25,36,20}, -{25,36,21}, -{25,36,22}, -{25,36,23}, -{25,36,24}, -{25,36,25}, -{25,36,26}, -{25,36,27}, -{25,36,28}, -{25,36,29}, -{25,36,30}, -{25,36,31}, -{25,36,32}, -{25,36,33}, -{25,36,34}, -{25,36,35}, -{25,36,36}, -{25,37,-66}, -{25,37,-65}, -{25,37,-64}, -{25,37,-63}, -{25,37,-62}, -{25,37,-61}, -{25,37,-60}, -{25,37,-59}, -{25,37,-58}, -{25,37,-57}, -{25,37,-56}, -{25,37,-55}, -{25,37,-54}, -{25,37,-53}, -{25,37,-52}, -{25,37,-51}, -{25,37,-50}, -{25,37,-49}, -{25,37,-48}, -{25,37,-47}, -{25,37,-46}, -{25,37,-45}, -{25,37,-44}, -{25,37,-43}, -{25,37,-42}, -{25,37,-41}, -{25,37,-40}, -{25,37,-39}, -{25,37,-38}, -{25,37,-37}, -{25,37,-36}, -{25,37,-35}, -{25,37,-34}, -{25,37,-33}, -{25,37,-32}, -{25,37,-31}, -{25,37,-30}, -{25,37,-29}, -{25,37,-28}, -{25,37,-27}, -{25,37,-26}, -{25,37,-25}, -{25,37,-24}, -{25,37,-23}, -{25,37,-22}, -{25,37,-21}, -{25,37,-20}, -{25,37,-19}, -{25,37,-18}, -{25,37,-17}, -{25,37,-16}, -{25,37,-15}, -{25,37,-14}, -{25,37,-13}, -{25,37,-12}, -{25,37,-11}, -{25,37,-10}, -{25,37,-9}, -{25,37,-8}, -{25,37,-7}, -{25,37,-6}, -{25,37,-5}, -{25,37,-4}, -{25,37,-3}, -{25,37,-2}, -{25,37,-1}, -{25,37,0}, -{25,37,1}, -{25,37,2}, -{25,37,3}, -{25,37,4}, -{25,37,5}, -{25,37,6}, -{25,37,7}, -{25,37,8}, -{25,37,9}, -{25,37,10}, -{25,37,11}, -{25,37,12}, -{25,37,13}, -{25,37,14}, -{25,37,15}, -{25,37,16}, -{25,37,17}, -{25,37,18}, -{25,37,19}, -{25,37,20}, -{25,37,21}, -{25,37,22}, -{25,37,23}, -{25,37,24}, -{25,37,25}, -{25,37,26}, -{25,37,27}, -{25,37,28}, -{25,37,29}, -{25,37,30}, -{25,37,31}, -{25,37,32}, -{25,37,33}, -{25,37,34}, -{25,37,35}, -{25,37,36}, -{25,38,-66}, -{25,38,-65}, -{25,38,-64}, -{25,38,-63}, -{25,38,-62}, -{25,38,-61}, -{25,38,-60}, -{25,38,-59}, -{25,38,-58}, -{25,38,-57}, -{25,38,-56}, -{25,38,-55}, -{25,38,-54}, -{25,38,-53}, -{25,38,-52}, -{25,38,-51}, -{25,38,-50}, -{25,38,-49}, -{25,38,-48}, -{25,38,-47}, -{25,38,-46}, -{25,38,-45}, -{25,38,-44}, -{25,38,-43}, -{25,38,-42}, -{25,38,-41}, -{25,38,-40}, -{25,38,-39}, -{25,38,-38}, -{25,38,-37}, -{25,38,-36}, -{25,38,-35}, -{25,38,-34}, -{25,38,-33}, -{25,38,-32}, -{25,38,-31}, -{25,38,-30}, -{25,38,-29}, -{25,38,-28}, -{25,38,-27}, -{25,38,-26}, -{25,38,-25}, -{25,38,-24}, -{25,38,-23}, -{25,38,-22}, -{25,38,-21}, -{25,38,-20}, -{25,38,-19}, -{25,38,-18}, -{25,38,-17}, -{25,38,-16}, -{25,38,-15}, -{25,38,-14}, -{25,38,-13}, -{25,38,-12}, -{25,38,-11}, -{25,38,-10}, -{25,38,-9}, -{25,38,-8}, -{25,38,-7}, -{25,38,-6}, -{25,38,-5}, -{25,38,-4}, -{25,38,-3}, -{25,38,-2}, -{25,38,-1}, -{25,38,0}, -{25,38,1}, -{25,38,2}, -{25,38,3}, -{25,38,4}, -{25,38,5}, -{25,38,6}, -{25,38,7}, -{25,38,8}, -{25,38,9}, -{25,38,10}, -{25,38,11}, -{25,38,12}, -{25,38,13}, -{25,38,14}, -{25,38,15}, -{25,38,16}, -{25,38,17}, -{25,38,18}, -{25,38,19}, -{25,38,20}, -{25,38,21}, -{25,38,22}, -{25,38,23}, -{25,38,24}, -{25,38,25}, -{25,38,26}, -{25,38,27}, -{25,38,28}, -{25,38,29}, -{25,38,30}, -{25,38,31}, -{25,38,32}, -{25,38,33}, -{25,38,34}, -{25,38,35}, -{25,38,36}, -{25,39,-67}, -{25,39,-66}, -{25,39,-65}, -{25,39,-64}, -{25,39,-63}, -{25,39,-62}, -{25,39,-61}, -{25,39,-60}, -{25,39,-59}, -{25,39,-58}, -{25,39,-57}, -{25,39,-56}, -{25,39,-55}, -{25,39,-54}, -{25,39,-53}, -{25,39,-52}, -{25,39,-51}, -{25,39,-50}, -{25,39,-49}, -{25,39,-48}, -{25,39,-47}, -{25,39,-46}, -{25,39,-45}, -{25,39,-44}, -{25,39,-43}, -{25,39,-42}, -{25,39,-41}, -{25,39,-40}, -{25,39,-39}, -{25,39,-38}, -{25,39,-37}, -{25,39,-36}, -{25,39,-35}, -{25,39,-34}, -{25,39,-33}, -{25,39,-32}, -{25,39,-31}, -{25,39,-30}, -{25,39,-29}, -{25,39,-28}, -{25,39,-27}, -{25,39,-26}, -{25,39,-25}, -{25,39,-24}, -{25,39,-23}, -{25,39,-22}, -{25,39,-21}, -{25,39,-20}, -{25,39,-19}, -{25,39,-18}, -{25,39,-17}, -{25,39,-16}, -{25,39,-15}, -{25,39,-14}, -{25,39,-13}, -{25,39,-12}, -{25,39,-11}, -{25,39,-10}, -{25,39,-9}, -{25,39,-8}, -{25,39,-7}, -{25,39,-6}, -{25,39,-5}, -{25,39,-4}, -{25,39,-3}, -{25,39,-2}, -{25,39,-1}, -{25,39,0}, -{25,39,1}, -{25,39,2}, -{25,39,3}, -{25,39,4}, -{25,39,5}, -{25,39,6}, -{25,39,7}, -{25,39,8}, -{25,39,9}, -{25,39,10}, -{25,39,11}, -{25,39,12}, -{25,39,13}, -{25,39,14}, -{25,39,15}, -{25,39,16}, -{25,39,17}, -{25,39,18}, -{25,39,19}, -{25,39,20}, -{25,39,21}, -{25,39,22}, -{25,39,23}, -{25,39,24}, -{25,39,25}, -{25,39,26}, -{25,39,27}, -{25,39,28}, -{25,39,29}, -{25,39,30}, -{25,39,31}, -{25,39,32}, -{25,39,33}, -{25,39,34}, -{25,39,35}, -{25,39,36}, -{25,40,-68}, -{25,40,-67}, -{25,40,-66}, -{25,40,-65}, -{25,40,-64}, -{25,40,-63}, -{25,40,-62}, -{25,40,-61}, -{25,40,-60}, -{25,40,-59}, -{25,40,-58}, -{25,40,-57}, -{25,40,-56}, -{25,40,-55}, -{25,40,-54}, -{25,40,-53}, -{25,40,-52}, -{25,40,-51}, -{25,40,-50}, -{25,40,-49}, -{25,40,-48}, -{25,40,-47}, -{25,40,-46}, -{25,40,-45}, -{25,40,-44}, -{25,40,-43}, -{25,40,-42}, -{25,40,-41}, -{25,40,-40}, -{25,40,-39}, -{25,40,-38}, -{25,40,-37}, -{25,40,-36}, -{25,40,-35}, -{25,40,-34}, -{25,40,-33}, -{25,40,-32}, -{25,40,-31}, -{25,40,-30}, -{25,40,-29}, -{25,40,-28}, -{25,40,-27}, -{25,40,-26}, -{25,40,-25}, -{25,40,-24}, -{25,40,-23}, -{25,40,-22}, -{25,40,-21}, -{25,40,-20}, -{25,40,-19}, -{25,40,-18}, -{25,40,-17}, -{25,40,-16}, -{25,40,-15}, -{25,40,-14}, -{25,40,-13}, -{25,40,-12}, -{25,40,-11}, -{25,40,-10}, -{25,40,-9}, -{25,40,-8}, -{25,40,-7}, -{25,40,-6}, -{25,40,-5}, -{25,40,-4}, -{25,40,-3}, -{25,40,-2}, -{25,40,-1}, -{25,40,0}, -{25,40,1}, -{25,40,2}, -{25,40,3}, -{25,40,4}, -{25,40,5}, -{25,40,6}, -{25,40,7}, -{25,40,8}, -{25,40,9}, -{25,40,10}, -{25,40,11}, -{25,40,12}, -{25,40,13}, -{25,40,14}, -{25,40,15}, -{25,40,16}, -{25,40,17}, -{25,40,18}, -{25,40,19}, -{25,40,20}, -{25,40,21}, -{25,40,22}, -{25,40,23}, -{25,40,24}, -{25,40,25}, -{25,40,26}, -{25,40,27}, -{25,40,28}, -{25,40,29}, -{25,40,30}, -{25,40,31}, -{25,40,32}, -{25,40,33}, -{25,40,34}, -{25,40,35}, -{25,40,36}, -{25,41,-69}, -{25,41,-68}, -{25,41,-67}, -{25,41,-66}, -{25,41,-65}, -{25,41,-64}, -{25,41,-63}, -{25,41,-62}, -{25,41,-61}, -{25,41,-60}, -{25,41,-59}, -{25,41,-58}, -{25,41,-57}, -{25,41,-56}, -{25,41,-55}, -{25,41,-54}, -{25,41,-53}, -{25,41,-52}, -{25,41,-51}, -{25,41,-50}, -{25,41,-49}, -{25,41,-48}, -{25,41,-47}, -{25,41,-46}, -{25,41,-45}, -{25,41,-44}, -{25,41,-43}, -{25,41,-42}, -{25,41,-41}, -{25,41,-40}, -{25,41,-39}, -{25,41,-38}, -{25,41,-37}, -{25,41,-36}, -{25,41,-35}, -{25,41,-34}, -{25,41,-33}, -{25,41,-32}, -{25,41,-31}, -{25,41,-30}, -{25,41,-29}, -{25,41,-28}, -{25,41,-27}, -{25,41,-26}, -{25,41,-25}, -{25,41,-24}, -{25,41,-23}, -{25,41,-22}, -{25,41,-21}, -{25,41,-20}, -{25,41,-19}, -{25,41,-18}, -{25,41,-17}, -{25,41,-16}, -{25,41,-15}, -{25,41,-14}, -{25,41,-13}, -{25,41,-12}, -{25,41,-11}, -{25,41,-10}, -{25,41,-9}, -{25,41,-8}, -{25,41,-7}, -{25,41,-6}, -{25,41,-5}, -{25,41,-4}, -{25,41,-3}, -{25,41,-2}, -{25,41,-1}, -{25,41,0}, -{25,41,1}, -{25,41,2}, -{25,41,3}, -{25,41,4}, -{25,41,5}, -{25,41,6}, -{25,41,7}, -{25,41,8}, -{25,41,9}, -{25,41,10}, -{25,41,11}, -{25,41,12}, -{25,41,13}, -{25,41,14}, -{25,41,15}, -{25,41,16}, -{25,41,17}, -{25,41,18}, -{25,41,19}, -{25,41,20}, -{25,41,21}, -{25,41,22}, -{25,41,23}, -{25,41,24}, -{25,41,25}, -{25,41,26}, -{25,41,27}, -{25,41,28}, -{25,41,29}, -{25,41,30}, -{25,41,31}, -{25,41,32}, -{25,41,33}, -{25,41,34}, -{25,41,35}, -{25,41,36}, -{25,41,37}, -{25,42,-70}, -{25,42,-69}, -{25,42,-68}, -{25,42,-67}, -{25,42,-66}, -{25,42,-65}, -{25,42,-64}, -{25,42,-63}, -{25,42,-62}, -{25,42,-61}, -{25,42,-60}, -{25,42,-59}, -{25,42,-58}, -{25,42,-57}, -{25,42,-56}, -{25,42,-55}, -{25,42,-54}, -{25,42,-53}, -{25,42,-52}, -{25,42,-51}, -{25,42,-50}, -{25,42,-49}, -{25,42,-48}, -{25,42,-47}, -{25,42,-46}, -{25,42,-45}, -{25,42,-44}, -{25,42,-43}, -{25,42,-42}, -{25,42,-41}, -{25,42,-40}, -{25,42,-39}, -{25,42,-38}, -{25,42,-37}, -{25,42,-36}, -{25,42,-35}, -{25,42,-34}, -{25,42,-33}, -{25,42,-32}, -{25,42,-31}, -{25,42,-30}, -{25,42,-29}, -{25,42,-28}, -{25,42,-27}, -{25,42,-26}, -{25,42,-25}, -{25,42,-24}, -{25,42,-23}, -{25,42,-22}, -{25,42,-21}, -{25,42,-20}, -{25,42,-19}, -{25,42,-18}, -{25,42,-17}, -{25,42,-16}, -{25,42,-15}, -{25,42,-14}, -{25,42,-13}, -{25,42,-12}, -{25,42,-11}, -{25,42,-10}, -{25,42,-9}, -{25,42,-8}, -{25,42,-7}, -{25,42,-6}, -{25,42,-5}, -{25,42,-4}, -{25,42,-3}, -{25,42,-2}, -{25,42,-1}, -{25,42,0}, -{25,42,1}, -{25,42,2}, -{25,42,3}, -{25,42,4}, -{25,42,5}, -{25,42,6}, -{25,42,7}, -{25,42,8}, -{25,42,9}, -{25,42,10}, -{25,42,11}, -{25,42,12}, -{25,42,13}, -{25,42,14}, -{25,42,15}, -{25,42,16}, -{25,42,17}, -{25,42,18}, -{25,42,19}, -{25,42,20}, -{25,42,21}, -{25,42,22}, -{25,42,23}, -{25,42,24}, -{25,42,25}, -{25,42,26}, -{25,42,27}, -{25,42,28}, -{25,42,29}, -{25,42,30}, -{25,42,31}, -{25,42,32}, -{25,42,33}, -{25,42,34}, -{25,42,35}, -{25,42,36}, -{25,42,37}, -{25,43,-71}, -{25,43,-70}, -{25,43,-69}, -{25,43,-68}, -{25,43,-67}, -{25,43,-66}, -{25,43,-65}, -{25,43,-64}, -{25,43,-63}, -{25,43,-62}, -{25,43,-61}, -{25,43,-60}, -{25,43,-59}, -{25,43,-58}, -{25,43,-57}, -{25,43,-56}, -{25,43,-55}, -{25,43,-54}, -{25,43,-53}, -{25,43,-52}, -{25,43,-51}, -{25,43,-50}, -{25,43,-49}, -{25,43,-48}, -{25,43,-47}, -{25,43,-46}, -{25,43,-45}, -{25,43,-44}, -{25,43,-43}, -{25,43,-42}, -{25,43,-41}, -{25,43,-40}, -{25,43,-39}, -{25,43,-38}, -{25,43,-37}, -{25,43,-36}, -{25,43,-35}, -{25,43,-34}, -{25,43,-33}, -{25,43,-32}, -{25,43,-31}, -{25,43,-30}, -{25,43,-29}, -{25,43,-28}, -{25,43,-27}, -{25,43,-26}, -{25,43,-25}, -{25,43,-24}, -{25,43,-23}, -{25,43,-22}, -{25,43,-21}, -{25,43,-20}, -{25,43,-19}, -{25,43,-18}, -{25,43,-17}, -{25,43,-16}, -{25,43,-15}, -{25,43,-14}, -{25,43,-13}, -{25,43,-12}, -{25,43,-11}, -{25,43,-10}, -{25,43,-9}, -{25,43,-8}, -{25,43,-7}, -{25,43,-6}, -{25,43,-5}, -{25,43,-4}, -{25,43,-3}, -{25,43,-2}, -{25,43,-1}, -{25,43,0}, -{25,43,1}, -{25,43,2}, -{25,43,3}, -{25,43,4}, -{25,43,5}, -{25,43,6}, -{25,43,7}, -{25,43,8}, -{25,43,9}, -{25,43,10}, -{25,43,11}, -{25,43,12}, -{25,43,13}, -{25,43,14}, -{25,43,15}, -{25,43,16}, -{25,43,17}, -{25,43,18}, -{25,43,19}, -{25,43,20}, -{25,43,21}, -{25,43,22}, -{25,43,23}, -{25,43,24}, -{25,43,25}, -{25,43,26}, -{25,43,27}, -{25,43,28}, -{25,43,29}, -{25,43,30}, -{25,43,31}, -{25,43,32}, -{25,43,33}, -{25,43,34}, -{25,43,35}, -{25,43,36}, -{25,43,37}, -{25,44,-72}, -{25,44,-71}, -{25,44,-70}, -{25,44,-69}, -{25,44,-68}, -{25,44,-67}, -{25,44,-66}, -{25,44,-65}, -{25,44,-64}, -{25,44,-63}, -{25,44,-62}, -{25,44,-61}, -{25,44,-60}, -{25,44,-59}, -{25,44,-58}, -{25,44,-57}, -{25,44,-56}, -{25,44,-55}, -{25,44,-54}, -{25,44,-53}, -{25,44,-52}, -{25,44,-51}, -{25,44,-50}, -{25,44,-49}, -{25,44,-48}, -{25,44,-47}, -{25,44,-46}, -{25,44,-45}, -{25,44,-44}, -{25,44,-43}, -{25,44,-42}, -{25,44,-41}, -{25,44,-40}, -{25,44,-39}, -{25,44,-38}, -{25,44,-37}, -{25,44,-36}, -{25,44,-35}, -{25,44,-34}, -{25,44,-33}, -{25,44,-32}, -{25,44,-31}, -{25,44,-30}, -{25,44,-29}, -{25,44,-28}, -{25,44,-27}, -{25,44,-26}, -{25,44,-25}, -{25,44,-24}, -{25,44,-23}, -{25,44,-22}, -{25,44,-21}, -{25,44,-20}, -{25,44,-19}, -{25,44,-18}, -{25,44,-17}, -{25,44,-16}, -{25,44,-15}, -{25,44,-14}, -{25,44,-13}, -{25,44,-12}, -{25,44,-11}, -{25,44,-10}, -{25,44,-9}, -{25,44,-8}, -{25,44,-7}, -{25,44,-6}, -{25,44,-5}, -{25,44,-4}, -{25,44,-3}, -{25,44,-2}, -{25,44,-1}, -{25,44,0}, -{25,44,1}, -{25,44,2}, -{25,44,3}, -{25,44,4}, -{25,44,5}, -{25,44,6}, -{25,44,7}, -{25,44,8}, -{25,44,9}, -{25,44,10}, -{25,44,11}, -{25,44,12}, -{25,44,13}, -{25,44,14}, -{25,44,15}, -{25,44,16}, -{25,44,17}, -{25,44,18}, -{25,44,19}, -{25,44,20}, -{25,44,21}, -{25,44,22}, -{25,44,23}, -{25,44,24}, -{25,44,25}, -{25,44,26}, -{25,44,27}, -{25,44,28}, -{25,44,29}, -{25,44,30}, -{25,44,31}, -{25,44,32}, -{25,44,33}, -{25,44,34}, -{25,44,35}, -{25,44,36}, -{25,44,37}, -{25,45,-73}, -{25,45,-72}, -{25,45,-71}, -{25,45,-70}, -{25,45,-69}, -{25,45,-68}, -{25,45,-67}, -{25,45,-66}, -{25,45,-65}, -{25,45,-64}, -{25,45,-63}, -{25,45,-62}, -{25,45,-61}, -{25,45,-60}, -{25,45,-59}, -{25,45,-58}, -{25,45,-57}, -{25,45,-56}, -{25,45,-55}, -{25,45,-54}, -{25,45,-53}, -{25,45,-52}, -{25,45,-51}, -{25,45,-50}, -{25,45,-49}, -{25,45,-48}, -{25,45,-47}, -{25,45,-46}, -{25,45,-45}, -{25,45,-44}, -{25,45,-43}, -{25,45,-42}, -{25,45,-41}, -{25,45,-40}, -{25,45,-39}, -{25,45,-38}, -{25,45,-37}, -{25,45,-36}, -{25,45,-35}, -{25,45,-34}, -{25,45,-33}, -{25,45,-32}, -{25,45,-31}, -{25,45,-30}, -{25,45,-29}, -{25,45,-28}, -{25,45,-27}, -{25,45,-26}, -{25,45,-25}, -{25,45,-24}, -{25,45,-23}, -{25,45,-22}, -{25,45,-21}, -{25,45,-20}, -{25,45,-19}, -{25,45,-18}, -{25,45,-17}, -{25,45,-16}, -{25,45,-15}, -{25,45,-14}, -{25,45,-13}, -{25,45,-12}, -{25,45,-11}, -{25,45,-10}, -{25,45,-9}, -{25,45,-8}, -{25,45,-7}, -{25,45,-6}, -{25,45,-5}, -{25,45,-4}, -{25,45,-3}, -{25,45,-2}, -{25,45,-1}, -{25,45,0}, -{25,45,1}, -{25,45,2}, -{25,45,3}, -{25,45,4}, -{25,45,5}, -{25,45,6}, -{25,45,7}, -{25,45,8}, -{25,45,9}, -{25,45,10}, -{25,45,11}, -{25,45,12}, -{25,45,13}, -{25,45,14}, -{25,45,15}, -{25,45,16}, -{25,45,17}, -{25,45,18}, -{25,45,19}, -{25,45,20}, -{25,45,21}, -{25,45,22}, -{25,45,23}, -{25,45,24}, -{25,45,25}, -{25,45,26}, -{25,45,27}, -{25,45,28}, -{25,45,29}, -{25,45,30}, -{25,45,31}, -{25,45,32}, -{25,45,33}, -{25,45,34}, -{25,45,35}, -{25,45,36}, -{25,45,37}, -{25,46,-73}, -{25,46,-72}, -{25,46,-71}, -{25,46,-70}, -{25,46,-69}, -{25,46,-68}, -{25,46,-67}, -{25,46,-66}, -{25,46,-65}, -{25,46,-64}, -{25,46,-63}, -{25,46,-62}, -{25,46,-61}, -{25,46,-60}, -{25,46,-59}, -{25,46,-58}, -{25,46,-57}, -{25,46,-56}, -{25,46,-55}, -{25,46,-54}, -{25,46,-53}, -{25,46,-52}, -{25,46,-51}, -{25,46,-50}, -{25,46,-49}, -{25,46,-48}, -{25,46,-47}, -{25,46,-46}, -{25,46,-45}, -{25,46,-44}, -{25,46,-43}, -{25,46,-42}, -{25,46,-41}, -{25,46,-40}, -{25,46,-39}, -{25,46,-38}, -{25,46,-37}, -{25,46,-36}, -{25,46,-35}, -{25,46,-34}, -{25,46,-33}, -{25,46,-32}, -{25,46,-31}, -{25,46,-30}, -{25,46,-29}, -{25,46,-28}, -{25,46,-27}, -{25,46,-26}, -{25,46,-25}, -{25,46,-24}, -{25,46,-23}, -{25,46,-22}, -{25,46,-21}, -{25,46,-20}, -{25,46,-19}, -{25,46,-18}, -{25,46,-17}, -{25,46,-16}, -{25,46,-15}, -{25,46,-14}, -{25,46,-13}, -{25,46,-12}, -{25,46,-11}, -{25,46,-10}, -{25,46,-9}, -{25,46,-8}, -{25,46,-7}, -{25,46,-6}, -{25,46,-5}, -{25,46,-4}, -{25,46,-3}, -{25,46,-2}, -{25,46,-1}, -{25,46,0}, -{25,46,1}, -{25,46,2}, -{25,46,3}, -{25,46,4}, -{25,46,5}, -{25,46,6}, -{25,46,7}, -{25,46,8}, -{25,46,9}, -{25,46,10}, -{25,46,11}, -{25,46,12}, -{25,46,13}, -{25,46,14}, -{25,46,15}, -{25,46,16}, -{25,46,17}, -{25,46,18}, -{25,46,19}, -{25,46,20}, -{25,46,21}, -{25,46,22}, -{25,46,23}, -{25,46,24}, -{25,46,25}, -{25,46,26}, -{25,46,27}, -{25,46,28}, -{25,46,29}, -{25,46,30}, -{25,46,31}, -{25,46,32}, -{25,46,33}, -{25,46,34}, -{25,46,35}, -{25,46,36}, -{25,46,37}, -{25,47,-74}, -{25,47,-73}, -{25,47,-72}, -{25,47,-71}, -{25,47,-70}, -{25,47,-69}, -{25,47,-68}, -{25,47,-67}, -{25,47,-66}, -{25,47,-65}, -{25,47,-64}, -{25,47,-63}, -{25,47,-62}, -{25,47,-61}, -{25,47,-60}, -{25,47,-59}, -{25,47,-58}, -{25,47,-57}, -{25,47,-56}, -{25,47,-55}, -{25,47,-54}, -{25,47,-53}, -{25,47,-52}, -{25,47,-51}, -{25,47,-50}, -{25,47,-49}, -{25,47,-48}, -{25,47,-47}, -{25,47,-46}, -{25,47,-45}, -{25,47,-44}, -{25,47,-43}, -{25,47,-42}, -{25,47,-41}, -{25,47,-40}, -{25,47,-39}, -{25,47,-38}, -{25,47,-37}, -{25,47,-36}, -{25,47,-35}, -{25,47,-34}, -{25,47,-33}, -{25,47,-32}, -{25,47,-31}, -{25,47,-30}, -{25,47,-29}, -{25,47,-28}, -{25,47,-27}, -{25,47,-26}, -{25,47,-25}, -{25,47,-24}, -{25,47,-23}, -{25,47,-22}, -{25,47,-21}, -{25,47,-20}, -{25,47,-19}, -{25,47,-18}, -{25,47,-17}, -{25,47,-16}, -{25,47,-15}, -{25,47,-14}, -{25,47,-13}, -{25,47,-12}, -{25,47,-11}, -{25,47,-10}, -{25,47,-9}, -{25,47,-8}, -{25,47,-7}, -{25,47,-6}, -{25,47,-5}, -{25,47,-4}, -{25,47,-3}, -{25,47,-2}, -{25,47,-1}, -{25,47,0}, -{25,47,1}, -{25,47,2}, -{25,47,3}, -{25,47,4}, -{25,47,5}, -{25,47,6}, -{25,47,7}, -{25,47,8}, -{25,47,9}, -{25,47,10}, -{25,47,11}, -{25,47,12}, -{25,47,13}, -{25,47,14}, -{25,47,15}, -{25,47,16}, -{25,47,17}, -{25,47,18}, -{25,47,19}, -{25,47,20}, -{25,47,21}, -{25,47,22}, -{25,47,23}, -{25,47,24}, -{25,47,25}, -{25,47,26}, -{25,47,27}, -{25,47,28}, -{25,47,29}, -{25,47,30}, -{25,47,31}, -{25,47,32}, -{25,47,33}, -{25,47,34}, -{25,47,35}, -{25,47,36}, -{25,47,37}, -{25,48,-75}, -{25,48,-74}, -{25,48,-73}, -{25,48,-72}, -{25,48,-71}, -{25,48,-70}, -{25,48,-69}, -{25,48,-68}, -{25,48,-67}, -{25,48,-66}, -{25,48,-65}, -{25,48,-64}, -{25,48,-63}, -{25,48,-62}, -{25,48,-61}, -{25,48,-60}, -{25,48,-59}, -{25,48,-58}, -{25,48,-57}, -{25,48,-56}, -{25,48,-55}, -{25,48,-54}, -{25,48,-53}, -{25,48,-52}, -{25,48,-51}, -{25,48,-50}, -{25,48,-49}, -{25,48,-48}, -{25,48,-47}, -{25,48,-46}, -{25,48,-45}, -{25,48,-44}, -{25,48,-43}, -{25,48,-42}, -{25,48,-41}, -{25,48,-40}, -{25,48,-39}, -{25,48,-38}, -{25,48,-37}, -{25,48,-36}, -{25,48,-35}, -{25,48,-34}, -{25,48,-33}, -{25,48,-32}, -{25,48,-31}, -{25,48,-30}, -{25,48,-29}, -{25,48,-28}, -{25,48,-27}, -{25,48,-26}, -{25,48,-25}, -{25,48,-24}, -{25,48,-23}, -{25,48,-22}, -{25,48,-21}, -{25,48,-20}, -{25,48,-19}, -{25,48,-18}, -{25,48,-17}, -{25,48,-16}, -{25,48,-15}, -{25,48,-14}, -{25,48,-13}, -{25,48,-12}, -{25,48,-11}, -{25,48,-10}, -{25,48,-9}, -{25,48,-8}, -{25,48,-7}, -{25,48,-6}, -{25,48,-5}, -{25,48,-4}, -{25,48,-3}, -{25,48,-2}, -{25,48,-1}, -{25,48,0}, -{25,48,1}, -{25,48,2}, -{25,48,3}, -{25,48,4}, -{25,48,5}, -{25,48,6}, -{25,48,7}, -{25,48,8}, -{25,48,9}, -{25,48,10}, -{25,48,11}, -{25,48,12}, -{25,48,13}, -{25,48,14}, -{25,48,15}, -{25,48,16}, -{25,48,17}, -{25,48,18}, -{25,48,19}, -{25,48,20}, -{25,48,21}, -{25,48,22}, -{25,48,23}, -{25,49,-76}, -{25,49,-75}, -{25,49,-74}, -{25,49,-73}, -{25,49,-72}, -{25,49,-71}, -{25,49,-70}, -{25,49,-69}, -{25,49,-68}, -{25,49,-67}, -{25,49,-66}, -{25,49,-65}, -{25,49,-64}, -{25,49,-63}, -{25,49,-62}, -{25,49,-61}, -{25,49,-60}, -{25,49,-59}, -{25,49,-58}, -{25,49,-57}, -{25,49,-56}, -{25,49,-55}, -{25,49,-54}, -{25,49,-53}, -{25,49,-52}, -{25,49,-51}, -{25,49,-50}, -{25,49,-49}, -{25,49,-48}, -{25,49,-47}, -{25,49,-46}, -{25,49,-45}, -{25,49,-44}, -{25,49,-43}, -{25,49,-42}, -{25,49,-41}, -{25,49,-40}, -{25,49,-39}, -{25,49,-38}, -{25,49,-37}, -{25,49,-36}, -{25,49,-35}, -{25,49,-34}, -{25,49,-33}, -{25,49,-32}, -{25,49,-31}, -{25,49,-30}, -{25,49,-29}, -{25,49,-28}, -{25,49,-27}, -{25,49,-26}, -{25,49,-25}, -{25,49,-24}, -{25,49,-23}, -{25,49,-22}, -{25,49,-21}, -{25,49,-20}, -{25,49,-19}, -{25,49,-18}, -{25,49,-17}, -{25,49,-16}, -{25,49,-15}, -{25,49,-14}, -{25,49,-13}, -{25,49,-12}, -{25,49,-11}, -{25,49,-10}, -{25,49,-9}, -{25,49,-8}, -{25,49,-7}, -{25,49,-6}, -{25,49,-5}, -{25,49,-4}, -{25,49,-3}, -{25,49,-2}, -{25,49,-1}, -{25,49,0}, -{25,49,1}, -{25,49,2}, -{25,49,3}, -{25,50,-77}, -{25,50,-76}, -{25,50,-75}, -{25,50,-74}, -{25,50,-73}, -{25,50,-72}, -{25,50,-71}, -{25,50,-70}, -{25,50,-69}, -{25,50,-68}, -{25,50,-67}, -{25,50,-66}, -{25,50,-65}, -{25,50,-64}, -{25,50,-63}, -{25,50,-62}, -{25,50,-61}, -{25,50,-60}, -{25,50,-59}, -{25,50,-58}, -{25,50,-57}, -{25,50,-56}, -{25,50,-55}, -{25,50,-54}, -{25,50,-53}, -{25,50,-52}, -{25,50,-51}, -{25,50,-50}, -{25,50,-49}, -{25,50,-48}, -{25,50,-47}, -{25,50,-46}, -{25,50,-45}, -{25,50,-44}, -{25,50,-43}, -{25,50,-42}, -{25,50,-41}, -{25,50,-40}, -{25,50,-39}, -{25,50,-38}, -{25,50,-37}, -{25,50,-36}, -{25,50,-35}, -{25,50,-34}, -{25,50,-33}, -{25,50,-32}, -{25,50,-31}, -{25,50,-30}, -{25,50,-29}, -{25,50,-28}, -{25,50,-27}, -{25,50,-26}, -{25,50,-25}, -{25,50,-24}, -{25,50,-23}, -{25,50,-22}, -{25,50,-21}, -{25,50,-20}, -{25,50,-19}, -{25,50,-18}, -{25,50,-17}, -{25,50,-16}, -{25,50,-15}, -{25,50,-14}, -{25,50,-13}, -{25,50,-12}, -{25,50,-11}, -{25,50,-10}, -{25,51,-78}, -{25,51,-77}, -{25,51,-76}, -{25,51,-75}, -{25,51,-74}, -{25,51,-73}, -{25,51,-72}, -{25,51,-71}, -{25,51,-70}, -{25,51,-69}, -{25,51,-68}, -{25,51,-67}, -{25,51,-66}, -{25,51,-65}, -{25,51,-64}, -{25,51,-63}, -{25,51,-62}, -{25,51,-61}, -{25,51,-60}, -{25,51,-59}, -{25,51,-58}, -{25,51,-57}, -{25,51,-56}, -{25,51,-55}, -{25,51,-54}, -{25,51,-53}, -{25,51,-52}, -{25,51,-51}, -{25,51,-50}, -{25,51,-49}, -{25,51,-48}, -{25,51,-47}, -{25,51,-46}, -{25,51,-45}, -{25,51,-44}, -{25,51,-43}, -{25,51,-42}, -{25,51,-41}, -{25,51,-40}, -{25,51,-39}, -{25,51,-38}, -{25,51,-37}, -{25,51,-36}, -{25,51,-35}, -{25,51,-34}, -{25,51,-33}, -{25,51,-32}, -{25,51,-31}, -{25,51,-30}, -{25,51,-29}, -{25,51,-28}, -{25,51,-27}, -{25,51,-26}, -{25,51,-25}, -{25,51,-24}, -{25,51,-23}, -{25,51,-22}, -{25,51,-21}, -{25,51,-20}, -{25,51,-19}, -{25,52,-79}, -{25,52,-78}, -{25,52,-77}, -{25,52,-76}, -{25,52,-75}, -{25,52,-74}, -{25,52,-73}, -{25,52,-72}, -{25,52,-71}, -{25,52,-70}, -{25,52,-69}, -{25,52,-68}, -{25,52,-67}, -{25,52,-66}, -{25,52,-65}, -{25,52,-64}, -{25,52,-63}, -{25,52,-62}, -{25,52,-61}, -{25,52,-60}, -{25,52,-59}, -{25,52,-58}, -{25,52,-57}, -{25,52,-56}, -{25,52,-55}, -{25,52,-54}, -{25,52,-53}, -{25,52,-52}, -{25,52,-51}, -{25,52,-50}, -{25,52,-49}, -{25,52,-48}, -{25,52,-47}, -{25,52,-46}, -{25,52,-45}, -{25,52,-44}, -{25,52,-43}, -{25,52,-42}, -{25,52,-41}, -{25,52,-40}, -{25,52,-39}, -{25,52,-38}, -{25,52,-37}, -{25,52,-36}, -{25,52,-35}, -{25,52,-34}, -{25,52,-33}, -{25,52,-32}, -{25,52,-31}, -{25,52,-30}, -{25,52,-29}, -{25,52,-28}, -{25,52,-27}, -{25,53,-79}, -{25,53,-78}, -{25,53,-77}, -{25,53,-76}, -{25,53,-75}, -{25,53,-74}, -{25,53,-73}, -{25,53,-72}, -{25,53,-71}, -{25,53,-70}, -{25,53,-69}, -{25,53,-68}, -{25,53,-67}, -{25,53,-66}, -{25,53,-65}, -{25,53,-64}, -{25,53,-63}, -{25,53,-62}, -{25,53,-61}, -{25,53,-60}, -{25,53,-59}, -{25,53,-58}, -{25,53,-57}, -{25,53,-56}, -{25,53,-55}, -{25,53,-54}, -{25,53,-53}, -{25,53,-52}, -{25,53,-51}, -{25,53,-50}, -{25,53,-49}, -{25,53,-48}, -{25,53,-47}, -{25,53,-46}, -{25,53,-45}, -{25,53,-44}, -{25,53,-43}, -{25,53,-42}, -{25,53,-41}, -{25,53,-40}, -{25,53,-39}, -{25,53,-38}, -{25,53,-37}, -{25,53,-36}, -{25,53,-35}, -{25,53,-34}, -{25,54,-80}, -{25,54,-79}, -{25,54,-78}, -{25,54,-77}, -{25,54,-76}, -{25,54,-75}, -{25,54,-74}, -{25,54,-73}, -{25,54,-72}, -{25,54,-71}, -{25,54,-70}, -{25,54,-69}, -{25,54,-68}, -{25,54,-67}, -{25,54,-66}, -{25,54,-65}, -{25,54,-64}, -{25,54,-63}, -{25,54,-62}, -{25,54,-61}, -{25,54,-60}, -{25,54,-59}, -{25,54,-58}, -{25,54,-57}, -{25,54,-56}, -{25,54,-55}, -{25,54,-54}, -{25,54,-53}, -{25,54,-52}, -{25,54,-51}, -{25,54,-50}, -{25,54,-49}, -{25,54,-48}, -{25,54,-47}, -{25,54,-46}, -{25,54,-45}, -{25,54,-44}, -{25,54,-43}, -{25,54,-42}, -{25,54,-41}, -{25,54,-40}, -{25,55,-81}, -{25,55,-80}, -{25,55,-79}, -{25,55,-78}, -{25,55,-77}, -{25,55,-76}, -{25,55,-75}, -{25,55,-74}, -{25,55,-73}, -{25,55,-72}, -{25,55,-71}, -{25,55,-70}, -{25,55,-69}, -{25,55,-68}, -{25,55,-67}, -{25,55,-66}, -{25,55,-65}, -{25,55,-64}, -{25,55,-63}, -{25,55,-62}, -{25,55,-61}, -{25,55,-60}, -{25,55,-59}, -{25,55,-58}, -{25,55,-57}, -{25,55,-56}, -{25,55,-55}, -{25,55,-54}, -{25,55,-53}, -{25,55,-52}, -{25,55,-51}, -{25,55,-50}, -{25,55,-49}, -{25,55,-48}, -{25,55,-47}, -{25,55,-46}, -{25,55,-45}, -{25,56,-82}, -{25,56,-81}, -{25,56,-80}, -{25,56,-79}, -{25,56,-78}, -{25,56,-77}, -{25,56,-76}, -{25,56,-75}, -{25,56,-74}, -{25,56,-73}, -{25,56,-72}, -{25,56,-71}, -{25,56,-70}, -{25,56,-69}, -{25,56,-68}, -{25,56,-67}, -{25,56,-66}, -{25,56,-65}, -{25,56,-64}, -{25,56,-63}, -{25,56,-62}, -{25,56,-61}, -{25,56,-60}, -{25,56,-59}, -{25,56,-58}, -{25,56,-57}, -{25,56,-56}, -{25,56,-55}, -{25,56,-54}, -{25,56,-53}, -{25,56,-52}, -{25,56,-51}, -{25,56,-50}, -{25,57,-83}, -{25,57,-82}, -{25,57,-81}, -{25,57,-80}, -{25,57,-79}, -{25,57,-78}, -{25,57,-77}, -{25,57,-76}, -{25,57,-75}, -{25,57,-74}, -{25,57,-73}, -{25,57,-72}, -{25,57,-71}, -{25,57,-70}, -{25,57,-69}, -{25,57,-68}, -{25,57,-67}, -{25,57,-66}, -{25,57,-65}, -{25,57,-64}, -{25,57,-63}, -{25,57,-62}, -{25,57,-61}, -{25,57,-60}, -{25,57,-59}, -{25,57,-58}, -{25,57,-57}, -{25,57,-56}, -{25,57,-55}, -{25,58,-84}, -{25,58,-83}, -{25,58,-82}, -{25,58,-81}, -{25,58,-80}, -{25,58,-79}, -{25,58,-78}, -{25,58,-77}, -{25,58,-76}, -{25,58,-75}, -{25,58,-74}, -{25,58,-73}, -{25,58,-72}, -{25,58,-71}, -{25,58,-70}, -{25,58,-69}, -{25,58,-68}, -{25,58,-67}, -{25,58,-66}, -{25,58,-65}, -{25,58,-64}, -{25,58,-63}, -{25,58,-62}, -{25,58,-61}, -{25,58,-60}, -{25,58,-59}, -{25,59,-84}, -{25,59,-83}, -{25,59,-82}, -{25,59,-81}, -{25,59,-80}, -{25,59,-79}, -{25,59,-78}, -{25,59,-77}, -{25,59,-76}, -{25,59,-75}, -{25,59,-74}, -{25,59,-73}, -{25,59,-72}, -{25,59,-71}, -{25,59,-70}, -{25,59,-69}, -{25,59,-68}, -{25,59,-67}, -{25,59,-66}, -{25,59,-65}, -{25,59,-64}, -{25,60,-85}, -{25,60,-84}, -{25,60,-83}, -{25,60,-82}, -{25,60,-81}, -{25,60,-80}, -{25,60,-79}, -{25,60,-78}, -{25,60,-77}, -{25,60,-76}, -{25,60,-75}, -{25,60,-74}, -{25,60,-73}, -{25,60,-72}, -{25,60,-71}, -{25,60,-70}, -{25,60,-69}, -{25,60,-68}, -{25,61,-86}, -{25,61,-85}, -{25,61,-84}, -{25,61,-83}, -{25,61,-82}, -{25,61,-81}, -{25,61,-80}, -{25,61,-79}, -{25,61,-78}, -{25,61,-77}, -{25,61,-76}, -{25,61,-75}, -{25,61,-74}, -{25,61,-73}, -{25,61,-72}, -{25,61,-71}, -{25,62,-87}, -{25,62,-86}, -{25,62,-85}, -{25,62,-84}, -{25,62,-83}, -{25,62,-82}, -{25,62,-81}, -{25,62,-80}, -{25,62,-79}, -{25,62,-78}, -{25,62,-77}, -{25,62,-76}, -{25,62,-75}, -{25,63,-88}, -{25,63,-87}, -{25,63,-86}, -{25,63,-85}, -{25,63,-84}, -{25,63,-83}, -{25,63,-82}, -{25,63,-81}, -{25,63,-80}, -{25,63,-79}, -{25,63,-78}, -{25,64,-89}, -{25,64,-88}, -{25,64,-87}, -{25,64,-86}, -{25,64,-85}, -{25,64,-84}, -{25,64,-83}, -{25,64,-82}, -{25,65,-89}, -{25,65,-88}, -{25,65,-87}, -{25,65,-86}, -{25,65,-85}, -{25,66,-90}, -{25,66,-89}, -{25,66,-88}, -{25,67,-91}, -{26,-34,29}, -{26,-34,30}, -{26,-34,31}, -{26,-34,32}, -{26,-34,33}, -{26,-33,25}, -{26,-33,26}, -{26,-33,27}, -{26,-33,28}, -{26,-33,29}, -{26,-33,30}, -{26,-33,31}, -{26,-33,32}, -{26,-33,33}, -{26,-32,22}, -{26,-32,23}, -{26,-32,24}, -{26,-32,25}, -{26,-32,26}, -{26,-32,27}, -{26,-32,28}, -{26,-32,29}, -{26,-32,30}, -{26,-32,31}, -{26,-32,32}, -{26,-32,33}, -{26,-31,19}, -{26,-31,20}, -{26,-31,21}, -{26,-31,22}, -{26,-31,23}, -{26,-31,24}, -{26,-31,25}, -{26,-31,26}, -{26,-31,27}, -{26,-31,28}, -{26,-31,29}, -{26,-31,30}, -{26,-31,31}, -{26,-31,32}, -{26,-31,33}, -{26,-30,16}, -{26,-30,17}, -{26,-30,18}, -{26,-30,19}, -{26,-30,20}, -{26,-30,21}, -{26,-30,22}, -{26,-30,23}, -{26,-30,24}, -{26,-30,25}, -{26,-30,26}, -{26,-30,27}, -{26,-30,28}, -{26,-30,29}, -{26,-30,30}, -{26,-30,31}, -{26,-30,32}, -{26,-30,33}, -{26,-29,14}, -{26,-29,15}, -{26,-29,16}, -{26,-29,17}, -{26,-29,18}, -{26,-29,19}, -{26,-29,20}, -{26,-29,21}, -{26,-29,22}, -{26,-29,23}, -{26,-29,24}, -{26,-29,25}, -{26,-29,26}, -{26,-29,27}, -{26,-29,28}, -{26,-29,29}, -{26,-29,30}, -{26,-29,31}, -{26,-29,32}, -{26,-29,33}, -{26,-28,12}, -{26,-28,13}, -{26,-28,14}, -{26,-28,15}, -{26,-28,16}, -{26,-28,17}, -{26,-28,18}, -{26,-28,19}, -{26,-28,20}, -{26,-28,21}, -{26,-28,22}, -{26,-28,23}, -{26,-28,24}, -{26,-28,25}, -{26,-28,26}, -{26,-28,27}, -{26,-28,28}, -{26,-28,29}, -{26,-28,30}, -{26,-28,31}, -{26,-28,32}, -{26,-28,33}, -{26,-27,9}, -{26,-27,10}, -{26,-27,11}, -{26,-27,12}, -{26,-27,13}, -{26,-27,14}, -{26,-27,15}, -{26,-27,16}, -{26,-27,17}, -{26,-27,18}, -{26,-27,19}, -{26,-27,20}, -{26,-27,21}, -{26,-27,22}, -{26,-27,23}, -{26,-27,24}, -{26,-27,25}, -{26,-27,26}, -{26,-27,27}, -{26,-27,28}, -{26,-27,29}, -{26,-27,30}, -{26,-27,31}, -{26,-27,32}, -{26,-27,33}, -{26,-26,7}, -{26,-26,8}, -{26,-26,9}, -{26,-26,10}, -{26,-26,11}, -{26,-26,12}, -{26,-26,13}, -{26,-26,14}, -{26,-26,15}, -{26,-26,16}, -{26,-26,17}, -{26,-26,18}, -{26,-26,19}, -{26,-26,20}, -{26,-26,21}, -{26,-26,22}, -{26,-26,23}, -{26,-26,24}, -{26,-26,25}, -{26,-26,26}, -{26,-26,27}, -{26,-26,28}, -{26,-26,29}, -{26,-26,30}, -{26,-26,31}, -{26,-26,32}, -{26,-26,33}, -{26,-26,34}, -{26,-25,5}, -{26,-25,6}, -{26,-25,7}, -{26,-25,8}, -{26,-25,9}, -{26,-25,10}, -{26,-25,11}, -{26,-25,12}, -{26,-25,13}, -{26,-25,14}, -{26,-25,15}, -{26,-25,16}, -{26,-25,17}, -{26,-25,18}, -{26,-25,19}, -{26,-25,20}, -{26,-25,21}, -{26,-25,22}, -{26,-25,23}, -{26,-25,24}, -{26,-25,25}, -{26,-25,26}, -{26,-25,27}, -{26,-25,28}, -{26,-25,29}, -{26,-25,30}, -{26,-25,31}, -{26,-25,32}, -{26,-25,33}, -{26,-25,34}, -{26,-24,3}, -{26,-24,4}, -{26,-24,5}, -{26,-24,6}, -{26,-24,7}, -{26,-24,8}, -{26,-24,9}, -{26,-24,10}, -{26,-24,11}, -{26,-24,12}, -{26,-24,13}, -{26,-24,14}, -{26,-24,15}, -{26,-24,16}, -{26,-24,17}, -{26,-24,18}, -{26,-24,19}, -{26,-24,20}, -{26,-24,21}, -{26,-24,22}, -{26,-24,23}, -{26,-24,24}, -{26,-24,25}, -{26,-24,26}, -{26,-24,27}, -{26,-24,28}, -{26,-24,29}, -{26,-24,30}, -{26,-24,31}, -{26,-24,32}, -{26,-24,33}, -{26,-24,34}, -{26,-23,2}, -{26,-23,3}, -{26,-23,4}, -{26,-23,5}, -{26,-23,6}, -{26,-23,7}, -{26,-23,8}, -{26,-23,9}, -{26,-23,10}, -{26,-23,11}, -{26,-23,12}, -{26,-23,13}, -{26,-23,14}, -{26,-23,15}, -{26,-23,16}, -{26,-23,17}, -{26,-23,18}, -{26,-23,19}, -{26,-23,20}, -{26,-23,21}, -{26,-23,22}, -{26,-23,23}, -{26,-23,24}, -{26,-23,25}, -{26,-23,26}, -{26,-23,27}, -{26,-23,28}, -{26,-23,29}, -{26,-23,30}, -{26,-23,31}, -{26,-23,32}, -{26,-23,33}, -{26,-23,34}, -{26,-22,0}, -{26,-22,1}, -{26,-22,2}, -{26,-22,3}, -{26,-22,4}, -{26,-22,5}, -{26,-22,6}, -{26,-22,7}, -{26,-22,8}, -{26,-22,9}, -{26,-22,10}, -{26,-22,11}, -{26,-22,12}, -{26,-22,13}, -{26,-22,14}, -{26,-22,15}, -{26,-22,16}, -{26,-22,17}, -{26,-22,18}, -{26,-22,19}, -{26,-22,20}, -{26,-22,21}, -{26,-22,22}, -{26,-22,23}, -{26,-22,24}, -{26,-22,25}, -{26,-22,26}, -{26,-22,27}, -{26,-22,28}, -{26,-22,29}, -{26,-22,30}, -{26,-22,31}, -{26,-22,32}, -{26,-22,33}, -{26,-22,34}, -{26,-21,-2}, -{26,-21,-1}, -{26,-21,0}, -{26,-21,1}, -{26,-21,2}, -{26,-21,3}, -{26,-21,4}, -{26,-21,5}, -{26,-21,6}, -{26,-21,7}, -{26,-21,8}, -{26,-21,9}, -{26,-21,10}, -{26,-21,11}, -{26,-21,12}, -{26,-21,13}, -{26,-21,14}, -{26,-21,15}, -{26,-21,16}, -{26,-21,17}, -{26,-21,18}, -{26,-21,19}, -{26,-21,20}, -{26,-21,21}, -{26,-21,22}, -{26,-21,23}, -{26,-21,24}, -{26,-21,25}, -{26,-21,26}, -{26,-21,27}, -{26,-21,28}, -{26,-21,29}, -{26,-21,30}, -{26,-21,31}, -{26,-21,32}, -{26,-21,33}, -{26,-21,34}, -{26,-20,-3}, -{26,-20,-2}, -{26,-20,-1}, -{26,-20,0}, -{26,-20,1}, -{26,-20,2}, -{26,-20,3}, -{26,-20,4}, -{26,-20,5}, -{26,-20,6}, -{26,-20,7}, -{26,-20,8}, -{26,-20,9}, -{26,-20,10}, -{26,-20,11}, -{26,-20,12}, -{26,-20,13}, -{26,-20,14}, -{26,-20,15}, -{26,-20,16}, -{26,-20,17}, -{26,-20,18}, -{26,-20,19}, -{26,-20,20}, -{26,-20,21}, -{26,-20,22}, -{26,-20,23}, -{26,-20,24}, -{26,-20,25}, -{26,-20,26}, -{26,-20,27}, -{26,-20,28}, -{26,-20,29}, -{26,-20,30}, -{26,-20,31}, -{26,-20,32}, -{26,-20,33}, -{26,-20,34}, -{26,-19,-5}, -{26,-19,-4}, -{26,-19,-3}, -{26,-19,-2}, -{26,-19,-1}, -{26,-19,0}, -{26,-19,1}, -{26,-19,2}, -{26,-19,3}, -{26,-19,4}, -{26,-19,5}, -{26,-19,6}, -{26,-19,7}, -{26,-19,8}, -{26,-19,9}, -{26,-19,10}, -{26,-19,11}, -{26,-19,12}, -{26,-19,13}, -{26,-19,14}, -{26,-19,15}, -{26,-19,16}, -{26,-19,17}, -{26,-19,18}, -{26,-19,19}, -{26,-19,20}, -{26,-19,21}, -{26,-19,22}, -{26,-19,23}, -{26,-19,24}, -{26,-19,25}, -{26,-19,26}, -{26,-19,27}, -{26,-19,28}, -{26,-19,29}, -{26,-19,30}, -{26,-19,31}, -{26,-19,32}, -{26,-19,33}, -{26,-19,34}, -{26,-18,-7}, -{26,-18,-6}, -{26,-18,-5}, -{26,-18,-4}, -{26,-18,-3}, -{26,-18,-2}, -{26,-18,-1}, -{26,-18,0}, -{26,-18,1}, -{26,-18,2}, -{26,-18,3}, -{26,-18,4}, -{26,-18,5}, -{26,-18,6}, -{26,-18,7}, -{26,-18,8}, -{26,-18,9}, -{26,-18,10}, -{26,-18,11}, -{26,-18,12}, -{26,-18,13}, -{26,-18,14}, -{26,-18,15}, -{26,-18,16}, -{26,-18,17}, -{26,-18,18}, -{26,-18,19}, -{26,-18,20}, -{26,-18,21}, -{26,-18,22}, -{26,-18,23}, -{26,-18,24}, -{26,-18,25}, -{26,-18,26}, -{26,-18,27}, -{26,-18,28}, -{26,-18,29}, -{26,-18,30}, -{26,-18,31}, -{26,-18,32}, -{26,-18,33}, -{26,-18,34}, -{26,-17,-8}, -{26,-17,-7}, -{26,-17,-6}, -{26,-17,-5}, -{26,-17,-4}, -{26,-17,-3}, -{26,-17,-2}, -{26,-17,-1}, -{26,-17,0}, -{26,-17,1}, -{26,-17,2}, -{26,-17,3}, -{26,-17,4}, -{26,-17,5}, -{26,-17,6}, -{26,-17,7}, -{26,-17,8}, -{26,-17,9}, -{26,-17,10}, -{26,-17,11}, -{26,-17,12}, -{26,-17,13}, -{26,-17,14}, -{26,-17,15}, -{26,-17,16}, -{26,-17,17}, -{26,-17,18}, -{26,-17,19}, -{26,-17,20}, -{26,-17,21}, -{26,-17,22}, -{26,-17,23}, -{26,-17,24}, -{26,-17,25}, -{26,-17,26}, -{26,-17,27}, -{26,-17,28}, -{26,-17,29}, -{26,-17,30}, -{26,-17,31}, -{26,-17,32}, -{26,-17,33}, -{26,-17,34}, -{26,-16,-10}, -{26,-16,-9}, -{26,-16,-8}, -{26,-16,-7}, -{26,-16,-6}, -{26,-16,-5}, -{26,-16,-4}, -{26,-16,-3}, -{26,-16,-2}, -{26,-16,-1}, -{26,-16,0}, -{26,-16,1}, -{26,-16,2}, -{26,-16,3}, -{26,-16,4}, -{26,-16,5}, -{26,-16,6}, -{26,-16,7}, -{26,-16,8}, -{26,-16,9}, -{26,-16,10}, -{26,-16,11}, -{26,-16,12}, -{26,-16,13}, -{26,-16,14}, -{26,-16,15}, -{26,-16,16}, -{26,-16,17}, -{26,-16,18}, -{26,-16,19}, -{26,-16,20}, -{26,-16,21}, -{26,-16,22}, -{26,-16,23}, -{26,-16,24}, -{26,-16,25}, -{26,-16,26}, -{26,-16,27}, -{26,-16,28}, -{26,-16,29}, -{26,-16,30}, -{26,-16,31}, -{26,-16,32}, -{26,-16,33}, -{26,-16,34}, -{26,-15,-11}, -{26,-15,-10}, -{26,-15,-9}, -{26,-15,-8}, -{26,-15,-7}, -{26,-15,-6}, -{26,-15,-5}, -{26,-15,-4}, -{26,-15,-3}, -{26,-15,-2}, -{26,-15,-1}, -{26,-15,0}, -{26,-15,1}, -{26,-15,2}, -{26,-15,3}, -{26,-15,4}, -{26,-15,5}, -{26,-15,6}, -{26,-15,7}, -{26,-15,8}, -{26,-15,9}, -{26,-15,10}, -{26,-15,11}, -{26,-15,12}, -{26,-15,13}, -{26,-15,14}, -{26,-15,15}, -{26,-15,16}, -{26,-15,17}, -{26,-15,18}, -{26,-15,19}, -{26,-15,20}, -{26,-15,21}, -{26,-15,22}, -{26,-15,23}, -{26,-15,24}, -{26,-15,25}, -{26,-15,26}, -{26,-15,27}, -{26,-15,28}, -{26,-15,29}, -{26,-15,30}, -{26,-15,31}, -{26,-15,32}, -{26,-15,33}, -{26,-15,34}, -{26,-14,-12}, -{26,-14,-11}, -{26,-14,-10}, -{26,-14,-9}, -{26,-14,-8}, -{26,-14,-7}, -{26,-14,-6}, -{26,-14,-5}, -{26,-14,-4}, -{26,-14,-3}, -{26,-14,-2}, -{26,-14,-1}, -{26,-14,0}, -{26,-14,1}, -{26,-14,2}, -{26,-14,3}, -{26,-14,4}, -{26,-14,5}, -{26,-14,6}, -{26,-14,7}, -{26,-14,8}, -{26,-14,9}, -{26,-14,10}, -{26,-14,11}, -{26,-14,12}, -{26,-14,13}, -{26,-14,14}, -{26,-14,15}, -{26,-14,16}, -{26,-14,17}, -{26,-14,18}, -{26,-14,19}, -{26,-14,20}, -{26,-14,21}, -{26,-14,22}, -{26,-14,23}, -{26,-14,24}, -{26,-14,25}, -{26,-14,26}, -{26,-14,27}, -{26,-14,28}, -{26,-14,29}, -{26,-14,30}, -{26,-14,31}, -{26,-14,32}, -{26,-14,33}, -{26,-14,34}, -{26,-13,-14}, -{26,-13,-13}, -{26,-13,-12}, -{26,-13,-11}, -{26,-13,-10}, -{26,-13,-9}, -{26,-13,-8}, -{26,-13,-7}, -{26,-13,-6}, -{26,-13,-5}, -{26,-13,-4}, -{26,-13,-3}, -{26,-13,-2}, -{26,-13,-1}, -{26,-13,0}, -{26,-13,1}, -{26,-13,2}, -{26,-13,3}, -{26,-13,4}, -{26,-13,5}, -{26,-13,6}, -{26,-13,7}, -{26,-13,8}, -{26,-13,9}, -{26,-13,10}, -{26,-13,11}, -{26,-13,12}, -{26,-13,13}, -{26,-13,14}, -{26,-13,15}, -{26,-13,16}, -{26,-13,17}, -{26,-13,18}, -{26,-13,19}, -{26,-13,20}, -{26,-13,21}, -{26,-13,22}, -{26,-13,23}, -{26,-13,24}, -{26,-13,25}, -{26,-13,26}, -{26,-13,27}, -{26,-13,28}, -{26,-13,29}, -{26,-13,30}, -{26,-13,31}, -{26,-13,32}, -{26,-13,33}, -{26,-13,34}, -{26,-12,-15}, -{26,-12,-14}, -{26,-12,-13}, -{26,-12,-12}, -{26,-12,-11}, -{26,-12,-10}, -{26,-12,-9}, -{26,-12,-8}, -{26,-12,-7}, -{26,-12,-6}, -{26,-12,-5}, -{26,-12,-4}, -{26,-12,-3}, -{26,-12,-2}, -{26,-12,-1}, -{26,-12,0}, -{26,-12,1}, -{26,-12,2}, -{26,-12,3}, -{26,-12,4}, -{26,-12,5}, -{26,-12,6}, -{26,-12,7}, -{26,-12,8}, -{26,-12,9}, -{26,-12,10}, -{26,-12,11}, -{26,-12,12}, -{26,-12,13}, -{26,-12,14}, -{26,-12,15}, -{26,-12,16}, -{26,-12,17}, -{26,-12,18}, -{26,-12,19}, -{26,-12,20}, -{26,-12,21}, -{26,-12,22}, -{26,-12,23}, -{26,-12,24}, -{26,-12,25}, -{26,-12,26}, -{26,-12,27}, -{26,-12,28}, -{26,-12,29}, -{26,-12,30}, -{26,-12,31}, -{26,-12,32}, -{26,-12,33}, -{26,-12,34}, -{26,-11,-17}, -{26,-11,-16}, -{26,-11,-15}, -{26,-11,-14}, -{26,-11,-13}, -{26,-11,-12}, -{26,-11,-11}, -{26,-11,-10}, -{26,-11,-9}, -{26,-11,-8}, -{26,-11,-7}, -{26,-11,-6}, -{26,-11,-5}, -{26,-11,-4}, -{26,-11,-3}, -{26,-11,-2}, -{26,-11,-1}, -{26,-11,0}, -{26,-11,1}, -{26,-11,2}, -{26,-11,3}, -{26,-11,4}, -{26,-11,5}, -{26,-11,6}, -{26,-11,7}, -{26,-11,8}, -{26,-11,9}, -{26,-11,10}, -{26,-11,11}, -{26,-11,12}, -{26,-11,13}, -{26,-11,14}, -{26,-11,15}, -{26,-11,16}, -{26,-11,17}, -{26,-11,18}, -{26,-11,19}, -{26,-11,20}, -{26,-11,21}, -{26,-11,22}, -{26,-11,23}, -{26,-11,24}, -{26,-11,25}, -{26,-11,26}, -{26,-11,27}, -{26,-11,28}, -{26,-11,29}, -{26,-11,30}, -{26,-11,31}, -{26,-11,32}, -{26,-11,33}, -{26,-11,34}, -{26,-10,-18}, -{26,-10,-17}, -{26,-10,-16}, -{26,-10,-15}, -{26,-10,-14}, -{26,-10,-13}, -{26,-10,-12}, -{26,-10,-11}, -{26,-10,-10}, -{26,-10,-9}, -{26,-10,-8}, -{26,-10,-7}, -{26,-10,-6}, -{26,-10,-5}, -{26,-10,-4}, -{26,-10,-3}, -{26,-10,-2}, -{26,-10,-1}, -{26,-10,0}, -{26,-10,1}, -{26,-10,2}, -{26,-10,3}, -{26,-10,4}, -{26,-10,5}, -{26,-10,6}, -{26,-10,7}, -{26,-10,8}, -{26,-10,9}, -{26,-10,10}, -{26,-10,11}, -{26,-10,12}, -{26,-10,13}, -{26,-10,14}, -{26,-10,15}, -{26,-10,16}, -{26,-10,17}, -{26,-10,18}, -{26,-10,19}, -{26,-10,20}, -{26,-10,21}, -{26,-10,22}, -{26,-10,23}, -{26,-10,24}, -{26,-10,25}, -{26,-10,26}, -{26,-10,27}, -{26,-10,28}, -{26,-10,29}, -{26,-10,30}, -{26,-10,31}, -{26,-10,32}, -{26,-10,33}, -{26,-10,34}, -{26,-9,-19}, -{26,-9,-18}, -{26,-9,-17}, -{26,-9,-16}, -{26,-9,-15}, -{26,-9,-14}, -{26,-9,-13}, -{26,-9,-12}, -{26,-9,-11}, -{26,-9,-10}, -{26,-9,-9}, -{26,-9,-8}, -{26,-9,-7}, -{26,-9,-6}, -{26,-9,-5}, -{26,-9,-4}, -{26,-9,-3}, -{26,-9,-2}, -{26,-9,-1}, -{26,-9,0}, -{26,-9,1}, -{26,-9,2}, -{26,-9,3}, -{26,-9,4}, -{26,-9,5}, -{26,-9,6}, -{26,-9,7}, -{26,-9,8}, -{26,-9,9}, -{26,-9,10}, -{26,-9,11}, -{26,-9,12}, -{26,-9,13}, -{26,-9,14}, -{26,-9,15}, -{26,-9,16}, -{26,-9,17}, -{26,-9,18}, -{26,-9,19}, -{26,-9,20}, -{26,-9,21}, -{26,-9,22}, -{26,-9,23}, -{26,-9,24}, -{26,-9,25}, -{26,-9,26}, -{26,-9,27}, -{26,-9,28}, -{26,-9,29}, -{26,-9,30}, -{26,-9,31}, -{26,-9,32}, -{26,-9,33}, -{26,-9,34}, -{26,-8,-20}, -{26,-8,-19}, -{26,-8,-18}, -{26,-8,-17}, -{26,-8,-16}, -{26,-8,-15}, -{26,-8,-14}, -{26,-8,-13}, -{26,-8,-12}, -{26,-8,-11}, -{26,-8,-10}, -{26,-8,-9}, -{26,-8,-8}, -{26,-8,-7}, -{26,-8,-6}, -{26,-8,-5}, -{26,-8,-4}, -{26,-8,-3}, -{26,-8,-2}, -{26,-8,-1}, -{26,-8,0}, -{26,-8,1}, -{26,-8,2}, -{26,-8,3}, -{26,-8,4}, -{26,-8,5}, -{26,-8,6}, -{26,-8,7}, -{26,-8,8}, -{26,-8,9}, -{26,-8,10}, -{26,-8,11}, -{26,-8,12}, -{26,-8,13}, -{26,-8,14}, -{26,-8,15}, -{26,-8,16}, -{26,-8,17}, -{26,-8,18}, -{26,-8,19}, -{26,-8,20}, -{26,-8,21}, -{26,-8,22}, -{26,-8,23}, -{26,-8,24}, -{26,-8,25}, -{26,-8,26}, -{26,-8,27}, -{26,-8,28}, -{26,-8,29}, -{26,-8,30}, -{26,-8,31}, -{26,-8,32}, -{26,-8,33}, -{26,-8,34}, -{26,-7,-22}, -{26,-7,-21}, -{26,-7,-20}, -{26,-7,-19}, -{26,-7,-18}, -{26,-7,-17}, -{26,-7,-16}, -{26,-7,-15}, -{26,-7,-14}, -{26,-7,-13}, -{26,-7,-12}, -{26,-7,-11}, -{26,-7,-10}, -{26,-7,-9}, -{26,-7,-8}, -{26,-7,-7}, -{26,-7,-6}, -{26,-7,-5}, -{26,-7,-4}, -{26,-7,-3}, -{26,-7,-2}, -{26,-7,-1}, -{26,-7,0}, -{26,-7,1}, -{26,-7,2}, -{26,-7,3}, -{26,-7,4}, -{26,-7,5}, -{26,-7,6}, -{26,-7,7}, -{26,-7,8}, -{26,-7,9}, -{26,-7,10}, -{26,-7,11}, -{26,-7,12}, -{26,-7,13}, -{26,-7,14}, -{26,-7,15}, -{26,-7,16}, -{26,-7,17}, -{26,-7,18}, -{26,-7,19}, -{26,-7,20}, -{26,-7,21}, -{26,-7,22}, -{26,-7,23}, -{26,-7,24}, -{26,-7,25}, -{26,-7,26}, -{26,-7,27}, -{26,-7,28}, -{26,-7,29}, -{26,-7,30}, -{26,-7,31}, -{26,-7,32}, -{26,-7,33}, -{26,-7,34}, -{26,-6,-23}, -{26,-6,-22}, -{26,-6,-21}, -{26,-6,-20}, -{26,-6,-19}, -{26,-6,-18}, -{26,-6,-17}, -{26,-6,-16}, -{26,-6,-15}, -{26,-6,-14}, -{26,-6,-13}, -{26,-6,-12}, -{26,-6,-11}, -{26,-6,-10}, -{26,-6,-9}, -{26,-6,-8}, -{26,-6,-7}, -{26,-6,-6}, -{26,-6,-5}, -{26,-6,-4}, -{26,-6,-3}, -{26,-6,-2}, -{26,-6,-1}, -{26,-6,0}, -{26,-6,1}, -{26,-6,2}, -{26,-6,3}, -{26,-6,4}, -{26,-6,5}, -{26,-6,6}, -{26,-6,7}, -{26,-6,8}, -{26,-6,9}, -{26,-6,10}, -{26,-6,11}, -{26,-6,12}, -{26,-6,13}, -{26,-6,14}, -{26,-6,15}, -{26,-6,16}, -{26,-6,17}, -{26,-6,18}, -{26,-6,19}, -{26,-6,20}, -{26,-6,21}, -{26,-6,22}, -{26,-6,23}, -{26,-6,24}, -{26,-6,25}, -{26,-6,26}, -{26,-6,27}, -{26,-6,28}, -{26,-6,29}, -{26,-6,30}, -{26,-6,31}, -{26,-6,32}, -{26,-6,33}, -{26,-6,34}, -{26,-5,-24}, -{26,-5,-23}, -{26,-5,-22}, -{26,-5,-21}, -{26,-5,-20}, -{26,-5,-19}, -{26,-5,-18}, -{26,-5,-17}, -{26,-5,-16}, -{26,-5,-15}, -{26,-5,-14}, -{26,-5,-13}, -{26,-5,-12}, -{26,-5,-11}, -{26,-5,-10}, -{26,-5,-9}, -{26,-5,-8}, -{26,-5,-7}, -{26,-5,-6}, -{26,-5,-5}, -{26,-5,-4}, -{26,-5,-3}, -{26,-5,-2}, -{26,-5,-1}, -{26,-5,0}, -{26,-5,1}, -{26,-5,2}, -{26,-5,3}, -{26,-5,4}, -{26,-5,5}, -{26,-5,6}, -{26,-5,7}, -{26,-5,8}, -{26,-5,9}, -{26,-5,10}, -{26,-5,11}, -{26,-5,12}, -{26,-5,13}, -{26,-5,14}, -{26,-5,15}, -{26,-5,16}, -{26,-5,17}, -{26,-5,18}, -{26,-5,19}, -{26,-5,20}, -{26,-5,21}, -{26,-5,22}, -{26,-5,23}, -{26,-5,24}, -{26,-5,25}, -{26,-5,26}, -{26,-5,27}, -{26,-5,28}, -{26,-5,29}, -{26,-5,30}, -{26,-5,31}, -{26,-5,32}, -{26,-5,33}, -{26,-5,34}, -{26,-5,35}, -{26,-4,-25}, -{26,-4,-24}, -{26,-4,-23}, -{26,-4,-22}, -{26,-4,-21}, -{26,-4,-20}, -{26,-4,-19}, -{26,-4,-18}, -{26,-4,-17}, -{26,-4,-16}, -{26,-4,-15}, -{26,-4,-14}, -{26,-4,-13}, -{26,-4,-12}, -{26,-4,-11}, -{26,-4,-10}, -{26,-4,-9}, -{26,-4,-8}, -{26,-4,-7}, -{26,-4,-6}, -{26,-4,-5}, -{26,-4,-4}, -{26,-4,-3}, -{26,-4,-2}, -{26,-4,-1}, -{26,-4,0}, -{26,-4,1}, -{26,-4,2}, -{26,-4,3}, -{26,-4,4}, -{26,-4,5}, -{26,-4,6}, -{26,-4,7}, -{26,-4,8}, -{26,-4,9}, -{26,-4,10}, -{26,-4,11}, -{26,-4,12}, -{26,-4,13}, -{26,-4,14}, -{26,-4,15}, -{26,-4,16}, -{26,-4,17}, -{26,-4,18}, -{26,-4,19}, -{26,-4,20}, -{26,-4,21}, -{26,-4,22}, -{26,-4,23}, -{26,-4,24}, -{26,-4,25}, -{26,-4,26}, -{26,-4,27}, -{26,-4,28}, -{26,-4,29}, -{26,-4,30}, -{26,-4,31}, -{26,-4,32}, -{26,-4,33}, -{26,-4,34}, -{26,-4,35}, -{26,-3,-26}, -{26,-3,-25}, -{26,-3,-24}, -{26,-3,-23}, -{26,-3,-22}, -{26,-3,-21}, -{26,-3,-20}, -{26,-3,-19}, -{26,-3,-18}, -{26,-3,-17}, -{26,-3,-16}, -{26,-3,-15}, -{26,-3,-14}, -{26,-3,-13}, -{26,-3,-12}, -{26,-3,-11}, -{26,-3,-10}, -{26,-3,-9}, -{26,-3,-8}, -{26,-3,-7}, -{26,-3,-6}, -{26,-3,-5}, -{26,-3,-4}, -{26,-3,-3}, -{26,-3,-2}, -{26,-3,-1}, -{26,-3,0}, -{26,-3,1}, -{26,-3,2}, -{26,-3,3}, -{26,-3,4}, -{26,-3,5}, -{26,-3,6}, -{26,-3,7}, -{26,-3,8}, -{26,-3,9}, -{26,-3,10}, -{26,-3,11}, -{26,-3,12}, -{26,-3,13}, -{26,-3,14}, -{26,-3,15}, -{26,-3,16}, -{26,-3,17}, -{26,-3,18}, -{26,-3,19}, -{26,-3,20}, -{26,-3,21}, -{26,-3,22}, -{26,-3,23}, -{26,-3,24}, -{26,-3,25}, -{26,-3,26}, -{26,-3,27}, -{26,-3,28}, -{26,-3,29}, -{26,-3,30}, -{26,-3,31}, -{26,-3,32}, -{26,-3,33}, -{26,-3,34}, -{26,-3,35}, -{26,-2,-28}, -{26,-2,-27}, -{26,-2,-26}, -{26,-2,-25}, -{26,-2,-24}, -{26,-2,-23}, -{26,-2,-22}, -{26,-2,-21}, -{26,-2,-20}, -{26,-2,-19}, -{26,-2,-18}, -{26,-2,-17}, -{26,-2,-16}, -{26,-2,-15}, -{26,-2,-14}, -{26,-2,-13}, -{26,-2,-12}, -{26,-2,-11}, -{26,-2,-10}, -{26,-2,-9}, -{26,-2,-8}, -{26,-2,-7}, -{26,-2,-6}, -{26,-2,-5}, -{26,-2,-4}, -{26,-2,-3}, -{26,-2,-2}, -{26,-2,-1}, -{26,-2,0}, -{26,-2,1}, -{26,-2,2}, -{26,-2,3}, -{26,-2,4}, -{26,-2,5}, -{26,-2,6}, -{26,-2,7}, -{26,-2,8}, -{26,-2,9}, -{26,-2,10}, -{26,-2,11}, -{26,-2,12}, -{26,-2,13}, -{26,-2,14}, -{26,-2,15}, -{26,-2,16}, -{26,-2,17}, -{26,-2,18}, -{26,-2,19}, -{26,-2,20}, -{26,-2,21}, -{26,-2,22}, -{26,-2,23}, -{26,-2,24}, -{26,-2,25}, -{26,-2,26}, -{26,-2,27}, -{26,-2,28}, -{26,-2,29}, -{26,-2,30}, -{26,-2,31}, -{26,-2,32}, -{26,-2,33}, -{26,-2,34}, -{26,-2,35}, -{26,-1,-29}, -{26,-1,-28}, -{26,-1,-27}, -{26,-1,-26}, -{26,-1,-25}, -{26,-1,-24}, -{26,-1,-23}, -{26,-1,-22}, -{26,-1,-21}, -{26,-1,-20}, -{26,-1,-19}, -{26,-1,-18}, -{26,-1,-17}, -{26,-1,-16}, -{26,-1,-15}, -{26,-1,-14}, -{26,-1,-13}, -{26,-1,-12}, -{26,-1,-11}, -{26,-1,-10}, -{26,-1,-9}, -{26,-1,-8}, -{26,-1,-7}, -{26,-1,-6}, -{26,-1,-5}, -{26,-1,-4}, -{26,-1,-3}, -{26,-1,-2}, -{26,-1,-1}, -{26,-1,0}, -{26,-1,1}, -{26,-1,2}, -{26,-1,3}, -{26,-1,4}, -{26,-1,5}, -{26,-1,6}, -{26,-1,7}, -{26,-1,8}, -{26,-1,9}, -{26,-1,10}, -{26,-1,11}, -{26,-1,12}, -{26,-1,13}, -{26,-1,14}, -{26,-1,15}, -{26,-1,16}, -{26,-1,17}, -{26,-1,18}, -{26,-1,19}, -{26,-1,20}, -{26,-1,21}, -{26,-1,22}, -{26,-1,23}, -{26,-1,24}, -{26,-1,25}, -{26,-1,26}, -{26,-1,27}, -{26,-1,28}, -{26,-1,29}, -{26,-1,30}, -{26,-1,31}, -{26,-1,32}, -{26,-1,33}, -{26,-1,34}, -{26,-1,35}, -{26,0,-30}, -{26,0,-29}, -{26,0,-28}, -{26,0,-27}, -{26,0,-26}, -{26,0,-25}, -{26,0,-24}, -{26,0,-23}, -{26,0,-22}, -{26,0,-21}, -{26,0,-20}, -{26,0,-19}, -{26,0,-18}, -{26,0,-17}, -{26,0,-16}, -{26,0,-15}, -{26,0,-14}, -{26,0,-13}, -{26,0,-12}, -{26,0,-11}, -{26,0,-10}, -{26,0,-9}, -{26,0,-8}, -{26,0,-7}, -{26,0,-6}, -{26,0,-5}, -{26,0,-4}, -{26,0,-3}, -{26,0,-2}, -{26,0,-1}, -{26,0,0}, -{26,0,1}, -{26,0,2}, -{26,0,3}, -{26,0,4}, -{26,0,5}, -{26,0,6}, -{26,0,7}, -{26,0,8}, -{26,0,9}, -{26,0,10}, -{26,0,11}, -{26,0,12}, -{26,0,13}, -{26,0,14}, -{26,0,15}, -{26,0,16}, -{26,0,17}, -{26,0,18}, -{26,0,19}, -{26,0,20}, -{26,0,21}, -{26,0,22}, -{26,0,23}, -{26,0,24}, -{26,0,25}, -{26,0,26}, -{26,0,27}, -{26,0,28}, -{26,0,29}, -{26,0,30}, -{26,0,31}, -{26,0,32}, -{26,0,33}, -{26,0,34}, -{26,0,35}, -{26,1,-31}, -{26,1,-30}, -{26,1,-29}, -{26,1,-28}, -{26,1,-27}, -{26,1,-26}, -{26,1,-25}, -{26,1,-24}, -{26,1,-23}, -{26,1,-22}, -{26,1,-21}, -{26,1,-20}, -{26,1,-19}, -{26,1,-18}, -{26,1,-17}, -{26,1,-16}, -{26,1,-15}, -{26,1,-14}, -{26,1,-13}, -{26,1,-12}, -{26,1,-11}, -{26,1,-10}, -{26,1,-9}, -{26,1,-8}, -{26,1,-7}, -{26,1,-6}, -{26,1,-5}, -{26,1,-4}, -{26,1,-3}, -{26,1,-2}, -{26,1,-1}, -{26,1,0}, -{26,1,1}, -{26,1,2}, -{26,1,3}, -{26,1,4}, -{26,1,5}, -{26,1,6}, -{26,1,7}, -{26,1,8}, -{26,1,9}, -{26,1,10}, -{26,1,11}, -{26,1,12}, -{26,1,13}, -{26,1,14}, -{26,1,15}, -{26,1,16}, -{26,1,17}, -{26,1,18}, -{26,1,19}, -{26,1,20}, -{26,1,21}, -{26,1,22}, -{26,1,23}, -{26,1,24}, -{26,1,25}, -{26,1,26}, -{26,1,27}, -{26,1,28}, -{26,1,29}, -{26,1,30}, -{26,1,31}, -{26,1,32}, -{26,1,33}, -{26,1,34}, -{26,1,35}, -{26,2,-32}, -{26,2,-31}, -{26,2,-30}, -{26,2,-29}, -{26,2,-28}, -{26,2,-27}, -{26,2,-26}, -{26,2,-25}, -{26,2,-24}, -{26,2,-23}, -{26,2,-22}, -{26,2,-21}, -{26,2,-20}, -{26,2,-19}, -{26,2,-18}, -{26,2,-17}, -{26,2,-16}, -{26,2,-15}, -{26,2,-14}, -{26,2,-13}, -{26,2,-12}, -{26,2,-11}, -{26,2,-10}, -{26,2,-9}, -{26,2,-8}, -{26,2,-7}, -{26,2,-6}, -{26,2,-5}, -{26,2,-4}, -{26,2,-3}, -{26,2,-2}, -{26,2,-1}, -{26,2,0}, -{26,2,1}, -{26,2,2}, -{26,2,3}, -{26,2,4}, -{26,2,5}, -{26,2,6}, -{26,2,7}, -{26,2,8}, -{26,2,9}, -{26,2,10}, -{26,2,11}, -{26,2,12}, -{26,2,13}, -{26,2,14}, -{26,2,15}, -{26,2,16}, -{26,2,17}, -{26,2,18}, -{26,2,19}, -{26,2,20}, -{26,2,21}, -{26,2,22}, -{26,2,23}, -{26,2,24}, -{26,2,25}, -{26,2,26}, -{26,2,27}, -{26,2,28}, -{26,2,29}, -{26,2,30}, -{26,2,31}, -{26,2,32}, -{26,2,33}, -{26,2,34}, -{26,2,35}, -{26,3,-33}, -{26,3,-32}, -{26,3,-31}, -{26,3,-30}, -{26,3,-29}, -{26,3,-28}, -{26,3,-27}, -{26,3,-26}, -{26,3,-25}, -{26,3,-24}, -{26,3,-23}, -{26,3,-22}, -{26,3,-21}, -{26,3,-20}, -{26,3,-19}, -{26,3,-18}, -{26,3,-17}, -{26,3,-16}, -{26,3,-15}, -{26,3,-14}, -{26,3,-13}, -{26,3,-12}, -{26,3,-11}, -{26,3,-10}, -{26,3,-9}, -{26,3,-8}, -{26,3,-7}, -{26,3,-6}, -{26,3,-5}, -{26,3,-4}, -{26,3,-3}, -{26,3,-2}, -{26,3,-1}, -{26,3,0}, -{26,3,1}, -{26,3,2}, -{26,3,3}, -{26,3,4}, -{26,3,5}, -{26,3,6}, -{26,3,7}, -{26,3,8}, -{26,3,9}, -{26,3,10}, -{26,3,11}, -{26,3,12}, -{26,3,13}, -{26,3,14}, -{26,3,15}, -{26,3,16}, -{26,3,17}, -{26,3,18}, -{26,3,19}, -{26,3,20}, -{26,3,21}, -{26,3,22}, -{26,3,23}, -{26,3,24}, -{26,3,25}, -{26,3,26}, -{26,3,27}, -{26,3,28}, -{26,3,29}, -{26,3,30}, -{26,3,31}, -{26,3,32}, -{26,3,33}, -{26,3,34}, -{26,3,35}, -{26,4,-34}, -{26,4,-33}, -{26,4,-32}, -{26,4,-31}, -{26,4,-30}, -{26,4,-29}, -{26,4,-28}, -{26,4,-27}, -{26,4,-26}, -{26,4,-25}, -{26,4,-24}, -{26,4,-23}, -{26,4,-22}, -{26,4,-21}, -{26,4,-20}, -{26,4,-19}, -{26,4,-18}, -{26,4,-17}, -{26,4,-16}, -{26,4,-15}, -{26,4,-14}, -{26,4,-13}, -{26,4,-12}, -{26,4,-11}, -{26,4,-10}, -{26,4,-9}, -{26,4,-8}, -{26,4,-7}, -{26,4,-6}, -{26,4,-5}, -{26,4,-4}, -{26,4,-3}, -{26,4,-2}, -{26,4,-1}, -{26,4,0}, -{26,4,1}, -{26,4,2}, -{26,4,3}, -{26,4,4}, -{26,4,5}, -{26,4,6}, -{26,4,7}, -{26,4,8}, -{26,4,9}, -{26,4,10}, -{26,4,11}, -{26,4,12}, -{26,4,13}, -{26,4,14}, -{26,4,15}, -{26,4,16}, -{26,4,17}, -{26,4,18}, -{26,4,19}, -{26,4,20}, -{26,4,21}, -{26,4,22}, -{26,4,23}, -{26,4,24}, -{26,4,25}, -{26,4,26}, -{26,4,27}, -{26,4,28}, -{26,4,29}, -{26,4,30}, -{26,4,31}, -{26,4,32}, -{26,4,33}, -{26,4,34}, -{26,4,35}, -{26,5,-35}, -{26,5,-34}, -{26,5,-33}, -{26,5,-32}, -{26,5,-31}, -{26,5,-30}, -{26,5,-29}, -{26,5,-28}, -{26,5,-27}, -{26,5,-26}, -{26,5,-25}, -{26,5,-24}, -{26,5,-23}, -{26,5,-22}, -{26,5,-21}, -{26,5,-20}, -{26,5,-19}, -{26,5,-18}, -{26,5,-17}, -{26,5,-16}, -{26,5,-15}, -{26,5,-14}, -{26,5,-13}, -{26,5,-12}, -{26,5,-11}, -{26,5,-10}, -{26,5,-9}, -{26,5,-8}, -{26,5,-7}, -{26,5,-6}, -{26,5,-5}, -{26,5,-4}, -{26,5,-3}, -{26,5,-2}, -{26,5,-1}, -{26,5,0}, -{26,5,1}, -{26,5,2}, -{26,5,3}, -{26,5,4}, -{26,5,5}, -{26,5,6}, -{26,5,7}, -{26,5,8}, -{26,5,9}, -{26,5,10}, -{26,5,11}, -{26,5,12}, -{26,5,13}, -{26,5,14}, -{26,5,15}, -{26,5,16}, -{26,5,17}, -{26,5,18}, -{26,5,19}, -{26,5,20}, -{26,5,21}, -{26,5,22}, -{26,5,23}, -{26,5,24}, -{26,5,25}, -{26,5,26}, -{26,5,27}, -{26,5,28}, -{26,5,29}, -{26,5,30}, -{26,5,31}, -{26,5,32}, -{26,5,33}, -{26,5,34}, -{26,5,35}, -{26,6,-36}, -{26,6,-35}, -{26,6,-34}, -{26,6,-33}, -{26,6,-32}, -{26,6,-31}, -{26,6,-30}, -{26,6,-29}, -{26,6,-28}, -{26,6,-27}, -{26,6,-26}, -{26,6,-25}, -{26,6,-24}, -{26,6,-23}, -{26,6,-22}, -{26,6,-21}, -{26,6,-20}, -{26,6,-19}, -{26,6,-18}, -{26,6,-17}, -{26,6,-16}, -{26,6,-15}, -{26,6,-14}, -{26,6,-13}, -{26,6,-12}, -{26,6,-11}, -{26,6,-10}, -{26,6,-9}, -{26,6,-8}, -{26,6,-7}, -{26,6,-6}, -{26,6,-5}, -{26,6,-4}, -{26,6,-3}, -{26,6,-2}, -{26,6,-1}, -{26,6,0}, -{26,6,1}, -{26,6,2}, -{26,6,3}, -{26,6,4}, -{26,6,5}, -{26,6,6}, -{26,6,7}, -{26,6,8}, -{26,6,9}, -{26,6,10}, -{26,6,11}, -{26,6,12}, -{26,6,13}, -{26,6,14}, -{26,6,15}, -{26,6,16}, -{26,6,17}, -{26,6,18}, -{26,6,19}, -{26,6,20}, -{26,6,21}, -{26,6,22}, -{26,6,23}, -{26,6,24}, -{26,6,25}, -{26,6,26}, -{26,6,27}, -{26,6,28}, -{26,6,29}, -{26,6,30}, -{26,6,31}, -{26,6,32}, -{26,6,33}, -{26,6,34}, -{26,6,35}, -{26,7,-37}, -{26,7,-36}, -{26,7,-35}, -{26,7,-34}, -{26,7,-33}, -{26,7,-32}, -{26,7,-31}, -{26,7,-30}, -{26,7,-29}, -{26,7,-28}, -{26,7,-27}, -{26,7,-26}, -{26,7,-25}, -{26,7,-24}, -{26,7,-23}, -{26,7,-22}, -{26,7,-21}, -{26,7,-20}, -{26,7,-19}, -{26,7,-18}, -{26,7,-17}, -{26,7,-16}, -{26,7,-15}, -{26,7,-14}, -{26,7,-13}, -{26,7,-12}, -{26,7,-11}, -{26,7,-10}, -{26,7,-9}, -{26,7,-8}, -{26,7,-7}, -{26,7,-6}, -{26,7,-5}, -{26,7,-4}, -{26,7,-3}, -{26,7,-2}, -{26,7,-1}, -{26,7,0}, -{26,7,1}, -{26,7,2}, -{26,7,3}, -{26,7,4}, -{26,7,5}, -{26,7,6}, -{26,7,7}, -{26,7,8}, -{26,7,9}, -{26,7,10}, -{26,7,11}, -{26,7,12}, -{26,7,13}, -{26,7,14}, -{26,7,15}, -{26,7,16}, -{26,7,17}, -{26,7,18}, -{26,7,19}, -{26,7,20}, -{26,7,21}, -{26,7,22}, -{26,7,23}, -{26,7,24}, -{26,7,25}, -{26,7,26}, -{26,7,27}, -{26,7,28}, -{26,7,29}, -{26,7,30}, -{26,7,31}, -{26,7,32}, -{26,7,33}, -{26,7,34}, -{26,7,35}, -{26,8,-39}, -{26,8,-38}, -{26,8,-37}, -{26,8,-36}, -{26,8,-35}, -{26,8,-34}, -{26,8,-33}, -{26,8,-32}, -{26,8,-31}, -{26,8,-30}, -{26,8,-29}, -{26,8,-28}, -{26,8,-27}, -{26,8,-26}, -{26,8,-25}, -{26,8,-24}, -{26,8,-23}, -{26,8,-22}, -{26,8,-21}, -{26,8,-20}, -{26,8,-19}, -{26,8,-18}, -{26,8,-17}, -{26,8,-16}, -{26,8,-15}, -{26,8,-14}, -{26,8,-13}, -{26,8,-12}, -{26,8,-11}, -{26,8,-10}, -{26,8,-9}, -{26,8,-8}, -{26,8,-7}, -{26,8,-6}, -{26,8,-5}, -{26,8,-4}, -{26,8,-3}, -{26,8,-2}, -{26,8,-1}, -{26,8,0}, -{26,8,1}, -{26,8,2}, -{26,8,3}, -{26,8,4}, -{26,8,5}, -{26,8,6}, -{26,8,7}, -{26,8,8}, -{26,8,9}, -{26,8,10}, -{26,8,11}, -{26,8,12}, -{26,8,13}, -{26,8,14}, -{26,8,15}, -{26,8,16}, -{26,8,17}, -{26,8,18}, -{26,8,19}, -{26,8,20}, -{26,8,21}, -{26,8,22}, -{26,8,23}, -{26,8,24}, -{26,8,25}, -{26,8,26}, -{26,8,27}, -{26,8,28}, -{26,8,29}, -{26,8,30}, -{26,8,31}, -{26,8,32}, -{26,8,33}, -{26,8,34}, -{26,8,35}, -{26,9,-40}, -{26,9,-39}, -{26,9,-38}, -{26,9,-37}, -{26,9,-36}, -{26,9,-35}, -{26,9,-34}, -{26,9,-33}, -{26,9,-32}, -{26,9,-31}, -{26,9,-30}, -{26,9,-29}, -{26,9,-28}, -{26,9,-27}, -{26,9,-26}, -{26,9,-25}, -{26,9,-24}, -{26,9,-23}, -{26,9,-22}, -{26,9,-21}, -{26,9,-20}, -{26,9,-19}, -{26,9,-18}, -{26,9,-17}, -{26,9,-16}, -{26,9,-15}, -{26,9,-14}, -{26,9,-13}, -{26,9,-12}, -{26,9,-11}, -{26,9,-10}, -{26,9,-9}, -{26,9,-8}, -{26,9,-7}, -{26,9,-6}, -{26,9,-5}, -{26,9,-4}, -{26,9,-3}, -{26,9,-2}, -{26,9,-1}, -{26,9,0}, -{26,9,1}, -{26,9,2}, -{26,9,3}, -{26,9,4}, -{26,9,5}, -{26,9,6}, -{26,9,7}, -{26,9,8}, -{26,9,9}, -{26,9,10}, -{26,9,11}, -{26,9,12}, -{26,9,13}, -{26,9,14}, -{26,9,15}, -{26,9,16}, -{26,9,17}, -{26,9,18}, -{26,9,19}, -{26,9,20}, -{26,9,21}, -{26,9,22}, -{26,9,23}, -{26,9,24}, -{26,9,25}, -{26,9,26}, -{26,9,27}, -{26,9,28}, -{26,9,29}, -{26,9,30}, -{26,9,31}, -{26,9,32}, -{26,9,33}, -{26,9,34}, -{26,9,35}, -{26,10,-41}, -{26,10,-40}, -{26,10,-39}, -{26,10,-38}, -{26,10,-37}, -{26,10,-36}, -{26,10,-35}, -{26,10,-34}, -{26,10,-33}, -{26,10,-32}, -{26,10,-31}, -{26,10,-30}, -{26,10,-29}, -{26,10,-28}, -{26,10,-27}, -{26,10,-26}, -{26,10,-25}, -{26,10,-24}, -{26,10,-23}, -{26,10,-22}, -{26,10,-21}, -{26,10,-20}, -{26,10,-19}, -{26,10,-18}, -{26,10,-17}, -{26,10,-16}, -{26,10,-15}, -{26,10,-14}, -{26,10,-13}, -{26,10,-12}, -{26,10,-11}, -{26,10,-10}, -{26,10,-9}, -{26,10,-8}, -{26,10,-7}, -{26,10,-6}, -{26,10,-5}, -{26,10,-4}, -{26,10,-3}, -{26,10,-2}, -{26,10,-1}, -{26,10,0}, -{26,10,1}, -{26,10,2}, -{26,10,3}, -{26,10,4}, -{26,10,5}, -{26,10,6}, -{26,10,7}, -{26,10,8}, -{26,10,9}, -{26,10,10}, -{26,10,11}, -{26,10,12}, -{26,10,13}, -{26,10,14}, -{26,10,15}, -{26,10,16}, -{26,10,17}, -{26,10,18}, -{26,10,19}, -{26,10,20}, -{26,10,21}, -{26,10,22}, -{26,10,23}, -{26,10,24}, -{26,10,25}, -{26,10,26}, -{26,10,27}, -{26,10,28}, -{26,10,29}, -{26,10,30}, -{26,10,31}, -{26,10,32}, -{26,10,33}, -{26,10,34}, -{26,10,35}, -{26,11,-42}, -{26,11,-41}, -{26,11,-40}, -{26,11,-39}, -{26,11,-38}, -{26,11,-37}, -{26,11,-36}, -{26,11,-35}, -{26,11,-34}, -{26,11,-33}, -{26,11,-32}, -{26,11,-31}, -{26,11,-30}, -{26,11,-29}, -{26,11,-28}, -{26,11,-27}, -{26,11,-26}, -{26,11,-25}, -{26,11,-24}, -{26,11,-23}, -{26,11,-22}, -{26,11,-21}, -{26,11,-20}, -{26,11,-19}, -{26,11,-18}, -{26,11,-17}, -{26,11,-16}, -{26,11,-15}, -{26,11,-14}, -{26,11,-13}, -{26,11,-12}, -{26,11,-11}, -{26,11,-10}, -{26,11,-9}, -{26,11,-8}, -{26,11,-7}, -{26,11,-6}, -{26,11,-5}, -{26,11,-4}, -{26,11,-3}, -{26,11,-2}, -{26,11,-1}, -{26,11,0}, -{26,11,1}, -{26,11,2}, -{26,11,3}, -{26,11,4}, -{26,11,5}, -{26,11,6}, -{26,11,7}, -{26,11,8}, -{26,11,9}, -{26,11,10}, -{26,11,11}, -{26,11,12}, -{26,11,13}, -{26,11,14}, -{26,11,15}, -{26,11,16}, -{26,11,17}, -{26,11,18}, -{26,11,19}, -{26,11,20}, -{26,11,21}, -{26,11,22}, -{26,11,23}, -{26,11,24}, -{26,11,25}, -{26,11,26}, -{26,11,27}, -{26,11,28}, -{26,11,29}, -{26,11,30}, -{26,11,31}, -{26,11,32}, -{26,11,33}, -{26,11,34}, -{26,11,35}, -{26,12,-43}, -{26,12,-42}, -{26,12,-41}, -{26,12,-40}, -{26,12,-39}, -{26,12,-38}, -{26,12,-37}, -{26,12,-36}, -{26,12,-35}, -{26,12,-34}, -{26,12,-33}, -{26,12,-32}, -{26,12,-31}, -{26,12,-30}, -{26,12,-29}, -{26,12,-28}, -{26,12,-27}, -{26,12,-26}, -{26,12,-25}, -{26,12,-24}, -{26,12,-23}, -{26,12,-22}, -{26,12,-21}, -{26,12,-20}, -{26,12,-19}, -{26,12,-18}, -{26,12,-17}, -{26,12,-16}, -{26,12,-15}, -{26,12,-14}, -{26,12,-13}, -{26,12,-12}, -{26,12,-11}, -{26,12,-10}, -{26,12,-9}, -{26,12,-8}, -{26,12,-7}, -{26,12,-6}, -{26,12,-5}, -{26,12,-4}, -{26,12,-3}, -{26,12,-2}, -{26,12,-1}, -{26,12,0}, -{26,12,1}, -{26,12,2}, -{26,12,3}, -{26,12,4}, -{26,12,5}, -{26,12,6}, -{26,12,7}, -{26,12,8}, -{26,12,9}, -{26,12,10}, -{26,12,11}, -{26,12,12}, -{26,12,13}, -{26,12,14}, -{26,12,15}, -{26,12,16}, -{26,12,17}, -{26,12,18}, -{26,12,19}, -{26,12,20}, -{26,12,21}, -{26,12,22}, -{26,12,23}, -{26,12,24}, -{26,12,25}, -{26,12,26}, -{26,12,27}, -{26,12,28}, -{26,12,29}, -{26,12,30}, -{26,12,31}, -{26,12,32}, -{26,12,33}, -{26,12,34}, -{26,12,35}, -{26,12,36}, -{26,13,-44}, -{26,13,-43}, -{26,13,-42}, -{26,13,-41}, -{26,13,-40}, -{26,13,-39}, -{26,13,-38}, -{26,13,-37}, -{26,13,-36}, -{26,13,-35}, -{26,13,-34}, -{26,13,-33}, -{26,13,-32}, -{26,13,-31}, -{26,13,-30}, -{26,13,-29}, -{26,13,-28}, -{26,13,-27}, -{26,13,-26}, -{26,13,-25}, -{26,13,-24}, -{26,13,-23}, -{26,13,-22}, -{26,13,-21}, -{26,13,-20}, -{26,13,-19}, -{26,13,-18}, -{26,13,-17}, -{26,13,-16}, -{26,13,-15}, -{26,13,-14}, -{26,13,-13}, -{26,13,-12}, -{26,13,-11}, -{26,13,-10}, -{26,13,-9}, -{26,13,-8}, -{26,13,-7}, -{26,13,-6}, -{26,13,-5}, -{26,13,-4}, -{26,13,-3}, -{26,13,-2}, -{26,13,-1}, -{26,13,0}, -{26,13,1}, -{26,13,2}, -{26,13,3}, -{26,13,4}, -{26,13,5}, -{26,13,6}, -{26,13,7}, -{26,13,8}, -{26,13,9}, -{26,13,10}, -{26,13,11}, -{26,13,12}, -{26,13,13}, -{26,13,14}, -{26,13,15}, -{26,13,16}, -{26,13,17}, -{26,13,18}, -{26,13,19}, -{26,13,20}, -{26,13,21}, -{26,13,22}, -{26,13,23}, -{26,13,24}, -{26,13,25}, -{26,13,26}, -{26,13,27}, -{26,13,28}, -{26,13,29}, -{26,13,30}, -{26,13,31}, -{26,13,32}, -{26,13,33}, -{26,13,34}, -{26,13,35}, -{26,13,36}, -{26,14,-45}, -{26,14,-44}, -{26,14,-43}, -{26,14,-42}, -{26,14,-41}, -{26,14,-40}, -{26,14,-39}, -{26,14,-38}, -{26,14,-37}, -{26,14,-36}, -{26,14,-35}, -{26,14,-34}, -{26,14,-33}, -{26,14,-32}, -{26,14,-31}, -{26,14,-30}, -{26,14,-29}, -{26,14,-28}, -{26,14,-27}, -{26,14,-26}, -{26,14,-25}, -{26,14,-24}, -{26,14,-23}, -{26,14,-22}, -{26,14,-21}, -{26,14,-20}, -{26,14,-19}, -{26,14,-18}, -{26,14,-17}, -{26,14,-16}, -{26,14,-15}, -{26,14,-14}, -{26,14,-13}, -{26,14,-12}, -{26,14,-11}, -{26,14,-10}, -{26,14,-9}, -{26,14,-8}, -{26,14,-7}, -{26,14,-6}, -{26,14,-5}, -{26,14,-4}, -{26,14,-3}, -{26,14,-2}, -{26,14,-1}, -{26,14,0}, -{26,14,1}, -{26,14,2}, -{26,14,3}, -{26,14,4}, -{26,14,5}, -{26,14,6}, -{26,14,7}, -{26,14,8}, -{26,14,9}, -{26,14,10}, -{26,14,11}, -{26,14,12}, -{26,14,13}, -{26,14,14}, -{26,14,15}, -{26,14,16}, -{26,14,17}, -{26,14,18}, -{26,14,19}, -{26,14,20}, -{26,14,21}, -{26,14,22}, -{26,14,23}, -{26,14,24}, -{26,14,25}, -{26,14,26}, -{26,14,27}, -{26,14,28}, -{26,14,29}, -{26,14,30}, -{26,14,31}, -{26,14,32}, -{26,14,33}, -{26,14,34}, -{26,14,35}, -{26,14,36}, -{26,15,-46}, -{26,15,-45}, -{26,15,-44}, -{26,15,-43}, -{26,15,-42}, -{26,15,-41}, -{26,15,-40}, -{26,15,-39}, -{26,15,-38}, -{26,15,-37}, -{26,15,-36}, -{26,15,-35}, -{26,15,-34}, -{26,15,-33}, -{26,15,-32}, -{26,15,-31}, -{26,15,-30}, -{26,15,-29}, -{26,15,-28}, -{26,15,-27}, -{26,15,-26}, -{26,15,-25}, -{26,15,-24}, -{26,15,-23}, -{26,15,-22}, -{26,15,-21}, -{26,15,-20}, -{26,15,-19}, -{26,15,-18}, -{26,15,-17}, -{26,15,-16}, -{26,15,-15}, -{26,15,-14}, -{26,15,-13}, -{26,15,-12}, -{26,15,-11}, -{26,15,-10}, -{26,15,-9}, -{26,15,-8}, -{26,15,-7}, -{26,15,-6}, -{26,15,-5}, -{26,15,-4}, -{26,15,-3}, -{26,15,-2}, -{26,15,-1}, -{26,15,0}, -{26,15,1}, -{26,15,2}, -{26,15,3}, -{26,15,4}, -{26,15,5}, -{26,15,6}, -{26,15,7}, -{26,15,8}, -{26,15,9}, -{26,15,10}, -{26,15,11}, -{26,15,12}, -{26,15,13}, -{26,15,14}, -{26,15,15}, -{26,15,16}, -{26,15,17}, -{26,15,18}, -{26,15,19}, -{26,15,20}, -{26,15,21}, -{26,15,22}, -{26,15,23}, -{26,15,24}, -{26,15,25}, -{26,15,26}, -{26,15,27}, -{26,15,28}, -{26,15,29}, -{26,15,30}, -{26,15,31}, -{26,15,32}, -{26,15,33}, -{26,15,34}, -{26,15,35}, -{26,15,36}, -{26,16,-47}, -{26,16,-46}, -{26,16,-45}, -{26,16,-44}, -{26,16,-43}, -{26,16,-42}, -{26,16,-41}, -{26,16,-40}, -{26,16,-39}, -{26,16,-38}, -{26,16,-37}, -{26,16,-36}, -{26,16,-35}, -{26,16,-34}, -{26,16,-33}, -{26,16,-32}, -{26,16,-31}, -{26,16,-30}, -{26,16,-29}, -{26,16,-28}, -{26,16,-27}, -{26,16,-26}, -{26,16,-25}, -{26,16,-24}, -{26,16,-23}, -{26,16,-22}, -{26,16,-21}, -{26,16,-20}, -{26,16,-19}, -{26,16,-18}, -{26,16,-17}, -{26,16,-16}, -{26,16,-15}, -{26,16,-14}, -{26,16,-13}, -{26,16,-12}, -{26,16,-11}, -{26,16,-10}, -{26,16,-9}, -{26,16,-8}, -{26,16,-7}, -{26,16,-6}, -{26,16,-5}, -{26,16,-4}, -{26,16,-3}, -{26,16,-2}, -{26,16,-1}, -{26,16,0}, -{26,16,1}, -{26,16,2}, -{26,16,3}, -{26,16,4}, -{26,16,5}, -{26,16,6}, -{26,16,7}, -{26,16,8}, -{26,16,9}, -{26,16,10}, -{26,16,11}, -{26,16,12}, -{26,16,13}, -{26,16,14}, -{26,16,15}, -{26,16,16}, -{26,16,17}, -{26,16,18}, -{26,16,19}, -{26,16,20}, -{26,16,21}, -{26,16,22}, -{26,16,23}, -{26,16,24}, -{26,16,25}, -{26,16,26}, -{26,16,27}, -{26,16,28}, -{26,16,29}, -{26,16,30}, -{26,16,31}, -{26,16,32}, -{26,16,33}, -{26,16,34}, -{26,16,35}, -{26,16,36}, -{26,17,-48}, -{26,17,-47}, -{26,17,-46}, -{26,17,-45}, -{26,17,-44}, -{26,17,-43}, -{26,17,-42}, -{26,17,-41}, -{26,17,-40}, -{26,17,-39}, -{26,17,-38}, -{26,17,-37}, -{26,17,-36}, -{26,17,-35}, -{26,17,-34}, -{26,17,-33}, -{26,17,-32}, -{26,17,-31}, -{26,17,-30}, -{26,17,-29}, -{26,17,-28}, -{26,17,-27}, -{26,17,-26}, -{26,17,-25}, -{26,17,-24}, -{26,17,-23}, -{26,17,-22}, -{26,17,-21}, -{26,17,-20}, -{26,17,-19}, -{26,17,-18}, -{26,17,-17}, -{26,17,-16}, -{26,17,-15}, -{26,17,-14}, -{26,17,-13}, -{26,17,-12}, -{26,17,-11}, -{26,17,-10}, -{26,17,-9}, -{26,17,-8}, -{26,17,-7}, -{26,17,-6}, -{26,17,-5}, -{26,17,-4}, -{26,17,-3}, -{26,17,-2}, -{26,17,-1}, -{26,17,0}, -{26,17,1}, -{26,17,2}, -{26,17,3}, -{26,17,4}, -{26,17,5}, -{26,17,6}, -{26,17,7}, -{26,17,8}, -{26,17,9}, -{26,17,10}, -{26,17,11}, -{26,17,12}, -{26,17,13}, -{26,17,14}, -{26,17,15}, -{26,17,16}, -{26,17,17}, -{26,17,18}, -{26,17,19}, -{26,17,20}, -{26,17,21}, -{26,17,22}, -{26,17,23}, -{26,17,24}, -{26,17,25}, -{26,17,26}, -{26,17,27}, -{26,17,28}, -{26,17,29}, -{26,17,30}, -{26,17,31}, -{26,17,32}, -{26,17,33}, -{26,17,34}, -{26,17,35}, -{26,17,36}, -{26,18,-49}, -{26,18,-48}, -{26,18,-47}, -{26,18,-46}, -{26,18,-45}, -{26,18,-44}, -{26,18,-43}, -{26,18,-42}, -{26,18,-41}, -{26,18,-40}, -{26,18,-39}, -{26,18,-38}, -{26,18,-37}, -{26,18,-36}, -{26,18,-35}, -{26,18,-34}, -{26,18,-33}, -{26,18,-32}, -{26,18,-31}, -{26,18,-30}, -{26,18,-29}, -{26,18,-28}, -{26,18,-27}, -{26,18,-26}, -{26,18,-25}, -{26,18,-24}, -{26,18,-23}, -{26,18,-22}, -{26,18,-21}, -{26,18,-20}, -{26,18,-19}, -{26,18,-18}, -{26,18,-17}, -{26,18,-16}, -{26,18,-15}, -{26,18,-14}, -{26,18,-13}, -{26,18,-12}, -{26,18,-11}, -{26,18,-10}, -{26,18,-9}, -{26,18,-8}, -{26,18,-7}, -{26,18,-6}, -{26,18,-5}, -{26,18,-4}, -{26,18,-3}, -{26,18,-2}, -{26,18,-1}, -{26,18,0}, -{26,18,1}, -{26,18,2}, -{26,18,3}, -{26,18,4}, -{26,18,5}, -{26,18,6}, -{26,18,7}, -{26,18,8}, -{26,18,9}, -{26,18,10}, -{26,18,11}, -{26,18,12}, -{26,18,13}, -{26,18,14}, -{26,18,15}, -{26,18,16}, -{26,18,17}, -{26,18,18}, -{26,18,19}, -{26,18,20}, -{26,18,21}, -{26,18,22}, -{26,18,23}, -{26,18,24}, -{26,18,25}, -{26,18,26}, -{26,18,27}, -{26,18,28}, -{26,18,29}, -{26,18,30}, -{26,18,31}, -{26,18,32}, -{26,18,33}, -{26,18,34}, -{26,18,35}, -{26,18,36}, -{26,19,-50}, -{26,19,-49}, -{26,19,-48}, -{26,19,-47}, -{26,19,-46}, -{26,19,-45}, -{26,19,-44}, -{26,19,-43}, -{26,19,-42}, -{26,19,-41}, -{26,19,-40}, -{26,19,-39}, -{26,19,-38}, -{26,19,-37}, -{26,19,-36}, -{26,19,-35}, -{26,19,-34}, -{26,19,-33}, -{26,19,-32}, -{26,19,-31}, -{26,19,-30}, -{26,19,-29}, -{26,19,-28}, -{26,19,-27}, -{26,19,-26}, -{26,19,-25}, -{26,19,-24}, -{26,19,-23}, -{26,19,-22}, -{26,19,-21}, -{26,19,-20}, -{26,19,-19}, -{26,19,-18}, -{26,19,-17}, -{26,19,-16}, -{26,19,-15}, -{26,19,-14}, -{26,19,-13}, -{26,19,-12}, -{26,19,-11}, -{26,19,-10}, -{26,19,-9}, -{26,19,-8}, -{26,19,-7}, -{26,19,-6}, -{26,19,-5}, -{26,19,-4}, -{26,19,-3}, -{26,19,-2}, -{26,19,-1}, -{26,19,0}, -{26,19,1}, -{26,19,2}, -{26,19,3}, -{26,19,4}, -{26,19,5}, -{26,19,6}, -{26,19,7}, -{26,19,8}, -{26,19,9}, -{26,19,10}, -{26,19,11}, -{26,19,12}, -{26,19,13}, -{26,19,14}, -{26,19,15}, -{26,19,16}, -{26,19,17}, -{26,19,18}, -{26,19,19}, -{26,19,20}, -{26,19,21}, -{26,19,22}, -{26,19,23}, -{26,19,24}, -{26,19,25}, -{26,19,26}, -{26,19,27}, -{26,19,28}, -{26,19,29}, -{26,19,30}, -{26,19,31}, -{26,19,32}, -{26,19,33}, -{26,19,34}, -{26,19,35}, -{26,19,36}, -{26,20,-51}, -{26,20,-50}, -{26,20,-49}, -{26,20,-48}, -{26,20,-47}, -{26,20,-46}, -{26,20,-45}, -{26,20,-44}, -{26,20,-43}, -{26,20,-42}, -{26,20,-41}, -{26,20,-40}, -{26,20,-39}, -{26,20,-38}, -{26,20,-37}, -{26,20,-36}, -{26,20,-35}, -{26,20,-34}, -{26,20,-33}, -{26,20,-32}, -{26,20,-31}, -{26,20,-30}, -{26,20,-29}, -{26,20,-28}, -{26,20,-27}, -{26,20,-26}, -{26,20,-25}, -{26,20,-24}, -{26,20,-23}, -{26,20,-22}, -{26,20,-21}, -{26,20,-20}, -{26,20,-19}, -{26,20,-18}, -{26,20,-17}, -{26,20,-16}, -{26,20,-15}, -{26,20,-14}, -{26,20,-13}, -{26,20,-12}, -{26,20,-11}, -{26,20,-10}, -{26,20,-9}, -{26,20,-8}, -{26,20,-7}, -{26,20,-6}, -{26,20,-5}, -{26,20,-4}, -{26,20,-3}, -{26,20,-2}, -{26,20,-1}, -{26,20,0}, -{26,20,1}, -{26,20,2}, -{26,20,3}, -{26,20,4}, -{26,20,5}, -{26,20,6}, -{26,20,7}, -{26,20,8}, -{26,20,9}, -{26,20,10}, -{26,20,11}, -{26,20,12}, -{26,20,13}, -{26,20,14}, -{26,20,15}, -{26,20,16}, -{26,20,17}, -{26,20,18}, -{26,20,19}, -{26,20,20}, -{26,20,21}, -{26,20,22}, -{26,20,23}, -{26,20,24}, -{26,20,25}, -{26,20,26}, -{26,20,27}, -{26,20,28}, -{26,20,29}, -{26,20,30}, -{26,20,31}, -{26,20,32}, -{26,20,33}, -{26,20,34}, -{26,20,35}, -{26,20,36}, -{26,21,-52}, -{26,21,-51}, -{26,21,-50}, -{26,21,-49}, -{26,21,-48}, -{26,21,-47}, -{26,21,-46}, -{26,21,-45}, -{26,21,-44}, -{26,21,-43}, -{26,21,-42}, -{26,21,-41}, -{26,21,-40}, -{26,21,-39}, -{26,21,-38}, -{26,21,-37}, -{26,21,-36}, -{26,21,-35}, -{26,21,-34}, -{26,21,-33}, -{26,21,-32}, -{26,21,-31}, -{26,21,-30}, -{26,21,-29}, -{26,21,-28}, -{26,21,-27}, -{26,21,-26}, -{26,21,-25}, -{26,21,-24}, -{26,21,-23}, -{26,21,-22}, -{26,21,-21}, -{26,21,-20}, -{26,21,-19}, -{26,21,-18}, -{26,21,-17}, -{26,21,-16}, -{26,21,-15}, -{26,21,-14}, -{26,21,-13}, -{26,21,-12}, -{26,21,-11}, -{26,21,-10}, -{26,21,-9}, -{26,21,-8}, -{26,21,-7}, -{26,21,-6}, -{26,21,-5}, -{26,21,-4}, -{26,21,-3}, -{26,21,-2}, -{26,21,-1}, -{26,21,0}, -{26,21,1}, -{26,21,2}, -{26,21,3}, -{26,21,4}, -{26,21,5}, -{26,21,6}, -{26,21,7}, -{26,21,8}, -{26,21,9}, -{26,21,10}, -{26,21,11}, -{26,21,12}, -{26,21,13}, -{26,21,14}, -{26,21,15}, -{26,21,16}, -{26,21,17}, -{26,21,18}, -{26,21,19}, -{26,21,20}, -{26,21,21}, -{26,21,22}, -{26,21,23}, -{26,21,24}, -{26,21,25}, -{26,21,26}, -{26,21,27}, -{26,21,28}, -{26,21,29}, -{26,21,30}, -{26,21,31}, -{26,21,32}, -{26,21,33}, -{26,21,34}, -{26,21,35}, -{26,21,36}, -{26,22,-52}, -{26,22,-51}, -{26,22,-50}, -{26,22,-49}, -{26,22,-48}, -{26,22,-47}, -{26,22,-46}, -{26,22,-45}, -{26,22,-44}, -{26,22,-43}, -{26,22,-42}, -{26,22,-41}, -{26,22,-40}, -{26,22,-39}, -{26,22,-38}, -{26,22,-37}, -{26,22,-36}, -{26,22,-35}, -{26,22,-34}, -{26,22,-33}, -{26,22,-32}, -{26,22,-31}, -{26,22,-30}, -{26,22,-29}, -{26,22,-28}, -{26,22,-27}, -{26,22,-26}, -{26,22,-25}, -{26,22,-24}, -{26,22,-23}, -{26,22,-22}, -{26,22,-21}, -{26,22,-20}, -{26,22,-19}, -{26,22,-18}, -{26,22,-17}, -{26,22,-16}, -{26,22,-15}, -{26,22,-14}, -{26,22,-13}, -{26,22,-12}, -{26,22,-11}, -{26,22,-10}, -{26,22,-9}, -{26,22,-8}, -{26,22,-7}, -{26,22,-6}, -{26,22,-5}, -{26,22,-4}, -{26,22,-3}, -{26,22,-2}, -{26,22,-1}, -{26,22,0}, -{26,22,1}, -{26,22,2}, -{26,22,3}, -{26,22,4}, -{26,22,5}, -{26,22,6}, -{26,22,7}, -{26,22,8}, -{26,22,9}, -{26,22,10}, -{26,22,11}, -{26,22,12}, -{26,22,13}, -{26,22,14}, -{26,22,15}, -{26,22,16}, -{26,22,17}, -{26,22,18}, -{26,22,19}, -{26,22,20}, -{26,22,21}, -{26,22,22}, -{26,22,23}, -{26,22,24}, -{26,22,25}, -{26,22,26}, -{26,22,27}, -{26,22,28}, -{26,22,29}, -{26,22,30}, -{26,22,31}, -{26,22,32}, -{26,22,33}, -{26,22,34}, -{26,22,35}, -{26,22,36}, -{26,23,-53}, -{26,23,-52}, -{26,23,-51}, -{26,23,-50}, -{26,23,-49}, -{26,23,-48}, -{26,23,-47}, -{26,23,-46}, -{26,23,-45}, -{26,23,-44}, -{26,23,-43}, -{26,23,-42}, -{26,23,-41}, -{26,23,-40}, -{26,23,-39}, -{26,23,-38}, -{26,23,-37}, -{26,23,-36}, -{26,23,-35}, -{26,23,-34}, -{26,23,-33}, -{26,23,-32}, -{26,23,-31}, -{26,23,-30}, -{26,23,-29}, -{26,23,-28}, -{26,23,-27}, -{26,23,-26}, -{26,23,-25}, -{26,23,-24}, -{26,23,-23}, -{26,23,-22}, -{26,23,-21}, -{26,23,-20}, -{26,23,-19}, -{26,23,-18}, -{26,23,-17}, -{26,23,-16}, -{26,23,-15}, -{26,23,-14}, -{26,23,-13}, -{26,23,-12}, -{26,23,-11}, -{26,23,-10}, -{26,23,-9}, -{26,23,-8}, -{26,23,-7}, -{26,23,-6}, -{26,23,-5}, -{26,23,-4}, -{26,23,-3}, -{26,23,-2}, -{26,23,-1}, -{26,23,0}, -{26,23,1}, -{26,23,2}, -{26,23,3}, -{26,23,4}, -{26,23,5}, -{26,23,6}, -{26,23,7}, -{26,23,8}, -{26,23,9}, -{26,23,10}, -{26,23,11}, -{26,23,12}, -{26,23,13}, -{26,23,14}, -{26,23,15}, -{26,23,16}, -{26,23,17}, -{26,23,18}, -{26,23,19}, -{26,23,20}, -{26,23,21}, -{26,23,22}, -{26,23,23}, -{26,23,24}, -{26,23,25}, -{26,23,26}, -{26,23,27}, -{26,23,28}, -{26,23,29}, -{26,23,30}, -{26,23,31}, -{26,23,32}, -{26,23,33}, -{26,23,34}, -{26,23,35}, -{26,23,36}, -{26,24,-54}, -{26,24,-53}, -{26,24,-52}, -{26,24,-51}, -{26,24,-50}, -{26,24,-49}, -{26,24,-48}, -{26,24,-47}, -{26,24,-46}, -{26,24,-45}, -{26,24,-44}, -{26,24,-43}, -{26,24,-42}, -{26,24,-41}, -{26,24,-40}, -{26,24,-39}, -{26,24,-38}, -{26,24,-37}, -{26,24,-36}, -{26,24,-35}, -{26,24,-34}, -{26,24,-33}, -{26,24,-32}, -{26,24,-31}, -{26,24,-30}, -{26,24,-29}, -{26,24,-28}, -{26,24,-27}, -{26,24,-26}, -{26,24,-25}, -{26,24,-24}, -{26,24,-23}, -{26,24,-22}, -{26,24,-21}, -{26,24,-20}, -{26,24,-19}, -{26,24,-18}, -{26,24,-17}, -{26,24,-16}, -{26,24,-15}, -{26,24,-14}, -{26,24,-13}, -{26,24,-12}, -{26,24,-11}, -{26,24,-10}, -{26,24,-9}, -{26,24,-8}, -{26,24,-7}, -{26,24,-6}, -{26,24,-5}, -{26,24,-4}, -{26,24,-3}, -{26,24,-2}, -{26,24,-1}, -{26,24,0}, -{26,24,1}, -{26,24,2}, -{26,24,3}, -{26,24,4}, -{26,24,5}, -{26,24,6}, -{26,24,7}, -{26,24,8}, -{26,24,9}, -{26,24,10}, -{26,24,11}, -{26,24,12}, -{26,24,13}, -{26,24,14}, -{26,24,15}, -{26,24,16}, -{26,24,17}, -{26,24,18}, -{26,24,19}, -{26,24,20}, -{26,24,21}, -{26,24,22}, -{26,24,23}, -{26,24,24}, -{26,24,25}, -{26,24,26}, -{26,24,27}, -{26,24,28}, -{26,24,29}, -{26,24,30}, -{26,24,31}, -{26,24,32}, -{26,24,33}, -{26,24,34}, -{26,24,35}, -{26,24,36}, -{26,25,-55}, -{26,25,-54}, -{26,25,-53}, -{26,25,-52}, -{26,25,-51}, -{26,25,-50}, -{26,25,-49}, -{26,25,-48}, -{26,25,-47}, -{26,25,-46}, -{26,25,-45}, -{26,25,-44}, -{26,25,-43}, -{26,25,-42}, -{26,25,-41}, -{26,25,-40}, -{26,25,-39}, -{26,25,-38}, -{26,25,-37}, -{26,25,-36}, -{26,25,-35}, -{26,25,-34}, -{26,25,-33}, -{26,25,-32}, -{26,25,-31}, -{26,25,-30}, -{26,25,-29}, -{26,25,-28}, -{26,25,-27}, -{26,25,-26}, -{26,25,-25}, -{26,25,-24}, -{26,25,-23}, -{26,25,-22}, -{26,25,-21}, -{26,25,-20}, -{26,25,-19}, -{26,25,-18}, -{26,25,-17}, -{26,25,-16}, -{26,25,-15}, -{26,25,-14}, -{26,25,-13}, -{26,25,-12}, -{26,25,-11}, -{26,25,-10}, -{26,25,-9}, -{26,25,-8}, -{26,25,-7}, -{26,25,-6}, -{26,25,-5}, -{26,25,-4}, -{26,25,-3}, -{26,25,-2}, -{26,25,-1}, -{26,25,0}, -{26,25,1}, -{26,25,2}, -{26,25,3}, -{26,25,4}, -{26,25,5}, -{26,25,6}, -{26,25,7}, -{26,25,8}, -{26,25,9}, -{26,25,10}, -{26,25,11}, -{26,25,12}, -{26,25,13}, -{26,25,14}, -{26,25,15}, -{26,25,16}, -{26,25,17}, -{26,25,18}, -{26,25,19}, -{26,25,20}, -{26,25,21}, -{26,25,22}, -{26,25,23}, -{26,25,24}, -{26,25,25}, -{26,25,26}, -{26,25,27}, -{26,25,28}, -{26,25,29}, -{26,25,30}, -{26,25,31}, -{26,25,32}, -{26,25,33}, -{26,25,34}, -{26,25,35}, -{26,25,36}, -{26,26,-56}, -{26,26,-55}, -{26,26,-54}, -{26,26,-53}, -{26,26,-52}, -{26,26,-51}, -{26,26,-50}, -{26,26,-49}, -{26,26,-48}, -{26,26,-47}, -{26,26,-46}, -{26,26,-45}, -{26,26,-44}, -{26,26,-43}, -{26,26,-42}, -{26,26,-41}, -{26,26,-40}, -{26,26,-39}, -{26,26,-38}, -{26,26,-37}, -{26,26,-36}, -{26,26,-35}, -{26,26,-34}, -{26,26,-33}, -{26,26,-32}, -{26,26,-31}, -{26,26,-30}, -{26,26,-29}, -{26,26,-28}, -{26,26,-27}, -{26,26,-26}, -{26,26,-25}, -{26,26,-24}, -{26,26,-23}, -{26,26,-22}, -{26,26,-21}, -{26,26,-20}, -{26,26,-19}, -{26,26,-18}, -{26,26,-17}, -{26,26,-16}, -{26,26,-15}, -{26,26,-14}, -{26,26,-13}, -{26,26,-12}, -{26,26,-11}, -{26,26,-10}, -{26,26,-9}, -{26,26,-8}, -{26,26,-7}, -{26,26,-6}, -{26,26,-5}, -{26,26,-4}, -{26,26,-3}, -{26,26,-2}, -{26,26,-1}, -{26,26,0}, -{26,26,1}, -{26,26,2}, -{26,26,3}, -{26,26,4}, -{26,26,5}, -{26,26,6}, -{26,26,7}, -{26,26,8}, -{26,26,9}, -{26,26,10}, -{26,26,11}, -{26,26,12}, -{26,26,13}, -{26,26,14}, -{26,26,15}, -{26,26,16}, -{26,26,17}, -{26,26,18}, -{26,26,19}, -{26,26,20}, -{26,26,21}, -{26,26,22}, -{26,26,23}, -{26,26,24}, -{26,26,25}, -{26,26,26}, -{26,26,27}, -{26,26,28}, -{26,26,29}, -{26,26,30}, -{26,26,31}, -{26,26,32}, -{26,26,33}, -{26,26,34}, -{26,26,35}, -{26,26,36}, -{26,26,37}, -{26,27,-57}, -{26,27,-56}, -{26,27,-55}, -{26,27,-54}, -{26,27,-53}, -{26,27,-52}, -{26,27,-51}, -{26,27,-50}, -{26,27,-49}, -{26,27,-48}, -{26,27,-47}, -{26,27,-46}, -{26,27,-45}, -{26,27,-44}, -{26,27,-43}, -{26,27,-42}, -{26,27,-41}, -{26,27,-40}, -{26,27,-39}, -{26,27,-38}, -{26,27,-37}, -{26,27,-36}, -{26,27,-35}, -{26,27,-34}, -{26,27,-33}, -{26,27,-32}, -{26,27,-31}, -{26,27,-30}, -{26,27,-29}, -{26,27,-28}, -{26,27,-27}, -{26,27,-26}, -{26,27,-25}, -{26,27,-24}, -{26,27,-23}, -{26,27,-22}, -{26,27,-21}, -{26,27,-20}, -{26,27,-19}, -{26,27,-18}, -{26,27,-17}, -{26,27,-16}, -{26,27,-15}, -{26,27,-14}, -{26,27,-13}, -{26,27,-12}, -{26,27,-11}, -{26,27,-10}, -{26,27,-9}, -{26,27,-8}, -{26,27,-7}, -{26,27,-6}, -{26,27,-5}, -{26,27,-4}, -{26,27,-3}, -{26,27,-2}, -{26,27,-1}, -{26,27,0}, -{26,27,1}, -{26,27,2}, -{26,27,3}, -{26,27,4}, -{26,27,5}, -{26,27,6}, -{26,27,7}, -{26,27,8}, -{26,27,9}, -{26,27,10}, -{26,27,11}, -{26,27,12}, -{26,27,13}, -{26,27,14}, -{26,27,15}, -{26,27,16}, -{26,27,17}, -{26,27,18}, -{26,27,19}, -{26,27,20}, -{26,27,21}, -{26,27,22}, -{26,27,23}, -{26,27,24}, -{26,27,25}, -{26,27,26}, -{26,27,27}, -{26,27,28}, -{26,27,29}, -{26,27,30}, -{26,27,31}, -{26,27,32}, -{26,27,33}, -{26,27,34}, -{26,27,35}, -{26,27,36}, -{26,27,37}, -{26,28,-58}, -{26,28,-57}, -{26,28,-56}, -{26,28,-55}, -{26,28,-54}, -{26,28,-53}, -{26,28,-52}, -{26,28,-51}, -{26,28,-50}, -{26,28,-49}, -{26,28,-48}, -{26,28,-47}, -{26,28,-46}, -{26,28,-45}, -{26,28,-44}, -{26,28,-43}, -{26,28,-42}, -{26,28,-41}, -{26,28,-40}, -{26,28,-39}, -{26,28,-38}, -{26,28,-37}, -{26,28,-36}, -{26,28,-35}, -{26,28,-34}, -{26,28,-33}, -{26,28,-32}, -{26,28,-31}, -{26,28,-30}, -{26,28,-29}, -{26,28,-28}, -{26,28,-27}, -{26,28,-26}, -{26,28,-25}, -{26,28,-24}, -{26,28,-23}, -{26,28,-22}, -{26,28,-21}, -{26,28,-20}, -{26,28,-19}, -{26,28,-18}, -{26,28,-17}, -{26,28,-16}, -{26,28,-15}, -{26,28,-14}, -{26,28,-13}, -{26,28,-12}, -{26,28,-11}, -{26,28,-10}, -{26,28,-9}, -{26,28,-8}, -{26,28,-7}, -{26,28,-6}, -{26,28,-5}, -{26,28,-4}, -{26,28,-3}, -{26,28,-2}, -{26,28,-1}, -{26,28,0}, -{26,28,1}, -{26,28,2}, -{26,28,3}, -{26,28,4}, -{26,28,5}, -{26,28,6}, -{26,28,7}, -{26,28,8}, -{26,28,9}, -{26,28,10}, -{26,28,11}, -{26,28,12}, -{26,28,13}, -{26,28,14}, -{26,28,15}, -{26,28,16}, -{26,28,17}, -{26,28,18}, -{26,28,19}, -{26,28,20}, -{26,28,21}, -{26,28,22}, -{26,28,23}, -{26,28,24}, -{26,28,25}, -{26,28,26}, -{26,28,27}, -{26,28,28}, -{26,28,29}, -{26,28,30}, -{26,28,31}, -{26,28,32}, -{26,28,33}, -{26,28,34}, -{26,28,35}, -{26,28,36}, -{26,28,37}, -{26,29,-59}, -{26,29,-58}, -{26,29,-57}, -{26,29,-56}, -{26,29,-55}, -{26,29,-54}, -{26,29,-53}, -{26,29,-52}, -{26,29,-51}, -{26,29,-50}, -{26,29,-49}, -{26,29,-48}, -{26,29,-47}, -{26,29,-46}, -{26,29,-45}, -{26,29,-44}, -{26,29,-43}, -{26,29,-42}, -{26,29,-41}, -{26,29,-40}, -{26,29,-39}, -{26,29,-38}, -{26,29,-37}, -{26,29,-36}, -{26,29,-35}, -{26,29,-34}, -{26,29,-33}, -{26,29,-32}, -{26,29,-31}, -{26,29,-30}, -{26,29,-29}, -{26,29,-28}, -{26,29,-27}, -{26,29,-26}, -{26,29,-25}, -{26,29,-24}, -{26,29,-23}, -{26,29,-22}, -{26,29,-21}, -{26,29,-20}, -{26,29,-19}, -{26,29,-18}, -{26,29,-17}, -{26,29,-16}, -{26,29,-15}, -{26,29,-14}, -{26,29,-13}, -{26,29,-12}, -{26,29,-11}, -{26,29,-10}, -{26,29,-9}, -{26,29,-8}, -{26,29,-7}, -{26,29,-6}, -{26,29,-5}, -{26,29,-4}, -{26,29,-3}, -{26,29,-2}, -{26,29,-1}, -{26,29,0}, -{26,29,1}, -{26,29,2}, -{26,29,3}, -{26,29,4}, -{26,29,5}, -{26,29,6}, -{26,29,7}, -{26,29,8}, -{26,29,9}, -{26,29,10}, -{26,29,11}, -{26,29,12}, -{26,29,13}, -{26,29,14}, -{26,29,15}, -{26,29,16}, -{26,29,17}, -{26,29,18}, -{26,29,19}, -{26,29,20}, -{26,29,21}, -{26,29,22}, -{26,29,23}, -{26,29,24}, -{26,29,25}, -{26,29,26}, -{26,29,27}, -{26,29,28}, -{26,29,29}, -{26,29,30}, -{26,29,31}, -{26,29,32}, -{26,29,33}, -{26,29,34}, -{26,29,35}, -{26,29,36}, -{26,29,37}, -{26,30,-60}, -{26,30,-59}, -{26,30,-58}, -{26,30,-57}, -{26,30,-56}, -{26,30,-55}, -{26,30,-54}, -{26,30,-53}, -{26,30,-52}, -{26,30,-51}, -{26,30,-50}, -{26,30,-49}, -{26,30,-48}, -{26,30,-47}, -{26,30,-46}, -{26,30,-45}, -{26,30,-44}, -{26,30,-43}, -{26,30,-42}, -{26,30,-41}, -{26,30,-40}, -{26,30,-39}, -{26,30,-38}, -{26,30,-37}, -{26,30,-36}, -{26,30,-35}, -{26,30,-34}, -{26,30,-33}, -{26,30,-32}, -{26,30,-31}, -{26,30,-30}, -{26,30,-29}, -{26,30,-28}, -{26,30,-27}, -{26,30,-26}, -{26,30,-25}, -{26,30,-24}, -{26,30,-23}, -{26,30,-22}, -{26,30,-21}, -{26,30,-20}, -{26,30,-19}, -{26,30,-18}, -{26,30,-17}, -{26,30,-16}, -{26,30,-15}, -{26,30,-14}, -{26,30,-13}, -{26,30,-12}, -{26,30,-11}, -{26,30,-10}, -{26,30,-9}, -{26,30,-8}, -{26,30,-7}, -{26,30,-6}, -{26,30,-5}, -{26,30,-4}, -{26,30,-3}, -{26,30,-2}, -{26,30,-1}, -{26,30,0}, -{26,30,1}, -{26,30,2}, -{26,30,3}, -{26,30,4}, -{26,30,5}, -{26,30,6}, -{26,30,7}, -{26,30,8}, -{26,30,9}, -{26,30,10}, -{26,30,11}, -{26,30,12}, -{26,30,13}, -{26,30,14}, -{26,30,15}, -{26,30,16}, -{26,30,17}, -{26,30,18}, -{26,30,19}, -{26,30,20}, -{26,30,21}, -{26,30,22}, -{26,30,23}, -{26,30,24}, -{26,30,25}, -{26,30,26}, -{26,30,27}, -{26,30,28}, -{26,30,29}, -{26,30,30}, -{26,30,31}, -{26,30,32}, -{26,30,33}, -{26,30,34}, -{26,30,35}, -{26,30,36}, -{26,30,37}, -{26,31,-61}, -{26,31,-60}, -{26,31,-59}, -{26,31,-58}, -{26,31,-57}, -{26,31,-56}, -{26,31,-55}, -{26,31,-54}, -{26,31,-53}, -{26,31,-52}, -{26,31,-51}, -{26,31,-50}, -{26,31,-49}, -{26,31,-48}, -{26,31,-47}, -{26,31,-46}, -{26,31,-45}, -{26,31,-44}, -{26,31,-43}, -{26,31,-42}, -{26,31,-41}, -{26,31,-40}, -{26,31,-39}, -{26,31,-38}, -{26,31,-37}, -{26,31,-36}, -{26,31,-35}, -{26,31,-34}, -{26,31,-33}, -{26,31,-32}, -{26,31,-31}, -{26,31,-30}, -{26,31,-29}, -{26,31,-28}, -{26,31,-27}, -{26,31,-26}, -{26,31,-25}, -{26,31,-24}, -{26,31,-23}, -{26,31,-22}, -{26,31,-21}, -{26,31,-20}, -{26,31,-19}, -{26,31,-18}, -{26,31,-17}, -{26,31,-16}, -{26,31,-15}, -{26,31,-14}, -{26,31,-13}, -{26,31,-12}, -{26,31,-11}, -{26,31,-10}, -{26,31,-9}, -{26,31,-8}, -{26,31,-7}, -{26,31,-6}, -{26,31,-5}, -{26,31,-4}, -{26,31,-3}, -{26,31,-2}, -{26,31,-1}, -{26,31,0}, -{26,31,1}, -{26,31,2}, -{26,31,3}, -{26,31,4}, -{26,31,5}, -{26,31,6}, -{26,31,7}, -{26,31,8}, -{26,31,9}, -{26,31,10}, -{26,31,11}, -{26,31,12}, -{26,31,13}, -{26,31,14}, -{26,31,15}, -{26,31,16}, -{26,31,17}, -{26,31,18}, -{26,31,19}, -{26,31,20}, -{26,31,21}, -{26,31,22}, -{26,31,23}, -{26,31,24}, -{26,31,25}, -{26,31,26}, -{26,31,27}, -{26,31,28}, -{26,31,29}, -{26,31,30}, -{26,31,31}, -{26,31,32}, -{26,31,33}, -{26,31,34}, -{26,31,35}, -{26,31,36}, -{26,31,37}, -{26,32,-62}, -{26,32,-61}, -{26,32,-60}, -{26,32,-59}, -{26,32,-58}, -{26,32,-57}, -{26,32,-56}, -{26,32,-55}, -{26,32,-54}, -{26,32,-53}, -{26,32,-52}, -{26,32,-51}, -{26,32,-50}, -{26,32,-49}, -{26,32,-48}, -{26,32,-47}, -{26,32,-46}, -{26,32,-45}, -{26,32,-44}, -{26,32,-43}, -{26,32,-42}, -{26,32,-41}, -{26,32,-40}, -{26,32,-39}, -{26,32,-38}, -{26,32,-37}, -{26,32,-36}, -{26,32,-35}, -{26,32,-34}, -{26,32,-33}, -{26,32,-32}, -{26,32,-31}, -{26,32,-30}, -{26,32,-29}, -{26,32,-28}, -{26,32,-27}, -{26,32,-26}, -{26,32,-25}, -{26,32,-24}, -{26,32,-23}, -{26,32,-22}, -{26,32,-21}, -{26,32,-20}, -{26,32,-19}, -{26,32,-18}, -{26,32,-17}, -{26,32,-16}, -{26,32,-15}, -{26,32,-14}, -{26,32,-13}, -{26,32,-12}, -{26,32,-11}, -{26,32,-10}, -{26,32,-9}, -{26,32,-8}, -{26,32,-7}, -{26,32,-6}, -{26,32,-5}, -{26,32,-4}, -{26,32,-3}, -{26,32,-2}, -{26,32,-1}, -{26,32,0}, -{26,32,1}, -{26,32,2}, -{26,32,3}, -{26,32,4}, -{26,32,5}, -{26,32,6}, -{26,32,7}, -{26,32,8}, -{26,32,9}, -{26,32,10}, -{26,32,11}, -{26,32,12}, -{26,32,13}, -{26,32,14}, -{26,32,15}, -{26,32,16}, -{26,32,17}, -{26,32,18}, -{26,32,19}, -{26,32,20}, -{26,32,21}, -{26,32,22}, -{26,32,23}, -{26,32,24}, -{26,32,25}, -{26,32,26}, -{26,32,27}, -{26,32,28}, -{26,32,29}, -{26,32,30}, -{26,32,31}, -{26,32,32}, -{26,32,33}, -{26,32,34}, -{26,32,35}, -{26,32,36}, -{26,32,37}, -{26,33,-63}, -{26,33,-62}, -{26,33,-61}, -{26,33,-60}, -{26,33,-59}, -{26,33,-58}, -{26,33,-57}, -{26,33,-56}, -{26,33,-55}, -{26,33,-54}, -{26,33,-53}, -{26,33,-52}, -{26,33,-51}, -{26,33,-50}, -{26,33,-49}, -{26,33,-48}, -{26,33,-47}, -{26,33,-46}, -{26,33,-45}, -{26,33,-44}, -{26,33,-43}, -{26,33,-42}, -{26,33,-41}, -{26,33,-40}, -{26,33,-39}, -{26,33,-38}, -{26,33,-37}, -{26,33,-36}, -{26,33,-35}, -{26,33,-34}, -{26,33,-33}, -{26,33,-32}, -{26,33,-31}, -{26,33,-30}, -{26,33,-29}, -{26,33,-28}, -{26,33,-27}, -{26,33,-26}, -{26,33,-25}, -{26,33,-24}, -{26,33,-23}, -{26,33,-22}, -{26,33,-21}, -{26,33,-20}, -{26,33,-19}, -{26,33,-18}, -{26,33,-17}, -{26,33,-16}, -{26,33,-15}, -{26,33,-14}, -{26,33,-13}, -{26,33,-12}, -{26,33,-11}, -{26,33,-10}, -{26,33,-9}, -{26,33,-8}, -{26,33,-7}, -{26,33,-6}, -{26,33,-5}, -{26,33,-4}, -{26,33,-3}, -{26,33,-2}, -{26,33,-1}, -{26,33,0}, -{26,33,1}, -{26,33,2}, -{26,33,3}, -{26,33,4}, -{26,33,5}, -{26,33,6}, -{26,33,7}, -{26,33,8}, -{26,33,9}, -{26,33,10}, -{26,33,11}, -{26,33,12}, -{26,33,13}, -{26,33,14}, -{26,33,15}, -{26,33,16}, -{26,33,17}, -{26,33,18}, -{26,33,19}, -{26,33,20}, -{26,33,21}, -{26,33,22}, -{26,33,23}, -{26,33,24}, -{26,33,25}, -{26,33,26}, -{26,33,27}, -{26,33,28}, -{26,33,29}, -{26,33,30}, -{26,33,31}, -{26,33,32}, -{26,33,33}, -{26,33,34}, -{26,33,35}, -{26,33,36}, -{26,33,37}, -{26,34,-64}, -{26,34,-63}, -{26,34,-62}, -{26,34,-61}, -{26,34,-60}, -{26,34,-59}, -{26,34,-58}, -{26,34,-57}, -{26,34,-56}, -{26,34,-55}, -{26,34,-54}, -{26,34,-53}, -{26,34,-52}, -{26,34,-51}, -{26,34,-50}, -{26,34,-49}, -{26,34,-48}, -{26,34,-47}, -{26,34,-46}, -{26,34,-45}, -{26,34,-44}, -{26,34,-43}, -{26,34,-42}, -{26,34,-41}, -{26,34,-40}, -{26,34,-39}, -{26,34,-38}, -{26,34,-37}, -{26,34,-36}, -{26,34,-35}, -{26,34,-34}, -{26,34,-33}, -{26,34,-32}, -{26,34,-31}, -{26,34,-30}, -{26,34,-29}, -{26,34,-28}, -{26,34,-27}, -{26,34,-26}, -{26,34,-25}, -{26,34,-24}, -{26,34,-23}, -{26,34,-22}, -{26,34,-21}, -{26,34,-20}, -{26,34,-19}, -{26,34,-18}, -{26,34,-17}, -{26,34,-16}, -{26,34,-15}, -{26,34,-14}, -{26,34,-13}, -{26,34,-12}, -{26,34,-11}, -{26,34,-10}, -{26,34,-9}, -{26,34,-8}, -{26,34,-7}, -{26,34,-6}, -{26,34,-5}, -{26,34,-4}, -{26,34,-3}, -{26,34,-2}, -{26,34,-1}, -{26,34,0}, -{26,34,1}, -{26,34,2}, -{26,34,3}, -{26,34,4}, -{26,34,5}, -{26,34,6}, -{26,34,7}, -{26,34,8}, -{26,34,9}, -{26,34,10}, -{26,34,11}, -{26,34,12}, -{26,34,13}, -{26,34,14}, -{26,34,15}, -{26,34,16}, -{26,34,17}, -{26,34,18}, -{26,34,19}, -{26,34,20}, -{26,34,21}, -{26,34,22}, -{26,34,23}, -{26,34,24}, -{26,34,25}, -{26,34,26}, -{26,34,27}, -{26,34,28}, -{26,34,29}, -{26,34,30}, -{26,34,31}, -{26,34,32}, -{26,34,33}, -{26,34,34}, -{26,34,35}, -{26,34,36}, -{26,34,37}, -{26,35,-65}, -{26,35,-64}, -{26,35,-63}, -{26,35,-62}, -{26,35,-61}, -{26,35,-60}, -{26,35,-59}, -{26,35,-58}, -{26,35,-57}, -{26,35,-56}, -{26,35,-55}, -{26,35,-54}, -{26,35,-53}, -{26,35,-52}, -{26,35,-51}, -{26,35,-50}, -{26,35,-49}, -{26,35,-48}, -{26,35,-47}, -{26,35,-46}, -{26,35,-45}, -{26,35,-44}, -{26,35,-43}, -{26,35,-42}, -{26,35,-41}, -{26,35,-40}, -{26,35,-39}, -{26,35,-38}, -{26,35,-37}, -{26,35,-36}, -{26,35,-35}, -{26,35,-34}, -{26,35,-33}, -{26,35,-32}, -{26,35,-31}, -{26,35,-30}, -{26,35,-29}, -{26,35,-28}, -{26,35,-27}, -{26,35,-26}, -{26,35,-25}, -{26,35,-24}, -{26,35,-23}, -{26,35,-22}, -{26,35,-21}, -{26,35,-20}, -{26,35,-19}, -{26,35,-18}, -{26,35,-17}, -{26,35,-16}, -{26,35,-15}, -{26,35,-14}, -{26,35,-13}, -{26,35,-12}, -{26,35,-11}, -{26,35,-10}, -{26,35,-9}, -{26,35,-8}, -{26,35,-7}, -{26,35,-6}, -{26,35,-5}, -{26,35,-4}, -{26,35,-3}, -{26,35,-2}, -{26,35,-1}, -{26,35,0}, -{26,35,1}, -{26,35,2}, -{26,35,3}, -{26,35,4}, -{26,35,5}, -{26,35,6}, -{26,35,7}, -{26,35,8}, -{26,35,9}, -{26,35,10}, -{26,35,11}, -{26,35,12}, -{26,35,13}, -{26,35,14}, -{26,35,15}, -{26,35,16}, -{26,35,17}, -{26,35,18}, -{26,35,19}, -{26,35,20}, -{26,35,21}, -{26,35,22}, -{26,35,23}, -{26,35,24}, -{26,35,25}, -{26,35,26}, -{26,35,27}, -{26,35,28}, -{26,35,29}, -{26,35,30}, -{26,35,31}, -{26,35,32}, -{26,35,33}, -{26,35,34}, -{26,35,35}, -{26,35,36}, -{26,35,37}, -{26,36,-65}, -{26,36,-64}, -{26,36,-63}, -{26,36,-62}, -{26,36,-61}, -{26,36,-60}, -{26,36,-59}, -{26,36,-58}, -{26,36,-57}, -{26,36,-56}, -{26,36,-55}, -{26,36,-54}, -{26,36,-53}, -{26,36,-52}, -{26,36,-51}, -{26,36,-50}, -{26,36,-49}, -{26,36,-48}, -{26,36,-47}, -{26,36,-46}, -{26,36,-45}, -{26,36,-44}, -{26,36,-43}, -{26,36,-42}, -{26,36,-41}, -{26,36,-40}, -{26,36,-39}, -{26,36,-38}, -{26,36,-37}, -{26,36,-36}, -{26,36,-35}, -{26,36,-34}, -{26,36,-33}, -{26,36,-32}, -{26,36,-31}, -{26,36,-30}, -{26,36,-29}, -{26,36,-28}, -{26,36,-27}, -{26,36,-26}, -{26,36,-25}, -{26,36,-24}, -{26,36,-23}, -{26,36,-22}, -{26,36,-21}, -{26,36,-20}, -{26,36,-19}, -{26,36,-18}, -{26,36,-17}, -{26,36,-16}, -{26,36,-15}, -{26,36,-14}, -{26,36,-13}, -{26,36,-12}, -{26,36,-11}, -{26,36,-10}, -{26,36,-9}, -{26,36,-8}, -{26,36,-7}, -{26,36,-6}, -{26,36,-5}, -{26,36,-4}, -{26,36,-3}, -{26,36,-2}, -{26,36,-1}, -{26,36,0}, -{26,36,1}, -{26,36,2}, -{26,36,3}, -{26,36,4}, -{26,36,5}, -{26,36,6}, -{26,36,7}, -{26,36,8}, -{26,36,9}, -{26,36,10}, -{26,36,11}, -{26,36,12}, -{26,36,13}, -{26,36,14}, -{26,36,15}, -{26,36,16}, -{26,36,17}, -{26,36,18}, -{26,36,19}, -{26,36,20}, -{26,36,21}, -{26,36,22}, -{26,36,23}, -{26,36,24}, -{26,36,25}, -{26,36,26}, -{26,36,27}, -{26,36,28}, -{26,36,29}, -{26,36,30}, -{26,36,31}, -{26,36,32}, -{26,36,33}, -{26,36,34}, -{26,36,35}, -{26,36,36}, -{26,36,37}, -{26,37,-66}, -{26,37,-65}, -{26,37,-64}, -{26,37,-63}, -{26,37,-62}, -{26,37,-61}, -{26,37,-60}, -{26,37,-59}, -{26,37,-58}, -{26,37,-57}, -{26,37,-56}, -{26,37,-55}, -{26,37,-54}, -{26,37,-53}, -{26,37,-52}, -{26,37,-51}, -{26,37,-50}, -{26,37,-49}, -{26,37,-48}, -{26,37,-47}, -{26,37,-46}, -{26,37,-45}, -{26,37,-44}, -{26,37,-43}, -{26,37,-42}, -{26,37,-41}, -{26,37,-40}, -{26,37,-39}, -{26,37,-38}, -{26,37,-37}, -{26,37,-36}, -{26,37,-35}, -{26,37,-34}, -{26,37,-33}, -{26,37,-32}, -{26,37,-31}, -{26,37,-30}, -{26,37,-29}, -{26,37,-28}, -{26,37,-27}, -{26,37,-26}, -{26,37,-25}, -{26,37,-24}, -{26,37,-23}, -{26,37,-22}, -{26,37,-21}, -{26,37,-20}, -{26,37,-19}, -{26,37,-18}, -{26,37,-17}, -{26,37,-16}, -{26,37,-15}, -{26,37,-14}, -{26,37,-13}, -{26,37,-12}, -{26,37,-11}, -{26,37,-10}, -{26,37,-9}, -{26,37,-8}, -{26,37,-7}, -{26,37,-6}, -{26,37,-5}, -{26,37,-4}, -{26,37,-3}, -{26,37,-2}, -{26,37,-1}, -{26,37,0}, -{26,37,1}, -{26,37,2}, -{26,37,3}, -{26,37,4}, -{26,37,5}, -{26,37,6}, -{26,37,7}, -{26,37,8}, -{26,37,9}, -{26,37,10}, -{26,37,11}, -{26,37,12}, -{26,37,13}, -{26,37,14}, -{26,37,15}, -{26,37,16}, -{26,37,17}, -{26,37,18}, -{26,37,19}, -{26,37,20}, -{26,37,21}, -{26,37,22}, -{26,37,23}, -{26,37,24}, -{26,37,25}, -{26,37,26}, -{26,37,27}, -{26,37,28}, -{26,37,29}, -{26,37,30}, -{26,37,31}, -{26,37,32}, -{26,37,33}, -{26,37,34}, -{26,37,35}, -{26,37,36}, -{26,37,37}, -{26,38,-67}, -{26,38,-66}, -{26,38,-65}, -{26,38,-64}, -{26,38,-63}, -{26,38,-62}, -{26,38,-61}, -{26,38,-60}, -{26,38,-59}, -{26,38,-58}, -{26,38,-57}, -{26,38,-56}, -{26,38,-55}, -{26,38,-54}, -{26,38,-53}, -{26,38,-52}, -{26,38,-51}, -{26,38,-50}, -{26,38,-49}, -{26,38,-48}, -{26,38,-47}, -{26,38,-46}, -{26,38,-45}, -{26,38,-44}, -{26,38,-43}, -{26,38,-42}, -{26,38,-41}, -{26,38,-40}, -{26,38,-39}, -{26,38,-38}, -{26,38,-37}, -{26,38,-36}, -{26,38,-35}, -{26,38,-34}, -{26,38,-33}, -{26,38,-32}, -{26,38,-31}, -{26,38,-30}, -{26,38,-29}, -{26,38,-28}, -{26,38,-27}, -{26,38,-26}, -{26,38,-25}, -{26,38,-24}, -{26,38,-23}, -{26,38,-22}, -{26,38,-21}, -{26,38,-20}, -{26,38,-19}, -{26,38,-18}, -{26,38,-17}, -{26,38,-16}, -{26,38,-15}, -{26,38,-14}, -{26,38,-13}, -{26,38,-12}, -{26,38,-11}, -{26,38,-10}, -{26,38,-9}, -{26,38,-8}, -{26,38,-7}, -{26,38,-6}, -{26,38,-5}, -{26,38,-4}, -{26,38,-3}, -{26,38,-2}, -{26,38,-1}, -{26,38,0}, -{26,38,1}, -{26,38,2}, -{26,38,3}, -{26,38,4}, -{26,38,5}, -{26,38,6}, -{26,38,7}, -{26,38,8}, -{26,38,9}, -{26,38,10}, -{26,38,11}, -{26,38,12}, -{26,38,13}, -{26,38,14}, -{26,38,15}, -{26,38,16}, -{26,38,17}, -{26,38,18}, -{26,38,19}, -{26,38,20}, -{26,38,21}, -{26,38,22}, -{26,38,23}, -{26,38,24}, -{26,38,25}, -{26,38,26}, -{26,38,27}, -{26,38,28}, -{26,38,29}, -{26,38,30}, -{26,38,31}, -{26,38,32}, -{26,38,33}, -{26,38,34}, -{26,38,35}, -{26,38,36}, -{26,38,37}, -{26,39,-68}, -{26,39,-67}, -{26,39,-66}, -{26,39,-65}, -{26,39,-64}, -{26,39,-63}, -{26,39,-62}, -{26,39,-61}, -{26,39,-60}, -{26,39,-59}, -{26,39,-58}, -{26,39,-57}, -{26,39,-56}, -{26,39,-55}, -{26,39,-54}, -{26,39,-53}, -{26,39,-52}, -{26,39,-51}, -{26,39,-50}, -{26,39,-49}, -{26,39,-48}, -{26,39,-47}, -{26,39,-46}, -{26,39,-45}, -{26,39,-44}, -{26,39,-43}, -{26,39,-42}, -{26,39,-41}, -{26,39,-40}, -{26,39,-39}, -{26,39,-38}, -{26,39,-37}, -{26,39,-36}, -{26,39,-35}, -{26,39,-34}, -{26,39,-33}, -{26,39,-32}, -{26,39,-31}, -{26,39,-30}, -{26,39,-29}, -{26,39,-28}, -{26,39,-27}, -{26,39,-26}, -{26,39,-25}, -{26,39,-24}, -{26,39,-23}, -{26,39,-22}, -{26,39,-21}, -{26,39,-20}, -{26,39,-19}, -{26,39,-18}, -{26,39,-17}, -{26,39,-16}, -{26,39,-15}, -{26,39,-14}, -{26,39,-13}, -{26,39,-12}, -{26,39,-11}, -{26,39,-10}, -{26,39,-9}, -{26,39,-8}, -{26,39,-7}, -{26,39,-6}, -{26,39,-5}, -{26,39,-4}, -{26,39,-3}, -{26,39,-2}, -{26,39,-1}, -{26,39,0}, -{26,39,1}, -{26,39,2}, -{26,39,3}, -{26,39,4}, -{26,39,5}, -{26,39,6}, -{26,39,7}, -{26,39,8}, -{26,39,9}, -{26,39,10}, -{26,39,11}, -{26,39,12}, -{26,39,13}, -{26,39,14}, -{26,39,15}, -{26,39,16}, -{26,39,17}, -{26,39,18}, -{26,39,19}, -{26,39,20}, -{26,39,21}, -{26,39,22}, -{26,39,23}, -{26,39,24}, -{26,39,25}, -{26,39,26}, -{26,39,27}, -{26,39,28}, -{26,39,29}, -{26,39,30}, -{26,39,31}, -{26,39,32}, -{26,39,33}, -{26,39,34}, -{26,39,35}, -{26,39,36}, -{26,39,37}, -{26,39,38}, -{26,40,-69}, -{26,40,-68}, -{26,40,-67}, -{26,40,-66}, -{26,40,-65}, -{26,40,-64}, -{26,40,-63}, -{26,40,-62}, -{26,40,-61}, -{26,40,-60}, -{26,40,-59}, -{26,40,-58}, -{26,40,-57}, -{26,40,-56}, -{26,40,-55}, -{26,40,-54}, -{26,40,-53}, -{26,40,-52}, -{26,40,-51}, -{26,40,-50}, -{26,40,-49}, -{26,40,-48}, -{26,40,-47}, -{26,40,-46}, -{26,40,-45}, -{26,40,-44}, -{26,40,-43}, -{26,40,-42}, -{26,40,-41}, -{26,40,-40}, -{26,40,-39}, -{26,40,-38}, -{26,40,-37}, -{26,40,-36}, -{26,40,-35}, -{26,40,-34}, -{26,40,-33}, -{26,40,-32}, -{26,40,-31}, -{26,40,-30}, -{26,40,-29}, -{26,40,-28}, -{26,40,-27}, -{26,40,-26}, -{26,40,-25}, -{26,40,-24}, -{26,40,-23}, -{26,40,-22}, -{26,40,-21}, -{26,40,-20}, -{26,40,-19}, -{26,40,-18}, -{26,40,-17}, -{26,40,-16}, -{26,40,-15}, -{26,40,-14}, -{26,40,-13}, -{26,40,-12}, -{26,40,-11}, -{26,40,-10}, -{26,40,-9}, -{26,40,-8}, -{26,40,-7}, -{26,40,-6}, -{26,40,-5}, -{26,40,-4}, -{26,40,-3}, -{26,40,-2}, -{26,40,-1}, -{26,40,0}, -{26,40,1}, -{26,40,2}, -{26,40,3}, -{26,40,4}, -{26,40,5}, -{26,40,6}, -{26,40,7}, -{26,40,8}, -{26,40,9}, -{26,40,10}, -{26,40,11}, -{26,40,12}, -{26,40,13}, -{26,40,14}, -{26,40,15}, -{26,40,16}, -{26,40,17}, -{26,40,18}, -{26,40,19}, -{26,40,20}, -{26,40,21}, -{26,40,22}, -{26,40,23}, -{26,40,24}, -{26,40,25}, -{26,40,26}, -{26,40,27}, -{26,40,28}, -{26,40,29}, -{26,40,30}, -{26,40,31}, -{26,40,32}, -{26,40,33}, -{26,40,34}, -{26,40,35}, -{26,40,36}, -{26,40,37}, -{26,40,38}, -{26,41,-70}, -{26,41,-69}, -{26,41,-68}, -{26,41,-67}, -{26,41,-66}, -{26,41,-65}, -{26,41,-64}, -{26,41,-63}, -{26,41,-62}, -{26,41,-61}, -{26,41,-60}, -{26,41,-59}, -{26,41,-58}, -{26,41,-57}, -{26,41,-56}, -{26,41,-55}, -{26,41,-54}, -{26,41,-53}, -{26,41,-52}, -{26,41,-51}, -{26,41,-50}, -{26,41,-49}, -{26,41,-48}, -{26,41,-47}, -{26,41,-46}, -{26,41,-45}, -{26,41,-44}, -{26,41,-43}, -{26,41,-42}, -{26,41,-41}, -{26,41,-40}, -{26,41,-39}, -{26,41,-38}, -{26,41,-37}, -{26,41,-36}, -{26,41,-35}, -{26,41,-34}, -{26,41,-33}, -{26,41,-32}, -{26,41,-31}, -{26,41,-30}, -{26,41,-29}, -{26,41,-28}, -{26,41,-27}, -{26,41,-26}, -{26,41,-25}, -{26,41,-24}, -{26,41,-23}, -{26,41,-22}, -{26,41,-21}, -{26,41,-20}, -{26,41,-19}, -{26,41,-18}, -{26,41,-17}, -{26,41,-16}, -{26,41,-15}, -{26,41,-14}, -{26,41,-13}, -{26,41,-12}, -{26,41,-11}, -{26,41,-10}, -{26,41,-9}, -{26,41,-8}, -{26,41,-7}, -{26,41,-6}, -{26,41,-5}, -{26,41,-4}, -{26,41,-3}, -{26,41,-2}, -{26,41,-1}, -{26,41,0}, -{26,41,1}, -{26,41,2}, -{26,41,3}, -{26,41,4}, -{26,41,5}, -{26,41,6}, -{26,41,7}, -{26,41,8}, -{26,41,9}, -{26,41,10}, -{26,41,11}, -{26,41,12}, -{26,41,13}, -{26,41,14}, -{26,41,15}, -{26,41,16}, -{26,41,17}, -{26,41,18}, -{26,41,19}, -{26,41,20}, -{26,41,21}, -{26,41,22}, -{26,41,23}, -{26,41,24}, -{26,41,25}, -{26,41,26}, -{26,41,27}, -{26,41,28}, -{26,41,29}, -{26,41,30}, -{26,41,31}, -{26,41,32}, -{26,41,33}, -{26,41,34}, -{26,41,35}, -{26,41,36}, -{26,41,37}, -{26,41,38}, -{26,42,-71}, -{26,42,-70}, -{26,42,-69}, -{26,42,-68}, -{26,42,-67}, -{26,42,-66}, -{26,42,-65}, -{26,42,-64}, -{26,42,-63}, -{26,42,-62}, -{26,42,-61}, -{26,42,-60}, -{26,42,-59}, -{26,42,-58}, -{26,42,-57}, -{26,42,-56}, -{26,42,-55}, -{26,42,-54}, -{26,42,-53}, -{26,42,-52}, -{26,42,-51}, -{26,42,-50}, -{26,42,-49}, -{26,42,-48}, -{26,42,-47}, -{26,42,-46}, -{26,42,-45}, -{26,42,-44}, -{26,42,-43}, -{26,42,-42}, -{26,42,-41}, -{26,42,-40}, -{26,42,-39}, -{26,42,-38}, -{26,42,-37}, -{26,42,-36}, -{26,42,-35}, -{26,42,-34}, -{26,42,-33}, -{26,42,-32}, -{26,42,-31}, -{26,42,-30}, -{26,42,-29}, -{26,42,-28}, -{26,42,-27}, -{26,42,-26}, -{26,42,-25}, -{26,42,-24}, -{26,42,-23}, -{26,42,-22}, -{26,42,-21}, -{26,42,-20}, -{26,42,-19}, -{26,42,-18}, -{26,42,-17}, -{26,42,-16}, -{26,42,-15}, -{26,42,-14}, -{26,42,-13}, -{26,42,-12}, -{26,42,-11}, -{26,42,-10}, -{26,42,-9}, -{26,42,-8}, -{26,42,-7}, -{26,42,-6}, -{26,42,-5}, -{26,42,-4}, -{26,42,-3}, -{26,42,-2}, -{26,42,-1}, -{26,42,0}, -{26,42,1}, -{26,42,2}, -{26,42,3}, -{26,42,4}, -{26,42,5}, -{26,42,6}, -{26,42,7}, -{26,42,8}, -{26,42,9}, -{26,42,10}, -{26,42,11}, -{26,42,12}, -{26,42,13}, -{26,42,14}, -{26,42,15}, -{26,42,16}, -{26,42,17}, -{26,42,18}, -{26,42,19}, -{26,42,20}, -{26,42,21}, -{26,42,22}, -{26,42,23}, -{26,42,24}, -{26,42,25}, -{26,42,26}, -{26,42,27}, -{26,42,28}, -{26,42,29}, -{26,42,30}, -{26,42,31}, -{26,42,32}, -{26,42,33}, -{26,42,34}, -{26,42,35}, -{26,42,36}, -{26,42,37}, -{26,42,38}, -{26,43,-72}, -{26,43,-71}, -{26,43,-70}, -{26,43,-69}, -{26,43,-68}, -{26,43,-67}, -{26,43,-66}, -{26,43,-65}, -{26,43,-64}, -{26,43,-63}, -{26,43,-62}, -{26,43,-61}, -{26,43,-60}, -{26,43,-59}, -{26,43,-58}, -{26,43,-57}, -{26,43,-56}, -{26,43,-55}, -{26,43,-54}, -{26,43,-53}, -{26,43,-52}, -{26,43,-51}, -{26,43,-50}, -{26,43,-49}, -{26,43,-48}, -{26,43,-47}, -{26,43,-46}, -{26,43,-45}, -{26,43,-44}, -{26,43,-43}, -{26,43,-42}, -{26,43,-41}, -{26,43,-40}, -{26,43,-39}, -{26,43,-38}, -{26,43,-37}, -{26,43,-36}, -{26,43,-35}, -{26,43,-34}, -{26,43,-33}, -{26,43,-32}, -{26,43,-31}, -{26,43,-30}, -{26,43,-29}, -{26,43,-28}, -{26,43,-27}, -{26,43,-26}, -{26,43,-25}, -{26,43,-24}, -{26,43,-23}, -{26,43,-22}, -{26,43,-21}, -{26,43,-20}, -{26,43,-19}, -{26,43,-18}, -{26,43,-17}, -{26,43,-16}, -{26,43,-15}, -{26,43,-14}, -{26,43,-13}, -{26,43,-12}, -{26,43,-11}, -{26,43,-10}, -{26,43,-9}, -{26,43,-8}, -{26,43,-7}, -{26,43,-6}, -{26,43,-5}, -{26,43,-4}, -{26,43,-3}, -{26,43,-2}, -{26,43,-1}, -{26,43,0}, -{26,43,1}, -{26,43,2}, -{26,43,3}, -{26,43,4}, -{26,43,5}, -{26,43,6}, -{26,43,7}, -{26,43,8}, -{26,43,9}, -{26,43,10}, -{26,43,11}, -{26,43,12}, -{26,43,13}, -{26,43,14}, -{26,43,15}, -{26,43,16}, -{26,43,17}, -{26,43,18}, -{26,43,19}, -{26,43,20}, -{26,43,21}, -{26,43,22}, -{26,43,23}, -{26,43,24}, -{26,43,25}, -{26,43,26}, -{26,43,27}, -{26,43,28}, -{26,43,29}, -{26,43,30}, -{26,43,31}, -{26,43,32}, -{26,43,33}, -{26,43,34}, -{26,43,35}, -{26,43,36}, -{26,43,37}, -{26,43,38}, -{26,44,-72}, -{26,44,-71}, -{26,44,-70}, -{26,44,-69}, -{26,44,-68}, -{26,44,-67}, -{26,44,-66}, -{26,44,-65}, -{26,44,-64}, -{26,44,-63}, -{26,44,-62}, -{26,44,-61}, -{26,44,-60}, -{26,44,-59}, -{26,44,-58}, -{26,44,-57}, -{26,44,-56}, -{26,44,-55}, -{26,44,-54}, -{26,44,-53}, -{26,44,-52}, -{26,44,-51}, -{26,44,-50}, -{26,44,-49}, -{26,44,-48}, -{26,44,-47}, -{26,44,-46}, -{26,44,-45}, -{26,44,-44}, -{26,44,-43}, -{26,44,-42}, -{26,44,-41}, -{26,44,-40}, -{26,44,-39}, -{26,44,-38}, -{26,44,-37}, -{26,44,-36}, -{26,44,-35}, -{26,44,-34}, -{26,44,-33}, -{26,44,-32}, -{26,44,-31}, -{26,44,-30}, -{26,44,-29}, -{26,44,-28}, -{26,44,-27}, -{26,44,-26}, -{26,44,-25}, -{26,44,-24}, -{26,44,-23}, -{26,44,-22}, -{26,44,-21}, -{26,44,-20}, -{26,44,-19}, -{26,44,-18}, -{26,44,-17}, -{26,44,-16}, -{26,44,-15}, -{26,44,-14}, -{26,44,-13}, -{26,44,-12}, -{26,44,-11}, -{26,44,-10}, -{26,44,-9}, -{26,44,-8}, -{26,44,-7}, -{26,44,-6}, -{26,44,-5}, -{26,44,-4}, -{26,44,-3}, -{26,44,-2}, -{26,44,-1}, -{26,44,0}, -{26,44,1}, -{26,44,2}, -{26,44,3}, -{26,44,4}, -{26,44,5}, -{26,44,6}, -{26,44,7}, -{26,44,8}, -{26,44,9}, -{26,44,10}, -{26,44,11}, -{26,44,12}, -{26,44,13}, -{26,44,14}, -{26,44,15}, -{26,44,16}, -{26,44,17}, -{26,44,18}, -{26,44,19}, -{26,44,20}, -{26,44,21}, -{26,44,22}, -{26,44,23}, -{26,44,24}, -{26,44,25}, -{26,44,26}, -{26,44,27}, -{26,44,28}, -{26,44,29}, -{26,44,30}, -{26,44,31}, -{26,44,32}, -{26,44,33}, -{26,44,34}, -{26,44,35}, -{26,44,36}, -{26,44,37}, -{26,44,38}, -{26,45,-73}, -{26,45,-72}, -{26,45,-71}, -{26,45,-70}, -{26,45,-69}, -{26,45,-68}, -{26,45,-67}, -{26,45,-66}, -{26,45,-65}, -{26,45,-64}, -{26,45,-63}, -{26,45,-62}, -{26,45,-61}, -{26,45,-60}, -{26,45,-59}, -{26,45,-58}, -{26,45,-57}, -{26,45,-56}, -{26,45,-55}, -{26,45,-54}, -{26,45,-53}, -{26,45,-52}, -{26,45,-51}, -{26,45,-50}, -{26,45,-49}, -{26,45,-48}, -{26,45,-47}, -{26,45,-46}, -{26,45,-45}, -{26,45,-44}, -{26,45,-43}, -{26,45,-42}, -{26,45,-41}, -{26,45,-40}, -{26,45,-39}, -{26,45,-38}, -{26,45,-37}, -{26,45,-36}, -{26,45,-35}, -{26,45,-34}, -{26,45,-33}, -{26,45,-32}, -{26,45,-31}, -{26,45,-30}, -{26,45,-29}, -{26,45,-28}, -{26,45,-27}, -{26,45,-26}, -{26,45,-25}, -{26,45,-24}, -{26,45,-23}, -{26,45,-22}, -{26,45,-21}, -{26,45,-20}, -{26,45,-19}, -{26,45,-18}, -{26,45,-17}, -{26,45,-16}, -{26,45,-15}, -{26,45,-14}, -{26,45,-13}, -{26,45,-12}, -{26,45,-11}, -{26,45,-10}, -{26,45,-9}, -{26,45,-8}, -{26,45,-7}, -{26,45,-6}, -{26,45,-5}, -{26,45,-4}, -{26,45,-3}, -{26,45,-2}, -{26,45,-1}, -{26,45,0}, -{26,45,1}, -{26,45,2}, -{26,45,3}, -{26,45,4}, -{26,45,5}, -{26,45,6}, -{26,45,7}, -{26,45,8}, -{26,45,9}, -{26,45,10}, -{26,45,11}, -{26,45,12}, -{26,45,13}, -{26,45,14}, -{26,45,15}, -{26,45,16}, -{26,45,17}, -{26,45,18}, -{26,45,19}, -{26,45,20}, -{26,45,21}, -{26,45,22}, -{26,45,23}, -{26,45,24}, -{26,45,25}, -{26,45,26}, -{26,45,27}, -{26,45,28}, -{26,45,29}, -{26,45,30}, -{26,45,31}, -{26,45,32}, -{26,45,33}, -{26,45,34}, -{26,45,35}, -{26,45,36}, -{26,45,37}, -{26,45,38}, -{26,46,-74}, -{26,46,-73}, -{26,46,-72}, -{26,46,-71}, -{26,46,-70}, -{26,46,-69}, -{26,46,-68}, -{26,46,-67}, -{26,46,-66}, -{26,46,-65}, -{26,46,-64}, -{26,46,-63}, -{26,46,-62}, -{26,46,-61}, -{26,46,-60}, -{26,46,-59}, -{26,46,-58}, -{26,46,-57}, -{26,46,-56}, -{26,46,-55}, -{26,46,-54}, -{26,46,-53}, -{26,46,-52}, -{26,46,-51}, -{26,46,-50}, -{26,46,-49}, -{26,46,-48}, -{26,46,-47}, -{26,46,-46}, -{26,46,-45}, -{26,46,-44}, -{26,46,-43}, -{26,46,-42}, -{26,46,-41}, -{26,46,-40}, -{26,46,-39}, -{26,46,-38}, -{26,46,-37}, -{26,46,-36}, -{26,46,-35}, -{26,46,-34}, -{26,46,-33}, -{26,46,-32}, -{26,46,-31}, -{26,46,-30}, -{26,46,-29}, -{26,46,-28}, -{26,46,-27}, -{26,46,-26}, -{26,46,-25}, -{26,46,-24}, -{26,46,-23}, -{26,46,-22}, -{26,46,-21}, -{26,46,-20}, -{26,46,-19}, -{26,46,-18}, -{26,46,-17}, -{26,46,-16}, -{26,46,-15}, -{26,46,-14}, -{26,46,-13}, -{26,46,-12}, -{26,46,-11}, -{26,46,-10}, -{26,46,-9}, -{26,46,-8}, -{26,46,-7}, -{26,46,-6}, -{26,46,-5}, -{26,46,-4}, -{26,46,-3}, -{26,46,-2}, -{26,46,-1}, -{26,46,0}, -{26,46,1}, -{26,46,2}, -{26,46,3}, -{26,46,4}, -{26,46,5}, -{26,46,6}, -{26,46,7}, -{26,46,8}, -{26,46,9}, -{26,46,10}, -{26,46,11}, -{26,46,12}, -{26,46,13}, -{26,46,14}, -{26,46,15}, -{26,46,16}, -{26,46,17}, -{26,46,18}, -{26,46,19}, -{26,46,20}, -{26,46,21}, -{26,46,22}, -{26,46,23}, -{26,46,24}, -{26,46,25}, -{26,46,26}, -{26,46,27}, -{26,46,28}, -{26,46,29}, -{26,46,30}, -{26,46,31}, -{26,46,32}, -{26,46,33}, -{26,46,34}, -{26,46,35}, -{26,46,36}, -{26,46,37}, -{26,46,38}, -{26,47,-75}, -{26,47,-74}, -{26,47,-73}, -{26,47,-72}, -{26,47,-71}, -{26,47,-70}, -{26,47,-69}, -{26,47,-68}, -{26,47,-67}, -{26,47,-66}, -{26,47,-65}, -{26,47,-64}, -{26,47,-63}, -{26,47,-62}, -{26,47,-61}, -{26,47,-60}, -{26,47,-59}, -{26,47,-58}, -{26,47,-57}, -{26,47,-56}, -{26,47,-55}, -{26,47,-54}, -{26,47,-53}, -{26,47,-52}, -{26,47,-51}, -{26,47,-50}, -{26,47,-49}, -{26,47,-48}, -{26,47,-47}, -{26,47,-46}, -{26,47,-45}, -{26,47,-44}, -{26,47,-43}, -{26,47,-42}, -{26,47,-41}, -{26,47,-40}, -{26,47,-39}, -{26,47,-38}, -{26,47,-37}, -{26,47,-36}, -{26,47,-35}, -{26,47,-34}, -{26,47,-33}, -{26,47,-32}, -{26,47,-31}, -{26,47,-30}, -{26,47,-29}, -{26,47,-28}, -{26,47,-27}, -{26,47,-26}, -{26,47,-25}, -{26,47,-24}, -{26,47,-23}, -{26,47,-22}, -{26,47,-21}, -{26,47,-20}, -{26,47,-19}, -{26,47,-18}, -{26,47,-17}, -{26,47,-16}, -{26,47,-15}, -{26,47,-14}, -{26,47,-13}, -{26,47,-12}, -{26,47,-11}, -{26,47,-10}, -{26,47,-9}, -{26,47,-8}, -{26,47,-7}, -{26,47,-6}, -{26,47,-5}, -{26,47,-4}, -{26,47,-3}, -{26,47,-2}, -{26,47,-1}, -{26,47,0}, -{26,47,1}, -{26,47,2}, -{26,47,3}, -{26,47,4}, -{26,47,5}, -{26,47,6}, -{26,47,7}, -{26,47,8}, -{26,47,9}, -{26,47,10}, -{26,47,11}, -{26,47,12}, -{26,47,13}, -{26,47,14}, -{26,47,15}, -{26,47,16}, -{26,47,17}, -{26,47,18}, -{26,47,19}, -{26,47,20}, -{26,47,21}, -{26,47,22}, -{26,47,23}, -{26,47,24}, -{26,47,25}, -{26,47,26}, -{26,47,27}, -{26,47,28}, -{26,47,29}, -{26,47,30}, -{26,47,31}, -{26,47,32}, -{26,47,33}, -{26,47,34}, -{26,47,35}, -{26,47,36}, -{26,47,37}, -{26,47,38}, -{26,48,-76}, -{26,48,-75}, -{26,48,-74}, -{26,48,-73}, -{26,48,-72}, -{26,48,-71}, -{26,48,-70}, -{26,48,-69}, -{26,48,-68}, -{26,48,-67}, -{26,48,-66}, -{26,48,-65}, -{26,48,-64}, -{26,48,-63}, -{26,48,-62}, -{26,48,-61}, -{26,48,-60}, -{26,48,-59}, -{26,48,-58}, -{26,48,-57}, -{26,48,-56}, -{26,48,-55}, -{26,48,-54}, -{26,48,-53}, -{26,48,-52}, -{26,48,-51}, -{26,48,-50}, -{26,48,-49}, -{26,48,-48}, -{26,48,-47}, -{26,48,-46}, -{26,48,-45}, -{26,48,-44}, -{26,48,-43}, -{26,48,-42}, -{26,48,-41}, -{26,48,-40}, -{26,48,-39}, -{26,48,-38}, -{26,48,-37}, -{26,48,-36}, -{26,48,-35}, -{26,48,-34}, -{26,48,-33}, -{26,48,-32}, -{26,48,-31}, -{26,48,-30}, -{26,48,-29}, -{26,48,-28}, -{26,48,-27}, -{26,48,-26}, -{26,48,-25}, -{26,48,-24}, -{26,48,-23}, -{26,48,-22}, -{26,48,-21}, -{26,48,-20}, -{26,48,-19}, -{26,48,-18}, -{26,48,-17}, -{26,48,-16}, -{26,48,-15}, -{26,48,-14}, -{26,48,-13}, -{26,48,-12}, -{26,48,-11}, -{26,48,-10}, -{26,48,-9}, -{26,48,-8}, -{26,48,-7}, -{26,48,-6}, -{26,48,-5}, -{26,48,-4}, -{26,48,-3}, -{26,48,-2}, -{26,48,-1}, -{26,48,0}, -{26,48,1}, -{26,48,2}, -{26,48,3}, -{26,48,4}, -{26,48,5}, -{26,48,6}, -{26,48,7}, -{26,48,8}, -{26,48,9}, -{26,48,10}, -{26,48,11}, -{26,48,12}, -{26,48,13}, -{26,48,14}, -{26,48,15}, -{26,48,16}, -{26,48,17}, -{26,48,18}, -{26,48,19}, -{26,48,20}, -{26,48,21}, -{26,48,22}, -{26,48,23}, -{26,48,24}, -{26,48,25}, -{26,48,26}, -{26,48,27}, -{26,48,28}, -{26,48,29}, -{26,48,30}, -{26,48,31}, -{26,48,32}, -{26,48,33}, -{26,48,34}, -{26,48,35}, -{26,48,36}, -{26,48,37}, -{26,48,38}, -{26,49,-77}, -{26,49,-76}, -{26,49,-75}, -{26,49,-74}, -{26,49,-73}, -{26,49,-72}, -{26,49,-71}, -{26,49,-70}, -{26,49,-69}, -{26,49,-68}, -{26,49,-67}, -{26,49,-66}, -{26,49,-65}, -{26,49,-64}, -{26,49,-63}, -{26,49,-62}, -{26,49,-61}, -{26,49,-60}, -{26,49,-59}, -{26,49,-58}, -{26,49,-57}, -{26,49,-56}, -{26,49,-55}, -{26,49,-54}, -{26,49,-53}, -{26,49,-52}, -{26,49,-51}, -{26,49,-50}, -{26,49,-49}, -{26,49,-48}, -{26,49,-47}, -{26,49,-46}, -{26,49,-45}, -{26,49,-44}, -{26,49,-43}, -{26,49,-42}, -{26,49,-41}, -{26,49,-40}, -{26,49,-39}, -{26,49,-38}, -{26,49,-37}, -{26,49,-36}, -{26,49,-35}, -{26,49,-34}, -{26,49,-33}, -{26,49,-32}, -{26,49,-31}, -{26,49,-30}, -{26,49,-29}, -{26,49,-28}, -{26,49,-27}, -{26,49,-26}, -{26,49,-25}, -{26,49,-24}, -{26,49,-23}, -{26,49,-22}, -{26,49,-21}, -{26,49,-20}, -{26,49,-19}, -{26,49,-18}, -{26,49,-17}, -{26,49,-16}, -{26,49,-15}, -{26,49,-14}, -{26,49,-13}, -{26,49,-12}, -{26,49,-11}, -{26,49,-10}, -{26,49,-9}, -{26,49,-8}, -{26,49,-7}, -{26,49,-6}, -{26,49,-5}, -{26,49,-4}, -{26,49,-3}, -{26,49,-2}, -{26,49,-1}, -{26,49,0}, -{26,49,1}, -{26,49,2}, -{26,49,3}, -{26,49,4}, -{26,49,5}, -{26,49,6}, -{26,49,7}, -{26,49,8}, -{26,49,9}, -{26,49,10}, -{26,49,11}, -{26,49,12}, -{26,49,13}, -{26,49,14}, -{26,49,15}, -{26,49,16}, -{26,49,17}, -{26,49,18}, -{26,49,19}, -{26,49,20}, -{26,49,21}, -{26,49,22}, -{26,49,23}, -{26,49,24}, -{26,49,25}, -{26,49,26}, -{26,49,27}, -{26,49,28}, -{26,49,29}, -{26,50,-78}, -{26,50,-77}, -{26,50,-76}, -{26,50,-75}, -{26,50,-74}, -{26,50,-73}, -{26,50,-72}, -{26,50,-71}, -{26,50,-70}, -{26,50,-69}, -{26,50,-68}, -{26,50,-67}, -{26,50,-66}, -{26,50,-65}, -{26,50,-64}, -{26,50,-63}, -{26,50,-62}, -{26,50,-61}, -{26,50,-60}, -{26,50,-59}, -{26,50,-58}, -{26,50,-57}, -{26,50,-56}, -{26,50,-55}, -{26,50,-54}, -{26,50,-53}, -{26,50,-52}, -{26,50,-51}, -{26,50,-50}, -{26,50,-49}, -{26,50,-48}, -{26,50,-47}, -{26,50,-46}, -{26,50,-45}, -{26,50,-44}, -{26,50,-43}, -{26,50,-42}, -{26,50,-41}, -{26,50,-40}, -{26,50,-39}, -{26,50,-38}, -{26,50,-37}, -{26,50,-36}, -{26,50,-35}, -{26,50,-34}, -{26,50,-33}, -{26,50,-32}, -{26,50,-31}, -{26,50,-30}, -{26,50,-29}, -{26,50,-28}, -{26,50,-27}, -{26,50,-26}, -{26,50,-25}, -{26,50,-24}, -{26,50,-23}, -{26,50,-22}, -{26,50,-21}, -{26,50,-20}, -{26,50,-19}, -{26,50,-18}, -{26,50,-17}, -{26,50,-16}, -{26,50,-15}, -{26,50,-14}, -{26,50,-13}, -{26,50,-12}, -{26,50,-11}, -{26,50,-10}, -{26,50,-9}, -{26,50,-8}, -{26,50,-7}, -{26,50,-6}, -{26,50,-5}, -{26,50,-4}, -{26,50,-3}, -{26,50,-2}, -{26,50,-1}, -{26,50,0}, -{26,50,1}, -{26,50,2}, -{26,50,3}, -{26,50,4}, -{26,50,5}, -{26,50,6}, -{26,51,-79}, -{26,51,-78}, -{26,51,-77}, -{26,51,-76}, -{26,51,-75}, -{26,51,-74}, -{26,51,-73}, -{26,51,-72}, -{26,51,-71}, -{26,51,-70}, -{26,51,-69}, -{26,51,-68}, -{26,51,-67}, -{26,51,-66}, -{26,51,-65}, -{26,51,-64}, -{26,51,-63}, -{26,51,-62}, -{26,51,-61}, -{26,51,-60}, -{26,51,-59}, -{26,51,-58}, -{26,51,-57}, -{26,51,-56}, -{26,51,-55}, -{26,51,-54}, -{26,51,-53}, -{26,51,-52}, -{26,51,-51}, -{26,51,-50}, -{26,51,-49}, -{26,51,-48}, -{26,51,-47}, -{26,51,-46}, -{26,51,-45}, -{26,51,-44}, -{26,51,-43}, -{26,51,-42}, -{26,51,-41}, -{26,51,-40}, -{26,51,-39}, -{26,51,-38}, -{26,51,-37}, -{26,51,-36}, -{26,51,-35}, -{26,51,-34}, -{26,51,-33}, -{26,51,-32}, -{26,51,-31}, -{26,51,-30}, -{26,51,-29}, -{26,51,-28}, -{26,51,-27}, -{26,51,-26}, -{26,51,-25}, -{26,51,-24}, -{26,51,-23}, -{26,51,-22}, -{26,51,-21}, -{26,51,-20}, -{26,51,-19}, -{26,51,-18}, -{26,51,-17}, -{26,51,-16}, -{26,51,-15}, -{26,51,-14}, -{26,51,-13}, -{26,51,-12}, -{26,51,-11}, -{26,51,-10}, -{26,51,-9}, -{26,51,-8}, -{26,52,-79}, -{26,52,-78}, -{26,52,-77}, -{26,52,-76}, -{26,52,-75}, -{26,52,-74}, -{26,52,-73}, -{26,52,-72}, -{26,52,-71}, -{26,52,-70}, -{26,52,-69}, -{26,52,-68}, -{26,52,-67}, -{26,52,-66}, -{26,52,-65}, -{26,52,-64}, -{26,52,-63}, -{26,52,-62}, -{26,52,-61}, -{26,52,-60}, -{26,52,-59}, -{26,52,-58}, -{26,52,-57}, -{26,52,-56}, -{26,52,-55}, -{26,52,-54}, -{26,52,-53}, -{26,52,-52}, -{26,52,-51}, -{26,52,-50}, -{26,52,-49}, -{26,52,-48}, -{26,52,-47}, -{26,52,-46}, -{26,52,-45}, -{26,52,-44}, -{26,52,-43}, -{26,52,-42}, -{26,52,-41}, -{26,52,-40}, -{26,52,-39}, -{26,52,-38}, -{26,52,-37}, -{26,52,-36}, -{26,52,-35}, -{26,52,-34}, -{26,52,-33}, -{26,52,-32}, -{26,52,-31}, -{26,52,-30}, -{26,52,-29}, -{26,52,-28}, -{26,52,-27}, -{26,52,-26}, -{26,52,-25}, -{26,52,-24}, -{26,52,-23}, -{26,52,-22}, -{26,52,-21}, -{26,52,-20}, -{26,52,-19}, -{26,52,-18}, -{26,52,-17}, -{26,53,-80}, -{26,53,-79}, -{26,53,-78}, -{26,53,-77}, -{26,53,-76}, -{26,53,-75}, -{26,53,-74}, -{26,53,-73}, -{26,53,-72}, -{26,53,-71}, -{26,53,-70}, -{26,53,-69}, -{26,53,-68}, -{26,53,-67}, -{26,53,-66}, -{26,53,-65}, -{26,53,-64}, -{26,53,-63}, -{26,53,-62}, -{26,53,-61}, -{26,53,-60}, -{26,53,-59}, -{26,53,-58}, -{26,53,-57}, -{26,53,-56}, -{26,53,-55}, -{26,53,-54}, -{26,53,-53}, -{26,53,-52}, -{26,53,-51}, -{26,53,-50}, -{26,53,-49}, -{26,53,-48}, -{26,53,-47}, -{26,53,-46}, -{26,53,-45}, -{26,53,-44}, -{26,53,-43}, -{26,53,-42}, -{26,53,-41}, -{26,53,-40}, -{26,53,-39}, -{26,53,-38}, -{26,53,-37}, -{26,53,-36}, -{26,53,-35}, -{26,53,-34}, -{26,53,-33}, -{26,53,-32}, -{26,53,-31}, -{26,53,-30}, -{26,53,-29}, -{26,53,-28}, -{26,53,-27}, -{26,53,-26}, -{26,54,-81}, -{26,54,-80}, -{26,54,-79}, -{26,54,-78}, -{26,54,-77}, -{26,54,-76}, -{26,54,-75}, -{26,54,-74}, -{26,54,-73}, -{26,54,-72}, -{26,54,-71}, -{26,54,-70}, -{26,54,-69}, -{26,54,-68}, -{26,54,-67}, -{26,54,-66}, -{26,54,-65}, -{26,54,-64}, -{26,54,-63}, -{26,54,-62}, -{26,54,-61}, -{26,54,-60}, -{26,54,-59}, -{26,54,-58}, -{26,54,-57}, -{26,54,-56}, -{26,54,-55}, -{26,54,-54}, -{26,54,-53}, -{26,54,-52}, -{26,54,-51}, -{26,54,-50}, -{26,54,-49}, -{26,54,-48}, -{26,54,-47}, -{26,54,-46}, -{26,54,-45}, -{26,54,-44}, -{26,54,-43}, -{26,54,-42}, -{26,54,-41}, -{26,54,-40}, -{26,54,-39}, -{26,54,-38}, -{26,54,-37}, -{26,54,-36}, -{26,54,-35}, -{26,54,-34}, -{26,54,-33}, -{26,55,-82}, -{26,55,-81}, -{26,55,-80}, -{26,55,-79}, -{26,55,-78}, -{26,55,-77}, -{26,55,-76}, -{26,55,-75}, -{26,55,-74}, -{26,55,-73}, -{26,55,-72}, -{26,55,-71}, -{26,55,-70}, -{26,55,-69}, -{26,55,-68}, -{26,55,-67}, -{26,55,-66}, -{26,55,-65}, -{26,55,-64}, -{26,55,-63}, -{26,55,-62}, -{26,55,-61}, -{26,55,-60}, -{26,55,-59}, -{26,55,-58}, -{26,55,-57}, -{26,55,-56}, -{26,55,-55}, -{26,55,-54}, -{26,55,-53}, -{26,55,-52}, -{26,55,-51}, -{26,55,-50}, -{26,55,-49}, -{26,55,-48}, -{26,55,-47}, -{26,55,-46}, -{26,55,-45}, -{26,55,-44}, -{26,55,-43}, -{26,55,-42}, -{26,55,-41}, -{26,55,-40}, -{26,55,-39}, -{26,56,-83}, -{26,56,-82}, -{26,56,-81}, -{26,56,-80}, -{26,56,-79}, -{26,56,-78}, -{26,56,-77}, -{26,56,-76}, -{26,56,-75}, -{26,56,-74}, -{26,56,-73}, -{26,56,-72}, -{26,56,-71}, -{26,56,-70}, -{26,56,-69}, -{26,56,-68}, -{26,56,-67}, -{26,56,-66}, -{26,56,-65}, -{26,56,-64}, -{26,56,-63}, -{26,56,-62}, -{26,56,-61}, -{26,56,-60}, -{26,56,-59}, -{26,56,-58}, -{26,56,-57}, -{26,56,-56}, -{26,56,-55}, -{26,56,-54}, -{26,56,-53}, -{26,56,-52}, -{26,56,-51}, -{26,56,-50}, -{26,56,-49}, -{26,56,-48}, -{26,56,-47}, -{26,56,-46}, -{26,56,-45}, -{26,57,-84}, -{26,57,-83}, -{26,57,-82}, -{26,57,-81}, -{26,57,-80}, -{26,57,-79}, -{26,57,-78}, -{26,57,-77}, -{26,57,-76}, -{26,57,-75}, -{26,57,-74}, -{26,57,-73}, -{26,57,-72}, -{26,57,-71}, -{26,57,-70}, -{26,57,-69}, -{26,57,-68}, -{26,57,-67}, -{26,57,-66}, -{26,57,-65}, -{26,57,-64}, -{26,57,-63}, -{26,57,-62}, -{26,57,-61}, -{26,57,-60}, -{26,57,-59}, -{26,57,-58}, -{26,57,-57}, -{26,57,-56}, -{26,57,-55}, -{26,57,-54}, -{26,57,-53}, -{26,57,-52}, -{26,57,-51}, -{26,57,-50}, -{26,58,-84}, -{26,58,-83}, -{26,58,-82}, -{26,58,-81}, -{26,58,-80}, -{26,58,-79}, -{26,58,-78}, -{26,58,-77}, -{26,58,-76}, -{26,58,-75}, -{26,58,-74}, -{26,58,-73}, -{26,58,-72}, -{26,58,-71}, -{26,58,-70}, -{26,58,-69}, -{26,58,-68}, -{26,58,-67}, -{26,58,-66}, -{26,58,-65}, -{26,58,-64}, -{26,58,-63}, -{26,58,-62}, -{26,58,-61}, -{26,58,-60}, -{26,58,-59}, -{26,58,-58}, -{26,58,-57}, -{26,58,-56}, -{26,58,-55}, -{26,59,-85}, -{26,59,-84}, -{26,59,-83}, -{26,59,-82}, -{26,59,-81}, -{26,59,-80}, -{26,59,-79}, -{26,59,-78}, -{26,59,-77}, -{26,59,-76}, -{26,59,-75}, -{26,59,-74}, -{26,59,-73}, -{26,59,-72}, -{26,59,-71}, -{26,59,-70}, -{26,59,-69}, -{26,59,-68}, -{26,59,-67}, -{26,59,-66}, -{26,59,-65}, -{26,59,-64}, -{26,59,-63}, -{26,59,-62}, -{26,59,-61}, -{26,59,-60}, -{26,59,-59}, -{26,60,-86}, -{26,60,-85}, -{26,60,-84}, -{26,60,-83}, -{26,60,-82}, -{26,60,-81}, -{26,60,-80}, -{26,60,-79}, -{26,60,-78}, -{26,60,-77}, -{26,60,-76}, -{26,60,-75}, -{26,60,-74}, -{26,60,-73}, -{26,60,-72}, -{26,60,-71}, -{26,60,-70}, -{26,60,-69}, -{26,60,-68}, -{26,60,-67}, -{26,60,-66}, -{26,60,-65}, -{26,60,-64}, -{26,60,-63}, -{26,61,-87}, -{26,61,-86}, -{26,61,-85}, -{26,61,-84}, -{26,61,-83}, -{26,61,-82}, -{26,61,-81}, -{26,61,-80}, -{26,61,-79}, -{26,61,-78}, -{26,61,-77}, -{26,61,-76}, -{26,61,-75}, -{26,61,-74}, -{26,61,-73}, -{26,61,-72}, -{26,61,-71}, -{26,61,-70}, -{26,61,-69}, -{26,61,-68}, -{26,61,-67}, -{26,62,-88}, -{26,62,-87}, -{26,62,-86}, -{26,62,-85}, -{26,62,-84}, -{26,62,-83}, -{26,62,-82}, -{26,62,-81}, -{26,62,-80}, -{26,62,-79}, -{26,62,-78}, -{26,62,-77}, -{26,62,-76}, -{26,62,-75}, -{26,62,-74}, -{26,62,-73}, -{26,62,-72}, -{26,62,-71}, -{26,63,-89}, -{26,63,-88}, -{26,63,-87}, -{26,63,-86}, -{26,63,-85}, -{26,63,-84}, -{26,63,-83}, -{26,63,-82}, -{26,63,-81}, -{26,63,-80}, -{26,63,-79}, -{26,63,-78}, -{26,63,-77}, -{26,63,-76}, -{26,63,-75}, -{26,64,-89}, -{26,64,-88}, -{26,64,-87}, -{26,64,-86}, -{26,64,-85}, -{26,64,-84}, -{26,64,-83}, -{26,64,-82}, -{26,64,-81}, -{26,64,-80}, -{26,64,-79}, -{26,64,-78}, -{26,65,-90}, -{26,65,-89}, -{26,65,-88}, -{26,65,-87}, -{26,65,-86}, -{26,65,-85}, -{26,65,-84}, -{26,65,-83}, -{26,65,-82}, -{26,66,-91}, -{26,66,-90}, -{26,66,-89}, -{26,66,-88}, -{26,66,-87}, -{26,66,-86}, -{26,66,-85}, -{26,67,-92}, -{26,67,-91}, -{26,67,-90}, -{26,67,-89}, -{26,67,-88}, -{26,68,-93}, -{26,68,-92}, -{26,68,-91}, -{26,69,-94}, -{27,-35,31}, -{27,-35,32}, -{27,-35,33}, -{27,-35,34}, -{27,-34,27}, -{27,-34,28}, -{27,-34,29}, -{27,-34,30}, -{27,-34,31}, -{27,-34,32}, -{27,-34,33}, -{27,-34,34}, -{27,-33,23}, -{27,-33,24}, -{27,-33,25}, -{27,-33,26}, -{27,-33,27}, -{27,-33,28}, -{27,-33,29}, -{27,-33,30}, -{27,-33,31}, -{27,-33,32}, -{27,-33,33}, -{27,-33,34}, -{27,-32,20}, -{27,-32,21}, -{27,-32,22}, -{27,-32,23}, -{27,-32,24}, -{27,-32,25}, -{27,-32,26}, -{27,-32,27}, -{27,-32,28}, -{27,-32,29}, -{27,-32,30}, -{27,-32,31}, -{27,-32,32}, -{27,-32,33}, -{27,-32,34}, -{27,-31,18}, -{27,-31,19}, -{27,-31,20}, -{27,-31,21}, -{27,-31,22}, -{27,-31,23}, -{27,-31,24}, -{27,-31,25}, -{27,-31,26}, -{27,-31,27}, -{27,-31,28}, -{27,-31,29}, -{27,-31,30}, -{27,-31,31}, -{27,-31,32}, -{27,-31,33}, -{27,-31,34}, -{27,-30,15}, -{27,-30,16}, -{27,-30,17}, -{27,-30,18}, -{27,-30,19}, -{27,-30,20}, -{27,-30,21}, -{27,-30,22}, -{27,-30,23}, -{27,-30,24}, -{27,-30,25}, -{27,-30,26}, -{27,-30,27}, -{27,-30,28}, -{27,-30,29}, -{27,-30,30}, -{27,-30,31}, -{27,-30,32}, -{27,-30,33}, -{27,-30,34}, -{27,-29,13}, -{27,-29,14}, -{27,-29,15}, -{27,-29,16}, -{27,-29,17}, -{27,-29,18}, -{27,-29,19}, -{27,-29,20}, -{27,-29,21}, -{27,-29,22}, -{27,-29,23}, -{27,-29,24}, -{27,-29,25}, -{27,-29,26}, -{27,-29,27}, -{27,-29,28}, -{27,-29,29}, -{27,-29,30}, -{27,-29,31}, -{27,-29,32}, -{27,-29,33}, -{27,-29,34}, -{27,-28,10}, -{27,-28,11}, -{27,-28,12}, -{27,-28,13}, -{27,-28,14}, -{27,-28,15}, -{27,-28,16}, -{27,-28,17}, -{27,-28,18}, -{27,-28,19}, -{27,-28,20}, -{27,-28,21}, -{27,-28,22}, -{27,-28,23}, -{27,-28,24}, -{27,-28,25}, -{27,-28,26}, -{27,-28,27}, -{27,-28,28}, -{27,-28,29}, -{27,-28,30}, -{27,-28,31}, -{27,-28,32}, -{27,-28,33}, -{27,-28,34}, -{27,-27,8}, -{27,-27,9}, -{27,-27,10}, -{27,-27,11}, -{27,-27,12}, -{27,-27,13}, -{27,-27,14}, -{27,-27,15}, -{27,-27,16}, -{27,-27,17}, -{27,-27,18}, -{27,-27,19}, -{27,-27,20}, -{27,-27,21}, -{27,-27,22}, -{27,-27,23}, -{27,-27,24}, -{27,-27,25}, -{27,-27,26}, -{27,-27,27}, -{27,-27,28}, -{27,-27,29}, -{27,-27,30}, -{27,-27,31}, -{27,-27,32}, -{27,-27,33}, -{27,-27,34}, -{27,-26,6}, -{27,-26,7}, -{27,-26,8}, -{27,-26,9}, -{27,-26,10}, -{27,-26,11}, -{27,-26,12}, -{27,-26,13}, -{27,-26,14}, -{27,-26,15}, -{27,-26,16}, -{27,-26,17}, -{27,-26,18}, -{27,-26,19}, -{27,-26,20}, -{27,-26,21}, -{27,-26,22}, -{27,-26,23}, -{27,-26,24}, -{27,-26,25}, -{27,-26,26}, -{27,-26,27}, -{27,-26,28}, -{27,-26,29}, -{27,-26,30}, -{27,-26,31}, -{27,-26,32}, -{27,-26,33}, -{27,-26,34}, -{27,-25,4}, -{27,-25,5}, -{27,-25,6}, -{27,-25,7}, -{27,-25,8}, -{27,-25,9}, -{27,-25,10}, -{27,-25,11}, -{27,-25,12}, -{27,-25,13}, -{27,-25,14}, -{27,-25,15}, -{27,-25,16}, -{27,-25,17}, -{27,-25,18}, -{27,-25,19}, -{27,-25,20}, -{27,-25,21}, -{27,-25,22}, -{27,-25,23}, -{27,-25,24}, -{27,-25,25}, -{27,-25,26}, -{27,-25,27}, -{27,-25,28}, -{27,-25,29}, -{27,-25,30}, -{27,-25,31}, -{27,-25,32}, -{27,-25,33}, -{27,-25,34}, -{27,-25,35}, -{27,-24,2}, -{27,-24,3}, -{27,-24,4}, -{27,-24,5}, -{27,-24,6}, -{27,-24,7}, -{27,-24,8}, -{27,-24,9}, -{27,-24,10}, -{27,-24,11}, -{27,-24,12}, -{27,-24,13}, -{27,-24,14}, -{27,-24,15}, -{27,-24,16}, -{27,-24,17}, -{27,-24,18}, -{27,-24,19}, -{27,-24,20}, -{27,-24,21}, -{27,-24,22}, -{27,-24,23}, -{27,-24,24}, -{27,-24,25}, -{27,-24,26}, -{27,-24,27}, -{27,-24,28}, -{27,-24,29}, -{27,-24,30}, -{27,-24,31}, -{27,-24,32}, -{27,-24,33}, -{27,-24,34}, -{27,-24,35}, -{27,-23,1}, -{27,-23,2}, -{27,-23,3}, -{27,-23,4}, -{27,-23,5}, -{27,-23,6}, -{27,-23,7}, -{27,-23,8}, -{27,-23,9}, -{27,-23,10}, -{27,-23,11}, -{27,-23,12}, -{27,-23,13}, -{27,-23,14}, -{27,-23,15}, -{27,-23,16}, -{27,-23,17}, -{27,-23,18}, -{27,-23,19}, -{27,-23,20}, -{27,-23,21}, -{27,-23,22}, -{27,-23,23}, -{27,-23,24}, -{27,-23,25}, -{27,-23,26}, -{27,-23,27}, -{27,-23,28}, -{27,-23,29}, -{27,-23,30}, -{27,-23,31}, -{27,-23,32}, -{27,-23,33}, -{27,-23,34}, -{27,-23,35}, -{27,-22,-1}, -{27,-22,0}, -{27,-22,1}, -{27,-22,2}, -{27,-22,3}, -{27,-22,4}, -{27,-22,5}, -{27,-22,6}, -{27,-22,7}, -{27,-22,8}, -{27,-22,9}, -{27,-22,10}, -{27,-22,11}, -{27,-22,12}, -{27,-22,13}, -{27,-22,14}, -{27,-22,15}, -{27,-22,16}, -{27,-22,17}, -{27,-22,18}, -{27,-22,19}, -{27,-22,20}, -{27,-22,21}, -{27,-22,22}, -{27,-22,23}, -{27,-22,24}, -{27,-22,25}, -{27,-22,26}, -{27,-22,27}, -{27,-22,28}, -{27,-22,29}, -{27,-22,30}, -{27,-22,31}, -{27,-22,32}, -{27,-22,33}, -{27,-22,34}, -{27,-22,35}, -{27,-21,-3}, -{27,-21,-2}, -{27,-21,-1}, -{27,-21,0}, -{27,-21,1}, -{27,-21,2}, -{27,-21,3}, -{27,-21,4}, -{27,-21,5}, -{27,-21,6}, -{27,-21,7}, -{27,-21,8}, -{27,-21,9}, -{27,-21,10}, -{27,-21,11}, -{27,-21,12}, -{27,-21,13}, -{27,-21,14}, -{27,-21,15}, -{27,-21,16}, -{27,-21,17}, -{27,-21,18}, -{27,-21,19}, -{27,-21,20}, -{27,-21,21}, -{27,-21,22}, -{27,-21,23}, -{27,-21,24}, -{27,-21,25}, -{27,-21,26}, -{27,-21,27}, -{27,-21,28}, -{27,-21,29}, -{27,-21,30}, -{27,-21,31}, -{27,-21,32}, -{27,-21,33}, -{27,-21,34}, -{27,-21,35}, -{27,-20,-4}, -{27,-20,-3}, -{27,-20,-2}, -{27,-20,-1}, -{27,-20,0}, -{27,-20,1}, -{27,-20,2}, -{27,-20,3}, -{27,-20,4}, -{27,-20,5}, -{27,-20,6}, -{27,-20,7}, -{27,-20,8}, -{27,-20,9}, -{27,-20,10}, -{27,-20,11}, -{27,-20,12}, -{27,-20,13}, -{27,-20,14}, -{27,-20,15}, -{27,-20,16}, -{27,-20,17}, -{27,-20,18}, -{27,-20,19}, -{27,-20,20}, -{27,-20,21}, -{27,-20,22}, -{27,-20,23}, -{27,-20,24}, -{27,-20,25}, -{27,-20,26}, -{27,-20,27}, -{27,-20,28}, -{27,-20,29}, -{27,-20,30}, -{27,-20,31}, -{27,-20,32}, -{27,-20,33}, -{27,-20,34}, -{27,-20,35}, -{27,-19,-6}, -{27,-19,-5}, -{27,-19,-4}, -{27,-19,-3}, -{27,-19,-2}, -{27,-19,-1}, -{27,-19,0}, -{27,-19,1}, -{27,-19,2}, -{27,-19,3}, -{27,-19,4}, -{27,-19,5}, -{27,-19,6}, -{27,-19,7}, -{27,-19,8}, -{27,-19,9}, -{27,-19,10}, -{27,-19,11}, -{27,-19,12}, -{27,-19,13}, -{27,-19,14}, -{27,-19,15}, -{27,-19,16}, -{27,-19,17}, -{27,-19,18}, -{27,-19,19}, -{27,-19,20}, -{27,-19,21}, -{27,-19,22}, -{27,-19,23}, -{27,-19,24}, -{27,-19,25}, -{27,-19,26}, -{27,-19,27}, -{27,-19,28}, -{27,-19,29}, -{27,-19,30}, -{27,-19,31}, -{27,-19,32}, -{27,-19,33}, -{27,-19,34}, -{27,-19,35}, -{27,-18,-7}, -{27,-18,-6}, -{27,-18,-5}, -{27,-18,-4}, -{27,-18,-3}, -{27,-18,-2}, -{27,-18,-1}, -{27,-18,0}, -{27,-18,1}, -{27,-18,2}, -{27,-18,3}, -{27,-18,4}, -{27,-18,5}, -{27,-18,6}, -{27,-18,7}, -{27,-18,8}, -{27,-18,9}, -{27,-18,10}, -{27,-18,11}, -{27,-18,12}, -{27,-18,13}, -{27,-18,14}, -{27,-18,15}, -{27,-18,16}, -{27,-18,17}, -{27,-18,18}, -{27,-18,19}, -{27,-18,20}, -{27,-18,21}, -{27,-18,22}, -{27,-18,23}, -{27,-18,24}, -{27,-18,25}, -{27,-18,26}, -{27,-18,27}, -{27,-18,28}, -{27,-18,29}, -{27,-18,30}, -{27,-18,31}, -{27,-18,32}, -{27,-18,33}, -{27,-18,34}, -{27,-18,35}, -{27,-17,-9}, -{27,-17,-8}, -{27,-17,-7}, -{27,-17,-6}, -{27,-17,-5}, -{27,-17,-4}, -{27,-17,-3}, -{27,-17,-2}, -{27,-17,-1}, -{27,-17,0}, -{27,-17,1}, -{27,-17,2}, -{27,-17,3}, -{27,-17,4}, -{27,-17,5}, -{27,-17,6}, -{27,-17,7}, -{27,-17,8}, -{27,-17,9}, -{27,-17,10}, -{27,-17,11}, -{27,-17,12}, -{27,-17,13}, -{27,-17,14}, -{27,-17,15}, -{27,-17,16}, -{27,-17,17}, -{27,-17,18}, -{27,-17,19}, -{27,-17,20}, -{27,-17,21}, -{27,-17,22}, -{27,-17,23}, -{27,-17,24}, -{27,-17,25}, -{27,-17,26}, -{27,-17,27}, -{27,-17,28}, -{27,-17,29}, -{27,-17,30}, -{27,-17,31}, -{27,-17,32}, -{27,-17,33}, -{27,-17,34}, -{27,-17,35}, -{27,-16,-10}, -{27,-16,-9}, -{27,-16,-8}, -{27,-16,-7}, -{27,-16,-6}, -{27,-16,-5}, -{27,-16,-4}, -{27,-16,-3}, -{27,-16,-2}, -{27,-16,-1}, -{27,-16,0}, -{27,-16,1}, -{27,-16,2}, -{27,-16,3}, -{27,-16,4}, -{27,-16,5}, -{27,-16,6}, -{27,-16,7}, -{27,-16,8}, -{27,-16,9}, -{27,-16,10}, -{27,-16,11}, -{27,-16,12}, -{27,-16,13}, -{27,-16,14}, -{27,-16,15}, -{27,-16,16}, -{27,-16,17}, -{27,-16,18}, -{27,-16,19}, -{27,-16,20}, -{27,-16,21}, -{27,-16,22}, -{27,-16,23}, -{27,-16,24}, -{27,-16,25}, -{27,-16,26}, -{27,-16,27}, -{27,-16,28}, -{27,-16,29}, -{27,-16,30}, -{27,-16,31}, -{27,-16,32}, -{27,-16,33}, -{27,-16,34}, -{27,-16,35}, -{27,-15,-12}, -{27,-15,-11}, -{27,-15,-10}, -{27,-15,-9}, -{27,-15,-8}, -{27,-15,-7}, -{27,-15,-6}, -{27,-15,-5}, -{27,-15,-4}, -{27,-15,-3}, -{27,-15,-2}, -{27,-15,-1}, -{27,-15,0}, -{27,-15,1}, -{27,-15,2}, -{27,-15,3}, -{27,-15,4}, -{27,-15,5}, -{27,-15,6}, -{27,-15,7}, -{27,-15,8}, -{27,-15,9}, -{27,-15,10}, -{27,-15,11}, -{27,-15,12}, -{27,-15,13}, -{27,-15,14}, -{27,-15,15}, -{27,-15,16}, -{27,-15,17}, -{27,-15,18}, -{27,-15,19}, -{27,-15,20}, -{27,-15,21}, -{27,-15,22}, -{27,-15,23}, -{27,-15,24}, -{27,-15,25}, -{27,-15,26}, -{27,-15,27}, -{27,-15,28}, -{27,-15,29}, -{27,-15,30}, -{27,-15,31}, -{27,-15,32}, -{27,-15,33}, -{27,-15,34}, -{27,-15,35}, -{27,-14,-13}, -{27,-14,-12}, -{27,-14,-11}, -{27,-14,-10}, -{27,-14,-9}, -{27,-14,-8}, -{27,-14,-7}, -{27,-14,-6}, -{27,-14,-5}, -{27,-14,-4}, -{27,-14,-3}, -{27,-14,-2}, -{27,-14,-1}, -{27,-14,0}, -{27,-14,1}, -{27,-14,2}, -{27,-14,3}, -{27,-14,4}, -{27,-14,5}, -{27,-14,6}, -{27,-14,7}, -{27,-14,8}, -{27,-14,9}, -{27,-14,10}, -{27,-14,11}, -{27,-14,12}, -{27,-14,13}, -{27,-14,14}, -{27,-14,15}, -{27,-14,16}, -{27,-14,17}, -{27,-14,18}, -{27,-14,19}, -{27,-14,20}, -{27,-14,21}, -{27,-14,22}, -{27,-14,23}, -{27,-14,24}, -{27,-14,25}, -{27,-14,26}, -{27,-14,27}, -{27,-14,28}, -{27,-14,29}, -{27,-14,30}, -{27,-14,31}, -{27,-14,32}, -{27,-14,33}, -{27,-14,34}, -{27,-14,35}, -{27,-13,-15}, -{27,-13,-14}, -{27,-13,-13}, -{27,-13,-12}, -{27,-13,-11}, -{27,-13,-10}, -{27,-13,-9}, -{27,-13,-8}, -{27,-13,-7}, -{27,-13,-6}, -{27,-13,-5}, -{27,-13,-4}, -{27,-13,-3}, -{27,-13,-2}, -{27,-13,-1}, -{27,-13,0}, -{27,-13,1}, -{27,-13,2}, -{27,-13,3}, -{27,-13,4}, -{27,-13,5}, -{27,-13,6}, -{27,-13,7}, -{27,-13,8}, -{27,-13,9}, -{27,-13,10}, -{27,-13,11}, -{27,-13,12}, -{27,-13,13}, -{27,-13,14}, -{27,-13,15}, -{27,-13,16}, -{27,-13,17}, -{27,-13,18}, -{27,-13,19}, -{27,-13,20}, -{27,-13,21}, -{27,-13,22}, -{27,-13,23}, -{27,-13,24}, -{27,-13,25}, -{27,-13,26}, -{27,-13,27}, -{27,-13,28}, -{27,-13,29}, -{27,-13,30}, -{27,-13,31}, -{27,-13,32}, -{27,-13,33}, -{27,-13,34}, -{27,-13,35}, -{27,-12,-16}, -{27,-12,-15}, -{27,-12,-14}, -{27,-12,-13}, -{27,-12,-12}, -{27,-12,-11}, -{27,-12,-10}, -{27,-12,-9}, -{27,-12,-8}, -{27,-12,-7}, -{27,-12,-6}, -{27,-12,-5}, -{27,-12,-4}, -{27,-12,-3}, -{27,-12,-2}, -{27,-12,-1}, -{27,-12,0}, -{27,-12,1}, -{27,-12,2}, -{27,-12,3}, -{27,-12,4}, -{27,-12,5}, -{27,-12,6}, -{27,-12,7}, -{27,-12,8}, -{27,-12,9}, -{27,-12,10}, -{27,-12,11}, -{27,-12,12}, -{27,-12,13}, -{27,-12,14}, -{27,-12,15}, -{27,-12,16}, -{27,-12,17}, -{27,-12,18}, -{27,-12,19}, -{27,-12,20}, -{27,-12,21}, -{27,-12,22}, -{27,-12,23}, -{27,-12,24}, -{27,-12,25}, -{27,-12,26}, -{27,-12,27}, -{27,-12,28}, -{27,-12,29}, -{27,-12,30}, -{27,-12,31}, -{27,-12,32}, -{27,-12,33}, -{27,-12,34}, -{27,-12,35}, -{27,-11,-17}, -{27,-11,-16}, -{27,-11,-15}, -{27,-11,-14}, -{27,-11,-13}, -{27,-11,-12}, -{27,-11,-11}, -{27,-11,-10}, -{27,-11,-9}, -{27,-11,-8}, -{27,-11,-7}, -{27,-11,-6}, -{27,-11,-5}, -{27,-11,-4}, -{27,-11,-3}, -{27,-11,-2}, -{27,-11,-1}, -{27,-11,0}, -{27,-11,1}, -{27,-11,2}, -{27,-11,3}, -{27,-11,4}, -{27,-11,5}, -{27,-11,6}, -{27,-11,7}, -{27,-11,8}, -{27,-11,9}, -{27,-11,10}, -{27,-11,11}, -{27,-11,12}, -{27,-11,13}, -{27,-11,14}, -{27,-11,15}, -{27,-11,16}, -{27,-11,17}, -{27,-11,18}, -{27,-11,19}, -{27,-11,20}, -{27,-11,21}, -{27,-11,22}, -{27,-11,23}, -{27,-11,24}, -{27,-11,25}, -{27,-11,26}, -{27,-11,27}, -{27,-11,28}, -{27,-11,29}, -{27,-11,30}, -{27,-11,31}, -{27,-11,32}, -{27,-11,33}, -{27,-11,34}, -{27,-11,35}, -{27,-10,-19}, -{27,-10,-18}, -{27,-10,-17}, -{27,-10,-16}, -{27,-10,-15}, -{27,-10,-14}, -{27,-10,-13}, -{27,-10,-12}, -{27,-10,-11}, -{27,-10,-10}, -{27,-10,-9}, -{27,-10,-8}, -{27,-10,-7}, -{27,-10,-6}, -{27,-10,-5}, -{27,-10,-4}, -{27,-10,-3}, -{27,-10,-2}, -{27,-10,-1}, -{27,-10,0}, -{27,-10,1}, -{27,-10,2}, -{27,-10,3}, -{27,-10,4}, -{27,-10,5}, -{27,-10,6}, -{27,-10,7}, -{27,-10,8}, -{27,-10,9}, -{27,-10,10}, -{27,-10,11}, -{27,-10,12}, -{27,-10,13}, -{27,-10,14}, -{27,-10,15}, -{27,-10,16}, -{27,-10,17}, -{27,-10,18}, -{27,-10,19}, -{27,-10,20}, -{27,-10,21}, -{27,-10,22}, -{27,-10,23}, -{27,-10,24}, -{27,-10,25}, -{27,-10,26}, -{27,-10,27}, -{27,-10,28}, -{27,-10,29}, -{27,-10,30}, -{27,-10,31}, -{27,-10,32}, -{27,-10,33}, -{27,-10,34}, -{27,-10,35}, -{27,-9,-20}, -{27,-9,-19}, -{27,-9,-18}, -{27,-9,-17}, -{27,-9,-16}, -{27,-9,-15}, -{27,-9,-14}, -{27,-9,-13}, -{27,-9,-12}, -{27,-9,-11}, -{27,-9,-10}, -{27,-9,-9}, -{27,-9,-8}, -{27,-9,-7}, -{27,-9,-6}, -{27,-9,-5}, -{27,-9,-4}, -{27,-9,-3}, -{27,-9,-2}, -{27,-9,-1}, -{27,-9,0}, -{27,-9,1}, -{27,-9,2}, -{27,-9,3}, -{27,-9,4}, -{27,-9,5}, -{27,-9,6}, -{27,-9,7}, -{27,-9,8}, -{27,-9,9}, -{27,-9,10}, -{27,-9,11}, -{27,-9,12}, -{27,-9,13}, -{27,-9,14}, -{27,-9,15}, -{27,-9,16}, -{27,-9,17}, -{27,-9,18}, -{27,-9,19}, -{27,-9,20}, -{27,-9,21}, -{27,-9,22}, -{27,-9,23}, -{27,-9,24}, -{27,-9,25}, -{27,-9,26}, -{27,-9,27}, -{27,-9,28}, -{27,-9,29}, -{27,-9,30}, -{27,-9,31}, -{27,-9,32}, -{27,-9,33}, -{27,-9,34}, -{27,-9,35}, -{27,-8,-21}, -{27,-8,-20}, -{27,-8,-19}, -{27,-8,-18}, -{27,-8,-17}, -{27,-8,-16}, -{27,-8,-15}, -{27,-8,-14}, -{27,-8,-13}, -{27,-8,-12}, -{27,-8,-11}, -{27,-8,-10}, -{27,-8,-9}, -{27,-8,-8}, -{27,-8,-7}, -{27,-8,-6}, -{27,-8,-5}, -{27,-8,-4}, -{27,-8,-3}, -{27,-8,-2}, -{27,-8,-1}, -{27,-8,0}, -{27,-8,1}, -{27,-8,2}, -{27,-8,3}, -{27,-8,4}, -{27,-8,5}, -{27,-8,6}, -{27,-8,7}, -{27,-8,8}, -{27,-8,9}, -{27,-8,10}, -{27,-8,11}, -{27,-8,12}, -{27,-8,13}, -{27,-8,14}, -{27,-8,15}, -{27,-8,16}, -{27,-8,17}, -{27,-8,18}, -{27,-8,19}, -{27,-8,20}, -{27,-8,21}, -{27,-8,22}, -{27,-8,23}, -{27,-8,24}, -{27,-8,25}, -{27,-8,26}, -{27,-8,27}, -{27,-8,28}, -{27,-8,29}, -{27,-8,30}, -{27,-8,31}, -{27,-8,32}, -{27,-8,33}, -{27,-8,34}, -{27,-8,35}, -{27,-7,-22}, -{27,-7,-21}, -{27,-7,-20}, -{27,-7,-19}, -{27,-7,-18}, -{27,-7,-17}, -{27,-7,-16}, -{27,-7,-15}, -{27,-7,-14}, -{27,-7,-13}, -{27,-7,-12}, -{27,-7,-11}, -{27,-7,-10}, -{27,-7,-9}, -{27,-7,-8}, -{27,-7,-7}, -{27,-7,-6}, -{27,-7,-5}, -{27,-7,-4}, -{27,-7,-3}, -{27,-7,-2}, -{27,-7,-1}, -{27,-7,0}, -{27,-7,1}, -{27,-7,2}, -{27,-7,3}, -{27,-7,4}, -{27,-7,5}, -{27,-7,6}, -{27,-7,7}, -{27,-7,8}, -{27,-7,9}, -{27,-7,10}, -{27,-7,11}, -{27,-7,12}, -{27,-7,13}, -{27,-7,14}, -{27,-7,15}, -{27,-7,16}, -{27,-7,17}, -{27,-7,18}, -{27,-7,19}, -{27,-7,20}, -{27,-7,21}, -{27,-7,22}, -{27,-7,23}, -{27,-7,24}, -{27,-7,25}, -{27,-7,26}, -{27,-7,27}, -{27,-7,28}, -{27,-7,29}, -{27,-7,30}, -{27,-7,31}, -{27,-7,32}, -{27,-7,33}, -{27,-7,34}, -{27,-7,35}, -{27,-6,-24}, -{27,-6,-23}, -{27,-6,-22}, -{27,-6,-21}, -{27,-6,-20}, -{27,-6,-19}, -{27,-6,-18}, -{27,-6,-17}, -{27,-6,-16}, -{27,-6,-15}, -{27,-6,-14}, -{27,-6,-13}, -{27,-6,-12}, -{27,-6,-11}, -{27,-6,-10}, -{27,-6,-9}, -{27,-6,-8}, -{27,-6,-7}, -{27,-6,-6}, -{27,-6,-5}, -{27,-6,-4}, -{27,-6,-3}, -{27,-6,-2}, -{27,-6,-1}, -{27,-6,0}, -{27,-6,1}, -{27,-6,2}, -{27,-6,3}, -{27,-6,4}, -{27,-6,5}, -{27,-6,6}, -{27,-6,7}, -{27,-6,8}, -{27,-6,9}, -{27,-6,10}, -{27,-6,11}, -{27,-6,12}, -{27,-6,13}, -{27,-6,14}, -{27,-6,15}, -{27,-6,16}, -{27,-6,17}, -{27,-6,18}, -{27,-6,19}, -{27,-6,20}, -{27,-6,21}, -{27,-6,22}, -{27,-6,23}, -{27,-6,24}, -{27,-6,25}, -{27,-6,26}, -{27,-6,27}, -{27,-6,28}, -{27,-6,29}, -{27,-6,30}, -{27,-6,31}, -{27,-6,32}, -{27,-6,33}, -{27,-6,34}, -{27,-6,35}, -{27,-5,-25}, -{27,-5,-24}, -{27,-5,-23}, -{27,-5,-22}, -{27,-5,-21}, -{27,-5,-20}, -{27,-5,-19}, -{27,-5,-18}, -{27,-5,-17}, -{27,-5,-16}, -{27,-5,-15}, -{27,-5,-14}, -{27,-5,-13}, -{27,-5,-12}, -{27,-5,-11}, -{27,-5,-10}, -{27,-5,-9}, -{27,-5,-8}, -{27,-5,-7}, -{27,-5,-6}, -{27,-5,-5}, -{27,-5,-4}, -{27,-5,-3}, -{27,-5,-2}, -{27,-5,-1}, -{27,-5,0}, -{27,-5,1}, -{27,-5,2}, -{27,-5,3}, -{27,-5,4}, -{27,-5,5}, -{27,-5,6}, -{27,-5,7}, -{27,-5,8}, -{27,-5,9}, -{27,-5,10}, -{27,-5,11}, -{27,-5,12}, -{27,-5,13}, -{27,-5,14}, -{27,-5,15}, -{27,-5,16}, -{27,-5,17}, -{27,-5,18}, -{27,-5,19}, -{27,-5,20}, -{27,-5,21}, -{27,-5,22}, -{27,-5,23}, -{27,-5,24}, -{27,-5,25}, -{27,-5,26}, -{27,-5,27}, -{27,-5,28}, -{27,-5,29}, -{27,-5,30}, -{27,-5,31}, -{27,-5,32}, -{27,-5,33}, -{27,-5,34}, -{27,-5,35}, -{27,-5,36}, -{27,-4,-26}, -{27,-4,-25}, -{27,-4,-24}, -{27,-4,-23}, -{27,-4,-22}, -{27,-4,-21}, -{27,-4,-20}, -{27,-4,-19}, -{27,-4,-18}, -{27,-4,-17}, -{27,-4,-16}, -{27,-4,-15}, -{27,-4,-14}, -{27,-4,-13}, -{27,-4,-12}, -{27,-4,-11}, -{27,-4,-10}, -{27,-4,-9}, -{27,-4,-8}, -{27,-4,-7}, -{27,-4,-6}, -{27,-4,-5}, -{27,-4,-4}, -{27,-4,-3}, -{27,-4,-2}, -{27,-4,-1}, -{27,-4,0}, -{27,-4,1}, -{27,-4,2}, -{27,-4,3}, -{27,-4,4}, -{27,-4,5}, -{27,-4,6}, -{27,-4,7}, -{27,-4,8}, -{27,-4,9}, -{27,-4,10}, -{27,-4,11}, -{27,-4,12}, -{27,-4,13}, -{27,-4,14}, -{27,-4,15}, -{27,-4,16}, -{27,-4,17}, -{27,-4,18}, -{27,-4,19}, -{27,-4,20}, -{27,-4,21}, -{27,-4,22}, -{27,-4,23}, -{27,-4,24}, -{27,-4,25}, -{27,-4,26}, -{27,-4,27}, -{27,-4,28}, -{27,-4,29}, -{27,-4,30}, -{27,-4,31}, -{27,-4,32}, -{27,-4,33}, -{27,-4,34}, -{27,-4,35}, -{27,-4,36}, -{27,-3,-27}, -{27,-3,-26}, -{27,-3,-25}, -{27,-3,-24}, -{27,-3,-23}, -{27,-3,-22}, -{27,-3,-21}, -{27,-3,-20}, -{27,-3,-19}, -{27,-3,-18}, -{27,-3,-17}, -{27,-3,-16}, -{27,-3,-15}, -{27,-3,-14}, -{27,-3,-13}, -{27,-3,-12}, -{27,-3,-11}, -{27,-3,-10}, -{27,-3,-9}, -{27,-3,-8}, -{27,-3,-7}, -{27,-3,-6}, -{27,-3,-5}, -{27,-3,-4}, -{27,-3,-3}, -{27,-3,-2}, -{27,-3,-1}, -{27,-3,0}, -{27,-3,1}, -{27,-3,2}, -{27,-3,3}, -{27,-3,4}, -{27,-3,5}, -{27,-3,6}, -{27,-3,7}, -{27,-3,8}, -{27,-3,9}, -{27,-3,10}, -{27,-3,11}, -{27,-3,12}, -{27,-3,13}, -{27,-3,14}, -{27,-3,15}, -{27,-3,16}, -{27,-3,17}, -{27,-3,18}, -{27,-3,19}, -{27,-3,20}, -{27,-3,21}, -{27,-3,22}, -{27,-3,23}, -{27,-3,24}, -{27,-3,25}, -{27,-3,26}, -{27,-3,27}, -{27,-3,28}, -{27,-3,29}, -{27,-3,30}, -{27,-3,31}, -{27,-3,32}, -{27,-3,33}, -{27,-3,34}, -{27,-3,35}, -{27,-3,36}, -{27,-2,-28}, -{27,-2,-27}, -{27,-2,-26}, -{27,-2,-25}, -{27,-2,-24}, -{27,-2,-23}, -{27,-2,-22}, -{27,-2,-21}, -{27,-2,-20}, -{27,-2,-19}, -{27,-2,-18}, -{27,-2,-17}, -{27,-2,-16}, -{27,-2,-15}, -{27,-2,-14}, -{27,-2,-13}, -{27,-2,-12}, -{27,-2,-11}, -{27,-2,-10}, -{27,-2,-9}, -{27,-2,-8}, -{27,-2,-7}, -{27,-2,-6}, -{27,-2,-5}, -{27,-2,-4}, -{27,-2,-3}, -{27,-2,-2}, -{27,-2,-1}, -{27,-2,0}, -{27,-2,1}, -{27,-2,2}, -{27,-2,3}, -{27,-2,4}, -{27,-2,5}, -{27,-2,6}, -{27,-2,7}, -{27,-2,8}, -{27,-2,9}, -{27,-2,10}, -{27,-2,11}, -{27,-2,12}, -{27,-2,13}, -{27,-2,14}, -{27,-2,15}, -{27,-2,16}, -{27,-2,17}, -{27,-2,18}, -{27,-2,19}, -{27,-2,20}, -{27,-2,21}, -{27,-2,22}, -{27,-2,23}, -{27,-2,24}, -{27,-2,25}, -{27,-2,26}, -{27,-2,27}, -{27,-2,28}, -{27,-2,29}, -{27,-2,30}, -{27,-2,31}, -{27,-2,32}, -{27,-2,33}, -{27,-2,34}, -{27,-2,35}, -{27,-2,36}, -{27,-1,-29}, -{27,-1,-28}, -{27,-1,-27}, -{27,-1,-26}, -{27,-1,-25}, -{27,-1,-24}, -{27,-1,-23}, -{27,-1,-22}, -{27,-1,-21}, -{27,-1,-20}, -{27,-1,-19}, -{27,-1,-18}, -{27,-1,-17}, -{27,-1,-16}, -{27,-1,-15}, -{27,-1,-14}, -{27,-1,-13}, -{27,-1,-12}, -{27,-1,-11}, -{27,-1,-10}, -{27,-1,-9}, -{27,-1,-8}, -{27,-1,-7}, -{27,-1,-6}, -{27,-1,-5}, -{27,-1,-4}, -{27,-1,-3}, -{27,-1,-2}, -{27,-1,-1}, -{27,-1,0}, -{27,-1,1}, -{27,-1,2}, -{27,-1,3}, -{27,-1,4}, -{27,-1,5}, -{27,-1,6}, -{27,-1,7}, -{27,-1,8}, -{27,-1,9}, -{27,-1,10}, -{27,-1,11}, -{27,-1,12}, -{27,-1,13}, -{27,-1,14}, -{27,-1,15}, -{27,-1,16}, -{27,-1,17}, -{27,-1,18}, -{27,-1,19}, -{27,-1,20}, -{27,-1,21}, -{27,-1,22}, -{27,-1,23}, -{27,-1,24}, -{27,-1,25}, -{27,-1,26}, -{27,-1,27}, -{27,-1,28}, -{27,-1,29}, -{27,-1,30}, -{27,-1,31}, -{27,-1,32}, -{27,-1,33}, -{27,-1,34}, -{27,-1,35}, -{27,-1,36}, -{27,0,-31}, -{27,0,-30}, -{27,0,-29}, -{27,0,-28}, -{27,0,-27}, -{27,0,-26}, -{27,0,-25}, -{27,0,-24}, -{27,0,-23}, -{27,0,-22}, -{27,0,-21}, -{27,0,-20}, -{27,0,-19}, -{27,0,-18}, -{27,0,-17}, -{27,0,-16}, -{27,0,-15}, -{27,0,-14}, -{27,0,-13}, -{27,0,-12}, -{27,0,-11}, -{27,0,-10}, -{27,0,-9}, -{27,0,-8}, -{27,0,-7}, -{27,0,-6}, -{27,0,-5}, -{27,0,-4}, -{27,0,-3}, -{27,0,-2}, -{27,0,-1}, -{27,0,0}, -{27,0,1}, -{27,0,2}, -{27,0,3}, -{27,0,4}, -{27,0,5}, -{27,0,6}, -{27,0,7}, -{27,0,8}, -{27,0,9}, -{27,0,10}, -{27,0,11}, -{27,0,12}, -{27,0,13}, -{27,0,14}, -{27,0,15}, -{27,0,16}, -{27,0,17}, -{27,0,18}, -{27,0,19}, -{27,0,20}, -{27,0,21}, -{27,0,22}, -{27,0,23}, -{27,0,24}, -{27,0,25}, -{27,0,26}, -{27,0,27}, -{27,0,28}, -{27,0,29}, -{27,0,30}, -{27,0,31}, -{27,0,32}, -{27,0,33}, -{27,0,34}, -{27,0,35}, -{27,0,36}, -{27,1,-32}, -{27,1,-31}, -{27,1,-30}, -{27,1,-29}, -{27,1,-28}, -{27,1,-27}, -{27,1,-26}, -{27,1,-25}, -{27,1,-24}, -{27,1,-23}, -{27,1,-22}, -{27,1,-21}, -{27,1,-20}, -{27,1,-19}, -{27,1,-18}, -{27,1,-17}, -{27,1,-16}, -{27,1,-15}, -{27,1,-14}, -{27,1,-13}, -{27,1,-12}, -{27,1,-11}, -{27,1,-10}, -{27,1,-9}, -{27,1,-8}, -{27,1,-7}, -{27,1,-6}, -{27,1,-5}, -{27,1,-4}, -{27,1,-3}, -{27,1,-2}, -{27,1,-1}, -{27,1,0}, -{27,1,1}, -{27,1,2}, -{27,1,3}, -{27,1,4}, -{27,1,5}, -{27,1,6}, -{27,1,7}, -{27,1,8}, -{27,1,9}, -{27,1,10}, -{27,1,11}, -{27,1,12}, -{27,1,13}, -{27,1,14}, -{27,1,15}, -{27,1,16}, -{27,1,17}, -{27,1,18}, -{27,1,19}, -{27,1,20}, -{27,1,21}, -{27,1,22}, -{27,1,23}, -{27,1,24}, -{27,1,25}, -{27,1,26}, -{27,1,27}, -{27,1,28}, -{27,1,29}, -{27,1,30}, -{27,1,31}, -{27,1,32}, -{27,1,33}, -{27,1,34}, -{27,1,35}, -{27,1,36}, -{27,2,-33}, -{27,2,-32}, -{27,2,-31}, -{27,2,-30}, -{27,2,-29}, -{27,2,-28}, -{27,2,-27}, -{27,2,-26}, -{27,2,-25}, -{27,2,-24}, -{27,2,-23}, -{27,2,-22}, -{27,2,-21}, -{27,2,-20}, -{27,2,-19}, -{27,2,-18}, -{27,2,-17}, -{27,2,-16}, -{27,2,-15}, -{27,2,-14}, -{27,2,-13}, -{27,2,-12}, -{27,2,-11}, -{27,2,-10}, -{27,2,-9}, -{27,2,-8}, -{27,2,-7}, -{27,2,-6}, -{27,2,-5}, -{27,2,-4}, -{27,2,-3}, -{27,2,-2}, -{27,2,-1}, -{27,2,0}, -{27,2,1}, -{27,2,2}, -{27,2,3}, -{27,2,4}, -{27,2,5}, -{27,2,6}, -{27,2,7}, -{27,2,8}, -{27,2,9}, -{27,2,10}, -{27,2,11}, -{27,2,12}, -{27,2,13}, -{27,2,14}, -{27,2,15}, -{27,2,16}, -{27,2,17}, -{27,2,18}, -{27,2,19}, -{27,2,20}, -{27,2,21}, -{27,2,22}, -{27,2,23}, -{27,2,24}, -{27,2,25}, -{27,2,26}, -{27,2,27}, -{27,2,28}, -{27,2,29}, -{27,2,30}, -{27,2,31}, -{27,2,32}, -{27,2,33}, -{27,2,34}, -{27,2,35}, -{27,2,36}, -{27,3,-34}, -{27,3,-33}, -{27,3,-32}, -{27,3,-31}, -{27,3,-30}, -{27,3,-29}, -{27,3,-28}, -{27,3,-27}, -{27,3,-26}, -{27,3,-25}, -{27,3,-24}, -{27,3,-23}, -{27,3,-22}, -{27,3,-21}, -{27,3,-20}, -{27,3,-19}, -{27,3,-18}, -{27,3,-17}, -{27,3,-16}, -{27,3,-15}, -{27,3,-14}, -{27,3,-13}, -{27,3,-12}, -{27,3,-11}, -{27,3,-10}, -{27,3,-9}, -{27,3,-8}, -{27,3,-7}, -{27,3,-6}, -{27,3,-5}, -{27,3,-4}, -{27,3,-3}, -{27,3,-2}, -{27,3,-1}, -{27,3,0}, -{27,3,1}, -{27,3,2}, -{27,3,3}, -{27,3,4}, -{27,3,5}, -{27,3,6}, -{27,3,7}, -{27,3,8}, -{27,3,9}, -{27,3,10}, -{27,3,11}, -{27,3,12}, -{27,3,13}, -{27,3,14}, -{27,3,15}, -{27,3,16}, -{27,3,17}, -{27,3,18}, -{27,3,19}, -{27,3,20}, -{27,3,21}, -{27,3,22}, -{27,3,23}, -{27,3,24}, -{27,3,25}, -{27,3,26}, -{27,3,27}, -{27,3,28}, -{27,3,29}, -{27,3,30}, -{27,3,31}, -{27,3,32}, -{27,3,33}, -{27,3,34}, -{27,3,35}, -{27,3,36}, -{27,4,-35}, -{27,4,-34}, -{27,4,-33}, -{27,4,-32}, -{27,4,-31}, -{27,4,-30}, -{27,4,-29}, -{27,4,-28}, -{27,4,-27}, -{27,4,-26}, -{27,4,-25}, -{27,4,-24}, -{27,4,-23}, -{27,4,-22}, -{27,4,-21}, -{27,4,-20}, -{27,4,-19}, -{27,4,-18}, -{27,4,-17}, -{27,4,-16}, -{27,4,-15}, -{27,4,-14}, -{27,4,-13}, -{27,4,-12}, -{27,4,-11}, -{27,4,-10}, -{27,4,-9}, -{27,4,-8}, -{27,4,-7}, -{27,4,-6}, -{27,4,-5}, -{27,4,-4}, -{27,4,-3}, -{27,4,-2}, -{27,4,-1}, -{27,4,0}, -{27,4,1}, -{27,4,2}, -{27,4,3}, -{27,4,4}, -{27,4,5}, -{27,4,6}, -{27,4,7}, -{27,4,8}, -{27,4,9}, -{27,4,10}, -{27,4,11}, -{27,4,12}, -{27,4,13}, -{27,4,14}, -{27,4,15}, -{27,4,16}, -{27,4,17}, -{27,4,18}, -{27,4,19}, -{27,4,20}, -{27,4,21}, -{27,4,22}, -{27,4,23}, -{27,4,24}, -{27,4,25}, -{27,4,26}, -{27,4,27}, -{27,4,28}, -{27,4,29}, -{27,4,30}, -{27,4,31}, -{27,4,32}, -{27,4,33}, -{27,4,34}, -{27,4,35}, -{27,4,36}, -{27,5,-36}, -{27,5,-35}, -{27,5,-34}, -{27,5,-33}, -{27,5,-32}, -{27,5,-31}, -{27,5,-30}, -{27,5,-29}, -{27,5,-28}, -{27,5,-27}, -{27,5,-26}, -{27,5,-25}, -{27,5,-24}, -{27,5,-23}, -{27,5,-22}, -{27,5,-21}, -{27,5,-20}, -{27,5,-19}, -{27,5,-18}, -{27,5,-17}, -{27,5,-16}, -{27,5,-15}, -{27,5,-14}, -{27,5,-13}, -{27,5,-12}, -{27,5,-11}, -{27,5,-10}, -{27,5,-9}, -{27,5,-8}, -{27,5,-7}, -{27,5,-6}, -{27,5,-5}, -{27,5,-4}, -{27,5,-3}, -{27,5,-2}, -{27,5,-1}, -{27,5,0}, -{27,5,1}, -{27,5,2}, -{27,5,3}, -{27,5,4}, -{27,5,5}, -{27,5,6}, -{27,5,7}, -{27,5,8}, -{27,5,9}, -{27,5,10}, -{27,5,11}, -{27,5,12}, -{27,5,13}, -{27,5,14}, -{27,5,15}, -{27,5,16}, -{27,5,17}, -{27,5,18}, -{27,5,19}, -{27,5,20}, -{27,5,21}, -{27,5,22}, -{27,5,23}, -{27,5,24}, -{27,5,25}, -{27,5,26}, -{27,5,27}, -{27,5,28}, -{27,5,29}, -{27,5,30}, -{27,5,31}, -{27,5,32}, -{27,5,33}, -{27,5,34}, -{27,5,35}, -{27,5,36}, -{27,6,-37}, -{27,6,-36}, -{27,6,-35}, -{27,6,-34}, -{27,6,-33}, -{27,6,-32}, -{27,6,-31}, -{27,6,-30}, -{27,6,-29}, -{27,6,-28}, -{27,6,-27}, -{27,6,-26}, -{27,6,-25}, -{27,6,-24}, -{27,6,-23}, -{27,6,-22}, -{27,6,-21}, -{27,6,-20}, -{27,6,-19}, -{27,6,-18}, -{27,6,-17}, -{27,6,-16}, -{27,6,-15}, -{27,6,-14}, -{27,6,-13}, -{27,6,-12}, -{27,6,-11}, -{27,6,-10}, -{27,6,-9}, -{27,6,-8}, -{27,6,-7}, -{27,6,-6}, -{27,6,-5}, -{27,6,-4}, -{27,6,-3}, -{27,6,-2}, -{27,6,-1}, -{27,6,0}, -{27,6,1}, -{27,6,2}, -{27,6,3}, -{27,6,4}, -{27,6,5}, -{27,6,6}, -{27,6,7}, -{27,6,8}, -{27,6,9}, -{27,6,10}, -{27,6,11}, -{27,6,12}, -{27,6,13}, -{27,6,14}, -{27,6,15}, -{27,6,16}, -{27,6,17}, -{27,6,18}, -{27,6,19}, -{27,6,20}, -{27,6,21}, -{27,6,22}, -{27,6,23}, -{27,6,24}, -{27,6,25}, -{27,6,26}, -{27,6,27}, -{27,6,28}, -{27,6,29}, -{27,6,30}, -{27,6,31}, -{27,6,32}, -{27,6,33}, -{27,6,34}, -{27,6,35}, -{27,6,36}, -{27,7,-38}, -{27,7,-37}, -{27,7,-36}, -{27,7,-35}, -{27,7,-34}, -{27,7,-33}, -{27,7,-32}, -{27,7,-31}, -{27,7,-30}, -{27,7,-29}, -{27,7,-28}, -{27,7,-27}, -{27,7,-26}, -{27,7,-25}, -{27,7,-24}, -{27,7,-23}, -{27,7,-22}, -{27,7,-21}, -{27,7,-20}, -{27,7,-19}, -{27,7,-18}, -{27,7,-17}, -{27,7,-16}, -{27,7,-15}, -{27,7,-14}, -{27,7,-13}, -{27,7,-12}, -{27,7,-11}, -{27,7,-10}, -{27,7,-9}, -{27,7,-8}, -{27,7,-7}, -{27,7,-6}, -{27,7,-5}, -{27,7,-4}, -{27,7,-3}, -{27,7,-2}, -{27,7,-1}, -{27,7,0}, -{27,7,1}, -{27,7,2}, -{27,7,3}, -{27,7,4}, -{27,7,5}, -{27,7,6}, -{27,7,7}, -{27,7,8}, -{27,7,9}, -{27,7,10}, -{27,7,11}, -{27,7,12}, -{27,7,13}, -{27,7,14}, -{27,7,15}, -{27,7,16}, -{27,7,17}, -{27,7,18}, -{27,7,19}, -{27,7,20}, -{27,7,21}, -{27,7,22}, -{27,7,23}, -{27,7,24}, -{27,7,25}, -{27,7,26}, -{27,7,27}, -{27,7,28}, -{27,7,29}, -{27,7,30}, -{27,7,31}, -{27,7,32}, -{27,7,33}, -{27,7,34}, -{27,7,35}, -{27,7,36}, -{27,8,-39}, -{27,8,-38}, -{27,8,-37}, -{27,8,-36}, -{27,8,-35}, -{27,8,-34}, -{27,8,-33}, -{27,8,-32}, -{27,8,-31}, -{27,8,-30}, -{27,8,-29}, -{27,8,-28}, -{27,8,-27}, -{27,8,-26}, -{27,8,-25}, -{27,8,-24}, -{27,8,-23}, -{27,8,-22}, -{27,8,-21}, -{27,8,-20}, -{27,8,-19}, -{27,8,-18}, -{27,8,-17}, -{27,8,-16}, -{27,8,-15}, -{27,8,-14}, -{27,8,-13}, -{27,8,-12}, -{27,8,-11}, -{27,8,-10}, -{27,8,-9}, -{27,8,-8}, -{27,8,-7}, -{27,8,-6}, -{27,8,-5}, -{27,8,-4}, -{27,8,-3}, -{27,8,-2}, -{27,8,-1}, -{27,8,0}, -{27,8,1}, -{27,8,2}, -{27,8,3}, -{27,8,4}, -{27,8,5}, -{27,8,6}, -{27,8,7}, -{27,8,8}, -{27,8,9}, -{27,8,10}, -{27,8,11}, -{27,8,12}, -{27,8,13}, -{27,8,14}, -{27,8,15}, -{27,8,16}, -{27,8,17}, -{27,8,18}, -{27,8,19}, -{27,8,20}, -{27,8,21}, -{27,8,22}, -{27,8,23}, -{27,8,24}, -{27,8,25}, -{27,8,26}, -{27,8,27}, -{27,8,28}, -{27,8,29}, -{27,8,30}, -{27,8,31}, -{27,8,32}, -{27,8,33}, -{27,8,34}, -{27,8,35}, -{27,8,36}, -{27,9,-40}, -{27,9,-39}, -{27,9,-38}, -{27,9,-37}, -{27,9,-36}, -{27,9,-35}, -{27,9,-34}, -{27,9,-33}, -{27,9,-32}, -{27,9,-31}, -{27,9,-30}, -{27,9,-29}, -{27,9,-28}, -{27,9,-27}, -{27,9,-26}, -{27,9,-25}, -{27,9,-24}, -{27,9,-23}, -{27,9,-22}, -{27,9,-21}, -{27,9,-20}, -{27,9,-19}, -{27,9,-18}, -{27,9,-17}, -{27,9,-16}, -{27,9,-15}, -{27,9,-14}, -{27,9,-13}, -{27,9,-12}, -{27,9,-11}, -{27,9,-10}, -{27,9,-9}, -{27,9,-8}, -{27,9,-7}, -{27,9,-6}, -{27,9,-5}, -{27,9,-4}, -{27,9,-3}, -{27,9,-2}, -{27,9,-1}, -{27,9,0}, -{27,9,1}, -{27,9,2}, -{27,9,3}, -{27,9,4}, -{27,9,5}, -{27,9,6}, -{27,9,7}, -{27,9,8}, -{27,9,9}, -{27,9,10}, -{27,9,11}, -{27,9,12}, -{27,9,13}, -{27,9,14}, -{27,9,15}, -{27,9,16}, -{27,9,17}, -{27,9,18}, -{27,9,19}, -{27,9,20}, -{27,9,21}, -{27,9,22}, -{27,9,23}, -{27,9,24}, -{27,9,25}, -{27,9,26}, -{27,9,27}, -{27,9,28}, -{27,9,29}, -{27,9,30}, -{27,9,31}, -{27,9,32}, -{27,9,33}, -{27,9,34}, -{27,9,35}, -{27,9,36}, -{27,10,-41}, -{27,10,-40}, -{27,10,-39}, -{27,10,-38}, -{27,10,-37}, -{27,10,-36}, -{27,10,-35}, -{27,10,-34}, -{27,10,-33}, -{27,10,-32}, -{27,10,-31}, -{27,10,-30}, -{27,10,-29}, -{27,10,-28}, -{27,10,-27}, -{27,10,-26}, -{27,10,-25}, -{27,10,-24}, -{27,10,-23}, -{27,10,-22}, -{27,10,-21}, -{27,10,-20}, -{27,10,-19}, -{27,10,-18}, -{27,10,-17}, -{27,10,-16}, -{27,10,-15}, -{27,10,-14}, -{27,10,-13}, -{27,10,-12}, -{27,10,-11}, -{27,10,-10}, -{27,10,-9}, -{27,10,-8}, -{27,10,-7}, -{27,10,-6}, -{27,10,-5}, -{27,10,-4}, -{27,10,-3}, -{27,10,-2}, -{27,10,-1}, -{27,10,0}, -{27,10,1}, -{27,10,2}, -{27,10,3}, -{27,10,4}, -{27,10,5}, -{27,10,6}, -{27,10,7}, -{27,10,8}, -{27,10,9}, -{27,10,10}, -{27,10,11}, -{27,10,12}, -{27,10,13}, -{27,10,14}, -{27,10,15}, -{27,10,16}, -{27,10,17}, -{27,10,18}, -{27,10,19}, -{27,10,20}, -{27,10,21}, -{27,10,22}, -{27,10,23}, -{27,10,24}, -{27,10,25}, -{27,10,26}, -{27,10,27}, -{27,10,28}, -{27,10,29}, -{27,10,30}, -{27,10,31}, -{27,10,32}, -{27,10,33}, -{27,10,34}, -{27,10,35}, -{27,10,36}, -{27,11,-42}, -{27,11,-41}, -{27,11,-40}, -{27,11,-39}, -{27,11,-38}, -{27,11,-37}, -{27,11,-36}, -{27,11,-35}, -{27,11,-34}, -{27,11,-33}, -{27,11,-32}, -{27,11,-31}, -{27,11,-30}, -{27,11,-29}, -{27,11,-28}, -{27,11,-27}, -{27,11,-26}, -{27,11,-25}, -{27,11,-24}, -{27,11,-23}, -{27,11,-22}, -{27,11,-21}, -{27,11,-20}, -{27,11,-19}, -{27,11,-18}, -{27,11,-17}, -{27,11,-16}, -{27,11,-15}, -{27,11,-14}, -{27,11,-13}, -{27,11,-12}, -{27,11,-11}, -{27,11,-10}, -{27,11,-9}, -{27,11,-8}, -{27,11,-7}, -{27,11,-6}, -{27,11,-5}, -{27,11,-4}, -{27,11,-3}, -{27,11,-2}, -{27,11,-1}, -{27,11,0}, -{27,11,1}, -{27,11,2}, -{27,11,3}, -{27,11,4}, -{27,11,5}, -{27,11,6}, -{27,11,7}, -{27,11,8}, -{27,11,9}, -{27,11,10}, -{27,11,11}, -{27,11,12}, -{27,11,13}, -{27,11,14}, -{27,11,15}, -{27,11,16}, -{27,11,17}, -{27,11,18}, -{27,11,19}, -{27,11,20}, -{27,11,21}, -{27,11,22}, -{27,11,23}, -{27,11,24}, -{27,11,25}, -{27,11,26}, -{27,11,27}, -{27,11,28}, -{27,11,29}, -{27,11,30}, -{27,11,31}, -{27,11,32}, -{27,11,33}, -{27,11,34}, -{27,11,35}, -{27,11,36}, -{27,11,37}, -{27,12,-43}, -{27,12,-42}, -{27,12,-41}, -{27,12,-40}, -{27,12,-39}, -{27,12,-38}, -{27,12,-37}, -{27,12,-36}, -{27,12,-35}, -{27,12,-34}, -{27,12,-33}, -{27,12,-32}, -{27,12,-31}, -{27,12,-30}, -{27,12,-29}, -{27,12,-28}, -{27,12,-27}, -{27,12,-26}, -{27,12,-25}, -{27,12,-24}, -{27,12,-23}, -{27,12,-22}, -{27,12,-21}, -{27,12,-20}, -{27,12,-19}, -{27,12,-18}, -{27,12,-17}, -{27,12,-16}, -{27,12,-15}, -{27,12,-14}, -{27,12,-13}, -{27,12,-12}, -{27,12,-11}, -{27,12,-10}, -{27,12,-9}, -{27,12,-8}, -{27,12,-7}, -{27,12,-6}, -{27,12,-5}, -{27,12,-4}, -{27,12,-3}, -{27,12,-2}, -{27,12,-1}, -{27,12,0}, -{27,12,1}, -{27,12,2}, -{27,12,3}, -{27,12,4}, -{27,12,5}, -{27,12,6}, -{27,12,7}, -{27,12,8}, -{27,12,9}, -{27,12,10}, -{27,12,11}, -{27,12,12}, -{27,12,13}, -{27,12,14}, -{27,12,15}, -{27,12,16}, -{27,12,17}, -{27,12,18}, -{27,12,19}, -{27,12,20}, -{27,12,21}, -{27,12,22}, -{27,12,23}, -{27,12,24}, -{27,12,25}, -{27,12,26}, -{27,12,27}, -{27,12,28}, -{27,12,29}, -{27,12,30}, -{27,12,31}, -{27,12,32}, -{27,12,33}, -{27,12,34}, -{27,12,35}, -{27,12,36}, -{27,12,37}, -{27,13,-44}, -{27,13,-43}, -{27,13,-42}, -{27,13,-41}, -{27,13,-40}, -{27,13,-39}, -{27,13,-38}, -{27,13,-37}, -{27,13,-36}, -{27,13,-35}, -{27,13,-34}, -{27,13,-33}, -{27,13,-32}, -{27,13,-31}, -{27,13,-30}, -{27,13,-29}, -{27,13,-28}, -{27,13,-27}, -{27,13,-26}, -{27,13,-25}, -{27,13,-24}, -{27,13,-23}, -{27,13,-22}, -{27,13,-21}, -{27,13,-20}, -{27,13,-19}, -{27,13,-18}, -{27,13,-17}, -{27,13,-16}, -{27,13,-15}, -{27,13,-14}, -{27,13,-13}, -{27,13,-12}, -{27,13,-11}, -{27,13,-10}, -{27,13,-9}, -{27,13,-8}, -{27,13,-7}, -{27,13,-6}, -{27,13,-5}, -{27,13,-4}, -{27,13,-3}, -{27,13,-2}, -{27,13,-1}, -{27,13,0}, -{27,13,1}, -{27,13,2}, -{27,13,3}, -{27,13,4}, -{27,13,5}, -{27,13,6}, -{27,13,7}, -{27,13,8}, -{27,13,9}, -{27,13,10}, -{27,13,11}, -{27,13,12}, -{27,13,13}, -{27,13,14}, -{27,13,15}, -{27,13,16}, -{27,13,17}, -{27,13,18}, -{27,13,19}, -{27,13,20}, -{27,13,21}, -{27,13,22}, -{27,13,23}, -{27,13,24}, -{27,13,25}, -{27,13,26}, -{27,13,27}, -{27,13,28}, -{27,13,29}, -{27,13,30}, -{27,13,31}, -{27,13,32}, -{27,13,33}, -{27,13,34}, -{27,13,35}, -{27,13,36}, -{27,13,37}, -{27,14,-45}, -{27,14,-44}, -{27,14,-43}, -{27,14,-42}, -{27,14,-41}, -{27,14,-40}, -{27,14,-39}, -{27,14,-38}, -{27,14,-37}, -{27,14,-36}, -{27,14,-35}, -{27,14,-34}, -{27,14,-33}, -{27,14,-32}, -{27,14,-31}, -{27,14,-30}, -{27,14,-29}, -{27,14,-28}, -{27,14,-27}, -{27,14,-26}, -{27,14,-25}, -{27,14,-24}, -{27,14,-23}, -{27,14,-22}, -{27,14,-21}, -{27,14,-20}, -{27,14,-19}, -{27,14,-18}, -{27,14,-17}, -{27,14,-16}, -{27,14,-15}, -{27,14,-14}, -{27,14,-13}, -{27,14,-12}, -{27,14,-11}, -{27,14,-10}, -{27,14,-9}, -{27,14,-8}, -{27,14,-7}, -{27,14,-6}, -{27,14,-5}, -{27,14,-4}, -{27,14,-3}, -{27,14,-2}, -{27,14,-1}, -{27,14,0}, -{27,14,1}, -{27,14,2}, -{27,14,3}, -{27,14,4}, -{27,14,5}, -{27,14,6}, -{27,14,7}, -{27,14,8}, -{27,14,9}, -{27,14,10}, -{27,14,11}, -{27,14,12}, -{27,14,13}, -{27,14,14}, -{27,14,15}, -{27,14,16}, -{27,14,17}, -{27,14,18}, -{27,14,19}, -{27,14,20}, -{27,14,21}, -{27,14,22}, -{27,14,23}, -{27,14,24}, -{27,14,25}, -{27,14,26}, -{27,14,27}, -{27,14,28}, -{27,14,29}, -{27,14,30}, -{27,14,31}, -{27,14,32}, -{27,14,33}, -{27,14,34}, -{27,14,35}, -{27,14,36}, -{27,14,37}, -{27,15,-46}, -{27,15,-45}, -{27,15,-44}, -{27,15,-43}, -{27,15,-42}, -{27,15,-41}, -{27,15,-40}, -{27,15,-39}, -{27,15,-38}, -{27,15,-37}, -{27,15,-36}, -{27,15,-35}, -{27,15,-34}, -{27,15,-33}, -{27,15,-32}, -{27,15,-31}, -{27,15,-30}, -{27,15,-29}, -{27,15,-28}, -{27,15,-27}, -{27,15,-26}, -{27,15,-25}, -{27,15,-24}, -{27,15,-23}, -{27,15,-22}, -{27,15,-21}, -{27,15,-20}, -{27,15,-19}, -{27,15,-18}, -{27,15,-17}, -{27,15,-16}, -{27,15,-15}, -{27,15,-14}, -{27,15,-13}, -{27,15,-12}, -{27,15,-11}, -{27,15,-10}, -{27,15,-9}, -{27,15,-8}, -{27,15,-7}, -{27,15,-6}, -{27,15,-5}, -{27,15,-4}, -{27,15,-3}, -{27,15,-2}, -{27,15,-1}, -{27,15,0}, -{27,15,1}, -{27,15,2}, -{27,15,3}, -{27,15,4}, -{27,15,5}, -{27,15,6}, -{27,15,7}, -{27,15,8}, -{27,15,9}, -{27,15,10}, -{27,15,11}, -{27,15,12}, -{27,15,13}, -{27,15,14}, -{27,15,15}, -{27,15,16}, -{27,15,17}, -{27,15,18}, -{27,15,19}, -{27,15,20}, -{27,15,21}, -{27,15,22}, -{27,15,23}, -{27,15,24}, -{27,15,25}, -{27,15,26}, -{27,15,27}, -{27,15,28}, -{27,15,29}, -{27,15,30}, -{27,15,31}, -{27,15,32}, -{27,15,33}, -{27,15,34}, -{27,15,35}, -{27,15,36}, -{27,15,37}, -{27,16,-47}, -{27,16,-46}, -{27,16,-45}, -{27,16,-44}, -{27,16,-43}, -{27,16,-42}, -{27,16,-41}, -{27,16,-40}, -{27,16,-39}, -{27,16,-38}, -{27,16,-37}, -{27,16,-36}, -{27,16,-35}, -{27,16,-34}, -{27,16,-33}, -{27,16,-32}, -{27,16,-31}, -{27,16,-30}, -{27,16,-29}, -{27,16,-28}, -{27,16,-27}, -{27,16,-26}, -{27,16,-25}, -{27,16,-24}, -{27,16,-23}, -{27,16,-22}, -{27,16,-21}, -{27,16,-20}, -{27,16,-19}, -{27,16,-18}, -{27,16,-17}, -{27,16,-16}, -{27,16,-15}, -{27,16,-14}, -{27,16,-13}, -{27,16,-12}, -{27,16,-11}, -{27,16,-10}, -{27,16,-9}, -{27,16,-8}, -{27,16,-7}, -{27,16,-6}, -{27,16,-5}, -{27,16,-4}, -{27,16,-3}, -{27,16,-2}, -{27,16,-1}, -{27,16,0}, -{27,16,1}, -{27,16,2}, -{27,16,3}, -{27,16,4}, -{27,16,5}, -{27,16,6}, -{27,16,7}, -{27,16,8}, -{27,16,9}, -{27,16,10}, -{27,16,11}, -{27,16,12}, -{27,16,13}, -{27,16,14}, -{27,16,15}, -{27,16,16}, -{27,16,17}, -{27,16,18}, -{27,16,19}, -{27,16,20}, -{27,16,21}, -{27,16,22}, -{27,16,23}, -{27,16,24}, -{27,16,25}, -{27,16,26}, -{27,16,27}, -{27,16,28}, -{27,16,29}, -{27,16,30}, -{27,16,31}, -{27,16,32}, -{27,16,33}, -{27,16,34}, -{27,16,35}, -{27,16,36}, -{27,16,37}, -{27,17,-48}, -{27,17,-47}, -{27,17,-46}, -{27,17,-45}, -{27,17,-44}, -{27,17,-43}, -{27,17,-42}, -{27,17,-41}, -{27,17,-40}, -{27,17,-39}, -{27,17,-38}, -{27,17,-37}, -{27,17,-36}, -{27,17,-35}, -{27,17,-34}, -{27,17,-33}, -{27,17,-32}, -{27,17,-31}, -{27,17,-30}, -{27,17,-29}, -{27,17,-28}, -{27,17,-27}, -{27,17,-26}, -{27,17,-25}, -{27,17,-24}, -{27,17,-23}, -{27,17,-22}, -{27,17,-21}, -{27,17,-20}, -{27,17,-19}, -{27,17,-18}, -{27,17,-17}, -{27,17,-16}, -{27,17,-15}, -{27,17,-14}, -{27,17,-13}, -{27,17,-12}, -{27,17,-11}, -{27,17,-10}, -{27,17,-9}, -{27,17,-8}, -{27,17,-7}, -{27,17,-6}, -{27,17,-5}, -{27,17,-4}, -{27,17,-3}, -{27,17,-2}, -{27,17,-1}, -{27,17,0}, -{27,17,1}, -{27,17,2}, -{27,17,3}, -{27,17,4}, -{27,17,5}, -{27,17,6}, -{27,17,7}, -{27,17,8}, -{27,17,9}, -{27,17,10}, -{27,17,11}, -{27,17,12}, -{27,17,13}, -{27,17,14}, -{27,17,15}, -{27,17,16}, -{27,17,17}, -{27,17,18}, -{27,17,19}, -{27,17,20}, -{27,17,21}, -{27,17,22}, -{27,17,23}, -{27,17,24}, -{27,17,25}, -{27,17,26}, -{27,17,27}, -{27,17,28}, -{27,17,29}, -{27,17,30}, -{27,17,31}, -{27,17,32}, -{27,17,33}, -{27,17,34}, -{27,17,35}, -{27,17,36}, -{27,17,37}, -{27,18,-49}, -{27,18,-48}, -{27,18,-47}, -{27,18,-46}, -{27,18,-45}, -{27,18,-44}, -{27,18,-43}, -{27,18,-42}, -{27,18,-41}, -{27,18,-40}, -{27,18,-39}, -{27,18,-38}, -{27,18,-37}, -{27,18,-36}, -{27,18,-35}, -{27,18,-34}, -{27,18,-33}, -{27,18,-32}, -{27,18,-31}, -{27,18,-30}, -{27,18,-29}, -{27,18,-28}, -{27,18,-27}, -{27,18,-26}, -{27,18,-25}, -{27,18,-24}, -{27,18,-23}, -{27,18,-22}, -{27,18,-21}, -{27,18,-20}, -{27,18,-19}, -{27,18,-18}, -{27,18,-17}, -{27,18,-16}, -{27,18,-15}, -{27,18,-14}, -{27,18,-13}, -{27,18,-12}, -{27,18,-11}, -{27,18,-10}, -{27,18,-9}, -{27,18,-8}, -{27,18,-7}, -{27,18,-6}, -{27,18,-5}, -{27,18,-4}, -{27,18,-3}, -{27,18,-2}, -{27,18,-1}, -{27,18,0}, -{27,18,1}, -{27,18,2}, -{27,18,3}, -{27,18,4}, -{27,18,5}, -{27,18,6}, -{27,18,7}, -{27,18,8}, -{27,18,9}, -{27,18,10}, -{27,18,11}, -{27,18,12}, -{27,18,13}, -{27,18,14}, -{27,18,15}, -{27,18,16}, -{27,18,17}, -{27,18,18}, -{27,18,19}, -{27,18,20}, -{27,18,21}, -{27,18,22}, -{27,18,23}, -{27,18,24}, -{27,18,25}, -{27,18,26}, -{27,18,27}, -{27,18,28}, -{27,18,29}, -{27,18,30}, -{27,18,31}, -{27,18,32}, -{27,18,33}, -{27,18,34}, -{27,18,35}, -{27,18,36}, -{27,18,37}, -{27,19,-50}, -{27,19,-49}, -{27,19,-48}, -{27,19,-47}, -{27,19,-46}, -{27,19,-45}, -{27,19,-44}, -{27,19,-43}, -{27,19,-42}, -{27,19,-41}, -{27,19,-40}, -{27,19,-39}, -{27,19,-38}, -{27,19,-37}, -{27,19,-36}, -{27,19,-35}, -{27,19,-34}, -{27,19,-33}, -{27,19,-32}, -{27,19,-31}, -{27,19,-30}, -{27,19,-29}, -{27,19,-28}, -{27,19,-27}, -{27,19,-26}, -{27,19,-25}, -{27,19,-24}, -{27,19,-23}, -{27,19,-22}, -{27,19,-21}, -{27,19,-20}, -{27,19,-19}, -{27,19,-18}, -{27,19,-17}, -{27,19,-16}, -{27,19,-15}, -{27,19,-14}, -{27,19,-13}, -{27,19,-12}, -{27,19,-11}, -{27,19,-10}, -{27,19,-9}, -{27,19,-8}, -{27,19,-7}, -{27,19,-6}, -{27,19,-5}, -{27,19,-4}, -{27,19,-3}, -{27,19,-2}, -{27,19,-1}, -{27,19,0}, -{27,19,1}, -{27,19,2}, -{27,19,3}, -{27,19,4}, -{27,19,5}, -{27,19,6}, -{27,19,7}, -{27,19,8}, -{27,19,9}, -{27,19,10}, -{27,19,11}, -{27,19,12}, -{27,19,13}, -{27,19,14}, -{27,19,15}, -{27,19,16}, -{27,19,17}, -{27,19,18}, -{27,19,19}, -{27,19,20}, -{27,19,21}, -{27,19,22}, -{27,19,23}, -{27,19,24}, -{27,19,25}, -{27,19,26}, -{27,19,27}, -{27,19,28}, -{27,19,29}, -{27,19,30}, -{27,19,31}, -{27,19,32}, -{27,19,33}, -{27,19,34}, -{27,19,35}, -{27,19,36}, -{27,19,37}, -{27,20,-51}, -{27,20,-50}, -{27,20,-49}, -{27,20,-48}, -{27,20,-47}, -{27,20,-46}, -{27,20,-45}, -{27,20,-44}, -{27,20,-43}, -{27,20,-42}, -{27,20,-41}, -{27,20,-40}, -{27,20,-39}, -{27,20,-38}, -{27,20,-37}, -{27,20,-36}, -{27,20,-35}, -{27,20,-34}, -{27,20,-33}, -{27,20,-32}, -{27,20,-31}, -{27,20,-30}, -{27,20,-29}, -{27,20,-28}, -{27,20,-27}, -{27,20,-26}, -{27,20,-25}, -{27,20,-24}, -{27,20,-23}, -{27,20,-22}, -{27,20,-21}, -{27,20,-20}, -{27,20,-19}, -{27,20,-18}, -{27,20,-17}, -{27,20,-16}, -{27,20,-15}, -{27,20,-14}, -{27,20,-13}, -{27,20,-12}, -{27,20,-11}, -{27,20,-10}, -{27,20,-9}, -{27,20,-8}, -{27,20,-7}, -{27,20,-6}, -{27,20,-5}, -{27,20,-4}, -{27,20,-3}, -{27,20,-2}, -{27,20,-1}, -{27,20,0}, -{27,20,1}, -{27,20,2}, -{27,20,3}, -{27,20,4}, -{27,20,5}, -{27,20,6}, -{27,20,7}, -{27,20,8}, -{27,20,9}, -{27,20,10}, -{27,20,11}, -{27,20,12}, -{27,20,13}, -{27,20,14}, -{27,20,15}, -{27,20,16}, -{27,20,17}, -{27,20,18}, -{27,20,19}, -{27,20,20}, -{27,20,21}, -{27,20,22}, -{27,20,23}, -{27,20,24}, -{27,20,25}, -{27,20,26}, -{27,20,27}, -{27,20,28}, -{27,20,29}, -{27,20,30}, -{27,20,31}, -{27,20,32}, -{27,20,33}, -{27,20,34}, -{27,20,35}, -{27,20,36}, -{27,20,37}, -{27,21,-52}, -{27,21,-51}, -{27,21,-50}, -{27,21,-49}, -{27,21,-48}, -{27,21,-47}, -{27,21,-46}, -{27,21,-45}, -{27,21,-44}, -{27,21,-43}, -{27,21,-42}, -{27,21,-41}, -{27,21,-40}, -{27,21,-39}, -{27,21,-38}, -{27,21,-37}, -{27,21,-36}, -{27,21,-35}, -{27,21,-34}, -{27,21,-33}, -{27,21,-32}, -{27,21,-31}, -{27,21,-30}, -{27,21,-29}, -{27,21,-28}, -{27,21,-27}, -{27,21,-26}, -{27,21,-25}, -{27,21,-24}, -{27,21,-23}, -{27,21,-22}, -{27,21,-21}, -{27,21,-20}, -{27,21,-19}, -{27,21,-18}, -{27,21,-17}, -{27,21,-16}, -{27,21,-15}, -{27,21,-14}, -{27,21,-13}, -{27,21,-12}, -{27,21,-11}, -{27,21,-10}, -{27,21,-9}, -{27,21,-8}, -{27,21,-7}, -{27,21,-6}, -{27,21,-5}, -{27,21,-4}, -{27,21,-3}, -{27,21,-2}, -{27,21,-1}, -{27,21,0}, -{27,21,1}, -{27,21,2}, -{27,21,3}, -{27,21,4}, -{27,21,5}, -{27,21,6}, -{27,21,7}, -{27,21,8}, -{27,21,9}, -{27,21,10}, -{27,21,11}, -{27,21,12}, -{27,21,13}, -{27,21,14}, -{27,21,15}, -{27,21,16}, -{27,21,17}, -{27,21,18}, -{27,21,19}, -{27,21,20}, -{27,21,21}, -{27,21,22}, -{27,21,23}, -{27,21,24}, -{27,21,25}, -{27,21,26}, -{27,21,27}, -{27,21,28}, -{27,21,29}, -{27,21,30}, -{27,21,31}, -{27,21,32}, -{27,21,33}, -{27,21,34}, -{27,21,35}, -{27,21,36}, -{27,21,37}, -{27,22,-53}, -{27,22,-52}, -{27,22,-51}, -{27,22,-50}, -{27,22,-49}, -{27,22,-48}, -{27,22,-47}, -{27,22,-46}, -{27,22,-45}, -{27,22,-44}, -{27,22,-43}, -{27,22,-42}, -{27,22,-41}, -{27,22,-40}, -{27,22,-39}, -{27,22,-38}, -{27,22,-37}, -{27,22,-36}, -{27,22,-35}, -{27,22,-34}, -{27,22,-33}, -{27,22,-32}, -{27,22,-31}, -{27,22,-30}, -{27,22,-29}, -{27,22,-28}, -{27,22,-27}, -{27,22,-26}, -{27,22,-25}, -{27,22,-24}, -{27,22,-23}, -{27,22,-22}, -{27,22,-21}, -{27,22,-20}, -{27,22,-19}, -{27,22,-18}, -{27,22,-17}, -{27,22,-16}, -{27,22,-15}, -{27,22,-14}, -{27,22,-13}, -{27,22,-12}, -{27,22,-11}, -{27,22,-10}, -{27,22,-9}, -{27,22,-8}, -{27,22,-7}, -{27,22,-6}, -{27,22,-5}, -{27,22,-4}, -{27,22,-3}, -{27,22,-2}, -{27,22,-1}, -{27,22,0}, -{27,22,1}, -{27,22,2}, -{27,22,3}, -{27,22,4}, -{27,22,5}, -{27,22,6}, -{27,22,7}, -{27,22,8}, -{27,22,9}, -{27,22,10}, -{27,22,11}, -{27,22,12}, -{27,22,13}, -{27,22,14}, -{27,22,15}, -{27,22,16}, -{27,22,17}, -{27,22,18}, -{27,22,19}, -{27,22,20}, -{27,22,21}, -{27,22,22}, -{27,22,23}, -{27,22,24}, -{27,22,25}, -{27,22,26}, -{27,22,27}, -{27,22,28}, -{27,22,29}, -{27,22,30}, -{27,22,31}, -{27,22,32}, -{27,22,33}, -{27,22,34}, -{27,22,35}, -{27,22,36}, -{27,22,37}, -{27,23,-54}, -{27,23,-53}, -{27,23,-52}, -{27,23,-51}, -{27,23,-50}, -{27,23,-49}, -{27,23,-48}, -{27,23,-47}, -{27,23,-46}, -{27,23,-45}, -{27,23,-44}, -{27,23,-43}, -{27,23,-42}, -{27,23,-41}, -{27,23,-40}, -{27,23,-39}, -{27,23,-38}, -{27,23,-37}, -{27,23,-36}, -{27,23,-35}, -{27,23,-34}, -{27,23,-33}, -{27,23,-32}, -{27,23,-31}, -{27,23,-30}, -{27,23,-29}, -{27,23,-28}, -{27,23,-27}, -{27,23,-26}, -{27,23,-25}, -{27,23,-24}, -{27,23,-23}, -{27,23,-22}, -{27,23,-21}, -{27,23,-20}, -{27,23,-19}, -{27,23,-18}, -{27,23,-17}, -{27,23,-16}, -{27,23,-15}, -{27,23,-14}, -{27,23,-13}, -{27,23,-12}, -{27,23,-11}, -{27,23,-10}, -{27,23,-9}, -{27,23,-8}, -{27,23,-7}, -{27,23,-6}, -{27,23,-5}, -{27,23,-4}, -{27,23,-3}, -{27,23,-2}, -{27,23,-1}, -{27,23,0}, -{27,23,1}, -{27,23,2}, -{27,23,3}, -{27,23,4}, -{27,23,5}, -{27,23,6}, -{27,23,7}, -{27,23,8}, -{27,23,9}, -{27,23,10}, -{27,23,11}, -{27,23,12}, -{27,23,13}, -{27,23,14}, -{27,23,15}, -{27,23,16}, -{27,23,17}, -{27,23,18}, -{27,23,19}, -{27,23,20}, -{27,23,21}, -{27,23,22}, -{27,23,23}, -{27,23,24}, -{27,23,25}, -{27,23,26}, -{27,23,27}, -{27,23,28}, -{27,23,29}, -{27,23,30}, -{27,23,31}, -{27,23,32}, -{27,23,33}, -{27,23,34}, -{27,23,35}, -{27,23,36}, -{27,23,37}, -{27,24,-55}, -{27,24,-54}, -{27,24,-53}, -{27,24,-52}, -{27,24,-51}, -{27,24,-50}, -{27,24,-49}, -{27,24,-48}, -{27,24,-47}, -{27,24,-46}, -{27,24,-45}, -{27,24,-44}, -{27,24,-43}, -{27,24,-42}, -{27,24,-41}, -{27,24,-40}, -{27,24,-39}, -{27,24,-38}, -{27,24,-37}, -{27,24,-36}, -{27,24,-35}, -{27,24,-34}, -{27,24,-33}, -{27,24,-32}, -{27,24,-31}, -{27,24,-30}, -{27,24,-29}, -{27,24,-28}, -{27,24,-27}, -{27,24,-26}, -{27,24,-25}, -{27,24,-24}, -{27,24,-23}, -{27,24,-22}, -{27,24,-21}, -{27,24,-20}, -{27,24,-19}, -{27,24,-18}, -{27,24,-17}, -{27,24,-16}, -{27,24,-15}, -{27,24,-14}, -{27,24,-13}, -{27,24,-12}, -{27,24,-11}, -{27,24,-10}, -{27,24,-9}, -{27,24,-8}, -{27,24,-7}, -{27,24,-6}, -{27,24,-5}, -{27,24,-4}, -{27,24,-3}, -{27,24,-2}, -{27,24,-1}, -{27,24,0}, -{27,24,1}, -{27,24,2}, -{27,24,3}, -{27,24,4}, -{27,24,5}, -{27,24,6}, -{27,24,7}, -{27,24,8}, -{27,24,9}, -{27,24,10}, -{27,24,11}, -{27,24,12}, -{27,24,13}, -{27,24,14}, -{27,24,15}, -{27,24,16}, -{27,24,17}, -{27,24,18}, -{27,24,19}, -{27,24,20}, -{27,24,21}, -{27,24,22}, -{27,24,23}, -{27,24,24}, -{27,24,25}, -{27,24,26}, -{27,24,27}, -{27,24,28}, -{27,24,29}, -{27,24,30}, -{27,24,31}, -{27,24,32}, -{27,24,33}, -{27,24,34}, -{27,24,35}, -{27,24,36}, -{27,24,37}, -{27,25,-56}, -{27,25,-55}, -{27,25,-54}, -{27,25,-53}, -{27,25,-52}, -{27,25,-51}, -{27,25,-50}, -{27,25,-49}, -{27,25,-48}, -{27,25,-47}, -{27,25,-46}, -{27,25,-45}, -{27,25,-44}, -{27,25,-43}, -{27,25,-42}, -{27,25,-41}, -{27,25,-40}, -{27,25,-39}, -{27,25,-38}, -{27,25,-37}, -{27,25,-36}, -{27,25,-35}, -{27,25,-34}, -{27,25,-33}, -{27,25,-32}, -{27,25,-31}, -{27,25,-30}, -{27,25,-29}, -{27,25,-28}, -{27,25,-27}, -{27,25,-26}, -{27,25,-25}, -{27,25,-24}, -{27,25,-23}, -{27,25,-22}, -{27,25,-21}, -{27,25,-20}, -{27,25,-19}, -{27,25,-18}, -{27,25,-17}, -{27,25,-16}, -{27,25,-15}, -{27,25,-14}, -{27,25,-13}, -{27,25,-12}, -{27,25,-11}, -{27,25,-10}, -{27,25,-9}, -{27,25,-8}, -{27,25,-7}, -{27,25,-6}, -{27,25,-5}, -{27,25,-4}, -{27,25,-3}, -{27,25,-2}, -{27,25,-1}, -{27,25,0}, -{27,25,1}, -{27,25,2}, -{27,25,3}, -{27,25,4}, -{27,25,5}, -{27,25,6}, -{27,25,7}, -{27,25,8}, -{27,25,9}, -{27,25,10}, -{27,25,11}, -{27,25,12}, -{27,25,13}, -{27,25,14}, -{27,25,15}, -{27,25,16}, -{27,25,17}, -{27,25,18}, -{27,25,19}, -{27,25,20}, -{27,25,21}, -{27,25,22}, -{27,25,23}, -{27,25,24}, -{27,25,25}, -{27,25,26}, -{27,25,27}, -{27,25,28}, -{27,25,29}, -{27,25,30}, -{27,25,31}, -{27,25,32}, -{27,25,33}, -{27,25,34}, -{27,25,35}, -{27,25,36}, -{27,25,37}, -{27,25,38}, -{27,26,-57}, -{27,26,-56}, -{27,26,-55}, -{27,26,-54}, -{27,26,-53}, -{27,26,-52}, -{27,26,-51}, -{27,26,-50}, -{27,26,-49}, -{27,26,-48}, -{27,26,-47}, -{27,26,-46}, -{27,26,-45}, -{27,26,-44}, -{27,26,-43}, -{27,26,-42}, -{27,26,-41}, -{27,26,-40}, -{27,26,-39}, -{27,26,-38}, -{27,26,-37}, -{27,26,-36}, -{27,26,-35}, -{27,26,-34}, -{27,26,-33}, -{27,26,-32}, -{27,26,-31}, -{27,26,-30}, -{27,26,-29}, -{27,26,-28}, -{27,26,-27}, -{27,26,-26}, -{27,26,-25}, -{27,26,-24}, -{27,26,-23}, -{27,26,-22}, -{27,26,-21}, -{27,26,-20}, -{27,26,-19}, -{27,26,-18}, -{27,26,-17}, -{27,26,-16}, -{27,26,-15}, -{27,26,-14}, -{27,26,-13}, -{27,26,-12}, -{27,26,-11}, -{27,26,-10}, -{27,26,-9}, -{27,26,-8}, -{27,26,-7}, -{27,26,-6}, -{27,26,-5}, -{27,26,-4}, -{27,26,-3}, -{27,26,-2}, -{27,26,-1}, -{27,26,0}, -{27,26,1}, -{27,26,2}, -{27,26,3}, -{27,26,4}, -{27,26,5}, -{27,26,6}, -{27,26,7}, -{27,26,8}, -{27,26,9}, -{27,26,10}, -{27,26,11}, -{27,26,12}, -{27,26,13}, -{27,26,14}, -{27,26,15}, -{27,26,16}, -{27,26,17}, -{27,26,18}, -{27,26,19}, -{27,26,20}, -{27,26,21}, -{27,26,22}, -{27,26,23}, -{27,26,24}, -{27,26,25}, -{27,26,26}, -{27,26,27}, -{27,26,28}, -{27,26,29}, -{27,26,30}, -{27,26,31}, -{27,26,32}, -{27,26,33}, -{27,26,34}, -{27,26,35}, -{27,26,36}, -{27,26,37}, -{27,26,38}, -{27,27,-58}, -{27,27,-57}, -{27,27,-56}, -{27,27,-55}, -{27,27,-54}, -{27,27,-53}, -{27,27,-52}, -{27,27,-51}, -{27,27,-50}, -{27,27,-49}, -{27,27,-48}, -{27,27,-47}, -{27,27,-46}, -{27,27,-45}, -{27,27,-44}, -{27,27,-43}, -{27,27,-42}, -{27,27,-41}, -{27,27,-40}, -{27,27,-39}, -{27,27,-38}, -{27,27,-37}, -{27,27,-36}, -{27,27,-35}, -{27,27,-34}, -{27,27,-33}, -{27,27,-32}, -{27,27,-31}, -{27,27,-30}, -{27,27,-29}, -{27,27,-28}, -{27,27,-27}, -{27,27,-26}, -{27,27,-25}, -{27,27,-24}, -{27,27,-23}, -{27,27,-22}, -{27,27,-21}, -{27,27,-20}, -{27,27,-19}, -{27,27,-18}, -{27,27,-17}, -{27,27,-16}, -{27,27,-15}, -{27,27,-14}, -{27,27,-13}, -{27,27,-12}, -{27,27,-11}, -{27,27,-10}, -{27,27,-9}, -{27,27,-8}, -{27,27,-7}, -{27,27,-6}, -{27,27,-5}, -{27,27,-4}, -{27,27,-3}, -{27,27,-2}, -{27,27,-1}, -{27,27,0}, -{27,27,1}, -{27,27,2}, -{27,27,3}, -{27,27,4}, -{27,27,5}, -{27,27,6}, -{27,27,7}, -{27,27,8}, -{27,27,9}, -{27,27,10}, -{27,27,11}, -{27,27,12}, -{27,27,13}, -{27,27,14}, -{27,27,15}, -{27,27,16}, -{27,27,17}, -{27,27,18}, -{27,27,19}, -{27,27,20}, -{27,27,21}, -{27,27,22}, -{27,27,23}, -{27,27,24}, -{27,27,25}, -{27,27,26}, -{27,27,27}, -{27,27,28}, -{27,27,29}, -{27,27,30}, -{27,27,31}, -{27,27,32}, -{27,27,33}, -{27,27,34}, -{27,27,35}, -{27,27,36}, -{27,27,37}, -{27,27,38}, -{27,28,-59}, -{27,28,-58}, -{27,28,-57}, -{27,28,-56}, -{27,28,-55}, -{27,28,-54}, -{27,28,-53}, -{27,28,-52}, -{27,28,-51}, -{27,28,-50}, -{27,28,-49}, -{27,28,-48}, -{27,28,-47}, -{27,28,-46}, -{27,28,-45}, -{27,28,-44}, -{27,28,-43}, -{27,28,-42}, -{27,28,-41}, -{27,28,-40}, -{27,28,-39}, -{27,28,-38}, -{27,28,-37}, -{27,28,-36}, -{27,28,-35}, -{27,28,-34}, -{27,28,-33}, -{27,28,-32}, -{27,28,-31}, -{27,28,-30}, -{27,28,-29}, -{27,28,-28}, -{27,28,-27}, -{27,28,-26}, -{27,28,-25}, -{27,28,-24}, -{27,28,-23}, -{27,28,-22}, -{27,28,-21}, -{27,28,-20}, -{27,28,-19}, -{27,28,-18}, -{27,28,-17}, -{27,28,-16}, -{27,28,-15}, -{27,28,-14}, -{27,28,-13}, -{27,28,-12}, -{27,28,-11}, -{27,28,-10}, -{27,28,-9}, -{27,28,-8}, -{27,28,-7}, -{27,28,-6}, -{27,28,-5}, -{27,28,-4}, -{27,28,-3}, -{27,28,-2}, -{27,28,-1}, -{27,28,0}, -{27,28,1}, -{27,28,2}, -{27,28,3}, -{27,28,4}, -{27,28,5}, -{27,28,6}, -{27,28,7}, -{27,28,8}, -{27,28,9}, -{27,28,10}, -{27,28,11}, -{27,28,12}, -{27,28,13}, -{27,28,14}, -{27,28,15}, -{27,28,16}, -{27,28,17}, -{27,28,18}, -{27,28,19}, -{27,28,20}, -{27,28,21}, -{27,28,22}, -{27,28,23}, -{27,28,24}, -{27,28,25}, -{27,28,26}, -{27,28,27}, -{27,28,28}, -{27,28,29}, -{27,28,30}, -{27,28,31}, -{27,28,32}, -{27,28,33}, -{27,28,34}, -{27,28,35}, -{27,28,36}, -{27,28,37}, -{27,28,38}, -{27,29,-60}, -{27,29,-59}, -{27,29,-58}, -{27,29,-57}, -{27,29,-56}, -{27,29,-55}, -{27,29,-54}, -{27,29,-53}, -{27,29,-52}, -{27,29,-51}, -{27,29,-50}, -{27,29,-49}, -{27,29,-48}, -{27,29,-47}, -{27,29,-46}, -{27,29,-45}, -{27,29,-44}, -{27,29,-43}, -{27,29,-42}, -{27,29,-41}, -{27,29,-40}, -{27,29,-39}, -{27,29,-38}, -{27,29,-37}, -{27,29,-36}, -{27,29,-35}, -{27,29,-34}, -{27,29,-33}, -{27,29,-32}, -{27,29,-31}, -{27,29,-30}, -{27,29,-29}, -{27,29,-28}, -{27,29,-27}, -{27,29,-26}, -{27,29,-25}, -{27,29,-24}, -{27,29,-23}, -{27,29,-22}, -{27,29,-21}, -{27,29,-20}, -{27,29,-19}, -{27,29,-18}, -{27,29,-17}, -{27,29,-16}, -{27,29,-15}, -{27,29,-14}, -{27,29,-13}, -{27,29,-12}, -{27,29,-11}, -{27,29,-10}, -{27,29,-9}, -{27,29,-8}, -{27,29,-7}, -{27,29,-6}, -{27,29,-5}, -{27,29,-4}, -{27,29,-3}, -{27,29,-2}, -{27,29,-1}, -{27,29,0}, -{27,29,1}, -{27,29,2}, -{27,29,3}, -{27,29,4}, -{27,29,5}, -{27,29,6}, -{27,29,7}, -{27,29,8}, -{27,29,9}, -{27,29,10}, -{27,29,11}, -{27,29,12}, -{27,29,13}, -{27,29,14}, -{27,29,15}, -{27,29,16}, -{27,29,17}, -{27,29,18}, -{27,29,19}, -{27,29,20}, -{27,29,21}, -{27,29,22}, -{27,29,23}, -{27,29,24}, -{27,29,25}, -{27,29,26}, -{27,29,27}, -{27,29,28}, -{27,29,29}, -{27,29,30}, -{27,29,31}, -{27,29,32}, -{27,29,33}, -{27,29,34}, -{27,29,35}, -{27,29,36}, -{27,29,37}, -{27,29,38}, -{27,30,-61}, -{27,30,-60}, -{27,30,-59}, -{27,30,-58}, -{27,30,-57}, -{27,30,-56}, -{27,30,-55}, -{27,30,-54}, -{27,30,-53}, -{27,30,-52}, -{27,30,-51}, -{27,30,-50}, -{27,30,-49}, -{27,30,-48}, -{27,30,-47}, -{27,30,-46}, -{27,30,-45}, -{27,30,-44}, -{27,30,-43}, -{27,30,-42}, -{27,30,-41}, -{27,30,-40}, -{27,30,-39}, -{27,30,-38}, -{27,30,-37}, -{27,30,-36}, -{27,30,-35}, -{27,30,-34}, -{27,30,-33}, -{27,30,-32}, -{27,30,-31}, -{27,30,-30}, -{27,30,-29}, -{27,30,-28}, -{27,30,-27}, -{27,30,-26}, -{27,30,-25}, -{27,30,-24}, -{27,30,-23}, -{27,30,-22}, -{27,30,-21}, -{27,30,-20}, -{27,30,-19}, -{27,30,-18}, -{27,30,-17}, -{27,30,-16}, -{27,30,-15}, -{27,30,-14}, -{27,30,-13}, -{27,30,-12}, -{27,30,-11}, -{27,30,-10}, -{27,30,-9}, -{27,30,-8}, -{27,30,-7}, -{27,30,-6}, -{27,30,-5}, -{27,30,-4}, -{27,30,-3}, -{27,30,-2}, -{27,30,-1}, -{27,30,0}, -{27,30,1}, -{27,30,2}, -{27,30,3}, -{27,30,4}, -{27,30,5}, -{27,30,6}, -{27,30,7}, -{27,30,8}, -{27,30,9}, -{27,30,10}, -{27,30,11}, -{27,30,12}, -{27,30,13}, -{27,30,14}, -{27,30,15}, -{27,30,16}, -{27,30,17}, -{27,30,18}, -{27,30,19}, -{27,30,20}, -{27,30,21}, -{27,30,22}, -{27,30,23}, -{27,30,24}, -{27,30,25}, -{27,30,26}, -{27,30,27}, -{27,30,28}, -{27,30,29}, -{27,30,30}, -{27,30,31}, -{27,30,32}, -{27,30,33}, -{27,30,34}, -{27,30,35}, -{27,30,36}, -{27,30,37}, -{27,30,38}, -{27,31,-62}, -{27,31,-61}, -{27,31,-60}, -{27,31,-59}, -{27,31,-58}, -{27,31,-57}, -{27,31,-56}, -{27,31,-55}, -{27,31,-54}, -{27,31,-53}, -{27,31,-52}, -{27,31,-51}, -{27,31,-50}, -{27,31,-49}, -{27,31,-48}, -{27,31,-47}, -{27,31,-46}, -{27,31,-45}, -{27,31,-44}, -{27,31,-43}, -{27,31,-42}, -{27,31,-41}, -{27,31,-40}, -{27,31,-39}, -{27,31,-38}, -{27,31,-37}, -{27,31,-36}, -{27,31,-35}, -{27,31,-34}, -{27,31,-33}, -{27,31,-32}, -{27,31,-31}, -{27,31,-30}, -{27,31,-29}, -{27,31,-28}, -{27,31,-27}, -{27,31,-26}, -{27,31,-25}, -{27,31,-24}, -{27,31,-23}, -{27,31,-22}, -{27,31,-21}, -{27,31,-20}, -{27,31,-19}, -{27,31,-18}, -{27,31,-17}, -{27,31,-16}, -{27,31,-15}, -{27,31,-14}, -{27,31,-13}, -{27,31,-12}, -{27,31,-11}, -{27,31,-10}, -{27,31,-9}, -{27,31,-8}, -{27,31,-7}, -{27,31,-6}, -{27,31,-5}, -{27,31,-4}, -{27,31,-3}, -{27,31,-2}, -{27,31,-1}, -{27,31,0}, -{27,31,1}, -{27,31,2}, -{27,31,3}, -{27,31,4}, -{27,31,5}, -{27,31,6}, -{27,31,7}, -{27,31,8}, -{27,31,9}, -{27,31,10}, -{27,31,11}, -{27,31,12}, -{27,31,13}, -{27,31,14}, -{27,31,15}, -{27,31,16}, -{27,31,17}, -{27,31,18}, -{27,31,19}, -{27,31,20}, -{27,31,21}, -{27,31,22}, -{27,31,23}, -{27,31,24}, -{27,31,25}, -{27,31,26}, -{27,31,27}, -{27,31,28}, -{27,31,29}, -{27,31,30}, -{27,31,31}, -{27,31,32}, -{27,31,33}, -{27,31,34}, -{27,31,35}, -{27,31,36}, -{27,31,37}, -{27,31,38}, -{27,32,-63}, -{27,32,-62}, -{27,32,-61}, -{27,32,-60}, -{27,32,-59}, -{27,32,-58}, -{27,32,-57}, -{27,32,-56}, -{27,32,-55}, -{27,32,-54}, -{27,32,-53}, -{27,32,-52}, -{27,32,-51}, -{27,32,-50}, -{27,32,-49}, -{27,32,-48}, -{27,32,-47}, -{27,32,-46}, -{27,32,-45}, -{27,32,-44}, -{27,32,-43}, -{27,32,-42}, -{27,32,-41}, -{27,32,-40}, -{27,32,-39}, -{27,32,-38}, -{27,32,-37}, -{27,32,-36}, -{27,32,-35}, -{27,32,-34}, -{27,32,-33}, -{27,32,-32}, -{27,32,-31}, -{27,32,-30}, -{27,32,-29}, -{27,32,-28}, -{27,32,-27}, -{27,32,-26}, -{27,32,-25}, -{27,32,-24}, -{27,32,-23}, -{27,32,-22}, -{27,32,-21}, -{27,32,-20}, -{27,32,-19}, -{27,32,-18}, -{27,32,-17}, -{27,32,-16}, -{27,32,-15}, -{27,32,-14}, -{27,32,-13}, -{27,32,-12}, -{27,32,-11}, -{27,32,-10}, -{27,32,-9}, -{27,32,-8}, -{27,32,-7}, -{27,32,-6}, -{27,32,-5}, -{27,32,-4}, -{27,32,-3}, -{27,32,-2}, -{27,32,-1}, -{27,32,0}, -{27,32,1}, -{27,32,2}, -{27,32,3}, -{27,32,4}, -{27,32,5}, -{27,32,6}, -{27,32,7}, -{27,32,8}, -{27,32,9}, -{27,32,10}, -{27,32,11}, -{27,32,12}, -{27,32,13}, -{27,32,14}, -{27,32,15}, -{27,32,16}, -{27,32,17}, -{27,32,18}, -{27,32,19}, -{27,32,20}, -{27,32,21}, -{27,32,22}, -{27,32,23}, -{27,32,24}, -{27,32,25}, -{27,32,26}, -{27,32,27}, -{27,32,28}, -{27,32,29}, -{27,32,30}, -{27,32,31}, -{27,32,32}, -{27,32,33}, -{27,32,34}, -{27,32,35}, -{27,32,36}, -{27,32,37}, -{27,32,38}, -{27,33,-64}, -{27,33,-63}, -{27,33,-62}, -{27,33,-61}, -{27,33,-60}, -{27,33,-59}, -{27,33,-58}, -{27,33,-57}, -{27,33,-56}, -{27,33,-55}, -{27,33,-54}, -{27,33,-53}, -{27,33,-52}, -{27,33,-51}, -{27,33,-50}, -{27,33,-49}, -{27,33,-48}, -{27,33,-47}, -{27,33,-46}, -{27,33,-45}, -{27,33,-44}, -{27,33,-43}, -{27,33,-42}, -{27,33,-41}, -{27,33,-40}, -{27,33,-39}, -{27,33,-38}, -{27,33,-37}, -{27,33,-36}, -{27,33,-35}, -{27,33,-34}, -{27,33,-33}, -{27,33,-32}, -{27,33,-31}, -{27,33,-30}, -{27,33,-29}, -{27,33,-28}, -{27,33,-27}, -{27,33,-26}, -{27,33,-25}, -{27,33,-24}, -{27,33,-23}, -{27,33,-22}, -{27,33,-21}, -{27,33,-20}, -{27,33,-19}, -{27,33,-18}, -{27,33,-17}, -{27,33,-16}, -{27,33,-15}, -{27,33,-14}, -{27,33,-13}, -{27,33,-12}, -{27,33,-11}, -{27,33,-10}, -{27,33,-9}, -{27,33,-8}, -{27,33,-7}, -{27,33,-6}, -{27,33,-5}, -{27,33,-4}, -{27,33,-3}, -{27,33,-2}, -{27,33,-1}, -{27,33,0}, -{27,33,1}, -{27,33,2}, -{27,33,3}, -{27,33,4}, -{27,33,5}, -{27,33,6}, -{27,33,7}, -{27,33,8}, -{27,33,9}, -{27,33,10}, -{27,33,11}, -{27,33,12}, -{27,33,13}, -{27,33,14}, -{27,33,15}, -{27,33,16}, -{27,33,17}, -{27,33,18}, -{27,33,19}, -{27,33,20}, -{27,33,21}, -{27,33,22}, -{27,33,23}, -{27,33,24}, -{27,33,25}, -{27,33,26}, -{27,33,27}, -{27,33,28}, -{27,33,29}, -{27,33,30}, -{27,33,31}, -{27,33,32}, -{27,33,33}, -{27,33,34}, -{27,33,35}, -{27,33,36}, -{27,33,37}, -{27,33,38}, -{27,34,-64}, -{27,34,-63}, -{27,34,-62}, -{27,34,-61}, -{27,34,-60}, -{27,34,-59}, -{27,34,-58}, -{27,34,-57}, -{27,34,-56}, -{27,34,-55}, -{27,34,-54}, -{27,34,-53}, -{27,34,-52}, -{27,34,-51}, -{27,34,-50}, -{27,34,-49}, -{27,34,-48}, -{27,34,-47}, -{27,34,-46}, -{27,34,-45}, -{27,34,-44}, -{27,34,-43}, -{27,34,-42}, -{27,34,-41}, -{27,34,-40}, -{27,34,-39}, -{27,34,-38}, -{27,34,-37}, -{27,34,-36}, -{27,34,-35}, -{27,34,-34}, -{27,34,-33}, -{27,34,-32}, -{27,34,-31}, -{27,34,-30}, -{27,34,-29}, -{27,34,-28}, -{27,34,-27}, -{27,34,-26}, -{27,34,-25}, -{27,34,-24}, -{27,34,-23}, -{27,34,-22}, -{27,34,-21}, -{27,34,-20}, -{27,34,-19}, -{27,34,-18}, -{27,34,-17}, -{27,34,-16}, -{27,34,-15}, -{27,34,-14}, -{27,34,-13}, -{27,34,-12}, -{27,34,-11}, -{27,34,-10}, -{27,34,-9}, -{27,34,-8}, -{27,34,-7}, -{27,34,-6}, -{27,34,-5}, -{27,34,-4}, -{27,34,-3}, -{27,34,-2}, -{27,34,-1}, -{27,34,0}, -{27,34,1}, -{27,34,2}, -{27,34,3}, -{27,34,4}, -{27,34,5}, -{27,34,6}, -{27,34,7}, -{27,34,8}, -{27,34,9}, -{27,34,10}, -{27,34,11}, -{27,34,12}, -{27,34,13}, -{27,34,14}, -{27,34,15}, -{27,34,16}, -{27,34,17}, -{27,34,18}, -{27,34,19}, -{27,34,20}, -{27,34,21}, -{27,34,22}, -{27,34,23}, -{27,34,24}, -{27,34,25}, -{27,34,26}, -{27,34,27}, -{27,34,28}, -{27,34,29}, -{27,34,30}, -{27,34,31}, -{27,34,32}, -{27,34,33}, -{27,34,34}, -{27,34,35}, -{27,34,36}, -{27,34,37}, -{27,34,38}, -{27,35,-65}, -{27,35,-64}, -{27,35,-63}, -{27,35,-62}, -{27,35,-61}, -{27,35,-60}, -{27,35,-59}, -{27,35,-58}, -{27,35,-57}, -{27,35,-56}, -{27,35,-55}, -{27,35,-54}, -{27,35,-53}, -{27,35,-52}, -{27,35,-51}, -{27,35,-50}, -{27,35,-49}, -{27,35,-48}, -{27,35,-47}, -{27,35,-46}, -{27,35,-45}, -{27,35,-44}, -{27,35,-43}, -{27,35,-42}, -{27,35,-41}, -{27,35,-40}, -{27,35,-39}, -{27,35,-38}, -{27,35,-37}, -{27,35,-36}, -{27,35,-35}, -{27,35,-34}, -{27,35,-33}, -{27,35,-32}, -{27,35,-31}, -{27,35,-30}, -{27,35,-29}, -{27,35,-28}, -{27,35,-27}, -{27,35,-26}, -{27,35,-25}, -{27,35,-24}, -{27,35,-23}, -{27,35,-22}, -{27,35,-21}, -{27,35,-20}, -{27,35,-19}, -{27,35,-18}, -{27,35,-17}, -{27,35,-16}, -{27,35,-15}, -{27,35,-14}, -{27,35,-13}, -{27,35,-12}, -{27,35,-11}, -{27,35,-10}, -{27,35,-9}, -{27,35,-8}, -{27,35,-7}, -{27,35,-6}, -{27,35,-5}, -{27,35,-4}, -{27,35,-3}, -{27,35,-2}, -{27,35,-1}, -{27,35,0}, -{27,35,1}, -{27,35,2}, -{27,35,3}, -{27,35,4}, -{27,35,5}, -{27,35,6}, -{27,35,7}, -{27,35,8}, -{27,35,9}, -{27,35,10}, -{27,35,11}, -{27,35,12}, -{27,35,13}, -{27,35,14}, -{27,35,15}, -{27,35,16}, -{27,35,17}, -{27,35,18}, -{27,35,19}, -{27,35,20}, -{27,35,21}, -{27,35,22}, -{27,35,23}, -{27,35,24}, -{27,35,25}, -{27,35,26}, -{27,35,27}, -{27,35,28}, -{27,35,29}, -{27,35,30}, -{27,35,31}, -{27,35,32}, -{27,35,33}, -{27,35,34}, -{27,35,35}, -{27,35,36}, -{27,35,37}, -{27,35,38}, -{27,36,-66}, -{27,36,-65}, -{27,36,-64}, -{27,36,-63}, -{27,36,-62}, -{27,36,-61}, -{27,36,-60}, -{27,36,-59}, -{27,36,-58}, -{27,36,-57}, -{27,36,-56}, -{27,36,-55}, -{27,36,-54}, -{27,36,-53}, -{27,36,-52}, -{27,36,-51}, -{27,36,-50}, -{27,36,-49}, -{27,36,-48}, -{27,36,-47}, -{27,36,-46}, -{27,36,-45}, -{27,36,-44}, -{27,36,-43}, -{27,36,-42}, -{27,36,-41}, -{27,36,-40}, -{27,36,-39}, -{27,36,-38}, -{27,36,-37}, -{27,36,-36}, -{27,36,-35}, -{27,36,-34}, -{27,36,-33}, -{27,36,-32}, -{27,36,-31}, -{27,36,-30}, -{27,36,-29}, -{27,36,-28}, -{27,36,-27}, -{27,36,-26}, -{27,36,-25}, -{27,36,-24}, -{27,36,-23}, -{27,36,-22}, -{27,36,-21}, -{27,36,-20}, -{27,36,-19}, -{27,36,-18}, -{27,36,-17}, -{27,36,-16}, -{27,36,-15}, -{27,36,-14}, -{27,36,-13}, -{27,36,-12}, -{27,36,-11}, -{27,36,-10}, -{27,36,-9}, -{27,36,-8}, -{27,36,-7}, -{27,36,-6}, -{27,36,-5}, -{27,36,-4}, -{27,36,-3}, -{27,36,-2}, -{27,36,-1}, -{27,36,0}, -{27,36,1}, -{27,36,2}, -{27,36,3}, -{27,36,4}, -{27,36,5}, -{27,36,6}, -{27,36,7}, -{27,36,8}, -{27,36,9}, -{27,36,10}, -{27,36,11}, -{27,36,12}, -{27,36,13}, -{27,36,14}, -{27,36,15}, -{27,36,16}, -{27,36,17}, -{27,36,18}, -{27,36,19}, -{27,36,20}, -{27,36,21}, -{27,36,22}, -{27,36,23}, -{27,36,24}, -{27,36,25}, -{27,36,26}, -{27,36,27}, -{27,36,28}, -{27,36,29}, -{27,36,30}, -{27,36,31}, -{27,36,32}, -{27,36,33}, -{27,36,34}, -{27,36,35}, -{27,36,36}, -{27,36,37}, -{27,36,38}, -{27,37,-67}, -{27,37,-66}, -{27,37,-65}, -{27,37,-64}, -{27,37,-63}, -{27,37,-62}, -{27,37,-61}, -{27,37,-60}, -{27,37,-59}, -{27,37,-58}, -{27,37,-57}, -{27,37,-56}, -{27,37,-55}, -{27,37,-54}, -{27,37,-53}, -{27,37,-52}, -{27,37,-51}, -{27,37,-50}, -{27,37,-49}, -{27,37,-48}, -{27,37,-47}, -{27,37,-46}, -{27,37,-45}, -{27,37,-44}, -{27,37,-43}, -{27,37,-42}, -{27,37,-41}, -{27,37,-40}, -{27,37,-39}, -{27,37,-38}, -{27,37,-37}, -{27,37,-36}, -{27,37,-35}, -{27,37,-34}, -{27,37,-33}, -{27,37,-32}, -{27,37,-31}, -{27,37,-30}, -{27,37,-29}, -{27,37,-28}, -{27,37,-27}, -{27,37,-26}, -{27,37,-25}, -{27,37,-24}, -{27,37,-23}, -{27,37,-22}, -{27,37,-21}, -{27,37,-20}, -{27,37,-19}, -{27,37,-18}, -{27,37,-17}, -{27,37,-16}, -{27,37,-15}, -{27,37,-14}, -{27,37,-13}, -{27,37,-12}, -{27,37,-11}, -{27,37,-10}, -{27,37,-9}, -{27,37,-8}, -{27,37,-7}, -{27,37,-6}, -{27,37,-5}, -{27,37,-4}, -{27,37,-3}, -{27,37,-2}, -{27,37,-1}, -{27,37,0}, -{27,37,1}, -{27,37,2}, -{27,37,3}, -{27,37,4}, -{27,37,5}, -{27,37,6}, -{27,37,7}, -{27,37,8}, -{27,37,9}, -{27,37,10}, -{27,37,11}, -{27,37,12}, -{27,37,13}, -{27,37,14}, -{27,37,15}, -{27,37,16}, -{27,37,17}, -{27,37,18}, -{27,37,19}, -{27,37,20}, -{27,37,21}, -{27,37,22}, -{27,37,23}, -{27,37,24}, -{27,37,25}, -{27,37,26}, -{27,37,27}, -{27,37,28}, -{27,37,29}, -{27,37,30}, -{27,37,31}, -{27,37,32}, -{27,37,33}, -{27,37,34}, -{27,37,35}, -{27,37,36}, -{27,37,37}, -{27,37,38}, -{27,38,-68}, -{27,38,-67}, -{27,38,-66}, -{27,38,-65}, -{27,38,-64}, -{27,38,-63}, -{27,38,-62}, -{27,38,-61}, -{27,38,-60}, -{27,38,-59}, -{27,38,-58}, -{27,38,-57}, -{27,38,-56}, -{27,38,-55}, -{27,38,-54}, -{27,38,-53}, -{27,38,-52}, -{27,38,-51}, -{27,38,-50}, -{27,38,-49}, -{27,38,-48}, -{27,38,-47}, -{27,38,-46}, -{27,38,-45}, -{27,38,-44}, -{27,38,-43}, -{27,38,-42}, -{27,38,-41}, -{27,38,-40}, -{27,38,-39}, -{27,38,-38}, -{27,38,-37}, -{27,38,-36}, -{27,38,-35}, -{27,38,-34}, -{27,38,-33}, -{27,38,-32}, -{27,38,-31}, -{27,38,-30}, -{27,38,-29}, -{27,38,-28}, -{27,38,-27}, -{27,38,-26}, -{27,38,-25}, -{27,38,-24}, -{27,38,-23}, -{27,38,-22}, -{27,38,-21}, -{27,38,-20}, -{27,38,-19}, -{27,38,-18}, -{27,38,-17}, -{27,38,-16}, -{27,38,-15}, -{27,38,-14}, -{27,38,-13}, -{27,38,-12}, -{27,38,-11}, -{27,38,-10}, -{27,38,-9}, -{27,38,-8}, -{27,38,-7}, -{27,38,-6}, -{27,38,-5}, -{27,38,-4}, -{27,38,-3}, -{27,38,-2}, -{27,38,-1}, -{27,38,0}, -{27,38,1}, -{27,38,2}, -{27,38,3}, -{27,38,4}, -{27,38,5}, -{27,38,6}, -{27,38,7}, -{27,38,8}, -{27,38,9}, -{27,38,10}, -{27,38,11}, -{27,38,12}, -{27,38,13}, -{27,38,14}, -{27,38,15}, -{27,38,16}, -{27,38,17}, -{27,38,18}, -{27,38,19}, -{27,38,20}, -{27,38,21}, -{27,38,22}, -{27,38,23}, -{27,38,24}, -{27,38,25}, -{27,38,26}, -{27,38,27}, -{27,38,28}, -{27,38,29}, -{27,38,30}, -{27,38,31}, -{27,38,32}, -{27,38,33}, -{27,38,34}, -{27,38,35}, -{27,38,36}, -{27,38,37}, -{27,38,38}, -{27,38,39}, -{27,39,-69}, -{27,39,-68}, -{27,39,-67}, -{27,39,-66}, -{27,39,-65}, -{27,39,-64}, -{27,39,-63}, -{27,39,-62}, -{27,39,-61}, -{27,39,-60}, -{27,39,-59}, -{27,39,-58}, -{27,39,-57}, -{27,39,-56}, -{27,39,-55}, -{27,39,-54}, -{27,39,-53}, -{27,39,-52}, -{27,39,-51}, -{27,39,-50}, -{27,39,-49}, -{27,39,-48}, -{27,39,-47}, -{27,39,-46}, -{27,39,-45}, -{27,39,-44}, -{27,39,-43}, -{27,39,-42}, -{27,39,-41}, -{27,39,-40}, -{27,39,-39}, -{27,39,-38}, -{27,39,-37}, -{27,39,-36}, -{27,39,-35}, -{27,39,-34}, -{27,39,-33}, -{27,39,-32}, -{27,39,-31}, -{27,39,-30}, -{27,39,-29}, -{27,39,-28}, -{27,39,-27}, -{27,39,-26}, -{27,39,-25}, -{27,39,-24}, -{27,39,-23}, -{27,39,-22}, -{27,39,-21}, -{27,39,-20}, -{27,39,-19}, -{27,39,-18}, -{27,39,-17}, -{27,39,-16}, -{27,39,-15}, -{27,39,-14}, -{27,39,-13}, -{27,39,-12}, -{27,39,-11}, -{27,39,-10}, -{27,39,-9}, -{27,39,-8}, -{27,39,-7}, -{27,39,-6}, -{27,39,-5}, -{27,39,-4}, -{27,39,-3}, -{27,39,-2}, -{27,39,-1}, -{27,39,0}, -{27,39,1}, -{27,39,2}, -{27,39,3}, -{27,39,4}, -{27,39,5}, -{27,39,6}, -{27,39,7}, -{27,39,8}, -{27,39,9}, -{27,39,10}, -{27,39,11}, -{27,39,12}, -{27,39,13}, -{27,39,14}, -{27,39,15}, -{27,39,16}, -{27,39,17}, -{27,39,18}, -{27,39,19}, -{27,39,20}, -{27,39,21}, -{27,39,22}, -{27,39,23}, -{27,39,24}, -{27,39,25}, -{27,39,26}, -{27,39,27}, -{27,39,28}, -{27,39,29}, -{27,39,30}, -{27,39,31}, -{27,39,32}, -{27,39,33}, -{27,39,34}, -{27,39,35}, -{27,39,36}, -{27,39,37}, -{27,39,38}, -{27,39,39}, -{27,40,-70}, -{27,40,-69}, -{27,40,-68}, -{27,40,-67}, -{27,40,-66}, -{27,40,-65}, -{27,40,-64}, -{27,40,-63}, -{27,40,-62}, -{27,40,-61}, -{27,40,-60}, -{27,40,-59}, -{27,40,-58}, -{27,40,-57}, -{27,40,-56}, -{27,40,-55}, -{27,40,-54}, -{27,40,-53}, -{27,40,-52}, -{27,40,-51}, -{27,40,-50}, -{27,40,-49}, -{27,40,-48}, -{27,40,-47}, -{27,40,-46}, -{27,40,-45}, -{27,40,-44}, -{27,40,-43}, -{27,40,-42}, -{27,40,-41}, -{27,40,-40}, -{27,40,-39}, -{27,40,-38}, -{27,40,-37}, -{27,40,-36}, -{27,40,-35}, -{27,40,-34}, -{27,40,-33}, -{27,40,-32}, -{27,40,-31}, -{27,40,-30}, -{27,40,-29}, -{27,40,-28}, -{27,40,-27}, -{27,40,-26}, -{27,40,-25}, -{27,40,-24}, -{27,40,-23}, -{27,40,-22}, -{27,40,-21}, -{27,40,-20}, -{27,40,-19}, -{27,40,-18}, -{27,40,-17}, -{27,40,-16}, -{27,40,-15}, -{27,40,-14}, -{27,40,-13}, -{27,40,-12}, -{27,40,-11}, -{27,40,-10}, -{27,40,-9}, -{27,40,-8}, -{27,40,-7}, -{27,40,-6}, -{27,40,-5}, -{27,40,-4}, -{27,40,-3}, -{27,40,-2}, -{27,40,-1}, -{27,40,0}, -{27,40,1}, -{27,40,2}, -{27,40,3}, -{27,40,4}, -{27,40,5}, -{27,40,6}, -{27,40,7}, -{27,40,8}, -{27,40,9}, -{27,40,10}, -{27,40,11}, -{27,40,12}, -{27,40,13}, -{27,40,14}, -{27,40,15}, -{27,40,16}, -{27,40,17}, -{27,40,18}, -{27,40,19}, -{27,40,20}, -{27,40,21}, -{27,40,22}, -{27,40,23}, -{27,40,24}, -{27,40,25}, -{27,40,26}, -{27,40,27}, -{27,40,28}, -{27,40,29}, -{27,40,30}, -{27,40,31}, -{27,40,32}, -{27,40,33}, -{27,40,34}, -{27,40,35}, -{27,40,36}, -{27,40,37}, -{27,40,38}, -{27,40,39}, -{27,41,-71}, -{27,41,-70}, -{27,41,-69}, -{27,41,-68}, -{27,41,-67}, -{27,41,-66}, -{27,41,-65}, -{27,41,-64}, -{27,41,-63}, -{27,41,-62}, -{27,41,-61}, -{27,41,-60}, -{27,41,-59}, -{27,41,-58}, -{27,41,-57}, -{27,41,-56}, -{27,41,-55}, -{27,41,-54}, -{27,41,-53}, -{27,41,-52}, -{27,41,-51}, -{27,41,-50}, -{27,41,-49}, -{27,41,-48}, -{27,41,-47}, -{27,41,-46}, -{27,41,-45}, -{27,41,-44}, -{27,41,-43}, -{27,41,-42}, -{27,41,-41}, -{27,41,-40}, -{27,41,-39}, -{27,41,-38}, -{27,41,-37}, -{27,41,-36}, -{27,41,-35}, -{27,41,-34}, -{27,41,-33}, -{27,41,-32}, -{27,41,-31}, -{27,41,-30}, -{27,41,-29}, -{27,41,-28}, -{27,41,-27}, -{27,41,-26}, -{27,41,-25}, -{27,41,-24}, -{27,41,-23}, -{27,41,-22}, -{27,41,-21}, -{27,41,-20}, -{27,41,-19}, -{27,41,-18}, -{27,41,-17}, -{27,41,-16}, -{27,41,-15}, -{27,41,-14}, -{27,41,-13}, -{27,41,-12}, -{27,41,-11}, -{27,41,-10}, -{27,41,-9}, -{27,41,-8}, -{27,41,-7}, -{27,41,-6}, -{27,41,-5}, -{27,41,-4}, -{27,41,-3}, -{27,41,-2}, -{27,41,-1}, -{27,41,0}, -{27,41,1}, -{27,41,2}, -{27,41,3}, -{27,41,4}, -{27,41,5}, -{27,41,6}, -{27,41,7}, -{27,41,8}, -{27,41,9}, -{27,41,10}, -{27,41,11}, -{27,41,12}, -{27,41,13}, -{27,41,14}, -{27,41,15}, -{27,41,16}, -{27,41,17}, -{27,41,18}, -{27,41,19}, -{27,41,20}, -{27,41,21}, -{27,41,22}, -{27,41,23}, -{27,41,24}, -{27,41,25}, -{27,41,26}, -{27,41,27}, -{27,41,28}, -{27,41,29}, -{27,41,30}, -{27,41,31}, -{27,41,32}, -{27,41,33}, -{27,41,34}, -{27,41,35}, -{27,41,36}, -{27,41,37}, -{27,41,38}, -{27,41,39}, -{27,42,-72}, -{27,42,-71}, -{27,42,-70}, -{27,42,-69}, -{27,42,-68}, -{27,42,-67}, -{27,42,-66}, -{27,42,-65}, -{27,42,-64}, -{27,42,-63}, -{27,42,-62}, -{27,42,-61}, -{27,42,-60}, -{27,42,-59}, -{27,42,-58}, -{27,42,-57}, -{27,42,-56}, -{27,42,-55}, -{27,42,-54}, -{27,42,-53}, -{27,42,-52}, -{27,42,-51}, -{27,42,-50}, -{27,42,-49}, -{27,42,-48}, -{27,42,-47}, -{27,42,-46}, -{27,42,-45}, -{27,42,-44}, -{27,42,-43}, -{27,42,-42}, -{27,42,-41}, -{27,42,-40}, -{27,42,-39}, -{27,42,-38}, -{27,42,-37}, -{27,42,-36}, -{27,42,-35}, -{27,42,-34}, -{27,42,-33}, -{27,42,-32}, -{27,42,-31}, -{27,42,-30}, -{27,42,-29}, -{27,42,-28}, -{27,42,-27}, -{27,42,-26}, -{27,42,-25}, -{27,42,-24}, -{27,42,-23}, -{27,42,-22}, -{27,42,-21}, -{27,42,-20}, -{27,42,-19}, -{27,42,-18}, -{27,42,-17}, -{27,42,-16}, -{27,42,-15}, -{27,42,-14}, -{27,42,-13}, -{27,42,-12}, -{27,42,-11}, -{27,42,-10}, -{27,42,-9}, -{27,42,-8}, -{27,42,-7}, -{27,42,-6}, -{27,42,-5}, -{27,42,-4}, -{27,42,-3}, -{27,42,-2}, -{27,42,-1}, -{27,42,0}, -{27,42,1}, -{27,42,2}, -{27,42,3}, -{27,42,4}, -{27,42,5}, -{27,42,6}, -{27,42,7}, -{27,42,8}, -{27,42,9}, -{27,42,10}, -{27,42,11}, -{27,42,12}, -{27,42,13}, -{27,42,14}, -{27,42,15}, -{27,42,16}, -{27,42,17}, -{27,42,18}, -{27,42,19}, -{27,42,20}, -{27,42,21}, -{27,42,22}, -{27,42,23}, -{27,42,24}, -{27,42,25}, -{27,42,26}, -{27,42,27}, -{27,42,28}, -{27,42,29}, -{27,42,30}, -{27,42,31}, -{27,42,32}, -{27,42,33}, -{27,42,34}, -{27,42,35}, -{27,42,36}, -{27,42,37}, -{27,42,38}, -{27,42,39}, -{27,43,-72}, -{27,43,-71}, -{27,43,-70}, -{27,43,-69}, -{27,43,-68}, -{27,43,-67}, -{27,43,-66}, -{27,43,-65}, -{27,43,-64}, -{27,43,-63}, -{27,43,-62}, -{27,43,-61}, -{27,43,-60}, -{27,43,-59}, -{27,43,-58}, -{27,43,-57}, -{27,43,-56}, -{27,43,-55}, -{27,43,-54}, -{27,43,-53}, -{27,43,-52}, -{27,43,-51}, -{27,43,-50}, -{27,43,-49}, -{27,43,-48}, -{27,43,-47}, -{27,43,-46}, -{27,43,-45}, -{27,43,-44}, -{27,43,-43}, -{27,43,-42}, -{27,43,-41}, -{27,43,-40}, -{27,43,-39}, -{27,43,-38}, -{27,43,-37}, -{27,43,-36}, -{27,43,-35}, -{27,43,-34}, -{27,43,-33}, -{27,43,-32}, -{27,43,-31}, -{27,43,-30}, -{27,43,-29}, -{27,43,-28}, -{27,43,-27}, -{27,43,-26}, -{27,43,-25}, -{27,43,-24}, -{27,43,-23}, -{27,43,-22}, -{27,43,-21}, -{27,43,-20}, -{27,43,-19}, -{27,43,-18}, -{27,43,-17}, -{27,43,-16}, -{27,43,-15}, -{27,43,-14}, -{27,43,-13}, -{27,43,-12}, -{27,43,-11}, -{27,43,-10}, -{27,43,-9}, -{27,43,-8}, -{27,43,-7}, -{27,43,-6}, -{27,43,-5}, -{27,43,-4}, -{27,43,-3}, -{27,43,-2}, -{27,43,-1}, -{27,43,0}, -{27,43,1}, -{27,43,2}, -{27,43,3}, -{27,43,4}, -{27,43,5}, -{27,43,6}, -{27,43,7}, -{27,43,8}, -{27,43,9}, -{27,43,10}, -{27,43,11}, -{27,43,12}, -{27,43,13}, -{27,43,14}, -{27,43,15}, -{27,43,16}, -{27,43,17}, -{27,43,18}, -{27,43,19}, -{27,43,20}, -{27,43,21}, -{27,43,22}, -{27,43,23}, -{27,43,24}, -{27,43,25}, -{27,43,26}, -{27,43,27}, -{27,43,28}, -{27,43,29}, -{27,43,30}, -{27,43,31}, -{27,43,32}, -{27,43,33}, -{27,43,34}, -{27,43,35}, -{27,43,36}, -{27,43,37}, -{27,43,38}, -{27,43,39}, -{27,44,-73}, -{27,44,-72}, -{27,44,-71}, -{27,44,-70}, -{27,44,-69}, -{27,44,-68}, -{27,44,-67}, -{27,44,-66}, -{27,44,-65}, -{27,44,-64}, -{27,44,-63}, -{27,44,-62}, -{27,44,-61}, -{27,44,-60}, -{27,44,-59}, -{27,44,-58}, -{27,44,-57}, -{27,44,-56}, -{27,44,-55}, -{27,44,-54}, -{27,44,-53}, -{27,44,-52}, -{27,44,-51}, -{27,44,-50}, -{27,44,-49}, -{27,44,-48}, -{27,44,-47}, -{27,44,-46}, -{27,44,-45}, -{27,44,-44}, -{27,44,-43}, -{27,44,-42}, -{27,44,-41}, -{27,44,-40}, -{27,44,-39}, -{27,44,-38}, -{27,44,-37}, -{27,44,-36}, -{27,44,-35}, -{27,44,-34}, -{27,44,-33}, -{27,44,-32}, -{27,44,-31}, -{27,44,-30}, -{27,44,-29}, -{27,44,-28}, -{27,44,-27}, -{27,44,-26}, -{27,44,-25}, -{27,44,-24}, -{27,44,-23}, -{27,44,-22}, -{27,44,-21}, -{27,44,-20}, -{27,44,-19}, -{27,44,-18}, -{27,44,-17}, -{27,44,-16}, -{27,44,-15}, -{27,44,-14}, -{27,44,-13}, -{27,44,-12}, -{27,44,-11}, -{27,44,-10}, -{27,44,-9}, -{27,44,-8}, -{27,44,-7}, -{27,44,-6}, -{27,44,-5}, -{27,44,-4}, -{27,44,-3}, -{27,44,-2}, -{27,44,-1}, -{27,44,0}, -{27,44,1}, -{27,44,2}, -{27,44,3}, -{27,44,4}, -{27,44,5}, -{27,44,6}, -{27,44,7}, -{27,44,8}, -{27,44,9}, -{27,44,10}, -{27,44,11}, -{27,44,12}, -{27,44,13}, -{27,44,14}, -{27,44,15}, -{27,44,16}, -{27,44,17}, -{27,44,18}, -{27,44,19}, -{27,44,20}, -{27,44,21}, -{27,44,22}, -{27,44,23}, -{27,44,24}, -{27,44,25}, -{27,44,26}, -{27,44,27}, -{27,44,28}, -{27,44,29}, -{27,44,30}, -{27,44,31}, -{27,44,32}, -{27,44,33}, -{27,44,34}, -{27,44,35}, -{27,44,36}, -{27,44,37}, -{27,44,38}, -{27,44,39}, -{27,45,-74}, -{27,45,-73}, -{27,45,-72}, -{27,45,-71}, -{27,45,-70}, -{27,45,-69}, -{27,45,-68}, -{27,45,-67}, -{27,45,-66}, -{27,45,-65}, -{27,45,-64}, -{27,45,-63}, -{27,45,-62}, -{27,45,-61}, -{27,45,-60}, -{27,45,-59}, -{27,45,-58}, -{27,45,-57}, -{27,45,-56}, -{27,45,-55}, -{27,45,-54}, -{27,45,-53}, -{27,45,-52}, -{27,45,-51}, -{27,45,-50}, -{27,45,-49}, -{27,45,-48}, -{27,45,-47}, -{27,45,-46}, -{27,45,-45}, -{27,45,-44}, -{27,45,-43}, -{27,45,-42}, -{27,45,-41}, -{27,45,-40}, -{27,45,-39}, -{27,45,-38}, -{27,45,-37}, -{27,45,-36}, -{27,45,-35}, -{27,45,-34}, -{27,45,-33}, -{27,45,-32}, -{27,45,-31}, -{27,45,-30}, -{27,45,-29}, -{27,45,-28}, -{27,45,-27}, -{27,45,-26}, -{27,45,-25}, -{27,45,-24}, -{27,45,-23}, -{27,45,-22}, -{27,45,-21}, -{27,45,-20}, -{27,45,-19}, -{27,45,-18}, -{27,45,-17}, -{27,45,-16}, -{27,45,-15}, -{27,45,-14}, -{27,45,-13}, -{27,45,-12}, -{27,45,-11}, -{27,45,-10}, -{27,45,-9}, -{27,45,-8}, -{27,45,-7}, -{27,45,-6}, -{27,45,-5}, -{27,45,-4}, -{27,45,-3}, -{27,45,-2}, -{27,45,-1}, -{27,45,0}, -{27,45,1}, -{27,45,2}, -{27,45,3}, -{27,45,4}, -{27,45,5}, -{27,45,6}, -{27,45,7}, -{27,45,8}, -{27,45,9}, -{27,45,10}, -{27,45,11}, -{27,45,12}, -{27,45,13}, -{27,45,14}, -{27,45,15}, -{27,45,16}, -{27,45,17}, -{27,45,18}, -{27,45,19}, -{27,45,20}, -{27,45,21}, -{27,45,22}, -{27,45,23}, -{27,45,24}, -{27,45,25}, -{27,45,26}, -{27,45,27}, -{27,45,28}, -{27,45,29}, -{27,45,30}, -{27,45,31}, -{27,45,32}, -{27,45,33}, -{27,45,34}, -{27,45,35}, -{27,45,36}, -{27,45,37}, -{27,45,38}, -{27,45,39}, -{27,46,-75}, -{27,46,-74}, -{27,46,-73}, -{27,46,-72}, -{27,46,-71}, -{27,46,-70}, -{27,46,-69}, -{27,46,-68}, -{27,46,-67}, -{27,46,-66}, -{27,46,-65}, -{27,46,-64}, -{27,46,-63}, -{27,46,-62}, -{27,46,-61}, -{27,46,-60}, -{27,46,-59}, -{27,46,-58}, -{27,46,-57}, -{27,46,-56}, -{27,46,-55}, -{27,46,-54}, -{27,46,-53}, -{27,46,-52}, -{27,46,-51}, -{27,46,-50}, -{27,46,-49}, -{27,46,-48}, -{27,46,-47}, -{27,46,-46}, -{27,46,-45}, -{27,46,-44}, -{27,46,-43}, -{27,46,-42}, -{27,46,-41}, -{27,46,-40}, -{27,46,-39}, -{27,46,-38}, -{27,46,-37}, -{27,46,-36}, -{27,46,-35}, -{27,46,-34}, -{27,46,-33}, -{27,46,-32}, -{27,46,-31}, -{27,46,-30}, -{27,46,-29}, -{27,46,-28}, -{27,46,-27}, -{27,46,-26}, -{27,46,-25}, -{27,46,-24}, -{27,46,-23}, -{27,46,-22}, -{27,46,-21}, -{27,46,-20}, -{27,46,-19}, -{27,46,-18}, -{27,46,-17}, -{27,46,-16}, -{27,46,-15}, -{27,46,-14}, -{27,46,-13}, -{27,46,-12}, -{27,46,-11}, -{27,46,-10}, -{27,46,-9}, -{27,46,-8}, -{27,46,-7}, -{27,46,-6}, -{27,46,-5}, -{27,46,-4}, -{27,46,-3}, -{27,46,-2}, -{27,46,-1}, -{27,46,0}, -{27,46,1}, -{27,46,2}, -{27,46,3}, -{27,46,4}, -{27,46,5}, -{27,46,6}, -{27,46,7}, -{27,46,8}, -{27,46,9}, -{27,46,10}, -{27,46,11}, -{27,46,12}, -{27,46,13}, -{27,46,14}, -{27,46,15}, -{27,46,16}, -{27,46,17}, -{27,46,18}, -{27,46,19}, -{27,46,20}, -{27,46,21}, -{27,46,22}, -{27,46,23}, -{27,46,24}, -{27,46,25}, -{27,46,26}, -{27,46,27}, -{27,46,28}, -{27,46,29}, -{27,46,30}, -{27,46,31}, -{27,46,32}, -{27,46,33}, -{27,46,34}, -{27,46,35}, -{27,46,36}, -{27,46,37}, -{27,46,38}, -{27,46,39}, -{27,47,-76}, -{27,47,-75}, -{27,47,-74}, -{27,47,-73}, -{27,47,-72}, -{27,47,-71}, -{27,47,-70}, -{27,47,-69}, -{27,47,-68}, -{27,47,-67}, -{27,47,-66}, -{27,47,-65}, -{27,47,-64}, -{27,47,-63}, -{27,47,-62}, -{27,47,-61}, -{27,47,-60}, -{27,47,-59}, -{27,47,-58}, -{27,47,-57}, -{27,47,-56}, -{27,47,-55}, -{27,47,-54}, -{27,47,-53}, -{27,47,-52}, -{27,47,-51}, -{27,47,-50}, -{27,47,-49}, -{27,47,-48}, -{27,47,-47}, -{27,47,-46}, -{27,47,-45}, -{27,47,-44}, -{27,47,-43}, -{27,47,-42}, -{27,47,-41}, -{27,47,-40}, -{27,47,-39}, -{27,47,-38}, -{27,47,-37}, -{27,47,-36}, -{27,47,-35}, -{27,47,-34}, -{27,47,-33}, -{27,47,-32}, -{27,47,-31}, -{27,47,-30}, -{27,47,-29}, -{27,47,-28}, -{27,47,-27}, -{27,47,-26}, -{27,47,-25}, -{27,47,-24}, -{27,47,-23}, -{27,47,-22}, -{27,47,-21}, -{27,47,-20}, -{27,47,-19}, -{27,47,-18}, -{27,47,-17}, -{27,47,-16}, -{27,47,-15}, -{27,47,-14}, -{27,47,-13}, -{27,47,-12}, -{27,47,-11}, -{27,47,-10}, -{27,47,-9}, -{27,47,-8}, -{27,47,-7}, -{27,47,-6}, -{27,47,-5}, -{27,47,-4}, -{27,47,-3}, -{27,47,-2}, -{27,47,-1}, -{27,47,0}, -{27,47,1}, -{27,47,2}, -{27,47,3}, -{27,47,4}, -{27,47,5}, -{27,47,6}, -{27,47,7}, -{27,47,8}, -{27,47,9}, -{27,47,10}, -{27,47,11}, -{27,47,12}, -{27,47,13}, -{27,47,14}, -{27,47,15}, -{27,47,16}, -{27,47,17}, -{27,47,18}, -{27,47,19}, -{27,47,20}, -{27,47,21}, -{27,47,22}, -{27,47,23}, -{27,47,24}, -{27,47,25}, -{27,47,26}, -{27,47,27}, -{27,47,28}, -{27,47,29}, -{27,47,30}, -{27,47,31}, -{27,47,32}, -{27,47,33}, -{27,47,34}, -{27,47,35}, -{27,47,36}, -{27,47,37}, -{27,47,38}, -{27,47,39}, -{27,48,-77}, -{27,48,-76}, -{27,48,-75}, -{27,48,-74}, -{27,48,-73}, -{27,48,-72}, -{27,48,-71}, -{27,48,-70}, -{27,48,-69}, -{27,48,-68}, -{27,48,-67}, -{27,48,-66}, -{27,48,-65}, -{27,48,-64}, -{27,48,-63}, -{27,48,-62}, -{27,48,-61}, -{27,48,-60}, -{27,48,-59}, -{27,48,-58}, -{27,48,-57}, -{27,48,-56}, -{27,48,-55}, -{27,48,-54}, -{27,48,-53}, -{27,48,-52}, -{27,48,-51}, -{27,48,-50}, -{27,48,-49}, -{27,48,-48}, -{27,48,-47}, -{27,48,-46}, -{27,48,-45}, -{27,48,-44}, -{27,48,-43}, -{27,48,-42}, -{27,48,-41}, -{27,48,-40}, -{27,48,-39}, -{27,48,-38}, -{27,48,-37}, -{27,48,-36}, -{27,48,-35}, -{27,48,-34}, -{27,48,-33}, -{27,48,-32}, -{27,48,-31}, -{27,48,-30}, -{27,48,-29}, -{27,48,-28}, -{27,48,-27}, -{27,48,-26}, -{27,48,-25}, -{27,48,-24}, -{27,48,-23}, -{27,48,-22}, -{27,48,-21}, -{27,48,-20}, -{27,48,-19}, -{27,48,-18}, -{27,48,-17}, -{27,48,-16}, -{27,48,-15}, -{27,48,-14}, -{27,48,-13}, -{27,48,-12}, -{27,48,-11}, -{27,48,-10}, -{27,48,-9}, -{27,48,-8}, -{27,48,-7}, -{27,48,-6}, -{27,48,-5}, -{27,48,-4}, -{27,48,-3}, -{27,48,-2}, -{27,48,-1}, -{27,48,0}, -{27,48,1}, -{27,48,2}, -{27,48,3}, -{27,48,4}, -{27,48,5}, -{27,48,6}, -{27,48,7}, -{27,48,8}, -{27,48,9}, -{27,48,10}, -{27,48,11}, -{27,48,12}, -{27,48,13}, -{27,48,14}, -{27,48,15}, -{27,48,16}, -{27,48,17}, -{27,48,18}, -{27,48,19}, -{27,48,20}, -{27,48,21}, -{27,48,22}, -{27,48,23}, -{27,48,24}, -{27,48,25}, -{27,48,26}, -{27,48,27}, -{27,48,28}, -{27,48,29}, -{27,48,30}, -{27,48,31}, -{27,48,32}, -{27,48,33}, -{27,48,34}, -{27,48,35}, -{27,48,36}, -{27,48,37}, -{27,48,38}, -{27,48,39}, -{27,49,-78}, -{27,49,-77}, -{27,49,-76}, -{27,49,-75}, -{27,49,-74}, -{27,49,-73}, -{27,49,-72}, -{27,49,-71}, -{27,49,-70}, -{27,49,-69}, -{27,49,-68}, -{27,49,-67}, -{27,49,-66}, -{27,49,-65}, -{27,49,-64}, -{27,49,-63}, -{27,49,-62}, -{27,49,-61}, -{27,49,-60}, -{27,49,-59}, -{27,49,-58}, -{27,49,-57}, -{27,49,-56}, -{27,49,-55}, -{27,49,-54}, -{27,49,-53}, -{27,49,-52}, -{27,49,-51}, -{27,49,-50}, -{27,49,-49}, -{27,49,-48}, -{27,49,-47}, -{27,49,-46}, -{27,49,-45}, -{27,49,-44}, -{27,49,-43}, -{27,49,-42}, -{27,49,-41}, -{27,49,-40}, -{27,49,-39}, -{27,49,-38}, -{27,49,-37}, -{27,49,-36}, -{27,49,-35}, -{27,49,-34}, -{27,49,-33}, -{27,49,-32}, -{27,49,-31}, -{27,49,-30}, -{27,49,-29}, -{27,49,-28}, -{27,49,-27}, -{27,49,-26}, -{27,49,-25}, -{27,49,-24}, -{27,49,-23}, -{27,49,-22}, -{27,49,-21}, -{27,49,-20}, -{27,49,-19}, -{27,49,-18}, -{27,49,-17}, -{27,49,-16}, -{27,49,-15}, -{27,49,-14}, -{27,49,-13}, -{27,49,-12}, -{27,49,-11}, -{27,49,-10}, -{27,49,-9}, -{27,49,-8}, -{27,49,-7}, -{27,49,-6}, -{27,49,-5}, -{27,49,-4}, -{27,49,-3}, -{27,49,-2}, -{27,49,-1}, -{27,49,0}, -{27,49,1}, -{27,49,2}, -{27,49,3}, -{27,49,4}, -{27,49,5}, -{27,49,6}, -{27,49,7}, -{27,49,8}, -{27,49,9}, -{27,49,10}, -{27,49,11}, -{27,49,12}, -{27,49,13}, -{27,49,14}, -{27,49,15}, -{27,49,16}, -{27,49,17}, -{27,49,18}, -{27,49,19}, -{27,49,20}, -{27,49,21}, -{27,49,22}, -{27,49,23}, -{27,49,24}, -{27,49,25}, -{27,49,26}, -{27,49,27}, -{27,49,28}, -{27,49,29}, -{27,49,30}, -{27,49,31}, -{27,49,32}, -{27,49,33}, -{27,49,34}, -{27,49,35}, -{27,49,36}, -{27,49,37}, -{27,49,38}, -{27,49,39}, -{27,49,40}, -{27,50,-79}, -{27,50,-78}, -{27,50,-77}, -{27,50,-76}, -{27,50,-75}, -{27,50,-74}, -{27,50,-73}, -{27,50,-72}, -{27,50,-71}, -{27,50,-70}, -{27,50,-69}, -{27,50,-68}, -{27,50,-67}, -{27,50,-66}, -{27,50,-65}, -{27,50,-64}, -{27,50,-63}, -{27,50,-62}, -{27,50,-61}, -{27,50,-60}, -{27,50,-59}, -{27,50,-58}, -{27,50,-57}, -{27,50,-56}, -{27,50,-55}, -{27,50,-54}, -{27,50,-53}, -{27,50,-52}, -{27,50,-51}, -{27,50,-50}, -{27,50,-49}, -{27,50,-48}, -{27,50,-47}, -{27,50,-46}, -{27,50,-45}, -{27,50,-44}, -{27,50,-43}, -{27,50,-42}, -{27,50,-41}, -{27,50,-40}, -{27,50,-39}, -{27,50,-38}, -{27,50,-37}, -{27,50,-36}, -{27,50,-35}, -{27,50,-34}, -{27,50,-33}, -{27,50,-32}, -{27,50,-31}, -{27,50,-30}, -{27,50,-29}, -{27,50,-28}, -{27,50,-27}, -{27,50,-26}, -{27,50,-25}, -{27,50,-24}, -{27,50,-23}, -{27,50,-22}, -{27,50,-21}, -{27,50,-20}, -{27,50,-19}, -{27,50,-18}, -{27,50,-17}, -{27,50,-16}, -{27,50,-15}, -{27,50,-14}, -{27,50,-13}, -{27,50,-12}, -{27,50,-11}, -{27,50,-10}, -{27,50,-9}, -{27,50,-8}, -{27,50,-7}, -{27,50,-6}, -{27,50,-5}, -{27,50,-4}, -{27,50,-3}, -{27,50,-2}, -{27,50,-1}, -{27,50,0}, -{27,50,1}, -{27,50,2}, -{27,50,3}, -{27,50,4}, -{27,50,5}, -{27,50,6}, -{27,50,7}, -{27,50,8}, -{27,50,9}, -{27,50,10}, -{27,50,11}, -{27,50,12}, -{27,50,13}, -{27,50,14}, -{27,50,15}, -{27,50,16}, -{27,50,17}, -{27,50,18}, -{27,50,19}, -{27,50,20}, -{27,50,21}, -{27,50,22}, -{27,50,23}, -{27,50,24}, -{27,50,25}, -{27,50,26}, -{27,50,27}, -{27,50,28}, -{27,50,29}, -{27,50,30}, -{27,50,31}, -{27,50,32}, -{27,50,33}, -{27,50,34}, -{27,50,35}, -{27,50,36}, -{27,51,-79}, -{27,51,-78}, -{27,51,-77}, -{27,51,-76}, -{27,51,-75}, -{27,51,-74}, -{27,51,-73}, -{27,51,-72}, -{27,51,-71}, -{27,51,-70}, -{27,51,-69}, -{27,51,-68}, -{27,51,-67}, -{27,51,-66}, -{27,51,-65}, -{27,51,-64}, -{27,51,-63}, -{27,51,-62}, -{27,51,-61}, -{27,51,-60}, -{27,51,-59}, -{27,51,-58}, -{27,51,-57}, -{27,51,-56}, -{27,51,-55}, -{27,51,-54}, -{27,51,-53}, -{27,51,-52}, -{27,51,-51}, -{27,51,-50}, -{27,51,-49}, -{27,51,-48}, -{27,51,-47}, -{27,51,-46}, -{27,51,-45}, -{27,51,-44}, -{27,51,-43}, -{27,51,-42}, -{27,51,-41}, -{27,51,-40}, -{27,51,-39}, -{27,51,-38}, -{27,51,-37}, -{27,51,-36}, -{27,51,-35}, -{27,51,-34}, -{27,51,-33}, -{27,51,-32}, -{27,51,-31}, -{27,51,-30}, -{27,51,-29}, -{27,51,-28}, -{27,51,-27}, -{27,51,-26}, -{27,51,-25}, -{27,51,-24}, -{27,51,-23}, -{27,51,-22}, -{27,51,-21}, -{27,51,-20}, -{27,51,-19}, -{27,51,-18}, -{27,51,-17}, -{27,51,-16}, -{27,51,-15}, -{27,51,-14}, -{27,51,-13}, -{27,51,-12}, -{27,51,-11}, -{27,51,-10}, -{27,51,-9}, -{27,51,-8}, -{27,51,-7}, -{27,51,-6}, -{27,51,-5}, -{27,51,-4}, -{27,51,-3}, -{27,51,-2}, -{27,51,-1}, -{27,51,0}, -{27,51,1}, -{27,51,2}, -{27,51,3}, -{27,51,4}, -{27,51,5}, -{27,51,6}, -{27,51,7}, -{27,51,8}, -{27,51,9}, -{27,52,-80}, -{27,52,-79}, -{27,52,-78}, -{27,52,-77}, -{27,52,-76}, -{27,52,-75}, -{27,52,-74}, -{27,52,-73}, -{27,52,-72}, -{27,52,-71}, -{27,52,-70}, -{27,52,-69}, -{27,52,-68}, -{27,52,-67}, -{27,52,-66}, -{27,52,-65}, -{27,52,-64}, -{27,52,-63}, -{27,52,-62}, -{27,52,-61}, -{27,52,-60}, -{27,52,-59}, -{27,52,-58}, -{27,52,-57}, -{27,52,-56}, -{27,52,-55}, -{27,52,-54}, -{27,52,-53}, -{27,52,-52}, -{27,52,-51}, -{27,52,-50}, -{27,52,-49}, -{27,52,-48}, -{27,52,-47}, -{27,52,-46}, -{27,52,-45}, -{27,52,-44}, -{27,52,-43}, -{27,52,-42}, -{27,52,-41}, -{27,52,-40}, -{27,52,-39}, -{27,52,-38}, -{27,52,-37}, -{27,52,-36}, -{27,52,-35}, -{27,52,-34}, -{27,52,-33}, -{27,52,-32}, -{27,52,-31}, -{27,52,-30}, -{27,52,-29}, -{27,52,-28}, -{27,52,-27}, -{27,52,-26}, -{27,52,-25}, -{27,52,-24}, -{27,52,-23}, -{27,52,-22}, -{27,52,-21}, -{27,52,-20}, -{27,52,-19}, -{27,52,-18}, -{27,52,-17}, -{27,52,-16}, -{27,52,-15}, -{27,52,-14}, -{27,52,-13}, -{27,52,-12}, -{27,52,-11}, -{27,52,-10}, -{27,52,-9}, -{27,52,-8}, -{27,52,-7}, -{27,52,-6}, -{27,52,-5}, -{27,53,-81}, -{27,53,-80}, -{27,53,-79}, -{27,53,-78}, -{27,53,-77}, -{27,53,-76}, -{27,53,-75}, -{27,53,-74}, -{27,53,-73}, -{27,53,-72}, -{27,53,-71}, -{27,53,-70}, -{27,53,-69}, -{27,53,-68}, -{27,53,-67}, -{27,53,-66}, -{27,53,-65}, -{27,53,-64}, -{27,53,-63}, -{27,53,-62}, -{27,53,-61}, -{27,53,-60}, -{27,53,-59}, -{27,53,-58}, -{27,53,-57}, -{27,53,-56}, -{27,53,-55}, -{27,53,-54}, -{27,53,-53}, -{27,53,-52}, -{27,53,-51}, -{27,53,-50}, -{27,53,-49}, -{27,53,-48}, -{27,53,-47}, -{27,53,-46}, -{27,53,-45}, -{27,53,-44}, -{27,53,-43}, -{27,53,-42}, -{27,53,-41}, -{27,53,-40}, -{27,53,-39}, -{27,53,-38}, -{27,53,-37}, -{27,53,-36}, -{27,53,-35}, -{27,53,-34}, -{27,53,-33}, -{27,53,-32}, -{27,53,-31}, -{27,53,-30}, -{27,53,-29}, -{27,53,-28}, -{27,53,-27}, -{27,53,-26}, -{27,53,-25}, -{27,53,-24}, -{27,53,-23}, -{27,53,-22}, -{27,53,-21}, -{27,53,-20}, -{27,53,-19}, -{27,53,-18}, -{27,53,-17}, -{27,53,-16}, -{27,54,-82}, -{27,54,-81}, -{27,54,-80}, -{27,54,-79}, -{27,54,-78}, -{27,54,-77}, -{27,54,-76}, -{27,54,-75}, -{27,54,-74}, -{27,54,-73}, -{27,54,-72}, -{27,54,-71}, -{27,54,-70}, -{27,54,-69}, -{27,54,-68}, -{27,54,-67}, -{27,54,-66}, -{27,54,-65}, -{27,54,-64}, -{27,54,-63}, -{27,54,-62}, -{27,54,-61}, -{27,54,-60}, -{27,54,-59}, -{27,54,-58}, -{27,54,-57}, -{27,54,-56}, -{27,54,-55}, -{27,54,-54}, -{27,54,-53}, -{27,54,-52}, -{27,54,-51}, -{27,54,-50}, -{27,54,-49}, -{27,54,-48}, -{27,54,-47}, -{27,54,-46}, -{27,54,-45}, -{27,54,-44}, -{27,54,-43}, -{27,54,-42}, -{27,54,-41}, -{27,54,-40}, -{27,54,-39}, -{27,54,-38}, -{27,54,-37}, -{27,54,-36}, -{27,54,-35}, -{27,54,-34}, -{27,54,-33}, -{27,54,-32}, -{27,54,-31}, -{27,54,-30}, -{27,54,-29}, -{27,54,-28}, -{27,54,-27}, -{27,54,-26}, -{27,54,-25}, -{27,54,-24}, -{27,55,-83}, -{27,55,-82}, -{27,55,-81}, -{27,55,-80}, -{27,55,-79}, -{27,55,-78}, -{27,55,-77}, -{27,55,-76}, -{27,55,-75}, -{27,55,-74}, -{27,55,-73}, -{27,55,-72}, -{27,55,-71}, -{27,55,-70}, -{27,55,-69}, -{27,55,-68}, -{27,55,-67}, -{27,55,-66}, -{27,55,-65}, -{27,55,-64}, -{27,55,-63}, -{27,55,-62}, -{27,55,-61}, -{27,55,-60}, -{27,55,-59}, -{27,55,-58}, -{27,55,-57}, -{27,55,-56}, -{27,55,-55}, -{27,55,-54}, -{27,55,-53}, -{27,55,-52}, -{27,55,-51}, -{27,55,-50}, -{27,55,-49}, -{27,55,-48}, -{27,55,-47}, -{27,55,-46}, -{27,55,-45}, -{27,55,-44}, -{27,55,-43}, -{27,55,-42}, -{27,55,-41}, -{27,55,-40}, -{27,55,-39}, -{27,55,-38}, -{27,55,-37}, -{27,55,-36}, -{27,55,-35}, -{27,55,-34}, -{27,55,-33}, -{27,55,-32}, -{27,55,-31}, -{27,56,-84}, -{27,56,-83}, -{27,56,-82}, -{27,56,-81}, -{27,56,-80}, -{27,56,-79}, -{27,56,-78}, -{27,56,-77}, -{27,56,-76}, -{27,56,-75}, -{27,56,-74}, -{27,56,-73}, -{27,56,-72}, -{27,56,-71}, -{27,56,-70}, -{27,56,-69}, -{27,56,-68}, -{27,56,-67}, -{27,56,-66}, -{27,56,-65}, -{27,56,-64}, -{27,56,-63}, -{27,56,-62}, -{27,56,-61}, -{27,56,-60}, -{27,56,-59}, -{27,56,-58}, -{27,56,-57}, -{27,56,-56}, -{27,56,-55}, -{27,56,-54}, -{27,56,-53}, -{27,56,-52}, -{27,56,-51}, -{27,56,-50}, -{27,56,-49}, -{27,56,-48}, -{27,56,-47}, -{27,56,-46}, -{27,56,-45}, -{27,56,-44}, -{27,56,-43}, -{27,56,-42}, -{27,56,-41}, -{27,56,-40}, -{27,56,-39}, -{27,56,-38}, -{27,57,-84}, -{27,57,-83}, -{27,57,-82}, -{27,57,-81}, -{27,57,-80}, -{27,57,-79}, -{27,57,-78}, -{27,57,-77}, -{27,57,-76}, -{27,57,-75}, -{27,57,-74}, -{27,57,-73}, -{27,57,-72}, -{27,57,-71}, -{27,57,-70}, -{27,57,-69}, -{27,57,-68}, -{27,57,-67}, -{27,57,-66}, -{27,57,-65}, -{27,57,-64}, -{27,57,-63}, -{27,57,-62}, -{27,57,-61}, -{27,57,-60}, -{27,57,-59}, -{27,57,-58}, -{27,57,-57}, -{27,57,-56}, -{27,57,-55}, -{27,57,-54}, -{27,57,-53}, -{27,57,-52}, -{27,57,-51}, -{27,57,-50}, -{27,57,-49}, -{27,57,-48}, -{27,57,-47}, -{27,57,-46}, -{27,57,-45}, -{27,57,-44}, -{27,58,-85}, -{27,58,-84}, -{27,58,-83}, -{27,58,-82}, -{27,58,-81}, -{27,58,-80}, -{27,58,-79}, -{27,58,-78}, -{27,58,-77}, -{27,58,-76}, -{27,58,-75}, -{27,58,-74}, -{27,58,-73}, -{27,58,-72}, -{27,58,-71}, -{27,58,-70}, -{27,58,-69}, -{27,58,-68}, -{27,58,-67}, -{27,58,-66}, -{27,58,-65}, -{27,58,-64}, -{27,58,-63}, -{27,58,-62}, -{27,58,-61}, -{27,58,-60}, -{27,58,-59}, -{27,58,-58}, -{27,58,-57}, -{27,58,-56}, -{27,58,-55}, -{27,58,-54}, -{27,58,-53}, -{27,58,-52}, -{27,58,-51}, -{27,58,-50}, -{27,58,-49}, -{27,59,-86}, -{27,59,-85}, -{27,59,-84}, -{27,59,-83}, -{27,59,-82}, -{27,59,-81}, -{27,59,-80}, -{27,59,-79}, -{27,59,-78}, -{27,59,-77}, -{27,59,-76}, -{27,59,-75}, -{27,59,-74}, -{27,59,-73}, -{27,59,-72}, -{27,59,-71}, -{27,59,-70}, -{27,59,-69}, -{27,59,-68}, -{27,59,-67}, -{27,59,-66}, -{27,59,-65}, -{27,59,-64}, -{27,59,-63}, -{27,59,-62}, -{27,59,-61}, -{27,59,-60}, -{27,59,-59}, -{27,59,-58}, -{27,59,-57}, -{27,59,-56}, -{27,59,-55}, -{27,59,-54}, -{27,60,-87}, -{27,60,-86}, -{27,60,-85}, -{27,60,-84}, -{27,60,-83}, -{27,60,-82}, -{27,60,-81}, -{27,60,-80}, -{27,60,-79}, -{27,60,-78}, -{27,60,-77}, -{27,60,-76}, -{27,60,-75}, -{27,60,-74}, -{27,60,-73}, -{27,60,-72}, -{27,60,-71}, -{27,60,-70}, -{27,60,-69}, -{27,60,-68}, -{27,60,-67}, -{27,60,-66}, -{27,60,-65}, -{27,60,-64}, -{27,60,-63}, -{27,60,-62}, -{27,60,-61}, -{27,60,-60}, -{27,60,-59}, -{27,61,-88}, -{27,61,-87}, -{27,61,-86}, -{27,61,-85}, -{27,61,-84}, -{27,61,-83}, -{27,61,-82}, -{27,61,-81}, -{27,61,-80}, -{27,61,-79}, -{27,61,-78}, -{27,61,-77}, -{27,61,-76}, -{27,61,-75}, -{27,61,-74}, -{27,61,-73}, -{27,61,-72}, -{27,61,-71}, -{27,61,-70}, -{27,61,-69}, -{27,61,-68}, -{27,61,-67}, -{27,61,-66}, -{27,61,-65}, -{27,61,-64}, -{27,61,-63}, -{27,62,-89}, -{27,62,-88}, -{27,62,-87}, -{27,62,-86}, -{27,62,-85}, -{27,62,-84}, -{27,62,-83}, -{27,62,-82}, -{27,62,-81}, -{27,62,-80}, -{27,62,-79}, -{27,62,-78}, -{27,62,-77}, -{27,62,-76}, -{27,62,-75}, -{27,62,-74}, -{27,62,-73}, -{27,62,-72}, -{27,62,-71}, -{27,62,-70}, -{27,62,-69}, -{27,62,-68}, -{27,62,-67}, -{27,63,-90}, -{27,63,-89}, -{27,63,-88}, -{27,63,-87}, -{27,63,-86}, -{27,63,-85}, -{27,63,-84}, -{27,63,-83}, -{27,63,-82}, -{27,63,-81}, -{27,63,-80}, -{27,63,-79}, -{27,63,-78}, -{27,63,-77}, -{27,63,-76}, -{27,63,-75}, -{27,63,-74}, -{27,63,-73}, -{27,63,-72}, -{27,63,-71}, -{27,64,-90}, -{27,64,-89}, -{27,64,-88}, -{27,64,-87}, -{27,64,-86}, -{27,64,-85}, -{27,64,-84}, -{27,64,-83}, -{27,64,-82}, -{27,64,-81}, -{27,64,-80}, -{27,64,-79}, -{27,64,-78}, -{27,64,-77}, -{27,64,-76}, -{27,64,-75}, -{27,65,-91}, -{27,65,-90}, -{27,65,-89}, -{27,65,-88}, -{27,65,-87}, -{27,65,-86}, -{27,65,-85}, -{27,65,-84}, -{27,65,-83}, -{27,65,-82}, -{27,65,-81}, -{27,65,-80}, -{27,65,-79}, -{27,65,-78}, -{27,66,-92}, -{27,66,-91}, -{27,66,-90}, -{27,66,-89}, -{27,66,-88}, -{27,66,-87}, -{27,66,-86}, -{27,66,-85}, -{27,66,-84}, -{27,66,-83}, -{27,66,-82}, -{27,67,-93}, -{27,67,-92}, -{27,67,-91}, -{27,67,-90}, -{27,67,-89}, -{27,67,-88}, -{27,67,-87}, -{27,67,-86}, -{27,67,-85}, -{27,68,-94}, -{27,68,-93}, -{27,68,-92}, -{27,68,-91}, -{27,68,-90}, -{27,68,-89}, -{27,68,-88}, -{27,69,-94}, -{27,69,-93}, -{27,69,-92}, -{27,70,-95}, -{28,-36,32}, -{28,-36,33}, -{28,-36,34}, -{28,-36,35}, -{28,-35,28}, -{28,-35,29}, -{28,-35,30}, -{28,-35,31}, -{28,-35,32}, -{28,-35,33}, -{28,-35,34}, -{28,-35,35}, -{28,-34,25}, -{28,-34,26}, -{28,-34,27}, -{28,-34,28}, -{28,-34,29}, -{28,-34,30}, -{28,-34,31}, -{28,-34,32}, -{28,-34,33}, -{28,-34,34}, -{28,-34,35}, -{28,-33,22}, -{28,-33,23}, -{28,-33,24}, -{28,-33,25}, -{28,-33,26}, -{28,-33,27}, -{28,-33,28}, -{28,-33,29}, -{28,-33,30}, -{28,-33,31}, -{28,-33,32}, -{28,-33,33}, -{28,-33,34}, -{28,-33,35}, -{28,-32,19}, -{28,-32,20}, -{28,-32,21}, -{28,-32,22}, -{28,-32,23}, -{28,-32,24}, -{28,-32,25}, -{28,-32,26}, -{28,-32,27}, -{28,-32,28}, -{28,-32,29}, -{28,-32,30}, -{28,-32,31}, -{28,-32,32}, -{28,-32,33}, -{28,-32,34}, -{28,-32,35}, -{28,-31,16}, -{28,-31,17}, -{28,-31,18}, -{28,-31,19}, -{28,-31,20}, -{28,-31,21}, -{28,-31,22}, -{28,-31,23}, -{28,-31,24}, -{28,-31,25}, -{28,-31,26}, -{28,-31,27}, -{28,-31,28}, -{28,-31,29}, -{28,-31,30}, -{28,-31,31}, -{28,-31,32}, -{28,-31,33}, -{28,-31,34}, -{28,-31,35}, -{28,-30,14}, -{28,-30,15}, -{28,-30,16}, -{28,-30,17}, -{28,-30,18}, -{28,-30,19}, -{28,-30,20}, -{28,-30,21}, -{28,-30,22}, -{28,-30,23}, -{28,-30,24}, -{28,-30,25}, -{28,-30,26}, -{28,-30,27}, -{28,-30,28}, -{28,-30,29}, -{28,-30,30}, -{28,-30,31}, -{28,-30,32}, -{28,-30,33}, -{28,-30,34}, -{28,-30,35}, -{28,-29,11}, -{28,-29,12}, -{28,-29,13}, -{28,-29,14}, -{28,-29,15}, -{28,-29,16}, -{28,-29,17}, -{28,-29,18}, -{28,-29,19}, -{28,-29,20}, -{28,-29,21}, -{28,-29,22}, -{28,-29,23}, -{28,-29,24}, -{28,-29,25}, -{28,-29,26}, -{28,-29,27}, -{28,-29,28}, -{28,-29,29}, -{28,-29,30}, -{28,-29,31}, -{28,-29,32}, -{28,-29,33}, -{28,-29,34}, -{28,-29,35}, -{28,-28,9}, -{28,-28,10}, -{28,-28,11}, -{28,-28,12}, -{28,-28,13}, -{28,-28,14}, -{28,-28,15}, -{28,-28,16}, -{28,-28,17}, -{28,-28,18}, -{28,-28,19}, -{28,-28,20}, -{28,-28,21}, -{28,-28,22}, -{28,-28,23}, -{28,-28,24}, -{28,-28,25}, -{28,-28,26}, -{28,-28,27}, -{28,-28,28}, -{28,-28,29}, -{28,-28,30}, -{28,-28,31}, -{28,-28,32}, -{28,-28,33}, -{28,-28,34}, -{28,-28,35}, -{28,-27,7}, -{28,-27,8}, -{28,-27,9}, -{28,-27,10}, -{28,-27,11}, -{28,-27,12}, -{28,-27,13}, -{28,-27,14}, -{28,-27,15}, -{28,-27,16}, -{28,-27,17}, -{28,-27,18}, -{28,-27,19}, -{28,-27,20}, -{28,-27,21}, -{28,-27,22}, -{28,-27,23}, -{28,-27,24}, -{28,-27,25}, -{28,-27,26}, -{28,-27,27}, -{28,-27,28}, -{28,-27,29}, -{28,-27,30}, -{28,-27,31}, -{28,-27,32}, -{28,-27,33}, -{28,-27,34}, -{28,-27,35}, -{28,-26,5}, -{28,-26,6}, -{28,-26,7}, -{28,-26,8}, -{28,-26,9}, -{28,-26,10}, -{28,-26,11}, -{28,-26,12}, -{28,-26,13}, -{28,-26,14}, -{28,-26,15}, -{28,-26,16}, -{28,-26,17}, -{28,-26,18}, -{28,-26,19}, -{28,-26,20}, -{28,-26,21}, -{28,-26,22}, -{28,-26,23}, -{28,-26,24}, -{28,-26,25}, -{28,-26,26}, -{28,-26,27}, -{28,-26,28}, -{28,-26,29}, -{28,-26,30}, -{28,-26,31}, -{28,-26,32}, -{28,-26,33}, -{28,-26,34}, -{28,-26,35}, -{28,-25,3}, -{28,-25,4}, -{28,-25,5}, -{28,-25,6}, -{28,-25,7}, -{28,-25,8}, -{28,-25,9}, -{28,-25,10}, -{28,-25,11}, -{28,-25,12}, -{28,-25,13}, -{28,-25,14}, -{28,-25,15}, -{28,-25,16}, -{28,-25,17}, -{28,-25,18}, -{28,-25,19}, -{28,-25,20}, -{28,-25,21}, -{28,-25,22}, -{28,-25,23}, -{28,-25,24}, -{28,-25,25}, -{28,-25,26}, -{28,-25,27}, -{28,-25,28}, -{28,-25,29}, -{28,-25,30}, -{28,-25,31}, -{28,-25,32}, -{28,-25,33}, -{28,-25,34}, -{28,-25,35}, -{28,-24,1}, -{28,-24,2}, -{28,-24,3}, -{28,-24,4}, -{28,-24,5}, -{28,-24,6}, -{28,-24,7}, -{28,-24,8}, -{28,-24,9}, -{28,-24,10}, -{28,-24,11}, -{28,-24,12}, -{28,-24,13}, -{28,-24,14}, -{28,-24,15}, -{28,-24,16}, -{28,-24,17}, -{28,-24,18}, -{28,-24,19}, -{28,-24,20}, -{28,-24,21}, -{28,-24,22}, -{28,-24,23}, -{28,-24,24}, -{28,-24,25}, -{28,-24,26}, -{28,-24,27}, -{28,-24,28}, -{28,-24,29}, -{28,-24,30}, -{28,-24,31}, -{28,-24,32}, -{28,-24,33}, -{28,-24,34}, -{28,-24,35}, -{28,-23,0}, -{28,-23,1}, -{28,-23,2}, -{28,-23,3}, -{28,-23,4}, -{28,-23,5}, -{28,-23,6}, -{28,-23,7}, -{28,-23,8}, -{28,-23,9}, -{28,-23,10}, -{28,-23,11}, -{28,-23,12}, -{28,-23,13}, -{28,-23,14}, -{28,-23,15}, -{28,-23,16}, -{28,-23,17}, -{28,-23,18}, -{28,-23,19}, -{28,-23,20}, -{28,-23,21}, -{28,-23,22}, -{28,-23,23}, -{28,-23,24}, -{28,-23,25}, -{28,-23,26}, -{28,-23,27}, -{28,-23,28}, -{28,-23,29}, -{28,-23,30}, -{28,-23,31}, -{28,-23,32}, -{28,-23,33}, -{28,-23,34}, -{28,-23,35}, -{28,-23,36}, -{28,-22,-2}, -{28,-22,-1}, -{28,-22,0}, -{28,-22,1}, -{28,-22,2}, -{28,-22,3}, -{28,-22,4}, -{28,-22,5}, -{28,-22,6}, -{28,-22,7}, -{28,-22,8}, -{28,-22,9}, -{28,-22,10}, -{28,-22,11}, -{28,-22,12}, -{28,-22,13}, -{28,-22,14}, -{28,-22,15}, -{28,-22,16}, -{28,-22,17}, -{28,-22,18}, -{28,-22,19}, -{28,-22,20}, -{28,-22,21}, -{28,-22,22}, -{28,-22,23}, -{28,-22,24}, -{28,-22,25}, -{28,-22,26}, -{28,-22,27}, -{28,-22,28}, -{28,-22,29}, -{28,-22,30}, -{28,-22,31}, -{28,-22,32}, -{28,-22,33}, -{28,-22,34}, -{28,-22,35}, -{28,-22,36}, -{28,-21,-4}, -{28,-21,-3}, -{28,-21,-2}, -{28,-21,-1}, -{28,-21,0}, -{28,-21,1}, -{28,-21,2}, -{28,-21,3}, -{28,-21,4}, -{28,-21,5}, -{28,-21,6}, -{28,-21,7}, -{28,-21,8}, -{28,-21,9}, -{28,-21,10}, -{28,-21,11}, -{28,-21,12}, -{28,-21,13}, -{28,-21,14}, -{28,-21,15}, -{28,-21,16}, -{28,-21,17}, -{28,-21,18}, -{28,-21,19}, -{28,-21,20}, -{28,-21,21}, -{28,-21,22}, -{28,-21,23}, -{28,-21,24}, -{28,-21,25}, -{28,-21,26}, -{28,-21,27}, -{28,-21,28}, -{28,-21,29}, -{28,-21,30}, -{28,-21,31}, -{28,-21,32}, -{28,-21,33}, -{28,-21,34}, -{28,-21,35}, -{28,-21,36}, -{28,-20,-5}, -{28,-20,-4}, -{28,-20,-3}, -{28,-20,-2}, -{28,-20,-1}, -{28,-20,0}, -{28,-20,1}, -{28,-20,2}, -{28,-20,3}, -{28,-20,4}, -{28,-20,5}, -{28,-20,6}, -{28,-20,7}, -{28,-20,8}, -{28,-20,9}, -{28,-20,10}, -{28,-20,11}, -{28,-20,12}, -{28,-20,13}, -{28,-20,14}, -{28,-20,15}, -{28,-20,16}, -{28,-20,17}, -{28,-20,18}, -{28,-20,19}, -{28,-20,20}, -{28,-20,21}, -{28,-20,22}, -{28,-20,23}, -{28,-20,24}, -{28,-20,25}, -{28,-20,26}, -{28,-20,27}, -{28,-20,28}, -{28,-20,29}, -{28,-20,30}, -{28,-20,31}, -{28,-20,32}, -{28,-20,33}, -{28,-20,34}, -{28,-20,35}, -{28,-20,36}, -{28,-19,-7}, -{28,-19,-6}, -{28,-19,-5}, -{28,-19,-4}, -{28,-19,-3}, -{28,-19,-2}, -{28,-19,-1}, -{28,-19,0}, -{28,-19,1}, -{28,-19,2}, -{28,-19,3}, -{28,-19,4}, -{28,-19,5}, -{28,-19,6}, -{28,-19,7}, -{28,-19,8}, -{28,-19,9}, -{28,-19,10}, -{28,-19,11}, -{28,-19,12}, -{28,-19,13}, -{28,-19,14}, -{28,-19,15}, -{28,-19,16}, -{28,-19,17}, -{28,-19,18}, -{28,-19,19}, -{28,-19,20}, -{28,-19,21}, -{28,-19,22}, -{28,-19,23}, -{28,-19,24}, -{28,-19,25}, -{28,-19,26}, -{28,-19,27}, -{28,-19,28}, -{28,-19,29}, -{28,-19,30}, -{28,-19,31}, -{28,-19,32}, -{28,-19,33}, -{28,-19,34}, -{28,-19,35}, -{28,-19,36}, -{28,-18,-8}, -{28,-18,-7}, -{28,-18,-6}, -{28,-18,-5}, -{28,-18,-4}, -{28,-18,-3}, -{28,-18,-2}, -{28,-18,-1}, -{28,-18,0}, -{28,-18,1}, -{28,-18,2}, -{28,-18,3}, -{28,-18,4}, -{28,-18,5}, -{28,-18,6}, -{28,-18,7}, -{28,-18,8}, -{28,-18,9}, -{28,-18,10}, -{28,-18,11}, -{28,-18,12}, -{28,-18,13}, -{28,-18,14}, -{28,-18,15}, -{28,-18,16}, -{28,-18,17}, -{28,-18,18}, -{28,-18,19}, -{28,-18,20}, -{28,-18,21}, -{28,-18,22}, -{28,-18,23}, -{28,-18,24}, -{28,-18,25}, -{28,-18,26}, -{28,-18,27}, -{28,-18,28}, -{28,-18,29}, -{28,-18,30}, -{28,-18,31}, -{28,-18,32}, -{28,-18,33}, -{28,-18,34}, -{28,-18,35}, -{28,-18,36}, -{28,-17,-10}, -{28,-17,-9}, -{28,-17,-8}, -{28,-17,-7}, -{28,-17,-6}, -{28,-17,-5}, -{28,-17,-4}, -{28,-17,-3}, -{28,-17,-2}, -{28,-17,-1}, -{28,-17,0}, -{28,-17,1}, -{28,-17,2}, -{28,-17,3}, -{28,-17,4}, -{28,-17,5}, -{28,-17,6}, -{28,-17,7}, -{28,-17,8}, -{28,-17,9}, -{28,-17,10}, -{28,-17,11}, -{28,-17,12}, -{28,-17,13}, -{28,-17,14}, -{28,-17,15}, -{28,-17,16}, -{28,-17,17}, -{28,-17,18}, -{28,-17,19}, -{28,-17,20}, -{28,-17,21}, -{28,-17,22}, -{28,-17,23}, -{28,-17,24}, -{28,-17,25}, -{28,-17,26}, -{28,-17,27}, -{28,-17,28}, -{28,-17,29}, -{28,-17,30}, -{28,-17,31}, -{28,-17,32}, -{28,-17,33}, -{28,-17,34}, -{28,-17,35}, -{28,-17,36}, -{28,-16,-11}, -{28,-16,-10}, -{28,-16,-9}, -{28,-16,-8}, -{28,-16,-7}, -{28,-16,-6}, -{28,-16,-5}, -{28,-16,-4}, -{28,-16,-3}, -{28,-16,-2}, -{28,-16,-1}, -{28,-16,0}, -{28,-16,1}, -{28,-16,2}, -{28,-16,3}, -{28,-16,4}, -{28,-16,5}, -{28,-16,6}, -{28,-16,7}, -{28,-16,8}, -{28,-16,9}, -{28,-16,10}, -{28,-16,11}, -{28,-16,12}, -{28,-16,13}, -{28,-16,14}, -{28,-16,15}, -{28,-16,16}, -{28,-16,17}, -{28,-16,18}, -{28,-16,19}, -{28,-16,20}, -{28,-16,21}, -{28,-16,22}, -{28,-16,23}, -{28,-16,24}, -{28,-16,25}, -{28,-16,26}, -{28,-16,27}, -{28,-16,28}, -{28,-16,29}, -{28,-16,30}, -{28,-16,31}, -{28,-16,32}, -{28,-16,33}, -{28,-16,34}, -{28,-16,35}, -{28,-16,36}, -{28,-15,-13}, -{28,-15,-12}, -{28,-15,-11}, -{28,-15,-10}, -{28,-15,-9}, -{28,-15,-8}, -{28,-15,-7}, -{28,-15,-6}, -{28,-15,-5}, -{28,-15,-4}, -{28,-15,-3}, -{28,-15,-2}, -{28,-15,-1}, -{28,-15,0}, -{28,-15,1}, -{28,-15,2}, -{28,-15,3}, -{28,-15,4}, -{28,-15,5}, -{28,-15,6}, -{28,-15,7}, -{28,-15,8}, -{28,-15,9}, -{28,-15,10}, -{28,-15,11}, -{28,-15,12}, -{28,-15,13}, -{28,-15,14}, -{28,-15,15}, -{28,-15,16}, -{28,-15,17}, -{28,-15,18}, -{28,-15,19}, -{28,-15,20}, -{28,-15,21}, -{28,-15,22}, -{28,-15,23}, -{28,-15,24}, -{28,-15,25}, -{28,-15,26}, -{28,-15,27}, -{28,-15,28}, -{28,-15,29}, -{28,-15,30}, -{28,-15,31}, -{28,-15,32}, -{28,-15,33}, -{28,-15,34}, -{28,-15,35}, -{28,-15,36}, -{28,-14,-14}, -{28,-14,-13}, -{28,-14,-12}, -{28,-14,-11}, -{28,-14,-10}, -{28,-14,-9}, -{28,-14,-8}, -{28,-14,-7}, -{28,-14,-6}, -{28,-14,-5}, -{28,-14,-4}, -{28,-14,-3}, -{28,-14,-2}, -{28,-14,-1}, -{28,-14,0}, -{28,-14,1}, -{28,-14,2}, -{28,-14,3}, -{28,-14,4}, -{28,-14,5}, -{28,-14,6}, -{28,-14,7}, -{28,-14,8}, -{28,-14,9}, -{28,-14,10}, -{28,-14,11}, -{28,-14,12}, -{28,-14,13}, -{28,-14,14}, -{28,-14,15}, -{28,-14,16}, -{28,-14,17}, -{28,-14,18}, -{28,-14,19}, -{28,-14,20}, -{28,-14,21}, -{28,-14,22}, -{28,-14,23}, -{28,-14,24}, -{28,-14,25}, -{28,-14,26}, -{28,-14,27}, -{28,-14,28}, -{28,-14,29}, -{28,-14,30}, -{28,-14,31}, -{28,-14,32}, -{28,-14,33}, -{28,-14,34}, -{28,-14,35}, -{28,-14,36}, -{28,-13,-15}, -{28,-13,-14}, -{28,-13,-13}, -{28,-13,-12}, -{28,-13,-11}, -{28,-13,-10}, -{28,-13,-9}, -{28,-13,-8}, -{28,-13,-7}, -{28,-13,-6}, -{28,-13,-5}, -{28,-13,-4}, -{28,-13,-3}, -{28,-13,-2}, -{28,-13,-1}, -{28,-13,0}, -{28,-13,1}, -{28,-13,2}, -{28,-13,3}, -{28,-13,4}, -{28,-13,5}, -{28,-13,6}, -{28,-13,7}, -{28,-13,8}, -{28,-13,9}, -{28,-13,10}, -{28,-13,11}, -{28,-13,12}, -{28,-13,13}, -{28,-13,14}, -{28,-13,15}, -{28,-13,16}, -{28,-13,17}, -{28,-13,18}, -{28,-13,19}, -{28,-13,20}, -{28,-13,21}, -{28,-13,22}, -{28,-13,23}, -{28,-13,24}, -{28,-13,25}, -{28,-13,26}, -{28,-13,27}, -{28,-13,28}, -{28,-13,29}, -{28,-13,30}, -{28,-13,31}, -{28,-13,32}, -{28,-13,33}, -{28,-13,34}, -{28,-13,35}, -{28,-13,36}, -{28,-12,-17}, -{28,-12,-16}, -{28,-12,-15}, -{28,-12,-14}, -{28,-12,-13}, -{28,-12,-12}, -{28,-12,-11}, -{28,-12,-10}, -{28,-12,-9}, -{28,-12,-8}, -{28,-12,-7}, -{28,-12,-6}, -{28,-12,-5}, -{28,-12,-4}, -{28,-12,-3}, -{28,-12,-2}, -{28,-12,-1}, -{28,-12,0}, -{28,-12,1}, -{28,-12,2}, -{28,-12,3}, -{28,-12,4}, -{28,-12,5}, -{28,-12,6}, -{28,-12,7}, -{28,-12,8}, -{28,-12,9}, -{28,-12,10}, -{28,-12,11}, -{28,-12,12}, -{28,-12,13}, -{28,-12,14}, -{28,-12,15}, -{28,-12,16}, -{28,-12,17}, -{28,-12,18}, -{28,-12,19}, -{28,-12,20}, -{28,-12,21}, -{28,-12,22}, -{28,-12,23}, -{28,-12,24}, -{28,-12,25}, -{28,-12,26}, -{28,-12,27}, -{28,-12,28}, -{28,-12,29}, -{28,-12,30}, -{28,-12,31}, -{28,-12,32}, -{28,-12,33}, -{28,-12,34}, -{28,-12,35}, -{28,-12,36}, -{28,-11,-18}, -{28,-11,-17}, -{28,-11,-16}, -{28,-11,-15}, -{28,-11,-14}, -{28,-11,-13}, -{28,-11,-12}, -{28,-11,-11}, -{28,-11,-10}, -{28,-11,-9}, -{28,-11,-8}, -{28,-11,-7}, -{28,-11,-6}, -{28,-11,-5}, -{28,-11,-4}, -{28,-11,-3}, -{28,-11,-2}, -{28,-11,-1}, -{28,-11,0}, -{28,-11,1}, -{28,-11,2}, -{28,-11,3}, -{28,-11,4}, -{28,-11,5}, -{28,-11,6}, -{28,-11,7}, -{28,-11,8}, -{28,-11,9}, -{28,-11,10}, -{28,-11,11}, -{28,-11,12}, -{28,-11,13}, -{28,-11,14}, -{28,-11,15}, -{28,-11,16}, -{28,-11,17}, -{28,-11,18}, -{28,-11,19}, -{28,-11,20}, -{28,-11,21}, -{28,-11,22}, -{28,-11,23}, -{28,-11,24}, -{28,-11,25}, -{28,-11,26}, -{28,-11,27}, -{28,-11,28}, -{28,-11,29}, -{28,-11,30}, -{28,-11,31}, -{28,-11,32}, -{28,-11,33}, -{28,-11,34}, -{28,-11,35}, -{28,-11,36}, -{28,-10,-19}, -{28,-10,-18}, -{28,-10,-17}, -{28,-10,-16}, -{28,-10,-15}, -{28,-10,-14}, -{28,-10,-13}, -{28,-10,-12}, -{28,-10,-11}, -{28,-10,-10}, -{28,-10,-9}, -{28,-10,-8}, -{28,-10,-7}, -{28,-10,-6}, -{28,-10,-5}, -{28,-10,-4}, -{28,-10,-3}, -{28,-10,-2}, -{28,-10,-1}, -{28,-10,0}, -{28,-10,1}, -{28,-10,2}, -{28,-10,3}, -{28,-10,4}, -{28,-10,5}, -{28,-10,6}, -{28,-10,7}, -{28,-10,8}, -{28,-10,9}, -{28,-10,10}, -{28,-10,11}, -{28,-10,12}, -{28,-10,13}, -{28,-10,14}, -{28,-10,15}, -{28,-10,16}, -{28,-10,17}, -{28,-10,18}, -{28,-10,19}, -{28,-10,20}, -{28,-10,21}, -{28,-10,22}, -{28,-10,23}, -{28,-10,24}, -{28,-10,25}, -{28,-10,26}, -{28,-10,27}, -{28,-10,28}, -{28,-10,29}, -{28,-10,30}, -{28,-10,31}, -{28,-10,32}, -{28,-10,33}, -{28,-10,34}, -{28,-10,35}, -{28,-10,36}, -{28,-9,-21}, -{28,-9,-20}, -{28,-9,-19}, -{28,-9,-18}, -{28,-9,-17}, -{28,-9,-16}, -{28,-9,-15}, -{28,-9,-14}, -{28,-9,-13}, -{28,-9,-12}, -{28,-9,-11}, -{28,-9,-10}, -{28,-9,-9}, -{28,-9,-8}, -{28,-9,-7}, -{28,-9,-6}, -{28,-9,-5}, -{28,-9,-4}, -{28,-9,-3}, -{28,-9,-2}, -{28,-9,-1}, -{28,-9,0}, -{28,-9,1}, -{28,-9,2}, -{28,-9,3}, -{28,-9,4}, -{28,-9,5}, -{28,-9,6}, -{28,-9,7}, -{28,-9,8}, -{28,-9,9}, -{28,-9,10}, -{28,-9,11}, -{28,-9,12}, -{28,-9,13}, -{28,-9,14}, -{28,-9,15}, -{28,-9,16}, -{28,-9,17}, -{28,-9,18}, -{28,-9,19}, -{28,-9,20}, -{28,-9,21}, -{28,-9,22}, -{28,-9,23}, -{28,-9,24}, -{28,-9,25}, -{28,-9,26}, -{28,-9,27}, -{28,-9,28}, -{28,-9,29}, -{28,-9,30}, -{28,-9,31}, -{28,-9,32}, -{28,-9,33}, -{28,-9,34}, -{28,-9,35}, -{28,-9,36}, -{28,-8,-22}, -{28,-8,-21}, -{28,-8,-20}, -{28,-8,-19}, -{28,-8,-18}, -{28,-8,-17}, -{28,-8,-16}, -{28,-8,-15}, -{28,-8,-14}, -{28,-8,-13}, -{28,-8,-12}, -{28,-8,-11}, -{28,-8,-10}, -{28,-8,-9}, -{28,-8,-8}, -{28,-8,-7}, -{28,-8,-6}, -{28,-8,-5}, -{28,-8,-4}, -{28,-8,-3}, -{28,-8,-2}, -{28,-8,-1}, -{28,-8,0}, -{28,-8,1}, -{28,-8,2}, -{28,-8,3}, -{28,-8,4}, -{28,-8,5}, -{28,-8,6}, -{28,-8,7}, -{28,-8,8}, -{28,-8,9}, -{28,-8,10}, -{28,-8,11}, -{28,-8,12}, -{28,-8,13}, -{28,-8,14}, -{28,-8,15}, -{28,-8,16}, -{28,-8,17}, -{28,-8,18}, -{28,-8,19}, -{28,-8,20}, -{28,-8,21}, -{28,-8,22}, -{28,-8,23}, -{28,-8,24}, -{28,-8,25}, -{28,-8,26}, -{28,-8,27}, -{28,-8,28}, -{28,-8,29}, -{28,-8,30}, -{28,-8,31}, -{28,-8,32}, -{28,-8,33}, -{28,-8,34}, -{28,-8,35}, -{28,-8,36}, -{28,-7,-23}, -{28,-7,-22}, -{28,-7,-21}, -{28,-7,-20}, -{28,-7,-19}, -{28,-7,-18}, -{28,-7,-17}, -{28,-7,-16}, -{28,-7,-15}, -{28,-7,-14}, -{28,-7,-13}, -{28,-7,-12}, -{28,-7,-11}, -{28,-7,-10}, -{28,-7,-9}, -{28,-7,-8}, -{28,-7,-7}, -{28,-7,-6}, -{28,-7,-5}, -{28,-7,-4}, -{28,-7,-3}, -{28,-7,-2}, -{28,-7,-1}, -{28,-7,0}, -{28,-7,1}, -{28,-7,2}, -{28,-7,3}, -{28,-7,4}, -{28,-7,5}, -{28,-7,6}, -{28,-7,7}, -{28,-7,8}, -{28,-7,9}, -{28,-7,10}, -{28,-7,11}, -{28,-7,12}, -{28,-7,13}, -{28,-7,14}, -{28,-7,15}, -{28,-7,16}, -{28,-7,17}, -{28,-7,18}, -{28,-7,19}, -{28,-7,20}, -{28,-7,21}, -{28,-7,22}, -{28,-7,23}, -{28,-7,24}, -{28,-7,25}, -{28,-7,26}, -{28,-7,27}, -{28,-7,28}, -{28,-7,29}, -{28,-7,30}, -{28,-7,31}, -{28,-7,32}, -{28,-7,33}, -{28,-7,34}, -{28,-7,35}, -{28,-7,36}, -{28,-6,-24}, -{28,-6,-23}, -{28,-6,-22}, -{28,-6,-21}, -{28,-6,-20}, -{28,-6,-19}, -{28,-6,-18}, -{28,-6,-17}, -{28,-6,-16}, -{28,-6,-15}, -{28,-6,-14}, -{28,-6,-13}, -{28,-6,-12}, -{28,-6,-11}, -{28,-6,-10}, -{28,-6,-9}, -{28,-6,-8}, -{28,-6,-7}, -{28,-6,-6}, -{28,-6,-5}, -{28,-6,-4}, -{28,-6,-3}, -{28,-6,-2}, -{28,-6,-1}, -{28,-6,0}, -{28,-6,1}, -{28,-6,2}, -{28,-6,3}, -{28,-6,4}, -{28,-6,5}, -{28,-6,6}, -{28,-6,7}, -{28,-6,8}, -{28,-6,9}, -{28,-6,10}, -{28,-6,11}, -{28,-6,12}, -{28,-6,13}, -{28,-6,14}, -{28,-6,15}, -{28,-6,16}, -{28,-6,17}, -{28,-6,18}, -{28,-6,19}, -{28,-6,20}, -{28,-6,21}, -{28,-6,22}, -{28,-6,23}, -{28,-6,24}, -{28,-6,25}, -{28,-6,26}, -{28,-6,27}, -{28,-6,28}, -{28,-6,29}, -{28,-6,30}, -{28,-6,31}, -{28,-6,32}, -{28,-6,33}, -{28,-6,34}, -{28,-6,35}, -{28,-6,36}, -{28,-5,-25}, -{28,-5,-24}, -{28,-5,-23}, -{28,-5,-22}, -{28,-5,-21}, -{28,-5,-20}, -{28,-5,-19}, -{28,-5,-18}, -{28,-5,-17}, -{28,-5,-16}, -{28,-5,-15}, -{28,-5,-14}, -{28,-5,-13}, -{28,-5,-12}, -{28,-5,-11}, -{28,-5,-10}, -{28,-5,-9}, -{28,-5,-8}, -{28,-5,-7}, -{28,-5,-6}, -{28,-5,-5}, -{28,-5,-4}, -{28,-5,-3}, -{28,-5,-2}, -{28,-5,-1}, -{28,-5,0}, -{28,-5,1}, -{28,-5,2}, -{28,-5,3}, -{28,-5,4}, -{28,-5,5}, -{28,-5,6}, -{28,-5,7}, -{28,-5,8}, -{28,-5,9}, -{28,-5,10}, -{28,-5,11}, -{28,-5,12}, -{28,-5,13}, -{28,-5,14}, -{28,-5,15}, -{28,-5,16}, -{28,-5,17}, -{28,-5,18}, -{28,-5,19}, -{28,-5,20}, -{28,-5,21}, -{28,-5,22}, -{28,-5,23}, -{28,-5,24}, -{28,-5,25}, -{28,-5,26}, -{28,-5,27}, -{28,-5,28}, -{28,-5,29}, -{28,-5,30}, -{28,-5,31}, -{28,-5,32}, -{28,-5,33}, -{28,-5,34}, -{28,-5,35}, -{28,-5,36}, -{28,-5,37}, -{28,-4,-27}, -{28,-4,-26}, -{28,-4,-25}, -{28,-4,-24}, -{28,-4,-23}, -{28,-4,-22}, -{28,-4,-21}, -{28,-4,-20}, -{28,-4,-19}, -{28,-4,-18}, -{28,-4,-17}, -{28,-4,-16}, -{28,-4,-15}, -{28,-4,-14}, -{28,-4,-13}, -{28,-4,-12}, -{28,-4,-11}, -{28,-4,-10}, -{28,-4,-9}, -{28,-4,-8}, -{28,-4,-7}, -{28,-4,-6}, -{28,-4,-5}, -{28,-4,-4}, -{28,-4,-3}, -{28,-4,-2}, -{28,-4,-1}, -{28,-4,0}, -{28,-4,1}, -{28,-4,2}, -{28,-4,3}, -{28,-4,4}, -{28,-4,5}, -{28,-4,6}, -{28,-4,7}, -{28,-4,8}, -{28,-4,9}, -{28,-4,10}, -{28,-4,11}, -{28,-4,12}, -{28,-4,13}, -{28,-4,14}, -{28,-4,15}, -{28,-4,16}, -{28,-4,17}, -{28,-4,18}, -{28,-4,19}, -{28,-4,20}, -{28,-4,21}, -{28,-4,22}, -{28,-4,23}, -{28,-4,24}, -{28,-4,25}, -{28,-4,26}, -{28,-4,27}, -{28,-4,28}, -{28,-4,29}, -{28,-4,30}, -{28,-4,31}, -{28,-4,32}, -{28,-4,33}, -{28,-4,34}, -{28,-4,35}, -{28,-4,36}, -{28,-4,37}, -{28,-3,-28}, -{28,-3,-27}, -{28,-3,-26}, -{28,-3,-25}, -{28,-3,-24}, -{28,-3,-23}, -{28,-3,-22}, -{28,-3,-21}, -{28,-3,-20}, -{28,-3,-19}, -{28,-3,-18}, -{28,-3,-17}, -{28,-3,-16}, -{28,-3,-15}, -{28,-3,-14}, -{28,-3,-13}, -{28,-3,-12}, -{28,-3,-11}, -{28,-3,-10}, -{28,-3,-9}, -{28,-3,-8}, -{28,-3,-7}, -{28,-3,-6}, -{28,-3,-5}, -{28,-3,-4}, -{28,-3,-3}, -{28,-3,-2}, -{28,-3,-1}, -{28,-3,0}, -{28,-3,1}, -{28,-3,2}, -{28,-3,3}, -{28,-3,4}, -{28,-3,5}, -{28,-3,6}, -{28,-3,7}, -{28,-3,8}, -{28,-3,9}, -{28,-3,10}, -{28,-3,11}, -{28,-3,12}, -{28,-3,13}, -{28,-3,14}, -{28,-3,15}, -{28,-3,16}, -{28,-3,17}, -{28,-3,18}, -{28,-3,19}, -{28,-3,20}, -{28,-3,21}, -{28,-3,22}, -{28,-3,23}, -{28,-3,24}, -{28,-3,25}, -{28,-3,26}, -{28,-3,27}, -{28,-3,28}, -{28,-3,29}, -{28,-3,30}, -{28,-3,31}, -{28,-3,32}, -{28,-3,33}, -{28,-3,34}, -{28,-3,35}, -{28,-3,36}, -{28,-3,37}, -{28,-2,-29}, -{28,-2,-28}, -{28,-2,-27}, -{28,-2,-26}, -{28,-2,-25}, -{28,-2,-24}, -{28,-2,-23}, -{28,-2,-22}, -{28,-2,-21}, -{28,-2,-20}, -{28,-2,-19}, -{28,-2,-18}, -{28,-2,-17}, -{28,-2,-16}, -{28,-2,-15}, -{28,-2,-14}, -{28,-2,-13}, -{28,-2,-12}, -{28,-2,-11}, -{28,-2,-10}, -{28,-2,-9}, -{28,-2,-8}, -{28,-2,-7}, -{28,-2,-6}, -{28,-2,-5}, -{28,-2,-4}, -{28,-2,-3}, -{28,-2,-2}, -{28,-2,-1}, -{28,-2,0}, -{28,-2,1}, -{28,-2,2}, -{28,-2,3}, -{28,-2,4}, -{28,-2,5}, -{28,-2,6}, -{28,-2,7}, -{28,-2,8}, -{28,-2,9}, -{28,-2,10}, -{28,-2,11}, -{28,-2,12}, -{28,-2,13}, -{28,-2,14}, -{28,-2,15}, -{28,-2,16}, -{28,-2,17}, -{28,-2,18}, -{28,-2,19}, -{28,-2,20}, -{28,-2,21}, -{28,-2,22}, -{28,-2,23}, -{28,-2,24}, -{28,-2,25}, -{28,-2,26}, -{28,-2,27}, -{28,-2,28}, -{28,-2,29}, -{28,-2,30}, -{28,-2,31}, -{28,-2,32}, -{28,-2,33}, -{28,-2,34}, -{28,-2,35}, -{28,-2,36}, -{28,-2,37}, -{28,-1,-30}, -{28,-1,-29}, -{28,-1,-28}, -{28,-1,-27}, -{28,-1,-26}, -{28,-1,-25}, -{28,-1,-24}, -{28,-1,-23}, -{28,-1,-22}, -{28,-1,-21}, -{28,-1,-20}, -{28,-1,-19}, -{28,-1,-18}, -{28,-1,-17}, -{28,-1,-16}, -{28,-1,-15}, -{28,-1,-14}, -{28,-1,-13}, -{28,-1,-12}, -{28,-1,-11}, -{28,-1,-10}, -{28,-1,-9}, -{28,-1,-8}, -{28,-1,-7}, -{28,-1,-6}, -{28,-1,-5}, -{28,-1,-4}, -{28,-1,-3}, -{28,-1,-2}, -{28,-1,-1}, -{28,-1,0}, -{28,-1,1}, -{28,-1,2}, -{28,-1,3}, -{28,-1,4}, -{28,-1,5}, -{28,-1,6}, -{28,-1,7}, -{28,-1,8}, -{28,-1,9}, -{28,-1,10}, -{28,-1,11}, -{28,-1,12}, -{28,-1,13}, -{28,-1,14}, -{28,-1,15}, -{28,-1,16}, -{28,-1,17}, -{28,-1,18}, -{28,-1,19}, -{28,-1,20}, -{28,-1,21}, -{28,-1,22}, -{28,-1,23}, -{28,-1,24}, -{28,-1,25}, -{28,-1,26}, -{28,-1,27}, -{28,-1,28}, -{28,-1,29}, -{28,-1,30}, -{28,-1,31}, -{28,-1,32}, -{28,-1,33}, -{28,-1,34}, -{28,-1,35}, -{28,-1,36}, -{28,-1,37}, -{28,0,-31}, -{28,0,-30}, -{28,0,-29}, -{28,0,-28}, -{28,0,-27}, -{28,0,-26}, -{28,0,-25}, -{28,0,-24}, -{28,0,-23}, -{28,0,-22}, -{28,0,-21}, -{28,0,-20}, -{28,0,-19}, -{28,0,-18}, -{28,0,-17}, -{28,0,-16}, -{28,0,-15}, -{28,0,-14}, -{28,0,-13}, -{28,0,-12}, -{28,0,-11}, -{28,0,-10}, -{28,0,-9}, -{28,0,-8}, -{28,0,-7}, -{28,0,-6}, -{28,0,-5}, -{28,0,-4}, -{28,0,-3}, -{28,0,-2}, -{28,0,-1}, -{28,0,0}, -{28,0,1}, -{28,0,2}, -{28,0,3}, -{28,0,4}, -{28,0,5}, -{28,0,6}, -{28,0,7}, -{28,0,8}, -{28,0,9}, -{28,0,10}, -{28,0,11}, -{28,0,12}, -{28,0,13}, -{28,0,14}, -{28,0,15}, -{28,0,16}, -{28,0,17}, -{28,0,18}, -{28,0,19}, -{28,0,20}, -{28,0,21}, -{28,0,22}, -{28,0,23}, -{28,0,24}, -{28,0,25}, -{28,0,26}, -{28,0,27}, -{28,0,28}, -{28,0,29}, -{28,0,30}, -{28,0,31}, -{28,0,32}, -{28,0,33}, -{28,0,34}, -{28,0,35}, -{28,0,36}, -{28,0,37}, -{28,1,-32}, -{28,1,-31}, -{28,1,-30}, -{28,1,-29}, -{28,1,-28}, -{28,1,-27}, -{28,1,-26}, -{28,1,-25}, -{28,1,-24}, -{28,1,-23}, -{28,1,-22}, -{28,1,-21}, -{28,1,-20}, -{28,1,-19}, -{28,1,-18}, -{28,1,-17}, -{28,1,-16}, -{28,1,-15}, -{28,1,-14}, -{28,1,-13}, -{28,1,-12}, -{28,1,-11}, -{28,1,-10}, -{28,1,-9}, -{28,1,-8}, -{28,1,-7}, -{28,1,-6}, -{28,1,-5}, -{28,1,-4}, -{28,1,-3}, -{28,1,-2}, -{28,1,-1}, -{28,1,0}, -{28,1,1}, -{28,1,2}, -{28,1,3}, -{28,1,4}, -{28,1,5}, -{28,1,6}, -{28,1,7}, -{28,1,8}, -{28,1,9}, -{28,1,10}, -{28,1,11}, -{28,1,12}, -{28,1,13}, -{28,1,14}, -{28,1,15}, -{28,1,16}, -{28,1,17}, -{28,1,18}, -{28,1,19}, -{28,1,20}, -{28,1,21}, -{28,1,22}, -{28,1,23}, -{28,1,24}, -{28,1,25}, -{28,1,26}, -{28,1,27}, -{28,1,28}, -{28,1,29}, -{28,1,30}, -{28,1,31}, -{28,1,32}, -{28,1,33}, -{28,1,34}, -{28,1,35}, -{28,1,36}, -{28,1,37}, -{28,2,-34}, -{28,2,-33}, -{28,2,-32}, -{28,2,-31}, -{28,2,-30}, -{28,2,-29}, -{28,2,-28}, -{28,2,-27}, -{28,2,-26}, -{28,2,-25}, -{28,2,-24}, -{28,2,-23}, -{28,2,-22}, -{28,2,-21}, -{28,2,-20}, -{28,2,-19}, -{28,2,-18}, -{28,2,-17}, -{28,2,-16}, -{28,2,-15}, -{28,2,-14}, -{28,2,-13}, -{28,2,-12}, -{28,2,-11}, -{28,2,-10}, -{28,2,-9}, -{28,2,-8}, -{28,2,-7}, -{28,2,-6}, -{28,2,-5}, -{28,2,-4}, -{28,2,-3}, -{28,2,-2}, -{28,2,-1}, -{28,2,0}, -{28,2,1}, -{28,2,2}, -{28,2,3}, -{28,2,4}, -{28,2,5}, -{28,2,6}, -{28,2,7}, -{28,2,8}, -{28,2,9}, -{28,2,10}, -{28,2,11}, -{28,2,12}, -{28,2,13}, -{28,2,14}, -{28,2,15}, -{28,2,16}, -{28,2,17}, -{28,2,18}, -{28,2,19}, -{28,2,20}, -{28,2,21}, -{28,2,22}, -{28,2,23}, -{28,2,24}, -{28,2,25}, -{28,2,26}, -{28,2,27}, -{28,2,28}, -{28,2,29}, -{28,2,30}, -{28,2,31}, -{28,2,32}, -{28,2,33}, -{28,2,34}, -{28,2,35}, -{28,2,36}, -{28,2,37}, -{28,3,-35}, -{28,3,-34}, -{28,3,-33}, -{28,3,-32}, -{28,3,-31}, -{28,3,-30}, -{28,3,-29}, -{28,3,-28}, -{28,3,-27}, -{28,3,-26}, -{28,3,-25}, -{28,3,-24}, -{28,3,-23}, -{28,3,-22}, -{28,3,-21}, -{28,3,-20}, -{28,3,-19}, -{28,3,-18}, -{28,3,-17}, -{28,3,-16}, -{28,3,-15}, -{28,3,-14}, -{28,3,-13}, -{28,3,-12}, -{28,3,-11}, -{28,3,-10}, -{28,3,-9}, -{28,3,-8}, -{28,3,-7}, -{28,3,-6}, -{28,3,-5}, -{28,3,-4}, -{28,3,-3}, -{28,3,-2}, -{28,3,-1}, -{28,3,0}, -{28,3,1}, -{28,3,2}, -{28,3,3}, -{28,3,4}, -{28,3,5}, -{28,3,6}, -{28,3,7}, -{28,3,8}, -{28,3,9}, -{28,3,10}, -{28,3,11}, -{28,3,12}, -{28,3,13}, -{28,3,14}, -{28,3,15}, -{28,3,16}, -{28,3,17}, -{28,3,18}, -{28,3,19}, -{28,3,20}, -{28,3,21}, -{28,3,22}, -{28,3,23}, -{28,3,24}, -{28,3,25}, -{28,3,26}, -{28,3,27}, -{28,3,28}, -{28,3,29}, -{28,3,30}, -{28,3,31}, -{28,3,32}, -{28,3,33}, -{28,3,34}, -{28,3,35}, -{28,3,36}, -{28,3,37}, -{28,4,-36}, -{28,4,-35}, -{28,4,-34}, -{28,4,-33}, -{28,4,-32}, -{28,4,-31}, -{28,4,-30}, -{28,4,-29}, -{28,4,-28}, -{28,4,-27}, -{28,4,-26}, -{28,4,-25}, -{28,4,-24}, -{28,4,-23}, -{28,4,-22}, -{28,4,-21}, -{28,4,-20}, -{28,4,-19}, -{28,4,-18}, -{28,4,-17}, -{28,4,-16}, -{28,4,-15}, -{28,4,-14}, -{28,4,-13}, -{28,4,-12}, -{28,4,-11}, -{28,4,-10}, -{28,4,-9}, -{28,4,-8}, -{28,4,-7}, -{28,4,-6}, -{28,4,-5}, -{28,4,-4}, -{28,4,-3}, -{28,4,-2}, -{28,4,-1}, -{28,4,0}, -{28,4,1}, -{28,4,2}, -{28,4,3}, -{28,4,4}, -{28,4,5}, -{28,4,6}, -{28,4,7}, -{28,4,8}, -{28,4,9}, -{28,4,10}, -{28,4,11}, -{28,4,12}, -{28,4,13}, -{28,4,14}, -{28,4,15}, -{28,4,16}, -{28,4,17}, -{28,4,18}, -{28,4,19}, -{28,4,20}, -{28,4,21}, -{28,4,22}, -{28,4,23}, -{28,4,24}, -{28,4,25}, -{28,4,26}, -{28,4,27}, -{28,4,28}, -{28,4,29}, -{28,4,30}, -{28,4,31}, -{28,4,32}, -{28,4,33}, -{28,4,34}, -{28,4,35}, -{28,4,36}, -{28,4,37}, -{28,5,-37}, -{28,5,-36}, -{28,5,-35}, -{28,5,-34}, -{28,5,-33}, -{28,5,-32}, -{28,5,-31}, -{28,5,-30}, -{28,5,-29}, -{28,5,-28}, -{28,5,-27}, -{28,5,-26}, -{28,5,-25}, -{28,5,-24}, -{28,5,-23}, -{28,5,-22}, -{28,5,-21}, -{28,5,-20}, -{28,5,-19}, -{28,5,-18}, -{28,5,-17}, -{28,5,-16}, -{28,5,-15}, -{28,5,-14}, -{28,5,-13}, -{28,5,-12}, -{28,5,-11}, -{28,5,-10}, -{28,5,-9}, -{28,5,-8}, -{28,5,-7}, -{28,5,-6}, -{28,5,-5}, -{28,5,-4}, -{28,5,-3}, -{28,5,-2}, -{28,5,-1}, -{28,5,0}, -{28,5,1}, -{28,5,2}, -{28,5,3}, -{28,5,4}, -{28,5,5}, -{28,5,6}, -{28,5,7}, -{28,5,8}, -{28,5,9}, -{28,5,10}, -{28,5,11}, -{28,5,12}, -{28,5,13}, -{28,5,14}, -{28,5,15}, -{28,5,16}, -{28,5,17}, -{28,5,18}, -{28,5,19}, -{28,5,20}, -{28,5,21}, -{28,5,22}, -{28,5,23}, -{28,5,24}, -{28,5,25}, -{28,5,26}, -{28,5,27}, -{28,5,28}, -{28,5,29}, -{28,5,30}, -{28,5,31}, -{28,5,32}, -{28,5,33}, -{28,5,34}, -{28,5,35}, -{28,5,36}, -{28,5,37}, -{28,6,-38}, -{28,6,-37}, -{28,6,-36}, -{28,6,-35}, -{28,6,-34}, -{28,6,-33}, -{28,6,-32}, -{28,6,-31}, -{28,6,-30}, -{28,6,-29}, -{28,6,-28}, -{28,6,-27}, -{28,6,-26}, -{28,6,-25}, -{28,6,-24}, -{28,6,-23}, -{28,6,-22}, -{28,6,-21}, -{28,6,-20}, -{28,6,-19}, -{28,6,-18}, -{28,6,-17}, -{28,6,-16}, -{28,6,-15}, -{28,6,-14}, -{28,6,-13}, -{28,6,-12}, -{28,6,-11}, -{28,6,-10}, -{28,6,-9}, -{28,6,-8}, -{28,6,-7}, -{28,6,-6}, -{28,6,-5}, -{28,6,-4}, -{28,6,-3}, -{28,6,-2}, -{28,6,-1}, -{28,6,0}, -{28,6,1}, -{28,6,2}, -{28,6,3}, -{28,6,4}, -{28,6,5}, -{28,6,6}, -{28,6,7}, -{28,6,8}, -{28,6,9}, -{28,6,10}, -{28,6,11}, -{28,6,12}, -{28,6,13}, -{28,6,14}, -{28,6,15}, -{28,6,16}, -{28,6,17}, -{28,6,18}, -{28,6,19}, -{28,6,20}, -{28,6,21}, -{28,6,22}, -{28,6,23}, -{28,6,24}, -{28,6,25}, -{28,6,26}, -{28,6,27}, -{28,6,28}, -{28,6,29}, -{28,6,30}, -{28,6,31}, -{28,6,32}, -{28,6,33}, -{28,6,34}, -{28,6,35}, -{28,6,36}, -{28,6,37}, -{28,7,-39}, -{28,7,-38}, -{28,7,-37}, -{28,7,-36}, -{28,7,-35}, -{28,7,-34}, -{28,7,-33}, -{28,7,-32}, -{28,7,-31}, -{28,7,-30}, -{28,7,-29}, -{28,7,-28}, -{28,7,-27}, -{28,7,-26}, -{28,7,-25}, -{28,7,-24}, -{28,7,-23}, -{28,7,-22}, -{28,7,-21}, -{28,7,-20}, -{28,7,-19}, -{28,7,-18}, -{28,7,-17}, -{28,7,-16}, -{28,7,-15}, -{28,7,-14}, -{28,7,-13}, -{28,7,-12}, -{28,7,-11}, -{28,7,-10}, -{28,7,-9}, -{28,7,-8}, -{28,7,-7}, -{28,7,-6}, -{28,7,-5}, -{28,7,-4}, -{28,7,-3}, -{28,7,-2}, -{28,7,-1}, -{28,7,0}, -{28,7,1}, -{28,7,2}, -{28,7,3}, -{28,7,4}, -{28,7,5}, -{28,7,6}, -{28,7,7}, -{28,7,8}, -{28,7,9}, -{28,7,10}, -{28,7,11}, -{28,7,12}, -{28,7,13}, -{28,7,14}, -{28,7,15}, -{28,7,16}, -{28,7,17}, -{28,7,18}, -{28,7,19}, -{28,7,20}, -{28,7,21}, -{28,7,22}, -{28,7,23}, -{28,7,24}, -{28,7,25}, -{28,7,26}, -{28,7,27}, -{28,7,28}, -{28,7,29}, -{28,7,30}, -{28,7,31}, -{28,7,32}, -{28,7,33}, -{28,7,34}, -{28,7,35}, -{28,7,36}, -{28,7,37}, -{28,8,-40}, -{28,8,-39}, -{28,8,-38}, -{28,8,-37}, -{28,8,-36}, -{28,8,-35}, -{28,8,-34}, -{28,8,-33}, -{28,8,-32}, -{28,8,-31}, -{28,8,-30}, -{28,8,-29}, -{28,8,-28}, -{28,8,-27}, -{28,8,-26}, -{28,8,-25}, -{28,8,-24}, -{28,8,-23}, -{28,8,-22}, -{28,8,-21}, -{28,8,-20}, -{28,8,-19}, -{28,8,-18}, -{28,8,-17}, -{28,8,-16}, -{28,8,-15}, -{28,8,-14}, -{28,8,-13}, -{28,8,-12}, -{28,8,-11}, -{28,8,-10}, -{28,8,-9}, -{28,8,-8}, -{28,8,-7}, -{28,8,-6}, -{28,8,-5}, -{28,8,-4}, -{28,8,-3}, -{28,8,-2}, -{28,8,-1}, -{28,8,0}, -{28,8,1}, -{28,8,2}, -{28,8,3}, -{28,8,4}, -{28,8,5}, -{28,8,6}, -{28,8,7}, -{28,8,8}, -{28,8,9}, -{28,8,10}, -{28,8,11}, -{28,8,12}, -{28,8,13}, -{28,8,14}, -{28,8,15}, -{28,8,16}, -{28,8,17}, -{28,8,18}, -{28,8,19}, -{28,8,20}, -{28,8,21}, -{28,8,22}, -{28,8,23}, -{28,8,24}, -{28,8,25}, -{28,8,26}, -{28,8,27}, -{28,8,28}, -{28,8,29}, -{28,8,30}, -{28,8,31}, -{28,8,32}, -{28,8,33}, -{28,8,34}, -{28,8,35}, -{28,8,36}, -{28,8,37}, -{28,9,-41}, -{28,9,-40}, -{28,9,-39}, -{28,9,-38}, -{28,9,-37}, -{28,9,-36}, -{28,9,-35}, -{28,9,-34}, -{28,9,-33}, -{28,9,-32}, -{28,9,-31}, -{28,9,-30}, -{28,9,-29}, -{28,9,-28}, -{28,9,-27}, -{28,9,-26}, -{28,9,-25}, -{28,9,-24}, -{28,9,-23}, -{28,9,-22}, -{28,9,-21}, -{28,9,-20}, -{28,9,-19}, -{28,9,-18}, -{28,9,-17}, -{28,9,-16}, -{28,9,-15}, -{28,9,-14}, -{28,9,-13}, -{28,9,-12}, -{28,9,-11}, -{28,9,-10}, -{28,9,-9}, -{28,9,-8}, -{28,9,-7}, -{28,9,-6}, -{28,9,-5}, -{28,9,-4}, -{28,9,-3}, -{28,9,-2}, -{28,9,-1}, -{28,9,0}, -{28,9,1}, -{28,9,2}, -{28,9,3}, -{28,9,4}, -{28,9,5}, -{28,9,6}, -{28,9,7}, -{28,9,8}, -{28,9,9}, -{28,9,10}, -{28,9,11}, -{28,9,12}, -{28,9,13}, -{28,9,14}, -{28,9,15}, -{28,9,16}, -{28,9,17}, -{28,9,18}, -{28,9,19}, -{28,9,20}, -{28,9,21}, -{28,9,22}, -{28,9,23}, -{28,9,24}, -{28,9,25}, -{28,9,26}, -{28,9,27}, -{28,9,28}, -{28,9,29}, -{28,9,30}, -{28,9,31}, -{28,9,32}, -{28,9,33}, -{28,9,34}, -{28,9,35}, -{28,9,36}, -{28,9,37}, -{28,10,-42}, -{28,10,-41}, -{28,10,-40}, -{28,10,-39}, -{28,10,-38}, -{28,10,-37}, -{28,10,-36}, -{28,10,-35}, -{28,10,-34}, -{28,10,-33}, -{28,10,-32}, -{28,10,-31}, -{28,10,-30}, -{28,10,-29}, -{28,10,-28}, -{28,10,-27}, -{28,10,-26}, -{28,10,-25}, -{28,10,-24}, -{28,10,-23}, -{28,10,-22}, -{28,10,-21}, -{28,10,-20}, -{28,10,-19}, -{28,10,-18}, -{28,10,-17}, -{28,10,-16}, -{28,10,-15}, -{28,10,-14}, -{28,10,-13}, -{28,10,-12}, -{28,10,-11}, -{28,10,-10}, -{28,10,-9}, -{28,10,-8}, -{28,10,-7}, -{28,10,-6}, -{28,10,-5}, -{28,10,-4}, -{28,10,-3}, -{28,10,-2}, -{28,10,-1}, -{28,10,0}, -{28,10,1}, -{28,10,2}, -{28,10,3}, -{28,10,4}, -{28,10,5}, -{28,10,6}, -{28,10,7}, -{28,10,8}, -{28,10,9}, -{28,10,10}, -{28,10,11}, -{28,10,12}, -{28,10,13}, -{28,10,14}, -{28,10,15}, -{28,10,16}, -{28,10,17}, -{28,10,18}, -{28,10,19}, -{28,10,20}, -{28,10,21}, -{28,10,22}, -{28,10,23}, -{28,10,24}, -{28,10,25}, -{28,10,26}, -{28,10,27}, -{28,10,28}, -{28,10,29}, -{28,10,30}, -{28,10,31}, -{28,10,32}, -{28,10,33}, -{28,10,34}, -{28,10,35}, -{28,10,36}, -{28,10,37}, -{28,11,-43}, -{28,11,-42}, -{28,11,-41}, -{28,11,-40}, -{28,11,-39}, -{28,11,-38}, -{28,11,-37}, -{28,11,-36}, -{28,11,-35}, -{28,11,-34}, -{28,11,-33}, -{28,11,-32}, -{28,11,-31}, -{28,11,-30}, -{28,11,-29}, -{28,11,-28}, -{28,11,-27}, -{28,11,-26}, -{28,11,-25}, -{28,11,-24}, -{28,11,-23}, -{28,11,-22}, -{28,11,-21}, -{28,11,-20}, -{28,11,-19}, -{28,11,-18}, -{28,11,-17}, -{28,11,-16}, -{28,11,-15}, -{28,11,-14}, -{28,11,-13}, -{28,11,-12}, -{28,11,-11}, -{28,11,-10}, -{28,11,-9}, -{28,11,-8}, -{28,11,-7}, -{28,11,-6}, -{28,11,-5}, -{28,11,-4}, -{28,11,-3}, -{28,11,-2}, -{28,11,-1}, -{28,11,0}, -{28,11,1}, -{28,11,2}, -{28,11,3}, -{28,11,4}, -{28,11,5}, -{28,11,6}, -{28,11,7}, -{28,11,8}, -{28,11,9}, -{28,11,10}, -{28,11,11}, -{28,11,12}, -{28,11,13}, -{28,11,14}, -{28,11,15}, -{28,11,16}, -{28,11,17}, -{28,11,18}, -{28,11,19}, -{28,11,20}, -{28,11,21}, -{28,11,22}, -{28,11,23}, -{28,11,24}, -{28,11,25}, -{28,11,26}, -{28,11,27}, -{28,11,28}, -{28,11,29}, -{28,11,30}, -{28,11,31}, -{28,11,32}, -{28,11,33}, -{28,11,34}, -{28,11,35}, -{28,11,36}, -{28,11,37}, -{28,11,38}, -{28,12,-44}, -{28,12,-43}, -{28,12,-42}, -{28,12,-41}, -{28,12,-40}, -{28,12,-39}, -{28,12,-38}, -{28,12,-37}, -{28,12,-36}, -{28,12,-35}, -{28,12,-34}, -{28,12,-33}, -{28,12,-32}, -{28,12,-31}, -{28,12,-30}, -{28,12,-29}, -{28,12,-28}, -{28,12,-27}, -{28,12,-26}, -{28,12,-25}, -{28,12,-24}, -{28,12,-23}, -{28,12,-22}, -{28,12,-21}, -{28,12,-20}, -{28,12,-19}, -{28,12,-18}, -{28,12,-17}, -{28,12,-16}, -{28,12,-15}, -{28,12,-14}, -{28,12,-13}, -{28,12,-12}, -{28,12,-11}, -{28,12,-10}, -{28,12,-9}, -{28,12,-8}, -{28,12,-7}, -{28,12,-6}, -{28,12,-5}, -{28,12,-4}, -{28,12,-3}, -{28,12,-2}, -{28,12,-1}, -{28,12,0}, -{28,12,1}, -{28,12,2}, -{28,12,3}, -{28,12,4}, -{28,12,5}, -{28,12,6}, -{28,12,7}, -{28,12,8}, -{28,12,9}, -{28,12,10}, -{28,12,11}, -{28,12,12}, -{28,12,13}, -{28,12,14}, -{28,12,15}, -{28,12,16}, -{28,12,17}, -{28,12,18}, -{28,12,19}, -{28,12,20}, -{28,12,21}, -{28,12,22}, -{28,12,23}, -{28,12,24}, -{28,12,25}, -{28,12,26}, -{28,12,27}, -{28,12,28}, -{28,12,29}, -{28,12,30}, -{28,12,31}, -{28,12,32}, -{28,12,33}, -{28,12,34}, -{28,12,35}, -{28,12,36}, -{28,12,37}, -{28,12,38}, -{28,13,-45}, -{28,13,-44}, -{28,13,-43}, -{28,13,-42}, -{28,13,-41}, -{28,13,-40}, -{28,13,-39}, -{28,13,-38}, -{28,13,-37}, -{28,13,-36}, -{28,13,-35}, -{28,13,-34}, -{28,13,-33}, -{28,13,-32}, -{28,13,-31}, -{28,13,-30}, -{28,13,-29}, -{28,13,-28}, -{28,13,-27}, -{28,13,-26}, -{28,13,-25}, -{28,13,-24}, -{28,13,-23}, -{28,13,-22}, -{28,13,-21}, -{28,13,-20}, -{28,13,-19}, -{28,13,-18}, -{28,13,-17}, -{28,13,-16}, -{28,13,-15}, -{28,13,-14}, -{28,13,-13}, -{28,13,-12}, -{28,13,-11}, -{28,13,-10}, -{28,13,-9}, -{28,13,-8}, -{28,13,-7}, -{28,13,-6}, -{28,13,-5}, -{28,13,-4}, -{28,13,-3}, -{28,13,-2}, -{28,13,-1}, -{28,13,0}, -{28,13,1}, -{28,13,2}, -{28,13,3}, -{28,13,4}, -{28,13,5}, -{28,13,6}, -{28,13,7}, -{28,13,8}, -{28,13,9}, -{28,13,10}, -{28,13,11}, -{28,13,12}, -{28,13,13}, -{28,13,14}, -{28,13,15}, -{28,13,16}, -{28,13,17}, -{28,13,18}, -{28,13,19}, -{28,13,20}, -{28,13,21}, -{28,13,22}, -{28,13,23}, -{28,13,24}, -{28,13,25}, -{28,13,26}, -{28,13,27}, -{28,13,28}, -{28,13,29}, -{28,13,30}, -{28,13,31}, -{28,13,32}, -{28,13,33}, -{28,13,34}, -{28,13,35}, -{28,13,36}, -{28,13,37}, -{28,13,38}, -{28,14,-46}, -{28,14,-45}, -{28,14,-44}, -{28,14,-43}, -{28,14,-42}, -{28,14,-41}, -{28,14,-40}, -{28,14,-39}, -{28,14,-38}, -{28,14,-37}, -{28,14,-36}, -{28,14,-35}, -{28,14,-34}, -{28,14,-33}, -{28,14,-32}, -{28,14,-31}, -{28,14,-30}, -{28,14,-29}, -{28,14,-28}, -{28,14,-27}, -{28,14,-26}, -{28,14,-25}, -{28,14,-24}, -{28,14,-23}, -{28,14,-22}, -{28,14,-21}, -{28,14,-20}, -{28,14,-19}, -{28,14,-18}, -{28,14,-17}, -{28,14,-16}, -{28,14,-15}, -{28,14,-14}, -{28,14,-13}, -{28,14,-12}, -{28,14,-11}, -{28,14,-10}, -{28,14,-9}, -{28,14,-8}, -{28,14,-7}, -{28,14,-6}, -{28,14,-5}, -{28,14,-4}, -{28,14,-3}, -{28,14,-2}, -{28,14,-1}, -{28,14,0}, -{28,14,1}, -{28,14,2}, -{28,14,3}, -{28,14,4}, -{28,14,5}, -{28,14,6}, -{28,14,7}, -{28,14,8}, -{28,14,9}, -{28,14,10}, -{28,14,11}, -{28,14,12}, -{28,14,13}, -{28,14,14}, -{28,14,15}, -{28,14,16}, -{28,14,17}, -{28,14,18}, -{28,14,19}, -{28,14,20}, -{28,14,21}, -{28,14,22}, -{28,14,23}, -{28,14,24}, -{28,14,25}, -{28,14,26}, -{28,14,27}, -{28,14,28}, -{28,14,29}, -{28,14,30}, -{28,14,31}, -{28,14,32}, -{28,14,33}, -{28,14,34}, -{28,14,35}, -{28,14,36}, -{28,14,37}, -{28,14,38}, -{28,15,-47}, -{28,15,-46}, -{28,15,-45}, -{28,15,-44}, -{28,15,-43}, -{28,15,-42}, -{28,15,-41}, -{28,15,-40}, -{28,15,-39}, -{28,15,-38}, -{28,15,-37}, -{28,15,-36}, -{28,15,-35}, -{28,15,-34}, -{28,15,-33}, -{28,15,-32}, -{28,15,-31}, -{28,15,-30}, -{28,15,-29}, -{28,15,-28}, -{28,15,-27}, -{28,15,-26}, -{28,15,-25}, -{28,15,-24}, -{28,15,-23}, -{28,15,-22}, -{28,15,-21}, -{28,15,-20}, -{28,15,-19}, -{28,15,-18}, -{28,15,-17}, -{28,15,-16}, -{28,15,-15}, -{28,15,-14}, -{28,15,-13}, -{28,15,-12}, -{28,15,-11}, -{28,15,-10}, -{28,15,-9}, -{28,15,-8}, -{28,15,-7}, -{28,15,-6}, -{28,15,-5}, -{28,15,-4}, -{28,15,-3}, -{28,15,-2}, -{28,15,-1}, -{28,15,0}, -{28,15,1}, -{28,15,2}, -{28,15,3}, -{28,15,4}, -{28,15,5}, -{28,15,6}, -{28,15,7}, -{28,15,8}, -{28,15,9}, -{28,15,10}, -{28,15,11}, -{28,15,12}, -{28,15,13}, -{28,15,14}, -{28,15,15}, -{28,15,16}, -{28,15,17}, -{28,15,18}, -{28,15,19}, -{28,15,20}, -{28,15,21}, -{28,15,22}, -{28,15,23}, -{28,15,24}, -{28,15,25}, -{28,15,26}, -{28,15,27}, -{28,15,28}, -{28,15,29}, -{28,15,30}, -{28,15,31}, -{28,15,32}, -{28,15,33}, -{28,15,34}, -{28,15,35}, -{28,15,36}, -{28,15,37}, -{28,15,38}, -{28,16,-48}, -{28,16,-47}, -{28,16,-46}, -{28,16,-45}, -{28,16,-44}, -{28,16,-43}, -{28,16,-42}, -{28,16,-41}, -{28,16,-40}, -{28,16,-39}, -{28,16,-38}, -{28,16,-37}, -{28,16,-36}, -{28,16,-35}, -{28,16,-34}, -{28,16,-33}, -{28,16,-32}, -{28,16,-31}, -{28,16,-30}, -{28,16,-29}, -{28,16,-28}, -{28,16,-27}, -{28,16,-26}, -{28,16,-25}, -{28,16,-24}, -{28,16,-23}, -{28,16,-22}, -{28,16,-21}, -{28,16,-20}, -{28,16,-19}, -{28,16,-18}, -{28,16,-17}, -{28,16,-16}, -{28,16,-15}, -{28,16,-14}, -{28,16,-13}, -{28,16,-12}, -{28,16,-11}, -{28,16,-10}, -{28,16,-9}, -{28,16,-8}, -{28,16,-7}, -{28,16,-6}, -{28,16,-5}, -{28,16,-4}, -{28,16,-3}, -{28,16,-2}, -{28,16,-1}, -{28,16,0}, -{28,16,1}, -{28,16,2}, -{28,16,3}, -{28,16,4}, -{28,16,5}, -{28,16,6}, -{28,16,7}, -{28,16,8}, -{28,16,9}, -{28,16,10}, -{28,16,11}, -{28,16,12}, -{28,16,13}, -{28,16,14}, -{28,16,15}, -{28,16,16}, -{28,16,17}, -{28,16,18}, -{28,16,19}, -{28,16,20}, -{28,16,21}, -{28,16,22}, -{28,16,23}, -{28,16,24}, -{28,16,25}, -{28,16,26}, -{28,16,27}, -{28,16,28}, -{28,16,29}, -{28,16,30}, -{28,16,31}, -{28,16,32}, -{28,16,33}, -{28,16,34}, -{28,16,35}, -{28,16,36}, -{28,16,37}, -{28,16,38}, -{28,17,-49}, -{28,17,-48}, -{28,17,-47}, -{28,17,-46}, -{28,17,-45}, -{28,17,-44}, -{28,17,-43}, -{28,17,-42}, -{28,17,-41}, -{28,17,-40}, -{28,17,-39}, -{28,17,-38}, -{28,17,-37}, -{28,17,-36}, -{28,17,-35}, -{28,17,-34}, -{28,17,-33}, -{28,17,-32}, -{28,17,-31}, -{28,17,-30}, -{28,17,-29}, -{28,17,-28}, -{28,17,-27}, -{28,17,-26}, -{28,17,-25}, -{28,17,-24}, -{28,17,-23}, -{28,17,-22}, -{28,17,-21}, -{28,17,-20}, -{28,17,-19}, -{28,17,-18}, -{28,17,-17}, -{28,17,-16}, -{28,17,-15}, -{28,17,-14}, -{28,17,-13}, -{28,17,-12}, -{28,17,-11}, -{28,17,-10}, -{28,17,-9}, -{28,17,-8}, -{28,17,-7}, -{28,17,-6}, -{28,17,-5}, -{28,17,-4}, -{28,17,-3}, -{28,17,-2}, -{28,17,-1}, -{28,17,0}, -{28,17,1}, -{28,17,2}, -{28,17,3}, -{28,17,4}, -{28,17,5}, -{28,17,6}, -{28,17,7}, -{28,17,8}, -{28,17,9}, -{28,17,10}, -{28,17,11}, -{28,17,12}, -{28,17,13}, -{28,17,14}, -{28,17,15}, -{28,17,16}, -{28,17,17}, -{28,17,18}, -{28,17,19}, -{28,17,20}, -{28,17,21}, -{28,17,22}, -{28,17,23}, -{28,17,24}, -{28,17,25}, -{28,17,26}, -{28,17,27}, -{28,17,28}, -{28,17,29}, -{28,17,30}, -{28,17,31}, -{28,17,32}, -{28,17,33}, -{28,17,34}, -{28,17,35}, -{28,17,36}, -{28,17,37}, -{28,17,38}, -{28,18,-50}, -{28,18,-49}, -{28,18,-48}, -{28,18,-47}, -{28,18,-46}, -{28,18,-45}, -{28,18,-44}, -{28,18,-43}, -{28,18,-42}, -{28,18,-41}, -{28,18,-40}, -{28,18,-39}, -{28,18,-38}, -{28,18,-37}, -{28,18,-36}, -{28,18,-35}, -{28,18,-34}, -{28,18,-33}, -{28,18,-32}, -{28,18,-31}, -{28,18,-30}, -{28,18,-29}, -{28,18,-28}, -{28,18,-27}, -{28,18,-26}, -{28,18,-25}, -{28,18,-24}, -{28,18,-23}, -{28,18,-22}, -{28,18,-21}, -{28,18,-20}, -{28,18,-19}, -{28,18,-18}, -{28,18,-17}, -{28,18,-16}, -{28,18,-15}, -{28,18,-14}, -{28,18,-13}, -{28,18,-12}, -{28,18,-11}, -{28,18,-10}, -{28,18,-9}, -{28,18,-8}, -{28,18,-7}, -{28,18,-6}, -{28,18,-5}, -{28,18,-4}, -{28,18,-3}, -{28,18,-2}, -{28,18,-1}, -{28,18,0}, -{28,18,1}, -{28,18,2}, -{28,18,3}, -{28,18,4}, -{28,18,5}, -{28,18,6}, -{28,18,7}, -{28,18,8}, -{28,18,9}, -{28,18,10}, -{28,18,11}, -{28,18,12}, -{28,18,13}, -{28,18,14}, -{28,18,15}, -{28,18,16}, -{28,18,17}, -{28,18,18}, -{28,18,19}, -{28,18,20}, -{28,18,21}, -{28,18,22}, -{28,18,23}, -{28,18,24}, -{28,18,25}, -{28,18,26}, -{28,18,27}, -{28,18,28}, -{28,18,29}, -{28,18,30}, -{28,18,31}, -{28,18,32}, -{28,18,33}, -{28,18,34}, -{28,18,35}, -{28,18,36}, -{28,18,37}, -{28,18,38}, -{28,19,-51}, -{28,19,-50}, -{28,19,-49}, -{28,19,-48}, -{28,19,-47}, -{28,19,-46}, -{28,19,-45}, -{28,19,-44}, -{28,19,-43}, -{28,19,-42}, -{28,19,-41}, -{28,19,-40}, -{28,19,-39}, -{28,19,-38}, -{28,19,-37}, -{28,19,-36}, -{28,19,-35}, -{28,19,-34}, -{28,19,-33}, -{28,19,-32}, -{28,19,-31}, -{28,19,-30}, -{28,19,-29}, -{28,19,-28}, -{28,19,-27}, -{28,19,-26}, -{28,19,-25}, -{28,19,-24}, -{28,19,-23}, -{28,19,-22}, -{28,19,-21}, -{28,19,-20}, -{28,19,-19}, -{28,19,-18}, -{28,19,-17}, -{28,19,-16}, -{28,19,-15}, -{28,19,-14}, -{28,19,-13}, -{28,19,-12}, -{28,19,-11}, -{28,19,-10}, -{28,19,-9}, -{28,19,-8}, -{28,19,-7}, -{28,19,-6}, -{28,19,-5}, -{28,19,-4}, -{28,19,-3}, -{28,19,-2}, -{28,19,-1}, -{28,19,0}, -{28,19,1}, -{28,19,2}, -{28,19,3}, -{28,19,4}, -{28,19,5}, -{28,19,6}, -{28,19,7}, -{28,19,8}, -{28,19,9}, -{28,19,10}, -{28,19,11}, -{28,19,12}, -{28,19,13}, -{28,19,14}, -{28,19,15}, -{28,19,16}, -{28,19,17}, -{28,19,18}, -{28,19,19}, -{28,19,20}, -{28,19,21}, -{28,19,22}, -{28,19,23}, -{28,19,24}, -{28,19,25}, -{28,19,26}, -{28,19,27}, -{28,19,28}, -{28,19,29}, -{28,19,30}, -{28,19,31}, -{28,19,32}, -{28,19,33}, -{28,19,34}, -{28,19,35}, -{28,19,36}, -{28,19,37}, -{28,19,38}, -{28,20,-52}, -{28,20,-51}, -{28,20,-50}, -{28,20,-49}, -{28,20,-48}, -{28,20,-47}, -{28,20,-46}, -{28,20,-45}, -{28,20,-44}, -{28,20,-43}, -{28,20,-42}, -{28,20,-41}, -{28,20,-40}, -{28,20,-39}, -{28,20,-38}, -{28,20,-37}, -{28,20,-36}, -{28,20,-35}, -{28,20,-34}, -{28,20,-33}, -{28,20,-32}, -{28,20,-31}, -{28,20,-30}, -{28,20,-29}, -{28,20,-28}, -{28,20,-27}, -{28,20,-26}, -{28,20,-25}, -{28,20,-24}, -{28,20,-23}, -{28,20,-22}, -{28,20,-21}, -{28,20,-20}, -{28,20,-19}, -{28,20,-18}, -{28,20,-17}, -{28,20,-16}, -{28,20,-15}, -{28,20,-14}, -{28,20,-13}, -{28,20,-12}, -{28,20,-11}, -{28,20,-10}, -{28,20,-9}, -{28,20,-8}, -{28,20,-7}, -{28,20,-6}, -{28,20,-5}, -{28,20,-4}, -{28,20,-3}, -{28,20,-2}, -{28,20,-1}, -{28,20,0}, -{28,20,1}, -{28,20,2}, -{28,20,3}, -{28,20,4}, -{28,20,5}, -{28,20,6}, -{28,20,7}, -{28,20,8}, -{28,20,9}, -{28,20,10}, -{28,20,11}, -{28,20,12}, -{28,20,13}, -{28,20,14}, -{28,20,15}, -{28,20,16}, -{28,20,17}, -{28,20,18}, -{28,20,19}, -{28,20,20}, -{28,20,21}, -{28,20,22}, -{28,20,23}, -{28,20,24}, -{28,20,25}, -{28,20,26}, -{28,20,27}, -{28,20,28}, -{28,20,29}, -{28,20,30}, -{28,20,31}, -{28,20,32}, -{28,20,33}, -{28,20,34}, -{28,20,35}, -{28,20,36}, -{28,20,37}, -{28,20,38}, -{28,21,-53}, -{28,21,-52}, -{28,21,-51}, -{28,21,-50}, -{28,21,-49}, -{28,21,-48}, -{28,21,-47}, -{28,21,-46}, -{28,21,-45}, -{28,21,-44}, -{28,21,-43}, -{28,21,-42}, -{28,21,-41}, -{28,21,-40}, -{28,21,-39}, -{28,21,-38}, -{28,21,-37}, -{28,21,-36}, -{28,21,-35}, -{28,21,-34}, -{28,21,-33}, -{28,21,-32}, -{28,21,-31}, -{28,21,-30}, -{28,21,-29}, -{28,21,-28}, -{28,21,-27}, -{28,21,-26}, -{28,21,-25}, -{28,21,-24}, -{28,21,-23}, -{28,21,-22}, -{28,21,-21}, -{28,21,-20}, -{28,21,-19}, -{28,21,-18}, -{28,21,-17}, -{28,21,-16}, -{28,21,-15}, -{28,21,-14}, -{28,21,-13}, -{28,21,-12}, -{28,21,-11}, -{28,21,-10}, -{28,21,-9}, -{28,21,-8}, -{28,21,-7}, -{28,21,-6}, -{28,21,-5}, -{28,21,-4}, -{28,21,-3}, -{28,21,-2}, -{28,21,-1}, -{28,21,0}, -{28,21,1}, -{28,21,2}, -{28,21,3}, -{28,21,4}, -{28,21,5}, -{28,21,6}, -{28,21,7}, -{28,21,8}, -{28,21,9}, -{28,21,10}, -{28,21,11}, -{28,21,12}, -{28,21,13}, -{28,21,14}, -{28,21,15}, -{28,21,16}, -{28,21,17}, -{28,21,18}, -{28,21,19}, -{28,21,20}, -{28,21,21}, -{28,21,22}, -{28,21,23}, -{28,21,24}, -{28,21,25}, -{28,21,26}, -{28,21,27}, -{28,21,28}, -{28,21,29}, -{28,21,30}, -{28,21,31}, -{28,21,32}, -{28,21,33}, -{28,21,34}, -{28,21,35}, -{28,21,36}, -{28,21,37}, -{28,21,38}, -{28,22,-54}, -{28,22,-53}, -{28,22,-52}, -{28,22,-51}, -{28,22,-50}, -{28,22,-49}, -{28,22,-48}, -{28,22,-47}, -{28,22,-46}, -{28,22,-45}, -{28,22,-44}, -{28,22,-43}, -{28,22,-42}, -{28,22,-41}, -{28,22,-40}, -{28,22,-39}, -{28,22,-38}, -{28,22,-37}, -{28,22,-36}, -{28,22,-35}, -{28,22,-34}, -{28,22,-33}, -{28,22,-32}, -{28,22,-31}, -{28,22,-30}, -{28,22,-29}, -{28,22,-28}, -{28,22,-27}, -{28,22,-26}, -{28,22,-25}, -{28,22,-24}, -{28,22,-23}, -{28,22,-22}, -{28,22,-21}, -{28,22,-20}, -{28,22,-19}, -{28,22,-18}, -{28,22,-17}, -{28,22,-16}, -{28,22,-15}, -{28,22,-14}, -{28,22,-13}, -{28,22,-12}, -{28,22,-11}, -{28,22,-10}, -{28,22,-9}, -{28,22,-8}, -{28,22,-7}, -{28,22,-6}, -{28,22,-5}, -{28,22,-4}, -{28,22,-3}, -{28,22,-2}, -{28,22,-1}, -{28,22,0}, -{28,22,1}, -{28,22,2}, -{28,22,3}, -{28,22,4}, -{28,22,5}, -{28,22,6}, -{28,22,7}, -{28,22,8}, -{28,22,9}, -{28,22,10}, -{28,22,11}, -{28,22,12}, -{28,22,13}, -{28,22,14}, -{28,22,15}, -{28,22,16}, -{28,22,17}, -{28,22,18}, -{28,22,19}, -{28,22,20}, -{28,22,21}, -{28,22,22}, -{28,22,23}, -{28,22,24}, -{28,22,25}, -{28,22,26}, -{28,22,27}, -{28,22,28}, -{28,22,29}, -{28,22,30}, -{28,22,31}, -{28,22,32}, -{28,22,33}, -{28,22,34}, -{28,22,35}, -{28,22,36}, -{28,22,37}, -{28,22,38}, -{28,23,-55}, -{28,23,-54}, -{28,23,-53}, -{28,23,-52}, -{28,23,-51}, -{28,23,-50}, -{28,23,-49}, -{28,23,-48}, -{28,23,-47}, -{28,23,-46}, -{28,23,-45}, -{28,23,-44}, -{28,23,-43}, -{28,23,-42}, -{28,23,-41}, -{28,23,-40}, -{28,23,-39}, -{28,23,-38}, -{28,23,-37}, -{28,23,-36}, -{28,23,-35}, -{28,23,-34}, -{28,23,-33}, -{28,23,-32}, -{28,23,-31}, -{28,23,-30}, -{28,23,-29}, -{28,23,-28}, -{28,23,-27}, -{28,23,-26}, -{28,23,-25}, -{28,23,-24}, -{28,23,-23}, -{28,23,-22}, -{28,23,-21}, -{28,23,-20}, -{28,23,-19}, -{28,23,-18}, -{28,23,-17}, -{28,23,-16}, -{28,23,-15}, -{28,23,-14}, -{28,23,-13}, -{28,23,-12}, -{28,23,-11}, -{28,23,-10}, -{28,23,-9}, -{28,23,-8}, -{28,23,-7}, -{28,23,-6}, -{28,23,-5}, -{28,23,-4}, -{28,23,-3}, -{28,23,-2}, -{28,23,-1}, -{28,23,0}, -{28,23,1}, -{28,23,2}, -{28,23,3}, -{28,23,4}, -{28,23,5}, -{28,23,6}, -{28,23,7}, -{28,23,8}, -{28,23,9}, -{28,23,10}, -{28,23,11}, -{28,23,12}, -{28,23,13}, -{28,23,14}, -{28,23,15}, -{28,23,16}, -{28,23,17}, -{28,23,18}, -{28,23,19}, -{28,23,20}, -{28,23,21}, -{28,23,22}, -{28,23,23}, -{28,23,24}, -{28,23,25}, -{28,23,26}, -{28,23,27}, -{28,23,28}, -{28,23,29}, -{28,23,30}, -{28,23,31}, -{28,23,32}, -{28,23,33}, -{28,23,34}, -{28,23,35}, -{28,23,36}, -{28,23,37}, -{28,23,38}, -{28,24,-56}, -{28,24,-55}, -{28,24,-54}, -{28,24,-53}, -{28,24,-52}, -{28,24,-51}, -{28,24,-50}, -{28,24,-49}, -{28,24,-48}, -{28,24,-47}, -{28,24,-46}, -{28,24,-45}, -{28,24,-44}, -{28,24,-43}, -{28,24,-42}, -{28,24,-41}, -{28,24,-40}, -{28,24,-39}, -{28,24,-38}, -{28,24,-37}, -{28,24,-36}, -{28,24,-35}, -{28,24,-34}, -{28,24,-33}, -{28,24,-32}, -{28,24,-31}, -{28,24,-30}, -{28,24,-29}, -{28,24,-28}, -{28,24,-27}, -{28,24,-26}, -{28,24,-25}, -{28,24,-24}, -{28,24,-23}, -{28,24,-22}, -{28,24,-21}, -{28,24,-20}, -{28,24,-19}, -{28,24,-18}, -{28,24,-17}, -{28,24,-16}, -{28,24,-15}, -{28,24,-14}, -{28,24,-13}, -{28,24,-12}, -{28,24,-11}, -{28,24,-10}, -{28,24,-9}, -{28,24,-8}, -{28,24,-7}, -{28,24,-6}, -{28,24,-5}, -{28,24,-4}, -{28,24,-3}, -{28,24,-2}, -{28,24,-1}, -{28,24,0}, -{28,24,1}, -{28,24,2}, -{28,24,3}, -{28,24,4}, -{28,24,5}, -{28,24,6}, -{28,24,7}, -{28,24,8}, -{28,24,9}, -{28,24,10}, -{28,24,11}, -{28,24,12}, -{28,24,13}, -{28,24,14}, -{28,24,15}, -{28,24,16}, -{28,24,17}, -{28,24,18}, -{28,24,19}, -{28,24,20}, -{28,24,21}, -{28,24,22}, -{28,24,23}, -{28,24,24}, -{28,24,25}, -{28,24,26}, -{28,24,27}, -{28,24,28}, -{28,24,29}, -{28,24,30}, -{28,24,31}, -{28,24,32}, -{28,24,33}, -{28,24,34}, -{28,24,35}, -{28,24,36}, -{28,24,37}, -{28,24,38}, -{28,25,-57}, -{28,25,-56}, -{28,25,-55}, -{28,25,-54}, -{28,25,-53}, -{28,25,-52}, -{28,25,-51}, -{28,25,-50}, -{28,25,-49}, -{28,25,-48}, -{28,25,-47}, -{28,25,-46}, -{28,25,-45}, -{28,25,-44}, -{28,25,-43}, -{28,25,-42}, -{28,25,-41}, -{28,25,-40}, -{28,25,-39}, -{28,25,-38}, -{28,25,-37}, -{28,25,-36}, -{28,25,-35}, -{28,25,-34}, -{28,25,-33}, -{28,25,-32}, -{28,25,-31}, -{28,25,-30}, -{28,25,-29}, -{28,25,-28}, -{28,25,-27}, -{28,25,-26}, -{28,25,-25}, -{28,25,-24}, -{28,25,-23}, -{28,25,-22}, -{28,25,-21}, -{28,25,-20}, -{28,25,-19}, -{28,25,-18}, -{28,25,-17}, -{28,25,-16}, -{28,25,-15}, -{28,25,-14}, -{28,25,-13}, -{28,25,-12}, -{28,25,-11}, -{28,25,-10}, -{28,25,-9}, -{28,25,-8}, -{28,25,-7}, -{28,25,-6}, -{28,25,-5}, -{28,25,-4}, -{28,25,-3}, -{28,25,-2}, -{28,25,-1}, -{28,25,0}, -{28,25,1}, -{28,25,2}, -{28,25,3}, -{28,25,4}, -{28,25,5}, -{28,25,6}, -{28,25,7}, -{28,25,8}, -{28,25,9}, -{28,25,10}, -{28,25,11}, -{28,25,12}, -{28,25,13}, -{28,25,14}, -{28,25,15}, -{28,25,16}, -{28,25,17}, -{28,25,18}, -{28,25,19}, -{28,25,20}, -{28,25,21}, -{28,25,22}, -{28,25,23}, -{28,25,24}, -{28,25,25}, -{28,25,26}, -{28,25,27}, -{28,25,28}, -{28,25,29}, -{28,25,30}, -{28,25,31}, -{28,25,32}, -{28,25,33}, -{28,25,34}, -{28,25,35}, -{28,25,36}, -{28,25,37}, -{28,25,38}, -{28,25,39}, -{28,26,-58}, -{28,26,-57}, -{28,26,-56}, -{28,26,-55}, -{28,26,-54}, -{28,26,-53}, -{28,26,-52}, -{28,26,-51}, -{28,26,-50}, -{28,26,-49}, -{28,26,-48}, -{28,26,-47}, -{28,26,-46}, -{28,26,-45}, -{28,26,-44}, -{28,26,-43}, -{28,26,-42}, -{28,26,-41}, -{28,26,-40}, -{28,26,-39}, -{28,26,-38}, -{28,26,-37}, -{28,26,-36}, -{28,26,-35}, -{28,26,-34}, -{28,26,-33}, -{28,26,-32}, -{28,26,-31}, -{28,26,-30}, -{28,26,-29}, -{28,26,-28}, -{28,26,-27}, -{28,26,-26}, -{28,26,-25}, -{28,26,-24}, -{28,26,-23}, -{28,26,-22}, -{28,26,-21}, -{28,26,-20}, -{28,26,-19}, -{28,26,-18}, -{28,26,-17}, -{28,26,-16}, -{28,26,-15}, -{28,26,-14}, -{28,26,-13}, -{28,26,-12}, -{28,26,-11}, -{28,26,-10}, -{28,26,-9}, -{28,26,-8}, -{28,26,-7}, -{28,26,-6}, -{28,26,-5}, -{28,26,-4}, -{28,26,-3}, -{28,26,-2}, -{28,26,-1}, -{28,26,0}, -{28,26,1}, -{28,26,2}, -{28,26,3}, -{28,26,4}, -{28,26,5}, -{28,26,6}, -{28,26,7}, -{28,26,8}, -{28,26,9}, -{28,26,10}, -{28,26,11}, -{28,26,12}, -{28,26,13}, -{28,26,14}, -{28,26,15}, -{28,26,16}, -{28,26,17}, -{28,26,18}, -{28,26,19}, -{28,26,20}, -{28,26,21}, -{28,26,22}, -{28,26,23}, -{28,26,24}, -{28,26,25}, -{28,26,26}, -{28,26,27}, -{28,26,28}, -{28,26,29}, -{28,26,30}, -{28,26,31}, -{28,26,32}, -{28,26,33}, -{28,26,34}, -{28,26,35}, -{28,26,36}, -{28,26,37}, -{28,26,38}, -{28,26,39}, -{28,27,-59}, -{28,27,-58}, -{28,27,-57}, -{28,27,-56}, -{28,27,-55}, -{28,27,-54}, -{28,27,-53}, -{28,27,-52}, -{28,27,-51}, -{28,27,-50}, -{28,27,-49}, -{28,27,-48}, -{28,27,-47}, -{28,27,-46}, -{28,27,-45}, -{28,27,-44}, -{28,27,-43}, -{28,27,-42}, -{28,27,-41}, -{28,27,-40}, -{28,27,-39}, -{28,27,-38}, -{28,27,-37}, -{28,27,-36}, -{28,27,-35}, -{28,27,-34}, -{28,27,-33}, -{28,27,-32}, -{28,27,-31}, -{28,27,-30}, -{28,27,-29}, -{28,27,-28}, -{28,27,-27}, -{28,27,-26}, -{28,27,-25}, -{28,27,-24}, -{28,27,-23}, -{28,27,-22}, -{28,27,-21}, -{28,27,-20}, -{28,27,-19}, -{28,27,-18}, -{28,27,-17}, -{28,27,-16}, -{28,27,-15}, -{28,27,-14}, -{28,27,-13}, -{28,27,-12}, -{28,27,-11}, -{28,27,-10}, -{28,27,-9}, -{28,27,-8}, -{28,27,-7}, -{28,27,-6}, -{28,27,-5}, -{28,27,-4}, -{28,27,-3}, -{28,27,-2}, -{28,27,-1}, -{28,27,0}, -{28,27,1}, -{28,27,2}, -{28,27,3}, -{28,27,4}, -{28,27,5}, -{28,27,6}, -{28,27,7}, -{28,27,8}, -{28,27,9}, -{28,27,10}, -{28,27,11}, -{28,27,12}, -{28,27,13}, -{28,27,14}, -{28,27,15}, -{28,27,16}, -{28,27,17}, -{28,27,18}, -{28,27,19}, -{28,27,20}, -{28,27,21}, -{28,27,22}, -{28,27,23}, -{28,27,24}, -{28,27,25}, -{28,27,26}, -{28,27,27}, -{28,27,28}, -{28,27,29}, -{28,27,30}, -{28,27,31}, -{28,27,32}, -{28,27,33}, -{28,27,34}, -{28,27,35}, -{28,27,36}, -{28,27,37}, -{28,27,38}, -{28,27,39}, -{28,28,-60}, -{28,28,-59}, -{28,28,-58}, -{28,28,-57}, -{28,28,-56}, -{28,28,-55}, -{28,28,-54}, -{28,28,-53}, -{28,28,-52}, -{28,28,-51}, -{28,28,-50}, -{28,28,-49}, -{28,28,-48}, -{28,28,-47}, -{28,28,-46}, -{28,28,-45}, -{28,28,-44}, -{28,28,-43}, -{28,28,-42}, -{28,28,-41}, -{28,28,-40}, -{28,28,-39}, -{28,28,-38}, -{28,28,-37}, -{28,28,-36}, -{28,28,-35}, -{28,28,-34}, -{28,28,-33}, -{28,28,-32}, -{28,28,-31}, -{28,28,-30}, -{28,28,-29}, -{28,28,-28}, -{28,28,-27}, -{28,28,-26}, -{28,28,-25}, -{28,28,-24}, -{28,28,-23}, -{28,28,-22}, -{28,28,-21}, -{28,28,-20}, -{28,28,-19}, -{28,28,-18}, -{28,28,-17}, -{28,28,-16}, -{28,28,-15}, -{28,28,-14}, -{28,28,-13}, -{28,28,-12}, -{28,28,-11}, -{28,28,-10}, -{28,28,-9}, -{28,28,-8}, -{28,28,-7}, -{28,28,-6}, -{28,28,-5}, -{28,28,-4}, -{28,28,-3}, -{28,28,-2}, -{28,28,-1}, -{28,28,0}, -{28,28,1}, -{28,28,2}, -{28,28,3}, -{28,28,4}, -{28,28,5}, -{28,28,6}, -{28,28,7}, -{28,28,8}, -{28,28,9}, -{28,28,10}, -{28,28,11}, -{28,28,12}, -{28,28,13}, -{28,28,14}, -{28,28,15}, -{28,28,16}, -{28,28,17}, -{28,28,18}, -{28,28,19}, -{28,28,20}, -{28,28,21}, -{28,28,22}, -{28,28,23}, -{28,28,24}, -{28,28,25}, -{28,28,26}, -{28,28,27}, -{28,28,28}, -{28,28,29}, -{28,28,30}, -{28,28,31}, -{28,28,32}, -{28,28,33}, -{28,28,34}, -{28,28,35}, -{28,28,36}, -{28,28,37}, -{28,28,38}, -{28,28,39}, -{28,29,-61}, -{28,29,-60}, -{28,29,-59}, -{28,29,-58}, -{28,29,-57}, -{28,29,-56}, -{28,29,-55}, -{28,29,-54}, -{28,29,-53}, -{28,29,-52}, -{28,29,-51}, -{28,29,-50}, -{28,29,-49}, -{28,29,-48}, -{28,29,-47}, -{28,29,-46}, -{28,29,-45}, -{28,29,-44}, -{28,29,-43}, -{28,29,-42}, -{28,29,-41}, -{28,29,-40}, -{28,29,-39}, -{28,29,-38}, -{28,29,-37}, -{28,29,-36}, -{28,29,-35}, -{28,29,-34}, -{28,29,-33}, -{28,29,-32}, -{28,29,-31}, -{28,29,-30}, -{28,29,-29}, -{28,29,-28}, -{28,29,-27}, -{28,29,-26}, -{28,29,-25}, -{28,29,-24}, -{28,29,-23}, -{28,29,-22}, -{28,29,-21}, -{28,29,-20}, -{28,29,-19}, -{28,29,-18}, -{28,29,-17}, -{28,29,-16}, -{28,29,-15}, -{28,29,-14}, -{28,29,-13}, -{28,29,-12}, -{28,29,-11}, -{28,29,-10}, -{28,29,-9}, -{28,29,-8}, -{28,29,-7}, -{28,29,-6}, -{28,29,-5}, -{28,29,-4}, -{28,29,-3}, -{28,29,-2}, -{28,29,-1}, -{28,29,0}, -{28,29,1}, -{28,29,2}, -{28,29,3}, -{28,29,4}, -{28,29,5}, -{28,29,6}, -{28,29,7}, -{28,29,8}, -{28,29,9}, -{28,29,10}, -{28,29,11}, -{28,29,12}, -{28,29,13}, -{28,29,14}, -{28,29,15}, -{28,29,16}, -{28,29,17}, -{28,29,18}, -{28,29,19}, -{28,29,20}, -{28,29,21}, -{28,29,22}, -{28,29,23}, -{28,29,24}, -{28,29,25}, -{28,29,26}, -{28,29,27}, -{28,29,28}, -{28,29,29}, -{28,29,30}, -{28,29,31}, -{28,29,32}, -{28,29,33}, -{28,29,34}, -{28,29,35}, -{28,29,36}, -{28,29,37}, -{28,29,38}, -{28,29,39}, -{28,30,-62}, -{28,30,-61}, -{28,30,-60}, -{28,30,-59}, -{28,30,-58}, -{28,30,-57}, -{28,30,-56}, -{28,30,-55}, -{28,30,-54}, -{28,30,-53}, -{28,30,-52}, -{28,30,-51}, -{28,30,-50}, -{28,30,-49}, -{28,30,-48}, -{28,30,-47}, -{28,30,-46}, -{28,30,-45}, -{28,30,-44}, -{28,30,-43}, -{28,30,-42}, -{28,30,-41}, -{28,30,-40}, -{28,30,-39}, -{28,30,-38}, -{28,30,-37}, -{28,30,-36}, -{28,30,-35}, -{28,30,-34}, -{28,30,-33}, -{28,30,-32}, -{28,30,-31}, -{28,30,-30}, -{28,30,-29}, -{28,30,-28}, -{28,30,-27}, -{28,30,-26}, -{28,30,-25}, -{28,30,-24}, -{28,30,-23}, -{28,30,-22}, -{28,30,-21}, -{28,30,-20}, -{28,30,-19}, -{28,30,-18}, -{28,30,-17}, -{28,30,-16}, -{28,30,-15}, -{28,30,-14}, -{28,30,-13}, -{28,30,-12}, -{28,30,-11}, -{28,30,-10}, -{28,30,-9}, -{28,30,-8}, -{28,30,-7}, -{28,30,-6}, -{28,30,-5}, -{28,30,-4}, -{28,30,-3}, -{28,30,-2}, -{28,30,-1}, -{28,30,0}, -{28,30,1}, -{28,30,2}, -{28,30,3}, -{28,30,4}, -{28,30,5}, -{28,30,6}, -{28,30,7}, -{28,30,8}, -{28,30,9}, -{28,30,10}, -{28,30,11}, -{28,30,12}, -{28,30,13}, -{28,30,14}, -{28,30,15}, -{28,30,16}, -{28,30,17}, -{28,30,18}, -{28,30,19}, -{28,30,20}, -{28,30,21}, -{28,30,22}, -{28,30,23}, -{28,30,24}, -{28,30,25}, -{28,30,26}, -{28,30,27}, -{28,30,28}, -{28,30,29}, -{28,30,30}, -{28,30,31}, -{28,30,32}, -{28,30,33}, -{28,30,34}, -{28,30,35}, -{28,30,36}, -{28,30,37}, -{28,30,38}, -{28,30,39}, -{28,31,-62}, -{28,31,-61}, -{28,31,-60}, -{28,31,-59}, -{28,31,-58}, -{28,31,-57}, -{28,31,-56}, -{28,31,-55}, -{28,31,-54}, -{28,31,-53}, -{28,31,-52}, -{28,31,-51}, -{28,31,-50}, -{28,31,-49}, -{28,31,-48}, -{28,31,-47}, -{28,31,-46}, -{28,31,-45}, -{28,31,-44}, -{28,31,-43}, -{28,31,-42}, -{28,31,-41}, -{28,31,-40}, -{28,31,-39}, -{28,31,-38}, -{28,31,-37}, -{28,31,-36}, -{28,31,-35}, -{28,31,-34}, -{28,31,-33}, -{28,31,-32}, -{28,31,-31}, -{28,31,-30}, -{28,31,-29}, -{28,31,-28}, -{28,31,-27}, -{28,31,-26}, -{28,31,-25}, -{28,31,-24}, -{28,31,-23}, -{28,31,-22}, -{28,31,-21}, -{28,31,-20}, -{28,31,-19}, -{28,31,-18}, -{28,31,-17}, -{28,31,-16}, -{28,31,-15}, -{28,31,-14}, -{28,31,-13}, -{28,31,-12}, -{28,31,-11}, -{28,31,-10}, -{28,31,-9}, -{28,31,-8}, -{28,31,-7}, -{28,31,-6}, -{28,31,-5}, -{28,31,-4}, -{28,31,-3}, -{28,31,-2}, -{28,31,-1}, -{28,31,0}, -{28,31,1}, -{28,31,2}, -{28,31,3}, -{28,31,4}, -{28,31,5}, -{28,31,6}, -{28,31,7}, -{28,31,8}, -{28,31,9}, -{28,31,10}, -{28,31,11}, -{28,31,12}, -{28,31,13}, -{28,31,14}, -{28,31,15}, -{28,31,16}, -{28,31,17}, -{28,31,18}, -{28,31,19}, -{28,31,20}, -{28,31,21}, -{28,31,22}, -{28,31,23}, -{28,31,24}, -{28,31,25}, -{28,31,26}, -{28,31,27}, -{28,31,28}, -{28,31,29}, -{28,31,30}, -{28,31,31}, -{28,31,32}, -{28,31,33}, -{28,31,34}, -{28,31,35}, -{28,31,36}, -{28,31,37}, -{28,31,38}, -{28,31,39}, -{28,32,-63}, -{28,32,-62}, -{28,32,-61}, -{28,32,-60}, -{28,32,-59}, -{28,32,-58}, -{28,32,-57}, -{28,32,-56}, -{28,32,-55}, -{28,32,-54}, -{28,32,-53}, -{28,32,-52}, -{28,32,-51}, -{28,32,-50}, -{28,32,-49}, -{28,32,-48}, -{28,32,-47}, -{28,32,-46}, -{28,32,-45}, -{28,32,-44}, -{28,32,-43}, -{28,32,-42}, -{28,32,-41}, -{28,32,-40}, -{28,32,-39}, -{28,32,-38}, -{28,32,-37}, -{28,32,-36}, -{28,32,-35}, -{28,32,-34}, -{28,32,-33}, -{28,32,-32}, -{28,32,-31}, -{28,32,-30}, -{28,32,-29}, -{28,32,-28}, -{28,32,-27}, -{28,32,-26}, -{28,32,-25}, -{28,32,-24}, -{28,32,-23}, -{28,32,-22}, -{28,32,-21}, -{28,32,-20}, -{28,32,-19}, -{28,32,-18}, -{28,32,-17}, -{28,32,-16}, -{28,32,-15}, -{28,32,-14}, -{28,32,-13}, -{28,32,-12}, -{28,32,-11}, -{28,32,-10}, -{28,32,-9}, -{28,32,-8}, -{28,32,-7}, -{28,32,-6}, -{28,32,-5}, -{28,32,-4}, -{28,32,-3}, -{28,32,-2}, -{28,32,-1}, -{28,32,0}, -{28,32,1}, -{28,32,2}, -{28,32,3}, -{28,32,4}, -{28,32,5}, -{28,32,6}, -{28,32,7}, -{28,32,8}, -{28,32,9}, -{28,32,10}, -{28,32,11}, -{28,32,12}, -{28,32,13}, -{28,32,14}, -{28,32,15}, -{28,32,16}, -{28,32,17}, -{28,32,18}, -{28,32,19}, -{28,32,20}, -{28,32,21}, -{28,32,22}, -{28,32,23}, -{28,32,24}, -{28,32,25}, -{28,32,26}, -{28,32,27}, -{28,32,28}, -{28,32,29}, -{28,32,30}, -{28,32,31}, -{28,32,32}, -{28,32,33}, -{28,32,34}, -{28,32,35}, -{28,32,36}, -{28,32,37}, -{28,32,38}, -{28,32,39}, -{28,33,-64}, -{28,33,-63}, -{28,33,-62}, -{28,33,-61}, -{28,33,-60}, -{28,33,-59}, -{28,33,-58}, -{28,33,-57}, -{28,33,-56}, -{28,33,-55}, -{28,33,-54}, -{28,33,-53}, -{28,33,-52}, -{28,33,-51}, -{28,33,-50}, -{28,33,-49}, -{28,33,-48}, -{28,33,-47}, -{28,33,-46}, -{28,33,-45}, -{28,33,-44}, -{28,33,-43}, -{28,33,-42}, -{28,33,-41}, -{28,33,-40}, -{28,33,-39}, -{28,33,-38}, -{28,33,-37}, -{28,33,-36}, -{28,33,-35}, -{28,33,-34}, -{28,33,-33}, -{28,33,-32}, -{28,33,-31}, -{28,33,-30}, -{28,33,-29}, -{28,33,-28}, -{28,33,-27}, -{28,33,-26}, -{28,33,-25}, -{28,33,-24}, -{28,33,-23}, -{28,33,-22}, -{28,33,-21}, -{28,33,-20}, -{28,33,-19}, -{28,33,-18}, -{28,33,-17}, -{28,33,-16}, -{28,33,-15}, -{28,33,-14}, -{28,33,-13}, -{28,33,-12}, -{28,33,-11}, -{28,33,-10}, -{28,33,-9}, -{28,33,-8}, -{28,33,-7}, -{28,33,-6}, -{28,33,-5}, -{28,33,-4}, -{28,33,-3}, -{28,33,-2}, -{28,33,-1}, -{28,33,0}, -{28,33,1}, -{28,33,2}, -{28,33,3}, -{28,33,4}, -{28,33,5}, -{28,33,6}, -{28,33,7}, -{28,33,8}, -{28,33,9}, -{28,33,10}, -{28,33,11}, -{28,33,12}, -{28,33,13}, -{28,33,14}, -{28,33,15}, -{28,33,16}, -{28,33,17}, -{28,33,18}, -{28,33,19}, -{28,33,20}, -{28,33,21}, -{28,33,22}, -{28,33,23}, -{28,33,24}, -{28,33,25}, -{28,33,26}, -{28,33,27}, -{28,33,28}, -{28,33,29}, -{28,33,30}, -{28,33,31}, -{28,33,32}, -{28,33,33}, -{28,33,34}, -{28,33,35}, -{28,33,36}, -{28,33,37}, -{28,33,38}, -{28,33,39}, -{28,34,-65}, -{28,34,-64}, -{28,34,-63}, -{28,34,-62}, -{28,34,-61}, -{28,34,-60}, -{28,34,-59}, -{28,34,-58}, -{28,34,-57}, -{28,34,-56}, -{28,34,-55}, -{28,34,-54}, -{28,34,-53}, -{28,34,-52}, -{28,34,-51}, -{28,34,-50}, -{28,34,-49}, -{28,34,-48}, -{28,34,-47}, -{28,34,-46}, -{28,34,-45}, -{28,34,-44}, -{28,34,-43}, -{28,34,-42}, -{28,34,-41}, -{28,34,-40}, -{28,34,-39}, -{28,34,-38}, -{28,34,-37}, -{28,34,-36}, -{28,34,-35}, -{28,34,-34}, -{28,34,-33}, -{28,34,-32}, -{28,34,-31}, -{28,34,-30}, -{28,34,-29}, -{28,34,-28}, -{28,34,-27}, -{28,34,-26}, -{28,34,-25}, -{28,34,-24}, -{28,34,-23}, -{28,34,-22}, -{28,34,-21}, -{28,34,-20}, -{28,34,-19}, -{28,34,-18}, -{28,34,-17}, -{28,34,-16}, -{28,34,-15}, -{28,34,-14}, -{28,34,-13}, -{28,34,-12}, -{28,34,-11}, -{28,34,-10}, -{28,34,-9}, -{28,34,-8}, -{28,34,-7}, -{28,34,-6}, -{28,34,-5}, -{28,34,-4}, -{28,34,-3}, -{28,34,-2}, -{28,34,-1}, -{28,34,0}, -{28,34,1}, -{28,34,2}, -{28,34,3}, -{28,34,4}, -{28,34,5}, -{28,34,6}, -{28,34,7}, -{28,34,8}, -{28,34,9}, -{28,34,10}, -{28,34,11}, -{28,34,12}, -{28,34,13}, -{28,34,14}, -{28,34,15}, -{28,34,16}, -{28,34,17}, -{28,34,18}, -{28,34,19}, -{28,34,20}, -{28,34,21}, -{28,34,22}, -{28,34,23}, -{28,34,24}, -{28,34,25}, -{28,34,26}, -{28,34,27}, -{28,34,28}, -{28,34,29}, -{28,34,30}, -{28,34,31}, -{28,34,32}, -{28,34,33}, -{28,34,34}, -{28,34,35}, -{28,34,36}, -{28,34,37}, -{28,34,38}, -{28,34,39}, -{28,35,-66}, -{28,35,-65}, -{28,35,-64}, -{28,35,-63}, -{28,35,-62}, -{28,35,-61}, -{28,35,-60}, -{28,35,-59}, -{28,35,-58}, -{28,35,-57}, -{28,35,-56}, -{28,35,-55}, -{28,35,-54}, -{28,35,-53}, -{28,35,-52}, -{28,35,-51}, -{28,35,-50}, -{28,35,-49}, -{28,35,-48}, -{28,35,-47}, -{28,35,-46}, -{28,35,-45}, -{28,35,-44}, -{28,35,-43}, -{28,35,-42}, -{28,35,-41}, -{28,35,-40}, -{28,35,-39}, -{28,35,-38}, -{28,35,-37}, -{28,35,-36}, -{28,35,-35}, -{28,35,-34}, -{28,35,-33}, -{28,35,-32}, -{28,35,-31}, -{28,35,-30}, -{28,35,-29}, -{28,35,-28}, -{28,35,-27}, -{28,35,-26}, -{28,35,-25}, -{28,35,-24}, -{28,35,-23}, -{28,35,-22}, -{28,35,-21}, -{28,35,-20}, -{28,35,-19}, -{28,35,-18}, -{28,35,-17}, -{28,35,-16}, -{28,35,-15}, -{28,35,-14}, -{28,35,-13}, -{28,35,-12}, -{28,35,-11}, -{28,35,-10}, -{28,35,-9}, -{28,35,-8}, -{28,35,-7}, -{28,35,-6}, -{28,35,-5}, -{28,35,-4}, -{28,35,-3}, -{28,35,-2}, -{28,35,-1}, -{28,35,0}, -{28,35,1}, -{28,35,2}, -{28,35,3}, -{28,35,4}, -{28,35,5}, -{28,35,6}, -{28,35,7}, -{28,35,8}, -{28,35,9}, -{28,35,10}, -{28,35,11}, -{28,35,12}, -{28,35,13}, -{28,35,14}, -{28,35,15}, -{28,35,16}, -{28,35,17}, -{28,35,18}, -{28,35,19}, -{28,35,20}, -{28,35,21}, -{28,35,22}, -{28,35,23}, -{28,35,24}, -{28,35,25}, -{28,35,26}, -{28,35,27}, -{28,35,28}, -{28,35,29}, -{28,35,30}, -{28,35,31}, -{28,35,32}, -{28,35,33}, -{28,35,34}, -{28,35,35}, -{28,35,36}, -{28,35,37}, -{28,35,38}, -{28,35,39}, -{28,36,-67}, -{28,36,-66}, -{28,36,-65}, -{28,36,-64}, -{28,36,-63}, -{28,36,-62}, -{28,36,-61}, -{28,36,-60}, -{28,36,-59}, -{28,36,-58}, -{28,36,-57}, -{28,36,-56}, -{28,36,-55}, -{28,36,-54}, -{28,36,-53}, -{28,36,-52}, -{28,36,-51}, -{28,36,-50}, -{28,36,-49}, -{28,36,-48}, -{28,36,-47}, -{28,36,-46}, -{28,36,-45}, -{28,36,-44}, -{28,36,-43}, -{28,36,-42}, -{28,36,-41}, -{28,36,-40}, -{28,36,-39}, -{28,36,-38}, -{28,36,-37}, -{28,36,-36}, -{28,36,-35}, -{28,36,-34}, -{28,36,-33}, -{28,36,-32}, -{28,36,-31}, -{28,36,-30}, -{28,36,-29}, -{28,36,-28}, -{28,36,-27}, -{28,36,-26}, -{28,36,-25}, -{28,36,-24}, -{28,36,-23}, -{28,36,-22}, -{28,36,-21}, -{28,36,-20}, -{28,36,-19}, -{28,36,-18}, -{28,36,-17}, -{28,36,-16}, -{28,36,-15}, -{28,36,-14}, -{28,36,-13}, -{28,36,-12}, -{28,36,-11}, -{28,36,-10}, -{28,36,-9}, -{28,36,-8}, -{28,36,-7}, -{28,36,-6}, -{28,36,-5}, -{28,36,-4}, -{28,36,-3}, -{28,36,-2}, -{28,36,-1}, -{28,36,0}, -{28,36,1}, -{28,36,2}, -{28,36,3}, -{28,36,4}, -{28,36,5}, -{28,36,6}, -{28,36,7}, -{28,36,8}, -{28,36,9}, -{28,36,10}, -{28,36,11}, -{28,36,12}, -{28,36,13}, -{28,36,14}, -{28,36,15}, -{28,36,16}, -{28,36,17}, -{28,36,18}, -{28,36,19}, -{28,36,20}, -{28,36,21}, -{28,36,22}, -{28,36,23}, -{28,36,24}, -{28,36,25}, -{28,36,26}, -{28,36,27}, -{28,36,28}, -{28,36,29}, -{28,36,30}, -{28,36,31}, -{28,36,32}, -{28,36,33}, -{28,36,34}, -{28,36,35}, -{28,36,36}, -{28,36,37}, -{28,36,38}, -{28,36,39}, -{28,37,-68}, -{28,37,-67}, -{28,37,-66}, -{28,37,-65}, -{28,37,-64}, -{28,37,-63}, -{28,37,-62}, -{28,37,-61}, -{28,37,-60}, -{28,37,-59}, -{28,37,-58}, -{28,37,-57}, -{28,37,-56}, -{28,37,-55}, -{28,37,-54}, -{28,37,-53}, -{28,37,-52}, -{28,37,-51}, -{28,37,-50}, -{28,37,-49}, -{28,37,-48}, -{28,37,-47}, -{28,37,-46}, -{28,37,-45}, -{28,37,-44}, -{28,37,-43}, -{28,37,-42}, -{28,37,-41}, -{28,37,-40}, -{28,37,-39}, -{28,37,-38}, -{28,37,-37}, -{28,37,-36}, -{28,37,-35}, -{28,37,-34}, -{28,37,-33}, -{28,37,-32}, -{28,37,-31}, -{28,37,-30}, -{28,37,-29}, -{28,37,-28}, -{28,37,-27}, -{28,37,-26}, -{28,37,-25}, -{28,37,-24}, -{28,37,-23}, -{28,37,-22}, -{28,37,-21}, -{28,37,-20}, -{28,37,-19}, -{28,37,-18}, -{28,37,-17}, -{28,37,-16}, -{28,37,-15}, -{28,37,-14}, -{28,37,-13}, -{28,37,-12}, -{28,37,-11}, -{28,37,-10}, -{28,37,-9}, -{28,37,-8}, -{28,37,-7}, -{28,37,-6}, -{28,37,-5}, -{28,37,-4}, -{28,37,-3}, -{28,37,-2}, -{28,37,-1}, -{28,37,0}, -{28,37,1}, -{28,37,2}, -{28,37,3}, -{28,37,4}, -{28,37,5}, -{28,37,6}, -{28,37,7}, -{28,37,8}, -{28,37,9}, -{28,37,10}, -{28,37,11}, -{28,37,12}, -{28,37,13}, -{28,37,14}, -{28,37,15}, -{28,37,16}, -{28,37,17}, -{28,37,18}, -{28,37,19}, -{28,37,20}, -{28,37,21}, -{28,37,22}, -{28,37,23}, -{28,37,24}, -{28,37,25}, -{28,37,26}, -{28,37,27}, -{28,37,28}, -{28,37,29}, -{28,37,30}, -{28,37,31}, -{28,37,32}, -{28,37,33}, -{28,37,34}, -{28,37,35}, -{28,37,36}, -{28,37,37}, -{28,37,38}, -{28,37,39}, -{28,37,40}, -{28,38,-69}, -{28,38,-68}, -{28,38,-67}, -{28,38,-66}, -{28,38,-65}, -{28,38,-64}, -{28,38,-63}, -{28,38,-62}, -{28,38,-61}, -{28,38,-60}, -{28,38,-59}, -{28,38,-58}, -{28,38,-57}, -{28,38,-56}, -{28,38,-55}, -{28,38,-54}, -{28,38,-53}, -{28,38,-52}, -{28,38,-51}, -{28,38,-50}, -{28,38,-49}, -{28,38,-48}, -{28,38,-47}, -{28,38,-46}, -{28,38,-45}, -{28,38,-44}, -{28,38,-43}, -{28,38,-42}, -{28,38,-41}, -{28,38,-40}, -{28,38,-39}, -{28,38,-38}, -{28,38,-37}, -{28,38,-36}, -{28,38,-35}, -{28,38,-34}, -{28,38,-33}, -{28,38,-32}, -{28,38,-31}, -{28,38,-30}, -{28,38,-29}, -{28,38,-28}, -{28,38,-27}, -{28,38,-26}, -{28,38,-25}, -{28,38,-24}, -{28,38,-23}, -{28,38,-22}, -{28,38,-21}, -{28,38,-20}, -{28,38,-19}, -{28,38,-18}, -{28,38,-17}, -{28,38,-16}, -{28,38,-15}, -{28,38,-14}, -{28,38,-13}, -{28,38,-12}, -{28,38,-11}, -{28,38,-10}, -{28,38,-9}, -{28,38,-8}, -{28,38,-7}, -{28,38,-6}, -{28,38,-5}, -{28,38,-4}, -{28,38,-3}, -{28,38,-2}, -{28,38,-1}, -{28,38,0}, -{28,38,1}, -{28,38,2}, -{28,38,3}, -{28,38,4}, -{28,38,5}, -{28,38,6}, -{28,38,7}, -{28,38,8}, -{28,38,9}, -{28,38,10}, -{28,38,11}, -{28,38,12}, -{28,38,13}, -{28,38,14}, -{28,38,15}, -{28,38,16}, -{28,38,17}, -{28,38,18}, -{28,38,19}, -{28,38,20}, -{28,38,21}, -{28,38,22}, -{28,38,23}, -{28,38,24}, -{28,38,25}, -{28,38,26}, -{28,38,27}, -{28,38,28}, -{28,38,29}, -{28,38,30}, -{28,38,31}, -{28,38,32}, -{28,38,33}, -{28,38,34}, -{28,38,35}, -{28,38,36}, -{28,38,37}, -{28,38,38}, -{28,38,39}, -{28,38,40}, -{28,39,-70}, -{28,39,-69}, -{28,39,-68}, -{28,39,-67}, -{28,39,-66}, -{28,39,-65}, -{28,39,-64}, -{28,39,-63}, -{28,39,-62}, -{28,39,-61}, -{28,39,-60}, -{28,39,-59}, -{28,39,-58}, -{28,39,-57}, -{28,39,-56}, -{28,39,-55}, -{28,39,-54}, -{28,39,-53}, -{28,39,-52}, -{28,39,-51}, -{28,39,-50}, -{28,39,-49}, -{28,39,-48}, -{28,39,-47}, -{28,39,-46}, -{28,39,-45}, -{28,39,-44}, -{28,39,-43}, -{28,39,-42}, -{28,39,-41}, -{28,39,-40}, -{28,39,-39}, -{28,39,-38}, -{28,39,-37}, -{28,39,-36}, -{28,39,-35}, -{28,39,-34}, -{28,39,-33}, -{28,39,-32}, -{28,39,-31}, -{28,39,-30}, -{28,39,-29}, -{28,39,-28}, -{28,39,-27}, -{28,39,-26}, -{28,39,-25}, -{28,39,-24}, -{28,39,-23}, -{28,39,-22}, -{28,39,-21}, -{28,39,-20}, -{28,39,-19}, -{28,39,-18}, -{28,39,-17}, -{28,39,-16}, -{28,39,-15}, -{28,39,-14}, -{28,39,-13}, -{28,39,-12}, -{28,39,-11}, -{28,39,-10}, -{28,39,-9}, -{28,39,-8}, -{28,39,-7}, -{28,39,-6}, -{28,39,-5}, -{28,39,-4}, -{28,39,-3}, -{28,39,-2}, -{28,39,-1}, -{28,39,0}, -{28,39,1}, -{28,39,2}, -{28,39,3}, -{28,39,4}, -{28,39,5}, -{28,39,6}, -{28,39,7}, -{28,39,8}, -{28,39,9}, -{28,39,10}, -{28,39,11}, -{28,39,12}, -{28,39,13}, -{28,39,14}, -{28,39,15}, -{28,39,16}, -{28,39,17}, -{28,39,18}, -{28,39,19}, -{28,39,20}, -{28,39,21}, -{28,39,22}, -{28,39,23}, -{28,39,24}, -{28,39,25}, -{28,39,26}, -{28,39,27}, -{28,39,28}, -{28,39,29}, -{28,39,30}, -{28,39,31}, -{28,39,32}, -{28,39,33}, -{28,39,34}, -{28,39,35}, -{28,39,36}, -{28,39,37}, -{28,39,38}, -{28,39,39}, -{28,39,40}, -{28,40,-71}, -{28,40,-70}, -{28,40,-69}, -{28,40,-68}, -{28,40,-67}, -{28,40,-66}, -{28,40,-65}, -{28,40,-64}, -{28,40,-63}, -{28,40,-62}, -{28,40,-61}, -{28,40,-60}, -{28,40,-59}, -{28,40,-58}, -{28,40,-57}, -{28,40,-56}, -{28,40,-55}, -{28,40,-54}, -{28,40,-53}, -{28,40,-52}, -{28,40,-51}, -{28,40,-50}, -{28,40,-49}, -{28,40,-48}, -{28,40,-47}, -{28,40,-46}, -{28,40,-45}, -{28,40,-44}, -{28,40,-43}, -{28,40,-42}, -{28,40,-41}, -{28,40,-40}, -{28,40,-39}, -{28,40,-38}, -{28,40,-37}, -{28,40,-36}, -{28,40,-35}, -{28,40,-34}, -{28,40,-33}, -{28,40,-32}, -{28,40,-31}, -{28,40,-30}, -{28,40,-29}, -{28,40,-28}, -{28,40,-27}, -{28,40,-26}, -{28,40,-25}, -{28,40,-24}, -{28,40,-23}, -{28,40,-22}, -{28,40,-21}, -{28,40,-20}, -{28,40,-19}, -{28,40,-18}, -{28,40,-17}, -{28,40,-16}, -{28,40,-15}, -{28,40,-14}, -{28,40,-13}, -{28,40,-12}, -{28,40,-11}, -{28,40,-10}, -{28,40,-9}, -{28,40,-8}, -{28,40,-7}, -{28,40,-6}, -{28,40,-5}, -{28,40,-4}, -{28,40,-3}, -{28,40,-2}, -{28,40,-1}, -{28,40,0}, -{28,40,1}, -{28,40,2}, -{28,40,3}, -{28,40,4}, -{28,40,5}, -{28,40,6}, -{28,40,7}, -{28,40,8}, -{28,40,9}, -{28,40,10}, -{28,40,11}, -{28,40,12}, -{28,40,13}, -{28,40,14}, -{28,40,15}, -{28,40,16}, -{28,40,17}, -{28,40,18}, -{28,40,19}, -{28,40,20}, -{28,40,21}, -{28,40,22}, -{28,40,23}, -{28,40,24}, -{28,40,25}, -{28,40,26}, -{28,40,27}, -{28,40,28}, -{28,40,29}, -{28,40,30}, -{28,40,31}, -{28,40,32}, -{28,40,33}, -{28,40,34}, -{28,40,35}, -{28,40,36}, -{28,40,37}, -{28,40,38}, -{28,40,39}, -{28,40,40}, -{28,41,-71}, -{28,41,-70}, -{28,41,-69}, -{28,41,-68}, -{28,41,-67}, -{28,41,-66}, -{28,41,-65}, -{28,41,-64}, -{28,41,-63}, -{28,41,-62}, -{28,41,-61}, -{28,41,-60}, -{28,41,-59}, -{28,41,-58}, -{28,41,-57}, -{28,41,-56}, -{28,41,-55}, -{28,41,-54}, -{28,41,-53}, -{28,41,-52}, -{28,41,-51}, -{28,41,-50}, -{28,41,-49}, -{28,41,-48}, -{28,41,-47}, -{28,41,-46}, -{28,41,-45}, -{28,41,-44}, -{28,41,-43}, -{28,41,-42}, -{28,41,-41}, -{28,41,-40}, -{28,41,-39}, -{28,41,-38}, -{28,41,-37}, -{28,41,-36}, -{28,41,-35}, -{28,41,-34}, -{28,41,-33}, -{28,41,-32}, -{28,41,-31}, -{28,41,-30}, -{28,41,-29}, -{28,41,-28}, -{28,41,-27}, -{28,41,-26}, -{28,41,-25}, -{28,41,-24}, -{28,41,-23}, -{28,41,-22}, -{28,41,-21}, -{28,41,-20}, -{28,41,-19}, -{28,41,-18}, -{28,41,-17}, -{28,41,-16}, -{28,41,-15}, -{28,41,-14}, -{28,41,-13}, -{28,41,-12}, -{28,41,-11}, -{28,41,-10}, -{28,41,-9}, -{28,41,-8}, -{28,41,-7}, -{28,41,-6}, -{28,41,-5}, -{28,41,-4}, -{28,41,-3}, -{28,41,-2}, -{28,41,-1}, -{28,41,0}, -{28,41,1}, -{28,41,2}, -{28,41,3}, -{28,41,4}, -{28,41,5}, -{28,41,6}, -{28,41,7}, -{28,41,8}, -{28,41,9}, -{28,41,10}, -{28,41,11}, -{28,41,12}, -{28,41,13}, -{28,41,14}, -{28,41,15}, -{28,41,16}, -{28,41,17}, -{28,41,18}, -{28,41,19}, -{28,41,20}, -{28,41,21}, -{28,41,22}, -{28,41,23}, -{28,41,24}, -{28,41,25}, -{28,41,26}, -{28,41,27}, -{28,41,28}, -{28,41,29}, -{28,41,30}, -{28,41,31}, -{28,41,32}, -{28,41,33}, -{28,41,34}, -{28,41,35}, -{28,41,36}, -{28,41,37}, -{28,41,38}, -{28,41,39}, -{28,41,40}, -{28,42,-72}, -{28,42,-71}, -{28,42,-70}, -{28,42,-69}, -{28,42,-68}, -{28,42,-67}, -{28,42,-66}, -{28,42,-65}, -{28,42,-64}, -{28,42,-63}, -{28,42,-62}, -{28,42,-61}, -{28,42,-60}, -{28,42,-59}, -{28,42,-58}, -{28,42,-57}, -{28,42,-56}, -{28,42,-55}, -{28,42,-54}, -{28,42,-53}, -{28,42,-52}, -{28,42,-51}, -{28,42,-50}, -{28,42,-49}, -{28,42,-48}, -{28,42,-47}, -{28,42,-46}, -{28,42,-45}, -{28,42,-44}, -{28,42,-43}, -{28,42,-42}, -{28,42,-41}, -{28,42,-40}, -{28,42,-39}, -{28,42,-38}, -{28,42,-37}, -{28,42,-36}, -{28,42,-35}, -{28,42,-34}, -{28,42,-33}, -{28,42,-32}, -{28,42,-31}, -{28,42,-30}, -{28,42,-29}, -{28,42,-28}, -{28,42,-27}, -{28,42,-26}, -{28,42,-25}, -{28,42,-24}, -{28,42,-23}, -{28,42,-22}, -{28,42,-21}, -{28,42,-20}, -{28,42,-19}, -{28,42,-18}, -{28,42,-17}, -{28,42,-16}, -{28,42,-15}, -{28,42,-14}, -{28,42,-13}, -{28,42,-12}, -{28,42,-11}, -{28,42,-10}, -{28,42,-9}, -{28,42,-8}, -{28,42,-7}, -{28,42,-6}, -{28,42,-5}, -{28,42,-4}, -{28,42,-3}, -{28,42,-2}, -{28,42,-1}, -{28,42,0}, -{28,42,1}, -{28,42,2}, -{28,42,3}, -{28,42,4}, -{28,42,5}, -{28,42,6}, -{28,42,7}, -{28,42,8}, -{28,42,9}, -{28,42,10}, -{28,42,11}, -{28,42,12}, -{28,42,13}, -{28,42,14}, -{28,42,15}, -{28,42,16}, -{28,42,17}, -{28,42,18}, -{28,42,19}, -{28,42,20}, -{28,42,21}, -{28,42,22}, -{28,42,23}, -{28,42,24}, -{28,42,25}, -{28,42,26}, -{28,42,27}, -{28,42,28}, -{28,42,29}, -{28,42,30}, -{28,42,31}, -{28,42,32}, -{28,42,33}, -{28,42,34}, -{28,42,35}, -{28,42,36}, -{28,42,37}, -{28,42,38}, -{28,42,39}, -{28,42,40}, -{28,43,-73}, -{28,43,-72}, -{28,43,-71}, -{28,43,-70}, -{28,43,-69}, -{28,43,-68}, -{28,43,-67}, -{28,43,-66}, -{28,43,-65}, -{28,43,-64}, -{28,43,-63}, -{28,43,-62}, -{28,43,-61}, -{28,43,-60}, -{28,43,-59}, -{28,43,-58}, -{28,43,-57}, -{28,43,-56}, -{28,43,-55}, -{28,43,-54}, -{28,43,-53}, -{28,43,-52}, -{28,43,-51}, -{28,43,-50}, -{28,43,-49}, -{28,43,-48}, -{28,43,-47}, -{28,43,-46}, -{28,43,-45}, -{28,43,-44}, -{28,43,-43}, -{28,43,-42}, -{28,43,-41}, -{28,43,-40}, -{28,43,-39}, -{28,43,-38}, -{28,43,-37}, -{28,43,-36}, -{28,43,-35}, -{28,43,-34}, -{28,43,-33}, -{28,43,-32}, -{28,43,-31}, -{28,43,-30}, -{28,43,-29}, -{28,43,-28}, -{28,43,-27}, -{28,43,-26}, -{28,43,-25}, -{28,43,-24}, -{28,43,-23}, -{28,43,-22}, -{28,43,-21}, -{28,43,-20}, -{28,43,-19}, -{28,43,-18}, -{28,43,-17}, -{28,43,-16}, -{28,43,-15}, -{28,43,-14}, -{28,43,-13}, -{28,43,-12}, -{28,43,-11}, -{28,43,-10}, -{28,43,-9}, -{28,43,-8}, -{28,43,-7}, -{28,43,-6}, -{28,43,-5}, -{28,43,-4}, -{28,43,-3}, -{28,43,-2}, -{28,43,-1}, -{28,43,0}, -{28,43,1}, -{28,43,2}, -{28,43,3}, -{28,43,4}, -{28,43,5}, -{28,43,6}, -{28,43,7}, -{28,43,8}, -{28,43,9}, -{28,43,10}, -{28,43,11}, -{28,43,12}, -{28,43,13}, -{28,43,14}, -{28,43,15}, -{28,43,16}, -{28,43,17}, -{28,43,18}, -{28,43,19}, -{28,43,20}, -{28,43,21}, -{28,43,22}, -{28,43,23}, -{28,43,24}, -{28,43,25}, -{28,43,26}, -{28,43,27}, -{28,43,28}, -{28,43,29}, -{28,43,30}, -{28,43,31}, -{28,43,32}, -{28,43,33}, -{28,43,34}, -{28,43,35}, -{28,43,36}, -{28,43,37}, -{28,43,38}, -{28,43,39}, -{28,43,40}, -{28,44,-74}, -{28,44,-73}, -{28,44,-72}, -{28,44,-71}, -{28,44,-70}, -{28,44,-69}, -{28,44,-68}, -{28,44,-67}, -{28,44,-66}, -{28,44,-65}, -{28,44,-64}, -{28,44,-63}, -{28,44,-62}, -{28,44,-61}, -{28,44,-60}, -{28,44,-59}, -{28,44,-58}, -{28,44,-57}, -{28,44,-56}, -{28,44,-55}, -{28,44,-54}, -{28,44,-53}, -{28,44,-52}, -{28,44,-51}, -{28,44,-50}, -{28,44,-49}, -{28,44,-48}, -{28,44,-47}, -{28,44,-46}, -{28,44,-45}, -{28,44,-44}, -{28,44,-43}, -{28,44,-42}, -{28,44,-41}, -{28,44,-40}, -{28,44,-39}, -{28,44,-38}, -{28,44,-37}, -{28,44,-36}, -{28,44,-35}, -{28,44,-34}, -{28,44,-33}, -{28,44,-32}, -{28,44,-31}, -{28,44,-30}, -{28,44,-29}, -{28,44,-28}, -{28,44,-27}, -{28,44,-26}, -{28,44,-25}, -{28,44,-24}, -{28,44,-23}, -{28,44,-22}, -{28,44,-21}, -{28,44,-20}, -{28,44,-19}, -{28,44,-18}, -{28,44,-17}, -{28,44,-16}, -{28,44,-15}, -{28,44,-14}, -{28,44,-13}, -{28,44,-12}, -{28,44,-11}, -{28,44,-10}, -{28,44,-9}, -{28,44,-8}, -{28,44,-7}, -{28,44,-6}, -{28,44,-5}, -{28,44,-4}, -{28,44,-3}, -{28,44,-2}, -{28,44,-1}, -{28,44,0}, -{28,44,1}, -{28,44,2}, -{28,44,3}, -{28,44,4}, -{28,44,5}, -{28,44,6}, -{28,44,7}, -{28,44,8}, -{28,44,9}, -{28,44,10}, -{28,44,11}, -{28,44,12}, -{28,44,13}, -{28,44,14}, -{28,44,15}, -{28,44,16}, -{28,44,17}, -{28,44,18}, -{28,44,19}, -{28,44,20}, -{28,44,21}, -{28,44,22}, -{28,44,23}, -{28,44,24}, -{28,44,25}, -{28,44,26}, -{28,44,27}, -{28,44,28}, -{28,44,29}, -{28,44,30}, -{28,44,31}, -{28,44,32}, -{28,44,33}, -{28,44,34}, -{28,44,35}, -{28,44,36}, -{28,44,37}, -{28,44,38}, -{28,44,39}, -{28,44,40}, -{28,45,-75}, -{28,45,-74}, -{28,45,-73}, -{28,45,-72}, -{28,45,-71}, -{28,45,-70}, -{28,45,-69}, -{28,45,-68}, -{28,45,-67}, -{28,45,-66}, -{28,45,-65}, -{28,45,-64}, -{28,45,-63}, -{28,45,-62}, -{28,45,-61}, -{28,45,-60}, -{28,45,-59}, -{28,45,-58}, -{28,45,-57}, -{28,45,-56}, -{28,45,-55}, -{28,45,-54}, -{28,45,-53}, -{28,45,-52}, -{28,45,-51}, -{28,45,-50}, -{28,45,-49}, -{28,45,-48}, -{28,45,-47}, -{28,45,-46}, -{28,45,-45}, -{28,45,-44}, -{28,45,-43}, -{28,45,-42}, -{28,45,-41}, -{28,45,-40}, -{28,45,-39}, -{28,45,-38}, -{28,45,-37}, -{28,45,-36}, -{28,45,-35}, -{28,45,-34}, -{28,45,-33}, -{28,45,-32}, -{28,45,-31}, -{28,45,-30}, -{28,45,-29}, -{28,45,-28}, -{28,45,-27}, -{28,45,-26}, -{28,45,-25}, -{28,45,-24}, -{28,45,-23}, -{28,45,-22}, -{28,45,-21}, -{28,45,-20}, -{28,45,-19}, -{28,45,-18}, -{28,45,-17}, -{28,45,-16}, -{28,45,-15}, -{28,45,-14}, -{28,45,-13}, -{28,45,-12}, -{28,45,-11}, -{28,45,-10}, -{28,45,-9}, -{28,45,-8}, -{28,45,-7}, -{28,45,-6}, -{28,45,-5}, -{28,45,-4}, -{28,45,-3}, -{28,45,-2}, -{28,45,-1}, -{28,45,0}, -{28,45,1}, -{28,45,2}, -{28,45,3}, -{28,45,4}, -{28,45,5}, -{28,45,6}, -{28,45,7}, -{28,45,8}, -{28,45,9}, -{28,45,10}, -{28,45,11}, -{28,45,12}, -{28,45,13}, -{28,45,14}, -{28,45,15}, -{28,45,16}, -{28,45,17}, -{28,45,18}, -{28,45,19}, -{28,45,20}, -{28,45,21}, -{28,45,22}, -{28,45,23}, -{28,45,24}, -{28,45,25}, -{28,45,26}, -{28,45,27}, -{28,45,28}, -{28,45,29}, -{28,45,30}, -{28,45,31}, -{28,45,32}, -{28,45,33}, -{28,45,34}, -{28,45,35}, -{28,45,36}, -{28,45,37}, -{28,45,38}, -{28,45,39}, -{28,45,40}, -{28,46,-76}, -{28,46,-75}, -{28,46,-74}, -{28,46,-73}, -{28,46,-72}, -{28,46,-71}, -{28,46,-70}, -{28,46,-69}, -{28,46,-68}, -{28,46,-67}, -{28,46,-66}, -{28,46,-65}, -{28,46,-64}, -{28,46,-63}, -{28,46,-62}, -{28,46,-61}, -{28,46,-60}, -{28,46,-59}, -{28,46,-58}, -{28,46,-57}, -{28,46,-56}, -{28,46,-55}, -{28,46,-54}, -{28,46,-53}, -{28,46,-52}, -{28,46,-51}, -{28,46,-50}, -{28,46,-49}, -{28,46,-48}, -{28,46,-47}, -{28,46,-46}, -{28,46,-45}, -{28,46,-44}, -{28,46,-43}, -{28,46,-42}, -{28,46,-41}, -{28,46,-40}, -{28,46,-39}, -{28,46,-38}, -{28,46,-37}, -{28,46,-36}, -{28,46,-35}, -{28,46,-34}, -{28,46,-33}, -{28,46,-32}, -{28,46,-31}, -{28,46,-30}, -{28,46,-29}, -{28,46,-28}, -{28,46,-27}, -{28,46,-26}, -{28,46,-25}, -{28,46,-24}, -{28,46,-23}, -{28,46,-22}, -{28,46,-21}, -{28,46,-20}, -{28,46,-19}, -{28,46,-18}, -{28,46,-17}, -{28,46,-16}, -{28,46,-15}, -{28,46,-14}, -{28,46,-13}, -{28,46,-12}, -{28,46,-11}, -{28,46,-10}, -{28,46,-9}, -{28,46,-8}, -{28,46,-7}, -{28,46,-6}, -{28,46,-5}, -{28,46,-4}, -{28,46,-3}, -{28,46,-2}, -{28,46,-1}, -{28,46,0}, -{28,46,1}, -{28,46,2}, -{28,46,3}, -{28,46,4}, -{28,46,5}, -{28,46,6}, -{28,46,7}, -{28,46,8}, -{28,46,9}, -{28,46,10}, -{28,46,11}, -{28,46,12}, -{28,46,13}, -{28,46,14}, -{28,46,15}, -{28,46,16}, -{28,46,17}, -{28,46,18}, -{28,46,19}, -{28,46,20}, -{28,46,21}, -{28,46,22}, -{28,46,23}, -{28,46,24}, -{28,46,25}, -{28,46,26}, -{28,46,27}, -{28,46,28}, -{28,46,29}, -{28,46,30}, -{28,46,31}, -{28,46,32}, -{28,46,33}, -{28,46,34}, -{28,46,35}, -{28,46,36}, -{28,46,37}, -{28,46,38}, -{28,46,39}, -{28,46,40}, -{28,47,-77}, -{28,47,-76}, -{28,47,-75}, -{28,47,-74}, -{28,47,-73}, -{28,47,-72}, -{28,47,-71}, -{28,47,-70}, -{28,47,-69}, -{28,47,-68}, -{28,47,-67}, -{28,47,-66}, -{28,47,-65}, -{28,47,-64}, -{28,47,-63}, -{28,47,-62}, -{28,47,-61}, -{28,47,-60}, -{28,47,-59}, -{28,47,-58}, -{28,47,-57}, -{28,47,-56}, -{28,47,-55}, -{28,47,-54}, -{28,47,-53}, -{28,47,-52}, -{28,47,-51}, -{28,47,-50}, -{28,47,-49}, -{28,47,-48}, -{28,47,-47}, -{28,47,-46}, -{28,47,-45}, -{28,47,-44}, -{28,47,-43}, -{28,47,-42}, -{28,47,-41}, -{28,47,-40}, -{28,47,-39}, -{28,47,-38}, -{28,47,-37}, -{28,47,-36}, -{28,47,-35}, -{28,47,-34}, -{28,47,-33}, -{28,47,-32}, -{28,47,-31}, -{28,47,-30}, -{28,47,-29}, -{28,47,-28}, -{28,47,-27}, -{28,47,-26}, -{28,47,-25}, -{28,47,-24}, -{28,47,-23}, -{28,47,-22}, -{28,47,-21}, -{28,47,-20}, -{28,47,-19}, -{28,47,-18}, -{28,47,-17}, -{28,47,-16}, -{28,47,-15}, -{28,47,-14}, -{28,47,-13}, -{28,47,-12}, -{28,47,-11}, -{28,47,-10}, -{28,47,-9}, -{28,47,-8}, -{28,47,-7}, -{28,47,-6}, -{28,47,-5}, -{28,47,-4}, -{28,47,-3}, -{28,47,-2}, -{28,47,-1}, -{28,47,0}, -{28,47,1}, -{28,47,2}, -{28,47,3}, -{28,47,4}, -{28,47,5}, -{28,47,6}, -{28,47,7}, -{28,47,8}, -{28,47,9}, -{28,47,10}, -{28,47,11}, -{28,47,12}, -{28,47,13}, -{28,47,14}, -{28,47,15}, -{28,47,16}, -{28,47,17}, -{28,47,18}, -{28,47,19}, -{28,47,20}, -{28,47,21}, -{28,47,22}, -{28,47,23}, -{28,47,24}, -{28,47,25}, -{28,47,26}, -{28,47,27}, -{28,47,28}, -{28,47,29}, -{28,47,30}, -{28,47,31}, -{28,47,32}, -{28,47,33}, -{28,47,34}, -{28,47,35}, -{28,47,36}, -{28,47,37}, -{28,47,38}, -{28,47,39}, -{28,47,40}, -{28,47,41}, -{28,48,-78}, -{28,48,-77}, -{28,48,-76}, -{28,48,-75}, -{28,48,-74}, -{28,48,-73}, -{28,48,-72}, -{28,48,-71}, -{28,48,-70}, -{28,48,-69}, -{28,48,-68}, -{28,48,-67}, -{28,48,-66}, -{28,48,-65}, -{28,48,-64}, -{28,48,-63}, -{28,48,-62}, -{28,48,-61}, -{28,48,-60}, -{28,48,-59}, -{28,48,-58}, -{28,48,-57}, -{28,48,-56}, -{28,48,-55}, -{28,48,-54}, -{28,48,-53}, -{28,48,-52}, -{28,48,-51}, -{28,48,-50}, -{28,48,-49}, -{28,48,-48}, -{28,48,-47}, -{28,48,-46}, -{28,48,-45}, -{28,48,-44}, -{28,48,-43}, -{28,48,-42}, -{28,48,-41}, -{28,48,-40}, -{28,48,-39}, -{28,48,-38}, -{28,48,-37}, -{28,48,-36}, -{28,48,-35}, -{28,48,-34}, -{28,48,-33}, -{28,48,-32}, -{28,48,-31}, -{28,48,-30}, -{28,48,-29}, -{28,48,-28}, -{28,48,-27}, -{28,48,-26}, -{28,48,-25}, -{28,48,-24}, -{28,48,-23}, -{28,48,-22}, -{28,48,-21}, -{28,48,-20}, -{28,48,-19}, -{28,48,-18}, -{28,48,-17}, -{28,48,-16}, -{28,48,-15}, -{28,48,-14}, -{28,48,-13}, -{28,48,-12}, -{28,48,-11}, -{28,48,-10}, -{28,48,-9}, -{28,48,-8}, -{28,48,-7}, -{28,48,-6}, -{28,48,-5}, -{28,48,-4}, -{28,48,-3}, -{28,48,-2}, -{28,48,-1}, -{28,48,0}, -{28,48,1}, -{28,48,2}, -{28,48,3}, -{28,48,4}, -{28,48,5}, -{28,48,6}, -{28,48,7}, -{28,48,8}, -{28,48,9}, -{28,48,10}, -{28,48,11}, -{28,48,12}, -{28,48,13}, -{28,48,14}, -{28,48,15}, -{28,48,16}, -{28,48,17}, -{28,48,18}, -{28,48,19}, -{28,48,20}, -{28,48,21}, -{28,48,22}, -{28,48,23}, -{28,48,24}, -{28,48,25}, -{28,48,26}, -{28,48,27}, -{28,48,28}, -{28,48,29}, -{28,48,30}, -{28,48,31}, -{28,48,32}, -{28,48,33}, -{28,48,34}, -{28,48,35}, -{28,48,36}, -{28,48,37}, -{28,48,38}, -{28,48,39}, -{28,48,40}, -{28,48,41}, -{28,49,-78}, -{28,49,-77}, -{28,49,-76}, -{28,49,-75}, -{28,49,-74}, -{28,49,-73}, -{28,49,-72}, -{28,49,-71}, -{28,49,-70}, -{28,49,-69}, -{28,49,-68}, -{28,49,-67}, -{28,49,-66}, -{28,49,-65}, -{28,49,-64}, -{28,49,-63}, -{28,49,-62}, -{28,49,-61}, -{28,49,-60}, -{28,49,-59}, -{28,49,-58}, -{28,49,-57}, -{28,49,-56}, -{28,49,-55}, -{28,49,-54}, -{28,49,-53}, -{28,49,-52}, -{28,49,-51}, -{28,49,-50}, -{28,49,-49}, -{28,49,-48}, -{28,49,-47}, -{28,49,-46}, -{28,49,-45}, -{28,49,-44}, -{28,49,-43}, -{28,49,-42}, -{28,49,-41}, -{28,49,-40}, -{28,49,-39}, -{28,49,-38}, -{28,49,-37}, -{28,49,-36}, -{28,49,-35}, -{28,49,-34}, -{28,49,-33}, -{28,49,-32}, -{28,49,-31}, -{28,49,-30}, -{28,49,-29}, -{28,49,-28}, -{28,49,-27}, -{28,49,-26}, -{28,49,-25}, -{28,49,-24}, -{28,49,-23}, -{28,49,-22}, -{28,49,-21}, -{28,49,-20}, -{28,49,-19}, -{28,49,-18}, -{28,49,-17}, -{28,49,-16}, -{28,49,-15}, -{28,49,-14}, -{28,49,-13}, -{28,49,-12}, -{28,49,-11}, -{28,49,-10}, -{28,49,-9}, -{28,49,-8}, -{28,49,-7}, -{28,49,-6}, -{28,49,-5}, -{28,49,-4}, -{28,49,-3}, -{28,49,-2}, -{28,49,-1}, -{28,49,0}, -{28,49,1}, -{28,49,2}, -{28,49,3}, -{28,49,4}, -{28,49,5}, -{28,49,6}, -{28,49,7}, -{28,49,8}, -{28,49,9}, -{28,49,10}, -{28,49,11}, -{28,49,12}, -{28,49,13}, -{28,49,14}, -{28,49,15}, -{28,49,16}, -{28,49,17}, -{28,49,18}, -{28,49,19}, -{28,49,20}, -{28,49,21}, -{28,49,22}, -{28,49,23}, -{28,49,24}, -{28,49,25}, -{28,49,26}, -{28,49,27}, -{28,49,28}, -{28,49,29}, -{28,49,30}, -{28,49,31}, -{28,49,32}, -{28,49,33}, -{28,49,34}, -{28,49,35}, -{28,49,36}, -{28,49,37}, -{28,49,38}, -{28,49,39}, -{28,49,40}, -{28,49,41}, -{28,50,-79}, -{28,50,-78}, -{28,50,-77}, -{28,50,-76}, -{28,50,-75}, -{28,50,-74}, -{28,50,-73}, -{28,50,-72}, -{28,50,-71}, -{28,50,-70}, -{28,50,-69}, -{28,50,-68}, -{28,50,-67}, -{28,50,-66}, -{28,50,-65}, -{28,50,-64}, -{28,50,-63}, -{28,50,-62}, -{28,50,-61}, -{28,50,-60}, -{28,50,-59}, -{28,50,-58}, -{28,50,-57}, -{28,50,-56}, -{28,50,-55}, -{28,50,-54}, -{28,50,-53}, -{28,50,-52}, -{28,50,-51}, -{28,50,-50}, -{28,50,-49}, -{28,50,-48}, -{28,50,-47}, -{28,50,-46}, -{28,50,-45}, -{28,50,-44}, -{28,50,-43}, -{28,50,-42}, -{28,50,-41}, -{28,50,-40}, -{28,50,-39}, -{28,50,-38}, -{28,50,-37}, -{28,50,-36}, -{28,50,-35}, -{28,50,-34}, -{28,50,-33}, -{28,50,-32}, -{28,50,-31}, -{28,50,-30}, -{28,50,-29}, -{28,50,-28}, -{28,50,-27}, -{28,50,-26}, -{28,50,-25}, -{28,50,-24}, -{28,50,-23}, -{28,50,-22}, -{28,50,-21}, -{28,50,-20}, -{28,50,-19}, -{28,50,-18}, -{28,50,-17}, -{28,50,-16}, -{28,50,-15}, -{28,50,-14}, -{28,50,-13}, -{28,50,-12}, -{28,50,-11}, -{28,50,-10}, -{28,50,-9}, -{28,50,-8}, -{28,50,-7}, -{28,50,-6}, -{28,50,-5}, -{28,50,-4}, -{28,50,-3}, -{28,50,-2}, -{28,50,-1}, -{28,50,0}, -{28,50,1}, -{28,50,2}, -{28,50,3}, -{28,50,4}, -{28,50,5}, -{28,50,6}, -{28,50,7}, -{28,50,8}, -{28,50,9}, -{28,50,10}, -{28,50,11}, -{28,50,12}, -{28,50,13}, -{28,50,14}, -{28,50,15}, -{28,50,16}, -{28,50,17}, -{28,50,18}, -{28,50,19}, -{28,50,20}, -{28,50,21}, -{28,50,22}, -{28,50,23}, -{28,50,24}, -{28,50,25}, -{28,50,26}, -{28,50,27}, -{28,50,28}, -{28,50,29}, -{28,50,30}, -{28,50,31}, -{28,50,32}, -{28,50,33}, -{28,50,34}, -{28,50,35}, -{28,50,36}, -{28,50,37}, -{28,50,38}, -{28,50,39}, -{28,50,40}, -{28,50,41}, -{28,51,-80}, -{28,51,-79}, -{28,51,-78}, -{28,51,-77}, -{28,51,-76}, -{28,51,-75}, -{28,51,-74}, -{28,51,-73}, -{28,51,-72}, -{28,51,-71}, -{28,51,-70}, -{28,51,-69}, -{28,51,-68}, -{28,51,-67}, -{28,51,-66}, -{28,51,-65}, -{28,51,-64}, -{28,51,-63}, -{28,51,-62}, -{28,51,-61}, -{28,51,-60}, -{28,51,-59}, -{28,51,-58}, -{28,51,-57}, -{28,51,-56}, -{28,51,-55}, -{28,51,-54}, -{28,51,-53}, -{28,51,-52}, -{28,51,-51}, -{28,51,-50}, -{28,51,-49}, -{28,51,-48}, -{28,51,-47}, -{28,51,-46}, -{28,51,-45}, -{28,51,-44}, -{28,51,-43}, -{28,51,-42}, -{28,51,-41}, -{28,51,-40}, -{28,51,-39}, -{28,51,-38}, -{28,51,-37}, -{28,51,-36}, -{28,51,-35}, -{28,51,-34}, -{28,51,-33}, -{28,51,-32}, -{28,51,-31}, -{28,51,-30}, -{28,51,-29}, -{28,51,-28}, -{28,51,-27}, -{28,51,-26}, -{28,51,-25}, -{28,51,-24}, -{28,51,-23}, -{28,51,-22}, -{28,51,-21}, -{28,51,-20}, -{28,51,-19}, -{28,51,-18}, -{28,51,-17}, -{28,51,-16}, -{28,51,-15}, -{28,51,-14}, -{28,51,-13}, -{28,51,-12}, -{28,51,-11}, -{28,51,-10}, -{28,51,-9}, -{28,51,-8}, -{28,51,-7}, -{28,51,-6}, -{28,51,-5}, -{28,51,-4}, -{28,51,-3}, -{28,51,-2}, -{28,51,-1}, -{28,51,0}, -{28,51,1}, -{28,51,2}, -{28,51,3}, -{28,51,4}, -{28,51,5}, -{28,51,6}, -{28,51,7}, -{28,51,8}, -{28,51,9}, -{28,51,10}, -{28,51,11}, -{28,51,12}, -{28,51,13}, -{28,51,14}, -{28,51,15}, -{28,51,16}, -{28,51,17}, -{28,51,18}, -{28,51,19}, -{28,51,20}, -{28,51,21}, -{28,51,22}, -{28,51,23}, -{28,51,24}, -{28,51,25}, -{28,51,26}, -{28,51,27}, -{28,51,28}, -{28,51,29}, -{28,51,30}, -{28,51,31}, -{28,51,32}, -{28,51,33}, -{28,51,34}, -{28,51,35}, -{28,51,36}, -{28,51,37}, -{28,51,38}, -{28,51,39}, -{28,51,40}, -{28,51,41}, -{28,52,-81}, -{28,52,-80}, -{28,52,-79}, -{28,52,-78}, -{28,52,-77}, -{28,52,-76}, -{28,52,-75}, -{28,52,-74}, -{28,52,-73}, -{28,52,-72}, -{28,52,-71}, -{28,52,-70}, -{28,52,-69}, -{28,52,-68}, -{28,52,-67}, -{28,52,-66}, -{28,52,-65}, -{28,52,-64}, -{28,52,-63}, -{28,52,-62}, -{28,52,-61}, -{28,52,-60}, -{28,52,-59}, -{28,52,-58}, -{28,52,-57}, -{28,52,-56}, -{28,52,-55}, -{28,52,-54}, -{28,52,-53}, -{28,52,-52}, -{28,52,-51}, -{28,52,-50}, -{28,52,-49}, -{28,52,-48}, -{28,52,-47}, -{28,52,-46}, -{28,52,-45}, -{28,52,-44}, -{28,52,-43}, -{28,52,-42}, -{28,52,-41}, -{28,52,-40}, -{28,52,-39}, -{28,52,-38}, -{28,52,-37}, -{28,52,-36}, -{28,52,-35}, -{28,52,-34}, -{28,52,-33}, -{28,52,-32}, -{28,52,-31}, -{28,52,-30}, -{28,52,-29}, -{28,52,-28}, -{28,52,-27}, -{28,52,-26}, -{28,52,-25}, -{28,52,-24}, -{28,52,-23}, -{28,52,-22}, -{28,52,-21}, -{28,52,-20}, -{28,52,-19}, -{28,52,-18}, -{28,52,-17}, -{28,52,-16}, -{28,52,-15}, -{28,52,-14}, -{28,52,-13}, -{28,52,-12}, -{28,52,-11}, -{28,52,-10}, -{28,52,-9}, -{28,52,-8}, -{28,52,-7}, -{28,52,-6}, -{28,52,-5}, -{28,52,-4}, -{28,52,-3}, -{28,52,-2}, -{28,52,-1}, -{28,52,0}, -{28,52,1}, -{28,52,2}, -{28,52,3}, -{28,52,4}, -{28,52,5}, -{28,52,6}, -{28,52,7}, -{28,52,8}, -{28,52,9}, -{28,52,10}, -{28,52,11}, -{28,52,12}, -{28,53,-82}, -{28,53,-81}, -{28,53,-80}, -{28,53,-79}, -{28,53,-78}, -{28,53,-77}, -{28,53,-76}, -{28,53,-75}, -{28,53,-74}, -{28,53,-73}, -{28,53,-72}, -{28,53,-71}, -{28,53,-70}, -{28,53,-69}, -{28,53,-68}, -{28,53,-67}, -{28,53,-66}, -{28,53,-65}, -{28,53,-64}, -{28,53,-63}, -{28,53,-62}, -{28,53,-61}, -{28,53,-60}, -{28,53,-59}, -{28,53,-58}, -{28,53,-57}, -{28,53,-56}, -{28,53,-55}, -{28,53,-54}, -{28,53,-53}, -{28,53,-52}, -{28,53,-51}, -{28,53,-50}, -{28,53,-49}, -{28,53,-48}, -{28,53,-47}, -{28,53,-46}, -{28,53,-45}, -{28,53,-44}, -{28,53,-43}, -{28,53,-42}, -{28,53,-41}, -{28,53,-40}, -{28,53,-39}, -{28,53,-38}, -{28,53,-37}, -{28,53,-36}, -{28,53,-35}, -{28,53,-34}, -{28,53,-33}, -{28,53,-32}, -{28,53,-31}, -{28,53,-30}, -{28,53,-29}, -{28,53,-28}, -{28,53,-27}, -{28,53,-26}, -{28,53,-25}, -{28,53,-24}, -{28,53,-23}, -{28,53,-22}, -{28,53,-21}, -{28,53,-20}, -{28,53,-19}, -{28,53,-18}, -{28,53,-17}, -{28,53,-16}, -{28,53,-15}, -{28,53,-14}, -{28,53,-13}, -{28,53,-12}, -{28,53,-11}, -{28,53,-10}, -{28,53,-9}, -{28,53,-8}, -{28,53,-7}, -{28,53,-6}, -{28,53,-5}, -{28,53,-4}, -{28,53,-3}, -{28,54,-83}, -{28,54,-82}, -{28,54,-81}, -{28,54,-80}, -{28,54,-79}, -{28,54,-78}, -{28,54,-77}, -{28,54,-76}, -{28,54,-75}, -{28,54,-74}, -{28,54,-73}, -{28,54,-72}, -{28,54,-71}, -{28,54,-70}, -{28,54,-69}, -{28,54,-68}, -{28,54,-67}, -{28,54,-66}, -{28,54,-65}, -{28,54,-64}, -{28,54,-63}, -{28,54,-62}, -{28,54,-61}, -{28,54,-60}, -{28,54,-59}, -{28,54,-58}, -{28,54,-57}, -{28,54,-56}, -{28,54,-55}, -{28,54,-54}, -{28,54,-53}, -{28,54,-52}, -{28,54,-51}, -{28,54,-50}, -{28,54,-49}, -{28,54,-48}, -{28,54,-47}, -{28,54,-46}, -{28,54,-45}, -{28,54,-44}, -{28,54,-43}, -{28,54,-42}, -{28,54,-41}, -{28,54,-40}, -{28,54,-39}, -{28,54,-38}, -{28,54,-37}, -{28,54,-36}, -{28,54,-35}, -{28,54,-34}, -{28,54,-33}, -{28,54,-32}, -{28,54,-31}, -{28,54,-30}, -{28,54,-29}, -{28,54,-28}, -{28,54,-27}, -{28,54,-26}, -{28,54,-25}, -{28,54,-24}, -{28,54,-23}, -{28,54,-22}, -{28,54,-21}, -{28,54,-20}, -{28,54,-19}, -{28,54,-18}, -{28,54,-17}, -{28,54,-16}, -{28,54,-15}, -{28,54,-14}, -{28,55,-84}, -{28,55,-83}, -{28,55,-82}, -{28,55,-81}, -{28,55,-80}, -{28,55,-79}, -{28,55,-78}, -{28,55,-77}, -{28,55,-76}, -{28,55,-75}, -{28,55,-74}, -{28,55,-73}, -{28,55,-72}, -{28,55,-71}, -{28,55,-70}, -{28,55,-69}, -{28,55,-68}, -{28,55,-67}, -{28,55,-66}, -{28,55,-65}, -{28,55,-64}, -{28,55,-63}, -{28,55,-62}, -{28,55,-61}, -{28,55,-60}, -{28,55,-59}, -{28,55,-58}, -{28,55,-57}, -{28,55,-56}, -{28,55,-55}, -{28,55,-54}, -{28,55,-53}, -{28,55,-52}, -{28,55,-51}, -{28,55,-50}, -{28,55,-49}, -{28,55,-48}, -{28,55,-47}, -{28,55,-46}, -{28,55,-45}, -{28,55,-44}, -{28,55,-43}, -{28,55,-42}, -{28,55,-41}, -{28,55,-40}, -{28,55,-39}, -{28,55,-38}, -{28,55,-37}, -{28,55,-36}, -{28,55,-35}, -{28,55,-34}, -{28,55,-33}, -{28,55,-32}, -{28,55,-31}, -{28,55,-30}, -{28,55,-29}, -{28,55,-28}, -{28,55,-27}, -{28,55,-26}, -{28,55,-25}, -{28,55,-24}, -{28,55,-23}, -{28,56,-84}, -{28,56,-83}, -{28,56,-82}, -{28,56,-81}, -{28,56,-80}, -{28,56,-79}, -{28,56,-78}, -{28,56,-77}, -{28,56,-76}, -{28,56,-75}, -{28,56,-74}, -{28,56,-73}, -{28,56,-72}, -{28,56,-71}, -{28,56,-70}, -{28,56,-69}, -{28,56,-68}, -{28,56,-67}, -{28,56,-66}, -{28,56,-65}, -{28,56,-64}, -{28,56,-63}, -{28,56,-62}, -{28,56,-61}, -{28,56,-60}, -{28,56,-59}, -{28,56,-58}, -{28,56,-57}, -{28,56,-56}, -{28,56,-55}, -{28,56,-54}, -{28,56,-53}, -{28,56,-52}, -{28,56,-51}, -{28,56,-50}, -{28,56,-49}, -{28,56,-48}, -{28,56,-47}, -{28,56,-46}, -{28,56,-45}, -{28,56,-44}, -{28,56,-43}, -{28,56,-42}, -{28,56,-41}, -{28,56,-40}, -{28,56,-39}, -{28,56,-38}, -{28,56,-37}, -{28,56,-36}, -{28,56,-35}, -{28,56,-34}, -{28,56,-33}, -{28,56,-32}, -{28,56,-31}, -{28,56,-30}, -{28,57,-85}, -{28,57,-84}, -{28,57,-83}, -{28,57,-82}, -{28,57,-81}, -{28,57,-80}, -{28,57,-79}, -{28,57,-78}, -{28,57,-77}, -{28,57,-76}, -{28,57,-75}, -{28,57,-74}, -{28,57,-73}, -{28,57,-72}, -{28,57,-71}, -{28,57,-70}, -{28,57,-69}, -{28,57,-68}, -{28,57,-67}, -{28,57,-66}, -{28,57,-65}, -{28,57,-64}, -{28,57,-63}, -{28,57,-62}, -{28,57,-61}, -{28,57,-60}, -{28,57,-59}, -{28,57,-58}, -{28,57,-57}, -{28,57,-56}, -{28,57,-55}, -{28,57,-54}, -{28,57,-53}, -{28,57,-52}, -{28,57,-51}, -{28,57,-50}, -{28,57,-49}, -{28,57,-48}, -{28,57,-47}, -{28,57,-46}, -{28,57,-45}, -{28,57,-44}, -{28,57,-43}, -{28,57,-42}, -{28,57,-41}, -{28,57,-40}, -{28,57,-39}, -{28,57,-38}, -{28,57,-37}, -{28,58,-86}, -{28,58,-85}, -{28,58,-84}, -{28,58,-83}, -{28,58,-82}, -{28,58,-81}, -{28,58,-80}, -{28,58,-79}, -{28,58,-78}, -{28,58,-77}, -{28,58,-76}, -{28,58,-75}, -{28,58,-74}, -{28,58,-73}, -{28,58,-72}, -{28,58,-71}, -{28,58,-70}, -{28,58,-69}, -{28,58,-68}, -{28,58,-67}, -{28,58,-66}, -{28,58,-65}, -{28,58,-64}, -{28,58,-63}, -{28,58,-62}, -{28,58,-61}, -{28,58,-60}, -{28,58,-59}, -{28,58,-58}, -{28,58,-57}, -{28,58,-56}, -{28,58,-55}, -{28,58,-54}, -{28,58,-53}, -{28,58,-52}, -{28,58,-51}, -{28,58,-50}, -{28,58,-49}, -{28,58,-48}, -{28,58,-47}, -{28,58,-46}, -{28,58,-45}, -{28,58,-44}, -{28,58,-43}, -{28,59,-87}, -{28,59,-86}, -{28,59,-85}, -{28,59,-84}, -{28,59,-83}, -{28,59,-82}, -{28,59,-81}, -{28,59,-80}, -{28,59,-79}, -{28,59,-78}, -{28,59,-77}, -{28,59,-76}, -{28,59,-75}, -{28,59,-74}, -{28,59,-73}, -{28,59,-72}, -{28,59,-71}, -{28,59,-70}, -{28,59,-69}, -{28,59,-68}, -{28,59,-67}, -{28,59,-66}, -{28,59,-65}, -{28,59,-64}, -{28,59,-63}, -{28,59,-62}, -{28,59,-61}, -{28,59,-60}, -{28,59,-59}, -{28,59,-58}, -{28,59,-57}, -{28,59,-56}, -{28,59,-55}, -{28,59,-54}, -{28,59,-53}, -{28,59,-52}, -{28,59,-51}, -{28,59,-50}, -{28,59,-49}, -{28,59,-48}, -{28,60,-88}, -{28,60,-87}, -{28,60,-86}, -{28,60,-85}, -{28,60,-84}, -{28,60,-83}, -{28,60,-82}, -{28,60,-81}, -{28,60,-80}, -{28,60,-79}, -{28,60,-78}, -{28,60,-77}, -{28,60,-76}, -{28,60,-75}, -{28,60,-74}, -{28,60,-73}, -{28,60,-72}, -{28,60,-71}, -{28,60,-70}, -{28,60,-69}, -{28,60,-68}, -{28,60,-67}, -{28,60,-66}, -{28,60,-65}, -{28,60,-64}, -{28,60,-63}, -{28,60,-62}, -{28,60,-61}, -{28,60,-60}, -{28,60,-59}, -{28,60,-58}, -{28,60,-57}, -{28,60,-56}, -{28,60,-55}, -{28,60,-54}, -{28,60,-53}, -{28,61,-89}, -{28,61,-88}, -{28,61,-87}, -{28,61,-86}, -{28,61,-85}, -{28,61,-84}, -{28,61,-83}, -{28,61,-82}, -{28,61,-81}, -{28,61,-80}, -{28,61,-79}, -{28,61,-78}, -{28,61,-77}, -{28,61,-76}, -{28,61,-75}, -{28,61,-74}, -{28,61,-73}, -{28,61,-72}, -{28,61,-71}, -{28,61,-70}, -{28,61,-69}, -{28,61,-68}, -{28,61,-67}, -{28,61,-66}, -{28,61,-65}, -{28,61,-64}, -{28,61,-63}, -{28,61,-62}, -{28,61,-61}, -{28,61,-60}, -{28,61,-59}, -{28,61,-58}, -{28,62,-90}, -{28,62,-89}, -{28,62,-88}, -{28,62,-87}, -{28,62,-86}, -{28,62,-85}, -{28,62,-84}, -{28,62,-83}, -{28,62,-82}, -{28,62,-81}, -{28,62,-80}, -{28,62,-79}, -{28,62,-78}, -{28,62,-77}, -{28,62,-76}, -{28,62,-75}, -{28,62,-74}, -{28,62,-73}, -{28,62,-72}, -{28,62,-71}, -{28,62,-70}, -{28,62,-69}, -{28,62,-68}, -{28,62,-67}, -{28,62,-66}, -{28,62,-65}, -{28,62,-64}, -{28,62,-63}, -{28,63,-90}, -{28,63,-89}, -{28,63,-88}, -{28,63,-87}, -{28,63,-86}, -{28,63,-85}, -{28,63,-84}, -{28,63,-83}, -{28,63,-82}, -{28,63,-81}, -{28,63,-80}, -{28,63,-79}, -{28,63,-78}, -{28,63,-77}, -{28,63,-76}, -{28,63,-75}, -{28,63,-74}, -{28,63,-73}, -{28,63,-72}, -{28,63,-71}, -{28,63,-70}, -{28,63,-69}, -{28,63,-68}, -{28,63,-67}, -{28,64,-91}, -{28,64,-90}, -{28,64,-89}, -{28,64,-88}, -{28,64,-87}, -{28,64,-86}, -{28,64,-85}, -{28,64,-84}, -{28,64,-83}, -{28,64,-82}, -{28,64,-81}, -{28,64,-80}, -{28,64,-79}, -{28,64,-78}, -{28,64,-77}, -{28,64,-76}, -{28,64,-75}, -{28,64,-74}, -{28,64,-73}, -{28,64,-72}, -{28,64,-71}, -{28,65,-92}, -{28,65,-91}, -{28,65,-90}, -{28,65,-89}, -{28,65,-88}, -{28,65,-87}, -{28,65,-86}, -{28,65,-85}, -{28,65,-84}, -{28,65,-83}, -{28,65,-82}, -{28,65,-81}, -{28,65,-80}, -{28,65,-79}, -{28,65,-78}, -{28,65,-77}, -{28,65,-76}, -{28,65,-75}, -{28,66,-93}, -{28,66,-92}, -{28,66,-91}, -{28,66,-90}, -{28,66,-89}, -{28,66,-88}, -{28,66,-87}, -{28,66,-86}, -{28,66,-85}, -{28,66,-84}, -{28,66,-83}, -{28,66,-82}, -{28,66,-81}, -{28,66,-80}, -{28,66,-79}, -{28,66,-78}, -{28,67,-94}, -{28,67,-93}, -{28,67,-92}, -{28,67,-91}, -{28,67,-90}, -{28,67,-89}, -{28,67,-88}, -{28,67,-87}, -{28,67,-86}, -{28,67,-85}, -{28,67,-84}, -{28,67,-83}, -{28,67,-82}, -{28,68,-95}, -{28,68,-94}, -{28,68,-93}, -{28,68,-92}, -{28,68,-91}, -{28,68,-90}, -{28,68,-89}, -{28,68,-88}, -{28,68,-87}, -{28,68,-86}, -{28,68,-85}, -{28,69,-95}, -{28,69,-94}, -{28,69,-93}, -{28,69,-92}, -{28,69,-91}, -{28,69,-90}, -{28,69,-89}, -{28,70,-96}, -{28,70,-95}, -{28,70,-94}, -{28,70,-93}, -{28,70,-92}, -{28,71,-97}, -{28,71,-96}, -{28,71,-95}, -{28,72,-98}, -{29,-37,34}, -{29,-37,35}, -{29,-37,36}, -{29,-36,30}, -{29,-36,31}, -{29,-36,32}, -{29,-36,33}, -{29,-36,34}, -{29,-36,35}, -{29,-36,36}, -{29,-35,26}, -{29,-35,27}, -{29,-35,28}, -{29,-35,29}, -{29,-35,30}, -{29,-35,31}, -{29,-35,32}, -{29,-35,33}, -{29,-35,34}, -{29,-35,35}, -{29,-35,36}, -{29,-34,23}, -{29,-34,24}, -{29,-34,25}, -{29,-34,26}, -{29,-34,27}, -{29,-34,28}, -{29,-34,29}, -{29,-34,30}, -{29,-34,31}, -{29,-34,32}, -{29,-34,33}, -{29,-34,34}, -{29,-34,35}, -{29,-34,36}, -{29,-33,20}, -{29,-33,21}, -{29,-33,22}, -{29,-33,23}, -{29,-33,24}, -{29,-33,25}, -{29,-33,26}, -{29,-33,27}, -{29,-33,28}, -{29,-33,29}, -{29,-33,30}, -{29,-33,31}, -{29,-33,32}, -{29,-33,33}, -{29,-33,34}, -{29,-33,35}, -{29,-33,36}, -{29,-32,17}, -{29,-32,18}, -{29,-32,19}, -{29,-32,20}, -{29,-32,21}, -{29,-32,22}, -{29,-32,23}, -{29,-32,24}, -{29,-32,25}, -{29,-32,26}, -{29,-32,27}, -{29,-32,28}, -{29,-32,29}, -{29,-32,30}, -{29,-32,31}, -{29,-32,32}, -{29,-32,33}, -{29,-32,34}, -{29,-32,35}, -{29,-32,36}, -{29,-31,15}, -{29,-31,16}, -{29,-31,17}, -{29,-31,18}, -{29,-31,19}, -{29,-31,20}, -{29,-31,21}, -{29,-31,22}, -{29,-31,23}, -{29,-31,24}, -{29,-31,25}, -{29,-31,26}, -{29,-31,27}, -{29,-31,28}, -{29,-31,29}, -{29,-31,30}, -{29,-31,31}, -{29,-31,32}, -{29,-31,33}, -{29,-31,34}, -{29,-31,35}, -{29,-31,36}, -{29,-30,12}, -{29,-30,13}, -{29,-30,14}, -{29,-30,15}, -{29,-30,16}, -{29,-30,17}, -{29,-30,18}, -{29,-30,19}, -{29,-30,20}, -{29,-30,21}, -{29,-30,22}, -{29,-30,23}, -{29,-30,24}, -{29,-30,25}, -{29,-30,26}, -{29,-30,27}, -{29,-30,28}, -{29,-30,29}, -{29,-30,30}, -{29,-30,31}, -{29,-30,32}, -{29,-30,33}, -{29,-30,34}, -{29,-30,35}, -{29,-30,36}, -{29,-29,10}, -{29,-29,11}, -{29,-29,12}, -{29,-29,13}, -{29,-29,14}, -{29,-29,15}, -{29,-29,16}, -{29,-29,17}, -{29,-29,18}, -{29,-29,19}, -{29,-29,20}, -{29,-29,21}, -{29,-29,22}, -{29,-29,23}, -{29,-29,24}, -{29,-29,25}, -{29,-29,26}, -{29,-29,27}, -{29,-29,28}, -{29,-29,29}, -{29,-29,30}, -{29,-29,31}, -{29,-29,32}, -{29,-29,33}, -{29,-29,34}, -{29,-29,35}, -{29,-29,36}, -{29,-28,8}, -{29,-28,9}, -{29,-28,10}, -{29,-28,11}, -{29,-28,12}, -{29,-28,13}, -{29,-28,14}, -{29,-28,15}, -{29,-28,16}, -{29,-28,17}, -{29,-28,18}, -{29,-28,19}, -{29,-28,20}, -{29,-28,21}, -{29,-28,22}, -{29,-28,23}, -{29,-28,24}, -{29,-28,25}, -{29,-28,26}, -{29,-28,27}, -{29,-28,28}, -{29,-28,29}, -{29,-28,30}, -{29,-28,31}, -{29,-28,32}, -{29,-28,33}, -{29,-28,34}, -{29,-28,35}, -{29,-28,36}, -{29,-27,6}, -{29,-27,7}, -{29,-27,8}, -{29,-27,9}, -{29,-27,10}, -{29,-27,11}, -{29,-27,12}, -{29,-27,13}, -{29,-27,14}, -{29,-27,15}, -{29,-27,16}, -{29,-27,17}, -{29,-27,18}, -{29,-27,19}, -{29,-27,20}, -{29,-27,21}, -{29,-27,22}, -{29,-27,23}, -{29,-27,24}, -{29,-27,25}, -{29,-27,26}, -{29,-27,27}, -{29,-27,28}, -{29,-27,29}, -{29,-27,30}, -{29,-27,31}, -{29,-27,32}, -{29,-27,33}, -{29,-27,34}, -{29,-27,35}, -{29,-27,36}, -{29,-26,4}, -{29,-26,5}, -{29,-26,6}, -{29,-26,7}, -{29,-26,8}, -{29,-26,9}, -{29,-26,10}, -{29,-26,11}, -{29,-26,12}, -{29,-26,13}, -{29,-26,14}, -{29,-26,15}, -{29,-26,16}, -{29,-26,17}, -{29,-26,18}, -{29,-26,19}, -{29,-26,20}, -{29,-26,21}, -{29,-26,22}, -{29,-26,23}, -{29,-26,24}, -{29,-26,25}, -{29,-26,26}, -{29,-26,27}, -{29,-26,28}, -{29,-26,29}, -{29,-26,30}, -{29,-26,31}, -{29,-26,32}, -{29,-26,33}, -{29,-26,34}, -{29,-26,35}, -{29,-26,36}, -{29,-25,2}, -{29,-25,3}, -{29,-25,4}, -{29,-25,5}, -{29,-25,6}, -{29,-25,7}, -{29,-25,8}, -{29,-25,9}, -{29,-25,10}, -{29,-25,11}, -{29,-25,12}, -{29,-25,13}, -{29,-25,14}, -{29,-25,15}, -{29,-25,16}, -{29,-25,17}, -{29,-25,18}, -{29,-25,19}, -{29,-25,20}, -{29,-25,21}, -{29,-25,22}, -{29,-25,23}, -{29,-25,24}, -{29,-25,25}, -{29,-25,26}, -{29,-25,27}, -{29,-25,28}, -{29,-25,29}, -{29,-25,30}, -{29,-25,31}, -{29,-25,32}, -{29,-25,33}, -{29,-25,34}, -{29,-25,35}, -{29,-25,36}, -{29,-24,1}, -{29,-24,2}, -{29,-24,3}, -{29,-24,4}, -{29,-24,5}, -{29,-24,6}, -{29,-24,7}, -{29,-24,8}, -{29,-24,9}, -{29,-24,10}, -{29,-24,11}, -{29,-24,12}, -{29,-24,13}, -{29,-24,14}, -{29,-24,15}, -{29,-24,16}, -{29,-24,17}, -{29,-24,18}, -{29,-24,19}, -{29,-24,20}, -{29,-24,21}, -{29,-24,22}, -{29,-24,23}, -{29,-24,24}, -{29,-24,25}, -{29,-24,26}, -{29,-24,27}, -{29,-24,28}, -{29,-24,29}, -{29,-24,30}, -{29,-24,31}, -{29,-24,32}, -{29,-24,33}, -{29,-24,34}, -{29,-24,35}, -{29,-24,36}, -{29,-23,-1}, -{29,-23,0}, -{29,-23,1}, -{29,-23,2}, -{29,-23,3}, -{29,-23,4}, -{29,-23,5}, -{29,-23,6}, -{29,-23,7}, -{29,-23,8}, -{29,-23,9}, -{29,-23,10}, -{29,-23,11}, -{29,-23,12}, -{29,-23,13}, -{29,-23,14}, -{29,-23,15}, -{29,-23,16}, -{29,-23,17}, -{29,-23,18}, -{29,-23,19}, -{29,-23,20}, -{29,-23,21}, -{29,-23,22}, -{29,-23,23}, -{29,-23,24}, -{29,-23,25}, -{29,-23,26}, -{29,-23,27}, -{29,-23,28}, -{29,-23,29}, -{29,-23,30}, -{29,-23,31}, -{29,-23,32}, -{29,-23,33}, -{29,-23,34}, -{29,-23,35}, -{29,-23,36}, -{29,-22,-3}, -{29,-22,-2}, -{29,-22,-1}, -{29,-22,0}, -{29,-22,1}, -{29,-22,2}, -{29,-22,3}, -{29,-22,4}, -{29,-22,5}, -{29,-22,6}, -{29,-22,7}, -{29,-22,8}, -{29,-22,9}, -{29,-22,10}, -{29,-22,11}, -{29,-22,12}, -{29,-22,13}, -{29,-22,14}, -{29,-22,15}, -{29,-22,16}, -{29,-22,17}, -{29,-22,18}, -{29,-22,19}, -{29,-22,20}, -{29,-22,21}, -{29,-22,22}, -{29,-22,23}, -{29,-22,24}, -{29,-22,25}, -{29,-22,26}, -{29,-22,27}, -{29,-22,28}, -{29,-22,29}, -{29,-22,30}, -{29,-22,31}, -{29,-22,32}, -{29,-22,33}, -{29,-22,34}, -{29,-22,35}, -{29,-22,36}, -{29,-21,-4}, -{29,-21,-3}, -{29,-21,-2}, -{29,-21,-1}, -{29,-21,0}, -{29,-21,1}, -{29,-21,2}, -{29,-21,3}, -{29,-21,4}, -{29,-21,5}, -{29,-21,6}, -{29,-21,7}, -{29,-21,8}, -{29,-21,9}, -{29,-21,10}, -{29,-21,11}, -{29,-21,12}, -{29,-21,13}, -{29,-21,14}, -{29,-21,15}, -{29,-21,16}, -{29,-21,17}, -{29,-21,18}, -{29,-21,19}, -{29,-21,20}, -{29,-21,21}, -{29,-21,22}, -{29,-21,23}, -{29,-21,24}, -{29,-21,25}, -{29,-21,26}, -{29,-21,27}, -{29,-21,28}, -{29,-21,29}, -{29,-21,30}, -{29,-21,31}, -{29,-21,32}, -{29,-21,33}, -{29,-21,34}, -{29,-21,35}, -{29,-21,36}, -{29,-21,37}, -{29,-20,-6}, -{29,-20,-5}, -{29,-20,-4}, -{29,-20,-3}, -{29,-20,-2}, -{29,-20,-1}, -{29,-20,0}, -{29,-20,1}, -{29,-20,2}, -{29,-20,3}, -{29,-20,4}, -{29,-20,5}, -{29,-20,6}, -{29,-20,7}, -{29,-20,8}, -{29,-20,9}, -{29,-20,10}, -{29,-20,11}, -{29,-20,12}, -{29,-20,13}, -{29,-20,14}, -{29,-20,15}, -{29,-20,16}, -{29,-20,17}, -{29,-20,18}, -{29,-20,19}, -{29,-20,20}, -{29,-20,21}, -{29,-20,22}, -{29,-20,23}, -{29,-20,24}, -{29,-20,25}, -{29,-20,26}, -{29,-20,27}, -{29,-20,28}, -{29,-20,29}, -{29,-20,30}, -{29,-20,31}, -{29,-20,32}, -{29,-20,33}, -{29,-20,34}, -{29,-20,35}, -{29,-20,36}, -{29,-20,37}, -{29,-19,-8}, -{29,-19,-7}, -{29,-19,-6}, -{29,-19,-5}, -{29,-19,-4}, -{29,-19,-3}, -{29,-19,-2}, -{29,-19,-1}, -{29,-19,0}, -{29,-19,1}, -{29,-19,2}, -{29,-19,3}, -{29,-19,4}, -{29,-19,5}, -{29,-19,6}, -{29,-19,7}, -{29,-19,8}, -{29,-19,9}, -{29,-19,10}, -{29,-19,11}, -{29,-19,12}, -{29,-19,13}, -{29,-19,14}, -{29,-19,15}, -{29,-19,16}, -{29,-19,17}, -{29,-19,18}, -{29,-19,19}, -{29,-19,20}, -{29,-19,21}, -{29,-19,22}, -{29,-19,23}, -{29,-19,24}, -{29,-19,25}, -{29,-19,26}, -{29,-19,27}, -{29,-19,28}, -{29,-19,29}, -{29,-19,30}, -{29,-19,31}, -{29,-19,32}, -{29,-19,33}, -{29,-19,34}, -{29,-19,35}, -{29,-19,36}, -{29,-19,37}, -{29,-18,-9}, -{29,-18,-8}, -{29,-18,-7}, -{29,-18,-6}, -{29,-18,-5}, -{29,-18,-4}, -{29,-18,-3}, -{29,-18,-2}, -{29,-18,-1}, -{29,-18,0}, -{29,-18,1}, -{29,-18,2}, -{29,-18,3}, -{29,-18,4}, -{29,-18,5}, -{29,-18,6}, -{29,-18,7}, -{29,-18,8}, -{29,-18,9}, -{29,-18,10}, -{29,-18,11}, -{29,-18,12}, -{29,-18,13}, -{29,-18,14}, -{29,-18,15}, -{29,-18,16}, -{29,-18,17}, -{29,-18,18}, -{29,-18,19}, -{29,-18,20}, -{29,-18,21}, -{29,-18,22}, -{29,-18,23}, -{29,-18,24}, -{29,-18,25}, -{29,-18,26}, -{29,-18,27}, -{29,-18,28}, -{29,-18,29}, -{29,-18,30}, -{29,-18,31}, -{29,-18,32}, -{29,-18,33}, -{29,-18,34}, -{29,-18,35}, -{29,-18,36}, -{29,-18,37}, -{29,-17,-11}, -{29,-17,-10}, -{29,-17,-9}, -{29,-17,-8}, -{29,-17,-7}, -{29,-17,-6}, -{29,-17,-5}, -{29,-17,-4}, -{29,-17,-3}, -{29,-17,-2}, -{29,-17,-1}, -{29,-17,0}, -{29,-17,1}, -{29,-17,2}, -{29,-17,3}, -{29,-17,4}, -{29,-17,5}, -{29,-17,6}, -{29,-17,7}, -{29,-17,8}, -{29,-17,9}, -{29,-17,10}, -{29,-17,11}, -{29,-17,12}, -{29,-17,13}, -{29,-17,14}, -{29,-17,15}, -{29,-17,16}, -{29,-17,17}, -{29,-17,18}, -{29,-17,19}, -{29,-17,20}, -{29,-17,21}, -{29,-17,22}, -{29,-17,23}, -{29,-17,24}, -{29,-17,25}, -{29,-17,26}, -{29,-17,27}, -{29,-17,28}, -{29,-17,29}, -{29,-17,30}, -{29,-17,31}, -{29,-17,32}, -{29,-17,33}, -{29,-17,34}, -{29,-17,35}, -{29,-17,36}, -{29,-17,37}, -{29,-16,-12}, -{29,-16,-11}, -{29,-16,-10}, -{29,-16,-9}, -{29,-16,-8}, -{29,-16,-7}, -{29,-16,-6}, -{29,-16,-5}, -{29,-16,-4}, -{29,-16,-3}, -{29,-16,-2}, -{29,-16,-1}, -{29,-16,0}, -{29,-16,1}, -{29,-16,2}, -{29,-16,3}, -{29,-16,4}, -{29,-16,5}, -{29,-16,6}, -{29,-16,7}, -{29,-16,8}, -{29,-16,9}, -{29,-16,10}, -{29,-16,11}, -{29,-16,12}, -{29,-16,13}, -{29,-16,14}, -{29,-16,15}, -{29,-16,16}, -{29,-16,17}, -{29,-16,18}, -{29,-16,19}, -{29,-16,20}, -{29,-16,21}, -{29,-16,22}, -{29,-16,23}, -{29,-16,24}, -{29,-16,25}, -{29,-16,26}, -{29,-16,27}, -{29,-16,28}, -{29,-16,29}, -{29,-16,30}, -{29,-16,31}, -{29,-16,32}, -{29,-16,33}, -{29,-16,34}, -{29,-16,35}, -{29,-16,36}, -{29,-16,37}, -{29,-15,-13}, -{29,-15,-12}, -{29,-15,-11}, -{29,-15,-10}, -{29,-15,-9}, -{29,-15,-8}, -{29,-15,-7}, -{29,-15,-6}, -{29,-15,-5}, -{29,-15,-4}, -{29,-15,-3}, -{29,-15,-2}, -{29,-15,-1}, -{29,-15,0}, -{29,-15,1}, -{29,-15,2}, -{29,-15,3}, -{29,-15,4}, -{29,-15,5}, -{29,-15,6}, -{29,-15,7}, -{29,-15,8}, -{29,-15,9}, -{29,-15,10}, -{29,-15,11}, -{29,-15,12}, -{29,-15,13}, -{29,-15,14}, -{29,-15,15}, -{29,-15,16}, -{29,-15,17}, -{29,-15,18}, -{29,-15,19}, -{29,-15,20}, -{29,-15,21}, -{29,-15,22}, -{29,-15,23}, -{29,-15,24}, -{29,-15,25}, -{29,-15,26}, -{29,-15,27}, -{29,-15,28}, -{29,-15,29}, -{29,-15,30}, -{29,-15,31}, -{29,-15,32}, -{29,-15,33}, -{29,-15,34}, -{29,-15,35}, -{29,-15,36}, -{29,-15,37}, -{29,-14,-15}, -{29,-14,-14}, -{29,-14,-13}, -{29,-14,-12}, -{29,-14,-11}, -{29,-14,-10}, -{29,-14,-9}, -{29,-14,-8}, -{29,-14,-7}, -{29,-14,-6}, -{29,-14,-5}, -{29,-14,-4}, -{29,-14,-3}, -{29,-14,-2}, -{29,-14,-1}, -{29,-14,0}, -{29,-14,1}, -{29,-14,2}, -{29,-14,3}, -{29,-14,4}, -{29,-14,5}, -{29,-14,6}, -{29,-14,7}, -{29,-14,8}, -{29,-14,9}, -{29,-14,10}, -{29,-14,11}, -{29,-14,12}, -{29,-14,13}, -{29,-14,14}, -{29,-14,15}, -{29,-14,16}, -{29,-14,17}, -{29,-14,18}, -{29,-14,19}, -{29,-14,20}, -{29,-14,21}, -{29,-14,22}, -{29,-14,23}, -{29,-14,24}, -{29,-14,25}, -{29,-14,26}, -{29,-14,27}, -{29,-14,28}, -{29,-14,29}, -{29,-14,30}, -{29,-14,31}, -{29,-14,32}, -{29,-14,33}, -{29,-14,34}, -{29,-14,35}, -{29,-14,36}, -{29,-14,37}, -{29,-13,-16}, -{29,-13,-15}, -{29,-13,-14}, -{29,-13,-13}, -{29,-13,-12}, -{29,-13,-11}, -{29,-13,-10}, -{29,-13,-9}, -{29,-13,-8}, -{29,-13,-7}, -{29,-13,-6}, -{29,-13,-5}, -{29,-13,-4}, -{29,-13,-3}, -{29,-13,-2}, -{29,-13,-1}, -{29,-13,0}, -{29,-13,1}, -{29,-13,2}, -{29,-13,3}, -{29,-13,4}, -{29,-13,5}, -{29,-13,6}, -{29,-13,7}, -{29,-13,8}, -{29,-13,9}, -{29,-13,10}, -{29,-13,11}, -{29,-13,12}, -{29,-13,13}, -{29,-13,14}, -{29,-13,15}, -{29,-13,16}, -{29,-13,17}, -{29,-13,18}, -{29,-13,19}, -{29,-13,20}, -{29,-13,21}, -{29,-13,22}, -{29,-13,23}, -{29,-13,24}, -{29,-13,25}, -{29,-13,26}, -{29,-13,27}, -{29,-13,28}, -{29,-13,29}, -{29,-13,30}, -{29,-13,31}, -{29,-13,32}, -{29,-13,33}, -{29,-13,34}, -{29,-13,35}, -{29,-13,36}, -{29,-13,37}, -{29,-12,-17}, -{29,-12,-16}, -{29,-12,-15}, -{29,-12,-14}, -{29,-12,-13}, -{29,-12,-12}, -{29,-12,-11}, -{29,-12,-10}, -{29,-12,-9}, -{29,-12,-8}, -{29,-12,-7}, -{29,-12,-6}, -{29,-12,-5}, -{29,-12,-4}, -{29,-12,-3}, -{29,-12,-2}, -{29,-12,-1}, -{29,-12,0}, -{29,-12,1}, -{29,-12,2}, -{29,-12,3}, -{29,-12,4}, -{29,-12,5}, -{29,-12,6}, -{29,-12,7}, -{29,-12,8}, -{29,-12,9}, -{29,-12,10}, -{29,-12,11}, -{29,-12,12}, -{29,-12,13}, -{29,-12,14}, -{29,-12,15}, -{29,-12,16}, -{29,-12,17}, -{29,-12,18}, -{29,-12,19}, -{29,-12,20}, -{29,-12,21}, -{29,-12,22}, -{29,-12,23}, -{29,-12,24}, -{29,-12,25}, -{29,-12,26}, -{29,-12,27}, -{29,-12,28}, -{29,-12,29}, -{29,-12,30}, -{29,-12,31}, -{29,-12,32}, -{29,-12,33}, -{29,-12,34}, -{29,-12,35}, -{29,-12,36}, -{29,-12,37}, -{29,-11,-19}, -{29,-11,-18}, -{29,-11,-17}, -{29,-11,-16}, -{29,-11,-15}, -{29,-11,-14}, -{29,-11,-13}, -{29,-11,-12}, -{29,-11,-11}, -{29,-11,-10}, -{29,-11,-9}, -{29,-11,-8}, -{29,-11,-7}, -{29,-11,-6}, -{29,-11,-5}, -{29,-11,-4}, -{29,-11,-3}, -{29,-11,-2}, -{29,-11,-1}, -{29,-11,0}, -{29,-11,1}, -{29,-11,2}, -{29,-11,3}, -{29,-11,4}, -{29,-11,5}, -{29,-11,6}, -{29,-11,7}, -{29,-11,8}, -{29,-11,9}, -{29,-11,10}, -{29,-11,11}, -{29,-11,12}, -{29,-11,13}, -{29,-11,14}, -{29,-11,15}, -{29,-11,16}, -{29,-11,17}, -{29,-11,18}, -{29,-11,19}, -{29,-11,20}, -{29,-11,21}, -{29,-11,22}, -{29,-11,23}, -{29,-11,24}, -{29,-11,25}, -{29,-11,26}, -{29,-11,27}, -{29,-11,28}, -{29,-11,29}, -{29,-11,30}, -{29,-11,31}, -{29,-11,32}, -{29,-11,33}, -{29,-11,34}, -{29,-11,35}, -{29,-11,36}, -{29,-11,37}, -{29,-10,-20}, -{29,-10,-19}, -{29,-10,-18}, -{29,-10,-17}, -{29,-10,-16}, -{29,-10,-15}, -{29,-10,-14}, -{29,-10,-13}, -{29,-10,-12}, -{29,-10,-11}, -{29,-10,-10}, -{29,-10,-9}, -{29,-10,-8}, -{29,-10,-7}, -{29,-10,-6}, -{29,-10,-5}, -{29,-10,-4}, -{29,-10,-3}, -{29,-10,-2}, -{29,-10,-1}, -{29,-10,0}, -{29,-10,1}, -{29,-10,2}, -{29,-10,3}, -{29,-10,4}, -{29,-10,5}, -{29,-10,6}, -{29,-10,7}, -{29,-10,8}, -{29,-10,9}, -{29,-10,10}, -{29,-10,11}, -{29,-10,12}, -{29,-10,13}, -{29,-10,14}, -{29,-10,15}, -{29,-10,16}, -{29,-10,17}, -{29,-10,18}, -{29,-10,19}, -{29,-10,20}, -{29,-10,21}, -{29,-10,22}, -{29,-10,23}, -{29,-10,24}, -{29,-10,25}, -{29,-10,26}, -{29,-10,27}, -{29,-10,28}, -{29,-10,29}, -{29,-10,30}, -{29,-10,31}, -{29,-10,32}, -{29,-10,33}, -{29,-10,34}, -{29,-10,35}, -{29,-10,36}, -{29,-10,37}, -{29,-9,-21}, -{29,-9,-20}, -{29,-9,-19}, -{29,-9,-18}, -{29,-9,-17}, -{29,-9,-16}, -{29,-9,-15}, -{29,-9,-14}, -{29,-9,-13}, -{29,-9,-12}, -{29,-9,-11}, -{29,-9,-10}, -{29,-9,-9}, -{29,-9,-8}, -{29,-9,-7}, -{29,-9,-6}, -{29,-9,-5}, -{29,-9,-4}, -{29,-9,-3}, -{29,-9,-2}, -{29,-9,-1}, -{29,-9,0}, -{29,-9,1}, -{29,-9,2}, -{29,-9,3}, -{29,-9,4}, -{29,-9,5}, -{29,-9,6}, -{29,-9,7}, -{29,-9,8}, -{29,-9,9}, -{29,-9,10}, -{29,-9,11}, -{29,-9,12}, -{29,-9,13}, -{29,-9,14}, -{29,-9,15}, -{29,-9,16}, -{29,-9,17}, -{29,-9,18}, -{29,-9,19}, -{29,-9,20}, -{29,-9,21}, -{29,-9,22}, -{29,-9,23}, -{29,-9,24}, -{29,-9,25}, -{29,-9,26}, -{29,-9,27}, -{29,-9,28}, -{29,-9,29}, -{29,-9,30}, -{29,-9,31}, -{29,-9,32}, -{29,-9,33}, -{29,-9,34}, -{29,-9,35}, -{29,-9,36}, -{29,-9,37}, -{29,-8,-23}, -{29,-8,-22}, -{29,-8,-21}, -{29,-8,-20}, -{29,-8,-19}, -{29,-8,-18}, -{29,-8,-17}, -{29,-8,-16}, -{29,-8,-15}, -{29,-8,-14}, -{29,-8,-13}, -{29,-8,-12}, -{29,-8,-11}, -{29,-8,-10}, -{29,-8,-9}, -{29,-8,-8}, -{29,-8,-7}, -{29,-8,-6}, -{29,-8,-5}, -{29,-8,-4}, -{29,-8,-3}, -{29,-8,-2}, -{29,-8,-1}, -{29,-8,0}, -{29,-8,1}, -{29,-8,2}, -{29,-8,3}, -{29,-8,4}, -{29,-8,5}, -{29,-8,6}, -{29,-8,7}, -{29,-8,8}, -{29,-8,9}, -{29,-8,10}, -{29,-8,11}, -{29,-8,12}, -{29,-8,13}, -{29,-8,14}, -{29,-8,15}, -{29,-8,16}, -{29,-8,17}, -{29,-8,18}, -{29,-8,19}, -{29,-8,20}, -{29,-8,21}, -{29,-8,22}, -{29,-8,23}, -{29,-8,24}, -{29,-8,25}, -{29,-8,26}, -{29,-8,27}, -{29,-8,28}, -{29,-8,29}, -{29,-8,30}, -{29,-8,31}, -{29,-8,32}, -{29,-8,33}, -{29,-8,34}, -{29,-8,35}, -{29,-8,36}, -{29,-8,37}, -{29,-7,-24}, -{29,-7,-23}, -{29,-7,-22}, -{29,-7,-21}, -{29,-7,-20}, -{29,-7,-19}, -{29,-7,-18}, -{29,-7,-17}, -{29,-7,-16}, -{29,-7,-15}, -{29,-7,-14}, -{29,-7,-13}, -{29,-7,-12}, -{29,-7,-11}, -{29,-7,-10}, -{29,-7,-9}, -{29,-7,-8}, -{29,-7,-7}, -{29,-7,-6}, -{29,-7,-5}, -{29,-7,-4}, -{29,-7,-3}, -{29,-7,-2}, -{29,-7,-1}, -{29,-7,0}, -{29,-7,1}, -{29,-7,2}, -{29,-7,3}, -{29,-7,4}, -{29,-7,5}, -{29,-7,6}, -{29,-7,7}, -{29,-7,8}, -{29,-7,9}, -{29,-7,10}, -{29,-7,11}, -{29,-7,12}, -{29,-7,13}, -{29,-7,14}, -{29,-7,15}, -{29,-7,16}, -{29,-7,17}, -{29,-7,18}, -{29,-7,19}, -{29,-7,20}, -{29,-7,21}, -{29,-7,22}, -{29,-7,23}, -{29,-7,24}, -{29,-7,25}, -{29,-7,26}, -{29,-7,27}, -{29,-7,28}, -{29,-7,29}, -{29,-7,30}, -{29,-7,31}, -{29,-7,32}, -{29,-7,33}, -{29,-7,34}, -{29,-7,35}, -{29,-7,36}, -{29,-7,37}, -{29,-6,-25}, -{29,-6,-24}, -{29,-6,-23}, -{29,-6,-22}, -{29,-6,-21}, -{29,-6,-20}, -{29,-6,-19}, -{29,-6,-18}, -{29,-6,-17}, -{29,-6,-16}, -{29,-6,-15}, -{29,-6,-14}, -{29,-6,-13}, -{29,-6,-12}, -{29,-6,-11}, -{29,-6,-10}, -{29,-6,-9}, -{29,-6,-8}, -{29,-6,-7}, -{29,-6,-6}, -{29,-6,-5}, -{29,-6,-4}, -{29,-6,-3}, -{29,-6,-2}, -{29,-6,-1}, -{29,-6,0}, -{29,-6,1}, -{29,-6,2}, -{29,-6,3}, -{29,-6,4}, -{29,-6,5}, -{29,-6,6}, -{29,-6,7}, -{29,-6,8}, -{29,-6,9}, -{29,-6,10}, -{29,-6,11}, -{29,-6,12}, -{29,-6,13}, -{29,-6,14}, -{29,-6,15}, -{29,-6,16}, -{29,-6,17}, -{29,-6,18}, -{29,-6,19}, -{29,-6,20}, -{29,-6,21}, -{29,-6,22}, -{29,-6,23}, -{29,-6,24}, -{29,-6,25}, -{29,-6,26}, -{29,-6,27}, -{29,-6,28}, -{29,-6,29}, -{29,-6,30}, -{29,-6,31}, -{29,-6,32}, -{29,-6,33}, -{29,-6,34}, -{29,-6,35}, -{29,-6,36}, -{29,-6,37}, -{29,-5,-26}, -{29,-5,-25}, -{29,-5,-24}, -{29,-5,-23}, -{29,-5,-22}, -{29,-5,-21}, -{29,-5,-20}, -{29,-5,-19}, -{29,-5,-18}, -{29,-5,-17}, -{29,-5,-16}, -{29,-5,-15}, -{29,-5,-14}, -{29,-5,-13}, -{29,-5,-12}, -{29,-5,-11}, -{29,-5,-10}, -{29,-5,-9}, -{29,-5,-8}, -{29,-5,-7}, -{29,-5,-6}, -{29,-5,-5}, -{29,-5,-4}, -{29,-5,-3}, -{29,-5,-2}, -{29,-5,-1}, -{29,-5,0}, -{29,-5,1}, -{29,-5,2}, -{29,-5,3}, -{29,-5,4}, -{29,-5,5}, -{29,-5,6}, -{29,-5,7}, -{29,-5,8}, -{29,-5,9}, -{29,-5,10}, -{29,-5,11}, -{29,-5,12}, -{29,-5,13}, -{29,-5,14}, -{29,-5,15}, -{29,-5,16}, -{29,-5,17}, -{29,-5,18}, -{29,-5,19}, -{29,-5,20}, -{29,-5,21}, -{29,-5,22}, -{29,-5,23}, -{29,-5,24}, -{29,-5,25}, -{29,-5,26}, -{29,-5,27}, -{29,-5,28}, -{29,-5,29}, -{29,-5,30}, -{29,-5,31}, -{29,-5,32}, -{29,-5,33}, -{29,-5,34}, -{29,-5,35}, -{29,-5,36}, -{29,-5,37}, -{29,-4,-27}, -{29,-4,-26}, -{29,-4,-25}, -{29,-4,-24}, -{29,-4,-23}, -{29,-4,-22}, -{29,-4,-21}, -{29,-4,-20}, -{29,-4,-19}, -{29,-4,-18}, -{29,-4,-17}, -{29,-4,-16}, -{29,-4,-15}, -{29,-4,-14}, -{29,-4,-13}, -{29,-4,-12}, -{29,-4,-11}, -{29,-4,-10}, -{29,-4,-9}, -{29,-4,-8}, -{29,-4,-7}, -{29,-4,-6}, -{29,-4,-5}, -{29,-4,-4}, -{29,-4,-3}, -{29,-4,-2}, -{29,-4,-1}, -{29,-4,0}, -{29,-4,1}, -{29,-4,2}, -{29,-4,3}, -{29,-4,4}, -{29,-4,5}, -{29,-4,6}, -{29,-4,7}, -{29,-4,8}, -{29,-4,9}, -{29,-4,10}, -{29,-4,11}, -{29,-4,12}, -{29,-4,13}, -{29,-4,14}, -{29,-4,15}, -{29,-4,16}, -{29,-4,17}, -{29,-4,18}, -{29,-4,19}, -{29,-4,20}, -{29,-4,21}, -{29,-4,22}, -{29,-4,23}, -{29,-4,24}, -{29,-4,25}, -{29,-4,26}, -{29,-4,27}, -{29,-4,28}, -{29,-4,29}, -{29,-4,30}, -{29,-4,31}, -{29,-4,32}, -{29,-4,33}, -{29,-4,34}, -{29,-4,35}, -{29,-4,36}, -{29,-4,37}, -{29,-3,-29}, -{29,-3,-28}, -{29,-3,-27}, -{29,-3,-26}, -{29,-3,-25}, -{29,-3,-24}, -{29,-3,-23}, -{29,-3,-22}, -{29,-3,-21}, -{29,-3,-20}, -{29,-3,-19}, -{29,-3,-18}, -{29,-3,-17}, -{29,-3,-16}, -{29,-3,-15}, -{29,-3,-14}, -{29,-3,-13}, -{29,-3,-12}, -{29,-3,-11}, -{29,-3,-10}, -{29,-3,-9}, -{29,-3,-8}, -{29,-3,-7}, -{29,-3,-6}, -{29,-3,-5}, -{29,-3,-4}, -{29,-3,-3}, -{29,-3,-2}, -{29,-3,-1}, -{29,-3,0}, -{29,-3,1}, -{29,-3,2}, -{29,-3,3}, -{29,-3,4}, -{29,-3,5}, -{29,-3,6}, -{29,-3,7}, -{29,-3,8}, -{29,-3,9}, -{29,-3,10}, -{29,-3,11}, -{29,-3,12}, -{29,-3,13}, -{29,-3,14}, -{29,-3,15}, -{29,-3,16}, -{29,-3,17}, -{29,-3,18}, -{29,-3,19}, -{29,-3,20}, -{29,-3,21}, -{29,-3,22}, -{29,-3,23}, -{29,-3,24}, -{29,-3,25}, -{29,-3,26}, -{29,-3,27}, -{29,-3,28}, -{29,-3,29}, -{29,-3,30}, -{29,-3,31}, -{29,-3,32}, -{29,-3,33}, -{29,-3,34}, -{29,-3,35}, -{29,-3,36}, -{29,-3,37}, -{29,-3,38}, -{29,-2,-30}, -{29,-2,-29}, -{29,-2,-28}, -{29,-2,-27}, -{29,-2,-26}, -{29,-2,-25}, -{29,-2,-24}, -{29,-2,-23}, -{29,-2,-22}, -{29,-2,-21}, -{29,-2,-20}, -{29,-2,-19}, -{29,-2,-18}, -{29,-2,-17}, -{29,-2,-16}, -{29,-2,-15}, -{29,-2,-14}, -{29,-2,-13}, -{29,-2,-12}, -{29,-2,-11}, -{29,-2,-10}, -{29,-2,-9}, -{29,-2,-8}, -{29,-2,-7}, -{29,-2,-6}, -{29,-2,-5}, -{29,-2,-4}, -{29,-2,-3}, -{29,-2,-2}, -{29,-2,-1}, -{29,-2,0}, -{29,-2,1}, -{29,-2,2}, -{29,-2,3}, -{29,-2,4}, -{29,-2,5}, -{29,-2,6}, -{29,-2,7}, -{29,-2,8}, -{29,-2,9}, -{29,-2,10}, -{29,-2,11}, -{29,-2,12}, -{29,-2,13}, -{29,-2,14}, -{29,-2,15}, -{29,-2,16}, -{29,-2,17}, -{29,-2,18}, -{29,-2,19}, -{29,-2,20}, -{29,-2,21}, -{29,-2,22}, -{29,-2,23}, -{29,-2,24}, -{29,-2,25}, -{29,-2,26}, -{29,-2,27}, -{29,-2,28}, -{29,-2,29}, -{29,-2,30}, -{29,-2,31}, -{29,-2,32}, -{29,-2,33}, -{29,-2,34}, -{29,-2,35}, -{29,-2,36}, -{29,-2,37}, -{29,-2,38}, -{29,-1,-31}, -{29,-1,-30}, -{29,-1,-29}, -{29,-1,-28}, -{29,-1,-27}, -{29,-1,-26}, -{29,-1,-25}, -{29,-1,-24}, -{29,-1,-23}, -{29,-1,-22}, -{29,-1,-21}, -{29,-1,-20}, -{29,-1,-19}, -{29,-1,-18}, -{29,-1,-17}, -{29,-1,-16}, -{29,-1,-15}, -{29,-1,-14}, -{29,-1,-13}, -{29,-1,-12}, -{29,-1,-11}, -{29,-1,-10}, -{29,-1,-9}, -{29,-1,-8}, -{29,-1,-7}, -{29,-1,-6}, -{29,-1,-5}, -{29,-1,-4}, -{29,-1,-3}, -{29,-1,-2}, -{29,-1,-1}, -{29,-1,0}, -{29,-1,1}, -{29,-1,2}, -{29,-1,3}, -{29,-1,4}, -{29,-1,5}, -{29,-1,6}, -{29,-1,7}, -{29,-1,8}, -{29,-1,9}, -{29,-1,10}, -{29,-1,11}, -{29,-1,12}, -{29,-1,13}, -{29,-1,14}, -{29,-1,15}, -{29,-1,16}, -{29,-1,17}, -{29,-1,18}, -{29,-1,19}, -{29,-1,20}, -{29,-1,21}, -{29,-1,22}, -{29,-1,23}, -{29,-1,24}, -{29,-1,25}, -{29,-1,26}, -{29,-1,27}, -{29,-1,28}, -{29,-1,29}, -{29,-1,30}, -{29,-1,31}, -{29,-1,32}, -{29,-1,33}, -{29,-1,34}, -{29,-1,35}, -{29,-1,36}, -{29,-1,37}, -{29,-1,38}, -{29,0,-32}, -{29,0,-31}, -{29,0,-30}, -{29,0,-29}, -{29,0,-28}, -{29,0,-27}, -{29,0,-26}, -{29,0,-25}, -{29,0,-24}, -{29,0,-23}, -{29,0,-22}, -{29,0,-21}, -{29,0,-20}, -{29,0,-19}, -{29,0,-18}, -{29,0,-17}, -{29,0,-16}, -{29,0,-15}, -{29,0,-14}, -{29,0,-13}, -{29,0,-12}, -{29,0,-11}, -{29,0,-10}, -{29,0,-9}, -{29,0,-8}, -{29,0,-7}, -{29,0,-6}, -{29,0,-5}, -{29,0,-4}, -{29,0,-3}, -{29,0,-2}, -{29,0,-1}, -{29,0,0}, -{29,0,1}, -{29,0,2}, -{29,0,3}, -{29,0,4}, -{29,0,5}, -{29,0,6}, -{29,0,7}, -{29,0,8}, -{29,0,9}, -{29,0,10}, -{29,0,11}, -{29,0,12}, -{29,0,13}, -{29,0,14}, -{29,0,15}, -{29,0,16}, -{29,0,17}, -{29,0,18}, -{29,0,19}, -{29,0,20}, -{29,0,21}, -{29,0,22}, -{29,0,23}, -{29,0,24}, -{29,0,25}, -{29,0,26}, -{29,0,27}, -{29,0,28}, -{29,0,29}, -{29,0,30}, -{29,0,31}, -{29,0,32}, -{29,0,33}, -{29,0,34}, -{29,0,35}, -{29,0,36}, -{29,0,37}, -{29,0,38}, -{29,1,-33}, -{29,1,-32}, -{29,1,-31}, -{29,1,-30}, -{29,1,-29}, -{29,1,-28}, -{29,1,-27}, -{29,1,-26}, -{29,1,-25}, -{29,1,-24}, -{29,1,-23}, -{29,1,-22}, -{29,1,-21}, -{29,1,-20}, -{29,1,-19}, -{29,1,-18}, -{29,1,-17}, -{29,1,-16}, -{29,1,-15}, -{29,1,-14}, -{29,1,-13}, -{29,1,-12}, -{29,1,-11}, -{29,1,-10}, -{29,1,-9}, -{29,1,-8}, -{29,1,-7}, -{29,1,-6}, -{29,1,-5}, -{29,1,-4}, -{29,1,-3}, -{29,1,-2}, -{29,1,-1}, -{29,1,0}, -{29,1,1}, -{29,1,2}, -{29,1,3}, -{29,1,4}, -{29,1,5}, -{29,1,6}, -{29,1,7}, -{29,1,8}, -{29,1,9}, -{29,1,10}, -{29,1,11}, -{29,1,12}, -{29,1,13}, -{29,1,14}, -{29,1,15}, -{29,1,16}, -{29,1,17}, -{29,1,18}, -{29,1,19}, -{29,1,20}, -{29,1,21}, -{29,1,22}, -{29,1,23}, -{29,1,24}, -{29,1,25}, -{29,1,26}, -{29,1,27}, -{29,1,28}, -{29,1,29}, -{29,1,30}, -{29,1,31}, -{29,1,32}, -{29,1,33}, -{29,1,34}, -{29,1,35}, -{29,1,36}, -{29,1,37}, -{29,1,38}, -{29,2,-34}, -{29,2,-33}, -{29,2,-32}, -{29,2,-31}, -{29,2,-30}, -{29,2,-29}, -{29,2,-28}, -{29,2,-27}, -{29,2,-26}, -{29,2,-25}, -{29,2,-24}, -{29,2,-23}, -{29,2,-22}, -{29,2,-21}, -{29,2,-20}, -{29,2,-19}, -{29,2,-18}, -{29,2,-17}, -{29,2,-16}, -{29,2,-15}, -{29,2,-14}, -{29,2,-13}, -{29,2,-12}, -{29,2,-11}, -{29,2,-10}, -{29,2,-9}, -{29,2,-8}, -{29,2,-7}, -{29,2,-6}, -{29,2,-5}, -{29,2,-4}, -{29,2,-3}, -{29,2,-2}, -{29,2,-1}, -{29,2,0}, -{29,2,1}, -{29,2,2}, -{29,2,3}, -{29,2,4}, -{29,2,5}, -{29,2,6}, -{29,2,7}, -{29,2,8}, -{29,2,9}, -{29,2,10}, -{29,2,11}, -{29,2,12}, -{29,2,13}, -{29,2,14}, -{29,2,15}, -{29,2,16}, -{29,2,17}, -{29,2,18}, -{29,2,19}, -{29,2,20}, -{29,2,21}, -{29,2,22}, -{29,2,23}, -{29,2,24}, -{29,2,25}, -{29,2,26}, -{29,2,27}, -{29,2,28}, -{29,2,29}, -{29,2,30}, -{29,2,31}, -{29,2,32}, -{29,2,33}, -{29,2,34}, -{29,2,35}, -{29,2,36}, -{29,2,37}, -{29,2,38}, -{29,3,-35}, -{29,3,-34}, -{29,3,-33}, -{29,3,-32}, -{29,3,-31}, -{29,3,-30}, -{29,3,-29}, -{29,3,-28}, -{29,3,-27}, -{29,3,-26}, -{29,3,-25}, -{29,3,-24}, -{29,3,-23}, -{29,3,-22}, -{29,3,-21}, -{29,3,-20}, -{29,3,-19}, -{29,3,-18}, -{29,3,-17}, -{29,3,-16}, -{29,3,-15}, -{29,3,-14}, -{29,3,-13}, -{29,3,-12}, -{29,3,-11}, -{29,3,-10}, -{29,3,-9}, -{29,3,-8}, -{29,3,-7}, -{29,3,-6}, -{29,3,-5}, -{29,3,-4}, -{29,3,-3}, -{29,3,-2}, -{29,3,-1}, -{29,3,0}, -{29,3,1}, -{29,3,2}, -{29,3,3}, -{29,3,4}, -{29,3,5}, -{29,3,6}, -{29,3,7}, -{29,3,8}, -{29,3,9}, -{29,3,10}, -{29,3,11}, -{29,3,12}, -{29,3,13}, -{29,3,14}, -{29,3,15}, -{29,3,16}, -{29,3,17}, -{29,3,18}, -{29,3,19}, -{29,3,20}, -{29,3,21}, -{29,3,22}, -{29,3,23}, -{29,3,24}, -{29,3,25}, -{29,3,26}, -{29,3,27}, -{29,3,28}, -{29,3,29}, -{29,3,30}, -{29,3,31}, -{29,3,32}, -{29,3,33}, -{29,3,34}, -{29,3,35}, -{29,3,36}, -{29,3,37}, -{29,3,38}, -{29,4,-36}, -{29,4,-35}, -{29,4,-34}, -{29,4,-33}, -{29,4,-32}, -{29,4,-31}, -{29,4,-30}, -{29,4,-29}, -{29,4,-28}, -{29,4,-27}, -{29,4,-26}, -{29,4,-25}, -{29,4,-24}, -{29,4,-23}, -{29,4,-22}, -{29,4,-21}, -{29,4,-20}, -{29,4,-19}, -{29,4,-18}, -{29,4,-17}, -{29,4,-16}, -{29,4,-15}, -{29,4,-14}, -{29,4,-13}, -{29,4,-12}, -{29,4,-11}, -{29,4,-10}, -{29,4,-9}, -{29,4,-8}, -{29,4,-7}, -{29,4,-6}, -{29,4,-5}, -{29,4,-4}, -{29,4,-3}, -{29,4,-2}, -{29,4,-1}, -{29,4,0}, -{29,4,1}, -{29,4,2}, -{29,4,3}, -{29,4,4}, -{29,4,5}, -{29,4,6}, -{29,4,7}, -{29,4,8}, -{29,4,9}, -{29,4,10}, -{29,4,11}, -{29,4,12}, -{29,4,13}, -{29,4,14}, -{29,4,15}, -{29,4,16}, -{29,4,17}, -{29,4,18}, -{29,4,19}, -{29,4,20}, -{29,4,21}, -{29,4,22}, -{29,4,23}, -{29,4,24}, -{29,4,25}, -{29,4,26}, -{29,4,27}, -{29,4,28}, -{29,4,29}, -{29,4,30}, -{29,4,31}, -{29,4,32}, -{29,4,33}, -{29,4,34}, -{29,4,35}, -{29,4,36}, -{29,4,37}, -{29,4,38}, -{29,5,-38}, -{29,5,-37}, -{29,5,-36}, -{29,5,-35}, -{29,5,-34}, -{29,5,-33}, -{29,5,-32}, -{29,5,-31}, -{29,5,-30}, -{29,5,-29}, -{29,5,-28}, -{29,5,-27}, -{29,5,-26}, -{29,5,-25}, -{29,5,-24}, -{29,5,-23}, -{29,5,-22}, -{29,5,-21}, -{29,5,-20}, -{29,5,-19}, -{29,5,-18}, -{29,5,-17}, -{29,5,-16}, -{29,5,-15}, -{29,5,-14}, -{29,5,-13}, -{29,5,-12}, -{29,5,-11}, -{29,5,-10}, -{29,5,-9}, -{29,5,-8}, -{29,5,-7}, -{29,5,-6}, -{29,5,-5}, -{29,5,-4}, -{29,5,-3}, -{29,5,-2}, -{29,5,-1}, -{29,5,0}, -{29,5,1}, -{29,5,2}, -{29,5,3}, -{29,5,4}, -{29,5,5}, -{29,5,6}, -{29,5,7}, -{29,5,8}, -{29,5,9}, -{29,5,10}, -{29,5,11}, -{29,5,12}, -{29,5,13}, -{29,5,14}, -{29,5,15}, -{29,5,16}, -{29,5,17}, -{29,5,18}, -{29,5,19}, -{29,5,20}, -{29,5,21}, -{29,5,22}, -{29,5,23}, -{29,5,24}, -{29,5,25}, -{29,5,26}, -{29,5,27}, -{29,5,28}, -{29,5,29}, -{29,5,30}, -{29,5,31}, -{29,5,32}, -{29,5,33}, -{29,5,34}, -{29,5,35}, -{29,5,36}, -{29,5,37}, -{29,5,38}, -{29,6,-39}, -{29,6,-38}, -{29,6,-37}, -{29,6,-36}, -{29,6,-35}, -{29,6,-34}, -{29,6,-33}, -{29,6,-32}, -{29,6,-31}, -{29,6,-30}, -{29,6,-29}, -{29,6,-28}, -{29,6,-27}, -{29,6,-26}, -{29,6,-25}, -{29,6,-24}, -{29,6,-23}, -{29,6,-22}, -{29,6,-21}, -{29,6,-20}, -{29,6,-19}, -{29,6,-18}, -{29,6,-17}, -{29,6,-16}, -{29,6,-15}, -{29,6,-14}, -{29,6,-13}, -{29,6,-12}, -{29,6,-11}, -{29,6,-10}, -{29,6,-9}, -{29,6,-8}, -{29,6,-7}, -{29,6,-6}, -{29,6,-5}, -{29,6,-4}, -{29,6,-3}, -{29,6,-2}, -{29,6,-1}, -{29,6,0}, -{29,6,1}, -{29,6,2}, -{29,6,3}, -{29,6,4}, -{29,6,5}, -{29,6,6}, -{29,6,7}, -{29,6,8}, -{29,6,9}, -{29,6,10}, -{29,6,11}, -{29,6,12}, -{29,6,13}, -{29,6,14}, -{29,6,15}, -{29,6,16}, -{29,6,17}, -{29,6,18}, -{29,6,19}, -{29,6,20}, -{29,6,21}, -{29,6,22}, -{29,6,23}, -{29,6,24}, -{29,6,25}, -{29,6,26}, -{29,6,27}, -{29,6,28}, -{29,6,29}, -{29,6,30}, -{29,6,31}, -{29,6,32}, -{29,6,33}, -{29,6,34}, -{29,6,35}, -{29,6,36}, -{29,6,37}, -{29,6,38}, -{29,7,-40}, -{29,7,-39}, -{29,7,-38}, -{29,7,-37}, -{29,7,-36}, -{29,7,-35}, -{29,7,-34}, -{29,7,-33}, -{29,7,-32}, -{29,7,-31}, -{29,7,-30}, -{29,7,-29}, -{29,7,-28}, -{29,7,-27}, -{29,7,-26}, -{29,7,-25}, -{29,7,-24}, -{29,7,-23}, -{29,7,-22}, -{29,7,-21}, -{29,7,-20}, -{29,7,-19}, -{29,7,-18}, -{29,7,-17}, -{29,7,-16}, -{29,7,-15}, -{29,7,-14}, -{29,7,-13}, -{29,7,-12}, -{29,7,-11}, -{29,7,-10}, -{29,7,-9}, -{29,7,-8}, -{29,7,-7}, -{29,7,-6}, -{29,7,-5}, -{29,7,-4}, -{29,7,-3}, -{29,7,-2}, -{29,7,-1}, -{29,7,0}, -{29,7,1}, -{29,7,2}, -{29,7,3}, -{29,7,4}, -{29,7,5}, -{29,7,6}, -{29,7,7}, -{29,7,8}, -{29,7,9}, -{29,7,10}, -{29,7,11}, -{29,7,12}, -{29,7,13}, -{29,7,14}, -{29,7,15}, -{29,7,16}, -{29,7,17}, -{29,7,18}, -{29,7,19}, -{29,7,20}, -{29,7,21}, -{29,7,22}, -{29,7,23}, -{29,7,24}, -{29,7,25}, -{29,7,26}, -{29,7,27}, -{29,7,28}, -{29,7,29}, -{29,7,30}, -{29,7,31}, -{29,7,32}, -{29,7,33}, -{29,7,34}, -{29,7,35}, -{29,7,36}, -{29,7,37}, -{29,7,38}, -{29,8,-41}, -{29,8,-40}, -{29,8,-39}, -{29,8,-38}, -{29,8,-37}, -{29,8,-36}, -{29,8,-35}, -{29,8,-34}, -{29,8,-33}, -{29,8,-32}, -{29,8,-31}, -{29,8,-30}, -{29,8,-29}, -{29,8,-28}, -{29,8,-27}, -{29,8,-26}, -{29,8,-25}, -{29,8,-24}, -{29,8,-23}, -{29,8,-22}, -{29,8,-21}, -{29,8,-20}, -{29,8,-19}, -{29,8,-18}, -{29,8,-17}, -{29,8,-16}, -{29,8,-15}, -{29,8,-14}, -{29,8,-13}, -{29,8,-12}, -{29,8,-11}, -{29,8,-10}, -{29,8,-9}, -{29,8,-8}, -{29,8,-7}, -{29,8,-6}, -{29,8,-5}, -{29,8,-4}, -{29,8,-3}, -{29,8,-2}, -{29,8,-1}, -{29,8,0}, -{29,8,1}, -{29,8,2}, -{29,8,3}, -{29,8,4}, -{29,8,5}, -{29,8,6}, -{29,8,7}, -{29,8,8}, -{29,8,9}, -{29,8,10}, -{29,8,11}, -{29,8,12}, -{29,8,13}, -{29,8,14}, -{29,8,15}, -{29,8,16}, -{29,8,17}, -{29,8,18}, -{29,8,19}, -{29,8,20}, -{29,8,21}, -{29,8,22}, -{29,8,23}, -{29,8,24}, -{29,8,25}, -{29,8,26}, -{29,8,27}, -{29,8,28}, -{29,8,29}, -{29,8,30}, -{29,8,31}, -{29,8,32}, -{29,8,33}, -{29,8,34}, -{29,8,35}, -{29,8,36}, -{29,8,37}, -{29,8,38}, -{29,9,-42}, -{29,9,-41}, -{29,9,-40}, -{29,9,-39}, -{29,9,-38}, -{29,9,-37}, -{29,9,-36}, -{29,9,-35}, -{29,9,-34}, -{29,9,-33}, -{29,9,-32}, -{29,9,-31}, -{29,9,-30}, -{29,9,-29}, -{29,9,-28}, -{29,9,-27}, -{29,9,-26}, -{29,9,-25}, -{29,9,-24}, -{29,9,-23}, -{29,9,-22}, -{29,9,-21}, -{29,9,-20}, -{29,9,-19}, -{29,9,-18}, -{29,9,-17}, -{29,9,-16}, -{29,9,-15}, -{29,9,-14}, -{29,9,-13}, -{29,9,-12}, -{29,9,-11}, -{29,9,-10}, -{29,9,-9}, -{29,9,-8}, -{29,9,-7}, -{29,9,-6}, -{29,9,-5}, -{29,9,-4}, -{29,9,-3}, -{29,9,-2}, -{29,9,-1}, -{29,9,0}, -{29,9,1}, -{29,9,2}, -{29,9,3}, -{29,9,4}, -{29,9,5}, -{29,9,6}, -{29,9,7}, -{29,9,8}, -{29,9,9}, -{29,9,10}, -{29,9,11}, -{29,9,12}, -{29,9,13}, -{29,9,14}, -{29,9,15}, -{29,9,16}, -{29,9,17}, -{29,9,18}, -{29,9,19}, -{29,9,20}, -{29,9,21}, -{29,9,22}, -{29,9,23}, -{29,9,24}, -{29,9,25}, -{29,9,26}, -{29,9,27}, -{29,9,28}, -{29,9,29}, -{29,9,30}, -{29,9,31}, -{29,9,32}, -{29,9,33}, -{29,9,34}, -{29,9,35}, -{29,9,36}, -{29,9,37}, -{29,9,38}, -{29,10,-43}, -{29,10,-42}, -{29,10,-41}, -{29,10,-40}, -{29,10,-39}, -{29,10,-38}, -{29,10,-37}, -{29,10,-36}, -{29,10,-35}, -{29,10,-34}, -{29,10,-33}, -{29,10,-32}, -{29,10,-31}, -{29,10,-30}, -{29,10,-29}, -{29,10,-28}, -{29,10,-27}, -{29,10,-26}, -{29,10,-25}, -{29,10,-24}, -{29,10,-23}, -{29,10,-22}, -{29,10,-21}, -{29,10,-20}, -{29,10,-19}, -{29,10,-18}, -{29,10,-17}, -{29,10,-16}, -{29,10,-15}, -{29,10,-14}, -{29,10,-13}, -{29,10,-12}, -{29,10,-11}, -{29,10,-10}, -{29,10,-9}, -{29,10,-8}, -{29,10,-7}, -{29,10,-6}, -{29,10,-5}, -{29,10,-4}, -{29,10,-3}, -{29,10,-2}, -{29,10,-1}, -{29,10,0}, -{29,10,1}, -{29,10,2}, -{29,10,3}, -{29,10,4}, -{29,10,5}, -{29,10,6}, -{29,10,7}, -{29,10,8}, -{29,10,9}, -{29,10,10}, -{29,10,11}, -{29,10,12}, -{29,10,13}, -{29,10,14}, -{29,10,15}, -{29,10,16}, -{29,10,17}, -{29,10,18}, -{29,10,19}, -{29,10,20}, -{29,10,21}, -{29,10,22}, -{29,10,23}, -{29,10,24}, -{29,10,25}, -{29,10,26}, -{29,10,27}, -{29,10,28}, -{29,10,29}, -{29,10,30}, -{29,10,31}, -{29,10,32}, -{29,10,33}, -{29,10,34}, -{29,10,35}, -{29,10,36}, -{29,10,37}, -{29,10,38}, -{29,11,-44}, -{29,11,-43}, -{29,11,-42}, -{29,11,-41}, -{29,11,-40}, -{29,11,-39}, -{29,11,-38}, -{29,11,-37}, -{29,11,-36}, -{29,11,-35}, -{29,11,-34}, -{29,11,-33}, -{29,11,-32}, -{29,11,-31}, -{29,11,-30}, -{29,11,-29}, -{29,11,-28}, -{29,11,-27}, -{29,11,-26}, -{29,11,-25}, -{29,11,-24}, -{29,11,-23}, -{29,11,-22}, -{29,11,-21}, -{29,11,-20}, -{29,11,-19}, -{29,11,-18}, -{29,11,-17}, -{29,11,-16}, -{29,11,-15}, -{29,11,-14}, -{29,11,-13}, -{29,11,-12}, -{29,11,-11}, -{29,11,-10}, -{29,11,-9}, -{29,11,-8}, -{29,11,-7}, -{29,11,-6}, -{29,11,-5}, -{29,11,-4}, -{29,11,-3}, -{29,11,-2}, -{29,11,-1}, -{29,11,0}, -{29,11,1}, -{29,11,2}, -{29,11,3}, -{29,11,4}, -{29,11,5}, -{29,11,6}, -{29,11,7}, -{29,11,8}, -{29,11,9}, -{29,11,10}, -{29,11,11}, -{29,11,12}, -{29,11,13}, -{29,11,14}, -{29,11,15}, -{29,11,16}, -{29,11,17}, -{29,11,18}, -{29,11,19}, -{29,11,20}, -{29,11,21}, -{29,11,22}, -{29,11,23}, -{29,11,24}, -{29,11,25}, -{29,11,26}, -{29,11,27}, -{29,11,28}, -{29,11,29}, -{29,11,30}, -{29,11,31}, -{29,11,32}, -{29,11,33}, -{29,11,34}, -{29,11,35}, -{29,11,36}, -{29,11,37}, -{29,11,38}, -{29,11,39}, -{29,12,-45}, -{29,12,-44}, -{29,12,-43}, -{29,12,-42}, -{29,12,-41}, -{29,12,-40}, -{29,12,-39}, -{29,12,-38}, -{29,12,-37}, -{29,12,-36}, -{29,12,-35}, -{29,12,-34}, -{29,12,-33}, -{29,12,-32}, -{29,12,-31}, -{29,12,-30}, -{29,12,-29}, -{29,12,-28}, -{29,12,-27}, -{29,12,-26}, -{29,12,-25}, -{29,12,-24}, -{29,12,-23}, -{29,12,-22}, -{29,12,-21}, -{29,12,-20}, -{29,12,-19}, -{29,12,-18}, -{29,12,-17}, -{29,12,-16}, -{29,12,-15}, -{29,12,-14}, -{29,12,-13}, -{29,12,-12}, -{29,12,-11}, -{29,12,-10}, -{29,12,-9}, -{29,12,-8}, -{29,12,-7}, -{29,12,-6}, -{29,12,-5}, -{29,12,-4}, -{29,12,-3}, -{29,12,-2}, -{29,12,-1}, -{29,12,0}, -{29,12,1}, -{29,12,2}, -{29,12,3}, -{29,12,4}, -{29,12,5}, -{29,12,6}, -{29,12,7}, -{29,12,8}, -{29,12,9}, -{29,12,10}, -{29,12,11}, -{29,12,12}, -{29,12,13}, -{29,12,14}, -{29,12,15}, -{29,12,16}, -{29,12,17}, -{29,12,18}, -{29,12,19}, -{29,12,20}, -{29,12,21}, -{29,12,22}, -{29,12,23}, -{29,12,24}, -{29,12,25}, -{29,12,26}, -{29,12,27}, -{29,12,28}, -{29,12,29}, -{29,12,30}, -{29,12,31}, -{29,12,32}, -{29,12,33}, -{29,12,34}, -{29,12,35}, -{29,12,36}, -{29,12,37}, -{29,12,38}, -{29,12,39}, -{29,13,-46}, -{29,13,-45}, -{29,13,-44}, -{29,13,-43}, -{29,13,-42}, -{29,13,-41}, -{29,13,-40}, -{29,13,-39}, -{29,13,-38}, -{29,13,-37}, -{29,13,-36}, -{29,13,-35}, -{29,13,-34}, -{29,13,-33}, -{29,13,-32}, -{29,13,-31}, -{29,13,-30}, -{29,13,-29}, -{29,13,-28}, -{29,13,-27}, -{29,13,-26}, -{29,13,-25}, -{29,13,-24}, -{29,13,-23}, -{29,13,-22}, -{29,13,-21}, -{29,13,-20}, -{29,13,-19}, -{29,13,-18}, -{29,13,-17}, -{29,13,-16}, -{29,13,-15}, -{29,13,-14}, -{29,13,-13}, -{29,13,-12}, -{29,13,-11}, -{29,13,-10}, -{29,13,-9}, -{29,13,-8}, -{29,13,-7}, -{29,13,-6}, -{29,13,-5}, -{29,13,-4}, -{29,13,-3}, -{29,13,-2}, -{29,13,-1}, -{29,13,0}, -{29,13,1}, -{29,13,2}, -{29,13,3}, -{29,13,4}, -{29,13,5}, -{29,13,6}, -{29,13,7}, -{29,13,8}, -{29,13,9}, -{29,13,10}, -{29,13,11}, -{29,13,12}, -{29,13,13}, -{29,13,14}, -{29,13,15}, -{29,13,16}, -{29,13,17}, -{29,13,18}, -{29,13,19}, -{29,13,20}, -{29,13,21}, -{29,13,22}, -{29,13,23}, -{29,13,24}, -{29,13,25}, -{29,13,26}, -{29,13,27}, -{29,13,28}, -{29,13,29}, -{29,13,30}, -{29,13,31}, -{29,13,32}, -{29,13,33}, -{29,13,34}, -{29,13,35}, -{29,13,36}, -{29,13,37}, -{29,13,38}, -{29,13,39}, -{29,14,-47}, -{29,14,-46}, -{29,14,-45}, -{29,14,-44}, -{29,14,-43}, -{29,14,-42}, -{29,14,-41}, -{29,14,-40}, -{29,14,-39}, -{29,14,-38}, -{29,14,-37}, -{29,14,-36}, -{29,14,-35}, -{29,14,-34}, -{29,14,-33}, -{29,14,-32}, -{29,14,-31}, -{29,14,-30}, -{29,14,-29}, -{29,14,-28}, -{29,14,-27}, -{29,14,-26}, -{29,14,-25}, -{29,14,-24}, -{29,14,-23}, -{29,14,-22}, -{29,14,-21}, -{29,14,-20}, -{29,14,-19}, -{29,14,-18}, -{29,14,-17}, -{29,14,-16}, -{29,14,-15}, -{29,14,-14}, -{29,14,-13}, -{29,14,-12}, -{29,14,-11}, -{29,14,-10}, -{29,14,-9}, -{29,14,-8}, -{29,14,-7}, -{29,14,-6}, -{29,14,-5}, -{29,14,-4}, -{29,14,-3}, -{29,14,-2}, -{29,14,-1}, -{29,14,0}, -{29,14,1}, -{29,14,2}, -{29,14,3}, -{29,14,4}, -{29,14,5}, -{29,14,6}, -{29,14,7}, -{29,14,8}, -{29,14,9}, -{29,14,10}, -{29,14,11}, -{29,14,12}, -{29,14,13}, -{29,14,14}, -{29,14,15}, -{29,14,16}, -{29,14,17}, -{29,14,18}, -{29,14,19}, -{29,14,20}, -{29,14,21}, -{29,14,22}, -{29,14,23}, -{29,14,24}, -{29,14,25}, -{29,14,26}, -{29,14,27}, -{29,14,28}, -{29,14,29}, -{29,14,30}, -{29,14,31}, -{29,14,32}, -{29,14,33}, -{29,14,34}, -{29,14,35}, -{29,14,36}, -{29,14,37}, -{29,14,38}, -{29,14,39}, -{29,15,-48}, -{29,15,-47}, -{29,15,-46}, -{29,15,-45}, -{29,15,-44}, -{29,15,-43}, -{29,15,-42}, -{29,15,-41}, -{29,15,-40}, -{29,15,-39}, -{29,15,-38}, -{29,15,-37}, -{29,15,-36}, -{29,15,-35}, -{29,15,-34}, -{29,15,-33}, -{29,15,-32}, -{29,15,-31}, -{29,15,-30}, -{29,15,-29}, -{29,15,-28}, -{29,15,-27}, -{29,15,-26}, -{29,15,-25}, -{29,15,-24}, -{29,15,-23}, -{29,15,-22}, -{29,15,-21}, -{29,15,-20}, -{29,15,-19}, -{29,15,-18}, -{29,15,-17}, -{29,15,-16}, -{29,15,-15}, -{29,15,-14}, -{29,15,-13}, -{29,15,-12}, -{29,15,-11}, -{29,15,-10}, -{29,15,-9}, -{29,15,-8}, -{29,15,-7}, -{29,15,-6}, -{29,15,-5}, -{29,15,-4}, -{29,15,-3}, -{29,15,-2}, -{29,15,-1}, -{29,15,0}, -{29,15,1}, -{29,15,2}, -{29,15,3}, -{29,15,4}, -{29,15,5}, -{29,15,6}, -{29,15,7}, -{29,15,8}, -{29,15,9}, -{29,15,10}, -{29,15,11}, -{29,15,12}, -{29,15,13}, -{29,15,14}, -{29,15,15}, -{29,15,16}, -{29,15,17}, -{29,15,18}, -{29,15,19}, -{29,15,20}, -{29,15,21}, -{29,15,22}, -{29,15,23}, -{29,15,24}, -{29,15,25}, -{29,15,26}, -{29,15,27}, -{29,15,28}, -{29,15,29}, -{29,15,30}, -{29,15,31}, -{29,15,32}, -{29,15,33}, -{29,15,34}, -{29,15,35}, -{29,15,36}, -{29,15,37}, -{29,15,38}, -{29,15,39}, -{29,16,-49}, -{29,16,-48}, -{29,16,-47}, -{29,16,-46}, -{29,16,-45}, -{29,16,-44}, -{29,16,-43}, -{29,16,-42}, -{29,16,-41}, -{29,16,-40}, -{29,16,-39}, -{29,16,-38}, -{29,16,-37}, -{29,16,-36}, -{29,16,-35}, -{29,16,-34}, -{29,16,-33}, -{29,16,-32}, -{29,16,-31}, -{29,16,-30}, -{29,16,-29}, -{29,16,-28}, -{29,16,-27}, -{29,16,-26}, -{29,16,-25}, -{29,16,-24}, -{29,16,-23}, -{29,16,-22}, -{29,16,-21}, -{29,16,-20}, -{29,16,-19}, -{29,16,-18}, -{29,16,-17}, -{29,16,-16}, -{29,16,-15}, -{29,16,-14}, -{29,16,-13}, -{29,16,-12}, -{29,16,-11}, -{29,16,-10}, -{29,16,-9}, -{29,16,-8}, -{29,16,-7}, -{29,16,-6}, -{29,16,-5}, -{29,16,-4}, -{29,16,-3}, -{29,16,-2}, -{29,16,-1}, -{29,16,0}, -{29,16,1}, -{29,16,2}, -{29,16,3}, -{29,16,4}, -{29,16,5}, -{29,16,6}, -{29,16,7}, -{29,16,8}, -{29,16,9}, -{29,16,10}, -{29,16,11}, -{29,16,12}, -{29,16,13}, -{29,16,14}, -{29,16,15}, -{29,16,16}, -{29,16,17}, -{29,16,18}, -{29,16,19}, -{29,16,20}, -{29,16,21}, -{29,16,22}, -{29,16,23}, -{29,16,24}, -{29,16,25}, -{29,16,26}, -{29,16,27}, -{29,16,28}, -{29,16,29}, -{29,16,30}, -{29,16,31}, -{29,16,32}, -{29,16,33}, -{29,16,34}, -{29,16,35}, -{29,16,36}, -{29,16,37}, -{29,16,38}, -{29,16,39}, -{29,17,-50}, -{29,17,-49}, -{29,17,-48}, -{29,17,-47}, -{29,17,-46}, -{29,17,-45}, -{29,17,-44}, -{29,17,-43}, -{29,17,-42}, -{29,17,-41}, -{29,17,-40}, -{29,17,-39}, -{29,17,-38}, -{29,17,-37}, -{29,17,-36}, -{29,17,-35}, -{29,17,-34}, -{29,17,-33}, -{29,17,-32}, -{29,17,-31}, -{29,17,-30}, -{29,17,-29}, -{29,17,-28}, -{29,17,-27}, -{29,17,-26}, -{29,17,-25}, -{29,17,-24}, -{29,17,-23}, -{29,17,-22}, -{29,17,-21}, -{29,17,-20}, -{29,17,-19}, -{29,17,-18}, -{29,17,-17}, -{29,17,-16}, -{29,17,-15}, -{29,17,-14}, -{29,17,-13}, -{29,17,-12}, -{29,17,-11}, -{29,17,-10}, -{29,17,-9}, -{29,17,-8}, -{29,17,-7}, -{29,17,-6}, -{29,17,-5}, -{29,17,-4}, -{29,17,-3}, -{29,17,-2}, -{29,17,-1}, -{29,17,0}, -{29,17,1}, -{29,17,2}, -{29,17,3}, -{29,17,4}, -{29,17,5}, -{29,17,6}, -{29,17,7}, -{29,17,8}, -{29,17,9}, -{29,17,10}, -{29,17,11}, -{29,17,12}, -{29,17,13}, -{29,17,14}, -{29,17,15}, -{29,17,16}, -{29,17,17}, -{29,17,18}, -{29,17,19}, -{29,17,20}, -{29,17,21}, -{29,17,22}, -{29,17,23}, -{29,17,24}, -{29,17,25}, -{29,17,26}, -{29,17,27}, -{29,17,28}, -{29,17,29}, -{29,17,30}, -{29,17,31}, -{29,17,32}, -{29,17,33}, -{29,17,34}, -{29,17,35}, -{29,17,36}, -{29,17,37}, -{29,17,38}, -{29,17,39}, -{29,18,-51}, -{29,18,-50}, -{29,18,-49}, -{29,18,-48}, -{29,18,-47}, -{29,18,-46}, -{29,18,-45}, -{29,18,-44}, -{29,18,-43}, -{29,18,-42}, -{29,18,-41}, -{29,18,-40}, -{29,18,-39}, -{29,18,-38}, -{29,18,-37}, -{29,18,-36}, -{29,18,-35}, -{29,18,-34}, -{29,18,-33}, -{29,18,-32}, -{29,18,-31}, -{29,18,-30}, -{29,18,-29}, -{29,18,-28}, -{29,18,-27}, -{29,18,-26}, -{29,18,-25}, -{29,18,-24}, -{29,18,-23}, -{29,18,-22}, -{29,18,-21}, -{29,18,-20}, -{29,18,-19}, -{29,18,-18}, -{29,18,-17}, -{29,18,-16}, -{29,18,-15}, -{29,18,-14}, -{29,18,-13}, -{29,18,-12}, -{29,18,-11}, -{29,18,-10}, -{29,18,-9}, -{29,18,-8}, -{29,18,-7}, -{29,18,-6}, -{29,18,-5}, -{29,18,-4}, -{29,18,-3}, -{29,18,-2}, -{29,18,-1}, -{29,18,0}, -{29,18,1}, -{29,18,2}, -{29,18,3}, -{29,18,4}, -{29,18,5}, -{29,18,6}, -{29,18,7}, -{29,18,8}, -{29,18,9}, -{29,18,10}, -{29,18,11}, -{29,18,12}, -{29,18,13}, -{29,18,14}, -{29,18,15}, -{29,18,16}, -{29,18,17}, -{29,18,18}, -{29,18,19}, -{29,18,20}, -{29,18,21}, -{29,18,22}, -{29,18,23}, -{29,18,24}, -{29,18,25}, -{29,18,26}, -{29,18,27}, -{29,18,28}, -{29,18,29}, -{29,18,30}, -{29,18,31}, -{29,18,32}, -{29,18,33}, -{29,18,34}, -{29,18,35}, -{29,18,36}, -{29,18,37}, -{29,18,38}, -{29,18,39}, -{29,19,-52}, -{29,19,-51}, -{29,19,-50}, -{29,19,-49}, -{29,19,-48}, -{29,19,-47}, -{29,19,-46}, -{29,19,-45}, -{29,19,-44}, -{29,19,-43}, -{29,19,-42}, -{29,19,-41}, -{29,19,-40}, -{29,19,-39}, -{29,19,-38}, -{29,19,-37}, -{29,19,-36}, -{29,19,-35}, -{29,19,-34}, -{29,19,-33}, -{29,19,-32}, -{29,19,-31}, -{29,19,-30}, -{29,19,-29}, -{29,19,-28}, -{29,19,-27}, -{29,19,-26}, -{29,19,-25}, -{29,19,-24}, -{29,19,-23}, -{29,19,-22}, -{29,19,-21}, -{29,19,-20}, -{29,19,-19}, -{29,19,-18}, -{29,19,-17}, -{29,19,-16}, -{29,19,-15}, -{29,19,-14}, -{29,19,-13}, -{29,19,-12}, -{29,19,-11}, -{29,19,-10}, -{29,19,-9}, -{29,19,-8}, -{29,19,-7}, -{29,19,-6}, -{29,19,-5}, -{29,19,-4}, -{29,19,-3}, -{29,19,-2}, -{29,19,-1}, -{29,19,0}, -{29,19,1}, -{29,19,2}, -{29,19,3}, -{29,19,4}, -{29,19,5}, -{29,19,6}, -{29,19,7}, -{29,19,8}, -{29,19,9}, -{29,19,10}, -{29,19,11}, -{29,19,12}, -{29,19,13}, -{29,19,14}, -{29,19,15}, -{29,19,16}, -{29,19,17}, -{29,19,18}, -{29,19,19}, -{29,19,20}, -{29,19,21}, -{29,19,22}, -{29,19,23}, -{29,19,24}, -{29,19,25}, -{29,19,26}, -{29,19,27}, -{29,19,28}, -{29,19,29}, -{29,19,30}, -{29,19,31}, -{29,19,32}, -{29,19,33}, -{29,19,34}, -{29,19,35}, -{29,19,36}, -{29,19,37}, -{29,19,38}, -{29,19,39}, -{29,20,-53}, -{29,20,-52}, -{29,20,-51}, -{29,20,-50}, -{29,20,-49}, -{29,20,-48}, -{29,20,-47}, -{29,20,-46}, -{29,20,-45}, -{29,20,-44}, -{29,20,-43}, -{29,20,-42}, -{29,20,-41}, -{29,20,-40}, -{29,20,-39}, -{29,20,-38}, -{29,20,-37}, -{29,20,-36}, -{29,20,-35}, -{29,20,-34}, -{29,20,-33}, -{29,20,-32}, -{29,20,-31}, -{29,20,-30}, -{29,20,-29}, -{29,20,-28}, -{29,20,-27}, -{29,20,-26}, -{29,20,-25}, -{29,20,-24}, -{29,20,-23}, -{29,20,-22}, -{29,20,-21}, -{29,20,-20}, -{29,20,-19}, -{29,20,-18}, -{29,20,-17}, -{29,20,-16}, -{29,20,-15}, -{29,20,-14}, -{29,20,-13}, -{29,20,-12}, -{29,20,-11}, -{29,20,-10}, -{29,20,-9}, -{29,20,-8}, -{29,20,-7}, -{29,20,-6}, -{29,20,-5}, -{29,20,-4}, -{29,20,-3}, -{29,20,-2}, -{29,20,-1}, -{29,20,0}, -{29,20,1}, -{29,20,2}, -{29,20,3}, -{29,20,4}, -{29,20,5}, -{29,20,6}, -{29,20,7}, -{29,20,8}, -{29,20,9}, -{29,20,10}, -{29,20,11}, -{29,20,12}, -{29,20,13}, -{29,20,14}, -{29,20,15}, -{29,20,16}, -{29,20,17}, -{29,20,18}, -{29,20,19}, -{29,20,20}, -{29,20,21}, -{29,20,22}, -{29,20,23}, -{29,20,24}, -{29,20,25}, -{29,20,26}, -{29,20,27}, -{29,20,28}, -{29,20,29}, -{29,20,30}, -{29,20,31}, -{29,20,32}, -{29,20,33}, -{29,20,34}, -{29,20,35}, -{29,20,36}, -{29,20,37}, -{29,20,38}, -{29,20,39}, -{29,21,-54}, -{29,21,-53}, -{29,21,-52}, -{29,21,-51}, -{29,21,-50}, -{29,21,-49}, -{29,21,-48}, -{29,21,-47}, -{29,21,-46}, -{29,21,-45}, -{29,21,-44}, -{29,21,-43}, -{29,21,-42}, -{29,21,-41}, -{29,21,-40}, -{29,21,-39}, -{29,21,-38}, -{29,21,-37}, -{29,21,-36}, -{29,21,-35}, -{29,21,-34}, -{29,21,-33}, -{29,21,-32}, -{29,21,-31}, -{29,21,-30}, -{29,21,-29}, -{29,21,-28}, -{29,21,-27}, -{29,21,-26}, -{29,21,-25}, -{29,21,-24}, -{29,21,-23}, -{29,21,-22}, -{29,21,-21}, -{29,21,-20}, -{29,21,-19}, -{29,21,-18}, -{29,21,-17}, -{29,21,-16}, -{29,21,-15}, -{29,21,-14}, -{29,21,-13}, -{29,21,-12}, -{29,21,-11}, -{29,21,-10}, -{29,21,-9}, -{29,21,-8}, -{29,21,-7}, -{29,21,-6}, -{29,21,-5}, -{29,21,-4}, -{29,21,-3}, -{29,21,-2}, -{29,21,-1}, -{29,21,0}, -{29,21,1}, -{29,21,2}, -{29,21,3}, -{29,21,4}, -{29,21,5}, -{29,21,6}, -{29,21,7}, -{29,21,8}, -{29,21,9}, -{29,21,10}, -{29,21,11}, -{29,21,12}, -{29,21,13}, -{29,21,14}, -{29,21,15}, -{29,21,16}, -{29,21,17}, -{29,21,18}, -{29,21,19}, -{29,21,20}, -{29,21,21}, -{29,21,22}, -{29,21,23}, -{29,21,24}, -{29,21,25}, -{29,21,26}, -{29,21,27}, -{29,21,28}, -{29,21,29}, -{29,21,30}, -{29,21,31}, -{29,21,32}, -{29,21,33}, -{29,21,34}, -{29,21,35}, -{29,21,36}, -{29,21,37}, -{29,21,38}, -{29,21,39}, -{29,22,-55}, -{29,22,-54}, -{29,22,-53}, -{29,22,-52}, -{29,22,-51}, -{29,22,-50}, -{29,22,-49}, -{29,22,-48}, -{29,22,-47}, -{29,22,-46}, -{29,22,-45}, -{29,22,-44}, -{29,22,-43}, -{29,22,-42}, -{29,22,-41}, -{29,22,-40}, -{29,22,-39}, -{29,22,-38}, -{29,22,-37}, -{29,22,-36}, -{29,22,-35}, -{29,22,-34}, -{29,22,-33}, -{29,22,-32}, -{29,22,-31}, -{29,22,-30}, -{29,22,-29}, -{29,22,-28}, -{29,22,-27}, -{29,22,-26}, -{29,22,-25}, -{29,22,-24}, -{29,22,-23}, -{29,22,-22}, -{29,22,-21}, -{29,22,-20}, -{29,22,-19}, -{29,22,-18}, -{29,22,-17}, -{29,22,-16}, -{29,22,-15}, -{29,22,-14}, -{29,22,-13}, -{29,22,-12}, -{29,22,-11}, -{29,22,-10}, -{29,22,-9}, -{29,22,-8}, -{29,22,-7}, -{29,22,-6}, -{29,22,-5}, -{29,22,-4}, -{29,22,-3}, -{29,22,-2}, -{29,22,-1}, -{29,22,0}, -{29,22,1}, -{29,22,2}, -{29,22,3}, -{29,22,4}, -{29,22,5}, -{29,22,6}, -{29,22,7}, -{29,22,8}, -{29,22,9}, -{29,22,10}, -{29,22,11}, -{29,22,12}, -{29,22,13}, -{29,22,14}, -{29,22,15}, -{29,22,16}, -{29,22,17}, -{29,22,18}, -{29,22,19}, -{29,22,20}, -{29,22,21}, -{29,22,22}, -{29,22,23}, -{29,22,24}, -{29,22,25}, -{29,22,26}, -{29,22,27}, -{29,22,28}, -{29,22,29}, -{29,22,30}, -{29,22,31}, -{29,22,32}, -{29,22,33}, -{29,22,34}, -{29,22,35}, -{29,22,36}, -{29,22,37}, -{29,22,38}, -{29,22,39}, -{29,23,-56}, -{29,23,-55}, -{29,23,-54}, -{29,23,-53}, -{29,23,-52}, -{29,23,-51}, -{29,23,-50}, -{29,23,-49}, -{29,23,-48}, -{29,23,-47}, -{29,23,-46}, -{29,23,-45}, -{29,23,-44}, -{29,23,-43}, -{29,23,-42}, -{29,23,-41}, -{29,23,-40}, -{29,23,-39}, -{29,23,-38}, -{29,23,-37}, -{29,23,-36}, -{29,23,-35}, -{29,23,-34}, -{29,23,-33}, -{29,23,-32}, -{29,23,-31}, -{29,23,-30}, -{29,23,-29}, -{29,23,-28}, -{29,23,-27}, -{29,23,-26}, -{29,23,-25}, -{29,23,-24}, -{29,23,-23}, -{29,23,-22}, -{29,23,-21}, -{29,23,-20}, -{29,23,-19}, -{29,23,-18}, -{29,23,-17}, -{29,23,-16}, -{29,23,-15}, -{29,23,-14}, -{29,23,-13}, -{29,23,-12}, -{29,23,-11}, -{29,23,-10}, -{29,23,-9}, -{29,23,-8}, -{29,23,-7}, -{29,23,-6}, -{29,23,-5}, -{29,23,-4}, -{29,23,-3}, -{29,23,-2}, -{29,23,-1}, -{29,23,0}, -{29,23,1}, -{29,23,2}, -{29,23,3}, -{29,23,4}, -{29,23,5}, -{29,23,6}, -{29,23,7}, -{29,23,8}, -{29,23,9}, -{29,23,10}, -{29,23,11}, -{29,23,12}, -{29,23,13}, -{29,23,14}, -{29,23,15}, -{29,23,16}, -{29,23,17}, -{29,23,18}, -{29,23,19}, -{29,23,20}, -{29,23,21}, -{29,23,22}, -{29,23,23}, -{29,23,24}, -{29,23,25}, -{29,23,26}, -{29,23,27}, -{29,23,28}, -{29,23,29}, -{29,23,30}, -{29,23,31}, -{29,23,32}, -{29,23,33}, -{29,23,34}, -{29,23,35}, -{29,23,36}, -{29,23,37}, -{29,23,38}, -{29,23,39}, -{29,24,-57}, -{29,24,-56}, -{29,24,-55}, -{29,24,-54}, -{29,24,-53}, -{29,24,-52}, -{29,24,-51}, -{29,24,-50}, -{29,24,-49}, -{29,24,-48}, -{29,24,-47}, -{29,24,-46}, -{29,24,-45}, -{29,24,-44}, -{29,24,-43}, -{29,24,-42}, -{29,24,-41}, -{29,24,-40}, -{29,24,-39}, -{29,24,-38}, -{29,24,-37}, -{29,24,-36}, -{29,24,-35}, -{29,24,-34}, -{29,24,-33}, -{29,24,-32}, -{29,24,-31}, -{29,24,-30}, -{29,24,-29}, -{29,24,-28}, -{29,24,-27}, -{29,24,-26}, -{29,24,-25}, -{29,24,-24}, -{29,24,-23}, -{29,24,-22}, -{29,24,-21}, -{29,24,-20}, -{29,24,-19}, -{29,24,-18}, -{29,24,-17}, -{29,24,-16}, -{29,24,-15}, -{29,24,-14}, -{29,24,-13}, -{29,24,-12}, -{29,24,-11}, -{29,24,-10}, -{29,24,-9}, -{29,24,-8}, -{29,24,-7}, -{29,24,-6}, -{29,24,-5}, -{29,24,-4}, -{29,24,-3}, -{29,24,-2}, -{29,24,-1}, -{29,24,0}, -{29,24,1}, -{29,24,2}, -{29,24,3}, -{29,24,4}, -{29,24,5}, -{29,24,6}, -{29,24,7}, -{29,24,8}, -{29,24,9}, -{29,24,10}, -{29,24,11}, -{29,24,12}, -{29,24,13}, -{29,24,14}, -{29,24,15}, -{29,24,16}, -{29,24,17}, -{29,24,18}, -{29,24,19}, -{29,24,20}, -{29,24,21}, -{29,24,22}, -{29,24,23}, -{29,24,24}, -{29,24,25}, -{29,24,26}, -{29,24,27}, -{29,24,28}, -{29,24,29}, -{29,24,30}, -{29,24,31}, -{29,24,32}, -{29,24,33}, -{29,24,34}, -{29,24,35}, -{29,24,36}, -{29,24,37}, -{29,24,38}, -{29,24,39}, -{29,24,40}, -{29,25,-58}, -{29,25,-57}, -{29,25,-56}, -{29,25,-55}, -{29,25,-54}, -{29,25,-53}, -{29,25,-52}, -{29,25,-51}, -{29,25,-50}, -{29,25,-49}, -{29,25,-48}, -{29,25,-47}, -{29,25,-46}, -{29,25,-45}, -{29,25,-44}, -{29,25,-43}, -{29,25,-42}, -{29,25,-41}, -{29,25,-40}, -{29,25,-39}, -{29,25,-38}, -{29,25,-37}, -{29,25,-36}, -{29,25,-35}, -{29,25,-34}, -{29,25,-33}, -{29,25,-32}, -{29,25,-31}, -{29,25,-30}, -{29,25,-29}, -{29,25,-28}, -{29,25,-27}, -{29,25,-26}, -{29,25,-25}, -{29,25,-24}, -{29,25,-23}, -{29,25,-22}, -{29,25,-21}, -{29,25,-20}, -{29,25,-19}, -{29,25,-18}, -{29,25,-17}, -{29,25,-16}, -{29,25,-15}, -{29,25,-14}, -{29,25,-13}, -{29,25,-12}, -{29,25,-11}, -{29,25,-10}, -{29,25,-9}, -{29,25,-8}, -{29,25,-7}, -{29,25,-6}, -{29,25,-5}, -{29,25,-4}, -{29,25,-3}, -{29,25,-2}, -{29,25,-1}, -{29,25,0}, -{29,25,1}, -{29,25,2}, -{29,25,3}, -{29,25,4}, -{29,25,5}, -{29,25,6}, -{29,25,7}, -{29,25,8}, -{29,25,9}, -{29,25,10}, -{29,25,11}, -{29,25,12}, -{29,25,13}, -{29,25,14}, -{29,25,15}, -{29,25,16}, -{29,25,17}, -{29,25,18}, -{29,25,19}, -{29,25,20}, -{29,25,21}, -{29,25,22}, -{29,25,23}, -{29,25,24}, -{29,25,25}, -{29,25,26}, -{29,25,27}, -{29,25,28}, -{29,25,29}, -{29,25,30}, -{29,25,31}, -{29,25,32}, -{29,25,33}, -{29,25,34}, -{29,25,35}, -{29,25,36}, -{29,25,37}, -{29,25,38}, -{29,25,39}, -{29,25,40}, -{29,26,-59}, -{29,26,-58}, -{29,26,-57}, -{29,26,-56}, -{29,26,-55}, -{29,26,-54}, -{29,26,-53}, -{29,26,-52}, -{29,26,-51}, -{29,26,-50}, -{29,26,-49}, -{29,26,-48}, -{29,26,-47}, -{29,26,-46}, -{29,26,-45}, -{29,26,-44}, -{29,26,-43}, -{29,26,-42}, -{29,26,-41}, -{29,26,-40}, -{29,26,-39}, -{29,26,-38}, -{29,26,-37}, -{29,26,-36}, -{29,26,-35}, -{29,26,-34}, -{29,26,-33}, -{29,26,-32}, -{29,26,-31}, -{29,26,-30}, -{29,26,-29}, -{29,26,-28}, -{29,26,-27}, -{29,26,-26}, -{29,26,-25}, -{29,26,-24}, -{29,26,-23}, -{29,26,-22}, -{29,26,-21}, -{29,26,-20}, -{29,26,-19}, -{29,26,-18}, -{29,26,-17}, -{29,26,-16}, -{29,26,-15}, -{29,26,-14}, -{29,26,-13}, -{29,26,-12}, -{29,26,-11}, -{29,26,-10}, -{29,26,-9}, -{29,26,-8}, -{29,26,-7}, -{29,26,-6}, -{29,26,-5}, -{29,26,-4}, -{29,26,-3}, -{29,26,-2}, -{29,26,-1}, -{29,26,0}, -{29,26,1}, -{29,26,2}, -{29,26,3}, -{29,26,4}, -{29,26,5}, -{29,26,6}, -{29,26,7}, -{29,26,8}, -{29,26,9}, -{29,26,10}, -{29,26,11}, -{29,26,12}, -{29,26,13}, -{29,26,14}, -{29,26,15}, -{29,26,16}, -{29,26,17}, -{29,26,18}, -{29,26,19}, -{29,26,20}, -{29,26,21}, -{29,26,22}, -{29,26,23}, -{29,26,24}, -{29,26,25}, -{29,26,26}, -{29,26,27}, -{29,26,28}, -{29,26,29}, -{29,26,30}, -{29,26,31}, -{29,26,32}, -{29,26,33}, -{29,26,34}, -{29,26,35}, -{29,26,36}, -{29,26,37}, -{29,26,38}, -{29,26,39}, -{29,26,40}, -{29,27,-60}, -{29,27,-59}, -{29,27,-58}, -{29,27,-57}, -{29,27,-56}, -{29,27,-55}, -{29,27,-54}, -{29,27,-53}, -{29,27,-52}, -{29,27,-51}, -{29,27,-50}, -{29,27,-49}, -{29,27,-48}, -{29,27,-47}, -{29,27,-46}, -{29,27,-45}, -{29,27,-44}, -{29,27,-43}, -{29,27,-42}, -{29,27,-41}, -{29,27,-40}, -{29,27,-39}, -{29,27,-38}, -{29,27,-37}, -{29,27,-36}, -{29,27,-35}, -{29,27,-34}, -{29,27,-33}, -{29,27,-32}, -{29,27,-31}, -{29,27,-30}, -{29,27,-29}, -{29,27,-28}, -{29,27,-27}, -{29,27,-26}, -{29,27,-25}, -{29,27,-24}, -{29,27,-23}, -{29,27,-22}, -{29,27,-21}, -{29,27,-20}, -{29,27,-19}, -{29,27,-18}, -{29,27,-17}, -{29,27,-16}, -{29,27,-15}, -{29,27,-14}, -{29,27,-13}, -{29,27,-12}, -{29,27,-11}, -{29,27,-10}, -{29,27,-9}, -{29,27,-8}, -{29,27,-7}, -{29,27,-6}, -{29,27,-5}, -{29,27,-4}, -{29,27,-3}, -{29,27,-2}, -{29,27,-1}, -{29,27,0}, -{29,27,1}, -{29,27,2}, -{29,27,3}, -{29,27,4}, -{29,27,5}, -{29,27,6}, -{29,27,7}, -{29,27,8}, -{29,27,9}, -{29,27,10}, -{29,27,11}, -{29,27,12}, -{29,27,13}, -{29,27,14}, -{29,27,15}, -{29,27,16}, -{29,27,17}, -{29,27,18}, -{29,27,19}, -{29,27,20}, -{29,27,21}, -{29,27,22}, -{29,27,23}, -{29,27,24}, -{29,27,25}, -{29,27,26}, -{29,27,27}, -{29,27,28}, -{29,27,29}, -{29,27,30}, -{29,27,31}, -{29,27,32}, -{29,27,33}, -{29,27,34}, -{29,27,35}, -{29,27,36}, -{29,27,37}, -{29,27,38}, -{29,27,39}, -{29,27,40}, -{29,28,-60}, -{29,28,-59}, -{29,28,-58}, -{29,28,-57}, -{29,28,-56}, -{29,28,-55}, -{29,28,-54}, -{29,28,-53}, -{29,28,-52}, -{29,28,-51}, -{29,28,-50}, -{29,28,-49}, -{29,28,-48}, -{29,28,-47}, -{29,28,-46}, -{29,28,-45}, -{29,28,-44}, -{29,28,-43}, -{29,28,-42}, -{29,28,-41}, -{29,28,-40}, -{29,28,-39}, -{29,28,-38}, -{29,28,-37}, -{29,28,-36}, -{29,28,-35}, -{29,28,-34}, -{29,28,-33}, -{29,28,-32}, -{29,28,-31}, -{29,28,-30}, -{29,28,-29}, -{29,28,-28}, -{29,28,-27}, -{29,28,-26}, -{29,28,-25}, -{29,28,-24}, -{29,28,-23}, -{29,28,-22}, -{29,28,-21}, -{29,28,-20}, -{29,28,-19}, -{29,28,-18}, -{29,28,-17}, -{29,28,-16}, -{29,28,-15}, -{29,28,-14}, -{29,28,-13}, -{29,28,-12}, -{29,28,-11}, -{29,28,-10}, -{29,28,-9}, -{29,28,-8}, -{29,28,-7}, -{29,28,-6}, -{29,28,-5}, -{29,28,-4}, -{29,28,-3}, -{29,28,-2}, -{29,28,-1}, -{29,28,0}, -{29,28,1}, -{29,28,2}, -{29,28,3}, -{29,28,4}, -{29,28,5}, -{29,28,6}, -{29,28,7}, -{29,28,8}, -{29,28,9}, -{29,28,10}, -{29,28,11}, -{29,28,12}, -{29,28,13}, -{29,28,14}, -{29,28,15}, -{29,28,16}, -{29,28,17}, -{29,28,18}, -{29,28,19}, -{29,28,20}, -{29,28,21}, -{29,28,22}, -{29,28,23}, -{29,28,24}, -{29,28,25}, -{29,28,26}, -{29,28,27}, -{29,28,28}, -{29,28,29}, -{29,28,30}, -{29,28,31}, -{29,28,32}, -{29,28,33}, -{29,28,34}, -{29,28,35}, -{29,28,36}, -{29,28,37}, -{29,28,38}, -{29,28,39}, -{29,28,40}, -{29,29,-61}, -{29,29,-60}, -{29,29,-59}, -{29,29,-58}, -{29,29,-57}, -{29,29,-56}, -{29,29,-55}, -{29,29,-54}, -{29,29,-53}, -{29,29,-52}, -{29,29,-51}, -{29,29,-50}, -{29,29,-49}, -{29,29,-48}, -{29,29,-47}, -{29,29,-46}, -{29,29,-45}, -{29,29,-44}, -{29,29,-43}, -{29,29,-42}, -{29,29,-41}, -{29,29,-40}, -{29,29,-39}, -{29,29,-38}, -{29,29,-37}, -{29,29,-36}, -{29,29,-35}, -{29,29,-34}, -{29,29,-33}, -{29,29,-32}, -{29,29,-31}, -{29,29,-30}, -{29,29,-29}, -{29,29,-28}, -{29,29,-27}, -{29,29,-26}, -{29,29,-25}, -{29,29,-24}, -{29,29,-23}, -{29,29,-22}, -{29,29,-21}, -{29,29,-20}, -{29,29,-19}, -{29,29,-18}, -{29,29,-17}, -{29,29,-16}, -{29,29,-15}, -{29,29,-14}, -{29,29,-13}, -{29,29,-12}, -{29,29,-11}, -{29,29,-10}, -{29,29,-9}, -{29,29,-8}, -{29,29,-7}, -{29,29,-6}, -{29,29,-5}, -{29,29,-4}, -{29,29,-3}, -{29,29,-2}, -{29,29,-1}, -{29,29,0}, -{29,29,1}, -{29,29,2}, -{29,29,3}, -{29,29,4}, -{29,29,5}, -{29,29,6}, -{29,29,7}, -{29,29,8}, -{29,29,9}, -{29,29,10}, -{29,29,11}, -{29,29,12}, -{29,29,13}, -{29,29,14}, -{29,29,15}, -{29,29,16}, -{29,29,17}, -{29,29,18}, -{29,29,19}, -{29,29,20}, -{29,29,21}, -{29,29,22}, -{29,29,23}, -{29,29,24}, -{29,29,25}, -{29,29,26}, -{29,29,27}, -{29,29,28}, -{29,29,29}, -{29,29,30}, -{29,29,31}, -{29,29,32}, -{29,29,33}, -{29,29,34}, -{29,29,35}, -{29,29,36}, -{29,29,37}, -{29,29,38}, -{29,29,39}, -{29,29,40}, -{29,30,-62}, -{29,30,-61}, -{29,30,-60}, -{29,30,-59}, -{29,30,-58}, -{29,30,-57}, -{29,30,-56}, -{29,30,-55}, -{29,30,-54}, -{29,30,-53}, -{29,30,-52}, -{29,30,-51}, -{29,30,-50}, -{29,30,-49}, -{29,30,-48}, -{29,30,-47}, -{29,30,-46}, -{29,30,-45}, -{29,30,-44}, -{29,30,-43}, -{29,30,-42}, -{29,30,-41}, -{29,30,-40}, -{29,30,-39}, -{29,30,-38}, -{29,30,-37}, -{29,30,-36}, -{29,30,-35}, -{29,30,-34}, -{29,30,-33}, -{29,30,-32}, -{29,30,-31}, -{29,30,-30}, -{29,30,-29}, -{29,30,-28}, -{29,30,-27}, -{29,30,-26}, -{29,30,-25}, -{29,30,-24}, -{29,30,-23}, -{29,30,-22}, -{29,30,-21}, -{29,30,-20}, -{29,30,-19}, -{29,30,-18}, -{29,30,-17}, -{29,30,-16}, -{29,30,-15}, -{29,30,-14}, -{29,30,-13}, -{29,30,-12}, -{29,30,-11}, -{29,30,-10}, -{29,30,-9}, -{29,30,-8}, -{29,30,-7}, -{29,30,-6}, -{29,30,-5}, -{29,30,-4}, -{29,30,-3}, -{29,30,-2}, -{29,30,-1}, -{29,30,0}, -{29,30,1}, -{29,30,2}, -{29,30,3}, -{29,30,4}, -{29,30,5}, -{29,30,6}, -{29,30,7}, -{29,30,8}, -{29,30,9}, -{29,30,10}, -{29,30,11}, -{29,30,12}, -{29,30,13}, -{29,30,14}, -{29,30,15}, -{29,30,16}, -{29,30,17}, -{29,30,18}, -{29,30,19}, -{29,30,20}, -{29,30,21}, -{29,30,22}, -{29,30,23}, -{29,30,24}, -{29,30,25}, -{29,30,26}, -{29,30,27}, -{29,30,28}, -{29,30,29}, -{29,30,30}, -{29,30,31}, -{29,30,32}, -{29,30,33}, -{29,30,34}, -{29,30,35}, -{29,30,36}, -{29,30,37}, -{29,30,38}, -{29,30,39}, -{29,30,40}, -{29,31,-63}, -{29,31,-62}, -{29,31,-61}, -{29,31,-60}, -{29,31,-59}, -{29,31,-58}, -{29,31,-57}, -{29,31,-56}, -{29,31,-55}, -{29,31,-54}, -{29,31,-53}, -{29,31,-52}, -{29,31,-51}, -{29,31,-50}, -{29,31,-49}, -{29,31,-48}, -{29,31,-47}, -{29,31,-46}, -{29,31,-45}, -{29,31,-44}, -{29,31,-43}, -{29,31,-42}, -{29,31,-41}, -{29,31,-40}, -{29,31,-39}, -{29,31,-38}, -{29,31,-37}, -{29,31,-36}, -{29,31,-35}, -{29,31,-34}, -{29,31,-33}, -{29,31,-32}, -{29,31,-31}, -{29,31,-30}, -{29,31,-29}, -{29,31,-28}, -{29,31,-27}, -{29,31,-26}, -{29,31,-25}, -{29,31,-24}, -{29,31,-23}, -{29,31,-22}, -{29,31,-21}, -{29,31,-20}, -{29,31,-19}, -{29,31,-18}, -{29,31,-17}, -{29,31,-16}, -{29,31,-15}, -{29,31,-14}, -{29,31,-13}, -{29,31,-12}, -{29,31,-11}, -{29,31,-10}, -{29,31,-9}, -{29,31,-8}, -{29,31,-7}, -{29,31,-6}, -{29,31,-5}, -{29,31,-4}, -{29,31,-3}, -{29,31,-2}, -{29,31,-1}, -{29,31,0}, -{29,31,1}, -{29,31,2}, -{29,31,3}, -{29,31,4}, -{29,31,5}, -{29,31,6}, -{29,31,7}, -{29,31,8}, -{29,31,9}, -{29,31,10}, -{29,31,11}, -{29,31,12}, -{29,31,13}, -{29,31,14}, -{29,31,15}, -{29,31,16}, -{29,31,17}, -{29,31,18}, -{29,31,19}, -{29,31,20}, -{29,31,21}, -{29,31,22}, -{29,31,23}, -{29,31,24}, -{29,31,25}, -{29,31,26}, -{29,31,27}, -{29,31,28}, -{29,31,29}, -{29,31,30}, -{29,31,31}, -{29,31,32}, -{29,31,33}, -{29,31,34}, -{29,31,35}, -{29,31,36}, -{29,31,37}, -{29,31,38}, -{29,31,39}, -{29,31,40}, -{29,32,-64}, -{29,32,-63}, -{29,32,-62}, -{29,32,-61}, -{29,32,-60}, -{29,32,-59}, -{29,32,-58}, -{29,32,-57}, -{29,32,-56}, -{29,32,-55}, -{29,32,-54}, -{29,32,-53}, -{29,32,-52}, -{29,32,-51}, -{29,32,-50}, -{29,32,-49}, -{29,32,-48}, -{29,32,-47}, -{29,32,-46}, -{29,32,-45}, -{29,32,-44}, -{29,32,-43}, -{29,32,-42}, -{29,32,-41}, -{29,32,-40}, -{29,32,-39}, -{29,32,-38}, -{29,32,-37}, -{29,32,-36}, -{29,32,-35}, -{29,32,-34}, -{29,32,-33}, -{29,32,-32}, -{29,32,-31}, -{29,32,-30}, -{29,32,-29}, -{29,32,-28}, -{29,32,-27}, -{29,32,-26}, -{29,32,-25}, -{29,32,-24}, -{29,32,-23}, -{29,32,-22}, -{29,32,-21}, -{29,32,-20}, -{29,32,-19}, -{29,32,-18}, -{29,32,-17}, -{29,32,-16}, -{29,32,-15}, -{29,32,-14}, -{29,32,-13}, -{29,32,-12}, -{29,32,-11}, -{29,32,-10}, -{29,32,-9}, -{29,32,-8}, -{29,32,-7}, -{29,32,-6}, -{29,32,-5}, -{29,32,-4}, -{29,32,-3}, -{29,32,-2}, -{29,32,-1}, -{29,32,0}, -{29,32,1}, -{29,32,2}, -{29,32,3}, -{29,32,4}, -{29,32,5}, -{29,32,6}, -{29,32,7}, -{29,32,8}, -{29,32,9}, -{29,32,10}, -{29,32,11}, -{29,32,12}, -{29,32,13}, -{29,32,14}, -{29,32,15}, -{29,32,16}, -{29,32,17}, -{29,32,18}, -{29,32,19}, -{29,32,20}, -{29,32,21}, -{29,32,22}, -{29,32,23}, -{29,32,24}, -{29,32,25}, -{29,32,26}, -{29,32,27}, -{29,32,28}, -{29,32,29}, -{29,32,30}, -{29,32,31}, -{29,32,32}, -{29,32,33}, -{29,32,34}, -{29,32,35}, -{29,32,36}, -{29,32,37}, -{29,32,38}, -{29,32,39}, -{29,32,40}, -{29,33,-65}, -{29,33,-64}, -{29,33,-63}, -{29,33,-62}, -{29,33,-61}, -{29,33,-60}, -{29,33,-59}, -{29,33,-58}, -{29,33,-57}, -{29,33,-56}, -{29,33,-55}, -{29,33,-54}, -{29,33,-53}, -{29,33,-52}, -{29,33,-51}, -{29,33,-50}, -{29,33,-49}, -{29,33,-48}, -{29,33,-47}, -{29,33,-46}, -{29,33,-45}, -{29,33,-44}, -{29,33,-43}, -{29,33,-42}, -{29,33,-41}, -{29,33,-40}, -{29,33,-39}, -{29,33,-38}, -{29,33,-37}, -{29,33,-36}, -{29,33,-35}, -{29,33,-34}, -{29,33,-33}, -{29,33,-32}, -{29,33,-31}, -{29,33,-30}, -{29,33,-29}, -{29,33,-28}, -{29,33,-27}, -{29,33,-26}, -{29,33,-25}, -{29,33,-24}, -{29,33,-23}, -{29,33,-22}, -{29,33,-21}, -{29,33,-20}, -{29,33,-19}, -{29,33,-18}, -{29,33,-17}, -{29,33,-16}, -{29,33,-15}, -{29,33,-14}, -{29,33,-13}, -{29,33,-12}, -{29,33,-11}, -{29,33,-10}, -{29,33,-9}, -{29,33,-8}, -{29,33,-7}, -{29,33,-6}, -{29,33,-5}, -{29,33,-4}, -{29,33,-3}, -{29,33,-2}, -{29,33,-1}, -{29,33,0}, -{29,33,1}, -{29,33,2}, -{29,33,3}, -{29,33,4}, -{29,33,5}, -{29,33,6}, -{29,33,7}, -{29,33,8}, -{29,33,9}, -{29,33,10}, -{29,33,11}, -{29,33,12}, -{29,33,13}, -{29,33,14}, -{29,33,15}, -{29,33,16}, -{29,33,17}, -{29,33,18}, -{29,33,19}, -{29,33,20}, -{29,33,21}, -{29,33,22}, -{29,33,23}, -{29,33,24}, -{29,33,25}, -{29,33,26}, -{29,33,27}, -{29,33,28}, -{29,33,29}, -{29,33,30}, -{29,33,31}, -{29,33,32}, -{29,33,33}, -{29,33,34}, -{29,33,35}, -{29,33,36}, -{29,33,37}, -{29,33,38}, -{29,33,39}, -{29,33,40}, -{29,34,-66}, -{29,34,-65}, -{29,34,-64}, -{29,34,-63}, -{29,34,-62}, -{29,34,-61}, -{29,34,-60}, -{29,34,-59}, -{29,34,-58}, -{29,34,-57}, -{29,34,-56}, -{29,34,-55}, -{29,34,-54}, -{29,34,-53}, -{29,34,-52}, -{29,34,-51}, -{29,34,-50}, -{29,34,-49}, -{29,34,-48}, -{29,34,-47}, -{29,34,-46}, -{29,34,-45}, -{29,34,-44}, -{29,34,-43}, -{29,34,-42}, -{29,34,-41}, -{29,34,-40}, -{29,34,-39}, -{29,34,-38}, -{29,34,-37}, -{29,34,-36}, -{29,34,-35}, -{29,34,-34}, -{29,34,-33}, -{29,34,-32}, -{29,34,-31}, -{29,34,-30}, -{29,34,-29}, -{29,34,-28}, -{29,34,-27}, -{29,34,-26}, -{29,34,-25}, -{29,34,-24}, -{29,34,-23}, -{29,34,-22}, -{29,34,-21}, -{29,34,-20}, -{29,34,-19}, -{29,34,-18}, -{29,34,-17}, -{29,34,-16}, -{29,34,-15}, -{29,34,-14}, -{29,34,-13}, -{29,34,-12}, -{29,34,-11}, -{29,34,-10}, -{29,34,-9}, -{29,34,-8}, -{29,34,-7}, -{29,34,-6}, -{29,34,-5}, -{29,34,-4}, -{29,34,-3}, -{29,34,-2}, -{29,34,-1}, -{29,34,0}, -{29,34,1}, -{29,34,2}, -{29,34,3}, -{29,34,4}, -{29,34,5}, -{29,34,6}, -{29,34,7}, -{29,34,8}, -{29,34,9}, -{29,34,10}, -{29,34,11}, -{29,34,12}, -{29,34,13}, -{29,34,14}, -{29,34,15}, -{29,34,16}, -{29,34,17}, -{29,34,18}, -{29,34,19}, -{29,34,20}, -{29,34,21}, -{29,34,22}, -{29,34,23}, -{29,34,24}, -{29,34,25}, -{29,34,26}, -{29,34,27}, -{29,34,28}, -{29,34,29}, -{29,34,30}, -{29,34,31}, -{29,34,32}, -{29,34,33}, -{29,34,34}, -{29,34,35}, -{29,34,36}, -{29,34,37}, -{29,34,38}, -{29,34,39}, -{29,34,40}, -{29,35,-67}, -{29,35,-66}, -{29,35,-65}, -{29,35,-64}, -{29,35,-63}, -{29,35,-62}, -{29,35,-61}, -{29,35,-60}, -{29,35,-59}, -{29,35,-58}, -{29,35,-57}, -{29,35,-56}, -{29,35,-55}, -{29,35,-54}, -{29,35,-53}, -{29,35,-52}, -{29,35,-51}, -{29,35,-50}, -{29,35,-49}, -{29,35,-48}, -{29,35,-47}, -{29,35,-46}, -{29,35,-45}, -{29,35,-44}, -{29,35,-43}, -{29,35,-42}, -{29,35,-41}, -{29,35,-40}, -{29,35,-39}, -{29,35,-38}, -{29,35,-37}, -{29,35,-36}, -{29,35,-35}, -{29,35,-34}, -{29,35,-33}, -{29,35,-32}, -{29,35,-31}, -{29,35,-30}, -{29,35,-29}, -{29,35,-28}, -{29,35,-27}, -{29,35,-26}, -{29,35,-25}, -{29,35,-24}, -{29,35,-23}, -{29,35,-22}, -{29,35,-21}, -{29,35,-20}, -{29,35,-19}, -{29,35,-18}, -{29,35,-17}, -{29,35,-16}, -{29,35,-15}, -{29,35,-14}, -{29,35,-13}, -{29,35,-12}, -{29,35,-11}, -{29,35,-10}, -{29,35,-9}, -{29,35,-8}, -{29,35,-7}, -{29,35,-6}, -{29,35,-5}, -{29,35,-4}, -{29,35,-3}, -{29,35,-2}, -{29,35,-1}, -{29,35,0}, -{29,35,1}, -{29,35,2}, -{29,35,3}, -{29,35,4}, -{29,35,5}, -{29,35,6}, -{29,35,7}, -{29,35,8}, -{29,35,9}, -{29,35,10}, -{29,35,11}, -{29,35,12}, -{29,35,13}, -{29,35,14}, -{29,35,15}, -{29,35,16}, -{29,35,17}, -{29,35,18}, -{29,35,19}, -{29,35,20}, -{29,35,21}, -{29,35,22}, -{29,35,23}, -{29,35,24}, -{29,35,25}, -{29,35,26}, -{29,35,27}, -{29,35,28}, -{29,35,29}, -{29,35,30}, -{29,35,31}, -{29,35,32}, -{29,35,33}, -{29,35,34}, -{29,35,35}, -{29,35,36}, -{29,35,37}, -{29,35,38}, -{29,35,39}, -{29,35,40}, -{29,36,-68}, -{29,36,-67}, -{29,36,-66}, -{29,36,-65}, -{29,36,-64}, -{29,36,-63}, -{29,36,-62}, -{29,36,-61}, -{29,36,-60}, -{29,36,-59}, -{29,36,-58}, -{29,36,-57}, -{29,36,-56}, -{29,36,-55}, -{29,36,-54}, -{29,36,-53}, -{29,36,-52}, -{29,36,-51}, -{29,36,-50}, -{29,36,-49}, -{29,36,-48}, -{29,36,-47}, -{29,36,-46}, -{29,36,-45}, -{29,36,-44}, -{29,36,-43}, -{29,36,-42}, -{29,36,-41}, -{29,36,-40}, -{29,36,-39}, -{29,36,-38}, -{29,36,-37}, -{29,36,-36}, -{29,36,-35}, -{29,36,-34}, -{29,36,-33}, -{29,36,-32}, -{29,36,-31}, -{29,36,-30}, -{29,36,-29}, -{29,36,-28}, -{29,36,-27}, -{29,36,-26}, -{29,36,-25}, -{29,36,-24}, -{29,36,-23}, -{29,36,-22}, -{29,36,-21}, -{29,36,-20}, -{29,36,-19}, -{29,36,-18}, -{29,36,-17}, -{29,36,-16}, -{29,36,-15}, -{29,36,-14}, -{29,36,-13}, -{29,36,-12}, -{29,36,-11}, -{29,36,-10}, -{29,36,-9}, -{29,36,-8}, -{29,36,-7}, -{29,36,-6}, -{29,36,-5}, -{29,36,-4}, -{29,36,-3}, -{29,36,-2}, -{29,36,-1}, -{29,36,0}, -{29,36,1}, -{29,36,2}, -{29,36,3}, -{29,36,4}, -{29,36,5}, -{29,36,6}, -{29,36,7}, -{29,36,8}, -{29,36,9}, -{29,36,10}, -{29,36,11}, -{29,36,12}, -{29,36,13}, -{29,36,14}, -{29,36,15}, -{29,36,16}, -{29,36,17}, -{29,36,18}, -{29,36,19}, -{29,36,20}, -{29,36,21}, -{29,36,22}, -{29,36,23}, -{29,36,24}, -{29,36,25}, -{29,36,26}, -{29,36,27}, -{29,36,28}, -{29,36,29}, -{29,36,30}, -{29,36,31}, -{29,36,32}, -{29,36,33}, -{29,36,34}, -{29,36,35}, -{29,36,36}, -{29,36,37}, -{29,36,38}, -{29,36,39}, -{29,36,40}, -{29,36,41}, -{29,37,-69}, -{29,37,-68}, -{29,37,-67}, -{29,37,-66}, -{29,37,-65}, -{29,37,-64}, -{29,37,-63}, -{29,37,-62}, -{29,37,-61}, -{29,37,-60}, -{29,37,-59}, -{29,37,-58}, -{29,37,-57}, -{29,37,-56}, -{29,37,-55}, -{29,37,-54}, -{29,37,-53}, -{29,37,-52}, -{29,37,-51}, -{29,37,-50}, -{29,37,-49}, -{29,37,-48}, -{29,37,-47}, -{29,37,-46}, -{29,37,-45}, -{29,37,-44}, -{29,37,-43}, -{29,37,-42}, -{29,37,-41}, -{29,37,-40}, -{29,37,-39}, -{29,37,-38}, -{29,37,-37}, -{29,37,-36}, -{29,37,-35}, -{29,37,-34}, -{29,37,-33}, -{29,37,-32}, -{29,37,-31}, -{29,37,-30}, -{29,37,-29}, -{29,37,-28}, -{29,37,-27}, -{29,37,-26}, -{29,37,-25}, -{29,37,-24}, -{29,37,-23}, -{29,37,-22}, -{29,37,-21}, -{29,37,-20}, -{29,37,-19}, -{29,37,-18}, -{29,37,-17}, -{29,37,-16}, -{29,37,-15}, -{29,37,-14}, -{29,37,-13}, -{29,37,-12}, -{29,37,-11}, -{29,37,-10}, -{29,37,-9}, -{29,37,-8}, -{29,37,-7}, -{29,37,-6}, -{29,37,-5}, -{29,37,-4}, -{29,37,-3}, -{29,37,-2}, -{29,37,-1}, -{29,37,0}, -{29,37,1}, -{29,37,2}, -{29,37,3}, -{29,37,4}, -{29,37,5}, -{29,37,6}, -{29,37,7}, -{29,37,8}, -{29,37,9}, -{29,37,10}, -{29,37,11}, -{29,37,12}, -{29,37,13}, -{29,37,14}, -{29,37,15}, -{29,37,16}, -{29,37,17}, -{29,37,18}, -{29,37,19}, -{29,37,20}, -{29,37,21}, -{29,37,22}, -{29,37,23}, -{29,37,24}, -{29,37,25}, -{29,37,26}, -{29,37,27}, -{29,37,28}, -{29,37,29}, -{29,37,30}, -{29,37,31}, -{29,37,32}, -{29,37,33}, -{29,37,34}, -{29,37,35}, -{29,37,36}, -{29,37,37}, -{29,37,38}, -{29,37,39}, -{29,37,40}, -{29,37,41}, -{29,38,-70}, -{29,38,-69}, -{29,38,-68}, -{29,38,-67}, -{29,38,-66}, -{29,38,-65}, -{29,38,-64}, -{29,38,-63}, -{29,38,-62}, -{29,38,-61}, -{29,38,-60}, -{29,38,-59}, -{29,38,-58}, -{29,38,-57}, -{29,38,-56}, -{29,38,-55}, -{29,38,-54}, -{29,38,-53}, -{29,38,-52}, -{29,38,-51}, -{29,38,-50}, -{29,38,-49}, -{29,38,-48}, -{29,38,-47}, -{29,38,-46}, -{29,38,-45}, -{29,38,-44}, -{29,38,-43}, -{29,38,-42}, -{29,38,-41}, -{29,38,-40}, -{29,38,-39}, -{29,38,-38}, -{29,38,-37}, -{29,38,-36}, -{29,38,-35}, -{29,38,-34}, -{29,38,-33}, -{29,38,-32}, -{29,38,-31}, -{29,38,-30}, -{29,38,-29}, -{29,38,-28}, -{29,38,-27}, -{29,38,-26}, -{29,38,-25}, -{29,38,-24}, -{29,38,-23}, -{29,38,-22}, -{29,38,-21}, -{29,38,-20}, -{29,38,-19}, -{29,38,-18}, -{29,38,-17}, -{29,38,-16}, -{29,38,-15}, -{29,38,-14}, -{29,38,-13}, -{29,38,-12}, -{29,38,-11}, -{29,38,-10}, -{29,38,-9}, -{29,38,-8}, -{29,38,-7}, -{29,38,-6}, -{29,38,-5}, -{29,38,-4}, -{29,38,-3}, -{29,38,-2}, -{29,38,-1}, -{29,38,0}, -{29,38,1}, -{29,38,2}, -{29,38,3}, -{29,38,4}, -{29,38,5}, -{29,38,6}, -{29,38,7}, -{29,38,8}, -{29,38,9}, -{29,38,10}, -{29,38,11}, -{29,38,12}, -{29,38,13}, -{29,38,14}, -{29,38,15}, -{29,38,16}, -{29,38,17}, -{29,38,18}, -{29,38,19}, -{29,38,20}, -{29,38,21}, -{29,38,22}, -{29,38,23}, -{29,38,24}, -{29,38,25}, -{29,38,26}, -{29,38,27}, -{29,38,28}, -{29,38,29}, -{29,38,30}, -{29,38,31}, -{29,38,32}, -{29,38,33}, -{29,38,34}, -{29,38,35}, -{29,38,36}, -{29,38,37}, -{29,38,38}, -{29,38,39}, -{29,38,40}, -{29,38,41}, -{29,39,-71}, -{29,39,-70}, -{29,39,-69}, -{29,39,-68}, -{29,39,-67}, -{29,39,-66}, -{29,39,-65}, -{29,39,-64}, -{29,39,-63}, -{29,39,-62}, -{29,39,-61}, -{29,39,-60}, -{29,39,-59}, -{29,39,-58}, -{29,39,-57}, -{29,39,-56}, -{29,39,-55}, -{29,39,-54}, -{29,39,-53}, -{29,39,-52}, -{29,39,-51}, -{29,39,-50}, -{29,39,-49}, -{29,39,-48}, -{29,39,-47}, -{29,39,-46}, -{29,39,-45}, -{29,39,-44}, -{29,39,-43}, -{29,39,-42}, -{29,39,-41}, -{29,39,-40}, -{29,39,-39}, -{29,39,-38}, -{29,39,-37}, -{29,39,-36}, -{29,39,-35}, -{29,39,-34}, -{29,39,-33}, -{29,39,-32}, -{29,39,-31}, -{29,39,-30}, -{29,39,-29}, -{29,39,-28}, -{29,39,-27}, -{29,39,-26}, -{29,39,-25}, -{29,39,-24}, -{29,39,-23}, -{29,39,-22}, -{29,39,-21}, -{29,39,-20}, -{29,39,-19}, -{29,39,-18}, -{29,39,-17}, -{29,39,-16}, -{29,39,-15}, -{29,39,-14}, -{29,39,-13}, -{29,39,-12}, -{29,39,-11}, -{29,39,-10}, -{29,39,-9}, -{29,39,-8}, -{29,39,-7}, -{29,39,-6}, -{29,39,-5}, -{29,39,-4}, -{29,39,-3}, -{29,39,-2}, -{29,39,-1}, -{29,39,0}, -{29,39,1}, -{29,39,2}, -{29,39,3}, -{29,39,4}, -{29,39,5}, -{29,39,6}, -{29,39,7}, -{29,39,8}, -{29,39,9}, -{29,39,10}, -{29,39,11}, -{29,39,12}, -{29,39,13}, -{29,39,14}, -{29,39,15}, -{29,39,16}, -{29,39,17}, -{29,39,18}, -{29,39,19}, -{29,39,20}, -{29,39,21}, -{29,39,22}, -{29,39,23}, -{29,39,24}, -{29,39,25}, -{29,39,26}, -{29,39,27}, -{29,39,28}, -{29,39,29}, -{29,39,30}, -{29,39,31}, -{29,39,32}, -{29,39,33}, -{29,39,34}, -{29,39,35}, -{29,39,36}, -{29,39,37}, -{29,39,38}, -{29,39,39}, -{29,39,40}, -{29,39,41}, -{29,40,-71}, -{29,40,-70}, -{29,40,-69}, -{29,40,-68}, -{29,40,-67}, -{29,40,-66}, -{29,40,-65}, -{29,40,-64}, -{29,40,-63}, -{29,40,-62}, -{29,40,-61}, -{29,40,-60}, -{29,40,-59}, -{29,40,-58}, -{29,40,-57}, -{29,40,-56}, -{29,40,-55}, -{29,40,-54}, -{29,40,-53}, -{29,40,-52}, -{29,40,-51}, -{29,40,-50}, -{29,40,-49}, -{29,40,-48}, -{29,40,-47}, -{29,40,-46}, -{29,40,-45}, -{29,40,-44}, -{29,40,-43}, -{29,40,-42}, -{29,40,-41}, -{29,40,-40}, -{29,40,-39}, -{29,40,-38}, -{29,40,-37}, -{29,40,-36}, -{29,40,-35}, -{29,40,-34}, -{29,40,-33}, -{29,40,-32}, -{29,40,-31}, -{29,40,-30}, -{29,40,-29}, -{29,40,-28}, -{29,40,-27}, -{29,40,-26}, -{29,40,-25}, -{29,40,-24}, -{29,40,-23}, -{29,40,-22}, -{29,40,-21}, -{29,40,-20}, -{29,40,-19}, -{29,40,-18}, -{29,40,-17}, -{29,40,-16}, -{29,40,-15}, -{29,40,-14}, -{29,40,-13}, -{29,40,-12}, -{29,40,-11}, -{29,40,-10}, -{29,40,-9}, -{29,40,-8}, -{29,40,-7}, -{29,40,-6}, -{29,40,-5}, -{29,40,-4}, -{29,40,-3}, -{29,40,-2}, -{29,40,-1}, -{29,40,0}, -{29,40,1}, -{29,40,2}, -{29,40,3}, -{29,40,4}, -{29,40,5}, -{29,40,6}, -{29,40,7}, -{29,40,8}, -{29,40,9}, -{29,40,10}, -{29,40,11}, -{29,40,12}, -{29,40,13}, -{29,40,14}, -{29,40,15}, -{29,40,16}, -{29,40,17}, -{29,40,18}, -{29,40,19}, -{29,40,20}, -{29,40,21}, -{29,40,22}, -{29,40,23}, -{29,40,24}, -{29,40,25}, -{29,40,26}, -{29,40,27}, -{29,40,28}, -{29,40,29}, -{29,40,30}, -{29,40,31}, -{29,40,32}, -{29,40,33}, -{29,40,34}, -{29,40,35}, -{29,40,36}, -{29,40,37}, -{29,40,38}, -{29,40,39}, -{29,40,40}, -{29,40,41}, -{29,41,-72}, -{29,41,-71}, -{29,41,-70}, -{29,41,-69}, -{29,41,-68}, -{29,41,-67}, -{29,41,-66}, -{29,41,-65}, -{29,41,-64}, -{29,41,-63}, -{29,41,-62}, -{29,41,-61}, -{29,41,-60}, -{29,41,-59}, -{29,41,-58}, -{29,41,-57}, -{29,41,-56}, -{29,41,-55}, -{29,41,-54}, -{29,41,-53}, -{29,41,-52}, -{29,41,-51}, -{29,41,-50}, -{29,41,-49}, -{29,41,-48}, -{29,41,-47}, -{29,41,-46}, -{29,41,-45}, -{29,41,-44}, -{29,41,-43}, -{29,41,-42}, -{29,41,-41}, -{29,41,-40}, -{29,41,-39}, -{29,41,-38}, -{29,41,-37}, -{29,41,-36}, -{29,41,-35}, -{29,41,-34}, -{29,41,-33}, -{29,41,-32}, -{29,41,-31}, -{29,41,-30}, -{29,41,-29}, -{29,41,-28}, -{29,41,-27}, -{29,41,-26}, -{29,41,-25}, -{29,41,-24}, -{29,41,-23}, -{29,41,-22}, -{29,41,-21}, -{29,41,-20}, -{29,41,-19}, -{29,41,-18}, -{29,41,-17}, -{29,41,-16}, -{29,41,-15}, -{29,41,-14}, -{29,41,-13}, -{29,41,-12}, -{29,41,-11}, -{29,41,-10}, -{29,41,-9}, -{29,41,-8}, -{29,41,-7}, -{29,41,-6}, -{29,41,-5}, -{29,41,-4}, -{29,41,-3}, -{29,41,-2}, -{29,41,-1}, -{29,41,0}, -{29,41,1}, -{29,41,2}, -{29,41,3}, -{29,41,4}, -{29,41,5}, -{29,41,6}, -{29,41,7}, -{29,41,8}, -{29,41,9}, -{29,41,10}, -{29,41,11}, -{29,41,12}, -{29,41,13}, -{29,41,14}, -{29,41,15}, -{29,41,16}, -{29,41,17}, -{29,41,18}, -{29,41,19}, -{29,41,20}, -{29,41,21}, -{29,41,22}, -{29,41,23}, -{29,41,24}, -{29,41,25}, -{29,41,26}, -{29,41,27}, -{29,41,28}, -{29,41,29}, -{29,41,30}, -{29,41,31}, -{29,41,32}, -{29,41,33}, -{29,41,34}, -{29,41,35}, -{29,41,36}, -{29,41,37}, -{29,41,38}, -{29,41,39}, -{29,41,40}, -{29,41,41}, -{29,42,-73}, -{29,42,-72}, -{29,42,-71}, -{29,42,-70}, -{29,42,-69}, -{29,42,-68}, -{29,42,-67}, -{29,42,-66}, -{29,42,-65}, -{29,42,-64}, -{29,42,-63}, -{29,42,-62}, -{29,42,-61}, -{29,42,-60}, -{29,42,-59}, -{29,42,-58}, -{29,42,-57}, -{29,42,-56}, -{29,42,-55}, -{29,42,-54}, -{29,42,-53}, -{29,42,-52}, -{29,42,-51}, -{29,42,-50}, -{29,42,-49}, -{29,42,-48}, -{29,42,-47}, -{29,42,-46}, -{29,42,-45}, -{29,42,-44}, -{29,42,-43}, -{29,42,-42}, -{29,42,-41}, -{29,42,-40}, -{29,42,-39}, -{29,42,-38}, -{29,42,-37}, -{29,42,-36}, -{29,42,-35}, -{29,42,-34}, -{29,42,-33}, -{29,42,-32}, -{29,42,-31}, -{29,42,-30}, -{29,42,-29}, -{29,42,-28}, -{29,42,-27}, -{29,42,-26}, -{29,42,-25}, -{29,42,-24}, -{29,42,-23}, -{29,42,-22}, -{29,42,-21}, -{29,42,-20}, -{29,42,-19}, -{29,42,-18}, -{29,42,-17}, -{29,42,-16}, -{29,42,-15}, -{29,42,-14}, -{29,42,-13}, -{29,42,-12}, -{29,42,-11}, -{29,42,-10}, -{29,42,-9}, -{29,42,-8}, -{29,42,-7}, -{29,42,-6}, -{29,42,-5}, -{29,42,-4}, -{29,42,-3}, -{29,42,-2}, -{29,42,-1}, -{29,42,0}, -{29,42,1}, -{29,42,2}, -{29,42,3}, -{29,42,4}, -{29,42,5}, -{29,42,6}, -{29,42,7}, -{29,42,8}, -{29,42,9}, -{29,42,10}, -{29,42,11}, -{29,42,12}, -{29,42,13}, -{29,42,14}, -{29,42,15}, -{29,42,16}, -{29,42,17}, -{29,42,18}, -{29,42,19}, -{29,42,20}, -{29,42,21}, -{29,42,22}, -{29,42,23}, -{29,42,24}, -{29,42,25}, -{29,42,26}, -{29,42,27}, -{29,42,28}, -{29,42,29}, -{29,42,30}, -{29,42,31}, -{29,42,32}, -{29,42,33}, -{29,42,34}, -{29,42,35}, -{29,42,36}, -{29,42,37}, -{29,42,38}, -{29,42,39}, -{29,42,40}, -{29,42,41}, -{29,43,-74}, -{29,43,-73}, -{29,43,-72}, -{29,43,-71}, -{29,43,-70}, -{29,43,-69}, -{29,43,-68}, -{29,43,-67}, -{29,43,-66}, -{29,43,-65}, -{29,43,-64}, -{29,43,-63}, -{29,43,-62}, -{29,43,-61}, -{29,43,-60}, -{29,43,-59}, -{29,43,-58}, -{29,43,-57}, -{29,43,-56}, -{29,43,-55}, -{29,43,-54}, -{29,43,-53}, -{29,43,-52}, -{29,43,-51}, -{29,43,-50}, -{29,43,-49}, -{29,43,-48}, -{29,43,-47}, -{29,43,-46}, -{29,43,-45}, -{29,43,-44}, -{29,43,-43}, -{29,43,-42}, -{29,43,-41}, -{29,43,-40}, -{29,43,-39}, -{29,43,-38}, -{29,43,-37}, -{29,43,-36}, -{29,43,-35}, -{29,43,-34}, -{29,43,-33}, -{29,43,-32}, -{29,43,-31}, -{29,43,-30}, -{29,43,-29}, -{29,43,-28}, -{29,43,-27}, -{29,43,-26}, -{29,43,-25}, -{29,43,-24}, -{29,43,-23}, -{29,43,-22}, -{29,43,-21}, -{29,43,-20}, -{29,43,-19}, -{29,43,-18}, -{29,43,-17}, -{29,43,-16}, -{29,43,-15}, -{29,43,-14}, -{29,43,-13}, -{29,43,-12}, -{29,43,-11}, -{29,43,-10}, -{29,43,-9}, -{29,43,-8}, -{29,43,-7}, -{29,43,-6}, -{29,43,-5}, -{29,43,-4}, -{29,43,-3}, -{29,43,-2}, -{29,43,-1}, -{29,43,0}, -{29,43,1}, -{29,43,2}, -{29,43,3}, -{29,43,4}, -{29,43,5}, -{29,43,6}, -{29,43,7}, -{29,43,8}, -{29,43,9}, -{29,43,10}, -{29,43,11}, -{29,43,12}, -{29,43,13}, -{29,43,14}, -{29,43,15}, -{29,43,16}, -{29,43,17}, -{29,43,18}, -{29,43,19}, -{29,43,20}, -{29,43,21}, -{29,43,22}, -{29,43,23}, -{29,43,24}, -{29,43,25}, -{29,43,26}, -{29,43,27}, -{29,43,28}, -{29,43,29}, -{29,43,30}, -{29,43,31}, -{29,43,32}, -{29,43,33}, -{29,43,34}, -{29,43,35}, -{29,43,36}, -{29,43,37}, -{29,43,38}, -{29,43,39}, -{29,43,40}, -{29,43,41}, -{29,44,-75}, -{29,44,-74}, -{29,44,-73}, -{29,44,-72}, -{29,44,-71}, -{29,44,-70}, -{29,44,-69}, -{29,44,-68}, -{29,44,-67}, -{29,44,-66}, -{29,44,-65}, -{29,44,-64}, -{29,44,-63}, -{29,44,-62}, -{29,44,-61}, -{29,44,-60}, -{29,44,-59}, -{29,44,-58}, -{29,44,-57}, -{29,44,-56}, -{29,44,-55}, -{29,44,-54}, -{29,44,-53}, -{29,44,-52}, -{29,44,-51}, -{29,44,-50}, -{29,44,-49}, -{29,44,-48}, -{29,44,-47}, -{29,44,-46}, -{29,44,-45}, -{29,44,-44}, -{29,44,-43}, -{29,44,-42}, -{29,44,-41}, -{29,44,-40}, -{29,44,-39}, -{29,44,-38}, -{29,44,-37}, -{29,44,-36}, -{29,44,-35}, -{29,44,-34}, -{29,44,-33}, -{29,44,-32}, -{29,44,-31}, -{29,44,-30}, -{29,44,-29}, -{29,44,-28}, -{29,44,-27}, -{29,44,-26}, -{29,44,-25}, -{29,44,-24}, -{29,44,-23}, -{29,44,-22}, -{29,44,-21}, -{29,44,-20}, -{29,44,-19}, -{29,44,-18}, -{29,44,-17}, -{29,44,-16}, -{29,44,-15}, -{29,44,-14}, -{29,44,-13}, -{29,44,-12}, -{29,44,-11}, -{29,44,-10}, -{29,44,-9}, -{29,44,-8}, -{29,44,-7}, -{29,44,-6}, -{29,44,-5}, -{29,44,-4}, -{29,44,-3}, -{29,44,-2}, -{29,44,-1}, -{29,44,0}, -{29,44,1}, -{29,44,2}, -{29,44,3}, -{29,44,4}, -{29,44,5}, -{29,44,6}, -{29,44,7}, -{29,44,8}, -{29,44,9}, -{29,44,10}, -{29,44,11}, -{29,44,12}, -{29,44,13}, -{29,44,14}, -{29,44,15}, -{29,44,16}, -{29,44,17}, -{29,44,18}, -{29,44,19}, -{29,44,20}, -{29,44,21}, -{29,44,22}, -{29,44,23}, -{29,44,24}, -{29,44,25}, -{29,44,26}, -{29,44,27}, -{29,44,28}, -{29,44,29}, -{29,44,30}, -{29,44,31}, -{29,44,32}, -{29,44,33}, -{29,44,34}, -{29,44,35}, -{29,44,36}, -{29,44,37}, -{29,44,38}, -{29,44,39}, -{29,44,40}, -{29,44,41}, -{29,45,-76}, -{29,45,-75}, -{29,45,-74}, -{29,45,-73}, -{29,45,-72}, -{29,45,-71}, -{29,45,-70}, -{29,45,-69}, -{29,45,-68}, -{29,45,-67}, -{29,45,-66}, -{29,45,-65}, -{29,45,-64}, -{29,45,-63}, -{29,45,-62}, -{29,45,-61}, -{29,45,-60}, -{29,45,-59}, -{29,45,-58}, -{29,45,-57}, -{29,45,-56}, -{29,45,-55}, -{29,45,-54}, -{29,45,-53}, -{29,45,-52}, -{29,45,-51}, -{29,45,-50}, -{29,45,-49}, -{29,45,-48}, -{29,45,-47}, -{29,45,-46}, -{29,45,-45}, -{29,45,-44}, -{29,45,-43}, -{29,45,-42}, -{29,45,-41}, -{29,45,-40}, -{29,45,-39}, -{29,45,-38}, -{29,45,-37}, -{29,45,-36}, -{29,45,-35}, -{29,45,-34}, -{29,45,-33}, -{29,45,-32}, -{29,45,-31}, -{29,45,-30}, -{29,45,-29}, -{29,45,-28}, -{29,45,-27}, -{29,45,-26}, -{29,45,-25}, -{29,45,-24}, -{29,45,-23}, -{29,45,-22}, -{29,45,-21}, -{29,45,-20}, -{29,45,-19}, -{29,45,-18}, -{29,45,-17}, -{29,45,-16}, -{29,45,-15}, -{29,45,-14}, -{29,45,-13}, -{29,45,-12}, -{29,45,-11}, -{29,45,-10}, -{29,45,-9}, -{29,45,-8}, -{29,45,-7}, -{29,45,-6}, -{29,45,-5}, -{29,45,-4}, -{29,45,-3}, -{29,45,-2}, -{29,45,-1}, -{29,45,0}, -{29,45,1}, -{29,45,2}, -{29,45,3}, -{29,45,4}, -{29,45,5}, -{29,45,6}, -{29,45,7}, -{29,45,8}, -{29,45,9}, -{29,45,10}, -{29,45,11}, -{29,45,12}, -{29,45,13}, -{29,45,14}, -{29,45,15}, -{29,45,16}, -{29,45,17}, -{29,45,18}, -{29,45,19}, -{29,45,20}, -{29,45,21}, -{29,45,22}, -{29,45,23}, -{29,45,24}, -{29,45,25}, -{29,45,26}, -{29,45,27}, -{29,45,28}, -{29,45,29}, -{29,45,30}, -{29,45,31}, -{29,45,32}, -{29,45,33}, -{29,45,34}, -{29,45,35}, -{29,45,36}, -{29,45,37}, -{29,45,38}, -{29,45,39}, -{29,45,40}, -{29,45,41}, -{29,46,-77}, -{29,46,-76}, -{29,46,-75}, -{29,46,-74}, -{29,46,-73}, -{29,46,-72}, -{29,46,-71}, -{29,46,-70}, -{29,46,-69}, -{29,46,-68}, -{29,46,-67}, -{29,46,-66}, -{29,46,-65}, -{29,46,-64}, -{29,46,-63}, -{29,46,-62}, -{29,46,-61}, -{29,46,-60}, -{29,46,-59}, -{29,46,-58}, -{29,46,-57}, -{29,46,-56}, -{29,46,-55}, -{29,46,-54}, -{29,46,-53}, -{29,46,-52}, -{29,46,-51}, -{29,46,-50}, -{29,46,-49}, -{29,46,-48}, -{29,46,-47}, -{29,46,-46}, -{29,46,-45}, -{29,46,-44}, -{29,46,-43}, -{29,46,-42}, -{29,46,-41}, -{29,46,-40}, -{29,46,-39}, -{29,46,-38}, -{29,46,-37}, -{29,46,-36}, -{29,46,-35}, -{29,46,-34}, -{29,46,-33}, -{29,46,-32}, -{29,46,-31}, -{29,46,-30}, -{29,46,-29}, -{29,46,-28}, -{29,46,-27}, -{29,46,-26}, -{29,46,-25}, -{29,46,-24}, -{29,46,-23}, -{29,46,-22}, -{29,46,-21}, -{29,46,-20}, -{29,46,-19}, -{29,46,-18}, -{29,46,-17}, -{29,46,-16}, -{29,46,-15}, -{29,46,-14}, -{29,46,-13}, -{29,46,-12}, -{29,46,-11}, -{29,46,-10}, -{29,46,-9}, -{29,46,-8}, -{29,46,-7}, -{29,46,-6}, -{29,46,-5}, -{29,46,-4}, -{29,46,-3}, -{29,46,-2}, -{29,46,-1}, -{29,46,0}, -{29,46,1}, -{29,46,2}, -{29,46,3}, -{29,46,4}, -{29,46,5}, -{29,46,6}, -{29,46,7}, -{29,46,8}, -{29,46,9}, -{29,46,10}, -{29,46,11}, -{29,46,12}, -{29,46,13}, -{29,46,14}, -{29,46,15}, -{29,46,16}, -{29,46,17}, -{29,46,18}, -{29,46,19}, -{29,46,20}, -{29,46,21}, -{29,46,22}, -{29,46,23}, -{29,46,24}, -{29,46,25}, -{29,46,26}, -{29,46,27}, -{29,46,28}, -{29,46,29}, -{29,46,30}, -{29,46,31}, -{29,46,32}, -{29,46,33}, -{29,46,34}, -{29,46,35}, -{29,46,36}, -{29,46,37}, -{29,46,38}, -{29,46,39}, -{29,46,40}, -{29,46,41}, -{29,47,-78}, -{29,47,-77}, -{29,47,-76}, -{29,47,-75}, -{29,47,-74}, -{29,47,-73}, -{29,47,-72}, -{29,47,-71}, -{29,47,-70}, -{29,47,-69}, -{29,47,-68}, -{29,47,-67}, -{29,47,-66}, -{29,47,-65}, -{29,47,-64}, -{29,47,-63}, -{29,47,-62}, -{29,47,-61}, -{29,47,-60}, -{29,47,-59}, -{29,47,-58}, -{29,47,-57}, -{29,47,-56}, -{29,47,-55}, -{29,47,-54}, -{29,47,-53}, -{29,47,-52}, -{29,47,-51}, -{29,47,-50}, -{29,47,-49}, -{29,47,-48}, -{29,47,-47}, -{29,47,-46}, -{29,47,-45}, -{29,47,-44}, -{29,47,-43}, -{29,47,-42}, -{29,47,-41}, -{29,47,-40}, -{29,47,-39}, -{29,47,-38}, -{29,47,-37}, -{29,47,-36}, -{29,47,-35}, -{29,47,-34}, -{29,47,-33}, -{29,47,-32}, -{29,47,-31}, -{29,47,-30}, -{29,47,-29}, -{29,47,-28}, -{29,47,-27}, -{29,47,-26}, -{29,47,-25}, -{29,47,-24}, -{29,47,-23}, -{29,47,-22}, -{29,47,-21}, -{29,47,-20}, -{29,47,-19}, -{29,47,-18}, -{29,47,-17}, -{29,47,-16}, -{29,47,-15}, -{29,47,-14}, -{29,47,-13}, -{29,47,-12}, -{29,47,-11}, -{29,47,-10}, -{29,47,-9}, -{29,47,-8}, -{29,47,-7}, -{29,47,-6}, -{29,47,-5}, -{29,47,-4}, -{29,47,-3}, -{29,47,-2}, -{29,47,-1}, -{29,47,0}, -{29,47,1}, -{29,47,2}, -{29,47,3}, -{29,47,4}, -{29,47,5}, -{29,47,6}, -{29,47,7}, -{29,47,8}, -{29,47,9}, -{29,47,10}, -{29,47,11}, -{29,47,12}, -{29,47,13}, -{29,47,14}, -{29,47,15}, -{29,47,16}, -{29,47,17}, -{29,47,18}, -{29,47,19}, -{29,47,20}, -{29,47,21}, -{29,47,22}, -{29,47,23}, -{29,47,24}, -{29,47,25}, -{29,47,26}, -{29,47,27}, -{29,47,28}, -{29,47,29}, -{29,47,30}, -{29,47,31}, -{29,47,32}, -{29,47,33}, -{29,47,34}, -{29,47,35}, -{29,47,36}, -{29,47,37}, -{29,47,38}, -{29,47,39}, -{29,47,40}, -{29,47,41}, -{29,47,42}, -{29,48,-78}, -{29,48,-77}, -{29,48,-76}, -{29,48,-75}, -{29,48,-74}, -{29,48,-73}, -{29,48,-72}, -{29,48,-71}, -{29,48,-70}, -{29,48,-69}, -{29,48,-68}, -{29,48,-67}, -{29,48,-66}, -{29,48,-65}, -{29,48,-64}, -{29,48,-63}, -{29,48,-62}, -{29,48,-61}, -{29,48,-60}, -{29,48,-59}, -{29,48,-58}, -{29,48,-57}, -{29,48,-56}, -{29,48,-55}, -{29,48,-54}, -{29,48,-53}, -{29,48,-52}, -{29,48,-51}, -{29,48,-50}, -{29,48,-49}, -{29,48,-48}, -{29,48,-47}, -{29,48,-46}, -{29,48,-45}, -{29,48,-44}, -{29,48,-43}, -{29,48,-42}, -{29,48,-41}, -{29,48,-40}, -{29,48,-39}, -{29,48,-38}, -{29,48,-37}, -{29,48,-36}, -{29,48,-35}, -{29,48,-34}, -{29,48,-33}, -{29,48,-32}, -{29,48,-31}, -{29,48,-30}, -{29,48,-29}, -{29,48,-28}, -{29,48,-27}, -{29,48,-26}, -{29,48,-25}, -{29,48,-24}, -{29,48,-23}, -{29,48,-22}, -{29,48,-21}, -{29,48,-20}, -{29,48,-19}, -{29,48,-18}, -{29,48,-17}, -{29,48,-16}, -{29,48,-15}, -{29,48,-14}, -{29,48,-13}, -{29,48,-12}, -{29,48,-11}, -{29,48,-10}, -{29,48,-9}, -{29,48,-8}, -{29,48,-7}, -{29,48,-6}, -{29,48,-5}, -{29,48,-4}, -{29,48,-3}, -{29,48,-2}, -{29,48,-1}, -{29,48,0}, -{29,48,1}, -{29,48,2}, -{29,48,3}, -{29,48,4}, -{29,48,5}, -{29,48,6}, -{29,48,7}, -{29,48,8}, -{29,48,9}, -{29,48,10}, -{29,48,11}, -{29,48,12}, -{29,48,13}, -{29,48,14}, -{29,48,15}, -{29,48,16}, -{29,48,17}, -{29,48,18}, -{29,48,19}, -{29,48,20}, -{29,48,21}, -{29,48,22}, -{29,48,23}, -{29,48,24}, -{29,48,25}, -{29,48,26}, -{29,48,27}, -{29,48,28}, -{29,48,29}, -{29,48,30}, -{29,48,31}, -{29,48,32}, -{29,48,33}, -{29,48,34}, -{29,48,35}, -{29,48,36}, -{29,48,37}, -{29,48,38}, -{29,48,39}, -{29,48,40}, -{29,48,41}, -{29,48,42}, -{29,49,-79}, -{29,49,-78}, -{29,49,-77}, -{29,49,-76}, -{29,49,-75}, -{29,49,-74}, -{29,49,-73}, -{29,49,-72}, -{29,49,-71}, -{29,49,-70}, -{29,49,-69}, -{29,49,-68}, -{29,49,-67}, -{29,49,-66}, -{29,49,-65}, -{29,49,-64}, -{29,49,-63}, -{29,49,-62}, -{29,49,-61}, -{29,49,-60}, -{29,49,-59}, -{29,49,-58}, -{29,49,-57}, -{29,49,-56}, -{29,49,-55}, -{29,49,-54}, -{29,49,-53}, -{29,49,-52}, -{29,49,-51}, -{29,49,-50}, -{29,49,-49}, -{29,49,-48}, -{29,49,-47}, -{29,49,-46}, -{29,49,-45}, -{29,49,-44}, -{29,49,-43}, -{29,49,-42}, -{29,49,-41}, -{29,49,-40}, -{29,49,-39}, -{29,49,-38}, -{29,49,-37}, -{29,49,-36}, -{29,49,-35}, -{29,49,-34}, -{29,49,-33}, -{29,49,-32}, -{29,49,-31}, -{29,49,-30}, -{29,49,-29}, -{29,49,-28}, -{29,49,-27}, -{29,49,-26}, -{29,49,-25}, -{29,49,-24}, -{29,49,-23}, -{29,49,-22}, -{29,49,-21}, -{29,49,-20}, -{29,49,-19}, -{29,49,-18}, -{29,49,-17}, -{29,49,-16}, -{29,49,-15}, -{29,49,-14}, -{29,49,-13}, -{29,49,-12}, -{29,49,-11}, -{29,49,-10}, -{29,49,-9}, -{29,49,-8}, -{29,49,-7}, -{29,49,-6}, -{29,49,-5}, -{29,49,-4}, -{29,49,-3}, -{29,49,-2}, -{29,49,-1}, -{29,49,0}, -{29,49,1}, -{29,49,2}, -{29,49,3}, -{29,49,4}, -{29,49,5}, -{29,49,6}, -{29,49,7}, -{29,49,8}, -{29,49,9}, -{29,49,10}, -{29,49,11}, -{29,49,12}, -{29,49,13}, -{29,49,14}, -{29,49,15}, -{29,49,16}, -{29,49,17}, -{29,49,18}, -{29,49,19}, -{29,49,20}, -{29,49,21}, -{29,49,22}, -{29,49,23}, -{29,49,24}, -{29,49,25}, -{29,49,26}, -{29,49,27}, -{29,49,28}, -{29,49,29}, -{29,49,30}, -{29,49,31}, -{29,49,32}, -{29,49,33}, -{29,49,34}, -{29,49,35}, -{29,49,36}, -{29,49,37}, -{29,49,38}, -{29,49,39}, -{29,49,40}, -{29,49,41}, -{29,49,42}, -{29,50,-80}, -{29,50,-79}, -{29,50,-78}, -{29,50,-77}, -{29,50,-76}, -{29,50,-75}, -{29,50,-74}, -{29,50,-73}, -{29,50,-72}, -{29,50,-71}, -{29,50,-70}, -{29,50,-69}, -{29,50,-68}, -{29,50,-67}, -{29,50,-66}, -{29,50,-65}, -{29,50,-64}, -{29,50,-63}, -{29,50,-62}, -{29,50,-61}, -{29,50,-60}, -{29,50,-59}, -{29,50,-58}, -{29,50,-57}, -{29,50,-56}, -{29,50,-55}, -{29,50,-54}, -{29,50,-53}, -{29,50,-52}, -{29,50,-51}, -{29,50,-50}, -{29,50,-49}, -{29,50,-48}, -{29,50,-47}, -{29,50,-46}, -{29,50,-45}, -{29,50,-44}, -{29,50,-43}, -{29,50,-42}, -{29,50,-41}, -{29,50,-40}, -{29,50,-39}, -{29,50,-38}, -{29,50,-37}, -{29,50,-36}, -{29,50,-35}, -{29,50,-34}, -{29,50,-33}, -{29,50,-32}, -{29,50,-31}, -{29,50,-30}, -{29,50,-29}, -{29,50,-28}, -{29,50,-27}, -{29,50,-26}, -{29,50,-25}, -{29,50,-24}, -{29,50,-23}, -{29,50,-22}, -{29,50,-21}, -{29,50,-20}, -{29,50,-19}, -{29,50,-18}, -{29,50,-17}, -{29,50,-16}, -{29,50,-15}, -{29,50,-14}, -{29,50,-13}, -{29,50,-12}, -{29,50,-11}, -{29,50,-10}, -{29,50,-9}, -{29,50,-8}, -{29,50,-7}, -{29,50,-6}, -{29,50,-5}, -{29,50,-4}, -{29,50,-3}, -{29,50,-2}, -{29,50,-1}, -{29,50,0}, -{29,50,1}, -{29,50,2}, -{29,50,3}, -{29,50,4}, -{29,50,5}, -{29,50,6}, -{29,50,7}, -{29,50,8}, -{29,50,9}, -{29,50,10}, -{29,50,11}, -{29,50,12}, -{29,50,13}, -{29,50,14}, -{29,50,15}, -{29,50,16}, -{29,50,17}, -{29,50,18}, -{29,50,19}, -{29,50,20}, -{29,50,21}, -{29,50,22}, -{29,50,23}, -{29,50,24}, -{29,50,25}, -{29,50,26}, -{29,50,27}, -{29,50,28}, -{29,50,29}, -{29,50,30}, -{29,50,31}, -{29,50,32}, -{29,50,33}, -{29,50,34}, -{29,50,35}, -{29,50,36}, -{29,50,37}, -{29,50,38}, -{29,50,39}, -{29,50,40}, -{29,50,41}, -{29,50,42}, -{29,51,-81}, -{29,51,-80}, -{29,51,-79}, -{29,51,-78}, -{29,51,-77}, -{29,51,-76}, -{29,51,-75}, -{29,51,-74}, -{29,51,-73}, -{29,51,-72}, -{29,51,-71}, -{29,51,-70}, -{29,51,-69}, -{29,51,-68}, -{29,51,-67}, -{29,51,-66}, -{29,51,-65}, -{29,51,-64}, -{29,51,-63}, -{29,51,-62}, -{29,51,-61}, -{29,51,-60}, -{29,51,-59}, -{29,51,-58}, -{29,51,-57}, -{29,51,-56}, -{29,51,-55}, -{29,51,-54}, -{29,51,-53}, -{29,51,-52}, -{29,51,-51}, -{29,51,-50}, -{29,51,-49}, -{29,51,-48}, -{29,51,-47}, -{29,51,-46}, -{29,51,-45}, -{29,51,-44}, -{29,51,-43}, -{29,51,-42}, -{29,51,-41}, -{29,51,-40}, -{29,51,-39}, -{29,51,-38}, -{29,51,-37}, -{29,51,-36}, -{29,51,-35}, -{29,51,-34}, -{29,51,-33}, -{29,51,-32}, -{29,51,-31}, -{29,51,-30}, -{29,51,-29}, -{29,51,-28}, -{29,51,-27}, -{29,51,-26}, -{29,51,-25}, -{29,51,-24}, -{29,51,-23}, -{29,51,-22}, -{29,51,-21}, -{29,51,-20}, -{29,51,-19}, -{29,51,-18}, -{29,51,-17}, -{29,51,-16}, -{29,51,-15}, -{29,51,-14}, -{29,51,-13}, -{29,51,-12}, -{29,51,-11}, -{29,51,-10}, -{29,51,-9}, -{29,51,-8}, -{29,51,-7}, -{29,51,-6}, -{29,51,-5}, -{29,51,-4}, -{29,51,-3}, -{29,51,-2}, -{29,51,-1}, -{29,51,0}, -{29,51,1}, -{29,51,2}, -{29,51,3}, -{29,51,4}, -{29,51,5}, -{29,51,6}, -{29,51,7}, -{29,51,8}, -{29,51,9}, -{29,51,10}, -{29,51,11}, -{29,51,12}, -{29,51,13}, -{29,51,14}, -{29,51,15}, -{29,51,16}, -{29,51,17}, -{29,51,18}, -{29,51,19}, -{29,51,20}, -{29,51,21}, -{29,51,22}, -{29,51,23}, -{29,51,24}, -{29,51,25}, -{29,51,26}, -{29,51,27}, -{29,51,28}, -{29,51,29}, -{29,51,30}, -{29,51,31}, -{29,51,32}, -{29,51,33}, -{29,51,34}, -{29,51,35}, -{29,51,36}, -{29,51,37}, -{29,51,38}, -{29,51,39}, -{29,51,40}, -{29,51,41}, -{29,51,42}, -{29,52,-82}, -{29,52,-81}, -{29,52,-80}, -{29,52,-79}, -{29,52,-78}, -{29,52,-77}, -{29,52,-76}, -{29,52,-75}, -{29,52,-74}, -{29,52,-73}, -{29,52,-72}, -{29,52,-71}, -{29,52,-70}, -{29,52,-69}, -{29,52,-68}, -{29,52,-67}, -{29,52,-66}, -{29,52,-65}, -{29,52,-64}, -{29,52,-63}, -{29,52,-62}, -{29,52,-61}, -{29,52,-60}, -{29,52,-59}, -{29,52,-58}, -{29,52,-57}, -{29,52,-56}, -{29,52,-55}, -{29,52,-54}, -{29,52,-53}, -{29,52,-52}, -{29,52,-51}, -{29,52,-50}, -{29,52,-49}, -{29,52,-48}, -{29,52,-47}, -{29,52,-46}, -{29,52,-45}, -{29,52,-44}, -{29,52,-43}, -{29,52,-42}, -{29,52,-41}, -{29,52,-40}, -{29,52,-39}, -{29,52,-38}, -{29,52,-37}, -{29,52,-36}, -{29,52,-35}, -{29,52,-34}, -{29,52,-33}, -{29,52,-32}, -{29,52,-31}, -{29,52,-30}, -{29,52,-29}, -{29,52,-28}, -{29,52,-27}, -{29,52,-26}, -{29,52,-25}, -{29,52,-24}, -{29,52,-23}, -{29,52,-22}, -{29,52,-21}, -{29,52,-20}, -{29,52,-19}, -{29,52,-18}, -{29,52,-17}, -{29,52,-16}, -{29,52,-15}, -{29,52,-14}, -{29,52,-13}, -{29,52,-12}, -{29,52,-11}, -{29,52,-10}, -{29,52,-9}, -{29,52,-8}, -{29,52,-7}, -{29,52,-6}, -{29,52,-5}, -{29,52,-4}, -{29,52,-3}, -{29,52,-2}, -{29,52,-1}, -{29,52,0}, -{29,52,1}, -{29,52,2}, -{29,52,3}, -{29,52,4}, -{29,52,5}, -{29,52,6}, -{29,52,7}, -{29,52,8}, -{29,52,9}, -{29,52,10}, -{29,52,11}, -{29,52,12}, -{29,52,13}, -{29,52,14}, -{29,52,15}, -{29,52,16}, -{29,52,17}, -{29,52,18}, -{29,52,19}, -{29,52,20}, -{29,52,21}, -{29,52,22}, -{29,52,23}, -{29,52,24}, -{29,52,25}, -{29,52,26}, -{29,52,27}, -{29,52,28}, -{29,52,29}, -{29,52,30}, -{29,52,31}, -{29,52,32}, -{29,52,33}, -{29,52,34}, -{29,52,35}, -{29,52,36}, -{29,52,37}, -{29,52,38}, -{29,52,39}, -{29,52,40}, -{29,52,41}, -{29,52,42}, -{29,53,-83}, -{29,53,-82}, -{29,53,-81}, -{29,53,-80}, -{29,53,-79}, -{29,53,-78}, -{29,53,-77}, -{29,53,-76}, -{29,53,-75}, -{29,53,-74}, -{29,53,-73}, -{29,53,-72}, -{29,53,-71}, -{29,53,-70}, -{29,53,-69}, -{29,53,-68}, -{29,53,-67}, -{29,53,-66}, -{29,53,-65}, -{29,53,-64}, -{29,53,-63}, -{29,53,-62}, -{29,53,-61}, -{29,53,-60}, -{29,53,-59}, -{29,53,-58}, -{29,53,-57}, -{29,53,-56}, -{29,53,-55}, -{29,53,-54}, -{29,53,-53}, -{29,53,-52}, -{29,53,-51}, -{29,53,-50}, -{29,53,-49}, -{29,53,-48}, -{29,53,-47}, -{29,53,-46}, -{29,53,-45}, -{29,53,-44}, -{29,53,-43}, -{29,53,-42}, -{29,53,-41}, -{29,53,-40}, -{29,53,-39}, -{29,53,-38}, -{29,53,-37}, -{29,53,-36}, -{29,53,-35}, -{29,53,-34}, -{29,53,-33}, -{29,53,-32}, -{29,53,-31}, -{29,53,-30}, -{29,53,-29}, -{29,53,-28}, -{29,53,-27}, -{29,53,-26}, -{29,53,-25}, -{29,53,-24}, -{29,53,-23}, -{29,53,-22}, -{29,53,-21}, -{29,53,-20}, -{29,53,-19}, -{29,53,-18}, -{29,53,-17}, -{29,53,-16}, -{29,53,-15}, -{29,53,-14}, -{29,53,-13}, -{29,53,-12}, -{29,53,-11}, -{29,53,-10}, -{29,53,-9}, -{29,53,-8}, -{29,53,-7}, -{29,53,-6}, -{29,53,-5}, -{29,53,-4}, -{29,53,-3}, -{29,53,-2}, -{29,53,-1}, -{29,53,0}, -{29,53,1}, -{29,53,2}, -{29,53,3}, -{29,53,4}, -{29,53,5}, -{29,53,6}, -{29,53,7}, -{29,53,8}, -{29,53,9}, -{29,53,10}, -{29,53,11}, -{29,53,12}, -{29,53,13}, -{29,53,14}, -{29,53,15}, -{29,53,16}, -{29,54,-84}, -{29,54,-83}, -{29,54,-82}, -{29,54,-81}, -{29,54,-80}, -{29,54,-79}, -{29,54,-78}, -{29,54,-77}, -{29,54,-76}, -{29,54,-75}, -{29,54,-74}, -{29,54,-73}, -{29,54,-72}, -{29,54,-71}, -{29,54,-70}, -{29,54,-69}, -{29,54,-68}, -{29,54,-67}, -{29,54,-66}, -{29,54,-65}, -{29,54,-64}, -{29,54,-63}, -{29,54,-62}, -{29,54,-61}, -{29,54,-60}, -{29,54,-59}, -{29,54,-58}, -{29,54,-57}, -{29,54,-56}, -{29,54,-55}, -{29,54,-54}, -{29,54,-53}, -{29,54,-52}, -{29,54,-51}, -{29,54,-50}, -{29,54,-49}, -{29,54,-48}, -{29,54,-47}, -{29,54,-46}, -{29,54,-45}, -{29,54,-44}, -{29,54,-43}, -{29,54,-42}, -{29,54,-41}, -{29,54,-40}, -{29,54,-39}, -{29,54,-38}, -{29,54,-37}, -{29,54,-36}, -{29,54,-35}, -{29,54,-34}, -{29,54,-33}, -{29,54,-32}, -{29,54,-31}, -{29,54,-30}, -{29,54,-29}, -{29,54,-28}, -{29,54,-27}, -{29,54,-26}, -{29,54,-25}, -{29,54,-24}, -{29,54,-23}, -{29,54,-22}, -{29,54,-21}, -{29,54,-20}, -{29,54,-19}, -{29,54,-18}, -{29,54,-17}, -{29,54,-16}, -{29,54,-15}, -{29,54,-14}, -{29,54,-13}, -{29,54,-12}, -{29,54,-11}, -{29,54,-10}, -{29,54,-9}, -{29,54,-8}, -{29,54,-7}, -{29,54,-6}, -{29,54,-5}, -{29,54,-4}, -{29,54,-3}, -{29,54,-2}, -{29,54,-1}, -{29,54,0}, -{29,55,-84}, -{29,55,-83}, -{29,55,-82}, -{29,55,-81}, -{29,55,-80}, -{29,55,-79}, -{29,55,-78}, -{29,55,-77}, -{29,55,-76}, -{29,55,-75}, -{29,55,-74}, -{29,55,-73}, -{29,55,-72}, -{29,55,-71}, -{29,55,-70}, -{29,55,-69}, -{29,55,-68}, -{29,55,-67}, -{29,55,-66}, -{29,55,-65}, -{29,55,-64}, -{29,55,-63}, -{29,55,-62}, -{29,55,-61}, -{29,55,-60}, -{29,55,-59}, -{29,55,-58}, -{29,55,-57}, -{29,55,-56}, -{29,55,-55}, -{29,55,-54}, -{29,55,-53}, -{29,55,-52}, -{29,55,-51}, -{29,55,-50}, -{29,55,-49}, -{29,55,-48}, -{29,55,-47}, -{29,55,-46}, -{29,55,-45}, -{29,55,-44}, -{29,55,-43}, -{29,55,-42}, -{29,55,-41}, -{29,55,-40}, -{29,55,-39}, -{29,55,-38}, -{29,55,-37}, -{29,55,-36}, -{29,55,-35}, -{29,55,-34}, -{29,55,-33}, -{29,55,-32}, -{29,55,-31}, -{29,55,-30}, -{29,55,-29}, -{29,55,-28}, -{29,55,-27}, -{29,55,-26}, -{29,55,-25}, -{29,55,-24}, -{29,55,-23}, -{29,55,-22}, -{29,55,-21}, -{29,55,-20}, -{29,55,-19}, -{29,55,-18}, -{29,55,-17}, -{29,55,-16}, -{29,55,-15}, -{29,55,-14}, -{29,55,-13}, -{29,55,-12}, -{29,56,-85}, -{29,56,-84}, -{29,56,-83}, -{29,56,-82}, -{29,56,-81}, -{29,56,-80}, -{29,56,-79}, -{29,56,-78}, -{29,56,-77}, -{29,56,-76}, -{29,56,-75}, -{29,56,-74}, -{29,56,-73}, -{29,56,-72}, -{29,56,-71}, -{29,56,-70}, -{29,56,-69}, -{29,56,-68}, -{29,56,-67}, -{29,56,-66}, -{29,56,-65}, -{29,56,-64}, -{29,56,-63}, -{29,56,-62}, -{29,56,-61}, -{29,56,-60}, -{29,56,-59}, -{29,56,-58}, -{29,56,-57}, -{29,56,-56}, -{29,56,-55}, -{29,56,-54}, -{29,56,-53}, -{29,56,-52}, -{29,56,-51}, -{29,56,-50}, -{29,56,-49}, -{29,56,-48}, -{29,56,-47}, -{29,56,-46}, -{29,56,-45}, -{29,56,-44}, -{29,56,-43}, -{29,56,-42}, -{29,56,-41}, -{29,56,-40}, -{29,56,-39}, -{29,56,-38}, -{29,56,-37}, -{29,56,-36}, -{29,56,-35}, -{29,56,-34}, -{29,56,-33}, -{29,56,-32}, -{29,56,-31}, -{29,56,-30}, -{29,56,-29}, -{29,56,-28}, -{29,56,-27}, -{29,56,-26}, -{29,56,-25}, -{29,56,-24}, -{29,56,-23}, -{29,56,-22}, -{29,56,-21}, -{29,57,-86}, -{29,57,-85}, -{29,57,-84}, -{29,57,-83}, -{29,57,-82}, -{29,57,-81}, -{29,57,-80}, -{29,57,-79}, -{29,57,-78}, -{29,57,-77}, -{29,57,-76}, -{29,57,-75}, -{29,57,-74}, -{29,57,-73}, -{29,57,-72}, -{29,57,-71}, -{29,57,-70}, -{29,57,-69}, -{29,57,-68}, -{29,57,-67}, -{29,57,-66}, -{29,57,-65}, -{29,57,-64}, -{29,57,-63}, -{29,57,-62}, -{29,57,-61}, -{29,57,-60}, -{29,57,-59}, -{29,57,-58}, -{29,57,-57}, -{29,57,-56}, -{29,57,-55}, -{29,57,-54}, -{29,57,-53}, -{29,57,-52}, -{29,57,-51}, -{29,57,-50}, -{29,57,-49}, -{29,57,-48}, -{29,57,-47}, -{29,57,-46}, -{29,57,-45}, -{29,57,-44}, -{29,57,-43}, -{29,57,-42}, -{29,57,-41}, -{29,57,-40}, -{29,57,-39}, -{29,57,-38}, -{29,57,-37}, -{29,57,-36}, -{29,57,-35}, -{29,57,-34}, -{29,57,-33}, -{29,57,-32}, -{29,57,-31}, -{29,57,-30}, -{29,57,-29}, -{29,58,-87}, -{29,58,-86}, -{29,58,-85}, -{29,58,-84}, -{29,58,-83}, -{29,58,-82}, -{29,58,-81}, -{29,58,-80}, -{29,58,-79}, -{29,58,-78}, -{29,58,-77}, -{29,58,-76}, -{29,58,-75}, -{29,58,-74}, -{29,58,-73}, -{29,58,-72}, -{29,58,-71}, -{29,58,-70}, -{29,58,-69}, -{29,58,-68}, -{29,58,-67}, -{29,58,-66}, -{29,58,-65}, -{29,58,-64}, -{29,58,-63}, -{29,58,-62}, -{29,58,-61}, -{29,58,-60}, -{29,58,-59}, -{29,58,-58}, -{29,58,-57}, -{29,58,-56}, -{29,58,-55}, -{29,58,-54}, -{29,58,-53}, -{29,58,-52}, -{29,58,-51}, -{29,58,-50}, -{29,58,-49}, -{29,58,-48}, -{29,58,-47}, -{29,58,-46}, -{29,58,-45}, -{29,58,-44}, -{29,58,-43}, -{29,58,-42}, -{29,58,-41}, -{29,58,-40}, -{29,58,-39}, -{29,58,-38}, -{29,58,-37}, -{29,58,-36}, -{29,59,-88}, -{29,59,-87}, -{29,59,-86}, -{29,59,-85}, -{29,59,-84}, -{29,59,-83}, -{29,59,-82}, -{29,59,-81}, -{29,59,-80}, -{29,59,-79}, -{29,59,-78}, -{29,59,-77}, -{29,59,-76}, -{29,59,-75}, -{29,59,-74}, -{29,59,-73}, -{29,59,-72}, -{29,59,-71}, -{29,59,-70}, -{29,59,-69}, -{29,59,-68}, -{29,59,-67}, -{29,59,-66}, -{29,59,-65}, -{29,59,-64}, -{29,59,-63}, -{29,59,-62}, -{29,59,-61}, -{29,59,-60}, -{29,59,-59}, -{29,59,-58}, -{29,59,-57}, -{29,59,-56}, -{29,59,-55}, -{29,59,-54}, -{29,59,-53}, -{29,59,-52}, -{29,59,-51}, -{29,59,-50}, -{29,59,-49}, -{29,59,-48}, -{29,59,-47}, -{29,59,-46}, -{29,59,-45}, -{29,59,-44}, -{29,59,-43}, -{29,59,-42}, -{29,60,-89}, -{29,60,-88}, -{29,60,-87}, -{29,60,-86}, -{29,60,-85}, -{29,60,-84}, -{29,60,-83}, -{29,60,-82}, -{29,60,-81}, -{29,60,-80}, -{29,60,-79}, -{29,60,-78}, -{29,60,-77}, -{29,60,-76}, -{29,60,-75}, -{29,60,-74}, -{29,60,-73}, -{29,60,-72}, -{29,60,-71}, -{29,60,-70}, -{29,60,-69}, -{29,60,-68}, -{29,60,-67}, -{29,60,-66}, -{29,60,-65}, -{29,60,-64}, -{29,60,-63}, -{29,60,-62}, -{29,60,-61}, -{29,60,-60}, -{29,60,-59}, -{29,60,-58}, -{29,60,-57}, -{29,60,-56}, -{29,60,-55}, -{29,60,-54}, -{29,60,-53}, -{29,60,-52}, -{29,60,-51}, -{29,60,-50}, -{29,60,-49}, -{29,60,-48}, -{29,61,-90}, -{29,61,-89}, -{29,61,-88}, -{29,61,-87}, -{29,61,-86}, -{29,61,-85}, -{29,61,-84}, -{29,61,-83}, -{29,61,-82}, -{29,61,-81}, -{29,61,-80}, -{29,61,-79}, -{29,61,-78}, -{29,61,-77}, -{29,61,-76}, -{29,61,-75}, -{29,61,-74}, -{29,61,-73}, -{29,61,-72}, -{29,61,-71}, -{29,61,-70}, -{29,61,-69}, -{29,61,-68}, -{29,61,-67}, -{29,61,-66}, -{29,61,-65}, -{29,61,-64}, -{29,61,-63}, -{29,61,-62}, -{29,61,-61}, -{29,61,-60}, -{29,61,-59}, -{29,61,-58}, -{29,61,-57}, -{29,61,-56}, -{29,61,-55}, -{29,61,-54}, -{29,61,-53}, -{29,62,-90}, -{29,62,-89}, -{29,62,-88}, -{29,62,-87}, -{29,62,-86}, -{29,62,-85}, -{29,62,-84}, -{29,62,-83}, -{29,62,-82}, -{29,62,-81}, -{29,62,-80}, -{29,62,-79}, -{29,62,-78}, -{29,62,-77}, -{29,62,-76}, -{29,62,-75}, -{29,62,-74}, -{29,62,-73}, -{29,62,-72}, -{29,62,-71}, -{29,62,-70}, -{29,62,-69}, -{29,62,-68}, -{29,62,-67}, -{29,62,-66}, -{29,62,-65}, -{29,62,-64}, -{29,62,-63}, -{29,62,-62}, -{29,62,-61}, -{29,62,-60}, -{29,62,-59}, -{29,62,-58}, -{29,63,-91}, -{29,63,-90}, -{29,63,-89}, -{29,63,-88}, -{29,63,-87}, -{29,63,-86}, -{29,63,-85}, -{29,63,-84}, -{29,63,-83}, -{29,63,-82}, -{29,63,-81}, -{29,63,-80}, -{29,63,-79}, -{29,63,-78}, -{29,63,-77}, -{29,63,-76}, -{29,63,-75}, -{29,63,-74}, -{29,63,-73}, -{29,63,-72}, -{29,63,-71}, -{29,63,-70}, -{29,63,-69}, -{29,63,-68}, -{29,63,-67}, -{29,63,-66}, -{29,63,-65}, -{29,63,-64}, -{29,63,-63}, -{29,63,-62}, -{29,64,-92}, -{29,64,-91}, -{29,64,-90}, -{29,64,-89}, -{29,64,-88}, -{29,64,-87}, -{29,64,-86}, -{29,64,-85}, -{29,64,-84}, -{29,64,-83}, -{29,64,-82}, -{29,64,-81}, -{29,64,-80}, -{29,64,-79}, -{29,64,-78}, -{29,64,-77}, -{29,64,-76}, -{29,64,-75}, -{29,64,-74}, -{29,64,-73}, -{29,64,-72}, -{29,64,-71}, -{29,64,-70}, -{29,64,-69}, -{29,64,-68}, -{29,64,-67}, -{29,65,-93}, -{29,65,-92}, -{29,65,-91}, -{29,65,-90}, -{29,65,-89}, -{29,65,-88}, -{29,65,-87}, -{29,65,-86}, -{29,65,-85}, -{29,65,-84}, -{29,65,-83}, -{29,65,-82}, -{29,65,-81}, -{29,65,-80}, -{29,65,-79}, -{29,65,-78}, -{29,65,-77}, -{29,65,-76}, -{29,65,-75}, -{29,65,-74}, -{29,65,-73}, -{29,65,-72}, -{29,65,-71}, -{29,66,-94}, -{29,66,-93}, -{29,66,-92}, -{29,66,-91}, -{29,66,-90}, -{29,66,-89}, -{29,66,-88}, -{29,66,-87}, -{29,66,-86}, -{29,66,-85}, -{29,66,-84}, -{29,66,-83}, -{29,66,-82}, -{29,66,-81}, -{29,66,-80}, -{29,66,-79}, -{29,66,-78}, -{29,66,-77}, -{29,66,-76}, -{29,66,-75}, -{29,67,-95}, -{29,67,-94}, -{29,67,-93}, -{29,67,-92}, -{29,67,-91}, -{29,67,-90}, -{29,67,-89}, -{29,67,-88}, -{29,67,-87}, -{29,67,-86}, -{29,67,-85}, -{29,67,-84}, -{29,67,-83}, -{29,67,-82}, -{29,67,-81}, -{29,67,-80}, -{29,67,-79}, -{29,67,-78}, -{29,68,-95}, -{29,68,-94}, -{29,68,-93}, -{29,68,-92}, -{29,68,-91}, -{29,68,-90}, -{29,68,-89}, -{29,68,-88}, -{29,68,-87}, -{29,68,-86}, -{29,68,-85}, -{29,68,-84}, -{29,68,-83}, -{29,68,-82}, -{29,69,-96}, -{29,69,-95}, -{29,69,-94}, -{29,69,-93}, -{29,69,-92}, -{29,69,-91}, -{29,69,-90}, -{29,69,-89}, -{29,69,-88}, -{29,69,-87}, -{29,69,-86}, -{29,69,-85}, -{29,70,-97}, -{29,70,-96}, -{29,70,-95}, -{29,70,-94}, -{29,70,-93}, -{29,70,-92}, -{29,70,-91}, -{29,70,-90}, -{29,70,-89}, -{29,71,-98}, -{29,71,-97}, -{29,71,-96}, -{29,71,-95}, -{29,71,-94}, -{29,71,-93}, -{29,71,-92}, -{29,72,-99}, -{29,72,-98}, -{29,72,-97}, -{29,72,-96}, -{29,72,-95}, -{29,73,-100}, -{29,73,-99}, -{29,73,-98}, -{30,-38,35}, -{30,-38,36}, -{30,-38,37}, -{30,-37,31}, -{30,-37,32}, -{30,-37,33}, -{30,-37,34}, -{30,-37,35}, -{30,-37,36}, -{30,-37,37}, -{30,-36,27}, -{30,-36,28}, -{30,-36,29}, -{30,-36,30}, -{30,-36,31}, -{30,-36,32}, -{30,-36,33}, -{30,-36,34}, -{30,-36,35}, -{30,-36,36}, -{30,-36,37}, -{30,-35,24}, -{30,-35,25}, -{30,-35,26}, -{30,-35,27}, -{30,-35,28}, -{30,-35,29}, -{30,-35,30}, -{30,-35,31}, -{30,-35,32}, -{30,-35,33}, -{30,-35,34}, -{30,-35,35}, -{30,-35,36}, -{30,-35,37}, -{30,-34,21}, -{30,-34,22}, -{30,-34,23}, -{30,-34,24}, -{30,-34,25}, -{30,-34,26}, -{30,-34,27}, -{30,-34,28}, -{30,-34,29}, -{30,-34,30}, -{30,-34,31}, -{30,-34,32}, -{30,-34,33}, -{30,-34,34}, -{30,-34,35}, -{30,-34,36}, -{30,-34,37}, -{30,-33,18}, -{30,-33,19}, -{30,-33,20}, -{30,-33,21}, -{30,-33,22}, -{30,-33,23}, -{30,-33,24}, -{30,-33,25}, -{30,-33,26}, -{30,-33,27}, -{30,-33,28}, -{30,-33,29}, -{30,-33,30}, -{30,-33,31}, -{30,-33,32}, -{30,-33,33}, -{30,-33,34}, -{30,-33,35}, -{30,-33,36}, -{30,-33,37}, -{30,-32,16}, -{30,-32,17}, -{30,-32,18}, -{30,-32,19}, -{30,-32,20}, -{30,-32,21}, -{30,-32,22}, -{30,-32,23}, -{30,-32,24}, -{30,-32,25}, -{30,-32,26}, -{30,-32,27}, -{30,-32,28}, -{30,-32,29}, -{30,-32,30}, -{30,-32,31}, -{30,-32,32}, -{30,-32,33}, -{30,-32,34}, -{30,-32,35}, -{30,-32,36}, -{30,-32,37}, -{30,-31,13}, -{30,-31,14}, -{30,-31,15}, -{30,-31,16}, -{30,-31,17}, -{30,-31,18}, -{30,-31,19}, -{30,-31,20}, -{30,-31,21}, -{30,-31,22}, -{30,-31,23}, -{30,-31,24}, -{30,-31,25}, -{30,-31,26}, -{30,-31,27}, -{30,-31,28}, -{30,-31,29}, -{30,-31,30}, -{30,-31,31}, -{30,-31,32}, -{30,-31,33}, -{30,-31,34}, -{30,-31,35}, -{30,-31,36}, -{30,-31,37}, -{30,-30,11}, -{30,-30,12}, -{30,-30,13}, -{30,-30,14}, -{30,-30,15}, -{30,-30,16}, -{30,-30,17}, -{30,-30,18}, -{30,-30,19}, -{30,-30,20}, -{30,-30,21}, -{30,-30,22}, -{30,-30,23}, -{30,-30,24}, -{30,-30,25}, -{30,-30,26}, -{30,-30,27}, -{30,-30,28}, -{30,-30,29}, -{30,-30,30}, -{30,-30,31}, -{30,-30,32}, -{30,-30,33}, -{30,-30,34}, -{30,-30,35}, -{30,-30,36}, -{30,-30,37}, -{30,-29,9}, -{30,-29,10}, -{30,-29,11}, -{30,-29,12}, -{30,-29,13}, -{30,-29,14}, -{30,-29,15}, -{30,-29,16}, -{30,-29,17}, -{30,-29,18}, -{30,-29,19}, -{30,-29,20}, -{30,-29,21}, -{30,-29,22}, -{30,-29,23}, -{30,-29,24}, -{30,-29,25}, -{30,-29,26}, -{30,-29,27}, -{30,-29,28}, -{30,-29,29}, -{30,-29,30}, -{30,-29,31}, -{30,-29,32}, -{30,-29,33}, -{30,-29,34}, -{30,-29,35}, -{30,-29,36}, -{30,-29,37}, -{30,-28,7}, -{30,-28,8}, -{30,-28,9}, -{30,-28,10}, -{30,-28,11}, -{30,-28,12}, -{30,-28,13}, -{30,-28,14}, -{30,-28,15}, -{30,-28,16}, -{30,-28,17}, -{30,-28,18}, -{30,-28,19}, -{30,-28,20}, -{30,-28,21}, -{30,-28,22}, -{30,-28,23}, -{30,-28,24}, -{30,-28,25}, -{30,-28,26}, -{30,-28,27}, -{30,-28,28}, -{30,-28,29}, -{30,-28,30}, -{30,-28,31}, -{30,-28,32}, -{30,-28,33}, -{30,-28,34}, -{30,-28,35}, -{30,-28,36}, -{30,-28,37}, -{30,-27,5}, -{30,-27,6}, -{30,-27,7}, -{30,-27,8}, -{30,-27,9}, -{30,-27,10}, -{30,-27,11}, -{30,-27,12}, -{30,-27,13}, -{30,-27,14}, -{30,-27,15}, -{30,-27,16}, -{30,-27,17}, -{30,-27,18}, -{30,-27,19}, -{30,-27,20}, -{30,-27,21}, -{30,-27,22}, -{30,-27,23}, -{30,-27,24}, -{30,-27,25}, -{30,-27,26}, -{30,-27,27}, -{30,-27,28}, -{30,-27,29}, -{30,-27,30}, -{30,-27,31}, -{30,-27,32}, -{30,-27,33}, -{30,-27,34}, -{30,-27,35}, -{30,-27,36}, -{30,-27,37}, -{30,-26,3}, -{30,-26,4}, -{30,-26,5}, -{30,-26,6}, -{30,-26,7}, -{30,-26,8}, -{30,-26,9}, -{30,-26,10}, -{30,-26,11}, -{30,-26,12}, -{30,-26,13}, -{30,-26,14}, -{30,-26,15}, -{30,-26,16}, -{30,-26,17}, -{30,-26,18}, -{30,-26,19}, -{30,-26,20}, -{30,-26,21}, -{30,-26,22}, -{30,-26,23}, -{30,-26,24}, -{30,-26,25}, -{30,-26,26}, -{30,-26,27}, -{30,-26,28}, -{30,-26,29}, -{30,-26,30}, -{30,-26,31}, -{30,-26,32}, -{30,-26,33}, -{30,-26,34}, -{30,-26,35}, -{30,-26,36}, -{30,-26,37}, -{30,-25,1}, -{30,-25,2}, -{30,-25,3}, -{30,-25,4}, -{30,-25,5}, -{30,-25,6}, -{30,-25,7}, -{30,-25,8}, -{30,-25,9}, -{30,-25,10}, -{30,-25,11}, -{30,-25,12}, -{30,-25,13}, -{30,-25,14}, -{30,-25,15}, -{30,-25,16}, -{30,-25,17}, -{30,-25,18}, -{30,-25,19}, -{30,-25,20}, -{30,-25,21}, -{30,-25,22}, -{30,-25,23}, -{30,-25,24}, -{30,-25,25}, -{30,-25,26}, -{30,-25,27}, -{30,-25,28}, -{30,-25,29}, -{30,-25,30}, -{30,-25,31}, -{30,-25,32}, -{30,-25,33}, -{30,-25,34}, -{30,-25,35}, -{30,-25,36}, -{30,-25,37}, -{30,-24,0}, -{30,-24,1}, -{30,-24,2}, -{30,-24,3}, -{30,-24,4}, -{30,-24,5}, -{30,-24,6}, -{30,-24,7}, -{30,-24,8}, -{30,-24,9}, -{30,-24,10}, -{30,-24,11}, -{30,-24,12}, -{30,-24,13}, -{30,-24,14}, -{30,-24,15}, -{30,-24,16}, -{30,-24,17}, -{30,-24,18}, -{30,-24,19}, -{30,-24,20}, -{30,-24,21}, -{30,-24,22}, -{30,-24,23}, -{30,-24,24}, -{30,-24,25}, -{30,-24,26}, -{30,-24,27}, -{30,-24,28}, -{30,-24,29}, -{30,-24,30}, -{30,-24,31}, -{30,-24,32}, -{30,-24,33}, -{30,-24,34}, -{30,-24,35}, -{30,-24,36}, -{30,-24,37}, -{30,-23,-2}, -{30,-23,-1}, -{30,-23,0}, -{30,-23,1}, -{30,-23,2}, -{30,-23,3}, -{30,-23,4}, -{30,-23,5}, -{30,-23,6}, -{30,-23,7}, -{30,-23,8}, -{30,-23,9}, -{30,-23,10}, -{30,-23,11}, -{30,-23,12}, -{30,-23,13}, -{30,-23,14}, -{30,-23,15}, -{30,-23,16}, -{30,-23,17}, -{30,-23,18}, -{30,-23,19}, -{30,-23,20}, -{30,-23,21}, -{30,-23,22}, -{30,-23,23}, -{30,-23,24}, -{30,-23,25}, -{30,-23,26}, -{30,-23,27}, -{30,-23,28}, -{30,-23,29}, -{30,-23,30}, -{30,-23,31}, -{30,-23,32}, -{30,-23,33}, -{30,-23,34}, -{30,-23,35}, -{30,-23,36}, -{30,-23,37}, -{30,-22,-4}, -{30,-22,-3}, -{30,-22,-2}, -{30,-22,-1}, -{30,-22,0}, -{30,-22,1}, -{30,-22,2}, -{30,-22,3}, -{30,-22,4}, -{30,-22,5}, -{30,-22,6}, -{30,-22,7}, -{30,-22,8}, -{30,-22,9}, -{30,-22,10}, -{30,-22,11}, -{30,-22,12}, -{30,-22,13}, -{30,-22,14}, -{30,-22,15}, -{30,-22,16}, -{30,-22,17}, -{30,-22,18}, -{30,-22,19}, -{30,-22,20}, -{30,-22,21}, -{30,-22,22}, -{30,-22,23}, -{30,-22,24}, -{30,-22,25}, -{30,-22,26}, -{30,-22,27}, -{30,-22,28}, -{30,-22,29}, -{30,-22,30}, -{30,-22,31}, -{30,-22,32}, -{30,-22,33}, -{30,-22,34}, -{30,-22,35}, -{30,-22,36}, -{30,-22,37}, -{30,-21,-5}, -{30,-21,-4}, -{30,-21,-3}, -{30,-21,-2}, -{30,-21,-1}, -{30,-21,0}, -{30,-21,1}, -{30,-21,2}, -{30,-21,3}, -{30,-21,4}, -{30,-21,5}, -{30,-21,6}, -{30,-21,7}, -{30,-21,8}, -{30,-21,9}, -{30,-21,10}, -{30,-21,11}, -{30,-21,12}, -{30,-21,13}, -{30,-21,14}, -{30,-21,15}, -{30,-21,16}, -{30,-21,17}, -{30,-21,18}, -{30,-21,19}, -{30,-21,20}, -{30,-21,21}, -{30,-21,22}, -{30,-21,23}, -{30,-21,24}, -{30,-21,25}, -{30,-21,26}, -{30,-21,27}, -{30,-21,28}, -{30,-21,29}, -{30,-21,30}, -{30,-21,31}, -{30,-21,32}, -{30,-21,33}, -{30,-21,34}, -{30,-21,35}, -{30,-21,36}, -{30,-21,37}, -{30,-20,-7}, -{30,-20,-6}, -{30,-20,-5}, -{30,-20,-4}, -{30,-20,-3}, -{30,-20,-2}, -{30,-20,-1}, -{30,-20,0}, -{30,-20,1}, -{30,-20,2}, -{30,-20,3}, -{30,-20,4}, -{30,-20,5}, -{30,-20,6}, -{30,-20,7}, -{30,-20,8}, -{30,-20,9}, -{30,-20,10}, -{30,-20,11}, -{30,-20,12}, -{30,-20,13}, -{30,-20,14}, -{30,-20,15}, -{30,-20,16}, -{30,-20,17}, -{30,-20,18}, -{30,-20,19}, -{30,-20,20}, -{30,-20,21}, -{30,-20,22}, -{30,-20,23}, -{30,-20,24}, -{30,-20,25}, -{30,-20,26}, -{30,-20,27}, -{30,-20,28}, -{30,-20,29}, -{30,-20,30}, -{30,-20,31}, -{30,-20,32}, -{30,-20,33}, -{30,-20,34}, -{30,-20,35}, -{30,-20,36}, -{30,-20,37}, -{30,-19,-8}, -{30,-19,-7}, -{30,-19,-6}, -{30,-19,-5}, -{30,-19,-4}, -{30,-19,-3}, -{30,-19,-2}, -{30,-19,-1}, -{30,-19,0}, -{30,-19,1}, -{30,-19,2}, -{30,-19,3}, -{30,-19,4}, -{30,-19,5}, -{30,-19,6}, -{30,-19,7}, -{30,-19,8}, -{30,-19,9}, -{30,-19,10}, -{30,-19,11}, -{30,-19,12}, -{30,-19,13}, -{30,-19,14}, -{30,-19,15}, -{30,-19,16}, -{30,-19,17}, -{30,-19,18}, -{30,-19,19}, -{30,-19,20}, -{30,-19,21}, -{30,-19,22}, -{30,-19,23}, -{30,-19,24}, -{30,-19,25}, -{30,-19,26}, -{30,-19,27}, -{30,-19,28}, -{30,-19,29}, -{30,-19,30}, -{30,-19,31}, -{30,-19,32}, -{30,-19,33}, -{30,-19,34}, -{30,-19,35}, -{30,-19,36}, -{30,-19,37}, -{30,-18,-10}, -{30,-18,-9}, -{30,-18,-8}, -{30,-18,-7}, -{30,-18,-6}, -{30,-18,-5}, -{30,-18,-4}, -{30,-18,-3}, -{30,-18,-2}, -{30,-18,-1}, -{30,-18,0}, -{30,-18,1}, -{30,-18,2}, -{30,-18,3}, -{30,-18,4}, -{30,-18,5}, -{30,-18,6}, -{30,-18,7}, -{30,-18,8}, -{30,-18,9}, -{30,-18,10}, -{30,-18,11}, -{30,-18,12}, -{30,-18,13}, -{30,-18,14}, -{30,-18,15}, -{30,-18,16}, -{30,-18,17}, -{30,-18,18}, -{30,-18,19}, -{30,-18,20}, -{30,-18,21}, -{30,-18,22}, -{30,-18,23}, -{30,-18,24}, -{30,-18,25}, -{30,-18,26}, -{30,-18,27}, -{30,-18,28}, -{30,-18,29}, -{30,-18,30}, -{30,-18,31}, -{30,-18,32}, -{30,-18,33}, -{30,-18,34}, -{30,-18,35}, -{30,-18,36}, -{30,-18,37}, -{30,-18,38}, -{30,-17,-11}, -{30,-17,-10}, -{30,-17,-9}, -{30,-17,-8}, -{30,-17,-7}, -{30,-17,-6}, -{30,-17,-5}, -{30,-17,-4}, -{30,-17,-3}, -{30,-17,-2}, -{30,-17,-1}, -{30,-17,0}, -{30,-17,1}, -{30,-17,2}, -{30,-17,3}, -{30,-17,4}, -{30,-17,5}, -{30,-17,6}, -{30,-17,7}, -{30,-17,8}, -{30,-17,9}, -{30,-17,10}, -{30,-17,11}, -{30,-17,12}, -{30,-17,13}, -{30,-17,14}, -{30,-17,15}, -{30,-17,16}, -{30,-17,17}, -{30,-17,18}, -{30,-17,19}, -{30,-17,20}, -{30,-17,21}, -{30,-17,22}, -{30,-17,23}, -{30,-17,24}, -{30,-17,25}, -{30,-17,26}, -{30,-17,27}, -{30,-17,28}, -{30,-17,29}, -{30,-17,30}, -{30,-17,31}, -{30,-17,32}, -{30,-17,33}, -{30,-17,34}, -{30,-17,35}, -{30,-17,36}, -{30,-17,37}, -{30,-17,38}, -{30,-16,-13}, -{30,-16,-12}, -{30,-16,-11}, -{30,-16,-10}, -{30,-16,-9}, -{30,-16,-8}, -{30,-16,-7}, -{30,-16,-6}, -{30,-16,-5}, -{30,-16,-4}, -{30,-16,-3}, -{30,-16,-2}, -{30,-16,-1}, -{30,-16,0}, -{30,-16,1}, -{30,-16,2}, -{30,-16,3}, -{30,-16,4}, -{30,-16,5}, -{30,-16,6}, -{30,-16,7}, -{30,-16,8}, -{30,-16,9}, -{30,-16,10}, -{30,-16,11}, -{30,-16,12}, -{30,-16,13}, -{30,-16,14}, -{30,-16,15}, -{30,-16,16}, -{30,-16,17}, -{30,-16,18}, -{30,-16,19}, -{30,-16,20}, -{30,-16,21}, -{30,-16,22}, -{30,-16,23}, -{30,-16,24}, -{30,-16,25}, -{30,-16,26}, -{30,-16,27}, -{30,-16,28}, -{30,-16,29}, -{30,-16,30}, -{30,-16,31}, -{30,-16,32}, -{30,-16,33}, -{30,-16,34}, -{30,-16,35}, -{30,-16,36}, -{30,-16,37}, -{30,-16,38}, -{30,-15,-14}, -{30,-15,-13}, -{30,-15,-12}, -{30,-15,-11}, -{30,-15,-10}, -{30,-15,-9}, -{30,-15,-8}, -{30,-15,-7}, -{30,-15,-6}, -{30,-15,-5}, -{30,-15,-4}, -{30,-15,-3}, -{30,-15,-2}, -{30,-15,-1}, -{30,-15,0}, -{30,-15,1}, -{30,-15,2}, -{30,-15,3}, -{30,-15,4}, -{30,-15,5}, -{30,-15,6}, -{30,-15,7}, -{30,-15,8}, -{30,-15,9}, -{30,-15,10}, -{30,-15,11}, -{30,-15,12}, -{30,-15,13}, -{30,-15,14}, -{30,-15,15}, -{30,-15,16}, -{30,-15,17}, -{30,-15,18}, -{30,-15,19}, -{30,-15,20}, -{30,-15,21}, -{30,-15,22}, -{30,-15,23}, -{30,-15,24}, -{30,-15,25}, -{30,-15,26}, -{30,-15,27}, -{30,-15,28}, -{30,-15,29}, -{30,-15,30}, -{30,-15,31}, -{30,-15,32}, -{30,-15,33}, -{30,-15,34}, -{30,-15,35}, -{30,-15,36}, -{30,-15,37}, -{30,-15,38}, -{30,-14,-16}, -{30,-14,-15}, -{30,-14,-14}, -{30,-14,-13}, -{30,-14,-12}, -{30,-14,-11}, -{30,-14,-10}, -{30,-14,-9}, -{30,-14,-8}, -{30,-14,-7}, -{30,-14,-6}, -{30,-14,-5}, -{30,-14,-4}, -{30,-14,-3}, -{30,-14,-2}, -{30,-14,-1}, -{30,-14,0}, -{30,-14,1}, -{30,-14,2}, -{30,-14,3}, -{30,-14,4}, -{30,-14,5}, -{30,-14,6}, -{30,-14,7}, -{30,-14,8}, -{30,-14,9}, -{30,-14,10}, -{30,-14,11}, -{30,-14,12}, -{30,-14,13}, -{30,-14,14}, -{30,-14,15}, -{30,-14,16}, -{30,-14,17}, -{30,-14,18}, -{30,-14,19}, -{30,-14,20}, -{30,-14,21}, -{30,-14,22}, -{30,-14,23}, -{30,-14,24}, -{30,-14,25}, -{30,-14,26}, -{30,-14,27}, -{30,-14,28}, -{30,-14,29}, -{30,-14,30}, -{30,-14,31}, -{30,-14,32}, -{30,-14,33}, -{30,-14,34}, -{30,-14,35}, -{30,-14,36}, -{30,-14,37}, -{30,-14,38}, -{30,-13,-17}, -{30,-13,-16}, -{30,-13,-15}, -{30,-13,-14}, -{30,-13,-13}, -{30,-13,-12}, -{30,-13,-11}, -{30,-13,-10}, -{30,-13,-9}, -{30,-13,-8}, -{30,-13,-7}, -{30,-13,-6}, -{30,-13,-5}, -{30,-13,-4}, -{30,-13,-3}, -{30,-13,-2}, -{30,-13,-1}, -{30,-13,0}, -{30,-13,1}, -{30,-13,2}, -{30,-13,3}, -{30,-13,4}, -{30,-13,5}, -{30,-13,6}, -{30,-13,7}, -{30,-13,8}, -{30,-13,9}, -{30,-13,10}, -{30,-13,11}, -{30,-13,12}, -{30,-13,13}, -{30,-13,14}, -{30,-13,15}, -{30,-13,16}, -{30,-13,17}, -{30,-13,18}, -{30,-13,19}, -{30,-13,20}, -{30,-13,21}, -{30,-13,22}, -{30,-13,23}, -{30,-13,24}, -{30,-13,25}, -{30,-13,26}, -{30,-13,27}, -{30,-13,28}, -{30,-13,29}, -{30,-13,30}, -{30,-13,31}, -{30,-13,32}, -{30,-13,33}, -{30,-13,34}, -{30,-13,35}, -{30,-13,36}, -{30,-13,37}, -{30,-13,38}, -{30,-12,-18}, -{30,-12,-17}, -{30,-12,-16}, -{30,-12,-15}, -{30,-12,-14}, -{30,-12,-13}, -{30,-12,-12}, -{30,-12,-11}, -{30,-12,-10}, -{30,-12,-9}, -{30,-12,-8}, -{30,-12,-7}, -{30,-12,-6}, -{30,-12,-5}, -{30,-12,-4}, -{30,-12,-3}, -{30,-12,-2}, -{30,-12,-1}, -{30,-12,0}, -{30,-12,1}, -{30,-12,2}, -{30,-12,3}, -{30,-12,4}, -{30,-12,5}, -{30,-12,6}, -{30,-12,7}, -{30,-12,8}, -{30,-12,9}, -{30,-12,10}, -{30,-12,11}, -{30,-12,12}, -{30,-12,13}, -{30,-12,14}, -{30,-12,15}, -{30,-12,16}, -{30,-12,17}, -{30,-12,18}, -{30,-12,19}, -{30,-12,20}, -{30,-12,21}, -{30,-12,22}, -{30,-12,23}, -{30,-12,24}, -{30,-12,25}, -{30,-12,26}, -{30,-12,27}, -{30,-12,28}, -{30,-12,29}, -{30,-12,30}, -{30,-12,31}, -{30,-12,32}, -{30,-12,33}, -{30,-12,34}, -{30,-12,35}, -{30,-12,36}, -{30,-12,37}, -{30,-12,38}, -{30,-11,-19}, -{30,-11,-18}, -{30,-11,-17}, -{30,-11,-16}, -{30,-11,-15}, -{30,-11,-14}, -{30,-11,-13}, -{30,-11,-12}, -{30,-11,-11}, -{30,-11,-10}, -{30,-11,-9}, -{30,-11,-8}, -{30,-11,-7}, -{30,-11,-6}, -{30,-11,-5}, -{30,-11,-4}, -{30,-11,-3}, -{30,-11,-2}, -{30,-11,-1}, -{30,-11,0}, -{30,-11,1}, -{30,-11,2}, -{30,-11,3}, -{30,-11,4}, -{30,-11,5}, -{30,-11,6}, -{30,-11,7}, -{30,-11,8}, -{30,-11,9}, -{30,-11,10}, -{30,-11,11}, -{30,-11,12}, -{30,-11,13}, -{30,-11,14}, -{30,-11,15}, -{30,-11,16}, -{30,-11,17}, -{30,-11,18}, -{30,-11,19}, -{30,-11,20}, -{30,-11,21}, -{30,-11,22}, -{30,-11,23}, -{30,-11,24}, -{30,-11,25}, -{30,-11,26}, -{30,-11,27}, -{30,-11,28}, -{30,-11,29}, -{30,-11,30}, -{30,-11,31}, -{30,-11,32}, -{30,-11,33}, -{30,-11,34}, -{30,-11,35}, -{30,-11,36}, -{30,-11,37}, -{30,-11,38}, -{30,-10,-21}, -{30,-10,-20}, -{30,-10,-19}, -{30,-10,-18}, -{30,-10,-17}, -{30,-10,-16}, -{30,-10,-15}, -{30,-10,-14}, -{30,-10,-13}, -{30,-10,-12}, -{30,-10,-11}, -{30,-10,-10}, -{30,-10,-9}, -{30,-10,-8}, -{30,-10,-7}, -{30,-10,-6}, -{30,-10,-5}, -{30,-10,-4}, -{30,-10,-3}, -{30,-10,-2}, -{30,-10,-1}, -{30,-10,0}, -{30,-10,1}, -{30,-10,2}, -{30,-10,3}, -{30,-10,4}, -{30,-10,5}, -{30,-10,6}, -{30,-10,7}, -{30,-10,8}, -{30,-10,9}, -{30,-10,10}, -{30,-10,11}, -{30,-10,12}, -{30,-10,13}, -{30,-10,14}, -{30,-10,15}, -{30,-10,16}, -{30,-10,17}, -{30,-10,18}, -{30,-10,19}, -{30,-10,20}, -{30,-10,21}, -{30,-10,22}, -{30,-10,23}, -{30,-10,24}, -{30,-10,25}, -{30,-10,26}, -{30,-10,27}, -{30,-10,28}, -{30,-10,29}, -{30,-10,30}, -{30,-10,31}, -{30,-10,32}, -{30,-10,33}, -{30,-10,34}, -{30,-10,35}, -{30,-10,36}, -{30,-10,37}, -{30,-10,38}, -{30,-9,-22}, -{30,-9,-21}, -{30,-9,-20}, -{30,-9,-19}, -{30,-9,-18}, -{30,-9,-17}, -{30,-9,-16}, -{30,-9,-15}, -{30,-9,-14}, -{30,-9,-13}, -{30,-9,-12}, -{30,-9,-11}, -{30,-9,-10}, -{30,-9,-9}, -{30,-9,-8}, -{30,-9,-7}, -{30,-9,-6}, -{30,-9,-5}, -{30,-9,-4}, -{30,-9,-3}, -{30,-9,-2}, -{30,-9,-1}, -{30,-9,0}, -{30,-9,1}, -{30,-9,2}, -{30,-9,3}, -{30,-9,4}, -{30,-9,5}, -{30,-9,6}, -{30,-9,7}, -{30,-9,8}, -{30,-9,9}, -{30,-9,10}, -{30,-9,11}, -{30,-9,12}, -{30,-9,13}, -{30,-9,14}, -{30,-9,15}, -{30,-9,16}, -{30,-9,17}, -{30,-9,18}, -{30,-9,19}, -{30,-9,20}, -{30,-9,21}, -{30,-9,22}, -{30,-9,23}, -{30,-9,24}, -{30,-9,25}, -{30,-9,26}, -{30,-9,27}, -{30,-9,28}, -{30,-9,29}, -{30,-9,30}, -{30,-9,31}, -{30,-9,32}, -{30,-9,33}, -{30,-9,34}, -{30,-9,35}, -{30,-9,36}, -{30,-9,37}, -{30,-9,38}, -{30,-8,-23}, -{30,-8,-22}, -{30,-8,-21}, -{30,-8,-20}, -{30,-8,-19}, -{30,-8,-18}, -{30,-8,-17}, -{30,-8,-16}, -{30,-8,-15}, -{30,-8,-14}, -{30,-8,-13}, -{30,-8,-12}, -{30,-8,-11}, -{30,-8,-10}, -{30,-8,-9}, -{30,-8,-8}, -{30,-8,-7}, -{30,-8,-6}, -{30,-8,-5}, -{30,-8,-4}, -{30,-8,-3}, -{30,-8,-2}, -{30,-8,-1}, -{30,-8,0}, -{30,-8,1}, -{30,-8,2}, -{30,-8,3}, -{30,-8,4}, -{30,-8,5}, -{30,-8,6}, -{30,-8,7}, -{30,-8,8}, -{30,-8,9}, -{30,-8,10}, -{30,-8,11}, -{30,-8,12}, -{30,-8,13}, -{30,-8,14}, -{30,-8,15}, -{30,-8,16}, -{30,-8,17}, -{30,-8,18}, -{30,-8,19}, -{30,-8,20}, -{30,-8,21}, -{30,-8,22}, -{30,-8,23}, -{30,-8,24}, -{30,-8,25}, -{30,-8,26}, -{30,-8,27}, -{30,-8,28}, -{30,-8,29}, -{30,-8,30}, -{30,-8,31}, -{30,-8,32}, -{30,-8,33}, -{30,-8,34}, -{30,-8,35}, -{30,-8,36}, -{30,-8,37}, -{30,-8,38}, -{30,-7,-25}, -{30,-7,-24}, -{30,-7,-23}, -{30,-7,-22}, -{30,-7,-21}, -{30,-7,-20}, -{30,-7,-19}, -{30,-7,-18}, -{30,-7,-17}, -{30,-7,-16}, -{30,-7,-15}, -{30,-7,-14}, -{30,-7,-13}, -{30,-7,-12}, -{30,-7,-11}, -{30,-7,-10}, -{30,-7,-9}, -{30,-7,-8}, -{30,-7,-7}, -{30,-7,-6}, -{30,-7,-5}, -{30,-7,-4}, -{30,-7,-3}, -{30,-7,-2}, -{30,-7,-1}, -{30,-7,0}, -{30,-7,1}, -{30,-7,2}, -{30,-7,3}, -{30,-7,4}, -{30,-7,5}, -{30,-7,6}, -{30,-7,7}, -{30,-7,8}, -{30,-7,9}, -{30,-7,10}, -{30,-7,11}, -{30,-7,12}, -{30,-7,13}, -{30,-7,14}, -{30,-7,15}, -{30,-7,16}, -{30,-7,17}, -{30,-7,18}, -{30,-7,19}, -{30,-7,20}, -{30,-7,21}, -{30,-7,22}, -{30,-7,23}, -{30,-7,24}, -{30,-7,25}, -{30,-7,26}, -{30,-7,27}, -{30,-7,28}, -{30,-7,29}, -{30,-7,30}, -{30,-7,31}, -{30,-7,32}, -{30,-7,33}, -{30,-7,34}, -{30,-7,35}, -{30,-7,36}, -{30,-7,37}, -{30,-7,38}, -{30,-6,-26}, -{30,-6,-25}, -{30,-6,-24}, -{30,-6,-23}, -{30,-6,-22}, -{30,-6,-21}, -{30,-6,-20}, -{30,-6,-19}, -{30,-6,-18}, -{30,-6,-17}, -{30,-6,-16}, -{30,-6,-15}, -{30,-6,-14}, -{30,-6,-13}, -{30,-6,-12}, -{30,-6,-11}, -{30,-6,-10}, -{30,-6,-9}, -{30,-6,-8}, -{30,-6,-7}, -{30,-6,-6}, -{30,-6,-5}, -{30,-6,-4}, -{30,-6,-3}, -{30,-6,-2}, -{30,-6,-1}, -{30,-6,0}, -{30,-6,1}, -{30,-6,2}, -{30,-6,3}, -{30,-6,4}, -{30,-6,5}, -{30,-6,6}, -{30,-6,7}, -{30,-6,8}, -{30,-6,9}, -{30,-6,10}, -{30,-6,11}, -{30,-6,12}, -{30,-6,13}, -{30,-6,14}, -{30,-6,15}, -{30,-6,16}, -{30,-6,17}, -{30,-6,18}, -{30,-6,19}, -{30,-6,20}, -{30,-6,21}, -{30,-6,22}, -{30,-6,23}, -{30,-6,24}, -{30,-6,25}, -{30,-6,26}, -{30,-6,27}, -{30,-6,28}, -{30,-6,29}, -{30,-6,30}, -{30,-6,31}, -{30,-6,32}, -{30,-6,33}, -{30,-6,34}, -{30,-6,35}, -{30,-6,36}, -{30,-6,37}, -{30,-6,38}, -{30,-5,-27}, -{30,-5,-26}, -{30,-5,-25}, -{30,-5,-24}, -{30,-5,-23}, -{30,-5,-22}, -{30,-5,-21}, -{30,-5,-20}, -{30,-5,-19}, -{30,-5,-18}, -{30,-5,-17}, -{30,-5,-16}, -{30,-5,-15}, -{30,-5,-14}, -{30,-5,-13}, -{30,-5,-12}, -{30,-5,-11}, -{30,-5,-10}, -{30,-5,-9}, -{30,-5,-8}, -{30,-5,-7}, -{30,-5,-6}, -{30,-5,-5}, -{30,-5,-4}, -{30,-5,-3}, -{30,-5,-2}, -{30,-5,-1}, -{30,-5,0}, -{30,-5,1}, -{30,-5,2}, -{30,-5,3}, -{30,-5,4}, -{30,-5,5}, -{30,-5,6}, -{30,-5,7}, -{30,-5,8}, -{30,-5,9}, -{30,-5,10}, -{30,-5,11}, -{30,-5,12}, -{30,-5,13}, -{30,-5,14}, -{30,-5,15}, -{30,-5,16}, -{30,-5,17}, -{30,-5,18}, -{30,-5,19}, -{30,-5,20}, -{30,-5,21}, -{30,-5,22}, -{30,-5,23}, -{30,-5,24}, -{30,-5,25}, -{30,-5,26}, -{30,-5,27}, -{30,-5,28}, -{30,-5,29}, -{30,-5,30}, -{30,-5,31}, -{30,-5,32}, -{30,-5,33}, -{30,-5,34}, -{30,-5,35}, -{30,-5,36}, -{30,-5,37}, -{30,-5,38}, -{30,-4,-28}, -{30,-4,-27}, -{30,-4,-26}, -{30,-4,-25}, -{30,-4,-24}, -{30,-4,-23}, -{30,-4,-22}, -{30,-4,-21}, -{30,-4,-20}, -{30,-4,-19}, -{30,-4,-18}, -{30,-4,-17}, -{30,-4,-16}, -{30,-4,-15}, -{30,-4,-14}, -{30,-4,-13}, -{30,-4,-12}, -{30,-4,-11}, -{30,-4,-10}, -{30,-4,-9}, -{30,-4,-8}, -{30,-4,-7}, -{30,-4,-6}, -{30,-4,-5}, -{30,-4,-4}, -{30,-4,-3}, -{30,-4,-2}, -{30,-4,-1}, -{30,-4,0}, -{30,-4,1}, -{30,-4,2}, -{30,-4,3}, -{30,-4,4}, -{30,-4,5}, -{30,-4,6}, -{30,-4,7}, -{30,-4,8}, -{30,-4,9}, -{30,-4,10}, -{30,-4,11}, -{30,-4,12}, -{30,-4,13}, -{30,-4,14}, -{30,-4,15}, -{30,-4,16}, -{30,-4,17}, -{30,-4,18}, -{30,-4,19}, -{30,-4,20}, -{30,-4,21}, -{30,-4,22}, -{30,-4,23}, -{30,-4,24}, -{30,-4,25}, -{30,-4,26}, -{30,-4,27}, -{30,-4,28}, -{30,-4,29}, -{30,-4,30}, -{30,-4,31}, -{30,-4,32}, -{30,-4,33}, -{30,-4,34}, -{30,-4,35}, -{30,-4,36}, -{30,-4,37}, -{30,-4,38}, -{30,-3,-29}, -{30,-3,-28}, -{30,-3,-27}, -{30,-3,-26}, -{30,-3,-25}, -{30,-3,-24}, -{30,-3,-23}, -{30,-3,-22}, -{30,-3,-21}, -{30,-3,-20}, -{30,-3,-19}, -{30,-3,-18}, -{30,-3,-17}, -{30,-3,-16}, -{30,-3,-15}, -{30,-3,-14}, -{30,-3,-13}, -{30,-3,-12}, -{30,-3,-11}, -{30,-3,-10}, -{30,-3,-9}, -{30,-3,-8}, -{30,-3,-7}, -{30,-3,-6}, -{30,-3,-5}, -{30,-3,-4}, -{30,-3,-3}, -{30,-3,-2}, -{30,-3,-1}, -{30,-3,0}, -{30,-3,1}, -{30,-3,2}, -{30,-3,3}, -{30,-3,4}, -{30,-3,5}, -{30,-3,6}, -{30,-3,7}, -{30,-3,8}, -{30,-3,9}, -{30,-3,10}, -{30,-3,11}, -{30,-3,12}, -{30,-3,13}, -{30,-3,14}, -{30,-3,15}, -{30,-3,16}, -{30,-3,17}, -{30,-3,18}, -{30,-3,19}, -{30,-3,20}, -{30,-3,21}, -{30,-3,22}, -{30,-3,23}, -{30,-3,24}, -{30,-3,25}, -{30,-3,26}, -{30,-3,27}, -{30,-3,28}, -{30,-3,29}, -{30,-3,30}, -{30,-3,31}, -{30,-3,32}, -{30,-3,33}, -{30,-3,34}, -{30,-3,35}, -{30,-3,36}, -{30,-3,37}, -{30,-3,38}, -{30,-2,-30}, -{30,-2,-29}, -{30,-2,-28}, -{30,-2,-27}, -{30,-2,-26}, -{30,-2,-25}, -{30,-2,-24}, -{30,-2,-23}, -{30,-2,-22}, -{30,-2,-21}, -{30,-2,-20}, -{30,-2,-19}, -{30,-2,-18}, -{30,-2,-17}, -{30,-2,-16}, -{30,-2,-15}, -{30,-2,-14}, -{30,-2,-13}, -{30,-2,-12}, -{30,-2,-11}, -{30,-2,-10}, -{30,-2,-9}, -{30,-2,-8}, -{30,-2,-7}, -{30,-2,-6}, -{30,-2,-5}, -{30,-2,-4}, -{30,-2,-3}, -{30,-2,-2}, -{30,-2,-1}, -{30,-2,0}, -{30,-2,1}, -{30,-2,2}, -{30,-2,3}, -{30,-2,4}, -{30,-2,5}, -{30,-2,6}, -{30,-2,7}, -{30,-2,8}, -{30,-2,9}, -{30,-2,10}, -{30,-2,11}, -{30,-2,12}, -{30,-2,13}, -{30,-2,14}, -{30,-2,15}, -{30,-2,16}, -{30,-2,17}, -{30,-2,18}, -{30,-2,19}, -{30,-2,20}, -{30,-2,21}, -{30,-2,22}, -{30,-2,23}, -{30,-2,24}, -{30,-2,25}, -{30,-2,26}, -{30,-2,27}, -{30,-2,28}, -{30,-2,29}, -{30,-2,30}, -{30,-2,31}, -{30,-2,32}, -{30,-2,33}, -{30,-2,34}, -{30,-2,35}, -{30,-2,36}, -{30,-2,37}, -{30,-2,38}, -{30,-2,39}, -{30,-1,-32}, -{30,-1,-31}, -{30,-1,-30}, -{30,-1,-29}, -{30,-1,-28}, -{30,-1,-27}, -{30,-1,-26}, -{30,-1,-25}, -{30,-1,-24}, -{30,-1,-23}, -{30,-1,-22}, -{30,-1,-21}, -{30,-1,-20}, -{30,-1,-19}, -{30,-1,-18}, -{30,-1,-17}, -{30,-1,-16}, -{30,-1,-15}, -{30,-1,-14}, -{30,-1,-13}, -{30,-1,-12}, -{30,-1,-11}, -{30,-1,-10}, -{30,-1,-9}, -{30,-1,-8}, -{30,-1,-7}, -{30,-1,-6}, -{30,-1,-5}, -{30,-1,-4}, -{30,-1,-3}, -{30,-1,-2}, -{30,-1,-1}, -{30,-1,0}, -{30,-1,1}, -{30,-1,2}, -{30,-1,3}, -{30,-1,4}, -{30,-1,5}, -{30,-1,6}, -{30,-1,7}, -{30,-1,8}, -{30,-1,9}, -{30,-1,10}, -{30,-1,11}, -{30,-1,12}, -{30,-1,13}, -{30,-1,14}, -{30,-1,15}, -{30,-1,16}, -{30,-1,17}, -{30,-1,18}, -{30,-1,19}, -{30,-1,20}, -{30,-1,21}, -{30,-1,22}, -{30,-1,23}, -{30,-1,24}, -{30,-1,25}, -{30,-1,26}, -{30,-1,27}, -{30,-1,28}, -{30,-1,29}, -{30,-1,30}, -{30,-1,31}, -{30,-1,32}, -{30,-1,33}, -{30,-1,34}, -{30,-1,35}, -{30,-1,36}, -{30,-1,37}, -{30,-1,38}, -{30,-1,39}, -{30,0,-33}, -{30,0,-32}, -{30,0,-31}, -{30,0,-30}, -{30,0,-29}, -{30,0,-28}, -{30,0,-27}, -{30,0,-26}, -{30,0,-25}, -{30,0,-24}, -{30,0,-23}, -{30,0,-22}, -{30,0,-21}, -{30,0,-20}, -{30,0,-19}, -{30,0,-18}, -{30,0,-17}, -{30,0,-16}, -{30,0,-15}, -{30,0,-14}, -{30,0,-13}, -{30,0,-12}, -{30,0,-11}, -{30,0,-10}, -{30,0,-9}, -{30,0,-8}, -{30,0,-7}, -{30,0,-6}, -{30,0,-5}, -{30,0,-4}, -{30,0,-3}, -{30,0,-2}, -{30,0,-1}, -{30,0,0}, -{30,0,1}, -{30,0,2}, -{30,0,3}, -{30,0,4}, -{30,0,5}, -{30,0,6}, -{30,0,7}, -{30,0,8}, -{30,0,9}, -{30,0,10}, -{30,0,11}, -{30,0,12}, -{30,0,13}, -{30,0,14}, -{30,0,15}, -{30,0,16}, -{30,0,17}, -{30,0,18}, -{30,0,19}, -{30,0,20}, -{30,0,21}, -{30,0,22}, -{30,0,23}, -{30,0,24}, -{30,0,25}, -{30,0,26}, -{30,0,27}, -{30,0,28}, -{30,0,29}, -{30,0,30}, -{30,0,31}, -{30,0,32}, -{30,0,33}, -{30,0,34}, -{30,0,35}, -{30,0,36}, -{30,0,37}, -{30,0,38}, -{30,0,39}, -{30,1,-34}, -{30,1,-33}, -{30,1,-32}, -{30,1,-31}, -{30,1,-30}, -{30,1,-29}, -{30,1,-28}, -{30,1,-27}, -{30,1,-26}, -{30,1,-25}, -{30,1,-24}, -{30,1,-23}, -{30,1,-22}, -{30,1,-21}, -{30,1,-20}, -{30,1,-19}, -{30,1,-18}, -{30,1,-17}, -{30,1,-16}, -{30,1,-15}, -{30,1,-14}, -{30,1,-13}, -{30,1,-12}, -{30,1,-11}, -{30,1,-10}, -{30,1,-9}, -{30,1,-8}, -{30,1,-7}, -{30,1,-6}, -{30,1,-5}, -{30,1,-4}, -{30,1,-3}, -{30,1,-2}, -{30,1,-1}, -{30,1,0}, -{30,1,1}, -{30,1,2}, -{30,1,3}, -{30,1,4}, -{30,1,5}, -{30,1,6}, -{30,1,7}, -{30,1,8}, -{30,1,9}, -{30,1,10}, -{30,1,11}, -{30,1,12}, -{30,1,13}, -{30,1,14}, -{30,1,15}, -{30,1,16}, -{30,1,17}, -{30,1,18}, -{30,1,19}, -{30,1,20}, -{30,1,21}, -{30,1,22}, -{30,1,23}, -{30,1,24}, -{30,1,25}, -{30,1,26}, -{30,1,27}, -{30,1,28}, -{30,1,29}, -{30,1,30}, -{30,1,31}, -{30,1,32}, -{30,1,33}, -{30,1,34}, -{30,1,35}, -{30,1,36}, -{30,1,37}, -{30,1,38}, -{30,1,39}, -{30,2,-35}, -{30,2,-34}, -{30,2,-33}, -{30,2,-32}, -{30,2,-31}, -{30,2,-30}, -{30,2,-29}, -{30,2,-28}, -{30,2,-27}, -{30,2,-26}, -{30,2,-25}, -{30,2,-24}, -{30,2,-23}, -{30,2,-22}, -{30,2,-21}, -{30,2,-20}, -{30,2,-19}, -{30,2,-18}, -{30,2,-17}, -{30,2,-16}, -{30,2,-15}, -{30,2,-14}, -{30,2,-13}, -{30,2,-12}, -{30,2,-11}, -{30,2,-10}, -{30,2,-9}, -{30,2,-8}, -{30,2,-7}, -{30,2,-6}, -{30,2,-5}, -{30,2,-4}, -{30,2,-3}, -{30,2,-2}, -{30,2,-1}, -{30,2,0}, -{30,2,1}, -{30,2,2}, -{30,2,3}, -{30,2,4}, -{30,2,5}, -{30,2,6}, -{30,2,7}, -{30,2,8}, -{30,2,9}, -{30,2,10}, -{30,2,11}, -{30,2,12}, -{30,2,13}, -{30,2,14}, -{30,2,15}, -{30,2,16}, -{30,2,17}, -{30,2,18}, -{30,2,19}, -{30,2,20}, -{30,2,21}, -{30,2,22}, -{30,2,23}, -{30,2,24}, -{30,2,25}, -{30,2,26}, -{30,2,27}, -{30,2,28}, -{30,2,29}, -{30,2,30}, -{30,2,31}, -{30,2,32}, -{30,2,33}, -{30,2,34}, -{30,2,35}, -{30,2,36}, -{30,2,37}, -{30,2,38}, -{30,2,39}, -{30,3,-36}, -{30,3,-35}, -{30,3,-34}, -{30,3,-33}, -{30,3,-32}, -{30,3,-31}, -{30,3,-30}, -{30,3,-29}, -{30,3,-28}, -{30,3,-27}, -{30,3,-26}, -{30,3,-25}, -{30,3,-24}, -{30,3,-23}, -{30,3,-22}, -{30,3,-21}, -{30,3,-20}, -{30,3,-19}, -{30,3,-18}, -{30,3,-17}, -{30,3,-16}, -{30,3,-15}, -{30,3,-14}, -{30,3,-13}, -{30,3,-12}, -{30,3,-11}, -{30,3,-10}, -{30,3,-9}, -{30,3,-8}, -{30,3,-7}, -{30,3,-6}, -{30,3,-5}, -{30,3,-4}, -{30,3,-3}, -{30,3,-2}, -{30,3,-1}, -{30,3,0}, -{30,3,1}, -{30,3,2}, -{30,3,3}, -{30,3,4}, -{30,3,5}, -{30,3,6}, -{30,3,7}, -{30,3,8}, -{30,3,9}, -{30,3,10}, -{30,3,11}, -{30,3,12}, -{30,3,13}, -{30,3,14}, -{30,3,15}, -{30,3,16}, -{30,3,17}, -{30,3,18}, -{30,3,19}, -{30,3,20}, -{30,3,21}, -{30,3,22}, -{30,3,23}, -{30,3,24}, -{30,3,25}, -{30,3,26}, -{30,3,27}, -{30,3,28}, -{30,3,29}, -{30,3,30}, -{30,3,31}, -{30,3,32}, -{30,3,33}, -{30,3,34}, -{30,3,35}, -{30,3,36}, -{30,3,37}, -{30,3,38}, -{30,3,39}, -{30,4,-37}, -{30,4,-36}, -{30,4,-35}, -{30,4,-34}, -{30,4,-33}, -{30,4,-32}, -{30,4,-31}, -{30,4,-30}, -{30,4,-29}, -{30,4,-28}, -{30,4,-27}, -{30,4,-26}, -{30,4,-25}, -{30,4,-24}, -{30,4,-23}, -{30,4,-22}, -{30,4,-21}, -{30,4,-20}, -{30,4,-19}, -{30,4,-18}, -{30,4,-17}, -{30,4,-16}, -{30,4,-15}, -{30,4,-14}, -{30,4,-13}, -{30,4,-12}, -{30,4,-11}, -{30,4,-10}, -{30,4,-9}, -{30,4,-8}, -{30,4,-7}, -{30,4,-6}, -{30,4,-5}, -{30,4,-4}, -{30,4,-3}, -{30,4,-2}, -{30,4,-1}, -{30,4,0}, -{30,4,1}, -{30,4,2}, -{30,4,3}, -{30,4,4}, -{30,4,5}, -{30,4,6}, -{30,4,7}, -{30,4,8}, -{30,4,9}, -{30,4,10}, -{30,4,11}, -{30,4,12}, -{30,4,13}, -{30,4,14}, -{30,4,15}, -{30,4,16}, -{30,4,17}, -{30,4,18}, -{30,4,19}, -{30,4,20}, -{30,4,21}, -{30,4,22}, -{30,4,23}, -{30,4,24}, -{30,4,25}, -{30,4,26}, -{30,4,27}, -{30,4,28}, -{30,4,29}, -{30,4,30}, -{30,4,31}, -{30,4,32}, -{30,4,33}, -{30,4,34}, -{30,4,35}, -{30,4,36}, -{30,4,37}, -{30,4,38}, -{30,4,39}, -{30,5,-38}, -{30,5,-37}, -{30,5,-36}, -{30,5,-35}, -{30,5,-34}, -{30,5,-33}, -{30,5,-32}, -{30,5,-31}, -{30,5,-30}, -{30,5,-29}, -{30,5,-28}, -{30,5,-27}, -{30,5,-26}, -{30,5,-25}, -{30,5,-24}, -{30,5,-23}, -{30,5,-22}, -{30,5,-21}, -{30,5,-20}, -{30,5,-19}, -{30,5,-18}, -{30,5,-17}, -{30,5,-16}, -{30,5,-15}, -{30,5,-14}, -{30,5,-13}, -{30,5,-12}, -{30,5,-11}, -{30,5,-10}, -{30,5,-9}, -{30,5,-8}, -{30,5,-7}, -{30,5,-6}, -{30,5,-5}, -{30,5,-4}, -{30,5,-3}, -{30,5,-2}, -{30,5,-1}, -{30,5,0}, -{30,5,1}, -{30,5,2}, -{30,5,3}, -{30,5,4}, -{30,5,5}, -{30,5,6}, -{30,5,7}, -{30,5,8}, -{30,5,9}, -{30,5,10}, -{30,5,11}, -{30,5,12}, -{30,5,13}, -{30,5,14}, -{30,5,15}, -{30,5,16}, -{30,5,17}, -{30,5,18}, -{30,5,19}, -{30,5,20}, -{30,5,21}, -{30,5,22}, -{30,5,23}, -{30,5,24}, -{30,5,25}, -{30,5,26}, -{30,5,27}, -{30,5,28}, -{30,5,29}, -{30,5,30}, -{30,5,31}, -{30,5,32}, -{30,5,33}, -{30,5,34}, -{30,5,35}, -{30,5,36}, -{30,5,37}, -{30,5,38}, -{30,5,39}, -{30,6,-39}, -{30,6,-38}, -{30,6,-37}, -{30,6,-36}, -{30,6,-35}, -{30,6,-34}, -{30,6,-33}, -{30,6,-32}, -{30,6,-31}, -{30,6,-30}, -{30,6,-29}, -{30,6,-28}, -{30,6,-27}, -{30,6,-26}, -{30,6,-25}, -{30,6,-24}, -{30,6,-23}, -{30,6,-22}, -{30,6,-21}, -{30,6,-20}, -{30,6,-19}, -{30,6,-18}, -{30,6,-17}, -{30,6,-16}, -{30,6,-15}, -{30,6,-14}, -{30,6,-13}, -{30,6,-12}, -{30,6,-11}, -{30,6,-10}, -{30,6,-9}, -{30,6,-8}, -{30,6,-7}, -{30,6,-6}, -{30,6,-5}, -{30,6,-4}, -{30,6,-3}, -{30,6,-2}, -{30,6,-1}, -{30,6,0}, -{30,6,1}, -{30,6,2}, -{30,6,3}, -{30,6,4}, -{30,6,5}, -{30,6,6}, -{30,6,7}, -{30,6,8}, -{30,6,9}, -{30,6,10}, -{30,6,11}, -{30,6,12}, -{30,6,13}, -{30,6,14}, -{30,6,15}, -{30,6,16}, -{30,6,17}, -{30,6,18}, -{30,6,19}, -{30,6,20}, -{30,6,21}, -{30,6,22}, -{30,6,23}, -{30,6,24}, -{30,6,25}, -{30,6,26}, -{30,6,27}, -{30,6,28}, -{30,6,29}, -{30,6,30}, -{30,6,31}, -{30,6,32}, -{30,6,33}, -{30,6,34}, -{30,6,35}, -{30,6,36}, -{30,6,37}, -{30,6,38}, -{30,6,39}, -{30,7,-40}, -{30,7,-39}, -{30,7,-38}, -{30,7,-37}, -{30,7,-36}, -{30,7,-35}, -{30,7,-34}, -{30,7,-33}, -{30,7,-32}, -{30,7,-31}, -{30,7,-30}, -{30,7,-29}, -{30,7,-28}, -{30,7,-27}, -{30,7,-26}, -{30,7,-25}, -{30,7,-24}, -{30,7,-23}, -{30,7,-22}, -{30,7,-21}, -{30,7,-20}, -{30,7,-19}, -{30,7,-18}, -{30,7,-17}, -{30,7,-16}, -{30,7,-15}, -{30,7,-14}, -{30,7,-13}, -{30,7,-12}, -{30,7,-11}, -{30,7,-10}, -{30,7,-9}, -{30,7,-8}, -{30,7,-7}, -{30,7,-6}, -{30,7,-5}, -{30,7,-4}, -{30,7,-3}, -{30,7,-2}, -{30,7,-1}, -{30,7,0}, -{30,7,1}, -{30,7,2}, -{30,7,3}, -{30,7,4}, -{30,7,5}, -{30,7,6}, -{30,7,7}, -{30,7,8}, -{30,7,9}, -{30,7,10}, -{30,7,11}, -{30,7,12}, -{30,7,13}, -{30,7,14}, -{30,7,15}, -{30,7,16}, -{30,7,17}, -{30,7,18}, -{30,7,19}, -{30,7,20}, -{30,7,21}, -{30,7,22}, -{30,7,23}, -{30,7,24}, -{30,7,25}, -{30,7,26}, -{30,7,27}, -{30,7,28}, -{30,7,29}, -{30,7,30}, -{30,7,31}, -{30,7,32}, -{30,7,33}, -{30,7,34}, -{30,7,35}, -{30,7,36}, -{30,7,37}, -{30,7,38}, -{30,7,39}, -{30,8,-41}, -{30,8,-40}, -{30,8,-39}, -{30,8,-38}, -{30,8,-37}, -{30,8,-36}, -{30,8,-35}, -{30,8,-34}, -{30,8,-33}, -{30,8,-32}, -{30,8,-31}, -{30,8,-30}, -{30,8,-29}, -{30,8,-28}, -{30,8,-27}, -{30,8,-26}, -{30,8,-25}, -{30,8,-24}, -{30,8,-23}, -{30,8,-22}, -{30,8,-21}, -{30,8,-20}, -{30,8,-19}, -{30,8,-18}, -{30,8,-17}, -{30,8,-16}, -{30,8,-15}, -{30,8,-14}, -{30,8,-13}, -{30,8,-12}, -{30,8,-11}, -{30,8,-10}, -{30,8,-9}, -{30,8,-8}, -{30,8,-7}, -{30,8,-6}, -{30,8,-5}, -{30,8,-4}, -{30,8,-3}, -{30,8,-2}, -{30,8,-1}, -{30,8,0}, -{30,8,1}, -{30,8,2}, -{30,8,3}, -{30,8,4}, -{30,8,5}, -{30,8,6}, -{30,8,7}, -{30,8,8}, -{30,8,9}, -{30,8,10}, -{30,8,11}, -{30,8,12}, -{30,8,13}, -{30,8,14}, -{30,8,15}, -{30,8,16}, -{30,8,17}, -{30,8,18}, -{30,8,19}, -{30,8,20}, -{30,8,21}, -{30,8,22}, -{30,8,23}, -{30,8,24}, -{30,8,25}, -{30,8,26}, -{30,8,27}, -{30,8,28}, -{30,8,29}, -{30,8,30}, -{30,8,31}, -{30,8,32}, -{30,8,33}, -{30,8,34}, -{30,8,35}, -{30,8,36}, -{30,8,37}, -{30,8,38}, -{30,8,39}, -{30,9,-42}, -{30,9,-41}, -{30,9,-40}, -{30,9,-39}, -{30,9,-38}, -{30,9,-37}, -{30,9,-36}, -{30,9,-35}, -{30,9,-34}, -{30,9,-33}, -{30,9,-32}, -{30,9,-31}, -{30,9,-30}, -{30,9,-29}, -{30,9,-28}, -{30,9,-27}, -{30,9,-26}, -{30,9,-25}, -{30,9,-24}, -{30,9,-23}, -{30,9,-22}, -{30,9,-21}, -{30,9,-20}, -{30,9,-19}, -{30,9,-18}, -{30,9,-17}, -{30,9,-16}, -{30,9,-15}, -{30,9,-14}, -{30,9,-13}, -{30,9,-12}, -{30,9,-11}, -{30,9,-10}, -{30,9,-9}, -{30,9,-8}, -{30,9,-7}, -{30,9,-6}, -{30,9,-5}, -{30,9,-4}, -{30,9,-3}, -{30,9,-2}, -{30,9,-1}, -{30,9,0}, -{30,9,1}, -{30,9,2}, -{30,9,3}, -{30,9,4}, -{30,9,5}, -{30,9,6}, -{30,9,7}, -{30,9,8}, -{30,9,9}, -{30,9,10}, -{30,9,11}, -{30,9,12}, -{30,9,13}, -{30,9,14}, -{30,9,15}, -{30,9,16}, -{30,9,17}, -{30,9,18}, -{30,9,19}, -{30,9,20}, -{30,9,21}, -{30,9,22}, -{30,9,23}, -{30,9,24}, -{30,9,25}, -{30,9,26}, -{30,9,27}, -{30,9,28}, -{30,9,29}, -{30,9,30}, -{30,9,31}, -{30,9,32}, -{30,9,33}, -{30,9,34}, -{30,9,35}, -{30,9,36}, -{30,9,37}, -{30,9,38}, -{30,9,39}, -{30,10,-44}, -{30,10,-43}, -{30,10,-42}, -{30,10,-41}, -{30,10,-40}, -{30,10,-39}, -{30,10,-38}, -{30,10,-37}, -{30,10,-36}, -{30,10,-35}, -{30,10,-34}, -{30,10,-33}, -{30,10,-32}, -{30,10,-31}, -{30,10,-30}, -{30,10,-29}, -{30,10,-28}, -{30,10,-27}, -{30,10,-26}, -{30,10,-25}, -{30,10,-24}, -{30,10,-23}, -{30,10,-22}, -{30,10,-21}, -{30,10,-20}, -{30,10,-19}, -{30,10,-18}, -{30,10,-17}, -{30,10,-16}, -{30,10,-15}, -{30,10,-14}, -{30,10,-13}, -{30,10,-12}, -{30,10,-11}, -{30,10,-10}, -{30,10,-9}, -{30,10,-8}, -{30,10,-7}, -{30,10,-6}, -{30,10,-5}, -{30,10,-4}, -{30,10,-3}, -{30,10,-2}, -{30,10,-1}, -{30,10,0}, -{30,10,1}, -{30,10,2}, -{30,10,3}, -{30,10,4}, -{30,10,5}, -{30,10,6}, -{30,10,7}, -{30,10,8}, -{30,10,9}, -{30,10,10}, -{30,10,11}, -{30,10,12}, -{30,10,13}, -{30,10,14}, -{30,10,15}, -{30,10,16}, -{30,10,17}, -{30,10,18}, -{30,10,19}, -{30,10,20}, -{30,10,21}, -{30,10,22}, -{30,10,23}, -{30,10,24}, -{30,10,25}, -{30,10,26}, -{30,10,27}, -{30,10,28}, -{30,10,29}, -{30,10,30}, -{30,10,31}, -{30,10,32}, -{30,10,33}, -{30,10,34}, -{30,10,35}, -{30,10,36}, -{30,10,37}, -{30,10,38}, -{30,10,39}, -{30,11,-45}, -{30,11,-44}, -{30,11,-43}, -{30,11,-42}, -{30,11,-41}, -{30,11,-40}, -{30,11,-39}, -{30,11,-38}, -{30,11,-37}, -{30,11,-36}, -{30,11,-35}, -{30,11,-34}, -{30,11,-33}, -{30,11,-32}, -{30,11,-31}, -{30,11,-30}, -{30,11,-29}, -{30,11,-28}, -{30,11,-27}, -{30,11,-26}, -{30,11,-25}, -{30,11,-24}, -{30,11,-23}, -{30,11,-22}, -{30,11,-21}, -{30,11,-20}, -{30,11,-19}, -{30,11,-18}, -{30,11,-17}, -{30,11,-16}, -{30,11,-15}, -{30,11,-14}, -{30,11,-13}, -{30,11,-12}, -{30,11,-11}, -{30,11,-10}, -{30,11,-9}, -{30,11,-8}, -{30,11,-7}, -{30,11,-6}, -{30,11,-5}, -{30,11,-4}, -{30,11,-3}, -{30,11,-2}, -{30,11,-1}, -{30,11,0}, -{30,11,1}, -{30,11,2}, -{30,11,3}, -{30,11,4}, -{30,11,5}, -{30,11,6}, -{30,11,7}, -{30,11,8}, -{30,11,9}, -{30,11,10}, -{30,11,11}, -{30,11,12}, -{30,11,13}, -{30,11,14}, -{30,11,15}, -{30,11,16}, -{30,11,17}, -{30,11,18}, -{30,11,19}, -{30,11,20}, -{30,11,21}, -{30,11,22}, -{30,11,23}, -{30,11,24}, -{30,11,25}, -{30,11,26}, -{30,11,27}, -{30,11,28}, -{30,11,29}, -{30,11,30}, -{30,11,31}, -{30,11,32}, -{30,11,33}, -{30,11,34}, -{30,11,35}, -{30,11,36}, -{30,11,37}, -{30,11,38}, -{30,11,39}, -{30,12,-46}, -{30,12,-45}, -{30,12,-44}, -{30,12,-43}, -{30,12,-42}, -{30,12,-41}, -{30,12,-40}, -{30,12,-39}, -{30,12,-38}, -{30,12,-37}, -{30,12,-36}, -{30,12,-35}, -{30,12,-34}, -{30,12,-33}, -{30,12,-32}, -{30,12,-31}, -{30,12,-30}, -{30,12,-29}, -{30,12,-28}, -{30,12,-27}, -{30,12,-26}, -{30,12,-25}, -{30,12,-24}, -{30,12,-23}, -{30,12,-22}, -{30,12,-21}, -{30,12,-20}, -{30,12,-19}, -{30,12,-18}, -{30,12,-17}, -{30,12,-16}, -{30,12,-15}, -{30,12,-14}, -{30,12,-13}, -{30,12,-12}, -{30,12,-11}, -{30,12,-10}, -{30,12,-9}, -{30,12,-8}, -{30,12,-7}, -{30,12,-6}, -{30,12,-5}, -{30,12,-4}, -{30,12,-3}, -{30,12,-2}, -{30,12,-1}, -{30,12,0}, -{30,12,1}, -{30,12,2}, -{30,12,3}, -{30,12,4}, -{30,12,5}, -{30,12,6}, -{30,12,7}, -{30,12,8}, -{30,12,9}, -{30,12,10}, -{30,12,11}, -{30,12,12}, -{30,12,13}, -{30,12,14}, -{30,12,15}, -{30,12,16}, -{30,12,17}, -{30,12,18}, -{30,12,19}, -{30,12,20}, -{30,12,21}, -{30,12,22}, -{30,12,23}, -{30,12,24}, -{30,12,25}, -{30,12,26}, -{30,12,27}, -{30,12,28}, -{30,12,29}, -{30,12,30}, -{30,12,31}, -{30,12,32}, -{30,12,33}, -{30,12,34}, -{30,12,35}, -{30,12,36}, -{30,12,37}, -{30,12,38}, -{30,12,39}, -{30,12,40}, -{30,13,-47}, -{30,13,-46}, -{30,13,-45}, -{30,13,-44}, -{30,13,-43}, -{30,13,-42}, -{30,13,-41}, -{30,13,-40}, -{30,13,-39}, -{30,13,-38}, -{30,13,-37}, -{30,13,-36}, -{30,13,-35}, -{30,13,-34}, -{30,13,-33}, -{30,13,-32}, -{30,13,-31}, -{30,13,-30}, -{30,13,-29}, -{30,13,-28}, -{30,13,-27}, -{30,13,-26}, -{30,13,-25}, -{30,13,-24}, -{30,13,-23}, -{30,13,-22}, -{30,13,-21}, -{30,13,-20}, -{30,13,-19}, -{30,13,-18}, -{30,13,-17}, -{30,13,-16}, -{30,13,-15}, -{30,13,-14}, -{30,13,-13}, -{30,13,-12}, -{30,13,-11}, -{30,13,-10}, -{30,13,-9}, -{30,13,-8}, -{30,13,-7}, -{30,13,-6}, -{30,13,-5}, -{30,13,-4}, -{30,13,-3}, -{30,13,-2}, -{30,13,-1}, -{30,13,0}, -{30,13,1}, -{30,13,2}, -{30,13,3}, -{30,13,4}, -{30,13,5}, -{30,13,6}, -{30,13,7}, -{30,13,8}, -{30,13,9}, -{30,13,10}, -{30,13,11}, -{30,13,12}, -{30,13,13}, -{30,13,14}, -{30,13,15}, -{30,13,16}, -{30,13,17}, -{30,13,18}, -{30,13,19}, -{30,13,20}, -{30,13,21}, -{30,13,22}, -{30,13,23}, -{30,13,24}, -{30,13,25}, -{30,13,26}, -{30,13,27}, -{30,13,28}, -{30,13,29}, -{30,13,30}, -{30,13,31}, -{30,13,32}, -{30,13,33}, -{30,13,34}, -{30,13,35}, -{30,13,36}, -{30,13,37}, -{30,13,38}, -{30,13,39}, -{30,13,40}, -{30,14,-48}, -{30,14,-47}, -{30,14,-46}, -{30,14,-45}, -{30,14,-44}, -{30,14,-43}, -{30,14,-42}, -{30,14,-41}, -{30,14,-40}, -{30,14,-39}, -{30,14,-38}, -{30,14,-37}, -{30,14,-36}, -{30,14,-35}, -{30,14,-34}, -{30,14,-33}, -{30,14,-32}, -{30,14,-31}, -{30,14,-30}, -{30,14,-29}, -{30,14,-28}, -{30,14,-27}, -{30,14,-26}, -{30,14,-25}, -{30,14,-24}, -{30,14,-23}, -{30,14,-22}, -{30,14,-21}, -{30,14,-20}, -{30,14,-19}, -{30,14,-18}, -{30,14,-17}, -{30,14,-16}, -{30,14,-15}, -{30,14,-14}, -{30,14,-13}, -{30,14,-12}, -{30,14,-11}, -{30,14,-10}, -{30,14,-9}, -{30,14,-8}, -{30,14,-7}, -{30,14,-6}, -{30,14,-5}, -{30,14,-4}, -{30,14,-3}, -{30,14,-2}, -{30,14,-1}, -{30,14,0}, -{30,14,1}, -{30,14,2}, -{30,14,3}, -{30,14,4}, -{30,14,5}, -{30,14,6}, -{30,14,7}, -{30,14,8}, -{30,14,9}, -{30,14,10}, -{30,14,11}, -{30,14,12}, -{30,14,13}, -{30,14,14}, -{30,14,15}, -{30,14,16}, -{30,14,17}, -{30,14,18}, -{30,14,19}, -{30,14,20}, -{30,14,21}, -{30,14,22}, -{30,14,23}, -{30,14,24}, -{30,14,25}, -{30,14,26}, -{30,14,27}, -{30,14,28}, -{30,14,29}, -{30,14,30}, -{30,14,31}, -{30,14,32}, -{30,14,33}, -{30,14,34}, -{30,14,35}, -{30,14,36}, -{30,14,37}, -{30,14,38}, -{30,14,39}, -{30,14,40}, -{30,15,-49}, -{30,15,-48}, -{30,15,-47}, -{30,15,-46}, -{30,15,-45}, -{30,15,-44}, -{30,15,-43}, -{30,15,-42}, -{30,15,-41}, -{30,15,-40}, -{30,15,-39}, -{30,15,-38}, -{30,15,-37}, -{30,15,-36}, -{30,15,-35}, -{30,15,-34}, -{30,15,-33}, -{30,15,-32}, -{30,15,-31}, -{30,15,-30}, -{30,15,-29}, -{30,15,-28}, -{30,15,-27}, -{30,15,-26}, -{30,15,-25}, -{30,15,-24}, -{30,15,-23}, -{30,15,-22}, -{30,15,-21}, -{30,15,-20}, -{30,15,-19}, -{30,15,-18}, -{30,15,-17}, -{30,15,-16}, -{30,15,-15}, -{30,15,-14}, -{30,15,-13}, -{30,15,-12}, -{30,15,-11}, -{30,15,-10}, -{30,15,-9}, -{30,15,-8}, -{30,15,-7}, -{30,15,-6}, -{30,15,-5}, -{30,15,-4}, -{30,15,-3}, -{30,15,-2}, -{30,15,-1}, -{30,15,0}, -{30,15,1}, -{30,15,2}, -{30,15,3}, -{30,15,4}, -{30,15,5}, -{30,15,6}, -{30,15,7}, -{30,15,8}, -{30,15,9}, -{30,15,10}, -{30,15,11}, -{30,15,12}, -{30,15,13}, -{30,15,14}, -{30,15,15}, -{30,15,16}, -{30,15,17}, -{30,15,18}, -{30,15,19}, -{30,15,20}, -{30,15,21}, -{30,15,22}, -{30,15,23}, -{30,15,24}, -{30,15,25}, -{30,15,26}, -{30,15,27}, -{30,15,28}, -{30,15,29}, -{30,15,30}, -{30,15,31}, -{30,15,32}, -{30,15,33}, -{30,15,34}, -{30,15,35}, -{30,15,36}, -{30,15,37}, -{30,15,38}, -{30,15,39}, -{30,15,40}, -{30,16,-50}, -{30,16,-49}, -{30,16,-48}, -{30,16,-47}, -{30,16,-46}, -{30,16,-45}, -{30,16,-44}, -{30,16,-43}, -{30,16,-42}, -{30,16,-41}, -{30,16,-40}, -{30,16,-39}, -{30,16,-38}, -{30,16,-37}, -{30,16,-36}, -{30,16,-35}, -{30,16,-34}, -{30,16,-33}, -{30,16,-32}, -{30,16,-31}, -{30,16,-30}, -{30,16,-29}, -{30,16,-28}, -{30,16,-27}, -{30,16,-26}, -{30,16,-25}, -{30,16,-24}, -{30,16,-23}, -{30,16,-22}, -{30,16,-21}, -{30,16,-20}, -{30,16,-19}, -{30,16,-18}, -{30,16,-17}, -{30,16,-16}, -{30,16,-15}, -{30,16,-14}, -{30,16,-13}, -{30,16,-12}, -{30,16,-11}, -{30,16,-10}, -{30,16,-9}, -{30,16,-8}, -{30,16,-7}, -{30,16,-6}, -{30,16,-5}, -{30,16,-4}, -{30,16,-3}, -{30,16,-2}, -{30,16,-1}, -{30,16,0}, -{30,16,1}, -{30,16,2}, -{30,16,3}, -{30,16,4}, -{30,16,5}, -{30,16,6}, -{30,16,7}, -{30,16,8}, -{30,16,9}, -{30,16,10}, -{30,16,11}, -{30,16,12}, -{30,16,13}, -{30,16,14}, -{30,16,15}, -{30,16,16}, -{30,16,17}, -{30,16,18}, -{30,16,19}, -{30,16,20}, -{30,16,21}, -{30,16,22}, -{30,16,23}, -{30,16,24}, -{30,16,25}, -{30,16,26}, -{30,16,27}, -{30,16,28}, -{30,16,29}, -{30,16,30}, -{30,16,31}, -{30,16,32}, -{30,16,33}, -{30,16,34}, -{30,16,35}, -{30,16,36}, -{30,16,37}, -{30,16,38}, -{30,16,39}, -{30,16,40}, -{30,17,-51}, -{30,17,-50}, -{30,17,-49}, -{30,17,-48}, -{30,17,-47}, -{30,17,-46}, -{30,17,-45}, -{30,17,-44}, -{30,17,-43}, -{30,17,-42}, -{30,17,-41}, -{30,17,-40}, -{30,17,-39}, -{30,17,-38}, -{30,17,-37}, -{30,17,-36}, -{30,17,-35}, -{30,17,-34}, -{30,17,-33}, -{30,17,-32}, -{30,17,-31}, -{30,17,-30}, -{30,17,-29}, -{30,17,-28}, -{30,17,-27}, -{30,17,-26}, -{30,17,-25}, -{30,17,-24}, -{30,17,-23}, -{30,17,-22}, -{30,17,-21}, -{30,17,-20}, -{30,17,-19}, -{30,17,-18}, -{30,17,-17}, -{30,17,-16}, -{30,17,-15}, -{30,17,-14}, -{30,17,-13}, -{30,17,-12}, -{30,17,-11}, -{30,17,-10}, -{30,17,-9}, -{30,17,-8}, -{30,17,-7}, -{30,17,-6}, -{30,17,-5}, -{30,17,-4}, -{30,17,-3}, -{30,17,-2}, -{30,17,-1}, -{30,17,0}, -{30,17,1}, -{30,17,2}, -{30,17,3}, -{30,17,4}, -{30,17,5}, -{30,17,6}, -{30,17,7}, -{30,17,8}, -{30,17,9}, -{30,17,10}, -{30,17,11}, -{30,17,12}, -{30,17,13}, -{30,17,14}, -{30,17,15}, -{30,17,16}, -{30,17,17}, -{30,17,18}, -{30,17,19}, -{30,17,20}, -{30,17,21}, -{30,17,22}, -{30,17,23}, -{30,17,24}, -{30,17,25}, -{30,17,26}, -{30,17,27}, -{30,17,28}, -{30,17,29}, -{30,17,30}, -{30,17,31}, -{30,17,32}, -{30,17,33}, -{30,17,34}, -{30,17,35}, -{30,17,36}, -{30,17,37}, -{30,17,38}, -{30,17,39}, -{30,17,40}, -{30,18,-52}, -{30,18,-51}, -{30,18,-50}, -{30,18,-49}, -{30,18,-48}, -{30,18,-47}, -{30,18,-46}, -{30,18,-45}, -{30,18,-44}, -{30,18,-43}, -{30,18,-42}, -{30,18,-41}, -{30,18,-40}, -{30,18,-39}, -{30,18,-38}, -{30,18,-37}, -{30,18,-36}, -{30,18,-35}, -{30,18,-34}, -{30,18,-33}, -{30,18,-32}, -{30,18,-31}, -{30,18,-30}, -{30,18,-29}, -{30,18,-28}, -{30,18,-27}, -{30,18,-26}, -{30,18,-25}, -{30,18,-24}, -{30,18,-23}, -{30,18,-22}, -{30,18,-21}, -{30,18,-20}, -{30,18,-19}, -{30,18,-18}, -{30,18,-17}, -{30,18,-16}, -{30,18,-15}, -{30,18,-14}, -{30,18,-13}, -{30,18,-12}, -{30,18,-11}, -{30,18,-10}, -{30,18,-9}, -{30,18,-8}, -{30,18,-7}, -{30,18,-6}, -{30,18,-5}, -{30,18,-4}, -{30,18,-3}, -{30,18,-2}, -{30,18,-1}, -{30,18,0}, -{30,18,1}, -{30,18,2}, -{30,18,3}, -{30,18,4}, -{30,18,5}, -{30,18,6}, -{30,18,7}, -{30,18,8}, -{30,18,9}, -{30,18,10}, -{30,18,11}, -{30,18,12}, -{30,18,13}, -{30,18,14}, -{30,18,15}, -{30,18,16}, -{30,18,17}, -{30,18,18}, -{30,18,19}, -{30,18,20}, -{30,18,21}, -{30,18,22}, -{30,18,23}, -{30,18,24}, -{30,18,25}, -{30,18,26}, -{30,18,27}, -{30,18,28}, -{30,18,29}, -{30,18,30}, -{30,18,31}, -{30,18,32}, -{30,18,33}, -{30,18,34}, -{30,18,35}, -{30,18,36}, -{30,18,37}, -{30,18,38}, -{30,18,39}, -{30,18,40}, -{30,19,-53}, -{30,19,-52}, -{30,19,-51}, -{30,19,-50}, -{30,19,-49}, -{30,19,-48}, -{30,19,-47}, -{30,19,-46}, -{30,19,-45}, -{30,19,-44}, -{30,19,-43}, -{30,19,-42}, -{30,19,-41}, -{30,19,-40}, -{30,19,-39}, -{30,19,-38}, -{30,19,-37}, -{30,19,-36}, -{30,19,-35}, -{30,19,-34}, -{30,19,-33}, -{30,19,-32}, -{30,19,-31}, -{30,19,-30}, -{30,19,-29}, -{30,19,-28}, -{30,19,-27}, -{30,19,-26}, -{30,19,-25}, -{30,19,-24}, -{30,19,-23}, -{30,19,-22}, -{30,19,-21}, -{30,19,-20}, -{30,19,-19}, -{30,19,-18}, -{30,19,-17}, -{30,19,-16}, -{30,19,-15}, -{30,19,-14}, -{30,19,-13}, -{30,19,-12}, -{30,19,-11}, -{30,19,-10}, -{30,19,-9}, -{30,19,-8}, -{30,19,-7}, -{30,19,-6}, -{30,19,-5}, -{30,19,-4}, -{30,19,-3}, -{30,19,-2}, -{30,19,-1}, -{30,19,0}, -{30,19,1}, -{30,19,2}, -{30,19,3}, -{30,19,4}, -{30,19,5}, -{30,19,6}, -{30,19,7}, -{30,19,8}, -{30,19,9}, -{30,19,10}, -{30,19,11}, -{30,19,12}, -{30,19,13}, -{30,19,14}, -{30,19,15}, -{30,19,16}, -{30,19,17}, -{30,19,18}, -{30,19,19}, -{30,19,20}, -{30,19,21}, -{30,19,22}, -{30,19,23}, -{30,19,24}, -{30,19,25}, -{30,19,26}, -{30,19,27}, -{30,19,28}, -{30,19,29}, -{30,19,30}, -{30,19,31}, -{30,19,32}, -{30,19,33}, -{30,19,34}, -{30,19,35}, -{30,19,36}, -{30,19,37}, -{30,19,38}, -{30,19,39}, -{30,19,40}, -{30,20,-54}, -{30,20,-53}, -{30,20,-52}, -{30,20,-51}, -{30,20,-50}, -{30,20,-49}, -{30,20,-48}, -{30,20,-47}, -{30,20,-46}, -{30,20,-45}, -{30,20,-44}, -{30,20,-43}, -{30,20,-42}, -{30,20,-41}, -{30,20,-40}, -{30,20,-39}, -{30,20,-38}, -{30,20,-37}, -{30,20,-36}, -{30,20,-35}, -{30,20,-34}, -{30,20,-33}, -{30,20,-32}, -{30,20,-31}, -{30,20,-30}, -{30,20,-29}, -{30,20,-28}, -{30,20,-27}, -{30,20,-26}, -{30,20,-25}, -{30,20,-24}, -{30,20,-23}, -{30,20,-22}, -{30,20,-21}, -{30,20,-20}, -{30,20,-19}, -{30,20,-18}, -{30,20,-17}, -{30,20,-16}, -{30,20,-15}, -{30,20,-14}, -{30,20,-13}, -{30,20,-12}, -{30,20,-11}, -{30,20,-10}, -{30,20,-9}, -{30,20,-8}, -{30,20,-7}, -{30,20,-6}, -{30,20,-5}, -{30,20,-4}, -{30,20,-3}, -{30,20,-2}, -{30,20,-1}, -{30,20,0}, -{30,20,1}, -{30,20,2}, -{30,20,3}, -{30,20,4}, -{30,20,5}, -{30,20,6}, -{30,20,7}, -{30,20,8}, -{30,20,9}, -{30,20,10}, -{30,20,11}, -{30,20,12}, -{30,20,13}, -{30,20,14}, -{30,20,15}, -{30,20,16}, -{30,20,17}, -{30,20,18}, -{30,20,19}, -{30,20,20}, -{30,20,21}, -{30,20,22}, -{30,20,23}, -{30,20,24}, -{30,20,25}, -{30,20,26}, -{30,20,27}, -{30,20,28}, -{30,20,29}, -{30,20,30}, -{30,20,31}, -{30,20,32}, -{30,20,33}, -{30,20,34}, -{30,20,35}, -{30,20,36}, -{30,20,37}, -{30,20,38}, -{30,20,39}, -{30,20,40}, -{30,21,-55}, -{30,21,-54}, -{30,21,-53}, -{30,21,-52}, -{30,21,-51}, -{30,21,-50}, -{30,21,-49}, -{30,21,-48}, -{30,21,-47}, -{30,21,-46}, -{30,21,-45}, -{30,21,-44}, -{30,21,-43}, -{30,21,-42}, -{30,21,-41}, -{30,21,-40}, -{30,21,-39}, -{30,21,-38}, -{30,21,-37}, -{30,21,-36}, -{30,21,-35}, -{30,21,-34}, -{30,21,-33}, -{30,21,-32}, -{30,21,-31}, -{30,21,-30}, -{30,21,-29}, -{30,21,-28}, -{30,21,-27}, -{30,21,-26}, -{30,21,-25}, -{30,21,-24}, -{30,21,-23}, -{30,21,-22}, -{30,21,-21}, -{30,21,-20}, -{30,21,-19}, -{30,21,-18}, -{30,21,-17}, -{30,21,-16}, -{30,21,-15}, -{30,21,-14}, -{30,21,-13}, -{30,21,-12}, -{30,21,-11}, -{30,21,-10}, -{30,21,-9}, -{30,21,-8}, -{30,21,-7}, -{30,21,-6}, -{30,21,-5}, -{30,21,-4}, -{30,21,-3}, -{30,21,-2}, -{30,21,-1}, -{30,21,0}, -{30,21,1}, -{30,21,2}, -{30,21,3}, -{30,21,4}, -{30,21,5}, -{30,21,6}, -{30,21,7}, -{30,21,8}, -{30,21,9}, -{30,21,10}, -{30,21,11}, -{30,21,12}, -{30,21,13}, -{30,21,14}, -{30,21,15}, -{30,21,16}, -{30,21,17}, -{30,21,18}, -{30,21,19}, -{30,21,20}, -{30,21,21}, -{30,21,22}, -{30,21,23}, -{30,21,24}, -{30,21,25}, -{30,21,26}, -{30,21,27}, -{30,21,28}, -{30,21,29}, -{30,21,30}, -{30,21,31}, -{30,21,32}, -{30,21,33}, -{30,21,34}, -{30,21,35}, -{30,21,36}, -{30,21,37}, -{30,21,38}, -{30,21,39}, -{30,21,40}, -{30,22,-56}, -{30,22,-55}, -{30,22,-54}, -{30,22,-53}, -{30,22,-52}, -{30,22,-51}, -{30,22,-50}, -{30,22,-49}, -{30,22,-48}, -{30,22,-47}, -{30,22,-46}, -{30,22,-45}, -{30,22,-44}, -{30,22,-43}, -{30,22,-42}, -{30,22,-41}, -{30,22,-40}, -{30,22,-39}, -{30,22,-38}, -{30,22,-37}, -{30,22,-36}, -{30,22,-35}, -{30,22,-34}, -{30,22,-33}, -{30,22,-32}, -{30,22,-31}, -{30,22,-30}, -{30,22,-29}, -{30,22,-28}, -{30,22,-27}, -{30,22,-26}, -{30,22,-25}, -{30,22,-24}, -{30,22,-23}, -{30,22,-22}, -{30,22,-21}, -{30,22,-20}, -{30,22,-19}, -{30,22,-18}, -{30,22,-17}, -{30,22,-16}, -{30,22,-15}, -{30,22,-14}, -{30,22,-13}, -{30,22,-12}, -{30,22,-11}, -{30,22,-10}, -{30,22,-9}, -{30,22,-8}, -{30,22,-7}, -{30,22,-6}, -{30,22,-5}, -{30,22,-4}, -{30,22,-3}, -{30,22,-2}, -{30,22,-1}, -{30,22,0}, -{30,22,1}, -{30,22,2}, -{30,22,3}, -{30,22,4}, -{30,22,5}, -{30,22,6}, -{30,22,7}, -{30,22,8}, -{30,22,9}, -{30,22,10}, -{30,22,11}, -{30,22,12}, -{30,22,13}, -{30,22,14}, -{30,22,15}, -{30,22,16}, -{30,22,17}, -{30,22,18}, -{30,22,19}, -{30,22,20}, -{30,22,21}, -{30,22,22}, -{30,22,23}, -{30,22,24}, -{30,22,25}, -{30,22,26}, -{30,22,27}, -{30,22,28}, -{30,22,29}, -{30,22,30}, -{30,22,31}, -{30,22,32}, -{30,22,33}, -{30,22,34}, -{30,22,35}, -{30,22,36}, -{30,22,37}, -{30,22,38}, -{30,22,39}, -{30,22,40}, -{30,23,-56}, -{30,23,-55}, -{30,23,-54}, -{30,23,-53}, -{30,23,-52}, -{30,23,-51}, -{30,23,-50}, -{30,23,-49}, -{30,23,-48}, -{30,23,-47}, -{30,23,-46}, -{30,23,-45}, -{30,23,-44}, -{30,23,-43}, -{30,23,-42}, -{30,23,-41}, -{30,23,-40}, -{30,23,-39}, -{30,23,-38}, -{30,23,-37}, -{30,23,-36}, -{30,23,-35}, -{30,23,-34}, -{30,23,-33}, -{30,23,-32}, -{30,23,-31}, -{30,23,-30}, -{30,23,-29}, -{30,23,-28}, -{30,23,-27}, -{30,23,-26}, -{30,23,-25}, -{30,23,-24}, -{30,23,-23}, -{30,23,-22}, -{30,23,-21}, -{30,23,-20}, -{30,23,-19}, -{30,23,-18}, -{30,23,-17}, -{30,23,-16}, -{30,23,-15}, -{30,23,-14}, -{30,23,-13}, -{30,23,-12}, -{30,23,-11}, -{30,23,-10}, -{30,23,-9}, -{30,23,-8}, -{30,23,-7}, -{30,23,-6}, -{30,23,-5}, -{30,23,-4}, -{30,23,-3}, -{30,23,-2}, -{30,23,-1}, -{30,23,0}, -{30,23,1}, -{30,23,2}, -{30,23,3}, -{30,23,4}, -{30,23,5}, -{30,23,6}, -{30,23,7}, -{30,23,8}, -{30,23,9}, -{30,23,10}, -{30,23,11}, -{30,23,12}, -{30,23,13}, -{30,23,14}, -{30,23,15}, -{30,23,16}, -{30,23,17}, -{30,23,18}, -{30,23,19}, -{30,23,20}, -{30,23,21}, -{30,23,22}, -{30,23,23}, -{30,23,24}, -{30,23,25}, -{30,23,26}, -{30,23,27}, -{30,23,28}, -{30,23,29}, -{30,23,30}, -{30,23,31}, -{30,23,32}, -{30,23,33}, -{30,23,34}, -{30,23,35}, -{30,23,36}, -{30,23,37}, -{30,23,38}, -{30,23,39}, -{30,23,40}, -{30,24,-57}, -{30,24,-56}, -{30,24,-55}, -{30,24,-54}, -{30,24,-53}, -{30,24,-52}, -{30,24,-51}, -{30,24,-50}, -{30,24,-49}, -{30,24,-48}, -{30,24,-47}, -{30,24,-46}, -{30,24,-45}, -{30,24,-44}, -{30,24,-43}, -{30,24,-42}, -{30,24,-41}, -{30,24,-40}, -{30,24,-39}, -{30,24,-38}, -{30,24,-37}, -{30,24,-36}, -{30,24,-35}, -{30,24,-34}, -{30,24,-33}, -{30,24,-32}, -{30,24,-31}, -{30,24,-30}, -{30,24,-29}, -{30,24,-28}, -{30,24,-27}, -{30,24,-26}, -{30,24,-25}, -{30,24,-24}, -{30,24,-23}, -{30,24,-22}, -{30,24,-21}, -{30,24,-20}, -{30,24,-19}, -{30,24,-18}, -{30,24,-17}, -{30,24,-16}, -{30,24,-15}, -{30,24,-14}, -{30,24,-13}, -{30,24,-12}, -{30,24,-11}, -{30,24,-10}, -{30,24,-9}, -{30,24,-8}, -{30,24,-7}, -{30,24,-6}, -{30,24,-5}, -{30,24,-4}, -{30,24,-3}, -{30,24,-2}, -{30,24,-1}, -{30,24,0}, -{30,24,1}, -{30,24,2}, -{30,24,3}, -{30,24,4}, -{30,24,5}, -{30,24,6}, -{30,24,7}, -{30,24,8}, -{30,24,9}, -{30,24,10}, -{30,24,11}, -{30,24,12}, -{30,24,13}, -{30,24,14}, -{30,24,15}, -{30,24,16}, -{30,24,17}, -{30,24,18}, -{30,24,19}, -{30,24,20}, -{30,24,21}, -{30,24,22}, -{30,24,23}, -{30,24,24}, -{30,24,25}, -{30,24,26}, -{30,24,27}, -{30,24,28}, -{30,24,29}, -{30,24,30}, -{30,24,31}, -{30,24,32}, -{30,24,33}, -{30,24,34}, -{30,24,35}, -{30,24,36}, -{30,24,37}, -{30,24,38}, -{30,24,39}, -{30,24,40}, -{30,25,-58}, -{30,25,-57}, -{30,25,-56}, -{30,25,-55}, -{30,25,-54}, -{30,25,-53}, -{30,25,-52}, -{30,25,-51}, -{30,25,-50}, -{30,25,-49}, -{30,25,-48}, -{30,25,-47}, -{30,25,-46}, -{30,25,-45}, -{30,25,-44}, -{30,25,-43}, -{30,25,-42}, -{30,25,-41}, -{30,25,-40}, -{30,25,-39}, -{30,25,-38}, -{30,25,-37}, -{30,25,-36}, -{30,25,-35}, -{30,25,-34}, -{30,25,-33}, -{30,25,-32}, -{30,25,-31}, -{30,25,-30}, -{30,25,-29}, -{30,25,-28}, -{30,25,-27}, -{30,25,-26}, -{30,25,-25}, -{30,25,-24}, -{30,25,-23}, -{30,25,-22}, -{30,25,-21}, -{30,25,-20}, -{30,25,-19}, -{30,25,-18}, -{30,25,-17}, -{30,25,-16}, -{30,25,-15}, -{30,25,-14}, -{30,25,-13}, -{30,25,-12}, -{30,25,-11}, -{30,25,-10}, -{30,25,-9}, -{30,25,-8}, -{30,25,-7}, -{30,25,-6}, -{30,25,-5}, -{30,25,-4}, -{30,25,-3}, -{30,25,-2}, -{30,25,-1}, -{30,25,0}, -{30,25,1}, -{30,25,2}, -{30,25,3}, -{30,25,4}, -{30,25,5}, -{30,25,6}, -{30,25,7}, -{30,25,8}, -{30,25,9}, -{30,25,10}, -{30,25,11}, -{30,25,12}, -{30,25,13}, -{30,25,14}, -{30,25,15}, -{30,25,16}, -{30,25,17}, -{30,25,18}, -{30,25,19}, -{30,25,20}, -{30,25,21}, -{30,25,22}, -{30,25,23}, -{30,25,24}, -{30,25,25}, -{30,25,26}, -{30,25,27}, -{30,25,28}, -{30,25,29}, -{30,25,30}, -{30,25,31}, -{30,25,32}, -{30,25,33}, -{30,25,34}, -{30,25,35}, -{30,25,36}, -{30,25,37}, -{30,25,38}, -{30,25,39}, -{30,25,40}, -{30,25,41}, -{30,26,-59}, -{30,26,-58}, -{30,26,-57}, -{30,26,-56}, -{30,26,-55}, -{30,26,-54}, -{30,26,-53}, -{30,26,-52}, -{30,26,-51}, -{30,26,-50}, -{30,26,-49}, -{30,26,-48}, -{30,26,-47}, -{30,26,-46}, -{30,26,-45}, -{30,26,-44}, -{30,26,-43}, -{30,26,-42}, -{30,26,-41}, -{30,26,-40}, -{30,26,-39}, -{30,26,-38}, -{30,26,-37}, -{30,26,-36}, -{30,26,-35}, -{30,26,-34}, -{30,26,-33}, -{30,26,-32}, -{30,26,-31}, -{30,26,-30}, -{30,26,-29}, -{30,26,-28}, -{30,26,-27}, -{30,26,-26}, -{30,26,-25}, -{30,26,-24}, -{30,26,-23}, -{30,26,-22}, -{30,26,-21}, -{30,26,-20}, -{30,26,-19}, -{30,26,-18}, -{30,26,-17}, -{30,26,-16}, -{30,26,-15}, -{30,26,-14}, -{30,26,-13}, -{30,26,-12}, -{30,26,-11}, -{30,26,-10}, -{30,26,-9}, -{30,26,-8}, -{30,26,-7}, -{30,26,-6}, -{30,26,-5}, -{30,26,-4}, -{30,26,-3}, -{30,26,-2}, -{30,26,-1}, -{30,26,0}, -{30,26,1}, -{30,26,2}, -{30,26,3}, -{30,26,4}, -{30,26,5}, -{30,26,6}, -{30,26,7}, -{30,26,8}, -{30,26,9}, -{30,26,10}, -{30,26,11}, -{30,26,12}, -{30,26,13}, -{30,26,14}, -{30,26,15}, -{30,26,16}, -{30,26,17}, -{30,26,18}, -{30,26,19}, -{30,26,20}, -{30,26,21}, -{30,26,22}, -{30,26,23}, -{30,26,24}, -{30,26,25}, -{30,26,26}, -{30,26,27}, -{30,26,28}, -{30,26,29}, -{30,26,30}, -{30,26,31}, -{30,26,32}, -{30,26,33}, -{30,26,34}, -{30,26,35}, -{30,26,36}, -{30,26,37}, -{30,26,38}, -{30,26,39}, -{30,26,40}, -{30,26,41}, -{30,27,-60}, -{30,27,-59}, -{30,27,-58}, -{30,27,-57}, -{30,27,-56}, -{30,27,-55}, -{30,27,-54}, -{30,27,-53}, -{30,27,-52}, -{30,27,-51}, -{30,27,-50}, -{30,27,-49}, -{30,27,-48}, -{30,27,-47}, -{30,27,-46}, -{30,27,-45}, -{30,27,-44}, -{30,27,-43}, -{30,27,-42}, -{30,27,-41}, -{30,27,-40}, -{30,27,-39}, -{30,27,-38}, -{30,27,-37}, -{30,27,-36}, -{30,27,-35}, -{30,27,-34}, -{30,27,-33}, -{30,27,-32}, -{30,27,-31}, -{30,27,-30}, -{30,27,-29}, -{30,27,-28}, -{30,27,-27}, -{30,27,-26}, -{30,27,-25}, -{30,27,-24}, -{30,27,-23}, -{30,27,-22}, -{30,27,-21}, -{30,27,-20}, -{30,27,-19}, -{30,27,-18}, -{30,27,-17}, -{30,27,-16}, -{30,27,-15}, -{30,27,-14}, -{30,27,-13}, -{30,27,-12}, -{30,27,-11}, -{30,27,-10}, -{30,27,-9}, -{30,27,-8}, -{30,27,-7}, -{30,27,-6}, -{30,27,-5}, -{30,27,-4}, -{30,27,-3}, -{30,27,-2}, -{30,27,-1}, -{30,27,0}, -{30,27,1}, -{30,27,2}, -{30,27,3}, -{30,27,4}, -{30,27,5}, -{30,27,6}, -{30,27,7}, -{30,27,8}, -{30,27,9}, -{30,27,10}, -{30,27,11}, -{30,27,12}, -{30,27,13}, -{30,27,14}, -{30,27,15}, -{30,27,16}, -{30,27,17}, -{30,27,18}, -{30,27,19}, -{30,27,20}, -{30,27,21}, -{30,27,22}, -{30,27,23}, -{30,27,24}, -{30,27,25}, -{30,27,26}, -{30,27,27}, -{30,27,28}, -{30,27,29}, -{30,27,30}, -{30,27,31}, -{30,27,32}, -{30,27,33}, -{30,27,34}, -{30,27,35}, -{30,27,36}, -{30,27,37}, -{30,27,38}, -{30,27,39}, -{30,27,40}, -{30,27,41}, -{30,28,-61}, -{30,28,-60}, -{30,28,-59}, -{30,28,-58}, -{30,28,-57}, -{30,28,-56}, -{30,28,-55}, -{30,28,-54}, -{30,28,-53}, -{30,28,-52}, -{30,28,-51}, -{30,28,-50}, -{30,28,-49}, -{30,28,-48}, -{30,28,-47}, -{30,28,-46}, -{30,28,-45}, -{30,28,-44}, -{30,28,-43}, -{30,28,-42}, -{30,28,-41}, -{30,28,-40}, -{30,28,-39}, -{30,28,-38}, -{30,28,-37}, -{30,28,-36}, -{30,28,-35}, -{30,28,-34}, -{30,28,-33}, -{30,28,-32}, -{30,28,-31}, -{30,28,-30}, -{30,28,-29}, -{30,28,-28}, -{30,28,-27}, -{30,28,-26}, -{30,28,-25}, -{30,28,-24}, -{30,28,-23}, -{30,28,-22}, -{30,28,-21}, -{30,28,-20}, -{30,28,-19}, -{30,28,-18}, -{30,28,-17}, -{30,28,-16}, -{30,28,-15}, -{30,28,-14}, -{30,28,-13}, -{30,28,-12}, -{30,28,-11}, -{30,28,-10}, -{30,28,-9}, -{30,28,-8}, -{30,28,-7}, -{30,28,-6}, -{30,28,-5}, -{30,28,-4}, -{30,28,-3}, -{30,28,-2}, -{30,28,-1}, -{30,28,0}, -{30,28,1}, -{30,28,2}, -{30,28,3}, -{30,28,4}, -{30,28,5}, -{30,28,6}, -{30,28,7}, -{30,28,8}, -{30,28,9}, -{30,28,10}, -{30,28,11}, -{30,28,12}, -{30,28,13}, -{30,28,14}, -{30,28,15}, -{30,28,16}, -{30,28,17}, -{30,28,18}, -{30,28,19}, -{30,28,20}, -{30,28,21}, -{30,28,22}, -{30,28,23}, -{30,28,24}, -{30,28,25}, -{30,28,26}, -{30,28,27}, -{30,28,28}, -{30,28,29}, -{30,28,30}, -{30,28,31}, -{30,28,32}, -{30,28,33}, -{30,28,34}, -{30,28,35}, -{30,28,36}, -{30,28,37}, -{30,28,38}, -{30,28,39}, -{30,28,40}, -{30,28,41}, -{30,29,-62}, -{30,29,-61}, -{30,29,-60}, -{30,29,-59}, -{30,29,-58}, -{30,29,-57}, -{30,29,-56}, -{30,29,-55}, -{30,29,-54}, -{30,29,-53}, -{30,29,-52}, -{30,29,-51}, -{30,29,-50}, -{30,29,-49}, -{30,29,-48}, -{30,29,-47}, -{30,29,-46}, -{30,29,-45}, -{30,29,-44}, -{30,29,-43}, -{30,29,-42}, -{30,29,-41}, -{30,29,-40}, -{30,29,-39}, -{30,29,-38}, -{30,29,-37}, -{30,29,-36}, -{30,29,-35}, -{30,29,-34}, -{30,29,-33}, -{30,29,-32}, -{30,29,-31}, -{30,29,-30}, -{30,29,-29}, -{30,29,-28}, -{30,29,-27}, -{30,29,-26}, -{30,29,-25}, -{30,29,-24}, -{30,29,-23}, -{30,29,-22}, -{30,29,-21}, -{30,29,-20}, -{30,29,-19}, -{30,29,-18}, -{30,29,-17}, -{30,29,-16}, -{30,29,-15}, -{30,29,-14}, -{30,29,-13}, -{30,29,-12}, -{30,29,-11}, -{30,29,-10}, -{30,29,-9}, -{30,29,-8}, -{30,29,-7}, -{30,29,-6}, -{30,29,-5}, -{30,29,-4}, -{30,29,-3}, -{30,29,-2}, -{30,29,-1}, -{30,29,0}, -{30,29,1}, -{30,29,2}, -{30,29,3}, -{30,29,4}, -{30,29,5}, -{30,29,6}, -{30,29,7}, -{30,29,8}, -{30,29,9}, -{30,29,10}, -{30,29,11}, -{30,29,12}, -{30,29,13}, -{30,29,14}, -{30,29,15}, -{30,29,16}, -{30,29,17}, -{30,29,18}, -{30,29,19}, -{30,29,20}, -{30,29,21}, -{30,29,22}, -{30,29,23}, -{30,29,24}, -{30,29,25}, -{30,29,26}, -{30,29,27}, -{30,29,28}, -{30,29,29}, -{30,29,30}, -{30,29,31}, -{30,29,32}, -{30,29,33}, -{30,29,34}, -{30,29,35}, -{30,29,36}, -{30,29,37}, -{30,29,38}, -{30,29,39}, -{30,29,40}, -{30,29,41}, -{30,30,-63}, -{30,30,-62}, -{30,30,-61}, -{30,30,-60}, -{30,30,-59}, -{30,30,-58}, -{30,30,-57}, -{30,30,-56}, -{30,30,-55}, -{30,30,-54}, -{30,30,-53}, -{30,30,-52}, -{30,30,-51}, -{30,30,-50}, -{30,30,-49}, -{30,30,-48}, -{30,30,-47}, -{30,30,-46}, -{30,30,-45}, -{30,30,-44}, -{30,30,-43}, -{30,30,-42}, -{30,30,-41}, -{30,30,-40}, -{30,30,-39}, -{30,30,-38}, -{30,30,-37}, -{30,30,-36}, -{30,30,-35}, -{30,30,-34}, -{30,30,-33}, -{30,30,-32}, -{30,30,-31}, -{30,30,-30}, -{30,30,-29}, -{30,30,-28}, -{30,30,-27}, -{30,30,-26}, -{30,30,-25}, -{30,30,-24}, -{30,30,-23}, -{30,30,-22}, -{30,30,-21}, -{30,30,-20}, -{30,30,-19}, -{30,30,-18}, -{30,30,-17}, -{30,30,-16}, -{30,30,-15}, -{30,30,-14}, -{30,30,-13}, -{30,30,-12}, -{30,30,-11}, -{30,30,-10}, -{30,30,-9}, -{30,30,-8}, -{30,30,-7}, -{30,30,-6}, -{30,30,-5}, -{30,30,-4}, -{30,30,-3}, -{30,30,-2}, -{30,30,-1}, -{30,30,0}, -{30,30,1}, -{30,30,2}, -{30,30,3}, -{30,30,4}, -{30,30,5}, -{30,30,6}, -{30,30,7}, -{30,30,8}, -{30,30,9}, -{30,30,10}, -{30,30,11}, -{30,30,12}, -{30,30,13}, -{30,30,14}, -{30,30,15}, -{30,30,16}, -{30,30,17}, -{30,30,18}, -{30,30,19}, -{30,30,20}, -{30,30,21}, -{30,30,22}, -{30,30,23}, -{30,30,24}, -{30,30,25}, -{30,30,26}, -{30,30,27}, -{30,30,28}, -{30,30,29}, -{30,30,30}, -{30,30,31}, -{30,30,32}, -{30,30,33}, -{30,30,34}, -{30,30,35}, -{30,30,36}, -{30,30,37}, -{30,30,38}, -{30,30,39}, -{30,30,40}, -{30,30,41}, -{30,31,-64}, -{30,31,-63}, -{30,31,-62}, -{30,31,-61}, -{30,31,-60}, -{30,31,-59}, -{30,31,-58}, -{30,31,-57}, -{30,31,-56}, -{30,31,-55}, -{30,31,-54}, -{30,31,-53}, -{30,31,-52}, -{30,31,-51}, -{30,31,-50}, -{30,31,-49}, -{30,31,-48}, -{30,31,-47}, -{30,31,-46}, -{30,31,-45}, -{30,31,-44}, -{30,31,-43}, -{30,31,-42}, -{30,31,-41}, -{30,31,-40}, -{30,31,-39}, -{30,31,-38}, -{30,31,-37}, -{30,31,-36}, -{30,31,-35}, -{30,31,-34}, -{30,31,-33}, -{30,31,-32}, -{30,31,-31}, -{30,31,-30}, -{30,31,-29}, -{30,31,-28}, -{30,31,-27}, -{30,31,-26}, -{30,31,-25}, -{30,31,-24}, -{30,31,-23}, -{30,31,-22}, -{30,31,-21}, -{30,31,-20}, -{30,31,-19}, -{30,31,-18}, -{30,31,-17}, -{30,31,-16}, -{30,31,-15}, -{30,31,-14}, -{30,31,-13}, -{30,31,-12}, -{30,31,-11}, -{30,31,-10}, -{30,31,-9}, -{30,31,-8}, -{30,31,-7}, -{30,31,-6}, -{30,31,-5}, -{30,31,-4}, -{30,31,-3}, -{30,31,-2}, -{30,31,-1}, -{30,31,0}, -{30,31,1}, -{30,31,2}, -{30,31,3}, -{30,31,4}, -{30,31,5}, -{30,31,6}, -{30,31,7}, -{30,31,8}, -{30,31,9}, -{30,31,10}, -{30,31,11}, -{30,31,12}, -{30,31,13}, -{30,31,14}, -{30,31,15}, -{30,31,16}, -{30,31,17}, -{30,31,18}, -{30,31,19}, -{30,31,20}, -{30,31,21}, -{30,31,22}, -{30,31,23}, -{30,31,24}, -{30,31,25}, -{30,31,26}, -{30,31,27}, -{30,31,28}, -{30,31,29}, -{30,31,30}, -{30,31,31}, -{30,31,32}, -{30,31,33}, -{30,31,34}, -{30,31,35}, -{30,31,36}, -{30,31,37}, -{30,31,38}, -{30,31,39}, -{30,31,40}, -{30,31,41}, -{30,32,-65}, -{30,32,-64}, -{30,32,-63}, -{30,32,-62}, -{30,32,-61}, -{30,32,-60}, -{30,32,-59}, -{30,32,-58}, -{30,32,-57}, -{30,32,-56}, -{30,32,-55}, -{30,32,-54}, -{30,32,-53}, -{30,32,-52}, -{30,32,-51}, -{30,32,-50}, -{30,32,-49}, -{30,32,-48}, -{30,32,-47}, -{30,32,-46}, -{30,32,-45}, -{30,32,-44}, -{30,32,-43}, -{30,32,-42}, -{30,32,-41}, -{30,32,-40}, -{30,32,-39}, -{30,32,-38}, -{30,32,-37}, -{30,32,-36}, -{30,32,-35}, -{30,32,-34}, -{30,32,-33}, -{30,32,-32}, -{30,32,-31}, -{30,32,-30}, -{30,32,-29}, -{30,32,-28}, -{30,32,-27}, -{30,32,-26}, -{30,32,-25}, -{30,32,-24}, -{30,32,-23}, -{30,32,-22}, -{30,32,-21}, -{30,32,-20}, -{30,32,-19}, -{30,32,-18}, -{30,32,-17}, -{30,32,-16}, -{30,32,-15}, -{30,32,-14}, -{30,32,-13}, -{30,32,-12}, -{30,32,-11}, -{30,32,-10}, -{30,32,-9}, -{30,32,-8}, -{30,32,-7}, -{30,32,-6}, -{30,32,-5}, -{30,32,-4}, -{30,32,-3}, -{30,32,-2}, -{30,32,-1}, -{30,32,0}, -{30,32,1}, -{30,32,2}, -{30,32,3}, -{30,32,4}, -{30,32,5}, -{30,32,6}, -{30,32,7}, -{30,32,8}, -{30,32,9}, -{30,32,10}, -{30,32,11}, -{30,32,12}, -{30,32,13}, -{30,32,14}, -{30,32,15}, -{30,32,16}, -{30,32,17}, -{30,32,18}, -{30,32,19}, -{30,32,20}, -{30,32,21}, -{30,32,22}, -{30,32,23}, -{30,32,24}, -{30,32,25}, -{30,32,26}, -{30,32,27}, -{30,32,28}, -{30,32,29}, -{30,32,30}, -{30,32,31}, -{30,32,32}, -{30,32,33}, -{30,32,34}, -{30,32,35}, -{30,32,36}, -{30,32,37}, -{30,32,38}, -{30,32,39}, -{30,32,40}, -{30,32,41}, -{30,33,-66}, -{30,33,-65}, -{30,33,-64}, -{30,33,-63}, -{30,33,-62}, -{30,33,-61}, -{30,33,-60}, -{30,33,-59}, -{30,33,-58}, -{30,33,-57}, -{30,33,-56}, -{30,33,-55}, -{30,33,-54}, -{30,33,-53}, -{30,33,-52}, -{30,33,-51}, -{30,33,-50}, -{30,33,-49}, -{30,33,-48}, -{30,33,-47}, -{30,33,-46}, -{30,33,-45}, -{30,33,-44}, -{30,33,-43}, -{30,33,-42}, -{30,33,-41}, -{30,33,-40}, -{30,33,-39}, -{30,33,-38}, -{30,33,-37}, -{30,33,-36}, -{30,33,-35}, -{30,33,-34}, -{30,33,-33}, -{30,33,-32}, -{30,33,-31}, -{30,33,-30}, -{30,33,-29}, -{30,33,-28}, -{30,33,-27}, -{30,33,-26}, -{30,33,-25}, -{30,33,-24}, -{30,33,-23}, -{30,33,-22}, -{30,33,-21}, -{30,33,-20}, -{30,33,-19}, -{30,33,-18}, -{30,33,-17}, -{30,33,-16}, -{30,33,-15}, -{30,33,-14}, -{30,33,-13}, -{30,33,-12}, -{30,33,-11}, -{30,33,-10}, -{30,33,-9}, -{30,33,-8}, -{30,33,-7}, -{30,33,-6}, -{30,33,-5}, -{30,33,-4}, -{30,33,-3}, -{30,33,-2}, -{30,33,-1}, -{30,33,0}, -{30,33,1}, -{30,33,2}, -{30,33,3}, -{30,33,4}, -{30,33,5}, -{30,33,6}, -{30,33,7}, -{30,33,8}, -{30,33,9}, -{30,33,10}, -{30,33,11}, -{30,33,12}, -{30,33,13}, -{30,33,14}, -{30,33,15}, -{30,33,16}, -{30,33,17}, -{30,33,18}, -{30,33,19}, -{30,33,20}, -{30,33,21}, -{30,33,22}, -{30,33,23}, -{30,33,24}, -{30,33,25}, -{30,33,26}, -{30,33,27}, -{30,33,28}, -{30,33,29}, -{30,33,30}, -{30,33,31}, -{30,33,32}, -{30,33,33}, -{30,33,34}, -{30,33,35}, -{30,33,36}, -{30,33,37}, -{30,33,38}, -{30,33,39}, -{30,33,40}, -{30,33,41}, -{30,34,-67}, -{30,34,-66}, -{30,34,-65}, -{30,34,-64}, -{30,34,-63}, -{30,34,-62}, -{30,34,-61}, -{30,34,-60}, -{30,34,-59}, -{30,34,-58}, -{30,34,-57}, -{30,34,-56}, -{30,34,-55}, -{30,34,-54}, -{30,34,-53}, -{30,34,-52}, -{30,34,-51}, -{30,34,-50}, -{30,34,-49}, -{30,34,-48}, -{30,34,-47}, -{30,34,-46}, -{30,34,-45}, -{30,34,-44}, -{30,34,-43}, -{30,34,-42}, -{30,34,-41}, -{30,34,-40}, -{30,34,-39}, -{30,34,-38}, -{30,34,-37}, -{30,34,-36}, -{30,34,-35}, -{30,34,-34}, -{30,34,-33}, -{30,34,-32}, -{30,34,-31}, -{30,34,-30}, -{30,34,-29}, -{30,34,-28}, -{30,34,-27}, -{30,34,-26}, -{30,34,-25}, -{30,34,-24}, -{30,34,-23}, -{30,34,-22}, -{30,34,-21}, -{30,34,-20}, -{30,34,-19}, -{30,34,-18}, -{30,34,-17}, -{30,34,-16}, -{30,34,-15}, -{30,34,-14}, -{30,34,-13}, -{30,34,-12}, -{30,34,-11}, -{30,34,-10}, -{30,34,-9}, -{30,34,-8}, -{30,34,-7}, -{30,34,-6}, -{30,34,-5}, -{30,34,-4}, -{30,34,-3}, -{30,34,-2}, -{30,34,-1}, -{30,34,0}, -{30,34,1}, -{30,34,2}, -{30,34,3}, -{30,34,4}, -{30,34,5}, -{30,34,6}, -{30,34,7}, -{30,34,8}, -{30,34,9}, -{30,34,10}, -{30,34,11}, -{30,34,12}, -{30,34,13}, -{30,34,14}, -{30,34,15}, -{30,34,16}, -{30,34,17}, -{30,34,18}, -{30,34,19}, -{30,34,20}, -{30,34,21}, -{30,34,22}, -{30,34,23}, -{30,34,24}, -{30,34,25}, -{30,34,26}, -{30,34,27}, -{30,34,28}, -{30,34,29}, -{30,34,30}, -{30,34,31}, -{30,34,32}, -{30,34,33}, -{30,34,34}, -{30,34,35}, -{30,34,36}, -{30,34,37}, -{30,34,38}, -{30,34,39}, -{30,34,40}, -{30,34,41}, -{30,35,-68}, -{30,35,-67}, -{30,35,-66}, -{30,35,-65}, -{30,35,-64}, -{30,35,-63}, -{30,35,-62}, -{30,35,-61}, -{30,35,-60}, -{30,35,-59}, -{30,35,-58}, -{30,35,-57}, -{30,35,-56}, -{30,35,-55}, -{30,35,-54}, -{30,35,-53}, -{30,35,-52}, -{30,35,-51}, -{30,35,-50}, -{30,35,-49}, -{30,35,-48}, -{30,35,-47}, -{30,35,-46}, -{30,35,-45}, -{30,35,-44}, -{30,35,-43}, -{30,35,-42}, -{30,35,-41}, -{30,35,-40}, -{30,35,-39}, -{30,35,-38}, -{30,35,-37}, -{30,35,-36}, -{30,35,-35}, -{30,35,-34}, -{30,35,-33}, -{30,35,-32}, -{30,35,-31}, -{30,35,-30}, -{30,35,-29}, -{30,35,-28}, -{30,35,-27}, -{30,35,-26}, -{30,35,-25}, -{30,35,-24}, -{30,35,-23}, -{30,35,-22}, -{30,35,-21}, -{30,35,-20}, -{30,35,-19}, -{30,35,-18}, -{30,35,-17}, -{30,35,-16}, -{30,35,-15}, -{30,35,-14}, -{30,35,-13}, -{30,35,-12}, -{30,35,-11}, -{30,35,-10}, -{30,35,-9}, -{30,35,-8}, -{30,35,-7}, -{30,35,-6}, -{30,35,-5}, -{30,35,-4}, -{30,35,-3}, -{30,35,-2}, -{30,35,-1}, -{30,35,0}, -{30,35,1}, -{30,35,2}, -{30,35,3}, -{30,35,4}, -{30,35,5}, -{30,35,6}, -{30,35,7}, -{30,35,8}, -{30,35,9}, -{30,35,10}, -{30,35,11}, -{30,35,12}, -{30,35,13}, -{30,35,14}, -{30,35,15}, -{30,35,16}, -{30,35,17}, -{30,35,18}, -{30,35,19}, -{30,35,20}, -{30,35,21}, -{30,35,22}, -{30,35,23}, -{30,35,24}, -{30,35,25}, -{30,35,26}, -{30,35,27}, -{30,35,28}, -{30,35,29}, -{30,35,30}, -{30,35,31}, -{30,35,32}, -{30,35,33}, -{30,35,34}, -{30,35,35}, -{30,35,36}, -{30,35,37}, -{30,35,38}, -{30,35,39}, -{30,35,40}, -{30,35,41}, -{30,36,-69}, -{30,36,-68}, -{30,36,-67}, -{30,36,-66}, -{30,36,-65}, -{30,36,-64}, -{30,36,-63}, -{30,36,-62}, -{30,36,-61}, -{30,36,-60}, -{30,36,-59}, -{30,36,-58}, -{30,36,-57}, -{30,36,-56}, -{30,36,-55}, -{30,36,-54}, -{30,36,-53}, -{30,36,-52}, -{30,36,-51}, -{30,36,-50}, -{30,36,-49}, -{30,36,-48}, -{30,36,-47}, -{30,36,-46}, -{30,36,-45}, -{30,36,-44}, -{30,36,-43}, -{30,36,-42}, -{30,36,-41}, -{30,36,-40}, -{30,36,-39}, -{30,36,-38}, -{30,36,-37}, -{30,36,-36}, -{30,36,-35}, -{30,36,-34}, -{30,36,-33}, -{30,36,-32}, -{30,36,-31}, -{30,36,-30}, -{30,36,-29}, -{30,36,-28}, -{30,36,-27}, -{30,36,-26}, -{30,36,-25}, -{30,36,-24}, -{30,36,-23}, -{30,36,-22}, -{30,36,-21}, -{30,36,-20}, -{30,36,-19}, -{30,36,-18}, -{30,36,-17}, -{30,36,-16}, -{30,36,-15}, -{30,36,-14}, -{30,36,-13}, -{30,36,-12}, -{30,36,-11}, -{30,36,-10}, -{30,36,-9}, -{30,36,-8}, -{30,36,-7}, -{30,36,-6}, -{30,36,-5}, -{30,36,-4}, -{30,36,-3}, -{30,36,-2}, -{30,36,-1}, -{30,36,0}, -{30,36,1}, -{30,36,2}, -{30,36,3}, -{30,36,4}, -{30,36,5}, -{30,36,6}, -{30,36,7}, -{30,36,8}, -{30,36,9}, -{30,36,10}, -{30,36,11}, -{30,36,12}, -{30,36,13}, -{30,36,14}, -{30,36,15}, -{30,36,16}, -{30,36,17}, -{30,36,18}, -{30,36,19}, -{30,36,20}, -{30,36,21}, -{30,36,22}, -{30,36,23}, -{30,36,24}, -{30,36,25}, -{30,36,26}, -{30,36,27}, -{30,36,28}, -{30,36,29}, -{30,36,30}, -{30,36,31}, -{30,36,32}, -{30,36,33}, -{30,36,34}, -{30,36,35}, -{30,36,36}, -{30,36,37}, -{30,36,38}, -{30,36,39}, -{30,36,40}, -{30,36,41}, -{30,36,42}, -{30,37,-69}, -{30,37,-68}, -{30,37,-67}, -{30,37,-66}, -{30,37,-65}, -{30,37,-64}, -{30,37,-63}, -{30,37,-62}, -{30,37,-61}, -{30,37,-60}, -{30,37,-59}, -{30,37,-58}, -{30,37,-57}, -{30,37,-56}, -{30,37,-55}, -{30,37,-54}, -{30,37,-53}, -{30,37,-52}, -{30,37,-51}, -{30,37,-50}, -{30,37,-49}, -{30,37,-48}, -{30,37,-47}, -{30,37,-46}, -{30,37,-45}, -{30,37,-44}, -{30,37,-43}, -{30,37,-42}, -{30,37,-41}, -{30,37,-40}, -{30,37,-39}, -{30,37,-38}, -{30,37,-37}, -{30,37,-36}, -{30,37,-35}, -{30,37,-34}, -{30,37,-33}, -{30,37,-32}, -{30,37,-31}, -{30,37,-30}, -{30,37,-29}, -{30,37,-28}, -{30,37,-27}, -{30,37,-26}, -{30,37,-25}, -{30,37,-24}, -{30,37,-23}, -{30,37,-22}, -{30,37,-21}, -{30,37,-20}, -{30,37,-19}, -{30,37,-18}, -{30,37,-17}, -{30,37,-16}, -{30,37,-15}, -{30,37,-14}, -{30,37,-13}, -{30,37,-12}, -{30,37,-11}, -{30,37,-10}, -{30,37,-9}, -{30,37,-8}, -{30,37,-7}, -{30,37,-6}, -{30,37,-5}, -{30,37,-4}, -{30,37,-3}, -{30,37,-2}, -{30,37,-1}, -{30,37,0}, -{30,37,1}, -{30,37,2}, -{30,37,3}, -{30,37,4}, -{30,37,5}, -{30,37,6}, -{30,37,7}, -{30,37,8}, -{30,37,9}, -{30,37,10}, -{30,37,11}, -{30,37,12}, -{30,37,13}, -{30,37,14}, -{30,37,15}, -{30,37,16}, -{30,37,17}, -{30,37,18}, -{30,37,19}, -{30,37,20}, -{30,37,21}, -{30,37,22}, -{30,37,23}, -{30,37,24}, -{30,37,25}, -{30,37,26}, -{30,37,27}, -{30,37,28}, -{30,37,29}, -{30,37,30}, -{30,37,31}, -{30,37,32}, -{30,37,33}, -{30,37,34}, -{30,37,35}, -{30,37,36}, -{30,37,37}, -{30,37,38}, -{30,37,39}, -{30,37,40}, -{30,37,41}, -{30,37,42}, -{30,38,-70}, -{30,38,-69}, -{30,38,-68}, -{30,38,-67}, -{30,38,-66}, -{30,38,-65}, -{30,38,-64}, -{30,38,-63}, -{30,38,-62}, -{30,38,-61}, -{30,38,-60}, -{30,38,-59}, -{30,38,-58}, -{30,38,-57}, -{30,38,-56}, -{30,38,-55}, -{30,38,-54}, -{30,38,-53}, -{30,38,-52}, -{30,38,-51}, -{30,38,-50}, -{30,38,-49}, -{30,38,-48}, -{30,38,-47}, -{30,38,-46}, -{30,38,-45}, -{30,38,-44}, -{30,38,-43}, -{30,38,-42}, -{30,38,-41}, -{30,38,-40}, -{30,38,-39}, -{30,38,-38}, -{30,38,-37}, -{30,38,-36}, -{30,38,-35}, -{30,38,-34}, -{30,38,-33}, -{30,38,-32}, -{30,38,-31}, -{30,38,-30}, -{30,38,-29}, -{30,38,-28}, -{30,38,-27}, -{30,38,-26}, -{30,38,-25}, -{30,38,-24}, -{30,38,-23}, -{30,38,-22}, -{30,38,-21}, -{30,38,-20}, -{30,38,-19}, -{30,38,-18}, -{30,38,-17}, -{30,38,-16}, -{30,38,-15}, -{30,38,-14}, -{30,38,-13}, -{30,38,-12}, -{30,38,-11}, -{30,38,-10}, -{30,38,-9}, -{30,38,-8}, -{30,38,-7}, -{30,38,-6}, -{30,38,-5}, -{30,38,-4}, -{30,38,-3}, -{30,38,-2}, -{30,38,-1}, -{30,38,0}, -{30,38,1}, -{30,38,2}, -{30,38,3}, -{30,38,4}, -{30,38,5}, -{30,38,6}, -{30,38,7}, -{30,38,8}, -{30,38,9}, -{30,38,10}, -{30,38,11}, -{30,38,12}, -{30,38,13}, -{30,38,14}, -{30,38,15}, -{30,38,16}, -{30,38,17}, -{30,38,18}, -{30,38,19}, -{30,38,20}, -{30,38,21}, -{30,38,22}, -{30,38,23}, -{30,38,24}, -{30,38,25}, -{30,38,26}, -{30,38,27}, -{30,38,28}, -{30,38,29}, -{30,38,30}, -{30,38,31}, -{30,38,32}, -{30,38,33}, -{30,38,34}, -{30,38,35}, -{30,38,36}, -{30,38,37}, -{30,38,38}, -{30,38,39}, -{30,38,40}, -{30,38,41}, -{30,38,42}, -{30,39,-71}, -{30,39,-70}, -{30,39,-69}, -{30,39,-68}, -{30,39,-67}, -{30,39,-66}, -{30,39,-65}, -{30,39,-64}, -{30,39,-63}, -{30,39,-62}, -{30,39,-61}, -{30,39,-60}, -{30,39,-59}, -{30,39,-58}, -{30,39,-57}, -{30,39,-56}, -{30,39,-55}, -{30,39,-54}, -{30,39,-53}, -{30,39,-52}, -{30,39,-51}, -{30,39,-50}, -{30,39,-49}, -{30,39,-48}, -{30,39,-47}, -{30,39,-46}, -{30,39,-45}, -{30,39,-44}, -{30,39,-43}, -{30,39,-42}, -{30,39,-41}, -{30,39,-40}, -{30,39,-39}, -{30,39,-38}, -{30,39,-37}, -{30,39,-36}, -{30,39,-35}, -{30,39,-34}, -{30,39,-33}, -{30,39,-32}, -{30,39,-31}, -{30,39,-30}, -{30,39,-29}, -{30,39,-28}, -{30,39,-27}, -{30,39,-26}, -{30,39,-25}, -{30,39,-24}, -{30,39,-23}, -{30,39,-22}, -{30,39,-21}, -{30,39,-20}, -{30,39,-19}, -{30,39,-18}, -{30,39,-17}, -{30,39,-16}, -{30,39,-15}, -{30,39,-14}, -{30,39,-13}, -{30,39,-12}, -{30,39,-11}, -{30,39,-10}, -{30,39,-9}, -{30,39,-8}, -{30,39,-7}, -{30,39,-6}, -{30,39,-5}, -{30,39,-4}, -{30,39,-3}, -{30,39,-2}, -{30,39,-1}, -{30,39,0}, -{30,39,1}, -{30,39,2}, -{30,39,3}, -{30,39,4}, -{30,39,5}, -{30,39,6}, -{30,39,7}, -{30,39,8}, -{30,39,9}, -{30,39,10}, -{30,39,11}, -{30,39,12}, -{30,39,13}, -{30,39,14}, -{30,39,15}, -{30,39,16}, -{30,39,17}, -{30,39,18}, -{30,39,19}, -{30,39,20}, -{30,39,21}, -{30,39,22}, -{30,39,23}, -{30,39,24}, -{30,39,25}, -{30,39,26}, -{30,39,27}, -{30,39,28}, -{30,39,29}, -{30,39,30}, -{30,39,31}, -{30,39,32}, -{30,39,33}, -{30,39,34}, -{30,39,35}, -{30,39,36}, -{30,39,37}, -{30,39,38}, -{30,39,39}, -{30,39,40}, -{30,39,41}, -{30,39,42}, -{30,40,-72}, -{30,40,-71}, -{30,40,-70}, -{30,40,-69}, -{30,40,-68}, -{30,40,-67}, -{30,40,-66}, -{30,40,-65}, -{30,40,-64}, -{30,40,-63}, -{30,40,-62}, -{30,40,-61}, -{30,40,-60}, -{30,40,-59}, -{30,40,-58}, -{30,40,-57}, -{30,40,-56}, -{30,40,-55}, -{30,40,-54}, -{30,40,-53}, -{30,40,-52}, -{30,40,-51}, -{30,40,-50}, -{30,40,-49}, -{30,40,-48}, -{30,40,-47}, -{30,40,-46}, -{30,40,-45}, -{30,40,-44}, -{30,40,-43}, -{30,40,-42}, -{30,40,-41}, -{30,40,-40}, -{30,40,-39}, -{30,40,-38}, -{30,40,-37}, -{30,40,-36}, -{30,40,-35}, -{30,40,-34}, -{30,40,-33}, -{30,40,-32}, -{30,40,-31}, -{30,40,-30}, -{30,40,-29}, -{30,40,-28}, -{30,40,-27}, -{30,40,-26}, -{30,40,-25}, -{30,40,-24}, -{30,40,-23}, -{30,40,-22}, -{30,40,-21}, -{30,40,-20}, -{30,40,-19}, -{30,40,-18}, -{30,40,-17}, -{30,40,-16}, -{30,40,-15}, -{30,40,-14}, -{30,40,-13}, -{30,40,-12}, -{30,40,-11}, -{30,40,-10}, -{30,40,-9}, -{30,40,-8}, -{30,40,-7}, -{30,40,-6}, -{30,40,-5}, -{30,40,-4}, -{30,40,-3}, -{30,40,-2}, -{30,40,-1}, -{30,40,0}, -{30,40,1}, -{30,40,2}, -{30,40,3}, -{30,40,4}, -{30,40,5}, -{30,40,6}, -{30,40,7}, -{30,40,8}, -{30,40,9}, -{30,40,10}, -{30,40,11}, -{30,40,12}, -{30,40,13}, -{30,40,14}, -{30,40,15}, -{30,40,16}, -{30,40,17}, -{30,40,18}, -{30,40,19}, -{30,40,20}, -{30,40,21}, -{30,40,22}, -{30,40,23}, -{30,40,24}, -{30,40,25}, -{30,40,26}, -{30,40,27}, -{30,40,28}, -{30,40,29}, -{30,40,30}, -{30,40,31}, -{30,40,32}, -{30,40,33}, -{30,40,34}, -{30,40,35}, -{30,40,36}, -{30,40,37}, -{30,40,38}, -{30,40,39}, -{30,40,40}, -{30,40,41}, -{30,40,42}, -{30,41,-73}, -{30,41,-72}, -{30,41,-71}, -{30,41,-70}, -{30,41,-69}, -{30,41,-68}, -{30,41,-67}, -{30,41,-66}, -{30,41,-65}, -{30,41,-64}, -{30,41,-63}, -{30,41,-62}, -{30,41,-61}, -{30,41,-60}, -{30,41,-59}, -{30,41,-58}, -{30,41,-57}, -{30,41,-56}, -{30,41,-55}, -{30,41,-54}, -{30,41,-53}, -{30,41,-52}, -{30,41,-51}, -{30,41,-50}, -{30,41,-49}, -{30,41,-48}, -{30,41,-47}, -{30,41,-46}, -{30,41,-45}, -{30,41,-44}, -{30,41,-43}, -{30,41,-42}, -{30,41,-41}, -{30,41,-40}, -{30,41,-39}, -{30,41,-38}, -{30,41,-37}, -{30,41,-36}, -{30,41,-35}, -{30,41,-34}, -{30,41,-33}, -{30,41,-32}, -{30,41,-31}, -{30,41,-30}, -{30,41,-29}, -{30,41,-28}, -{30,41,-27}, -{30,41,-26}, -{30,41,-25}, -{30,41,-24}, -{30,41,-23}, -{30,41,-22}, -{30,41,-21}, -{30,41,-20}, -{30,41,-19}, -{30,41,-18}, -{30,41,-17}, -{30,41,-16}, -{30,41,-15}, -{30,41,-14}, -{30,41,-13}, -{30,41,-12}, -{30,41,-11}, -{30,41,-10}, -{30,41,-9}, -{30,41,-8}, -{30,41,-7}, -{30,41,-6}, -{30,41,-5}, -{30,41,-4}, -{30,41,-3}, -{30,41,-2}, -{30,41,-1}, -{30,41,0}, -{30,41,1}, -{30,41,2}, -{30,41,3}, -{30,41,4}, -{30,41,5}, -{30,41,6}, -{30,41,7}, -{30,41,8}, -{30,41,9}, -{30,41,10}, -{30,41,11}, -{30,41,12}, -{30,41,13}, -{30,41,14}, -{30,41,15}, -{30,41,16}, -{30,41,17}, -{30,41,18}, -{30,41,19}, -{30,41,20}, -{30,41,21}, -{30,41,22}, -{30,41,23}, -{30,41,24}, -{30,41,25}, -{30,41,26}, -{30,41,27}, -{30,41,28}, -{30,41,29}, -{30,41,30}, -{30,41,31}, -{30,41,32}, -{30,41,33}, -{30,41,34}, -{30,41,35}, -{30,41,36}, -{30,41,37}, -{30,41,38}, -{30,41,39}, -{30,41,40}, -{30,41,41}, -{30,41,42}, -{30,42,-74}, -{30,42,-73}, -{30,42,-72}, -{30,42,-71}, -{30,42,-70}, -{30,42,-69}, -{30,42,-68}, -{30,42,-67}, -{30,42,-66}, -{30,42,-65}, -{30,42,-64}, -{30,42,-63}, -{30,42,-62}, -{30,42,-61}, -{30,42,-60}, -{30,42,-59}, -{30,42,-58}, -{30,42,-57}, -{30,42,-56}, -{30,42,-55}, -{30,42,-54}, -{30,42,-53}, -{30,42,-52}, -{30,42,-51}, -{30,42,-50}, -{30,42,-49}, -{30,42,-48}, -{30,42,-47}, -{30,42,-46}, -{30,42,-45}, -{30,42,-44}, -{30,42,-43}, -{30,42,-42}, -{30,42,-41}, -{30,42,-40}, -{30,42,-39}, -{30,42,-38}, -{30,42,-37}, -{30,42,-36}, -{30,42,-35}, -{30,42,-34}, -{30,42,-33}, -{30,42,-32}, -{30,42,-31}, -{30,42,-30}, -{30,42,-29}, -{30,42,-28}, -{30,42,-27}, -{30,42,-26}, -{30,42,-25}, -{30,42,-24}, -{30,42,-23}, -{30,42,-22}, -{30,42,-21}, -{30,42,-20}, -{30,42,-19}, -{30,42,-18}, -{30,42,-17}, -{30,42,-16}, -{30,42,-15}, -{30,42,-14}, -{30,42,-13}, -{30,42,-12}, -{30,42,-11}, -{30,42,-10}, -{30,42,-9}, -{30,42,-8}, -{30,42,-7}, -{30,42,-6}, -{30,42,-5}, -{30,42,-4}, -{30,42,-3}, -{30,42,-2}, -{30,42,-1}, -{30,42,0}, -{30,42,1}, -{30,42,2}, -{30,42,3}, -{30,42,4}, -{30,42,5}, -{30,42,6}, -{30,42,7}, -{30,42,8}, -{30,42,9}, -{30,42,10}, -{30,42,11}, -{30,42,12}, -{30,42,13}, -{30,42,14}, -{30,42,15}, -{30,42,16}, -{30,42,17}, -{30,42,18}, -{30,42,19}, -{30,42,20}, -{30,42,21}, -{30,42,22}, -{30,42,23}, -{30,42,24}, -{30,42,25}, -{30,42,26}, -{30,42,27}, -{30,42,28}, -{30,42,29}, -{30,42,30}, -{30,42,31}, -{30,42,32}, -{30,42,33}, -{30,42,34}, -{30,42,35}, -{30,42,36}, -{30,42,37}, -{30,42,38}, -{30,42,39}, -{30,42,40}, -{30,42,41}, -{30,42,42}, -{30,43,-75}, -{30,43,-74}, -{30,43,-73}, -{30,43,-72}, -{30,43,-71}, -{30,43,-70}, -{30,43,-69}, -{30,43,-68}, -{30,43,-67}, -{30,43,-66}, -{30,43,-65}, -{30,43,-64}, -{30,43,-63}, -{30,43,-62}, -{30,43,-61}, -{30,43,-60}, -{30,43,-59}, -{30,43,-58}, -{30,43,-57}, -{30,43,-56}, -{30,43,-55}, -{30,43,-54}, -{30,43,-53}, -{30,43,-52}, -{30,43,-51}, -{30,43,-50}, -{30,43,-49}, -{30,43,-48}, -{30,43,-47}, -{30,43,-46}, -{30,43,-45}, -{30,43,-44}, -{30,43,-43}, -{30,43,-42}, -{30,43,-41}, -{30,43,-40}, -{30,43,-39}, -{30,43,-38}, -{30,43,-37}, -{30,43,-36}, -{30,43,-35}, -{30,43,-34}, -{30,43,-33}, -{30,43,-32}, -{30,43,-31}, -{30,43,-30}, -{30,43,-29}, -{30,43,-28}, -{30,43,-27}, -{30,43,-26}, -{30,43,-25}, -{30,43,-24}, -{30,43,-23}, -{30,43,-22}, -{30,43,-21}, -{30,43,-20}, -{30,43,-19}, -{30,43,-18}, -{30,43,-17}, -{30,43,-16}, -{30,43,-15}, -{30,43,-14}, -{30,43,-13}, -{30,43,-12}, -{30,43,-11}, -{30,43,-10}, -{30,43,-9}, -{30,43,-8}, -{30,43,-7}, -{30,43,-6}, -{30,43,-5}, -{30,43,-4}, -{30,43,-3}, -{30,43,-2}, -{30,43,-1}, -{30,43,0}, -{30,43,1}, -{30,43,2}, -{30,43,3}, -{30,43,4}, -{30,43,5}, -{30,43,6}, -{30,43,7}, -{30,43,8}, -{30,43,9}, -{30,43,10}, -{30,43,11}, -{30,43,12}, -{30,43,13}, -{30,43,14}, -{30,43,15}, -{30,43,16}, -{30,43,17}, -{30,43,18}, -{30,43,19}, -{30,43,20}, -{30,43,21}, -{30,43,22}, -{30,43,23}, -{30,43,24}, -{30,43,25}, -{30,43,26}, -{30,43,27}, -{30,43,28}, -{30,43,29}, -{30,43,30}, -{30,43,31}, -{30,43,32}, -{30,43,33}, -{30,43,34}, -{30,43,35}, -{30,43,36}, -{30,43,37}, -{30,43,38}, -{30,43,39}, -{30,43,40}, -{30,43,41}, -{30,43,42}, -{30,44,-76}, -{30,44,-75}, -{30,44,-74}, -{30,44,-73}, -{30,44,-72}, -{30,44,-71}, -{30,44,-70}, -{30,44,-69}, -{30,44,-68}, -{30,44,-67}, -{30,44,-66}, -{30,44,-65}, -{30,44,-64}, -{30,44,-63}, -{30,44,-62}, -{30,44,-61}, -{30,44,-60}, -{30,44,-59}, -{30,44,-58}, -{30,44,-57}, -{30,44,-56}, -{30,44,-55}, -{30,44,-54}, -{30,44,-53}, -{30,44,-52}, -{30,44,-51}, -{30,44,-50}, -{30,44,-49}, -{30,44,-48}, -{30,44,-47}, -{30,44,-46}, -{30,44,-45}, -{30,44,-44}, -{30,44,-43}, -{30,44,-42}, -{30,44,-41}, -{30,44,-40}, -{30,44,-39}, -{30,44,-38}, -{30,44,-37}, -{30,44,-36}, -{30,44,-35}, -{30,44,-34}, -{30,44,-33}, -{30,44,-32}, -{30,44,-31}, -{30,44,-30}, -{30,44,-29}, -{30,44,-28}, -{30,44,-27}, -{30,44,-26}, -{30,44,-25}, -{30,44,-24}, -{30,44,-23}, -{30,44,-22}, -{30,44,-21}, -{30,44,-20}, -{30,44,-19}, -{30,44,-18}, -{30,44,-17}, -{30,44,-16}, -{30,44,-15}, -{30,44,-14}, -{30,44,-13}, -{30,44,-12}, -{30,44,-11}, -{30,44,-10}, -{30,44,-9}, -{30,44,-8}, -{30,44,-7}, -{30,44,-6}, -{30,44,-5}, -{30,44,-4}, -{30,44,-3}, -{30,44,-2}, -{30,44,-1}, -{30,44,0}, -{30,44,1}, -{30,44,2}, -{30,44,3}, -{30,44,4}, -{30,44,5}, -{30,44,6}, -{30,44,7}, -{30,44,8}, -{30,44,9}, -{30,44,10}, -{30,44,11}, -{30,44,12}, -{30,44,13}, -{30,44,14}, -{30,44,15}, -{30,44,16}, -{30,44,17}, -{30,44,18}, -{30,44,19}, -{30,44,20}, -{30,44,21}, -{30,44,22}, -{30,44,23}, -{30,44,24}, -{30,44,25}, -{30,44,26}, -{30,44,27}, -{30,44,28}, -{30,44,29}, -{30,44,30}, -{30,44,31}, -{30,44,32}, -{30,44,33}, -{30,44,34}, -{30,44,35}, -{30,44,36}, -{30,44,37}, -{30,44,38}, -{30,44,39}, -{30,44,40}, -{30,44,41}, -{30,44,42}, -{30,45,-77}, -{30,45,-76}, -{30,45,-75}, -{30,45,-74}, -{30,45,-73}, -{30,45,-72}, -{30,45,-71}, -{30,45,-70}, -{30,45,-69}, -{30,45,-68}, -{30,45,-67}, -{30,45,-66}, -{30,45,-65}, -{30,45,-64}, -{30,45,-63}, -{30,45,-62}, -{30,45,-61}, -{30,45,-60}, -{30,45,-59}, -{30,45,-58}, -{30,45,-57}, -{30,45,-56}, -{30,45,-55}, -{30,45,-54}, -{30,45,-53}, -{30,45,-52}, -{30,45,-51}, -{30,45,-50}, -{30,45,-49}, -{30,45,-48}, -{30,45,-47}, -{30,45,-46}, -{30,45,-45}, -{30,45,-44}, -{30,45,-43}, -{30,45,-42}, -{30,45,-41}, -{30,45,-40}, -{30,45,-39}, -{30,45,-38}, -{30,45,-37}, -{30,45,-36}, -{30,45,-35}, -{30,45,-34}, -{30,45,-33}, -{30,45,-32}, -{30,45,-31}, -{30,45,-30}, -{30,45,-29}, -{30,45,-28}, -{30,45,-27}, -{30,45,-26}, -{30,45,-25}, -{30,45,-24}, -{30,45,-23}, -{30,45,-22}, -{30,45,-21}, -{30,45,-20}, -{30,45,-19}, -{30,45,-18}, -{30,45,-17}, -{30,45,-16}, -{30,45,-15}, -{30,45,-14}, -{30,45,-13}, -{30,45,-12}, -{30,45,-11}, -{30,45,-10}, -{30,45,-9}, -{30,45,-8}, -{30,45,-7}, -{30,45,-6}, -{30,45,-5}, -{30,45,-4}, -{30,45,-3}, -{30,45,-2}, -{30,45,-1}, -{30,45,0}, -{30,45,1}, -{30,45,2}, -{30,45,3}, -{30,45,4}, -{30,45,5}, -{30,45,6}, -{30,45,7}, -{30,45,8}, -{30,45,9}, -{30,45,10}, -{30,45,11}, -{30,45,12}, -{30,45,13}, -{30,45,14}, -{30,45,15}, -{30,45,16}, -{30,45,17}, -{30,45,18}, -{30,45,19}, -{30,45,20}, -{30,45,21}, -{30,45,22}, -{30,45,23}, -{30,45,24}, -{30,45,25}, -{30,45,26}, -{30,45,27}, -{30,45,28}, -{30,45,29}, -{30,45,30}, -{30,45,31}, -{30,45,32}, -{30,45,33}, -{30,45,34}, -{30,45,35}, -{30,45,36}, -{30,45,37}, -{30,45,38}, -{30,45,39}, -{30,45,40}, -{30,45,41}, -{30,45,42}, -{30,46,-78}, -{30,46,-77}, -{30,46,-76}, -{30,46,-75}, -{30,46,-74}, -{30,46,-73}, -{30,46,-72}, -{30,46,-71}, -{30,46,-70}, -{30,46,-69}, -{30,46,-68}, -{30,46,-67}, -{30,46,-66}, -{30,46,-65}, -{30,46,-64}, -{30,46,-63}, -{30,46,-62}, -{30,46,-61}, -{30,46,-60}, -{30,46,-59}, -{30,46,-58}, -{30,46,-57}, -{30,46,-56}, -{30,46,-55}, -{30,46,-54}, -{30,46,-53}, -{30,46,-52}, -{30,46,-51}, -{30,46,-50}, -{30,46,-49}, -{30,46,-48}, -{30,46,-47}, -{30,46,-46}, -{30,46,-45}, -{30,46,-44}, -{30,46,-43}, -{30,46,-42}, -{30,46,-41}, -{30,46,-40}, -{30,46,-39}, -{30,46,-38}, -{30,46,-37}, -{30,46,-36}, -{30,46,-35}, -{30,46,-34}, -{30,46,-33}, -{30,46,-32}, -{30,46,-31}, -{30,46,-30}, -{30,46,-29}, -{30,46,-28}, -{30,46,-27}, -{30,46,-26}, -{30,46,-25}, -{30,46,-24}, -{30,46,-23}, -{30,46,-22}, -{30,46,-21}, -{30,46,-20}, -{30,46,-19}, -{30,46,-18}, -{30,46,-17}, -{30,46,-16}, -{30,46,-15}, -{30,46,-14}, -{30,46,-13}, -{30,46,-12}, -{30,46,-11}, -{30,46,-10}, -{30,46,-9}, -{30,46,-8}, -{30,46,-7}, -{30,46,-6}, -{30,46,-5}, -{30,46,-4}, -{30,46,-3}, -{30,46,-2}, -{30,46,-1}, -{30,46,0}, -{30,46,1}, -{30,46,2}, -{30,46,3}, -{30,46,4}, -{30,46,5}, -{30,46,6}, -{30,46,7}, -{30,46,8}, -{30,46,9}, -{30,46,10}, -{30,46,11}, -{30,46,12}, -{30,46,13}, -{30,46,14}, -{30,46,15}, -{30,46,16}, -{30,46,17}, -{30,46,18}, -{30,46,19}, -{30,46,20}, -{30,46,21}, -{30,46,22}, -{30,46,23}, -{30,46,24}, -{30,46,25}, -{30,46,26}, -{30,46,27}, -{30,46,28}, -{30,46,29}, -{30,46,30}, -{30,46,31}, -{30,46,32}, -{30,46,33}, -{30,46,34}, -{30,46,35}, -{30,46,36}, -{30,46,37}, -{30,46,38}, -{30,46,39}, -{30,46,40}, -{30,46,41}, -{30,46,42}, -{30,46,43}, -{30,47,-78}, -{30,47,-77}, -{30,47,-76}, -{30,47,-75}, -{30,47,-74}, -{30,47,-73}, -{30,47,-72}, -{30,47,-71}, -{30,47,-70}, -{30,47,-69}, -{30,47,-68}, -{30,47,-67}, -{30,47,-66}, -{30,47,-65}, -{30,47,-64}, -{30,47,-63}, -{30,47,-62}, -{30,47,-61}, -{30,47,-60}, -{30,47,-59}, -{30,47,-58}, -{30,47,-57}, -{30,47,-56}, -{30,47,-55}, -{30,47,-54}, -{30,47,-53}, -{30,47,-52}, -{30,47,-51}, -{30,47,-50}, -{30,47,-49}, -{30,47,-48}, -{30,47,-47}, -{30,47,-46}, -{30,47,-45}, -{30,47,-44}, -{30,47,-43}, -{30,47,-42}, -{30,47,-41}, -{30,47,-40}, -{30,47,-39}, -{30,47,-38}, -{30,47,-37}, -{30,47,-36}, -{30,47,-35}, -{30,47,-34}, -{30,47,-33}, -{30,47,-32}, -{30,47,-31}, -{30,47,-30}, -{30,47,-29}, -{30,47,-28}, -{30,47,-27}, -{30,47,-26}, -{30,47,-25}, -{30,47,-24}, -{30,47,-23}, -{30,47,-22}, -{30,47,-21}, -{30,47,-20}, -{30,47,-19}, -{30,47,-18}, -{30,47,-17}, -{30,47,-16}, -{30,47,-15}, -{30,47,-14}, -{30,47,-13}, -{30,47,-12}, -{30,47,-11}, -{30,47,-10}, -{30,47,-9}, -{30,47,-8}, -{30,47,-7}, -{30,47,-6}, -{30,47,-5}, -{30,47,-4}, -{30,47,-3}, -{30,47,-2}, -{30,47,-1}, -{30,47,0}, -{30,47,1}, -{30,47,2}, -{30,47,3}, -{30,47,4}, -{30,47,5}, -{30,47,6}, -{30,47,7}, -{30,47,8}, -{30,47,9}, -{30,47,10}, -{30,47,11}, -{30,47,12}, -{30,47,13}, -{30,47,14}, -{30,47,15}, -{30,47,16}, -{30,47,17}, -{30,47,18}, -{30,47,19}, -{30,47,20}, -{30,47,21}, -{30,47,22}, -{30,47,23}, -{30,47,24}, -{30,47,25}, -{30,47,26}, -{30,47,27}, -{30,47,28}, -{30,47,29}, -{30,47,30}, -{30,47,31}, -{30,47,32}, -{30,47,33}, -{30,47,34}, -{30,47,35}, -{30,47,36}, -{30,47,37}, -{30,47,38}, -{30,47,39}, -{30,47,40}, -{30,47,41}, -{30,47,42}, -{30,47,43}, -{30,48,-79}, -{30,48,-78}, -{30,48,-77}, -{30,48,-76}, -{30,48,-75}, -{30,48,-74}, -{30,48,-73}, -{30,48,-72}, -{30,48,-71}, -{30,48,-70}, -{30,48,-69}, -{30,48,-68}, -{30,48,-67}, -{30,48,-66}, -{30,48,-65}, -{30,48,-64}, -{30,48,-63}, -{30,48,-62}, -{30,48,-61}, -{30,48,-60}, -{30,48,-59}, -{30,48,-58}, -{30,48,-57}, -{30,48,-56}, -{30,48,-55}, -{30,48,-54}, -{30,48,-53}, -{30,48,-52}, -{30,48,-51}, -{30,48,-50}, -{30,48,-49}, -{30,48,-48}, -{30,48,-47}, -{30,48,-46}, -{30,48,-45}, -{30,48,-44}, -{30,48,-43}, -{30,48,-42}, -{30,48,-41}, -{30,48,-40}, -{30,48,-39}, -{30,48,-38}, -{30,48,-37}, -{30,48,-36}, -{30,48,-35}, -{30,48,-34}, -{30,48,-33}, -{30,48,-32}, -{30,48,-31}, -{30,48,-30}, -{30,48,-29}, -{30,48,-28}, -{30,48,-27}, -{30,48,-26}, -{30,48,-25}, -{30,48,-24}, -{30,48,-23}, -{30,48,-22}, -{30,48,-21}, -{30,48,-20}, -{30,48,-19}, -{30,48,-18}, -{30,48,-17}, -{30,48,-16}, -{30,48,-15}, -{30,48,-14}, -{30,48,-13}, -{30,48,-12}, -{30,48,-11}, -{30,48,-10}, -{30,48,-9}, -{30,48,-8}, -{30,48,-7}, -{30,48,-6}, -{30,48,-5}, -{30,48,-4}, -{30,48,-3}, -{30,48,-2}, -{30,48,-1}, -{30,48,0}, -{30,48,1}, -{30,48,2}, -{30,48,3}, -{30,48,4}, -{30,48,5}, -{30,48,6}, -{30,48,7}, -{30,48,8}, -{30,48,9}, -{30,48,10}, -{30,48,11}, -{30,48,12}, -{30,48,13}, -{30,48,14}, -{30,48,15}, -{30,48,16}, -{30,48,17}, -{30,48,18}, -{30,48,19}, -{30,48,20}, -{30,48,21}, -{30,48,22}, -{30,48,23}, -{30,48,24}, -{30,48,25}, -{30,48,26}, -{30,48,27}, -{30,48,28}, -{30,48,29}, -{30,48,30}, -{30,48,31}, -{30,48,32}, -{30,48,33}, -{30,48,34}, -{30,48,35}, -{30,48,36}, -{30,48,37}, -{30,48,38}, -{30,48,39}, -{30,48,40}, -{30,48,41}, -{30,48,42}, -{30,48,43}, -{30,49,-80}, -{30,49,-79}, -{30,49,-78}, -{30,49,-77}, -{30,49,-76}, -{30,49,-75}, -{30,49,-74}, -{30,49,-73}, -{30,49,-72}, -{30,49,-71}, -{30,49,-70}, -{30,49,-69}, -{30,49,-68}, -{30,49,-67}, -{30,49,-66}, -{30,49,-65}, -{30,49,-64}, -{30,49,-63}, -{30,49,-62}, -{30,49,-61}, -{30,49,-60}, -{30,49,-59}, -{30,49,-58}, -{30,49,-57}, -{30,49,-56}, -{30,49,-55}, -{30,49,-54}, -{30,49,-53}, -{30,49,-52}, -{30,49,-51}, -{30,49,-50}, -{30,49,-49}, -{30,49,-48}, -{30,49,-47}, -{30,49,-46}, -{30,49,-45}, -{30,49,-44}, -{30,49,-43}, -{30,49,-42}, -{30,49,-41}, -{30,49,-40}, -{30,49,-39}, -{30,49,-38}, -{30,49,-37}, -{30,49,-36}, -{30,49,-35}, -{30,49,-34}, -{30,49,-33}, -{30,49,-32}, -{30,49,-31}, -{30,49,-30}, -{30,49,-29}, -{30,49,-28}, -{30,49,-27}, -{30,49,-26}, -{30,49,-25}, -{30,49,-24}, -{30,49,-23}, -{30,49,-22}, -{30,49,-21}, -{30,49,-20}, -{30,49,-19}, -{30,49,-18}, -{30,49,-17}, -{30,49,-16}, -{30,49,-15}, -{30,49,-14}, -{30,49,-13}, -{30,49,-12}, -{30,49,-11}, -{30,49,-10}, -{30,49,-9}, -{30,49,-8}, -{30,49,-7}, -{30,49,-6}, -{30,49,-5}, -{30,49,-4}, -{30,49,-3}, -{30,49,-2}, -{30,49,-1}, -{30,49,0}, -{30,49,1}, -{30,49,2}, -{30,49,3}, -{30,49,4}, -{30,49,5}, -{30,49,6}, -{30,49,7}, -{30,49,8}, -{30,49,9}, -{30,49,10}, -{30,49,11}, -{30,49,12}, -{30,49,13}, -{30,49,14}, -{30,49,15}, -{30,49,16}, -{30,49,17}, -{30,49,18}, -{30,49,19}, -{30,49,20}, -{30,49,21}, -{30,49,22}, -{30,49,23}, -{30,49,24}, -{30,49,25}, -{30,49,26}, -{30,49,27}, -{30,49,28}, -{30,49,29}, -{30,49,30}, -{30,49,31}, -{30,49,32}, -{30,49,33}, -{30,49,34}, -{30,49,35}, -{30,49,36}, -{30,49,37}, -{30,49,38}, -{30,49,39}, -{30,49,40}, -{30,49,41}, -{30,49,42}, -{30,49,43}, -{30,50,-81}, -{30,50,-80}, -{30,50,-79}, -{30,50,-78}, -{30,50,-77}, -{30,50,-76}, -{30,50,-75}, -{30,50,-74}, -{30,50,-73}, -{30,50,-72}, -{30,50,-71}, -{30,50,-70}, -{30,50,-69}, -{30,50,-68}, -{30,50,-67}, -{30,50,-66}, -{30,50,-65}, -{30,50,-64}, -{30,50,-63}, -{30,50,-62}, -{30,50,-61}, -{30,50,-60}, -{30,50,-59}, -{30,50,-58}, -{30,50,-57}, -{30,50,-56}, -{30,50,-55}, -{30,50,-54}, -{30,50,-53}, -{30,50,-52}, -{30,50,-51}, -{30,50,-50}, -{30,50,-49}, -{30,50,-48}, -{30,50,-47}, -{30,50,-46}, -{30,50,-45}, -{30,50,-44}, -{30,50,-43}, -{30,50,-42}, -{30,50,-41}, -{30,50,-40}, -{30,50,-39}, -{30,50,-38}, -{30,50,-37}, -{30,50,-36}, -{30,50,-35}, -{30,50,-34}, -{30,50,-33}, -{30,50,-32}, -{30,50,-31}, -{30,50,-30}, -{30,50,-29}, -{30,50,-28}, -{30,50,-27}, -{30,50,-26}, -{30,50,-25}, -{30,50,-24}, -{30,50,-23}, -{30,50,-22}, -{30,50,-21}, -{30,50,-20}, -{30,50,-19}, -{30,50,-18}, -{30,50,-17}, -{30,50,-16}, -{30,50,-15}, -{30,50,-14}, -{30,50,-13}, -{30,50,-12}, -{30,50,-11}, -{30,50,-10}, -{30,50,-9}, -{30,50,-8}, -{30,50,-7}, -{30,50,-6}, -{30,50,-5}, -{30,50,-4}, -{30,50,-3}, -{30,50,-2}, -{30,50,-1}, -{30,50,0}, -{30,50,1}, -{30,50,2}, -{30,50,3}, -{30,50,4}, -{30,50,5}, -{30,50,6}, -{30,50,7}, -{30,50,8}, -{30,50,9}, -{30,50,10}, -{30,50,11}, -{30,50,12}, -{30,50,13}, -{30,50,14}, -{30,50,15}, -{30,50,16}, -{30,50,17}, -{30,50,18}, -{30,50,19}, -{30,50,20}, -{30,50,21}, -{30,50,22}, -{30,50,23}, -{30,50,24}, -{30,50,25}, -{30,50,26}, -{30,50,27}, -{30,50,28}, -{30,50,29}, -{30,50,30}, -{30,50,31}, -{30,50,32}, -{30,50,33}, -{30,50,34}, -{30,50,35}, -{30,50,36}, -{30,50,37}, -{30,50,38}, -{30,50,39}, -{30,50,40}, -{30,50,41}, -{30,50,42}, -{30,50,43}, -{30,51,-82}, -{30,51,-81}, -{30,51,-80}, -{30,51,-79}, -{30,51,-78}, -{30,51,-77}, -{30,51,-76}, -{30,51,-75}, -{30,51,-74}, -{30,51,-73}, -{30,51,-72}, -{30,51,-71}, -{30,51,-70}, -{30,51,-69}, -{30,51,-68}, -{30,51,-67}, -{30,51,-66}, -{30,51,-65}, -{30,51,-64}, -{30,51,-63}, -{30,51,-62}, -{30,51,-61}, -{30,51,-60}, -{30,51,-59}, -{30,51,-58}, -{30,51,-57}, -{30,51,-56}, -{30,51,-55}, -{30,51,-54}, -{30,51,-53}, -{30,51,-52}, -{30,51,-51}, -{30,51,-50}, -{30,51,-49}, -{30,51,-48}, -{30,51,-47}, -{30,51,-46}, -{30,51,-45}, -{30,51,-44}, -{30,51,-43}, -{30,51,-42}, -{30,51,-41}, -{30,51,-40}, -{30,51,-39}, -{30,51,-38}, -{30,51,-37}, -{30,51,-36}, -{30,51,-35}, -{30,51,-34}, -{30,51,-33}, -{30,51,-32}, -{30,51,-31}, -{30,51,-30}, -{30,51,-29}, -{30,51,-28}, -{30,51,-27}, -{30,51,-26}, -{30,51,-25}, -{30,51,-24}, -{30,51,-23}, -{30,51,-22}, -{30,51,-21}, -{30,51,-20}, -{30,51,-19}, -{30,51,-18}, -{30,51,-17}, -{30,51,-16}, -{30,51,-15}, -{30,51,-14}, -{30,51,-13}, -{30,51,-12}, -{30,51,-11}, -{30,51,-10}, -{30,51,-9}, -{30,51,-8}, -{30,51,-7}, -{30,51,-6}, -{30,51,-5}, -{30,51,-4}, -{30,51,-3}, -{30,51,-2}, -{30,51,-1}, -{30,51,0}, -{30,51,1}, -{30,51,2}, -{30,51,3}, -{30,51,4}, -{30,51,5}, -{30,51,6}, -{30,51,7}, -{30,51,8}, -{30,51,9}, -{30,51,10}, -{30,51,11}, -{30,51,12}, -{30,51,13}, -{30,51,14}, -{30,51,15}, -{30,51,16}, -{30,51,17}, -{30,51,18}, -{30,51,19}, -{30,51,20}, -{30,51,21}, -{30,51,22}, -{30,51,23}, -{30,51,24}, -{30,51,25}, -{30,51,26}, -{30,51,27}, -{30,51,28}, -{30,51,29}, -{30,51,30}, -{30,51,31}, -{30,51,32}, -{30,51,33}, -{30,51,34}, -{30,51,35}, -{30,51,36}, -{30,51,37}, -{30,51,38}, -{30,51,39}, -{30,51,40}, -{30,51,41}, -{30,51,42}, -{30,51,43}, -{30,52,-83}, -{30,52,-82}, -{30,52,-81}, -{30,52,-80}, -{30,52,-79}, -{30,52,-78}, -{30,52,-77}, -{30,52,-76}, -{30,52,-75}, -{30,52,-74}, -{30,52,-73}, -{30,52,-72}, -{30,52,-71}, -{30,52,-70}, -{30,52,-69}, -{30,52,-68}, -{30,52,-67}, -{30,52,-66}, -{30,52,-65}, -{30,52,-64}, -{30,52,-63}, -{30,52,-62}, -{30,52,-61}, -{30,52,-60}, -{30,52,-59}, -{30,52,-58}, -{30,52,-57}, -{30,52,-56}, -{30,52,-55}, -{30,52,-54}, -{30,52,-53}, -{30,52,-52}, -{30,52,-51}, -{30,52,-50}, -{30,52,-49}, -{30,52,-48}, -{30,52,-47}, -{30,52,-46}, -{30,52,-45}, -{30,52,-44}, -{30,52,-43}, -{30,52,-42}, -{30,52,-41}, -{30,52,-40}, -{30,52,-39}, -{30,52,-38}, -{30,52,-37}, -{30,52,-36}, -{30,52,-35}, -{30,52,-34}, -{30,52,-33}, -{30,52,-32}, -{30,52,-31}, -{30,52,-30}, -{30,52,-29}, -{30,52,-28}, -{30,52,-27}, -{30,52,-26}, -{30,52,-25}, -{30,52,-24}, -{30,52,-23}, -{30,52,-22}, -{30,52,-21}, -{30,52,-20}, -{30,52,-19}, -{30,52,-18}, -{30,52,-17}, -{30,52,-16}, -{30,52,-15}, -{30,52,-14}, -{30,52,-13}, -{30,52,-12}, -{30,52,-11}, -{30,52,-10}, -{30,52,-9}, -{30,52,-8}, -{30,52,-7}, -{30,52,-6}, -{30,52,-5}, -{30,52,-4}, -{30,52,-3}, -{30,52,-2}, -{30,52,-1}, -{30,52,0}, -{30,52,1}, -{30,52,2}, -{30,52,3}, -{30,52,4}, -{30,52,5}, -{30,52,6}, -{30,52,7}, -{30,52,8}, -{30,52,9}, -{30,52,10}, -{30,52,11}, -{30,52,12}, -{30,52,13}, -{30,52,14}, -{30,52,15}, -{30,52,16}, -{30,52,17}, -{30,52,18}, -{30,52,19}, -{30,52,20}, -{30,52,21}, -{30,52,22}, -{30,52,23}, -{30,52,24}, -{30,52,25}, -{30,52,26}, -{30,52,27}, -{30,52,28}, -{30,52,29}, -{30,52,30}, -{30,52,31}, -{30,52,32}, -{30,52,33}, -{30,52,34}, -{30,52,35}, -{30,52,36}, -{30,52,37}, -{30,52,38}, -{30,52,39}, -{30,52,40}, -{30,52,41}, -{30,52,42}, -{30,52,43}, -{30,53,-84}, -{30,53,-83}, -{30,53,-82}, -{30,53,-81}, -{30,53,-80}, -{30,53,-79}, -{30,53,-78}, -{30,53,-77}, -{30,53,-76}, -{30,53,-75}, -{30,53,-74}, -{30,53,-73}, -{30,53,-72}, -{30,53,-71}, -{30,53,-70}, -{30,53,-69}, -{30,53,-68}, -{30,53,-67}, -{30,53,-66}, -{30,53,-65}, -{30,53,-64}, -{30,53,-63}, -{30,53,-62}, -{30,53,-61}, -{30,53,-60}, -{30,53,-59}, -{30,53,-58}, -{30,53,-57}, -{30,53,-56}, -{30,53,-55}, -{30,53,-54}, -{30,53,-53}, -{30,53,-52}, -{30,53,-51}, -{30,53,-50}, -{30,53,-49}, -{30,53,-48}, -{30,53,-47}, -{30,53,-46}, -{30,53,-45}, -{30,53,-44}, -{30,53,-43}, -{30,53,-42}, -{30,53,-41}, -{30,53,-40}, -{30,53,-39}, -{30,53,-38}, -{30,53,-37}, -{30,53,-36}, -{30,53,-35}, -{30,53,-34}, -{30,53,-33}, -{30,53,-32}, -{30,53,-31}, -{30,53,-30}, -{30,53,-29}, -{30,53,-28}, -{30,53,-27}, -{30,53,-26}, -{30,53,-25}, -{30,53,-24}, -{30,53,-23}, -{30,53,-22}, -{30,53,-21}, -{30,53,-20}, -{30,53,-19}, -{30,53,-18}, -{30,53,-17}, -{30,53,-16}, -{30,53,-15}, -{30,53,-14}, -{30,53,-13}, -{30,53,-12}, -{30,53,-11}, -{30,53,-10}, -{30,53,-9}, -{30,53,-8}, -{30,53,-7}, -{30,53,-6}, -{30,53,-5}, -{30,53,-4}, -{30,53,-3}, -{30,53,-2}, -{30,53,-1}, -{30,53,0}, -{30,53,1}, -{30,53,2}, -{30,53,3}, -{30,53,4}, -{30,53,5}, -{30,53,6}, -{30,53,7}, -{30,53,8}, -{30,53,9}, -{30,53,10}, -{30,53,11}, -{30,53,12}, -{30,53,13}, -{30,53,14}, -{30,53,15}, -{30,53,16}, -{30,53,17}, -{30,53,18}, -{30,53,19}, -{30,53,20}, -{30,53,21}, -{30,53,22}, -{30,53,23}, -{30,53,24}, -{30,53,25}, -{30,53,26}, -{30,53,27}, -{30,53,28}, -{30,53,29}, -{30,53,30}, -{30,53,31}, -{30,53,32}, -{30,53,33}, -{30,53,34}, -{30,53,35}, -{30,53,36}, -{30,53,37}, -{30,53,38}, -{30,53,39}, -{30,53,40}, -{30,53,41}, -{30,53,42}, -{30,53,43}, -{30,54,-84}, -{30,54,-83}, -{30,54,-82}, -{30,54,-81}, -{30,54,-80}, -{30,54,-79}, -{30,54,-78}, -{30,54,-77}, -{30,54,-76}, -{30,54,-75}, -{30,54,-74}, -{30,54,-73}, -{30,54,-72}, -{30,54,-71}, -{30,54,-70}, -{30,54,-69}, -{30,54,-68}, -{30,54,-67}, -{30,54,-66}, -{30,54,-65}, -{30,54,-64}, -{30,54,-63}, -{30,54,-62}, -{30,54,-61}, -{30,54,-60}, -{30,54,-59}, -{30,54,-58}, -{30,54,-57}, -{30,54,-56}, -{30,54,-55}, -{30,54,-54}, -{30,54,-53}, -{30,54,-52}, -{30,54,-51}, -{30,54,-50}, -{30,54,-49}, -{30,54,-48}, -{30,54,-47}, -{30,54,-46}, -{30,54,-45}, -{30,54,-44}, -{30,54,-43}, -{30,54,-42}, -{30,54,-41}, -{30,54,-40}, -{30,54,-39}, -{30,54,-38}, -{30,54,-37}, -{30,54,-36}, -{30,54,-35}, -{30,54,-34}, -{30,54,-33}, -{30,54,-32}, -{30,54,-31}, -{30,54,-30}, -{30,54,-29}, -{30,54,-28}, -{30,54,-27}, -{30,54,-26}, -{30,54,-25}, -{30,54,-24}, -{30,54,-23}, -{30,54,-22}, -{30,54,-21}, -{30,54,-20}, -{30,54,-19}, -{30,54,-18}, -{30,54,-17}, -{30,54,-16}, -{30,54,-15}, -{30,54,-14}, -{30,54,-13}, -{30,54,-12}, -{30,54,-11}, -{30,54,-10}, -{30,54,-9}, -{30,54,-8}, -{30,54,-7}, -{30,54,-6}, -{30,54,-5}, -{30,54,-4}, -{30,54,-3}, -{30,54,-2}, -{30,54,-1}, -{30,54,0}, -{30,54,1}, -{30,54,2}, -{30,54,3}, -{30,54,4}, -{30,54,5}, -{30,54,6}, -{30,54,7}, -{30,54,8}, -{30,54,9}, -{30,54,10}, -{30,54,11}, -{30,54,12}, -{30,54,13}, -{30,54,14}, -{30,54,15}, -{30,54,16}, -{30,54,17}, -{30,54,18}, -{30,54,19}, -{30,54,20}, -{30,54,21}, -{30,55,-85}, -{30,55,-84}, -{30,55,-83}, -{30,55,-82}, -{30,55,-81}, -{30,55,-80}, -{30,55,-79}, -{30,55,-78}, -{30,55,-77}, -{30,55,-76}, -{30,55,-75}, -{30,55,-74}, -{30,55,-73}, -{30,55,-72}, -{30,55,-71}, -{30,55,-70}, -{30,55,-69}, -{30,55,-68}, -{30,55,-67}, -{30,55,-66}, -{30,55,-65}, -{30,55,-64}, -{30,55,-63}, -{30,55,-62}, -{30,55,-61}, -{30,55,-60}, -{30,55,-59}, -{30,55,-58}, -{30,55,-57}, -{30,55,-56}, -{30,55,-55}, -{30,55,-54}, -{30,55,-53}, -{30,55,-52}, -{30,55,-51}, -{30,55,-50}, -{30,55,-49}, -{30,55,-48}, -{30,55,-47}, -{30,55,-46}, -{30,55,-45}, -{30,55,-44}, -{30,55,-43}, -{30,55,-42}, -{30,55,-41}, -{30,55,-40}, -{30,55,-39}, -{30,55,-38}, -{30,55,-37}, -{30,55,-36}, -{30,55,-35}, -{30,55,-34}, -{30,55,-33}, -{30,55,-32}, -{30,55,-31}, -{30,55,-30}, -{30,55,-29}, -{30,55,-28}, -{30,55,-27}, -{30,55,-26}, -{30,55,-25}, -{30,55,-24}, -{30,55,-23}, -{30,55,-22}, -{30,55,-21}, -{30,55,-20}, -{30,55,-19}, -{30,55,-18}, -{30,55,-17}, -{30,55,-16}, -{30,55,-15}, -{30,55,-14}, -{30,55,-13}, -{30,55,-12}, -{30,55,-11}, -{30,55,-10}, -{30,55,-9}, -{30,55,-8}, -{30,55,-7}, -{30,55,-6}, -{30,55,-5}, -{30,55,-4}, -{30,55,-3}, -{30,55,-2}, -{30,55,-1}, -{30,55,0}, -{30,55,1}, -{30,55,2}, -{30,56,-86}, -{30,56,-85}, -{30,56,-84}, -{30,56,-83}, -{30,56,-82}, -{30,56,-81}, -{30,56,-80}, -{30,56,-79}, -{30,56,-78}, -{30,56,-77}, -{30,56,-76}, -{30,56,-75}, -{30,56,-74}, -{30,56,-73}, -{30,56,-72}, -{30,56,-71}, -{30,56,-70}, -{30,56,-69}, -{30,56,-68}, -{30,56,-67}, -{30,56,-66}, -{30,56,-65}, -{30,56,-64}, -{30,56,-63}, -{30,56,-62}, -{30,56,-61}, -{30,56,-60}, -{30,56,-59}, -{30,56,-58}, -{30,56,-57}, -{30,56,-56}, -{30,56,-55}, -{30,56,-54}, -{30,56,-53}, -{30,56,-52}, -{30,56,-51}, -{30,56,-50}, -{30,56,-49}, -{30,56,-48}, -{30,56,-47}, -{30,56,-46}, -{30,56,-45}, -{30,56,-44}, -{30,56,-43}, -{30,56,-42}, -{30,56,-41}, -{30,56,-40}, -{30,56,-39}, -{30,56,-38}, -{30,56,-37}, -{30,56,-36}, -{30,56,-35}, -{30,56,-34}, -{30,56,-33}, -{30,56,-32}, -{30,56,-31}, -{30,56,-30}, -{30,56,-29}, -{30,56,-28}, -{30,56,-27}, -{30,56,-26}, -{30,56,-25}, -{30,56,-24}, -{30,56,-23}, -{30,56,-22}, -{30,56,-21}, -{30,56,-20}, -{30,56,-19}, -{30,56,-18}, -{30,56,-17}, -{30,56,-16}, -{30,56,-15}, -{30,56,-14}, -{30,56,-13}, -{30,56,-12}, -{30,56,-11}, -{30,56,-10}, -{30,57,-87}, -{30,57,-86}, -{30,57,-85}, -{30,57,-84}, -{30,57,-83}, -{30,57,-82}, -{30,57,-81}, -{30,57,-80}, -{30,57,-79}, -{30,57,-78}, -{30,57,-77}, -{30,57,-76}, -{30,57,-75}, -{30,57,-74}, -{30,57,-73}, -{30,57,-72}, -{30,57,-71}, -{30,57,-70}, -{30,57,-69}, -{30,57,-68}, -{30,57,-67}, -{30,57,-66}, -{30,57,-65}, -{30,57,-64}, -{30,57,-63}, -{30,57,-62}, -{30,57,-61}, -{30,57,-60}, -{30,57,-59}, -{30,57,-58}, -{30,57,-57}, -{30,57,-56}, -{30,57,-55}, -{30,57,-54}, -{30,57,-53}, -{30,57,-52}, -{30,57,-51}, -{30,57,-50}, -{30,57,-49}, -{30,57,-48}, -{30,57,-47}, -{30,57,-46}, -{30,57,-45}, -{30,57,-44}, -{30,57,-43}, -{30,57,-42}, -{30,57,-41}, -{30,57,-40}, -{30,57,-39}, -{30,57,-38}, -{30,57,-37}, -{30,57,-36}, -{30,57,-35}, -{30,57,-34}, -{30,57,-33}, -{30,57,-32}, -{30,57,-31}, -{30,57,-30}, -{30,57,-29}, -{30,57,-28}, -{30,57,-27}, -{30,57,-26}, -{30,57,-25}, -{30,57,-24}, -{30,57,-23}, -{30,57,-22}, -{30,57,-21}, -{30,57,-20}, -{30,58,-88}, -{30,58,-87}, -{30,58,-86}, -{30,58,-85}, -{30,58,-84}, -{30,58,-83}, -{30,58,-82}, -{30,58,-81}, -{30,58,-80}, -{30,58,-79}, -{30,58,-78}, -{30,58,-77}, -{30,58,-76}, -{30,58,-75}, -{30,58,-74}, -{30,58,-73}, -{30,58,-72}, -{30,58,-71}, -{30,58,-70}, -{30,58,-69}, -{30,58,-68}, -{30,58,-67}, -{30,58,-66}, -{30,58,-65}, -{30,58,-64}, -{30,58,-63}, -{30,58,-62}, -{30,58,-61}, -{30,58,-60}, -{30,58,-59}, -{30,58,-58}, -{30,58,-57}, -{30,58,-56}, -{30,58,-55}, -{30,58,-54}, -{30,58,-53}, -{30,58,-52}, -{30,58,-51}, -{30,58,-50}, -{30,58,-49}, -{30,58,-48}, -{30,58,-47}, -{30,58,-46}, -{30,58,-45}, -{30,58,-44}, -{30,58,-43}, -{30,58,-42}, -{30,58,-41}, -{30,58,-40}, -{30,58,-39}, -{30,58,-38}, -{30,58,-37}, -{30,58,-36}, -{30,58,-35}, -{30,58,-34}, -{30,58,-33}, -{30,58,-32}, -{30,58,-31}, -{30,58,-30}, -{30,58,-29}, -{30,58,-28}, -{30,59,-89}, -{30,59,-88}, -{30,59,-87}, -{30,59,-86}, -{30,59,-85}, -{30,59,-84}, -{30,59,-83}, -{30,59,-82}, -{30,59,-81}, -{30,59,-80}, -{30,59,-79}, -{30,59,-78}, -{30,59,-77}, -{30,59,-76}, -{30,59,-75}, -{30,59,-74}, -{30,59,-73}, -{30,59,-72}, -{30,59,-71}, -{30,59,-70}, -{30,59,-69}, -{30,59,-68}, -{30,59,-67}, -{30,59,-66}, -{30,59,-65}, -{30,59,-64}, -{30,59,-63}, -{30,59,-62}, -{30,59,-61}, -{30,59,-60}, -{30,59,-59}, -{30,59,-58}, -{30,59,-57}, -{30,59,-56}, -{30,59,-55}, -{30,59,-54}, -{30,59,-53}, -{30,59,-52}, -{30,59,-51}, -{30,59,-50}, -{30,59,-49}, -{30,59,-48}, -{30,59,-47}, -{30,59,-46}, -{30,59,-45}, -{30,59,-44}, -{30,59,-43}, -{30,59,-42}, -{30,59,-41}, -{30,59,-40}, -{30,59,-39}, -{30,59,-38}, -{30,59,-37}, -{30,59,-36}, -{30,59,-35}, -{30,60,-90}, -{30,60,-89}, -{30,60,-88}, -{30,60,-87}, -{30,60,-86}, -{30,60,-85}, -{30,60,-84}, -{30,60,-83}, -{30,60,-82}, -{30,60,-81}, -{30,60,-80}, -{30,60,-79}, -{30,60,-78}, -{30,60,-77}, -{30,60,-76}, -{30,60,-75}, -{30,60,-74}, -{30,60,-73}, -{30,60,-72}, -{30,60,-71}, -{30,60,-70}, -{30,60,-69}, -{30,60,-68}, -{30,60,-67}, -{30,60,-66}, -{30,60,-65}, -{30,60,-64}, -{30,60,-63}, -{30,60,-62}, -{30,60,-61}, -{30,60,-60}, -{30,60,-59}, -{30,60,-58}, -{30,60,-57}, -{30,60,-56}, -{30,60,-55}, -{30,60,-54}, -{30,60,-53}, -{30,60,-52}, -{30,60,-51}, -{30,60,-50}, -{30,60,-49}, -{30,60,-48}, -{30,60,-47}, -{30,60,-46}, -{30,60,-45}, -{30,60,-44}, -{30,60,-43}, -{30,60,-42}, -{30,60,-41}, -{30,61,-90}, -{30,61,-89}, -{30,61,-88}, -{30,61,-87}, -{30,61,-86}, -{30,61,-85}, -{30,61,-84}, -{30,61,-83}, -{30,61,-82}, -{30,61,-81}, -{30,61,-80}, -{30,61,-79}, -{30,61,-78}, -{30,61,-77}, -{30,61,-76}, -{30,61,-75}, -{30,61,-74}, -{30,61,-73}, -{30,61,-72}, -{30,61,-71}, -{30,61,-70}, -{30,61,-69}, -{30,61,-68}, -{30,61,-67}, -{30,61,-66}, -{30,61,-65}, -{30,61,-64}, -{30,61,-63}, -{30,61,-62}, -{30,61,-61}, -{30,61,-60}, -{30,61,-59}, -{30,61,-58}, -{30,61,-57}, -{30,61,-56}, -{30,61,-55}, -{30,61,-54}, -{30,61,-53}, -{30,61,-52}, -{30,61,-51}, -{30,61,-50}, -{30,61,-49}, -{30,61,-48}, -{30,61,-47}, -{30,62,-91}, -{30,62,-90}, -{30,62,-89}, -{30,62,-88}, -{30,62,-87}, -{30,62,-86}, -{30,62,-85}, -{30,62,-84}, -{30,62,-83}, -{30,62,-82}, -{30,62,-81}, -{30,62,-80}, -{30,62,-79}, -{30,62,-78}, -{30,62,-77}, -{30,62,-76}, -{30,62,-75}, -{30,62,-74}, -{30,62,-73}, -{30,62,-72}, -{30,62,-71}, -{30,62,-70}, -{30,62,-69}, -{30,62,-68}, -{30,62,-67}, -{30,62,-66}, -{30,62,-65}, -{30,62,-64}, -{30,62,-63}, -{30,62,-62}, -{30,62,-61}, -{30,62,-60}, -{30,62,-59}, -{30,62,-58}, -{30,62,-57}, -{30,62,-56}, -{30,62,-55}, -{30,62,-54}, -{30,62,-53}, -{30,62,-52}, -{30,63,-92}, -{30,63,-91}, -{30,63,-90}, -{30,63,-89}, -{30,63,-88}, -{30,63,-87}, -{30,63,-86}, -{30,63,-85}, -{30,63,-84}, -{30,63,-83}, -{30,63,-82}, -{30,63,-81}, -{30,63,-80}, -{30,63,-79}, -{30,63,-78}, -{30,63,-77}, -{30,63,-76}, -{30,63,-75}, -{30,63,-74}, -{30,63,-73}, -{30,63,-72}, -{30,63,-71}, -{30,63,-70}, -{30,63,-69}, -{30,63,-68}, -{30,63,-67}, -{30,63,-66}, -{30,63,-65}, -{30,63,-64}, -{30,63,-63}, -{30,63,-62}, -{30,63,-61}, -{30,63,-60}, -{30,63,-59}, -{30,63,-58}, -{30,63,-57}, -{30,64,-93}, -{30,64,-92}, -{30,64,-91}, -{30,64,-90}, -{30,64,-89}, -{30,64,-88}, -{30,64,-87}, -{30,64,-86}, -{30,64,-85}, -{30,64,-84}, -{30,64,-83}, -{30,64,-82}, -{30,64,-81}, -{30,64,-80}, -{30,64,-79}, -{30,64,-78}, -{30,64,-77}, -{30,64,-76}, -{30,64,-75}, -{30,64,-74}, -{30,64,-73}, -{30,64,-72}, -{30,64,-71}, -{30,64,-70}, -{30,64,-69}, -{30,64,-68}, -{30,64,-67}, -{30,64,-66}, -{30,64,-65}, -{30,64,-64}, -{30,64,-63}, -{30,64,-62}, -{30,65,-94}, -{30,65,-93}, -{30,65,-92}, -{30,65,-91}, -{30,65,-90}, -{30,65,-89}, -{30,65,-88}, -{30,65,-87}, -{30,65,-86}, -{30,65,-85}, -{30,65,-84}, -{30,65,-83}, -{30,65,-82}, -{30,65,-81}, -{30,65,-80}, -{30,65,-79}, -{30,65,-78}, -{30,65,-77}, -{30,65,-76}, -{30,65,-75}, -{30,65,-74}, -{30,65,-73}, -{30,65,-72}, -{30,65,-71}, -{30,65,-70}, -{30,65,-69}, -{30,65,-68}, -{30,65,-67}, -{30,65,-66}, -{30,66,-95}, -{30,66,-94}, -{30,66,-93}, -{30,66,-92}, -{30,66,-91}, -{30,66,-90}, -{30,66,-89}, -{30,66,-88}, -{30,66,-87}, -{30,66,-86}, -{30,66,-85}, -{30,66,-84}, -{30,66,-83}, -{30,66,-82}, -{30,66,-81}, -{30,66,-80}, -{30,66,-79}, -{30,66,-78}, -{30,66,-77}, -{30,66,-76}, -{30,66,-75}, -{30,66,-74}, -{30,66,-73}, -{30,66,-72}, -{30,66,-71}, -{30,67,-95}, -{30,67,-94}, -{30,67,-93}, -{30,67,-92}, -{30,67,-91}, -{30,67,-90}, -{30,67,-89}, -{30,67,-88}, -{30,67,-87}, -{30,67,-86}, -{30,67,-85}, -{30,67,-84}, -{30,67,-83}, -{30,67,-82}, -{30,67,-81}, -{30,67,-80}, -{30,67,-79}, -{30,67,-78}, -{30,67,-77}, -{30,67,-76}, -{30,67,-75}, -{30,68,-96}, -{30,68,-95}, -{30,68,-94}, -{30,68,-93}, -{30,68,-92}, -{30,68,-91}, -{30,68,-90}, -{30,68,-89}, -{30,68,-88}, -{30,68,-87}, -{30,68,-86}, -{30,68,-85}, -{30,68,-84}, -{30,68,-83}, -{30,68,-82}, -{30,68,-81}, -{30,68,-80}, -{30,68,-79}, -{30,68,-78}, -{30,69,-97}, -{30,69,-96}, -{30,69,-95}, -{30,69,-94}, -{30,69,-93}, -{30,69,-92}, -{30,69,-91}, -{30,69,-90}, -{30,69,-89}, -{30,69,-88}, -{30,69,-87}, -{30,69,-86}, -{30,69,-85}, -{30,69,-84}, -{30,69,-83}, -{30,69,-82}, -{30,70,-98}, -{30,70,-97}, -{30,70,-96}, -{30,70,-95}, -{30,70,-94}, -{30,70,-93}, -{30,70,-92}, -{30,70,-91}, -{30,70,-90}, -{30,70,-89}, -{30,70,-88}, -{30,70,-87}, -{30,70,-86}, -{30,71,-99}, -{30,71,-98}, -{30,71,-97}, -{30,71,-96}, -{30,71,-95}, -{30,71,-94}, -{30,71,-93}, -{30,71,-92}, -{30,71,-91}, -{30,71,-90}, -{30,71,-89}, -{30,72,-100}, -{30,72,-99}, -{30,72,-98}, -{30,72,-97}, -{30,72,-96}, -{30,72,-95}, -{30,72,-94}, -{30,72,-93}, -{30,72,-92}, -{30,73,-100}, -{30,73,-99}, -{30,73,-98}, -{30,73,-97}, -{30,73,-96}, -{30,73,-95}, -{30,74,-101}, -{30,74,-100}, -{30,74,-99}, -{30,75,-102}, -{31,-39,37}, -{31,-38,33}, -{31,-38,34}, -{31,-38,35}, -{31,-38,36}, -{31,-38,37}, -{31,-37,29}, -{31,-37,30}, -{31,-37,31}, -{31,-37,32}, -{31,-37,33}, -{31,-37,34}, -{31,-37,35}, -{31,-37,36}, -{31,-37,37}, -{31,-36,25}, -{31,-36,26}, -{31,-36,27}, -{31,-36,28}, -{31,-36,29}, -{31,-36,30}, -{31,-36,31}, -{31,-36,32}, -{31,-36,33}, -{31,-36,34}, -{31,-36,35}, -{31,-36,36}, -{31,-36,37}, -{31,-35,22}, -{31,-35,23}, -{31,-35,24}, -{31,-35,25}, -{31,-35,26}, -{31,-35,27}, -{31,-35,28}, -{31,-35,29}, -{31,-35,30}, -{31,-35,31}, -{31,-35,32}, -{31,-35,33}, -{31,-35,34}, -{31,-35,35}, -{31,-35,36}, -{31,-35,37}, -{31,-35,38}, -{31,-34,20}, -{31,-34,21}, -{31,-34,22}, -{31,-34,23}, -{31,-34,24}, -{31,-34,25}, -{31,-34,26}, -{31,-34,27}, -{31,-34,28}, -{31,-34,29}, -{31,-34,30}, -{31,-34,31}, -{31,-34,32}, -{31,-34,33}, -{31,-34,34}, -{31,-34,35}, -{31,-34,36}, -{31,-34,37}, -{31,-34,38}, -{31,-33,17}, -{31,-33,18}, -{31,-33,19}, -{31,-33,20}, -{31,-33,21}, -{31,-33,22}, -{31,-33,23}, -{31,-33,24}, -{31,-33,25}, -{31,-33,26}, -{31,-33,27}, -{31,-33,28}, -{31,-33,29}, -{31,-33,30}, -{31,-33,31}, -{31,-33,32}, -{31,-33,33}, -{31,-33,34}, -{31,-33,35}, -{31,-33,36}, -{31,-33,37}, -{31,-33,38}, -{31,-32,14}, -{31,-32,15}, -{31,-32,16}, -{31,-32,17}, -{31,-32,18}, -{31,-32,19}, -{31,-32,20}, -{31,-32,21}, -{31,-32,22}, -{31,-32,23}, -{31,-32,24}, -{31,-32,25}, -{31,-32,26}, -{31,-32,27}, -{31,-32,28}, -{31,-32,29}, -{31,-32,30}, -{31,-32,31}, -{31,-32,32}, -{31,-32,33}, -{31,-32,34}, -{31,-32,35}, -{31,-32,36}, -{31,-32,37}, -{31,-32,38}, -{31,-31,12}, -{31,-31,13}, -{31,-31,14}, -{31,-31,15}, -{31,-31,16}, -{31,-31,17}, -{31,-31,18}, -{31,-31,19}, -{31,-31,20}, -{31,-31,21}, -{31,-31,22}, -{31,-31,23}, -{31,-31,24}, -{31,-31,25}, -{31,-31,26}, -{31,-31,27}, -{31,-31,28}, -{31,-31,29}, -{31,-31,30}, -{31,-31,31}, -{31,-31,32}, -{31,-31,33}, -{31,-31,34}, -{31,-31,35}, -{31,-31,36}, -{31,-31,37}, -{31,-31,38}, -{31,-30,10}, -{31,-30,11}, -{31,-30,12}, -{31,-30,13}, -{31,-30,14}, -{31,-30,15}, -{31,-30,16}, -{31,-30,17}, -{31,-30,18}, -{31,-30,19}, -{31,-30,20}, -{31,-30,21}, -{31,-30,22}, -{31,-30,23}, -{31,-30,24}, -{31,-30,25}, -{31,-30,26}, -{31,-30,27}, -{31,-30,28}, -{31,-30,29}, -{31,-30,30}, -{31,-30,31}, -{31,-30,32}, -{31,-30,33}, -{31,-30,34}, -{31,-30,35}, -{31,-30,36}, -{31,-30,37}, -{31,-30,38}, -{31,-29,8}, -{31,-29,9}, -{31,-29,10}, -{31,-29,11}, -{31,-29,12}, -{31,-29,13}, -{31,-29,14}, -{31,-29,15}, -{31,-29,16}, -{31,-29,17}, -{31,-29,18}, -{31,-29,19}, -{31,-29,20}, -{31,-29,21}, -{31,-29,22}, -{31,-29,23}, -{31,-29,24}, -{31,-29,25}, -{31,-29,26}, -{31,-29,27}, -{31,-29,28}, -{31,-29,29}, -{31,-29,30}, -{31,-29,31}, -{31,-29,32}, -{31,-29,33}, -{31,-29,34}, -{31,-29,35}, -{31,-29,36}, -{31,-29,37}, -{31,-29,38}, -{31,-28,6}, -{31,-28,7}, -{31,-28,8}, -{31,-28,9}, -{31,-28,10}, -{31,-28,11}, -{31,-28,12}, -{31,-28,13}, -{31,-28,14}, -{31,-28,15}, -{31,-28,16}, -{31,-28,17}, -{31,-28,18}, -{31,-28,19}, -{31,-28,20}, -{31,-28,21}, -{31,-28,22}, -{31,-28,23}, -{31,-28,24}, -{31,-28,25}, -{31,-28,26}, -{31,-28,27}, -{31,-28,28}, -{31,-28,29}, -{31,-28,30}, -{31,-28,31}, -{31,-28,32}, -{31,-28,33}, -{31,-28,34}, -{31,-28,35}, -{31,-28,36}, -{31,-28,37}, -{31,-28,38}, -{31,-27,4}, -{31,-27,5}, -{31,-27,6}, -{31,-27,7}, -{31,-27,8}, -{31,-27,9}, -{31,-27,10}, -{31,-27,11}, -{31,-27,12}, -{31,-27,13}, -{31,-27,14}, -{31,-27,15}, -{31,-27,16}, -{31,-27,17}, -{31,-27,18}, -{31,-27,19}, -{31,-27,20}, -{31,-27,21}, -{31,-27,22}, -{31,-27,23}, -{31,-27,24}, -{31,-27,25}, -{31,-27,26}, -{31,-27,27}, -{31,-27,28}, -{31,-27,29}, -{31,-27,30}, -{31,-27,31}, -{31,-27,32}, -{31,-27,33}, -{31,-27,34}, -{31,-27,35}, -{31,-27,36}, -{31,-27,37}, -{31,-27,38}, -{31,-26,2}, -{31,-26,3}, -{31,-26,4}, -{31,-26,5}, -{31,-26,6}, -{31,-26,7}, -{31,-26,8}, -{31,-26,9}, -{31,-26,10}, -{31,-26,11}, -{31,-26,12}, -{31,-26,13}, -{31,-26,14}, -{31,-26,15}, -{31,-26,16}, -{31,-26,17}, -{31,-26,18}, -{31,-26,19}, -{31,-26,20}, -{31,-26,21}, -{31,-26,22}, -{31,-26,23}, -{31,-26,24}, -{31,-26,25}, -{31,-26,26}, -{31,-26,27}, -{31,-26,28}, -{31,-26,29}, -{31,-26,30}, -{31,-26,31}, -{31,-26,32}, -{31,-26,33}, -{31,-26,34}, -{31,-26,35}, -{31,-26,36}, -{31,-26,37}, -{31,-26,38}, -{31,-25,0}, -{31,-25,1}, -{31,-25,2}, -{31,-25,3}, -{31,-25,4}, -{31,-25,5}, -{31,-25,6}, -{31,-25,7}, -{31,-25,8}, -{31,-25,9}, -{31,-25,10}, -{31,-25,11}, -{31,-25,12}, -{31,-25,13}, -{31,-25,14}, -{31,-25,15}, -{31,-25,16}, -{31,-25,17}, -{31,-25,18}, -{31,-25,19}, -{31,-25,20}, -{31,-25,21}, -{31,-25,22}, -{31,-25,23}, -{31,-25,24}, -{31,-25,25}, -{31,-25,26}, -{31,-25,27}, -{31,-25,28}, -{31,-25,29}, -{31,-25,30}, -{31,-25,31}, -{31,-25,32}, -{31,-25,33}, -{31,-25,34}, -{31,-25,35}, -{31,-25,36}, -{31,-25,37}, -{31,-25,38}, -{31,-24,-1}, -{31,-24,0}, -{31,-24,1}, -{31,-24,2}, -{31,-24,3}, -{31,-24,4}, -{31,-24,5}, -{31,-24,6}, -{31,-24,7}, -{31,-24,8}, -{31,-24,9}, -{31,-24,10}, -{31,-24,11}, -{31,-24,12}, -{31,-24,13}, -{31,-24,14}, -{31,-24,15}, -{31,-24,16}, -{31,-24,17}, -{31,-24,18}, -{31,-24,19}, -{31,-24,20}, -{31,-24,21}, -{31,-24,22}, -{31,-24,23}, -{31,-24,24}, -{31,-24,25}, -{31,-24,26}, -{31,-24,27}, -{31,-24,28}, -{31,-24,29}, -{31,-24,30}, -{31,-24,31}, -{31,-24,32}, -{31,-24,33}, -{31,-24,34}, -{31,-24,35}, -{31,-24,36}, -{31,-24,37}, -{31,-24,38}, -{31,-23,-3}, -{31,-23,-2}, -{31,-23,-1}, -{31,-23,0}, -{31,-23,1}, -{31,-23,2}, -{31,-23,3}, -{31,-23,4}, -{31,-23,5}, -{31,-23,6}, -{31,-23,7}, -{31,-23,8}, -{31,-23,9}, -{31,-23,10}, -{31,-23,11}, -{31,-23,12}, -{31,-23,13}, -{31,-23,14}, -{31,-23,15}, -{31,-23,16}, -{31,-23,17}, -{31,-23,18}, -{31,-23,19}, -{31,-23,20}, -{31,-23,21}, -{31,-23,22}, -{31,-23,23}, -{31,-23,24}, -{31,-23,25}, -{31,-23,26}, -{31,-23,27}, -{31,-23,28}, -{31,-23,29}, -{31,-23,30}, -{31,-23,31}, -{31,-23,32}, -{31,-23,33}, -{31,-23,34}, -{31,-23,35}, -{31,-23,36}, -{31,-23,37}, -{31,-23,38}, -{31,-22,-5}, -{31,-22,-4}, -{31,-22,-3}, -{31,-22,-2}, -{31,-22,-1}, -{31,-22,0}, -{31,-22,1}, -{31,-22,2}, -{31,-22,3}, -{31,-22,4}, -{31,-22,5}, -{31,-22,6}, -{31,-22,7}, -{31,-22,8}, -{31,-22,9}, -{31,-22,10}, -{31,-22,11}, -{31,-22,12}, -{31,-22,13}, -{31,-22,14}, -{31,-22,15}, -{31,-22,16}, -{31,-22,17}, -{31,-22,18}, -{31,-22,19}, -{31,-22,20}, -{31,-22,21}, -{31,-22,22}, -{31,-22,23}, -{31,-22,24}, -{31,-22,25}, -{31,-22,26}, -{31,-22,27}, -{31,-22,28}, -{31,-22,29}, -{31,-22,30}, -{31,-22,31}, -{31,-22,32}, -{31,-22,33}, -{31,-22,34}, -{31,-22,35}, -{31,-22,36}, -{31,-22,37}, -{31,-22,38}, -{31,-21,-6}, -{31,-21,-5}, -{31,-21,-4}, -{31,-21,-3}, -{31,-21,-2}, -{31,-21,-1}, -{31,-21,0}, -{31,-21,1}, -{31,-21,2}, -{31,-21,3}, -{31,-21,4}, -{31,-21,5}, -{31,-21,6}, -{31,-21,7}, -{31,-21,8}, -{31,-21,9}, -{31,-21,10}, -{31,-21,11}, -{31,-21,12}, -{31,-21,13}, -{31,-21,14}, -{31,-21,15}, -{31,-21,16}, -{31,-21,17}, -{31,-21,18}, -{31,-21,19}, -{31,-21,20}, -{31,-21,21}, -{31,-21,22}, -{31,-21,23}, -{31,-21,24}, -{31,-21,25}, -{31,-21,26}, -{31,-21,27}, -{31,-21,28}, -{31,-21,29}, -{31,-21,30}, -{31,-21,31}, -{31,-21,32}, -{31,-21,33}, -{31,-21,34}, -{31,-21,35}, -{31,-21,36}, -{31,-21,37}, -{31,-21,38}, -{31,-20,-8}, -{31,-20,-7}, -{31,-20,-6}, -{31,-20,-5}, -{31,-20,-4}, -{31,-20,-3}, -{31,-20,-2}, -{31,-20,-1}, -{31,-20,0}, -{31,-20,1}, -{31,-20,2}, -{31,-20,3}, -{31,-20,4}, -{31,-20,5}, -{31,-20,6}, -{31,-20,7}, -{31,-20,8}, -{31,-20,9}, -{31,-20,10}, -{31,-20,11}, -{31,-20,12}, -{31,-20,13}, -{31,-20,14}, -{31,-20,15}, -{31,-20,16}, -{31,-20,17}, -{31,-20,18}, -{31,-20,19}, -{31,-20,20}, -{31,-20,21}, -{31,-20,22}, -{31,-20,23}, -{31,-20,24}, -{31,-20,25}, -{31,-20,26}, -{31,-20,27}, -{31,-20,28}, -{31,-20,29}, -{31,-20,30}, -{31,-20,31}, -{31,-20,32}, -{31,-20,33}, -{31,-20,34}, -{31,-20,35}, -{31,-20,36}, -{31,-20,37}, -{31,-20,38}, -{31,-19,-9}, -{31,-19,-8}, -{31,-19,-7}, -{31,-19,-6}, -{31,-19,-5}, -{31,-19,-4}, -{31,-19,-3}, -{31,-19,-2}, -{31,-19,-1}, -{31,-19,0}, -{31,-19,1}, -{31,-19,2}, -{31,-19,3}, -{31,-19,4}, -{31,-19,5}, -{31,-19,6}, -{31,-19,7}, -{31,-19,8}, -{31,-19,9}, -{31,-19,10}, -{31,-19,11}, -{31,-19,12}, -{31,-19,13}, -{31,-19,14}, -{31,-19,15}, -{31,-19,16}, -{31,-19,17}, -{31,-19,18}, -{31,-19,19}, -{31,-19,20}, -{31,-19,21}, -{31,-19,22}, -{31,-19,23}, -{31,-19,24}, -{31,-19,25}, -{31,-19,26}, -{31,-19,27}, -{31,-19,28}, -{31,-19,29}, -{31,-19,30}, -{31,-19,31}, -{31,-19,32}, -{31,-19,33}, -{31,-19,34}, -{31,-19,35}, -{31,-19,36}, -{31,-19,37}, -{31,-19,38}, -{31,-18,-11}, -{31,-18,-10}, -{31,-18,-9}, -{31,-18,-8}, -{31,-18,-7}, -{31,-18,-6}, -{31,-18,-5}, -{31,-18,-4}, -{31,-18,-3}, -{31,-18,-2}, -{31,-18,-1}, -{31,-18,0}, -{31,-18,1}, -{31,-18,2}, -{31,-18,3}, -{31,-18,4}, -{31,-18,5}, -{31,-18,6}, -{31,-18,7}, -{31,-18,8}, -{31,-18,9}, -{31,-18,10}, -{31,-18,11}, -{31,-18,12}, -{31,-18,13}, -{31,-18,14}, -{31,-18,15}, -{31,-18,16}, -{31,-18,17}, -{31,-18,18}, -{31,-18,19}, -{31,-18,20}, -{31,-18,21}, -{31,-18,22}, -{31,-18,23}, -{31,-18,24}, -{31,-18,25}, -{31,-18,26}, -{31,-18,27}, -{31,-18,28}, -{31,-18,29}, -{31,-18,30}, -{31,-18,31}, -{31,-18,32}, -{31,-18,33}, -{31,-18,34}, -{31,-18,35}, -{31,-18,36}, -{31,-18,37}, -{31,-18,38}, -{31,-17,-12}, -{31,-17,-11}, -{31,-17,-10}, -{31,-17,-9}, -{31,-17,-8}, -{31,-17,-7}, -{31,-17,-6}, -{31,-17,-5}, -{31,-17,-4}, -{31,-17,-3}, -{31,-17,-2}, -{31,-17,-1}, -{31,-17,0}, -{31,-17,1}, -{31,-17,2}, -{31,-17,3}, -{31,-17,4}, -{31,-17,5}, -{31,-17,6}, -{31,-17,7}, -{31,-17,8}, -{31,-17,9}, -{31,-17,10}, -{31,-17,11}, -{31,-17,12}, -{31,-17,13}, -{31,-17,14}, -{31,-17,15}, -{31,-17,16}, -{31,-17,17}, -{31,-17,18}, -{31,-17,19}, -{31,-17,20}, -{31,-17,21}, -{31,-17,22}, -{31,-17,23}, -{31,-17,24}, -{31,-17,25}, -{31,-17,26}, -{31,-17,27}, -{31,-17,28}, -{31,-17,29}, -{31,-17,30}, -{31,-17,31}, -{31,-17,32}, -{31,-17,33}, -{31,-17,34}, -{31,-17,35}, -{31,-17,36}, -{31,-17,37}, -{31,-17,38}, -{31,-16,-14}, -{31,-16,-13}, -{31,-16,-12}, -{31,-16,-11}, -{31,-16,-10}, -{31,-16,-9}, -{31,-16,-8}, -{31,-16,-7}, -{31,-16,-6}, -{31,-16,-5}, -{31,-16,-4}, -{31,-16,-3}, -{31,-16,-2}, -{31,-16,-1}, -{31,-16,0}, -{31,-16,1}, -{31,-16,2}, -{31,-16,3}, -{31,-16,4}, -{31,-16,5}, -{31,-16,6}, -{31,-16,7}, -{31,-16,8}, -{31,-16,9}, -{31,-16,10}, -{31,-16,11}, -{31,-16,12}, -{31,-16,13}, -{31,-16,14}, -{31,-16,15}, -{31,-16,16}, -{31,-16,17}, -{31,-16,18}, -{31,-16,19}, -{31,-16,20}, -{31,-16,21}, -{31,-16,22}, -{31,-16,23}, -{31,-16,24}, -{31,-16,25}, -{31,-16,26}, -{31,-16,27}, -{31,-16,28}, -{31,-16,29}, -{31,-16,30}, -{31,-16,31}, -{31,-16,32}, -{31,-16,33}, -{31,-16,34}, -{31,-16,35}, -{31,-16,36}, -{31,-16,37}, -{31,-16,38}, -{31,-16,39}, -{31,-15,-15}, -{31,-15,-14}, -{31,-15,-13}, -{31,-15,-12}, -{31,-15,-11}, -{31,-15,-10}, -{31,-15,-9}, -{31,-15,-8}, -{31,-15,-7}, -{31,-15,-6}, -{31,-15,-5}, -{31,-15,-4}, -{31,-15,-3}, -{31,-15,-2}, -{31,-15,-1}, -{31,-15,0}, -{31,-15,1}, -{31,-15,2}, -{31,-15,3}, -{31,-15,4}, -{31,-15,5}, -{31,-15,6}, -{31,-15,7}, -{31,-15,8}, -{31,-15,9}, -{31,-15,10}, -{31,-15,11}, -{31,-15,12}, -{31,-15,13}, -{31,-15,14}, -{31,-15,15}, -{31,-15,16}, -{31,-15,17}, -{31,-15,18}, -{31,-15,19}, -{31,-15,20}, -{31,-15,21}, -{31,-15,22}, -{31,-15,23}, -{31,-15,24}, -{31,-15,25}, -{31,-15,26}, -{31,-15,27}, -{31,-15,28}, -{31,-15,29}, -{31,-15,30}, -{31,-15,31}, -{31,-15,32}, -{31,-15,33}, -{31,-15,34}, -{31,-15,35}, -{31,-15,36}, -{31,-15,37}, -{31,-15,38}, -{31,-15,39}, -{31,-14,-16}, -{31,-14,-15}, -{31,-14,-14}, -{31,-14,-13}, -{31,-14,-12}, -{31,-14,-11}, -{31,-14,-10}, -{31,-14,-9}, -{31,-14,-8}, -{31,-14,-7}, -{31,-14,-6}, -{31,-14,-5}, -{31,-14,-4}, -{31,-14,-3}, -{31,-14,-2}, -{31,-14,-1}, -{31,-14,0}, -{31,-14,1}, -{31,-14,2}, -{31,-14,3}, -{31,-14,4}, -{31,-14,5}, -{31,-14,6}, -{31,-14,7}, -{31,-14,8}, -{31,-14,9}, -{31,-14,10}, -{31,-14,11}, -{31,-14,12}, -{31,-14,13}, -{31,-14,14}, -{31,-14,15}, -{31,-14,16}, -{31,-14,17}, -{31,-14,18}, -{31,-14,19}, -{31,-14,20}, -{31,-14,21}, -{31,-14,22}, -{31,-14,23}, -{31,-14,24}, -{31,-14,25}, -{31,-14,26}, -{31,-14,27}, -{31,-14,28}, -{31,-14,29}, -{31,-14,30}, -{31,-14,31}, -{31,-14,32}, -{31,-14,33}, -{31,-14,34}, -{31,-14,35}, -{31,-14,36}, -{31,-14,37}, -{31,-14,38}, -{31,-14,39}, -{31,-13,-18}, -{31,-13,-17}, -{31,-13,-16}, -{31,-13,-15}, -{31,-13,-14}, -{31,-13,-13}, -{31,-13,-12}, -{31,-13,-11}, -{31,-13,-10}, -{31,-13,-9}, -{31,-13,-8}, -{31,-13,-7}, -{31,-13,-6}, -{31,-13,-5}, -{31,-13,-4}, -{31,-13,-3}, -{31,-13,-2}, -{31,-13,-1}, -{31,-13,0}, -{31,-13,1}, -{31,-13,2}, -{31,-13,3}, -{31,-13,4}, -{31,-13,5}, -{31,-13,6}, -{31,-13,7}, -{31,-13,8}, -{31,-13,9}, -{31,-13,10}, -{31,-13,11}, -{31,-13,12}, -{31,-13,13}, -{31,-13,14}, -{31,-13,15}, -{31,-13,16}, -{31,-13,17}, -{31,-13,18}, -{31,-13,19}, -{31,-13,20}, -{31,-13,21}, -{31,-13,22}, -{31,-13,23}, -{31,-13,24}, -{31,-13,25}, -{31,-13,26}, -{31,-13,27}, -{31,-13,28}, -{31,-13,29}, -{31,-13,30}, -{31,-13,31}, -{31,-13,32}, -{31,-13,33}, -{31,-13,34}, -{31,-13,35}, -{31,-13,36}, -{31,-13,37}, -{31,-13,38}, -{31,-13,39}, -{31,-12,-19}, -{31,-12,-18}, -{31,-12,-17}, -{31,-12,-16}, -{31,-12,-15}, -{31,-12,-14}, -{31,-12,-13}, -{31,-12,-12}, -{31,-12,-11}, -{31,-12,-10}, -{31,-12,-9}, -{31,-12,-8}, -{31,-12,-7}, -{31,-12,-6}, -{31,-12,-5}, -{31,-12,-4}, -{31,-12,-3}, -{31,-12,-2}, -{31,-12,-1}, -{31,-12,0}, -{31,-12,1}, -{31,-12,2}, -{31,-12,3}, -{31,-12,4}, -{31,-12,5}, -{31,-12,6}, -{31,-12,7}, -{31,-12,8}, -{31,-12,9}, -{31,-12,10}, -{31,-12,11}, -{31,-12,12}, -{31,-12,13}, -{31,-12,14}, -{31,-12,15}, -{31,-12,16}, -{31,-12,17}, -{31,-12,18}, -{31,-12,19}, -{31,-12,20}, -{31,-12,21}, -{31,-12,22}, -{31,-12,23}, -{31,-12,24}, -{31,-12,25}, -{31,-12,26}, -{31,-12,27}, -{31,-12,28}, -{31,-12,29}, -{31,-12,30}, -{31,-12,31}, -{31,-12,32}, -{31,-12,33}, -{31,-12,34}, -{31,-12,35}, -{31,-12,36}, -{31,-12,37}, -{31,-12,38}, -{31,-12,39}, -{31,-11,-20}, -{31,-11,-19}, -{31,-11,-18}, -{31,-11,-17}, -{31,-11,-16}, -{31,-11,-15}, -{31,-11,-14}, -{31,-11,-13}, -{31,-11,-12}, -{31,-11,-11}, -{31,-11,-10}, -{31,-11,-9}, -{31,-11,-8}, -{31,-11,-7}, -{31,-11,-6}, -{31,-11,-5}, -{31,-11,-4}, -{31,-11,-3}, -{31,-11,-2}, -{31,-11,-1}, -{31,-11,0}, -{31,-11,1}, -{31,-11,2}, -{31,-11,3}, -{31,-11,4}, -{31,-11,5}, -{31,-11,6}, -{31,-11,7}, -{31,-11,8}, -{31,-11,9}, -{31,-11,10}, -{31,-11,11}, -{31,-11,12}, -{31,-11,13}, -{31,-11,14}, -{31,-11,15}, -{31,-11,16}, -{31,-11,17}, -{31,-11,18}, -{31,-11,19}, -{31,-11,20}, -{31,-11,21}, -{31,-11,22}, -{31,-11,23}, -{31,-11,24}, -{31,-11,25}, -{31,-11,26}, -{31,-11,27}, -{31,-11,28}, -{31,-11,29}, -{31,-11,30}, -{31,-11,31}, -{31,-11,32}, -{31,-11,33}, -{31,-11,34}, -{31,-11,35}, -{31,-11,36}, -{31,-11,37}, -{31,-11,38}, -{31,-11,39}, -{31,-10,-22}, -{31,-10,-21}, -{31,-10,-20}, -{31,-10,-19}, -{31,-10,-18}, -{31,-10,-17}, -{31,-10,-16}, -{31,-10,-15}, -{31,-10,-14}, -{31,-10,-13}, -{31,-10,-12}, -{31,-10,-11}, -{31,-10,-10}, -{31,-10,-9}, -{31,-10,-8}, -{31,-10,-7}, -{31,-10,-6}, -{31,-10,-5}, -{31,-10,-4}, -{31,-10,-3}, -{31,-10,-2}, -{31,-10,-1}, -{31,-10,0}, -{31,-10,1}, -{31,-10,2}, -{31,-10,3}, -{31,-10,4}, -{31,-10,5}, -{31,-10,6}, -{31,-10,7}, -{31,-10,8}, -{31,-10,9}, -{31,-10,10}, -{31,-10,11}, -{31,-10,12}, -{31,-10,13}, -{31,-10,14}, -{31,-10,15}, -{31,-10,16}, -{31,-10,17}, -{31,-10,18}, -{31,-10,19}, -{31,-10,20}, -{31,-10,21}, -{31,-10,22}, -{31,-10,23}, -{31,-10,24}, -{31,-10,25}, -{31,-10,26}, -{31,-10,27}, -{31,-10,28}, -{31,-10,29}, -{31,-10,30}, -{31,-10,31}, -{31,-10,32}, -{31,-10,33}, -{31,-10,34}, -{31,-10,35}, -{31,-10,36}, -{31,-10,37}, -{31,-10,38}, -{31,-10,39}, -{31,-9,-23}, -{31,-9,-22}, -{31,-9,-21}, -{31,-9,-20}, -{31,-9,-19}, -{31,-9,-18}, -{31,-9,-17}, -{31,-9,-16}, -{31,-9,-15}, -{31,-9,-14}, -{31,-9,-13}, -{31,-9,-12}, -{31,-9,-11}, -{31,-9,-10}, -{31,-9,-9}, -{31,-9,-8}, -{31,-9,-7}, -{31,-9,-6}, -{31,-9,-5}, -{31,-9,-4}, -{31,-9,-3}, -{31,-9,-2}, -{31,-9,-1}, -{31,-9,0}, -{31,-9,1}, -{31,-9,2}, -{31,-9,3}, -{31,-9,4}, -{31,-9,5}, -{31,-9,6}, -{31,-9,7}, -{31,-9,8}, -{31,-9,9}, -{31,-9,10}, -{31,-9,11}, -{31,-9,12}, -{31,-9,13}, -{31,-9,14}, -{31,-9,15}, -{31,-9,16}, -{31,-9,17}, -{31,-9,18}, -{31,-9,19}, -{31,-9,20}, -{31,-9,21}, -{31,-9,22}, -{31,-9,23}, -{31,-9,24}, -{31,-9,25}, -{31,-9,26}, -{31,-9,27}, -{31,-9,28}, -{31,-9,29}, -{31,-9,30}, -{31,-9,31}, -{31,-9,32}, -{31,-9,33}, -{31,-9,34}, -{31,-9,35}, -{31,-9,36}, -{31,-9,37}, -{31,-9,38}, -{31,-9,39}, -{31,-8,-24}, -{31,-8,-23}, -{31,-8,-22}, -{31,-8,-21}, -{31,-8,-20}, -{31,-8,-19}, -{31,-8,-18}, -{31,-8,-17}, -{31,-8,-16}, -{31,-8,-15}, -{31,-8,-14}, -{31,-8,-13}, -{31,-8,-12}, -{31,-8,-11}, -{31,-8,-10}, -{31,-8,-9}, -{31,-8,-8}, -{31,-8,-7}, -{31,-8,-6}, -{31,-8,-5}, -{31,-8,-4}, -{31,-8,-3}, -{31,-8,-2}, -{31,-8,-1}, -{31,-8,0}, -{31,-8,1}, -{31,-8,2}, -{31,-8,3}, -{31,-8,4}, -{31,-8,5}, -{31,-8,6}, -{31,-8,7}, -{31,-8,8}, -{31,-8,9}, -{31,-8,10}, -{31,-8,11}, -{31,-8,12}, -{31,-8,13}, -{31,-8,14}, -{31,-8,15}, -{31,-8,16}, -{31,-8,17}, -{31,-8,18}, -{31,-8,19}, -{31,-8,20}, -{31,-8,21}, -{31,-8,22}, -{31,-8,23}, -{31,-8,24}, -{31,-8,25}, -{31,-8,26}, -{31,-8,27}, -{31,-8,28}, -{31,-8,29}, -{31,-8,30}, -{31,-8,31}, -{31,-8,32}, -{31,-8,33}, -{31,-8,34}, -{31,-8,35}, -{31,-8,36}, -{31,-8,37}, -{31,-8,38}, -{31,-8,39}, -{31,-7,-25}, -{31,-7,-24}, -{31,-7,-23}, -{31,-7,-22}, -{31,-7,-21}, -{31,-7,-20}, -{31,-7,-19}, -{31,-7,-18}, -{31,-7,-17}, -{31,-7,-16}, -{31,-7,-15}, -{31,-7,-14}, -{31,-7,-13}, -{31,-7,-12}, -{31,-7,-11}, -{31,-7,-10}, -{31,-7,-9}, -{31,-7,-8}, -{31,-7,-7}, -{31,-7,-6}, -{31,-7,-5}, -{31,-7,-4}, -{31,-7,-3}, -{31,-7,-2}, -{31,-7,-1}, -{31,-7,0}, -{31,-7,1}, -{31,-7,2}, -{31,-7,3}, -{31,-7,4}, -{31,-7,5}, -{31,-7,6}, -{31,-7,7}, -{31,-7,8}, -{31,-7,9}, -{31,-7,10}, -{31,-7,11}, -{31,-7,12}, -{31,-7,13}, -{31,-7,14}, -{31,-7,15}, -{31,-7,16}, -{31,-7,17}, -{31,-7,18}, -{31,-7,19}, -{31,-7,20}, -{31,-7,21}, -{31,-7,22}, -{31,-7,23}, -{31,-7,24}, -{31,-7,25}, -{31,-7,26}, -{31,-7,27}, -{31,-7,28}, -{31,-7,29}, -{31,-7,30}, -{31,-7,31}, -{31,-7,32}, -{31,-7,33}, -{31,-7,34}, -{31,-7,35}, -{31,-7,36}, -{31,-7,37}, -{31,-7,38}, -{31,-7,39}, -{31,-6,-26}, -{31,-6,-25}, -{31,-6,-24}, -{31,-6,-23}, -{31,-6,-22}, -{31,-6,-21}, -{31,-6,-20}, -{31,-6,-19}, -{31,-6,-18}, -{31,-6,-17}, -{31,-6,-16}, -{31,-6,-15}, -{31,-6,-14}, -{31,-6,-13}, -{31,-6,-12}, -{31,-6,-11}, -{31,-6,-10}, -{31,-6,-9}, -{31,-6,-8}, -{31,-6,-7}, -{31,-6,-6}, -{31,-6,-5}, -{31,-6,-4}, -{31,-6,-3}, -{31,-6,-2}, -{31,-6,-1}, -{31,-6,0}, -{31,-6,1}, -{31,-6,2}, -{31,-6,3}, -{31,-6,4}, -{31,-6,5}, -{31,-6,6}, -{31,-6,7}, -{31,-6,8}, -{31,-6,9}, -{31,-6,10}, -{31,-6,11}, -{31,-6,12}, -{31,-6,13}, -{31,-6,14}, -{31,-6,15}, -{31,-6,16}, -{31,-6,17}, -{31,-6,18}, -{31,-6,19}, -{31,-6,20}, -{31,-6,21}, -{31,-6,22}, -{31,-6,23}, -{31,-6,24}, -{31,-6,25}, -{31,-6,26}, -{31,-6,27}, -{31,-6,28}, -{31,-6,29}, -{31,-6,30}, -{31,-6,31}, -{31,-6,32}, -{31,-6,33}, -{31,-6,34}, -{31,-6,35}, -{31,-6,36}, -{31,-6,37}, -{31,-6,38}, -{31,-6,39}, -{31,-5,-28}, -{31,-5,-27}, -{31,-5,-26}, -{31,-5,-25}, -{31,-5,-24}, -{31,-5,-23}, -{31,-5,-22}, -{31,-5,-21}, -{31,-5,-20}, -{31,-5,-19}, -{31,-5,-18}, -{31,-5,-17}, -{31,-5,-16}, -{31,-5,-15}, -{31,-5,-14}, -{31,-5,-13}, -{31,-5,-12}, -{31,-5,-11}, -{31,-5,-10}, -{31,-5,-9}, -{31,-5,-8}, -{31,-5,-7}, -{31,-5,-6}, -{31,-5,-5}, -{31,-5,-4}, -{31,-5,-3}, -{31,-5,-2}, -{31,-5,-1}, -{31,-5,0}, -{31,-5,1}, -{31,-5,2}, -{31,-5,3}, -{31,-5,4}, -{31,-5,5}, -{31,-5,6}, -{31,-5,7}, -{31,-5,8}, -{31,-5,9}, -{31,-5,10}, -{31,-5,11}, -{31,-5,12}, -{31,-5,13}, -{31,-5,14}, -{31,-5,15}, -{31,-5,16}, -{31,-5,17}, -{31,-5,18}, -{31,-5,19}, -{31,-5,20}, -{31,-5,21}, -{31,-5,22}, -{31,-5,23}, -{31,-5,24}, -{31,-5,25}, -{31,-5,26}, -{31,-5,27}, -{31,-5,28}, -{31,-5,29}, -{31,-5,30}, -{31,-5,31}, -{31,-5,32}, -{31,-5,33}, -{31,-5,34}, -{31,-5,35}, -{31,-5,36}, -{31,-5,37}, -{31,-5,38}, -{31,-5,39}, -{31,-4,-29}, -{31,-4,-28}, -{31,-4,-27}, -{31,-4,-26}, -{31,-4,-25}, -{31,-4,-24}, -{31,-4,-23}, -{31,-4,-22}, -{31,-4,-21}, -{31,-4,-20}, -{31,-4,-19}, -{31,-4,-18}, -{31,-4,-17}, -{31,-4,-16}, -{31,-4,-15}, -{31,-4,-14}, -{31,-4,-13}, -{31,-4,-12}, -{31,-4,-11}, -{31,-4,-10}, -{31,-4,-9}, -{31,-4,-8}, -{31,-4,-7}, -{31,-4,-6}, -{31,-4,-5}, -{31,-4,-4}, -{31,-4,-3}, -{31,-4,-2}, -{31,-4,-1}, -{31,-4,0}, -{31,-4,1}, -{31,-4,2}, -{31,-4,3}, -{31,-4,4}, -{31,-4,5}, -{31,-4,6}, -{31,-4,7}, -{31,-4,8}, -{31,-4,9}, -{31,-4,10}, -{31,-4,11}, -{31,-4,12}, -{31,-4,13}, -{31,-4,14}, -{31,-4,15}, -{31,-4,16}, -{31,-4,17}, -{31,-4,18}, -{31,-4,19}, -{31,-4,20}, -{31,-4,21}, -{31,-4,22}, -{31,-4,23}, -{31,-4,24}, -{31,-4,25}, -{31,-4,26}, -{31,-4,27}, -{31,-4,28}, -{31,-4,29}, -{31,-4,30}, -{31,-4,31}, -{31,-4,32}, -{31,-4,33}, -{31,-4,34}, -{31,-4,35}, -{31,-4,36}, -{31,-4,37}, -{31,-4,38}, -{31,-4,39}, -{31,-3,-30}, -{31,-3,-29}, -{31,-3,-28}, -{31,-3,-27}, -{31,-3,-26}, -{31,-3,-25}, -{31,-3,-24}, -{31,-3,-23}, -{31,-3,-22}, -{31,-3,-21}, -{31,-3,-20}, -{31,-3,-19}, -{31,-3,-18}, -{31,-3,-17}, -{31,-3,-16}, -{31,-3,-15}, -{31,-3,-14}, -{31,-3,-13}, -{31,-3,-12}, -{31,-3,-11}, -{31,-3,-10}, -{31,-3,-9}, -{31,-3,-8}, -{31,-3,-7}, -{31,-3,-6}, -{31,-3,-5}, -{31,-3,-4}, -{31,-3,-3}, -{31,-3,-2}, -{31,-3,-1}, -{31,-3,0}, -{31,-3,1}, -{31,-3,2}, -{31,-3,3}, -{31,-3,4}, -{31,-3,5}, -{31,-3,6}, -{31,-3,7}, -{31,-3,8}, -{31,-3,9}, -{31,-3,10}, -{31,-3,11}, -{31,-3,12}, -{31,-3,13}, -{31,-3,14}, -{31,-3,15}, -{31,-3,16}, -{31,-3,17}, -{31,-3,18}, -{31,-3,19}, -{31,-3,20}, -{31,-3,21}, -{31,-3,22}, -{31,-3,23}, -{31,-3,24}, -{31,-3,25}, -{31,-3,26}, -{31,-3,27}, -{31,-3,28}, -{31,-3,29}, -{31,-3,30}, -{31,-3,31}, -{31,-3,32}, -{31,-3,33}, -{31,-3,34}, -{31,-3,35}, -{31,-3,36}, -{31,-3,37}, -{31,-3,38}, -{31,-3,39}, -{31,-2,-31}, -{31,-2,-30}, -{31,-2,-29}, -{31,-2,-28}, -{31,-2,-27}, -{31,-2,-26}, -{31,-2,-25}, -{31,-2,-24}, -{31,-2,-23}, -{31,-2,-22}, -{31,-2,-21}, -{31,-2,-20}, -{31,-2,-19}, -{31,-2,-18}, -{31,-2,-17}, -{31,-2,-16}, -{31,-2,-15}, -{31,-2,-14}, -{31,-2,-13}, -{31,-2,-12}, -{31,-2,-11}, -{31,-2,-10}, -{31,-2,-9}, -{31,-2,-8}, -{31,-2,-7}, -{31,-2,-6}, -{31,-2,-5}, -{31,-2,-4}, -{31,-2,-3}, -{31,-2,-2}, -{31,-2,-1}, -{31,-2,0}, -{31,-2,1}, -{31,-2,2}, -{31,-2,3}, -{31,-2,4}, -{31,-2,5}, -{31,-2,6}, -{31,-2,7}, -{31,-2,8}, -{31,-2,9}, -{31,-2,10}, -{31,-2,11}, -{31,-2,12}, -{31,-2,13}, -{31,-2,14}, -{31,-2,15}, -{31,-2,16}, -{31,-2,17}, -{31,-2,18}, -{31,-2,19}, -{31,-2,20}, -{31,-2,21}, -{31,-2,22}, -{31,-2,23}, -{31,-2,24}, -{31,-2,25}, -{31,-2,26}, -{31,-2,27}, -{31,-2,28}, -{31,-2,29}, -{31,-2,30}, -{31,-2,31}, -{31,-2,32}, -{31,-2,33}, -{31,-2,34}, -{31,-2,35}, -{31,-2,36}, -{31,-2,37}, -{31,-2,38}, -{31,-2,39}, -{31,-1,-32}, -{31,-1,-31}, -{31,-1,-30}, -{31,-1,-29}, -{31,-1,-28}, -{31,-1,-27}, -{31,-1,-26}, -{31,-1,-25}, -{31,-1,-24}, -{31,-1,-23}, -{31,-1,-22}, -{31,-1,-21}, -{31,-1,-20}, -{31,-1,-19}, -{31,-1,-18}, -{31,-1,-17}, -{31,-1,-16}, -{31,-1,-15}, -{31,-1,-14}, -{31,-1,-13}, -{31,-1,-12}, -{31,-1,-11}, -{31,-1,-10}, -{31,-1,-9}, -{31,-1,-8}, -{31,-1,-7}, -{31,-1,-6}, -{31,-1,-5}, -{31,-1,-4}, -{31,-1,-3}, -{31,-1,-2}, -{31,-1,-1}, -{31,-1,0}, -{31,-1,1}, -{31,-1,2}, -{31,-1,3}, -{31,-1,4}, -{31,-1,5}, -{31,-1,6}, -{31,-1,7}, -{31,-1,8}, -{31,-1,9}, -{31,-1,10}, -{31,-1,11}, -{31,-1,12}, -{31,-1,13}, -{31,-1,14}, -{31,-1,15}, -{31,-1,16}, -{31,-1,17}, -{31,-1,18}, -{31,-1,19}, -{31,-1,20}, -{31,-1,21}, -{31,-1,22}, -{31,-1,23}, -{31,-1,24}, -{31,-1,25}, -{31,-1,26}, -{31,-1,27}, -{31,-1,28}, -{31,-1,29}, -{31,-1,30}, -{31,-1,31}, -{31,-1,32}, -{31,-1,33}, -{31,-1,34}, -{31,-1,35}, -{31,-1,36}, -{31,-1,37}, -{31,-1,38}, -{31,-1,39}, -{31,0,-33}, -{31,0,-32}, -{31,0,-31}, -{31,0,-30}, -{31,0,-29}, -{31,0,-28}, -{31,0,-27}, -{31,0,-26}, -{31,0,-25}, -{31,0,-24}, -{31,0,-23}, -{31,0,-22}, -{31,0,-21}, -{31,0,-20}, -{31,0,-19}, -{31,0,-18}, -{31,0,-17}, -{31,0,-16}, -{31,0,-15}, -{31,0,-14}, -{31,0,-13}, -{31,0,-12}, -{31,0,-11}, -{31,0,-10}, -{31,0,-9}, -{31,0,-8}, -{31,0,-7}, -{31,0,-6}, -{31,0,-5}, -{31,0,-4}, -{31,0,-3}, -{31,0,-2}, -{31,0,-1}, -{31,0,0}, -{31,0,1}, -{31,0,2}, -{31,0,3}, -{31,0,4}, -{31,0,5}, -{31,0,6}, -{31,0,7}, -{31,0,8}, -{31,0,9}, -{31,0,10}, -{31,0,11}, -{31,0,12}, -{31,0,13}, -{31,0,14}, -{31,0,15}, -{31,0,16}, -{31,0,17}, -{31,0,18}, -{31,0,19}, -{31,0,20}, -{31,0,21}, -{31,0,22}, -{31,0,23}, -{31,0,24}, -{31,0,25}, -{31,0,26}, -{31,0,27}, -{31,0,28}, -{31,0,29}, -{31,0,30}, -{31,0,31}, -{31,0,32}, -{31,0,33}, -{31,0,34}, -{31,0,35}, -{31,0,36}, -{31,0,37}, -{31,0,38}, -{31,0,39}, -{31,0,40}, -{31,1,-35}, -{31,1,-34}, -{31,1,-33}, -{31,1,-32}, -{31,1,-31}, -{31,1,-30}, -{31,1,-29}, -{31,1,-28}, -{31,1,-27}, -{31,1,-26}, -{31,1,-25}, -{31,1,-24}, -{31,1,-23}, -{31,1,-22}, -{31,1,-21}, -{31,1,-20}, -{31,1,-19}, -{31,1,-18}, -{31,1,-17}, -{31,1,-16}, -{31,1,-15}, -{31,1,-14}, -{31,1,-13}, -{31,1,-12}, -{31,1,-11}, -{31,1,-10}, -{31,1,-9}, -{31,1,-8}, -{31,1,-7}, -{31,1,-6}, -{31,1,-5}, -{31,1,-4}, -{31,1,-3}, -{31,1,-2}, -{31,1,-1}, -{31,1,0}, -{31,1,1}, -{31,1,2}, -{31,1,3}, -{31,1,4}, -{31,1,5}, -{31,1,6}, -{31,1,7}, -{31,1,8}, -{31,1,9}, -{31,1,10}, -{31,1,11}, -{31,1,12}, -{31,1,13}, -{31,1,14}, -{31,1,15}, -{31,1,16}, -{31,1,17}, -{31,1,18}, -{31,1,19}, -{31,1,20}, -{31,1,21}, -{31,1,22}, -{31,1,23}, -{31,1,24}, -{31,1,25}, -{31,1,26}, -{31,1,27}, -{31,1,28}, -{31,1,29}, -{31,1,30}, -{31,1,31}, -{31,1,32}, -{31,1,33}, -{31,1,34}, -{31,1,35}, -{31,1,36}, -{31,1,37}, -{31,1,38}, -{31,1,39}, -{31,1,40}, -{31,2,-36}, -{31,2,-35}, -{31,2,-34}, -{31,2,-33}, -{31,2,-32}, -{31,2,-31}, -{31,2,-30}, -{31,2,-29}, -{31,2,-28}, -{31,2,-27}, -{31,2,-26}, -{31,2,-25}, -{31,2,-24}, -{31,2,-23}, -{31,2,-22}, -{31,2,-21}, -{31,2,-20}, -{31,2,-19}, -{31,2,-18}, -{31,2,-17}, -{31,2,-16}, -{31,2,-15}, -{31,2,-14}, -{31,2,-13}, -{31,2,-12}, -{31,2,-11}, -{31,2,-10}, -{31,2,-9}, -{31,2,-8}, -{31,2,-7}, -{31,2,-6}, -{31,2,-5}, -{31,2,-4}, -{31,2,-3}, -{31,2,-2}, -{31,2,-1}, -{31,2,0}, -{31,2,1}, -{31,2,2}, -{31,2,3}, -{31,2,4}, -{31,2,5}, -{31,2,6}, -{31,2,7}, -{31,2,8}, -{31,2,9}, -{31,2,10}, -{31,2,11}, -{31,2,12}, -{31,2,13}, -{31,2,14}, -{31,2,15}, -{31,2,16}, -{31,2,17}, -{31,2,18}, -{31,2,19}, -{31,2,20}, -{31,2,21}, -{31,2,22}, -{31,2,23}, -{31,2,24}, -{31,2,25}, -{31,2,26}, -{31,2,27}, -{31,2,28}, -{31,2,29}, -{31,2,30}, -{31,2,31}, -{31,2,32}, -{31,2,33}, -{31,2,34}, -{31,2,35}, -{31,2,36}, -{31,2,37}, -{31,2,38}, -{31,2,39}, -{31,2,40}, -{31,3,-37}, -{31,3,-36}, -{31,3,-35}, -{31,3,-34}, -{31,3,-33}, -{31,3,-32}, -{31,3,-31}, -{31,3,-30}, -{31,3,-29}, -{31,3,-28}, -{31,3,-27}, -{31,3,-26}, -{31,3,-25}, -{31,3,-24}, -{31,3,-23}, -{31,3,-22}, -{31,3,-21}, -{31,3,-20}, -{31,3,-19}, -{31,3,-18}, -{31,3,-17}, -{31,3,-16}, -{31,3,-15}, -{31,3,-14}, -{31,3,-13}, -{31,3,-12}, -{31,3,-11}, -{31,3,-10}, -{31,3,-9}, -{31,3,-8}, -{31,3,-7}, -{31,3,-6}, -{31,3,-5}, -{31,3,-4}, -{31,3,-3}, -{31,3,-2}, -{31,3,-1}, -{31,3,0}, -{31,3,1}, -{31,3,2}, -{31,3,3}, -{31,3,4}, -{31,3,5}, -{31,3,6}, -{31,3,7}, -{31,3,8}, -{31,3,9}, -{31,3,10}, -{31,3,11}, -{31,3,12}, -{31,3,13}, -{31,3,14}, -{31,3,15}, -{31,3,16}, -{31,3,17}, -{31,3,18}, -{31,3,19}, -{31,3,20}, -{31,3,21}, -{31,3,22}, -{31,3,23}, -{31,3,24}, -{31,3,25}, -{31,3,26}, -{31,3,27}, -{31,3,28}, -{31,3,29}, -{31,3,30}, -{31,3,31}, -{31,3,32}, -{31,3,33}, -{31,3,34}, -{31,3,35}, -{31,3,36}, -{31,3,37}, -{31,3,38}, -{31,3,39}, -{31,3,40}, -{31,4,-38}, -{31,4,-37}, -{31,4,-36}, -{31,4,-35}, -{31,4,-34}, -{31,4,-33}, -{31,4,-32}, -{31,4,-31}, -{31,4,-30}, -{31,4,-29}, -{31,4,-28}, -{31,4,-27}, -{31,4,-26}, -{31,4,-25}, -{31,4,-24}, -{31,4,-23}, -{31,4,-22}, -{31,4,-21}, -{31,4,-20}, -{31,4,-19}, -{31,4,-18}, -{31,4,-17}, -{31,4,-16}, -{31,4,-15}, -{31,4,-14}, -{31,4,-13}, -{31,4,-12}, -{31,4,-11}, -{31,4,-10}, -{31,4,-9}, -{31,4,-8}, -{31,4,-7}, -{31,4,-6}, -{31,4,-5}, -{31,4,-4}, -{31,4,-3}, -{31,4,-2}, -{31,4,-1}, -{31,4,0}, -{31,4,1}, -{31,4,2}, -{31,4,3}, -{31,4,4}, -{31,4,5}, -{31,4,6}, -{31,4,7}, -{31,4,8}, -{31,4,9}, -{31,4,10}, -{31,4,11}, -{31,4,12}, -{31,4,13}, -{31,4,14}, -{31,4,15}, -{31,4,16}, -{31,4,17}, -{31,4,18}, -{31,4,19}, -{31,4,20}, -{31,4,21}, -{31,4,22}, -{31,4,23}, -{31,4,24}, -{31,4,25}, -{31,4,26}, -{31,4,27}, -{31,4,28}, -{31,4,29}, -{31,4,30}, -{31,4,31}, -{31,4,32}, -{31,4,33}, -{31,4,34}, -{31,4,35}, -{31,4,36}, -{31,4,37}, -{31,4,38}, -{31,4,39}, -{31,4,40}, -{31,5,-39}, -{31,5,-38}, -{31,5,-37}, -{31,5,-36}, -{31,5,-35}, -{31,5,-34}, -{31,5,-33}, -{31,5,-32}, -{31,5,-31}, -{31,5,-30}, -{31,5,-29}, -{31,5,-28}, -{31,5,-27}, -{31,5,-26}, -{31,5,-25}, -{31,5,-24}, -{31,5,-23}, -{31,5,-22}, -{31,5,-21}, -{31,5,-20}, -{31,5,-19}, -{31,5,-18}, -{31,5,-17}, -{31,5,-16}, -{31,5,-15}, -{31,5,-14}, -{31,5,-13}, -{31,5,-12}, -{31,5,-11}, -{31,5,-10}, -{31,5,-9}, -{31,5,-8}, -{31,5,-7}, -{31,5,-6}, -{31,5,-5}, -{31,5,-4}, -{31,5,-3}, -{31,5,-2}, -{31,5,-1}, -{31,5,0}, -{31,5,1}, -{31,5,2}, -{31,5,3}, -{31,5,4}, -{31,5,5}, -{31,5,6}, -{31,5,7}, -{31,5,8}, -{31,5,9}, -{31,5,10}, -{31,5,11}, -{31,5,12}, -{31,5,13}, -{31,5,14}, -{31,5,15}, -{31,5,16}, -{31,5,17}, -{31,5,18}, -{31,5,19}, -{31,5,20}, -{31,5,21}, -{31,5,22}, -{31,5,23}, -{31,5,24}, -{31,5,25}, -{31,5,26}, -{31,5,27}, -{31,5,28}, -{31,5,29}, -{31,5,30}, -{31,5,31}, -{31,5,32}, -{31,5,33}, -{31,5,34}, -{31,5,35}, -{31,5,36}, -{31,5,37}, -{31,5,38}, -{31,5,39}, -{31,5,40}, -{31,6,-40}, -{31,6,-39}, -{31,6,-38}, -{31,6,-37}, -{31,6,-36}, -{31,6,-35}, -{31,6,-34}, -{31,6,-33}, -{31,6,-32}, -{31,6,-31}, -{31,6,-30}, -{31,6,-29}, -{31,6,-28}, -{31,6,-27}, -{31,6,-26}, -{31,6,-25}, -{31,6,-24}, -{31,6,-23}, -{31,6,-22}, -{31,6,-21}, -{31,6,-20}, -{31,6,-19}, -{31,6,-18}, -{31,6,-17}, -{31,6,-16}, -{31,6,-15}, -{31,6,-14}, -{31,6,-13}, -{31,6,-12}, -{31,6,-11}, -{31,6,-10}, -{31,6,-9}, -{31,6,-8}, -{31,6,-7}, -{31,6,-6}, -{31,6,-5}, -{31,6,-4}, -{31,6,-3}, -{31,6,-2}, -{31,6,-1}, -{31,6,0}, -{31,6,1}, -{31,6,2}, -{31,6,3}, -{31,6,4}, -{31,6,5}, -{31,6,6}, -{31,6,7}, -{31,6,8}, -{31,6,9}, -{31,6,10}, -{31,6,11}, -{31,6,12}, -{31,6,13}, -{31,6,14}, -{31,6,15}, -{31,6,16}, -{31,6,17}, -{31,6,18}, -{31,6,19}, -{31,6,20}, -{31,6,21}, -{31,6,22}, -{31,6,23}, -{31,6,24}, -{31,6,25}, -{31,6,26}, -{31,6,27}, -{31,6,28}, -{31,6,29}, -{31,6,30}, -{31,6,31}, -{31,6,32}, -{31,6,33}, -{31,6,34}, -{31,6,35}, -{31,6,36}, -{31,6,37}, -{31,6,38}, -{31,6,39}, -{31,6,40}, -{31,7,-41}, -{31,7,-40}, -{31,7,-39}, -{31,7,-38}, -{31,7,-37}, -{31,7,-36}, -{31,7,-35}, -{31,7,-34}, -{31,7,-33}, -{31,7,-32}, -{31,7,-31}, -{31,7,-30}, -{31,7,-29}, -{31,7,-28}, -{31,7,-27}, -{31,7,-26}, -{31,7,-25}, -{31,7,-24}, -{31,7,-23}, -{31,7,-22}, -{31,7,-21}, -{31,7,-20}, -{31,7,-19}, -{31,7,-18}, -{31,7,-17}, -{31,7,-16}, -{31,7,-15}, -{31,7,-14}, -{31,7,-13}, -{31,7,-12}, -{31,7,-11}, -{31,7,-10}, -{31,7,-9}, -{31,7,-8}, -{31,7,-7}, -{31,7,-6}, -{31,7,-5}, -{31,7,-4}, -{31,7,-3}, -{31,7,-2}, -{31,7,-1}, -{31,7,0}, -{31,7,1}, -{31,7,2}, -{31,7,3}, -{31,7,4}, -{31,7,5}, -{31,7,6}, -{31,7,7}, -{31,7,8}, -{31,7,9}, -{31,7,10}, -{31,7,11}, -{31,7,12}, -{31,7,13}, -{31,7,14}, -{31,7,15}, -{31,7,16}, -{31,7,17}, -{31,7,18}, -{31,7,19}, -{31,7,20}, -{31,7,21}, -{31,7,22}, -{31,7,23}, -{31,7,24}, -{31,7,25}, -{31,7,26}, -{31,7,27}, -{31,7,28}, -{31,7,29}, -{31,7,30}, -{31,7,31}, -{31,7,32}, -{31,7,33}, -{31,7,34}, -{31,7,35}, -{31,7,36}, -{31,7,37}, -{31,7,38}, -{31,7,39}, -{31,7,40}, -{31,8,-42}, -{31,8,-41}, -{31,8,-40}, -{31,8,-39}, -{31,8,-38}, -{31,8,-37}, -{31,8,-36}, -{31,8,-35}, -{31,8,-34}, -{31,8,-33}, -{31,8,-32}, -{31,8,-31}, -{31,8,-30}, -{31,8,-29}, -{31,8,-28}, -{31,8,-27}, -{31,8,-26}, -{31,8,-25}, -{31,8,-24}, -{31,8,-23}, -{31,8,-22}, -{31,8,-21}, -{31,8,-20}, -{31,8,-19}, -{31,8,-18}, -{31,8,-17}, -{31,8,-16}, -{31,8,-15}, -{31,8,-14}, -{31,8,-13}, -{31,8,-12}, -{31,8,-11}, -{31,8,-10}, -{31,8,-9}, -{31,8,-8}, -{31,8,-7}, -{31,8,-6}, -{31,8,-5}, -{31,8,-4}, -{31,8,-3}, -{31,8,-2}, -{31,8,-1}, -{31,8,0}, -{31,8,1}, -{31,8,2}, -{31,8,3}, -{31,8,4}, -{31,8,5}, -{31,8,6}, -{31,8,7}, -{31,8,8}, -{31,8,9}, -{31,8,10}, -{31,8,11}, -{31,8,12}, -{31,8,13}, -{31,8,14}, -{31,8,15}, -{31,8,16}, -{31,8,17}, -{31,8,18}, -{31,8,19}, -{31,8,20}, -{31,8,21}, -{31,8,22}, -{31,8,23}, -{31,8,24}, -{31,8,25}, -{31,8,26}, -{31,8,27}, -{31,8,28}, -{31,8,29}, -{31,8,30}, -{31,8,31}, -{31,8,32}, -{31,8,33}, -{31,8,34}, -{31,8,35}, -{31,8,36}, -{31,8,37}, -{31,8,38}, -{31,8,39}, -{31,8,40}, -{31,9,-43}, -{31,9,-42}, -{31,9,-41}, -{31,9,-40}, -{31,9,-39}, -{31,9,-38}, -{31,9,-37}, -{31,9,-36}, -{31,9,-35}, -{31,9,-34}, -{31,9,-33}, -{31,9,-32}, -{31,9,-31}, -{31,9,-30}, -{31,9,-29}, -{31,9,-28}, -{31,9,-27}, -{31,9,-26}, -{31,9,-25}, -{31,9,-24}, -{31,9,-23}, -{31,9,-22}, -{31,9,-21}, -{31,9,-20}, -{31,9,-19}, -{31,9,-18}, -{31,9,-17}, -{31,9,-16}, -{31,9,-15}, -{31,9,-14}, -{31,9,-13}, -{31,9,-12}, -{31,9,-11}, -{31,9,-10}, -{31,9,-9}, -{31,9,-8}, -{31,9,-7}, -{31,9,-6}, -{31,9,-5}, -{31,9,-4}, -{31,9,-3}, -{31,9,-2}, -{31,9,-1}, -{31,9,0}, -{31,9,1}, -{31,9,2}, -{31,9,3}, -{31,9,4}, -{31,9,5}, -{31,9,6}, -{31,9,7}, -{31,9,8}, -{31,9,9}, -{31,9,10}, -{31,9,11}, -{31,9,12}, -{31,9,13}, -{31,9,14}, -{31,9,15}, -{31,9,16}, -{31,9,17}, -{31,9,18}, -{31,9,19}, -{31,9,20}, -{31,9,21}, -{31,9,22}, -{31,9,23}, -{31,9,24}, -{31,9,25}, -{31,9,26}, -{31,9,27}, -{31,9,28}, -{31,9,29}, -{31,9,30}, -{31,9,31}, -{31,9,32}, -{31,9,33}, -{31,9,34}, -{31,9,35}, -{31,9,36}, -{31,9,37}, -{31,9,38}, -{31,9,39}, -{31,9,40}, -{31,10,-44}, -{31,10,-43}, -{31,10,-42}, -{31,10,-41}, -{31,10,-40}, -{31,10,-39}, -{31,10,-38}, -{31,10,-37}, -{31,10,-36}, -{31,10,-35}, -{31,10,-34}, -{31,10,-33}, -{31,10,-32}, -{31,10,-31}, -{31,10,-30}, -{31,10,-29}, -{31,10,-28}, -{31,10,-27}, -{31,10,-26}, -{31,10,-25}, -{31,10,-24}, -{31,10,-23}, -{31,10,-22}, -{31,10,-21}, -{31,10,-20}, -{31,10,-19}, -{31,10,-18}, -{31,10,-17}, -{31,10,-16}, -{31,10,-15}, -{31,10,-14}, -{31,10,-13}, -{31,10,-12}, -{31,10,-11}, -{31,10,-10}, -{31,10,-9}, -{31,10,-8}, -{31,10,-7}, -{31,10,-6}, -{31,10,-5}, -{31,10,-4}, -{31,10,-3}, -{31,10,-2}, -{31,10,-1}, -{31,10,0}, -{31,10,1}, -{31,10,2}, -{31,10,3}, -{31,10,4}, -{31,10,5}, -{31,10,6}, -{31,10,7}, -{31,10,8}, -{31,10,9}, -{31,10,10}, -{31,10,11}, -{31,10,12}, -{31,10,13}, -{31,10,14}, -{31,10,15}, -{31,10,16}, -{31,10,17}, -{31,10,18}, -{31,10,19}, -{31,10,20}, -{31,10,21}, -{31,10,22}, -{31,10,23}, -{31,10,24}, -{31,10,25}, -{31,10,26}, -{31,10,27}, -{31,10,28}, -{31,10,29}, -{31,10,30}, -{31,10,31}, -{31,10,32}, -{31,10,33}, -{31,10,34}, -{31,10,35}, -{31,10,36}, -{31,10,37}, -{31,10,38}, -{31,10,39}, -{31,10,40}, -{31,11,-45}, -{31,11,-44}, -{31,11,-43}, -{31,11,-42}, -{31,11,-41}, -{31,11,-40}, -{31,11,-39}, -{31,11,-38}, -{31,11,-37}, -{31,11,-36}, -{31,11,-35}, -{31,11,-34}, -{31,11,-33}, -{31,11,-32}, -{31,11,-31}, -{31,11,-30}, -{31,11,-29}, -{31,11,-28}, -{31,11,-27}, -{31,11,-26}, -{31,11,-25}, -{31,11,-24}, -{31,11,-23}, -{31,11,-22}, -{31,11,-21}, -{31,11,-20}, -{31,11,-19}, -{31,11,-18}, -{31,11,-17}, -{31,11,-16}, -{31,11,-15}, -{31,11,-14}, -{31,11,-13}, -{31,11,-12}, -{31,11,-11}, -{31,11,-10}, -{31,11,-9}, -{31,11,-8}, -{31,11,-7}, -{31,11,-6}, -{31,11,-5}, -{31,11,-4}, -{31,11,-3}, -{31,11,-2}, -{31,11,-1}, -{31,11,0}, -{31,11,1}, -{31,11,2}, -{31,11,3}, -{31,11,4}, -{31,11,5}, -{31,11,6}, -{31,11,7}, -{31,11,8}, -{31,11,9}, -{31,11,10}, -{31,11,11}, -{31,11,12}, -{31,11,13}, -{31,11,14}, -{31,11,15}, -{31,11,16}, -{31,11,17}, -{31,11,18}, -{31,11,19}, -{31,11,20}, -{31,11,21}, -{31,11,22}, -{31,11,23}, -{31,11,24}, -{31,11,25}, -{31,11,26}, -{31,11,27}, -{31,11,28}, -{31,11,29}, -{31,11,30}, -{31,11,31}, -{31,11,32}, -{31,11,33}, -{31,11,34}, -{31,11,35}, -{31,11,36}, -{31,11,37}, -{31,11,38}, -{31,11,39}, -{31,11,40}, -{31,12,-46}, -{31,12,-45}, -{31,12,-44}, -{31,12,-43}, -{31,12,-42}, -{31,12,-41}, -{31,12,-40}, -{31,12,-39}, -{31,12,-38}, -{31,12,-37}, -{31,12,-36}, -{31,12,-35}, -{31,12,-34}, -{31,12,-33}, -{31,12,-32}, -{31,12,-31}, -{31,12,-30}, -{31,12,-29}, -{31,12,-28}, -{31,12,-27}, -{31,12,-26}, -{31,12,-25}, -{31,12,-24}, -{31,12,-23}, -{31,12,-22}, -{31,12,-21}, -{31,12,-20}, -{31,12,-19}, -{31,12,-18}, -{31,12,-17}, -{31,12,-16}, -{31,12,-15}, -{31,12,-14}, -{31,12,-13}, -{31,12,-12}, -{31,12,-11}, -{31,12,-10}, -{31,12,-9}, -{31,12,-8}, -{31,12,-7}, -{31,12,-6}, -{31,12,-5}, -{31,12,-4}, -{31,12,-3}, -{31,12,-2}, -{31,12,-1}, -{31,12,0}, -{31,12,1}, -{31,12,2}, -{31,12,3}, -{31,12,4}, -{31,12,5}, -{31,12,6}, -{31,12,7}, -{31,12,8}, -{31,12,9}, -{31,12,10}, -{31,12,11}, -{31,12,12}, -{31,12,13}, -{31,12,14}, -{31,12,15}, -{31,12,16}, -{31,12,17}, -{31,12,18}, -{31,12,19}, -{31,12,20}, -{31,12,21}, -{31,12,22}, -{31,12,23}, -{31,12,24}, -{31,12,25}, -{31,12,26}, -{31,12,27}, -{31,12,28}, -{31,12,29}, -{31,12,30}, -{31,12,31}, -{31,12,32}, -{31,12,33}, -{31,12,34}, -{31,12,35}, -{31,12,36}, -{31,12,37}, -{31,12,38}, -{31,12,39}, -{31,12,40}, -{31,13,-47}, -{31,13,-46}, -{31,13,-45}, -{31,13,-44}, -{31,13,-43}, -{31,13,-42}, -{31,13,-41}, -{31,13,-40}, -{31,13,-39}, -{31,13,-38}, -{31,13,-37}, -{31,13,-36}, -{31,13,-35}, -{31,13,-34}, -{31,13,-33}, -{31,13,-32}, -{31,13,-31}, -{31,13,-30}, -{31,13,-29}, -{31,13,-28}, -{31,13,-27}, -{31,13,-26}, -{31,13,-25}, -{31,13,-24}, -{31,13,-23}, -{31,13,-22}, -{31,13,-21}, -{31,13,-20}, -{31,13,-19}, -{31,13,-18}, -{31,13,-17}, -{31,13,-16}, -{31,13,-15}, -{31,13,-14}, -{31,13,-13}, -{31,13,-12}, -{31,13,-11}, -{31,13,-10}, -{31,13,-9}, -{31,13,-8}, -{31,13,-7}, -{31,13,-6}, -{31,13,-5}, -{31,13,-4}, -{31,13,-3}, -{31,13,-2}, -{31,13,-1}, -{31,13,0}, -{31,13,1}, -{31,13,2}, -{31,13,3}, -{31,13,4}, -{31,13,5}, -{31,13,6}, -{31,13,7}, -{31,13,8}, -{31,13,9}, -{31,13,10}, -{31,13,11}, -{31,13,12}, -{31,13,13}, -{31,13,14}, -{31,13,15}, -{31,13,16}, -{31,13,17}, -{31,13,18}, -{31,13,19}, -{31,13,20}, -{31,13,21}, -{31,13,22}, -{31,13,23}, -{31,13,24}, -{31,13,25}, -{31,13,26}, -{31,13,27}, -{31,13,28}, -{31,13,29}, -{31,13,30}, -{31,13,31}, -{31,13,32}, -{31,13,33}, -{31,13,34}, -{31,13,35}, -{31,13,36}, -{31,13,37}, -{31,13,38}, -{31,13,39}, -{31,13,40}, -{31,13,41}, -{31,14,-48}, -{31,14,-47}, -{31,14,-46}, -{31,14,-45}, -{31,14,-44}, -{31,14,-43}, -{31,14,-42}, -{31,14,-41}, -{31,14,-40}, -{31,14,-39}, -{31,14,-38}, -{31,14,-37}, -{31,14,-36}, -{31,14,-35}, -{31,14,-34}, -{31,14,-33}, -{31,14,-32}, -{31,14,-31}, -{31,14,-30}, -{31,14,-29}, -{31,14,-28}, -{31,14,-27}, -{31,14,-26}, -{31,14,-25}, -{31,14,-24}, -{31,14,-23}, -{31,14,-22}, -{31,14,-21}, -{31,14,-20}, -{31,14,-19}, -{31,14,-18}, -{31,14,-17}, -{31,14,-16}, -{31,14,-15}, -{31,14,-14}, -{31,14,-13}, -{31,14,-12}, -{31,14,-11}, -{31,14,-10}, -{31,14,-9}, -{31,14,-8}, -{31,14,-7}, -{31,14,-6}, -{31,14,-5}, -{31,14,-4}, -{31,14,-3}, -{31,14,-2}, -{31,14,-1}, -{31,14,0}, -{31,14,1}, -{31,14,2}, -{31,14,3}, -{31,14,4}, -{31,14,5}, -{31,14,6}, -{31,14,7}, -{31,14,8}, -{31,14,9}, -{31,14,10}, -{31,14,11}, -{31,14,12}, -{31,14,13}, -{31,14,14}, -{31,14,15}, -{31,14,16}, -{31,14,17}, -{31,14,18}, -{31,14,19}, -{31,14,20}, -{31,14,21}, -{31,14,22}, -{31,14,23}, -{31,14,24}, -{31,14,25}, -{31,14,26}, -{31,14,27}, -{31,14,28}, -{31,14,29}, -{31,14,30}, -{31,14,31}, -{31,14,32}, -{31,14,33}, -{31,14,34}, -{31,14,35}, -{31,14,36}, -{31,14,37}, -{31,14,38}, -{31,14,39}, -{31,14,40}, -{31,14,41}, -{31,15,-49}, -{31,15,-48}, -{31,15,-47}, -{31,15,-46}, -{31,15,-45}, -{31,15,-44}, -{31,15,-43}, -{31,15,-42}, -{31,15,-41}, -{31,15,-40}, -{31,15,-39}, -{31,15,-38}, -{31,15,-37}, -{31,15,-36}, -{31,15,-35}, -{31,15,-34}, -{31,15,-33}, -{31,15,-32}, -{31,15,-31}, -{31,15,-30}, -{31,15,-29}, -{31,15,-28}, -{31,15,-27}, -{31,15,-26}, -{31,15,-25}, -{31,15,-24}, -{31,15,-23}, -{31,15,-22}, -{31,15,-21}, -{31,15,-20}, -{31,15,-19}, -{31,15,-18}, -{31,15,-17}, -{31,15,-16}, -{31,15,-15}, -{31,15,-14}, -{31,15,-13}, -{31,15,-12}, -{31,15,-11}, -{31,15,-10}, -{31,15,-9}, -{31,15,-8}, -{31,15,-7}, -{31,15,-6}, -{31,15,-5}, -{31,15,-4}, -{31,15,-3}, -{31,15,-2}, -{31,15,-1}, -{31,15,0}, -{31,15,1}, -{31,15,2}, -{31,15,3}, -{31,15,4}, -{31,15,5}, -{31,15,6}, -{31,15,7}, -{31,15,8}, -{31,15,9}, -{31,15,10}, -{31,15,11}, -{31,15,12}, -{31,15,13}, -{31,15,14}, -{31,15,15}, -{31,15,16}, -{31,15,17}, -{31,15,18}, -{31,15,19}, -{31,15,20}, -{31,15,21}, -{31,15,22}, -{31,15,23}, -{31,15,24}, -{31,15,25}, -{31,15,26}, -{31,15,27}, -{31,15,28}, -{31,15,29}, -{31,15,30}, -{31,15,31}, -{31,15,32}, -{31,15,33}, -{31,15,34}, -{31,15,35}, -{31,15,36}, -{31,15,37}, -{31,15,38}, -{31,15,39}, -{31,15,40}, -{31,15,41}, -{31,16,-50}, -{31,16,-49}, -{31,16,-48}, -{31,16,-47}, -{31,16,-46}, -{31,16,-45}, -{31,16,-44}, -{31,16,-43}, -{31,16,-42}, -{31,16,-41}, -{31,16,-40}, -{31,16,-39}, -{31,16,-38}, -{31,16,-37}, -{31,16,-36}, -{31,16,-35}, -{31,16,-34}, -{31,16,-33}, -{31,16,-32}, -{31,16,-31}, -{31,16,-30}, -{31,16,-29}, -{31,16,-28}, -{31,16,-27}, -{31,16,-26}, -{31,16,-25}, -{31,16,-24}, -{31,16,-23}, -{31,16,-22}, -{31,16,-21}, -{31,16,-20}, -{31,16,-19}, -{31,16,-18}, -{31,16,-17}, -{31,16,-16}, -{31,16,-15}, -{31,16,-14}, -{31,16,-13}, -{31,16,-12}, -{31,16,-11}, -{31,16,-10}, -{31,16,-9}, -{31,16,-8}, -{31,16,-7}, -{31,16,-6}, -{31,16,-5}, -{31,16,-4}, -{31,16,-3}, -{31,16,-2}, -{31,16,-1}, -{31,16,0}, -{31,16,1}, -{31,16,2}, -{31,16,3}, -{31,16,4}, -{31,16,5}, -{31,16,6}, -{31,16,7}, -{31,16,8}, -{31,16,9}, -{31,16,10}, -{31,16,11}, -{31,16,12}, -{31,16,13}, -{31,16,14}, -{31,16,15}, -{31,16,16}, -{31,16,17}, -{31,16,18}, -{31,16,19}, -{31,16,20}, -{31,16,21}, -{31,16,22}, -{31,16,23}, -{31,16,24}, -{31,16,25}, -{31,16,26}, -{31,16,27}, -{31,16,28}, -{31,16,29}, -{31,16,30}, -{31,16,31}, -{31,16,32}, -{31,16,33}, -{31,16,34}, -{31,16,35}, -{31,16,36}, -{31,16,37}, -{31,16,38}, -{31,16,39}, -{31,16,40}, -{31,16,41}, -{31,17,-51}, -{31,17,-50}, -{31,17,-49}, -{31,17,-48}, -{31,17,-47}, -{31,17,-46}, -{31,17,-45}, -{31,17,-44}, -{31,17,-43}, -{31,17,-42}, -{31,17,-41}, -{31,17,-40}, -{31,17,-39}, -{31,17,-38}, -{31,17,-37}, -{31,17,-36}, -{31,17,-35}, -{31,17,-34}, -{31,17,-33}, -{31,17,-32}, -{31,17,-31}, -{31,17,-30}, -{31,17,-29}, -{31,17,-28}, -{31,17,-27}, -{31,17,-26}, -{31,17,-25}, -{31,17,-24}, -{31,17,-23}, -{31,17,-22}, -{31,17,-21}, -{31,17,-20}, -{31,17,-19}, -{31,17,-18}, -{31,17,-17}, -{31,17,-16}, -{31,17,-15}, -{31,17,-14}, -{31,17,-13}, -{31,17,-12}, -{31,17,-11}, -{31,17,-10}, -{31,17,-9}, -{31,17,-8}, -{31,17,-7}, -{31,17,-6}, -{31,17,-5}, -{31,17,-4}, -{31,17,-3}, -{31,17,-2}, -{31,17,-1}, -{31,17,0}, -{31,17,1}, -{31,17,2}, -{31,17,3}, -{31,17,4}, -{31,17,5}, -{31,17,6}, -{31,17,7}, -{31,17,8}, -{31,17,9}, -{31,17,10}, -{31,17,11}, -{31,17,12}, -{31,17,13}, -{31,17,14}, -{31,17,15}, -{31,17,16}, -{31,17,17}, -{31,17,18}, -{31,17,19}, -{31,17,20}, -{31,17,21}, -{31,17,22}, -{31,17,23}, -{31,17,24}, -{31,17,25}, -{31,17,26}, -{31,17,27}, -{31,17,28}, -{31,17,29}, -{31,17,30}, -{31,17,31}, -{31,17,32}, -{31,17,33}, -{31,17,34}, -{31,17,35}, -{31,17,36}, -{31,17,37}, -{31,17,38}, -{31,17,39}, -{31,17,40}, -{31,17,41}, -{31,18,-52}, -{31,18,-51}, -{31,18,-50}, -{31,18,-49}, -{31,18,-48}, -{31,18,-47}, -{31,18,-46}, -{31,18,-45}, -{31,18,-44}, -{31,18,-43}, -{31,18,-42}, -{31,18,-41}, -{31,18,-40}, -{31,18,-39}, -{31,18,-38}, -{31,18,-37}, -{31,18,-36}, -{31,18,-35}, -{31,18,-34}, -{31,18,-33}, -{31,18,-32}, -{31,18,-31}, -{31,18,-30}, -{31,18,-29}, -{31,18,-28}, -{31,18,-27}, -{31,18,-26}, -{31,18,-25}, -{31,18,-24}, -{31,18,-23}, -{31,18,-22}, -{31,18,-21}, -{31,18,-20}, -{31,18,-19}, -{31,18,-18}, -{31,18,-17}, -{31,18,-16}, -{31,18,-15}, -{31,18,-14}, -{31,18,-13}, -{31,18,-12}, -{31,18,-11}, -{31,18,-10}, -{31,18,-9}, -{31,18,-8}, -{31,18,-7}, -{31,18,-6}, -{31,18,-5}, -{31,18,-4}, -{31,18,-3}, -{31,18,-2}, -{31,18,-1}, -{31,18,0}, -{31,18,1}, -{31,18,2}, -{31,18,3}, -{31,18,4}, -{31,18,5}, -{31,18,6}, -{31,18,7}, -{31,18,8}, -{31,18,9}, -{31,18,10}, -{31,18,11}, -{31,18,12}, -{31,18,13}, -{31,18,14}, -{31,18,15}, -{31,18,16}, -{31,18,17}, -{31,18,18}, -{31,18,19}, -{31,18,20}, -{31,18,21}, -{31,18,22}, -{31,18,23}, -{31,18,24}, -{31,18,25}, -{31,18,26}, -{31,18,27}, -{31,18,28}, -{31,18,29}, -{31,18,30}, -{31,18,31}, -{31,18,32}, -{31,18,33}, -{31,18,34}, -{31,18,35}, -{31,18,36}, -{31,18,37}, -{31,18,38}, -{31,18,39}, -{31,18,40}, -{31,18,41}, -{31,19,-53}, -{31,19,-52}, -{31,19,-51}, -{31,19,-50}, -{31,19,-49}, -{31,19,-48}, -{31,19,-47}, -{31,19,-46}, -{31,19,-45}, -{31,19,-44}, -{31,19,-43}, -{31,19,-42}, -{31,19,-41}, -{31,19,-40}, -{31,19,-39}, -{31,19,-38}, -{31,19,-37}, -{31,19,-36}, -{31,19,-35}, -{31,19,-34}, -{31,19,-33}, -{31,19,-32}, -{31,19,-31}, -{31,19,-30}, -{31,19,-29}, -{31,19,-28}, -{31,19,-27}, -{31,19,-26}, -{31,19,-25}, -{31,19,-24}, -{31,19,-23}, -{31,19,-22}, -{31,19,-21}, -{31,19,-20}, -{31,19,-19}, -{31,19,-18}, -{31,19,-17}, -{31,19,-16}, -{31,19,-15}, -{31,19,-14}, -{31,19,-13}, -{31,19,-12}, -{31,19,-11}, -{31,19,-10}, -{31,19,-9}, -{31,19,-8}, -{31,19,-7}, -{31,19,-6}, -{31,19,-5}, -{31,19,-4}, -{31,19,-3}, -{31,19,-2}, -{31,19,-1}, -{31,19,0}, -{31,19,1}, -{31,19,2}, -{31,19,3}, -{31,19,4}, -{31,19,5}, -{31,19,6}, -{31,19,7}, -{31,19,8}, -{31,19,9}, -{31,19,10}, -{31,19,11}, -{31,19,12}, -{31,19,13}, -{31,19,14}, -{31,19,15}, -{31,19,16}, -{31,19,17}, -{31,19,18}, -{31,19,19}, -{31,19,20}, -{31,19,21}, -{31,19,22}, -{31,19,23}, -{31,19,24}, -{31,19,25}, -{31,19,26}, -{31,19,27}, -{31,19,28}, -{31,19,29}, -{31,19,30}, -{31,19,31}, -{31,19,32}, -{31,19,33}, -{31,19,34}, -{31,19,35}, -{31,19,36}, -{31,19,37}, -{31,19,38}, -{31,19,39}, -{31,19,40}, -{31,19,41}, -{31,20,-54}, -{31,20,-53}, -{31,20,-52}, -{31,20,-51}, -{31,20,-50}, -{31,20,-49}, -{31,20,-48}, -{31,20,-47}, -{31,20,-46}, -{31,20,-45}, -{31,20,-44}, -{31,20,-43}, -{31,20,-42}, -{31,20,-41}, -{31,20,-40}, -{31,20,-39}, -{31,20,-38}, -{31,20,-37}, -{31,20,-36}, -{31,20,-35}, -{31,20,-34}, -{31,20,-33}, -{31,20,-32}, -{31,20,-31}, -{31,20,-30}, -{31,20,-29}, -{31,20,-28}, -{31,20,-27}, -{31,20,-26}, -{31,20,-25}, -{31,20,-24}, -{31,20,-23}, -{31,20,-22}, -{31,20,-21}, -{31,20,-20}, -{31,20,-19}, -{31,20,-18}, -{31,20,-17}, -{31,20,-16}, -{31,20,-15}, -{31,20,-14}, -{31,20,-13}, -{31,20,-12}, -{31,20,-11}, -{31,20,-10}, -{31,20,-9}, -{31,20,-8}, -{31,20,-7}, -{31,20,-6}, -{31,20,-5}, -{31,20,-4}, -{31,20,-3}, -{31,20,-2}, -{31,20,-1}, -{31,20,0}, -{31,20,1}, -{31,20,2}, -{31,20,3}, -{31,20,4}, -{31,20,5}, -{31,20,6}, -{31,20,7}, -{31,20,8}, -{31,20,9}, -{31,20,10}, -{31,20,11}, -{31,20,12}, -{31,20,13}, -{31,20,14}, -{31,20,15}, -{31,20,16}, -{31,20,17}, -{31,20,18}, -{31,20,19}, -{31,20,20}, -{31,20,21}, -{31,20,22}, -{31,20,23}, -{31,20,24}, -{31,20,25}, -{31,20,26}, -{31,20,27}, -{31,20,28}, -{31,20,29}, -{31,20,30}, -{31,20,31}, -{31,20,32}, -{31,20,33}, -{31,20,34}, -{31,20,35}, -{31,20,36}, -{31,20,37}, -{31,20,38}, -{31,20,39}, -{31,20,40}, -{31,20,41}, -{31,21,-55}, -{31,21,-54}, -{31,21,-53}, -{31,21,-52}, -{31,21,-51}, -{31,21,-50}, -{31,21,-49}, -{31,21,-48}, -{31,21,-47}, -{31,21,-46}, -{31,21,-45}, -{31,21,-44}, -{31,21,-43}, -{31,21,-42}, -{31,21,-41}, -{31,21,-40}, -{31,21,-39}, -{31,21,-38}, -{31,21,-37}, -{31,21,-36}, -{31,21,-35}, -{31,21,-34}, -{31,21,-33}, -{31,21,-32}, -{31,21,-31}, -{31,21,-30}, -{31,21,-29}, -{31,21,-28}, -{31,21,-27}, -{31,21,-26}, -{31,21,-25}, -{31,21,-24}, -{31,21,-23}, -{31,21,-22}, -{31,21,-21}, -{31,21,-20}, -{31,21,-19}, -{31,21,-18}, -{31,21,-17}, -{31,21,-16}, -{31,21,-15}, -{31,21,-14}, -{31,21,-13}, -{31,21,-12}, -{31,21,-11}, -{31,21,-10}, -{31,21,-9}, -{31,21,-8}, -{31,21,-7}, -{31,21,-6}, -{31,21,-5}, -{31,21,-4}, -{31,21,-3}, -{31,21,-2}, -{31,21,-1}, -{31,21,0}, -{31,21,1}, -{31,21,2}, -{31,21,3}, -{31,21,4}, -{31,21,5}, -{31,21,6}, -{31,21,7}, -{31,21,8}, -{31,21,9}, -{31,21,10}, -{31,21,11}, -{31,21,12}, -{31,21,13}, -{31,21,14}, -{31,21,15}, -{31,21,16}, -{31,21,17}, -{31,21,18}, -{31,21,19}, -{31,21,20}, -{31,21,21}, -{31,21,22}, -{31,21,23}, -{31,21,24}, -{31,21,25}, -{31,21,26}, -{31,21,27}, -{31,21,28}, -{31,21,29}, -{31,21,30}, -{31,21,31}, -{31,21,32}, -{31,21,33}, -{31,21,34}, -{31,21,35}, -{31,21,36}, -{31,21,37}, -{31,21,38}, -{31,21,39}, -{31,21,40}, -{31,21,41}, -{31,22,-56}, -{31,22,-55}, -{31,22,-54}, -{31,22,-53}, -{31,22,-52}, -{31,22,-51}, -{31,22,-50}, -{31,22,-49}, -{31,22,-48}, -{31,22,-47}, -{31,22,-46}, -{31,22,-45}, -{31,22,-44}, -{31,22,-43}, -{31,22,-42}, -{31,22,-41}, -{31,22,-40}, -{31,22,-39}, -{31,22,-38}, -{31,22,-37}, -{31,22,-36}, -{31,22,-35}, -{31,22,-34}, -{31,22,-33}, -{31,22,-32}, -{31,22,-31}, -{31,22,-30}, -{31,22,-29}, -{31,22,-28}, -{31,22,-27}, -{31,22,-26}, -{31,22,-25}, -{31,22,-24}, -{31,22,-23}, -{31,22,-22}, -{31,22,-21}, -{31,22,-20}, -{31,22,-19}, -{31,22,-18}, -{31,22,-17}, -{31,22,-16}, -{31,22,-15}, -{31,22,-14}, -{31,22,-13}, -{31,22,-12}, -{31,22,-11}, -{31,22,-10}, -{31,22,-9}, -{31,22,-8}, -{31,22,-7}, -{31,22,-6}, -{31,22,-5}, -{31,22,-4}, -{31,22,-3}, -{31,22,-2}, -{31,22,-1}, -{31,22,0}, -{31,22,1}, -{31,22,2}, -{31,22,3}, -{31,22,4}, -{31,22,5}, -{31,22,6}, -{31,22,7}, -{31,22,8}, -{31,22,9}, -{31,22,10}, -{31,22,11}, -{31,22,12}, -{31,22,13}, -{31,22,14}, -{31,22,15}, -{31,22,16}, -{31,22,17}, -{31,22,18}, -{31,22,19}, -{31,22,20}, -{31,22,21}, -{31,22,22}, -{31,22,23}, -{31,22,24}, -{31,22,25}, -{31,22,26}, -{31,22,27}, -{31,22,28}, -{31,22,29}, -{31,22,30}, -{31,22,31}, -{31,22,32}, -{31,22,33}, -{31,22,34}, -{31,22,35}, -{31,22,36}, -{31,22,37}, -{31,22,38}, -{31,22,39}, -{31,22,40}, -{31,22,41}, -{31,23,-57}, -{31,23,-56}, -{31,23,-55}, -{31,23,-54}, -{31,23,-53}, -{31,23,-52}, -{31,23,-51}, -{31,23,-50}, -{31,23,-49}, -{31,23,-48}, -{31,23,-47}, -{31,23,-46}, -{31,23,-45}, -{31,23,-44}, -{31,23,-43}, -{31,23,-42}, -{31,23,-41}, -{31,23,-40}, -{31,23,-39}, -{31,23,-38}, -{31,23,-37}, -{31,23,-36}, -{31,23,-35}, -{31,23,-34}, -{31,23,-33}, -{31,23,-32}, -{31,23,-31}, -{31,23,-30}, -{31,23,-29}, -{31,23,-28}, -{31,23,-27}, -{31,23,-26}, -{31,23,-25}, -{31,23,-24}, -{31,23,-23}, -{31,23,-22}, -{31,23,-21}, -{31,23,-20}, -{31,23,-19}, -{31,23,-18}, -{31,23,-17}, -{31,23,-16}, -{31,23,-15}, -{31,23,-14}, -{31,23,-13}, -{31,23,-12}, -{31,23,-11}, -{31,23,-10}, -{31,23,-9}, -{31,23,-8}, -{31,23,-7}, -{31,23,-6}, -{31,23,-5}, -{31,23,-4}, -{31,23,-3}, -{31,23,-2}, -{31,23,-1}, -{31,23,0}, -{31,23,1}, -{31,23,2}, -{31,23,3}, -{31,23,4}, -{31,23,5}, -{31,23,6}, -{31,23,7}, -{31,23,8}, -{31,23,9}, -{31,23,10}, -{31,23,11}, -{31,23,12}, -{31,23,13}, -{31,23,14}, -{31,23,15}, -{31,23,16}, -{31,23,17}, -{31,23,18}, -{31,23,19}, -{31,23,20}, -{31,23,21}, -{31,23,22}, -{31,23,23}, -{31,23,24}, -{31,23,25}, -{31,23,26}, -{31,23,27}, -{31,23,28}, -{31,23,29}, -{31,23,30}, -{31,23,31}, -{31,23,32}, -{31,23,33}, -{31,23,34}, -{31,23,35}, -{31,23,36}, -{31,23,37}, -{31,23,38}, -{31,23,39}, -{31,23,40}, -{31,23,41}, -{31,24,-58}, -{31,24,-57}, -{31,24,-56}, -{31,24,-55}, -{31,24,-54}, -{31,24,-53}, -{31,24,-52}, -{31,24,-51}, -{31,24,-50}, -{31,24,-49}, -{31,24,-48}, -{31,24,-47}, -{31,24,-46}, -{31,24,-45}, -{31,24,-44}, -{31,24,-43}, -{31,24,-42}, -{31,24,-41}, -{31,24,-40}, -{31,24,-39}, -{31,24,-38}, -{31,24,-37}, -{31,24,-36}, -{31,24,-35}, -{31,24,-34}, -{31,24,-33}, -{31,24,-32}, -{31,24,-31}, -{31,24,-30}, -{31,24,-29}, -{31,24,-28}, -{31,24,-27}, -{31,24,-26}, -{31,24,-25}, -{31,24,-24}, -{31,24,-23}, -{31,24,-22}, -{31,24,-21}, -{31,24,-20}, -{31,24,-19}, -{31,24,-18}, -{31,24,-17}, -{31,24,-16}, -{31,24,-15}, -{31,24,-14}, -{31,24,-13}, -{31,24,-12}, -{31,24,-11}, -{31,24,-10}, -{31,24,-9}, -{31,24,-8}, -{31,24,-7}, -{31,24,-6}, -{31,24,-5}, -{31,24,-4}, -{31,24,-3}, -{31,24,-2}, -{31,24,-1}, -{31,24,0}, -{31,24,1}, -{31,24,2}, -{31,24,3}, -{31,24,4}, -{31,24,5}, -{31,24,6}, -{31,24,7}, -{31,24,8}, -{31,24,9}, -{31,24,10}, -{31,24,11}, -{31,24,12}, -{31,24,13}, -{31,24,14}, -{31,24,15}, -{31,24,16}, -{31,24,17}, -{31,24,18}, -{31,24,19}, -{31,24,20}, -{31,24,21}, -{31,24,22}, -{31,24,23}, -{31,24,24}, -{31,24,25}, -{31,24,26}, -{31,24,27}, -{31,24,28}, -{31,24,29}, -{31,24,30}, -{31,24,31}, -{31,24,32}, -{31,24,33}, -{31,24,34}, -{31,24,35}, -{31,24,36}, -{31,24,37}, -{31,24,38}, -{31,24,39}, -{31,24,40}, -{31,24,41}, -{31,25,-59}, -{31,25,-58}, -{31,25,-57}, -{31,25,-56}, -{31,25,-55}, -{31,25,-54}, -{31,25,-53}, -{31,25,-52}, -{31,25,-51}, -{31,25,-50}, -{31,25,-49}, -{31,25,-48}, -{31,25,-47}, -{31,25,-46}, -{31,25,-45}, -{31,25,-44}, -{31,25,-43}, -{31,25,-42}, -{31,25,-41}, -{31,25,-40}, -{31,25,-39}, -{31,25,-38}, -{31,25,-37}, -{31,25,-36}, -{31,25,-35}, -{31,25,-34}, -{31,25,-33}, -{31,25,-32}, -{31,25,-31}, -{31,25,-30}, -{31,25,-29}, -{31,25,-28}, -{31,25,-27}, -{31,25,-26}, -{31,25,-25}, -{31,25,-24}, -{31,25,-23}, -{31,25,-22}, -{31,25,-21}, -{31,25,-20}, -{31,25,-19}, -{31,25,-18}, -{31,25,-17}, -{31,25,-16}, -{31,25,-15}, -{31,25,-14}, -{31,25,-13}, -{31,25,-12}, -{31,25,-11}, -{31,25,-10}, -{31,25,-9}, -{31,25,-8}, -{31,25,-7}, -{31,25,-6}, -{31,25,-5}, -{31,25,-4}, -{31,25,-3}, -{31,25,-2}, -{31,25,-1}, -{31,25,0}, -{31,25,1}, -{31,25,2}, -{31,25,3}, -{31,25,4}, -{31,25,5}, -{31,25,6}, -{31,25,7}, -{31,25,8}, -{31,25,9}, -{31,25,10}, -{31,25,11}, -{31,25,12}, -{31,25,13}, -{31,25,14}, -{31,25,15}, -{31,25,16}, -{31,25,17}, -{31,25,18}, -{31,25,19}, -{31,25,20}, -{31,25,21}, -{31,25,22}, -{31,25,23}, -{31,25,24}, -{31,25,25}, -{31,25,26}, -{31,25,27}, -{31,25,28}, -{31,25,29}, -{31,25,30}, -{31,25,31}, -{31,25,32}, -{31,25,33}, -{31,25,34}, -{31,25,35}, -{31,25,36}, -{31,25,37}, -{31,25,38}, -{31,25,39}, -{31,25,40}, -{31,25,41}, -{31,25,42}, -{31,26,-60}, -{31,26,-59}, -{31,26,-58}, -{31,26,-57}, -{31,26,-56}, -{31,26,-55}, -{31,26,-54}, -{31,26,-53}, -{31,26,-52}, -{31,26,-51}, -{31,26,-50}, -{31,26,-49}, -{31,26,-48}, -{31,26,-47}, -{31,26,-46}, -{31,26,-45}, -{31,26,-44}, -{31,26,-43}, -{31,26,-42}, -{31,26,-41}, -{31,26,-40}, -{31,26,-39}, -{31,26,-38}, -{31,26,-37}, -{31,26,-36}, -{31,26,-35}, -{31,26,-34}, -{31,26,-33}, -{31,26,-32}, -{31,26,-31}, -{31,26,-30}, -{31,26,-29}, -{31,26,-28}, -{31,26,-27}, -{31,26,-26}, -{31,26,-25}, -{31,26,-24}, -{31,26,-23}, -{31,26,-22}, -{31,26,-21}, -{31,26,-20}, -{31,26,-19}, -{31,26,-18}, -{31,26,-17}, -{31,26,-16}, -{31,26,-15}, -{31,26,-14}, -{31,26,-13}, -{31,26,-12}, -{31,26,-11}, -{31,26,-10}, -{31,26,-9}, -{31,26,-8}, -{31,26,-7}, -{31,26,-6}, -{31,26,-5}, -{31,26,-4}, -{31,26,-3}, -{31,26,-2}, -{31,26,-1}, -{31,26,0}, -{31,26,1}, -{31,26,2}, -{31,26,3}, -{31,26,4}, -{31,26,5}, -{31,26,6}, -{31,26,7}, -{31,26,8}, -{31,26,9}, -{31,26,10}, -{31,26,11}, -{31,26,12}, -{31,26,13}, -{31,26,14}, -{31,26,15}, -{31,26,16}, -{31,26,17}, -{31,26,18}, -{31,26,19}, -{31,26,20}, -{31,26,21}, -{31,26,22}, -{31,26,23}, -{31,26,24}, -{31,26,25}, -{31,26,26}, -{31,26,27}, -{31,26,28}, -{31,26,29}, -{31,26,30}, -{31,26,31}, -{31,26,32}, -{31,26,33}, -{31,26,34}, -{31,26,35}, -{31,26,36}, -{31,26,37}, -{31,26,38}, -{31,26,39}, -{31,26,40}, -{31,26,41}, -{31,26,42}, -{31,27,-61}, -{31,27,-60}, -{31,27,-59}, -{31,27,-58}, -{31,27,-57}, -{31,27,-56}, -{31,27,-55}, -{31,27,-54}, -{31,27,-53}, -{31,27,-52}, -{31,27,-51}, -{31,27,-50}, -{31,27,-49}, -{31,27,-48}, -{31,27,-47}, -{31,27,-46}, -{31,27,-45}, -{31,27,-44}, -{31,27,-43}, -{31,27,-42}, -{31,27,-41}, -{31,27,-40}, -{31,27,-39}, -{31,27,-38}, -{31,27,-37}, -{31,27,-36}, -{31,27,-35}, -{31,27,-34}, -{31,27,-33}, -{31,27,-32}, -{31,27,-31}, -{31,27,-30}, -{31,27,-29}, -{31,27,-28}, -{31,27,-27}, -{31,27,-26}, -{31,27,-25}, -{31,27,-24}, -{31,27,-23}, -{31,27,-22}, -{31,27,-21}, -{31,27,-20}, -{31,27,-19}, -{31,27,-18}, -{31,27,-17}, -{31,27,-16}, -{31,27,-15}, -{31,27,-14}, -{31,27,-13}, -{31,27,-12}, -{31,27,-11}, -{31,27,-10}, -{31,27,-9}, -{31,27,-8}, -{31,27,-7}, -{31,27,-6}, -{31,27,-5}, -{31,27,-4}, -{31,27,-3}, -{31,27,-2}, -{31,27,-1}, -{31,27,0}, -{31,27,1}, -{31,27,2}, -{31,27,3}, -{31,27,4}, -{31,27,5}, -{31,27,6}, -{31,27,7}, -{31,27,8}, -{31,27,9}, -{31,27,10}, -{31,27,11}, -{31,27,12}, -{31,27,13}, -{31,27,14}, -{31,27,15}, -{31,27,16}, -{31,27,17}, -{31,27,18}, -{31,27,19}, -{31,27,20}, -{31,27,21}, -{31,27,22}, -{31,27,23}, -{31,27,24}, -{31,27,25}, -{31,27,26}, -{31,27,27}, -{31,27,28}, -{31,27,29}, -{31,27,30}, -{31,27,31}, -{31,27,32}, -{31,27,33}, -{31,27,34}, -{31,27,35}, -{31,27,36}, -{31,27,37}, -{31,27,38}, -{31,27,39}, -{31,27,40}, -{31,27,41}, -{31,27,42}, -{31,28,-62}, -{31,28,-61}, -{31,28,-60}, -{31,28,-59}, -{31,28,-58}, -{31,28,-57}, -{31,28,-56}, -{31,28,-55}, -{31,28,-54}, -{31,28,-53}, -{31,28,-52}, -{31,28,-51}, -{31,28,-50}, -{31,28,-49}, -{31,28,-48}, -{31,28,-47}, -{31,28,-46}, -{31,28,-45}, -{31,28,-44}, -{31,28,-43}, -{31,28,-42}, -{31,28,-41}, -{31,28,-40}, -{31,28,-39}, -{31,28,-38}, -{31,28,-37}, -{31,28,-36}, -{31,28,-35}, -{31,28,-34}, -{31,28,-33}, -{31,28,-32}, -{31,28,-31}, -{31,28,-30}, -{31,28,-29}, -{31,28,-28}, -{31,28,-27}, -{31,28,-26}, -{31,28,-25}, -{31,28,-24}, -{31,28,-23}, -{31,28,-22}, -{31,28,-21}, -{31,28,-20}, -{31,28,-19}, -{31,28,-18}, -{31,28,-17}, -{31,28,-16}, -{31,28,-15}, -{31,28,-14}, -{31,28,-13}, -{31,28,-12}, -{31,28,-11}, -{31,28,-10}, -{31,28,-9}, -{31,28,-8}, -{31,28,-7}, -{31,28,-6}, -{31,28,-5}, -{31,28,-4}, -{31,28,-3}, -{31,28,-2}, -{31,28,-1}, -{31,28,0}, -{31,28,1}, -{31,28,2}, -{31,28,3}, -{31,28,4}, -{31,28,5}, -{31,28,6}, -{31,28,7}, -{31,28,8}, -{31,28,9}, -{31,28,10}, -{31,28,11}, -{31,28,12}, -{31,28,13}, -{31,28,14}, -{31,28,15}, -{31,28,16}, -{31,28,17}, -{31,28,18}, -{31,28,19}, -{31,28,20}, -{31,28,21}, -{31,28,22}, -{31,28,23}, -{31,28,24}, -{31,28,25}, -{31,28,26}, -{31,28,27}, -{31,28,28}, -{31,28,29}, -{31,28,30}, -{31,28,31}, -{31,28,32}, -{31,28,33}, -{31,28,34}, -{31,28,35}, -{31,28,36}, -{31,28,37}, -{31,28,38}, -{31,28,39}, -{31,28,40}, -{31,28,41}, -{31,28,42}, -{31,29,-63}, -{31,29,-62}, -{31,29,-61}, -{31,29,-60}, -{31,29,-59}, -{31,29,-58}, -{31,29,-57}, -{31,29,-56}, -{31,29,-55}, -{31,29,-54}, -{31,29,-53}, -{31,29,-52}, -{31,29,-51}, -{31,29,-50}, -{31,29,-49}, -{31,29,-48}, -{31,29,-47}, -{31,29,-46}, -{31,29,-45}, -{31,29,-44}, -{31,29,-43}, -{31,29,-42}, -{31,29,-41}, -{31,29,-40}, -{31,29,-39}, -{31,29,-38}, -{31,29,-37}, -{31,29,-36}, -{31,29,-35}, -{31,29,-34}, -{31,29,-33}, -{31,29,-32}, -{31,29,-31}, -{31,29,-30}, -{31,29,-29}, -{31,29,-28}, -{31,29,-27}, -{31,29,-26}, -{31,29,-25}, -{31,29,-24}, -{31,29,-23}, -{31,29,-22}, -{31,29,-21}, -{31,29,-20}, -{31,29,-19}, -{31,29,-18}, -{31,29,-17}, -{31,29,-16}, -{31,29,-15}, -{31,29,-14}, -{31,29,-13}, -{31,29,-12}, -{31,29,-11}, -{31,29,-10}, -{31,29,-9}, -{31,29,-8}, -{31,29,-7}, -{31,29,-6}, -{31,29,-5}, -{31,29,-4}, -{31,29,-3}, -{31,29,-2}, -{31,29,-1}, -{31,29,0}, -{31,29,1}, -{31,29,2}, -{31,29,3}, -{31,29,4}, -{31,29,5}, -{31,29,6}, -{31,29,7}, -{31,29,8}, -{31,29,9}, -{31,29,10}, -{31,29,11}, -{31,29,12}, -{31,29,13}, -{31,29,14}, -{31,29,15}, -{31,29,16}, -{31,29,17}, -{31,29,18}, -{31,29,19}, -{31,29,20}, -{31,29,21}, -{31,29,22}, -{31,29,23}, -{31,29,24}, -{31,29,25}, -{31,29,26}, -{31,29,27}, -{31,29,28}, -{31,29,29}, -{31,29,30}, -{31,29,31}, -{31,29,32}, -{31,29,33}, -{31,29,34}, -{31,29,35}, -{31,29,36}, -{31,29,37}, -{31,29,38}, -{31,29,39}, -{31,29,40}, -{31,29,41}, -{31,29,42}, -{31,30,-64}, -{31,30,-63}, -{31,30,-62}, -{31,30,-61}, -{31,30,-60}, -{31,30,-59}, -{31,30,-58}, -{31,30,-57}, -{31,30,-56}, -{31,30,-55}, -{31,30,-54}, -{31,30,-53}, -{31,30,-52}, -{31,30,-51}, -{31,30,-50}, -{31,30,-49}, -{31,30,-48}, -{31,30,-47}, -{31,30,-46}, -{31,30,-45}, -{31,30,-44}, -{31,30,-43}, -{31,30,-42}, -{31,30,-41}, -{31,30,-40}, -{31,30,-39}, -{31,30,-38}, -{31,30,-37}, -{31,30,-36}, -{31,30,-35}, -{31,30,-34}, -{31,30,-33}, -{31,30,-32}, -{31,30,-31}, -{31,30,-30}, -{31,30,-29}, -{31,30,-28}, -{31,30,-27}, -{31,30,-26}, -{31,30,-25}, -{31,30,-24}, -{31,30,-23}, -{31,30,-22}, -{31,30,-21}, -{31,30,-20}, -{31,30,-19}, -{31,30,-18}, -{31,30,-17}, -{31,30,-16}, -{31,30,-15}, -{31,30,-14}, -{31,30,-13}, -{31,30,-12}, -{31,30,-11}, -{31,30,-10}, -{31,30,-9}, -{31,30,-8}, -{31,30,-7}, -{31,30,-6}, -{31,30,-5}, -{31,30,-4}, -{31,30,-3}, -{31,30,-2}, -{31,30,-1}, -{31,30,0}, -{31,30,1}, -{31,30,2}, -{31,30,3}, -{31,30,4}, -{31,30,5}, -{31,30,6}, -{31,30,7}, -{31,30,8}, -{31,30,9}, -{31,30,10}, -{31,30,11}, -{31,30,12}, -{31,30,13}, -{31,30,14}, -{31,30,15}, -{31,30,16}, -{31,30,17}, -{31,30,18}, -{31,30,19}, -{31,30,20}, -{31,30,21}, -{31,30,22}, -{31,30,23}, -{31,30,24}, -{31,30,25}, -{31,30,26}, -{31,30,27}, -{31,30,28}, -{31,30,29}, -{31,30,30}, -{31,30,31}, -{31,30,32}, -{31,30,33}, -{31,30,34}, -{31,30,35}, -{31,30,36}, -{31,30,37}, -{31,30,38}, -{31,30,39}, -{31,30,40}, -{31,30,41}, -{31,30,42}, -{31,31,-65}, -{31,31,-64}, -{31,31,-63}, -{31,31,-62}, -{31,31,-61}, -{31,31,-60}, -{31,31,-59}, -{31,31,-58}, -{31,31,-57}, -{31,31,-56}, -{31,31,-55}, -{31,31,-54}, -{31,31,-53}, -{31,31,-52}, -{31,31,-51}, -{31,31,-50}, -{31,31,-49}, -{31,31,-48}, -{31,31,-47}, -{31,31,-46}, -{31,31,-45}, -{31,31,-44}, -{31,31,-43}, -{31,31,-42}, -{31,31,-41}, -{31,31,-40}, -{31,31,-39}, -{31,31,-38}, -{31,31,-37}, -{31,31,-36}, -{31,31,-35}, -{31,31,-34}, -{31,31,-33}, -{31,31,-32}, -{31,31,-31}, -{31,31,-30}, -{31,31,-29}, -{31,31,-28}, -{31,31,-27}, -{31,31,-26}, -{31,31,-25}, -{31,31,-24}, -{31,31,-23}, -{31,31,-22}, -{31,31,-21}, -{31,31,-20}, -{31,31,-19}, -{31,31,-18}, -{31,31,-17}, -{31,31,-16}, -{31,31,-15}, -{31,31,-14}, -{31,31,-13}, -{31,31,-12}, -{31,31,-11}, -{31,31,-10}, -{31,31,-9}, -{31,31,-8}, -{31,31,-7}, -{31,31,-6}, -{31,31,-5}, -{31,31,-4}, -{31,31,-3}, -{31,31,-2}, -{31,31,-1}, -{31,31,0}, -{31,31,1}, -{31,31,2}, -{31,31,3}, -{31,31,4}, -{31,31,5}, -{31,31,6}, -{31,31,7}, -{31,31,8}, -{31,31,9}, -{31,31,10}, -{31,31,11}, -{31,31,12}, -{31,31,13}, -{31,31,14}, -{31,31,15}, -{31,31,16}, -{31,31,17}, -{31,31,18}, -{31,31,19}, -{31,31,20}, -{31,31,21}, -{31,31,22}, -{31,31,23}, -{31,31,24}, -{31,31,25}, -{31,31,26}, -{31,31,27}, -{31,31,28}, -{31,31,29}, -{31,31,30}, -{31,31,31}, -{31,31,32}, -{31,31,33}, -{31,31,34}, -{31,31,35}, -{31,31,36}, -{31,31,37}, -{31,31,38}, -{31,31,39}, -{31,31,40}, -{31,31,41}, -{31,31,42}, -{31,32,-66}, -{31,32,-65}, -{31,32,-64}, -{31,32,-63}, -{31,32,-62}, -{31,32,-61}, -{31,32,-60}, -{31,32,-59}, -{31,32,-58}, -{31,32,-57}, -{31,32,-56}, -{31,32,-55}, -{31,32,-54}, -{31,32,-53}, -{31,32,-52}, -{31,32,-51}, -{31,32,-50}, -{31,32,-49}, -{31,32,-48}, -{31,32,-47}, -{31,32,-46}, -{31,32,-45}, -{31,32,-44}, -{31,32,-43}, -{31,32,-42}, -{31,32,-41}, -{31,32,-40}, -{31,32,-39}, -{31,32,-38}, -{31,32,-37}, -{31,32,-36}, -{31,32,-35}, -{31,32,-34}, -{31,32,-33}, -{31,32,-32}, -{31,32,-31}, -{31,32,-30}, -{31,32,-29}, -{31,32,-28}, -{31,32,-27}, -{31,32,-26}, -{31,32,-25}, -{31,32,-24}, -{31,32,-23}, -{31,32,-22}, -{31,32,-21}, -{31,32,-20}, -{31,32,-19}, -{31,32,-18}, -{31,32,-17}, -{31,32,-16}, -{31,32,-15}, -{31,32,-14}, -{31,32,-13}, -{31,32,-12}, -{31,32,-11}, -{31,32,-10}, -{31,32,-9}, -{31,32,-8}, -{31,32,-7}, -{31,32,-6}, -{31,32,-5}, -{31,32,-4}, -{31,32,-3}, -{31,32,-2}, -{31,32,-1}, -{31,32,0}, -{31,32,1}, -{31,32,2}, -{31,32,3}, -{31,32,4}, -{31,32,5}, -{31,32,6}, -{31,32,7}, -{31,32,8}, -{31,32,9}, -{31,32,10}, -{31,32,11}, -{31,32,12}, -{31,32,13}, -{31,32,14}, -{31,32,15}, -{31,32,16}, -{31,32,17}, -{31,32,18}, -{31,32,19}, -{31,32,20}, -{31,32,21}, -{31,32,22}, -{31,32,23}, -{31,32,24}, -{31,32,25}, -{31,32,26}, -{31,32,27}, -{31,32,28}, -{31,32,29}, -{31,32,30}, -{31,32,31}, -{31,32,32}, -{31,32,33}, -{31,32,34}, -{31,32,35}, -{31,32,36}, -{31,32,37}, -{31,32,38}, -{31,32,39}, -{31,32,40}, -{31,32,41}, -{31,32,42}, -{31,33,-67}, -{31,33,-66}, -{31,33,-65}, -{31,33,-64}, -{31,33,-63}, -{31,33,-62}, -{31,33,-61}, -{31,33,-60}, -{31,33,-59}, -{31,33,-58}, -{31,33,-57}, -{31,33,-56}, -{31,33,-55}, -{31,33,-54}, -{31,33,-53}, -{31,33,-52}, -{31,33,-51}, -{31,33,-50}, -{31,33,-49}, -{31,33,-48}, -{31,33,-47}, -{31,33,-46}, -{31,33,-45}, -{31,33,-44}, -{31,33,-43}, -{31,33,-42}, -{31,33,-41}, -{31,33,-40}, -{31,33,-39}, -{31,33,-38}, -{31,33,-37}, -{31,33,-36}, -{31,33,-35}, -{31,33,-34}, -{31,33,-33}, -{31,33,-32}, -{31,33,-31}, -{31,33,-30}, -{31,33,-29}, -{31,33,-28}, -{31,33,-27}, -{31,33,-26}, -{31,33,-25}, -{31,33,-24}, -{31,33,-23}, -{31,33,-22}, -{31,33,-21}, -{31,33,-20}, -{31,33,-19}, -{31,33,-18}, -{31,33,-17}, -{31,33,-16}, -{31,33,-15}, -{31,33,-14}, -{31,33,-13}, -{31,33,-12}, -{31,33,-11}, -{31,33,-10}, -{31,33,-9}, -{31,33,-8}, -{31,33,-7}, -{31,33,-6}, -{31,33,-5}, -{31,33,-4}, -{31,33,-3}, -{31,33,-2}, -{31,33,-1}, -{31,33,0}, -{31,33,1}, -{31,33,2}, -{31,33,3}, -{31,33,4}, -{31,33,5}, -{31,33,6}, -{31,33,7}, -{31,33,8}, -{31,33,9}, -{31,33,10}, -{31,33,11}, -{31,33,12}, -{31,33,13}, -{31,33,14}, -{31,33,15}, -{31,33,16}, -{31,33,17}, -{31,33,18}, -{31,33,19}, -{31,33,20}, -{31,33,21}, -{31,33,22}, -{31,33,23}, -{31,33,24}, -{31,33,25}, -{31,33,26}, -{31,33,27}, -{31,33,28}, -{31,33,29}, -{31,33,30}, -{31,33,31}, -{31,33,32}, -{31,33,33}, -{31,33,34}, -{31,33,35}, -{31,33,36}, -{31,33,37}, -{31,33,38}, -{31,33,39}, -{31,33,40}, -{31,33,41}, -{31,33,42}, -{31,34,-68}, -{31,34,-67}, -{31,34,-66}, -{31,34,-65}, -{31,34,-64}, -{31,34,-63}, -{31,34,-62}, -{31,34,-61}, -{31,34,-60}, -{31,34,-59}, -{31,34,-58}, -{31,34,-57}, -{31,34,-56}, -{31,34,-55}, -{31,34,-54}, -{31,34,-53}, -{31,34,-52}, -{31,34,-51}, -{31,34,-50}, -{31,34,-49}, -{31,34,-48}, -{31,34,-47}, -{31,34,-46}, -{31,34,-45}, -{31,34,-44}, -{31,34,-43}, -{31,34,-42}, -{31,34,-41}, -{31,34,-40}, -{31,34,-39}, -{31,34,-38}, -{31,34,-37}, -{31,34,-36}, -{31,34,-35}, -{31,34,-34}, -{31,34,-33}, -{31,34,-32}, -{31,34,-31}, -{31,34,-30}, -{31,34,-29}, -{31,34,-28}, -{31,34,-27}, -{31,34,-26}, -{31,34,-25}, -{31,34,-24}, -{31,34,-23}, -{31,34,-22}, -{31,34,-21}, -{31,34,-20}, -{31,34,-19}, -{31,34,-18}, -{31,34,-17}, -{31,34,-16}, -{31,34,-15}, -{31,34,-14}, -{31,34,-13}, -{31,34,-12}, -{31,34,-11}, -{31,34,-10}, -{31,34,-9}, -{31,34,-8}, -{31,34,-7}, -{31,34,-6}, -{31,34,-5}, -{31,34,-4}, -{31,34,-3}, -{31,34,-2}, -{31,34,-1}, -{31,34,0}, -{31,34,1}, -{31,34,2}, -{31,34,3}, -{31,34,4}, -{31,34,5}, -{31,34,6}, -{31,34,7}, -{31,34,8}, -{31,34,9}, -{31,34,10}, -{31,34,11}, -{31,34,12}, -{31,34,13}, -{31,34,14}, -{31,34,15}, -{31,34,16}, -{31,34,17}, -{31,34,18}, -{31,34,19}, -{31,34,20}, -{31,34,21}, -{31,34,22}, -{31,34,23}, -{31,34,24}, -{31,34,25}, -{31,34,26}, -{31,34,27}, -{31,34,28}, -{31,34,29}, -{31,34,30}, -{31,34,31}, -{31,34,32}, -{31,34,33}, -{31,34,34}, -{31,34,35}, -{31,34,36}, -{31,34,37}, -{31,34,38}, -{31,34,39}, -{31,34,40}, -{31,34,41}, -{31,34,42}, -{31,35,-68}, -{31,35,-67}, -{31,35,-66}, -{31,35,-65}, -{31,35,-64}, -{31,35,-63}, -{31,35,-62}, -{31,35,-61}, -{31,35,-60}, -{31,35,-59}, -{31,35,-58}, -{31,35,-57}, -{31,35,-56}, -{31,35,-55}, -{31,35,-54}, -{31,35,-53}, -{31,35,-52}, -{31,35,-51}, -{31,35,-50}, -{31,35,-49}, -{31,35,-48}, -{31,35,-47}, -{31,35,-46}, -{31,35,-45}, -{31,35,-44}, -{31,35,-43}, -{31,35,-42}, -{31,35,-41}, -{31,35,-40}, -{31,35,-39}, -{31,35,-38}, -{31,35,-37}, -{31,35,-36}, -{31,35,-35}, -{31,35,-34}, -{31,35,-33}, -{31,35,-32}, -{31,35,-31}, -{31,35,-30}, -{31,35,-29}, -{31,35,-28}, -{31,35,-27}, -{31,35,-26}, -{31,35,-25}, -{31,35,-24}, -{31,35,-23}, -{31,35,-22}, -{31,35,-21}, -{31,35,-20}, -{31,35,-19}, -{31,35,-18}, -{31,35,-17}, -{31,35,-16}, -{31,35,-15}, -{31,35,-14}, -{31,35,-13}, -{31,35,-12}, -{31,35,-11}, -{31,35,-10}, -{31,35,-9}, -{31,35,-8}, -{31,35,-7}, -{31,35,-6}, -{31,35,-5}, -{31,35,-4}, -{31,35,-3}, -{31,35,-2}, -{31,35,-1}, -{31,35,0}, -{31,35,1}, -{31,35,2}, -{31,35,3}, -{31,35,4}, -{31,35,5}, -{31,35,6}, -{31,35,7}, -{31,35,8}, -{31,35,9}, -{31,35,10}, -{31,35,11}, -{31,35,12}, -{31,35,13}, -{31,35,14}, -{31,35,15}, -{31,35,16}, -{31,35,17}, -{31,35,18}, -{31,35,19}, -{31,35,20}, -{31,35,21}, -{31,35,22}, -{31,35,23}, -{31,35,24}, -{31,35,25}, -{31,35,26}, -{31,35,27}, -{31,35,28}, -{31,35,29}, -{31,35,30}, -{31,35,31}, -{31,35,32}, -{31,35,33}, -{31,35,34}, -{31,35,35}, -{31,35,36}, -{31,35,37}, -{31,35,38}, -{31,35,39}, -{31,35,40}, -{31,35,41}, -{31,35,42}, -{31,36,-69}, -{31,36,-68}, -{31,36,-67}, -{31,36,-66}, -{31,36,-65}, -{31,36,-64}, -{31,36,-63}, -{31,36,-62}, -{31,36,-61}, -{31,36,-60}, -{31,36,-59}, -{31,36,-58}, -{31,36,-57}, -{31,36,-56}, -{31,36,-55}, -{31,36,-54}, -{31,36,-53}, -{31,36,-52}, -{31,36,-51}, -{31,36,-50}, -{31,36,-49}, -{31,36,-48}, -{31,36,-47}, -{31,36,-46}, -{31,36,-45}, -{31,36,-44}, -{31,36,-43}, -{31,36,-42}, -{31,36,-41}, -{31,36,-40}, -{31,36,-39}, -{31,36,-38}, -{31,36,-37}, -{31,36,-36}, -{31,36,-35}, -{31,36,-34}, -{31,36,-33}, -{31,36,-32}, -{31,36,-31}, -{31,36,-30}, -{31,36,-29}, -{31,36,-28}, -{31,36,-27}, -{31,36,-26}, -{31,36,-25}, -{31,36,-24}, -{31,36,-23}, -{31,36,-22}, -{31,36,-21}, -{31,36,-20}, -{31,36,-19}, -{31,36,-18}, -{31,36,-17}, -{31,36,-16}, -{31,36,-15}, -{31,36,-14}, -{31,36,-13}, -{31,36,-12}, -{31,36,-11}, -{31,36,-10}, -{31,36,-9}, -{31,36,-8}, -{31,36,-7}, -{31,36,-6}, -{31,36,-5}, -{31,36,-4}, -{31,36,-3}, -{31,36,-2}, -{31,36,-1}, -{31,36,0}, -{31,36,1}, -{31,36,2}, -{31,36,3}, -{31,36,4}, -{31,36,5}, -{31,36,6}, -{31,36,7}, -{31,36,8}, -{31,36,9}, -{31,36,10}, -{31,36,11}, -{31,36,12}, -{31,36,13}, -{31,36,14}, -{31,36,15}, -{31,36,16}, -{31,36,17}, -{31,36,18}, -{31,36,19}, -{31,36,20}, -{31,36,21}, -{31,36,22}, -{31,36,23}, -{31,36,24}, -{31,36,25}, -{31,36,26}, -{31,36,27}, -{31,36,28}, -{31,36,29}, -{31,36,30}, -{31,36,31}, -{31,36,32}, -{31,36,33}, -{31,36,34}, -{31,36,35}, -{31,36,36}, -{31,36,37}, -{31,36,38}, -{31,36,39}, -{31,36,40}, -{31,36,41}, -{31,36,42}, -{31,36,43}, -{31,37,-70}, -{31,37,-69}, -{31,37,-68}, -{31,37,-67}, -{31,37,-66}, -{31,37,-65}, -{31,37,-64}, -{31,37,-63}, -{31,37,-62}, -{31,37,-61}, -{31,37,-60}, -{31,37,-59}, -{31,37,-58}, -{31,37,-57}, -{31,37,-56}, -{31,37,-55}, -{31,37,-54}, -{31,37,-53}, -{31,37,-52}, -{31,37,-51}, -{31,37,-50}, -{31,37,-49}, -{31,37,-48}, -{31,37,-47}, -{31,37,-46}, -{31,37,-45}, -{31,37,-44}, -{31,37,-43}, -{31,37,-42}, -{31,37,-41}, -{31,37,-40}, -{31,37,-39}, -{31,37,-38}, -{31,37,-37}, -{31,37,-36}, -{31,37,-35}, -{31,37,-34}, -{31,37,-33}, -{31,37,-32}, -{31,37,-31}, -{31,37,-30}, -{31,37,-29}, -{31,37,-28}, -{31,37,-27}, -{31,37,-26}, -{31,37,-25}, -{31,37,-24}, -{31,37,-23}, -{31,37,-22}, -{31,37,-21}, -{31,37,-20}, -{31,37,-19}, -{31,37,-18}, -{31,37,-17}, -{31,37,-16}, -{31,37,-15}, -{31,37,-14}, -{31,37,-13}, -{31,37,-12}, -{31,37,-11}, -{31,37,-10}, -{31,37,-9}, -{31,37,-8}, -{31,37,-7}, -{31,37,-6}, -{31,37,-5}, -{31,37,-4}, -{31,37,-3}, -{31,37,-2}, -{31,37,-1}, -{31,37,0}, -{31,37,1}, -{31,37,2}, -{31,37,3}, -{31,37,4}, -{31,37,5}, -{31,37,6}, -{31,37,7}, -{31,37,8}, -{31,37,9}, -{31,37,10}, -{31,37,11}, -{31,37,12}, -{31,37,13}, -{31,37,14}, -{31,37,15}, -{31,37,16}, -{31,37,17}, -{31,37,18}, -{31,37,19}, -{31,37,20}, -{31,37,21}, -{31,37,22}, -{31,37,23}, -{31,37,24}, -{31,37,25}, -{31,37,26}, -{31,37,27}, -{31,37,28}, -{31,37,29}, -{31,37,30}, -{31,37,31}, -{31,37,32}, -{31,37,33}, -{31,37,34}, -{31,37,35}, -{31,37,36}, -{31,37,37}, -{31,37,38}, -{31,37,39}, -{31,37,40}, -{31,37,41}, -{31,37,42}, -{31,37,43}, -{31,38,-71}, -{31,38,-70}, -{31,38,-69}, -{31,38,-68}, -{31,38,-67}, -{31,38,-66}, -{31,38,-65}, -{31,38,-64}, -{31,38,-63}, -{31,38,-62}, -{31,38,-61}, -{31,38,-60}, -{31,38,-59}, -{31,38,-58}, -{31,38,-57}, -{31,38,-56}, -{31,38,-55}, -{31,38,-54}, -{31,38,-53}, -{31,38,-52}, -{31,38,-51}, -{31,38,-50}, -{31,38,-49}, -{31,38,-48}, -{31,38,-47}, -{31,38,-46}, -{31,38,-45}, -{31,38,-44}, -{31,38,-43}, -{31,38,-42}, -{31,38,-41}, -{31,38,-40}, -{31,38,-39}, -{31,38,-38}, -{31,38,-37}, -{31,38,-36}, -{31,38,-35}, -{31,38,-34}, -{31,38,-33}, -{31,38,-32}, -{31,38,-31}, -{31,38,-30}, -{31,38,-29}, -{31,38,-28}, -{31,38,-27}, -{31,38,-26}, -{31,38,-25}, -{31,38,-24}, -{31,38,-23}, -{31,38,-22}, -{31,38,-21}, -{31,38,-20}, -{31,38,-19}, -{31,38,-18}, -{31,38,-17}, -{31,38,-16}, -{31,38,-15}, -{31,38,-14}, -{31,38,-13}, -{31,38,-12}, -{31,38,-11}, -{31,38,-10}, -{31,38,-9}, -{31,38,-8}, -{31,38,-7}, -{31,38,-6}, -{31,38,-5}, -{31,38,-4}, -{31,38,-3}, -{31,38,-2}, -{31,38,-1}, -{31,38,0}, -{31,38,1}, -{31,38,2}, -{31,38,3}, -{31,38,4}, -{31,38,5}, -{31,38,6}, -{31,38,7}, -{31,38,8}, -{31,38,9}, -{31,38,10}, -{31,38,11}, -{31,38,12}, -{31,38,13}, -{31,38,14}, -{31,38,15}, -{31,38,16}, -{31,38,17}, -{31,38,18}, -{31,38,19}, -{31,38,20}, -{31,38,21}, -{31,38,22}, -{31,38,23}, -{31,38,24}, -{31,38,25}, -{31,38,26}, -{31,38,27}, -{31,38,28}, -{31,38,29}, -{31,38,30}, -{31,38,31}, -{31,38,32}, -{31,38,33}, -{31,38,34}, -{31,38,35}, -{31,38,36}, -{31,38,37}, -{31,38,38}, -{31,38,39}, -{31,38,40}, -{31,38,41}, -{31,38,42}, -{31,38,43}, -{31,39,-72}, -{31,39,-71}, -{31,39,-70}, -{31,39,-69}, -{31,39,-68}, -{31,39,-67}, -{31,39,-66}, -{31,39,-65}, -{31,39,-64}, -{31,39,-63}, -{31,39,-62}, -{31,39,-61}, -{31,39,-60}, -{31,39,-59}, -{31,39,-58}, -{31,39,-57}, -{31,39,-56}, -{31,39,-55}, -{31,39,-54}, -{31,39,-53}, -{31,39,-52}, -{31,39,-51}, -{31,39,-50}, -{31,39,-49}, -{31,39,-48}, -{31,39,-47}, -{31,39,-46}, -{31,39,-45}, -{31,39,-44}, -{31,39,-43}, -{31,39,-42}, -{31,39,-41}, -{31,39,-40}, -{31,39,-39}, -{31,39,-38}, -{31,39,-37}, -{31,39,-36}, -{31,39,-35}, -{31,39,-34}, -{31,39,-33}, -{31,39,-32}, -{31,39,-31}, -{31,39,-30}, -{31,39,-29}, -{31,39,-28}, -{31,39,-27}, -{31,39,-26}, -{31,39,-25}, -{31,39,-24}, -{31,39,-23}, -{31,39,-22}, -{31,39,-21}, -{31,39,-20}, -{31,39,-19}, -{31,39,-18}, -{31,39,-17}, -{31,39,-16}, -{31,39,-15}, -{31,39,-14}, -{31,39,-13}, -{31,39,-12}, -{31,39,-11}, -{31,39,-10}, -{31,39,-9}, -{31,39,-8}, -{31,39,-7}, -{31,39,-6}, -{31,39,-5}, -{31,39,-4}, -{31,39,-3}, -{31,39,-2}, -{31,39,-1}, -{31,39,0}, -{31,39,1}, -{31,39,2}, -{31,39,3}, -{31,39,4}, -{31,39,5}, -{31,39,6}, -{31,39,7}, -{31,39,8}, -{31,39,9}, -{31,39,10}, -{31,39,11}, -{31,39,12}, -{31,39,13}, -{31,39,14}, -{31,39,15}, -{31,39,16}, -{31,39,17}, -{31,39,18}, -{31,39,19}, -{31,39,20}, -{31,39,21}, -{31,39,22}, -{31,39,23}, -{31,39,24}, -{31,39,25}, -{31,39,26}, -{31,39,27}, -{31,39,28}, -{31,39,29}, -{31,39,30}, -{31,39,31}, -{31,39,32}, -{31,39,33}, -{31,39,34}, -{31,39,35}, -{31,39,36}, -{31,39,37}, -{31,39,38}, -{31,39,39}, -{31,39,40}, -{31,39,41}, -{31,39,42}, -{31,39,43}, -{31,40,-73}, -{31,40,-72}, -{31,40,-71}, -{31,40,-70}, -{31,40,-69}, -{31,40,-68}, -{31,40,-67}, -{31,40,-66}, -{31,40,-65}, -{31,40,-64}, -{31,40,-63}, -{31,40,-62}, -{31,40,-61}, -{31,40,-60}, -{31,40,-59}, -{31,40,-58}, -{31,40,-57}, -{31,40,-56}, -{31,40,-55}, -{31,40,-54}, -{31,40,-53}, -{31,40,-52}, -{31,40,-51}, -{31,40,-50}, -{31,40,-49}, -{31,40,-48}, -{31,40,-47}, -{31,40,-46}, -{31,40,-45}, -{31,40,-44}, -{31,40,-43}, -{31,40,-42}, -{31,40,-41}, -{31,40,-40}, -{31,40,-39}, -{31,40,-38}, -{31,40,-37}, -{31,40,-36}, -{31,40,-35}, -{31,40,-34}, -{31,40,-33}, -{31,40,-32}, -{31,40,-31}, -{31,40,-30}, -{31,40,-29}, -{31,40,-28}, -{31,40,-27}, -{31,40,-26}, -{31,40,-25}, -{31,40,-24}, -{31,40,-23}, -{31,40,-22}, -{31,40,-21}, -{31,40,-20}, -{31,40,-19}, -{31,40,-18}, -{31,40,-17}, -{31,40,-16}, -{31,40,-15}, -{31,40,-14}, -{31,40,-13}, -{31,40,-12}, -{31,40,-11}, -{31,40,-10}, -{31,40,-9}, -{31,40,-8}, -{31,40,-7}, -{31,40,-6}, -{31,40,-5}, -{31,40,-4}, -{31,40,-3}, -{31,40,-2}, -{31,40,-1}, -{31,40,0}, -{31,40,1}, -{31,40,2}, -{31,40,3}, -{31,40,4}, -{31,40,5}, -{31,40,6}, -{31,40,7}, -{31,40,8}, -{31,40,9}, -{31,40,10}, -{31,40,11}, -{31,40,12}, -{31,40,13}, -{31,40,14}, -{31,40,15}, -{31,40,16}, -{31,40,17}, -{31,40,18}, -{31,40,19}, -{31,40,20}, -{31,40,21}, -{31,40,22}, -{31,40,23}, -{31,40,24}, -{31,40,25}, -{31,40,26}, -{31,40,27}, -{31,40,28}, -{31,40,29}, -{31,40,30}, -{31,40,31}, -{31,40,32}, -{31,40,33}, -{31,40,34}, -{31,40,35}, -{31,40,36}, -{31,40,37}, -{31,40,38}, -{31,40,39}, -{31,40,40}, -{31,40,41}, -{31,40,42}, -{31,40,43}, -{31,41,-74}, -{31,41,-73}, -{31,41,-72}, -{31,41,-71}, -{31,41,-70}, -{31,41,-69}, -{31,41,-68}, -{31,41,-67}, -{31,41,-66}, -{31,41,-65}, -{31,41,-64}, -{31,41,-63}, -{31,41,-62}, -{31,41,-61}, -{31,41,-60}, -{31,41,-59}, -{31,41,-58}, -{31,41,-57}, -{31,41,-56}, -{31,41,-55}, -{31,41,-54}, -{31,41,-53}, -{31,41,-52}, -{31,41,-51}, -{31,41,-50}, -{31,41,-49}, -{31,41,-48}, -{31,41,-47}, -{31,41,-46}, -{31,41,-45}, -{31,41,-44}, -{31,41,-43}, -{31,41,-42}, -{31,41,-41}, -{31,41,-40}, -{31,41,-39}, -{31,41,-38}, -{31,41,-37}, -{31,41,-36}, -{31,41,-35}, -{31,41,-34}, -{31,41,-33}, -{31,41,-32}, -{31,41,-31}, -{31,41,-30}, -{31,41,-29}, -{31,41,-28}, -{31,41,-27}, -{31,41,-26}, -{31,41,-25}, -{31,41,-24}, -{31,41,-23}, -{31,41,-22}, -{31,41,-21}, -{31,41,-20}, -{31,41,-19}, -{31,41,-18}, -{31,41,-17}, -{31,41,-16}, -{31,41,-15}, -{31,41,-14}, -{31,41,-13}, -{31,41,-12}, -{31,41,-11}, -{31,41,-10}, -{31,41,-9}, -{31,41,-8}, -{31,41,-7}, -{31,41,-6}, -{31,41,-5}, -{31,41,-4}, -{31,41,-3}, -{31,41,-2}, -{31,41,-1}, -{31,41,0}, -{31,41,1}, -{31,41,2}, -{31,41,3}, -{31,41,4}, -{31,41,5}, -{31,41,6}, -{31,41,7}, -{31,41,8}, -{31,41,9}, -{31,41,10}, -{31,41,11}, -{31,41,12}, -{31,41,13}, -{31,41,14}, -{31,41,15}, -{31,41,16}, -{31,41,17}, -{31,41,18}, -{31,41,19}, -{31,41,20}, -{31,41,21}, -{31,41,22}, -{31,41,23}, -{31,41,24}, -{31,41,25}, -{31,41,26}, -{31,41,27}, -{31,41,28}, -{31,41,29}, -{31,41,30}, -{31,41,31}, -{31,41,32}, -{31,41,33}, -{31,41,34}, -{31,41,35}, -{31,41,36}, -{31,41,37}, -{31,41,38}, -{31,41,39}, -{31,41,40}, -{31,41,41}, -{31,41,42}, -{31,41,43}, -{31,42,-75}, -{31,42,-74}, -{31,42,-73}, -{31,42,-72}, -{31,42,-71}, -{31,42,-70}, -{31,42,-69}, -{31,42,-68}, -{31,42,-67}, -{31,42,-66}, -{31,42,-65}, -{31,42,-64}, -{31,42,-63}, -{31,42,-62}, -{31,42,-61}, -{31,42,-60}, -{31,42,-59}, -{31,42,-58}, -{31,42,-57}, -{31,42,-56}, -{31,42,-55}, -{31,42,-54}, -{31,42,-53}, -{31,42,-52}, -{31,42,-51}, -{31,42,-50}, -{31,42,-49}, -{31,42,-48}, -{31,42,-47}, -{31,42,-46}, -{31,42,-45}, -{31,42,-44}, -{31,42,-43}, -{31,42,-42}, -{31,42,-41}, -{31,42,-40}, -{31,42,-39}, -{31,42,-38}, -{31,42,-37}, -{31,42,-36}, -{31,42,-35}, -{31,42,-34}, -{31,42,-33}, -{31,42,-32}, -{31,42,-31}, -{31,42,-30}, -{31,42,-29}, -{31,42,-28}, -{31,42,-27}, -{31,42,-26}, -{31,42,-25}, -{31,42,-24}, -{31,42,-23}, -{31,42,-22}, -{31,42,-21}, -{31,42,-20}, -{31,42,-19}, -{31,42,-18}, -{31,42,-17}, -{31,42,-16}, -{31,42,-15}, -{31,42,-14}, -{31,42,-13}, -{31,42,-12}, -{31,42,-11}, -{31,42,-10}, -{31,42,-9}, -{31,42,-8}, -{31,42,-7}, -{31,42,-6}, -{31,42,-5}, -{31,42,-4}, -{31,42,-3}, -{31,42,-2}, -{31,42,-1}, -{31,42,0}, -{31,42,1}, -{31,42,2}, -{31,42,3}, -{31,42,4}, -{31,42,5}, -{31,42,6}, -{31,42,7}, -{31,42,8}, -{31,42,9}, -{31,42,10}, -{31,42,11}, -{31,42,12}, -{31,42,13}, -{31,42,14}, -{31,42,15}, -{31,42,16}, -{31,42,17}, -{31,42,18}, -{31,42,19}, -{31,42,20}, -{31,42,21}, -{31,42,22}, -{31,42,23}, -{31,42,24}, -{31,42,25}, -{31,42,26}, -{31,42,27}, -{31,42,28}, -{31,42,29}, -{31,42,30}, -{31,42,31}, -{31,42,32}, -{31,42,33}, -{31,42,34}, -{31,42,35}, -{31,42,36}, -{31,42,37}, -{31,42,38}, -{31,42,39}, -{31,42,40}, -{31,42,41}, -{31,42,42}, -{31,42,43}, -{31,43,-76}, -{31,43,-75}, -{31,43,-74}, -{31,43,-73}, -{31,43,-72}, -{31,43,-71}, -{31,43,-70}, -{31,43,-69}, -{31,43,-68}, -{31,43,-67}, -{31,43,-66}, -{31,43,-65}, -{31,43,-64}, -{31,43,-63}, -{31,43,-62}, -{31,43,-61}, -{31,43,-60}, -{31,43,-59}, -{31,43,-58}, -{31,43,-57}, -{31,43,-56}, -{31,43,-55}, -{31,43,-54}, -{31,43,-53}, -{31,43,-52}, -{31,43,-51}, -{31,43,-50}, -{31,43,-49}, -{31,43,-48}, -{31,43,-47}, -{31,43,-46}, -{31,43,-45}, -{31,43,-44}, -{31,43,-43}, -{31,43,-42}, -{31,43,-41}, -{31,43,-40}, -{31,43,-39}, -{31,43,-38}, -{31,43,-37}, -{31,43,-36}, -{31,43,-35}, -{31,43,-34}, -{31,43,-33}, -{31,43,-32}, -{31,43,-31}, -{31,43,-30}, -{31,43,-29}, -{31,43,-28}, -{31,43,-27}, -{31,43,-26}, -{31,43,-25}, -{31,43,-24}, -{31,43,-23}, -{31,43,-22}, -{31,43,-21}, -{31,43,-20}, -{31,43,-19}, -{31,43,-18}, -{31,43,-17}, -{31,43,-16}, -{31,43,-15}, -{31,43,-14}, -{31,43,-13}, -{31,43,-12}, -{31,43,-11}, -{31,43,-10}, -{31,43,-9}, -{31,43,-8}, -{31,43,-7}, -{31,43,-6}, -{31,43,-5}, -{31,43,-4}, -{31,43,-3}, -{31,43,-2}, -{31,43,-1}, -{31,43,0}, -{31,43,1}, -{31,43,2}, -{31,43,3}, -{31,43,4}, -{31,43,5}, -{31,43,6}, -{31,43,7}, -{31,43,8}, -{31,43,9}, -{31,43,10}, -{31,43,11}, -{31,43,12}, -{31,43,13}, -{31,43,14}, -{31,43,15}, -{31,43,16}, -{31,43,17}, -{31,43,18}, -{31,43,19}, -{31,43,20}, -{31,43,21}, -{31,43,22}, -{31,43,23}, -{31,43,24}, -{31,43,25}, -{31,43,26}, -{31,43,27}, -{31,43,28}, -{31,43,29}, -{31,43,30}, -{31,43,31}, -{31,43,32}, -{31,43,33}, -{31,43,34}, -{31,43,35}, -{31,43,36}, -{31,43,37}, -{31,43,38}, -{31,43,39}, -{31,43,40}, -{31,43,41}, -{31,43,42}, -{31,43,43}, -{31,44,-77}, -{31,44,-76}, -{31,44,-75}, -{31,44,-74}, -{31,44,-73}, -{31,44,-72}, -{31,44,-71}, -{31,44,-70}, -{31,44,-69}, -{31,44,-68}, -{31,44,-67}, -{31,44,-66}, -{31,44,-65}, -{31,44,-64}, -{31,44,-63}, -{31,44,-62}, -{31,44,-61}, -{31,44,-60}, -{31,44,-59}, -{31,44,-58}, -{31,44,-57}, -{31,44,-56}, -{31,44,-55}, -{31,44,-54}, -{31,44,-53}, -{31,44,-52}, -{31,44,-51}, -{31,44,-50}, -{31,44,-49}, -{31,44,-48}, -{31,44,-47}, -{31,44,-46}, -{31,44,-45}, -{31,44,-44}, -{31,44,-43}, -{31,44,-42}, -{31,44,-41}, -{31,44,-40}, -{31,44,-39}, -{31,44,-38}, -{31,44,-37}, -{31,44,-36}, -{31,44,-35}, -{31,44,-34}, -{31,44,-33}, -{31,44,-32}, -{31,44,-31}, -{31,44,-30}, -{31,44,-29}, -{31,44,-28}, -{31,44,-27}, -{31,44,-26}, -{31,44,-25}, -{31,44,-24}, -{31,44,-23}, -{31,44,-22}, -{31,44,-21}, -{31,44,-20}, -{31,44,-19}, -{31,44,-18}, -{31,44,-17}, -{31,44,-16}, -{31,44,-15}, -{31,44,-14}, -{31,44,-13}, -{31,44,-12}, -{31,44,-11}, -{31,44,-10}, -{31,44,-9}, -{31,44,-8}, -{31,44,-7}, -{31,44,-6}, -{31,44,-5}, -{31,44,-4}, -{31,44,-3}, -{31,44,-2}, -{31,44,-1}, -{31,44,0}, -{31,44,1}, -{31,44,2}, -{31,44,3}, -{31,44,4}, -{31,44,5}, -{31,44,6}, -{31,44,7}, -{31,44,8}, -{31,44,9}, -{31,44,10}, -{31,44,11}, -{31,44,12}, -{31,44,13}, -{31,44,14}, -{31,44,15}, -{31,44,16}, -{31,44,17}, -{31,44,18}, -{31,44,19}, -{31,44,20}, -{31,44,21}, -{31,44,22}, -{31,44,23}, -{31,44,24}, -{31,44,25}, -{31,44,26}, -{31,44,27}, -{31,44,28}, -{31,44,29}, -{31,44,30}, -{31,44,31}, -{31,44,32}, -{31,44,33}, -{31,44,34}, -{31,44,35}, -{31,44,36}, -{31,44,37}, -{31,44,38}, -{31,44,39}, -{31,44,40}, -{31,44,41}, -{31,44,42}, -{31,44,43}, -{31,45,-77}, -{31,45,-76}, -{31,45,-75}, -{31,45,-74}, -{31,45,-73}, -{31,45,-72}, -{31,45,-71}, -{31,45,-70}, -{31,45,-69}, -{31,45,-68}, -{31,45,-67}, -{31,45,-66}, -{31,45,-65}, -{31,45,-64}, -{31,45,-63}, -{31,45,-62}, -{31,45,-61}, -{31,45,-60}, -{31,45,-59}, -{31,45,-58}, -{31,45,-57}, -{31,45,-56}, -{31,45,-55}, -{31,45,-54}, -{31,45,-53}, -{31,45,-52}, -{31,45,-51}, -{31,45,-50}, -{31,45,-49}, -{31,45,-48}, -{31,45,-47}, -{31,45,-46}, -{31,45,-45}, -{31,45,-44}, -{31,45,-43}, -{31,45,-42}, -{31,45,-41}, -{31,45,-40}, -{31,45,-39}, -{31,45,-38}, -{31,45,-37}, -{31,45,-36}, -{31,45,-35}, -{31,45,-34}, -{31,45,-33}, -{31,45,-32}, -{31,45,-31}, -{31,45,-30}, -{31,45,-29}, -{31,45,-28}, -{31,45,-27}, -{31,45,-26}, -{31,45,-25}, -{31,45,-24}, -{31,45,-23}, -{31,45,-22}, -{31,45,-21}, -{31,45,-20}, -{31,45,-19}, -{31,45,-18}, -{31,45,-17}, -{31,45,-16}, -{31,45,-15}, -{31,45,-14}, -{31,45,-13}, -{31,45,-12}, -{31,45,-11}, -{31,45,-10}, -{31,45,-9}, -{31,45,-8}, -{31,45,-7}, -{31,45,-6}, -{31,45,-5}, -{31,45,-4}, -{31,45,-3}, -{31,45,-2}, -{31,45,-1}, -{31,45,0}, -{31,45,1}, -{31,45,2}, -{31,45,3}, -{31,45,4}, -{31,45,5}, -{31,45,6}, -{31,45,7}, -{31,45,8}, -{31,45,9}, -{31,45,10}, -{31,45,11}, -{31,45,12}, -{31,45,13}, -{31,45,14}, -{31,45,15}, -{31,45,16}, -{31,45,17}, -{31,45,18}, -{31,45,19}, -{31,45,20}, -{31,45,21}, -{31,45,22}, -{31,45,23}, -{31,45,24}, -{31,45,25}, -{31,45,26}, -{31,45,27}, -{31,45,28}, -{31,45,29}, -{31,45,30}, -{31,45,31}, -{31,45,32}, -{31,45,33}, -{31,45,34}, -{31,45,35}, -{31,45,36}, -{31,45,37}, -{31,45,38}, -{31,45,39}, -{31,45,40}, -{31,45,41}, -{31,45,42}, -{31,45,43}, -{31,46,-78}, -{31,46,-77}, -{31,46,-76}, -{31,46,-75}, -{31,46,-74}, -{31,46,-73}, -{31,46,-72}, -{31,46,-71}, -{31,46,-70}, -{31,46,-69}, -{31,46,-68}, -{31,46,-67}, -{31,46,-66}, -{31,46,-65}, -{31,46,-64}, -{31,46,-63}, -{31,46,-62}, -{31,46,-61}, -{31,46,-60}, -{31,46,-59}, -{31,46,-58}, -{31,46,-57}, -{31,46,-56}, -{31,46,-55}, -{31,46,-54}, -{31,46,-53}, -{31,46,-52}, -{31,46,-51}, -{31,46,-50}, -{31,46,-49}, -{31,46,-48}, -{31,46,-47}, -{31,46,-46}, -{31,46,-45}, -{31,46,-44}, -{31,46,-43}, -{31,46,-42}, -{31,46,-41}, -{31,46,-40}, -{31,46,-39}, -{31,46,-38}, -{31,46,-37}, -{31,46,-36}, -{31,46,-35}, -{31,46,-34}, -{31,46,-33}, -{31,46,-32}, -{31,46,-31}, -{31,46,-30}, -{31,46,-29}, -{31,46,-28}, -{31,46,-27}, -{31,46,-26}, -{31,46,-25}, -{31,46,-24}, -{31,46,-23}, -{31,46,-22}, -{31,46,-21}, -{31,46,-20}, -{31,46,-19}, -{31,46,-18}, -{31,46,-17}, -{31,46,-16}, -{31,46,-15}, -{31,46,-14}, -{31,46,-13}, -{31,46,-12}, -{31,46,-11}, -{31,46,-10}, -{31,46,-9}, -{31,46,-8}, -{31,46,-7}, -{31,46,-6}, -{31,46,-5}, -{31,46,-4}, -{31,46,-3}, -{31,46,-2}, -{31,46,-1}, -{31,46,0}, -{31,46,1}, -{31,46,2}, -{31,46,3}, -{31,46,4}, -{31,46,5}, -{31,46,6}, -{31,46,7}, -{31,46,8}, -{31,46,9}, -{31,46,10}, -{31,46,11}, -{31,46,12}, -{31,46,13}, -{31,46,14}, -{31,46,15}, -{31,46,16}, -{31,46,17}, -{31,46,18}, -{31,46,19}, -{31,46,20}, -{31,46,21}, -{31,46,22}, -{31,46,23}, -{31,46,24}, -{31,46,25}, -{31,46,26}, -{31,46,27}, -{31,46,28}, -{31,46,29}, -{31,46,30}, -{31,46,31}, -{31,46,32}, -{31,46,33}, -{31,46,34}, -{31,46,35}, -{31,46,36}, -{31,46,37}, -{31,46,38}, -{31,46,39}, -{31,46,40}, -{31,46,41}, -{31,46,42}, -{31,46,43}, -{31,46,44}, -{31,47,-79}, -{31,47,-78}, -{31,47,-77}, -{31,47,-76}, -{31,47,-75}, -{31,47,-74}, -{31,47,-73}, -{31,47,-72}, -{31,47,-71}, -{31,47,-70}, -{31,47,-69}, -{31,47,-68}, -{31,47,-67}, -{31,47,-66}, -{31,47,-65}, -{31,47,-64}, -{31,47,-63}, -{31,47,-62}, -{31,47,-61}, -{31,47,-60}, -{31,47,-59}, -{31,47,-58}, -{31,47,-57}, -{31,47,-56}, -{31,47,-55}, -{31,47,-54}, -{31,47,-53}, -{31,47,-52}, -{31,47,-51}, -{31,47,-50}, -{31,47,-49}, -{31,47,-48}, -{31,47,-47}, -{31,47,-46}, -{31,47,-45}, -{31,47,-44}, -{31,47,-43}, -{31,47,-42}, -{31,47,-41}, -{31,47,-40}, -{31,47,-39}, -{31,47,-38}, -{31,47,-37}, -{31,47,-36}, -{31,47,-35}, -{31,47,-34}, -{31,47,-33}, -{31,47,-32}, -{31,47,-31}, -{31,47,-30}, -{31,47,-29}, -{31,47,-28}, -{31,47,-27}, -{31,47,-26}, -{31,47,-25}, -{31,47,-24}, -{31,47,-23}, -{31,47,-22}, -{31,47,-21}, -{31,47,-20}, -{31,47,-19}, -{31,47,-18}, -{31,47,-17}, -{31,47,-16}, -{31,47,-15}, -{31,47,-14}, -{31,47,-13}, -{31,47,-12}, -{31,47,-11}, -{31,47,-10}, -{31,47,-9}, -{31,47,-8}, -{31,47,-7}, -{31,47,-6}, -{31,47,-5}, -{31,47,-4}, -{31,47,-3}, -{31,47,-2}, -{31,47,-1}, -{31,47,0}, -{31,47,1}, -{31,47,2}, -{31,47,3}, -{31,47,4}, -{31,47,5}, -{31,47,6}, -{31,47,7}, -{31,47,8}, -{31,47,9}, -{31,47,10}, -{31,47,11}, -{31,47,12}, -{31,47,13}, -{31,47,14}, -{31,47,15}, -{31,47,16}, -{31,47,17}, -{31,47,18}, -{31,47,19}, -{31,47,20}, -{31,47,21}, -{31,47,22}, -{31,47,23}, -{31,47,24}, -{31,47,25}, -{31,47,26}, -{31,47,27}, -{31,47,28}, -{31,47,29}, -{31,47,30}, -{31,47,31}, -{31,47,32}, -{31,47,33}, -{31,47,34}, -{31,47,35}, -{31,47,36}, -{31,47,37}, -{31,47,38}, -{31,47,39}, -{31,47,40}, -{31,47,41}, -{31,47,42}, -{31,47,43}, -{31,47,44}, -{31,48,-80}, -{31,48,-79}, -{31,48,-78}, -{31,48,-77}, -{31,48,-76}, -{31,48,-75}, -{31,48,-74}, -{31,48,-73}, -{31,48,-72}, -{31,48,-71}, -{31,48,-70}, -{31,48,-69}, -{31,48,-68}, -{31,48,-67}, -{31,48,-66}, -{31,48,-65}, -{31,48,-64}, -{31,48,-63}, -{31,48,-62}, -{31,48,-61}, -{31,48,-60}, -{31,48,-59}, -{31,48,-58}, -{31,48,-57}, -{31,48,-56}, -{31,48,-55}, -{31,48,-54}, -{31,48,-53}, -{31,48,-52}, -{31,48,-51}, -{31,48,-50}, -{31,48,-49}, -{31,48,-48}, -{31,48,-47}, -{31,48,-46}, -{31,48,-45}, -{31,48,-44}, -{31,48,-43}, -{31,48,-42}, -{31,48,-41}, -{31,48,-40}, -{31,48,-39}, -{31,48,-38}, -{31,48,-37}, -{31,48,-36}, -{31,48,-35}, -{31,48,-34}, -{31,48,-33}, -{31,48,-32}, -{31,48,-31}, -{31,48,-30}, -{31,48,-29}, -{31,48,-28}, -{31,48,-27}, -{31,48,-26}, -{31,48,-25}, -{31,48,-24}, -{31,48,-23}, -{31,48,-22}, -{31,48,-21}, -{31,48,-20}, -{31,48,-19}, -{31,48,-18}, -{31,48,-17}, -{31,48,-16}, -{31,48,-15}, -{31,48,-14}, -{31,48,-13}, -{31,48,-12}, -{31,48,-11}, -{31,48,-10}, -{31,48,-9}, -{31,48,-8}, -{31,48,-7}, -{31,48,-6}, -{31,48,-5}, -{31,48,-4}, -{31,48,-3}, -{31,48,-2}, -{31,48,-1}, -{31,48,0}, -{31,48,1}, -{31,48,2}, -{31,48,3}, -{31,48,4}, -{31,48,5}, -{31,48,6}, -{31,48,7}, -{31,48,8}, -{31,48,9}, -{31,48,10}, -{31,48,11}, -{31,48,12}, -{31,48,13}, -{31,48,14}, -{31,48,15}, -{31,48,16}, -{31,48,17}, -{31,48,18}, -{31,48,19}, -{31,48,20}, -{31,48,21}, -{31,48,22}, -{31,48,23}, -{31,48,24}, -{31,48,25}, -{31,48,26}, -{31,48,27}, -{31,48,28}, -{31,48,29}, -{31,48,30}, -{31,48,31}, -{31,48,32}, -{31,48,33}, -{31,48,34}, -{31,48,35}, -{31,48,36}, -{31,48,37}, -{31,48,38}, -{31,48,39}, -{31,48,40}, -{31,48,41}, -{31,48,42}, -{31,48,43}, -{31,48,44}, -{31,49,-81}, -{31,49,-80}, -{31,49,-79}, -{31,49,-78}, -{31,49,-77}, -{31,49,-76}, -{31,49,-75}, -{31,49,-74}, -{31,49,-73}, -{31,49,-72}, -{31,49,-71}, -{31,49,-70}, -{31,49,-69}, -{31,49,-68}, -{31,49,-67}, -{31,49,-66}, -{31,49,-65}, -{31,49,-64}, -{31,49,-63}, -{31,49,-62}, -{31,49,-61}, -{31,49,-60}, -{31,49,-59}, -{31,49,-58}, -{31,49,-57}, -{31,49,-56}, -{31,49,-55}, -{31,49,-54}, -{31,49,-53}, -{31,49,-52}, -{31,49,-51}, -{31,49,-50}, -{31,49,-49}, -{31,49,-48}, -{31,49,-47}, -{31,49,-46}, -{31,49,-45}, -{31,49,-44}, -{31,49,-43}, -{31,49,-42}, -{31,49,-41}, -{31,49,-40}, -{31,49,-39}, -{31,49,-38}, -{31,49,-37}, -{31,49,-36}, -{31,49,-35}, -{31,49,-34}, -{31,49,-33}, -{31,49,-32}, -{31,49,-31}, -{31,49,-30}, -{31,49,-29}, -{31,49,-28}, -{31,49,-27}, -{31,49,-26}, -{31,49,-25}, -{31,49,-24}, -{31,49,-23}, -{31,49,-22}, -{31,49,-21}, -{31,49,-20}, -{31,49,-19}, -{31,49,-18}, -{31,49,-17}, -{31,49,-16}, -{31,49,-15}, -{31,49,-14}, -{31,49,-13}, -{31,49,-12}, -{31,49,-11}, -{31,49,-10}, -{31,49,-9}, -{31,49,-8}, -{31,49,-7}, -{31,49,-6}, -{31,49,-5}, -{31,49,-4}, -{31,49,-3}, -{31,49,-2}, -{31,49,-1}, -{31,49,0}, -{31,49,1}, -{31,49,2}, -{31,49,3}, -{31,49,4}, -{31,49,5}, -{31,49,6}, -{31,49,7}, -{31,49,8}, -{31,49,9}, -{31,49,10}, -{31,49,11}, -{31,49,12}, -{31,49,13}, -{31,49,14}, -{31,49,15}, -{31,49,16}, -{31,49,17}, -{31,49,18}, -{31,49,19}, -{31,49,20}, -{31,49,21}, -{31,49,22}, -{31,49,23}, -{31,49,24}, -{31,49,25}, -{31,49,26}, -{31,49,27}, -{31,49,28}, -{31,49,29}, -{31,49,30}, -{31,49,31}, -{31,49,32}, -{31,49,33}, -{31,49,34}, -{31,49,35}, -{31,49,36}, -{31,49,37}, -{31,49,38}, -{31,49,39}, -{31,49,40}, -{31,49,41}, -{31,49,42}, -{31,49,43}, -{31,49,44}, -{31,50,-82}, -{31,50,-81}, -{31,50,-80}, -{31,50,-79}, -{31,50,-78}, -{31,50,-77}, -{31,50,-76}, -{31,50,-75}, -{31,50,-74}, -{31,50,-73}, -{31,50,-72}, -{31,50,-71}, -{31,50,-70}, -{31,50,-69}, -{31,50,-68}, -{31,50,-67}, -{31,50,-66}, -{31,50,-65}, -{31,50,-64}, -{31,50,-63}, -{31,50,-62}, -{31,50,-61}, -{31,50,-60}, -{31,50,-59}, -{31,50,-58}, -{31,50,-57}, -{31,50,-56}, -{31,50,-55}, -{31,50,-54}, -{31,50,-53}, -{31,50,-52}, -{31,50,-51}, -{31,50,-50}, -{31,50,-49}, -{31,50,-48}, -{31,50,-47}, -{31,50,-46}, -{31,50,-45}, -{31,50,-44}, -{31,50,-43}, -{31,50,-42}, -{31,50,-41}, -{31,50,-40}, -{31,50,-39}, -{31,50,-38}, -{31,50,-37}, -{31,50,-36}, -{31,50,-35}, -{31,50,-34}, -{31,50,-33}, -{31,50,-32}, -{31,50,-31}, -{31,50,-30}, -{31,50,-29}, -{31,50,-28}, -{31,50,-27}, -{31,50,-26}, -{31,50,-25}, -{31,50,-24}, -{31,50,-23}, -{31,50,-22}, -{31,50,-21}, -{31,50,-20}, -{31,50,-19}, -{31,50,-18}, -{31,50,-17}, -{31,50,-16}, -{31,50,-15}, -{31,50,-14}, -{31,50,-13}, -{31,50,-12}, -{31,50,-11}, -{31,50,-10}, -{31,50,-9}, -{31,50,-8}, -{31,50,-7}, -{31,50,-6}, -{31,50,-5}, -{31,50,-4}, -{31,50,-3}, -{31,50,-2}, -{31,50,-1}, -{31,50,0}, -{31,50,1}, -{31,50,2}, -{31,50,3}, -{31,50,4}, -{31,50,5}, -{31,50,6}, -{31,50,7}, -{31,50,8}, -{31,50,9}, -{31,50,10}, -{31,50,11}, -{31,50,12}, -{31,50,13}, -{31,50,14}, -{31,50,15}, -{31,50,16}, -{31,50,17}, -{31,50,18}, -{31,50,19}, -{31,50,20}, -{31,50,21}, -{31,50,22}, -{31,50,23}, -{31,50,24}, -{31,50,25}, -{31,50,26}, -{31,50,27}, -{31,50,28}, -{31,50,29}, -{31,50,30}, -{31,50,31}, -{31,50,32}, -{31,50,33}, -{31,50,34}, -{31,50,35}, -{31,50,36}, -{31,50,37}, -{31,50,38}, -{31,50,39}, -{31,50,40}, -{31,50,41}, -{31,50,42}, -{31,50,43}, -{31,50,44}, -{31,51,-83}, -{31,51,-82}, -{31,51,-81}, -{31,51,-80}, -{31,51,-79}, -{31,51,-78}, -{31,51,-77}, -{31,51,-76}, -{31,51,-75}, -{31,51,-74}, -{31,51,-73}, -{31,51,-72}, -{31,51,-71}, -{31,51,-70}, -{31,51,-69}, -{31,51,-68}, -{31,51,-67}, -{31,51,-66}, -{31,51,-65}, -{31,51,-64}, -{31,51,-63}, -{31,51,-62}, -{31,51,-61}, -{31,51,-60}, -{31,51,-59}, -{31,51,-58}, -{31,51,-57}, -{31,51,-56}, -{31,51,-55}, -{31,51,-54}, -{31,51,-53}, -{31,51,-52}, -{31,51,-51}, -{31,51,-50}, -{31,51,-49}, -{31,51,-48}, -{31,51,-47}, -{31,51,-46}, -{31,51,-45}, -{31,51,-44}, -{31,51,-43}, -{31,51,-42}, -{31,51,-41}, -{31,51,-40}, -{31,51,-39}, -{31,51,-38}, -{31,51,-37}, -{31,51,-36}, -{31,51,-35}, -{31,51,-34}, -{31,51,-33}, -{31,51,-32}, -{31,51,-31}, -{31,51,-30}, -{31,51,-29}, -{31,51,-28}, -{31,51,-27}, -{31,51,-26}, -{31,51,-25}, -{31,51,-24}, -{31,51,-23}, -{31,51,-22}, -{31,51,-21}, -{31,51,-20}, -{31,51,-19}, -{31,51,-18}, -{31,51,-17}, -{31,51,-16}, -{31,51,-15}, -{31,51,-14}, -{31,51,-13}, -{31,51,-12}, -{31,51,-11}, -{31,51,-10}, -{31,51,-9}, -{31,51,-8}, -{31,51,-7}, -{31,51,-6}, -{31,51,-5}, -{31,51,-4}, -{31,51,-3}, -{31,51,-2}, -{31,51,-1}, -{31,51,0}, -{31,51,1}, -{31,51,2}, -{31,51,3}, -{31,51,4}, -{31,51,5}, -{31,51,6}, -{31,51,7}, -{31,51,8}, -{31,51,9}, -{31,51,10}, -{31,51,11}, -{31,51,12}, -{31,51,13}, -{31,51,14}, -{31,51,15}, -{31,51,16}, -{31,51,17}, -{31,51,18}, -{31,51,19}, -{31,51,20}, -{31,51,21}, -{31,51,22}, -{31,51,23}, -{31,51,24}, -{31,51,25}, -{31,51,26}, -{31,51,27}, -{31,51,28}, -{31,51,29}, -{31,51,30}, -{31,51,31}, -{31,51,32}, -{31,51,33}, -{31,51,34}, -{31,51,35}, -{31,51,36}, -{31,51,37}, -{31,51,38}, -{31,51,39}, -{31,51,40}, -{31,51,41}, -{31,51,42}, -{31,51,43}, -{31,51,44}, -{31,52,-84}, -{31,52,-83}, -{31,52,-82}, -{31,52,-81}, -{31,52,-80}, -{31,52,-79}, -{31,52,-78}, -{31,52,-77}, -{31,52,-76}, -{31,52,-75}, -{31,52,-74}, -{31,52,-73}, -{31,52,-72}, -{31,52,-71}, -{31,52,-70}, -{31,52,-69}, -{31,52,-68}, -{31,52,-67}, -{31,52,-66}, -{31,52,-65}, -{31,52,-64}, -{31,52,-63}, -{31,52,-62}, -{31,52,-61}, -{31,52,-60}, -{31,52,-59}, -{31,52,-58}, -{31,52,-57}, -{31,52,-56}, -{31,52,-55}, -{31,52,-54}, -{31,52,-53}, -{31,52,-52}, -{31,52,-51}, -{31,52,-50}, -{31,52,-49}, -{31,52,-48}, -{31,52,-47}, -{31,52,-46}, -{31,52,-45}, -{31,52,-44}, -{31,52,-43}, -{31,52,-42}, -{31,52,-41}, -{31,52,-40}, -{31,52,-39}, -{31,52,-38}, -{31,52,-37}, -{31,52,-36}, -{31,52,-35}, -{31,52,-34}, -{31,52,-33}, -{31,52,-32}, -{31,52,-31}, -{31,52,-30}, -{31,52,-29}, -{31,52,-28}, -{31,52,-27}, -{31,52,-26}, -{31,52,-25}, -{31,52,-24}, -{31,52,-23}, -{31,52,-22}, -{31,52,-21}, -{31,52,-20}, -{31,52,-19}, -{31,52,-18}, -{31,52,-17}, -{31,52,-16}, -{31,52,-15}, -{31,52,-14}, -{31,52,-13}, -{31,52,-12}, -{31,52,-11}, -{31,52,-10}, -{31,52,-9}, -{31,52,-8}, -{31,52,-7}, -{31,52,-6}, -{31,52,-5}, -{31,52,-4}, -{31,52,-3}, -{31,52,-2}, -{31,52,-1}, -{31,52,0}, -{31,52,1}, -{31,52,2}, -{31,52,3}, -{31,52,4}, -{31,52,5}, -{31,52,6}, -{31,52,7}, -{31,52,8}, -{31,52,9}, -{31,52,10}, -{31,52,11}, -{31,52,12}, -{31,52,13}, -{31,52,14}, -{31,52,15}, -{31,52,16}, -{31,52,17}, -{31,52,18}, -{31,52,19}, -{31,52,20}, -{31,52,21}, -{31,52,22}, -{31,52,23}, -{31,52,24}, -{31,52,25}, -{31,52,26}, -{31,52,27}, -{31,52,28}, -{31,52,29}, -{31,52,30}, -{31,52,31}, -{31,52,32}, -{31,52,33}, -{31,52,34}, -{31,52,35}, -{31,52,36}, -{31,52,37}, -{31,52,38}, -{31,52,39}, -{31,52,40}, -{31,52,41}, -{31,52,42}, -{31,52,43}, -{31,52,44}, -{31,53,-84}, -{31,53,-83}, -{31,53,-82}, -{31,53,-81}, -{31,53,-80}, -{31,53,-79}, -{31,53,-78}, -{31,53,-77}, -{31,53,-76}, -{31,53,-75}, -{31,53,-74}, -{31,53,-73}, -{31,53,-72}, -{31,53,-71}, -{31,53,-70}, -{31,53,-69}, -{31,53,-68}, -{31,53,-67}, -{31,53,-66}, -{31,53,-65}, -{31,53,-64}, -{31,53,-63}, -{31,53,-62}, -{31,53,-61}, -{31,53,-60}, -{31,53,-59}, -{31,53,-58}, -{31,53,-57}, -{31,53,-56}, -{31,53,-55}, -{31,53,-54}, -{31,53,-53}, -{31,53,-52}, -{31,53,-51}, -{31,53,-50}, -{31,53,-49}, -{31,53,-48}, -{31,53,-47}, -{31,53,-46}, -{31,53,-45}, -{31,53,-44}, -{31,53,-43}, -{31,53,-42}, -{31,53,-41}, -{31,53,-40}, -{31,53,-39}, -{31,53,-38}, -{31,53,-37}, -{31,53,-36}, -{31,53,-35}, -{31,53,-34}, -{31,53,-33}, -{31,53,-32}, -{31,53,-31}, -{31,53,-30}, -{31,53,-29}, -{31,53,-28}, -{31,53,-27}, -{31,53,-26}, -{31,53,-25}, -{31,53,-24}, -{31,53,-23}, -{31,53,-22}, -{31,53,-21}, -{31,53,-20}, -{31,53,-19}, -{31,53,-18}, -{31,53,-17}, -{31,53,-16}, -{31,53,-15}, -{31,53,-14}, -{31,53,-13}, -{31,53,-12}, -{31,53,-11}, -{31,53,-10}, -{31,53,-9}, -{31,53,-8}, -{31,53,-7}, -{31,53,-6}, -{31,53,-5}, -{31,53,-4}, -{31,53,-3}, -{31,53,-2}, -{31,53,-1}, -{31,53,0}, -{31,53,1}, -{31,53,2}, -{31,53,3}, -{31,53,4}, -{31,53,5}, -{31,53,6}, -{31,53,7}, -{31,53,8}, -{31,53,9}, -{31,53,10}, -{31,53,11}, -{31,53,12}, -{31,53,13}, -{31,53,14}, -{31,53,15}, -{31,53,16}, -{31,53,17}, -{31,53,18}, -{31,53,19}, -{31,53,20}, -{31,53,21}, -{31,53,22}, -{31,53,23}, -{31,53,24}, -{31,53,25}, -{31,53,26}, -{31,53,27}, -{31,53,28}, -{31,53,29}, -{31,53,30}, -{31,53,31}, -{31,53,32}, -{31,53,33}, -{31,53,34}, -{31,53,35}, -{31,53,36}, -{31,53,37}, -{31,53,38}, -{31,53,39}, -{31,53,40}, -{31,53,41}, -{31,53,42}, -{31,53,43}, -{31,53,44}, -{31,54,-85}, -{31,54,-84}, -{31,54,-83}, -{31,54,-82}, -{31,54,-81}, -{31,54,-80}, -{31,54,-79}, -{31,54,-78}, -{31,54,-77}, -{31,54,-76}, -{31,54,-75}, -{31,54,-74}, -{31,54,-73}, -{31,54,-72}, -{31,54,-71}, -{31,54,-70}, -{31,54,-69}, -{31,54,-68}, -{31,54,-67}, -{31,54,-66}, -{31,54,-65}, -{31,54,-64}, -{31,54,-63}, -{31,54,-62}, -{31,54,-61}, -{31,54,-60}, -{31,54,-59}, -{31,54,-58}, -{31,54,-57}, -{31,54,-56}, -{31,54,-55}, -{31,54,-54}, -{31,54,-53}, -{31,54,-52}, -{31,54,-51}, -{31,54,-50}, -{31,54,-49}, -{31,54,-48}, -{31,54,-47}, -{31,54,-46}, -{31,54,-45}, -{31,54,-44}, -{31,54,-43}, -{31,54,-42}, -{31,54,-41}, -{31,54,-40}, -{31,54,-39}, -{31,54,-38}, -{31,54,-37}, -{31,54,-36}, -{31,54,-35}, -{31,54,-34}, -{31,54,-33}, -{31,54,-32}, -{31,54,-31}, -{31,54,-30}, -{31,54,-29}, -{31,54,-28}, -{31,54,-27}, -{31,54,-26}, -{31,54,-25}, -{31,54,-24}, -{31,54,-23}, -{31,54,-22}, -{31,54,-21}, -{31,54,-20}, -{31,54,-19}, -{31,54,-18}, -{31,54,-17}, -{31,54,-16}, -{31,54,-15}, -{31,54,-14}, -{31,54,-13}, -{31,54,-12}, -{31,54,-11}, -{31,54,-10}, -{31,54,-9}, -{31,54,-8}, -{31,54,-7}, -{31,54,-6}, -{31,54,-5}, -{31,54,-4}, -{31,54,-3}, -{31,54,-2}, -{31,54,-1}, -{31,54,0}, -{31,54,1}, -{31,54,2}, -{31,54,3}, -{31,54,4}, -{31,54,5}, -{31,54,6}, -{31,54,7}, -{31,54,8}, -{31,54,9}, -{31,54,10}, -{31,54,11}, -{31,54,12}, -{31,54,13}, -{31,54,14}, -{31,54,15}, -{31,54,16}, -{31,54,17}, -{31,54,18}, -{31,54,19}, -{31,54,20}, -{31,54,21}, -{31,54,22}, -{31,54,23}, -{31,54,24}, -{31,54,25}, -{31,54,26}, -{31,54,27}, -{31,54,28}, -{31,54,29}, -{31,54,30}, -{31,54,31}, -{31,54,32}, -{31,54,33}, -{31,54,34}, -{31,54,35}, -{31,54,36}, -{31,54,37}, -{31,54,38}, -{31,54,39}, -{31,54,40}, -{31,54,41}, -{31,54,42}, -{31,54,43}, -{31,54,44}, -{31,55,-86}, -{31,55,-85}, -{31,55,-84}, -{31,55,-83}, -{31,55,-82}, -{31,55,-81}, -{31,55,-80}, -{31,55,-79}, -{31,55,-78}, -{31,55,-77}, -{31,55,-76}, -{31,55,-75}, -{31,55,-74}, -{31,55,-73}, -{31,55,-72}, -{31,55,-71}, -{31,55,-70}, -{31,55,-69}, -{31,55,-68}, -{31,55,-67}, -{31,55,-66}, -{31,55,-65}, -{31,55,-64}, -{31,55,-63}, -{31,55,-62}, -{31,55,-61}, -{31,55,-60}, -{31,55,-59}, -{31,55,-58}, -{31,55,-57}, -{31,55,-56}, -{31,55,-55}, -{31,55,-54}, -{31,55,-53}, -{31,55,-52}, -{31,55,-51}, -{31,55,-50}, -{31,55,-49}, -{31,55,-48}, -{31,55,-47}, -{31,55,-46}, -{31,55,-45}, -{31,55,-44}, -{31,55,-43}, -{31,55,-42}, -{31,55,-41}, -{31,55,-40}, -{31,55,-39}, -{31,55,-38}, -{31,55,-37}, -{31,55,-36}, -{31,55,-35}, -{31,55,-34}, -{31,55,-33}, -{31,55,-32}, -{31,55,-31}, -{31,55,-30}, -{31,55,-29}, -{31,55,-28}, -{31,55,-27}, -{31,55,-26}, -{31,55,-25}, -{31,55,-24}, -{31,55,-23}, -{31,55,-22}, -{31,55,-21}, -{31,55,-20}, -{31,55,-19}, -{31,55,-18}, -{31,55,-17}, -{31,55,-16}, -{31,55,-15}, -{31,55,-14}, -{31,55,-13}, -{31,55,-12}, -{31,55,-11}, -{31,55,-10}, -{31,55,-9}, -{31,55,-8}, -{31,55,-7}, -{31,55,-6}, -{31,55,-5}, -{31,55,-4}, -{31,55,-3}, -{31,55,-2}, -{31,55,-1}, -{31,55,0}, -{31,55,1}, -{31,55,2}, -{31,55,3}, -{31,55,4}, -{31,55,5}, -{31,55,6}, -{31,55,7}, -{31,55,8}, -{31,55,9}, -{31,55,10}, -{31,55,11}, -{31,55,12}, -{31,55,13}, -{31,55,14}, -{31,55,15}, -{31,55,16}, -{31,55,17}, -{31,55,18}, -{31,55,19}, -{31,55,20}, -{31,55,21}, -{31,55,22}, -{31,55,23}, -{31,55,24}, -{31,55,25}, -{31,55,26}, -{31,56,-87}, -{31,56,-86}, -{31,56,-85}, -{31,56,-84}, -{31,56,-83}, -{31,56,-82}, -{31,56,-81}, -{31,56,-80}, -{31,56,-79}, -{31,56,-78}, -{31,56,-77}, -{31,56,-76}, -{31,56,-75}, -{31,56,-74}, -{31,56,-73}, -{31,56,-72}, -{31,56,-71}, -{31,56,-70}, -{31,56,-69}, -{31,56,-68}, -{31,56,-67}, -{31,56,-66}, -{31,56,-65}, -{31,56,-64}, -{31,56,-63}, -{31,56,-62}, -{31,56,-61}, -{31,56,-60}, -{31,56,-59}, -{31,56,-58}, -{31,56,-57}, -{31,56,-56}, -{31,56,-55}, -{31,56,-54}, -{31,56,-53}, -{31,56,-52}, -{31,56,-51}, -{31,56,-50}, -{31,56,-49}, -{31,56,-48}, -{31,56,-47}, -{31,56,-46}, -{31,56,-45}, -{31,56,-44}, -{31,56,-43}, -{31,56,-42}, -{31,56,-41}, -{31,56,-40}, -{31,56,-39}, -{31,56,-38}, -{31,56,-37}, -{31,56,-36}, -{31,56,-35}, -{31,56,-34}, -{31,56,-33}, -{31,56,-32}, -{31,56,-31}, -{31,56,-30}, -{31,56,-29}, -{31,56,-28}, -{31,56,-27}, -{31,56,-26}, -{31,56,-25}, -{31,56,-24}, -{31,56,-23}, -{31,56,-22}, -{31,56,-21}, -{31,56,-20}, -{31,56,-19}, -{31,56,-18}, -{31,56,-17}, -{31,56,-16}, -{31,56,-15}, -{31,56,-14}, -{31,56,-13}, -{31,56,-12}, -{31,56,-11}, -{31,56,-10}, -{31,56,-9}, -{31,56,-8}, -{31,56,-7}, -{31,56,-6}, -{31,56,-5}, -{31,56,-4}, -{31,56,-3}, -{31,56,-2}, -{31,56,-1}, -{31,56,0}, -{31,56,1}, -{31,56,2}, -{31,56,3}, -{31,56,4}, -{31,56,5}, -{31,57,-88}, -{31,57,-87}, -{31,57,-86}, -{31,57,-85}, -{31,57,-84}, -{31,57,-83}, -{31,57,-82}, -{31,57,-81}, -{31,57,-80}, -{31,57,-79}, -{31,57,-78}, -{31,57,-77}, -{31,57,-76}, -{31,57,-75}, -{31,57,-74}, -{31,57,-73}, -{31,57,-72}, -{31,57,-71}, -{31,57,-70}, -{31,57,-69}, -{31,57,-68}, -{31,57,-67}, -{31,57,-66}, -{31,57,-65}, -{31,57,-64}, -{31,57,-63}, -{31,57,-62}, -{31,57,-61}, -{31,57,-60}, -{31,57,-59}, -{31,57,-58}, -{31,57,-57}, -{31,57,-56}, -{31,57,-55}, -{31,57,-54}, -{31,57,-53}, -{31,57,-52}, -{31,57,-51}, -{31,57,-50}, -{31,57,-49}, -{31,57,-48}, -{31,57,-47}, -{31,57,-46}, -{31,57,-45}, -{31,57,-44}, -{31,57,-43}, -{31,57,-42}, -{31,57,-41}, -{31,57,-40}, -{31,57,-39}, -{31,57,-38}, -{31,57,-37}, -{31,57,-36}, -{31,57,-35}, -{31,57,-34}, -{31,57,-33}, -{31,57,-32}, -{31,57,-31}, -{31,57,-30}, -{31,57,-29}, -{31,57,-28}, -{31,57,-27}, -{31,57,-26}, -{31,57,-25}, -{31,57,-24}, -{31,57,-23}, -{31,57,-22}, -{31,57,-21}, -{31,57,-20}, -{31,57,-19}, -{31,57,-18}, -{31,57,-17}, -{31,57,-16}, -{31,57,-15}, -{31,57,-14}, -{31,57,-13}, -{31,57,-12}, -{31,57,-11}, -{31,57,-10}, -{31,57,-9}, -{31,57,-8}, -{31,58,-89}, -{31,58,-88}, -{31,58,-87}, -{31,58,-86}, -{31,58,-85}, -{31,58,-84}, -{31,58,-83}, -{31,58,-82}, -{31,58,-81}, -{31,58,-80}, -{31,58,-79}, -{31,58,-78}, -{31,58,-77}, -{31,58,-76}, -{31,58,-75}, -{31,58,-74}, -{31,58,-73}, -{31,58,-72}, -{31,58,-71}, -{31,58,-70}, -{31,58,-69}, -{31,58,-68}, -{31,58,-67}, -{31,58,-66}, -{31,58,-65}, -{31,58,-64}, -{31,58,-63}, -{31,58,-62}, -{31,58,-61}, -{31,58,-60}, -{31,58,-59}, -{31,58,-58}, -{31,58,-57}, -{31,58,-56}, -{31,58,-55}, -{31,58,-54}, -{31,58,-53}, -{31,58,-52}, -{31,58,-51}, -{31,58,-50}, -{31,58,-49}, -{31,58,-48}, -{31,58,-47}, -{31,58,-46}, -{31,58,-45}, -{31,58,-44}, -{31,58,-43}, -{31,58,-42}, -{31,58,-41}, -{31,58,-40}, -{31,58,-39}, -{31,58,-38}, -{31,58,-37}, -{31,58,-36}, -{31,58,-35}, -{31,58,-34}, -{31,58,-33}, -{31,58,-32}, -{31,58,-31}, -{31,58,-30}, -{31,58,-29}, -{31,58,-28}, -{31,58,-27}, -{31,58,-26}, -{31,58,-25}, -{31,58,-24}, -{31,58,-23}, -{31,58,-22}, -{31,58,-21}, -{31,58,-20}, -{31,58,-19}, -{31,58,-18}, -{31,59,-90}, -{31,59,-89}, -{31,59,-88}, -{31,59,-87}, -{31,59,-86}, -{31,59,-85}, -{31,59,-84}, -{31,59,-83}, -{31,59,-82}, -{31,59,-81}, -{31,59,-80}, -{31,59,-79}, -{31,59,-78}, -{31,59,-77}, -{31,59,-76}, -{31,59,-75}, -{31,59,-74}, -{31,59,-73}, -{31,59,-72}, -{31,59,-71}, -{31,59,-70}, -{31,59,-69}, -{31,59,-68}, -{31,59,-67}, -{31,59,-66}, -{31,59,-65}, -{31,59,-64}, -{31,59,-63}, -{31,59,-62}, -{31,59,-61}, -{31,59,-60}, -{31,59,-59}, -{31,59,-58}, -{31,59,-57}, -{31,59,-56}, -{31,59,-55}, -{31,59,-54}, -{31,59,-53}, -{31,59,-52}, -{31,59,-51}, -{31,59,-50}, -{31,59,-49}, -{31,59,-48}, -{31,59,-47}, -{31,59,-46}, -{31,59,-45}, -{31,59,-44}, -{31,59,-43}, -{31,59,-42}, -{31,59,-41}, -{31,59,-40}, -{31,59,-39}, -{31,59,-38}, -{31,59,-37}, -{31,59,-36}, -{31,59,-35}, -{31,59,-34}, -{31,59,-33}, -{31,59,-32}, -{31,59,-31}, -{31,59,-30}, -{31,59,-29}, -{31,59,-28}, -{31,59,-27}, -{31,59,-26}, -{31,60,-90}, -{31,60,-89}, -{31,60,-88}, -{31,60,-87}, -{31,60,-86}, -{31,60,-85}, -{31,60,-84}, -{31,60,-83}, -{31,60,-82}, -{31,60,-81}, -{31,60,-80}, -{31,60,-79}, -{31,60,-78}, -{31,60,-77}, -{31,60,-76}, -{31,60,-75}, -{31,60,-74}, -{31,60,-73}, -{31,60,-72}, -{31,60,-71}, -{31,60,-70}, -{31,60,-69}, -{31,60,-68}, -{31,60,-67}, -{31,60,-66}, -{31,60,-65}, -{31,60,-64}, -{31,60,-63}, -{31,60,-62}, -{31,60,-61}, -{31,60,-60}, -{31,60,-59}, -{31,60,-58}, -{31,60,-57}, -{31,60,-56}, -{31,60,-55}, -{31,60,-54}, -{31,60,-53}, -{31,60,-52}, -{31,60,-51}, -{31,60,-50}, -{31,60,-49}, -{31,60,-48}, -{31,60,-47}, -{31,60,-46}, -{31,60,-45}, -{31,60,-44}, -{31,60,-43}, -{31,60,-42}, -{31,60,-41}, -{31,60,-40}, -{31,60,-39}, -{31,60,-38}, -{31,60,-37}, -{31,60,-36}, -{31,60,-35}, -{31,60,-34}, -{31,61,-91}, -{31,61,-90}, -{31,61,-89}, -{31,61,-88}, -{31,61,-87}, -{31,61,-86}, -{31,61,-85}, -{31,61,-84}, -{31,61,-83}, -{31,61,-82}, -{31,61,-81}, -{31,61,-80}, -{31,61,-79}, -{31,61,-78}, -{31,61,-77}, -{31,61,-76}, -{31,61,-75}, -{31,61,-74}, -{31,61,-73}, -{31,61,-72}, -{31,61,-71}, -{31,61,-70}, -{31,61,-69}, -{31,61,-68}, -{31,61,-67}, -{31,61,-66}, -{31,61,-65}, -{31,61,-64}, -{31,61,-63}, -{31,61,-62}, -{31,61,-61}, -{31,61,-60}, -{31,61,-59}, -{31,61,-58}, -{31,61,-57}, -{31,61,-56}, -{31,61,-55}, -{31,61,-54}, -{31,61,-53}, -{31,61,-52}, -{31,61,-51}, -{31,61,-50}, -{31,61,-49}, -{31,61,-48}, -{31,61,-47}, -{31,61,-46}, -{31,61,-45}, -{31,61,-44}, -{31,61,-43}, -{31,61,-42}, -{31,61,-41}, -{31,61,-40}, -{31,62,-92}, -{31,62,-91}, -{31,62,-90}, -{31,62,-89}, -{31,62,-88}, -{31,62,-87}, -{31,62,-86}, -{31,62,-85}, -{31,62,-84}, -{31,62,-83}, -{31,62,-82}, -{31,62,-81}, -{31,62,-80}, -{31,62,-79}, -{31,62,-78}, -{31,62,-77}, -{31,62,-76}, -{31,62,-75}, -{31,62,-74}, -{31,62,-73}, -{31,62,-72}, -{31,62,-71}, -{31,62,-70}, -{31,62,-69}, -{31,62,-68}, -{31,62,-67}, -{31,62,-66}, -{31,62,-65}, -{31,62,-64}, -{31,62,-63}, -{31,62,-62}, -{31,62,-61}, -{31,62,-60}, -{31,62,-59}, -{31,62,-58}, -{31,62,-57}, -{31,62,-56}, -{31,62,-55}, -{31,62,-54}, -{31,62,-53}, -{31,62,-52}, -{31,62,-51}, -{31,62,-50}, -{31,62,-49}, -{31,62,-48}, -{31,62,-47}, -{31,62,-46}, -{31,63,-93}, -{31,63,-92}, -{31,63,-91}, -{31,63,-90}, -{31,63,-89}, -{31,63,-88}, -{31,63,-87}, -{31,63,-86}, -{31,63,-85}, -{31,63,-84}, -{31,63,-83}, -{31,63,-82}, -{31,63,-81}, -{31,63,-80}, -{31,63,-79}, -{31,63,-78}, -{31,63,-77}, -{31,63,-76}, -{31,63,-75}, -{31,63,-74}, -{31,63,-73}, -{31,63,-72}, -{31,63,-71}, -{31,63,-70}, -{31,63,-69}, -{31,63,-68}, -{31,63,-67}, -{31,63,-66}, -{31,63,-65}, -{31,63,-64}, -{31,63,-63}, -{31,63,-62}, -{31,63,-61}, -{31,63,-60}, -{31,63,-59}, -{31,63,-58}, -{31,63,-57}, -{31,63,-56}, -{31,63,-55}, -{31,63,-54}, -{31,63,-53}, -{31,63,-52}, -{31,64,-94}, -{31,64,-93}, -{31,64,-92}, -{31,64,-91}, -{31,64,-90}, -{31,64,-89}, -{31,64,-88}, -{31,64,-87}, -{31,64,-86}, -{31,64,-85}, -{31,64,-84}, -{31,64,-83}, -{31,64,-82}, -{31,64,-81}, -{31,64,-80}, -{31,64,-79}, -{31,64,-78}, -{31,64,-77}, -{31,64,-76}, -{31,64,-75}, -{31,64,-74}, -{31,64,-73}, -{31,64,-72}, -{31,64,-71}, -{31,64,-70}, -{31,64,-69}, -{31,64,-68}, -{31,64,-67}, -{31,64,-66}, -{31,64,-65}, -{31,64,-64}, -{31,64,-63}, -{31,64,-62}, -{31,64,-61}, -{31,64,-60}, -{31,64,-59}, -{31,64,-58}, -{31,64,-57}, -{31,65,-95}, -{31,65,-94}, -{31,65,-93}, -{31,65,-92}, -{31,65,-91}, -{31,65,-90}, -{31,65,-89}, -{31,65,-88}, -{31,65,-87}, -{31,65,-86}, -{31,65,-85}, -{31,65,-84}, -{31,65,-83}, -{31,65,-82}, -{31,65,-81}, -{31,65,-80}, -{31,65,-79}, -{31,65,-78}, -{31,65,-77}, -{31,65,-76}, -{31,65,-75}, -{31,65,-74}, -{31,65,-73}, -{31,65,-72}, -{31,65,-71}, -{31,65,-70}, -{31,65,-69}, -{31,65,-68}, -{31,65,-67}, -{31,65,-66}, -{31,65,-65}, -{31,65,-64}, -{31,65,-63}, -{31,65,-62}, -{31,65,-61}, -{31,66,-95}, -{31,66,-94}, -{31,66,-93}, -{31,66,-92}, -{31,66,-91}, -{31,66,-90}, -{31,66,-89}, -{31,66,-88}, -{31,66,-87}, -{31,66,-86}, -{31,66,-85}, -{31,66,-84}, -{31,66,-83}, -{31,66,-82}, -{31,66,-81}, -{31,66,-80}, -{31,66,-79}, -{31,66,-78}, -{31,66,-77}, -{31,66,-76}, -{31,66,-75}, -{31,66,-74}, -{31,66,-73}, -{31,66,-72}, -{31,66,-71}, -{31,66,-70}, -{31,66,-69}, -{31,66,-68}, -{31,66,-67}, -{31,66,-66}, -{31,67,-96}, -{31,67,-95}, -{31,67,-94}, -{31,67,-93}, -{31,67,-92}, -{31,67,-91}, -{31,67,-90}, -{31,67,-89}, -{31,67,-88}, -{31,67,-87}, -{31,67,-86}, -{31,67,-85}, -{31,67,-84}, -{31,67,-83}, -{31,67,-82}, -{31,67,-81}, -{31,67,-80}, -{31,67,-79}, -{31,67,-78}, -{31,67,-77}, -{31,67,-76}, -{31,67,-75}, -{31,67,-74}, -{31,67,-73}, -{31,67,-72}, -{31,67,-71}, -{31,67,-70}, -{31,68,-97}, -{31,68,-96}, -{31,68,-95}, -{31,68,-94}, -{31,68,-93}, -{31,68,-92}, -{31,68,-91}, -{31,68,-90}, -{31,68,-89}, -{31,68,-88}, -{31,68,-87}, -{31,68,-86}, -{31,68,-85}, -{31,68,-84}, -{31,68,-83}, -{31,68,-82}, -{31,68,-81}, -{31,68,-80}, -{31,68,-79}, -{31,68,-78}, -{31,68,-77}, -{31,68,-76}, -{31,68,-75}, -{31,68,-74}, -{31,69,-98}, -{31,69,-97}, -{31,69,-96}, -{31,69,-95}, -{31,69,-94}, -{31,69,-93}, -{31,69,-92}, -{31,69,-91}, -{31,69,-90}, -{31,69,-89}, -{31,69,-88}, -{31,69,-87}, -{31,69,-86}, -{31,69,-85}, -{31,69,-84}, -{31,69,-83}, -{31,69,-82}, -{31,69,-81}, -{31,69,-80}, -{31,69,-79}, -{31,69,-78}, -{31,70,-99}, -{31,70,-98}, -{31,70,-97}, -{31,70,-96}, -{31,70,-95}, -{31,70,-94}, -{31,70,-93}, -{31,70,-92}, -{31,70,-91}, -{31,70,-90}, -{31,70,-89}, -{31,70,-88}, -{31,70,-87}, -{31,70,-86}, -{31,70,-85}, -{31,70,-84}, -{31,70,-83}, -{31,70,-82}, -{31,71,-100}, -{31,71,-99}, -{31,71,-98}, -{31,71,-97}, -{31,71,-96}, -{31,71,-95}, -{31,71,-94}, -{31,71,-93}, -{31,71,-92}, -{31,71,-91}, -{31,71,-90}, -{31,71,-89}, -{31,71,-88}, -{31,71,-87}, -{31,71,-86}, -{31,72,-100}, -{31,72,-99}, -{31,72,-98}, -{31,72,-97}, -{31,72,-96}, -{31,72,-95}, -{31,72,-94}, -{31,72,-93}, -{31,72,-92}, -{31,72,-91}, -{31,72,-90}, -{31,72,-89}, -{31,73,-101}, -{31,73,-100}, -{31,73,-99}, -{31,73,-98}, -{31,73,-97}, -{31,73,-96}, -{31,73,-95}, -{31,73,-94}, -{31,73,-93}, -{31,73,-92}, -{31,74,-102}, -{31,74,-101}, -{31,74,-100}, -{31,74,-99}, -{31,74,-98}, -{31,74,-97}, -{31,74,-96}, -{31,75,-103}, -{31,75,-102}, -{31,75,-101}, -{31,75,-100}, -{31,75,-99}, -{31,76,-104}, -{31,76,-103}, -{31,76,-102}, -{31,77,-105}, -{32,-39,34}, -{32,-39,35}, -{32,-39,36}, -{32,-39,37}, -{32,-39,38}, -{32,-38,30}, -{32,-38,31}, -{32,-38,32}, -{32,-38,33}, -{32,-38,34}, -{32,-38,35}, -{32,-38,36}, -{32,-38,37}, -{32,-38,38}, -{32,-37,27}, -{32,-37,28}, -{32,-37,29}, -{32,-37,30}, -{32,-37,31}, -{32,-37,32}, -{32,-37,33}, -{32,-37,34}, -{32,-37,35}, -{32,-37,36}, -{32,-37,37}, -{32,-37,38}, -{32,-36,24}, -{32,-36,25}, -{32,-36,26}, -{32,-36,27}, -{32,-36,28}, -{32,-36,29}, -{32,-36,30}, -{32,-36,31}, -{32,-36,32}, -{32,-36,33}, -{32,-36,34}, -{32,-36,35}, -{32,-36,36}, -{32,-36,37}, -{32,-36,38}, -{32,-35,21}, -{32,-35,22}, -{32,-35,23}, -{32,-35,24}, -{32,-35,25}, -{32,-35,26}, -{32,-35,27}, -{32,-35,28}, -{32,-35,29}, -{32,-35,30}, -{32,-35,31}, -{32,-35,32}, -{32,-35,33}, -{32,-35,34}, -{32,-35,35}, -{32,-35,36}, -{32,-35,37}, -{32,-35,38}, -{32,-34,18}, -{32,-34,19}, -{32,-34,20}, -{32,-34,21}, -{32,-34,22}, -{32,-34,23}, -{32,-34,24}, -{32,-34,25}, -{32,-34,26}, -{32,-34,27}, -{32,-34,28}, -{32,-34,29}, -{32,-34,30}, -{32,-34,31}, -{32,-34,32}, -{32,-34,33}, -{32,-34,34}, -{32,-34,35}, -{32,-34,36}, -{32,-34,37}, -{32,-34,38}, -{32,-33,16}, -{32,-33,17}, -{32,-33,18}, -{32,-33,19}, -{32,-33,20}, -{32,-33,21}, -{32,-33,22}, -{32,-33,23}, -{32,-33,24}, -{32,-33,25}, -{32,-33,26}, -{32,-33,27}, -{32,-33,28}, -{32,-33,29}, -{32,-33,30}, -{32,-33,31}, -{32,-33,32}, -{32,-33,33}, -{32,-33,34}, -{32,-33,35}, -{32,-33,36}, -{32,-33,37}, -{32,-33,38}, -{32,-32,13}, -{32,-32,14}, -{32,-32,15}, -{32,-32,16}, -{32,-32,17}, -{32,-32,18}, -{32,-32,19}, -{32,-32,20}, -{32,-32,21}, -{32,-32,22}, -{32,-32,23}, -{32,-32,24}, -{32,-32,25}, -{32,-32,26}, -{32,-32,27}, -{32,-32,28}, -{32,-32,29}, -{32,-32,30}, -{32,-32,31}, -{32,-32,32}, -{32,-32,33}, -{32,-32,34}, -{32,-32,35}, -{32,-32,36}, -{32,-32,37}, -{32,-32,38}, -{32,-32,39}, -{32,-31,11}, -{32,-31,12}, -{32,-31,13}, -{32,-31,14}, -{32,-31,15}, -{32,-31,16}, -{32,-31,17}, -{32,-31,18}, -{32,-31,19}, -{32,-31,20}, -{32,-31,21}, -{32,-31,22}, -{32,-31,23}, -{32,-31,24}, -{32,-31,25}, -{32,-31,26}, -{32,-31,27}, -{32,-31,28}, -{32,-31,29}, -{32,-31,30}, -{32,-31,31}, -{32,-31,32}, -{32,-31,33}, -{32,-31,34}, -{32,-31,35}, -{32,-31,36}, -{32,-31,37}, -{32,-31,38}, -{32,-31,39}, -{32,-30,9}, -{32,-30,10}, -{32,-30,11}, -{32,-30,12}, -{32,-30,13}, -{32,-30,14}, -{32,-30,15}, -{32,-30,16}, -{32,-30,17}, -{32,-30,18}, -{32,-30,19}, -{32,-30,20}, -{32,-30,21}, -{32,-30,22}, -{32,-30,23}, -{32,-30,24}, -{32,-30,25}, -{32,-30,26}, -{32,-30,27}, -{32,-30,28}, -{32,-30,29}, -{32,-30,30}, -{32,-30,31}, -{32,-30,32}, -{32,-30,33}, -{32,-30,34}, -{32,-30,35}, -{32,-30,36}, -{32,-30,37}, -{32,-30,38}, -{32,-30,39}, -{32,-29,7}, -{32,-29,8}, -{32,-29,9}, -{32,-29,10}, -{32,-29,11}, -{32,-29,12}, -{32,-29,13}, -{32,-29,14}, -{32,-29,15}, -{32,-29,16}, -{32,-29,17}, -{32,-29,18}, -{32,-29,19}, -{32,-29,20}, -{32,-29,21}, -{32,-29,22}, -{32,-29,23}, -{32,-29,24}, -{32,-29,25}, -{32,-29,26}, -{32,-29,27}, -{32,-29,28}, -{32,-29,29}, -{32,-29,30}, -{32,-29,31}, -{32,-29,32}, -{32,-29,33}, -{32,-29,34}, -{32,-29,35}, -{32,-29,36}, -{32,-29,37}, -{32,-29,38}, -{32,-29,39}, -{32,-28,5}, -{32,-28,6}, -{32,-28,7}, -{32,-28,8}, -{32,-28,9}, -{32,-28,10}, -{32,-28,11}, -{32,-28,12}, -{32,-28,13}, -{32,-28,14}, -{32,-28,15}, -{32,-28,16}, -{32,-28,17}, -{32,-28,18}, -{32,-28,19}, -{32,-28,20}, -{32,-28,21}, -{32,-28,22}, -{32,-28,23}, -{32,-28,24}, -{32,-28,25}, -{32,-28,26}, -{32,-28,27}, -{32,-28,28}, -{32,-28,29}, -{32,-28,30}, -{32,-28,31}, -{32,-28,32}, -{32,-28,33}, -{32,-28,34}, -{32,-28,35}, -{32,-28,36}, -{32,-28,37}, -{32,-28,38}, -{32,-28,39}, -{32,-27,3}, -{32,-27,4}, -{32,-27,5}, -{32,-27,6}, -{32,-27,7}, -{32,-27,8}, -{32,-27,9}, -{32,-27,10}, -{32,-27,11}, -{32,-27,12}, -{32,-27,13}, -{32,-27,14}, -{32,-27,15}, -{32,-27,16}, -{32,-27,17}, -{32,-27,18}, -{32,-27,19}, -{32,-27,20}, -{32,-27,21}, -{32,-27,22}, -{32,-27,23}, -{32,-27,24}, -{32,-27,25}, -{32,-27,26}, -{32,-27,27}, -{32,-27,28}, -{32,-27,29}, -{32,-27,30}, -{32,-27,31}, -{32,-27,32}, -{32,-27,33}, -{32,-27,34}, -{32,-27,35}, -{32,-27,36}, -{32,-27,37}, -{32,-27,38}, -{32,-27,39}, -{32,-26,1}, -{32,-26,2}, -{32,-26,3}, -{32,-26,4}, -{32,-26,5}, -{32,-26,6}, -{32,-26,7}, -{32,-26,8}, -{32,-26,9}, -{32,-26,10}, -{32,-26,11}, -{32,-26,12}, -{32,-26,13}, -{32,-26,14}, -{32,-26,15}, -{32,-26,16}, -{32,-26,17}, -{32,-26,18}, -{32,-26,19}, -{32,-26,20}, -{32,-26,21}, -{32,-26,22}, -{32,-26,23}, -{32,-26,24}, -{32,-26,25}, -{32,-26,26}, -{32,-26,27}, -{32,-26,28}, -{32,-26,29}, -{32,-26,30}, -{32,-26,31}, -{32,-26,32}, -{32,-26,33}, -{32,-26,34}, -{32,-26,35}, -{32,-26,36}, -{32,-26,37}, -{32,-26,38}, -{32,-26,39}, -{32,-25,0}, -{32,-25,1}, -{32,-25,2}, -{32,-25,3}, -{32,-25,4}, -{32,-25,5}, -{32,-25,6}, -{32,-25,7}, -{32,-25,8}, -{32,-25,9}, -{32,-25,10}, -{32,-25,11}, -{32,-25,12}, -{32,-25,13}, -{32,-25,14}, -{32,-25,15}, -{32,-25,16}, -{32,-25,17}, -{32,-25,18}, -{32,-25,19}, -{32,-25,20}, -{32,-25,21}, -{32,-25,22}, -{32,-25,23}, -{32,-25,24}, -{32,-25,25}, -{32,-25,26}, -{32,-25,27}, -{32,-25,28}, -{32,-25,29}, -{32,-25,30}, -{32,-25,31}, -{32,-25,32}, -{32,-25,33}, -{32,-25,34}, -{32,-25,35}, -{32,-25,36}, -{32,-25,37}, -{32,-25,38}, -{32,-25,39}, -{32,-24,-2}, -{32,-24,-1}, -{32,-24,0}, -{32,-24,1}, -{32,-24,2}, -{32,-24,3}, -{32,-24,4}, -{32,-24,5}, -{32,-24,6}, -{32,-24,7}, -{32,-24,8}, -{32,-24,9}, -{32,-24,10}, -{32,-24,11}, -{32,-24,12}, -{32,-24,13}, -{32,-24,14}, -{32,-24,15}, -{32,-24,16}, -{32,-24,17}, -{32,-24,18}, -{32,-24,19}, -{32,-24,20}, -{32,-24,21}, -{32,-24,22}, -{32,-24,23}, -{32,-24,24}, -{32,-24,25}, -{32,-24,26}, -{32,-24,27}, -{32,-24,28}, -{32,-24,29}, -{32,-24,30}, -{32,-24,31}, -{32,-24,32}, -{32,-24,33}, -{32,-24,34}, -{32,-24,35}, -{32,-24,36}, -{32,-24,37}, -{32,-24,38}, -{32,-24,39}, -{32,-23,-4}, -{32,-23,-3}, -{32,-23,-2}, -{32,-23,-1}, -{32,-23,0}, -{32,-23,1}, -{32,-23,2}, -{32,-23,3}, -{32,-23,4}, -{32,-23,5}, -{32,-23,6}, -{32,-23,7}, -{32,-23,8}, -{32,-23,9}, -{32,-23,10}, -{32,-23,11}, -{32,-23,12}, -{32,-23,13}, -{32,-23,14}, -{32,-23,15}, -{32,-23,16}, -{32,-23,17}, -{32,-23,18}, -{32,-23,19}, -{32,-23,20}, -{32,-23,21}, -{32,-23,22}, -{32,-23,23}, -{32,-23,24}, -{32,-23,25}, -{32,-23,26}, -{32,-23,27}, -{32,-23,28}, -{32,-23,29}, -{32,-23,30}, -{32,-23,31}, -{32,-23,32}, -{32,-23,33}, -{32,-23,34}, -{32,-23,35}, -{32,-23,36}, -{32,-23,37}, -{32,-23,38}, -{32,-23,39}, -{32,-22,-5}, -{32,-22,-4}, -{32,-22,-3}, -{32,-22,-2}, -{32,-22,-1}, -{32,-22,0}, -{32,-22,1}, -{32,-22,2}, -{32,-22,3}, -{32,-22,4}, -{32,-22,5}, -{32,-22,6}, -{32,-22,7}, -{32,-22,8}, -{32,-22,9}, -{32,-22,10}, -{32,-22,11}, -{32,-22,12}, -{32,-22,13}, -{32,-22,14}, -{32,-22,15}, -{32,-22,16}, -{32,-22,17}, -{32,-22,18}, -{32,-22,19}, -{32,-22,20}, -{32,-22,21}, -{32,-22,22}, -{32,-22,23}, -{32,-22,24}, -{32,-22,25}, -{32,-22,26}, -{32,-22,27}, -{32,-22,28}, -{32,-22,29}, -{32,-22,30}, -{32,-22,31}, -{32,-22,32}, -{32,-22,33}, -{32,-22,34}, -{32,-22,35}, -{32,-22,36}, -{32,-22,37}, -{32,-22,38}, -{32,-22,39}, -{32,-21,-7}, -{32,-21,-6}, -{32,-21,-5}, -{32,-21,-4}, -{32,-21,-3}, -{32,-21,-2}, -{32,-21,-1}, -{32,-21,0}, -{32,-21,1}, -{32,-21,2}, -{32,-21,3}, -{32,-21,4}, -{32,-21,5}, -{32,-21,6}, -{32,-21,7}, -{32,-21,8}, -{32,-21,9}, -{32,-21,10}, -{32,-21,11}, -{32,-21,12}, -{32,-21,13}, -{32,-21,14}, -{32,-21,15}, -{32,-21,16}, -{32,-21,17}, -{32,-21,18}, -{32,-21,19}, -{32,-21,20}, -{32,-21,21}, -{32,-21,22}, -{32,-21,23}, -{32,-21,24}, -{32,-21,25}, -{32,-21,26}, -{32,-21,27}, -{32,-21,28}, -{32,-21,29}, -{32,-21,30}, -{32,-21,31}, -{32,-21,32}, -{32,-21,33}, -{32,-21,34}, -{32,-21,35}, -{32,-21,36}, -{32,-21,37}, -{32,-21,38}, -{32,-21,39}, -{32,-20,-8}, -{32,-20,-7}, -{32,-20,-6}, -{32,-20,-5}, -{32,-20,-4}, -{32,-20,-3}, -{32,-20,-2}, -{32,-20,-1}, -{32,-20,0}, -{32,-20,1}, -{32,-20,2}, -{32,-20,3}, -{32,-20,4}, -{32,-20,5}, -{32,-20,6}, -{32,-20,7}, -{32,-20,8}, -{32,-20,9}, -{32,-20,10}, -{32,-20,11}, -{32,-20,12}, -{32,-20,13}, -{32,-20,14}, -{32,-20,15}, -{32,-20,16}, -{32,-20,17}, -{32,-20,18}, -{32,-20,19}, -{32,-20,20}, -{32,-20,21}, -{32,-20,22}, -{32,-20,23}, -{32,-20,24}, -{32,-20,25}, -{32,-20,26}, -{32,-20,27}, -{32,-20,28}, -{32,-20,29}, -{32,-20,30}, -{32,-20,31}, -{32,-20,32}, -{32,-20,33}, -{32,-20,34}, -{32,-20,35}, -{32,-20,36}, -{32,-20,37}, -{32,-20,38}, -{32,-20,39}, -{32,-19,-10}, -{32,-19,-9}, -{32,-19,-8}, -{32,-19,-7}, -{32,-19,-6}, -{32,-19,-5}, -{32,-19,-4}, -{32,-19,-3}, -{32,-19,-2}, -{32,-19,-1}, -{32,-19,0}, -{32,-19,1}, -{32,-19,2}, -{32,-19,3}, -{32,-19,4}, -{32,-19,5}, -{32,-19,6}, -{32,-19,7}, -{32,-19,8}, -{32,-19,9}, -{32,-19,10}, -{32,-19,11}, -{32,-19,12}, -{32,-19,13}, -{32,-19,14}, -{32,-19,15}, -{32,-19,16}, -{32,-19,17}, -{32,-19,18}, -{32,-19,19}, -{32,-19,20}, -{32,-19,21}, -{32,-19,22}, -{32,-19,23}, -{32,-19,24}, -{32,-19,25}, -{32,-19,26}, -{32,-19,27}, -{32,-19,28}, -{32,-19,29}, -{32,-19,30}, -{32,-19,31}, -{32,-19,32}, -{32,-19,33}, -{32,-19,34}, -{32,-19,35}, -{32,-19,36}, -{32,-19,37}, -{32,-19,38}, -{32,-19,39}, -{32,-18,-11}, -{32,-18,-10}, -{32,-18,-9}, -{32,-18,-8}, -{32,-18,-7}, -{32,-18,-6}, -{32,-18,-5}, -{32,-18,-4}, -{32,-18,-3}, -{32,-18,-2}, -{32,-18,-1}, -{32,-18,0}, -{32,-18,1}, -{32,-18,2}, -{32,-18,3}, -{32,-18,4}, -{32,-18,5}, -{32,-18,6}, -{32,-18,7}, -{32,-18,8}, -{32,-18,9}, -{32,-18,10}, -{32,-18,11}, -{32,-18,12}, -{32,-18,13}, -{32,-18,14}, -{32,-18,15}, -{32,-18,16}, -{32,-18,17}, -{32,-18,18}, -{32,-18,19}, -{32,-18,20}, -{32,-18,21}, -{32,-18,22}, -{32,-18,23}, -{32,-18,24}, -{32,-18,25}, -{32,-18,26}, -{32,-18,27}, -{32,-18,28}, -{32,-18,29}, -{32,-18,30}, -{32,-18,31}, -{32,-18,32}, -{32,-18,33}, -{32,-18,34}, -{32,-18,35}, -{32,-18,36}, -{32,-18,37}, -{32,-18,38}, -{32,-18,39}, -{32,-17,-13}, -{32,-17,-12}, -{32,-17,-11}, -{32,-17,-10}, -{32,-17,-9}, -{32,-17,-8}, -{32,-17,-7}, -{32,-17,-6}, -{32,-17,-5}, -{32,-17,-4}, -{32,-17,-3}, -{32,-17,-2}, -{32,-17,-1}, -{32,-17,0}, -{32,-17,1}, -{32,-17,2}, -{32,-17,3}, -{32,-17,4}, -{32,-17,5}, -{32,-17,6}, -{32,-17,7}, -{32,-17,8}, -{32,-17,9}, -{32,-17,10}, -{32,-17,11}, -{32,-17,12}, -{32,-17,13}, -{32,-17,14}, -{32,-17,15}, -{32,-17,16}, -{32,-17,17}, -{32,-17,18}, -{32,-17,19}, -{32,-17,20}, -{32,-17,21}, -{32,-17,22}, -{32,-17,23}, -{32,-17,24}, -{32,-17,25}, -{32,-17,26}, -{32,-17,27}, -{32,-17,28}, -{32,-17,29}, -{32,-17,30}, -{32,-17,31}, -{32,-17,32}, -{32,-17,33}, -{32,-17,34}, -{32,-17,35}, -{32,-17,36}, -{32,-17,37}, -{32,-17,38}, -{32,-17,39}, -{32,-16,-14}, -{32,-16,-13}, -{32,-16,-12}, -{32,-16,-11}, -{32,-16,-10}, -{32,-16,-9}, -{32,-16,-8}, -{32,-16,-7}, -{32,-16,-6}, -{32,-16,-5}, -{32,-16,-4}, -{32,-16,-3}, -{32,-16,-2}, -{32,-16,-1}, -{32,-16,0}, -{32,-16,1}, -{32,-16,2}, -{32,-16,3}, -{32,-16,4}, -{32,-16,5}, -{32,-16,6}, -{32,-16,7}, -{32,-16,8}, -{32,-16,9}, -{32,-16,10}, -{32,-16,11}, -{32,-16,12}, -{32,-16,13}, -{32,-16,14}, -{32,-16,15}, -{32,-16,16}, -{32,-16,17}, -{32,-16,18}, -{32,-16,19}, -{32,-16,20}, -{32,-16,21}, -{32,-16,22}, -{32,-16,23}, -{32,-16,24}, -{32,-16,25}, -{32,-16,26}, -{32,-16,27}, -{32,-16,28}, -{32,-16,29}, -{32,-16,30}, -{32,-16,31}, -{32,-16,32}, -{32,-16,33}, -{32,-16,34}, -{32,-16,35}, -{32,-16,36}, -{32,-16,37}, -{32,-16,38}, -{32,-16,39}, -{32,-15,-16}, -{32,-15,-15}, -{32,-15,-14}, -{32,-15,-13}, -{32,-15,-12}, -{32,-15,-11}, -{32,-15,-10}, -{32,-15,-9}, -{32,-15,-8}, -{32,-15,-7}, -{32,-15,-6}, -{32,-15,-5}, -{32,-15,-4}, -{32,-15,-3}, -{32,-15,-2}, -{32,-15,-1}, -{32,-15,0}, -{32,-15,1}, -{32,-15,2}, -{32,-15,3}, -{32,-15,4}, -{32,-15,5}, -{32,-15,6}, -{32,-15,7}, -{32,-15,8}, -{32,-15,9}, -{32,-15,10}, -{32,-15,11}, -{32,-15,12}, -{32,-15,13}, -{32,-15,14}, -{32,-15,15}, -{32,-15,16}, -{32,-15,17}, -{32,-15,18}, -{32,-15,19}, -{32,-15,20}, -{32,-15,21}, -{32,-15,22}, -{32,-15,23}, -{32,-15,24}, -{32,-15,25}, -{32,-15,26}, -{32,-15,27}, -{32,-15,28}, -{32,-15,29}, -{32,-15,30}, -{32,-15,31}, -{32,-15,32}, -{32,-15,33}, -{32,-15,34}, -{32,-15,35}, -{32,-15,36}, -{32,-15,37}, -{32,-15,38}, -{32,-15,39}, -{32,-14,-17}, -{32,-14,-16}, -{32,-14,-15}, -{32,-14,-14}, -{32,-14,-13}, -{32,-14,-12}, -{32,-14,-11}, -{32,-14,-10}, -{32,-14,-9}, -{32,-14,-8}, -{32,-14,-7}, -{32,-14,-6}, -{32,-14,-5}, -{32,-14,-4}, -{32,-14,-3}, -{32,-14,-2}, -{32,-14,-1}, -{32,-14,0}, -{32,-14,1}, -{32,-14,2}, -{32,-14,3}, -{32,-14,4}, -{32,-14,5}, -{32,-14,6}, -{32,-14,7}, -{32,-14,8}, -{32,-14,9}, -{32,-14,10}, -{32,-14,11}, -{32,-14,12}, -{32,-14,13}, -{32,-14,14}, -{32,-14,15}, -{32,-14,16}, -{32,-14,17}, -{32,-14,18}, -{32,-14,19}, -{32,-14,20}, -{32,-14,21}, -{32,-14,22}, -{32,-14,23}, -{32,-14,24}, -{32,-14,25}, -{32,-14,26}, -{32,-14,27}, -{32,-14,28}, -{32,-14,29}, -{32,-14,30}, -{32,-14,31}, -{32,-14,32}, -{32,-14,33}, -{32,-14,34}, -{32,-14,35}, -{32,-14,36}, -{32,-14,37}, -{32,-14,38}, -{32,-14,39}, -{32,-13,-18}, -{32,-13,-17}, -{32,-13,-16}, -{32,-13,-15}, -{32,-13,-14}, -{32,-13,-13}, -{32,-13,-12}, -{32,-13,-11}, -{32,-13,-10}, -{32,-13,-9}, -{32,-13,-8}, -{32,-13,-7}, -{32,-13,-6}, -{32,-13,-5}, -{32,-13,-4}, -{32,-13,-3}, -{32,-13,-2}, -{32,-13,-1}, -{32,-13,0}, -{32,-13,1}, -{32,-13,2}, -{32,-13,3}, -{32,-13,4}, -{32,-13,5}, -{32,-13,6}, -{32,-13,7}, -{32,-13,8}, -{32,-13,9}, -{32,-13,10}, -{32,-13,11}, -{32,-13,12}, -{32,-13,13}, -{32,-13,14}, -{32,-13,15}, -{32,-13,16}, -{32,-13,17}, -{32,-13,18}, -{32,-13,19}, -{32,-13,20}, -{32,-13,21}, -{32,-13,22}, -{32,-13,23}, -{32,-13,24}, -{32,-13,25}, -{32,-13,26}, -{32,-13,27}, -{32,-13,28}, -{32,-13,29}, -{32,-13,30}, -{32,-13,31}, -{32,-13,32}, -{32,-13,33}, -{32,-13,34}, -{32,-13,35}, -{32,-13,36}, -{32,-13,37}, -{32,-13,38}, -{32,-13,39}, -{32,-13,40}, -{32,-12,-20}, -{32,-12,-19}, -{32,-12,-18}, -{32,-12,-17}, -{32,-12,-16}, -{32,-12,-15}, -{32,-12,-14}, -{32,-12,-13}, -{32,-12,-12}, -{32,-12,-11}, -{32,-12,-10}, -{32,-12,-9}, -{32,-12,-8}, -{32,-12,-7}, -{32,-12,-6}, -{32,-12,-5}, -{32,-12,-4}, -{32,-12,-3}, -{32,-12,-2}, -{32,-12,-1}, -{32,-12,0}, -{32,-12,1}, -{32,-12,2}, -{32,-12,3}, -{32,-12,4}, -{32,-12,5}, -{32,-12,6}, -{32,-12,7}, -{32,-12,8}, -{32,-12,9}, -{32,-12,10}, -{32,-12,11}, -{32,-12,12}, -{32,-12,13}, -{32,-12,14}, -{32,-12,15}, -{32,-12,16}, -{32,-12,17}, -{32,-12,18}, -{32,-12,19}, -{32,-12,20}, -{32,-12,21}, -{32,-12,22}, -{32,-12,23}, -{32,-12,24}, -{32,-12,25}, -{32,-12,26}, -{32,-12,27}, -{32,-12,28}, -{32,-12,29}, -{32,-12,30}, -{32,-12,31}, -{32,-12,32}, -{32,-12,33}, -{32,-12,34}, -{32,-12,35}, -{32,-12,36}, -{32,-12,37}, -{32,-12,38}, -{32,-12,39}, -{32,-12,40}, -{32,-11,-21}, -{32,-11,-20}, -{32,-11,-19}, -{32,-11,-18}, -{32,-11,-17}, -{32,-11,-16}, -{32,-11,-15}, -{32,-11,-14}, -{32,-11,-13}, -{32,-11,-12}, -{32,-11,-11}, -{32,-11,-10}, -{32,-11,-9}, -{32,-11,-8}, -{32,-11,-7}, -{32,-11,-6}, -{32,-11,-5}, -{32,-11,-4}, -{32,-11,-3}, -{32,-11,-2}, -{32,-11,-1}, -{32,-11,0}, -{32,-11,1}, -{32,-11,2}, -{32,-11,3}, -{32,-11,4}, -{32,-11,5}, -{32,-11,6}, -{32,-11,7}, -{32,-11,8}, -{32,-11,9}, -{32,-11,10}, -{32,-11,11}, -{32,-11,12}, -{32,-11,13}, -{32,-11,14}, -{32,-11,15}, -{32,-11,16}, -{32,-11,17}, -{32,-11,18}, -{32,-11,19}, -{32,-11,20}, -{32,-11,21}, -{32,-11,22}, -{32,-11,23}, -{32,-11,24}, -{32,-11,25}, -{32,-11,26}, -{32,-11,27}, -{32,-11,28}, -{32,-11,29}, -{32,-11,30}, -{32,-11,31}, -{32,-11,32}, -{32,-11,33}, -{32,-11,34}, -{32,-11,35}, -{32,-11,36}, -{32,-11,37}, -{32,-11,38}, -{32,-11,39}, -{32,-11,40}, -{32,-10,-22}, -{32,-10,-21}, -{32,-10,-20}, -{32,-10,-19}, -{32,-10,-18}, -{32,-10,-17}, -{32,-10,-16}, -{32,-10,-15}, -{32,-10,-14}, -{32,-10,-13}, -{32,-10,-12}, -{32,-10,-11}, -{32,-10,-10}, -{32,-10,-9}, -{32,-10,-8}, -{32,-10,-7}, -{32,-10,-6}, -{32,-10,-5}, -{32,-10,-4}, -{32,-10,-3}, -{32,-10,-2}, -{32,-10,-1}, -{32,-10,0}, -{32,-10,1}, -{32,-10,2}, -{32,-10,3}, -{32,-10,4}, -{32,-10,5}, -{32,-10,6}, -{32,-10,7}, -{32,-10,8}, -{32,-10,9}, -{32,-10,10}, -{32,-10,11}, -{32,-10,12}, -{32,-10,13}, -{32,-10,14}, -{32,-10,15}, -{32,-10,16}, -{32,-10,17}, -{32,-10,18}, -{32,-10,19}, -{32,-10,20}, -{32,-10,21}, -{32,-10,22}, -{32,-10,23}, -{32,-10,24}, -{32,-10,25}, -{32,-10,26}, -{32,-10,27}, -{32,-10,28}, -{32,-10,29}, -{32,-10,30}, -{32,-10,31}, -{32,-10,32}, -{32,-10,33}, -{32,-10,34}, -{32,-10,35}, -{32,-10,36}, -{32,-10,37}, -{32,-10,38}, -{32,-10,39}, -{32,-10,40}, -{32,-9,-24}, -{32,-9,-23}, -{32,-9,-22}, -{32,-9,-21}, -{32,-9,-20}, -{32,-9,-19}, -{32,-9,-18}, -{32,-9,-17}, -{32,-9,-16}, -{32,-9,-15}, -{32,-9,-14}, -{32,-9,-13}, -{32,-9,-12}, -{32,-9,-11}, -{32,-9,-10}, -{32,-9,-9}, -{32,-9,-8}, -{32,-9,-7}, -{32,-9,-6}, -{32,-9,-5}, -{32,-9,-4}, -{32,-9,-3}, -{32,-9,-2}, -{32,-9,-1}, -{32,-9,0}, -{32,-9,1}, -{32,-9,2}, -{32,-9,3}, -{32,-9,4}, -{32,-9,5}, -{32,-9,6}, -{32,-9,7}, -{32,-9,8}, -{32,-9,9}, -{32,-9,10}, -{32,-9,11}, -{32,-9,12}, -{32,-9,13}, -{32,-9,14}, -{32,-9,15}, -{32,-9,16}, -{32,-9,17}, -{32,-9,18}, -{32,-9,19}, -{32,-9,20}, -{32,-9,21}, -{32,-9,22}, -{32,-9,23}, -{32,-9,24}, -{32,-9,25}, -{32,-9,26}, -{32,-9,27}, -{32,-9,28}, -{32,-9,29}, -{32,-9,30}, -{32,-9,31}, -{32,-9,32}, -{32,-9,33}, -{32,-9,34}, -{32,-9,35}, -{32,-9,36}, -{32,-9,37}, -{32,-9,38}, -{32,-9,39}, -{32,-9,40}, -{32,-8,-25}, -{32,-8,-24}, -{32,-8,-23}, -{32,-8,-22}, -{32,-8,-21}, -{32,-8,-20}, -{32,-8,-19}, -{32,-8,-18}, -{32,-8,-17}, -{32,-8,-16}, -{32,-8,-15}, -{32,-8,-14}, -{32,-8,-13}, -{32,-8,-12}, -{32,-8,-11}, -{32,-8,-10}, -{32,-8,-9}, -{32,-8,-8}, -{32,-8,-7}, -{32,-8,-6}, -{32,-8,-5}, -{32,-8,-4}, -{32,-8,-3}, -{32,-8,-2}, -{32,-8,-1}, -{32,-8,0}, -{32,-8,1}, -{32,-8,2}, -{32,-8,3}, -{32,-8,4}, -{32,-8,5}, -{32,-8,6}, -{32,-8,7}, -{32,-8,8}, -{32,-8,9}, -{32,-8,10}, -{32,-8,11}, -{32,-8,12}, -{32,-8,13}, -{32,-8,14}, -{32,-8,15}, -{32,-8,16}, -{32,-8,17}, -{32,-8,18}, -{32,-8,19}, -{32,-8,20}, -{32,-8,21}, -{32,-8,22}, -{32,-8,23}, -{32,-8,24}, -{32,-8,25}, -{32,-8,26}, -{32,-8,27}, -{32,-8,28}, -{32,-8,29}, -{32,-8,30}, -{32,-8,31}, -{32,-8,32}, -{32,-8,33}, -{32,-8,34}, -{32,-8,35}, -{32,-8,36}, -{32,-8,37}, -{32,-8,38}, -{32,-8,39}, -{32,-8,40}, -{32,-7,-26}, -{32,-7,-25}, -{32,-7,-24}, -{32,-7,-23}, -{32,-7,-22}, -{32,-7,-21}, -{32,-7,-20}, -{32,-7,-19}, -{32,-7,-18}, -{32,-7,-17}, -{32,-7,-16}, -{32,-7,-15}, -{32,-7,-14}, -{32,-7,-13}, -{32,-7,-12}, -{32,-7,-11}, -{32,-7,-10}, -{32,-7,-9}, -{32,-7,-8}, -{32,-7,-7}, -{32,-7,-6}, -{32,-7,-5}, -{32,-7,-4}, -{32,-7,-3}, -{32,-7,-2}, -{32,-7,-1}, -{32,-7,0}, -{32,-7,1}, -{32,-7,2}, -{32,-7,3}, -{32,-7,4}, -{32,-7,5}, -{32,-7,6}, -{32,-7,7}, -{32,-7,8}, -{32,-7,9}, -{32,-7,10}, -{32,-7,11}, -{32,-7,12}, -{32,-7,13}, -{32,-7,14}, -{32,-7,15}, -{32,-7,16}, -{32,-7,17}, -{32,-7,18}, -{32,-7,19}, -{32,-7,20}, -{32,-7,21}, -{32,-7,22}, -{32,-7,23}, -{32,-7,24}, -{32,-7,25}, -{32,-7,26}, -{32,-7,27}, -{32,-7,28}, -{32,-7,29}, -{32,-7,30}, -{32,-7,31}, -{32,-7,32}, -{32,-7,33}, -{32,-7,34}, -{32,-7,35}, -{32,-7,36}, -{32,-7,37}, -{32,-7,38}, -{32,-7,39}, -{32,-7,40}, -{32,-6,-27}, -{32,-6,-26}, -{32,-6,-25}, -{32,-6,-24}, -{32,-6,-23}, -{32,-6,-22}, -{32,-6,-21}, -{32,-6,-20}, -{32,-6,-19}, -{32,-6,-18}, -{32,-6,-17}, -{32,-6,-16}, -{32,-6,-15}, -{32,-6,-14}, -{32,-6,-13}, -{32,-6,-12}, -{32,-6,-11}, -{32,-6,-10}, -{32,-6,-9}, -{32,-6,-8}, -{32,-6,-7}, -{32,-6,-6}, -{32,-6,-5}, -{32,-6,-4}, -{32,-6,-3}, -{32,-6,-2}, -{32,-6,-1}, -{32,-6,0}, -{32,-6,1}, -{32,-6,2}, -{32,-6,3}, -{32,-6,4}, -{32,-6,5}, -{32,-6,6}, -{32,-6,7}, -{32,-6,8}, -{32,-6,9}, -{32,-6,10}, -{32,-6,11}, -{32,-6,12}, -{32,-6,13}, -{32,-6,14}, -{32,-6,15}, -{32,-6,16}, -{32,-6,17}, -{32,-6,18}, -{32,-6,19}, -{32,-6,20}, -{32,-6,21}, -{32,-6,22}, -{32,-6,23}, -{32,-6,24}, -{32,-6,25}, -{32,-6,26}, -{32,-6,27}, -{32,-6,28}, -{32,-6,29}, -{32,-6,30}, -{32,-6,31}, -{32,-6,32}, -{32,-6,33}, -{32,-6,34}, -{32,-6,35}, -{32,-6,36}, -{32,-6,37}, -{32,-6,38}, -{32,-6,39}, -{32,-6,40}, -{32,-5,-28}, -{32,-5,-27}, -{32,-5,-26}, -{32,-5,-25}, -{32,-5,-24}, -{32,-5,-23}, -{32,-5,-22}, -{32,-5,-21}, -{32,-5,-20}, -{32,-5,-19}, -{32,-5,-18}, -{32,-5,-17}, -{32,-5,-16}, -{32,-5,-15}, -{32,-5,-14}, -{32,-5,-13}, -{32,-5,-12}, -{32,-5,-11}, -{32,-5,-10}, -{32,-5,-9}, -{32,-5,-8}, -{32,-5,-7}, -{32,-5,-6}, -{32,-5,-5}, -{32,-5,-4}, -{32,-5,-3}, -{32,-5,-2}, -{32,-5,-1}, -{32,-5,0}, -{32,-5,1}, -{32,-5,2}, -{32,-5,3}, -{32,-5,4}, -{32,-5,5}, -{32,-5,6}, -{32,-5,7}, -{32,-5,8}, -{32,-5,9}, -{32,-5,10}, -{32,-5,11}, -{32,-5,12}, -{32,-5,13}, -{32,-5,14}, -{32,-5,15}, -{32,-5,16}, -{32,-5,17}, -{32,-5,18}, -{32,-5,19}, -{32,-5,20}, -{32,-5,21}, -{32,-5,22}, -{32,-5,23}, -{32,-5,24}, -{32,-5,25}, -{32,-5,26}, -{32,-5,27}, -{32,-5,28}, -{32,-5,29}, -{32,-5,30}, -{32,-5,31}, -{32,-5,32}, -{32,-5,33}, -{32,-5,34}, -{32,-5,35}, -{32,-5,36}, -{32,-5,37}, -{32,-5,38}, -{32,-5,39}, -{32,-5,40}, -{32,-4,-30}, -{32,-4,-29}, -{32,-4,-28}, -{32,-4,-27}, -{32,-4,-26}, -{32,-4,-25}, -{32,-4,-24}, -{32,-4,-23}, -{32,-4,-22}, -{32,-4,-21}, -{32,-4,-20}, -{32,-4,-19}, -{32,-4,-18}, -{32,-4,-17}, -{32,-4,-16}, -{32,-4,-15}, -{32,-4,-14}, -{32,-4,-13}, -{32,-4,-12}, -{32,-4,-11}, -{32,-4,-10}, -{32,-4,-9}, -{32,-4,-8}, -{32,-4,-7}, -{32,-4,-6}, -{32,-4,-5}, -{32,-4,-4}, -{32,-4,-3}, -{32,-4,-2}, -{32,-4,-1}, -{32,-4,0}, -{32,-4,1}, -{32,-4,2}, -{32,-4,3}, -{32,-4,4}, -{32,-4,5}, -{32,-4,6}, -{32,-4,7}, -{32,-4,8}, -{32,-4,9}, -{32,-4,10}, -{32,-4,11}, -{32,-4,12}, -{32,-4,13}, -{32,-4,14}, -{32,-4,15}, -{32,-4,16}, -{32,-4,17}, -{32,-4,18}, -{32,-4,19}, -{32,-4,20}, -{32,-4,21}, -{32,-4,22}, -{32,-4,23}, -{32,-4,24}, -{32,-4,25}, -{32,-4,26}, -{32,-4,27}, -{32,-4,28}, -{32,-4,29}, -{32,-4,30}, -{32,-4,31}, -{32,-4,32}, -{32,-4,33}, -{32,-4,34}, -{32,-4,35}, -{32,-4,36}, -{32,-4,37}, -{32,-4,38}, -{32,-4,39}, -{32,-4,40}, -{32,-3,-31}, -{32,-3,-30}, -{32,-3,-29}, -{32,-3,-28}, -{32,-3,-27}, -{32,-3,-26}, -{32,-3,-25}, -{32,-3,-24}, -{32,-3,-23}, -{32,-3,-22}, -{32,-3,-21}, -{32,-3,-20}, -{32,-3,-19}, -{32,-3,-18}, -{32,-3,-17}, -{32,-3,-16}, -{32,-3,-15}, -{32,-3,-14}, -{32,-3,-13}, -{32,-3,-12}, -{32,-3,-11}, -{32,-3,-10}, -{32,-3,-9}, -{32,-3,-8}, -{32,-3,-7}, -{32,-3,-6}, -{32,-3,-5}, -{32,-3,-4}, -{32,-3,-3}, -{32,-3,-2}, -{32,-3,-1}, -{32,-3,0}, -{32,-3,1}, -{32,-3,2}, -{32,-3,3}, -{32,-3,4}, -{32,-3,5}, -{32,-3,6}, -{32,-3,7}, -{32,-3,8}, -{32,-3,9}, -{32,-3,10}, -{32,-3,11}, -{32,-3,12}, -{32,-3,13}, -{32,-3,14}, -{32,-3,15}, -{32,-3,16}, -{32,-3,17}, -{32,-3,18}, -{32,-3,19}, -{32,-3,20}, -{32,-3,21}, -{32,-3,22}, -{32,-3,23}, -{32,-3,24}, -{32,-3,25}, -{32,-3,26}, -{32,-3,27}, -{32,-3,28}, -{32,-3,29}, -{32,-3,30}, -{32,-3,31}, -{32,-3,32}, -{32,-3,33}, -{32,-3,34}, -{32,-3,35}, -{32,-3,36}, -{32,-3,37}, -{32,-3,38}, -{32,-3,39}, -{32,-3,40}, -{32,-2,-32}, -{32,-2,-31}, -{32,-2,-30}, -{32,-2,-29}, -{32,-2,-28}, -{32,-2,-27}, -{32,-2,-26}, -{32,-2,-25}, -{32,-2,-24}, -{32,-2,-23}, -{32,-2,-22}, -{32,-2,-21}, -{32,-2,-20}, -{32,-2,-19}, -{32,-2,-18}, -{32,-2,-17}, -{32,-2,-16}, -{32,-2,-15}, -{32,-2,-14}, -{32,-2,-13}, -{32,-2,-12}, -{32,-2,-11}, -{32,-2,-10}, -{32,-2,-9}, -{32,-2,-8}, -{32,-2,-7}, -{32,-2,-6}, -{32,-2,-5}, -{32,-2,-4}, -{32,-2,-3}, -{32,-2,-2}, -{32,-2,-1}, -{32,-2,0}, -{32,-2,1}, -{32,-2,2}, -{32,-2,3}, -{32,-2,4}, -{32,-2,5}, -{32,-2,6}, -{32,-2,7}, -{32,-2,8}, -{32,-2,9}, -{32,-2,10}, -{32,-2,11}, -{32,-2,12}, -{32,-2,13}, -{32,-2,14}, -{32,-2,15}, -{32,-2,16}, -{32,-2,17}, -{32,-2,18}, -{32,-2,19}, -{32,-2,20}, -{32,-2,21}, -{32,-2,22}, -{32,-2,23}, -{32,-2,24}, -{32,-2,25}, -{32,-2,26}, -{32,-2,27}, -{32,-2,28}, -{32,-2,29}, -{32,-2,30}, -{32,-2,31}, -{32,-2,32}, -{32,-2,33}, -{32,-2,34}, -{32,-2,35}, -{32,-2,36}, -{32,-2,37}, -{32,-2,38}, -{32,-2,39}, -{32,-2,40}, -{32,-1,-33}, -{32,-1,-32}, -{32,-1,-31}, -{32,-1,-30}, -{32,-1,-29}, -{32,-1,-28}, -{32,-1,-27}, -{32,-1,-26}, -{32,-1,-25}, -{32,-1,-24}, -{32,-1,-23}, -{32,-1,-22}, -{32,-1,-21}, -{32,-1,-20}, -{32,-1,-19}, -{32,-1,-18}, -{32,-1,-17}, -{32,-1,-16}, -{32,-1,-15}, -{32,-1,-14}, -{32,-1,-13}, -{32,-1,-12}, -{32,-1,-11}, -{32,-1,-10}, -{32,-1,-9}, -{32,-1,-8}, -{32,-1,-7}, -{32,-1,-6}, -{32,-1,-5}, -{32,-1,-4}, -{32,-1,-3}, -{32,-1,-2}, -{32,-1,-1}, -{32,-1,0}, -{32,-1,1}, -{32,-1,2}, -{32,-1,3}, -{32,-1,4}, -{32,-1,5}, -{32,-1,6}, -{32,-1,7}, -{32,-1,8}, -{32,-1,9}, -{32,-1,10}, -{32,-1,11}, -{32,-1,12}, -{32,-1,13}, -{32,-1,14}, -{32,-1,15}, -{32,-1,16}, -{32,-1,17}, -{32,-1,18}, -{32,-1,19}, -{32,-1,20}, -{32,-1,21}, -{32,-1,22}, -{32,-1,23}, -{32,-1,24}, -{32,-1,25}, -{32,-1,26}, -{32,-1,27}, -{32,-1,28}, -{32,-1,29}, -{32,-1,30}, -{32,-1,31}, -{32,-1,32}, -{32,-1,33}, -{32,-1,34}, -{32,-1,35}, -{32,-1,36}, -{32,-1,37}, -{32,-1,38}, -{32,-1,39}, -{32,-1,40}, -{32,0,-34}, -{32,0,-33}, -{32,0,-32}, -{32,0,-31}, -{32,0,-30}, -{32,0,-29}, -{32,0,-28}, -{32,0,-27}, -{32,0,-26}, -{32,0,-25}, -{32,0,-24}, -{32,0,-23}, -{32,0,-22}, -{32,0,-21}, -{32,0,-20}, -{32,0,-19}, -{32,0,-18}, -{32,0,-17}, -{32,0,-16}, -{32,0,-15}, -{32,0,-14}, -{32,0,-13}, -{32,0,-12}, -{32,0,-11}, -{32,0,-10}, -{32,0,-9}, -{32,0,-8}, -{32,0,-7}, -{32,0,-6}, -{32,0,-5}, -{32,0,-4}, -{32,0,-3}, -{32,0,-2}, -{32,0,-1}, -{32,0,0}, -{32,0,1}, -{32,0,2}, -{32,0,3}, -{32,0,4}, -{32,0,5}, -{32,0,6}, -{32,0,7}, -{32,0,8}, -{32,0,9}, -{32,0,10}, -{32,0,11}, -{32,0,12}, -{32,0,13}, -{32,0,14}, -{32,0,15}, -{32,0,16}, -{32,0,17}, -{32,0,18}, -{32,0,19}, -{32,0,20}, -{32,0,21}, -{32,0,22}, -{32,0,23}, -{32,0,24}, -{32,0,25}, -{32,0,26}, -{32,0,27}, -{32,0,28}, -{32,0,29}, -{32,0,30}, -{32,0,31}, -{32,0,32}, -{32,0,33}, -{32,0,34}, -{32,0,35}, -{32,0,36}, -{32,0,37}, -{32,0,38}, -{32,0,39}, -{32,0,40}, -{32,1,-35}, -{32,1,-34}, -{32,1,-33}, -{32,1,-32}, -{32,1,-31}, -{32,1,-30}, -{32,1,-29}, -{32,1,-28}, -{32,1,-27}, -{32,1,-26}, -{32,1,-25}, -{32,1,-24}, -{32,1,-23}, -{32,1,-22}, -{32,1,-21}, -{32,1,-20}, -{32,1,-19}, -{32,1,-18}, -{32,1,-17}, -{32,1,-16}, -{32,1,-15}, -{32,1,-14}, -{32,1,-13}, -{32,1,-12}, -{32,1,-11}, -{32,1,-10}, -{32,1,-9}, -{32,1,-8}, -{32,1,-7}, -{32,1,-6}, -{32,1,-5}, -{32,1,-4}, -{32,1,-3}, -{32,1,-2}, -{32,1,-1}, -{32,1,0}, -{32,1,1}, -{32,1,2}, -{32,1,3}, -{32,1,4}, -{32,1,5}, -{32,1,6}, -{32,1,7}, -{32,1,8}, -{32,1,9}, -{32,1,10}, -{32,1,11}, -{32,1,12}, -{32,1,13}, -{32,1,14}, -{32,1,15}, -{32,1,16}, -{32,1,17}, -{32,1,18}, -{32,1,19}, -{32,1,20}, -{32,1,21}, -{32,1,22}, -{32,1,23}, -{32,1,24}, -{32,1,25}, -{32,1,26}, -{32,1,27}, -{32,1,28}, -{32,1,29}, -{32,1,30}, -{32,1,31}, -{32,1,32}, -{32,1,33}, -{32,1,34}, -{32,1,35}, -{32,1,36}, -{32,1,37}, -{32,1,38}, -{32,1,39}, -{32,1,40}, -{32,2,-36}, -{32,2,-35}, -{32,2,-34}, -{32,2,-33}, -{32,2,-32}, -{32,2,-31}, -{32,2,-30}, -{32,2,-29}, -{32,2,-28}, -{32,2,-27}, -{32,2,-26}, -{32,2,-25}, -{32,2,-24}, -{32,2,-23}, -{32,2,-22}, -{32,2,-21}, -{32,2,-20}, -{32,2,-19}, -{32,2,-18}, -{32,2,-17}, -{32,2,-16}, -{32,2,-15}, -{32,2,-14}, -{32,2,-13}, -{32,2,-12}, -{32,2,-11}, -{32,2,-10}, -{32,2,-9}, -{32,2,-8}, -{32,2,-7}, -{32,2,-6}, -{32,2,-5}, -{32,2,-4}, -{32,2,-3}, -{32,2,-2}, -{32,2,-1}, -{32,2,0}, -{32,2,1}, -{32,2,2}, -{32,2,3}, -{32,2,4}, -{32,2,5}, -{32,2,6}, -{32,2,7}, -{32,2,8}, -{32,2,9}, -{32,2,10}, -{32,2,11}, -{32,2,12}, -{32,2,13}, -{32,2,14}, -{32,2,15}, -{32,2,16}, -{32,2,17}, -{32,2,18}, -{32,2,19}, -{32,2,20}, -{32,2,21}, -{32,2,22}, -{32,2,23}, -{32,2,24}, -{32,2,25}, -{32,2,26}, -{32,2,27}, -{32,2,28}, -{32,2,29}, -{32,2,30}, -{32,2,31}, -{32,2,32}, -{32,2,33}, -{32,2,34}, -{32,2,35}, -{32,2,36}, -{32,2,37}, -{32,2,38}, -{32,2,39}, -{32,2,40}, -{32,2,41}, -{32,3,-38}, -{32,3,-37}, -{32,3,-36}, -{32,3,-35}, -{32,3,-34}, -{32,3,-33}, -{32,3,-32}, -{32,3,-31}, -{32,3,-30}, -{32,3,-29}, -{32,3,-28}, -{32,3,-27}, -{32,3,-26}, -{32,3,-25}, -{32,3,-24}, -{32,3,-23}, -{32,3,-22}, -{32,3,-21}, -{32,3,-20}, -{32,3,-19}, -{32,3,-18}, -{32,3,-17}, -{32,3,-16}, -{32,3,-15}, -{32,3,-14}, -{32,3,-13}, -{32,3,-12}, -{32,3,-11}, -{32,3,-10}, -{32,3,-9}, -{32,3,-8}, -{32,3,-7}, -{32,3,-6}, -{32,3,-5}, -{32,3,-4}, -{32,3,-3}, -{32,3,-2}, -{32,3,-1}, -{32,3,0}, -{32,3,1}, -{32,3,2}, -{32,3,3}, -{32,3,4}, -{32,3,5}, -{32,3,6}, -{32,3,7}, -{32,3,8}, -{32,3,9}, -{32,3,10}, -{32,3,11}, -{32,3,12}, -{32,3,13}, -{32,3,14}, -{32,3,15}, -{32,3,16}, -{32,3,17}, -{32,3,18}, -{32,3,19}, -{32,3,20}, -{32,3,21}, -{32,3,22}, -{32,3,23}, -{32,3,24}, -{32,3,25}, -{32,3,26}, -{32,3,27}, -{32,3,28}, -{32,3,29}, -{32,3,30}, -{32,3,31}, -{32,3,32}, -{32,3,33}, -{32,3,34}, -{32,3,35}, -{32,3,36}, -{32,3,37}, -{32,3,38}, -{32,3,39}, -{32,3,40}, -{32,3,41}, -{32,4,-39}, -{32,4,-38}, -{32,4,-37}, -{32,4,-36}, -{32,4,-35}, -{32,4,-34}, -{32,4,-33}, -{32,4,-32}, -{32,4,-31}, -{32,4,-30}, -{32,4,-29}, -{32,4,-28}, -{32,4,-27}, -{32,4,-26}, -{32,4,-25}, -{32,4,-24}, -{32,4,-23}, -{32,4,-22}, -{32,4,-21}, -{32,4,-20}, -{32,4,-19}, -{32,4,-18}, -{32,4,-17}, -{32,4,-16}, -{32,4,-15}, -{32,4,-14}, -{32,4,-13}, -{32,4,-12}, -{32,4,-11}, -{32,4,-10}, -{32,4,-9}, -{32,4,-8}, -{32,4,-7}, -{32,4,-6}, -{32,4,-5}, -{32,4,-4}, -{32,4,-3}, -{32,4,-2}, -{32,4,-1}, -{32,4,0}, -{32,4,1}, -{32,4,2}, -{32,4,3}, -{32,4,4}, -{32,4,5}, -{32,4,6}, -{32,4,7}, -{32,4,8}, -{32,4,9}, -{32,4,10}, -{32,4,11}, -{32,4,12}, -{32,4,13}, -{32,4,14}, -{32,4,15}, -{32,4,16}, -{32,4,17}, -{32,4,18}, -{32,4,19}, -{32,4,20}, -{32,4,21}, -{32,4,22}, -{32,4,23}, -{32,4,24}, -{32,4,25}, -{32,4,26}, -{32,4,27}, -{32,4,28}, -{32,4,29}, -{32,4,30}, -{32,4,31}, -{32,4,32}, -{32,4,33}, -{32,4,34}, -{32,4,35}, -{32,4,36}, -{32,4,37}, -{32,4,38}, -{32,4,39}, -{32,4,40}, -{32,4,41}, -{32,5,-40}, -{32,5,-39}, -{32,5,-38}, -{32,5,-37}, -{32,5,-36}, -{32,5,-35}, -{32,5,-34}, -{32,5,-33}, -{32,5,-32}, -{32,5,-31}, -{32,5,-30}, -{32,5,-29}, -{32,5,-28}, -{32,5,-27}, -{32,5,-26}, -{32,5,-25}, -{32,5,-24}, -{32,5,-23}, -{32,5,-22}, -{32,5,-21}, -{32,5,-20}, -{32,5,-19}, -{32,5,-18}, -{32,5,-17}, -{32,5,-16}, -{32,5,-15}, -{32,5,-14}, -{32,5,-13}, -{32,5,-12}, -{32,5,-11}, -{32,5,-10}, -{32,5,-9}, -{32,5,-8}, -{32,5,-7}, -{32,5,-6}, -{32,5,-5}, -{32,5,-4}, -{32,5,-3}, -{32,5,-2}, -{32,5,-1}, -{32,5,0}, -{32,5,1}, -{32,5,2}, -{32,5,3}, -{32,5,4}, -{32,5,5}, -{32,5,6}, -{32,5,7}, -{32,5,8}, -{32,5,9}, -{32,5,10}, -{32,5,11}, -{32,5,12}, -{32,5,13}, -{32,5,14}, -{32,5,15}, -{32,5,16}, -{32,5,17}, -{32,5,18}, -{32,5,19}, -{32,5,20}, -{32,5,21}, -{32,5,22}, -{32,5,23}, -{32,5,24}, -{32,5,25}, -{32,5,26}, -{32,5,27}, -{32,5,28}, -{32,5,29}, -{32,5,30}, -{32,5,31}, -{32,5,32}, -{32,5,33}, -{32,5,34}, -{32,5,35}, -{32,5,36}, -{32,5,37}, -{32,5,38}, -{32,5,39}, -{32,5,40}, -{32,5,41}, -{32,6,-41}, -{32,6,-40}, -{32,6,-39}, -{32,6,-38}, -{32,6,-37}, -{32,6,-36}, -{32,6,-35}, -{32,6,-34}, -{32,6,-33}, -{32,6,-32}, -{32,6,-31}, -{32,6,-30}, -{32,6,-29}, -{32,6,-28}, -{32,6,-27}, -{32,6,-26}, -{32,6,-25}, -{32,6,-24}, -{32,6,-23}, -{32,6,-22}, -{32,6,-21}, -{32,6,-20}, -{32,6,-19}, -{32,6,-18}, -{32,6,-17}, -{32,6,-16}, -{32,6,-15}, -{32,6,-14}, -{32,6,-13}, -{32,6,-12}, -{32,6,-11}, -{32,6,-10}, -{32,6,-9}, -{32,6,-8}, -{32,6,-7}, -{32,6,-6}, -{32,6,-5}, -{32,6,-4}, -{32,6,-3}, -{32,6,-2}, -{32,6,-1}, -{32,6,0}, -{32,6,1}, -{32,6,2}, -{32,6,3}, -{32,6,4}, -{32,6,5}, -{32,6,6}, -{32,6,7}, -{32,6,8}, -{32,6,9}, -{32,6,10}, -{32,6,11}, -{32,6,12}, -{32,6,13}, -{32,6,14}, -{32,6,15}, -{32,6,16}, -{32,6,17}, -{32,6,18}, -{32,6,19}, -{32,6,20}, -{32,6,21}, -{32,6,22}, -{32,6,23}, -{32,6,24}, -{32,6,25}, -{32,6,26}, -{32,6,27}, -{32,6,28}, -{32,6,29}, -{32,6,30}, -{32,6,31}, -{32,6,32}, -{32,6,33}, -{32,6,34}, -{32,6,35}, -{32,6,36}, -{32,6,37}, -{32,6,38}, -{32,6,39}, -{32,6,40}, -{32,6,41}, -{32,7,-42}, -{32,7,-41}, -{32,7,-40}, -{32,7,-39}, -{32,7,-38}, -{32,7,-37}, -{32,7,-36}, -{32,7,-35}, -{32,7,-34}, -{32,7,-33}, -{32,7,-32}, -{32,7,-31}, -{32,7,-30}, -{32,7,-29}, -{32,7,-28}, -{32,7,-27}, -{32,7,-26}, -{32,7,-25}, -{32,7,-24}, -{32,7,-23}, -{32,7,-22}, -{32,7,-21}, -{32,7,-20}, -{32,7,-19}, -{32,7,-18}, -{32,7,-17}, -{32,7,-16}, -{32,7,-15}, -{32,7,-14}, -{32,7,-13}, -{32,7,-12}, -{32,7,-11}, -{32,7,-10}, -{32,7,-9}, -{32,7,-8}, -{32,7,-7}, -{32,7,-6}, -{32,7,-5}, -{32,7,-4}, -{32,7,-3}, -{32,7,-2}, -{32,7,-1}, -{32,7,0}, -{32,7,1}, -{32,7,2}, -{32,7,3}, -{32,7,4}, -{32,7,5}, -{32,7,6}, -{32,7,7}, -{32,7,8}, -{32,7,9}, -{32,7,10}, -{32,7,11}, -{32,7,12}, -{32,7,13}, -{32,7,14}, -{32,7,15}, -{32,7,16}, -{32,7,17}, -{32,7,18}, -{32,7,19}, -{32,7,20}, -{32,7,21}, -{32,7,22}, -{32,7,23}, -{32,7,24}, -{32,7,25}, -{32,7,26}, -{32,7,27}, -{32,7,28}, -{32,7,29}, -{32,7,30}, -{32,7,31}, -{32,7,32}, -{32,7,33}, -{32,7,34}, -{32,7,35}, -{32,7,36}, -{32,7,37}, -{32,7,38}, -{32,7,39}, -{32,7,40}, -{32,7,41}, -{32,8,-43}, -{32,8,-42}, -{32,8,-41}, -{32,8,-40}, -{32,8,-39}, -{32,8,-38}, -{32,8,-37}, -{32,8,-36}, -{32,8,-35}, -{32,8,-34}, -{32,8,-33}, -{32,8,-32}, -{32,8,-31}, -{32,8,-30}, -{32,8,-29}, -{32,8,-28}, -{32,8,-27}, -{32,8,-26}, -{32,8,-25}, -{32,8,-24}, -{32,8,-23}, -{32,8,-22}, -{32,8,-21}, -{32,8,-20}, -{32,8,-19}, -{32,8,-18}, -{32,8,-17}, -{32,8,-16}, -{32,8,-15}, -{32,8,-14}, -{32,8,-13}, -{32,8,-12}, -{32,8,-11}, -{32,8,-10}, -{32,8,-9}, -{32,8,-8}, -{32,8,-7}, -{32,8,-6}, -{32,8,-5}, -{32,8,-4}, -{32,8,-3}, -{32,8,-2}, -{32,8,-1}, -{32,8,0}, -{32,8,1}, -{32,8,2}, -{32,8,3}, -{32,8,4}, -{32,8,5}, -{32,8,6}, -{32,8,7}, -{32,8,8}, -{32,8,9}, -{32,8,10}, -{32,8,11}, -{32,8,12}, -{32,8,13}, -{32,8,14}, -{32,8,15}, -{32,8,16}, -{32,8,17}, -{32,8,18}, -{32,8,19}, -{32,8,20}, -{32,8,21}, -{32,8,22}, -{32,8,23}, -{32,8,24}, -{32,8,25}, -{32,8,26}, -{32,8,27}, -{32,8,28}, -{32,8,29}, -{32,8,30}, -{32,8,31}, -{32,8,32}, -{32,8,33}, -{32,8,34}, -{32,8,35}, -{32,8,36}, -{32,8,37}, -{32,8,38}, -{32,8,39}, -{32,8,40}, -{32,8,41}, -{32,9,-44}, -{32,9,-43}, -{32,9,-42}, -{32,9,-41}, -{32,9,-40}, -{32,9,-39}, -{32,9,-38}, -{32,9,-37}, -{32,9,-36}, -{32,9,-35}, -{32,9,-34}, -{32,9,-33}, -{32,9,-32}, -{32,9,-31}, -{32,9,-30}, -{32,9,-29}, -{32,9,-28}, -{32,9,-27}, -{32,9,-26}, -{32,9,-25}, -{32,9,-24}, -{32,9,-23}, -{32,9,-22}, -{32,9,-21}, -{32,9,-20}, -{32,9,-19}, -{32,9,-18}, -{32,9,-17}, -{32,9,-16}, -{32,9,-15}, -{32,9,-14}, -{32,9,-13}, -{32,9,-12}, -{32,9,-11}, -{32,9,-10}, -{32,9,-9}, -{32,9,-8}, -{32,9,-7}, -{32,9,-6}, -{32,9,-5}, -{32,9,-4}, -{32,9,-3}, -{32,9,-2}, -{32,9,-1}, -{32,9,0}, -{32,9,1}, -{32,9,2}, -{32,9,3}, -{32,9,4}, -{32,9,5}, -{32,9,6}, -{32,9,7}, -{32,9,8}, -{32,9,9}, -{32,9,10}, -{32,9,11}, -{32,9,12}, -{32,9,13}, -{32,9,14}, -{32,9,15}, -{32,9,16}, -{32,9,17}, -{32,9,18}, -{32,9,19}, -{32,9,20}, -{32,9,21}, -{32,9,22}, -{32,9,23}, -{32,9,24}, -{32,9,25}, -{32,9,26}, -{32,9,27}, -{32,9,28}, -{32,9,29}, -{32,9,30}, -{32,9,31}, -{32,9,32}, -{32,9,33}, -{32,9,34}, -{32,9,35}, -{32,9,36}, -{32,9,37}, -{32,9,38}, -{32,9,39}, -{32,9,40}, -{32,9,41}, -{32,10,-45}, -{32,10,-44}, -{32,10,-43}, -{32,10,-42}, -{32,10,-41}, -{32,10,-40}, -{32,10,-39}, -{32,10,-38}, -{32,10,-37}, -{32,10,-36}, -{32,10,-35}, -{32,10,-34}, -{32,10,-33}, -{32,10,-32}, -{32,10,-31}, -{32,10,-30}, -{32,10,-29}, -{32,10,-28}, -{32,10,-27}, -{32,10,-26}, -{32,10,-25}, -{32,10,-24}, -{32,10,-23}, -{32,10,-22}, -{32,10,-21}, -{32,10,-20}, -{32,10,-19}, -{32,10,-18}, -{32,10,-17}, -{32,10,-16}, -{32,10,-15}, -{32,10,-14}, -{32,10,-13}, -{32,10,-12}, -{32,10,-11}, -{32,10,-10}, -{32,10,-9}, -{32,10,-8}, -{32,10,-7}, -{32,10,-6}, -{32,10,-5}, -{32,10,-4}, -{32,10,-3}, -{32,10,-2}, -{32,10,-1}, -{32,10,0}, -{32,10,1}, -{32,10,2}, -{32,10,3}, -{32,10,4}, -{32,10,5}, -{32,10,6}, -{32,10,7}, -{32,10,8}, -{32,10,9}, -{32,10,10}, -{32,10,11}, -{32,10,12}, -{32,10,13}, -{32,10,14}, -{32,10,15}, -{32,10,16}, -{32,10,17}, -{32,10,18}, -{32,10,19}, -{32,10,20}, -{32,10,21}, -{32,10,22}, -{32,10,23}, -{32,10,24}, -{32,10,25}, -{32,10,26}, -{32,10,27}, -{32,10,28}, -{32,10,29}, -{32,10,30}, -{32,10,31}, -{32,10,32}, -{32,10,33}, -{32,10,34}, -{32,10,35}, -{32,10,36}, -{32,10,37}, -{32,10,38}, -{32,10,39}, -{32,10,40}, -{32,10,41}, -{32,11,-46}, -{32,11,-45}, -{32,11,-44}, -{32,11,-43}, -{32,11,-42}, -{32,11,-41}, -{32,11,-40}, -{32,11,-39}, -{32,11,-38}, -{32,11,-37}, -{32,11,-36}, -{32,11,-35}, -{32,11,-34}, -{32,11,-33}, -{32,11,-32}, -{32,11,-31}, -{32,11,-30}, -{32,11,-29}, -{32,11,-28}, -{32,11,-27}, -{32,11,-26}, -{32,11,-25}, -{32,11,-24}, -{32,11,-23}, -{32,11,-22}, -{32,11,-21}, -{32,11,-20}, -{32,11,-19}, -{32,11,-18}, -{32,11,-17}, -{32,11,-16}, -{32,11,-15}, -{32,11,-14}, -{32,11,-13}, -{32,11,-12}, -{32,11,-11}, -{32,11,-10}, -{32,11,-9}, -{32,11,-8}, -{32,11,-7}, -{32,11,-6}, -{32,11,-5}, -{32,11,-4}, -{32,11,-3}, -{32,11,-2}, -{32,11,-1}, -{32,11,0}, -{32,11,1}, -{32,11,2}, -{32,11,3}, -{32,11,4}, -{32,11,5}, -{32,11,6}, -{32,11,7}, -{32,11,8}, -{32,11,9}, -{32,11,10}, -{32,11,11}, -{32,11,12}, -{32,11,13}, -{32,11,14}, -{32,11,15}, -{32,11,16}, -{32,11,17}, -{32,11,18}, -{32,11,19}, -{32,11,20}, -{32,11,21}, -{32,11,22}, -{32,11,23}, -{32,11,24}, -{32,11,25}, -{32,11,26}, -{32,11,27}, -{32,11,28}, -{32,11,29}, -{32,11,30}, -{32,11,31}, -{32,11,32}, -{32,11,33}, -{32,11,34}, -{32,11,35}, -{32,11,36}, -{32,11,37}, -{32,11,38}, -{32,11,39}, -{32,11,40}, -{32,11,41}, -{32,12,-47}, -{32,12,-46}, -{32,12,-45}, -{32,12,-44}, -{32,12,-43}, -{32,12,-42}, -{32,12,-41}, -{32,12,-40}, -{32,12,-39}, -{32,12,-38}, -{32,12,-37}, -{32,12,-36}, -{32,12,-35}, -{32,12,-34}, -{32,12,-33}, -{32,12,-32}, -{32,12,-31}, -{32,12,-30}, -{32,12,-29}, -{32,12,-28}, -{32,12,-27}, -{32,12,-26}, -{32,12,-25}, -{32,12,-24}, -{32,12,-23}, -{32,12,-22}, -{32,12,-21}, -{32,12,-20}, -{32,12,-19}, -{32,12,-18}, -{32,12,-17}, -{32,12,-16}, -{32,12,-15}, -{32,12,-14}, -{32,12,-13}, -{32,12,-12}, -{32,12,-11}, -{32,12,-10}, -{32,12,-9}, -{32,12,-8}, -{32,12,-7}, -{32,12,-6}, -{32,12,-5}, -{32,12,-4}, -{32,12,-3}, -{32,12,-2}, -{32,12,-1}, -{32,12,0}, -{32,12,1}, -{32,12,2}, -{32,12,3}, -{32,12,4}, -{32,12,5}, -{32,12,6}, -{32,12,7}, -{32,12,8}, -{32,12,9}, -{32,12,10}, -{32,12,11}, -{32,12,12}, -{32,12,13}, -{32,12,14}, -{32,12,15}, -{32,12,16}, -{32,12,17}, -{32,12,18}, -{32,12,19}, -{32,12,20}, -{32,12,21}, -{32,12,22}, -{32,12,23}, -{32,12,24}, -{32,12,25}, -{32,12,26}, -{32,12,27}, -{32,12,28}, -{32,12,29}, -{32,12,30}, -{32,12,31}, -{32,12,32}, -{32,12,33}, -{32,12,34}, -{32,12,35}, -{32,12,36}, -{32,12,37}, -{32,12,38}, -{32,12,39}, -{32,12,40}, -{32,12,41}, -{32,13,-48}, -{32,13,-47}, -{32,13,-46}, -{32,13,-45}, -{32,13,-44}, -{32,13,-43}, -{32,13,-42}, -{32,13,-41}, -{32,13,-40}, -{32,13,-39}, -{32,13,-38}, -{32,13,-37}, -{32,13,-36}, -{32,13,-35}, -{32,13,-34}, -{32,13,-33}, -{32,13,-32}, -{32,13,-31}, -{32,13,-30}, -{32,13,-29}, -{32,13,-28}, -{32,13,-27}, -{32,13,-26}, -{32,13,-25}, -{32,13,-24}, -{32,13,-23}, -{32,13,-22}, -{32,13,-21}, -{32,13,-20}, -{32,13,-19}, -{32,13,-18}, -{32,13,-17}, -{32,13,-16}, -{32,13,-15}, -{32,13,-14}, -{32,13,-13}, -{32,13,-12}, -{32,13,-11}, -{32,13,-10}, -{32,13,-9}, -{32,13,-8}, -{32,13,-7}, -{32,13,-6}, -{32,13,-5}, -{32,13,-4}, -{32,13,-3}, -{32,13,-2}, -{32,13,-1}, -{32,13,0}, -{32,13,1}, -{32,13,2}, -{32,13,3}, -{32,13,4}, -{32,13,5}, -{32,13,6}, -{32,13,7}, -{32,13,8}, -{32,13,9}, -{32,13,10}, -{32,13,11}, -{32,13,12}, -{32,13,13}, -{32,13,14}, -{32,13,15}, -{32,13,16}, -{32,13,17}, -{32,13,18}, -{32,13,19}, -{32,13,20}, -{32,13,21}, -{32,13,22}, -{32,13,23}, -{32,13,24}, -{32,13,25}, -{32,13,26}, -{32,13,27}, -{32,13,28}, -{32,13,29}, -{32,13,30}, -{32,13,31}, -{32,13,32}, -{32,13,33}, -{32,13,34}, -{32,13,35}, -{32,13,36}, -{32,13,37}, -{32,13,38}, -{32,13,39}, -{32,13,40}, -{32,13,41}, -{32,14,-49}, -{32,14,-48}, -{32,14,-47}, -{32,14,-46}, -{32,14,-45}, -{32,14,-44}, -{32,14,-43}, -{32,14,-42}, -{32,14,-41}, -{32,14,-40}, -{32,14,-39}, -{32,14,-38}, -{32,14,-37}, -{32,14,-36}, -{32,14,-35}, -{32,14,-34}, -{32,14,-33}, -{32,14,-32}, -{32,14,-31}, -{32,14,-30}, -{32,14,-29}, -{32,14,-28}, -{32,14,-27}, -{32,14,-26}, -{32,14,-25}, -{32,14,-24}, -{32,14,-23}, -{32,14,-22}, -{32,14,-21}, -{32,14,-20}, -{32,14,-19}, -{32,14,-18}, -{32,14,-17}, -{32,14,-16}, -{32,14,-15}, -{32,14,-14}, -{32,14,-13}, -{32,14,-12}, -{32,14,-11}, -{32,14,-10}, -{32,14,-9}, -{32,14,-8}, -{32,14,-7}, -{32,14,-6}, -{32,14,-5}, -{32,14,-4}, -{32,14,-3}, -{32,14,-2}, -{32,14,-1}, -{32,14,0}, -{32,14,1}, -{32,14,2}, -{32,14,3}, -{32,14,4}, -{32,14,5}, -{32,14,6}, -{32,14,7}, -{32,14,8}, -{32,14,9}, -{32,14,10}, -{32,14,11}, -{32,14,12}, -{32,14,13}, -{32,14,14}, -{32,14,15}, -{32,14,16}, -{32,14,17}, -{32,14,18}, -{32,14,19}, -{32,14,20}, -{32,14,21}, -{32,14,22}, -{32,14,23}, -{32,14,24}, -{32,14,25}, -{32,14,26}, -{32,14,27}, -{32,14,28}, -{32,14,29}, -{32,14,30}, -{32,14,31}, -{32,14,32}, -{32,14,33}, -{32,14,34}, -{32,14,35}, -{32,14,36}, -{32,14,37}, -{32,14,38}, -{32,14,39}, -{32,14,40}, -{32,14,41}, -{32,15,-50}, -{32,15,-49}, -{32,15,-48}, -{32,15,-47}, -{32,15,-46}, -{32,15,-45}, -{32,15,-44}, -{32,15,-43}, -{32,15,-42}, -{32,15,-41}, -{32,15,-40}, -{32,15,-39}, -{32,15,-38}, -{32,15,-37}, -{32,15,-36}, -{32,15,-35}, -{32,15,-34}, -{32,15,-33}, -{32,15,-32}, -{32,15,-31}, -{32,15,-30}, -{32,15,-29}, -{32,15,-28}, -{32,15,-27}, -{32,15,-26}, -{32,15,-25}, -{32,15,-24}, -{32,15,-23}, -{32,15,-22}, -{32,15,-21}, -{32,15,-20}, -{32,15,-19}, -{32,15,-18}, -{32,15,-17}, -{32,15,-16}, -{32,15,-15}, -{32,15,-14}, -{32,15,-13}, -{32,15,-12}, -{32,15,-11}, -{32,15,-10}, -{32,15,-9}, -{32,15,-8}, -{32,15,-7}, -{32,15,-6}, -{32,15,-5}, -{32,15,-4}, -{32,15,-3}, -{32,15,-2}, -{32,15,-1}, -{32,15,0}, -{32,15,1}, -{32,15,2}, -{32,15,3}, -{32,15,4}, -{32,15,5}, -{32,15,6}, -{32,15,7}, -{32,15,8}, -{32,15,9}, -{32,15,10}, -{32,15,11}, -{32,15,12}, -{32,15,13}, -{32,15,14}, -{32,15,15}, -{32,15,16}, -{32,15,17}, -{32,15,18}, -{32,15,19}, -{32,15,20}, -{32,15,21}, -{32,15,22}, -{32,15,23}, -{32,15,24}, -{32,15,25}, -{32,15,26}, -{32,15,27}, -{32,15,28}, -{32,15,29}, -{32,15,30}, -{32,15,31}, -{32,15,32}, -{32,15,33}, -{32,15,34}, -{32,15,35}, -{32,15,36}, -{32,15,37}, -{32,15,38}, -{32,15,39}, -{32,15,40}, -{32,15,41}, -{32,15,42}, -{32,16,-51}, -{32,16,-50}, -{32,16,-49}, -{32,16,-48}, -{32,16,-47}, -{32,16,-46}, -{32,16,-45}, -{32,16,-44}, -{32,16,-43}, -{32,16,-42}, -{32,16,-41}, -{32,16,-40}, -{32,16,-39}, -{32,16,-38}, -{32,16,-37}, -{32,16,-36}, -{32,16,-35}, -{32,16,-34}, -{32,16,-33}, -{32,16,-32}, -{32,16,-31}, -{32,16,-30}, -{32,16,-29}, -{32,16,-28}, -{32,16,-27}, -{32,16,-26}, -{32,16,-25}, -{32,16,-24}, -{32,16,-23}, -{32,16,-22}, -{32,16,-21}, -{32,16,-20}, -{32,16,-19}, -{32,16,-18}, -{32,16,-17}, -{32,16,-16}, -{32,16,-15}, -{32,16,-14}, -{32,16,-13}, -{32,16,-12}, -{32,16,-11}, -{32,16,-10}, -{32,16,-9}, -{32,16,-8}, -{32,16,-7}, -{32,16,-6}, -{32,16,-5}, -{32,16,-4}, -{32,16,-3}, -{32,16,-2}, -{32,16,-1}, -{32,16,0}, -{32,16,1}, -{32,16,2}, -{32,16,3}, -{32,16,4}, -{32,16,5}, -{32,16,6}, -{32,16,7}, -{32,16,8}, -{32,16,9}, -{32,16,10}, -{32,16,11}, -{32,16,12}, -{32,16,13}, -{32,16,14}, -{32,16,15}, -{32,16,16}, -{32,16,17}, -{32,16,18}, -{32,16,19}, -{32,16,20}, -{32,16,21}, -{32,16,22}, -{32,16,23}, -{32,16,24}, -{32,16,25}, -{32,16,26}, -{32,16,27}, -{32,16,28}, -{32,16,29}, -{32,16,30}, -{32,16,31}, -{32,16,32}, -{32,16,33}, -{32,16,34}, -{32,16,35}, -{32,16,36}, -{32,16,37}, -{32,16,38}, -{32,16,39}, -{32,16,40}, -{32,16,41}, -{32,16,42}, -{32,17,-52}, -{32,17,-51}, -{32,17,-50}, -{32,17,-49}, -{32,17,-48}, -{32,17,-47}, -{32,17,-46}, -{32,17,-45}, -{32,17,-44}, -{32,17,-43}, -{32,17,-42}, -{32,17,-41}, -{32,17,-40}, -{32,17,-39}, -{32,17,-38}, -{32,17,-37}, -{32,17,-36}, -{32,17,-35}, -{32,17,-34}, -{32,17,-33}, -{32,17,-32}, -{32,17,-31}, -{32,17,-30}, -{32,17,-29}, -{32,17,-28}, -{32,17,-27}, -{32,17,-26}, -{32,17,-25}, -{32,17,-24}, -{32,17,-23}, -{32,17,-22}, -{32,17,-21}, -{32,17,-20}, -{32,17,-19}, -{32,17,-18}, -{32,17,-17}, -{32,17,-16}, -{32,17,-15}, -{32,17,-14}, -{32,17,-13}, -{32,17,-12}, -{32,17,-11}, -{32,17,-10}, -{32,17,-9}, -{32,17,-8}, -{32,17,-7}, -{32,17,-6}, -{32,17,-5}, -{32,17,-4}, -{32,17,-3}, -{32,17,-2}, -{32,17,-1}, -{32,17,0}, -{32,17,1}, -{32,17,2}, -{32,17,3}, -{32,17,4}, -{32,17,5}, -{32,17,6}, -{32,17,7}, -{32,17,8}, -{32,17,9}, -{32,17,10}, -{32,17,11}, -{32,17,12}, -{32,17,13}, -{32,17,14}, -{32,17,15}, -{32,17,16}, -{32,17,17}, -{32,17,18}, -{32,17,19}, -{32,17,20}, -{32,17,21}, -{32,17,22}, -{32,17,23}, -{32,17,24}, -{32,17,25}, -{32,17,26}, -{32,17,27}, -{32,17,28}, -{32,17,29}, -{32,17,30}, -{32,17,31}, -{32,17,32}, -{32,17,33}, -{32,17,34}, -{32,17,35}, -{32,17,36}, -{32,17,37}, -{32,17,38}, -{32,17,39}, -{32,17,40}, -{32,17,41}, -{32,17,42}, -{32,18,-53}, -{32,18,-52}, -{32,18,-51}, -{32,18,-50}, -{32,18,-49}, -{32,18,-48}, -{32,18,-47}, -{32,18,-46}, -{32,18,-45}, -{32,18,-44}, -{32,18,-43}, -{32,18,-42}, -{32,18,-41}, -{32,18,-40}, -{32,18,-39}, -{32,18,-38}, -{32,18,-37}, -{32,18,-36}, -{32,18,-35}, -{32,18,-34}, -{32,18,-33}, -{32,18,-32}, -{32,18,-31}, -{32,18,-30}, -{32,18,-29}, -{32,18,-28}, -{32,18,-27}, -{32,18,-26}, -{32,18,-25}, -{32,18,-24}, -{32,18,-23}, -{32,18,-22}, -{32,18,-21}, -{32,18,-20}, -{32,18,-19}, -{32,18,-18}, -{32,18,-17}, -{32,18,-16}, -{32,18,-15}, -{32,18,-14}, -{32,18,-13}, -{32,18,-12}, -{32,18,-11}, -{32,18,-10}, -{32,18,-9}, -{32,18,-8}, -{32,18,-7}, -{32,18,-6}, -{32,18,-5}, -{32,18,-4}, -{32,18,-3}, -{32,18,-2}, -{32,18,-1}, -{32,18,0}, -{32,18,1}, -{32,18,2}, -{32,18,3}, -{32,18,4}, -{32,18,5}, -{32,18,6}, -{32,18,7}, -{32,18,8}, -{32,18,9}, -{32,18,10}, -{32,18,11}, -{32,18,12}, -{32,18,13}, -{32,18,14}, -{32,18,15}, -{32,18,16}, -{32,18,17}, -{32,18,18}, -{32,18,19}, -{32,18,20}, -{32,18,21}, -{32,18,22}, -{32,18,23}, -{32,18,24}, -{32,18,25}, -{32,18,26}, -{32,18,27}, -{32,18,28}, -{32,18,29}, -{32,18,30}, -{32,18,31}, -{32,18,32}, -{32,18,33}, -{32,18,34}, -{32,18,35}, -{32,18,36}, -{32,18,37}, -{32,18,38}, -{32,18,39}, -{32,18,40}, -{32,18,41}, -{32,18,42}, -{32,19,-54}, -{32,19,-53}, -{32,19,-52}, -{32,19,-51}, -{32,19,-50}, -{32,19,-49}, -{32,19,-48}, -{32,19,-47}, -{32,19,-46}, -{32,19,-45}, -{32,19,-44}, -{32,19,-43}, -{32,19,-42}, -{32,19,-41}, -{32,19,-40}, -{32,19,-39}, -{32,19,-38}, -{32,19,-37}, -{32,19,-36}, -{32,19,-35}, -{32,19,-34}, -{32,19,-33}, -{32,19,-32}, -{32,19,-31}, -{32,19,-30}, -{32,19,-29}, -{32,19,-28}, -{32,19,-27}, -{32,19,-26}, -{32,19,-25}, -{32,19,-24}, -{32,19,-23}, -{32,19,-22}, -{32,19,-21}, -{32,19,-20}, -{32,19,-19}, -{32,19,-18}, -{32,19,-17}, -{32,19,-16}, -{32,19,-15}, -{32,19,-14}, -{32,19,-13}, -{32,19,-12}, -{32,19,-11}, -{32,19,-10}, -{32,19,-9}, -{32,19,-8}, -{32,19,-7}, -{32,19,-6}, -{32,19,-5}, -{32,19,-4}, -{32,19,-3}, -{32,19,-2}, -{32,19,-1}, -{32,19,0}, -{32,19,1}, -{32,19,2}, -{32,19,3}, -{32,19,4}, -{32,19,5}, -{32,19,6}, -{32,19,7}, -{32,19,8}, -{32,19,9}, -{32,19,10}, -{32,19,11}, -{32,19,12}, -{32,19,13}, -{32,19,14}, -{32,19,15}, -{32,19,16}, -{32,19,17}, -{32,19,18}, -{32,19,19}, -{32,19,20}, -{32,19,21}, -{32,19,22}, -{32,19,23}, -{32,19,24}, -{32,19,25}, -{32,19,26}, -{32,19,27}, -{32,19,28}, -{32,19,29}, -{32,19,30}, -{32,19,31}, -{32,19,32}, -{32,19,33}, -{32,19,34}, -{32,19,35}, -{32,19,36}, -{32,19,37}, -{32,19,38}, -{32,19,39}, -{32,19,40}, -{32,19,41}, -{32,19,42}, -{32,20,-55}, -{32,20,-54}, -{32,20,-53}, -{32,20,-52}, -{32,20,-51}, -{32,20,-50}, -{32,20,-49}, -{32,20,-48}, -{32,20,-47}, -{32,20,-46}, -{32,20,-45}, -{32,20,-44}, -{32,20,-43}, -{32,20,-42}, -{32,20,-41}, -{32,20,-40}, -{32,20,-39}, -{32,20,-38}, -{32,20,-37}, -{32,20,-36}, -{32,20,-35}, -{32,20,-34}, -{32,20,-33}, -{32,20,-32}, -{32,20,-31}, -{32,20,-30}, -{32,20,-29}, -{32,20,-28}, -{32,20,-27}, -{32,20,-26}, -{32,20,-25}, -{32,20,-24}, -{32,20,-23}, -{32,20,-22}, -{32,20,-21}, -{32,20,-20}, -{32,20,-19}, -{32,20,-18}, -{32,20,-17}, -{32,20,-16}, -{32,20,-15}, -{32,20,-14}, -{32,20,-13}, -{32,20,-12}, -{32,20,-11}, -{32,20,-10}, -{32,20,-9}, -{32,20,-8}, -{32,20,-7}, -{32,20,-6}, -{32,20,-5}, -{32,20,-4}, -{32,20,-3}, -{32,20,-2}, -{32,20,-1}, -{32,20,0}, -{32,20,1}, -{32,20,2}, -{32,20,3}, -{32,20,4}, -{32,20,5}, -{32,20,6}, -{32,20,7}, -{32,20,8}, -{32,20,9}, -{32,20,10}, -{32,20,11}, -{32,20,12}, -{32,20,13}, -{32,20,14}, -{32,20,15}, -{32,20,16}, -{32,20,17}, -{32,20,18}, -{32,20,19}, -{32,20,20}, -{32,20,21}, -{32,20,22}, -{32,20,23}, -{32,20,24}, -{32,20,25}, -{32,20,26}, -{32,20,27}, -{32,20,28}, -{32,20,29}, -{32,20,30}, -{32,20,31}, -{32,20,32}, -{32,20,33}, -{32,20,34}, -{32,20,35}, -{32,20,36}, -{32,20,37}, -{32,20,38}, -{32,20,39}, -{32,20,40}, -{32,20,41}, -{32,20,42}, -{32,21,-56}, -{32,21,-55}, -{32,21,-54}, -{32,21,-53}, -{32,21,-52}, -{32,21,-51}, -{32,21,-50}, -{32,21,-49}, -{32,21,-48}, -{32,21,-47}, -{32,21,-46}, -{32,21,-45}, -{32,21,-44}, -{32,21,-43}, -{32,21,-42}, -{32,21,-41}, -{32,21,-40}, -{32,21,-39}, -{32,21,-38}, -{32,21,-37}, -{32,21,-36}, -{32,21,-35}, -{32,21,-34}, -{32,21,-33}, -{32,21,-32}, -{32,21,-31}, -{32,21,-30}, -{32,21,-29}, -{32,21,-28}, -{32,21,-27}, -{32,21,-26}, -{32,21,-25}, -{32,21,-24}, -{32,21,-23}, -{32,21,-22}, -{32,21,-21}, -{32,21,-20}, -{32,21,-19}, -{32,21,-18}, -{32,21,-17}, -{32,21,-16}, -{32,21,-15}, -{32,21,-14}, -{32,21,-13}, -{32,21,-12}, -{32,21,-11}, -{32,21,-10}, -{32,21,-9}, -{32,21,-8}, -{32,21,-7}, -{32,21,-6}, -{32,21,-5}, -{32,21,-4}, -{32,21,-3}, -{32,21,-2}, -{32,21,-1}, -{32,21,0}, -{32,21,1}, -{32,21,2}, -{32,21,3}, -{32,21,4}, -{32,21,5}, -{32,21,6}, -{32,21,7}, -{32,21,8}, -{32,21,9}, -{32,21,10}, -{32,21,11}, -{32,21,12}, -{32,21,13}, -{32,21,14}, -{32,21,15}, -{32,21,16}, -{32,21,17}, -{32,21,18}, -{32,21,19}, -{32,21,20}, -{32,21,21}, -{32,21,22}, -{32,21,23}, -{32,21,24}, -{32,21,25}, -{32,21,26}, -{32,21,27}, -{32,21,28}, -{32,21,29}, -{32,21,30}, -{32,21,31}, -{32,21,32}, -{32,21,33}, -{32,21,34}, -{32,21,35}, -{32,21,36}, -{32,21,37}, -{32,21,38}, -{32,21,39}, -{32,21,40}, -{32,21,41}, -{32,21,42}, -{32,22,-57}, -{32,22,-56}, -{32,22,-55}, -{32,22,-54}, -{32,22,-53}, -{32,22,-52}, -{32,22,-51}, -{32,22,-50}, -{32,22,-49}, -{32,22,-48}, -{32,22,-47}, -{32,22,-46}, -{32,22,-45}, -{32,22,-44}, -{32,22,-43}, -{32,22,-42}, -{32,22,-41}, -{32,22,-40}, -{32,22,-39}, -{32,22,-38}, -{32,22,-37}, -{32,22,-36}, -{32,22,-35}, -{32,22,-34}, -{32,22,-33}, -{32,22,-32}, -{32,22,-31}, -{32,22,-30}, -{32,22,-29}, -{32,22,-28}, -{32,22,-27}, -{32,22,-26}, -{32,22,-25}, -{32,22,-24}, -{32,22,-23}, -{32,22,-22}, -{32,22,-21}, -{32,22,-20}, -{32,22,-19}, -{32,22,-18}, -{32,22,-17}, -{32,22,-16}, -{32,22,-15}, -{32,22,-14}, -{32,22,-13}, -{32,22,-12}, -{32,22,-11}, -{32,22,-10}, -{32,22,-9}, -{32,22,-8}, -{32,22,-7}, -{32,22,-6}, -{32,22,-5}, -{32,22,-4}, -{32,22,-3}, -{32,22,-2}, -{32,22,-1}, -{32,22,0}, -{32,22,1}, -{32,22,2}, -{32,22,3}, -{32,22,4}, -{32,22,5}, -{32,22,6}, -{32,22,7}, -{32,22,8}, -{32,22,9}, -{32,22,10}, -{32,22,11}, -{32,22,12}, -{32,22,13}, -{32,22,14}, -{32,22,15}, -{32,22,16}, -{32,22,17}, -{32,22,18}, -{32,22,19}, -{32,22,20}, -{32,22,21}, -{32,22,22}, -{32,22,23}, -{32,22,24}, -{32,22,25}, -{32,22,26}, -{32,22,27}, -{32,22,28}, -{32,22,29}, -{32,22,30}, -{32,22,31}, -{32,22,32}, -{32,22,33}, -{32,22,34}, -{32,22,35}, -{32,22,36}, -{32,22,37}, -{32,22,38}, -{32,22,39}, -{32,22,40}, -{32,22,41}, -{32,22,42}, -{32,23,-58}, -{32,23,-57}, -{32,23,-56}, -{32,23,-55}, -{32,23,-54}, -{32,23,-53}, -{32,23,-52}, -{32,23,-51}, -{32,23,-50}, -{32,23,-49}, -{32,23,-48}, -{32,23,-47}, -{32,23,-46}, -{32,23,-45}, -{32,23,-44}, -{32,23,-43}, -{32,23,-42}, -{32,23,-41}, -{32,23,-40}, -{32,23,-39}, -{32,23,-38}, -{32,23,-37}, -{32,23,-36}, -{32,23,-35}, -{32,23,-34}, -{32,23,-33}, -{32,23,-32}, -{32,23,-31}, -{32,23,-30}, -{32,23,-29}, -{32,23,-28}, -{32,23,-27}, -{32,23,-26}, -{32,23,-25}, -{32,23,-24}, -{32,23,-23}, -{32,23,-22}, -{32,23,-21}, -{32,23,-20}, -{32,23,-19}, -{32,23,-18}, -{32,23,-17}, -{32,23,-16}, -{32,23,-15}, -{32,23,-14}, -{32,23,-13}, -{32,23,-12}, -{32,23,-11}, -{32,23,-10}, -{32,23,-9}, -{32,23,-8}, -{32,23,-7}, -{32,23,-6}, -{32,23,-5}, -{32,23,-4}, -{32,23,-3}, -{32,23,-2}, -{32,23,-1}, -{32,23,0}, -{32,23,1}, -{32,23,2}, -{32,23,3}, -{32,23,4}, -{32,23,5}, -{32,23,6}, -{32,23,7}, -{32,23,8}, -{32,23,9}, -{32,23,10}, -{32,23,11}, -{32,23,12}, -{32,23,13}, -{32,23,14}, -{32,23,15}, -{32,23,16}, -{32,23,17}, -{32,23,18}, -{32,23,19}, -{32,23,20}, -{32,23,21}, -{32,23,22}, -{32,23,23}, -{32,23,24}, -{32,23,25}, -{32,23,26}, -{32,23,27}, -{32,23,28}, -{32,23,29}, -{32,23,30}, -{32,23,31}, -{32,23,32}, -{32,23,33}, -{32,23,34}, -{32,23,35}, -{32,23,36}, -{32,23,37}, -{32,23,38}, -{32,23,39}, -{32,23,40}, -{32,23,41}, -{32,23,42}, -{32,24,-59}, -{32,24,-58}, -{32,24,-57}, -{32,24,-56}, -{32,24,-55}, -{32,24,-54}, -{32,24,-53}, -{32,24,-52}, -{32,24,-51}, -{32,24,-50}, -{32,24,-49}, -{32,24,-48}, -{32,24,-47}, -{32,24,-46}, -{32,24,-45}, -{32,24,-44}, -{32,24,-43}, -{32,24,-42}, -{32,24,-41}, -{32,24,-40}, -{32,24,-39}, -{32,24,-38}, -{32,24,-37}, -{32,24,-36}, -{32,24,-35}, -{32,24,-34}, -{32,24,-33}, -{32,24,-32}, -{32,24,-31}, -{32,24,-30}, -{32,24,-29}, -{32,24,-28}, -{32,24,-27}, -{32,24,-26}, -{32,24,-25}, -{32,24,-24}, -{32,24,-23}, -{32,24,-22}, -{32,24,-21}, -{32,24,-20}, -{32,24,-19}, -{32,24,-18}, -{32,24,-17}, -{32,24,-16}, -{32,24,-15}, -{32,24,-14}, -{32,24,-13}, -{32,24,-12}, -{32,24,-11}, -{32,24,-10}, -{32,24,-9}, -{32,24,-8}, -{32,24,-7}, -{32,24,-6}, -{32,24,-5}, -{32,24,-4}, -{32,24,-3}, -{32,24,-2}, -{32,24,-1}, -{32,24,0}, -{32,24,1}, -{32,24,2}, -{32,24,3}, -{32,24,4}, -{32,24,5}, -{32,24,6}, -{32,24,7}, -{32,24,8}, -{32,24,9}, -{32,24,10}, -{32,24,11}, -{32,24,12}, -{32,24,13}, -{32,24,14}, -{32,24,15}, -{32,24,16}, -{32,24,17}, -{32,24,18}, -{32,24,19}, -{32,24,20}, -{32,24,21}, -{32,24,22}, -{32,24,23}, -{32,24,24}, -{32,24,25}, -{32,24,26}, -{32,24,27}, -{32,24,28}, -{32,24,29}, -{32,24,30}, -{32,24,31}, -{32,24,32}, -{32,24,33}, -{32,24,34}, -{32,24,35}, -{32,24,36}, -{32,24,37}, -{32,24,38}, -{32,24,39}, -{32,24,40}, -{32,24,41}, -{32,24,42}, -{32,25,-60}, -{32,25,-59}, -{32,25,-58}, -{32,25,-57}, -{32,25,-56}, -{32,25,-55}, -{32,25,-54}, -{32,25,-53}, -{32,25,-52}, -{32,25,-51}, -{32,25,-50}, -{32,25,-49}, -{32,25,-48}, -{32,25,-47}, -{32,25,-46}, -{32,25,-45}, -{32,25,-44}, -{32,25,-43}, -{32,25,-42}, -{32,25,-41}, -{32,25,-40}, -{32,25,-39}, -{32,25,-38}, -{32,25,-37}, -{32,25,-36}, -{32,25,-35}, -{32,25,-34}, -{32,25,-33}, -{32,25,-32}, -{32,25,-31}, -{32,25,-30}, -{32,25,-29}, -{32,25,-28}, -{32,25,-27}, -{32,25,-26}, -{32,25,-25}, -{32,25,-24}, -{32,25,-23}, -{32,25,-22}, -{32,25,-21}, -{32,25,-20}, -{32,25,-19}, -{32,25,-18}, -{32,25,-17}, -{32,25,-16}, -{32,25,-15}, -{32,25,-14}, -{32,25,-13}, -{32,25,-12}, -{32,25,-11}, -{32,25,-10}, -{32,25,-9}, -{32,25,-8}, -{32,25,-7}, -{32,25,-6}, -{32,25,-5}, -{32,25,-4}, -{32,25,-3}, -{32,25,-2}, -{32,25,-1}, -{32,25,0}, -{32,25,1}, -{32,25,2}, -{32,25,3}, -{32,25,4}, -{32,25,5}, -{32,25,6}, -{32,25,7}, -{32,25,8}, -{32,25,9}, -{32,25,10}, -{32,25,11}, -{32,25,12}, -{32,25,13}, -{32,25,14}, -{32,25,15}, -{32,25,16}, -{32,25,17}, -{32,25,18}, -{32,25,19}, -{32,25,20}, -{32,25,21}, -{32,25,22}, -{32,25,23}, -{32,25,24}, -{32,25,25}, -{32,25,26}, -{32,25,27}, -{32,25,28}, -{32,25,29}, -{32,25,30}, -{32,25,31}, -{32,25,32}, -{32,25,33}, -{32,25,34}, -{32,25,35}, -{32,25,36}, -{32,25,37}, -{32,25,38}, -{32,25,39}, -{32,25,40}, -{32,25,41}, -{32,25,42}, -{32,26,-61}, -{32,26,-60}, -{32,26,-59}, -{32,26,-58}, -{32,26,-57}, -{32,26,-56}, -{32,26,-55}, -{32,26,-54}, -{32,26,-53}, -{32,26,-52}, -{32,26,-51}, -{32,26,-50}, -{32,26,-49}, -{32,26,-48}, -{32,26,-47}, -{32,26,-46}, -{32,26,-45}, -{32,26,-44}, -{32,26,-43}, -{32,26,-42}, -{32,26,-41}, -{32,26,-40}, -{32,26,-39}, -{32,26,-38}, -{32,26,-37}, -{32,26,-36}, -{32,26,-35}, -{32,26,-34}, -{32,26,-33}, -{32,26,-32}, -{32,26,-31}, -{32,26,-30}, -{32,26,-29}, -{32,26,-28}, -{32,26,-27}, -{32,26,-26}, -{32,26,-25}, -{32,26,-24}, -{32,26,-23}, -{32,26,-22}, -{32,26,-21}, -{32,26,-20}, -{32,26,-19}, -{32,26,-18}, -{32,26,-17}, -{32,26,-16}, -{32,26,-15}, -{32,26,-14}, -{32,26,-13}, -{32,26,-12}, -{32,26,-11}, -{32,26,-10}, -{32,26,-9}, -{32,26,-8}, -{32,26,-7}, -{32,26,-6}, -{32,26,-5}, -{32,26,-4}, -{32,26,-3}, -{32,26,-2}, -{32,26,-1}, -{32,26,0}, -{32,26,1}, -{32,26,2}, -{32,26,3}, -{32,26,4}, -{32,26,5}, -{32,26,6}, -{32,26,7}, -{32,26,8}, -{32,26,9}, -{32,26,10}, -{32,26,11}, -{32,26,12}, -{32,26,13}, -{32,26,14}, -{32,26,15}, -{32,26,16}, -{32,26,17}, -{32,26,18}, -{32,26,19}, -{32,26,20}, -{32,26,21}, -{32,26,22}, -{32,26,23}, -{32,26,24}, -{32,26,25}, -{32,26,26}, -{32,26,27}, -{32,26,28}, -{32,26,29}, -{32,26,30}, -{32,26,31}, -{32,26,32}, -{32,26,33}, -{32,26,34}, -{32,26,35}, -{32,26,36}, -{32,26,37}, -{32,26,38}, -{32,26,39}, -{32,26,40}, -{32,26,41}, -{32,26,42}, -{32,26,43}, -{32,27,-62}, -{32,27,-61}, -{32,27,-60}, -{32,27,-59}, -{32,27,-58}, -{32,27,-57}, -{32,27,-56}, -{32,27,-55}, -{32,27,-54}, -{32,27,-53}, -{32,27,-52}, -{32,27,-51}, -{32,27,-50}, -{32,27,-49}, -{32,27,-48}, -{32,27,-47}, -{32,27,-46}, -{32,27,-45}, -{32,27,-44}, -{32,27,-43}, -{32,27,-42}, -{32,27,-41}, -{32,27,-40}, -{32,27,-39}, -{32,27,-38}, -{32,27,-37}, -{32,27,-36}, -{32,27,-35}, -{32,27,-34}, -{32,27,-33}, -{32,27,-32}, -{32,27,-31}, -{32,27,-30}, -{32,27,-29}, -{32,27,-28}, -{32,27,-27}, -{32,27,-26}, -{32,27,-25}, -{32,27,-24}, -{32,27,-23}, -{32,27,-22}, -{32,27,-21}, -{32,27,-20}, -{32,27,-19}, -{32,27,-18}, -{32,27,-17}, -{32,27,-16}, -{32,27,-15}, -{32,27,-14}, -{32,27,-13}, -{32,27,-12}, -{32,27,-11}, -{32,27,-10}, -{32,27,-9}, -{32,27,-8}, -{32,27,-7}, -{32,27,-6}, -{32,27,-5}, -{32,27,-4}, -{32,27,-3}, -{32,27,-2}, -{32,27,-1}, -{32,27,0}, -{32,27,1}, -{32,27,2}, -{32,27,3}, -{32,27,4}, -{32,27,5}, -{32,27,6}, -{32,27,7}, -{32,27,8}, -{32,27,9}, -{32,27,10}, -{32,27,11}, -{32,27,12}, -{32,27,13}, -{32,27,14}, -{32,27,15}, -{32,27,16}, -{32,27,17}, -{32,27,18}, -{32,27,19}, -{32,27,20}, -{32,27,21}, -{32,27,22}, -{32,27,23}, -{32,27,24}, -{32,27,25}, -{32,27,26}, -{32,27,27}, -{32,27,28}, -{32,27,29}, -{32,27,30}, -{32,27,31}, -{32,27,32}, -{32,27,33}, -{32,27,34}, -{32,27,35}, -{32,27,36}, -{32,27,37}, -{32,27,38}, -{32,27,39}, -{32,27,40}, -{32,27,41}, -{32,27,42}, -{32,27,43}, -{32,28,-63}, -{32,28,-62}, -{32,28,-61}, -{32,28,-60}, -{32,28,-59}, -{32,28,-58}, -{32,28,-57}, -{32,28,-56}, -{32,28,-55}, -{32,28,-54}, -{32,28,-53}, -{32,28,-52}, -{32,28,-51}, -{32,28,-50}, -{32,28,-49}, -{32,28,-48}, -{32,28,-47}, -{32,28,-46}, -{32,28,-45}, -{32,28,-44}, -{32,28,-43}, -{32,28,-42}, -{32,28,-41}, -{32,28,-40}, -{32,28,-39}, -{32,28,-38}, -{32,28,-37}, -{32,28,-36}, -{32,28,-35}, -{32,28,-34}, -{32,28,-33}, -{32,28,-32}, -{32,28,-31}, -{32,28,-30}, -{32,28,-29}, -{32,28,-28}, -{32,28,-27}, -{32,28,-26}, -{32,28,-25}, -{32,28,-24}, -{32,28,-23}, -{32,28,-22}, -{32,28,-21}, -{32,28,-20}, -{32,28,-19}, -{32,28,-18}, -{32,28,-17}, -{32,28,-16}, -{32,28,-15}, -{32,28,-14}, -{32,28,-13}, -{32,28,-12}, -{32,28,-11}, -{32,28,-10}, -{32,28,-9}, -{32,28,-8}, -{32,28,-7}, -{32,28,-6}, -{32,28,-5}, -{32,28,-4}, -{32,28,-3}, -{32,28,-2}, -{32,28,-1}, -{32,28,0}, -{32,28,1}, -{32,28,2}, -{32,28,3}, -{32,28,4}, -{32,28,5}, -{32,28,6}, -{32,28,7}, -{32,28,8}, -{32,28,9}, -{32,28,10}, -{32,28,11}, -{32,28,12}, -{32,28,13}, -{32,28,14}, -{32,28,15}, -{32,28,16}, -{32,28,17}, -{32,28,18}, -{32,28,19}, -{32,28,20}, -{32,28,21}, -{32,28,22}, -{32,28,23}, -{32,28,24}, -{32,28,25}, -{32,28,26}, -{32,28,27}, -{32,28,28}, -{32,28,29}, -{32,28,30}, -{32,28,31}, -{32,28,32}, -{32,28,33}, -{32,28,34}, -{32,28,35}, -{32,28,36}, -{32,28,37}, -{32,28,38}, -{32,28,39}, -{32,28,40}, -{32,28,41}, -{32,28,42}, -{32,28,43}, -{32,29,-64}, -{32,29,-63}, -{32,29,-62}, -{32,29,-61}, -{32,29,-60}, -{32,29,-59}, -{32,29,-58}, -{32,29,-57}, -{32,29,-56}, -{32,29,-55}, -{32,29,-54}, -{32,29,-53}, -{32,29,-52}, -{32,29,-51}, -{32,29,-50}, -{32,29,-49}, -{32,29,-48}, -{32,29,-47}, -{32,29,-46}, -{32,29,-45}, -{32,29,-44}, -{32,29,-43}, -{32,29,-42}, -{32,29,-41}, -{32,29,-40}, -{32,29,-39}, -{32,29,-38}, -{32,29,-37}, -{32,29,-36}, -{32,29,-35}, -{32,29,-34}, -{32,29,-33}, -{32,29,-32}, -{32,29,-31}, -{32,29,-30}, -{32,29,-29}, -{32,29,-28}, -{32,29,-27}, -{32,29,-26}, -{32,29,-25}, -{32,29,-24}, -{32,29,-23}, -{32,29,-22}, -{32,29,-21}, -{32,29,-20}, -{32,29,-19}, -{32,29,-18}, -{32,29,-17}, -{32,29,-16}, -{32,29,-15}, -{32,29,-14}, -{32,29,-13}, -{32,29,-12}, -{32,29,-11}, -{32,29,-10}, -{32,29,-9}, -{32,29,-8}, -{32,29,-7}, -{32,29,-6}, -{32,29,-5}, -{32,29,-4}, -{32,29,-3}, -{32,29,-2}, -{32,29,-1}, -{32,29,0}, -{32,29,1}, -{32,29,2}, -{32,29,3}, -{32,29,4}, -{32,29,5}, -{32,29,6}, -{32,29,7}, -{32,29,8}, -{32,29,9}, -{32,29,10}, -{32,29,11}, -{32,29,12}, -{32,29,13}, -{32,29,14}, -{32,29,15}, -{32,29,16}, -{32,29,17}, -{32,29,18}, -{32,29,19}, -{32,29,20}, -{32,29,21}, -{32,29,22}, -{32,29,23}, -{32,29,24}, -{32,29,25}, -{32,29,26}, -{32,29,27}, -{32,29,28}, -{32,29,29}, -{32,29,30}, -{32,29,31}, -{32,29,32}, -{32,29,33}, -{32,29,34}, -{32,29,35}, -{32,29,36}, -{32,29,37}, -{32,29,38}, -{32,29,39}, -{32,29,40}, -{32,29,41}, -{32,29,42}, -{32,29,43}, -{32,30,-65}, -{32,30,-64}, -{32,30,-63}, -{32,30,-62}, -{32,30,-61}, -{32,30,-60}, -{32,30,-59}, -{32,30,-58}, -{32,30,-57}, -{32,30,-56}, -{32,30,-55}, -{32,30,-54}, -{32,30,-53}, -{32,30,-52}, -{32,30,-51}, -{32,30,-50}, -{32,30,-49}, -{32,30,-48}, -{32,30,-47}, -{32,30,-46}, -{32,30,-45}, -{32,30,-44}, -{32,30,-43}, -{32,30,-42}, -{32,30,-41}, -{32,30,-40}, -{32,30,-39}, -{32,30,-38}, -{32,30,-37}, -{32,30,-36}, -{32,30,-35}, -{32,30,-34}, -{32,30,-33}, -{32,30,-32}, -{32,30,-31}, -{32,30,-30}, -{32,30,-29}, -{32,30,-28}, -{32,30,-27}, -{32,30,-26}, -{32,30,-25}, -{32,30,-24}, -{32,30,-23}, -{32,30,-22}, -{32,30,-21}, -{32,30,-20}, -{32,30,-19}, -{32,30,-18}, -{32,30,-17}, -{32,30,-16}, -{32,30,-15}, -{32,30,-14}, -{32,30,-13}, -{32,30,-12}, -{32,30,-11}, -{32,30,-10}, -{32,30,-9}, -{32,30,-8}, -{32,30,-7}, -{32,30,-6}, -{32,30,-5}, -{32,30,-4}, -{32,30,-3}, -{32,30,-2}, -{32,30,-1}, -{32,30,0}, -{32,30,1}, -{32,30,2}, -{32,30,3}, -{32,30,4}, -{32,30,5}, -{32,30,6}, -{32,30,7}, -{32,30,8}, -{32,30,9}, -{32,30,10}, -{32,30,11}, -{32,30,12}, -{32,30,13}, -{32,30,14}, -{32,30,15}, -{32,30,16}, -{32,30,17}, -{32,30,18}, -{32,30,19}, -{32,30,20}, -{32,30,21}, -{32,30,22}, -{32,30,23}, -{32,30,24}, -{32,30,25}, -{32,30,26}, -{32,30,27}, -{32,30,28}, -{32,30,29}, -{32,30,30}, -{32,30,31}, -{32,30,32}, -{32,30,33}, -{32,30,34}, -{32,30,35}, -{32,30,36}, -{32,30,37}, -{32,30,38}, -{32,30,39}, -{32,30,40}, -{32,30,41}, -{32,30,42}, -{32,30,43}, -{32,31,-66}, -{32,31,-65}, -{32,31,-64}, -{32,31,-63}, -{32,31,-62}, -{32,31,-61}, -{32,31,-60}, -{32,31,-59}, -{32,31,-58}, -{32,31,-57}, -{32,31,-56}, -{32,31,-55}, -{32,31,-54}, -{32,31,-53}, -{32,31,-52}, -{32,31,-51}, -{32,31,-50}, -{32,31,-49}, -{32,31,-48}, -{32,31,-47}, -{32,31,-46}, -{32,31,-45}, -{32,31,-44}, -{32,31,-43}, -{32,31,-42}, -{32,31,-41}, -{32,31,-40}, -{32,31,-39}, -{32,31,-38}, -{32,31,-37}, -{32,31,-36}, -{32,31,-35}, -{32,31,-34}, -{32,31,-33}, -{32,31,-32}, -{32,31,-31}, -{32,31,-30}, -{32,31,-29}, -{32,31,-28}, -{32,31,-27}, -{32,31,-26}, -{32,31,-25}, -{32,31,-24}, -{32,31,-23}, -{32,31,-22}, -{32,31,-21}, -{32,31,-20}, -{32,31,-19}, -{32,31,-18}, -{32,31,-17}, -{32,31,-16}, -{32,31,-15}, -{32,31,-14}, -{32,31,-13}, -{32,31,-12}, -{32,31,-11}, -{32,31,-10}, -{32,31,-9}, -{32,31,-8}, -{32,31,-7}, -{32,31,-6}, -{32,31,-5}, -{32,31,-4}, -{32,31,-3}, -{32,31,-2}, -{32,31,-1}, -{32,31,0}, -{32,31,1}, -{32,31,2}, -{32,31,3}, -{32,31,4}, -{32,31,5}, -{32,31,6}, -{32,31,7}, -{32,31,8}, -{32,31,9}, -{32,31,10}, -{32,31,11}, -{32,31,12}, -{32,31,13}, -{32,31,14}, -{32,31,15}, -{32,31,16}, -{32,31,17}, -{32,31,18}, -{32,31,19}, -{32,31,20}, -{32,31,21}, -{32,31,22}, -{32,31,23}, -{32,31,24}, -{32,31,25}, -{32,31,26}, -{32,31,27}, -{32,31,28}, -{32,31,29}, -{32,31,30}, -{32,31,31}, -{32,31,32}, -{32,31,33}, -{32,31,34}, -{32,31,35}, -{32,31,36}, -{32,31,37}, -{32,31,38}, -{32,31,39}, -{32,31,40}, -{32,31,41}, -{32,31,42}, -{32,31,43}, -{32,32,-66}, -{32,32,-65}, -{32,32,-64}, -{32,32,-63}, -{32,32,-62}, -{32,32,-61}, -{32,32,-60}, -{32,32,-59}, -{32,32,-58}, -{32,32,-57}, -{32,32,-56}, -{32,32,-55}, -{32,32,-54}, -{32,32,-53}, -{32,32,-52}, -{32,32,-51}, -{32,32,-50}, -{32,32,-49}, -{32,32,-48}, -{32,32,-47}, -{32,32,-46}, -{32,32,-45}, -{32,32,-44}, -{32,32,-43}, -{32,32,-42}, -{32,32,-41}, -{32,32,-40}, -{32,32,-39}, -{32,32,-38}, -{32,32,-37}, -{32,32,-36}, -{32,32,-35}, -{32,32,-34}, -{32,32,-33}, -{32,32,-32}, -{32,32,-31}, -{32,32,-30}, -{32,32,-29}, -{32,32,-28}, -{32,32,-27}, -{32,32,-26}, -{32,32,-25}, -{32,32,-24}, -{32,32,-23}, -{32,32,-22}, -{32,32,-21}, -{32,32,-20}, -{32,32,-19}, -{32,32,-18}, -{32,32,-17}, -{32,32,-16}, -{32,32,-15}, -{32,32,-14}, -{32,32,-13}, -{32,32,-12}, -{32,32,-11}, -{32,32,-10}, -{32,32,-9}, -{32,32,-8}, -{32,32,-7}, -{32,32,-6}, -{32,32,-5}, -{32,32,-4}, -{32,32,-3}, -{32,32,-2}, -{32,32,-1}, -{32,32,0}, -{32,32,1}, -{32,32,2}, -{32,32,3}, -{32,32,4}, -{32,32,5}, -{32,32,6}, -{32,32,7}, -{32,32,8}, -{32,32,9}, -{32,32,10}, -{32,32,11}, -{32,32,12}, -{32,32,13}, -{32,32,14}, -{32,32,15}, -{32,32,16}, -{32,32,17}, -{32,32,18}, -{32,32,19}, -{32,32,20}, -{32,32,21}, -{32,32,22}, -{32,32,23}, -{32,32,24}, -{32,32,25}, -{32,32,26}, -{32,32,27}, -{32,32,28}, -{32,32,29}, -{32,32,30}, -{32,32,31}, -{32,32,32}, -{32,32,33}, -{32,32,34}, -{32,32,35}, -{32,32,36}, -{32,32,37}, -{32,32,38}, -{32,32,39}, -{32,32,40}, -{32,32,41}, -{32,32,42}, -{32,32,43}, -{32,33,-67}, -{32,33,-66}, -{32,33,-65}, -{32,33,-64}, -{32,33,-63}, -{32,33,-62}, -{32,33,-61}, -{32,33,-60}, -{32,33,-59}, -{32,33,-58}, -{32,33,-57}, -{32,33,-56}, -{32,33,-55}, -{32,33,-54}, -{32,33,-53}, -{32,33,-52}, -{32,33,-51}, -{32,33,-50}, -{32,33,-49}, -{32,33,-48}, -{32,33,-47}, -{32,33,-46}, -{32,33,-45}, -{32,33,-44}, -{32,33,-43}, -{32,33,-42}, -{32,33,-41}, -{32,33,-40}, -{32,33,-39}, -{32,33,-38}, -{32,33,-37}, -{32,33,-36}, -{32,33,-35}, -{32,33,-34}, -{32,33,-33}, -{32,33,-32}, -{32,33,-31}, -{32,33,-30}, -{32,33,-29}, -{32,33,-28}, -{32,33,-27}, -{32,33,-26}, -{32,33,-25}, -{32,33,-24}, -{32,33,-23}, -{32,33,-22}, -{32,33,-21}, -{32,33,-20}, -{32,33,-19}, -{32,33,-18}, -{32,33,-17}, -{32,33,-16}, -{32,33,-15}, -{32,33,-14}, -{32,33,-13}, -{32,33,-12}, -{32,33,-11}, -{32,33,-10}, -{32,33,-9}, -{32,33,-8}, -{32,33,-7}, -{32,33,-6}, -{32,33,-5}, -{32,33,-4}, -{32,33,-3}, -{32,33,-2}, -{32,33,-1}, -{32,33,0}, -{32,33,1}, -{32,33,2}, -{32,33,3}, -{32,33,4}, -{32,33,5}, -{32,33,6}, -{32,33,7}, -{32,33,8}, -{32,33,9}, -{32,33,10}, -{32,33,11}, -{32,33,12}, -{32,33,13}, -{32,33,14}, -{32,33,15}, -{32,33,16}, -{32,33,17}, -{32,33,18}, -{32,33,19}, -{32,33,20}, -{32,33,21}, -{32,33,22}, -{32,33,23}, -{32,33,24}, -{32,33,25}, -{32,33,26}, -{32,33,27}, -{32,33,28}, -{32,33,29}, -{32,33,30}, -{32,33,31}, -{32,33,32}, -{32,33,33}, -{32,33,34}, -{32,33,35}, -{32,33,36}, -{32,33,37}, -{32,33,38}, -{32,33,39}, -{32,33,40}, -{32,33,41}, -{32,33,42}, -{32,33,43}, -{32,34,-68}, -{32,34,-67}, -{32,34,-66}, -{32,34,-65}, -{32,34,-64}, -{32,34,-63}, -{32,34,-62}, -{32,34,-61}, -{32,34,-60}, -{32,34,-59}, -{32,34,-58}, -{32,34,-57}, -{32,34,-56}, -{32,34,-55}, -{32,34,-54}, -{32,34,-53}, -{32,34,-52}, -{32,34,-51}, -{32,34,-50}, -{32,34,-49}, -{32,34,-48}, -{32,34,-47}, -{32,34,-46}, -{32,34,-45}, -{32,34,-44}, -{32,34,-43}, -{32,34,-42}, -{32,34,-41}, -{32,34,-40}, -{32,34,-39}, -{32,34,-38}, -{32,34,-37}, -{32,34,-36}, -{32,34,-35}, -{32,34,-34}, -{32,34,-33}, -{32,34,-32}, -{32,34,-31}, -{32,34,-30}, -{32,34,-29}, -{32,34,-28}, -{32,34,-27}, -{32,34,-26}, -{32,34,-25}, -{32,34,-24}, -{32,34,-23}, -{32,34,-22}, -{32,34,-21}, -{32,34,-20}, -{32,34,-19}, -{32,34,-18}, -{32,34,-17}, -{32,34,-16}, -{32,34,-15}, -{32,34,-14}, -{32,34,-13}, -{32,34,-12}, -{32,34,-11}, -{32,34,-10}, -{32,34,-9}, -{32,34,-8}, -{32,34,-7}, -{32,34,-6}, -{32,34,-5}, -{32,34,-4}, -{32,34,-3}, -{32,34,-2}, -{32,34,-1}, -{32,34,0}, -{32,34,1}, -{32,34,2}, -{32,34,3}, -{32,34,4}, -{32,34,5}, -{32,34,6}, -{32,34,7}, -{32,34,8}, -{32,34,9}, -{32,34,10}, -{32,34,11}, -{32,34,12}, -{32,34,13}, -{32,34,14}, -{32,34,15}, -{32,34,16}, -{32,34,17}, -{32,34,18}, -{32,34,19}, -{32,34,20}, -{32,34,21}, -{32,34,22}, -{32,34,23}, -{32,34,24}, -{32,34,25}, -{32,34,26}, -{32,34,27}, -{32,34,28}, -{32,34,29}, -{32,34,30}, -{32,34,31}, -{32,34,32}, -{32,34,33}, -{32,34,34}, -{32,34,35}, -{32,34,36}, -{32,34,37}, -{32,34,38}, -{32,34,39}, -{32,34,40}, -{32,34,41}, -{32,34,42}, -{32,34,43}, -{32,35,-69}, -{32,35,-68}, -{32,35,-67}, -{32,35,-66}, -{32,35,-65}, -{32,35,-64}, -{32,35,-63}, -{32,35,-62}, -{32,35,-61}, -{32,35,-60}, -{32,35,-59}, -{32,35,-58}, -{32,35,-57}, -{32,35,-56}, -{32,35,-55}, -{32,35,-54}, -{32,35,-53}, -{32,35,-52}, -{32,35,-51}, -{32,35,-50}, -{32,35,-49}, -{32,35,-48}, -{32,35,-47}, -{32,35,-46}, -{32,35,-45}, -{32,35,-44}, -{32,35,-43}, -{32,35,-42}, -{32,35,-41}, -{32,35,-40}, -{32,35,-39}, -{32,35,-38}, -{32,35,-37}, -{32,35,-36}, -{32,35,-35}, -{32,35,-34}, -{32,35,-33}, -{32,35,-32}, -{32,35,-31}, -{32,35,-30}, -{32,35,-29}, -{32,35,-28}, -{32,35,-27}, -{32,35,-26}, -{32,35,-25}, -{32,35,-24}, -{32,35,-23}, -{32,35,-22}, -{32,35,-21}, -{32,35,-20}, -{32,35,-19}, -{32,35,-18}, -{32,35,-17}, -{32,35,-16}, -{32,35,-15}, -{32,35,-14}, -{32,35,-13}, -{32,35,-12}, -{32,35,-11}, -{32,35,-10}, -{32,35,-9}, -{32,35,-8}, -{32,35,-7}, -{32,35,-6}, -{32,35,-5}, -{32,35,-4}, -{32,35,-3}, -{32,35,-2}, -{32,35,-1}, -{32,35,0}, -{32,35,1}, -{32,35,2}, -{32,35,3}, -{32,35,4}, -{32,35,5}, -{32,35,6}, -{32,35,7}, -{32,35,8}, -{32,35,9}, -{32,35,10}, -{32,35,11}, -{32,35,12}, -{32,35,13}, -{32,35,14}, -{32,35,15}, -{32,35,16}, -{32,35,17}, -{32,35,18}, -{32,35,19}, -{32,35,20}, -{32,35,21}, -{32,35,22}, -{32,35,23}, -{32,35,24}, -{32,35,25}, -{32,35,26}, -{32,35,27}, -{32,35,28}, -{32,35,29}, -{32,35,30}, -{32,35,31}, -{32,35,32}, -{32,35,33}, -{32,35,34}, -{32,35,35}, -{32,35,36}, -{32,35,37}, -{32,35,38}, -{32,35,39}, -{32,35,40}, -{32,35,41}, -{32,35,42}, -{32,35,43}, -{32,36,-70}, -{32,36,-69}, -{32,36,-68}, -{32,36,-67}, -{32,36,-66}, -{32,36,-65}, -{32,36,-64}, -{32,36,-63}, -{32,36,-62}, -{32,36,-61}, -{32,36,-60}, -{32,36,-59}, -{32,36,-58}, -{32,36,-57}, -{32,36,-56}, -{32,36,-55}, -{32,36,-54}, -{32,36,-53}, -{32,36,-52}, -{32,36,-51}, -{32,36,-50}, -{32,36,-49}, -{32,36,-48}, -{32,36,-47}, -{32,36,-46}, -{32,36,-45}, -{32,36,-44}, -{32,36,-43}, -{32,36,-42}, -{32,36,-41}, -{32,36,-40}, -{32,36,-39}, -{32,36,-38}, -{32,36,-37}, -{32,36,-36}, -{32,36,-35}, -{32,36,-34}, -{32,36,-33}, -{32,36,-32}, -{32,36,-31}, -{32,36,-30}, -{32,36,-29}, -{32,36,-28}, -{32,36,-27}, -{32,36,-26}, -{32,36,-25}, -{32,36,-24}, -{32,36,-23}, -{32,36,-22}, -{32,36,-21}, -{32,36,-20}, -{32,36,-19}, -{32,36,-18}, -{32,36,-17}, -{32,36,-16}, -{32,36,-15}, -{32,36,-14}, -{32,36,-13}, -{32,36,-12}, -{32,36,-11}, -{32,36,-10}, -{32,36,-9}, -{32,36,-8}, -{32,36,-7}, -{32,36,-6}, -{32,36,-5}, -{32,36,-4}, -{32,36,-3}, -{32,36,-2}, -{32,36,-1}, -{32,36,0}, -{32,36,1}, -{32,36,2}, -{32,36,3}, -{32,36,4}, -{32,36,5}, -{32,36,6}, -{32,36,7}, -{32,36,8}, -{32,36,9}, -{32,36,10}, -{32,36,11}, -{32,36,12}, -{32,36,13}, -{32,36,14}, -{32,36,15}, -{32,36,16}, -{32,36,17}, -{32,36,18}, -{32,36,19}, -{32,36,20}, -{32,36,21}, -{32,36,22}, -{32,36,23}, -{32,36,24}, -{32,36,25}, -{32,36,26}, -{32,36,27}, -{32,36,28}, -{32,36,29}, -{32,36,30}, -{32,36,31}, -{32,36,32}, -{32,36,33}, -{32,36,34}, -{32,36,35}, -{32,36,36}, -{32,36,37}, -{32,36,38}, -{32,36,39}, -{32,36,40}, -{32,36,41}, -{32,36,42}, -{32,36,43}, -{32,36,44}, -{32,37,-71}, -{32,37,-70}, -{32,37,-69}, -{32,37,-68}, -{32,37,-67}, -{32,37,-66}, -{32,37,-65}, -{32,37,-64}, -{32,37,-63}, -{32,37,-62}, -{32,37,-61}, -{32,37,-60}, -{32,37,-59}, -{32,37,-58}, -{32,37,-57}, -{32,37,-56}, -{32,37,-55}, -{32,37,-54}, -{32,37,-53}, -{32,37,-52}, -{32,37,-51}, -{32,37,-50}, -{32,37,-49}, -{32,37,-48}, -{32,37,-47}, -{32,37,-46}, -{32,37,-45}, -{32,37,-44}, -{32,37,-43}, -{32,37,-42}, -{32,37,-41}, -{32,37,-40}, -{32,37,-39}, -{32,37,-38}, -{32,37,-37}, -{32,37,-36}, -{32,37,-35}, -{32,37,-34}, -{32,37,-33}, -{32,37,-32}, -{32,37,-31}, -{32,37,-30}, -{32,37,-29}, -{32,37,-28}, -{32,37,-27}, -{32,37,-26}, -{32,37,-25}, -{32,37,-24}, -{32,37,-23}, -{32,37,-22}, -{32,37,-21}, -{32,37,-20}, -{32,37,-19}, -{32,37,-18}, -{32,37,-17}, -{32,37,-16}, -{32,37,-15}, -{32,37,-14}, -{32,37,-13}, -{32,37,-12}, -{32,37,-11}, -{32,37,-10}, -{32,37,-9}, -{32,37,-8}, -{32,37,-7}, -{32,37,-6}, -{32,37,-5}, -{32,37,-4}, -{32,37,-3}, -{32,37,-2}, -{32,37,-1}, -{32,37,0}, -{32,37,1}, -{32,37,2}, -{32,37,3}, -{32,37,4}, -{32,37,5}, -{32,37,6}, -{32,37,7}, -{32,37,8}, -{32,37,9}, -{32,37,10}, -{32,37,11}, -{32,37,12}, -{32,37,13}, -{32,37,14}, -{32,37,15}, -{32,37,16}, -{32,37,17}, -{32,37,18}, -{32,37,19}, -{32,37,20}, -{32,37,21}, -{32,37,22}, -{32,37,23}, -{32,37,24}, -{32,37,25}, -{32,37,26}, -{32,37,27}, -{32,37,28}, -{32,37,29}, -{32,37,30}, -{32,37,31}, -{32,37,32}, -{32,37,33}, -{32,37,34}, -{32,37,35}, -{32,37,36}, -{32,37,37}, -{32,37,38}, -{32,37,39}, -{32,37,40}, -{32,37,41}, -{32,37,42}, -{32,37,43}, -{32,37,44}, -{32,38,-72}, -{32,38,-71}, -{32,38,-70}, -{32,38,-69}, -{32,38,-68}, -{32,38,-67}, -{32,38,-66}, -{32,38,-65}, -{32,38,-64}, -{32,38,-63}, -{32,38,-62}, -{32,38,-61}, -{32,38,-60}, -{32,38,-59}, -{32,38,-58}, -{32,38,-57}, -{32,38,-56}, -{32,38,-55}, -{32,38,-54}, -{32,38,-53}, -{32,38,-52}, -{32,38,-51}, -{32,38,-50}, -{32,38,-49}, -{32,38,-48}, -{32,38,-47}, -{32,38,-46}, -{32,38,-45}, -{32,38,-44}, -{32,38,-43}, -{32,38,-42}, -{32,38,-41}, -{32,38,-40}, -{32,38,-39}, -{32,38,-38}, -{32,38,-37}, -{32,38,-36}, -{32,38,-35}, -{32,38,-34}, -{32,38,-33}, -{32,38,-32}, -{32,38,-31}, -{32,38,-30}, -{32,38,-29}, -{32,38,-28}, -{32,38,-27}, -{32,38,-26}, -{32,38,-25}, -{32,38,-24}, -{32,38,-23}, -{32,38,-22}, -{32,38,-21}, -{32,38,-20}, -{32,38,-19}, -{32,38,-18}, -{32,38,-17}, -{32,38,-16}, -{32,38,-15}, -{32,38,-14}, -{32,38,-13}, -{32,38,-12}, -{32,38,-11}, -{32,38,-10}, -{32,38,-9}, -{32,38,-8}, -{32,38,-7}, -{32,38,-6}, -{32,38,-5}, -{32,38,-4}, -{32,38,-3}, -{32,38,-2}, -{32,38,-1}, -{32,38,0}, -{32,38,1}, -{32,38,2}, -{32,38,3}, -{32,38,4}, -{32,38,5}, -{32,38,6}, -{32,38,7}, -{32,38,8}, -{32,38,9}, -{32,38,10}, -{32,38,11}, -{32,38,12}, -{32,38,13}, -{32,38,14}, -{32,38,15}, -{32,38,16}, -{32,38,17}, -{32,38,18}, -{32,38,19}, -{32,38,20}, -{32,38,21}, -{32,38,22}, -{32,38,23}, -{32,38,24}, -{32,38,25}, -{32,38,26}, -{32,38,27}, -{32,38,28}, -{32,38,29}, -{32,38,30}, -{32,38,31}, -{32,38,32}, -{32,38,33}, -{32,38,34}, -{32,38,35}, -{32,38,36}, -{32,38,37}, -{32,38,38}, -{32,38,39}, -{32,38,40}, -{32,38,41}, -{32,38,42}, -{32,38,43}, -{32,38,44}, -{32,39,-73}, -{32,39,-72}, -{32,39,-71}, -{32,39,-70}, -{32,39,-69}, -{32,39,-68}, -{32,39,-67}, -{32,39,-66}, -{32,39,-65}, -{32,39,-64}, -{32,39,-63}, -{32,39,-62}, -{32,39,-61}, -{32,39,-60}, -{32,39,-59}, -{32,39,-58}, -{32,39,-57}, -{32,39,-56}, -{32,39,-55}, -{32,39,-54}, -{32,39,-53}, -{32,39,-52}, -{32,39,-51}, -{32,39,-50}, -{32,39,-49}, -{32,39,-48}, -{32,39,-47}, -{32,39,-46}, -{32,39,-45}, -{32,39,-44}, -{32,39,-43}, -{32,39,-42}, -{32,39,-41}, -{32,39,-40}, -{32,39,-39}, -{32,39,-38}, -{32,39,-37}, -{32,39,-36}, -{32,39,-35}, -{32,39,-34}, -{32,39,-33}, -{32,39,-32}, -{32,39,-31}, -{32,39,-30}, -{32,39,-29}, -{32,39,-28}, -{32,39,-27}, -{32,39,-26}, -{32,39,-25}, -{32,39,-24}, -{32,39,-23}, -{32,39,-22}, -{32,39,-21}, -{32,39,-20}, -{32,39,-19}, -{32,39,-18}, -{32,39,-17}, -{32,39,-16}, -{32,39,-15}, -{32,39,-14}, -{32,39,-13}, -{32,39,-12}, -{32,39,-11}, -{32,39,-10}, -{32,39,-9}, -{32,39,-8}, -{32,39,-7}, -{32,39,-6}, -{32,39,-5}, -{32,39,-4}, -{32,39,-3}, -{32,39,-2}, -{32,39,-1}, -{32,39,0}, -{32,39,1}, -{32,39,2}, -{32,39,3}, -{32,39,4}, -{32,39,5}, -{32,39,6}, -{32,39,7}, -{32,39,8}, -{32,39,9}, -{32,39,10}, -{32,39,11}, -{32,39,12}, -{32,39,13}, -{32,39,14}, -{32,39,15}, -{32,39,16}, -{32,39,17}, -{32,39,18}, -{32,39,19}, -{32,39,20}, -{32,39,21}, -{32,39,22}, -{32,39,23}, -{32,39,24}, -{32,39,25}, -{32,39,26}, -{32,39,27}, -{32,39,28}, -{32,39,29}, -{32,39,30}, -{32,39,31}, -{32,39,32}, -{32,39,33}, -{32,39,34}, -{32,39,35}, -{32,39,36}, -{32,39,37}, -{32,39,38}, -{32,39,39}, -{32,39,40}, -{32,39,41}, -{32,39,42}, -{32,39,43}, -{32,39,44}, -{32,40,-74}, -{32,40,-73}, -{32,40,-72}, -{32,40,-71}, -{32,40,-70}, -{32,40,-69}, -{32,40,-68}, -{32,40,-67}, -{32,40,-66}, -{32,40,-65}, -{32,40,-64}, -{32,40,-63}, -{32,40,-62}, -{32,40,-61}, -{32,40,-60}, -{32,40,-59}, -{32,40,-58}, -{32,40,-57}, -{32,40,-56}, -{32,40,-55}, -{32,40,-54}, -{32,40,-53}, -{32,40,-52}, -{32,40,-51}, -{32,40,-50}, -{32,40,-49}, -{32,40,-48}, -{32,40,-47}, -{32,40,-46}, -{32,40,-45}, -{32,40,-44}, -{32,40,-43}, -{32,40,-42}, -{32,40,-41}, -{32,40,-40}, -{32,40,-39}, -{32,40,-38}, -{32,40,-37}, -{32,40,-36}, -{32,40,-35}, -{32,40,-34}, -{32,40,-33}, -{32,40,-32}, -{32,40,-31}, -{32,40,-30}, -{32,40,-29}, -{32,40,-28}, -{32,40,-27}, -{32,40,-26}, -{32,40,-25}, -{32,40,-24}, -{32,40,-23}, -{32,40,-22}, -{32,40,-21}, -{32,40,-20}, -{32,40,-19}, -{32,40,-18}, -{32,40,-17}, -{32,40,-16}, -{32,40,-15}, -{32,40,-14}, -{32,40,-13}, -{32,40,-12}, -{32,40,-11}, -{32,40,-10}, -{32,40,-9}, -{32,40,-8}, -{32,40,-7}, -{32,40,-6}, -{32,40,-5}, -{32,40,-4}, -{32,40,-3}, -{32,40,-2}, -{32,40,-1}, -{32,40,0}, -{32,40,1}, -{32,40,2}, -{32,40,3}, -{32,40,4}, -{32,40,5}, -{32,40,6}, -{32,40,7}, -{32,40,8}, -{32,40,9}, -{32,40,10}, -{32,40,11}, -{32,40,12}, -{32,40,13}, -{32,40,14}, -{32,40,15}, -{32,40,16}, -{32,40,17}, -{32,40,18}, -{32,40,19}, -{32,40,20}, -{32,40,21}, -{32,40,22}, -{32,40,23}, -{32,40,24}, -{32,40,25}, -{32,40,26}, -{32,40,27}, -{32,40,28}, -{32,40,29}, -{32,40,30}, -{32,40,31}, -{32,40,32}, -{32,40,33}, -{32,40,34}, -{32,40,35}, -{32,40,36}, -{32,40,37}, -{32,40,38}, -{32,40,39}, -{32,40,40}, -{32,40,41}, -{32,40,42}, -{32,40,43}, -{32,40,44}, -{32,41,-75}, -{32,41,-74}, -{32,41,-73}, -{32,41,-72}, -{32,41,-71}, -{32,41,-70}, -{32,41,-69}, -{32,41,-68}, -{32,41,-67}, -{32,41,-66}, -{32,41,-65}, -{32,41,-64}, -{32,41,-63}, -{32,41,-62}, -{32,41,-61}, -{32,41,-60}, -{32,41,-59}, -{32,41,-58}, -{32,41,-57}, -{32,41,-56}, -{32,41,-55}, -{32,41,-54}, -{32,41,-53}, -{32,41,-52}, -{32,41,-51}, -{32,41,-50}, -{32,41,-49}, -{32,41,-48}, -{32,41,-47}, -{32,41,-46}, -{32,41,-45}, -{32,41,-44}, -{32,41,-43}, -{32,41,-42}, -{32,41,-41}, -{32,41,-40}, -{32,41,-39}, -{32,41,-38}, -{32,41,-37}, -{32,41,-36}, -{32,41,-35}, -{32,41,-34}, -{32,41,-33}, -{32,41,-32}, -{32,41,-31}, -{32,41,-30}, -{32,41,-29}, -{32,41,-28}, -{32,41,-27}, -{32,41,-26}, -{32,41,-25}, -{32,41,-24}, -{32,41,-23}, -{32,41,-22}, -{32,41,-21}, -{32,41,-20}, -{32,41,-19}, -{32,41,-18}, -{32,41,-17}, -{32,41,-16}, -{32,41,-15}, -{32,41,-14}, -{32,41,-13}, -{32,41,-12}, -{32,41,-11}, -{32,41,-10}, -{32,41,-9}, -{32,41,-8}, -{32,41,-7}, -{32,41,-6}, -{32,41,-5}, -{32,41,-4}, -{32,41,-3}, -{32,41,-2}, -{32,41,-1}, -{32,41,0}, -{32,41,1}, -{32,41,2}, -{32,41,3}, -{32,41,4}, -{32,41,5}, -{32,41,6}, -{32,41,7}, -{32,41,8}, -{32,41,9}, -{32,41,10}, -{32,41,11}, -{32,41,12}, -{32,41,13}, -{32,41,14}, -{32,41,15}, -{32,41,16}, -{32,41,17}, -{32,41,18}, -{32,41,19}, -{32,41,20}, -{32,41,21}, -{32,41,22}, -{32,41,23}, -{32,41,24}, -{32,41,25}, -{32,41,26}, -{32,41,27}, -{32,41,28}, -{32,41,29}, -{32,41,30}, -{32,41,31}, -{32,41,32}, -{32,41,33}, -{32,41,34}, -{32,41,35}, -{32,41,36}, -{32,41,37}, -{32,41,38}, -{32,41,39}, -{32,41,40}, -{32,41,41}, -{32,41,42}, -{32,41,43}, -{32,41,44}, -{32,42,-76}, -{32,42,-75}, -{32,42,-74}, -{32,42,-73}, -{32,42,-72}, -{32,42,-71}, -{32,42,-70}, -{32,42,-69}, -{32,42,-68}, -{32,42,-67}, -{32,42,-66}, -{32,42,-65}, -{32,42,-64}, -{32,42,-63}, -{32,42,-62}, -{32,42,-61}, -{32,42,-60}, -{32,42,-59}, -{32,42,-58}, -{32,42,-57}, -{32,42,-56}, -{32,42,-55}, -{32,42,-54}, -{32,42,-53}, -{32,42,-52}, -{32,42,-51}, -{32,42,-50}, -{32,42,-49}, -{32,42,-48}, -{32,42,-47}, -{32,42,-46}, -{32,42,-45}, -{32,42,-44}, -{32,42,-43}, -{32,42,-42}, -{32,42,-41}, -{32,42,-40}, -{32,42,-39}, -{32,42,-38}, -{32,42,-37}, -{32,42,-36}, -{32,42,-35}, -{32,42,-34}, -{32,42,-33}, -{32,42,-32}, -{32,42,-31}, -{32,42,-30}, -{32,42,-29}, -{32,42,-28}, -{32,42,-27}, -{32,42,-26}, -{32,42,-25}, -{32,42,-24}, -{32,42,-23}, -{32,42,-22}, -{32,42,-21}, -{32,42,-20}, -{32,42,-19}, -{32,42,-18}, -{32,42,-17}, -{32,42,-16}, -{32,42,-15}, -{32,42,-14}, -{32,42,-13}, -{32,42,-12}, -{32,42,-11}, -{32,42,-10}, -{32,42,-9}, -{32,42,-8}, -{32,42,-7}, -{32,42,-6}, -{32,42,-5}, -{32,42,-4}, -{32,42,-3}, -{32,42,-2}, -{32,42,-1}, -{32,42,0}, -{32,42,1}, -{32,42,2}, -{32,42,3}, -{32,42,4}, -{32,42,5}, -{32,42,6}, -{32,42,7}, -{32,42,8}, -{32,42,9}, -{32,42,10}, -{32,42,11}, -{32,42,12}, -{32,42,13}, -{32,42,14}, -{32,42,15}, -{32,42,16}, -{32,42,17}, -{32,42,18}, -{32,42,19}, -{32,42,20}, -{32,42,21}, -{32,42,22}, -{32,42,23}, -{32,42,24}, -{32,42,25}, -{32,42,26}, -{32,42,27}, -{32,42,28}, -{32,42,29}, -{32,42,30}, -{32,42,31}, -{32,42,32}, -{32,42,33}, -{32,42,34}, -{32,42,35}, -{32,42,36}, -{32,42,37}, -{32,42,38}, -{32,42,39}, -{32,42,40}, -{32,42,41}, -{32,42,42}, -{32,42,43}, -{32,42,44}, -{32,43,-76}, -{32,43,-75}, -{32,43,-74}, -{32,43,-73}, -{32,43,-72}, -{32,43,-71}, -{32,43,-70}, -{32,43,-69}, -{32,43,-68}, -{32,43,-67}, -{32,43,-66}, -{32,43,-65}, -{32,43,-64}, -{32,43,-63}, -{32,43,-62}, -{32,43,-61}, -{32,43,-60}, -{32,43,-59}, -{32,43,-58}, -{32,43,-57}, -{32,43,-56}, -{32,43,-55}, -{32,43,-54}, -{32,43,-53}, -{32,43,-52}, -{32,43,-51}, -{32,43,-50}, -{32,43,-49}, -{32,43,-48}, -{32,43,-47}, -{32,43,-46}, -{32,43,-45}, -{32,43,-44}, -{32,43,-43}, -{32,43,-42}, -{32,43,-41}, -{32,43,-40}, -{32,43,-39}, -{32,43,-38}, -{32,43,-37}, -{32,43,-36}, -{32,43,-35}, -{32,43,-34}, -{32,43,-33}, -{32,43,-32}, -{32,43,-31}, -{32,43,-30}, -{32,43,-29}, -{32,43,-28}, -{32,43,-27}, -{32,43,-26}, -{32,43,-25}, -{32,43,-24}, -{32,43,-23}, -{32,43,-22}, -{32,43,-21}, -{32,43,-20}, -{32,43,-19}, -{32,43,-18}, -{32,43,-17}, -{32,43,-16}, -{32,43,-15}, -{32,43,-14}, -{32,43,-13}, -{32,43,-12}, -{32,43,-11}, -{32,43,-10}, -{32,43,-9}, -{32,43,-8}, -{32,43,-7}, -{32,43,-6}, -{32,43,-5}, -{32,43,-4}, -{32,43,-3}, -{32,43,-2}, -{32,43,-1}, -{32,43,0}, -{32,43,1}, -{32,43,2}, -{32,43,3}, -{32,43,4}, -{32,43,5}, -{32,43,6}, -{32,43,7}, -{32,43,8}, -{32,43,9}, -{32,43,10}, -{32,43,11}, -{32,43,12}, -{32,43,13}, -{32,43,14}, -{32,43,15}, -{32,43,16}, -{32,43,17}, -{32,43,18}, -{32,43,19}, -{32,43,20}, -{32,43,21}, -{32,43,22}, -{32,43,23}, -{32,43,24}, -{32,43,25}, -{32,43,26}, -{32,43,27}, -{32,43,28}, -{32,43,29}, -{32,43,30}, -{32,43,31}, -{32,43,32}, -{32,43,33}, -{32,43,34}, -{32,43,35}, -{32,43,36}, -{32,43,37}, -{32,43,38}, -{32,43,39}, -{32,43,40}, -{32,43,41}, -{32,43,42}, -{32,43,43}, -{32,43,44}, -{32,44,-77}, -{32,44,-76}, -{32,44,-75}, -{32,44,-74}, -{32,44,-73}, -{32,44,-72}, -{32,44,-71}, -{32,44,-70}, -{32,44,-69}, -{32,44,-68}, -{32,44,-67}, -{32,44,-66}, -{32,44,-65}, -{32,44,-64}, -{32,44,-63}, -{32,44,-62}, -{32,44,-61}, -{32,44,-60}, -{32,44,-59}, -{32,44,-58}, -{32,44,-57}, -{32,44,-56}, -{32,44,-55}, -{32,44,-54}, -{32,44,-53}, -{32,44,-52}, -{32,44,-51}, -{32,44,-50}, -{32,44,-49}, -{32,44,-48}, -{32,44,-47}, -{32,44,-46}, -{32,44,-45}, -{32,44,-44}, -{32,44,-43}, -{32,44,-42}, -{32,44,-41}, -{32,44,-40}, -{32,44,-39}, -{32,44,-38}, -{32,44,-37}, -{32,44,-36}, -{32,44,-35}, -{32,44,-34}, -{32,44,-33}, -{32,44,-32}, -{32,44,-31}, -{32,44,-30}, -{32,44,-29}, -{32,44,-28}, -{32,44,-27}, -{32,44,-26}, -{32,44,-25}, -{32,44,-24}, -{32,44,-23}, -{32,44,-22}, -{32,44,-21}, -{32,44,-20}, -{32,44,-19}, -{32,44,-18}, -{32,44,-17}, -{32,44,-16}, -{32,44,-15}, -{32,44,-14}, -{32,44,-13}, -{32,44,-12}, -{32,44,-11}, -{32,44,-10}, -{32,44,-9}, -{32,44,-8}, -{32,44,-7}, -{32,44,-6}, -{32,44,-5}, -{32,44,-4}, -{32,44,-3}, -{32,44,-2}, -{32,44,-1}, -{32,44,0}, -{32,44,1}, -{32,44,2}, -{32,44,3}, -{32,44,4}, -{32,44,5}, -{32,44,6}, -{32,44,7}, -{32,44,8}, -{32,44,9}, -{32,44,10}, -{32,44,11}, -{32,44,12}, -{32,44,13}, -{32,44,14}, -{32,44,15}, -{32,44,16}, -{32,44,17}, -{32,44,18}, -{32,44,19}, -{32,44,20}, -{32,44,21}, -{32,44,22}, -{32,44,23}, -{32,44,24}, -{32,44,25}, -{32,44,26}, -{32,44,27}, -{32,44,28}, -{32,44,29}, -{32,44,30}, -{32,44,31}, -{32,44,32}, -{32,44,33}, -{32,44,34}, -{32,44,35}, -{32,44,36}, -{32,44,37}, -{32,44,38}, -{32,44,39}, -{32,44,40}, -{32,44,41}, -{32,44,42}, -{32,44,43}, -{32,44,44}, -{32,45,-78}, -{32,45,-77}, -{32,45,-76}, -{32,45,-75}, -{32,45,-74}, -{32,45,-73}, -{32,45,-72}, -{32,45,-71}, -{32,45,-70}, -{32,45,-69}, -{32,45,-68}, -{32,45,-67}, -{32,45,-66}, -{32,45,-65}, -{32,45,-64}, -{32,45,-63}, -{32,45,-62}, -{32,45,-61}, -{32,45,-60}, -{32,45,-59}, -{32,45,-58}, -{32,45,-57}, -{32,45,-56}, -{32,45,-55}, -{32,45,-54}, -{32,45,-53}, -{32,45,-52}, -{32,45,-51}, -{32,45,-50}, -{32,45,-49}, -{32,45,-48}, -{32,45,-47}, -{32,45,-46}, -{32,45,-45}, -{32,45,-44}, -{32,45,-43}, -{32,45,-42}, -{32,45,-41}, -{32,45,-40}, -{32,45,-39}, -{32,45,-38}, -{32,45,-37}, -{32,45,-36}, -{32,45,-35}, -{32,45,-34}, -{32,45,-33}, -{32,45,-32}, -{32,45,-31}, -{32,45,-30}, -{32,45,-29}, -{32,45,-28}, -{32,45,-27}, -{32,45,-26}, -{32,45,-25}, -{32,45,-24}, -{32,45,-23}, -{32,45,-22}, -{32,45,-21}, -{32,45,-20}, -{32,45,-19}, -{32,45,-18}, -{32,45,-17}, -{32,45,-16}, -{32,45,-15}, -{32,45,-14}, -{32,45,-13}, -{32,45,-12}, -{32,45,-11}, -{32,45,-10}, -{32,45,-9}, -{32,45,-8}, -{32,45,-7}, -{32,45,-6}, -{32,45,-5}, -{32,45,-4}, -{32,45,-3}, -{32,45,-2}, -{32,45,-1}, -{32,45,0}, -{32,45,1}, -{32,45,2}, -{32,45,3}, -{32,45,4}, -{32,45,5}, -{32,45,6}, -{32,45,7}, -{32,45,8}, -{32,45,9}, -{32,45,10}, -{32,45,11}, -{32,45,12}, -{32,45,13}, -{32,45,14}, -{32,45,15}, -{32,45,16}, -{32,45,17}, -{32,45,18}, -{32,45,19}, -{32,45,20}, -{32,45,21}, -{32,45,22}, -{32,45,23}, -{32,45,24}, -{32,45,25}, -{32,45,26}, -{32,45,27}, -{32,45,28}, -{32,45,29}, -{32,45,30}, -{32,45,31}, -{32,45,32}, -{32,45,33}, -{32,45,34}, -{32,45,35}, -{32,45,36}, -{32,45,37}, -{32,45,38}, -{32,45,39}, -{32,45,40}, -{32,45,41}, -{32,45,42}, -{32,45,43}, -{32,45,44}, -{32,46,-79}, -{32,46,-78}, -{32,46,-77}, -{32,46,-76}, -{32,46,-75}, -{32,46,-74}, -{32,46,-73}, -{32,46,-72}, -{32,46,-71}, -{32,46,-70}, -{32,46,-69}, -{32,46,-68}, -{32,46,-67}, -{32,46,-66}, -{32,46,-65}, -{32,46,-64}, -{32,46,-63}, -{32,46,-62}, -{32,46,-61}, -{32,46,-60}, -{32,46,-59}, -{32,46,-58}, -{32,46,-57}, -{32,46,-56}, -{32,46,-55}, -{32,46,-54}, -{32,46,-53}, -{32,46,-52}, -{32,46,-51}, -{32,46,-50}, -{32,46,-49}, -{32,46,-48}, -{32,46,-47}, -{32,46,-46}, -{32,46,-45}, -{32,46,-44}, -{32,46,-43}, -{32,46,-42}, -{32,46,-41}, -{32,46,-40}, -{32,46,-39}, -{32,46,-38}, -{32,46,-37}, -{32,46,-36}, -{32,46,-35}, -{32,46,-34}, -{32,46,-33}, -{32,46,-32}, -{32,46,-31}, -{32,46,-30}, -{32,46,-29}, -{32,46,-28}, -{32,46,-27}, -{32,46,-26}, -{32,46,-25}, -{32,46,-24}, -{32,46,-23}, -{32,46,-22}, -{32,46,-21}, -{32,46,-20}, -{32,46,-19}, -{32,46,-18}, -{32,46,-17}, -{32,46,-16}, -{32,46,-15}, -{32,46,-14}, -{32,46,-13}, -{32,46,-12}, -{32,46,-11}, -{32,46,-10}, -{32,46,-9}, -{32,46,-8}, -{32,46,-7}, -{32,46,-6}, -{32,46,-5}, -{32,46,-4}, -{32,46,-3}, -{32,46,-2}, -{32,46,-1}, -{32,46,0}, -{32,46,1}, -{32,46,2}, -{32,46,3}, -{32,46,4}, -{32,46,5}, -{32,46,6}, -{32,46,7}, -{32,46,8}, -{32,46,9}, -{32,46,10}, -{32,46,11}, -{32,46,12}, -{32,46,13}, -{32,46,14}, -{32,46,15}, -{32,46,16}, -{32,46,17}, -{32,46,18}, -{32,46,19}, -{32,46,20}, -{32,46,21}, -{32,46,22}, -{32,46,23}, -{32,46,24}, -{32,46,25}, -{32,46,26}, -{32,46,27}, -{32,46,28}, -{32,46,29}, -{32,46,30}, -{32,46,31}, -{32,46,32}, -{32,46,33}, -{32,46,34}, -{32,46,35}, -{32,46,36}, -{32,46,37}, -{32,46,38}, -{32,46,39}, -{32,46,40}, -{32,46,41}, -{32,46,42}, -{32,46,43}, -{32,46,44}, -{32,46,45}, -{32,47,-80}, -{32,47,-79}, -{32,47,-78}, -{32,47,-77}, -{32,47,-76}, -{32,47,-75}, -{32,47,-74}, -{32,47,-73}, -{32,47,-72}, -{32,47,-71}, -{32,47,-70}, -{32,47,-69}, -{32,47,-68}, -{32,47,-67}, -{32,47,-66}, -{32,47,-65}, -{32,47,-64}, -{32,47,-63}, -{32,47,-62}, -{32,47,-61}, -{32,47,-60}, -{32,47,-59}, -{32,47,-58}, -{32,47,-57}, -{32,47,-56}, -{32,47,-55}, -{32,47,-54}, -{32,47,-53}, -{32,47,-52}, -{32,47,-51}, -{32,47,-50}, -{32,47,-49}, -{32,47,-48}, -{32,47,-47}, -{32,47,-46}, -{32,47,-45}, -{32,47,-44}, -{32,47,-43}, -{32,47,-42}, -{32,47,-41}, -{32,47,-40}, -{32,47,-39}, -{32,47,-38}, -{32,47,-37}, -{32,47,-36}, -{32,47,-35}, -{32,47,-34}, -{32,47,-33}, -{32,47,-32}, -{32,47,-31}, -{32,47,-30}, -{32,47,-29}, -{32,47,-28}, -{32,47,-27}, -{32,47,-26}, -{32,47,-25}, -{32,47,-24}, -{32,47,-23}, -{32,47,-22}, -{32,47,-21}, -{32,47,-20}, -{32,47,-19}, -{32,47,-18}, -{32,47,-17}, -{32,47,-16}, -{32,47,-15}, -{32,47,-14}, -{32,47,-13}, -{32,47,-12}, -{32,47,-11}, -{32,47,-10}, -{32,47,-9}, -{32,47,-8}, -{32,47,-7}, -{32,47,-6}, -{32,47,-5}, -{32,47,-4}, -{32,47,-3}, -{32,47,-2}, -{32,47,-1}, -{32,47,0}, -{32,47,1}, -{32,47,2}, -{32,47,3}, -{32,47,4}, -{32,47,5}, -{32,47,6}, -{32,47,7}, -{32,47,8}, -{32,47,9}, -{32,47,10}, -{32,47,11}, -{32,47,12}, -{32,47,13}, -{32,47,14}, -{32,47,15}, -{32,47,16}, -{32,47,17}, -{32,47,18}, -{32,47,19}, -{32,47,20}, -{32,47,21}, -{32,47,22}, -{32,47,23}, -{32,47,24}, -{32,47,25}, -{32,47,26}, -{32,47,27}, -{32,47,28}, -{32,47,29}, -{32,47,30}, -{32,47,31}, -{32,47,32}, -{32,47,33}, -{32,47,34}, -{32,47,35}, -{32,47,36}, -{32,47,37}, -{32,47,38}, -{32,47,39}, -{32,47,40}, -{32,47,41}, -{32,47,42}, -{32,47,43}, -{32,47,44}, -{32,47,45}, -{32,48,-81}, -{32,48,-80}, -{32,48,-79}, -{32,48,-78}, -{32,48,-77}, -{32,48,-76}, -{32,48,-75}, -{32,48,-74}, -{32,48,-73}, -{32,48,-72}, -{32,48,-71}, -{32,48,-70}, -{32,48,-69}, -{32,48,-68}, -{32,48,-67}, -{32,48,-66}, -{32,48,-65}, -{32,48,-64}, -{32,48,-63}, -{32,48,-62}, -{32,48,-61}, -{32,48,-60}, -{32,48,-59}, -{32,48,-58}, -{32,48,-57}, -{32,48,-56}, -{32,48,-55}, -{32,48,-54}, -{32,48,-53}, -{32,48,-52}, -{32,48,-51}, -{32,48,-50}, -{32,48,-49}, -{32,48,-48}, -{32,48,-47}, -{32,48,-46}, -{32,48,-45}, -{32,48,-44}, -{32,48,-43}, -{32,48,-42}, -{32,48,-41}, -{32,48,-40}, -{32,48,-39}, -{32,48,-38}, -{32,48,-37}, -{32,48,-36}, -{32,48,-35}, -{32,48,-34}, -{32,48,-33}, -{32,48,-32}, -{32,48,-31}, -{32,48,-30}, -{32,48,-29}, -{32,48,-28}, -{32,48,-27}, -{32,48,-26}, -{32,48,-25}, -{32,48,-24}, -{32,48,-23}, -{32,48,-22}, -{32,48,-21}, -{32,48,-20}, -{32,48,-19}, -{32,48,-18}, -{32,48,-17}, -{32,48,-16}, -{32,48,-15}, -{32,48,-14}, -{32,48,-13}, -{32,48,-12}, -{32,48,-11}, -{32,48,-10}, -{32,48,-9}, -{32,48,-8}, -{32,48,-7}, -{32,48,-6}, -{32,48,-5}, -{32,48,-4}, -{32,48,-3}, -{32,48,-2}, -{32,48,-1}, -{32,48,0}, -{32,48,1}, -{32,48,2}, -{32,48,3}, -{32,48,4}, -{32,48,5}, -{32,48,6}, -{32,48,7}, -{32,48,8}, -{32,48,9}, -{32,48,10}, -{32,48,11}, -{32,48,12}, -{32,48,13}, -{32,48,14}, -{32,48,15}, -{32,48,16}, -{32,48,17}, -{32,48,18}, -{32,48,19}, -{32,48,20}, -{32,48,21}, -{32,48,22}, -{32,48,23}, -{32,48,24}, -{32,48,25}, -{32,48,26}, -{32,48,27}, -{32,48,28}, -{32,48,29}, -{32,48,30}, -{32,48,31}, -{32,48,32}, -{32,48,33}, -{32,48,34}, -{32,48,35}, -{32,48,36}, -{32,48,37}, -{32,48,38}, -{32,48,39}, -{32,48,40}, -{32,48,41}, -{32,48,42}, -{32,48,43}, -{32,48,44}, -{32,48,45}, -{32,49,-82}, -{32,49,-81}, -{32,49,-80}, -{32,49,-79}, -{32,49,-78}, -{32,49,-77}, -{32,49,-76}, -{32,49,-75}, -{32,49,-74}, -{32,49,-73}, -{32,49,-72}, -{32,49,-71}, -{32,49,-70}, -{32,49,-69}, -{32,49,-68}, -{32,49,-67}, -{32,49,-66}, -{32,49,-65}, -{32,49,-64}, -{32,49,-63}, -{32,49,-62}, -{32,49,-61}, -{32,49,-60}, -{32,49,-59}, -{32,49,-58}, -{32,49,-57}, -{32,49,-56}, -{32,49,-55}, -{32,49,-54}, -{32,49,-53}, -{32,49,-52}, -{32,49,-51}, -{32,49,-50}, -{32,49,-49}, -{32,49,-48}, -{32,49,-47}, -{32,49,-46}, -{32,49,-45}, -{32,49,-44}, -{32,49,-43}, -{32,49,-42}, -{32,49,-41}, -{32,49,-40}, -{32,49,-39}, -{32,49,-38}, -{32,49,-37}, -{32,49,-36}, -{32,49,-35}, -{32,49,-34}, -{32,49,-33}, -{32,49,-32}, -{32,49,-31}, -{32,49,-30}, -{32,49,-29}, -{32,49,-28}, -{32,49,-27}, -{32,49,-26}, -{32,49,-25}, -{32,49,-24}, -{32,49,-23}, -{32,49,-22}, -{32,49,-21}, -{32,49,-20}, -{32,49,-19}, -{32,49,-18}, -{32,49,-17}, -{32,49,-16}, -{32,49,-15}, -{32,49,-14}, -{32,49,-13}, -{32,49,-12}, -{32,49,-11}, -{32,49,-10}, -{32,49,-9}, -{32,49,-8}, -{32,49,-7}, -{32,49,-6}, -{32,49,-5}, -{32,49,-4}, -{32,49,-3}, -{32,49,-2}, -{32,49,-1}, -{32,49,0}, -{32,49,1}, -{32,49,2}, -{32,49,3}, -{32,49,4}, -{32,49,5}, -{32,49,6}, -{32,49,7}, -{32,49,8}, -{32,49,9}, -{32,49,10}, -{32,49,11}, -{32,49,12}, -{32,49,13}, -{32,49,14}, -{32,49,15}, -{32,49,16}, -{32,49,17}, -{32,49,18}, -{32,49,19}, -{32,49,20}, -{32,49,21}, -{32,49,22}, -{32,49,23}, -{32,49,24}, -{32,49,25}, -{32,49,26}, -{32,49,27}, -{32,49,28}, -{32,49,29}, -{32,49,30}, -{32,49,31}, -{32,49,32}, -{32,49,33}, -{32,49,34}, -{32,49,35}, -{32,49,36}, -{32,49,37}, -{32,49,38}, -{32,49,39}, -{32,49,40}, -{32,49,41}, -{32,49,42}, -{32,49,43}, -{32,49,44}, -{32,49,45}, -{32,50,-83}, -{32,50,-82}, -{32,50,-81}, -{32,50,-80}, -{32,50,-79}, -{32,50,-78}, -{32,50,-77}, -{32,50,-76}, -{32,50,-75}, -{32,50,-74}, -{32,50,-73}, -{32,50,-72}, -{32,50,-71}, -{32,50,-70}, -{32,50,-69}, -{32,50,-68}, -{32,50,-67}, -{32,50,-66}, -{32,50,-65}, -{32,50,-64}, -{32,50,-63}, -{32,50,-62}, -{32,50,-61}, -{32,50,-60}, -{32,50,-59}, -{32,50,-58}, -{32,50,-57}, -{32,50,-56}, -{32,50,-55}, -{32,50,-54}, -{32,50,-53}, -{32,50,-52}, -{32,50,-51}, -{32,50,-50}, -{32,50,-49}, -{32,50,-48}, -{32,50,-47}, -{32,50,-46}, -{32,50,-45}, -{32,50,-44}, -{32,50,-43}, -{32,50,-42}, -{32,50,-41}, -{32,50,-40}, -{32,50,-39}, -{32,50,-38}, -{32,50,-37}, -{32,50,-36}, -{32,50,-35}, -{32,50,-34}, -{32,50,-33}, -{32,50,-32}, -{32,50,-31}, -{32,50,-30}, -{32,50,-29}, -{32,50,-28}, -{32,50,-27}, -{32,50,-26}, -{32,50,-25}, -{32,50,-24}, -{32,50,-23}, -{32,50,-22}, -{32,50,-21}, -{32,50,-20}, -{32,50,-19}, -{32,50,-18}, -{32,50,-17}, -{32,50,-16}, -{32,50,-15}, -{32,50,-14}, -{32,50,-13}, -{32,50,-12}, -{32,50,-11}, -{32,50,-10}, -{32,50,-9}, -{32,50,-8}, -{32,50,-7}, -{32,50,-6}, -{32,50,-5}, -{32,50,-4}, -{32,50,-3}, -{32,50,-2}, -{32,50,-1}, -{32,50,0}, -{32,50,1}, -{32,50,2}, -{32,50,3}, -{32,50,4}, -{32,50,5}, -{32,50,6}, -{32,50,7}, -{32,50,8}, -{32,50,9}, -{32,50,10}, -{32,50,11}, -{32,50,12}, -{32,50,13}, -{32,50,14}, -{32,50,15}, -{32,50,16}, -{32,50,17}, -{32,50,18}, -{32,50,19}, -{32,50,20}, -{32,50,21}, -{32,50,22}, -{32,50,23}, -{32,50,24}, -{32,50,25}, -{32,50,26}, -{32,50,27}, -{32,50,28}, -{32,50,29}, -{32,50,30}, -{32,50,31}, -{32,50,32}, -{32,50,33}, -{32,50,34}, -{32,50,35}, -{32,50,36}, -{32,50,37}, -{32,50,38}, -{32,50,39}, -{32,50,40}, -{32,50,41}, -{32,50,42}, -{32,50,43}, -{32,50,44}, -{32,50,45}, -{32,51,-84}, -{32,51,-83}, -{32,51,-82}, -{32,51,-81}, -{32,51,-80}, -{32,51,-79}, -{32,51,-78}, -{32,51,-77}, -{32,51,-76}, -{32,51,-75}, -{32,51,-74}, -{32,51,-73}, -{32,51,-72}, -{32,51,-71}, -{32,51,-70}, -{32,51,-69}, -{32,51,-68}, -{32,51,-67}, -{32,51,-66}, -{32,51,-65}, -{32,51,-64}, -{32,51,-63}, -{32,51,-62}, -{32,51,-61}, -{32,51,-60}, -{32,51,-59}, -{32,51,-58}, -{32,51,-57}, -{32,51,-56}, -{32,51,-55}, -{32,51,-54}, -{32,51,-53}, -{32,51,-52}, -{32,51,-51}, -{32,51,-50}, -{32,51,-49}, -{32,51,-48}, -{32,51,-47}, -{32,51,-46}, -{32,51,-45}, -{32,51,-44}, -{32,51,-43}, -{32,51,-42}, -{32,51,-41}, -{32,51,-40}, -{32,51,-39}, -{32,51,-38}, -{32,51,-37}, -{32,51,-36}, -{32,51,-35}, -{32,51,-34}, -{32,51,-33}, -{32,51,-32}, -{32,51,-31}, -{32,51,-30}, -{32,51,-29}, -{32,51,-28}, -{32,51,-27}, -{32,51,-26}, -{32,51,-25}, -{32,51,-24}, -{32,51,-23}, -{32,51,-22}, -{32,51,-21}, -{32,51,-20}, -{32,51,-19}, -{32,51,-18}, -{32,51,-17}, -{32,51,-16}, -{32,51,-15}, -{32,51,-14}, -{32,51,-13}, -{32,51,-12}, -{32,51,-11}, -{32,51,-10}, -{32,51,-9}, -{32,51,-8}, -{32,51,-7}, -{32,51,-6}, -{32,51,-5}, -{32,51,-4}, -{32,51,-3}, -{32,51,-2}, -{32,51,-1}, -{32,51,0}, -{32,51,1}, -{32,51,2}, -{32,51,3}, -{32,51,4}, -{32,51,5}, -{32,51,6}, -{32,51,7}, -{32,51,8}, -{32,51,9}, -{32,51,10}, -{32,51,11}, -{32,51,12}, -{32,51,13}, -{32,51,14}, -{32,51,15}, -{32,51,16}, -{32,51,17}, -{32,51,18}, -{32,51,19}, -{32,51,20}, -{32,51,21}, -{32,51,22}, -{32,51,23}, -{32,51,24}, -{32,51,25}, -{32,51,26}, -{32,51,27}, -{32,51,28}, -{32,51,29}, -{32,51,30}, -{32,51,31}, -{32,51,32}, -{32,51,33}, -{32,51,34}, -{32,51,35}, -{32,51,36}, -{32,51,37}, -{32,51,38}, -{32,51,39}, -{32,51,40}, -{32,51,41}, -{32,51,42}, -{32,51,43}, -{32,51,44}, -{32,51,45}, -{32,52,-84}, -{32,52,-83}, -{32,52,-82}, -{32,52,-81}, -{32,52,-80}, -{32,52,-79}, -{32,52,-78}, -{32,52,-77}, -{32,52,-76}, -{32,52,-75}, -{32,52,-74}, -{32,52,-73}, -{32,52,-72}, -{32,52,-71}, -{32,52,-70}, -{32,52,-69}, -{32,52,-68}, -{32,52,-67}, -{32,52,-66}, -{32,52,-65}, -{32,52,-64}, -{32,52,-63}, -{32,52,-62}, -{32,52,-61}, -{32,52,-60}, -{32,52,-59}, -{32,52,-58}, -{32,52,-57}, -{32,52,-56}, -{32,52,-55}, -{32,52,-54}, -{32,52,-53}, -{32,52,-52}, -{32,52,-51}, -{32,52,-50}, -{32,52,-49}, -{32,52,-48}, -{32,52,-47}, -{32,52,-46}, -{32,52,-45}, -{32,52,-44}, -{32,52,-43}, -{32,52,-42}, -{32,52,-41}, -{32,52,-40}, -{32,52,-39}, -{32,52,-38}, -{32,52,-37}, -{32,52,-36}, -{32,52,-35}, -{32,52,-34}, -{32,52,-33}, -{32,52,-32}, -{32,52,-31}, -{32,52,-30}, -{32,52,-29}, -{32,52,-28}, -{32,52,-27}, -{32,52,-26}, -{32,52,-25}, -{32,52,-24}, -{32,52,-23}, -{32,52,-22}, -{32,52,-21}, -{32,52,-20}, -{32,52,-19}, -{32,52,-18}, -{32,52,-17}, -{32,52,-16}, -{32,52,-15}, -{32,52,-14}, -{32,52,-13}, -{32,52,-12}, -{32,52,-11}, -{32,52,-10}, -{32,52,-9}, -{32,52,-8}, -{32,52,-7}, -{32,52,-6}, -{32,52,-5}, -{32,52,-4}, -{32,52,-3}, -{32,52,-2}, -{32,52,-1}, -{32,52,0}, -{32,52,1}, -{32,52,2}, -{32,52,3}, -{32,52,4}, -{32,52,5}, -{32,52,6}, -{32,52,7}, -{32,52,8}, -{32,52,9}, -{32,52,10}, -{32,52,11}, -{32,52,12}, -{32,52,13}, -{32,52,14}, -{32,52,15}, -{32,52,16}, -{32,52,17}, -{32,52,18}, -{32,52,19}, -{32,52,20}, -{32,52,21}, -{32,52,22}, -{32,52,23}, -{32,52,24}, -{32,52,25}, -{32,52,26}, -{32,52,27}, -{32,52,28}, -{32,52,29}, -{32,52,30}, -{32,52,31}, -{32,52,32}, -{32,52,33}, -{32,52,34}, -{32,52,35}, -{32,52,36}, -{32,52,37}, -{32,52,38}, -{32,52,39}, -{32,52,40}, -{32,52,41}, -{32,52,42}, -{32,52,43}, -{32,52,44}, -{32,52,45}, -{32,53,-85}, -{32,53,-84}, -{32,53,-83}, -{32,53,-82}, -{32,53,-81}, -{32,53,-80}, -{32,53,-79}, -{32,53,-78}, -{32,53,-77}, -{32,53,-76}, -{32,53,-75}, -{32,53,-74}, -{32,53,-73}, -{32,53,-72}, -{32,53,-71}, -{32,53,-70}, -{32,53,-69}, -{32,53,-68}, -{32,53,-67}, -{32,53,-66}, -{32,53,-65}, -{32,53,-64}, -{32,53,-63}, -{32,53,-62}, -{32,53,-61}, -{32,53,-60}, -{32,53,-59}, -{32,53,-58}, -{32,53,-57}, -{32,53,-56}, -{32,53,-55}, -{32,53,-54}, -{32,53,-53}, -{32,53,-52}, -{32,53,-51}, -{32,53,-50}, -{32,53,-49}, -{32,53,-48}, -{32,53,-47}, -{32,53,-46}, -{32,53,-45}, -{32,53,-44}, -{32,53,-43}, -{32,53,-42}, -{32,53,-41}, -{32,53,-40}, -{32,53,-39}, -{32,53,-38}, -{32,53,-37}, -{32,53,-36}, -{32,53,-35}, -{32,53,-34}, -{32,53,-33}, -{32,53,-32}, -{32,53,-31}, -{32,53,-30}, -{32,53,-29}, -{32,53,-28}, -{32,53,-27}, -{32,53,-26}, -{32,53,-25}, -{32,53,-24}, -{32,53,-23}, -{32,53,-22}, -{32,53,-21}, -{32,53,-20}, -{32,53,-19}, -{32,53,-18}, -{32,53,-17}, -{32,53,-16}, -{32,53,-15}, -{32,53,-14}, -{32,53,-13}, -{32,53,-12}, -{32,53,-11}, -{32,53,-10}, -{32,53,-9}, -{32,53,-8}, -{32,53,-7}, -{32,53,-6}, -{32,53,-5}, -{32,53,-4}, -{32,53,-3}, -{32,53,-2}, -{32,53,-1}, -{32,53,0}, -{32,53,1}, -{32,53,2}, -{32,53,3}, -{32,53,4}, -{32,53,5}, -{32,53,6}, -{32,53,7}, -{32,53,8}, -{32,53,9}, -{32,53,10}, -{32,53,11}, -{32,53,12}, -{32,53,13}, -{32,53,14}, -{32,53,15}, -{32,53,16}, -{32,53,17}, -{32,53,18}, -{32,53,19}, -{32,53,20}, -{32,53,21}, -{32,53,22}, -{32,53,23}, -{32,53,24}, -{32,53,25}, -{32,53,26}, -{32,53,27}, -{32,53,28}, -{32,53,29}, -{32,53,30}, -{32,53,31}, -{32,53,32}, -{32,53,33}, -{32,53,34}, -{32,53,35}, -{32,53,36}, -{32,53,37}, -{32,53,38}, -{32,53,39}, -{32,53,40}, -{32,53,41}, -{32,53,42}, -{32,53,43}, -{32,53,44}, -{32,53,45}, -{32,54,-86}, -{32,54,-85}, -{32,54,-84}, -{32,54,-83}, -{32,54,-82}, -{32,54,-81}, -{32,54,-80}, -{32,54,-79}, -{32,54,-78}, -{32,54,-77}, -{32,54,-76}, -{32,54,-75}, -{32,54,-74}, -{32,54,-73}, -{32,54,-72}, -{32,54,-71}, -{32,54,-70}, -{32,54,-69}, -{32,54,-68}, -{32,54,-67}, -{32,54,-66}, -{32,54,-65}, -{32,54,-64}, -{32,54,-63}, -{32,54,-62}, -{32,54,-61}, -{32,54,-60}, -{32,54,-59}, -{32,54,-58}, -{32,54,-57}, -{32,54,-56}, -{32,54,-55}, -{32,54,-54}, -{32,54,-53}, -{32,54,-52}, -{32,54,-51}, -{32,54,-50}, -{32,54,-49}, -{32,54,-48}, -{32,54,-47}, -{32,54,-46}, -{32,54,-45}, -{32,54,-44}, -{32,54,-43}, -{32,54,-42}, -{32,54,-41}, -{32,54,-40}, -{32,54,-39}, -{32,54,-38}, -{32,54,-37}, -{32,54,-36}, -{32,54,-35}, -{32,54,-34}, -{32,54,-33}, -{32,54,-32}, -{32,54,-31}, -{32,54,-30}, -{32,54,-29}, -{32,54,-28}, -{32,54,-27}, -{32,54,-26}, -{32,54,-25}, -{32,54,-24}, -{32,54,-23}, -{32,54,-22}, -{32,54,-21}, -{32,54,-20}, -{32,54,-19}, -{32,54,-18}, -{32,54,-17}, -{32,54,-16}, -{32,54,-15}, -{32,54,-14}, -{32,54,-13}, -{32,54,-12}, -{32,54,-11}, -{32,54,-10}, -{32,54,-9}, -{32,54,-8}, -{32,54,-7}, -{32,54,-6}, -{32,54,-5}, -{32,54,-4}, -{32,54,-3}, -{32,54,-2}, -{32,54,-1}, -{32,54,0}, -{32,54,1}, -{32,54,2}, -{32,54,3}, -{32,54,4}, -{32,54,5}, -{32,54,6}, -{32,54,7}, -{32,54,8}, -{32,54,9}, -{32,54,10}, -{32,54,11}, -{32,54,12}, -{32,54,13}, -{32,54,14}, -{32,54,15}, -{32,54,16}, -{32,54,17}, -{32,54,18}, -{32,54,19}, -{32,54,20}, -{32,54,21}, -{32,54,22}, -{32,54,23}, -{32,54,24}, -{32,54,25}, -{32,54,26}, -{32,54,27}, -{32,54,28}, -{32,54,29}, -{32,54,30}, -{32,54,31}, -{32,54,32}, -{32,54,33}, -{32,54,34}, -{32,54,35}, -{32,54,36}, -{32,54,37}, -{32,54,38}, -{32,54,39}, -{32,54,40}, -{32,54,41}, -{32,54,42}, -{32,54,43}, -{32,54,44}, -{32,54,45}, -{32,55,-87}, -{32,55,-86}, -{32,55,-85}, -{32,55,-84}, -{32,55,-83}, -{32,55,-82}, -{32,55,-81}, -{32,55,-80}, -{32,55,-79}, -{32,55,-78}, -{32,55,-77}, -{32,55,-76}, -{32,55,-75}, -{32,55,-74}, -{32,55,-73}, -{32,55,-72}, -{32,55,-71}, -{32,55,-70}, -{32,55,-69}, -{32,55,-68}, -{32,55,-67}, -{32,55,-66}, -{32,55,-65}, -{32,55,-64}, -{32,55,-63}, -{32,55,-62}, -{32,55,-61}, -{32,55,-60}, -{32,55,-59}, -{32,55,-58}, -{32,55,-57}, -{32,55,-56}, -{32,55,-55}, -{32,55,-54}, -{32,55,-53}, -{32,55,-52}, -{32,55,-51}, -{32,55,-50}, -{32,55,-49}, -{32,55,-48}, -{32,55,-47}, -{32,55,-46}, -{32,55,-45}, -{32,55,-44}, -{32,55,-43}, -{32,55,-42}, -{32,55,-41}, -{32,55,-40}, -{32,55,-39}, -{32,55,-38}, -{32,55,-37}, -{32,55,-36}, -{32,55,-35}, -{32,55,-34}, -{32,55,-33}, -{32,55,-32}, -{32,55,-31}, -{32,55,-30}, -{32,55,-29}, -{32,55,-28}, -{32,55,-27}, -{32,55,-26}, -{32,55,-25}, -{32,55,-24}, -{32,55,-23}, -{32,55,-22}, -{32,55,-21}, -{32,55,-20}, -{32,55,-19}, -{32,55,-18}, -{32,55,-17}, -{32,55,-16}, -{32,55,-15}, -{32,55,-14}, -{32,55,-13}, -{32,55,-12}, -{32,55,-11}, -{32,55,-10}, -{32,55,-9}, -{32,55,-8}, -{32,55,-7}, -{32,55,-6}, -{32,55,-5}, -{32,55,-4}, -{32,55,-3}, -{32,55,-2}, -{32,55,-1}, -{32,55,0}, -{32,55,1}, -{32,55,2}, -{32,55,3}, -{32,55,4}, -{32,55,5}, -{32,55,6}, -{32,55,7}, -{32,55,8}, -{32,55,9}, -{32,55,10}, -{32,55,11}, -{32,55,12}, -{32,55,13}, -{32,55,14}, -{32,55,15}, -{32,55,16}, -{32,55,17}, -{32,55,18}, -{32,55,19}, -{32,55,20}, -{32,55,21}, -{32,55,22}, -{32,55,23}, -{32,55,24}, -{32,55,25}, -{32,55,26}, -{32,55,27}, -{32,55,28}, -{32,55,29}, -{32,55,30}, -{32,55,31}, -{32,55,32}, -{32,55,33}, -{32,55,34}, -{32,55,35}, -{32,55,36}, -{32,55,37}, -{32,55,38}, -{32,55,39}, -{32,55,40}, -{32,55,41}, -{32,55,42}, -{32,55,43}, -{32,55,44}, -{32,55,45}, -{32,55,46}, -{32,56,-88}, -{32,56,-87}, -{32,56,-86}, -{32,56,-85}, -{32,56,-84}, -{32,56,-83}, -{32,56,-82}, -{32,56,-81}, -{32,56,-80}, -{32,56,-79}, -{32,56,-78}, -{32,56,-77}, -{32,56,-76}, -{32,56,-75}, -{32,56,-74}, -{32,56,-73}, -{32,56,-72}, -{32,56,-71}, -{32,56,-70}, -{32,56,-69}, -{32,56,-68}, -{32,56,-67}, -{32,56,-66}, -{32,56,-65}, -{32,56,-64}, -{32,56,-63}, -{32,56,-62}, -{32,56,-61}, -{32,56,-60}, -{32,56,-59}, -{32,56,-58}, -{32,56,-57}, -{32,56,-56}, -{32,56,-55}, -{32,56,-54}, -{32,56,-53}, -{32,56,-52}, -{32,56,-51}, -{32,56,-50}, -{32,56,-49}, -{32,56,-48}, -{32,56,-47}, -{32,56,-46}, -{32,56,-45}, -{32,56,-44}, -{32,56,-43}, -{32,56,-42}, -{32,56,-41}, -{32,56,-40}, -{32,56,-39}, -{32,56,-38}, -{32,56,-37}, -{32,56,-36}, -{32,56,-35}, -{32,56,-34}, -{32,56,-33}, -{32,56,-32}, -{32,56,-31}, -{32,56,-30}, -{32,56,-29}, -{32,56,-28}, -{32,56,-27}, -{32,56,-26}, -{32,56,-25}, -{32,56,-24}, -{32,56,-23}, -{32,56,-22}, -{32,56,-21}, -{32,56,-20}, -{32,56,-19}, -{32,56,-18}, -{32,56,-17}, -{32,56,-16}, -{32,56,-15}, -{32,56,-14}, -{32,56,-13}, -{32,56,-12}, -{32,56,-11}, -{32,56,-10}, -{32,56,-9}, -{32,56,-8}, -{32,56,-7}, -{32,56,-6}, -{32,56,-5}, -{32,56,-4}, -{32,56,-3}, -{32,56,-2}, -{32,56,-1}, -{32,56,0}, -{32,56,1}, -{32,56,2}, -{32,56,3}, -{32,56,4}, -{32,56,5}, -{32,56,6}, -{32,56,7}, -{32,56,8}, -{32,56,9}, -{32,56,10}, -{32,56,11}, -{32,56,12}, -{32,56,13}, -{32,56,14}, -{32,56,15}, -{32,56,16}, -{32,56,17}, -{32,56,18}, -{32,56,19}, -{32,56,20}, -{32,56,21}, -{32,56,22}, -{32,56,23}, -{32,56,24}, -{32,56,25}, -{32,56,26}, -{32,56,27}, -{32,56,28}, -{32,56,29}, -{32,56,30}, -{32,56,31}, -{32,56,32}, -{32,57,-89}, -{32,57,-88}, -{32,57,-87}, -{32,57,-86}, -{32,57,-85}, -{32,57,-84}, -{32,57,-83}, -{32,57,-82}, -{32,57,-81}, -{32,57,-80}, -{32,57,-79}, -{32,57,-78}, -{32,57,-77}, -{32,57,-76}, -{32,57,-75}, -{32,57,-74}, -{32,57,-73}, -{32,57,-72}, -{32,57,-71}, -{32,57,-70}, -{32,57,-69}, -{32,57,-68}, -{32,57,-67}, -{32,57,-66}, -{32,57,-65}, -{32,57,-64}, -{32,57,-63}, -{32,57,-62}, -{32,57,-61}, -{32,57,-60}, -{32,57,-59}, -{32,57,-58}, -{32,57,-57}, -{32,57,-56}, -{32,57,-55}, -{32,57,-54}, -{32,57,-53}, -{32,57,-52}, -{32,57,-51}, -{32,57,-50}, -{32,57,-49}, -{32,57,-48}, -{32,57,-47}, -{32,57,-46}, -{32,57,-45}, -{32,57,-44}, -{32,57,-43}, -{32,57,-42}, -{32,57,-41}, -{32,57,-40}, -{32,57,-39}, -{32,57,-38}, -{32,57,-37}, -{32,57,-36}, -{32,57,-35}, -{32,57,-34}, -{32,57,-33}, -{32,57,-32}, -{32,57,-31}, -{32,57,-30}, -{32,57,-29}, -{32,57,-28}, -{32,57,-27}, -{32,57,-26}, -{32,57,-25}, -{32,57,-24}, -{32,57,-23}, -{32,57,-22}, -{32,57,-21}, -{32,57,-20}, -{32,57,-19}, -{32,57,-18}, -{32,57,-17}, -{32,57,-16}, -{32,57,-15}, -{32,57,-14}, -{32,57,-13}, -{32,57,-12}, -{32,57,-11}, -{32,57,-10}, -{32,57,-9}, -{32,57,-8}, -{32,57,-7}, -{32,57,-6}, -{32,57,-5}, -{32,57,-4}, -{32,57,-3}, -{32,57,-2}, -{32,57,-1}, -{32,57,0}, -{32,57,1}, -{32,57,2}, -{32,57,3}, -{32,57,4}, -{32,57,5}, -{32,57,6}, -{32,57,7}, -{32,57,8}, -{32,57,9}, -{32,58,-90}, -{32,58,-89}, -{32,58,-88}, -{32,58,-87}, -{32,58,-86}, -{32,58,-85}, -{32,58,-84}, -{32,58,-83}, -{32,58,-82}, -{32,58,-81}, -{32,58,-80}, -{32,58,-79}, -{32,58,-78}, -{32,58,-77}, -{32,58,-76}, -{32,58,-75}, -{32,58,-74}, -{32,58,-73}, -{32,58,-72}, -{32,58,-71}, -{32,58,-70}, -{32,58,-69}, -{32,58,-68}, -{32,58,-67}, -{32,58,-66}, -{32,58,-65}, -{32,58,-64}, -{32,58,-63}, -{32,58,-62}, -{32,58,-61}, -{32,58,-60}, -{32,58,-59}, -{32,58,-58}, -{32,58,-57}, -{32,58,-56}, -{32,58,-55}, -{32,58,-54}, -{32,58,-53}, -{32,58,-52}, -{32,58,-51}, -{32,58,-50}, -{32,58,-49}, -{32,58,-48}, -{32,58,-47}, -{32,58,-46}, -{32,58,-45}, -{32,58,-44}, -{32,58,-43}, -{32,58,-42}, -{32,58,-41}, -{32,58,-40}, -{32,58,-39}, -{32,58,-38}, -{32,58,-37}, -{32,58,-36}, -{32,58,-35}, -{32,58,-34}, -{32,58,-33}, -{32,58,-32}, -{32,58,-31}, -{32,58,-30}, -{32,58,-29}, -{32,58,-28}, -{32,58,-27}, -{32,58,-26}, -{32,58,-25}, -{32,58,-24}, -{32,58,-23}, -{32,58,-22}, -{32,58,-21}, -{32,58,-20}, -{32,58,-19}, -{32,58,-18}, -{32,58,-17}, -{32,58,-16}, -{32,58,-15}, -{32,58,-14}, -{32,58,-13}, -{32,58,-12}, -{32,58,-11}, -{32,58,-10}, -{32,58,-9}, -{32,58,-8}, -{32,58,-7}, -{32,58,-6}, -{32,58,-5}, -{32,59,-90}, -{32,59,-89}, -{32,59,-88}, -{32,59,-87}, -{32,59,-86}, -{32,59,-85}, -{32,59,-84}, -{32,59,-83}, -{32,59,-82}, -{32,59,-81}, -{32,59,-80}, -{32,59,-79}, -{32,59,-78}, -{32,59,-77}, -{32,59,-76}, -{32,59,-75}, -{32,59,-74}, -{32,59,-73}, -{32,59,-72}, -{32,59,-71}, -{32,59,-70}, -{32,59,-69}, -{32,59,-68}, -{32,59,-67}, -{32,59,-66}, -{32,59,-65}, -{32,59,-64}, -{32,59,-63}, -{32,59,-62}, -{32,59,-61}, -{32,59,-60}, -{32,59,-59}, -{32,59,-58}, -{32,59,-57}, -{32,59,-56}, -{32,59,-55}, -{32,59,-54}, -{32,59,-53}, -{32,59,-52}, -{32,59,-51}, -{32,59,-50}, -{32,59,-49}, -{32,59,-48}, -{32,59,-47}, -{32,59,-46}, -{32,59,-45}, -{32,59,-44}, -{32,59,-43}, -{32,59,-42}, -{32,59,-41}, -{32,59,-40}, -{32,59,-39}, -{32,59,-38}, -{32,59,-37}, -{32,59,-36}, -{32,59,-35}, -{32,59,-34}, -{32,59,-33}, -{32,59,-32}, -{32,59,-31}, -{32,59,-30}, -{32,59,-29}, -{32,59,-28}, -{32,59,-27}, -{32,59,-26}, -{32,59,-25}, -{32,59,-24}, -{32,59,-23}, -{32,59,-22}, -{32,59,-21}, -{32,59,-20}, -{32,59,-19}, -{32,59,-18}, -{32,59,-17}, -{32,59,-16}, -{32,60,-91}, -{32,60,-90}, -{32,60,-89}, -{32,60,-88}, -{32,60,-87}, -{32,60,-86}, -{32,60,-85}, -{32,60,-84}, -{32,60,-83}, -{32,60,-82}, -{32,60,-81}, -{32,60,-80}, -{32,60,-79}, -{32,60,-78}, -{32,60,-77}, -{32,60,-76}, -{32,60,-75}, -{32,60,-74}, -{32,60,-73}, -{32,60,-72}, -{32,60,-71}, -{32,60,-70}, -{32,60,-69}, -{32,60,-68}, -{32,60,-67}, -{32,60,-66}, -{32,60,-65}, -{32,60,-64}, -{32,60,-63}, -{32,60,-62}, -{32,60,-61}, -{32,60,-60}, -{32,60,-59}, -{32,60,-58}, -{32,60,-57}, -{32,60,-56}, -{32,60,-55}, -{32,60,-54}, -{32,60,-53}, -{32,60,-52}, -{32,60,-51}, -{32,60,-50}, -{32,60,-49}, -{32,60,-48}, -{32,60,-47}, -{32,60,-46}, -{32,60,-45}, -{32,60,-44}, -{32,60,-43}, -{32,60,-42}, -{32,60,-41}, -{32,60,-40}, -{32,60,-39}, -{32,60,-38}, -{32,60,-37}, -{32,60,-36}, -{32,60,-35}, -{32,60,-34}, -{32,60,-33}, -{32,60,-32}, -{32,60,-31}, -{32,60,-30}, -{32,60,-29}, -{32,60,-28}, -{32,60,-27}, -{32,60,-26}, -{32,60,-25}, -{32,61,-92}, -{32,61,-91}, -{32,61,-90}, -{32,61,-89}, -{32,61,-88}, -{32,61,-87}, -{32,61,-86}, -{32,61,-85}, -{32,61,-84}, -{32,61,-83}, -{32,61,-82}, -{32,61,-81}, -{32,61,-80}, -{32,61,-79}, -{32,61,-78}, -{32,61,-77}, -{32,61,-76}, -{32,61,-75}, -{32,61,-74}, -{32,61,-73}, -{32,61,-72}, -{32,61,-71}, -{32,61,-70}, -{32,61,-69}, -{32,61,-68}, -{32,61,-67}, -{32,61,-66}, -{32,61,-65}, -{32,61,-64}, -{32,61,-63}, -{32,61,-62}, -{32,61,-61}, -{32,61,-60}, -{32,61,-59}, -{32,61,-58}, -{32,61,-57}, -{32,61,-56}, -{32,61,-55}, -{32,61,-54}, -{32,61,-53}, -{32,61,-52}, -{32,61,-51}, -{32,61,-50}, -{32,61,-49}, -{32,61,-48}, -{32,61,-47}, -{32,61,-46}, -{32,61,-45}, -{32,61,-44}, -{32,61,-43}, -{32,61,-42}, -{32,61,-41}, -{32,61,-40}, -{32,61,-39}, -{32,61,-38}, -{32,61,-37}, -{32,61,-36}, -{32,61,-35}, -{32,61,-34}, -{32,61,-33}, -{32,61,-32}, -{32,62,-93}, -{32,62,-92}, -{32,62,-91}, -{32,62,-90}, -{32,62,-89}, -{32,62,-88}, -{32,62,-87}, -{32,62,-86}, -{32,62,-85}, -{32,62,-84}, -{32,62,-83}, -{32,62,-82}, -{32,62,-81}, -{32,62,-80}, -{32,62,-79}, -{32,62,-78}, -{32,62,-77}, -{32,62,-76}, -{32,62,-75}, -{32,62,-74}, -{32,62,-73}, -{32,62,-72}, -{32,62,-71}, -{32,62,-70}, -{32,62,-69}, -{32,62,-68}, -{32,62,-67}, -{32,62,-66}, -{32,62,-65}, -{32,62,-64}, -{32,62,-63}, -{32,62,-62}, -{32,62,-61}, -{32,62,-60}, -{32,62,-59}, -{32,62,-58}, -{32,62,-57}, -{32,62,-56}, -{32,62,-55}, -{32,62,-54}, -{32,62,-53}, -{32,62,-52}, -{32,62,-51}, -{32,62,-50}, -{32,62,-49}, -{32,62,-48}, -{32,62,-47}, -{32,62,-46}, -{32,62,-45}, -{32,62,-44}, -{32,62,-43}, -{32,62,-42}, -{32,62,-41}, -{32,62,-40}, -{32,62,-39}, -{32,63,-94}, -{32,63,-93}, -{32,63,-92}, -{32,63,-91}, -{32,63,-90}, -{32,63,-89}, -{32,63,-88}, -{32,63,-87}, -{32,63,-86}, -{32,63,-85}, -{32,63,-84}, -{32,63,-83}, -{32,63,-82}, -{32,63,-81}, -{32,63,-80}, -{32,63,-79}, -{32,63,-78}, -{32,63,-77}, -{32,63,-76}, -{32,63,-75}, -{32,63,-74}, -{32,63,-73}, -{32,63,-72}, -{32,63,-71}, -{32,63,-70}, -{32,63,-69}, -{32,63,-68}, -{32,63,-67}, -{32,63,-66}, -{32,63,-65}, -{32,63,-64}, -{32,63,-63}, -{32,63,-62}, -{32,63,-61}, -{32,63,-60}, -{32,63,-59}, -{32,63,-58}, -{32,63,-57}, -{32,63,-56}, -{32,63,-55}, -{32,63,-54}, -{32,63,-53}, -{32,63,-52}, -{32,63,-51}, -{32,63,-50}, -{32,63,-49}, -{32,63,-48}, -{32,63,-47}, -{32,63,-46}, -{32,63,-45}, -{32,64,-95}, -{32,64,-94}, -{32,64,-93}, -{32,64,-92}, -{32,64,-91}, -{32,64,-90}, -{32,64,-89}, -{32,64,-88}, -{32,64,-87}, -{32,64,-86}, -{32,64,-85}, -{32,64,-84}, -{32,64,-83}, -{32,64,-82}, -{32,64,-81}, -{32,64,-80}, -{32,64,-79}, -{32,64,-78}, -{32,64,-77}, -{32,64,-76}, -{32,64,-75}, -{32,64,-74}, -{32,64,-73}, -{32,64,-72}, -{32,64,-71}, -{32,64,-70}, -{32,64,-69}, -{32,64,-68}, -{32,64,-67}, -{32,64,-66}, -{32,64,-65}, -{32,64,-64}, -{32,64,-63}, -{32,64,-62}, -{32,64,-61}, -{32,64,-60}, -{32,64,-59}, -{32,64,-58}, -{32,64,-57}, -{32,64,-56}, -{32,64,-55}, -{32,64,-54}, -{32,64,-53}, -{32,64,-52}, -{32,64,-51}, -{32,65,-95}, -{32,65,-94}, -{32,65,-93}, -{32,65,-92}, -{32,65,-91}, -{32,65,-90}, -{32,65,-89}, -{32,65,-88}, -{32,65,-87}, -{32,65,-86}, -{32,65,-85}, -{32,65,-84}, -{32,65,-83}, -{32,65,-82}, -{32,65,-81}, -{32,65,-80}, -{32,65,-79}, -{32,65,-78}, -{32,65,-77}, -{32,65,-76}, -{32,65,-75}, -{32,65,-74}, -{32,65,-73}, -{32,65,-72}, -{32,65,-71}, -{32,65,-70}, -{32,65,-69}, -{32,65,-68}, -{32,65,-67}, -{32,65,-66}, -{32,65,-65}, -{32,65,-64}, -{32,65,-63}, -{32,65,-62}, -{32,65,-61}, -{32,65,-60}, -{32,65,-59}, -{32,65,-58}, -{32,65,-57}, -{32,65,-56}, -{32,66,-96}, -{32,66,-95}, -{32,66,-94}, -{32,66,-93}, -{32,66,-92}, -{32,66,-91}, -{32,66,-90}, -{32,66,-89}, -{32,66,-88}, -{32,66,-87}, -{32,66,-86}, -{32,66,-85}, -{32,66,-84}, -{32,66,-83}, -{32,66,-82}, -{32,66,-81}, -{32,66,-80}, -{32,66,-79}, -{32,66,-78}, -{32,66,-77}, -{32,66,-76}, -{32,66,-75}, -{32,66,-74}, -{32,66,-73}, -{32,66,-72}, -{32,66,-71}, -{32,66,-70}, -{32,66,-69}, -{32,66,-68}, -{32,66,-67}, -{32,66,-66}, -{32,66,-65}, -{32,66,-64}, -{32,66,-63}, -{32,66,-62}, -{32,66,-61}, -{32,67,-97}, -{32,67,-96}, -{32,67,-95}, -{32,67,-94}, -{32,67,-93}, -{32,67,-92}, -{32,67,-91}, -{32,67,-90}, -{32,67,-89}, -{32,67,-88}, -{32,67,-87}, -{32,67,-86}, -{32,67,-85}, -{32,67,-84}, -{32,67,-83}, -{32,67,-82}, -{32,67,-81}, -{32,67,-80}, -{32,67,-79}, -{32,67,-78}, -{32,67,-77}, -{32,67,-76}, -{32,67,-75}, -{32,67,-74}, -{32,67,-73}, -{32,67,-72}, -{32,67,-71}, -{32,67,-70}, -{32,67,-69}, -{32,67,-68}, -{32,67,-67}, -{32,67,-66}, -{32,68,-98}, -{32,68,-97}, -{32,68,-96}, -{32,68,-95}, -{32,68,-94}, -{32,68,-93}, -{32,68,-92}, -{32,68,-91}, -{32,68,-90}, -{32,68,-89}, -{32,68,-88}, -{32,68,-87}, -{32,68,-86}, -{32,68,-85}, -{32,68,-84}, -{32,68,-83}, -{32,68,-82}, -{32,68,-81}, -{32,68,-80}, -{32,68,-79}, -{32,68,-78}, -{32,68,-77}, -{32,68,-76}, -{32,68,-75}, -{32,68,-74}, -{32,68,-73}, -{32,68,-72}, -{32,68,-71}, -{32,68,-70}, -{32,69,-99}, -{32,69,-98}, -{32,69,-97}, -{32,69,-96}, -{32,69,-95}, -{32,69,-94}, -{32,69,-93}, -{32,69,-92}, -{32,69,-91}, -{32,69,-90}, -{32,69,-89}, -{32,69,-88}, -{32,69,-87}, -{32,69,-86}, -{32,69,-85}, -{32,69,-84}, -{32,69,-83}, -{32,69,-82}, -{32,69,-81}, -{32,69,-80}, -{32,69,-79}, -{32,69,-78}, -{32,69,-77}, -{32,69,-76}, -{32,69,-75}, -{32,69,-74}, -{32,70,-100}, -{32,70,-99}, -{32,70,-98}, -{32,70,-97}, -{32,70,-96}, -{32,70,-95}, -{32,70,-94}, -{32,70,-93}, -{32,70,-92}, -{32,70,-91}, -{32,70,-90}, -{32,70,-89}, -{32,70,-88}, -{32,70,-87}, -{32,70,-86}, -{32,70,-85}, -{32,70,-84}, -{32,70,-83}, -{32,70,-82}, -{32,70,-81}, -{32,70,-80}, -{32,70,-79}, -{32,70,-78}, -{32,71,-101}, -{32,71,-100}, -{32,71,-99}, -{32,71,-98}, -{32,71,-97}, -{32,71,-96}, -{32,71,-95}, -{32,71,-94}, -{32,71,-93}, -{32,71,-92}, -{32,71,-91}, -{32,71,-90}, -{32,71,-89}, -{32,71,-88}, -{32,71,-87}, -{32,71,-86}, -{32,71,-85}, -{32,71,-84}, -{32,71,-83}, -{32,71,-82}, -{32,72,-101}, -{32,72,-100}, -{32,72,-99}, -{32,72,-98}, -{32,72,-97}, -{32,72,-96}, -{32,72,-95}, -{32,72,-94}, -{32,72,-93}, -{32,72,-92}, -{32,72,-91}, -{32,72,-90}, -{32,72,-89}, -{32,72,-88}, -{32,72,-87}, -{32,72,-86}, -{32,73,-102}, -{32,73,-101}, -{32,73,-100}, -{32,73,-99}, -{32,73,-98}, -{32,73,-97}, -{32,73,-96}, -{32,73,-95}, -{32,73,-94}, -{32,73,-93}, -{32,73,-92}, -{32,73,-91}, -{32,73,-90}, -{32,73,-89}, -{32,74,-103}, -{32,74,-102}, -{32,74,-101}, -{32,74,-100}, -{32,74,-99}, -{32,74,-98}, -{32,74,-97}, -{32,74,-96}, -{32,74,-95}, -{32,74,-94}, -{32,74,-93}, -{32,75,-104}, -{32,75,-103}, -{32,75,-102}, -{32,75,-101}, -{32,75,-100}, -{32,75,-99}, -{32,75,-98}, -{32,75,-97}, -{32,75,-96}, -{32,76,-105}, -{32,76,-104}, -{32,76,-103}, -{32,76,-102}, -{32,76,-101}, -{32,76,-100}, -{32,76,-99}, -{32,77,-105}, -{32,77,-104}, -{32,77,-103}, -{32,77,-102}, -{32,78,-106}, -{32,78,-105}, -{33,-40,36}, -{33,-40,37}, -{33,-40,38}, -{33,-40,39}, -{33,-39,32}, -{33,-39,33}, -{33,-39,34}, -{33,-39,35}, -{33,-39,36}, -{33,-39,37}, -{33,-39,38}, -{33,-39,39}, -{33,-38,28}, -{33,-38,29}, -{33,-38,30}, -{33,-38,31}, -{33,-38,32}, -{33,-38,33}, -{33,-38,34}, -{33,-38,35}, -{33,-38,36}, -{33,-38,37}, -{33,-38,38}, -{33,-38,39}, -{33,-37,25}, -{33,-37,26}, -{33,-37,27}, -{33,-37,28}, -{33,-37,29}, -{33,-37,30}, -{33,-37,31}, -{33,-37,32}, -{33,-37,33}, -{33,-37,34}, -{33,-37,35}, -{33,-37,36}, -{33,-37,37}, -{33,-37,38}, -{33,-37,39}, -{33,-36,22}, -{33,-36,23}, -{33,-36,24}, -{33,-36,25}, -{33,-36,26}, -{33,-36,27}, -{33,-36,28}, -{33,-36,29}, -{33,-36,30}, -{33,-36,31}, -{33,-36,32}, -{33,-36,33}, -{33,-36,34}, -{33,-36,35}, -{33,-36,36}, -{33,-36,37}, -{33,-36,38}, -{33,-36,39}, -{33,-35,19}, -{33,-35,20}, -{33,-35,21}, -{33,-35,22}, -{33,-35,23}, -{33,-35,24}, -{33,-35,25}, -{33,-35,26}, -{33,-35,27}, -{33,-35,28}, -{33,-35,29}, -{33,-35,30}, -{33,-35,31}, -{33,-35,32}, -{33,-35,33}, -{33,-35,34}, -{33,-35,35}, -{33,-35,36}, -{33,-35,37}, -{33,-35,38}, -{33,-35,39}, -{33,-34,17}, -{33,-34,18}, -{33,-34,19}, -{33,-34,20}, -{33,-34,21}, -{33,-34,22}, -{33,-34,23}, -{33,-34,24}, -{33,-34,25}, -{33,-34,26}, -{33,-34,27}, -{33,-34,28}, -{33,-34,29}, -{33,-34,30}, -{33,-34,31}, -{33,-34,32}, -{33,-34,33}, -{33,-34,34}, -{33,-34,35}, -{33,-34,36}, -{33,-34,37}, -{33,-34,38}, -{33,-34,39}, -{33,-33,14}, -{33,-33,15}, -{33,-33,16}, -{33,-33,17}, -{33,-33,18}, -{33,-33,19}, -{33,-33,20}, -{33,-33,21}, -{33,-33,22}, -{33,-33,23}, -{33,-33,24}, -{33,-33,25}, -{33,-33,26}, -{33,-33,27}, -{33,-33,28}, -{33,-33,29}, -{33,-33,30}, -{33,-33,31}, -{33,-33,32}, -{33,-33,33}, -{33,-33,34}, -{33,-33,35}, -{33,-33,36}, -{33,-33,37}, -{33,-33,38}, -{33,-33,39}, -{33,-32,12}, -{33,-32,13}, -{33,-32,14}, -{33,-32,15}, -{33,-32,16}, -{33,-32,17}, -{33,-32,18}, -{33,-32,19}, -{33,-32,20}, -{33,-32,21}, -{33,-32,22}, -{33,-32,23}, -{33,-32,24}, -{33,-32,25}, -{33,-32,26}, -{33,-32,27}, -{33,-32,28}, -{33,-32,29}, -{33,-32,30}, -{33,-32,31}, -{33,-32,32}, -{33,-32,33}, -{33,-32,34}, -{33,-32,35}, -{33,-32,36}, -{33,-32,37}, -{33,-32,38}, -{33,-32,39}, -{33,-31,10}, -{33,-31,11}, -{33,-31,12}, -{33,-31,13}, -{33,-31,14}, -{33,-31,15}, -{33,-31,16}, -{33,-31,17}, -{33,-31,18}, -{33,-31,19}, -{33,-31,20}, -{33,-31,21}, -{33,-31,22}, -{33,-31,23}, -{33,-31,24}, -{33,-31,25}, -{33,-31,26}, -{33,-31,27}, -{33,-31,28}, -{33,-31,29}, -{33,-31,30}, -{33,-31,31}, -{33,-31,32}, -{33,-31,33}, -{33,-31,34}, -{33,-31,35}, -{33,-31,36}, -{33,-31,37}, -{33,-31,38}, -{33,-31,39}, -{33,-30,8}, -{33,-30,9}, -{33,-30,10}, -{33,-30,11}, -{33,-30,12}, -{33,-30,13}, -{33,-30,14}, -{33,-30,15}, -{33,-30,16}, -{33,-30,17}, -{33,-30,18}, -{33,-30,19}, -{33,-30,20}, -{33,-30,21}, -{33,-30,22}, -{33,-30,23}, -{33,-30,24}, -{33,-30,25}, -{33,-30,26}, -{33,-30,27}, -{33,-30,28}, -{33,-30,29}, -{33,-30,30}, -{33,-30,31}, -{33,-30,32}, -{33,-30,33}, -{33,-30,34}, -{33,-30,35}, -{33,-30,36}, -{33,-30,37}, -{33,-30,38}, -{33,-30,39}, -{33,-29,6}, -{33,-29,7}, -{33,-29,8}, -{33,-29,9}, -{33,-29,10}, -{33,-29,11}, -{33,-29,12}, -{33,-29,13}, -{33,-29,14}, -{33,-29,15}, -{33,-29,16}, -{33,-29,17}, -{33,-29,18}, -{33,-29,19}, -{33,-29,20}, -{33,-29,21}, -{33,-29,22}, -{33,-29,23}, -{33,-29,24}, -{33,-29,25}, -{33,-29,26}, -{33,-29,27}, -{33,-29,28}, -{33,-29,29}, -{33,-29,30}, -{33,-29,31}, -{33,-29,32}, -{33,-29,33}, -{33,-29,34}, -{33,-29,35}, -{33,-29,36}, -{33,-29,37}, -{33,-29,38}, -{33,-29,39}, -{33,-28,4}, -{33,-28,5}, -{33,-28,6}, -{33,-28,7}, -{33,-28,8}, -{33,-28,9}, -{33,-28,10}, -{33,-28,11}, -{33,-28,12}, -{33,-28,13}, -{33,-28,14}, -{33,-28,15}, -{33,-28,16}, -{33,-28,17}, -{33,-28,18}, -{33,-28,19}, -{33,-28,20}, -{33,-28,21}, -{33,-28,22}, -{33,-28,23}, -{33,-28,24}, -{33,-28,25}, -{33,-28,26}, -{33,-28,27}, -{33,-28,28}, -{33,-28,29}, -{33,-28,30}, -{33,-28,31}, -{33,-28,32}, -{33,-28,33}, -{33,-28,34}, -{33,-28,35}, -{33,-28,36}, -{33,-28,37}, -{33,-28,38}, -{33,-28,39}, -{33,-28,40}, -{33,-27,2}, -{33,-27,3}, -{33,-27,4}, -{33,-27,5}, -{33,-27,6}, -{33,-27,7}, -{33,-27,8}, -{33,-27,9}, -{33,-27,10}, -{33,-27,11}, -{33,-27,12}, -{33,-27,13}, -{33,-27,14}, -{33,-27,15}, -{33,-27,16}, -{33,-27,17}, -{33,-27,18}, -{33,-27,19}, -{33,-27,20}, -{33,-27,21}, -{33,-27,22}, -{33,-27,23}, -{33,-27,24}, -{33,-27,25}, -{33,-27,26}, -{33,-27,27}, -{33,-27,28}, -{33,-27,29}, -{33,-27,30}, -{33,-27,31}, -{33,-27,32}, -{33,-27,33}, -{33,-27,34}, -{33,-27,35}, -{33,-27,36}, -{33,-27,37}, -{33,-27,38}, -{33,-27,39}, -{33,-27,40}, -{33,-26,0}, -{33,-26,1}, -{33,-26,2}, -{33,-26,3}, -{33,-26,4}, -{33,-26,5}, -{33,-26,6}, -{33,-26,7}, -{33,-26,8}, -{33,-26,9}, -{33,-26,10}, -{33,-26,11}, -{33,-26,12}, -{33,-26,13}, -{33,-26,14}, -{33,-26,15}, -{33,-26,16}, -{33,-26,17}, -{33,-26,18}, -{33,-26,19}, -{33,-26,20}, -{33,-26,21}, -{33,-26,22}, -{33,-26,23}, -{33,-26,24}, -{33,-26,25}, -{33,-26,26}, -{33,-26,27}, -{33,-26,28}, -{33,-26,29}, -{33,-26,30}, -{33,-26,31}, -{33,-26,32}, -{33,-26,33}, -{33,-26,34}, -{33,-26,35}, -{33,-26,36}, -{33,-26,37}, -{33,-26,38}, -{33,-26,39}, -{33,-26,40}, -{33,-25,-1}, -{33,-25,0}, -{33,-25,1}, -{33,-25,2}, -{33,-25,3}, -{33,-25,4}, -{33,-25,5}, -{33,-25,6}, -{33,-25,7}, -{33,-25,8}, -{33,-25,9}, -{33,-25,10}, -{33,-25,11}, -{33,-25,12}, -{33,-25,13}, -{33,-25,14}, -{33,-25,15}, -{33,-25,16}, -{33,-25,17}, -{33,-25,18}, -{33,-25,19}, -{33,-25,20}, -{33,-25,21}, -{33,-25,22}, -{33,-25,23}, -{33,-25,24}, -{33,-25,25}, -{33,-25,26}, -{33,-25,27}, -{33,-25,28}, -{33,-25,29}, -{33,-25,30}, -{33,-25,31}, -{33,-25,32}, -{33,-25,33}, -{33,-25,34}, -{33,-25,35}, -{33,-25,36}, -{33,-25,37}, -{33,-25,38}, -{33,-25,39}, -{33,-25,40}, -{33,-24,-3}, -{33,-24,-2}, -{33,-24,-1}, -{33,-24,0}, -{33,-24,1}, -{33,-24,2}, -{33,-24,3}, -{33,-24,4}, -{33,-24,5}, -{33,-24,6}, -{33,-24,7}, -{33,-24,8}, -{33,-24,9}, -{33,-24,10}, -{33,-24,11}, -{33,-24,12}, -{33,-24,13}, -{33,-24,14}, -{33,-24,15}, -{33,-24,16}, -{33,-24,17}, -{33,-24,18}, -{33,-24,19}, -{33,-24,20}, -{33,-24,21}, -{33,-24,22}, -{33,-24,23}, -{33,-24,24}, -{33,-24,25}, -{33,-24,26}, -{33,-24,27}, -{33,-24,28}, -{33,-24,29}, -{33,-24,30}, -{33,-24,31}, -{33,-24,32}, -{33,-24,33}, -{33,-24,34}, -{33,-24,35}, -{33,-24,36}, -{33,-24,37}, -{33,-24,38}, -{33,-24,39}, -{33,-24,40}, -{33,-23,-5}, -{33,-23,-4}, -{33,-23,-3}, -{33,-23,-2}, -{33,-23,-1}, -{33,-23,0}, -{33,-23,1}, -{33,-23,2}, -{33,-23,3}, -{33,-23,4}, -{33,-23,5}, -{33,-23,6}, -{33,-23,7}, -{33,-23,8}, -{33,-23,9}, -{33,-23,10}, -{33,-23,11}, -{33,-23,12}, -{33,-23,13}, -{33,-23,14}, -{33,-23,15}, -{33,-23,16}, -{33,-23,17}, -{33,-23,18}, -{33,-23,19}, -{33,-23,20}, -{33,-23,21}, -{33,-23,22}, -{33,-23,23}, -{33,-23,24}, -{33,-23,25}, -{33,-23,26}, -{33,-23,27}, -{33,-23,28}, -{33,-23,29}, -{33,-23,30}, -{33,-23,31}, -{33,-23,32}, -{33,-23,33}, -{33,-23,34}, -{33,-23,35}, -{33,-23,36}, -{33,-23,37}, -{33,-23,38}, -{33,-23,39}, -{33,-23,40}, -{33,-22,-6}, -{33,-22,-5}, -{33,-22,-4}, -{33,-22,-3}, -{33,-22,-2}, -{33,-22,-1}, -{33,-22,0}, -{33,-22,1}, -{33,-22,2}, -{33,-22,3}, -{33,-22,4}, -{33,-22,5}, -{33,-22,6}, -{33,-22,7}, -{33,-22,8}, -{33,-22,9}, -{33,-22,10}, -{33,-22,11}, -{33,-22,12}, -{33,-22,13}, -{33,-22,14}, -{33,-22,15}, -{33,-22,16}, -{33,-22,17}, -{33,-22,18}, -{33,-22,19}, -{33,-22,20}, -{33,-22,21}, -{33,-22,22}, -{33,-22,23}, -{33,-22,24}, -{33,-22,25}, -{33,-22,26}, -{33,-22,27}, -{33,-22,28}, -{33,-22,29}, -{33,-22,30}, -{33,-22,31}, -{33,-22,32}, -{33,-22,33}, -{33,-22,34}, -{33,-22,35}, -{33,-22,36}, -{33,-22,37}, -{33,-22,38}, -{33,-22,39}, -{33,-22,40}, -{33,-21,-8}, -{33,-21,-7}, -{33,-21,-6}, -{33,-21,-5}, -{33,-21,-4}, -{33,-21,-3}, -{33,-21,-2}, -{33,-21,-1}, -{33,-21,0}, -{33,-21,1}, -{33,-21,2}, -{33,-21,3}, -{33,-21,4}, -{33,-21,5}, -{33,-21,6}, -{33,-21,7}, -{33,-21,8}, -{33,-21,9}, -{33,-21,10}, -{33,-21,11}, -{33,-21,12}, -{33,-21,13}, -{33,-21,14}, -{33,-21,15}, -{33,-21,16}, -{33,-21,17}, -{33,-21,18}, -{33,-21,19}, -{33,-21,20}, -{33,-21,21}, -{33,-21,22}, -{33,-21,23}, -{33,-21,24}, -{33,-21,25}, -{33,-21,26}, -{33,-21,27}, -{33,-21,28}, -{33,-21,29}, -{33,-21,30}, -{33,-21,31}, -{33,-21,32}, -{33,-21,33}, -{33,-21,34}, -{33,-21,35}, -{33,-21,36}, -{33,-21,37}, -{33,-21,38}, -{33,-21,39}, -{33,-21,40}, -{33,-20,-9}, -{33,-20,-8}, -{33,-20,-7}, -{33,-20,-6}, -{33,-20,-5}, -{33,-20,-4}, -{33,-20,-3}, -{33,-20,-2}, -{33,-20,-1}, -{33,-20,0}, -{33,-20,1}, -{33,-20,2}, -{33,-20,3}, -{33,-20,4}, -{33,-20,5}, -{33,-20,6}, -{33,-20,7}, -{33,-20,8}, -{33,-20,9}, -{33,-20,10}, -{33,-20,11}, -{33,-20,12}, -{33,-20,13}, -{33,-20,14}, -{33,-20,15}, -{33,-20,16}, -{33,-20,17}, -{33,-20,18}, -{33,-20,19}, -{33,-20,20}, -{33,-20,21}, -{33,-20,22}, -{33,-20,23}, -{33,-20,24}, -{33,-20,25}, -{33,-20,26}, -{33,-20,27}, -{33,-20,28}, -{33,-20,29}, -{33,-20,30}, -{33,-20,31}, -{33,-20,32}, -{33,-20,33}, -{33,-20,34}, -{33,-20,35}, -{33,-20,36}, -{33,-20,37}, -{33,-20,38}, -{33,-20,39}, -{33,-20,40}, -{33,-19,-11}, -{33,-19,-10}, -{33,-19,-9}, -{33,-19,-8}, -{33,-19,-7}, -{33,-19,-6}, -{33,-19,-5}, -{33,-19,-4}, -{33,-19,-3}, -{33,-19,-2}, -{33,-19,-1}, -{33,-19,0}, -{33,-19,1}, -{33,-19,2}, -{33,-19,3}, -{33,-19,4}, -{33,-19,5}, -{33,-19,6}, -{33,-19,7}, -{33,-19,8}, -{33,-19,9}, -{33,-19,10}, -{33,-19,11}, -{33,-19,12}, -{33,-19,13}, -{33,-19,14}, -{33,-19,15}, -{33,-19,16}, -{33,-19,17}, -{33,-19,18}, -{33,-19,19}, -{33,-19,20}, -{33,-19,21}, -{33,-19,22}, -{33,-19,23}, -{33,-19,24}, -{33,-19,25}, -{33,-19,26}, -{33,-19,27}, -{33,-19,28}, -{33,-19,29}, -{33,-19,30}, -{33,-19,31}, -{33,-19,32}, -{33,-19,33}, -{33,-19,34}, -{33,-19,35}, -{33,-19,36}, -{33,-19,37}, -{33,-19,38}, -{33,-19,39}, -{33,-19,40}, -{33,-18,-12}, -{33,-18,-11}, -{33,-18,-10}, -{33,-18,-9}, -{33,-18,-8}, -{33,-18,-7}, -{33,-18,-6}, -{33,-18,-5}, -{33,-18,-4}, -{33,-18,-3}, -{33,-18,-2}, -{33,-18,-1}, -{33,-18,0}, -{33,-18,1}, -{33,-18,2}, -{33,-18,3}, -{33,-18,4}, -{33,-18,5}, -{33,-18,6}, -{33,-18,7}, -{33,-18,8}, -{33,-18,9}, -{33,-18,10}, -{33,-18,11}, -{33,-18,12}, -{33,-18,13}, -{33,-18,14}, -{33,-18,15}, -{33,-18,16}, -{33,-18,17}, -{33,-18,18}, -{33,-18,19}, -{33,-18,20}, -{33,-18,21}, -{33,-18,22}, -{33,-18,23}, -{33,-18,24}, -{33,-18,25}, -{33,-18,26}, -{33,-18,27}, -{33,-18,28}, -{33,-18,29}, -{33,-18,30}, -{33,-18,31}, -{33,-18,32}, -{33,-18,33}, -{33,-18,34}, -{33,-18,35}, -{33,-18,36}, -{33,-18,37}, -{33,-18,38}, -{33,-18,39}, -{33,-18,40}, -{33,-17,-14}, -{33,-17,-13}, -{33,-17,-12}, -{33,-17,-11}, -{33,-17,-10}, -{33,-17,-9}, -{33,-17,-8}, -{33,-17,-7}, -{33,-17,-6}, -{33,-17,-5}, -{33,-17,-4}, -{33,-17,-3}, -{33,-17,-2}, -{33,-17,-1}, -{33,-17,0}, -{33,-17,1}, -{33,-17,2}, -{33,-17,3}, -{33,-17,4}, -{33,-17,5}, -{33,-17,6}, -{33,-17,7}, -{33,-17,8}, -{33,-17,9}, -{33,-17,10}, -{33,-17,11}, -{33,-17,12}, -{33,-17,13}, -{33,-17,14}, -{33,-17,15}, -{33,-17,16}, -{33,-17,17}, -{33,-17,18}, -{33,-17,19}, -{33,-17,20}, -{33,-17,21}, -{33,-17,22}, -{33,-17,23}, -{33,-17,24}, -{33,-17,25}, -{33,-17,26}, -{33,-17,27}, -{33,-17,28}, -{33,-17,29}, -{33,-17,30}, -{33,-17,31}, -{33,-17,32}, -{33,-17,33}, -{33,-17,34}, -{33,-17,35}, -{33,-17,36}, -{33,-17,37}, -{33,-17,38}, -{33,-17,39}, -{33,-17,40}, -{33,-16,-15}, -{33,-16,-14}, -{33,-16,-13}, -{33,-16,-12}, -{33,-16,-11}, -{33,-16,-10}, -{33,-16,-9}, -{33,-16,-8}, -{33,-16,-7}, -{33,-16,-6}, -{33,-16,-5}, -{33,-16,-4}, -{33,-16,-3}, -{33,-16,-2}, -{33,-16,-1}, -{33,-16,0}, -{33,-16,1}, -{33,-16,2}, -{33,-16,3}, -{33,-16,4}, -{33,-16,5}, -{33,-16,6}, -{33,-16,7}, -{33,-16,8}, -{33,-16,9}, -{33,-16,10}, -{33,-16,11}, -{33,-16,12}, -{33,-16,13}, -{33,-16,14}, -{33,-16,15}, -{33,-16,16}, -{33,-16,17}, -{33,-16,18}, -{33,-16,19}, -{33,-16,20}, -{33,-16,21}, -{33,-16,22}, -{33,-16,23}, -{33,-16,24}, -{33,-16,25}, -{33,-16,26}, -{33,-16,27}, -{33,-16,28}, -{33,-16,29}, -{33,-16,30}, -{33,-16,31}, -{33,-16,32}, -{33,-16,33}, -{33,-16,34}, -{33,-16,35}, -{33,-16,36}, -{33,-16,37}, -{33,-16,38}, -{33,-16,39}, -{33,-16,40}, -{33,-15,-16}, -{33,-15,-15}, -{33,-15,-14}, -{33,-15,-13}, -{33,-15,-12}, -{33,-15,-11}, -{33,-15,-10}, -{33,-15,-9}, -{33,-15,-8}, -{33,-15,-7}, -{33,-15,-6}, -{33,-15,-5}, -{33,-15,-4}, -{33,-15,-3}, -{33,-15,-2}, -{33,-15,-1}, -{33,-15,0}, -{33,-15,1}, -{33,-15,2}, -{33,-15,3}, -{33,-15,4}, -{33,-15,5}, -{33,-15,6}, -{33,-15,7}, -{33,-15,8}, -{33,-15,9}, -{33,-15,10}, -{33,-15,11}, -{33,-15,12}, -{33,-15,13}, -{33,-15,14}, -{33,-15,15}, -{33,-15,16}, -{33,-15,17}, -{33,-15,18}, -{33,-15,19}, -{33,-15,20}, -{33,-15,21}, -{33,-15,22}, -{33,-15,23}, -{33,-15,24}, -{33,-15,25}, -{33,-15,26}, -{33,-15,27}, -{33,-15,28}, -{33,-15,29}, -{33,-15,30}, -{33,-15,31}, -{33,-15,32}, -{33,-15,33}, -{33,-15,34}, -{33,-15,35}, -{33,-15,36}, -{33,-15,37}, -{33,-15,38}, -{33,-15,39}, -{33,-15,40}, -{33,-14,-18}, -{33,-14,-17}, -{33,-14,-16}, -{33,-14,-15}, -{33,-14,-14}, -{33,-14,-13}, -{33,-14,-12}, -{33,-14,-11}, -{33,-14,-10}, -{33,-14,-9}, -{33,-14,-8}, -{33,-14,-7}, -{33,-14,-6}, -{33,-14,-5}, -{33,-14,-4}, -{33,-14,-3}, -{33,-14,-2}, -{33,-14,-1}, -{33,-14,0}, -{33,-14,1}, -{33,-14,2}, -{33,-14,3}, -{33,-14,4}, -{33,-14,5}, -{33,-14,6}, -{33,-14,7}, -{33,-14,8}, -{33,-14,9}, -{33,-14,10}, -{33,-14,11}, -{33,-14,12}, -{33,-14,13}, -{33,-14,14}, -{33,-14,15}, -{33,-14,16}, -{33,-14,17}, -{33,-14,18}, -{33,-14,19}, -{33,-14,20}, -{33,-14,21}, -{33,-14,22}, -{33,-14,23}, -{33,-14,24}, -{33,-14,25}, -{33,-14,26}, -{33,-14,27}, -{33,-14,28}, -{33,-14,29}, -{33,-14,30}, -{33,-14,31}, -{33,-14,32}, -{33,-14,33}, -{33,-14,34}, -{33,-14,35}, -{33,-14,36}, -{33,-14,37}, -{33,-14,38}, -{33,-14,39}, -{33,-14,40}, -{33,-13,-19}, -{33,-13,-18}, -{33,-13,-17}, -{33,-13,-16}, -{33,-13,-15}, -{33,-13,-14}, -{33,-13,-13}, -{33,-13,-12}, -{33,-13,-11}, -{33,-13,-10}, -{33,-13,-9}, -{33,-13,-8}, -{33,-13,-7}, -{33,-13,-6}, -{33,-13,-5}, -{33,-13,-4}, -{33,-13,-3}, -{33,-13,-2}, -{33,-13,-1}, -{33,-13,0}, -{33,-13,1}, -{33,-13,2}, -{33,-13,3}, -{33,-13,4}, -{33,-13,5}, -{33,-13,6}, -{33,-13,7}, -{33,-13,8}, -{33,-13,9}, -{33,-13,10}, -{33,-13,11}, -{33,-13,12}, -{33,-13,13}, -{33,-13,14}, -{33,-13,15}, -{33,-13,16}, -{33,-13,17}, -{33,-13,18}, -{33,-13,19}, -{33,-13,20}, -{33,-13,21}, -{33,-13,22}, -{33,-13,23}, -{33,-13,24}, -{33,-13,25}, -{33,-13,26}, -{33,-13,27}, -{33,-13,28}, -{33,-13,29}, -{33,-13,30}, -{33,-13,31}, -{33,-13,32}, -{33,-13,33}, -{33,-13,34}, -{33,-13,35}, -{33,-13,36}, -{33,-13,37}, -{33,-13,38}, -{33,-13,39}, -{33,-13,40}, -{33,-12,-20}, -{33,-12,-19}, -{33,-12,-18}, -{33,-12,-17}, -{33,-12,-16}, -{33,-12,-15}, -{33,-12,-14}, -{33,-12,-13}, -{33,-12,-12}, -{33,-12,-11}, -{33,-12,-10}, -{33,-12,-9}, -{33,-12,-8}, -{33,-12,-7}, -{33,-12,-6}, -{33,-12,-5}, -{33,-12,-4}, -{33,-12,-3}, -{33,-12,-2}, -{33,-12,-1}, -{33,-12,0}, -{33,-12,1}, -{33,-12,2}, -{33,-12,3}, -{33,-12,4}, -{33,-12,5}, -{33,-12,6}, -{33,-12,7}, -{33,-12,8}, -{33,-12,9}, -{33,-12,10}, -{33,-12,11}, -{33,-12,12}, -{33,-12,13}, -{33,-12,14}, -{33,-12,15}, -{33,-12,16}, -{33,-12,17}, -{33,-12,18}, -{33,-12,19}, -{33,-12,20}, -{33,-12,21}, -{33,-12,22}, -{33,-12,23}, -{33,-12,24}, -{33,-12,25}, -{33,-12,26}, -{33,-12,27}, -{33,-12,28}, -{33,-12,29}, -{33,-12,30}, -{33,-12,31}, -{33,-12,32}, -{33,-12,33}, -{33,-12,34}, -{33,-12,35}, -{33,-12,36}, -{33,-12,37}, -{33,-12,38}, -{33,-12,39}, -{33,-12,40}, -{33,-11,-22}, -{33,-11,-21}, -{33,-11,-20}, -{33,-11,-19}, -{33,-11,-18}, -{33,-11,-17}, -{33,-11,-16}, -{33,-11,-15}, -{33,-11,-14}, -{33,-11,-13}, -{33,-11,-12}, -{33,-11,-11}, -{33,-11,-10}, -{33,-11,-9}, -{33,-11,-8}, -{33,-11,-7}, -{33,-11,-6}, -{33,-11,-5}, -{33,-11,-4}, -{33,-11,-3}, -{33,-11,-2}, -{33,-11,-1}, -{33,-11,0}, -{33,-11,1}, -{33,-11,2}, -{33,-11,3}, -{33,-11,4}, -{33,-11,5}, -{33,-11,6}, -{33,-11,7}, -{33,-11,8}, -{33,-11,9}, -{33,-11,10}, -{33,-11,11}, -{33,-11,12}, -{33,-11,13}, -{33,-11,14}, -{33,-11,15}, -{33,-11,16}, -{33,-11,17}, -{33,-11,18}, -{33,-11,19}, -{33,-11,20}, -{33,-11,21}, -{33,-11,22}, -{33,-11,23}, -{33,-11,24}, -{33,-11,25}, -{33,-11,26}, -{33,-11,27}, -{33,-11,28}, -{33,-11,29}, -{33,-11,30}, -{33,-11,31}, -{33,-11,32}, -{33,-11,33}, -{33,-11,34}, -{33,-11,35}, -{33,-11,36}, -{33,-11,37}, -{33,-11,38}, -{33,-11,39}, -{33,-11,40}, -{33,-10,-23}, -{33,-10,-22}, -{33,-10,-21}, -{33,-10,-20}, -{33,-10,-19}, -{33,-10,-18}, -{33,-10,-17}, -{33,-10,-16}, -{33,-10,-15}, -{33,-10,-14}, -{33,-10,-13}, -{33,-10,-12}, -{33,-10,-11}, -{33,-10,-10}, -{33,-10,-9}, -{33,-10,-8}, -{33,-10,-7}, -{33,-10,-6}, -{33,-10,-5}, -{33,-10,-4}, -{33,-10,-3}, -{33,-10,-2}, -{33,-10,-1}, -{33,-10,0}, -{33,-10,1}, -{33,-10,2}, -{33,-10,3}, -{33,-10,4}, -{33,-10,5}, -{33,-10,6}, -{33,-10,7}, -{33,-10,8}, -{33,-10,9}, -{33,-10,10}, -{33,-10,11}, -{33,-10,12}, -{33,-10,13}, -{33,-10,14}, -{33,-10,15}, -{33,-10,16}, -{33,-10,17}, -{33,-10,18}, -{33,-10,19}, -{33,-10,20}, -{33,-10,21}, -{33,-10,22}, -{33,-10,23}, -{33,-10,24}, -{33,-10,25}, -{33,-10,26}, -{33,-10,27}, -{33,-10,28}, -{33,-10,29}, -{33,-10,30}, -{33,-10,31}, -{33,-10,32}, -{33,-10,33}, -{33,-10,34}, -{33,-10,35}, -{33,-10,36}, -{33,-10,37}, -{33,-10,38}, -{33,-10,39}, -{33,-10,40}, -{33,-10,41}, -{33,-9,-24}, -{33,-9,-23}, -{33,-9,-22}, -{33,-9,-21}, -{33,-9,-20}, -{33,-9,-19}, -{33,-9,-18}, -{33,-9,-17}, -{33,-9,-16}, -{33,-9,-15}, -{33,-9,-14}, -{33,-9,-13}, -{33,-9,-12}, -{33,-9,-11}, -{33,-9,-10}, -{33,-9,-9}, -{33,-9,-8}, -{33,-9,-7}, -{33,-9,-6}, -{33,-9,-5}, -{33,-9,-4}, -{33,-9,-3}, -{33,-9,-2}, -{33,-9,-1}, -{33,-9,0}, -{33,-9,1}, -{33,-9,2}, -{33,-9,3}, -{33,-9,4}, -{33,-9,5}, -{33,-9,6}, -{33,-9,7}, -{33,-9,8}, -{33,-9,9}, -{33,-9,10}, -{33,-9,11}, -{33,-9,12}, -{33,-9,13}, -{33,-9,14}, -{33,-9,15}, -{33,-9,16}, -{33,-9,17}, -{33,-9,18}, -{33,-9,19}, -{33,-9,20}, -{33,-9,21}, -{33,-9,22}, -{33,-9,23}, -{33,-9,24}, -{33,-9,25}, -{33,-9,26}, -{33,-9,27}, -{33,-9,28}, -{33,-9,29}, -{33,-9,30}, -{33,-9,31}, -{33,-9,32}, -{33,-9,33}, -{33,-9,34}, -{33,-9,35}, -{33,-9,36}, -{33,-9,37}, -{33,-9,38}, -{33,-9,39}, -{33,-9,40}, -{33,-9,41}, -{33,-8,-25}, -{33,-8,-24}, -{33,-8,-23}, -{33,-8,-22}, -{33,-8,-21}, -{33,-8,-20}, -{33,-8,-19}, -{33,-8,-18}, -{33,-8,-17}, -{33,-8,-16}, -{33,-8,-15}, -{33,-8,-14}, -{33,-8,-13}, -{33,-8,-12}, -{33,-8,-11}, -{33,-8,-10}, -{33,-8,-9}, -{33,-8,-8}, -{33,-8,-7}, -{33,-8,-6}, -{33,-8,-5}, -{33,-8,-4}, -{33,-8,-3}, -{33,-8,-2}, -{33,-8,-1}, -{33,-8,0}, -{33,-8,1}, -{33,-8,2}, -{33,-8,3}, -{33,-8,4}, -{33,-8,5}, -{33,-8,6}, -{33,-8,7}, -{33,-8,8}, -{33,-8,9}, -{33,-8,10}, -{33,-8,11}, -{33,-8,12}, -{33,-8,13}, -{33,-8,14}, -{33,-8,15}, -{33,-8,16}, -{33,-8,17}, -{33,-8,18}, -{33,-8,19}, -{33,-8,20}, -{33,-8,21}, -{33,-8,22}, -{33,-8,23}, -{33,-8,24}, -{33,-8,25}, -{33,-8,26}, -{33,-8,27}, -{33,-8,28}, -{33,-8,29}, -{33,-8,30}, -{33,-8,31}, -{33,-8,32}, -{33,-8,33}, -{33,-8,34}, -{33,-8,35}, -{33,-8,36}, -{33,-8,37}, -{33,-8,38}, -{33,-8,39}, -{33,-8,40}, -{33,-8,41}, -{33,-7,-27}, -{33,-7,-26}, -{33,-7,-25}, -{33,-7,-24}, -{33,-7,-23}, -{33,-7,-22}, -{33,-7,-21}, -{33,-7,-20}, -{33,-7,-19}, -{33,-7,-18}, -{33,-7,-17}, -{33,-7,-16}, -{33,-7,-15}, -{33,-7,-14}, -{33,-7,-13}, -{33,-7,-12}, -{33,-7,-11}, -{33,-7,-10}, -{33,-7,-9}, -{33,-7,-8}, -{33,-7,-7}, -{33,-7,-6}, -{33,-7,-5}, -{33,-7,-4}, -{33,-7,-3}, -{33,-7,-2}, -{33,-7,-1}, -{33,-7,0}, -{33,-7,1}, -{33,-7,2}, -{33,-7,3}, -{33,-7,4}, -{33,-7,5}, -{33,-7,6}, -{33,-7,7}, -{33,-7,8}, -{33,-7,9}, -{33,-7,10}, -{33,-7,11}, -{33,-7,12}, -{33,-7,13}, -{33,-7,14}, -{33,-7,15}, -{33,-7,16}, -{33,-7,17}, -{33,-7,18}, -{33,-7,19}, -{33,-7,20}, -{33,-7,21}, -{33,-7,22}, -{33,-7,23}, -{33,-7,24}, -{33,-7,25}, -{33,-7,26}, -{33,-7,27}, -{33,-7,28}, -{33,-7,29}, -{33,-7,30}, -{33,-7,31}, -{33,-7,32}, -{33,-7,33}, -{33,-7,34}, -{33,-7,35}, -{33,-7,36}, -{33,-7,37}, -{33,-7,38}, -{33,-7,39}, -{33,-7,40}, -{33,-7,41}, -{33,-6,-28}, -{33,-6,-27}, -{33,-6,-26}, -{33,-6,-25}, -{33,-6,-24}, -{33,-6,-23}, -{33,-6,-22}, -{33,-6,-21}, -{33,-6,-20}, -{33,-6,-19}, -{33,-6,-18}, -{33,-6,-17}, -{33,-6,-16}, -{33,-6,-15}, -{33,-6,-14}, -{33,-6,-13}, -{33,-6,-12}, -{33,-6,-11}, -{33,-6,-10}, -{33,-6,-9}, -{33,-6,-8}, -{33,-6,-7}, -{33,-6,-6}, -{33,-6,-5}, -{33,-6,-4}, -{33,-6,-3}, -{33,-6,-2}, -{33,-6,-1}, -{33,-6,0}, -{33,-6,1}, -{33,-6,2}, -{33,-6,3}, -{33,-6,4}, -{33,-6,5}, -{33,-6,6}, -{33,-6,7}, -{33,-6,8}, -{33,-6,9}, -{33,-6,10}, -{33,-6,11}, -{33,-6,12}, -{33,-6,13}, -{33,-6,14}, -{33,-6,15}, -{33,-6,16}, -{33,-6,17}, -{33,-6,18}, -{33,-6,19}, -{33,-6,20}, -{33,-6,21}, -{33,-6,22}, -{33,-6,23}, -{33,-6,24}, -{33,-6,25}, -{33,-6,26}, -{33,-6,27}, -{33,-6,28}, -{33,-6,29}, -{33,-6,30}, -{33,-6,31}, -{33,-6,32}, -{33,-6,33}, -{33,-6,34}, -{33,-6,35}, -{33,-6,36}, -{33,-6,37}, -{33,-6,38}, -{33,-6,39}, -{33,-6,40}, -{33,-6,41}, -{33,-5,-29}, -{33,-5,-28}, -{33,-5,-27}, -{33,-5,-26}, -{33,-5,-25}, -{33,-5,-24}, -{33,-5,-23}, -{33,-5,-22}, -{33,-5,-21}, -{33,-5,-20}, -{33,-5,-19}, -{33,-5,-18}, -{33,-5,-17}, -{33,-5,-16}, -{33,-5,-15}, -{33,-5,-14}, -{33,-5,-13}, -{33,-5,-12}, -{33,-5,-11}, -{33,-5,-10}, -{33,-5,-9}, -{33,-5,-8}, -{33,-5,-7}, -{33,-5,-6}, -{33,-5,-5}, -{33,-5,-4}, -{33,-5,-3}, -{33,-5,-2}, -{33,-5,-1}, -{33,-5,0}, -{33,-5,1}, -{33,-5,2}, -{33,-5,3}, -{33,-5,4}, -{33,-5,5}, -{33,-5,6}, -{33,-5,7}, -{33,-5,8}, -{33,-5,9}, -{33,-5,10}, -{33,-5,11}, -{33,-5,12}, -{33,-5,13}, -{33,-5,14}, -{33,-5,15}, -{33,-5,16}, -{33,-5,17}, -{33,-5,18}, -{33,-5,19}, -{33,-5,20}, -{33,-5,21}, -{33,-5,22}, -{33,-5,23}, -{33,-5,24}, -{33,-5,25}, -{33,-5,26}, -{33,-5,27}, -{33,-5,28}, -{33,-5,29}, -{33,-5,30}, -{33,-5,31}, -{33,-5,32}, -{33,-5,33}, -{33,-5,34}, -{33,-5,35}, -{33,-5,36}, -{33,-5,37}, -{33,-5,38}, -{33,-5,39}, -{33,-5,40}, -{33,-5,41}, -{33,-4,-30}, -{33,-4,-29}, -{33,-4,-28}, -{33,-4,-27}, -{33,-4,-26}, -{33,-4,-25}, -{33,-4,-24}, -{33,-4,-23}, -{33,-4,-22}, -{33,-4,-21}, -{33,-4,-20}, -{33,-4,-19}, -{33,-4,-18}, -{33,-4,-17}, -{33,-4,-16}, -{33,-4,-15}, -{33,-4,-14}, -{33,-4,-13}, -{33,-4,-12}, -{33,-4,-11}, -{33,-4,-10}, -{33,-4,-9}, -{33,-4,-8}, -{33,-4,-7}, -{33,-4,-6}, -{33,-4,-5}, -{33,-4,-4}, -{33,-4,-3}, -{33,-4,-2}, -{33,-4,-1}, -{33,-4,0}, -{33,-4,1}, -{33,-4,2}, -{33,-4,3}, -{33,-4,4}, -{33,-4,5}, -{33,-4,6}, -{33,-4,7}, -{33,-4,8}, -{33,-4,9}, -{33,-4,10}, -{33,-4,11}, -{33,-4,12}, -{33,-4,13}, -{33,-4,14}, -{33,-4,15}, -{33,-4,16}, -{33,-4,17}, -{33,-4,18}, -{33,-4,19}, -{33,-4,20}, -{33,-4,21}, -{33,-4,22}, -{33,-4,23}, -{33,-4,24}, -{33,-4,25}, -{33,-4,26}, -{33,-4,27}, -{33,-4,28}, -{33,-4,29}, -{33,-4,30}, -{33,-4,31}, -{33,-4,32}, -{33,-4,33}, -{33,-4,34}, -{33,-4,35}, -{33,-4,36}, -{33,-4,37}, -{33,-4,38}, -{33,-4,39}, -{33,-4,40}, -{33,-4,41}, -{33,-3,-31}, -{33,-3,-30}, -{33,-3,-29}, -{33,-3,-28}, -{33,-3,-27}, -{33,-3,-26}, -{33,-3,-25}, -{33,-3,-24}, -{33,-3,-23}, -{33,-3,-22}, -{33,-3,-21}, -{33,-3,-20}, -{33,-3,-19}, -{33,-3,-18}, -{33,-3,-17}, -{33,-3,-16}, -{33,-3,-15}, -{33,-3,-14}, -{33,-3,-13}, -{33,-3,-12}, -{33,-3,-11}, -{33,-3,-10}, -{33,-3,-9}, -{33,-3,-8}, -{33,-3,-7}, -{33,-3,-6}, -{33,-3,-5}, -{33,-3,-4}, -{33,-3,-3}, -{33,-3,-2}, -{33,-3,-1}, -{33,-3,0}, -{33,-3,1}, -{33,-3,2}, -{33,-3,3}, -{33,-3,4}, -{33,-3,5}, -{33,-3,6}, -{33,-3,7}, -{33,-3,8}, -{33,-3,9}, -{33,-3,10}, -{33,-3,11}, -{33,-3,12}, -{33,-3,13}, -{33,-3,14}, -{33,-3,15}, -{33,-3,16}, -{33,-3,17}, -{33,-3,18}, -{33,-3,19}, -{33,-3,20}, -{33,-3,21}, -{33,-3,22}, -{33,-3,23}, -{33,-3,24}, -{33,-3,25}, -{33,-3,26}, -{33,-3,27}, -{33,-3,28}, -{33,-3,29}, -{33,-3,30}, -{33,-3,31}, -{33,-3,32}, -{33,-3,33}, -{33,-3,34}, -{33,-3,35}, -{33,-3,36}, -{33,-3,37}, -{33,-3,38}, -{33,-3,39}, -{33,-3,40}, -{33,-3,41}, -{33,-2,-33}, -{33,-2,-32}, -{33,-2,-31}, -{33,-2,-30}, -{33,-2,-29}, -{33,-2,-28}, -{33,-2,-27}, -{33,-2,-26}, -{33,-2,-25}, -{33,-2,-24}, -{33,-2,-23}, -{33,-2,-22}, -{33,-2,-21}, -{33,-2,-20}, -{33,-2,-19}, -{33,-2,-18}, -{33,-2,-17}, -{33,-2,-16}, -{33,-2,-15}, -{33,-2,-14}, -{33,-2,-13}, -{33,-2,-12}, -{33,-2,-11}, -{33,-2,-10}, -{33,-2,-9}, -{33,-2,-8}, -{33,-2,-7}, -{33,-2,-6}, -{33,-2,-5}, -{33,-2,-4}, -{33,-2,-3}, -{33,-2,-2}, -{33,-2,-1}, -{33,-2,0}, -{33,-2,1}, -{33,-2,2}, -{33,-2,3}, -{33,-2,4}, -{33,-2,5}, -{33,-2,6}, -{33,-2,7}, -{33,-2,8}, -{33,-2,9}, -{33,-2,10}, -{33,-2,11}, -{33,-2,12}, -{33,-2,13}, -{33,-2,14}, -{33,-2,15}, -{33,-2,16}, -{33,-2,17}, -{33,-2,18}, -{33,-2,19}, -{33,-2,20}, -{33,-2,21}, -{33,-2,22}, -{33,-2,23}, -{33,-2,24}, -{33,-2,25}, -{33,-2,26}, -{33,-2,27}, -{33,-2,28}, -{33,-2,29}, -{33,-2,30}, -{33,-2,31}, -{33,-2,32}, -{33,-2,33}, -{33,-2,34}, -{33,-2,35}, -{33,-2,36}, -{33,-2,37}, -{33,-2,38}, -{33,-2,39}, -{33,-2,40}, -{33,-2,41}, -{33,-1,-34}, -{33,-1,-33}, -{33,-1,-32}, -{33,-1,-31}, -{33,-1,-30}, -{33,-1,-29}, -{33,-1,-28}, -{33,-1,-27}, -{33,-1,-26}, -{33,-1,-25}, -{33,-1,-24}, -{33,-1,-23}, -{33,-1,-22}, -{33,-1,-21}, -{33,-1,-20}, -{33,-1,-19}, -{33,-1,-18}, -{33,-1,-17}, -{33,-1,-16}, -{33,-1,-15}, -{33,-1,-14}, -{33,-1,-13}, -{33,-1,-12}, -{33,-1,-11}, -{33,-1,-10}, -{33,-1,-9}, -{33,-1,-8}, -{33,-1,-7}, -{33,-1,-6}, -{33,-1,-5}, -{33,-1,-4}, -{33,-1,-3}, -{33,-1,-2}, -{33,-1,-1}, -{33,-1,0}, -{33,-1,1}, -{33,-1,2}, -{33,-1,3}, -{33,-1,4}, -{33,-1,5}, -{33,-1,6}, -{33,-1,7}, -{33,-1,8}, -{33,-1,9}, -{33,-1,10}, -{33,-1,11}, -{33,-1,12}, -{33,-1,13}, -{33,-1,14}, -{33,-1,15}, -{33,-1,16}, -{33,-1,17}, -{33,-1,18}, -{33,-1,19}, -{33,-1,20}, -{33,-1,21}, -{33,-1,22}, -{33,-1,23}, -{33,-1,24}, -{33,-1,25}, -{33,-1,26}, -{33,-1,27}, -{33,-1,28}, -{33,-1,29}, -{33,-1,30}, -{33,-1,31}, -{33,-1,32}, -{33,-1,33}, -{33,-1,34}, -{33,-1,35}, -{33,-1,36}, -{33,-1,37}, -{33,-1,38}, -{33,-1,39}, -{33,-1,40}, -{33,-1,41}, -{33,0,-35}, -{33,0,-34}, -{33,0,-33}, -{33,0,-32}, -{33,0,-31}, -{33,0,-30}, -{33,0,-29}, -{33,0,-28}, -{33,0,-27}, -{33,0,-26}, -{33,0,-25}, -{33,0,-24}, -{33,0,-23}, -{33,0,-22}, -{33,0,-21}, -{33,0,-20}, -{33,0,-19}, -{33,0,-18}, -{33,0,-17}, -{33,0,-16}, -{33,0,-15}, -{33,0,-14}, -{33,0,-13}, -{33,0,-12}, -{33,0,-11}, -{33,0,-10}, -{33,0,-9}, -{33,0,-8}, -{33,0,-7}, -{33,0,-6}, -{33,0,-5}, -{33,0,-4}, -{33,0,-3}, -{33,0,-2}, -{33,0,-1}, -{33,0,0}, -{33,0,1}, -{33,0,2}, -{33,0,3}, -{33,0,4}, -{33,0,5}, -{33,0,6}, -{33,0,7}, -{33,0,8}, -{33,0,9}, -{33,0,10}, -{33,0,11}, -{33,0,12}, -{33,0,13}, -{33,0,14}, -{33,0,15}, -{33,0,16}, -{33,0,17}, -{33,0,18}, -{33,0,19}, -{33,0,20}, -{33,0,21}, -{33,0,22}, -{33,0,23}, -{33,0,24}, -{33,0,25}, -{33,0,26}, -{33,0,27}, -{33,0,28}, -{33,0,29}, -{33,0,30}, -{33,0,31}, -{33,0,32}, -{33,0,33}, -{33,0,34}, -{33,0,35}, -{33,0,36}, -{33,0,37}, -{33,0,38}, -{33,0,39}, -{33,0,40}, -{33,0,41}, -{33,1,-36}, -{33,1,-35}, -{33,1,-34}, -{33,1,-33}, -{33,1,-32}, -{33,1,-31}, -{33,1,-30}, -{33,1,-29}, -{33,1,-28}, -{33,1,-27}, -{33,1,-26}, -{33,1,-25}, -{33,1,-24}, -{33,1,-23}, -{33,1,-22}, -{33,1,-21}, -{33,1,-20}, -{33,1,-19}, -{33,1,-18}, -{33,1,-17}, -{33,1,-16}, -{33,1,-15}, -{33,1,-14}, -{33,1,-13}, -{33,1,-12}, -{33,1,-11}, -{33,1,-10}, -{33,1,-9}, -{33,1,-8}, -{33,1,-7}, -{33,1,-6}, -{33,1,-5}, -{33,1,-4}, -{33,1,-3}, -{33,1,-2}, -{33,1,-1}, -{33,1,0}, -{33,1,1}, -{33,1,2}, -{33,1,3}, -{33,1,4}, -{33,1,5}, -{33,1,6}, -{33,1,7}, -{33,1,8}, -{33,1,9}, -{33,1,10}, -{33,1,11}, -{33,1,12}, -{33,1,13}, -{33,1,14}, -{33,1,15}, -{33,1,16}, -{33,1,17}, -{33,1,18}, -{33,1,19}, -{33,1,20}, -{33,1,21}, -{33,1,22}, -{33,1,23}, -{33,1,24}, -{33,1,25}, -{33,1,26}, -{33,1,27}, -{33,1,28}, -{33,1,29}, -{33,1,30}, -{33,1,31}, -{33,1,32}, -{33,1,33}, -{33,1,34}, -{33,1,35}, -{33,1,36}, -{33,1,37}, -{33,1,38}, -{33,1,39}, -{33,1,40}, -{33,1,41}, -{33,2,-37}, -{33,2,-36}, -{33,2,-35}, -{33,2,-34}, -{33,2,-33}, -{33,2,-32}, -{33,2,-31}, -{33,2,-30}, -{33,2,-29}, -{33,2,-28}, -{33,2,-27}, -{33,2,-26}, -{33,2,-25}, -{33,2,-24}, -{33,2,-23}, -{33,2,-22}, -{33,2,-21}, -{33,2,-20}, -{33,2,-19}, -{33,2,-18}, -{33,2,-17}, -{33,2,-16}, -{33,2,-15}, -{33,2,-14}, -{33,2,-13}, -{33,2,-12}, -{33,2,-11}, -{33,2,-10}, -{33,2,-9}, -{33,2,-8}, -{33,2,-7}, -{33,2,-6}, -{33,2,-5}, -{33,2,-4}, -{33,2,-3}, -{33,2,-2}, -{33,2,-1}, -{33,2,0}, -{33,2,1}, -{33,2,2}, -{33,2,3}, -{33,2,4}, -{33,2,5}, -{33,2,6}, -{33,2,7}, -{33,2,8}, -{33,2,9}, -{33,2,10}, -{33,2,11}, -{33,2,12}, -{33,2,13}, -{33,2,14}, -{33,2,15}, -{33,2,16}, -{33,2,17}, -{33,2,18}, -{33,2,19}, -{33,2,20}, -{33,2,21}, -{33,2,22}, -{33,2,23}, -{33,2,24}, -{33,2,25}, -{33,2,26}, -{33,2,27}, -{33,2,28}, -{33,2,29}, -{33,2,30}, -{33,2,31}, -{33,2,32}, -{33,2,33}, -{33,2,34}, -{33,2,35}, -{33,2,36}, -{33,2,37}, -{33,2,38}, -{33,2,39}, -{33,2,40}, -{33,2,41}, -{33,3,-38}, -{33,3,-37}, -{33,3,-36}, -{33,3,-35}, -{33,3,-34}, -{33,3,-33}, -{33,3,-32}, -{33,3,-31}, -{33,3,-30}, -{33,3,-29}, -{33,3,-28}, -{33,3,-27}, -{33,3,-26}, -{33,3,-25}, -{33,3,-24}, -{33,3,-23}, -{33,3,-22}, -{33,3,-21}, -{33,3,-20}, -{33,3,-19}, -{33,3,-18}, -{33,3,-17}, -{33,3,-16}, -{33,3,-15}, -{33,3,-14}, -{33,3,-13}, -{33,3,-12}, -{33,3,-11}, -{33,3,-10}, -{33,3,-9}, -{33,3,-8}, -{33,3,-7}, -{33,3,-6}, -{33,3,-5}, -{33,3,-4}, -{33,3,-3}, -{33,3,-2}, -{33,3,-1}, -{33,3,0}, -{33,3,1}, -{33,3,2}, -{33,3,3}, -{33,3,4}, -{33,3,5}, -{33,3,6}, -{33,3,7}, -{33,3,8}, -{33,3,9}, -{33,3,10}, -{33,3,11}, -{33,3,12}, -{33,3,13}, -{33,3,14}, -{33,3,15}, -{33,3,16}, -{33,3,17}, -{33,3,18}, -{33,3,19}, -{33,3,20}, -{33,3,21}, -{33,3,22}, -{33,3,23}, -{33,3,24}, -{33,3,25}, -{33,3,26}, -{33,3,27}, -{33,3,28}, -{33,3,29}, -{33,3,30}, -{33,3,31}, -{33,3,32}, -{33,3,33}, -{33,3,34}, -{33,3,35}, -{33,3,36}, -{33,3,37}, -{33,3,38}, -{33,3,39}, -{33,3,40}, -{33,3,41}, -{33,4,-39}, -{33,4,-38}, -{33,4,-37}, -{33,4,-36}, -{33,4,-35}, -{33,4,-34}, -{33,4,-33}, -{33,4,-32}, -{33,4,-31}, -{33,4,-30}, -{33,4,-29}, -{33,4,-28}, -{33,4,-27}, -{33,4,-26}, -{33,4,-25}, -{33,4,-24}, -{33,4,-23}, -{33,4,-22}, -{33,4,-21}, -{33,4,-20}, -{33,4,-19}, -{33,4,-18}, -{33,4,-17}, -{33,4,-16}, -{33,4,-15}, -{33,4,-14}, -{33,4,-13}, -{33,4,-12}, -{33,4,-11}, -{33,4,-10}, -{33,4,-9}, -{33,4,-8}, -{33,4,-7}, -{33,4,-6}, -{33,4,-5}, -{33,4,-4}, -{33,4,-3}, -{33,4,-2}, -{33,4,-1}, -{33,4,0}, -{33,4,1}, -{33,4,2}, -{33,4,3}, -{33,4,4}, -{33,4,5}, -{33,4,6}, -{33,4,7}, -{33,4,8}, -{33,4,9}, -{33,4,10}, -{33,4,11}, -{33,4,12}, -{33,4,13}, -{33,4,14}, -{33,4,15}, -{33,4,16}, -{33,4,17}, -{33,4,18}, -{33,4,19}, -{33,4,20}, -{33,4,21}, -{33,4,22}, -{33,4,23}, -{33,4,24}, -{33,4,25}, -{33,4,26}, -{33,4,27}, -{33,4,28}, -{33,4,29}, -{33,4,30}, -{33,4,31}, -{33,4,32}, -{33,4,33}, -{33,4,34}, -{33,4,35}, -{33,4,36}, -{33,4,37}, -{33,4,38}, -{33,4,39}, -{33,4,40}, -{33,4,41}, -{33,4,42}, -{33,5,-40}, -{33,5,-39}, -{33,5,-38}, -{33,5,-37}, -{33,5,-36}, -{33,5,-35}, -{33,5,-34}, -{33,5,-33}, -{33,5,-32}, -{33,5,-31}, -{33,5,-30}, -{33,5,-29}, -{33,5,-28}, -{33,5,-27}, -{33,5,-26}, -{33,5,-25}, -{33,5,-24}, -{33,5,-23}, -{33,5,-22}, -{33,5,-21}, -{33,5,-20}, -{33,5,-19}, -{33,5,-18}, -{33,5,-17}, -{33,5,-16}, -{33,5,-15}, -{33,5,-14}, -{33,5,-13}, -{33,5,-12}, -{33,5,-11}, -{33,5,-10}, -{33,5,-9}, -{33,5,-8}, -{33,5,-7}, -{33,5,-6}, -{33,5,-5}, -{33,5,-4}, -{33,5,-3}, -{33,5,-2}, -{33,5,-1}, -{33,5,0}, -{33,5,1}, -{33,5,2}, -{33,5,3}, -{33,5,4}, -{33,5,5}, -{33,5,6}, -{33,5,7}, -{33,5,8}, -{33,5,9}, -{33,5,10}, -{33,5,11}, -{33,5,12}, -{33,5,13}, -{33,5,14}, -{33,5,15}, -{33,5,16}, -{33,5,17}, -{33,5,18}, -{33,5,19}, -{33,5,20}, -{33,5,21}, -{33,5,22}, -{33,5,23}, -{33,5,24}, -{33,5,25}, -{33,5,26}, -{33,5,27}, -{33,5,28}, -{33,5,29}, -{33,5,30}, -{33,5,31}, -{33,5,32}, -{33,5,33}, -{33,5,34}, -{33,5,35}, -{33,5,36}, -{33,5,37}, -{33,5,38}, -{33,5,39}, -{33,5,40}, -{33,5,41}, -{33,5,42}, -{33,6,-41}, -{33,6,-40}, -{33,6,-39}, -{33,6,-38}, -{33,6,-37}, -{33,6,-36}, -{33,6,-35}, -{33,6,-34}, -{33,6,-33}, -{33,6,-32}, -{33,6,-31}, -{33,6,-30}, -{33,6,-29}, -{33,6,-28}, -{33,6,-27}, -{33,6,-26}, -{33,6,-25}, -{33,6,-24}, -{33,6,-23}, -{33,6,-22}, -{33,6,-21}, -{33,6,-20}, -{33,6,-19}, -{33,6,-18}, -{33,6,-17}, -{33,6,-16}, -{33,6,-15}, -{33,6,-14}, -{33,6,-13}, -{33,6,-12}, -{33,6,-11}, -{33,6,-10}, -{33,6,-9}, -{33,6,-8}, -{33,6,-7}, -{33,6,-6}, -{33,6,-5}, -{33,6,-4}, -{33,6,-3}, -{33,6,-2}, -{33,6,-1}, -{33,6,0}, -{33,6,1}, -{33,6,2}, -{33,6,3}, -{33,6,4}, -{33,6,5}, -{33,6,6}, -{33,6,7}, -{33,6,8}, -{33,6,9}, -{33,6,10}, -{33,6,11}, -{33,6,12}, -{33,6,13}, -{33,6,14}, -{33,6,15}, -{33,6,16}, -{33,6,17}, -{33,6,18}, -{33,6,19}, -{33,6,20}, -{33,6,21}, -{33,6,22}, -{33,6,23}, -{33,6,24}, -{33,6,25}, -{33,6,26}, -{33,6,27}, -{33,6,28}, -{33,6,29}, -{33,6,30}, -{33,6,31}, -{33,6,32}, -{33,6,33}, -{33,6,34}, -{33,6,35}, -{33,6,36}, -{33,6,37}, -{33,6,38}, -{33,6,39}, -{33,6,40}, -{33,6,41}, -{33,6,42}, -{33,7,-43}, -{33,7,-42}, -{33,7,-41}, -{33,7,-40}, -{33,7,-39}, -{33,7,-38}, -{33,7,-37}, -{33,7,-36}, -{33,7,-35}, -{33,7,-34}, -{33,7,-33}, -{33,7,-32}, -{33,7,-31}, -{33,7,-30}, -{33,7,-29}, -{33,7,-28}, -{33,7,-27}, -{33,7,-26}, -{33,7,-25}, -{33,7,-24}, -{33,7,-23}, -{33,7,-22}, -{33,7,-21}, -{33,7,-20}, -{33,7,-19}, -{33,7,-18}, -{33,7,-17}, -{33,7,-16}, -{33,7,-15}, -{33,7,-14}, -{33,7,-13}, -{33,7,-12}, -{33,7,-11}, -{33,7,-10}, -{33,7,-9}, -{33,7,-8}, -{33,7,-7}, -{33,7,-6}, -{33,7,-5}, -{33,7,-4}, -{33,7,-3}, -{33,7,-2}, -{33,7,-1}, -{33,7,0}, -{33,7,1}, -{33,7,2}, -{33,7,3}, -{33,7,4}, -{33,7,5}, -{33,7,6}, -{33,7,7}, -{33,7,8}, -{33,7,9}, -{33,7,10}, -{33,7,11}, -{33,7,12}, -{33,7,13}, -{33,7,14}, -{33,7,15}, -{33,7,16}, -{33,7,17}, -{33,7,18}, -{33,7,19}, -{33,7,20}, -{33,7,21}, -{33,7,22}, -{33,7,23}, -{33,7,24}, -{33,7,25}, -{33,7,26}, -{33,7,27}, -{33,7,28}, -{33,7,29}, -{33,7,30}, -{33,7,31}, -{33,7,32}, -{33,7,33}, -{33,7,34}, -{33,7,35}, -{33,7,36}, -{33,7,37}, -{33,7,38}, -{33,7,39}, -{33,7,40}, -{33,7,41}, -{33,7,42}, -{33,8,-44}, -{33,8,-43}, -{33,8,-42}, -{33,8,-41}, -{33,8,-40}, -{33,8,-39}, -{33,8,-38}, -{33,8,-37}, -{33,8,-36}, -{33,8,-35}, -{33,8,-34}, -{33,8,-33}, -{33,8,-32}, -{33,8,-31}, -{33,8,-30}, -{33,8,-29}, -{33,8,-28}, -{33,8,-27}, -{33,8,-26}, -{33,8,-25}, -{33,8,-24}, -{33,8,-23}, -{33,8,-22}, -{33,8,-21}, -{33,8,-20}, -{33,8,-19}, -{33,8,-18}, -{33,8,-17}, -{33,8,-16}, -{33,8,-15}, -{33,8,-14}, -{33,8,-13}, -{33,8,-12}, -{33,8,-11}, -{33,8,-10}, -{33,8,-9}, -{33,8,-8}, -{33,8,-7}, -{33,8,-6}, -{33,8,-5}, -{33,8,-4}, -{33,8,-3}, -{33,8,-2}, -{33,8,-1}, -{33,8,0}, -{33,8,1}, -{33,8,2}, -{33,8,3}, -{33,8,4}, -{33,8,5}, -{33,8,6}, -{33,8,7}, -{33,8,8}, -{33,8,9}, -{33,8,10}, -{33,8,11}, -{33,8,12}, -{33,8,13}, -{33,8,14}, -{33,8,15}, -{33,8,16}, -{33,8,17}, -{33,8,18}, -{33,8,19}, -{33,8,20}, -{33,8,21}, -{33,8,22}, -{33,8,23}, -{33,8,24}, -{33,8,25}, -{33,8,26}, -{33,8,27}, -{33,8,28}, -{33,8,29}, -{33,8,30}, -{33,8,31}, -{33,8,32}, -{33,8,33}, -{33,8,34}, -{33,8,35}, -{33,8,36}, -{33,8,37}, -{33,8,38}, -{33,8,39}, -{33,8,40}, -{33,8,41}, -{33,8,42}, -{33,9,-45}, -{33,9,-44}, -{33,9,-43}, -{33,9,-42}, -{33,9,-41}, -{33,9,-40}, -{33,9,-39}, -{33,9,-38}, -{33,9,-37}, -{33,9,-36}, -{33,9,-35}, -{33,9,-34}, -{33,9,-33}, -{33,9,-32}, -{33,9,-31}, -{33,9,-30}, -{33,9,-29}, -{33,9,-28}, -{33,9,-27}, -{33,9,-26}, -{33,9,-25}, -{33,9,-24}, -{33,9,-23}, -{33,9,-22}, -{33,9,-21}, -{33,9,-20}, -{33,9,-19}, -{33,9,-18}, -{33,9,-17}, -{33,9,-16}, -{33,9,-15}, -{33,9,-14}, -{33,9,-13}, -{33,9,-12}, -{33,9,-11}, -{33,9,-10}, -{33,9,-9}, -{33,9,-8}, -{33,9,-7}, -{33,9,-6}, -{33,9,-5}, -{33,9,-4}, -{33,9,-3}, -{33,9,-2}, -{33,9,-1}, -{33,9,0}, -{33,9,1}, -{33,9,2}, -{33,9,3}, -{33,9,4}, -{33,9,5}, -{33,9,6}, -{33,9,7}, -{33,9,8}, -{33,9,9}, -{33,9,10}, -{33,9,11}, -{33,9,12}, -{33,9,13}, -{33,9,14}, -{33,9,15}, -{33,9,16}, -{33,9,17}, -{33,9,18}, -{33,9,19}, -{33,9,20}, -{33,9,21}, -{33,9,22}, -{33,9,23}, -{33,9,24}, -{33,9,25}, -{33,9,26}, -{33,9,27}, -{33,9,28}, -{33,9,29}, -{33,9,30}, -{33,9,31}, -{33,9,32}, -{33,9,33}, -{33,9,34}, -{33,9,35}, -{33,9,36}, -{33,9,37}, -{33,9,38}, -{33,9,39}, -{33,9,40}, -{33,9,41}, -{33,9,42}, -{33,10,-46}, -{33,10,-45}, -{33,10,-44}, -{33,10,-43}, -{33,10,-42}, -{33,10,-41}, -{33,10,-40}, -{33,10,-39}, -{33,10,-38}, -{33,10,-37}, -{33,10,-36}, -{33,10,-35}, -{33,10,-34}, -{33,10,-33}, -{33,10,-32}, -{33,10,-31}, -{33,10,-30}, -{33,10,-29}, -{33,10,-28}, -{33,10,-27}, -{33,10,-26}, -{33,10,-25}, -{33,10,-24}, -{33,10,-23}, -{33,10,-22}, -{33,10,-21}, -{33,10,-20}, -{33,10,-19}, -{33,10,-18}, -{33,10,-17}, -{33,10,-16}, -{33,10,-15}, -{33,10,-14}, -{33,10,-13}, -{33,10,-12}, -{33,10,-11}, -{33,10,-10}, -{33,10,-9}, -{33,10,-8}, -{33,10,-7}, -{33,10,-6}, -{33,10,-5}, -{33,10,-4}, -{33,10,-3}, -{33,10,-2}, -{33,10,-1}, -{33,10,0}, -{33,10,1}, -{33,10,2}, -{33,10,3}, -{33,10,4}, -{33,10,5}, -{33,10,6}, -{33,10,7}, -{33,10,8}, -{33,10,9}, -{33,10,10}, -{33,10,11}, -{33,10,12}, -{33,10,13}, -{33,10,14}, -{33,10,15}, -{33,10,16}, -{33,10,17}, -{33,10,18}, -{33,10,19}, -{33,10,20}, -{33,10,21}, -{33,10,22}, -{33,10,23}, -{33,10,24}, -{33,10,25}, -{33,10,26}, -{33,10,27}, -{33,10,28}, -{33,10,29}, -{33,10,30}, -{33,10,31}, -{33,10,32}, -{33,10,33}, -{33,10,34}, -{33,10,35}, -{33,10,36}, -{33,10,37}, -{33,10,38}, -{33,10,39}, -{33,10,40}, -{33,10,41}, -{33,10,42}, -{33,11,-47}, -{33,11,-46}, -{33,11,-45}, -{33,11,-44}, -{33,11,-43}, -{33,11,-42}, -{33,11,-41}, -{33,11,-40}, -{33,11,-39}, -{33,11,-38}, -{33,11,-37}, -{33,11,-36}, -{33,11,-35}, -{33,11,-34}, -{33,11,-33}, -{33,11,-32}, -{33,11,-31}, -{33,11,-30}, -{33,11,-29}, -{33,11,-28}, -{33,11,-27}, -{33,11,-26}, -{33,11,-25}, -{33,11,-24}, -{33,11,-23}, -{33,11,-22}, -{33,11,-21}, -{33,11,-20}, -{33,11,-19}, -{33,11,-18}, -{33,11,-17}, -{33,11,-16}, -{33,11,-15}, -{33,11,-14}, -{33,11,-13}, -{33,11,-12}, -{33,11,-11}, -{33,11,-10}, -{33,11,-9}, -{33,11,-8}, -{33,11,-7}, -{33,11,-6}, -{33,11,-5}, -{33,11,-4}, -{33,11,-3}, -{33,11,-2}, -{33,11,-1}, -{33,11,0}, -{33,11,1}, -{33,11,2}, -{33,11,3}, -{33,11,4}, -{33,11,5}, -{33,11,6}, -{33,11,7}, -{33,11,8}, -{33,11,9}, -{33,11,10}, -{33,11,11}, -{33,11,12}, -{33,11,13}, -{33,11,14}, -{33,11,15}, -{33,11,16}, -{33,11,17}, -{33,11,18}, -{33,11,19}, -{33,11,20}, -{33,11,21}, -{33,11,22}, -{33,11,23}, -{33,11,24}, -{33,11,25}, -{33,11,26}, -{33,11,27}, -{33,11,28}, -{33,11,29}, -{33,11,30}, -{33,11,31}, -{33,11,32}, -{33,11,33}, -{33,11,34}, -{33,11,35}, -{33,11,36}, -{33,11,37}, -{33,11,38}, -{33,11,39}, -{33,11,40}, -{33,11,41}, -{33,11,42}, -{33,12,-48}, -{33,12,-47}, -{33,12,-46}, -{33,12,-45}, -{33,12,-44}, -{33,12,-43}, -{33,12,-42}, -{33,12,-41}, -{33,12,-40}, -{33,12,-39}, -{33,12,-38}, -{33,12,-37}, -{33,12,-36}, -{33,12,-35}, -{33,12,-34}, -{33,12,-33}, -{33,12,-32}, -{33,12,-31}, -{33,12,-30}, -{33,12,-29}, -{33,12,-28}, -{33,12,-27}, -{33,12,-26}, -{33,12,-25}, -{33,12,-24}, -{33,12,-23}, -{33,12,-22}, -{33,12,-21}, -{33,12,-20}, -{33,12,-19}, -{33,12,-18}, -{33,12,-17}, -{33,12,-16}, -{33,12,-15}, -{33,12,-14}, -{33,12,-13}, -{33,12,-12}, -{33,12,-11}, -{33,12,-10}, -{33,12,-9}, -{33,12,-8}, -{33,12,-7}, -{33,12,-6}, -{33,12,-5}, -{33,12,-4}, -{33,12,-3}, -{33,12,-2}, -{33,12,-1}, -{33,12,0}, -{33,12,1}, -{33,12,2}, -{33,12,3}, -{33,12,4}, -{33,12,5}, -{33,12,6}, -{33,12,7}, -{33,12,8}, -{33,12,9}, -{33,12,10}, -{33,12,11}, -{33,12,12}, -{33,12,13}, -{33,12,14}, -{33,12,15}, -{33,12,16}, -{33,12,17}, -{33,12,18}, -{33,12,19}, -{33,12,20}, -{33,12,21}, -{33,12,22}, -{33,12,23}, -{33,12,24}, -{33,12,25}, -{33,12,26}, -{33,12,27}, -{33,12,28}, -{33,12,29}, -{33,12,30}, -{33,12,31}, -{33,12,32}, -{33,12,33}, -{33,12,34}, -{33,12,35}, -{33,12,36}, -{33,12,37}, -{33,12,38}, -{33,12,39}, -{33,12,40}, -{33,12,41}, -{33,12,42}, -{33,13,-49}, -{33,13,-48}, -{33,13,-47}, -{33,13,-46}, -{33,13,-45}, -{33,13,-44}, -{33,13,-43}, -{33,13,-42}, -{33,13,-41}, -{33,13,-40}, -{33,13,-39}, -{33,13,-38}, -{33,13,-37}, -{33,13,-36}, -{33,13,-35}, -{33,13,-34}, -{33,13,-33}, -{33,13,-32}, -{33,13,-31}, -{33,13,-30}, -{33,13,-29}, -{33,13,-28}, -{33,13,-27}, -{33,13,-26}, -{33,13,-25}, -{33,13,-24}, -{33,13,-23}, -{33,13,-22}, -{33,13,-21}, -{33,13,-20}, -{33,13,-19}, -{33,13,-18}, -{33,13,-17}, -{33,13,-16}, -{33,13,-15}, -{33,13,-14}, -{33,13,-13}, -{33,13,-12}, -{33,13,-11}, -{33,13,-10}, -{33,13,-9}, -{33,13,-8}, -{33,13,-7}, -{33,13,-6}, -{33,13,-5}, -{33,13,-4}, -{33,13,-3}, -{33,13,-2}, -{33,13,-1}, -{33,13,0}, -{33,13,1}, -{33,13,2}, -{33,13,3}, -{33,13,4}, -{33,13,5}, -{33,13,6}, -{33,13,7}, -{33,13,8}, -{33,13,9}, -{33,13,10}, -{33,13,11}, -{33,13,12}, -{33,13,13}, -{33,13,14}, -{33,13,15}, -{33,13,16}, -{33,13,17}, -{33,13,18}, -{33,13,19}, -{33,13,20}, -{33,13,21}, -{33,13,22}, -{33,13,23}, -{33,13,24}, -{33,13,25}, -{33,13,26}, -{33,13,27}, -{33,13,28}, -{33,13,29}, -{33,13,30}, -{33,13,31}, -{33,13,32}, -{33,13,33}, -{33,13,34}, -{33,13,35}, -{33,13,36}, -{33,13,37}, -{33,13,38}, -{33,13,39}, -{33,13,40}, -{33,13,41}, -{33,13,42}, -{33,14,-50}, -{33,14,-49}, -{33,14,-48}, -{33,14,-47}, -{33,14,-46}, -{33,14,-45}, -{33,14,-44}, -{33,14,-43}, -{33,14,-42}, -{33,14,-41}, -{33,14,-40}, -{33,14,-39}, -{33,14,-38}, -{33,14,-37}, -{33,14,-36}, -{33,14,-35}, -{33,14,-34}, -{33,14,-33}, -{33,14,-32}, -{33,14,-31}, -{33,14,-30}, -{33,14,-29}, -{33,14,-28}, -{33,14,-27}, -{33,14,-26}, -{33,14,-25}, -{33,14,-24}, -{33,14,-23}, -{33,14,-22}, -{33,14,-21}, -{33,14,-20}, -{33,14,-19}, -{33,14,-18}, -{33,14,-17}, -{33,14,-16}, -{33,14,-15}, -{33,14,-14}, -{33,14,-13}, -{33,14,-12}, -{33,14,-11}, -{33,14,-10}, -{33,14,-9}, -{33,14,-8}, -{33,14,-7}, -{33,14,-6}, -{33,14,-5}, -{33,14,-4}, -{33,14,-3}, -{33,14,-2}, -{33,14,-1}, -{33,14,0}, -{33,14,1}, -{33,14,2}, -{33,14,3}, -{33,14,4}, -{33,14,5}, -{33,14,6}, -{33,14,7}, -{33,14,8}, -{33,14,9}, -{33,14,10}, -{33,14,11}, -{33,14,12}, -{33,14,13}, -{33,14,14}, -{33,14,15}, -{33,14,16}, -{33,14,17}, -{33,14,18}, -{33,14,19}, -{33,14,20}, -{33,14,21}, -{33,14,22}, -{33,14,23}, -{33,14,24}, -{33,14,25}, -{33,14,26}, -{33,14,27}, -{33,14,28}, -{33,14,29}, -{33,14,30}, -{33,14,31}, -{33,14,32}, -{33,14,33}, -{33,14,34}, -{33,14,35}, -{33,14,36}, -{33,14,37}, -{33,14,38}, -{33,14,39}, -{33,14,40}, -{33,14,41}, -{33,14,42}, -{33,15,-51}, -{33,15,-50}, -{33,15,-49}, -{33,15,-48}, -{33,15,-47}, -{33,15,-46}, -{33,15,-45}, -{33,15,-44}, -{33,15,-43}, -{33,15,-42}, -{33,15,-41}, -{33,15,-40}, -{33,15,-39}, -{33,15,-38}, -{33,15,-37}, -{33,15,-36}, -{33,15,-35}, -{33,15,-34}, -{33,15,-33}, -{33,15,-32}, -{33,15,-31}, -{33,15,-30}, -{33,15,-29}, -{33,15,-28}, -{33,15,-27}, -{33,15,-26}, -{33,15,-25}, -{33,15,-24}, -{33,15,-23}, -{33,15,-22}, -{33,15,-21}, -{33,15,-20}, -{33,15,-19}, -{33,15,-18}, -{33,15,-17}, -{33,15,-16}, -{33,15,-15}, -{33,15,-14}, -{33,15,-13}, -{33,15,-12}, -{33,15,-11}, -{33,15,-10}, -{33,15,-9}, -{33,15,-8}, -{33,15,-7}, -{33,15,-6}, -{33,15,-5}, -{33,15,-4}, -{33,15,-3}, -{33,15,-2}, -{33,15,-1}, -{33,15,0}, -{33,15,1}, -{33,15,2}, -{33,15,3}, -{33,15,4}, -{33,15,5}, -{33,15,6}, -{33,15,7}, -{33,15,8}, -{33,15,9}, -{33,15,10}, -{33,15,11}, -{33,15,12}, -{33,15,13}, -{33,15,14}, -{33,15,15}, -{33,15,16}, -{33,15,17}, -{33,15,18}, -{33,15,19}, -{33,15,20}, -{33,15,21}, -{33,15,22}, -{33,15,23}, -{33,15,24}, -{33,15,25}, -{33,15,26}, -{33,15,27}, -{33,15,28}, -{33,15,29}, -{33,15,30}, -{33,15,31}, -{33,15,32}, -{33,15,33}, -{33,15,34}, -{33,15,35}, -{33,15,36}, -{33,15,37}, -{33,15,38}, -{33,15,39}, -{33,15,40}, -{33,15,41}, -{33,15,42}, -{33,16,-52}, -{33,16,-51}, -{33,16,-50}, -{33,16,-49}, -{33,16,-48}, -{33,16,-47}, -{33,16,-46}, -{33,16,-45}, -{33,16,-44}, -{33,16,-43}, -{33,16,-42}, -{33,16,-41}, -{33,16,-40}, -{33,16,-39}, -{33,16,-38}, -{33,16,-37}, -{33,16,-36}, -{33,16,-35}, -{33,16,-34}, -{33,16,-33}, -{33,16,-32}, -{33,16,-31}, -{33,16,-30}, -{33,16,-29}, -{33,16,-28}, -{33,16,-27}, -{33,16,-26}, -{33,16,-25}, -{33,16,-24}, -{33,16,-23}, -{33,16,-22}, -{33,16,-21}, -{33,16,-20}, -{33,16,-19}, -{33,16,-18}, -{33,16,-17}, -{33,16,-16}, -{33,16,-15}, -{33,16,-14}, -{33,16,-13}, -{33,16,-12}, -{33,16,-11}, -{33,16,-10}, -{33,16,-9}, -{33,16,-8}, -{33,16,-7}, -{33,16,-6}, -{33,16,-5}, -{33,16,-4}, -{33,16,-3}, -{33,16,-2}, -{33,16,-1}, -{33,16,0}, -{33,16,1}, -{33,16,2}, -{33,16,3}, -{33,16,4}, -{33,16,5}, -{33,16,6}, -{33,16,7}, -{33,16,8}, -{33,16,9}, -{33,16,10}, -{33,16,11}, -{33,16,12}, -{33,16,13}, -{33,16,14}, -{33,16,15}, -{33,16,16}, -{33,16,17}, -{33,16,18}, -{33,16,19}, -{33,16,20}, -{33,16,21}, -{33,16,22}, -{33,16,23}, -{33,16,24}, -{33,16,25}, -{33,16,26}, -{33,16,27}, -{33,16,28}, -{33,16,29}, -{33,16,30}, -{33,16,31}, -{33,16,32}, -{33,16,33}, -{33,16,34}, -{33,16,35}, -{33,16,36}, -{33,16,37}, -{33,16,38}, -{33,16,39}, -{33,16,40}, -{33,16,41}, -{33,16,42}, -{33,16,43}, -{33,17,-53}, -{33,17,-52}, -{33,17,-51}, -{33,17,-50}, -{33,17,-49}, -{33,17,-48}, -{33,17,-47}, -{33,17,-46}, -{33,17,-45}, -{33,17,-44}, -{33,17,-43}, -{33,17,-42}, -{33,17,-41}, -{33,17,-40}, -{33,17,-39}, -{33,17,-38}, -{33,17,-37}, -{33,17,-36}, -{33,17,-35}, -{33,17,-34}, -{33,17,-33}, -{33,17,-32}, -{33,17,-31}, -{33,17,-30}, -{33,17,-29}, -{33,17,-28}, -{33,17,-27}, -{33,17,-26}, -{33,17,-25}, -{33,17,-24}, -{33,17,-23}, -{33,17,-22}, -{33,17,-21}, -{33,17,-20}, -{33,17,-19}, -{33,17,-18}, -{33,17,-17}, -{33,17,-16}, -{33,17,-15}, -{33,17,-14}, -{33,17,-13}, -{33,17,-12}, -{33,17,-11}, -{33,17,-10}, -{33,17,-9}, -{33,17,-8}, -{33,17,-7}, -{33,17,-6}, -{33,17,-5}, -{33,17,-4}, -{33,17,-3}, -{33,17,-2}, -{33,17,-1}, -{33,17,0}, -{33,17,1}, -{33,17,2}, -{33,17,3}, -{33,17,4}, -{33,17,5}, -{33,17,6}, -{33,17,7}, -{33,17,8}, -{33,17,9}, -{33,17,10}, -{33,17,11}, -{33,17,12}, -{33,17,13}, -{33,17,14}, -{33,17,15}, -{33,17,16}, -{33,17,17}, -{33,17,18}, -{33,17,19}, -{33,17,20}, -{33,17,21}, -{33,17,22}, -{33,17,23}, -{33,17,24}, -{33,17,25}, -{33,17,26}, -{33,17,27}, -{33,17,28}, -{33,17,29}, -{33,17,30}, -{33,17,31}, -{33,17,32}, -{33,17,33}, -{33,17,34}, -{33,17,35}, -{33,17,36}, -{33,17,37}, -{33,17,38}, -{33,17,39}, -{33,17,40}, -{33,17,41}, -{33,17,42}, -{33,17,43}, -{33,18,-54}, -{33,18,-53}, -{33,18,-52}, -{33,18,-51}, -{33,18,-50}, -{33,18,-49}, -{33,18,-48}, -{33,18,-47}, -{33,18,-46}, -{33,18,-45}, -{33,18,-44}, -{33,18,-43}, -{33,18,-42}, -{33,18,-41}, -{33,18,-40}, -{33,18,-39}, -{33,18,-38}, -{33,18,-37}, -{33,18,-36}, -{33,18,-35}, -{33,18,-34}, -{33,18,-33}, -{33,18,-32}, -{33,18,-31}, -{33,18,-30}, -{33,18,-29}, -{33,18,-28}, -{33,18,-27}, -{33,18,-26}, -{33,18,-25}, -{33,18,-24}, -{33,18,-23}, -{33,18,-22}, -{33,18,-21}, -{33,18,-20}, -{33,18,-19}, -{33,18,-18}, -{33,18,-17}, -{33,18,-16}, -{33,18,-15}, -{33,18,-14}, -{33,18,-13}, -{33,18,-12}, -{33,18,-11}, -{33,18,-10}, -{33,18,-9}, -{33,18,-8}, -{33,18,-7}, -{33,18,-6}, -{33,18,-5}, -{33,18,-4}, -{33,18,-3}, -{33,18,-2}, -{33,18,-1}, -{33,18,0}, -{33,18,1}, -{33,18,2}, -{33,18,3}, -{33,18,4}, -{33,18,5}, -{33,18,6}, -{33,18,7}, -{33,18,8}, -{33,18,9}, -{33,18,10}, -{33,18,11}, -{33,18,12}, -{33,18,13}, -{33,18,14}, -{33,18,15}, -{33,18,16}, -{33,18,17}, -{33,18,18}, -{33,18,19}, -{33,18,20}, -{33,18,21}, -{33,18,22}, -{33,18,23}, -{33,18,24}, -{33,18,25}, -{33,18,26}, -{33,18,27}, -{33,18,28}, -{33,18,29}, -{33,18,30}, -{33,18,31}, -{33,18,32}, -{33,18,33}, -{33,18,34}, -{33,18,35}, -{33,18,36}, -{33,18,37}, -{33,18,38}, -{33,18,39}, -{33,18,40}, -{33,18,41}, -{33,18,42}, -{33,18,43}, -{33,19,-55}, -{33,19,-54}, -{33,19,-53}, -{33,19,-52}, -{33,19,-51}, -{33,19,-50}, -{33,19,-49}, -{33,19,-48}, -{33,19,-47}, -{33,19,-46}, -{33,19,-45}, -{33,19,-44}, -{33,19,-43}, -{33,19,-42}, -{33,19,-41}, -{33,19,-40}, -{33,19,-39}, -{33,19,-38}, -{33,19,-37}, -{33,19,-36}, -{33,19,-35}, -{33,19,-34}, -{33,19,-33}, -{33,19,-32}, -{33,19,-31}, -{33,19,-30}, -{33,19,-29}, -{33,19,-28}, -{33,19,-27}, -{33,19,-26}, -{33,19,-25}, -{33,19,-24}, -{33,19,-23}, -{33,19,-22}, -{33,19,-21}, -{33,19,-20}, -{33,19,-19}, -{33,19,-18}, -{33,19,-17}, -{33,19,-16}, -{33,19,-15}, -{33,19,-14}, -{33,19,-13}, -{33,19,-12}, -{33,19,-11}, -{33,19,-10}, -{33,19,-9}, -{33,19,-8}, -{33,19,-7}, -{33,19,-6}, -{33,19,-5}, -{33,19,-4}, -{33,19,-3}, -{33,19,-2}, -{33,19,-1}, -{33,19,0}, -{33,19,1}, -{33,19,2}, -{33,19,3}, -{33,19,4}, -{33,19,5}, -{33,19,6}, -{33,19,7}, -{33,19,8}, -{33,19,9}, -{33,19,10}, -{33,19,11}, -{33,19,12}, -{33,19,13}, -{33,19,14}, -{33,19,15}, -{33,19,16}, -{33,19,17}, -{33,19,18}, -{33,19,19}, -{33,19,20}, -{33,19,21}, -{33,19,22}, -{33,19,23}, -{33,19,24}, -{33,19,25}, -{33,19,26}, -{33,19,27}, -{33,19,28}, -{33,19,29}, -{33,19,30}, -{33,19,31}, -{33,19,32}, -{33,19,33}, -{33,19,34}, -{33,19,35}, -{33,19,36}, -{33,19,37}, -{33,19,38}, -{33,19,39}, -{33,19,40}, -{33,19,41}, -{33,19,42}, -{33,19,43}, -{33,20,-56}, -{33,20,-55}, -{33,20,-54}, -{33,20,-53}, -{33,20,-52}, -{33,20,-51}, -{33,20,-50}, -{33,20,-49}, -{33,20,-48}, -{33,20,-47}, -{33,20,-46}, -{33,20,-45}, -{33,20,-44}, -{33,20,-43}, -{33,20,-42}, -{33,20,-41}, -{33,20,-40}, -{33,20,-39}, -{33,20,-38}, -{33,20,-37}, -{33,20,-36}, -{33,20,-35}, -{33,20,-34}, -{33,20,-33}, -{33,20,-32}, -{33,20,-31}, -{33,20,-30}, -{33,20,-29}, -{33,20,-28}, -{33,20,-27}, -{33,20,-26}, -{33,20,-25}, -{33,20,-24}, -{33,20,-23}, -{33,20,-22}, -{33,20,-21}, -{33,20,-20}, -{33,20,-19}, -{33,20,-18}, -{33,20,-17}, -{33,20,-16}, -{33,20,-15}, -{33,20,-14}, -{33,20,-13}, -{33,20,-12}, -{33,20,-11}, -{33,20,-10}, -{33,20,-9}, -{33,20,-8}, -{33,20,-7}, -{33,20,-6}, -{33,20,-5}, -{33,20,-4}, -{33,20,-3}, -{33,20,-2}, -{33,20,-1}, -{33,20,0}, -{33,20,1}, -{33,20,2}, -{33,20,3}, -{33,20,4}, -{33,20,5}, -{33,20,6}, -{33,20,7}, -{33,20,8}, -{33,20,9}, -{33,20,10}, -{33,20,11}, -{33,20,12}, -{33,20,13}, -{33,20,14}, -{33,20,15}, -{33,20,16}, -{33,20,17}, -{33,20,18}, -{33,20,19}, -{33,20,20}, -{33,20,21}, -{33,20,22}, -{33,20,23}, -{33,20,24}, -{33,20,25}, -{33,20,26}, -{33,20,27}, -{33,20,28}, -{33,20,29}, -{33,20,30}, -{33,20,31}, -{33,20,32}, -{33,20,33}, -{33,20,34}, -{33,20,35}, -{33,20,36}, -{33,20,37}, -{33,20,38}, -{33,20,39}, -{33,20,40}, -{33,20,41}, -{33,20,42}, -{33,20,43}, -{33,21,-57}, -{33,21,-56}, -{33,21,-55}, -{33,21,-54}, -{33,21,-53}, -{33,21,-52}, -{33,21,-51}, -{33,21,-50}, -{33,21,-49}, -{33,21,-48}, -{33,21,-47}, -{33,21,-46}, -{33,21,-45}, -{33,21,-44}, -{33,21,-43}, -{33,21,-42}, -{33,21,-41}, -{33,21,-40}, -{33,21,-39}, -{33,21,-38}, -{33,21,-37}, -{33,21,-36}, -{33,21,-35}, -{33,21,-34}, -{33,21,-33}, -{33,21,-32}, -{33,21,-31}, -{33,21,-30}, -{33,21,-29}, -{33,21,-28}, -{33,21,-27}, -{33,21,-26}, -{33,21,-25}, -{33,21,-24}, -{33,21,-23}, -{33,21,-22}, -{33,21,-21}, -{33,21,-20}, -{33,21,-19}, -{33,21,-18}, -{33,21,-17}, -{33,21,-16}, -{33,21,-15}, -{33,21,-14}, -{33,21,-13}, -{33,21,-12}, -{33,21,-11}, -{33,21,-10}, -{33,21,-9}, -{33,21,-8}, -{33,21,-7}, -{33,21,-6}, -{33,21,-5}, -{33,21,-4}, -{33,21,-3}, -{33,21,-2}, -{33,21,-1}, -{33,21,0}, -{33,21,1}, -{33,21,2}, -{33,21,3}, -{33,21,4}, -{33,21,5}, -{33,21,6}, -{33,21,7}, -{33,21,8}, -{33,21,9}, -{33,21,10}, -{33,21,11}, -{33,21,12}, -{33,21,13}, -{33,21,14}, -{33,21,15}, -{33,21,16}, -{33,21,17}, -{33,21,18}, -{33,21,19}, -{33,21,20}, -{33,21,21}, -{33,21,22}, -{33,21,23}, -{33,21,24}, -{33,21,25}, -{33,21,26}, -{33,21,27}, -{33,21,28}, -{33,21,29}, -{33,21,30}, -{33,21,31}, -{33,21,32}, -{33,21,33}, -{33,21,34}, -{33,21,35}, -{33,21,36}, -{33,21,37}, -{33,21,38}, -{33,21,39}, -{33,21,40}, -{33,21,41}, -{33,21,42}, -{33,21,43}, -{33,22,-58}, -{33,22,-57}, -{33,22,-56}, -{33,22,-55}, -{33,22,-54}, -{33,22,-53}, -{33,22,-52}, -{33,22,-51}, -{33,22,-50}, -{33,22,-49}, -{33,22,-48}, -{33,22,-47}, -{33,22,-46}, -{33,22,-45}, -{33,22,-44}, -{33,22,-43}, -{33,22,-42}, -{33,22,-41}, -{33,22,-40}, -{33,22,-39}, -{33,22,-38}, -{33,22,-37}, -{33,22,-36}, -{33,22,-35}, -{33,22,-34}, -{33,22,-33}, -{33,22,-32}, -{33,22,-31}, -{33,22,-30}, -{33,22,-29}, -{33,22,-28}, -{33,22,-27}, -{33,22,-26}, -{33,22,-25}, -{33,22,-24}, -{33,22,-23}, -{33,22,-22}, -{33,22,-21}, -{33,22,-20}, -{33,22,-19}, -{33,22,-18}, -{33,22,-17}, -{33,22,-16}, -{33,22,-15}, -{33,22,-14}, -{33,22,-13}, -{33,22,-12}, -{33,22,-11}, -{33,22,-10}, -{33,22,-9}, -{33,22,-8}, -{33,22,-7}, -{33,22,-6}, -{33,22,-5}, -{33,22,-4}, -{33,22,-3}, -{33,22,-2}, -{33,22,-1}, -{33,22,0}, -{33,22,1}, -{33,22,2}, -{33,22,3}, -{33,22,4}, -{33,22,5}, -{33,22,6}, -{33,22,7}, -{33,22,8}, -{33,22,9}, -{33,22,10}, -{33,22,11}, -{33,22,12}, -{33,22,13}, -{33,22,14}, -{33,22,15}, -{33,22,16}, -{33,22,17}, -{33,22,18}, -{33,22,19}, -{33,22,20}, -{33,22,21}, -{33,22,22}, -{33,22,23}, -{33,22,24}, -{33,22,25}, -{33,22,26}, -{33,22,27}, -{33,22,28}, -{33,22,29}, -{33,22,30}, -{33,22,31}, -{33,22,32}, -{33,22,33}, -{33,22,34}, -{33,22,35}, -{33,22,36}, -{33,22,37}, -{33,22,38}, -{33,22,39}, -{33,22,40}, -{33,22,41}, -{33,22,42}, -{33,22,43}, -{33,23,-59}, -{33,23,-58}, -{33,23,-57}, -{33,23,-56}, -{33,23,-55}, -{33,23,-54}, -{33,23,-53}, -{33,23,-52}, -{33,23,-51}, -{33,23,-50}, -{33,23,-49}, -{33,23,-48}, -{33,23,-47}, -{33,23,-46}, -{33,23,-45}, -{33,23,-44}, -{33,23,-43}, -{33,23,-42}, -{33,23,-41}, -{33,23,-40}, -{33,23,-39}, -{33,23,-38}, -{33,23,-37}, -{33,23,-36}, -{33,23,-35}, -{33,23,-34}, -{33,23,-33}, -{33,23,-32}, -{33,23,-31}, -{33,23,-30}, -{33,23,-29}, -{33,23,-28}, -{33,23,-27}, -{33,23,-26}, -{33,23,-25}, -{33,23,-24}, -{33,23,-23}, -{33,23,-22}, -{33,23,-21}, -{33,23,-20}, -{33,23,-19}, -{33,23,-18}, -{33,23,-17}, -{33,23,-16}, -{33,23,-15}, -{33,23,-14}, -{33,23,-13}, -{33,23,-12}, -{33,23,-11}, -{33,23,-10}, -{33,23,-9}, -{33,23,-8}, -{33,23,-7}, -{33,23,-6}, -{33,23,-5}, -{33,23,-4}, -{33,23,-3}, -{33,23,-2}, -{33,23,-1}, -{33,23,0}, -{33,23,1}, -{33,23,2}, -{33,23,3}, -{33,23,4}, -{33,23,5}, -{33,23,6}, -{33,23,7}, -{33,23,8}, -{33,23,9}, -{33,23,10}, -{33,23,11}, -{33,23,12}, -{33,23,13}, -{33,23,14}, -{33,23,15}, -{33,23,16}, -{33,23,17}, -{33,23,18}, -{33,23,19}, -{33,23,20}, -{33,23,21}, -{33,23,22}, -{33,23,23}, -{33,23,24}, -{33,23,25}, -{33,23,26}, -{33,23,27}, -{33,23,28}, -{33,23,29}, -{33,23,30}, -{33,23,31}, -{33,23,32}, -{33,23,33}, -{33,23,34}, -{33,23,35}, -{33,23,36}, -{33,23,37}, -{33,23,38}, -{33,23,39}, -{33,23,40}, -{33,23,41}, -{33,23,42}, -{33,23,43}, -{33,24,-60}, -{33,24,-59}, -{33,24,-58}, -{33,24,-57}, -{33,24,-56}, -{33,24,-55}, -{33,24,-54}, -{33,24,-53}, -{33,24,-52}, -{33,24,-51}, -{33,24,-50}, -{33,24,-49}, -{33,24,-48}, -{33,24,-47}, -{33,24,-46}, -{33,24,-45}, -{33,24,-44}, -{33,24,-43}, -{33,24,-42}, -{33,24,-41}, -{33,24,-40}, -{33,24,-39}, -{33,24,-38}, -{33,24,-37}, -{33,24,-36}, -{33,24,-35}, -{33,24,-34}, -{33,24,-33}, -{33,24,-32}, -{33,24,-31}, -{33,24,-30}, -{33,24,-29}, -{33,24,-28}, -{33,24,-27}, -{33,24,-26}, -{33,24,-25}, -{33,24,-24}, -{33,24,-23}, -{33,24,-22}, -{33,24,-21}, -{33,24,-20}, -{33,24,-19}, -{33,24,-18}, -{33,24,-17}, -{33,24,-16}, -{33,24,-15}, -{33,24,-14}, -{33,24,-13}, -{33,24,-12}, -{33,24,-11}, -{33,24,-10}, -{33,24,-9}, -{33,24,-8}, -{33,24,-7}, -{33,24,-6}, -{33,24,-5}, -{33,24,-4}, -{33,24,-3}, -{33,24,-2}, -{33,24,-1}, -{33,24,0}, -{33,24,1}, -{33,24,2}, -{33,24,3}, -{33,24,4}, -{33,24,5}, -{33,24,6}, -{33,24,7}, -{33,24,8}, -{33,24,9}, -{33,24,10}, -{33,24,11}, -{33,24,12}, -{33,24,13}, -{33,24,14}, -{33,24,15}, -{33,24,16}, -{33,24,17}, -{33,24,18}, -{33,24,19}, -{33,24,20}, -{33,24,21}, -{33,24,22}, -{33,24,23}, -{33,24,24}, -{33,24,25}, -{33,24,26}, -{33,24,27}, -{33,24,28}, -{33,24,29}, -{33,24,30}, -{33,24,31}, -{33,24,32}, -{33,24,33}, -{33,24,34}, -{33,24,35}, -{33,24,36}, -{33,24,37}, -{33,24,38}, -{33,24,39}, -{33,24,40}, -{33,24,41}, -{33,24,42}, -{33,24,43}, -{33,25,-61}, -{33,25,-60}, -{33,25,-59}, -{33,25,-58}, -{33,25,-57}, -{33,25,-56}, -{33,25,-55}, -{33,25,-54}, -{33,25,-53}, -{33,25,-52}, -{33,25,-51}, -{33,25,-50}, -{33,25,-49}, -{33,25,-48}, -{33,25,-47}, -{33,25,-46}, -{33,25,-45}, -{33,25,-44}, -{33,25,-43}, -{33,25,-42}, -{33,25,-41}, -{33,25,-40}, -{33,25,-39}, -{33,25,-38}, -{33,25,-37}, -{33,25,-36}, -{33,25,-35}, -{33,25,-34}, -{33,25,-33}, -{33,25,-32}, -{33,25,-31}, -{33,25,-30}, -{33,25,-29}, -{33,25,-28}, -{33,25,-27}, -{33,25,-26}, -{33,25,-25}, -{33,25,-24}, -{33,25,-23}, -{33,25,-22}, -{33,25,-21}, -{33,25,-20}, -{33,25,-19}, -{33,25,-18}, -{33,25,-17}, -{33,25,-16}, -{33,25,-15}, -{33,25,-14}, -{33,25,-13}, -{33,25,-12}, -{33,25,-11}, -{33,25,-10}, -{33,25,-9}, -{33,25,-8}, -{33,25,-7}, -{33,25,-6}, -{33,25,-5}, -{33,25,-4}, -{33,25,-3}, -{33,25,-2}, -{33,25,-1}, -{33,25,0}, -{33,25,1}, -{33,25,2}, -{33,25,3}, -{33,25,4}, -{33,25,5}, -{33,25,6}, -{33,25,7}, -{33,25,8}, -{33,25,9}, -{33,25,10}, -{33,25,11}, -{33,25,12}, -{33,25,13}, -{33,25,14}, -{33,25,15}, -{33,25,16}, -{33,25,17}, -{33,25,18}, -{33,25,19}, -{33,25,20}, -{33,25,21}, -{33,25,22}, -{33,25,23}, -{33,25,24}, -{33,25,25}, -{33,25,26}, -{33,25,27}, -{33,25,28}, -{33,25,29}, -{33,25,30}, -{33,25,31}, -{33,25,32}, -{33,25,33}, -{33,25,34}, -{33,25,35}, -{33,25,36}, -{33,25,37}, -{33,25,38}, -{33,25,39}, -{33,25,40}, -{33,25,41}, -{33,25,42}, -{33,25,43}, -{33,26,-62}, -{33,26,-61}, -{33,26,-60}, -{33,26,-59}, -{33,26,-58}, -{33,26,-57}, -{33,26,-56}, -{33,26,-55}, -{33,26,-54}, -{33,26,-53}, -{33,26,-52}, -{33,26,-51}, -{33,26,-50}, -{33,26,-49}, -{33,26,-48}, -{33,26,-47}, -{33,26,-46}, -{33,26,-45}, -{33,26,-44}, -{33,26,-43}, -{33,26,-42}, -{33,26,-41}, -{33,26,-40}, -{33,26,-39}, -{33,26,-38}, -{33,26,-37}, -{33,26,-36}, -{33,26,-35}, -{33,26,-34}, -{33,26,-33}, -{33,26,-32}, -{33,26,-31}, -{33,26,-30}, -{33,26,-29}, -{33,26,-28}, -{33,26,-27}, -{33,26,-26}, -{33,26,-25}, -{33,26,-24}, -{33,26,-23}, -{33,26,-22}, -{33,26,-21}, -{33,26,-20}, -{33,26,-19}, -{33,26,-18}, -{33,26,-17}, -{33,26,-16}, -{33,26,-15}, -{33,26,-14}, -{33,26,-13}, -{33,26,-12}, -{33,26,-11}, -{33,26,-10}, -{33,26,-9}, -{33,26,-8}, -{33,26,-7}, -{33,26,-6}, -{33,26,-5}, -{33,26,-4}, -{33,26,-3}, -{33,26,-2}, -{33,26,-1}, -{33,26,0}, -{33,26,1}, -{33,26,2}, -{33,26,3}, -{33,26,4}, -{33,26,5}, -{33,26,6}, -{33,26,7}, -{33,26,8}, -{33,26,9}, -{33,26,10}, -{33,26,11}, -{33,26,12}, -{33,26,13}, -{33,26,14}, -{33,26,15}, -{33,26,16}, -{33,26,17}, -{33,26,18}, -{33,26,19}, -{33,26,20}, -{33,26,21}, -{33,26,22}, -{33,26,23}, -{33,26,24}, -{33,26,25}, -{33,26,26}, -{33,26,27}, -{33,26,28}, -{33,26,29}, -{33,26,30}, -{33,26,31}, -{33,26,32}, -{33,26,33}, -{33,26,34}, -{33,26,35}, -{33,26,36}, -{33,26,37}, -{33,26,38}, -{33,26,39}, -{33,26,40}, -{33,26,41}, -{33,26,42}, -{33,26,43}, -{33,27,-63}, -{33,27,-62}, -{33,27,-61}, -{33,27,-60}, -{33,27,-59}, -{33,27,-58}, -{33,27,-57}, -{33,27,-56}, -{33,27,-55}, -{33,27,-54}, -{33,27,-53}, -{33,27,-52}, -{33,27,-51}, -{33,27,-50}, -{33,27,-49}, -{33,27,-48}, -{33,27,-47}, -{33,27,-46}, -{33,27,-45}, -{33,27,-44}, -{33,27,-43}, -{33,27,-42}, -{33,27,-41}, -{33,27,-40}, -{33,27,-39}, -{33,27,-38}, -{33,27,-37}, -{33,27,-36}, -{33,27,-35}, -{33,27,-34}, -{33,27,-33}, -{33,27,-32}, -{33,27,-31}, -{33,27,-30}, -{33,27,-29}, -{33,27,-28}, -{33,27,-27}, -{33,27,-26}, -{33,27,-25}, -{33,27,-24}, -{33,27,-23}, -{33,27,-22}, -{33,27,-21}, -{33,27,-20}, -{33,27,-19}, -{33,27,-18}, -{33,27,-17}, -{33,27,-16}, -{33,27,-15}, -{33,27,-14}, -{33,27,-13}, -{33,27,-12}, -{33,27,-11}, -{33,27,-10}, -{33,27,-9}, -{33,27,-8}, -{33,27,-7}, -{33,27,-6}, -{33,27,-5}, -{33,27,-4}, -{33,27,-3}, -{33,27,-2}, -{33,27,-1}, -{33,27,0}, -{33,27,1}, -{33,27,2}, -{33,27,3}, -{33,27,4}, -{33,27,5}, -{33,27,6}, -{33,27,7}, -{33,27,8}, -{33,27,9}, -{33,27,10}, -{33,27,11}, -{33,27,12}, -{33,27,13}, -{33,27,14}, -{33,27,15}, -{33,27,16}, -{33,27,17}, -{33,27,18}, -{33,27,19}, -{33,27,20}, -{33,27,21}, -{33,27,22}, -{33,27,23}, -{33,27,24}, -{33,27,25}, -{33,27,26}, -{33,27,27}, -{33,27,28}, -{33,27,29}, -{33,27,30}, -{33,27,31}, -{33,27,32}, -{33,27,33}, -{33,27,34}, -{33,27,35}, -{33,27,36}, -{33,27,37}, -{33,27,38}, -{33,27,39}, -{33,27,40}, -{33,27,41}, -{33,27,42}, -{33,27,43}, -{33,27,44}, -{33,28,-64}, -{33,28,-63}, -{33,28,-62}, -{33,28,-61}, -{33,28,-60}, -{33,28,-59}, -{33,28,-58}, -{33,28,-57}, -{33,28,-56}, -{33,28,-55}, -{33,28,-54}, -{33,28,-53}, -{33,28,-52}, -{33,28,-51}, -{33,28,-50}, -{33,28,-49}, -{33,28,-48}, -{33,28,-47}, -{33,28,-46}, -{33,28,-45}, -{33,28,-44}, -{33,28,-43}, -{33,28,-42}, -{33,28,-41}, -{33,28,-40}, -{33,28,-39}, -{33,28,-38}, -{33,28,-37}, -{33,28,-36}, -{33,28,-35}, -{33,28,-34}, -{33,28,-33}, -{33,28,-32}, -{33,28,-31}, -{33,28,-30}, -{33,28,-29}, -{33,28,-28}, -{33,28,-27}, -{33,28,-26}, -{33,28,-25}, -{33,28,-24}, -{33,28,-23}, -{33,28,-22}, -{33,28,-21}, -{33,28,-20}, -{33,28,-19}, -{33,28,-18}, -{33,28,-17}, -{33,28,-16}, -{33,28,-15}, -{33,28,-14}, -{33,28,-13}, -{33,28,-12}, -{33,28,-11}, -{33,28,-10}, -{33,28,-9}, -{33,28,-8}, -{33,28,-7}, -{33,28,-6}, -{33,28,-5}, -{33,28,-4}, -{33,28,-3}, -{33,28,-2}, -{33,28,-1}, -{33,28,0}, -{33,28,1}, -{33,28,2}, -{33,28,3}, -{33,28,4}, -{33,28,5}, -{33,28,6}, -{33,28,7}, -{33,28,8}, -{33,28,9}, -{33,28,10}, -{33,28,11}, -{33,28,12}, -{33,28,13}, -{33,28,14}, -{33,28,15}, -{33,28,16}, -{33,28,17}, -{33,28,18}, -{33,28,19}, -{33,28,20}, -{33,28,21}, -{33,28,22}, -{33,28,23}, -{33,28,24}, -{33,28,25}, -{33,28,26}, -{33,28,27}, -{33,28,28}, -{33,28,29}, -{33,28,30}, -{33,28,31}, -{33,28,32}, -{33,28,33}, -{33,28,34}, -{33,28,35}, -{33,28,36}, -{33,28,37}, -{33,28,38}, -{33,28,39}, -{33,28,40}, -{33,28,41}, -{33,28,42}, -{33,28,43}, -{33,28,44}, -{33,29,-64}, -{33,29,-63}, -{33,29,-62}, -{33,29,-61}, -{33,29,-60}, -{33,29,-59}, -{33,29,-58}, -{33,29,-57}, -{33,29,-56}, -{33,29,-55}, -{33,29,-54}, -{33,29,-53}, -{33,29,-52}, -{33,29,-51}, -{33,29,-50}, -{33,29,-49}, -{33,29,-48}, -{33,29,-47}, -{33,29,-46}, -{33,29,-45}, -{33,29,-44}, -{33,29,-43}, -{33,29,-42}, -{33,29,-41}, -{33,29,-40}, -{33,29,-39}, -{33,29,-38}, -{33,29,-37}, -{33,29,-36}, -{33,29,-35}, -{33,29,-34}, -{33,29,-33}, -{33,29,-32}, -{33,29,-31}, -{33,29,-30}, -{33,29,-29}, -{33,29,-28}, -{33,29,-27}, -{33,29,-26}, -{33,29,-25}, -{33,29,-24}, -{33,29,-23}, -{33,29,-22}, -{33,29,-21}, -{33,29,-20}, -{33,29,-19}, -{33,29,-18}, -{33,29,-17}, -{33,29,-16}, -{33,29,-15}, -{33,29,-14}, -{33,29,-13}, -{33,29,-12}, -{33,29,-11}, -{33,29,-10}, -{33,29,-9}, -{33,29,-8}, -{33,29,-7}, -{33,29,-6}, -{33,29,-5}, -{33,29,-4}, -{33,29,-3}, -{33,29,-2}, -{33,29,-1}, -{33,29,0}, -{33,29,1}, -{33,29,2}, -{33,29,3}, -{33,29,4}, -{33,29,5}, -{33,29,6}, -{33,29,7}, -{33,29,8}, -{33,29,9}, -{33,29,10}, -{33,29,11}, -{33,29,12}, -{33,29,13}, -{33,29,14}, -{33,29,15}, -{33,29,16}, -{33,29,17}, -{33,29,18}, -{33,29,19}, -{33,29,20}, -{33,29,21}, -{33,29,22}, -{33,29,23}, -{33,29,24}, -{33,29,25}, -{33,29,26}, -{33,29,27}, -{33,29,28}, -{33,29,29}, -{33,29,30}, -{33,29,31}, -{33,29,32}, -{33,29,33}, -{33,29,34}, -{33,29,35}, -{33,29,36}, -{33,29,37}, -{33,29,38}, -{33,29,39}, -{33,29,40}, -{33,29,41}, -{33,29,42}, -{33,29,43}, -{33,29,44}, -{33,30,-65}, -{33,30,-64}, -{33,30,-63}, -{33,30,-62}, -{33,30,-61}, -{33,30,-60}, -{33,30,-59}, -{33,30,-58}, -{33,30,-57}, -{33,30,-56}, -{33,30,-55}, -{33,30,-54}, -{33,30,-53}, -{33,30,-52}, -{33,30,-51}, -{33,30,-50}, -{33,30,-49}, -{33,30,-48}, -{33,30,-47}, -{33,30,-46}, -{33,30,-45}, -{33,30,-44}, -{33,30,-43}, -{33,30,-42}, -{33,30,-41}, -{33,30,-40}, -{33,30,-39}, -{33,30,-38}, -{33,30,-37}, -{33,30,-36}, -{33,30,-35}, -{33,30,-34}, -{33,30,-33}, -{33,30,-32}, -{33,30,-31}, -{33,30,-30}, -{33,30,-29}, -{33,30,-28}, -{33,30,-27}, -{33,30,-26}, -{33,30,-25}, -{33,30,-24}, -{33,30,-23}, -{33,30,-22}, -{33,30,-21}, -{33,30,-20}, -{33,30,-19}, -{33,30,-18}, -{33,30,-17}, -{33,30,-16}, -{33,30,-15}, -{33,30,-14}, -{33,30,-13}, -{33,30,-12}, -{33,30,-11}, -{33,30,-10}, -{33,30,-9}, -{33,30,-8}, -{33,30,-7}, -{33,30,-6}, -{33,30,-5}, -{33,30,-4}, -{33,30,-3}, -{33,30,-2}, -{33,30,-1}, -{33,30,0}, -{33,30,1}, -{33,30,2}, -{33,30,3}, -{33,30,4}, -{33,30,5}, -{33,30,6}, -{33,30,7}, -{33,30,8}, -{33,30,9}, -{33,30,10}, -{33,30,11}, -{33,30,12}, -{33,30,13}, -{33,30,14}, -{33,30,15}, -{33,30,16}, -{33,30,17}, -{33,30,18}, -{33,30,19}, -{33,30,20}, -{33,30,21}, -{33,30,22}, -{33,30,23}, -{33,30,24}, -{33,30,25}, -{33,30,26}, -{33,30,27}, -{33,30,28}, -{33,30,29}, -{33,30,30}, -{33,30,31}, -{33,30,32}, -{33,30,33}, -{33,30,34}, -{33,30,35}, -{33,30,36}, -{33,30,37}, -{33,30,38}, -{33,30,39}, -{33,30,40}, -{33,30,41}, -{33,30,42}, -{33,30,43}, -{33,30,44}, -{33,31,-66}, -{33,31,-65}, -{33,31,-64}, -{33,31,-63}, -{33,31,-62}, -{33,31,-61}, -{33,31,-60}, -{33,31,-59}, -{33,31,-58}, -{33,31,-57}, -{33,31,-56}, -{33,31,-55}, -{33,31,-54}, -{33,31,-53}, -{33,31,-52}, -{33,31,-51}, -{33,31,-50}, -{33,31,-49}, -{33,31,-48}, -{33,31,-47}, -{33,31,-46}, -{33,31,-45}, -{33,31,-44}, -{33,31,-43}, -{33,31,-42}, -{33,31,-41}, -{33,31,-40}, -{33,31,-39}, -{33,31,-38}, -{33,31,-37}, -{33,31,-36}, -{33,31,-35}, -{33,31,-34}, -{33,31,-33}, -{33,31,-32}, -{33,31,-31}, -{33,31,-30}, -{33,31,-29}, -{33,31,-28}, -{33,31,-27}, -{33,31,-26}, -{33,31,-25}, -{33,31,-24}, -{33,31,-23}, -{33,31,-22}, -{33,31,-21}, -{33,31,-20}, -{33,31,-19}, -{33,31,-18}, -{33,31,-17}, -{33,31,-16}, -{33,31,-15}, -{33,31,-14}, -{33,31,-13}, -{33,31,-12}, -{33,31,-11}, -{33,31,-10}, -{33,31,-9}, -{33,31,-8}, -{33,31,-7}, -{33,31,-6}, -{33,31,-5}, -{33,31,-4}, -{33,31,-3}, -{33,31,-2}, -{33,31,-1}, -{33,31,0}, -{33,31,1}, -{33,31,2}, -{33,31,3}, -{33,31,4}, -{33,31,5}, -{33,31,6}, -{33,31,7}, -{33,31,8}, -{33,31,9}, -{33,31,10}, -{33,31,11}, -{33,31,12}, -{33,31,13}, -{33,31,14}, -{33,31,15}, -{33,31,16}, -{33,31,17}, -{33,31,18}, -{33,31,19}, -{33,31,20}, -{33,31,21}, -{33,31,22}, -{33,31,23}, -{33,31,24}, -{33,31,25}, -{33,31,26}, -{33,31,27}, -{33,31,28}, -{33,31,29}, -{33,31,30}, -{33,31,31}, -{33,31,32}, -{33,31,33}, -{33,31,34}, -{33,31,35}, -{33,31,36}, -{33,31,37}, -{33,31,38}, -{33,31,39}, -{33,31,40}, -{33,31,41}, -{33,31,42}, -{33,31,43}, -{33,31,44}, -{33,32,-67}, -{33,32,-66}, -{33,32,-65}, -{33,32,-64}, -{33,32,-63}, -{33,32,-62}, -{33,32,-61}, -{33,32,-60}, -{33,32,-59}, -{33,32,-58}, -{33,32,-57}, -{33,32,-56}, -{33,32,-55}, -{33,32,-54}, -{33,32,-53}, -{33,32,-52}, -{33,32,-51}, -{33,32,-50}, -{33,32,-49}, -{33,32,-48}, -{33,32,-47}, -{33,32,-46}, -{33,32,-45}, -{33,32,-44}, -{33,32,-43}, -{33,32,-42}, -{33,32,-41}, -{33,32,-40}, -{33,32,-39}, -{33,32,-38}, -{33,32,-37}, -{33,32,-36}, -{33,32,-35}, -{33,32,-34}, -{33,32,-33}, -{33,32,-32}, -{33,32,-31}, -{33,32,-30}, -{33,32,-29}, -{33,32,-28}, -{33,32,-27}, -{33,32,-26}, -{33,32,-25}, -{33,32,-24}, -{33,32,-23}, -{33,32,-22}, -{33,32,-21}, -{33,32,-20}, -{33,32,-19}, -{33,32,-18}, -{33,32,-17}, -{33,32,-16}, -{33,32,-15}, -{33,32,-14}, -{33,32,-13}, -{33,32,-12}, -{33,32,-11}, -{33,32,-10}, -{33,32,-9}, -{33,32,-8}, -{33,32,-7}, -{33,32,-6}, -{33,32,-5}, -{33,32,-4}, -{33,32,-3}, -{33,32,-2}, -{33,32,-1}, -{33,32,0}, -{33,32,1}, -{33,32,2}, -{33,32,3}, -{33,32,4}, -{33,32,5}, -{33,32,6}, -{33,32,7}, -{33,32,8}, -{33,32,9}, -{33,32,10}, -{33,32,11}, -{33,32,12}, -{33,32,13}, -{33,32,14}, -{33,32,15}, -{33,32,16}, -{33,32,17}, -{33,32,18}, -{33,32,19}, -{33,32,20}, -{33,32,21}, -{33,32,22}, -{33,32,23}, -{33,32,24}, -{33,32,25}, -{33,32,26}, -{33,32,27}, -{33,32,28}, -{33,32,29}, -{33,32,30}, -{33,32,31}, -{33,32,32}, -{33,32,33}, -{33,32,34}, -{33,32,35}, -{33,32,36}, -{33,32,37}, -{33,32,38}, -{33,32,39}, -{33,32,40}, -{33,32,41}, -{33,32,42}, -{33,32,43}, -{33,32,44}, -{33,33,-68}, -{33,33,-67}, -{33,33,-66}, -{33,33,-65}, -{33,33,-64}, -{33,33,-63}, -{33,33,-62}, -{33,33,-61}, -{33,33,-60}, -{33,33,-59}, -{33,33,-58}, -{33,33,-57}, -{33,33,-56}, -{33,33,-55}, -{33,33,-54}, -{33,33,-53}, -{33,33,-52}, -{33,33,-51}, -{33,33,-50}, -{33,33,-49}, -{33,33,-48}, -{33,33,-47}, -{33,33,-46}, -{33,33,-45}, -{33,33,-44}, -{33,33,-43}, -{33,33,-42}, -{33,33,-41}, -{33,33,-40}, -{33,33,-39}, -{33,33,-38}, -{33,33,-37}, -{33,33,-36}, -{33,33,-35}, -{33,33,-34}, -{33,33,-33}, -{33,33,-32}, -{33,33,-31}, -{33,33,-30}, -{33,33,-29}, -{33,33,-28}, -{33,33,-27}, -{33,33,-26}, -{33,33,-25}, -{33,33,-24}, -{33,33,-23}, -{33,33,-22}, -{33,33,-21}, -{33,33,-20}, -{33,33,-19}, -{33,33,-18}, -{33,33,-17}, -{33,33,-16}, -{33,33,-15}, -{33,33,-14}, -{33,33,-13}, -{33,33,-12}, -{33,33,-11}, -{33,33,-10}, -{33,33,-9}, -{33,33,-8}, -{33,33,-7}, -{33,33,-6}, -{33,33,-5}, -{33,33,-4}, -{33,33,-3}, -{33,33,-2}, -{33,33,-1}, -{33,33,0}, -{33,33,1}, -{33,33,2}, -{33,33,3}, -{33,33,4}, -{33,33,5}, -{33,33,6}, -{33,33,7}, -{33,33,8}, -{33,33,9}, -{33,33,10}, -{33,33,11}, -{33,33,12}, -{33,33,13}, -{33,33,14}, -{33,33,15}, -{33,33,16}, -{33,33,17}, -{33,33,18}, -{33,33,19}, -{33,33,20}, -{33,33,21}, -{33,33,22}, -{33,33,23}, -{33,33,24}, -{33,33,25}, -{33,33,26}, -{33,33,27}, -{33,33,28}, -{33,33,29}, -{33,33,30}, -{33,33,31}, -{33,33,32}, -{33,33,33}, -{33,33,34}, -{33,33,35}, -{33,33,36}, -{33,33,37}, -{33,33,38}, -{33,33,39}, -{33,33,40}, -{33,33,41}, -{33,33,42}, -{33,33,43}, -{33,33,44}, -{33,34,-69}, -{33,34,-68}, -{33,34,-67}, -{33,34,-66}, -{33,34,-65}, -{33,34,-64}, -{33,34,-63}, -{33,34,-62}, -{33,34,-61}, -{33,34,-60}, -{33,34,-59}, -{33,34,-58}, -{33,34,-57}, -{33,34,-56}, -{33,34,-55}, -{33,34,-54}, -{33,34,-53}, -{33,34,-52}, -{33,34,-51}, -{33,34,-50}, -{33,34,-49}, -{33,34,-48}, -{33,34,-47}, -{33,34,-46}, -{33,34,-45}, -{33,34,-44}, -{33,34,-43}, -{33,34,-42}, -{33,34,-41}, -{33,34,-40}, -{33,34,-39}, -{33,34,-38}, -{33,34,-37}, -{33,34,-36}, -{33,34,-35}, -{33,34,-34}, -{33,34,-33}, -{33,34,-32}, -{33,34,-31}, -{33,34,-30}, -{33,34,-29}, -{33,34,-28}, -{33,34,-27}, -{33,34,-26}, -{33,34,-25}, -{33,34,-24}, -{33,34,-23}, -{33,34,-22}, -{33,34,-21}, -{33,34,-20}, -{33,34,-19}, -{33,34,-18}, -{33,34,-17}, -{33,34,-16}, -{33,34,-15}, -{33,34,-14}, -{33,34,-13}, -{33,34,-12}, -{33,34,-11}, -{33,34,-10}, -{33,34,-9}, -{33,34,-8}, -{33,34,-7}, -{33,34,-6}, -{33,34,-5}, -{33,34,-4}, -{33,34,-3}, -{33,34,-2}, -{33,34,-1}, -{33,34,0}, -{33,34,1}, -{33,34,2}, -{33,34,3}, -{33,34,4}, -{33,34,5}, -{33,34,6}, -{33,34,7}, -{33,34,8}, -{33,34,9}, -{33,34,10}, -{33,34,11}, -{33,34,12}, -{33,34,13}, -{33,34,14}, -{33,34,15}, -{33,34,16}, -{33,34,17}, -{33,34,18}, -{33,34,19}, -{33,34,20}, -{33,34,21}, -{33,34,22}, -{33,34,23}, -{33,34,24}, -{33,34,25}, -{33,34,26}, -{33,34,27}, -{33,34,28}, -{33,34,29}, -{33,34,30}, -{33,34,31}, -{33,34,32}, -{33,34,33}, -{33,34,34}, -{33,34,35}, -{33,34,36}, -{33,34,37}, -{33,34,38}, -{33,34,39}, -{33,34,40}, -{33,34,41}, -{33,34,42}, -{33,34,43}, -{33,34,44}, -{33,35,-70}, -{33,35,-69}, -{33,35,-68}, -{33,35,-67}, -{33,35,-66}, -{33,35,-65}, -{33,35,-64}, -{33,35,-63}, -{33,35,-62}, -{33,35,-61}, -{33,35,-60}, -{33,35,-59}, -{33,35,-58}, -{33,35,-57}, -{33,35,-56}, -{33,35,-55}, -{33,35,-54}, -{33,35,-53}, -{33,35,-52}, -{33,35,-51}, -{33,35,-50}, -{33,35,-49}, -{33,35,-48}, -{33,35,-47}, -{33,35,-46}, -{33,35,-45}, -{33,35,-44}, -{33,35,-43}, -{33,35,-42}, -{33,35,-41}, -{33,35,-40}, -{33,35,-39}, -{33,35,-38}, -{33,35,-37}, -{33,35,-36}, -{33,35,-35}, -{33,35,-34}, -{33,35,-33}, -{33,35,-32}, -{33,35,-31}, -{33,35,-30}, -{33,35,-29}, -{33,35,-28}, -{33,35,-27}, -{33,35,-26}, -{33,35,-25}, -{33,35,-24}, -{33,35,-23}, -{33,35,-22}, -{33,35,-21}, -{33,35,-20}, -{33,35,-19}, -{33,35,-18}, -{33,35,-17}, -{33,35,-16}, -{33,35,-15}, -{33,35,-14}, -{33,35,-13}, -{33,35,-12}, -{33,35,-11}, -{33,35,-10}, -{33,35,-9}, -{33,35,-8}, -{33,35,-7}, -{33,35,-6}, -{33,35,-5}, -{33,35,-4}, -{33,35,-3}, -{33,35,-2}, -{33,35,-1}, -{33,35,0}, -{33,35,1}, -{33,35,2}, -{33,35,3}, -{33,35,4}, -{33,35,5}, -{33,35,6}, -{33,35,7}, -{33,35,8}, -{33,35,9}, -{33,35,10}, -{33,35,11}, -{33,35,12}, -{33,35,13}, -{33,35,14}, -{33,35,15}, -{33,35,16}, -{33,35,17}, -{33,35,18}, -{33,35,19}, -{33,35,20}, -{33,35,21}, -{33,35,22}, -{33,35,23}, -{33,35,24}, -{33,35,25}, -{33,35,26}, -{33,35,27}, -{33,35,28}, -{33,35,29}, -{33,35,30}, -{33,35,31}, -{33,35,32}, -{33,35,33}, -{33,35,34}, -{33,35,35}, -{33,35,36}, -{33,35,37}, -{33,35,38}, -{33,35,39}, -{33,35,40}, -{33,35,41}, -{33,35,42}, -{33,35,43}, -{33,35,44}, -{33,36,-71}, -{33,36,-70}, -{33,36,-69}, -{33,36,-68}, -{33,36,-67}, -{33,36,-66}, -{33,36,-65}, -{33,36,-64}, -{33,36,-63}, -{33,36,-62}, -{33,36,-61}, -{33,36,-60}, -{33,36,-59}, -{33,36,-58}, -{33,36,-57}, -{33,36,-56}, -{33,36,-55}, -{33,36,-54}, -{33,36,-53}, -{33,36,-52}, -{33,36,-51}, -{33,36,-50}, -{33,36,-49}, -{33,36,-48}, -{33,36,-47}, -{33,36,-46}, -{33,36,-45}, -{33,36,-44}, -{33,36,-43}, -{33,36,-42}, -{33,36,-41}, -{33,36,-40}, -{33,36,-39}, -{33,36,-38}, -{33,36,-37}, -{33,36,-36}, -{33,36,-35}, -{33,36,-34}, -{33,36,-33}, -{33,36,-32}, -{33,36,-31}, -{33,36,-30}, -{33,36,-29}, -{33,36,-28}, -{33,36,-27}, -{33,36,-26}, -{33,36,-25}, -{33,36,-24}, -{33,36,-23}, -{33,36,-22}, -{33,36,-21}, -{33,36,-20}, -{33,36,-19}, -{33,36,-18}, -{33,36,-17}, -{33,36,-16}, -{33,36,-15}, -{33,36,-14}, -{33,36,-13}, -{33,36,-12}, -{33,36,-11}, -{33,36,-10}, -{33,36,-9}, -{33,36,-8}, -{33,36,-7}, -{33,36,-6}, -{33,36,-5}, -{33,36,-4}, -{33,36,-3}, -{33,36,-2}, -{33,36,-1}, -{33,36,0}, -{33,36,1}, -{33,36,2}, -{33,36,3}, -{33,36,4}, -{33,36,5}, -{33,36,6}, -{33,36,7}, -{33,36,8}, -{33,36,9}, -{33,36,10}, -{33,36,11}, -{33,36,12}, -{33,36,13}, -{33,36,14}, -{33,36,15}, -{33,36,16}, -{33,36,17}, -{33,36,18}, -{33,36,19}, -{33,36,20}, -{33,36,21}, -{33,36,22}, -{33,36,23}, -{33,36,24}, -{33,36,25}, -{33,36,26}, -{33,36,27}, -{33,36,28}, -{33,36,29}, -{33,36,30}, -{33,36,31}, -{33,36,32}, -{33,36,33}, -{33,36,34}, -{33,36,35}, -{33,36,36}, -{33,36,37}, -{33,36,38}, -{33,36,39}, -{33,36,40}, -{33,36,41}, -{33,36,42}, -{33,36,43}, -{33,36,44}, -{33,37,-72}, -{33,37,-71}, -{33,37,-70}, -{33,37,-69}, -{33,37,-68}, -{33,37,-67}, -{33,37,-66}, -{33,37,-65}, -{33,37,-64}, -{33,37,-63}, -{33,37,-62}, -{33,37,-61}, -{33,37,-60}, -{33,37,-59}, -{33,37,-58}, -{33,37,-57}, -{33,37,-56}, -{33,37,-55}, -{33,37,-54}, -{33,37,-53}, -{33,37,-52}, -{33,37,-51}, -{33,37,-50}, -{33,37,-49}, -{33,37,-48}, -{33,37,-47}, -{33,37,-46}, -{33,37,-45}, -{33,37,-44}, -{33,37,-43}, -{33,37,-42}, -{33,37,-41}, -{33,37,-40}, -{33,37,-39}, -{33,37,-38}, -{33,37,-37}, -{33,37,-36}, -{33,37,-35}, -{33,37,-34}, -{33,37,-33}, -{33,37,-32}, -{33,37,-31}, -{33,37,-30}, -{33,37,-29}, -{33,37,-28}, -{33,37,-27}, -{33,37,-26}, -{33,37,-25}, -{33,37,-24}, -{33,37,-23}, -{33,37,-22}, -{33,37,-21}, -{33,37,-20}, -{33,37,-19}, -{33,37,-18}, -{33,37,-17}, -{33,37,-16}, -{33,37,-15}, -{33,37,-14}, -{33,37,-13}, -{33,37,-12}, -{33,37,-11}, -{33,37,-10}, -{33,37,-9}, -{33,37,-8}, -{33,37,-7}, -{33,37,-6}, -{33,37,-5}, -{33,37,-4}, -{33,37,-3}, -{33,37,-2}, -{33,37,-1}, -{33,37,0}, -{33,37,1}, -{33,37,2}, -{33,37,3}, -{33,37,4}, -{33,37,5}, -{33,37,6}, -{33,37,7}, -{33,37,8}, -{33,37,9}, -{33,37,10}, -{33,37,11}, -{33,37,12}, -{33,37,13}, -{33,37,14}, -{33,37,15}, -{33,37,16}, -{33,37,17}, -{33,37,18}, -{33,37,19}, -{33,37,20}, -{33,37,21}, -{33,37,22}, -{33,37,23}, -{33,37,24}, -{33,37,25}, -{33,37,26}, -{33,37,27}, -{33,37,28}, -{33,37,29}, -{33,37,30}, -{33,37,31}, -{33,37,32}, -{33,37,33}, -{33,37,34}, -{33,37,35}, -{33,37,36}, -{33,37,37}, -{33,37,38}, -{33,37,39}, -{33,37,40}, -{33,37,41}, -{33,37,42}, -{33,37,43}, -{33,37,44}, -{33,37,45}, -{33,38,-73}, -{33,38,-72}, -{33,38,-71}, -{33,38,-70}, -{33,38,-69}, -{33,38,-68}, -{33,38,-67}, -{33,38,-66}, -{33,38,-65}, -{33,38,-64}, -{33,38,-63}, -{33,38,-62}, -{33,38,-61}, -{33,38,-60}, -{33,38,-59}, -{33,38,-58}, -{33,38,-57}, -{33,38,-56}, -{33,38,-55}, -{33,38,-54}, -{33,38,-53}, -{33,38,-52}, -{33,38,-51}, -{33,38,-50}, -{33,38,-49}, -{33,38,-48}, -{33,38,-47}, -{33,38,-46}, -{33,38,-45}, -{33,38,-44}, -{33,38,-43}, -{33,38,-42}, -{33,38,-41}, -{33,38,-40}, -{33,38,-39}, -{33,38,-38}, -{33,38,-37}, -{33,38,-36}, -{33,38,-35}, -{33,38,-34}, -{33,38,-33}, -{33,38,-32}, -{33,38,-31}, -{33,38,-30}, -{33,38,-29}, -{33,38,-28}, -{33,38,-27}, -{33,38,-26}, -{33,38,-25}, -{33,38,-24}, -{33,38,-23}, -{33,38,-22}, -{33,38,-21}, -{33,38,-20}, -{33,38,-19}, -{33,38,-18}, -{33,38,-17}, -{33,38,-16}, -{33,38,-15}, -{33,38,-14}, -{33,38,-13}, -{33,38,-12}, -{33,38,-11}, -{33,38,-10}, -{33,38,-9}, -{33,38,-8}, -{33,38,-7}, -{33,38,-6}, -{33,38,-5}, -{33,38,-4}, -{33,38,-3}, -{33,38,-2}, -{33,38,-1}, -{33,38,0}, -{33,38,1}, -{33,38,2}, -{33,38,3}, -{33,38,4}, -{33,38,5}, -{33,38,6}, -{33,38,7}, -{33,38,8}, -{33,38,9}, -{33,38,10}, -{33,38,11}, -{33,38,12}, -{33,38,13}, -{33,38,14}, -{33,38,15}, -{33,38,16}, -{33,38,17}, -{33,38,18}, -{33,38,19}, -{33,38,20}, -{33,38,21}, -{33,38,22}, -{33,38,23}, -{33,38,24}, -{33,38,25}, -{33,38,26}, -{33,38,27}, -{33,38,28}, -{33,38,29}, -{33,38,30}, -{33,38,31}, -{33,38,32}, -{33,38,33}, -{33,38,34}, -{33,38,35}, -{33,38,36}, -{33,38,37}, -{33,38,38}, -{33,38,39}, -{33,38,40}, -{33,38,41}, -{33,38,42}, -{33,38,43}, -{33,38,44}, -{33,38,45}, -{33,39,-74}, -{33,39,-73}, -{33,39,-72}, -{33,39,-71}, -{33,39,-70}, -{33,39,-69}, -{33,39,-68}, -{33,39,-67}, -{33,39,-66}, -{33,39,-65}, -{33,39,-64}, -{33,39,-63}, -{33,39,-62}, -{33,39,-61}, -{33,39,-60}, -{33,39,-59}, -{33,39,-58}, -{33,39,-57}, -{33,39,-56}, -{33,39,-55}, -{33,39,-54}, -{33,39,-53}, -{33,39,-52}, -{33,39,-51}, -{33,39,-50}, -{33,39,-49}, -{33,39,-48}, -{33,39,-47}, -{33,39,-46}, -{33,39,-45}, -{33,39,-44}, -{33,39,-43}, -{33,39,-42}, -{33,39,-41}, -{33,39,-40}, -{33,39,-39}, -{33,39,-38}, -{33,39,-37}, -{33,39,-36}, -{33,39,-35}, -{33,39,-34}, -{33,39,-33}, -{33,39,-32}, -{33,39,-31}, -{33,39,-30}, -{33,39,-29}, -{33,39,-28}, -{33,39,-27}, -{33,39,-26}, -{33,39,-25}, -{33,39,-24}, -{33,39,-23}, -{33,39,-22}, -{33,39,-21}, -{33,39,-20}, -{33,39,-19}, -{33,39,-18}, -{33,39,-17}, -{33,39,-16}, -{33,39,-15}, -{33,39,-14}, -{33,39,-13}, -{33,39,-12}, -{33,39,-11}, -{33,39,-10}, -{33,39,-9}, -{33,39,-8}, -{33,39,-7}, -{33,39,-6}, -{33,39,-5}, -{33,39,-4}, -{33,39,-3}, -{33,39,-2}, -{33,39,-1}, -{33,39,0}, -{33,39,1}, -{33,39,2}, -{33,39,3}, -{33,39,4}, -{33,39,5}, -{33,39,6}, -{33,39,7}, -{33,39,8}, -{33,39,9}, -{33,39,10}, -{33,39,11}, -{33,39,12}, -{33,39,13}, -{33,39,14}, -{33,39,15}, -{33,39,16}, -{33,39,17}, -{33,39,18}, -{33,39,19}, -{33,39,20}, -{33,39,21}, -{33,39,22}, -{33,39,23}, -{33,39,24}, -{33,39,25}, -{33,39,26}, -{33,39,27}, -{33,39,28}, -{33,39,29}, -{33,39,30}, -{33,39,31}, -{33,39,32}, -{33,39,33}, -{33,39,34}, -{33,39,35}, -{33,39,36}, -{33,39,37}, -{33,39,38}, -{33,39,39}, -{33,39,40}, -{33,39,41}, -{33,39,42}, -{33,39,43}, -{33,39,44}, -{33,39,45}, -{33,40,-75}, -{33,40,-74}, -{33,40,-73}, -{33,40,-72}, -{33,40,-71}, -{33,40,-70}, -{33,40,-69}, -{33,40,-68}, -{33,40,-67}, -{33,40,-66}, -{33,40,-65}, -{33,40,-64}, -{33,40,-63}, -{33,40,-62}, -{33,40,-61}, -{33,40,-60}, -{33,40,-59}, -{33,40,-58}, -{33,40,-57}, -{33,40,-56}, -{33,40,-55}, -{33,40,-54}, -{33,40,-53}, -{33,40,-52}, -{33,40,-51}, -{33,40,-50}, -{33,40,-49}, -{33,40,-48}, -{33,40,-47}, -{33,40,-46}, -{33,40,-45}, -{33,40,-44}, -{33,40,-43}, -{33,40,-42}, -{33,40,-41}, -{33,40,-40}, -{33,40,-39}, -{33,40,-38}, -{33,40,-37}, -{33,40,-36}, -{33,40,-35}, -{33,40,-34}, -{33,40,-33}, -{33,40,-32}, -{33,40,-31}, -{33,40,-30}, -{33,40,-29}, -{33,40,-28}, -{33,40,-27}, -{33,40,-26}, -{33,40,-25}, -{33,40,-24}, -{33,40,-23}, -{33,40,-22}, -{33,40,-21}, -{33,40,-20}, -{33,40,-19}, -{33,40,-18}, -{33,40,-17}, -{33,40,-16}, -{33,40,-15}, -{33,40,-14}, -{33,40,-13}, -{33,40,-12}, -{33,40,-11}, -{33,40,-10}, -{33,40,-9}, -{33,40,-8}, -{33,40,-7}, -{33,40,-6}, -{33,40,-5}, -{33,40,-4}, -{33,40,-3}, -{33,40,-2}, -{33,40,-1}, -{33,40,0}, -{33,40,1}, -{33,40,2}, -{33,40,3}, -{33,40,4}, -{33,40,5}, -{33,40,6}, -{33,40,7}, -{33,40,8}, -{33,40,9}, -{33,40,10}, -{33,40,11}, -{33,40,12}, -{33,40,13}, -{33,40,14}, -{33,40,15}, -{33,40,16}, -{33,40,17}, -{33,40,18}, -{33,40,19}, -{33,40,20}, -{33,40,21}, -{33,40,22}, -{33,40,23}, -{33,40,24}, -{33,40,25}, -{33,40,26}, -{33,40,27}, -{33,40,28}, -{33,40,29}, -{33,40,30}, -{33,40,31}, -{33,40,32}, -{33,40,33}, -{33,40,34}, -{33,40,35}, -{33,40,36}, -{33,40,37}, -{33,40,38}, -{33,40,39}, -{33,40,40}, -{33,40,41}, -{33,40,42}, -{33,40,43}, -{33,40,44}, -{33,40,45}, -{33,41,-75}, -{33,41,-74}, -{33,41,-73}, -{33,41,-72}, -{33,41,-71}, -{33,41,-70}, -{33,41,-69}, -{33,41,-68}, -{33,41,-67}, -{33,41,-66}, -{33,41,-65}, -{33,41,-64}, -{33,41,-63}, -{33,41,-62}, -{33,41,-61}, -{33,41,-60}, -{33,41,-59}, -{33,41,-58}, -{33,41,-57}, -{33,41,-56}, -{33,41,-55}, -{33,41,-54}, -{33,41,-53}, -{33,41,-52}, -{33,41,-51}, -{33,41,-50}, -{33,41,-49}, -{33,41,-48}, -{33,41,-47}, -{33,41,-46}, -{33,41,-45}, -{33,41,-44}, -{33,41,-43}, -{33,41,-42}, -{33,41,-41}, -{33,41,-40}, -{33,41,-39}, -{33,41,-38}, -{33,41,-37}, -{33,41,-36}, -{33,41,-35}, -{33,41,-34}, -{33,41,-33}, -{33,41,-32}, -{33,41,-31}, -{33,41,-30}, -{33,41,-29}, -{33,41,-28}, -{33,41,-27}, -{33,41,-26}, -{33,41,-25}, -{33,41,-24}, -{33,41,-23}, -{33,41,-22}, -{33,41,-21}, -{33,41,-20}, -{33,41,-19}, -{33,41,-18}, -{33,41,-17}, -{33,41,-16}, -{33,41,-15}, -{33,41,-14}, -{33,41,-13}, -{33,41,-12}, -{33,41,-11}, -{33,41,-10}, -{33,41,-9}, -{33,41,-8}, -{33,41,-7}, -{33,41,-6}, -{33,41,-5}, -{33,41,-4}, -{33,41,-3}, -{33,41,-2}, -{33,41,-1}, -{33,41,0}, -{33,41,1}, -{33,41,2}, -{33,41,3}, -{33,41,4}, -{33,41,5}, -{33,41,6}, -{33,41,7}, -{33,41,8}, -{33,41,9}, -{33,41,10}, -{33,41,11}, -{33,41,12}, -{33,41,13}, -{33,41,14}, -{33,41,15}, -{33,41,16}, -{33,41,17}, -{33,41,18}, -{33,41,19}, -{33,41,20}, -{33,41,21}, -{33,41,22}, -{33,41,23}, -{33,41,24}, -{33,41,25}, -{33,41,26}, -{33,41,27}, -{33,41,28}, -{33,41,29}, -{33,41,30}, -{33,41,31}, -{33,41,32}, -{33,41,33}, -{33,41,34}, -{33,41,35}, -{33,41,36}, -{33,41,37}, -{33,41,38}, -{33,41,39}, -{33,41,40}, -{33,41,41}, -{33,41,42}, -{33,41,43}, -{33,41,44}, -{33,41,45}, -{33,42,-76}, -{33,42,-75}, -{33,42,-74}, -{33,42,-73}, -{33,42,-72}, -{33,42,-71}, -{33,42,-70}, -{33,42,-69}, -{33,42,-68}, -{33,42,-67}, -{33,42,-66}, -{33,42,-65}, -{33,42,-64}, -{33,42,-63}, -{33,42,-62}, -{33,42,-61}, -{33,42,-60}, -{33,42,-59}, -{33,42,-58}, -{33,42,-57}, -{33,42,-56}, -{33,42,-55}, -{33,42,-54}, -{33,42,-53}, -{33,42,-52}, -{33,42,-51}, -{33,42,-50}, -{33,42,-49}, -{33,42,-48}, -{33,42,-47}, -{33,42,-46}, -{33,42,-45}, -{33,42,-44}, -{33,42,-43}, -{33,42,-42}, -{33,42,-41}, -{33,42,-40}, -{33,42,-39}, -{33,42,-38}, -{33,42,-37}, -{33,42,-36}, -{33,42,-35}, -{33,42,-34}, -{33,42,-33}, -{33,42,-32}, -{33,42,-31}, -{33,42,-30}, -{33,42,-29}, -{33,42,-28}, -{33,42,-27}, -{33,42,-26}, -{33,42,-25}, -{33,42,-24}, -{33,42,-23}, -{33,42,-22}, -{33,42,-21}, -{33,42,-20}, -{33,42,-19}, -{33,42,-18}, -{33,42,-17}, -{33,42,-16}, -{33,42,-15}, -{33,42,-14}, -{33,42,-13}, -{33,42,-12}, -{33,42,-11}, -{33,42,-10}, -{33,42,-9}, -{33,42,-8}, -{33,42,-7}, -{33,42,-6}, -{33,42,-5}, -{33,42,-4}, -{33,42,-3}, -{33,42,-2}, -{33,42,-1}, -{33,42,0}, -{33,42,1}, -{33,42,2}, -{33,42,3}, -{33,42,4}, -{33,42,5}, -{33,42,6}, -{33,42,7}, -{33,42,8}, -{33,42,9}, -{33,42,10}, -{33,42,11}, -{33,42,12}, -{33,42,13}, -{33,42,14}, -{33,42,15}, -{33,42,16}, -{33,42,17}, -{33,42,18}, -{33,42,19}, -{33,42,20}, -{33,42,21}, -{33,42,22}, -{33,42,23}, -{33,42,24}, -{33,42,25}, -{33,42,26}, -{33,42,27}, -{33,42,28}, -{33,42,29}, -{33,42,30}, -{33,42,31}, -{33,42,32}, -{33,42,33}, -{33,42,34}, -{33,42,35}, -{33,42,36}, -{33,42,37}, -{33,42,38}, -{33,42,39}, -{33,42,40}, -{33,42,41}, -{33,42,42}, -{33,42,43}, -{33,42,44}, -{33,42,45}, -{33,43,-77}, -{33,43,-76}, -{33,43,-75}, -{33,43,-74}, -{33,43,-73}, -{33,43,-72}, -{33,43,-71}, -{33,43,-70}, -{33,43,-69}, -{33,43,-68}, -{33,43,-67}, -{33,43,-66}, -{33,43,-65}, -{33,43,-64}, -{33,43,-63}, -{33,43,-62}, -{33,43,-61}, -{33,43,-60}, -{33,43,-59}, -{33,43,-58}, -{33,43,-57}, -{33,43,-56}, -{33,43,-55}, -{33,43,-54}, -{33,43,-53}, -{33,43,-52}, -{33,43,-51}, -{33,43,-50}, -{33,43,-49}, -{33,43,-48}, -{33,43,-47}, -{33,43,-46}, -{33,43,-45}, -{33,43,-44}, -{33,43,-43}, -{33,43,-42}, -{33,43,-41}, -{33,43,-40}, -{33,43,-39}, -{33,43,-38}, -{33,43,-37}, -{33,43,-36}, -{33,43,-35}, -{33,43,-34}, -{33,43,-33}, -{33,43,-32}, -{33,43,-31}, -{33,43,-30}, -{33,43,-29}, -{33,43,-28}, -{33,43,-27}, -{33,43,-26}, -{33,43,-25}, -{33,43,-24}, -{33,43,-23}, -{33,43,-22}, -{33,43,-21}, -{33,43,-20}, -{33,43,-19}, -{33,43,-18}, -{33,43,-17}, -{33,43,-16}, -{33,43,-15}, -{33,43,-14}, -{33,43,-13}, -{33,43,-12}, -{33,43,-11}, -{33,43,-10}, -{33,43,-9}, -{33,43,-8}, -{33,43,-7}, -{33,43,-6}, -{33,43,-5}, -{33,43,-4}, -{33,43,-3}, -{33,43,-2}, -{33,43,-1}, -{33,43,0}, -{33,43,1}, -{33,43,2}, -{33,43,3}, -{33,43,4}, -{33,43,5}, -{33,43,6}, -{33,43,7}, -{33,43,8}, -{33,43,9}, -{33,43,10}, -{33,43,11}, -{33,43,12}, -{33,43,13}, -{33,43,14}, -{33,43,15}, -{33,43,16}, -{33,43,17}, -{33,43,18}, -{33,43,19}, -{33,43,20}, -{33,43,21}, -{33,43,22}, -{33,43,23}, -{33,43,24}, -{33,43,25}, -{33,43,26}, -{33,43,27}, -{33,43,28}, -{33,43,29}, -{33,43,30}, -{33,43,31}, -{33,43,32}, -{33,43,33}, -{33,43,34}, -{33,43,35}, -{33,43,36}, -{33,43,37}, -{33,43,38}, -{33,43,39}, -{33,43,40}, -{33,43,41}, -{33,43,42}, -{33,43,43}, -{33,43,44}, -{33,43,45}, -{33,44,-78}, -{33,44,-77}, -{33,44,-76}, -{33,44,-75}, -{33,44,-74}, -{33,44,-73}, -{33,44,-72}, -{33,44,-71}, -{33,44,-70}, -{33,44,-69}, -{33,44,-68}, -{33,44,-67}, -{33,44,-66}, -{33,44,-65}, -{33,44,-64}, -{33,44,-63}, -{33,44,-62}, -{33,44,-61}, -{33,44,-60}, -{33,44,-59}, -{33,44,-58}, -{33,44,-57}, -{33,44,-56}, -{33,44,-55}, -{33,44,-54}, -{33,44,-53}, -{33,44,-52}, -{33,44,-51}, -{33,44,-50}, -{33,44,-49}, -{33,44,-48}, -{33,44,-47}, -{33,44,-46}, -{33,44,-45}, -{33,44,-44}, -{33,44,-43}, -{33,44,-42}, -{33,44,-41}, -{33,44,-40}, -{33,44,-39}, -{33,44,-38}, -{33,44,-37}, -{33,44,-36}, -{33,44,-35}, -{33,44,-34}, -{33,44,-33}, -{33,44,-32}, -{33,44,-31}, -{33,44,-30}, -{33,44,-29}, -{33,44,-28}, -{33,44,-27}, -{33,44,-26}, -{33,44,-25}, -{33,44,-24}, -{33,44,-23}, -{33,44,-22}, -{33,44,-21}, -{33,44,-20}, -{33,44,-19}, -{33,44,-18}, -{33,44,-17}, -{33,44,-16}, -{33,44,-15}, -{33,44,-14}, -{33,44,-13}, -{33,44,-12}, -{33,44,-11}, -{33,44,-10}, -{33,44,-9}, -{33,44,-8}, -{33,44,-7}, -{33,44,-6}, -{33,44,-5}, -{33,44,-4}, -{33,44,-3}, -{33,44,-2}, -{33,44,-1}, -{33,44,0}, -{33,44,1}, -{33,44,2}, -{33,44,3}, -{33,44,4}, -{33,44,5}, -{33,44,6}, -{33,44,7}, -{33,44,8}, -{33,44,9}, -{33,44,10}, -{33,44,11}, -{33,44,12}, -{33,44,13}, -{33,44,14}, -{33,44,15}, -{33,44,16}, -{33,44,17}, -{33,44,18}, -{33,44,19}, -{33,44,20}, -{33,44,21}, -{33,44,22}, -{33,44,23}, -{33,44,24}, -{33,44,25}, -{33,44,26}, -{33,44,27}, -{33,44,28}, -{33,44,29}, -{33,44,30}, -{33,44,31}, -{33,44,32}, -{33,44,33}, -{33,44,34}, -{33,44,35}, -{33,44,36}, -{33,44,37}, -{33,44,38}, -{33,44,39}, -{33,44,40}, -{33,44,41}, -{33,44,42}, -{33,44,43}, -{33,44,44}, -{33,44,45}, -{33,45,-79}, -{33,45,-78}, -{33,45,-77}, -{33,45,-76}, -{33,45,-75}, -{33,45,-74}, -{33,45,-73}, -{33,45,-72}, -{33,45,-71}, -{33,45,-70}, -{33,45,-69}, -{33,45,-68}, -{33,45,-67}, -{33,45,-66}, -{33,45,-65}, -{33,45,-64}, -{33,45,-63}, -{33,45,-62}, -{33,45,-61}, -{33,45,-60}, -{33,45,-59}, -{33,45,-58}, -{33,45,-57}, -{33,45,-56}, -{33,45,-55}, -{33,45,-54}, -{33,45,-53}, -{33,45,-52}, -{33,45,-51}, -{33,45,-50}, -{33,45,-49}, -{33,45,-48}, -{33,45,-47}, -{33,45,-46}, -{33,45,-45}, -{33,45,-44}, -{33,45,-43}, -{33,45,-42}, -{33,45,-41}, -{33,45,-40}, -{33,45,-39}, -{33,45,-38}, -{33,45,-37}, -{33,45,-36}, -{33,45,-35}, -{33,45,-34}, -{33,45,-33}, -{33,45,-32}, -{33,45,-31}, -{33,45,-30}, -{33,45,-29}, -{33,45,-28}, -{33,45,-27}, -{33,45,-26}, -{33,45,-25}, -{33,45,-24}, -{33,45,-23}, -{33,45,-22}, -{33,45,-21}, -{33,45,-20}, -{33,45,-19}, -{33,45,-18}, -{33,45,-17}, -{33,45,-16}, -{33,45,-15}, -{33,45,-14}, -{33,45,-13}, -{33,45,-12}, -{33,45,-11}, -{33,45,-10}, -{33,45,-9}, -{33,45,-8}, -{33,45,-7}, -{33,45,-6}, -{33,45,-5}, -{33,45,-4}, -{33,45,-3}, -{33,45,-2}, -{33,45,-1}, -{33,45,0}, -{33,45,1}, -{33,45,2}, -{33,45,3}, -{33,45,4}, -{33,45,5}, -{33,45,6}, -{33,45,7}, -{33,45,8}, -{33,45,9}, -{33,45,10}, -{33,45,11}, -{33,45,12}, -{33,45,13}, -{33,45,14}, -{33,45,15}, -{33,45,16}, -{33,45,17}, -{33,45,18}, -{33,45,19}, -{33,45,20}, -{33,45,21}, -{33,45,22}, -{33,45,23}, -{33,45,24}, -{33,45,25}, -{33,45,26}, -{33,45,27}, -{33,45,28}, -{33,45,29}, -{33,45,30}, -{33,45,31}, -{33,45,32}, -{33,45,33}, -{33,45,34}, -{33,45,35}, -{33,45,36}, -{33,45,37}, -{33,45,38}, -{33,45,39}, -{33,45,40}, -{33,45,41}, -{33,45,42}, -{33,45,43}, -{33,45,44}, -{33,45,45}, -{33,46,-80}, -{33,46,-79}, -{33,46,-78}, -{33,46,-77}, -{33,46,-76}, -{33,46,-75}, -{33,46,-74}, -{33,46,-73}, -{33,46,-72}, -{33,46,-71}, -{33,46,-70}, -{33,46,-69}, -{33,46,-68}, -{33,46,-67}, -{33,46,-66}, -{33,46,-65}, -{33,46,-64}, -{33,46,-63}, -{33,46,-62}, -{33,46,-61}, -{33,46,-60}, -{33,46,-59}, -{33,46,-58}, -{33,46,-57}, -{33,46,-56}, -{33,46,-55}, -{33,46,-54}, -{33,46,-53}, -{33,46,-52}, -{33,46,-51}, -{33,46,-50}, -{33,46,-49}, -{33,46,-48}, -{33,46,-47}, -{33,46,-46}, -{33,46,-45}, -{33,46,-44}, -{33,46,-43}, -{33,46,-42}, -{33,46,-41}, -{33,46,-40}, -{33,46,-39}, -{33,46,-38}, -{33,46,-37}, -{33,46,-36}, -{33,46,-35}, -{33,46,-34}, -{33,46,-33}, -{33,46,-32}, -{33,46,-31}, -{33,46,-30}, -{33,46,-29}, -{33,46,-28}, -{33,46,-27}, -{33,46,-26}, -{33,46,-25}, -{33,46,-24}, -{33,46,-23}, -{33,46,-22}, -{33,46,-21}, -{33,46,-20}, -{33,46,-19}, -{33,46,-18}, -{33,46,-17}, -{33,46,-16}, -{33,46,-15}, -{33,46,-14}, -{33,46,-13}, -{33,46,-12}, -{33,46,-11}, -{33,46,-10}, -{33,46,-9}, -{33,46,-8}, -{33,46,-7}, -{33,46,-6}, -{33,46,-5}, -{33,46,-4}, -{33,46,-3}, -{33,46,-2}, -{33,46,-1}, -{33,46,0}, -{33,46,1}, -{33,46,2}, -{33,46,3}, -{33,46,4}, -{33,46,5}, -{33,46,6}, -{33,46,7}, -{33,46,8}, -{33,46,9}, -{33,46,10}, -{33,46,11}, -{33,46,12}, -{33,46,13}, -{33,46,14}, -{33,46,15}, -{33,46,16}, -{33,46,17}, -{33,46,18}, -{33,46,19}, -{33,46,20}, -{33,46,21}, -{33,46,22}, -{33,46,23}, -{33,46,24}, -{33,46,25}, -{33,46,26}, -{33,46,27}, -{33,46,28}, -{33,46,29}, -{33,46,30}, -{33,46,31}, -{33,46,32}, -{33,46,33}, -{33,46,34}, -{33,46,35}, -{33,46,36}, -{33,46,37}, -{33,46,38}, -{33,46,39}, -{33,46,40}, -{33,46,41}, -{33,46,42}, -{33,46,43}, -{33,46,44}, -{33,46,45}, -{33,46,46}, -{33,47,-81}, -{33,47,-80}, -{33,47,-79}, -{33,47,-78}, -{33,47,-77}, -{33,47,-76}, -{33,47,-75}, -{33,47,-74}, -{33,47,-73}, -{33,47,-72}, -{33,47,-71}, -{33,47,-70}, -{33,47,-69}, -{33,47,-68}, -{33,47,-67}, -{33,47,-66}, -{33,47,-65}, -{33,47,-64}, -{33,47,-63}, -{33,47,-62}, -{33,47,-61}, -{33,47,-60}, -{33,47,-59}, -{33,47,-58}, -{33,47,-57}, -{33,47,-56}, -{33,47,-55}, -{33,47,-54}, -{33,47,-53}, -{33,47,-52}, -{33,47,-51}, -{33,47,-50}, -{33,47,-49}, -{33,47,-48}, -{33,47,-47}, -{33,47,-46}, -{33,47,-45}, -{33,47,-44}, -{33,47,-43}, -{33,47,-42}, -{33,47,-41}, -{33,47,-40}, -{33,47,-39}, -{33,47,-38}, -{33,47,-37}, -{33,47,-36}, -{33,47,-35}, -{33,47,-34}, -{33,47,-33}, -{33,47,-32}, -{33,47,-31}, -{33,47,-30}, -{33,47,-29}, -{33,47,-28}, -{33,47,-27}, -{33,47,-26}, -{33,47,-25}, -{33,47,-24}, -{33,47,-23}, -{33,47,-22}, -{33,47,-21}, -{33,47,-20}, -{33,47,-19}, -{33,47,-18}, -{33,47,-17}, -{33,47,-16}, -{33,47,-15}, -{33,47,-14}, -{33,47,-13}, -{33,47,-12}, -{33,47,-11}, -{33,47,-10}, -{33,47,-9}, -{33,47,-8}, -{33,47,-7}, -{33,47,-6}, -{33,47,-5}, -{33,47,-4}, -{33,47,-3}, -{33,47,-2}, -{33,47,-1}, -{33,47,0}, -{33,47,1}, -{33,47,2}, -{33,47,3}, -{33,47,4}, -{33,47,5}, -{33,47,6}, -{33,47,7}, -{33,47,8}, -{33,47,9}, -{33,47,10}, -{33,47,11}, -{33,47,12}, -{33,47,13}, -{33,47,14}, -{33,47,15}, -{33,47,16}, -{33,47,17}, -{33,47,18}, -{33,47,19}, -{33,47,20}, -{33,47,21}, -{33,47,22}, -{33,47,23}, -{33,47,24}, -{33,47,25}, -{33,47,26}, -{33,47,27}, -{33,47,28}, -{33,47,29}, -{33,47,30}, -{33,47,31}, -{33,47,32}, -{33,47,33}, -{33,47,34}, -{33,47,35}, -{33,47,36}, -{33,47,37}, -{33,47,38}, -{33,47,39}, -{33,47,40}, -{33,47,41}, -{33,47,42}, -{33,47,43}, -{33,47,44}, -{33,47,45}, -{33,47,46}, -{33,48,-82}, -{33,48,-81}, -{33,48,-80}, -{33,48,-79}, -{33,48,-78}, -{33,48,-77}, -{33,48,-76}, -{33,48,-75}, -{33,48,-74}, -{33,48,-73}, -{33,48,-72}, -{33,48,-71}, -{33,48,-70}, -{33,48,-69}, -{33,48,-68}, -{33,48,-67}, -{33,48,-66}, -{33,48,-65}, -{33,48,-64}, -{33,48,-63}, -{33,48,-62}, -{33,48,-61}, -{33,48,-60}, -{33,48,-59}, -{33,48,-58}, -{33,48,-57}, -{33,48,-56}, -{33,48,-55}, -{33,48,-54}, -{33,48,-53}, -{33,48,-52}, -{33,48,-51}, -{33,48,-50}, -{33,48,-49}, -{33,48,-48}, -{33,48,-47}, -{33,48,-46}, -{33,48,-45}, -{33,48,-44}, -{33,48,-43}, -{33,48,-42}, -{33,48,-41}, -{33,48,-40}, -{33,48,-39}, -{33,48,-38}, -{33,48,-37}, -{33,48,-36}, -{33,48,-35}, -{33,48,-34}, -{33,48,-33}, -{33,48,-32}, -{33,48,-31}, -{33,48,-30}, -{33,48,-29}, -{33,48,-28}, -{33,48,-27}, -{33,48,-26}, -{33,48,-25}, -{33,48,-24}, -{33,48,-23}, -{33,48,-22}, -{33,48,-21}, -{33,48,-20}, -{33,48,-19}, -{33,48,-18}, -{33,48,-17}, -{33,48,-16}, -{33,48,-15}, -{33,48,-14}, -{33,48,-13}, -{33,48,-12}, -{33,48,-11}, -{33,48,-10}, -{33,48,-9}, -{33,48,-8}, -{33,48,-7}, -{33,48,-6}, -{33,48,-5}, -{33,48,-4}, -{33,48,-3}, -{33,48,-2}, -{33,48,-1}, -{33,48,0}, -{33,48,1}, -{33,48,2}, -{33,48,3}, -{33,48,4}, -{33,48,5}, -{33,48,6}, -{33,48,7}, -{33,48,8}, -{33,48,9}, -{33,48,10}, -{33,48,11}, -{33,48,12}, -{33,48,13}, -{33,48,14}, -{33,48,15}, -{33,48,16}, -{33,48,17}, -{33,48,18}, -{33,48,19}, -{33,48,20}, -{33,48,21}, -{33,48,22}, -{33,48,23}, -{33,48,24}, -{33,48,25}, -{33,48,26}, -{33,48,27}, -{33,48,28}, -{33,48,29}, -{33,48,30}, -{33,48,31}, -{33,48,32}, -{33,48,33}, -{33,48,34}, -{33,48,35}, -{33,48,36}, -{33,48,37}, -{33,48,38}, -{33,48,39}, -{33,48,40}, -{33,48,41}, -{33,48,42}, -{33,48,43}, -{33,48,44}, -{33,48,45}, -{33,48,46}, -{33,49,-83}, -{33,49,-82}, -{33,49,-81}, -{33,49,-80}, -{33,49,-79}, -{33,49,-78}, -{33,49,-77}, -{33,49,-76}, -{33,49,-75}, -{33,49,-74}, -{33,49,-73}, -{33,49,-72}, -{33,49,-71}, -{33,49,-70}, -{33,49,-69}, -{33,49,-68}, -{33,49,-67}, -{33,49,-66}, -{33,49,-65}, -{33,49,-64}, -{33,49,-63}, -{33,49,-62}, -{33,49,-61}, -{33,49,-60}, -{33,49,-59}, -{33,49,-58}, -{33,49,-57}, -{33,49,-56}, -{33,49,-55}, -{33,49,-54}, -{33,49,-53}, -{33,49,-52}, -{33,49,-51}, -{33,49,-50}, -{33,49,-49}, -{33,49,-48}, -{33,49,-47}, -{33,49,-46}, -{33,49,-45}, -{33,49,-44}, -{33,49,-43}, -{33,49,-42}, -{33,49,-41}, -{33,49,-40}, -{33,49,-39}, -{33,49,-38}, -{33,49,-37}, -{33,49,-36}, -{33,49,-35}, -{33,49,-34}, -{33,49,-33}, -{33,49,-32}, -{33,49,-31}, -{33,49,-30}, -{33,49,-29}, -{33,49,-28}, -{33,49,-27}, -{33,49,-26}, -{33,49,-25}, -{33,49,-24}, -{33,49,-23}, -{33,49,-22}, -{33,49,-21}, -{33,49,-20}, -{33,49,-19}, -{33,49,-18}, -{33,49,-17}, -{33,49,-16}, -{33,49,-15}, -{33,49,-14}, -{33,49,-13}, -{33,49,-12}, -{33,49,-11}, -{33,49,-10}, -{33,49,-9}, -{33,49,-8}, -{33,49,-7}, -{33,49,-6}, -{33,49,-5}, -{33,49,-4}, -{33,49,-3}, -{33,49,-2}, -{33,49,-1}, -{33,49,0}, -{33,49,1}, -{33,49,2}, -{33,49,3}, -{33,49,4}, -{33,49,5}, -{33,49,6}, -{33,49,7}, -{33,49,8}, -{33,49,9}, -{33,49,10}, -{33,49,11}, -{33,49,12}, -{33,49,13}, -{33,49,14}, -{33,49,15}, -{33,49,16}, -{33,49,17}, -{33,49,18}, -{33,49,19}, -{33,49,20}, -{33,49,21}, -{33,49,22}, -{33,49,23}, -{33,49,24}, -{33,49,25}, -{33,49,26}, -{33,49,27}, -{33,49,28}, -{33,49,29}, -{33,49,30}, -{33,49,31}, -{33,49,32}, -{33,49,33}, -{33,49,34}, -{33,49,35}, -{33,49,36}, -{33,49,37}, -{33,49,38}, -{33,49,39}, -{33,49,40}, -{33,49,41}, -{33,49,42}, -{33,49,43}, -{33,49,44}, -{33,49,45}, -{33,49,46}, -{33,50,-83}, -{33,50,-82}, -{33,50,-81}, -{33,50,-80}, -{33,50,-79}, -{33,50,-78}, -{33,50,-77}, -{33,50,-76}, -{33,50,-75}, -{33,50,-74}, -{33,50,-73}, -{33,50,-72}, -{33,50,-71}, -{33,50,-70}, -{33,50,-69}, -{33,50,-68}, -{33,50,-67}, -{33,50,-66}, -{33,50,-65}, -{33,50,-64}, -{33,50,-63}, -{33,50,-62}, -{33,50,-61}, -{33,50,-60}, -{33,50,-59}, -{33,50,-58}, -{33,50,-57}, -{33,50,-56}, -{33,50,-55}, -{33,50,-54}, -{33,50,-53}, -{33,50,-52}, -{33,50,-51}, -{33,50,-50}, -{33,50,-49}, -{33,50,-48}, -{33,50,-47}, -{33,50,-46}, -{33,50,-45}, -{33,50,-44}, -{33,50,-43}, -{33,50,-42}, -{33,50,-41}, -{33,50,-40}, -{33,50,-39}, -{33,50,-38}, -{33,50,-37}, -{33,50,-36}, -{33,50,-35}, -{33,50,-34}, -{33,50,-33}, -{33,50,-32}, -{33,50,-31}, -{33,50,-30}, -{33,50,-29}, -{33,50,-28}, -{33,50,-27}, -{33,50,-26}, -{33,50,-25}, -{33,50,-24}, -{33,50,-23}, -{33,50,-22}, -{33,50,-21}, -{33,50,-20}, -{33,50,-19}, -{33,50,-18}, -{33,50,-17}, -{33,50,-16}, -{33,50,-15}, -{33,50,-14}, -{33,50,-13}, -{33,50,-12}, -{33,50,-11}, -{33,50,-10}, -{33,50,-9}, -{33,50,-8}, -{33,50,-7}, -{33,50,-6}, -{33,50,-5}, -{33,50,-4}, -{33,50,-3}, -{33,50,-2}, -{33,50,-1}, -{33,50,0}, -{33,50,1}, -{33,50,2}, -{33,50,3}, -{33,50,4}, -{33,50,5}, -{33,50,6}, -{33,50,7}, -{33,50,8}, -{33,50,9}, -{33,50,10}, -{33,50,11}, -{33,50,12}, -{33,50,13}, -{33,50,14}, -{33,50,15}, -{33,50,16}, -{33,50,17}, -{33,50,18}, -{33,50,19}, -{33,50,20}, -{33,50,21}, -{33,50,22}, -{33,50,23}, -{33,50,24}, -{33,50,25}, -{33,50,26}, -{33,50,27}, -{33,50,28}, -{33,50,29}, -{33,50,30}, -{33,50,31}, -{33,50,32}, -{33,50,33}, -{33,50,34}, -{33,50,35}, -{33,50,36}, -{33,50,37}, -{33,50,38}, -{33,50,39}, -{33,50,40}, -{33,50,41}, -{33,50,42}, -{33,50,43}, -{33,50,44}, -{33,50,45}, -{33,50,46}, -{33,51,-84}, -{33,51,-83}, -{33,51,-82}, -{33,51,-81}, -{33,51,-80}, -{33,51,-79}, -{33,51,-78}, -{33,51,-77}, -{33,51,-76}, -{33,51,-75}, -{33,51,-74}, -{33,51,-73}, -{33,51,-72}, -{33,51,-71}, -{33,51,-70}, -{33,51,-69}, -{33,51,-68}, -{33,51,-67}, -{33,51,-66}, -{33,51,-65}, -{33,51,-64}, -{33,51,-63}, -{33,51,-62}, -{33,51,-61}, -{33,51,-60}, -{33,51,-59}, -{33,51,-58}, -{33,51,-57}, -{33,51,-56}, -{33,51,-55}, -{33,51,-54}, -{33,51,-53}, -{33,51,-52}, -{33,51,-51}, -{33,51,-50}, -{33,51,-49}, -{33,51,-48}, -{33,51,-47}, -{33,51,-46}, -{33,51,-45}, -{33,51,-44}, -{33,51,-43}, -{33,51,-42}, -{33,51,-41}, -{33,51,-40}, -{33,51,-39}, -{33,51,-38}, -{33,51,-37}, -{33,51,-36}, -{33,51,-35}, -{33,51,-34}, -{33,51,-33}, -{33,51,-32}, -{33,51,-31}, -{33,51,-30}, -{33,51,-29}, -{33,51,-28}, -{33,51,-27}, -{33,51,-26}, -{33,51,-25}, -{33,51,-24}, -{33,51,-23}, -{33,51,-22}, -{33,51,-21}, -{33,51,-20}, -{33,51,-19}, -{33,51,-18}, -{33,51,-17}, -{33,51,-16}, -{33,51,-15}, -{33,51,-14}, -{33,51,-13}, -{33,51,-12}, -{33,51,-11}, -{33,51,-10}, -{33,51,-9}, -{33,51,-8}, -{33,51,-7}, -{33,51,-6}, -{33,51,-5}, -{33,51,-4}, -{33,51,-3}, -{33,51,-2}, -{33,51,-1}, -{33,51,0}, -{33,51,1}, -{33,51,2}, -{33,51,3}, -{33,51,4}, -{33,51,5}, -{33,51,6}, -{33,51,7}, -{33,51,8}, -{33,51,9}, -{33,51,10}, -{33,51,11}, -{33,51,12}, -{33,51,13}, -{33,51,14}, -{33,51,15}, -{33,51,16}, -{33,51,17}, -{33,51,18}, -{33,51,19}, -{33,51,20}, -{33,51,21}, -{33,51,22}, -{33,51,23}, -{33,51,24}, -{33,51,25}, -{33,51,26}, -{33,51,27}, -{33,51,28}, -{33,51,29}, -{33,51,30}, -{33,51,31}, -{33,51,32}, -{33,51,33}, -{33,51,34}, -{33,51,35}, -{33,51,36}, -{33,51,37}, -{33,51,38}, -{33,51,39}, -{33,51,40}, -{33,51,41}, -{33,51,42}, -{33,51,43}, -{33,51,44}, -{33,51,45}, -{33,51,46}, -{33,52,-85}, -{33,52,-84}, -{33,52,-83}, -{33,52,-82}, -{33,52,-81}, -{33,52,-80}, -{33,52,-79}, -{33,52,-78}, -{33,52,-77}, -{33,52,-76}, -{33,52,-75}, -{33,52,-74}, -{33,52,-73}, -{33,52,-72}, -{33,52,-71}, -{33,52,-70}, -{33,52,-69}, -{33,52,-68}, -{33,52,-67}, -{33,52,-66}, -{33,52,-65}, -{33,52,-64}, -{33,52,-63}, -{33,52,-62}, -{33,52,-61}, -{33,52,-60}, -{33,52,-59}, -{33,52,-58}, -{33,52,-57}, -{33,52,-56}, -{33,52,-55}, -{33,52,-54}, -{33,52,-53}, -{33,52,-52}, -{33,52,-51}, -{33,52,-50}, -{33,52,-49}, -{33,52,-48}, -{33,52,-47}, -{33,52,-46}, -{33,52,-45}, -{33,52,-44}, -{33,52,-43}, -{33,52,-42}, -{33,52,-41}, -{33,52,-40}, -{33,52,-39}, -{33,52,-38}, -{33,52,-37}, -{33,52,-36}, -{33,52,-35}, -{33,52,-34}, -{33,52,-33}, -{33,52,-32}, -{33,52,-31}, -{33,52,-30}, -{33,52,-29}, -{33,52,-28}, -{33,52,-27}, -{33,52,-26}, -{33,52,-25}, -{33,52,-24}, -{33,52,-23}, -{33,52,-22}, -{33,52,-21}, -{33,52,-20}, -{33,52,-19}, -{33,52,-18}, -{33,52,-17}, -{33,52,-16}, -{33,52,-15}, -{33,52,-14}, -{33,52,-13}, -{33,52,-12}, -{33,52,-11}, -{33,52,-10}, -{33,52,-9}, -{33,52,-8}, -{33,52,-7}, -{33,52,-6}, -{33,52,-5}, -{33,52,-4}, -{33,52,-3}, -{33,52,-2}, -{33,52,-1}, -{33,52,0}, -{33,52,1}, -{33,52,2}, -{33,52,3}, -{33,52,4}, -{33,52,5}, -{33,52,6}, -{33,52,7}, -{33,52,8}, -{33,52,9}, -{33,52,10}, -{33,52,11}, -{33,52,12}, -{33,52,13}, -{33,52,14}, -{33,52,15}, -{33,52,16}, -{33,52,17}, -{33,52,18}, -{33,52,19}, -{33,52,20}, -{33,52,21}, -{33,52,22}, -{33,52,23}, -{33,52,24}, -{33,52,25}, -{33,52,26}, -{33,52,27}, -{33,52,28}, -{33,52,29}, -{33,52,30}, -{33,52,31}, -{33,52,32}, -{33,52,33}, -{33,52,34}, -{33,52,35}, -{33,52,36}, -{33,52,37}, -{33,52,38}, -{33,52,39}, -{33,52,40}, -{33,52,41}, -{33,52,42}, -{33,52,43}, -{33,52,44}, -{33,52,45}, -{33,52,46}, -{33,53,-86}, -{33,53,-85}, -{33,53,-84}, -{33,53,-83}, -{33,53,-82}, -{33,53,-81}, -{33,53,-80}, -{33,53,-79}, -{33,53,-78}, -{33,53,-77}, -{33,53,-76}, -{33,53,-75}, -{33,53,-74}, -{33,53,-73}, -{33,53,-72}, -{33,53,-71}, -{33,53,-70}, -{33,53,-69}, -{33,53,-68}, -{33,53,-67}, -{33,53,-66}, -{33,53,-65}, -{33,53,-64}, -{33,53,-63}, -{33,53,-62}, -{33,53,-61}, -{33,53,-60}, -{33,53,-59}, -{33,53,-58}, -{33,53,-57}, -{33,53,-56}, -{33,53,-55}, -{33,53,-54}, -{33,53,-53}, -{33,53,-52}, -{33,53,-51}, -{33,53,-50}, -{33,53,-49}, -{33,53,-48}, -{33,53,-47}, -{33,53,-46}, -{33,53,-45}, -{33,53,-44}, -{33,53,-43}, -{33,53,-42}, -{33,53,-41}, -{33,53,-40}, -{33,53,-39}, -{33,53,-38}, -{33,53,-37}, -{33,53,-36}, -{33,53,-35}, -{33,53,-34}, -{33,53,-33}, -{33,53,-32}, -{33,53,-31}, -{33,53,-30}, -{33,53,-29}, -{33,53,-28}, -{33,53,-27}, -{33,53,-26}, -{33,53,-25}, -{33,53,-24}, -{33,53,-23}, -{33,53,-22}, -{33,53,-21}, -{33,53,-20}, -{33,53,-19}, -{33,53,-18}, -{33,53,-17}, -{33,53,-16}, -{33,53,-15}, -{33,53,-14}, -{33,53,-13}, -{33,53,-12}, -{33,53,-11}, -{33,53,-10}, -{33,53,-9}, -{33,53,-8}, -{33,53,-7}, -{33,53,-6}, -{33,53,-5}, -{33,53,-4}, -{33,53,-3}, -{33,53,-2}, -{33,53,-1}, -{33,53,0}, -{33,53,1}, -{33,53,2}, -{33,53,3}, -{33,53,4}, -{33,53,5}, -{33,53,6}, -{33,53,7}, -{33,53,8}, -{33,53,9}, -{33,53,10}, -{33,53,11}, -{33,53,12}, -{33,53,13}, -{33,53,14}, -{33,53,15}, -{33,53,16}, -{33,53,17}, -{33,53,18}, -{33,53,19}, -{33,53,20}, -{33,53,21}, -{33,53,22}, -{33,53,23}, -{33,53,24}, -{33,53,25}, -{33,53,26}, -{33,53,27}, -{33,53,28}, -{33,53,29}, -{33,53,30}, -{33,53,31}, -{33,53,32}, -{33,53,33}, -{33,53,34}, -{33,53,35}, -{33,53,36}, -{33,53,37}, -{33,53,38}, -{33,53,39}, -{33,53,40}, -{33,53,41}, -{33,53,42}, -{33,53,43}, -{33,53,44}, -{33,53,45}, -{33,53,46}, -{33,54,-87}, -{33,54,-86}, -{33,54,-85}, -{33,54,-84}, -{33,54,-83}, -{33,54,-82}, -{33,54,-81}, -{33,54,-80}, -{33,54,-79}, -{33,54,-78}, -{33,54,-77}, -{33,54,-76}, -{33,54,-75}, -{33,54,-74}, -{33,54,-73}, -{33,54,-72}, -{33,54,-71}, -{33,54,-70}, -{33,54,-69}, -{33,54,-68}, -{33,54,-67}, -{33,54,-66}, -{33,54,-65}, -{33,54,-64}, -{33,54,-63}, -{33,54,-62}, -{33,54,-61}, -{33,54,-60}, -{33,54,-59}, -{33,54,-58}, -{33,54,-57}, -{33,54,-56}, -{33,54,-55}, -{33,54,-54}, -{33,54,-53}, -{33,54,-52}, -{33,54,-51}, -{33,54,-50}, -{33,54,-49}, -{33,54,-48}, -{33,54,-47}, -{33,54,-46}, -{33,54,-45}, -{33,54,-44}, -{33,54,-43}, -{33,54,-42}, -{33,54,-41}, -{33,54,-40}, -{33,54,-39}, -{33,54,-38}, -{33,54,-37}, -{33,54,-36}, -{33,54,-35}, -{33,54,-34}, -{33,54,-33}, -{33,54,-32}, -{33,54,-31}, -{33,54,-30}, -{33,54,-29}, -{33,54,-28}, -{33,54,-27}, -{33,54,-26}, -{33,54,-25}, -{33,54,-24}, -{33,54,-23}, -{33,54,-22}, -{33,54,-21}, -{33,54,-20}, -{33,54,-19}, -{33,54,-18}, -{33,54,-17}, -{33,54,-16}, -{33,54,-15}, -{33,54,-14}, -{33,54,-13}, -{33,54,-12}, -{33,54,-11}, -{33,54,-10}, -{33,54,-9}, -{33,54,-8}, -{33,54,-7}, -{33,54,-6}, -{33,54,-5}, -{33,54,-4}, -{33,54,-3}, -{33,54,-2}, -{33,54,-1}, -{33,54,0}, -{33,54,1}, -{33,54,2}, -{33,54,3}, -{33,54,4}, -{33,54,5}, -{33,54,6}, -{33,54,7}, -{33,54,8}, -{33,54,9}, -{33,54,10}, -{33,54,11}, -{33,54,12}, -{33,54,13}, -{33,54,14}, -{33,54,15}, -{33,54,16}, -{33,54,17}, -{33,54,18}, -{33,54,19}, -{33,54,20}, -{33,54,21}, -{33,54,22}, -{33,54,23}, -{33,54,24}, -{33,54,25}, -{33,54,26}, -{33,54,27}, -{33,54,28}, -{33,54,29}, -{33,54,30}, -{33,54,31}, -{33,54,32}, -{33,54,33}, -{33,54,34}, -{33,54,35}, -{33,54,36}, -{33,54,37}, -{33,54,38}, -{33,54,39}, -{33,54,40}, -{33,54,41}, -{33,54,42}, -{33,54,43}, -{33,54,44}, -{33,54,45}, -{33,54,46}, -{33,55,-88}, -{33,55,-87}, -{33,55,-86}, -{33,55,-85}, -{33,55,-84}, -{33,55,-83}, -{33,55,-82}, -{33,55,-81}, -{33,55,-80}, -{33,55,-79}, -{33,55,-78}, -{33,55,-77}, -{33,55,-76}, -{33,55,-75}, -{33,55,-74}, -{33,55,-73}, -{33,55,-72}, -{33,55,-71}, -{33,55,-70}, -{33,55,-69}, -{33,55,-68}, -{33,55,-67}, -{33,55,-66}, -{33,55,-65}, -{33,55,-64}, -{33,55,-63}, -{33,55,-62}, -{33,55,-61}, -{33,55,-60}, -{33,55,-59}, -{33,55,-58}, -{33,55,-57}, -{33,55,-56}, -{33,55,-55}, -{33,55,-54}, -{33,55,-53}, -{33,55,-52}, -{33,55,-51}, -{33,55,-50}, -{33,55,-49}, -{33,55,-48}, -{33,55,-47}, -{33,55,-46}, -{33,55,-45}, -{33,55,-44}, -{33,55,-43}, -{33,55,-42}, -{33,55,-41}, -{33,55,-40}, -{33,55,-39}, -{33,55,-38}, -{33,55,-37}, -{33,55,-36}, -{33,55,-35}, -{33,55,-34}, -{33,55,-33}, -{33,55,-32}, -{33,55,-31}, -{33,55,-30}, -{33,55,-29}, -{33,55,-28}, -{33,55,-27}, -{33,55,-26}, -{33,55,-25}, -{33,55,-24}, -{33,55,-23}, -{33,55,-22}, -{33,55,-21}, -{33,55,-20}, -{33,55,-19}, -{33,55,-18}, -{33,55,-17}, -{33,55,-16}, -{33,55,-15}, -{33,55,-14}, -{33,55,-13}, -{33,55,-12}, -{33,55,-11}, -{33,55,-10}, -{33,55,-9}, -{33,55,-8}, -{33,55,-7}, -{33,55,-6}, -{33,55,-5}, -{33,55,-4}, -{33,55,-3}, -{33,55,-2}, -{33,55,-1}, -{33,55,0}, -{33,55,1}, -{33,55,2}, -{33,55,3}, -{33,55,4}, -{33,55,5}, -{33,55,6}, -{33,55,7}, -{33,55,8}, -{33,55,9}, -{33,55,10}, -{33,55,11}, -{33,55,12}, -{33,55,13}, -{33,55,14}, -{33,55,15}, -{33,55,16}, -{33,55,17}, -{33,55,18}, -{33,55,19}, -{33,55,20}, -{33,55,21}, -{33,55,22}, -{33,55,23}, -{33,55,24}, -{33,55,25}, -{33,55,26}, -{33,55,27}, -{33,55,28}, -{33,55,29}, -{33,55,30}, -{33,55,31}, -{33,55,32}, -{33,55,33}, -{33,55,34}, -{33,55,35}, -{33,55,36}, -{33,55,37}, -{33,55,38}, -{33,55,39}, -{33,55,40}, -{33,55,41}, -{33,55,42}, -{33,55,43}, -{33,55,44}, -{33,55,45}, -{33,55,46}, -{33,55,47}, -{33,56,-89}, -{33,56,-88}, -{33,56,-87}, -{33,56,-86}, -{33,56,-85}, -{33,56,-84}, -{33,56,-83}, -{33,56,-82}, -{33,56,-81}, -{33,56,-80}, -{33,56,-79}, -{33,56,-78}, -{33,56,-77}, -{33,56,-76}, -{33,56,-75}, -{33,56,-74}, -{33,56,-73}, -{33,56,-72}, -{33,56,-71}, -{33,56,-70}, -{33,56,-69}, -{33,56,-68}, -{33,56,-67}, -{33,56,-66}, -{33,56,-65}, -{33,56,-64}, -{33,56,-63}, -{33,56,-62}, -{33,56,-61}, -{33,56,-60}, -{33,56,-59}, -{33,56,-58}, -{33,56,-57}, -{33,56,-56}, -{33,56,-55}, -{33,56,-54}, -{33,56,-53}, -{33,56,-52}, -{33,56,-51}, -{33,56,-50}, -{33,56,-49}, -{33,56,-48}, -{33,56,-47}, -{33,56,-46}, -{33,56,-45}, -{33,56,-44}, -{33,56,-43}, -{33,56,-42}, -{33,56,-41}, -{33,56,-40}, -{33,56,-39}, -{33,56,-38}, -{33,56,-37}, -{33,56,-36}, -{33,56,-35}, -{33,56,-34}, -{33,56,-33}, -{33,56,-32}, -{33,56,-31}, -{33,56,-30}, -{33,56,-29}, -{33,56,-28}, -{33,56,-27}, -{33,56,-26}, -{33,56,-25}, -{33,56,-24}, -{33,56,-23}, -{33,56,-22}, -{33,56,-21}, -{33,56,-20}, -{33,56,-19}, -{33,56,-18}, -{33,56,-17}, -{33,56,-16}, -{33,56,-15}, -{33,56,-14}, -{33,56,-13}, -{33,56,-12}, -{33,56,-11}, -{33,56,-10}, -{33,56,-9}, -{33,56,-8}, -{33,56,-7}, -{33,56,-6}, -{33,56,-5}, -{33,56,-4}, -{33,56,-3}, -{33,56,-2}, -{33,56,-1}, -{33,56,0}, -{33,56,1}, -{33,56,2}, -{33,56,3}, -{33,56,4}, -{33,56,5}, -{33,56,6}, -{33,56,7}, -{33,56,8}, -{33,56,9}, -{33,56,10}, -{33,56,11}, -{33,56,12}, -{33,56,13}, -{33,56,14}, -{33,56,15}, -{33,56,16}, -{33,56,17}, -{33,56,18}, -{33,56,19}, -{33,56,20}, -{33,56,21}, -{33,56,22}, -{33,56,23}, -{33,56,24}, -{33,56,25}, -{33,56,26}, -{33,56,27}, -{33,56,28}, -{33,56,29}, -{33,56,30}, -{33,56,31}, -{33,56,32}, -{33,56,33}, -{33,56,34}, -{33,56,35}, -{33,56,36}, -{33,56,37}, -{33,56,38}, -{33,56,39}, -{33,56,40}, -{33,56,41}, -{33,56,42}, -{33,56,43}, -{33,56,44}, -{33,56,45}, -{33,56,46}, -{33,56,47}, -{33,57,-90}, -{33,57,-89}, -{33,57,-88}, -{33,57,-87}, -{33,57,-86}, -{33,57,-85}, -{33,57,-84}, -{33,57,-83}, -{33,57,-82}, -{33,57,-81}, -{33,57,-80}, -{33,57,-79}, -{33,57,-78}, -{33,57,-77}, -{33,57,-76}, -{33,57,-75}, -{33,57,-74}, -{33,57,-73}, -{33,57,-72}, -{33,57,-71}, -{33,57,-70}, -{33,57,-69}, -{33,57,-68}, -{33,57,-67}, -{33,57,-66}, -{33,57,-65}, -{33,57,-64}, -{33,57,-63}, -{33,57,-62}, -{33,57,-61}, -{33,57,-60}, -{33,57,-59}, -{33,57,-58}, -{33,57,-57}, -{33,57,-56}, -{33,57,-55}, -{33,57,-54}, -{33,57,-53}, -{33,57,-52}, -{33,57,-51}, -{33,57,-50}, -{33,57,-49}, -{33,57,-48}, -{33,57,-47}, -{33,57,-46}, -{33,57,-45}, -{33,57,-44}, -{33,57,-43}, -{33,57,-42}, -{33,57,-41}, -{33,57,-40}, -{33,57,-39}, -{33,57,-38}, -{33,57,-37}, -{33,57,-36}, -{33,57,-35}, -{33,57,-34}, -{33,57,-33}, -{33,57,-32}, -{33,57,-31}, -{33,57,-30}, -{33,57,-29}, -{33,57,-28}, -{33,57,-27}, -{33,57,-26}, -{33,57,-25}, -{33,57,-24}, -{33,57,-23}, -{33,57,-22}, -{33,57,-21}, -{33,57,-20}, -{33,57,-19}, -{33,57,-18}, -{33,57,-17}, -{33,57,-16}, -{33,57,-15}, -{33,57,-14}, -{33,57,-13}, -{33,57,-12}, -{33,57,-11}, -{33,57,-10}, -{33,57,-9}, -{33,57,-8}, -{33,57,-7}, -{33,57,-6}, -{33,57,-5}, -{33,57,-4}, -{33,57,-3}, -{33,57,-2}, -{33,57,-1}, -{33,57,0}, -{33,57,1}, -{33,57,2}, -{33,57,3}, -{33,57,4}, -{33,57,5}, -{33,57,6}, -{33,57,7}, -{33,57,8}, -{33,57,9}, -{33,57,10}, -{33,57,11}, -{33,57,12}, -{33,57,13}, -{33,57,14}, -{33,57,15}, -{33,57,16}, -{33,57,17}, -{33,57,18}, -{33,57,19}, -{33,57,20}, -{33,57,21}, -{33,57,22}, -{33,57,23}, -{33,57,24}, -{33,57,25}, -{33,57,26}, -{33,57,27}, -{33,57,28}, -{33,57,29}, -{33,57,30}, -{33,57,31}, -{33,57,32}, -{33,57,33}, -{33,57,34}, -{33,57,35}, -{33,57,36}, -{33,57,37}, -{33,57,38}, -{33,57,39}, -{33,57,40}, -{33,58,-90}, -{33,58,-89}, -{33,58,-88}, -{33,58,-87}, -{33,58,-86}, -{33,58,-85}, -{33,58,-84}, -{33,58,-83}, -{33,58,-82}, -{33,58,-81}, -{33,58,-80}, -{33,58,-79}, -{33,58,-78}, -{33,58,-77}, -{33,58,-76}, -{33,58,-75}, -{33,58,-74}, -{33,58,-73}, -{33,58,-72}, -{33,58,-71}, -{33,58,-70}, -{33,58,-69}, -{33,58,-68}, -{33,58,-67}, -{33,58,-66}, -{33,58,-65}, -{33,58,-64}, -{33,58,-63}, -{33,58,-62}, -{33,58,-61}, -{33,58,-60}, -{33,58,-59}, -{33,58,-58}, -{33,58,-57}, -{33,58,-56}, -{33,58,-55}, -{33,58,-54}, -{33,58,-53}, -{33,58,-52}, -{33,58,-51}, -{33,58,-50}, -{33,58,-49}, -{33,58,-48}, -{33,58,-47}, -{33,58,-46}, -{33,58,-45}, -{33,58,-44}, -{33,58,-43}, -{33,58,-42}, -{33,58,-41}, -{33,58,-40}, -{33,58,-39}, -{33,58,-38}, -{33,58,-37}, -{33,58,-36}, -{33,58,-35}, -{33,58,-34}, -{33,58,-33}, -{33,58,-32}, -{33,58,-31}, -{33,58,-30}, -{33,58,-29}, -{33,58,-28}, -{33,58,-27}, -{33,58,-26}, -{33,58,-25}, -{33,58,-24}, -{33,58,-23}, -{33,58,-22}, -{33,58,-21}, -{33,58,-20}, -{33,58,-19}, -{33,58,-18}, -{33,58,-17}, -{33,58,-16}, -{33,58,-15}, -{33,58,-14}, -{33,58,-13}, -{33,58,-12}, -{33,58,-11}, -{33,58,-10}, -{33,58,-9}, -{33,58,-8}, -{33,58,-7}, -{33,58,-6}, -{33,58,-5}, -{33,58,-4}, -{33,58,-3}, -{33,58,-2}, -{33,58,-1}, -{33,58,0}, -{33,58,1}, -{33,58,2}, -{33,58,3}, -{33,58,4}, -{33,58,5}, -{33,58,6}, -{33,58,7}, -{33,58,8}, -{33,58,9}, -{33,58,10}, -{33,58,11}, -{33,58,12}, -{33,59,-91}, -{33,59,-90}, -{33,59,-89}, -{33,59,-88}, -{33,59,-87}, -{33,59,-86}, -{33,59,-85}, -{33,59,-84}, -{33,59,-83}, -{33,59,-82}, -{33,59,-81}, -{33,59,-80}, -{33,59,-79}, -{33,59,-78}, -{33,59,-77}, -{33,59,-76}, -{33,59,-75}, -{33,59,-74}, -{33,59,-73}, -{33,59,-72}, -{33,59,-71}, -{33,59,-70}, -{33,59,-69}, -{33,59,-68}, -{33,59,-67}, -{33,59,-66}, -{33,59,-65}, -{33,59,-64}, -{33,59,-63}, -{33,59,-62}, -{33,59,-61}, -{33,59,-60}, -{33,59,-59}, -{33,59,-58}, -{33,59,-57}, -{33,59,-56}, -{33,59,-55}, -{33,59,-54}, -{33,59,-53}, -{33,59,-52}, -{33,59,-51}, -{33,59,-50}, -{33,59,-49}, -{33,59,-48}, -{33,59,-47}, -{33,59,-46}, -{33,59,-45}, -{33,59,-44}, -{33,59,-43}, -{33,59,-42}, -{33,59,-41}, -{33,59,-40}, -{33,59,-39}, -{33,59,-38}, -{33,59,-37}, -{33,59,-36}, -{33,59,-35}, -{33,59,-34}, -{33,59,-33}, -{33,59,-32}, -{33,59,-31}, -{33,59,-30}, -{33,59,-29}, -{33,59,-28}, -{33,59,-27}, -{33,59,-26}, -{33,59,-25}, -{33,59,-24}, -{33,59,-23}, -{33,59,-22}, -{33,59,-21}, -{33,59,-20}, -{33,59,-19}, -{33,59,-18}, -{33,59,-17}, -{33,59,-16}, -{33,59,-15}, -{33,59,-14}, -{33,59,-13}, -{33,59,-12}, -{33,59,-11}, -{33,59,-10}, -{33,59,-9}, -{33,59,-8}, -{33,59,-7}, -{33,59,-6}, -{33,59,-5}, -{33,59,-4}, -{33,59,-3}, -{33,60,-92}, -{33,60,-91}, -{33,60,-90}, -{33,60,-89}, -{33,60,-88}, -{33,60,-87}, -{33,60,-86}, -{33,60,-85}, -{33,60,-84}, -{33,60,-83}, -{33,60,-82}, -{33,60,-81}, -{33,60,-80}, -{33,60,-79}, -{33,60,-78}, -{33,60,-77}, -{33,60,-76}, -{33,60,-75}, -{33,60,-74}, -{33,60,-73}, -{33,60,-72}, -{33,60,-71}, -{33,60,-70}, -{33,60,-69}, -{33,60,-68}, -{33,60,-67}, -{33,60,-66}, -{33,60,-65}, -{33,60,-64}, -{33,60,-63}, -{33,60,-62}, -{33,60,-61}, -{33,60,-60}, -{33,60,-59}, -{33,60,-58}, -{33,60,-57}, -{33,60,-56}, -{33,60,-55}, -{33,60,-54}, -{33,60,-53}, -{33,60,-52}, -{33,60,-51}, -{33,60,-50}, -{33,60,-49}, -{33,60,-48}, -{33,60,-47}, -{33,60,-46}, -{33,60,-45}, -{33,60,-44}, -{33,60,-43}, -{33,60,-42}, -{33,60,-41}, -{33,60,-40}, -{33,60,-39}, -{33,60,-38}, -{33,60,-37}, -{33,60,-36}, -{33,60,-35}, -{33,60,-34}, -{33,60,-33}, -{33,60,-32}, -{33,60,-31}, -{33,60,-30}, -{33,60,-29}, -{33,60,-28}, -{33,60,-27}, -{33,60,-26}, -{33,60,-25}, -{33,60,-24}, -{33,60,-23}, -{33,60,-22}, -{33,60,-21}, -{33,60,-20}, -{33,60,-19}, -{33,60,-18}, -{33,60,-17}, -{33,60,-16}, -{33,60,-15}, -{33,60,-14}, -{33,61,-93}, -{33,61,-92}, -{33,61,-91}, -{33,61,-90}, -{33,61,-89}, -{33,61,-88}, -{33,61,-87}, -{33,61,-86}, -{33,61,-85}, -{33,61,-84}, -{33,61,-83}, -{33,61,-82}, -{33,61,-81}, -{33,61,-80}, -{33,61,-79}, -{33,61,-78}, -{33,61,-77}, -{33,61,-76}, -{33,61,-75}, -{33,61,-74}, -{33,61,-73}, -{33,61,-72}, -{33,61,-71}, -{33,61,-70}, -{33,61,-69}, -{33,61,-68}, -{33,61,-67}, -{33,61,-66}, -{33,61,-65}, -{33,61,-64}, -{33,61,-63}, -{33,61,-62}, -{33,61,-61}, -{33,61,-60}, -{33,61,-59}, -{33,61,-58}, -{33,61,-57}, -{33,61,-56}, -{33,61,-55}, -{33,61,-54}, -{33,61,-53}, -{33,61,-52}, -{33,61,-51}, -{33,61,-50}, -{33,61,-49}, -{33,61,-48}, -{33,61,-47}, -{33,61,-46}, -{33,61,-45}, -{33,61,-44}, -{33,61,-43}, -{33,61,-42}, -{33,61,-41}, -{33,61,-40}, -{33,61,-39}, -{33,61,-38}, -{33,61,-37}, -{33,61,-36}, -{33,61,-35}, -{33,61,-34}, -{33,61,-33}, -{33,61,-32}, -{33,61,-31}, -{33,61,-30}, -{33,61,-29}, -{33,61,-28}, -{33,61,-27}, -{33,61,-26}, -{33,61,-25}, -{33,61,-24}, -{33,61,-23}, -{33,62,-94}, -{33,62,-93}, -{33,62,-92}, -{33,62,-91}, -{33,62,-90}, -{33,62,-89}, -{33,62,-88}, -{33,62,-87}, -{33,62,-86}, -{33,62,-85}, -{33,62,-84}, -{33,62,-83}, -{33,62,-82}, -{33,62,-81}, -{33,62,-80}, -{33,62,-79}, -{33,62,-78}, -{33,62,-77}, -{33,62,-76}, -{33,62,-75}, -{33,62,-74}, -{33,62,-73}, -{33,62,-72}, -{33,62,-71}, -{33,62,-70}, -{33,62,-69}, -{33,62,-68}, -{33,62,-67}, -{33,62,-66}, -{33,62,-65}, -{33,62,-64}, -{33,62,-63}, -{33,62,-62}, -{33,62,-61}, -{33,62,-60}, -{33,62,-59}, -{33,62,-58}, -{33,62,-57}, -{33,62,-56}, -{33,62,-55}, -{33,62,-54}, -{33,62,-53}, -{33,62,-52}, -{33,62,-51}, -{33,62,-50}, -{33,62,-49}, -{33,62,-48}, -{33,62,-47}, -{33,62,-46}, -{33,62,-45}, -{33,62,-44}, -{33,62,-43}, -{33,62,-42}, -{33,62,-41}, -{33,62,-40}, -{33,62,-39}, -{33,62,-38}, -{33,62,-37}, -{33,62,-36}, -{33,62,-35}, -{33,62,-34}, -{33,62,-33}, -{33,62,-32}, -{33,62,-31}, -{33,63,-95}, -{33,63,-94}, -{33,63,-93}, -{33,63,-92}, -{33,63,-91}, -{33,63,-90}, -{33,63,-89}, -{33,63,-88}, -{33,63,-87}, -{33,63,-86}, -{33,63,-85}, -{33,63,-84}, -{33,63,-83}, -{33,63,-82}, -{33,63,-81}, -{33,63,-80}, -{33,63,-79}, -{33,63,-78}, -{33,63,-77}, -{33,63,-76}, -{33,63,-75}, -{33,63,-74}, -{33,63,-73}, -{33,63,-72}, -{33,63,-71}, -{33,63,-70}, -{33,63,-69}, -{33,63,-68}, -{33,63,-67}, -{33,63,-66}, -{33,63,-65}, -{33,63,-64}, -{33,63,-63}, -{33,63,-62}, -{33,63,-61}, -{33,63,-60}, -{33,63,-59}, -{33,63,-58}, -{33,63,-57}, -{33,63,-56}, -{33,63,-55}, -{33,63,-54}, -{33,63,-53}, -{33,63,-52}, -{33,63,-51}, -{33,63,-50}, -{33,63,-49}, -{33,63,-48}, -{33,63,-47}, -{33,63,-46}, -{33,63,-45}, -{33,63,-44}, -{33,63,-43}, -{33,63,-42}, -{33,63,-41}, -{33,63,-40}, -{33,63,-39}, -{33,63,-38}, -{33,64,-95}, -{33,64,-94}, -{33,64,-93}, -{33,64,-92}, -{33,64,-91}, -{33,64,-90}, -{33,64,-89}, -{33,64,-88}, -{33,64,-87}, -{33,64,-86}, -{33,64,-85}, -{33,64,-84}, -{33,64,-83}, -{33,64,-82}, -{33,64,-81}, -{33,64,-80}, -{33,64,-79}, -{33,64,-78}, -{33,64,-77}, -{33,64,-76}, -{33,64,-75}, -{33,64,-74}, -{33,64,-73}, -{33,64,-72}, -{33,64,-71}, -{33,64,-70}, -{33,64,-69}, -{33,64,-68}, -{33,64,-67}, -{33,64,-66}, -{33,64,-65}, -{33,64,-64}, -{33,64,-63}, -{33,64,-62}, -{33,64,-61}, -{33,64,-60}, -{33,64,-59}, -{33,64,-58}, -{33,64,-57}, -{33,64,-56}, -{33,64,-55}, -{33,64,-54}, -{33,64,-53}, -{33,64,-52}, -{33,64,-51}, -{33,64,-50}, -{33,64,-49}, -{33,64,-48}, -{33,64,-47}, -{33,64,-46}, -{33,64,-45}, -{33,64,-44}, -{33,65,-96}, -{33,65,-95}, -{33,65,-94}, -{33,65,-93}, -{33,65,-92}, -{33,65,-91}, -{33,65,-90}, -{33,65,-89}, -{33,65,-88}, -{33,65,-87}, -{33,65,-86}, -{33,65,-85}, -{33,65,-84}, -{33,65,-83}, -{33,65,-82}, -{33,65,-81}, -{33,65,-80}, -{33,65,-79}, -{33,65,-78}, -{33,65,-77}, -{33,65,-76}, -{33,65,-75}, -{33,65,-74}, -{33,65,-73}, -{33,65,-72}, -{33,65,-71}, -{33,65,-70}, -{33,65,-69}, -{33,65,-68}, -{33,65,-67}, -{33,65,-66}, -{33,65,-65}, -{33,65,-64}, -{33,65,-63}, -{33,65,-62}, -{33,65,-61}, -{33,65,-60}, -{33,65,-59}, -{33,65,-58}, -{33,65,-57}, -{33,65,-56}, -{33,65,-55}, -{33,65,-54}, -{33,65,-53}, -{33,65,-52}, -{33,65,-51}, -{33,65,-50}, -{33,66,-97}, -{33,66,-96}, -{33,66,-95}, -{33,66,-94}, -{33,66,-93}, -{33,66,-92}, -{33,66,-91}, -{33,66,-90}, -{33,66,-89}, -{33,66,-88}, -{33,66,-87}, -{33,66,-86}, -{33,66,-85}, -{33,66,-84}, -{33,66,-83}, -{33,66,-82}, -{33,66,-81}, -{33,66,-80}, -{33,66,-79}, -{33,66,-78}, -{33,66,-77}, -{33,66,-76}, -{33,66,-75}, -{33,66,-74}, -{33,66,-73}, -{33,66,-72}, -{33,66,-71}, -{33,66,-70}, -{33,66,-69}, -{33,66,-68}, -{33,66,-67}, -{33,66,-66}, -{33,66,-65}, -{33,66,-64}, -{33,66,-63}, -{33,66,-62}, -{33,66,-61}, -{33,66,-60}, -{33,66,-59}, -{33,66,-58}, -{33,66,-57}, -{33,66,-56}, -{33,66,-55}, -{33,67,-98}, -{33,67,-97}, -{33,67,-96}, -{33,67,-95}, -{33,67,-94}, -{33,67,-93}, -{33,67,-92}, -{33,67,-91}, -{33,67,-90}, -{33,67,-89}, -{33,67,-88}, -{33,67,-87}, -{33,67,-86}, -{33,67,-85}, -{33,67,-84}, -{33,67,-83}, -{33,67,-82}, -{33,67,-81}, -{33,67,-80}, -{33,67,-79}, -{33,67,-78}, -{33,67,-77}, -{33,67,-76}, -{33,67,-75}, -{33,67,-74}, -{33,67,-73}, -{33,67,-72}, -{33,67,-71}, -{33,67,-70}, -{33,67,-69}, -{33,67,-68}, -{33,67,-67}, -{33,67,-66}, -{33,67,-65}, -{33,67,-64}, -{33,67,-63}, -{33,67,-62}, -{33,67,-61}, -{33,67,-60}, -{33,68,-99}, -{33,68,-98}, -{33,68,-97}, -{33,68,-96}, -{33,68,-95}, -{33,68,-94}, -{33,68,-93}, -{33,68,-92}, -{33,68,-91}, -{33,68,-90}, -{33,68,-89}, -{33,68,-88}, -{33,68,-87}, -{33,68,-86}, -{33,68,-85}, -{33,68,-84}, -{33,68,-83}, -{33,68,-82}, -{33,68,-81}, -{33,68,-80}, -{33,68,-79}, -{33,68,-78}, -{33,68,-77}, -{33,68,-76}, -{33,68,-75}, -{33,68,-74}, -{33,68,-73}, -{33,68,-72}, -{33,68,-71}, -{33,68,-70}, -{33,68,-69}, -{33,68,-68}, -{33,68,-67}, -{33,68,-66}, -{33,68,-65}, -{33,69,-100}, -{33,69,-99}, -{33,69,-98}, -{33,69,-97}, -{33,69,-96}, -{33,69,-95}, -{33,69,-94}, -{33,69,-93}, -{33,69,-92}, -{33,69,-91}, -{33,69,-90}, -{33,69,-89}, -{33,69,-88}, -{33,69,-87}, -{33,69,-86}, -{33,69,-85}, -{33,69,-84}, -{33,69,-83}, -{33,69,-82}, -{33,69,-81}, -{33,69,-80}, -{33,69,-79}, -{33,69,-78}, -{33,69,-77}, -{33,69,-76}, -{33,69,-75}, -{33,69,-74}, -{33,69,-73}, -{33,69,-72}, -{33,69,-71}, -{33,69,-70}, -{33,70,-101}, -{33,70,-100}, -{33,70,-99}, -{33,70,-98}, -{33,70,-97}, -{33,70,-96}, -{33,70,-95}, -{33,70,-94}, -{33,70,-93}, -{33,70,-92}, -{33,70,-91}, -{33,70,-90}, -{33,70,-89}, -{33,70,-88}, -{33,70,-87}, -{33,70,-86}, -{33,70,-85}, -{33,70,-84}, -{33,70,-83}, -{33,70,-82}, -{33,70,-81}, -{33,70,-80}, -{33,70,-79}, -{33,70,-78}, -{33,70,-77}, -{33,70,-76}, -{33,70,-75}, -{33,70,-74}, -{33,71,-101}, -{33,71,-100}, -{33,71,-99}, -{33,71,-98}, -{33,71,-97}, -{33,71,-96}, -{33,71,-95}, -{33,71,-94}, -{33,71,-93}, -{33,71,-92}, -{33,71,-91}, -{33,71,-90}, -{33,71,-89}, -{33,71,-88}, -{33,71,-87}, -{33,71,-86}, -{33,71,-85}, -{33,71,-84}, -{33,71,-83}, -{33,71,-82}, -{33,71,-81}, -{33,71,-80}, -{33,71,-79}, -{33,71,-78}, -{33,72,-102}, -{33,72,-101}, -{33,72,-100}, -{33,72,-99}, -{33,72,-98}, -{33,72,-97}, -{33,72,-96}, -{33,72,-95}, -{33,72,-94}, -{33,72,-93}, -{33,72,-92}, -{33,72,-91}, -{33,72,-90}, -{33,72,-89}, -{33,72,-88}, -{33,72,-87}, -{33,72,-86}, -{33,72,-85}, -{33,72,-84}, -{33,72,-83}, -{33,72,-82}, -{33,73,-103}, -{33,73,-102}, -{33,73,-101}, -{33,73,-100}, -{33,73,-99}, -{33,73,-98}, -{33,73,-97}, -{33,73,-96}, -{33,73,-95}, -{33,73,-94}, -{33,73,-93}, -{33,73,-92}, -{33,73,-91}, -{33,73,-90}, -{33,73,-89}, -{33,73,-88}, -{33,73,-87}, -{33,73,-86}, -{33,74,-104}, -{33,74,-103}, -{33,74,-102}, -{33,74,-101}, -{33,74,-100}, -{33,74,-99}, -{33,74,-98}, -{33,74,-97}, -{33,74,-96}, -{33,74,-95}, -{33,74,-94}, -{33,74,-93}, -{33,74,-92}, -{33,74,-91}, -{33,74,-90}, -{33,74,-89}, -{33,75,-105}, -{33,75,-104}, -{33,75,-103}, -{33,75,-102}, -{33,75,-101}, -{33,75,-100}, -{33,75,-99}, -{33,75,-98}, -{33,75,-97}, -{33,75,-96}, -{33,75,-95}, -{33,75,-94}, -{33,75,-93}, -{33,76,-106}, -{33,76,-105}, -{33,76,-104}, -{33,76,-103}, -{33,76,-102}, -{33,76,-101}, -{33,76,-100}, -{33,76,-99}, -{33,76,-98}, -{33,76,-97}, -{33,76,-96}, -{33,77,-106}, -{33,77,-105}, -{33,77,-104}, -{33,77,-103}, -{33,77,-102}, -{33,77,-101}, -{33,77,-100}, -{33,77,-99}, -{33,78,-106}, -{33,78,-105}, -{33,78,-104}, -{33,78,-103}, -{33,78,-102}, -{33,79,-106}, -{34,-41,37}, -{34,-41,38}, -{34,-41,39}, -{34,-41,40}, -{34,-40,33}, -{34,-40,34}, -{34,-40,35}, -{34,-40,36}, -{34,-40,37}, -{34,-40,38}, -{34,-40,39}, -{34,-40,40}, -{34,-39,29}, -{34,-39,30}, -{34,-39,31}, -{34,-39,32}, -{34,-39,33}, -{34,-39,34}, -{34,-39,35}, -{34,-39,36}, -{34,-39,37}, -{34,-39,38}, -{34,-39,39}, -{34,-39,40}, -{34,-38,26}, -{34,-38,27}, -{34,-38,28}, -{34,-38,29}, -{34,-38,30}, -{34,-38,31}, -{34,-38,32}, -{34,-38,33}, -{34,-38,34}, -{34,-38,35}, -{34,-38,36}, -{34,-38,37}, -{34,-38,38}, -{34,-38,39}, -{34,-38,40}, -{34,-37,23}, -{34,-37,24}, -{34,-37,25}, -{34,-37,26}, -{34,-37,27}, -{34,-37,28}, -{34,-37,29}, -{34,-37,30}, -{34,-37,31}, -{34,-37,32}, -{34,-37,33}, -{34,-37,34}, -{34,-37,35}, -{34,-37,36}, -{34,-37,37}, -{34,-37,38}, -{34,-37,39}, -{34,-37,40}, -{34,-36,20}, -{34,-36,21}, -{34,-36,22}, -{34,-36,23}, -{34,-36,24}, -{34,-36,25}, -{34,-36,26}, -{34,-36,27}, -{34,-36,28}, -{34,-36,29}, -{34,-36,30}, -{34,-36,31}, -{34,-36,32}, -{34,-36,33}, -{34,-36,34}, -{34,-36,35}, -{34,-36,36}, -{34,-36,37}, -{34,-36,38}, -{34,-36,39}, -{34,-36,40}, -{34,-35,18}, -{34,-35,19}, -{34,-35,20}, -{34,-35,21}, -{34,-35,22}, -{34,-35,23}, -{34,-35,24}, -{34,-35,25}, -{34,-35,26}, -{34,-35,27}, -{34,-35,28}, -{34,-35,29}, -{34,-35,30}, -{34,-35,31}, -{34,-35,32}, -{34,-35,33}, -{34,-35,34}, -{34,-35,35}, -{34,-35,36}, -{34,-35,37}, -{34,-35,38}, -{34,-35,39}, -{34,-35,40}, -{34,-34,15}, -{34,-34,16}, -{34,-34,17}, -{34,-34,18}, -{34,-34,19}, -{34,-34,20}, -{34,-34,21}, -{34,-34,22}, -{34,-34,23}, -{34,-34,24}, -{34,-34,25}, -{34,-34,26}, -{34,-34,27}, -{34,-34,28}, -{34,-34,29}, -{34,-34,30}, -{34,-34,31}, -{34,-34,32}, -{34,-34,33}, -{34,-34,34}, -{34,-34,35}, -{34,-34,36}, -{34,-34,37}, -{34,-34,38}, -{34,-34,39}, -{34,-34,40}, -{34,-33,13}, -{34,-33,14}, -{34,-33,15}, -{34,-33,16}, -{34,-33,17}, -{34,-33,18}, -{34,-33,19}, -{34,-33,20}, -{34,-33,21}, -{34,-33,22}, -{34,-33,23}, -{34,-33,24}, -{34,-33,25}, -{34,-33,26}, -{34,-33,27}, -{34,-33,28}, -{34,-33,29}, -{34,-33,30}, -{34,-33,31}, -{34,-33,32}, -{34,-33,33}, -{34,-33,34}, -{34,-33,35}, -{34,-33,36}, -{34,-33,37}, -{34,-33,38}, -{34,-33,39}, -{34,-33,40}, -{34,-32,11}, -{34,-32,12}, -{34,-32,13}, -{34,-32,14}, -{34,-32,15}, -{34,-32,16}, -{34,-32,17}, -{34,-32,18}, -{34,-32,19}, -{34,-32,20}, -{34,-32,21}, -{34,-32,22}, -{34,-32,23}, -{34,-32,24}, -{34,-32,25}, -{34,-32,26}, -{34,-32,27}, -{34,-32,28}, -{34,-32,29}, -{34,-32,30}, -{34,-32,31}, -{34,-32,32}, -{34,-32,33}, -{34,-32,34}, -{34,-32,35}, -{34,-32,36}, -{34,-32,37}, -{34,-32,38}, -{34,-32,39}, -{34,-32,40}, -{34,-31,9}, -{34,-31,10}, -{34,-31,11}, -{34,-31,12}, -{34,-31,13}, -{34,-31,14}, -{34,-31,15}, -{34,-31,16}, -{34,-31,17}, -{34,-31,18}, -{34,-31,19}, -{34,-31,20}, -{34,-31,21}, -{34,-31,22}, -{34,-31,23}, -{34,-31,24}, -{34,-31,25}, -{34,-31,26}, -{34,-31,27}, -{34,-31,28}, -{34,-31,29}, -{34,-31,30}, -{34,-31,31}, -{34,-31,32}, -{34,-31,33}, -{34,-31,34}, -{34,-31,35}, -{34,-31,36}, -{34,-31,37}, -{34,-31,38}, -{34,-31,39}, -{34,-31,40}, -{34,-30,7}, -{34,-30,8}, -{34,-30,9}, -{34,-30,10}, -{34,-30,11}, -{34,-30,12}, -{34,-30,13}, -{34,-30,14}, -{34,-30,15}, -{34,-30,16}, -{34,-30,17}, -{34,-30,18}, -{34,-30,19}, -{34,-30,20}, -{34,-30,21}, -{34,-30,22}, -{34,-30,23}, -{34,-30,24}, -{34,-30,25}, -{34,-30,26}, -{34,-30,27}, -{34,-30,28}, -{34,-30,29}, -{34,-30,30}, -{34,-30,31}, -{34,-30,32}, -{34,-30,33}, -{34,-30,34}, -{34,-30,35}, -{34,-30,36}, -{34,-30,37}, -{34,-30,38}, -{34,-30,39}, -{34,-30,40}, -{34,-29,5}, -{34,-29,6}, -{34,-29,7}, -{34,-29,8}, -{34,-29,9}, -{34,-29,10}, -{34,-29,11}, -{34,-29,12}, -{34,-29,13}, -{34,-29,14}, -{34,-29,15}, -{34,-29,16}, -{34,-29,17}, -{34,-29,18}, -{34,-29,19}, -{34,-29,20}, -{34,-29,21}, -{34,-29,22}, -{34,-29,23}, -{34,-29,24}, -{34,-29,25}, -{34,-29,26}, -{34,-29,27}, -{34,-29,28}, -{34,-29,29}, -{34,-29,30}, -{34,-29,31}, -{34,-29,32}, -{34,-29,33}, -{34,-29,34}, -{34,-29,35}, -{34,-29,36}, -{34,-29,37}, -{34,-29,38}, -{34,-29,39}, -{34,-29,40}, -{34,-28,3}, -{34,-28,4}, -{34,-28,5}, -{34,-28,6}, -{34,-28,7}, -{34,-28,8}, -{34,-28,9}, -{34,-28,10}, -{34,-28,11}, -{34,-28,12}, -{34,-28,13}, -{34,-28,14}, -{34,-28,15}, -{34,-28,16}, -{34,-28,17}, -{34,-28,18}, -{34,-28,19}, -{34,-28,20}, -{34,-28,21}, -{34,-28,22}, -{34,-28,23}, -{34,-28,24}, -{34,-28,25}, -{34,-28,26}, -{34,-28,27}, -{34,-28,28}, -{34,-28,29}, -{34,-28,30}, -{34,-28,31}, -{34,-28,32}, -{34,-28,33}, -{34,-28,34}, -{34,-28,35}, -{34,-28,36}, -{34,-28,37}, -{34,-28,38}, -{34,-28,39}, -{34,-28,40}, -{34,-27,1}, -{34,-27,2}, -{34,-27,3}, -{34,-27,4}, -{34,-27,5}, -{34,-27,6}, -{34,-27,7}, -{34,-27,8}, -{34,-27,9}, -{34,-27,10}, -{34,-27,11}, -{34,-27,12}, -{34,-27,13}, -{34,-27,14}, -{34,-27,15}, -{34,-27,16}, -{34,-27,17}, -{34,-27,18}, -{34,-27,19}, -{34,-27,20}, -{34,-27,21}, -{34,-27,22}, -{34,-27,23}, -{34,-27,24}, -{34,-27,25}, -{34,-27,26}, -{34,-27,27}, -{34,-27,28}, -{34,-27,29}, -{34,-27,30}, -{34,-27,31}, -{34,-27,32}, -{34,-27,33}, -{34,-27,34}, -{34,-27,35}, -{34,-27,36}, -{34,-27,37}, -{34,-27,38}, -{34,-27,39}, -{34,-27,40}, -{34,-26,-1}, -{34,-26,0}, -{34,-26,1}, -{34,-26,2}, -{34,-26,3}, -{34,-26,4}, -{34,-26,5}, -{34,-26,6}, -{34,-26,7}, -{34,-26,8}, -{34,-26,9}, -{34,-26,10}, -{34,-26,11}, -{34,-26,12}, -{34,-26,13}, -{34,-26,14}, -{34,-26,15}, -{34,-26,16}, -{34,-26,17}, -{34,-26,18}, -{34,-26,19}, -{34,-26,20}, -{34,-26,21}, -{34,-26,22}, -{34,-26,23}, -{34,-26,24}, -{34,-26,25}, -{34,-26,26}, -{34,-26,27}, -{34,-26,28}, -{34,-26,29}, -{34,-26,30}, -{34,-26,31}, -{34,-26,32}, -{34,-26,33}, -{34,-26,34}, -{34,-26,35}, -{34,-26,36}, -{34,-26,37}, -{34,-26,38}, -{34,-26,39}, -{34,-26,40}, -{34,-25,-2}, -{34,-25,-1}, -{34,-25,0}, -{34,-25,1}, -{34,-25,2}, -{34,-25,3}, -{34,-25,4}, -{34,-25,5}, -{34,-25,6}, -{34,-25,7}, -{34,-25,8}, -{34,-25,9}, -{34,-25,10}, -{34,-25,11}, -{34,-25,12}, -{34,-25,13}, -{34,-25,14}, -{34,-25,15}, -{34,-25,16}, -{34,-25,17}, -{34,-25,18}, -{34,-25,19}, -{34,-25,20}, -{34,-25,21}, -{34,-25,22}, -{34,-25,23}, -{34,-25,24}, -{34,-25,25}, -{34,-25,26}, -{34,-25,27}, -{34,-25,28}, -{34,-25,29}, -{34,-25,30}, -{34,-25,31}, -{34,-25,32}, -{34,-25,33}, -{34,-25,34}, -{34,-25,35}, -{34,-25,36}, -{34,-25,37}, -{34,-25,38}, -{34,-25,39}, -{34,-25,40}, -{34,-25,41}, -{34,-24,-4}, -{34,-24,-3}, -{34,-24,-2}, -{34,-24,-1}, -{34,-24,0}, -{34,-24,1}, -{34,-24,2}, -{34,-24,3}, -{34,-24,4}, -{34,-24,5}, -{34,-24,6}, -{34,-24,7}, -{34,-24,8}, -{34,-24,9}, -{34,-24,10}, -{34,-24,11}, -{34,-24,12}, -{34,-24,13}, -{34,-24,14}, -{34,-24,15}, -{34,-24,16}, -{34,-24,17}, -{34,-24,18}, -{34,-24,19}, -{34,-24,20}, -{34,-24,21}, -{34,-24,22}, -{34,-24,23}, -{34,-24,24}, -{34,-24,25}, -{34,-24,26}, -{34,-24,27}, -{34,-24,28}, -{34,-24,29}, -{34,-24,30}, -{34,-24,31}, -{34,-24,32}, -{34,-24,33}, -{34,-24,34}, -{34,-24,35}, -{34,-24,36}, -{34,-24,37}, -{34,-24,38}, -{34,-24,39}, -{34,-24,40}, -{34,-24,41}, -{34,-23,-5}, -{34,-23,-4}, -{34,-23,-3}, -{34,-23,-2}, -{34,-23,-1}, -{34,-23,0}, -{34,-23,1}, -{34,-23,2}, -{34,-23,3}, -{34,-23,4}, -{34,-23,5}, -{34,-23,6}, -{34,-23,7}, -{34,-23,8}, -{34,-23,9}, -{34,-23,10}, -{34,-23,11}, -{34,-23,12}, -{34,-23,13}, -{34,-23,14}, -{34,-23,15}, -{34,-23,16}, -{34,-23,17}, -{34,-23,18}, -{34,-23,19}, -{34,-23,20}, -{34,-23,21}, -{34,-23,22}, -{34,-23,23}, -{34,-23,24}, -{34,-23,25}, -{34,-23,26}, -{34,-23,27}, -{34,-23,28}, -{34,-23,29}, -{34,-23,30}, -{34,-23,31}, -{34,-23,32}, -{34,-23,33}, -{34,-23,34}, -{34,-23,35}, -{34,-23,36}, -{34,-23,37}, -{34,-23,38}, -{34,-23,39}, -{34,-23,40}, -{34,-23,41}, -{34,-22,-7}, -{34,-22,-6}, -{34,-22,-5}, -{34,-22,-4}, -{34,-22,-3}, -{34,-22,-2}, -{34,-22,-1}, -{34,-22,0}, -{34,-22,1}, -{34,-22,2}, -{34,-22,3}, -{34,-22,4}, -{34,-22,5}, -{34,-22,6}, -{34,-22,7}, -{34,-22,8}, -{34,-22,9}, -{34,-22,10}, -{34,-22,11}, -{34,-22,12}, -{34,-22,13}, -{34,-22,14}, -{34,-22,15}, -{34,-22,16}, -{34,-22,17}, -{34,-22,18}, -{34,-22,19}, -{34,-22,20}, -{34,-22,21}, -{34,-22,22}, -{34,-22,23}, -{34,-22,24}, -{34,-22,25}, -{34,-22,26}, -{34,-22,27}, -{34,-22,28}, -{34,-22,29}, -{34,-22,30}, -{34,-22,31}, -{34,-22,32}, -{34,-22,33}, -{34,-22,34}, -{34,-22,35}, -{34,-22,36}, -{34,-22,37}, -{34,-22,38}, -{34,-22,39}, -{34,-22,40}, -{34,-22,41}, -{34,-21,-9}, -{34,-21,-8}, -{34,-21,-7}, -{34,-21,-6}, -{34,-21,-5}, -{34,-21,-4}, -{34,-21,-3}, -{34,-21,-2}, -{34,-21,-1}, -{34,-21,0}, -{34,-21,1}, -{34,-21,2}, -{34,-21,3}, -{34,-21,4}, -{34,-21,5}, -{34,-21,6}, -{34,-21,7}, -{34,-21,8}, -{34,-21,9}, -{34,-21,10}, -{34,-21,11}, -{34,-21,12}, -{34,-21,13}, -{34,-21,14}, -{34,-21,15}, -{34,-21,16}, -{34,-21,17}, -{34,-21,18}, -{34,-21,19}, -{34,-21,20}, -{34,-21,21}, -{34,-21,22}, -{34,-21,23}, -{34,-21,24}, -{34,-21,25}, -{34,-21,26}, -{34,-21,27}, -{34,-21,28}, -{34,-21,29}, -{34,-21,30}, -{34,-21,31}, -{34,-21,32}, -{34,-21,33}, -{34,-21,34}, -{34,-21,35}, -{34,-21,36}, -{34,-21,37}, -{34,-21,38}, -{34,-21,39}, -{34,-21,40}, -{34,-21,41}, -{34,-20,-10}, -{34,-20,-9}, -{34,-20,-8}, -{34,-20,-7}, -{34,-20,-6}, -{34,-20,-5}, -{34,-20,-4}, -{34,-20,-3}, -{34,-20,-2}, -{34,-20,-1}, -{34,-20,0}, -{34,-20,1}, -{34,-20,2}, -{34,-20,3}, -{34,-20,4}, -{34,-20,5}, -{34,-20,6}, -{34,-20,7}, -{34,-20,8}, -{34,-20,9}, -{34,-20,10}, -{34,-20,11}, -{34,-20,12}, -{34,-20,13}, -{34,-20,14}, -{34,-20,15}, -{34,-20,16}, -{34,-20,17}, -{34,-20,18}, -{34,-20,19}, -{34,-20,20}, -{34,-20,21}, -{34,-20,22}, -{34,-20,23}, -{34,-20,24}, -{34,-20,25}, -{34,-20,26}, -{34,-20,27}, -{34,-20,28}, -{34,-20,29}, -{34,-20,30}, -{34,-20,31}, -{34,-20,32}, -{34,-20,33}, -{34,-20,34}, -{34,-20,35}, -{34,-20,36}, -{34,-20,37}, -{34,-20,38}, -{34,-20,39}, -{34,-20,40}, -{34,-20,41}, -{34,-19,-12}, -{34,-19,-11}, -{34,-19,-10}, -{34,-19,-9}, -{34,-19,-8}, -{34,-19,-7}, -{34,-19,-6}, -{34,-19,-5}, -{34,-19,-4}, -{34,-19,-3}, -{34,-19,-2}, -{34,-19,-1}, -{34,-19,0}, -{34,-19,1}, -{34,-19,2}, -{34,-19,3}, -{34,-19,4}, -{34,-19,5}, -{34,-19,6}, -{34,-19,7}, -{34,-19,8}, -{34,-19,9}, -{34,-19,10}, -{34,-19,11}, -{34,-19,12}, -{34,-19,13}, -{34,-19,14}, -{34,-19,15}, -{34,-19,16}, -{34,-19,17}, -{34,-19,18}, -{34,-19,19}, -{34,-19,20}, -{34,-19,21}, -{34,-19,22}, -{34,-19,23}, -{34,-19,24}, -{34,-19,25}, -{34,-19,26}, -{34,-19,27}, -{34,-19,28}, -{34,-19,29}, -{34,-19,30}, -{34,-19,31}, -{34,-19,32}, -{34,-19,33}, -{34,-19,34}, -{34,-19,35}, -{34,-19,36}, -{34,-19,37}, -{34,-19,38}, -{34,-19,39}, -{34,-19,40}, -{34,-19,41}, -{34,-18,-13}, -{34,-18,-12}, -{34,-18,-11}, -{34,-18,-10}, -{34,-18,-9}, -{34,-18,-8}, -{34,-18,-7}, -{34,-18,-6}, -{34,-18,-5}, -{34,-18,-4}, -{34,-18,-3}, -{34,-18,-2}, -{34,-18,-1}, -{34,-18,0}, -{34,-18,1}, -{34,-18,2}, -{34,-18,3}, -{34,-18,4}, -{34,-18,5}, -{34,-18,6}, -{34,-18,7}, -{34,-18,8}, -{34,-18,9}, -{34,-18,10}, -{34,-18,11}, -{34,-18,12}, -{34,-18,13}, -{34,-18,14}, -{34,-18,15}, -{34,-18,16}, -{34,-18,17}, -{34,-18,18}, -{34,-18,19}, -{34,-18,20}, -{34,-18,21}, -{34,-18,22}, -{34,-18,23}, -{34,-18,24}, -{34,-18,25}, -{34,-18,26}, -{34,-18,27}, -{34,-18,28}, -{34,-18,29}, -{34,-18,30}, -{34,-18,31}, -{34,-18,32}, -{34,-18,33}, -{34,-18,34}, -{34,-18,35}, -{34,-18,36}, -{34,-18,37}, -{34,-18,38}, -{34,-18,39}, -{34,-18,40}, -{34,-18,41}, -{34,-17,-14}, -{34,-17,-13}, -{34,-17,-12}, -{34,-17,-11}, -{34,-17,-10}, -{34,-17,-9}, -{34,-17,-8}, -{34,-17,-7}, -{34,-17,-6}, -{34,-17,-5}, -{34,-17,-4}, -{34,-17,-3}, -{34,-17,-2}, -{34,-17,-1}, -{34,-17,0}, -{34,-17,1}, -{34,-17,2}, -{34,-17,3}, -{34,-17,4}, -{34,-17,5}, -{34,-17,6}, -{34,-17,7}, -{34,-17,8}, -{34,-17,9}, -{34,-17,10}, -{34,-17,11}, -{34,-17,12}, -{34,-17,13}, -{34,-17,14}, -{34,-17,15}, -{34,-17,16}, -{34,-17,17}, -{34,-17,18}, -{34,-17,19}, -{34,-17,20}, -{34,-17,21}, -{34,-17,22}, -{34,-17,23}, -{34,-17,24}, -{34,-17,25}, -{34,-17,26}, -{34,-17,27}, -{34,-17,28}, -{34,-17,29}, -{34,-17,30}, -{34,-17,31}, -{34,-17,32}, -{34,-17,33}, -{34,-17,34}, -{34,-17,35}, -{34,-17,36}, -{34,-17,37}, -{34,-17,38}, -{34,-17,39}, -{34,-17,40}, -{34,-17,41}, -{34,-16,-16}, -{34,-16,-15}, -{34,-16,-14}, -{34,-16,-13}, -{34,-16,-12}, -{34,-16,-11}, -{34,-16,-10}, -{34,-16,-9}, -{34,-16,-8}, -{34,-16,-7}, -{34,-16,-6}, -{34,-16,-5}, -{34,-16,-4}, -{34,-16,-3}, -{34,-16,-2}, -{34,-16,-1}, -{34,-16,0}, -{34,-16,1}, -{34,-16,2}, -{34,-16,3}, -{34,-16,4}, -{34,-16,5}, -{34,-16,6}, -{34,-16,7}, -{34,-16,8}, -{34,-16,9}, -{34,-16,10}, -{34,-16,11}, -{34,-16,12}, -{34,-16,13}, -{34,-16,14}, -{34,-16,15}, -{34,-16,16}, -{34,-16,17}, -{34,-16,18}, -{34,-16,19}, -{34,-16,20}, -{34,-16,21}, -{34,-16,22}, -{34,-16,23}, -{34,-16,24}, -{34,-16,25}, -{34,-16,26}, -{34,-16,27}, -{34,-16,28}, -{34,-16,29}, -{34,-16,30}, -{34,-16,31}, -{34,-16,32}, -{34,-16,33}, -{34,-16,34}, -{34,-16,35}, -{34,-16,36}, -{34,-16,37}, -{34,-16,38}, -{34,-16,39}, -{34,-16,40}, -{34,-16,41}, -{34,-15,-17}, -{34,-15,-16}, -{34,-15,-15}, -{34,-15,-14}, -{34,-15,-13}, -{34,-15,-12}, -{34,-15,-11}, -{34,-15,-10}, -{34,-15,-9}, -{34,-15,-8}, -{34,-15,-7}, -{34,-15,-6}, -{34,-15,-5}, -{34,-15,-4}, -{34,-15,-3}, -{34,-15,-2}, -{34,-15,-1}, -{34,-15,0}, -{34,-15,1}, -{34,-15,2}, -{34,-15,3}, -{34,-15,4}, -{34,-15,5}, -{34,-15,6}, -{34,-15,7}, -{34,-15,8}, -{34,-15,9}, -{34,-15,10}, -{34,-15,11}, -{34,-15,12}, -{34,-15,13}, -{34,-15,14}, -{34,-15,15}, -{34,-15,16}, -{34,-15,17}, -{34,-15,18}, -{34,-15,19}, -{34,-15,20}, -{34,-15,21}, -{34,-15,22}, -{34,-15,23}, -{34,-15,24}, -{34,-15,25}, -{34,-15,26}, -{34,-15,27}, -{34,-15,28}, -{34,-15,29}, -{34,-15,30}, -{34,-15,31}, -{34,-15,32}, -{34,-15,33}, -{34,-15,34}, -{34,-15,35}, -{34,-15,36}, -{34,-15,37}, -{34,-15,38}, -{34,-15,39}, -{34,-15,40}, -{34,-15,41}, -{34,-14,-19}, -{34,-14,-18}, -{34,-14,-17}, -{34,-14,-16}, -{34,-14,-15}, -{34,-14,-14}, -{34,-14,-13}, -{34,-14,-12}, -{34,-14,-11}, -{34,-14,-10}, -{34,-14,-9}, -{34,-14,-8}, -{34,-14,-7}, -{34,-14,-6}, -{34,-14,-5}, -{34,-14,-4}, -{34,-14,-3}, -{34,-14,-2}, -{34,-14,-1}, -{34,-14,0}, -{34,-14,1}, -{34,-14,2}, -{34,-14,3}, -{34,-14,4}, -{34,-14,5}, -{34,-14,6}, -{34,-14,7}, -{34,-14,8}, -{34,-14,9}, -{34,-14,10}, -{34,-14,11}, -{34,-14,12}, -{34,-14,13}, -{34,-14,14}, -{34,-14,15}, -{34,-14,16}, -{34,-14,17}, -{34,-14,18}, -{34,-14,19}, -{34,-14,20}, -{34,-14,21}, -{34,-14,22}, -{34,-14,23}, -{34,-14,24}, -{34,-14,25}, -{34,-14,26}, -{34,-14,27}, -{34,-14,28}, -{34,-14,29}, -{34,-14,30}, -{34,-14,31}, -{34,-14,32}, -{34,-14,33}, -{34,-14,34}, -{34,-14,35}, -{34,-14,36}, -{34,-14,37}, -{34,-14,38}, -{34,-14,39}, -{34,-14,40}, -{34,-14,41}, -{34,-13,-20}, -{34,-13,-19}, -{34,-13,-18}, -{34,-13,-17}, -{34,-13,-16}, -{34,-13,-15}, -{34,-13,-14}, -{34,-13,-13}, -{34,-13,-12}, -{34,-13,-11}, -{34,-13,-10}, -{34,-13,-9}, -{34,-13,-8}, -{34,-13,-7}, -{34,-13,-6}, -{34,-13,-5}, -{34,-13,-4}, -{34,-13,-3}, -{34,-13,-2}, -{34,-13,-1}, -{34,-13,0}, -{34,-13,1}, -{34,-13,2}, -{34,-13,3}, -{34,-13,4}, -{34,-13,5}, -{34,-13,6}, -{34,-13,7}, -{34,-13,8}, -{34,-13,9}, -{34,-13,10}, -{34,-13,11}, -{34,-13,12}, -{34,-13,13}, -{34,-13,14}, -{34,-13,15}, -{34,-13,16}, -{34,-13,17}, -{34,-13,18}, -{34,-13,19}, -{34,-13,20}, -{34,-13,21}, -{34,-13,22}, -{34,-13,23}, -{34,-13,24}, -{34,-13,25}, -{34,-13,26}, -{34,-13,27}, -{34,-13,28}, -{34,-13,29}, -{34,-13,30}, -{34,-13,31}, -{34,-13,32}, -{34,-13,33}, -{34,-13,34}, -{34,-13,35}, -{34,-13,36}, -{34,-13,37}, -{34,-13,38}, -{34,-13,39}, -{34,-13,40}, -{34,-13,41}, -{34,-12,-21}, -{34,-12,-20}, -{34,-12,-19}, -{34,-12,-18}, -{34,-12,-17}, -{34,-12,-16}, -{34,-12,-15}, -{34,-12,-14}, -{34,-12,-13}, -{34,-12,-12}, -{34,-12,-11}, -{34,-12,-10}, -{34,-12,-9}, -{34,-12,-8}, -{34,-12,-7}, -{34,-12,-6}, -{34,-12,-5}, -{34,-12,-4}, -{34,-12,-3}, -{34,-12,-2}, -{34,-12,-1}, -{34,-12,0}, -{34,-12,1}, -{34,-12,2}, -{34,-12,3}, -{34,-12,4}, -{34,-12,5}, -{34,-12,6}, -{34,-12,7}, -{34,-12,8}, -{34,-12,9}, -{34,-12,10}, -{34,-12,11}, -{34,-12,12}, -{34,-12,13}, -{34,-12,14}, -{34,-12,15}, -{34,-12,16}, -{34,-12,17}, -{34,-12,18}, -{34,-12,19}, -{34,-12,20}, -{34,-12,21}, -{34,-12,22}, -{34,-12,23}, -{34,-12,24}, -{34,-12,25}, -{34,-12,26}, -{34,-12,27}, -{34,-12,28}, -{34,-12,29}, -{34,-12,30}, -{34,-12,31}, -{34,-12,32}, -{34,-12,33}, -{34,-12,34}, -{34,-12,35}, -{34,-12,36}, -{34,-12,37}, -{34,-12,38}, -{34,-12,39}, -{34,-12,40}, -{34,-12,41}, -{34,-11,-22}, -{34,-11,-21}, -{34,-11,-20}, -{34,-11,-19}, -{34,-11,-18}, -{34,-11,-17}, -{34,-11,-16}, -{34,-11,-15}, -{34,-11,-14}, -{34,-11,-13}, -{34,-11,-12}, -{34,-11,-11}, -{34,-11,-10}, -{34,-11,-9}, -{34,-11,-8}, -{34,-11,-7}, -{34,-11,-6}, -{34,-11,-5}, -{34,-11,-4}, -{34,-11,-3}, -{34,-11,-2}, -{34,-11,-1}, -{34,-11,0}, -{34,-11,1}, -{34,-11,2}, -{34,-11,3}, -{34,-11,4}, -{34,-11,5}, -{34,-11,6}, -{34,-11,7}, -{34,-11,8}, -{34,-11,9}, -{34,-11,10}, -{34,-11,11}, -{34,-11,12}, -{34,-11,13}, -{34,-11,14}, -{34,-11,15}, -{34,-11,16}, -{34,-11,17}, -{34,-11,18}, -{34,-11,19}, -{34,-11,20}, -{34,-11,21}, -{34,-11,22}, -{34,-11,23}, -{34,-11,24}, -{34,-11,25}, -{34,-11,26}, -{34,-11,27}, -{34,-11,28}, -{34,-11,29}, -{34,-11,30}, -{34,-11,31}, -{34,-11,32}, -{34,-11,33}, -{34,-11,34}, -{34,-11,35}, -{34,-11,36}, -{34,-11,37}, -{34,-11,38}, -{34,-11,39}, -{34,-11,40}, -{34,-11,41}, -{34,-10,-24}, -{34,-10,-23}, -{34,-10,-22}, -{34,-10,-21}, -{34,-10,-20}, -{34,-10,-19}, -{34,-10,-18}, -{34,-10,-17}, -{34,-10,-16}, -{34,-10,-15}, -{34,-10,-14}, -{34,-10,-13}, -{34,-10,-12}, -{34,-10,-11}, -{34,-10,-10}, -{34,-10,-9}, -{34,-10,-8}, -{34,-10,-7}, -{34,-10,-6}, -{34,-10,-5}, -{34,-10,-4}, -{34,-10,-3}, -{34,-10,-2}, -{34,-10,-1}, -{34,-10,0}, -{34,-10,1}, -{34,-10,2}, -{34,-10,3}, -{34,-10,4}, -{34,-10,5}, -{34,-10,6}, -{34,-10,7}, -{34,-10,8}, -{34,-10,9}, -{34,-10,10}, -{34,-10,11}, -{34,-10,12}, -{34,-10,13}, -{34,-10,14}, -{34,-10,15}, -{34,-10,16}, -{34,-10,17}, -{34,-10,18}, -{34,-10,19}, -{34,-10,20}, -{34,-10,21}, -{34,-10,22}, -{34,-10,23}, -{34,-10,24}, -{34,-10,25}, -{34,-10,26}, -{34,-10,27}, -{34,-10,28}, -{34,-10,29}, -{34,-10,30}, -{34,-10,31}, -{34,-10,32}, -{34,-10,33}, -{34,-10,34}, -{34,-10,35}, -{34,-10,36}, -{34,-10,37}, -{34,-10,38}, -{34,-10,39}, -{34,-10,40}, -{34,-10,41}, -{34,-9,-25}, -{34,-9,-24}, -{34,-9,-23}, -{34,-9,-22}, -{34,-9,-21}, -{34,-9,-20}, -{34,-9,-19}, -{34,-9,-18}, -{34,-9,-17}, -{34,-9,-16}, -{34,-9,-15}, -{34,-9,-14}, -{34,-9,-13}, -{34,-9,-12}, -{34,-9,-11}, -{34,-9,-10}, -{34,-9,-9}, -{34,-9,-8}, -{34,-9,-7}, -{34,-9,-6}, -{34,-9,-5}, -{34,-9,-4}, -{34,-9,-3}, -{34,-9,-2}, -{34,-9,-1}, -{34,-9,0}, -{34,-9,1}, -{34,-9,2}, -{34,-9,3}, -{34,-9,4}, -{34,-9,5}, -{34,-9,6}, -{34,-9,7}, -{34,-9,8}, -{34,-9,9}, -{34,-9,10}, -{34,-9,11}, -{34,-9,12}, -{34,-9,13}, -{34,-9,14}, -{34,-9,15}, -{34,-9,16}, -{34,-9,17}, -{34,-9,18}, -{34,-9,19}, -{34,-9,20}, -{34,-9,21}, -{34,-9,22}, -{34,-9,23}, -{34,-9,24}, -{34,-9,25}, -{34,-9,26}, -{34,-9,27}, -{34,-9,28}, -{34,-9,29}, -{34,-9,30}, -{34,-9,31}, -{34,-9,32}, -{34,-9,33}, -{34,-9,34}, -{34,-9,35}, -{34,-9,36}, -{34,-9,37}, -{34,-9,38}, -{34,-9,39}, -{34,-9,40}, -{34,-9,41}, -{34,-8,-26}, -{34,-8,-25}, -{34,-8,-24}, -{34,-8,-23}, -{34,-8,-22}, -{34,-8,-21}, -{34,-8,-20}, -{34,-8,-19}, -{34,-8,-18}, -{34,-8,-17}, -{34,-8,-16}, -{34,-8,-15}, -{34,-8,-14}, -{34,-8,-13}, -{34,-8,-12}, -{34,-8,-11}, -{34,-8,-10}, -{34,-8,-9}, -{34,-8,-8}, -{34,-8,-7}, -{34,-8,-6}, -{34,-8,-5}, -{34,-8,-4}, -{34,-8,-3}, -{34,-8,-2}, -{34,-8,-1}, -{34,-8,0}, -{34,-8,1}, -{34,-8,2}, -{34,-8,3}, -{34,-8,4}, -{34,-8,5}, -{34,-8,6}, -{34,-8,7}, -{34,-8,8}, -{34,-8,9}, -{34,-8,10}, -{34,-8,11}, -{34,-8,12}, -{34,-8,13}, -{34,-8,14}, -{34,-8,15}, -{34,-8,16}, -{34,-8,17}, -{34,-8,18}, -{34,-8,19}, -{34,-8,20}, -{34,-8,21}, -{34,-8,22}, -{34,-8,23}, -{34,-8,24}, -{34,-8,25}, -{34,-8,26}, -{34,-8,27}, -{34,-8,28}, -{34,-8,29}, -{34,-8,30}, -{34,-8,31}, -{34,-8,32}, -{34,-8,33}, -{34,-8,34}, -{34,-8,35}, -{34,-8,36}, -{34,-8,37}, -{34,-8,38}, -{34,-8,39}, -{34,-8,40}, -{34,-8,41}, -{34,-8,42}, -{34,-7,-27}, -{34,-7,-26}, -{34,-7,-25}, -{34,-7,-24}, -{34,-7,-23}, -{34,-7,-22}, -{34,-7,-21}, -{34,-7,-20}, -{34,-7,-19}, -{34,-7,-18}, -{34,-7,-17}, -{34,-7,-16}, -{34,-7,-15}, -{34,-7,-14}, -{34,-7,-13}, -{34,-7,-12}, -{34,-7,-11}, -{34,-7,-10}, -{34,-7,-9}, -{34,-7,-8}, -{34,-7,-7}, -{34,-7,-6}, -{34,-7,-5}, -{34,-7,-4}, -{34,-7,-3}, -{34,-7,-2}, -{34,-7,-1}, -{34,-7,0}, -{34,-7,1}, -{34,-7,2}, -{34,-7,3}, -{34,-7,4}, -{34,-7,5}, -{34,-7,6}, -{34,-7,7}, -{34,-7,8}, -{34,-7,9}, -{34,-7,10}, -{34,-7,11}, -{34,-7,12}, -{34,-7,13}, -{34,-7,14}, -{34,-7,15}, -{34,-7,16}, -{34,-7,17}, -{34,-7,18}, -{34,-7,19}, -{34,-7,20}, -{34,-7,21}, -{34,-7,22}, -{34,-7,23}, -{34,-7,24}, -{34,-7,25}, -{34,-7,26}, -{34,-7,27}, -{34,-7,28}, -{34,-7,29}, -{34,-7,30}, -{34,-7,31}, -{34,-7,32}, -{34,-7,33}, -{34,-7,34}, -{34,-7,35}, -{34,-7,36}, -{34,-7,37}, -{34,-7,38}, -{34,-7,39}, -{34,-7,40}, -{34,-7,41}, -{34,-7,42}, -{34,-6,-29}, -{34,-6,-28}, -{34,-6,-27}, -{34,-6,-26}, -{34,-6,-25}, -{34,-6,-24}, -{34,-6,-23}, -{34,-6,-22}, -{34,-6,-21}, -{34,-6,-20}, -{34,-6,-19}, -{34,-6,-18}, -{34,-6,-17}, -{34,-6,-16}, -{34,-6,-15}, -{34,-6,-14}, -{34,-6,-13}, -{34,-6,-12}, -{34,-6,-11}, -{34,-6,-10}, -{34,-6,-9}, -{34,-6,-8}, -{34,-6,-7}, -{34,-6,-6}, -{34,-6,-5}, -{34,-6,-4}, -{34,-6,-3}, -{34,-6,-2}, -{34,-6,-1}, -{34,-6,0}, -{34,-6,1}, -{34,-6,2}, -{34,-6,3}, -{34,-6,4}, -{34,-6,5}, -{34,-6,6}, -{34,-6,7}, -{34,-6,8}, -{34,-6,9}, -{34,-6,10}, -{34,-6,11}, -{34,-6,12}, -{34,-6,13}, -{34,-6,14}, -{34,-6,15}, -{34,-6,16}, -{34,-6,17}, -{34,-6,18}, -{34,-6,19}, -{34,-6,20}, -{34,-6,21}, -{34,-6,22}, -{34,-6,23}, -{34,-6,24}, -{34,-6,25}, -{34,-6,26}, -{34,-6,27}, -{34,-6,28}, -{34,-6,29}, -{34,-6,30}, -{34,-6,31}, -{34,-6,32}, -{34,-6,33}, -{34,-6,34}, -{34,-6,35}, -{34,-6,36}, -{34,-6,37}, -{34,-6,38}, -{34,-6,39}, -{34,-6,40}, -{34,-6,41}, -{34,-6,42}, -{34,-5,-30}, -{34,-5,-29}, -{34,-5,-28}, -{34,-5,-27}, -{34,-5,-26}, -{34,-5,-25}, -{34,-5,-24}, -{34,-5,-23}, -{34,-5,-22}, -{34,-5,-21}, -{34,-5,-20}, -{34,-5,-19}, -{34,-5,-18}, -{34,-5,-17}, -{34,-5,-16}, -{34,-5,-15}, -{34,-5,-14}, -{34,-5,-13}, -{34,-5,-12}, -{34,-5,-11}, -{34,-5,-10}, -{34,-5,-9}, -{34,-5,-8}, -{34,-5,-7}, -{34,-5,-6}, -{34,-5,-5}, -{34,-5,-4}, -{34,-5,-3}, -{34,-5,-2}, -{34,-5,-1}, -{34,-5,0}, -{34,-5,1}, -{34,-5,2}, -{34,-5,3}, -{34,-5,4}, -{34,-5,5}, -{34,-5,6}, -{34,-5,7}, -{34,-5,8}, -{34,-5,9}, -{34,-5,10}, -{34,-5,11}, -{34,-5,12}, -{34,-5,13}, -{34,-5,14}, -{34,-5,15}, -{34,-5,16}, -{34,-5,17}, -{34,-5,18}, -{34,-5,19}, -{34,-5,20}, -{34,-5,21}, -{34,-5,22}, -{34,-5,23}, -{34,-5,24}, -{34,-5,25}, -{34,-5,26}, -{34,-5,27}, -{34,-5,28}, -{34,-5,29}, -{34,-5,30}, -{34,-5,31}, -{34,-5,32}, -{34,-5,33}, -{34,-5,34}, -{34,-5,35}, -{34,-5,36}, -{34,-5,37}, -{34,-5,38}, -{34,-5,39}, -{34,-5,40}, -{34,-5,41}, -{34,-5,42}, -{34,-4,-31}, -{34,-4,-30}, -{34,-4,-29}, -{34,-4,-28}, -{34,-4,-27}, -{34,-4,-26}, -{34,-4,-25}, -{34,-4,-24}, -{34,-4,-23}, -{34,-4,-22}, -{34,-4,-21}, -{34,-4,-20}, -{34,-4,-19}, -{34,-4,-18}, -{34,-4,-17}, -{34,-4,-16}, -{34,-4,-15}, -{34,-4,-14}, -{34,-4,-13}, -{34,-4,-12}, -{34,-4,-11}, -{34,-4,-10}, -{34,-4,-9}, -{34,-4,-8}, -{34,-4,-7}, -{34,-4,-6}, -{34,-4,-5}, -{34,-4,-4}, -{34,-4,-3}, -{34,-4,-2}, -{34,-4,-1}, -{34,-4,0}, -{34,-4,1}, -{34,-4,2}, -{34,-4,3}, -{34,-4,4}, -{34,-4,5}, -{34,-4,6}, -{34,-4,7}, -{34,-4,8}, -{34,-4,9}, -{34,-4,10}, -{34,-4,11}, -{34,-4,12}, -{34,-4,13}, -{34,-4,14}, -{34,-4,15}, -{34,-4,16}, -{34,-4,17}, -{34,-4,18}, -{34,-4,19}, -{34,-4,20}, -{34,-4,21}, -{34,-4,22}, -{34,-4,23}, -{34,-4,24}, -{34,-4,25}, -{34,-4,26}, -{34,-4,27}, -{34,-4,28}, -{34,-4,29}, -{34,-4,30}, -{34,-4,31}, -{34,-4,32}, -{34,-4,33}, -{34,-4,34}, -{34,-4,35}, -{34,-4,36}, -{34,-4,37}, -{34,-4,38}, -{34,-4,39}, -{34,-4,40}, -{34,-4,41}, -{34,-4,42}, -{34,-3,-32}, -{34,-3,-31}, -{34,-3,-30}, -{34,-3,-29}, -{34,-3,-28}, -{34,-3,-27}, -{34,-3,-26}, -{34,-3,-25}, -{34,-3,-24}, -{34,-3,-23}, -{34,-3,-22}, -{34,-3,-21}, -{34,-3,-20}, -{34,-3,-19}, -{34,-3,-18}, -{34,-3,-17}, -{34,-3,-16}, -{34,-3,-15}, -{34,-3,-14}, -{34,-3,-13}, -{34,-3,-12}, -{34,-3,-11}, -{34,-3,-10}, -{34,-3,-9}, -{34,-3,-8}, -{34,-3,-7}, -{34,-3,-6}, -{34,-3,-5}, -{34,-3,-4}, -{34,-3,-3}, -{34,-3,-2}, -{34,-3,-1}, -{34,-3,0}, -{34,-3,1}, -{34,-3,2}, -{34,-3,3}, -{34,-3,4}, -{34,-3,5}, -{34,-3,6}, -{34,-3,7}, -{34,-3,8}, -{34,-3,9}, -{34,-3,10}, -{34,-3,11}, -{34,-3,12}, -{34,-3,13}, -{34,-3,14}, -{34,-3,15}, -{34,-3,16}, -{34,-3,17}, -{34,-3,18}, -{34,-3,19}, -{34,-3,20}, -{34,-3,21}, -{34,-3,22}, -{34,-3,23}, -{34,-3,24}, -{34,-3,25}, -{34,-3,26}, -{34,-3,27}, -{34,-3,28}, -{34,-3,29}, -{34,-3,30}, -{34,-3,31}, -{34,-3,32}, -{34,-3,33}, -{34,-3,34}, -{34,-3,35}, -{34,-3,36}, -{34,-3,37}, -{34,-3,38}, -{34,-3,39}, -{34,-3,40}, -{34,-3,41}, -{34,-3,42}, -{34,-2,-33}, -{34,-2,-32}, -{34,-2,-31}, -{34,-2,-30}, -{34,-2,-29}, -{34,-2,-28}, -{34,-2,-27}, -{34,-2,-26}, -{34,-2,-25}, -{34,-2,-24}, -{34,-2,-23}, -{34,-2,-22}, -{34,-2,-21}, -{34,-2,-20}, -{34,-2,-19}, -{34,-2,-18}, -{34,-2,-17}, -{34,-2,-16}, -{34,-2,-15}, -{34,-2,-14}, -{34,-2,-13}, -{34,-2,-12}, -{34,-2,-11}, -{34,-2,-10}, -{34,-2,-9}, -{34,-2,-8}, -{34,-2,-7}, -{34,-2,-6}, -{34,-2,-5}, -{34,-2,-4}, -{34,-2,-3}, -{34,-2,-2}, -{34,-2,-1}, -{34,-2,0}, -{34,-2,1}, -{34,-2,2}, -{34,-2,3}, -{34,-2,4}, -{34,-2,5}, -{34,-2,6}, -{34,-2,7}, -{34,-2,8}, -{34,-2,9}, -{34,-2,10}, -{34,-2,11}, -{34,-2,12}, -{34,-2,13}, -{34,-2,14}, -{34,-2,15}, -{34,-2,16}, -{34,-2,17}, -{34,-2,18}, -{34,-2,19}, -{34,-2,20}, -{34,-2,21}, -{34,-2,22}, -{34,-2,23}, -{34,-2,24}, -{34,-2,25}, -{34,-2,26}, -{34,-2,27}, -{34,-2,28}, -{34,-2,29}, -{34,-2,30}, -{34,-2,31}, -{34,-2,32}, -{34,-2,33}, -{34,-2,34}, -{34,-2,35}, -{34,-2,36}, -{34,-2,37}, -{34,-2,38}, -{34,-2,39}, -{34,-2,40}, -{34,-2,41}, -{34,-2,42}, -{34,-1,-34}, -{34,-1,-33}, -{34,-1,-32}, -{34,-1,-31}, -{34,-1,-30}, -{34,-1,-29}, -{34,-1,-28}, -{34,-1,-27}, -{34,-1,-26}, -{34,-1,-25}, -{34,-1,-24}, -{34,-1,-23}, -{34,-1,-22}, -{34,-1,-21}, -{34,-1,-20}, -{34,-1,-19}, -{34,-1,-18}, -{34,-1,-17}, -{34,-1,-16}, -{34,-1,-15}, -{34,-1,-14}, -{34,-1,-13}, -{34,-1,-12}, -{34,-1,-11}, -{34,-1,-10}, -{34,-1,-9}, -{34,-1,-8}, -{34,-1,-7}, -{34,-1,-6}, -{34,-1,-5}, -{34,-1,-4}, -{34,-1,-3}, -{34,-1,-2}, -{34,-1,-1}, -{34,-1,0}, -{34,-1,1}, -{34,-1,2}, -{34,-1,3}, -{34,-1,4}, -{34,-1,5}, -{34,-1,6}, -{34,-1,7}, -{34,-1,8}, -{34,-1,9}, -{34,-1,10}, -{34,-1,11}, -{34,-1,12}, -{34,-1,13}, -{34,-1,14}, -{34,-1,15}, -{34,-1,16}, -{34,-1,17}, -{34,-1,18}, -{34,-1,19}, -{34,-1,20}, -{34,-1,21}, -{34,-1,22}, -{34,-1,23}, -{34,-1,24}, -{34,-1,25}, -{34,-1,26}, -{34,-1,27}, -{34,-1,28}, -{34,-1,29}, -{34,-1,30}, -{34,-1,31}, -{34,-1,32}, -{34,-1,33}, -{34,-1,34}, -{34,-1,35}, -{34,-1,36}, -{34,-1,37}, -{34,-1,38}, -{34,-1,39}, -{34,-1,40}, -{34,-1,41}, -{34,-1,42}, -{34,0,-36}, -{34,0,-35}, -{34,0,-34}, -{34,0,-33}, -{34,0,-32}, -{34,0,-31}, -{34,0,-30}, -{34,0,-29}, -{34,0,-28}, -{34,0,-27}, -{34,0,-26}, -{34,0,-25}, -{34,0,-24}, -{34,0,-23}, -{34,0,-22}, -{34,0,-21}, -{34,0,-20}, -{34,0,-19}, -{34,0,-18}, -{34,0,-17}, -{34,0,-16}, -{34,0,-15}, -{34,0,-14}, -{34,0,-13}, -{34,0,-12}, -{34,0,-11}, -{34,0,-10}, -{34,0,-9}, -{34,0,-8}, -{34,0,-7}, -{34,0,-6}, -{34,0,-5}, -{34,0,-4}, -{34,0,-3}, -{34,0,-2}, -{34,0,-1}, -{34,0,0}, -{34,0,1}, -{34,0,2}, -{34,0,3}, -{34,0,4}, -{34,0,5}, -{34,0,6}, -{34,0,7}, -{34,0,8}, -{34,0,9}, -{34,0,10}, -{34,0,11}, -{34,0,12}, -{34,0,13}, -{34,0,14}, -{34,0,15}, -{34,0,16}, -{34,0,17}, -{34,0,18}, -{34,0,19}, -{34,0,20}, -{34,0,21}, -{34,0,22}, -{34,0,23}, -{34,0,24}, -{34,0,25}, -{34,0,26}, -{34,0,27}, -{34,0,28}, -{34,0,29}, -{34,0,30}, -{34,0,31}, -{34,0,32}, -{34,0,33}, -{34,0,34}, -{34,0,35}, -{34,0,36}, -{34,0,37}, -{34,0,38}, -{34,0,39}, -{34,0,40}, -{34,0,41}, -{34,0,42}, -{34,1,-37}, -{34,1,-36}, -{34,1,-35}, -{34,1,-34}, -{34,1,-33}, -{34,1,-32}, -{34,1,-31}, -{34,1,-30}, -{34,1,-29}, -{34,1,-28}, -{34,1,-27}, -{34,1,-26}, -{34,1,-25}, -{34,1,-24}, -{34,1,-23}, -{34,1,-22}, -{34,1,-21}, -{34,1,-20}, -{34,1,-19}, -{34,1,-18}, -{34,1,-17}, -{34,1,-16}, -{34,1,-15}, -{34,1,-14}, -{34,1,-13}, -{34,1,-12}, -{34,1,-11}, -{34,1,-10}, -{34,1,-9}, -{34,1,-8}, -{34,1,-7}, -{34,1,-6}, -{34,1,-5}, -{34,1,-4}, -{34,1,-3}, -{34,1,-2}, -{34,1,-1}, -{34,1,0}, -{34,1,1}, -{34,1,2}, -{34,1,3}, -{34,1,4}, -{34,1,5}, -{34,1,6}, -{34,1,7}, -{34,1,8}, -{34,1,9}, -{34,1,10}, -{34,1,11}, -{34,1,12}, -{34,1,13}, -{34,1,14}, -{34,1,15}, -{34,1,16}, -{34,1,17}, -{34,1,18}, -{34,1,19}, -{34,1,20}, -{34,1,21}, -{34,1,22}, -{34,1,23}, -{34,1,24}, -{34,1,25}, -{34,1,26}, -{34,1,27}, -{34,1,28}, -{34,1,29}, -{34,1,30}, -{34,1,31}, -{34,1,32}, -{34,1,33}, -{34,1,34}, -{34,1,35}, -{34,1,36}, -{34,1,37}, -{34,1,38}, -{34,1,39}, -{34,1,40}, -{34,1,41}, -{34,1,42}, -{34,2,-38}, -{34,2,-37}, -{34,2,-36}, -{34,2,-35}, -{34,2,-34}, -{34,2,-33}, -{34,2,-32}, -{34,2,-31}, -{34,2,-30}, -{34,2,-29}, -{34,2,-28}, -{34,2,-27}, -{34,2,-26}, -{34,2,-25}, -{34,2,-24}, -{34,2,-23}, -{34,2,-22}, -{34,2,-21}, -{34,2,-20}, -{34,2,-19}, -{34,2,-18}, -{34,2,-17}, -{34,2,-16}, -{34,2,-15}, -{34,2,-14}, -{34,2,-13}, -{34,2,-12}, -{34,2,-11}, -{34,2,-10}, -{34,2,-9}, -{34,2,-8}, -{34,2,-7}, -{34,2,-6}, -{34,2,-5}, -{34,2,-4}, -{34,2,-3}, -{34,2,-2}, -{34,2,-1}, -{34,2,0}, -{34,2,1}, -{34,2,2}, -{34,2,3}, -{34,2,4}, -{34,2,5}, -{34,2,6}, -{34,2,7}, -{34,2,8}, -{34,2,9}, -{34,2,10}, -{34,2,11}, -{34,2,12}, -{34,2,13}, -{34,2,14}, -{34,2,15}, -{34,2,16}, -{34,2,17}, -{34,2,18}, -{34,2,19}, -{34,2,20}, -{34,2,21}, -{34,2,22}, -{34,2,23}, -{34,2,24}, -{34,2,25}, -{34,2,26}, -{34,2,27}, -{34,2,28}, -{34,2,29}, -{34,2,30}, -{34,2,31}, -{34,2,32}, -{34,2,33}, -{34,2,34}, -{34,2,35}, -{34,2,36}, -{34,2,37}, -{34,2,38}, -{34,2,39}, -{34,2,40}, -{34,2,41}, -{34,2,42}, -{34,3,-39}, -{34,3,-38}, -{34,3,-37}, -{34,3,-36}, -{34,3,-35}, -{34,3,-34}, -{34,3,-33}, -{34,3,-32}, -{34,3,-31}, -{34,3,-30}, -{34,3,-29}, -{34,3,-28}, -{34,3,-27}, -{34,3,-26}, -{34,3,-25}, -{34,3,-24}, -{34,3,-23}, -{34,3,-22}, -{34,3,-21}, -{34,3,-20}, -{34,3,-19}, -{34,3,-18}, -{34,3,-17}, -{34,3,-16}, -{34,3,-15}, -{34,3,-14}, -{34,3,-13}, -{34,3,-12}, -{34,3,-11}, -{34,3,-10}, -{34,3,-9}, -{34,3,-8}, -{34,3,-7}, -{34,3,-6}, -{34,3,-5}, -{34,3,-4}, -{34,3,-3}, -{34,3,-2}, -{34,3,-1}, -{34,3,0}, -{34,3,1}, -{34,3,2}, -{34,3,3}, -{34,3,4}, -{34,3,5}, -{34,3,6}, -{34,3,7}, -{34,3,8}, -{34,3,9}, -{34,3,10}, -{34,3,11}, -{34,3,12}, -{34,3,13}, -{34,3,14}, -{34,3,15}, -{34,3,16}, -{34,3,17}, -{34,3,18}, -{34,3,19}, -{34,3,20}, -{34,3,21}, -{34,3,22}, -{34,3,23}, -{34,3,24}, -{34,3,25}, -{34,3,26}, -{34,3,27}, -{34,3,28}, -{34,3,29}, -{34,3,30}, -{34,3,31}, -{34,3,32}, -{34,3,33}, -{34,3,34}, -{34,3,35}, -{34,3,36}, -{34,3,37}, -{34,3,38}, -{34,3,39}, -{34,3,40}, -{34,3,41}, -{34,3,42}, -{34,4,-40}, -{34,4,-39}, -{34,4,-38}, -{34,4,-37}, -{34,4,-36}, -{34,4,-35}, -{34,4,-34}, -{34,4,-33}, -{34,4,-32}, -{34,4,-31}, -{34,4,-30}, -{34,4,-29}, -{34,4,-28}, -{34,4,-27}, -{34,4,-26}, -{34,4,-25}, -{34,4,-24}, -{34,4,-23}, -{34,4,-22}, -{34,4,-21}, -{34,4,-20}, -{34,4,-19}, -{34,4,-18}, -{34,4,-17}, -{34,4,-16}, -{34,4,-15}, -{34,4,-14}, -{34,4,-13}, -{34,4,-12}, -{34,4,-11}, -{34,4,-10}, -{34,4,-9}, -{34,4,-8}, -{34,4,-7}, -{34,4,-6}, -{34,4,-5}, -{34,4,-4}, -{34,4,-3}, -{34,4,-2}, -{34,4,-1}, -{34,4,0}, -{34,4,1}, -{34,4,2}, -{34,4,3}, -{34,4,4}, -{34,4,5}, -{34,4,6}, -{34,4,7}, -{34,4,8}, -{34,4,9}, -{34,4,10}, -{34,4,11}, -{34,4,12}, -{34,4,13}, -{34,4,14}, -{34,4,15}, -{34,4,16}, -{34,4,17}, -{34,4,18}, -{34,4,19}, -{34,4,20}, -{34,4,21}, -{34,4,22}, -{34,4,23}, -{34,4,24}, -{34,4,25}, -{34,4,26}, -{34,4,27}, -{34,4,28}, -{34,4,29}, -{34,4,30}, -{34,4,31}, -{34,4,32}, -{34,4,33}, -{34,4,34}, -{34,4,35}, -{34,4,36}, -{34,4,37}, -{34,4,38}, -{34,4,39}, -{34,4,40}, -{34,4,41}, -{34,4,42}, -{34,5,-41}, -{34,5,-40}, -{34,5,-39}, -{34,5,-38}, -{34,5,-37}, -{34,5,-36}, -{34,5,-35}, -{34,5,-34}, -{34,5,-33}, -{34,5,-32}, -{34,5,-31}, -{34,5,-30}, -{34,5,-29}, -{34,5,-28}, -{34,5,-27}, -{34,5,-26}, -{34,5,-25}, -{34,5,-24}, -{34,5,-23}, -{34,5,-22}, -{34,5,-21}, -{34,5,-20}, -{34,5,-19}, -{34,5,-18}, -{34,5,-17}, -{34,5,-16}, -{34,5,-15}, -{34,5,-14}, -{34,5,-13}, -{34,5,-12}, -{34,5,-11}, -{34,5,-10}, -{34,5,-9}, -{34,5,-8}, -{34,5,-7}, -{34,5,-6}, -{34,5,-5}, -{34,5,-4}, -{34,5,-3}, -{34,5,-2}, -{34,5,-1}, -{34,5,0}, -{34,5,1}, -{34,5,2}, -{34,5,3}, -{34,5,4}, -{34,5,5}, -{34,5,6}, -{34,5,7}, -{34,5,8}, -{34,5,9}, -{34,5,10}, -{34,5,11}, -{34,5,12}, -{34,5,13}, -{34,5,14}, -{34,5,15}, -{34,5,16}, -{34,5,17}, -{34,5,18}, -{34,5,19}, -{34,5,20}, -{34,5,21}, -{34,5,22}, -{34,5,23}, -{34,5,24}, -{34,5,25}, -{34,5,26}, -{34,5,27}, -{34,5,28}, -{34,5,29}, -{34,5,30}, -{34,5,31}, -{34,5,32}, -{34,5,33}, -{34,5,34}, -{34,5,35}, -{34,5,36}, -{34,5,37}, -{34,5,38}, -{34,5,39}, -{34,5,40}, -{34,5,41}, -{34,5,42}, -{34,6,-42}, -{34,6,-41}, -{34,6,-40}, -{34,6,-39}, -{34,6,-38}, -{34,6,-37}, -{34,6,-36}, -{34,6,-35}, -{34,6,-34}, -{34,6,-33}, -{34,6,-32}, -{34,6,-31}, -{34,6,-30}, -{34,6,-29}, -{34,6,-28}, -{34,6,-27}, -{34,6,-26}, -{34,6,-25}, -{34,6,-24}, -{34,6,-23}, -{34,6,-22}, -{34,6,-21}, -{34,6,-20}, -{34,6,-19}, -{34,6,-18}, -{34,6,-17}, -{34,6,-16}, -{34,6,-15}, -{34,6,-14}, -{34,6,-13}, -{34,6,-12}, -{34,6,-11}, -{34,6,-10}, -{34,6,-9}, -{34,6,-8}, -{34,6,-7}, -{34,6,-6}, -{34,6,-5}, -{34,6,-4}, -{34,6,-3}, -{34,6,-2}, -{34,6,-1}, -{34,6,0}, -{34,6,1}, -{34,6,2}, -{34,6,3}, -{34,6,4}, -{34,6,5}, -{34,6,6}, -{34,6,7}, -{34,6,8}, -{34,6,9}, -{34,6,10}, -{34,6,11}, -{34,6,12}, -{34,6,13}, -{34,6,14}, -{34,6,15}, -{34,6,16}, -{34,6,17}, -{34,6,18}, -{34,6,19}, -{34,6,20}, -{34,6,21}, -{34,6,22}, -{34,6,23}, -{34,6,24}, -{34,6,25}, -{34,6,26}, -{34,6,27}, -{34,6,28}, -{34,6,29}, -{34,6,30}, -{34,6,31}, -{34,6,32}, -{34,6,33}, -{34,6,34}, -{34,6,35}, -{34,6,36}, -{34,6,37}, -{34,6,38}, -{34,6,39}, -{34,6,40}, -{34,6,41}, -{34,6,42}, -{34,6,43}, -{34,7,-43}, -{34,7,-42}, -{34,7,-41}, -{34,7,-40}, -{34,7,-39}, -{34,7,-38}, -{34,7,-37}, -{34,7,-36}, -{34,7,-35}, -{34,7,-34}, -{34,7,-33}, -{34,7,-32}, -{34,7,-31}, -{34,7,-30}, -{34,7,-29}, -{34,7,-28}, -{34,7,-27}, -{34,7,-26}, -{34,7,-25}, -{34,7,-24}, -{34,7,-23}, -{34,7,-22}, -{34,7,-21}, -{34,7,-20}, -{34,7,-19}, -{34,7,-18}, -{34,7,-17}, -{34,7,-16}, -{34,7,-15}, -{34,7,-14}, -{34,7,-13}, -{34,7,-12}, -{34,7,-11}, -{34,7,-10}, -{34,7,-9}, -{34,7,-8}, -{34,7,-7}, -{34,7,-6}, -{34,7,-5}, -{34,7,-4}, -{34,7,-3}, -{34,7,-2}, -{34,7,-1}, -{34,7,0}, -{34,7,1}, -{34,7,2}, -{34,7,3}, -{34,7,4}, -{34,7,5}, -{34,7,6}, -{34,7,7}, -{34,7,8}, -{34,7,9}, -{34,7,10}, -{34,7,11}, -{34,7,12}, -{34,7,13}, -{34,7,14}, -{34,7,15}, -{34,7,16}, -{34,7,17}, -{34,7,18}, -{34,7,19}, -{34,7,20}, -{34,7,21}, -{34,7,22}, -{34,7,23}, -{34,7,24}, -{34,7,25}, -{34,7,26}, -{34,7,27}, -{34,7,28}, -{34,7,29}, -{34,7,30}, -{34,7,31}, -{34,7,32}, -{34,7,33}, -{34,7,34}, -{34,7,35}, -{34,7,36}, -{34,7,37}, -{34,7,38}, -{34,7,39}, -{34,7,40}, -{34,7,41}, -{34,7,42}, -{34,7,43}, -{34,8,-44}, -{34,8,-43}, -{34,8,-42}, -{34,8,-41}, -{34,8,-40}, -{34,8,-39}, -{34,8,-38}, -{34,8,-37}, -{34,8,-36}, -{34,8,-35}, -{34,8,-34}, -{34,8,-33}, -{34,8,-32}, -{34,8,-31}, -{34,8,-30}, -{34,8,-29}, -{34,8,-28}, -{34,8,-27}, -{34,8,-26}, -{34,8,-25}, -{34,8,-24}, -{34,8,-23}, -{34,8,-22}, -{34,8,-21}, -{34,8,-20}, -{34,8,-19}, -{34,8,-18}, -{34,8,-17}, -{34,8,-16}, -{34,8,-15}, -{34,8,-14}, -{34,8,-13}, -{34,8,-12}, -{34,8,-11}, -{34,8,-10}, -{34,8,-9}, -{34,8,-8}, -{34,8,-7}, -{34,8,-6}, -{34,8,-5}, -{34,8,-4}, -{34,8,-3}, -{34,8,-2}, -{34,8,-1}, -{34,8,0}, -{34,8,1}, -{34,8,2}, -{34,8,3}, -{34,8,4}, -{34,8,5}, -{34,8,6}, -{34,8,7}, -{34,8,8}, -{34,8,9}, -{34,8,10}, -{34,8,11}, -{34,8,12}, -{34,8,13}, -{34,8,14}, -{34,8,15}, -{34,8,16}, -{34,8,17}, -{34,8,18}, -{34,8,19}, -{34,8,20}, -{34,8,21}, -{34,8,22}, -{34,8,23}, -{34,8,24}, -{34,8,25}, -{34,8,26}, -{34,8,27}, -{34,8,28}, -{34,8,29}, -{34,8,30}, -{34,8,31}, -{34,8,32}, -{34,8,33}, -{34,8,34}, -{34,8,35}, -{34,8,36}, -{34,8,37}, -{34,8,38}, -{34,8,39}, -{34,8,40}, -{34,8,41}, -{34,8,42}, -{34,8,43}, -{34,9,-45}, -{34,9,-44}, -{34,9,-43}, -{34,9,-42}, -{34,9,-41}, -{34,9,-40}, -{34,9,-39}, -{34,9,-38}, -{34,9,-37}, -{34,9,-36}, -{34,9,-35}, -{34,9,-34}, -{34,9,-33}, -{34,9,-32}, -{34,9,-31}, -{34,9,-30}, -{34,9,-29}, -{34,9,-28}, -{34,9,-27}, -{34,9,-26}, -{34,9,-25}, -{34,9,-24}, -{34,9,-23}, -{34,9,-22}, -{34,9,-21}, -{34,9,-20}, -{34,9,-19}, -{34,9,-18}, -{34,9,-17}, -{34,9,-16}, -{34,9,-15}, -{34,9,-14}, -{34,9,-13}, -{34,9,-12}, -{34,9,-11}, -{34,9,-10}, -{34,9,-9}, -{34,9,-8}, -{34,9,-7}, -{34,9,-6}, -{34,9,-5}, -{34,9,-4}, -{34,9,-3}, -{34,9,-2}, -{34,9,-1}, -{34,9,0}, -{34,9,1}, -{34,9,2}, -{34,9,3}, -{34,9,4}, -{34,9,5}, -{34,9,6}, -{34,9,7}, -{34,9,8}, -{34,9,9}, -{34,9,10}, -{34,9,11}, -{34,9,12}, -{34,9,13}, -{34,9,14}, -{34,9,15}, -{34,9,16}, -{34,9,17}, -{34,9,18}, -{34,9,19}, -{34,9,20}, -{34,9,21}, -{34,9,22}, -{34,9,23}, -{34,9,24}, -{34,9,25}, -{34,9,26}, -{34,9,27}, -{34,9,28}, -{34,9,29}, -{34,9,30}, -{34,9,31}, -{34,9,32}, -{34,9,33}, -{34,9,34}, -{34,9,35}, -{34,9,36}, -{34,9,37}, -{34,9,38}, -{34,9,39}, -{34,9,40}, -{34,9,41}, -{34,9,42}, -{34,9,43}, -{34,10,-46}, -{34,10,-45}, -{34,10,-44}, -{34,10,-43}, -{34,10,-42}, -{34,10,-41}, -{34,10,-40}, -{34,10,-39}, -{34,10,-38}, -{34,10,-37}, -{34,10,-36}, -{34,10,-35}, -{34,10,-34}, -{34,10,-33}, -{34,10,-32}, -{34,10,-31}, -{34,10,-30}, -{34,10,-29}, -{34,10,-28}, -{34,10,-27}, -{34,10,-26}, -{34,10,-25}, -{34,10,-24}, -{34,10,-23}, -{34,10,-22}, -{34,10,-21}, -{34,10,-20}, -{34,10,-19}, -{34,10,-18}, -{34,10,-17}, -{34,10,-16}, -{34,10,-15}, -{34,10,-14}, -{34,10,-13}, -{34,10,-12}, -{34,10,-11}, -{34,10,-10}, -{34,10,-9}, -{34,10,-8}, -{34,10,-7}, -{34,10,-6}, -{34,10,-5}, -{34,10,-4}, -{34,10,-3}, -{34,10,-2}, -{34,10,-1}, -{34,10,0}, -{34,10,1}, -{34,10,2}, -{34,10,3}, -{34,10,4}, -{34,10,5}, -{34,10,6}, -{34,10,7}, -{34,10,8}, -{34,10,9}, -{34,10,10}, -{34,10,11}, -{34,10,12}, -{34,10,13}, -{34,10,14}, -{34,10,15}, -{34,10,16}, -{34,10,17}, -{34,10,18}, -{34,10,19}, -{34,10,20}, -{34,10,21}, -{34,10,22}, -{34,10,23}, -{34,10,24}, -{34,10,25}, -{34,10,26}, -{34,10,27}, -{34,10,28}, -{34,10,29}, -{34,10,30}, -{34,10,31}, -{34,10,32}, -{34,10,33}, -{34,10,34}, -{34,10,35}, -{34,10,36}, -{34,10,37}, -{34,10,38}, -{34,10,39}, -{34,10,40}, -{34,10,41}, -{34,10,42}, -{34,10,43}, -{34,11,-47}, -{34,11,-46}, -{34,11,-45}, -{34,11,-44}, -{34,11,-43}, -{34,11,-42}, -{34,11,-41}, -{34,11,-40}, -{34,11,-39}, -{34,11,-38}, -{34,11,-37}, -{34,11,-36}, -{34,11,-35}, -{34,11,-34}, -{34,11,-33}, -{34,11,-32}, -{34,11,-31}, -{34,11,-30}, -{34,11,-29}, -{34,11,-28}, -{34,11,-27}, -{34,11,-26}, -{34,11,-25}, -{34,11,-24}, -{34,11,-23}, -{34,11,-22}, -{34,11,-21}, -{34,11,-20}, -{34,11,-19}, -{34,11,-18}, -{34,11,-17}, -{34,11,-16}, -{34,11,-15}, -{34,11,-14}, -{34,11,-13}, -{34,11,-12}, -{34,11,-11}, -{34,11,-10}, -{34,11,-9}, -{34,11,-8}, -{34,11,-7}, -{34,11,-6}, -{34,11,-5}, -{34,11,-4}, -{34,11,-3}, -{34,11,-2}, -{34,11,-1}, -{34,11,0}, -{34,11,1}, -{34,11,2}, -{34,11,3}, -{34,11,4}, -{34,11,5}, -{34,11,6}, -{34,11,7}, -{34,11,8}, -{34,11,9}, -{34,11,10}, -{34,11,11}, -{34,11,12}, -{34,11,13}, -{34,11,14}, -{34,11,15}, -{34,11,16}, -{34,11,17}, -{34,11,18}, -{34,11,19}, -{34,11,20}, -{34,11,21}, -{34,11,22}, -{34,11,23}, -{34,11,24}, -{34,11,25}, -{34,11,26}, -{34,11,27}, -{34,11,28}, -{34,11,29}, -{34,11,30}, -{34,11,31}, -{34,11,32}, -{34,11,33}, -{34,11,34}, -{34,11,35}, -{34,11,36}, -{34,11,37}, -{34,11,38}, -{34,11,39}, -{34,11,40}, -{34,11,41}, -{34,11,42}, -{34,11,43}, -{34,12,-49}, -{34,12,-48}, -{34,12,-47}, -{34,12,-46}, -{34,12,-45}, -{34,12,-44}, -{34,12,-43}, -{34,12,-42}, -{34,12,-41}, -{34,12,-40}, -{34,12,-39}, -{34,12,-38}, -{34,12,-37}, -{34,12,-36}, -{34,12,-35}, -{34,12,-34}, -{34,12,-33}, -{34,12,-32}, -{34,12,-31}, -{34,12,-30}, -{34,12,-29}, -{34,12,-28}, -{34,12,-27}, -{34,12,-26}, -{34,12,-25}, -{34,12,-24}, -{34,12,-23}, -{34,12,-22}, -{34,12,-21}, -{34,12,-20}, -{34,12,-19}, -{34,12,-18}, -{34,12,-17}, -{34,12,-16}, -{34,12,-15}, -{34,12,-14}, -{34,12,-13}, -{34,12,-12}, -{34,12,-11}, -{34,12,-10}, -{34,12,-9}, -{34,12,-8}, -{34,12,-7}, -{34,12,-6}, -{34,12,-5}, -{34,12,-4}, -{34,12,-3}, -{34,12,-2}, -{34,12,-1}, -{34,12,0}, -{34,12,1}, -{34,12,2}, -{34,12,3}, -{34,12,4}, -{34,12,5}, -{34,12,6}, -{34,12,7}, -{34,12,8}, -{34,12,9}, -{34,12,10}, -{34,12,11}, -{34,12,12}, -{34,12,13}, -{34,12,14}, -{34,12,15}, -{34,12,16}, -{34,12,17}, -{34,12,18}, -{34,12,19}, -{34,12,20}, -{34,12,21}, -{34,12,22}, -{34,12,23}, -{34,12,24}, -{34,12,25}, -{34,12,26}, -{34,12,27}, -{34,12,28}, -{34,12,29}, -{34,12,30}, -{34,12,31}, -{34,12,32}, -{34,12,33}, -{34,12,34}, -{34,12,35}, -{34,12,36}, -{34,12,37}, -{34,12,38}, -{34,12,39}, -{34,12,40}, -{34,12,41}, -{34,12,42}, -{34,12,43}, -{34,13,-50}, -{34,13,-49}, -{34,13,-48}, -{34,13,-47}, -{34,13,-46}, -{34,13,-45}, -{34,13,-44}, -{34,13,-43}, -{34,13,-42}, -{34,13,-41}, -{34,13,-40}, -{34,13,-39}, -{34,13,-38}, -{34,13,-37}, -{34,13,-36}, -{34,13,-35}, -{34,13,-34}, -{34,13,-33}, -{34,13,-32}, -{34,13,-31}, -{34,13,-30}, -{34,13,-29}, -{34,13,-28}, -{34,13,-27}, -{34,13,-26}, -{34,13,-25}, -{34,13,-24}, -{34,13,-23}, -{34,13,-22}, -{34,13,-21}, -{34,13,-20}, -{34,13,-19}, -{34,13,-18}, -{34,13,-17}, -{34,13,-16}, -{34,13,-15}, -{34,13,-14}, -{34,13,-13}, -{34,13,-12}, -{34,13,-11}, -{34,13,-10}, -{34,13,-9}, -{34,13,-8}, -{34,13,-7}, -{34,13,-6}, -{34,13,-5}, -{34,13,-4}, -{34,13,-3}, -{34,13,-2}, -{34,13,-1}, -{34,13,0}, -{34,13,1}, -{34,13,2}, -{34,13,3}, -{34,13,4}, -{34,13,5}, -{34,13,6}, -{34,13,7}, -{34,13,8}, -{34,13,9}, -{34,13,10}, -{34,13,11}, -{34,13,12}, -{34,13,13}, -{34,13,14}, -{34,13,15}, -{34,13,16}, -{34,13,17}, -{34,13,18}, -{34,13,19}, -{34,13,20}, -{34,13,21}, -{34,13,22}, -{34,13,23}, -{34,13,24}, -{34,13,25}, -{34,13,26}, -{34,13,27}, -{34,13,28}, -{34,13,29}, -{34,13,30}, -{34,13,31}, -{34,13,32}, -{34,13,33}, -{34,13,34}, -{34,13,35}, -{34,13,36}, -{34,13,37}, -{34,13,38}, -{34,13,39}, -{34,13,40}, -{34,13,41}, -{34,13,42}, -{34,13,43}, -{34,14,-51}, -{34,14,-50}, -{34,14,-49}, -{34,14,-48}, -{34,14,-47}, -{34,14,-46}, -{34,14,-45}, -{34,14,-44}, -{34,14,-43}, -{34,14,-42}, -{34,14,-41}, -{34,14,-40}, -{34,14,-39}, -{34,14,-38}, -{34,14,-37}, -{34,14,-36}, -{34,14,-35}, -{34,14,-34}, -{34,14,-33}, -{34,14,-32}, -{34,14,-31}, -{34,14,-30}, -{34,14,-29}, -{34,14,-28}, -{34,14,-27}, -{34,14,-26}, -{34,14,-25}, -{34,14,-24}, -{34,14,-23}, -{34,14,-22}, -{34,14,-21}, -{34,14,-20}, -{34,14,-19}, -{34,14,-18}, -{34,14,-17}, -{34,14,-16}, -{34,14,-15}, -{34,14,-14}, -{34,14,-13}, -{34,14,-12}, -{34,14,-11}, -{34,14,-10}, -{34,14,-9}, -{34,14,-8}, -{34,14,-7}, -{34,14,-6}, -{34,14,-5}, -{34,14,-4}, -{34,14,-3}, -{34,14,-2}, -{34,14,-1}, -{34,14,0}, -{34,14,1}, -{34,14,2}, -{34,14,3}, -{34,14,4}, -{34,14,5}, -{34,14,6}, -{34,14,7}, -{34,14,8}, -{34,14,9}, -{34,14,10}, -{34,14,11}, -{34,14,12}, -{34,14,13}, -{34,14,14}, -{34,14,15}, -{34,14,16}, -{34,14,17}, -{34,14,18}, -{34,14,19}, -{34,14,20}, -{34,14,21}, -{34,14,22}, -{34,14,23}, -{34,14,24}, -{34,14,25}, -{34,14,26}, -{34,14,27}, -{34,14,28}, -{34,14,29}, -{34,14,30}, -{34,14,31}, -{34,14,32}, -{34,14,33}, -{34,14,34}, -{34,14,35}, -{34,14,36}, -{34,14,37}, -{34,14,38}, -{34,14,39}, -{34,14,40}, -{34,14,41}, -{34,14,42}, -{34,14,43}, -{34,15,-52}, -{34,15,-51}, -{34,15,-50}, -{34,15,-49}, -{34,15,-48}, -{34,15,-47}, -{34,15,-46}, -{34,15,-45}, -{34,15,-44}, -{34,15,-43}, -{34,15,-42}, -{34,15,-41}, -{34,15,-40}, -{34,15,-39}, -{34,15,-38}, -{34,15,-37}, -{34,15,-36}, -{34,15,-35}, -{34,15,-34}, -{34,15,-33}, -{34,15,-32}, -{34,15,-31}, -{34,15,-30}, -{34,15,-29}, -{34,15,-28}, -{34,15,-27}, -{34,15,-26}, -{34,15,-25}, -{34,15,-24}, -{34,15,-23}, -{34,15,-22}, -{34,15,-21}, -{34,15,-20}, -{34,15,-19}, -{34,15,-18}, -{34,15,-17}, -{34,15,-16}, -{34,15,-15}, -{34,15,-14}, -{34,15,-13}, -{34,15,-12}, -{34,15,-11}, -{34,15,-10}, -{34,15,-9}, -{34,15,-8}, -{34,15,-7}, -{34,15,-6}, -{34,15,-5}, -{34,15,-4}, -{34,15,-3}, -{34,15,-2}, -{34,15,-1}, -{34,15,0}, -{34,15,1}, -{34,15,2}, -{34,15,3}, -{34,15,4}, -{34,15,5}, -{34,15,6}, -{34,15,7}, -{34,15,8}, -{34,15,9}, -{34,15,10}, -{34,15,11}, -{34,15,12}, -{34,15,13}, -{34,15,14}, -{34,15,15}, -{34,15,16}, -{34,15,17}, -{34,15,18}, -{34,15,19}, -{34,15,20}, -{34,15,21}, -{34,15,22}, -{34,15,23}, -{34,15,24}, -{34,15,25}, -{34,15,26}, -{34,15,27}, -{34,15,28}, -{34,15,29}, -{34,15,30}, -{34,15,31}, -{34,15,32}, -{34,15,33}, -{34,15,34}, -{34,15,35}, -{34,15,36}, -{34,15,37}, -{34,15,38}, -{34,15,39}, -{34,15,40}, -{34,15,41}, -{34,15,42}, -{34,15,43}, -{34,16,-53}, -{34,16,-52}, -{34,16,-51}, -{34,16,-50}, -{34,16,-49}, -{34,16,-48}, -{34,16,-47}, -{34,16,-46}, -{34,16,-45}, -{34,16,-44}, -{34,16,-43}, -{34,16,-42}, -{34,16,-41}, -{34,16,-40}, -{34,16,-39}, -{34,16,-38}, -{34,16,-37}, -{34,16,-36}, -{34,16,-35}, -{34,16,-34}, -{34,16,-33}, -{34,16,-32}, -{34,16,-31}, -{34,16,-30}, -{34,16,-29}, -{34,16,-28}, -{34,16,-27}, -{34,16,-26}, -{34,16,-25}, -{34,16,-24}, -{34,16,-23}, -{34,16,-22}, -{34,16,-21}, -{34,16,-20}, -{34,16,-19}, -{34,16,-18}, -{34,16,-17}, -{34,16,-16}, -{34,16,-15}, -{34,16,-14}, -{34,16,-13}, -{34,16,-12}, -{34,16,-11}, -{34,16,-10}, -{34,16,-9}, -{34,16,-8}, -{34,16,-7}, -{34,16,-6}, -{34,16,-5}, -{34,16,-4}, -{34,16,-3}, -{34,16,-2}, -{34,16,-1}, -{34,16,0}, -{34,16,1}, -{34,16,2}, -{34,16,3}, -{34,16,4}, -{34,16,5}, -{34,16,6}, -{34,16,7}, -{34,16,8}, -{34,16,9}, -{34,16,10}, -{34,16,11}, -{34,16,12}, -{34,16,13}, -{34,16,14}, -{34,16,15}, -{34,16,16}, -{34,16,17}, -{34,16,18}, -{34,16,19}, -{34,16,20}, -{34,16,21}, -{34,16,22}, -{34,16,23}, -{34,16,24}, -{34,16,25}, -{34,16,26}, -{34,16,27}, -{34,16,28}, -{34,16,29}, -{34,16,30}, -{34,16,31}, -{34,16,32}, -{34,16,33}, -{34,16,34}, -{34,16,35}, -{34,16,36}, -{34,16,37}, -{34,16,38}, -{34,16,39}, -{34,16,40}, -{34,16,41}, -{34,16,42}, -{34,16,43}, -{34,17,-54}, -{34,17,-53}, -{34,17,-52}, -{34,17,-51}, -{34,17,-50}, -{34,17,-49}, -{34,17,-48}, -{34,17,-47}, -{34,17,-46}, -{34,17,-45}, -{34,17,-44}, -{34,17,-43}, -{34,17,-42}, -{34,17,-41}, -{34,17,-40}, -{34,17,-39}, -{34,17,-38}, -{34,17,-37}, -{34,17,-36}, -{34,17,-35}, -{34,17,-34}, -{34,17,-33}, -{34,17,-32}, -{34,17,-31}, -{34,17,-30}, -{34,17,-29}, -{34,17,-28}, -{34,17,-27}, -{34,17,-26}, -{34,17,-25}, -{34,17,-24}, -{34,17,-23}, -{34,17,-22}, -{34,17,-21}, -{34,17,-20}, -{34,17,-19}, -{34,17,-18}, -{34,17,-17}, -{34,17,-16}, -{34,17,-15}, -{34,17,-14}, -{34,17,-13}, -{34,17,-12}, -{34,17,-11}, -{34,17,-10}, -{34,17,-9}, -{34,17,-8}, -{34,17,-7}, -{34,17,-6}, -{34,17,-5}, -{34,17,-4}, -{34,17,-3}, -{34,17,-2}, -{34,17,-1}, -{34,17,0}, -{34,17,1}, -{34,17,2}, -{34,17,3}, -{34,17,4}, -{34,17,5}, -{34,17,6}, -{34,17,7}, -{34,17,8}, -{34,17,9}, -{34,17,10}, -{34,17,11}, -{34,17,12}, -{34,17,13}, -{34,17,14}, -{34,17,15}, -{34,17,16}, -{34,17,17}, -{34,17,18}, -{34,17,19}, -{34,17,20}, -{34,17,21}, -{34,17,22}, -{34,17,23}, -{34,17,24}, -{34,17,25}, -{34,17,26}, -{34,17,27}, -{34,17,28}, -{34,17,29}, -{34,17,30}, -{34,17,31}, -{34,17,32}, -{34,17,33}, -{34,17,34}, -{34,17,35}, -{34,17,36}, -{34,17,37}, -{34,17,38}, -{34,17,39}, -{34,17,40}, -{34,17,41}, -{34,17,42}, -{34,17,43}, -{34,18,-55}, -{34,18,-54}, -{34,18,-53}, -{34,18,-52}, -{34,18,-51}, -{34,18,-50}, -{34,18,-49}, -{34,18,-48}, -{34,18,-47}, -{34,18,-46}, -{34,18,-45}, -{34,18,-44}, -{34,18,-43}, -{34,18,-42}, -{34,18,-41}, -{34,18,-40}, -{34,18,-39}, -{34,18,-38}, -{34,18,-37}, -{34,18,-36}, -{34,18,-35}, -{34,18,-34}, -{34,18,-33}, -{34,18,-32}, -{34,18,-31}, -{34,18,-30}, -{34,18,-29}, -{34,18,-28}, -{34,18,-27}, -{34,18,-26}, -{34,18,-25}, -{34,18,-24}, -{34,18,-23}, -{34,18,-22}, -{34,18,-21}, -{34,18,-20}, -{34,18,-19}, -{34,18,-18}, -{34,18,-17}, -{34,18,-16}, -{34,18,-15}, -{34,18,-14}, -{34,18,-13}, -{34,18,-12}, -{34,18,-11}, -{34,18,-10}, -{34,18,-9}, -{34,18,-8}, -{34,18,-7}, -{34,18,-6}, -{34,18,-5}, -{34,18,-4}, -{34,18,-3}, -{34,18,-2}, -{34,18,-1}, -{34,18,0}, -{34,18,1}, -{34,18,2}, -{34,18,3}, -{34,18,4}, -{34,18,5}, -{34,18,6}, -{34,18,7}, -{34,18,8}, -{34,18,9}, -{34,18,10}, -{34,18,11}, -{34,18,12}, -{34,18,13}, -{34,18,14}, -{34,18,15}, -{34,18,16}, -{34,18,17}, -{34,18,18}, -{34,18,19}, -{34,18,20}, -{34,18,21}, -{34,18,22}, -{34,18,23}, -{34,18,24}, -{34,18,25}, -{34,18,26}, -{34,18,27}, -{34,18,28}, -{34,18,29}, -{34,18,30}, -{34,18,31}, -{34,18,32}, -{34,18,33}, -{34,18,34}, -{34,18,35}, -{34,18,36}, -{34,18,37}, -{34,18,38}, -{34,18,39}, -{34,18,40}, -{34,18,41}, -{34,18,42}, -{34,18,43}, -{34,18,44}, -{34,19,-56}, -{34,19,-55}, -{34,19,-54}, -{34,19,-53}, -{34,19,-52}, -{34,19,-51}, -{34,19,-50}, -{34,19,-49}, -{34,19,-48}, -{34,19,-47}, -{34,19,-46}, -{34,19,-45}, -{34,19,-44}, -{34,19,-43}, -{34,19,-42}, -{34,19,-41}, -{34,19,-40}, -{34,19,-39}, -{34,19,-38}, -{34,19,-37}, -{34,19,-36}, -{34,19,-35}, -{34,19,-34}, -{34,19,-33}, -{34,19,-32}, -{34,19,-31}, -{34,19,-30}, -{34,19,-29}, -{34,19,-28}, -{34,19,-27}, -{34,19,-26}, -{34,19,-25}, -{34,19,-24}, -{34,19,-23}, -{34,19,-22}, -{34,19,-21}, -{34,19,-20}, -{34,19,-19}, -{34,19,-18}, -{34,19,-17}, -{34,19,-16}, -{34,19,-15}, -{34,19,-14}, -{34,19,-13}, -{34,19,-12}, -{34,19,-11}, -{34,19,-10}, -{34,19,-9}, -{34,19,-8}, -{34,19,-7}, -{34,19,-6}, -{34,19,-5}, -{34,19,-4}, -{34,19,-3}, -{34,19,-2}, -{34,19,-1}, -{34,19,0}, -{34,19,1}, -{34,19,2}, -{34,19,3}, -{34,19,4}, -{34,19,5}, -{34,19,6}, -{34,19,7}, -{34,19,8}, -{34,19,9}, -{34,19,10}, -{34,19,11}, -{34,19,12}, -{34,19,13}, -{34,19,14}, -{34,19,15}, -{34,19,16}, -{34,19,17}, -{34,19,18}, -{34,19,19}, -{34,19,20}, -{34,19,21}, -{34,19,22}, -{34,19,23}, -{34,19,24}, -{34,19,25}, -{34,19,26}, -{34,19,27}, -{34,19,28}, -{34,19,29}, -{34,19,30}, -{34,19,31}, -{34,19,32}, -{34,19,33}, -{34,19,34}, -{34,19,35}, -{34,19,36}, -{34,19,37}, -{34,19,38}, -{34,19,39}, -{34,19,40}, -{34,19,41}, -{34,19,42}, -{34,19,43}, -{34,19,44}, -{34,20,-57}, -{34,20,-56}, -{34,20,-55}, -{34,20,-54}, -{34,20,-53}, -{34,20,-52}, -{34,20,-51}, -{34,20,-50}, -{34,20,-49}, -{34,20,-48}, -{34,20,-47}, -{34,20,-46}, -{34,20,-45}, -{34,20,-44}, -{34,20,-43}, -{34,20,-42}, -{34,20,-41}, -{34,20,-40}, -{34,20,-39}, -{34,20,-38}, -{34,20,-37}, -{34,20,-36}, -{34,20,-35}, -{34,20,-34}, -{34,20,-33}, -{34,20,-32}, -{34,20,-31}, -{34,20,-30}, -{34,20,-29}, -{34,20,-28}, -{34,20,-27}, -{34,20,-26}, -{34,20,-25}, -{34,20,-24}, -{34,20,-23}, -{34,20,-22}, -{34,20,-21}, -{34,20,-20}, -{34,20,-19}, -{34,20,-18}, -{34,20,-17}, -{34,20,-16}, -{34,20,-15}, -{34,20,-14}, -{34,20,-13}, -{34,20,-12}, -{34,20,-11}, -{34,20,-10}, -{34,20,-9}, -{34,20,-8}, -{34,20,-7}, -{34,20,-6}, -{34,20,-5}, -{34,20,-4}, -{34,20,-3}, -{34,20,-2}, -{34,20,-1}, -{34,20,0}, -{34,20,1}, -{34,20,2}, -{34,20,3}, -{34,20,4}, -{34,20,5}, -{34,20,6}, -{34,20,7}, -{34,20,8}, -{34,20,9}, -{34,20,10}, -{34,20,11}, -{34,20,12}, -{34,20,13}, -{34,20,14}, -{34,20,15}, -{34,20,16}, -{34,20,17}, -{34,20,18}, -{34,20,19}, -{34,20,20}, -{34,20,21}, -{34,20,22}, -{34,20,23}, -{34,20,24}, -{34,20,25}, -{34,20,26}, -{34,20,27}, -{34,20,28}, -{34,20,29}, -{34,20,30}, -{34,20,31}, -{34,20,32}, -{34,20,33}, -{34,20,34}, -{34,20,35}, -{34,20,36}, -{34,20,37}, -{34,20,38}, -{34,20,39}, -{34,20,40}, -{34,20,41}, -{34,20,42}, -{34,20,43}, -{34,20,44}, -{34,21,-58}, -{34,21,-57}, -{34,21,-56}, -{34,21,-55}, -{34,21,-54}, -{34,21,-53}, -{34,21,-52}, -{34,21,-51}, -{34,21,-50}, -{34,21,-49}, -{34,21,-48}, -{34,21,-47}, -{34,21,-46}, -{34,21,-45}, -{34,21,-44}, -{34,21,-43}, -{34,21,-42}, -{34,21,-41}, -{34,21,-40}, -{34,21,-39}, -{34,21,-38}, -{34,21,-37}, -{34,21,-36}, -{34,21,-35}, -{34,21,-34}, -{34,21,-33}, -{34,21,-32}, -{34,21,-31}, -{34,21,-30}, -{34,21,-29}, -{34,21,-28}, -{34,21,-27}, -{34,21,-26}, -{34,21,-25}, -{34,21,-24}, -{34,21,-23}, -{34,21,-22}, -{34,21,-21}, -{34,21,-20}, -{34,21,-19}, -{34,21,-18}, -{34,21,-17}, -{34,21,-16}, -{34,21,-15}, -{34,21,-14}, -{34,21,-13}, -{34,21,-12}, -{34,21,-11}, -{34,21,-10}, -{34,21,-9}, -{34,21,-8}, -{34,21,-7}, -{34,21,-6}, -{34,21,-5}, -{34,21,-4}, -{34,21,-3}, -{34,21,-2}, -{34,21,-1}, -{34,21,0}, -{34,21,1}, -{34,21,2}, -{34,21,3}, -{34,21,4}, -{34,21,5}, -{34,21,6}, -{34,21,7}, -{34,21,8}, -{34,21,9}, -{34,21,10}, -{34,21,11}, -{34,21,12}, -{34,21,13}, -{34,21,14}, -{34,21,15}, -{34,21,16}, -{34,21,17}, -{34,21,18}, -{34,21,19}, -{34,21,20}, -{34,21,21}, -{34,21,22}, -{34,21,23}, -{34,21,24}, -{34,21,25}, -{34,21,26}, -{34,21,27}, -{34,21,28}, -{34,21,29}, -{34,21,30}, -{34,21,31}, -{34,21,32}, -{34,21,33}, -{34,21,34}, -{34,21,35}, -{34,21,36}, -{34,21,37}, -{34,21,38}, -{34,21,39}, -{34,21,40}, -{34,21,41}, -{34,21,42}, -{34,21,43}, -{34,21,44}, -{34,22,-59}, -{34,22,-58}, -{34,22,-57}, -{34,22,-56}, -{34,22,-55}, -{34,22,-54}, -{34,22,-53}, -{34,22,-52}, -{34,22,-51}, -{34,22,-50}, -{34,22,-49}, -{34,22,-48}, -{34,22,-47}, -{34,22,-46}, -{34,22,-45}, -{34,22,-44}, -{34,22,-43}, -{34,22,-42}, -{34,22,-41}, -{34,22,-40}, -{34,22,-39}, -{34,22,-38}, -{34,22,-37}, -{34,22,-36}, -{34,22,-35}, -{34,22,-34}, -{34,22,-33}, -{34,22,-32}, -{34,22,-31}, -{34,22,-30}, -{34,22,-29}, -{34,22,-28}, -{34,22,-27}, -{34,22,-26}, -{34,22,-25}, -{34,22,-24}, -{34,22,-23}, -{34,22,-22}, -{34,22,-21}, -{34,22,-20}, -{34,22,-19}, -{34,22,-18}, -{34,22,-17}, -{34,22,-16}, -{34,22,-15}, -{34,22,-14}, -{34,22,-13}, -{34,22,-12}, -{34,22,-11}, -{34,22,-10}, -{34,22,-9}, -{34,22,-8}, -{34,22,-7}, -{34,22,-6}, -{34,22,-5}, -{34,22,-4}, -{34,22,-3}, -{34,22,-2}, -{34,22,-1}, -{34,22,0}, -{34,22,1}, -{34,22,2}, -{34,22,3}, -{34,22,4}, -{34,22,5}, -{34,22,6}, -{34,22,7}, -{34,22,8}, -{34,22,9}, -{34,22,10}, -{34,22,11}, -{34,22,12}, -{34,22,13}, -{34,22,14}, -{34,22,15}, -{34,22,16}, -{34,22,17}, -{34,22,18}, -{34,22,19}, -{34,22,20}, -{34,22,21}, -{34,22,22}, -{34,22,23}, -{34,22,24}, -{34,22,25}, -{34,22,26}, -{34,22,27}, -{34,22,28}, -{34,22,29}, -{34,22,30}, -{34,22,31}, -{34,22,32}, -{34,22,33}, -{34,22,34}, -{34,22,35}, -{34,22,36}, -{34,22,37}, -{34,22,38}, -{34,22,39}, -{34,22,40}, -{34,22,41}, -{34,22,42}, -{34,22,43}, -{34,22,44}, -{34,23,-59}, -{34,23,-58}, -{34,23,-57}, -{34,23,-56}, -{34,23,-55}, -{34,23,-54}, -{34,23,-53}, -{34,23,-52}, -{34,23,-51}, -{34,23,-50}, -{34,23,-49}, -{34,23,-48}, -{34,23,-47}, -{34,23,-46}, -{34,23,-45}, -{34,23,-44}, -{34,23,-43}, -{34,23,-42}, -{34,23,-41}, -{34,23,-40}, -{34,23,-39}, -{34,23,-38}, -{34,23,-37}, -{34,23,-36}, -{34,23,-35}, -{34,23,-34}, -{34,23,-33}, -{34,23,-32}, -{34,23,-31}, -{34,23,-30}, -{34,23,-29}, -{34,23,-28}, -{34,23,-27}, -{34,23,-26}, -{34,23,-25}, -{34,23,-24}, -{34,23,-23}, -{34,23,-22}, -{34,23,-21}, -{34,23,-20}, -{34,23,-19}, -{34,23,-18}, -{34,23,-17}, -{34,23,-16}, -{34,23,-15}, -{34,23,-14}, -{34,23,-13}, -{34,23,-12}, -{34,23,-11}, -{34,23,-10}, -{34,23,-9}, -{34,23,-8}, -{34,23,-7}, -{34,23,-6}, -{34,23,-5}, -{34,23,-4}, -{34,23,-3}, -{34,23,-2}, -{34,23,-1}, -{34,23,0}, -{34,23,1}, -{34,23,2}, -{34,23,3}, -{34,23,4}, -{34,23,5}, -{34,23,6}, -{34,23,7}, -{34,23,8}, -{34,23,9}, -{34,23,10}, -{34,23,11}, -{34,23,12}, -{34,23,13}, -{34,23,14}, -{34,23,15}, -{34,23,16}, -{34,23,17}, -{34,23,18}, -{34,23,19}, -{34,23,20}, -{34,23,21}, -{34,23,22}, -{34,23,23}, -{34,23,24}, -{34,23,25}, -{34,23,26}, -{34,23,27}, -{34,23,28}, -{34,23,29}, -{34,23,30}, -{34,23,31}, -{34,23,32}, -{34,23,33}, -{34,23,34}, -{34,23,35}, -{34,23,36}, -{34,23,37}, -{34,23,38}, -{34,23,39}, -{34,23,40}, -{34,23,41}, -{34,23,42}, -{34,23,43}, -{34,23,44}, -{34,24,-60}, -{34,24,-59}, -{34,24,-58}, -{34,24,-57}, -{34,24,-56}, -{34,24,-55}, -{34,24,-54}, -{34,24,-53}, -{34,24,-52}, -{34,24,-51}, -{34,24,-50}, -{34,24,-49}, -{34,24,-48}, -{34,24,-47}, -{34,24,-46}, -{34,24,-45}, -{34,24,-44}, -{34,24,-43}, -{34,24,-42}, -{34,24,-41}, -{34,24,-40}, -{34,24,-39}, -{34,24,-38}, -{34,24,-37}, -{34,24,-36}, -{34,24,-35}, -{34,24,-34}, -{34,24,-33}, -{34,24,-32}, -{34,24,-31}, -{34,24,-30}, -{34,24,-29}, -{34,24,-28}, -{34,24,-27}, -{34,24,-26}, -{34,24,-25}, -{34,24,-24}, -{34,24,-23}, -{34,24,-22}, -{34,24,-21}, -{34,24,-20}, -{34,24,-19}, -{34,24,-18}, -{34,24,-17}, -{34,24,-16}, -{34,24,-15}, -{34,24,-14}, -{34,24,-13}, -{34,24,-12}, -{34,24,-11}, -{34,24,-10}, -{34,24,-9}, -{34,24,-8}, -{34,24,-7}, -{34,24,-6}, -{34,24,-5}, -{34,24,-4}, -{34,24,-3}, -{34,24,-2}, -{34,24,-1}, -{34,24,0}, -{34,24,1}, -{34,24,2}, -{34,24,3}, -{34,24,4}, -{34,24,5}, -{34,24,6}, -{34,24,7}, -{34,24,8}, -{34,24,9}, -{34,24,10}, -{34,24,11}, -{34,24,12}, -{34,24,13}, -{34,24,14}, -{34,24,15}, -{34,24,16}, -{34,24,17}, -{34,24,18}, -{34,24,19}, -{34,24,20}, -{34,24,21}, -{34,24,22}, -{34,24,23}, -{34,24,24}, -{34,24,25}, -{34,24,26}, -{34,24,27}, -{34,24,28}, -{34,24,29}, -{34,24,30}, -{34,24,31}, -{34,24,32}, -{34,24,33}, -{34,24,34}, -{34,24,35}, -{34,24,36}, -{34,24,37}, -{34,24,38}, -{34,24,39}, -{34,24,40}, -{34,24,41}, -{34,24,42}, -{34,24,43}, -{34,24,44}, -{34,25,-61}, -{34,25,-60}, -{34,25,-59}, -{34,25,-58}, -{34,25,-57}, -{34,25,-56}, -{34,25,-55}, -{34,25,-54}, -{34,25,-53}, -{34,25,-52}, -{34,25,-51}, -{34,25,-50}, -{34,25,-49}, -{34,25,-48}, -{34,25,-47}, -{34,25,-46}, -{34,25,-45}, -{34,25,-44}, -{34,25,-43}, -{34,25,-42}, -{34,25,-41}, -{34,25,-40}, -{34,25,-39}, -{34,25,-38}, -{34,25,-37}, -{34,25,-36}, -{34,25,-35}, -{34,25,-34}, -{34,25,-33}, -{34,25,-32}, -{34,25,-31}, -{34,25,-30}, -{34,25,-29}, -{34,25,-28}, -{34,25,-27}, -{34,25,-26}, -{34,25,-25}, -{34,25,-24}, -{34,25,-23}, -{34,25,-22}, -{34,25,-21}, -{34,25,-20}, -{34,25,-19}, -{34,25,-18}, -{34,25,-17}, -{34,25,-16}, -{34,25,-15}, -{34,25,-14}, -{34,25,-13}, -{34,25,-12}, -{34,25,-11}, -{34,25,-10}, -{34,25,-9}, -{34,25,-8}, -{34,25,-7}, -{34,25,-6}, -{34,25,-5}, -{34,25,-4}, -{34,25,-3}, -{34,25,-2}, -{34,25,-1}, -{34,25,0}, -{34,25,1}, -{34,25,2}, -{34,25,3}, -{34,25,4}, -{34,25,5}, -{34,25,6}, -{34,25,7}, -{34,25,8}, -{34,25,9}, -{34,25,10}, -{34,25,11}, -{34,25,12}, -{34,25,13}, -{34,25,14}, -{34,25,15}, -{34,25,16}, -{34,25,17}, -{34,25,18}, -{34,25,19}, -{34,25,20}, -{34,25,21}, -{34,25,22}, -{34,25,23}, -{34,25,24}, -{34,25,25}, -{34,25,26}, -{34,25,27}, -{34,25,28}, -{34,25,29}, -{34,25,30}, -{34,25,31}, -{34,25,32}, -{34,25,33}, -{34,25,34}, -{34,25,35}, -{34,25,36}, -{34,25,37}, -{34,25,38}, -{34,25,39}, -{34,25,40}, -{34,25,41}, -{34,25,42}, -{34,25,43}, -{34,25,44}, -{34,26,-62}, -{34,26,-61}, -{34,26,-60}, -{34,26,-59}, -{34,26,-58}, -{34,26,-57}, -{34,26,-56}, -{34,26,-55}, -{34,26,-54}, -{34,26,-53}, -{34,26,-52}, -{34,26,-51}, -{34,26,-50}, -{34,26,-49}, -{34,26,-48}, -{34,26,-47}, -{34,26,-46}, -{34,26,-45}, -{34,26,-44}, -{34,26,-43}, -{34,26,-42}, -{34,26,-41}, -{34,26,-40}, -{34,26,-39}, -{34,26,-38}, -{34,26,-37}, -{34,26,-36}, -{34,26,-35}, -{34,26,-34}, -{34,26,-33}, -{34,26,-32}, -{34,26,-31}, -{34,26,-30}, -{34,26,-29}, -{34,26,-28}, -{34,26,-27}, -{34,26,-26}, -{34,26,-25}, -{34,26,-24}, -{34,26,-23}, -{34,26,-22}, -{34,26,-21}, -{34,26,-20}, -{34,26,-19}, -{34,26,-18}, -{34,26,-17}, -{34,26,-16}, -{34,26,-15}, -{34,26,-14}, -{34,26,-13}, -{34,26,-12}, -{34,26,-11}, -{34,26,-10}, -{34,26,-9}, -{34,26,-8}, -{34,26,-7}, -{34,26,-6}, -{34,26,-5}, -{34,26,-4}, -{34,26,-3}, -{34,26,-2}, -{34,26,-1}, -{34,26,0}, -{34,26,1}, -{34,26,2}, -{34,26,3}, -{34,26,4}, -{34,26,5}, -{34,26,6}, -{34,26,7}, -{34,26,8}, -{34,26,9}, -{34,26,10}, -{34,26,11}, -{34,26,12}, -{34,26,13}, -{34,26,14}, -{34,26,15}, -{34,26,16}, -{34,26,17}, -{34,26,18}, -{34,26,19}, -{34,26,20}, -{34,26,21}, -{34,26,22}, -{34,26,23}, -{34,26,24}, -{34,26,25}, -{34,26,26}, -{34,26,27}, -{34,26,28}, -{34,26,29}, -{34,26,30}, -{34,26,31}, -{34,26,32}, -{34,26,33}, -{34,26,34}, -{34,26,35}, -{34,26,36}, -{34,26,37}, -{34,26,38}, -{34,26,39}, -{34,26,40}, -{34,26,41}, -{34,26,42}, -{34,26,43}, -{34,26,44}, -{34,27,-63}, -{34,27,-62}, -{34,27,-61}, -{34,27,-60}, -{34,27,-59}, -{34,27,-58}, -{34,27,-57}, -{34,27,-56}, -{34,27,-55}, -{34,27,-54}, -{34,27,-53}, -{34,27,-52}, -{34,27,-51}, -{34,27,-50}, -{34,27,-49}, -{34,27,-48}, -{34,27,-47}, -{34,27,-46}, -{34,27,-45}, -{34,27,-44}, -{34,27,-43}, -{34,27,-42}, -{34,27,-41}, -{34,27,-40}, -{34,27,-39}, -{34,27,-38}, -{34,27,-37}, -{34,27,-36}, -{34,27,-35}, -{34,27,-34}, -{34,27,-33}, -{34,27,-32}, -{34,27,-31}, -{34,27,-30}, -{34,27,-29}, -{34,27,-28}, -{34,27,-27}, -{34,27,-26}, -{34,27,-25}, -{34,27,-24}, -{34,27,-23}, -{34,27,-22}, -{34,27,-21}, -{34,27,-20}, -{34,27,-19}, -{34,27,-18}, -{34,27,-17}, -{34,27,-16}, -{34,27,-15}, -{34,27,-14}, -{34,27,-13}, -{34,27,-12}, -{34,27,-11}, -{34,27,-10}, -{34,27,-9}, -{34,27,-8}, -{34,27,-7}, -{34,27,-6}, -{34,27,-5}, -{34,27,-4}, -{34,27,-3}, -{34,27,-2}, -{34,27,-1}, -{34,27,0}, -{34,27,1}, -{34,27,2}, -{34,27,3}, -{34,27,4}, -{34,27,5}, -{34,27,6}, -{34,27,7}, -{34,27,8}, -{34,27,9}, -{34,27,10}, -{34,27,11}, -{34,27,12}, -{34,27,13}, -{34,27,14}, -{34,27,15}, -{34,27,16}, -{34,27,17}, -{34,27,18}, -{34,27,19}, -{34,27,20}, -{34,27,21}, -{34,27,22}, -{34,27,23}, -{34,27,24}, -{34,27,25}, -{34,27,26}, -{34,27,27}, -{34,27,28}, -{34,27,29}, -{34,27,30}, -{34,27,31}, -{34,27,32}, -{34,27,33}, -{34,27,34}, -{34,27,35}, -{34,27,36}, -{34,27,37}, -{34,27,38}, -{34,27,39}, -{34,27,40}, -{34,27,41}, -{34,27,42}, -{34,27,43}, -{34,27,44}, -{34,28,-64}, -{34,28,-63}, -{34,28,-62}, -{34,28,-61}, -{34,28,-60}, -{34,28,-59}, -{34,28,-58}, -{34,28,-57}, -{34,28,-56}, -{34,28,-55}, -{34,28,-54}, -{34,28,-53}, -{34,28,-52}, -{34,28,-51}, -{34,28,-50}, -{34,28,-49}, -{34,28,-48}, -{34,28,-47}, -{34,28,-46}, -{34,28,-45}, -{34,28,-44}, -{34,28,-43}, -{34,28,-42}, -{34,28,-41}, -{34,28,-40}, -{34,28,-39}, -{34,28,-38}, -{34,28,-37}, -{34,28,-36}, -{34,28,-35}, -{34,28,-34}, -{34,28,-33}, -{34,28,-32}, -{34,28,-31}, -{34,28,-30}, -{34,28,-29}, -{34,28,-28}, -{34,28,-27}, -{34,28,-26}, -{34,28,-25}, -{34,28,-24}, -{34,28,-23}, -{34,28,-22}, -{34,28,-21}, -{34,28,-20}, -{34,28,-19}, -{34,28,-18}, -{34,28,-17}, -{34,28,-16}, -{34,28,-15}, -{34,28,-14}, -{34,28,-13}, -{34,28,-12}, -{34,28,-11}, -{34,28,-10}, -{34,28,-9}, -{34,28,-8}, -{34,28,-7}, -{34,28,-6}, -{34,28,-5}, -{34,28,-4}, -{34,28,-3}, -{34,28,-2}, -{34,28,-1}, -{34,28,0}, -{34,28,1}, -{34,28,2}, -{34,28,3}, -{34,28,4}, -{34,28,5}, -{34,28,6}, -{34,28,7}, -{34,28,8}, -{34,28,9}, -{34,28,10}, -{34,28,11}, -{34,28,12}, -{34,28,13}, -{34,28,14}, -{34,28,15}, -{34,28,16}, -{34,28,17}, -{34,28,18}, -{34,28,19}, -{34,28,20}, -{34,28,21}, -{34,28,22}, -{34,28,23}, -{34,28,24}, -{34,28,25}, -{34,28,26}, -{34,28,27}, -{34,28,28}, -{34,28,29}, -{34,28,30}, -{34,28,31}, -{34,28,32}, -{34,28,33}, -{34,28,34}, -{34,28,35}, -{34,28,36}, -{34,28,37}, -{34,28,38}, -{34,28,39}, -{34,28,40}, -{34,28,41}, -{34,28,42}, -{34,28,43}, -{34,28,44}, -{34,29,-65}, -{34,29,-64}, -{34,29,-63}, -{34,29,-62}, -{34,29,-61}, -{34,29,-60}, -{34,29,-59}, -{34,29,-58}, -{34,29,-57}, -{34,29,-56}, -{34,29,-55}, -{34,29,-54}, -{34,29,-53}, -{34,29,-52}, -{34,29,-51}, -{34,29,-50}, -{34,29,-49}, -{34,29,-48}, -{34,29,-47}, -{34,29,-46}, -{34,29,-45}, -{34,29,-44}, -{34,29,-43}, -{34,29,-42}, -{34,29,-41}, -{34,29,-40}, -{34,29,-39}, -{34,29,-38}, -{34,29,-37}, -{34,29,-36}, -{34,29,-35}, -{34,29,-34}, -{34,29,-33}, -{34,29,-32}, -{34,29,-31}, -{34,29,-30}, -{34,29,-29}, -{34,29,-28}, -{34,29,-27}, -{34,29,-26}, -{34,29,-25}, -{34,29,-24}, -{34,29,-23}, -{34,29,-22}, -{34,29,-21}, -{34,29,-20}, -{34,29,-19}, -{34,29,-18}, -{34,29,-17}, -{34,29,-16}, -{34,29,-15}, -{34,29,-14}, -{34,29,-13}, -{34,29,-12}, -{34,29,-11}, -{34,29,-10}, -{34,29,-9}, -{34,29,-8}, -{34,29,-7}, -{34,29,-6}, -{34,29,-5}, -{34,29,-4}, -{34,29,-3}, -{34,29,-2}, -{34,29,-1}, -{34,29,0}, -{34,29,1}, -{34,29,2}, -{34,29,3}, -{34,29,4}, -{34,29,5}, -{34,29,6}, -{34,29,7}, -{34,29,8}, -{34,29,9}, -{34,29,10}, -{34,29,11}, -{34,29,12}, -{34,29,13}, -{34,29,14}, -{34,29,15}, -{34,29,16}, -{34,29,17}, -{34,29,18}, -{34,29,19}, -{34,29,20}, -{34,29,21}, -{34,29,22}, -{34,29,23}, -{34,29,24}, -{34,29,25}, -{34,29,26}, -{34,29,27}, -{34,29,28}, -{34,29,29}, -{34,29,30}, -{34,29,31}, -{34,29,32}, -{34,29,33}, -{34,29,34}, -{34,29,35}, -{34,29,36}, -{34,29,37}, -{34,29,38}, -{34,29,39}, -{34,29,40}, -{34,29,41}, -{34,29,42}, -{34,29,43}, -{34,29,44}, -{34,29,45}, -{34,30,-66}, -{34,30,-65}, -{34,30,-64}, -{34,30,-63}, -{34,30,-62}, -{34,30,-61}, -{34,30,-60}, -{34,30,-59}, -{34,30,-58}, -{34,30,-57}, -{34,30,-56}, -{34,30,-55}, -{34,30,-54}, -{34,30,-53}, -{34,30,-52}, -{34,30,-51}, -{34,30,-50}, -{34,30,-49}, -{34,30,-48}, -{34,30,-47}, -{34,30,-46}, -{34,30,-45}, -{34,30,-44}, -{34,30,-43}, -{34,30,-42}, -{34,30,-41}, -{34,30,-40}, -{34,30,-39}, -{34,30,-38}, -{34,30,-37}, -{34,30,-36}, -{34,30,-35}, -{34,30,-34}, -{34,30,-33}, -{34,30,-32}, -{34,30,-31}, -{34,30,-30}, -{34,30,-29}, -{34,30,-28}, -{34,30,-27}, -{34,30,-26}, -{34,30,-25}, -{34,30,-24}, -{34,30,-23}, -{34,30,-22}, -{34,30,-21}, -{34,30,-20}, -{34,30,-19}, -{34,30,-18}, -{34,30,-17}, -{34,30,-16}, -{34,30,-15}, -{34,30,-14}, -{34,30,-13}, -{34,30,-12}, -{34,30,-11}, -{34,30,-10}, -{34,30,-9}, -{34,30,-8}, -{34,30,-7}, -{34,30,-6}, -{34,30,-5}, -{34,30,-4}, -{34,30,-3}, -{34,30,-2}, -{34,30,-1}, -{34,30,0}, -{34,30,1}, -{34,30,2}, -{34,30,3}, -{34,30,4}, -{34,30,5}, -{34,30,6}, -{34,30,7}, -{34,30,8}, -{34,30,9}, -{34,30,10}, -{34,30,11}, -{34,30,12}, -{34,30,13}, -{34,30,14}, -{34,30,15}, -{34,30,16}, -{34,30,17}, -{34,30,18}, -{34,30,19}, -{34,30,20}, -{34,30,21}, -{34,30,22}, -{34,30,23}, -{34,30,24}, -{34,30,25}, -{34,30,26}, -{34,30,27}, -{34,30,28}, -{34,30,29}, -{34,30,30}, -{34,30,31}, -{34,30,32}, -{34,30,33}, -{34,30,34}, -{34,30,35}, -{34,30,36}, -{34,30,37}, -{34,30,38}, -{34,30,39}, -{34,30,40}, -{34,30,41}, -{34,30,42}, -{34,30,43}, -{34,30,44}, -{34,30,45}, -{34,31,-67}, -{34,31,-66}, -{34,31,-65}, -{34,31,-64}, -{34,31,-63}, -{34,31,-62}, -{34,31,-61}, -{34,31,-60}, -{34,31,-59}, -{34,31,-58}, -{34,31,-57}, -{34,31,-56}, -{34,31,-55}, -{34,31,-54}, -{34,31,-53}, -{34,31,-52}, -{34,31,-51}, -{34,31,-50}, -{34,31,-49}, -{34,31,-48}, -{34,31,-47}, -{34,31,-46}, -{34,31,-45}, -{34,31,-44}, -{34,31,-43}, -{34,31,-42}, -{34,31,-41}, -{34,31,-40}, -{34,31,-39}, -{34,31,-38}, -{34,31,-37}, -{34,31,-36}, -{34,31,-35}, -{34,31,-34}, -{34,31,-33}, -{34,31,-32}, -{34,31,-31}, -{34,31,-30}, -{34,31,-29}, -{34,31,-28}, -{34,31,-27}, -{34,31,-26}, -{34,31,-25}, -{34,31,-24}, -{34,31,-23}, -{34,31,-22}, -{34,31,-21}, -{34,31,-20}, -{34,31,-19}, -{34,31,-18}, -{34,31,-17}, -{34,31,-16}, -{34,31,-15}, -{34,31,-14}, -{34,31,-13}, -{34,31,-12}, -{34,31,-11}, -{34,31,-10}, -{34,31,-9}, -{34,31,-8}, -{34,31,-7}, -{34,31,-6}, -{34,31,-5}, -{34,31,-4}, -{34,31,-3}, -{34,31,-2}, -{34,31,-1}, -{34,31,0}, -{34,31,1}, -{34,31,2}, -{34,31,3}, -{34,31,4}, -{34,31,5}, -{34,31,6}, -{34,31,7}, -{34,31,8}, -{34,31,9}, -{34,31,10}, -{34,31,11}, -{34,31,12}, -{34,31,13}, -{34,31,14}, -{34,31,15}, -{34,31,16}, -{34,31,17}, -{34,31,18}, -{34,31,19}, -{34,31,20}, -{34,31,21}, -{34,31,22}, -{34,31,23}, -{34,31,24}, -{34,31,25}, -{34,31,26}, -{34,31,27}, -{34,31,28}, -{34,31,29}, -{34,31,30}, -{34,31,31}, -{34,31,32}, -{34,31,33}, -{34,31,34}, -{34,31,35}, -{34,31,36}, -{34,31,37}, -{34,31,38}, -{34,31,39}, -{34,31,40}, -{34,31,41}, -{34,31,42}, -{34,31,43}, -{34,31,44}, -{34,31,45}, -{34,32,-68}, -{34,32,-67}, -{34,32,-66}, -{34,32,-65}, -{34,32,-64}, -{34,32,-63}, -{34,32,-62}, -{34,32,-61}, -{34,32,-60}, -{34,32,-59}, -{34,32,-58}, -{34,32,-57}, -{34,32,-56}, -{34,32,-55}, -{34,32,-54}, -{34,32,-53}, -{34,32,-52}, -{34,32,-51}, -{34,32,-50}, -{34,32,-49}, -{34,32,-48}, -{34,32,-47}, -{34,32,-46}, -{34,32,-45}, -{34,32,-44}, -{34,32,-43}, -{34,32,-42}, -{34,32,-41}, -{34,32,-40}, -{34,32,-39}, -{34,32,-38}, -{34,32,-37}, -{34,32,-36}, -{34,32,-35}, -{34,32,-34}, -{34,32,-33}, -{34,32,-32}, -{34,32,-31}, -{34,32,-30}, -{34,32,-29}, -{34,32,-28}, -{34,32,-27}, -{34,32,-26}, -{34,32,-25}, -{34,32,-24}, -{34,32,-23}, -{34,32,-22}, -{34,32,-21}, -{34,32,-20}, -{34,32,-19}, -{34,32,-18}, -{34,32,-17}, -{34,32,-16}, -{34,32,-15}, -{34,32,-14}, -{34,32,-13}, -{34,32,-12}, -{34,32,-11}, -{34,32,-10}, -{34,32,-9}, -{34,32,-8}, -{34,32,-7}, -{34,32,-6}, -{34,32,-5}, -{34,32,-4}, -{34,32,-3}, -{34,32,-2}, -{34,32,-1}, -{34,32,0}, -{34,32,1}, -{34,32,2}, -{34,32,3}, -{34,32,4}, -{34,32,5}, -{34,32,6}, -{34,32,7}, -{34,32,8}, -{34,32,9}, -{34,32,10}, -{34,32,11}, -{34,32,12}, -{34,32,13}, -{34,32,14}, -{34,32,15}, -{34,32,16}, -{34,32,17}, -{34,32,18}, -{34,32,19}, -{34,32,20}, -{34,32,21}, -{34,32,22}, -{34,32,23}, -{34,32,24}, -{34,32,25}, -{34,32,26}, -{34,32,27}, -{34,32,28}, -{34,32,29}, -{34,32,30}, -{34,32,31}, -{34,32,32}, -{34,32,33}, -{34,32,34}, -{34,32,35}, -{34,32,36}, -{34,32,37}, -{34,32,38}, -{34,32,39}, -{34,32,40}, -{34,32,41}, -{34,32,42}, -{34,32,43}, -{34,32,44}, -{34,32,45}, -{34,33,-69}, -{34,33,-68}, -{34,33,-67}, -{34,33,-66}, -{34,33,-65}, -{34,33,-64}, -{34,33,-63}, -{34,33,-62}, -{34,33,-61}, -{34,33,-60}, -{34,33,-59}, -{34,33,-58}, -{34,33,-57}, -{34,33,-56}, -{34,33,-55}, -{34,33,-54}, -{34,33,-53}, -{34,33,-52}, -{34,33,-51}, -{34,33,-50}, -{34,33,-49}, -{34,33,-48}, -{34,33,-47}, -{34,33,-46}, -{34,33,-45}, -{34,33,-44}, -{34,33,-43}, -{34,33,-42}, -{34,33,-41}, -{34,33,-40}, -{34,33,-39}, -{34,33,-38}, -{34,33,-37}, -{34,33,-36}, -{34,33,-35}, -{34,33,-34}, -{34,33,-33}, -{34,33,-32}, -{34,33,-31}, -{34,33,-30}, -{34,33,-29}, -{34,33,-28}, -{34,33,-27}, -{34,33,-26}, -{34,33,-25}, -{34,33,-24}, -{34,33,-23}, -{34,33,-22}, -{34,33,-21}, -{34,33,-20}, -{34,33,-19}, -{34,33,-18}, -{34,33,-17}, -{34,33,-16}, -{34,33,-15}, -{34,33,-14}, -{34,33,-13}, -{34,33,-12}, -{34,33,-11}, -{34,33,-10}, -{34,33,-9}, -{34,33,-8}, -{34,33,-7}, -{34,33,-6}, -{34,33,-5}, -{34,33,-4}, -{34,33,-3}, -{34,33,-2}, -{34,33,-1}, -{34,33,0}, -{34,33,1}, -{34,33,2}, -{34,33,3}, -{34,33,4}, -{34,33,5}, -{34,33,6}, -{34,33,7}, -{34,33,8}, -{34,33,9}, -{34,33,10}, -{34,33,11}, -{34,33,12}, -{34,33,13}, -{34,33,14}, -{34,33,15}, -{34,33,16}, -{34,33,17}, -{34,33,18}, -{34,33,19}, -{34,33,20}, -{34,33,21}, -{34,33,22}, -{34,33,23}, -{34,33,24}, -{34,33,25}, -{34,33,26}, -{34,33,27}, -{34,33,28}, -{34,33,29}, -{34,33,30}, -{34,33,31}, -{34,33,32}, -{34,33,33}, -{34,33,34}, -{34,33,35}, -{34,33,36}, -{34,33,37}, -{34,33,38}, -{34,33,39}, -{34,33,40}, -{34,33,41}, -{34,33,42}, -{34,33,43}, -{34,33,44}, -{34,33,45}, -{34,34,-70}, -{34,34,-69}, -{34,34,-68}, -{34,34,-67}, -{34,34,-66}, -{34,34,-65}, -{34,34,-64}, -{34,34,-63}, -{34,34,-62}, -{34,34,-61}, -{34,34,-60}, -{34,34,-59}, -{34,34,-58}, -{34,34,-57}, -{34,34,-56}, -{34,34,-55}, -{34,34,-54}, -{34,34,-53}, -{34,34,-52}, -{34,34,-51}, -{34,34,-50}, -{34,34,-49}, -{34,34,-48}, -{34,34,-47}, -{34,34,-46}, -{34,34,-45}, -{34,34,-44}, -{34,34,-43}, -{34,34,-42}, -{34,34,-41}, -{34,34,-40}, -{34,34,-39}, -{34,34,-38}, -{34,34,-37}, -{34,34,-36}, -{34,34,-35}, -{34,34,-34}, -{34,34,-33}, -{34,34,-32}, -{34,34,-31}, -{34,34,-30}, -{34,34,-29}, -{34,34,-28}, -{34,34,-27}, -{34,34,-26}, -{34,34,-25}, -{34,34,-24}, -{34,34,-23}, -{34,34,-22}, -{34,34,-21}, -{34,34,-20}, -{34,34,-19}, -{34,34,-18}, -{34,34,-17}, -{34,34,-16}, -{34,34,-15}, -{34,34,-14}, -{34,34,-13}, -{34,34,-12}, -{34,34,-11}, -{34,34,-10}, -{34,34,-9}, -{34,34,-8}, -{34,34,-7}, -{34,34,-6}, -{34,34,-5}, -{34,34,-4}, -{34,34,-3}, -{34,34,-2}, -{34,34,-1}, -{34,34,0}, -{34,34,1}, -{34,34,2}, -{34,34,3}, -{34,34,4}, -{34,34,5}, -{34,34,6}, -{34,34,7}, -{34,34,8}, -{34,34,9}, -{34,34,10}, -{34,34,11}, -{34,34,12}, -{34,34,13}, -{34,34,14}, -{34,34,15}, -{34,34,16}, -{34,34,17}, -{34,34,18}, -{34,34,19}, -{34,34,20}, -{34,34,21}, -{34,34,22}, -{34,34,23}, -{34,34,24}, -{34,34,25}, -{34,34,26}, -{34,34,27}, -{34,34,28}, -{34,34,29}, -{34,34,30}, -{34,34,31}, -{34,34,32}, -{34,34,33}, -{34,34,34}, -{34,34,35}, -{34,34,36}, -{34,34,37}, -{34,34,38}, -{34,34,39}, -{34,34,40}, -{34,34,41}, -{34,34,42}, -{34,34,43}, -{34,34,44}, -{34,34,45}, -{34,35,-71}, -{34,35,-70}, -{34,35,-69}, -{34,35,-68}, -{34,35,-67}, -{34,35,-66}, -{34,35,-65}, -{34,35,-64}, -{34,35,-63}, -{34,35,-62}, -{34,35,-61}, -{34,35,-60}, -{34,35,-59}, -{34,35,-58}, -{34,35,-57}, -{34,35,-56}, -{34,35,-55}, -{34,35,-54}, -{34,35,-53}, -{34,35,-52}, -{34,35,-51}, -{34,35,-50}, -{34,35,-49}, -{34,35,-48}, -{34,35,-47}, -{34,35,-46}, -{34,35,-45}, -{34,35,-44}, -{34,35,-43}, -{34,35,-42}, -{34,35,-41}, -{34,35,-40}, -{34,35,-39}, -{34,35,-38}, -{34,35,-37}, -{34,35,-36}, -{34,35,-35}, -{34,35,-34}, -{34,35,-33}, -{34,35,-32}, -{34,35,-31}, -{34,35,-30}, -{34,35,-29}, -{34,35,-28}, -{34,35,-27}, -{34,35,-26}, -{34,35,-25}, -{34,35,-24}, -{34,35,-23}, -{34,35,-22}, -{34,35,-21}, -{34,35,-20}, -{34,35,-19}, -{34,35,-18}, -{34,35,-17}, -{34,35,-16}, -{34,35,-15}, -{34,35,-14}, -{34,35,-13}, -{34,35,-12}, -{34,35,-11}, -{34,35,-10}, -{34,35,-9}, -{34,35,-8}, -{34,35,-7}, -{34,35,-6}, -{34,35,-5}, -{34,35,-4}, -{34,35,-3}, -{34,35,-2}, -{34,35,-1}, -{34,35,0}, -{34,35,1}, -{34,35,2}, -{34,35,3}, -{34,35,4}, -{34,35,5}, -{34,35,6}, -{34,35,7}, -{34,35,8}, -{34,35,9}, -{34,35,10}, -{34,35,11}, -{34,35,12}, -{34,35,13}, -{34,35,14}, -{34,35,15}, -{34,35,16}, -{34,35,17}, -{34,35,18}, -{34,35,19}, -{34,35,20}, -{34,35,21}, -{34,35,22}, -{34,35,23}, -{34,35,24}, -{34,35,25}, -{34,35,26}, -{34,35,27}, -{34,35,28}, -{34,35,29}, -{34,35,30}, -{34,35,31}, -{34,35,32}, -{34,35,33}, -{34,35,34}, -{34,35,35}, -{34,35,36}, -{34,35,37}, -{34,35,38}, -{34,35,39}, -{34,35,40}, -{34,35,41}, -{34,35,42}, -{34,35,43}, -{34,35,44}, -{34,35,45}, -{34,36,-72}, -{34,36,-71}, -{34,36,-70}, -{34,36,-69}, -{34,36,-68}, -{34,36,-67}, -{34,36,-66}, -{34,36,-65}, -{34,36,-64}, -{34,36,-63}, -{34,36,-62}, -{34,36,-61}, -{34,36,-60}, -{34,36,-59}, -{34,36,-58}, -{34,36,-57}, -{34,36,-56}, -{34,36,-55}, -{34,36,-54}, -{34,36,-53}, -{34,36,-52}, -{34,36,-51}, -{34,36,-50}, -{34,36,-49}, -{34,36,-48}, -{34,36,-47}, -{34,36,-46}, -{34,36,-45}, -{34,36,-44}, -{34,36,-43}, -{34,36,-42}, -{34,36,-41}, -{34,36,-40}, -{34,36,-39}, -{34,36,-38}, -{34,36,-37}, -{34,36,-36}, -{34,36,-35}, -{34,36,-34}, -{34,36,-33}, -{34,36,-32}, -{34,36,-31}, -{34,36,-30}, -{34,36,-29}, -{34,36,-28}, -{34,36,-27}, -{34,36,-26}, -{34,36,-25}, -{34,36,-24}, -{34,36,-23}, -{34,36,-22}, -{34,36,-21}, -{34,36,-20}, -{34,36,-19}, -{34,36,-18}, -{34,36,-17}, -{34,36,-16}, -{34,36,-15}, -{34,36,-14}, -{34,36,-13}, -{34,36,-12}, -{34,36,-11}, -{34,36,-10}, -{34,36,-9}, -{34,36,-8}, -{34,36,-7}, -{34,36,-6}, -{34,36,-5}, -{34,36,-4}, -{34,36,-3}, -{34,36,-2}, -{34,36,-1}, -{34,36,0}, -{34,36,1}, -{34,36,2}, -{34,36,3}, -{34,36,4}, -{34,36,5}, -{34,36,6}, -{34,36,7}, -{34,36,8}, -{34,36,9}, -{34,36,10}, -{34,36,11}, -{34,36,12}, -{34,36,13}, -{34,36,14}, -{34,36,15}, -{34,36,16}, -{34,36,17}, -{34,36,18}, -{34,36,19}, -{34,36,20}, -{34,36,21}, -{34,36,22}, -{34,36,23}, -{34,36,24}, -{34,36,25}, -{34,36,26}, -{34,36,27}, -{34,36,28}, -{34,36,29}, -{34,36,30}, -{34,36,31}, -{34,36,32}, -{34,36,33}, -{34,36,34}, -{34,36,35}, -{34,36,36}, -{34,36,37}, -{34,36,38}, -{34,36,39}, -{34,36,40}, -{34,36,41}, -{34,36,42}, -{34,36,43}, -{34,36,44}, -{34,36,45}, -{34,37,-73}, -{34,37,-72}, -{34,37,-71}, -{34,37,-70}, -{34,37,-69}, -{34,37,-68}, -{34,37,-67}, -{34,37,-66}, -{34,37,-65}, -{34,37,-64}, -{34,37,-63}, -{34,37,-62}, -{34,37,-61}, -{34,37,-60}, -{34,37,-59}, -{34,37,-58}, -{34,37,-57}, -{34,37,-56}, -{34,37,-55}, -{34,37,-54}, -{34,37,-53}, -{34,37,-52}, -{34,37,-51}, -{34,37,-50}, -{34,37,-49}, -{34,37,-48}, -{34,37,-47}, -{34,37,-46}, -{34,37,-45}, -{34,37,-44}, -{34,37,-43}, -{34,37,-42}, -{34,37,-41}, -{34,37,-40}, -{34,37,-39}, -{34,37,-38}, -{34,37,-37}, -{34,37,-36}, -{34,37,-35}, -{34,37,-34}, -{34,37,-33}, -{34,37,-32}, -{34,37,-31}, -{34,37,-30}, -{34,37,-29}, -{34,37,-28}, -{34,37,-27}, -{34,37,-26}, -{34,37,-25}, -{34,37,-24}, -{34,37,-23}, -{34,37,-22}, -{34,37,-21}, -{34,37,-20}, -{34,37,-19}, -{34,37,-18}, -{34,37,-17}, -{34,37,-16}, -{34,37,-15}, -{34,37,-14}, -{34,37,-13}, -{34,37,-12}, -{34,37,-11}, -{34,37,-10}, -{34,37,-9}, -{34,37,-8}, -{34,37,-7}, -{34,37,-6}, -{34,37,-5}, -{34,37,-4}, -{34,37,-3}, -{34,37,-2}, -{34,37,-1}, -{34,37,0}, -{34,37,1}, -{34,37,2}, -{34,37,3}, -{34,37,4}, -{34,37,5}, -{34,37,6}, -{34,37,7}, -{34,37,8}, -{34,37,9}, -{34,37,10}, -{34,37,11}, -{34,37,12}, -{34,37,13}, -{34,37,14}, -{34,37,15}, -{34,37,16}, -{34,37,17}, -{34,37,18}, -{34,37,19}, -{34,37,20}, -{34,37,21}, -{34,37,22}, -{34,37,23}, -{34,37,24}, -{34,37,25}, -{34,37,26}, -{34,37,27}, -{34,37,28}, -{34,37,29}, -{34,37,30}, -{34,37,31}, -{34,37,32}, -{34,37,33}, -{34,37,34}, -{34,37,35}, -{34,37,36}, -{34,37,37}, -{34,37,38}, -{34,37,39}, -{34,37,40}, -{34,37,41}, -{34,37,42}, -{34,37,43}, -{34,37,44}, -{34,37,45}, -{34,38,-74}, -{34,38,-73}, -{34,38,-72}, -{34,38,-71}, -{34,38,-70}, -{34,38,-69}, -{34,38,-68}, -{34,38,-67}, -{34,38,-66}, -{34,38,-65}, -{34,38,-64}, -{34,38,-63}, -{34,38,-62}, -{34,38,-61}, -{34,38,-60}, -{34,38,-59}, -{34,38,-58}, -{34,38,-57}, -{34,38,-56}, -{34,38,-55}, -{34,38,-54}, -{34,38,-53}, -{34,38,-52}, -{34,38,-51}, -{34,38,-50}, -{34,38,-49}, -{34,38,-48}, -{34,38,-47}, -{34,38,-46}, -{34,38,-45}, -{34,38,-44}, -{34,38,-43}, -{34,38,-42}, -{34,38,-41}, -{34,38,-40}, -{34,38,-39}, -{34,38,-38}, -{34,38,-37}, -{34,38,-36}, -{34,38,-35}, -{34,38,-34}, -{34,38,-33}, -{34,38,-32}, -{34,38,-31}, -{34,38,-30}, -{34,38,-29}, -{34,38,-28}, -{34,38,-27}, -{34,38,-26}, -{34,38,-25}, -{34,38,-24}, -{34,38,-23}, -{34,38,-22}, -{34,38,-21}, -{34,38,-20}, -{34,38,-19}, -{34,38,-18}, -{34,38,-17}, -{34,38,-16}, -{34,38,-15}, -{34,38,-14}, -{34,38,-13}, -{34,38,-12}, -{34,38,-11}, -{34,38,-10}, -{34,38,-9}, -{34,38,-8}, -{34,38,-7}, -{34,38,-6}, -{34,38,-5}, -{34,38,-4}, -{34,38,-3}, -{34,38,-2}, -{34,38,-1}, -{34,38,0}, -{34,38,1}, -{34,38,2}, -{34,38,3}, -{34,38,4}, -{34,38,5}, -{34,38,6}, -{34,38,7}, -{34,38,8}, -{34,38,9}, -{34,38,10}, -{34,38,11}, -{34,38,12}, -{34,38,13}, -{34,38,14}, -{34,38,15}, -{34,38,16}, -{34,38,17}, -{34,38,18}, -{34,38,19}, -{34,38,20}, -{34,38,21}, -{34,38,22}, -{34,38,23}, -{34,38,24}, -{34,38,25}, -{34,38,26}, -{34,38,27}, -{34,38,28}, -{34,38,29}, -{34,38,30}, -{34,38,31}, -{34,38,32}, -{34,38,33}, -{34,38,34}, -{34,38,35}, -{34,38,36}, -{34,38,37}, -{34,38,38}, -{34,38,39}, -{34,38,40}, -{34,38,41}, -{34,38,42}, -{34,38,43}, -{34,38,44}, -{34,38,45}, -{34,38,46}, -{34,39,-74}, -{34,39,-73}, -{34,39,-72}, -{34,39,-71}, -{34,39,-70}, -{34,39,-69}, -{34,39,-68}, -{34,39,-67}, -{34,39,-66}, -{34,39,-65}, -{34,39,-64}, -{34,39,-63}, -{34,39,-62}, -{34,39,-61}, -{34,39,-60}, -{34,39,-59}, -{34,39,-58}, -{34,39,-57}, -{34,39,-56}, -{34,39,-55}, -{34,39,-54}, -{34,39,-53}, -{34,39,-52}, -{34,39,-51}, -{34,39,-50}, -{34,39,-49}, -{34,39,-48}, -{34,39,-47}, -{34,39,-46}, -{34,39,-45}, -{34,39,-44}, -{34,39,-43}, -{34,39,-42}, -{34,39,-41}, -{34,39,-40}, -{34,39,-39}, -{34,39,-38}, -{34,39,-37}, -{34,39,-36}, -{34,39,-35}, -{34,39,-34}, -{34,39,-33}, -{34,39,-32}, -{34,39,-31}, -{34,39,-30}, -{34,39,-29}, -{34,39,-28}, -{34,39,-27}, -{34,39,-26}, -{34,39,-25}, -{34,39,-24}, -{34,39,-23}, -{34,39,-22}, -{34,39,-21}, -{34,39,-20}, -{34,39,-19}, -{34,39,-18}, -{34,39,-17}, -{34,39,-16}, -{34,39,-15}, -{34,39,-14}, -{34,39,-13}, -{34,39,-12}, -{34,39,-11}, -{34,39,-10}, -{34,39,-9}, -{34,39,-8}, -{34,39,-7}, -{34,39,-6}, -{34,39,-5}, -{34,39,-4}, -{34,39,-3}, -{34,39,-2}, -{34,39,-1}, -{34,39,0}, -{34,39,1}, -{34,39,2}, -{34,39,3}, -{34,39,4}, -{34,39,5}, -{34,39,6}, -{34,39,7}, -{34,39,8}, -{34,39,9}, -{34,39,10}, -{34,39,11}, -{34,39,12}, -{34,39,13}, -{34,39,14}, -{34,39,15}, -{34,39,16}, -{34,39,17}, -{34,39,18}, -{34,39,19}, -{34,39,20}, -{34,39,21}, -{34,39,22}, -{34,39,23}, -{34,39,24}, -{34,39,25}, -{34,39,26}, -{34,39,27}, -{34,39,28}, -{34,39,29}, -{34,39,30}, -{34,39,31}, -{34,39,32}, -{34,39,33}, -{34,39,34}, -{34,39,35}, -{34,39,36}, -{34,39,37}, -{34,39,38}, -{34,39,39}, -{34,39,40}, -{34,39,41}, -{34,39,42}, -{34,39,43}, -{34,39,44}, -{34,39,45}, -{34,39,46}, -{34,40,-75}, -{34,40,-74}, -{34,40,-73}, -{34,40,-72}, -{34,40,-71}, -{34,40,-70}, -{34,40,-69}, -{34,40,-68}, -{34,40,-67}, -{34,40,-66}, -{34,40,-65}, -{34,40,-64}, -{34,40,-63}, -{34,40,-62}, -{34,40,-61}, -{34,40,-60}, -{34,40,-59}, -{34,40,-58}, -{34,40,-57}, -{34,40,-56}, -{34,40,-55}, -{34,40,-54}, -{34,40,-53}, -{34,40,-52}, -{34,40,-51}, -{34,40,-50}, -{34,40,-49}, -{34,40,-48}, -{34,40,-47}, -{34,40,-46}, -{34,40,-45}, -{34,40,-44}, -{34,40,-43}, -{34,40,-42}, -{34,40,-41}, -{34,40,-40}, -{34,40,-39}, -{34,40,-38}, -{34,40,-37}, -{34,40,-36}, -{34,40,-35}, -{34,40,-34}, -{34,40,-33}, -{34,40,-32}, -{34,40,-31}, -{34,40,-30}, -{34,40,-29}, -{34,40,-28}, -{34,40,-27}, -{34,40,-26}, -{34,40,-25}, -{34,40,-24}, -{34,40,-23}, -{34,40,-22}, -{34,40,-21}, -{34,40,-20}, -{34,40,-19}, -{34,40,-18}, -{34,40,-17}, -{34,40,-16}, -{34,40,-15}, -{34,40,-14}, -{34,40,-13}, -{34,40,-12}, -{34,40,-11}, -{34,40,-10}, -{34,40,-9}, -{34,40,-8}, -{34,40,-7}, -{34,40,-6}, -{34,40,-5}, -{34,40,-4}, -{34,40,-3}, -{34,40,-2}, -{34,40,-1}, -{34,40,0}, -{34,40,1}, -{34,40,2}, -{34,40,3}, -{34,40,4}, -{34,40,5}, -{34,40,6}, -{34,40,7}, -{34,40,8}, -{34,40,9}, -{34,40,10}, -{34,40,11}, -{34,40,12}, -{34,40,13}, -{34,40,14}, -{34,40,15}, -{34,40,16}, -{34,40,17}, -{34,40,18}, -{34,40,19}, -{34,40,20}, -{34,40,21}, -{34,40,22}, -{34,40,23}, -{34,40,24}, -{34,40,25}, -{34,40,26}, -{34,40,27}, -{34,40,28}, -{34,40,29}, -{34,40,30}, -{34,40,31}, -{34,40,32}, -{34,40,33}, -{34,40,34}, -{34,40,35}, -{34,40,36}, -{34,40,37}, -{34,40,38}, -{34,40,39}, -{34,40,40}, -{34,40,41}, -{34,40,42}, -{34,40,43}, -{34,40,44}, -{34,40,45}, -{34,40,46}, -{34,41,-76}, -{34,41,-75}, -{34,41,-74}, -{34,41,-73}, -{34,41,-72}, -{34,41,-71}, -{34,41,-70}, -{34,41,-69}, -{34,41,-68}, -{34,41,-67}, -{34,41,-66}, -{34,41,-65}, -{34,41,-64}, -{34,41,-63}, -{34,41,-62}, -{34,41,-61}, -{34,41,-60}, -{34,41,-59}, -{34,41,-58}, -{34,41,-57}, -{34,41,-56}, -{34,41,-55}, -{34,41,-54}, -{34,41,-53}, -{34,41,-52}, -{34,41,-51}, -{34,41,-50}, -{34,41,-49}, -{34,41,-48}, -{34,41,-47}, -{34,41,-46}, -{34,41,-45}, -{34,41,-44}, -{34,41,-43}, -{34,41,-42}, -{34,41,-41}, -{34,41,-40}, -{34,41,-39}, -{34,41,-38}, -{34,41,-37}, -{34,41,-36}, -{34,41,-35}, -{34,41,-34}, -{34,41,-33}, -{34,41,-32}, -{34,41,-31}, -{34,41,-30}, -{34,41,-29}, -{34,41,-28}, -{34,41,-27}, -{34,41,-26}, -{34,41,-25}, -{34,41,-24}, -{34,41,-23}, -{34,41,-22}, -{34,41,-21}, -{34,41,-20}, -{34,41,-19}, -{34,41,-18}, -{34,41,-17}, -{34,41,-16}, -{34,41,-15}, -{34,41,-14}, -{34,41,-13}, -{34,41,-12}, -{34,41,-11}, -{34,41,-10}, -{34,41,-9}, -{34,41,-8}, -{34,41,-7}, -{34,41,-6}, -{34,41,-5}, -{34,41,-4}, -{34,41,-3}, -{34,41,-2}, -{34,41,-1}, -{34,41,0}, -{34,41,1}, -{34,41,2}, -{34,41,3}, -{34,41,4}, -{34,41,5}, -{34,41,6}, -{34,41,7}, -{34,41,8}, -{34,41,9}, -{34,41,10}, -{34,41,11}, -{34,41,12}, -{34,41,13}, -{34,41,14}, -{34,41,15}, -{34,41,16}, -{34,41,17}, -{34,41,18}, -{34,41,19}, -{34,41,20}, -{34,41,21}, -{34,41,22}, -{34,41,23}, -{34,41,24}, -{34,41,25}, -{34,41,26}, -{34,41,27}, -{34,41,28}, -{34,41,29}, -{34,41,30}, -{34,41,31}, -{34,41,32}, -{34,41,33}, -{34,41,34}, -{34,41,35}, -{34,41,36}, -{34,41,37}, -{34,41,38}, -{34,41,39}, -{34,41,40}, -{34,41,41}, -{34,41,42}, -{34,41,43}, -{34,41,44}, -{34,41,45}, -{34,41,46}, -{34,42,-77}, -{34,42,-76}, -{34,42,-75}, -{34,42,-74}, -{34,42,-73}, -{34,42,-72}, -{34,42,-71}, -{34,42,-70}, -{34,42,-69}, -{34,42,-68}, -{34,42,-67}, -{34,42,-66}, -{34,42,-65}, -{34,42,-64}, -{34,42,-63}, -{34,42,-62}, -{34,42,-61}, -{34,42,-60}, -{34,42,-59}, -{34,42,-58}, -{34,42,-57}, -{34,42,-56}, -{34,42,-55}, -{34,42,-54}, -{34,42,-53}, -{34,42,-52}, -{34,42,-51}, -{34,42,-50}, -{34,42,-49}, -{34,42,-48}, -{34,42,-47}, -{34,42,-46}, -{34,42,-45}, -{34,42,-44}, -{34,42,-43}, -{34,42,-42}, -{34,42,-41}, -{34,42,-40}, -{34,42,-39}, -{34,42,-38}, -{34,42,-37}, -{34,42,-36}, -{34,42,-35}, -{34,42,-34}, -{34,42,-33}, -{34,42,-32}, -{34,42,-31}, -{34,42,-30}, -{34,42,-29}, -{34,42,-28}, -{34,42,-27}, -{34,42,-26}, -{34,42,-25}, -{34,42,-24}, -{34,42,-23}, -{34,42,-22}, -{34,42,-21}, -{34,42,-20}, -{34,42,-19}, -{34,42,-18}, -{34,42,-17}, -{34,42,-16}, -{34,42,-15}, -{34,42,-14}, -{34,42,-13}, -{34,42,-12}, -{34,42,-11}, -{34,42,-10}, -{34,42,-9}, -{34,42,-8}, -{34,42,-7}, -{34,42,-6}, -{34,42,-5}, -{34,42,-4}, -{34,42,-3}, -{34,42,-2}, -{34,42,-1}, -{34,42,0}, -{34,42,1}, -{34,42,2}, -{34,42,3}, -{34,42,4}, -{34,42,5}, -{34,42,6}, -{34,42,7}, -{34,42,8}, -{34,42,9}, -{34,42,10}, -{34,42,11}, -{34,42,12}, -{34,42,13}, -{34,42,14}, -{34,42,15}, -{34,42,16}, -{34,42,17}, -{34,42,18}, -{34,42,19}, -{34,42,20}, -{34,42,21}, -{34,42,22}, -{34,42,23}, -{34,42,24}, -{34,42,25}, -{34,42,26}, -{34,42,27}, -{34,42,28}, -{34,42,29}, -{34,42,30}, -{34,42,31}, -{34,42,32}, -{34,42,33}, -{34,42,34}, -{34,42,35}, -{34,42,36}, -{34,42,37}, -{34,42,38}, -{34,42,39}, -{34,42,40}, -{34,42,41}, -{34,42,42}, -{34,42,43}, -{34,42,44}, -{34,42,45}, -{34,42,46}, -{34,43,-78}, -{34,43,-77}, -{34,43,-76}, -{34,43,-75}, -{34,43,-74}, -{34,43,-73}, -{34,43,-72}, -{34,43,-71}, -{34,43,-70}, -{34,43,-69}, -{34,43,-68}, -{34,43,-67}, -{34,43,-66}, -{34,43,-65}, -{34,43,-64}, -{34,43,-63}, -{34,43,-62}, -{34,43,-61}, -{34,43,-60}, -{34,43,-59}, -{34,43,-58}, -{34,43,-57}, -{34,43,-56}, -{34,43,-55}, -{34,43,-54}, -{34,43,-53}, -{34,43,-52}, -{34,43,-51}, -{34,43,-50}, -{34,43,-49}, -{34,43,-48}, -{34,43,-47}, -{34,43,-46}, -{34,43,-45}, -{34,43,-44}, -{34,43,-43}, -{34,43,-42}, -{34,43,-41}, -{34,43,-40}, -{34,43,-39}, -{34,43,-38}, -{34,43,-37}, -{34,43,-36}, -{34,43,-35}, -{34,43,-34}, -{34,43,-33}, -{34,43,-32}, -{34,43,-31}, -{34,43,-30}, -{34,43,-29}, -{34,43,-28}, -{34,43,-27}, -{34,43,-26}, -{34,43,-25}, -{34,43,-24}, -{34,43,-23}, -{34,43,-22}, -{34,43,-21}, -{34,43,-20}, -{34,43,-19}, -{34,43,-18}, -{34,43,-17}, -{34,43,-16}, -{34,43,-15}, -{34,43,-14}, -{34,43,-13}, -{34,43,-12}, -{34,43,-11}, -{34,43,-10}, -{34,43,-9}, -{34,43,-8}, -{34,43,-7}, -{34,43,-6}, -{34,43,-5}, -{34,43,-4}, -{34,43,-3}, -{34,43,-2}, -{34,43,-1}, -{34,43,0}, -{34,43,1}, -{34,43,2}, -{34,43,3}, -{34,43,4}, -{34,43,5}, -{34,43,6}, -{34,43,7}, -{34,43,8}, -{34,43,9}, -{34,43,10}, -{34,43,11}, -{34,43,12}, -{34,43,13}, -{34,43,14}, -{34,43,15}, -{34,43,16}, -{34,43,17}, -{34,43,18}, -{34,43,19}, -{34,43,20}, -{34,43,21}, -{34,43,22}, -{34,43,23}, -{34,43,24}, -{34,43,25}, -{34,43,26}, -{34,43,27}, -{34,43,28}, -{34,43,29}, -{34,43,30}, -{34,43,31}, -{34,43,32}, -{34,43,33}, -{34,43,34}, -{34,43,35}, -{34,43,36}, -{34,43,37}, -{34,43,38}, -{34,43,39}, -{34,43,40}, -{34,43,41}, -{34,43,42}, -{34,43,43}, -{34,43,44}, -{34,43,45}, -{34,43,46}, -{34,44,-79}, -{34,44,-78}, -{34,44,-77}, -{34,44,-76}, -{34,44,-75}, -{34,44,-74}, -{34,44,-73}, -{34,44,-72}, -{34,44,-71}, -{34,44,-70}, -{34,44,-69}, -{34,44,-68}, -{34,44,-67}, -{34,44,-66}, -{34,44,-65}, -{34,44,-64}, -{34,44,-63}, -{34,44,-62}, -{34,44,-61}, -{34,44,-60}, -{34,44,-59}, -{34,44,-58}, -{34,44,-57}, -{34,44,-56}, -{34,44,-55}, -{34,44,-54}, -{34,44,-53}, -{34,44,-52}, -{34,44,-51}, -{34,44,-50}, -{34,44,-49}, -{34,44,-48}, -{34,44,-47}, -{34,44,-46}, -{34,44,-45}, -{34,44,-44}, -{34,44,-43}, -{34,44,-42}, -{34,44,-41}, -{34,44,-40}, -{34,44,-39}, -{34,44,-38}, -{34,44,-37}, -{34,44,-36}, -{34,44,-35}, -{34,44,-34}, -{34,44,-33}, -{34,44,-32}, -{34,44,-31}, -{34,44,-30}, -{34,44,-29}, -{34,44,-28}, -{34,44,-27}, -{34,44,-26}, -{34,44,-25}, -{34,44,-24}, -{34,44,-23}, -{34,44,-22}, -{34,44,-21}, -{34,44,-20}, -{34,44,-19}, -{34,44,-18}, -{34,44,-17}, -{34,44,-16}, -{34,44,-15}, -{34,44,-14}, -{34,44,-13}, -{34,44,-12}, -{34,44,-11}, -{34,44,-10}, -{34,44,-9}, -{34,44,-8}, -{34,44,-7}, -{34,44,-6}, -{34,44,-5}, -{34,44,-4}, -{34,44,-3}, -{34,44,-2}, -{34,44,-1}, -{34,44,0}, -{34,44,1}, -{34,44,2}, -{34,44,3}, -{34,44,4}, -{34,44,5}, -{34,44,6}, -{34,44,7}, -{34,44,8}, -{34,44,9}, -{34,44,10}, -{34,44,11}, -{34,44,12}, -{34,44,13}, -{34,44,14}, -{34,44,15}, -{34,44,16}, -{34,44,17}, -{34,44,18}, -{34,44,19}, -{34,44,20}, -{34,44,21}, -{34,44,22}, -{34,44,23}, -{34,44,24}, -{34,44,25}, -{34,44,26}, -{34,44,27}, -{34,44,28}, -{34,44,29}, -{34,44,30}, -{34,44,31}, -{34,44,32}, -{34,44,33}, -{34,44,34}, -{34,44,35}, -{34,44,36}, -{34,44,37}, -{34,44,38}, -{34,44,39}, -{34,44,40}, -{34,44,41}, -{34,44,42}, -{34,44,43}, -{34,44,44}, -{34,44,45}, -{34,44,46}, -{34,45,-80}, -{34,45,-79}, -{34,45,-78}, -{34,45,-77}, -{34,45,-76}, -{34,45,-75}, -{34,45,-74}, -{34,45,-73}, -{34,45,-72}, -{34,45,-71}, -{34,45,-70}, -{34,45,-69}, -{34,45,-68}, -{34,45,-67}, -{34,45,-66}, -{34,45,-65}, -{34,45,-64}, -{34,45,-63}, -{34,45,-62}, -{34,45,-61}, -{34,45,-60}, -{34,45,-59}, -{34,45,-58}, -{34,45,-57}, -{34,45,-56}, -{34,45,-55}, -{34,45,-54}, -{34,45,-53}, -{34,45,-52}, -{34,45,-51}, -{34,45,-50}, -{34,45,-49}, -{34,45,-48}, -{34,45,-47}, -{34,45,-46}, -{34,45,-45}, -{34,45,-44}, -{34,45,-43}, -{34,45,-42}, -{34,45,-41}, -{34,45,-40}, -{34,45,-39}, -{34,45,-38}, -{34,45,-37}, -{34,45,-36}, -{34,45,-35}, -{34,45,-34}, -{34,45,-33}, -{34,45,-32}, -{34,45,-31}, -{34,45,-30}, -{34,45,-29}, -{34,45,-28}, -{34,45,-27}, -{34,45,-26}, -{34,45,-25}, -{34,45,-24}, -{34,45,-23}, -{34,45,-22}, -{34,45,-21}, -{34,45,-20}, -{34,45,-19}, -{34,45,-18}, -{34,45,-17}, -{34,45,-16}, -{34,45,-15}, -{34,45,-14}, -{34,45,-13}, -{34,45,-12}, -{34,45,-11}, -{34,45,-10}, -{34,45,-9}, -{34,45,-8}, -{34,45,-7}, -{34,45,-6}, -{34,45,-5}, -{34,45,-4}, -{34,45,-3}, -{34,45,-2}, -{34,45,-1}, -{34,45,0}, -{34,45,1}, -{34,45,2}, -{34,45,3}, -{34,45,4}, -{34,45,5}, -{34,45,6}, -{34,45,7}, -{34,45,8}, -{34,45,9}, -{34,45,10}, -{34,45,11}, -{34,45,12}, -{34,45,13}, -{34,45,14}, -{34,45,15}, -{34,45,16}, -{34,45,17}, -{34,45,18}, -{34,45,19}, -{34,45,20}, -{34,45,21}, -{34,45,22}, -{34,45,23}, -{34,45,24}, -{34,45,25}, -{34,45,26}, -{34,45,27}, -{34,45,28}, -{34,45,29}, -{34,45,30}, -{34,45,31}, -{34,45,32}, -{34,45,33}, -{34,45,34}, -{34,45,35}, -{34,45,36}, -{34,45,37}, -{34,45,38}, -{34,45,39}, -{34,45,40}, -{34,45,41}, -{34,45,42}, -{34,45,43}, -{34,45,44}, -{34,45,45}, -{34,45,46}, -{34,46,-81}, -{34,46,-80}, -{34,46,-79}, -{34,46,-78}, -{34,46,-77}, -{34,46,-76}, -{34,46,-75}, -{34,46,-74}, -{34,46,-73}, -{34,46,-72}, -{34,46,-71}, -{34,46,-70}, -{34,46,-69}, -{34,46,-68}, -{34,46,-67}, -{34,46,-66}, -{34,46,-65}, -{34,46,-64}, -{34,46,-63}, -{34,46,-62}, -{34,46,-61}, -{34,46,-60}, -{34,46,-59}, -{34,46,-58}, -{34,46,-57}, -{34,46,-56}, -{34,46,-55}, -{34,46,-54}, -{34,46,-53}, -{34,46,-52}, -{34,46,-51}, -{34,46,-50}, -{34,46,-49}, -{34,46,-48}, -{34,46,-47}, -{34,46,-46}, -{34,46,-45}, -{34,46,-44}, -{34,46,-43}, -{34,46,-42}, -{34,46,-41}, -{34,46,-40}, -{34,46,-39}, -{34,46,-38}, -{34,46,-37}, -{34,46,-36}, -{34,46,-35}, -{34,46,-34}, -{34,46,-33}, -{34,46,-32}, -{34,46,-31}, -{34,46,-30}, -{34,46,-29}, -{34,46,-28}, -{34,46,-27}, -{34,46,-26}, -{34,46,-25}, -{34,46,-24}, -{34,46,-23}, -{34,46,-22}, -{34,46,-21}, -{34,46,-20}, -{34,46,-19}, -{34,46,-18}, -{34,46,-17}, -{34,46,-16}, -{34,46,-15}, -{34,46,-14}, -{34,46,-13}, -{34,46,-12}, -{34,46,-11}, -{34,46,-10}, -{34,46,-9}, -{34,46,-8}, -{34,46,-7}, -{34,46,-6}, -{34,46,-5}, -{34,46,-4}, -{34,46,-3}, -{34,46,-2}, -{34,46,-1}, -{34,46,0}, -{34,46,1}, -{34,46,2}, -{34,46,3}, -{34,46,4}, -{34,46,5}, -{34,46,6}, -{34,46,7}, -{34,46,8}, -{34,46,9}, -{34,46,10}, -{34,46,11}, -{34,46,12}, -{34,46,13}, -{34,46,14}, -{34,46,15}, -{34,46,16}, -{34,46,17}, -{34,46,18}, -{34,46,19}, -{34,46,20}, -{34,46,21}, -{34,46,22}, -{34,46,23}, -{34,46,24}, -{34,46,25}, -{34,46,26}, -{34,46,27}, -{34,46,28}, -{34,46,29}, -{34,46,30}, -{34,46,31}, -{34,46,32}, -{34,46,33}, -{34,46,34}, -{34,46,35}, -{34,46,36}, -{34,46,37}, -{34,46,38}, -{34,46,39}, -{34,46,40}, -{34,46,41}, -{34,46,42}, -{34,46,43}, -{34,46,44}, -{34,46,45}, -{34,46,46}, -{34,47,-82}, -{34,47,-81}, -{34,47,-80}, -{34,47,-79}, -{34,47,-78}, -{34,47,-77}, -{34,47,-76}, -{34,47,-75}, -{34,47,-74}, -{34,47,-73}, -{34,47,-72}, -{34,47,-71}, -{34,47,-70}, -{34,47,-69}, -{34,47,-68}, -{34,47,-67}, -{34,47,-66}, -{34,47,-65}, -{34,47,-64}, -{34,47,-63}, -{34,47,-62}, -{34,47,-61}, -{34,47,-60}, -{34,47,-59}, -{34,47,-58}, -{34,47,-57}, -{34,47,-56}, -{34,47,-55}, -{34,47,-54}, -{34,47,-53}, -{34,47,-52}, -{34,47,-51}, -{34,47,-50}, -{34,47,-49}, -{34,47,-48}, -{34,47,-47}, -{34,47,-46}, -{34,47,-45}, -{34,47,-44}, -{34,47,-43}, -{34,47,-42}, -{34,47,-41}, -{34,47,-40}, -{34,47,-39}, -{34,47,-38}, -{34,47,-37}, -{34,47,-36}, -{34,47,-35}, -{34,47,-34}, -{34,47,-33}, -{34,47,-32}, -{34,47,-31}, -{34,47,-30}, -{34,47,-29}, -{34,47,-28}, -{34,47,-27}, -{34,47,-26}, -{34,47,-25}, -{34,47,-24}, -{34,47,-23}, -{34,47,-22}, -{34,47,-21}, -{34,47,-20}, -{34,47,-19}, -{34,47,-18}, -{34,47,-17}, -{34,47,-16}, -{34,47,-15}, -{34,47,-14}, -{34,47,-13}, -{34,47,-12}, -{34,47,-11}, -{34,47,-10}, -{34,47,-9}, -{34,47,-8}, -{34,47,-7}, -{34,47,-6}, -{34,47,-5}, -{34,47,-4}, -{34,47,-3}, -{34,47,-2}, -{34,47,-1}, -{34,47,0}, -{34,47,1}, -{34,47,2}, -{34,47,3}, -{34,47,4}, -{34,47,5}, -{34,47,6}, -{34,47,7}, -{34,47,8}, -{34,47,9}, -{34,47,10}, -{34,47,11}, -{34,47,12}, -{34,47,13}, -{34,47,14}, -{34,47,15}, -{34,47,16}, -{34,47,17}, -{34,47,18}, -{34,47,19}, -{34,47,20}, -{34,47,21}, -{34,47,22}, -{34,47,23}, -{34,47,24}, -{34,47,25}, -{34,47,26}, -{34,47,27}, -{34,47,28}, -{34,47,29}, -{34,47,30}, -{34,47,31}, -{34,47,32}, -{34,47,33}, -{34,47,34}, -{34,47,35}, -{34,47,36}, -{34,47,37}, -{34,47,38}, -{34,47,39}, -{34,47,40}, -{34,47,41}, -{34,47,42}, -{34,47,43}, -{34,47,44}, -{34,47,45}, -{34,47,46}, -{34,47,47}, -{34,48,-83}, -{34,48,-82}, -{34,48,-81}, -{34,48,-80}, -{34,48,-79}, -{34,48,-78}, -{34,48,-77}, -{34,48,-76}, -{34,48,-75}, -{34,48,-74}, -{34,48,-73}, -{34,48,-72}, -{34,48,-71}, -{34,48,-70}, -{34,48,-69}, -{34,48,-68}, -{34,48,-67}, -{34,48,-66}, -{34,48,-65}, -{34,48,-64}, -{34,48,-63}, -{34,48,-62}, -{34,48,-61}, -{34,48,-60}, -{34,48,-59}, -{34,48,-58}, -{34,48,-57}, -{34,48,-56}, -{34,48,-55}, -{34,48,-54}, -{34,48,-53}, -{34,48,-52}, -{34,48,-51}, -{34,48,-50}, -{34,48,-49}, -{34,48,-48}, -{34,48,-47}, -{34,48,-46}, -{34,48,-45}, -{34,48,-44}, -{34,48,-43}, -{34,48,-42}, -{34,48,-41}, -{34,48,-40}, -{34,48,-39}, -{34,48,-38}, -{34,48,-37}, -{34,48,-36}, -{34,48,-35}, -{34,48,-34}, -{34,48,-33}, -{34,48,-32}, -{34,48,-31}, -{34,48,-30}, -{34,48,-29}, -{34,48,-28}, -{34,48,-27}, -{34,48,-26}, -{34,48,-25}, -{34,48,-24}, -{34,48,-23}, -{34,48,-22}, -{34,48,-21}, -{34,48,-20}, -{34,48,-19}, -{34,48,-18}, -{34,48,-17}, -{34,48,-16}, -{34,48,-15}, -{34,48,-14}, -{34,48,-13}, -{34,48,-12}, -{34,48,-11}, -{34,48,-10}, -{34,48,-9}, -{34,48,-8}, -{34,48,-7}, -{34,48,-6}, -{34,48,-5}, -{34,48,-4}, -{34,48,-3}, -{34,48,-2}, -{34,48,-1}, -{34,48,0}, -{34,48,1}, -{34,48,2}, -{34,48,3}, -{34,48,4}, -{34,48,5}, -{34,48,6}, -{34,48,7}, -{34,48,8}, -{34,48,9}, -{34,48,10}, -{34,48,11}, -{34,48,12}, -{34,48,13}, -{34,48,14}, -{34,48,15}, -{34,48,16}, -{34,48,17}, -{34,48,18}, -{34,48,19}, -{34,48,20}, -{34,48,21}, -{34,48,22}, -{34,48,23}, -{34,48,24}, -{34,48,25}, -{34,48,26}, -{34,48,27}, -{34,48,28}, -{34,48,29}, -{34,48,30}, -{34,48,31}, -{34,48,32}, -{34,48,33}, -{34,48,34}, -{34,48,35}, -{34,48,36}, -{34,48,37}, -{34,48,38}, -{34,48,39}, -{34,48,40}, -{34,48,41}, -{34,48,42}, -{34,48,43}, -{34,48,44}, -{34,48,45}, -{34,48,46}, -{34,48,47}, -{34,49,-83}, -{34,49,-82}, -{34,49,-81}, -{34,49,-80}, -{34,49,-79}, -{34,49,-78}, -{34,49,-77}, -{34,49,-76}, -{34,49,-75}, -{34,49,-74}, -{34,49,-73}, -{34,49,-72}, -{34,49,-71}, -{34,49,-70}, -{34,49,-69}, -{34,49,-68}, -{34,49,-67}, -{34,49,-66}, -{34,49,-65}, -{34,49,-64}, -{34,49,-63}, -{34,49,-62}, -{34,49,-61}, -{34,49,-60}, -{34,49,-59}, -{34,49,-58}, -{34,49,-57}, -{34,49,-56}, -{34,49,-55}, -{34,49,-54}, -{34,49,-53}, -{34,49,-52}, -{34,49,-51}, -{34,49,-50}, -{34,49,-49}, -{34,49,-48}, -{34,49,-47}, -{34,49,-46}, -{34,49,-45}, -{34,49,-44}, -{34,49,-43}, -{34,49,-42}, -{34,49,-41}, -{34,49,-40}, -{34,49,-39}, -{34,49,-38}, -{34,49,-37}, -{34,49,-36}, -{34,49,-35}, -{34,49,-34}, -{34,49,-33}, -{34,49,-32}, -{34,49,-31}, -{34,49,-30}, -{34,49,-29}, -{34,49,-28}, -{34,49,-27}, -{34,49,-26}, -{34,49,-25}, -{34,49,-24}, -{34,49,-23}, -{34,49,-22}, -{34,49,-21}, -{34,49,-20}, -{34,49,-19}, -{34,49,-18}, -{34,49,-17}, -{34,49,-16}, -{34,49,-15}, -{34,49,-14}, -{34,49,-13}, -{34,49,-12}, -{34,49,-11}, -{34,49,-10}, -{34,49,-9}, -{34,49,-8}, -{34,49,-7}, -{34,49,-6}, -{34,49,-5}, -{34,49,-4}, -{34,49,-3}, -{34,49,-2}, -{34,49,-1}, -{34,49,0}, -{34,49,1}, -{34,49,2}, -{34,49,3}, -{34,49,4}, -{34,49,5}, -{34,49,6}, -{34,49,7}, -{34,49,8}, -{34,49,9}, -{34,49,10}, -{34,49,11}, -{34,49,12}, -{34,49,13}, -{34,49,14}, -{34,49,15}, -{34,49,16}, -{34,49,17}, -{34,49,18}, -{34,49,19}, -{34,49,20}, -{34,49,21}, -{34,49,22}, -{34,49,23}, -{34,49,24}, -{34,49,25}, -{34,49,26}, -{34,49,27}, -{34,49,28}, -{34,49,29}, -{34,49,30}, -{34,49,31}, -{34,49,32}, -{34,49,33}, -{34,49,34}, -{34,49,35}, -{34,49,36}, -{34,49,37}, -{34,49,38}, -{34,49,39}, -{34,49,40}, -{34,49,41}, -{34,49,42}, -{34,49,43}, -{34,49,44}, -{34,49,45}, -{34,49,46}, -{34,49,47}, -{34,50,-84}, -{34,50,-83}, -{34,50,-82}, -{34,50,-81}, -{34,50,-80}, -{34,50,-79}, -{34,50,-78}, -{34,50,-77}, -{34,50,-76}, -{34,50,-75}, -{34,50,-74}, -{34,50,-73}, -{34,50,-72}, -{34,50,-71}, -{34,50,-70}, -{34,50,-69}, -{34,50,-68}, -{34,50,-67}, -{34,50,-66}, -{34,50,-65}, -{34,50,-64}, -{34,50,-63}, -{34,50,-62}, -{34,50,-61}, -{34,50,-60}, -{34,50,-59}, -{34,50,-58}, -{34,50,-57}, -{34,50,-56}, -{34,50,-55}, -{34,50,-54}, -{34,50,-53}, -{34,50,-52}, -{34,50,-51}, -{34,50,-50}, -{34,50,-49}, -{34,50,-48}, -{34,50,-47}, -{34,50,-46}, -{34,50,-45}, -{34,50,-44}, -{34,50,-43}, -{34,50,-42}, -{34,50,-41}, -{34,50,-40}, -{34,50,-39}, -{34,50,-38}, -{34,50,-37}, -{34,50,-36}, -{34,50,-35}, -{34,50,-34}, -{34,50,-33}, -{34,50,-32}, -{34,50,-31}, -{34,50,-30}, -{34,50,-29}, -{34,50,-28}, -{34,50,-27}, -{34,50,-26}, -{34,50,-25}, -{34,50,-24}, -{34,50,-23}, -{34,50,-22}, -{34,50,-21}, -{34,50,-20}, -{34,50,-19}, -{34,50,-18}, -{34,50,-17}, -{34,50,-16}, -{34,50,-15}, -{34,50,-14}, -{34,50,-13}, -{34,50,-12}, -{34,50,-11}, -{34,50,-10}, -{34,50,-9}, -{34,50,-8}, -{34,50,-7}, -{34,50,-6}, -{34,50,-5}, -{34,50,-4}, -{34,50,-3}, -{34,50,-2}, -{34,50,-1}, -{34,50,0}, -{34,50,1}, -{34,50,2}, -{34,50,3}, -{34,50,4}, -{34,50,5}, -{34,50,6}, -{34,50,7}, -{34,50,8}, -{34,50,9}, -{34,50,10}, -{34,50,11}, -{34,50,12}, -{34,50,13}, -{34,50,14}, -{34,50,15}, -{34,50,16}, -{34,50,17}, -{34,50,18}, -{34,50,19}, -{34,50,20}, -{34,50,21}, -{34,50,22}, -{34,50,23}, -{34,50,24}, -{34,50,25}, -{34,50,26}, -{34,50,27}, -{34,50,28}, -{34,50,29}, -{34,50,30}, -{34,50,31}, -{34,50,32}, -{34,50,33}, -{34,50,34}, -{34,50,35}, -{34,50,36}, -{34,50,37}, -{34,50,38}, -{34,50,39}, -{34,50,40}, -{34,50,41}, -{34,50,42}, -{34,50,43}, -{34,50,44}, -{34,50,45}, -{34,50,46}, -{34,50,47}, -{34,51,-85}, -{34,51,-84}, -{34,51,-83}, -{34,51,-82}, -{34,51,-81}, -{34,51,-80}, -{34,51,-79}, -{34,51,-78}, -{34,51,-77}, -{34,51,-76}, -{34,51,-75}, -{34,51,-74}, -{34,51,-73}, -{34,51,-72}, -{34,51,-71}, -{34,51,-70}, -{34,51,-69}, -{34,51,-68}, -{34,51,-67}, -{34,51,-66}, -{34,51,-65}, -{34,51,-64}, -{34,51,-63}, -{34,51,-62}, -{34,51,-61}, -{34,51,-60}, -{34,51,-59}, -{34,51,-58}, -{34,51,-57}, -{34,51,-56}, -{34,51,-55}, -{34,51,-54}, -{34,51,-53}, -{34,51,-52}, -{34,51,-51}, -{34,51,-50}, -{34,51,-49}, -{34,51,-48}, -{34,51,-47}, -{34,51,-46}, -{34,51,-45}, -{34,51,-44}, -{34,51,-43}, -{34,51,-42}, -{34,51,-41}, -{34,51,-40}, -{34,51,-39}, -{34,51,-38}, -{34,51,-37}, -{34,51,-36}, -{34,51,-35}, -{34,51,-34}, -{34,51,-33}, -{34,51,-32}, -{34,51,-31}, -{34,51,-30}, -{34,51,-29}, -{34,51,-28}, -{34,51,-27}, -{34,51,-26}, -{34,51,-25}, -{34,51,-24}, -{34,51,-23}, -{34,51,-22}, -{34,51,-21}, -{34,51,-20}, -{34,51,-19}, -{34,51,-18}, -{34,51,-17}, -{34,51,-16}, -{34,51,-15}, -{34,51,-14}, -{34,51,-13}, -{34,51,-12}, -{34,51,-11}, -{34,51,-10}, -{34,51,-9}, -{34,51,-8}, -{34,51,-7}, -{34,51,-6}, -{34,51,-5}, -{34,51,-4}, -{34,51,-3}, -{34,51,-2}, -{34,51,-1}, -{34,51,0}, -{34,51,1}, -{34,51,2}, -{34,51,3}, -{34,51,4}, -{34,51,5}, -{34,51,6}, -{34,51,7}, -{34,51,8}, -{34,51,9}, -{34,51,10}, -{34,51,11}, -{34,51,12}, -{34,51,13}, -{34,51,14}, -{34,51,15}, -{34,51,16}, -{34,51,17}, -{34,51,18}, -{34,51,19}, -{34,51,20}, -{34,51,21}, -{34,51,22}, -{34,51,23}, -{34,51,24}, -{34,51,25}, -{34,51,26}, -{34,51,27}, -{34,51,28}, -{34,51,29}, -{34,51,30}, -{34,51,31}, -{34,51,32}, -{34,51,33}, -{34,51,34}, -{34,51,35}, -{34,51,36}, -{34,51,37}, -{34,51,38}, -{34,51,39}, -{34,51,40}, -{34,51,41}, -{34,51,42}, -{34,51,43}, -{34,51,44}, -{34,51,45}, -{34,51,46}, -{34,51,47}, -{34,52,-86}, -{34,52,-85}, -{34,52,-84}, -{34,52,-83}, -{34,52,-82}, -{34,52,-81}, -{34,52,-80}, -{34,52,-79}, -{34,52,-78}, -{34,52,-77}, -{34,52,-76}, -{34,52,-75}, -{34,52,-74}, -{34,52,-73}, -{34,52,-72}, -{34,52,-71}, -{34,52,-70}, -{34,52,-69}, -{34,52,-68}, -{34,52,-67}, -{34,52,-66}, -{34,52,-65}, -{34,52,-64}, -{34,52,-63}, -{34,52,-62}, -{34,52,-61}, -{34,52,-60}, -{34,52,-59}, -{34,52,-58}, -{34,52,-57}, -{34,52,-56}, -{34,52,-55}, -{34,52,-54}, -{34,52,-53}, -{34,52,-52}, -{34,52,-51}, -{34,52,-50}, -{34,52,-49}, -{34,52,-48}, -{34,52,-47}, -{34,52,-46}, -{34,52,-45}, -{34,52,-44}, -{34,52,-43}, -{34,52,-42}, -{34,52,-41}, -{34,52,-40}, -{34,52,-39}, -{34,52,-38}, -{34,52,-37}, -{34,52,-36}, -{34,52,-35}, -{34,52,-34}, -{34,52,-33}, -{34,52,-32}, -{34,52,-31}, -{34,52,-30}, -{34,52,-29}, -{34,52,-28}, -{34,52,-27}, -{34,52,-26}, -{34,52,-25}, -{34,52,-24}, -{34,52,-23}, -{34,52,-22}, -{34,52,-21}, -{34,52,-20}, -{34,52,-19}, -{34,52,-18}, -{34,52,-17}, -{34,52,-16}, -{34,52,-15}, -{34,52,-14}, -{34,52,-13}, -{34,52,-12}, -{34,52,-11}, -{34,52,-10}, -{34,52,-9}, -{34,52,-8}, -{34,52,-7}, -{34,52,-6}, -{34,52,-5}, -{34,52,-4}, -{34,52,-3}, -{34,52,-2}, -{34,52,-1}, -{34,52,0}, -{34,52,1}, -{34,52,2}, -{34,52,3}, -{34,52,4}, -{34,52,5}, -{34,52,6}, -{34,52,7}, -{34,52,8}, -{34,52,9}, -{34,52,10}, -{34,52,11}, -{34,52,12}, -{34,52,13}, -{34,52,14}, -{34,52,15}, -{34,52,16}, -{34,52,17}, -{34,52,18}, -{34,52,19}, -{34,52,20}, -{34,52,21}, -{34,52,22}, -{34,52,23}, -{34,52,24}, -{34,52,25}, -{34,52,26}, -{34,52,27}, -{34,52,28}, -{34,52,29}, -{34,52,30}, -{34,52,31}, -{34,52,32}, -{34,52,33}, -{34,52,34}, -{34,52,35}, -{34,52,36}, -{34,52,37}, -{34,52,38}, -{34,52,39}, -{34,52,40}, -{34,52,41}, -{34,52,42}, -{34,52,43}, -{34,52,44}, -{34,52,45}, -{34,52,46}, -{34,52,47}, -{34,53,-87}, -{34,53,-86}, -{34,53,-85}, -{34,53,-84}, -{34,53,-83}, -{34,53,-82}, -{34,53,-81}, -{34,53,-80}, -{34,53,-79}, -{34,53,-78}, -{34,53,-77}, -{34,53,-76}, -{34,53,-75}, -{34,53,-74}, -{34,53,-73}, -{34,53,-72}, -{34,53,-71}, -{34,53,-70}, -{34,53,-69}, -{34,53,-68}, -{34,53,-67}, -{34,53,-66}, -{34,53,-65}, -{34,53,-64}, -{34,53,-63}, -{34,53,-62}, -{34,53,-61}, -{34,53,-60}, -{34,53,-59}, -{34,53,-58}, -{34,53,-57}, -{34,53,-56}, -{34,53,-55}, -{34,53,-54}, -{34,53,-53}, -{34,53,-52}, -{34,53,-51}, -{34,53,-50}, -{34,53,-49}, -{34,53,-48}, -{34,53,-47}, -{34,53,-46}, -{34,53,-45}, -{34,53,-44}, -{34,53,-43}, -{34,53,-42}, -{34,53,-41}, -{34,53,-40}, -{34,53,-39}, -{34,53,-38}, -{34,53,-37}, -{34,53,-36}, -{34,53,-35}, -{34,53,-34}, -{34,53,-33}, -{34,53,-32}, -{34,53,-31}, -{34,53,-30}, -{34,53,-29}, -{34,53,-28}, -{34,53,-27}, -{34,53,-26}, -{34,53,-25}, -{34,53,-24}, -{34,53,-23}, -{34,53,-22}, -{34,53,-21}, -{34,53,-20}, -{34,53,-19}, -{34,53,-18}, -{34,53,-17}, -{34,53,-16}, -{34,53,-15}, -{34,53,-14}, -{34,53,-13}, -{34,53,-12}, -{34,53,-11}, -{34,53,-10}, -{34,53,-9}, -{34,53,-8}, -{34,53,-7}, -{34,53,-6}, -{34,53,-5}, -{34,53,-4}, -{34,53,-3}, -{34,53,-2}, -{34,53,-1}, -{34,53,0}, -{34,53,1}, -{34,53,2}, -{34,53,3}, -{34,53,4}, -{34,53,5}, -{34,53,6}, -{34,53,7}, -{34,53,8}, -{34,53,9}, -{34,53,10}, -{34,53,11}, -{34,53,12}, -{34,53,13}, -{34,53,14}, -{34,53,15}, -{34,53,16}, -{34,53,17}, -{34,53,18}, -{34,53,19}, -{34,53,20}, -{34,53,21}, -{34,53,22}, -{34,53,23}, -{34,53,24}, -{34,53,25}, -{34,53,26}, -{34,53,27}, -{34,53,28}, -{34,53,29}, -{34,53,30}, -{34,53,31}, -{34,53,32}, -{34,53,33}, -{34,53,34}, -{34,53,35}, -{34,53,36}, -{34,53,37}, -{34,53,38}, -{34,53,39}, -{34,53,40}, -{34,53,41}, -{34,53,42}, -{34,53,43}, -{34,53,44}, -{34,53,45}, -{34,53,46}, -{34,53,47}, -{34,54,-88}, -{34,54,-87}, -{34,54,-86}, -{34,54,-85}, -{34,54,-84}, -{34,54,-83}, -{34,54,-82}, -{34,54,-81}, -{34,54,-80}, -{34,54,-79}, -{34,54,-78}, -{34,54,-77}, -{34,54,-76}, -{34,54,-75}, -{34,54,-74}, -{34,54,-73}, -{34,54,-72}, -{34,54,-71}, -{34,54,-70}, -{34,54,-69}, -{34,54,-68}, -{34,54,-67}, -{34,54,-66}, -{34,54,-65}, -{34,54,-64}, -{34,54,-63}, -{34,54,-62}, -{34,54,-61}, -{34,54,-60}, -{34,54,-59}, -{34,54,-58}, -{34,54,-57}, -{34,54,-56}, -{34,54,-55}, -{34,54,-54}, -{34,54,-53}, -{34,54,-52}, -{34,54,-51}, -{34,54,-50}, -{34,54,-49}, -{34,54,-48}, -{34,54,-47}, -{34,54,-46}, -{34,54,-45}, -{34,54,-44}, -{34,54,-43}, -{34,54,-42}, -{34,54,-41}, -{34,54,-40}, -{34,54,-39}, -{34,54,-38}, -{34,54,-37}, -{34,54,-36}, -{34,54,-35}, -{34,54,-34}, -{34,54,-33}, -{34,54,-32}, -{34,54,-31}, -{34,54,-30}, -{34,54,-29}, -{34,54,-28}, -{34,54,-27}, -{34,54,-26}, -{34,54,-25}, -{34,54,-24}, -{34,54,-23}, -{34,54,-22}, -{34,54,-21}, -{34,54,-20}, -{34,54,-19}, -{34,54,-18}, -{34,54,-17}, -{34,54,-16}, -{34,54,-15}, -{34,54,-14}, -{34,54,-13}, -{34,54,-12}, -{34,54,-11}, -{34,54,-10}, -{34,54,-9}, -{34,54,-8}, -{34,54,-7}, -{34,54,-6}, -{34,54,-5}, -{34,54,-4}, -{34,54,-3}, -{34,54,-2}, -{34,54,-1}, -{34,54,0}, -{34,54,1}, -{34,54,2}, -{34,54,3}, -{34,54,4}, -{34,54,5}, -{34,54,6}, -{34,54,7}, -{34,54,8}, -{34,54,9}, -{34,54,10}, -{34,54,11}, -{34,54,12}, -{34,54,13}, -{34,54,14}, -{34,54,15}, -{34,54,16}, -{34,54,17}, -{34,54,18}, -{34,54,19}, -{34,54,20}, -{34,54,21}, -{34,54,22}, -{34,54,23}, -{34,54,24}, -{34,54,25}, -{34,54,26}, -{34,54,27}, -{34,54,28}, -{34,54,29}, -{34,54,30}, -{34,54,31}, -{34,54,32}, -{34,54,33}, -{34,54,34}, -{34,54,35}, -{34,54,36}, -{34,54,37}, -{34,54,38}, -{34,54,39}, -{34,54,40}, -{34,54,41}, -{34,54,42}, -{34,54,43}, -{34,54,44}, -{34,54,45}, -{34,54,46}, -{34,54,47}, -{34,55,-89}, -{34,55,-88}, -{34,55,-87}, -{34,55,-86}, -{34,55,-85}, -{34,55,-84}, -{34,55,-83}, -{34,55,-82}, -{34,55,-81}, -{34,55,-80}, -{34,55,-79}, -{34,55,-78}, -{34,55,-77}, -{34,55,-76}, -{34,55,-75}, -{34,55,-74}, -{34,55,-73}, -{34,55,-72}, -{34,55,-71}, -{34,55,-70}, -{34,55,-69}, -{34,55,-68}, -{34,55,-67}, -{34,55,-66}, -{34,55,-65}, -{34,55,-64}, -{34,55,-63}, -{34,55,-62}, -{34,55,-61}, -{34,55,-60}, -{34,55,-59}, -{34,55,-58}, -{34,55,-57}, -{34,55,-56}, -{34,55,-55}, -{34,55,-54}, -{34,55,-53}, -{34,55,-52}, -{34,55,-51}, -{34,55,-50}, -{34,55,-49}, -{34,55,-48}, -{34,55,-47}, -{34,55,-46}, -{34,55,-45}, -{34,55,-44}, -{34,55,-43}, -{34,55,-42}, -{34,55,-41}, -{34,55,-40}, -{34,55,-39}, -{34,55,-38}, -{34,55,-37}, -{34,55,-36}, -{34,55,-35}, -{34,55,-34}, -{34,55,-33}, -{34,55,-32}, -{34,55,-31}, -{34,55,-30}, -{34,55,-29}, -{34,55,-28}, -{34,55,-27}, -{34,55,-26}, -{34,55,-25}, -{34,55,-24}, -{34,55,-23}, -{34,55,-22}, -{34,55,-21}, -{34,55,-20}, -{34,55,-19}, -{34,55,-18}, -{34,55,-17}, -{34,55,-16}, -{34,55,-15}, -{34,55,-14}, -{34,55,-13}, -{34,55,-12}, -{34,55,-11}, -{34,55,-10}, -{34,55,-9}, -{34,55,-8}, -{34,55,-7}, -{34,55,-6}, -{34,55,-5}, -{34,55,-4}, -{34,55,-3}, -{34,55,-2}, -{34,55,-1}, -{34,55,0}, -{34,55,1}, -{34,55,2}, -{34,55,3}, -{34,55,4}, -{34,55,5}, -{34,55,6}, -{34,55,7}, -{34,55,8}, -{34,55,9}, -{34,55,10}, -{34,55,11}, -{34,55,12}, -{34,55,13}, -{34,55,14}, -{34,55,15}, -{34,55,16}, -{34,55,17}, -{34,55,18}, -{34,55,19}, -{34,55,20}, -{34,55,21}, -{34,55,22}, -{34,55,23}, -{34,55,24}, -{34,55,25}, -{34,55,26}, -{34,55,27}, -{34,55,28}, -{34,55,29}, -{34,55,30}, -{34,55,31}, -{34,55,32}, -{34,55,33}, -{34,55,34}, -{34,55,35}, -{34,55,36}, -{34,55,37}, -{34,55,38}, -{34,55,39}, -{34,55,40}, -{34,55,41}, -{34,55,42}, -{34,55,43}, -{34,55,44}, -{34,55,45}, -{34,55,46}, -{34,55,47}, -{34,55,48}, -{34,56,-89}, -{34,56,-88}, -{34,56,-87}, -{34,56,-86}, -{34,56,-85}, -{34,56,-84}, -{34,56,-83}, -{34,56,-82}, -{34,56,-81}, -{34,56,-80}, -{34,56,-79}, -{34,56,-78}, -{34,56,-77}, -{34,56,-76}, -{34,56,-75}, -{34,56,-74}, -{34,56,-73}, -{34,56,-72}, -{34,56,-71}, -{34,56,-70}, -{34,56,-69}, -{34,56,-68}, -{34,56,-67}, -{34,56,-66}, -{34,56,-65}, -{34,56,-64}, -{34,56,-63}, -{34,56,-62}, -{34,56,-61}, -{34,56,-60}, -{34,56,-59}, -{34,56,-58}, -{34,56,-57}, -{34,56,-56}, -{34,56,-55}, -{34,56,-54}, -{34,56,-53}, -{34,56,-52}, -{34,56,-51}, -{34,56,-50}, -{34,56,-49}, -{34,56,-48}, -{34,56,-47}, -{34,56,-46}, -{34,56,-45}, -{34,56,-44}, -{34,56,-43}, -{34,56,-42}, -{34,56,-41}, -{34,56,-40}, -{34,56,-39}, -{34,56,-38}, -{34,56,-37}, -{34,56,-36}, -{34,56,-35}, -{34,56,-34}, -{34,56,-33}, -{34,56,-32}, -{34,56,-31}, -{34,56,-30}, -{34,56,-29}, -{34,56,-28}, -{34,56,-27}, -{34,56,-26}, -{34,56,-25}, -{34,56,-24}, -{34,56,-23}, -{34,56,-22}, -{34,56,-21}, -{34,56,-20}, -{34,56,-19}, -{34,56,-18}, -{34,56,-17}, -{34,56,-16}, -{34,56,-15}, -{34,56,-14}, -{34,56,-13}, -{34,56,-12}, -{34,56,-11}, -{34,56,-10}, -{34,56,-9}, -{34,56,-8}, -{34,56,-7}, -{34,56,-6}, -{34,56,-5}, -{34,56,-4}, -{34,56,-3}, -{34,56,-2}, -{34,56,-1}, -{34,56,0}, -{34,56,1}, -{34,56,2}, -{34,56,3}, -{34,56,4}, -{34,56,5}, -{34,56,6}, -{34,56,7}, -{34,56,8}, -{34,56,9}, -{34,56,10}, -{34,56,11}, -{34,56,12}, -{34,56,13}, -{34,56,14}, -{34,56,15}, -{34,56,16}, -{34,56,17}, -{34,56,18}, -{34,56,19}, -{34,56,20}, -{34,56,21}, -{34,56,22}, -{34,56,23}, -{34,56,24}, -{34,56,25}, -{34,56,26}, -{34,56,27}, -{34,56,28}, -{34,56,29}, -{34,56,30}, -{34,56,31}, -{34,56,32}, -{34,56,33}, -{34,56,34}, -{34,56,35}, -{34,56,36}, -{34,56,37}, -{34,56,38}, -{34,56,39}, -{34,56,40}, -{34,56,41}, -{34,56,42}, -{34,56,43}, -{34,56,44}, -{34,56,45}, -{34,56,46}, -{34,56,47}, -{34,56,48}, -{34,57,-90}, -{34,57,-89}, -{34,57,-88}, -{34,57,-87}, -{34,57,-86}, -{34,57,-85}, -{34,57,-84}, -{34,57,-83}, -{34,57,-82}, -{34,57,-81}, -{34,57,-80}, -{34,57,-79}, -{34,57,-78}, -{34,57,-77}, -{34,57,-76}, -{34,57,-75}, -{34,57,-74}, -{34,57,-73}, -{34,57,-72}, -{34,57,-71}, -{34,57,-70}, -{34,57,-69}, -{34,57,-68}, -{34,57,-67}, -{34,57,-66}, -{34,57,-65}, -{34,57,-64}, -{34,57,-63}, -{34,57,-62}, -{34,57,-61}, -{34,57,-60}, -{34,57,-59}, -{34,57,-58}, -{34,57,-57}, -{34,57,-56}, -{34,57,-55}, -{34,57,-54}, -{34,57,-53}, -{34,57,-52}, -{34,57,-51}, -{34,57,-50}, -{34,57,-49}, -{34,57,-48}, -{34,57,-47}, -{34,57,-46}, -{34,57,-45}, -{34,57,-44}, -{34,57,-43}, -{34,57,-42}, -{34,57,-41}, -{34,57,-40}, -{34,57,-39}, -{34,57,-38}, -{34,57,-37}, -{34,57,-36}, -{34,57,-35}, -{34,57,-34}, -{34,57,-33}, -{34,57,-32}, -{34,57,-31}, -{34,57,-30}, -{34,57,-29}, -{34,57,-28}, -{34,57,-27}, -{34,57,-26}, -{34,57,-25}, -{34,57,-24}, -{34,57,-23}, -{34,57,-22}, -{34,57,-21}, -{34,57,-20}, -{34,57,-19}, -{34,57,-18}, -{34,57,-17}, -{34,57,-16}, -{34,57,-15}, -{34,57,-14}, -{34,57,-13}, -{34,57,-12}, -{34,57,-11}, -{34,57,-10}, -{34,57,-9}, -{34,57,-8}, -{34,57,-7}, -{34,57,-6}, -{34,57,-5}, -{34,57,-4}, -{34,57,-3}, -{34,57,-2}, -{34,57,-1}, -{34,57,0}, -{34,57,1}, -{34,57,2}, -{34,57,3}, -{34,57,4}, -{34,57,5}, -{34,57,6}, -{34,57,7}, -{34,57,8}, -{34,57,9}, -{34,57,10}, -{34,57,11}, -{34,57,12}, -{34,57,13}, -{34,57,14}, -{34,57,15}, -{34,57,16}, -{34,57,17}, -{34,57,18}, -{34,57,19}, -{34,57,20}, -{34,57,21}, -{34,57,22}, -{34,57,23}, -{34,57,24}, -{34,57,25}, -{34,57,26}, -{34,57,27}, -{34,57,28}, -{34,57,29}, -{34,57,30}, -{34,57,31}, -{34,57,32}, -{34,57,33}, -{34,57,34}, -{34,57,35}, -{34,57,36}, -{34,57,37}, -{34,57,38}, -{34,57,39}, -{34,57,40}, -{34,57,41}, -{34,57,42}, -{34,57,43}, -{34,57,44}, -{34,57,45}, -{34,57,46}, -{34,57,47}, -{34,57,48}, -{34,58,-91}, -{34,58,-90}, -{34,58,-89}, -{34,58,-88}, -{34,58,-87}, -{34,58,-86}, -{34,58,-85}, -{34,58,-84}, -{34,58,-83}, -{34,58,-82}, -{34,58,-81}, -{34,58,-80}, -{34,58,-79}, -{34,58,-78}, -{34,58,-77}, -{34,58,-76}, -{34,58,-75}, -{34,58,-74}, -{34,58,-73}, -{34,58,-72}, -{34,58,-71}, -{34,58,-70}, -{34,58,-69}, -{34,58,-68}, -{34,58,-67}, -{34,58,-66}, -{34,58,-65}, -{34,58,-64}, -{34,58,-63}, -{34,58,-62}, -{34,58,-61}, -{34,58,-60}, -{34,58,-59}, -{34,58,-58}, -{34,58,-57}, -{34,58,-56}, -{34,58,-55}, -{34,58,-54}, -{34,58,-53}, -{34,58,-52}, -{34,58,-51}, -{34,58,-50}, -{34,58,-49}, -{34,58,-48}, -{34,58,-47}, -{34,58,-46}, -{34,58,-45}, -{34,58,-44}, -{34,58,-43}, -{34,58,-42}, -{34,58,-41}, -{34,58,-40}, -{34,58,-39}, -{34,58,-38}, -{34,58,-37}, -{34,58,-36}, -{34,58,-35}, -{34,58,-34}, -{34,58,-33}, -{34,58,-32}, -{34,58,-31}, -{34,58,-30}, -{34,58,-29}, -{34,58,-28}, -{34,58,-27}, -{34,58,-26}, -{34,58,-25}, -{34,58,-24}, -{34,58,-23}, -{34,58,-22}, -{34,58,-21}, -{34,58,-20}, -{34,58,-19}, -{34,58,-18}, -{34,58,-17}, -{34,58,-16}, -{34,58,-15}, -{34,58,-14}, -{34,58,-13}, -{34,58,-12}, -{34,58,-11}, -{34,58,-10}, -{34,58,-9}, -{34,58,-8}, -{34,58,-7}, -{34,58,-6}, -{34,58,-5}, -{34,58,-4}, -{34,58,-3}, -{34,58,-2}, -{34,58,-1}, -{34,58,0}, -{34,58,1}, -{34,58,2}, -{34,58,3}, -{34,58,4}, -{34,58,5}, -{34,58,6}, -{34,58,7}, -{34,58,8}, -{34,58,9}, -{34,58,10}, -{34,58,11}, -{34,58,12}, -{34,58,13}, -{34,58,14}, -{34,58,15}, -{34,58,16}, -{34,58,17}, -{34,58,18}, -{34,58,19}, -{34,58,20}, -{34,58,21}, -{34,58,22}, -{34,58,23}, -{34,58,24}, -{34,58,25}, -{34,58,26}, -{34,58,27}, -{34,58,28}, -{34,58,29}, -{34,58,30}, -{34,58,31}, -{34,58,32}, -{34,58,33}, -{34,58,34}, -{34,58,35}, -{34,58,36}, -{34,58,37}, -{34,58,38}, -{34,58,39}, -{34,58,40}, -{34,58,41}, -{34,58,42}, -{34,58,43}, -{34,58,44}, -{34,58,45}, -{34,58,46}, -{34,58,47}, -{34,58,48}, -{34,59,-92}, -{34,59,-91}, -{34,59,-90}, -{34,59,-89}, -{34,59,-88}, -{34,59,-87}, -{34,59,-86}, -{34,59,-85}, -{34,59,-84}, -{34,59,-83}, -{34,59,-82}, -{34,59,-81}, -{34,59,-80}, -{34,59,-79}, -{34,59,-78}, -{34,59,-77}, -{34,59,-76}, -{34,59,-75}, -{34,59,-74}, -{34,59,-73}, -{34,59,-72}, -{34,59,-71}, -{34,59,-70}, -{34,59,-69}, -{34,59,-68}, -{34,59,-67}, -{34,59,-66}, -{34,59,-65}, -{34,59,-64}, -{34,59,-63}, -{34,59,-62}, -{34,59,-61}, -{34,59,-60}, -{34,59,-59}, -{34,59,-58}, -{34,59,-57}, -{34,59,-56}, -{34,59,-55}, -{34,59,-54}, -{34,59,-53}, -{34,59,-52}, -{34,59,-51}, -{34,59,-50}, -{34,59,-49}, -{34,59,-48}, -{34,59,-47}, -{34,59,-46}, -{34,59,-45}, -{34,59,-44}, -{34,59,-43}, -{34,59,-42}, -{34,59,-41}, -{34,59,-40}, -{34,59,-39}, -{34,59,-38}, -{34,59,-37}, -{34,59,-36}, -{34,59,-35}, -{34,59,-34}, -{34,59,-33}, -{34,59,-32}, -{34,59,-31}, -{34,59,-30}, -{34,59,-29}, -{34,59,-28}, -{34,59,-27}, -{34,59,-26}, -{34,59,-25}, -{34,59,-24}, -{34,59,-23}, -{34,59,-22}, -{34,59,-21}, -{34,59,-20}, -{34,59,-19}, -{34,59,-18}, -{34,59,-17}, -{34,59,-16}, -{34,59,-15}, -{34,59,-14}, -{34,59,-13}, -{34,59,-12}, -{34,59,-11}, -{34,59,-10}, -{34,59,-9}, -{34,59,-8}, -{34,59,-7}, -{34,59,-6}, -{34,59,-5}, -{34,59,-4}, -{34,59,-3}, -{34,59,-2}, -{34,59,-1}, -{34,59,0}, -{34,59,1}, -{34,59,2}, -{34,59,3}, -{34,59,4}, -{34,59,5}, -{34,59,6}, -{34,59,7}, -{34,59,8}, -{34,59,9}, -{34,59,10}, -{34,59,11}, -{34,59,12}, -{34,59,13}, -{34,59,14}, -{34,59,15}, -{34,59,16}, -{34,60,-93}, -{34,60,-92}, -{34,60,-91}, -{34,60,-90}, -{34,60,-89}, -{34,60,-88}, -{34,60,-87}, -{34,60,-86}, -{34,60,-85}, -{34,60,-84}, -{34,60,-83}, -{34,60,-82}, -{34,60,-81}, -{34,60,-80}, -{34,60,-79}, -{34,60,-78}, -{34,60,-77}, -{34,60,-76}, -{34,60,-75}, -{34,60,-74}, -{34,60,-73}, -{34,60,-72}, -{34,60,-71}, -{34,60,-70}, -{34,60,-69}, -{34,60,-68}, -{34,60,-67}, -{34,60,-66}, -{34,60,-65}, -{34,60,-64}, -{34,60,-63}, -{34,60,-62}, -{34,60,-61}, -{34,60,-60}, -{34,60,-59}, -{34,60,-58}, -{34,60,-57}, -{34,60,-56}, -{34,60,-55}, -{34,60,-54}, -{34,60,-53}, -{34,60,-52}, -{34,60,-51}, -{34,60,-50}, -{34,60,-49}, -{34,60,-48}, -{34,60,-47}, -{34,60,-46}, -{34,60,-45}, -{34,60,-44}, -{34,60,-43}, -{34,60,-42}, -{34,60,-41}, -{34,60,-40}, -{34,60,-39}, -{34,60,-38}, -{34,60,-37}, -{34,60,-36}, -{34,60,-35}, -{34,60,-34}, -{34,60,-33}, -{34,60,-32}, -{34,60,-31}, -{34,60,-30}, -{34,60,-29}, -{34,60,-28}, -{34,60,-27}, -{34,60,-26}, -{34,60,-25}, -{34,60,-24}, -{34,60,-23}, -{34,60,-22}, -{34,60,-21}, -{34,60,-20}, -{34,60,-19}, -{34,60,-18}, -{34,60,-17}, -{34,60,-16}, -{34,60,-15}, -{34,60,-14}, -{34,60,-13}, -{34,60,-12}, -{34,60,-11}, -{34,60,-10}, -{34,60,-9}, -{34,60,-8}, -{34,60,-7}, -{34,60,-6}, -{34,60,-5}, -{34,60,-4}, -{34,60,-3}, -{34,60,-2}, -{34,60,-1}, -{34,61,-94}, -{34,61,-93}, -{34,61,-92}, -{34,61,-91}, -{34,61,-90}, -{34,61,-89}, -{34,61,-88}, -{34,61,-87}, -{34,61,-86}, -{34,61,-85}, -{34,61,-84}, -{34,61,-83}, -{34,61,-82}, -{34,61,-81}, -{34,61,-80}, -{34,61,-79}, -{34,61,-78}, -{34,61,-77}, -{34,61,-76}, -{34,61,-75}, -{34,61,-74}, -{34,61,-73}, -{34,61,-72}, -{34,61,-71}, -{34,61,-70}, -{34,61,-69}, -{34,61,-68}, -{34,61,-67}, -{34,61,-66}, -{34,61,-65}, -{34,61,-64}, -{34,61,-63}, -{34,61,-62}, -{34,61,-61}, -{34,61,-60}, -{34,61,-59}, -{34,61,-58}, -{34,61,-57}, -{34,61,-56}, -{34,61,-55}, -{34,61,-54}, -{34,61,-53}, -{34,61,-52}, -{34,61,-51}, -{34,61,-50}, -{34,61,-49}, -{34,61,-48}, -{34,61,-47}, -{34,61,-46}, -{34,61,-45}, -{34,61,-44}, -{34,61,-43}, -{34,61,-42}, -{34,61,-41}, -{34,61,-40}, -{34,61,-39}, -{34,61,-38}, -{34,61,-37}, -{34,61,-36}, -{34,61,-35}, -{34,61,-34}, -{34,61,-33}, -{34,61,-32}, -{34,61,-31}, -{34,61,-30}, -{34,61,-29}, -{34,61,-28}, -{34,61,-27}, -{34,61,-26}, -{34,61,-25}, -{34,61,-24}, -{34,61,-23}, -{34,61,-22}, -{34,61,-21}, -{34,61,-20}, -{34,61,-19}, -{34,61,-18}, -{34,61,-17}, -{34,61,-16}, -{34,61,-15}, -{34,61,-14}, -{34,61,-13}, -{34,61,-12}, -{34,62,-95}, -{34,62,-94}, -{34,62,-93}, -{34,62,-92}, -{34,62,-91}, -{34,62,-90}, -{34,62,-89}, -{34,62,-88}, -{34,62,-87}, -{34,62,-86}, -{34,62,-85}, -{34,62,-84}, -{34,62,-83}, -{34,62,-82}, -{34,62,-81}, -{34,62,-80}, -{34,62,-79}, -{34,62,-78}, -{34,62,-77}, -{34,62,-76}, -{34,62,-75}, -{34,62,-74}, -{34,62,-73}, -{34,62,-72}, -{34,62,-71}, -{34,62,-70}, -{34,62,-69}, -{34,62,-68}, -{34,62,-67}, -{34,62,-66}, -{34,62,-65}, -{34,62,-64}, -{34,62,-63}, -{34,62,-62}, -{34,62,-61}, -{34,62,-60}, -{34,62,-59}, -{34,62,-58}, -{34,62,-57}, -{34,62,-56}, -{34,62,-55}, -{34,62,-54}, -{34,62,-53}, -{34,62,-52}, -{34,62,-51}, -{34,62,-50}, -{34,62,-49}, -{34,62,-48}, -{34,62,-47}, -{34,62,-46}, -{34,62,-45}, -{34,62,-44}, -{34,62,-43}, -{34,62,-42}, -{34,62,-41}, -{34,62,-40}, -{34,62,-39}, -{34,62,-38}, -{34,62,-37}, -{34,62,-36}, -{34,62,-35}, -{34,62,-34}, -{34,62,-33}, -{34,62,-32}, -{34,62,-31}, -{34,62,-30}, -{34,62,-29}, -{34,62,-28}, -{34,62,-27}, -{34,62,-26}, -{34,62,-25}, -{34,62,-24}, -{34,62,-23}, -{34,62,-22}, -{34,63,-95}, -{34,63,-94}, -{34,63,-93}, -{34,63,-92}, -{34,63,-91}, -{34,63,-90}, -{34,63,-89}, -{34,63,-88}, -{34,63,-87}, -{34,63,-86}, -{34,63,-85}, -{34,63,-84}, -{34,63,-83}, -{34,63,-82}, -{34,63,-81}, -{34,63,-80}, -{34,63,-79}, -{34,63,-78}, -{34,63,-77}, -{34,63,-76}, -{34,63,-75}, -{34,63,-74}, -{34,63,-73}, -{34,63,-72}, -{34,63,-71}, -{34,63,-70}, -{34,63,-69}, -{34,63,-68}, -{34,63,-67}, -{34,63,-66}, -{34,63,-65}, -{34,63,-64}, -{34,63,-63}, -{34,63,-62}, -{34,63,-61}, -{34,63,-60}, -{34,63,-59}, -{34,63,-58}, -{34,63,-57}, -{34,63,-56}, -{34,63,-55}, -{34,63,-54}, -{34,63,-53}, -{34,63,-52}, -{34,63,-51}, -{34,63,-50}, -{34,63,-49}, -{34,63,-48}, -{34,63,-47}, -{34,63,-46}, -{34,63,-45}, -{34,63,-44}, -{34,63,-43}, -{34,63,-42}, -{34,63,-41}, -{34,63,-40}, -{34,63,-39}, -{34,63,-38}, -{34,63,-37}, -{34,63,-36}, -{34,63,-35}, -{34,63,-34}, -{34,63,-33}, -{34,63,-32}, -{34,63,-31}, -{34,63,-30}, -{34,64,-96}, -{34,64,-95}, -{34,64,-94}, -{34,64,-93}, -{34,64,-92}, -{34,64,-91}, -{34,64,-90}, -{34,64,-89}, -{34,64,-88}, -{34,64,-87}, -{34,64,-86}, -{34,64,-85}, -{34,64,-84}, -{34,64,-83}, -{34,64,-82}, -{34,64,-81}, -{34,64,-80}, -{34,64,-79}, -{34,64,-78}, -{34,64,-77}, -{34,64,-76}, -{34,64,-75}, -{34,64,-74}, -{34,64,-73}, -{34,64,-72}, -{34,64,-71}, -{34,64,-70}, -{34,64,-69}, -{34,64,-68}, -{34,64,-67}, -{34,64,-66}, -{34,64,-65}, -{34,64,-64}, -{34,64,-63}, -{34,64,-62}, -{34,64,-61}, -{34,64,-60}, -{34,64,-59}, -{34,64,-58}, -{34,64,-57}, -{34,64,-56}, -{34,64,-55}, -{34,64,-54}, -{34,64,-53}, -{34,64,-52}, -{34,64,-51}, -{34,64,-50}, -{34,64,-49}, -{34,64,-48}, -{34,64,-47}, -{34,64,-46}, -{34,64,-45}, -{34,64,-44}, -{34,64,-43}, -{34,64,-42}, -{34,64,-41}, -{34,64,-40}, -{34,64,-39}, -{34,64,-38}, -{34,64,-37}, -{34,65,-97}, -{34,65,-96}, -{34,65,-95}, -{34,65,-94}, -{34,65,-93}, -{34,65,-92}, -{34,65,-91}, -{34,65,-90}, -{34,65,-89}, -{34,65,-88}, -{34,65,-87}, -{34,65,-86}, -{34,65,-85}, -{34,65,-84}, -{34,65,-83}, -{34,65,-82}, -{34,65,-81}, -{34,65,-80}, -{34,65,-79}, -{34,65,-78}, -{34,65,-77}, -{34,65,-76}, -{34,65,-75}, -{34,65,-74}, -{34,65,-73}, -{34,65,-72}, -{34,65,-71}, -{34,65,-70}, -{34,65,-69}, -{34,65,-68}, -{34,65,-67}, -{34,65,-66}, -{34,65,-65}, -{34,65,-64}, -{34,65,-63}, -{34,65,-62}, -{34,65,-61}, -{34,65,-60}, -{34,65,-59}, -{34,65,-58}, -{34,65,-57}, -{34,65,-56}, -{34,65,-55}, -{34,65,-54}, -{34,65,-53}, -{34,65,-52}, -{34,65,-51}, -{34,65,-50}, -{34,65,-49}, -{34,65,-48}, -{34,65,-47}, -{34,65,-46}, -{34,65,-45}, -{34,65,-44}, -{34,65,-43}, -{34,66,-98}, -{34,66,-97}, -{34,66,-96}, -{34,66,-95}, -{34,66,-94}, -{34,66,-93}, -{34,66,-92}, -{34,66,-91}, -{34,66,-90}, -{34,66,-89}, -{34,66,-88}, -{34,66,-87}, -{34,66,-86}, -{34,66,-85}, -{34,66,-84}, -{34,66,-83}, -{34,66,-82}, -{34,66,-81}, -{34,66,-80}, -{34,66,-79}, -{34,66,-78}, -{34,66,-77}, -{34,66,-76}, -{34,66,-75}, -{34,66,-74}, -{34,66,-73}, -{34,66,-72}, -{34,66,-71}, -{34,66,-70}, -{34,66,-69}, -{34,66,-68}, -{34,66,-67}, -{34,66,-66}, -{34,66,-65}, -{34,66,-64}, -{34,66,-63}, -{34,66,-62}, -{34,66,-61}, -{34,66,-60}, -{34,66,-59}, -{34,66,-58}, -{34,66,-57}, -{34,66,-56}, -{34,66,-55}, -{34,66,-54}, -{34,66,-53}, -{34,66,-52}, -{34,66,-51}, -{34,66,-50}, -{34,66,-49}, -{34,67,-99}, -{34,67,-98}, -{34,67,-97}, -{34,67,-96}, -{34,67,-95}, -{34,67,-94}, -{34,67,-93}, -{34,67,-92}, -{34,67,-91}, -{34,67,-90}, -{34,67,-89}, -{34,67,-88}, -{34,67,-87}, -{34,67,-86}, -{34,67,-85}, -{34,67,-84}, -{34,67,-83}, -{34,67,-82}, -{34,67,-81}, -{34,67,-80}, -{34,67,-79}, -{34,67,-78}, -{34,67,-77}, -{34,67,-76}, -{34,67,-75}, -{34,67,-74}, -{34,67,-73}, -{34,67,-72}, -{34,67,-71}, -{34,67,-70}, -{34,67,-69}, -{34,67,-68}, -{34,67,-67}, -{34,67,-66}, -{34,67,-65}, -{34,67,-64}, -{34,67,-63}, -{34,67,-62}, -{34,67,-61}, -{34,67,-60}, -{34,67,-59}, -{34,67,-58}, -{34,67,-57}, -{34,67,-56}, -{34,67,-55}, -{34,68,-100}, -{34,68,-99}, -{34,68,-98}, -{34,68,-97}, -{34,68,-96}, -{34,68,-95}, -{34,68,-94}, -{34,68,-93}, -{34,68,-92}, -{34,68,-91}, -{34,68,-90}, -{34,68,-89}, -{34,68,-88}, -{34,68,-87}, -{34,68,-86}, -{34,68,-85}, -{34,68,-84}, -{34,68,-83}, -{34,68,-82}, -{34,68,-81}, -{34,68,-80}, -{34,68,-79}, -{34,68,-78}, -{34,68,-77}, -{34,68,-76}, -{34,68,-75}, -{34,68,-74}, -{34,68,-73}, -{34,68,-72}, -{34,68,-71}, -{34,68,-70}, -{34,68,-69}, -{34,68,-68}, -{34,68,-67}, -{34,68,-66}, -{34,68,-65}, -{34,68,-64}, -{34,68,-63}, -{34,68,-62}, -{34,68,-61}, -{34,68,-60}, -{34,69,-101}, -{34,69,-100}, -{34,69,-99}, -{34,69,-98}, -{34,69,-97}, -{34,69,-96}, -{34,69,-95}, -{34,69,-94}, -{34,69,-93}, -{34,69,-92}, -{34,69,-91}, -{34,69,-90}, -{34,69,-89}, -{34,69,-88}, -{34,69,-87}, -{34,69,-86}, -{34,69,-85}, -{34,69,-84}, -{34,69,-83}, -{34,69,-82}, -{34,69,-81}, -{34,69,-80}, -{34,69,-79}, -{34,69,-78}, -{34,69,-77}, -{34,69,-76}, -{34,69,-75}, -{34,69,-74}, -{34,69,-73}, -{34,69,-72}, -{34,69,-71}, -{34,69,-70}, -{34,69,-69}, -{34,69,-68}, -{34,69,-67}, -{34,69,-66}, -{34,69,-65}, -{34,70,-101}, -{34,70,-100}, -{34,70,-99}, -{34,70,-98}, -{34,70,-97}, -{34,70,-96}, -{34,70,-95}, -{34,70,-94}, -{34,70,-93}, -{34,70,-92}, -{34,70,-91}, -{34,70,-90}, -{34,70,-89}, -{34,70,-88}, -{34,70,-87}, -{34,70,-86}, -{34,70,-85}, -{34,70,-84}, -{34,70,-83}, -{34,70,-82}, -{34,70,-81}, -{34,70,-80}, -{34,70,-79}, -{34,70,-78}, -{34,70,-77}, -{34,70,-76}, -{34,70,-75}, -{34,70,-74}, -{34,70,-73}, -{34,70,-72}, -{34,70,-71}, -{34,70,-70}, -{34,70,-69}, -{34,71,-102}, -{34,71,-101}, -{34,71,-100}, -{34,71,-99}, -{34,71,-98}, -{34,71,-97}, -{34,71,-96}, -{34,71,-95}, -{34,71,-94}, -{34,71,-93}, -{34,71,-92}, -{34,71,-91}, -{34,71,-90}, -{34,71,-89}, -{34,71,-88}, -{34,71,-87}, -{34,71,-86}, -{34,71,-85}, -{34,71,-84}, -{34,71,-83}, -{34,71,-82}, -{34,71,-81}, -{34,71,-80}, -{34,71,-79}, -{34,71,-78}, -{34,71,-77}, -{34,71,-76}, -{34,71,-75}, -{34,71,-74}, -{34,72,-103}, -{34,72,-102}, -{34,72,-101}, -{34,72,-100}, -{34,72,-99}, -{34,72,-98}, -{34,72,-97}, -{34,72,-96}, -{34,72,-95}, -{34,72,-94}, -{34,72,-93}, -{34,72,-92}, -{34,72,-91}, -{34,72,-90}, -{34,72,-89}, -{34,72,-88}, -{34,72,-87}, -{34,72,-86}, -{34,72,-85}, -{34,72,-84}, -{34,72,-83}, -{34,72,-82}, -{34,72,-81}, -{34,72,-80}, -{34,72,-79}, -{34,72,-78}, -{34,73,-104}, -{34,73,-103}, -{34,73,-102}, -{34,73,-101}, -{34,73,-100}, -{34,73,-99}, -{34,73,-98}, -{34,73,-97}, -{34,73,-96}, -{34,73,-95}, -{34,73,-94}, -{34,73,-93}, -{34,73,-92}, -{34,73,-91}, -{34,73,-90}, -{34,73,-89}, -{34,73,-88}, -{34,73,-87}, -{34,73,-86}, -{34,73,-85}, -{34,73,-84}, -{34,73,-83}, -{34,73,-82}, -{34,74,-105}, -{34,74,-104}, -{34,74,-103}, -{34,74,-102}, -{34,74,-101}, -{34,74,-100}, -{34,74,-99}, -{34,74,-98}, -{34,74,-97}, -{34,74,-96}, -{34,74,-95}, -{34,74,-94}, -{34,74,-93}, -{34,74,-92}, -{34,74,-91}, -{34,74,-90}, -{34,74,-89}, -{34,74,-88}, -{34,74,-87}, -{34,74,-86}, -{34,74,-85}, -{34,75,-105}, -{34,75,-104}, -{34,75,-103}, -{34,75,-102}, -{34,75,-101}, -{34,75,-100}, -{34,75,-99}, -{34,75,-98}, -{34,75,-97}, -{34,75,-96}, -{34,75,-95}, -{34,75,-94}, -{34,75,-93}, -{34,75,-92}, -{34,75,-91}, -{34,75,-90}, -{34,75,-89}, -{34,76,-105}, -{34,76,-104}, -{34,76,-103}, -{34,76,-102}, -{34,76,-101}, -{34,76,-100}, -{34,76,-99}, -{34,76,-98}, -{34,76,-97}, -{34,76,-96}, -{34,76,-95}, -{34,76,-94}, -{34,76,-93}, -{34,77,-105}, -{34,77,-104}, -{34,77,-103}, -{34,77,-102}, -{34,77,-101}, -{34,77,-100}, -{34,77,-99}, -{34,77,-98}, -{34,77,-97}, -{34,77,-96}, -{34,78,-105}, -{34,78,-104}, -{34,78,-103}, -{34,78,-102}, -{34,78,-101}, -{34,78,-100}, -{34,78,-99}, -{34,79,-105}, -{34,79,-104}, -{34,79,-103}, -{35,-42,39}, -{35,-42,40}, -{35,-42,41}, -{35,-41,34}, -{35,-41,35}, -{35,-41,36}, -{35,-41,37}, -{35,-41,38}, -{35,-41,39}, -{35,-41,40}, -{35,-41,41}, -{35,-40,31}, -{35,-40,32}, -{35,-40,33}, -{35,-40,34}, -{35,-40,35}, -{35,-40,36}, -{35,-40,37}, -{35,-40,38}, -{35,-40,39}, -{35,-40,40}, -{35,-40,41}, -{35,-39,27}, -{35,-39,28}, -{35,-39,29}, -{35,-39,30}, -{35,-39,31}, -{35,-39,32}, -{35,-39,33}, -{35,-39,34}, -{35,-39,35}, -{35,-39,36}, -{35,-39,37}, -{35,-39,38}, -{35,-39,39}, -{35,-39,40}, -{35,-39,41}, -{35,-38,24}, -{35,-38,25}, -{35,-38,26}, -{35,-38,27}, -{35,-38,28}, -{35,-38,29}, -{35,-38,30}, -{35,-38,31}, -{35,-38,32}, -{35,-38,33}, -{35,-38,34}, -{35,-38,35}, -{35,-38,36}, -{35,-38,37}, -{35,-38,38}, -{35,-38,39}, -{35,-38,40}, -{35,-38,41}, -{35,-37,21}, -{35,-37,22}, -{35,-37,23}, -{35,-37,24}, -{35,-37,25}, -{35,-37,26}, -{35,-37,27}, -{35,-37,28}, -{35,-37,29}, -{35,-37,30}, -{35,-37,31}, -{35,-37,32}, -{35,-37,33}, -{35,-37,34}, -{35,-37,35}, -{35,-37,36}, -{35,-37,37}, -{35,-37,38}, -{35,-37,39}, -{35,-37,40}, -{35,-37,41}, -{35,-36,19}, -{35,-36,20}, -{35,-36,21}, -{35,-36,22}, -{35,-36,23}, -{35,-36,24}, -{35,-36,25}, -{35,-36,26}, -{35,-36,27}, -{35,-36,28}, -{35,-36,29}, -{35,-36,30}, -{35,-36,31}, -{35,-36,32}, -{35,-36,33}, -{35,-36,34}, -{35,-36,35}, -{35,-36,36}, -{35,-36,37}, -{35,-36,38}, -{35,-36,39}, -{35,-36,40}, -{35,-36,41}, -{35,-35,16}, -{35,-35,17}, -{35,-35,18}, -{35,-35,19}, -{35,-35,20}, -{35,-35,21}, -{35,-35,22}, -{35,-35,23}, -{35,-35,24}, -{35,-35,25}, -{35,-35,26}, -{35,-35,27}, -{35,-35,28}, -{35,-35,29}, -{35,-35,30}, -{35,-35,31}, -{35,-35,32}, -{35,-35,33}, -{35,-35,34}, -{35,-35,35}, -{35,-35,36}, -{35,-35,37}, -{35,-35,38}, -{35,-35,39}, -{35,-35,40}, -{35,-35,41}, -{35,-34,14}, -{35,-34,15}, -{35,-34,16}, -{35,-34,17}, -{35,-34,18}, -{35,-34,19}, -{35,-34,20}, -{35,-34,21}, -{35,-34,22}, -{35,-34,23}, -{35,-34,24}, -{35,-34,25}, -{35,-34,26}, -{35,-34,27}, -{35,-34,28}, -{35,-34,29}, -{35,-34,30}, -{35,-34,31}, -{35,-34,32}, -{35,-34,33}, -{35,-34,34}, -{35,-34,35}, -{35,-34,36}, -{35,-34,37}, -{35,-34,38}, -{35,-34,39}, -{35,-34,40}, -{35,-34,41}, -{35,-33,12}, -{35,-33,13}, -{35,-33,14}, -{35,-33,15}, -{35,-33,16}, -{35,-33,17}, -{35,-33,18}, -{35,-33,19}, -{35,-33,20}, -{35,-33,21}, -{35,-33,22}, -{35,-33,23}, -{35,-33,24}, -{35,-33,25}, -{35,-33,26}, -{35,-33,27}, -{35,-33,28}, -{35,-33,29}, -{35,-33,30}, -{35,-33,31}, -{35,-33,32}, -{35,-33,33}, -{35,-33,34}, -{35,-33,35}, -{35,-33,36}, -{35,-33,37}, -{35,-33,38}, -{35,-33,39}, -{35,-33,40}, -{35,-33,41}, -{35,-32,10}, -{35,-32,11}, -{35,-32,12}, -{35,-32,13}, -{35,-32,14}, -{35,-32,15}, -{35,-32,16}, -{35,-32,17}, -{35,-32,18}, -{35,-32,19}, -{35,-32,20}, -{35,-32,21}, -{35,-32,22}, -{35,-32,23}, -{35,-32,24}, -{35,-32,25}, -{35,-32,26}, -{35,-32,27}, -{35,-32,28}, -{35,-32,29}, -{35,-32,30}, -{35,-32,31}, -{35,-32,32}, -{35,-32,33}, -{35,-32,34}, -{35,-32,35}, -{35,-32,36}, -{35,-32,37}, -{35,-32,38}, -{35,-32,39}, -{35,-32,40}, -{35,-32,41}, -{35,-31,8}, -{35,-31,9}, -{35,-31,10}, -{35,-31,11}, -{35,-31,12}, -{35,-31,13}, -{35,-31,14}, -{35,-31,15}, -{35,-31,16}, -{35,-31,17}, -{35,-31,18}, -{35,-31,19}, -{35,-31,20}, -{35,-31,21}, -{35,-31,22}, -{35,-31,23}, -{35,-31,24}, -{35,-31,25}, -{35,-31,26}, -{35,-31,27}, -{35,-31,28}, -{35,-31,29}, -{35,-31,30}, -{35,-31,31}, -{35,-31,32}, -{35,-31,33}, -{35,-31,34}, -{35,-31,35}, -{35,-31,36}, -{35,-31,37}, -{35,-31,38}, -{35,-31,39}, -{35,-31,40}, -{35,-31,41}, -{35,-30,6}, -{35,-30,7}, -{35,-30,8}, -{35,-30,9}, -{35,-30,10}, -{35,-30,11}, -{35,-30,12}, -{35,-30,13}, -{35,-30,14}, -{35,-30,15}, -{35,-30,16}, -{35,-30,17}, -{35,-30,18}, -{35,-30,19}, -{35,-30,20}, -{35,-30,21}, -{35,-30,22}, -{35,-30,23}, -{35,-30,24}, -{35,-30,25}, -{35,-30,26}, -{35,-30,27}, -{35,-30,28}, -{35,-30,29}, -{35,-30,30}, -{35,-30,31}, -{35,-30,32}, -{35,-30,33}, -{35,-30,34}, -{35,-30,35}, -{35,-30,36}, -{35,-30,37}, -{35,-30,38}, -{35,-30,39}, -{35,-30,40}, -{35,-30,41}, -{35,-29,4}, -{35,-29,5}, -{35,-29,6}, -{35,-29,7}, -{35,-29,8}, -{35,-29,9}, -{35,-29,10}, -{35,-29,11}, -{35,-29,12}, -{35,-29,13}, -{35,-29,14}, -{35,-29,15}, -{35,-29,16}, -{35,-29,17}, -{35,-29,18}, -{35,-29,19}, -{35,-29,20}, -{35,-29,21}, -{35,-29,22}, -{35,-29,23}, -{35,-29,24}, -{35,-29,25}, -{35,-29,26}, -{35,-29,27}, -{35,-29,28}, -{35,-29,29}, -{35,-29,30}, -{35,-29,31}, -{35,-29,32}, -{35,-29,33}, -{35,-29,34}, -{35,-29,35}, -{35,-29,36}, -{35,-29,37}, -{35,-29,38}, -{35,-29,39}, -{35,-29,40}, -{35,-29,41}, -{35,-28,2}, -{35,-28,3}, -{35,-28,4}, -{35,-28,5}, -{35,-28,6}, -{35,-28,7}, -{35,-28,8}, -{35,-28,9}, -{35,-28,10}, -{35,-28,11}, -{35,-28,12}, -{35,-28,13}, -{35,-28,14}, -{35,-28,15}, -{35,-28,16}, -{35,-28,17}, -{35,-28,18}, -{35,-28,19}, -{35,-28,20}, -{35,-28,21}, -{35,-28,22}, -{35,-28,23}, -{35,-28,24}, -{35,-28,25}, -{35,-28,26}, -{35,-28,27}, -{35,-28,28}, -{35,-28,29}, -{35,-28,30}, -{35,-28,31}, -{35,-28,32}, -{35,-28,33}, -{35,-28,34}, -{35,-28,35}, -{35,-28,36}, -{35,-28,37}, -{35,-28,38}, -{35,-28,39}, -{35,-28,40}, -{35,-28,41}, -{35,-27,0}, -{35,-27,1}, -{35,-27,2}, -{35,-27,3}, -{35,-27,4}, -{35,-27,5}, -{35,-27,6}, -{35,-27,7}, -{35,-27,8}, -{35,-27,9}, -{35,-27,10}, -{35,-27,11}, -{35,-27,12}, -{35,-27,13}, -{35,-27,14}, -{35,-27,15}, -{35,-27,16}, -{35,-27,17}, -{35,-27,18}, -{35,-27,19}, -{35,-27,20}, -{35,-27,21}, -{35,-27,22}, -{35,-27,23}, -{35,-27,24}, -{35,-27,25}, -{35,-27,26}, -{35,-27,27}, -{35,-27,28}, -{35,-27,29}, -{35,-27,30}, -{35,-27,31}, -{35,-27,32}, -{35,-27,33}, -{35,-27,34}, -{35,-27,35}, -{35,-27,36}, -{35,-27,37}, -{35,-27,38}, -{35,-27,39}, -{35,-27,40}, -{35,-27,41}, -{35,-26,-1}, -{35,-26,0}, -{35,-26,1}, -{35,-26,2}, -{35,-26,3}, -{35,-26,4}, -{35,-26,5}, -{35,-26,6}, -{35,-26,7}, -{35,-26,8}, -{35,-26,9}, -{35,-26,10}, -{35,-26,11}, -{35,-26,12}, -{35,-26,13}, -{35,-26,14}, -{35,-26,15}, -{35,-26,16}, -{35,-26,17}, -{35,-26,18}, -{35,-26,19}, -{35,-26,20}, -{35,-26,21}, -{35,-26,22}, -{35,-26,23}, -{35,-26,24}, -{35,-26,25}, -{35,-26,26}, -{35,-26,27}, -{35,-26,28}, -{35,-26,29}, -{35,-26,30}, -{35,-26,31}, -{35,-26,32}, -{35,-26,33}, -{35,-26,34}, -{35,-26,35}, -{35,-26,36}, -{35,-26,37}, -{35,-26,38}, -{35,-26,39}, -{35,-26,40}, -{35,-26,41}, -{35,-25,-3}, -{35,-25,-2}, -{35,-25,-1}, -{35,-25,0}, -{35,-25,1}, -{35,-25,2}, -{35,-25,3}, -{35,-25,4}, -{35,-25,5}, -{35,-25,6}, -{35,-25,7}, -{35,-25,8}, -{35,-25,9}, -{35,-25,10}, -{35,-25,11}, -{35,-25,12}, -{35,-25,13}, -{35,-25,14}, -{35,-25,15}, -{35,-25,16}, -{35,-25,17}, -{35,-25,18}, -{35,-25,19}, -{35,-25,20}, -{35,-25,21}, -{35,-25,22}, -{35,-25,23}, -{35,-25,24}, -{35,-25,25}, -{35,-25,26}, -{35,-25,27}, -{35,-25,28}, -{35,-25,29}, -{35,-25,30}, -{35,-25,31}, -{35,-25,32}, -{35,-25,33}, -{35,-25,34}, -{35,-25,35}, -{35,-25,36}, -{35,-25,37}, -{35,-25,38}, -{35,-25,39}, -{35,-25,40}, -{35,-25,41}, -{35,-24,-5}, -{35,-24,-4}, -{35,-24,-3}, -{35,-24,-2}, -{35,-24,-1}, -{35,-24,0}, -{35,-24,1}, -{35,-24,2}, -{35,-24,3}, -{35,-24,4}, -{35,-24,5}, -{35,-24,6}, -{35,-24,7}, -{35,-24,8}, -{35,-24,9}, -{35,-24,10}, -{35,-24,11}, -{35,-24,12}, -{35,-24,13}, -{35,-24,14}, -{35,-24,15}, -{35,-24,16}, -{35,-24,17}, -{35,-24,18}, -{35,-24,19}, -{35,-24,20}, -{35,-24,21}, -{35,-24,22}, -{35,-24,23}, -{35,-24,24}, -{35,-24,25}, -{35,-24,26}, -{35,-24,27}, -{35,-24,28}, -{35,-24,29}, -{35,-24,30}, -{35,-24,31}, -{35,-24,32}, -{35,-24,33}, -{35,-24,34}, -{35,-24,35}, -{35,-24,36}, -{35,-24,37}, -{35,-24,38}, -{35,-24,39}, -{35,-24,40}, -{35,-24,41}, -{35,-23,-6}, -{35,-23,-5}, -{35,-23,-4}, -{35,-23,-3}, -{35,-23,-2}, -{35,-23,-1}, -{35,-23,0}, -{35,-23,1}, -{35,-23,2}, -{35,-23,3}, -{35,-23,4}, -{35,-23,5}, -{35,-23,6}, -{35,-23,7}, -{35,-23,8}, -{35,-23,9}, -{35,-23,10}, -{35,-23,11}, -{35,-23,12}, -{35,-23,13}, -{35,-23,14}, -{35,-23,15}, -{35,-23,16}, -{35,-23,17}, -{35,-23,18}, -{35,-23,19}, -{35,-23,20}, -{35,-23,21}, -{35,-23,22}, -{35,-23,23}, -{35,-23,24}, -{35,-23,25}, -{35,-23,26}, -{35,-23,27}, -{35,-23,28}, -{35,-23,29}, -{35,-23,30}, -{35,-23,31}, -{35,-23,32}, -{35,-23,33}, -{35,-23,34}, -{35,-23,35}, -{35,-23,36}, -{35,-23,37}, -{35,-23,38}, -{35,-23,39}, -{35,-23,40}, -{35,-23,41}, -{35,-22,-8}, -{35,-22,-7}, -{35,-22,-6}, -{35,-22,-5}, -{35,-22,-4}, -{35,-22,-3}, -{35,-22,-2}, -{35,-22,-1}, -{35,-22,0}, -{35,-22,1}, -{35,-22,2}, -{35,-22,3}, -{35,-22,4}, -{35,-22,5}, -{35,-22,6}, -{35,-22,7}, -{35,-22,8}, -{35,-22,9}, -{35,-22,10}, -{35,-22,11}, -{35,-22,12}, -{35,-22,13}, -{35,-22,14}, -{35,-22,15}, -{35,-22,16}, -{35,-22,17}, -{35,-22,18}, -{35,-22,19}, -{35,-22,20}, -{35,-22,21}, -{35,-22,22}, -{35,-22,23}, -{35,-22,24}, -{35,-22,25}, -{35,-22,26}, -{35,-22,27}, -{35,-22,28}, -{35,-22,29}, -{35,-22,30}, -{35,-22,31}, -{35,-22,32}, -{35,-22,33}, -{35,-22,34}, -{35,-22,35}, -{35,-22,36}, -{35,-22,37}, -{35,-22,38}, -{35,-22,39}, -{35,-22,40}, -{35,-22,41}, -{35,-22,42}, -{35,-21,-9}, -{35,-21,-8}, -{35,-21,-7}, -{35,-21,-6}, -{35,-21,-5}, -{35,-21,-4}, -{35,-21,-3}, -{35,-21,-2}, -{35,-21,-1}, -{35,-21,0}, -{35,-21,1}, -{35,-21,2}, -{35,-21,3}, -{35,-21,4}, -{35,-21,5}, -{35,-21,6}, -{35,-21,7}, -{35,-21,8}, -{35,-21,9}, -{35,-21,10}, -{35,-21,11}, -{35,-21,12}, -{35,-21,13}, -{35,-21,14}, -{35,-21,15}, -{35,-21,16}, -{35,-21,17}, -{35,-21,18}, -{35,-21,19}, -{35,-21,20}, -{35,-21,21}, -{35,-21,22}, -{35,-21,23}, -{35,-21,24}, -{35,-21,25}, -{35,-21,26}, -{35,-21,27}, -{35,-21,28}, -{35,-21,29}, -{35,-21,30}, -{35,-21,31}, -{35,-21,32}, -{35,-21,33}, -{35,-21,34}, -{35,-21,35}, -{35,-21,36}, -{35,-21,37}, -{35,-21,38}, -{35,-21,39}, -{35,-21,40}, -{35,-21,41}, -{35,-21,42}, -{35,-20,-11}, -{35,-20,-10}, -{35,-20,-9}, -{35,-20,-8}, -{35,-20,-7}, -{35,-20,-6}, -{35,-20,-5}, -{35,-20,-4}, -{35,-20,-3}, -{35,-20,-2}, -{35,-20,-1}, -{35,-20,0}, -{35,-20,1}, -{35,-20,2}, -{35,-20,3}, -{35,-20,4}, -{35,-20,5}, -{35,-20,6}, -{35,-20,7}, -{35,-20,8}, -{35,-20,9}, -{35,-20,10}, -{35,-20,11}, -{35,-20,12}, -{35,-20,13}, -{35,-20,14}, -{35,-20,15}, -{35,-20,16}, -{35,-20,17}, -{35,-20,18}, -{35,-20,19}, -{35,-20,20}, -{35,-20,21}, -{35,-20,22}, -{35,-20,23}, -{35,-20,24}, -{35,-20,25}, -{35,-20,26}, -{35,-20,27}, -{35,-20,28}, -{35,-20,29}, -{35,-20,30}, -{35,-20,31}, -{35,-20,32}, -{35,-20,33}, -{35,-20,34}, -{35,-20,35}, -{35,-20,36}, -{35,-20,37}, -{35,-20,38}, -{35,-20,39}, -{35,-20,40}, -{35,-20,41}, -{35,-20,42}, -{35,-19,-12}, -{35,-19,-11}, -{35,-19,-10}, -{35,-19,-9}, -{35,-19,-8}, -{35,-19,-7}, -{35,-19,-6}, -{35,-19,-5}, -{35,-19,-4}, -{35,-19,-3}, -{35,-19,-2}, -{35,-19,-1}, -{35,-19,0}, -{35,-19,1}, -{35,-19,2}, -{35,-19,3}, -{35,-19,4}, -{35,-19,5}, -{35,-19,6}, -{35,-19,7}, -{35,-19,8}, -{35,-19,9}, -{35,-19,10}, -{35,-19,11}, -{35,-19,12}, -{35,-19,13}, -{35,-19,14}, -{35,-19,15}, -{35,-19,16}, -{35,-19,17}, -{35,-19,18}, -{35,-19,19}, -{35,-19,20}, -{35,-19,21}, -{35,-19,22}, -{35,-19,23}, -{35,-19,24}, -{35,-19,25}, -{35,-19,26}, -{35,-19,27}, -{35,-19,28}, -{35,-19,29}, -{35,-19,30}, -{35,-19,31}, -{35,-19,32}, -{35,-19,33}, -{35,-19,34}, -{35,-19,35}, -{35,-19,36}, -{35,-19,37}, -{35,-19,38}, -{35,-19,39}, -{35,-19,40}, -{35,-19,41}, -{35,-19,42}, -{35,-18,-14}, -{35,-18,-13}, -{35,-18,-12}, -{35,-18,-11}, -{35,-18,-10}, -{35,-18,-9}, -{35,-18,-8}, -{35,-18,-7}, -{35,-18,-6}, -{35,-18,-5}, -{35,-18,-4}, -{35,-18,-3}, -{35,-18,-2}, -{35,-18,-1}, -{35,-18,0}, -{35,-18,1}, -{35,-18,2}, -{35,-18,3}, -{35,-18,4}, -{35,-18,5}, -{35,-18,6}, -{35,-18,7}, -{35,-18,8}, -{35,-18,9}, -{35,-18,10}, -{35,-18,11}, -{35,-18,12}, -{35,-18,13}, -{35,-18,14}, -{35,-18,15}, -{35,-18,16}, -{35,-18,17}, -{35,-18,18}, -{35,-18,19}, -{35,-18,20}, -{35,-18,21}, -{35,-18,22}, -{35,-18,23}, -{35,-18,24}, -{35,-18,25}, -{35,-18,26}, -{35,-18,27}, -{35,-18,28}, -{35,-18,29}, -{35,-18,30}, -{35,-18,31}, -{35,-18,32}, -{35,-18,33}, -{35,-18,34}, -{35,-18,35}, -{35,-18,36}, -{35,-18,37}, -{35,-18,38}, -{35,-18,39}, -{35,-18,40}, -{35,-18,41}, -{35,-18,42}, -{35,-17,-15}, -{35,-17,-14}, -{35,-17,-13}, -{35,-17,-12}, -{35,-17,-11}, -{35,-17,-10}, -{35,-17,-9}, -{35,-17,-8}, -{35,-17,-7}, -{35,-17,-6}, -{35,-17,-5}, -{35,-17,-4}, -{35,-17,-3}, -{35,-17,-2}, -{35,-17,-1}, -{35,-17,0}, -{35,-17,1}, -{35,-17,2}, -{35,-17,3}, -{35,-17,4}, -{35,-17,5}, -{35,-17,6}, -{35,-17,7}, -{35,-17,8}, -{35,-17,9}, -{35,-17,10}, -{35,-17,11}, -{35,-17,12}, -{35,-17,13}, -{35,-17,14}, -{35,-17,15}, -{35,-17,16}, -{35,-17,17}, -{35,-17,18}, -{35,-17,19}, -{35,-17,20}, -{35,-17,21}, -{35,-17,22}, -{35,-17,23}, -{35,-17,24}, -{35,-17,25}, -{35,-17,26}, -{35,-17,27}, -{35,-17,28}, -{35,-17,29}, -{35,-17,30}, -{35,-17,31}, -{35,-17,32}, -{35,-17,33}, -{35,-17,34}, -{35,-17,35}, -{35,-17,36}, -{35,-17,37}, -{35,-17,38}, -{35,-17,39}, -{35,-17,40}, -{35,-17,41}, -{35,-17,42}, -{35,-16,-17}, -{35,-16,-16}, -{35,-16,-15}, -{35,-16,-14}, -{35,-16,-13}, -{35,-16,-12}, -{35,-16,-11}, -{35,-16,-10}, -{35,-16,-9}, -{35,-16,-8}, -{35,-16,-7}, -{35,-16,-6}, -{35,-16,-5}, -{35,-16,-4}, -{35,-16,-3}, -{35,-16,-2}, -{35,-16,-1}, -{35,-16,0}, -{35,-16,1}, -{35,-16,2}, -{35,-16,3}, -{35,-16,4}, -{35,-16,5}, -{35,-16,6}, -{35,-16,7}, -{35,-16,8}, -{35,-16,9}, -{35,-16,10}, -{35,-16,11}, -{35,-16,12}, -{35,-16,13}, -{35,-16,14}, -{35,-16,15}, -{35,-16,16}, -{35,-16,17}, -{35,-16,18}, -{35,-16,19}, -{35,-16,20}, -{35,-16,21}, -{35,-16,22}, -{35,-16,23}, -{35,-16,24}, -{35,-16,25}, -{35,-16,26}, -{35,-16,27}, -{35,-16,28}, -{35,-16,29}, -{35,-16,30}, -{35,-16,31}, -{35,-16,32}, -{35,-16,33}, -{35,-16,34}, -{35,-16,35}, -{35,-16,36}, -{35,-16,37}, -{35,-16,38}, -{35,-16,39}, -{35,-16,40}, -{35,-16,41}, -{35,-16,42}, -{35,-15,-18}, -{35,-15,-17}, -{35,-15,-16}, -{35,-15,-15}, -{35,-15,-14}, -{35,-15,-13}, -{35,-15,-12}, -{35,-15,-11}, -{35,-15,-10}, -{35,-15,-9}, -{35,-15,-8}, -{35,-15,-7}, -{35,-15,-6}, -{35,-15,-5}, -{35,-15,-4}, -{35,-15,-3}, -{35,-15,-2}, -{35,-15,-1}, -{35,-15,0}, -{35,-15,1}, -{35,-15,2}, -{35,-15,3}, -{35,-15,4}, -{35,-15,5}, -{35,-15,6}, -{35,-15,7}, -{35,-15,8}, -{35,-15,9}, -{35,-15,10}, -{35,-15,11}, -{35,-15,12}, -{35,-15,13}, -{35,-15,14}, -{35,-15,15}, -{35,-15,16}, -{35,-15,17}, -{35,-15,18}, -{35,-15,19}, -{35,-15,20}, -{35,-15,21}, -{35,-15,22}, -{35,-15,23}, -{35,-15,24}, -{35,-15,25}, -{35,-15,26}, -{35,-15,27}, -{35,-15,28}, -{35,-15,29}, -{35,-15,30}, -{35,-15,31}, -{35,-15,32}, -{35,-15,33}, -{35,-15,34}, -{35,-15,35}, -{35,-15,36}, -{35,-15,37}, -{35,-15,38}, -{35,-15,39}, -{35,-15,40}, -{35,-15,41}, -{35,-15,42}, -{35,-14,-19}, -{35,-14,-18}, -{35,-14,-17}, -{35,-14,-16}, -{35,-14,-15}, -{35,-14,-14}, -{35,-14,-13}, -{35,-14,-12}, -{35,-14,-11}, -{35,-14,-10}, -{35,-14,-9}, -{35,-14,-8}, -{35,-14,-7}, -{35,-14,-6}, -{35,-14,-5}, -{35,-14,-4}, -{35,-14,-3}, -{35,-14,-2}, -{35,-14,-1}, -{35,-14,0}, -{35,-14,1}, -{35,-14,2}, -{35,-14,3}, -{35,-14,4}, -{35,-14,5}, -{35,-14,6}, -{35,-14,7}, -{35,-14,8}, -{35,-14,9}, -{35,-14,10}, -{35,-14,11}, -{35,-14,12}, -{35,-14,13}, -{35,-14,14}, -{35,-14,15}, -{35,-14,16}, -{35,-14,17}, -{35,-14,18}, -{35,-14,19}, -{35,-14,20}, -{35,-14,21}, -{35,-14,22}, -{35,-14,23}, -{35,-14,24}, -{35,-14,25}, -{35,-14,26}, -{35,-14,27}, -{35,-14,28}, -{35,-14,29}, -{35,-14,30}, -{35,-14,31}, -{35,-14,32}, -{35,-14,33}, -{35,-14,34}, -{35,-14,35}, -{35,-14,36}, -{35,-14,37}, -{35,-14,38}, -{35,-14,39}, -{35,-14,40}, -{35,-14,41}, -{35,-14,42}, -{35,-13,-21}, -{35,-13,-20}, -{35,-13,-19}, -{35,-13,-18}, -{35,-13,-17}, -{35,-13,-16}, -{35,-13,-15}, -{35,-13,-14}, -{35,-13,-13}, -{35,-13,-12}, -{35,-13,-11}, -{35,-13,-10}, -{35,-13,-9}, -{35,-13,-8}, -{35,-13,-7}, -{35,-13,-6}, -{35,-13,-5}, -{35,-13,-4}, -{35,-13,-3}, -{35,-13,-2}, -{35,-13,-1}, -{35,-13,0}, -{35,-13,1}, -{35,-13,2}, -{35,-13,3}, -{35,-13,4}, -{35,-13,5}, -{35,-13,6}, -{35,-13,7}, -{35,-13,8}, -{35,-13,9}, -{35,-13,10}, -{35,-13,11}, -{35,-13,12}, -{35,-13,13}, -{35,-13,14}, -{35,-13,15}, -{35,-13,16}, -{35,-13,17}, -{35,-13,18}, -{35,-13,19}, -{35,-13,20}, -{35,-13,21}, -{35,-13,22}, -{35,-13,23}, -{35,-13,24}, -{35,-13,25}, -{35,-13,26}, -{35,-13,27}, -{35,-13,28}, -{35,-13,29}, -{35,-13,30}, -{35,-13,31}, -{35,-13,32}, -{35,-13,33}, -{35,-13,34}, -{35,-13,35}, -{35,-13,36}, -{35,-13,37}, -{35,-13,38}, -{35,-13,39}, -{35,-13,40}, -{35,-13,41}, -{35,-13,42}, -{35,-12,-22}, -{35,-12,-21}, -{35,-12,-20}, -{35,-12,-19}, -{35,-12,-18}, -{35,-12,-17}, -{35,-12,-16}, -{35,-12,-15}, -{35,-12,-14}, -{35,-12,-13}, -{35,-12,-12}, -{35,-12,-11}, -{35,-12,-10}, -{35,-12,-9}, -{35,-12,-8}, -{35,-12,-7}, -{35,-12,-6}, -{35,-12,-5}, -{35,-12,-4}, -{35,-12,-3}, -{35,-12,-2}, -{35,-12,-1}, -{35,-12,0}, -{35,-12,1}, -{35,-12,2}, -{35,-12,3}, -{35,-12,4}, -{35,-12,5}, -{35,-12,6}, -{35,-12,7}, -{35,-12,8}, -{35,-12,9}, -{35,-12,10}, -{35,-12,11}, -{35,-12,12}, -{35,-12,13}, -{35,-12,14}, -{35,-12,15}, -{35,-12,16}, -{35,-12,17}, -{35,-12,18}, -{35,-12,19}, -{35,-12,20}, -{35,-12,21}, -{35,-12,22}, -{35,-12,23}, -{35,-12,24}, -{35,-12,25}, -{35,-12,26}, -{35,-12,27}, -{35,-12,28}, -{35,-12,29}, -{35,-12,30}, -{35,-12,31}, -{35,-12,32}, -{35,-12,33}, -{35,-12,34}, -{35,-12,35}, -{35,-12,36}, -{35,-12,37}, -{35,-12,38}, -{35,-12,39}, -{35,-12,40}, -{35,-12,41}, -{35,-12,42}, -{35,-11,-23}, -{35,-11,-22}, -{35,-11,-21}, -{35,-11,-20}, -{35,-11,-19}, -{35,-11,-18}, -{35,-11,-17}, -{35,-11,-16}, -{35,-11,-15}, -{35,-11,-14}, -{35,-11,-13}, -{35,-11,-12}, -{35,-11,-11}, -{35,-11,-10}, -{35,-11,-9}, -{35,-11,-8}, -{35,-11,-7}, -{35,-11,-6}, -{35,-11,-5}, -{35,-11,-4}, -{35,-11,-3}, -{35,-11,-2}, -{35,-11,-1}, -{35,-11,0}, -{35,-11,1}, -{35,-11,2}, -{35,-11,3}, -{35,-11,4}, -{35,-11,5}, -{35,-11,6}, -{35,-11,7}, -{35,-11,8}, -{35,-11,9}, -{35,-11,10}, -{35,-11,11}, -{35,-11,12}, -{35,-11,13}, -{35,-11,14}, -{35,-11,15}, -{35,-11,16}, -{35,-11,17}, -{35,-11,18}, -{35,-11,19}, -{35,-11,20}, -{35,-11,21}, -{35,-11,22}, -{35,-11,23}, -{35,-11,24}, -{35,-11,25}, -{35,-11,26}, -{35,-11,27}, -{35,-11,28}, -{35,-11,29}, -{35,-11,30}, -{35,-11,31}, -{35,-11,32}, -{35,-11,33}, -{35,-11,34}, -{35,-11,35}, -{35,-11,36}, -{35,-11,37}, -{35,-11,38}, -{35,-11,39}, -{35,-11,40}, -{35,-11,41}, -{35,-11,42}, -{35,-10,-24}, -{35,-10,-23}, -{35,-10,-22}, -{35,-10,-21}, -{35,-10,-20}, -{35,-10,-19}, -{35,-10,-18}, -{35,-10,-17}, -{35,-10,-16}, -{35,-10,-15}, -{35,-10,-14}, -{35,-10,-13}, -{35,-10,-12}, -{35,-10,-11}, -{35,-10,-10}, -{35,-10,-9}, -{35,-10,-8}, -{35,-10,-7}, -{35,-10,-6}, -{35,-10,-5}, -{35,-10,-4}, -{35,-10,-3}, -{35,-10,-2}, -{35,-10,-1}, -{35,-10,0}, -{35,-10,1}, -{35,-10,2}, -{35,-10,3}, -{35,-10,4}, -{35,-10,5}, -{35,-10,6}, -{35,-10,7}, -{35,-10,8}, -{35,-10,9}, -{35,-10,10}, -{35,-10,11}, -{35,-10,12}, -{35,-10,13}, -{35,-10,14}, -{35,-10,15}, -{35,-10,16}, -{35,-10,17}, -{35,-10,18}, -{35,-10,19}, -{35,-10,20}, -{35,-10,21}, -{35,-10,22}, -{35,-10,23}, -{35,-10,24}, -{35,-10,25}, -{35,-10,26}, -{35,-10,27}, -{35,-10,28}, -{35,-10,29}, -{35,-10,30}, -{35,-10,31}, -{35,-10,32}, -{35,-10,33}, -{35,-10,34}, -{35,-10,35}, -{35,-10,36}, -{35,-10,37}, -{35,-10,38}, -{35,-10,39}, -{35,-10,40}, -{35,-10,41}, -{35,-10,42}, -{35,-9,-26}, -{35,-9,-25}, -{35,-9,-24}, -{35,-9,-23}, -{35,-9,-22}, -{35,-9,-21}, -{35,-9,-20}, -{35,-9,-19}, -{35,-9,-18}, -{35,-9,-17}, -{35,-9,-16}, -{35,-9,-15}, -{35,-9,-14}, -{35,-9,-13}, -{35,-9,-12}, -{35,-9,-11}, -{35,-9,-10}, -{35,-9,-9}, -{35,-9,-8}, -{35,-9,-7}, -{35,-9,-6}, -{35,-9,-5}, -{35,-9,-4}, -{35,-9,-3}, -{35,-9,-2}, -{35,-9,-1}, -{35,-9,0}, -{35,-9,1}, -{35,-9,2}, -{35,-9,3}, -{35,-9,4}, -{35,-9,5}, -{35,-9,6}, -{35,-9,7}, -{35,-9,8}, -{35,-9,9}, -{35,-9,10}, -{35,-9,11}, -{35,-9,12}, -{35,-9,13}, -{35,-9,14}, -{35,-9,15}, -{35,-9,16}, -{35,-9,17}, -{35,-9,18}, -{35,-9,19}, -{35,-9,20}, -{35,-9,21}, -{35,-9,22}, -{35,-9,23}, -{35,-9,24}, -{35,-9,25}, -{35,-9,26}, -{35,-9,27}, -{35,-9,28}, -{35,-9,29}, -{35,-9,30}, -{35,-9,31}, -{35,-9,32}, -{35,-9,33}, -{35,-9,34}, -{35,-9,35}, -{35,-9,36}, -{35,-9,37}, -{35,-9,38}, -{35,-9,39}, -{35,-9,40}, -{35,-9,41}, -{35,-9,42}, -{35,-8,-27}, -{35,-8,-26}, -{35,-8,-25}, -{35,-8,-24}, -{35,-8,-23}, -{35,-8,-22}, -{35,-8,-21}, -{35,-8,-20}, -{35,-8,-19}, -{35,-8,-18}, -{35,-8,-17}, -{35,-8,-16}, -{35,-8,-15}, -{35,-8,-14}, -{35,-8,-13}, -{35,-8,-12}, -{35,-8,-11}, -{35,-8,-10}, -{35,-8,-9}, -{35,-8,-8}, -{35,-8,-7}, -{35,-8,-6}, -{35,-8,-5}, -{35,-8,-4}, -{35,-8,-3}, -{35,-8,-2}, -{35,-8,-1}, -{35,-8,0}, -{35,-8,1}, -{35,-8,2}, -{35,-8,3}, -{35,-8,4}, -{35,-8,5}, -{35,-8,6}, -{35,-8,7}, -{35,-8,8}, -{35,-8,9}, -{35,-8,10}, -{35,-8,11}, -{35,-8,12}, -{35,-8,13}, -{35,-8,14}, -{35,-8,15}, -{35,-8,16}, -{35,-8,17}, -{35,-8,18}, -{35,-8,19}, -{35,-8,20}, -{35,-8,21}, -{35,-8,22}, -{35,-8,23}, -{35,-8,24}, -{35,-8,25}, -{35,-8,26}, -{35,-8,27}, -{35,-8,28}, -{35,-8,29}, -{35,-8,30}, -{35,-8,31}, -{35,-8,32}, -{35,-8,33}, -{35,-8,34}, -{35,-8,35}, -{35,-8,36}, -{35,-8,37}, -{35,-8,38}, -{35,-8,39}, -{35,-8,40}, -{35,-8,41}, -{35,-8,42}, -{35,-7,-28}, -{35,-7,-27}, -{35,-7,-26}, -{35,-7,-25}, -{35,-7,-24}, -{35,-7,-23}, -{35,-7,-22}, -{35,-7,-21}, -{35,-7,-20}, -{35,-7,-19}, -{35,-7,-18}, -{35,-7,-17}, -{35,-7,-16}, -{35,-7,-15}, -{35,-7,-14}, -{35,-7,-13}, -{35,-7,-12}, -{35,-7,-11}, -{35,-7,-10}, -{35,-7,-9}, -{35,-7,-8}, -{35,-7,-7}, -{35,-7,-6}, -{35,-7,-5}, -{35,-7,-4}, -{35,-7,-3}, -{35,-7,-2}, -{35,-7,-1}, -{35,-7,0}, -{35,-7,1}, -{35,-7,2}, -{35,-7,3}, -{35,-7,4}, -{35,-7,5}, -{35,-7,6}, -{35,-7,7}, -{35,-7,8}, -{35,-7,9}, -{35,-7,10}, -{35,-7,11}, -{35,-7,12}, -{35,-7,13}, -{35,-7,14}, -{35,-7,15}, -{35,-7,16}, -{35,-7,17}, -{35,-7,18}, -{35,-7,19}, -{35,-7,20}, -{35,-7,21}, -{35,-7,22}, -{35,-7,23}, -{35,-7,24}, -{35,-7,25}, -{35,-7,26}, -{35,-7,27}, -{35,-7,28}, -{35,-7,29}, -{35,-7,30}, -{35,-7,31}, -{35,-7,32}, -{35,-7,33}, -{35,-7,34}, -{35,-7,35}, -{35,-7,36}, -{35,-7,37}, -{35,-7,38}, -{35,-7,39}, -{35,-7,40}, -{35,-7,41}, -{35,-7,42}, -{35,-6,-29}, -{35,-6,-28}, -{35,-6,-27}, -{35,-6,-26}, -{35,-6,-25}, -{35,-6,-24}, -{35,-6,-23}, -{35,-6,-22}, -{35,-6,-21}, -{35,-6,-20}, -{35,-6,-19}, -{35,-6,-18}, -{35,-6,-17}, -{35,-6,-16}, -{35,-6,-15}, -{35,-6,-14}, -{35,-6,-13}, -{35,-6,-12}, -{35,-6,-11}, -{35,-6,-10}, -{35,-6,-9}, -{35,-6,-8}, -{35,-6,-7}, -{35,-6,-6}, -{35,-6,-5}, -{35,-6,-4}, -{35,-6,-3}, -{35,-6,-2}, -{35,-6,-1}, -{35,-6,0}, -{35,-6,1}, -{35,-6,2}, -{35,-6,3}, -{35,-6,4}, -{35,-6,5}, -{35,-6,6}, -{35,-6,7}, -{35,-6,8}, -{35,-6,9}, -{35,-6,10}, -{35,-6,11}, -{35,-6,12}, -{35,-6,13}, -{35,-6,14}, -{35,-6,15}, -{35,-6,16}, -{35,-6,17}, -{35,-6,18}, -{35,-6,19}, -{35,-6,20}, -{35,-6,21}, -{35,-6,22}, -{35,-6,23}, -{35,-6,24}, -{35,-6,25}, -{35,-6,26}, -{35,-6,27}, -{35,-6,28}, -{35,-6,29}, -{35,-6,30}, -{35,-6,31}, -{35,-6,32}, -{35,-6,33}, -{35,-6,34}, -{35,-6,35}, -{35,-6,36}, -{35,-6,37}, -{35,-6,38}, -{35,-6,39}, -{35,-6,40}, -{35,-6,41}, -{35,-6,42}, -{35,-6,43}, -{35,-5,-31}, -{35,-5,-30}, -{35,-5,-29}, -{35,-5,-28}, -{35,-5,-27}, -{35,-5,-26}, -{35,-5,-25}, -{35,-5,-24}, -{35,-5,-23}, -{35,-5,-22}, -{35,-5,-21}, -{35,-5,-20}, -{35,-5,-19}, -{35,-5,-18}, -{35,-5,-17}, -{35,-5,-16}, -{35,-5,-15}, -{35,-5,-14}, -{35,-5,-13}, -{35,-5,-12}, -{35,-5,-11}, -{35,-5,-10}, -{35,-5,-9}, -{35,-5,-8}, -{35,-5,-7}, -{35,-5,-6}, -{35,-5,-5}, -{35,-5,-4}, -{35,-5,-3}, -{35,-5,-2}, -{35,-5,-1}, -{35,-5,0}, -{35,-5,1}, -{35,-5,2}, -{35,-5,3}, -{35,-5,4}, -{35,-5,5}, -{35,-5,6}, -{35,-5,7}, -{35,-5,8}, -{35,-5,9}, -{35,-5,10}, -{35,-5,11}, -{35,-5,12}, -{35,-5,13}, -{35,-5,14}, -{35,-5,15}, -{35,-5,16}, -{35,-5,17}, -{35,-5,18}, -{35,-5,19}, -{35,-5,20}, -{35,-5,21}, -{35,-5,22}, -{35,-5,23}, -{35,-5,24}, -{35,-5,25}, -{35,-5,26}, -{35,-5,27}, -{35,-5,28}, -{35,-5,29}, -{35,-5,30}, -{35,-5,31}, -{35,-5,32}, -{35,-5,33}, -{35,-5,34}, -{35,-5,35}, -{35,-5,36}, -{35,-5,37}, -{35,-5,38}, -{35,-5,39}, -{35,-5,40}, -{35,-5,41}, -{35,-5,42}, -{35,-5,43}, -{35,-4,-32}, -{35,-4,-31}, -{35,-4,-30}, -{35,-4,-29}, -{35,-4,-28}, -{35,-4,-27}, -{35,-4,-26}, -{35,-4,-25}, -{35,-4,-24}, -{35,-4,-23}, -{35,-4,-22}, -{35,-4,-21}, -{35,-4,-20}, -{35,-4,-19}, -{35,-4,-18}, -{35,-4,-17}, -{35,-4,-16}, -{35,-4,-15}, -{35,-4,-14}, -{35,-4,-13}, -{35,-4,-12}, -{35,-4,-11}, -{35,-4,-10}, -{35,-4,-9}, -{35,-4,-8}, -{35,-4,-7}, -{35,-4,-6}, -{35,-4,-5}, -{35,-4,-4}, -{35,-4,-3}, -{35,-4,-2}, -{35,-4,-1}, -{35,-4,0}, -{35,-4,1}, -{35,-4,2}, -{35,-4,3}, -{35,-4,4}, -{35,-4,5}, -{35,-4,6}, -{35,-4,7}, -{35,-4,8}, -{35,-4,9}, -{35,-4,10}, -{35,-4,11}, -{35,-4,12}, -{35,-4,13}, -{35,-4,14}, -{35,-4,15}, -{35,-4,16}, -{35,-4,17}, -{35,-4,18}, -{35,-4,19}, -{35,-4,20}, -{35,-4,21}, -{35,-4,22}, -{35,-4,23}, -{35,-4,24}, -{35,-4,25}, -{35,-4,26}, -{35,-4,27}, -{35,-4,28}, -{35,-4,29}, -{35,-4,30}, -{35,-4,31}, -{35,-4,32}, -{35,-4,33}, -{35,-4,34}, -{35,-4,35}, -{35,-4,36}, -{35,-4,37}, -{35,-4,38}, -{35,-4,39}, -{35,-4,40}, -{35,-4,41}, -{35,-4,42}, -{35,-4,43}, -{35,-3,-33}, -{35,-3,-32}, -{35,-3,-31}, -{35,-3,-30}, -{35,-3,-29}, -{35,-3,-28}, -{35,-3,-27}, -{35,-3,-26}, -{35,-3,-25}, -{35,-3,-24}, -{35,-3,-23}, -{35,-3,-22}, -{35,-3,-21}, -{35,-3,-20}, -{35,-3,-19}, -{35,-3,-18}, -{35,-3,-17}, -{35,-3,-16}, -{35,-3,-15}, -{35,-3,-14}, -{35,-3,-13}, -{35,-3,-12}, -{35,-3,-11}, -{35,-3,-10}, -{35,-3,-9}, -{35,-3,-8}, -{35,-3,-7}, -{35,-3,-6}, -{35,-3,-5}, -{35,-3,-4}, -{35,-3,-3}, -{35,-3,-2}, -{35,-3,-1}, -{35,-3,0}, -{35,-3,1}, -{35,-3,2}, -{35,-3,3}, -{35,-3,4}, -{35,-3,5}, -{35,-3,6}, -{35,-3,7}, -{35,-3,8}, -{35,-3,9}, -{35,-3,10}, -{35,-3,11}, -{35,-3,12}, -{35,-3,13}, -{35,-3,14}, -{35,-3,15}, -{35,-3,16}, -{35,-3,17}, -{35,-3,18}, -{35,-3,19}, -{35,-3,20}, -{35,-3,21}, -{35,-3,22}, -{35,-3,23}, -{35,-3,24}, -{35,-3,25}, -{35,-3,26}, -{35,-3,27}, -{35,-3,28}, -{35,-3,29}, -{35,-3,30}, -{35,-3,31}, -{35,-3,32}, -{35,-3,33}, -{35,-3,34}, -{35,-3,35}, -{35,-3,36}, -{35,-3,37}, -{35,-3,38}, -{35,-3,39}, -{35,-3,40}, -{35,-3,41}, -{35,-3,42}, -{35,-3,43}, -{35,-2,-34}, -{35,-2,-33}, -{35,-2,-32}, -{35,-2,-31}, -{35,-2,-30}, -{35,-2,-29}, -{35,-2,-28}, -{35,-2,-27}, -{35,-2,-26}, -{35,-2,-25}, -{35,-2,-24}, -{35,-2,-23}, -{35,-2,-22}, -{35,-2,-21}, -{35,-2,-20}, -{35,-2,-19}, -{35,-2,-18}, -{35,-2,-17}, -{35,-2,-16}, -{35,-2,-15}, -{35,-2,-14}, -{35,-2,-13}, -{35,-2,-12}, -{35,-2,-11}, -{35,-2,-10}, -{35,-2,-9}, -{35,-2,-8}, -{35,-2,-7}, -{35,-2,-6}, -{35,-2,-5}, -{35,-2,-4}, -{35,-2,-3}, -{35,-2,-2}, -{35,-2,-1}, -{35,-2,0}, -{35,-2,1}, -{35,-2,2}, -{35,-2,3}, -{35,-2,4}, -{35,-2,5}, -{35,-2,6}, -{35,-2,7}, -{35,-2,8}, -{35,-2,9}, -{35,-2,10}, -{35,-2,11}, -{35,-2,12}, -{35,-2,13}, -{35,-2,14}, -{35,-2,15}, -{35,-2,16}, -{35,-2,17}, -{35,-2,18}, -{35,-2,19}, -{35,-2,20}, -{35,-2,21}, -{35,-2,22}, -{35,-2,23}, -{35,-2,24}, -{35,-2,25}, -{35,-2,26}, -{35,-2,27}, -{35,-2,28}, -{35,-2,29}, -{35,-2,30}, -{35,-2,31}, -{35,-2,32}, -{35,-2,33}, -{35,-2,34}, -{35,-2,35}, -{35,-2,36}, -{35,-2,37}, -{35,-2,38}, -{35,-2,39}, -{35,-2,40}, -{35,-2,41}, -{35,-2,42}, -{35,-2,43}, -{35,-1,-35}, -{35,-1,-34}, -{35,-1,-33}, -{35,-1,-32}, -{35,-1,-31}, -{35,-1,-30}, -{35,-1,-29}, -{35,-1,-28}, -{35,-1,-27}, -{35,-1,-26}, -{35,-1,-25}, -{35,-1,-24}, -{35,-1,-23}, -{35,-1,-22}, -{35,-1,-21}, -{35,-1,-20}, -{35,-1,-19}, -{35,-1,-18}, -{35,-1,-17}, -{35,-1,-16}, -{35,-1,-15}, -{35,-1,-14}, -{35,-1,-13}, -{35,-1,-12}, -{35,-1,-11}, -{35,-1,-10}, -{35,-1,-9}, -{35,-1,-8}, -{35,-1,-7}, -{35,-1,-6}, -{35,-1,-5}, -{35,-1,-4}, -{35,-1,-3}, -{35,-1,-2}, -{35,-1,-1}, -{35,-1,0}, -{35,-1,1}, -{35,-1,2}, -{35,-1,3}, -{35,-1,4}, -{35,-1,5}, -{35,-1,6}, -{35,-1,7}, -{35,-1,8}, -{35,-1,9}, -{35,-1,10}, -{35,-1,11}, -{35,-1,12}, -{35,-1,13}, -{35,-1,14}, -{35,-1,15}, -{35,-1,16}, -{35,-1,17}, -{35,-1,18}, -{35,-1,19}, -{35,-1,20}, -{35,-1,21}, -{35,-1,22}, -{35,-1,23}, -{35,-1,24}, -{35,-1,25}, -{35,-1,26}, -{35,-1,27}, -{35,-1,28}, -{35,-1,29}, -{35,-1,30}, -{35,-1,31}, -{35,-1,32}, -{35,-1,33}, -{35,-1,34}, -{35,-1,35}, -{35,-1,36}, -{35,-1,37}, -{35,-1,38}, -{35,-1,39}, -{35,-1,40}, -{35,-1,41}, -{35,-1,42}, -{35,-1,43}, -{35,0,-36}, -{35,0,-35}, -{35,0,-34}, -{35,0,-33}, -{35,0,-32}, -{35,0,-31}, -{35,0,-30}, -{35,0,-29}, -{35,0,-28}, -{35,0,-27}, -{35,0,-26}, -{35,0,-25}, -{35,0,-24}, -{35,0,-23}, -{35,0,-22}, -{35,0,-21}, -{35,0,-20}, -{35,0,-19}, -{35,0,-18}, -{35,0,-17}, -{35,0,-16}, -{35,0,-15}, -{35,0,-14}, -{35,0,-13}, -{35,0,-12}, -{35,0,-11}, -{35,0,-10}, -{35,0,-9}, -{35,0,-8}, -{35,0,-7}, -{35,0,-6}, -{35,0,-5}, -{35,0,-4}, -{35,0,-3}, -{35,0,-2}, -{35,0,-1}, -{35,0,0}, -{35,0,1}, -{35,0,2}, -{35,0,3}, -{35,0,4}, -{35,0,5}, -{35,0,6}, -{35,0,7}, -{35,0,8}, -{35,0,9}, -{35,0,10}, -{35,0,11}, -{35,0,12}, -{35,0,13}, -{35,0,14}, -{35,0,15}, -{35,0,16}, -{35,0,17}, -{35,0,18}, -{35,0,19}, -{35,0,20}, -{35,0,21}, -{35,0,22}, -{35,0,23}, -{35,0,24}, -{35,0,25}, -{35,0,26}, -{35,0,27}, -{35,0,28}, -{35,0,29}, -{35,0,30}, -{35,0,31}, -{35,0,32}, -{35,0,33}, -{35,0,34}, -{35,0,35}, -{35,0,36}, -{35,0,37}, -{35,0,38}, -{35,0,39}, -{35,0,40}, -{35,0,41}, -{35,0,42}, -{35,0,43}, -{35,1,-37}, -{35,1,-36}, -{35,1,-35}, -{35,1,-34}, -{35,1,-33}, -{35,1,-32}, -{35,1,-31}, -{35,1,-30}, -{35,1,-29}, -{35,1,-28}, -{35,1,-27}, -{35,1,-26}, -{35,1,-25}, -{35,1,-24}, -{35,1,-23}, -{35,1,-22}, -{35,1,-21}, -{35,1,-20}, -{35,1,-19}, -{35,1,-18}, -{35,1,-17}, -{35,1,-16}, -{35,1,-15}, -{35,1,-14}, -{35,1,-13}, -{35,1,-12}, -{35,1,-11}, -{35,1,-10}, -{35,1,-9}, -{35,1,-8}, -{35,1,-7}, -{35,1,-6}, -{35,1,-5}, -{35,1,-4}, -{35,1,-3}, -{35,1,-2}, -{35,1,-1}, -{35,1,0}, -{35,1,1}, -{35,1,2}, -{35,1,3}, -{35,1,4}, -{35,1,5}, -{35,1,6}, -{35,1,7}, -{35,1,8}, -{35,1,9}, -{35,1,10}, -{35,1,11}, -{35,1,12}, -{35,1,13}, -{35,1,14}, -{35,1,15}, -{35,1,16}, -{35,1,17}, -{35,1,18}, -{35,1,19}, -{35,1,20}, -{35,1,21}, -{35,1,22}, -{35,1,23}, -{35,1,24}, -{35,1,25}, -{35,1,26}, -{35,1,27}, -{35,1,28}, -{35,1,29}, -{35,1,30}, -{35,1,31}, -{35,1,32}, -{35,1,33}, -{35,1,34}, -{35,1,35}, -{35,1,36}, -{35,1,37}, -{35,1,38}, -{35,1,39}, -{35,1,40}, -{35,1,41}, -{35,1,42}, -{35,1,43}, -{35,2,-39}, -{35,2,-38}, -{35,2,-37}, -{35,2,-36}, -{35,2,-35}, -{35,2,-34}, -{35,2,-33}, -{35,2,-32}, -{35,2,-31}, -{35,2,-30}, -{35,2,-29}, -{35,2,-28}, -{35,2,-27}, -{35,2,-26}, -{35,2,-25}, -{35,2,-24}, -{35,2,-23}, -{35,2,-22}, -{35,2,-21}, -{35,2,-20}, -{35,2,-19}, -{35,2,-18}, -{35,2,-17}, -{35,2,-16}, -{35,2,-15}, -{35,2,-14}, -{35,2,-13}, -{35,2,-12}, -{35,2,-11}, -{35,2,-10}, -{35,2,-9}, -{35,2,-8}, -{35,2,-7}, -{35,2,-6}, -{35,2,-5}, -{35,2,-4}, -{35,2,-3}, -{35,2,-2}, -{35,2,-1}, -{35,2,0}, -{35,2,1}, -{35,2,2}, -{35,2,3}, -{35,2,4}, -{35,2,5}, -{35,2,6}, -{35,2,7}, -{35,2,8}, -{35,2,9}, -{35,2,10}, -{35,2,11}, -{35,2,12}, -{35,2,13}, -{35,2,14}, -{35,2,15}, -{35,2,16}, -{35,2,17}, -{35,2,18}, -{35,2,19}, -{35,2,20}, -{35,2,21}, -{35,2,22}, -{35,2,23}, -{35,2,24}, -{35,2,25}, -{35,2,26}, -{35,2,27}, -{35,2,28}, -{35,2,29}, -{35,2,30}, -{35,2,31}, -{35,2,32}, -{35,2,33}, -{35,2,34}, -{35,2,35}, -{35,2,36}, -{35,2,37}, -{35,2,38}, -{35,2,39}, -{35,2,40}, -{35,2,41}, -{35,2,42}, -{35,2,43}, -{35,3,-40}, -{35,3,-39}, -{35,3,-38}, -{35,3,-37}, -{35,3,-36}, -{35,3,-35}, -{35,3,-34}, -{35,3,-33}, -{35,3,-32}, -{35,3,-31}, -{35,3,-30}, -{35,3,-29}, -{35,3,-28}, -{35,3,-27}, -{35,3,-26}, -{35,3,-25}, -{35,3,-24}, -{35,3,-23}, -{35,3,-22}, -{35,3,-21}, -{35,3,-20}, -{35,3,-19}, -{35,3,-18}, -{35,3,-17}, -{35,3,-16}, -{35,3,-15}, -{35,3,-14}, -{35,3,-13}, -{35,3,-12}, -{35,3,-11}, -{35,3,-10}, -{35,3,-9}, -{35,3,-8}, -{35,3,-7}, -{35,3,-6}, -{35,3,-5}, -{35,3,-4}, -{35,3,-3}, -{35,3,-2}, -{35,3,-1}, -{35,3,0}, -{35,3,1}, -{35,3,2}, -{35,3,3}, -{35,3,4}, -{35,3,5}, -{35,3,6}, -{35,3,7}, -{35,3,8}, -{35,3,9}, -{35,3,10}, -{35,3,11}, -{35,3,12}, -{35,3,13}, -{35,3,14}, -{35,3,15}, -{35,3,16}, -{35,3,17}, -{35,3,18}, -{35,3,19}, -{35,3,20}, -{35,3,21}, -{35,3,22}, -{35,3,23}, -{35,3,24}, -{35,3,25}, -{35,3,26}, -{35,3,27}, -{35,3,28}, -{35,3,29}, -{35,3,30}, -{35,3,31}, -{35,3,32}, -{35,3,33}, -{35,3,34}, -{35,3,35}, -{35,3,36}, -{35,3,37}, -{35,3,38}, -{35,3,39}, -{35,3,40}, -{35,3,41}, -{35,3,42}, -{35,3,43}, -{35,4,-41}, -{35,4,-40}, -{35,4,-39}, -{35,4,-38}, -{35,4,-37}, -{35,4,-36}, -{35,4,-35}, -{35,4,-34}, -{35,4,-33}, -{35,4,-32}, -{35,4,-31}, -{35,4,-30}, -{35,4,-29}, -{35,4,-28}, -{35,4,-27}, -{35,4,-26}, -{35,4,-25}, -{35,4,-24}, -{35,4,-23}, -{35,4,-22}, -{35,4,-21}, -{35,4,-20}, -{35,4,-19}, -{35,4,-18}, -{35,4,-17}, -{35,4,-16}, -{35,4,-15}, -{35,4,-14}, -{35,4,-13}, -{35,4,-12}, -{35,4,-11}, -{35,4,-10}, -{35,4,-9}, -{35,4,-8}, -{35,4,-7}, -{35,4,-6}, -{35,4,-5}, -{35,4,-4}, -{35,4,-3}, -{35,4,-2}, -{35,4,-1}, -{35,4,0}, -{35,4,1}, -{35,4,2}, -{35,4,3}, -{35,4,4}, -{35,4,5}, -{35,4,6}, -{35,4,7}, -{35,4,8}, -{35,4,9}, -{35,4,10}, -{35,4,11}, -{35,4,12}, -{35,4,13}, -{35,4,14}, -{35,4,15}, -{35,4,16}, -{35,4,17}, -{35,4,18}, -{35,4,19}, -{35,4,20}, -{35,4,21}, -{35,4,22}, -{35,4,23}, -{35,4,24}, -{35,4,25}, -{35,4,26}, -{35,4,27}, -{35,4,28}, -{35,4,29}, -{35,4,30}, -{35,4,31}, -{35,4,32}, -{35,4,33}, -{35,4,34}, -{35,4,35}, -{35,4,36}, -{35,4,37}, -{35,4,38}, -{35,4,39}, -{35,4,40}, -{35,4,41}, -{35,4,42}, -{35,4,43}, -{35,5,-42}, -{35,5,-41}, -{35,5,-40}, -{35,5,-39}, -{35,5,-38}, -{35,5,-37}, -{35,5,-36}, -{35,5,-35}, -{35,5,-34}, -{35,5,-33}, -{35,5,-32}, -{35,5,-31}, -{35,5,-30}, -{35,5,-29}, -{35,5,-28}, -{35,5,-27}, -{35,5,-26}, -{35,5,-25}, -{35,5,-24}, -{35,5,-23}, -{35,5,-22}, -{35,5,-21}, -{35,5,-20}, -{35,5,-19}, -{35,5,-18}, -{35,5,-17}, -{35,5,-16}, -{35,5,-15}, -{35,5,-14}, -{35,5,-13}, -{35,5,-12}, -{35,5,-11}, -{35,5,-10}, -{35,5,-9}, -{35,5,-8}, -{35,5,-7}, -{35,5,-6}, -{35,5,-5}, -{35,5,-4}, -{35,5,-3}, -{35,5,-2}, -{35,5,-1}, -{35,5,0}, -{35,5,1}, -{35,5,2}, -{35,5,3}, -{35,5,4}, -{35,5,5}, -{35,5,6}, -{35,5,7}, -{35,5,8}, -{35,5,9}, -{35,5,10}, -{35,5,11}, -{35,5,12}, -{35,5,13}, -{35,5,14}, -{35,5,15}, -{35,5,16}, -{35,5,17}, -{35,5,18}, -{35,5,19}, -{35,5,20}, -{35,5,21}, -{35,5,22}, -{35,5,23}, -{35,5,24}, -{35,5,25}, -{35,5,26}, -{35,5,27}, -{35,5,28}, -{35,5,29}, -{35,5,30}, -{35,5,31}, -{35,5,32}, -{35,5,33}, -{35,5,34}, -{35,5,35}, -{35,5,36}, -{35,5,37}, -{35,5,38}, -{35,5,39}, -{35,5,40}, -{35,5,41}, -{35,5,42}, -{35,5,43}, -{35,6,-43}, -{35,6,-42}, -{35,6,-41}, -{35,6,-40}, -{35,6,-39}, -{35,6,-38}, -{35,6,-37}, -{35,6,-36}, -{35,6,-35}, -{35,6,-34}, -{35,6,-33}, -{35,6,-32}, -{35,6,-31}, -{35,6,-30}, -{35,6,-29}, -{35,6,-28}, -{35,6,-27}, -{35,6,-26}, -{35,6,-25}, -{35,6,-24}, -{35,6,-23}, -{35,6,-22}, -{35,6,-21}, -{35,6,-20}, -{35,6,-19}, -{35,6,-18}, -{35,6,-17}, -{35,6,-16}, -{35,6,-15}, -{35,6,-14}, -{35,6,-13}, -{35,6,-12}, -{35,6,-11}, -{35,6,-10}, -{35,6,-9}, -{35,6,-8}, -{35,6,-7}, -{35,6,-6}, -{35,6,-5}, -{35,6,-4}, -{35,6,-3}, -{35,6,-2}, -{35,6,-1}, -{35,6,0}, -{35,6,1}, -{35,6,2}, -{35,6,3}, -{35,6,4}, -{35,6,5}, -{35,6,6}, -{35,6,7}, -{35,6,8}, -{35,6,9}, -{35,6,10}, -{35,6,11}, -{35,6,12}, -{35,6,13}, -{35,6,14}, -{35,6,15}, -{35,6,16}, -{35,6,17}, -{35,6,18}, -{35,6,19}, -{35,6,20}, -{35,6,21}, -{35,6,22}, -{35,6,23}, -{35,6,24}, -{35,6,25}, -{35,6,26}, -{35,6,27}, -{35,6,28}, -{35,6,29}, -{35,6,30}, -{35,6,31}, -{35,6,32}, -{35,6,33}, -{35,6,34}, -{35,6,35}, -{35,6,36}, -{35,6,37}, -{35,6,38}, -{35,6,39}, -{35,6,40}, -{35,6,41}, -{35,6,42}, -{35,6,43}, -{35,7,-44}, -{35,7,-43}, -{35,7,-42}, -{35,7,-41}, -{35,7,-40}, -{35,7,-39}, -{35,7,-38}, -{35,7,-37}, -{35,7,-36}, -{35,7,-35}, -{35,7,-34}, -{35,7,-33}, -{35,7,-32}, -{35,7,-31}, -{35,7,-30}, -{35,7,-29}, -{35,7,-28}, -{35,7,-27}, -{35,7,-26}, -{35,7,-25}, -{35,7,-24}, -{35,7,-23}, -{35,7,-22}, -{35,7,-21}, -{35,7,-20}, -{35,7,-19}, -{35,7,-18}, -{35,7,-17}, -{35,7,-16}, -{35,7,-15}, -{35,7,-14}, -{35,7,-13}, -{35,7,-12}, -{35,7,-11}, -{35,7,-10}, -{35,7,-9}, -{35,7,-8}, -{35,7,-7}, -{35,7,-6}, -{35,7,-5}, -{35,7,-4}, -{35,7,-3}, -{35,7,-2}, -{35,7,-1}, -{35,7,0}, -{35,7,1}, -{35,7,2}, -{35,7,3}, -{35,7,4}, -{35,7,5}, -{35,7,6}, -{35,7,7}, -{35,7,8}, -{35,7,9}, -{35,7,10}, -{35,7,11}, -{35,7,12}, -{35,7,13}, -{35,7,14}, -{35,7,15}, -{35,7,16}, -{35,7,17}, -{35,7,18}, -{35,7,19}, -{35,7,20}, -{35,7,21}, -{35,7,22}, -{35,7,23}, -{35,7,24}, -{35,7,25}, -{35,7,26}, -{35,7,27}, -{35,7,28}, -{35,7,29}, -{35,7,30}, -{35,7,31}, -{35,7,32}, -{35,7,33}, -{35,7,34}, -{35,7,35}, -{35,7,36}, -{35,7,37}, -{35,7,38}, -{35,7,39}, -{35,7,40}, -{35,7,41}, -{35,7,42}, -{35,7,43}, -{35,8,-45}, -{35,8,-44}, -{35,8,-43}, -{35,8,-42}, -{35,8,-41}, -{35,8,-40}, -{35,8,-39}, -{35,8,-38}, -{35,8,-37}, -{35,8,-36}, -{35,8,-35}, -{35,8,-34}, -{35,8,-33}, -{35,8,-32}, -{35,8,-31}, -{35,8,-30}, -{35,8,-29}, -{35,8,-28}, -{35,8,-27}, -{35,8,-26}, -{35,8,-25}, -{35,8,-24}, -{35,8,-23}, -{35,8,-22}, -{35,8,-21}, -{35,8,-20}, -{35,8,-19}, -{35,8,-18}, -{35,8,-17}, -{35,8,-16}, -{35,8,-15}, -{35,8,-14}, -{35,8,-13}, -{35,8,-12}, -{35,8,-11}, -{35,8,-10}, -{35,8,-9}, -{35,8,-8}, -{35,8,-7}, -{35,8,-6}, -{35,8,-5}, -{35,8,-4}, -{35,8,-3}, -{35,8,-2}, -{35,8,-1}, -{35,8,0}, -{35,8,1}, -{35,8,2}, -{35,8,3}, -{35,8,4}, -{35,8,5}, -{35,8,6}, -{35,8,7}, -{35,8,8}, -{35,8,9}, -{35,8,10}, -{35,8,11}, -{35,8,12}, -{35,8,13}, -{35,8,14}, -{35,8,15}, -{35,8,16}, -{35,8,17}, -{35,8,18}, -{35,8,19}, -{35,8,20}, -{35,8,21}, -{35,8,22}, -{35,8,23}, -{35,8,24}, -{35,8,25}, -{35,8,26}, -{35,8,27}, -{35,8,28}, -{35,8,29}, -{35,8,30}, -{35,8,31}, -{35,8,32}, -{35,8,33}, -{35,8,34}, -{35,8,35}, -{35,8,36}, -{35,8,37}, -{35,8,38}, -{35,8,39}, -{35,8,40}, -{35,8,41}, -{35,8,42}, -{35,8,43}, -{35,8,44}, -{35,9,-46}, -{35,9,-45}, -{35,9,-44}, -{35,9,-43}, -{35,9,-42}, -{35,9,-41}, -{35,9,-40}, -{35,9,-39}, -{35,9,-38}, -{35,9,-37}, -{35,9,-36}, -{35,9,-35}, -{35,9,-34}, -{35,9,-33}, -{35,9,-32}, -{35,9,-31}, -{35,9,-30}, -{35,9,-29}, -{35,9,-28}, -{35,9,-27}, -{35,9,-26}, -{35,9,-25}, -{35,9,-24}, -{35,9,-23}, -{35,9,-22}, -{35,9,-21}, -{35,9,-20}, -{35,9,-19}, -{35,9,-18}, -{35,9,-17}, -{35,9,-16}, -{35,9,-15}, -{35,9,-14}, -{35,9,-13}, -{35,9,-12}, -{35,9,-11}, -{35,9,-10}, -{35,9,-9}, -{35,9,-8}, -{35,9,-7}, -{35,9,-6}, -{35,9,-5}, -{35,9,-4}, -{35,9,-3}, -{35,9,-2}, -{35,9,-1}, -{35,9,0}, -{35,9,1}, -{35,9,2}, -{35,9,3}, -{35,9,4}, -{35,9,5}, -{35,9,6}, -{35,9,7}, -{35,9,8}, -{35,9,9}, -{35,9,10}, -{35,9,11}, -{35,9,12}, -{35,9,13}, -{35,9,14}, -{35,9,15}, -{35,9,16}, -{35,9,17}, -{35,9,18}, -{35,9,19}, -{35,9,20}, -{35,9,21}, -{35,9,22}, -{35,9,23}, -{35,9,24}, -{35,9,25}, -{35,9,26}, -{35,9,27}, -{35,9,28}, -{35,9,29}, -{35,9,30}, -{35,9,31}, -{35,9,32}, -{35,9,33}, -{35,9,34}, -{35,9,35}, -{35,9,36}, -{35,9,37}, -{35,9,38}, -{35,9,39}, -{35,9,40}, -{35,9,41}, -{35,9,42}, -{35,9,43}, -{35,9,44}, -{35,10,-47}, -{35,10,-46}, -{35,10,-45}, -{35,10,-44}, -{35,10,-43}, -{35,10,-42}, -{35,10,-41}, -{35,10,-40}, -{35,10,-39}, -{35,10,-38}, -{35,10,-37}, -{35,10,-36}, -{35,10,-35}, -{35,10,-34}, -{35,10,-33}, -{35,10,-32}, -{35,10,-31}, -{35,10,-30}, -{35,10,-29}, -{35,10,-28}, -{35,10,-27}, -{35,10,-26}, -{35,10,-25}, -{35,10,-24}, -{35,10,-23}, -{35,10,-22}, -{35,10,-21}, -{35,10,-20}, -{35,10,-19}, -{35,10,-18}, -{35,10,-17}, -{35,10,-16}, -{35,10,-15}, -{35,10,-14}, -{35,10,-13}, -{35,10,-12}, -{35,10,-11}, -{35,10,-10}, -{35,10,-9}, -{35,10,-8}, -{35,10,-7}, -{35,10,-6}, -{35,10,-5}, -{35,10,-4}, -{35,10,-3}, -{35,10,-2}, -{35,10,-1}, -{35,10,0}, -{35,10,1}, -{35,10,2}, -{35,10,3}, -{35,10,4}, -{35,10,5}, -{35,10,6}, -{35,10,7}, -{35,10,8}, -{35,10,9}, -{35,10,10}, -{35,10,11}, -{35,10,12}, -{35,10,13}, -{35,10,14}, -{35,10,15}, -{35,10,16}, -{35,10,17}, -{35,10,18}, -{35,10,19}, -{35,10,20}, -{35,10,21}, -{35,10,22}, -{35,10,23}, -{35,10,24}, -{35,10,25}, -{35,10,26}, -{35,10,27}, -{35,10,28}, -{35,10,29}, -{35,10,30}, -{35,10,31}, -{35,10,32}, -{35,10,33}, -{35,10,34}, -{35,10,35}, -{35,10,36}, -{35,10,37}, -{35,10,38}, -{35,10,39}, -{35,10,40}, -{35,10,41}, -{35,10,42}, -{35,10,43}, -{35,10,44}, -{35,11,-48}, -{35,11,-47}, -{35,11,-46}, -{35,11,-45}, -{35,11,-44}, -{35,11,-43}, -{35,11,-42}, -{35,11,-41}, -{35,11,-40}, -{35,11,-39}, -{35,11,-38}, -{35,11,-37}, -{35,11,-36}, -{35,11,-35}, -{35,11,-34}, -{35,11,-33}, -{35,11,-32}, -{35,11,-31}, -{35,11,-30}, -{35,11,-29}, -{35,11,-28}, -{35,11,-27}, -{35,11,-26}, -{35,11,-25}, -{35,11,-24}, -{35,11,-23}, -{35,11,-22}, -{35,11,-21}, -{35,11,-20}, -{35,11,-19}, -{35,11,-18}, -{35,11,-17}, -{35,11,-16}, -{35,11,-15}, -{35,11,-14}, -{35,11,-13}, -{35,11,-12}, -{35,11,-11}, -{35,11,-10}, -{35,11,-9}, -{35,11,-8}, -{35,11,-7}, -{35,11,-6}, -{35,11,-5}, -{35,11,-4}, -{35,11,-3}, -{35,11,-2}, -{35,11,-1}, -{35,11,0}, -{35,11,1}, -{35,11,2}, -{35,11,3}, -{35,11,4}, -{35,11,5}, -{35,11,6}, -{35,11,7}, -{35,11,8}, -{35,11,9}, -{35,11,10}, -{35,11,11}, -{35,11,12}, -{35,11,13}, -{35,11,14}, -{35,11,15}, -{35,11,16}, -{35,11,17}, -{35,11,18}, -{35,11,19}, -{35,11,20}, -{35,11,21}, -{35,11,22}, -{35,11,23}, -{35,11,24}, -{35,11,25}, -{35,11,26}, -{35,11,27}, -{35,11,28}, -{35,11,29}, -{35,11,30}, -{35,11,31}, -{35,11,32}, -{35,11,33}, -{35,11,34}, -{35,11,35}, -{35,11,36}, -{35,11,37}, -{35,11,38}, -{35,11,39}, -{35,11,40}, -{35,11,41}, -{35,11,42}, -{35,11,43}, -{35,11,44}, -{35,12,-49}, -{35,12,-48}, -{35,12,-47}, -{35,12,-46}, -{35,12,-45}, -{35,12,-44}, -{35,12,-43}, -{35,12,-42}, -{35,12,-41}, -{35,12,-40}, -{35,12,-39}, -{35,12,-38}, -{35,12,-37}, -{35,12,-36}, -{35,12,-35}, -{35,12,-34}, -{35,12,-33}, -{35,12,-32}, -{35,12,-31}, -{35,12,-30}, -{35,12,-29}, -{35,12,-28}, -{35,12,-27}, -{35,12,-26}, -{35,12,-25}, -{35,12,-24}, -{35,12,-23}, -{35,12,-22}, -{35,12,-21}, -{35,12,-20}, -{35,12,-19}, -{35,12,-18}, -{35,12,-17}, -{35,12,-16}, -{35,12,-15}, -{35,12,-14}, -{35,12,-13}, -{35,12,-12}, -{35,12,-11}, -{35,12,-10}, -{35,12,-9}, -{35,12,-8}, -{35,12,-7}, -{35,12,-6}, -{35,12,-5}, -{35,12,-4}, -{35,12,-3}, -{35,12,-2}, -{35,12,-1}, -{35,12,0}, -{35,12,1}, -{35,12,2}, -{35,12,3}, -{35,12,4}, -{35,12,5}, -{35,12,6}, -{35,12,7}, -{35,12,8}, -{35,12,9}, -{35,12,10}, -{35,12,11}, -{35,12,12}, -{35,12,13}, -{35,12,14}, -{35,12,15}, -{35,12,16}, -{35,12,17}, -{35,12,18}, -{35,12,19}, -{35,12,20}, -{35,12,21}, -{35,12,22}, -{35,12,23}, -{35,12,24}, -{35,12,25}, -{35,12,26}, -{35,12,27}, -{35,12,28}, -{35,12,29}, -{35,12,30}, -{35,12,31}, -{35,12,32}, -{35,12,33}, -{35,12,34}, -{35,12,35}, -{35,12,36}, -{35,12,37}, -{35,12,38}, -{35,12,39}, -{35,12,40}, -{35,12,41}, -{35,12,42}, -{35,12,43}, -{35,12,44}, -{35,13,-50}, -{35,13,-49}, -{35,13,-48}, -{35,13,-47}, -{35,13,-46}, -{35,13,-45}, -{35,13,-44}, -{35,13,-43}, -{35,13,-42}, -{35,13,-41}, -{35,13,-40}, -{35,13,-39}, -{35,13,-38}, -{35,13,-37}, -{35,13,-36}, -{35,13,-35}, -{35,13,-34}, -{35,13,-33}, -{35,13,-32}, -{35,13,-31}, -{35,13,-30}, -{35,13,-29}, -{35,13,-28}, -{35,13,-27}, -{35,13,-26}, -{35,13,-25}, -{35,13,-24}, -{35,13,-23}, -{35,13,-22}, -{35,13,-21}, -{35,13,-20}, -{35,13,-19}, -{35,13,-18}, -{35,13,-17}, -{35,13,-16}, -{35,13,-15}, -{35,13,-14}, -{35,13,-13}, -{35,13,-12}, -{35,13,-11}, -{35,13,-10}, -{35,13,-9}, -{35,13,-8}, -{35,13,-7}, -{35,13,-6}, -{35,13,-5}, -{35,13,-4}, -{35,13,-3}, -{35,13,-2}, -{35,13,-1}, -{35,13,0}, -{35,13,1}, -{35,13,2}, -{35,13,3}, -{35,13,4}, -{35,13,5}, -{35,13,6}, -{35,13,7}, -{35,13,8}, -{35,13,9}, -{35,13,10}, -{35,13,11}, -{35,13,12}, -{35,13,13}, -{35,13,14}, -{35,13,15}, -{35,13,16}, -{35,13,17}, -{35,13,18}, -{35,13,19}, -{35,13,20}, -{35,13,21}, -{35,13,22}, -{35,13,23}, -{35,13,24}, -{35,13,25}, -{35,13,26}, -{35,13,27}, -{35,13,28}, -{35,13,29}, -{35,13,30}, -{35,13,31}, -{35,13,32}, -{35,13,33}, -{35,13,34}, -{35,13,35}, -{35,13,36}, -{35,13,37}, -{35,13,38}, -{35,13,39}, -{35,13,40}, -{35,13,41}, -{35,13,42}, -{35,13,43}, -{35,13,44}, -{35,14,-51}, -{35,14,-50}, -{35,14,-49}, -{35,14,-48}, -{35,14,-47}, -{35,14,-46}, -{35,14,-45}, -{35,14,-44}, -{35,14,-43}, -{35,14,-42}, -{35,14,-41}, -{35,14,-40}, -{35,14,-39}, -{35,14,-38}, -{35,14,-37}, -{35,14,-36}, -{35,14,-35}, -{35,14,-34}, -{35,14,-33}, -{35,14,-32}, -{35,14,-31}, -{35,14,-30}, -{35,14,-29}, -{35,14,-28}, -{35,14,-27}, -{35,14,-26}, -{35,14,-25}, -{35,14,-24}, -{35,14,-23}, -{35,14,-22}, -{35,14,-21}, -{35,14,-20}, -{35,14,-19}, -{35,14,-18}, -{35,14,-17}, -{35,14,-16}, -{35,14,-15}, -{35,14,-14}, -{35,14,-13}, -{35,14,-12}, -{35,14,-11}, -{35,14,-10}, -{35,14,-9}, -{35,14,-8}, -{35,14,-7}, -{35,14,-6}, -{35,14,-5}, -{35,14,-4}, -{35,14,-3}, -{35,14,-2}, -{35,14,-1}, -{35,14,0}, -{35,14,1}, -{35,14,2}, -{35,14,3}, -{35,14,4}, -{35,14,5}, -{35,14,6}, -{35,14,7}, -{35,14,8}, -{35,14,9}, -{35,14,10}, -{35,14,11}, -{35,14,12}, -{35,14,13}, -{35,14,14}, -{35,14,15}, -{35,14,16}, -{35,14,17}, -{35,14,18}, -{35,14,19}, -{35,14,20}, -{35,14,21}, -{35,14,22}, -{35,14,23}, -{35,14,24}, -{35,14,25}, -{35,14,26}, -{35,14,27}, -{35,14,28}, -{35,14,29}, -{35,14,30}, -{35,14,31}, -{35,14,32}, -{35,14,33}, -{35,14,34}, -{35,14,35}, -{35,14,36}, -{35,14,37}, -{35,14,38}, -{35,14,39}, -{35,14,40}, -{35,14,41}, -{35,14,42}, -{35,14,43}, -{35,14,44}, -{35,15,-52}, -{35,15,-51}, -{35,15,-50}, -{35,15,-49}, -{35,15,-48}, -{35,15,-47}, -{35,15,-46}, -{35,15,-45}, -{35,15,-44}, -{35,15,-43}, -{35,15,-42}, -{35,15,-41}, -{35,15,-40}, -{35,15,-39}, -{35,15,-38}, -{35,15,-37}, -{35,15,-36}, -{35,15,-35}, -{35,15,-34}, -{35,15,-33}, -{35,15,-32}, -{35,15,-31}, -{35,15,-30}, -{35,15,-29}, -{35,15,-28}, -{35,15,-27}, -{35,15,-26}, -{35,15,-25}, -{35,15,-24}, -{35,15,-23}, -{35,15,-22}, -{35,15,-21}, -{35,15,-20}, -{35,15,-19}, -{35,15,-18}, -{35,15,-17}, -{35,15,-16}, -{35,15,-15}, -{35,15,-14}, -{35,15,-13}, -{35,15,-12}, -{35,15,-11}, -{35,15,-10}, -{35,15,-9}, -{35,15,-8}, -{35,15,-7}, -{35,15,-6}, -{35,15,-5}, -{35,15,-4}, -{35,15,-3}, -{35,15,-2}, -{35,15,-1}, -{35,15,0}, -{35,15,1}, -{35,15,2}, -{35,15,3}, -{35,15,4}, -{35,15,5}, -{35,15,6}, -{35,15,7}, -{35,15,8}, -{35,15,9}, -{35,15,10}, -{35,15,11}, -{35,15,12}, -{35,15,13}, -{35,15,14}, -{35,15,15}, -{35,15,16}, -{35,15,17}, -{35,15,18}, -{35,15,19}, -{35,15,20}, -{35,15,21}, -{35,15,22}, -{35,15,23}, -{35,15,24}, -{35,15,25}, -{35,15,26}, -{35,15,27}, -{35,15,28}, -{35,15,29}, -{35,15,30}, -{35,15,31}, -{35,15,32}, -{35,15,33}, -{35,15,34}, -{35,15,35}, -{35,15,36}, -{35,15,37}, -{35,15,38}, -{35,15,39}, -{35,15,40}, -{35,15,41}, -{35,15,42}, -{35,15,43}, -{35,15,44}, -{35,16,-53}, -{35,16,-52}, -{35,16,-51}, -{35,16,-50}, -{35,16,-49}, -{35,16,-48}, -{35,16,-47}, -{35,16,-46}, -{35,16,-45}, -{35,16,-44}, -{35,16,-43}, -{35,16,-42}, -{35,16,-41}, -{35,16,-40}, -{35,16,-39}, -{35,16,-38}, -{35,16,-37}, -{35,16,-36}, -{35,16,-35}, -{35,16,-34}, -{35,16,-33}, -{35,16,-32}, -{35,16,-31}, -{35,16,-30}, -{35,16,-29}, -{35,16,-28}, -{35,16,-27}, -{35,16,-26}, -{35,16,-25}, -{35,16,-24}, -{35,16,-23}, -{35,16,-22}, -{35,16,-21}, -{35,16,-20}, -{35,16,-19}, -{35,16,-18}, -{35,16,-17}, -{35,16,-16}, -{35,16,-15}, -{35,16,-14}, -{35,16,-13}, -{35,16,-12}, -{35,16,-11}, -{35,16,-10}, -{35,16,-9}, -{35,16,-8}, -{35,16,-7}, -{35,16,-6}, -{35,16,-5}, -{35,16,-4}, -{35,16,-3}, -{35,16,-2}, -{35,16,-1}, -{35,16,0}, -{35,16,1}, -{35,16,2}, -{35,16,3}, -{35,16,4}, -{35,16,5}, -{35,16,6}, -{35,16,7}, -{35,16,8}, -{35,16,9}, -{35,16,10}, -{35,16,11}, -{35,16,12}, -{35,16,13}, -{35,16,14}, -{35,16,15}, -{35,16,16}, -{35,16,17}, -{35,16,18}, -{35,16,19}, -{35,16,20}, -{35,16,21}, -{35,16,22}, -{35,16,23}, -{35,16,24}, -{35,16,25}, -{35,16,26}, -{35,16,27}, -{35,16,28}, -{35,16,29}, -{35,16,30}, -{35,16,31}, -{35,16,32}, -{35,16,33}, -{35,16,34}, -{35,16,35}, -{35,16,36}, -{35,16,37}, -{35,16,38}, -{35,16,39}, -{35,16,40}, -{35,16,41}, -{35,16,42}, -{35,16,43}, -{35,16,44}, -{35,17,-54}, -{35,17,-53}, -{35,17,-52}, -{35,17,-51}, -{35,17,-50}, -{35,17,-49}, -{35,17,-48}, -{35,17,-47}, -{35,17,-46}, -{35,17,-45}, -{35,17,-44}, -{35,17,-43}, -{35,17,-42}, -{35,17,-41}, -{35,17,-40}, -{35,17,-39}, -{35,17,-38}, -{35,17,-37}, -{35,17,-36}, -{35,17,-35}, -{35,17,-34}, -{35,17,-33}, -{35,17,-32}, -{35,17,-31}, -{35,17,-30}, -{35,17,-29}, -{35,17,-28}, -{35,17,-27}, -{35,17,-26}, -{35,17,-25}, -{35,17,-24}, -{35,17,-23}, -{35,17,-22}, -{35,17,-21}, -{35,17,-20}, -{35,17,-19}, -{35,17,-18}, -{35,17,-17}, -{35,17,-16}, -{35,17,-15}, -{35,17,-14}, -{35,17,-13}, -{35,17,-12}, -{35,17,-11}, -{35,17,-10}, -{35,17,-9}, -{35,17,-8}, -{35,17,-7}, -{35,17,-6}, -{35,17,-5}, -{35,17,-4}, -{35,17,-3}, -{35,17,-2}, -{35,17,-1}, -{35,17,0}, -{35,17,1}, -{35,17,2}, -{35,17,3}, -{35,17,4}, -{35,17,5}, -{35,17,6}, -{35,17,7}, -{35,17,8}, -{35,17,9}, -{35,17,10}, -{35,17,11}, -{35,17,12}, -{35,17,13}, -{35,17,14}, -{35,17,15}, -{35,17,16}, -{35,17,17}, -{35,17,18}, -{35,17,19}, -{35,17,20}, -{35,17,21}, -{35,17,22}, -{35,17,23}, -{35,17,24}, -{35,17,25}, -{35,17,26}, -{35,17,27}, -{35,17,28}, -{35,17,29}, -{35,17,30}, -{35,17,31}, -{35,17,32}, -{35,17,33}, -{35,17,34}, -{35,17,35}, -{35,17,36}, -{35,17,37}, -{35,17,38}, -{35,17,39}, -{35,17,40}, -{35,17,41}, -{35,17,42}, -{35,17,43}, -{35,17,44}, -{35,18,-55}, -{35,18,-54}, -{35,18,-53}, -{35,18,-52}, -{35,18,-51}, -{35,18,-50}, -{35,18,-49}, -{35,18,-48}, -{35,18,-47}, -{35,18,-46}, -{35,18,-45}, -{35,18,-44}, -{35,18,-43}, -{35,18,-42}, -{35,18,-41}, -{35,18,-40}, -{35,18,-39}, -{35,18,-38}, -{35,18,-37}, -{35,18,-36}, -{35,18,-35}, -{35,18,-34}, -{35,18,-33}, -{35,18,-32}, -{35,18,-31}, -{35,18,-30}, -{35,18,-29}, -{35,18,-28}, -{35,18,-27}, -{35,18,-26}, -{35,18,-25}, -{35,18,-24}, -{35,18,-23}, -{35,18,-22}, -{35,18,-21}, -{35,18,-20}, -{35,18,-19}, -{35,18,-18}, -{35,18,-17}, -{35,18,-16}, -{35,18,-15}, -{35,18,-14}, -{35,18,-13}, -{35,18,-12}, -{35,18,-11}, -{35,18,-10}, -{35,18,-9}, -{35,18,-8}, -{35,18,-7}, -{35,18,-6}, -{35,18,-5}, -{35,18,-4}, -{35,18,-3}, -{35,18,-2}, -{35,18,-1}, -{35,18,0}, -{35,18,1}, -{35,18,2}, -{35,18,3}, -{35,18,4}, -{35,18,5}, -{35,18,6}, -{35,18,7}, -{35,18,8}, -{35,18,9}, -{35,18,10}, -{35,18,11}, -{35,18,12}, -{35,18,13}, -{35,18,14}, -{35,18,15}, -{35,18,16}, -{35,18,17}, -{35,18,18}, -{35,18,19}, -{35,18,20}, -{35,18,21}, -{35,18,22}, -{35,18,23}, -{35,18,24}, -{35,18,25}, -{35,18,26}, -{35,18,27}, -{35,18,28}, -{35,18,29}, -{35,18,30}, -{35,18,31}, -{35,18,32}, -{35,18,33}, -{35,18,34}, -{35,18,35}, -{35,18,36}, -{35,18,37}, -{35,18,38}, -{35,18,39}, -{35,18,40}, -{35,18,41}, -{35,18,42}, -{35,18,43}, -{35,18,44}, -{35,19,-56}, -{35,19,-55}, -{35,19,-54}, -{35,19,-53}, -{35,19,-52}, -{35,19,-51}, -{35,19,-50}, -{35,19,-49}, -{35,19,-48}, -{35,19,-47}, -{35,19,-46}, -{35,19,-45}, -{35,19,-44}, -{35,19,-43}, -{35,19,-42}, -{35,19,-41}, -{35,19,-40}, -{35,19,-39}, -{35,19,-38}, -{35,19,-37}, -{35,19,-36}, -{35,19,-35}, -{35,19,-34}, -{35,19,-33}, -{35,19,-32}, -{35,19,-31}, -{35,19,-30}, -{35,19,-29}, -{35,19,-28}, -{35,19,-27}, -{35,19,-26}, -{35,19,-25}, -{35,19,-24}, -{35,19,-23}, -{35,19,-22}, -{35,19,-21}, -{35,19,-20}, -{35,19,-19}, -{35,19,-18}, -{35,19,-17}, -{35,19,-16}, -{35,19,-15}, -{35,19,-14}, -{35,19,-13}, -{35,19,-12}, -{35,19,-11}, -{35,19,-10}, -{35,19,-9}, -{35,19,-8}, -{35,19,-7}, -{35,19,-6}, -{35,19,-5}, -{35,19,-4}, -{35,19,-3}, -{35,19,-2}, -{35,19,-1}, -{35,19,0}, -{35,19,1}, -{35,19,2}, -{35,19,3}, -{35,19,4}, -{35,19,5}, -{35,19,6}, -{35,19,7}, -{35,19,8}, -{35,19,9}, -{35,19,10}, -{35,19,11}, -{35,19,12}, -{35,19,13}, -{35,19,14}, -{35,19,15}, -{35,19,16}, -{35,19,17}, -{35,19,18}, -{35,19,19}, -{35,19,20}, -{35,19,21}, -{35,19,22}, -{35,19,23}, -{35,19,24}, -{35,19,25}, -{35,19,26}, -{35,19,27}, -{35,19,28}, -{35,19,29}, -{35,19,30}, -{35,19,31}, -{35,19,32}, -{35,19,33}, -{35,19,34}, -{35,19,35}, -{35,19,36}, -{35,19,37}, -{35,19,38}, -{35,19,39}, -{35,19,40}, -{35,19,41}, -{35,19,42}, -{35,19,43}, -{35,19,44}, -{35,20,-57}, -{35,20,-56}, -{35,20,-55}, -{35,20,-54}, -{35,20,-53}, -{35,20,-52}, -{35,20,-51}, -{35,20,-50}, -{35,20,-49}, -{35,20,-48}, -{35,20,-47}, -{35,20,-46}, -{35,20,-45}, -{35,20,-44}, -{35,20,-43}, -{35,20,-42}, -{35,20,-41}, -{35,20,-40}, -{35,20,-39}, -{35,20,-38}, -{35,20,-37}, -{35,20,-36}, -{35,20,-35}, -{35,20,-34}, -{35,20,-33}, -{35,20,-32}, -{35,20,-31}, -{35,20,-30}, -{35,20,-29}, -{35,20,-28}, -{35,20,-27}, -{35,20,-26}, -{35,20,-25}, -{35,20,-24}, -{35,20,-23}, -{35,20,-22}, -{35,20,-21}, -{35,20,-20}, -{35,20,-19}, -{35,20,-18}, -{35,20,-17}, -{35,20,-16}, -{35,20,-15}, -{35,20,-14}, -{35,20,-13}, -{35,20,-12}, -{35,20,-11}, -{35,20,-10}, -{35,20,-9}, -{35,20,-8}, -{35,20,-7}, -{35,20,-6}, -{35,20,-5}, -{35,20,-4}, -{35,20,-3}, -{35,20,-2}, -{35,20,-1}, -{35,20,0}, -{35,20,1}, -{35,20,2}, -{35,20,3}, -{35,20,4}, -{35,20,5}, -{35,20,6}, -{35,20,7}, -{35,20,8}, -{35,20,9}, -{35,20,10}, -{35,20,11}, -{35,20,12}, -{35,20,13}, -{35,20,14}, -{35,20,15}, -{35,20,16}, -{35,20,17}, -{35,20,18}, -{35,20,19}, -{35,20,20}, -{35,20,21}, -{35,20,22}, -{35,20,23}, -{35,20,24}, -{35,20,25}, -{35,20,26}, -{35,20,27}, -{35,20,28}, -{35,20,29}, -{35,20,30}, -{35,20,31}, -{35,20,32}, -{35,20,33}, -{35,20,34}, -{35,20,35}, -{35,20,36}, -{35,20,37}, -{35,20,38}, -{35,20,39}, -{35,20,40}, -{35,20,41}, -{35,20,42}, -{35,20,43}, -{35,20,44}, -{35,20,45}, -{35,21,-58}, -{35,21,-57}, -{35,21,-56}, -{35,21,-55}, -{35,21,-54}, -{35,21,-53}, -{35,21,-52}, -{35,21,-51}, -{35,21,-50}, -{35,21,-49}, -{35,21,-48}, -{35,21,-47}, -{35,21,-46}, -{35,21,-45}, -{35,21,-44}, -{35,21,-43}, -{35,21,-42}, -{35,21,-41}, -{35,21,-40}, -{35,21,-39}, -{35,21,-38}, -{35,21,-37}, -{35,21,-36}, -{35,21,-35}, -{35,21,-34}, -{35,21,-33}, -{35,21,-32}, -{35,21,-31}, -{35,21,-30}, -{35,21,-29}, -{35,21,-28}, -{35,21,-27}, -{35,21,-26}, -{35,21,-25}, -{35,21,-24}, -{35,21,-23}, -{35,21,-22}, -{35,21,-21}, -{35,21,-20}, -{35,21,-19}, -{35,21,-18}, -{35,21,-17}, -{35,21,-16}, -{35,21,-15}, -{35,21,-14}, -{35,21,-13}, -{35,21,-12}, -{35,21,-11}, -{35,21,-10}, -{35,21,-9}, -{35,21,-8}, -{35,21,-7}, -{35,21,-6}, -{35,21,-5}, -{35,21,-4}, -{35,21,-3}, -{35,21,-2}, -{35,21,-1}, -{35,21,0}, -{35,21,1}, -{35,21,2}, -{35,21,3}, -{35,21,4}, -{35,21,5}, -{35,21,6}, -{35,21,7}, -{35,21,8}, -{35,21,9}, -{35,21,10}, -{35,21,11}, -{35,21,12}, -{35,21,13}, -{35,21,14}, -{35,21,15}, -{35,21,16}, -{35,21,17}, -{35,21,18}, -{35,21,19}, -{35,21,20}, -{35,21,21}, -{35,21,22}, -{35,21,23}, -{35,21,24}, -{35,21,25}, -{35,21,26}, -{35,21,27}, -{35,21,28}, -{35,21,29}, -{35,21,30}, -{35,21,31}, -{35,21,32}, -{35,21,33}, -{35,21,34}, -{35,21,35}, -{35,21,36}, -{35,21,37}, -{35,21,38}, -{35,21,39}, -{35,21,40}, -{35,21,41}, -{35,21,42}, -{35,21,43}, -{35,21,44}, -{35,21,45}, -{35,22,-59}, -{35,22,-58}, -{35,22,-57}, -{35,22,-56}, -{35,22,-55}, -{35,22,-54}, -{35,22,-53}, -{35,22,-52}, -{35,22,-51}, -{35,22,-50}, -{35,22,-49}, -{35,22,-48}, -{35,22,-47}, -{35,22,-46}, -{35,22,-45}, -{35,22,-44}, -{35,22,-43}, -{35,22,-42}, -{35,22,-41}, -{35,22,-40}, -{35,22,-39}, -{35,22,-38}, -{35,22,-37}, -{35,22,-36}, -{35,22,-35}, -{35,22,-34}, -{35,22,-33}, -{35,22,-32}, -{35,22,-31}, -{35,22,-30}, -{35,22,-29}, -{35,22,-28}, -{35,22,-27}, -{35,22,-26}, -{35,22,-25}, -{35,22,-24}, -{35,22,-23}, -{35,22,-22}, -{35,22,-21}, -{35,22,-20}, -{35,22,-19}, -{35,22,-18}, -{35,22,-17}, -{35,22,-16}, -{35,22,-15}, -{35,22,-14}, -{35,22,-13}, -{35,22,-12}, -{35,22,-11}, -{35,22,-10}, -{35,22,-9}, -{35,22,-8}, -{35,22,-7}, -{35,22,-6}, -{35,22,-5}, -{35,22,-4}, -{35,22,-3}, -{35,22,-2}, -{35,22,-1}, -{35,22,0}, -{35,22,1}, -{35,22,2}, -{35,22,3}, -{35,22,4}, -{35,22,5}, -{35,22,6}, -{35,22,7}, -{35,22,8}, -{35,22,9}, -{35,22,10}, -{35,22,11}, -{35,22,12}, -{35,22,13}, -{35,22,14}, -{35,22,15}, -{35,22,16}, -{35,22,17}, -{35,22,18}, -{35,22,19}, -{35,22,20}, -{35,22,21}, -{35,22,22}, -{35,22,23}, -{35,22,24}, -{35,22,25}, -{35,22,26}, -{35,22,27}, -{35,22,28}, -{35,22,29}, -{35,22,30}, -{35,22,31}, -{35,22,32}, -{35,22,33}, -{35,22,34}, -{35,22,35}, -{35,22,36}, -{35,22,37}, -{35,22,38}, -{35,22,39}, -{35,22,40}, -{35,22,41}, -{35,22,42}, -{35,22,43}, -{35,22,44}, -{35,22,45}, -{35,23,-60}, -{35,23,-59}, -{35,23,-58}, -{35,23,-57}, -{35,23,-56}, -{35,23,-55}, -{35,23,-54}, -{35,23,-53}, -{35,23,-52}, -{35,23,-51}, -{35,23,-50}, -{35,23,-49}, -{35,23,-48}, -{35,23,-47}, -{35,23,-46}, -{35,23,-45}, -{35,23,-44}, -{35,23,-43}, -{35,23,-42}, -{35,23,-41}, -{35,23,-40}, -{35,23,-39}, -{35,23,-38}, -{35,23,-37}, -{35,23,-36}, -{35,23,-35}, -{35,23,-34}, -{35,23,-33}, -{35,23,-32}, -{35,23,-31}, -{35,23,-30}, -{35,23,-29}, -{35,23,-28}, -{35,23,-27}, -{35,23,-26}, -{35,23,-25}, -{35,23,-24}, -{35,23,-23}, -{35,23,-22}, -{35,23,-21}, -{35,23,-20}, -{35,23,-19}, -{35,23,-18}, -{35,23,-17}, -{35,23,-16}, -{35,23,-15}, -{35,23,-14}, -{35,23,-13}, -{35,23,-12}, -{35,23,-11}, -{35,23,-10}, -{35,23,-9}, -{35,23,-8}, -{35,23,-7}, -{35,23,-6}, -{35,23,-5}, -{35,23,-4}, -{35,23,-3}, -{35,23,-2}, -{35,23,-1}, -{35,23,0}, -{35,23,1}, -{35,23,2}, -{35,23,3}, -{35,23,4}, -{35,23,5}, -{35,23,6}, -{35,23,7}, -{35,23,8}, -{35,23,9}, -{35,23,10}, -{35,23,11}, -{35,23,12}, -{35,23,13}, -{35,23,14}, -{35,23,15}, -{35,23,16}, -{35,23,17}, -{35,23,18}, -{35,23,19}, -{35,23,20}, -{35,23,21}, -{35,23,22}, -{35,23,23}, -{35,23,24}, -{35,23,25}, -{35,23,26}, -{35,23,27}, -{35,23,28}, -{35,23,29}, -{35,23,30}, -{35,23,31}, -{35,23,32}, -{35,23,33}, -{35,23,34}, -{35,23,35}, -{35,23,36}, -{35,23,37}, -{35,23,38}, -{35,23,39}, -{35,23,40}, -{35,23,41}, -{35,23,42}, -{35,23,43}, -{35,23,44}, -{35,23,45}, -{35,24,-61}, -{35,24,-60}, -{35,24,-59}, -{35,24,-58}, -{35,24,-57}, -{35,24,-56}, -{35,24,-55}, -{35,24,-54}, -{35,24,-53}, -{35,24,-52}, -{35,24,-51}, -{35,24,-50}, -{35,24,-49}, -{35,24,-48}, -{35,24,-47}, -{35,24,-46}, -{35,24,-45}, -{35,24,-44}, -{35,24,-43}, -{35,24,-42}, -{35,24,-41}, -{35,24,-40}, -{35,24,-39}, -{35,24,-38}, -{35,24,-37}, -{35,24,-36}, -{35,24,-35}, -{35,24,-34}, -{35,24,-33}, -{35,24,-32}, -{35,24,-31}, -{35,24,-30}, -{35,24,-29}, -{35,24,-28}, -{35,24,-27}, -{35,24,-26}, -{35,24,-25}, -{35,24,-24}, -{35,24,-23}, -{35,24,-22}, -{35,24,-21}, -{35,24,-20}, -{35,24,-19}, -{35,24,-18}, -{35,24,-17}, -{35,24,-16}, -{35,24,-15}, -{35,24,-14}, -{35,24,-13}, -{35,24,-12}, -{35,24,-11}, -{35,24,-10}, -{35,24,-9}, -{35,24,-8}, -{35,24,-7}, -{35,24,-6}, -{35,24,-5}, -{35,24,-4}, -{35,24,-3}, -{35,24,-2}, -{35,24,-1}, -{35,24,0}, -{35,24,1}, -{35,24,2}, -{35,24,3}, -{35,24,4}, -{35,24,5}, -{35,24,6}, -{35,24,7}, -{35,24,8}, -{35,24,9}, -{35,24,10}, -{35,24,11}, -{35,24,12}, -{35,24,13}, -{35,24,14}, -{35,24,15}, -{35,24,16}, -{35,24,17}, -{35,24,18}, -{35,24,19}, -{35,24,20}, -{35,24,21}, -{35,24,22}, -{35,24,23}, -{35,24,24}, -{35,24,25}, -{35,24,26}, -{35,24,27}, -{35,24,28}, -{35,24,29}, -{35,24,30}, -{35,24,31}, -{35,24,32}, -{35,24,33}, -{35,24,34}, -{35,24,35}, -{35,24,36}, -{35,24,37}, -{35,24,38}, -{35,24,39}, -{35,24,40}, -{35,24,41}, -{35,24,42}, -{35,24,43}, -{35,24,44}, -{35,24,45}, -{35,25,-62}, -{35,25,-61}, -{35,25,-60}, -{35,25,-59}, -{35,25,-58}, -{35,25,-57}, -{35,25,-56}, -{35,25,-55}, -{35,25,-54}, -{35,25,-53}, -{35,25,-52}, -{35,25,-51}, -{35,25,-50}, -{35,25,-49}, -{35,25,-48}, -{35,25,-47}, -{35,25,-46}, -{35,25,-45}, -{35,25,-44}, -{35,25,-43}, -{35,25,-42}, -{35,25,-41}, -{35,25,-40}, -{35,25,-39}, -{35,25,-38}, -{35,25,-37}, -{35,25,-36}, -{35,25,-35}, -{35,25,-34}, -{35,25,-33}, -{35,25,-32}, -{35,25,-31}, -{35,25,-30}, -{35,25,-29}, -{35,25,-28}, -{35,25,-27}, -{35,25,-26}, -{35,25,-25}, -{35,25,-24}, -{35,25,-23}, -{35,25,-22}, -{35,25,-21}, -{35,25,-20}, -{35,25,-19}, -{35,25,-18}, -{35,25,-17}, -{35,25,-16}, -{35,25,-15}, -{35,25,-14}, -{35,25,-13}, -{35,25,-12}, -{35,25,-11}, -{35,25,-10}, -{35,25,-9}, -{35,25,-8}, -{35,25,-7}, -{35,25,-6}, -{35,25,-5}, -{35,25,-4}, -{35,25,-3}, -{35,25,-2}, -{35,25,-1}, -{35,25,0}, -{35,25,1}, -{35,25,2}, -{35,25,3}, -{35,25,4}, -{35,25,5}, -{35,25,6}, -{35,25,7}, -{35,25,8}, -{35,25,9}, -{35,25,10}, -{35,25,11}, -{35,25,12}, -{35,25,13}, -{35,25,14}, -{35,25,15}, -{35,25,16}, -{35,25,17}, -{35,25,18}, -{35,25,19}, -{35,25,20}, -{35,25,21}, -{35,25,22}, -{35,25,23}, -{35,25,24}, -{35,25,25}, -{35,25,26}, -{35,25,27}, -{35,25,28}, -{35,25,29}, -{35,25,30}, -{35,25,31}, -{35,25,32}, -{35,25,33}, -{35,25,34}, -{35,25,35}, -{35,25,36}, -{35,25,37}, -{35,25,38}, -{35,25,39}, -{35,25,40}, -{35,25,41}, -{35,25,42}, -{35,25,43}, -{35,25,44}, -{35,25,45}, -{35,26,-63}, -{35,26,-62}, -{35,26,-61}, -{35,26,-60}, -{35,26,-59}, -{35,26,-58}, -{35,26,-57}, -{35,26,-56}, -{35,26,-55}, -{35,26,-54}, -{35,26,-53}, -{35,26,-52}, -{35,26,-51}, -{35,26,-50}, -{35,26,-49}, -{35,26,-48}, -{35,26,-47}, -{35,26,-46}, -{35,26,-45}, -{35,26,-44}, -{35,26,-43}, -{35,26,-42}, -{35,26,-41}, -{35,26,-40}, -{35,26,-39}, -{35,26,-38}, -{35,26,-37}, -{35,26,-36}, -{35,26,-35}, -{35,26,-34}, -{35,26,-33}, -{35,26,-32}, -{35,26,-31}, -{35,26,-30}, -{35,26,-29}, -{35,26,-28}, -{35,26,-27}, -{35,26,-26}, -{35,26,-25}, -{35,26,-24}, -{35,26,-23}, -{35,26,-22}, -{35,26,-21}, -{35,26,-20}, -{35,26,-19}, -{35,26,-18}, -{35,26,-17}, -{35,26,-16}, -{35,26,-15}, -{35,26,-14}, -{35,26,-13}, -{35,26,-12}, -{35,26,-11}, -{35,26,-10}, -{35,26,-9}, -{35,26,-8}, -{35,26,-7}, -{35,26,-6}, -{35,26,-5}, -{35,26,-4}, -{35,26,-3}, -{35,26,-2}, -{35,26,-1}, -{35,26,0}, -{35,26,1}, -{35,26,2}, -{35,26,3}, -{35,26,4}, -{35,26,5}, -{35,26,6}, -{35,26,7}, -{35,26,8}, -{35,26,9}, -{35,26,10}, -{35,26,11}, -{35,26,12}, -{35,26,13}, -{35,26,14}, -{35,26,15}, -{35,26,16}, -{35,26,17}, -{35,26,18}, -{35,26,19}, -{35,26,20}, -{35,26,21}, -{35,26,22}, -{35,26,23}, -{35,26,24}, -{35,26,25}, -{35,26,26}, -{35,26,27}, -{35,26,28}, -{35,26,29}, -{35,26,30}, -{35,26,31}, -{35,26,32}, -{35,26,33}, -{35,26,34}, -{35,26,35}, -{35,26,36}, -{35,26,37}, -{35,26,38}, -{35,26,39}, -{35,26,40}, -{35,26,41}, -{35,26,42}, -{35,26,43}, -{35,26,44}, -{35,26,45}, -{35,27,-64}, -{35,27,-63}, -{35,27,-62}, -{35,27,-61}, -{35,27,-60}, -{35,27,-59}, -{35,27,-58}, -{35,27,-57}, -{35,27,-56}, -{35,27,-55}, -{35,27,-54}, -{35,27,-53}, -{35,27,-52}, -{35,27,-51}, -{35,27,-50}, -{35,27,-49}, -{35,27,-48}, -{35,27,-47}, -{35,27,-46}, -{35,27,-45}, -{35,27,-44}, -{35,27,-43}, -{35,27,-42}, -{35,27,-41}, -{35,27,-40}, -{35,27,-39}, -{35,27,-38}, -{35,27,-37}, -{35,27,-36}, -{35,27,-35}, -{35,27,-34}, -{35,27,-33}, -{35,27,-32}, -{35,27,-31}, -{35,27,-30}, -{35,27,-29}, -{35,27,-28}, -{35,27,-27}, -{35,27,-26}, -{35,27,-25}, -{35,27,-24}, -{35,27,-23}, -{35,27,-22}, -{35,27,-21}, -{35,27,-20}, -{35,27,-19}, -{35,27,-18}, -{35,27,-17}, -{35,27,-16}, -{35,27,-15}, -{35,27,-14}, -{35,27,-13}, -{35,27,-12}, -{35,27,-11}, -{35,27,-10}, -{35,27,-9}, -{35,27,-8}, -{35,27,-7}, -{35,27,-6}, -{35,27,-5}, -{35,27,-4}, -{35,27,-3}, -{35,27,-2}, -{35,27,-1}, -{35,27,0}, -{35,27,1}, -{35,27,2}, -{35,27,3}, -{35,27,4}, -{35,27,5}, -{35,27,6}, -{35,27,7}, -{35,27,8}, -{35,27,9}, -{35,27,10}, -{35,27,11}, -{35,27,12}, -{35,27,13}, -{35,27,14}, -{35,27,15}, -{35,27,16}, -{35,27,17}, -{35,27,18}, -{35,27,19}, -{35,27,20}, -{35,27,21}, -{35,27,22}, -{35,27,23}, -{35,27,24}, -{35,27,25}, -{35,27,26}, -{35,27,27}, -{35,27,28}, -{35,27,29}, -{35,27,30}, -{35,27,31}, -{35,27,32}, -{35,27,33}, -{35,27,34}, -{35,27,35}, -{35,27,36}, -{35,27,37}, -{35,27,38}, -{35,27,39}, -{35,27,40}, -{35,27,41}, -{35,27,42}, -{35,27,43}, -{35,27,44}, -{35,27,45}, -{35,28,-65}, -{35,28,-64}, -{35,28,-63}, -{35,28,-62}, -{35,28,-61}, -{35,28,-60}, -{35,28,-59}, -{35,28,-58}, -{35,28,-57}, -{35,28,-56}, -{35,28,-55}, -{35,28,-54}, -{35,28,-53}, -{35,28,-52}, -{35,28,-51}, -{35,28,-50}, -{35,28,-49}, -{35,28,-48}, -{35,28,-47}, -{35,28,-46}, -{35,28,-45}, -{35,28,-44}, -{35,28,-43}, -{35,28,-42}, -{35,28,-41}, -{35,28,-40}, -{35,28,-39}, -{35,28,-38}, -{35,28,-37}, -{35,28,-36}, -{35,28,-35}, -{35,28,-34}, -{35,28,-33}, -{35,28,-32}, -{35,28,-31}, -{35,28,-30}, -{35,28,-29}, -{35,28,-28}, -{35,28,-27}, -{35,28,-26}, -{35,28,-25}, -{35,28,-24}, -{35,28,-23}, -{35,28,-22}, -{35,28,-21}, -{35,28,-20}, -{35,28,-19}, -{35,28,-18}, -{35,28,-17}, -{35,28,-16}, -{35,28,-15}, -{35,28,-14}, -{35,28,-13}, -{35,28,-12}, -{35,28,-11}, -{35,28,-10}, -{35,28,-9}, -{35,28,-8}, -{35,28,-7}, -{35,28,-6}, -{35,28,-5}, -{35,28,-4}, -{35,28,-3}, -{35,28,-2}, -{35,28,-1}, -{35,28,0}, -{35,28,1}, -{35,28,2}, -{35,28,3}, -{35,28,4}, -{35,28,5}, -{35,28,6}, -{35,28,7}, -{35,28,8}, -{35,28,9}, -{35,28,10}, -{35,28,11}, -{35,28,12}, -{35,28,13}, -{35,28,14}, -{35,28,15}, -{35,28,16}, -{35,28,17}, -{35,28,18}, -{35,28,19}, -{35,28,20}, -{35,28,21}, -{35,28,22}, -{35,28,23}, -{35,28,24}, -{35,28,25}, -{35,28,26}, -{35,28,27}, -{35,28,28}, -{35,28,29}, -{35,28,30}, -{35,28,31}, -{35,28,32}, -{35,28,33}, -{35,28,34}, -{35,28,35}, -{35,28,36}, -{35,28,37}, -{35,28,38}, -{35,28,39}, -{35,28,40}, -{35,28,41}, -{35,28,42}, -{35,28,43}, -{35,28,44}, -{35,28,45}, -{35,29,-66}, -{35,29,-65}, -{35,29,-64}, -{35,29,-63}, -{35,29,-62}, -{35,29,-61}, -{35,29,-60}, -{35,29,-59}, -{35,29,-58}, -{35,29,-57}, -{35,29,-56}, -{35,29,-55}, -{35,29,-54}, -{35,29,-53}, -{35,29,-52}, -{35,29,-51}, -{35,29,-50}, -{35,29,-49}, -{35,29,-48}, -{35,29,-47}, -{35,29,-46}, -{35,29,-45}, -{35,29,-44}, -{35,29,-43}, -{35,29,-42}, -{35,29,-41}, -{35,29,-40}, -{35,29,-39}, -{35,29,-38}, -{35,29,-37}, -{35,29,-36}, -{35,29,-35}, -{35,29,-34}, -{35,29,-33}, -{35,29,-32}, -{35,29,-31}, -{35,29,-30}, -{35,29,-29}, -{35,29,-28}, -{35,29,-27}, -{35,29,-26}, -{35,29,-25}, -{35,29,-24}, -{35,29,-23}, -{35,29,-22}, -{35,29,-21}, -{35,29,-20}, -{35,29,-19}, -{35,29,-18}, -{35,29,-17}, -{35,29,-16}, -{35,29,-15}, -{35,29,-14}, -{35,29,-13}, -{35,29,-12}, -{35,29,-11}, -{35,29,-10}, -{35,29,-9}, -{35,29,-8}, -{35,29,-7}, -{35,29,-6}, -{35,29,-5}, -{35,29,-4}, -{35,29,-3}, -{35,29,-2}, -{35,29,-1}, -{35,29,0}, -{35,29,1}, -{35,29,2}, -{35,29,3}, -{35,29,4}, -{35,29,5}, -{35,29,6}, -{35,29,7}, -{35,29,8}, -{35,29,9}, -{35,29,10}, -{35,29,11}, -{35,29,12}, -{35,29,13}, -{35,29,14}, -{35,29,15}, -{35,29,16}, -{35,29,17}, -{35,29,18}, -{35,29,19}, -{35,29,20}, -{35,29,21}, -{35,29,22}, -{35,29,23}, -{35,29,24}, -{35,29,25}, -{35,29,26}, -{35,29,27}, -{35,29,28}, -{35,29,29}, -{35,29,30}, -{35,29,31}, -{35,29,32}, -{35,29,33}, -{35,29,34}, -{35,29,35}, -{35,29,36}, -{35,29,37}, -{35,29,38}, -{35,29,39}, -{35,29,40}, -{35,29,41}, -{35,29,42}, -{35,29,43}, -{35,29,44}, -{35,29,45}, -{35,30,-67}, -{35,30,-66}, -{35,30,-65}, -{35,30,-64}, -{35,30,-63}, -{35,30,-62}, -{35,30,-61}, -{35,30,-60}, -{35,30,-59}, -{35,30,-58}, -{35,30,-57}, -{35,30,-56}, -{35,30,-55}, -{35,30,-54}, -{35,30,-53}, -{35,30,-52}, -{35,30,-51}, -{35,30,-50}, -{35,30,-49}, -{35,30,-48}, -{35,30,-47}, -{35,30,-46}, -{35,30,-45}, -{35,30,-44}, -{35,30,-43}, -{35,30,-42}, -{35,30,-41}, -{35,30,-40}, -{35,30,-39}, -{35,30,-38}, -{35,30,-37}, -{35,30,-36}, -{35,30,-35}, -{35,30,-34}, -{35,30,-33}, -{35,30,-32}, -{35,30,-31}, -{35,30,-30}, -{35,30,-29}, -{35,30,-28}, -{35,30,-27}, -{35,30,-26}, -{35,30,-25}, -{35,30,-24}, -{35,30,-23}, -{35,30,-22}, -{35,30,-21}, -{35,30,-20}, -{35,30,-19}, -{35,30,-18}, -{35,30,-17}, -{35,30,-16}, -{35,30,-15}, -{35,30,-14}, -{35,30,-13}, -{35,30,-12}, -{35,30,-11}, -{35,30,-10}, -{35,30,-9}, -{35,30,-8}, -{35,30,-7}, -{35,30,-6}, -{35,30,-5}, -{35,30,-4}, -{35,30,-3}, -{35,30,-2}, -{35,30,-1}, -{35,30,0}, -{35,30,1}, -{35,30,2}, -{35,30,3}, -{35,30,4}, -{35,30,5}, -{35,30,6}, -{35,30,7}, -{35,30,8}, -{35,30,9}, -{35,30,10}, -{35,30,11}, -{35,30,12}, -{35,30,13}, -{35,30,14}, -{35,30,15}, -{35,30,16}, -{35,30,17}, -{35,30,18}, -{35,30,19}, -{35,30,20}, -{35,30,21}, -{35,30,22}, -{35,30,23}, -{35,30,24}, -{35,30,25}, -{35,30,26}, -{35,30,27}, -{35,30,28}, -{35,30,29}, -{35,30,30}, -{35,30,31}, -{35,30,32}, -{35,30,33}, -{35,30,34}, -{35,30,35}, -{35,30,36}, -{35,30,37}, -{35,30,38}, -{35,30,39}, -{35,30,40}, -{35,30,41}, -{35,30,42}, -{35,30,43}, -{35,30,44}, -{35,30,45}, -{35,30,46}, -{35,31,-68}, -{35,31,-67}, -{35,31,-66}, -{35,31,-65}, -{35,31,-64}, -{35,31,-63}, -{35,31,-62}, -{35,31,-61}, -{35,31,-60}, -{35,31,-59}, -{35,31,-58}, -{35,31,-57}, -{35,31,-56}, -{35,31,-55}, -{35,31,-54}, -{35,31,-53}, -{35,31,-52}, -{35,31,-51}, -{35,31,-50}, -{35,31,-49}, -{35,31,-48}, -{35,31,-47}, -{35,31,-46}, -{35,31,-45}, -{35,31,-44}, -{35,31,-43}, -{35,31,-42}, -{35,31,-41}, -{35,31,-40}, -{35,31,-39}, -{35,31,-38}, -{35,31,-37}, -{35,31,-36}, -{35,31,-35}, -{35,31,-34}, -{35,31,-33}, -{35,31,-32}, -{35,31,-31}, -{35,31,-30}, -{35,31,-29}, -{35,31,-28}, -{35,31,-27}, -{35,31,-26}, -{35,31,-25}, -{35,31,-24}, -{35,31,-23}, -{35,31,-22}, -{35,31,-21}, -{35,31,-20}, -{35,31,-19}, -{35,31,-18}, -{35,31,-17}, -{35,31,-16}, -{35,31,-15}, -{35,31,-14}, -{35,31,-13}, -{35,31,-12}, -{35,31,-11}, -{35,31,-10}, -{35,31,-9}, -{35,31,-8}, -{35,31,-7}, -{35,31,-6}, -{35,31,-5}, -{35,31,-4}, -{35,31,-3}, -{35,31,-2}, -{35,31,-1}, -{35,31,0}, -{35,31,1}, -{35,31,2}, -{35,31,3}, -{35,31,4}, -{35,31,5}, -{35,31,6}, -{35,31,7}, -{35,31,8}, -{35,31,9}, -{35,31,10}, -{35,31,11}, -{35,31,12}, -{35,31,13}, -{35,31,14}, -{35,31,15}, -{35,31,16}, -{35,31,17}, -{35,31,18}, -{35,31,19}, -{35,31,20}, -{35,31,21}, -{35,31,22}, -{35,31,23}, -{35,31,24}, -{35,31,25}, -{35,31,26}, -{35,31,27}, -{35,31,28}, -{35,31,29}, -{35,31,30}, -{35,31,31}, -{35,31,32}, -{35,31,33}, -{35,31,34}, -{35,31,35}, -{35,31,36}, -{35,31,37}, -{35,31,38}, -{35,31,39}, -{35,31,40}, -{35,31,41}, -{35,31,42}, -{35,31,43}, -{35,31,44}, -{35,31,45}, -{35,31,46}, -{35,32,-69}, -{35,32,-68}, -{35,32,-67}, -{35,32,-66}, -{35,32,-65}, -{35,32,-64}, -{35,32,-63}, -{35,32,-62}, -{35,32,-61}, -{35,32,-60}, -{35,32,-59}, -{35,32,-58}, -{35,32,-57}, -{35,32,-56}, -{35,32,-55}, -{35,32,-54}, -{35,32,-53}, -{35,32,-52}, -{35,32,-51}, -{35,32,-50}, -{35,32,-49}, -{35,32,-48}, -{35,32,-47}, -{35,32,-46}, -{35,32,-45}, -{35,32,-44}, -{35,32,-43}, -{35,32,-42}, -{35,32,-41}, -{35,32,-40}, -{35,32,-39}, -{35,32,-38}, -{35,32,-37}, -{35,32,-36}, -{35,32,-35}, -{35,32,-34}, -{35,32,-33}, -{35,32,-32}, -{35,32,-31}, -{35,32,-30}, -{35,32,-29}, -{35,32,-28}, -{35,32,-27}, -{35,32,-26}, -{35,32,-25}, -{35,32,-24}, -{35,32,-23}, -{35,32,-22}, -{35,32,-21}, -{35,32,-20}, -{35,32,-19}, -{35,32,-18}, -{35,32,-17}, -{35,32,-16}, -{35,32,-15}, -{35,32,-14}, -{35,32,-13}, -{35,32,-12}, -{35,32,-11}, -{35,32,-10}, -{35,32,-9}, -{35,32,-8}, -{35,32,-7}, -{35,32,-6}, -{35,32,-5}, -{35,32,-4}, -{35,32,-3}, -{35,32,-2}, -{35,32,-1}, -{35,32,0}, -{35,32,1}, -{35,32,2}, -{35,32,3}, -{35,32,4}, -{35,32,5}, -{35,32,6}, -{35,32,7}, -{35,32,8}, -{35,32,9}, -{35,32,10}, -{35,32,11}, -{35,32,12}, -{35,32,13}, -{35,32,14}, -{35,32,15}, -{35,32,16}, -{35,32,17}, -{35,32,18}, -{35,32,19}, -{35,32,20}, -{35,32,21}, -{35,32,22}, -{35,32,23}, -{35,32,24}, -{35,32,25}, -{35,32,26}, -{35,32,27}, -{35,32,28}, -{35,32,29}, -{35,32,30}, -{35,32,31}, -{35,32,32}, -{35,32,33}, -{35,32,34}, -{35,32,35}, -{35,32,36}, -{35,32,37}, -{35,32,38}, -{35,32,39}, -{35,32,40}, -{35,32,41}, -{35,32,42}, -{35,32,43}, -{35,32,44}, -{35,32,45}, -{35,32,46}, -{35,33,-70}, -{35,33,-69}, -{35,33,-68}, -{35,33,-67}, -{35,33,-66}, -{35,33,-65}, -{35,33,-64}, -{35,33,-63}, -{35,33,-62}, -{35,33,-61}, -{35,33,-60}, -{35,33,-59}, -{35,33,-58}, -{35,33,-57}, -{35,33,-56}, -{35,33,-55}, -{35,33,-54}, -{35,33,-53}, -{35,33,-52}, -{35,33,-51}, -{35,33,-50}, -{35,33,-49}, -{35,33,-48}, -{35,33,-47}, -{35,33,-46}, -{35,33,-45}, -{35,33,-44}, -{35,33,-43}, -{35,33,-42}, -{35,33,-41}, -{35,33,-40}, -{35,33,-39}, -{35,33,-38}, -{35,33,-37}, -{35,33,-36}, -{35,33,-35}, -{35,33,-34}, -{35,33,-33}, -{35,33,-32}, -{35,33,-31}, -{35,33,-30}, -{35,33,-29}, -{35,33,-28}, -{35,33,-27}, -{35,33,-26}, -{35,33,-25}, -{35,33,-24}, -{35,33,-23}, -{35,33,-22}, -{35,33,-21}, -{35,33,-20}, -{35,33,-19}, -{35,33,-18}, -{35,33,-17}, -{35,33,-16}, -{35,33,-15}, -{35,33,-14}, -{35,33,-13}, -{35,33,-12}, -{35,33,-11}, -{35,33,-10}, -{35,33,-9}, -{35,33,-8}, -{35,33,-7}, -{35,33,-6}, -{35,33,-5}, -{35,33,-4}, -{35,33,-3}, -{35,33,-2}, -{35,33,-1}, -{35,33,0}, -{35,33,1}, -{35,33,2}, -{35,33,3}, -{35,33,4}, -{35,33,5}, -{35,33,6}, -{35,33,7}, -{35,33,8}, -{35,33,9}, -{35,33,10}, -{35,33,11}, -{35,33,12}, -{35,33,13}, -{35,33,14}, -{35,33,15}, -{35,33,16}, -{35,33,17}, -{35,33,18}, -{35,33,19}, -{35,33,20}, -{35,33,21}, -{35,33,22}, -{35,33,23}, -{35,33,24}, -{35,33,25}, -{35,33,26}, -{35,33,27}, -{35,33,28}, -{35,33,29}, -{35,33,30}, -{35,33,31}, -{35,33,32}, -{35,33,33}, -{35,33,34}, -{35,33,35}, -{35,33,36}, -{35,33,37}, -{35,33,38}, -{35,33,39}, -{35,33,40}, -{35,33,41}, -{35,33,42}, -{35,33,43}, -{35,33,44}, -{35,33,45}, -{35,33,46}, -{35,34,-71}, -{35,34,-70}, -{35,34,-69}, -{35,34,-68}, -{35,34,-67}, -{35,34,-66}, -{35,34,-65}, -{35,34,-64}, -{35,34,-63}, -{35,34,-62}, -{35,34,-61}, -{35,34,-60}, -{35,34,-59}, -{35,34,-58}, -{35,34,-57}, -{35,34,-56}, -{35,34,-55}, -{35,34,-54}, -{35,34,-53}, -{35,34,-52}, -{35,34,-51}, -{35,34,-50}, -{35,34,-49}, -{35,34,-48}, -{35,34,-47}, -{35,34,-46}, -{35,34,-45}, -{35,34,-44}, -{35,34,-43}, -{35,34,-42}, -{35,34,-41}, -{35,34,-40}, -{35,34,-39}, -{35,34,-38}, -{35,34,-37}, -{35,34,-36}, -{35,34,-35}, -{35,34,-34}, -{35,34,-33}, -{35,34,-32}, -{35,34,-31}, -{35,34,-30}, -{35,34,-29}, -{35,34,-28}, -{35,34,-27}, -{35,34,-26}, -{35,34,-25}, -{35,34,-24}, -{35,34,-23}, -{35,34,-22}, -{35,34,-21}, -{35,34,-20}, -{35,34,-19}, -{35,34,-18}, -{35,34,-17}, -{35,34,-16}, -{35,34,-15}, -{35,34,-14}, -{35,34,-13}, -{35,34,-12}, -{35,34,-11}, -{35,34,-10}, -{35,34,-9}, -{35,34,-8}, -{35,34,-7}, -{35,34,-6}, -{35,34,-5}, -{35,34,-4}, -{35,34,-3}, -{35,34,-2}, -{35,34,-1}, -{35,34,0}, -{35,34,1}, -{35,34,2}, -{35,34,3}, -{35,34,4}, -{35,34,5}, -{35,34,6}, -{35,34,7}, -{35,34,8}, -{35,34,9}, -{35,34,10}, -{35,34,11}, -{35,34,12}, -{35,34,13}, -{35,34,14}, -{35,34,15}, -{35,34,16}, -{35,34,17}, -{35,34,18}, -{35,34,19}, -{35,34,20}, -{35,34,21}, -{35,34,22}, -{35,34,23}, -{35,34,24}, -{35,34,25}, -{35,34,26}, -{35,34,27}, -{35,34,28}, -{35,34,29}, -{35,34,30}, -{35,34,31}, -{35,34,32}, -{35,34,33}, -{35,34,34}, -{35,34,35}, -{35,34,36}, -{35,34,37}, -{35,34,38}, -{35,34,39}, -{35,34,40}, -{35,34,41}, -{35,34,42}, -{35,34,43}, -{35,34,44}, -{35,34,45}, -{35,34,46}, -{35,35,-72}, -{35,35,-71}, -{35,35,-70}, -{35,35,-69}, -{35,35,-68}, -{35,35,-67}, -{35,35,-66}, -{35,35,-65}, -{35,35,-64}, -{35,35,-63}, -{35,35,-62}, -{35,35,-61}, -{35,35,-60}, -{35,35,-59}, -{35,35,-58}, -{35,35,-57}, -{35,35,-56}, -{35,35,-55}, -{35,35,-54}, -{35,35,-53}, -{35,35,-52}, -{35,35,-51}, -{35,35,-50}, -{35,35,-49}, -{35,35,-48}, -{35,35,-47}, -{35,35,-46}, -{35,35,-45}, -{35,35,-44}, -{35,35,-43}, -{35,35,-42}, -{35,35,-41}, -{35,35,-40}, -{35,35,-39}, -{35,35,-38}, -{35,35,-37}, -{35,35,-36}, -{35,35,-35}, -{35,35,-34}, -{35,35,-33}, -{35,35,-32}, -{35,35,-31}, -{35,35,-30}, -{35,35,-29}, -{35,35,-28}, -{35,35,-27}, -{35,35,-26}, -{35,35,-25}, -{35,35,-24}, -{35,35,-23}, -{35,35,-22}, -{35,35,-21}, -{35,35,-20}, -{35,35,-19}, -{35,35,-18}, -{35,35,-17}, -{35,35,-16}, -{35,35,-15}, -{35,35,-14}, -{35,35,-13}, -{35,35,-12}, -{35,35,-11}, -{35,35,-10}, -{35,35,-9}, -{35,35,-8}, -{35,35,-7}, -{35,35,-6}, -{35,35,-5}, -{35,35,-4}, -{35,35,-3}, -{35,35,-2}, -{35,35,-1}, -{35,35,0}, -{35,35,1}, -{35,35,2}, -{35,35,3}, -{35,35,4}, -{35,35,5}, -{35,35,6}, -{35,35,7}, -{35,35,8}, -{35,35,9}, -{35,35,10}, -{35,35,11}, -{35,35,12}, -{35,35,13}, -{35,35,14}, -{35,35,15}, -{35,35,16}, -{35,35,17}, -{35,35,18}, -{35,35,19}, -{35,35,20}, -{35,35,21}, -{35,35,22}, -{35,35,23}, -{35,35,24}, -{35,35,25}, -{35,35,26}, -{35,35,27}, -{35,35,28}, -{35,35,29}, -{35,35,30}, -{35,35,31}, -{35,35,32}, -{35,35,33}, -{35,35,34}, -{35,35,35}, -{35,35,36}, -{35,35,37}, -{35,35,38}, -{35,35,39}, -{35,35,40}, -{35,35,41}, -{35,35,42}, -{35,35,43}, -{35,35,44}, -{35,35,45}, -{35,35,46}, -{35,36,-73}, -{35,36,-72}, -{35,36,-71}, -{35,36,-70}, -{35,36,-69}, -{35,36,-68}, -{35,36,-67}, -{35,36,-66}, -{35,36,-65}, -{35,36,-64}, -{35,36,-63}, -{35,36,-62}, -{35,36,-61}, -{35,36,-60}, -{35,36,-59}, -{35,36,-58}, -{35,36,-57}, -{35,36,-56}, -{35,36,-55}, -{35,36,-54}, -{35,36,-53}, -{35,36,-52}, -{35,36,-51}, -{35,36,-50}, -{35,36,-49}, -{35,36,-48}, -{35,36,-47}, -{35,36,-46}, -{35,36,-45}, -{35,36,-44}, -{35,36,-43}, -{35,36,-42}, -{35,36,-41}, -{35,36,-40}, -{35,36,-39}, -{35,36,-38}, -{35,36,-37}, -{35,36,-36}, -{35,36,-35}, -{35,36,-34}, -{35,36,-33}, -{35,36,-32}, -{35,36,-31}, -{35,36,-30}, -{35,36,-29}, -{35,36,-28}, -{35,36,-27}, -{35,36,-26}, -{35,36,-25}, -{35,36,-24}, -{35,36,-23}, -{35,36,-22}, -{35,36,-21}, -{35,36,-20}, -{35,36,-19}, -{35,36,-18}, -{35,36,-17}, -{35,36,-16}, -{35,36,-15}, -{35,36,-14}, -{35,36,-13}, -{35,36,-12}, -{35,36,-11}, -{35,36,-10}, -{35,36,-9}, -{35,36,-8}, -{35,36,-7}, -{35,36,-6}, -{35,36,-5}, -{35,36,-4}, -{35,36,-3}, -{35,36,-2}, -{35,36,-1}, -{35,36,0}, -{35,36,1}, -{35,36,2}, -{35,36,3}, -{35,36,4}, -{35,36,5}, -{35,36,6}, -{35,36,7}, -{35,36,8}, -{35,36,9}, -{35,36,10}, -{35,36,11}, -{35,36,12}, -{35,36,13}, -{35,36,14}, -{35,36,15}, -{35,36,16}, -{35,36,17}, -{35,36,18}, -{35,36,19}, -{35,36,20}, -{35,36,21}, -{35,36,22}, -{35,36,23}, -{35,36,24}, -{35,36,25}, -{35,36,26}, -{35,36,27}, -{35,36,28}, -{35,36,29}, -{35,36,30}, -{35,36,31}, -{35,36,32}, -{35,36,33}, -{35,36,34}, -{35,36,35}, -{35,36,36}, -{35,36,37}, -{35,36,38}, -{35,36,39}, -{35,36,40}, -{35,36,41}, -{35,36,42}, -{35,36,43}, -{35,36,44}, -{35,36,45}, -{35,36,46}, -{35,37,-73}, -{35,37,-72}, -{35,37,-71}, -{35,37,-70}, -{35,37,-69}, -{35,37,-68}, -{35,37,-67}, -{35,37,-66}, -{35,37,-65}, -{35,37,-64}, -{35,37,-63}, -{35,37,-62}, -{35,37,-61}, -{35,37,-60}, -{35,37,-59}, -{35,37,-58}, -{35,37,-57}, -{35,37,-56}, -{35,37,-55}, -{35,37,-54}, -{35,37,-53}, -{35,37,-52}, -{35,37,-51}, -{35,37,-50}, -{35,37,-49}, -{35,37,-48}, -{35,37,-47}, -{35,37,-46}, -{35,37,-45}, -{35,37,-44}, -{35,37,-43}, -{35,37,-42}, -{35,37,-41}, -{35,37,-40}, -{35,37,-39}, -{35,37,-38}, -{35,37,-37}, -{35,37,-36}, -{35,37,-35}, -{35,37,-34}, -{35,37,-33}, -{35,37,-32}, -{35,37,-31}, -{35,37,-30}, -{35,37,-29}, -{35,37,-28}, -{35,37,-27}, -{35,37,-26}, -{35,37,-25}, -{35,37,-24}, -{35,37,-23}, -{35,37,-22}, -{35,37,-21}, -{35,37,-20}, -{35,37,-19}, -{35,37,-18}, -{35,37,-17}, -{35,37,-16}, -{35,37,-15}, -{35,37,-14}, -{35,37,-13}, -{35,37,-12}, -{35,37,-11}, -{35,37,-10}, -{35,37,-9}, -{35,37,-8}, -{35,37,-7}, -{35,37,-6}, -{35,37,-5}, -{35,37,-4}, -{35,37,-3}, -{35,37,-2}, -{35,37,-1}, -{35,37,0}, -{35,37,1}, -{35,37,2}, -{35,37,3}, -{35,37,4}, -{35,37,5}, -{35,37,6}, -{35,37,7}, -{35,37,8}, -{35,37,9}, -{35,37,10}, -{35,37,11}, -{35,37,12}, -{35,37,13}, -{35,37,14}, -{35,37,15}, -{35,37,16}, -{35,37,17}, -{35,37,18}, -{35,37,19}, -{35,37,20}, -{35,37,21}, -{35,37,22}, -{35,37,23}, -{35,37,24}, -{35,37,25}, -{35,37,26}, -{35,37,27}, -{35,37,28}, -{35,37,29}, -{35,37,30}, -{35,37,31}, -{35,37,32}, -{35,37,33}, -{35,37,34}, -{35,37,35}, -{35,37,36}, -{35,37,37}, -{35,37,38}, -{35,37,39}, -{35,37,40}, -{35,37,41}, -{35,37,42}, -{35,37,43}, -{35,37,44}, -{35,37,45}, -{35,37,46}, -{35,38,-74}, -{35,38,-73}, -{35,38,-72}, -{35,38,-71}, -{35,38,-70}, -{35,38,-69}, -{35,38,-68}, -{35,38,-67}, -{35,38,-66}, -{35,38,-65}, -{35,38,-64}, -{35,38,-63}, -{35,38,-62}, -{35,38,-61}, -{35,38,-60}, -{35,38,-59}, -{35,38,-58}, -{35,38,-57}, -{35,38,-56}, -{35,38,-55}, -{35,38,-54}, -{35,38,-53}, -{35,38,-52}, -{35,38,-51}, -{35,38,-50}, -{35,38,-49}, -{35,38,-48}, -{35,38,-47}, -{35,38,-46}, -{35,38,-45}, -{35,38,-44}, -{35,38,-43}, -{35,38,-42}, -{35,38,-41}, -{35,38,-40}, -{35,38,-39}, -{35,38,-38}, -{35,38,-37}, -{35,38,-36}, -{35,38,-35}, -{35,38,-34}, -{35,38,-33}, -{35,38,-32}, -{35,38,-31}, -{35,38,-30}, -{35,38,-29}, -{35,38,-28}, -{35,38,-27}, -{35,38,-26}, -{35,38,-25}, -{35,38,-24}, -{35,38,-23}, -{35,38,-22}, -{35,38,-21}, -{35,38,-20}, -{35,38,-19}, -{35,38,-18}, -{35,38,-17}, -{35,38,-16}, -{35,38,-15}, -{35,38,-14}, -{35,38,-13}, -{35,38,-12}, -{35,38,-11}, -{35,38,-10}, -{35,38,-9}, -{35,38,-8}, -{35,38,-7}, -{35,38,-6}, -{35,38,-5}, -{35,38,-4}, -{35,38,-3}, -{35,38,-2}, -{35,38,-1}, -{35,38,0}, -{35,38,1}, -{35,38,2}, -{35,38,3}, -{35,38,4}, -{35,38,5}, -{35,38,6}, -{35,38,7}, -{35,38,8}, -{35,38,9}, -{35,38,10}, -{35,38,11}, -{35,38,12}, -{35,38,13}, -{35,38,14}, -{35,38,15}, -{35,38,16}, -{35,38,17}, -{35,38,18}, -{35,38,19}, -{35,38,20}, -{35,38,21}, -{35,38,22}, -{35,38,23}, -{35,38,24}, -{35,38,25}, -{35,38,26}, -{35,38,27}, -{35,38,28}, -{35,38,29}, -{35,38,30}, -{35,38,31}, -{35,38,32}, -{35,38,33}, -{35,38,34}, -{35,38,35}, -{35,38,36}, -{35,38,37}, -{35,38,38}, -{35,38,39}, -{35,38,40}, -{35,38,41}, -{35,38,42}, -{35,38,43}, -{35,38,44}, -{35,38,45}, -{35,38,46}, -{35,39,-75}, -{35,39,-74}, -{35,39,-73}, -{35,39,-72}, -{35,39,-71}, -{35,39,-70}, -{35,39,-69}, -{35,39,-68}, -{35,39,-67}, -{35,39,-66}, -{35,39,-65}, -{35,39,-64}, -{35,39,-63}, -{35,39,-62}, -{35,39,-61}, -{35,39,-60}, -{35,39,-59}, -{35,39,-58}, -{35,39,-57}, -{35,39,-56}, -{35,39,-55}, -{35,39,-54}, -{35,39,-53}, -{35,39,-52}, -{35,39,-51}, -{35,39,-50}, -{35,39,-49}, -{35,39,-48}, -{35,39,-47}, -{35,39,-46}, -{35,39,-45}, -{35,39,-44}, -{35,39,-43}, -{35,39,-42}, -{35,39,-41}, -{35,39,-40}, -{35,39,-39}, -{35,39,-38}, -{35,39,-37}, -{35,39,-36}, -{35,39,-35}, -{35,39,-34}, -{35,39,-33}, -{35,39,-32}, -{35,39,-31}, -{35,39,-30}, -{35,39,-29}, -{35,39,-28}, -{35,39,-27}, -{35,39,-26}, -{35,39,-25}, -{35,39,-24}, -{35,39,-23}, -{35,39,-22}, -{35,39,-21}, -{35,39,-20}, -{35,39,-19}, -{35,39,-18}, -{35,39,-17}, -{35,39,-16}, -{35,39,-15}, -{35,39,-14}, -{35,39,-13}, -{35,39,-12}, -{35,39,-11}, -{35,39,-10}, -{35,39,-9}, -{35,39,-8}, -{35,39,-7}, -{35,39,-6}, -{35,39,-5}, -{35,39,-4}, -{35,39,-3}, -{35,39,-2}, -{35,39,-1}, -{35,39,0}, -{35,39,1}, -{35,39,2}, -{35,39,3}, -{35,39,4}, -{35,39,5}, -{35,39,6}, -{35,39,7}, -{35,39,8}, -{35,39,9}, -{35,39,10}, -{35,39,11}, -{35,39,12}, -{35,39,13}, -{35,39,14}, -{35,39,15}, -{35,39,16}, -{35,39,17}, -{35,39,18}, -{35,39,19}, -{35,39,20}, -{35,39,21}, -{35,39,22}, -{35,39,23}, -{35,39,24}, -{35,39,25}, -{35,39,26}, -{35,39,27}, -{35,39,28}, -{35,39,29}, -{35,39,30}, -{35,39,31}, -{35,39,32}, -{35,39,33}, -{35,39,34}, -{35,39,35}, -{35,39,36}, -{35,39,37}, -{35,39,38}, -{35,39,39}, -{35,39,40}, -{35,39,41}, -{35,39,42}, -{35,39,43}, -{35,39,44}, -{35,39,45}, -{35,39,46}, -{35,39,47}, -{35,40,-76}, -{35,40,-75}, -{35,40,-74}, -{35,40,-73}, -{35,40,-72}, -{35,40,-71}, -{35,40,-70}, -{35,40,-69}, -{35,40,-68}, -{35,40,-67}, -{35,40,-66}, -{35,40,-65}, -{35,40,-64}, -{35,40,-63}, -{35,40,-62}, -{35,40,-61}, -{35,40,-60}, -{35,40,-59}, -{35,40,-58}, -{35,40,-57}, -{35,40,-56}, -{35,40,-55}, -{35,40,-54}, -{35,40,-53}, -{35,40,-52}, -{35,40,-51}, -{35,40,-50}, -{35,40,-49}, -{35,40,-48}, -{35,40,-47}, -{35,40,-46}, -{35,40,-45}, -{35,40,-44}, -{35,40,-43}, -{35,40,-42}, -{35,40,-41}, -{35,40,-40}, -{35,40,-39}, -{35,40,-38}, -{35,40,-37}, -{35,40,-36}, -{35,40,-35}, -{35,40,-34}, -{35,40,-33}, -{35,40,-32}, -{35,40,-31}, -{35,40,-30}, -{35,40,-29}, -{35,40,-28}, -{35,40,-27}, -{35,40,-26}, -{35,40,-25}, -{35,40,-24}, -{35,40,-23}, -{35,40,-22}, -{35,40,-21}, -{35,40,-20}, -{35,40,-19}, -{35,40,-18}, -{35,40,-17}, -{35,40,-16}, -{35,40,-15}, -{35,40,-14}, -{35,40,-13}, -{35,40,-12}, -{35,40,-11}, -{35,40,-10}, -{35,40,-9}, -{35,40,-8}, -{35,40,-7}, -{35,40,-6}, -{35,40,-5}, -{35,40,-4}, -{35,40,-3}, -{35,40,-2}, -{35,40,-1}, -{35,40,0}, -{35,40,1}, -{35,40,2}, -{35,40,3}, -{35,40,4}, -{35,40,5}, -{35,40,6}, -{35,40,7}, -{35,40,8}, -{35,40,9}, -{35,40,10}, -{35,40,11}, -{35,40,12}, -{35,40,13}, -{35,40,14}, -{35,40,15}, -{35,40,16}, -{35,40,17}, -{35,40,18}, -{35,40,19}, -{35,40,20}, -{35,40,21}, -{35,40,22}, -{35,40,23}, -{35,40,24}, -{35,40,25}, -{35,40,26}, -{35,40,27}, -{35,40,28}, -{35,40,29}, -{35,40,30}, -{35,40,31}, -{35,40,32}, -{35,40,33}, -{35,40,34}, -{35,40,35}, -{35,40,36}, -{35,40,37}, -{35,40,38}, -{35,40,39}, -{35,40,40}, -{35,40,41}, -{35,40,42}, -{35,40,43}, -{35,40,44}, -{35,40,45}, -{35,40,46}, -{35,40,47}, -{35,41,-77}, -{35,41,-76}, -{35,41,-75}, -{35,41,-74}, -{35,41,-73}, -{35,41,-72}, -{35,41,-71}, -{35,41,-70}, -{35,41,-69}, -{35,41,-68}, -{35,41,-67}, -{35,41,-66}, -{35,41,-65}, -{35,41,-64}, -{35,41,-63}, -{35,41,-62}, -{35,41,-61}, -{35,41,-60}, -{35,41,-59}, -{35,41,-58}, -{35,41,-57}, -{35,41,-56}, -{35,41,-55}, -{35,41,-54}, -{35,41,-53}, -{35,41,-52}, -{35,41,-51}, -{35,41,-50}, -{35,41,-49}, -{35,41,-48}, -{35,41,-47}, -{35,41,-46}, -{35,41,-45}, -{35,41,-44}, -{35,41,-43}, -{35,41,-42}, -{35,41,-41}, -{35,41,-40}, -{35,41,-39}, -{35,41,-38}, -{35,41,-37}, -{35,41,-36}, -{35,41,-35}, -{35,41,-34}, -{35,41,-33}, -{35,41,-32}, -{35,41,-31}, -{35,41,-30}, -{35,41,-29}, -{35,41,-28}, -{35,41,-27}, -{35,41,-26}, -{35,41,-25}, -{35,41,-24}, -{35,41,-23}, -{35,41,-22}, -{35,41,-21}, -{35,41,-20}, -{35,41,-19}, -{35,41,-18}, -{35,41,-17}, -{35,41,-16}, -{35,41,-15}, -{35,41,-14}, -{35,41,-13}, -{35,41,-12}, -{35,41,-11}, -{35,41,-10}, -{35,41,-9}, -{35,41,-8}, -{35,41,-7}, -{35,41,-6}, -{35,41,-5}, -{35,41,-4}, -{35,41,-3}, -{35,41,-2}, -{35,41,-1}, -{35,41,0}, -{35,41,1}, -{35,41,2}, -{35,41,3}, -{35,41,4}, -{35,41,5}, -{35,41,6}, -{35,41,7}, -{35,41,8}, -{35,41,9}, -{35,41,10}, -{35,41,11}, -{35,41,12}, -{35,41,13}, -{35,41,14}, -{35,41,15}, -{35,41,16}, -{35,41,17}, -{35,41,18}, -{35,41,19}, -{35,41,20}, -{35,41,21}, -{35,41,22}, -{35,41,23}, -{35,41,24}, -{35,41,25}, -{35,41,26}, -{35,41,27}, -{35,41,28}, -{35,41,29}, -{35,41,30}, -{35,41,31}, -{35,41,32}, -{35,41,33}, -{35,41,34}, -{35,41,35}, -{35,41,36}, -{35,41,37}, -{35,41,38}, -{35,41,39}, -{35,41,40}, -{35,41,41}, -{35,41,42}, -{35,41,43}, -{35,41,44}, -{35,41,45}, -{35,41,46}, -{35,41,47}, -{35,42,-78}, -{35,42,-77}, -{35,42,-76}, -{35,42,-75}, -{35,42,-74}, -{35,42,-73}, -{35,42,-72}, -{35,42,-71}, -{35,42,-70}, -{35,42,-69}, -{35,42,-68}, -{35,42,-67}, -{35,42,-66}, -{35,42,-65}, -{35,42,-64}, -{35,42,-63}, -{35,42,-62}, -{35,42,-61}, -{35,42,-60}, -{35,42,-59}, -{35,42,-58}, -{35,42,-57}, -{35,42,-56}, -{35,42,-55}, -{35,42,-54}, -{35,42,-53}, -{35,42,-52}, -{35,42,-51}, -{35,42,-50}, -{35,42,-49}, -{35,42,-48}, -{35,42,-47}, -{35,42,-46}, -{35,42,-45}, -{35,42,-44}, -{35,42,-43}, -{35,42,-42}, -{35,42,-41}, -{35,42,-40}, -{35,42,-39}, -{35,42,-38}, -{35,42,-37}, -{35,42,-36}, -{35,42,-35}, -{35,42,-34}, -{35,42,-33}, -{35,42,-32}, -{35,42,-31}, -{35,42,-30}, -{35,42,-29}, -{35,42,-28}, -{35,42,-27}, -{35,42,-26}, -{35,42,-25}, -{35,42,-24}, -{35,42,-23}, -{35,42,-22}, -{35,42,-21}, -{35,42,-20}, -{35,42,-19}, -{35,42,-18}, -{35,42,-17}, -{35,42,-16}, -{35,42,-15}, -{35,42,-14}, -{35,42,-13}, -{35,42,-12}, -{35,42,-11}, -{35,42,-10}, -{35,42,-9}, -{35,42,-8}, -{35,42,-7}, -{35,42,-6}, -{35,42,-5}, -{35,42,-4}, -{35,42,-3}, -{35,42,-2}, -{35,42,-1}, -{35,42,0}, -{35,42,1}, -{35,42,2}, -{35,42,3}, -{35,42,4}, -{35,42,5}, -{35,42,6}, -{35,42,7}, -{35,42,8}, -{35,42,9}, -{35,42,10}, -{35,42,11}, -{35,42,12}, -{35,42,13}, -{35,42,14}, -{35,42,15}, -{35,42,16}, -{35,42,17}, -{35,42,18}, -{35,42,19}, -{35,42,20}, -{35,42,21}, -{35,42,22}, -{35,42,23}, -{35,42,24}, -{35,42,25}, -{35,42,26}, -{35,42,27}, -{35,42,28}, -{35,42,29}, -{35,42,30}, -{35,42,31}, -{35,42,32}, -{35,42,33}, -{35,42,34}, -{35,42,35}, -{35,42,36}, -{35,42,37}, -{35,42,38}, -{35,42,39}, -{35,42,40}, -{35,42,41}, -{35,42,42}, -{35,42,43}, -{35,42,44}, -{35,42,45}, -{35,42,46}, -{35,42,47}, -{35,43,-79}, -{35,43,-78}, -{35,43,-77}, -{35,43,-76}, -{35,43,-75}, -{35,43,-74}, -{35,43,-73}, -{35,43,-72}, -{35,43,-71}, -{35,43,-70}, -{35,43,-69}, -{35,43,-68}, -{35,43,-67}, -{35,43,-66}, -{35,43,-65}, -{35,43,-64}, -{35,43,-63}, -{35,43,-62}, -{35,43,-61}, -{35,43,-60}, -{35,43,-59}, -{35,43,-58}, -{35,43,-57}, -{35,43,-56}, -{35,43,-55}, -{35,43,-54}, -{35,43,-53}, -{35,43,-52}, -{35,43,-51}, -{35,43,-50}, -{35,43,-49}, -{35,43,-48}, -{35,43,-47}, -{35,43,-46}, -{35,43,-45}, -{35,43,-44}, -{35,43,-43}, -{35,43,-42}, -{35,43,-41}, -{35,43,-40}, -{35,43,-39}, -{35,43,-38}, -{35,43,-37}, -{35,43,-36}, -{35,43,-35}, -{35,43,-34}, -{35,43,-33}, -{35,43,-32}, -{35,43,-31}, -{35,43,-30}, -{35,43,-29}, -{35,43,-28}, -{35,43,-27}, -{35,43,-26}, -{35,43,-25}, -{35,43,-24}, -{35,43,-23}, -{35,43,-22}, -{35,43,-21}, -{35,43,-20}, -{35,43,-19}, -{35,43,-18}, -{35,43,-17}, -{35,43,-16}, -{35,43,-15}, -{35,43,-14}, -{35,43,-13}, -{35,43,-12}, -{35,43,-11}, -{35,43,-10}, -{35,43,-9}, -{35,43,-8}, -{35,43,-7}, -{35,43,-6}, -{35,43,-5}, -{35,43,-4}, -{35,43,-3}, -{35,43,-2}, -{35,43,-1}, -{35,43,0}, -{35,43,1}, -{35,43,2}, -{35,43,3}, -{35,43,4}, -{35,43,5}, -{35,43,6}, -{35,43,7}, -{35,43,8}, -{35,43,9}, -{35,43,10}, -{35,43,11}, -{35,43,12}, -{35,43,13}, -{35,43,14}, -{35,43,15}, -{35,43,16}, -{35,43,17}, -{35,43,18}, -{35,43,19}, -{35,43,20}, -{35,43,21}, -{35,43,22}, -{35,43,23}, -{35,43,24}, -{35,43,25}, -{35,43,26}, -{35,43,27}, -{35,43,28}, -{35,43,29}, -{35,43,30}, -{35,43,31}, -{35,43,32}, -{35,43,33}, -{35,43,34}, -{35,43,35}, -{35,43,36}, -{35,43,37}, -{35,43,38}, -{35,43,39}, -{35,43,40}, -{35,43,41}, -{35,43,42}, -{35,43,43}, -{35,43,44}, -{35,43,45}, -{35,43,46}, -{35,43,47}, -{35,44,-80}, -{35,44,-79}, -{35,44,-78}, -{35,44,-77}, -{35,44,-76}, -{35,44,-75}, -{35,44,-74}, -{35,44,-73}, -{35,44,-72}, -{35,44,-71}, -{35,44,-70}, -{35,44,-69}, -{35,44,-68}, -{35,44,-67}, -{35,44,-66}, -{35,44,-65}, -{35,44,-64}, -{35,44,-63}, -{35,44,-62}, -{35,44,-61}, -{35,44,-60}, -{35,44,-59}, -{35,44,-58}, -{35,44,-57}, -{35,44,-56}, -{35,44,-55}, -{35,44,-54}, -{35,44,-53}, -{35,44,-52}, -{35,44,-51}, -{35,44,-50}, -{35,44,-49}, -{35,44,-48}, -{35,44,-47}, -{35,44,-46}, -{35,44,-45}, -{35,44,-44}, -{35,44,-43}, -{35,44,-42}, -{35,44,-41}, -{35,44,-40}, -{35,44,-39}, -{35,44,-38}, -{35,44,-37}, -{35,44,-36}, -{35,44,-35}, -{35,44,-34}, -{35,44,-33}, -{35,44,-32}, -{35,44,-31}, -{35,44,-30}, -{35,44,-29}, -{35,44,-28}, -{35,44,-27}, -{35,44,-26}, -{35,44,-25}, -{35,44,-24}, -{35,44,-23}, -{35,44,-22}, -{35,44,-21}, -{35,44,-20}, -{35,44,-19}, -{35,44,-18}, -{35,44,-17}, -{35,44,-16}, -{35,44,-15}, -{35,44,-14}, -{35,44,-13}, -{35,44,-12}, -{35,44,-11}, -{35,44,-10}, -{35,44,-9}, -{35,44,-8}, -{35,44,-7}, -{35,44,-6}, -{35,44,-5}, -{35,44,-4}, -{35,44,-3}, -{35,44,-2}, -{35,44,-1}, -{35,44,0}, -{35,44,1}, -{35,44,2}, -{35,44,3}, -{35,44,4}, -{35,44,5}, -{35,44,6}, -{35,44,7}, -{35,44,8}, -{35,44,9}, -{35,44,10}, -{35,44,11}, -{35,44,12}, -{35,44,13}, -{35,44,14}, -{35,44,15}, -{35,44,16}, -{35,44,17}, -{35,44,18}, -{35,44,19}, -{35,44,20}, -{35,44,21}, -{35,44,22}, -{35,44,23}, -{35,44,24}, -{35,44,25}, -{35,44,26}, -{35,44,27}, -{35,44,28}, -{35,44,29}, -{35,44,30}, -{35,44,31}, -{35,44,32}, -{35,44,33}, -{35,44,34}, -{35,44,35}, -{35,44,36}, -{35,44,37}, -{35,44,38}, -{35,44,39}, -{35,44,40}, -{35,44,41}, -{35,44,42}, -{35,44,43}, -{35,44,44}, -{35,44,45}, -{35,44,46}, -{35,44,47}, -{35,45,-81}, -{35,45,-80}, -{35,45,-79}, -{35,45,-78}, -{35,45,-77}, -{35,45,-76}, -{35,45,-75}, -{35,45,-74}, -{35,45,-73}, -{35,45,-72}, -{35,45,-71}, -{35,45,-70}, -{35,45,-69}, -{35,45,-68}, -{35,45,-67}, -{35,45,-66}, -{35,45,-65}, -{35,45,-64}, -{35,45,-63}, -{35,45,-62}, -{35,45,-61}, -{35,45,-60}, -{35,45,-59}, -{35,45,-58}, -{35,45,-57}, -{35,45,-56}, -{35,45,-55}, -{35,45,-54}, -{35,45,-53}, -{35,45,-52}, -{35,45,-51}, -{35,45,-50}, -{35,45,-49}, -{35,45,-48}, -{35,45,-47}, -{35,45,-46}, -{35,45,-45}, -{35,45,-44}, -{35,45,-43}, -{35,45,-42}, -{35,45,-41}, -{35,45,-40}, -{35,45,-39}, -{35,45,-38}, -{35,45,-37}, -{35,45,-36}, -{35,45,-35}, -{35,45,-34}, -{35,45,-33}, -{35,45,-32}, -{35,45,-31}, -{35,45,-30}, -{35,45,-29}, -{35,45,-28}, -{35,45,-27}, -{35,45,-26}, -{35,45,-25}, -{35,45,-24}, -{35,45,-23}, -{35,45,-22}, -{35,45,-21}, -{35,45,-20}, -{35,45,-19}, -{35,45,-18}, -{35,45,-17}, -{35,45,-16}, -{35,45,-15}, -{35,45,-14}, -{35,45,-13}, -{35,45,-12}, -{35,45,-11}, -{35,45,-10}, -{35,45,-9}, -{35,45,-8}, -{35,45,-7}, -{35,45,-6}, -{35,45,-5}, -{35,45,-4}, -{35,45,-3}, -{35,45,-2}, -{35,45,-1}, -{35,45,0}, -{35,45,1}, -{35,45,2}, -{35,45,3}, -{35,45,4}, -{35,45,5}, -{35,45,6}, -{35,45,7}, -{35,45,8}, -{35,45,9}, -{35,45,10}, -{35,45,11}, -{35,45,12}, -{35,45,13}, -{35,45,14}, -{35,45,15}, -{35,45,16}, -{35,45,17}, -{35,45,18}, -{35,45,19}, -{35,45,20}, -{35,45,21}, -{35,45,22}, -{35,45,23}, -{35,45,24}, -{35,45,25}, -{35,45,26}, -{35,45,27}, -{35,45,28}, -{35,45,29}, -{35,45,30}, -{35,45,31}, -{35,45,32}, -{35,45,33}, -{35,45,34}, -{35,45,35}, -{35,45,36}, -{35,45,37}, -{35,45,38}, -{35,45,39}, -{35,45,40}, -{35,45,41}, -{35,45,42}, -{35,45,43}, -{35,45,44}, -{35,45,45}, -{35,45,46}, -{35,45,47}, -{35,46,-82}, -{35,46,-81}, -{35,46,-80}, -{35,46,-79}, -{35,46,-78}, -{35,46,-77}, -{35,46,-76}, -{35,46,-75}, -{35,46,-74}, -{35,46,-73}, -{35,46,-72}, -{35,46,-71}, -{35,46,-70}, -{35,46,-69}, -{35,46,-68}, -{35,46,-67}, -{35,46,-66}, -{35,46,-65}, -{35,46,-64}, -{35,46,-63}, -{35,46,-62}, -{35,46,-61}, -{35,46,-60}, -{35,46,-59}, -{35,46,-58}, -{35,46,-57}, -{35,46,-56}, -{35,46,-55}, -{35,46,-54}, -{35,46,-53}, -{35,46,-52}, -{35,46,-51}, -{35,46,-50}, -{35,46,-49}, -{35,46,-48}, -{35,46,-47}, -{35,46,-46}, -{35,46,-45}, -{35,46,-44}, -{35,46,-43}, -{35,46,-42}, -{35,46,-41}, -{35,46,-40}, -{35,46,-39}, -{35,46,-38}, -{35,46,-37}, -{35,46,-36}, -{35,46,-35}, -{35,46,-34}, -{35,46,-33}, -{35,46,-32}, -{35,46,-31}, -{35,46,-30}, -{35,46,-29}, -{35,46,-28}, -{35,46,-27}, -{35,46,-26}, -{35,46,-25}, -{35,46,-24}, -{35,46,-23}, -{35,46,-22}, -{35,46,-21}, -{35,46,-20}, -{35,46,-19}, -{35,46,-18}, -{35,46,-17}, -{35,46,-16}, -{35,46,-15}, -{35,46,-14}, -{35,46,-13}, -{35,46,-12}, -{35,46,-11}, -{35,46,-10}, -{35,46,-9}, -{35,46,-8}, -{35,46,-7}, -{35,46,-6}, -{35,46,-5}, -{35,46,-4}, -{35,46,-3}, -{35,46,-2}, -{35,46,-1}, -{35,46,0}, -{35,46,1}, -{35,46,2}, -{35,46,3}, -{35,46,4}, -{35,46,5}, -{35,46,6}, -{35,46,7}, -{35,46,8}, -{35,46,9}, -{35,46,10}, -{35,46,11}, -{35,46,12}, -{35,46,13}, -{35,46,14}, -{35,46,15}, -{35,46,16}, -{35,46,17}, -{35,46,18}, -{35,46,19}, -{35,46,20}, -{35,46,21}, -{35,46,22}, -{35,46,23}, -{35,46,24}, -{35,46,25}, -{35,46,26}, -{35,46,27}, -{35,46,28}, -{35,46,29}, -{35,46,30}, -{35,46,31}, -{35,46,32}, -{35,46,33}, -{35,46,34}, -{35,46,35}, -{35,46,36}, -{35,46,37}, -{35,46,38}, -{35,46,39}, -{35,46,40}, -{35,46,41}, -{35,46,42}, -{35,46,43}, -{35,46,44}, -{35,46,45}, -{35,46,46}, -{35,46,47}, -{35,47,-82}, -{35,47,-81}, -{35,47,-80}, -{35,47,-79}, -{35,47,-78}, -{35,47,-77}, -{35,47,-76}, -{35,47,-75}, -{35,47,-74}, -{35,47,-73}, -{35,47,-72}, -{35,47,-71}, -{35,47,-70}, -{35,47,-69}, -{35,47,-68}, -{35,47,-67}, -{35,47,-66}, -{35,47,-65}, -{35,47,-64}, -{35,47,-63}, -{35,47,-62}, -{35,47,-61}, -{35,47,-60}, -{35,47,-59}, -{35,47,-58}, -{35,47,-57}, -{35,47,-56}, -{35,47,-55}, -{35,47,-54}, -{35,47,-53}, -{35,47,-52}, -{35,47,-51}, -{35,47,-50}, -{35,47,-49}, -{35,47,-48}, -{35,47,-47}, -{35,47,-46}, -{35,47,-45}, -{35,47,-44}, -{35,47,-43}, -{35,47,-42}, -{35,47,-41}, -{35,47,-40}, -{35,47,-39}, -{35,47,-38}, -{35,47,-37}, -{35,47,-36}, -{35,47,-35}, -{35,47,-34}, -{35,47,-33}, -{35,47,-32}, -{35,47,-31}, -{35,47,-30}, -{35,47,-29}, -{35,47,-28}, -{35,47,-27}, -{35,47,-26}, -{35,47,-25}, -{35,47,-24}, -{35,47,-23}, -{35,47,-22}, -{35,47,-21}, -{35,47,-20}, -{35,47,-19}, -{35,47,-18}, -{35,47,-17}, -{35,47,-16}, -{35,47,-15}, -{35,47,-14}, -{35,47,-13}, -{35,47,-12}, -{35,47,-11}, -{35,47,-10}, -{35,47,-9}, -{35,47,-8}, -{35,47,-7}, -{35,47,-6}, -{35,47,-5}, -{35,47,-4}, -{35,47,-3}, -{35,47,-2}, -{35,47,-1}, -{35,47,0}, -{35,47,1}, -{35,47,2}, -{35,47,3}, -{35,47,4}, -{35,47,5}, -{35,47,6}, -{35,47,7}, -{35,47,8}, -{35,47,9}, -{35,47,10}, -{35,47,11}, -{35,47,12}, -{35,47,13}, -{35,47,14}, -{35,47,15}, -{35,47,16}, -{35,47,17}, -{35,47,18}, -{35,47,19}, -{35,47,20}, -{35,47,21}, -{35,47,22}, -{35,47,23}, -{35,47,24}, -{35,47,25}, -{35,47,26}, -{35,47,27}, -{35,47,28}, -{35,47,29}, -{35,47,30}, -{35,47,31}, -{35,47,32}, -{35,47,33}, -{35,47,34}, -{35,47,35}, -{35,47,36}, -{35,47,37}, -{35,47,38}, -{35,47,39}, -{35,47,40}, -{35,47,41}, -{35,47,42}, -{35,47,43}, -{35,47,44}, -{35,47,45}, -{35,47,46}, -{35,47,47}, -{35,48,-83}, -{35,48,-82}, -{35,48,-81}, -{35,48,-80}, -{35,48,-79}, -{35,48,-78}, -{35,48,-77}, -{35,48,-76}, -{35,48,-75}, -{35,48,-74}, -{35,48,-73}, -{35,48,-72}, -{35,48,-71}, -{35,48,-70}, -{35,48,-69}, -{35,48,-68}, -{35,48,-67}, -{35,48,-66}, -{35,48,-65}, -{35,48,-64}, -{35,48,-63}, -{35,48,-62}, -{35,48,-61}, -{35,48,-60}, -{35,48,-59}, -{35,48,-58}, -{35,48,-57}, -{35,48,-56}, -{35,48,-55}, -{35,48,-54}, -{35,48,-53}, -{35,48,-52}, -{35,48,-51}, -{35,48,-50}, -{35,48,-49}, -{35,48,-48}, -{35,48,-47}, -{35,48,-46}, -{35,48,-45}, -{35,48,-44}, -{35,48,-43}, -{35,48,-42}, -{35,48,-41}, -{35,48,-40}, -{35,48,-39}, -{35,48,-38}, -{35,48,-37}, -{35,48,-36}, -{35,48,-35}, -{35,48,-34}, -{35,48,-33}, -{35,48,-32}, -{35,48,-31}, -{35,48,-30}, -{35,48,-29}, -{35,48,-28}, -{35,48,-27}, -{35,48,-26}, -{35,48,-25}, -{35,48,-24}, -{35,48,-23}, -{35,48,-22}, -{35,48,-21}, -{35,48,-20}, -{35,48,-19}, -{35,48,-18}, -{35,48,-17}, -{35,48,-16}, -{35,48,-15}, -{35,48,-14}, -{35,48,-13}, -{35,48,-12}, -{35,48,-11}, -{35,48,-10}, -{35,48,-9}, -{35,48,-8}, -{35,48,-7}, -{35,48,-6}, -{35,48,-5}, -{35,48,-4}, -{35,48,-3}, -{35,48,-2}, -{35,48,-1}, -{35,48,0}, -{35,48,1}, -{35,48,2}, -{35,48,3}, -{35,48,4}, -{35,48,5}, -{35,48,6}, -{35,48,7}, -{35,48,8}, -{35,48,9}, -{35,48,10}, -{35,48,11}, -{35,48,12}, -{35,48,13}, -{35,48,14}, -{35,48,15}, -{35,48,16}, -{35,48,17}, -{35,48,18}, -{35,48,19}, -{35,48,20}, -{35,48,21}, -{35,48,22}, -{35,48,23}, -{35,48,24}, -{35,48,25}, -{35,48,26}, -{35,48,27}, -{35,48,28}, -{35,48,29}, -{35,48,30}, -{35,48,31}, -{35,48,32}, -{35,48,33}, -{35,48,34}, -{35,48,35}, -{35,48,36}, -{35,48,37}, -{35,48,38}, -{35,48,39}, -{35,48,40}, -{35,48,41}, -{35,48,42}, -{35,48,43}, -{35,48,44}, -{35,48,45}, -{35,48,46}, -{35,48,47}, -{35,48,48}, -{35,49,-84}, -{35,49,-83}, -{35,49,-82}, -{35,49,-81}, -{35,49,-80}, -{35,49,-79}, -{35,49,-78}, -{35,49,-77}, -{35,49,-76}, -{35,49,-75}, -{35,49,-74}, -{35,49,-73}, -{35,49,-72}, -{35,49,-71}, -{35,49,-70}, -{35,49,-69}, -{35,49,-68}, -{35,49,-67}, -{35,49,-66}, -{35,49,-65}, -{35,49,-64}, -{35,49,-63}, -{35,49,-62}, -{35,49,-61}, -{35,49,-60}, -{35,49,-59}, -{35,49,-58}, -{35,49,-57}, -{35,49,-56}, -{35,49,-55}, -{35,49,-54}, -{35,49,-53}, -{35,49,-52}, -{35,49,-51}, -{35,49,-50}, -{35,49,-49}, -{35,49,-48}, -{35,49,-47}, -{35,49,-46}, -{35,49,-45}, -{35,49,-44}, -{35,49,-43}, -{35,49,-42}, -{35,49,-41}, -{35,49,-40}, -{35,49,-39}, -{35,49,-38}, -{35,49,-37}, -{35,49,-36}, -{35,49,-35}, -{35,49,-34}, -{35,49,-33}, -{35,49,-32}, -{35,49,-31}, -{35,49,-30}, -{35,49,-29}, -{35,49,-28}, -{35,49,-27}, -{35,49,-26}, -{35,49,-25}, -{35,49,-24}, -{35,49,-23}, -{35,49,-22}, -{35,49,-21}, -{35,49,-20}, -{35,49,-19}, -{35,49,-18}, -{35,49,-17}, -{35,49,-16}, -{35,49,-15}, -{35,49,-14}, -{35,49,-13}, -{35,49,-12}, -{35,49,-11}, -{35,49,-10}, -{35,49,-9}, -{35,49,-8}, -{35,49,-7}, -{35,49,-6}, -{35,49,-5}, -{35,49,-4}, -{35,49,-3}, -{35,49,-2}, -{35,49,-1}, -{35,49,0}, -{35,49,1}, -{35,49,2}, -{35,49,3}, -{35,49,4}, -{35,49,5}, -{35,49,6}, -{35,49,7}, -{35,49,8}, -{35,49,9}, -{35,49,10}, -{35,49,11}, -{35,49,12}, -{35,49,13}, -{35,49,14}, -{35,49,15}, -{35,49,16}, -{35,49,17}, -{35,49,18}, -{35,49,19}, -{35,49,20}, -{35,49,21}, -{35,49,22}, -{35,49,23}, -{35,49,24}, -{35,49,25}, -{35,49,26}, -{35,49,27}, -{35,49,28}, -{35,49,29}, -{35,49,30}, -{35,49,31}, -{35,49,32}, -{35,49,33}, -{35,49,34}, -{35,49,35}, -{35,49,36}, -{35,49,37}, -{35,49,38}, -{35,49,39}, -{35,49,40}, -{35,49,41}, -{35,49,42}, -{35,49,43}, -{35,49,44}, -{35,49,45}, -{35,49,46}, -{35,49,47}, -{35,49,48}, -{35,50,-85}, -{35,50,-84}, -{35,50,-83}, -{35,50,-82}, -{35,50,-81}, -{35,50,-80}, -{35,50,-79}, -{35,50,-78}, -{35,50,-77}, -{35,50,-76}, -{35,50,-75}, -{35,50,-74}, -{35,50,-73}, -{35,50,-72}, -{35,50,-71}, -{35,50,-70}, -{35,50,-69}, -{35,50,-68}, -{35,50,-67}, -{35,50,-66}, -{35,50,-65}, -{35,50,-64}, -{35,50,-63}, -{35,50,-62}, -{35,50,-61}, -{35,50,-60}, -{35,50,-59}, -{35,50,-58}, -{35,50,-57}, -{35,50,-56}, -{35,50,-55}, -{35,50,-54}, -{35,50,-53}, -{35,50,-52}, -{35,50,-51}, -{35,50,-50}, -{35,50,-49}, -{35,50,-48}, -{35,50,-47}, -{35,50,-46}, -{35,50,-45}, -{35,50,-44}, -{35,50,-43}, -{35,50,-42}, -{35,50,-41}, -{35,50,-40}, -{35,50,-39}, -{35,50,-38}, -{35,50,-37}, -{35,50,-36}, -{35,50,-35}, -{35,50,-34}, -{35,50,-33}, -{35,50,-32}, -{35,50,-31}, -{35,50,-30}, -{35,50,-29}, -{35,50,-28}, -{35,50,-27}, -{35,50,-26}, -{35,50,-25}, -{35,50,-24}, -{35,50,-23}, -{35,50,-22}, -{35,50,-21}, -{35,50,-20}, -{35,50,-19}, -{35,50,-18}, -{35,50,-17}, -{35,50,-16}, -{35,50,-15}, -{35,50,-14}, -{35,50,-13}, -{35,50,-12}, -{35,50,-11}, -{35,50,-10}, -{35,50,-9}, -{35,50,-8}, -{35,50,-7}, -{35,50,-6}, -{35,50,-5}, -{35,50,-4}, -{35,50,-3}, -{35,50,-2}, -{35,50,-1}, -{35,50,0}, -{35,50,1}, -{35,50,2}, -{35,50,3}, -{35,50,4}, -{35,50,5}, -{35,50,6}, -{35,50,7}, -{35,50,8}, -{35,50,9}, -{35,50,10}, -{35,50,11}, -{35,50,12}, -{35,50,13}, -{35,50,14}, -{35,50,15}, -{35,50,16}, -{35,50,17}, -{35,50,18}, -{35,50,19}, -{35,50,20}, -{35,50,21}, -{35,50,22}, -{35,50,23}, -{35,50,24}, -{35,50,25}, -{35,50,26}, -{35,50,27}, -{35,50,28}, -{35,50,29}, -{35,50,30}, -{35,50,31}, -{35,50,32}, -{35,50,33}, -{35,50,34}, -{35,50,35}, -{35,50,36}, -{35,50,37}, -{35,50,38}, -{35,50,39}, -{35,50,40}, -{35,50,41}, -{35,50,42}, -{35,50,43}, -{35,50,44}, -{35,50,45}, -{35,50,46}, -{35,50,47}, -{35,50,48}, -{35,51,-86}, -{35,51,-85}, -{35,51,-84}, -{35,51,-83}, -{35,51,-82}, -{35,51,-81}, -{35,51,-80}, -{35,51,-79}, -{35,51,-78}, -{35,51,-77}, -{35,51,-76}, -{35,51,-75}, -{35,51,-74}, -{35,51,-73}, -{35,51,-72}, -{35,51,-71}, -{35,51,-70}, -{35,51,-69}, -{35,51,-68}, -{35,51,-67}, -{35,51,-66}, -{35,51,-65}, -{35,51,-64}, -{35,51,-63}, -{35,51,-62}, -{35,51,-61}, -{35,51,-60}, -{35,51,-59}, -{35,51,-58}, -{35,51,-57}, -{35,51,-56}, -{35,51,-55}, -{35,51,-54}, -{35,51,-53}, -{35,51,-52}, -{35,51,-51}, -{35,51,-50}, -{35,51,-49}, -{35,51,-48}, -{35,51,-47}, -{35,51,-46}, -{35,51,-45}, -{35,51,-44}, -{35,51,-43}, -{35,51,-42}, -{35,51,-41}, -{35,51,-40}, -{35,51,-39}, -{35,51,-38}, -{35,51,-37}, -{35,51,-36}, -{35,51,-35}, -{35,51,-34}, -{35,51,-33}, -{35,51,-32}, -{35,51,-31}, -{35,51,-30}, -{35,51,-29}, -{35,51,-28}, -{35,51,-27}, -{35,51,-26}, -{35,51,-25}, -{35,51,-24}, -{35,51,-23}, -{35,51,-22}, -{35,51,-21}, -{35,51,-20}, -{35,51,-19}, -{35,51,-18}, -{35,51,-17}, -{35,51,-16}, -{35,51,-15}, -{35,51,-14}, -{35,51,-13}, -{35,51,-12}, -{35,51,-11}, -{35,51,-10}, -{35,51,-9}, -{35,51,-8}, -{35,51,-7}, -{35,51,-6}, -{35,51,-5}, -{35,51,-4}, -{35,51,-3}, -{35,51,-2}, -{35,51,-1}, -{35,51,0}, -{35,51,1}, -{35,51,2}, -{35,51,3}, -{35,51,4}, -{35,51,5}, -{35,51,6}, -{35,51,7}, -{35,51,8}, -{35,51,9}, -{35,51,10}, -{35,51,11}, -{35,51,12}, -{35,51,13}, -{35,51,14}, -{35,51,15}, -{35,51,16}, -{35,51,17}, -{35,51,18}, -{35,51,19}, -{35,51,20}, -{35,51,21}, -{35,51,22}, -{35,51,23}, -{35,51,24}, -{35,51,25}, -{35,51,26}, -{35,51,27}, -{35,51,28}, -{35,51,29}, -{35,51,30}, -{35,51,31}, -{35,51,32}, -{35,51,33}, -{35,51,34}, -{35,51,35}, -{35,51,36}, -{35,51,37}, -{35,51,38}, -{35,51,39}, -{35,51,40}, -{35,51,41}, -{35,51,42}, -{35,51,43}, -{35,51,44}, -{35,51,45}, -{35,51,46}, -{35,51,47}, -{35,51,48}, -{35,52,-87}, -{35,52,-86}, -{35,52,-85}, -{35,52,-84}, -{35,52,-83}, -{35,52,-82}, -{35,52,-81}, -{35,52,-80}, -{35,52,-79}, -{35,52,-78}, -{35,52,-77}, -{35,52,-76}, -{35,52,-75}, -{35,52,-74}, -{35,52,-73}, -{35,52,-72}, -{35,52,-71}, -{35,52,-70}, -{35,52,-69}, -{35,52,-68}, -{35,52,-67}, -{35,52,-66}, -{35,52,-65}, -{35,52,-64}, -{35,52,-63}, -{35,52,-62}, -{35,52,-61}, -{35,52,-60}, -{35,52,-59}, -{35,52,-58}, -{35,52,-57}, -{35,52,-56}, -{35,52,-55}, -{35,52,-54}, -{35,52,-53}, -{35,52,-52}, -{35,52,-51}, -{35,52,-50}, -{35,52,-49}, -{35,52,-48}, -{35,52,-47}, -{35,52,-46}, -{35,52,-45}, -{35,52,-44}, -{35,52,-43}, -{35,52,-42}, -{35,52,-41}, -{35,52,-40}, -{35,52,-39}, -{35,52,-38}, -{35,52,-37}, -{35,52,-36}, -{35,52,-35}, -{35,52,-34}, -{35,52,-33}, -{35,52,-32}, -{35,52,-31}, -{35,52,-30}, -{35,52,-29}, -{35,52,-28}, -{35,52,-27}, -{35,52,-26}, -{35,52,-25}, -{35,52,-24}, -{35,52,-23}, -{35,52,-22}, -{35,52,-21}, -{35,52,-20}, -{35,52,-19}, -{35,52,-18}, -{35,52,-17}, -{35,52,-16}, -{35,52,-15}, -{35,52,-14}, -{35,52,-13}, -{35,52,-12}, -{35,52,-11}, -{35,52,-10}, -{35,52,-9}, -{35,52,-8}, -{35,52,-7}, -{35,52,-6}, -{35,52,-5}, -{35,52,-4}, -{35,52,-3}, -{35,52,-2}, -{35,52,-1}, -{35,52,0}, -{35,52,1}, -{35,52,2}, -{35,52,3}, -{35,52,4}, -{35,52,5}, -{35,52,6}, -{35,52,7}, -{35,52,8}, -{35,52,9}, -{35,52,10}, -{35,52,11}, -{35,52,12}, -{35,52,13}, -{35,52,14}, -{35,52,15}, -{35,52,16}, -{35,52,17}, -{35,52,18}, -{35,52,19}, -{35,52,20}, -{35,52,21}, -{35,52,22}, -{35,52,23}, -{35,52,24}, -{35,52,25}, -{35,52,26}, -{35,52,27}, -{35,52,28}, -{35,52,29}, -{35,52,30}, -{35,52,31}, -{35,52,32}, -{35,52,33}, -{35,52,34}, -{35,52,35}, -{35,52,36}, -{35,52,37}, -{35,52,38}, -{35,52,39}, -{35,52,40}, -{35,52,41}, -{35,52,42}, -{35,52,43}, -{35,52,44}, -{35,52,45}, -{35,52,46}, -{35,52,47}, -{35,52,48}, -{35,53,-88}, -{35,53,-87}, -{35,53,-86}, -{35,53,-85}, -{35,53,-84}, -{35,53,-83}, -{35,53,-82}, -{35,53,-81}, -{35,53,-80}, -{35,53,-79}, -{35,53,-78}, -{35,53,-77}, -{35,53,-76}, -{35,53,-75}, -{35,53,-74}, -{35,53,-73}, -{35,53,-72}, -{35,53,-71}, -{35,53,-70}, -{35,53,-69}, -{35,53,-68}, -{35,53,-67}, -{35,53,-66}, -{35,53,-65}, -{35,53,-64}, -{35,53,-63}, -{35,53,-62}, -{35,53,-61}, -{35,53,-60}, -{35,53,-59}, -{35,53,-58}, -{35,53,-57}, -{35,53,-56}, -{35,53,-55}, -{35,53,-54}, -{35,53,-53}, -{35,53,-52}, -{35,53,-51}, -{35,53,-50}, -{35,53,-49}, -{35,53,-48}, -{35,53,-47}, -{35,53,-46}, -{35,53,-45}, -{35,53,-44}, -{35,53,-43}, -{35,53,-42}, -{35,53,-41}, -{35,53,-40}, -{35,53,-39}, -{35,53,-38}, -{35,53,-37}, -{35,53,-36}, -{35,53,-35}, -{35,53,-34}, -{35,53,-33}, -{35,53,-32}, -{35,53,-31}, -{35,53,-30}, -{35,53,-29}, -{35,53,-28}, -{35,53,-27}, -{35,53,-26}, -{35,53,-25}, -{35,53,-24}, -{35,53,-23}, -{35,53,-22}, -{35,53,-21}, -{35,53,-20}, -{35,53,-19}, -{35,53,-18}, -{35,53,-17}, -{35,53,-16}, -{35,53,-15}, -{35,53,-14}, -{35,53,-13}, -{35,53,-12}, -{35,53,-11}, -{35,53,-10}, -{35,53,-9}, -{35,53,-8}, -{35,53,-7}, -{35,53,-6}, -{35,53,-5}, -{35,53,-4}, -{35,53,-3}, -{35,53,-2}, -{35,53,-1}, -{35,53,0}, -{35,53,1}, -{35,53,2}, -{35,53,3}, -{35,53,4}, -{35,53,5}, -{35,53,6}, -{35,53,7}, -{35,53,8}, -{35,53,9}, -{35,53,10}, -{35,53,11}, -{35,53,12}, -{35,53,13}, -{35,53,14}, -{35,53,15}, -{35,53,16}, -{35,53,17}, -{35,53,18}, -{35,53,19}, -{35,53,20}, -{35,53,21}, -{35,53,22}, -{35,53,23}, -{35,53,24}, -{35,53,25}, -{35,53,26}, -{35,53,27}, -{35,53,28}, -{35,53,29}, -{35,53,30}, -{35,53,31}, -{35,53,32}, -{35,53,33}, -{35,53,34}, -{35,53,35}, -{35,53,36}, -{35,53,37}, -{35,53,38}, -{35,53,39}, -{35,53,40}, -{35,53,41}, -{35,53,42}, -{35,53,43}, -{35,53,44}, -{35,53,45}, -{35,53,46}, -{35,53,47}, -{35,53,48}, -{35,54,-89}, -{35,54,-88}, -{35,54,-87}, -{35,54,-86}, -{35,54,-85}, -{35,54,-84}, -{35,54,-83}, -{35,54,-82}, -{35,54,-81}, -{35,54,-80}, -{35,54,-79}, -{35,54,-78}, -{35,54,-77}, -{35,54,-76}, -{35,54,-75}, -{35,54,-74}, -{35,54,-73}, -{35,54,-72}, -{35,54,-71}, -{35,54,-70}, -{35,54,-69}, -{35,54,-68}, -{35,54,-67}, -{35,54,-66}, -{35,54,-65}, -{35,54,-64}, -{35,54,-63}, -{35,54,-62}, -{35,54,-61}, -{35,54,-60}, -{35,54,-59}, -{35,54,-58}, -{35,54,-57}, -{35,54,-56}, -{35,54,-55}, -{35,54,-54}, -{35,54,-53}, -{35,54,-52}, -{35,54,-51}, -{35,54,-50}, -{35,54,-49}, -{35,54,-48}, -{35,54,-47}, -{35,54,-46}, -{35,54,-45}, -{35,54,-44}, -{35,54,-43}, -{35,54,-42}, -{35,54,-41}, -{35,54,-40}, -{35,54,-39}, -{35,54,-38}, -{35,54,-37}, -{35,54,-36}, -{35,54,-35}, -{35,54,-34}, -{35,54,-33}, -{35,54,-32}, -{35,54,-31}, -{35,54,-30}, -{35,54,-29}, -{35,54,-28}, -{35,54,-27}, -{35,54,-26}, -{35,54,-25}, -{35,54,-24}, -{35,54,-23}, -{35,54,-22}, -{35,54,-21}, -{35,54,-20}, -{35,54,-19}, -{35,54,-18}, -{35,54,-17}, -{35,54,-16}, -{35,54,-15}, -{35,54,-14}, -{35,54,-13}, -{35,54,-12}, -{35,54,-11}, -{35,54,-10}, -{35,54,-9}, -{35,54,-8}, -{35,54,-7}, -{35,54,-6}, -{35,54,-5}, -{35,54,-4}, -{35,54,-3}, -{35,54,-2}, -{35,54,-1}, -{35,54,0}, -{35,54,1}, -{35,54,2}, -{35,54,3}, -{35,54,4}, -{35,54,5}, -{35,54,6}, -{35,54,7}, -{35,54,8}, -{35,54,9}, -{35,54,10}, -{35,54,11}, -{35,54,12}, -{35,54,13}, -{35,54,14}, -{35,54,15}, -{35,54,16}, -{35,54,17}, -{35,54,18}, -{35,54,19}, -{35,54,20}, -{35,54,21}, -{35,54,22}, -{35,54,23}, -{35,54,24}, -{35,54,25}, -{35,54,26}, -{35,54,27}, -{35,54,28}, -{35,54,29}, -{35,54,30}, -{35,54,31}, -{35,54,32}, -{35,54,33}, -{35,54,34}, -{35,54,35}, -{35,54,36}, -{35,54,37}, -{35,54,38}, -{35,54,39}, -{35,54,40}, -{35,54,41}, -{35,54,42}, -{35,54,43}, -{35,54,44}, -{35,54,45}, -{35,54,46}, -{35,54,47}, -{35,54,48}, -{35,55,-89}, -{35,55,-88}, -{35,55,-87}, -{35,55,-86}, -{35,55,-85}, -{35,55,-84}, -{35,55,-83}, -{35,55,-82}, -{35,55,-81}, -{35,55,-80}, -{35,55,-79}, -{35,55,-78}, -{35,55,-77}, -{35,55,-76}, -{35,55,-75}, -{35,55,-74}, -{35,55,-73}, -{35,55,-72}, -{35,55,-71}, -{35,55,-70}, -{35,55,-69}, -{35,55,-68}, -{35,55,-67}, -{35,55,-66}, -{35,55,-65}, -{35,55,-64}, -{35,55,-63}, -{35,55,-62}, -{35,55,-61}, -{35,55,-60}, -{35,55,-59}, -{35,55,-58}, -{35,55,-57}, -{35,55,-56}, -{35,55,-55}, -{35,55,-54}, -{35,55,-53}, -{35,55,-52}, -{35,55,-51}, -{35,55,-50}, -{35,55,-49}, -{35,55,-48}, -{35,55,-47}, -{35,55,-46}, -{35,55,-45}, -{35,55,-44}, -{35,55,-43}, -{35,55,-42}, -{35,55,-41}, -{35,55,-40}, -{35,55,-39}, -{35,55,-38}, -{35,55,-37}, -{35,55,-36}, -{35,55,-35}, -{35,55,-34}, -{35,55,-33}, -{35,55,-32}, -{35,55,-31}, -{35,55,-30}, -{35,55,-29}, -{35,55,-28}, -{35,55,-27}, -{35,55,-26}, -{35,55,-25}, -{35,55,-24}, -{35,55,-23}, -{35,55,-22}, -{35,55,-21}, -{35,55,-20}, -{35,55,-19}, -{35,55,-18}, -{35,55,-17}, -{35,55,-16}, -{35,55,-15}, -{35,55,-14}, -{35,55,-13}, -{35,55,-12}, -{35,55,-11}, -{35,55,-10}, -{35,55,-9}, -{35,55,-8}, -{35,55,-7}, -{35,55,-6}, -{35,55,-5}, -{35,55,-4}, -{35,55,-3}, -{35,55,-2}, -{35,55,-1}, -{35,55,0}, -{35,55,1}, -{35,55,2}, -{35,55,3}, -{35,55,4}, -{35,55,5}, -{35,55,6}, -{35,55,7}, -{35,55,8}, -{35,55,9}, -{35,55,10}, -{35,55,11}, -{35,55,12}, -{35,55,13}, -{35,55,14}, -{35,55,15}, -{35,55,16}, -{35,55,17}, -{35,55,18}, -{35,55,19}, -{35,55,20}, -{35,55,21}, -{35,55,22}, -{35,55,23}, -{35,55,24}, -{35,55,25}, -{35,55,26}, -{35,55,27}, -{35,55,28}, -{35,55,29}, -{35,55,30}, -{35,55,31}, -{35,55,32}, -{35,55,33}, -{35,55,34}, -{35,55,35}, -{35,55,36}, -{35,55,37}, -{35,55,38}, -{35,55,39}, -{35,55,40}, -{35,55,41}, -{35,55,42}, -{35,55,43}, -{35,55,44}, -{35,55,45}, -{35,55,46}, -{35,55,47}, -{35,55,48}, -{35,56,-90}, -{35,56,-89}, -{35,56,-88}, -{35,56,-87}, -{35,56,-86}, -{35,56,-85}, -{35,56,-84}, -{35,56,-83}, -{35,56,-82}, -{35,56,-81}, -{35,56,-80}, -{35,56,-79}, -{35,56,-78}, -{35,56,-77}, -{35,56,-76}, -{35,56,-75}, -{35,56,-74}, -{35,56,-73}, -{35,56,-72}, -{35,56,-71}, -{35,56,-70}, -{35,56,-69}, -{35,56,-68}, -{35,56,-67}, -{35,56,-66}, -{35,56,-65}, -{35,56,-64}, -{35,56,-63}, -{35,56,-62}, -{35,56,-61}, -{35,56,-60}, -{35,56,-59}, -{35,56,-58}, -{35,56,-57}, -{35,56,-56}, -{35,56,-55}, -{35,56,-54}, -{35,56,-53}, -{35,56,-52}, -{35,56,-51}, -{35,56,-50}, -{35,56,-49}, -{35,56,-48}, -{35,56,-47}, -{35,56,-46}, -{35,56,-45}, -{35,56,-44}, -{35,56,-43}, -{35,56,-42}, -{35,56,-41}, -{35,56,-40}, -{35,56,-39}, -{35,56,-38}, -{35,56,-37}, -{35,56,-36}, -{35,56,-35}, -{35,56,-34}, -{35,56,-33}, -{35,56,-32}, -{35,56,-31}, -{35,56,-30}, -{35,56,-29}, -{35,56,-28}, -{35,56,-27}, -{35,56,-26}, -{35,56,-25}, -{35,56,-24}, -{35,56,-23}, -{35,56,-22}, -{35,56,-21}, -{35,56,-20}, -{35,56,-19}, -{35,56,-18}, -{35,56,-17}, -{35,56,-16}, -{35,56,-15}, -{35,56,-14}, -{35,56,-13}, -{35,56,-12}, -{35,56,-11}, -{35,56,-10}, -{35,56,-9}, -{35,56,-8}, -{35,56,-7}, -{35,56,-6}, -{35,56,-5}, -{35,56,-4}, -{35,56,-3}, -{35,56,-2}, -{35,56,-1}, -{35,56,0}, -{35,56,1}, -{35,56,2}, -{35,56,3}, -{35,56,4}, -{35,56,5}, -{35,56,6}, -{35,56,7}, -{35,56,8}, -{35,56,9}, -{35,56,10}, -{35,56,11}, -{35,56,12}, -{35,56,13}, -{35,56,14}, -{35,56,15}, -{35,56,16}, -{35,56,17}, -{35,56,18}, -{35,56,19}, -{35,56,20}, -{35,56,21}, -{35,56,22}, -{35,56,23}, -{35,56,24}, -{35,56,25}, -{35,56,26}, -{35,56,27}, -{35,56,28}, -{35,56,29}, -{35,56,30}, -{35,56,31}, -{35,56,32}, -{35,56,33}, -{35,56,34}, -{35,56,35}, -{35,56,36}, -{35,56,37}, -{35,56,38}, -{35,56,39}, -{35,56,40}, -{35,56,41}, -{35,56,42}, -{35,56,43}, -{35,56,44}, -{35,56,45}, -{35,56,46}, -{35,56,47}, -{35,56,48}, -{35,56,49}, -{35,57,-91}, -{35,57,-90}, -{35,57,-89}, -{35,57,-88}, -{35,57,-87}, -{35,57,-86}, -{35,57,-85}, -{35,57,-84}, -{35,57,-83}, -{35,57,-82}, -{35,57,-81}, -{35,57,-80}, -{35,57,-79}, -{35,57,-78}, -{35,57,-77}, -{35,57,-76}, -{35,57,-75}, -{35,57,-74}, -{35,57,-73}, -{35,57,-72}, -{35,57,-71}, -{35,57,-70}, -{35,57,-69}, -{35,57,-68}, -{35,57,-67}, -{35,57,-66}, -{35,57,-65}, -{35,57,-64}, -{35,57,-63}, -{35,57,-62}, -{35,57,-61}, -{35,57,-60}, -{35,57,-59}, -{35,57,-58}, -{35,57,-57}, -{35,57,-56}, -{35,57,-55}, -{35,57,-54}, -{35,57,-53}, -{35,57,-52}, -{35,57,-51}, -{35,57,-50}, -{35,57,-49}, -{35,57,-48}, -{35,57,-47}, -{35,57,-46}, -{35,57,-45}, -{35,57,-44}, -{35,57,-43}, -{35,57,-42}, -{35,57,-41}, -{35,57,-40}, -{35,57,-39}, -{35,57,-38}, -{35,57,-37}, -{35,57,-36}, -{35,57,-35}, -{35,57,-34}, -{35,57,-33}, -{35,57,-32}, -{35,57,-31}, -{35,57,-30}, -{35,57,-29}, -{35,57,-28}, -{35,57,-27}, -{35,57,-26}, -{35,57,-25}, -{35,57,-24}, -{35,57,-23}, -{35,57,-22}, -{35,57,-21}, -{35,57,-20}, -{35,57,-19}, -{35,57,-18}, -{35,57,-17}, -{35,57,-16}, -{35,57,-15}, -{35,57,-14}, -{35,57,-13}, -{35,57,-12}, -{35,57,-11}, -{35,57,-10}, -{35,57,-9}, -{35,57,-8}, -{35,57,-7}, -{35,57,-6}, -{35,57,-5}, -{35,57,-4}, -{35,57,-3}, -{35,57,-2}, -{35,57,-1}, -{35,57,0}, -{35,57,1}, -{35,57,2}, -{35,57,3}, -{35,57,4}, -{35,57,5}, -{35,57,6}, -{35,57,7}, -{35,57,8}, -{35,57,9}, -{35,57,10}, -{35,57,11}, -{35,57,12}, -{35,57,13}, -{35,57,14}, -{35,57,15}, -{35,57,16}, -{35,57,17}, -{35,57,18}, -{35,57,19}, -{35,57,20}, -{35,57,21}, -{35,57,22}, -{35,57,23}, -{35,57,24}, -{35,57,25}, -{35,57,26}, -{35,57,27}, -{35,57,28}, -{35,57,29}, -{35,57,30}, -{35,57,31}, -{35,57,32}, -{35,57,33}, -{35,57,34}, -{35,57,35}, -{35,57,36}, -{35,57,37}, -{35,57,38}, -{35,57,39}, -{35,57,40}, -{35,57,41}, -{35,57,42}, -{35,57,43}, -{35,57,44}, -{35,57,45}, -{35,57,46}, -{35,57,47}, -{35,57,48}, -{35,57,49}, -{35,58,-92}, -{35,58,-91}, -{35,58,-90}, -{35,58,-89}, -{35,58,-88}, -{35,58,-87}, -{35,58,-86}, -{35,58,-85}, -{35,58,-84}, -{35,58,-83}, -{35,58,-82}, -{35,58,-81}, -{35,58,-80}, -{35,58,-79}, -{35,58,-78}, -{35,58,-77}, -{35,58,-76}, -{35,58,-75}, -{35,58,-74}, -{35,58,-73}, -{35,58,-72}, -{35,58,-71}, -{35,58,-70}, -{35,58,-69}, -{35,58,-68}, -{35,58,-67}, -{35,58,-66}, -{35,58,-65}, -{35,58,-64}, -{35,58,-63}, -{35,58,-62}, -{35,58,-61}, -{35,58,-60}, -{35,58,-59}, -{35,58,-58}, -{35,58,-57}, -{35,58,-56}, -{35,58,-55}, -{35,58,-54}, -{35,58,-53}, -{35,58,-52}, -{35,58,-51}, -{35,58,-50}, -{35,58,-49}, -{35,58,-48}, -{35,58,-47}, -{35,58,-46}, -{35,58,-45}, -{35,58,-44}, -{35,58,-43}, -{35,58,-42}, -{35,58,-41}, -{35,58,-40}, -{35,58,-39}, -{35,58,-38}, -{35,58,-37}, -{35,58,-36}, -{35,58,-35}, -{35,58,-34}, -{35,58,-33}, -{35,58,-32}, -{35,58,-31}, -{35,58,-30}, -{35,58,-29}, -{35,58,-28}, -{35,58,-27}, -{35,58,-26}, -{35,58,-25}, -{35,58,-24}, -{35,58,-23}, -{35,58,-22}, -{35,58,-21}, -{35,58,-20}, -{35,58,-19}, -{35,58,-18}, -{35,58,-17}, -{35,58,-16}, -{35,58,-15}, -{35,58,-14}, -{35,58,-13}, -{35,58,-12}, -{35,58,-11}, -{35,58,-10}, -{35,58,-9}, -{35,58,-8}, -{35,58,-7}, -{35,58,-6}, -{35,58,-5}, -{35,58,-4}, -{35,58,-3}, -{35,58,-2}, -{35,58,-1}, -{35,58,0}, -{35,58,1}, -{35,58,2}, -{35,58,3}, -{35,58,4}, -{35,58,5}, -{35,58,6}, -{35,58,7}, -{35,58,8}, -{35,58,9}, -{35,58,10}, -{35,58,11}, -{35,58,12}, -{35,58,13}, -{35,58,14}, -{35,58,15}, -{35,58,16}, -{35,58,17}, -{35,58,18}, -{35,58,19}, -{35,58,20}, -{35,58,21}, -{35,58,22}, -{35,58,23}, -{35,58,24}, -{35,58,25}, -{35,58,26}, -{35,58,27}, -{35,58,28}, -{35,58,29}, -{35,58,30}, -{35,58,31}, -{35,58,32}, -{35,58,33}, -{35,58,34}, -{35,58,35}, -{35,58,36}, -{35,58,37}, -{35,58,38}, -{35,58,39}, -{35,58,40}, -{35,58,41}, -{35,58,42}, -{35,58,43}, -{35,58,44}, -{35,58,45}, -{35,58,46}, -{35,58,47}, -{35,58,48}, -{35,58,49}, -{35,59,-93}, -{35,59,-92}, -{35,59,-91}, -{35,59,-90}, -{35,59,-89}, -{35,59,-88}, -{35,59,-87}, -{35,59,-86}, -{35,59,-85}, -{35,59,-84}, -{35,59,-83}, -{35,59,-82}, -{35,59,-81}, -{35,59,-80}, -{35,59,-79}, -{35,59,-78}, -{35,59,-77}, -{35,59,-76}, -{35,59,-75}, -{35,59,-74}, -{35,59,-73}, -{35,59,-72}, -{35,59,-71}, -{35,59,-70}, -{35,59,-69}, -{35,59,-68}, -{35,59,-67}, -{35,59,-66}, -{35,59,-65}, -{35,59,-64}, -{35,59,-63}, -{35,59,-62}, -{35,59,-61}, -{35,59,-60}, -{35,59,-59}, -{35,59,-58}, -{35,59,-57}, -{35,59,-56}, -{35,59,-55}, -{35,59,-54}, -{35,59,-53}, -{35,59,-52}, -{35,59,-51}, -{35,59,-50}, -{35,59,-49}, -{35,59,-48}, -{35,59,-47}, -{35,59,-46}, -{35,59,-45}, -{35,59,-44}, -{35,59,-43}, -{35,59,-42}, -{35,59,-41}, -{35,59,-40}, -{35,59,-39}, -{35,59,-38}, -{35,59,-37}, -{35,59,-36}, -{35,59,-35}, -{35,59,-34}, -{35,59,-33}, -{35,59,-32}, -{35,59,-31}, -{35,59,-30}, -{35,59,-29}, -{35,59,-28}, -{35,59,-27}, -{35,59,-26}, -{35,59,-25}, -{35,59,-24}, -{35,59,-23}, -{35,59,-22}, -{35,59,-21}, -{35,59,-20}, -{35,59,-19}, -{35,59,-18}, -{35,59,-17}, -{35,59,-16}, -{35,59,-15}, -{35,59,-14}, -{35,59,-13}, -{35,59,-12}, -{35,59,-11}, -{35,59,-10}, -{35,59,-9}, -{35,59,-8}, -{35,59,-7}, -{35,59,-6}, -{35,59,-5}, -{35,59,-4}, -{35,59,-3}, -{35,59,-2}, -{35,59,-1}, -{35,59,0}, -{35,59,1}, -{35,59,2}, -{35,59,3}, -{35,59,4}, -{35,59,5}, -{35,59,6}, -{35,59,7}, -{35,59,8}, -{35,59,9}, -{35,59,10}, -{35,59,11}, -{35,59,12}, -{35,59,13}, -{35,59,14}, -{35,59,15}, -{35,59,16}, -{35,59,17}, -{35,59,18}, -{35,59,19}, -{35,59,20}, -{35,59,21}, -{35,59,22}, -{35,59,23}, -{35,59,24}, -{35,59,25}, -{35,59,26}, -{35,59,27}, -{35,59,28}, -{35,59,29}, -{35,59,30}, -{35,59,31}, -{35,59,32}, -{35,59,33}, -{35,59,34}, -{35,59,35}, -{35,59,36}, -{35,59,37}, -{35,59,38}, -{35,59,39}, -{35,59,40}, -{35,59,41}, -{35,59,42}, -{35,59,43}, -{35,59,44}, -{35,59,45}, -{35,59,46}, -{35,59,47}, -{35,59,48}, -{35,59,49}, -{35,60,-94}, -{35,60,-93}, -{35,60,-92}, -{35,60,-91}, -{35,60,-90}, -{35,60,-89}, -{35,60,-88}, -{35,60,-87}, -{35,60,-86}, -{35,60,-85}, -{35,60,-84}, -{35,60,-83}, -{35,60,-82}, -{35,60,-81}, -{35,60,-80}, -{35,60,-79}, -{35,60,-78}, -{35,60,-77}, -{35,60,-76}, -{35,60,-75}, -{35,60,-74}, -{35,60,-73}, -{35,60,-72}, -{35,60,-71}, -{35,60,-70}, -{35,60,-69}, -{35,60,-68}, -{35,60,-67}, -{35,60,-66}, -{35,60,-65}, -{35,60,-64}, -{35,60,-63}, -{35,60,-62}, -{35,60,-61}, -{35,60,-60}, -{35,60,-59}, -{35,60,-58}, -{35,60,-57}, -{35,60,-56}, -{35,60,-55}, -{35,60,-54}, -{35,60,-53}, -{35,60,-52}, -{35,60,-51}, -{35,60,-50}, -{35,60,-49}, -{35,60,-48}, -{35,60,-47}, -{35,60,-46}, -{35,60,-45}, -{35,60,-44}, -{35,60,-43}, -{35,60,-42}, -{35,60,-41}, -{35,60,-40}, -{35,60,-39}, -{35,60,-38}, -{35,60,-37}, -{35,60,-36}, -{35,60,-35}, -{35,60,-34}, -{35,60,-33}, -{35,60,-32}, -{35,60,-31}, -{35,60,-30}, -{35,60,-29}, -{35,60,-28}, -{35,60,-27}, -{35,60,-26}, -{35,60,-25}, -{35,60,-24}, -{35,60,-23}, -{35,60,-22}, -{35,60,-21}, -{35,60,-20}, -{35,60,-19}, -{35,60,-18}, -{35,60,-17}, -{35,60,-16}, -{35,60,-15}, -{35,60,-14}, -{35,60,-13}, -{35,60,-12}, -{35,60,-11}, -{35,60,-10}, -{35,60,-9}, -{35,60,-8}, -{35,60,-7}, -{35,60,-6}, -{35,60,-5}, -{35,60,-4}, -{35,60,-3}, -{35,60,-2}, -{35,60,-1}, -{35,60,0}, -{35,60,1}, -{35,60,2}, -{35,60,3}, -{35,60,4}, -{35,60,5}, -{35,60,6}, -{35,60,7}, -{35,60,8}, -{35,60,9}, -{35,60,10}, -{35,60,11}, -{35,60,12}, -{35,60,13}, -{35,60,14}, -{35,60,15}, -{35,60,16}, -{35,60,17}, -{35,60,18}, -{35,60,19}, -{35,60,20}, -{35,61,-95}, -{35,61,-94}, -{35,61,-93}, -{35,61,-92}, -{35,61,-91}, -{35,61,-90}, -{35,61,-89}, -{35,61,-88}, -{35,61,-87}, -{35,61,-86}, -{35,61,-85}, -{35,61,-84}, -{35,61,-83}, -{35,61,-82}, -{35,61,-81}, -{35,61,-80}, -{35,61,-79}, -{35,61,-78}, -{35,61,-77}, -{35,61,-76}, -{35,61,-75}, -{35,61,-74}, -{35,61,-73}, -{35,61,-72}, -{35,61,-71}, -{35,61,-70}, -{35,61,-69}, -{35,61,-68}, -{35,61,-67}, -{35,61,-66}, -{35,61,-65}, -{35,61,-64}, -{35,61,-63}, -{35,61,-62}, -{35,61,-61}, -{35,61,-60}, -{35,61,-59}, -{35,61,-58}, -{35,61,-57}, -{35,61,-56}, -{35,61,-55}, -{35,61,-54}, -{35,61,-53}, -{35,61,-52}, -{35,61,-51}, -{35,61,-50}, -{35,61,-49}, -{35,61,-48}, -{35,61,-47}, -{35,61,-46}, -{35,61,-45}, -{35,61,-44}, -{35,61,-43}, -{35,61,-42}, -{35,61,-41}, -{35,61,-40}, -{35,61,-39}, -{35,61,-38}, -{35,61,-37}, -{35,61,-36}, -{35,61,-35}, -{35,61,-34}, -{35,61,-33}, -{35,61,-32}, -{35,61,-31}, -{35,61,-30}, -{35,61,-29}, -{35,61,-28}, -{35,61,-27}, -{35,61,-26}, -{35,61,-25}, -{35,61,-24}, -{35,61,-23}, -{35,61,-22}, -{35,61,-21}, -{35,61,-20}, -{35,61,-19}, -{35,61,-18}, -{35,61,-17}, -{35,61,-16}, -{35,61,-15}, -{35,61,-14}, -{35,61,-13}, -{35,61,-12}, -{35,61,-11}, -{35,61,-10}, -{35,61,-9}, -{35,61,-8}, -{35,61,-7}, -{35,61,-6}, -{35,61,-5}, -{35,61,-4}, -{35,61,-3}, -{35,61,-2}, -{35,61,-1}, -{35,61,0}, -{35,61,1}, -{35,61,2}, -{35,62,-95}, -{35,62,-94}, -{35,62,-93}, -{35,62,-92}, -{35,62,-91}, -{35,62,-90}, -{35,62,-89}, -{35,62,-88}, -{35,62,-87}, -{35,62,-86}, -{35,62,-85}, -{35,62,-84}, -{35,62,-83}, -{35,62,-82}, -{35,62,-81}, -{35,62,-80}, -{35,62,-79}, -{35,62,-78}, -{35,62,-77}, -{35,62,-76}, -{35,62,-75}, -{35,62,-74}, -{35,62,-73}, -{35,62,-72}, -{35,62,-71}, -{35,62,-70}, -{35,62,-69}, -{35,62,-68}, -{35,62,-67}, -{35,62,-66}, -{35,62,-65}, -{35,62,-64}, -{35,62,-63}, -{35,62,-62}, -{35,62,-61}, -{35,62,-60}, -{35,62,-59}, -{35,62,-58}, -{35,62,-57}, -{35,62,-56}, -{35,62,-55}, -{35,62,-54}, -{35,62,-53}, -{35,62,-52}, -{35,62,-51}, -{35,62,-50}, -{35,62,-49}, -{35,62,-48}, -{35,62,-47}, -{35,62,-46}, -{35,62,-45}, -{35,62,-44}, -{35,62,-43}, -{35,62,-42}, -{35,62,-41}, -{35,62,-40}, -{35,62,-39}, -{35,62,-38}, -{35,62,-37}, -{35,62,-36}, -{35,62,-35}, -{35,62,-34}, -{35,62,-33}, -{35,62,-32}, -{35,62,-31}, -{35,62,-30}, -{35,62,-29}, -{35,62,-28}, -{35,62,-27}, -{35,62,-26}, -{35,62,-25}, -{35,62,-24}, -{35,62,-23}, -{35,62,-22}, -{35,62,-21}, -{35,62,-20}, -{35,62,-19}, -{35,62,-18}, -{35,62,-17}, -{35,62,-16}, -{35,62,-15}, -{35,62,-14}, -{35,62,-13}, -{35,62,-12}, -{35,62,-11}, -{35,62,-10}, -{35,63,-96}, -{35,63,-95}, -{35,63,-94}, -{35,63,-93}, -{35,63,-92}, -{35,63,-91}, -{35,63,-90}, -{35,63,-89}, -{35,63,-88}, -{35,63,-87}, -{35,63,-86}, -{35,63,-85}, -{35,63,-84}, -{35,63,-83}, -{35,63,-82}, -{35,63,-81}, -{35,63,-80}, -{35,63,-79}, -{35,63,-78}, -{35,63,-77}, -{35,63,-76}, -{35,63,-75}, -{35,63,-74}, -{35,63,-73}, -{35,63,-72}, -{35,63,-71}, -{35,63,-70}, -{35,63,-69}, -{35,63,-68}, -{35,63,-67}, -{35,63,-66}, -{35,63,-65}, -{35,63,-64}, -{35,63,-63}, -{35,63,-62}, -{35,63,-61}, -{35,63,-60}, -{35,63,-59}, -{35,63,-58}, -{35,63,-57}, -{35,63,-56}, -{35,63,-55}, -{35,63,-54}, -{35,63,-53}, -{35,63,-52}, -{35,63,-51}, -{35,63,-50}, -{35,63,-49}, -{35,63,-48}, -{35,63,-47}, -{35,63,-46}, -{35,63,-45}, -{35,63,-44}, -{35,63,-43}, -{35,63,-42}, -{35,63,-41}, -{35,63,-40}, -{35,63,-39}, -{35,63,-38}, -{35,63,-37}, -{35,63,-36}, -{35,63,-35}, -{35,63,-34}, -{35,63,-33}, -{35,63,-32}, -{35,63,-31}, -{35,63,-30}, -{35,63,-29}, -{35,63,-28}, -{35,63,-27}, -{35,63,-26}, -{35,63,-25}, -{35,63,-24}, -{35,63,-23}, -{35,63,-22}, -{35,63,-21}, -{35,63,-20}, -{35,64,-97}, -{35,64,-96}, -{35,64,-95}, -{35,64,-94}, -{35,64,-93}, -{35,64,-92}, -{35,64,-91}, -{35,64,-90}, -{35,64,-89}, -{35,64,-88}, -{35,64,-87}, -{35,64,-86}, -{35,64,-85}, -{35,64,-84}, -{35,64,-83}, -{35,64,-82}, -{35,64,-81}, -{35,64,-80}, -{35,64,-79}, -{35,64,-78}, -{35,64,-77}, -{35,64,-76}, -{35,64,-75}, -{35,64,-74}, -{35,64,-73}, -{35,64,-72}, -{35,64,-71}, -{35,64,-70}, -{35,64,-69}, -{35,64,-68}, -{35,64,-67}, -{35,64,-66}, -{35,64,-65}, -{35,64,-64}, -{35,64,-63}, -{35,64,-62}, -{35,64,-61}, -{35,64,-60}, -{35,64,-59}, -{35,64,-58}, -{35,64,-57}, -{35,64,-56}, -{35,64,-55}, -{35,64,-54}, -{35,64,-53}, -{35,64,-52}, -{35,64,-51}, -{35,64,-50}, -{35,64,-49}, -{35,64,-48}, -{35,64,-47}, -{35,64,-46}, -{35,64,-45}, -{35,64,-44}, -{35,64,-43}, -{35,64,-42}, -{35,64,-41}, -{35,64,-40}, -{35,64,-39}, -{35,64,-38}, -{35,64,-37}, -{35,64,-36}, -{35,64,-35}, -{35,64,-34}, -{35,64,-33}, -{35,64,-32}, -{35,64,-31}, -{35,64,-30}, -{35,64,-29}, -{35,64,-28}, -{35,65,-98}, -{35,65,-97}, -{35,65,-96}, -{35,65,-95}, -{35,65,-94}, -{35,65,-93}, -{35,65,-92}, -{35,65,-91}, -{35,65,-90}, -{35,65,-89}, -{35,65,-88}, -{35,65,-87}, -{35,65,-86}, -{35,65,-85}, -{35,65,-84}, -{35,65,-83}, -{35,65,-82}, -{35,65,-81}, -{35,65,-80}, -{35,65,-79}, -{35,65,-78}, -{35,65,-77}, -{35,65,-76}, -{35,65,-75}, -{35,65,-74}, -{35,65,-73}, -{35,65,-72}, -{35,65,-71}, -{35,65,-70}, -{35,65,-69}, -{35,65,-68}, -{35,65,-67}, -{35,65,-66}, -{35,65,-65}, -{35,65,-64}, -{35,65,-63}, -{35,65,-62}, -{35,65,-61}, -{35,65,-60}, -{35,65,-59}, -{35,65,-58}, -{35,65,-57}, -{35,65,-56}, -{35,65,-55}, -{35,65,-54}, -{35,65,-53}, -{35,65,-52}, -{35,65,-51}, -{35,65,-50}, -{35,65,-49}, -{35,65,-48}, -{35,65,-47}, -{35,65,-46}, -{35,65,-45}, -{35,65,-44}, -{35,65,-43}, -{35,65,-42}, -{35,65,-41}, -{35,65,-40}, -{35,65,-39}, -{35,65,-38}, -{35,65,-37}, -{35,65,-36}, -{35,66,-99}, -{35,66,-98}, -{35,66,-97}, -{35,66,-96}, -{35,66,-95}, -{35,66,-94}, -{35,66,-93}, -{35,66,-92}, -{35,66,-91}, -{35,66,-90}, -{35,66,-89}, -{35,66,-88}, -{35,66,-87}, -{35,66,-86}, -{35,66,-85}, -{35,66,-84}, -{35,66,-83}, -{35,66,-82}, -{35,66,-81}, -{35,66,-80}, -{35,66,-79}, -{35,66,-78}, -{35,66,-77}, -{35,66,-76}, -{35,66,-75}, -{35,66,-74}, -{35,66,-73}, -{35,66,-72}, -{35,66,-71}, -{35,66,-70}, -{35,66,-69}, -{35,66,-68}, -{35,66,-67}, -{35,66,-66}, -{35,66,-65}, -{35,66,-64}, -{35,66,-63}, -{35,66,-62}, -{35,66,-61}, -{35,66,-60}, -{35,66,-59}, -{35,66,-58}, -{35,66,-57}, -{35,66,-56}, -{35,66,-55}, -{35,66,-54}, -{35,66,-53}, -{35,66,-52}, -{35,66,-51}, -{35,66,-50}, -{35,66,-49}, -{35,66,-48}, -{35,66,-47}, -{35,66,-46}, -{35,66,-45}, -{35,66,-44}, -{35,66,-43}, -{35,66,-42}, -{35,67,-100}, -{35,67,-99}, -{35,67,-98}, -{35,67,-97}, -{35,67,-96}, -{35,67,-95}, -{35,67,-94}, -{35,67,-93}, -{35,67,-92}, -{35,67,-91}, -{35,67,-90}, -{35,67,-89}, -{35,67,-88}, -{35,67,-87}, -{35,67,-86}, -{35,67,-85}, -{35,67,-84}, -{35,67,-83}, -{35,67,-82}, -{35,67,-81}, -{35,67,-80}, -{35,67,-79}, -{35,67,-78}, -{35,67,-77}, -{35,67,-76}, -{35,67,-75}, -{35,67,-74}, -{35,67,-73}, -{35,67,-72}, -{35,67,-71}, -{35,67,-70}, -{35,67,-69}, -{35,67,-68}, -{35,67,-67}, -{35,67,-66}, -{35,67,-65}, -{35,67,-64}, -{35,67,-63}, -{35,67,-62}, -{35,67,-61}, -{35,67,-60}, -{35,67,-59}, -{35,67,-58}, -{35,67,-57}, -{35,67,-56}, -{35,67,-55}, -{35,67,-54}, -{35,67,-53}, -{35,67,-52}, -{35,67,-51}, -{35,67,-50}, -{35,67,-49}, -{35,68,-101}, -{35,68,-100}, -{35,68,-99}, -{35,68,-98}, -{35,68,-97}, -{35,68,-96}, -{35,68,-95}, -{35,68,-94}, -{35,68,-93}, -{35,68,-92}, -{35,68,-91}, -{35,68,-90}, -{35,68,-89}, -{35,68,-88}, -{35,68,-87}, -{35,68,-86}, -{35,68,-85}, -{35,68,-84}, -{35,68,-83}, -{35,68,-82}, -{35,68,-81}, -{35,68,-80}, -{35,68,-79}, -{35,68,-78}, -{35,68,-77}, -{35,68,-76}, -{35,68,-75}, -{35,68,-74}, -{35,68,-73}, -{35,68,-72}, -{35,68,-71}, -{35,68,-70}, -{35,68,-69}, -{35,68,-68}, -{35,68,-67}, -{35,68,-66}, -{35,68,-65}, -{35,68,-64}, -{35,68,-63}, -{35,68,-62}, -{35,68,-61}, -{35,68,-60}, -{35,68,-59}, -{35,68,-58}, -{35,68,-57}, -{35,68,-56}, -{35,68,-55}, -{35,68,-54}, -{35,69,-101}, -{35,69,-100}, -{35,69,-99}, -{35,69,-98}, -{35,69,-97}, -{35,69,-96}, -{35,69,-95}, -{35,69,-94}, -{35,69,-93}, -{35,69,-92}, -{35,69,-91}, -{35,69,-90}, -{35,69,-89}, -{35,69,-88}, -{35,69,-87}, -{35,69,-86}, -{35,69,-85}, -{35,69,-84}, -{35,69,-83}, -{35,69,-82}, -{35,69,-81}, -{35,69,-80}, -{35,69,-79}, -{35,69,-78}, -{35,69,-77}, -{35,69,-76}, -{35,69,-75}, -{35,69,-74}, -{35,69,-73}, -{35,69,-72}, -{35,69,-71}, -{35,69,-70}, -{35,69,-69}, -{35,69,-68}, -{35,69,-67}, -{35,69,-66}, -{35,69,-65}, -{35,69,-64}, -{35,69,-63}, -{35,69,-62}, -{35,69,-61}, -{35,69,-60}, -{35,69,-59}, -{35,70,-102}, -{35,70,-101}, -{35,70,-100}, -{35,70,-99}, -{35,70,-98}, -{35,70,-97}, -{35,70,-96}, -{35,70,-95}, -{35,70,-94}, -{35,70,-93}, -{35,70,-92}, -{35,70,-91}, -{35,70,-90}, -{35,70,-89}, -{35,70,-88}, -{35,70,-87}, -{35,70,-86}, -{35,70,-85}, -{35,70,-84}, -{35,70,-83}, -{35,70,-82}, -{35,70,-81}, -{35,70,-80}, -{35,70,-79}, -{35,70,-78}, -{35,70,-77}, -{35,70,-76}, -{35,70,-75}, -{35,70,-74}, -{35,70,-73}, -{35,70,-72}, -{35,70,-71}, -{35,70,-70}, -{35,70,-69}, -{35,70,-68}, -{35,70,-67}, -{35,70,-66}, -{35,70,-65}, -{35,70,-64}, -{35,71,-103}, -{35,71,-102}, -{35,71,-101}, -{35,71,-100}, -{35,71,-99}, -{35,71,-98}, -{35,71,-97}, -{35,71,-96}, -{35,71,-95}, -{35,71,-94}, -{35,71,-93}, -{35,71,-92}, -{35,71,-91}, -{35,71,-90}, -{35,71,-89}, -{35,71,-88}, -{35,71,-87}, -{35,71,-86}, -{35,71,-85}, -{35,71,-84}, -{35,71,-83}, -{35,71,-82}, -{35,71,-81}, -{35,71,-80}, -{35,71,-79}, -{35,71,-78}, -{35,71,-77}, -{35,71,-76}, -{35,71,-75}, -{35,71,-74}, -{35,71,-73}, -{35,71,-72}, -{35,71,-71}, -{35,71,-70}, -{35,71,-69}, -{35,72,-103}, -{35,72,-102}, -{35,72,-101}, -{35,72,-100}, -{35,72,-99}, -{35,72,-98}, -{35,72,-97}, -{35,72,-96}, -{35,72,-95}, -{35,72,-94}, -{35,72,-93}, -{35,72,-92}, -{35,72,-91}, -{35,72,-90}, -{35,72,-89}, -{35,72,-88}, -{35,72,-87}, -{35,72,-86}, -{35,72,-85}, -{35,72,-84}, -{35,72,-83}, -{35,72,-82}, -{35,72,-81}, -{35,72,-80}, -{35,72,-79}, -{35,72,-78}, -{35,72,-77}, -{35,72,-76}, -{35,72,-75}, -{35,72,-74}, -{35,72,-73}, -{35,73,-103}, -{35,73,-102}, -{35,73,-101}, -{35,73,-100}, -{35,73,-99}, -{35,73,-98}, -{35,73,-97}, -{35,73,-96}, -{35,73,-95}, -{35,73,-94}, -{35,73,-93}, -{35,73,-92}, -{35,73,-91}, -{35,73,-90}, -{35,73,-89}, -{35,73,-88}, -{35,73,-87}, -{35,73,-86}, -{35,73,-85}, -{35,73,-84}, -{35,73,-83}, -{35,73,-82}, -{35,73,-81}, -{35,73,-80}, -{35,73,-79}, -{35,73,-78}, -{35,73,-77}, -{35,74,-103}, -{35,74,-102}, -{35,74,-101}, -{35,74,-100}, -{35,74,-99}, -{35,74,-98}, -{35,74,-97}, -{35,74,-96}, -{35,74,-95}, -{35,74,-94}, -{35,74,-93}, -{35,74,-92}, -{35,74,-91}, -{35,74,-90}, -{35,74,-89}, -{35,74,-88}, -{35,74,-87}, -{35,74,-86}, -{35,74,-85}, -{35,74,-84}, -{35,74,-83}, -{35,74,-82}, -{35,75,-103}, -{35,75,-102}, -{35,75,-101}, -{35,75,-100}, -{35,75,-99}, -{35,75,-98}, -{35,75,-97}, -{35,75,-96}, -{35,75,-95}, -{35,75,-94}, -{35,75,-93}, -{35,75,-92}, -{35,75,-91}, -{35,75,-90}, -{35,75,-89}, -{35,75,-88}, -{35,75,-87}, -{35,75,-86}, -{35,75,-85}, -{35,76,-103}, -{35,76,-102}, -{35,76,-101}, -{35,76,-100}, -{35,76,-99}, -{35,76,-98}, -{35,76,-97}, -{35,76,-96}, -{35,76,-95}, -{35,76,-94}, -{35,76,-93}, -{35,76,-92}, -{35,76,-91}, -{35,76,-90}, -{35,76,-89}, -{35,77,-103}, -{35,77,-102}, -{35,77,-101}, -{35,77,-100}, -{35,77,-99}, -{35,77,-98}, -{35,77,-97}, -{35,77,-96}, -{35,77,-95}, -{35,77,-94}, -{35,77,-93}, -{35,78,-103}, -{35,78,-102}, -{35,78,-101}, -{35,78,-100}, -{35,78,-99}, -{35,78,-98}, -{35,78,-97}, -{35,78,-96}, -{35,79,-103}, -{35,79,-102}, -{35,79,-101}, -{35,79,-100}, -{35,80,-103}, -{36,-43,40}, -{36,-43,41}, -{36,-42,36}, -{36,-42,37}, -{36,-42,38}, -{36,-42,39}, -{36,-42,40}, -{36,-42,41}, -{36,-41,32}, -{36,-41,33}, -{36,-41,34}, -{36,-41,35}, -{36,-41,36}, -{36,-41,37}, -{36,-41,38}, -{36,-41,39}, -{36,-41,40}, -{36,-41,41}, -{36,-40,29}, -{36,-40,30}, -{36,-40,31}, -{36,-40,32}, -{36,-40,33}, -{36,-40,34}, -{36,-40,35}, -{36,-40,36}, -{36,-40,37}, -{36,-40,38}, -{36,-40,39}, -{36,-40,40}, -{36,-40,41}, -{36,-40,42}, -{36,-39,26}, -{36,-39,27}, -{36,-39,28}, -{36,-39,29}, -{36,-39,30}, -{36,-39,31}, -{36,-39,32}, -{36,-39,33}, -{36,-39,34}, -{36,-39,35}, -{36,-39,36}, -{36,-39,37}, -{36,-39,38}, -{36,-39,39}, -{36,-39,40}, -{36,-39,41}, -{36,-39,42}, -{36,-38,23}, -{36,-38,24}, -{36,-38,25}, -{36,-38,26}, -{36,-38,27}, -{36,-38,28}, -{36,-38,29}, -{36,-38,30}, -{36,-38,31}, -{36,-38,32}, -{36,-38,33}, -{36,-38,34}, -{36,-38,35}, -{36,-38,36}, -{36,-38,37}, -{36,-38,38}, -{36,-38,39}, -{36,-38,40}, -{36,-38,41}, -{36,-38,42}, -{36,-37,20}, -{36,-37,21}, -{36,-37,22}, -{36,-37,23}, -{36,-37,24}, -{36,-37,25}, -{36,-37,26}, -{36,-37,27}, -{36,-37,28}, -{36,-37,29}, -{36,-37,30}, -{36,-37,31}, -{36,-37,32}, -{36,-37,33}, -{36,-37,34}, -{36,-37,35}, -{36,-37,36}, -{36,-37,37}, -{36,-37,38}, -{36,-37,39}, -{36,-37,40}, -{36,-37,41}, -{36,-37,42}, -{36,-36,17}, -{36,-36,18}, -{36,-36,19}, -{36,-36,20}, -{36,-36,21}, -{36,-36,22}, -{36,-36,23}, -{36,-36,24}, -{36,-36,25}, -{36,-36,26}, -{36,-36,27}, -{36,-36,28}, -{36,-36,29}, -{36,-36,30}, -{36,-36,31}, -{36,-36,32}, -{36,-36,33}, -{36,-36,34}, -{36,-36,35}, -{36,-36,36}, -{36,-36,37}, -{36,-36,38}, -{36,-36,39}, -{36,-36,40}, -{36,-36,41}, -{36,-36,42}, -{36,-35,15}, -{36,-35,16}, -{36,-35,17}, -{36,-35,18}, -{36,-35,19}, -{36,-35,20}, -{36,-35,21}, -{36,-35,22}, -{36,-35,23}, -{36,-35,24}, -{36,-35,25}, -{36,-35,26}, -{36,-35,27}, -{36,-35,28}, -{36,-35,29}, -{36,-35,30}, -{36,-35,31}, -{36,-35,32}, -{36,-35,33}, -{36,-35,34}, -{36,-35,35}, -{36,-35,36}, -{36,-35,37}, -{36,-35,38}, -{36,-35,39}, -{36,-35,40}, -{36,-35,41}, -{36,-35,42}, -{36,-34,13}, -{36,-34,14}, -{36,-34,15}, -{36,-34,16}, -{36,-34,17}, -{36,-34,18}, -{36,-34,19}, -{36,-34,20}, -{36,-34,21}, -{36,-34,22}, -{36,-34,23}, -{36,-34,24}, -{36,-34,25}, -{36,-34,26}, -{36,-34,27}, -{36,-34,28}, -{36,-34,29}, -{36,-34,30}, -{36,-34,31}, -{36,-34,32}, -{36,-34,33}, -{36,-34,34}, -{36,-34,35}, -{36,-34,36}, -{36,-34,37}, -{36,-34,38}, -{36,-34,39}, -{36,-34,40}, -{36,-34,41}, -{36,-34,42}, -{36,-33,11}, -{36,-33,12}, -{36,-33,13}, -{36,-33,14}, -{36,-33,15}, -{36,-33,16}, -{36,-33,17}, -{36,-33,18}, -{36,-33,19}, -{36,-33,20}, -{36,-33,21}, -{36,-33,22}, -{36,-33,23}, -{36,-33,24}, -{36,-33,25}, -{36,-33,26}, -{36,-33,27}, -{36,-33,28}, -{36,-33,29}, -{36,-33,30}, -{36,-33,31}, -{36,-33,32}, -{36,-33,33}, -{36,-33,34}, -{36,-33,35}, -{36,-33,36}, -{36,-33,37}, -{36,-33,38}, -{36,-33,39}, -{36,-33,40}, -{36,-33,41}, -{36,-33,42}, -{36,-32,9}, -{36,-32,10}, -{36,-32,11}, -{36,-32,12}, -{36,-32,13}, -{36,-32,14}, -{36,-32,15}, -{36,-32,16}, -{36,-32,17}, -{36,-32,18}, -{36,-32,19}, -{36,-32,20}, -{36,-32,21}, -{36,-32,22}, -{36,-32,23}, -{36,-32,24}, -{36,-32,25}, -{36,-32,26}, -{36,-32,27}, -{36,-32,28}, -{36,-32,29}, -{36,-32,30}, -{36,-32,31}, -{36,-32,32}, -{36,-32,33}, -{36,-32,34}, -{36,-32,35}, -{36,-32,36}, -{36,-32,37}, -{36,-32,38}, -{36,-32,39}, -{36,-32,40}, -{36,-32,41}, -{36,-32,42}, -{36,-31,7}, -{36,-31,8}, -{36,-31,9}, -{36,-31,10}, -{36,-31,11}, -{36,-31,12}, -{36,-31,13}, -{36,-31,14}, -{36,-31,15}, -{36,-31,16}, -{36,-31,17}, -{36,-31,18}, -{36,-31,19}, -{36,-31,20}, -{36,-31,21}, -{36,-31,22}, -{36,-31,23}, -{36,-31,24}, -{36,-31,25}, -{36,-31,26}, -{36,-31,27}, -{36,-31,28}, -{36,-31,29}, -{36,-31,30}, -{36,-31,31}, -{36,-31,32}, -{36,-31,33}, -{36,-31,34}, -{36,-31,35}, -{36,-31,36}, -{36,-31,37}, -{36,-31,38}, -{36,-31,39}, -{36,-31,40}, -{36,-31,41}, -{36,-31,42}, -{36,-30,5}, -{36,-30,6}, -{36,-30,7}, -{36,-30,8}, -{36,-30,9}, -{36,-30,10}, -{36,-30,11}, -{36,-30,12}, -{36,-30,13}, -{36,-30,14}, -{36,-30,15}, -{36,-30,16}, -{36,-30,17}, -{36,-30,18}, -{36,-30,19}, -{36,-30,20}, -{36,-30,21}, -{36,-30,22}, -{36,-30,23}, -{36,-30,24}, -{36,-30,25}, -{36,-30,26}, -{36,-30,27}, -{36,-30,28}, -{36,-30,29}, -{36,-30,30}, -{36,-30,31}, -{36,-30,32}, -{36,-30,33}, -{36,-30,34}, -{36,-30,35}, -{36,-30,36}, -{36,-30,37}, -{36,-30,38}, -{36,-30,39}, -{36,-30,40}, -{36,-30,41}, -{36,-30,42}, -{36,-29,3}, -{36,-29,4}, -{36,-29,5}, -{36,-29,6}, -{36,-29,7}, -{36,-29,8}, -{36,-29,9}, -{36,-29,10}, -{36,-29,11}, -{36,-29,12}, -{36,-29,13}, -{36,-29,14}, -{36,-29,15}, -{36,-29,16}, -{36,-29,17}, -{36,-29,18}, -{36,-29,19}, -{36,-29,20}, -{36,-29,21}, -{36,-29,22}, -{36,-29,23}, -{36,-29,24}, -{36,-29,25}, -{36,-29,26}, -{36,-29,27}, -{36,-29,28}, -{36,-29,29}, -{36,-29,30}, -{36,-29,31}, -{36,-29,32}, -{36,-29,33}, -{36,-29,34}, -{36,-29,35}, -{36,-29,36}, -{36,-29,37}, -{36,-29,38}, -{36,-29,39}, -{36,-29,40}, -{36,-29,41}, -{36,-29,42}, -{36,-28,1}, -{36,-28,2}, -{36,-28,3}, -{36,-28,4}, -{36,-28,5}, -{36,-28,6}, -{36,-28,7}, -{36,-28,8}, -{36,-28,9}, -{36,-28,10}, -{36,-28,11}, -{36,-28,12}, -{36,-28,13}, -{36,-28,14}, -{36,-28,15}, -{36,-28,16}, -{36,-28,17}, -{36,-28,18}, -{36,-28,19}, -{36,-28,20}, -{36,-28,21}, -{36,-28,22}, -{36,-28,23}, -{36,-28,24}, -{36,-28,25}, -{36,-28,26}, -{36,-28,27}, -{36,-28,28}, -{36,-28,29}, -{36,-28,30}, -{36,-28,31}, -{36,-28,32}, -{36,-28,33}, -{36,-28,34}, -{36,-28,35}, -{36,-28,36}, -{36,-28,37}, -{36,-28,38}, -{36,-28,39}, -{36,-28,40}, -{36,-28,41}, -{36,-28,42}, -{36,-27,-1}, -{36,-27,0}, -{36,-27,1}, -{36,-27,2}, -{36,-27,3}, -{36,-27,4}, -{36,-27,5}, -{36,-27,6}, -{36,-27,7}, -{36,-27,8}, -{36,-27,9}, -{36,-27,10}, -{36,-27,11}, -{36,-27,12}, -{36,-27,13}, -{36,-27,14}, -{36,-27,15}, -{36,-27,16}, -{36,-27,17}, -{36,-27,18}, -{36,-27,19}, -{36,-27,20}, -{36,-27,21}, -{36,-27,22}, -{36,-27,23}, -{36,-27,24}, -{36,-27,25}, -{36,-27,26}, -{36,-27,27}, -{36,-27,28}, -{36,-27,29}, -{36,-27,30}, -{36,-27,31}, -{36,-27,32}, -{36,-27,33}, -{36,-27,34}, -{36,-27,35}, -{36,-27,36}, -{36,-27,37}, -{36,-27,38}, -{36,-27,39}, -{36,-27,40}, -{36,-27,41}, -{36,-27,42}, -{36,-26,-2}, -{36,-26,-1}, -{36,-26,0}, -{36,-26,1}, -{36,-26,2}, -{36,-26,3}, -{36,-26,4}, -{36,-26,5}, -{36,-26,6}, -{36,-26,7}, -{36,-26,8}, -{36,-26,9}, -{36,-26,10}, -{36,-26,11}, -{36,-26,12}, -{36,-26,13}, -{36,-26,14}, -{36,-26,15}, -{36,-26,16}, -{36,-26,17}, -{36,-26,18}, -{36,-26,19}, -{36,-26,20}, -{36,-26,21}, -{36,-26,22}, -{36,-26,23}, -{36,-26,24}, -{36,-26,25}, -{36,-26,26}, -{36,-26,27}, -{36,-26,28}, -{36,-26,29}, -{36,-26,30}, -{36,-26,31}, -{36,-26,32}, -{36,-26,33}, -{36,-26,34}, -{36,-26,35}, -{36,-26,36}, -{36,-26,37}, -{36,-26,38}, -{36,-26,39}, -{36,-26,40}, -{36,-26,41}, -{36,-26,42}, -{36,-25,-4}, -{36,-25,-3}, -{36,-25,-2}, -{36,-25,-1}, -{36,-25,0}, -{36,-25,1}, -{36,-25,2}, -{36,-25,3}, -{36,-25,4}, -{36,-25,5}, -{36,-25,6}, -{36,-25,7}, -{36,-25,8}, -{36,-25,9}, -{36,-25,10}, -{36,-25,11}, -{36,-25,12}, -{36,-25,13}, -{36,-25,14}, -{36,-25,15}, -{36,-25,16}, -{36,-25,17}, -{36,-25,18}, -{36,-25,19}, -{36,-25,20}, -{36,-25,21}, -{36,-25,22}, -{36,-25,23}, -{36,-25,24}, -{36,-25,25}, -{36,-25,26}, -{36,-25,27}, -{36,-25,28}, -{36,-25,29}, -{36,-25,30}, -{36,-25,31}, -{36,-25,32}, -{36,-25,33}, -{36,-25,34}, -{36,-25,35}, -{36,-25,36}, -{36,-25,37}, -{36,-25,38}, -{36,-25,39}, -{36,-25,40}, -{36,-25,41}, -{36,-25,42}, -{36,-24,-6}, -{36,-24,-5}, -{36,-24,-4}, -{36,-24,-3}, -{36,-24,-2}, -{36,-24,-1}, -{36,-24,0}, -{36,-24,1}, -{36,-24,2}, -{36,-24,3}, -{36,-24,4}, -{36,-24,5}, -{36,-24,6}, -{36,-24,7}, -{36,-24,8}, -{36,-24,9}, -{36,-24,10}, -{36,-24,11}, -{36,-24,12}, -{36,-24,13}, -{36,-24,14}, -{36,-24,15}, -{36,-24,16}, -{36,-24,17}, -{36,-24,18}, -{36,-24,19}, -{36,-24,20}, -{36,-24,21}, -{36,-24,22}, -{36,-24,23}, -{36,-24,24}, -{36,-24,25}, -{36,-24,26}, -{36,-24,27}, -{36,-24,28}, -{36,-24,29}, -{36,-24,30}, -{36,-24,31}, -{36,-24,32}, -{36,-24,33}, -{36,-24,34}, -{36,-24,35}, -{36,-24,36}, -{36,-24,37}, -{36,-24,38}, -{36,-24,39}, -{36,-24,40}, -{36,-24,41}, -{36,-24,42}, -{36,-23,-7}, -{36,-23,-6}, -{36,-23,-5}, -{36,-23,-4}, -{36,-23,-3}, -{36,-23,-2}, -{36,-23,-1}, -{36,-23,0}, -{36,-23,1}, -{36,-23,2}, -{36,-23,3}, -{36,-23,4}, -{36,-23,5}, -{36,-23,6}, -{36,-23,7}, -{36,-23,8}, -{36,-23,9}, -{36,-23,10}, -{36,-23,11}, -{36,-23,12}, -{36,-23,13}, -{36,-23,14}, -{36,-23,15}, -{36,-23,16}, -{36,-23,17}, -{36,-23,18}, -{36,-23,19}, -{36,-23,20}, -{36,-23,21}, -{36,-23,22}, -{36,-23,23}, -{36,-23,24}, -{36,-23,25}, -{36,-23,26}, -{36,-23,27}, -{36,-23,28}, -{36,-23,29}, -{36,-23,30}, -{36,-23,31}, -{36,-23,32}, -{36,-23,33}, -{36,-23,34}, -{36,-23,35}, -{36,-23,36}, -{36,-23,37}, -{36,-23,38}, -{36,-23,39}, -{36,-23,40}, -{36,-23,41}, -{36,-23,42}, -{36,-22,-9}, -{36,-22,-8}, -{36,-22,-7}, -{36,-22,-6}, -{36,-22,-5}, -{36,-22,-4}, -{36,-22,-3}, -{36,-22,-2}, -{36,-22,-1}, -{36,-22,0}, -{36,-22,1}, -{36,-22,2}, -{36,-22,3}, -{36,-22,4}, -{36,-22,5}, -{36,-22,6}, -{36,-22,7}, -{36,-22,8}, -{36,-22,9}, -{36,-22,10}, -{36,-22,11}, -{36,-22,12}, -{36,-22,13}, -{36,-22,14}, -{36,-22,15}, -{36,-22,16}, -{36,-22,17}, -{36,-22,18}, -{36,-22,19}, -{36,-22,20}, -{36,-22,21}, -{36,-22,22}, -{36,-22,23}, -{36,-22,24}, -{36,-22,25}, -{36,-22,26}, -{36,-22,27}, -{36,-22,28}, -{36,-22,29}, -{36,-22,30}, -{36,-22,31}, -{36,-22,32}, -{36,-22,33}, -{36,-22,34}, -{36,-22,35}, -{36,-22,36}, -{36,-22,37}, -{36,-22,38}, -{36,-22,39}, -{36,-22,40}, -{36,-22,41}, -{36,-22,42}, -{36,-21,-10}, -{36,-21,-9}, -{36,-21,-8}, -{36,-21,-7}, -{36,-21,-6}, -{36,-21,-5}, -{36,-21,-4}, -{36,-21,-3}, -{36,-21,-2}, -{36,-21,-1}, -{36,-21,0}, -{36,-21,1}, -{36,-21,2}, -{36,-21,3}, -{36,-21,4}, -{36,-21,5}, -{36,-21,6}, -{36,-21,7}, -{36,-21,8}, -{36,-21,9}, -{36,-21,10}, -{36,-21,11}, -{36,-21,12}, -{36,-21,13}, -{36,-21,14}, -{36,-21,15}, -{36,-21,16}, -{36,-21,17}, -{36,-21,18}, -{36,-21,19}, -{36,-21,20}, -{36,-21,21}, -{36,-21,22}, -{36,-21,23}, -{36,-21,24}, -{36,-21,25}, -{36,-21,26}, -{36,-21,27}, -{36,-21,28}, -{36,-21,29}, -{36,-21,30}, -{36,-21,31}, -{36,-21,32}, -{36,-21,33}, -{36,-21,34}, -{36,-21,35}, -{36,-21,36}, -{36,-21,37}, -{36,-21,38}, -{36,-21,39}, -{36,-21,40}, -{36,-21,41}, -{36,-21,42}, -{36,-20,-12}, -{36,-20,-11}, -{36,-20,-10}, -{36,-20,-9}, -{36,-20,-8}, -{36,-20,-7}, -{36,-20,-6}, -{36,-20,-5}, -{36,-20,-4}, -{36,-20,-3}, -{36,-20,-2}, -{36,-20,-1}, -{36,-20,0}, -{36,-20,1}, -{36,-20,2}, -{36,-20,3}, -{36,-20,4}, -{36,-20,5}, -{36,-20,6}, -{36,-20,7}, -{36,-20,8}, -{36,-20,9}, -{36,-20,10}, -{36,-20,11}, -{36,-20,12}, -{36,-20,13}, -{36,-20,14}, -{36,-20,15}, -{36,-20,16}, -{36,-20,17}, -{36,-20,18}, -{36,-20,19}, -{36,-20,20}, -{36,-20,21}, -{36,-20,22}, -{36,-20,23}, -{36,-20,24}, -{36,-20,25}, -{36,-20,26}, -{36,-20,27}, -{36,-20,28}, -{36,-20,29}, -{36,-20,30}, -{36,-20,31}, -{36,-20,32}, -{36,-20,33}, -{36,-20,34}, -{36,-20,35}, -{36,-20,36}, -{36,-20,37}, -{36,-20,38}, -{36,-20,39}, -{36,-20,40}, -{36,-20,41}, -{36,-20,42}, -{36,-20,43}, -{36,-19,-13}, -{36,-19,-12}, -{36,-19,-11}, -{36,-19,-10}, -{36,-19,-9}, -{36,-19,-8}, -{36,-19,-7}, -{36,-19,-6}, -{36,-19,-5}, -{36,-19,-4}, -{36,-19,-3}, -{36,-19,-2}, -{36,-19,-1}, -{36,-19,0}, -{36,-19,1}, -{36,-19,2}, -{36,-19,3}, -{36,-19,4}, -{36,-19,5}, -{36,-19,6}, -{36,-19,7}, -{36,-19,8}, -{36,-19,9}, -{36,-19,10}, -{36,-19,11}, -{36,-19,12}, -{36,-19,13}, -{36,-19,14}, -{36,-19,15}, -{36,-19,16}, -{36,-19,17}, -{36,-19,18}, -{36,-19,19}, -{36,-19,20}, -{36,-19,21}, -{36,-19,22}, -{36,-19,23}, -{36,-19,24}, -{36,-19,25}, -{36,-19,26}, -{36,-19,27}, -{36,-19,28}, -{36,-19,29}, -{36,-19,30}, -{36,-19,31}, -{36,-19,32}, -{36,-19,33}, -{36,-19,34}, -{36,-19,35}, -{36,-19,36}, -{36,-19,37}, -{36,-19,38}, -{36,-19,39}, -{36,-19,40}, -{36,-19,41}, -{36,-19,42}, -{36,-19,43}, -{36,-18,-15}, -{36,-18,-14}, -{36,-18,-13}, -{36,-18,-12}, -{36,-18,-11}, -{36,-18,-10}, -{36,-18,-9}, -{36,-18,-8}, -{36,-18,-7}, -{36,-18,-6}, -{36,-18,-5}, -{36,-18,-4}, -{36,-18,-3}, -{36,-18,-2}, -{36,-18,-1}, -{36,-18,0}, -{36,-18,1}, -{36,-18,2}, -{36,-18,3}, -{36,-18,4}, -{36,-18,5}, -{36,-18,6}, -{36,-18,7}, -{36,-18,8}, -{36,-18,9}, -{36,-18,10}, -{36,-18,11}, -{36,-18,12}, -{36,-18,13}, -{36,-18,14}, -{36,-18,15}, -{36,-18,16}, -{36,-18,17}, -{36,-18,18}, -{36,-18,19}, -{36,-18,20}, -{36,-18,21}, -{36,-18,22}, -{36,-18,23}, -{36,-18,24}, -{36,-18,25}, -{36,-18,26}, -{36,-18,27}, -{36,-18,28}, -{36,-18,29}, -{36,-18,30}, -{36,-18,31}, -{36,-18,32}, -{36,-18,33}, -{36,-18,34}, -{36,-18,35}, -{36,-18,36}, -{36,-18,37}, -{36,-18,38}, -{36,-18,39}, -{36,-18,40}, -{36,-18,41}, -{36,-18,42}, -{36,-18,43}, -{36,-17,-16}, -{36,-17,-15}, -{36,-17,-14}, -{36,-17,-13}, -{36,-17,-12}, -{36,-17,-11}, -{36,-17,-10}, -{36,-17,-9}, -{36,-17,-8}, -{36,-17,-7}, -{36,-17,-6}, -{36,-17,-5}, -{36,-17,-4}, -{36,-17,-3}, -{36,-17,-2}, -{36,-17,-1}, -{36,-17,0}, -{36,-17,1}, -{36,-17,2}, -{36,-17,3}, -{36,-17,4}, -{36,-17,5}, -{36,-17,6}, -{36,-17,7}, -{36,-17,8}, -{36,-17,9}, -{36,-17,10}, -{36,-17,11}, -{36,-17,12}, -{36,-17,13}, -{36,-17,14}, -{36,-17,15}, -{36,-17,16}, -{36,-17,17}, -{36,-17,18}, -{36,-17,19}, -{36,-17,20}, -{36,-17,21}, -{36,-17,22}, -{36,-17,23}, -{36,-17,24}, -{36,-17,25}, -{36,-17,26}, -{36,-17,27}, -{36,-17,28}, -{36,-17,29}, -{36,-17,30}, -{36,-17,31}, -{36,-17,32}, -{36,-17,33}, -{36,-17,34}, -{36,-17,35}, -{36,-17,36}, -{36,-17,37}, -{36,-17,38}, -{36,-17,39}, -{36,-17,40}, -{36,-17,41}, -{36,-17,42}, -{36,-17,43}, -{36,-16,-17}, -{36,-16,-16}, -{36,-16,-15}, -{36,-16,-14}, -{36,-16,-13}, -{36,-16,-12}, -{36,-16,-11}, -{36,-16,-10}, -{36,-16,-9}, -{36,-16,-8}, -{36,-16,-7}, -{36,-16,-6}, -{36,-16,-5}, -{36,-16,-4}, -{36,-16,-3}, -{36,-16,-2}, -{36,-16,-1}, -{36,-16,0}, -{36,-16,1}, -{36,-16,2}, -{36,-16,3}, -{36,-16,4}, -{36,-16,5}, -{36,-16,6}, -{36,-16,7}, -{36,-16,8}, -{36,-16,9}, -{36,-16,10}, -{36,-16,11}, -{36,-16,12}, -{36,-16,13}, -{36,-16,14}, -{36,-16,15}, -{36,-16,16}, -{36,-16,17}, -{36,-16,18}, -{36,-16,19}, -{36,-16,20}, -{36,-16,21}, -{36,-16,22}, -{36,-16,23}, -{36,-16,24}, -{36,-16,25}, -{36,-16,26}, -{36,-16,27}, -{36,-16,28}, -{36,-16,29}, -{36,-16,30}, -{36,-16,31}, -{36,-16,32}, -{36,-16,33}, -{36,-16,34}, -{36,-16,35}, -{36,-16,36}, -{36,-16,37}, -{36,-16,38}, -{36,-16,39}, -{36,-16,40}, -{36,-16,41}, -{36,-16,42}, -{36,-16,43}, -{36,-15,-19}, -{36,-15,-18}, -{36,-15,-17}, -{36,-15,-16}, -{36,-15,-15}, -{36,-15,-14}, -{36,-15,-13}, -{36,-15,-12}, -{36,-15,-11}, -{36,-15,-10}, -{36,-15,-9}, -{36,-15,-8}, -{36,-15,-7}, -{36,-15,-6}, -{36,-15,-5}, -{36,-15,-4}, -{36,-15,-3}, -{36,-15,-2}, -{36,-15,-1}, -{36,-15,0}, -{36,-15,1}, -{36,-15,2}, -{36,-15,3}, -{36,-15,4}, -{36,-15,5}, -{36,-15,6}, -{36,-15,7}, -{36,-15,8}, -{36,-15,9}, -{36,-15,10}, -{36,-15,11}, -{36,-15,12}, -{36,-15,13}, -{36,-15,14}, -{36,-15,15}, -{36,-15,16}, -{36,-15,17}, -{36,-15,18}, -{36,-15,19}, -{36,-15,20}, -{36,-15,21}, -{36,-15,22}, -{36,-15,23}, -{36,-15,24}, -{36,-15,25}, -{36,-15,26}, -{36,-15,27}, -{36,-15,28}, -{36,-15,29}, -{36,-15,30}, -{36,-15,31}, -{36,-15,32}, -{36,-15,33}, -{36,-15,34}, -{36,-15,35}, -{36,-15,36}, -{36,-15,37}, -{36,-15,38}, -{36,-15,39}, -{36,-15,40}, -{36,-15,41}, -{36,-15,42}, -{36,-15,43}, -{36,-14,-20}, -{36,-14,-19}, -{36,-14,-18}, -{36,-14,-17}, -{36,-14,-16}, -{36,-14,-15}, -{36,-14,-14}, -{36,-14,-13}, -{36,-14,-12}, -{36,-14,-11}, -{36,-14,-10}, -{36,-14,-9}, -{36,-14,-8}, -{36,-14,-7}, -{36,-14,-6}, -{36,-14,-5}, -{36,-14,-4}, -{36,-14,-3}, -{36,-14,-2}, -{36,-14,-1}, -{36,-14,0}, -{36,-14,1}, -{36,-14,2}, -{36,-14,3}, -{36,-14,4}, -{36,-14,5}, -{36,-14,6}, -{36,-14,7}, -{36,-14,8}, -{36,-14,9}, -{36,-14,10}, -{36,-14,11}, -{36,-14,12}, -{36,-14,13}, -{36,-14,14}, -{36,-14,15}, -{36,-14,16}, -{36,-14,17}, -{36,-14,18}, -{36,-14,19}, -{36,-14,20}, -{36,-14,21}, -{36,-14,22}, -{36,-14,23}, -{36,-14,24}, -{36,-14,25}, -{36,-14,26}, -{36,-14,27}, -{36,-14,28}, -{36,-14,29}, -{36,-14,30}, -{36,-14,31}, -{36,-14,32}, -{36,-14,33}, -{36,-14,34}, -{36,-14,35}, -{36,-14,36}, -{36,-14,37}, -{36,-14,38}, -{36,-14,39}, -{36,-14,40}, -{36,-14,41}, -{36,-14,42}, -{36,-14,43}, -{36,-13,-21}, -{36,-13,-20}, -{36,-13,-19}, -{36,-13,-18}, -{36,-13,-17}, -{36,-13,-16}, -{36,-13,-15}, -{36,-13,-14}, -{36,-13,-13}, -{36,-13,-12}, -{36,-13,-11}, -{36,-13,-10}, -{36,-13,-9}, -{36,-13,-8}, -{36,-13,-7}, -{36,-13,-6}, -{36,-13,-5}, -{36,-13,-4}, -{36,-13,-3}, -{36,-13,-2}, -{36,-13,-1}, -{36,-13,0}, -{36,-13,1}, -{36,-13,2}, -{36,-13,3}, -{36,-13,4}, -{36,-13,5}, -{36,-13,6}, -{36,-13,7}, -{36,-13,8}, -{36,-13,9}, -{36,-13,10}, -{36,-13,11}, -{36,-13,12}, -{36,-13,13}, -{36,-13,14}, -{36,-13,15}, -{36,-13,16}, -{36,-13,17}, -{36,-13,18}, -{36,-13,19}, -{36,-13,20}, -{36,-13,21}, -{36,-13,22}, -{36,-13,23}, -{36,-13,24}, -{36,-13,25}, -{36,-13,26}, -{36,-13,27}, -{36,-13,28}, -{36,-13,29}, -{36,-13,30}, -{36,-13,31}, -{36,-13,32}, -{36,-13,33}, -{36,-13,34}, -{36,-13,35}, -{36,-13,36}, -{36,-13,37}, -{36,-13,38}, -{36,-13,39}, -{36,-13,40}, -{36,-13,41}, -{36,-13,42}, -{36,-13,43}, -{36,-12,-23}, -{36,-12,-22}, -{36,-12,-21}, -{36,-12,-20}, -{36,-12,-19}, -{36,-12,-18}, -{36,-12,-17}, -{36,-12,-16}, -{36,-12,-15}, -{36,-12,-14}, -{36,-12,-13}, -{36,-12,-12}, -{36,-12,-11}, -{36,-12,-10}, -{36,-12,-9}, -{36,-12,-8}, -{36,-12,-7}, -{36,-12,-6}, -{36,-12,-5}, -{36,-12,-4}, -{36,-12,-3}, -{36,-12,-2}, -{36,-12,-1}, -{36,-12,0}, -{36,-12,1}, -{36,-12,2}, -{36,-12,3}, -{36,-12,4}, -{36,-12,5}, -{36,-12,6}, -{36,-12,7}, -{36,-12,8}, -{36,-12,9}, -{36,-12,10}, -{36,-12,11}, -{36,-12,12}, -{36,-12,13}, -{36,-12,14}, -{36,-12,15}, -{36,-12,16}, -{36,-12,17}, -{36,-12,18}, -{36,-12,19}, -{36,-12,20}, -{36,-12,21}, -{36,-12,22}, -{36,-12,23}, -{36,-12,24}, -{36,-12,25}, -{36,-12,26}, -{36,-12,27}, -{36,-12,28}, -{36,-12,29}, -{36,-12,30}, -{36,-12,31}, -{36,-12,32}, -{36,-12,33}, -{36,-12,34}, -{36,-12,35}, -{36,-12,36}, -{36,-12,37}, -{36,-12,38}, -{36,-12,39}, -{36,-12,40}, -{36,-12,41}, -{36,-12,42}, -{36,-12,43}, -{36,-11,-24}, -{36,-11,-23}, -{36,-11,-22}, -{36,-11,-21}, -{36,-11,-20}, -{36,-11,-19}, -{36,-11,-18}, -{36,-11,-17}, -{36,-11,-16}, -{36,-11,-15}, -{36,-11,-14}, -{36,-11,-13}, -{36,-11,-12}, -{36,-11,-11}, -{36,-11,-10}, -{36,-11,-9}, -{36,-11,-8}, -{36,-11,-7}, -{36,-11,-6}, -{36,-11,-5}, -{36,-11,-4}, -{36,-11,-3}, -{36,-11,-2}, -{36,-11,-1}, -{36,-11,0}, -{36,-11,1}, -{36,-11,2}, -{36,-11,3}, -{36,-11,4}, -{36,-11,5}, -{36,-11,6}, -{36,-11,7}, -{36,-11,8}, -{36,-11,9}, -{36,-11,10}, -{36,-11,11}, -{36,-11,12}, -{36,-11,13}, -{36,-11,14}, -{36,-11,15}, -{36,-11,16}, -{36,-11,17}, -{36,-11,18}, -{36,-11,19}, -{36,-11,20}, -{36,-11,21}, -{36,-11,22}, -{36,-11,23}, -{36,-11,24}, -{36,-11,25}, -{36,-11,26}, -{36,-11,27}, -{36,-11,28}, -{36,-11,29}, -{36,-11,30}, -{36,-11,31}, -{36,-11,32}, -{36,-11,33}, -{36,-11,34}, -{36,-11,35}, -{36,-11,36}, -{36,-11,37}, -{36,-11,38}, -{36,-11,39}, -{36,-11,40}, -{36,-11,41}, -{36,-11,42}, -{36,-11,43}, -{36,-10,-25}, -{36,-10,-24}, -{36,-10,-23}, -{36,-10,-22}, -{36,-10,-21}, -{36,-10,-20}, -{36,-10,-19}, -{36,-10,-18}, -{36,-10,-17}, -{36,-10,-16}, -{36,-10,-15}, -{36,-10,-14}, -{36,-10,-13}, -{36,-10,-12}, -{36,-10,-11}, -{36,-10,-10}, -{36,-10,-9}, -{36,-10,-8}, -{36,-10,-7}, -{36,-10,-6}, -{36,-10,-5}, -{36,-10,-4}, -{36,-10,-3}, -{36,-10,-2}, -{36,-10,-1}, -{36,-10,0}, -{36,-10,1}, -{36,-10,2}, -{36,-10,3}, -{36,-10,4}, -{36,-10,5}, -{36,-10,6}, -{36,-10,7}, -{36,-10,8}, -{36,-10,9}, -{36,-10,10}, -{36,-10,11}, -{36,-10,12}, -{36,-10,13}, -{36,-10,14}, -{36,-10,15}, -{36,-10,16}, -{36,-10,17}, -{36,-10,18}, -{36,-10,19}, -{36,-10,20}, -{36,-10,21}, -{36,-10,22}, -{36,-10,23}, -{36,-10,24}, -{36,-10,25}, -{36,-10,26}, -{36,-10,27}, -{36,-10,28}, -{36,-10,29}, -{36,-10,30}, -{36,-10,31}, -{36,-10,32}, -{36,-10,33}, -{36,-10,34}, -{36,-10,35}, -{36,-10,36}, -{36,-10,37}, -{36,-10,38}, -{36,-10,39}, -{36,-10,40}, -{36,-10,41}, -{36,-10,42}, -{36,-10,43}, -{36,-9,-26}, -{36,-9,-25}, -{36,-9,-24}, -{36,-9,-23}, -{36,-9,-22}, -{36,-9,-21}, -{36,-9,-20}, -{36,-9,-19}, -{36,-9,-18}, -{36,-9,-17}, -{36,-9,-16}, -{36,-9,-15}, -{36,-9,-14}, -{36,-9,-13}, -{36,-9,-12}, -{36,-9,-11}, -{36,-9,-10}, -{36,-9,-9}, -{36,-9,-8}, -{36,-9,-7}, -{36,-9,-6}, -{36,-9,-5}, -{36,-9,-4}, -{36,-9,-3}, -{36,-9,-2}, -{36,-9,-1}, -{36,-9,0}, -{36,-9,1}, -{36,-9,2}, -{36,-9,3}, -{36,-9,4}, -{36,-9,5}, -{36,-9,6}, -{36,-9,7}, -{36,-9,8}, -{36,-9,9}, -{36,-9,10}, -{36,-9,11}, -{36,-9,12}, -{36,-9,13}, -{36,-9,14}, -{36,-9,15}, -{36,-9,16}, -{36,-9,17}, -{36,-9,18}, -{36,-9,19}, -{36,-9,20}, -{36,-9,21}, -{36,-9,22}, -{36,-9,23}, -{36,-9,24}, -{36,-9,25}, -{36,-9,26}, -{36,-9,27}, -{36,-9,28}, -{36,-9,29}, -{36,-9,30}, -{36,-9,31}, -{36,-9,32}, -{36,-9,33}, -{36,-9,34}, -{36,-9,35}, -{36,-9,36}, -{36,-9,37}, -{36,-9,38}, -{36,-9,39}, -{36,-9,40}, -{36,-9,41}, -{36,-9,42}, -{36,-9,43}, -{36,-8,-28}, -{36,-8,-27}, -{36,-8,-26}, -{36,-8,-25}, -{36,-8,-24}, -{36,-8,-23}, -{36,-8,-22}, -{36,-8,-21}, -{36,-8,-20}, -{36,-8,-19}, -{36,-8,-18}, -{36,-8,-17}, -{36,-8,-16}, -{36,-8,-15}, -{36,-8,-14}, -{36,-8,-13}, -{36,-8,-12}, -{36,-8,-11}, -{36,-8,-10}, -{36,-8,-9}, -{36,-8,-8}, -{36,-8,-7}, -{36,-8,-6}, -{36,-8,-5}, -{36,-8,-4}, -{36,-8,-3}, -{36,-8,-2}, -{36,-8,-1}, -{36,-8,0}, -{36,-8,1}, -{36,-8,2}, -{36,-8,3}, -{36,-8,4}, -{36,-8,5}, -{36,-8,6}, -{36,-8,7}, -{36,-8,8}, -{36,-8,9}, -{36,-8,10}, -{36,-8,11}, -{36,-8,12}, -{36,-8,13}, -{36,-8,14}, -{36,-8,15}, -{36,-8,16}, -{36,-8,17}, -{36,-8,18}, -{36,-8,19}, -{36,-8,20}, -{36,-8,21}, -{36,-8,22}, -{36,-8,23}, -{36,-8,24}, -{36,-8,25}, -{36,-8,26}, -{36,-8,27}, -{36,-8,28}, -{36,-8,29}, -{36,-8,30}, -{36,-8,31}, -{36,-8,32}, -{36,-8,33}, -{36,-8,34}, -{36,-8,35}, -{36,-8,36}, -{36,-8,37}, -{36,-8,38}, -{36,-8,39}, -{36,-8,40}, -{36,-8,41}, -{36,-8,42}, -{36,-8,43}, -{36,-7,-29}, -{36,-7,-28}, -{36,-7,-27}, -{36,-7,-26}, -{36,-7,-25}, -{36,-7,-24}, -{36,-7,-23}, -{36,-7,-22}, -{36,-7,-21}, -{36,-7,-20}, -{36,-7,-19}, -{36,-7,-18}, -{36,-7,-17}, -{36,-7,-16}, -{36,-7,-15}, -{36,-7,-14}, -{36,-7,-13}, -{36,-7,-12}, -{36,-7,-11}, -{36,-7,-10}, -{36,-7,-9}, -{36,-7,-8}, -{36,-7,-7}, -{36,-7,-6}, -{36,-7,-5}, -{36,-7,-4}, -{36,-7,-3}, -{36,-7,-2}, -{36,-7,-1}, -{36,-7,0}, -{36,-7,1}, -{36,-7,2}, -{36,-7,3}, -{36,-7,4}, -{36,-7,5}, -{36,-7,6}, -{36,-7,7}, -{36,-7,8}, -{36,-7,9}, -{36,-7,10}, -{36,-7,11}, -{36,-7,12}, -{36,-7,13}, -{36,-7,14}, -{36,-7,15}, -{36,-7,16}, -{36,-7,17}, -{36,-7,18}, -{36,-7,19}, -{36,-7,20}, -{36,-7,21}, -{36,-7,22}, -{36,-7,23}, -{36,-7,24}, -{36,-7,25}, -{36,-7,26}, -{36,-7,27}, -{36,-7,28}, -{36,-7,29}, -{36,-7,30}, -{36,-7,31}, -{36,-7,32}, -{36,-7,33}, -{36,-7,34}, -{36,-7,35}, -{36,-7,36}, -{36,-7,37}, -{36,-7,38}, -{36,-7,39}, -{36,-7,40}, -{36,-7,41}, -{36,-7,42}, -{36,-7,43}, -{36,-6,-30}, -{36,-6,-29}, -{36,-6,-28}, -{36,-6,-27}, -{36,-6,-26}, -{36,-6,-25}, -{36,-6,-24}, -{36,-6,-23}, -{36,-6,-22}, -{36,-6,-21}, -{36,-6,-20}, -{36,-6,-19}, -{36,-6,-18}, -{36,-6,-17}, -{36,-6,-16}, -{36,-6,-15}, -{36,-6,-14}, -{36,-6,-13}, -{36,-6,-12}, -{36,-6,-11}, -{36,-6,-10}, -{36,-6,-9}, -{36,-6,-8}, -{36,-6,-7}, -{36,-6,-6}, -{36,-6,-5}, -{36,-6,-4}, -{36,-6,-3}, -{36,-6,-2}, -{36,-6,-1}, -{36,-6,0}, -{36,-6,1}, -{36,-6,2}, -{36,-6,3}, -{36,-6,4}, -{36,-6,5}, -{36,-6,6}, -{36,-6,7}, -{36,-6,8}, -{36,-6,9}, -{36,-6,10}, -{36,-6,11}, -{36,-6,12}, -{36,-6,13}, -{36,-6,14}, -{36,-6,15}, -{36,-6,16}, -{36,-6,17}, -{36,-6,18}, -{36,-6,19}, -{36,-6,20}, -{36,-6,21}, -{36,-6,22}, -{36,-6,23}, -{36,-6,24}, -{36,-6,25}, -{36,-6,26}, -{36,-6,27}, -{36,-6,28}, -{36,-6,29}, -{36,-6,30}, -{36,-6,31}, -{36,-6,32}, -{36,-6,33}, -{36,-6,34}, -{36,-6,35}, -{36,-6,36}, -{36,-6,37}, -{36,-6,38}, -{36,-6,39}, -{36,-6,40}, -{36,-6,41}, -{36,-6,42}, -{36,-6,43}, -{36,-5,-31}, -{36,-5,-30}, -{36,-5,-29}, -{36,-5,-28}, -{36,-5,-27}, -{36,-5,-26}, -{36,-5,-25}, -{36,-5,-24}, -{36,-5,-23}, -{36,-5,-22}, -{36,-5,-21}, -{36,-5,-20}, -{36,-5,-19}, -{36,-5,-18}, -{36,-5,-17}, -{36,-5,-16}, -{36,-5,-15}, -{36,-5,-14}, -{36,-5,-13}, -{36,-5,-12}, -{36,-5,-11}, -{36,-5,-10}, -{36,-5,-9}, -{36,-5,-8}, -{36,-5,-7}, -{36,-5,-6}, -{36,-5,-5}, -{36,-5,-4}, -{36,-5,-3}, -{36,-5,-2}, -{36,-5,-1}, -{36,-5,0}, -{36,-5,1}, -{36,-5,2}, -{36,-5,3}, -{36,-5,4}, -{36,-5,5}, -{36,-5,6}, -{36,-5,7}, -{36,-5,8}, -{36,-5,9}, -{36,-5,10}, -{36,-5,11}, -{36,-5,12}, -{36,-5,13}, -{36,-5,14}, -{36,-5,15}, -{36,-5,16}, -{36,-5,17}, -{36,-5,18}, -{36,-5,19}, -{36,-5,20}, -{36,-5,21}, -{36,-5,22}, -{36,-5,23}, -{36,-5,24}, -{36,-5,25}, -{36,-5,26}, -{36,-5,27}, -{36,-5,28}, -{36,-5,29}, -{36,-5,30}, -{36,-5,31}, -{36,-5,32}, -{36,-5,33}, -{36,-5,34}, -{36,-5,35}, -{36,-5,36}, -{36,-5,37}, -{36,-5,38}, -{36,-5,39}, -{36,-5,40}, -{36,-5,41}, -{36,-5,42}, -{36,-5,43}, -{36,-4,-32}, -{36,-4,-31}, -{36,-4,-30}, -{36,-4,-29}, -{36,-4,-28}, -{36,-4,-27}, -{36,-4,-26}, -{36,-4,-25}, -{36,-4,-24}, -{36,-4,-23}, -{36,-4,-22}, -{36,-4,-21}, -{36,-4,-20}, -{36,-4,-19}, -{36,-4,-18}, -{36,-4,-17}, -{36,-4,-16}, -{36,-4,-15}, -{36,-4,-14}, -{36,-4,-13}, -{36,-4,-12}, -{36,-4,-11}, -{36,-4,-10}, -{36,-4,-9}, -{36,-4,-8}, -{36,-4,-7}, -{36,-4,-6}, -{36,-4,-5}, -{36,-4,-4}, -{36,-4,-3}, -{36,-4,-2}, -{36,-4,-1}, -{36,-4,0}, -{36,-4,1}, -{36,-4,2}, -{36,-4,3}, -{36,-4,4}, -{36,-4,5}, -{36,-4,6}, -{36,-4,7}, -{36,-4,8}, -{36,-4,9}, -{36,-4,10}, -{36,-4,11}, -{36,-4,12}, -{36,-4,13}, -{36,-4,14}, -{36,-4,15}, -{36,-4,16}, -{36,-4,17}, -{36,-4,18}, -{36,-4,19}, -{36,-4,20}, -{36,-4,21}, -{36,-4,22}, -{36,-4,23}, -{36,-4,24}, -{36,-4,25}, -{36,-4,26}, -{36,-4,27}, -{36,-4,28}, -{36,-4,29}, -{36,-4,30}, -{36,-4,31}, -{36,-4,32}, -{36,-4,33}, -{36,-4,34}, -{36,-4,35}, -{36,-4,36}, -{36,-4,37}, -{36,-4,38}, -{36,-4,39}, -{36,-4,40}, -{36,-4,41}, -{36,-4,42}, -{36,-4,43}, -{36,-3,-34}, -{36,-3,-33}, -{36,-3,-32}, -{36,-3,-31}, -{36,-3,-30}, -{36,-3,-29}, -{36,-3,-28}, -{36,-3,-27}, -{36,-3,-26}, -{36,-3,-25}, -{36,-3,-24}, -{36,-3,-23}, -{36,-3,-22}, -{36,-3,-21}, -{36,-3,-20}, -{36,-3,-19}, -{36,-3,-18}, -{36,-3,-17}, -{36,-3,-16}, -{36,-3,-15}, -{36,-3,-14}, -{36,-3,-13}, -{36,-3,-12}, -{36,-3,-11}, -{36,-3,-10}, -{36,-3,-9}, -{36,-3,-8}, -{36,-3,-7}, -{36,-3,-6}, -{36,-3,-5}, -{36,-3,-4}, -{36,-3,-3}, -{36,-3,-2}, -{36,-3,-1}, -{36,-3,0}, -{36,-3,1}, -{36,-3,2}, -{36,-3,3}, -{36,-3,4}, -{36,-3,5}, -{36,-3,6}, -{36,-3,7}, -{36,-3,8}, -{36,-3,9}, -{36,-3,10}, -{36,-3,11}, -{36,-3,12}, -{36,-3,13}, -{36,-3,14}, -{36,-3,15}, -{36,-3,16}, -{36,-3,17}, -{36,-3,18}, -{36,-3,19}, -{36,-3,20}, -{36,-3,21}, -{36,-3,22}, -{36,-3,23}, -{36,-3,24}, -{36,-3,25}, -{36,-3,26}, -{36,-3,27}, -{36,-3,28}, -{36,-3,29}, -{36,-3,30}, -{36,-3,31}, -{36,-3,32}, -{36,-3,33}, -{36,-3,34}, -{36,-3,35}, -{36,-3,36}, -{36,-3,37}, -{36,-3,38}, -{36,-3,39}, -{36,-3,40}, -{36,-3,41}, -{36,-3,42}, -{36,-3,43}, -{36,-3,44}, -{36,-2,-35}, -{36,-2,-34}, -{36,-2,-33}, -{36,-2,-32}, -{36,-2,-31}, -{36,-2,-30}, -{36,-2,-29}, -{36,-2,-28}, -{36,-2,-27}, -{36,-2,-26}, -{36,-2,-25}, -{36,-2,-24}, -{36,-2,-23}, -{36,-2,-22}, -{36,-2,-21}, -{36,-2,-20}, -{36,-2,-19}, -{36,-2,-18}, -{36,-2,-17}, -{36,-2,-16}, -{36,-2,-15}, -{36,-2,-14}, -{36,-2,-13}, -{36,-2,-12}, -{36,-2,-11}, -{36,-2,-10}, -{36,-2,-9}, -{36,-2,-8}, -{36,-2,-7}, -{36,-2,-6}, -{36,-2,-5}, -{36,-2,-4}, -{36,-2,-3}, -{36,-2,-2}, -{36,-2,-1}, -{36,-2,0}, -{36,-2,1}, -{36,-2,2}, -{36,-2,3}, -{36,-2,4}, -{36,-2,5}, -{36,-2,6}, -{36,-2,7}, -{36,-2,8}, -{36,-2,9}, -{36,-2,10}, -{36,-2,11}, -{36,-2,12}, -{36,-2,13}, -{36,-2,14}, -{36,-2,15}, -{36,-2,16}, -{36,-2,17}, -{36,-2,18}, -{36,-2,19}, -{36,-2,20}, -{36,-2,21}, -{36,-2,22}, -{36,-2,23}, -{36,-2,24}, -{36,-2,25}, -{36,-2,26}, -{36,-2,27}, -{36,-2,28}, -{36,-2,29}, -{36,-2,30}, -{36,-2,31}, -{36,-2,32}, -{36,-2,33}, -{36,-2,34}, -{36,-2,35}, -{36,-2,36}, -{36,-2,37}, -{36,-2,38}, -{36,-2,39}, -{36,-2,40}, -{36,-2,41}, -{36,-2,42}, -{36,-2,43}, -{36,-2,44}, -{36,-1,-36}, -{36,-1,-35}, -{36,-1,-34}, -{36,-1,-33}, -{36,-1,-32}, -{36,-1,-31}, -{36,-1,-30}, -{36,-1,-29}, -{36,-1,-28}, -{36,-1,-27}, -{36,-1,-26}, -{36,-1,-25}, -{36,-1,-24}, -{36,-1,-23}, -{36,-1,-22}, -{36,-1,-21}, -{36,-1,-20}, -{36,-1,-19}, -{36,-1,-18}, -{36,-1,-17}, -{36,-1,-16}, -{36,-1,-15}, -{36,-1,-14}, -{36,-1,-13}, -{36,-1,-12}, -{36,-1,-11}, -{36,-1,-10}, -{36,-1,-9}, -{36,-1,-8}, -{36,-1,-7}, -{36,-1,-6}, -{36,-1,-5}, -{36,-1,-4}, -{36,-1,-3}, -{36,-1,-2}, -{36,-1,-1}, -{36,-1,0}, -{36,-1,1}, -{36,-1,2}, -{36,-1,3}, -{36,-1,4}, -{36,-1,5}, -{36,-1,6}, -{36,-1,7}, -{36,-1,8}, -{36,-1,9}, -{36,-1,10}, -{36,-1,11}, -{36,-1,12}, -{36,-1,13}, -{36,-1,14}, -{36,-1,15}, -{36,-1,16}, -{36,-1,17}, -{36,-1,18}, -{36,-1,19}, -{36,-1,20}, -{36,-1,21}, -{36,-1,22}, -{36,-1,23}, -{36,-1,24}, -{36,-1,25}, -{36,-1,26}, -{36,-1,27}, -{36,-1,28}, -{36,-1,29}, -{36,-1,30}, -{36,-1,31}, -{36,-1,32}, -{36,-1,33}, -{36,-1,34}, -{36,-1,35}, -{36,-1,36}, -{36,-1,37}, -{36,-1,38}, -{36,-1,39}, -{36,-1,40}, -{36,-1,41}, -{36,-1,42}, -{36,-1,43}, -{36,-1,44}, -{36,0,-37}, -{36,0,-36}, -{36,0,-35}, -{36,0,-34}, -{36,0,-33}, -{36,0,-32}, -{36,0,-31}, -{36,0,-30}, -{36,0,-29}, -{36,0,-28}, -{36,0,-27}, -{36,0,-26}, -{36,0,-25}, -{36,0,-24}, -{36,0,-23}, -{36,0,-22}, -{36,0,-21}, -{36,0,-20}, -{36,0,-19}, -{36,0,-18}, -{36,0,-17}, -{36,0,-16}, -{36,0,-15}, -{36,0,-14}, -{36,0,-13}, -{36,0,-12}, -{36,0,-11}, -{36,0,-10}, -{36,0,-9}, -{36,0,-8}, -{36,0,-7}, -{36,0,-6}, -{36,0,-5}, -{36,0,-4}, -{36,0,-3}, -{36,0,-2}, -{36,0,-1}, -{36,0,0}, -{36,0,1}, -{36,0,2}, -{36,0,3}, -{36,0,4}, -{36,0,5}, -{36,0,6}, -{36,0,7}, -{36,0,8}, -{36,0,9}, -{36,0,10}, -{36,0,11}, -{36,0,12}, -{36,0,13}, -{36,0,14}, -{36,0,15}, -{36,0,16}, -{36,0,17}, -{36,0,18}, -{36,0,19}, -{36,0,20}, -{36,0,21}, -{36,0,22}, -{36,0,23}, -{36,0,24}, -{36,0,25}, -{36,0,26}, -{36,0,27}, -{36,0,28}, -{36,0,29}, -{36,0,30}, -{36,0,31}, -{36,0,32}, -{36,0,33}, -{36,0,34}, -{36,0,35}, -{36,0,36}, -{36,0,37}, -{36,0,38}, -{36,0,39}, -{36,0,40}, -{36,0,41}, -{36,0,42}, -{36,0,43}, -{36,0,44}, -{36,1,-38}, -{36,1,-37}, -{36,1,-36}, -{36,1,-35}, -{36,1,-34}, -{36,1,-33}, -{36,1,-32}, -{36,1,-31}, -{36,1,-30}, -{36,1,-29}, -{36,1,-28}, -{36,1,-27}, -{36,1,-26}, -{36,1,-25}, -{36,1,-24}, -{36,1,-23}, -{36,1,-22}, -{36,1,-21}, -{36,1,-20}, -{36,1,-19}, -{36,1,-18}, -{36,1,-17}, -{36,1,-16}, -{36,1,-15}, -{36,1,-14}, -{36,1,-13}, -{36,1,-12}, -{36,1,-11}, -{36,1,-10}, -{36,1,-9}, -{36,1,-8}, -{36,1,-7}, -{36,1,-6}, -{36,1,-5}, -{36,1,-4}, -{36,1,-3}, -{36,1,-2}, -{36,1,-1}, -{36,1,0}, -{36,1,1}, -{36,1,2}, -{36,1,3}, -{36,1,4}, -{36,1,5}, -{36,1,6}, -{36,1,7}, -{36,1,8}, -{36,1,9}, -{36,1,10}, -{36,1,11}, -{36,1,12}, -{36,1,13}, -{36,1,14}, -{36,1,15}, -{36,1,16}, -{36,1,17}, -{36,1,18}, -{36,1,19}, -{36,1,20}, -{36,1,21}, -{36,1,22}, -{36,1,23}, -{36,1,24}, -{36,1,25}, -{36,1,26}, -{36,1,27}, -{36,1,28}, -{36,1,29}, -{36,1,30}, -{36,1,31}, -{36,1,32}, -{36,1,33}, -{36,1,34}, -{36,1,35}, -{36,1,36}, -{36,1,37}, -{36,1,38}, -{36,1,39}, -{36,1,40}, -{36,1,41}, -{36,1,42}, -{36,1,43}, -{36,1,44}, -{36,2,-39}, -{36,2,-38}, -{36,2,-37}, -{36,2,-36}, -{36,2,-35}, -{36,2,-34}, -{36,2,-33}, -{36,2,-32}, -{36,2,-31}, -{36,2,-30}, -{36,2,-29}, -{36,2,-28}, -{36,2,-27}, -{36,2,-26}, -{36,2,-25}, -{36,2,-24}, -{36,2,-23}, -{36,2,-22}, -{36,2,-21}, -{36,2,-20}, -{36,2,-19}, -{36,2,-18}, -{36,2,-17}, -{36,2,-16}, -{36,2,-15}, -{36,2,-14}, -{36,2,-13}, -{36,2,-12}, -{36,2,-11}, -{36,2,-10}, -{36,2,-9}, -{36,2,-8}, -{36,2,-7}, -{36,2,-6}, -{36,2,-5}, -{36,2,-4}, -{36,2,-3}, -{36,2,-2}, -{36,2,-1}, -{36,2,0}, -{36,2,1}, -{36,2,2}, -{36,2,3}, -{36,2,4}, -{36,2,5}, -{36,2,6}, -{36,2,7}, -{36,2,8}, -{36,2,9}, -{36,2,10}, -{36,2,11}, -{36,2,12}, -{36,2,13}, -{36,2,14}, -{36,2,15}, -{36,2,16}, -{36,2,17}, -{36,2,18}, -{36,2,19}, -{36,2,20}, -{36,2,21}, -{36,2,22}, -{36,2,23}, -{36,2,24}, -{36,2,25}, -{36,2,26}, -{36,2,27}, -{36,2,28}, -{36,2,29}, -{36,2,30}, -{36,2,31}, -{36,2,32}, -{36,2,33}, -{36,2,34}, -{36,2,35}, -{36,2,36}, -{36,2,37}, -{36,2,38}, -{36,2,39}, -{36,2,40}, -{36,2,41}, -{36,2,42}, -{36,2,43}, -{36,2,44}, -{36,3,-40}, -{36,3,-39}, -{36,3,-38}, -{36,3,-37}, -{36,3,-36}, -{36,3,-35}, -{36,3,-34}, -{36,3,-33}, -{36,3,-32}, -{36,3,-31}, -{36,3,-30}, -{36,3,-29}, -{36,3,-28}, -{36,3,-27}, -{36,3,-26}, -{36,3,-25}, -{36,3,-24}, -{36,3,-23}, -{36,3,-22}, -{36,3,-21}, -{36,3,-20}, -{36,3,-19}, -{36,3,-18}, -{36,3,-17}, -{36,3,-16}, -{36,3,-15}, -{36,3,-14}, -{36,3,-13}, -{36,3,-12}, -{36,3,-11}, -{36,3,-10}, -{36,3,-9}, -{36,3,-8}, -{36,3,-7}, -{36,3,-6}, -{36,3,-5}, -{36,3,-4}, -{36,3,-3}, -{36,3,-2}, -{36,3,-1}, -{36,3,0}, -{36,3,1}, -{36,3,2}, -{36,3,3}, -{36,3,4}, -{36,3,5}, -{36,3,6}, -{36,3,7}, -{36,3,8}, -{36,3,9}, -{36,3,10}, -{36,3,11}, -{36,3,12}, -{36,3,13}, -{36,3,14}, -{36,3,15}, -{36,3,16}, -{36,3,17}, -{36,3,18}, -{36,3,19}, -{36,3,20}, -{36,3,21}, -{36,3,22}, -{36,3,23}, -{36,3,24}, -{36,3,25}, -{36,3,26}, -{36,3,27}, -{36,3,28}, -{36,3,29}, -{36,3,30}, -{36,3,31}, -{36,3,32}, -{36,3,33}, -{36,3,34}, -{36,3,35}, -{36,3,36}, -{36,3,37}, -{36,3,38}, -{36,3,39}, -{36,3,40}, -{36,3,41}, -{36,3,42}, -{36,3,43}, -{36,3,44}, -{36,4,-41}, -{36,4,-40}, -{36,4,-39}, -{36,4,-38}, -{36,4,-37}, -{36,4,-36}, -{36,4,-35}, -{36,4,-34}, -{36,4,-33}, -{36,4,-32}, -{36,4,-31}, -{36,4,-30}, -{36,4,-29}, -{36,4,-28}, -{36,4,-27}, -{36,4,-26}, -{36,4,-25}, -{36,4,-24}, -{36,4,-23}, -{36,4,-22}, -{36,4,-21}, -{36,4,-20}, -{36,4,-19}, -{36,4,-18}, -{36,4,-17}, -{36,4,-16}, -{36,4,-15}, -{36,4,-14}, -{36,4,-13}, -{36,4,-12}, -{36,4,-11}, -{36,4,-10}, -{36,4,-9}, -{36,4,-8}, -{36,4,-7}, -{36,4,-6}, -{36,4,-5}, -{36,4,-4}, -{36,4,-3}, -{36,4,-2}, -{36,4,-1}, -{36,4,0}, -{36,4,1}, -{36,4,2}, -{36,4,3}, -{36,4,4}, -{36,4,5}, -{36,4,6}, -{36,4,7}, -{36,4,8}, -{36,4,9}, -{36,4,10}, -{36,4,11}, -{36,4,12}, -{36,4,13}, -{36,4,14}, -{36,4,15}, -{36,4,16}, -{36,4,17}, -{36,4,18}, -{36,4,19}, -{36,4,20}, -{36,4,21}, -{36,4,22}, -{36,4,23}, -{36,4,24}, -{36,4,25}, -{36,4,26}, -{36,4,27}, -{36,4,28}, -{36,4,29}, -{36,4,30}, -{36,4,31}, -{36,4,32}, -{36,4,33}, -{36,4,34}, -{36,4,35}, -{36,4,36}, -{36,4,37}, -{36,4,38}, -{36,4,39}, -{36,4,40}, -{36,4,41}, -{36,4,42}, -{36,4,43}, -{36,4,44}, -{36,5,-43}, -{36,5,-42}, -{36,5,-41}, -{36,5,-40}, -{36,5,-39}, -{36,5,-38}, -{36,5,-37}, -{36,5,-36}, -{36,5,-35}, -{36,5,-34}, -{36,5,-33}, -{36,5,-32}, -{36,5,-31}, -{36,5,-30}, -{36,5,-29}, -{36,5,-28}, -{36,5,-27}, -{36,5,-26}, -{36,5,-25}, -{36,5,-24}, -{36,5,-23}, -{36,5,-22}, -{36,5,-21}, -{36,5,-20}, -{36,5,-19}, -{36,5,-18}, -{36,5,-17}, -{36,5,-16}, -{36,5,-15}, -{36,5,-14}, -{36,5,-13}, -{36,5,-12}, -{36,5,-11}, -{36,5,-10}, -{36,5,-9}, -{36,5,-8}, -{36,5,-7}, -{36,5,-6}, -{36,5,-5}, -{36,5,-4}, -{36,5,-3}, -{36,5,-2}, -{36,5,-1}, -{36,5,0}, -{36,5,1}, -{36,5,2}, -{36,5,3}, -{36,5,4}, -{36,5,5}, -{36,5,6}, -{36,5,7}, -{36,5,8}, -{36,5,9}, -{36,5,10}, -{36,5,11}, -{36,5,12}, -{36,5,13}, -{36,5,14}, -{36,5,15}, -{36,5,16}, -{36,5,17}, -{36,5,18}, -{36,5,19}, -{36,5,20}, -{36,5,21}, -{36,5,22}, -{36,5,23}, -{36,5,24}, -{36,5,25}, -{36,5,26}, -{36,5,27}, -{36,5,28}, -{36,5,29}, -{36,5,30}, -{36,5,31}, -{36,5,32}, -{36,5,33}, -{36,5,34}, -{36,5,35}, -{36,5,36}, -{36,5,37}, -{36,5,38}, -{36,5,39}, -{36,5,40}, -{36,5,41}, -{36,5,42}, -{36,5,43}, -{36,5,44}, -{36,6,-44}, -{36,6,-43}, -{36,6,-42}, -{36,6,-41}, -{36,6,-40}, -{36,6,-39}, -{36,6,-38}, -{36,6,-37}, -{36,6,-36}, -{36,6,-35}, -{36,6,-34}, -{36,6,-33}, -{36,6,-32}, -{36,6,-31}, -{36,6,-30}, -{36,6,-29}, -{36,6,-28}, -{36,6,-27}, -{36,6,-26}, -{36,6,-25}, -{36,6,-24}, -{36,6,-23}, -{36,6,-22}, -{36,6,-21}, -{36,6,-20}, -{36,6,-19}, -{36,6,-18}, -{36,6,-17}, -{36,6,-16}, -{36,6,-15}, -{36,6,-14}, -{36,6,-13}, -{36,6,-12}, -{36,6,-11}, -{36,6,-10}, -{36,6,-9}, -{36,6,-8}, -{36,6,-7}, -{36,6,-6}, -{36,6,-5}, -{36,6,-4}, -{36,6,-3}, -{36,6,-2}, -{36,6,-1}, -{36,6,0}, -{36,6,1}, -{36,6,2}, -{36,6,3}, -{36,6,4}, -{36,6,5}, -{36,6,6}, -{36,6,7}, -{36,6,8}, -{36,6,9}, -{36,6,10}, -{36,6,11}, -{36,6,12}, -{36,6,13}, -{36,6,14}, -{36,6,15}, -{36,6,16}, -{36,6,17}, -{36,6,18}, -{36,6,19}, -{36,6,20}, -{36,6,21}, -{36,6,22}, -{36,6,23}, -{36,6,24}, -{36,6,25}, -{36,6,26}, -{36,6,27}, -{36,6,28}, -{36,6,29}, -{36,6,30}, -{36,6,31}, -{36,6,32}, -{36,6,33}, -{36,6,34}, -{36,6,35}, -{36,6,36}, -{36,6,37}, -{36,6,38}, -{36,6,39}, -{36,6,40}, -{36,6,41}, -{36,6,42}, -{36,6,43}, -{36,6,44}, -{36,7,-45}, -{36,7,-44}, -{36,7,-43}, -{36,7,-42}, -{36,7,-41}, -{36,7,-40}, -{36,7,-39}, -{36,7,-38}, -{36,7,-37}, -{36,7,-36}, -{36,7,-35}, -{36,7,-34}, -{36,7,-33}, -{36,7,-32}, -{36,7,-31}, -{36,7,-30}, -{36,7,-29}, -{36,7,-28}, -{36,7,-27}, -{36,7,-26}, -{36,7,-25}, -{36,7,-24}, -{36,7,-23}, -{36,7,-22}, -{36,7,-21}, -{36,7,-20}, -{36,7,-19}, -{36,7,-18}, -{36,7,-17}, -{36,7,-16}, -{36,7,-15}, -{36,7,-14}, -{36,7,-13}, -{36,7,-12}, -{36,7,-11}, -{36,7,-10}, -{36,7,-9}, -{36,7,-8}, -{36,7,-7}, -{36,7,-6}, -{36,7,-5}, -{36,7,-4}, -{36,7,-3}, -{36,7,-2}, -{36,7,-1}, -{36,7,0}, -{36,7,1}, -{36,7,2}, -{36,7,3}, -{36,7,4}, -{36,7,5}, -{36,7,6}, -{36,7,7}, -{36,7,8}, -{36,7,9}, -{36,7,10}, -{36,7,11}, -{36,7,12}, -{36,7,13}, -{36,7,14}, -{36,7,15}, -{36,7,16}, -{36,7,17}, -{36,7,18}, -{36,7,19}, -{36,7,20}, -{36,7,21}, -{36,7,22}, -{36,7,23}, -{36,7,24}, -{36,7,25}, -{36,7,26}, -{36,7,27}, -{36,7,28}, -{36,7,29}, -{36,7,30}, -{36,7,31}, -{36,7,32}, -{36,7,33}, -{36,7,34}, -{36,7,35}, -{36,7,36}, -{36,7,37}, -{36,7,38}, -{36,7,39}, -{36,7,40}, -{36,7,41}, -{36,7,42}, -{36,7,43}, -{36,7,44}, -{36,8,-46}, -{36,8,-45}, -{36,8,-44}, -{36,8,-43}, -{36,8,-42}, -{36,8,-41}, -{36,8,-40}, -{36,8,-39}, -{36,8,-38}, -{36,8,-37}, -{36,8,-36}, -{36,8,-35}, -{36,8,-34}, -{36,8,-33}, -{36,8,-32}, -{36,8,-31}, -{36,8,-30}, -{36,8,-29}, -{36,8,-28}, -{36,8,-27}, -{36,8,-26}, -{36,8,-25}, -{36,8,-24}, -{36,8,-23}, -{36,8,-22}, -{36,8,-21}, -{36,8,-20}, -{36,8,-19}, -{36,8,-18}, -{36,8,-17}, -{36,8,-16}, -{36,8,-15}, -{36,8,-14}, -{36,8,-13}, -{36,8,-12}, -{36,8,-11}, -{36,8,-10}, -{36,8,-9}, -{36,8,-8}, -{36,8,-7}, -{36,8,-6}, -{36,8,-5}, -{36,8,-4}, -{36,8,-3}, -{36,8,-2}, -{36,8,-1}, -{36,8,0}, -{36,8,1}, -{36,8,2}, -{36,8,3}, -{36,8,4}, -{36,8,5}, -{36,8,6}, -{36,8,7}, -{36,8,8}, -{36,8,9}, -{36,8,10}, -{36,8,11}, -{36,8,12}, -{36,8,13}, -{36,8,14}, -{36,8,15}, -{36,8,16}, -{36,8,17}, -{36,8,18}, -{36,8,19}, -{36,8,20}, -{36,8,21}, -{36,8,22}, -{36,8,23}, -{36,8,24}, -{36,8,25}, -{36,8,26}, -{36,8,27}, -{36,8,28}, -{36,8,29}, -{36,8,30}, -{36,8,31}, -{36,8,32}, -{36,8,33}, -{36,8,34}, -{36,8,35}, -{36,8,36}, -{36,8,37}, -{36,8,38}, -{36,8,39}, -{36,8,40}, -{36,8,41}, -{36,8,42}, -{36,8,43}, -{36,8,44}, -{36,9,-47}, -{36,9,-46}, -{36,9,-45}, -{36,9,-44}, -{36,9,-43}, -{36,9,-42}, -{36,9,-41}, -{36,9,-40}, -{36,9,-39}, -{36,9,-38}, -{36,9,-37}, -{36,9,-36}, -{36,9,-35}, -{36,9,-34}, -{36,9,-33}, -{36,9,-32}, -{36,9,-31}, -{36,9,-30}, -{36,9,-29}, -{36,9,-28}, -{36,9,-27}, -{36,9,-26}, -{36,9,-25}, -{36,9,-24}, -{36,9,-23}, -{36,9,-22}, -{36,9,-21}, -{36,9,-20}, -{36,9,-19}, -{36,9,-18}, -{36,9,-17}, -{36,9,-16}, -{36,9,-15}, -{36,9,-14}, -{36,9,-13}, -{36,9,-12}, -{36,9,-11}, -{36,9,-10}, -{36,9,-9}, -{36,9,-8}, -{36,9,-7}, -{36,9,-6}, -{36,9,-5}, -{36,9,-4}, -{36,9,-3}, -{36,9,-2}, -{36,9,-1}, -{36,9,0}, -{36,9,1}, -{36,9,2}, -{36,9,3}, -{36,9,4}, -{36,9,5}, -{36,9,6}, -{36,9,7}, -{36,9,8}, -{36,9,9}, -{36,9,10}, -{36,9,11}, -{36,9,12}, -{36,9,13}, -{36,9,14}, -{36,9,15}, -{36,9,16}, -{36,9,17}, -{36,9,18}, -{36,9,19}, -{36,9,20}, -{36,9,21}, -{36,9,22}, -{36,9,23}, -{36,9,24}, -{36,9,25}, -{36,9,26}, -{36,9,27}, -{36,9,28}, -{36,9,29}, -{36,9,30}, -{36,9,31}, -{36,9,32}, -{36,9,33}, -{36,9,34}, -{36,9,35}, -{36,9,36}, -{36,9,37}, -{36,9,38}, -{36,9,39}, -{36,9,40}, -{36,9,41}, -{36,9,42}, -{36,9,43}, -{36,9,44}, -{36,10,-48}, -{36,10,-47}, -{36,10,-46}, -{36,10,-45}, -{36,10,-44}, -{36,10,-43}, -{36,10,-42}, -{36,10,-41}, -{36,10,-40}, -{36,10,-39}, -{36,10,-38}, -{36,10,-37}, -{36,10,-36}, -{36,10,-35}, -{36,10,-34}, -{36,10,-33}, -{36,10,-32}, -{36,10,-31}, -{36,10,-30}, -{36,10,-29}, -{36,10,-28}, -{36,10,-27}, -{36,10,-26}, -{36,10,-25}, -{36,10,-24}, -{36,10,-23}, -{36,10,-22}, -{36,10,-21}, -{36,10,-20}, -{36,10,-19}, -{36,10,-18}, -{36,10,-17}, -{36,10,-16}, -{36,10,-15}, -{36,10,-14}, -{36,10,-13}, -{36,10,-12}, -{36,10,-11}, -{36,10,-10}, -{36,10,-9}, -{36,10,-8}, -{36,10,-7}, -{36,10,-6}, -{36,10,-5}, -{36,10,-4}, -{36,10,-3}, -{36,10,-2}, -{36,10,-1}, -{36,10,0}, -{36,10,1}, -{36,10,2}, -{36,10,3}, -{36,10,4}, -{36,10,5}, -{36,10,6}, -{36,10,7}, -{36,10,8}, -{36,10,9}, -{36,10,10}, -{36,10,11}, -{36,10,12}, -{36,10,13}, -{36,10,14}, -{36,10,15}, -{36,10,16}, -{36,10,17}, -{36,10,18}, -{36,10,19}, -{36,10,20}, -{36,10,21}, -{36,10,22}, -{36,10,23}, -{36,10,24}, -{36,10,25}, -{36,10,26}, -{36,10,27}, -{36,10,28}, -{36,10,29}, -{36,10,30}, -{36,10,31}, -{36,10,32}, -{36,10,33}, -{36,10,34}, -{36,10,35}, -{36,10,36}, -{36,10,37}, -{36,10,38}, -{36,10,39}, -{36,10,40}, -{36,10,41}, -{36,10,42}, -{36,10,43}, -{36,10,44}, -{36,10,45}, -{36,11,-49}, -{36,11,-48}, -{36,11,-47}, -{36,11,-46}, -{36,11,-45}, -{36,11,-44}, -{36,11,-43}, -{36,11,-42}, -{36,11,-41}, -{36,11,-40}, -{36,11,-39}, -{36,11,-38}, -{36,11,-37}, -{36,11,-36}, -{36,11,-35}, -{36,11,-34}, -{36,11,-33}, -{36,11,-32}, -{36,11,-31}, -{36,11,-30}, -{36,11,-29}, -{36,11,-28}, -{36,11,-27}, -{36,11,-26}, -{36,11,-25}, -{36,11,-24}, -{36,11,-23}, -{36,11,-22}, -{36,11,-21}, -{36,11,-20}, -{36,11,-19}, -{36,11,-18}, -{36,11,-17}, -{36,11,-16}, -{36,11,-15}, -{36,11,-14}, -{36,11,-13}, -{36,11,-12}, -{36,11,-11}, -{36,11,-10}, -{36,11,-9}, -{36,11,-8}, -{36,11,-7}, -{36,11,-6}, -{36,11,-5}, -{36,11,-4}, -{36,11,-3}, -{36,11,-2}, -{36,11,-1}, -{36,11,0}, -{36,11,1}, -{36,11,2}, -{36,11,3}, -{36,11,4}, -{36,11,5}, -{36,11,6}, -{36,11,7}, -{36,11,8}, -{36,11,9}, -{36,11,10}, -{36,11,11}, -{36,11,12}, -{36,11,13}, -{36,11,14}, -{36,11,15}, -{36,11,16}, -{36,11,17}, -{36,11,18}, -{36,11,19}, -{36,11,20}, -{36,11,21}, -{36,11,22}, -{36,11,23}, -{36,11,24}, -{36,11,25}, -{36,11,26}, -{36,11,27}, -{36,11,28}, -{36,11,29}, -{36,11,30}, -{36,11,31}, -{36,11,32}, -{36,11,33}, -{36,11,34}, -{36,11,35}, -{36,11,36}, -{36,11,37}, -{36,11,38}, -{36,11,39}, -{36,11,40}, -{36,11,41}, -{36,11,42}, -{36,11,43}, -{36,11,44}, -{36,11,45}, -{36,12,-50}, -{36,12,-49}, -{36,12,-48}, -{36,12,-47}, -{36,12,-46}, -{36,12,-45}, -{36,12,-44}, -{36,12,-43}, -{36,12,-42}, -{36,12,-41}, -{36,12,-40}, -{36,12,-39}, -{36,12,-38}, -{36,12,-37}, -{36,12,-36}, -{36,12,-35}, -{36,12,-34}, -{36,12,-33}, -{36,12,-32}, -{36,12,-31}, -{36,12,-30}, -{36,12,-29}, -{36,12,-28}, -{36,12,-27}, -{36,12,-26}, -{36,12,-25}, -{36,12,-24}, -{36,12,-23}, -{36,12,-22}, -{36,12,-21}, -{36,12,-20}, -{36,12,-19}, -{36,12,-18}, -{36,12,-17}, -{36,12,-16}, -{36,12,-15}, -{36,12,-14}, -{36,12,-13}, -{36,12,-12}, -{36,12,-11}, -{36,12,-10}, -{36,12,-9}, -{36,12,-8}, -{36,12,-7}, -{36,12,-6}, -{36,12,-5}, -{36,12,-4}, -{36,12,-3}, -{36,12,-2}, -{36,12,-1}, -{36,12,0}, -{36,12,1}, -{36,12,2}, -{36,12,3}, -{36,12,4}, -{36,12,5}, -{36,12,6}, -{36,12,7}, -{36,12,8}, -{36,12,9}, -{36,12,10}, -{36,12,11}, -{36,12,12}, -{36,12,13}, -{36,12,14}, -{36,12,15}, -{36,12,16}, -{36,12,17}, -{36,12,18}, -{36,12,19}, -{36,12,20}, -{36,12,21}, -{36,12,22}, -{36,12,23}, -{36,12,24}, -{36,12,25}, -{36,12,26}, -{36,12,27}, -{36,12,28}, -{36,12,29}, -{36,12,30}, -{36,12,31}, -{36,12,32}, -{36,12,33}, -{36,12,34}, -{36,12,35}, -{36,12,36}, -{36,12,37}, -{36,12,38}, -{36,12,39}, -{36,12,40}, -{36,12,41}, -{36,12,42}, -{36,12,43}, -{36,12,44}, -{36,12,45}, -{36,13,-51}, -{36,13,-50}, -{36,13,-49}, -{36,13,-48}, -{36,13,-47}, -{36,13,-46}, -{36,13,-45}, -{36,13,-44}, -{36,13,-43}, -{36,13,-42}, -{36,13,-41}, -{36,13,-40}, -{36,13,-39}, -{36,13,-38}, -{36,13,-37}, -{36,13,-36}, -{36,13,-35}, -{36,13,-34}, -{36,13,-33}, -{36,13,-32}, -{36,13,-31}, -{36,13,-30}, -{36,13,-29}, -{36,13,-28}, -{36,13,-27}, -{36,13,-26}, -{36,13,-25}, -{36,13,-24}, -{36,13,-23}, -{36,13,-22}, -{36,13,-21}, -{36,13,-20}, -{36,13,-19}, -{36,13,-18}, -{36,13,-17}, -{36,13,-16}, -{36,13,-15}, -{36,13,-14}, -{36,13,-13}, -{36,13,-12}, -{36,13,-11}, -{36,13,-10}, -{36,13,-9}, -{36,13,-8}, -{36,13,-7}, -{36,13,-6}, -{36,13,-5}, -{36,13,-4}, -{36,13,-3}, -{36,13,-2}, -{36,13,-1}, -{36,13,0}, -{36,13,1}, -{36,13,2}, -{36,13,3}, -{36,13,4}, -{36,13,5}, -{36,13,6}, -{36,13,7}, -{36,13,8}, -{36,13,9}, -{36,13,10}, -{36,13,11}, -{36,13,12}, -{36,13,13}, -{36,13,14}, -{36,13,15}, -{36,13,16}, -{36,13,17}, -{36,13,18}, -{36,13,19}, -{36,13,20}, -{36,13,21}, -{36,13,22}, -{36,13,23}, -{36,13,24}, -{36,13,25}, -{36,13,26}, -{36,13,27}, -{36,13,28}, -{36,13,29}, -{36,13,30}, -{36,13,31}, -{36,13,32}, -{36,13,33}, -{36,13,34}, -{36,13,35}, -{36,13,36}, -{36,13,37}, -{36,13,38}, -{36,13,39}, -{36,13,40}, -{36,13,41}, -{36,13,42}, -{36,13,43}, -{36,13,44}, -{36,13,45}, -{36,14,-52}, -{36,14,-51}, -{36,14,-50}, -{36,14,-49}, -{36,14,-48}, -{36,14,-47}, -{36,14,-46}, -{36,14,-45}, -{36,14,-44}, -{36,14,-43}, -{36,14,-42}, -{36,14,-41}, -{36,14,-40}, -{36,14,-39}, -{36,14,-38}, -{36,14,-37}, -{36,14,-36}, -{36,14,-35}, -{36,14,-34}, -{36,14,-33}, -{36,14,-32}, -{36,14,-31}, -{36,14,-30}, -{36,14,-29}, -{36,14,-28}, -{36,14,-27}, -{36,14,-26}, -{36,14,-25}, -{36,14,-24}, -{36,14,-23}, -{36,14,-22}, -{36,14,-21}, -{36,14,-20}, -{36,14,-19}, -{36,14,-18}, -{36,14,-17}, -{36,14,-16}, -{36,14,-15}, -{36,14,-14}, -{36,14,-13}, -{36,14,-12}, -{36,14,-11}, -{36,14,-10}, -{36,14,-9}, -{36,14,-8}, -{36,14,-7}, -{36,14,-6}, -{36,14,-5}, -{36,14,-4}, -{36,14,-3}, -{36,14,-2}, -{36,14,-1}, -{36,14,0}, -{36,14,1}, -{36,14,2}, -{36,14,3}, -{36,14,4}, -{36,14,5}, -{36,14,6}, -{36,14,7}, -{36,14,8}, -{36,14,9}, -{36,14,10}, -{36,14,11}, -{36,14,12}, -{36,14,13}, -{36,14,14}, -{36,14,15}, -{36,14,16}, -{36,14,17}, -{36,14,18}, -{36,14,19}, -{36,14,20}, -{36,14,21}, -{36,14,22}, -{36,14,23}, -{36,14,24}, -{36,14,25}, -{36,14,26}, -{36,14,27}, -{36,14,28}, -{36,14,29}, -{36,14,30}, -{36,14,31}, -{36,14,32}, -{36,14,33}, -{36,14,34}, -{36,14,35}, -{36,14,36}, -{36,14,37}, -{36,14,38}, -{36,14,39}, -{36,14,40}, -{36,14,41}, -{36,14,42}, -{36,14,43}, -{36,14,44}, -{36,14,45}, -{36,15,-53}, -{36,15,-52}, -{36,15,-51}, -{36,15,-50}, -{36,15,-49}, -{36,15,-48}, -{36,15,-47}, -{36,15,-46}, -{36,15,-45}, -{36,15,-44}, -{36,15,-43}, -{36,15,-42}, -{36,15,-41}, -{36,15,-40}, -{36,15,-39}, -{36,15,-38}, -{36,15,-37}, -{36,15,-36}, -{36,15,-35}, -{36,15,-34}, -{36,15,-33}, -{36,15,-32}, -{36,15,-31}, -{36,15,-30}, -{36,15,-29}, -{36,15,-28}, -{36,15,-27}, -{36,15,-26}, -{36,15,-25}, -{36,15,-24}, -{36,15,-23}, -{36,15,-22}, -{36,15,-21}, -{36,15,-20}, -{36,15,-19}, -{36,15,-18}, -{36,15,-17}, -{36,15,-16}, -{36,15,-15}, -{36,15,-14}, -{36,15,-13}, -{36,15,-12}, -{36,15,-11}, -{36,15,-10}, -{36,15,-9}, -{36,15,-8}, -{36,15,-7}, -{36,15,-6}, -{36,15,-5}, -{36,15,-4}, -{36,15,-3}, -{36,15,-2}, -{36,15,-1}, -{36,15,0}, -{36,15,1}, -{36,15,2}, -{36,15,3}, -{36,15,4}, -{36,15,5}, -{36,15,6}, -{36,15,7}, -{36,15,8}, -{36,15,9}, -{36,15,10}, -{36,15,11}, -{36,15,12}, -{36,15,13}, -{36,15,14}, -{36,15,15}, -{36,15,16}, -{36,15,17}, -{36,15,18}, -{36,15,19}, -{36,15,20}, -{36,15,21}, -{36,15,22}, -{36,15,23}, -{36,15,24}, -{36,15,25}, -{36,15,26}, -{36,15,27}, -{36,15,28}, -{36,15,29}, -{36,15,30}, -{36,15,31}, -{36,15,32}, -{36,15,33}, -{36,15,34}, -{36,15,35}, -{36,15,36}, -{36,15,37}, -{36,15,38}, -{36,15,39}, -{36,15,40}, -{36,15,41}, -{36,15,42}, -{36,15,43}, -{36,15,44}, -{36,15,45}, -{36,16,-54}, -{36,16,-53}, -{36,16,-52}, -{36,16,-51}, -{36,16,-50}, -{36,16,-49}, -{36,16,-48}, -{36,16,-47}, -{36,16,-46}, -{36,16,-45}, -{36,16,-44}, -{36,16,-43}, -{36,16,-42}, -{36,16,-41}, -{36,16,-40}, -{36,16,-39}, -{36,16,-38}, -{36,16,-37}, -{36,16,-36}, -{36,16,-35}, -{36,16,-34}, -{36,16,-33}, -{36,16,-32}, -{36,16,-31}, -{36,16,-30}, -{36,16,-29}, -{36,16,-28}, -{36,16,-27}, -{36,16,-26}, -{36,16,-25}, -{36,16,-24}, -{36,16,-23}, -{36,16,-22}, -{36,16,-21}, -{36,16,-20}, -{36,16,-19}, -{36,16,-18}, -{36,16,-17}, -{36,16,-16}, -{36,16,-15}, -{36,16,-14}, -{36,16,-13}, -{36,16,-12}, -{36,16,-11}, -{36,16,-10}, -{36,16,-9}, -{36,16,-8}, -{36,16,-7}, -{36,16,-6}, -{36,16,-5}, -{36,16,-4}, -{36,16,-3}, -{36,16,-2}, -{36,16,-1}, -{36,16,0}, -{36,16,1}, -{36,16,2}, -{36,16,3}, -{36,16,4}, -{36,16,5}, -{36,16,6}, -{36,16,7}, -{36,16,8}, -{36,16,9}, -{36,16,10}, -{36,16,11}, -{36,16,12}, -{36,16,13}, -{36,16,14}, -{36,16,15}, -{36,16,16}, -{36,16,17}, -{36,16,18}, -{36,16,19}, -{36,16,20}, -{36,16,21}, -{36,16,22}, -{36,16,23}, -{36,16,24}, -{36,16,25}, -{36,16,26}, -{36,16,27}, -{36,16,28}, -{36,16,29}, -{36,16,30}, -{36,16,31}, -{36,16,32}, -{36,16,33}, -{36,16,34}, -{36,16,35}, -{36,16,36}, -{36,16,37}, -{36,16,38}, -{36,16,39}, -{36,16,40}, -{36,16,41}, -{36,16,42}, -{36,16,43}, -{36,16,44}, -{36,16,45}, -{36,17,-55}, -{36,17,-54}, -{36,17,-53}, -{36,17,-52}, -{36,17,-51}, -{36,17,-50}, -{36,17,-49}, -{36,17,-48}, -{36,17,-47}, -{36,17,-46}, -{36,17,-45}, -{36,17,-44}, -{36,17,-43}, -{36,17,-42}, -{36,17,-41}, -{36,17,-40}, -{36,17,-39}, -{36,17,-38}, -{36,17,-37}, -{36,17,-36}, -{36,17,-35}, -{36,17,-34}, -{36,17,-33}, -{36,17,-32}, -{36,17,-31}, -{36,17,-30}, -{36,17,-29}, -{36,17,-28}, -{36,17,-27}, -{36,17,-26}, -{36,17,-25}, -{36,17,-24}, -{36,17,-23}, -{36,17,-22}, -{36,17,-21}, -{36,17,-20}, -{36,17,-19}, -{36,17,-18}, -{36,17,-17}, -{36,17,-16}, -{36,17,-15}, -{36,17,-14}, -{36,17,-13}, -{36,17,-12}, -{36,17,-11}, -{36,17,-10}, -{36,17,-9}, -{36,17,-8}, -{36,17,-7}, -{36,17,-6}, -{36,17,-5}, -{36,17,-4}, -{36,17,-3}, -{36,17,-2}, -{36,17,-1}, -{36,17,0}, -{36,17,1}, -{36,17,2}, -{36,17,3}, -{36,17,4}, -{36,17,5}, -{36,17,6}, -{36,17,7}, -{36,17,8}, -{36,17,9}, -{36,17,10}, -{36,17,11}, -{36,17,12}, -{36,17,13}, -{36,17,14}, -{36,17,15}, -{36,17,16}, -{36,17,17}, -{36,17,18}, -{36,17,19}, -{36,17,20}, -{36,17,21}, -{36,17,22}, -{36,17,23}, -{36,17,24}, -{36,17,25}, -{36,17,26}, -{36,17,27}, -{36,17,28}, -{36,17,29}, -{36,17,30}, -{36,17,31}, -{36,17,32}, -{36,17,33}, -{36,17,34}, -{36,17,35}, -{36,17,36}, -{36,17,37}, -{36,17,38}, -{36,17,39}, -{36,17,40}, -{36,17,41}, -{36,17,42}, -{36,17,43}, -{36,17,44}, -{36,17,45}, -{36,18,-56}, -{36,18,-55}, -{36,18,-54}, -{36,18,-53}, -{36,18,-52}, -{36,18,-51}, -{36,18,-50}, -{36,18,-49}, -{36,18,-48}, -{36,18,-47}, -{36,18,-46}, -{36,18,-45}, -{36,18,-44}, -{36,18,-43}, -{36,18,-42}, -{36,18,-41}, -{36,18,-40}, -{36,18,-39}, -{36,18,-38}, -{36,18,-37}, -{36,18,-36}, -{36,18,-35}, -{36,18,-34}, -{36,18,-33}, -{36,18,-32}, -{36,18,-31}, -{36,18,-30}, -{36,18,-29}, -{36,18,-28}, -{36,18,-27}, -{36,18,-26}, -{36,18,-25}, -{36,18,-24}, -{36,18,-23}, -{36,18,-22}, -{36,18,-21}, -{36,18,-20}, -{36,18,-19}, -{36,18,-18}, -{36,18,-17}, -{36,18,-16}, -{36,18,-15}, -{36,18,-14}, -{36,18,-13}, -{36,18,-12}, -{36,18,-11}, -{36,18,-10}, -{36,18,-9}, -{36,18,-8}, -{36,18,-7}, -{36,18,-6}, -{36,18,-5}, -{36,18,-4}, -{36,18,-3}, -{36,18,-2}, -{36,18,-1}, -{36,18,0}, -{36,18,1}, -{36,18,2}, -{36,18,3}, -{36,18,4}, -{36,18,5}, -{36,18,6}, -{36,18,7}, -{36,18,8}, -{36,18,9}, -{36,18,10}, -{36,18,11}, -{36,18,12}, -{36,18,13}, -{36,18,14}, -{36,18,15}, -{36,18,16}, -{36,18,17}, -{36,18,18}, -{36,18,19}, -{36,18,20}, -{36,18,21}, -{36,18,22}, -{36,18,23}, -{36,18,24}, -{36,18,25}, -{36,18,26}, -{36,18,27}, -{36,18,28}, -{36,18,29}, -{36,18,30}, -{36,18,31}, -{36,18,32}, -{36,18,33}, -{36,18,34}, -{36,18,35}, -{36,18,36}, -{36,18,37}, -{36,18,38}, -{36,18,39}, -{36,18,40}, -{36,18,41}, -{36,18,42}, -{36,18,43}, -{36,18,44}, -{36,18,45}, -{36,19,-57}, -{36,19,-56}, -{36,19,-55}, -{36,19,-54}, -{36,19,-53}, -{36,19,-52}, -{36,19,-51}, -{36,19,-50}, -{36,19,-49}, -{36,19,-48}, -{36,19,-47}, -{36,19,-46}, -{36,19,-45}, -{36,19,-44}, -{36,19,-43}, -{36,19,-42}, -{36,19,-41}, -{36,19,-40}, -{36,19,-39}, -{36,19,-38}, -{36,19,-37}, -{36,19,-36}, -{36,19,-35}, -{36,19,-34}, -{36,19,-33}, -{36,19,-32}, -{36,19,-31}, -{36,19,-30}, -{36,19,-29}, -{36,19,-28}, -{36,19,-27}, -{36,19,-26}, -{36,19,-25}, -{36,19,-24}, -{36,19,-23}, -{36,19,-22}, -{36,19,-21}, -{36,19,-20}, -{36,19,-19}, -{36,19,-18}, -{36,19,-17}, -{36,19,-16}, -{36,19,-15}, -{36,19,-14}, -{36,19,-13}, -{36,19,-12}, -{36,19,-11}, -{36,19,-10}, -{36,19,-9}, -{36,19,-8}, -{36,19,-7}, -{36,19,-6}, -{36,19,-5}, -{36,19,-4}, -{36,19,-3}, -{36,19,-2}, -{36,19,-1}, -{36,19,0}, -{36,19,1}, -{36,19,2}, -{36,19,3}, -{36,19,4}, -{36,19,5}, -{36,19,6}, -{36,19,7}, -{36,19,8}, -{36,19,9}, -{36,19,10}, -{36,19,11}, -{36,19,12}, -{36,19,13}, -{36,19,14}, -{36,19,15}, -{36,19,16}, -{36,19,17}, -{36,19,18}, -{36,19,19}, -{36,19,20}, -{36,19,21}, -{36,19,22}, -{36,19,23}, -{36,19,24}, -{36,19,25}, -{36,19,26}, -{36,19,27}, -{36,19,28}, -{36,19,29}, -{36,19,30}, -{36,19,31}, -{36,19,32}, -{36,19,33}, -{36,19,34}, -{36,19,35}, -{36,19,36}, -{36,19,37}, -{36,19,38}, -{36,19,39}, -{36,19,40}, -{36,19,41}, -{36,19,42}, -{36,19,43}, -{36,19,44}, -{36,19,45}, -{36,20,-58}, -{36,20,-57}, -{36,20,-56}, -{36,20,-55}, -{36,20,-54}, -{36,20,-53}, -{36,20,-52}, -{36,20,-51}, -{36,20,-50}, -{36,20,-49}, -{36,20,-48}, -{36,20,-47}, -{36,20,-46}, -{36,20,-45}, -{36,20,-44}, -{36,20,-43}, -{36,20,-42}, -{36,20,-41}, -{36,20,-40}, -{36,20,-39}, -{36,20,-38}, -{36,20,-37}, -{36,20,-36}, -{36,20,-35}, -{36,20,-34}, -{36,20,-33}, -{36,20,-32}, -{36,20,-31}, -{36,20,-30}, -{36,20,-29}, -{36,20,-28}, -{36,20,-27}, -{36,20,-26}, -{36,20,-25}, -{36,20,-24}, -{36,20,-23}, -{36,20,-22}, -{36,20,-21}, -{36,20,-20}, -{36,20,-19}, -{36,20,-18}, -{36,20,-17}, -{36,20,-16}, -{36,20,-15}, -{36,20,-14}, -{36,20,-13}, -{36,20,-12}, -{36,20,-11}, -{36,20,-10}, -{36,20,-9}, -{36,20,-8}, -{36,20,-7}, -{36,20,-6}, -{36,20,-5}, -{36,20,-4}, -{36,20,-3}, -{36,20,-2}, -{36,20,-1}, -{36,20,0}, -{36,20,1}, -{36,20,2}, -{36,20,3}, -{36,20,4}, -{36,20,5}, -{36,20,6}, -{36,20,7}, -{36,20,8}, -{36,20,9}, -{36,20,10}, -{36,20,11}, -{36,20,12}, -{36,20,13}, -{36,20,14}, -{36,20,15}, -{36,20,16}, -{36,20,17}, -{36,20,18}, -{36,20,19}, -{36,20,20}, -{36,20,21}, -{36,20,22}, -{36,20,23}, -{36,20,24}, -{36,20,25}, -{36,20,26}, -{36,20,27}, -{36,20,28}, -{36,20,29}, -{36,20,30}, -{36,20,31}, -{36,20,32}, -{36,20,33}, -{36,20,34}, -{36,20,35}, -{36,20,36}, -{36,20,37}, -{36,20,38}, -{36,20,39}, -{36,20,40}, -{36,20,41}, -{36,20,42}, -{36,20,43}, -{36,20,44}, -{36,20,45}, -{36,21,-59}, -{36,21,-58}, -{36,21,-57}, -{36,21,-56}, -{36,21,-55}, -{36,21,-54}, -{36,21,-53}, -{36,21,-52}, -{36,21,-51}, -{36,21,-50}, -{36,21,-49}, -{36,21,-48}, -{36,21,-47}, -{36,21,-46}, -{36,21,-45}, -{36,21,-44}, -{36,21,-43}, -{36,21,-42}, -{36,21,-41}, -{36,21,-40}, -{36,21,-39}, -{36,21,-38}, -{36,21,-37}, -{36,21,-36}, -{36,21,-35}, -{36,21,-34}, -{36,21,-33}, -{36,21,-32}, -{36,21,-31}, -{36,21,-30}, -{36,21,-29}, -{36,21,-28}, -{36,21,-27}, -{36,21,-26}, -{36,21,-25}, -{36,21,-24}, -{36,21,-23}, -{36,21,-22}, -{36,21,-21}, -{36,21,-20}, -{36,21,-19}, -{36,21,-18}, -{36,21,-17}, -{36,21,-16}, -{36,21,-15}, -{36,21,-14}, -{36,21,-13}, -{36,21,-12}, -{36,21,-11}, -{36,21,-10}, -{36,21,-9}, -{36,21,-8}, -{36,21,-7}, -{36,21,-6}, -{36,21,-5}, -{36,21,-4}, -{36,21,-3}, -{36,21,-2}, -{36,21,-1}, -{36,21,0}, -{36,21,1}, -{36,21,2}, -{36,21,3}, -{36,21,4}, -{36,21,5}, -{36,21,6}, -{36,21,7}, -{36,21,8}, -{36,21,9}, -{36,21,10}, -{36,21,11}, -{36,21,12}, -{36,21,13}, -{36,21,14}, -{36,21,15}, -{36,21,16}, -{36,21,17}, -{36,21,18}, -{36,21,19}, -{36,21,20}, -{36,21,21}, -{36,21,22}, -{36,21,23}, -{36,21,24}, -{36,21,25}, -{36,21,26}, -{36,21,27}, -{36,21,28}, -{36,21,29}, -{36,21,30}, -{36,21,31}, -{36,21,32}, -{36,21,33}, -{36,21,34}, -{36,21,35}, -{36,21,36}, -{36,21,37}, -{36,21,38}, -{36,21,39}, -{36,21,40}, -{36,21,41}, -{36,21,42}, -{36,21,43}, -{36,21,44}, -{36,21,45}, -{36,22,-60}, -{36,22,-59}, -{36,22,-58}, -{36,22,-57}, -{36,22,-56}, -{36,22,-55}, -{36,22,-54}, -{36,22,-53}, -{36,22,-52}, -{36,22,-51}, -{36,22,-50}, -{36,22,-49}, -{36,22,-48}, -{36,22,-47}, -{36,22,-46}, -{36,22,-45}, -{36,22,-44}, -{36,22,-43}, -{36,22,-42}, -{36,22,-41}, -{36,22,-40}, -{36,22,-39}, -{36,22,-38}, -{36,22,-37}, -{36,22,-36}, -{36,22,-35}, -{36,22,-34}, -{36,22,-33}, -{36,22,-32}, -{36,22,-31}, -{36,22,-30}, -{36,22,-29}, -{36,22,-28}, -{36,22,-27}, -{36,22,-26}, -{36,22,-25}, -{36,22,-24}, -{36,22,-23}, -{36,22,-22}, -{36,22,-21}, -{36,22,-20}, -{36,22,-19}, -{36,22,-18}, -{36,22,-17}, -{36,22,-16}, -{36,22,-15}, -{36,22,-14}, -{36,22,-13}, -{36,22,-12}, -{36,22,-11}, -{36,22,-10}, -{36,22,-9}, -{36,22,-8}, -{36,22,-7}, -{36,22,-6}, -{36,22,-5}, -{36,22,-4}, -{36,22,-3}, -{36,22,-2}, -{36,22,-1}, -{36,22,0}, -{36,22,1}, -{36,22,2}, -{36,22,3}, -{36,22,4}, -{36,22,5}, -{36,22,6}, -{36,22,7}, -{36,22,8}, -{36,22,9}, -{36,22,10}, -{36,22,11}, -{36,22,12}, -{36,22,13}, -{36,22,14}, -{36,22,15}, -{36,22,16}, -{36,22,17}, -{36,22,18}, -{36,22,19}, -{36,22,20}, -{36,22,21}, -{36,22,22}, -{36,22,23}, -{36,22,24}, -{36,22,25}, -{36,22,26}, -{36,22,27}, -{36,22,28}, -{36,22,29}, -{36,22,30}, -{36,22,31}, -{36,22,32}, -{36,22,33}, -{36,22,34}, -{36,22,35}, -{36,22,36}, -{36,22,37}, -{36,22,38}, -{36,22,39}, -{36,22,40}, -{36,22,41}, -{36,22,42}, -{36,22,43}, -{36,22,44}, -{36,22,45}, -{36,22,46}, -{36,23,-61}, -{36,23,-60}, -{36,23,-59}, -{36,23,-58}, -{36,23,-57}, -{36,23,-56}, -{36,23,-55}, -{36,23,-54}, -{36,23,-53}, -{36,23,-52}, -{36,23,-51}, -{36,23,-50}, -{36,23,-49}, -{36,23,-48}, -{36,23,-47}, -{36,23,-46}, -{36,23,-45}, -{36,23,-44}, -{36,23,-43}, -{36,23,-42}, -{36,23,-41}, -{36,23,-40}, -{36,23,-39}, -{36,23,-38}, -{36,23,-37}, -{36,23,-36}, -{36,23,-35}, -{36,23,-34}, -{36,23,-33}, -{36,23,-32}, -{36,23,-31}, -{36,23,-30}, -{36,23,-29}, -{36,23,-28}, -{36,23,-27}, -{36,23,-26}, -{36,23,-25}, -{36,23,-24}, -{36,23,-23}, -{36,23,-22}, -{36,23,-21}, -{36,23,-20}, -{36,23,-19}, -{36,23,-18}, -{36,23,-17}, -{36,23,-16}, -{36,23,-15}, -{36,23,-14}, -{36,23,-13}, -{36,23,-12}, -{36,23,-11}, -{36,23,-10}, -{36,23,-9}, -{36,23,-8}, -{36,23,-7}, -{36,23,-6}, -{36,23,-5}, -{36,23,-4}, -{36,23,-3}, -{36,23,-2}, -{36,23,-1}, -{36,23,0}, -{36,23,1}, -{36,23,2}, -{36,23,3}, -{36,23,4}, -{36,23,5}, -{36,23,6}, -{36,23,7}, -{36,23,8}, -{36,23,9}, -{36,23,10}, -{36,23,11}, -{36,23,12}, -{36,23,13}, -{36,23,14}, -{36,23,15}, -{36,23,16}, -{36,23,17}, -{36,23,18}, -{36,23,19}, -{36,23,20}, -{36,23,21}, -{36,23,22}, -{36,23,23}, -{36,23,24}, -{36,23,25}, -{36,23,26}, -{36,23,27}, -{36,23,28}, -{36,23,29}, -{36,23,30}, -{36,23,31}, -{36,23,32}, -{36,23,33}, -{36,23,34}, -{36,23,35}, -{36,23,36}, -{36,23,37}, -{36,23,38}, -{36,23,39}, -{36,23,40}, -{36,23,41}, -{36,23,42}, -{36,23,43}, -{36,23,44}, -{36,23,45}, -{36,23,46}, -{36,24,-62}, -{36,24,-61}, -{36,24,-60}, -{36,24,-59}, -{36,24,-58}, -{36,24,-57}, -{36,24,-56}, -{36,24,-55}, -{36,24,-54}, -{36,24,-53}, -{36,24,-52}, -{36,24,-51}, -{36,24,-50}, -{36,24,-49}, -{36,24,-48}, -{36,24,-47}, -{36,24,-46}, -{36,24,-45}, -{36,24,-44}, -{36,24,-43}, -{36,24,-42}, -{36,24,-41}, -{36,24,-40}, -{36,24,-39}, -{36,24,-38}, -{36,24,-37}, -{36,24,-36}, -{36,24,-35}, -{36,24,-34}, -{36,24,-33}, -{36,24,-32}, -{36,24,-31}, -{36,24,-30}, -{36,24,-29}, -{36,24,-28}, -{36,24,-27}, -{36,24,-26}, -{36,24,-25}, -{36,24,-24}, -{36,24,-23}, -{36,24,-22}, -{36,24,-21}, -{36,24,-20}, -{36,24,-19}, -{36,24,-18}, -{36,24,-17}, -{36,24,-16}, -{36,24,-15}, -{36,24,-14}, -{36,24,-13}, -{36,24,-12}, -{36,24,-11}, -{36,24,-10}, -{36,24,-9}, -{36,24,-8}, -{36,24,-7}, -{36,24,-6}, -{36,24,-5}, -{36,24,-4}, -{36,24,-3}, -{36,24,-2}, -{36,24,-1}, -{36,24,0}, -{36,24,1}, -{36,24,2}, -{36,24,3}, -{36,24,4}, -{36,24,5}, -{36,24,6}, -{36,24,7}, -{36,24,8}, -{36,24,9}, -{36,24,10}, -{36,24,11}, -{36,24,12}, -{36,24,13}, -{36,24,14}, -{36,24,15}, -{36,24,16}, -{36,24,17}, -{36,24,18}, -{36,24,19}, -{36,24,20}, -{36,24,21}, -{36,24,22}, -{36,24,23}, -{36,24,24}, -{36,24,25}, -{36,24,26}, -{36,24,27}, -{36,24,28}, -{36,24,29}, -{36,24,30}, -{36,24,31}, -{36,24,32}, -{36,24,33}, -{36,24,34}, -{36,24,35}, -{36,24,36}, -{36,24,37}, -{36,24,38}, -{36,24,39}, -{36,24,40}, -{36,24,41}, -{36,24,42}, -{36,24,43}, -{36,24,44}, -{36,24,45}, -{36,24,46}, -{36,25,-63}, -{36,25,-62}, -{36,25,-61}, -{36,25,-60}, -{36,25,-59}, -{36,25,-58}, -{36,25,-57}, -{36,25,-56}, -{36,25,-55}, -{36,25,-54}, -{36,25,-53}, -{36,25,-52}, -{36,25,-51}, -{36,25,-50}, -{36,25,-49}, -{36,25,-48}, -{36,25,-47}, -{36,25,-46}, -{36,25,-45}, -{36,25,-44}, -{36,25,-43}, -{36,25,-42}, -{36,25,-41}, -{36,25,-40}, -{36,25,-39}, -{36,25,-38}, -{36,25,-37}, -{36,25,-36}, -{36,25,-35}, -{36,25,-34}, -{36,25,-33}, -{36,25,-32}, -{36,25,-31}, -{36,25,-30}, -{36,25,-29}, -{36,25,-28}, -{36,25,-27}, -{36,25,-26}, -{36,25,-25}, -{36,25,-24}, -{36,25,-23}, -{36,25,-22}, -{36,25,-21}, -{36,25,-20}, -{36,25,-19}, -{36,25,-18}, -{36,25,-17}, -{36,25,-16}, -{36,25,-15}, -{36,25,-14}, -{36,25,-13}, -{36,25,-12}, -{36,25,-11}, -{36,25,-10}, -{36,25,-9}, -{36,25,-8}, -{36,25,-7}, -{36,25,-6}, -{36,25,-5}, -{36,25,-4}, -{36,25,-3}, -{36,25,-2}, -{36,25,-1}, -{36,25,0}, -{36,25,1}, -{36,25,2}, -{36,25,3}, -{36,25,4}, -{36,25,5}, -{36,25,6}, -{36,25,7}, -{36,25,8}, -{36,25,9}, -{36,25,10}, -{36,25,11}, -{36,25,12}, -{36,25,13}, -{36,25,14}, -{36,25,15}, -{36,25,16}, -{36,25,17}, -{36,25,18}, -{36,25,19}, -{36,25,20}, -{36,25,21}, -{36,25,22}, -{36,25,23}, -{36,25,24}, -{36,25,25}, -{36,25,26}, -{36,25,27}, -{36,25,28}, -{36,25,29}, -{36,25,30}, -{36,25,31}, -{36,25,32}, -{36,25,33}, -{36,25,34}, -{36,25,35}, -{36,25,36}, -{36,25,37}, -{36,25,38}, -{36,25,39}, -{36,25,40}, -{36,25,41}, -{36,25,42}, -{36,25,43}, -{36,25,44}, -{36,25,45}, -{36,25,46}, -{36,26,-64}, -{36,26,-63}, -{36,26,-62}, -{36,26,-61}, -{36,26,-60}, -{36,26,-59}, -{36,26,-58}, -{36,26,-57}, -{36,26,-56}, -{36,26,-55}, -{36,26,-54}, -{36,26,-53}, -{36,26,-52}, -{36,26,-51}, -{36,26,-50}, -{36,26,-49}, -{36,26,-48}, -{36,26,-47}, -{36,26,-46}, -{36,26,-45}, -{36,26,-44}, -{36,26,-43}, -{36,26,-42}, -{36,26,-41}, -{36,26,-40}, -{36,26,-39}, -{36,26,-38}, -{36,26,-37}, -{36,26,-36}, -{36,26,-35}, -{36,26,-34}, -{36,26,-33}, -{36,26,-32}, -{36,26,-31}, -{36,26,-30}, -{36,26,-29}, -{36,26,-28}, -{36,26,-27}, -{36,26,-26}, -{36,26,-25}, -{36,26,-24}, -{36,26,-23}, -{36,26,-22}, -{36,26,-21}, -{36,26,-20}, -{36,26,-19}, -{36,26,-18}, -{36,26,-17}, -{36,26,-16}, -{36,26,-15}, -{36,26,-14}, -{36,26,-13}, -{36,26,-12}, -{36,26,-11}, -{36,26,-10}, -{36,26,-9}, -{36,26,-8}, -{36,26,-7}, -{36,26,-6}, -{36,26,-5}, -{36,26,-4}, -{36,26,-3}, -{36,26,-2}, -{36,26,-1}, -{36,26,0}, -{36,26,1}, -{36,26,2}, -{36,26,3}, -{36,26,4}, -{36,26,5}, -{36,26,6}, -{36,26,7}, -{36,26,8}, -{36,26,9}, -{36,26,10}, -{36,26,11}, -{36,26,12}, -{36,26,13}, -{36,26,14}, -{36,26,15}, -{36,26,16}, -{36,26,17}, -{36,26,18}, -{36,26,19}, -{36,26,20}, -{36,26,21}, -{36,26,22}, -{36,26,23}, -{36,26,24}, -{36,26,25}, -{36,26,26}, -{36,26,27}, -{36,26,28}, -{36,26,29}, -{36,26,30}, -{36,26,31}, -{36,26,32}, -{36,26,33}, -{36,26,34}, -{36,26,35}, -{36,26,36}, -{36,26,37}, -{36,26,38}, -{36,26,39}, -{36,26,40}, -{36,26,41}, -{36,26,42}, -{36,26,43}, -{36,26,44}, -{36,26,45}, -{36,26,46}, -{36,27,-65}, -{36,27,-64}, -{36,27,-63}, -{36,27,-62}, -{36,27,-61}, -{36,27,-60}, -{36,27,-59}, -{36,27,-58}, -{36,27,-57}, -{36,27,-56}, -{36,27,-55}, -{36,27,-54}, -{36,27,-53}, -{36,27,-52}, -{36,27,-51}, -{36,27,-50}, -{36,27,-49}, -{36,27,-48}, -{36,27,-47}, -{36,27,-46}, -{36,27,-45}, -{36,27,-44}, -{36,27,-43}, -{36,27,-42}, -{36,27,-41}, -{36,27,-40}, -{36,27,-39}, -{36,27,-38}, -{36,27,-37}, -{36,27,-36}, -{36,27,-35}, -{36,27,-34}, -{36,27,-33}, -{36,27,-32}, -{36,27,-31}, -{36,27,-30}, -{36,27,-29}, -{36,27,-28}, -{36,27,-27}, -{36,27,-26}, -{36,27,-25}, -{36,27,-24}, -{36,27,-23}, -{36,27,-22}, -{36,27,-21}, -{36,27,-20}, -{36,27,-19}, -{36,27,-18}, -{36,27,-17}, -{36,27,-16}, -{36,27,-15}, -{36,27,-14}, -{36,27,-13}, -{36,27,-12}, -{36,27,-11}, -{36,27,-10}, -{36,27,-9}, -{36,27,-8}, -{36,27,-7}, -{36,27,-6}, -{36,27,-5}, -{36,27,-4}, -{36,27,-3}, -{36,27,-2}, -{36,27,-1}, -{36,27,0}, -{36,27,1}, -{36,27,2}, -{36,27,3}, -{36,27,4}, -{36,27,5}, -{36,27,6}, -{36,27,7}, -{36,27,8}, -{36,27,9}, -{36,27,10}, -{36,27,11}, -{36,27,12}, -{36,27,13}, -{36,27,14}, -{36,27,15}, -{36,27,16}, -{36,27,17}, -{36,27,18}, -{36,27,19}, -{36,27,20}, -{36,27,21}, -{36,27,22}, -{36,27,23}, -{36,27,24}, -{36,27,25}, -{36,27,26}, -{36,27,27}, -{36,27,28}, -{36,27,29}, -{36,27,30}, -{36,27,31}, -{36,27,32}, -{36,27,33}, -{36,27,34}, -{36,27,35}, -{36,27,36}, -{36,27,37}, -{36,27,38}, -{36,27,39}, -{36,27,40}, -{36,27,41}, -{36,27,42}, -{36,27,43}, -{36,27,44}, -{36,27,45}, -{36,27,46}, -{36,28,-66}, -{36,28,-65}, -{36,28,-64}, -{36,28,-63}, -{36,28,-62}, -{36,28,-61}, -{36,28,-60}, -{36,28,-59}, -{36,28,-58}, -{36,28,-57}, -{36,28,-56}, -{36,28,-55}, -{36,28,-54}, -{36,28,-53}, -{36,28,-52}, -{36,28,-51}, -{36,28,-50}, -{36,28,-49}, -{36,28,-48}, -{36,28,-47}, -{36,28,-46}, -{36,28,-45}, -{36,28,-44}, -{36,28,-43}, -{36,28,-42}, -{36,28,-41}, -{36,28,-40}, -{36,28,-39}, -{36,28,-38}, -{36,28,-37}, -{36,28,-36}, -{36,28,-35}, -{36,28,-34}, -{36,28,-33}, -{36,28,-32}, -{36,28,-31}, -{36,28,-30}, -{36,28,-29}, -{36,28,-28}, -{36,28,-27}, -{36,28,-26}, -{36,28,-25}, -{36,28,-24}, -{36,28,-23}, -{36,28,-22}, -{36,28,-21}, -{36,28,-20}, -{36,28,-19}, -{36,28,-18}, -{36,28,-17}, -{36,28,-16}, -{36,28,-15}, -{36,28,-14}, -{36,28,-13}, -{36,28,-12}, -{36,28,-11}, -{36,28,-10}, -{36,28,-9}, -{36,28,-8}, -{36,28,-7}, -{36,28,-6}, -{36,28,-5}, -{36,28,-4}, -{36,28,-3}, -{36,28,-2}, -{36,28,-1}, -{36,28,0}, -{36,28,1}, -{36,28,2}, -{36,28,3}, -{36,28,4}, -{36,28,5}, -{36,28,6}, -{36,28,7}, -{36,28,8}, -{36,28,9}, -{36,28,10}, -{36,28,11}, -{36,28,12}, -{36,28,13}, -{36,28,14}, -{36,28,15}, -{36,28,16}, -{36,28,17}, -{36,28,18}, -{36,28,19}, -{36,28,20}, -{36,28,21}, -{36,28,22}, -{36,28,23}, -{36,28,24}, -{36,28,25}, -{36,28,26}, -{36,28,27}, -{36,28,28}, -{36,28,29}, -{36,28,30}, -{36,28,31}, -{36,28,32}, -{36,28,33}, -{36,28,34}, -{36,28,35}, -{36,28,36}, -{36,28,37}, -{36,28,38}, -{36,28,39}, -{36,28,40}, -{36,28,41}, -{36,28,42}, -{36,28,43}, -{36,28,44}, -{36,28,45}, -{36,28,46}, -{36,29,-67}, -{36,29,-66}, -{36,29,-65}, -{36,29,-64}, -{36,29,-63}, -{36,29,-62}, -{36,29,-61}, -{36,29,-60}, -{36,29,-59}, -{36,29,-58}, -{36,29,-57}, -{36,29,-56}, -{36,29,-55}, -{36,29,-54}, -{36,29,-53}, -{36,29,-52}, -{36,29,-51}, -{36,29,-50}, -{36,29,-49}, -{36,29,-48}, -{36,29,-47}, -{36,29,-46}, -{36,29,-45}, -{36,29,-44}, -{36,29,-43}, -{36,29,-42}, -{36,29,-41}, -{36,29,-40}, -{36,29,-39}, -{36,29,-38}, -{36,29,-37}, -{36,29,-36}, -{36,29,-35}, -{36,29,-34}, -{36,29,-33}, -{36,29,-32}, -{36,29,-31}, -{36,29,-30}, -{36,29,-29}, -{36,29,-28}, -{36,29,-27}, -{36,29,-26}, -{36,29,-25}, -{36,29,-24}, -{36,29,-23}, -{36,29,-22}, -{36,29,-21}, -{36,29,-20}, -{36,29,-19}, -{36,29,-18}, -{36,29,-17}, -{36,29,-16}, -{36,29,-15}, -{36,29,-14}, -{36,29,-13}, -{36,29,-12}, -{36,29,-11}, -{36,29,-10}, -{36,29,-9}, -{36,29,-8}, -{36,29,-7}, -{36,29,-6}, -{36,29,-5}, -{36,29,-4}, -{36,29,-3}, -{36,29,-2}, -{36,29,-1}, -{36,29,0}, -{36,29,1}, -{36,29,2}, -{36,29,3}, -{36,29,4}, -{36,29,5}, -{36,29,6}, -{36,29,7}, -{36,29,8}, -{36,29,9}, -{36,29,10}, -{36,29,11}, -{36,29,12}, -{36,29,13}, -{36,29,14}, -{36,29,15}, -{36,29,16}, -{36,29,17}, -{36,29,18}, -{36,29,19}, -{36,29,20}, -{36,29,21}, -{36,29,22}, -{36,29,23}, -{36,29,24}, -{36,29,25}, -{36,29,26}, -{36,29,27}, -{36,29,28}, -{36,29,29}, -{36,29,30}, -{36,29,31}, -{36,29,32}, -{36,29,33}, -{36,29,34}, -{36,29,35}, -{36,29,36}, -{36,29,37}, -{36,29,38}, -{36,29,39}, -{36,29,40}, -{36,29,41}, -{36,29,42}, -{36,29,43}, -{36,29,44}, -{36,29,45}, -{36,29,46}, -{36,30,-68}, -{36,30,-67}, -{36,30,-66}, -{36,30,-65}, -{36,30,-64}, -{36,30,-63}, -{36,30,-62}, -{36,30,-61}, -{36,30,-60}, -{36,30,-59}, -{36,30,-58}, -{36,30,-57}, -{36,30,-56}, -{36,30,-55}, -{36,30,-54}, -{36,30,-53}, -{36,30,-52}, -{36,30,-51}, -{36,30,-50}, -{36,30,-49}, -{36,30,-48}, -{36,30,-47}, -{36,30,-46}, -{36,30,-45}, -{36,30,-44}, -{36,30,-43}, -{36,30,-42}, -{36,30,-41}, -{36,30,-40}, -{36,30,-39}, -{36,30,-38}, -{36,30,-37}, -{36,30,-36}, -{36,30,-35}, -{36,30,-34}, -{36,30,-33}, -{36,30,-32}, -{36,30,-31}, -{36,30,-30}, -{36,30,-29}, -{36,30,-28}, -{36,30,-27}, -{36,30,-26}, -{36,30,-25}, -{36,30,-24}, -{36,30,-23}, -{36,30,-22}, -{36,30,-21}, -{36,30,-20}, -{36,30,-19}, -{36,30,-18}, -{36,30,-17}, -{36,30,-16}, -{36,30,-15}, -{36,30,-14}, -{36,30,-13}, -{36,30,-12}, -{36,30,-11}, -{36,30,-10}, -{36,30,-9}, -{36,30,-8}, -{36,30,-7}, -{36,30,-6}, -{36,30,-5}, -{36,30,-4}, -{36,30,-3}, -{36,30,-2}, -{36,30,-1}, -{36,30,0}, -{36,30,1}, -{36,30,2}, -{36,30,3}, -{36,30,4}, -{36,30,5}, -{36,30,6}, -{36,30,7}, -{36,30,8}, -{36,30,9}, -{36,30,10}, -{36,30,11}, -{36,30,12}, -{36,30,13}, -{36,30,14}, -{36,30,15}, -{36,30,16}, -{36,30,17}, -{36,30,18}, -{36,30,19}, -{36,30,20}, -{36,30,21}, -{36,30,22}, -{36,30,23}, -{36,30,24}, -{36,30,25}, -{36,30,26}, -{36,30,27}, -{36,30,28}, -{36,30,29}, -{36,30,30}, -{36,30,31}, -{36,30,32}, -{36,30,33}, -{36,30,34}, -{36,30,35}, -{36,30,36}, -{36,30,37}, -{36,30,38}, -{36,30,39}, -{36,30,40}, -{36,30,41}, -{36,30,42}, -{36,30,43}, -{36,30,44}, -{36,30,45}, -{36,30,46}, -{36,31,-69}, -{36,31,-68}, -{36,31,-67}, -{36,31,-66}, -{36,31,-65}, -{36,31,-64}, -{36,31,-63}, -{36,31,-62}, -{36,31,-61}, -{36,31,-60}, -{36,31,-59}, -{36,31,-58}, -{36,31,-57}, -{36,31,-56}, -{36,31,-55}, -{36,31,-54}, -{36,31,-53}, -{36,31,-52}, -{36,31,-51}, -{36,31,-50}, -{36,31,-49}, -{36,31,-48}, -{36,31,-47}, -{36,31,-46}, -{36,31,-45}, -{36,31,-44}, -{36,31,-43}, -{36,31,-42}, -{36,31,-41}, -{36,31,-40}, -{36,31,-39}, -{36,31,-38}, -{36,31,-37}, -{36,31,-36}, -{36,31,-35}, -{36,31,-34}, -{36,31,-33}, -{36,31,-32}, -{36,31,-31}, -{36,31,-30}, -{36,31,-29}, -{36,31,-28}, -{36,31,-27}, -{36,31,-26}, -{36,31,-25}, -{36,31,-24}, -{36,31,-23}, -{36,31,-22}, -{36,31,-21}, -{36,31,-20}, -{36,31,-19}, -{36,31,-18}, -{36,31,-17}, -{36,31,-16}, -{36,31,-15}, -{36,31,-14}, -{36,31,-13}, -{36,31,-12}, -{36,31,-11}, -{36,31,-10}, -{36,31,-9}, -{36,31,-8}, -{36,31,-7}, -{36,31,-6}, -{36,31,-5}, -{36,31,-4}, -{36,31,-3}, -{36,31,-2}, -{36,31,-1}, -{36,31,0}, -{36,31,1}, -{36,31,2}, -{36,31,3}, -{36,31,4}, -{36,31,5}, -{36,31,6}, -{36,31,7}, -{36,31,8}, -{36,31,9}, -{36,31,10}, -{36,31,11}, -{36,31,12}, -{36,31,13}, -{36,31,14}, -{36,31,15}, -{36,31,16}, -{36,31,17}, -{36,31,18}, -{36,31,19}, -{36,31,20}, -{36,31,21}, -{36,31,22}, -{36,31,23}, -{36,31,24}, -{36,31,25}, -{36,31,26}, -{36,31,27}, -{36,31,28}, -{36,31,29}, -{36,31,30}, -{36,31,31}, -{36,31,32}, -{36,31,33}, -{36,31,34}, -{36,31,35}, -{36,31,36}, -{36,31,37}, -{36,31,38}, -{36,31,39}, -{36,31,40}, -{36,31,41}, -{36,31,42}, -{36,31,43}, -{36,31,44}, -{36,31,45}, -{36,31,46}, -{36,32,-70}, -{36,32,-69}, -{36,32,-68}, -{36,32,-67}, -{36,32,-66}, -{36,32,-65}, -{36,32,-64}, -{36,32,-63}, -{36,32,-62}, -{36,32,-61}, -{36,32,-60}, -{36,32,-59}, -{36,32,-58}, -{36,32,-57}, -{36,32,-56}, -{36,32,-55}, -{36,32,-54}, -{36,32,-53}, -{36,32,-52}, -{36,32,-51}, -{36,32,-50}, -{36,32,-49}, -{36,32,-48}, -{36,32,-47}, -{36,32,-46}, -{36,32,-45}, -{36,32,-44}, -{36,32,-43}, -{36,32,-42}, -{36,32,-41}, -{36,32,-40}, -{36,32,-39}, -{36,32,-38}, -{36,32,-37}, -{36,32,-36}, -{36,32,-35}, -{36,32,-34}, -{36,32,-33}, -{36,32,-32}, -{36,32,-31}, -{36,32,-30}, -{36,32,-29}, -{36,32,-28}, -{36,32,-27}, -{36,32,-26}, -{36,32,-25}, -{36,32,-24}, -{36,32,-23}, -{36,32,-22}, -{36,32,-21}, -{36,32,-20}, -{36,32,-19}, -{36,32,-18}, -{36,32,-17}, -{36,32,-16}, -{36,32,-15}, -{36,32,-14}, -{36,32,-13}, -{36,32,-12}, -{36,32,-11}, -{36,32,-10}, -{36,32,-9}, -{36,32,-8}, -{36,32,-7}, -{36,32,-6}, -{36,32,-5}, -{36,32,-4}, -{36,32,-3}, -{36,32,-2}, -{36,32,-1}, -{36,32,0}, -{36,32,1}, -{36,32,2}, -{36,32,3}, -{36,32,4}, -{36,32,5}, -{36,32,6}, -{36,32,7}, -{36,32,8}, -{36,32,9}, -{36,32,10}, -{36,32,11}, -{36,32,12}, -{36,32,13}, -{36,32,14}, -{36,32,15}, -{36,32,16}, -{36,32,17}, -{36,32,18}, -{36,32,19}, -{36,32,20}, -{36,32,21}, -{36,32,22}, -{36,32,23}, -{36,32,24}, -{36,32,25}, -{36,32,26}, -{36,32,27}, -{36,32,28}, -{36,32,29}, -{36,32,30}, -{36,32,31}, -{36,32,32}, -{36,32,33}, -{36,32,34}, -{36,32,35}, -{36,32,36}, -{36,32,37}, -{36,32,38}, -{36,32,39}, -{36,32,40}, -{36,32,41}, -{36,32,42}, -{36,32,43}, -{36,32,44}, -{36,32,45}, -{36,32,46}, -{36,32,47}, -{36,33,-71}, -{36,33,-70}, -{36,33,-69}, -{36,33,-68}, -{36,33,-67}, -{36,33,-66}, -{36,33,-65}, -{36,33,-64}, -{36,33,-63}, -{36,33,-62}, -{36,33,-61}, -{36,33,-60}, -{36,33,-59}, -{36,33,-58}, -{36,33,-57}, -{36,33,-56}, -{36,33,-55}, -{36,33,-54}, -{36,33,-53}, -{36,33,-52}, -{36,33,-51}, -{36,33,-50}, -{36,33,-49}, -{36,33,-48}, -{36,33,-47}, -{36,33,-46}, -{36,33,-45}, -{36,33,-44}, -{36,33,-43}, -{36,33,-42}, -{36,33,-41}, -{36,33,-40}, -{36,33,-39}, -{36,33,-38}, -{36,33,-37}, -{36,33,-36}, -{36,33,-35}, -{36,33,-34}, -{36,33,-33}, -{36,33,-32}, -{36,33,-31}, -{36,33,-30}, -{36,33,-29}, -{36,33,-28}, -{36,33,-27}, -{36,33,-26}, -{36,33,-25}, -{36,33,-24}, -{36,33,-23}, -{36,33,-22}, -{36,33,-21}, -{36,33,-20}, -{36,33,-19}, -{36,33,-18}, -{36,33,-17}, -{36,33,-16}, -{36,33,-15}, -{36,33,-14}, -{36,33,-13}, -{36,33,-12}, -{36,33,-11}, -{36,33,-10}, -{36,33,-9}, -{36,33,-8}, -{36,33,-7}, -{36,33,-6}, -{36,33,-5}, -{36,33,-4}, -{36,33,-3}, -{36,33,-2}, -{36,33,-1}, -{36,33,0}, -{36,33,1}, -{36,33,2}, -{36,33,3}, -{36,33,4}, -{36,33,5}, -{36,33,6}, -{36,33,7}, -{36,33,8}, -{36,33,9}, -{36,33,10}, -{36,33,11}, -{36,33,12}, -{36,33,13}, -{36,33,14}, -{36,33,15}, -{36,33,16}, -{36,33,17}, -{36,33,18}, -{36,33,19}, -{36,33,20}, -{36,33,21}, -{36,33,22}, -{36,33,23}, -{36,33,24}, -{36,33,25}, -{36,33,26}, -{36,33,27}, -{36,33,28}, -{36,33,29}, -{36,33,30}, -{36,33,31}, -{36,33,32}, -{36,33,33}, -{36,33,34}, -{36,33,35}, -{36,33,36}, -{36,33,37}, -{36,33,38}, -{36,33,39}, -{36,33,40}, -{36,33,41}, -{36,33,42}, -{36,33,43}, -{36,33,44}, -{36,33,45}, -{36,33,46}, -{36,33,47}, -{36,34,-71}, -{36,34,-70}, -{36,34,-69}, -{36,34,-68}, -{36,34,-67}, -{36,34,-66}, -{36,34,-65}, -{36,34,-64}, -{36,34,-63}, -{36,34,-62}, -{36,34,-61}, -{36,34,-60}, -{36,34,-59}, -{36,34,-58}, -{36,34,-57}, -{36,34,-56}, -{36,34,-55}, -{36,34,-54}, -{36,34,-53}, -{36,34,-52}, -{36,34,-51}, -{36,34,-50}, -{36,34,-49}, -{36,34,-48}, -{36,34,-47}, -{36,34,-46}, -{36,34,-45}, -{36,34,-44}, -{36,34,-43}, -{36,34,-42}, -{36,34,-41}, -{36,34,-40}, -{36,34,-39}, -{36,34,-38}, -{36,34,-37}, -{36,34,-36}, -{36,34,-35}, -{36,34,-34}, -{36,34,-33}, -{36,34,-32}, -{36,34,-31}, -{36,34,-30}, -{36,34,-29}, -{36,34,-28}, -{36,34,-27}, -{36,34,-26}, -{36,34,-25}, -{36,34,-24}, -{36,34,-23}, -{36,34,-22}, -{36,34,-21}, -{36,34,-20}, -{36,34,-19}, -{36,34,-18}, -{36,34,-17}, -{36,34,-16}, -{36,34,-15}, -{36,34,-14}, -{36,34,-13}, -{36,34,-12}, -{36,34,-11}, -{36,34,-10}, -{36,34,-9}, -{36,34,-8}, -{36,34,-7}, -{36,34,-6}, -{36,34,-5}, -{36,34,-4}, -{36,34,-3}, -{36,34,-2}, -{36,34,-1}, -{36,34,0}, -{36,34,1}, -{36,34,2}, -{36,34,3}, -{36,34,4}, -{36,34,5}, -{36,34,6}, -{36,34,7}, -{36,34,8}, -{36,34,9}, -{36,34,10}, -{36,34,11}, -{36,34,12}, -{36,34,13}, -{36,34,14}, -{36,34,15}, -{36,34,16}, -{36,34,17}, -{36,34,18}, -{36,34,19}, -{36,34,20}, -{36,34,21}, -{36,34,22}, -{36,34,23}, -{36,34,24}, -{36,34,25}, -{36,34,26}, -{36,34,27}, -{36,34,28}, -{36,34,29}, -{36,34,30}, -{36,34,31}, -{36,34,32}, -{36,34,33}, -{36,34,34}, -{36,34,35}, -{36,34,36}, -{36,34,37}, -{36,34,38}, -{36,34,39}, -{36,34,40}, -{36,34,41}, -{36,34,42}, -{36,34,43}, -{36,34,44}, -{36,34,45}, -{36,34,46}, -{36,34,47}, -{36,35,-72}, -{36,35,-71}, -{36,35,-70}, -{36,35,-69}, -{36,35,-68}, -{36,35,-67}, -{36,35,-66}, -{36,35,-65}, -{36,35,-64}, -{36,35,-63}, -{36,35,-62}, -{36,35,-61}, -{36,35,-60}, -{36,35,-59}, -{36,35,-58}, -{36,35,-57}, -{36,35,-56}, -{36,35,-55}, -{36,35,-54}, -{36,35,-53}, -{36,35,-52}, -{36,35,-51}, -{36,35,-50}, -{36,35,-49}, -{36,35,-48}, -{36,35,-47}, -{36,35,-46}, -{36,35,-45}, -{36,35,-44}, -{36,35,-43}, -{36,35,-42}, -{36,35,-41}, -{36,35,-40}, -{36,35,-39}, -{36,35,-38}, -{36,35,-37}, -{36,35,-36}, -{36,35,-35}, -{36,35,-34}, -{36,35,-33}, -{36,35,-32}, -{36,35,-31}, -{36,35,-30}, -{36,35,-29}, -{36,35,-28}, -{36,35,-27}, -{36,35,-26}, -{36,35,-25}, -{36,35,-24}, -{36,35,-23}, -{36,35,-22}, -{36,35,-21}, -{36,35,-20}, -{36,35,-19}, -{36,35,-18}, -{36,35,-17}, -{36,35,-16}, -{36,35,-15}, -{36,35,-14}, -{36,35,-13}, -{36,35,-12}, -{36,35,-11}, -{36,35,-10}, -{36,35,-9}, -{36,35,-8}, -{36,35,-7}, -{36,35,-6}, -{36,35,-5}, -{36,35,-4}, -{36,35,-3}, -{36,35,-2}, -{36,35,-1}, -{36,35,0}, -{36,35,1}, -{36,35,2}, -{36,35,3}, -{36,35,4}, -{36,35,5}, -{36,35,6}, -{36,35,7}, -{36,35,8}, -{36,35,9}, -{36,35,10}, -{36,35,11}, -{36,35,12}, -{36,35,13}, -{36,35,14}, -{36,35,15}, -{36,35,16}, -{36,35,17}, -{36,35,18}, -{36,35,19}, -{36,35,20}, -{36,35,21}, -{36,35,22}, -{36,35,23}, -{36,35,24}, -{36,35,25}, -{36,35,26}, -{36,35,27}, -{36,35,28}, -{36,35,29}, -{36,35,30}, -{36,35,31}, -{36,35,32}, -{36,35,33}, -{36,35,34}, -{36,35,35}, -{36,35,36}, -{36,35,37}, -{36,35,38}, -{36,35,39}, -{36,35,40}, -{36,35,41}, -{36,35,42}, -{36,35,43}, -{36,35,44}, -{36,35,45}, -{36,35,46}, -{36,35,47}, -{36,36,-73}, -{36,36,-72}, -{36,36,-71}, -{36,36,-70}, -{36,36,-69}, -{36,36,-68}, -{36,36,-67}, -{36,36,-66}, -{36,36,-65}, -{36,36,-64}, -{36,36,-63}, -{36,36,-62}, -{36,36,-61}, -{36,36,-60}, -{36,36,-59}, -{36,36,-58}, -{36,36,-57}, -{36,36,-56}, -{36,36,-55}, -{36,36,-54}, -{36,36,-53}, -{36,36,-52}, -{36,36,-51}, -{36,36,-50}, -{36,36,-49}, -{36,36,-48}, -{36,36,-47}, -{36,36,-46}, -{36,36,-45}, -{36,36,-44}, -{36,36,-43}, -{36,36,-42}, -{36,36,-41}, -{36,36,-40}, -{36,36,-39}, -{36,36,-38}, -{36,36,-37}, -{36,36,-36}, -{36,36,-35}, -{36,36,-34}, -{36,36,-33}, -{36,36,-32}, -{36,36,-31}, -{36,36,-30}, -{36,36,-29}, -{36,36,-28}, -{36,36,-27}, -{36,36,-26}, -{36,36,-25}, -{36,36,-24}, -{36,36,-23}, -{36,36,-22}, -{36,36,-21}, -{36,36,-20}, -{36,36,-19}, -{36,36,-18}, -{36,36,-17}, -{36,36,-16}, -{36,36,-15}, -{36,36,-14}, -{36,36,-13}, -{36,36,-12}, -{36,36,-11}, -{36,36,-10}, -{36,36,-9}, -{36,36,-8}, -{36,36,-7}, -{36,36,-6}, -{36,36,-5}, -{36,36,-4}, -{36,36,-3}, -{36,36,-2}, -{36,36,-1}, -{36,36,0}, -{36,36,1}, -{36,36,2}, -{36,36,3}, -{36,36,4}, -{36,36,5}, -{36,36,6}, -{36,36,7}, -{36,36,8}, -{36,36,9}, -{36,36,10}, -{36,36,11}, -{36,36,12}, -{36,36,13}, -{36,36,14}, -{36,36,15}, -{36,36,16}, -{36,36,17}, -{36,36,18}, -{36,36,19}, -{36,36,20}, -{36,36,21}, -{36,36,22}, -{36,36,23}, -{36,36,24}, -{36,36,25}, -{36,36,26}, -{36,36,27}, -{36,36,28}, -{36,36,29}, -{36,36,30}, -{36,36,31}, -{36,36,32}, -{36,36,33}, -{36,36,34}, -{36,36,35}, -{36,36,36}, -{36,36,37}, -{36,36,38}, -{36,36,39}, -{36,36,40}, -{36,36,41}, -{36,36,42}, -{36,36,43}, -{36,36,44}, -{36,36,45}, -{36,36,46}, -{36,36,47}, -{36,37,-74}, -{36,37,-73}, -{36,37,-72}, -{36,37,-71}, -{36,37,-70}, -{36,37,-69}, -{36,37,-68}, -{36,37,-67}, -{36,37,-66}, -{36,37,-65}, -{36,37,-64}, -{36,37,-63}, -{36,37,-62}, -{36,37,-61}, -{36,37,-60}, -{36,37,-59}, -{36,37,-58}, -{36,37,-57}, -{36,37,-56}, -{36,37,-55}, -{36,37,-54}, -{36,37,-53}, -{36,37,-52}, -{36,37,-51}, -{36,37,-50}, -{36,37,-49}, -{36,37,-48}, -{36,37,-47}, -{36,37,-46}, -{36,37,-45}, -{36,37,-44}, -{36,37,-43}, -{36,37,-42}, -{36,37,-41}, -{36,37,-40}, -{36,37,-39}, -{36,37,-38}, -{36,37,-37}, -{36,37,-36}, -{36,37,-35}, -{36,37,-34}, -{36,37,-33}, -{36,37,-32}, -{36,37,-31}, -{36,37,-30}, -{36,37,-29}, -{36,37,-28}, -{36,37,-27}, -{36,37,-26}, -{36,37,-25}, -{36,37,-24}, -{36,37,-23}, -{36,37,-22}, -{36,37,-21}, -{36,37,-20}, -{36,37,-19}, -{36,37,-18}, -{36,37,-17}, -{36,37,-16}, -{36,37,-15}, -{36,37,-14}, -{36,37,-13}, -{36,37,-12}, -{36,37,-11}, -{36,37,-10}, -{36,37,-9}, -{36,37,-8}, -{36,37,-7}, -{36,37,-6}, -{36,37,-5}, -{36,37,-4}, -{36,37,-3}, -{36,37,-2}, -{36,37,-1}, -{36,37,0}, -{36,37,1}, -{36,37,2}, -{36,37,3}, -{36,37,4}, -{36,37,5}, -{36,37,6}, -{36,37,7}, -{36,37,8}, -{36,37,9}, -{36,37,10}, -{36,37,11}, -{36,37,12}, -{36,37,13}, -{36,37,14}, -{36,37,15}, -{36,37,16}, -{36,37,17}, -{36,37,18}, -{36,37,19}, -{36,37,20}, -{36,37,21}, -{36,37,22}, -{36,37,23}, -{36,37,24}, -{36,37,25}, -{36,37,26}, -{36,37,27}, -{36,37,28}, -{36,37,29}, -{36,37,30}, -{36,37,31}, -{36,37,32}, -{36,37,33}, -{36,37,34}, -{36,37,35}, -{36,37,36}, -{36,37,37}, -{36,37,38}, -{36,37,39}, -{36,37,40}, -{36,37,41}, -{36,37,42}, -{36,37,43}, -{36,37,44}, -{36,37,45}, -{36,37,46}, -{36,37,47}, -{36,38,-75}, -{36,38,-74}, -{36,38,-73}, -{36,38,-72}, -{36,38,-71}, -{36,38,-70}, -{36,38,-69}, -{36,38,-68}, -{36,38,-67}, -{36,38,-66}, -{36,38,-65}, -{36,38,-64}, -{36,38,-63}, -{36,38,-62}, -{36,38,-61}, -{36,38,-60}, -{36,38,-59}, -{36,38,-58}, -{36,38,-57}, -{36,38,-56}, -{36,38,-55}, -{36,38,-54}, -{36,38,-53}, -{36,38,-52}, -{36,38,-51}, -{36,38,-50}, -{36,38,-49}, -{36,38,-48}, -{36,38,-47}, -{36,38,-46}, -{36,38,-45}, -{36,38,-44}, -{36,38,-43}, -{36,38,-42}, -{36,38,-41}, -{36,38,-40}, -{36,38,-39}, -{36,38,-38}, -{36,38,-37}, -{36,38,-36}, -{36,38,-35}, -{36,38,-34}, -{36,38,-33}, -{36,38,-32}, -{36,38,-31}, -{36,38,-30}, -{36,38,-29}, -{36,38,-28}, -{36,38,-27}, -{36,38,-26}, -{36,38,-25}, -{36,38,-24}, -{36,38,-23}, -{36,38,-22}, -{36,38,-21}, -{36,38,-20}, -{36,38,-19}, -{36,38,-18}, -{36,38,-17}, -{36,38,-16}, -{36,38,-15}, -{36,38,-14}, -{36,38,-13}, -{36,38,-12}, -{36,38,-11}, -{36,38,-10}, -{36,38,-9}, -{36,38,-8}, -{36,38,-7}, -{36,38,-6}, -{36,38,-5}, -{36,38,-4}, -{36,38,-3}, -{36,38,-2}, -{36,38,-1}, -{36,38,0}, -{36,38,1}, -{36,38,2}, -{36,38,3}, -{36,38,4}, -{36,38,5}, -{36,38,6}, -{36,38,7}, -{36,38,8}, -{36,38,9}, -{36,38,10}, -{36,38,11}, -{36,38,12}, -{36,38,13}, -{36,38,14}, -{36,38,15}, -{36,38,16}, -{36,38,17}, -{36,38,18}, -{36,38,19}, -{36,38,20}, -{36,38,21}, -{36,38,22}, -{36,38,23}, -{36,38,24}, -{36,38,25}, -{36,38,26}, -{36,38,27}, -{36,38,28}, -{36,38,29}, -{36,38,30}, -{36,38,31}, -{36,38,32}, -{36,38,33}, -{36,38,34}, -{36,38,35}, -{36,38,36}, -{36,38,37}, -{36,38,38}, -{36,38,39}, -{36,38,40}, -{36,38,41}, -{36,38,42}, -{36,38,43}, -{36,38,44}, -{36,38,45}, -{36,38,46}, -{36,38,47}, -{36,39,-76}, -{36,39,-75}, -{36,39,-74}, -{36,39,-73}, -{36,39,-72}, -{36,39,-71}, -{36,39,-70}, -{36,39,-69}, -{36,39,-68}, -{36,39,-67}, -{36,39,-66}, -{36,39,-65}, -{36,39,-64}, -{36,39,-63}, -{36,39,-62}, -{36,39,-61}, -{36,39,-60}, -{36,39,-59}, -{36,39,-58}, -{36,39,-57}, -{36,39,-56}, -{36,39,-55}, -{36,39,-54}, -{36,39,-53}, -{36,39,-52}, -{36,39,-51}, -{36,39,-50}, -{36,39,-49}, -{36,39,-48}, -{36,39,-47}, -{36,39,-46}, -{36,39,-45}, -{36,39,-44}, -{36,39,-43}, -{36,39,-42}, -{36,39,-41}, -{36,39,-40}, -{36,39,-39}, -{36,39,-38}, -{36,39,-37}, -{36,39,-36}, -{36,39,-35}, -{36,39,-34}, -{36,39,-33}, -{36,39,-32}, -{36,39,-31}, -{36,39,-30}, -{36,39,-29}, -{36,39,-28}, -{36,39,-27}, -{36,39,-26}, -{36,39,-25}, -{36,39,-24}, -{36,39,-23}, -{36,39,-22}, -{36,39,-21}, -{36,39,-20}, -{36,39,-19}, -{36,39,-18}, -{36,39,-17}, -{36,39,-16}, -{36,39,-15}, -{36,39,-14}, -{36,39,-13}, -{36,39,-12}, -{36,39,-11}, -{36,39,-10}, -{36,39,-9}, -{36,39,-8}, -{36,39,-7}, -{36,39,-6}, -{36,39,-5}, -{36,39,-4}, -{36,39,-3}, -{36,39,-2}, -{36,39,-1}, -{36,39,0}, -{36,39,1}, -{36,39,2}, -{36,39,3}, -{36,39,4}, -{36,39,5}, -{36,39,6}, -{36,39,7}, -{36,39,8}, -{36,39,9}, -{36,39,10}, -{36,39,11}, -{36,39,12}, -{36,39,13}, -{36,39,14}, -{36,39,15}, -{36,39,16}, -{36,39,17}, -{36,39,18}, -{36,39,19}, -{36,39,20}, -{36,39,21}, -{36,39,22}, -{36,39,23}, -{36,39,24}, -{36,39,25}, -{36,39,26}, -{36,39,27}, -{36,39,28}, -{36,39,29}, -{36,39,30}, -{36,39,31}, -{36,39,32}, -{36,39,33}, -{36,39,34}, -{36,39,35}, -{36,39,36}, -{36,39,37}, -{36,39,38}, -{36,39,39}, -{36,39,40}, -{36,39,41}, -{36,39,42}, -{36,39,43}, -{36,39,44}, -{36,39,45}, -{36,39,46}, -{36,39,47}, -{36,40,-77}, -{36,40,-76}, -{36,40,-75}, -{36,40,-74}, -{36,40,-73}, -{36,40,-72}, -{36,40,-71}, -{36,40,-70}, -{36,40,-69}, -{36,40,-68}, -{36,40,-67}, -{36,40,-66}, -{36,40,-65}, -{36,40,-64}, -{36,40,-63}, -{36,40,-62}, -{36,40,-61}, -{36,40,-60}, -{36,40,-59}, -{36,40,-58}, -{36,40,-57}, -{36,40,-56}, -{36,40,-55}, -{36,40,-54}, -{36,40,-53}, -{36,40,-52}, -{36,40,-51}, -{36,40,-50}, -{36,40,-49}, -{36,40,-48}, -{36,40,-47}, -{36,40,-46}, -{36,40,-45}, -{36,40,-44}, -{36,40,-43}, -{36,40,-42}, -{36,40,-41}, -{36,40,-40}, -{36,40,-39}, -{36,40,-38}, -{36,40,-37}, -{36,40,-36}, -{36,40,-35}, -{36,40,-34}, -{36,40,-33}, -{36,40,-32}, -{36,40,-31}, -{36,40,-30}, -{36,40,-29}, -{36,40,-28}, -{36,40,-27}, -{36,40,-26}, -{36,40,-25}, -{36,40,-24}, -{36,40,-23}, -{36,40,-22}, -{36,40,-21}, -{36,40,-20}, -{36,40,-19}, -{36,40,-18}, -{36,40,-17}, -{36,40,-16}, -{36,40,-15}, -{36,40,-14}, -{36,40,-13}, -{36,40,-12}, -{36,40,-11}, -{36,40,-10}, -{36,40,-9}, -{36,40,-8}, -{36,40,-7}, -{36,40,-6}, -{36,40,-5}, -{36,40,-4}, -{36,40,-3}, -{36,40,-2}, -{36,40,-1}, -{36,40,0}, -{36,40,1}, -{36,40,2}, -{36,40,3}, -{36,40,4}, -{36,40,5}, -{36,40,6}, -{36,40,7}, -{36,40,8}, -{36,40,9}, -{36,40,10}, -{36,40,11}, -{36,40,12}, -{36,40,13}, -{36,40,14}, -{36,40,15}, -{36,40,16}, -{36,40,17}, -{36,40,18}, -{36,40,19}, -{36,40,20}, -{36,40,21}, -{36,40,22}, -{36,40,23}, -{36,40,24}, -{36,40,25}, -{36,40,26}, -{36,40,27}, -{36,40,28}, -{36,40,29}, -{36,40,30}, -{36,40,31}, -{36,40,32}, -{36,40,33}, -{36,40,34}, -{36,40,35}, -{36,40,36}, -{36,40,37}, -{36,40,38}, -{36,40,39}, -{36,40,40}, -{36,40,41}, -{36,40,42}, -{36,40,43}, -{36,40,44}, -{36,40,45}, -{36,40,46}, -{36,40,47}, -{36,41,-78}, -{36,41,-77}, -{36,41,-76}, -{36,41,-75}, -{36,41,-74}, -{36,41,-73}, -{36,41,-72}, -{36,41,-71}, -{36,41,-70}, -{36,41,-69}, -{36,41,-68}, -{36,41,-67}, -{36,41,-66}, -{36,41,-65}, -{36,41,-64}, -{36,41,-63}, -{36,41,-62}, -{36,41,-61}, -{36,41,-60}, -{36,41,-59}, -{36,41,-58}, -{36,41,-57}, -{36,41,-56}, -{36,41,-55}, -{36,41,-54}, -{36,41,-53}, -{36,41,-52}, -{36,41,-51}, -{36,41,-50}, -{36,41,-49}, -{36,41,-48}, -{36,41,-47}, -{36,41,-46}, -{36,41,-45}, -{36,41,-44}, -{36,41,-43}, -{36,41,-42}, -{36,41,-41}, -{36,41,-40}, -{36,41,-39}, -{36,41,-38}, -{36,41,-37}, -{36,41,-36}, -{36,41,-35}, -{36,41,-34}, -{36,41,-33}, -{36,41,-32}, -{36,41,-31}, -{36,41,-30}, -{36,41,-29}, -{36,41,-28}, -{36,41,-27}, -{36,41,-26}, -{36,41,-25}, -{36,41,-24}, -{36,41,-23}, -{36,41,-22}, -{36,41,-21}, -{36,41,-20}, -{36,41,-19}, -{36,41,-18}, -{36,41,-17}, -{36,41,-16}, -{36,41,-15}, -{36,41,-14}, -{36,41,-13}, -{36,41,-12}, -{36,41,-11}, -{36,41,-10}, -{36,41,-9}, -{36,41,-8}, -{36,41,-7}, -{36,41,-6}, -{36,41,-5}, -{36,41,-4}, -{36,41,-3}, -{36,41,-2}, -{36,41,-1}, -{36,41,0}, -{36,41,1}, -{36,41,2}, -{36,41,3}, -{36,41,4}, -{36,41,5}, -{36,41,6}, -{36,41,7}, -{36,41,8}, -{36,41,9}, -{36,41,10}, -{36,41,11}, -{36,41,12}, -{36,41,13}, -{36,41,14}, -{36,41,15}, -{36,41,16}, -{36,41,17}, -{36,41,18}, -{36,41,19}, -{36,41,20}, -{36,41,21}, -{36,41,22}, -{36,41,23}, -{36,41,24}, -{36,41,25}, -{36,41,26}, -{36,41,27}, -{36,41,28}, -{36,41,29}, -{36,41,30}, -{36,41,31}, -{36,41,32}, -{36,41,33}, -{36,41,34}, -{36,41,35}, -{36,41,36}, -{36,41,37}, -{36,41,38}, -{36,41,39}, -{36,41,40}, -{36,41,41}, -{36,41,42}, -{36,41,43}, -{36,41,44}, -{36,41,45}, -{36,41,46}, -{36,41,47}, -{36,41,48}, -{36,42,-79}, -{36,42,-78}, -{36,42,-77}, -{36,42,-76}, -{36,42,-75}, -{36,42,-74}, -{36,42,-73}, -{36,42,-72}, -{36,42,-71}, -{36,42,-70}, -{36,42,-69}, -{36,42,-68}, -{36,42,-67}, -{36,42,-66}, -{36,42,-65}, -{36,42,-64}, -{36,42,-63}, -{36,42,-62}, -{36,42,-61}, -{36,42,-60}, -{36,42,-59}, -{36,42,-58}, -{36,42,-57}, -{36,42,-56}, -{36,42,-55}, -{36,42,-54}, -{36,42,-53}, -{36,42,-52}, -{36,42,-51}, -{36,42,-50}, -{36,42,-49}, -{36,42,-48}, -{36,42,-47}, -{36,42,-46}, -{36,42,-45}, -{36,42,-44}, -{36,42,-43}, -{36,42,-42}, -{36,42,-41}, -{36,42,-40}, -{36,42,-39}, -{36,42,-38}, -{36,42,-37}, -{36,42,-36}, -{36,42,-35}, -{36,42,-34}, -{36,42,-33}, -{36,42,-32}, -{36,42,-31}, -{36,42,-30}, -{36,42,-29}, -{36,42,-28}, -{36,42,-27}, -{36,42,-26}, -{36,42,-25}, -{36,42,-24}, -{36,42,-23}, -{36,42,-22}, -{36,42,-21}, -{36,42,-20}, -{36,42,-19}, -{36,42,-18}, -{36,42,-17}, -{36,42,-16}, -{36,42,-15}, -{36,42,-14}, -{36,42,-13}, -{36,42,-12}, -{36,42,-11}, -{36,42,-10}, -{36,42,-9}, -{36,42,-8}, -{36,42,-7}, -{36,42,-6}, -{36,42,-5}, -{36,42,-4}, -{36,42,-3}, -{36,42,-2}, -{36,42,-1}, -{36,42,0}, -{36,42,1}, -{36,42,2}, -{36,42,3}, -{36,42,4}, -{36,42,5}, -{36,42,6}, -{36,42,7}, -{36,42,8}, -{36,42,9}, -{36,42,10}, -{36,42,11}, -{36,42,12}, -{36,42,13}, -{36,42,14}, -{36,42,15}, -{36,42,16}, -{36,42,17}, -{36,42,18}, -{36,42,19}, -{36,42,20}, -{36,42,21}, -{36,42,22}, -{36,42,23}, -{36,42,24}, -{36,42,25}, -{36,42,26}, -{36,42,27}, -{36,42,28}, -{36,42,29}, -{36,42,30}, -{36,42,31}, -{36,42,32}, -{36,42,33}, -{36,42,34}, -{36,42,35}, -{36,42,36}, -{36,42,37}, -{36,42,38}, -{36,42,39}, -{36,42,40}, -{36,42,41}, -{36,42,42}, -{36,42,43}, -{36,42,44}, -{36,42,45}, -{36,42,46}, -{36,42,47}, -{36,42,48}, -{36,43,-80}, -{36,43,-79}, -{36,43,-78}, -{36,43,-77}, -{36,43,-76}, -{36,43,-75}, -{36,43,-74}, -{36,43,-73}, -{36,43,-72}, -{36,43,-71}, -{36,43,-70}, -{36,43,-69}, -{36,43,-68}, -{36,43,-67}, -{36,43,-66}, -{36,43,-65}, -{36,43,-64}, -{36,43,-63}, -{36,43,-62}, -{36,43,-61}, -{36,43,-60}, -{36,43,-59}, -{36,43,-58}, -{36,43,-57}, -{36,43,-56}, -{36,43,-55}, -{36,43,-54}, -{36,43,-53}, -{36,43,-52}, -{36,43,-51}, -{36,43,-50}, -{36,43,-49}, -{36,43,-48}, -{36,43,-47}, -{36,43,-46}, -{36,43,-45}, -{36,43,-44}, -{36,43,-43}, -{36,43,-42}, -{36,43,-41}, -{36,43,-40}, -{36,43,-39}, -{36,43,-38}, -{36,43,-37}, -{36,43,-36}, -{36,43,-35}, -{36,43,-34}, -{36,43,-33}, -{36,43,-32}, -{36,43,-31}, -{36,43,-30}, -{36,43,-29}, -{36,43,-28}, -{36,43,-27}, -{36,43,-26}, -{36,43,-25}, -{36,43,-24}, -{36,43,-23}, -{36,43,-22}, -{36,43,-21}, -{36,43,-20}, -{36,43,-19}, -{36,43,-18}, -{36,43,-17}, -{36,43,-16}, -{36,43,-15}, -{36,43,-14}, -{36,43,-13}, -{36,43,-12}, -{36,43,-11}, -{36,43,-10}, -{36,43,-9}, -{36,43,-8}, -{36,43,-7}, -{36,43,-6}, -{36,43,-5}, -{36,43,-4}, -{36,43,-3}, -{36,43,-2}, -{36,43,-1}, -{36,43,0}, -{36,43,1}, -{36,43,2}, -{36,43,3}, -{36,43,4}, -{36,43,5}, -{36,43,6}, -{36,43,7}, -{36,43,8}, -{36,43,9}, -{36,43,10}, -{36,43,11}, -{36,43,12}, -{36,43,13}, -{36,43,14}, -{36,43,15}, -{36,43,16}, -{36,43,17}, -{36,43,18}, -{36,43,19}, -{36,43,20}, -{36,43,21}, -{36,43,22}, -{36,43,23}, -{36,43,24}, -{36,43,25}, -{36,43,26}, -{36,43,27}, -{36,43,28}, -{36,43,29}, -{36,43,30}, -{36,43,31}, -{36,43,32}, -{36,43,33}, -{36,43,34}, -{36,43,35}, -{36,43,36}, -{36,43,37}, -{36,43,38}, -{36,43,39}, -{36,43,40}, -{36,43,41}, -{36,43,42}, -{36,43,43}, -{36,43,44}, -{36,43,45}, -{36,43,46}, -{36,43,47}, -{36,43,48}, -{36,44,-81}, -{36,44,-80}, -{36,44,-79}, -{36,44,-78}, -{36,44,-77}, -{36,44,-76}, -{36,44,-75}, -{36,44,-74}, -{36,44,-73}, -{36,44,-72}, -{36,44,-71}, -{36,44,-70}, -{36,44,-69}, -{36,44,-68}, -{36,44,-67}, -{36,44,-66}, -{36,44,-65}, -{36,44,-64}, -{36,44,-63}, -{36,44,-62}, -{36,44,-61}, -{36,44,-60}, -{36,44,-59}, -{36,44,-58}, -{36,44,-57}, -{36,44,-56}, -{36,44,-55}, -{36,44,-54}, -{36,44,-53}, -{36,44,-52}, -{36,44,-51}, -{36,44,-50}, -{36,44,-49}, -{36,44,-48}, -{36,44,-47}, -{36,44,-46}, -{36,44,-45}, -{36,44,-44}, -{36,44,-43}, -{36,44,-42}, -{36,44,-41}, -{36,44,-40}, -{36,44,-39}, -{36,44,-38}, -{36,44,-37}, -{36,44,-36}, -{36,44,-35}, -{36,44,-34}, -{36,44,-33}, -{36,44,-32}, -{36,44,-31}, -{36,44,-30}, -{36,44,-29}, -{36,44,-28}, -{36,44,-27}, -{36,44,-26}, -{36,44,-25}, -{36,44,-24}, -{36,44,-23}, -{36,44,-22}, -{36,44,-21}, -{36,44,-20}, -{36,44,-19}, -{36,44,-18}, -{36,44,-17}, -{36,44,-16}, -{36,44,-15}, -{36,44,-14}, -{36,44,-13}, -{36,44,-12}, -{36,44,-11}, -{36,44,-10}, -{36,44,-9}, -{36,44,-8}, -{36,44,-7}, -{36,44,-6}, -{36,44,-5}, -{36,44,-4}, -{36,44,-3}, -{36,44,-2}, -{36,44,-1}, -{36,44,0}, -{36,44,1}, -{36,44,2}, -{36,44,3}, -{36,44,4}, -{36,44,5}, -{36,44,6}, -{36,44,7}, -{36,44,8}, -{36,44,9}, -{36,44,10}, -{36,44,11}, -{36,44,12}, -{36,44,13}, -{36,44,14}, -{36,44,15}, -{36,44,16}, -{36,44,17}, -{36,44,18}, -{36,44,19}, -{36,44,20}, -{36,44,21}, -{36,44,22}, -{36,44,23}, -{36,44,24}, -{36,44,25}, -{36,44,26}, -{36,44,27}, -{36,44,28}, -{36,44,29}, -{36,44,30}, -{36,44,31}, -{36,44,32}, -{36,44,33}, -{36,44,34}, -{36,44,35}, -{36,44,36}, -{36,44,37}, -{36,44,38}, -{36,44,39}, -{36,44,40}, -{36,44,41}, -{36,44,42}, -{36,44,43}, -{36,44,44}, -{36,44,45}, -{36,44,46}, -{36,44,47}, -{36,44,48}, -{36,45,-81}, -{36,45,-80}, -{36,45,-79}, -{36,45,-78}, -{36,45,-77}, -{36,45,-76}, -{36,45,-75}, -{36,45,-74}, -{36,45,-73}, -{36,45,-72}, -{36,45,-71}, -{36,45,-70}, -{36,45,-69}, -{36,45,-68}, -{36,45,-67}, -{36,45,-66}, -{36,45,-65}, -{36,45,-64}, -{36,45,-63}, -{36,45,-62}, -{36,45,-61}, -{36,45,-60}, -{36,45,-59}, -{36,45,-58}, -{36,45,-57}, -{36,45,-56}, -{36,45,-55}, -{36,45,-54}, -{36,45,-53}, -{36,45,-52}, -{36,45,-51}, -{36,45,-50}, -{36,45,-49}, -{36,45,-48}, -{36,45,-47}, -{36,45,-46}, -{36,45,-45}, -{36,45,-44}, -{36,45,-43}, -{36,45,-42}, -{36,45,-41}, -{36,45,-40}, -{36,45,-39}, -{36,45,-38}, -{36,45,-37}, -{36,45,-36}, -{36,45,-35}, -{36,45,-34}, -{36,45,-33}, -{36,45,-32}, -{36,45,-31}, -{36,45,-30}, -{36,45,-29}, -{36,45,-28}, -{36,45,-27}, -{36,45,-26}, -{36,45,-25}, -{36,45,-24}, -{36,45,-23}, -{36,45,-22}, -{36,45,-21}, -{36,45,-20}, -{36,45,-19}, -{36,45,-18}, -{36,45,-17}, -{36,45,-16}, -{36,45,-15}, -{36,45,-14}, -{36,45,-13}, -{36,45,-12}, -{36,45,-11}, -{36,45,-10}, -{36,45,-9}, -{36,45,-8}, -{36,45,-7}, -{36,45,-6}, -{36,45,-5}, -{36,45,-4}, -{36,45,-3}, -{36,45,-2}, -{36,45,-1}, -{36,45,0}, -{36,45,1}, -{36,45,2}, -{36,45,3}, -{36,45,4}, -{36,45,5}, -{36,45,6}, -{36,45,7}, -{36,45,8}, -{36,45,9}, -{36,45,10}, -{36,45,11}, -{36,45,12}, -{36,45,13}, -{36,45,14}, -{36,45,15}, -{36,45,16}, -{36,45,17}, -{36,45,18}, -{36,45,19}, -{36,45,20}, -{36,45,21}, -{36,45,22}, -{36,45,23}, -{36,45,24}, -{36,45,25}, -{36,45,26}, -{36,45,27}, -{36,45,28}, -{36,45,29}, -{36,45,30}, -{36,45,31}, -{36,45,32}, -{36,45,33}, -{36,45,34}, -{36,45,35}, -{36,45,36}, -{36,45,37}, -{36,45,38}, -{36,45,39}, -{36,45,40}, -{36,45,41}, -{36,45,42}, -{36,45,43}, -{36,45,44}, -{36,45,45}, -{36,45,46}, -{36,45,47}, -{36,45,48}, -{36,46,-82}, -{36,46,-81}, -{36,46,-80}, -{36,46,-79}, -{36,46,-78}, -{36,46,-77}, -{36,46,-76}, -{36,46,-75}, -{36,46,-74}, -{36,46,-73}, -{36,46,-72}, -{36,46,-71}, -{36,46,-70}, -{36,46,-69}, -{36,46,-68}, -{36,46,-67}, -{36,46,-66}, -{36,46,-65}, -{36,46,-64}, -{36,46,-63}, -{36,46,-62}, -{36,46,-61}, -{36,46,-60}, -{36,46,-59}, -{36,46,-58}, -{36,46,-57}, -{36,46,-56}, -{36,46,-55}, -{36,46,-54}, -{36,46,-53}, -{36,46,-52}, -{36,46,-51}, -{36,46,-50}, -{36,46,-49}, -{36,46,-48}, -{36,46,-47}, -{36,46,-46}, -{36,46,-45}, -{36,46,-44}, -{36,46,-43}, -{36,46,-42}, -{36,46,-41}, -{36,46,-40}, -{36,46,-39}, -{36,46,-38}, -{36,46,-37}, -{36,46,-36}, -{36,46,-35}, -{36,46,-34}, -{36,46,-33}, -{36,46,-32}, -{36,46,-31}, -{36,46,-30}, -{36,46,-29}, -{36,46,-28}, -{36,46,-27}, -{36,46,-26}, -{36,46,-25}, -{36,46,-24}, -{36,46,-23}, -{36,46,-22}, -{36,46,-21}, -{36,46,-20}, -{36,46,-19}, -{36,46,-18}, -{36,46,-17}, -{36,46,-16}, -{36,46,-15}, -{36,46,-14}, -{36,46,-13}, -{36,46,-12}, -{36,46,-11}, -{36,46,-10}, -{36,46,-9}, -{36,46,-8}, -{36,46,-7}, -{36,46,-6}, -{36,46,-5}, -{36,46,-4}, -{36,46,-3}, -{36,46,-2}, -{36,46,-1}, -{36,46,0}, -{36,46,1}, -{36,46,2}, -{36,46,3}, -{36,46,4}, -{36,46,5}, -{36,46,6}, -{36,46,7}, -{36,46,8}, -{36,46,9}, -{36,46,10}, -{36,46,11}, -{36,46,12}, -{36,46,13}, -{36,46,14}, -{36,46,15}, -{36,46,16}, -{36,46,17}, -{36,46,18}, -{36,46,19}, -{36,46,20}, -{36,46,21}, -{36,46,22}, -{36,46,23}, -{36,46,24}, -{36,46,25}, -{36,46,26}, -{36,46,27}, -{36,46,28}, -{36,46,29}, -{36,46,30}, -{36,46,31}, -{36,46,32}, -{36,46,33}, -{36,46,34}, -{36,46,35}, -{36,46,36}, -{36,46,37}, -{36,46,38}, -{36,46,39}, -{36,46,40}, -{36,46,41}, -{36,46,42}, -{36,46,43}, -{36,46,44}, -{36,46,45}, -{36,46,46}, -{36,46,47}, -{36,46,48}, -{36,47,-83}, -{36,47,-82}, -{36,47,-81}, -{36,47,-80}, -{36,47,-79}, -{36,47,-78}, -{36,47,-77}, -{36,47,-76}, -{36,47,-75}, -{36,47,-74}, -{36,47,-73}, -{36,47,-72}, -{36,47,-71}, -{36,47,-70}, -{36,47,-69}, -{36,47,-68}, -{36,47,-67}, -{36,47,-66}, -{36,47,-65}, -{36,47,-64}, -{36,47,-63}, -{36,47,-62}, -{36,47,-61}, -{36,47,-60}, -{36,47,-59}, -{36,47,-58}, -{36,47,-57}, -{36,47,-56}, -{36,47,-55}, -{36,47,-54}, -{36,47,-53}, -{36,47,-52}, -{36,47,-51}, -{36,47,-50}, -{36,47,-49}, -{36,47,-48}, -{36,47,-47}, -{36,47,-46}, -{36,47,-45}, -{36,47,-44}, -{36,47,-43}, -{36,47,-42}, -{36,47,-41}, -{36,47,-40}, -{36,47,-39}, -{36,47,-38}, -{36,47,-37}, -{36,47,-36}, -{36,47,-35}, -{36,47,-34}, -{36,47,-33}, -{36,47,-32}, -{36,47,-31}, -{36,47,-30}, -{36,47,-29}, -{36,47,-28}, -{36,47,-27}, -{36,47,-26}, -{36,47,-25}, -{36,47,-24}, -{36,47,-23}, -{36,47,-22}, -{36,47,-21}, -{36,47,-20}, -{36,47,-19}, -{36,47,-18}, -{36,47,-17}, -{36,47,-16}, -{36,47,-15}, -{36,47,-14}, -{36,47,-13}, -{36,47,-12}, -{36,47,-11}, -{36,47,-10}, -{36,47,-9}, -{36,47,-8}, -{36,47,-7}, -{36,47,-6}, -{36,47,-5}, -{36,47,-4}, -{36,47,-3}, -{36,47,-2}, -{36,47,-1}, -{36,47,0}, -{36,47,1}, -{36,47,2}, -{36,47,3}, -{36,47,4}, -{36,47,5}, -{36,47,6}, -{36,47,7}, -{36,47,8}, -{36,47,9}, -{36,47,10}, -{36,47,11}, -{36,47,12}, -{36,47,13}, -{36,47,14}, -{36,47,15}, -{36,47,16}, -{36,47,17}, -{36,47,18}, -{36,47,19}, -{36,47,20}, -{36,47,21}, -{36,47,22}, -{36,47,23}, -{36,47,24}, -{36,47,25}, -{36,47,26}, -{36,47,27}, -{36,47,28}, -{36,47,29}, -{36,47,30}, -{36,47,31}, -{36,47,32}, -{36,47,33}, -{36,47,34}, -{36,47,35}, -{36,47,36}, -{36,47,37}, -{36,47,38}, -{36,47,39}, -{36,47,40}, -{36,47,41}, -{36,47,42}, -{36,47,43}, -{36,47,44}, -{36,47,45}, -{36,47,46}, -{36,47,47}, -{36,47,48}, -{36,48,-84}, -{36,48,-83}, -{36,48,-82}, -{36,48,-81}, -{36,48,-80}, -{36,48,-79}, -{36,48,-78}, -{36,48,-77}, -{36,48,-76}, -{36,48,-75}, -{36,48,-74}, -{36,48,-73}, -{36,48,-72}, -{36,48,-71}, -{36,48,-70}, -{36,48,-69}, -{36,48,-68}, -{36,48,-67}, -{36,48,-66}, -{36,48,-65}, -{36,48,-64}, -{36,48,-63}, -{36,48,-62}, -{36,48,-61}, -{36,48,-60}, -{36,48,-59}, -{36,48,-58}, -{36,48,-57}, -{36,48,-56}, -{36,48,-55}, -{36,48,-54}, -{36,48,-53}, -{36,48,-52}, -{36,48,-51}, -{36,48,-50}, -{36,48,-49}, -{36,48,-48}, -{36,48,-47}, -{36,48,-46}, -{36,48,-45}, -{36,48,-44}, -{36,48,-43}, -{36,48,-42}, -{36,48,-41}, -{36,48,-40}, -{36,48,-39}, -{36,48,-38}, -{36,48,-37}, -{36,48,-36}, -{36,48,-35}, -{36,48,-34}, -{36,48,-33}, -{36,48,-32}, -{36,48,-31}, -{36,48,-30}, -{36,48,-29}, -{36,48,-28}, -{36,48,-27}, -{36,48,-26}, -{36,48,-25}, -{36,48,-24}, -{36,48,-23}, -{36,48,-22}, -{36,48,-21}, -{36,48,-20}, -{36,48,-19}, -{36,48,-18}, -{36,48,-17}, -{36,48,-16}, -{36,48,-15}, -{36,48,-14}, -{36,48,-13}, -{36,48,-12}, -{36,48,-11}, -{36,48,-10}, -{36,48,-9}, -{36,48,-8}, -{36,48,-7}, -{36,48,-6}, -{36,48,-5}, -{36,48,-4}, -{36,48,-3}, -{36,48,-2}, -{36,48,-1}, -{36,48,0}, -{36,48,1}, -{36,48,2}, -{36,48,3}, -{36,48,4}, -{36,48,5}, -{36,48,6}, -{36,48,7}, -{36,48,8}, -{36,48,9}, -{36,48,10}, -{36,48,11}, -{36,48,12}, -{36,48,13}, -{36,48,14}, -{36,48,15}, -{36,48,16}, -{36,48,17}, -{36,48,18}, -{36,48,19}, -{36,48,20}, -{36,48,21}, -{36,48,22}, -{36,48,23}, -{36,48,24}, -{36,48,25}, -{36,48,26}, -{36,48,27}, -{36,48,28}, -{36,48,29}, -{36,48,30}, -{36,48,31}, -{36,48,32}, -{36,48,33}, -{36,48,34}, -{36,48,35}, -{36,48,36}, -{36,48,37}, -{36,48,38}, -{36,48,39}, -{36,48,40}, -{36,48,41}, -{36,48,42}, -{36,48,43}, -{36,48,44}, -{36,48,45}, -{36,48,46}, -{36,48,47}, -{36,48,48}, -{36,49,-85}, -{36,49,-84}, -{36,49,-83}, -{36,49,-82}, -{36,49,-81}, -{36,49,-80}, -{36,49,-79}, -{36,49,-78}, -{36,49,-77}, -{36,49,-76}, -{36,49,-75}, -{36,49,-74}, -{36,49,-73}, -{36,49,-72}, -{36,49,-71}, -{36,49,-70}, -{36,49,-69}, -{36,49,-68}, -{36,49,-67}, -{36,49,-66}, -{36,49,-65}, -{36,49,-64}, -{36,49,-63}, -{36,49,-62}, -{36,49,-61}, -{36,49,-60}, -{36,49,-59}, -{36,49,-58}, -{36,49,-57}, -{36,49,-56}, -{36,49,-55}, -{36,49,-54}, -{36,49,-53}, -{36,49,-52}, -{36,49,-51}, -{36,49,-50}, -{36,49,-49}, -{36,49,-48}, -{36,49,-47}, -{36,49,-46}, -{36,49,-45}, -{36,49,-44}, -{36,49,-43}, -{36,49,-42}, -{36,49,-41}, -{36,49,-40}, -{36,49,-39}, -{36,49,-38}, -{36,49,-37}, -{36,49,-36}, -{36,49,-35}, -{36,49,-34}, -{36,49,-33}, -{36,49,-32}, -{36,49,-31}, -{36,49,-30}, -{36,49,-29}, -{36,49,-28}, -{36,49,-27}, -{36,49,-26}, -{36,49,-25}, -{36,49,-24}, -{36,49,-23}, -{36,49,-22}, -{36,49,-21}, -{36,49,-20}, -{36,49,-19}, -{36,49,-18}, -{36,49,-17}, -{36,49,-16}, -{36,49,-15}, -{36,49,-14}, -{36,49,-13}, -{36,49,-12}, -{36,49,-11}, -{36,49,-10}, -{36,49,-9}, -{36,49,-8}, -{36,49,-7}, -{36,49,-6}, -{36,49,-5}, -{36,49,-4}, -{36,49,-3}, -{36,49,-2}, -{36,49,-1}, -{36,49,0}, -{36,49,1}, -{36,49,2}, -{36,49,3}, -{36,49,4}, -{36,49,5}, -{36,49,6}, -{36,49,7}, -{36,49,8}, -{36,49,9}, -{36,49,10}, -{36,49,11}, -{36,49,12}, -{36,49,13}, -{36,49,14}, -{36,49,15}, -{36,49,16}, -{36,49,17}, -{36,49,18}, -{36,49,19}, -{36,49,20}, -{36,49,21}, -{36,49,22}, -{36,49,23}, -{36,49,24}, -{36,49,25}, -{36,49,26}, -{36,49,27}, -{36,49,28}, -{36,49,29}, -{36,49,30}, -{36,49,31}, -{36,49,32}, -{36,49,33}, -{36,49,34}, -{36,49,35}, -{36,49,36}, -{36,49,37}, -{36,49,38}, -{36,49,39}, -{36,49,40}, -{36,49,41}, -{36,49,42}, -{36,49,43}, -{36,49,44}, -{36,49,45}, -{36,49,46}, -{36,49,47}, -{36,49,48}, -{36,49,49}, -{36,50,-86}, -{36,50,-85}, -{36,50,-84}, -{36,50,-83}, -{36,50,-82}, -{36,50,-81}, -{36,50,-80}, -{36,50,-79}, -{36,50,-78}, -{36,50,-77}, -{36,50,-76}, -{36,50,-75}, -{36,50,-74}, -{36,50,-73}, -{36,50,-72}, -{36,50,-71}, -{36,50,-70}, -{36,50,-69}, -{36,50,-68}, -{36,50,-67}, -{36,50,-66}, -{36,50,-65}, -{36,50,-64}, -{36,50,-63}, -{36,50,-62}, -{36,50,-61}, -{36,50,-60}, -{36,50,-59}, -{36,50,-58}, -{36,50,-57}, -{36,50,-56}, -{36,50,-55}, -{36,50,-54}, -{36,50,-53}, -{36,50,-52}, -{36,50,-51}, -{36,50,-50}, -{36,50,-49}, -{36,50,-48}, -{36,50,-47}, -{36,50,-46}, -{36,50,-45}, -{36,50,-44}, -{36,50,-43}, -{36,50,-42}, -{36,50,-41}, -{36,50,-40}, -{36,50,-39}, -{36,50,-38}, -{36,50,-37}, -{36,50,-36}, -{36,50,-35}, -{36,50,-34}, -{36,50,-33}, -{36,50,-32}, -{36,50,-31}, -{36,50,-30}, -{36,50,-29}, -{36,50,-28}, -{36,50,-27}, -{36,50,-26}, -{36,50,-25}, -{36,50,-24}, -{36,50,-23}, -{36,50,-22}, -{36,50,-21}, -{36,50,-20}, -{36,50,-19}, -{36,50,-18}, -{36,50,-17}, -{36,50,-16}, -{36,50,-15}, -{36,50,-14}, -{36,50,-13}, -{36,50,-12}, -{36,50,-11}, -{36,50,-10}, -{36,50,-9}, -{36,50,-8}, -{36,50,-7}, -{36,50,-6}, -{36,50,-5}, -{36,50,-4}, -{36,50,-3}, -{36,50,-2}, -{36,50,-1}, -{36,50,0}, -{36,50,1}, -{36,50,2}, -{36,50,3}, -{36,50,4}, -{36,50,5}, -{36,50,6}, -{36,50,7}, -{36,50,8}, -{36,50,9}, -{36,50,10}, -{36,50,11}, -{36,50,12}, -{36,50,13}, -{36,50,14}, -{36,50,15}, -{36,50,16}, -{36,50,17}, -{36,50,18}, -{36,50,19}, -{36,50,20}, -{36,50,21}, -{36,50,22}, -{36,50,23}, -{36,50,24}, -{36,50,25}, -{36,50,26}, -{36,50,27}, -{36,50,28}, -{36,50,29}, -{36,50,30}, -{36,50,31}, -{36,50,32}, -{36,50,33}, -{36,50,34}, -{36,50,35}, -{36,50,36}, -{36,50,37}, -{36,50,38}, -{36,50,39}, -{36,50,40}, -{36,50,41}, -{36,50,42}, -{36,50,43}, -{36,50,44}, -{36,50,45}, -{36,50,46}, -{36,50,47}, -{36,50,48}, -{36,50,49}, -{36,51,-87}, -{36,51,-86}, -{36,51,-85}, -{36,51,-84}, -{36,51,-83}, -{36,51,-82}, -{36,51,-81}, -{36,51,-80}, -{36,51,-79}, -{36,51,-78}, -{36,51,-77}, -{36,51,-76}, -{36,51,-75}, -{36,51,-74}, -{36,51,-73}, -{36,51,-72}, -{36,51,-71}, -{36,51,-70}, -{36,51,-69}, -{36,51,-68}, -{36,51,-67}, -{36,51,-66}, -{36,51,-65}, -{36,51,-64}, -{36,51,-63}, -{36,51,-62}, -{36,51,-61}, -{36,51,-60}, -{36,51,-59}, -{36,51,-58}, -{36,51,-57}, -{36,51,-56}, -{36,51,-55}, -{36,51,-54}, -{36,51,-53}, -{36,51,-52}, -{36,51,-51}, -{36,51,-50}, -{36,51,-49}, -{36,51,-48}, -{36,51,-47}, -{36,51,-46}, -{36,51,-45}, -{36,51,-44}, -{36,51,-43}, -{36,51,-42}, -{36,51,-41}, -{36,51,-40}, -{36,51,-39}, -{36,51,-38}, -{36,51,-37}, -{36,51,-36}, -{36,51,-35}, -{36,51,-34}, -{36,51,-33}, -{36,51,-32}, -{36,51,-31}, -{36,51,-30}, -{36,51,-29}, -{36,51,-28}, -{36,51,-27}, -{36,51,-26}, -{36,51,-25}, -{36,51,-24}, -{36,51,-23}, -{36,51,-22}, -{36,51,-21}, -{36,51,-20}, -{36,51,-19}, -{36,51,-18}, -{36,51,-17}, -{36,51,-16}, -{36,51,-15}, -{36,51,-14}, -{36,51,-13}, -{36,51,-12}, -{36,51,-11}, -{36,51,-10}, -{36,51,-9}, -{36,51,-8}, -{36,51,-7}, -{36,51,-6}, -{36,51,-5}, -{36,51,-4}, -{36,51,-3}, -{36,51,-2}, -{36,51,-1}, -{36,51,0}, -{36,51,1}, -{36,51,2}, -{36,51,3}, -{36,51,4}, -{36,51,5}, -{36,51,6}, -{36,51,7}, -{36,51,8}, -{36,51,9}, -{36,51,10}, -{36,51,11}, -{36,51,12}, -{36,51,13}, -{36,51,14}, -{36,51,15}, -{36,51,16}, -{36,51,17}, -{36,51,18}, -{36,51,19}, -{36,51,20}, -{36,51,21}, -{36,51,22}, -{36,51,23}, -{36,51,24}, -{36,51,25}, -{36,51,26}, -{36,51,27}, -{36,51,28}, -{36,51,29}, -{36,51,30}, -{36,51,31}, -{36,51,32}, -{36,51,33}, -{36,51,34}, -{36,51,35}, -{36,51,36}, -{36,51,37}, -{36,51,38}, -{36,51,39}, -{36,51,40}, -{36,51,41}, -{36,51,42}, -{36,51,43}, -{36,51,44}, -{36,51,45}, -{36,51,46}, -{36,51,47}, -{36,51,48}, -{36,51,49}, -{36,52,-88}, -{36,52,-87}, -{36,52,-86}, -{36,52,-85}, -{36,52,-84}, -{36,52,-83}, -{36,52,-82}, -{36,52,-81}, -{36,52,-80}, -{36,52,-79}, -{36,52,-78}, -{36,52,-77}, -{36,52,-76}, -{36,52,-75}, -{36,52,-74}, -{36,52,-73}, -{36,52,-72}, -{36,52,-71}, -{36,52,-70}, -{36,52,-69}, -{36,52,-68}, -{36,52,-67}, -{36,52,-66}, -{36,52,-65}, -{36,52,-64}, -{36,52,-63}, -{36,52,-62}, -{36,52,-61}, -{36,52,-60}, -{36,52,-59}, -{36,52,-58}, -{36,52,-57}, -{36,52,-56}, -{36,52,-55}, -{36,52,-54}, -{36,52,-53}, -{36,52,-52}, -{36,52,-51}, -{36,52,-50}, -{36,52,-49}, -{36,52,-48}, -{36,52,-47}, -{36,52,-46}, -{36,52,-45}, -{36,52,-44}, -{36,52,-43}, -{36,52,-42}, -{36,52,-41}, -{36,52,-40}, -{36,52,-39}, -{36,52,-38}, -{36,52,-37}, -{36,52,-36}, -{36,52,-35}, -{36,52,-34}, -{36,52,-33}, -{36,52,-32}, -{36,52,-31}, -{36,52,-30}, -{36,52,-29}, -{36,52,-28}, -{36,52,-27}, -{36,52,-26}, -{36,52,-25}, -{36,52,-24}, -{36,52,-23}, -{36,52,-22}, -{36,52,-21}, -{36,52,-20}, -{36,52,-19}, -{36,52,-18}, -{36,52,-17}, -{36,52,-16}, -{36,52,-15}, -{36,52,-14}, -{36,52,-13}, -{36,52,-12}, -{36,52,-11}, -{36,52,-10}, -{36,52,-9}, -{36,52,-8}, -{36,52,-7}, -{36,52,-6}, -{36,52,-5}, -{36,52,-4}, -{36,52,-3}, -{36,52,-2}, -{36,52,-1}, -{36,52,0}, -{36,52,1}, -{36,52,2}, -{36,52,3}, -{36,52,4}, -{36,52,5}, -{36,52,6}, -{36,52,7}, -{36,52,8}, -{36,52,9}, -{36,52,10}, -{36,52,11}, -{36,52,12}, -{36,52,13}, -{36,52,14}, -{36,52,15}, -{36,52,16}, -{36,52,17}, -{36,52,18}, -{36,52,19}, -{36,52,20}, -{36,52,21}, -{36,52,22}, -{36,52,23}, -{36,52,24}, -{36,52,25}, -{36,52,26}, -{36,52,27}, -{36,52,28}, -{36,52,29}, -{36,52,30}, -{36,52,31}, -{36,52,32}, -{36,52,33}, -{36,52,34}, -{36,52,35}, -{36,52,36}, -{36,52,37}, -{36,52,38}, -{36,52,39}, -{36,52,40}, -{36,52,41}, -{36,52,42}, -{36,52,43}, -{36,52,44}, -{36,52,45}, -{36,52,46}, -{36,52,47}, -{36,52,48}, -{36,52,49}, -{36,53,-89}, -{36,53,-88}, -{36,53,-87}, -{36,53,-86}, -{36,53,-85}, -{36,53,-84}, -{36,53,-83}, -{36,53,-82}, -{36,53,-81}, -{36,53,-80}, -{36,53,-79}, -{36,53,-78}, -{36,53,-77}, -{36,53,-76}, -{36,53,-75}, -{36,53,-74}, -{36,53,-73}, -{36,53,-72}, -{36,53,-71}, -{36,53,-70}, -{36,53,-69}, -{36,53,-68}, -{36,53,-67}, -{36,53,-66}, -{36,53,-65}, -{36,53,-64}, -{36,53,-63}, -{36,53,-62}, -{36,53,-61}, -{36,53,-60}, -{36,53,-59}, -{36,53,-58}, -{36,53,-57}, -{36,53,-56}, -{36,53,-55}, -{36,53,-54}, -{36,53,-53}, -{36,53,-52}, -{36,53,-51}, -{36,53,-50}, -{36,53,-49}, -{36,53,-48}, -{36,53,-47}, -{36,53,-46}, -{36,53,-45}, -{36,53,-44}, -{36,53,-43}, -{36,53,-42}, -{36,53,-41}, -{36,53,-40}, -{36,53,-39}, -{36,53,-38}, -{36,53,-37}, -{36,53,-36}, -{36,53,-35}, -{36,53,-34}, -{36,53,-33}, -{36,53,-32}, -{36,53,-31}, -{36,53,-30}, -{36,53,-29}, -{36,53,-28}, -{36,53,-27}, -{36,53,-26}, -{36,53,-25}, -{36,53,-24}, -{36,53,-23}, -{36,53,-22}, -{36,53,-21}, -{36,53,-20}, -{36,53,-19}, -{36,53,-18}, -{36,53,-17}, -{36,53,-16}, -{36,53,-15}, -{36,53,-14}, -{36,53,-13}, -{36,53,-12}, -{36,53,-11}, -{36,53,-10}, -{36,53,-9}, -{36,53,-8}, -{36,53,-7}, -{36,53,-6}, -{36,53,-5}, -{36,53,-4}, -{36,53,-3}, -{36,53,-2}, -{36,53,-1}, -{36,53,0}, -{36,53,1}, -{36,53,2}, -{36,53,3}, -{36,53,4}, -{36,53,5}, -{36,53,6}, -{36,53,7}, -{36,53,8}, -{36,53,9}, -{36,53,10}, -{36,53,11}, -{36,53,12}, -{36,53,13}, -{36,53,14}, -{36,53,15}, -{36,53,16}, -{36,53,17}, -{36,53,18}, -{36,53,19}, -{36,53,20}, -{36,53,21}, -{36,53,22}, -{36,53,23}, -{36,53,24}, -{36,53,25}, -{36,53,26}, -{36,53,27}, -{36,53,28}, -{36,53,29}, -{36,53,30}, -{36,53,31}, -{36,53,32}, -{36,53,33}, -{36,53,34}, -{36,53,35}, -{36,53,36}, -{36,53,37}, -{36,53,38}, -{36,53,39}, -{36,53,40}, -{36,53,41}, -{36,53,42}, -{36,53,43}, -{36,53,44}, -{36,53,45}, -{36,53,46}, -{36,53,47}, -{36,53,48}, -{36,53,49}, -{36,54,-89}, -{36,54,-88}, -{36,54,-87}, -{36,54,-86}, -{36,54,-85}, -{36,54,-84}, -{36,54,-83}, -{36,54,-82}, -{36,54,-81}, -{36,54,-80}, -{36,54,-79}, -{36,54,-78}, -{36,54,-77}, -{36,54,-76}, -{36,54,-75}, -{36,54,-74}, -{36,54,-73}, -{36,54,-72}, -{36,54,-71}, -{36,54,-70}, -{36,54,-69}, -{36,54,-68}, -{36,54,-67}, -{36,54,-66}, -{36,54,-65}, -{36,54,-64}, -{36,54,-63}, -{36,54,-62}, -{36,54,-61}, -{36,54,-60}, -{36,54,-59}, -{36,54,-58}, -{36,54,-57}, -{36,54,-56}, -{36,54,-55}, -{36,54,-54}, -{36,54,-53}, -{36,54,-52}, -{36,54,-51}, -{36,54,-50}, -{36,54,-49}, -{36,54,-48}, -{36,54,-47}, -{36,54,-46}, -{36,54,-45}, -{36,54,-44}, -{36,54,-43}, -{36,54,-42}, -{36,54,-41}, -{36,54,-40}, -{36,54,-39}, -{36,54,-38}, -{36,54,-37}, -{36,54,-36}, -{36,54,-35}, -{36,54,-34}, -{36,54,-33}, -{36,54,-32}, -{36,54,-31}, -{36,54,-30}, -{36,54,-29}, -{36,54,-28}, -{36,54,-27}, -{36,54,-26}, -{36,54,-25}, -{36,54,-24}, -{36,54,-23}, -{36,54,-22}, -{36,54,-21}, -{36,54,-20}, -{36,54,-19}, -{36,54,-18}, -{36,54,-17}, -{36,54,-16}, -{36,54,-15}, -{36,54,-14}, -{36,54,-13}, -{36,54,-12}, -{36,54,-11}, -{36,54,-10}, -{36,54,-9}, -{36,54,-8}, -{36,54,-7}, -{36,54,-6}, -{36,54,-5}, -{36,54,-4}, -{36,54,-3}, -{36,54,-2}, -{36,54,-1}, -{36,54,0}, -{36,54,1}, -{36,54,2}, -{36,54,3}, -{36,54,4}, -{36,54,5}, -{36,54,6}, -{36,54,7}, -{36,54,8}, -{36,54,9}, -{36,54,10}, -{36,54,11}, -{36,54,12}, -{36,54,13}, -{36,54,14}, -{36,54,15}, -{36,54,16}, -{36,54,17}, -{36,54,18}, -{36,54,19}, -{36,54,20}, -{36,54,21}, -{36,54,22}, -{36,54,23}, -{36,54,24}, -{36,54,25}, -{36,54,26}, -{36,54,27}, -{36,54,28}, -{36,54,29}, -{36,54,30}, -{36,54,31}, -{36,54,32}, -{36,54,33}, -{36,54,34}, -{36,54,35}, -{36,54,36}, -{36,54,37}, -{36,54,38}, -{36,54,39}, -{36,54,40}, -{36,54,41}, -{36,54,42}, -{36,54,43}, -{36,54,44}, -{36,54,45}, -{36,54,46}, -{36,54,47}, -{36,54,48}, -{36,54,49}, -{36,55,-90}, -{36,55,-89}, -{36,55,-88}, -{36,55,-87}, -{36,55,-86}, -{36,55,-85}, -{36,55,-84}, -{36,55,-83}, -{36,55,-82}, -{36,55,-81}, -{36,55,-80}, -{36,55,-79}, -{36,55,-78}, -{36,55,-77}, -{36,55,-76}, -{36,55,-75}, -{36,55,-74}, -{36,55,-73}, -{36,55,-72}, -{36,55,-71}, -{36,55,-70}, -{36,55,-69}, -{36,55,-68}, -{36,55,-67}, -{36,55,-66}, -{36,55,-65}, -{36,55,-64}, -{36,55,-63}, -{36,55,-62}, -{36,55,-61}, -{36,55,-60}, -{36,55,-59}, -{36,55,-58}, -{36,55,-57}, -{36,55,-56}, -{36,55,-55}, -{36,55,-54}, -{36,55,-53}, -{36,55,-52}, -{36,55,-51}, -{36,55,-50}, -{36,55,-49}, -{36,55,-48}, -{36,55,-47}, -{36,55,-46}, -{36,55,-45}, -{36,55,-44}, -{36,55,-43}, -{36,55,-42}, -{36,55,-41}, -{36,55,-40}, -{36,55,-39}, -{36,55,-38}, -{36,55,-37}, -{36,55,-36}, -{36,55,-35}, -{36,55,-34}, -{36,55,-33}, -{36,55,-32}, -{36,55,-31}, -{36,55,-30}, -{36,55,-29}, -{36,55,-28}, -{36,55,-27}, -{36,55,-26}, -{36,55,-25}, -{36,55,-24}, -{36,55,-23}, -{36,55,-22}, -{36,55,-21}, -{36,55,-20}, -{36,55,-19}, -{36,55,-18}, -{36,55,-17}, -{36,55,-16}, -{36,55,-15}, -{36,55,-14}, -{36,55,-13}, -{36,55,-12}, -{36,55,-11}, -{36,55,-10}, -{36,55,-9}, -{36,55,-8}, -{36,55,-7}, -{36,55,-6}, -{36,55,-5}, -{36,55,-4}, -{36,55,-3}, -{36,55,-2}, -{36,55,-1}, -{36,55,0}, -{36,55,1}, -{36,55,2}, -{36,55,3}, -{36,55,4}, -{36,55,5}, -{36,55,6}, -{36,55,7}, -{36,55,8}, -{36,55,9}, -{36,55,10}, -{36,55,11}, -{36,55,12}, -{36,55,13}, -{36,55,14}, -{36,55,15}, -{36,55,16}, -{36,55,17}, -{36,55,18}, -{36,55,19}, -{36,55,20}, -{36,55,21}, -{36,55,22}, -{36,55,23}, -{36,55,24}, -{36,55,25}, -{36,55,26}, -{36,55,27}, -{36,55,28}, -{36,55,29}, -{36,55,30}, -{36,55,31}, -{36,55,32}, -{36,55,33}, -{36,55,34}, -{36,55,35}, -{36,55,36}, -{36,55,37}, -{36,55,38}, -{36,55,39}, -{36,55,40}, -{36,55,41}, -{36,55,42}, -{36,55,43}, -{36,55,44}, -{36,55,45}, -{36,55,46}, -{36,55,47}, -{36,55,48}, -{36,55,49}, -{36,56,-91}, -{36,56,-90}, -{36,56,-89}, -{36,56,-88}, -{36,56,-87}, -{36,56,-86}, -{36,56,-85}, -{36,56,-84}, -{36,56,-83}, -{36,56,-82}, -{36,56,-81}, -{36,56,-80}, -{36,56,-79}, -{36,56,-78}, -{36,56,-77}, -{36,56,-76}, -{36,56,-75}, -{36,56,-74}, -{36,56,-73}, -{36,56,-72}, -{36,56,-71}, -{36,56,-70}, -{36,56,-69}, -{36,56,-68}, -{36,56,-67}, -{36,56,-66}, -{36,56,-65}, -{36,56,-64}, -{36,56,-63}, -{36,56,-62}, -{36,56,-61}, -{36,56,-60}, -{36,56,-59}, -{36,56,-58}, -{36,56,-57}, -{36,56,-56}, -{36,56,-55}, -{36,56,-54}, -{36,56,-53}, -{36,56,-52}, -{36,56,-51}, -{36,56,-50}, -{36,56,-49}, -{36,56,-48}, -{36,56,-47}, -{36,56,-46}, -{36,56,-45}, -{36,56,-44}, -{36,56,-43}, -{36,56,-42}, -{36,56,-41}, -{36,56,-40}, -{36,56,-39}, -{36,56,-38}, -{36,56,-37}, -{36,56,-36}, -{36,56,-35}, -{36,56,-34}, -{36,56,-33}, -{36,56,-32}, -{36,56,-31}, -{36,56,-30}, -{36,56,-29}, -{36,56,-28}, -{36,56,-27}, -{36,56,-26}, -{36,56,-25}, -{36,56,-24}, -{36,56,-23}, -{36,56,-22}, -{36,56,-21}, -{36,56,-20}, -{36,56,-19}, -{36,56,-18}, -{36,56,-17}, -{36,56,-16}, -{36,56,-15}, -{36,56,-14}, -{36,56,-13}, -{36,56,-12}, -{36,56,-11}, -{36,56,-10}, -{36,56,-9}, -{36,56,-8}, -{36,56,-7}, -{36,56,-6}, -{36,56,-5}, -{36,56,-4}, -{36,56,-3}, -{36,56,-2}, -{36,56,-1}, -{36,56,0}, -{36,56,1}, -{36,56,2}, -{36,56,3}, -{36,56,4}, -{36,56,5}, -{36,56,6}, -{36,56,7}, -{36,56,8}, -{36,56,9}, -{36,56,10}, -{36,56,11}, -{36,56,12}, -{36,56,13}, -{36,56,14}, -{36,56,15}, -{36,56,16}, -{36,56,17}, -{36,56,18}, -{36,56,19}, -{36,56,20}, -{36,56,21}, -{36,56,22}, -{36,56,23}, -{36,56,24}, -{36,56,25}, -{36,56,26}, -{36,56,27}, -{36,56,28}, -{36,56,29}, -{36,56,30}, -{36,56,31}, -{36,56,32}, -{36,56,33}, -{36,56,34}, -{36,56,35}, -{36,56,36}, -{36,56,37}, -{36,56,38}, -{36,56,39}, -{36,56,40}, -{36,56,41}, -{36,56,42}, -{36,56,43}, -{36,56,44}, -{36,56,45}, -{36,56,46}, -{36,56,47}, -{36,56,48}, -{36,56,49}, -{36,57,-92}, -{36,57,-91}, -{36,57,-90}, -{36,57,-89}, -{36,57,-88}, -{36,57,-87}, -{36,57,-86}, -{36,57,-85}, -{36,57,-84}, -{36,57,-83}, -{36,57,-82}, -{36,57,-81}, -{36,57,-80}, -{36,57,-79}, -{36,57,-78}, -{36,57,-77}, -{36,57,-76}, -{36,57,-75}, -{36,57,-74}, -{36,57,-73}, -{36,57,-72}, -{36,57,-71}, -{36,57,-70}, -{36,57,-69}, -{36,57,-68}, -{36,57,-67}, -{36,57,-66}, -{36,57,-65}, -{36,57,-64}, -{36,57,-63}, -{36,57,-62}, -{36,57,-61}, -{36,57,-60}, -{36,57,-59}, -{36,57,-58}, -{36,57,-57}, -{36,57,-56}, -{36,57,-55}, -{36,57,-54}, -{36,57,-53}, -{36,57,-52}, -{36,57,-51}, -{36,57,-50}, -{36,57,-49}, -{36,57,-48}, -{36,57,-47}, -{36,57,-46}, -{36,57,-45}, -{36,57,-44}, -{36,57,-43}, -{36,57,-42}, -{36,57,-41}, -{36,57,-40}, -{36,57,-39}, -{36,57,-38}, -{36,57,-37}, -{36,57,-36}, -{36,57,-35}, -{36,57,-34}, -{36,57,-33}, -{36,57,-32}, -{36,57,-31}, -{36,57,-30}, -{36,57,-29}, -{36,57,-28}, -{36,57,-27}, -{36,57,-26}, -{36,57,-25}, -{36,57,-24}, -{36,57,-23}, -{36,57,-22}, -{36,57,-21}, -{36,57,-20}, -{36,57,-19}, -{36,57,-18}, -{36,57,-17}, -{36,57,-16}, -{36,57,-15}, -{36,57,-14}, -{36,57,-13}, -{36,57,-12}, -{36,57,-11}, -{36,57,-10}, -{36,57,-9}, -{36,57,-8}, -{36,57,-7}, -{36,57,-6}, -{36,57,-5}, -{36,57,-4}, -{36,57,-3}, -{36,57,-2}, -{36,57,-1}, -{36,57,0}, -{36,57,1}, -{36,57,2}, -{36,57,3}, -{36,57,4}, -{36,57,5}, -{36,57,6}, -{36,57,7}, -{36,57,8}, -{36,57,9}, -{36,57,10}, -{36,57,11}, -{36,57,12}, -{36,57,13}, -{36,57,14}, -{36,57,15}, -{36,57,16}, -{36,57,17}, -{36,57,18}, -{36,57,19}, -{36,57,20}, -{36,57,21}, -{36,57,22}, -{36,57,23}, -{36,57,24}, -{36,57,25}, -{36,57,26}, -{36,57,27}, -{36,57,28}, -{36,57,29}, -{36,57,30}, -{36,57,31}, -{36,57,32}, -{36,57,33}, -{36,57,34}, -{36,57,35}, -{36,57,36}, -{36,57,37}, -{36,57,38}, -{36,57,39}, -{36,57,40}, -{36,57,41}, -{36,57,42}, -{36,57,43}, -{36,57,44}, -{36,57,45}, -{36,57,46}, -{36,57,47}, -{36,57,48}, -{36,57,49}, -{36,57,50}, -{36,58,-93}, -{36,58,-92}, -{36,58,-91}, -{36,58,-90}, -{36,58,-89}, -{36,58,-88}, -{36,58,-87}, -{36,58,-86}, -{36,58,-85}, -{36,58,-84}, -{36,58,-83}, -{36,58,-82}, -{36,58,-81}, -{36,58,-80}, -{36,58,-79}, -{36,58,-78}, -{36,58,-77}, -{36,58,-76}, -{36,58,-75}, -{36,58,-74}, -{36,58,-73}, -{36,58,-72}, -{36,58,-71}, -{36,58,-70}, -{36,58,-69}, -{36,58,-68}, -{36,58,-67}, -{36,58,-66}, -{36,58,-65}, -{36,58,-64}, -{36,58,-63}, -{36,58,-62}, -{36,58,-61}, -{36,58,-60}, -{36,58,-59}, -{36,58,-58}, -{36,58,-57}, -{36,58,-56}, -{36,58,-55}, -{36,58,-54}, -{36,58,-53}, -{36,58,-52}, -{36,58,-51}, -{36,58,-50}, -{36,58,-49}, -{36,58,-48}, -{36,58,-47}, -{36,58,-46}, -{36,58,-45}, -{36,58,-44}, -{36,58,-43}, -{36,58,-42}, -{36,58,-41}, -{36,58,-40}, -{36,58,-39}, -{36,58,-38}, -{36,58,-37}, -{36,58,-36}, -{36,58,-35}, -{36,58,-34}, -{36,58,-33}, -{36,58,-32}, -{36,58,-31}, -{36,58,-30}, -{36,58,-29}, -{36,58,-28}, -{36,58,-27}, -{36,58,-26}, -{36,58,-25}, -{36,58,-24}, -{36,58,-23}, -{36,58,-22}, -{36,58,-21}, -{36,58,-20}, -{36,58,-19}, -{36,58,-18}, -{36,58,-17}, -{36,58,-16}, -{36,58,-15}, -{36,58,-14}, -{36,58,-13}, -{36,58,-12}, -{36,58,-11}, -{36,58,-10}, -{36,58,-9}, -{36,58,-8}, -{36,58,-7}, -{36,58,-6}, -{36,58,-5}, -{36,58,-4}, -{36,58,-3}, -{36,58,-2}, -{36,58,-1}, -{36,58,0}, -{36,58,1}, -{36,58,2}, -{36,58,3}, -{36,58,4}, -{36,58,5}, -{36,58,6}, -{36,58,7}, -{36,58,8}, -{36,58,9}, -{36,58,10}, -{36,58,11}, -{36,58,12}, -{36,58,13}, -{36,58,14}, -{36,58,15}, -{36,58,16}, -{36,58,17}, -{36,58,18}, -{36,58,19}, -{36,58,20}, -{36,58,21}, -{36,58,22}, -{36,58,23}, -{36,58,24}, -{36,58,25}, -{36,58,26}, -{36,58,27}, -{36,58,28}, -{36,58,29}, -{36,58,30}, -{36,58,31}, -{36,58,32}, -{36,58,33}, -{36,58,34}, -{36,58,35}, -{36,58,36}, -{36,58,37}, -{36,58,38}, -{36,58,39}, -{36,58,40}, -{36,58,41}, -{36,58,42}, -{36,58,43}, -{36,58,44}, -{36,58,45}, -{36,58,46}, -{36,58,47}, -{36,58,48}, -{36,58,49}, -{36,58,50}, -{36,59,-94}, -{36,59,-93}, -{36,59,-92}, -{36,59,-91}, -{36,59,-90}, -{36,59,-89}, -{36,59,-88}, -{36,59,-87}, -{36,59,-86}, -{36,59,-85}, -{36,59,-84}, -{36,59,-83}, -{36,59,-82}, -{36,59,-81}, -{36,59,-80}, -{36,59,-79}, -{36,59,-78}, -{36,59,-77}, -{36,59,-76}, -{36,59,-75}, -{36,59,-74}, -{36,59,-73}, -{36,59,-72}, -{36,59,-71}, -{36,59,-70}, -{36,59,-69}, -{36,59,-68}, -{36,59,-67}, -{36,59,-66}, -{36,59,-65}, -{36,59,-64}, -{36,59,-63}, -{36,59,-62}, -{36,59,-61}, -{36,59,-60}, -{36,59,-59}, -{36,59,-58}, -{36,59,-57}, -{36,59,-56}, -{36,59,-55}, -{36,59,-54}, -{36,59,-53}, -{36,59,-52}, -{36,59,-51}, -{36,59,-50}, -{36,59,-49}, -{36,59,-48}, -{36,59,-47}, -{36,59,-46}, -{36,59,-45}, -{36,59,-44}, -{36,59,-43}, -{36,59,-42}, -{36,59,-41}, -{36,59,-40}, -{36,59,-39}, -{36,59,-38}, -{36,59,-37}, -{36,59,-36}, -{36,59,-35}, -{36,59,-34}, -{36,59,-33}, -{36,59,-32}, -{36,59,-31}, -{36,59,-30}, -{36,59,-29}, -{36,59,-28}, -{36,59,-27}, -{36,59,-26}, -{36,59,-25}, -{36,59,-24}, -{36,59,-23}, -{36,59,-22}, -{36,59,-21}, -{36,59,-20}, -{36,59,-19}, -{36,59,-18}, -{36,59,-17}, -{36,59,-16}, -{36,59,-15}, -{36,59,-14}, -{36,59,-13}, -{36,59,-12}, -{36,59,-11}, -{36,59,-10}, -{36,59,-9}, -{36,59,-8}, -{36,59,-7}, -{36,59,-6}, -{36,59,-5}, -{36,59,-4}, -{36,59,-3}, -{36,59,-2}, -{36,59,-1}, -{36,59,0}, -{36,59,1}, -{36,59,2}, -{36,59,3}, -{36,59,4}, -{36,59,5}, -{36,59,6}, -{36,59,7}, -{36,59,8}, -{36,59,9}, -{36,59,10}, -{36,59,11}, -{36,59,12}, -{36,59,13}, -{36,59,14}, -{36,59,15}, -{36,59,16}, -{36,59,17}, -{36,59,18}, -{36,59,19}, -{36,59,20}, -{36,59,21}, -{36,59,22}, -{36,59,23}, -{36,59,24}, -{36,59,25}, -{36,59,26}, -{36,59,27}, -{36,59,28}, -{36,59,29}, -{36,59,30}, -{36,59,31}, -{36,59,32}, -{36,59,33}, -{36,59,34}, -{36,59,35}, -{36,59,36}, -{36,59,37}, -{36,59,38}, -{36,59,39}, -{36,59,40}, -{36,59,41}, -{36,59,42}, -{36,59,43}, -{36,59,44}, -{36,59,45}, -{36,59,46}, -{36,59,47}, -{36,59,48}, -{36,59,49}, -{36,59,50}, -{36,60,-95}, -{36,60,-94}, -{36,60,-93}, -{36,60,-92}, -{36,60,-91}, -{36,60,-90}, -{36,60,-89}, -{36,60,-88}, -{36,60,-87}, -{36,60,-86}, -{36,60,-85}, -{36,60,-84}, -{36,60,-83}, -{36,60,-82}, -{36,60,-81}, -{36,60,-80}, -{36,60,-79}, -{36,60,-78}, -{36,60,-77}, -{36,60,-76}, -{36,60,-75}, -{36,60,-74}, -{36,60,-73}, -{36,60,-72}, -{36,60,-71}, -{36,60,-70}, -{36,60,-69}, -{36,60,-68}, -{36,60,-67}, -{36,60,-66}, -{36,60,-65}, -{36,60,-64}, -{36,60,-63}, -{36,60,-62}, -{36,60,-61}, -{36,60,-60}, -{36,60,-59}, -{36,60,-58}, -{36,60,-57}, -{36,60,-56}, -{36,60,-55}, -{36,60,-54}, -{36,60,-53}, -{36,60,-52}, -{36,60,-51}, -{36,60,-50}, -{36,60,-49}, -{36,60,-48}, -{36,60,-47}, -{36,60,-46}, -{36,60,-45}, -{36,60,-44}, -{36,60,-43}, -{36,60,-42}, -{36,60,-41}, -{36,60,-40}, -{36,60,-39}, -{36,60,-38}, -{36,60,-37}, -{36,60,-36}, -{36,60,-35}, -{36,60,-34}, -{36,60,-33}, -{36,60,-32}, -{36,60,-31}, -{36,60,-30}, -{36,60,-29}, -{36,60,-28}, -{36,60,-27}, -{36,60,-26}, -{36,60,-25}, -{36,60,-24}, -{36,60,-23}, -{36,60,-22}, -{36,60,-21}, -{36,60,-20}, -{36,60,-19}, -{36,60,-18}, -{36,60,-17}, -{36,60,-16}, -{36,60,-15}, -{36,60,-14}, -{36,60,-13}, -{36,60,-12}, -{36,60,-11}, -{36,60,-10}, -{36,60,-9}, -{36,60,-8}, -{36,60,-7}, -{36,60,-6}, -{36,60,-5}, -{36,60,-4}, -{36,60,-3}, -{36,60,-2}, -{36,60,-1}, -{36,60,0}, -{36,60,1}, -{36,60,2}, -{36,60,3}, -{36,60,4}, -{36,60,5}, -{36,60,6}, -{36,60,7}, -{36,60,8}, -{36,60,9}, -{36,60,10}, -{36,60,11}, -{36,60,12}, -{36,60,13}, -{36,60,14}, -{36,60,15}, -{36,60,16}, -{36,60,17}, -{36,60,18}, -{36,60,19}, -{36,60,20}, -{36,60,21}, -{36,60,22}, -{36,60,23}, -{36,60,24}, -{36,60,25}, -{36,60,26}, -{36,60,27}, -{36,60,28}, -{36,60,29}, -{36,60,30}, -{36,60,31}, -{36,60,32}, -{36,60,33}, -{36,60,34}, -{36,60,35}, -{36,60,36}, -{36,60,37}, -{36,60,38}, -{36,60,39}, -{36,60,40}, -{36,60,41}, -{36,60,42}, -{36,60,43}, -{36,60,44}, -{36,60,45}, -{36,60,46}, -{36,60,47}, -{36,60,48}, -{36,60,49}, -{36,60,50}, -{36,61,-95}, -{36,61,-94}, -{36,61,-93}, -{36,61,-92}, -{36,61,-91}, -{36,61,-90}, -{36,61,-89}, -{36,61,-88}, -{36,61,-87}, -{36,61,-86}, -{36,61,-85}, -{36,61,-84}, -{36,61,-83}, -{36,61,-82}, -{36,61,-81}, -{36,61,-80}, -{36,61,-79}, -{36,61,-78}, -{36,61,-77}, -{36,61,-76}, -{36,61,-75}, -{36,61,-74}, -{36,61,-73}, -{36,61,-72}, -{36,61,-71}, -{36,61,-70}, -{36,61,-69}, -{36,61,-68}, -{36,61,-67}, -{36,61,-66}, -{36,61,-65}, -{36,61,-64}, -{36,61,-63}, -{36,61,-62}, -{36,61,-61}, -{36,61,-60}, -{36,61,-59}, -{36,61,-58}, -{36,61,-57}, -{36,61,-56}, -{36,61,-55}, -{36,61,-54}, -{36,61,-53}, -{36,61,-52}, -{36,61,-51}, -{36,61,-50}, -{36,61,-49}, -{36,61,-48}, -{36,61,-47}, -{36,61,-46}, -{36,61,-45}, -{36,61,-44}, -{36,61,-43}, -{36,61,-42}, -{36,61,-41}, -{36,61,-40}, -{36,61,-39}, -{36,61,-38}, -{36,61,-37}, -{36,61,-36}, -{36,61,-35}, -{36,61,-34}, -{36,61,-33}, -{36,61,-32}, -{36,61,-31}, -{36,61,-30}, -{36,61,-29}, -{36,61,-28}, -{36,61,-27}, -{36,61,-26}, -{36,61,-25}, -{36,61,-24}, -{36,61,-23}, -{36,61,-22}, -{36,61,-21}, -{36,61,-20}, -{36,61,-19}, -{36,61,-18}, -{36,61,-17}, -{36,61,-16}, -{36,61,-15}, -{36,61,-14}, -{36,61,-13}, -{36,61,-12}, -{36,61,-11}, -{36,61,-10}, -{36,61,-9}, -{36,61,-8}, -{36,61,-7}, -{36,61,-6}, -{36,61,-5}, -{36,61,-4}, -{36,61,-3}, -{36,61,-2}, -{36,61,-1}, -{36,61,0}, -{36,61,1}, -{36,61,2}, -{36,61,3}, -{36,61,4}, -{36,61,5}, -{36,61,6}, -{36,61,7}, -{36,61,8}, -{36,61,9}, -{36,61,10}, -{36,61,11}, -{36,61,12}, -{36,61,13}, -{36,61,14}, -{36,61,15}, -{36,61,16}, -{36,61,17}, -{36,61,18}, -{36,61,19}, -{36,61,20}, -{36,61,21}, -{36,61,22}, -{36,61,23}, -{36,61,24}, -{36,62,-96}, -{36,62,-95}, -{36,62,-94}, -{36,62,-93}, -{36,62,-92}, -{36,62,-91}, -{36,62,-90}, -{36,62,-89}, -{36,62,-88}, -{36,62,-87}, -{36,62,-86}, -{36,62,-85}, -{36,62,-84}, -{36,62,-83}, -{36,62,-82}, -{36,62,-81}, -{36,62,-80}, -{36,62,-79}, -{36,62,-78}, -{36,62,-77}, -{36,62,-76}, -{36,62,-75}, -{36,62,-74}, -{36,62,-73}, -{36,62,-72}, -{36,62,-71}, -{36,62,-70}, -{36,62,-69}, -{36,62,-68}, -{36,62,-67}, -{36,62,-66}, -{36,62,-65}, -{36,62,-64}, -{36,62,-63}, -{36,62,-62}, -{36,62,-61}, -{36,62,-60}, -{36,62,-59}, -{36,62,-58}, -{36,62,-57}, -{36,62,-56}, -{36,62,-55}, -{36,62,-54}, -{36,62,-53}, -{36,62,-52}, -{36,62,-51}, -{36,62,-50}, -{36,62,-49}, -{36,62,-48}, -{36,62,-47}, -{36,62,-46}, -{36,62,-45}, -{36,62,-44}, -{36,62,-43}, -{36,62,-42}, -{36,62,-41}, -{36,62,-40}, -{36,62,-39}, -{36,62,-38}, -{36,62,-37}, -{36,62,-36}, -{36,62,-35}, -{36,62,-34}, -{36,62,-33}, -{36,62,-32}, -{36,62,-31}, -{36,62,-30}, -{36,62,-29}, -{36,62,-28}, -{36,62,-27}, -{36,62,-26}, -{36,62,-25}, -{36,62,-24}, -{36,62,-23}, -{36,62,-22}, -{36,62,-21}, -{36,62,-20}, -{36,62,-19}, -{36,62,-18}, -{36,62,-17}, -{36,62,-16}, -{36,62,-15}, -{36,62,-14}, -{36,62,-13}, -{36,62,-12}, -{36,62,-11}, -{36,62,-10}, -{36,62,-9}, -{36,62,-8}, -{36,62,-7}, -{36,62,-6}, -{36,62,-5}, -{36,62,-4}, -{36,62,-3}, -{36,62,-2}, -{36,62,-1}, -{36,62,0}, -{36,62,1}, -{36,62,2}, -{36,62,3}, -{36,62,4}, -{36,62,5}, -{36,63,-97}, -{36,63,-96}, -{36,63,-95}, -{36,63,-94}, -{36,63,-93}, -{36,63,-92}, -{36,63,-91}, -{36,63,-90}, -{36,63,-89}, -{36,63,-88}, -{36,63,-87}, -{36,63,-86}, -{36,63,-85}, -{36,63,-84}, -{36,63,-83}, -{36,63,-82}, -{36,63,-81}, -{36,63,-80}, -{36,63,-79}, -{36,63,-78}, -{36,63,-77}, -{36,63,-76}, -{36,63,-75}, -{36,63,-74}, -{36,63,-73}, -{36,63,-72}, -{36,63,-71}, -{36,63,-70}, -{36,63,-69}, -{36,63,-68}, -{36,63,-67}, -{36,63,-66}, -{36,63,-65}, -{36,63,-64}, -{36,63,-63}, -{36,63,-62}, -{36,63,-61}, -{36,63,-60}, -{36,63,-59}, -{36,63,-58}, -{36,63,-57}, -{36,63,-56}, -{36,63,-55}, -{36,63,-54}, -{36,63,-53}, -{36,63,-52}, -{36,63,-51}, -{36,63,-50}, -{36,63,-49}, -{36,63,-48}, -{36,63,-47}, -{36,63,-46}, -{36,63,-45}, -{36,63,-44}, -{36,63,-43}, -{36,63,-42}, -{36,63,-41}, -{36,63,-40}, -{36,63,-39}, -{36,63,-38}, -{36,63,-37}, -{36,63,-36}, -{36,63,-35}, -{36,63,-34}, -{36,63,-33}, -{36,63,-32}, -{36,63,-31}, -{36,63,-30}, -{36,63,-29}, -{36,63,-28}, -{36,63,-27}, -{36,63,-26}, -{36,63,-25}, -{36,63,-24}, -{36,63,-23}, -{36,63,-22}, -{36,63,-21}, -{36,63,-20}, -{36,63,-19}, -{36,63,-18}, -{36,63,-17}, -{36,63,-16}, -{36,63,-15}, -{36,63,-14}, -{36,63,-13}, -{36,63,-12}, -{36,63,-11}, -{36,63,-10}, -{36,63,-9}, -{36,63,-8}, -{36,64,-98}, -{36,64,-97}, -{36,64,-96}, -{36,64,-95}, -{36,64,-94}, -{36,64,-93}, -{36,64,-92}, -{36,64,-91}, -{36,64,-90}, -{36,64,-89}, -{36,64,-88}, -{36,64,-87}, -{36,64,-86}, -{36,64,-85}, -{36,64,-84}, -{36,64,-83}, -{36,64,-82}, -{36,64,-81}, -{36,64,-80}, -{36,64,-79}, -{36,64,-78}, -{36,64,-77}, -{36,64,-76}, -{36,64,-75}, -{36,64,-74}, -{36,64,-73}, -{36,64,-72}, -{36,64,-71}, -{36,64,-70}, -{36,64,-69}, -{36,64,-68}, -{36,64,-67}, -{36,64,-66}, -{36,64,-65}, -{36,64,-64}, -{36,64,-63}, -{36,64,-62}, -{36,64,-61}, -{36,64,-60}, -{36,64,-59}, -{36,64,-58}, -{36,64,-57}, -{36,64,-56}, -{36,64,-55}, -{36,64,-54}, -{36,64,-53}, -{36,64,-52}, -{36,64,-51}, -{36,64,-50}, -{36,64,-49}, -{36,64,-48}, -{36,64,-47}, -{36,64,-46}, -{36,64,-45}, -{36,64,-44}, -{36,64,-43}, -{36,64,-42}, -{36,64,-41}, -{36,64,-40}, -{36,64,-39}, -{36,64,-38}, -{36,64,-37}, -{36,64,-36}, -{36,64,-35}, -{36,64,-34}, -{36,64,-33}, -{36,64,-32}, -{36,64,-31}, -{36,64,-30}, -{36,64,-29}, -{36,64,-28}, -{36,64,-27}, -{36,64,-26}, -{36,64,-25}, -{36,64,-24}, -{36,64,-23}, -{36,64,-22}, -{36,64,-21}, -{36,64,-20}, -{36,64,-19}, -{36,64,-18}, -{36,65,-99}, -{36,65,-98}, -{36,65,-97}, -{36,65,-96}, -{36,65,-95}, -{36,65,-94}, -{36,65,-93}, -{36,65,-92}, -{36,65,-91}, -{36,65,-90}, -{36,65,-89}, -{36,65,-88}, -{36,65,-87}, -{36,65,-86}, -{36,65,-85}, -{36,65,-84}, -{36,65,-83}, -{36,65,-82}, -{36,65,-81}, -{36,65,-80}, -{36,65,-79}, -{36,65,-78}, -{36,65,-77}, -{36,65,-76}, -{36,65,-75}, -{36,65,-74}, -{36,65,-73}, -{36,65,-72}, -{36,65,-71}, -{36,65,-70}, -{36,65,-69}, -{36,65,-68}, -{36,65,-67}, -{36,65,-66}, -{36,65,-65}, -{36,65,-64}, -{36,65,-63}, -{36,65,-62}, -{36,65,-61}, -{36,65,-60}, -{36,65,-59}, -{36,65,-58}, -{36,65,-57}, -{36,65,-56}, -{36,65,-55}, -{36,65,-54}, -{36,65,-53}, -{36,65,-52}, -{36,65,-51}, -{36,65,-50}, -{36,65,-49}, -{36,65,-48}, -{36,65,-47}, -{36,65,-46}, -{36,65,-45}, -{36,65,-44}, -{36,65,-43}, -{36,65,-42}, -{36,65,-41}, -{36,65,-40}, -{36,65,-39}, -{36,65,-38}, -{36,65,-37}, -{36,65,-36}, -{36,65,-35}, -{36,65,-34}, -{36,65,-33}, -{36,65,-32}, -{36,65,-31}, -{36,65,-30}, -{36,65,-29}, -{36,65,-28}, -{36,65,-27}, -{36,66,-100}, -{36,66,-99}, -{36,66,-98}, -{36,66,-97}, -{36,66,-96}, -{36,66,-95}, -{36,66,-94}, -{36,66,-93}, -{36,66,-92}, -{36,66,-91}, -{36,66,-90}, -{36,66,-89}, -{36,66,-88}, -{36,66,-87}, -{36,66,-86}, -{36,66,-85}, -{36,66,-84}, -{36,66,-83}, -{36,66,-82}, -{36,66,-81}, -{36,66,-80}, -{36,66,-79}, -{36,66,-78}, -{36,66,-77}, -{36,66,-76}, -{36,66,-75}, -{36,66,-74}, -{36,66,-73}, -{36,66,-72}, -{36,66,-71}, -{36,66,-70}, -{36,66,-69}, -{36,66,-68}, -{36,66,-67}, -{36,66,-66}, -{36,66,-65}, -{36,66,-64}, -{36,66,-63}, -{36,66,-62}, -{36,66,-61}, -{36,66,-60}, -{36,66,-59}, -{36,66,-58}, -{36,66,-57}, -{36,66,-56}, -{36,66,-55}, -{36,66,-54}, -{36,66,-53}, -{36,66,-52}, -{36,66,-51}, -{36,66,-50}, -{36,66,-49}, -{36,66,-48}, -{36,66,-47}, -{36,66,-46}, -{36,66,-45}, -{36,66,-44}, -{36,66,-43}, -{36,66,-42}, -{36,66,-41}, -{36,66,-40}, -{36,66,-39}, -{36,66,-38}, -{36,66,-37}, -{36,66,-36}, -{36,66,-35}, -{36,67,-101}, -{36,67,-100}, -{36,67,-99}, -{36,67,-98}, -{36,67,-97}, -{36,67,-96}, -{36,67,-95}, -{36,67,-94}, -{36,67,-93}, -{36,67,-92}, -{36,67,-91}, -{36,67,-90}, -{36,67,-89}, -{36,67,-88}, -{36,67,-87}, -{36,67,-86}, -{36,67,-85}, -{36,67,-84}, -{36,67,-83}, -{36,67,-82}, -{36,67,-81}, -{36,67,-80}, -{36,67,-79}, -{36,67,-78}, -{36,67,-77}, -{36,67,-76}, -{36,67,-75}, -{36,67,-74}, -{36,67,-73}, -{36,67,-72}, -{36,67,-71}, -{36,67,-70}, -{36,67,-69}, -{36,67,-68}, -{36,67,-67}, -{36,67,-66}, -{36,67,-65}, -{36,67,-64}, -{36,67,-63}, -{36,67,-62}, -{36,67,-61}, -{36,67,-60}, -{36,67,-59}, -{36,67,-58}, -{36,67,-57}, -{36,67,-56}, -{36,67,-55}, -{36,67,-54}, -{36,67,-53}, -{36,67,-52}, -{36,67,-51}, -{36,67,-50}, -{36,67,-49}, -{36,67,-48}, -{36,67,-47}, -{36,67,-46}, -{36,67,-45}, -{36,67,-44}, -{36,67,-43}, -{36,67,-42}, -{36,67,-41}, -{36,68,-101}, -{36,68,-100}, -{36,68,-99}, -{36,68,-98}, -{36,68,-97}, -{36,68,-96}, -{36,68,-95}, -{36,68,-94}, -{36,68,-93}, -{36,68,-92}, -{36,68,-91}, -{36,68,-90}, -{36,68,-89}, -{36,68,-88}, -{36,68,-87}, -{36,68,-86}, -{36,68,-85}, -{36,68,-84}, -{36,68,-83}, -{36,68,-82}, -{36,68,-81}, -{36,68,-80}, -{36,68,-79}, -{36,68,-78}, -{36,68,-77}, -{36,68,-76}, -{36,68,-75}, -{36,68,-74}, -{36,68,-73}, -{36,68,-72}, -{36,68,-71}, -{36,68,-70}, -{36,68,-69}, -{36,68,-68}, -{36,68,-67}, -{36,68,-66}, -{36,68,-65}, -{36,68,-64}, -{36,68,-63}, -{36,68,-62}, -{36,68,-61}, -{36,68,-60}, -{36,68,-59}, -{36,68,-58}, -{36,68,-57}, -{36,68,-56}, -{36,68,-55}, -{36,68,-54}, -{36,68,-53}, -{36,68,-52}, -{36,68,-51}, -{36,68,-50}, -{36,68,-49}, -{36,68,-48}, -{36,69,-101}, -{36,69,-100}, -{36,69,-99}, -{36,69,-98}, -{36,69,-97}, -{36,69,-96}, -{36,69,-95}, -{36,69,-94}, -{36,69,-93}, -{36,69,-92}, -{36,69,-91}, -{36,69,-90}, -{36,69,-89}, -{36,69,-88}, -{36,69,-87}, -{36,69,-86}, -{36,69,-85}, -{36,69,-84}, -{36,69,-83}, -{36,69,-82}, -{36,69,-81}, -{36,69,-80}, -{36,69,-79}, -{36,69,-78}, -{36,69,-77}, -{36,69,-76}, -{36,69,-75}, -{36,69,-74}, -{36,69,-73}, -{36,69,-72}, -{36,69,-71}, -{36,69,-70}, -{36,69,-69}, -{36,69,-68}, -{36,69,-67}, -{36,69,-66}, -{36,69,-65}, -{36,69,-64}, -{36,69,-63}, -{36,69,-62}, -{36,69,-61}, -{36,69,-60}, -{36,69,-59}, -{36,69,-58}, -{36,69,-57}, -{36,69,-56}, -{36,69,-55}, -{36,69,-54}, -{36,69,-53}, -{36,70,-101}, -{36,70,-100}, -{36,70,-99}, -{36,70,-98}, -{36,70,-97}, -{36,70,-96}, -{36,70,-95}, -{36,70,-94}, -{36,70,-93}, -{36,70,-92}, -{36,70,-91}, -{36,70,-90}, -{36,70,-89}, -{36,70,-88}, -{36,70,-87}, -{36,70,-86}, -{36,70,-85}, -{36,70,-84}, -{36,70,-83}, -{36,70,-82}, -{36,70,-81}, -{36,70,-80}, -{36,70,-79}, -{36,70,-78}, -{36,70,-77}, -{36,70,-76}, -{36,70,-75}, -{36,70,-74}, -{36,70,-73}, -{36,70,-72}, -{36,70,-71}, -{36,70,-70}, -{36,70,-69}, -{36,70,-68}, -{36,70,-67}, -{36,70,-66}, -{36,70,-65}, -{36,70,-64}, -{36,70,-63}, -{36,70,-62}, -{36,70,-61}, -{36,70,-60}, -{36,70,-59}, -{36,71,-101}, -{36,71,-100}, -{36,71,-99}, -{36,71,-98}, -{36,71,-97}, -{36,71,-96}, -{36,71,-95}, -{36,71,-94}, -{36,71,-93}, -{36,71,-92}, -{36,71,-91}, -{36,71,-90}, -{36,71,-89}, -{36,71,-88}, -{36,71,-87}, -{36,71,-86}, -{36,71,-85}, -{36,71,-84}, -{36,71,-83}, -{36,71,-82}, -{36,71,-81}, -{36,71,-80}, -{36,71,-79}, -{36,71,-78}, -{36,71,-77}, -{36,71,-76}, -{36,71,-75}, -{36,71,-74}, -{36,71,-73}, -{36,71,-72}, -{36,71,-71}, -{36,71,-70}, -{36,71,-69}, -{36,71,-68}, -{36,71,-67}, -{36,71,-66}, -{36,71,-65}, -{36,71,-64}, -{36,72,-101}, -{36,72,-100}, -{36,72,-99}, -{36,72,-98}, -{36,72,-97}, -{36,72,-96}, -{36,72,-95}, -{36,72,-94}, -{36,72,-93}, -{36,72,-92}, -{36,72,-91}, -{36,72,-90}, -{36,72,-89}, -{36,72,-88}, -{36,72,-87}, -{36,72,-86}, -{36,72,-85}, -{36,72,-84}, -{36,72,-83}, -{36,72,-82}, -{36,72,-81}, -{36,72,-80}, -{36,72,-79}, -{36,72,-78}, -{36,72,-77}, -{36,72,-76}, -{36,72,-75}, -{36,72,-74}, -{36,72,-73}, -{36,72,-72}, -{36,72,-71}, -{36,72,-70}, -{36,72,-69}, -{36,72,-68}, -{36,73,-101}, -{36,73,-100}, -{36,73,-99}, -{36,73,-98}, -{36,73,-97}, -{36,73,-96}, -{36,73,-95}, -{36,73,-94}, -{36,73,-93}, -{36,73,-92}, -{36,73,-91}, -{36,73,-90}, -{36,73,-89}, -{36,73,-88}, -{36,73,-87}, -{36,73,-86}, -{36,73,-85}, -{36,73,-84}, -{36,73,-83}, -{36,73,-82}, -{36,73,-81}, -{36,73,-80}, -{36,73,-79}, -{36,73,-78}, -{36,73,-77}, -{36,73,-76}, -{36,73,-75}, -{36,73,-74}, -{36,73,-73}, -{36,74,-101}, -{36,74,-100}, -{36,74,-99}, -{36,74,-98}, -{36,74,-97}, -{36,74,-96}, -{36,74,-95}, -{36,74,-94}, -{36,74,-93}, -{36,74,-92}, -{36,74,-91}, -{36,74,-90}, -{36,74,-89}, -{36,74,-88}, -{36,74,-87}, -{36,74,-86}, -{36,74,-85}, -{36,74,-84}, -{36,74,-83}, -{36,74,-82}, -{36,74,-81}, -{36,74,-80}, -{36,74,-79}, -{36,74,-78}, -{36,74,-77}, -{36,75,-101}, -{36,75,-100}, -{36,75,-99}, -{36,75,-98}, -{36,75,-97}, -{36,75,-96}, -{36,75,-95}, -{36,75,-94}, -{36,75,-93}, -{36,75,-92}, -{36,75,-91}, -{36,75,-90}, -{36,75,-89}, -{36,75,-88}, -{36,75,-87}, -{36,75,-86}, -{36,75,-85}, -{36,75,-84}, -{36,75,-83}, -{36,75,-82}, -{36,75,-81}, -{36,76,-101}, -{36,76,-100}, -{36,76,-99}, -{36,76,-98}, -{36,76,-97}, -{36,76,-96}, -{36,76,-95}, -{36,76,-94}, -{36,76,-93}, -{36,76,-92}, -{36,76,-91}, -{36,76,-90}, -{36,76,-89}, -{36,76,-88}, -{36,76,-87}, -{36,76,-86}, -{36,76,-85}, -{36,77,-101}, -{36,77,-100}, -{36,77,-99}, -{36,77,-98}, -{36,77,-97}, -{36,77,-96}, -{36,77,-95}, -{36,77,-94}, -{36,77,-93}, -{36,77,-92}, -{36,77,-91}, -{36,77,-90}, -{36,77,-89}, -{36,78,-101}, -{36,78,-100}, -{36,78,-99}, -{36,78,-98}, -{36,78,-97}, -{36,78,-96}, -{36,78,-95}, -{36,78,-94}, -{36,78,-93}, -{36,79,-101}, -{36,79,-100}, -{36,79,-99}, -{36,79,-98}, -{36,79,-97}, -{36,79,-96}, -{36,80,-101}, -{36,80,-100}, -{37,-44,42}, -{37,-43,37}, -{37,-43,38}, -{37,-43,39}, -{37,-43,40}, -{37,-43,41}, -{37,-43,42}, -{37,-42,33}, -{37,-42,34}, -{37,-42,35}, -{37,-42,36}, -{37,-42,37}, -{37,-42,38}, -{37,-42,39}, -{37,-42,40}, -{37,-42,41}, -{37,-42,42}, -{37,-41,30}, -{37,-41,31}, -{37,-41,32}, -{37,-41,33}, -{37,-41,34}, -{37,-41,35}, -{37,-41,36}, -{37,-41,37}, -{37,-41,38}, -{37,-41,39}, -{37,-41,40}, -{37,-41,41}, -{37,-41,42}, -{37,-40,27}, -{37,-40,28}, -{37,-40,29}, -{37,-40,30}, -{37,-40,31}, -{37,-40,32}, -{37,-40,33}, -{37,-40,34}, -{37,-40,35}, -{37,-40,36}, -{37,-40,37}, -{37,-40,38}, -{37,-40,39}, -{37,-40,40}, -{37,-40,41}, -{37,-40,42}, -{37,-39,24}, -{37,-39,25}, -{37,-39,26}, -{37,-39,27}, -{37,-39,28}, -{37,-39,29}, -{37,-39,30}, -{37,-39,31}, -{37,-39,32}, -{37,-39,33}, -{37,-39,34}, -{37,-39,35}, -{37,-39,36}, -{37,-39,37}, -{37,-39,38}, -{37,-39,39}, -{37,-39,40}, -{37,-39,41}, -{37,-39,42}, -{37,-38,21}, -{37,-38,22}, -{37,-38,23}, -{37,-38,24}, -{37,-38,25}, -{37,-38,26}, -{37,-38,27}, -{37,-38,28}, -{37,-38,29}, -{37,-38,30}, -{37,-38,31}, -{37,-38,32}, -{37,-38,33}, -{37,-38,34}, -{37,-38,35}, -{37,-38,36}, -{37,-38,37}, -{37,-38,38}, -{37,-38,39}, -{37,-38,40}, -{37,-38,41}, -{37,-38,42}, -{37,-37,19}, -{37,-37,20}, -{37,-37,21}, -{37,-37,22}, -{37,-37,23}, -{37,-37,24}, -{37,-37,25}, -{37,-37,26}, -{37,-37,27}, -{37,-37,28}, -{37,-37,29}, -{37,-37,30}, -{37,-37,31}, -{37,-37,32}, -{37,-37,33}, -{37,-37,34}, -{37,-37,35}, -{37,-37,36}, -{37,-37,37}, -{37,-37,38}, -{37,-37,39}, -{37,-37,40}, -{37,-37,41}, -{37,-37,42}, -{37,-36,16}, -{37,-36,17}, -{37,-36,18}, -{37,-36,19}, -{37,-36,20}, -{37,-36,21}, -{37,-36,22}, -{37,-36,23}, -{37,-36,24}, -{37,-36,25}, -{37,-36,26}, -{37,-36,27}, -{37,-36,28}, -{37,-36,29}, -{37,-36,30}, -{37,-36,31}, -{37,-36,32}, -{37,-36,33}, -{37,-36,34}, -{37,-36,35}, -{37,-36,36}, -{37,-36,37}, -{37,-36,38}, -{37,-36,39}, -{37,-36,40}, -{37,-36,41}, -{37,-36,42}, -{37,-36,43}, -{37,-35,14}, -{37,-35,15}, -{37,-35,16}, -{37,-35,17}, -{37,-35,18}, -{37,-35,19}, -{37,-35,20}, -{37,-35,21}, -{37,-35,22}, -{37,-35,23}, -{37,-35,24}, -{37,-35,25}, -{37,-35,26}, -{37,-35,27}, -{37,-35,28}, -{37,-35,29}, -{37,-35,30}, -{37,-35,31}, -{37,-35,32}, -{37,-35,33}, -{37,-35,34}, -{37,-35,35}, -{37,-35,36}, -{37,-35,37}, -{37,-35,38}, -{37,-35,39}, -{37,-35,40}, -{37,-35,41}, -{37,-35,42}, -{37,-35,43}, -{37,-34,12}, -{37,-34,13}, -{37,-34,14}, -{37,-34,15}, -{37,-34,16}, -{37,-34,17}, -{37,-34,18}, -{37,-34,19}, -{37,-34,20}, -{37,-34,21}, -{37,-34,22}, -{37,-34,23}, -{37,-34,24}, -{37,-34,25}, -{37,-34,26}, -{37,-34,27}, -{37,-34,28}, -{37,-34,29}, -{37,-34,30}, -{37,-34,31}, -{37,-34,32}, -{37,-34,33}, -{37,-34,34}, -{37,-34,35}, -{37,-34,36}, -{37,-34,37}, -{37,-34,38}, -{37,-34,39}, -{37,-34,40}, -{37,-34,41}, -{37,-34,42}, -{37,-34,43}, -{37,-33,10}, -{37,-33,11}, -{37,-33,12}, -{37,-33,13}, -{37,-33,14}, -{37,-33,15}, -{37,-33,16}, -{37,-33,17}, -{37,-33,18}, -{37,-33,19}, -{37,-33,20}, -{37,-33,21}, -{37,-33,22}, -{37,-33,23}, -{37,-33,24}, -{37,-33,25}, -{37,-33,26}, -{37,-33,27}, -{37,-33,28}, -{37,-33,29}, -{37,-33,30}, -{37,-33,31}, -{37,-33,32}, -{37,-33,33}, -{37,-33,34}, -{37,-33,35}, -{37,-33,36}, -{37,-33,37}, -{37,-33,38}, -{37,-33,39}, -{37,-33,40}, -{37,-33,41}, -{37,-33,42}, -{37,-33,43}, -{37,-32,8}, -{37,-32,9}, -{37,-32,10}, -{37,-32,11}, -{37,-32,12}, -{37,-32,13}, -{37,-32,14}, -{37,-32,15}, -{37,-32,16}, -{37,-32,17}, -{37,-32,18}, -{37,-32,19}, -{37,-32,20}, -{37,-32,21}, -{37,-32,22}, -{37,-32,23}, -{37,-32,24}, -{37,-32,25}, -{37,-32,26}, -{37,-32,27}, -{37,-32,28}, -{37,-32,29}, -{37,-32,30}, -{37,-32,31}, -{37,-32,32}, -{37,-32,33}, -{37,-32,34}, -{37,-32,35}, -{37,-32,36}, -{37,-32,37}, -{37,-32,38}, -{37,-32,39}, -{37,-32,40}, -{37,-32,41}, -{37,-32,42}, -{37,-32,43}, -{37,-31,6}, -{37,-31,7}, -{37,-31,8}, -{37,-31,9}, -{37,-31,10}, -{37,-31,11}, -{37,-31,12}, -{37,-31,13}, -{37,-31,14}, -{37,-31,15}, -{37,-31,16}, -{37,-31,17}, -{37,-31,18}, -{37,-31,19}, -{37,-31,20}, -{37,-31,21}, -{37,-31,22}, -{37,-31,23}, -{37,-31,24}, -{37,-31,25}, -{37,-31,26}, -{37,-31,27}, -{37,-31,28}, -{37,-31,29}, -{37,-31,30}, -{37,-31,31}, -{37,-31,32}, -{37,-31,33}, -{37,-31,34}, -{37,-31,35}, -{37,-31,36}, -{37,-31,37}, -{37,-31,38}, -{37,-31,39}, -{37,-31,40}, -{37,-31,41}, -{37,-31,42}, -{37,-31,43}, -{37,-30,4}, -{37,-30,5}, -{37,-30,6}, -{37,-30,7}, -{37,-30,8}, -{37,-30,9}, -{37,-30,10}, -{37,-30,11}, -{37,-30,12}, -{37,-30,13}, -{37,-30,14}, -{37,-30,15}, -{37,-30,16}, -{37,-30,17}, -{37,-30,18}, -{37,-30,19}, -{37,-30,20}, -{37,-30,21}, -{37,-30,22}, -{37,-30,23}, -{37,-30,24}, -{37,-30,25}, -{37,-30,26}, -{37,-30,27}, -{37,-30,28}, -{37,-30,29}, -{37,-30,30}, -{37,-30,31}, -{37,-30,32}, -{37,-30,33}, -{37,-30,34}, -{37,-30,35}, -{37,-30,36}, -{37,-30,37}, -{37,-30,38}, -{37,-30,39}, -{37,-30,40}, -{37,-30,41}, -{37,-30,42}, -{37,-30,43}, -{37,-29,2}, -{37,-29,3}, -{37,-29,4}, -{37,-29,5}, -{37,-29,6}, -{37,-29,7}, -{37,-29,8}, -{37,-29,9}, -{37,-29,10}, -{37,-29,11}, -{37,-29,12}, -{37,-29,13}, -{37,-29,14}, -{37,-29,15}, -{37,-29,16}, -{37,-29,17}, -{37,-29,18}, -{37,-29,19}, -{37,-29,20}, -{37,-29,21}, -{37,-29,22}, -{37,-29,23}, -{37,-29,24}, -{37,-29,25}, -{37,-29,26}, -{37,-29,27}, -{37,-29,28}, -{37,-29,29}, -{37,-29,30}, -{37,-29,31}, -{37,-29,32}, -{37,-29,33}, -{37,-29,34}, -{37,-29,35}, -{37,-29,36}, -{37,-29,37}, -{37,-29,38}, -{37,-29,39}, -{37,-29,40}, -{37,-29,41}, -{37,-29,42}, -{37,-29,43}, -{37,-28,0}, -{37,-28,1}, -{37,-28,2}, -{37,-28,3}, -{37,-28,4}, -{37,-28,5}, -{37,-28,6}, -{37,-28,7}, -{37,-28,8}, -{37,-28,9}, -{37,-28,10}, -{37,-28,11}, -{37,-28,12}, -{37,-28,13}, -{37,-28,14}, -{37,-28,15}, -{37,-28,16}, -{37,-28,17}, -{37,-28,18}, -{37,-28,19}, -{37,-28,20}, -{37,-28,21}, -{37,-28,22}, -{37,-28,23}, -{37,-28,24}, -{37,-28,25}, -{37,-28,26}, -{37,-28,27}, -{37,-28,28}, -{37,-28,29}, -{37,-28,30}, -{37,-28,31}, -{37,-28,32}, -{37,-28,33}, -{37,-28,34}, -{37,-28,35}, -{37,-28,36}, -{37,-28,37}, -{37,-28,38}, -{37,-28,39}, -{37,-28,40}, -{37,-28,41}, -{37,-28,42}, -{37,-28,43}, -{37,-27,-2}, -{37,-27,-1}, -{37,-27,0}, -{37,-27,1}, -{37,-27,2}, -{37,-27,3}, -{37,-27,4}, -{37,-27,5}, -{37,-27,6}, -{37,-27,7}, -{37,-27,8}, -{37,-27,9}, -{37,-27,10}, -{37,-27,11}, -{37,-27,12}, -{37,-27,13}, -{37,-27,14}, -{37,-27,15}, -{37,-27,16}, -{37,-27,17}, -{37,-27,18}, -{37,-27,19}, -{37,-27,20}, -{37,-27,21}, -{37,-27,22}, -{37,-27,23}, -{37,-27,24}, -{37,-27,25}, -{37,-27,26}, -{37,-27,27}, -{37,-27,28}, -{37,-27,29}, -{37,-27,30}, -{37,-27,31}, -{37,-27,32}, -{37,-27,33}, -{37,-27,34}, -{37,-27,35}, -{37,-27,36}, -{37,-27,37}, -{37,-27,38}, -{37,-27,39}, -{37,-27,40}, -{37,-27,41}, -{37,-27,42}, -{37,-27,43}, -{37,-26,-3}, -{37,-26,-2}, -{37,-26,-1}, -{37,-26,0}, -{37,-26,1}, -{37,-26,2}, -{37,-26,3}, -{37,-26,4}, -{37,-26,5}, -{37,-26,6}, -{37,-26,7}, -{37,-26,8}, -{37,-26,9}, -{37,-26,10}, -{37,-26,11}, -{37,-26,12}, -{37,-26,13}, -{37,-26,14}, -{37,-26,15}, -{37,-26,16}, -{37,-26,17}, -{37,-26,18}, -{37,-26,19}, -{37,-26,20}, -{37,-26,21}, -{37,-26,22}, -{37,-26,23}, -{37,-26,24}, -{37,-26,25}, -{37,-26,26}, -{37,-26,27}, -{37,-26,28}, -{37,-26,29}, -{37,-26,30}, -{37,-26,31}, -{37,-26,32}, -{37,-26,33}, -{37,-26,34}, -{37,-26,35}, -{37,-26,36}, -{37,-26,37}, -{37,-26,38}, -{37,-26,39}, -{37,-26,40}, -{37,-26,41}, -{37,-26,42}, -{37,-26,43}, -{37,-25,-5}, -{37,-25,-4}, -{37,-25,-3}, -{37,-25,-2}, -{37,-25,-1}, -{37,-25,0}, -{37,-25,1}, -{37,-25,2}, -{37,-25,3}, -{37,-25,4}, -{37,-25,5}, -{37,-25,6}, -{37,-25,7}, -{37,-25,8}, -{37,-25,9}, -{37,-25,10}, -{37,-25,11}, -{37,-25,12}, -{37,-25,13}, -{37,-25,14}, -{37,-25,15}, -{37,-25,16}, -{37,-25,17}, -{37,-25,18}, -{37,-25,19}, -{37,-25,20}, -{37,-25,21}, -{37,-25,22}, -{37,-25,23}, -{37,-25,24}, -{37,-25,25}, -{37,-25,26}, -{37,-25,27}, -{37,-25,28}, -{37,-25,29}, -{37,-25,30}, -{37,-25,31}, -{37,-25,32}, -{37,-25,33}, -{37,-25,34}, -{37,-25,35}, -{37,-25,36}, -{37,-25,37}, -{37,-25,38}, -{37,-25,39}, -{37,-25,40}, -{37,-25,41}, -{37,-25,42}, -{37,-25,43}, -{37,-24,-6}, -{37,-24,-5}, -{37,-24,-4}, -{37,-24,-3}, -{37,-24,-2}, -{37,-24,-1}, -{37,-24,0}, -{37,-24,1}, -{37,-24,2}, -{37,-24,3}, -{37,-24,4}, -{37,-24,5}, -{37,-24,6}, -{37,-24,7}, -{37,-24,8}, -{37,-24,9}, -{37,-24,10}, -{37,-24,11}, -{37,-24,12}, -{37,-24,13}, -{37,-24,14}, -{37,-24,15}, -{37,-24,16}, -{37,-24,17}, -{37,-24,18}, -{37,-24,19}, -{37,-24,20}, -{37,-24,21}, -{37,-24,22}, -{37,-24,23}, -{37,-24,24}, -{37,-24,25}, -{37,-24,26}, -{37,-24,27}, -{37,-24,28}, -{37,-24,29}, -{37,-24,30}, -{37,-24,31}, -{37,-24,32}, -{37,-24,33}, -{37,-24,34}, -{37,-24,35}, -{37,-24,36}, -{37,-24,37}, -{37,-24,38}, -{37,-24,39}, -{37,-24,40}, -{37,-24,41}, -{37,-24,42}, -{37,-24,43}, -{37,-23,-8}, -{37,-23,-7}, -{37,-23,-6}, -{37,-23,-5}, -{37,-23,-4}, -{37,-23,-3}, -{37,-23,-2}, -{37,-23,-1}, -{37,-23,0}, -{37,-23,1}, -{37,-23,2}, -{37,-23,3}, -{37,-23,4}, -{37,-23,5}, -{37,-23,6}, -{37,-23,7}, -{37,-23,8}, -{37,-23,9}, -{37,-23,10}, -{37,-23,11}, -{37,-23,12}, -{37,-23,13}, -{37,-23,14}, -{37,-23,15}, -{37,-23,16}, -{37,-23,17}, -{37,-23,18}, -{37,-23,19}, -{37,-23,20}, -{37,-23,21}, -{37,-23,22}, -{37,-23,23}, -{37,-23,24}, -{37,-23,25}, -{37,-23,26}, -{37,-23,27}, -{37,-23,28}, -{37,-23,29}, -{37,-23,30}, -{37,-23,31}, -{37,-23,32}, -{37,-23,33}, -{37,-23,34}, -{37,-23,35}, -{37,-23,36}, -{37,-23,37}, -{37,-23,38}, -{37,-23,39}, -{37,-23,40}, -{37,-23,41}, -{37,-23,42}, -{37,-23,43}, -{37,-22,-10}, -{37,-22,-9}, -{37,-22,-8}, -{37,-22,-7}, -{37,-22,-6}, -{37,-22,-5}, -{37,-22,-4}, -{37,-22,-3}, -{37,-22,-2}, -{37,-22,-1}, -{37,-22,0}, -{37,-22,1}, -{37,-22,2}, -{37,-22,3}, -{37,-22,4}, -{37,-22,5}, -{37,-22,6}, -{37,-22,7}, -{37,-22,8}, -{37,-22,9}, -{37,-22,10}, -{37,-22,11}, -{37,-22,12}, -{37,-22,13}, -{37,-22,14}, -{37,-22,15}, -{37,-22,16}, -{37,-22,17}, -{37,-22,18}, -{37,-22,19}, -{37,-22,20}, -{37,-22,21}, -{37,-22,22}, -{37,-22,23}, -{37,-22,24}, -{37,-22,25}, -{37,-22,26}, -{37,-22,27}, -{37,-22,28}, -{37,-22,29}, -{37,-22,30}, -{37,-22,31}, -{37,-22,32}, -{37,-22,33}, -{37,-22,34}, -{37,-22,35}, -{37,-22,36}, -{37,-22,37}, -{37,-22,38}, -{37,-22,39}, -{37,-22,40}, -{37,-22,41}, -{37,-22,42}, -{37,-22,43}, -{37,-21,-11}, -{37,-21,-10}, -{37,-21,-9}, -{37,-21,-8}, -{37,-21,-7}, -{37,-21,-6}, -{37,-21,-5}, -{37,-21,-4}, -{37,-21,-3}, -{37,-21,-2}, -{37,-21,-1}, -{37,-21,0}, -{37,-21,1}, -{37,-21,2}, -{37,-21,3}, -{37,-21,4}, -{37,-21,5}, -{37,-21,6}, -{37,-21,7}, -{37,-21,8}, -{37,-21,9}, -{37,-21,10}, -{37,-21,11}, -{37,-21,12}, -{37,-21,13}, -{37,-21,14}, -{37,-21,15}, -{37,-21,16}, -{37,-21,17}, -{37,-21,18}, -{37,-21,19}, -{37,-21,20}, -{37,-21,21}, -{37,-21,22}, -{37,-21,23}, -{37,-21,24}, -{37,-21,25}, -{37,-21,26}, -{37,-21,27}, -{37,-21,28}, -{37,-21,29}, -{37,-21,30}, -{37,-21,31}, -{37,-21,32}, -{37,-21,33}, -{37,-21,34}, -{37,-21,35}, -{37,-21,36}, -{37,-21,37}, -{37,-21,38}, -{37,-21,39}, -{37,-21,40}, -{37,-21,41}, -{37,-21,42}, -{37,-21,43}, -{37,-20,-12}, -{37,-20,-11}, -{37,-20,-10}, -{37,-20,-9}, -{37,-20,-8}, -{37,-20,-7}, -{37,-20,-6}, -{37,-20,-5}, -{37,-20,-4}, -{37,-20,-3}, -{37,-20,-2}, -{37,-20,-1}, -{37,-20,0}, -{37,-20,1}, -{37,-20,2}, -{37,-20,3}, -{37,-20,4}, -{37,-20,5}, -{37,-20,6}, -{37,-20,7}, -{37,-20,8}, -{37,-20,9}, -{37,-20,10}, -{37,-20,11}, -{37,-20,12}, -{37,-20,13}, -{37,-20,14}, -{37,-20,15}, -{37,-20,16}, -{37,-20,17}, -{37,-20,18}, -{37,-20,19}, -{37,-20,20}, -{37,-20,21}, -{37,-20,22}, -{37,-20,23}, -{37,-20,24}, -{37,-20,25}, -{37,-20,26}, -{37,-20,27}, -{37,-20,28}, -{37,-20,29}, -{37,-20,30}, -{37,-20,31}, -{37,-20,32}, -{37,-20,33}, -{37,-20,34}, -{37,-20,35}, -{37,-20,36}, -{37,-20,37}, -{37,-20,38}, -{37,-20,39}, -{37,-20,40}, -{37,-20,41}, -{37,-20,42}, -{37,-20,43}, -{37,-19,-14}, -{37,-19,-13}, -{37,-19,-12}, -{37,-19,-11}, -{37,-19,-10}, -{37,-19,-9}, -{37,-19,-8}, -{37,-19,-7}, -{37,-19,-6}, -{37,-19,-5}, -{37,-19,-4}, -{37,-19,-3}, -{37,-19,-2}, -{37,-19,-1}, -{37,-19,0}, -{37,-19,1}, -{37,-19,2}, -{37,-19,3}, -{37,-19,4}, -{37,-19,5}, -{37,-19,6}, -{37,-19,7}, -{37,-19,8}, -{37,-19,9}, -{37,-19,10}, -{37,-19,11}, -{37,-19,12}, -{37,-19,13}, -{37,-19,14}, -{37,-19,15}, -{37,-19,16}, -{37,-19,17}, -{37,-19,18}, -{37,-19,19}, -{37,-19,20}, -{37,-19,21}, -{37,-19,22}, -{37,-19,23}, -{37,-19,24}, -{37,-19,25}, -{37,-19,26}, -{37,-19,27}, -{37,-19,28}, -{37,-19,29}, -{37,-19,30}, -{37,-19,31}, -{37,-19,32}, -{37,-19,33}, -{37,-19,34}, -{37,-19,35}, -{37,-19,36}, -{37,-19,37}, -{37,-19,38}, -{37,-19,39}, -{37,-19,40}, -{37,-19,41}, -{37,-19,42}, -{37,-19,43}, -{37,-18,-15}, -{37,-18,-14}, -{37,-18,-13}, -{37,-18,-12}, -{37,-18,-11}, -{37,-18,-10}, -{37,-18,-9}, -{37,-18,-8}, -{37,-18,-7}, -{37,-18,-6}, -{37,-18,-5}, -{37,-18,-4}, -{37,-18,-3}, -{37,-18,-2}, -{37,-18,-1}, -{37,-18,0}, -{37,-18,1}, -{37,-18,2}, -{37,-18,3}, -{37,-18,4}, -{37,-18,5}, -{37,-18,6}, -{37,-18,7}, -{37,-18,8}, -{37,-18,9}, -{37,-18,10}, -{37,-18,11}, -{37,-18,12}, -{37,-18,13}, -{37,-18,14}, -{37,-18,15}, -{37,-18,16}, -{37,-18,17}, -{37,-18,18}, -{37,-18,19}, -{37,-18,20}, -{37,-18,21}, -{37,-18,22}, -{37,-18,23}, -{37,-18,24}, -{37,-18,25}, -{37,-18,26}, -{37,-18,27}, -{37,-18,28}, -{37,-18,29}, -{37,-18,30}, -{37,-18,31}, -{37,-18,32}, -{37,-18,33}, -{37,-18,34}, -{37,-18,35}, -{37,-18,36}, -{37,-18,37}, -{37,-18,38}, -{37,-18,39}, -{37,-18,40}, -{37,-18,41}, -{37,-18,42}, -{37,-18,43}, -{37,-17,-17}, -{37,-17,-16}, -{37,-17,-15}, -{37,-17,-14}, -{37,-17,-13}, -{37,-17,-12}, -{37,-17,-11}, -{37,-17,-10}, -{37,-17,-9}, -{37,-17,-8}, -{37,-17,-7}, -{37,-17,-6}, -{37,-17,-5}, -{37,-17,-4}, -{37,-17,-3}, -{37,-17,-2}, -{37,-17,-1}, -{37,-17,0}, -{37,-17,1}, -{37,-17,2}, -{37,-17,3}, -{37,-17,4}, -{37,-17,5}, -{37,-17,6}, -{37,-17,7}, -{37,-17,8}, -{37,-17,9}, -{37,-17,10}, -{37,-17,11}, -{37,-17,12}, -{37,-17,13}, -{37,-17,14}, -{37,-17,15}, -{37,-17,16}, -{37,-17,17}, -{37,-17,18}, -{37,-17,19}, -{37,-17,20}, -{37,-17,21}, -{37,-17,22}, -{37,-17,23}, -{37,-17,24}, -{37,-17,25}, -{37,-17,26}, -{37,-17,27}, -{37,-17,28}, -{37,-17,29}, -{37,-17,30}, -{37,-17,31}, -{37,-17,32}, -{37,-17,33}, -{37,-17,34}, -{37,-17,35}, -{37,-17,36}, -{37,-17,37}, -{37,-17,38}, -{37,-17,39}, -{37,-17,40}, -{37,-17,41}, -{37,-17,42}, -{37,-17,43}, -{37,-17,44}, -{37,-16,-18}, -{37,-16,-17}, -{37,-16,-16}, -{37,-16,-15}, -{37,-16,-14}, -{37,-16,-13}, -{37,-16,-12}, -{37,-16,-11}, -{37,-16,-10}, -{37,-16,-9}, -{37,-16,-8}, -{37,-16,-7}, -{37,-16,-6}, -{37,-16,-5}, -{37,-16,-4}, -{37,-16,-3}, -{37,-16,-2}, -{37,-16,-1}, -{37,-16,0}, -{37,-16,1}, -{37,-16,2}, -{37,-16,3}, -{37,-16,4}, -{37,-16,5}, -{37,-16,6}, -{37,-16,7}, -{37,-16,8}, -{37,-16,9}, -{37,-16,10}, -{37,-16,11}, -{37,-16,12}, -{37,-16,13}, -{37,-16,14}, -{37,-16,15}, -{37,-16,16}, -{37,-16,17}, -{37,-16,18}, -{37,-16,19}, -{37,-16,20}, -{37,-16,21}, -{37,-16,22}, -{37,-16,23}, -{37,-16,24}, -{37,-16,25}, -{37,-16,26}, -{37,-16,27}, -{37,-16,28}, -{37,-16,29}, -{37,-16,30}, -{37,-16,31}, -{37,-16,32}, -{37,-16,33}, -{37,-16,34}, -{37,-16,35}, -{37,-16,36}, -{37,-16,37}, -{37,-16,38}, -{37,-16,39}, -{37,-16,40}, -{37,-16,41}, -{37,-16,42}, -{37,-16,43}, -{37,-16,44}, -{37,-15,-19}, -{37,-15,-18}, -{37,-15,-17}, -{37,-15,-16}, -{37,-15,-15}, -{37,-15,-14}, -{37,-15,-13}, -{37,-15,-12}, -{37,-15,-11}, -{37,-15,-10}, -{37,-15,-9}, -{37,-15,-8}, -{37,-15,-7}, -{37,-15,-6}, -{37,-15,-5}, -{37,-15,-4}, -{37,-15,-3}, -{37,-15,-2}, -{37,-15,-1}, -{37,-15,0}, -{37,-15,1}, -{37,-15,2}, -{37,-15,3}, -{37,-15,4}, -{37,-15,5}, -{37,-15,6}, -{37,-15,7}, -{37,-15,8}, -{37,-15,9}, -{37,-15,10}, -{37,-15,11}, -{37,-15,12}, -{37,-15,13}, -{37,-15,14}, -{37,-15,15}, -{37,-15,16}, -{37,-15,17}, -{37,-15,18}, -{37,-15,19}, -{37,-15,20}, -{37,-15,21}, -{37,-15,22}, -{37,-15,23}, -{37,-15,24}, -{37,-15,25}, -{37,-15,26}, -{37,-15,27}, -{37,-15,28}, -{37,-15,29}, -{37,-15,30}, -{37,-15,31}, -{37,-15,32}, -{37,-15,33}, -{37,-15,34}, -{37,-15,35}, -{37,-15,36}, -{37,-15,37}, -{37,-15,38}, -{37,-15,39}, -{37,-15,40}, -{37,-15,41}, -{37,-15,42}, -{37,-15,43}, -{37,-15,44}, -{37,-14,-21}, -{37,-14,-20}, -{37,-14,-19}, -{37,-14,-18}, -{37,-14,-17}, -{37,-14,-16}, -{37,-14,-15}, -{37,-14,-14}, -{37,-14,-13}, -{37,-14,-12}, -{37,-14,-11}, -{37,-14,-10}, -{37,-14,-9}, -{37,-14,-8}, -{37,-14,-7}, -{37,-14,-6}, -{37,-14,-5}, -{37,-14,-4}, -{37,-14,-3}, -{37,-14,-2}, -{37,-14,-1}, -{37,-14,0}, -{37,-14,1}, -{37,-14,2}, -{37,-14,3}, -{37,-14,4}, -{37,-14,5}, -{37,-14,6}, -{37,-14,7}, -{37,-14,8}, -{37,-14,9}, -{37,-14,10}, -{37,-14,11}, -{37,-14,12}, -{37,-14,13}, -{37,-14,14}, -{37,-14,15}, -{37,-14,16}, -{37,-14,17}, -{37,-14,18}, -{37,-14,19}, -{37,-14,20}, -{37,-14,21}, -{37,-14,22}, -{37,-14,23}, -{37,-14,24}, -{37,-14,25}, -{37,-14,26}, -{37,-14,27}, -{37,-14,28}, -{37,-14,29}, -{37,-14,30}, -{37,-14,31}, -{37,-14,32}, -{37,-14,33}, -{37,-14,34}, -{37,-14,35}, -{37,-14,36}, -{37,-14,37}, -{37,-14,38}, -{37,-14,39}, -{37,-14,40}, -{37,-14,41}, -{37,-14,42}, -{37,-14,43}, -{37,-14,44}, -{37,-13,-22}, -{37,-13,-21}, -{37,-13,-20}, -{37,-13,-19}, -{37,-13,-18}, -{37,-13,-17}, -{37,-13,-16}, -{37,-13,-15}, -{37,-13,-14}, -{37,-13,-13}, -{37,-13,-12}, -{37,-13,-11}, -{37,-13,-10}, -{37,-13,-9}, -{37,-13,-8}, -{37,-13,-7}, -{37,-13,-6}, -{37,-13,-5}, -{37,-13,-4}, -{37,-13,-3}, -{37,-13,-2}, -{37,-13,-1}, -{37,-13,0}, -{37,-13,1}, -{37,-13,2}, -{37,-13,3}, -{37,-13,4}, -{37,-13,5}, -{37,-13,6}, -{37,-13,7}, -{37,-13,8}, -{37,-13,9}, -{37,-13,10}, -{37,-13,11}, -{37,-13,12}, -{37,-13,13}, -{37,-13,14}, -{37,-13,15}, -{37,-13,16}, -{37,-13,17}, -{37,-13,18}, -{37,-13,19}, -{37,-13,20}, -{37,-13,21}, -{37,-13,22}, -{37,-13,23}, -{37,-13,24}, -{37,-13,25}, -{37,-13,26}, -{37,-13,27}, -{37,-13,28}, -{37,-13,29}, -{37,-13,30}, -{37,-13,31}, -{37,-13,32}, -{37,-13,33}, -{37,-13,34}, -{37,-13,35}, -{37,-13,36}, -{37,-13,37}, -{37,-13,38}, -{37,-13,39}, -{37,-13,40}, -{37,-13,41}, -{37,-13,42}, -{37,-13,43}, -{37,-13,44}, -{37,-12,-23}, -{37,-12,-22}, -{37,-12,-21}, -{37,-12,-20}, -{37,-12,-19}, -{37,-12,-18}, -{37,-12,-17}, -{37,-12,-16}, -{37,-12,-15}, -{37,-12,-14}, -{37,-12,-13}, -{37,-12,-12}, -{37,-12,-11}, -{37,-12,-10}, -{37,-12,-9}, -{37,-12,-8}, -{37,-12,-7}, -{37,-12,-6}, -{37,-12,-5}, -{37,-12,-4}, -{37,-12,-3}, -{37,-12,-2}, -{37,-12,-1}, -{37,-12,0}, -{37,-12,1}, -{37,-12,2}, -{37,-12,3}, -{37,-12,4}, -{37,-12,5}, -{37,-12,6}, -{37,-12,7}, -{37,-12,8}, -{37,-12,9}, -{37,-12,10}, -{37,-12,11}, -{37,-12,12}, -{37,-12,13}, -{37,-12,14}, -{37,-12,15}, -{37,-12,16}, -{37,-12,17}, -{37,-12,18}, -{37,-12,19}, -{37,-12,20}, -{37,-12,21}, -{37,-12,22}, -{37,-12,23}, -{37,-12,24}, -{37,-12,25}, -{37,-12,26}, -{37,-12,27}, -{37,-12,28}, -{37,-12,29}, -{37,-12,30}, -{37,-12,31}, -{37,-12,32}, -{37,-12,33}, -{37,-12,34}, -{37,-12,35}, -{37,-12,36}, -{37,-12,37}, -{37,-12,38}, -{37,-12,39}, -{37,-12,40}, -{37,-12,41}, -{37,-12,42}, -{37,-12,43}, -{37,-12,44}, -{37,-11,-25}, -{37,-11,-24}, -{37,-11,-23}, -{37,-11,-22}, -{37,-11,-21}, -{37,-11,-20}, -{37,-11,-19}, -{37,-11,-18}, -{37,-11,-17}, -{37,-11,-16}, -{37,-11,-15}, -{37,-11,-14}, -{37,-11,-13}, -{37,-11,-12}, -{37,-11,-11}, -{37,-11,-10}, -{37,-11,-9}, -{37,-11,-8}, -{37,-11,-7}, -{37,-11,-6}, -{37,-11,-5}, -{37,-11,-4}, -{37,-11,-3}, -{37,-11,-2}, -{37,-11,-1}, -{37,-11,0}, -{37,-11,1}, -{37,-11,2}, -{37,-11,3}, -{37,-11,4}, -{37,-11,5}, -{37,-11,6}, -{37,-11,7}, -{37,-11,8}, -{37,-11,9}, -{37,-11,10}, -{37,-11,11}, -{37,-11,12}, -{37,-11,13}, -{37,-11,14}, -{37,-11,15}, -{37,-11,16}, -{37,-11,17}, -{37,-11,18}, -{37,-11,19}, -{37,-11,20}, -{37,-11,21}, -{37,-11,22}, -{37,-11,23}, -{37,-11,24}, -{37,-11,25}, -{37,-11,26}, -{37,-11,27}, -{37,-11,28}, -{37,-11,29}, -{37,-11,30}, -{37,-11,31}, -{37,-11,32}, -{37,-11,33}, -{37,-11,34}, -{37,-11,35}, -{37,-11,36}, -{37,-11,37}, -{37,-11,38}, -{37,-11,39}, -{37,-11,40}, -{37,-11,41}, -{37,-11,42}, -{37,-11,43}, -{37,-11,44}, -{37,-10,-26}, -{37,-10,-25}, -{37,-10,-24}, -{37,-10,-23}, -{37,-10,-22}, -{37,-10,-21}, -{37,-10,-20}, -{37,-10,-19}, -{37,-10,-18}, -{37,-10,-17}, -{37,-10,-16}, -{37,-10,-15}, -{37,-10,-14}, -{37,-10,-13}, -{37,-10,-12}, -{37,-10,-11}, -{37,-10,-10}, -{37,-10,-9}, -{37,-10,-8}, -{37,-10,-7}, -{37,-10,-6}, -{37,-10,-5}, -{37,-10,-4}, -{37,-10,-3}, -{37,-10,-2}, -{37,-10,-1}, -{37,-10,0}, -{37,-10,1}, -{37,-10,2}, -{37,-10,3}, -{37,-10,4}, -{37,-10,5}, -{37,-10,6}, -{37,-10,7}, -{37,-10,8}, -{37,-10,9}, -{37,-10,10}, -{37,-10,11}, -{37,-10,12}, -{37,-10,13}, -{37,-10,14}, -{37,-10,15}, -{37,-10,16}, -{37,-10,17}, -{37,-10,18}, -{37,-10,19}, -{37,-10,20}, -{37,-10,21}, -{37,-10,22}, -{37,-10,23}, -{37,-10,24}, -{37,-10,25}, -{37,-10,26}, -{37,-10,27}, -{37,-10,28}, -{37,-10,29}, -{37,-10,30}, -{37,-10,31}, -{37,-10,32}, -{37,-10,33}, -{37,-10,34}, -{37,-10,35}, -{37,-10,36}, -{37,-10,37}, -{37,-10,38}, -{37,-10,39}, -{37,-10,40}, -{37,-10,41}, -{37,-10,42}, -{37,-10,43}, -{37,-10,44}, -{37,-9,-27}, -{37,-9,-26}, -{37,-9,-25}, -{37,-9,-24}, -{37,-9,-23}, -{37,-9,-22}, -{37,-9,-21}, -{37,-9,-20}, -{37,-9,-19}, -{37,-9,-18}, -{37,-9,-17}, -{37,-9,-16}, -{37,-9,-15}, -{37,-9,-14}, -{37,-9,-13}, -{37,-9,-12}, -{37,-9,-11}, -{37,-9,-10}, -{37,-9,-9}, -{37,-9,-8}, -{37,-9,-7}, -{37,-9,-6}, -{37,-9,-5}, -{37,-9,-4}, -{37,-9,-3}, -{37,-9,-2}, -{37,-9,-1}, -{37,-9,0}, -{37,-9,1}, -{37,-9,2}, -{37,-9,3}, -{37,-9,4}, -{37,-9,5}, -{37,-9,6}, -{37,-9,7}, -{37,-9,8}, -{37,-9,9}, -{37,-9,10}, -{37,-9,11}, -{37,-9,12}, -{37,-9,13}, -{37,-9,14}, -{37,-9,15}, -{37,-9,16}, -{37,-9,17}, -{37,-9,18}, -{37,-9,19}, -{37,-9,20}, -{37,-9,21}, -{37,-9,22}, -{37,-9,23}, -{37,-9,24}, -{37,-9,25}, -{37,-9,26}, -{37,-9,27}, -{37,-9,28}, -{37,-9,29}, -{37,-9,30}, -{37,-9,31}, -{37,-9,32}, -{37,-9,33}, -{37,-9,34}, -{37,-9,35}, -{37,-9,36}, -{37,-9,37}, -{37,-9,38}, -{37,-9,39}, -{37,-9,40}, -{37,-9,41}, -{37,-9,42}, -{37,-9,43}, -{37,-9,44}, -{37,-8,-28}, -{37,-8,-27}, -{37,-8,-26}, -{37,-8,-25}, -{37,-8,-24}, -{37,-8,-23}, -{37,-8,-22}, -{37,-8,-21}, -{37,-8,-20}, -{37,-8,-19}, -{37,-8,-18}, -{37,-8,-17}, -{37,-8,-16}, -{37,-8,-15}, -{37,-8,-14}, -{37,-8,-13}, -{37,-8,-12}, -{37,-8,-11}, -{37,-8,-10}, -{37,-8,-9}, -{37,-8,-8}, -{37,-8,-7}, -{37,-8,-6}, -{37,-8,-5}, -{37,-8,-4}, -{37,-8,-3}, -{37,-8,-2}, -{37,-8,-1}, -{37,-8,0}, -{37,-8,1}, -{37,-8,2}, -{37,-8,3}, -{37,-8,4}, -{37,-8,5}, -{37,-8,6}, -{37,-8,7}, -{37,-8,8}, -{37,-8,9}, -{37,-8,10}, -{37,-8,11}, -{37,-8,12}, -{37,-8,13}, -{37,-8,14}, -{37,-8,15}, -{37,-8,16}, -{37,-8,17}, -{37,-8,18}, -{37,-8,19}, -{37,-8,20}, -{37,-8,21}, -{37,-8,22}, -{37,-8,23}, -{37,-8,24}, -{37,-8,25}, -{37,-8,26}, -{37,-8,27}, -{37,-8,28}, -{37,-8,29}, -{37,-8,30}, -{37,-8,31}, -{37,-8,32}, -{37,-8,33}, -{37,-8,34}, -{37,-8,35}, -{37,-8,36}, -{37,-8,37}, -{37,-8,38}, -{37,-8,39}, -{37,-8,40}, -{37,-8,41}, -{37,-8,42}, -{37,-8,43}, -{37,-8,44}, -{37,-7,-30}, -{37,-7,-29}, -{37,-7,-28}, -{37,-7,-27}, -{37,-7,-26}, -{37,-7,-25}, -{37,-7,-24}, -{37,-7,-23}, -{37,-7,-22}, -{37,-7,-21}, -{37,-7,-20}, -{37,-7,-19}, -{37,-7,-18}, -{37,-7,-17}, -{37,-7,-16}, -{37,-7,-15}, -{37,-7,-14}, -{37,-7,-13}, -{37,-7,-12}, -{37,-7,-11}, -{37,-7,-10}, -{37,-7,-9}, -{37,-7,-8}, -{37,-7,-7}, -{37,-7,-6}, -{37,-7,-5}, -{37,-7,-4}, -{37,-7,-3}, -{37,-7,-2}, -{37,-7,-1}, -{37,-7,0}, -{37,-7,1}, -{37,-7,2}, -{37,-7,3}, -{37,-7,4}, -{37,-7,5}, -{37,-7,6}, -{37,-7,7}, -{37,-7,8}, -{37,-7,9}, -{37,-7,10}, -{37,-7,11}, -{37,-7,12}, -{37,-7,13}, -{37,-7,14}, -{37,-7,15}, -{37,-7,16}, -{37,-7,17}, -{37,-7,18}, -{37,-7,19}, -{37,-7,20}, -{37,-7,21}, -{37,-7,22}, -{37,-7,23}, -{37,-7,24}, -{37,-7,25}, -{37,-7,26}, -{37,-7,27}, -{37,-7,28}, -{37,-7,29}, -{37,-7,30}, -{37,-7,31}, -{37,-7,32}, -{37,-7,33}, -{37,-7,34}, -{37,-7,35}, -{37,-7,36}, -{37,-7,37}, -{37,-7,38}, -{37,-7,39}, -{37,-7,40}, -{37,-7,41}, -{37,-7,42}, -{37,-7,43}, -{37,-7,44}, -{37,-6,-31}, -{37,-6,-30}, -{37,-6,-29}, -{37,-6,-28}, -{37,-6,-27}, -{37,-6,-26}, -{37,-6,-25}, -{37,-6,-24}, -{37,-6,-23}, -{37,-6,-22}, -{37,-6,-21}, -{37,-6,-20}, -{37,-6,-19}, -{37,-6,-18}, -{37,-6,-17}, -{37,-6,-16}, -{37,-6,-15}, -{37,-6,-14}, -{37,-6,-13}, -{37,-6,-12}, -{37,-6,-11}, -{37,-6,-10}, -{37,-6,-9}, -{37,-6,-8}, -{37,-6,-7}, -{37,-6,-6}, -{37,-6,-5}, -{37,-6,-4}, -{37,-6,-3}, -{37,-6,-2}, -{37,-6,-1}, -{37,-6,0}, -{37,-6,1}, -{37,-6,2}, -{37,-6,3}, -{37,-6,4}, -{37,-6,5}, -{37,-6,6}, -{37,-6,7}, -{37,-6,8}, -{37,-6,9}, -{37,-6,10}, -{37,-6,11}, -{37,-6,12}, -{37,-6,13}, -{37,-6,14}, -{37,-6,15}, -{37,-6,16}, -{37,-6,17}, -{37,-6,18}, -{37,-6,19}, -{37,-6,20}, -{37,-6,21}, -{37,-6,22}, -{37,-6,23}, -{37,-6,24}, -{37,-6,25}, -{37,-6,26}, -{37,-6,27}, -{37,-6,28}, -{37,-6,29}, -{37,-6,30}, -{37,-6,31}, -{37,-6,32}, -{37,-6,33}, -{37,-6,34}, -{37,-6,35}, -{37,-6,36}, -{37,-6,37}, -{37,-6,38}, -{37,-6,39}, -{37,-6,40}, -{37,-6,41}, -{37,-6,42}, -{37,-6,43}, -{37,-6,44}, -{37,-5,-32}, -{37,-5,-31}, -{37,-5,-30}, -{37,-5,-29}, -{37,-5,-28}, -{37,-5,-27}, -{37,-5,-26}, -{37,-5,-25}, -{37,-5,-24}, -{37,-5,-23}, -{37,-5,-22}, -{37,-5,-21}, -{37,-5,-20}, -{37,-5,-19}, -{37,-5,-18}, -{37,-5,-17}, -{37,-5,-16}, -{37,-5,-15}, -{37,-5,-14}, -{37,-5,-13}, -{37,-5,-12}, -{37,-5,-11}, -{37,-5,-10}, -{37,-5,-9}, -{37,-5,-8}, -{37,-5,-7}, -{37,-5,-6}, -{37,-5,-5}, -{37,-5,-4}, -{37,-5,-3}, -{37,-5,-2}, -{37,-5,-1}, -{37,-5,0}, -{37,-5,1}, -{37,-5,2}, -{37,-5,3}, -{37,-5,4}, -{37,-5,5}, -{37,-5,6}, -{37,-5,7}, -{37,-5,8}, -{37,-5,9}, -{37,-5,10}, -{37,-5,11}, -{37,-5,12}, -{37,-5,13}, -{37,-5,14}, -{37,-5,15}, -{37,-5,16}, -{37,-5,17}, -{37,-5,18}, -{37,-5,19}, -{37,-5,20}, -{37,-5,21}, -{37,-5,22}, -{37,-5,23}, -{37,-5,24}, -{37,-5,25}, -{37,-5,26}, -{37,-5,27}, -{37,-5,28}, -{37,-5,29}, -{37,-5,30}, -{37,-5,31}, -{37,-5,32}, -{37,-5,33}, -{37,-5,34}, -{37,-5,35}, -{37,-5,36}, -{37,-5,37}, -{37,-5,38}, -{37,-5,39}, -{37,-5,40}, -{37,-5,41}, -{37,-5,42}, -{37,-5,43}, -{37,-5,44}, -{37,-4,-33}, -{37,-4,-32}, -{37,-4,-31}, -{37,-4,-30}, -{37,-4,-29}, -{37,-4,-28}, -{37,-4,-27}, -{37,-4,-26}, -{37,-4,-25}, -{37,-4,-24}, -{37,-4,-23}, -{37,-4,-22}, -{37,-4,-21}, -{37,-4,-20}, -{37,-4,-19}, -{37,-4,-18}, -{37,-4,-17}, -{37,-4,-16}, -{37,-4,-15}, -{37,-4,-14}, -{37,-4,-13}, -{37,-4,-12}, -{37,-4,-11}, -{37,-4,-10}, -{37,-4,-9}, -{37,-4,-8}, -{37,-4,-7}, -{37,-4,-6}, -{37,-4,-5}, -{37,-4,-4}, -{37,-4,-3}, -{37,-4,-2}, -{37,-4,-1}, -{37,-4,0}, -{37,-4,1}, -{37,-4,2}, -{37,-4,3}, -{37,-4,4}, -{37,-4,5}, -{37,-4,6}, -{37,-4,7}, -{37,-4,8}, -{37,-4,9}, -{37,-4,10}, -{37,-4,11}, -{37,-4,12}, -{37,-4,13}, -{37,-4,14}, -{37,-4,15}, -{37,-4,16}, -{37,-4,17}, -{37,-4,18}, -{37,-4,19}, -{37,-4,20}, -{37,-4,21}, -{37,-4,22}, -{37,-4,23}, -{37,-4,24}, -{37,-4,25}, -{37,-4,26}, -{37,-4,27}, -{37,-4,28}, -{37,-4,29}, -{37,-4,30}, -{37,-4,31}, -{37,-4,32}, -{37,-4,33}, -{37,-4,34}, -{37,-4,35}, -{37,-4,36}, -{37,-4,37}, -{37,-4,38}, -{37,-4,39}, -{37,-4,40}, -{37,-4,41}, -{37,-4,42}, -{37,-4,43}, -{37,-4,44}, -{37,-3,-34}, -{37,-3,-33}, -{37,-3,-32}, -{37,-3,-31}, -{37,-3,-30}, -{37,-3,-29}, -{37,-3,-28}, -{37,-3,-27}, -{37,-3,-26}, -{37,-3,-25}, -{37,-3,-24}, -{37,-3,-23}, -{37,-3,-22}, -{37,-3,-21}, -{37,-3,-20}, -{37,-3,-19}, -{37,-3,-18}, -{37,-3,-17}, -{37,-3,-16}, -{37,-3,-15}, -{37,-3,-14}, -{37,-3,-13}, -{37,-3,-12}, -{37,-3,-11}, -{37,-3,-10}, -{37,-3,-9}, -{37,-3,-8}, -{37,-3,-7}, -{37,-3,-6}, -{37,-3,-5}, -{37,-3,-4}, -{37,-3,-3}, -{37,-3,-2}, -{37,-3,-1}, -{37,-3,0}, -{37,-3,1}, -{37,-3,2}, -{37,-3,3}, -{37,-3,4}, -{37,-3,5}, -{37,-3,6}, -{37,-3,7}, -{37,-3,8}, -{37,-3,9}, -{37,-3,10}, -{37,-3,11}, -{37,-3,12}, -{37,-3,13}, -{37,-3,14}, -{37,-3,15}, -{37,-3,16}, -{37,-3,17}, -{37,-3,18}, -{37,-3,19}, -{37,-3,20}, -{37,-3,21}, -{37,-3,22}, -{37,-3,23}, -{37,-3,24}, -{37,-3,25}, -{37,-3,26}, -{37,-3,27}, -{37,-3,28}, -{37,-3,29}, -{37,-3,30}, -{37,-3,31}, -{37,-3,32}, -{37,-3,33}, -{37,-3,34}, -{37,-3,35}, -{37,-3,36}, -{37,-3,37}, -{37,-3,38}, -{37,-3,39}, -{37,-3,40}, -{37,-3,41}, -{37,-3,42}, -{37,-3,43}, -{37,-3,44}, -{37,-2,-35}, -{37,-2,-34}, -{37,-2,-33}, -{37,-2,-32}, -{37,-2,-31}, -{37,-2,-30}, -{37,-2,-29}, -{37,-2,-28}, -{37,-2,-27}, -{37,-2,-26}, -{37,-2,-25}, -{37,-2,-24}, -{37,-2,-23}, -{37,-2,-22}, -{37,-2,-21}, -{37,-2,-20}, -{37,-2,-19}, -{37,-2,-18}, -{37,-2,-17}, -{37,-2,-16}, -{37,-2,-15}, -{37,-2,-14}, -{37,-2,-13}, -{37,-2,-12}, -{37,-2,-11}, -{37,-2,-10}, -{37,-2,-9}, -{37,-2,-8}, -{37,-2,-7}, -{37,-2,-6}, -{37,-2,-5}, -{37,-2,-4}, -{37,-2,-3}, -{37,-2,-2}, -{37,-2,-1}, -{37,-2,0}, -{37,-2,1}, -{37,-2,2}, -{37,-2,3}, -{37,-2,4}, -{37,-2,5}, -{37,-2,6}, -{37,-2,7}, -{37,-2,8}, -{37,-2,9}, -{37,-2,10}, -{37,-2,11}, -{37,-2,12}, -{37,-2,13}, -{37,-2,14}, -{37,-2,15}, -{37,-2,16}, -{37,-2,17}, -{37,-2,18}, -{37,-2,19}, -{37,-2,20}, -{37,-2,21}, -{37,-2,22}, -{37,-2,23}, -{37,-2,24}, -{37,-2,25}, -{37,-2,26}, -{37,-2,27}, -{37,-2,28}, -{37,-2,29}, -{37,-2,30}, -{37,-2,31}, -{37,-2,32}, -{37,-2,33}, -{37,-2,34}, -{37,-2,35}, -{37,-2,36}, -{37,-2,37}, -{37,-2,38}, -{37,-2,39}, -{37,-2,40}, -{37,-2,41}, -{37,-2,42}, -{37,-2,43}, -{37,-2,44}, -{37,-1,-37}, -{37,-1,-36}, -{37,-1,-35}, -{37,-1,-34}, -{37,-1,-33}, -{37,-1,-32}, -{37,-1,-31}, -{37,-1,-30}, -{37,-1,-29}, -{37,-1,-28}, -{37,-1,-27}, -{37,-1,-26}, -{37,-1,-25}, -{37,-1,-24}, -{37,-1,-23}, -{37,-1,-22}, -{37,-1,-21}, -{37,-1,-20}, -{37,-1,-19}, -{37,-1,-18}, -{37,-1,-17}, -{37,-1,-16}, -{37,-1,-15}, -{37,-1,-14}, -{37,-1,-13}, -{37,-1,-12}, -{37,-1,-11}, -{37,-1,-10}, -{37,-1,-9}, -{37,-1,-8}, -{37,-1,-7}, -{37,-1,-6}, -{37,-1,-5}, -{37,-1,-4}, -{37,-1,-3}, -{37,-1,-2}, -{37,-1,-1}, -{37,-1,0}, -{37,-1,1}, -{37,-1,2}, -{37,-1,3}, -{37,-1,4}, -{37,-1,5}, -{37,-1,6}, -{37,-1,7}, -{37,-1,8}, -{37,-1,9}, -{37,-1,10}, -{37,-1,11}, -{37,-1,12}, -{37,-1,13}, -{37,-1,14}, -{37,-1,15}, -{37,-1,16}, -{37,-1,17}, -{37,-1,18}, -{37,-1,19}, -{37,-1,20}, -{37,-1,21}, -{37,-1,22}, -{37,-1,23}, -{37,-1,24}, -{37,-1,25}, -{37,-1,26}, -{37,-1,27}, -{37,-1,28}, -{37,-1,29}, -{37,-1,30}, -{37,-1,31}, -{37,-1,32}, -{37,-1,33}, -{37,-1,34}, -{37,-1,35}, -{37,-1,36}, -{37,-1,37}, -{37,-1,38}, -{37,-1,39}, -{37,-1,40}, -{37,-1,41}, -{37,-1,42}, -{37,-1,43}, -{37,-1,44}, -{37,-1,45}, -{37,0,-38}, -{37,0,-37}, -{37,0,-36}, -{37,0,-35}, -{37,0,-34}, -{37,0,-33}, -{37,0,-32}, -{37,0,-31}, -{37,0,-30}, -{37,0,-29}, -{37,0,-28}, -{37,0,-27}, -{37,0,-26}, -{37,0,-25}, -{37,0,-24}, -{37,0,-23}, -{37,0,-22}, -{37,0,-21}, -{37,0,-20}, -{37,0,-19}, -{37,0,-18}, -{37,0,-17}, -{37,0,-16}, -{37,0,-15}, -{37,0,-14}, -{37,0,-13}, -{37,0,-12}, -{37,0,-11}, -{37,0,-10}, -{37,0,-9}, -{37,0,-8}, -{37,0,-7}, -{37,0,-6}, -{37,0,-5}, -{37,0,-4}, -{37,0,-3}, -{37,0,-2}, -{37,0,-1}, -{37,0,0}, -{37,0,1}, -{37,0,2}, -{37,0,3}, -{37,0,4}, -{37,0,5}, -{37,0,6}, -{37,0,7}, -{37,0,8}, -{37,0,9}, -{37,0,10}, -{37,0,11}, -{37,0,12}, -{37,0,13}, -{37,0,14}, -{37,0,15}, -{37,0,16}, -{37,0,17}, -{37,0,18}, -{37,0,19}, -{37,0,20}, -{37,0,21}, -{37,0,22}, -{37,0,23}, -{37,0,24}, -{37,0,25}, -{37,0,26}, -{37,0,27}, -{37,0,28}, -{37,0,29}, -{37,0,30}, -{37,0,31}, -{37,0,32}, -{37,0,33}, -{37,0,34}, -{37,0,35}, -{37,0,36}, -{37,0,37}, -{37,0,38}, -{37,0,39}, -{37,0,40}, -{37,0,41}, -{37,0,42}, -{37,0,43}, -{37,0,44}, -{37,0,45}, -{37,1,-39}, -{37,1,-38}, -{37,1,-37}, -{37,1,-36}, -{37,1,-35}, -{37,1,-34}, -{37,1,-33}, -{37,1,-32}, -{37,1,-31}, -{37,1,-30}, -{37,1,-29}, -{37,1,-28}, -{37,1,-27}, -{37,1,-26}, -{37,1,-25}, -{37,1,-24}, -{37,1,-23}, -{37,1,-22}, -{37,1,-21}, -{37,1,-20}, -{37,1,-19}, -{37,1,-18}, -{37,1,-17}, -{37,1,-16}, -{37,1,-15}, -{37,1,-14}, -{37,1,-13}, -{37,1,-12}, -{37,1,-11}, -{37,1,-10}, -{37,1,-9}, -{37,1,-8}, -{37,1,-7}, -{37,1,-6}, -{37,1,-5}, -{37,1,-4}, -{37,1,-3}, -{37,1,-2}, -{37,1,-1}, -{37,1,0}, -{37,1,1}, -{37,1,2}, -{37,1,3}, -{37,1,4}, -{37,1,5}, -{37,1,6}, -{37,1,7}, -{37,1,8}, -{37,1,9}, -{37,1,10}, -{37,1,11}, -{37,1,12}, -{37,1,13}, -{37,1,14}, -{37,1,15}, -{37,1,16}, -{37,1,17}, -{37,1,18}, -{37,1,19}, -{37,1,20}, -{37,1,21}, -{37,1,22}, -{37,1,23}, -{37,1,24}, -{37,1,25}, -{37,1,26}, -{37,1,27}, -{37,1,28}, -{37,1,29}, -{37,1,30}, -{37,1,31}, -{37,1,32}, -{37,1,33}, -{37,1,34}, -{37,1,35}, -{37,1,36}, -{37,1,37}, -{37,1,38}, -{37,1,39}, -{37,1,40}, -{37,1,41}, -{37,1,42}, -{37,1,43}, -{37,1,44}, -{37,1,45}, -{37,2,-40}, -{37,2,-39}, -{37,2,-38}, -{37,2,-37}, -{37,2,-36}, -{37,2,-35}, -{37,2,-34}, -{37,2,-33}, -{37,2,-32}, -{37,2,-31}, -{37,2,-30}, -{37,2,-29}, -{37,2,-28}, -{37,2,-27}, -{37,2,-26}, -{37,2,-25}, -{37,2,-24}, -{37,2,-23}, -{37,2,-22}, -{37,2,-21}, -{37,2,-20}, -{37,2,-19}, -{37,2,-18}, -{37,2,-17}, -{37,2,-16}, -{37,2,-15}, -{37,2,-14}, -{37,2,-13}, -{37,2,-12}, -{37,2,-11}, -{37,2,-10}, -{37,2,-9}, -{37,2,-8}, -{37,2,-7}, -{37,2,-6}, -{37,2,-5}, -{37,2,-4}, -{37,2,-3}, -{37,2,-2}, -{37,2,-1}, -{37,2,0}, -{37,2,1}, -{37,2,2}, -{37,2,3}, -{37,2,4}, -{37,2,5}, -{37,2,6}, -{37,2,7}, -{37,2,8}, -{37,2,9}, -{37,2,10}, -{37,2,11}, -{37,2,12}, -{37,2,13}, -{37,2,14}, -{37,2,15}, -{37,2,16}, -{37,2,17}, -{37,2,18}, -{37,2,19}, -{37,2,20}, -{37,2,21}, -{37,2,22}, -{37,2,23}, -{37,2,24}, -{37,2,25}, -{37,2,26}, -{37,2,27}, -{37,2,28}, -{37,2,29}, -{37,2,30}, -{37,2,31}, -{37,2,32}, -{37,2,33}, -{37,2,34}, -{37,2,35}, -{37,2,36}, -{37,2,37}, -{37,2,38}, -{37,2,39}, -{37,2,40}, -{37,2,41}, -{37,2,42}, -{37,2,43}, -{37,2,44}, -{37,2,45}, -{37,3,-41}, -{37,3,-40}, -{37,3,-39}, -{37,3,-38}, -{37,3,-37}, -{37,3,-36}, -{37,3,-35}, -{37,3,-34}, -{37,3,-33}, -{37,3,-32}, -{37,3,-31}, -{37,3,-30}, -{37,3,-29}, -{37,3,-28}, -{37,3,-27}, -{37,3,-26}, -{37,3,-25}, -{37,3,-24}, -{37,3,-23}, -{37,3,-22}, -{37,3,-21}, -{37,3,-20}, -{37,3,-19}, -{37,3,-18}, -{37,3,-17}, -{37,3,-16}, -{37,3,-15}, -{37,3,-14}, -{37,3,-13}, -{37,3,-12}, -{37,3,-11}, -{37,3,-10}, -{37,3,-9}, -{37,3,-8}, -{37,3,-7}, -{37,3,-6}, -{37,3,-5}, -{37,3,-4}, -{37,3,-3}, -{37,3,-2}, -{37,3,-1}, -{37,3,0}, -{37,3,1}, -{37,3,2}, -{37,3,3}, -{37,3,4}, -{37,3,5}, -{37,3,6}, -{37,3,7}, -{37,3,8}, -{37,3,9}, -{37,3,10}, -{37,3,11}, -{37,3,12}, -{37,3,13}, -{37,3,14}, -{37,3,15}, -{37,3,16}, -{37,3,17}, -{37,3,18}, -{37,3,19}, -{37,3,20}, -{37,3,21}, -{37,3,22}, -{37,3,23}, -{37,3,24}, -{37,3,25}, -{37,3,26}, -{37,3,27}, -{37,3,28}, -{37,3,29}, -{37,3,30}, -{37,3,31}, -{37,3,32}, -{37,3,33}, -{37,3,34}, -{37,3,35}, -{37,3,36}, -{37,3,37}, -{37,3,38}, -{37,3,39}, -{37,3,40}, -{37,3,41}, -{37,3,42}, -{37,3,43}, -{37,3,44}, -{37,3,45}, -{37,4,-42}, -{37,4,-41}, -{37,4,-40}, -{37,4,-39}, -{37,4,-38}, -{37,4,-37}, -{37,4,-36}, -{37,4,-35}, -{37,4,-34}, -{37,4,-33}, -{37,4,-32}, -{37,4,-31}, -{37,4,-30}, -{37,4,-29}, -{37,4,-28}, -{37,4,-27}, -{37,4,-26}, -{37,4,-25}, -{37,4,-24}, -{37,4,-23}, -{37,4,-22}, -{37,4,-21}, -{37,4,-20}, -{37,4,-19}, -{37,4,-18}, -{37,4,-17}, -{37,4,-16}, -{37,4,-15}, -{37,4,-14}, -{37,4,-13}, -{37,4,-12}, -{37,4,-11}, -{37,4,-10}, -{37,4,-9}, -{37,4,-8}, -{37,4,-7}, -{37,4,-6}, -{37,4,-5}, -{37,4,-4}, -{37,4,-3}, -{37,4,-2}, -{37,4,-1}, -{37,4,0}, -{37,4,1}, -{37,4,2}, -{37,4,3}, -{37,4,4}, -{37,4,5}, -{37,4,6}, -{37,4,7}, -{37,4,8}, -{37,4,9}, -{37,4,10}, -{37,4,11}, -{37,4,12}, -{37,4,13}, -{37,4,14}, -{37,4,15}, -{37,4,16}, -{37,4,17}, -{37,4,18}, -{37,4,19}, -{37,4,20}, -{37,4,21}, -{37,4,22}, -{37,4,23}, -{37,4,24}, -{37,4,25}, -{37,4,26}, -{37,4,27}, -{37,4,28}, -{37,4,29}, -{37,4,30}, -{37,4,31}, -{37,4,32}, -{37,4,33}, -{37,4,34}, -{37,4,35}, -{37,4,36}, -{37,4,37}, -{37,4,38}, -{37,4,39}, -{37,4,40}, -{37,4,41}, -{37,4,42}, -{37,4,43}, -{37,4,44}, -{37,4,45}, -{37,5,-43}, -{37,5,-42}, -{37,5,-41}, -{37,5,-40}, -{37,5,-39}, -{37,5,-38}, -{37,5,-37}, -{37,5,-36}, -{37,5,-35}, -{37,5,-34}, -{37,5,-33}, -{37,5,-32}, -{37,5,-31}, -{37,5,-30}, -{37,5,-29}, -{37,5,-28}, -{37,5,-27}, -{37,5,-26}, -{37,5,-25}, -{37,5,-24}, -{37,5,-23}, -{37,5,-22}, -{37,5,-21}, -{37,5,-20}, -{37,5,-19}, -{37,5,-18}, -{37,5,-17}, -{37,5,-16}, -{37,5,-15}, -{37,5,-14}, -{37,5,-13}, -{37,5,-12}, -{37,5,-11}, -{37,5,-10}, -{37,5,-9}, -{37,5,-8}, -{37,5,-7}, -{37,5,-6}, -{37,5,-5}, -{37,5,-4}, -{37,5,-3}, -{37,5,-2}, -{37,5,-1}, -{37,5,0}, -{37,5,1}, -{37,5,2}, -{37,5,3}, -{37,5,4}, -{37,5,5}, -{37,5,6}, -{37,5,7}, -{37,5,8}, -{37,5,9}, -{37,5,10}, -{37,5,11}, -{37,5,12}, -{37,5,13}, -{37,5,14}, -{37,5,15}, -{37,5,16}, -{37,5,17}, -{37,5,18}, -{37,5,19}, -{37,5,20}, -{37,5,21}, -{37,5,22}, -{37,5,23}, -{37,5,24}, -{37,5,25}, -{37,5,26}, -{37,5,27}, -{37,5,28}, -{37,5,29}, -{37,5,30}, -{37,5,31}, -{37,5,32}, -{37,5,33}, -{37,5,34}, -{37,5,35}, -{37,5,36}, -{37,5,37}, -{37,5,38}, -{37,5,39}, -{37,5,40}, -{37,5,41}, -{37,5,42}, -{37,5,43}, -{37,5,44}, -{37,5,45}, -{37,6,-44}, -{37,6,-43}, -{37,6,-42}, -{37,6,-41}, -{37,6,-40}, -{37,6,-39}, -{37,6,-38}, -{37,6,-37}, -{37,6,-36}, -{37,6,-35}, -{37,6,-34}, -{37,6,-33}, -{37,6,-32}, -{37,6,-31}, -{37,6,-30}, -{37,6,-29}, -{37,6,-28}, -{37,6,-27}, -{37,6,-26}, -{37,6,-25}, -{37,6,-24}, -{37,6,-23}, -{37,6,-22}, -{37,6,-21}, -{37,6,-20}, -{37,6,-19}, -{37,6,-18}, -{37,6,-17}, -{37,6,-16}, -{37,6,-15}, -{37,6,-14}, -{37,6,-13}, -{37,6,-12}, -{37,6,-11}, -{37,6,-10}, -{37,6,-9}, -{37,6,-8}, -{37,6,-7}, -{37,6,-6}, -{37,6,-5}, -{37,6,-4}, -{37,6,-3}, -{37,6,-2}, -{37,6,-1}, -{37,6,0}, -{37,6,1}, -{37,6,2}, -{37,6,3}, -{37,6,4}, -{37,6,5}, -{37,6,6}, -{37,6,7}, -{37,6,8}, -{37,6,9}, -{37,6,10}, -{37,6,11}, -{37,6,12}, -{37,6,13}, -{37,6,14}, -{37,6,15}, -{37,6,16}, -{37,6,17}, -{37,6,18}, -{37,6,19}, -{37,6,20}, -{37,6,21}, -{37,6,22}, -{37,6,23}, -{37,6,24}, -{37,6,25}, -{37,6,26}, -{37,6,27}, -{37,6,28}, -{37,6,29}, -{37,6,30}, -{37,6,31}, -{37,6,32}, -{37,6,33}, -{37,6,34}, -{37,6,35}, -{37,6,36}, -{37,6,37}, -{37,6,38}, -{37,6,39}, -{37,6,40}, -{37,6,41}, -{37,6,42}, -{37,6,43}, -{37,6,44}, -{37,6,45}, -{37,7,-45}, -{37,7,-44}, -{37,7,-43}, -{37,7,-42}, -{37,7,-41}, -{37,7,-40}, -{37,7,-39}, -{37,7,-38}, -{37,7,-37}, -{37,7,-36}, -{37,7,-35}, -{37,7,-34}, -{37,7,-33}, -{37,7,-32}, -{37,7,-31}, -{37,7,-30}, -{37,7,-29}, -{37,7,-28}, -{37,7,-27}, -{37,7,-26}, -{37,7,-25}, -{37,7,-24}, -{37,7,-23}, -{37,7,-22}, -{37,7,-21}, -{37,7,-20}, -{37,7,-19}, -{37,7,-18}, -{37,7,-17}, -{37,7,-16}, -{37,7,-15}, -{37,7,-14}, -{37,7,-13}, -{37,7,-12}, -{37,7,-11}, -{37,7,-10}, -{37,7,-9}, -{37,7,-8}, -{37,7,-7}, -{37,7,-6}, -{37,7,-5}, -{37,7,-4}, -{37,7,-3}, -{37,7,-2}, -{37,7,-1}, -{37,7,0}, -{37,7,1}, -{37,7,2}, -{37,7,3}, -{37,7,4}, -{37,7,5}, -{37,7,6}, -{37,7,7}, -{37,7,8}, -{37,7,9}, -{37,7,10}, -{37,7,11}, -{37,7,12}, -{37,7,13}, -{37,7,14}, -{37,7,15}, -{37,7,16}, -{37,7,17}, -{37,7,18}, -{37,7,19}, -{37,7,20}, -{37,7,21}, -{37,7,22}, -{37,7,23}, -{37,7,24}, -{37,7,25}, -{37,7,26}, -{37,7,27}, -{37,7,28}, -{37,7,29}, -{37,7,30}, -{37,7,31}, -{37,7,32}, -{37,7,33}, -{37,7,34}, -{37,7,35}, -{37,7,36}, -{37,7,37}, -{37,7,38}, -{37,7,39}, -{37,7,40}, -{37,7,41}, -{37,7,42}, -{37,7,43}, -{37,7,44}, -{37,7,45}, -{37,8,-47}, -{37,8,-46}, -{37,8,-45}, -{37,8,-44}, -{37,8,-43}, -{37,8,-42}, -{37,8,-41}, -{37,8,-40}, -{37,8,-39}, -{37,8,-38}, -{37,8,-37}, -{37,8,-36}, -{37,8,-35}, -{37,8,-34}, -{37,8,-33}, -{37,8,-32}, -{37,8,-31}, -{37,8,-30}, -{37,8,-29}, -{37,8,-28}, -{37,8,-27}, -{37,8,-26}, -{37,8,-25}, -{37,8,-24}, -{37,8,-23}, -{37,8,-22}, -{37,8,-21}, -{37,8,-20}, -{37,8,-19}, -{37,8,-18}, -{37,8,-17}, -{37,8,-16}, -{37,8,-15}, -{37,8,-14}, -{37,8,-13}, -{37,8,-12}, -{37,8,-11}, -{37,8,-10}, -{37,8,-9}, -{37,8,-8}, -{37,8,-7}, -{37,8,-6}, -{37,8,-5}, -{37,8,-4}, -{37,8,-3}, -{37,8,-2}, -{37,8,-1}, -{37,8,0}, -{37,8,1}, -{37,8,2}, -{37,8,3}, -{37,8,4}, -{37,8,5}, -{37,8,6}, -{37,8,7}, -{37,8,8}, -{37,8,9}, -{37,8,10}, -{37,8,11}, -{37,8,12}, -{37,8,13}, -{37,8,14}, -{37,8,15}, -{37,8,16}, -{37,8,17}, -{37,8,18}, -{37,8,19}, -{37,8,20}, -{37,8,21}, -{37,8,22}, -{37,8,23}, -{37,8,24}, -{37,8,25}, -{37,8,26}, -{37,8,27}, -{37,8,28}, -{37,8,29}, -{37,8,30}, -{37,8,31}, -{37,8,32}, -{37,8,33}, -{37,8,34}, -{37,8,35}, -{37,8,36}, -{37,8,37}, -{37,8,38}, -{37,8,39}, -{37,8,40}, -{37,8,41}, -{37,8,42}, -{37,8,43}, -{37,8,44}, -{37,8,45}, -{37,9,-48}, -{37,9,-47}, -{37,9,-46}, -{37,9,-45}, -{37,9,-44}, -{37,9,-43}, -{37,9,-42}, -{37,9,-41}, -{37,9,-40}, -{37,9,-39}, -{37,9,-38}, -{37,9,-37}, -{37,9,-36}, -{37,9,-35}, -{37,9,-34}, -{37,9,-33}, -{37,9,-32}, -{37,9,-31}, -{37,9,-30}, -{37,9,-29}, -{37,9,-28}, -{37,9,-27}, -{37,9,-26}, -{37,9,-25}, -{37,9,-24}, -{37,9,-23}, -{37,9,-22}, -{37,9,-21}, -{37,9,-20}, -{37,9,-19}, -{37,9,-18}, -{37,9,-17}, -{37,9,-16}, -{37,9,-15}, -{37,9,-14}, -{37,9,-13}, -{37,9,-12}, -{37,9,-11}, -{37,9,-10}, -{37,9,-9}, -{37,9,-8}, -{37,9,-7}, -{37,9,-6}, -{37,9,-5}, -{37,9,-4}, -{37,9,-3}, -{37,9,-2}, -{37,9,-1}, -{37,9,0}, -{37,9,1}, -{37,9,2}, -{37,9,3}, -{37,9,4}, -{37,9,5}, -{37,9,6}, -{37,9,7}, -{37,9,8}, -{37,9,9}, -{37,9,10}, -{37,9,11}, -{37,9,12}, -{37,9,13}, -{37,9,14}, -{37,9,15}, -{37,9,16}, -{37,9,17}, -{37,9,18}, -{37,9,19}, -{37,9,20}, -{37,9,21}, -{37,9,22}, -{37,9,23}, -{37,9,24}, -{37,9,25}, -{37,9,26}, -{37,9,27}, -{37,9,28}, -{37,9,29}, -{37,9,30}, -{37,9,31}, -{37,9,32}, -{37,9,33}, -{37,9,34}, -{37,9,35}, -{37,9,36}, -{37,9,37}, -{37,9,38}, -{37,9,39}, -{37,9,40}, -{37,9,41}, -{37,9,42}, -{37,9,43}, -{37,9,44}, -{37,9,45}, -{37,10,-49}, -{37,10,-48}, -{37,10,-47}, -{37,10,-46}, -{37,10,-45}, -{37,10,-44}, -{37,10,-43}, -{37,10,-42}, -{37,10,-41}, -{37,10,-40}, -{37,10,-39}, -{37,10,-38}, -{37,10,-37}, -{37,10,-36}, -{37,10,-35}, -{37,10,-34}, -{37,10,-33}, -{37,10,-32}, -{37,10,-31}, -{37,10,-30}, -{37,10,-29}, -{37,10,-28}, -{37,10,-27}, -{37,10,-26}, -{37,10,-25}, -{37,10,-24}, -{37,10,-23}, -{37,10,-22}, -{37,10,-21}, -{37,10,-20}, -{37,10,-19}, -{37,10,-18}, -{37,10,-17}, -{37,10,-16}, -{37,10,-15}, -{37,10,-14}, -{37,10,-13}, -{37,10,-12}, -{37,10,-11}, -{37,10,-10}, -{37,10,-9}, -{37,10,-8}, -{37,10,-7}, -{37,10,-6}, -{37,10,-5}, -{37,10,-4}, -{37,10,-3}, -{37,10,-2}, -{37,10,-1}, -{37,10,0}, -{37,10,1}, -{37,10,2}, -{37,10,3}, -{37,10,4}, -{37,10,5}, -{37,10,6}, -{37,10,7}, -{37,10,8}, -{37,10,9}, -{37,10,10}, -{37,10,11}, -{37,10,12}, -{37,10,13}, -{37,10,14}, -{37,10,15}, -{37,10,16}, -{37,10,17}, -{37,10,18}, -{37,10,19}, -{37,10,20}, -{37,10,21}, -{37,10,22}, -{37,10,23}, -{37,10,24}, -{37,10,25}, -{37,10,26}, -{37,10,27}, -{37,10,28}, -{37,10,29}, -{37,10,30}, -{37,10,31}, -{37,10,32}, -{37,10,33}, -{37,10,34}, -{37,10,35}, -{37,10,36}, -{37,10,37}, -{37,10,38}, -{37,10,39}, -{37,10,40}, -{37,10,41}, -{37,10,42}, -{37,10,43}, -{37,10,44}, -{37,10,45}, -{37,11,-50}, -{37,11,-49}, -{37,11,-48}, -{37,11,-47}, -{37,11,-46}, -{37,11,-45}, -{37,11,-44}, -{37,11,-43}, -{37,11,-42}, -{37,11,-41}, -{37,11,-40}, -{37,11,-39}, -{37,11,-38}, -{37,11,-37}, -{37,11,-36}, -{37,11,-35}, -{37,11,-34}, -{37,11,-33}, -{37,11,-32}, -{37,11,-31}, -{37,11,-30}, -{37,11,-29}, -{37,11,-28}, -{37,11,-27}, -{37,11,-26}, -{37,11,-25}, -{37,11,-24}, -{37,11,-23}, -{37,11,-22}, -{37,11,-21}, -{37,11,-20}, -{37,11,-19}, -{37,11,-18}, -{37,11,-17}, -{37,11,-16}, -{37,11,-15}, -{37,11,-14}, -{37,11,-13}, -{37,11,-12}, -{37,11,-11}, -{37,11,-10}, -{37,11,-9}, -{37,11,-8}, -{37,11,-7}, -{37,11,-6}, -{37,11,-5}, -{37,11,-4}, -{37,11,-3}, -{37,11,-2}, -{37,11,-1}, -{37,11,0}, -{37,11,1}, -{37,11,2}, -{37,11,3}, -{37,11,4}, -{37,11,5}, -{37,11,6}, -{37,11,7}, -{37,11,8}, -{37,11,9}, -{37,11,10}, -{37,11,11}, -{37,11,12}, -{37,11,13}, -{37,11,14}, -{37,11,15}, -{37,11,16}, -{37,11,17}, -{37,11,18}, -{37,11,19}, -{37,11,20}, -{37,11,21}, -{37,11,22}, -{37,11,23}, -{37,11,24}, -{37,11,25}, -{37,11,26}, -{37,11,27}, -{37,11,28}, -{37,11,29}, -{37,11,30}, -{37,11,31}, -{37,11,32}, -{37,11,33}, -{37,11,34}, -{37,11,35}, -{37,11,36}, -{37,11,37}, -{37,11,38}, -{37,11,39}, -{37,11,40}, -{37,11,41}, -{37,11,42}, -{37,11,43}, -{37,11,44}, -{37,11,45}, -{37,12,-51}, -{37,12,-50}, -{37,12,-49}, -{37,12,-48}, -{37,12,-47}, -{37,12,-46}, -{37,12,-45}, -{37,12,-44}, -{37,12,-43}, -{37,12,-42}, -{37,12,-41}, -{37,12,-40}, -{37,12,-39}, -{37,12,-38}, -{37,12,-37}, -{37,12,-36}, -{37,12,-35}, -{37,12,-34}, -{37,12,-33}, -{37,12,-32}, -{37,12,-31}, -{37,12,-30}, -{37,12,-29}, -{37,12,-28}, -{37,12,-27}, -{37,12,-26}, -{37,12,-25}, -{37,12,-24}, -{37,12,-23}, -{37,12,-22}, -{37,12,-21}, -{37,12,-20}, -{37,12,-19}, -{37,12,-18}, -{37,12,-17}, -{37,12,-16}, -{37,12,-15}, -{37,12,-14}, -{37,12,-13}, -{37,12,-12}, -{37,12,-11}, -{37,12,-10}, -{37,12,-9}, -{37,12,-8}, -{37,12,-7}, -{37,12,-6}, -{37,12,-5}, -{37,12,-4}, -{37,12,-3}, -{37,12,-2}, -{37,12,-1}, -{37,12,0}, -{37,12,1}, -{37,12,2}, -{37,12,3}, -{37,12,4}, -{37,12,5}, -{37,12,6}, -{37,12,7}, -{37,12,8}, -{37,12,9}, -{37,12,10}, -{37,12,11}, -{37,12,12}, -{37,12,13}, -{37,12,14}, -{37,12,15}, -{37,12,16}, -{37,12,17}, -{37,12,18}, -{37,12,19}, -{37,12,20}, -{37,12,21}, -{37,12,22}, -{37,12,23}, -{37,12,24}, -{37,12,25}, -{37,12,26}, -{37,12,27}, -{37,12,28}, -{37,12,29}, -{37,12,30}, -{37,12,31}, -{37,12,32}, -{37,12,33}, -{37,12,34}, -{37,12,35}, -{37,12,36}, -{37,12,37}, -{37,12,38}, -{37,12,39}, -{37,12,40}, -{37,12,41}, -{37,12,42}, -{37,12,43}, -{37,12,44}, -{37,12,45}, -{37,12,46}, -{37,13,-52}, -{37,13,-51}, -{37,13,-50}, -{37,13,-49}, -{37,13,-48}, -{37,13,-47}, -{37,13,-46}, -{37,13,-45}, -{37,13,-44}, -{37,13,-43}, -{37,13,-42}, -{37,13,-41}, -{37,13,-40}, -{37,13,-39}, -{37,13,-38}, -{37,13,-37}, -{37,13,-36}, -{37,13,-35}, -{37,13,-34}, -{37,13,-33}, -{37,13,-32}, -{37,13,-31}, -{37,13,-30}, -{37,13,-29}, -{37,13,-28}, -{37,13,-27}, -{37,13,-26}, -{37,13,-25}, -{37,13,-24}, -{37,13,-23}, -{37,13,-22}, -{37,13,-21}, -{37,13,-20}, -{37,13,-19}, -{37,13,-18}, -{37,13,-17}, -{37,13,-16}, -{37,13,-15}, -{37,13,-14}, -{37,13,-13}, -{37,13,-12}, -{37,13,-11}, -{37,13,-10}, -{37,13,-9}, -{37,13,-8}, -{37,13,-7}, -{37,13,-6}, -{37,13,-5}, -{37,13,-4}, -{37,13,-3}, -{37,13,-2}, -{37,13,-1}, -{37,13,0}, -{37,13,1}, -{37,13,2}, -{37,13,3}, -{37,13,4}, -{37,13,5}, -{37,13,6}, -{37,13,7}, -{37,13,8}, -{37,13,9}, -{37,13,10}, -{37,13,11}, -{37,13,12}, -{37,13,13}, -{37,13,14}, -{37,13,15}, -{37,13,16}, -{37,13,17}, -{37,13,18}, -{37,13,19}, -{37,13,20}, -{37,13,21}, -{37,13,22}, -{37,13,23}, -{37,13,24}, -{37,13,25}, -{37,13,26}, -{37,13,27}, -{37,13,28}, -{37,13,29}, -{37,13,30}, -{37,13,31}, -{37,13,32}, -{37,13,33}, -{37,13,34}, -{37,13,35}, -{37,13,36}, -{37,13,37}, -{37,13,38}, -{37,13,39}, -{37,13,40}, -{37,13,41}, -{37,13,42}, -{37,13,43}, -{37,13,44}, -{37,13,45}, -{37,13,46}, -{37,14,-53}, -{37,14,-52}, -{37,14,-51}, -{37,14,-50}, -{37,14,-49}, -{37,14,-48}, -{37,14,-47}, -{37,14,-46}, -{37,14,-45}, -{37,14,-44}, -{37,14,-43}, -{37,14,-42}, -{37,14,-41}, -{37,14,-40}, -{37,14,-39}, -{37,14,-38}, -{37,14,-37}, -{37,14,-36}, -{37,14,-35}, -{37,14,-34}, -{37,14,-33}, -{37,14,-32}, -{37,14,-31}, -{37,14,-30}, -{37,14,-29}, -{37,14,-28}, -{37,14,-27}, -{37,14,-26}, -{37,14,-25}, -{37,14,-24}, -{37,14,-23}, -{37,14,-22}, -{37,14,-21}, -{37,14,-20}, -{37,14,-19}, -{37,14,-18}, -{37,14,-17}, -{37,14,-16}, -{37,14,-15}, -{37,14,-14}, -{37,14,-13}, -{37,14,-12}, -{37,14,-11}, -{37,14,-10}, -{37,14,-9}, -{37,14,-8}, -{37,14,-7}, -{37,14,-6}, -{37,14,-5}, -{37,14,-4}, -{37,14,-3}, -{37,14,-2}, -{37,14,-1}, -{37,14,0}, -{37,14,1}, -{37,14,2}, -{37,14,3}, -{37,14,4}, -{37,14,5}, -{37,14,6}, -{37,14,7}, -{37,14,8}, -{37,14,9}, -{37,14,10}, -{37,14,11}, -{37,14,12}, -{37,14,13}, -{37,14,14}, -{37,14,15}, -{37,14,16}, -{37,14,17}, -{37,14,18}, -{37,14,19}, -{37,14,20}, -{37,14,21}, -{37,14,22}, -{37,14,23}, -{37,14,24}, -{37,14,25}, -{37,14,26}, -{37,14,27}, -{37,14,28}, -{37,14,29}, -{37,14,30}, -{37,14,31}, -{37,14,32}, -{37,14,33}, -{37,14,34}, -{37,14,35}, -{37,14,36}, -{37,14,37}, -{37,14,38}, -{37,14,39}, -{37,14,40}, -{37,14,41}, -{37,14,42}, -{37,14,43}, -{37,14,44}, -{37,14,45}, -{37,14,46}, -{37,15,-54}, -{37,15,-53}, -{37,15,-52}, -{37,15,-51}, -{37,15,-50}, -{37,15,-49}, -{37,15,-48}, -{37,15,-47}, -{37,15,-46}, -{37,15,-45}, -{37,15,-44}, -{37,15,-43}, -{37,15,-42}, -{37,15,-41}, -{37,15,-40}, -{37,15,-39}, -{37,15,-38}, -{37,15,-37}, -{37,15,-36}, -{37,15,-35}, -{37,15,-34}, -{37,15,-33}, -{37,15,-32}, -{37,15,-31}, -{37,15,-30}, -{37,15,-29}, -{37,15,-28}, -{37,15,-27}, -{37,15,-26}, -{37,15,-25}, -{37,15,-24}, -{37,15,-23}, -{37,15,-22}, -{37,15,-21}, -{37,15,-20}, -{37,15,-19}, -{37,15,-18}, -{37,15,-17}, -{37,15,-16}, -{37,15,-15}, -{37,15,-14}, -{37,15,-13}, -{37,15,-12}, -{37,15,-11}, -{37,15,-10}, -{37,15,-9}, -{37,15,-8}, -{37,15,-7}, -{37,15,-6}, -{37,15,-5}, -{37,15,-4}, -{37,15,-3}, -{37,15,-2}, -{37,15,-1}, -{37,15,0}, -{37,15,1}, -{37,15,2}, -{37,15,3}, -{37,15,4}, -{37,15,5}, -{37,15,6}, -{37,15,7}, -{37,15,8}, -{37,15,9}, -{37,15,10}, -{37,15,11}, -{37,15,12}, -{37,15,13}, -{37,15,14}, -{37,15,15}, -{37,15,16}, -{37,15,17}, -{37,15,18}, -{37,15,19}, -{37,15,20}, -{37,15,21}, -{37,15,22}, -{37,15,23}, -{37,15,24}, -{37,15,25}, -{37,15,26}, -{37,15,27}, -{37,15,28}, -{37,15,29}, -{37,15,30}, -{37,15,31}, -{37,15,32}, -{37,15,33}, -{37,15,34}, -{37,15,35}, -{37,15,36}, -{37,15,37}, -{37,15,38}, -{37,15,39}, -{37,15,40}, -{37,15,41}, -{37,15,42}, -{37,15,43}, -{37,15,44}, -{37,15,45}, -{37,15,46}, -{37,16,-55}, -{37,16,-54}, -{37,16,-53}, -{37,16,-52}, -{37,16,-51}, -{37,16,-50}, -{37,16,-49}, -{37,16,-48}, -{37,16,-47}, -{37,16,-46}, -{37,16,-45}, -{37,16,-44}, -{37,16,-43}, -{37,16,-42}, -{37,16,-41}, -{37,16,-40}, -{37,16,-39}, -{37,16,-38}, -{37,16,-37}, -{37,16,-36}, -{37,16,-35}, -{37,16,-34}, -{37,16,-33}, -{37,16,-32}, -{37,16,-31}, -{37,16,-30}, -{37,16,-29}, -{37,16,-28}, -{37,16,-27}, -{37,16,-26}, -{37,16,-25}, -{37,16,-24}, -{37,16,-23}, -{37,16,-22}, -{37,16,-21}, -{37,16,-20}, -{37,16,-19}, -{37,16,-18}, -{37,16,-17}, -{37,16,-16}, -{37,16,-15}, -{37,16,-14}, -{37,16,-13}, -{37,16,-12}, -{37,16,-11}, -{37,16,-10}, -{37,16,-9}, -{37,16,-8}, -{37,16,-7}, -{37,16,-6}, -{37,16,-5}, -{37,16,-4}, -{37,16,-3}, -{37,16,-2}, -{37,16,-1}, -{37,16,0}, -{37,16,1}, -{37,16,2}, -{37,16,3}, -{37,16,4}, -{37,16,5}, -{37,16,6}, -{37,16,7}, -{37,16,8}, -{37,16,9}, -{37,16,10}, -{37,16,11}, -{37,16,12}, -{37,16,13}, -{37,16,14}, -{37,16,15}, -{37,16,16}, -{37,16,17}, -{37,16,18}, -{37,16,19}, -{37,16,20}, -{37,16,21}, -{37,16,22}, -{37,16,23}, -{37,16,24}, -{37,16,25}, -{37,16,26}, -{37,16,27}, -{37,16,28}, -{37,16,29}, -{37,16,30}, -{37,16,31}, -{37,16,32}, -{37,16,33}, -{37,16,34}, -{37,16,35}, -{37,16,36}, -{37,16,37}, -{37,16,38}, -{37,16,39}, -{37,16,40}, -{37,16,41}, -{37,16,42}, -{37,16,43}, -{37,16,44}, -{37,16,45}, -{37,16,46}, -{37,17,-56}, -{37,17,-55}, -{37,17,-54}, -{37,17,-53}, -{37,17,-52}, -{37,17,-51}, -{37,17,-50}, -{37,17,-49}, -{37,17,-48}, -{37,17,-47}, -{37,17,-46}, -{37,17,-45}, -{37,17,-44}, -{37,17,-43}, -{37,17,-42}, -{37,17,-41}, -{37,17,-40}, -{37,17,-39}, -{37,17,-38}, -{37,17,-37}, -{37,17,-36}, -{37,17,-35}, -{37,17,-34}, -{37,17,-33}, -{37,17,-32}, -{37,17,-31}, -{37,17,-30}, -{37,17,-29}, -{37,17,-28}, -{37,17,-27}, -{37,17,-26}, -{37,17,-25}, -{37,17,-24}, -{37,17,-23}, -{37,17,-22}, -{37,17,-21}, -{37,17,-20}, -{37,17,-19}, -{37,17,-18}, -{37,17,-17}, -{37,17,-16}, -{37,17,-15}, -{37,17,-14}, -{37,17,-13}, -{37,17,-12}, -{37,17,-11}, -{37,17,-10}, -{37,17,-9}, -{37,17,-8}, -{37,17,-7}, -{37,17,-6}, -{37,17,-5}, -{37,17,-4}, -{37,17,-3}, -{37,17,-2}, -{37,17,-1}, -{37,17,0}, -{37,17,1}, -{37,17,2}, -{37,17,3}, -{37,17,4}, -{37,17,5}, -{37,17,6}, -{37,17,7}, -{37,17,8}, -{37,17,9}, -{37,17,10}, -{37,17,11}, -{37,17,12}, -{37,17,13}, -{37,17,14}, -{37,17,15}, -{37,17,16}, -{37,17,17}, -{37,17,18}, -{37,17,19}, -{37,17,20}, -{37,17,21}, -{37,17,22}, -{37,17,23}, -{37,17,24}, -{37,17,25}, -{37,17,26}, -{37,17,27}, -{37,17,28}, -{37,17,29}, -{37,17,30}, -{37,17,31}, -{37,17,32}, -{37,17,33}, -{37,17,34}, -{37,17,35}, -{37,17,36}, -{37,17,37}, -{37,17,38}, -{37,17,39}, -{37,17,40}, -{37,17,41}, -{37,17,42}, -{37,17,43}, -{37,17,44}, -{37,17,45}, -{37,17,46}, -{37,18,-57}, -{37,18,-56}, -{37,18,-55}, -{37,18,-54}, -{37,18,-53}, -{37,18,-52}, -{37,18,-51}, -{37,18,-50}, -{37,18,-49}, -{37,18,-48}, -{37,18,-47}, -{37,18,-46}, -{37,18,-45}, -{37,18,-44}, -{37,18,-43}, -{37,18,-42}, -{37,18,-41}, -{37,18,-40}, -{37,18,-39}, -{37,18,-38}, -{37,18,-37}, -{37,18,-36}, -{37,18,-35}, -{37,18,-34}, -{37,18,-33}, -{37,18,-32}, -{37,18,-31}, -{37,18,-30}, -{37,18,-29}, -{37,18,-28}, -{37,18,-27}, -{37,18,-26}, -{37,18,-25}, -{37,18,-24}, -{37,18,-23}, -{37,18,-22}, -{37,18,-21}, -{37,18,-20}, -{37,18,-19}, -{37,18,-18}, -{37,18,-17}, -{37,18,-16}, -{37,18,-15}, -{37,18,-14}, -{37,18,-13}, -{37,18,-12}, -{37,18,-11}, -{37,18,-10}, -{37,18,-9}, -{37,18,-8}, -{37,18,-7}, -{37,18,-6}, -{37,18,-5}, -{37,18,-4}, -{37,18,-3}, -{37,18,-2}, -{37,18,-1}, -{37,18,0}, -{37,18,1}, -{37,18,2}, -{37,18,3}, -{37,18,4}, -{37,18,5}, -{37,18,6}, -{37,18,7}, -{37,18,8}, -{37,18,9}, -{37,18,10}, -{37,18,11}, -{37,18,12}, -{37,18,13}, -{37,18,14}, -{37,18,15}, -{37,18,16}, -{37,18,17}, -{37,18,18}, -{37,18,19}, -{37,18,20}, -{37,18,21}, -{37,18,22}, -{37,18,23}, -{37,18,24}, -{37,18,25}, -{37,18,26}, -{37,18,27}, -{37,18,28}, -{37,18,29}, -{37,18,30}, -{37,18,31}, -{37,18,32}, -{37,18,33}, -{37,18,34}, -{37,18,35}, -{37,18,36}, -{37,18,37}, -{37,18,38}, -{37,18,39}, -{37,18,40}, -{37,18,41}, -{37,18,42}, -{37,18,43}, -{37,18,44}, -{37,18,45}, -{37,18,46}, -{37,19,-58}, -{37,19,-57}, -{37,19,-56}, -{37,19,-55}, -{37,19,-54}, -{37,19,-53}, -{37,19,-52}, -{37,19,-51}, -{37,19,-50}, -{37,19,-49}, -{37,19,-48}, -{37,19,-47}, -{37,19,-46}, -{37,19,-45}, -{37,19,-44}, -{37,19,-43}, -{37,19,-42}, -{37,19,-41}, -{37,19,-40}, -{37,19,-39}, -{37,19,-38}, -{37,19,-37}, -{37,19,-36}, -{37,19,-35}, -{37,19,-34}, -{37,19,-33}, -{37,19,-32}, -{37,19,-31}, -{37,19,-30}, -{37,19,-29}, -{37,19,-28}, -{37,19,-27}, -{37,19,-26}, -{37,19,-25}, -{37,19,-24}, -{37,19,-23}, -{37,19,-22}, -{37,19,-21}, -{37,19,-20}, -{37,19,-19}, -{37,19,-18}, -{37,19,-17}, -{37,19,-16}, -{37,19,-15}, -{37,19,-14}, -{37,19,-13}, -{37,19,-12}, -{37,19,-11}, -{37,19,-10}, -{37,19,-9}, -{37,19,-8}, -{37,19,-7}, -{37,19,-6}, -{37,19,-5}, -{37,19,-4}, -{37,19,-3}, -{37,19,-2}, -{37,19,-1}, -{37,19,0}, -{37,19,1}, -{37,19,2}, -{37,19,3}, -{37,19,4}, -{37,19,5}, -{37,19,6}, -{37,19,7}, -{37,19,8}, -{37,19,9}, -{37,19,10}, -{37,19,11}, -{37,19,12}, -{37,19,13}, -{37,19,14}, -{37,19,15}, -{37,19,16}, -{37,19,17}, -{37,19,18}, -{37,19,19}, -{37,19,20}, -{37,19,21}, -{37,19,22}, -{37,19,23}, -{37,19,24}, -{37,19,25}, -{37,19,26}, -{37,19,27}, -{37,19,28}, -{37,19,29}, -{37,19,30}, -{37,19,31}, -{37,19,32}, -{37,19,33}, -{37,19,34}, -{37,19,35}, -{37,19,36}, -{37,19,37}, -{37,19,38}, -{37,19,39}, -{37,19,40}, -{37,19,41}, -{37,19,42}, -{37,19,43}, -{37,19,44}, -{37,19,45}, -{37,19,46}, -{37,20,-59}, -{37,20,-58}, -{37,20,-57}, -{37,20,-56}, -{37,20,-55}, -{37,20,-54}, -{37,20,-53}, -{37,20,-52}, -{37,20,-51}, -{37,20,-50}, -{37,20,-49}, -{37,20,-48}, -{37,20,-47}, -{37,20,-46}, -{37,20,-45}, -{37,20,-44}, -{37,20,-43}, -{37,20,-42}, -{37,20,-41}, -{37,20,-40}, -{37,20,-39}, -{37,20,-38}, -{37,20,-37}, -{37,20,-36}, -{37,20,-35}, -{37,20,-34}, -{37,20,-33}, -{37,20,-32}, -{37,20,-31}, -{37,20,-30}, -{37,20,-29}, -{37,20,-28}, -{37,20,-27}, -{37,20,-26}, -{37,20,-25}, -{37,20,-24}, -{37,20,-23}, -{37,20,-22}, -{37,20,-21}, -{37,20,-20}, -{37,20,-19}, -{37,20,-18}, -{37,20,-17}, -{37,20,-16}, -{37,20,-15}, -{37,20,-14}, -{37,20,-13}, -{37,20,-12}, -{37,20,-11}, -{37,20,-10}, -{37,20,-9}, -{37,20,-8}, -{37,20,-7}, -{37,20,-6}, -{37,20,-5}, -{37,20,-4}, -{37,20,-3}, -{37,20,-2}, -{37,20,-1}, -{37,20,0}, -{37,20,1}, -{37,20,2}, -{37,20,3}, -{37,20,4}, -{37,20,5}, -{37,20,6}, -{37,20,7}, -{37,20,8}, -{37,20,9}, -{37,20,10}, -{37,20,11}, -{37,20,12}, -{37,20,13}, -{37,20,14}, -{37,20,15}, -{37,20,16}, -{37,20,17}, -{37,20,18}, -{37,20,19}, -{37,20,20}, -{37,20,21}, -{37,20,22}, -{37,20,23}, -{37,20,24}, -{37,20,25}, -{37,20,26}, -{37,20,27}, -{37,20,28}, -{37,20,29}, -{37,20,30}, -{37,20,31}, -{37,20,32}, -{37,20,33}, -{37,20,34}, -{37,20,35}, -{37,20,36}, -{37,20,37}, -{37,20,38}, -{37,20,39}, -{37,20,40}, -{37,20,41}, -{37,20,42}, -{37,20,43}, -{37,20,44}, -{37,20,45}, -{37,20,46}, -{37,21,-60}, -{37,21,-59}, -{37,21,-58}, -{37,21,-57}, -{37,21,-56}, -{37,21,-55}, -{37,21,-54}, -{37,21,-53}, -{37,21,-52}, -{37,21,-51}, -{37,21,-50}, -{37,21,-49}, -{37,21,-48}, -{37,21,-47}, -{37,21,-46}, -{37,21,-45}, -{37,21,-44}, -{37,21,-43}, -{37,21,-42}, -{37,21,-41}, -{37,21,-40}, -{37,21,-39}, -{37,21,-38}, -{37,21,-37}, -{37,21,-36}, -{37,21,-35}, -{37,21,-34}, -{37,21,-33}, -{37,21,-32}, -{37,21,-31}, -{37,21,-30}, -{37,21,-29}, -{37,21,-28}, -{37,21,-27}, -{37,21,-26}, -{37,21,-25}, -{37,21,-24}, -{37,21,-23}, -{37,21,-22}, -{37,21,-21}, -{37,21,-20}, -{37,21,-19}, -{37,21,-18}, -{37,21,-17}, -{37,21,-16}, -{37,21,-15}, -{37,21,-14}, -{37,21,-13}, -{37,21,-12}, -{37,21,-11}, -{37,21,-10}, -{37,21,-9}, -{37,21,-8}, -{37,21,-7}, -{37,21,-6}, -{37,21,-5}, -{37,21,-4}, -{37,21,-3}, -{37,21,-2}, -{37,21,-1}, -{37,21,0}, -{37,21,1}, -{37,21,2}, -{37,21,3}, -{37,21,4}, -{37,21,5}, -{37,21,6}, -{37,21,7}, -{37,21,8}, -{37,21,9}, -{37,21,10}, -{37,21,11}, -{37,21,12}, -{37,21,13}, -{37,21,14}, -{37,21,15}, -{37,21,16}, -{37,21,17}, -{37,21,18}, -{37,21,19}, -{37,21,20}, -{37,21,21}, -{37,21,22}, -{37,21,23}, -{37,21,24}, -{37,21,25}, -{37,21,26}, -{37,21,27}, -{37,21,28}, -{37,21,29}, -{37,21,30}, -{37,21,31}, -{37,21,32}, -{37,21,33}, -{37,21,34}, -{37,21,35}, -{37,21,36}, -{37,21,37}, -{37,21,38}, -{37,21,39}, -{37,21,40}, -{37,21,41}, -{37,21,42}, -{37,21,43}, -{37,21,44}, -{37,21,45}, -{37,21,46}, -{37,22,-61}, -{37,22,-60}, -{37,22,-59}, -{37,22,-58}, -{37,22,-57}, -{37,22,-56}, -{37,22,-55}, -{37,22,-54}, -{37,22,-53}, -{37,22,-52}, -{37,22,-51}, -{37,22,-50}, -{37,22,-49}, -{37,22,-48}, -{37,22,-47}, -{37,22,-46}, -{37,22,-45}, -{37,22,-44}, -{37,22,-43}, -{37,22,-42}, -{37,22,-41}, -{37,22,-40}, -{37,22,-39}, -{37,22,-38}, -{37,22,-37}, -{37,22,-36}, -{37,22,-35}, -{37,22,-34}, -{37,22,-33}, -{37,22,-32}, -{37,22,-31}, -{37,22,-30}, -{37,22,-29}, -{37,22,-28}, -{37,22,-27}, -{37,22,-26}, -{37,22,-25}, -{37,22,-24}, -{37,22,-23}, -{37,22,-22}, -{37,22,-21}, -{37,22,-20}, -{37,22,-19}, -{37,22,-18}, -{37,22,-17}, -{37,22,-16}, -{37,22,-15}, -{37,22,-14}, -{37,22,-13}, -{37,22,-12}, -{37,22,-11}, -{37,22,-10}, -{37,22,-9}, -{37,22,-8}, -{37,22,-7}, -{37,22,-6}, -{37,22,-5}, -{37,22,-4}, -{37,22,-3}, -{37,22,-2}, -{37,22,-1}, -{37,22,0}, -{37,22,1}, -{37,22,2}, -{37,22,3}, -{37,22,4}, -{37,22,5}, -{37,22,6}, -{37,22,7}, -{37,22,8}, -{37,22,9}, -{37,22,10}, -{37,22,11}, -{37,22,12}, -{37,22,13}, -{37,22,14}, -{37,22,15}, -{37,22,16}, -{37,22,17}, -{37,22,18}, -{37,22,19}, -{37,22,20}, -{37,22,21}, -{37,22,22}, -{37,22,23}, -{37,22,24}, -{37,22,25}, -{37,22,26}, -{37,22,27}, -{37,22,28}, -{37,22,29}, -{37,22,30}, -{37,22,31}, -{37,22,32}, -{37,22,33}, -{37,22,34}, -{37,22,35}, -{37,22,36}, -{37,22,37}, -{37,22,38}, -{37,22,39}, -{37,22,40}, -{37,22,41}, -{37,22,42}, -{37,22,43}, -{37,22,44}, -{37,22,45}, -{37,22,46}, -{37,23,-62}, -{37,23,-61}, -{37,23,-60}, -{37,23,-59}, -{37,23,-58}, -{37,23,-57}, -{37,23,-56}, -{37,23,-55}, -{37,23,-54}, -{37,23,-53}, -{37,23,-52}, -{37,23,-51}, -{37,23,-50}, -{37,23,-49}, -{37,23,-48}, -{37,23,-47}, -{37,23,-46}, -{37,23,-45}, -{37,23,-44}, -{37,23,-43}, -{37,23,-42}, -{37,23,-41}, -{37,23,-40}, -{37,23,-39}, -{37,23,-38}, -{37,23,-37}, -{37,23,-36}, -{37,23,-35}, -{37,23,-34}, -{37,23,-33}, -{37,23,-32}, -{37,23,-31}, -{37,23,-30}, -{37,23,-29}, -{37,23,-28}, -{37,23,-27}, -{37,23,-26}, -{37,23,-25}, -{37,23,-24}, -{37,23,-23}, -{37,23,-22}, -{37,23,-21}, -{37,23,-20}, -{37,23,-19}, -{37,23,-18}, -{37,23,-17}, -{37,23,-16}, -{37,23,-15}, -{37,23,-14}, -{37,23,-13}, -{37,23,-12}, -{37,23,-11}, -{37,23,-10}, -{37,23,-9}, -{37,23,-8}, -{37,23,-7}, -{37,23,-6}, -{37,23,-5}, -{37,23,-4}, -{37,23,-3}, -{37,23,-2}, -{37,23,-1}, -{37,23,0}, -{37,23,1}, -{37,23,2}, -{37,23,3}, -{37,23,4}, -{37,23,5}, -{37,23,6}, -{37,23,7}, -{37,23,8}, -{37,23,9}, -{37,23,10}, -{37,23,11}, -{37,23,12}, -{37,23,13}, -{37,23,14}, -{37,23,15}, -{37,23,16}, -{37,23,17}, -{37,23,18}, -{37,23,19}, -{37,23,20}, -{37,23,21}, -{37,23,22}, -{37,23,23}, -{37,23,24}, -{37,23,25}, -{37,23,26}, -{37,23,27}, -{37,23,28}, -{37,23,29}, -{37,23,30}, -{37,23,31}, -{37,23,32}, -{37,23,33}, -{37,23,34}, -{37,23,35}, -{37,23,36}, -{37,23,37}, -{37,23,38}, -{37,23,39}, -{37,23,40}, -{37,23,41}, -{37,23,42}, -{37,23,43}, -{37,23,44}, -{37,23,45}, -{37,23,46}, -{37,23,47}, -{37,24,-63}, -{37,24,-62}, -{37,24,-61}, -{37,24,-60}, -{37,24,-59}, -{37,24,-58}, -{37,24,-57}, -{37,24,-56}, -{37,24,-55}, -{37,24,-54}, -{37,24,-53}, -{37,24,-52}, -{37,24,-51}, -{37,24,-50}, -{37,24,-49}, -{37,24,-48}, -{37,24,-47}, -{37,24,-46}, -{37,24,-45}, -{37,24,-44}, -{37,24,-43}, -{37,24,-42}, -{37,24,-41}, -{37,24,-40}, -{37,24,-39}, -{37,24,-38}, -{37,24,-37}, -{37,24,-36}, -{37,24,-35}, -{37,24,-34}, -{37,24,-33}, -{37,24,-32}, -{37,24,-31}, -{37,24,-30}, -{37,24,-29}, -{37,24,-28}, -{37,24,-27}, -{37,24,-26}, -{37,24,-25}, -{37,24,-24}, -{37,24,-23}, -{37,24,-22}, -{37,24,-21}, -{37,24,-20}, -{37,24,-19}, -{37,24,-18}, -{37,24,-17}, -{37,24,-16}, -{37,24,-15}, -{37,24,-14}, -{37,24,-13}, -{37,24,-12}, -{37,24,-11}, -{37,24,-10}, -{37,24,-9}, -{37,24,-8}, -{37,24,-7}, -{37,24,-6}, -{37,24,-5}, -{37,24,-4}, -{37,24,-3}, -{37,24,-2}, -{37,24,-1}, -{37,24,0}, -{37,24,1}, -{37,24,2}, -{37,24,3}, -{37,24,4}, -{37,24,5}, -{37,24,6}, -{37,24,7}, -{37,24,8}, -{37,24,9}, -{37,24,10}, -{37,24,11}, -{37,24,12}, -{37,24,13}, -{37,24,14}, -{37,24,15}, -{37,24,16}, -{37,24,17}, -{37,24,18}, -{37,24,19}, -{37,24,20}, -{37,24,21}, -{37,24,22}, -{37,24,23}, -{37,24,24}, -{37,24,25}, -{37,24,26}, -{37,24,27}, -{37,24,28}, -{37,24,29}, -{37,24,30}, -{37,24,31}, -{37,24,32}, -{37,24,33}, -{37,24,34}, -{37,24,35}, -{37,24,36}, -{37,24,37}, -{37,24,38}, -{37,24,39}, -{37,24,40}, -{37,24,41}, -{37,24,42}, -{37,24,43}, -{37,24,44}, -{37,24,45}, -{37,24,46}, -{37,24,47}, -{37,25,-64}, -{37,25,-63}, -{37,25,-62}, -{37,25,-61}, -{37,25,-60}, -{37,25,-59}, -{37,25,-58}, -{37,25,-57}, -{37,25,-56}, -{37,25,-55}, -{37,25,-54}, -{37,25,-53}, -{37,25,-52}, -{37,25,-51}, -{37,25,-50}, -{37,25,-49}, -{37,25,-48}, -{37,25,-47}, -{37,25,-46}, -{37,25,-45}, -{37,25,-44}, -{37,25,-43}, -{37,25,-42}, -{37,25,-41}, -{37,25,-40}, -{37,25,-39}, -{37,25,-38}, -{37,25,-37}, -{37,25,-36}, -{37,25,-35}, -{37,25,-34}, -{37,25,-33}, -{37,25,-32}, -{37,25,-31}, -{37,25,-30}, -{37,25,-29}, -{37,25,-28}, -{37,25,-27}, -{37,25,-26}, -{37,25,-25}, -{37,25,-24}, -{37,25,-23}, -{37,25,-22}, -{37,25,-21}, -{37,25,-20}, -{37,25,-19}, -{37,25,-18}, -{37,25,-17}, -{37,25,-16}, -{37,25,-15}, -{37,25,-14}, -{37,25,-13}, -{37,25,-12}, -{37,25,-11}, -{37,25,-10}, -{37,25,-9}, -{37,25,-8}, -{37,25,-7}, -{37,25,-6}, -{37,25,-5}, -{37,25,-4}, -{37,25,-3}, -{37,25,-2}, -{37,25,-1}, -{37,25,0}, -{37,25,1}, -{37,25,2}, -{37,25,3}, -{37,25,4}, -{37,25,5}, -{37,25,6}, -{37,25,7}, -{37,25,8}, -{37,25,9}, -{37,25,10}, -{37,25,11}, -{37,25,12}, -{37,25,13}, -{37,25,14}, -{37,25,15}, -{37,25,16}, -{37,25,17}, -{37,25,18}, -{37,25,19}, -{37,25,20}, -{37,25,21}, -{37,25,22}, -{37,25,23}, -{37,25,24}, -{37,25,25}, -{37,25,26}, -{37,25,27}, -{37,25,28}, -{37,25,29}, -{37,25,30}, -{37,25,31}, -{37,25,32}, -{37,25,33}, -{37,25,34}, -{37,25,35}, -{37,25,36}, -{37,25,37}, -{37,25,38}, -{37,25,39}, -{37,25,40}, -{37,25,41}, -{37,25,42}, -{37,25,43}, -{37,25,44}, -{37,25,45}, -{37,25,46}, -{37,25,47}, -{37,26,-65}, -{37,26,-64}, -{37,26,-63}, -{37,26,-62}, -{37,26,-61}, -{37,26,-60}, -{37,26,-59}, -{37,26,-58}, -{37,26,-57}, -{37,26,-56}, -{37,26,-55}, -{37,26,-54}, -{37,26,-53}, -{37,26,-52}, -{37,26,-51}, -{37,26,-50}, -{37,26,-49}, -{37,26,-48}, -{37,26,-47}, -{37,26,-46}, -{37,26,-45}, -{37,26,-44}, -{37,26,-43}, -{37,26,-42}, -{37,26,-41}, -{37,26,-40}, -{37,26,-39}, -{37,26,-38}, -{37,26,-37}, -{37,26,-36}, -{37,26,-35}, -{37,26,-34}, -{37,26,-33}, -{37,26,-32}, -{37,26,-31}, -{37,26,-30}, -{37,26,-29}, -{37,26,-28}, -{37,26,-27}, -{37,26,-26}, -{37,26,-25}, -{37,26,-24}, -{37,26,-23}, -{37,26,-22}, -{37,26,-21}, -{37,26,-20}, -{37,26,-19}, -{37,26,-18}, -{37,26,-17}, -{37,26,-16}, -{37,26,-15}, -{37,26,-14}, -{37,26,-13}, -{37,26,-12}, -{37,26,-11}, -{37,26,-10}, -{37,26,-9}, -{37,26,-8}, -{37,26,-7}, -{37,26,-6}, -{37,26,-5}, -{37,26,-4}, -{37,26,-3}, -{37,26,-2}, -{37,26,-1}, -{37,26,0}, -{37,26,1}, -{37,26,2}, -{37,26,3}, -{37,26,4}, -{37,26,5}, -{37,26,6}, -{37,26,7}, -{37,26,8}, -{37,26,9}, -{37,26,10}, -{37,26,11}, -{37,26,12}, -{37,26,13}, -{37,26,14}, -{37,26,15}, -{37,26,16}, -{37,26,17}, -{37,26,18}, -{37,26,19}, -{37,26,20}, -{37,26,21}, -{37,26,22}, -{37,26,23}, -{37,26,24}, -{37,26,25}, -{37,26,26}, -{37,26,27}, -{37,26,28}, -{37,26,29}, -{37,26,30}, -{37,26,31}, -{37,26,32}, -{37,26,33}, -{37,26,34}, -{37,26,35}, -{37,26,36}, -{37,26,37}, -{37,26,38}, -{37,26,39}, -{37,26,40}, -{37,26,41}, -{37,26,42}, -{37,26,43}, -{37,26,44}, -{37,26,45}, -{37,26,46}, -{37,26,47}, -{37,27,-66}, -{37,27,-65}, -{37,27,-64}, -{37,27,-63}, -{37,27,-62}, -{37,27,-61}, -{37,27,-60}, -{37,27,-59}, -{37,27,-58}, -{37,27,-57}, -{37,27,-56}, -{37,27,-55}, -{37,27,-54}, -{37,27,-53}, -{37,27,-52}, -{37,27,-51}, -{37,27,-50}, -{37,27,-49}, -{37,27,-48}, -{37,27,-47}, -{37,27,-46}, -{37,27,-45}, -{37,27,-44}, -{37,27,-43}, -{37,27,-42}, -{37,27,-41}, -{37,27,-40}, -{37,27,-39}, -{37,27,-38}, -{37,27,-37}, -{37,27,-36}, -{37,27,-35}, -{37,27,-34}, -{37,27,-33}, -{37,27,-32}, -{37,27,-31}, -{37,27,-30}, -{37,27,-29}, -{37,27,-28}, -{37,27,-27}, -{37,27,-26}, -{37,27,-25}, -{37,27,-24}, -{37,27,-23}, -{37,27,-22}, -{37,27,-21}, -{37,27,-20}, -{37,27,-19}, -{37,27,-18}, -{37,27,-17}, -{37,27,-16}, -{37,27,-15}, -{37,27,-14}, -{37,27,-13}, -{37,27,-12}, -{37,27,-11}, -{37,27,-10}, -{37,27,-9}, -{37,27,-8}, -{37,27,-7}, -{37,27,-6}, -{37,27,-5}, -{37,27,-4}, -{37,27,-3}, -{37,27,-2}, -{37,27,-1}, -{37,27,0}, -{37,27,1}, -{37,27,2}, -{37,27,3}, -{37,27,4}, -{37,27,5}, -{37,27,6}, -{37,27,7}, -{37,27,8}, -{37,27,9}, -{37,27,10}, -{37,27,11}, -{37,27,12}, -{37,27,13}, -{37,27,14}, -{37,27,15}, -{37,27,16}, -{37,27,17}, -{37,27,18}, -{37,27,19}, -{37,27,20}, -{37,27,21}, -{37,27,22}, -{37,27,23}, -{37,27,24}, -{37,27,25}, -{37,27,26}, -{37,27,27}, -{37,27,28}, -{37,27,29}, -{37,27,30}, -{37,27,31}, -{37,27,32}, -{37,27,33}, -{37,27,34}, -{37,27,35}, -{37,27,36}, -{37,27,37}, -{37,27,38}, -{37,27,39}, -{37,27,40}, -{37,27,41}, -{37,27,42}, -{37,27,43}, -{37,27,44}, -{37,27,45}, -{37,27,46}, -{37,27,47}, -{37,28,-67}, -{37,28,-66}, -{37,28,-65}, -{37,28,-64}, -{37,28,-63}, -{37,28,-62}, -{37,28,-61}, -{37,28,-60}, -{37,28,-59}, -{37,28,-58}, -{37,28,-57}, -{37,28,-56}, -{37,28,-55}, -{37,28,-54}, -{37,28,-53}, -{37,28,-52}, -{37,28,-51}, -{37,28,-50}, -{37,28,-49}, -{37,28,-48}, -{37,28,-47}, -{37,28,-46}, -{37,28,-45}, -{37,28,-44}, -{37,28,-43}, -{37,28,-42}, -{37,28,-41}, -{37,28,-40}, -{37,28,-39}, -{37,28,-38}, -{37,28,-37}, -{37,28,-36}, -{37,28,-35}, -{37,28,-34}, -{37,28,-33}, -{37,28,-32}, -{37,28,-31}, -{37,28,-30}, -{37,28,-29}, -{37,28,-28}, -{37,28,-27}, -{37,28,-26}, -{37,28,-25}, -{37,28,-24}, -{37,28,-23}, -{37,28,-22}, -{37,28,-21}, -{37,28,-20}, -{37,28,-19}, -{37,28,-18}, -{37,28,-17}, -{37,28,-16}, -{37,28,-15}, -{37,28,-14}, -{37,28,-13}, -{37,28,-12}, -{37,28,-11}, -{37,28,-10}, -{37,28,-9}, -{37,28,-8}, -{37,28,-7}, -{37,28,-6}, -{37,28,-5}, -{37,28,-4}, -{37,28,-3}, -{37,28,-2}, -{37,28,-1}, -{37,28,0}, -{37,28,1}, -{37,28,2}, -{37,28,3}, -{37,28,4}, -{37,28,5}, -{37,28,6}, -{37,28,7}, -{37,28,8}, -{37,28,9}, -{37,28,10}, -{37,28,11}, -{37,28,12}, -{37,28,13}, -{37,28,14}, -{37,28,15}, -{37,28,16}, -{37,28,17}, -{37,28,18}, -{37,28,19}, -{37,28,20}, -{37,28,21}, -{37,28,22}, -{37,28,23}, -{37,28,24}, -{37,28,25}, -{37,28,26}, -{37,28,27}, -{37,28,28}, -{37,28,29}, -{37,28,30}, -{37,28,31}, -{37,28,32}, -{37,28,33}, -{37,28,34}, -{37,28,35}, -{37,28,36}, -{37,28,37}, -{37,28,38}, -{37,28,39}, -{37,28,40}, -{37,28,41}, -{37,28,42}, -{37,28,43}, -{37,28,44}, -{37,28,45}, -{37,28,46}, -{37,28,47}, -{37,29,-68}, -{37,29,-67}, -{37,29,-66}, -{37,29,-65}, -{37,29,-64}, -{37,29,-63}, -{37,29,-62}, -{37,29,-61}, -{37,29,-60}, -{37,29,-59}, -{37,29,-58}, -{37,29,-57}, -{37,29,-56}, -{37,29,-55}, -{37,29,-54}, -{37,29,-53}, -{37,29,-52}, -{37,29,-51}, -{37,29,-50}, -{37,29,-49}, -{37,29,-48}, -{37,29,-47}, -{37,29,-46}, -{37,29,-45}, -{37,29,-44}, -{37,29,-43}, -{37,29,-42}, -{37,29,-41}, -{37,29,-40}, -{37,29,-39}, -{37,29,-38}, -{37,29,-37}, -{37,29,-36}, -{37,29,-35}, -{37,29,-34}, -{37,29,-33}, -{37,29,-32}, -{37,29,-31}, -{37,29,-30}, -{37,29,-29}, -{37,29,-28}, -{37,29,-27}, -{37,29,-26}, -{37,29,-25}, -{37,29,-24}, -{37,29,-23}, -{37,29,-22}, -{37,29,-21}, -{37,29,-20}, -{37,29,-19}, -{37,29,-18}, -{37,29,-17}, -{37,29,-16}, -{37,29,-15}, -{37,29,-14}, -{37,29,-13}, -{37,29,-12}, -{37,29,-11}, -{37,29,-10}, -{37,29,-9}, -{37,29,-8}, -{37,29,-7}, -{37,29,-6}, -{37,29,-5}, -{37,29,-4}, -{37,29,-3}, -{37,29,-2}, -{37,29,-1}, -{37,29,0}, -{37,29,1}, -{37,29,2}, -{37,29,3}, -{37,29,4}, -{37,29,5}, -{37,29,6}, -{37,29,7}, -{37,29,8}, -{37,29,9}, -{37,29,10}, -{37,29,11}, -{37,29,12}, -{37,29,13}, -{37,29,14}, -{37,29,15}, -{37,29,16}, -{37,29,17}, -{37,29,18}, -{37,29,19}, -{37,29,20}, -{37,29,21}, -{37,29,22}, -{37,29,23}, -{37,29,24}, -{37,29,25}, -{37,29,26}, -{37,29,27}, -{37,29,28}, -{37,29,29}, -{37,29,30}, -{37,29,31}, -{37,29,32}, -{37,29,33}, -{37,29,34}, -{37,29,35}, -{37,29,36}, -{37,29,37}, -{37,29,38}, -{37,29,39}, -{37,29,40}, -{37,29,41}, -{37,29,42}, -{37,29,43}, -{37,29,44}, -{37,29,45}, -{37,29,46}, -{37,29,47}, -{37,30,-68}, -{37,30,-67}, -{37,30,-66}, -{37,30,-65}, -{37,30,-64}, -{37,30,-63}, -{37,30,-62}, -{37,30,-61}, -{37,30,-60}, -{37,30,-59}, -{37,30,-58}, -{37,30,-57}, -{37,30,-56}, -{37,30,-55}, -{37,30,-54}, -{37,30,-53}, -{37,30,-52}, -{37,30,-51}, -{37,30,-50}, -{37,30,-49}, -{37,30,-48}, -{37,30,-47}, -{37,30,-46}, -{37,30,-45}, -{37,30,-44}, -{37,30,-43}, -{37,30,-42}, -{37,30,-41}, -{37,30,-40}, -{37,30,-39}, -{37,30,-38}, -{37,30,-37}, -{37,30,-36}, -{37,30,-35}, -{37,30,-34}, -{37,30,-33}, -{37,30,-32}, -{37,30,-31}, -{37,30,-30}, -{37,30,-29}, -{37,30,-28}, -{37,30,-27}, -{37,30,-26}, -{37,30,-25}, -{37,30,-24}, -{37,30,-23}, -{37,30,-22}, -{37,30,-21}, -{37,30,-20}, -{37,30,-19}, -{37,30,-18}, -{37,30,-17}, -{37,30,-16}, -{37,30,-15}, -{37,30,-14}, -{37,30,-13}, -{37,30,-12}, -{37,30,-11}, -{37,30,-10}, -{37,30,-9}, -{37,30,-8}, -{37,30,-7}, -{37,30,-6}, -{37,30,-5}, -{37,30,-4}, -{37,30,-3}, -{37,30,-2}, -{37,30,-1}, -{37,30,0}, -{37,30,1}, -{37,30,2}, -{37,30,3}, -{37,30,4}, -{37,30,5}, -{37,30,6}, -{37,30,7}, -{37,30,8}, -{37,30,9}, -{37,30,10}, -{37,30,11}, -{37,30,12}, -{37,30,13}, -{37,30,14}, -{37,30,15}, -{37,30,16}, -{37,30,17}, -{37,30,18}, -{37,30,19}, -{37,30,20}, -{37,30,21}, -{37,30,22}, -{37,30,23}, -{37,30,24}, -{37,30,25}, -{37,30,26}, -{37,30,27}, -{37,30,28}, -{37,30,29}, -{37,30,30}, -{37,30,31}, -{37,30,32}, -{37,30,33}, -{37,30,34}, -{37,30,35}, -{37,30,36}, -{37,30,37}, -{37,30,38}, -{37,30,39}, -{37,30,40}, -{37,30,41}, -{37,30,42}, -{37,30,43}, -{37,30,44}, -{37,30,45}, -{37,30,46}, -{37,30,47}, -{37,31,-69}, -{37,31,-68}, -{37,31,-67}, -{37,31,-66}, -{37,31,-65}, -{37,31,-64}, -{37,31,-63}, -{37,31,-62}, -{37,31,-61}, -{37,31,-60}, -{37,31,-59}, -{37,31,-58}, -{37,31,-57}, -{37,31,-56}, -{37,31,-55}, -{37,31,-54}, -{37,31,-53}, -{37,31,-52}, -{37,31,-51}, -{37,31,-50}, -{37,31,-49}, -{37,31,-48}, -{37,31,-47}, -{37,31,-46}, -{37,31,-45}, -{37,31,-44}, -{37,31,-43}, -{37,31,-42}, -{37,31,-41}, -{37,31,-40}, -{37,31,-39}, -{37,31,-38}, -{37,31,-37}, -{37,31,-36}, -{37,31,-35}, -{37,31,-34}, -{37,31,-33}, -{37,31,-32}, -{37,31,-31}, -{37,31,-30}, -{37,31,-29}, -{37,31,-28}, -{37,31,-27}, -{37,31,-26}, -{37,31,-25}, -{37,31,-24}, -{37,31,-23}, -{37,31,-22}, -{37,31,-21}, -{37,31,-20}, -{37,31,-19}, -{37,31,-18}, -{37,31,-17}, -{37,31,-16}, -{37,31,-15}, -{37,31,-14}, -{37,31,-13}, -{37,31,-12}, -{37,31,-11}, -{37,31,-10}, -{37,31,-9}, -{37,31,-8}, -{37,31,-7}, -{37,31,-6}, -{37,31,-5}, -{37,31,-4}, -{37,31,-3}, -{37,31,-2}, -{37,31,-1}, -{37,31,0}, -{37,31,1}, -{37,31,2}, -{37,31,3}, -{37,31,4}, -{37,31,5}, -{37,31,6}, -{37,31,7}, -{37,31,8}, -{37,31,9}, -{37,31,10}, -{37,31,11}, -{37,31,12}, -{37,31,13}, -{37,31,14}, -{37,31,15}, -{37,31,16}, -{37,31,17}, -{37,31,18}, -{37,31,19}, -{37,31,20}, -{37,31,21}, -{37,31,22}, -{37,31,23}, -{37,31,24}, -{37,31,25}, -{37,31,26}, -{37,31,27}, -{37,31,28}, -{37,31,29}, -{37,31,30}, -{37,31,31}, -{37,31,32}, -{37,31,33}, -{37,31,34}, -{37,31,35}, -{37,31,36}, -{37,31,37}, -{37,31,38}, -{37,31,39}, -{37,31,40}, -{37,31,41}, -{37,31,42}, -{37,31,43}, -{37,31,44}, -{37,31,45}, -{37,31,46}, -{37,31,47}, -{37,32,-70}, -{37,32,-69}, -{37,32,-68}, -{37,32,-67}, -{37,32,-66}, -{37,32,-65}, -{37,32,-64}, -{37,32,-63}, -{37,32,-62}, -{37,32,-61}, -{37,32,-60}, -{37,32,-59}, -{37,32,-58}, -{37,32,-57}, -{37,32,-56}, -{37,32,-55}, -{37,32,-54}, -{37,32,-53}, -{37,32,-52}, -{37,32,-51}, -{37,32,-50}, -{37,32,-49}, -{37,32,-48}, -{37,32,-47}, -{37,32,-46}, -{37,32,-45}, -{37,32,-44}, -{37,32,-43}, -{37,32,-42}, -{37,32,-41}, -{37,32,-40}, -{37,32,-39}, -{37,32,-38}, -{37,32,-37}, -{37,32,-36}, -{37,32,-35}, -{37,32,-34}, -{37,32,-33}, -{37,32,-32}, -{37,32,-31}, -{37,32,-30}, -{37,32,-29}, -{37,32,-28}, -{37,32,-27}, -{37,32,-26}, -{37,32,-25}, -{37,32,-24}, -{37,32,-23}, -{37,32,-22}, -{37,32,-21}, -{37,32,-20}, -{37,32,-19}, -{37,32,-18}, -{37,32,-17}, -{37,32,-16}, -{37,32,-15}, -{37,32,-14}, -{37,32,-13}, -{37,32,-12}, -{37,32,-11}, -{37,32,-10}, -{37,32,-9}, -{37,32,-8}, -{37,32,-7}, -{37,32,-6}, -{37,32,-5}, -{37,32,-4}, -{37,32,-3}, -{37,32,-2}, -{37,32,-1}, -{37,32,0}, -{37,32,1}, -{37,32,2}, -{37,32,3}, -{37,32,4}, -{37,32,5}, -{37,32,6}, -{37,32,7}, -{37,32,8}, -{37,32,9}, -{37,32,10}, -{37,32,11}, -{37,32,12}, -{37,32,13}, -{37,32,14}, -{37,32,15}, -{37,32,16}, -{37,32,17}, -{37,32,18}, -{37,32,19}, -{37,32,20}, -{37,32,21}, -{37,32,22}, -{37,32,23}, -{37,32,24}, -{37,32,25}, -{37,32,26}, -{37,32,27}, -{37,32,28}, -{37,32,29}, -{37,32,30}, -{37,32,31}, -{37,32,32}, -{37,32,33}, -{37,32,34}, -{37,32,35}, -{37,32,36}, -{37,32,37}, -{37,32,38}, -{37,32,39}, -{37,32,40}, -{37,32,41}, -{37,32,42}, -{37,32,43}, -{37,32,44}, -{37,32,45}, -{37,32,46}, -{37,32,47}, -{37,33,-71}, -{37,33,-70}, -{37,33,-69}, -{37,33,-68}, -{37,33,-67}, -{37,33,-66}, -{37,33,-65}, -{37,33,-64}, -{37,33,-63}, -{37,33,-62}, -{37,33,-61}, -{37,33,-60}, -{37,33,-59}, -{37,33,-58}, -{37,33,-57}, -{37,33,-56}, -{37,33,-55}, -{37,33,-54}, -{37,33,-53}, -{37,33,-52}, -{37,33,-51}, -{37,33,-50}, -{37,33,-49}, -{37,33,-48}, -{37,33,-47}, -{37,33,-46}, -{37,33,-45}, -{37,33,-44}, -{37,33,-43}, -{37,33,-42}, -{37,33,-41}, -{37,33,-40}, -{37,33,-39}, -{37,33,-38}, -{37,33,-37}, -{37,33,-36}, -{37,33,-35}, -{37,33,-34}, -{37,33,-33}, -{37,33,-32}, -{37,33,-31}, -{37,33,-30}, -{37,33,-29}, -{37,33,-28}, -{37,33,-27}, -{37,33,-26}, -{37,33,-25}, -{37,33,-24}, -{37,33,-23}, -{37,33,-22}, -{37,33,-21}, -{37,33,-20}, -{37,33,-19}, -{37,33,-18}, -{37,33,-17}, -{37,33,-16}, -{37,33,-15}, -{37,33,-14}, -{37,33,-13}, -{37,33,-12}, -{37,33,-11}, -{37,33,-10}, -{37,33,-9}, -{37,33,-8}, -{37,33,-7}, -{37,33,-6}, -{37,33,-5}, -{37,33,-4}, -{37,33,-3}, -{37,33,-2}, -{37,33,-1}, -{37,33,0}, -{37,33,1}, -{37,33,2}, -{37,33,3}, -{37,33,4}, -{37,33,5}, -{37,33,6}, -{37,33,7}, -{37,33,8}, -{37,33,9}, -{37,33,10}, -{37,33,11}, -{37,33,12}, -{37,33,13}, -{37,33,14}, -{37,33,15}, -{37,33,16}, -{37,33,17}, -{37,33,18}, -{37,33,19}, -{37,33,20}, -{37,33,21}, -{37,33,22}, -{37,33,23}, -{37,33,24}, -{37,33,25}, -{37,33,26}, -{37,33,27}, -{37,33,28}, -{37,33,29}, -{37,33,30}, -{37,33,31}, -{37,33,32}, -{37,33,33}, -{37,33,34}, -{37,33,35}, -{37,33,36}, -{37,33,37}, -{37,33,38}, -{37,33,39}, -{37,33,40}, -{37,33,41}, -{37,33,42}, -{37,33,43}, -{37,33,44}, -{37,33,45}, -{37,33,46}, -{37,33,47}, -{37,33,48}, -{37,34,-72}, -{37,34,-71}, -{37,34,-70}, -{37,34,-69}, -{37,34,-68}, -{37,34,-67}, -{37,34,-66}, -{37,34,-65}, -{37,34,-64}, -{37,34,-63}, -{37,34,-62}, -{37,34,-61}, -{37,34,-60}, -{37,34,-59}, -{37,34,-58}, -{37,34,-57}, -{37,34,-56}, -{37,34,-55}, -{37,34,-54}, -{37,34,-53}, -{37,34,-52}, -{37,34,-51}, -{37,34,-50}, -{37,34,-49}, -{37,34,-48}, -{37,34,-47}, -{37,34,-46}, -{37,34,-45}, -{37,34,-44}, -{37,34,-43}, -{37,34,-42}, -{37,34,-41}, -{37,34,-40}, -{37,34,-39}, -{37,34,-38}, -{37,34,-37}, -{37,34,-36}, -{37,34,-35}, -{37,34,-34}, -{37,34,-33}, -{37,34,-32}, -{37,34,-31}, -{37,34,-30}, -{37,34,-29}, -{37,34,-28}, -{37,34,-27}, -{37,34,-26}, -{37,34,-25}, -{37,34,-24}, -{37,34,-23}, -{37,34,-22}, -{37,34,-21}, -{37,34,-20}, -{37,34,-19}, -{37,34,-18}, -{37,34,-17}, -{37,34,-16}, -{37,34,-15}, -{37,34,-14}, -{37,34,-13}, -{37,34,-12}, -{37,34,-11}, -{37,34,-10}, -{37,34,-9}, -{37,34,-8}, -{37,34,-7}, -{37,34,-6}, -{37,34,-5}, -{37,34,-4}, -{37,34,-3}, -{37,34,-2}, -{37,34,-1}, -{37,34,0}, -{37,34,1}, -{37,34,2}, -{37,34,3}, -{37,34,4}, -{37,34,5}, -{37,34,6}, -{37,34,7}, -{37,34,8}, -{37,34,9}, -{37,34,10}, -{37,34,11}, -{37,34,12}, -{37,34,13}, -{37,34,14}, -{37,34,15}, -{37,34,16}, -{37,34,17}, -{37,34,18}, -{37,34,19}, -{37,34,20}, -{37,34,21}, -{37,34,22}, -{37,34,23}, -{37,34,24}, -{37,34,25}, -{37,34,26}, -{37,34,27}, -{37,34,28}, -{37,34,29}, -{37,34,30}, -{37,34,31}, -{37,34,32}, -{37,34,33}, -{37,34,34}, -{37,34,35}, -{37,34,36}, -{37,34,37}, -{37,34,38}, -{37,34,39}, -{37,34,40}, -{37,34,41}, -{37,34,42}, -{37,34,43}, -{37,34,44}, -{37,34,45}, -{37,34,46}, -{37,34,47}, -{37,34,48}, -{37,35,-73}, -{37,35,-72}, -{37,35,-71}, -{37,35,-70}, -{37,35,-69}, -{37,35,-68}, -{37,35,-67}, -{37,35,-66}, -{37,35,-65}, -{37,35,-64}, -{37,35,-63}, -{37,35,-62}, -{37,35,-61}, -{37,35,-60}, -{37,35,-59}, -{37,35,-58}, -{37,35,-57}, -{37,35,-56}, -{37,35,-55}, -{37,35,-54}, -{37,35,-53}, -{37,35,-52}, -{37,35,-51}, -{37,35,-50}, -{37,35,-49}, -{37,35,-48}, -{37,35,-47}, -{37,35,-46}, -{37,35,-45}, -{37,35,-44}, -{37,35,-43}, -{37,35,-42}, -{37,35,-41}, -{37,35,-40}, -{37,35,-39}, -{37,35,-38}, -{37,35,-37}, -{37,35,-36}, -{37,35,-35}, -{37,35,-34}, -{37,35,-33}, -{37,35,-32}, -{37,35,-31}, -{37,35,-30}, -{37,35,-29}, -{37,35,-28}, -{37,35,-27}, -{37,35,-26}, -{37,35,-25}, -{37,35,-24}, -{37,35,-23}, -{37,35,-22}, -{37,35,-21}, -{37,35,-20}, -{37,35,-19}, -{37,35,-18}, -{37,35,-17}, -{37,35,-16}, -{37,35,-15}, -{37,35,-14}, -{37,35,-13}, -{37,35,-12}, -{37,35,-11}, -{37,35,-10}, -{37,35,-9}, -{37,35,-8}, -{37,35,-7}, -{37,35,-6}, -{37,35,-5}, -{37,35,-4}, -{37,35,-3}, -{37,35,-2}, -{37,35,-1}, -{37,35,0}, -{37,35,1}, -{37,35,2}, -{37,35,3}, -{37,35,4}, -{37,35,5}, -{37,35,6}, -{37,35,7}, -{37,35,8}, -{37,35,9}, -{37,35,10}, -{37,35,11}, -{37,35,12}, -{37,35,13}, -{37,35,14}, -{37,35,15}, -{37,35,16}, -{37,35,17}, -{37,35,18}, -{37,35,19}, -{37,35,20}, -{37,35,21}, -{37,35,22}, -{37,35,23}, -{37,35,24}, -{37,35,25}, -{37,35,26}, -{37,35,27}, -{37,35,28}, -{37,35,29}, -{37,35,30}, -{37,35,31}, -{37,35,32}, -{37,35,33}, -{37,35,34}, -{37,35,35}, -{37,35,36}, -{37,35,37}, -{37,35,38}, -{37,35,39}, -{37,35,40}, -{37,35,41}, -{37,35,42}, -{37,35,43}, -{37,35,44}, -{37,35,45}, -{37,35,46}, -{37,35,47}, -{37,35,48}, -{37,36,-74}, -{37,36,-73}, -{37,36,-72}, -{37,36,-71}, -{37,36,-70}, -{37,36,-69}, -{37,36,-68}, -{37,36,-67}, -{37,36,-66}, -{37,36,-65}, -{37,36,-64}, -{37,36,-63}, -{37,36,-62}, -{37,36,-61}, -{37,36,-60}, -{37,36,-59}, -{37,36,-58}, -{37,36,-57}, -{37,36,-56}, -{37,36,-55}, -{37,36,-54}, -{37,36,-53}, -{37,36,-52}, -{37,36,-51}, -{37,36,-50}, -{37,36,-49}, -{37,36,-48}, -{37,36,-47}, -{37,36,-46}, -{37,36,-45}, -{37,36,-44}, -{37,36,-43}, -{37,36,-42}, -{37,36,-41}, -{37,36,-40}, -{37,36,-39}, -{37,36,-38}, -{37,36,-37}, -{37,36,-36}, -{37,36,-35}, -{37,36,-34}, -{37,36,-33}, -{37,36,-32}, -{37,36,-31}, -{37,36,-30}, -{37,36,-29}, -{37,36,-28}, -{37,36,-27}, -{37,36,-26}, -{37,36,-25}, -{37,36,-24}, -{37,36,-23}, -{37,36,-22}, -{37,36,-21}, -{37,36,-20}, -{37,36,-19}, -{37,36,-18}, -{37,36,-17}, -{37,36,-16}, -{37,36,-15}, -{37,36,-14}, -{37,36,-13}, -{37,36,-12}, -{37,36,-11}, -{37,36,-10}, -{37,36,-9}, -{37,36,-8}, -{37,36,-7}, -{37,36,-6}, -{37,36,-5}, -{37,36,-4}, -{37,36,-3}, -{37,36,-2}, -{37,36,-1}, -{37,36,0}, -{37,36,1}, -{37,36,2}, -{37,36,3}, -{37,36,4}, -{37,36,5}, -{37,36,6}, -{37,36,7}, -{37,36,8}, -{37,36,9}, -{37,36,10}, -{37,36,11}, -{37,36,12}, -{37,36,13}, -{37,36,14}, -{37,36,15}, -{37,36,16}, -{37,36,17}, -{37,36,18}, -{37,36,19}, -{37,36,20}, -{37,36,21}, -{37,36,22}, -{37,36,23}, -{37,36,24}, -{37,36,25}, -{37,36,26}, -{37,36,27}, -{37,36,28}, -{37,36,29}, -{37,36,30}, -{37,36,31}, -{37,36,32}, -{37,36,33}, -{37,36,34}, -{37,36,35}, -{37,36,36}, -{37,36,37}, -{37,36,38}, -{37,36,39}, -{37,36,40}, -{37,36,41}, -{37,36,42}, -{37,36,43}, -{37,36,44}, -{37,36,45}, -{37,36,46}, -{37,36,47}, -{37,36,48}, -{37,37,-75}, -{37,37,-74}, -{37,37,-73}, -{37,37,-72}, -{37,37,-71}, -{37,37,-70}, -{37,37,-69}, -{37,37,-68}, -{37,37,-67}, -{37,37,-66}, -{37,37,-65}, -{37,37,-64}, -{37,37,-63}, -{37,37,-62}, -{37,37,-61}, -{37,37,-60}, -{37,37,-59}, -{37,37,-58}, -{37,37,-57}, -{37,37,-56}, -{37,37,-55}, -{37,37,-54}, -{37,37,-53}, -{37,37,-52}, -{37,37,-51}, -{37,37,-50}, -{37,37,-49}, -{37,37,-48}, -{37,37,-47}, -{37,37,-46}, -{37,37,-45}, -{37,37,-44}, -{37,37,-43}, -{37,37,-42}, -{37,37,-41}, -{37,37,-40}, -{37,37,-39}, -{37,37,-38}, -{37,37,-37}, -{37,37,-36}, -{37,37,-35}, -{37,37,-34}, -{37,37,-33}, -{37,37,-32}, -{37,37,-31}, -{37,37,-30}, -{37,37,-29}, -{37,37,-28}, -{37,37,-27}, -{37,37,-26}, -{37,37,-25}, -{37,37,-24}, -{37,37,-23}, -{37,37,-22}, -{37,37,-21}, -{37,37,-20}, -{37,37,-19}, -{37,37,-18}, -{37,37,-17}, -{37,37,-16}, -{37,37,-15}, -{37,37,-14}, -{37,37,-13}, -{37,37,-12}, -{37,37,-11}, -{37,37,-10}, -{37,37,-9}, -{37,37,-8}, -{37,37,-7}, -{37,37,-6}, -{37,37,-5}, -{37,37,-4}, -{37,37,-3}, -{37,37,-2}, -{37,37,-1}, -{37,37,0}, -{37,37,1}, -{37,37,2}, -{37,37,3}, -{37,37,4}, -{37,37,5}, -{37,37,6}, -{37,37,7}, -{37,37,8}, -{37,37,9}, -{37,37,10}, -{37,37,11}, -{37,37,12}, -{37,37,13}, -{37,37,14}, -{37,37,15}, -{37,37,16}, -{37,37,17}, -{37,37,18}, -{37,37,19}, -{37,37,20}, -{37,37,21}, -{37,37,22}, -{37,37,23}, -{37,37,24}, -{37,37,25}, -{37,37,26}, -{37,37,27}, -{37,37,28}, -{37,37,29}, -{37,37,30}, -{37,37,31}, -{37,37,32}, -{37,37,33}, -{37,37,34}, -{37,37,35}, -{37,37,36}, -{37,37,37}, -{37,37,38}, -{37,37,39}, -{37,37,40}, -{37,37,41}, -{37,37,42}, -{37,37,43}, -{37,37,44}, -{37,37,45}, -{37,37,46}, -{37,37,47}, -{37,37,48}, -{37,38,-76}, -{37,38,-75}, -{37,38,-74}, -{37,38,-73}, -{37,38,-72}, -{37,38,-71}, -{37,38,-70}, -{37,38,-69}, -{37,38,-68}, -{37,38,-67}, -{37,38,-66}, -{37,38,-65}, -{37,38,-64}, -{37,38,-63}, -{37,38,-62}, -{37,38,-61}, -{37,38,-60}, -{37,38,-59}, -{37,38,-58}, -{37,38,-57}, -{37,38,-56}, -{37,38,-55}, -{37,38,-54}, -{37,38,-53}, -{37,38,-52}, -{37,38,-51}, -{37,38,-50}, -{37,38,-49}, -{37,38,-48}, -{37,38,-47}, -{37,38,-46}, -{37,38,-45}, -{37,38,-44}, -{37,38,-43}, -{37,38,-42}, -{37,38,-41}, -{37,38,-40}, -{37,38,-39}, -{37,38,-38}, -{37,38,-37}, -{37,38,-36}, -{37,38,-35}, -{37,38,-34}, -{37,38,-33}, -{37,38,-32}, -{37,38,-31}, -{37,38,-30}, -{37,38,-29}, -{37,38,-28}, -{37,38,-27}, -{37,38,-26}, -{37,38,-25}, -{37,38,-24}, -{37,38,-23}, -{37,38,-22}, -{37,38,-21}, -{37,38,-20}, -{37,38,-19}, -{37,38,-18}, -{37,38,-17}, -{37,38,-16}, -{37,38,-15}, -{37,38,-14}, -{37,38,-13}, -{37,38,-12}, -{37,38,-11}, -{37,38,-10}, -{37,38,-9}, -{37,38,-8}, -{37,38,-7}, -{37,38,-6}, -{37,38,-5}, -{37,38,-4}, -{37,38,-3}, -{37,38,-2}, -{37,38,-1}, -{37,38,0}, -{37,38,1}, -{37,38,2}, -{37,38,3}, -{37,38,4}, -{37,38,5}, -{37,38,6}, -{37,38,7}, -{37,38,8}, -{37,38,9}, -{37,38,10}, -{37,38,11}, -{37,38,12}, -{37,38,13}, -{37,38,14}, -{37,38,15}, -{37,38,16}, -{37,38,17}, -{37,38,18}, -{37,38,19}, -{37,38,20}, -{37,38,21}, -{37,38,22}, -{37,38,23}, -{37,38,24}, -{37,38,25}, -{37,38,26}, -{37,38,27}, -{37,38,28}, -{37,38,29}, -{37,38,30}, -{37,38,31}, -{37,38,32}, -{37,38,33}, -{37,38,34}, -{37,38,35}, -{37,38,36}, -{37,38,37}, -{37,38,38}, -{37,38,39}, -{37,38,40}, -{37,38,41}, -{37,38,42}, -{37,38,43}, -{37,38,44}, -{37,38,45}, -{37,38,46}, -{37,38,47}, -{37,38,48}, -{37,39,-77}, -{37,39,-76}, -{37,39,-75}, -{37,39,-74}, -{37,39,-73}, -{37,39,-72}, -{37,39,-71}, -{37,39,-70}, -{37,39,-69}, -{37,39,-68}, -{37,39,-67}, -{37,39,-66}, -{37,39,-65}, -{37,39,-64}, -{37,39,-63}, -{37,39,-62}, -{37,39,-61}, -{37,39,-60}, -{37,39,-59}, -{37,39,-58}, -{37,39,-57}, -{37,39,-56}, -{37,39,-55}, -{37,39,-54}, -{37,39,-53}, -{37,39,-52}, -{37,39,-51}, -{37,39,-50}, -{37,39,-49}, -{37,39,-48}, -{37,39,-47}, -{37,39,-46}, -{37,39,-45}, -{37,39,-44}, -{37,39,-43}, -{37,39,-42}, -{37,39,-41}, -{37,39,-40}, -{37,39,-39}, -{37,39,-38}, -{37,39,-37}, -{37,39,-36}, -{37,39,-35}, -{37,39,-34}, -{37,39,-33}, -{37,39,-32}, -{37,39,-31}, -{37,39,-30}, -{37,39,-29}, -{37,39,-28}, -{37,39,-27}, -{37,39,-26}, -{37,39,-25}, -{37,39,-24}, -{37,39,-23}, -{37,39,-22}, -{37,39,-21}, -{37,39,-20}, -{37,39,-19}, -{37,39,-18}, -{37,39,-17}, -{37,39,-16}, -{37,39,-15}, -{37,39,-14}, -{37,39,-13}, -{37,39,-12}, -{37,39,-11}, -{37,39,-10}, -{37,39,-9}, -{37,39,-8}, -{37,39,-7}, -{37,39,-6}, -{37,39,-5}, -{37,39,-4}, -{37,39,-3}, -{37,39,-2}, -{37,39,-1}, -{37,39,0}, -{37,39,1}, -{37,39,2}, -{37,39,3}, -{37,39,4}, -{37,39,5}, -{37,39,6}, -{37,39,7}, -{37,39,8}, -{37,39,9}, -{37,39,10}, -{37,39,11}, -{37,39,12}, -{37,39,13}, -{37,39,14}, -{37,39,15}, -{37,39,16}, -{37,39,17}, -{37,39,18}, -{37,39,19}, -{37,39,20}, -{37,39,21}, -{37,39,22}, -{37,39,23}, -{37,39,24}, -{37,39,25}, -{37,39,26}, -{37,39,27}, -{37,39,28}, -{37,39,29}, -{37,39,30}, -{37,39,31}, -{37,39,32}, -{37,39,33}, -{37,39,34}, -{37,39,35}, -{37,39,36}, -{37,39,37}, -{37,39,38}, -{37,39,39}, -{37,39,40}, -{37,39,41}, -{37,39,42}, -{37,39,43}, -{37,39,44}, -{37,39,45}, -{37,39,46}, -{37,39,47}, -{37,39,48}, -{37,40,-78}, -{37,40,-77}, -{37,40,-76}, -{37,40,-75}, -{37,40,-74}, -{37,40,-73}, -{37,40,-72}, -{37,40,-71}, -{37,40,-70}, -{37,40,-69}, -{37,40,-68}, -{37,40,-67}, -{37,40,-66}, -{37,40,-65}, -{37,40,-64}, -{37,40,-63}, -{37,40,-62}, -{37,40,-61}, -{37,40,-60}, -{37,40,-59}, -{37,40,-58}, -{37,40,-57}, -{37,40,-56}, -{37,40,-55}, -{37,40,-54}, -{37,40,-53}, -{37,40,-52}, -{37,40,-51}, -{37,40,-50}, -{37,40,-49}, -{37,40,-48}, -{37,40,-47}, -{37,40,-46}, -{37,40,-45}, -{37,40,-44}, -{37,40,-43}, -{37,40,-42}, -{37,40,-41}, -{37,40,-40}, -{37,40,-39}, -{37,40,-38}, -{37,40,-37}, -{37,40,-36}, -{37,40,-35}, -{37,40,-34}, -{37,40,-33}, -{37,40,-32}, -{37,40,-31}, -{37,40,-30}, -{37,40,-29}, -{37,40,-28}, -{37,40,-27}, -{37,40,-26}, -{37,40,-25}, -{37,40,-24}, -{37,40,-23}, -{37,40,-22}, -{37,40,-21}, -{37,40,-20}, -{37,40,-19}, -{37,40,-18}, -{37,40,-17}, -{37,40,-16}, -{37,40,-15}, -{37,40,-14}, -{37,40,-13}, -{37,40,-12}, -{37,40,-11}, -{37,40,-10}, -{37,40,-9}, -{37,40,-8}, -{37,40,-7}, -{37,40,-6}, -{37,40,-5}, -{37,40,-4}, -{37,40,-3}, -{37,40,-2}, -{37,40,-1}, -{37,40,0}, -{37,40,1}, -{37,40,2}, -{37,40,3}, -{37,40,4}, -{37,40,5}, -{37,40,6}, -{37,40,7}, -{37,40,8}, -{37,40,9}, -{37,40,10}, -{37,40,11}, -{37,40,12}, -{37,40,13}, -{37,40,14}, -{37,40,15}, -{37,40,16}, -{37,40,17}, -{37,40,18}, -{37,40,19}, -{37,40,20}, -{37,40,21}, -{37,40,22}, -{37,40,23}, -{37,40,24}, -{37,40,25}, -{37,40,26}, -{37,40,27}, -{37,40,28}, -{37,40,29}, -{37,40,30}, -{37,40,31}, -{37,40,32}, -{37,40,33}, -{37,40,34}, -{37,40,35}, -{37,40,36}, -{37,40,37}, -{37,40,38}, -{37,40,39}, -{37,40,40}, -{37,40,41}, -{37,40,42}, -{37,40,43}, -{37,40,44}, -{37,40,45}, -{37,40,46}, -{37,40,47}, -{37,40,48}, -{37,41,-79}, -{37,41,-78}, -{37,41,-77}, -{37,41,-76}, -{37,41,-75}, -{37,41,-74}, -{37,41,-73}, -{37,41,-72}, -{37,41,-71}, -{37,41,-70}, -{37,41,-69}, -{37,41,-68}, -{37,41,-67}, -{37,41,-66}, -{37,41,-65}, -{37,41,-64}, -{37,41,-63}, -{37,41,-62}, -{37,41,-61}, -{37,41,-60}, -{37,41,-59}, -{37,41,-58}, -{37,41,-57}, -{37,41,-56}, -{37,41,-55}, -{37,41,-54}, -{37,41,-53}, -{37,41,-52}, -{37,41,-51}, -{37,41,-50}, -{37,41,-49}, -{37,41,-48}, -{37,41,-47}, -{37,41,-46}, -{37,41,-45}, -{37,41,-44}, -{37,41,-43}, -{37,41,-42}, -{37,41,-41}, -{37,41,-40}, -{37,41,-39}, -{37,41,-38}, -{37,41,-37}, -{37,41,-36}, -{37,41,-35}, -{37,41,-34}, -{37,41,-33}, -{37,41,-32}, -{37,41,-31}, -{37,41,-30}, -{37,41,-29}, -{37,41,-28}, -{37,41,-27}, -{37,41,-26}, -{37,41,-25}, -{37,41,-24}, -{37,41,-23}, -{37,41,-22}, -{37,41,-21}, -{37,41,-20}, -{37,41,-19}, -{37,41,-18}, -{37,41,-17}, -{37,41,-16}, -{37,41,-15}, -{37,41,-14}, -{37,41,-13}, -{37,41,-12}, -{37,41,-11}, -{37,41,-10}, -{37,41,-9}, -{37,41,-8}, -{37,41,-7}, -{37,41,-6}, -{37,41,-5}, -{37,41,-4}, -{37,41,-3}, -{37,41,-2}, -{37,41,-1}, -{37,41,0}, -{37,41,1}, -{37,41,2}, -{37,41,3}, -{37,41,4}, -{37,41,5}, -{37,41,6}, -{37,41,7}, -{37,41,8}, -{37,41,9}, -{37,41,10}, -{37,41,11}, -{37,41,12}, -{37,41,13}, -{37,41,14}, -{37,41,15}, -{37,41,16}, -{37,41,17}, -{37,41,18}, -{37,41,19}, -{37,41,20}, -{37,41,21}, -{37,41,22}, -{37,41,23}, -{37,41,24}, -{37,41,25}, -{37,41,26}, -{37,41,27}, -{37,41,28}, -{37,41,29}, -{37,41,30}, -{37,41,31}, -{37,41,32}, -{37,41,33}, -{37,41,34}, -{37,41,35}, -{37,41,36}, -{37,41,37}, -{37,41,38}, -{37,41,39}, -{37,41,40}, -{37,41,41}, -{37,41,42}, -{37,41,43}, -{37,41,44}, -{37,41,45}, -{37,41,46}, -{37,41,47}, -{37,41,48}, -{37,42,-80}, -{37,42,-79}, -{37,42,-78}, -{37,42,-77}, -{37,42,-76}, -{37,42,-75}, -{37,42,-74}, -{37,42,-73}, -{37,42,-72}, -{37,42,-71}, -{37,42,-70}, -{37,42,-69}, -{37,42,-68}, -{37,42,-67}, -{37,42,-66}, -{37,42,-65}, -{37,42,-64}, -{37,42,-63}, -{37,42,-62}, -{37,42,-61}, -{37,42,-60}, -{37,42,-59}, -{37,42,-58}, -{37,42,-57}, -{37,42,-56}, -{37,42,-55}, -{37,42,-54}, -{37,42,-53}, -{37,42,-52}, -{37,42,-51}, -{37,42,-50}, -{37,42,-49}, -{37,42,-48}, -{37,42,-47}, -{37,42,-46}, -{37,42,-45}, -{37,42,-44}, -{37,42,-43}, -{37,42,-42}, -{37,42,-41}, -{37,42,-40}, -{37,42,-39}, -{37,42,-38}, -{37,42,-37}, -{37,42,-36}, -{37,42,-35}, -{37,42,-34}, -{37,42,-33}, -{37,42,-32}, -{37,42,-31}, -{37,42,-30}, -{37,42,-29}, -{37,42,-28}, -{37,42,-27}, -{37,42,-26}, -{37,42,-25}, -{37,42,-24}, -{37,42,-23}, -{37,42,-22}, -{37,42,-21}, -{37,42,-20}, -{37,42,-19}, -{37,42,-18}, -{37,42,-17}, -{37,42,-16}, -{37,42,-15}, -{37,42,-14}, -{37,42,-13}, -{37,42,-12}, -{37,42,-11}, -{37,42,-10}, -{37,42,-9}, -{37,42,-8}, -{37,42,-7}, -{37,42,-6}, -{37,42,-5}, -{37,42,-4}, -{37,42,-3}, -{37,42,-2}, -{37,42,-1}, -{37,42,0}, -{37,42,1}, -{37,42,2}, -{37,42,3}, -{37,42,4}, -{37,42,5}, -{37,42,6}, -{37,42,7}, -{37,42,8}, -{37,42,9}, -{37,42,10}, -{37,42,11}, -{37,42,12}, -{37,42,13}, -{37,42,14}, -{37,42,15}, -{37,42,16}, -{37,42,17}, -{37,42,18}, -{37,42,19}, -{37,42,20}, -{37,42,21}, -{37,42,22}, -{37,42,23}, -{37,42,24}, -{37,42,25}, -{37,42,26}, -{37,42,27}, -{37,42,28}, -{37,42,29}, -{37,42,30}, -{37,42,31}, -{37,42,32}, -{37,42,33}, -{37,42,34}, -{37,42,35}, -{37,42,36}, -{37,42,37}, -{37,42,38}, -{37,42,39}, -{37,42,40}, -{37,42,41}, -{37,42,42}, -{37,42,43}, -{37,42,44}, -{37,42,45}, -{37,42,46}, -{37,42,47}, -{37,42,48}, -{37,42,49}, -{37,43,-80}, -{37,43,-79}, -{37,43,-78}, -{37,43,-77}, -{37,43,-76}, -{37,43,-75}, -{37,43,-74}, -{37,43,-73}, -{37,43,-72}, -{37,43,-71}, -{37,43,-70}, -{37,43,-69}, -{37,43,-68}, -{37,43,-67}, -{37,43,-66}, -{37,43,-65}, -{37,43,-64}, -{37,43,-63}, -{37,43,-62}, -{37,43,-61}, -{37,43,-60}, -{37,43,-59}, -{37,43,-58}, -{37,43,-57}, -{37,43,-56}, -{37,43,-55}, -{37,43,-54}, -{37,43,-53}, -{37,43,-52}, -{37,43,-51}, -{37,43,-50}, -{37,43,-49}, -{37,43,-48}, -{37,43,-47}, -{37,43,-46}, -{37,43,-45}, -{37,43,-44}, -{37,43,-43}, -{37,43,-42}, -{37,43,-41}, -{37,43,-40}, -{37,43,-39}, -{37,43,-38}, -{37,43,-37}, -{37,43,-36}, -{37,43,-35}, -{37,43,-34}, -{37,43,-33}, -{37,43,-32}, -{37,43,-31}, -{37,43,-30}, -{37,43,-29}, -{37,43,-28}, -{37,43,-27}, -{37,43,-26}, -{37,43,-25}, -{37,43,-24}, -{37,43,-23}, -{37,43,-22}, -{37,43,-21}, -{37,43,-20}, -{37,43,-19}, -{37,43,-18}, -{37,43,-17}, -{37,43,-16}, -{37,43,-15}, -{37,43,-14}, -{37,43,-13}, -{37,43,-12}, -{37,43,-11}, -{37,43,-10}, -{37,43,-9}, -{37,43,-8}, -{37,43,-7}, -{37,43,-6}, -{37,43,-5}, -{37,43,-4}, -{37,43,-3}, -{37,43,-2}, -{37,43,-1}, -{37,43,0}, -{37,43,1}, -{37,43,2}, -{37,43,3}, -{37,43,4}, -{37,43,5}, -{37,43,6}, -{37,43,7}, -{37,43,8}, -{37,43,9}, -{37,43,10}, -{37,43,11}, -{37,43,12}, -{37,43,13}, -{37,43,14}, -{37,43,15}, -{37,43,16}, -{37,43,17}, -{37,43,18}, -{37,43,19}, -{37,43,20}, -{37,43,21}, -{37,43,22}, -{37,43,23}, -{37,43,24}, -{37,43,25}, -{37,43,26}, -{37,43,27}, -{37,43,28}, -{37,43,29}, -{37,43,30}, -{37,43,31}, -{37,43,32}, -{37,43,33}, -{37,43,34}, -{37,43,35}, -{37,43,36}, -{37,43,37}, -{37,43,38}, -{37,43,39}, -{37,43,40}, -{37,43,41}, -{37,43,42}, -{37,43,43}, -{37,43,44}, -{37,43,45}, -{37,43,46}, -{37,43,47}, -{37,43,48}, -{37,43,49}, -{37,44,-81}, -{37,44,-80}, -{37,44,-79}, -{37,44,-78}, -{37,44,-77}, -{37,44,-76}, -{37,44,-75}, -{37,44,-74}, -{37,44,-73}, -{37,44,-72}, -{37,44,-71}, -{37,44,-70}, -{37,44,-69}, -{37,44,-68}, -{37,44,-67}, -{37,44,-66}, -{37,44,-65}, -{37,44,-64}, -{37,44,-63}, -{37,44,-62}, -{37,44,-61}, -{37,44,-60}, -{37,44,-59}, -{37,44,-58}, -{37,44,-57}, -{37,44,-56}, -{37,44,-55}, -{37,44,-54}, -{37,44,-53}, -{37,44,-52}, -{37,44,-51}, -{37,44,-50}, -{37,44,-49}, -{37,44,-48}, -{37,44,-47}, -{37,44,-46}, -{37,44,-45}, -{37,44,-44}, -{37,44,-43}, -{37,44,-42}, -{37,44,-41}, -{37,44,-40}, -{37,44,-39}, -{37,44,-38}, -{37,44,-37}, -{37,44,-36}, -{37,44,-35}, -{37,44,-34}, -{37,44,-33}, -{37,44,-32}, -{37,44,-31}, -{37,44,-30}, -{37,44,-29}, -{37,44,-28}, -{37,44,-27}, -{37,44,-26}, -{37,44,-25}, -{37,44,-24}, -{37,44,-23}, -{37,44,-22}, -{37,44,-21}, -{37,44,-20}, -{37,44,-19}, -{37,44,-18}, -{37,44,-17}, -{37,44,-16}, -{37,44,-15}, -{37,44,-14}, -{37,44,-13}, -{37,44,-12}, -{37,44,-11}, -{37,44,-10}, -{37,44,-9}, -{37,44,-8}, -{37,44,-7}, -{37,44,-6}, -{37,44,-5}, -{37,44,-4}, -{37,44,-3}, -{37,44,-2}, -{37,44,-1}, -{37,44,0}, -{37,44,1}, -{37,44,2}, -{37,44,3}, -{37,44,4}, -{37,44,5}, -{37,44,6}, -{37,44,7}, -{37,44,8}, -{37,44,9}, -{37,44,10}, -{37,44,11}, -{37,44,12}, -{37,44,13}, -{37,44,14}, -{37,44,15}, -{37,44,16}, -{37,44,17}, -{37,44,18}, -{37,44,19}, -{37,44,20}, -{37,44,21}, -{37,44,22}, -{37,44,23}, -{37,44,24}, -{37,44,25}, -{37,44,26}, -{37,44,27}, -{37,44,28}, -{37,44,29}, -{37,44,30}, -{37,44,31}, -{37,44,32}, -{37,44,33}, -{37,44,34}, -{37,44,35}, -{37,44,36}, -{37,44,37}, -{37,44,38}, -{37,44,39}, -{37,44,40}, -{37,44,41}, -{37,44,42}, -{37,44,43}, -{37,44,44}, -{37,44,45}, -{37,44,46}, -{37,44,47}, -{37,44,48}, -{37,44,49}, -{37,45,-82}, -{37,45,-81}, -{37,45,-80}, -{37,45,-79}, -{37,45,-78}, -{37,45,-77}, -{37,45,-76}, -{37,45,-75}, -{37,45,-74}, -{37,45,-73}, -{37,45,-72}, -{37,45,-71}, -{37,45,-70}, -{37,45,-69}, -{37,45,-68}, -{37,45,-67}, -{37,45,-66}, -{37,45,-65}, -{37,45,-64}, -{37,45,-63}, -{37,45,-62}, -{37,45,-61}, -{37,45,-60}, -{37,45,-59}, -{37,45,-58}, -{37,45,-57}, -{37,45,-56}, -{37,45,-55}, -{37,45,-54}, -{37,45,-53}, -{37,45,-52}, -{37,45,-51}, -{37,45,-50}, -{37,45,-49}, -{37,45,-48}, -{37,45,-47}, -{37,45,-46}, -{37,45,-45}, -{37,45,-44}, -{37,45,-43}, -{37,45,-42}, -{37,45,-41}, -{37,45,-40}, -{37,45,-39}, -{37,45,-38}, -{37,45,-37}, -{37,45,-36}, -{37,45,-35}, -{37,45,-34}, -{37,45,-33}, -{37,45,-32}, -{37,45,-31}, -{37,45,-30}, -{37,45,-29}, -{37,45,-28}, -{37,45,-27}, -{37,45,-26}, -{37,45,-25}, -{37,45,-24}, -{37,45,-23}, -{37,45,-22}, -{37,45,-21}, -{37,45,-20}, -{37,45,-19}, -{37,45,-18}, -{37,45,-17}, -{37,45,-16}, -{37,45,-15}, -{37,45,-14}, -{37,45,-13}, -{37,45,-12}, -{37,45,-11}, -{37,45,-10}, -{37,45,-9}, -{37,45,-8}, -{37,45,-7}, -{37,45,-6}, -{37,45,-5}, -{37,45,-4}, -{37,45,-3}, -{37,45,-2}, -{37,45,-1}, -{37,45,0}, -{37,45,1}, -{37,45,2}, -{37,45,3}, -{37,45,4}, -{37,45,5}, -{37,45,6}, -{37,45,7}, -{37,45,8}, -{37,45,9}, -{37,45,10}, -{37,45,11}, -{37,45,12}, -{37,45,13}, -{37,45,14}, -{37,45,15}, -{37,45,16}, -{37,45,17}, -{37,45,18}, -{37,45,19}, -{37,45,20}, -{37,45,21}, -{37,45,22}, -{37,45,23}, -{37,45,24}, -{37,45,25}, -{37,45,26}, -{37,45,27}, -{37,45,28}, -{37,45,29}, -{37,45,30}, -{37,45,31}, -{37,45,32}, -{37,45,33}, -{37,45,34}, -{37,45,35}, -{37,45,36}, -{37,45,37}, -{37,45,38}, -{37,45,39}, -{37,45,40}, -{37,45,41}, -{37,45,42}, -{37,45,43}, -{37,45,44}, -{37,45,45}, -{37,45,46}, -{37,45,47}, -{37,45,48}, -{37,45,49}, -{37,46,-83}, -{37,46,-82}, -{37,46,-81}, -{37,46,-80}, -{37,46,-79}, -{37,46,-78}, -{37,46,-77}, -{37,46,-76}, -{37,46,-75}, -{37,46,-74}, -{37,46,-73}, -{37,46,-72}, -{37,46,-71}, -{37,46,-70}, -{37,46,-69}, -{37,46,-68}, -{37,46,-67}, -{37,46,-66}, -{37,46,-65}, -{37,46,-64}, -{37,46,-63}, -{37,46,-62}, -{37,46,-61}, -{37,46,-60}, -{37,46,-59}, -{37,46,-58}, -{37,46,-57}, -{37,46,-56}, -{37,46,-55}, -{37,46,-54}, -{37,46,-53}, -{37,46,-52}, -{37,46,-51}, -{37,46,-50}, -{37,46,-49}, -{37,46,-48}, -{37,46,-47}, -{37,46,-46}, -{37,46,-45}, -{37,46,-44}, -{37,46,-43}, -{37,46,-42}, -{37,46,-41}, -{37,46,-40}, -{37,46,-39}, -{37,46,-38}, -{37,46,-37}, -{37,46,-36}, -{37,46,-35}, -{37,46,-34}, -{37,46,-33}, -{37,46,-32}, -{37,46,-31}, -{37,46,-30}, -{37,46,-29}, -{37,46,-28}, -{37,46,-27}, -{37,46,-26}, -{37,46,-25}, -{37,46,-24}, -{37,46,-23}, -{37,46,-22}, -{37,46,-21}, -{37,46,-20}, -{37,46,-19}, -{37,46,-18}, -{37,46,-17}, -{37,46,-16}, -{37,46,-15}, -{37,46,-14}, -{37,46,-13}, -{37,46,-12}, -{37,46,-11}, -{37,46,-10}, -{37,46,-9}, -{37,46,-8}, -{37,46,-7}, -{37,46,-6}, -{37,46,-5}, -{37,46,-4}, -{37,46,-3}, -{37,46,-2}, -{37,46,-1}, -{37,46,0}, -{37,46,1}, -{37,46,2}, -{37,46,3}, -{37,46,4}, -{37,46,5}, -{37,46,6}, -{37,46,7}, -{37,46,8}, -{37,46,9}, -{37,46,10}, -{37,46,11}, -{37,46,12}, -{37,46,13}, -{37,46,14}, -{37,46,15}, -{37,46,16}, -{37,46,17}, -{37,46,18}, -{37,46,19}, -{37,46,20}, -{37,46,21}, -{37,46,22}, -{37,46,23}, -{37,46,24}, -{37,46,25}, -{37,46,26}, -{37,46,27}, -{37,46,28}, -{37,46,29}, -{37,46,30}, -{37,46,31}, -{37,46,32}, -{37,46,33}, -{37,46,34}, -{37,46,35}, -{37,46,36}, -{37,46,37}, -{37,46,38}, -{37,46,39}, -{37,46,40}, -{37,46,41}, -{37,46,42}, -{37,46,43}, -{37,46,44}, -{37,46,45}, -{37,46,46}, -{37,46,47}, -{37,46,48}, -{37,46,49}, -{37,47,-84}, -{37,47,-83}, -{37,47,-82}, -{37,47,-81}, -{37,47,-80}, -{37,47,-79}, -{37,47,-78}, -{37,47,-77}, -{37,47,-76}, -{37,47,-75}, -{37,47,-74}, -{37,47,-73}, -{37,47,-72}, -{37,47,-71}, -{37,47,-70}, -{37,47,-69}, -{37,47,-68}, -{37,47,-67}, -{37,47,-66}, -{37,47,-65}, -{37,47,-64}, -{37,47,-63}, -{37,47,-62}, -{37,47,-61}, -{37,47,-60}, -{37,47,-59}, -{37,47,-58}, -{37,47,-57}, -{37,47,-56}, -{37,47,-55}, -{37,47,-54}, -{37,47,-53}, -{37,47,-52}, -{37,47,-51}, -{37,47,-50}, -{37,47,-49}, -{37,47,-48}, -{37,47,-47}, -{37,47,-46}, -{37,47,-45}, -{37,47,-44}, -{37,47,-43}, -{37,47,-42}, -{37,47,-41}, -{37,47,-40}, -{37,47,-39}, -{37,47,-38}, -{37,47,-37}, -{37,47,-36}, -{37,47,-35}, -{37,47,-34}, -{37,47,-33}, -{37,47,-32}, -{37,47,-31}, -{37,47,-30}, -{37,47,-29}, -{37,47,-28}, -{37,47,-27}, -{37,47,-26}, -{37,47,-25}, -{37,47,-24}, -{37,47,-23}, -{37,47,-22}, -{37,47,-21}, -{37,47,-20}, -{37,47,-19}, -{37,47,-18}, -{37,47,-17}, -{37,47,-16}, -{37,47,-15}, -{37,47,-14}, -{37,47,-13}, -{37,47,-12}, -{37,47,-11}, -{37,47,-10}, -{37,47,-9}, -{37,47,-8}, -{37,47,-7}, -{37,47,-6}, -{37,47,-5}, -{37,47,-4}, -{37,47,-3}, -{37,47,-2}, -{37,47,-1}, -{37,47,0}, -{37,47,1}, -{37,47,2}, -{37,47,3}, -{37,47,4}, -{37,47,5}, -{37,47,6}, -{37,47,7}, -{37,47,8}, -{37,47,9}, -{37,47,10}, -{37,47,11}, -{37,47,12}, -{37,47,13}, -{37,47,14}, -{37,47,15}, -{37,47,16}, -{37,47,17}, -{37,47,18}, -{37,47,19}, -{37,47,20}, -{37,47,21}, -{37,47,22}, -{37,47,23}, -{37,47,24}, -{37,47,25}, -{37,47,26}, -{37,47,27}, -{37,47,28}, -{37,47,29}, -{37,47,30}, -{37,47,31}, -{37,47,32}, -{37,47,33}, -{37,47,34}, -{37,47,35}, -{37,47,36}, -{37,47,37}, -{37,47,38}, -{37,47,39}, -{37,47,40}, -{37,47,41}, -{37,47,42}, -{37,47,43}, -{37,47,44}, -{37,47,45}, -{37,47,46}, -{37,47,47}, -{37,47,48}, -{37,47,49}, -{37,48,-85}, -{37,48,-84}, -{37,48,-83}, -{37,48,-82}, -{37,48,-81}, -{37,48,-80}, -{37,48,-79}, -{37,48,-78}, -{37,48,-77}, -{37,48,-76}, -{37,48,-75}, -{37,48,-74}, -{37,48,-73}, -{37,48,-72}, -{37,48,-71}, -{37,48,-70}, -{37,48,-69}, -{37,48,-68}, -{37,48,-67}, -{37,48,-66}, -{37,48,-65}, -{37,48,-64}, -{37,48,-63}, -{37,48,-62}, -{37,48,-61}, -{37,48,-60}, -{37,48,-59}, -{37,48,-58}, -{37,48,-57}, -{37,48,-56}, -{37,48,-55}, -{37,48,-54}, -{37,48,-53}, -{37,48,-52}, -{37,48,-51}, -{37,48,-50}, -{37,48,-49}, -{37,48,-48}, -{37,48,-47}, -{37,48,-46}, -{37,48,-45}, -{37,48,-44}, -{37,48,-43}, -{37,48,-42}, -{37,48,-41}, -{37,48,-40}, -{37,48,-39}, -{37,48,-38}, -{37,48,-37}, -{37,48,-36}, -{37,48,-35}, -{37,48,-34}, -{37,48,-33}, -{37,48,-32}, -{37,48,-31}, -{37,48,-30}, -{37,48,-29}, -{37,48,-28}, -{37,48,-27}, -{37,48,-26}, -{37,48,-25}, -{37,48,-24}, -{37,48,-23}, -{37,48,-22}, -{37,48,-21}, -{37,48,-20}, -{37,48,-19}, -{37,48,-18}, -{37,48,-17}, -{37,48,-16}, -{37,48,-15}, -{37,48,-14}, -{37,48,-13}, -{37,48,-12}, -{37,48,-11}, -{37,48,-10}, -{37,48,-9}, -{37,48,-8}, -{37,48,-7}, -{37,48,-6}, -{37,48,-5}, -{37,48,-4}, -{37,48,-3}, -{37,48,-2}, -{37,48,-1}, -{37,48,0}, -{37,48,1}, -{37,48,2}, -{37,48,3}, -{37,48,4}, -{37,48,5}, -{37,48,6}, -{37,48,7}, -{37,48,8}, -{37,48,9}, -{37,48,10}, -{37,48,11}, -{37,48,12}, -{37,48,13}, -{37,48,14}, -{37,48,15}, -{37,48,16}, -{37,48,17}, -{37,48,18}, -{37,48,19}, -{37,48,20}, -{37,48,21}, -{37,48,22}, -{37,48,23}, -{37,48,24}, -{37,48,25}, -{37,48,26}, -{37,48,27}, -{37,48,28}, -{37,48,29}, -{37,48,30}, -{37,48,31}, -{37,48,32}, -{37,48,33}, -{37,48,34}, -{37,48,35}, -{37,48,36}, -{37,48,37}, -{37,48,38}, -{37,48,39}, -{37,48,40}, -{37,48,41}, -{37,48,42}, -{37,48,43}, -{37,48,44}, -{37,48,45}, -{37,48,46}, -{37,48,47}, -{37,48,48}, -{37,48,49}, -{37,49,-86}, -{37,49,-85}, -{37,49,-84}, -{37,49,-83}, -{37,49,-82}, -{37,49,-81}, -{37,49,-80}, -{37,49,-79}, -{37,49,-78}, -{37,49,-77}, -{37,49,-76}, -{37,49,-75}, -{37,49,-74}, -{37,49,-73}, -{37,49,-72}, -{37,49,-71}, -{37,49,-70}, -{37,49,-69}, -{37,49,-68}, -{37,49,-67}, -{37,49,-66}, -{37,49,-65}, -{37,49,-64}, -{37,49,-63}, -{37,49,-62}, -{37,49,-61}, -{37,49,-60}, -{37,49,-59}, -{37,49,-58}, -{37,49,-57}, -{37,49,-56}, -{37,49,-55}, -{37,49,-54}, -{37,49,-53}, -{37,49,-52}, -{37,49,-51}, -{37,49,-50}, -{37,49,-49}, -{37,49,-48}, -{37,49,-47}, -{37,49,-46}, -{37,49,-45}, -{37,49,-44}, -{37,49,-43}, -{37,49,-42}, -{37,49,-41}, -{37,49,-40}, -{37,49,-39}, -{37,49,-38}, -{37,49,-37}, -{37,49,-36}, -{37,49,-35}, -{37,49,-34}, -{37,49,-33}, -{37,49,-32}, -{37,49,-31}, -{37,49,-30}, -{37,49,-29}, -{37,49,-28}, -{37,49,-27}, -{37,49,-26}, -{37,49,-25}, -{37,49,-24}, -{37,49,-23}, -{37,49,-22}, -{37,49,-21}, -{37,49,-20}, -{37,49,-19}, -{37,49,-18}, -{37,49,-17}, -{37,49,-16}, -{37,49,-15}, -{37,49,-14}, -{37,49,-13}, -{37,49,-12}, -{37,49,-11}, -{37,49,-10}, -{37,49,-9}, -{37,49,-8}, -{37,49,-7}, -{37,49,-6}, -{37,49,-5}, -{37,49,-4}, -{37,49,-3}, -{37,49,-2}, -{37,49,-1}, -{37,49,0}, -{37,49,1}, -{37,49,2}, -{37,49,3}, -{37,49,4}, -{37,49,5}, -{37,49,6}, -{37,49,7}, -{37,49,8}, -{37,49,9}, -{37,49,10}, -{37,49,11}, -{37,49,12}, -{37,49,13}, -{37,49,14}, -{37,49,15}, -{37,49,16}, -{37,49,17}, -{37,49,18}, -{37,49,19}, -{37,49,20}, -{37,49,21}, -{37,49,22}, -{37,49,23}, -{37,49,24}, -{37,49,25}, -{37,49,26}, -{37,49,27}, -{37,49,28}, -{37,49,29}, -{37,49,30}, -{37,49,31}, -{37,49,32}, -{37,49,33}, -{37,49,34}, -{37,49,35}, -{37,49,36}, -{37,49,37}, -{37,49,38}, -{37,49,39}, -{37,49,40}, -{37,49,41}, -{37,49,42}, -{37,49,43}, -{37,49,44}, -{37,49,45}, -{37,49,46}, -{37,49,47}, -{37,49,48}, -{37,49,49}, -{37,50,-87}, -{37,50,-86}, -{37,50,-85}, -{37,50,-84}, -{37,50,-83}, -{37,50,-82}, -{37,50,-81}, -{37,50,-80}, -{37,50,-79}, -{37,50,-78}, -{37,50,-77}, -{37,50,-76}, -{37,50,-75}, -{37,50,-74}, -{37,50,-73}, -{37,50,-72}, -{37,50,-71}, -{37,50,-70}, -{37,50,-69}, -{37,50,-68}, -{37,50,-67}, -{37,50,-66}, -{37,50,-65}, -{37,50,-64}, -{37,50,-63}, -{37,50,-62}, -{37,50,-61}, -{37,50,-60}, -{37,50,-59}, -{37,50,-58}, -{37,50,-57}, -{37,50,-56}, -{37,50,-55}, -{37,50,-54}, -{37,50,-53}, -{37,50,-52}, -{37,50,-51}, -{37,50,-50}, -{37,50,-49}, -{37,50,-48}, -{37,50,-47}, -{37,50,-46}, -{37,50,-45}, -{37,50,-44}, -{37,50,-43}, -{37,50,-42}, -{37,50,-41}, -{37,50,-40}, -{37,50,-39}, -{37,50,-38}, -{37,50,-37}, -{37,50,-36}, -{37,50,-35}, -{37,50,-34}, -{37,50,-33}, -{37,50,-32}, -{37,50,-31}, -{37,50,-30}, -{37,50,-29}, -{37,50,-28}, -{37,50,-27}, -{37,50,-26}, -{37,50,-25}, -{37,50,-24}, -{37,50,-23}, -{37,50,-22}, -{37,50,-21}, -{37,50,-20}, -{37,50,-19}, -{37,50,-18}, -{37,50,-17}, -{37,50,-16}, -{37,50,-15}, -{37,50,-14}, -{37,50,-13}, -{37,50,-12}, -{37,50,-11}, -{37,50,-10}, -{37,50,-9}, -{37,50,-8}, -{37,50,-7}, -{37,50,-6}, -{37,50,-5}, -{37,50,-4}, -{37,50,-3}, -{37,50,-2}, -{37,50,-1}, -{37,50,0}, -{37,50,1}, -{37,50,2}, -{37,50,3}, -{37,50,4}, -{37,50,5}, -{37,50,6}, -{37,50,7}, -{37,50,8}, -{37,50,9}, -{37,50,10}, -{37,50,11}, -{37,50,12}, -{37,50,13}, -{37,50,14}, -{37,50,15}, -{37,50,16}, -{37,50,17}, -{37,50,18}, -{37,50,19}, -{37,50,20}, -{37,50,21}, -{37,50,22}, -{37,50,23}, -{37,50,24}, -{37,50,25}, -{37,50,26}, -{37,50,27}, -{37,50,28}, -{37,50,29}, -{37,50,30}, -{37,50,31}, -{37,50,32}, -{37,50,33}, -{37,50,34}, -{37,50,35}, -{37,50,36}, -{37,50,37}, -{37,50,38}, -{37,50,39}, -{37,50,40}, -{37,50,41}, -{37,50,42}, -{37,50,43}, -{37,50,44}, -{37,50,45}, -{37,50,46}, -{37,50,47}, -{37,50,48}, -{37,50,49}, -{37,50,50}, -{37,51,-88}, -{37,51,-87}, -{37,51,-86}, -{37,51,-85}, -{37,51,-84}, -{37,51,-83}, -{37,51,-82}, -{37,51,-81}, -{37,51,-80}, -{37,51,-79}, -{37,51,-78}, -{37,51,-77}, -{37,51,-76}, -{37,51,-75}, -{37,51,-74}, -{37,51,-73}, -{37,51,-72}, -{37,51,-71}, -{37,51,-70}, -{37,51,-69}, -{37,51,-68}, -{37,51,-67}, -{37,51,-66}, -{37,51,-65}, -{37,51,-64}, -{37,51,-63}, -{37,51,-62}, -{37,51,-61}, -{37,51,-60}, -{37,51,-59}, -{37,51,-58}, -{37,51,-57}, -{37,51,-56}, -{37,51,-55}, -{37,51,-54}, -{37,51,-53}, -{37,51,-52}, -{37,51,-51}, -{37,51,-50}, -{37,51,-49}, -{37,51,-48}, -{37,51,-47}, -{37,51,-46}, -{37,51,-45}, -{37,51,-44}, -{37,51,-43}, -{37,51,-42}, -{37,51,-41}, -{37,51,-40}, -{37,51,-39}, -{37,51,-38}, -{37,51,-37}, -{37,51,-36}, -{37,51,-35}, -{37,51,-34}, -{37,51,-33}, -{37,51,-32}, -{37,51,-31}, -{37,51,-30}, -{37,51,-29}, -{37,51,-28}, -{37,51,-27}, -{37,51,-26}, -{37,51,-25}, -{37,51,-24}, -{37,51,-23}, -{37,51,-22}, -{37,51,-21}, -{37,51,-20}, -{37,51,-19}, -{37,51,-18}, -{37,51,-17}, -{37,51,-16}, -{37,51,-15}, -{37,51,-14}, -{37,51,-13}, -{37,51,-12}, -{37,51,-11}, -{37,51,-10}, -{37,51,-9}, -{37,51,-8}, -{37,51,-7}, -{37,51,-6}, -{37,51,-5}, -{37,51,-4}, -{37,51,-3}, -{37,51,-2}, -{37,51,-1}, -{37,51,0}, -{37,51,1}, -{37,51,2}, -{37,51,3}, -{37,51,4}, -{37,51,5}, -{37,51,6}, -{37,51,7}, -{37,51,8}, -{37,51,9}, -{37,51,10}, -{37,51,11}, -{37,51,12}, -{37,51,13}, -{37,51,14}, -{37,51,15}, -{37,51,16}, -{37,51,17}, -{37,51,18}, -{37,51,19}, -{37,51,20}, -{37,51,21}, -{37,51,22}, -{37,51,23}, -{37,51,24}, -{37,51,25}, -{37,51,26}, -{37,51,27}, -{37,51,28}, -{37,51,29}, -{37,51,30}, -{37,51,31}, -{37,51,32}, -{37,51,33}, -{37,51,34}, -{37,51,35}, -{37,51,36}, -{37,51,37}, -{37,51,38}, -{37,51,39}, -{37,51,40}, -{37,51,41}, -{37,51,42}, -{37,51,43}, -{37,51,44}, -{37,51,45}, -{37,51,46}, -{37,51,47}, -{37,51,48}, -{37,51,49}, -{37,51,50}, -{37,52,-88}, -{37,52,-87}, -{37,52,-86}, -{37,52,-85}, -{37,52,-84}, -{37,52,-83}, -{37,52,-82}, -{37,52,-81}, -{37,52,-80}, -{37,52,-79}, -{37,52,-78}, -{37,52,-77}, -{37,52,-76}, -{37,52,-75}, -{37,52,-74}, -{37,52,-73}, -{37,52,-72}, -{37,52,-71}, -{37,52,-70}, -{37,52,-69}, -{37,52,-68}, -{37,52,-67}, -{37,52,-66}, -{37,52,-65}, -{37,52,-64}, -{37,52,-63}, -{37,52,-62}, -{37,52,-61}, -{37,52,-60}, -{37,52,-59}, -{37,52,-58}, -{37,52,-57}, -{37,52,-56}, -{37,52,-55}, -{37,52,-54}, -{37,52,-53}, -{37,52,-52}, -{37,52,-51}, -{37,52,-50}, -{37,52,-49}, -{37,52,-48}, -{37,52,-47}, -{37,52,-46}, -{37,52,-45}, -{37,52,-44}, -{37,52,-43}, -{37,52,-42}, -{37,52,-41}, -{37,52,-40}, -{37,52,-39}, -{37,52,-38}, -{37,52,-37}, -{37,52,-36}, -{37,52,-35}, -{37,52,-34}, -{37,52,-33}, -{37,52,-32}, -{37,52,-31}, -{37,52,-30}, -{37,52,-29}, -{37,52,-28}, -{37,52,-27}, -{37,52,-26}, -{37,52,-25}, -{37,52,-24}, -{37,52,-23}, -{37,52,-22}, -{37,52,-21}, -{37,52,-20}, -{37,52,-19}, -{37,52,-18}, -{37,52,-17}, -{37,52,-16}, -{37,52,-15}, -{37,52,-14}, -{37,52,-13}, -{37,52,-12}, -{37,52,-11}, -{37,52,-10}, -{37,52,-9}, -{37,52,-8}, -{37,52,-7}, -{37,52,-6}, -{37,52,-5}, -{37,52,-4}, -{37,52,-3}, -{37,52,-2}, -{37,52,-1}, -{37,52,0}, -{37,52,1}, -{37,52,2}, -{37,52,3}, -{37,52,4}, -{37,52,5}, -{37,52,6}, -{37,52,7}, -{37,52,8}, -{37,52,9}, -{37,52,10}, -{37,52,11}, -{37,52,12}, -{37,52,13}, -{37,52,14}, -{37,52,15}, -{37,52,16}, -{37,52,17}, -{37,52,18}, -{37,52,19}, -{37,52,20}, -{37,52,21}, -{37,52,22}, -{37,52,23}, -{37,52,24}, -{37,52,25}, -{37,52,26}, -{37,52,27}, -{37,52,28}, -{37,52,29}, -{37,52,30}, -{37,52,31}, -{37,52,32}, -{37,52,33}, -{37,52,34}, -{37,52,35}, -{37,52,36}, -{37,52,37}, -{37,52,38}, -{37,52,39}, -{37,52,40}, -{37,52,41}, -{37,52,42}, -{37,52,43}, -{37,52,44}, -{37,52,45}, -{37,52,46}, -{37,52,47}, -{37,52,48}, -{37,52,49}, -{37,52,50}, -{37,53,-89}, -{37,53,-88}, -{37,53,-87}, -{37,53,-86}, -{37,53,-85}, -{37,53,-84}, -{37,53,-83}, -{37,53,-82}, -{37,53,-81}, -{37,53,-80}, -{37,53,-79}, -{37,53,-78}, -{37,53,-77}, -{37,53,-76}, -{37,53,-75}, -{37,53,-74}, -{37,53,-73}, -{37,53,-72}, -{37,53,-71}, -{37,53,-70}, -{37,53,-69}, -{37,53,-68}, -{37,53,-67}, -{37,53,-66}, -{37,53,-65}, -{37,53,-64}, -{37,53,-63}, -{37,53,-62}, -{37,53,-61}, -{37,53,-60}, -{37,53,-59}, -{37,53,-58}, -{37,53,-57}, -{37,53,-56}, -{37,53,-55}, -{37,53,-54}, -{37,53,-53}, -{37,53,-52}, -{37,53,-51}, -{37,53,-50}, -{37,53,-49}, -{37,53,-48}, -{37,53,-47}, -{37,53,-46}, -{37,53,-45}, -{37,53,-44}, -{37,53,-43}, -{37,53,-42}, -{37,53,-41}, -{37,53,-40}, -{37,53,-39}, -{37,53,-38}, -{37,53,-37}, -{37,53,-36}, -{37,53,-35}, -{37,53,-34}, -{37,53,-33}, -{37,53,-32}, -{37,53,-31}, -{37,53,-30}, -{37,53,-29}, -{37,53,-28}, -{37,53,-27}, -{37,53,-26}, -{37,53,-25}, -{37,53,-24}, -{37,53,-23}, -{37,53,-22}, -{37,53,-21}, -{37,53,-20}, -{37,53,-19}, -{37,53,-18}, -{37,53,-17}, -{37,53,-16}, -{37,53,-15}, -{37,53,-14}, -{37,53,-13}, -{37,53,-12}, -{37,53,-11}, -{37,53,-10}, -{37,53,-9}, -{37,53,-8}, -{37,53,-7}, -{37,53,-6}, -{37,53,-5}, -{37,53,-4}, -{37,53,-3}, -{37,53,-2}, -{37,53,-1}, -{37,53,0}, -{37,53,1}, -{37,53,2}, -{37,53,3}, -{37,53,4}, -{37,53,5}, -{37,53,6}, -{37,53,7}, -{37,53,8}, -{37,53,9}, -{37,53,10}, -{37,53,11}, -{37,53,12}, -{37,53,13}, -{37,53,14}, -{37,53,15}, -{37,53,16}, -{37,53,17}, -{37,53,18}, -{37,53,19}, -{37,53,20}, -{37,53,21}, -{37,53,22}, -{37,53,23}, -{37,53,24}, -{37,53,25}, -{37,53,26}, -{37,53,27}, -{37,53,28}, -{37,53,29}, -{37,53,30}, -{37,53,31}, -{37,53,32}, -{37,53,33}, -{37,53,34}, -{37,53,35}, -{37,53,36}, -{37,53,37}, -{37,53,38}, -{37,53,39}, -{37,53,40}, -{37,53,41}, -{37,53,42}, -{37,53,43}, -{37,53,44}, -{37,53,45}, -{37,53,46}, -{37,53,47}, -{37,53,48}, -{37,53,49}, -{37,53,50}, -{37,54,-90}, -{37,54,-89}, -{37,54,-88}, -{37,54,-87}, -{37,54,-86}, -{37,54,-85}, -{37,54,-84}, -{37,54,-83}, -{37,54,-82}, -{37,54,-81}, -{37,54,-80}, -{37,54,-79}, -{37,54,-78}, -{37,54,-77}, -{37,54,-76}, -{37,54,-75}, -{37,54,-74}, -{37,54,-73}, -{37,54,-72}, -{37,54,-71}, -{37,54,-70}, -{37,54,-69}, -{37,54,-68}, -{37,54,-67}, -{37,54,-66}, -{37,54,-65}, -{37,54,-64}, -{37,54,-63}, -{37,54,-62}, -{37,54,-61}, -{37,54,-60}, -{37,54,-59}, -{37,54,-58}, -{37,54,-57}, -{37,54,-56}, -{37,54,-55}, -{37,54,-54}, -{37,54,-53}, -{37,54,-52}, -{37,54,-51}, -{37,54,-50}, -{37,54,-49}, -{37,54,-48}, -{37,54,-47}, -{37,54,-46}, -{37,54,-45}, -{37,54,-44}, -{37,54,-43}, -{37,54,-42}, -{37,54,-41}, -{37,54,-40}, -{37,54,-39}, -{37,54,-38}, -{37,54,-37}, -{37,54,-36}, -{37,54,-35}, -{37,54,-34}, -{37,54,-33}, -{37,54,-32}, -{37,54,-31}, -{37,54,-30}, -{37,54,-29}, -{37,54,-28}, -{37,54,-27}, -{37,54,-26}, -{37,54,-25}, -{37,54,-24}, -{37,54,-23}, -{37,54,-22}, -{37,54,-21}, -{37,54,-20}, -{37,54,-19}, -{37,54,-18}, -{37,54,-17}, -{37,54,-16}, -{37,54,-15}, -{37,54,-14}, -{37,54,-13}, -{37,54,-12}, -{37,54,-11}, -{37,54,-10}, -{37,54,-9}, -{37,54,-8}, -{37,54,-7}, -{37,54,-6}, -{37,54,-5}, -{37,54,-4}, -{37,54,-3}, -{37,54,-2}, -{37,54,-1}, -{37,54,0}, -{37,54,1}, -{37,54,2}, -{37,54,3}, -{37,54,4}, -{37,54,5}, -{37,54,6}, -{37,54,7}, -{37,54,8}, -{37,54,9}, -{37,54,10}, -{37,54,11}, -{37,54,12}, -{37,54,13}, -{37,54,14}, -{37,54,15}, -{37,54,16}, -{37,54,17}, -{37,54,18}, -{37,54,19}, -{37,54,20}, -{37,54,21}, -{37,54,22}, -{37,54,23}, -{37,54,24}, -{37,54,25}, -{37,54,26}, -{37,54,27}, -{37,54,28}, -{37,54,29}, -{37,54,30}, -{37,54,31}, -{37,54,32}, -{37,54,33}, -{37,54,34}, -{37,54,35}, -{37,54,36}, -{37,54,37}, -{37,54,38}, -{37,54,39}, -{37,54,40}, -{37,54,41}, -{37,54,42}, -{37,54,43}, -{37,54,44}, -{37,54,45}, -{37,54,46}, -{37,54,47}, -{37,54,48}, -{37,54,49}, -{37,54,50}, -{37,55,-91}, -{37,55,-90}, -{37,55,-89}, -{37,55,-88}, -{37,55,-87}, -{37,55,-86}, -{37,55,-85}, -{37,55,-84}, -{37,55,-83}, -{37,55,-82}, -{37,55,-81}, -{37,55,-80}, -{37,55,-79}, -{37,55,-78}, -{37,55,-77}, -{37,55,-76}, -{37,55,-75}, -{37,55,-74}, -{37,55,-73}, -{37,55,-72}, -{37,55,-71}, -{37,55,-70}, -{37,55,-69}, -{37,55,-68}, -{37,55,-67}, -{37,55,-66}, -{37,55,-65}, -{37,55,-64}, -{37,55,-63}, -{37,55,-62}, -{37,55,-61}, -{37,55,-60}, -{37,55,-59}, -{37,55,-58}, -{37,55,-57}, -{37,55,-56}, -{37,55,-55}, -{37,55,-54}, -{37,55,-53}, -{37,55,-52}, -{37,55,-51}, -{37,55,-50}, -{37,55,-49}, -{37,55,-48}, -{37,55,-47}, -{37,55,-46}, -{37,55,-45}, -{37,55,-44}, -{37,55,-43}, -{37,55,-42}, -{37,55,-41}, -{37,55,-40}, -{37,55,-39}, -{37,55,-38}, -{37,55,-37}, -{37,55,-36}, -{37,55,-35}, -{37,55,-34}, -{37,55,-33}, -{37,55,-32}, -{37,55,-31}, -{37,55,-30}, -{37,55,-29}, -{37,55,-28}, -{37,55,-27}, -{37,55,-26}, -{37,55,-25}, -{37,55,-24}, -{37,55,-23}, -{37,55,-22}, -{37,55,-21}, -{37,55,-20}, -{37,55,-19}, -{37,55,-18}, -{37,55,-17}, -{37,55,-16}, -{37,55,-15}, -{37,55,-14}, -{37,55,-13}, -{37,55,-12}, -{37,55,-11}, -{37,55,-10}, -{37,55,-9}, -{37,55,-8}, -{37,55,-7}, -{37,55,-6}, -{37,55,-5}, -{37,55,-4}, -{37,55,-3}, -{37,55,-2}, -{37,55,-1}, -{37,55,0}, -{37,55,1}, -{37,55,2}, -{37,55,3}, -{37,55,4}, -{37,55,5}, -{37,55,6}, -{37,55,7}, -{37,55,8}, -{37,55,9}, -{37,55,10}, -{37,55,11}, -{37,55,12}, -{37,55,13}, -{37,55,14}, -{37,55,15}, -{37,55,16}, -{37,55,17}, -{37,55,18}, -{37,55,19}, -{37,55,20}, -{37,55,21}, -{37,55,22}, -{37,55,23}, -{37,55,24}, -{37,55,25}, -{37,55,26}, -{37,55,27}, -{37,55,28}, -{37,55,29}, -{37,55,30}, -{37,55,31}, -{37,55,32}, -{37,55,33}, -{37,55,34}, -{37,55,35}, -{37,55,36}, -{37,55,37}, -{37,55,38}, -{37,55,39}, -{37,55,40}, -{37,55,41}, -{37,55,42}, -{37,55,43}, -{37,55,44}, -{37,55,45}, -{37,55,46}, -{37,55,47}, -{37,55,48}, -{37,55,49}, -{37,55,50}, -{37,56,-92}, -{37,56,-91}, -{37,56,-90}, -{37,56,-89}, -{37,56,-88}, -{37,56,-87}, -{37,56,-86}, -{37,56,-85}, -{37,56,-84}, -{37,56,-83}, -{37,56,-82}, -{37,56,-81}, -{37,56,-80}, -{37,56,-79}, -{37,56,-78}, -{37,56,-77}, -{37,56,-76}, -{37,56,-75}, -{37,56,-74}, -{37,56,-73}, -{37,56,-72}, -{37,56,-71}, -{37,56,-70}, -{37,56,-69}, -{37,56,-68}, -{37,56,-67}, -{37,56,-66}, -{37,56,-65}, -{37,56,-64}, -{37,56,-63}, -{37,56,-62}, -{37,56,-61}, -{37,56,-60}, -{37,56,-59}, -{37,56,-58}, -{37,56,-57}, -{37,56,-56}, -{37,56,-55}, -{37,56,-54}, -{37,56,-53}, -{37,56,-52}, -{37,56,-51}, -{37,56,-50}, -{37,56,-49}, -{37,56,-48}, -{37,56,-47}, -{37,56,-46}, -{37,56,-45}, -{37,56,-44}, -{37,56,-43}, -{37,56,-42}, -{37,56,-41}, -{37,56,-40}, -{37,56,-39}, -{37,56,-38}, -{37,56,-37}, -{37,56,-36}, -{37,56,-35}, -{37,56,-34}, -{37,56,-33}, -{37,56,-32}, -{37,56,-31}, -{37,56,-30}, -{37,56,-29}, -{37,56,-28}, -{37,56,-27}, -{37,56,-26}, -{37,56,-25}, -{37,56,-24}, -{37,56,-23}, -{37,56,-22}, -{37,56,-21}, -{37,56,-20}, -{37,56,-19}, -{37,56,-18}, -{37,56,-17}, -{37,56,-16}, -{37,56,-15}, -{37,56,-14}, -{37,56,-13}, -{37,56,-12}, -{37,56,-11}, -{37,56,-10}, -{37,56,-9}, -{37,56,-8}, -{37,56,-7}, -{37,56,-6}, -{37,56,-5}, -{37,56,-4}, -{37,56,-3}, -{37,56,-2}, -{37,56,-1}, -{37,56,0}, -{37,56,1}, -{37,56,2}, -{37,56,3}, -{37,56,4}, -{37,56,5}, -{37,56,6}, -{37,56,7}, -{37,56,8}, -{37,56,9}, -{37,56,10}, -{37,56,11}, -{37,56,12}, -{37,56,13}, -{37,56,14}, -{37,56,15}, -{37,56,16}, -{37,56,17}, -{37,56,18}, -{37,56,19}, -{37,56,20}, -{37,56,21}, -{37,56,22}, -{37,56,23}, -{37,56,24}, -{37,56,25}, -{37,56,26}, -{37,56,27}, -{37,56,28}, -{37,56,29}, -{37,56,30}, -{37,56,31}, -{37,56,32}, -{37,56,33}, -{37,56,34}, -{37,56,35}, -{37,56,36}, -{37,56,37}, -{37,56,38}, -{37,56,39}, -{37,56,40}, -{37,56,41}, -{37,56,42}, -{37,56,43}, -{37,56,44}, -{37,56,45}, -{37,56,46}, -{37,56,47}, -{37,56,48}, -{37,56,49}, -{37,56,50}, -{37,57,-93}, -{37,57,-92}, -{37,57,-91}, -{37,57,-90}, -{37,57,-89}, -{37,57,-88}, -{37,57,-87}, -{37,57,-86}, -{37,57,-85}, -{37,57,-84}, -{37,57,-83}, -{37,57,-82}, -{37,57,-81}, -{37,57,-80}, -{37,57,-79}, -{37,57,-78}, -{37,57,-77}, -{37,57,-76}, -{37,57,-75}, -{37,57,-74}, -{37,57,-73}, -{37,57,-72}, -{37,57,-71}, -{37,57,-70}, -{37,57,-69}, -{37,57,-68}, -{37,57,-67}, -{37,57,-66}, -{37,57,-65}, -{37,57,-64}, -{37,57,-63}, -{37,57,-62}, -{37,57,-61}, -{37,57,-60}, -{37,57,-59}, -{37,57,-58}, -{37,57,-57}, -{37,57,-56}, -{37,57,-55}, -{37,57,-54}, -{37,57,-53}, -{37,57,-52}, -{37,57,-51}, -{37,57,-50}, -{37,57,-49}, -{37,57,-48}, -{37,57,-47}, -{37,57,-46}, -{37,57,-45}, -{37,57,-44}, -{37,57,-43}, -{37,57,-42}, -{37,57,-41}, -{37,57,-40}, -{37,57,-39}, -{37,57,-38}, -{37,57,-37}, -{37,57,-36}, -{37,57,-35}, -{37,57,-34}, -{37,57,-33}, -{37,57,-32}, -{37,57,-31}, -{37,57,-30}, -{37,57,-29}, -{37,57,-28}, -{37,57,-27}, -{37,57,-26}, -{37,57,-25}, -{37,57,-24}, -{37,57,-23}, -{37,57,-22}, -{37,57,-21}, -{37,57,-20}, -{37,57,-19}, -{37,57,-18}, -{37,57,-17}, -{37,57,-16}, -{37,57,-15}, -{37,57,-14}, -{37,57,-13}, -{37,57,-12}, -{37,57,-11}, -{37,57,-10}, -{37,57,-9}, -{37,57,-8}, -{37,57,-7}, -{37,57,-6}, -{37,57,-5}, -{37,57,-4}, -{37,57,-3}, -{37,57,-2}, -{37,57,-1}, -{37,57,0}, -{37,57,1}, -{37,57,2}, -{37,57,3}, -{37,57,4}, -{37,57,5}, -{37,57,6}, -{37,57,7}, -{37,57,8}, -{37,57,9}, -{37,57,10}, -{37,57,11}, -{37,57,12}, -{37,57,13}, -{37,57,14}, -{37,57,15}, -{37,57,16}, -{37,57,17}, -{37,57,18}, -{37,57,19}, -{37,57,20}, -{37,57,21}, -{37,57,22}, -{37,57,23}, -{37,57,24}, -{37,57,25}, -{37,57,26}, -{37,57,27}, -{37,57,28}, -{37,57,29}, -{37,57,30}, -{37,57,31}, -{37,57,32}, -{37,57,33}, -{37,57,34}, -{37,57,35}, -{37,57,36}, -{37,57,37}, -{37,57,38}, -{37,57,39}, -{37,57,40}, -{37,57,41}, -{37,57,42}, -{37,57,43}, -{37,57,44}, -{37,57,45}, -{37,57,46}, -{37,57,47}, -{37,57,48}, -{37,57,49}, -{37,57,50}, -{37,58,-94}, -{37,58,-93}, -{37,58,-92}, -{37,58,-91}, -{37,58,-90}, -{37,58,-89}, -{37,58,-88}, -{37,58,-87}, -{37,58,-86}, -{37,58,-85}, -{37,58,-84}, -{37,58,-83}, -{37,58,-82}, -{37,58,-81}, -{37,58,-80}, -{37,58,-79}, -{37,58,-78}, -{37,58,-77}, -{37,58,-76}, -{37,58,-75}, -{37,58,-74}, -{37,58,-73}, -{37,58,-72}, -{37,58,-71}, -{37,58,-70}, -{37,58,-69}, -{37,58,-68}, -{37,58,-67}, -{37,58,-66}, -{37,58,-65}, -{37,58,-64}, -{37,58,-63}, -{37,58,-62}, -{37,58,-61}, -{37,58,-60}, -{37,58,-59}, -{37,58,-58}, -{37,58,-57}, -{37,58,-56}, -{37,58,-55}, -{37,58,-54}, -{37,58,-53}, -{37,58,-52}, -{37,58,-51}, -{37,58,-50}, -{37,58,-49}, -{37,58,-48}, -{37,58,-47}, -{37,58,-46}, -{37,58,-45}, -{37,58,-44}, -{37,58,-43}, -{37,58,-42}, -{37,58,-41}, -{37,58,-40}, -{37,58,-39}, -{37,58,-38}, -{37,58,-37}, -{37,58,-36}, -{37,58,-35}, -{37,58,-34}, -{37,58,-33}, -{37,58,-32}, -{37,58,-31}, -{37,58,-30}, -{37,58,-29}, -{37,58,-28}, -{37,58,-27}, -{37,58,-26}, -{37,58,-25}, -{37,58,-24}, -{37,58,-23}, -{37,58,-22}, -{37,58,-21}, -{37,58,-20}, -{37,58,-19}, -{37,58,-18}, -{37,58,-17}, -{37,58,-16}, -{37,58,-15}, -{37,58,-14}, -{37,58,-13}, -{37,58,-12}, -{37,58,-11}, -{37,58,-10}, -{37,58,-9}, -{37,58,-8}, -{37,58,-7}, -{37,58,-6}, -{37,58,-5}, -{37,58,-4}, -{37,58,-3}, -{37,58,-2}, -{37,58,-1}, -{37,58,0}, -{37,58,1}, -{37,58,2}, -{37,58,3}, -{37,58,4}, -{37,58,5}, -{37,58,6}, -{37,58,7}, -{37,58,8}, -{37,58,9}, -{37,58,10}, -{37,58,11}, -{37,58,12}, -{37,58,13}, -{37,58,14}, -{37,58,15}, -{37,58,16}, -{37,58,17}, -{37,58,18}, -{37,58,19}, -{37,58,20}, -{37,58,21}, -{37,58,22}, -{37,58,23}, -{37,58,24}, -{37,58,25}, -{37,58,26}, -{37,58,27}, -{37,58,28}, -{37,58,29}, -{37,58,30}, -{37,58,31}, -{37,58,32}, -{37,58,33}, -{37,58,34}, -{37,58,35}, -{37,58,36}, -{37,58,37}, -{37,58,38}, -{37,58,39}, -{37,58,40}, -{37,58,41}, -{37,58,42}, -{37,58,43}, -{37,58,44}, -{37,58,45}, -{37,58,46}, -{37,58,47}, -{37,58,48}, -{37,58,49}, -{37,58,50}, -{37,58,51}, -{37,59,-95}, -{37,59,-94}, -{37,59,-93}, -{37,59,-92}, -{37,59,-91}, -{37,59,-90}, -{37,59,-89}, -{37,59,-88}, -{37,59,-87}, -{37,59,-86}, -{37,59,-85}, -{37,59,-84}, -{37,59,-83}, -{37,59,-82}, -{37,59,-81}, -{37,59,-80}, -{37,59,-79}, -{37,59,-78}, -{37,59,-77}, -{37,59,-76}, -{37,59,-75}, -{37,59,-74}, -{37,59,-73}, -{37,59,-72}, -{37,59,-71}, -{37,59,-70}, -{37,59,-69}, -{37,59,-68}, -{37,59,-67}, -{37,59,-66}, -{37,59,-65}, -{37,59,-64}, -{37,59,-63}, -{37,59,-62}, -{37,59,-61}, -{37,59,-60}, -{37,59,-59}, -{37,59,-58}, -{37,59,-57}, -{37,59,-56}, -{37,59,-55}, -{37,59,-54}, -{37,59,-53}, -{37,59,-52}, -{37,59,-51}, -{37,59,-50}, -{37,59,-49}, -{37,59,-48}, -{37,59,-47}, -{37,59,-46}, -{37,59,-45}, -{37,59,-44}, -{37,59,-43}, -{37,59,-42}, -{37,59,-41}, -{37,59,-40}, -{37,59,-39}, -{37,59,-38}, -{37,59,-37}, -{37,59,-36}, -{37,59,-35}, -{37,59,-34}, -{37,59,-33}, -{37,59,-32}, -{37,59,-31}, -{37,59,-30}, -{37,59,-29}, -{37,59,-28}, -{37,59,-27}, -{37,59,-26}, -{37,59,-25}, -{37,59,-24}, -{37,59,-23}, -{37,59,-22}, -{37,59,-21}, -{37,59,-20}, -{37,59,-19}, -{37,59,-18}, -{37,59,-17}, -{37,59,-16}, -{37,59,-15}, -{37,59,-14}, -{37,59,-13}, -{37,59,-12}, -{37,59,-11}, -{37,59,-10}, -{37,59,-9}, -{37,59,-8}, -{37,59,-7}, -{37,59,-6}, -{37,59,-5}, -{37,59,-4}, -{37,59,-3}, -{37,59,-2}, -{37,59,-1}, -{37,59,0}, -{37,59,1}, -{37,59,2}, -{37,59,3}, -{37,59,4}, -{37,59,5}, -{37,59,6}, -{37,59,7}, -{37,59,8}, -{37,59,9}, -{37,59,10}, -{37,59,11}, -{37,59,12}, -{37,59,13}, -{37,59,14}, -{37,59,15}, -{37,59,16}, -{37,59,17}, -{37,59,18}, -{37,59,19}, -{37,59,20}, -{37,59,21}, -{37,59,22}, -{37,59,23}, -{37,59,24}, -{37,59,25}, -{37,59,26}, -{37,59,27}, -{37,59,28}, -{37,59,29}, -{37,59,30}, -{37,59,31}, -{37,59,32}, -{37,59,33}, -{37,59,34}, -{37,59,35}, -{37,59,36}, -{37,59,37}, -{37,59,38}, -{37,59,39}, -{37,59,40}, -{37,59,41}, -{37,59,42}, -{37,59,43}, -{37,59,44}, -{37,59,45}, -{37,59,46}, -{37,59,47}, -{37,59,48}, -{37,59,49}, -{37,59,50}, -{37,59,51}, -{37,60,-95}, -{37,60,-94}, -{37,60,-93}, -{37,60,-92}, -{37,60,-91}, -{37,60,-90}, -{37,60,-89}, -{37,60,-88}, -{37,60,-87}, -{37,60,-86}, -{37,60,-85}, -{37,60,-84}, -{37,60,-83}, -{37,60,-82}, -{37,60,-81}, -{37,60,-80}, -{37,60,-79}, -{37,60,-78}, -{37,60,-77}, -{37,60,-76}, -{37,60,-75}, -{37,60,-74}, -{37,60,-73}, -{37,60,-72}, -{37,60,-71}, -{37,60,-70}, -{37,60,-69}, -{37,60,-68}, -{37,60,-67}, -{37,60,-66}, -{37,60,-65}, -{37,60,-64}, -{37,60,-63}, -{37,60,-62}, -{37,60,-61}, -{37,60,-60}, -{37,60,-59}, -{37,60,-58}, -{37,60,-57}, -{37,60,-56}, -{37,60,-55}, -{37,60,-54}, -{37,60,-53}, -{37,60,-52}, -{37,60,-51}, -{37,60,-50}, -{37,60,-49}, -{37,60,-48}, -{37,60,-47}, -{37,60,-46}, -{37,60,-45}, -{37,60,-44}, -{37,60,-43}, -{37,60,-42}, -{37,60,-41}, -{37,60,-40}, -{37,60,-39}, -{37,60,-38}, -{37,60,-37}, -{37,60,-36}, -{37,60,-35}, -{37,60,-34}, -{37,60,-33}, -{37,60,-32}, -{37,60,-31}, -{37,60,-30}, -{37,60,-29}, -{37,60,-28}, -{37,60,-27}, -{37,60,-26}, -{37,60,-25}, -{37,60,-24}, -{37,60,-23}, -{37,60,-22}, -{37,60,-21}, -{37,60,-20}, -{37,60,-19}, -{37,60,-18}, -{37,60,-17}, -{37,60,-16}, -{37,60,-15}, -{37,60,-14}, -{37,60,-13}, -{37,60,-12}, -{37,60,-11}, -{37,60,-10}, -{37,60,-9}, -{37,60,-8}, -{37,60,-7}, -{37,60,-6}, -{37,60,-5}, -{37,60,-4}, -{37,60,-3}, -{37,60,-2}, -{37,60,-1}, -{37,60,0}, -{37,60,1}, -{37,60,2}, -{37,60,3}, -{37,60,4}, -{37,60,5}, -{37,60,6}, -{37,60,7}, -{37,60,8}, -{37,60,9}, -{37,60,10}, -{37,60,11}, -{37,60,12}, -{37,60,13}, -{37,60,14}, -{37,60,15}, -{37,60,16}, -{37,60,17}, -{37,60,18}, -{37,60,19}, -{37,60,20}, -{37,60,21}, -{37,60,22}, -{37,60,23}, -{37,60,24}, -{37,60,25}, -{37,60,26}, -{37,60,27}, -{37,60,28}, -{37,60,29}, -{37,60,30}, -{37,60,31}, -{37,60,32}, -{37,60,33}, -{37,60,34}, -{37,60,35}, -{37,60,36}, -{37,60,37}, -{37,60,38}, -{37,60,39}, -{37,60,40}, -{37,60,41}, -{37,60,42}, -{37,60,43}, -{37,60,44}, -{37,60,45}, -{37,60,46}, -{37,60,47}, -{37,60,48}, -{37,60,49}, -{37,60,50}, -{37,60,51}, -{37,61,-96}, -{37,61,-95}, -{37,61,-94}, -{37,61,-93}, -{37,61,-92}, -{37,61,-91}, -{37,61,-90}, -{37,61,-89}, -{37,61,-88}, -{37,61,-87}, -{37,61,-86}, -{37,61,-85}, -{37,61,-84}, -{37,61,-83}, -{37,61,-82}, -{37,61,-81}, -{37,61,-80}, -{37,61,-79}, -{37,61,-78}, -{37,61,-77}, -{37,61,-76}, -{37,61,-75}, -{37,61,-74}, -{37,61,-73}, -{37,61,-72}, -{37,61,-71}, -{37,61,-70}, -{37,61,-69}, -{37,61,-68}, -{37,61,-67}, -{37,61,-66}, -{37,61,-65}, -{37,61,-64}, -{37,61,-63}, -{37,61,-62}, -{37,61,-61}, -{37,61,-60}, -{37,61,-59}, -{37,61,-58}, -{37,61,-57}, -{37,61,-56}, -{37,61,-55}, -{37,61,-54}, -{37,61,-53}, -{37,61,-52}, -{37,61,-51}, -{37,61,-50}, -{37,61,-49}, -{37,61,-48}, -{37,61,-47}, -{37,61,-46}, -{37,61,-45}, -{37,61,-44}, -{37,61,-43}, -{37,61,-42}, -{37,61,-41}, -{37,61,-40}, -{37,61,-39}, -{37,61,-38}, -{37,61,-37}, -{37,61,-36}, -{37,61,-35}, -{37,61,-34}, -{37,61,-33}, -{37,61,-32}, -{37,61,-31}, -{37,61,-30}, -{37,61,-29}, -{37,61,-28}, -{37,61,-27}, -{37,61,-26}, -{37,61,-25}, -{37,61,-24}, -{37,61,-23}, -{37,61,-22}, -{37,61,-21}, -{37,61,-20}, -{37,61,-19}, -{37,61,-18}, -{37,61,-17}, -{37,61,-16}, -{37,61,-15}, -{37,61,-14}, -{37,61,-13}, -{37,61,-12}, -{37,61,-11}, -{37,61,-10}, -{37,61,-9}, -{37,61,-8}, -{37,61,-7}, -{37,61,-6}, -{37,61,-5}, -{37,61,-4}, -{37,61,-3}, -{37,61,-2}, -{37,61,-1}, -{37,61,0}, -{37,61,1}, -{37,61,2}, -{37,61,3}, -{37,61,4}, -{37,61,5}, -{37,61,6}, -{37,61,7}, -{37,61,8}, -{37,61,9}, -{37,61,10}, -{37,61,11}, -{37,61,12}, -{37,61,13}, -{37,61,14}, -{37,61,15}, -{37,61,16}, -{37,61,17}, -{37,61,18}, -{37,61,19}, -{37,61,20}, -{37,61,21}, -{37,61,22}, -{37,61,23}, -{37,61,24}, -{37,61,25}, -{37,61,26}, -{37,61,27}, -{37,61,28}, -{37,61,29}, -{37,61,30}, -{37,61,31}, -{37,61,32}, -{37,61,33}, -{37,61,34}, -{37,61,35}, -{37,61,36}, -{37,61,37}, -{37,61,38}, -{37,61,39}, -{37,61,40}, -{37,61,41}, -{37,61,42}, -{37,61,43}, -{37,61,44}, -{37,61,45}, -{37,61,46}, -{37,61,47}, -{37,61,48}, -{37,61,49}, -{37,61,50}, -{37,61,51}, -{37,62,-97}, -{37,62,-96}, -{37,62,-95}, -{37,62,-94}, -{37,62,-93}, -{37,62,-92}, -{37,62,-91}, -{37,62,-90}, -{37,62,-89}, -{37,62,-88}, -{37,62,-87}, -{37,62,-86}, -{37,62,-85}, -{37,62,-84}, -{37,62,-83}, -{37,62,-82}, -{37,62,-81}, -{37,62,-80}, -{37,62,-79}, -{37,62,-78}, -{37,62,-77}, -{37,62,-76}, -{37,62,-75}, -{37,62,-74}, -{37,62,-73}, -{37,62,-72}, -{37,62,-71}, -{37,62,-70}, -{37,62,-69}, -{37,62,-68}, -{37,62,-67}, -{37,62,-66}, -{37,62,-65}, -{37,62,-64}, -{37,62,-63}, -{37,62,-62}, -{37,62,-61}, -{37,62,-60}, -{37,62,-59}, -{37,62,-58}, -{37,62,-57}, -{37,62,-56}, -{37,62,-55}, -{37,62,-54}, -{37,62,-53}, -{37,62,-52}, -{37,62,-51}, -{37,62,-50}, -{37,62,-49}, -{37,62,-48}, -{37,62,-47}, -{37,62,-46}, -{37,62,-45}, -{37,62,-44}, -{37,62,-43}, -{37,62,-42}, -{37,62,-41}, -{37,62,-40}, -{37,62,-39}, -{37,62,-38}, -{37,62,-37}, -{37,62,-36}, -{37,62,-35}, -{37,62,-34}, -{37,62,-33}, -{37,62,-32}, -{37,62,-31}, -{37,62,-30}, -{37,62,-29}, -{37,62,-28}, -{37,62,-27}, -{37,62,-26}, -{37,62,-25}, -{37,62,-24}, -{37,62,-23}, -{37,62,-22}, -{37,62,-21}, -{37,62,-20}, -{37,62,-19}, -{37,62,-18}, -{37,62,-17}, -{37,62,-16}, -{37,62,-15}, -{37,62,-14}, -{37,62,-13}, -{37,62,-12}, -{37,62,-11}, -{37,62,-10}, -{37,62,-9}, -{37,62,-8}, -{37,62,-7}, -{37,62,-6}, -{37,62,-5}, -{37,62,-4}, -{37,62,-3}, -{37,62,-2}, -{37,62,-1}, -{37,62,0}, -{37,62,1}, -{37,62,2}, -{37,62,3}, -{37,62,4}, -{37,62,5}, -{37,62,6}, -{37,62,7}, -{37,62,8}, -{37,62,9}, -{37,62,10}, -{37,62,11}, -{37,62,12}, -{37,62,13}, -{37,62,14}, -{37,62,15}, -{37,62,16}, -{37,62,17}, -{37,62,18}, -{37,62,19}, -{37,62,20}, -{37,62,21}, -{37,62,22}, -{37,62,23}, -{37,62,24}, -{37,62,25}, -{37,62,26}, -{37,62,27}, -{37,62,28}, -{37,62,29}, -{37,63,-98}, -{37,63,-97}, -{37,63,-96}, -{37,63,-95}, -{37,63,-94}, -{37,63,-93}, -{37,63,-92}, -{37,63,-91}, -{37,63,-90}, -{37,63,-89}, -{37,63,-88}, -{37,63,-87}, -{37,63,-86}, -{37,63,-85}, -{37,63,-84}, -{37,63,-83}, -{37,63,-82}, -{37,63,-81}, -{37,63,-80}, -{37,63,-79}, -{37,63,-78}, -{37,63,-77}, -{37,63,-76}, -{37,63,-75}, -{37,63,-74}, -{37,63,-73}, -{37,63,-72}, -{37,63,-71}, -{37,63,-70}, -{37,63,-69}, -{37,63,-68}, -{37,63,-67}, -{37,63,-66}, -{37,63,-65}, -{37,63,-64}, -{37,63,-63}, -{37,63,-62}, -{37,63,-61}, -{37,63,-60}, -{37,63,-59}, -{37,63,-58}, -{37,63,-57}, -{37,63,-56}, -{37,63,-55}, -{37,63,-54}, -{37,63,-53}, -{37,63,-52}, -{37,63,-51}, -{37,63,-50}, -{37,63,-49}, -{37,63,-48}, -{37,63,-47}, -{37,63,-46}, -{37,63,-45}, -{37,63,-44}, -{37,63,-43}, -{37,63,-42}, -{37,63,-41}, -{37,63,-40}, -{37,63,-39}, -{37,63,-38}, -{37,63,-37}, -{37,63,-36}, -{37,63,-35}, -{37,63,-34}, -{37,63,-33}, -{37,63,-32}, -{37,63,-31}, -{37,63,-30}, -{37,63,-29}, -{37,63,-28}, -{37,63,-27}, -{37,63,-26}, -{37,63,-25}, -{37,63,-24}, -{37,63,-23}, -{37,63,-22}, -{37,63,-21}, -{37,63,-20}, -{37,63,-19}, -{37,63,-18}, -{37,63,-17}, -{37,63,-16}, -{37,63,-15}, -{37,63,-14}, -{37,63,-13}, -{37,63,-12}, -{37,63,-11}, -{37,63,-10}, -{37,63,-9}, -{37,63,-8}, -{37,63,-7}, -{37,63,-6}, -{37,63,-5}, -{37,63,-4}, -{37,63,-3}, -{37,63,-2}, -{37,63,-1}, -{37,63,0}, -{37,63,1}, -{37,63,2}, -{37,63,3}, -{37,63,4}, -{37,63,5}, -{37,63,6}, -{37,63,7}, -{37,63,8}, -{37,64,-99}, -{37,64,-98}, -{37,64,-97}, -{37,64,-96}, -{37,64,-95}, -{37,64,-94}, -{37,64,-93}, -{37,64,-92}, -{37,64,-91}, -{37,64,-90}, -{37,64,-89}, -{37,64,-88}, -{37,64,-87}, -{37,64,-86}, -{37,64,-85}, -{37,64,-84}, -{37,64,-83}, -{37,64,-82}, -{37,64,-81}, -{37,64,-80}, -{37,64,-79}, -{37,64,-78}, -{37,64,-77}, -{37,64,-76}, -{37,64,-75}, -{37,64,-74}, -{37,64,-73}, -{37,64,-72}, -{37,64,-71}, -{37,64,-70}, -{37,64,-69}, -{37,64,-68}, -{37,64,-67}, -{37,64,-66}, -{37,64,-65}, -{37,64,-64}, -{37,64,-63}, -{37,64,-62}, -{37,64,-61}, -{37,64,-60}, -{37,64,-59}, -{37,64,-58}, -{37,64,-57}, -{37,64,-56}, -{37,64,-55}, -{37,64,-54}, -{37,64,-53}, -{37,64,-52}, -{37,64,-51}, -{37,64,-50}, -{37,64,-49}, -{37,64,-48}, -{37,64,-47}, -{37,64,-46}, -{37,64,-45}, -{37,64,-44}, -{37,64,-43}, -{37,64,-42}, -{37,64,-41}, -{37,64,-40}, -{37,64,-39}, -{37,64,-38}, -{37,64,-37}, -{37,64,-36}, -{37,64,-35}, -{37,64,-34}, -{37,64,-33}, -{37,64,-32}, -{37,64,-31}, -{37,64,-30}, -{37,64,-29}, -{37,64,-28}, -{37,64,-27}, -{37,64,-26}, -{37,64,-25}, -{37,64,-24}, -{37,64,-23}, -{37,64,-22}, -{37,64,-21}, -{37,64,-20}, -{37,64,-19}, -{37,64,-18}, -{37,64,-17}, -{37,64,-16}, -{37,64,-15}, -{37,64,-14}, -{37,64,-13}, -{37,64,-12}, -{37,64,-11}, -{37,64,-10}, -{37,64,-9}, -{37,64,-8}, -{37,64,-7}, -{37,64,-6}, -{37,65,-100}, -{37,65,-99}, -{37,65,-98}, -{37,65,-97}, -{37,65,-96}, -{37,65,-95}, -{37,65,-94}, -{37,65,-93}, -{37,65,-92}, -{37,65,-91}, -{37,65,-90}, -{37,65,-89}, -{37,65,-88}, -{37,65,-87}, -{37,65,-86}, -{37,65,-85}, -{37,65,-84}, -{37,65,-83}, -{37,65,-82}, -{37,65,-81}, -{37,65,-80}, -{37,65,-79}, -{37,65,-78}, -{37,65,-77}, -{37,65,-76}, -{37,65,-75}, -{37,65,-74}, -{37,65,-73}, -{37,65,-72}, -{37,65,-71}, -{37,65,-70}, -{37,65,-69}, -{37,65,-68}, -{37,65,-67}, -{37,65,-66}, -{37,65,-65}, -{37,65,-64}, -{37,65,-63}, -{37,65,-62}, -{37,65,-61}, -{37,65,-60}, -{37,65,-59}, -{37,65,-58}, -{37,65,-57}, -{37,65,-56}, -{37,65,-55}, -{37,65,-54}, -{37,65,-53}, -{37,65,-52}, -{37,65,-51}, -{37,65,-50}, -{37,65,-49}, -{37,65,-48}, -{37,65,-47}, -{37,65,-46}, -{37,65,-45}, -{37,65,-44}, -{37,65,-43}, -{37,65,-42}, -{37,65,-41}, -{37,65,-40}, -{37,65,-39}, -{37,65,-38}, -{37,65,-37}, -{37,65,-36}, -{37,65,-35}, -{37,65,-34}, -{37,65,-33}, -{37,65,-32}, -{37,65,-31}, -{37,65,-30}, -{37,65,-29}, -{37,65,-28}, -{37,65,-27}, -{37,65,-26}, -{37,65,-25}, -{37,65,-24}, -{37,65,-23}, -{37,65,-22}, -{37,65,-21}, -{37,65,-20}, -{37,65,-19}, -{37,65,-18}, -{37,65,-17}, -{37,65,-16}, -{37,66,-100}, -{37,66,-99}, -{37,66,-98}, -{37,66,-97}, -{37,66,-96}, -{37,66,-95}, -{37,66,-94}, -{37,66,-93}, -{37,66,-92}, -{37,66,-91}, -{37,66,-90}, -{37,66,-89}, -{37,66,-88}, -{37,66,-87}, -{37,66,-86}, -{37,66,-85}, -{37,66,-84}, -{37,66,-83}, -{37,66,-82}, -{37,66,-81}, -{37,66,-80}, -{37,66,-79}, -{37,66,-78}, -{37,66,-77}, -{37,66,-76}, -{37,66,-75}, -{37,66,-74}, -{37,66,-73}, -{37,66,-72}, -{37,66,-71}, -{37,66,-70}, -{37,66,-69}, -{37,66,-68}, -{37,66,-67}, -{37,66,-66}, -{37,66,-65}, -{37,66,-64}, -{37,66,-63}, -{37,66,-62}, -{37,66,-61}, -{37,66,-60}, -{37,66,-59}, -{37,66,-58}, -{37,66,-57}, -{37,66,-56}, -{37,66,-55}, -{37,66,-54}, -{37,66,-53}, -{37,66,-52}, -{37,66,-51}, -{37,66,-50}, -{37,66,-49}, -{37,66,-48}, -{37,66,-47}, -{37,66,-46}, -{37,66,-45}, -{37,66,-44}, -{37,66,-43}, -{37,66,-42}, -{37,66,-41}, -{37,66,-40}, -{37,66,-39}, -{37,66,-38}, -{37,66,-37}, -{37,66,-36}, -{37,66,-35}, -{37,66,-34}, -{37,66,-33}, -{37,66,-32}, -{37,66,-31}, -{37,66,-30}, -{37,66,-29}, -{37,66,-28}, -{37,66,-27}, -{37,66,-26}, -{37,66,-25}, -{37,67,-100}, -{37,67,-99}, -{37,67,-98}, -{37,67,-97}, -{37,67,-96}, -{37,67,-95}, -{37,67,-94}, -{37,67,-93}, -{37,67,-92}, -{37,67,-91}, -{37,67,-90}, -{37,67,-89}, -{37,67,-88}, -{37,67,-87}, -{37,67,-86}, -{37,67,-85}, -{37,67,-84}, -{37,67,-83}, -{37,67,-82}, -{37,67,-81}, -{37,67,-80}, -{37,67,-79}, -{37,67,-78}, -{37,67,-77}, -{37,67,-76}, -{37,67,-75}, -{37,67,-74}, -{37,67,-73}, -{37,67,-72}, -{37,67,-71}, -{37,67,-70}, -{37,67,-69}, -{37,67,-68}, -{37,67,-67}, -{37,67,-66}, -{37,67,-65}, -{37,67,-64}, -{37,67,-63}, -{37,67,-62}, -{37,67,-61}, -{37,67,-60}, -{37,67,-59}, -{37,67,-58}, -{37,67,-57}, -{37,67,-56}, -{37,67,-55}, -{37,67,-54}, -{37,67,-53}, -{37,67,-52}, -{37,67,-51}, -{37,67,-50}, -{37,67,-49}, -{37,67,-48}, -{37,67,-47}, -{37,67,-46}, -{37,67,-45}, -{37,67,-44}, -{37,67,-43}, -{37,67,-42}, -{37,67,-41}, -{37,67,-40}, -{37,67,-39}, -{37,67,-38}, -{37,67,-37}, -{37,67,-36}, -{37,67,-35}, -{37,67,-34}, -{37,67,-33}, -{37,68,-100}, -{37,68,-99}, -{37,68,-98}, -{37,68,-97}, -{37,68,-96}, -{37,68,-95}, -{37,68,-94}, -{37,68,-93}, -{37,68,-92}, -{37,68,-91}, -{37,68,-90}, -{37,68,-89}, -{37,68,-88}, -{37,68,-87}, -{37,68,-86}, -{37,68,-85}, -{37,68,-84}, -{37,68,-83}, -{37,68,-82}, -{37,68,-81}, -{37,68,-80}, -{37,68,-79}, -{37,68,-78}, -{37,68,-77}, -{37,68,-76}, -{37,68,-75}, -{37,68,-74}, -{37,68,-73}, -{37,68,-72}, -{37,68,-71}, -{37,68,-70}, -{37,68,-69}, -{37,68,-68}, -{37,68,-67}, -{37,68,-66}, -{37,68,-65}, -{37,68,-64}, -{37,68,-63}, -{37,68,-62}, -{37,68,-61}, -{37,68,-60}, -{37,68,-59}, -{37,68,-58}, -{37,68,-57}, -{37,68,-56}, -{37,68,-55}, -{37,68,-54}, -{37,68,-53}, -{37,68,-52}, -{37,68,-51}, -{37,68,-50}, -{37,68,-49}, -{37,68,-48}, -{37,68,-47}, -{37,68,-46}, -{37,68,-45}, -{37,68,-44}, -{37,68,-43}, -{37,68,-42}, -{37,68,-41}, -{37,68,-40}, -{37,69,-100}, -{37,69,-99}, -{37,69,-98}, -{37,69,-97}, -{37,69,-96}, -{37,69,-95}, -{37,69,-94}, -{37,69,-93}, -{37,69,-92}, -{37,69,-91}, -{37,69,-90}, -{37,69,-89}, -{37,69,-88}, -{37,69,-87}, -{37,69,-86}, -{37,69,-85}, -{37,69,-84}, -{37,69,-83}, -{37,69,-82}, -{37,69,-81}, -{37,69,-80}, -{37,69,-79}, -{37,69,-78}, -{37,69,-77}, -{37,69,-76}, -{37,69,-75}, -{37,69,-74}, -{37,69,-73}, -{37,69,-72}, -{37,69,-71}, -{37,69,-70}, -{37,69,-69}, -{37,69,-68}, -{37,69,-67}, -{37,69,-66}, -{37,69,-65}, -{37,69,-64}, -{37,69,-63}, -{37,69,-62}, -{37,69,-61}, -{37,69,-60}, -{37,69,-59}, -{37,69,-58}, -{37,69,-57}, -{37,69,-56}, -{37,69,-55}, -{37,69,-54}, -{37,69,-53}, -{37,69,-52}, -{37,69,-51}, -{37,69,-50}, -{37,69,-49}, -{37,69,-48}, -{37,69,-47}, -{37,70,-100}, -{37,70,-99}, -{37,70,-98}, -{37,70,-97}, -{37,70,-96}, -{37,70,-95}, -{37,70,-94}, -{37,70,-93}, -{37,70,-92}, -{37,70,-91}, -{37,70,-90}, -{37,70,-89}, -{37,70,-88}, -{37,70,-87}, -{37,70,-86}, -{37,70,-85}, -{37,70,-84}, -{37,70,-83}, -{37,70,-82}, -{37,70,-81}, -{37,70,-80}, -{37,70,-79}, -{37,70,-78}, -{37,70,-77}, -{37,70,-76}, -{37,70,-75}, -{37,70,-74}, -{37,70,-73}, -{37,70,-72}, -{37,70,-71}, -{37,70,-70}, -{37,70,-69}, -{37,70,-68}, -{37,70,-67}, -{37,70,-66}, -{37,70,-65}, -{37,70,-64}, -{37,70,-63}, -{37,70,-62}, -{37,70,-61}, -{37,70,-60}, -{37,70,-59}, -{37,70,-58}, -{37,70,-57}, -{37,70,-56}, -{37,70,-55}, -{37,70,-54}, -{37,70,-53}, -{37,71,-100}, -{37,71,-99}, -{37,71,-98}, -{37,71,-97}, -{37,71,-96}, -{37,71,-95}, -{37,71,-94}, -{37,71,-93}, -{37,71,-92}, -{37,71,-91}, -{37,71,-90}, -{37,71,-89}, -{37,71,-88}, -{37,71,-87}, -{37,71,-86}, -{37,71,-85}, -{37,71,-84}, -{37,71,-83}, -{37,71,-82}, -{37,71,-81}, -{37,71,-80}, -{37,71,-79}, -{37,71,-78}, -{37,71,-77}, -{37,71,-76}, -{37,71,-75}, -{37,71,-74}, -{37,71,-73}, -{37,71,-72}, -{37,71,-71}, -{37,71,-70}, -{37,71,-69}, -{37,71,-68}, -{37,71,-67}, -{37,71,-66}, -{37,71,-65}, -{37,71,-64}, -{37,71,-63}, -{37,71,-62}, -{37,71,-61}, -{37,71,-60}, -{37,71,-59}, -{37,71,-58}, -{37,72,-100}, -{37,72,-99}, -{37,72,-98}, -{37,72,-97}, -{37,72,-96}, -{37,72,-95}, -{37,72,-94}, -{37,72,-93}, -{37,72,-92}, -{37,72,-91}, -{37,72,-90}, -{37,72,-89}, -{37,72,-88}, -{37,72,-87}, -{37,72,-86}, -{37,72,-85}, -{37,72,-84}, -{37,72,-83}, -{37,72,-82}, -{37,72,-81}, -{37,72,-80}, -{37,72,-79}, -{37,72,-78}, -{37,72,-77}, -{37,72,-76}, -{37,72,-75}, -{37,72,-74}, -{37,72,-73}, -{37,72,-72}, -{37,72,-71}, -{37,72,-70}, -{37,72,-69}, -{37,72,-68}, -{37,72,-67}, -{37,72,-66}, -{37,72,-65}, -{37,72,-64}, -{37,72,-63}, -{37,73,-100}, -{37,73,-99}, -{37,73,-98}, -{37,73,-97}, -{37,73,-96}, -{37,73,-95}, -{37,73,-94}, -{37,73,-93}, -{37,73,-92}, -{37,73,-91}, -{37,73,-90}, -{37,73,-89}, -{37,73,-88}, -{37,73,-87}, -{37,73,-86}, -{37,73,-85}, -{37,73,-84}, -{37,73,-83}, -{37,73,-82}, -{37,73,-81}, -{37,73,-80}, -{37,73,-79}, -{37,73,-78}, -{37,73,-77}, -{37,73,-76}, -{37,73,-75}, -{37,73,-74}, -{37,73,-73}, -{37,73,-72}, -{37,73,-71}, -{37,73,-70}, -{37,73,-69}, -{37,73,-68}, -{37,74,-100}, -{37,74,-99}, -{37,74,-98}, -{37,74,-97}, -{37,74,-96}, -{37,74,-95}, -{37,74,-94}, -{37,74,-93}, -{37,74,-92}, -{37,74,-91}, -{37,74,-90}, -{37,74,-89}, -{37,74,-88}, -{37,74,-87}, -{37,74,-86}, -{37,74,-85}, -{37,74,-84}, -{37,74,-83}, -{37,74,-82}, -{37,74,-81}, -{37,74,-80}, -{37,74,-79}, -{37,74,-78}, -{37,74,-77}, -{37,74,-76}, -{37,74,-75}, -{37,74,-74}, -{37,74,-73}, -{37,75,-100}, -{37,75,-99}, -{37,75,-98}, -{37,75,-97}, -{37,75,-96}, -{37,75,-95}, -{37,75,-94}, -{37,75,-93}, -{37,75,-92}, -{37,75,-91}, -{37,75,-90}, -{37,75,-89}, -{37,75,-88}, -{37,75,-87}, -{37,75,-86}, -{37,75,-85}, -{37,75,-84}, -{37,75,-83}, -{37,75,-82}, -{37,75,-81}, -{37,75,-80}, -{37,75,-79}, -{37,75,-78}, -{37,75,-77}, -{37,76,-100}, -{37,76,-99}, -{37,76,-98}, -{37,76,-97}, -{37,76,-96}, -{37,76,-95}, -{37,76,-94}, -{37,76,-93}, -{37,76,-92}, -{37,76,-91}, -{37,76,-90}, -{37,76,-89}, -{37,76,-88}, -{37,76,-87}, -{37,76,-86}, -{37,76,-85}, -{37,76,-84}, -{37,76,-83}, -{37,76,-82}, -{37,76,-81}, -{37,77,-100}, -{37,77,-99}, -{37,77,-98}, -{37,77,-97}, -{37,77,-96}, -{37,77,-95}, -{37,77,-94}, -{37,77,-93}, -{37,77,-92}, -{37,77,-91}, -{37,77,-90}, -{37,77,-89}, -{37,77,-88}, -{37,77,-87}, -{37,77,-86}, -{37,77,-85}, -{37,78,-100}, -{37,78,-99}, -{37,78,-98}, -{37,78,-97}, -{37,78,-96}, -{37,78,-95}, -{37,78,-94}, -{37,78,-93}, -{37,78,-92}, -{37,78,-91}, -{37,78,-90}, -{37,78,-89}, -{37,79,-100}, -{37,79,-99}, -{37,79,-98}, -{37,79,-97}, -{37,79,-96}, -{37,79,-95}, -{37,79,-94}, -{37,79,-93}, -{37,80,-100}, -{37,80,-99}, -{37,80,-98}, -{37,80,-97}, -{37,80,-96}, -{37,81,-100}, -{38,-44,39}, -{38,-44,40}, -{38,-44,41}, -{38,-44,42}, -{38,-44,43}, -{38,-43,35}, -{38,-43,36}, -{38,-43,37}, -{38,-43,38}, -{38,-43,39}, -{38,-43,40}, -{38,-43,41}, -{38,-43,42}, -{38,-43,43}, -{38,-42,31}, -{38,-42,32}, -{38,-42,33}, -{38,-42,34}, -{38,-42,35}, -{38,-42,36}, -{38,-42,37}, -{38,-42,38}, -{38,-42,39}, -{38,-42,40}, -{38,-42,41}, -{38,-42,42}, -{38,-42,43}, -{38,-41,28}, -{38,-41,29}, -{38,-41,30}, -{38,-41,31}, -{38,-41,32}, -{38,-41,33}, -{38,-41,34}, -{38,-41,35}, -{38,-41,36}, -{38,-41,37}, -{38,-41,38}, -{38,-41,39}, -{38,-41,40}, -{38,-41,41}, -{38,-41,42}, -{38,-41,43}, -{38,-40,25}, -{38,-40,26}, -{38,-40,27}, -{38,-40,28}, -{38,-40,29}, -{38,-40,30}, -{38,-40,31}, -{38,-40,32}, -{38,-40,33}, -{38,-40,34}, -{38,-40,35}, -{38,-40,36}, -{38,-40,37}, -{38,-40,38}, -{38,-40,39}, -{38,-40,40}, -{38,-40,41}, -{38,-40,42}, -{38,-40,43}, -{38,-39,22}, -{38,-39,23}, -{38,-39,24}, -{38,-39,25}, -{38,-39,26}, -{38,-39,27}, -{38,-39,28}, -{38,-39,29}, -{38,-39,30}, -{38,-39,31}, -{38,-39,32}, -{38,-39,33}, -{38,-39,34}, -{38,-39,35}, -{38,-39,36}, -{38,-39,37}, -{38,-39,38}, -{38,-39,39}, -{38,-39,40}, -{38,-39,41}, -{38,-39,42}, -{38,-39,43}, -{38,-38,20}, -{38,-38,21}, -{38,-38,22}, -{38,-38,23}, -{38,-38,24}, -{38,-38,25}, -{38,-38,26}, -{38,-38,27}, -{38,-38,28}, -{38,-38,29}, -{38,-38,30}, -{38,-38,31}, -{38,-38,32}, -{38,-38,33}, -{38,-38,34}, -{38,-38,35}, -{38,-38,36}, -{38,-38,37}, -{38,-38,38}, -{38,-38,39}, -{38,-38,40}, -{38,-38,41}, -{38,-38,42}, -{38,-38,43}, -{38,-37,17}, -{38,-37,18}, -{38,-37,19}, -{38,-37,20}, -{38,-37,21}, -{38,-37,22}, -{38,-37,23}, -{38,-37,24}, -{38,-37,25}, -{38,-37,26}, -{38,-37,27}, -{38,-37,28}, -{38,-37,29}, -{38,-37,30}, -{38,-37,31}, -{38,-37,32}, -{38,-37,33}, -{38,-37,34}, -{38,-37,35}, -{38,-37,36}, -{38,-37,37}, -{38,-37,38}, -{38,-37,39}, -{38,-37,40}, -{38,-37,41}, -{38,-37,42}, -{38,-37,43}, -{38,-36,15}, -{38,-36,16}, -{38,-36,17}, -{38,-36,18}, -{38,-36,19}, -{38,-36,20}, -{38,-36,21}, -{38,-36,22}, -{38,-36,23}, -{38,-36,24}, -{38,-36,25}, -{38,-36,26}, -{38,-36,27}, -{38,-36,28}, -{38,-36,29}, -{38,-36,30}, -{38,-36,31}, -{38,-36,32}, -{38,-36,33}, -{38,-36,34}, -{38,-36,35}, -{38,-36,36}, -{38,-36,37}, -{38,-36,38}, -{38,-36,39}, -{38,-36,40}, -{38,-36,41}, -{38,-36,42}, -{38,-36,43}, -{38,-35,13}, -{38,-35,14}, -{38,-35,15}, -{38,-35,16}, -{38,-35,17}, -{38,-35,18}, -{38,-35,19}, -{38,-35,20}, -{38,-35,21}, -{38,-35,22}, -{38,-35,23}, -{38,-35,24}, -{38,-35,25}, -{38,-35,26}, -{38,-35,27}, -{38,-35,28}, -{38,-35,29}, -{38,-35,30}, -{38,-35,31}, -{38,-35,32}, -{38,-35,33}, -{38,-35,34}, -{38,-35,35}, -{38,-35,36}, -{38,-35,37}, -{38,-35,38}, -{38,-35,39}, -{38,-35,40}, -{38,-35,41}, -{38,-35,42}, -{38,-35,43}, -{38,-34,11}, -{38,-34,12}, -{38,-34,13}, -{38,-34,14}, -{38,-34,15}, -{38,-34,16}, -{38,-34,17}, -{38,-34,18}, -{38,-34,19}, -{38,-34,20}, -{38,-34,21}, -{38,-34,22}, -{38,-34,23}, -{38,-34,24}, -{38,-34,25}, -{38,-34,26}, -{38,-34,27}, -{38,-34,28}, -{38,-34,29}, -{38,-34,30}, -{38,-34,31}, -{38,-34,32}, -{38,-34,33}, -{38,-34,34}, -{38,-34,35}, -{38,-34,36}, -{38,-34,37}, -{38,-34,38}, -{38,-34,39}, -{38,-34,40}, -{38,-34,41}, -{38,-34,42}, -{38,-34,43}, -{38,-33,8}, -{38,-33,9}, -{38,-33,10}, -{38,-33,11}, -{38,-33,12}, -{38,-33,13}, -{38,-33,14}, -{38,-33,15}, -{38,-33,16}, -{38,-33,17}, -{38,-33,18}, -{38,-33,19}, -{38,-33,20}, -{38,-33,21}, -{38,-33,22}, -{38,-33,23}, -{38,-33,24}, -{38,-33,25}, -{38,-33,26}, -{38,-33,27}, -{38,-33,28}, -{38,-33,29}, -{38,-33,30}, -{38,-33,31}, -{38,-33,32}, -{38,-33,33}, -{38,-33,34}, -{38,-33,35}, -{38,-33,36}, -{38,-33,37}, -{38,-33,38}, -{38,-33,39}, -{38,-33,40}, -{38,-33,41}, -{38,-33,42}, -{38,-33,43}, -{38,-33,44}, -{38,-32,7}, -{38,-32,8}, -{38,-32,9}, -{38,-32,10}, -{38,-32,11}, -{38,-32,12}, -{38,-32,13}, -{38,-32,14}, -{38,-32,15}, -{38,-32,16}, -{38,-32,17}, -{38,-32,18}, -{38,-32,19}, -{38,-32,20}, -{38,-32,21}, -{38,-32,22}, -{38,-32,23}, -{38,-32,24}, -{38,-32,25}, -{38,-32,26}, -{38,-32,27}, -{38,-32,28}, -{38,-32,29}, -{38,-32,30}, -{38,-32,31}, -{38,-32,32}, -{38,-32,33}, -{38,-32,34}, -{38,-32,35}, -{38,-32,36}, -{38,-32,37}, -{38,-32,38}, -{38,-32,39}, -{38,-32,40}, -{38,-32,41}, -{38,-32,42}, -{38,-32,43}, -{38,-32,44}, -{38,-31,5}, -{38,-31,6}, -{38,-31,7}, -{38,-31,8}, -{38,-31,9}, -{38,-31,10}, -{38,-31,11}, -{38,-31,12}, -{38,-31,13}, -{38,-31,14}, -{38,-31,15}, -{38,-31,16}, -{38,-31,17}, -{38,-31,18}, -{38,-31,19}, -{38,-31,20}, -{38,-31,21}, -{38,-31,22}, -{38,-31,23}, -{38,-31,24}, -{38,-31,25}, -{38,-31,26}, -{38,-31,27}, -{38,-31,28}, -{38,-31,29}, -{38,-31,30}, -{38,-31,31}, -{38,-31,32}, -{38,-31,33}, -{38,-31,34}, -{38,-31,35}, -{38,-31,36}, -{38,-31,37}, -{38,-31,38}, -{38,-31,39}, -{38,-31,40}, -{38,-31,41}, -{38,-31,42}, -{38,-31,43}, -{38,-31,44}, -{38,-30,3}, -{38,-30,4}, -{38,-30,5}, -{38,-30,6}, -{38,-30,7}, -{38,-30,8}, -{38,-30,9}, -{38,-30,10}, -{38,-30,11}, -{38,-30,12}, -{38,-30,13}, -{38,-30,14}, -{38,-30,15}, -{38,-30,16}, -{38,-30,17}, -{38,-30,18}, -{38,-30,19}, -{38,-30,20}, -{38,-30,21}, -{38,-30,22}, -{38,-30,23}, -{38,-30,24}, -{38,-30,25}, -{38,-30,26}, -{38,-30,27}, -{38,-30,28}, -{38,-30,29}, -{38,-30,30}, -{38,-30,31}, -{38,-30,32}, -{38,-30,33}, -{38,-30,34}, -{38,-30,35}, -{38,-30,36}, -{38,-30,37}, -{38,-30,38}, -{38,-30,39}, -{38,-30,40}, -{38,-30,41}, -{38,-30,42}, -{38,-30,43}, -{38,-30,44}, -{38,-29,1}, -{38,-29,2}, -{38,-29,3}, -{38,-29,4}, -{38,-29,5}, -{38,-29,6}, -{38,-29,7}, -{38,-29,8}, -{38,-29,9}, -{38,-29,10}, -{38,-29,11}, -{38,-29,12}, -{38,-29,13}, -{38,-29,14}, -{38,-29,15}, -{38,-29,16}, -{38,-29,17}, -{38,-29,18}, -{38,-29,19}, -{38,-29,20}, -{38,-29,21}, -{38,-29,22}, -{38,-29,23}, -{38,-29,24}, -{38,-29,25}, -{38,-29,26}, -{38,-29,27}, -{38,-29,28}, -{38,-29,29}, -{38,-29,30}, -{38,-29,31}, -{38,-29,32}, -{38,-29,33}, -{38,-29,34}, -{38,-29,35}, -{38,-29,36}, -{38,-29,37}, -{38,-29,38}, -{38,-29,39}, -{38,-29,40}, -{38,-29,41}, -{38,-29,42}, -{38,-29,43}, -{38,-29,44}, -{38,-28,-1}, -{38,-28,0}, -{38,-28,1}, -{38,-28,2}, -{38,-28,3}, -{38,-28,4}, -{38,-28,5}, -{38,-28,6}, -{38,-28,7}, -{38,-28,8}, -{38,-28,9}, -{38,-28,10}, -{38,-28,11}, -{38,-28,12}, -{38,-28,13}, -{38,-28,14}, -{38,-28,15}, -{38,-28,16}, -{38,-28,17}, -{38,-28,18}, -{38,-28,19}, -{38,-28,20}, -{38,-28,21}, -{38,-28,22}, -{38,-28,23}, -{38,-28,24}, -{38,-28,25}, -{38,-28,26}, -{38,-28,27}, -{38,-28,28}, -{38,-28,29}, -{38,-28,30}, -{38,-28,31}, -{38,-28,32}, -{38,-28,33}, -{38,-28,34}, -{38,-28,35}, -{38,-28,36}, -{38,-28,37}, -{38,-28,38}, -{38,-28,39}, -{38,-28,40}, -{38,-28,41}, -{38,-28,42}, -{38,-28,43}, -{38,-28,44}, -{38,-27,-2}, -{38,-27,-1}, -{38,-27,0}, -{38,-27,1}, -{38,-27,2}, -{38,-27,3}, -{38,-27,4}, -{38,-27,5}, -{38,-27,6}, -{38,-27,7}, -{38,-27,8}, -{38,-27,9}, -{38,-27,10}, -{38,-27,11}, -{38,-27,12}, -{38,-27,13}, -{38,-27,14}, -{38,-27,15}, -{38,-27,16}, -{38,-27,17}, -{38,-27,18}, -{38,-27,19}, -{38,-27,20}, -{38,-27,21}, -{38,-27,22}, -{38,-27,23}, -{38,-27,24}, -{38,-27,25}, -{38,-27,26}, -{38,-27,27}, -{38,-27,28}, -{38,-27,29}, -{38,-27,30}, -{38,-27,31}, -{38,-27,32}, -{38,-27,33}, -{38,-27,34}, -{38,-27,35}, -{38,-27,36}, -{38,-27,37}, -{38,-27,38}, -{38,-27,39}, -{38,-27,40}, -{38,-27,41}, -{38,-27,42}, -{38,-27,43}, -{38,-27,44}, -{38,-26,-4}, -{38,-26,-3}, -{38,-26,-2}, -{38,-26,-1}, -{38,-26,0}, -{38,-26,1}, -{38,-26,2}, -{38,-26,3}, -{38,-26,4}, -{38,-26,5}, -{38,-26,6}, -{38,-26,7}, -{38,-26,8}, -{38,-26,9}, -{38,-26,10}, -{38,-26,11}, -{38,-26,12}, -{38,-26,13}, -{38,-26,14}, -{38,-26,15}, -{38,-26,16}, -{38,-26,17}, -{38,-26,18}, -{38,-26,19}, -{38,-26,20}, -{38,-26,21}, -{38,-26,22}, -{38,-26,23}, -{38,-26,24}, -{38,-26,25}, -{38,-26,26}, -{38,-26,27}, -{38,-26,28}, -{38,-26,29}, -{38,-26,30}, -{38,-26,31}, -{38,-26,32}, -{38,-26,33}, -{38,-26,34}, -{38,-26,35}, -{38,-26,36}, -{38,-26,37}, -{38,-26,38}, -{38,-26,39}, -{38,-26,40}, -{38,-26,41}, -{38,-26,42}, -{38,-26,43}, -{38,-26,44}, -{38,-25,-6}, -{38,-25,-5}, -{38,-25,-4}, -{38,-25,-3}, -{38,-25,-2}, -{38,-25,-1}, -{38,-25,0}, -{38,-25,1}, -{38,-25,2}, -{38,-25,3}, -{38,-25,4}, -{38,-25,5}, -{38,-25,6}, -{38,-25,7}, -{38,-25,8}, -{38,-25,9}, -{38,-25,10}, -{38,-25,11}, -{38,-25,12}, -{38,-25,13}, -{38,-25,14}, -{38,-25,15}, -{38,-25,16}, -{38,-25,17}, -{38,-25,18}, -{38,-25,19}, -{38,-25,20}, -{38,-25,21}, -{38,-25,22}, -{38,-25,23}, -{38,-25,24}, -{38,-25,25}, -{38,-25,26}, -{38,-25,27}, -{38,-25,28}, -{38,-25,29}, -{38,-25,30}, -{38,-25,31}, -{38,-25,32}, -{38,-25,33}, -{38,-25,34}, -{38,-25,35}, -{38,-25,36}, -{38,-25,37}, -{38,-25,38}, -{38,-25,39}, -{38,-25,40}, -{38,-25,41}, -{38,-25,42}, -{38,-25,43}, -{38,-25,44}, -{38,-24,-7}, -{38,-24,-6}, -{38,-24,-5}, -{38,-24,-4}, -{38,-24,-3}, -{38,-24,-2}, -{38,-24,-1}, -{38,-24,0}, -{38,-24,1}, -{38,-24,2}, -{38,-24,3}, -{38,-24,4}, -{38,-24,5}, -{38,-24,6}, -{38,-24,7}, -{38,-24,8}, -{38,-24,9}, -{38,-24,10}, -{38,-24,11}, -{38,-24,12}, -{38,-24,13}, -{38,-24,14}, -{38,-24,15}, -{38,-24,16}, -{38,-24,17}, -{38,-24,18}, -{38,-24,19}, -{38,-24,20}, -{38,-24,21}, -{38,-24,22}, -{38,-24,23}, -{38,-24,24}, -{38,-24,25}, -{38,-24,26}, -{38,-24,27}, -{38,-24,28}, -{38,-24,29}, -{38,-24,30}, -{38,-24,31}, -{38,-24,32}, -{38,-24,33}, -{38,-24,34}, -{38,-24,35}, -{38,-24,36}, -{38,-24,37}, -{38,-24,38}, -{38,-24,39}, -{38,-24,40}, -{38,-24,41}, -{38,-24,42}, -{38,-24,43}, -{38,-24,44}, -{38,-23,-9}, -{38,-23,-8}, -{38,-23,-7}, -{38,-23,-6}, -{38,-23,-5}, -{38,-23,-4}, -{38,-23,-3}, -{38,-23,-2}, -{38,-23,-1}, -{38,-23,0}, -{38,-23,1}, -{38,-23,2}, -{38,-23,3}, -{38,-23,4}, -{38,-23,5}, -{38,-23,6}, -{38,-23,7}, -{38,-23,8}, -{38,-23,9}, -{38,-23,10}, -{38,-23,11}, -{38,-23,12}, -{38,-23,13}, -{38,-23,14}, -{38,-23,15}, -{38,-23,16}, -{38,-23,17}, -{38,-23,18}, -{38,-23,19}, -{38,-23,20}, -{38,-23,21}, -{38,-23,22}, -{38,-23,23}, -{38,-23,24}, -{38,-23,25}, -{38,-23,26}, -{38,-23,27}, -{38,-23,28}, -{38,-23,29}, -{38,-23,30}, -{38,-23,31}, -{38,-23,32}, -{38,-23,33}, -{38,-23,34}, -{38,-23,35}, -{38,-23,36}, -{38,-23,37}, -{38,-23,38}, -{38,-23,39}, -{38,-23,40}, -{38,-23,41}, -{38,-23,42}, -{38,-23,43}, -{38,-23,44}, -{38,-22,-10}, -{38,-22,-9}, -{38,-22,-8}, -{38,-22,-7}, -{38,-22,-6}, -{38,-22,-5}, -{38,-22,-4}, -{38,-22,-3}, -{38,-22,-2}, -{38,-22,-1}, -{38,-22,0}, -{38,-22,1}, -{38,-22,2}, -{38,-22,3}, -{38,-22,4}, -{38,-22,5}, -{38,-22,6}, -{38,-22,7}, -{38,-22,8}, -{38,-22,9}, -{38,-22,10}, -{38,-22,11}, -{38,-22,12}, -{38,-22,13}, -{38,-22,14}, -{38,-22,15}, -{38,-22,16}, -{38,-22,17}, -{38,-22,18}, -{38,-22,19}, -{38,-22,20}, -{38,-22,21}, -{38,-22,22}, -{38,-22,23}, -{38,-22,24}, -{38,-22,25}, -{38,-22,26}, -{38,-22,27}, -{38,-22,28}, -{38,-22,29}, -{38,-22,30}, -{38,-22,31}, -{38,-22,32}, -{38,-22,33}, -{38,-22,34}, -{38,-22,35}, -{38,-22,36}, -{38,-22,37}, -{38,-22,38}, -{38,-22,39}, -{38,-22,40}, -{38,-22,41}, -{38,-22,42}, -{38,-22,43}, -{38,-22,44}, -{38,-21,-12}, -{38,-21,-11}, -{38,-21,-10}, -{38,-21,-9}, -{38,-21,-8}, -{38,-21,-7}, -{38,-21,-6}, -{38,-21,-5}, -{38,-21,-4}, -{38,-21,-3}, -{38,-21,-2}, -{38,-21,-1}, -{38,-21,0}, -{38,-21,1}, -{38,-21,2}, -{38,-21,3}, -{38,-21,4}, -{38,-21,5}, -{38,-21,6}, -{38,-21,7}, -{38,-21,8}, -{38,-21,9}, -{38,-21,10}, -{38,-21,11}, -{38,-21,12}, -{38,-21,13}, -{38,-21,14}, -{38,-21,15}, -{38,-21,16}, -{38,-21,17}, -{38,-21,18}, -{38,-21,19}, -{38,-21,20}, -{38,-21,21}, -{38,-21,22}, -{38,-21,23}, -{38,-21,24}, -{38,-21,25}, -{38,-21,26}, -{38,-21,27}, -{38,-21,28}, -{38,-21,29}, -{38,-21,30}, -{38,-21,31}, -{38,-21,32}, -{38,-21,33}, -{38,-21,34}, -{38,-21,35}, -{38,-21,36}, -{38,-21,37}, -{38,-21,38}, -{38,-21,39}, -{38,-21,40}, -{38,-21,41}, -{38,-21,42}, -{38,-21,43}, -{38,-21,44}, -{38,-20,-13}, -{38,-20,-12}, -{38,-20,-11}, -{38,-20,-10}, -{38,-20,-9}, -{38,-20,-8}, -{38,-20,-7}, -{38,-20,-6}, -{38,-20,-5}, -{38,-20,-4}, -{38,-20,-3}, -{38,-20,-2}, -{38,-20,-1}, -{38,-20,0}, -{38,-20,1}, -{38,-20,2}, -{38,-20,3}, -{38,-20,4}, -{38,-20,5}, -{38,-20,6}, -{38,-20,7}, -{38,-20,8}, -{38,-20,9}, -{38,-20,10}, -{38,-20,11}, -{38,-20,12}, -{38,-20,13}, -{38,-20,14}, -{38,-20,15}, -{38,-20,16}, -{38,-20,17}, -{38,-20,18}, -{38,-20,19}, -{38,-20,20}, -{38,-20,21}, -{38,-20,22}, -{38,-20,23}, -{38,-20,24}, -{38,-20,25}, -{38,-20,26}, -{38,-20,27}, -{38,-20,28}, -{38,-20,29}, -{38,-20,30}, -{38,-20,31}, -{38,-20,32}, -{38,-20,33}, -{38,-20,34}, -{38,-20,35}, -{38,-20,36}, -{38,-20,37}, -{38,-20,38}, -{38,-20,39}, -{38,-20,40}, -{38,-20,41}, -{38,-20,42}, -{38,-20,43}, -{38,-20,44}, -{38,-19,-15}, -{38,-19,-14}, -{38,-19,-13}, -{38,-19,-12}, -{38,-19,-11}, -{38,-19,-10}, -{38,-19,-9}, -{38,-19,-8}, -{38,-19,-7}, -{38,-19,-6}, -{38,-19,-5}, -{38,-19,-4}, -{38,-19,-3}, -{38,-19,-2}, -{38,-19,-1}, -{38,-19,0}, -{38,-19,1}, -{38,-19,2}, -{38,-19,3}, -{38,-19,4}, -{38,-19,5}, -{38,-19,6}, -{38,-19,7}, -{38,-19,8}, -{38,-19,9}, -{38,-19,10}, -{38,-19,11}, -{38,-19,12}, -{38,-19,13}, -{38,-19,14}, -{38,-19,15}, -{38,-19,16}, -{38,-19,17}, -{38,-19,18}, -{38,-19,19}, -{38,-19,20}, -{38,-19,21}, -{38,-19,22}, -{38,-19,23}, -{38,-19,24}, -{38,-19,25}, -{38,-19,26}, -{38,-19,27}, -{38,-19,28}, -{38,-19,29}, -{38,-19,30}, -{38,-19,31}, -{38,-19,32}, -{38,-19,33}, -{38,-19,34}, -{38,-19,35}, -{38,-19,36}, -{38,-19,37}, -{38,-19,38}, -{38,-19,39}, -{38,-19,40}, -{38,-19,41}, -{38,-19,42}, -{38,-19,43}, -{38,-19,44}, -{38,-18,-16}, -{38,-18,-15}, -{38,-18,-14}, -{38,-18,-13}, -{38,-18,-12}, -{38,-18,-11}, -{38,-18,-10}, -{38,-18,-9}, -{38,-18,-8}, -{38,-18,-7}, -{38,-18,-6}, -{38,-18,-5}, -{38,-18,-4}, -{38,-18,-3}, -{38,-18,-2}, -{38,-18,-1}, -{38,-18,0}, -{38,-18,1}, -{38,-18,2}, -{38,-18,3}, -{38,-18,4}, -{38,-18,5}, -{38,-18,6}, -{38,-18,7}, -{38,-18,8}, -{38,-18,9}, -{38,-18,10}, -{38,-18,11}, -{38,-18,12}, -{38,-18,13}, -{38,-18,14}, -{38,-18,15}, -{38,-18,16}, -{38,-18,17}, -{38,-18,18}, -{38,-18,19}, -{38,-18,20}, -{38,-18,21}, -{38,-18,22}, -{38,-18,23}, -{38,-18,24}, -{38,-18,25}, -{38,-18,26}, -{38,-18,27}, -{38,-18,28}, -{38,-18,29}, -{38,-18,30}, -{38,-18,31}, -{38,-18,32}, -{38,-18,33}, -{38,-18,34}, -{38,-18,35}, -{38,-18,36}, -{38,-18,37}, -{38,-18,38}, -{38,-18,39}, -{38,-18,40}, -{38,-18,41}, -{38,-18,42}, -{38,-18,43}, -{38,-18,44}, -{38,-17,-17}, -{38,-17,-16}, -{38,-17,-15}, -{38,-17,-14}, -{38,-17,-13}, -{38,-17,-12}, -{38,-17,-11}, -{38,-17,-10}, -{38,-17,-9}, -{38,-17,-8}, -{38,-17,-7}, -{38,-17,-6}, -{38,-17,-5}, -{38,-17,-4}, -{38,-17,-3}, -{38,-17,-2}, -{38,-17,-1}, -{38,-17,0}, -{38,-17,1}, -{38,-17,2}, -{38,-17,3}, -{38,-17,4}, -{38,-17,5}, -{38,-17,6}, -{38,-17,7}, -{38,-17,8}, -{38,-17,9}, -{38,-17,10}, -{38,-17,11}, -{38,-17,12}, -{38,-17,13}, -{38,-17,14}, -{38,-17,15}, -{38,-17,16}, -{38,-17,17}, -{38,-17,18}, -{38,-17,19}, -{38,-17,20}, -{38,-17,21}, -{38,-17,22}, -{38,-17,23}, -{38,-17,24}, -{38,-17,25}, -{38,-17,26}, -{38,-17,27}, -{38,-17,28}, -{38,-17,29}, -{38,-17,30}, -{38,-17,31}, -{38,-17,32}, -{38,-17,33}, -{38,-17,34}, -{38,-17,35}, -{38,-17,36}, -{38,-17,37}, -{38,-17,38}, -{38,-17,39}, -{38,-17,40}, -{38,-17,41}, -{38,-17,42}, -{38,-17,43}, -{38,-17,44}, -{38,-16,-19}, -{38,-16,-18}, -{38,-16,-17}, -{38,-16,-16}, -{38,-16,-15}, -{38,-16,-14}, -{38,-16,-13}, -{38,-16,-12}, -{38,-16,-11}, -{38,-16,-10}, -{38,-16,-9}, -{38,-16,-8}, -{38,-16,-7}, -{38,-16,-6}, -{38,-16,-5}, -{38,-16,-4}, -{38,-16,-3}, -{38,-16,-2}, -{38,-16,-1}, -{38,-16,0}, -{38,-16,1}, -{38,-16,2}, -{38,-16,3}, -{38,-16,4}, -{38,-16,5}, -{38,-16,6}, -{38,-16,7}, -{38,-16,8}, -{38,-16,9}, -{38,-16,10}, -{38,-16,11}, -{38,-16,12}, -{38,-16,13}, -{38,-16,14}, -{38,-16,15}, -{38,-16,16}, -{38,-16,17}, -{38,-16,18}, -{38,-16,19}, -{38,-16,20}, -{38,-16,21}, -{38,-16,22}, -{38,-16,23}, -{38,-16,24}, -{38,-16,25}, -{38,-16,26}, -{38,-16,27}, -{38,-16,28}, -{38,-16,29}, -{38,-16,30}, -{38,-16,31}, -{38,-16,32}, -{38,-16,33}, -{38,-16,34}, -{38,-16,35}, -{38,-16,36}, -{38,-16,37}, -{38,-16,38}, -{38,-16,39}, -{38,-16,40}, -{38,-16,41}, -{38,-16,42}, -{38,-16,43}, -{38,-16,44}, -{38,-15,-20}, -{38,-15,-19}, -{38,-15,-18}, -{38,-15,-17}, -{38,-15,-16}, -{38,-15,-15}, -{38,-15,-14}, -{38,-15,-13}, -{38,-15,-12}, -{38,-15,-11}, -{38,-15,-10}, -{38,-15,-9}, -{38,-15,-8}, -{38,-15,-7}, -{38,-15,-6}, -{38,-15,-5}, -{38,-15,-4}, -{38,-15,-3}, -{38,-15,-2}, -{38,-15,-1}, -{38,-15,0}, -{38,-15,1}, -{38,-15,2}, -{38,-15,3}, -{38,-15,4}, -{38,-15,5}, -{38,-15,6}, -{38,-15,7}, -{38,-15,8}, -{38,-15,9}, -{38,-15,10}, -{38,-15,11}, -{38,-15,12}, -{38,-15,13}, -{38,-15,14}, -{38,-15,15}, -{38,-15,16}, -{38,-15,17}, -{38,-15,18}, -{38,-15,19}, -{38,-15,20}, -{38,-15,21}, -{38,-15,22}, -{38,-15,23}, -{38,-15,24}, -{38,-15,25}, -{38,-15,26}, -{38,-15,27}, -{38,-15,28}, -{38,-15,29}, -{38,-15,30}, -{38,-15,31}, -{38,-15,32}, -{38,-15,33}, -{38,-15,34}, -{38,-15,35}, -{38,-15,36}, -{38,-15,37}, -{38,-15,38}, -{38,-15,39}, -{38,-15,40}, -{38,-15,41}, -{38,-15,42}, -{38,-15,43}, -{38,-15,44}, -{38,-14,-22}, -{38,-14,-21}, -{38,-14,-20}, -{38,-14,-19}, -{38,-14,-18}, -{38,-14,-17}, -{38,-14,-16}, -{38,-14,-15}, -{38,-14,-14}, -{38,-14,-13}, -{38,-14,-12}, -{38,-14,-11}, -{38,-14,-10}, -{38,-14,-9}, -{38,-14,-8}, -{38,-14,-7}, -{38,-14,-6}, -{38,-14,-5}, -{38,-14,-4}, -{38,-14,-3}, -{38,-14,-2}, -{38,-14,-1}, -{38,-14,0}, -{38,-14,1}, -{38,-14,2}, -{38,-14,3}, -{38,-14,4}, -{38,-14,5}, -{38,-14,6}, -{38,-14,7}, -{38,-14,8}, -{38,-14,9}, -{38,-14,10}, -{38,-14,11}, -{38,-14,12}, -{38,-14,13}, -{38,-14,14}, -{38,-14,15}, -{38,-14,16}, -{38,-14,17}, -{38,-14,18}, -{38,-14,19}, -{38,-14,20}, -{38,-14,21}, -{38,-14,22}, -{38,-14,23}, -{38,-14,24}, -{38,-14,25}, -{38,-14,26}, -{38,-14,27}, -{38,-14,28}, -{38,-14,29}, -{38,-14,30}, -{38,-14,31}, -{38,-14,32}, -{38,-14,33}, -{38,-14,34}, -{38,-14,35}, -{38,-14,36}, -{38,-14,37}, -{38,-14,38}, -{38,-14,39}, -{38,-14,40}, -{38,-14,41}, -{38,-14,42}, -{38,-14,43}, -{38,-14,44}, -{38,-14,45}, -{38,-13,-23}, -{38,-13,-22}, -{38,-13,-21}, -{38,-13,-20}, -{38,-13,-19}, -{38,-13,-18}, -{38,-13,-17}, -{38,-13,-16}, -{38,-13,-15}, -{38,-13,-14}, -{38,-13,-13}, -{38,-13,-12}, -{38,-13,-11}, -{38,-13,-10}, -{38,-13,-9}, -{38,-13,-8}, -{38,-13,-7}, -{38,-13,-6}, -{38,-13,-5}, -{38,-13,-4}, -{38,-13,-3}, -{38,-13,-2}, -{38,-13,-1}, -{38,-13,0}, -{38,-13,1}, -{38,-13,2}, -{38,-13,3}, -{38,-13,4}, -{38,-13,5}, -{38,-13,6}, -{38,-13,7}, -{38,-13,8}, -{38,-13,9}, -{38,-13,10}, -{38,-13,11}, -{38,-13,12}, -{38,-13,13}, -{38,-13,14}, -{38,-13,15}, -{38,-13,16}, -{38,-13,17}, -{38,-13,18}, -{38,-13,19}, -{38,-13,20}, -{38,-13,21}, -{38,-13,22}, -{38,-13,23}, -{38,-13,24}, -{38,-13,25}, -{38,-13,26}, -{38,-13,27}, -{38,-13,28}, -{38,-13,29}, -{38,-13,30}, -{38,-13,31}, -{38,-13,32}, -{38,-13,33}, -{38,-13,34}, -{38,-13,35}, -{38,-13,36}, -{38,-13,37}, -{38,-13,38}, -{38,-13,39}, -{38,-13,40}, -{38,-13,41}, -{38,-13,42}, -{38,-13,43}, -{38,-13,44}, -{38,-13,45}, -{38,-12,-24}, -{38,-12,-23}, -{38,-12,-22}, -{38,-12,-21}, -{38,-12,-20}, -{38,-12,-19}, -{38,-12,-18}, -{38,-12,-17}, -{38,-12,-16}, -{38,-12,-15}, -{38,-12,-14}, -{38,-12,-13}, -{38,-12,-12}, -{38,-12,-11}, -{38,-12,-10}, -{38,-12,-9}, -{38,-12,-8}, -{38,-12,-7}, -{38,-12,-6}, -{38,-12,-5}, -{38,-12,-4}, -{38,-12,-3}, -{38,-12,-2}, -{38,-12,-1}, -{38,-12,0}, -{38,-12,1}, -{38,-12,2}, -{38,-12,3}, -{38,-12,4}, -{38,-12,5}, -{38,-12,6}, -{38,-12,7}, -{38,-12,8}, -{38,-12,9}, -{38,-12,10}, -{38,-12,11}, -{38,-12,12}, -{38,-12,13}, -{38,-12,14}, -{38,-12,15}, -{38,-12,16}, -{38,-12,17}, -{38,-12,18}, -{38,-12,19}, -{38,-12,20}, -{38,-12,21}, -{38,-12,22}, -{38,-12,23}, -{38,-12,24}, -{38,-12,25}, -{38,-12,26}, -{38,-12,27}, -{38,-12,28}, -{38,-12,29}, -{38,-12,30}, -{38,-12,31}, -{38,-12,32}, -{38,-12,33}, -{38,-12,34}, -{38,-12,35}, -{38,-12,36}, -{38,-12,37}, -{38,-12,38}, -{38,-12,39}, -{38,-12,40}, -{38,-12,41}, -{38,-12,42}, -{38,-12,43}, -{38,-12,44}, -{38,-12,45}, -{38,-11,-25}, -{38,-11,-24}, -{38,-11,-23}, -{38,-11,-22}, -{38,-11,-21}, -{38,-11,-20}, -{38,-11,-19}, -{38,-11,-18}, -{38,-11,-17}, -{38,-11,-16}, -{38,-11,-15}, -{38,-11,-14}, -{38,-11,-13}, -{38,-11,-12}, -{38,-11,-11}, -{38,-11,-10}, -{38,-11,-9}, -{38,-11,-8}, -{38,-11,-7}, -{38,-11,-6}, -{38,-11,-5}, -{38,-11,-4}, -{38,-11,-3}, -{38,-11,-2}, -{38,-11,-1}, -{38,-11,0}, -{38,-11,1}, -{38,-11,2}, -{38,-11,3}, -{38,-11,4}, -{38,-11,5}, -{38,-11,6}, -{38,-11,7}, -{38,-11,8}, -{38,-11,9}, -{38,-11,10}, -{38,-11,11}, -{38,-11,12}, -{38,-11,13}, -{38,-11,14}, -{38,-11,15}, -{38,-11,16}, -{38,-11,17}, -{38,-11,18}, -{38,-11,19}, -{38,-11,20}, -{38,-11,21}, -{38,-11,22}, -{38,-11,23}, -{38,-11,24}, -{38,-11,25}, -{38,-11,26}, -{38,-11,27}, -{38,-11,28}, -{38,-11,29}, -{38,-11,30}, -{38,-11,31}, -{38,-11,32}, -{38,-11,33}, -{38,-11,34}, -{38,-11,35}, -{38,-11,36}, -{38,-11,37}, -{38,-11,38}, -{38,-11,39}, -{38,-11,40}, -{38,-11,41}, -{38,-11,42}, -{38,-11,43}, -{38,-11,44}, -{38,-11,45}, -{38,-10,-27}, -{38,-10,-26}, -{38,-10,-25}, -{38,-10,-24}, -{38,-10,-23}, -{38,-10,-22}, -{38,-10,-21}, -{38,-10,-20}, -{38,-10,-19}, -{38,-10,-18}, -{38,-10,-17}, -{38,-10,-16}, -{38,-10,-15}, -{38,-10,-14}, -{38,-10,-13}, -{38,-10,-12}, -{38,-10,-11}, -{38,-10,-10}, -{38,-10,-9}, -{38,-10,-8}, -{38,-10,-7}, -{38,-10,-6}, -{38,-10,-5}, -{38,-10,-4}, -{38,-10,-3}, -{38,-10,-2}, -{38,-10,-1}, -{38,-10,0}, -{38,-10,1}, -{38,-10,2}, -{38,-10,3}, -{38,-10,4}, -{38,-10,5}, -{38,-10,6}, -{38,-10,7}, -{38,-10,8}, -{38,-10,9}, -{38,-10,10}, -{38,-10,11}, -{38,-10,12}, -{38,-10,13}, -{38,-10,14}, -{38,-10,15}, -{38,-10,16}, -{38,-10,17}, -{38,-10,18}, -{38,-10,19}, -{38,-10,20}, -{38,-10,21}, -{38,-10,22}, -{38,-10,23}, -{38,-10,24}, -{38,-10,25}, -{38,-10,26}, -{38,-10,27}, -{38,-10,28}, -{38,-10,29}, -{38,-10,30}, -{38,-10,31}, -{38,-10,32}, -{38,-10,33}, -{38,-10,34}, -{38,-10,35}, -{38,-10,36}, -{38,-10,37}, -{38,-10,38}, -{38,-10,39}, -{38,-10,40}, -{38,-10,41}, -{38,-10,42}, -{38,-10,43}, -{38,-10,44}, -{38,-10,45}, -{38,-9,-28}, -{38,-9,-27}, -{38,-9,-26}, -{38,-9,-25}, -{38,-9,-24}, -{38,-9,-23}, -{38,-9,-22}, -{38,-9,-21}, -{38,-9,-20}, -{38,-9,-19}, -{38,-9,-18}, -{38,-9,-17}, -{38,-9,-16}, -{38,-9,-15}, -{38,-9,-14}, -{38,-9,-13}, -{38,-9,-12}, -{38,-9,-11}, -{38,-9,-10}, -{38,-9,-9}, -{38,-9,-8}, -{38,-9,-7}, -{38,-9,-6}, -{38,-9,-5}, -{38,-9,-4}, -{38,-9,-3}, -{38,-9,-2}, -{38,-9,-1}, -{38,-9,0}, -{38,-9,1}, -{38,-9,2}, -{38,-9,3}, -{38,-9,4}, -{38,-9,5}, -{38,-9,6}, -{38,-9,7}, -{38,-9,8}, -{38,-9,9}, -{38,-9,10}, -{38,-9,11}, -{38,-9,12}, -{38,-9,13}, -{38,-9,14}, -{38,-9,15}, -{38,-9,16}, -{38,-9,17}, -{38,-9,18}, -{38,-9,19}, -{38,-9,20}, -{38,-9,21}, -{38,-9,22}, -{38,-9,23}, -{38,-9,24}, -{38,-9,25}, -{38,-9,26}, -{38,-9,27}, -{38,-9,28}, -{38,-9,29}, -{38,-9,30}, -{38,-9,31}, -{38,-9,32}, -{38,-9,33}, -{38,-9,34}, -{38,-9,35}, -{38,-9,36}, -{38,-9,37}, -{38,-9,38}, -{38,-9,39}, -{38,-9,40}, -{38,-9,41}, -{38,-9,42}, -{38,-9,43}, -{38,-9,44}, -{38,-9,45}, -{38,-8,-29}, -{38,-8,-28}, -{38,-8,-27}, -{38,-8,-26}, -{38,-8,-25}, -{38,-8,-24}, -{38,-8,-23}, -{38,-8,-22}, -{38,-8,-21}, -{38,-8,-20}, -{38,-8,-19}, -{38,-8,-18}, -{38,-8,-17}, -{38,-8,-16}, -{38,-8,-15}, -{38,-8,-14}, -{38,-8,-13}, -{38,-8,-12}, -{38,-8,-11}, -{38,-8,-10}, -{38,-8,-9}, -{38,-8,-8}, -{38,-8,-7}, -{38,-8,-6}, -{38,-8,-5}, -{38,-8,-4}, -{38,-8,-3}, -{38,-8,-2}, -{38,-8,-1}, -{38,-8,0}, -{38,-8,1}, -{38,-8,2}, -{38,-8,3}, -{38,-8,4}, -{38,-8,5}, -{38,-8,6}, -{38,-8,7}, -{38,-8,8}, -{38,-8,9}, -{38,-8,10}, -{38,-8,11}, -{38,-8,12}, -{38,-8,13}, -{38,-8,14}, -{38,-8,15}, -{38,-8,16}, -{38,-8,17}, -{38,-8,18}, -{38,-8,19}, -{38,-8,20}, -{38,-8,21}, -{38,-8,22}, -{38,-8,23}, -{38,-8,24}, -{38,-8,25}, -{38,-8,26}, -{38,-8,27}, -{38,-8,28}, -{38,-8,29}, -{38,-8,30}, -{38,-8,31}, -{38,-8,32}, -{38,-8,33}, -{38,-8,34}, -{38,-8,35}, -{38,-8,36}, -{38,-8,37}, -{38,-8,38}, -{38,-8,39}, -{38,-8,40}, -{38,-8,41}, -{38,-8,42}, -{38,-8,43}, -{38,-8,44}, -{38,-8,45}, -{38,-7,-30}, -{38,-7,-29}, -{38,-7,-28}, -{38,-7,-27}, -{38,-7,-26}, -{38,-7,-25}, -{38,-7,-24}, -{38,-7,-23}, -{38,-7,-22}, -{38,-7,-21}, -{38,-7,-20}, -{38,-7,-19}, -{38,-7,-18}, -{38,-7,-17}, -{38,-7,-16}, -{38,-7,-15}, -{38,-7,-14}, -{38,-7,-13}, -{38,-7,-12}, -{38,-7,-11}, -{38,-7,-10}, -{38,-7,-9}, -{38,-7,-8}, -{38,-7,-7}, -{38,-7,-6}, -{38,-7,-5}, -{38,-7,-4}, -{38,-7,-3}, -{38,-7,-2}, -{38,-7,-1}, -{38,-7,0}, -{38,-7,1}, -{38,-7,2}, -{38,-7,3}, -{38,-7,4}, -{38,-7,5}, -{38,-7,6}, -{38,-7,7}, -{38,-7,8}, -{38,-7,9}, -{38,-7,10}, -{38,-7,11}, -{38,-7,12}, -{38,-7,13}, -{38,-7,14}, -{38,-7,15}, -{38,-7,16}, -{38,-7,17}, -{38,-7,18}, -{38,-7,19}, -{38,-7,20}, -{38,-7,21}, -{38,-7,22}, -{38,-7,23}, -{38,-7,24}, -{38,-7,25}, -{38,-7,26}, -{38,-7,27}, -{38,-7,28}, -{38,-7,29}, -{38,-7,30}, -{38,-7,31}, -{38,-7,32}, -{38,-7,33}, -{38,-7,34}, -{38,-7,35}, -{38,-7,36}, -{38,-7,37}, -{38,-7,38}, -{38,-7,39}, -{38,-7,40}, -{38,-7,41}, -{38,-7,42}, -{38,-7,43}, -{38,-7,44}, -{38,-7,45}, -{38,-6,-32}, -{38,-6,-31}, -{38,-6,-30}, -{38,-6,-29}, -{38,-6,-28}, -{38,-6,-27}, -{38,-6,-26}, -{38,-6,-25}, -{38,-6,-24}, -{38,-6,-23}, -{38,-6,-22}, -{38,-6,-21}, -{38,-6,-20}, -{38,-6,-19}, -{38,-6,-18}, -{38,-6,-17}, -{38,-6,-16}, -{38,-6,-15}, -{38,-6,-14}, -{38,-6,-13}, -{38,-6,-12}, -{38,-6,-11}, -{38,-6,-10}, -{38,-6,-9}, -{38,-6,-8}, -{38,-6,-7}, -{38,-6,-6}, -{38,-6,-5}, -{38,-6,-4}, -{38,-6,-3}, -{38,-6,-2}, -{38,-6,-1}, -{38,-6,0}, -{38,-6,1}, -{38,-6,2}, -{38,-6,3}, -{38,-6,4}, -{38,-6,5}, -{38,-6,6}, -{38,-6,7}, -{38,-6,8}, -{38,-6,9}, -{38,-6,10}, -{38,-6,11}, -{38,-6,12}, -{38,-6,13}, -{38,-6,14}, -{38,-6,15}, -{38,-6,16}, -{38,-6,17}, -{38,-6,18}, -{38,-6,19}, -{38,-6,20}, -{38,-6,21}, -{38,-6,22}, -{38,-6,23}, -{38,-6,24}, -{38,-6,25}, -{38,-6,26}, -{38,-6,27}, -{38,-6,28}, -{38,-6,29}, -{38,-6,30}, -{38,-6,31}, -{38,-6,32}, -{38,-6,33}, -{38,-6,34}, -{38,-6,35}, -{38,-6,36}, -{38,-6,37}, -{38,-6,38}, -{38,-6,39}, -{38,-6,40}, -{38,-6,41}, -{38,-6,42}, -{38,-6,43}, -{38,-6,44}, -{38,-6,45}, -{38,-5,-33}, -{38,-5,-32}, -{38,-5,-31}, -{38,-5,-30}, -{38,-5,-29}, -{38,-5,-28}, -{38,-5,-27}, -{38,-5,-26}, -{38,-5,-25}, -{38,-5,-24}, -{38,-5,-23}, -{38,-5,-22}, -{38,-5,-21}, -{38,-5,-20}, -{38,-5,-19}, -{38,-5,-18}, -{38,-5,-17}, -{38,-5,-16}, -{38,-5,-15}, -{38,-5,-14}, -{38,-5,-13}, -{38,-5,-12}, -{38,-5,-11}, -{38,-5,-10}, -{38,-5,-9}, -{38,-5,-8}, -{38,-5,-7}, -{38,-5,-6}, -{38,-5,-5}, -{38,-5,-4}, -{38,-5,-3}, -{38,-5,-2}, -{38,-5,-1}, -{38,-5,0}, -{38,-5,1}, -{38,-5,2}, -{38,-5,3}, -{38,-5,4}, -{38,-5,5}, -{38,-5,6}, -{38,-5,7}, -{38,-5,8}, -{38,-5,9}, -{38,-5,10}, -{38,-5,11}, -{38,-5,12}, -{38,-5,13}, -{38,-5,14}, -{38,-5,15}, -{38,-5,16}, -{38,-5,17}, -{38,-5,18}, -{38,-5,19}, -{38,-5,20}, -{38,-5,21}, -{38,-5,22}, -{38,-5,23}, -{38,-5,24}, -{38,-5,25}, -{38,-5,26}, -{38,-5,27}, -{38,-5,28}, -{38,-5,29}, -{38,-5,30}, -{38,-5,31}, -{38,-5,32}, -{38,-5,33}, -{38,-5,34}, -{38,-5,35}, -{38,-5,36}, -{38,-5,37}, -{38,-5,38}, -{38,-5,39}, -{38,-5,40}, -{38,-5,41}, -{38,-5,42}, -{38,-5,43}, -{38,-5,44}, -{38,-5,45}, -{38,-4,-34}, -{38,-4,-33}, -{38,-4,-32}, -{38,-4,-31}, -{38,-4,-30}, -{38,-4,-29}, -{38,-4,-28}, -{38,-4,-27}, -{38,-4,-26}, -{38,-4,-25}, -{38,-4,-24}, -{38,-4,-23}, -{38,-4,-22}, -{38,-4,-21}, -{38,-4,-20}, -{38,-4,-19}, -{38,-4,-18}, -{38,-4,-17}, -{38,-4,-16}, -{38,-4,-15}, -{38,-4,-14}, -{38,-4,-13}, -{38,-4,-12}, -{38,-4,-11}, -{38,-4,-10}, -{38,-4,-9}, -{38,-4,-8}, -{38,-4,-7}, -{38,-4,-6}, -{38,-4,-5}, -{38,-4,-4}, -{38,-4,-3}, -{38,-4,-2}, -{38,-4,-1}, -{38,-4,0}, -{38,-4,1}, -{38,-4,2}, -{38,-4,3}, -{38,-4,4}, -{38,-4,5}, -{38,-4,6}, -{38,-4,7}, -{38,-4,8}, -{38,-4,9}, -{38,-4,10}, -{38,-4,11}, -{38,-4,12}, -{38,-4,13}, -{38,-4,14}, -{38,-4,15}, -{38,-4,16}, -{38,-4,17}, -{38,-4,18}, -{38,-4,19}, -{38,-4,20}, -{38,-4,21}, -{38,-4,22}, -{38,-4,23}, -{38,-4,24}, -{38,-4,25}, -{38,-4,26}, -{38,-4,27}, -{38,-4,28}, -{38,-4,29}, -{38,-4,30}, -{38,-4,31}, -{38,-4,32}, -{38,-4,33}, -{38,-4,34}, -{38,-4,35}, -{38,-4,36}, -{38,-4,37}, -{38,-4,38}, -{38,-4,39}, -{38,-4,40}, -{38,-4,41}, -{38,-4,42}, -{38,-4,43}, -{38,-4,44}, -{38,-4,45}, -{38,-3,-35}, -{38,-3,-34}, -{38,-3,-33}, -{38,-3,-32}, -{38,-3,-31}, -{38,-3,-30}, -{38,-3,-29}, -{38,-3,-28}, -{38,-3,-27}, -{38,-3,-26}, -{38,-3,-25}, -{38,-3,-24}, -{38,-3,-23}, -{38,-3,-22}, -{38,-3,-21}, -{38,-3,-20}, -{38,-3,-19}, -{38,-3,-18}, -{38,-3,-17}, -{38,-3,-16}, -{38,-3,-15}, -{38,-3,-14}, -{38,-3,-13}, -{38,-3,-12}, -{38,-3,-11}, -{38,-3,-10}, -{38,-3,-9}, -{38,-3,-8}, -{38,-3,-7}, -{38,-3,-6}, -{38,-3,-5}, -{38,-3,-4}, -{38,-3,-3}, -{38,-3,-2}, -{38,-3,-1}, -{38,-3,0}, -{38,-3,1}, -{38,-3,2}, -{38,-3,3}, -{38,-3,4}, -{38,-3,5}, -{38,-3,6}, -{38,-3,7}, -{38,-3,8}, -{38,-3,9}, -{38,-3,10}, -{38,-3,11}, -{38,-3,12}, -{38,-3,13}, -{38,-3,14}, -{38,-3,15}, -{38,-3,16}, -{38,-3,17}, -{38,-3,18}, -{38,-3,19}, -{38,-3,20}, -{38,-3,21}, -{38,-3,22}, -{38,-3,23}, -{38,-3,24}, -{38,-3,25}, -{38,-3,26}, -{38,-3,27}, -{38,-3,28}, -{38,-3,29}, -{38,-3,30}, -{38,-3,31}, -{38,-3,32}, -{38,-3,33}, -{38,-3,34}, -{38,-3,35}, -{38,-3,36}, -{38,-3,37}, -{38,-3,38}, -{38,-3,39}, -{38,-3,40}, -{38,-3,41}, -{38,-3,42}, -{38,-3,43}, -{38,-3,44}, -{38,-3,45}, -{38,-2,-36}, -{38,-2,-35}, -{38,-2,-34}, -{38,-2,-33}, -{38,-2,-32}, -{38,-2,-31}, -{38,-2,-30}, -{38,-2,-29}, -{38,-2,-28}, -{38,-2,-27}, -{38,-2,-26}, -{38,-2,-25}, -{38,-2,-24}, -{38,-2,-23}, -{38,-2,-22}, -{38,-2,-21}, -{38,-2,-20}, -{38,-2,-19}, -{38,-2,-18}, -{38,-2,-17}, -{38,-2,-16}, -{38,-2,-15}, -{38,-2,-14}, -{38,-2,-13}, -{38,-2,-12}, -{38,-2,-11}, -{38,-2,-10}, -{38,-2,-9}, -{38,-2,-8}, -{38,-2,-7}, -{38,-2,-6}, -{38,-2,-5}, -{38,-2,-4}, -{38,-2,-3}, -{38,-2,-2}, -{38,-2,-1}, -{38,-2,0}, -{38,-2,1}, -{38,-2,2}, -{38,-2,3}, -{38,-2,4}, -{38,-2,5}, -{38,-2,6}, -{38,-2,7}, -{38,-2,8}, -{38,-2,9}, -{38,-2,10}, -{38,-2,11}, -{38,-2,12}, -{38,-2,13}, -{38,-2,14}, -{38,-2,15}, -{38,-2,16}, -{38,-2,17}, -{38,-2,18}, -{38,-2,19}, -{38,-2,20}, -{38,-2,21}, -{38,-2,22}, -{38,-2,23}, -{38,-2,24}, -{38,-2,25}, -{38,-2,26}, -{38,-2,27}, -{38,-2,28}, -{38,-2,29}, -{38,-2,30}, -{38,-2,31}, -{38,-2,32}, -{38,-2,33}, -{38,-2,34}, -{38,-2,35}, -{38,-2,36}, -{38,-2,37}, -{38,-2,38}, -{38,-2,39}, -{38,-2,40}, -{38,-2,41}, -{38,-2,42}, -{38,-2,43}, -{38,-2,44}, -{38,-2,45}, -{38,-1,-37}, -{38,-1,-36}, -{38,-1,-35}, -{38,-1,-34}, -{38,-1,-33}, -{38,-1,-32}, -{38,-1,-31}, -{38,-1,-30}, -{38,-1,-29}, -{38,-1,-28}, -{38,-1,-27}, -{38,-1,-26}, -{38,-1,-25}, -{38,-1,-24}, -{38,-1,-23}, -{38,-1,-22}, -{38,-1,-21}, -{38,-1,-20}, -{38,-1,-19}, -{38,-1,-18}, -{38,-1,-17}, -{38,-1,-16}, -{38,-1,-15}, -{38,-1,-14}, -{38,-1,-13}, -{38,-1,-12}, -{38,-1,-11}, -{38,-1,-10}, -{38,-1,-9}, -{38,-1,-8}, -{38,-1,-7}, -{38,-1,-6}, -{38,-1,-5}, -{38,-1,-4}, -{38,-1,-3}, -{38,-1,-2}, -{38,-1,-1}, -{38,-1,0}, -{38,-1,1}, -{38,-1,2}, -{38,-1,3}, -{38,-1,4}, -{38,-1,5}, -{38,-1,6}, -{38,-1,7}, -{38,-1,8}, -{38,-1,9}, -{38,-1,10}, -{38,-1,11}, -{38,-1,12}, -{38,-1,13}, -{38,-1,14}, -{38,-1,15}, -{38,-1,16}, -{38,-1,17}, -{38,-1,18}, -{38,-1,19}, -{38,-1,20}, -{38,-1,21}, -{38,-1,22}, -{38,-1,23}, -{38,-1,24}, -{38,-1,25}, -{38,-1,26}, -{38,-1,27}, -{38,-1,28}, -{38,-1,29}, -{38,-1,30}, -{38,-1,31}, -{38,-1,32}, -{38,-1,33}, -{38,-1,34}, -{38,-1,35}, -{38,-1,36}, -{38,-1,37}, -{38,-1,38}, -{38,-1,39}, -{38,-1,40}, -{38,-1,41}, -{38,-1,42}, -{38,-1,43}, -{38,-1,44}, -{38,-1,45}, -{38,0,-38}, -{38,0,-37}, -{38,0,-36}, -{38,0,-35}, -{38,0,-34}, -{38,0,-33}, -{38,0,-32}, -{38,0,-31}, -{38,0,-30}, -{38,0,-29}, -{38,0,-28}, -{38,0,-27}, -{38,0,-26}, -{38,0,-25}, -{38,0,-24}, -{38,0,-23}, -{38,0,-22}, -{38,0,-21}, -{38,0,-20}, -{38,0,-19}, -{38,0,-18}, -{38,0,-17}, -{38,0,-16}, -{38,0,-15}, -{38,0,-14}, -{38,0,-13}, -{38,0,-12}, -{38,0,-11}, -{38,0,-10}, -{38,0,-9}, -{38,0,-8}, -{38,0,-7}, -{38,0,-6}, -{38,0,-5}, -{38,0,-4}, -{38,0,-3}, -{38,0,-2}, -{38,0,-1}, -{38,0,0}, -{38,0,1}, -{38,0,2}, -{38,0,3}, -{38,0,4}, -{38,0,5}, -{38,0,6}, -{38,0,7}, -{38,0,8}, -{38,0,9}, -{38,0,10}, -{38,0,11}, -{38,0,12}, -{38,0,13}, -{38,0,14}, -{38,0,15}, -{38,0,16}, -{38,0,17}, -{38,0,18}, -{38,0,19}, -{38,0,20}, -{38,0,21}, -{38,0,22}, -{38,0,23}, -{38,0,24}, -{38,0,25}, -{38,0,26}, -{38,0,27}, -{38,0,28}, -{38,0,29}, -{38,0,30}, -{38,0,31}, -{38,0,32}, -{38,0,33}, -{38,0,34}, -{38,0,35}, -{38,0,36}, -{38,0,37}, -{38,0,38}, -{38,0,39}, -{38,0,40}, -{38,0,41}, -{38,0,42}, -{38,0,43}, -{38,0,44}, -{38,0,45}, -{38,1,-40}, -{38,1,-39}, -{38,1,-38}, -{38,1,-37}, -{38,1,-36}, -{38,1,-35}, -{38,1,-34}, -{38,1,-33}, -{38,1,-32}, -{38,1,-31}, -{38,1,-30}, -{38,1,-29}, -{38,1,-28}, -{38,1,-27}, -{38,1,-26}, -{38,1,-25}, -{38,1,-24}, -{38,1,-23}, -{38,1,-22}, -{38,1,-21}, -{38,1,-20}, -{38,1,-19}, -{38,1,-18}, -{38,1,-17}, -{38,1,-16}, -{38,1,-15}, -{38,1,-14}, -{38,1,-13}, -{38,1,-12}, -{38,1,-11}, -{38,1,-10}, -{38,1,-9}, -{38,1,-8}, -{38,1,-7}, -{38,1,-6}, -{38,1,-5}, -{38,1,-4}, -{38,1,-3}, -{38,1,-2}, -{38,1,-1}, -{38,1,0}, -{38,1,1}, -{38,1,2}, -{38,1,3}, -{38,1,4}, -{38,1,5}, -{38,1,6}, -{38,1,7}, -{38,1,8}, -{38,1,9}, -{38,1,10}, -{38,1,11}, -{38,1,12}, -{38,1,13}, -{38,1,14}, -{38,1,15}, -{38,1,16}, -{38,1,17}, -{38,1,18}, -{38,1,19}, -{38,1,20}, -{38,1,21}, -{38,1,22}, -{38,1,23}, -{38,1,24}, -{38,1,25}, -{38,1,26}, -{38,1,27}, -{38,1,28}, -{38,1,29}, -{38,1,30}, -{38,1,31}, -{38,1,32}, -{38,1,33}, -{38,1,34}, -{38,1,35}, -{38,1,36}, -{38,1,37}, -{38,1,38}, -{38,1,39}, -{38,1,40}, -{38,1,41}, -{38,1,42}, -{38,1,43}, -{38,1,44}, -{38,1,45}, -{38,1,46}, -{38,2,-41}, -{38,2,-40}, -{38,2,-39}, -{38,2,-38}, -{38,2,-37}, -{38,2,-36}, -{38,2,-35}, -{38,2,-34}, -{38,2,-33}, -{38,2,-32}, -{38,2,-31}, -{38,2,-30}, -{38,2,-29}, -{38,2,-28}, -{38,2,-27}, -{38,2,-26}, -{38,2,-25}, -{38,2,-24}, -{38,2,-23}, -{38,2,-22}, -{38,2,-21}, -{38,2,-20}, -{38,2,-19}, -{38,2,-18}, -{38,2,-17}, -{38,2,-16}, -{38,2,-15}, -{38,2,-14}, -{38,2,-13}, -{38,2,-12}, -{38,2,-11}, -{38,2,-10}, -{38,2,-9}, -{38,2,-8}, -{38,2,-7}, -{38,2,-6}, -{38,2,-5}, -{38,2,-4}, -{38,2,-3}, -{38,2,-2}, -{38,2,-1}, -{38,2,0}, -{38,2,1}, -{38,2,2}, -{38,2,3}, -{38,2,4}, -{38,2,5}, -{38,2,6}, -{38,2,7}, -{38,2,8}, -{38,2,9}, -{38,2,10}, -{38,2,11}, -{38,2,12}, -{38,2,13}, -{38,2,14}, -{38,2,15}, -{38,2,16}, -{38,2,17}, -{38,2,18}, -{38,2,19}, -{38,2,20}, -{38,2,21}, -{38,2,22}, -{38,2,23}, -{38,2,24}, -{38,2,25}, -{38,2,26}, -{38,2,27}, -{38,2,28}, -{38,2,29}, -{38,2,30}, -{38,2,31}, -{38,2,32}, -{38,2,33}, -{38,2,34}, -{38,2,35}, -{38,2,36}, -{38,2,37}, -{38,2,38}, -{38,2,39}, -{38,2,40}, -{38,2,41}, -{38,2,42}, -{38,2,43}, -{38,2,44}, -{38,2,45}, -{38,2,46}, -{38,3,-42}, -{38,3,-41}, -{38,3,-40}, -{38,3,-39}, -{38,3,-38}, -{38,3,-37}, -{38,3,-36}, -{38,3,-35}, -{38,3,-34}, -{38,3,-33}, -{38,3,-32}, -{38,3,-31}, -{38,3,-30}, -{38,3,-29}, -{38,3,-28}, -{38,3,-27}, -{38,3,-26}, -{38,3,-25}, -{38,3,-24}, -{38,3,-23}, -{38,3,-22}, -{38,3,-21}, -{38,3,-20}, -{38,3,-19}, -{38,3,-18}, -{38,3,-17}, -{38,3,-16}, -{38,3,-15}, -{38,3,-14}, -{38,3,-13}, -{38,3,-12}, -{38,3,-11}, -{38,3,-10}, -{38,3,-9}, -{38,3,-8}, -{38,3,-7}, -{38,3,-6}, -{38,3,-5}, -{38,3,-4}, -{38,3,-3}, -{38,3,-2}, -{38,3,-1}, -{38,3,0}, -{38,3,1}, -{38,3,2}, -{38,3,3}, -{38,3,4}, -{38,3,5}, -{38,3,6}, -{38,3,7}, -{38,3,8}, -{38,3,9}, -{38,3,10}, -{38,3,11}, -{38,3,12}, -{38,3,13}, -{38,3,14}, -{38,3,15}, -{38,3,16}, -{38,3,17}, -{38,3,18}, -{38,3,19}, -{38,3,20}, -{38,3,21}, -{38,3,22}, -{38,3,23}, -{38,3,24}, -{38,3,25}, -{38,3,26}, -{38,3,27}, -{38,3,28}, -{38,3,29}, -{38,3,30}, -{38,3,31}, -{38,3,32}, -{38,3,33}, -{38,3,34}, -{38,3,35}, -{38,3,36}, -{38,3,37}, -{38,3,38}, -{38,3,39}, -{38,3,40}, -{38,3,41}, -{38,3,42}, -{38,3,43}, -{38,3,44}, -{38,3,45}, -{38,3,46}, -{38,4,-43}, -{38,4,-42}, -{38,4,-41}, -{38,4,-40}, -{38,4,-39}, -{38,4,-38}, -{38,4,-37}, -{38,4,-36}, -{38,4,-35}, -{38,4,-34}, -{38,4,-33}, -{38,4,-32}, -{38,4,-31}, -{38,4,-30}, -{38,4,-29}, -{38,4,-28}, -{38,4,-27}, -{38,4,-26}, -{38,4,-25}, -{38,4,-24}, -{38,4,-23}, -{38,4,-22}, -{38,4,-21}, -{38,4,-20}, -{38,4,-19}, -{38,4,-18}, -{38,4,-17}, -{38,4,-16}, -{38,4,-15}, -{38,4,-14}, -{38,4,-13}, -{38,4,-12}, -{38,4,-11}, -{38,4,-10}, -{38,4,-9}, -{38,4,-8}, -{38,4,-7}, -{38,4,-6}, -{38,4,-5}, -{38,4,-4}, -{38,4,-3}, -{38,4,-2}, -{38,4,-1}, -{38,4,0}, -{38,4,1}, -{38,4,2}, -{38,4,3}, -{38,4,4}, -{38,4,5}, -{38,4,6}, -{38,4,7}, -{38,4,8}, -{38,4,9}, -{38,4,10}, -{38,4,11}, -{38,4,12}, -{38,4,13}, -{38,4,14}, -{38,4,15}, -{38,4,16}, -{38,4,17}, -{38,4,18}, -{38,4,19}, -{38,4,20}, -{38,4,21}, -{38,4,22}, -{38,4,23}, -{38,4,24}, -{38,4,25}, -{38,4,26}, -{38,4,27}, -{38,4,28}, -{38,4,29}, -{38,4,30}, -{38,4,31}, -{38,4,32}, -{38,4,33}, -{38,4,34}, -{38,4,35}, -{38,4,36}, -{38,4,37}, -{38,4,38}, -{38,4,39}, -{38,4,40}, -{38,4,41}, -{38,4,42}, -{38,4,43}, -{38,4,44}, -{38,4,45}, -{38,4,46}, -{38,5,-44}, -{38,5,-43}, -{38,5,-42}, -{38,5,-41}, -{38,5,-40}, -{38,5,-39}, -{38,5,-38}, -{38,5,-37}, -{38,5,-36}, -{38,5,-35}, -{38,5,-34}, -{38,5,-33}, -{38,5,-32}, -{38,5,-31}, -{38,5,-30}, -{38,5,-29}, -{38,5,-28}, -{38,5,-27}, -{38,5,-26}, -{38,5,-25}, -{38,5,-24}, -{38,5,-23}, -{38,5,-22}, -{38,5,-21}, -{38,5,-20}, -{38,5,-19}, -{38,5,-18}, -{38,5,-17}, -{38,5,-16}, -{38,5,-15}, -{38,5,-14}, -{38,5,-13}, -{38,5,-12}, -{38,5,-11}, -{38,5,-10}, -{38,5,-9}, -{38,5,-8}, -{38,5,-7}, -{38,5,-6}, -{38,5,-5}, -{38,5,-4}, -{38,5,-3}, -{38,5,-2}, -{38,5,-1}, -{38,5,0}, -{38,5,1}, -{38,5,2}, -{38,5,3}, -{38,5,4}, -{38,5,5}, -{38,5,6}, -{38,5,7}, -{38,5,8}, -{38,5,9}, -{38,5,10}, -{38,5,11}, -{38,5,12}, -{38,5,13}, -{38,5,14}, -{38,5,15}, -{38,5,16}, -{38,5,17}, -{38,5,18}, -{38,5,19}, -{38,5,20}, -{38,5,21}, -{38,5,22}, -{38,5,23}, -{38,5,24}, -{38,5,25}, -{38,5,26}, -{38,5,27}, -{38,5,28}, -{38,5,29}, -{38,5,30}, -{38,5,31}, -{38,5,32}, -{38,5,33}, -{38,5,34}, -{38,5,35}, -{38,5,36}, -{38,5,37}, -{38,5,38}, -{38,5,39}, -{38,5,40}, -{38,5,41}, -{38,5,42}, -{38,5,43}, -{38,5,44}, -{38,5,45}, -{38,5,46}, -{38,6,-45}, -{38,6,-44}, -{38,6,-43}, -{38,6,-42}, -{38,6,-41}, -{38,6,-40}, -{38,6,-39}, -{38,6,-38}, -{38,6,-37}, -{38,6,-36}, -{38,6,-35}, -{38,6,-34}, -{38,6,-33}, -{38,6,-32}, -{38,6,-31}, -{38,6,-30}, -{38,6,-29}, -{38,6,-28}, -{38,6,-27}, -{38,6,-26}, -{38,6,-25}, -{38,6,-24}, -{38,6,-23}, -{38,6,-22}, -{38,6,-21}, -{38,6,-20}, -{38,6,-19}, -{38,6,-18}, -{38,6,-17}, -{38,6,-16}, -{38,6,-15}, -{38,6,-14}, -{38,6,-13}, -{38,6,-12}, -{38,6,-11}, -{38,6,-10}, -{38,6,-9}, -{38,6,-8}, -{38,6,-7}, -{38,6,-6}, -{38,6,-5}, -{38,6,-4}, -{38,6,-3}, -{38,6,-2}, -{38,6,-1}, -{38,6,0}, -{38,6,1}, -{38,6,2}, -{38,6,3}, -{38,6,4}, -{38,6,5}, -{38,6,6}, -{38,6,7}, -{38,6,8}, -{38,6,9}, -{38,6,10}, -{38,6,11}, -{38,6,12}, -{38,6,13}, -{38,6,14}, -{38,6,15}, -{38,6,16}, -{38,6,17}, -{38,6,18}, -{38,6,19}, -{38,6,20}, -{38,6,21}, -{38,6,22}, -{38,6,23}, -{38,6,24}, -{38,6,25}, -{38,6,26}, -{38,6,27}, -{38,6,28}, -{38,6,29}, -{38,6,30}, -{38,6,31}, -{38,6,32}, -{38,6,33}, -{38,6,34}, -{38,6,35}, -{38,6,36}, -{38,6,37}, -{38,6,38}, -{38,6,39}, -{38,6,40}, -{38,6,41}, -{38,6,42}, -{38,6,43}, -{38,6,44}, -{38,6,45}, -{38,6,46}, -{38,7,-46}, -{38,7,-45}, -{38,7,-44}, -{38,7,-43}, -{38,7,-42}, -{38,7,-41}, -{38,7,-40}, -{38,7,-39}, -{38,7,-38}, -{38,7,-37}, -{38,7,-36}, -{38,7,-35}, -{38,7,-34}, -{38,7,-33}, -{38,7,-32}, -{38,7,-31}, -{38,7,-30}, -{38,7,-29}, -{38,7,-28}, -{38,7,-27}, -{38,7,-26}, -{38,7,-25}, -{38,7,-24}, -{38,7,-23}, -{38,7,-22}, -{38,7,-21}, -{38,7,-20}, -{38,7,-19}, -{38,7,-18}, -{38,7,-17}, -{38,7,-16}, -{38,7,-15}, -{38,7,-14}, -{38,7,-13}, -{38,7,-12}, -{38,7,-11}, -{38,7,-10}, -{38,7,-9}, -{38,7,-8}, -{38,7,-7}, -{38,7,-6}, -{38,7,-5}, -{38,7,-4}, -{38,7,-3}, -{38,7,-2}, -{38,7,-1}, -{38,7,0}, -{38,7,1}, -{38,7,2}, -{38,7,3}, -{38,7,4}, -{38,7,5}, -{38,7,6}, -{38,7,7}, -{38,7,8}, -{38,7,9}, -{38,7,10}, -{38,7,11}, -{38,7,12}, -{38,7,13}, -{38,7,14}, -{38,7,15}, -{38,7,16}, -{38,7,17}, -{38,7,18}, -{38,7,19}, -{38,7,20}, -{38,7,21}, -{38,7,22}, -{38,7,23}, -{38,7,24}, -{38,7,25}, -{38,7,26}, -{38,7,27}, -{38,7,28}, -{38,7,29}, -{38,7,30}, -{38,7,31}, -{38,7,32}, -{38,7,33}, -{38,7,34}, -{38,7,35}, -{38,7,36}, -{38,7,37}, -{38,7,38}, -{38,7,39}, -{38,7,40}, -{38,7,41}, -{38,7,42}, -{38,7,43}, -{38,7,44}, -{38,7,45}, -{38,7,46}, -{38,8,-47}, -{38,8,-46}, -{38,8,-45}, -{38,8,-44}, -{38,8,-43}, -{38,8,-42}, -{38,8,-41}, -{38,8,-40}, -{38,8,-39}, -{38,8,-38}, -{38,8,-37}, -{38,8,-36}, -{38,8,-35}, -{38,8,-34}, -{38,8,-33}, -{38,8,-32}, -{38,8,-31}, -{38,8,-30}, -{38,8,-29}, -{38,8,-28}, -{38,8,-27}, -{38,8,-26}, -{38,8,-25}, -{38,8,-24}, -{38,8,-23}, -{38,8,-22}, -{38,8,-21}, -{38,8,-20}, -{38,8,-19}, -{38,8,-18}, -{38,8,-17}, -{38,8,-16}, -{38,8,-15}, -{38,8,-14}, -{38,8,-13}, -{38,8,-12}, -{38,8,-11}, -{38,8,-10}, -{38,8,-9}, -{38,8,-8}, -{38,8,-7}, -{38,8,-6}, -{38,8,-5}, -{38,8,-4}, -{38,8,-3}, -{38,8,-2}, -{38,8,-1}, -{38,8,0}, -{38,8,1}, -{38,8,2}, -{38,8,3}, -{38,8,4}, -{38,8,5}, -{38,8,6}, -{38,8,7}, -{38,8,8}, -{38,8,9}, -{38,8,10}, -{38,8,11}, -{38,8,12}, -{38,8,13}, -{38,8,14}, -{38,8,15}, -{38,8,16}, -{38,8,17}, -{38,8,18}, -{38,8,19}, -{38,8,20}, -{38,8,21}, -{38,8,22}, -{38,8,23}, -{38,8,24}, -{38,8,25}, -{38,8,26}, -{38,8,27}, -{38,8,28}, -{38,8,29}, -{38,8,30}, -{38,8,31}, -{38,8,32}, -{38,8,33}, -{38,8,34}, -{38,8,35}, -{38,8,36}, -{38,8,37}, -{38,8,38}, -{38,8,39}, -{38,8,40}, -{38,8,41}, -{38,8,42}, -{38,8,43}, -{38,8,44}, -{38,8,45}, -{38,8,46}, -{38,9,-48}, -{38,9,-47}, -{38,9,-46}, -{38,9,-45}, -{38,9,-44}, -{38,9,-43}, -{38,9,-42}, -{38,9,-41}, -{38,9,-40}, -{38,9,-39}, -{38,9,-38}, -{38,9,-37}, -{38,9,-36}, -{38,9,-35}, -{38,9,-34}, -{38,9,-33}, -{38,9,-32}, -{38,9,-31}, -{38,9,-30}, -{38,9,-29}, -{38,9,-28}, -{38,9,-27}, -{38,9,-26}, -{38,9,-25}, -{38,9,-24}, -{38,9,-23}, -{38,9,-22}, -{38,9,-21}, -{38,9,-20}, -{38,9,-19}, -{38,9,-18}, -{38,9,-17}, -{38,9,-16}, -{38,9,-15}, -{38,9,-14}, -{38,9,-13}, -{38,9,-12}, -{38,9,-11}, -{38,9,-10}, -{38,9,-9}, -{38,9,-8}, -{38,9,-7}, -{38,9,-6}, -{38,9,-5}, -{38,9,-4}, -{38,9,-3}, -{38,9,-2}, -{38,9,-1}, -{38,9,0}, -{38,9,1}, -{38,9,2}, -{38,9,3}, -{38,9,4}, -{38,9,5}, -{38,9,6}, -{38,9,7}, -{38,9,8}, -{38,9,9}, -{38,9,10}, -{38,9,11}, -{38,9,12}, -{38,9,13}, -{38,9,14}, -{38,9,15}, -{38,9,16}, -{38,9,17}, -{38,9,18}, -{38,9,19}, -{38,9,20}, -{38,9,21}, -{38,9,22}, -{38,9,23}, -{38,9,24}, -{38,9,25}, -{38,9,26}, -{38,9,27}, -{38,9,28}, -{38,9,29}, -{38,9,30}, -{38,9,31}, -{38,9,32}, -{38,9,33}, -{38,9,34}, -{38,9,35}, -{38,9,36}, -{38,9,37}, -{38,9,38}, -{38,9,39}, -{38,9,40}, -{38,9,41}, -{38,9,42}, -{38,9,43}, -{38,9,44}, -{38,9,45}, -{38,9,46}, -{38,10,-49}, -{38,10,-48}, -{38,10,-47}, -{38,10,-46}, -{38,10,-45}, -{38,10,-44}, -{38,10,-43}, -{38,10,-42}, -{38,10,-41}, -{38,10,-40}, -{38,10,-39}, -{38,10,-38}, -{38,10,-37}, -{38,10,-36}, -{38,10,-35}, -{38,10,-34}, -{38,10,-33}, -{38,10,-32}, -{38,10,-31}, -{38,10,-30}, -{38,10,-29}, -{38,10,-28}, -{38,10,-27}, -{38,10,-26}, -{38,10,-25}, -{38,10,-24}, -{38,10,-23}, -{38,10,-22}, -{38,10,-21}, -{38,10,-20}, -{38,10,-19}, -{38,10,-18}, -{38,10,-17}, -{38,10,-16}, -{38,10,-15}, -{38,10,-14}, -{38,10,-13}, -{38,10,-12}, -{38,10,-11}, -{38,10,-10}, -{38,10,-9}, -{38,10,-8}, -{38,10,-7}, -{38,10,-6}, -{38,10,-5}, -{38,10,-4}, -{38,10,-3}, -{38,10,-2}, -{38,10,-1}, -{38,10,0}, -{38,10,1}, -{38,10,2}, -{38,10,3}, -{38,10,4}, -{38,10,5}, -{38,10,6}, -{38,10,7}, -{38,10,8}, -{38,10,9}, -{38,10,10}, -{38,10,11}, -{38,10,12}, -{38,10,13}, -{38,10,14}, -{38,10,15}, -{38,10,16}, -{38,10,17}, -{38,10,18}, -{38,10,19}, -{38,10,20}, -{38,10,21}, -{38,10,22}, -{38,10,23}, -{38,10,24}, -{38,10,25}, -{38,10,26}, -{38,10,27}, -{38,10,28}, -{38,10,29}, -{38,10,30}, -{38,10,31}, -{38,10,32}, -{38,10,33}, -{38,10,34}, -{38,10,35}, -{38,10,36}, -{38,10,37}, -{38,10,38}, -{38,10,39}, -{38,10,40}, -{38,10,41}, -{38,10,42}, -{38,10,43}, -{38,10,44}, -{38,10,45}, -{38,10,46}, -{38,11,-50}, -{38,11,-49}, -{38,11,-48}, -{38,11,-47}, -{38,11,-46}, -{38,11,-45}, -{38,11,-44}, -{38,11,-43}, -{38,11,-42}, -{38,11,-41}, -{38,11,-40}, -{38,11,-39}, -{38,11,-38}, -{38,11,-37}, -{38,11,-36}, -{38,11,-35}, -{38,11,-34}, -{38,11,-33}, -{38,11,-32}, -{38,11,-31}, -{38,11,-30}, -{38,11,-29}, -{38,11,-28}, -{38,11,-27}, -{38,11,-26}, -{38,11,-25}, -{38,11,-24}, -{38,11,-23}, -{38,11,-22}, -{38,11,-21}, -{38,11,-20}, -{38,11,-19}, -{38,11,-18}, -{38,11,-17}, -{38,11,-16}, -{38,11,-15}, -{38,11,-14}, -{38,11,-13}, -{38,11,-12}, -{38,11,-11}, -{38,11,-10}, -{38,11,-9}, -{38,11,-8}, -{38,11,-7}, -{38,11,-6}, -{38,11,-5}, -{38,11,-4}, -{38,11,-3}, -{38,11,-2}, -{38,11,-1}, -{38,11,0}, -{38,11,1}, -{38,11,2}, -{38,11,3}, -{38,11,4}, -{38,11,5}, -{38,11,6}, -{38,11,7}, -{38,11,8}, -{38,11,9}, -{38,11,10}, -{38,11,11}, -{38,11,12}, -{38,11,13}, -{38,11,14}, -{38,11,15}, -{38,11,16}, -{38,11,17}, -{38,11,18}, -{38,11,19}, -{38,11,20}, -{38,11,21}, -{38,11,22}, -{38,11,23}, -{38,11,24}, -{38,11,25}, -{38,11,26}, -{38,11,27}, -{38,11,28}, -{38,11,29}, -{38,11,30}, -{38,11,31}, -{38,11,32}, -{38,11,33}, -{38,11,34}, -{38,11,35}, -{38,11,36}, -{38,11,37}, -{38,11,38}, -{38,11,39}, -{38,11,40}, -{38,11,41}, -{38,11,42}, -{38,11,43}, -{38,11,44}, -{38,11,45}, -{38,11,46}, -{38,12,-51}, -{38,12,-50}, -{38,12,-49}, -{38,12,-48}, -{38,12,-47}, -{38,12,-46}, -{38,12,-45}, -{38,12,-44}, -{38,12,-43}, -{38,12,-42}, -{38,12,-41}, -{38,12,-40}, -{38,12,-39}, -{38,12,-38}, -{38,12,-37}, -{38,12,-36}, -{38,12,-35}, -{38,12,-34}, -{38,12,-33}, -{38,12,-32}, -{38,12,-31}, -{38,12,-30}, -{38,12,-29}, -{38,12,-28}, -{38,12,-27}, -{38,12,-26}, -{38,12,-25}, -{38,12,-24}, -{38,12,-23}, -{38,12,-22}, -{38,12,-21}, -{38,12,-20}, -{38,12,-19}, -{38,12,-18}, -{38,12,-17}, -{38,12,-16}, -{38,12,-15}, -{38,12,-14}, -{38,12,-13}, -{38,12,-12}, -{38,12,-11}, -{38,12,-10}, -{38,12,-9}, -{38,12,-8}, -{38,12,-7}, -{38,12,-6}, -{38,12,-5}, -{38,12,-4}, -{38,12,-3}, -{38,12,-2}, -{38,12,-1}, -{38,12,0}, -{38,12,1}, -{38,12,2}, -{38,12,3}, -{38,12,4}, -{38,12,5}, -{38,12,6}, -{38,12,7}, -{38,12,8}, -{38,12,9}, -{38,12,10}, -{38,12,11}, -{38,12,12}, -{38,12,13}, -{38,12,14}, -{38,12,15}, -{38,12,16}, -{38,12,17}, -{38,12,18}, -{38,12,19}, -{38,12,20}, -{38,12,21}, -{38,12,22}, -{38,12,23}, -{38,12,24}, -{38,12,25}, -{38,12,26}, -{38,12,27}, -{38,12,28}, -{38,12,29}, -{38,12,30}, -{38,12,31}, -{38,12,32}, -{38,12,33}, -{38,12,34}, -{38,12,35}, -{38,12,36}, -{38,12,37}, -{38,12,38}, -{38,12,39}, -{38,12,40}, -{38,12,41}, -{38,12,42}, -{38,12,43}, -{38,12,44}, -{38,12,45}, -{38,12,46}, -{38,13,-52}, -{38,13,-51}, -{38,13,-50}, -{38,13,-49}, -{38,13,-48}, -{38,13,-47}, -{38,13,-46}, -{38,13,-45}, -{38,13,-44}, -{38,13,-43}, -{38,13,-42}, -{38,13,-41}, -{38,13,-40}, -{38,13,-39}, -{38,13,-38}, -{38,13,-37}, -{38,13,-36}, -{38,13,-35}, -{38,13,-34}, -{38,13,-33}, -{38,13,-32}, -{38,13,-31}, -{38,13,-30}, -{38,13,-29}, -{38,13,-28}, -{38,13,-27}, -{38,13,-26}, -{38,13,-25}, -{38,13,-24}, -{38,13,-23}, -{38,13,-22}, -{38,13,-21}, -{38,13,-20}, -{38,13,-19}, -{38,13,-18}, -{38,13,-17}, -{38,13,-16}, -{38,13,-15}, -{38,13,-14}, -{38,13,-13}, -{38,13,-12}, -{38,13,-11}, -{38,13,-10}, -{38,13,-9}, -{38,13,-8}, -{38,13,-7}, -{38,13,-6}, -{38,13,-5}, -{38,13,-4}, -{38,13,-3}, -{38,13,-2}, -{38,13,-1}, -{38,13,0}, -{38,13,1}, -{38,13,2}, -{38,13,3}, -{38,13,4}, -{38,13,5}, -{38,13,6}, -{38,13,7}, -{38,13,8}, -{38,13,9}, -{38,13,10}, -{38,13,11}, -{38,13,12}, -{38,13,13}, -{38,13,14}, -{38,13,15}, -{38,13,16}, -{38,13,17}, -{38,13,18}, -{38,13,19}, -{38,13,20}, -{38,13,21}, -{38,13,22}, -{38,13,23}, -{38,13,24}, -{38,13,25}, -{38,13,26}, -{38,13,27}, -{38,13,28}, -{38,13,29}, -{38,13,30}, -{38,13,31}, -{38,13,32}, -{38,13,33}, -{38,13,34}, -{38,13,35}, -{38,13,36}, -{38,13,37}, -{38,13,38}, -{38,13,39}, -{38,13,40}, -{38,13,41}, -{38,13,42}, -{38,13,43}, -{38,13,44}, -{38,13,45}, -{38,13,46}, -{38,14,-53}, -{38,14,-52}, -{38,14,-51}, -{38,14,-50}, -{38,14,-49}, -{38,14,-48}, -{38,14,-47}, -{38,14,-46}, -{38,14,-45}, -{38,14,-44}, -{38,14,-43}, -{38,14,-42}, -{38,14,-41}, -{38,14,-40}, -{38,14,-39}, -{38,14,-38}, -{38,14,-37}, -{38,14,-36}, -{38,14,-35}, -{38,14,-34}, -{38,14,-33}, -{38,14,-32}, -{38,14,-31}, -{38,14,-30}, -{38,14,-29}, -{38,14,-28}, -{38,14,-27}, -{38,14,-26}, -{38,14,-25}, -{38,14,-24}, -{38,14,-23}, -{38,14,-22}, -{38,14,-21}, -{38,14,-20}, -{38,14,-19}, -{38,14,-18}, -{38,14,-17}, -{38,14,-16}, -{38,14,-15}, -{38,14,-14}, -{38,14,-13}, -{38,14,-12}, -{38,14,-11}, -{38,14,-10}, -{38,14,-9}, -{38,14,-8}, -{38,14,-7}, -{38,14,-6}, -{38,14,-5}, -{38,14,-4}, -{38,14,-3}, -{38,14,-2}, -{38,14,-1}, -{38,14,0}, -{38,14,1}, -{38,14,2}, -{38,14,3}, -{38,14,4}, -{38,14,5}, -{38,14,6}, -{38,14,7}, -{38,14,8}, -{38,14,9}, -{38,14,10}, -{38,14,11}, -{38,14,12}, -{38,14,13}, -{38,14,14}, -{38,14,15}, -{38,14,16}, -{38,14,17}, -{38,14,18}, -{38,14,19}, -{38,14,20}, -{38,14,21}, -{38,14,22}, -{38,14,23}, -{38,14,24}, -{38,14,25}, -{38,14,26}, -{38,14,27}, -{38,14,28}, -{38,14,29}, -{38,14,30}, -{38,14,31}, -{38,14,32}, -{38,14,33}, -{38,14,34}, -{38,14,35}, -{38,14,36}, -{38,14,37}, -{38,14,38}, -{38,14,39}, -{38,14,40}, -{38,14,41}, -{38,14,42}, -{38,14,43}, -{38,14,44}, -{38,14,45}, -{38,14,46}, -{38,14,47}, -{38,15,-55}, -{38,15,-54}, -{38,15,-53}, -{38,15,-52}, -{38,15,-51}, -{38,15,-50}, -{38,15,-49}, -{38,15,-48}, -{38,15,-47}, -{38,15,-46}, -{38,15,-45}, -{38,15,-44}, -{38,15,-43}, -{38,15,-42}, -{38,15,-41}, -{38,15,-40}, -{38,15,-39}, -{38,15,-38}, -{38,15,-37}, -{38,15,-36}, -{38,15,-35}, -{38,15,-34}, -{38,15,-33}, -{38,15,-32}, -{38,15,-31}, -{38,15,-30}, -{38,15,-29}, -{38,15,-28}, -{38,15,-27}, -{38,15,-26}, -{38,15,-25}, -{38,15,-24}, -{38,15,-23}, -{38,15,-22}, -{38,15,-21}, -{38,15,-20}, -{38,15,-19}, -{38,15,-18}, -{38,15,-17}, -{38,15,-16}, -{38,15,-15}, -{38,15,-14}, -{38,15,-13}, -{38,15,-12}, -{38,15,-11}, -{38,15,-10}, -{38,15,-9}, -{38,15,-8}, -{38,15,-7}, -{38,15,-6}, -{38,15,-5}, -{38,15,-4}, -{38,15,-3}, -{38,15,-2}, -{38,15,-1}, -{38,15,0}, -{38,15,1}, -{38,15,2}, -{38,15,3}, -{38,15,4}, -{38,15,5}, -{38,15,6}, -{38,15,7}, -{38,15,8}, -{38,15,9}, -{38,15,10}, -{38,15,11}, -{38,15,12}, -{38,15,13}, -{38,15,14}, -{38,15,15}, -{38,15,16}, -{38,15,17}, -{38,15,18}, -{38,15,19}, -{38,15,20}, -{38,15,21}, -{38,15,22}, -{38,15,23}, -{38,15,24}, -{38,15,25}, -{38,15,26}, -{38,15,27}, -{38,15,28}, -{38,15,29}, -{38,15,30}, -{38,15,31}, -{38,15,32}, -{38,15,33}, -{38,15,34}, -{38,15,35}, -{38,15,36}, -{38,15,37}, -{38,15,38}, -{38,15,39}, -{38,15,40}, -{38,15,41}, -{38,15,42}, -{38,15,43}, -{38,15,44}, -{38,15,45}, -{38,15,46}, -{38,15,47}, -{38,16,-56}, -{38,16,-55}, -{38,16,-54}, -{38,16,-53}, -{38,16,-52}, -{38,16,-51}, -{38,16,-50}, -{38,16,-49}, -{38,16,-48}, -{38,16,-47}, -{38,16,-46}, -{38,16,-45}, -{38,16,-44}, -{38,16,-43}, -{38,16,-42}, -{38,16,-41}, -{38,16,-40}, -{38,16,-39}, -{38,16,-38}, -{38,16,-37}, -{38,16,-36}, -{38,16,-35}, -{38,16,-34}, -{38,16,-33}, -{38,16,-32}, -{38,16,-31}, -{38,16,-30}, -{38,16,-29}, -{38,16,-28}, -{38,16,-27}, -{38,16,-26}, -{38,16,-25}, -{38,16,-24}, -{38,16,-23}, -{38,16,-22}, -{38,16,-21}, -{38,16,-20}, -{38,16,-19}, -{38,16,-18}, -{38,16,-17}, -{38,16,-16}, -{38,16,-15}, -{38,16,-14}, -{38,16,-13}, -{38,16,-12}, -{38,16,-11}, -{38,16,-10}, -{38,16,-9}, -{38,16,-8}, -{38,16,-7}, -{38,16,-6}, -{38,16,-5}, -{38,16,-4}, -{38,16,-3}, -{38,16,-2}, -{38,16,-1}, -{38,16,0}, -{38,16,1}, -{38,16,2}, -{38,16,3}, -{38,16,4}, -{38,16,5}, -{38,16,6}, -{38,16,7}, -{38,16,8}, -{38,16,9}, -{38,16,10}, -{38,16,11}, -{38,16,12}, -{38,16,13}, -{38,16,14}, -{38,16,15}, -{38,16,16}, -{38,16,17}, -{38,16,18}, -{38,16,19}, -{38,16,20}, -{38,16,21}, -{38,16,22}, -{38,16,23}, -{38,16,24}, -{38,16,25}, -{38,16,26}, -{38,16,27}, -{38,16,28}, -{38,16,29}, -{38,16,30}, -{38,16,31}, -{38,16,32}, -{38,16,33}, -{38,16,34}, -{38,16,35}, -{38,16,36}, -{38,16,37}, -{38,16,38}, -{38,16,39}, -{38,16,40}, -{38,16,41}, -{38,16,42}, -{38,16,43}, -{38,16,44}, -{38,16,45}, -{38,16,46}, -{38,16,47}, -{38,17,-57}, -{38,17,-56}, -{38,17,-55}, -{38,17,-54}, -{38,17,-53}, -{38,17,-52}, -{38,17,-51}, -{38,17,-50}, -{38,17,-49}, -{38,17,-48}, -{38,17,-47}, -{38,17,-46}, -{38,17,-45}, -{38,17,-44}, -{38,17,-43}, -{38,17,-42}, -{38,17,-41}, -{38,17,-40}, -{38,17,-39}, -{38,17,-38}, -{38,17,-37}, -{38,17,-36}, -{38,17,-35}, -{38,17,-34}, -{38,17,-33}, -{38,17,-32}, -{38,17,-31}, -{38,17,-30}, -{38,17,-29}, -{38,17,-28}, -{38,17,-27}, -{38,17,-26}, -{38,17,-25}, -{38,17,-24}, -{38,17,-23}, -{38,17,-22}, -{38,17,-21}, -{38,17,-20}, -{38,17,-19}, -{38,17,-18}, -{38,17,-17}, -{38,17,-16}, -{38,17,-15}, -{38,17,-14}, -{38,17,-13}, -{38,17,-12}, -{38,17,-11}, -{38,17,-10}, -{38,17,-9}, -{38,17,-8}, -{38,17,-7}, -{38,17,-6}, -{38,17,-5}, -{38,17,-4}, -{38,17,-3}, -{38,17,-2}, -{38,17,-1}, -{38,17,0}, -{38,17,1}, -{38,17,2}, -{38,17,3}, -{38,17,4}, -{38,17,5}, -{38,17,6}, -{38,17,7}, -{38,17,8}, -{38,17,9}, -{38,17,10}, -{38,17,11}, -{38,17,12}, -{38,17,13}, -{38,17,14}, -{38,17,15}, -{38,17,16}, -{38,17,17}, -{38,17,18}, -{38,17,19}, -{38,17,20}, -{38,17,21}, -{38,17,22}, -{38,17,23}, -{38,17,24}, -{38,17,25}, -{38,17,26}, -{38,17,27}, -{38,17,28}, -{38,17,29}, -{38,17,30}, -{38,17,31}, -{38,17,32}, -{38,17,33}, -{38,17,34}, -{38,17,35}, -{38,17,36}, -{38,17,37}, -{38,17,38}, -{38,17,39}, -{38,17,40}, -{38,17,41}, -{38,17,42}, -{38,17,43}, -{38,17,44}, -{38,17,45}, -{38,17,46}, -{38,17,47}, -{38,18,-58}, -{38,18,-57}, -{38,18,-56}, -{38,18,-55}, -{38,18,-54}, -{38,18,-53}, -{38,18,-52}, -{38,18,-51}, -{38,18,-50}, -{38,18,-49}, -{38,18,-48}, -{38,18,-47}, -{38,18,-46}, -{38,18,-45}, -{38,18,-44}, -{38,18,-43}, -{38,18,-42}, -{38,18,-41}, -{38,18,-40}, -{38,18,-39}, -{38,18,-38}, -{38,18,-37}, -{38,18,-36}, -{38,18,-35}, -{38,18,-34}, -{38,18,-33}, -{38,18,-32}, -{38,18,-31}, -{38,18,-30}, -{38,18,-29}, -{38,18,-28}, -{38,18,-27}, -{38,18,-26}, -{38,18,-25}, -{38,18,-24}, -{38,18,-23}, -{38,18,-22}, -{38,18,-21}, -{38,18,-20}, -{38,18,-19}, -{38,18,-18}, -{38,18,-17}, -{38,18,-16}, -{38,18,-15}, -{38,18,-14}, -{38,18,-13}, -{38,18,-12}, -{38,18,-11}, -{38,18,-10}, -{38,18,-9}, -{38,18,-8}, -{38,18,-7}, -{38,18,-6}, -{38,18,-5}, -{38,18,-4}, -{38,18,-3}, -{38,18,-2}, -{38,18,-1}, -{38,18,0}, -{38,18,1}, -{38,18,2}, -{38,18,3}, -{38,18,4}, -{38,18,5}, -{38,18,6}, -{38,18,7}, -{38,18,8}, -{38,18,9}, -{38,18,10}, -{38,18,11}, -{38,18,12}, -{38,18,13}, -{38,18,14}, -{38,18,15}, -{38,18,16}, -{38,18,17}, -{38,18,18}, -{38,18,19}, -{38,18,20}, -{38,18,21}, -{38,18,22}, -{38,18,23}, -{38,18,24}, -{38,18,25}, -{38,18,26}, -{38,18,27}, -{38,18,28}, -{38,18,29}, -{38,18,30}, -{38,18,31}, -{38,18,32}, -{38,18,33}, -{38,18,34}, -{38,18,35}, -{38,18,36}, -{38,18,37}, -{38,18,38}, -{38,18,39}, -{38,18,40}, -{38,18,41}, -{38,18,42}, -{38,18,43}, -{38,18,44}, -{38,18,45}, -{38,18,46}, -{38,18,47}, -{38,19,-59}, -{38,19,-58}, -{38,19,-57}, -{38,19,-56}, -{38,19,-55}, -{38,19,-54}, -{38,19,-53}, -{38,19,-52}, -{38,19,-51}, -{38,19,-50}, -{38,19,-49}, -{38,19,-48}, -{38,19,-47}, -{38,19,-46}, -{38,19,-45}, -{38,19,-44}, -{38,19,-43}, -{38,19,-42}, -{38,19,-41}, -{38,19,-40}, -{38,19,-39}, -{38,19,-38}, -{38,19,-37}, -{38,19,-36}, -{38,19,-35}, -{38,19,-34}, -{38,19,-33}, -{38,19,-32}, -{38,19,-31}, -{38,19,-30}, -{38,19,-29}, -{38,19,-28}, -{38,19,-27}, -{38,19,-26}, -{38,19,-25}, -{38,19,-24}, -{38,19,-23}, -{38,19,-22}, -{38,19,-21}, -{38,19,-20}, -{38,19,-19}, -{38,19,-18}, -{38,19,-17}, -{38,19,-16}, -{38,19,-15}, -{38,19,-14}, -{38,19,-13}, -{38,19,-12}, -{38,19,-11}, -{38,19,-10}, -{38,19,-9}, -{38,19,-8}, -{38,19,-7}, -{38,19,-6}, -{38,19,-5}, -{38,19,-4}, -{38,19,-3}, -{38,19,-2}, -{38,19,-1}, -{38,19,0}, -{38,19,1}, -{38,19,2}, -{38,19,3}, -{38,19,4}, -{38,19,5}, -{38,19,6}, -{38,19,7}, -{38,19,8}, -{38,19,9}, -{38,19,10}, -{38,19,11}, -{38,19,12}, -{38,19,13}, -{38,19,14}, -{38,19,15}, -{38,19,16}, -{38,19,17}, -{38,19,18}, -{38,19,19}, -{38,19,20}, -{38,19,21}, -{38,19,22}, -{38,19,23}, -{38,19,24}, -{38,19,25}, -{38,19,26}, -{38,19,27}, -{38,19,28}, -{38,19,29}, -{38,19,30}, -{38,19,31}, -{38,19,32}, -{38,19,33}, -{38,19,34}, -{38,19,35}, -{38,19,36}, -{38,19,37}, -{38,19,38}, -{38,19,39}, -{38,19,40}, -{38,19,41}, -{38,19,42}, -{38,19,43}, -{38,19,44}, -{38,19,45}, -{38,19,46}, -{38,19,47}, -{38,20,-60}, -{38,20,-59}, -{38,20,-58}, -{38,20,-57}, -{38,20,-56}, -{38,20,-55}, -{38,20,-54}, -{38,20,-53}, -{38,20,-52}, -{38,20,-51}, -{38,20,-50}, -{38,20,-49}, -{38,20,-48}, -{38,20,-47}, -{38,20,-46}, -{38,20,-45}, -{38,20,-44}, -{38,20,-43}, -{38,20,-42}, -{38,20,-41}, -{38,20,-40}, -{38,20,-39}, -{38,20,-38}, -{38,20,-37}, -{38,20,-36}, -{38,20,-35}, -{38,20,-34}, -{38,20,-33}, -{38,20,-32}, -{38,20,-31}, -{38,20,-30}, -{38,20,-29}, -{38,20,-28}, -{38,20,-27}, -{38,20,-26}, -{38,20,-25}, -{38,20,-24}, -{38,20,-23}, -{38,20,-22}, -{38,20,-21}, -{38,20,-20}, -{38,20,-19}, -{38,20,-18}, -{38,20,-17}, -{38,20,-16}, -{38,20,-15}, -{38,20,-14}, -{38,20,-13}, -{38,20,-12}, -{38,20,-11}, -{38,20,-10}, -{38,20,-9}, -{38,20,-8}, -{38,20,-7}, -{38,20,-6}, -{38,20,-5}, -{38,20,-4}, -{38,20,-3}, -{38,20,-2}, -{38,20,-1}, -{38,20,0}, -{38,20,1}, -{38,20,2}, -{38,20,3}, -{38,20,4}, -{38,20,5}, -{38,20,6}, -{38,20,7}, -{38,20,8}, -{38,20,9}, -{38,20,10}, -{38,20,11}, -{38,20,12}, -{38,20,13}, -{38,20,14}, -{38,20,15}, -{38,20,16}, -{38,20,17}, -{38,20,18}, -{38,20,19}, -{38,20,20}, -{38,20,21}, -{38,20,22}, -{38,20,23}, -{38,20,24}, -{38,20,25}, -{38,20,26}, -{38,20,27}, -{38,20,28}, -{38,20,29}, -{38,20,30}, -{38,20,31}, -{38,20,32}, -{38,20,33}, -{38,20,34}, -{38,20,35}, -{38,20,36}, -{38,20,37}, -{38,20,38}, -{38,20,39}, -{38,20,40}, -{38,20,41}, -{38,20,42}, -{38,20,43}, -{38,20,44}, -{38,20,45}, -{38,20,46}, -{38,20,47}, -{38,21,-61}, -{38,21,-60}, -{38,21,-59}, -{38,21,-58}, -{38,21,-57}, -{38,21,-56}, -{38,21,-55}, -{38,21,-54}, -{38,21,-53}, -{38,21,-52}, -{38,21,-51}, -{38,21,-50}, -{38,21,-49}, -{38,21,-48}, -{38,21,-47}, -{38,21,-46}, -{38,21,-45}, -{38,21,-44}, -{38,21,-43}, -{38,21,-42}, -{38,21,-41}, -{38,21,-40}, -{38,21,-39}, -{38,21,-38}, -{38,21,-37}, -{38,21,-36}, -{38,21,-35}, -{38,21,-34}, -{38,21,-33}, -{38,21,-32}, -{38,21,-31}, -{38,21,-30}, -{38,21,-29}, -{38,21,-28}, -{38,21,-27}, -{38,21,-26}, -{38,21,-25}, -{38,21,-24}, -{38,21,-23}, -{38,21,-22}, -{38,21,-21}, -{38,21,-20}, -{38,21,-19}, -{38,21,-18}, -{38,21,-17}, -{38,21,-16}, -{38,21,-15}, -{38,21,-14}, -{38,21,-13}, -{38,21,-12}, -{38,21,-11}, -{38,21,-10}, -{38,21,-9}, -{38,21,-8}, -{38,21,-7}, -{38,21,-6}, -{38,21,-5}, -{38,21,-4}, -{38,21,-3}, -{38,21,-2}, -{38,21,-1}, -{38,21,0}, -{38,21,1}, -{38,21,2}, -{38,21,3}, -{38,21,4}, -{38,21,5}, -{38,21,6}, -{38,21,7}, -{38,21,8}, -{38,21,9}, -{38,21,10}, -{38,21,11}, -{38,21,12}, -{38,21,13}, -{38,21,14}, -{38,21,15}, -{38,21,16}, -{38,21,17}, -{38,21,18}, -{38,21,19}, -{38,21,20}, -{38,21,21}, -{38,21,22}, -{38,21,23}, -{38,21,24}, -{38,21,25}, -{38,21,26}, -{38,21,27}, -{38,21,28}, -{38,21,29}, -{38,21,30}, -{38,21,31}, -{38,21,32}, -{38,21,33}, -{38,21,34}, -{38,21,35}, -{38,21,36}, -{38,21,37}, -{38,21,38}, -{38,21,39}, -{38,21,40}, -{38,21,41}, -{38,21,42}, -{38,21,43}, -{38,21,44}, -{38,21,45}, -{38,21,46}, -{38,21,47}, -{38,22,-62}, -{38,22,-61}, -{38,22,-60}, -{38,22,-59}, -{38,22,-58}, -{38,22,-57}, -{38,22,-56}, -{38,22,-55}, -{38,22,-54}, -{38,22,-53}, -{38,22,-52}, -{38,22,-51}, -{38,22,-50}, -{38,22,-49}, -{38,22,-48}, -{38,22,-47}, -{38,22,-46}, -{38,22,-45}, -{38,22,-44}, -{38,22,-43}, -{38,22,-42}, -{38,22,-41}, -{38,22,-40}, -{38,22,-39}, -{38,22,-38}, -{38,22,-37}, -{38,22,-36}, -{38,22,-35}, -{38,22,-34}, -{38,22,-33}, -{38,22,-32}, -{38,22,-31}, -{38,22,-30}, -{38,22,-29}, -{38,22,-28}, -{38,22,-27}, -{38,22,-26}, -{38,22,-25}, -{38,22,-24}, -{38,22,-23}, -{38,22,-22}, -{38,22,-21}, -{38,22,-20}, -{38,22,-19}, -{38,22,-18}, -{38,22,-17}, -{38,22,-16}, -{38,22,-15}, -{38,22,-14}, -{38,22,-13}, -{38,22,-12}, -{38,22,-11}, -{38,22,-10}, -{38,22,-9}, -{38,22,-8}, -{38,22,-7}, -{38,22,-6}, -{38,22,-5}, -{38,22,-4}, -{38,22,-3}, -{38,22,-2}, -{38,22,-1}, -{38,22,0}, -{38,22,1}, -{38,22,2}, -{38,22,3}, -{38,22,4}, -{38,22,5}, -{38,22,6}, -{38,22,7}, -{38,22,8}, -{38,22,9}, -{38,22,10}, -{38,22,11}, -{38,22,12}, -{38,22,13}, -{38,22,14}, -{38,22,15}, -{38,22,16}, -{38,22,17}, -{38,22,18}, -{38,22,19}, -{38,22,20}, -{38,22,21}, -{38,22,22}, -{38,22,23}, -{38,22,24}, -{38,22,25}, -{38,22,26}, -{38,22,27}, -{38,22,28}, -{38,22,29}, -{38,22,30}, -{38,22,31}, -{38,22,32}, -{38,22,33}, -{38,22,34}, -{38,22,35}, -{38,22,36}, -{38,22,37}, -{38,22,38}, -{38,22,39}, -{38,22,40}, -{38,22,41}, -{38,22,42}, -{38,22,43}, -{38,22,44}, -{38,22,45}, -{38,22,46}, -{38,22,47}, -{38,23,-62}, -{38,23,-61}, -{38,23,-60}, -{38,23,-59}, -{38,23,-58}, -{38,23,-57}, -{38,23,-56}, -{38,23,-55}, -{38,23,-54}, -{38,23,-53}, -{38,23,-52}, -{38,23,-51}, -{38,23,-50}, -{38,23,-49}, -{38,23,-48}, -{38,23,-47}, -{38,23,-46}, -{38,23,-45}, -{38,23,-44}, -{38,23,-43}, -{38,23,-42}, -{38,23,-41}, -{38,23,-40}, -{38,23,-39}, -{38,23,-38}, -{38,23,-37}, -{38,23,-36}, -{38,23,-35}, -{38,23,-34}, -{38,23,-33}, -{38,23,-32}, -{38,23,-31}, -{38,23,-30}, -{38,23,-29}, -{38,23,-28}, -{38,23,-27}, -{38,23,-26}, -{38,23,-25}, -{38,23,-24}, -{38,23,-23}, -{38,23,-22}, -{38,23,-21}, -{38,23,-20}, -{38,23,-19}, -{38,23,-18}, -{38,23,-17}, -{38,23,-16}, -{38,23,-15}, -{38,23,-14}, -{38,23,-13}, -{38,23,-12}, -{38,23,-11}, -{38,23,-10}, -{38,23,-9}, -{38,23,-8}, -{38,23,-7}, -{38,23,-6}, -{38,23,-5}, -{38,23,-4}, -{38,23,-3}, -{38,23,-2}, -{38,23,-1}, -{38,23,0}, -{38,23,1}, -{38,23,2}, -{38,23,3}, -{38,23,4}, -{38,23,5}, -{38,23,6}, -{38,23,7}, -{38,23,8}, -{38,23,9}, -{38,23,10}, -{38,23,11}, -{38,23,12}, -{38,23,13}, -{38,23,14}, -{38,23,15}, -{38,23,16}, -{38,23,17}, -{38,23,18}, -{38,23,19}, -{38,23,20}, -{38,23,21}, -{38,23,22}, -{38,23,23}, -{38,23,24}, -{38,23,25}, -{38,23,26}, -{38,23,27}, -{38,23,28}, -{38,23,29}, -{38,23,30}, -{38,23,31}, -{38,23,32}, -{38,23,33}, -{38,23,34}, -{38,23,35}, -{38,23,36}, -{38,23,37}, -{38,23,38}, -{38,23,39}, -{38,23,40}, -{38,23,41}, -{38,23,42}, -{38,23,43}, -{38,23,44}, -{38,23,45}, -{38,23,46}, -{38,23,47}, -{38,24,-63}, -{38,24,-62}, -{38,24,-61}, -{38,24,-60}, -{38,24,-59}, -{38,24,-58}, -{38,24,-57}, -{38,24,-56}, -{38,24,-55}, -{38,24,-54}, -{38,24,-53}, -{38,24,-52}, -{38,24,-51}, -{38,24,-50}, -{38,24,-49}, -{38,24,-48}, -{38,24,-47}, -{38,24,-46}, -{38,24,-45}, -{38,24,-44}, -{38,24,-43}, -{38,24,-42}, -{38,24,-41}, -{38,24,-40}, -{38,24,-39}, -{38,24,-38}, -{38,24,-37}, -{38,24,-36}, -{38,24,-35}, -{38,24,-34}, -{38,24,-33}, -{38,24,-32}, -{38,24,-31}, -{38,24,-30}, -{38,24,-29}, -{38,24,-28}, -{38,24,-27}, -{38,24,-26}, -{38,24,-25}, -{38,24,-24}, -{38,24,-23}, -{38,24,-22}, -{38,24,-21}, -{38,24,-20}, -{38,24,-19}, -{38,24,-18}, -{38,24,-17}, -{38,24,-16}, -{38,24,-15}, -{38,24,-14}, -{38,24,-13}, -{38,24,-12}, -{38,24,-11}, -{38,24,-10}, -{38,24,-9}, -{38,24,-8}, -{38,24,-7}, -{38,24,-6}, -{38,24,-5}, -{38,24,-4}, -{38,24,-3}, -{38,24,-2}, -{38,24,-1}, -{38,24,0}, -{38,24,1}, -{38,24,2}, -{38,24,3}, -{38,24,4}, -{38,24,5}, -{38,24,6}, -{38,24,7}, -{38,24,8}, -{38,24,9}, -{38,24,10}, -{38,24,11}, -{38,24,12}, -{38,24,13}, -{38,24,14}, -{38,24,15}, -{38,24,16}, -{38,24,17}, -{38,24,18}, -{38,24,19}, -{38,24,20}, -{38,24,21}, -{38,24,22}, -{38,24,23}, -{38,24,24}, -{38,24,25}, -{38,24,26}, -{38,24,27}, -{38,24,28}, -{38,24,29}, -{38,24,30}, -{38,24,31}, -{38,24,32}, -{38,24,33}, -{38,24,34}, -{38,24,35}, -{38,24,36}, -{38,24,37}, -{38,24,38}, -{38,24,39}, -{38,24,40}, -{38,24,41}, -{38,24,42}, -{38,24,43}, -{38,24,44}, -{38,24,45}, -{38,24,46}, -{38,24,47}, -{38,25,-64}, -{38,25,-63}, -{38,25,-62}, -{38,25,-61}, -{38,25,-60}, -{38,25,-59}, -{38,25,-58}, -{38,25,-57}, -{38,25,-56}, -{38,25,-55}, -{38,25,-54}, -{38,25,-53}, -{38,25,-52}, -{38,25,-51}, -{38,25,-50}, -{38,25,-49}, -{38,25,-48}, -{38,25,-47}, -{38,25,-46}, -{38,25,-45}, -{38,25,-44}, -{38,25,-43}, -{38,25,-42}, -{38,25,-41}, -{38,25,-40}, -{38,25,-39}, -{38,25,-38}, -{38,25,-37}, -{38,25,-36}, -{38,25,-35}, -{38,25,-34}, -{38,25,-33}, -{38,25,-32}, -{38,25,-31}, -{38,25,-30}, -{38,25,-29}, -{38,25,-28}, -{38,25,-27}, -{38,25,-26}, -{38,25,-25}, -{38,25,-24}, -{38,25,-23}, -{38,25,-22}, -{38,25,-21}, -{38,25,-20}, -{38,25,-19}, -{38,25,-18}, -{38,25,-17}, -{38,25,-16}, -{38,25,-15}, -{38,25,-14}, -{38,25,-13}, -{38,25,-12}, -{38,25,-11}, -{38,25,-10}, -{38,25,-9}, -{38,25,-8}, -{38,25,-7}, -{38,25,-6}, -{38,25,-5}, -{38,25,-4}, -{38,25,-3}, -{38,25,-2}, -{38,25,-1}, -{38,25,0}, -{38,25,1}, -{38,25,2}, -{38,25,3}, -{38,25,4}, -{38,25,5}, -{38,25,6}, -{38,25,7}, -{38,25,8}, -{38,25,9}, -{38,25,10}, -{38,25,11}, -{38,25,12}, -{38,25,13}, -{38,25,14}, -{38,25,15}, -{38,25,16}, -{38,25,17}, -{38,25,18}, -{38,25,19}, -{38,25,20}, -{38,25,21}, -{38,25,22}, -{38,25,23}, -{38,25,24}, -{38,25,25}, -{38,25,26}, -{38,25,27}, -{38,25,28}, -{38,25,29}, -{38,25,30}, -{38,25,31}, -{38,25,32}, -{38,25,33}, -{38,25,34}, -{38,25,35}, -{38,25,36}, -{38,25,37}, -{38,25,38}, -{38,25,39}, -{38,25,40}, -{38,25,41}, -{38,25,42}, -{38,25,43}, -{38,25,44}, -{38,25,45}, -{38,25,46}, -{38,25,47}, -{38,25,48}, -{38,26,-65}, -{38,26,-64}, -{38,26,-63}, -{38,26,-62}, -{38,26,-61}, -{38,26,-60}, -{38,26,-59}, -{38,26,-58}, -{38,26,-57}, -{38,26,-56}, -{38,26,-55}, -{38,26,-54}, -{38,26,-53}, -{38,26,-52}, -{38,26,-51}, -{38,26,-50}, -{38,26,-49}, -{38,26,-48}, -{38,26,-47}, -{38,26,-46}, -{38,26,-45}, -{38,26,-44}, -{38,26,-43}, -{38,26,-42}, -{38,26,-41}, -{38,26,-40}, -{38,26,-39}, -{38,26,-38}, -{38,26,-37}, -{38,26,-36}, -{38,26,-35}, -{38,26,-34}, -{38,26,-33}, -{38,26,-32}, -{38,26,-31}, -{38,26,-30}, -{38,26,-29}, -{38,26,-28}, -{38,26,-27}, -{38,26,-26}, -{38,26,-25}, -{38,26,-24}, -{38,26,-23}, -{38,26,-22}, -{38,26,-21}, -{38,26,-20}, -{38,26,-19}, -{38,26,-18}, -{38,26,-17}, -{38,26,-16}, -{38,26,-15}, -{38,26,-14}, -{38,26,-13}, -{38,26,-12}, -{38,26,-11}, -{38,26,-10}, -{38,26,-9}, -{38,26,-8}, -{38,26,-7}, -{38,26,-6}, -{38,26,-5}, -{38,26,-4}, -{38,26,-3}, -{38,26,-2}, -{38,26,-1}, -{38,26,0}, -{38,26,1}, -{38,26,2}, -{38,26,3}, -{38,26,4}, -{38,26,5}, -{38,26,6}, -{38,26,7}, -{38,26,8}, -{38,26,9}, -{38,26,10}, -{38,26,11}, -{38,26,12}, -{38,26,13}, -{38,26,14}, -{38,26,15}, -{38,26,16}, -{38,26,17}, -{38,26,18}, -{38,26,19}, -{38,26,20}, -{38,26,21}, -{38,26,22}, -{38,26,23}, -{38,26,24}, -{38,26,25}, -{38,26,26}, -{38,26,27}, -{38,26,28}, -{38,26,29}, -{38,26,30}, -{38,26,31}, -{38,26,32}, -{38,26,33}, -{38,26,34}, -{38,26,35}, -{38,26,36}, -{38,26,37}, -{38,26,38}, -{38,26,39}, -{38,26,40}, -{38,26,41}, -{38,26,42}, -{38,26,43}, -{38,26,44}, -{38,26,45}, -{38,26,46}, -{38,26,47}, -{38,26,48}, -{38,27,-66}, -{38,27,-65}, -{38,27,-64}, -{38,27,-63}, -{38,27,-62}, -{38,27,-61}, -{38,27,-60}, -{38,27,-59}, -{38,27,-58}, -{38,27,-57}, -{38,27,-56}, -{38,27,-55}, -{38,27,-54}, -{38,27,-53}, -{38,27,-52}, -{38,27,-51}, -{38,27,-50}, -{38,27,-49}, -{38,27,-48}, -{38,27,-47}, -{38,27,-46}, -{38,27,-45}, -{38,27,-44}, -{38,27,-43}, -{38,27,-42}, -{38,27,-41}, -{38,27,-40}, -{38,27,-39}, -{38,27,-38}, -{38,27,-37}, -{38,27,-36}, -{38,27,-35}, -{38,27,-34}, -{38,27,-33}, -{38,27,-32}, -{38,27,-31}, -{38,27,-30}, -{38,27,-29}, -{38,27,-28}, -{38,27,-27}, -{38,27,-26}, -{38,27,-25}, -{38,27,-24}, -{38,27,-23}, -{38,27,-22}, -{38,27,-21}, -{38,27,-20}, -{38,27,-19}, -{38,27,-18}, -{38,27,-17}, -{38,27,-16}, -{38,27,-15}, -{38,27,-14}, -{38,27,-13}, -{38,27,-12}, -{38,27,-11}, -{38,27,-10}, -{38,27,-9}, -{38,27,-8}, -{38,27,-7}, -{38,27,-6}, -{38,27,-5}, -{38,27,-4}, -{38,27,-3}, -{38,27,-2}, -{38,27,-1}, -{38,27,0}, -{38,27,1}, -{38,27,2}, -{38,27,3}, -{38,27,4}, -{38,27,5}, -{38,27,6}, -{38,27,7}, -{38,27,8}, -{38,27,9}, -{38,27,10}, -{38,27,11}, -{38,27,12}, -{38,27,13}, -{38,27,14}, -{38,27,15}, -{38,27,16}, -{38,27,17}, -{38,27,18}, -{38,27,19}, -{38,27,20}, -{38,27,21}, -{38,27,22}, -{38,27,23}, -{38,27,24}, -{38,27,25}, -{38,27,26}, -{38,27,27}, -{38,27,28}, -{38,27,29}, -{38,27,30}, -{38,27,31}, -{38,27,32}, -{38,27,33}, -{38,27,34}, -{38,27,35}, -{38,27,36}, -{38,27,37}, -{38,27,38}, -{38,27,39}, -{38,27,40}, -{38,27,41}, -{38,27,42}, -{38,27,43}, -{38,27,44}, -{38,27,45}, -{38,27,46}, -{38,27,47}, -{38,27,48}, -{38,28,-67}, -{38,28,-66}, -{38,28,-65}, -{38,28,-64}, -{38,28,-63}, -{38,28,-62}, -{38,28,-61}, -{38,28,-60}, -{38,28,-59}, -{38,28,-58}, -{38,28,-57}, -{38,28,-56}, -{38,28,-55}, -{38,28,-54}, -{38,28,-53}, -{38,28,-52}, -{38,28,-51}, -{38,28,-50}, -{38,28,-49}, -{38,28,-48}, -{38,28,-47}, -{38,28,-46}, -{38,28,-45}, -{38,28,-44}, -{38,28,-43}, -{38,28,-42}, -{38,28,-41}, -{38,28,-40}, -{38,28,-39}, -{38,28,-38}, -{38,28,-37}, -{38,28,-36}, -{38,28,-35}, -{38,28,-34}, -{38,28,-33}, -{38,28,-32}, -{38,28,-31}, -{38,28,-30}, -{38,28,-29}, -{38,28,-28}, -{38,28,-27}, -{38,28,-26}, -{38,28,-25}, -{38,28,-24}, -{38,28,-23}, -{38,28,-22}, -{38,28,-21}, -{38,28,-20}, -{38,28,-19}, -{38,28,-18}, -{38,28,-17}, -{38,28,-16}, -{38,28,-15}, -{38,28,-14}, -{38,28,-13}, -{38,28,-12}, -{38,28,-11}, -{38,28,-10}, -{38,28,-9}, -{38,28,-8}, -{38,28,-7}, -{38,28,-6}, -{38,28,-5}, -{38,28,-4}, -{38,28,-3}, -{38,28,-2}, -{38,28,-1}, -{38,28,0}, -{38,28,1}, -{38,28,2}, -{38,28,3}, -{38,28,4}, -{38,28,5}, -{38,28,6}, -{38,28,7}, -{38,28,8}, -{38,28,9}, -{38,28,10}, -{38,28,11}, -{38,28,12}, -{38,28,13}, -{38,28,14}, -{38,28,15}, -{38,28,16}, -{38,28,17}, -{38,28,18}, -{38,28,19}, -{38,28,20}, -{38,28,21}, -{38,28,22}, -{38,28,23}, -{38,28,24}, -{38,28,25}, -{38,28,26}, -{38,28,27}, -{38,28,28}, -{38,28,29}, -{38,28,30}, -{38,28,31}, -{38,28,32}, -{38,28,33}, -{38,28,34}, -{38,28,35}, -{38,28,36}, -{38,28,37}, -{38,28,38}, -{38,28,39}, -{38,28,40}, -{38,28,41}, -{38,28,42}, -{38,28,43}, -{38,28,44}, -{38,28,45}, -{38,28,46}, -{38,28,47}, -{38,28,48}, -{38,29,-68}, -{38,29,-67}, -{38,29,-66}, -{38,29,-65}, -{38,29,-64}, -{38,29,-63}, -{38,29,-62}, -{38,29,-61}, -{38,29,-60}, -{38,29,-59}, -{38,29,-58}, -{38,29,-57}, -{38,29,-56}, -{38,29,-55}, -{38,29,-54}, -{38,29,-53}, -{38,29,-52}, -{38,29,-51}, -{38,29,-50}, -{38,29,-49}, -{38,29,-48}, -{38,29,-47}, -{38,29,-46}, -{38,29,-45}, -{38,29,-44}, -{38,29,-43}, -{38,29,-42}, -{38,29,-41}, -{38,29,-40}, -{38,29,-39}, -{38,29,-38}, -{38,29,-37}, -{38,29,-36}, -{38,29,-35}, -{38,29,-34}, -{38,29,-33}, -{38,29,-32}, -{38,29,-31}, -{38,29,-30}, -{38,29,-29}, -{38,29,-28}, -{38,29,-27}, -{38,29,-26}, -{38,29,-25}, -{38,29,-24}, -{38,29,-23}, -{38,29,-22}, -{38,29,-21}, -{38,29,-20}, -{38,29,-19}, -{38,29,-18}, -{38,29,-17}, -{38,29,-16}, -{38,29,-15}, -{38,29,-14}, -{38,29,-13}, -{38,29,-12}, -{38,29,-11}, -{38,29,-10}, -{38,29,-9}, -{38,29,-8}, -{38,29,-7}, -{38,29,-6}, -{38,29,-5}, -{38,29,-4}, -{38,29,-3}, -{38,29,-2}, -{38,29,-1}, -{38,29,0}, -{38,29,1}, -{38,29,2}, -{38,29,3}, -{38,29,4}, -{38,29,5}, -{38,29,6}, -{38,29,7}, -{38,29,8}, -{38,29,9}, -{38,29,10}, -{38,29,11}, -{38,29,12}, -{38,29,13}, -{38,29,14}, -{38,29,15}, -{38,29,16}, -{38,29,17}, -{38,29,18}, -{38,29,19}, -{38,29,20}, -{38,29,21}, -{38,29,22}, -{38,29,23}, -{38,29,24}, -{38,29,25}, -{38,29,26}, -{38,29,27}, -{38,29,28}, -{38,29,29}, -{38,29,30}, -{38,29,31}, -{38,29,32}, -{38,29,33}, -{38,29,34}, -{38,29,35}, -{38,29,36}, -{38,29,37}, -{38,29,38}, -{38,29,39}, -{38,29,40}, -{38,29,41}, -{38,29,42}, -{38,29,43}, -{38,29,44}, -{38,29,45}, -{38,29,46}, -{38,29,47}, -{38,29,48}, -{38,30,-69}, -{38,30,-68}, -{38,30,-67}, -{38,30,-66}, -{38,30,-65}, -{38,30,-64}, -{38,30,-63}, -{38,30,-62}, -{38,30,-61}, -{38,30,-60}, -{38,30,-59}, -{38,30,-58}, -{38,30,-57}, -{38,30,-56}, -{38,30,-55}, -{38,30,-54}, -{38,30,-53}, -{38,30,-52}, -{38,30,-51}, -{38,30,-50}, -{38,30,-49}, -{38,30,-48}, -{38,30,-47}, -{38,30,-46}, -{38,30,-45}, -{38,30,-44}, -{38,30,-43}, -{38,30,-42}, -{38,30,-41}, -{38,30,-40}, -{38,30,-39}, -{38,30,-38}, -{38,30,-37}, -{38,30,-36}, -{38,30,-35}, -{38,30,-34}, -{38,30,-33}, -{38,30,-32}, -{38,30,-31}, -{38,30,-30}, -{38,30,-29}, -{38,30,-28}, -{38,30,-27}, -{38,30,-26}, -{38,30,-25}, -{38,30,-24}, -{38,30,-23}, -{38,30,-22}, -{38,30,-21}, -{38,30,-20}, -{38,30,-19}, -{38,30,-18}, -{38,30,-17}, -{38,30,-16}, -{38,30,-15}, -{38,30,-14}, -{38,30,-13}, -{38,30,-12}, -{38,30,-11}, -{38,30,-10}, -{38,30,-9}, -{38,30,-8}, -{38,30,-7}, -{38,30,-6}, -{38,30,-5}, -{38,30,-4}, -{38,30,-3}, -{38,30,-2}, -{38,30,-1}, -{38,30,0}, -{38,30,1}, -{38,30,2}, -{38,30,3}, -{38,30,4}, -{38,30,5}, -{38,30,6}, -{38,30,7}, -{38,30,8}, -{38,30,9}, -{38,30,10}, -{38,30,11}, -{38,30,12}, -{38,30,13}, -{38,30,14}, -{38,30,15}, -{38,30,16}, -{38,30,17}, -{38,30,18}, -{38,30,19}, -{38,30,20}, -{38,30,21}, -{38,30,22}, -{38,30,23}, -{38,30,24}, -{38,30,25}, -{38,30,26}, -{38,30,27}, -{38,30,28}, -{38,30,29}, -{38,30,30}, -{38,30,31}, -{38,30,32}, -{38,30,33}, -{38,30,34}, -{38,30,35}, -{38,30,36}, -{38,30,37}, -{38,30,38}, -{38,30,39}, -{38,30,40}, -{38,30,41}, -{38,30,42}, -{38,30,43}, -{38,30,44}, -{38,30,45}, -{38,30,46}, -{38,30,47}, -{38,30,48}, -{38,31,-70}, -{38,31,-69}, -{38,31,-68}, -{38,31,-67}, -{38,31,-66}, -{38,31,-65}, -{38,31,-64}, -{38,31,-63}, -{38,31,-62}, -{38,31,-61}, -{38,31,-60}, -{38,31,-59}, -{38,31,-58}, -{38,31,-57}, -{38,31,-56}, -{38,31,-55}, -{38,31,-54}, -{38,31,-53}, -{38,31,-52}, -{38,31,-51}, -{38,31,-50}, -{38,31,-49}, -{38,31,-48}, -{38,31,-47}, -{38,31,-46}, -{38,31,-45}, -{38,31,-44}, -{38,31,-43}, -{38,31,-42}, -{38,31,-41}, -{38,31,-40}, -{38,31,-39}, -{38,31,-38}, -{38,31,-37}, -{38,31,-36}, -{38,31,-35}, -{38,31,-34}, -{38,31,-33}, -{38,31,-32}, -{38,31,-31}, -{38,31,-30}, -{38,31,-29}, -{38,31,-28}, -{38,31,-27}, -{38,31,-26}, -{38,31,-25}, -{38,31,-24}, -{38,31,-23}, -{38,31,-22}, -{38,31,-21}, -{38,31,-20}, -{38,31,-19}, -{38,31,-18}, -{38,31,-17}, -{38,31,-16}, -{38,31,-15}, -{38,31,-14}, -{38,31,-13}, -{38,31,-12}, -{38,31,-11}, -{38,31,-10}, -{38,31,-9}, -{38,31,-8}, -{38,31,-7}, -{38,31,-6}, -{38,31,-5}, -{38,31,-4}, -{38,31,-3}, -{38,31,-2}, -{38,31,-1}, -{38,31,0}, -{38,31,1}, -{38,31,2}, -{38,31,3}, -{38,31,4}, -{38,31,5}, -{38,31,6}, -{38,31,7}, -{38,31,8}, -{38,31,9}, -{38,31,10}, -{38,31,11}, -{38,31,12}, -{38,31,13}, -{38,31,14}, -{38,31,15}, -{38,31,16}, -{38,31,17}, -{38,31,18}, -{38,31,19}, -{38,31,20}, -{38,31,21}, -{38,31,22}, -{38,31,23}, -{38,31,24}, -{38,31,25}, -{38,31,26}, -{38,31,27}, -{38,31,28}, -{38,31,29}, -{38,31,30}, -{38,31,31}, -{38,31,32}, -{38,31,33}, -{38,31,34}, -{38,31,35}, -{38,31,36}, -{38,31,37}, -{38,31,38}, -{38,31,39}, -{38,31,40}, -{38,31,41}, -{38,31,42}, -{38,31,43}, -{38,31,44}, -{38,31,45}, -{38,31,46}, -{38,31,47}, -{38,31,48}, -{38,32,-71}, -{38,32,-70}, -{38,32,-69}, -{38,32,-68}, -{38,32,-67}, -{38,32,-66}, -{38,32,-65}, -{38,32,-64}, -{38,32,-63}, -{38,32,-62}, -{38,32,-61}, -{38,32,-60}, -{38,32,-59}, -{38,32,-58}, -{38,32,-57}, -{38,32,-56}, -{38,32,-55}, -{38,32,-54}, -{38,32,-53}, -{38,32,-52}, -{38,32,-51}, -{38,32,-50}, -{38,32,-49}, -{38,32,-48}, -{38,32,-47}, -{38,32,-46}, -{38,32,-45}, -{38,32,-44}, -{38,32,-43}, -{38,32,-42}, -{38,32,-41}, -{38,32,-40}, -{38,32,-39}, -{38,32,-38}, -{38,32,-37}, -{38,32,-36}, -{38,32,-35}, -{38,32,-34}, -{38,32,-33}, -{38,32,-32}, -{38,32,-31}, -{38,32,-30}, -{38,32,-29}, -{38,32,-28}, -{38,32,-27}, -{38,32,-26}, -{38,32,-25}, -{38,32,-24}, -{38,32,-23}, -{38,32,-22}, -{38,32,-21}, -{38,32,-20}, -{38,32,-19}, -{38,32,-18}, -{38,32,-17}, -{38,32,-16}, -{38,32,-15}, -{38,32,-14}, -{38,32,-13}, -{38,32,-12}, -{38,32,-11}, -{38,32,-10}, -{38,32,-9}, -{38,32,-8}, -{38,32,-7}, -{38,32,-6}, -{38,32,-5}, -{38,32,-4}, -{38,32,-3}, -{38,32,-2}, -{38,32,-1}, -{38,32,0}, -{38,32,1}, -{38,32,2}, -{38,32,3}, -{38,32,4}, -{38,32,5}, -{38,32,6}, -{38,32,7}, -{38,32,8}, -{38,32,9}, -{38,32,10}, -{38,32,11}, -{38,32,12}, -{38,32,13}, -{38,32,14}, -{38,32,15}, -{38,32,16}, -{38,32,17}, -{38,32,18}, -{38,32,19}, -{38,32,20}, -{38,32,21}, -{38,32,22}, -{38,32,23}, -{38,32,24}, -{38,32,25}, -{38,32,26}, -{38,32,27}, -{38,32,28}, -{38,32,29}, -{38,32,30}, -{38,32,31}, -{38,32,32}, -{38,32,33}, -{38,32,34}, -{38,32,35}, -{38,32,36}, -{38,32,37}, -{38,32,38}, -{38,32,39}, -{38,32,40}, -{38,32,41}, -{38,32,42}, -{38,32,43}, -{38,32,44}, -{38,32,45}, -{38,32,46}, -{38,32,47}, -{38,32,48}, -{38,33,-72}, -{38,33,-71}, -{38,33,-70}, -{38,33,-69}, -{38,33,-68}, -{38,33,-67}, -{38,33,-66}, -{38,33,-65}, -{38,33,-64}, -{38,33,-63}, -{38,33,-62}, -{38,33,-61}, -{38,33,-60}, -{38,33,-59}, -{38,33,-58}, -{38,33,-57}, -{38,33,-56}, -{38,33,-55}, -{38,33,-54}, -{38,33,-53}, -{38,33,-52}, -{38,33,-51}, -{38,33,-50}, -{38,33,-49}, -{38,33,-48}, -{38,33,-47}, -{38,33,-46}, -{38,33,-45}, -{38,33,-44}, -{38,33,-43}, -{38,33,-42}, -{38,33,-41}, -{38,33,-40}, -{38,33,-39}, -{38,33,-38}, -{38,33,-37}, -{38,33,-36}, -{38,33,-35}, -{38,33,-34}, -{38,33,-33}, -{38,33,-32}, -{38,33,-31}, -{38,33,-30}, -{38,33,-29}, -{38,33,-28}, -{38,33,-27}, -{38,33,-26}, -{38,33,-25}, -{38,33,-24}, -{38,33,-23}, -{38,33,-22}, -{38,33,-21}, -{38,33,-20}, -{38,33,-19}, -{38,33,-18}, -{38,33,-17}, -{38,33,-16}, -{38,33,-15}, -{38,33,-14}, -{38,33,-13}, -{38,33,-12}, -{38,33,-11}, -{38,33,-10}, -{38,33,-9}, -{38,33,-8}, -{38,33,-7}, -{38,33,-6}, -{38,33,-5}, -{38,33,-4}, -{38,33,-3}, -{38,33,-2}, -{38,33,-1}, -{38,33,0}, -{38,33,1}, -{38,33,2}, -{38,33,3}, -{38,33,4}, -{38,33,5}, -{38,33,6}, -{38,33,7}, -{38,33,8}, -{38,33,9}, -{38,33,10}, -{38,33,11}, -{38,33,12}, -{38,33,13}, -{38,33,14}, -{38,33,15}, -{38,33,16}, -{38,33,17}, -{38,33,18}, -{38,33,19}, -{38,33,20}, -{38,33,21}, -{38,33,22}, -{38,33,23}, -{38,33,24}, -{38,33,25}, -{38,33,26}, -{38,33,27}, -{38,33,28}, -{38,33,29}, -{38,33,30}, -{38,33,31}, -{38,33,32}, -{38,33,33}, -{38,33,34}, -{38,33,35}, -{38,33,36}, -{38,33,37}, -{38,33,38}, -{38,33,39}, -{38,33,40}, -{38,33,41}, -{38,33,42}, -{38,33,43}, -{38,33,44}, -{38,33,45}, -{38,33,46}, -{38,33,47}, -{38,33,48}, -{38,34,-73}, -{38,34,-72}, -{38,34,-71}, -{38,34,-70}, -{38,34,-69}, -{38,34,-68}, -{38,34,-67}, -{38,34,-66}, -{38,34,-65}, -{38,34,-64}, -{38,34,-63}, -{38,34,-62}, -{38,34,-61}, -{38,34,-60}, -{38,34,-59}, -{38,34,-58}, -{38,34,-57}, -{38,34,-56}, -{38,34,-55}, -{38,34,-54}, -{38,34,-53}, -{38,34,-52}, -{38,34,-51}, -{38,34,-50}, -{38,34,-49}, -{38,34,-48}, -{38,34,-47}, -{38,34,-46}, -{38,34,-45}, -{38,34,-44}, -{38,34,-43}, -{38,34,-42}, -{38,34,-41}, -{38,34,-40}, -{38,34,-39}, -{38,34,-38}, -{38,34,-37}, -{38,34,-36}, -{38,34,-35}, -{38,34,-34}, -{38,34,-33}, -{38,34,-32}, -{38,34,-31}, -{38,34,-30}, -{38,34,-29}, -{38,34,-28}, -{38,34,-27}, -{38,34,-26}, -{38,34,-25}, -{38,34,-24}, -{38,34,-23}, -{38,34,-22}, -{38,34,-21}, -{38,34,-20}, -{38,34,-19}, -{38,34,-18}, -{38,34,-17}, -{38,34,-16}, -{38,34,-15}, -{38,34,-14}, -{38,34,-13}, -{38,34,-12}, -{38,34,-11}, -{38,34,-10}, -{38,34,-9}, -{38,34,-8}, -{38,34,-7}, -{38,34,-6}, -{38,34,-5}, -{38,34,-4}, -{38,34,-3}, -{38,34,-2}, -{38,34,-1}, -{38,34,0}, -{38,34,1}, -{38,34,2}, -{38,34,3}, -{38,34,4}, -{38,34,5}, -{38,34,6}, -{38,34,7}, -{38,34,8}, -{38,34,9}, -{38,34,10}, -{38,34,11}, -{38,34,12}, -{38,34,13}, -{38,34,14}, -{38,34,15}, -{38,34,16}, -{38,34,17}, -{38,34,18}, -{38,34,19}, -{38,34,20}, -{38,34,21}, -{38,34,22}, -{38,34,23}, -{38,34,24}, -{38,34,25}, -{38,34,26}, -{38,34,27}, -{38,34,28}, -{38,34,29}, -{38,34,30}, -{38,34,31}, -{38,34,32}, -{38,34,33}, -{38,34,34}, -{38,34,35}, -{38,34,36}, -{38,34,37}, -{38,34,38}, -{38,34,39}, -{38,34,40}, -{38,34,41}, -{38,34,42}, -{38,34,43}, -{38,34,44}, -{38,34,45}, -{38,34,46}, -{38,34,47}, -{38,34,48}, -{38,35,-74}, -{38,35,-73}, -{38,35,-72}, -{38,35,-71}, -{38,35,-70}, -{38,35,-69}, -{38,35,-68}, -{38,35,-67}, -{38,35,-66}, -{38,35,-65}, -{38,35,-64}, -{38,35,-63}, -{38,35,-62}, -{38,35,-61}, -{38,35,-60}, -{38,35,-59}, -{38,35,-58}, -{38,35,-57}, -{38,35,-56}, -{38,35,-55}, -{38,35,-54}, -{38,35,-53}, -{38,35,-52}, -{38,35,-51}, -{38,35,-50}, -{38,35,-49}, -{38,35,-48}, -{38,35,-47}, -{38,35,-46}, -{38,35,-45}, -{38,35,-44}, -{38,35,-43}, -{38,35,-42}, -{38,35,-41}, -{38,35,-40}, -{38,35,-39}, -{38,35,-38}, -{38,35,-37}, -{38,35,-36}, -{38,35,-35}, -{38,35,-34}, -{38,35,-33}, -{38,35,-32}, -{38,35,-31}, -{38,35,-30}, -{38,35,-29}, -{38,35,-28}, -{38,35,-27}, -{38,35,-26}, -{38,35,-25}, -{38,35,-24}, -{38,35,-23}, -{38,35,-22}, -{38,35,-21}, -{38,35,-20}, -{38,35,-19}, -{38,35,-18}, -{38,35,-17}, -{38,35,-16}, -{38,35,-15}, -{38,35,-14}, -{38,35,-13}, -{38,35,-12}, -{38,35,-11}, -{38,35,-10}, -{38,35,-9}, -{38,35,-8}, -{38,35,-7}, -{38,35,-6}, -{38,35,-5}, -{38,35,-4}, -{38,35,-3}, -{38,35,-2}, -{38,35,-1}, -{38,35,0}, -{38,35,1}, -{38,35,2}, -{38,35,3}, -{38,35,4}, -{38,35,5}, -{38,35,6}, -{38,35,7}, -{38,35,8}, -{38,35,9}, -{38,35,10}, -{38,35,11}, -{38,35,12}, -{38,35,13}, -{38,35,14}, -{38,35,15}, -{38,35,16}, -{38,35,17}, -{38,35,18}, -{38,35,19}, -{38,35,20}, -{38,35,21}, -{38,35,22}, -{38,35,23}, -{38,35,24}, -{38,35,25}, -{38,35,26}, -{38,35,27}, -{38,35,28}, -{38,35,29}, -{38,35,30}, -{38,35,31}, -{38,35,32}, -{38,35,33}, -{38,35,34}, -{38,35,35}, -{38,35,36}, -{38,35,37}, -{38,35,38}, -{38,35,39}, -{38,35,40}, -{38,35,41}, -{38,35,42}, -{38,35,43}, -{38,35,44}, -{38,35,45}, -{38,35,46}, -{38,35,47}, -{38,35,48}, -{38,35,49}, -{38,36,-75}, -{38,36,-74}, -{38,36,-73}, -{38,36,-72}, -{38,36,-71}, -{38,36,-70}, -{38,36,-69}, -{38,36,-68}, -{38,36,-67}, -{38,36,-66}, -{38,36,-65}, -{38,36,-64}, -{38,36,-63}, -{38,36,-62}, -{38,36,-61}, -{38,36,-60}, -{38,36,-59}, -{38,36,-58}, -{38,36,-57}, -{38,36,-56}, -{38,36,-55}, -{38,36,-54}, -{38,36,-53}, -{38,36,-52}, -{38,36,-51}, -{38,36,-50}, -{38,36,-49}, -{38,36,-48}, -{38,36,-47}, -{38,36,-46}, -{38,36,-45}, -{38,36,-44}, -{38,36,-43}, -{38,36,-42}, -{38,36,-41}, -{38,36,-40}, -{38,36,-39}, -{38,36,-38}, -{38,36,-37}, -{38,36,-36}, -{38,36,-35}, -{38,36,-34}, -{38,36,-33}, -{38,36,-32}, -{38,36,-31}, -{38,36,-30}, -{38,36,-29}, -{38,36,-28}, -{38,36,-27}, -{38,36,-26}, -{38,36,-25}, -{38,36,-24}, -{38,36,-23}, -{38,36,-22}, -{38,36,-21}, -{38,36,-20}, -{38,36,-19}, -{38,36,-18}, -{38,36,-17}, -{38,36,-16}, -{38,36,-15}, -{38,36,-14}, -{38,36,-13}, -{38,36,-12}, -{38,36,-11}, -{38,36,-10}, -{38,36,-9}, -{38,36,-8}, -{38,36,-7}, -{38,36,-6}, -{38,36,-5}, -{38,36,-4}, -{38,36,-3}, -{38,36,-2}, -{38,36,-1}, -{38,36,0}, -{38,36,1}, -{38,36,2}, -{38,36,3}, -{38,36,4}, -{38,36,5}, -{38,36,6}, -{38,36,7}, -{38,36,8}, -{38,36,9}, -{38,36,10}, -{38,36,11}, -{38,36,12}, -{38,36,13}, -{38,36,14}, -{38,36,15}, -{38,36,16}, -{38,36,17}, -{38,36,18}, -{38,36,19}, -{38,36,20}, -{38,36,21}, -{38,36,22}, -{38,36,23}, -{38,36,24}, -{38,36,25}, -{38,36,26}, -{38,36,27}, -{38,36,28}, -{38,36,29}, -{38,36,30}, -{38,36,31}, -{38,36,32}, -{38,36,33}, -{38,36,34}, -{38,36,35}, -{38,36,36}, -{38,36,37}, -{38,36,38}, -{38,36,39}, -{38,36,40}, -{38,36,41}, -{38,36,42}, -{38,36,43}, -{38,36,44}, -{38,36,45}, -{38,36,46}, -{38,36,47}, -{38,36,48}, -{38,36,49}, -{38,37,-76}, -{38,37,-75}, -{38,37,-74}, -{38,37,-73}, -{38,37,-72}, -{38,37,-71}, -{38,37,-70}, -{38,37,-69}, -{38,37,-68}, -{38,37,-67}, -{38,37,-66}, -{38,37,-65}, -{38,37,-64}, -{38,37,-63}, -{38,37,-62}, -{38,37,-61}, -{38,37,-60}, -{38,37,-59}, -{38,37,-58}, -{38,37,-57}, -{38,37,-56}, -{38,37,-55}, -{38,37,-54}, -{38,37,-53}, -{38,37,-52}, -{38,37,-51}, -{38,37,-50}, -{38,37,-49}, -{38,37,-48}, -{38,37,-47}, -{38,37,-46}, -{38,37,-45}, -{38,37,-44}, -{38,37,-43}, -{38,37,-42}, -{38,37,-41}, -{38,37,-40}, -{38,37,-39}, -{38,37,-38}, -{38,37,-37}, -{38,37,-36}, -{38,37,-35}, -{38,37,-34}, -{38,37,-33}, -{38,37,-32}, -{38,37,-31}, -{38,37,-30}, -{38,37,-29}, -{38,37,-28}, -{38,37,-27}, -{38,37,-26}, -{38,37,-25}, -{38,37,-24}, -{38,37,-23}, -{38,37,-22}, -{38,37,-21}, -{38,37,-20}, -{38,37,-19}, -{38,37,-18}, -{38,37,-17}, -{38,37,-16}, -{38,37,-15}, -{38,37,-14}, -{38,37,-13}, -{38,37,-12}, -{38,37,-11}, -{38,37,-10}, -{38,37,-9}, -{38,37,-8}, -{38,37,-7}, -{38,37,-6}, -{38,37,-5}, -{38,37,-4}, -{38,37,-3}, -{38,37,-2}, -{38,37,-1}, -{38,37,0}, -{38,37,1}, -{38,37,2}, -{38,37,3}, -{38,37,4}, -{38,37,5}, -{38,37,6}, -{38,37,7}, -{38,37,8}, -{38,37,9}, -{38,37,10}, -{38,37,11}, -{38,37,12}, -{38,37,13}, -{38,37,14}, -{38,37,15}, -{38,37,16}, -{38,37,17}, -{38,37,18}, -{38,37,19}, -{38,37,20}, -{38,37,21}, -{38,37,22}, -{38,37,23}, -{38,37,24}, -{38,37,25}, -{38,37,26}, -{38,37,27}, -{38,37,28}, -{38,37,29}, -{38,37,30}, -{38,37,31}, -{38,37,32}, -{38,37,33}, -{38,37,34}, -{38,37,35}, -{38,37,36}, -{38,37,37}, -{38,37,38}, -{38,37,39}, -{38,37,40}, -{38,37,41}, -{38,37,42}, -{38,37,43}, -{38,37,44}, -{38,37,45}, -{38,37,46}, -{38,37,47}, -{38,37,48}, -{38,37,49}, -{38,38,-77}, -{38,38,-76}, -{38,38,-75}, -{38,38,-74}, -{38,38,-73}, -{38,38,-72}, -{38,38,-71}, -{38,38,-70}, -{38,38,-69}, -{38,38,-68}, -{38,38,-67}, -{38,38,-66}, -{38,38,-65}, -{38,38,-64}, -{38,38,-63}, -{38,38,-62}, -{38,38,-61}, -{38,38,-60}, -{38,38,-59}, -{38,38,-58}, -{38,38,-57}, -{38,38,-56}, -{38,38,-55}, -{38,38,-54}, -{38,38,-53}, -{38,38,-52}, -{38,38,-51}, -{38,38,-50}, -{38,38,-49}, -{38,38,-48}, -{38,38,-47}, -{38,38,-46}, -{38,38,-45}, -{38,38,-44}, -{38,38,-43}, -{38,38,-42}, -{38,38,-41}, -{38,38,-40}, -{38,38,-39}, -{38,38,-38}, -{38,38,-37}, -{38,38,-36}, -{38,38,-35}, -{38,38,-34}, -{38,38,-33}, -{38,38,-32}, -{38,38,-31}, -{38,38,-30}, -{38,38,-29}, -{38,38,-28}, -{38,38,-27}, -{38,38,-26}, -{38,38,-25}, -{38,38,-24}, -{38,38,-23}, -{38,38,-22}, -{38,38,-21}, -{38,38,-20}, -{38,38,-19}, -{38,38,-18}, -{38,38,-17}, -{38,38,-16}, -{38,38,-15}, -{38,38,-14}, -{38,38,-13}, -{38,38,-12}, -{38,38,-11}, -{38,38,-10}, -{38,38,-9}, -{38,38,-8}, -{38,38,-7}, -{38,38,-6}, -{38,38,-5}, -{38,38,-4}, -{38,38,-3}, -{38,38,-2}, -{38,38,-1}, -{38,38,0}, -{38,38,1}, -{38,38,2}, -{38,38,3}, -{38,38,4}, -{38,38,5}, -{38,38,6}, -{38,38,7}, -{38,38,8}, -{38,38,9}, -{38,38,10}, -{38,38,11}, -{38,38,12}, -{38,38,13}, -{38,38,14}, -{38,38,15}, -{38,38,16}, -{38,38,17}, -{38,38,18}, -{38,38,19}, -{38,38,20}, -{38,38,21}, -{38,38,22}, -{38,38,23}, -{38,38,24}, -{38,38,25}, -{38,38,26}, -{38,38,27}, -{38,38,28}, -{38,38,29}, -{38,38,30}, -{38,38,31}, -{38,38,32}, -{38,38,33}, -{38,38,34}, -{38,38,35}, -{38,38,36}, -{38,38,37}, -{38,38,38}, -{38,38,39}, -{38,38,40}, -{38,38,41}, -{38,38,42}, -{38,38,43}, -{38,38,44}, -{38,38,45}, -{38,38,46}, -{38,38,47}, -{38,38,48}, -{38,38,49}, -{38,39,-78}, -{38,39,-77}, -{38,39,-76}, -{38,39,-75}, -{38,39,-74}, -{38,39,-73}, -{38,39,-72}, -{38,39,-71}, -{38,39,-70}, -{38,39,-69}, -{38,39,-68}, -{38,39,-67}, -{38,39,-66}, -{38,39,-65}, -{38,39,-64}, -{38,39,-63}, -{38,39,-62}, -{38,39,-61}, -{38,39,-60}, -{38,39,-59}, -{38,39,-58}, -{38,39,-57}, -{38,39,-56}, -{38,39,-55}, -{38,39,-54}, -{38,39,-53}, -{38,39,-52}, -{38,39,-51}, -{38,39,-50}, -{38,39,-49}, -{38,39,-48}, -{38,39,-47}, -{38,39,-46}, -{38,39,-45}, -{38,39,-44}, -{38,39,-43}, -{38,39,-42}, -{38,39,-41}, -{38,39,-40}, -{38,39,-39}, -{38,39,-38}, -{38,39,-37}, -{38,39,-36}, -{38,39,-35}, -{38,39,-34}, -{38,39,-33}, -{38,39,-32}, -{38,39,-31}, -{38,39,-30}, -{38,39,-29}, -{38,39,-28}, -{38,39,-27}, -{38,39,-26}, -{38,39,-25}, -{38,39,-24}, -{38,39,-23}, -{38,39,-22}, -{38,39,-21}, -{38,39,-20}, -{38,39,-19}, -{38,39,-18}, -{38,39,-17}, -{38,39,-16}, -{38,39,-15}, -{38,39,-14}, -{38,39,-13}, -{38,39,-12}, -{38,39,-11}, -{38,39,-10}, -{38,39,-9}, -{38,39,-8}, -{38,39,-7}, -{38,39,-6}, -{38,39,-5}, -{38,39,-4}, -{38,39,-3}, -{38,39,-2}, -{38,39,-1}, -{38,39,0}, -{38,39,1}, -{38,39,2}, -{38,39,3}, -{38,39,4}, -{38,39,5}, -{38,39,6}, -{38,39,7}, -{38,39,8}, -{38,39,9}, -{38,39,10}, -{38,39,11}, -{38,39,12}, -{38,39,13}, -{38,39,14}, -{38,39,15}, -{38,39,16}, -{38,39,17}, -{38,39,18}, -{38,39,19}, -{38,39,20}, -{38,39,21}, -{38,39,22}, -{38,39,23}, -{38,39,24}, -{38,39,25}, -{38,39,26}, -{38,39,27}, -{38,39,28}, -{38,39,29}, -{38,39,30}, -{38,39,31}, -{38,39,32}, -{38,39,33}, -{38,39,34}, -{38,39,35}, -{38,39,36}, -{38,39,37}, -{38,39,38}, -{38,39,39}, -{38,39,40}, -{38,39,41}, -{38,39,42}, -{38,39,43}, -{38,39,44}, -{38,39,45}, -{38,39,46}, -{38,39,47}, -{38,39,48}, -{38,39,49}, -{38,40,-79}, -{38,40,-78}, -{38,40,-77}, -{38,40,-76}, -{38,40,-75}, -{38,40,-74}, -{38,40,-73}, -{38,40,-72}, -{38,40,-71}, -{38,40,-70}, -{38,40,-69}, -{38,40,-68}, -{38,40,-67}, -{38,40,-66}, -{38,40,-65}, -{38,40,-64}, -{38,40,-63}, -{38,40,-62}, -{38,40,-61}, -{38,40,-60}, -{38,40,-59}, -{38,40,-58}, -{38,40,-57}, -{38,40,-56}, -{38,40,-55}, -{38,40,-54}, -{38,40,-53}, -{38,40,-52}, -{38,40,-51}, -{38,40,-50}, -{38,40,-49}, -{38,40,-48}, -{38,40,-47}, -{38,40,-46}, -{38,40,-45}, -{38,40,-44}, -{38,40,-43}, -{38,40,-42}, -{38,40,-41}, -{38,40,-40}, -{38,40,-39}, -{38,40,-38}, -{38,40,-37}, -{38,40,-36}, -{38,40,-35}, -{38,40,-34}, -{38,40,-33}, -{38,40,-32}, -{38,40,-31}, -{38,40,-30}, -{38,40,-29}, -{38,40,-28}, -{38,40,-27}, -{38,40,-26}, -{38,40,-25}, -{38,40,-24}, -{38,40,-23}, -{38,40,-22}, -{38,40,-21}, -{38,40,-20}, -{38,40,-19}, -{38,40,-18}, -{38,40,-17}, -{38,40,-16}, -{38,40,-15}, -{38,40,-14}, -{38,40,-13}, -{38,40,-12}, -{38,40,-11}, -{38,40,-10}, -{38,40,-9}, -{38,40,-8}, -{38,40,-7}, -{38,40,-6}, -{38,40,-5}, -{38,40,-4}, -{38,40,-3}, -{38,40,-2}, -{38,40,-1}, -{38,40,0}, -{38,40,1}, -{38,40,2}, -{38,40,3}, -{38,40,4}, -{38,40,5}, -{38,40,6}, -{38,40,7}, -{38,40,8}, -{38,40,9}, -{38,40,10}, -{38,40,11}, -{38,40,12}, -{38,40,13}, -{38,40,14}, -{38,40,15}, -{38,40,16}, -{38,40,17}, -{38,40,18}, -{38,40,19}, -{38,40,20}, -{38,40,21}, -{38,40,22}, -{38,40,23}, -{38,40,24}, -{38,40,25}, -{38,40,26}, -{38,40,27}, -{38,40,28}, -{38,40,29}, -{38,40,30}, -{38,40,31}, -{38,40,32}, -{38,40,33}, -{38,40,34}, -{38,40,35}, -{38,40,36}, -{38,40,37}, -{38,40,38}, -{38,40,39}, -{38,40,40}, -{38,40,41}, -{38,40,42}, -{38,40,43}, -{38,40,44}, -{38,40,45}, -{38,40,46}, -{38,40,47}, -{38,40,48}, -{38,40,49}, -{38,41,-79}, -{38,41,-78}, -{38,41,-77}, -{38,41,-76}, -{38,41,-75}, -{38,41,-74}, -{38,41,-73}, -{38,41,-72}, -{38,41,-71}, -{38,41,-70}, -{38,41,-69}, -{38,41,-68}, -{38,41,-67}, -{38,41,-66}, -{38,41,-65}, -{38,41,-64}, -{38,41,-63}, -{38,41,-62}, -{38,41,-61}, -{38,41,-60}, -{38,41,-59}, -{38,41,-58}, -{38,41,-57}, -{38,41,-56}, -{38,41,-55}, -{38,41,-54}, -{38,41,-53}, -{38,41,-52}, -{38,41,-51}, -{38,41,-50}, -{38,41,-49}, -{38,41,-48}, -{38,41,-47}, -{38,41,-46}, -{38,41,-45}, -{38,41,-44}, -{38,41,-43}, -{38,41,-42}, -{38,41,-41}, -{38,41,-40}, -{38,41,-39}, -{38,41,-38}, -{38,41,-37}, -{38,41,-36}, -{38,41,-35}, -{38,41,-34}, -{38,41,-33}, -{38,41,-32}, -{38,41,-31}, -{38,41,-30}, -{38,41,-29}, -{38,41,-28}, -{38,41,-27}, -{38,41,-26}, -{38,41,-25}, -{38,41,-24}, -{38,41,-23}, -{38,41,-22}, -{38,41,-21}, -{38,41,-20}, -{38,41,-19}, -{38,41,-18}, -{38,41,-17}, -{38,41,-16}, -{38,41,-15}, -{38,41,-14}, -{38,41,-13}, -{38,41,-12}, -{38,41,-11}, -{38,41,-10}, -{38,41,-9}, -{38,41,-8}, -{38,41,-7}, -{38,41,-6}, -{38,41,-5}, -{38,41,-4}, -{38,41,-3}, -{38,41,-2}, -{38,41,-1}, -{38,41,0}, -{38,41,1}, -{38,41,2}, -{38,41,3}, -{38,41,4}, -{38,41,5}, -{38,41,6}, -{38,41,7}, -{38,41,8}, -{38,41,9}, -{38,41,10}, -{38,41,11}, -{38,41,12}, -{38,41,13}, -{38,41,14}, -{38,41,15}, -{38,41,16}, -{38,41,17}, -{38,41,18}, -{38,41,19}, -{38,41,20}, -{38,41,21}, -{38,41,22}, -{38,41,23}, -{38,41,24}, -{38,41,25}, -{38,41,26}, -{38,41,27}, -{38,41,28}, -{38,41,29}, -{38,41,30}, -{38,41,31}, -{38,41,32}, -{38,41,33}, -{38,41,34}, -{38,41,35}, -{38,41,36}, -{38,41,37}, -{38,41,38}, -{38,41,39}, -{38,41,40}, -{38,41,41}, -{38,41,42}, -{38,41,43}, -{38,41,44}, -{38,41,45}, -{38,41,46}, -{38,41,47}, -{38,41,48}, -{38,41,49}, -{38,42,-80}, -{38,42,-79}, -{38,42,-78}, -{38,42,-77}, -{38,42,-76}, -{38,42,-75}, -{38,42,-74}, -{38,42,-73}, -{38,42,-72}, -{38,42,-71}, -{38,42,-70}, -{38,42,-69}, -{38,42,-68}, -{38,42,-67}, -{38,42,-66}, -{38,42,-65}, -{38,42,-64}, -{38,42,-63}, -{38,42,-62}, -{38,42,-61}, -{38,42,-60}, -{38,42,-59}, -{38,42,-58}, -{38,42,-57}, -{38,42,-56}, -{38,42,-55}, -{38,42,-54}, -{38,42,-53}, -{38,42,-52}, -{38,42,-51}, -{38,42,-50}, -{38,42,-49}, -{38,42,-48}, -{38,42,-47}, -{38,42,-46}, -{38,42,-45}, -{38,42,-44}, -{38,42,-43}, -{38,42,-42}, -{38,42,-41}, -{38,42,-40}, -{38,42,-39}, -{38,42,-38}, -{38,42,-37}, -{38,42,-36}, -{38,42,-35}, -{38,42,-34}, -{38,42,-33}, -{38,42,-32}, -{38,42,-31}, -{38,42,-30}, -{38,42,-29}, -{38,42,-28}, -{38,42,-27}, -{38,42,-26}, -{38,42,-25}, -{38,42,-24}, -{38,42,-23}, -{38,42,-22}, -{38,42,-21}, -{38,42,-20}, -{38,42,-19}, -{38,42,-18}, -{38,42,-17}, -{38,42,-16}, -{38,42,-15}, -{38,42,-14}, -{38,42,-13}, -{38,42,-12}, -{38,42,-11}, -{38,42,-10}, -{38,42,-9}, -{38,42,-8}, -{38,42,-7}, -{38,42,-6}, -{38,42,-5}, -{38,42,-4}, -{38,42,-3}, -{38,42,-2}, -{38,42,-1}, -{38,42,0}, -{38,42,1}, -{38,42,2}, -{38,42,3}, -{38,42,4}, -{38,42,5}, -{38,42,6}, -{38,42,7}, -{38,42,8}, -{38,42,9}, -{38,42,10}, -{38,42,11}, -{38,42,12}, -{38,42,13}, -{38,42,14}, -{38,42,15}, -{38,42,16}, -{38,42,17}, -{38,42,18}, -{38,42,19}, -{38,42,20}, -{38,42,21}, -{38,42,22}, -{38,42,23}, -{38,42,24}, -{38,42,25}, -{38,42,26}, -{38,42,27}, -{38,42,28}, -{38,42,29}, -{38,42,30}, -{38,42,31}, -{38,42,32}, -{38,42,33}, -{38,42,34}, -{38,42,35}, -{38,42,36}, -{38,42,37}, -{38,42,38}, -{38,42,39}, -{38,42,40}, -{38,42,41}, -{38,42,42}, -{38,42,43}, -{38,42,44}, -{38,42,45}, -{38,42,46}, -{38,42,47}, -{38,42,48}, -{38,42,49}, -{38,43,-81}, -{38,43,-80}, -{38,43,-79}, -{38,43,-78}, -{38,43,-77}, -{38,43,-76}, -{38,43,-75}, -{38,43,-74}, -{38,43,-73}, -{38,43,-72}, -{38,43,-71}, -{38,43,-70}, -{38,43,-69}, -{38,43,-68}, -{38,43,-67}, -{38,43,-66}, -{38,43,-65}, -{38,43,-64}, -{38,43,-63}, -{38,43,-62}, -{38,43,-61}, -{38,43,-60}, -{38,43,-59}, -{38,43,-58}, -{38,43,-57}, -{38,43,-56}, -{38,43,-55}, -{38,43,-54}, -{38,43,-53}, -{38,43,-52}, -{38,43,-51}, -{38,43,-50}, -{38,43,-49}, -{38,43,-48}, -{38,43,-47}, -{38,43,-46}, -{38,43,-45}, -{38,43,-44}, -{38,43,-43}, -{38,43,-42}, -{38,43,-41}, -{38,43,-40}, -{38,43,-39}, -{38,43,-38}, -{38,43,-37}, -{38,43,-36}, -{38,43,-35}, -{38,43,-34}, -{38,43,-33}, -{38,43,-32}, -{38,43,-31}, -{38,43,-30}, -{38,43,-29}, -{38,43,-28}, -{38,43,-27}, -{38,43,-26}, -{38,43,-25}, -{38,43,-24}, -{38,43,-23}, -{38,43,-22}, -{38,43,-21}, -{38,43,-20}, -{38,43,-19}, -{38,43,-18}, -{38,43,-17}, -{38,43,-16}, -{38,43,-15}, -{38,43,-14}, -{38,43,-13}, -{38,43,-12}, -{38,43,-11}, -{38,43,-10}, -{38,43,-9}, -{38,43,-8}, -{38,43,-7}, -{38,43,-6}, -{38,43,-5}, -{38,43,-4}, -{38,43,-3}, -{38,43,-2}, -{38,43,-1}, -{38,43,0}, -{38,43,1}, -{38,43,2}, -{38,43,3}, -{38,43,4}, -{38,43,5}, -{38,43,6}, -{38,43,7}, -{38,43,8}, -{38,43,9}, -{38,43,10}, -{38,43,11}, -{38,43,12}, -{38,43,13}, -{38,43,14}, -{38,43,15}, -{38,43,16}, -{38,43,17}, -{38,43,18}, -{38,43,19}, -{38,43,20}, -{38,43,21}, -{38,43,22}, -{38,43,23}, -{38,43,24}, -{38,43,25}, -{38,43,26}, -{38,43,27}, -{38,43,28}, -{38,43,29}, -{38,43,30}, -{38,43,31}, -{38,43,32}, -{38,43,33}, -{38,43,34}, -{38,43,35}, -{38,43,36}, -{38,43,37}, -{38,43,38}, -{38,43,39}, -{38,43,40}, -{38,43,41}, -{38,43,42}, -{38,43,43}, -{38,43,44}, -{38,43,45}, -{38,43,46}, -{38,43,47}, -{38,43,48}, -{38,43,49}, -{38,44,-82}, -{38,44,-81}, -{38,44,-80}, -{38,44,-79}, -{38,44,-78}, -{38,44,-77}, -{38,44,-76}, -{38,44,-75}, -{38,44,-74}, -{38,44,-73}, -{38,44,-72}, -{38,44,-71}, -{38,44,-70}, -{38,44,-69}, -{38,44,-68}, -{38,44,-67}, -{38,44,-66}, -{38,44,-65}, -{38,44,-64}, -{38,44,-63}, -{38,44,-62}, -{38,44,-61}, -{38,44,-60}, -{38,44,-59}, -{38,44,-58}, -{38,44,-57}, -{38,44,-56}, -{38,44,-55}, -{38,44,-54}, -{38,44,-53}, -{38,44,-52}, -{38,44,-51}, -{38,44,-50}, -{38,44,-49}, -{38,44,-48}, -{38,44,-47}, -{38,44,-46}, -{38,44,-45}, -{38,44,-44}, -{38,44,-43}, -{38,44,-42}, -{38,44,-41}, -{38,44,-40}, -{38,44,-39}, -{38,44,-38}, -{38,44,-37}, -{38,44,-36}, -{38,44,-35}, -{38,44,-34}, -{38,44,-33}, -{38,44,-32}, -{38,44,-31}, -{38,44,-30}, -{38,44,-29}, -{38,44,-28}, -{38,44,-27}, -{38,44,-26}, -{38,44,-25}, -{38,44,-24}, -{38,44,-23}, -{38,44,-22}, -{38,44,-21}, -{38,44,-20}, -{38,44,-19}, -{38,44,-18}, -{38,44,-17}, -{38,44,-16}, -{38,44,-15}, -{38,44,-14}, -{38,44,-13}, -{38,44,-12}, -{38,44,-11}, -{38,44,-10}, -{38,44,-9}, -{38,44,-8}, -{38,44,-7}, -{38,44,-6}, -{38,44,-5}, -{38,44,-4}, -{38,44,-3}, -{38,44,-2}, -{38,44,-1}, -{38,44,0}, -{38,44,1}, -{38,44,2}, -{38,44,3}, -{38,44,4}, -{38,44,5}, -{38,44,6}, -{38,44,7}, -{38,44,8}, -{38,44,9}, -{38,44,10}, -{38,44,11}, -{38,44,12}, -{38,44,13}, -{38,44,14}, -{38,44,15}, -{38,44,16}, -{38,44,17}, -{38,44,18}, -{38,44,19}, -{38,44,20}, -{38,44,21}, -{38,44,22}, -{38,44,23}, -{38,44,24}, -{38,44,25}, -{38,44,26}, -{38,44,27}, -{38,44,28}, -{38,44,29}, -{38,44,30}, -{38,44,31}, -{38,44,32}, -{38,44,33}, -{38,44,34}, -{38,44,35}, -{38,44,36}, -{38,44,37}, -{38,44,38}, -{38,44,39}, -{38,44,40}, -{38,44,41}, -{38,44,42}, -{38,44,43}, -{38,44,44}, -{38,44,45}, -{38,44,46}, -{38,44,47}, -{38,44,48}, -{38,44,49}, -{38,44,50}, -{38,45,-83}, -{38,45,-82}, -{38,45,-81}, -{38,45,-80}, -{38,45,-79}, -{38,45,-78}, -{38,45,-77}, -{38,45,-76}, -{38,45,-75}, -{38,45,-74}, -{38,45,-73}, -{38,45,-72}, -{38,45,-71}, -{38,45,-70}, -{38,45,-69}, -{38,45,-68}, -{38,45,-67}, -{38,45,-66}, -{38,45,-65}, -{38,45,-64}, -{38,45,-63}, -{38,45,-62}, -{38,45,-61}, -{38,45,-60}, -{38,45,-59}, -{38,45,-58}, -{38,45,-57}, -{38,45,-56}, -{38,45,-55}, -{38,45,-54}, -{38,45,-53}, -{38,45,-52}, -{38,45,-51}, -{38,45,-50}, -{38,45,-49}, -{38,45,-48}, -{38,45,-47}, -{38,45,-46}, -{38,45,-45}, -{38,45,-44}, -{38,45,-43}, -{38,45,-42}, -{38,45,-41}, -{38,45,-40}, -{38,45,-39}, -{38,45,-38}, -{38,45,-37}, -{38,45,-36}, -{38,45,-35}, -{38,45,-34}, -{38,45,-33}, -{38,45,-32}, -{38,45,-31}, -{38,45,-30}, -{38,45,-29}, -{38,45,-28}, -{38,45,-27}, -{38,45,-26}, -{38,45,-25}, -{38,45,-24}, -{38,45,-23}, -{38,45,-22}, -{38,45,-21}, -{38,45,-20}, -{38,45,-19}, -{38,45,-18}, -{38,45,-17}, -{38,45,-16}, -{38,45,-15}, -{38,45,-14}, -{38,45,-13}, -{38,45,-12}, -{38,45,-11}, -{38,45,-10}, -{38,45,-9}, -{38,45,-8}, -{38,45,-7}, -{38,45,-6}, -{38,45,-5}, -{38,45,-4}, -{38,45,-3}, -{38,45,-2}, -{38,45,-1}, -{38,45,0}, -{38,45,1}, -{38,45,2}, -{38,45,3}, -{38,45,4}, -{38,45,5}, -{38,45,6}, -{38,45,7}, -{38,45,8}, -{38,45,9}, -{38,45,10}, -{38,45,11}, -{38,45,12}, -{38,45,13}, -{38,45,14}, -{38,45,15}, -{38,45,16}, -{38,45,17}, -{38,45,18}, -{38,45,19}, -{38,45,20}, -{38,45,21}, -{38,45,22}, -{38,45,23}, -{38,45,24}, -{38,45,25}, -{38,45,26}, -{38,45,27}, -{38,45,28}, -{38,45,29}, -{38,45,30}, -{38,45,31}, -{38,45,32}, -{38,45,33}, -{38,45,34}, -{38,45,35}, -{38,45,36}, -{38,45,37}, -{38,45,38}, -{38,45,39}, -{38,45,40}, -{38,45,41}, -{38,45,42}, -{38,45,43}, -{38,45,44}, -{38,45,45}, -{38,45,46}, -{38,45,47}, -{38,45,48}, -{38,45,49}, -{38,45,50}, -{38,46,-84}, -{38,46,-83}, -{38,46,-82}, -{38,46,-81}, -{38,46,-80}, -{38,46,-79}, -{38,46,-78}, -{38,46,-77}, -{38,46,-76}, -{38,46,-75}, -{38,46,-74}, -{38,46,-73}, -{38,46,-72}, -{38,46,-71}, -{38,46,-70}, -{38,46,-69}, -{38,46,-68}, -{38,46,-67}, -{38,46,-66}, -{38,46,-65}, -{38,46,-64}, -{38,46,-63}, -{38,46,-62}, -{38,46,-61}, -{38,46,-60}, -{38,46,-59}, -{38,46,-58}, -{38,46,-57}, -{38,46,-56}, -{38,46,-55}, -{38,46,-54}, -{38,46,-53}, -{38,46,-52}, -{38,46,-51}, -{38,46,-50}, -{38,46,-49}, -{38,46,-48}, -{38,46,-47}, -{38,46,-46}, -{38,46,-45}, -{38,46,-44}, -{38,46,-43}, -{38,46,-42}, -{38,46,-41}, -{38,46,-40}, -{38,46,-39}, -{38,46,-38}, -{38,46,-37}, -{38,46,-36}, -{38,46,-35}, -{38,46,-34}, -{38,46,-33}, -{38,46,-32}, -{38,46,-31}, -{38,46,-30}, -{38,46,-29}, -{38,46,-28}, -{38,46,-27}, -{38,46,-26}, -{38,46,-25}, -{38,46,-24}, -{38,46,-23}, -{38,46,-22}, -{38,46,-21}, -{38,46,-20}, -{38,46,-19}, -{38,46,-18}, -{38,46,-17}, -{38,46,-16}, -{38,46,-15}, -{38,46,-14}, -{38,46,-13}, -{38,46,-12}, -{38,46,-11}, -{38,46,-10}, -{38,46,-9}, -{38,46,-8}, -{38,46,-7}, -{38,46,-6}, -{38,46,-5}, -{38,46,-4}, -{38,46,-3}, -{38,46,-2}, -{38,46,-1}, -{38,46,0}, -{38,46,1}, -{38,46,2}, -{38,46,3}, -{38,46,4}, -{38,46,5}, -{38,46,6}, -{38,46,7}, -{38,46,8}, -{38,46,9}, -{38,46,10}, -{38,46,11}, -{38,46,12}, -{38,46,13}, -{38,46,14}, -{38,46,15}, -{38,46,16}, -{38,46,17}, -{38,46,18}, -{38,46,19}, -{38,46,20}, -{38,46,21}, -{38,46,22}, -{38,46,23}, -{38,46,24}, -{38,46,25}, -{38,46,26}, -{38,46,27}, -{38,46,28}, -{38,46,29}, -{38,46,30}, -{38,46,31}, -{38,46,32}, -{38,46,33}, -{38,46,34}, -{38,46,35}, -{38,46,36}, -{38,46,37}, -{38,46,38}, -{38,46,39}, -{38,46,40}, -{38,46,41}, -{38,46,42}, -{38,46,43}, -{38,46,44}, -{38,46,45}, -{38,46,46}, -{38,46,47}, -{38,46,48}, -{38,46,49}, -{38,46,50}, -{38,47,-85}, -{38,47,-84}, -{38,47,-83}, -{38,47,-82}, -{38,47,-81}, -{38,47,-80}, -{38,47,-79}, -{38,47,-78}, -{38,47,-77}, -{38,47,-76}, -{38,47,-75}, -{38,47,-74}, -{38,47,-73}, -{38,47,-72}, -{38,47,-71}, -{38,47,-70}, -{38,47,-69}, -{38,47,-68}, -{38,47,-67}, -{38,47,-66}, -{38,47,-65}, -{38,47,-64}, -{38,47,-63}, -{38,47,-62}, -{38,47,-61}, -{38,47,-60}, -{38,47,-59}, -{38,47,-58}, -{38,47,-57}, -{38,47,-56}, -{38,47,-55}, -{38,47,-54}, -{38,47,-53}, -{38,47,-52}, -{38,47,-51}, -{38,47,-50}, -{38,47,-49}, -{38,47,-48}, -{38,47,-47}, -{38,47,-46}, -{38,47,-45}, -{38,47,-44}, -{38,47,-43}, -{38,47,-42}, -{38,47,-41}, -{38,47,-40}, -{38,47,-39}, -{38,47,-38}, -{38,47,-37}, -{38,47,-36}, -{38,47,-35}, -{38,47,-34}, -{38,47,-33}, -{38,47,-32}, -{38,47,-31}, -{38,47,-30}, -{38,47,-29}, -{38,47,-28}, -{38,47,-27}, -{38,47,-26}, -{38,47,-25}, -{38,47,-24}, -{38,47,-23}, -{38,47,-22}, -{38,47,-21}, -{38,47,-20}, -{38,47,-19}, -{38,47,-18}, -{38,47,-17}, -{38,47,-16}, -{38,47,-15}, -{38,47,-14}, -{38,47,-13}, -{38,47,-12}, -{38,47,-11}, -{38,47,-10}, -{38,47,-9}, -{38,47,-8}, -{38,47,-7}, -{38,47,-6}, -{38,47,-5}, -{38,47,-4}, -{38,47,-3}, -{38,47,-2}, -{38,47,-1}, -{38,47,0}, -{38,47,1}, -{38,47,2}, -{38,47,3}, -{38,47,4}, -{38,47,5}, -{38,47,6}, -{38,47,7}, -{38,47,8}, -{38,47,9}, -{38,47,10}, -{38,47,11}, -{38,47,12}, -{38,47,13}, -{38,47,14}, -{38,47,15}, -{38,47,16}, -{38,47,17}, -{38,47,18}, -{38,47,19}, -{38,47,20}, -{38,47,21}, -{38,47,22}, -{38,47,23}, -{38,47,24}, -{38,47,25}, -{38,47,26}, -{38,47,27}, -{38,47,28}, -{38,47,29}, -{38,47,30}, -{38,47,31}, -{38,47,32}, -{38,47,33}, -{38,47,34}, -{38,47,35}, -{38,47,36}, -{38,47,37}, -{38,47,38}, -{38,47,39}, -{38,47,40}, -{38,47,41}, -{38,47,42}, -{38,47,43}, -{38,47,44}, -{38,47,45}, -{38,47,46}, -{38,47,47}, -{38,47,48}, -{38,47,49}, -{38,47,50}, -{38,48,-86}, -{38,48,-85}, -{38,48,-84}, -{38,48,-83}, -{38,48,-82}, -{38,48,-81}, -{38,48,-80}, -{38,48,-79}, -{38,48,-78}, -{38,48,-77}, -{38,48,-76}, -{38,48,-75}, -{38,48,-74}, -{38,48,-73}, -{38,48,-72}, -{38,48,-71}, -{38,48,-70}, -{38,48,-69}, -{38,48,-68}, -{38,48,-67}, -{38,48,-66}, -{38,48,-65}, -{38,48,-64}, -{38,48,-63}, -{38,48,-62}, -{38,48,-61}, -{38,48,-60}, -{38,48,-59}, -{38,48,-58}, -{38,48,-57}, -{38,48,-56}, -{38,48,-55}, -{38,48,-54}, -{38,48,-53}, -{38,48,-52}, -{38,48,-51}, -{38,48,-50}, -{38,48,-49}, -{38,48,-48}, -{38,48,-47}, -{38,48,-46}, -{38,48,-45}, -{38,48,-44}, -{38,48,-43}, -{38,48,-42}, -{38,48,-41}, -{38,48,-40}, -{38,48,-39}, -{38,48,-38}, -{38,48,-37}, -{38,48,-36}, -{38,48,-35}, -{38,48,-34}, -{38,48,-33}, -{38,48,-32}, -{38,48,-31}, -{38,48,-30}, -{38,48,-29}, -{38,48,-28}, -{38,48,-27}, -{38,48,-26}, -{38,48,-25}, -{38,48,-24}, -{38,48,-23}, -{38,48,-22}, -{38,48,-21}, -{38,48,-20}, -{38,48,-19}, -{38,48,-18}, -{38,48,-17}, -{38,48,-16}, -{38,48,-15}, -{38,48,-14}, -{38,48,-13}, -{38,48,-12}, -{38,48,-11}, -{38,48,-10}, -{38,48,-9}, -{38,48,-8}, -{38,48,-7}, -{38,48,-6}, -{38,48,-5}, -{38,48,-4}, -{38,48,-3}, -{38,48,-2}, -{38,48,-1}, -{38,48,0}, -{38,48,1}, -{38,48,2}, -{38,48,3}, -{38,48,4}, -{38,48,5}, -{38,48,6}, -{38,48,7}, -{38,48,8}, -{38,48,9}, -{38,48,10}, -{38,48,11}, -{38,48,12}, -{38,48,13}, -{38,48,14}, -{38,48,15}, -{38,48,16}, -{38,48,17}, -{38,48,18}, -{38,48,19}, -{38,48,20}, -{38,48,21}, -{38,48,22}, -{38,48,23}, -{38,48,24}, -{38,48,25}, -{38,48,26}, -{38,48,27}, -{38,48,28}, -{38,48,29}, -{38,48,30}, -{38,48,31}, -{38,48,32}, -{38,48,33}, -{38,48,34}, -{38,48,35}, -{38,48,36}, -{38,48,37}, -{38,48,38}, -{38,48,39}, -{38,48,40}, -{38,48,41}, -{38,48,42}, -{38,48,43}, -{38,48,44}, -{38,48,45}, -{38,48,46}, -{38,48,47}, -{38,48,48}, -{38,48,49}, -{38,48,50}, -{38,49,-87}, -{38,49,-86}, -{38,49,-85}, -{38,49,-84}, -{38,49,-83}, -{38,49,-82}, -{38,49,-81}, -{38,49,-80}, -{38,49,-79}, -{38,49,-78}, -{38,49,-77}, -{38,49,-76}, -{38,49,-75}, -{38,49,-74}, -{38,49,-73}, -{38,49,-72}, -{38,49,-71}, -{38,49,-70}, -{38,49,-69}, -{38,49,-68}, -{38,49,-67}, -{38,49,-66}, -{38,49,-65}, -{38,49,-64}, -{38,49,-63}, -{38,49,-62}, -{38,49,-61}, -{38,49,-60}, -{38,49,-59}, -{38,49,-58}, -{38,49,-57}, -{38,49,-56}, -{38,49,-55}, -{38,49,-54}, -{38,49,-53}, -{38,49,-52}, -{38,49,-51}, -{38,49,-50}, -{38,49,-49}, -{38,49,-48}, -{38,49,-47}, -{38,49,-46}, -{38,49,-45}, -{38,49,-44}, -{38,49,-43}, -{38,49,-42}, -{38,49,-41}, -{38,49,-40}, -{38,49,-39}, -{38,49,-38}, -{38,49,-37}, -{38,49,-36}, -{38,49,-35}, -{38,49,-34}, -{38,49,-33}, -{38,49,-32}, -{38,49,-31}, -{38,49,-30}, -{38,49,-29}, -{38,49,-28}, -{38,49,-27}, -{38,49,-26}, -{38,49,-25}, -{38,49,-24}, -{38,49,-23}, -{38,49,-22}, -{38,49,-21}, -{38,49,-20}, -{38,49,-19}, -{38,49,-18}, -{38,49,-17}, -{38,49,-16}, -{38,49,-15}, -{38,49,-14}, -{38,49,-13}, -{38,49,-12}, -{38,49,-11}, -{38,49,-10}, -{38,49,-9}, -{38,49,-8}, -{38,49,-7}, -{38,49,-6}, -{38,49,-5}, -{38,49,-4}, -{38,49,-3}, -{38,49,-2}, -{38,49,-1}, -{38,49,0}, -{38,49,1}, -{38,49,2}, -{38,49,3}, -{38,49,4}, -{38,49,5}, -{38,49,6}, -{38,49,7}, -{38,49,8}, -{38,49,9}, -{38,49,10}, -{38,49,11}, -{38,49,12}, -{38,49,13}, -{38,49,14}, -{38,49,15}, -{38,49,16}, -{38,49,17}, -{38,49,18}, -{38,49,19}, -{38,49,20}, -{38,49,21}, -{38,49,22}, -{38,49,23}, -{38,49,24}, -{38,49,25}, -{38,49,26}, -{38,49,27}, -{38,49,28}, -{38,49,29}, -{38,49,30}, -{38,49,31}, -{38,49,32}, -{38,49,33}, -{38,49,34}, -{38,49,35}, -{38,49,36}, -{38,49,37}, -{38,49,38}, -{38,49,39}, -{38,49,40}, -{38,49,41}, -{38,49,42}, -{38,49,43}, -{38,49,44}, -{38,49,45}, -{38,49,46}, -{38,49,47}, -{38,49,48}, -{38,49,49}, -{38,49,50}, -{38,50,-88}, -{38,50,-87}, -{38,50,-86}, -{38,50,-85}, -{38,50,-84}, -{38,50,-83}, -{38,50,-82}, -{38,50,-81}, -{38,50,-80}, -{38,50,-79}, -{38,50,-78}, -{38,50,-77}, -{38,50,-76}, -{38,50,-75}, -{38,50,-74}, -{38,50,-73}, -{38,50,-72}, -{38,50,-71}, -{38,50,-70}, -{38,50,-69}, -{38,50,-68}, -{38,50,-67}, -{38,50,-66}, -{38,50,-65}, -{38,50,-64}, -{38,50,-63}, -{38,50,-62}, -{38,50,-61}, -{38,50,-60}, -{38,50,-59}, -{38,50,-58}, -{38,50,-57}, -{38,50,-56}, -{38,50,-55}, -{38,50,-54}, -{38,50,-53}, -{38,50,-52}, -{38,50,-51}, -{38,50,-50}, -{38,50,-49}, -{38,50,-48}, -{38,50,-47}, -{38,50,-46}, -{38,50,-45}, -{38,50,-44}, -{38,50,-43}, -{38,50,-42}, -{38,50,-41}, -{38,50,-40}, -{38,50,-39}, -{38,50,-38}, -{38,50,-37}, -{38,50,-36}, -{38,50,-35}, -{38,50,-34}, -{38,50,-33}, -{38,50,-32}, -{38,50,-31}, -{38,50,-30}, -{38,50,-29}, -{38,50,-28}, -{38,50,-27}, -{38,50,-26}, -{38,50,-25}, -{38,50,-24}, -{38,50,-23}, -{38,50,-22}, -{38,50,-21}, -{38,50,-20}, -{38,50,-19}, -{38,50,-18}, -{38,50,-17}, -{38,50,-16}, -{38,50,-15}, -{38,50,-14}, -{38,50,-13}, -{38,50,-12}, -{38,50,-11}, -{38,50,-10}, -{38,50,-9}, -{38,50,-8}, -{38,50,-7}, -{38,50,-6}, -{38,50,-5}, -{38,50,-4}, -{38,50,-3}, -{38,50,-2}, -{38,50,-1}, -{38,50,0}, -{38,50,1}, -{38,50,2}, -{38,50,3}, -{38,50,4}, -{38,50,5}, -{38,50,6}, -{38,50,7}, -{38,50,8}, -{38,50,9}, -{38,50,10}, -{38,50,11}, -{38,50,12}, -{38,50,13}, -{38,50,14}, -{38,50,15}, -{38,50,16}, -{38,50,17}, -{38,50,18}, -{38,50,19}, -{38,50,20}, -{38,50,21}, -{38,50,22}, -{38,50,23}, -{38,50,24}, -{38,50,25}, -{38,50,26}, -{38,50,27}, -{38,50,28}, -{38,50,29}, -{38,50,30}, -{38,50,31}, -{38,50,32}, -{38,50,33}, -{38,50,34}, -{38,50,35}, -{38,50,36}, -{38,50,37}, -{38,50,38}, -{38,50,39}, -{38,50,40}, -{38,50,41}, -{38,50,42}, -{38,50,43}, -{38,50,44}, -{38,50,45}, -{38,50,46}, -{38,50,47}, -{38,50,48}, -{38,50,49}, -{38,50,50}, -{38,51,-88}, -{38,51,-87}, -{38,51,-86}, -{38,51,-85}, -{38,51,-84}, -{38,51,-83}, -{38,51,-82}, -{38,51,-81}, -{38,51,-80}, -{38,51,-79}, -{38,51,-78}, -{38,51,-77}, -{38,51,-76}, -{38,51,-75}, -{38,51,-74}, -{38,51,-73}, -{38,51,-72}, -{38,51,-71}, -{38,51,-70}, -{38,51,-69}, -{38,51,-68}, -{38,51,-67}, -{38,51,-66}, -{38,51,-65}, -{38,51,-64}, -{38,51,-63}, -{38,51,-62}, -{38,51,-61}, -{38,51,-60}, -{38,51,-59}, -{38,51,-58}, -{38,51,-57}, -{38,51,-56}, -{38,51,-55}, -{38,51,-54}, -{38,51,-53}, -{38,51,-52}, -{38,51,-51}, -{38,51,-50}, -{38,51,-49}, -{38,51,-48}, -{38,51,-47}, -{38,51,-46}, -{38,51,-45}, -{38,51,-44}, -{38,51,-43}, -{38,51,-42}, -{38,51,-41}, -{38,51,-40}, -{38,51,-39}, -{38,51,-38}, -{38,51,-37}, -{38,51,-36}, -{38,51,-35}, -{38,51,-34}, -{38,51,-33}, -{38,51,-32}, -{38,51,-31}, -{38,51,-30}, -{38,51,-29}, -{38,51,-28}, -{38,51,-27}, -{38,51,-26}, -{38,51,-25}, -{38,51,-24}, -{38,51,-23}, -{38,51,-22}, -{38,51,-21}, -{38,51,-20}, -{38,51,-19}, -{38,51,-18}, -{38,51,-17}, -{38,51,-16}, -{38,51,-15}, -{38,51,-14}, -{38,51,-13}, -{38,51,-12}, -{38,51,-11}, -{38,51,-10}, -{38,51,-9}, -{38,51,-8}, -{38,51,-7}, -{38,51,-6}, -{38,51,-5}, -{38,51,-4}, -{38,51,-3}, -{38,51,-2}, -{38,51,-1}, -{38,51,0}, -{38,51,1}, -{38,51,2}, -{38,51,3}, -{38,51,4}, -{38,51,5}, -{38,51,6}, -{38,51,7}, -{38,51,8}, -{38,51,9}, -{38,51,10}, -{38,51,11}, -{38,51,12}, -{38,51,13}, -{38,51,14}, -{38,51,15}, -{38,51,16}, -{38,51,17}, -{38,51,18}, -{38,51,19}, -{38,51,20}, -{38,51,21}, -{38,51,22}, -{38,51,23}, -{38,51,24}, -{38,51,25}, -{38,51,26}, -{38,51,27}, -{38,51,28}, -{38,51,29}, -{38,51,30}, -{38,51,31}, -{38,51,32}, -{38,51,33}, -{38,51,34}, -{38,51,35}, -{38,51,36}, -{38,51,37}, -{38,51,38}, -{38,51,39}, -{38,51,40}, -{38,51,41}, -{38,51,42}, -{38,51,43}, -{38,51,44}, -{38,51,45}, -{38,51,46}, -{38,51,47}, -{38,51,48}, -{38,51,49}, -{38,51,50}, -{38,52,-89}, -{38,52,-88}, -{38,52,-87}, -{38,52,-86}, -{38,52,-85}, -{38,52,-84}, -{38,52,-83}, -{38,52,-82}, -{38,52,-81}, -{38,52,-80}, -{38,52,-79}, -{38,52,-78}, -{38,52,-77}, -{38,52,-76}, -{38,52,-75}, -{38,52,-74}, -{38,52,-73}, -{38,52,-72}, -{38,52,-71}, -{38,52,-70}, -{38,52,-69}, -{38,52,-68}, -{38,52,-67}, -{38,52,-66}, -{38,52,-65}, -{38,52,-64}, -{38,52,-63}, -{38,52,-62}, -{38,52,-61}, -{38,52,-60}, -{38,52,-59}, -{38,52,-58}, -{38,52,-57}, -{38,52,-56}, -{38,52,-55}, -{38,52,-54}, -{38,52,-53}, -{38,52,-52}, -{38,52,-51}, -{38,52,-50}, -{38,52,-49}, -{38,52,-48}, -{38,52,-47}, -{38,52,-46}, -{38,52,-45}, -{38,52,-44}, -{38,52,-43}, -{38,52,-42}, -{38,52,-41}, -{38,52,-40}, -{38,52,-39}, -{38,52,-38}, -{38,52,-37}, -{38,52,-36}, -{38,52,-35}, -{38,52,-34}, -{38,52,-33}, -{38,52,-32}, -{38,52,-31}, -{38,52,-30}, -{38,52,-29}, -{38,52,-28}, -{38,52,-27}, -{38,52,-26}, -{38,52,-25}, -{38,52,-24}, -{38,52,-23}, -{38,52,-22}, -{38,52,-21}, -{38,52,-20}, -{38,52,-19}, -{38,52,-18}, -{38,52,-17}, -{38,52,-16}, -{38,52,-15}, -{38,52,-14}, -{38,52,-13}, -{38,52,-12}, -{38,52,-11}, -{38,52,-10}, -{38,52,-9}, -{38,52,-8}, -{38,52,-7}, -{38,52,-6}, -{38,52,-5}, -{38,52,-4}, -{38,52,-3}, -{38,52,-2}, -{38,52,-1}, -{38,52,0}, -{38,52,1}, -{38,52,2}, -{38,52,3}, -{38,52,4}, -{38,52,5}, -{38,52,6}, -{38,52,7}, -{38,52,8}, -{38,52,9}, -{38,52,10}, -{38,52,11}, -{38,52,12}, -{38,52,13}, -{38,52,14}, -{38,52,15}, -{38,52,16}, -{38,52,17}, -{38,52,18}, -{38,52,19}, -{38,52,20}, -{38,52,21}, -{38,52,22}, -{38,52,23}, -{38,52,24}, -{38,52,25}, -{38,52,26}, -{38,52,27}, -{38,52,28}, -{38,52,29}, -{38,52,30}, -{38,52,31}, -{38,52,32}, -{38,52,33}, -{38,52,34}, -{38,52,35}, -{38,52,36}, -{38,52,37}, -{38,52,38}, -{38,52,39}, -{38,52,40}, -{38,52,41}, -{38,52,42}, -{38,52,43}, -{38,52,44}, -{38,52,45}, -{38,52,46}, -{38,52,47}, -{38,52,48}, -{38,52,49}, -{38,52,50}, -{38,52,51}, -{38,53,-90}, -{38,53,-89}, -{38,53,-88}, -{38,53,-87}, -{38,53,-86}, -{38,53,-85}, -{38,53,-84}, -{38,53,-83}, -{38,53,-82}, -{38,53,-81}, -{38,53,-80}, -{38,53,-79}, -{38,53,-78}, -{38,53,-77}, -{38,53,-76}, -{38,53,-75}, -{38,53,-74}, -{38,53,-73}, -{38,53,-72}, -{38,53,-71}, -{38,53,-70}, -{38,53,-69}, -{38,53,-68}, -{38,53,-67}, -{38,53,-66}, -{38,53,-65}, -{38,53,-64}, -{38,53,-63}, -{38,53,-62}, -{38,53,-61}, -{38,53,-60}, -{38,53,-59}, -{38,53,-58}, -{38,53,-57}, -{38,53,-56}, -{38,53,-55}, -{38,53,-54}, -{38,53,-53}, -{38,53,-52}, -{38,53,-51}, -{38,53,-50}, -{38,53,-49}, -{38,53,-48}, -{38,53,-47}, -{38,53,-46}, -{38,53,-45}, -{38,53,-44}, -{38,53,-43}, -{38,53,-42}, -{38,53,-41}, -{38,53,-40}, -{38,53,-39}, -{38,53,-38}, -{38,53,-37}, -{38,53,-36}, -{38,53,-35}, -{38,53,-34}, -{38,53,-33}, -{38,53,-32}, -{38,53,-31}, -{38,53,-30}, -{38,53,-29}, -{38,53,-28}, -{38,53,-27}, -{38,53,-26}, -{38,53,-25}, -{38,53,-24}, -{38,53,-23}, -{38,53,-22}, -{38,53,-21}, -{38,53,-20}, -{38,53,-19}, -{38,53,-18}, -{38,53,-17}, -{38,53,-16}, -{38,53,-15}, -{38,53,-14}, -{38,53,-13}, -{38,53,-12}, -{38,53,-11}, -{38,53,-10}, -{38,53,-9}, -{38,53,-8}, -{38,53,-7}, -{38,53,-6}, -{38,53,-5}, -{38,53,-4}, -{38,53,-3}, -{38,53,-2}, -{38,53,-1}, -{38,53,0}, -{38,53,1}, -{38,53,2}, -{38,53,3}, -{38,53,4}, -{38,53,5}, -{38,53,6}, -{38,53,7}, -{38,53,8}, -{38,53,9}, -{38,53,10}, -{38,53,11}, -{38,53,12}, -{38,53,13}, -{38,53,14}, -{38,53,15}, -{38,53,16}, -{38,53,17}, -{38,53,18}, -{38,53,19}, -{38,53,20}, -{38,53,21}, -{38,53,22}, -{38,53,23}, -{38,53,24}, -{38,53,25}, -{38,53,26}, -{38,53,27}, -{38,53,28}, -{38,53,29}, -{38,53,30}, -{38,53,31}, -{38,53,32}, -{38,53,33}, -{38,53,34}, -{38,53,35}, -{38,53,36}, -{38,53,37}, -{38,53,38}, -{38,53,39}, -{38,53,40}, -{38,53,41}, -{38,53,42}, -{38,53,43}, -{38,53,44}, -{38,53,45}, -{38,53,46}, -{38,53,47}, -{38,53,48}, -{38,53,49}, -{38,53,50}, -{38,53,51}, -{38,54,-91}, -{38,54,-90}, -{38,54,-89}, -{38,54,-88}, -{38,54,-87}, -{38,54,-86}, -{38,54,-85}, -{38,54,-84}, -{38,54,-83}, -{38,54,-82}, -{38,54,-81}, -{38,54,-80}, -{38,54,-79}, -{38,54,-78}, -{38,54,-77}, -{38,54,-76}, -{38,54,-75}, -{38,54,-74}, -{38,54,-73}, -{38,54,-72}, -{38,54,-71}, -{38,54,-70}, -{38,54,-69}, -{38,54,-68}, -{38,54,-67}, -{38,54,-66}, -{38,54,-65}, -{38,54,-64}, -{38,54,-63}, -{38,54,-62}, -{38,54,-61}, -{38,54,-60}, -{38,54,-59}, -{38,54,-58}, -{38,54,-57}, -{38,54,-56}, -{38,54,-55}, -{38,54,-54}, -{38,54,-53}, -{38,54,-52}, -{38,54,-51}, -{38,54,-50}, -{38,54,-49}, -{38,54,-48}, -{38,54,-47}, -{38,54,-46}, -{38,54,-45}, -{38,54,-44}, -{38,54,-43}, -{38,54,-42}, -{38,54,-41}, -{38,54,-40}, -{38,54,-39}, -{38,54,-38}, -{38,54,-37}, -{38,54,-36}, -{38,54,-35}, -{38,54,-34}, -{38,54,-33}, -{38,54,-32}, -{38,54,-31}, -{38,54,-30}, -{38,54,-29}, -{38,54,-28}, -{38,54,-27}, -{38,54,-26}, -{38,54,-25}, -{38,54,-24}, -{38,54,-23}, -{38,54,-22}, -{38,54,-21}, -{38,54,-20}, -{38,54,-19}, -{38,54,-18}, -{38,54,-17}, -{38,54,-16}, -{38,54,-15}, -{38,54,-14}, -{38,54,-13}, -{38,54,-12}, -{38,54,-11}, -{38,54,-10}, -{38,54,-9}, -{38,54,-8}, -{38,54,-7}, -{38,54,-6}, -{38,54,-5}, -{38,54,-4}, -{38,54,-3}, -{38,54,-2}, -{38,54,-1}, -{38,54,0}, -{38,54,1}, -{38,54,2}, -{38,54,3}, -{38,54,4}, -{38,54,5}, -{38,54,6}, -{38,54,7}, -{38,54,8}, -{38,54,9}, -{38,54,10}, -{38,54,11}, -{38,54,12}, -{38,54,13}, -{38,54,14}, -{38,54,15}, -{38,54,16}, -{38,54,17}, -{38,54,18}, -{38,54,19}, -{38,54,20}, -{38,54,21}, -{38,54,22}, -{38,54,23}, -{38,54,24}, -{38,54,25}, -{38,54,26}, -{38,54,27}, -{38,54,28}, -{38,54,29}, -{38,54,30}, -{38,54,31}, -{38,54,32}, -{38,54,33}, -{38,54,34}, -{38,54,35}, -{38,54,36}, -{38,54,37}, -{38,54,38}, -{38,54,39}, -{38,54,40}, -{38,54,41}, -{38,54,42}, -{38,54,43}, -{38,54,44}, -{38,54,45}, -{38,54,46}, -{38,54,47}, -{38,54,48}, -{38,54,49}, -{38,54,50}, -{38,54,51}, -{38,55,-92}, -{38,55,-91}, -{38,55,-90}, -{38,55,-89}, -{38,55,-88}, -{38,55,-87}, -{38,55,-86}, -{38,55,-85}, -{38,55,-84}, -{38,55,-83}, -{38,55,-82}, -{38,55,-81}, -{38,55,-80}, -{38,55,-79}, -{38,55,-78}, -{38,55,-77}, -{38,55,-76}, -{38,55,-75}, -{38,55,-74}, -{38,55,-73}, -{38,55,-72}, -{38,55,-71}, -{38,55,-70}, -{38,55,-69}, -{38,55,-68}, -{38,55,-67}, -{38,55,-66}, -{38,55,-65}, -{38,55,-64}, -{38,55,-63}, -{38,55,-62}, -{38,55,-61}, -{38,55,-60}, -{38,55,-59}, -{38,55,-58}, -{38,55,-57}, -{38,55,-56}, -{38,55,-55}, -{38,55,-54}, -{38,55,-53}, -{38,55,-52}, -{38,55,-51}, -{38,55,-50}, -{38,55,-49}, -{38,55,-48}, -{38,55,-47}, -{38,55,-46}, -{38,55,-45}, -{38,55,-44}, -{38,55,-43}, -{38,55,-42}, -{38,55,-41}, -{38,55,-40}, -{38,55,-39}, -{38,55,-38}, -{38,55,-37}, -{38,55,-36}, -{38,55,-35}, -{38,55,-34}, -{38,55,-33}, -{38,55,-32}, -{38,55,-31}, -{38,55,-30}, -{38,55,-29}, -{38,55,-28}, -{38,55,-27}, -{38,55,-26}, -{38,55,-25}, -{38,55,-24}, -{38,55,-23}, -{38,55,-22}, -{38,55,-21}, -{38,55,-20}, -{38,55,-19}, -{38,55,-18}, -{38,55,-17}, -{38,55,-16}, -{38,55,-15}, -{38,55,-14}, -{38,55,-13}, -{38,55,-12}, -{38,55,-11}, -{38,55,-10}, -{38,55,-9}, -{38,55,-8}, -{38,55,-7}, -{38,55,-6}, -{38,55,-5}, -{38,55,-4}, -{38,55,-3}, -{38,55,-2}, -{38,55,-1}, -{38,55,0}, -{38,55,1}, -{38,55,2}, -{38,55,3}, -{38,55,4}, -{38,55,5}, -{38,55,6}, -{38,55,7}, -{38,55,8}, -{38,55,9}, -{38,55,10}, -{38,55,11}, -{38,55,12}, -{38,55,13}, -{38,55,14}, -{38,55,15}, -{38,55,16}, -{38,55,17}, -{38,55,18}, -{38,55,19}, -{38,55,20}, -{38,55,21}, -{38,55,22}, -{38,55,23}, -{38,55,24}, -{38,55,25}, -{38,55,26}, -{38,55,27}, -{38,55,28}, -{38,55,29}, -{38,55,30}, -{38,55,31}, -{38,55,32}, -{38,55,33}, -{38,55,34}, -{38,55,35}, -{38,55,36}, -{38,55,37}, -{38,55,38}, -{38,55,39}, -{38,55,40}, -{38,55,41}, -{38,55,42}, -{38,55,43}, -{38,55,44}, -{38,55,45}, -{38,55,46}, -{38,55,47}, -{38,55,48}, -{38,55,49}, -{38,55,50}, -{38,55,51}, -{38,56,-93}, -{38,56,-92}, -{38,56,-91}, -{38,56,-90}, -{38,56,-89}, -{38,56,-88}, -{38,56,-87}, -{38,56,-86}, -{38,56,-85}, -{38,56,-84}, -{38,56,-83}, -{38,56,-82}, -{38,56,-81}, -{38,56,-80}, -{38,56,-79}, -{38,56,-78}, -{38,56,-77}, -{38,56,-76}, -{38,56,-75}, -{38,56,-74}, -{38,56,-73}, -{38,56,-72}, -{38,56,-71}, -{38,56,-70}, -{38,56,-69}, -{38,56,-68}, -{38,56,-67}, -{38,56,-66}, -{38,56,-65}, -{38,56,-64}, -{38,56,-63}, -{38,56,-62}, -{38,56,-61}, -{38,56,-60}, -{38,56,-59}, -{38,56,-58}, -{38,56,-57}, -{38,56,-56}, -{38,56,-55}, -{38,56,-54}, -{38,56,-53}, -{38,56,-52}, -{38,56,-51}, -{38,56,-50}, -{38,56,-49}, -{38,56,-48}, -{38,56,-47}, -{38,56,-46}, -{38,56,-45}, -{38,56,-44}, -{38,56,-43}, -{38,56,-42}, -{38,56,-41}, -{38,56,-40}, -{38,56,-39}, -{38,56,-38}, -{38,56,-37}, -{38,56,-36}, -{38,56,-35}, -{38,56,-34}, -{38,56,-33}, -{38,56,-32}, -{38,56,-31}, -{38,56,-30}, -{38,56,-29}, -{38,56,-28}, -{38,56,-27}, -{38,56,-26}, -{38,56,-25}, -{38,56,-24}, -{38,56,-23}, -{38,56,-22}, -{38,56,-21}, -{38,56,-20}, -{38,56,-19}, -{38,56,-18}, -{38,56,-17}, -{38,56,-16}, -{38,56,-15}, -{38,56,-14}, -{38,56,-13}, -{38,56,-12}, -{38,56,-11}, -{38,56,-10}, -{38,56,-9}, -{38,56,-8}, -{38,56,-7}, -{38,56,-6}, -{38,56,-5}, -{38,56,-4}, -{38,56,-3}, -{38,56,-2}, -{38,56,-1}, -{38,56,0}, -{38,56,1}, -{38,56,2}, -{38,56,3}, -{38,56,4}, -{38,56,5}, -{38,56,6}, -{38,56,7}, -{38,56,8}, -{38,56,9}, -{38,56,10}, -{38,56,11}, -{38,56,12}, -{38,56,13}, -{38,56,14}, -{38,56,15}, -{38,56,16}, -{38,56,17}, -{38,56,18}, -{38,56,19}, -{38,56,20}, -{38,56,21}, -{38,56,22}, -{38,56,23}, -{38,56,24}, -{38,56,25}, -{38,56,26}, -{38,56,27}, -{38,56,28}, -{38,56,29}, -{38,56,30}, -{38,56,31}, -{38,56,32}, -{38,56,33}, -{38,56,34}, -{38,56,35}, -{38,56,36}, -{38,56,37}, -{38,56,38}, -{38,56,39}, -{38,56,40}, -{38,56,41}, -{38,56,42}, -{38,56,43}, -{38,56,44}, -{38,56,45}, -{38,56,46}, -{38,56,47}, -{38,56,48}, -{38,56,49}, -{38,56,50}, -{38,56,51}, -{38,57,-94}, -{38,57,-93}, -{38,57,-92}, -{38,57,-91}, -{38,57,-90}, -{38,57,-89}, -{38,57,-88}, -{38,57,-87}, -{38,57,-86}, -{38,57,-85}, -{38,57,-84}, -{38,57,-83}, -{38,57,-82}, -{38,57,-81}, -{38,57,-80}, -{38,57,-79}, -{38,57,-78}, -{38,57,-77}, -{38,57,-76}, -{38,57,-75}, -{38,57,-74}, -{38,57,-73}, -{38,57,-72}, -{38,57,-71}, -{38,57,-70}, -{38,57,-69}, -{38,57,-68}, -{38,57,-67}, -{38,57,-66}, -{38,57,-65}, -{38,57,-64}, -{38,57,-63}, -{38,57,-62}, -{38,57,-61}, -{38,57,-60}, -{38,57,-59}, -{38,57,-58}, -{38,57,-57}, -{38,57,-56}, -{38,57,-55}, -{38,57,-54}, -{38,57,-53}, -{38,57,-52}, -{38,57,-51}, -{38,57,-50}, -{38,57,-49}, -{38,57,-48}, -{38,57,-47}, -{38,57,-46}, -{38,57,-45}, -{38,57,-44}, -{38,57,-43}, -{38,57,-42}, -{38,57,-41}, -{38,57,-40}, -{38,57,-39}, -{38,57,-38}, -{38,57,-37}, -{38,57,-36}, -{38,57,-35}, -{38,57,-34}, -{38,57,-33}, -{38,57,-32}, -{38,57,-31}, -{38,57,-30}, -{38,57,-29}, -{38,57,-28}, -{38,57,-27}, -{38,57,-26}, -{38,57,-25}, -{38,57,-24}, -{38,57,-23}, -{38,57,-22}, -{38,57,-21}, -{38,57,-20}, -{38,57,-19}, -{38,57,-18}, -{38,57,-17}, -{38,57,-16}, -{38,57,-15}, -{38,57,-14}, -{38,57,-13}, -{38,57,-12}, -{38,57,-11}, -{38,57,-10}, -{38,57,-9}, -{38,57,-8}, -{38,57,-7}, -{38,57,-6}, -{38,57,-5}, -{38,57,-4}, -{38,57,-3}, -{38,57,-2}, -{38,57,-1}, -{38,57,0}, -{38,57,1}, -{38,57,2}, -{38,57,3}, -{38,57,4}, -{38,57,5}, -{38,57,6}, -{38,57,7}, -{38,57,8}, -{38,57,9}, -{38,57,10}, -{38,57,11}, -{38,57,12}, -{38,57,13}, -{38,57,14}, -{38,57,15}, -{38,57,16}, -{38,57,17}, -{38,57,18}, -{38,57,19}, -{38,57,20}, -{38,57,21}, -{38,57,22}, -{38,57,23}, -{38,57,24}, -{38,57,25}, -{38,57,26}, -{38,57,27}, -{38,57,28}, -{38,57,29}, -{38,57,30}, -{38,57,31}, -{38,57,32}, -{38,57,33}, -{38,57,34}, -{38,57,35}, -{38,57,36}, -{38,57,37}, -{38,57,38}, -{38,57,39}, -{38,57,40}, -{38,57,41}, -{38,57,42}, -{38,57,43}, -{38,57,44}, -{38,57,45}, -{38,57,46}, -{38,57,47}, -{38,57,48}, -{38,57,49}, -{38,57,50}, -{38,57,51}, -{38,58,-95}, -{38,58,-94}, -{38,58,-93}, -{38,58,-92}, -{38,58,-91}, -{38,58,-90}, -{38,58,-89}, -{38,58,-88}, -{38,58,-87}, -{38,58,-86}, -{38,58,-85}, -{38,58,-84}, -{38,58,-83}, -{38,58,-82}, -{38,58,-81}, -{38,58,-80}, -{38,58,-79}, -{38,58,-78}, -{38,58,-77}, -{38,58,-76}, -{38,58,-75}, -{38,58,-74}, -{38,58,-73}, -{38,58,-72}, -{38,58,-71}, -{38,58,-70}, -{38,58,-69}, -{38,58,-68}, -{38,58,-67}, -{38,58,-66}, -{38,58,-65}, -{38,58,-64}, -{38,58,-63}, -{38,58,-62}, -{38,58,-61}, -{38,58,-60}, -{38,58,-59}, -{38,58,-58}, -{38,58,-57}, -{38,58,-56}, -{38,58,-55}, -{38,58,-54}, -{38,58,-53}, -{38,58,-52}, -{38,58,-51}, -{38,58,-50}, -{38,58,-49}, -{38,58,-48}, -{38,58,-47}, -{38,58,-46}, -{38,58,-45}, -{38,58,-44}, -{38,58,-43}, -{38,58,-42}, -{38,58,-41}, -{38,58,-40}, -{38,58,-39}, -{38,58,-38}, -{38,58,-37}, -{38,58,-36}, -{38,58,-35}, -{38,58,-34}, -{38,58,-33}, -{38,58,-32}, -{38,58,-31}, -{38,58,-30}, -{38,58,-29}, -{38,58,-28}, -{38,58,-27}, -{38,58,-26}, -{38,58,-25}, -{38,58,-24}, -{38,58,-23}, -{38,58,-22}, -{38,58,-21}, -{38,58,-20}, -{38,58,-19}, -{38,58,-18}, -{38,58,-17}, -{38,58,-16}, -{38,58,-15}, -{38,58,-14}, -{38,58,-13}, -{38,58,-12}, -{38,58,-11}, -{38,58,-10}, -{38,58,-9}, -{38,58,-8}, -{38,58,-7}, -{38,58,-6}, -{38,58,-5}, -{38,58,-4}, -{38,58,-3}, -{38,58,-2}, -{38,58,-1}, -{38,58,0}, -{38,58,1}, -{38,58,2}, -{38,58,3}, -{38,58,4}, -{38,58,5}, -{38,58,6}, -{38,58,7}, -{38,58,8}, -{38,58,9}, -{38,58,10}, -{38,58,11}, -{38,58,12}, -{38,58,13}, -{38,58,14}, -{38,58,15}, -{38,58,16}, -{38,58,17}, -{38,58,18}, -{38,58,19}, -{38,58,20}, -{38,58,21}, -{38,58,22}, -{38,58,23}, -{38,58,24}, -{38,58,25}, -{38,58,26}, -{38,58,27}, -{38,58,28}, -{38,58,29}, -{38,58,30}, -{38,58,31}, -{38,58,32}, -{38,58,33}, -{38,58,34}, -{38,58,35}, -{38,58,36}, -{38,58,37}, -{38,58,38}, -{38,58,39}, -{38,58,40}, -{38,58,41}, -{38,58,42}, -{38,58,43}, -{38,58,44}, -{38,58,45}, -{38,58,46}, -{38,58,47}, -{38,58,48}, -{38,58,49}, -{38,58,50}, -{38,58,51}, -{38,59,-95}, -{38,59,-94}, -{38,59,-93}, -{38,59,-92}, -{38,59,-91}, -{38,59,-90}, -{38,59,-89}, -{38,59,-88}, -{38,59,-87}, -{38,59,-86}, -{38,59,-85}, -{38,59,-84}, -{38,59,-83}, -{38,59,-82}, -{38,59,-81}, -{38,59,-80}, -{38,59,-79}, -{38,59,-78}, -{38,59,-77}, -{38,59,-76}, -{38,59,-75}, -{38,59,-74}, -{38,59,-73}, -{38,59,-72}, -{38,59,-71}, -{38,59,-70}, -{38,59,-69}, -{38,59,-68}, -{38,59,-67}, -{38,59,-66}, -{38,59,-65}, -{38,59,-64}, -{38,59,-63}, -{38,59,-62}, -{38,59,-61}, -{38,59,-60}, -{38,59,-59}, -{38,59,-58}, -{38,59,-57}, -{38,59,-56}, -{38,59,-55}, -{38,59,-54}, -{38,59,-53}, -{38,59,-52}, -{38,59,-51}, -{38,59,-50}, -{38,59,-49}, -{38,59,-48}, -{38,59,-47}, -{38,59,-46}, -{38,59,-45}, -{38,59,-44}, -{38,59,-43}, -{38,59,-42}, -{38,59,-41}, -{38,59,-40}, -{38,59,-39}, -{38,59,-38}, -{38,59,-37}, -{38,59,-36}, -{38,59,-35}, -{38,59,-34}, -{38,59,-33}, -{38,59,-32}, -{38,59,-31}, -{38,59,-30}, -{38,59,-29}, -{38,59,-28}, -{38,59,-27}, -{38,59,-26}, -{38,59,-25}, -{38,59,-24}, -{38,59,-23}, -{38,59,-22}, -{38,59,-21}, -{38,59,-20}, -{38,59,-19}, -{38,59,-18}, -{38,59,-17}, -{38,59,-16}, -{38,59,-15}, -{38,59,-14}, -{38,59,-13}, -{38,59,-12}, -{38,59,-11}, -{38,59,-10}, -{38,59,-9}, -{38,59,-8}, -{38,59,-7}, -{38,59,-6}, -{38,59,-5}, -{38,59,-4}, -{38,59,-3}, -{38,59,-2}, -{38,59,-1}, -{38,59,0}, -{38,59,1}, -{38,59,2}, -{38,59,3}, -{38,59,4}, -{38,59,5}, -{38,59,6}, -{38,59,7}, -{38,59,8}, -{38,59,9}, -{38,59,10}, -{38,59,11}, -{38,59,12}, -{38,59,13}, -{38,59,14}, -{38,59,15}, -{38,59,16}, -{38,59,17}, -{38,59,18}, -{38,59,19}, -{38,59,20}, -{38,59,21}, -{38,59,22}, -{38,59,23}, -{38,59,24}, -{38,59,25}, -{38,59,26}, -{38,59,27}, -{38,59,28}, -{38,59,29}, -{38,59,30}, -{38,59,31}, -{38,59,32}, -{38,59,33}, -{38,59,34}, -{38,59,35}, -{38,59,36}, -{38,59,37}, -{38,59,38}, -{38,59,39}, -{38,59,40}, -{38,59,41}, -{38,59,42}, -{38,59,43}, -{38,59,44}, -{38,59,45}, -{38,59,46}, -{38,59,47}, -{38,59,48}, -{38,59,49}, -{38,59,50}, -{38,59,51}, -{38,59,52}, -{38,60,-96}, -{38,60,-95}, -{38,60,-94}, -{38,60,-93}, -{38,60,-92}, -{38,60,-91}, -{38,60,-90}, -{38,60,-89}, -{38,60,-88}, -{38,60,-87}, -{38,60,-86}, -{38,60,-85}, -{38,60,-84}, -{38,60,-83}, -{38,60,-82}, -{38,60,-81}, -{38,60,-80}, -{38,60,-79}, -{38,60,-78}, -{38,60,-77}, -{38,60,-76}, -{38,60,-75}, -{38,60,-74}, -{38,60,-73}, -{38,60,-72}, -{38,60,-71}, -{38,60,-70}, -{38,60,-69}, -{38,60,-68}, -{38,60,-67}, -{38,60,-66}, -{38,60,-65}, -{38,60,-64}, -{38,60,-63}, -{38,60,-62}, -{38,60,-61}, -{38,60,-60}, -{38,60,-59}, -{38,60,-58}, -{38,60,-57}, -{38,60,-56}, -{38,60,-55}, -{38,60,-54}, -{38,60,-53}, -{38,60,-52}, -{38,60,-51}, -{38,60,-50}, -{38,60,-49}, -{38,60,-48}, -{38,60,-47}, -{38,60,-46}, -{38,60,-45}, -{38,60,-44}, -{38,60,-43}, -{38,60,-42}, -{38,60,-41}, -{38,60,-40}, -{38,60,-39}, -{38,60,-38}, -{38,60,-37}, -{38,60,-36}, -{38,60,-35}, -{38,60,-34}, -{38,60,-33}, -{38,60,-32}, -{38,60,-31}, -{38,60,-30}, -{38,60,-29}, -{38,60,-28}, -{38,60,-27}, -{38,60,-26}, -{38,60,-25}, -{38,60,-24}, -{38,60,-23}, -{38,60,-22}, -{38,60,-21}, -{38,60,-20}, -{38,60,-19}, -{38,60,-18}, -{38,60,-17}, -{38,60,-16}, -{38,60,-15}, -{38,60,-14}, -{38,60,-13}, -{38,60,-12}, -{38,60,-11}, -{38,60,-10}, -{38,60,-9}, -{38,60,-8}, -{38,60,-7}, -{38,60,-6}, -{38,60,-5}, -{38,60,-4}, -{38,60,-3}, -{38,60,-2}, -{38,60,-1}, -{38,60,0}, -{38,60,1}, -{38,60,2}, -{38,60,3}, -{38,60,4}, -{38,60,5}, -{38,60,6}, -{38,60,7}, -{38,60,8}, -{38,60,9}, -{38,60,10}, -{38,60,11}, -{38,60,12}, -{38,60,13}, -{38,60,14}, -{38,60,15}, -{38,60,16}, -{38,60,17}, -{38,60,18}, -{38,60,19}, -{38,60,20}, -{38,60,21}, -{38,60,22}, -{38,60,23}, -{38,60,24}, -{38,60,25}, -{38,60,26}, -{38,60,27}, -{38,60,28}, -{38,60,29}, -{38,60,30}, -{38,60,31}, -{38,60,32}, -{38,60,33}, -{38,60,34}, -{38,60,35}, -{38,60,36}, -{38,60,37}, -{38,60,38}, -{38,60,39}, -{38,60,40}, -{38,60,41}, -{38,60,42}, -{38,60,43}, -{38,60,44}, -{38,60,45}, -{38,60,46}, -{38,60,47}, -{38,60,48}, -{38,60,49}, -{38,60,50}, -{38,60,51}, -{38,60,52}, -{38,61,-97}, -{38,61,-96}, -{38,61,-95}, -{38,61,-94}, -{38,61,-93}, -{38,61,-92}, -{38,61,-91}, -{38,61,-90}, -{38,61,-89}, -{38,61,-88}, -{38,61,-87}, -{38,61,-86}, -{38,61,-85}, -{38,61,-84}, -{38,61,-83}, -{38,61,-82}, -{38,61,-81}, -{38,61,-80}, -{38,61,-79}, -{38,61,-78}, -{38,61,-77}, -{38,61,-76}, -{38,61,-75}, -{38,61,-74}, -{38,61,-73}, -{38,61,-72}, -{38,61,-71}, -{38,61,-70}, -{38,61,-69}, -{38,61,-68}, -{38,61,-67}, -{38,61,-66}, -{38,61,-65}, -{38,61,-64}, -{38,61,-63}, -{38,61,-62}, -{38,61,-61}, -{38,61,-60}, -{38,61,-59}, -{38,61,-58}, -{38,61,-57}, -{38,61,-56}, -{38,61,-55}, -{38,61,-54}, -{38,61,-53}, -{38,61,-52}, -{38,61,-51}, -{38,61,-50}, -{38,61,-49}, -{38,61,-48}, -{38,61,-47}, -{38,61,-46}, -{38,61,-45}, -{38,61,-44}, -{38,61,-43}, -{38,61,-42}, -{38,61,-41}, -{38,61,-40}, -{38,61,-39}, -{38,61,-38}, -{38,61,-37}, -{38,61,-36}, -{38,61,-35}, -{38,61,-34}, -{38,61,-33}, -{38,61,-32}, -{38,61,-31}, -{38,61,-30}, -{38,61,-29}, -{38,61,-28}, -{38,61,-27}, -{38,61,-26}, -{38,61,-25}, -{38,61,-24}, -{38,61,-23}, -{38,61,-22}, -{38,61,-21}, -{38,61,-20}, -{38,61,-19}, -{38,61,-18}, -{38,61,-17}, -{38,61,-16}, -{38,61,-15}, -{38,61,-14}, -{38,61,-13}, -{38,61,-12}, -{38,61,-11}, -{38,61,-10}, -{38,61,-9}, -{38,61,-8}, -{38,61,-7}, -{38,61,-6}, -{38,61,-5}, -{38,61,-4}, -{38,61,-3}, -{38,61,-2}, -{38,61,-1}, -{38,61,0}, -{38,61,1}, -{38,61,2}, -{38,61,3}, -{38,61,4}, -{38,61,5}, -{38,61,6}, -{38,61,7}, -{38,61,8}, -{38,61,9}, -{38,61,10}, -{38,61,11}, -{38,61,12}, -{38,61,13}, -{38,61,14}, -{38,61,15}, -{38,61,16}, -{38,61,17}, -{38,61,18}, -{38,61,19}, -{38,61,20}, -{38,61,21}, -{38,61,22}, -{38,61,23}, -{38,61,24}, -{38,61,25}, -{38,61,26}, -{38,61,27}, -{38,61,28}, -{38,61,29}, -{38,61,30}, -{38,61,31}, -{38,61,32}, -{38,61,33}, -{38,61,34}, -{38,61,35}, -{38,61,36}, -{38,61,37}, -{38,61,38}, -{38,61,39}, -{38,61,40}, -{38,61,41}, -{38,61,42}, -{38,61,43}, -{38,61,44}, -{38,61,45}, -{38,61,46}, -{38,61,47}, -{38,61,48}, -{38,61,49}, -{38,61,50}, -{38,61,51}, -{38,61,52}, -{38,62,-98}, -{38,62,-97}, -{38,62,-96}, -{38,62,-95}, -{38,62,-94}, -{38,62,-93}, -{38,62,-92}, -{38,62,-91}, -{38,62,-90}, -{38,62,-89}, -{38,62,-88}, -{38,62,-87}, -{38,62,-86}, -{38,62,-85}, -{38,62,-84}, -{38,62,-83}, -{38,62,-82}, -{38,62,-81}, -{38,62,-80}, -{38,62,-79}, -{38,62,-78}, -{38,62,-77}, -{38,62,-76}, -{38,62,-75}, -{38,62,-74}, -{38,62,-73}, -{38,62,-72}, -{38,62,-71}, -{38,62,-70}, -{38,62,-69}, -{38,62,-68}, -{38,62,-67}, -{38,62,-66}, -{38,62,-65}, -{38,62,-64}, -{38,62,-63}, -{38,62,-62}, -{38,62,-61}, -{38,62,-60}, -{38,62,-59}, -{38,62,-58}, -{38,62,-57}, -{38,62,-56}, -{38,62,-55}, -{38,62,-54}, -{38,62,-53}, -{38,62,-52}, -{38,62,-51}, -{38,62,-50}, -{38,62,-49}, -{38,62,-48}, -{38,62,-47}, -{38,62,-46}, -{38,62,-45}, -{38,62,-44}, -{38,62,-43}, -{38,62,-42}, -{38,62,-41}, -{38,62,-40}, -{38,62,-39}, -{38,62,-38}, -{38,62,-37}, -{38,62,-36}, -{38,62,-35}, -{38,62,-34}, -{38,62,-33}, -{38,62,-32}, -{38,62,-31}, -{38,62,-30}, -{38,62,-29}, -{38,62,-28}, -{38,62,-27}, -{38,62,-26}, -{38,62,-25}, -{38,62,-24}, -{38,62,-23}, -{38,62,-22}, -{38,62,-21}, -{38,62,-20}, -{38,62,-19}, -{38,62,-18}, -{38,62,-17}, -{38,62,-16}, -{38,62,-15}, -{38,62,-14}, -{38,62,-13}, -{38,62,-12}, -{38,62,-11}, -{38,62,-10}, -{38,62,-9}, -{38,62,-8}, -{38,62,-7}, -{38,62,-6}, -{38,62,-5}, -{38,62,-4}, -{38,62,-3}, -{38,62,-2}, -{38,62,-1}, -{38,62,0}, -{38,62,1}, -{38,62,2}, -{38,62,3}, -{38,62,4}, -{38,62,5}, -{38,62,6}, -{38,62,7}, -{38,62,8}, -{38,62,9}, -{38,62,10}, -{38,62,11}, -{38,62,12}, -{38,62,13}, -{38,62,14}, -{38,62,15}, -{38,62,16}, -{38,62,17}, -{38,62,18}, -{38,62,19}, -{38,62,20}, -{38,62,21}, -{38,62,22}, -{38,62,23}, -{38,62,24}, -{38,62,25}, -{38,62,26}, -{38,62,27}, -{38,62,28}, -{38,62,29}, -{38,62,30}, -{38,62,31}, -{38,62,32}, -{38,62,33}, -{38,62,34}, -{38,62,35}, -{38,62,36}, -{38,62,37}, -{38,62,38}, -{38,62,39}, -{38,62,40}, -{38,62,41}, -{38,62,42}, -{38,62,43}, -{38,62,44}, -{38,62,45}, -{38,62,46}, -{38,62,47}, -{38,62,48}, -{38,62,49}, -{38,62,50}, -{38,62,51}, -{38,62,52}, -{38,63,-98}, -{38,63,-97}, -{38,63,-96}, -{38,63,-95}, -{38,63,-94}, -{38,63,-93}, -{38,63,-92}, -{38,63,-91}, -{38,63,-90}, -{38,63,-89}, -{38,63,-88}, -{38,63,-87}, -{38,63,-86}, -{38,63,-85}, -{38,63,-84}, -{38,63,-83}, -{38,63,-82}, -{38,63,-81}, -{38,63,-80}, -{38,63,-79}, -{38,63,-78}, -{38,63,-77}, -{38,63,-76}, -{38,63,-75}, -{38,63,-74}, -{38,63,-73}, -{38,63,-72}, -{38,63,-71}, -{38,63,-70}, -{38,63,-69}, -{38,63,-68}, -{38,63,-67}, -{38,63,-66}, -{38,63,-65}, -{38,63,-64}, -{38,63,-63}, -{38,63,-62}, -{38,63,-61}, -{38,63,-60}, -{38,63,-59}, -{38,63,-58}, -{38,63,-57}, -{38,63,-56}, -{38,63,-55}, -{38,63,-54}, -{38,63,-53}, -{38,63,-52}, -{38,63,-51}, -{38,63,-50}, -{38,63,-49}, -{38,63,-48}, -{38,63,-47}, -{38,63,-46}, -{38,63,-45}, -{38,63,-44}, -{38,63,-43}, -{38,63,-42}, -{38,63,-41}, -{38,63,-40}, -{38,63,-39}, -{38,63,-38}, -{38,63,-37}, -{38,63,-36}, -{38,63,-35}, -{38,63,-34}, -{38,63,-33}, -{38,63,-32}, -{38,63,-31}, -{38,63,-30}, -{38,63,-29}, -{38,63,-28}, -{38,63,-27}, -{38,63,-26}, -{38,63,-25}, -{38,63,-24}, -{38,63,-23}, -{38,63,-22}, -{38,63,-21}, -{38,63,-20}, -{38,63,-19}, -{38,63,-18}, -{38,63,-17}, -{38,63,-16}, -{38,63,-15}, -{38,63,-14}, -{38,63,-13}, -{38,63,-12}, -{38,63,-11}, -{38,63,-10}, -{38,63,-9}, -{38,63,-8}, -{38,63,-7}, -{38,63,-6}, -{38,63,-5}, -{38,63,-4}, -{38,63,-3}, -{38,63,-2}, -{38,63,-1}, -{38,63,0}, -{38,63,1}, -{38,63,2}, -{38,63,3}, -{38,63,4}, -{38,63,5}, -{38,63,6}, -{38,63,7}, -{38,63,8}, -{38,63,9}, -{38,63,10}, -{38,63,11}, -{38,63,12}, -{38,63,13}, -{38,63,14}, -{38,63,15}, -{38,63,16}, -{38,63,17}, -{38,63,18}, -{38,63,19}, -{38,63,20}, -{38,63,21}, -{38,63,22}, -{38,63,23}, -{38,63,24}, -{38,63,25}, -{38,63,26}, -{38,63,27}, -{38,63,28}, -{38,63,29}, -{38,63,30}, -{38,63,31}, -{38,63,32}, -{38,63,33}, -{38,63,34}, -{38,63,35}, -{38,64,-98}, -{38,64,-97}, -{38,64,-96}, -{38,64,-95}, -{38,64,-94}, -{38,64,-93}, -{38,64,-92}, -{38,64,-91}, -{38,64,-90}, -{38,64,-89}, -{38,64,-88}, -{38,64,-87}, -{38,64,-86}, -{38,64,-85}, -{38,64,-84}, -{38,64,-83}, -{38,64,-82}, -{38,64,-81}, -{38,64,-80}, -{38,64,-79}, -{38,64,-78}, -{38,64,-77}, -{38,64,-76}, -{38,64,-75}, -{38,64,-74}, -{38,64,-73}, -{38,64,-72}, -{38,64,-71}, -{38,64,-70}, -{38,64,-69}, -{38,64,-68}, -{38,64,-67}, -{38,64,-66}, -{38,64,-65}, -{38,64,-64}, -{38,64,-63}, -{38,64,-62}, -{38,64,-61}, -{38,64,-60}, -{38,64,-59}, -{38,64,-58}, -{38,64,-57}, -{38,64,-56}, -{38,64,-55}, -{38,64,-54}, -{38,64,-53}, -{38,64,-52}, -{38,64,-51}, -{38,64,-50}, -{38,64,-49}, -{38,64,-48}, -{38,64,-47}, -{38,64,-46}, -{38,64,-45}, -{38,64,-44}, -{38,64,-43}, -{38,64,-42}, -{38,64,-41}, -{38,64,-40}, -{38,64,-39}, -{38,64,-38}, -{38,64,-37}, -{38,64,-36}, -{38,64,-35}, -{38,64,-34}, -{38,64,-33}, -{38,64,-32}, -{38,64,-31}, -{38,64,-30}, -{38,64,-29}, -{38,64,-28}, -{38,64,-27}, -{38,64,-26}, -{38,64,-25}, -{38,64,-24}, -{38,64,-23}, -{38,64,-22}, -{38,64,-21}, -{38,64,-20}, -{38,64,-19}, -{38,64,-18}, -{38,64,-17}, -{38,64,-16}, -{38,64,-15}, -{38,64,-14}, -{38,64,-13}, -{38,64,-12}, -{38,64,-11}, -{38,64,-10}, -{38,64,-9}, -{38,64,-8}, -{38,64,-7}, -{38,64,-6}, -{38,64,-5}, -{38,64,-4}, -{38,64,-3}, -{38,64,-2}, -{38,64,-1}, -{38,64,0}, -{38,64,1}, -{38,64,2}, -{38,64,3}, -{38,64,4}, -{38,64,5}, -{38,64,6}, -{38,64,7}, -{38,64,8}, -{38,64,9}, -{38,64,10}, -{38,64,11}, -{38,65,-98}, -{38,65,-97}, -{38,65,-96}, -{38,65,-95}, -{38,65,-94}, -{38,65,-93}, -{38,65,-92}, -{38,65,-91}, -{38,65,-90}, -{38,65,-89}, -{38,65,-88}, -{38,65,-87}, -{38,65,-86}, -{38,65,-85}, -{38,65,-84}, -{38,65,-83}, -{38,65,-82}, -{38,65,-81}, -{38,65,-80}, -{38,65,-79}, -{38,65,-78}, -{38,65,-77}, -{38,65,-76}, -{38,65,-75}, -{38,65,-74}, -{38,65,-73}, -{38,65,-72}, -{38,65,-71}, -{38,65,-70}, -{38,65,-69}, -{38,65,-68}, -{38,65,-67}, -{38,65,-66}, -{38,65,-65}, -{38,65,-64}, -{38,65,-63}, -{38,65,-62}, -{38,65,-61}, -{38,65,-60}, -{38,65,-59}, -{38,65,-58}, -{38,65,-57}, -{38,65,-56}, -{38,65,-55}, -{38,65,-54}, -{38,65,-53}, -{38,65,-52}, -{38,65,-51}, -{38,65,-50}, -{38,65,-49}, -{38,65,-48}, -{38,65,-47}, -{38,65,-46}, -{38,65,-45}, -{38,65,-44}, -{38,65,-43}, -{38,65,-42}, -{38,65,-41}, -{38,65,-40}, -{38,65,-39}, -{38,65,-38}, -{38,65,-37}, -{38,65,-36}, -{38,65,-35}, -{38,65,-34}, -{38,65,-33}, -{38,65,-32}, -{38,65,-31}, -{38,65,-30}, -{38,65,-29}, -{38,65,-28}, -{38,65,-27}, -{38,65,-26}, -{38,65,-25}, -{38,65,-24}, -{38,65,-23}, -{38,65,-22}, -{38,65,-21}, -{38,65,-20}, -{38,65,-19}, -{38,65,-18}, -{38,65,-17}, -{38,65,-16}, -{38,65,-15}, -{38,65,-14}, -{38,65,-13}, -{38,65,-12}, -{38,65,-11}, -{38,65,-10}, -{38,65,-9}, -{38,65,-8}, -{38,65,-7}, -{38,65,-6}, -{38,65,-5}, -{38,65,-4}, -{38,65,-3}, -{38,66,-98}, -{38,66,-97}, -{38,66,-96}, -{38,66,-95}, -{38,66,-94}, -{38,66,-93}, -{38,66,-92}, -{38,66,-91}, -{38,66,-90}, -{38,66,-89}, -{38,66,-88}, -{38,66,-87}, -{38,66,-86}, -{38,66,-85}, -{38,66,-84}, -{38,66,-83}, -{38,66,-82}, -{38,66,-81}, -{38,66,-80}, -{38,66,-79}, -{38,66,-78}, -{38,66,-77}, -{38,66,-76}, -{38,66,-75}, -{38,66,-74}, -{38,66,-73}, -{38,66,-72}, -{38,66,-71}, -{38,66,-70}, -{38,66,-69}, -{38,66,-68}, -{38,66,-67}, -{38,66,-66}, -{38,66,-65}, -{38,66,-64}, -{38,66,-63}, -{38,66,-62}, -{38,66,-61}, -{38,66,-60}, -{38,66,-59}, -{38,66,-58}, -{38,66,-57}, -{38,66,-56}, -{38,66,-55}, -{38,66,-54}, -{38,66,-53}, -{38,66,-52}, -{38,66,-51}, -{38,66,-50}, -{38,66,-49}, -{38,66,-48}, -{38,66,-47}, -{38,66,-46}, -{38,66,-45}, -{38,66,-44}, -{38,66,-43}, -{38,66,-42}, -{38,66,-41}, -{38,66,-40}, -{38,66,-39}, -{38,66,-38}, -{38,66,-37}, -{38,66,-36}, -{38,66,-35}, -{38,66,-34}, -{38,66,-33}, -{38,66,-32}, -{38,66,-31}, -{38,66,-30}, -{38,66,-29}, -{38,66,-28}, -{38,66,-27}, -{38,66,-26}, -{38,66,-25}, -{38,66,-24}, -{38,66,-23}, -{38,66,-22}, -{38,66,-21}, -{38,66,-20}, -{38,66,-19}, -{38,66,-18}, -{38,66,-17}, -{38,66,-16}, -{38,66,-15}, -{38,67,-98}, -{38,67,-97}, -{38,67,-96}, -{38,67,-95}, -{38,67,-94}, -{38,67,-93}, -{38,67,-92}, -{38,67,-91}, -{38,67,-90}, -{38,67,-89}, -{38,67,-88}, -{38,67,-87}, -{38,67,-86}, -{38,67,-85}, -{38,67,-84}, -{38,67,-83}, -{38,67,-82}, -{38,67,-81}, -{38,67,-80}, -{38,67,-79}, -{38,67,-78}, -{38,67,-77}, -{38,67,-76}, -{38,67,-75}, -{38,67,-74}, -{38,67,-73}, -{38,67,-72}, -{38,67,-71}, -{38,67,-70}, -{38,67,-69}, -{38,67,-68}, -{38,67,-67}, -{38,67,-66}, -{38,67,-65}, -{38,67,-64}, -{38,67,-63}, -{38,67,-62}, -{38,67,-61}, -{38,67,-60}, -{38,67,-59}, -{38,67,-58}, -{38,67,-57}, -{38,67,-56}, -{38,67,-55}, -{38,67,-54}, -{38,67,-53}, -{38,67,-52}, -{38,67,-51}, -{38,67,-50}, -{38,67,-49}, -{38,67,-48}, -{38,67,-47}, -{38,67,-46}, -{38,67,-45}, -{38,67,-44}, -{38,67,-43}, -{38,67,-42}, -{38,67,-41}, -{38,67,-40}, -{38,67,-39}, -{38,67,-38}, -{38,67,-37}, -{38,67,-36}, -{38,67,-35}, -{38,67,-34}, -{38,67,-33}, -{38,67,-32}, -{38,67,-31}, -{38,67,-30}, -{38,67,-29}, -{38,67,-28}, -{38,67,-27}, -{38,67,-26}, -{38,67,-25}, -{38,67,-24}, -{38,68,-98}, -{38,68,-97}, -{38,68,-96}, -{38,68,-95}, -{38,68,-94}, -{38,68,-93}, -{38,68,-92}, -{38,68,-91}, -{38,68,-90}, -{38,68,-89}, -{38,68,-88}, -{38,68,-87}, -{38,68,-86}, -{38,68,-85}, -{38,68,-84}, -{38,68,-83}, -{38,68,-82}, -{38,68,-81}, -{38,68,-80}, -{38,68,-79}, -{38,68,-78}, -{38,68,-77}, -{38,68,-76}, -{38,68,-75}, -{38,68,-74}, -{38,68,-73}, -{38,68,-72}, -{38,68,-71}, -{38,68,-70}, -{38,68,-69}, -{38,68,-68}, -{38,68,-67}, -{38,68,-66}, -{38,68,-65}, -{38,68,-64}, -{38,68,-63}, -{38,68,-62}, -{38,68,-61}, -{38,68,-60}, -{38,68,-59}, -{38,68,-58}, -{38,68,-57}, -{38,68,-56}, -{38,68,-55}, -{38,68,-54}, -{38,68,-53}, -{38,68,-52}, -{38,68,-51}, -{38,68,-50}, -{38,68,-49}, -{38,68,-48}, -{38,68,-47}, -{38,68,-46}, -{38,68,-45}, -{38,68,-44}, -{38,68,-43}, -{38,68,-42}, -{38,68,-41}, -{38,68,-40}, -{38,68,-39}, -{38,68,-38}, -{38,68,-37}, -{38,68,-36}, -{38,68,-35}, -{38,68,-34}, -{38,68,-33}, -{38,68,-32}, -{38,69,-98}, -{38,69,-97}, -{38,69,-96}, -{38,69,-95}, -{38,69,-94}, -{38,69,-93}, -{38,69,-92}, -{38,69,-91}, -{38,69,-90}, -{38,69,-89}, -{38,69,-88}, -{38,69,-87}, -{38,69,-86}, -{38,69,-85}, -{38,69,-84}, -{38,69,-83}, -{38,69,-82}, -{38,69,-81}, -{38,69,-80}, -{38,69,-79}, -{38,69,-78}, -{38,69,-77}, -{38,69,-76}, -{38,69,-75}, -{38,69,-74}, -{38,69,-73}, -{38,69,-72}, -{38,69,-71}, -{38,69,-70}, -{38,69,-69}, -{38,69,-68}, -{38,69,-67}, -{38,69,-66}, -{38,69,-65}, -{38,69,-64}, -{38,69,-63}, -{38,69,-62}, -{38,69,-61}, -{38,69,-60}, -{38,69,-59}, -{38,69,-58}, -{38,69,-57}, -{38,69,-56}, -{38,69,-55}, -{38,69,-54}, -{38,69,-53}, -{38,69,-52}, -{38,69,-51}, -{38,69,-50}, -{38,69,-49}, -{38,69,-48}, -{38,69,-47}, -{38,69,-46}, -{38,69,-45}, -{38,69,-44}, -{38,69,-43}, -{38,69,-42}, -{38,69,-41}, -{38,69,-40}, -{38,69,-39}, -{38,70,-98}, -{38,70,-97}, -{38,70,-96}, -{38,70,-95}, -{38,70,-94}, -{38,70,-93}, -{38,70,-92}, -{38,70,-91}, -{38,70,-90}, -{38,70,-89}, -{38,70,-88}, -{38,70,-87}, -{38,70,-86}, -{38,70,-85}, -{38,70,-84}, -{38,70,-83}, -{38,70,-82}, -{38,70,-81}, -{38,70,-80}, -{38,70,-79}, -{38,70,-78}, -{38,70,-77}, -{38,70,-76}, -{38,70,-75}, -{38,70,-74}, -{38,70,-73}, -{38,70,-72}, -{38,70,-71}, -{38,70,-70}, -{38,70,-69}, -{38,70,-68}, -{38,70,-67}, -{38,70,-66}, -{38,70,-65}, -{38,70,-64}, -{38,70,-63}, -{38,70,-62}, -{38,70,-61}, -{38,70,-60}, -{38,70,-59}, -{38,70,-58}, -{38,70,-57}, -{38,70,-56}, -{38,70,-55}, -{38,70,-54}, -{38,70,-53}, -{38,70,-52}, -{38,70,-51}, -{38,70,-50}, -{38,70,-49}, -{38,70,-48}, -{38,70,-47}, -{38,70,-46}, -{38,71,-98}, -{38,71,-97}, -{38,71,-96}, -{38,71,-95}, -{38,71,-94}, -{38,71,-93}, -{38,71,-92}, -{38,71,-91}, -{38,71,-90}, -{38,71,-89}, -{38,71,-88}, -{38,71,-87}, -{38,71,-86}, -{38,71,-85}, -{38,71,-84}, -{38,71,-83}, -{38,71,-82}, -{38,71,-81}, -{38,71,-80}, -{38,71,-79}, -{38,71,-78}, -{38,71,-77}, -{38,71,-76}, -{38,71,-75}, -{38,71,-74}, -{38,71,-73}, -{38,71,-72}, -{38,71,-71}, -{38,71,-70}, -{38,71,-69}, -{38,71,-68}, -{38,71,-67}, -{38,71,-66}, -{38,71,-65}, -{38,71,-64}, -{38,71,-63}, -{38,71,-62}, -{38,71,-61}, -{38,71,-60}, -{38,71,-59}, -{38,71,-58}, -{38,71,-57}, -{38,71,-56}, -{38,71,-55}, -{38,71,-54}, -{38,71,-53}, -{38,71,-52}, -{38,72,-98}, -{38,72,-97}, -{38,72,-96}, -{38,72,-95}, -{38,72,-94}, -{38,72,-93}, -{38,72,-92}, -{38,72,-91}, -{38,72,-90}, -{38,72,-89}, -{38,72,-88}, -{38,72,-87}, -{38,72,-86}, -{38,72,-85}, -{38,72,-84}, -{38,72,-83}, -{38,72,-82}, -{38,72,-81}, -{38,72,-80}, -{38,72,-79}, -{38,72,-78}, -{38,72,-77}, -{38,72,-76}, -{38,72,-75}, -{38,72,-74}, -{38,72,-73}, -{38,72,-72}, -{38,72,-71}, -{38,72,-70}, -{38,72,-69}, -{38,72,-68}, -{38,72,-67}, -{38,72,-66}, -{38,72,-65}, -{38,72,-64}, -{38,72,-63}, -{38,72,-62}, -{38,72,-61}, -{38,72,-60}, -{38,72,-59}, -{38,72,-58}, -{38,72,-57}, -{38,73,-98}, -{38,73,-97}, -{38,73,-96}, -{38,73,-95}, -{38,73,-94}, -{38,73,-93}, -{38,73,-92}, -{38,73,-91}, -{38,73,-90}, -{38,73,-89}, -{38,73,-88}, -{38,73,-87}, -{38,73,-86}, -{38,73,-85}, -{38,73,-84}, -{38,73,-83}, -{38,73,-82}, -{38,73,-81}, -{38,73,-80}, -{38,73,-79}, -{38,73,-78}, -{38,73,-77}, -{38,73,-76}, -{38,73,-75}, -{38,73,-74}, -{38,73,-73}, -{38,73,-72}, -{38,73,-71}, -{38,73,-70}, -{38,73,-69}, -{38,73,-68}, -{38,73,-67}, -{38,73,-66}, -{38,73,-65}, -{38,73,-64}, -{38,73,-63}, -{38,74,-98}, -{38,74,-97}, -{38,74,-96}, -{38,74,-95}, -{38,74,-94}, -{38,74,-93}, -{38,74,-92}, -{38,74,-91}, -{38,74,-90}, -{38,74,-89}, -{38,74,-88}, -{38,74,-87}, -{38,74,-86}, -{38,74,-85}, -{38,74,-84}, -{38,74,-83}, -{38,74,-82}, -{38,74,-81}, -{38,74,-80}, -{38,74,-79}, -{38,74,-78}, -{38,74,-77}, -{38,74,-76}, -{38,74,-75}, -{38,74,-74}, -{38,74,-73}, -{38,74,-72}, -{38,74,-71}, -{38,74,-70}, -{38,74,-69}, -{38,74,-68}, -{38,74,-67}, -{38,75,-98}, -{38,75,-97}, -{38,75,-96}, -{38,75,-95}, -{38,75,-94}, -{38,75,-93}, -{38,75,-92}, -{38,75,-91}, -{38,75,-90}, -{38,75,-89}, -{38,75,-88}, -{38,75,-87}, -{38,75,-86}, -{38,75,-85}, -{38,75,-84}, -{38,75,-83}, -{38,75,-82}, -{38,75,-81}, -{38,75,-80}, -{38,75,-79}, -{38,75,-78}, -{38,75,-77}, -{38,75,-76}, -{38,75,-75}, -{38,75,-74}, -{38,75,-73}, -{38,75,-72}, -{38,76,-98}, -{38,76,-97}, -{38,76,-96}, -{38,76,-95}, -{38,76,-94}, -{38,76,-93}, -{38,76,-92}, -{38,76,-91}, -{38,76,-90}, -{38,76,-89}, -{38,76,-88}, -{38,76,-87}, -{38,76,-86}, -{38,76,-85}, -{38,76,-84}, -{38,76,-83}, -{38,76,-82}, -{38,76,-81}, -{38,76,-80}, -{38,76,-79}, -{38,76,-78}, -{38,76,-77}, -{38,77,-98}, -{38,77,-97}, -{38,77,-96}, -{38,77,-95}, -{38,77,-94}, -{38,77,-93}, -{38,77,-92}, -{38,77,-91}, -{38,77,-90}, -{38,77,-89}, -{38,77,-88}, -{38,77,-87}, -{38,77,-86}, -{38,77,-85}, -{38,77,-84}, -{38,77,-83}, -{38,77,-82}, -{38,77,-81}, -{38,78,-98}, -{38,78,-97}, -{38,78,-96}, -{38,78,-95}, -{38,78,-94}, -{38,78,-93}, -{38,78,-92}, -{38,78,-91}, -{38,78,-90}, -{38,78,-89}, -{38,78,-88}, -{38,78,-87}, -{38,78,-86}, -{38,78,-85}, -{38,79,-98}, -{38,79,-97}, -{38,79,-96}, -{38,79,-95}, -{38,79,-94}, -{38,79,-93}, -{38,79,-92}, -{38,79,-91}, -{38,79,-90}, -{38,79,-89}, -{38,80,-98}, -{38,80,-97}, -{38,80,-96}, -{38,80,-95}, -{38,80,-94}, -{38,80,-93}, -{38,81,-98}, -{38,81,-97}, -{38,81,-96}, -{39,-45,40}, -{39,-45,41}, -{39,-45,42}, -{39,-45,43}, -{39,-45,44}, -{39,-44,36}, -{39,-44,37}, -{39,-44,38}, -{39,-44,39}, -{39,-44,40}, -{39,-44,41}, -{39,-44,42}, -{39,-44,43}, -{39,-44,44}, -{39,-43,33}, -{39,-43,34}, -{39,-43,35}, -{39,-43,36}, -{39,-43,37}, -{39,-43,38}, -{39,-43,39}, -{39,-43,40}, -{39,-43,41}, -{39,-43,42}, -{39,-43,43}, -{39,-43,44}, -{39,-42,29}, -{39,-42,30}, -{39,-42,31}, -{39,-42,32}, -{39,-42,33}, -{39,-42,34}, -{39,-42,35}, -{39,-42,36}, -{39,-42,37}, -{39,-42,38}, -{39,-42,39}, -{39,-42,40}, -{39,-42,41}, -{39,-42,42}, -{39,-42,43}, -{39,-42,44}, -{39,-41,26}, -{39,-41,27}, -{39,-41,28}, -{39,-41,29}, -{39,-41,30}, -{39,-41,31}, -{39,-41,32}, -{39,-41,33}, -{39,-41,34}, -{39,-41,35}, -{39,-41,36}, -{39,-41,37}, -{39,-41,38}, -{39,-41,39}, -{39,-41,40}, -{39,-41,41}, -{39,-41,42}, -{39,-41,43}, -{39,-41,44}, -{39,-40,23}, -{39,-40,24}, -{39,-40,25}, -{39,-40,26}, -{39,-40,27}, -{39,-40,28}, -{39,-40,29}, -{39,-40,30}, -{39,-40,31}, -{39,-40,32}, -{39,-40,33}, -{39,-40,34}, -{39,-40,35}, -{39,-40,36}, -{39,-40,37}, -{39,-40,38}, -{39,-40,39}, -{39,-40,40}, -{39,-40,41}, -{39,-40,42}, -{39,-40,43}, -{39,-40,44}, -{39,-39,21}, -{39,-39,22}, -{39,-39,23}, -{39,-39,24}, -{39,-39,25}, -{39,-39,26}, -{39,-39,27}, -{39,-39,28}, -{39,-39,29}, -{39,-39,30}, -{39,-39,31}, -{39,-39,32}, -{39,-39,33}, -{39,-39,34}, -{39,-39,35}, -{39,-39,36}, -{39,-39,37}, -{39,-39,38}, -{39,-39,39}, -{39,-39,40}, -{39,-39,41}, -{39,-39,42}, -{39,-39,43}, -{39,-39,44}, -{39,-38,18}, -{39,-38,19}, -{39,-38,20}, -{39,-38,21}, -{39,-38,22}, -{39,-38,23}, -{39,-38,24}, -{39,-38,25}, -{39,-38,26}, -{39,-38,27}, -{39,-38,28}, -{39,-38,29}, -{39,-38,30}, -{39,-38,31}, -{39,-38,32}, -{39,-38,33}, -{39,-38,34}, -{39,-38,35}, -{39,-38,36}, -{39,-38,37}, -{39,-38,38}, -{39,-38,39}, -{39,-38,40}, -{39,-38,41}, -{39,-38,42}, -{39,-38,43}, -{39,-38,44}, -{39,-37,16}, -{39,-37,17}, -{39,-37,18}, -{39,-37,19}, -{39,-37,20}, -{39,-37,21}, -{39,-37,22}, -{39,-37,23}, -{39,-37,24}, -{39,-37,25}, -{39,-37,26}, -{39,-37,27}, -{39,-37,28}, -{39,-37,29}, -{39,-37,30}, -{39,-37,31}, -{39,-37,32}, -{39,-37,33}, -{39,-37,34}, -{39,-37,35}, -{39,-37,36}, -{39,-37,37}, -{39,-37,38}, -{39,-37,39}, -{39,-37,40}, -{39,-37,41}, -{39,-37,42}, -{39,-37,43}, -{39,-37,44}, -{39,-36,14}, -{39,-36,15}, -{39,-36,16}, -{39,-36,17}, -{39,-36,18}, -{39,-36,19}, -{39,-36,20}, -{39,-36,21}, -{39,-36,22}, -{39,-36,23}, -{39,-36,24}, -{39,-36,25}, -{39,-36,26}, -{39,-36,27}, -{39,-36,28}, -{39,-36,29}, -{39,-36,30}, -{39,-36,31}, -{39,-36,32}, -{39,-36,33}, -{39,-36,34}, -{39,-36,35}, -{39,-36,36}, -{39,-36,37}, -{39,-36,38}, -{39,-36,39}, -{39,-36,40}, -{39,-36,41}, -{39,-36,42}, -{39,-36,43}, -{39,-36,44}, -{39,-35,11}, -{39,-35,12}, -{39,-35,13}, -{39,-35,14}, -{39,-35,15}, -{39,-35,16}, -{39,-35,17}, -{39,-35,18}, -{39,-35,19}, -{39,-35,20}, -{39,-35,21}, -{39,-35,22}, -{39,-35,23}, -{39,-35,24}, -{39,-35,25}, -{39,-35,26}, -{39,-35,27}, -{39,-35,28}, -{39,-35,29}, -{39,-35,30}, -{39,-35,31}, -{39,-35,32}, -{39,-35,33}, -{39,-35,34}, -{39,-35,35}, -{39,-35,36}, -{39,-35,37}, -{39,-35,38}, -{39,-35,39}, -{39,-35,40}, -{39,-35,41}, -{39,-35,42}, -{39,-35,43}, -{39,-35,44}, -{39,-34,9}, -{39,-34,10}, -{39,-34,11}, -{39,-34,12}, -{39,-34,13}, -{39,-34,14}, -{39,-34,15}, -{39,-34,16}, -{39,-34,17}, -{39,-34,18}, -{39,-34,19}, -{39,-34,20}, -{39,-34,21}, -{39,-34,22}, -{39,-34,23}, -{39,-34,24}, -{39,-34,25}, -{39,-34,26}, -{39,-34,27}, -{39,-34,28}, -{39,-34,29}, -{39,-34,30}, -{39,-34,31}, -{39,-34,32}, -{39,-34,33}, -{39,-34,34}, -{39,-34,35}, -{39,-34,36}, -{39,-34,37}, -{39,-34,38}, -{39,-34,39}, -{39,-34,40}, -{39,-34,41}, -{39,-34,42}, -{39,-34,43}, -{39,-34,44}, -{39,-33,7}, -{39,-33,8}, -{39,-33,9}, -{39,-33,10}, -{39,-33,11}, -{39,-33,12}, -{39,-33,13}, -{39,-33,14}, -{39,-33,15}, -{39,-33,16}, -{39,-33,17}, -{39,-33,18}, -{39,-33,19}, -{39,-33,20}, -{39,-33,21}, -{39,-33,22}, -{39,-33,23}, -{39,-33,24}, -{39,-33,25}, -{39,-33,26}, -{39,-33,27}, -{39,-33,28}, -{39,-33,29}, -{39,-33,30}, -{39,-33,31}, -{39,-33,32}, -{39,-33,33}, -{39,-33,34}, -{39,-33,35}, -{39,-33,36}, -{39,-33,37}, -{39,-33,38}, -{39,-33,39}, -{39,-33,40}, -{39,-33,41}, -{39,-33,42}, -{39,-33,43}, -{39,-33,44}, -{39,-32,5}, -{39,-32,6}, -{39,-32,7}, -{39,-32,8}, -{39,-32,9}, -{39,-32,10}, -{39,-32,11}, -{39,-32,12}, -{39,-32,13}, -{39,-32,14}, -{39,-32,15}, -{39,-32,16}, -{39,-32,17}, -{39,-32,18}, -{39,-32,19}, -{39,-32,20}, -{39,-32,21}, -{39,-32,22}, -{39,-32,23}, -{39,-32,24}, -{39,-32,25}, -{39,-32,26}, -{39,-32,27}, -{39,-32,28}, -{39,-32,29}, -{39,-32,30}, -{39,-32,31}, -{39,-32,32}, -{39,-32,33}, -{39,-32,34}, -{39,-32,35}, -{39,-32,36}, -{39,-32,37}, -{39,-32,38}, -{39,-32,39}, -{39,-32,40}, -{39,-32,41}, -{39,-32,42}, -{39,-32,43}, -{39,-32,44}, -{39,-31,4}, -{39,-31,5}, -{39,-31,6}, -{39,-31,7}, -{39,-31,8}, -{39,-31,9}, -{39,-31,10}, -{39,-31,11}, -{39,-31,12}, -{39,-31,13}, -{39,-31,14}, -{39,-31,15}, -{39,-31,16}, -{39,-31,17}, -{39,-31,18}, -{39,-31,19}, -{39,-31,20}, -{39,-31,21}, -{39,-31,22}, -{39,-31,23}, -{39,-31,24}, -{39,-31,25}, -{39,-31,26}, -{39,-31,27}, -{39,-31,28}, -{39,-31,29}, -{39,-31,30}, -{39,-31,31}, -{39,-31,32}, -{39,-31,33}, -{39,-31,34}, -{39,-31,35}, -{39,-31,36}, -{39,-31,37}, -{39,-31,38}, -{39,-31,39}, -{39,-31,40}, -{39,-31,41}, -{39,-31,42}, -{39,-31,43}, -{39,-31,44}, -{39,-30,2}, -{39,-30,3}, -{39,-30,4}, -{39,-30,5}, -{39,-30,6}, -{39,-30,7}, -{39,-30,8}, -{39,-30,9}, -{39,-30,10}, -{39,-30,11}, -{39,-30,12}, -{39,-30,13}, -{39,-30,14}, -{39,-30,15}, -{39,-30,16}, -{39,-30,17}, -{39,-30,18}, -{39,-30,19}, -{39,-30,20}, -{39,-30,21}, -{39,-30,22}, -{39,-30,23}, -{39,-30,24}, -{39,-30,25}, -{39,-30,26}, -{39,-30,27}, -{39,-30,28}, -{39,-30,29}, -{39,-30,30}, -{39,-30,31}, -{39,-30,32}, -{39,-30,33}, -{39,-30,34}, -{39,-30,35}, -{39,-30,36}, -{39,-30,37}, -{39,-30,38}, -{39,-30,39}, -{39,-30,40}, -{39,-30,41}, -{39,-30,42}, -{39,-30,43}, -{39,-30,44}, -{39,-30,45}, -{39,-29,0}, -{39,-29,1}, -{39,-29,2}, -{39,-29,3}, -{39,-29,4}, -{39,-29,5}, -{39,-29,6}, -{39,-29,7}, -{39,-29,8}, -{39,-29,9}, -{39,-29,10}, -{39,-29,11}, -{39,-29,12}, -{39,-29,13}, -{39,-29,14}, -{39,-29,15}, -{39,-29,16}, -{39,-29,17}, -{39,-29,18}, -{39,-29,19}, -{39,-29,20}, -{39,-29,21}, -{39,-29,22}, -{39,-29,23}, -{39,-29,24}, -{39,-29,25}, -{39,-29,26}, -{39,-29,27}, -{39,-29,28}, -{39,-29,29}, -{39,-29,30}, -{39,-29,31}, -{39,-29,32}, -{39,-29,33}, -{39,-29,34}, -{39,-29,35}, -{39,-29,36}, -{39,-29,37}, -{39,-29,38}, -{39,-29,39}, -{39,-29,40}, -{39,-29,41}, -{39,-29,42}, -{39,-29,43}, -{39,-29,44}, -{39,-29,45}, -{39,-28,-2}, -{39,-28,-1}, -{39,-28,0}, -{39,-28,1}, -{39,-28,2}, -{39,-28,3}, -{39,-28,4}, -{39,-28,5}, -{39,-28,6}, -{39,-28,7}, -{39,-28,8}, -{39,-28,9}, -{39,-28,10}, -{39,-28,11}, -{39,-28,12}, -{39,-28,13}, -{39,-28,14}, -{39,-28,15}, -{39,-28,16}, -{39,-28,17}, -{39,-28,18}, -{39,-28,19}, -{39,-28,20}, -{39,-28,21}, -{39,-28,22}, -{39,-28,23}, -{39,-28,24}, -{39,-28,25}, -{39,-28,26}, -{39,-28,27}, -{39,-28,28}, -{39,-28,29}, -{39,-28,30}, -{39,-28,31}, -{39,-28,32}, -{39,-28,33}, -{39,-28,34}, -{39,-28,35}, -{39,-28,36}, -{39,-28,37}, -{39,-28,38}, -{39,-28,39}, -{39,-28,40}, -{39,-28,41}, -{39,-28,42}, -{39,-28,43}, -{39,-28,44}, -{39,-28,45}, -{39,-27,-3}, -{39,-27,-2}, -{39,-27,-1}, -{39,-27,0}, -{39,-27,1}, -{39,-27,2}, -{39,-27,3}, -{39,-27,4}, -{39,-27,5}, -{39,-27,6}, -{39,-27,7}, -{39,-27,8}, -{39,-27,9}, -{39,-27,10}, -{39,-27,11}, -{39,-27,12}, -{39,-27,13}, -{39,-27,14}, -{39,-27,15}, -{39,-27,16}, -{39,-27,17}, -{39,-27,18}, -{39,-27,19}, -{39,-27,20}, -{39,-27,21}, -{39,-27,22}, -{39,-27,23}, -{39,-27,24}, -{39,-27,25}, -{39,-27,26}, -{39,-27,27}, -{39,-27,28}, -{39,-27,29}, -{39,-27,30}, -{39,-27,31}, -{39,-27,32}, -{39,-27,33}, -{39,-27,34}, -{39,-27,35}, -{39,-27,36}, -{39,-27,37}, -{39,-27,38}, -{39,-27,39}, -{39,-27,40}, -{39,-27,41}, -{39,-27,42}, -{39,-27,43}, -{39,-27,44}, -{39,-27,45}, -{39,-26,-5}, -{39,-26,-4}, -{39,-26,-3}, -{39,-26,-2}, -{39,-26,-1}, -{39,-26,0}, -{39,-26,1}, -{39,-26,2}, -{39,-26,3}, -{39,-26,4}, -{39,-26,5}, -{39,-26,6}, -{39,-26,7}, -{39,-26,8}, -{39,-26,9}, -{39,-26,10}, -{39,-26,11}, -{39,-26,12}, -{39,-26,13}, -{39,-26,14}, -{39,-26,15}, -{39,-26,16}, -{39,-26,17}, -{39,-26,18}, -{39,-26,19}, -{39,-26,20}, -{39,-26,21}, -{39,-26,22}, -{39,-26,23}, -{39,-26,24}, -{39,-26,25}, -{39,-26,26}, -{39,-26,27}, -{39,-26,28}, -{39,-26,29}, -{39,-26,30}, -{39,-26,31}, -{39,-26,32}, -{39,-26,33}, -{39,-26,34}, -{39,-26,35}, -{39,-26,36}, -{39,-26,37}, -{39,-26,38}, -{39,-26,39}, -{39,-26,40}, -{39,-26,41}, -{39,-26,42}, -{39,-26,43}, -{39,-26,44}, -{39,-26,45}, -{39,-25,-7}, -{39,-25,-6}, -{39,-25,-5}, -{39,-25,-4}, -{39,-25,-3}, -{39,-25,-2}, -{39,-25,-1}, -{39,-25,0}, -{39,-25,1}, -{39,-25,2}, -{39,-25,3}, -{39,-25,4}, -{39,-25,5}, -{39,-25,6}, -{39,-25,7}, -{39,-25,8}, -{39,-25,9}, -{39,-25,10}, -{39,-25,11}, -{39,-25,12}, -{39,-25,13}, -{39,-25,14}, -{39,-25,15}, -{39,-25,16}, -{39,-25,17}, -{39,-25,18}, -{39,-25,19}, -{39,-25,20}, -{39,-25,21}, -{39,-25,22}, -{39,-25,23}, -{39,-25,24}, -{39,-25,25}, -{39,-25,26}, -{39,-25,27}, -{39,-25,28}, -{39,-25,29}, -{39,-25,30}, -{39,-25,31}, -{39,-25,32}, -{39,-25,33}, -{39,-25,34}, -{39,-25,35}, -{39,-25,36}, -{39,-25,37}, -{39,-25,38}, -{39,-25,39}, -{39,-25,40}, -{39,-25,41}, -{39,-25,42}, -{39,-25,43}, -{39,-25,44}, -{39,-25,45}, -{39,-24,-8}, -{39,-24,-7}, -{39,-24,-6}, -{39,-24,-5}, -{39,-24,-4}, -{39,-24,-3}, -{39,-24,-2}, -{39,-24,-1}, -{39,-24,0}, -{39,-24,1}, -{39,-24,2}, -{39,-24,3}, -{39,-24,4}, -{39,-24,5}, -{39,-24,6}, -{39,-24,7}, -{39,-24,8}, -{39,-24,9}, -{39,-24,10}, -{39,-24,11}, -{39,-24,12}, -{39,-24,13}, -{39,-24,14}, -{39,-24,15}, -{39,-24,16}, -{39,-24,17}, -{39,-24,18}, -{39,-24,19}, -{39,-24,20}, -{39,-24,21}, -{39,-24,22}, -{39,-24,23}, -{39,-24,24}, -{39,-24,25}, -{39,-24,26}, -{39,-24,27}, -{39,-24,28}, -{39,-24,29}, -{39,-24,30}, -{39,-24,31}, -{39,-24,32}, -{39,-24,33}, -{39,-24,34}, -{39,-24,35}, -{39,-24,36}, -{39,-24,37}, -{39,-24,38}, -{39,-24,39}, -{39,-24,40}, -{39,-24,41}, -{39,-24,42}, -{39,-24,43}, -{39,-24,44}, -{39,-24,45}, -{39,-23,-10}, -{39,-23,-9}, -{39,-23,-8}, -{39,-23,-7}, -{39,-23,-6}, -{39,-23,-5}, -{39,-23,-4}, -{39,-23,-3}, -{39,-23,-2}, -{39,-23,-1}, -{39,-23,0}, -{39,-23,1}, -{39,-23,2}, -{39,-23,3}, -{39,-23,4}, -{39,-23,5}, -{39,-23,6}, -{39,-23,7}, -{39,-23,8}, -{39,-23,9}, -{39,-23,10}, -{39,-23,11}, -{39,-23,12}, -{39,-23,13}, -{39,-23,14}, -{39,-23,15}, -{39,-23,16}, -{39,-23,17}, -{39,-23,18}, -{39,-23,19}, -{39,-23,20}, -{39,-23,21}, -{39,-23,22}, -{39,-23,23}, -{39,-23,24}, -{39,-23,25}, -{39,-23,26}, -{39,-23,27}, -{39,-23,28}, -{39,-23,29}, -{39,-23,30}, -{39,-23,31}, -{39,-23,32}, -{39,-23,33}, -{39,-23,34}, -{39,-23,35}, -{39,-23,36}, -{39,-23,37}, -{39,-23,38}, -{39,-23,39}, -{39,-23,40}, -{39,-23,41}, -{39,-23,42}, -{39,-23,43}, -{39,-23,44}, -{39,-23,45}, -{39,-22,-11}, -{39,-22,-10}, -{39,-22,-9}, -{39,-22,-8}, -{39,-22,-7}, -{39,-22,-6}, -{39,-22,-5}, -{39,-22,-4}, -{39,-22,-3}, -{39,-22,-2}, -{39,-22,-1}, -{39,-22,0}, -{39,-22,1}, -{39,-22,2}, -{39,-22,3}, -{39,-22,4}, -{39,-22,5}, -{39,-22,6}, -{39,-22,7}, -{39,-22,8}, -{39,-22,9}, -{39,-22,10}, -{39,-22,11}, -{39,-22,12}, -{39,-22,13}, -{39,-22,14}, -{39,-22,15}, -{39,-22,16}, -{39,-22,17}, -{39,-22,18}, -{39,-22,19}, -{39,-22,20}, -{39,-22,21}, -{39,-22,22}, -{39,-22,23}, -{39,-22,24}, -{39,-22,25}, -{39,-22,26}, -{39,-22,27}, -{39,-22,28}, -{39,-22,29}, -{39,-22,30}, -{39,-22,31}, -{39,-22,32}, -{39,-22,33}, -{39,-22,34}, -{39,-22,35}, -{39,-22,36}, -{39,-22,37}, -{39,-22,38}, -{39,-22,39}, -{39,-22,40}, -{39,-22,41}, -{39,-22,42}, -{39,-22,43}, -{39,-22,44}, -{39,-22,45}, -{39,-21,-13}, -{39,-21,-12}, -{39,-21,-11}, -{39,-21,-10}, -{39,-21,-9}, -{39,-21,-8}, -{39,-21,-7}, -{39,-21,-6}, -{39,-21,-5}, -{39,-21,-4}, -{39,-21,-3}, -{39,-21,-2}, -{39,-21,-1}, -{39,-21,0}, -{39,-21,1}, -{39,-21,2}, -{39,-21,3}, -{39,-21,4}, -{39,-21,5}, -{39,-21,6}, -{39,-21,7}, -{39,-21,8}, -{39,-21,9}, -{39,-21,10}, -{39,-21,11}, -{39,-21,12}, -{39,-21,13}, -{39,-21,14}, -{39,-21,15}, -{39,-21,16}, -{39,-21,17}, -{39,-21,18}, -{39,-21,19}, -{39,-21,20}, -{39,-21,21}, -{39,-21,22}, -{39,-21,23}, -{39,-21,24}, -{39,-21,25}, -{39,-21,26}, -{39,-21,27}, -{39,-21,28}, -{39,-21,29}, -{39,-21,30}, -{39,-21,31}, -{39,-21,32}, -{39,-21,33}, -{39,-21,34}, -{39,-21,35}, -{39,-21,36}, -{39,-21,37}, -{39,-21,38}, -{39,-21,39}, -{39,-21,40}, -{39,-21,41}, -{39,-21,42}, -{39,-21,43}, -{39,-21,44}, -{39,-21,45}, -{39,-20,-14}, -{39,-20,-13}, -{39,-20,-12}, -{39,-20,-11}, -{39,-20,-10}, -{39,-20,-9}, -{39,-20,-8}, -{39,-20,-7}, -{39,-20,-6}, -{39,-20,-5}, -{39,-20,-4}, -{39,-20,-3}, -{39,-20,-2}, -{39,-20,-1}, -{39,-20,0}, -{39,-20,1}, -{39,-20,2}, -{39,-20,3}, -{39,-20,4}, -{39,-20,5}, -{39,-20,6}, -{39,-20,7}, -{39,-20,8}, -{39,-20,9}, -{39,-20,10}, -{39,-20,11}, -{39,-20,12}, -{39,-20,13}, -{39,-20,14}, -{39,-20,15}, -{39,-20,16}, -{39,-20,17}, -{39,-20,18}, -{39,-20,19}, -{39,-20,20}, -{39,-20,21}, -{39,-20,22}, -{39,-20,23}, -{39,-20,24}, -{39,-20,25}, -{39,-20,26}, -{39,-20,27}, -{39,-20,28}, -{39,-20,29}, -{39,-20,30}, -{39,-20,31}, -{39,-20,32}, -{39,-20,33}, -{39,-20,34}, -{39,-20,35}, -{39,-20,36}, -{39,-20,37}, -{39,-20,38}, -{39,-20,39}, -{39,-20,40}, -{39,-20,41}, -{39,-20,42}, -{39,-20,43}, -{39,-20,44}, -{39,-20,45}, -{39,-19,-15}, -{39,-19,-14}, -{39,-19,-13}, -{39,-19,-12}, -{39,-19,-11}, -{39,-19,-10}, -{39,-19,-9}, -{39,-19,-8}, -{39,-19,-7}, -{39,-19,-6}, -{39,-19,-5}, -{39,-19,-4}, -{39,-19,-3}, -{39,-19,-2}, -{39,-19,-1}, -{39,-19,0}, -{39,-19,1}, -{39,-19,2}, -{39,-19,3}, -{39,-19,4}, -{39,-19,5}, -{39,-19,6}, -{39,-19,7}, -{39,-19,8}, -{39,-19,9}, -{39,-19,10}, -{39,-19,11}, -{39,-19,12}, -{39,-19,13}, -{39,-19,14}, -{39,-19,15}, -{39,-19,16}, -{39,-19,17}, -{39,-19,18}, -{39,-19,19}, -{39,-19,20}, -{39,-19,21}, -{39,-19,22}, -{39,-19,23}, -{39,-19,24}, -{39,-19,25}, -{39,-19,26}, -{39,-19,27}, -{39,-19,28}, -{39,-19,29}, -{39,-19,30}, -{39,-19,31}, -{39,-19,32}, -{39,-19,33}, -{39,-19,34}, -{39,-19,35}, -{39,-19,36}, -{39,-19,37}, -{39,-19,38}, -{39,-19,39}, -{39,-19,40}, -{39,-19,41}, -{39,-19,42}, -{39,-19,43}, -{39,-19,44}, -{39,-19,45}, -{39,-18,-17}, -{39,-18,-16}, -{39,-18,-15}, -{39,-18,-14}, -{39,-18,-13}, -{39,-18,-12}, -{39,-18,-11}, -{39,-18,-10}, -{39,-18,-9}, -{39,-18,-8}, -{39,-18,-7}, -{39,-18,-6}, -{39,-18,-5}, -{39,-18,-4}, -{39,-18,-3}, -{39,-18,-2}, -{39,-18,-1}, -{39,-18,0}, -{39,-18,1}, -{39,-18,2}, -{39,-18,3}, -{39,-18,4}, -{39,-18,5}, -{39,-18,6}, -{39,-18,7}, -{39,-18,8}, -{39,-18,9}, -{39,-18,10}, -{39,-18,11}, -{39,-18,12}, -{39,-18,13}, -{39,-18,14}, -{39,-18,15}, -{39,-18,16}, -{39,-18,17}, -{39,-18,18}, -{39,-18,19}, -{39,-18,20}, -{39,-18,21}, -{39,-18,22}, -{39,-18,23}, -{39,-18,24}, -{39,-18,25}, -{39,-18,26}, -{39,-18,27}, -{39,-18,28}, -{39,-18,29}, -{39,-18,30}, -{39,-18,31}, -{39,-18,32}, -{39,-18,33}, -{39,-18,34}, -{39,-18,35}, -{39,-18,36}, -{39,-18,37}, -{39,-18,38}, -{39,-18,39}, -{39,-18,40}, -{39,-18,41}, -{39,-18,42}, -{39,-18,43}, -{39,-18,44}, -{39,-18,45}, -{39,-17,-18}, -{39,-17,-17}, -{39,-17,-16}, -{39,-17,-15}, -{39,-17,-14}, -{39,-17,-13}, -{39,-17,-12}, -{39,-17,-11}, -{39,-17,-10}, -{39,-17,-9}, -{39,-17,-8}, -{39,-17,-7}, -{39,-17,-6}, -{39,-17,-5}, -{39,-17,-4}, -{39,-17,-3}, -{39,-17,-2}, -{39,-17,-1}, -{39,-17,0}, -{39,-17,1}, -{39,-17,2}, -{39,-17,3}, -{39,-17,4}, -{39,-17,5}, -{39,-17,6}, -{39,-17,7}, -{39,-17,8}, -{39,-17,9}, -{39,-17,10}, -{39,-17,11}, -{39,-17,12}, -{39,-17,13}, -{39,-17,14}, -{39,-17,15}, -{39,-17,16}, -{39,-17,17}, -{39,-17,18}, -{39,-17,19}, -{39,-17,20}, -{39,-17,21}, -{39,-17,22}, -{39,-17,23}, -{39,-17,24}, -{39,-17,25}, -{39,-17,26}, -{39,-17,27}, -{39,-17,28}, -{39,-17,29}, -{39,-17,30}, -{39,-17,31}, -{39,-17,32}, -{39,-17,33}, -{39,-17,34}, -{39,-17,35}, -{39,-17,36}, -{39,-17,37}, -{39,-17,38}, -{39,-17,39}, -{39,-17,40}, -{39,-17,41}, -{39,-17,42}, -{39,-17,43}, -{39,-17,44}, -{39,-17,45}, -{39,-16,-20}, -{39,-16,-19}, -{39,-16,-18}, -{39,-16,-17}, -{39,-16,-16}, -{39,-16,-15}, -{39,-16,-14}, -{39,-16,-13}, -{39,-16,-12}, -{39,-16,-11}, -{39,-16,-10}, -{39,-16,-9}, -{39,-16,-8}, -{39,-16,-7}, -{39,-16,-6}, -{39,-16,-5}, -{39,-16,-4}, -{39,-16,-3}, -{39,-16,-2}, -{39,-16,-1}, -{39,-16,0}, -{39,-16,1}, -{39,-16,2}, -{39,-16,3}, -{39,-16,4}, -{39,-16,5}, -{39,-16,6}, -{39,-16,7}, -{39,-16,8}, -{39,-16,9}, -{39,-16,10}, -{39,-16,11}, -{39,-16,12}, -{39,-16,13}, -{39,-16,14}, -{39,-16,15}, -{39,-16,16}, -{39,-16,17}, -{39,-16,18}, -{39,-16,19}, -{39,-16,20}, -{39,-16,21}, -{39,-16,22}, -{39,-16,23}, -{39,-16,24}, -{39,-16,25}, -{39,-16,26}, -{39,-16,27}, -{39,-16,28}, -{39,-16,29}, -{39,-16,30}, -{39,-16,31}, -{39,-16,32}, -{39,-16,33}, -{39,-16,34}, -{39,-16,35}, -{39,-16,36}, -{39,-16,37}, -{39,-16,38}, -{39,-16,39}, -{39,-16,40}, -{39,-16,41}, -{39,-16,42}, -{39,-16,43}, -{39,-16,44}, -{39,-16,45}, -{39,-15,-21}, -{39,-15,-20}, -{39,-15,-19}, -{39,-15,-18}, -{39,-15,-17}, -{39,-15,-16}, -{39,-15,-15}, -{39,-15,-14}, -{39,-15,-13}, -{39,-15,-12}, -{39,-15,-11}, -{39,-15,-10}, -{39,-15,-9}, -{39,-15,-8}, -{39,-15,-7}, -{39,-15,-6}, -{39,-15,-5}, -{39,-15,-4}, -{39,-15,-3}, -{39,-15,-2}, -{39,-15,-1}, -{39,-15,0}, -{39,-15,1}, -{39,-15,2}, -{39,-15,3}, -{39,-15,4}, -{39,-15,5}, -{39,-15,6}, -{39,-15,7}, -{39,-15,8}, -{39,-15,9}, -{39,-15,10}, -{39,-15,11}, -{39,-15,12}, -{39,-15,13}, -{39,-15,14}, -{39,-15,15}, -{39,-15,16}, -{39,-15,17}, -{39,-15,18}, -{39,-15,19}, -{39,-15,20}, -{39,-15,21}, -{39,-15,22}, -{39,-15,23}, -{39,-15,24}, -{39,-15,25}, -{39,-15,26}, -{39,-15,27}, -{39,-15,28}, -{39,-15,29}, -{39,-15,30}, -{39,-15,31}, -{39,-15,32}, -{39,-15,33}, -{39,-15,34}, -{39,-15,35}, -{39,-15,36}, -{39,-15,37}, -{39,-15,38}, -{39,-15,39}, -{39,-15,40}, -{39,-15,41}, -{39,-15,42}, -{39,-15,43}, -{39,-15,44}, -{39,-15,45}, -{39,-14,-22}, -{39,-14,-21}, -{39,-14,-20}, -{39,-14,-19}, -{39,-14,-18}, -{39,-14,-17}, -{39,-14,-16}, -{39,-14,-15}, -{39,-14,-14}, -{39,-14,-13}, -{39,-14,-12}, -{39,-14,-11}, -{39,-14,-10}, -{39,-14,-9}, -{39,-14,-8}, -{39,-14,-7}, -{39,-14,-6}, -{39,-14,-5}, -{39,-14,-4}, -{39,-14,-3}, -{39,-14,-2}, -{39,-14,-1}, -{39,-14,0}, -{39,-14,1}, -{39,-14,2}, -{39,-14,3}, -{39,-14,4}, -{39,-14,5}, -{39,-14,6}, -{39,-14,7}, -{39,-14,8}, -{39,-14,9}, -{39,-14,10}, -{39,-14,11}, -{39,-14,12}, -{39,-14,13}, -{39,-14,14}, -{39,-14,15}, -{39,-14,16}, -{39,-14,17}, -{39,-14,18}, -{39,-14,19}, -{39,-14,20}, -{39,-14,21}, -{39,-14,22}, -{39,-14,23}, -{39,-14,24}, -{39,-14,25}, -{39,-14,26}, -{39,-14,27}, -{39,-14,28}, -{39,-14,29}, -{39,-14,30}, -{39,-14,31}, -{39,-14,32}, -{39,-14,33}, -{39,-14,34}, -{39,-14,35}, -{39,-14,36}, -{39,-14,37}, -{39,-14,38}, -{39,-14,39}, -{39,-14,40}, -{39,-14,41}, -{39,-14,42}, -{39,-14,43}, -{39,-14,44}, -{39,-14,45}, -{39,-13,-24}, -{39,-13,-23}, -{39,-13,-22}, -{39,-13,-21}, -{39,-13,-20}, -{39,-13,-19}, -{39,-13,-18}, -{39,-13,-17}, -{39,-13,-16}, -{39,-13,-15}, -{39,-13,-14}, -{39,-13,-13}, -{39,-13,-12}, -{39,-13,-11}, -{39,-13,-10}, -{39,-13,-9}, -{39,-13,-8}, -{39,-13,-7}, -{39,-13,-6}, -{39,-13,-5}, -{39,-13,-4}, -{39,-13,-3}, -{39,-13,-2}, -{39,-13,-1}, -{39,-13,0}, -{39,-13,1}, -{39,-13,2}, -{39,-13,3}, -{39,-13,4}, -{39,-13,5}, -{39,-13,6}, -{39,-13,7}, -{39,-13,8}, -{39,-13,9}, -{39,-13,10}, -{39,-13,11}, -{39,-13,12}, -{39,-13,13}, -{39,-13,14}, -{39,-13,15}, -{39,-13,16}, -{39,-13,17}, -{39,-13,18}, -{39,-13,19}, -{39,-13,20}, -{39,-13,21}, -{39,-13,22}, -{39,-13,23}, -{39,-13,24}, -{39,-13,25}, -{39,-13,26}, -{39,-13,27}, -{39,-13,28}, -{39,-13,29}, -{39,-13,30}, -{39,-13,31}, -{39,-13,32}, -{39,-13,33}, -{39,-13,34}, -{39,-13,35}, -{39,-13,36}, -{39,-13,37}, -{39,-13,38}, -{39,-13,39}, -{39,-13,40}, -{39,-13,41}, -{39,-13,42}, -{39,-13,43}, -{39,-13,44}, -{39,-13,45}, -{39,-12,-25}, -{39,-12,-24}, -{39,-12,-23}, -{39,-12,-22}, -{39,-12,-21}, -{39,-12,-20}, -{39,-12,-19}, -{39,-12,-18}, -{39,-12,-17}, -{39,-12,-16}, -{39,-12,-15}, -{39,-12,-14}, -{39,-12,-13}, -{39,-12,-12}, -{39,-12,-11}, -{39,-12,-10}, -{39,-12,-9}, -{39,-12,-8}, -{39,-12,-7}, -{39,-12,-6}, -{39,-12,-5}, -{39,-12,-4}, -{39,-12,-3}, -{39,-12,-2}, -{39,-12,-1}, -{39,-12,0}, -{39,-12,1}, -{39,-12,2}, -{39,-12,3}, -{39,-12,4}, -{39,-12,5}, -{39,-12,6}, -{39,-12,7}, -{39,-12,8}, -{39,-12,9}, -{39,-12,10}, -{39,-12,11}, -{39,-12,12}, -{39,-12,13}, -{39,-12,14}, -{39,-12,15}, -{39,-12,16}, -{39,-12,17}, -{39,-12,18}, -{39,-12,19}, -{39,-12,20}, -{39,-12,21}, -{39,-12,22}, -{39,-12,23}, -{39,-12,24}, -{39,-12,25}, -{39,-12,26}, -{39,-12,27}, -{39,-12,28}, -{39,-12,29}, -{39,-12,30}, -{39,-12,31}, -{39,-12,32}, -{39,-12,33}, -{39,-12,34}, -{39,-12,35}, -{39,-12,36}, -{39,-12,37}, -{39,-12,38}, -{39,-12,39}, -{39,-12,40}, -{39,-12,41}, -{39,-12,42}, -{39,-12,43}, -{39,-12,44}, -{39,-12,45}, -{39,-12,46}, -{39,-11,-26}, -{39,-11,-25}, -{39,-11,-24}, -{39,-11,-23}, -{39,-11,-22}, -{39,-11,-21}, -{39,-11,-20}, -{39,-11,-19}, -{39,-11,-18}, -{39,-11,-17}, -{39,-11,-16}, -{39,-11,-15}, -{39,-11,-14}, -{39,-11,-13}, -{39,-11,-12}, -{39,-11,-11}, -{39,-11,-10}, -{39,-11,-9}, -{39,-11,-8}, -{39,-11,-7}, -{39,-11,-6}, -{39,-11,-5}, -{39,-11,-4}, -{39,-11,-3}, -{39,-11,-2}, -{39,-11,-1}, -{39,-11,0}, -{39,-11,1}, -{39,-11,2}, -{39,-11,3}, -{39,-11,4}, -{39,-11,5}, -{39,-11,6}, -{39,-11,7}, -{39,-11,8}, -{39,-11,9}, -{39,-11,10}, -{39,-11,11}, -{39,-11,12}, -{39,-11,13}, -{39,-11,14}, -{39,-11,15}, -{39,-11,16}, -{39,-11,17}, -{39,-11,18}, -{39,-11,19}, -{39,-11,20}, -{39,-11,21}, -{39,-11,22}, -{39,-11,23}, -{39,-11,24}, -{39,-11,25}, -{39,-11,26}, -{39,-11,27}, -{39,-11,28}, -{39,-11,29}, -{39,-11,30}, -{39,-11,31}, -{39,-11,32}, -{39,-11,33}, -{39,-11,34}, -{39,-11,35}, -{39,-11,36}, -{39,-11,37}, -{39,-11,38}, -{39,-11,39}, -{39,-11,40}, -{39,-11,41}, -{39,-11,42}, -{39,-11,43}, -{39,-11,44}, -{39,-11,45}, -{39,-11,46}, -{39,-10,-27}, -{39,-10,-26}, -{39,-10,-25}, -{39,-10,-24}, -{39,-10,-23}, -{39,-10,-22}, -{39,-10,-21}, -{39,-10,-20}, -{39,-10,-19}, -{39,-10,-18}, -{39,-10,-17}, -{39,-10,-16}, -{39,-10,-15}, -{39,-10,-14}, -{39,-10,-13}, -{39,-10,-12}, -{39,-10,-11}, -{39,-10,-10}, -{39,-10,-9}, -{39,-10,-8}, -{39,-10,-7}, -{39,-10,-6}, -{39,-10,-5}, -{39,-10,-4}, -{39,-10,-3}, -{39,-10,-2}, -{39,-10,-1}, -{39,-10,0}, -{39,-10,1}, -{39,-10,2}, -{39,-10,3}, -{39,-10,4}, -{39,-10,5}, -{39,-10,6}, -{39,-10,7}, -{39,-10,8}, -{39,-10,9}, -{39,-10,10}, -{39,-10,11}, -{39,-10,12}, -{39,-10,13}, -{39,-10,14}, -{39,-10,15}, -{39,-10,16}, -{39,-10,17}, -{39,-10,18}, -{39,-10,19}, -{39,-10,20}, -{39,-10,21}, -{39,-10,22}, -{39,-10,23}, -{39,-10,24}, -{39,-10,25}, -{39,-10,26}, -{39,-10,27}, -{39,-10,28}, -{39,-10,29}, -{39,-10,30}, -{39,-10,31}, -{39,-10,32}, -{39,-10,33}, -{39,-10,34}, -{39,-10,35}, -{39,-10,36}, -{39,-10,37}, -{39,-10,38}, -{39,-10,39}, -{39,-10,40}, -{39,-10,41}, -{39,-10,42}, -{39,-10,43}, -{39,-10,44}, -{39,-10,45}, -{39,-10,46}, -{39,-9,-29}, -{39,-9,-28}, -{39,-9,-27}, -{39,-9,-26}, -{39,-9,-25}, -{39,-9,-24}, -{39,-9,-23}, -{39,-9,-22}, -{39,-9,-21}, -{39,-9,-20}, -{39,-9,-19}, -{39,-9,-18}, -{39,-9,-17}, -{39,-9,-16}, -{39,-9,-15}, -{39,-9,-14}, -{39,-9,-13}, -{39,-9,-12}, -{39,-9,-11}, -{39,-9,-10}, -{39,-9,-9}, -{39,-9,-8}, -{39,-9,-7}, -{39,-9,-6}, -{39,-9,-5}, -{39,-9,-4}, -{39,-9,-3}, -{39,-9,-2}, -{39,-9,-1}, -{39,-9,0}, -{39,-9,1}, -{39,-9,2}, -{39,-9,3}, -{39,-9,4}, -{39,-9,5}, -{39,-9,6}, -{39,-9,7}, -{39,-9,8}, -{39,-9,9}, -{39,-9,10}, -{39,-9,11}, -{39,-9,12}, -{39,-9,13}, -{39,-9,14}, -{39,-9,15}, -{39,-9,16}, -{39,-9,17}, -{39,-9,18}, -{39,-9,19}, -{39,-9,20}, -{39,-9,21}, -{39,-9,22}, -{39,-9,23}, -{39,-9,24}, -{39,-9,25}, -{39,-9,26}, -{39,-9,27}, -{39,-9,28}, -{39,-9,29}, -{39,-9,30}, -{39,-9,31}, -{39,-9,32}, -{39,-9,33}, -{39,-9,34}, -{39,-9,35}, -{39,-9,36}, -{39,-9,37}, -{39,-9,38}, -{39,-9,39}, -{39,-9,40}, -{39,-9,41}, -{39,-9,42}, -{39,-9,43}, -{39,-9,44}, -{39,-9,45}, -{39,-9,46}, -{39,-8,-30}, -{39,-8,-29}, -{39,-8,-28}, -{39,-8,-27}, -{39,-8,-26}, -{39,-8,-25}, -{39,-8,-24}, -{39,-8,-23}, -{39,-8,-22}, -{39,-8,-21}, -{39,-8,-20}, -{39,-8,-19}, -{39,-8,-18}, -{39,-8,-17}, -{39,-8,-16}, -{39,-8,-15}, -{39,-8,-14}, -{39,-8,-13}, -{39,-8,-12}, -{39,-8,-11}, -{39,-8,-10}, -{39,-8,-9}, -{39,-8,-8}, -{39,-8,-7}, -{39,-8,-6}, -{39,-8,-5}, -{39,-8,-4}, -{39,-8,-3}, -{39,-8,-2}, -{39,-8,-1}, -{39,-8,0}, -{39,-8,1}, -{39,-8,2}, -{39,-8,3}, -{39,-8,4}, -{39,-8,5}, -{39,-8,6}, -{39,-8,7}, -{39,-8,8}, -{39,-8,9}, -{39,-8,10}, -{39,-8,11}, -{39,-8,12}, -{39,-8,13}, -{39,-8,14}, -{39,-8,15}, -{39,-8,16}, -{39,-8,17}, -{39,-8,18}, -{39,-8,19}, -{39,-8,20}, -{39,-8,21}, -{39,-8,22}, -{39,-8,23}, -{39,-8,24}, -{39,-8,25}, -{39,-8,26}, -{39,-8,27}, -{39,-8,28}, -{39,-8,29}, -{39,-8,30}, -{39,-8,31}, -{39,-8,32}, -{39,-8,33}, -{39,-8,34}, -{39,-8,35}, -{39,-8,36}, -{39,-8,37}, -{39,-8,38}, -{39,-8,39}, -{39,-8,40}, -{39,-8,41}, -{39,-8,42}, -{39,-8,43}, -{39,-8,44}, -{39,-8,45}, -{39,-8,46}, -{39,-7,-31}, -{39,-7,-30}, -{39,-7,-29}, -{39,-7,-28}, -{39,-7,-27}, -{39,-7,-26}, -{39,-7,-25}, -{39,-7,-24}, -{39,-7,-23}, -{39,-7,-22}, -{39,-7,-21}, -{39,-7,-20}, -{39,-7,-19}, -{39,-7,-18}, -{39,-7,-17}, -{39,-7,-16}, -{39,-7,-15}, -{39,-7,-14}, -{39,-7,-13}, -{39,-7,-12}, -{39,-7,-11}, -{39,-7,-10}, -{39,-7,-9}, -{39,-7,-8}, -{39,-7,-7}, -{39,-7,-6}, -{39,-7,-5}, -{39,-7,-4}, -{39,-7,-3}, -{39,-7,-2}, -{39,-7,-1}, -{39,-7,0}, -{39,-7,1}, -{39,-7,2}, -{39,-7,3}, -{39,-7,4}, -{39,-7,5}, -{39,-7,6}, -{39,-7,7}, -{39,-7,8}, -{39,-7,9}, -{39,-7,10}, -{39,-7,11}, -{39,-7,12}, -{39,-7,13}, -{39,-7,14}, -{39,-7,15}, -{39,-7,16}, -{39,-7,17}, -{39,-7,18}, -{39,-7,19}, -{39,-7,20}, -{39,-7,21}, -{39,-7,22}, -{39,-7,23}, -{39,-7,24}, -{39,-7,25}, -{39,-7,26}, -{39,-7,27}, -{39,-7,28}, -{39,-7,29}, -{39,-7,30}, -{39,-7,31}, -{39,-7,32}, -{39,-7,33}, -{39,-7,34}, -{39,-7,35}, -{39,-7,36}, -{39,-7,37}, -{39,-7,38}, -{39,-7,39}, -{39,-7,40}, -{39,-7,41}, -{39,-7,42}, -{39,-7,43}, -{39,-7,44}, -{39,-7,45}, -{39,-7,46}, -{39,-6,-32}, -{39,-6,-31}, -{39,-6,-30}, -{39,-6,-29}, -{39,-6,-28}, -{39,-6,-27}, -{39,-6,-26}, -{39,-6,-25}, -{39,-6,-24}, -{39,-6,-23}, -{39,-6,-22}, -{39,-6,-21}, -{39,-6,-20}, -{39,-6,-19}, -{39,-6,-18}, -{39,-6,-17}, -{39,-6,-16}, -{39,-6,-15}, -{39,-6,-14}, -{39,-6,-13}, -{39,-6,-12}, -{39,-6,-11}, -{39,-6,-10}, -{39,-6,-9}, -{39,-6,-8}, -{39,-6,-7}, -{39,-6,-6}, -{39,-6,-5}, -{39,-6,-4}, -{39,-6,-3}, -{39,-6,-2}, -{39,-6,-1}, -{39,-6,0}, -{39,-6,1}, -{39,-6,2}, -{39,-6,3}, -{39,-6,4}, -{39,-6,5}, -{39,-6,6}, -{39,-6,7}, -{39,-6,8}, -{39,-6,9}, -{39,-6,10}, -{39,-6,11}, -{39,-6,12}, -{39,-6,13}, -{39,-6,14}, -{39,-6,15}, -{39,-6,16}, -{39,-6,17}, -{39,-6,18}, -{39,-6,19}, -{39,-6,20}, -{39,-6,21}, -{39,-6,22}, -{39,-6,23}, -{39,-6,24}, -{39,-6,25}, -{39,-6,26}, -{39,-6,27}, -{39,-6,28}, -{39,-6,29}, -{39,-6,30}, -{39,-6,31}, -{39,-6,32}, -{39,-6,33}, -{39,-6,34}, -{39,-6,35}, -{39,-6,36}, -{39,-6,37}, -{39,-6,38}, -{39,-6,39}, -{39,-6,40}, -{39,-6,41}, -{39,-6,42}, -{39,-6,43}, -{39,-6,44}, -{39,-6,45}, -{39,-6,46}, -{39,-5,-33}, -{39,-5,-32}, -{39,-5,-31}, -{39,-5,-30}, -{39,-5,-29}, -{39,-5,-28}, -{39,-5,-27}, -{39,-5,-26}, -{39,-5,-25}, -{39,-5,-24}, -{39,-5,-23}, -{39,-5,-22}, -{39,-5,-21}, -{39,-5,-20}, -{39,-5,-19}, -{39,-5,-18}, -{39,-5,-17}, -{39,-5,-16}, -{39,-5,-15}, -{39,-5,-14}, -{39,-5,-13}, -{39,-5,-12}, -{39,-5,-11}, -{39,-5,-10}, -{39,-5,-9}, -{39,-5,-8}, -{39,-5,-7}, -{39,-5,-6}, -{39,-5,-5}, -{39,-5,-4}, -{39,-5,-3}, -{39,-5,-2}, -{39,-5,-1}, -{39,-5,0}, -{39,-5,1}, -{39,-5,2}, -{39,-5,3}, -{39,-5,4}, -{39,-5,5}, -{39,-5,6}, -{39,-5,7}, -{39,-5,8}, -{39,-5,9}, -{39,-5,10}, -{39,-5,11}, -{39,-5,12}, -{39,-5,13}, -{39,-5,14}, -{39,-5,15}, -{39,-5,16}, -{39,-5,17}, -{39,-5,18}, -{39,-5,19}, -{39,-5,20}, -{39,-5,21}, -{39,-5,22}, -{39,-5,23}, -{39,-5,24}, -{39,-5,25}, -{39,-5,26}, -{39,-5,27}, -{39,-5,28}, -{39,-5,29}, -{39,-5,30}, -{39,-5,31}, -{39,-5,32}, -{39,-5,33}, -{39,-5,34}, -{39,-5,35}, -{39,-5,36}, -{39,-5,37}, -{39,-5,38}, -{39,-5,39}, -{39,-5,40}, -{39,-5,41}, -{39,-5,42}, -{39,-5,43}, -{39,-5,44}, -{39,-5,45}, -{39,-5,46}, -{39,-4,-35}, -{39,-4,-34}, -{39,-4,-33}, -{39,-4,-32}, -{39,-4,-31}, -{39,-4,-30}, -{39,-4,-29}, -{39,-4,-28}, -{39,-4,-27}, -{39,-4,-26}, -{39,-4,-25}, -{39,-4,-24}, -{39,-4,-23}, -{39,-4,-22}, -{39,-4,-21}, -{39,-4,-20}, -{39,-4,-19}, -{39,-4,-18}, -{39,-4,-17}, -{39,-4,-16}, -{39,-4,-15}, -{39,-4,-14}, -{39,-4,-13}, -{39,-4,-12}, -{39,-4,-11}, -{39,-4,-10}, -{39,-4,-9}, -{39,-4,-8}, -{39,-4,-7}, -{39,-4,-6}, -{39,-4,-5}, -{39,-4,-4}, -{39,-4,-3}, -{39,-4,-2}, -{39,-4,-1}, -{39,-4,0}, -{39,-4,1}, -{39,-4,2}, -{39,-4,3}, -{39,-4,4}, -{39,-4,5}, -{39,-4,6}, -{39,-4,7}, -{39,-4,8}, -{39,-4,9}, -{39,-4,10}, -{39,-4,11}, -{39,-4,12}, -{39,-4,13}, -{39,-4,14}, -{39,-4,15}, -{39,-4,16}, -{39,-4,17}, -{39,-4,18}, -{39,-4,19}, -{39,-4,20}, -{39,-4,21}, -{39,-4,22}, -{39,-4,23}, -{39,-4,24}, -{39,-4,25}, -{39,-4,26}, -{39,-4,27}, -{39,-4,28}, -{39,-4,29}, -{39,-4,30}, -{39,-4,31}, -{39,-4,32}, -{39,-4,33}, -{39,-4,34}, -{39,-4,35}, -{39,-4,36}, -{39,-4,37}, -{39,-4,38}, -{39,-4,39}, -{39,-4,40}, -{39,-4,41}, -{39,-4,42}, -{39,-4,43}, -{39,-4,44}, -{39,-4,45}, -{39,-4,46}, -{39,-3,-36}, -{39,-3,-35}, -{39,-3,-34}, -{39,-3,-33}, -{39,-3,-32}, -{39,-3,-31}, -{39,-3,-30}, -{39,-3,-29}, -{39,-3,-28}, -{39,-3,-27}, -{39,-3,-26}, -{39,-3,-25}, -{39,-3,-24}, -{39,-3,-23}, -{39,-3,-22}, -{39,-3,-21}, -{39,-3,-20}, -{39,-3,-19}, -{39,-3,-18}, -{39,-3,-17}, -{39,-3,-16}, -{39,-3,-15}, -{39,-3,-14}, -{39,-3,-13}, -{39,-3,-12}, -{39,-3,-11}, -{39,-3,-10}, -{39,-3,-9}, -{39,-3,-8}, -{39,-3,-7}, -{39,-3,-6}, -{39,-3,-5}, -{39,-3,-4}, -{39,-3,-3}, -{39,-3,-2}, -{39,-3,-1}, -{39,-3,0}, -{39,-3,1}, -{39,-3,2}, -{39,-3,3}, -{39,-3,4}, -{39,-3,5}, -{39,-3,6}, -{39,-3,7}, -{39,-3,8}, -{39,-3,9}, -{39,-3,10}, -{39,-3,11}, -{39,-3,12}, -{39,-3,13}, -{39,-3,14}, -{39,-3,15}, -{39,-3,16}, -{39,-3,17}, -{39,-3,18}, -{39,-3,19}, -{39,-3,20}, -{39,-3,21}, -{39,-3,22}, -{39,-3,23}, -{39,-3,24}, -{39,-3,25}, -{39,-3,26}, -{39,-3,27}, -{39,-3,28}, -{39,-3,29}, -{39,-3,30}, -{39,-3,31}, -{39,-3,32}, -{39,-3,33}, -{39,-3,34}, -{39,-3,35}, -{39,-3,36}, -{39,-3,37}, -{39,-3,38}, -{39,-3,39}, -{39,-3,40}, -{39,-3,41}, -{39,-3,42}, -{39,-3,43}, -{39,-3,44}, -{39,-3,45}, -{39,-3,46}, -{39,-2,-37}, -{39,-2,-36}, -{39,-2,-35}, -{39,-2,-34}, -{39,-2,-33}, -{39,-2,-32}, -{39,-2,-31}, -{39,-2,-30}, -{39,-2,-29}, -{39,-2,-28}, -{39,-2,-27}, -{39,-2,-26}, -{39,-2,-25}, -{39,-2,-24}, -{39,-2,-23}, -{39,-2,-22}, -{39,-2,-21}, -{39,-2,-20}, -{39,-2,-19}, -{39,-2,-18}, -{39,-2,-17}, -{39,-2,-16}, -{39,-2,-15}, -{39,-2,-14}, -{39,-2,-13}, -{39,-2,-12}, -{39,-2,-11}, -{39,-2,-10}, -{39,-2,-9}, -{39,-2,-8}, -{39,-2,-7}, -{39,-2,-6}, -{39,-2,-5}, -{39,-2,-4}, -{39,-2,-3}, -{39,-2,-2}, -{39,-2,-1}, -{39,-2,0}, -{39,-2,1}, -{39,-2,2}, -{39,-2,3}, -{39,-2,4}, -{39,-2,5}, -{39,-2,6}, -{39,-2,7}, -{39,-2,8}, -{39,-2,9}, -{39,-2,10}, -{39,-2,11}, -{39,-2,12}, -{39,-2,13}, -{39,-2,14}, -{39,-2,15}, -{39,-2,16}, -{39,-2,17}, -{39,-2,18}, -{39,-2,19}, -{39,-2,20}, -{39,-2,21}, -{39,-2,22}, -{39,-2,23}, -{39,-2,24}, -{39,-2,25}, -{39,-2,26}, -{39,-2,27}, -{39,-2,28}, -{39,-2,29}, -{39,-2,30}, -{39,-2,31}, -{39,-2,32}, -{39,-2,33}, -{39,-2,34}, -{39,-2,35}, -{39,-2,36}, -{39,-2,37}, -{39,-2,38}, -{39,-2,39}, -{39,-2,40}, -{39,-2,41}, -{39,-2,42}, -{39,-2,43}, -{39,-2,44}, -{39,-2,45}, -{39,-2,46}, -{39,-1,-38}, -{39,-1,-37}, -{39,-1,-36}, -{39,-1,-35}, -{39,-1,-34}, -{39,-1,-33}, -{39,-1,-32}, -{39,-1,-31}, -{39,-1,-30}, -{39,-1,-29}, -{39,-1,-28}, -{39,-1,-27}, -{39,-1,-26}, -{39,-1,-25}, -{39,-1,-24}, -{39,-1,-23}, -{39,-1,-22}, -{39,-1,-21}, -{39,-1,-20}, -{39,-1,-19}, -{39,-1,-18}, -{39,-1,-17}, -{39,-1,-16}, -{39,-1,-15}, -{39,-1,-14}, -{39,-1,-13}, -{39,-1,-12}, -{39,-1,-11}, -{39,-1,-10}, -{39,-1,-9}, -{39,-1,-8}, -{39,-1,-7}, -{39,-1,-6}, -{39,-1,-5}, -{39,-1,-4}, -{39,-1,-3}, -{39,-1,-2}, -{39,-1,-1}, -{39,-1,0}, -{39,-1,1}, -{39,-1,2}, -{39,-1,3}, -{39,-1,4}, -{39,-1,5}, -{39,-1,6}, -{39,-1,7}, -{39,-1,8}, -{39,-1,9}, -{39,-1,10}, -{39,-1,11}, -{39,-1,12}, -{39,-1,13}, -{39,-1,14}, -{39,-1,15}, -{39,-1,16}, -{39,-1,17}, -{39,-1,18}, -{39,-1,19}, -{39,-1,20}, -{39,-1,21}, -{39,-1,22}, -{39,-1,23}, -{39,-1,24}, -{39,-1,25}, -{39,-1,26}, -{39,-1,27}, -{39,-1,28}, -{39,-1,29}, -{39,-1,30}, -{39,-1,31}, -{39,-1,32}, -{39,-1,33}, -{39,-1,34}, -{39,-1,35}, -{39,-1,36}, -{39,-1,37}, -{39,-1,38}, -{39,-1,39}, -{39,-1,40}, -{39,-1,41}, -{39,-1,42}, -{39,-1,43}, -{39,-1,44}, -{39,-1,45}, -{39,-1,46}, -{39,0,-39}, -{39,0,-38}, -{39,0,-37}, -{39,0,-36}, -{39,0,-35}, -{39,0,-34}, -{39,0,-33}, -{39,0,-32}, -{39,0,-31}, -{39,0,-30}, -{39,0,-29}, -{39,0,-28}, -{39,0,-27}, -{39,0,-26}, -{39,0,-25}, -{39,0,-24}, -{39,0,-23}, -{39,0,-22}, -{39,0,-21}, -{39,0,-20}, -{39,0,-19}, -{39,0,-18}, -{39,0,-17}, -{39,0,-16}, -{39,0,-15}, -{39,0,-14}, -{39,0,-13}, -{39,0,-12}, -{39,0,-11}, -{39,0,-10}, -{39,0,-9}, -{39,0,-8}, -{39,0,-7}, -{39,0,-6}, -{39,0,-5}, -{39,0,-4}, -{39,0,-3}, -{39,0,-2}, -{39,0,-1}, -{39,0,0}, -{39,0,1}, -{39,0,2}, -{39,0,3}, -{39,0,4}, -{39,0,5}, -{39,0,6}, -{39,0,7}, -{39,0,8}, -{39,0,9}, -{39,0,10}, -{39,0,11}, -{39,0,12}, -{39,0,13}, -{39,0,14}, -{39,0,15}, -{39,0,16}, -{39,0,17}, -{39,0,18}, -{39,0,19}, -{39,0,20}, -{39,0,21}, -{39,0,22}, -{39,0,23}, -{39,0,24}, -{39,0,25}, -{39,0,26}, -{39,0,27}, -{39,0,28}, -{39,0,29}, -{39,0,30}, -{39,0,31}, -{39,0,32}, -{39,0,33}, -{39,0,34}, -{39,0,35}, -{39,0,36}, -{39,0,37}, -{39,0,38}, -{39,0,39}, -{39,0,40}, -{39,0,41}, -{39,0,42}, -{39,0,43}, -{39,0,44}, -{39,0,45}, -{39,0,46}, -{39,1,-40}, -{39,1,-39}, -{39,1,-38}, -{39,1,-37}, -{39,1,-36}, -{39,1,-35}, -{39,1,-34}, -{39,1,-33}, -{39,1,-32}, -{39,1,-31}, -{39,1,-30}, -{39,1,-29}, -{39,1,-28}, -{39,1,-27}, -{39,1,-26}, -{39,1,-25}, -{39,1,-24}, -{39,1,-23}, -{39,1,-22}, -{39,1,-21}, -{39,1,-20}, -{39,1,-19}, -{39,1,-18}, -{39,1,-17}, -{39,1,-16}, -{39,1,-15}, -{39,1,-14}, -{39,1,-13}, -{39,1,-12}, -{39,1,-11}, -{39,1,-10}, -{39,1,-9}, -{39,1,-8}, -{39,1,-7}, -{39,1,-6}, -{39,1,-5}, -{39,1,-4}, -{39,1,-3}, -{39,1,-2}, -{39,1,-1}, -{39,1,0}, -{39,1,1}, -{39,1,2}, -{39,1,3}, -{39,1,4}, -{39,1,5}, -{39,1,6}, -{39,1,7}, -{39,1,8}, -{39,1,9}, -{39,1,10}, -{39,1,11}, -{39,1,12}, -{39,1,13}, -{39,1,14}, -{39,1,15}, -{39,1,16}, -{39,1,17}, -{39,1,18}, -{39,1,19}, -{39,1,20}, -{39,1,21}, -{39,1,22}, -{39,1,23}, -{39,1,24}, -{39,1,25}, -{39,1,26}, -{39,1,27}, -{39,1,28}, -{39,1,29}, -{39,1,30}, -{39,1,31}, -{39,1,32}, -{39,1,33}, -{39,1,34}, -{39,1,35}, -{39,1,36}, -{39,1,37}, -{39,1,38}, -{39,1,39}, -{39,1,40}, -{39,1,41}, -{39,1,42}, -{39,1,43}, -{39,1,44}, -{39,1,45}, -{39,1,46}, -{39,2,-41}, -{39,2,-40}, -{39,2,-39}, -{39,2,-38}, -{39,2,-37}, -{39,2,-36}, -{39,2,-35}, -{39,2,-34}, -{39,2,-33}, -{39,2,-32}, -{39,2,-31}, -{39,2,-30}, -{39,2,-29}, -{39,2,-28}, -{39,2,-27}, -{39,2,-26}, -{39,2,-25}, -{39,2,-24}, -{39,2,-23}, -{39,2,-22}, -{39,2,-21}, -{39,2,-20}, -{39,2,-19}, -{39,2,-18}, -{39,2,-17}, -{39,2,-16}, -{39,2,-15}, -{39,2,-14}, -{39,2,-13}, -{39,2,-12}, -{39,2,-11}, -{39,2,-10}, -{39,2,-9}, -{39,2,-8}, -{39,2,-7}, -{39,2,-6}, -{39,2,-5}, -{39,2,-4}, -{39,2,-3}, -{39,2,-2}, -{39,2,-1}, -{39,2,0}, -{39,2,1}, -{39,2,2}, -{39,2,3}, -{39,2,4}, -{39,2,5}, -{39,2,6}, -{39,2,7}, -{39,2,8}, -{39,2,9}, -{39,2,10}, -{39,2,11}, -{39,2,12}, -{39,2,13}, -{39,2,14}, -{39,2,15}, -{39,2,16}, -{39,2,17}, -{39,2,18}, -{39,2,19}, -{39,2,20}, -{39,2,21}, -{39,2,22}, -{39,2,23}, -{39,2,24}, -{39,2,25}, -{39,2,26}, -{39,2,27}, -{39,2,28}, -{39,2,29}, -{39,2,30}, -{39,2,31}, -{39,2,32}, -{39,2,33}, -{39,2,34}, -{39,2,35}, -{39,2,36}, -{39,2,37}, -{39,2,38}, -{39,2,39}, -{39,2,40}, -{39,2,41}, -{39,2,42}, -{39,2,43}, -{39,2,44}, -{39,2,45}, -{39,2,46}, -{39,3,-43}, -{39,3,-42}, -{39,3,-41}, -{39,3,-40}, -{39,3,-39}, -{39,3,-38}, -{39,3,-37}, -{39,3,-36}, -{39,3,-35}, -{39,3,-34}, -{39,3,-33}, -{39,3,-32}, -{39,3,-31}, -{39,3,-30}, -{39,3,-29}, -{39,3,-28}, -{39,3,-27}, -{39,3,-26}, -{39,3,-25}, -{39,3,-24}, -{39,3,-23}, -{39,3,-22}, -{39,3,-21}, -{39,3,-20}, -{39,3,-19}, -{39,3,-18}, -{39,3,-17}, -{39,3,-16}, -{39,3,-15}, -{39,3,-14}, -{39,3,-13}, -{39,3,-12}, -{39,3,-11}, -{39,3,-10}, -{39,3,-9}, -{39,3,-8}, -{39,3,-7}, -{39,3,-6}, -{39,3,-5}, -{39,3,-4}, -{39,3,-3}, -{39,3,-2}, -{39,3,-1}, -{39,3,0}, -{39,3,1}, -{39,3,2}, -{39,3,3}, -{39,3,4}, -{39,3,5}, -{39,3,6}, -{39,3,7}, -{39,3,8}, -{39,3,9}, -{39,3,10}, -{39,3,11}, -{39,3,12}, -{39,3,13}, -{39,3,14}, -{39,3,15}, -{39,3,16}, -{39,3,17}, -{39,3,18}, -{39,3,19}, -{39,3,20}, -{39,3,21}, -{39,3,22}, -{39,3,23}, -{39,3,24}, -{39,3,25}, -{39,3,26}, -{39,3,27}, -{39,3,28}, -{39,3,29}, -{39,3,30}, -{39,3,31}, -{39,3,32}, -{39,3,33}, -{39,3,34}, -{39,3,35}, -{39,3,36}, -{39,3,37}, -{39,3,38}, -{39,3,39}, -{39,3,40}, -{39,3,41}, -{39,3,42}, -{39,3,43}, -{39,3,44}, -{39,3,45}, -{39,3,46}, -{39,3,47}, -{39,4,-44}, -{39,4,-43}, -{39,4,-42}, -{39,4,-41}, -{39,4,-40}, -{39,4,-39}, -{39,4,-38}, -{39,4,-37}, -{39,4,-36}, -{39,4,-35}, -{39,4,-34}, -{39,4,-33}, -{39,4,-32}, -{39,4,-31}, -{39,4,-30}, -{39,4,-29}, -{39,4,-28}, -{39,4,-27}, -{39,4,-26}, -{39,4,-25}, -{39,4,-24}, -{39,4,-23}, -{39,4,-22}, -{39,4,-21}, -{39,4,-20}, -{39,4,-19}, -{39,4,-18}, -{39,4,-17}, -{39,4,-16}, -{39,4,-15}, -{39,4,-14}, -{39,4,-13}, -{39,4,-12}, -{39,4,-11}, -{39,4,-10}, -{39,4,-9}, -{39,4,-8}, -{39,4,-7}, -{39,4,-6}, -{39,4,-5}, -{39,4,-4}, -{39,4,-3}, -{39,4,-2}, -{39,4,-1}, -{39,4,0}, -{39,4,1}, -{39,4,2}, -{39,4,3}, -{39,4,4}, -{39,4,5}, -{39,4,6}, -{39,4,7}, -{39,4,8}, -{39,4,9}, -{39,4,10}, -{39,4,11}, -{39,4,12}, -{39,4,13}, -{39,4,14}, -{39,4,15}, -{39,4,16}, -{39,4,17}, -{39,4,18}, -{39,4,19}, -{39,4,20}, -{39,4,21}, -{39,4,22}, -{39,4,23}, -{39,4,24}, -{39,4,25}, -{39,4,26}, -{39,4,27}, -{39,4,28}, -{39,4,29}, -{39,4,30}, -{39,4,31}, -{39,4,32}, -{39,4,33}, -{39,4,34}, -{39,4,35}, -{39,4,36}, -{39,4,37}, -{39,4,38}, -{39,4,39}, -{39,4,40}, -{39,4,41}, -{39,4,42}, -{39,4,43}, -{39,4,44}, -{39,4,45}, -{39,4,46}, -{39,4,47}, -{39,5,-45}, -{39,5,-44}, -{39,5,-43}, -{39,5,-42}, -{39,5,-41}, -{39,5,-40}, -{39,5,-39}, -{39,5,-38}, -{39,5,-37}, -{39,5,-36}, -{39,5,-35}, -{39,5,-34}, -{39,5,-33}, -{39,5,-32}, -{39,5,-31}, -{39,5,-30}, -{39,5,-29}, -{39,5,-28}, -{39,5,-27}, -{39,5,-26}, -{39,5,-25}, -{39,5,-24}, -{39,5,-23}, -{39,5,-22}, -{39,5,-21}, -{39,5,-20}, -{39,5,-19}, -{39,5,-18}, -{39,5,-17}, -{39,5,-16}, -{39,5,-15}, -{39,5,-14}, -{39,5,-13}, -{39,5,-12}, -{39,5,-11}, -{39,5,-10}, -{39,5,-9}, -{39,5,-8}, -{39,5,-7}, -{39,5,-6}, -{39,5,-5}, -{39,5,-4}, -{39,5,-3}, -{39,5,-2}, -{39,5,-1}, -{39,5,0}, -{39,5,1}, -{39,5,2}, -{39,5,3}, -{39,5,4}, -{39,5,5}, -{39,5,6}, -{39,5,7}, -{39,5,8}, -{39,5,9}, -{39,5,10}, -{39,5,11}, -{39,5,12}, -{39,5,13}, -{39,5,14}, -{39,5,15}, -{39,5,16}, -{39,5,17}, -{39,5,18}, -{39,5,19}, -{39,5,20}, -{39,5,21}, -{39,5,22}, -{39,5,23}, -{39,5,24}, -{39,5,25}, -{39,5,26}, -{39,5,27}, -{39,5,28}, -{39,5,29}, -{39,5,30}, -{39,5,31}, -{39,5,32}, -{39,5,33}, -{39,5,34}, -{39,5,35}, -{39,5,36}, -{39,5,37}, -{39,5,38}, -{39,5,39}, -{39,5,40}, -{39,5,41}, -{39,5,42}, -{39,5,43}, -{39,5,44}, -{39,5,45}, -{39,5,46}, -{39,5,47}, -{39,6,-46}, -{39,6,-45}, -{39,6,-44}, -{39,6,-43}, -{39,6,-42}, -{39,6,-41}, -{39,6,-40}, -{39,6,-39}, -{39,6,-38}, -{39,6,-37}, -{39,6,-36}, -{39,6,-35}, -{39,6,-34}, -{39,6,-33}, -{39,6,-32}, -{39,6,-31}, -{39,6,-30}, -{39,6,-29}, -{39,6,-28}, -{39,6,-27}, -{39,6,-26}, -{39,6,-25}, -{39,6,-24}, -{39,6,-23}, -{39,6,-22}, -{39,6,-21}, -{39,6,-20}, -{39,6,-19}, -{39,6,-18}, -{39,6,-17}, -{39,6,-16}, -{39,6,-15}, -{39,6,-14}, -{39,6,-13}, -{39,6,-12}, -{39,6,-11}, -{39,6,-10}, -{39,6,-9}, -{39,6,-8}, -{39,6,-7}, -{39,6,-6}, -{39,6,-5}, -{39,6,-4}, -{39,6,-3}, -{39,6,-2}, -{39,6,-1}, -{39,6,0}, -{39,6,1}, -{39,6,2}, -{39,6,3}, -{39,6,4}, -{39,6,5}, -{39,6,6}, -{39,6,7}, -{39,6,8}, -{39,6,9}, -{39,6,10}, -{39,6,11}, -{39,6,12}, -{39,6,13}, -{39,6,14}, -{39,6,15}, -{39,6,16}, -{39,6,17}, -{39,6,18}, -{39,6,19}, -{39,6,20}, -{39,6,21}, -{39,6,22}, -{39,6,23}, -{39,6,24}, -{39,6,25}, -{39,6,26}, -{39,6,27}, -{39,6,28}, -{39,6,29}, -{39,6,30}, -{39,6,31}, -{39,6,32}, -{39,6,33}, -{39,6,34}, -{39,6,35}, -{39,6,36}, -{39,6,37}, -{39,6,38}, -{39,6,39}, -{39,6,40}, -{39,6,41}, -{39,6,42}, -{39,6,43}, -{39,6,44}, -{39,6,45}, -{39,6,46}, -{39,6,47}, -{39,7,-47}, -{39,7,-46}, -{39,7,-45}, -{39,7,-44}, -{39,7,-43}, -{39,7,-42}, -{39,7,-41}, -{39,7,-40}, -{39,7,-39}, -{39,7,-38}, -{39,7,-37}, -{39,7,-36}, -{39,7,-35}, -{39,7,-34}, -{39,7,-33}, -{39,7,-32}, -{39,7,-31}, -{39,7,-30}, -{39,7,-29}, -{39,7,-28}, -{39,7,-27}, -{39,7,-26}, -{39,7,-25}, -{39,7,-24}, -{39,7,-23}, -{39,7,-22}, -{39,7,-21}, -{39,7,-20}, -{39,7,-19}, -{39,7,-18}, -{39,7,-17}, -{39,7,-16}, -{39,7,-15}, -{39,7,-14}, -{39,7,-13}, -{39,7,-12}, -{39,7,-11}, -{39,7,-10}, -{39,7,-9}, -{39,7,-8}, -{39,7,-7}, -{39,7,-6}, -{39,7,-5}, -{39,7,-4}, -{39,7,-3}, -{39,7,-2}, -{39,7,-1}, -{39,7,0}, -{39,7,1}, -{39,7,2}, -{39,7,3}, -{39,7,4}, -{39,7,5}, -{39,7,6}, -{39,7,7}, -{39,7,8}, -{39,7,9}, -{39,7,10}, -{39,7,11}, -{39,7,12}, -{39,7,13}, -{39,7,14}, -{39,7,15}, -{39,7,16}, -{39,7,17}, -{39,7,18}, -{39,7,19}, -{39,7,20}, -{39,7,21}, -{39,7,22}, -{39,7,23}, -{39,7,24}, -{39,7,25}, -{39,7,26}, -{39,7,27}, -{39,7,28}, -{39,7,29}, -{39,7,30}, -{39,7,31}, -{39,7,32}, -{39,7,33}, -{39,7,34}, -{39,7,35}, -{39,7,36}, -{39,7,37}, -{39,7,38}, -{39,7,39}, -{39,7,40}, -{39,7,41}, -{39,7,42}, -{39,7,43}, -{39,7,44}, -{39,7,45}, -{39,7,46}, -{39,7,47}, -{39,8,-48}, -{39,8,-47}, -{39,8,-46}, -{39,8,-45}, -{39,8,-44}, -{39,8,-43}, -{39,8,-42}, -{39,8,-41}, -{39,8,-40}, -{39,8,-39}, -{39,8,-38}, -{39,8,-37}, -{39,8,-36}, -{39,8,-35}, -{39,8,-34}, -{39,8,-33}, -{39,8,-32}, -{39,8,-31}, -{39,8,-30}, -{39,8,-29}, -{39,8,-28}, -{39,8,-27}, -{39,8,-26}, -{39,8,-25}, -{39,8,-24}, -{39,8,-23}, -{39,8,-22}, -{39,8,-21}, -{39,8,-20}, -{39,8,-19}, -{39,8,-18}, -{39,8,-17}, -{39,8,-16}, -{39,8,-15}, -{39,8,-14}, -{39,8,-13}, -{39,8,-12}, -{39,8,-11}, -{39,8,-10}, -{39,8,-9}, -{39,8,-8}, -{39,8,-7}, -{39,8,-6}, -{39,8,-5}, -{39,8,-4}, -{39,8,-3}, -{39,8,-2}, -{39,8,-1}, -{39,8,0}, -{39,8,1}, -{39,8,2}, -{39,8,3}, -{39,8,4}, -{39,8,5}, -{39,8,6}, -{39,8,7}, -{39,8,8}, -{39,8,9}, -{39,8,10}, -{39,8,11}, -{39,8,12}, -{39,8,13}, -{39,8,14}, -{39,8,15}, -{39,8,16}, -{39,8,17}, -{39,8,18}, -{39,8,19}, -{39,8,20}, -{39,8,21}, -{39,8,22}, -{39,8,23}, -{39,8,24}, -{39,8,25}, -{39,8,26}, -{39,8,27}, -{39,8,28}, -{39,8,29}, -{39,8,30}, -{39,8,31}, -{39,8,32}, -{39,8,33}, -{39,8,34}, -{39,8,35}, -{39,8,36}, -{39,8,37}, -{39,8,38}, -{39,8,39}, -{39,8,40}, -{39,8,41}, -{39,8,42}, -{39,8,43}, -{39,8,44}, -{39,8,45}, -{39,8,46}, -{39,8,47}, -{39,9,-49}, -{39,9,-48}, -{39,9,-47}, -{39,9,-46}, -{39,9,-45}, -{39,9,-44}, -{39,9,-43}, -{39,9,-42}, -{39,9,-41}, -{39,9,-40}, -{39,9,-39}, -{39,9,-38}, -{39,9,-37}, -{39,9,-36}, -{39,9,-35}, -{39,9,-34}, -{39,9,-33}, -{39,9,-32}, -{39,9,-31}, -{39,9,-30}, -{39,9,-29}, -{39,9,-28}, -{39,9,-27}, -{39,9,-26}, -{39,9,-25}, -{39,9,-24}, -{39,9,-23}, -{39,9,-22}, -{39,9,-21}, -{39,9,-20}, -{39,9,-19}, -{39,9,-18}, -{39,9,-17}, -{39,9,-16}, -{39,9,-15}, -{39,9,-14}, -{39,9,-13}, -{39,9,-12}, -{39,9,-11}, -{39,9,-10}, -{39,9,-9}, -{39,9,-8}, -{39,9,-7}, -{39,9,-6}, -{39,9,-5}, -{39,9,-4}, -{39,9,-3}, -{39,9,-2}, -{39,9,-1}, -{39,9,0}, -{39,9,1}, -{39,9,2}, -{39,9,3}, -{39,9,4}, -{39,9,5}, -{39,9,6}, -{39,9,7}, -{39,9,8}, -{39,9,9}, -{39,9,10}, -{39,9,11}, -{39,9,12}, -{39,9,13}, -{39,9,14}, -{39,9,15}, -{39,9,16}, -{39,9,17}, -{39,9,18}, -{39,9,19}, -{39,9,20}, -{39,9,21}, -{39,9,22}, -{39,9,23}, -{39,9,24}, -{39,9,25}, -{39,9,26}, -{39,9,27}, -{39,9,28}, -{39,9,29}, -{39,9,30}, -{39,9,31}, -{39,9,32}, -{39,9,33}, -{39,9,34}, -{39,9,35}, -{39,9,36}, -{39,9,37}, -{39,9,38}, -{39,9,39}, -{39,9,40}, -{39,9,41}, -{39,9,42}, -{39,9,43}, -{39,9,44}, -{39,9,45}, -{39,9,46}, -{39,9,47}, -{39,10,-50}, -{39,10,-49}, -{39,10,-48}, -{39,10,-47}, -{39,10,-46}, -{39,10,-45}, -{39,10,-44}, -{39,10,-43}, -{39,10,-42}, -{39,10,-41}, -{39,10,-40}, -{39,10,-39}, -{39,10,-38}, -{39,10,-37}, -{39,10,-36}, -{39,10,-35}, -{39,10,-34}, -{39,10,-33}, -{39,10,-32}, -{39,10,-31}, -{39,10,-30}, -{39,10,-29}, -{39,10,-28}, -{39,10,-27}, -{39,10,-26}, -{39,10,-25}, -{39,10,-24}, -{39,10,-23}, -{39,10,-22}, -{39,10,-21}, -{39,10,-20}, -{39,10,-19}, -{39,10,-18}, -{39,10,-17}, -{39,10,-16}, -{39,10,-15}, -{39,10,-14}, -{39,10,-13}, -{39,10,-12}, -{39,10,-11}, -{39,10,-10}, -{39,10,-9}, -{39,10,-8}, -{39,10,-7}, -{39,10,-6}, -{39,10,-5}, -{39,10,-4}, -{39,10,-3}, -{39,10,-2}, -{39,10,-1}, -{39,10,0}, -{39,10,1}, -{39,10,2}, -{39,10,3}, -{39,10,4}, -{39,10,5}, -{39,10,6}, -{39,10,7}, -{39,10,8}, -{39,10,9}, -{39,10,10}, -{39,10,11}, -{39,10,12}, -{39,10,13}, -{39,10,14}, -{39,10,15}, -{39,10,16}, -{39,10,17}, -{39,10,18}, -{39,10,19}, -{39,10,20}, -{39,10,21}, -{39,10,22}, -{39,10,23}, -{39,10,24}, -{39,10,25}, -{39,10,26}, -{39,10,27}, -{39,10,28}, -{39,10,29}, -{39,10,30}, -{39,10,31}, -{39,10,32}, -{39,10,33}, -{39,10,34}, -{39,10,35}, -{39,10,36}, -{39,10,37}, -{39,10,38}, -{39,10,39}, -{39,10,40}, -{39,10,41}, -{39,10,42}, -{39,10,43}, -{39,10,44}, -{39,10,45}, -{39,10,46}, -{39,10,47}, -{39,11,-51}, -{39,11,-50}, -{39,11,-49}, -{39,11,-48}, -{39,11,-47}, -{39,11,-46}, -{39,11,-45}, -{39,11,-44}, -{39,11,-43}, -{39,11,-42}, -{39,11,-41}, -{39,11,-40}, -{39,11,-39}, -{39,11,-38}, -{39,11,-37}, -{39,11,-36}, -{39,11,-35}, -{39,11,-34}, -{39,11,-33}, -{39,11,-32}, -{39,11,-31}, -{39,11,-30}, -{39,11,-29}, -{39,11,-28}, -{39,11,-27}, -{39,11,-26}, -{39,11,-25}, -{39,11,-24}, -{39,11,-23}, -{39,11,-22}, -{39,11,-21}, -{39,11,-20}, -{39,11,-19}, -{39,11,-18}, -{39,11,-17}, -{39,11,-16}, -{39,11,-15}, -{39,11,-14}, -{39,11,-13}, -{39,11,-12}, -{39,11,-11}, -{39,11,-10}, -{39,11,-9}, -{39,11,-8}, -{39,11,-7}, -{39,11,-6}, -{39,11,-5}, -{39,11,-4}, -{39,11,-3}, -{39,11,-2}, -{39,11,-1}, -{39,11,0}, -{39,11,1}, -{39,11,2}, -{39,11,3}, -{39,11,4}, -{39,11,5}, -{39,11,6}, -{39,11,7}, -{39,11,8}, -{39,11,9}, -{39,11,10}, -{39,11,11}, -{39,11,12}, -{39,11,13}, -{39,11,14}, -{39,11,15}, -{39,11,16}, -{39,11,17}, -{39,11,18}, -{39,11,19}, -{39,11,20}, -{39,11,21}, -{39,11,22}, -{39,11,23}, -{39,11,24}, -{39,11,25}, -{39,11,26}, -{39,11,27}, -{39,11,28}, -{39,11,29}, -{39,11,30}, -{39,11,31}, -{39,11,32}, -{39,11,33}, -{39,11,34}, -{39,11,35}, -{39,11,36}, -{39,11,37}, -{39,11,38}, -{39,11,39}, -{39,11,40}, -{39,11,41}, -{39,11,42}, -{39,11,43}, -{39,11,44}, -{39,11,45}, -{39,11,46}, -{39,11,47}, -{39,12,-52}, -{39,12,-51}, -{39,12,-50}, -{39,12,-49}, -{39,12,-48}, -{39,12,-47}, -{39,12,-46}, -{39,12,-45}, -{39,12,-44}, -{39,12,-43}, -{39,12,-42}, -{39,12,-41}, -{39,12,-40}, -{39,12,-39}, -{39,12,-38}, -{39,12,-37}, -{39,12,-36}, -{39,12,-35}, -{39,12,-34}, -{39,12,-33}, -{39,12,-32}, -{39,12,-31}, -{39,12,-30}, -{39,12,-29}, -{39,12,-28}, -{39,12,-27}, -{39,12,-26}, -{39,12,-25}, -{39,12,-24}, -{39,12,-23}, -{39,12,-22}, -{39,12,-21}, -{39,12,-20}, -{39,12,-19}, -{39,12,-18}, -{39,12,-17}, -{39,12,-16}, -{39,12,-15}, -{39,12,-14}, -{39,12,-13}, -{39,12,-12}, -{39,12,-11}, -{39,12,-10}, -{39,12,-9}, -{39,12,-8}, -{39,12,-7}, -{39,12,-6}, -{39,12,-5}, -{39,12,-4}, -{39,12,-3}, -{39,12,-2}, -{39,12,-1}, -{39,12,0}, -{39,12,1}, -{39,12,2}, -{39,12,3}, -{39,12,4}, -{39,12,5}, -{39,12,6}, -{39,12,7}, -{39,12,8}, -{39,12,9}, -{39,12,10}, -{39,12,11}, -{39,12,12}, -{39,12,13}, -{39,12,14}, -{39,12,15}, -{39,12,16}, -{39,12,17}, -{39,12,18}, -{39,12,19}, -{39,12,20}, -{39,12,21}, -{39,12,22}, -{39,12,23}, -{39,12,24}, -{39,12,25}, -{39,12,26}, -{39,12,27}, -{39,12,28}, -{39,12,29}, -{39,12,30}, -{39,12,31}, -{39,12,32}, -{39,12,33}, -{39,12,34}, -{39,12,35}, -{39,12,36}, -{39,12,37}, -{39,12,38}, -{39,12,39}, -{39,12,40}, -{39,12,41}, -{39,12,42}, -{39,12,43}, -{39,12,44}, -{39,12,45}, -{39,12,46}, -{39,12,47}, -{39,13,-53}, -{39,13,-52}, -{39,13,-51}, -{39,13,-50}, -{39,13,-49}, -{39,13,-48}, -{39,13,-47}, -{39,13,-46}, -{39,13,-45}, -{39,13,-44}, -{39,13,-43}, -{39,13,-42}, -{39,13,-41}, -{39,13,-40}, -{39,13,-39}, -{39,13,-38}, -{39,13,-37}, -{39,13,-36}, -{39,13,-35}, -{39,13,-34}, -{39,13,-33}, -{39,13,-32}, -{39,13,-31}, -{39,13,-30}, -{39,13,-29}, -{39,13,-28}, -{39,13,-27}, -{39,13,-26}, -{39,13,-25}, -{39,13,-24}, -{39,13,-23}, -{39,13,-22}, -{39,13,-21}, -{39,13,-20}, -{39,13,-19}, -{39,13,-18}, -{39,13,-17}, -{39,13,-16}, -{39,13,-15}, -{39,13,-14}, -{39,13,-13}, -{39,13,-12}, -{39,13,-11}, -{39,13,-10}, -{39,13,-9}, -{39,13,-8}, -{39,13,-7}, -{39,13,-6}, -{39,13,-5}, -{39,13,-4}, -{39,13,-3}, -{39,13,-2}, -{39,13,-1}, -{39,13,0}, -{39,13,1}, -{39,13,2}, -{39,13,3}, -{39,13,4}, -{39,13,5}, -{39,13,6}, -{39,13,7}, -{39,13,8}, -{39,13,9}, -{39,13,10}, -{39,13,11}, -{39,13,12}, -{39,13,13}, -{39,13,14}, -{39,13,15}, -{39,13,16}, -{39,13,17}, -{39,13,18}, -{39,13,19}, -{39,13,20}, -{39,13,21}, -{39,13,22}, -{39,13,23}, -{39,13,24}, -{39,13,25}, -{39,13,26}, -{39,13,27}, -{39,13,28}, -{39,13,29}, -{39,13,30}, -{39,13,31}, -{39,13,32}, -{39,13,33}, -{39,13,34}, -{39,13,35}, -{39,13,36}, -{39,13,37}, -{39,13,38}, -{39,13,39}, -{39,13,40}, -{39,13,41}, -{39,13,42}, -{39,13,43}, -{39,13,44}, -{39,13,45}, -{39,13,46}, -{39,13,47}, -{39,14,-54}, -{39,14,-53}, -{39,14,-52}, -{39,14,-51}, -{39,14,-50}, -{39,14,-49}, -{39,14,-48}, -{39,14,-47}, -{39,14,-46}, -{39,14,-45}, -{39,14,-44}, -{39,14,-43}, -{39,14,-42}, -{39,14,-41}, -{39,14,-40}, -{39,14,-39}, -{39,14,-38}, -{39,14,-37}, -{39,14,-36}, -{39,14,-35}, -{39,14,-34}, -{39,14,-33}, -{39,14,-32}, -{39,14,-31}, -{39,14,-30}, -{39,14,-29}, -{39,14,-28}, -{39,14,-27}, -{39,14,-26}, -{39,14,-25}, -{39,14,-24}, -{39,14,-23}, -{39,14,-22}, -{39,14,-21}, -{39,14,-20}, -{39,14,-19}, -{39,14,-18}, -{39,14,-17}, -{39,14,-16}, -{39,14,-15}, -{39,14,-14}, -{39,14,-13}, -{39,14,-12}, -{39,14,-11}, -{39,14,-10}, -{39,14,-9}, -{39,14,-8}, -{39,14,-7}, -{39,14,-6}, -{39,14,-5}, -{39,14,-4}, -{39,14,-3}, -{39,14,-2}, -{39,14,-1}, -{39,14,0}, -{39,14,1}, -{39,14,2}, -{39,14,3}, -{39,14,4}, -{39,14,5}, -{39,14,6}, -{39,14,7}, -{39,14,8}, -{39,14,9}, -{39,14,10}, -{39,14,11}, -{39,14,12}, -{39,14,13}, -{39,14,14}, -{39,14,15}, -{39,14,16}, -{39,14,17}, -{39,14,18}, -{39,14,19}, -{39,14,20}, -{39,14,21}, -{39,14,22}, -{39,14,23}, -{39,14,24}, -{39,14,25}, -{39,14,26}, -{39,14,27}, -{39,14,28}, -{39,14,29}, -{39,14,30}, -{39,14,31}, -{39,14,32}, -{39,14,33}, -{39,14,34}, -{39,14,35}, -{39,14,36}, -{39,14,37}, -{39,14,38}, -{39,14,39}, -{39,14,40}, -{39,14,41}, -{39,14,42}, -{39,14,43}, -{39,14,44}, -{39,14,45}, -{39,14,46}, -{39,14,47}, -{39,15,-55}, -{39,15,-54}, -{39,15,-53}, -{39,15,-52}, -{39,15,-51}, -{39,15,-50}, -{39,15,-49}, -{39,15,-48}, -{39,15,-47}, -{39,15,-46}, -{39,15,-45}, -{39,15,-44}, -{39,15,-43}, -{39,15,-42}, -{39,15,-41}, -{39,15,-40}, -{39,15,-39}, -{39,15,-38}, -{39,15,-37}, -{39,15,-36}, -{39,15,-35}, -{39,15,-34}, -{39,15,-33}, -{39,15,-32}, -{39,15,-31}, -{39,15,-30}, -{39,15,-29}, -{39,15,-28}, -{39,15,-27}, -{39,15,-26}, -{39,15,-25}, -{39,15,-24}, -{39,15,-23}, -{39,15,-22}, -{39,15,-21}, -{39,15,-20}, -{39,15,-19}, -{39,15,-18}, -{39,15,-17}, -{39,15,-16}, -{39,15,-15}, -{39,15,-14}, -{39,15,-13}, -{39,15,-12}, -{39,15,-11}, -{39,15,-10}, -{39,15,-9}, -{39,15,-8}, -{39,15,-7}, -{39,15,-6}, -{39,15,-5}, -{39,15,-4}, -{39,15,-3}, -{39,15,-2}, -{39,15,-1}, -{39,15,0}, -{39,15,1}, -{39,15,2}, -{39,15,3}, -{39,15,4}, -{39,15,5}, -{39,15,6}, -{39,15,7}, -{39,15,8}, -{39,15,9}, -{39,15,10}, -{39,15,11}, -{39,15,12}, -{39,15,13}, -{39,15,14}, -{39,15,15}, -{39,15,16}, -{39,15,17}, -{39,15,18}, -{39,15,19}, -{39,15,20}, -{39,15,21}, -{39,15,22}, -{39,15,23}, -{39,15,24}, -{39,15,25}, -{39,15,26}, -{39,15,27}, -{39,15,28}, -{39,15,29}, -{39,15,30}, -{39,15,31}, -{39,15,32}, -{39,15,33}, -{39,15,34}, -{39,15,35}, -{39,15,36}, -{39,15,37}, -{39,15,38}, -{39,15,39}, -{39,15,40}, -{39,15,41}, -{39,15,42}, -{39,15,43}, -{39,15,44}, -{39,15,45}, -{39,15,46}, -{39,15,47}, -{39,16,-56}, -{39,16,-55}, -{39,16,-54}, -{39,16,-53}, -{39,16,-52}, -{39,16,-51}, -{39,16,-50}, -{39,16,-49}, -{39,16,-48}, -{39,16,-47}, -{39,16,-46}, -{39,16,-45}, -{39,16,-44}, -{39,16,-43}, -{39,16,-42}, -{39,16,-41}, -{39,16,-40}, -{39,16,-39}, -{39,16,-38}, -{39,16,-37}, -{39,16,-36}, -{39,16,-35}, -{39,16,-34}, -{39,16,-33}, -{39,16,-32}, -{39,16,-31}, -{39,16,-30}, -{39,16,-29}, -{39,16,-28}, -{39,16,-27}, -{39,16,-26}, -{39,16,-25}, -{39,16,-24}, -{39,16,-23}, -{39,16,-22}, -{39,16,-21}, -{39,16,-20}, -{39,16,-19}, -{39,16,-18}, -{39,16,-17}, -{39,16,-16}, -{39,16,-15}, -{39,16,-14}, -{39,16,-13}, -{39,16,-12}, -{39,16,-11}, -{39,16,-10}, -{39,16,-9}, -{39,16,-8}, -{39,16,-7}, -{39,16,-6}, -{39,16,-5}, -{39,16,-4}, -{39,16,-3}, -{39,16,-2}, -{39,16,-1}, -{39,16,0}, -{39,16,1}, -{39,16,2}, -{39,16,3}, -{39,16,4}, -{39,16,5}, -{39,16,6}, -{39,16,7}, -{39,16,8}, -{39,16,9}, -{39,16,10}, -{39,16,11}, -{39,16,12}, -{39,16,13}, -{39,16,14}, -{39,16,15}, -{39,16,16}, -{39,16,17}, -{39,16,18}, -{39,16,19}, -{39,16,20}, -{39,16,21}, -{39,16,22}, -{39,16,23}, -{39,16,24}, -{39,16,25}, -{39,16,26}, -{39,16,27}, -{39,16,28}, -{39,16,29}, -{39,16,30}, -{39,16,31}, -{39,16,32}, -{39,16,33}, -{39,16,34}, -{39,16,35}, -{39,16,36}, -{39,16,37}, -{39,16,38}, -{39,16,39}, -{39,16,40}, -{39,16,41}, -{39,16,42}, -{39,16,43}, -{39,16,44}, -{39,16,45}, -{39,16,46}, -{39,16,47}, -{39,16,48}, -{39,17,-57}, -{39,17,-56}, -{39,17,-55}, -{39,17,-54}, -{39,17,-53}, -{39,17,-52}, -{39,17,-51}, -{39,17,-50}, -{39,17,-49}, -{39,17,-48}, -{39,17,-47}, -{39,17,-46}, -{39,17,-45}, -{39,17,-44}, -{39,17,-43}, -{39,17,-42}, -{39,17,-41}, -{39,17,-40}, -{39,17,-39}, -{39,17,-38}, -{39,17,-37}, -{39,17,-36}, -{39,17,-35}, -{39,17,-34}, -{39,17,-33}, -{39,17,-32}, -{39,17,-31}, -{39,17,-30}, -{39,17,-29}, -{39,17,-28}, -{39,17,-27}, -{39,17,-26}, -{39,17,-25}, -{39,17,-24}, -{39,17,-23}, -{39,17,-22}, -{39,17,-21}, -{39,17,-20}, -{39,17,-19}, -{39,17,-18}, -{39,17,-17}, -{39,17,-16}, -{39,17,-15}, -{39,17,-14}, -{39,17,-13}, -{39,17,-12}, -{39,17,-11}, -{39,17,-10}, -{39,17,-9}, -{39,17,-8}, -{39,17,-7}, -{39,17,-6}, -{39,17,-5}, -{39,17,-4}, -{39,17,-3}, -{39,17,-2}, -{39,17,-1}, -{39,17,0}, -{39,17,1}, -{39,17,2}, -{39,17,3}, -{39,17,4}, -{39,17,5}, -{39,17,6}, -{39,17,7}, -{39,17,8}, -{39,17,9}, -{39,17,10}, -{39,17,11}, -{39,17,12}, -{39,17,13}, -{39,17,14}, -{39,17,15}, -{39,17,16}, -{39,17,17}, -{39,17,18}, -{39,17,19}, -{39,17,20}, -{39,17,21}, -{39,17,22}, -{39,17,23}, -{39,17,24}, -{39,17,25}, -{39,17,26}, -{39,17,27}, -{39,17,28}, -{39,17,29}, -{39,17,30}, -{39,17,31}, -{39,17,32}, -{39,17,33}, -{39,17,34}, -{39,17,35}, -{39,17,36}, -{39,17,37}, -{39,17,38}, -{39,17,39}, -{39,17,40}, -{39,17,41}, -{39,17,42}, -{39,17,43}, -{39,17,44}, -{39,17,45}, -{39,17,46}, -{39,17,47}, -{39,17,48}, -{39,18,-58}, -{39,18,-57}, -{39,18,-56}, -{39,18,-55}, -{39,18,-54}, -{39,18,-53}, -{39,18,-52}, -{39,18,-51}, -{39,18,-50}, -{39,18,-49}, -{39,18,-48}, -{39,18,-47}, -{39,18,-46}, -{39,18,-45}, -{39,18,-44}, -{39,18,-43}, -{39,18,-42}, -{39,18,-41}, -{39,18,-40}, -{39,18,-39}, -{39,18,-38}, -{39,18,-37}, -{39,18,-36}, -{39,18,-35}, -{39,18,-34}, -{39,18,-33}, -{39,18,-32}, -{39,18,-31}, -{39,18,-30}, -{39,18,-29}, -{39,18,-28}, -{39,18,-27}, -{39,18,-26}, -{39,18,-25}, -{39,18,-24}, -{39,18,-23}, -{39,18,-22}, -{39,18,-21}, -{39,18,-20}, -{39,18,-19}, -{39,18,-18}, -{39,18,-17}, -{39,18,-16}, -{39,18,-15}, -{39,18,-14}, -{39,18,-13}, -{39,18,-12}, -{39,18,-11}, -{39,18,-10}, -{39,18,-9}, -{39,18,-8}, -{39,18,-7}, -{39,18,-6}, -{39,18,-5}, -{39,18,-4}, -{39,18,-3}, -{39,18,-2}, -{39,18,-1}, -{39,18,0}, -{39,18,1}, -{39,18,2}, -{39,18,3}, -{39,18,4}, -{39,18,5}, -{39,18,6}, -{39,18,7}, -{39,18,8}, -{39,18,9}, -{39,18,10}, -{39,18,11}, -{39,18,12}, -{39,18,13}, -{39,18,14}, -{39,18,15}, -{39,18,16}, -{39,18,17}, -{39,18,18}, -{39,18,19}, -{39,18,20}, -{39,18,21}, -{39,18,22}, -{39,18,23}, -{39,18,24}, -{39,18,25}, -{39,18,26}, -{39,18,27}, -{39,18,28}, -{39,18,29}, -{39,18,30}, -{39,18,31}, -{39,18,32}, -{39,18,33}, -{39,18,34}, -{39,18,35}, -{39,18,36}, -{39,18,37}, -{39,18,38}, -{39,18,39}, -{39,18,40}, -{39,18,41}, -{39,18,42}, -{39,18,43}, -{39,18,44}, -{39,18,45}, -{39,18,46}, -{39,18,47}, -{39,18,48}, -{39,19,-59}, -{39,19,-58}, -{39,19,-57}, -{39,19,-56}, -{39,19,-55}, -{39,19,-54}, -{39,19,-53}, -{39,19,-52}, -{39,19,-51}, -{39,19,-50}, -{39,19,-49}, -{39,19,-48}, -{39,19,-47}, -{39,19,-46}, -{39,19,-45}, -{39,19,-44}, -{39,19,-43}, -{39,19,-42}, -{39,19,-41}, -{39,19,-40}, -{39,19,-39}, -{39,19,-38}, -{39,19,-37}, -{39,19,-36}, -{39,19,-35}, -{39,19,-34}, -{39,19,-33}, -{39,19,-32}, -{39,19,-31}, -{39,19,-30}, -{39,19,-29}, -{39,19,-28}, -{39,19,-27}, -{39,19,-26}, -{39,19,-25}, -{39,19,-24}, -{39,19,-23}, -{39,19,-22}, -{39,19,-21}, -{39,19,-20}, -{39,19,-19}, -{39,19,-18}, -{39,19,-17}, -{39,19,-16}, -{39,19,-15}, -{39,19,-14}, -{39,19,-13}, -{39,19,-12}, -{39,19,-11}, -{39,19,-10}, -{39,19,-9}, -{39,19,-8}, -{39,19,-7}, -{39,19,-6}, -{39,19,-5}, -{39,19,-4}, -{39,19,-3}, -{39,19,-2}, -{39,19,-1}, -{39,19,0}, -{39,19,1}, -{39,19,2}, -{39,19,3}, -{39,19,4}, -{39,19,5}, -{39,19,6}, -{39,19,7}, -{39,19,8}, -{39,19,9}, -{39,19,10}, -{39,19,11}, -{39,19,12}, -{39,19,13}, -{39,19,14}, -{39,19,15}, -{39,19,16}, -{39,19,17}, -{39,19,18}, -{39,19,19}, -{39,19,20}, -{39,19,21}, -{39,19,22}, -{39,19,23}, -{39,19,24}, -{39,19,25}, -{39,19,26}, -{39,19,27}, -{39,19,28}, -{39,19,29}, -{39,19,30}, -{39,19,31}, -{39,19,32}, -{39,19,33}, -{39,19,34}, -{39,19,35}, -{39,19,36}, -{39,19,37}, -{39,19,38}, -{39,19,39}, -{39,19,40}, -{39,19,41}, -{39,19,42}, -{39,19,43}, -{39,19,44}, -{39,19,45}, -{39,19,46}, -{39,19,47}, -{39,19,48}, -{39,20,-60}, -{39,20,-59}, -{39,20,-58}, -{39,20,-57}, -{39,20,-56}, -{39,20,-55}, -{39,20,-54}, -{39,20,-53}, -{39,20,-52}, -{39,20,-51}, -{39,20,-50}, -{39,20,-49}, -{39,20,-48}, -{39,20,-47}, -{39,20,-46}, -{39,20,-45}, -{39,20,-44}, -{39,20,-43}, -{39,20,-42}, -{39,20,-41}, -{39,20,-40}, -{39,20,-39}, -{39,20,-38}, -{39,20,-37}, -{39,20,-36}, -{39,20,-35}, -{39,20,-34}, -{39,20,-33}, -{39,20,-32}, -{39,20,-31}, -{39,20,-30}, -{39,20,-29}, -{39,20,-28}, -{39,20,-27}, -{39,20,-26}, -{39,20,-25}, -{39,20,-24}, -{39,20,-23}, -{39,20,-22}, -{39,20,-21}, -{39,20,-20}, -{39,20,-19}, -{39,20,-18}, -{39,20,-17}, -{39,20,-16}, -{39,20,-15}, -{39,20,-14}, -{39,20,-13}, -{39,20,-12}, -{39,20,-11}, -{39,20,-10}, -{39,20,-9}, -{39,20,-8}, -{39,20,-7}, -{39,20,-6}, -{39,20,-5}, -{39,20,-4}, -{39,20,-3}, -{39,20,-2}, -{39,20,-1}, -{39,20,0}, -{39,20,1}, -{39,20,2}, -{39,20,3}, -{39,20,4}, -{39,20,5}, -{39,20,6}, -{39,20,7}, -{39,20,8}, -{39,20,9}, -{39,20,10}, -{39,20,11}, -{39,20,12}, -{39,20,13}, -{39,20,14}, -{39,20,15}, -{39,20,16}, -{39,20,17}, -{39,20,18}, -{39,20,19}, -{39,20,20}, -{39,20,21}, -{39,20,22}, -{39,20,23}, -{39,20,24}, -{39,20,25}, -{39,20,26}, -{39,20,27}, -{39,20,28}, -{39,20,29}, -{39,20,30}, -{39,20,31}, -{39,20,32}, -{39,20,33}, -{39,20,34}, -{39,20,35}, -{39,20,36}, -{39,20,37}, -{39,20,38}, -{39,20,39}, -{39,20,40}, -{39,20,41}, -{39,20,42}, -{39,20,43}, -{39,20,44}, -{39,20,45}, -{39,20,46}, -{39,20,47}, -{39,20,48}, -{39,21,-61}, -{39,21,-60}, -{39,21,-59}, -{39,21,-58}, -{39,21,-57}, -{39,21,-56}, -{39,21,-55}, -{39,21,-54}, -{39,21,-53}, -{39,21,-52}, -{39,21,-51}, -{39,21,-50}, -{39,21,-49}, -{39,21,-48}, -{39,21,-47}, -{39,21,-46}, -{39,21,-45}, -{39,21,-44}, -{39,21,-43}, -{39,21,-42}, -{39,21,-41}, -{39,21,-40}, -{39,21,-39}, -{39,21,-38}, -{39,21,-37}, -{39,21,-36}, -{39,21,-35}, -{39,21,-34}, -{39,21,-33}, -{39,21,-32}, -{39,21,-31}, -{39,21,-30}, -{39,21,-29}, -{39,21,-28}, -{39,21,-27}, -{39,21,-26}, -{39,21,-25}, -{39,21,-24}, -{39,21,-23}, -{39,21,-22}, -{39,21,-21}, -{39,21,-20}, -{39,21,-19}, -{39,21,-18}, -{39,21,-17}, -{39,21,-16}, -{39,21,-15}, -{39,21,-14}, -{39,21,-13}, -{39,21,-12}, -{39,21,-11}, -{39,21,-10}, -{39,21,-9}, -{39,21,-8}, -{39,21,-7}, -{39,21,-6}, -{39,21,-5}, -{39,21,-4}, -{39,21,-3}, -{39,21,-2}, -{39,21,-1}, -{39,21,0}, -{39,21,1}, -{39,21,2}, -{39,21,3}, -{39,21,4}, -{39,21,5}, -{39,21,6}, -{39,21,7}, -{39,21,8}, -{39,21,9}, -{39,21,10}, -{39,21,11}, -{39,21,12}, -{39,21,13}, -{39,21,14}, -{39,21,15}, -{39,21,16}, -{39,21,17}, -{39,21,18}, -{39,21,19}, -{39,21,20}, -{39,21,21}, -{39,21,22}, -{39,21,23}, -{39,21,24}, -{39,21,25}, -{39,21,26}, -{39,21,27}, -{39,21,28}, -{39,21,29}, -{39,21,30}, -{39,21,31}, -{39,21,32}, -{39,21,33}, -{39,21,34}, -{39,21,35}, -{39,21,36}, -{39,21,37}, -{39,21,38}, -{39,21,39}, -{39,21,40}, -{39,21,41}, -{39,21,42}, -{39,21,43}, -{39,21,44}, -{39,21,45}, -{39,21,46}, -{39,21,47}, -{39,21,48}, -{39,22,-62}, -{39,22,-61}, -{39,22,-60}, -{39,22,-59}, -{39,22,-58}, -{39,22,-57}, -{39,22,-56}, -{39,22,-55}, -{39,22,-54}, -{39,22,-53}, -{39,22,-52}, -{39,22,-51}, -{39,22,-50}, -{39,22,-49}, -{39,22,-48}, -{39,22,-47}, -{39,22,-46}, -{39,22,-45}, -{39,22,-44}, -{39,22,-43}, -{39,22,-42}, -{39,22,-41}, -{39,22,-40}, -{39,22,-39}, -{39,22,-38}, -{39,22,-37}, -{39,22,-36}, -{39,22,-35}, -{39,22,-34}, -{39,22,-33}, -{39,22,-32}, -{39,22,-31}, -{39,22,-30}, -{39,22,-29}, -{39,22,-28}, -{39,22,-27}, -{39,22,-26}, -{39,22,-25}, -{39,22,-24}, -{39,22,-23}, -{39,22,-22}, -{39,22,-21}, -{39,22,-20}, -{39,22,-19}, -{39,22,-18}, -{39,22,-17}, -{39,22,-16}, -{39,22,-15}, -{39,22,-14}, -{39,22,-13}, -{39,22,-12}, -{39,22,-11}, -{39,22,-10}, -{39,22,-9}, -{39,22,-8}, -{39,22,-7}, -{39,22,-6}, -{39,22,-5}, -{39,22,-4}, -{39,22,-3}, -{39,22,-2}, -{39,22,-1}, -{39,22,0}, -{39,22,1}, -{39,22,2}, -{39,22,3}, -{39,22,4}, -{39,22,5}, -{39,22,6}, -{39,22,7}, -{39,22,8}, -{39,22,9}, -{39,22,10}, -{39,22,11}, -{39,22,12}, -{39,22,13}, -{39,22,14}, -{39,22,15}, -{39,22,16}, -{39,22,17}, -{39,22,18}, -{39,22,19}, -{39,22,20}, -{39,22,21}, -{39,22,22}, -{39,22,23}, -{39,22,24}, -{39,22,25}, -{39,22,26}, -{39,22,27}, -{39,22,28}, -{39,22,29}, -{39,22,30}, -{39,22,31}, -{39,22,32}, -{39,22,33}, -{39,22,34}, -{39,22,35}, -{39,22,36}, -{39,22,37}, -{39,22,38}, -{39,22,39}, -{39,22,40}, -{39,22,41}, -{39,22,42}, -{39,22,43}, -{39,22,44}, -{39,22,45}, -{39,22,46}, -{39,22,47}, -{39,22,48}, -{39,23,-63}, -{39,23,-62}, -{39,23,-61}, -{39,23,-60}, -{39,23,-59}, -{39,23,-58}, -{39,23,-57}, -{39,23,-56}, -{39,23,-55}, -{39,23,-54}, -{39,23,-53}, -{39,23,-52}, -{39,23,-51}, -{39,23,-50}, -{39,23,-49}, -{39,23,-48}, -{39,23,-47}, -{39,23,-46}, -{39,23,-45}, -{39,23,-44}, -{39,23,-43}, -{39,23,-42}, -{39,23,-41}, -{39,23,-40}, -{39,23,-39}, -{39,23,-38}, -{39,23,-37}, -{39,23,-36}, -{39,23,-35}, -{39,23,-34}, -{39,23,-33}, -{39,23,-32}, -{39,23,-31}, -{39,23,-30}, -{39,23,-29}, -{39,23,-28}, -{39,23,-27}, -{39,23,-26}, -{39,23,-25}, -{39,23,-24}, -{39,23,-23}, -{39,23,-22}, -{39,23,-21}, -{39,23,-20}, -{39,23,-19}, -{39,23,-18}, -{39,23,-17}, -{39,23,-16}, -{39,23,-15}, -{39,23,-14}, -{39,23,-13}, -{39,23,-12}, -{39,23,-11}, -{39,23,-10}, -{39,23,-9}, -{39,23,-8}, -{39,23,-7}, -{39,23,-6}, -{39,23,-5}, -{39,23,-4}, -{39,23,-3}, -{39,23,-2}, -{39,23,-1}, -{39,23,0}, -{39,23,1}, -{39,23,2}, -{39,23,3}, -{39,23,4}, -{39,23,5}, -{39,23,6}, -{39,23,7}, -{39,23,8}, -{39,23,9}, -{39,23,10}, -{39,23,11}, -{39,23,12}, -{39,23,13}, -{39,23,14}, -{39,23,15}, -{39,23,16}, -{39,23,17}, -{39,23,18}, -{39,23,19}, -{39,23,20}, -{39,23,21}, -{39,23,22}, -{39,23,23}, -{39,23,24}, -{39,23,25}, -{39,23,26}, -{39,23,27}, -{39,23,28}, -{39,23,29}, -{39,23,30}, -{39,23,31}, -{39,23,32}, -{39,23,33}, -{39,23,34}, -{39,23,35}, -{39,23,36}, -{39,23,37}, -{39,23,38}, -{39,23,39}, -{39,23,40}, -{39,23,41}, -{39,23,42}, -{39,23,43}, -{39,23,44}, -{39,23,45}, -{39,23,46}, -{39,23,47}, -{39,23,48}, -{39,24,-64}, -{39,24,-63}, -{39,24,-62}, -{39,24,-61}, -{39,24,-60}, -{39,24,-59}, -{39,24,-58}, -{39,24,-57}, -{39,24,-56}, -{39,24,-55}, -{39,24,-54}, -{39,24,-53}, -{39,24,-52}, -{39,24,-51}, -{39,24,-50}, -{39,24,-49}, -{39,24,-48}, -{39,24,-47}, -{39,24,-46}, -{39,24,-45}, -{39,24,-44}, -{39,24,-43}, -{39,24,-42}, -{39,24,-41}, -{39,24,-40}, -{39,24,-39}, -{39,24,-38}, -{39,24,-37}, -{39,24,-36}, -{39,24,-35}, -{39,24,-34}, -{39,24,-33}, -{39,24,-32}, -{39,24,-31}, -{39,24,-30}, -{39,24,-29}, -{39,24,-28}, -{39,24,-27}, -{39,24,-26}, -{39,24,-25}, -{39,24,-24}, -{39,24,-23}, -{39,24,-22}, -{39,24,-21}, -{39,24,-20}, -{39,24,-19}, -{39,24,-18}, -{39,24,-17}, -{39,24,-16}, -{39,24,-15}, -{39,24,-14}, -{39,24,-13}, -{39,24,-12}, -{39,24,-11}, -{39,24,-10}, -{39,24,-9}, -{39,24,-8}, -{39,24,-7}, -{39,24,-6}, -{39,24,-5}, -{39,24,-4}, -{39,24,-3}, -{39,24,-2}, -{39,24,-1}, -{39,24,0}, -{39,24,1}, -{39,24,2}, -{39,24,3}, -{39,24,4}, -{39,24,5}, -{39,24,6}, -{39,24,7}, -{39,24,8}, -{39,24,9}, -{39,24,10}, -{39,24,11}, -{39,24,12}, -{39,24,13}, -{39,24,14}, -{39,24,15}, -{39,24,16}, -{39,24,17}, -{39,24,18}, -{39,24,19}, -{39,24,20}, -{39,24,21}, -{39,24,22}, -{39,24,23}, -{39,24,24}, -{39,24,25}, -{39,24,26}, -{39,24,27}, -{39,24,28}, -{39,24,29}, -{39,24,30}, -{39,24,31}, -{39,24,32}, -{39,24,33}, -{39,24,34}, -{39,24,35}, -{39,24,36}, -{39,24,37}, -{39,24,38}, -{39,24,39}, -{39,24,40}, -{39,24,41}, -{39,24,42}, -{39,24,43}, -{39,24,44}, -{39,24,45}, -{39,24,46}, -{39,24,47}, -{39,24,48}, -{39,25,-65}, -{39,25,-64}, -{39,25,-63}, -{39,25,-62}, -{39,25,-61}, -{39,25,-60}, -{39,25,-59}, -{39,25,-58}, -{39,25,-57}, -{39,25,-56}, -{39,25,-55}, -{39,25,-54}, -{39,25,-53}, -{39,25,-52}, -{39,25,-51}, -{39,25,-50}, -{39,25,-49}, -{39,25,-48}, -{39,25,-47}, -{39,25,-46}, -{39,25,-45}, -{39,25,-44}, -{39,25,-43}, -{39,25,-42}, -{39,25,-41}, -{39,25,-40}, -{39,25,-39}, -{39,25,-38}, -{39,25,-37}, -{39,25,-36}, -{39,25,-35}, -{39,25,-34}, -{39,25,-33}, -{39,25,-32}, -{39,25,-31}, -{39,25,-30}, -{39,25,-29}, -{39,25,-28}, -{39,25,-27}, -{39,25,-26}, -{39,25,-25}, -{39,25,-24}, -{39,25,-23}, -{39,25,-22}, -{39,25,-21}, -{39,25,-20}, -{39,25,-19}, -{39,25,-18}, -{39,25,-17}, -{39,25,-16}, -{39,25,-15}, -{39,25,-14}, -{39,25,-13}, -{39,25,-12}, -{39,25,-11}, -{39,25,-10}, -{39,25,-9}, -{39,25,-8}, -{39,25,-7}, -{39,25,-6}, -{39,25,-5}, -{39,25,-4}, -{39,25,-3}, -{39,25,-2}, -{39,25,-1}, -{39,25,0}, -{39,25,1}, -{39,25,2}, -{39,25,3}, -{39,25,4}, -{39,25,5}, -{39,25,6}, -{39,25,7}, -{39,25,8}, -{39,25,9}, -{39,25,10}, -{39,25,11}, -{39,25,12}, -{39,25,13}, -{39,25,14}, -{39,25,15}, -{39,25,16}, -{39,25,17}, -{39,25,18}, -{39,25,19}, -{39,25,20}, -{39,25,21}, -{39,25,22}, -{39,25,23}, -{39,25,24}, -{39,25,25}, -{39,25,26}, -{39,25,27}, -{39,25,28}, -{39,25,29}, -{39,25,30}, -{39,25,31}, -{39,25,32}, -{39,25,33}, -{39,25,34}, -{39,25,35}, -{39,25,36}, -{39,25,37}, -{39,25,38}, -{39,25,39}, -{39,25,40}, -{39,25,41}, -{39,25,42}, -{39,25,43}, -{39,25,44}, -{39,25,45}, -{39,25,46}, -{39,25,47}, -{39,25,48}, -{39,26,-66}, -{39,26,-65}, -{39,26,-64}, -{39,26,-63}, -{39,26,-62}, -{39,26,-61}, -{39,26,-60}, -{39,26,-59}, -{39,26,-58}, -{39,26,-57}, -{39,26,-56}, -{39,26,-55}, -{39,26,-54}, -{39,26,-53}, -{39,26,-52}, -{39,26,-51}, -{39,26,-50}, -{39,26,-49}, -{39,26,-48}, -{39,26,-47}, -{39,26,-46}, -{39,26,-45}, -{39,26,-44}, -{39,26,-43}, -{39,26,-42}, -{39,26,-41}, -{39,26,-40}, -{39,26,-39}, -{39,26,-38}, -{39,26,-37}, -{39,26,-36}, -{39,26,-35}, -{39,26,-34}, -{39,26,-33}, -{39,26,-32}, -{39,26,-31}, -{39,26,-30}, -{39,26,-29}, -{39,26,-28}, -{39,26,-27}, -{39,26,-26}, -{39,26,-25}, -{39,26,-24}, -{39,26,-23}, -{39,26,-22}, -{39,26,-21}, -{39,26,-20}, -{39,26,-19}, -{39,26,-18}, -{39,26,-17}, -{39,26,-16}, -{39,26,-15}, -{39,26,-14}, -{39,26,-13}, -{39,26,-12}, -{39,26,-11}, -{39,26,-10}, -{39,26,-9}, -{39,26,-8}, -{39,26,-7}, -{39,26,-6}, -{39,26,-5}, -{39,26,-4}, -{39,26,-3}, -{39,26,-2}, -{39,26,-1}, -{39,26,0}, -{39,26,1}, -{39,26,2}, -{39,26,3}, -{39,26,4}, -{39,26,5}, -{39,26,6}, -{39,26,7}, -{39,26,8}, -{39,26,9}, -{39,26,10}, -{39,26,11}, -{39,26,12}, -{39,26,13}, -{39,26,14}, -{39,26,15}, -{39,26,16}, -{39,26,17}, -{39,26,18}, -{39,26,19}, -{39,26,20}, -{39,26,21}, -{39,26,22}, -{39,26,23}, -{39,26,24}, -{39,26,25}, -{39,26,26}, -{39,26,27}, -{39,26,28}, -{39,26,29}, -{39,26,30}, -{39,26,31}, -{39,26,32}, -{39,26,33}, -{39,26,34}, -{39,26,35}, -{39,26,36}, -{39,26,37}, -{39,26,38}, -{39,26,39}, -{39,26,40}, -{39,26,41}, -{39,26,42}, -{39,26,43}, -{39,26,44}, -{39,26,45}, -{39,26,46}, -{39,26,47}, -{39,26,48}, -{39,27,-67}, -{39,27,-66}, -{39,27,-65}, -{39,27,-64}, -{39,27,-63}, -{39,27,-62}, -{39,27,-61}, -{39,27,-60}, -{39,27,-59}, -{39,27,-58}, -{39,27,-57}, -{39,27,-56}, -{39,27,-55}, -{39,27,-54}, -{39,27,-53}, -{39,27,-52}, -{39,27,-51}, -{39,27,-50}, -{39,27,-49}, -{39,27,-48}, -{39,27,-47}, -{39,27,-46}, -{39,27,-45}, -{39,27,-44}, -{39,27,-43}, -{39,27,-42}, -{39,27,-41}, -{39,27,-40}, -{39,27,-39}, -{39,27,-38}, -{39,27,-37}, -{39,27,-36}, -{39,27,-35}, -{39,27,-34}, -{39,27,-33}, -{39,27,-32}, -{39,27,-31}, -{39,27,-30}, -{39,27,-29}, -{39,27,-28}, -{39,27,-27}, -{39,27,-26}, -{39,27,-25}, -{39,27,-24}, -{39,27,-23}, -{39,27,-22}, -{39,27,-21}, -{39,27,-20}, -{39,27,-19}, -{39,27,-18}, -{39,27,-17}, -{39,27,-16}, -{39,27,-15}, -{39,27,-14}, -{39,27,-13}, -{39,27,-12}, -{39,27,-11}, -{39,27,-10}, -{39,27,-9}, -{39,27,-8}, -{39,27,-7}, -{39,27,-6}, -{39,27,-5}, -{39,27,-4}, -{39,27,-3}, -{39,27,-2}, -{39,27,-1}, -{39,27,0}, -{39,27,1}, -{39,27,2}, -{39,27,3}, -{39,27,4}, -{39,27,5}, -{39,27,6}, -{39,27,7}, -{39,27,8}, -{39,27,9}, -{39,27,10}, -{39,27,11}, -{39,27,12}, -{39,27,13}, -{39,27,14}, -{39,27,15}, -{39,27,16}, -{39,27,17}, -{39,27,18}, -{39,27,19}, -{39,27,20}, -{39,27,21}, -{39,27,22}, -{39,27,23}, -{39,27,24}, -{39,27,25}, -{39,27,26}, -{39,27,27}, -{39,27,28}, -{39,27,29}, -{39,27,30}, -{39,27,31}, -{39,27,32}, -{39,27,33}, -{39,27,34}, -{39,27,35}, -{39,27,36}, -{39,27,37}, -{39,27,38}, -{39,27,39}, -{39,27,40}, -{39,27,41}, -{39,27,42}, -{39,27,43}, -{39,27,44}, -{39,27,45}, -{39,27,46}, -{39,27,47}, -{39,27,48}, -{39,27,49}, -{39,28,-68}, -{39,28,-67}, -{39,28,-66}, -{39,28,-65}, -{39,28,-64}, -{39,28,-63}, -{39,28,-62}, -{39,28,-61}, -{39,28,-60}, -{39,28,-59}, -{39,28,-58}, -{39,28,-57}, -{39,28,-56}, -{39,28,-55}, -{39,28,-54}, -{39,28,-53}, -{39,28,-52}, -{39,28,-51}, -{39,28,-50}, -{39,28,-49}, -{39,28,-48}, -{39,28,-47}, -{39,28,-46}, -{39,28,-45}, -{39,28,-44}, -{39,28,-43}, -{39,28,-42}, -{39,28,-41}, -{39,28,-40}, -{39,28,-39}, -{39,28,-38}, -{39,28,-37}, -{39,28,-36}, -{39,28,-35}, -{39,28,-34}, -{39,28,-33}, -{39,28,-32}, -{39,28,-31}, -{39,28,-30}, -{39,28,-29}, -{39,28,-28}, -{39,28,-27}, -{39,28,-26}, -{39,28,-25}, -{39,28,-24}, -{39,28,-23}, -{39,28,-22}, -{39,28,-21}, -{39,28,-20}, -{39,28,-19}, -{39,28,-18}, -{39,28,-17}, -{39,28,-16}, -{39,28,-15}, -{39,28,-14}, -{39,28,-13}, -{39,28,-12}, -{39,28,-11}, -{39,28,-10}, -{39,28,-9}, -{39,28,-8}, -{39,28,-7}, -{39,28,-6}, -{39,28,-5}, -{39,28,-4}, -{39,28,-3}, -{39,28,-2}, -{39,28,-1}, -{39,28,0}, -{39,28,1}, -{39,28,2}, -{39,28,3}, -{39,28,4}, -{39,28,5}, -{39,28,6}, -{39,28,7}, -{39,28,8}, -{39,28,9}, -{39,28,10}, -{39,28,11}, -{39,28,12}, -{39,28,13}, -{39,28,14}, -{39,28,15}, -{39,28,16}, -{39,28,17}, -{39,28,18}, -{39,28,19}, -{39,28,20}, -{39,28,21}, -{39,28,22}, -{39,28,23}, -{39,28,24}, -{39,28,25}, -{39,28,26}, -{39,28,27}, -{39,28,28}, -{39,28,29}, -{39,28,30}, -{39,28,31}, -{39,28,32}, -{39,28,33}, -{39,28,34}, -{39,28,35}, -{39,28,36}, -{39,28,37}, -{39,28,38}, -{39,28,39}, -{39,28,40}, -{39,28,41}, -{39,28,42}, -{39,28,43}, -{39,28,44}, -{39,28,45}, -{39,28,46}, -{39,28,47}, -{39,28,48}, -{39,28,49}, -{39,29,-69}, -{39,29,-68}, -{39,29,-67}, -{39,29,-66}, -{39,29,-65}, -{39,29,-64}, -{39,29,-63}, -{39,29,-62}, -{39,29,-61}, -{39,29,-60}, -{39,29,-59}, -{39,29,-58}, -{39,29,-57}, -{39,29,-56}, -{39,29,-55}, -{39,29,-54}, -{39,29,-53}, -{39,29,-52}, -{39,29,-51}, -{39,29,-50}, -{39,29,-49}, -{39,29,-48}, -{39,29,-47}, -{39,29,-46}, -{39,29,-45}, -{39,29,-44}, -{39,29,-43}, -{39,29,-42}, -{39,29,-41}, -{39,29,-40}, -{39,29,-39}, -{39,29,-38}, -{39,29,-37}, -{39,29,-36}, -{39,29,-35}, -{39,29,-34}, -{39,29,-33}, -{39,29,-32}, -{39,29,-31}, -{39,29,-30}, -{39,29,-29}, -{39,29,-28}, -{39,29,-27}, -{39,29,-26}, -{39,29,-25}, -{39,29,-24}, -{39,29,-23}, -{39,29,-22}, -{39,29,-21}, -{39,29,-20}, -{39,29,-19}, -{39,29,-18}, -{39,29,-17}, -{39,29,-16}, -{39,29,-15}, -{39,29,-14}, -{39,29,-13}, -{39,29,-12}, -{39,29,-11}, -{39,29,-10}, -{39,29,-9}, -{39,29,-8}, -{39,29,-7}, -{39,29,-6}, -{39,29,-5}, -{39,29,-4}, -{39,29,-3}, -{39,29,-2}, -{39,29,-1}, -{39,29,0}, -{39,29,1}, -{39,29,2}, -{39,29,3}, -{39,29,4}, -{39,29,5}, -{39,29,6}, -{39,29,7}, -{39,29,8}, -{39,29,9}, -{39,29,10}, -{39,29,11}, -{39,29,12}, -{39,29,13}, -{39,29,14}, -{39,29,15}, -{39,29,16}, -{39,29,17}, -{39,29,18}, -{39,29,19}, -{39,29,20}, -{39,29,21}, -{39,29,22}, -{39,29,23}, -{39,29,24}, -{39,29,25}, -{39,29,26}, -{39,29,27}, -{39,29,28}, -{39,29,29}, -{39,29,30}, -{39,29,31}, -{39,29,32}, -{39,29,33}, -{39,29,34}, -{39,29,35}, -{39,29,36}, -{39,29,37}, -{39,29,38}, -{39,29,39}, -{39,29,40}, -{39,29,41}, -{39,29,42}, -{39,29,43}, -{39,29,44}, -{39,29,45}, -{39,29,46}, -{39,29,47}, -{39,29,48}, -{39,29,49}, -{39,30,-70}, -{39,30,-69}, -{39,30,-68}, -{39,30,-67}, -{39,30,-66}, -{39,30,-65}, -{39,30,-64}, -{39,30,-63}, -{39,30,-62}, -{39,30,-61}, -{39,30,-60}, -{39,30,-59}, -{39,30,-58}, -{39,30,-57}, -{39,30,-56}, -{39,30,-55}, -{39,30,-54}, -{39,30,-53}, -{39,30,-52}, -{39,30,-51}, -{39,30,-50}, -{39,30,-49}, -{39,30,-48}, -{39,30,-47}, -{39,30,-46}, -{39,30,-45}, -{39,30,-44}, -{39,30,-43}, -{39,30,-42}, -{39,30,-41}, -{39,30,-40}, -{39,30,-39}, -{39,30,-38}, -{39,30,-37}, -{39,30,-36}, -{39,30,-35}, -{39,30,-34}, -{39,30,-33}, -{39,30,-32}, -{39,30,-31}, -{39,30,-30}, -{39,30,-29}, -{39,30,-28}, -{39,30,-27}, -{39,30,-26}, -{39,30,-25}, -{39,30,-24}, -{39,30,-23}, -{39,30,-22}, -{39,30,-21}, -{39,30,-20}, -{39,30,-19}, -{39,30,-18}, -{39,30,-17}, -{39,30,-16}, -{39,30,-15}, -{39,30,-14}, -{39,30,-13}, -{39,30,-12}, -{39,30,-11}, -{39,30,-10}, -{39,30,-9}, -{39,30,-8}, -{39,30,-7}, -{39,30,-6}, -{39,30,-5}, -{39,30,-4}, -{39,30,-3}, -{39,30,-2}, -{39,30,-1}, -{39,30,0}, -{39,30,1}, -{39,30,2}, -{39,30,3}, -{39,30,4}, -{39,30,5}, -{39,30,6}, -{39,30,7}, -{39,30,8}, -{39,30,9}, -{39,30,10}, -{39,30,11}, -{39,30,12}, -{39,30,13}, -{39,30,14}, -{39,30,15}, -{39,30,16}, -{39,30,17}, -{39,30,18}, -{39,30,19}, -{39,30,20}, -{39,30,21}, -{39,30,22}, -{39,30,23}, -{39,30,24}, -{39,30,25}, -{39,30,26}, -{39,30,27}, -{39,30,28}, -{39,30,29}, -{39,30,30}, -{39,30,31}, -{39,30,32}, -{39,30,33}, -{39,30,34}, -{39,30,35}, -{39,30,36}, -{39,30,37}, -{39,30,38}, -{39,30,39}, -{39,30,40}, -{39,30,41}, -{39,30,42}, -{39,30,43}, -{39,30,44}, -{39,30,45}, -{39,30,46}, -{39,30,47}, -{39,30,48}, -{39,30,49}, -{39,31,-71}, -{39,31,-70}, -{39,31,-69}, -{39,31,-68}, -{39,31,-67}, -{39,31,-66}, -{39,31,-65}, -{39,31,-64}, -{39,31,-63}, -{39,31,-62}, -{39,31,-61}, -{39,31,-60}, -{39,31,-59}, -{39,31,-58}, -{39,31,-57}, -{39,31,-56}, -{39,31,-55}, -{39,31,-54}, -{39,31,-53}, -{39,31,-52}, -{39,31,-51}, -{39,31,-50}, -{39,31,-49}, -{39,31,-48}, -{39,31,-47}, -{39,31,-46}, -{39,31,-45}, -{39,31,-44}, -{39,31,-43}, -{39,31,-42}, -{39,31,-41}, -{39,31,-40}, -{39,31,-39}, -{39,31,-38}, -{39,31,-37}, -{39,31,-36}, -{39,31,-35}, -{39,31,-34}, -{39,31,-33}, -{39,31,-32}, -{39,31,-31}, -{39,31,-30}, -{39,31,-29}, -{39,31,-28}, -{39,31,-27}, -{39,31,-26}, -{39,31,-25}, -{39,31,-24}, -{39,31,-23}, -{39,31,-22}, -{39,31,-21}, -{39,31,-20}, -{39,31,-19}, -{39,31,-18}, -{39,31,-17}, -{39,31,-16}, -{39,31,-15}, -{39,31,-14}, -{39,31,-13}, -{39,31,-12}, -{39,31,-11}, -{39,31,-10}, -{39,31,-9}, -{39,31,-8}, -{39,31,-7}, -{39,31,-6}, -{39,31,-5}, -{39,31,-4}, -{39,31,-3}, -{39,31,-2}, -{39,31,-1}, -{39,31,0}, -{39,31,1}, -{39,31,2}, -{39,31,3}, -{39,31,4}, -{39,31,5}, -{39,31,6}, -{39,31,7}, -{39,31,8}, -{39,31,9}, -{39,31,10}, -{39,31,11}, -{39,31,12}, -{39,31,13}, -{39,31,14}, -{39,31,15}, -{39,31,16}, -{39,31,17}, -{39,31,18}, -{39,31,19}, -{39,31,20}, -{39,31,21}, -{39,31,22}, -{39,31,23}, -{39,31,24}, -{39,31,25}, -{39,31,26}, -{39,31,27}, -{39,31,28}, -{39,31,29}, -{39,31,30}, -{39,31,31}, -{39,31,32}, -{39,31,33}, -{39,31,34}, -{39,31,35}, -{39,31,36}, -{39,31,37}, -{39,31,38}, -{39,31,39}, -{39,31,40}, -{39,31,41}, -{39,31,42}, -{39,31,43}, -{39,31,44}, -{39,31,45}, -{39,31,46}, -{39,31,47}, -{39,31,48}, -{39,31,49}, -{39,32,-72}, -{39,32,-71}, -{39,32,-70}, -{39,32,-69}, -{39,32,-68}, -{39,32,-67}, -{39,32,-66}, -{39,32,-65}, -{39,32,-64}, -{39,32,-63}, -{39,32,-62}, -{39,32,-61}, -{39,32,-60}, -{39,32,-59}, -{39,32,-58}, -{39,32,-57}, -{39,32,-56}, -{39,32,-55}, -{39,32,-54}, -{39,32,-53}, -{39,32,-52}, -{39,32,-51}, -{39,32,-50}, -{39,32,-49}, -{39,32,-48}, -{39,32,-47}, -{39,32,-46}, -{39,32,-45}, -{39,32,-44}, -{39,32,-43}, -{39,32,-42}, -{39,32,-41}, -{39,32,-40}, -{39,32,-39}, -{39,32,-38}, -{39,32,-37}, -{39,32,-36}, -{39,32,-35}, -{39,32,-34}, -{39,32,-33}, -{39,32,-32}, -{39,32,-31}, -{39,32,-30}, -{39,32,-29}, -{39,32,-28}, -{39,32,-27}, -{39,32,-26}, -{39,32,-25}, -{39,32,-24}, -{39,32,-23}, -{39,32,-22}, -{39,32,-21}, -{39,32,-20}, -{39,32,-19}, -{39,32,-18}, -{39,32,-17}, -{39,32,-16}, -{39,32,-15}, -{39,32,-14}, -{39,32,-13}, -{39,32,-12}, -{39,32,-11}, -{39,32,-10}, -{39,32,-9}, -{39,32,-8}, -{39,32,-7}, -{39,32,-6}, -{39,32,-5}, -{39,32,-4}, -{39,32,-3}, -{39,32,-2}, -{39,32,-1}, -{39,32,0}, -{39,32,1}, -{39,32,2}, -{39,32,3}, -{39,32,4}, -{39,32,5}, -{39,32,6}, -{39,32,7}, -{39,32,8}, -{39,32,9}, -{39,32,10}, -{39,32,11}, -{39,32,12}, -{39,32,13}, -{39,32,14}, -{39,32,15}, -{39,32,16}, -{39,32,17}, -{39,32,18}, -{39,32,19}, -{39,32,20}, -{39,32,21}, -{39,32,22}, -{39,32,23}, -{39,32,24}, -{39,32,25}, -{39,32,26}, -{39,32,27}, -{39,32,28}, -{39,32,29}, -{39,32,30}, -{39,32,31}, -{39,32,32}, -{39,32,33}, -{39,32,34}, -{39,32,35}, -{39,32,36}, -{39,32,37}, -{39,32,38}, -{39,32,39}, -{39,32,40}, -{39,32,41}, -{39,32,42}, -{39,32,43}, -{39,32,44}, -{39,32,45}, -{39,32,46}, -{39,32,47}, -{39,32,48}, -{39,32,49}, -{39,33,-73}, -{39,33,-72}, -{39,33,-71}, -{39,33,-70}, -{39,33,-69}, -{39,33,-68}, -{39,33,-67}, -{39,33,-66}, -{39,33,-65}, -{39,33,-64}, -{39,33,-63}, -{39,33,-62}, -{39,33,-61}, -{39,33,-60}, -{39,33,-59}, -{39,33,-58}, -{39,33,-57}, -{39,33,-56}, -{39,33,-55}, -{39,33,-54}, -{39,33,-53}, -{39,33,-52}, -{39,33,-51}, -{39,33,-50}, -{39,33,-49}, -{39,33,-48}, -{39,33,-47}, -{39,33,-46}, -{39,33,-45}, -{39,33,-44}, -{39,33,-43}, -{39,33,-42}, -{39,33,-41}, -{39,33,-40}, -{39,33,-39}, -{39,33,-38}, -{39,33,-37}, -{39,33,-36}, -{39,33,-35}, -{39,33,-34}, -{39,33,-33}, -{39,33,-32}, -{39,33,-31}, -{39,33,-30}, -{39,33,-29}, -{39,33,-28}, -{39,33,-27}, -{39,33,-26}, -{39,33,-25}, -{39,33,-24}, -{39,33,-23}, -{39,33,-22}, -{39,33,-21}, -{39,33,-20}, -{39,33,-19}, -{39,33,-18}, -{39,33,-17}, -{39,33,-16}, -{39,33,-15}, -{39,33,-14}, -{39,33,-13}, -{39,33,-12}, -{39,33,-11}, -{39,33,-10}, -{39,33,-9}, -{39,33,-8}, -{39,33,-7}, -{39,33,-6}, -{39,33,-5}, -{39,33,-4}, -{39,33,-3}, -{39,33,-2}, -{39,33,-1}, -{39,33,0}, -{39,33,1}, -{39,33,2}, -{39,33,3}, -{39,33,4}, -{39,33,5}, -{39,33,6}, -{39,33,7}, -{39,33,8}, -{39,33,9}, -{39,33,10}, -{39,33,11}, -{39,33,12}, -{39,33,13}, -{39,33,14}, -{39,33,15}, -{39,33,16}, -{39,33,17}, -{39,33,18}, -{39,33,19}, -{39,33,20}, -{39,33,21}, -{39,33,22}, -{39,33,23}, -{39,33,24}, -{39,33,25}, -{39,33,26}, -{39,33,27}, -{39,33,28}, -{39,33,29}, -{39,33,30}, -{39,33,31}, -{39,33,32}, -{39,33,33}, -{39,33,34}, -{39,33,35}, -{39,33,36}, -{39,33,37}, -{39,33,38}, -{39,33,39}, -{39,33,40}, -{39,33,41}, -{39,33,42}, -{39,33,43}, -{39,33,44}, -{39,33,45}, -{39,33,46}, -{39,33,47}, -{39,33,48}, -{39,33,49}, -{39,34,-74}, -{39,34,-73}, -{39,34,-72}, -{39,34,-71}, -{39,34,-70}, -{39,34,-69}, -{39,34,-68}, -{39,34,-67}, -{39,34,-66}, -{39,34,-65}, -{39,34,-64}, -{39,34,-63}, -{39,34,-62}, -{39,34,-61}, -{39,34,-60}, -{39,34,-59}, -{39,34,-58}, -{39,34,-57}, -{39,34,-56}, -{39,34,-55}, -{39,34,-54}, -{39,34,-53}, -{39,34,-52}, -{39,34,-51}, -{39,34,-50}, -{39,34,-49}, -{39,34,-48}, -{39,34,-47}, -{39,34,-46}, -{39,34,-45}, -{39,34,-44}, -{39,34,-43}, -{39,34,-42}, -{39,34,-41}, -{39,34,-40}, -{39,34,-39}, -{39,34,-38}, -{39,34,-37}, -{39,34,-36}, -{39,34,-35}, -{39,34,-34}, -{39,34,-33}, -{39,34,-32}, -{39,34,-31}, -{39,34,-30}, -{39,34,-29}, -{39,34,-28}, -{39,34,-27}, -{39,34,-26}, -{39,34,-25}, -{39,34,-24}, -{39,34,-23}, -{39,34,-22}, -{39,34,-21}, -{39,34,-20}, -{39,34,-19}, -{39,34,-18}, -{39,34,-17}, -{39,34,-16}, -{39,34,-15}, -{39,34,-14}, -{39,34,-13}, -{39,34,-12}, -{39,34,-11}, -{39,34,-10}, -{39,34,-9}, -{39,34,-8}, -{39,34,-7}, -{39,34,-6}, -{39,34,-5}, -{39,34,-4}, -{39,34,-3}, -{39,34,-2}, -{39,34,-1}, -{39,34,0}, -{39,34,1}, -{39,34,2}, -{39,34,3}, -{39,34,4}, -{39,34,5}, -{39,34,6}, -{39,34,7}, -{39,34,8}, -{39,34,9}, -{39,34,10}, -{39,34,11}, -{39,34,12}, -{39,34,13}, -{39,34,14}, -{39,34,15}, -{39,34,16}, -{39,34,17}, -{39,34,18}, -{39,34,19}, -{39,34,20}, -{39,34,21}, -{39,34,22}, -{39,34,23}, -{39,34,24}, -{39,34,25}, -{39,34,26}, -{39,34,27}, -{39,34,28}, -{39,34,29}, -{39,34,30}, -{39,34,31}, -{39,34,32}, -{39,34,33}, -{39,34,34}, -{39,34,35}, -{39,34,36}, -{39,34,37}, -{39,34,38}, -{39,34,39}, -{39,34,40}, -{39,34,41}, -{39,34,42}, -{39,34,43}, -{39,34,44}, -{39,34,45}, -{39,34,46}, -{39,34,47}, -{39,34,48}, -{39,34,49}, -{39,35,-75}, -{39,35,-74}, -{39,35,-73}, -{39,35,-72}, -{39,35,-71}, -{39,35,-70}, -{39,35,-69}, -{39,35,-68}, -{39,35,-67}, -{39,35,-66}, -{39,35,-65}, -{39,35,-64}, -{39,35,-63}, -{39,35,-62}, -{39,35,-61}, -{39,35,-60}, -{39,35,-59}, -{39,35,-58}, -{39,35,-57}, -{39,35,-56}, -{39,35,-55}, -{39,35,-54}, -{39,35,-53}, -{39,35,-52}, -{39,35,-51}, -{39,35,-50}, -{39,35,-49}, -{39,35,-48}, -{39,35,-47}, -{39,35,-46}, -{39,35,-45}, -{39,35,-44}, -{39,35,-43}, -{39,35,-42}, -{39,35,-41}, -{39,35,-40}, -{39,35,-39}, -{39,35,-38}, -{39,35,-37}, -{39,35,-36}, -{39,35,-35}, -{39,35,-34}, -{39,35,-33}, -{39,35,-32}, -{39,35,-31}, -{39,35,-30}, -{39,35,-29}, -{39,35,-28}, -{39,35,-27}, -{39,35,-26}, -{39,35,-25}, -{39,35,-24}, -{39,35,-23}, -{39,35,-22}, -{39,35,-21}, -{39,35,-20}, -{39,35,-19}, -{39,35,-18}, -{39,35,-17}, -{39,35,-16}, -{39,35,-15}, -{39,35,-14}, -{39,35,-13}, -{39,35,-12}, -{39,35,-11}, -{39,35,-10}, -{39,35,-9}, -{39,35,-8}, -{39,35,-7}, -{39,35,-6}, -{39,35,-5}, -{39,35,-4}, -{39,35,-3}, -{39,35,-2}, -{39,35,-1}, -{39,35,0}, -{39,35,1}, -{39,35,2}, -{39,35,3}, -{39,35,4}, -{39,35,5}, -{39,35,6}, -{39,35,7}, -{39,35,8}, -{39,35,9}, -{39,35,10}, -{39,35,11}, -{39,35,12}, -{39,35,13}, -{39,35,14}, -{39,35,15}, -{39,35,16}, -{39,35,17}, -{39,35,18}, -{39,35,19}, -{39,35,20}, -{39,35,21}, -{39,35,22}, -{39,35,23}, -{39,35,24}, -{39,35,25}, -{39,35,26}, -{39,35,27}, -{39,35,28}, -{39,35,29}, -{39,35,30}, -{39,35,31}, -{39,35,32}, -{39,35,33}, -{39,35,34}, -{39,35,35}, -{39,35,36}, -{39,35,37}, -{39,35,38}, -{39,35,39}, -{39,35,40}, -{39,35,41}, -{39,35,42}, -{39,35,43}, -{39,35,44}, -{39,35,45}, -{39,35,46}, -{39,35,47}, -{39,35,48}, -{39,35,49}, -{39,36,-76}, -{39,36,-75}, -{39,36,-74}, -{39,36,-73}, -{39,36,-72}, -{39,36,-71}, -{39,36,-70}, -{39,36,-69}, -{39,36,-68}, -{39,36,-67}, -{39,36,-66}, -{39,36,-65}, -{39,36,-64}, -{39,36,-63}, -{39,36,-62}, -{39,36,-61}, -{39,36,-60}, -{39,36,-59}, -{39,36,-58}, -{39,36,-57}, -{39,36,-56}, -{39,36,-55}, -{39,36,-54}, -{39,36,-53}, -{39,36,-52}, -{39,36,-51}, -{39,36,-50}, -{39,36,-49}, -{39,36,-48}, -{39,36,-47}, -{39,36,-46}, -{39,36,-45}, -{39,36,-44}, -{39,36,-43}, -{39,36,-42}, -{39,36,-41}, -{39,36,-40}, -{39,36,-39}, -{39,36,-38}, -{39,36,-37}, -{39,36,-36}, -{39,36,-35}, -{39,36,-34}, -{39,36,-33}, -{39,36,-32}, -{39,36,-31}, -{39,36,-30}, -{39,36,-29}, -{39,36,-28}, -{39,36,-27}, -{39,36,-26}, -{39,36,-25}, -{39,36,-24}, -{39,36,-23}, -{39,36,-22}, -{39,36,-21}, -{39,36,-20}, -{39,36,-19}, -{39,36,-18}, -{39,36,-17}, -{39,36,-16}, -{39,36,-15}, -{39,36,-14}, -{39,36,-13}, -{39,36,-12}, -{39,36,-11}, -{39,36,-10}, -{39,36,-9}, -{39,36,-8}, -{39,36,-7}, -{39,36,-6}, -{39,36,-5}, -{39,36,-4}, -{39,36,-3}, -{39,36,-2}, -{39,36,-1}, -{39,36,0}, -{39,36,1}, -{39,36,2}, -{39,36,3}, -{39,36,4}, -{39,36,5}, -{39,36,6}, -{39,36,7}, -{39,36,8}, -{39,36,9}, -{39,36,10}, -{39,36,11}, -{39,36,12}, -{39,36,13}, -{39,36,14}, -{39,36,15}, -{39,36,16}, -{39,36,17}, -{39,36,18}, -{39,36,19}, -{39,36,20}, -{39,36,21}, -{39,36,22}, -{39,36,23}, -{39,36,24}, -{39,36,25}, -{39,36,26}, -{39,36,27}, -{39,36,28}, -{39,36,29}, -{39,36,30}, -{39,36,31}, -{39,36,32}, -{39,36,33}, -{39,36,34}, -{39,36,35}, -{39,36,36}, -{39,36,37}, -{39,36,38}, -{39,36,39}, -{39,36,40}, -{39,36,41}, -{39,36,42}, -{39,36,43}, -{39,36,44}, -{39,36,45}, -{39,36,46}, -{39,36,47}, -{39,36,48}, -{39,36,49}, -{39,36,50}, -{39,37,-77}, -{39,37,-76}, -{39,37,-75}, -{39,37,-74}, -{39,37,-73}, -{39,37,-72}, -{39,37,-71}, -{39,37,-70}, -{39,37,-69}, -{39,37,-68}, -{39,37,-67}, -{39,37,-66}, -{39,37,-65}, -{39,37,-64}, -{39,37,-63}, -{39,37,-62}, -{39,37,-61}, -{39,37,-60}, -{39,37,-59}, -{39,37,-58}, -{39,37,-57}, -{39,37,-56}, -{39,37,-55}, -{39,37,-54}, -{39,37,-53}, -{39,37,-52}, -{39,37,-51}, -{39,37,-50}, -{39,37,-49}, -{39,37,-48}, -{39,37,-47}, -{39,37,-46}, -{39,37,-45}, -{39,37,-44}, -{39,37,-43}, -{39,37,-42}, -{39,37,-41}, -{39,37,-40}, -{39,37,-39}, -{39,37,-38}, -{39,37,-37}, -{39,37,-36}, -{39,37,-35}, -{39,37,-34}, -{39,37,-33}, -{39,37,-32}, -{39,37,-31}, -{39,37,-30}, -{39,37,-29}, -{39,37,-28}, -{39,37,-27}, -{39,37,-26}, -{39,37,-25}, -{39,37,-24}, -{39,37,-23}, -{39,37,-22}, -{39,37,-21}, -{39,37,-20}, -{39,37,-19}, -{39,37,-18}, -{39,37,-17}, -{39,37,-16}, -{39,37,-15}, -{39,37,-14}, -{39,37,-13}, -{39,37,-12}, -{39,37,-11}, -{39,37,-10}, -{39,37,-9}, -{39,37,-8}, -{39,37,-7}, -{39,37,-6}, -{39,37,-5}, -{39,37,-4}, -{39,37,-3}, -{39,37,-2}, -{39,37,-1}, -{39,37,0}, -{39,37,1}, -{39,37,2}, -{39,37,3}, -{39,37,4}, -{39,37,5}, -{39,37,6}, -{39,37,7}, -{39,37,8}, -{39,37,9}, -{39,37,10}, -{39,37,11}, -{39,37,12}, -{39,37,13}, -{39,37,14}, -{39,37,15}, -{39,37,16}, -{39,37,17}, -{39,37,18}, -{39,37,19}, -{39,37,20}, -{39,37,21}, -{39,37,22}, -{39,37,23}, -{39,37,24}, -{39,37,25}, -{39,37,26}, -{39,37,27}, -{39,37,28}, -{39,37,29}, -{39,37,30}, -{39,37,31}, -{39,37,32}, -{39,37,33}, -{39,37,34}, -{39,37,35}, -{39,37,36}, -{39,37,37}, -{39,37,38}, -{39,37,39}, -{39,37,40}, -{39,37,41}, -{39,37,42}, -{39,37,43}, -{39,37,44}, -{39,37,45}, -{39,37,46}, -{39,37,47}, -{39,37,48}, -{39,37,49}, -{39,37,50}, -{39,38,-77}, -{39,38,-76}, -{39,38,-75}, -{39,38,-74}, -{39,38,-73}, -{39,38,-72}, -{39,38,-71}, -{39,38,-70}, -{39,38,-69}, -{39,38,-68}, -{39,38,-67}, -{39,38,-66}, -{39,38,-65}, -{39,38,-64}, -{39,38,-63}, -{39,38,-62}, -{39,38,-61}, -{39,38,-60}, -{39,38,-59}, -{39,38,-58}, -{39,38,-57}, -{39,38,-56}, -{39,38,-55}, -{39,38,-54}, -{39,38,-53}, -{39,38,-52}, -{39,38,-51}, -{39,38,-50}, -{39,38,-49}, -{39,38,-48}, -{39,38,-47}, -{39,38,-46}, -{39,38,-45}, -{39,38,-44}, -{39,38,-43}, -{39,38,-42}, -{39,38,-41}, -{39,38,-40}, -{39,38,-39}, -{39,38,-38}, -{39,38,-37}, -{39,38,-36}, -{39,38,-35}, -{39,38,-34}, -{39,38,-33}, -{39,38,-32}, -{39,38,-31}, -{39,38,-30}, -{39,38,-29}, -{39,38,-28}, -{39,38,-27}, -{39,38,-26}, -{39,38,-25}, -{39,38,-24}, -{39,38,-23}, -{39,38,-22}, -{39,38,-21}, -{39,38,-20}, -{39,38,-19}, -{39,38,-18}, -{39,38,-17}, -{39,38,-16}, -{39,38,-15}, -{39,38,-14}, -{39,38,-13}, -{39,38,-12}, -{39,38,-11}, -{39,38,-10}, -{39,38,-9}, -{39,38,-8}, -{39,38,-7}, -{39,38,-6}, -{39,38,-5}, -{39,38,-4}, -{39,38,-3}, -{39,38,-2}, -{39,38,-1}, -{39,38,0}, -{39,38,1}, -{39,38,2}, -{39,38,3}, -{39,38,4}, -{39,38,5}, -{39,38,6}, -{39,38,7}, -{39,38,8}, -{39,38,9}, -{39,38,10}, -{39,38,11}, -{39,38,12}, -{39,38,13}, -{39,38,14}, -{39,38,15}, -{39,38,16}, -{39,38,17}, -{39,38,18}, -{39,38,19}, -{39,38,20}, -{39,38,21}, -{39,38,22}, -{39,38,23}, -{39,38,24}, -{39,38,25}, -{39,38,26}, -{39,38,27}, -{39,38,28}, -{39,38,29}, -{39,38,30}, -{39,38,31}, -{39,38,32}, -{39,38,33}, -{39,38,34}, -{39,38,35}, -{39,38,36}, -{39,38,37}, -{39,38,38}, -{39,38,39}, -{39,38,40}, -{39,38,41}, -{39,38,42}, -{39,38,43}, -{39,38,44}, -{39,38,45}, -{39,38,46}, -{39,38,47}, -{39,38,48}, -{39,38,49}, -{39,38,50}, -{39,39,-78}, -{39,39,-77}, -{39,39,-76}, -{39,39,-75}, -{39,39,-74}, -{39,39,-73}, -{39,39,-72}, -{39,39,-71}, -{39,39,-70}, -{39,39,-69}, -{39,39,-68}, -{39,39,-67}, -{39,39,-66}, -{39,39,-65}, -{39,39,-64}, -{39,39,-63}, -{39,39,-62}, -{39,39,-61}, -{39,39,-60}, -{39,39,-59}, -{39,39,-58}, -{39,39,-57}, -{39,39,-56}, -{39,39,-55}, -{39,39,-54}, -{39,39,-53}, -{39,39,-52}, -{39,39,-51}, -{39,39,-50}, -{39,39,-49}, -{39,39,-48}, -{39,39,-47}, -{39,39,-46}, -{39,39,-45}, -{39,39,-44}, -{39,39,-43}, -{39,39,-42}, -{39,39,-41}, -{39,39,-40}, -{39,39,-39}, -{39,39,-38}, -{39,39,-37}, -{39,39,-36}, -{39,39,-35}, -{39,39,-34}, -{39,39,-33}, -{39,39,-32}, -{39,39,-31}, -{39,39,-30}, -{39,39,-29}, -{39,39,-28}, -{39,39,-27}, -{39,39,-26}, -{39,39,-25}, -{39,39,-24}, -{39,39,-23}, -{39,39,-22}, -{39,39,-21}, -{39,39,-20}, -{39,39,-19}, -{39,39,-18}, -{39,39,-17}, -{39,39,-16}, -{39,39,-15}, -{39,39,-14}, -{39,39,-13}, -{39,39,-12}, -{39,39,-11}, -{39,39,-10}, -{39,39,-9}, -{39,39,-8}, -{39,39,-7}, -{39,39,-6}, -{39,39,-5}, -{39,39,-4}, -{39,39,-3}, -{39,39,-2}, -{39,39,-1}, -{39,39,0}, -{39,39,1}, -{39,39,2}, -{39,39,3}, -{39,39,4}, -{39,39,5}, -{39,39,6}, -{39,39,7}, -{39,39,8}, -{39,39,9}, -{39,39,10}, -{39,39,11}, -{39,39,12}, -{39,39,13}, -{39,39,14}, -{39,39,15}, -{39,39,16}, -{39,39,17}, -{39,39,18}, -{39,39,19}, -{39,39,20}, -{39,39,21}, -{39,39,22}, -{39,39,23}, -{39,39,24}, -{39,39,25}, -{39,39,26}, -{39,39,27}, -{39,39,28}, -{39,39,29}, -{39,39,30}, -{39,39,31}, -{39,39,32}, -{39,39,33}, -{39,39,34}, -{39,39,35}, -{39,39,36}, -{39,39,37}, -{39,39,38}, -{39,39,39}, -{39,39,40}, -{39,39,41}, -{39,39,42}, -{39,39,43}, -{39,39,44}, -{39,39,45}, -{39,39,46}, -{39,39,47}, -{39,39,48}, -{39,39,49}, -{39,39,50}, -{39,40,-79}, -{39,40,-78}, -{39,40,-77}, -{39,40,-76}, -{39,40,-75}, -{39,40,-74}, -{39,40,-73}, -{39,40,-72}, -{39,40,-71}, -{39,40,-70}, -{39,40,-69}, -{39,40,-68}, -{39,40,-67}, -{39,40,-66}, -{39,40,-65}, -{39,40,-64}, -{39,40,-63}, -{39,40,-62}, -{39,40,-61}, -{39,40,-60}, -{39,40,-59}, -{39,40,-58}, -{39,40,-57}, -{39,40,-56}, -{39,40,-55}, -{39,40,-54}, -{39,40,-53}, -{39,40,-52}, -{39,40,-51}, -{39,40,-50}, -{39,40,-49}, -{39,40,-48}, -{39,40,-47}, -{39,40,-46}, -{39,40,-45}, -{39,40,-44}, -{39,40,-43}, -{39,40,-42}, -{39,40,-41}, -{39,40,-40}, -{39,40,-39}, -{39,40,-38}, -{39,40,-37}, -{39,40,-36}, -{39,40,-35}, -{39,40,-34}, -{39,40,-33}, -{39,40,-32}, -{39,40,-31}, -{39,40,-30}, -{39,40,-29}, -{39,40,-28}, -{39,40,-27}, -{39,40,-26}, -{39,40,-25}, -{39,40,-24}, -{39,40,-23}, -{39,40,-22}, -{39,40,-21}, -{39,40,-20}, -{39,40,-19}, -{39,40,-18}, -{39,40,-17}, -{39,40,-16}, -{39,40,-15}, -{39,40,-14}, -{39,40,-13}, -{39,40,-12}, -{39,40,-11}, -{39,40,-10}, -{39,40,-9}, -{39,40,-8}, -{39,40,-7}, -{39,40,-6}, -{39,40,-5}, -{39,40,-4}, -{39,40,-3}, -{39,40,-2}, -{39,40,-1}, -{39,40,0}, -{39,40,1}, -{39,40,2}, -{39,40,3}, -{39,40,4}, -{39,40,5}, -{39,40,6}, -{39,40,7}, -{39,40,8}, -{39,40,9}, -{39,40,10}, -{39,40,11}, -{39,40,12}, -{39,40,13}, -{39,40,14}, -{39,40,15}, -{39,40,16}, -{39,40,17}, -{39,40,18}, -{39,40,19}, -{39,40,20}, -{39,40,21}, -{39,40,22}, -{39,40,23}, -{39,40,24}, -{39,40,25}, -{39,40,26}, -{39,40,27}, -{39,40,28}, -{39,40,29}, -{39,40,30}, -{39,40,31}, -{39,40,32}, -{39,40,33}, -{39,40,34}, -{39,40,35}, -{39,40,36}, -{39,40,37}, -{39,40,38}, -{39,40,39}, -{39,40,40}, -{39,40,41}, -{39,40,42}, -{39,40,43}, -{39,40,44}, -{39,40,45}, -{39,40,46}, -{39,40,47}, -{39,40,48}, -{39,40,49}, -{39,40,50}, -{39,41,-80}, -{39,41,-79}, -{39,41,-78}, -{39,41,-77}, -{39,41,-76}, -{39,41,-75}, -{39,41,-74}, -{39,41,-73}, -{39,41,-72}, -{39,41,-71}, -{39,41,-70}, -{39,41,-69}, -{39,41,-68}, -{39,41,-67}, -{39,41,-66}, -{39,41,-65}, -{39,41,-64}, -{39,41,-63}, -{39,41,-62}, -{39,41,-61}, -{39,41,-60}, -{39,41,-59}, -{39,41,-58}, -{39,41,-57}, -{39,41,-56}, -{39,41,-55}, -{39,41,-54}, -{39,41,-53}, -{39,41,-52}, -{39,41,-51}, -{39,41,-50}, -{39,41,-49}, -{39,41,-48}, -{39,41,-47}, -{39,41,-46}, -{39,41,-45}, -{39,41,-44}, -{39,41,-43}, -{39,41,-42}, -{39,41,-41}, -{39,41,-40}, -{39,41,-39}, -{39,41,-38}, -{39,41,-37}, -{39,41,-36}, -{39,41,-35}, -{39,41,-34}, -{39,41,-33}, -{39,41,-32}, -{39,41,-31}, -{39,41,-30}, -{39,41,-29}, -{39,41,-28}, -{39,41,-27}, -{39,41,-26}, -{39,41,-25}, -{39,41,-24}, -{39,41,-23}, -{39,41,-22}, -{39,41,-21}, -{39,41,-20}, -{39,41,-19}, -{39,41,-18}, -{39,41,-17}, -{39,41,-16}, -{39,41,-15}, -{39,41,-14}, -{39,41,-13}, -{39,41,-12}, -{39,41,-11}, -{39,41,-10}, -{39,41,-9}, -{39,41,-8}, -{39,41,-7}, -{39,41,-6}, -{39,41,-5}, -{39,41,-4}, -{39,41,-3}, -{39,41,-2}, -{39,41,-1}, -{39,41,0}, -{39,41,1}, -{39,41,2}, -{39,41,3}, -{39,41,4}, -{39,41,5}, -{39,41,6}, -{39,41,7}, -{39,41,8}, -{39,41,9}, -{39,41,10}, -{39,41,11}, -{39,41,12}, -{39,41,13}, -{39,41,14}, -{39,41,15}, -{39,41,16}, -{39,41,17}, -{39,41,18}, -{39,41,19}, -{39,41,20}, -{39,41,21}, -{39,41,22}, -{39,41,23}, -{39,41,24}, -{39,41,25}, -{39,41,26}, -{39,41,27}, -{39,41,28}, -{39,41,29}, -{39,41,30}, -{39,41,31}, -{39,41,32}, -{39,41,33}, -{39,41,34}, -{39,41,35}, -{39,41,36}, -{39,41,37}, -{39,41,38}, -{39,41,39}, -{39,41,40}, -{39,41,41}, -{39,41,42}, -{39,41,43}, -{39,41,44}, -{39,41,45}, -{39,41,46}, -{39,41,47}, -{39,41,48}, -{39,41,49}, -{39,41,50}, -{39,42,-81}, -{39,42,-80}, -{39,42,-79}, -{39,42,-78}, -{39,42,-77}, -{39,42,-76}, -{39,42,-75}, -{39,42,-74}, -{39,42,-73}, -{39,42,-72}, -{39,42,-71}, -{39,42,-70}, -{39,42,-69}, -{39,42,-68}, -{39,42,-67}, -{39,42,-66}, -{39,42,-65}, -{39,42,-64}, -{39,42,-63}, -{39,42,-62}, -{39,42,-61}, -{39,42,-60}, -{39,42,-59}, -{39,42,-58}, -{39,42,-57}, -{39,42,-56}, -{39,42,-55}, -{39,42,-54}, -{39,42,-53}, -{39,42,-52}, -{39,42,-51}, -{39,42,-50}, -{39,42,-49}, -{39,42,-48}, -{39,42,-47}, -{39,42,-46}, -{39,42,-45}, -{39,42,-44}, -{39,42,-43}, -{39,42,-42}, -{39,42,-41}, -{39,42,-40}, -{39,42,-39}, -{39,42,-38}, -{39,42,-37}, -{39,42,-36}, -{39,42,-35}, -{39,42,-34}, -{39,42,-33}, -{39,42,-32}, -{39,42,-31}, -{39,42,-30}, -{39,42,-29}, -{39,42,-28}, -{39,42,-27}, -{39,42,-26}, -{39,42,-25}, -{39,42,-24}, -{39,42,-23}, -{39,42,-22}, -{39,42,-21}, -{39,42,-20}, -{39,42,-19}, -{39,42,-18}, -{39,42,-17}, -{39,42,-16}, -{39,42,-15}, -{39,42,-14}, -{39,42,-13}, -{39,42,-12}, -{39,42,-11}, -{39,42,-10}, -{39,42,-9}, -{39,42,-8}, -{39,42,-7}, -{39,42,-6}, -{39,42,-5}, -{39,42,-4}, -{39,42,-3}, -{39,42,-2}, -{39,42,-1}, -{39,42,0}, -{39,42,1}, -{39,42,2}, -{39,42,3}, -{39,42,4}, -{39,42,5}, -{39,42,6}, -{39,42,7}, -{39,42,8}, -{39,42,9}, -{39,42,10}, -{39,42,11}, -{39,42,12}, -{39,42,13}, -{39,42,14}, -{39,42,15}, -{39,42,16}, -{39,42,17}, -{39,42,18}, -{39,42,19}, -{39,42,20}, -{39,42,21}, -{39,42,22}, -{39,42,23}, -{39,42,24}, -{39,42,25}, -{39,42,26}, -{39,42,27}, -{39,42,28}, -{39,42,29}, -{39,42,30}, -{39,42,31}, -{39,42,32}, -{39,42,33}, -{39,42,34}, -{39,42,35}, -{39,42,36}, -{39,42,37}, -{39,42,38}, -{39,42,39}, -{39,42,40}, -{39,42,41}, -{39,42,42}, -{39,42,43}, -{39,42,44}, -{39,42,45}, -{39,42,46}, -{39,42,47}, -{39,42,48}, -{39,42,49}, -{39,42,50}, -{39,43,-82}, -{39,43,-81}, -{39,43,-80}, -{39,43,-79}, -{39,43,-78}, -{39,43,-77}, -{39,43,-76}, -{39,43,-75}, -{39,43,-74}, -{39,43,-73}, -{39,43,-72}, -{39,43,-71}, -{39,43,-70}, -{39,43,-69}, -{39,43,-68}, -{39,43,-67}, -{39,43,-66}, -{39,43,-65}, -{39,43,-64}, -{39,43,-63}, -{39,43,-62}, -{39,43,-61}, -{39,43,-60}, -{39,43,-59}, -{39,43,-58}, -{39,43,-57}, -{39,43,-56}, -{39,43,-55}, -{39,43,-54}, -{39,43,-53}, -{39,43,-52}, -{39,43,-51}, -{39,43,-50}, -{39,43,-49}, -{39,43,-48}, -{39,43,-47}, -{39,43,-46}, -{39,43,-45}, -{39,43,-44}, -{39,43,-43}, -{39,43,-42}, -{39,43,-41}, -{39,43,-40}, -{39,43,-39}, -{39,43,-38}, -{39,43,-37}, -{39,43,-36}, -{39,43,-35}, -{39,43,-34}, -{39,43,-33}, -{39,43,-32}, -{39,43,-31}, -{39,43,-30}, -{39,43,-29}, -{39,43,-28}, -{39,43,-27}, -{39,43,-26}, -{39,43,-25}, -{39,43,-24}, -{39,43,-23}, -{39,43,-22}, -{39,43,-21}, -{39,43,-20}, -{39,43,-19}, -{39,43,-18}, -{39,43,-17}, -{39,43,-16}, -{39,43,-15}, -{39,43,-14}, -{39,43,-13}, -{39,43,-12}, -{39,43,-11}, -{39,43,-10}, -{39,43,-9}, -{39,43,-8}, -{39,43,-7}, -{39,43,-6}, -{39,43,-5}, -{39,43,-4}, -{39,43,-3}, -{39,43,-2}, -{39,43,-1}, -{39,43,0}, -{39,43,1}, -{39,43,2}, -{39,43,3}, -{39,43,4}, -{39,43,5}, -{39,43,6}, -{39,43,7}, -{39,43,8}, -{39,43,9}, -{39,43,10}, -{39,43,11}, -{39,43,12}, -{39,43,13}, -{39,43,14}, -{39,43,15}, -{39,43,16}, -{39,43,17}, -{39,43,18}, -{39,43,19}, -{39,43,20}, -{39,43,21}, -{39,43,22}, -{39,43,23}, -{39,43,24}, -{39,43,25}, -{39,43,26}, -{39,43,27}, -{39,43,28}, -{39,43,29}, -{39,43,30}, -{39,43,31}, -{39,43,32}, -{39,43,33}, -{39,43,34}, -{39,43,35}, -{39,43,36}, -{39,43,37}, -{39,43,38}, -{39,43,39}, -{39,43,40}, -{39,43,41}, -{39,43,42}, -{39,43,43}, -{39,43,44}, -{39,43,45}, -{39,43,46}, -{39,43,47}, -{39,43,48}, -{39,43,49}, -{39,43,50}, -{39,44,-83}, -{39,44,-82}, -{39,44,-81}, -{39,44,-80}, -{39,44,-79}, -{39,44,-78}, -{39,44,-77}, -{39,44,-76}, -{39,44,-75}, -{39,44,-74}, -{39,44,-73}, -{39,44,-72}, -{39,44,-71}, -{39,44,-70}, -{39,44,-69}, -{39,44,-68}, -{39,44,-67}, -{39,44,-66}, -{39,44,-65}, -{39,44,-64}, -{39,44,-63}, -{39,44,-62}, -{39,44,-61}, -{39,44,-60}, -{39,44,-59}, -{39,44,-58}, -{39,44,-57}, -{39,44,-56}, -{39,44,-55}, -{39,44,-54}, -{39,44,-53}, -{39,44,-52}, -{39,44,-51}, -{39,44,-50}, -{39,44,-49}, -{39,44,-48}, -{39,44,-47}, -{39,44,-46}, -{39,44,-45}, -{39,44,-44}, -{39,44,-43}, -{39,44,-42}, -{39,44,-41}, -{39,44,-40}, -{39,44,-39}, -{39,44,-38}, -{39,44,-37}, -{39,44,-36}, -{39,44,-35}, -{39,44,-34}, -{39,44,-33}, -{39,44,-32}, -{39,44,-31}, -{39,44,-30}, -{39,44,-29}, -{39,44,-28}, -{39,44,-27}, -{39,44,-26}, -{39,44,-25}, -{39,44,-24}, -{39,44,-23}, -{39,44,-22}, -{39,44,-21}, -{39,44,-20}, -{39,44,-19}, -{39,44,-18}, -{39,44,-17}, -{39,44,-16}, -{39,44,-15}, -{39,44,-14}, -{39,44,-13}, -{39,44,-12}, -{39,44,-11}, -{39,44,-10}, -{39,44,-9}, -{39,44,-8}, -{39,44,-7}, -{39,44,-6}, -{39,44,-5}, -{39,44,-4}, -{39,44,-3}, -{39,44,-2}, -{39,44,-1}, -{39,44,0}, -{39,44,1}, -{39,44,2}, -{39,44,3}, -{39,44,4}, -{39,44,5}, -{39,44,6}, -{39,44,7}, -{39,44,8}, -{39,44,9}, -{39,44,10}, -{39,44,11}, -{39,44,12}, -{39,44,13}, -{39,44,14}, -{39,44,15}, -{39,44,16}, -{39,44,17}, -{39,44,18}, -{39,44,19}, -{39,44,20}, -{39,44,21}, -{39,44,22}, -{39,44,23}, -{39,44,24}, -{39,44,25}, -{39,44,26}, -{39,44,27}, -{39,44,28}, -{39,44,29}, -{39,44,30}, -{39,44,31}, -{39,44,32}, -{39,44,33}, -{39,44,34}, -{39,44,35}, -{39,44,36}, -{39,44,37}, -{39,44,38}, -{39,44,39}, -{39,44,40}, -{39,44,41}, -{39,44,42}, -{39,44,43}, -{39,44,44}, -{39,44,45}, -{39,44,46}, -{39,44,47}, -{39,44,48}, -{39,44,49}, -{39,44,50}, -{39,45,-84}, -{39,45,-83}, -{39,45,-82}, -{39,45,-81}, -{39,45,-80}, -{39,45,-79}, -{39,45,-78}, -{39,45,-77}, -{39,45,-76}, -{39,45,-75}, -{39,45,-74}, -{39,45,-73}, -{39,45,-72}, -{39,45,-71}, -{39,45,-70}, -{39,45,-69}, -{39,45,-68}, -{39,45,-67}, -{39,45,-66}, -{39,45,-65}, -{39,45,-64}, -{39,45,-63}, -{39,45,-62}, -{39,45,-61}, -{39,45,-60}, -{39,45,-59}, -{39,45,-58}, -{39,45,-57}, -{39,45,-56}, -{39,45,-55}, -{39,45,-54}, -{39,45,-53}, -{39,45,-52}, -{39,45,-51}, -{39,45,-50}, -{39,45,-49}, -{39,45,-48}, -{39,45,-47}, -{39,45,-46}, -{39,45,-45}, -{39,45,-44}, -{39,45,-43}, -{39,45,-42}, -{39,45,-41}, -{39,45,-40}, -{39,45,-39}, -{39,45,-38}, -{39,45,-37}, -{39,45,-36}, -{39,45,-35}, -{39,45,-34}, -{39,45,-33}, -{39,45,-32}, -{39,45,-31}, -{39,45,-30}, -{39,45,-29}, -{39,45,-28}, -{39,45,-27}, -{39,45,-26}, -{39,45,-25}, -{39,45,-24}, -{39,45,-23}, -{39,45,-22}, -{39,45,-21}, -{39,45,-20}, -{39,45,-19}, -{39,45,-18}, -{39,45,-17}, -{39,45,-16}, -{39,45,-15}, -{39,45,-14}, -{39,45,-13}, -{39,45,-12}, -{39,45,-11}, -{39,45,-10}, -{39,45,-9}, -{39,45,-8}, -{39,45,-7}, -{39,45,-6}, -{39,45,-5}, -{39,45,-4}, -{39,45,-3}, -{39,45,-2}, -{39,45,-1}, -{39,45,0}, -{39,45,1}, -{39,45,2}, -{39,45,3}, -{39,45,4}, -{39,45,5}, -{39,45,6}, -{39,45,7}, -{39,45,8}, -{39,45,9}, -{39,45,10}, -{39,45,11}, -{39,45,12}, -{39,45,13}, -{39,45,14}, -{39,45,15}, -{39,45,16}, -{39,45,17}, -{39,45,18}, -{39,45,19}, -{39,45,20}, -{39,45,21}, -{39,45,22}, -{39,45,23}, -{39,45,24}, -{39,45,25}, -{39,45,26}, -{39,45,27}, -{39,45,28}, -{39,45,29}, -{39,45,30}, -{39,45,31}, -{39,45,32}, -{39,45,33}, -{39,45,34}, -{39,45,35}, -{39,45,36}, -{39,45,37}, -{39,45,38}, -{39,45,39}, -{39,45,40}, -{39,45,41}, -{39,45,42}, -{39,45,43}, -{39,45,44}, -{39,45,45}, -{39,45,46}, -{39,45,47}, -{39,45,48}, -{39,45,49}, -{39,45,50}, -{39,45,51}, -{39,46,-85}, -{39,46,-84}, -{39,46,-83}, -{39,46,-82}, -{39,46,-81}, -{39,46,-80}, -{39,46,-79}, -{39,46,-78}, -{39,46,-77}, -{39,46,-76}, -{39,46,-75}, -{39,46,-74}, -{39,46,-73}, -{39,46,-72}, -{39,46,-71}, -{39,46,-70}, -{39,46,-69}, -{39,46,-68}, -{39,46,-67}, -{39,46,-66}, -{39,46,-65}, -{39,46,-64}, -{39,46,-63}, -{39,46,-62}, -{39,46,-61}, -{39,46,-60}, -{39,46,-59}, -{39,46,-58}, -{39,46,-57}, -{39,46,-56}, -{39,46,-55}, -{39,46,-54}, -{39,46,-53}, -{39,46,-52}, -{39,46,-51}, -{39,46,-50}, -{39,46,-49}, -{39,46,-48}, -{39,46,-47}, -{39,46,-46}, -{39,46,-45}, -{39,46,-44}, -{39,46,-43}, -{39,46,-42}, -{39,46,-41}, -{39,46,-40}, -{39,46,-39}, -{39,46,-38}, -{39,46,-37}, -{39,46,-36}, -{39,46,-35}, -{39,46,-34}, -{39,46,-33}, -{39,46,-32}, -{39,46,-31}, -{39,46,-30}, -{39,46,-29}, -{39,46,-28}, -{39,46,-27}, -{39,46,-26}, -{39,46,-25}, -{39,46,-24}, -{39,46,-23}, -{39,46,-22}, -{39,46,-21}, -{39,46,-20}, -{39,46,-19}, -{39,46,-18}, -{39,46,-17}, -{39,46,-16}, -{39,46,-15}, -{39,46,-14}, -{39,46,-13}, -{39,46,-12}, -{39,46,-11}, -{39,46,-10}, -{39,46,-9}, -{39,46,-8}, -{39,46,-7}, -{39,46,-6}, -{39,46,-5}, -{39,46,-4}, -{39,46,-3}, -{39,46,-2}, -{39,46,-1}, -{39,46,0}, -{39,46,1}, -{39,46,2}, -{39,46,3}, -{39,46,4}, -{39,46,5}, -{39,46,6}, -{39,46,7}, -{39,46,8}, -{39,46,9}, -{39,46,10}, -{39,46,11}, -{39,46,12}, -{39,46,13}, -{39,46,14}, -{39,46,15}, -{39,46,16}, -{39,46,17}, -{39,46,18}, -{39,46,19}, -{39,46,20}, -{39,46,21}, -{39,46,22}, -{39,46,23}, -{39,46,24}, -{39,46,25}, -{39,46,26}, -{39,46,27}, -{39,46,28}, -{39,46,29}, -{39,46,30}, -{39,46,31}, -{39,46,32}, -{39,46,33}, -{39,46,34}, -{39,46,35}, -{39,46,36}, -{39,46,37}, -{39,46,38}, -{39,46,39}, -{39,46,40}, -{39,46,41}, -{39,46,42}, -{39,46,43}, -{39,46,44}, -{39,46,45}, -{39,46,46}, -{39,46,47}, -{39,46,48}, -{39,46,49}, -{39,46,50}, -{39,46,51}, -{39,47,-86}, -{39,47,-85}, -{39,47,-84}, -{39,47,-83}, -{39,47,-82}, -{39,47,-81}, -{39,47,-80}, -{39,47,-79}, -{39,47,-78}, -{39,47,-77}, -{39,47,-76}, -{39,47,-75}, -{39,47,-74}, -{39,47,-73}, -{39,47,-72}, -{39,47,-71}, -{39,47,-70}, -{39,47,-69}, -{39,47,-68}, -{39,47,-67}, -{39,47,-66}, -{39,47,-65}, -{39,47,-64}, -{39,47,-63}, -{39,47,-62}, -{39,47,-61}, -{39,47,-60}, -{39,47,-59}, -{39,47,-58}, -{39,47,-57}, -{39,47,-56}, -{39,47,-55}, -{39,47,-54}, -{39,47,-53}, -{39,47,-52}, -{39,47,-51}, -{39,47,-50}, -{39,47,-49}, -{39,47,-48}, -{39,47,-47}, -{39,47,-46}, -{39,47,-45}, -{39,47,-44}, -{39,47,-43}, -{39,47,-42}, -{39,47,-41}, -{39,47,-40}, -{39,47,-39}, -{39,47,-38}, -{39,47,-37}, -{39,47,-36}, -{39,47,-35}, -{39,47,-34}, -{39,47,-33}, -{39,47,-32}, -{39,47,-31}, -{39,47,-30}, -{39,47,-29}, -{39,47,-28}, -{39,47,-27}, -{39,47,-26}, -{39,47,-25}, -{39,47,-24}, -{39,47,-23}, -{39,47,-22}, -{39,47,-21}, -{39,47,-20}, -{39,47,-19}, -{39,47,-18}, -{39,47,-17}, -{39,47,-16}, -{39,47,-15}, -{39,47,-14}, -{39,47,-13}, -{39,47,-12}, -{39,47,-11}, -{39,47,-10}, -{39,47,-9}, -{39,47,-8}, -{39,47,-7}, -{39,47,-6}, -{39,47,-5}, -{39,47,-4}, -{39,47,-3}, -{39,47,-2}, -{39,47,-1}, -{39,47,0}, -{39,47,1}, -{39,47,2}, -{39,47,3}, -{39,47,4}, -{39,47,5}, -{39,47,6}, -{39,47,7}, -{39,47,8}, -{39,47,9}, -{39,47,10}, -{39,47,11}, -{39,47,12}, -{39,47,13}, -{39,47,14}, -{39,47,15}, -{39,47,16}, -{39,47,17}, -{39,47,18}, -{39,47,19}, -{39,47,20}, -{39,47,21}, -{39,47,22}, -{39,47,23}, -{39,47,24}, -{39,47,25}, -{39,47,26}, -{39,47,27}, -{39,47,28}, -{39,47,29}, -{39,47,30}, -{39,47,31}, -{39,47,32}, -{39,47,33}, -{39,47,34}, -{39,47,35}, -{39,47,36}, -{39,47,37}, -{39,47,38}, -{39,47,39}, -{39,47,40}, -{39,47,41}, -{39,47,42}, -{39,47,43}, -{39,47,44}, -{39,47,45}, -{39,47,46}, -{39,47,47}, -{39,47,48}, -{39,47,49}, -{39,47,50}, -{39,47,51}, -{39,48,-87}, -{39,48,-86}, -{39,48,-85}, -{39,48,-84}, -{39,48,-83}, -{39,48,-82}, -{39,48,-81}, -{39,48,-80}, -{39,48,-79}, -{39,48,-78}, -{39,48,-77}, -{39,48,-76}, -{39,48,-75}, -{39,48,-74}, -{39,48,-73}, -{39,48,-72}, -{39,48,-71}, -{39,48,-70}, -{39,48,-69}, -{39,48,-68}, -{39,48,-67}, -{39,48,-66}, -{39,48,-65}, -{39,48,-64}, -{39,48,-63}, -{39,48,-62}, -{39,48,-61}, -{39,48,-60}, -{39,48,-59}, -{39,48,-58}, -{39,48,-57}, -{39,48,-56}, -{39,48,-55}, -{39,48,-54}, -{39,48,-53}, -{39,48,-52}, -{39,48,-51}, -{39,48,-50}, -{39,48,-49}, -{39,48,-48}, -{39,48,-47}, -{39,48,-46}, -{39,48,-45}, -{39,48,-44}, -{39,48,-43}, -{39,48,-42}, -{39,48,-41}, -{39,48,-40}, -{39,48,-39}, -{39,48,-38}, -{39,48,-37}, -{39,48,-36}, -{39,48,-35}, -{39,48,-34}, -{39,48,-33}, -{39,48,-32}, -{39,48,-31}, -{39,48,-30}, -{39,48,-29}, -{39,48,-28}, -{39,48,-27}, -{39,48,-26}, -{39,48,-25}, -{39,48,-24}, -{39,48,-23}, -{39,48,-22}, -{39,48,-21}, -{39,48,-20}, -{39,48,-19}, -{39,48,-18}, -{39,48,-17}, -{39,48,-16}, -{39,48,-15}, -{39,48,-14}, -{39,48,-13}, -{39,48,-12}, -{39,48,-11}, -{39,48,-10}, -{39,48,-9}, -{39,48,-8}, -{39,48,-7}, -{39,48,-6}, -{39,48,-5}, -{39,48,-4}, -{39,48,-3}, -{39,48,-2}, -{39,48,-1}, -{39,48,0}, -{39,48,1}, -{39,48,2}, -{39,48,3}, -{39,48,4}, -{39,48,5}, -{39,48,6}, -{39,48,7}, -{39,48,8}, -{39,48,9}, -{39,48,10}, -{39,48,11}, -{39,48,12}, -{39,48,13}, -{39,48,14}, -{39,48,15}, -{39,48,16}, -{39,48,17}, -{39,48,18}, -{39,48,19}, -{39,48,20}, -{39,48,21}, -{39,48,22}, -{39,48,23}, -{39,48,24}, -{39,48,25}, -{39,48,26}, -{39,48,27}, -{39,48,28}, -{39,48,29}, -{39,48,30}, -{39,48,31}, -{39,48,32}, -{39,48,33}, -{39,48,34}, -{39,48,35}, -{39,48,36}, -{39,48,37}, -{39,48,38}, -{39,48,39}, -{39,48,40}, -{39,48,41}, -{39,48,42}, -{39,48,43}, -{39,48,44}, -{39,48,45}, -{39,48,46}, -{39,48,47}, -{39,48,48}, -{39,48,49}, -{39,48,50}, -{39,48,51}, -{39,49,-87}, -{39,49,-86}, -{39,49,-85}, -{39,49,-84}, -{39,49,-83}, -{39,49,-82}, -{39,49,-81}, -{39,49,-80}, -{39,49,-79}, -{39,49,-78}, -{39,49,-77}, -{39,49,-76}, -{39,49,-75}, -{39,49,-74}, -{39,49,-73}, -{39,49,-72}, -{39,49,-71}, -{39,49,-70}, -{39,49,-69}, -{39,49,-68}, -{39,49,-67}, -{39,49,-66}, -{39,49,-65}, -{39,49,-64}, -{39,49,-63}, -{39,49,-62}, -{39,49,-61}, -{39,49,-60}, -{39,49,-59}, -{39,49,-58}, -{39,49,-57}, -{39,49,-56}, -{39,49,-55}, -{39,49,-54}, -{39,49,-53}, -{39,49,-52}, -{39,49,-51}, -{39,49,-50}, -{39,49,-49}, -{39,49,-48}, -{39,49,-47}, -{39,49,-46}, -{39,49,-45}, -{39,49,-44}, -{39,49,-43}, -{39,49,-42}, -{39,49,-41}, -{39,49,-40}, -{39,49,-39}, -{39,49,-38}, -{39,49,-37}, -{39,49,-36}, -{39,49,-35}, -{39,49,-34}, -{39,49,-33}, -{39,49,-32}, -{39,49,-31}, -{39,49,-30}, -{39,49,-29}, -{39,49,-28}, -{39,49,-27}, -{39,49,-26}, -{39,49,-25}, -{39,49,-24}, -{39,49,-23}, -{39,49,-22}, -{39,49,-21}, -{39,49,-20}, -{39,49,-19}, -{39,49,-18}, -{39,49,-17}, -{39,49,-16}, -{39,49,-15}, -{39,49,-14}, -{39,49,-13}, -{39,49,-12}, -{39,49,-11}, -{39,49,-10}, -{39,49,-9}, -{39,49,-8}, -{39,49,-7}, -{39,49,-6}, -{39,49,-5}, -{39,49,-4}, -{39,49,-3}, -{39,49,-2}, -{39,49,-1}, -{39,49,0}, -{39,49,1}, -{39,49,2}, -{39,49,3}, -{39,49,4}, -{39,49,5}, -{39,49,6}, -{39,49,7}, -{39,49,8}, -{39,49,9}, -{39,49,10}, -{39,49,11}, -{39,49,12}, -{39,49,13}, -{39,49,14}, -{39,49,15}, -{39,49,16}, -{39,49,17}, -{39,49,18}, -{39,49,19}, -{39,49,20}, -{39,49,21}, -{39,49,22}, -{39,49,23}, -{39,49,24}, -{39,49,25}, -{39,49,26}, -{39,49,27}, -{39,49,28}, -{39,49,29}, -{39,49,30}, -{39,49,31}, -{39,49,32}, -{39,49,33}, -{39,49,34}, -{39,49,35}, -{39,49,36}, -{39,49,37}, -{39,49,38}, -{39,49,39}, -{39,49,40}, -{39,49,41}, -{39,49,42}, -{39,49,43}, -{39,49,44}, -{39,49,45}, -{39,49,46}, -{39,49,47}, -{39,49,48}, -{39,49,49}, -{39,49,50}, -{39,49,51}, -{39,50,-88}, -{39,50,-87}, -{39,50,-86}, -{39,50,-85}, -{39,50,-84}, -{39,50,-83}, -{39,50,-82}, -{39,50,-81}, -{39,50,-80}, -{39,50,-79}, -{39,50,-78}, -{39,50,-77}, -{39,50,-76}, -{39,50,-75}, -{39,50,-74}, -{39,50,-73}, -{39,50,-72}, -{39,50,-71}, -{39,50,-70}, -{39,50,-69}, -{39,50,-68}, -{39,50,-67}, -{39,50,-66}, -{39,50,-65}, -{39,50,-64}, -{39,50,-63}, -{39,50,-62}, -{39,50,-61}, -{39,50,-60}, -{39,50,-59}, -{39,50,-58}, -{39,50,-57}, -{39,50,-56}, -{39,50,-55}, -{39,50,-54}, -{39,50,-53}, -{39,50,-52}, -{39,50,-51}, -{39,50,-50}, -{39,50,-49}, -{39,50,-48}, -{39,50,-47}, -{39,50,-46}, -{39,50,-45}, -{39,50,-44}, -{39,50,-43}, -{39,50,-42}, -{39,50,-41}, -{39,50,-40}, -{39,50,-39}, -{39,50,-38}, -{39,50,-37}, -{39,50,-36}, -{39,50,-35}, -{39,50,-34}, -{39,50,-33}, -{39,50,-32}, -{39,50,-31}, -{39,50,-30}, -{39,50,-29}, -{39,50,-28}, -{39,50,-27}, -{39,50,-26}, -{39,50,-25}, -{39,50,-24}, -{39,50,-23}, -{39,50,-22}, -{39,50,-21}, -{39,50,-20}, -{39,50,-19}, -{39,50,-18}, -{39,50,-17}, -{39,50,-16}, -{39,50,-15}, -{39,50,-14}, -{39,50,-13}, -{39,50,-12}, -{39,50,-11}, -{39,50,-10}, -{39,50,-9}, -{39,50,-8}, -{39,50,-7}, -{39,50,-6}, -{39,50,-5}, -{39,50,-4}, -{39,50,-3}, -{39,50,-2}, -{39,50,-1}, -{39,50,0}, -{39,50,1}, -{39,50,2}, -{39,50,3}, -{39,50,4}, -{39,50,5}, -{39,50,6}, -{39,50,7}, -{39,50,8}, -{39,50,9}, -{39,50,10}, -{39,50,11}, -{39,50,12}, -{39,50,13}, -{39,50,14}, -{39,50,15}, -{39,50,16}, -{39,50,17}, -{39,50,18}, -{39,50,19}, -{39,50,20}, -{39,50,21}, -{39,50,22}, -{39,50,23}, -{39,50,24}, -{39,50,25}, -{39,50,26}, -{39,50,27}, -{39,50,28}, -{39,50,29}, -{39,50,30}, -{39,50,31}, -{39,50,32}, -{39,50,33}, -{39,50,34}, -{39,50,35}, -{39,50,36}, -{39,50,37}, -{39,50,38}, -{39,50,39}, -{39,50,40}, -{39,50,41}, -{39,50,42}, -{39,50,43}, -{39,50,44}, -{39,50,45}, -{39,50,46}, -{39,50,47}, -{39,50,48}, -{39,50,49}, -{39,50,50}, -{39,50,51}, -{39,51,-89}, -{39,51,-88}, -{39,51,-87}, -{39,51,-86}, -{39,51,-85}, -{39,51,-84}, -{39,51,-83}, -{39,51,-82}, -{39,51,-81}, -{39,51,-80}, -{39,51,-79}, -{39,51,-78}, -{39,51,-77}, -{39,51,-76}, -{39,51,-75}, -{39,51,-74}, -{39,51,-73}, -{39,51,-72}, -{39,51,-71}, -{39,51,-70}, -{39,51,-69}, -{39,51,-68}, -{39,51,-67}, -{39,51,-66}, -{39,51,-65}, -{39,51,-64}, -{39,51,-63}, -{39,51,-62}, -{39,51,-61}, -{39,51,-60}, -{39,51,-59}, -{39,51,-58}, -{39,51,-57}, -{39,51,-56}, -{39,51,-55}, -{39,51,-54}, -{39,51,-53}, -{39,51,-52}, -{39,51,-51}, -{39,51,-50}, -{39,51,-49}, -{39,51,-48}, -{39,51,-47}, -{39,51,-46}, -{39,51,-45}, -{39,51,-44}, -{39,51,-43}, -{39,51,-42}, -{39,51,-41}, -{39,51,-40}, -{39,51,-39}, -{39,51,-38}, -{39,51,-37}, -{39,51,-36}, -{39,51,-35}, -{39,51,-34}, -{39,51,-33}, -{39,51,-32}, -{39,51,-31}, -{39,51,-30}, -{39,51,-29}, -{39,51,-28}, -{39,51,-27}, -{39,51,-26}, -{39,51,-25}, -{39,51,-24}, -{39,51,-23}, -{39,51,-22}, -{39,51,-21}, -{39,51,-20}, -{39,51,-19}, -{39,51,-18}, -{39,51,-17}, -{39,51,-16}, -{39,51,-15}, -{39,51,-14}, -{39,51,-13}, -{39,51,-12}, -{39,51,-11}, -{39,51,-10}, -{39,51,-9}, -{39,51,-8}, -{39,51,-7}, -{39,51,-6}, -{39,51,-5}, -{39,51,-4}, -{39,51,-3}, -{39,51,-2}, -{39,51,-1}, -{39,51,0}, -{39,51,1}, -{39,51,2}, -{39,51,3}, -{39,51,4}, -{39,51,5}, -{39,51,6}, -{39,51,7}, -{39,51,8}, -{39,51,9}, -{39,51,10}, -{39,51,11}, -{39,51,12}, -{39,51,13}, -{39,51,14}, -{39,51,15}, -{39,51,16}, -{39,51,17}, -{39,51,18}, -{39,51,19}, -{39,51,20}, -{39,51,21}, -{39,51,22}, -{39,51,23}, -{39,51,24}, -{39,51,25}, -{39,51,26}, -{39,51,27}, -{39,51,28}, -{39,51,29}, -{39,51,30}, -{39,51,31}, -{39,51,32}, -{39,51,33}, -{39,51,34}, -{39,51,35}, -{39,51,36}, -{39,51,37}, -{39,51,38}, -{39,51,39}, -{39,51,40}, -{39,51,41}, -{39,51,42}, -{39,51,43}, -{39,51,44}, -{39,51,45}, -{39,51,46}, -{39,51,47}, -{39,51,48}, -{39,51,49}, -{39,51,50}, -{39,51,51}, -{39,52,-90}, -{39,52,-89}, -{39,52,-88}, -{39,52,-87}, -{39,52,-86}, -{39,52,-85}, -{39,52,-84}, -{39,52,-83}, -{39,52,-82}, -{39,52,-81}, -{39,52,-80}, -{39,52,-79}, -{39,52,-78}, -{39,52,-77}, -{39,52,-76}, -{39,52,-75}, -{39,52,-74}, -{39,52,-73}, -{39,52,-72}, -{39,52,-71}, -{39,52,-70}, -{39,52,-69}, -{39,52,-68}, -{39,52,-67}, -{39,52,-66}, -{39,52,-65}, -{39,52,-64}, -{39,52,-63}, -{39,52,-62}, -{39,52,-61}, -{39,52,-60}, -{39,52,-59}, -{39,52,-58}, -{39,52,-57}, -{39,52,-56}, -{39,52,-55}, -{39,52,-54}, -{39,52,-53}, -{39,52,-52}, -{39,52,-51}, -{39,52,-50}, -{39,52,-49}, -{39,52,-48}, -{39,52,-47}, -{39,52,-46}, -{39,52,-45}, -{39,52,-44}, -{39,52,-43}, -{39,52,-42}, -{39,52,-41}, -{39,52,-40}, -{39,52,-39}, -{39,52,-38}, -{39,52,-37}, -{39,52,-36}, -{39,52,-35}, -{39,52,-34}, -{39,52,-33}, -{39,52,-32}, -{39,52,-31}, -{39,52,-30}, -{39,52,-29}, -{39,52,-28}, -{39,52,-27}, -{39,52,-26}, -{39,52,-25}, -{39,52,-24}, -{39,52,-23}, -{39,52,-22}, -{39,52,-21}, -{39,52,-20}, -{39,52,-19}, -{39,52,-18}, -{39,52,-17}, -{39,52,-16}, -{39,52,-15}, -{39,52,-14}, -{39,52,-13}, -{39,52,-12}, -{39,52,-11}, -{39,52,-10}, -{39,52,-9}, -{39,52,-8}, -{39,52,-7}, -{39,52,-6}, -{39,52,-5}, -{39,52,-4}, -{39,52,-3}, -{39,52,-2}, -{39,52,-1}, -{39,52,0}, -{39,52,1}, -{39,52,2}, -{39,52,3}, -{39,52,4}, -{39,52,5}, -{39,52,6}, -{39,52,7}, -{39,52,8}, -{39,52,9}, -{39,52,10}, -{39,52,11}, -{39,52,12}, -{39,52,13}, -{39,52,14}, -{39,52,15}, -{39,52,16}, -{39,52,17}, -{39,52,18}, -{39,52,19}, -{39,52,20}, -{39,52,21}, -{39,52,22}, -{39,52,23}, -{39,52,24}, -{39,52,25}, -{39,52,26}, -{39,52,27}, -{39,52,28}, -{39,52,29}, -{39,52,30}, -{39,52,31}, -{39,52,32}, -{39,52,33}, -{39,52,34}, -{39,52,35}, -{39,52,36}, -{39,52,37}, -{39,52,38}, -{39,52,39}, -{39,52,40}, -{39,52,41}, -{39,52,42}, -{39,52,43}, -{39,52,44}, -{39,52,45}, -{39,52,46}, -{39,52,47}, -{39,52,48}, -{39,52,49}, -{39,52,50}, -{39,52,51}, -{39,53,-91}, -{39,53,-90}, -{39,53,-89}, -{39,53,-88}, -{39,53,-87}, -{39,53,-86}, -{39,53,-85}, -{39,53,-84}, -{39,53,-83}, -{39,53,-82}, -{39,53,-81}, -{39,53,-80}, -{39,53,-79}, -{39,53,-78}, -{39,53,-77}, -{39,53,-76}, -{39,53,-75}, -{39,53,-74}, -{39,53,-73}, -{39,53,-72}, -{39,53,-71}, -{39,53,-70}, -{39,53,-69}, -{39,53,-68}, -{39,53,-67}, -{39,53,-66}, -{39,53,-65}, -{39,53,-64}, -{39,53,-63}, -{39,53,-62}, -{39,53,-61}, -{39,53,-60}, -{39,53,-59}, -{39,53,-58}, -{39,53,-57}, -{39,53,-56}, -{39,53,-55}, -{39,53,-54}, -{39,53,-53}, -{39,53,-52}, -{39,53,-51}, -{39,53,-50}, -{39,53,-49}, -{39,53,-48}, -{39,53,-47}, -{39,53,-46}, -{39,53,-45}, -{39,53,-44}, -{39,53,-43}, -{39,53,-42}, -{39,53,-41}, -{39,53,-40}, -{39,53,-39}, -{39,53,-38}, -{39,53,-37}, -{39,53,-36}, -{39,53,-35}, -{39,53,-34}, -{39,53,-33}, -{39,53,-32}, -{39,53,-31}, -{39,53,-30}, -{39,53,-29}, -{39,53,-28}, -{39,53,-27}, -{39,53,-26}, -{39,53,-25}, -{39,53,-24}, -{39,53,-23}, -{39,53,-22}, -{39,53,-21}, -{39,53,-20}, -{39,53,-19}, -{39,53,-18}, -{39,53,-17}, -{39,53,-16}, -{39,53,-15}, -{39,53,-14}, -{39,53,-13}, -{39,53,-12}, -{39,53,-11}, -{39,53,-10}, -{39,53,-9}, -{39,53,-8}, -{39,53,-7}, -{39,53,-6}, -{39,53,-5}, -{39,53,-4}, -{39,53,-3}, -{39,53,-2}, -{39,53,-1}, -{39,53,0}, -{39,53,1}, -{39,53,2}, -{39,53,3}, -{39,53,4}, -{39,53,5}, -{39,53,6}, -{39,53,7}, -{39,53,8}, -{39,53,9}, -{39,53,10}, -{39,53,11}, -{39,53,12}, -{39,53,13}, -{39,53,14}, -{39,53,15}, -{39,53,16}, -{39,53,17}, -{39,53,18}, -{39,53,19}, -{39,53,20}, -{39,53,21}, -{39,53,22}, -{39,53,23}, -{39,53,24}, -{39,53,25}, -{39,53,26}, -{39,53,27}, -{39,53,28}, -{39,53,29}, -{39,53,30}, -{39,53,31}, -{39,53,32}, -{39,53,33}, -{39,53,34}, -{39,53,35}, -{39,53,36}, -{39,53,37}, -{39,53,38}, -{39,53,39}, -{39,53,40}, -{39,53,41}, -{39,53,42}, -{39,53,43}, -{39,53,44}, -{39,53,45}, -{39,53,46}, -{39,53,47}, -{39,53,48}, -{39,53,49}, -{39,53,50}, -{39,53,51}, -{39,53,52}, -{39,54,-92}, -{39,54,-91}, -{39,54,-90}, -{39,54,-89}, -{39,54,-88}, -{39,54,-87}, -{39,54,-86}, -{39,54,-85}, -{39,54,-84}, -{39,54,-83}, -{39,54,-82}, -{39,54,-81}, -{39,54,-80}, -{39,54,-79}, -{39,54,-78}, -{39,54,-77}, -{39,54,-76}, -{39,54,-75}, -{39,54,-74}, -{39,54,-73}, -{39,54,-72}, -{39,54,-71}, -{39,54,-70}, -{39,54,-69}, -{39,54,-68}, -{39,54,-67}, -{39,54,-66}, -{39,54,-65}, -{39,54,-64}, -{39,54,-63}, -{39,54,-62}, -{39,54,-61}, -{39,54,-60}, -{39,54,-59}, -{39,54,-58}, -{39,54,-57}, -{39,54,-56}, -{39,54,-55}, -{39,54,-54}, -{39,54,-53}, -{39,54,-52}, -{39,54,-51}, -{39,54,-50}, -{39,54,-49}, -{39,54,-48}, -{39,54,-47}, -{39,54,-46}, -{39,54,-45}, -{39,54,-44}, -{39,54,-43}, -{39,54,-42}, -{39,54,-41}, -{39,54,-40}, -{39,54,-39}, -{39,54,-38}, -{39,54,-37}, -{39,54,-36}, -{39,54,-35}, -{39,54,-34}, -{39,54,-33}, -{39,54,-32}, -{39,54,-31}, -{39,54,-30}, -{39,54,-29}, -{39,54,-28}, -{39,54,-27}, -{39,54,-26}, -{39,54,-25}, -{39,54,-24}, -{39,54,-23}, -{39,54,-22}, -{39,54,-21}, -{39,54,-20}, -{39,54,-19}, -{39,54,-18}, -{39,54,-17}, -{39,54,-16}, -{39,54,-15}, -{39,54,-14}, -{39,54,-13}, -{39,54,-12}, -{39,54,-11}, -{39,54,-10}, -{39,54,-9}, -{39,54,-8}, -{39,54,-7}, -{39,54,-6}, -{39,54,-5}, -{39,54,-4}, -{39,54,-3}, -{39,54,-2}, -{39,54,-1}, -{39,54,0}, -{39,54,1}, -{39,54,2}, -{39,54,3}, -{39,54,4}, -{39,54,5}, -{39,54,6}, -{39,54,7}, -{39,54,8}, -{39,54,9}, -{39,54,10}, -{39,54,11}, -{39,54,12}, -{39,54,13}, -{39,54,14}, -{39,54,15}, -{39,54,16}, -{39,54,17}, -{39,54,18}, -{39,54,19}, -{39,54,20}, -{39,54,21}, -{39,54,22}, -{39,54,23}, -{39,54,24}, -{39,54,25}, -{39,54,26}, -{39,54,27}, -{39,54,28}, -{39,54,29}, -{39,54,30}, -{39,54,31}, -{39,54,32}, -{39,54,33}, -{39,54,34}, -{39,54,35}, -{39,54,36}, -{39,54,37}, -{39,54,38}, -{39,54,39}, -{39,54,40}, -{39,54,41}, -{39,54,42}, -{39,54,43}, -{39,54,44}, -{39,54,45}, -{39,54,46}, -{39,54,47}, -{39,54,48}, -{39,54,49}, -{39,54,50}, -{39,54,51}, -{39,54,52}, -{39,55,-93}, -{39,55,-92}, -{39,55,-91}, -{39,55,-90}, -{39,55,-89}, -{39,55,-88}, -{39,55,-87}, -{39,55,-86}, -{39,55,-85}, -{39,55,-84}, -{39,55,-83}, -{39,55,-82}, -{39,55,-81}, -{39,55,-80}, -{39,55,-79}, -{39,55,-78}, -{39,55,-77}, -{39,55,-76}, -{39,55,-75}, -{39,55,-74}, -{39,55,-73}, -{39,55,-72}, -{39,55,-71}, -{39,55,-70}, -{39,55,-69}, -{39,55,-68}, -{39,55,-67}, -{39,55,-66}, -{39,55,-65}, -{39,55,-64}, -{39,55,-63}, -{39,55,-62}, -{39,55,-61}, -{39,55,-60}, -{39,55,-59}, -{39,55,-58}, -{39,55,-57}, -{39,55,-56}, -{39,55,-55}, -{39,55,-54}, -{39,55,-53}, -{39,55,-52}, -{39,55,-51}, -{39,55,-50}, -{39,55,-49}, -{39,55,-48}, -{39,55,-47}, -{39,55,-46}, -{39,55,-45}, -{39,55,-44}, -{39,55,-43}, -{39,55,-42}, -{39,55,-41}, -{39,55,-40}, -{39,55,-39}, -{39,55,-38}, -{39,55,-37}, -{39,55,-36}, -{39,55,-35}, -{39,55,-34}, -{39,55,-33}, -{39,55,-32}, -{39,55,-31}, -{39,55,-30}, -{39,55,-29}, -{39,55,-28}, -{39,55,-27}, -{39,55,-26}, -{39,55,-25}, -{39,55,-24}, -{39,55,-23}, -{39,55,-22}, -{39,55,-21}, -{39,55,-20}, -{39,55,-19}, -{39,55,-18}, -{39,55,-17}, -{39,55,-16}, -{39,55,-15}, -{39,55,-14}, -{39,55,-13}, -{39,55,-12}, -{39,55,-11}, -{39,55,-10}, -{39,55,-9}, -{39,55,-8}, -{39,55,-7}, -{39,55,-6}, -{39,55,-5}, -{39,55,-4}, -{39,55,-3}, -{39,55,-2}, -{39,55,-1}, -{39,55,0}, -{39,55,1}, -{39,55,2}, -{39,55,3}, -{39,55,4}, -{39,55,5}, -{39,55,6}, -{39,55,7}, -{39,55,8}, -{39,55,9}, -{39,55,10}, -{39,55,11}, -{39,55,12}, -{39,55,13}, -{39,55,14}, -{39,55,15}, -{39,55,16}, -{39,55,17}, -{39,55,18}, -{39,55,19}, -{39,55,20}, -{39,55,21}, -{39,55,22}, -{39,55,23}, -{39,55,24}, -{39,55,25}, -{39,55,26}, -{39,55,27}, -{39,55,28}, -{39,55,29}, -{39,55,30}, -{39,55,31}, -{39,55,32}, -{39,55,33}, -{39,55,34}, -{39,55,35}, -{39,55,36}, -{39,55,37}, -{39,55,38}, -{39,55,39}, -{39,55,40}, -{39,55,41}, -{39,55,42}, -{39,55,43}, -{39,55,44}, -{39,55,45}, -{39,55,46}, -{39,55,47}, -{39,55,48}, -{39,55,49}, -{39,55,50}, -{39,55,51}, -{39,55,52}, -{39,56,-94}, -{39,56,-93}, -{39,56,-92}, -{39,56,-91}, -{39,56,-90}, -{39,56,-89}, -{39,56,-88}, -{39,56,-87}, -{39,56,-86}, -{39,56,-85}, -{39,56,-84}, -{39,56,-83}, -{39,56,-82}, -{39,56,-81}, -{39,56,-80}, -{39,56,-79}, -{39,56,-78}, -{39,56,-77}, -{39,56,-76}, -{39,56,-75}, -{39,56,-74}, -{39,56,-73}, -{39,56,-72}, -{39,56,-71}, -{39,56,-70}, -{39,56,-69}, -{39,56,-68}, -{39,56,-67}, -{39,56,-66}, -{39,56,-65}, -{39,56,-64}, -{39,56,-63}, -{39,56,-62}, -{39,56,-61}, -{39,56,-60}, -{39,56,-59}, -{39,56,-58}, -{39,56,-57}, -{39,56,-56}, -{39,56,-55}, -{39,56,-54}, -{39,56,-53}, -{39,56,-52}, -{39,56,-51}, -{39,56,-50}, -{39,56,-49}, -{39,56,-48}, -{39,56,-47}, -{39,56,-46}, -{39,56,-45}, -{39,56,-44}, -{39,56,-43}, -{39,56,-42}, -{39,56,-41}, -{39,56,-40}, -{39,56,-39}, -{39,56,-38}, -{39,56,-37}, -{39,56,-36}, -{39,56,-35}, -{39,56,-34}, -{39,56,-33}, -{39,56,-32}, -{39,56,-31}, -{39,56,-30}, -{39,56,-29}, -{39,56,-28}, -{39,56,-27}, -{39,56,-26}, -{39,56,-25}, -{39,56,-24}, -{39,56,-23}, -{39,56,-22}, -{39,56,-21}, -{39,56,-20}, -{39,56,-19}, -{39,56,-18}, -{39,56,-17}, -{39,56,-16}, -{39,56,-15}, -{39,56,-14}, -{39,56,-13}, -{39,56,-12}, -{39,56,-11}, -{39,56,-10}, -{39,56,-9}, -{39,56,-8}, -{39,56,-7}, -{39,56,-6}, -{39,56,-5}, -{39,56,-4}, -{39,56,-3}, -{39,56,-2}, -{39,56,-1}, -{39,56,0}, -{39,56,1}, -{39,56,2}, -{39,56,3}, -{39,56,4}, -{39,56,5}, -{39,56,6}, -{39,56,7}, -{39,56,8}, -{39,56,9}, -{39,56,10}, -{39,56,11}, -{39,56,12}, -{39,56,13}, -{39,56,14}, -{39,56,15}, -{39,56,16}, -{39,56,17}, -{39,56,18}, -{39,56,19}, -{39,56,20}, -{39,56,21}, -{39,56,22}, -{39,56,23}, -{39,56,24}, -{39,56,25}, -{39,56,26}, -{39,56,27}, -{39,56,28}, -{39,56,29}, -{39,56,30}, -{39,56,31}, -{39,56,32}, -{39,56,33}, -{39,56,34}, -{39,56,35}, -{39,56,36}, -{39,56,37}, -{39,56,38}, -{39,56,39}, -{39,56,40}, -{39,56,41}, -{39,56,42}, -{39,56,43}, -{39,56,44}, -{39,56,45}, -{39,56,46}, -{39,56,47}, -{39,56,48}, -{39,56,49}, -{39,56,50}, -{39,56,51}, -{39,56,52}, -{39,57,-94}, -{39,57,-93}, -{39,57,-92}, -{39,57,-91}, -{39,57,-90}, -{39,57,-89}, -{39,57,-88}, -{39,57,-87}, -{39,57,-86}, -{39,57,-85}, -{39,57,-84}, -{39,57,-83}, -{39,57,-82}, -{39,57,-81}, -{39,57,-80}, -{39,57,-79}, -{39,57,-78}, -{39,57,-77}, -{39,57,-76}, -{39,57,-75}, -{39,57,-74}, -{39,57,-73}, -{39,57,-72}, -{39,57,-71}, -{39,57,-70}, -{39,57,-69}, -{39,57,-68}, -{39,57,-67}, -{39,57,-66}, -{39,57,-65}, -{39,57,-64}, -{39,57,-63}, -{39,57,-62}, -{39,57,-61}, -{39,57,-60}, -{39,57,-59}, -{39,57,-58}, -{39,57,-57}, -{39,57,-56}, -{39,57,-55}, -{39,57,-54}, -{39,57,-53}, -{39,57,-52}, -{39,57,-51}, -{39,57,-50}, -{39,57,-49}, -{39,57,-48}, -{39,57,-47}, -{39,57,-46}, -{39,57,-45}, -{39,57,-44}, -{39,57,-43}, -{39,57,-42}, -{39,57,-41}, -{39,57,-40}, -{39,57,-39}, -{39,57,-38}, -{39,57,-37}, -{39,57,-36}, -{39,57,-35}, -{39,57,-34}, -{39,57,-33}, -{39,57,-32}, -{39,57,-31}, -{39,57,-30}, -{39,57,-29}, -{39,57,-28}, -{39,57,-27}, -{39,57,-26}, -{39,57,-25}, -{39,57,-24}, -{39,57,-23}, -{39,57,-22}, -{39,57,-21}, -{39,57,-20}, -{39,57,-19}, -{39,57,-18}, -{39,57,-17}, -{39,57,-16}, -{39,57,-15}, -{39,57,-14}, -{39,57,-13}, -{39,57,-12}, -{39,57,-11}, -{39,57,-10}, -{39,57,-9}, -{39,57,-8}, -{39,57,-7}, -{39,57,-6}, -{39,57,-5}, -{39,57,-4}, -{39,57,-3}, -{39,57,-2}, -{39,57,-1}, -{39,57,0}, -{39,57,1}, -{39,57,2}, -{39,57,3}, -{39,57,4}, -{39,57,5}, -{39,57,6}, -{39,57,7}, -{39,57,8}, -{39,57,9}, -{39,57,10}, -{39,57,11}, -{39,57,12}, -{39,57,13}, -{39,57,14}, -{39,57,15}, -{39,57,16}, -{39,57,17}, -{39,57,18}, -{39,57,19}, -{39,57,20}, -{39,57,21}, -{39,57,22}, -{39,57,23}, -{39,57,24}, -{39,57,25}, -{39,57,26}, -{39,57,27}, -{39,57,28}, -{39,57,29}, -{39,57,30}, -{39,57,31}, -{39,57,32}, -{39,57,33}, -{39,57,34}, -{39,57,35}, -{39,57,36}, -{39,57,37}, -{39,57,38}, -{39,57,39}, -{39,57,40}, -{39,57,41}, -{39,57,42}, -{39,57,43}, -{39,57,44}, -{39,57,45}, -{39,57,46}, -{39,57,47}, -{39,57,48}, -{39,57,49}, -{39,57,50}, -{39,57,51}, -{39,57,52}, -{39,58,-95}, -{39,58,-94}, -{39,58,-93}, -{39,58,-92}, -{39,58,-91}, -{39,58,-90}, -{39,58,-89}, -{39,58,-88}, -{39,58,-87}, -{39,58,-86}, -{39,58,-85}, -{39,58,-84}, -{39,58,-83}, -{39,58,-82}, -{39,58,-81}, -{39,58,-80}, -{39,58,-79}, -{39,58,-78}, -{39,58,-77}, -{39,58,-76}, -{39,58,-75}, -{39,58,-74}, -{39,58,-73}, -{39,58,-72}, -{39,58,-71}, -{39,58,-70}, -{39,58,-69}, -{39,58,-68}, -{39,58,-67}, -{39,58,-66}, -{39,58,-65}, -{39,58,-64}, -{39,58,-63}, -{39,58,-62}, -{39,58,-61}, -{39,58,-60}, -{39,58,-59}, -{39,58,-58}, -{39,58,-57}, -{39,58,-56}, -{39,58,-55}, -{39,58,-54}, -{39,58,-53}, -{39,58,-52}, -{39,58,-51}, -{39,58,-50}, -{39,58,-49}, -{39,58,-48}, -{39,58,-47}, -{39,58,-46}, -{39,58,-45}, -{39,58,-44}, -{39,58,-43}, -{39,58,-42}, -{39,58,-41}, -{39,58,-40}, -{39,58,-39}, -{39,58,-38}, -{39,58,-37}, -{39,58,-36}, -{39,58,-35}, -{39,58,-34}, -{39,58,-33}, -{39,58,-32}, -{39,58,-31}, -{39,58,-30}, -{39,58,-29}, -{39,58,-28}, -{39,58,-27}, -{39,58,-26}, -{39,58,-25}, -{39,58,-24}, -{39,58,-23}, -{39,58,-22}, -{39,58,-21}, -{39,58,-20}, -{39,58,-19}, -{39,58,-18}, -{39,58,-17}, -{39,58,-16}, -{39,58,-15}, -{39,58,-14}, -{39,58,-13}, -{39,58,-12}, -{39,58,-11}, -{39,58,-10}, -{39,58,-9}, -{39,58,-8}, -{39,58,-7}, -{39,58,-6}, -{39,58,-5}, -{39,58,-4}, -{39,58,-3}, -{39,58,-2}, -{39,58,-1}, -{39,58,0}, -{39,58,1}, -{39,58,2}, -{39,58,3}, -{39,58,4}, -{39,58,5}, -{39,58,6}, -{39,58,7}, -{39,58,8}, -{39,58,9}, -{39,58,10}, -{39,58,11}, -{39,58,12}, -{39,58,13}, -{39,58,14}, -{39,58,15}, -{39,58,16}, -{39,58,17}, -{39,58,18}, -{39,58,19}, -{39,58,20}, -{39,58,21}, -{39,58,22}, -{39,58,23}, -{39,58,24}, -{39,58,25}, -{39,58,26}, -{39,58,27}, -{39,58,28}, -{39,58,29}, -{39,58,30}, -{39,58,31}, -{39,58,32}, -{39,58,33}, -{39,58,34}, -{39,58,35}, -{39,58,36}, -{39,58,37}, -{39,58,38}, -{39,58,39}, -{39,58,40}, -{39,58,41}, -{39,58,42}, -{39,58,43}, -{39,58,44}, -{39,58,45}, -{39,58,46}, -{39,58,47}, -{39,58,48}, -{39,58,49}, -{39,58,50}, -{39,58,51}, -{39,58,52}, -{39,59,-96}, -{39,59,-95}, -{39,59,-94}, -{39,59,-93}, -{39,59,-92}, -{39,59,-91}, -{39,59,-90}, -{39,59,-89}, -{39,59,-88}, -{39,59,-87}, -{39,59,-86}, -{39,59,-85}, -{39,59,-84}, -{39,59,-83}, -{39,59,-82}, -{39,59,-81}, -{39,59,-80}, -{39,59,-79}, -{39,59,-78}, -{39,59,-77}, -{39,59,-76}, -{39,59,-75}, -{39,59,-74}, -{39,59,-73}, -{39,59,-72}, -{39,59,-71}, -{39,59,-70}, -{39,59,-69}, -{39,59,-68}, -{39,59,-67}, -{39,59,-66}, -{39,59,-65}, -{39,59,-64}, -{39,59,-63}, -{39,59,-62}, -{39,59,-61}, -{39,59,-60}, -{39,59,-59}, -{39,59,-58}, -{39,59,-57}, -{39,59,-56}, -{39,59,-55}, -{39,59,-54}, -{39,59,-53}, -{39,59,-52}, -{39,59,-51}, -{39,59,-50}, -{39,59,-49}, -{39,59,-48}, -{39,59,-47}, -{39,59,-46}, -{39,59,-45}, -{39,59,-44}, -{39,59,-43}, -{39,59,-42}, -{39,59,-41}, -{39,59,-40}, -{39,59,-39}, -{39,59,-38}, -{39,59,-37}, -{39,59,-36}, -{39,59,-35}, -{39,59,-34}, -{39,59,-33}, -{39,59,-32}, -{39,59,-31}, -{39,59,-30}, -{39,59,-29}, -{39,59,-28}, -{39,59,-27}, -{39,59,-26}, -{39,59,-25}, -{39,59,-24}, -{39,59,-23}, -{39,59,-22}, -{39,59,-21}, -{39,59,-20}, -{39,59,-19}, -{39,59,-18}, -{39,59,-17}, -{39,59,-16}, -{39,59,-15}, -{39,59,-14}, -{39,59,-13}, -{39,59,-12}, -{39,59,-11}, -{39,59,-10}, -{39,59,-9}, -{39,59,-8}, -{39,59,-7}, -{39,59,-6}, -{39,59,-5}, -{39,59,-4}, -{39,59,-3}, -{39,59,-2}, -{39,59,-1}, -{39,59,0}, -{39,59,1}, -{39,59,2}, -{39,59,3}, -{39,59,4}, -{39,59,5}, -{39,59,6}, -{39,59,7}, -{39,59,8}, -{39,59,9}, -{39,59,10}, -{39,59,11}, -{39,59,12}, -{39,59,13}, -{39,59,14}, -{39,59,15}, -{39,59,16}, -{39,59,17}, -{39,59,18}, -{39,59,19}, -{39,59,20}, -{39,59,21}, -{39,59,22}, -{39,59,23}, -{39,59,24}, -{39,59,25}, -{39,59,26}, -{39,59,27}, -{39,59,28}, -{39,59,29}, -{39,59,30}, -{39,59,31}, -{39,59,32}, -{39,59,33}, -{39,59,34}, -{39,59,35}, -{39,59,36}, -{39,59,37}, -{39,59,38}, -{39,59,39}, -{39,59,40}, -{39,59,41}, -{39,59,42}, -{39,59,43}, -{39,59,44}, -{39,59,45}, -{39,59,46}, -{39,59,47}, -{39,59,48}, -{39,59,49}, -{39,59,50}, -{39,59,51}, -{39,59,52}, -{39,60,-96}, -{39,60,-95}, -{39,60,-94}, -{39,60,-93}, -{39,60,-92}, -{39,60,-91}, -{39,60,-90}, -{39,60,-89}, -{39,60,-88}, -{39,60,-87}, -{39,60,-86}, -{39,60,-85}, -{39,60,-84}, -{39,60,-83}, -{39,60,-82}, -{39,60,-81}, -{39,60,-80}, -{39,60,-79}, -{39,60,-78}, -{39,60,-77}, -{39,60,-76}, -{39,60,-75}, -{39,60,-74}, -{39,60,-73}, -{39,60,-72}, -{39,60,-71}, -{39,60,-70}, -{39,60,-69}, -{39,60,-68}, -{39,60,-67}, -{39,60,-66}, -{39,60,-65}, -{39,60,-64}, -{39,60,-63}, -{39,60,-62}, -{39,60,-61}, -{39,60,-60}, -{39,60,-59}, -{39,60,-58}, -{39,60,-57}, -{39,60,-56}, -{39,60,-55}, -{39,60,-54}, -{39,60,-53}, -{39,60,-52}, -{39,60,-51}, -{39,60,-50}, -{39,60,-49}, -{39,60,-48}, -{39,60,-47}, -{39,60,-46}, -{39,60,-45}, -{39,60,-44}, -{39,60,-43}, -{39,60,-42}, -{39,60,-41}, -{39,60,-40}, -{39,60,-39}, -{39,60,-38}, -{39,60,-37}, -{39,60,-36}, -{39,60,-35}, -{39,60,-34}, -{39,60,-33}, -{39,60,-32}, -{39,60,-31}, -{39,60,-30}, -{39,60,-29}, -{39,60,-28}, -{39,60,-27}, -{39,60,-26}, -{39,60,-25}, -{39,60,-24}, -{39,60,-23}, -{39,60,-22}, -{39,60,-21}, -{39,60,-20}, -{39,60,-19}, -{39,60,-18}, -{39,60,-17}, -{39,60,-16}, -{39,60,-15}, -{39,60,-14}, -{39,60,-13}, -{39,60,-12}, -{39,60,-11}, -{39,60,-10}, -{39,60,-9}, -{39,60,-8}, -{39,60,-7}, -{39,60,-6}, -{39,60,-5}, -{39,60,-4}, -{39,60,-3}, -{39,60,-2}, -{39,60,-1}, -{39,60,0}, -{39,60,1}, -{39,60,2}, -{39,60,3}, -{39,60,4}, -{39,60,5}, -{39,60,6}, -{39,60,7}, -{39,60,8}, -{39,60,9}, -{39,60,10}, -{39,60,11}, -{39,60,12}, -{39,60,13}, -{39,60,14}, -{39,60,15}, -{39,60,16}, -{39,60,17}, -{39,60,18}, -{39,60,19}, -{39,60,20}, -{39,60,21}, -{39,60,22}, -{39,60,23}, -{39,60,24}, -{39,60,25}, -{39,60,26}, -{39,60,27}, -{39,60,28}, -{39,60,29}, -{39,60,30}, -{39,60,31}, -{39,60,32}, -{39,60,33}, -{39,60,34}, -{39,60,35}, -{39,60,36}, -{39,60,37}, -{39,60,38}, -{39,60,39}, -{39,60,40}, -{39,60,41}, -{39,60,42}, -{39,60,43}, -{39,60,44}, -{39,60,45}, -{39,60,46}, -{39,60,47}, -{39,60,48}, -{39,60,49}, -{39,60,50}, -{39,60,51}, -{39,60,52}, -{39,60,53}, -{39,61,-96}, -{39,61,-95}, -{39,61,-94}, -{39,61,-93}, -{39,61,-92}, -{39,61,-91}, -{39,61,-90}, -{39,61,-89}, -{39,61,-88}, -{39,61,-87}, -{39,61,-86}, -{39,61,-85}, -{39,61,-84}, -{39,61,-83}, -{39,61,-82}, -{39,61,-81}, -{39,61,-80}, -{39,61,-79}, -{39,61,-78}, -{39,61,-77}, -{39,61,-76}, -{39,61,-75}, -{39,61,-74}, -{39,61,-73}, -{39,61,-72}, -{39,61,-71}, -{39,61,-70}, -{39,61,-69}, -{39,61,-68}, -{39,61,-67}, -{39,61,-66}, -{39,61,-65}, -{39,61,-64}, -{39,61,-63}, -{39,61,-62}, -{39,61,-61}, -{39,61,-60}, -{39,61,-59}, -{39,61,-58}, -{39,61,-57}, -{39,61,-56}, -{39,61,-55}, -{39,61,-54}, -{39,61,-53}, -{39,61,-52}, -{39,61,-51}, -{39,61,-50}, -{39,61,-49}, -{39,61,-48}, -{39,61,-47}, -{39,61,-46}, -{39,61,-45}, -{39,61,-44}, -{39,61,-43}, -{39,61,-42}, -{39,61,-41}, -{39,61,-40}, -{39,61,-39}, -{39,61,-38}, -{39,61,-37}, -{39,61,-36}, -{39,61,-35}, -{39,61,-34}, -{39,61,-33}, -{39,61,-32}, -{39,61,-31}, -{39,61,-30}, -{39,61,-29}, -{39,61,-28}, -{39,61,-27}, -{39,61,-26}, -{39,61,-25}, -{39,61,-24}, -{39,61,-23}, -{39,61,-22}, -{39,61,-21}, -{39,61,-20}, -{39,61,-19}, -{39,61,-18}, -{39,61,-17}, -{39,61,-16}, -{39,61,-15}, -{39,61,-14}, -{39,61,-13}, -{39,61,-12}, -{39,61,-11}, -{39,61,-10}, -{39,61,-9}, -{39,61,-8}, -{39,61,-7}, -{39,61,-6}, -{39,61,-5}, -{39,61,-4}, -{39,61,-3}, -{39,61,-2}, -{39,61,-1}, -{39,61,0}, -{39,61,1}, -{39,61,2}, -{39,61,3}, -{39,61,4}, -{39,61,5}, -{39,61,6}, -{39,61,7}, -{39,61,8}, -{39,61,9}, -{39,61,10}, -{39,61,11}, -{39,61,12}, -{39,61,13}, -{39,61,14}, -{39,61,15}, -{39,61,16}, -{39,61,17}, -{39,61,18}, -{39,61,19}, -{39,61,20}, -{39,61,21}, -{39,61,22}, -{39,61,23}, -{39,61,24}, -{39,61,25}, -{39,61,26}, -{39,61,27}, -{39,61,28}, -{39,61,29}, -{39,61,30}, -{39,61,31}, -{39,61,32}, -{39,61,33}, -{39,61,34}, -{39,61,35}, -{39,61,36}, -{39,61,37}, -{39,61,38}, -{39,61,39}, -{39,61,40}, -{39,61,41}, -{39,61,42}, -{39,61,43}, -{39,61,44}, -{39,61,45}, -{39,61,46}, -{39,61,47}, -{39,61,48}, -{39,61,49}, -{39,61,50}, -{39,61,51}, -{39,61,52}, -{39,61,53}, -{39,62,-96}, -{39,62,-95}, -{39,62,-94}, -{39,62,-93}, -{39,62,-92}, -{39,62,-91}, -{39,62,-90}, -{39,62,-89}, -{39,62,-88}, -{39,62,-87}, -{39,62,-86}, -{39,62,-85}, -{39,62,-84}, -{39,62,-83}, -{39,62,-82}, -{39,62,-81}, -{39,62,-80}, -{39,62,-79}, -{39,62,-78}, -{39,62,-77}, -{39,62,-76}, -{39,62,-75}, -{39,62,-74}, -{39,62,-73}, -{39,62,-72}, -{39,62,-71}, -{39,62,-70}, -{39,62,-69}, -{39,62,-68}, -{39,62,-67}, -{39,62,-66}, -{39,62,-65}, -{39,62,-64}, -{39,62,-63}, -{39,62,-62}, -{39,62,-61}, -{39,62,-60}, -{39,62,-59}, -{39,62,-58}, -{39,62,-57}, -{39,62,-56}, -{39,62,-55}, -{39,62,-54}, -{39,62,-53}, -{39,62,-52}, -{39,62,-51}, -{39,62,-50}, -{39,62,-49}, -{39,62,-48}, -{39,62,-47}, -{39,62,-46}, -{39,62,-45}, -{39,62,-44}, -{39,62,-43}, -{39,62,-42}, -{39,62,-41}, -{39,62,-40}, -{39,62,-39}, -{39,62,-38}, -{39,62,-37}, -{39,62,-36}, -{39,62,-35}, -{39,62,-34}, -{39,62,-33}, -{39,62,-32}, -{39,62,-31}, -{39,62,-30}, -{39,62,-29}, -{39,62,-28}, -{39,62,-27}, -{39,62,-26}, -{39,62,-25}, -{39,62,-24}, -{39,62,-23}, -{39,62,-22}, -{39,62,-21}, -{39,62,-20}, -{39,62,-19}, -{39,62,-18}, -{39,62,-17}, -{39,62,-16}, -{39,62,-15}, -{39,62,-14}, -{39,62,-13}, -{39,62,-12}, -{39,62,-11}, -{39,62,-10}, -{39,62,-9}, -{39,62,-8}, -{39,62,-7}, -{39,62,-6}, -{39,62,-5}, -{39,62,-4}, -{39,62,-3}, -{39,62,-2}, -{39,62,-1}, -{39,62,0}, -{39,62,1}, -{39,62,2}, -{39,62,3}, -{39,62,4}, -{39,62,5}, -{39,62,6}, -{39,62,7}, -{39,62,8}, -{39,62,9}, -{39,62,10}, -{39,62,11}, -{39,62,12}, -{39,62,13}, -{39,62,14}, -{39,62,15}, -{39,62,16}, -{39,62,17}, -{39,62,18}, -{39,62,19}, -{39,62,20}, -{39,62,21}, -{39,62,22}, -{39,62,23}, -{39,62,24}, -{39,62,25}, -{39,62,26}, -{39,62,27}, -{39,62,28}, -{39,62,29}, -{39,62,30}, -{39,62,31}, -{39,62,32}, -{39,62,33}, -{39,62,34}, -{39,62,35}, -{39,62,36}, -{39,62,37}, -{39,62,38}, -{39,62,39}, -{39,62,40}, -{39,62,41}, -{39,62,42}, -{39,62,43}, -{39,62,44}, -{39,62,45}, -{39,62,46}, -{39,62,47}, -{39,62,48}, -{39,62,49}, -{39,62,50}, -{39,62,51}, -{39,62,52}, -{39,62,53}, -{39,63,-96}, -{39,63,-95}, -{39,63,-94}, -{39,63,-93}, -{39,63,-92}, -{39,63,-91}, -{39,63,-90}, -{39,63,-89}, -{39,63,-88}, -{39,63,-87}, -{39,63,-86}, -{39,63,-85}, -{39,63,-84}, -{39,63,-83}, -{39,63,-82}, -{39,63,-81}, -{39,63,-80}, -{39,63,-79}, -{39,63,-78}, -{39,63,-77}, -{39,63,-76}, -{39,63,-75}, -{39,63,-74}, -{39,63,-73}, -{39,63,-72}, -{39,63,-71}, -{39,63,-70}, -{39,63,-69}, -{39,63,-68}, -{39,63,-67}, -{39,63,-66}, -{39,63,-65}, -{39,63,-64}, -{39,63,-63}, -{39,63,-62}, -{39,63,-61}, -{39,63,-60}, -{39,63,-59}, -{39,63,-58}, -{39,63,-57}, -{39,63,-56}, -{39,63,-55}, -{39,63,-54}, -{39,63,-53}, -{39,63,-52}, -{39,63,-51}, -{39,63,-50}, -{39,63,-49}, -{39,63,-48}, -{39,63,-47}, -{39,63,-46}, -{39,63,-45}, -{39,63,-44}, -{39,63,-43}, -{39,63,-42}, -{39,63,-41}, -{39,63,-40}, -{39,63,-39}, -{39,63,-38}, -{39,63,-37}, -{39,63,-36}, -{39,63,-35}, -{39,63,-34}, -{39,63,-33}, -{39,63,-32}, -{39,63,-31}, -{39,63,-30}, -{39,63,-29}, -{39,63,-28}, -{39,63,-27}, -{39,63,-26}, -{39,63,-25}, -{39,63,-24}, -{39,63,-23}, -{39,63,-22}, -{39,63,-21}, -{39,63,-20}, -{39,63,-19}, -{39,63,-18}, -{39,63,-17}, -{39,63,-16}, -{39,63,-15}, -{39,63,-14}, -{39,63,-13}, -{39,63,-12}, -{39,63,-11}, -{39,63,-10}, -{39,63,-9}, -{39,63,-8}, -{39,63,-7}, -{39,63,-6}, -{39,63,-5}, -{39,63,-4}, -{39,63,-3}, -{39,63,-2}, -{39,63,-1}, -{39,63,0}, -{39,63,1}, -{39,63,2}, -{39,63,3}, -{39,63,4}, -{39,63,5}, -{39,63,6}, -{39,63,7}, -{39,63,8}, -{39,63,9}, -{39,63,10}, -{39,63,11}, -{39,63,12}, -{39,63,13}, -{39,63,14}, -{39,63,15}, -{39,63,16}, -{39,63,17}, -{39,63,18}, -{39,63,19}, -{39,63,20}, -{39,63,21}, -{39,63,22}, -{39,63,23}, -{39,63,24}, -{39,63,25}, -{39,63,26}, -{39,63,27}, -{39,63,28}, -{39,63,29}, -{39,63,30}, -{39,63,31}, -{39,63,32}, -{39,63,33}, -{39,63,34}, -{39,63,35}, -{39,63,36}, -{39,63,37}, -{39,63,38}, -{39,63,39}, -{39,63,40}, -{39,63,41}, -{39,63,42}, -{39,63,43}, -{39,63,44}, -{39,63,45}, -{39,63,46}, -{39,63,47}, -{39,63,48}, -{39,63,49}, -{39,63,50}, -{39,63,51}, -{39,63,52}, -{39,63,53}, -{39,64,-96}, -{39,64,-95}, -{39,64,-94}, -{39,64,-93}, -{39,64,-92}, -{39,64,-91}, -{39,64,-90}, -{39,64,-89}, -{39,64,-88}, -{39,64,-87}, -{39,64,-86}, -{39,64,-85}, -{39,64,-84}, -{39,64,-83}, -{39,64,-82}, -{39,64,-81}, -{39,64,-80}, -{39,64,-79}, -{39,64,-78}, -{39,64,-77}, -{39,64,-76}, -{39,64,-75}, -{39,64,-74}, -{39,64,-73}, -{39,64,-72}, -{39,64,-71}, -{39,64,-70}, -{39,64,-69}, -{39,64,-68}, -{39,64,-67}, -{39,64,-66}, -{39,64,-65}, -{39,64,-64}, -{39,64,-63}, -{39,64,-62}, -{39,64,-61}, -{39,64,-60}, -{39,64,-59}, -{39,64,-58}, -{39,64,-57}, -{39,64,-56}, -{39,64,-55}, -{39,64,-54}, -{39,64,-53}, -{39,64,-52}, -{39,64,-51}, -{39,64,-50}, -{39,64,-49}, -{39,64,-48}, -{39,64,-47}, -{39,64,-46}, -{39,64,-45}, -{39,64,-44}, -{39,64,-43}, -{39,64,-42}, -{39,64,-41}, -{39,64,-40}, -{39,64,-39}, -{39,64,-38}, -{39,64,-37}, -{39,64,-36}, -{39,64,-35}, -{39,64,-34}, -{39,64,-33}, -{39,64,-32}, -{39,64,-31}, -{39,64,-30}, -{39,64,-29}, -{39,64,-28}, -{39,64,-27}, -{39,64,-26}, -{39,64,-25}, -{39,64,-24}, -{39,64,-23}, -{39,64,-22}, -{39,64,-21}, -{39,64,-20}, -{39,64,-19}, -{39,64,-18}, -{39,64,-17}, -{39,64,-16}, -{39,64,-15}, -{39,64,-14}, -{39,64,-13}, -{39,64,-12}, -{39,64,-11}, -{39,64,-10}, -{39,64,-9}, -{39,64,-8}, -{39,64,-7}, -{39,64,-6}, -{39,64,-5}, -{39,64,-4}, -{39,64,-3}, -{39,64,-2}, -{39,64,-1}, -{39,64,0}, -{39,64,1}, -{39,64,2}, -{39,64,3}, -{39,64,4}, -{39,64,5}, -{39,64,6}, -{39,64,7}, -{39,64,8}, -{39,64,9}, -{39,64,10}, -{39,64,11}, -{39,64,12}, -{39,64,13}, -{39,64,14}, -{39,64,15}, -{39,64,16}, -{39,64,17}, -{39,64,18}, -{39,64,19}, -{39,64,20}, -{39,64,21}, -{39,64,22}, -{39,64,23}, -{39,64,24}, -{39,64,25}, -{39,64,26}, -{39,64,27}, -{39,64,28}, -{39,64,29}, -{39,64,30}, -{39,64,31}, -{39,64,32}, -{39,64,33}, -{39,64,34}, -{39,64,35}, -{39,64,36}, -{39,64,37}, -{39,64,38}, -{39,64,39}, -{39,64,40}, -{39,64,41}, -{39,64,42}, -{39,64,43}, -{39,65,-96}, -{39,65,-95}, -{39,65,-94}, -{39,65,-93}, -{39,65,-92}, -{39,65,-91}, -{39,65,-90}, -{39,65,-89}, -{39,65,-88}, -{39,65,-87}, -{39,65,-86}, -{39,65,-85}, -{39,65,-84}, -{39,65,-83}, -{39,65,-82}, -{39,65,-81}, -{39,65,-80}, -{39,65,-79}, -{39,65,-78}, -{39,65,-77}, -{39,65,-76}, -{39,65,-75}, -{39,65,-74}, -{39,65,-73}, -{39,65,-72}, -{39,65,-71}, -{39,65,-70}, -{39,65,-69}, -{39,65,-68}, -{39,65,-67}, -{39,65,-66}, -{39,65,-65}, -{39,65,-64}, -{39,65,-63}, -{39,65,-62}, -{39,65,-61}, -{39,65,-60}, -{39,65,-59}, -{39,65,-58}, -{39,65,-57}, -{39,65,-56}, -{39,65,-55}, -{39,65,-54}, -{39,65,-53}, -{39,65,-52}, -{39,65,-51}, -{39,65,-50}, -{39,65,-49}, -{39,65,-48}, -{39,65,-47}, -{39,65,-46}, -{39,65,-45}, -{39,65,-44}, -{39,65,-43}, -{39,65,-42}, -{39,65,-41}, -{39,65,-40}, -{39,65,-39}, -{39,65,-38}, -{39,65,-37}, -{39,65,-36}, -{39,65,-35}, -{39,65,-34}, -{39,65,-33}, -{39,65,-32}, -{39,65,-31}, -{39,65,-30}, -{39,65,-29}, -{39,65,-28}, -{39,65,-27}, -{39,65,-26}, -{39,65,-25}, -{39,65,-24}, -{39,65,-23}, -{39,65,-22}, -{39,65,-21}, -{39,65,-20}, -{39,65,-19}, -{39,65,-18}, -{39,65,-17}, -{39,65,-16}, -{39,65,-15}, -{39,65,-14}, -{39,65,-13}, -{39,65,-12}, -{39,65,-11}, -{39,65,-10}, -{39,65,-9}, -{39,65,-8}, -{39,65,-7}, -{39,65,-6}, -{39,65,-5}, -{39,65,-4}, -{39,65,-3}, -{39,65,-2}, -{39,65,-1}, -{39,65,0}, -{39,65,1}, -{39,65,2}, -{39,65,3}, -{39,65,4}, -{39,65,5}, -{39,65,6}, -{39,65,7}, -{39,65,8}, -{39,65,9}, -{39,65,10}, -{39,65,11}, -{39,65,12}, -{39,65,13}, -{39,65,14}, -{39,65,15}, -{39,66,-96}, -{39,66,-95}, -{39,66,-94}, -{39,66,-93}, -{39,66,-92}, -{39,66,-91}, -{39,66,-90}, -{39,66,-89}, -{39,66,-88}, -{39,66,-87}, -{39,66,-86}, -{39,66,-85}, -{39,66,-84}, -{39,66,-83}, -{39,66,-82}, -{39,66,-81}, -{39,66,-80}, -{39,66,-79}, -{39,66,-78}, -{39,66,-77}, -{39,66,-76}, -{39,66,-75}, -{39,66,-74}, -{39,66,-73}, -{39,66,-72}, -{39,66,-71}, -{39,66,-70}, -{39,66,-69}, -{39,66,-68}, -{39,66,-67}, -{39,66,-66}, -{39,66,-65}, -{39,66,-64}, -{39,66,-63}, -{39,66,-62}, -{39,66,-61}, -{39,66,-60}, -{39,66,-59}, -{39,66,-58}, -{39,66,-57}, -{39,66,-56}, -{39,66,-55}, -{39,66,-54}, -{39,66,-53}, -{39,66,-52}, -{39,66,-51}, -{39,66,-50}, -{39,66,-49}, -{39,66,-48}, -{39,66,-47}, -{39,66,-46}, -{39,66,-45}, -{39,66,-44}, -{39,66,-43}, -{39,66,-42}, -{39,66,-41}, -{39,66,-40}, -{39,66,-39}, -{39,66,-38}, -{39,66,-37}, -{39,66,-36}, -{39,66,-35}, -{39,66,-34}, -{39,66,-33}, -{39,66,-32}, -{39,66,-31}, -{39,66,-30}, -{39,66,-29}, -{39,66,-28}, -{39,66,-27}, -{39,66,-26}, -{39,66,-25}, -{39,66,-24}, -{39,66,-23}, -{39,66,-22}, -{39,66,-21}, -{39,66,-20}, -{39,66,-19}, -{39,66,-18}, -{39,66,-17}, -{39,66,-16}, -{39,66,-15}, -{39,66,-14}, -{39,66,-13}, -{39,66,-12}, -{39,66,-11}, -{39,66,-10}, -{39,66,-9}, -{39,66,-8}, -{39,66,-7}, -{39,66,-6}, -{39,66,-5}, -{39,66,-4}, -{39,66,-3}, -{39,66,-2}, -{39,66,-1}, -{39,67,-96}, -{39,67,-95}, -{39,67,-94}, -{39,67,-93}, -{39,67,-92}, -{39,67,-91}, -{39,67,-90}, -{39,67,-89}, -{39,67,-88}, -{39,67,-87}, -{39,67,-86}, -{39,67,-85}, -{39,67,-84}, -{39,67,-83}, -{39,67,-82}, -{39,67,-81}, -{39,67,-80}, -{39,67,-79}, -{39,67,-78}, -{39,67,-77}, -{39,67,-76}, -{39,67,-75}, -{39,67,-74}, -{39,67,-73}, -{39,67,-72}, -{39,67,-71}, -{39,67,-70}, -{39,67,-69}, -{39,67,-68}, -{39,67,-67}, -{39,67,-66}, -{39,67,-65}, -{39,67,-64}, -{39,67,-63}, -{39,67,-62}, -{39,67,-61}, -{39,67,-60}, -{39,67,-59}, -{39,67,-58}, -{39,67,-57}, -{39,67,-56}, -{39,67,-55}, -{39,67,-54}, -{39,67,-53}, -{39,67,-52}, -{39,67,-51}, -{39,67,-50}, -{39,67,-49}, -{39,67,-48}, -{39,67,-47}, -{39,67,-46}, -{39,67,-45}, -{39,67,-44}, -{39,67,-43}, -{39,67,-42}, -{39,67,-41}, -{39,67,-40}, -{39,67,-39}, -{39,67,-38}, -{39,67,-37}, -{39,67,-36}, -{39,67,-35}, -{39,67,-34}, -{39,67,-33}, -{39,67,-32}, -{39,67,-31}, -{39,67,-30}, -{39,67,-29}, -{39,67,-28}, -{39,67,-27}, -{39,67,-26}, -{39,67,-25}, -{39,67,-24}, -{39,67,-23}, -{39,67,-22}, -{39,67,-21}, -{39,67,-20}, -{39,67,-19}, -{39,67,-18}, -{39,67,-17}, -{39,67,-16}, -{39,67,-15}, -{39,67,-14}, -{39,67,-13}, -{39,68,-96}, -{39,68,-95}, -{39,68,-94}, -{39,68,-93}, -{39,68,-92}, -{39,68,-91}, -{39,68,-90}, -{39,68,-89}, -{39,68,-88}, -{39,68,-87}, -{39,68,-86}, -{39,68,-85}, -{39,68,-84}, -{39,68,-83}, -{39,68,-82}, -{39,68,-81}, -{39,68,-80}, -{39,68,-79}, -{39,68,-78}, -{39,68,-77}, -{39,68,-76}, -{39,68,-75}, -{39,68,-74}, -{39,68,-73}, -{39,68,-72}, -{39,68,-71}, -{39,68,-70}, -{39,68,-69}, -{39,68,-68}, -{39,68,-67}, -{39,68,-66}, -{39,68,-65}, -{39,68,-64}, -{39,68,-63}, -{39,68,-62}, -{39,68,-61}, -{39,68,-60}, -{39,68,-59}, -{39,68,-58}, -{39,68,-57}, -{39,68,-56}, -{39,68,-55}, -{39,68,-54}, -{39,68,-53}, -{39,68,-52}, -{39,68,-51}, -{39,68,-50}, -{39,68,-49}, -{39,68,-48}, -{39,68,-47}, -{39,68,-46}, -{39,68,-45}, -{39,68,-44}, -{39,68,-43}, -{39,68,-42}, -{39,68,-41}, -{39,68,-40}, -{39,68,-39}, -{39,68,-38}, -{39,68,-37}, -{39,68,-36}, -{39,68,-35}, -{39,68,-34}, -{39,68,-33}, -{39,68,-32}, -{39,68,-31}, -{39,68,-30}, -{39,68,-29}, -{39,68,-28}, -{39,68,-27}, -{39,68,-26}, -{39,68,-25}, -{39,68,-24}, -{39,68,-23}, -{39,68,-22}, -{39,69,-96}, -{39,69,-95}, -{39,69,-94}, -{39,69,-93}, -{39,69,-92}, -{39,69,-91}, -{39,69,-90}, -{39,69,-89}, -{39,69,-88}, -{39,69,-87}, -{39,69,-86}, -{39,69,-85}, -{39,69,-84}, -{39,69,-83}, -{39,69,-82}, -{39,69,-81}, -{39,69,-80}, -{39,69,-79}, -{39,69,-78}, -{39,69,-77}, -{39,69,-76}, -{39,69,-75}, -{39,69,-74}, -{39,69,-73}, -{39,69,-72}, -{39,69,-71}, -{39,69,-70}, -{39,69,-69}, -{39,69,-68}, -{39,69,-67}, -{39,69,-66}, -{39,69,-65}, -{39,69,-64}, -{39,69,-63}, -{39,69,-62}, -{39,69,-61}, -{39,69,-60}, -{39,69,-59}, -{39,69,-58}, -{39,69,-57}, -{39,69,-56}, -{39,69,-55}, -{39,69,-54}, -{39,69,-53}, -{39,69,-52}, -{39,69,-51}, -{39,69,-50}, -{39,69,-49}, -{39,69,-48}, -{39,69,-47}, -{39,69,-46}, -{39,69,-45}, -{39,69,-44}, -{39,69,-43}, -{39,69,-42}, -{39,69,-41}, -{39,69,-40}, -{39,69,-39}, -{39,69,-38}, -{39,69,-37}, -{39,69,-36}, -{39,69,-35}, -{39,69,-34}, -{39,69,-33}, -{39,69,-32}, -{39,69,-31}, -{39,70,-96}, -{39,70,-95}, -{39,70,-94}, -{39,70,-93}, -{39,70,-92}, -{39,70,-91}, -{39,70,-90}, -{39,70,-89}, -{39,70,-88}, -{39,70,-87}, -{39,70,-86}, -{39,70,-85}, -{39,70,-84}, -{39,70,-83}, -{39,70,-82}, -{39,70,-81}, -{39,70,-80}, -{39,70,-79}, -{39,70,-78}, -{39,70,-77}, -{39,70,-76}, -{39,70,-75}, -{39,70,-74}, -{39,70,-73}, -{39,70,-72}, -{39,70,-71}, -{39,70,-70}, -{39,70,-69}, -{39,70,-68}, -{39,70,-67}, -{39,70,-66}, -{39,70,-65}, -{39,70,-64}, -{39,70,-63}, -{39,70,-62}, -{39,70,-61}, -{39,70,-60}, -{39,70,-59}, -{39,70,-58}, -{39,70,-57}, -{39,70,-56}, -{39,70,-55}, -{39,70,-54}, -{39,70,-53}, -{39,70,-52}, -{39,70,-51}, -{39,70,-50}, -{39,70,-49}, -{39,70,-48}, -{39,70,-47}, -{39,70,-46}, -{39,70,-45}, -{39,70,-44}, -{39,70,-43}, -{39,70,-42}, -{39,70,-41}, -{39,70,-40}, -{39,70,-39}, -{39,70,-38}, -{39,71,-96}, -{39,71,-95}, -{39,71,-94}, -{39,71,-93}, -{39,71,-92}, -{39,71,-91}, -{39,71,-90}, -{39,71,-89}, -{39,71,-88}, -{39,71,-87}, -{39,71,-86}, -{39,71,-85}, -{39,71,-84}, -{39,71,-83}, -{39,71,-82}, -{39,71,-81}, -{39,71,-80}, -{39,71,-79}, -{39,71,-78}, -{39,71,-77}, -{39,71,-76}, -{39,71,-75}, -{39,71,-74}, -{39,71,-73}, -{39,71,-72}, -{39,71,-71}, -{39,71,-70}, -{39,71,-69}, -{39,71,-68}, -{39,71,-67}, -{39,71,-66}, -{39,71,-65}, -{39,71,-64}, -{39,71,-63}, -{39,71,-62}, -{39,71,-61}, -{39,71,-60}, -{39,71,-59}, -{39,71,-58}, -{39,71,-57}, -{39,71,-56}, -{39,71,-55}, -{39,71,-54}, -{39,71,-53}, -{39,71,-52}, -{39,71,-51}, -{39,71,-50}, -{39,71,-49}, -{39,71,-48}, -{39,71,-47}, -{39,71,-46}, -{39,71,-45}, -{39,72,-96}, -{39,72,-95}, -{39,72,-94}, -{39,72,-93}, -{39,72,-92}, -{39,72,-91}, -{39,72,-90}, -{39,72,-89}, -{39,72,-88}, -{39,72,-87}, -{39,72,-86}, -{39,72,-85}, -{39,72,-84}, -{39,72,-83}, -{39,72,-82}, -{39,72,-81}, -{39,72,-80}, -{39,72,-79}, -{39,72,-78}, -{39,72,-77}, -{39,72,-76}, -{39,72,-75}, -{39,72,-74}, -{39,72,-73}, -{39,72,-72}, -{39,72,-71}, -{39,72,-70}, -{39,72,-69}, -{39,72,-68}, -{39,72,-67}, -{39,72,-66}, -{39,72,-65}, -{39,72,-64}, -{39,72,-63}, -{39,72,-62}, -{39,72,-61}, -{39,72,-60}, -{39,72,-59}, -{39,72,-58}, -{39,72,-57}, -{39,72,-56}, -{39,72,-55}, -{39,72,-54}, -{39,72,-53}, -{39,72,-52}, -{39,72,-51}, -{39,73,-96}, -{39,73,-95}, -{39,73,-94}, -{39,73,-93}, -{39,73,-92}, -{39,73,-91}, -{39,73,-90}, -{39,73,-89}, -{39,73,-88}, -{39,73,-87}, -{39,73,-86}, -{39,73,-85}, -{39,73,-84}, -{39,73,-83}, -{39,73,-82}, -{39,73,-81}, -{39,73,-80}, -{39,73,-79}, -{39,73,-78}, -{39,73,-77}, -{39,73,-76}, -{39,73,-75}, -{39,73,-74}, -{39,73,-73}, -{39,73,-72}, -{39,73,-71}, -{39,73,-70}, -{39,73,-69}, -{39,73,-68}, -{39,73,-67}, -{39,73,-66}, -{39,73,-65}, -{39,73,-64}, -{39,73,-63}, -{39,73,-62}, -{39,73,-61}, -{39,73,-60}, -{39,73,-59}, -{39,73,-58}, -{39,73,-57}, -{39,74,-96}, -{39,74,-95}, -{39,74,-94}, -{39,74,-93}, -{39,74,-92}, -{39,74,-91}, -{39,74,-90}, -{39,74,-89}, -{39,74,-88}, -{39,74,-87}, -{39,74,-86}, -{39,74,-85}, -{39,74,-84}, -{39,74,-83}, -{39,74,-82}, -{39,74,-81}, -{39,74,-80}, -{39,74,-79}, -{39,74,-78}, -{39,74,-77}, -{39,74,-76}, -{39,74,-75}, -{39,74,-74}, -{39,74,-73}, -{39,74,-72}, -{39,74,-71}, -{39,74,-70}, -{39,74,-69}, -{39,74,-68}, -{39,74,-67}, -{39,74,-66}, -{39,74,-65}, -{39,74,-64}, -{39,74,-63}, -{39,74,-62}, -{39,75,-96}, -{39,75,-95}, -{39,75,-94}, -{39,75,-93}, -{39,75,-92}, -{39,75,-91}, -{39,75,-90}, -{39,75,-89}, -{39,75,-88}, -{39,75,-87}, -{39,75,-86}, -{39,75,-85}, -{39,75,-84}, -{39,75,-83}, -{39,75,-82}, -{39,75,-81}, -{39,75,-80}, -{39,75,-79}, -{39,75,-78}, -{39,75,-77}, -{39,75,-76}, -{39,75,-75}, -{39,75,-74}, -{39,75,-73}, -{39,75,-72}, -{39,75,-71}, -{39,75,-70}, -{39,75,-69}, -{39,75,-68}, -{39,75,-67}, -{39,76,-96}, -{39,76,-95}, -{39,76,-94}, -{39,76,-93}, -{39,76,-92}, -{39,76,-91}, -{39,76,-90}, -{39,76,-89}, -{39,76,-88}, -{39,76,-87}, -{39,76,-86}, -{39,76,-85}, -{39,76,-84}, -{39,76,-83}, -{39,76,-82}, -{39,76,-81}, -{39,76,-80}, -{39,76,-79}, -{39,76,-78}, -{39,76,-77}, -{39,76,-76}, -{39,76,-75}, -{39,76,-74}, -{39,76,-73}, -{39,76,-72}, -{39,77,-96}, -{39,77,-95}, -{39,77,-94}, -{39,77,-93}, -{39,77,-92}, -{39,77,-91}, -{39,77,-90}, -{39,77,-89}, -{39,77,-88}, -{39,77,-87}, -{39,77,-86}, -{39,77,-85}, -{39,77,-84}, -{39,77,-83}, -{39,77,-82}, -{39,77,-81}, -{39,77,-80}, -{39,77,-79}, -{39,77,-78}, -{39,77,-77}, -{39,77,-76}, -{39,78,-96}, -{39,78,-95}, -{39,78,-94}, -{39,78,-93}, -{39,78,-92}, -{39,78,-91}, -{39,78,-90}, -{39,78,-89}, -{39,78,-88}, -{39,78,-87}, -{39,78,-86}, -{39,78,-85}, -{39,78,-84}, -{39,78,-83}, -{39,78,-82}, -{39,78,-81}, -{39,79,-96}, -{39,79,-95}, -{39,79,-94}, -{39,79,-93}, -{39,79,-92}, -{39,79,-91}, -{39,79,-90}, -{39,79,-89}, -{39,79,-88}, -{39,79,-87}, -{39,79,-86}, -{39,79,-85}, -{39,80,-96}, -{39,80,-95}, -{39,80,-94}, -{39,80,-93}, -{39,80,-92}, -{39,80,-91}, -{39,80,-90}, -{39,80,-89}, -{39,81,-96}, -{39,81,-95}, -{39,81,-94}, -{39,81,-93}, -{39,82,-96}, -{40,-46,42}, -{40,-46,43}, -{40,-46,44}, -{40,-46,45}, -{40,-45,38}, -{40,-45,39}, -{40,-45,40}, -{40,-45,41}, -{40,-45,42}, -{40,-45,43}, -{40,-45,44}, -{40,-45,45}, -{40,-44,34}, -{40,-44,35}, -{40,-44,36}, -{40,-44,37}, -{40,-44,38}, -{40,-44,39}, -{40,-44,40}, -{40,-44,41}, -{40,-44,42}, -{40,-44,43}, -{40,-44,44}, -{40,-44,45}, -{40,-43,31}, -{40,-43,32}, -{40,-43,33}, -{40,-43,34}, -{40,-43,35}, -{40,-43,36}, -{40,-43,37}, -{40,-43,38}, -{40,-43,39}, -{40,-43,40}, -{40,-43,41}, -{40,-43,42}, -{40,-43,43}, -{40,-43,44}, -{40,-43,45}, -{40,-42,27}, -{40,-42,28}, -{40,-42,29}, -{40,-42,30}, -{40,-42,31}, -{40,-42,32}, -{40,-42,33}, -{40,-42,34}, -{40,-42,35}, -{40,-42,36}, -{40,-42,37}, -{40,-42,38}, -{40,-42,39}, -{40,-42,40}, -{40,-42,41}, -{40,-42,42}, -{40,-42,43}, -{40,-42,44}, -{40,-42,45}, -{40,-41,25}, -{40,-41,26}, -{40,-41,27}, -{40,-41,28}, -{40,-41,29}, -{40,-41,30}, -{40,-41,31}, -{40,-41,32}, -{40,-41,33}, -{40,-41,34}, -{40,-41,35}, -{40,-41,36}, -{40,-41,37}, -{40,-41,38}, -{40,-41,39}, -{40,-41,40}, -{40,-41,41}, -{40,-41,42}, -{40,-41,43}, -{40,-41,44}, -{40,-41,45}, -{40,-40,22}, -{40,-40,23}, -{40,-40,24}, -{40,-40,25}, -{40,-40,26}, -{40,-40,27}, -{40,-40,28}, -{40,-40,29}, -{40,-40,30}, -{40,-40,31}, -{40,-40,32}, -{40,-40,33}, -{40,-40,34}, -{40,-40,35}, -{40,-40,36}, -{40,-40,37}, -{40,-40,38}, -{40,-40,39}, -{40,-40,40}, -{40,-40,41}, -{40,-40,42}, -{40,-40,43}, -{40,-40,44}, -{40,-40,45}, -{40,-39,19}, -{40,-39,20}, -{40,-39,21}, -{40,-39,22}, -{40,-39,23}, -{40,-39,24}, -{40,-39,25}, -{40,-39,26}, -{40,-39,27}, -{40,-39,28}, -{40,-39,29}, -{40,-39,30}, -{40,-39,31}, -{40,-39,32}, -{40,-39,33}, -{40,-39,34}, -{40,-39,35}, -{40,-39,36}, -{40,-39,37}, -{40,-39,38}, -{40,-39,39}, -{40,-39,40}, -{40,-39,41}, -{40,-39,42}, -{40,-39,43}, -{40,-39,44}, -{40,-39,45}, -{40,-38,17}, -{40,-38,18}, -{40,-38,19}, -{40,-38,20}, -{40,-38,21}, -{40,-38,22}, -{40,-38,23}, -{40,-38,24}, -{40,-38,25}, -{40,-38,26}, -{40,-38,27}, -{40,-38,28}, -{40,-38,29}, -{40,-38,30}, -{40,-38,31}, -{40,-38,32}, -{40,-38,33}, -{40,-38,34}, -{40,-38,35}, -{40,-38,36}, -{40,-38,37}, -{40,-38,38}, -{40,-38,39}, -{40,-38,40}, -{40,-38,41}, -{40,-38,42}, -{40,-38,43}, -{40,-38,44}, -{40,-38,45}, -{40,-37,15}, -{40,-37,16}, -{40,-37,17}, -{40,-37,18}, -{40,-37,19}, -{40,-37,20}, -{40,-37,21}, -{40,-37,22}, -{40,-37,23}, -{40,-37,24}, -{40,-37,25}, -{40,-37,26}, -{40,-37,27}, -{40,-37,28}, -{40,-37,29}, -{40,-37,30}, -{40,-37,31}, -{40,-37,32}, -{40,-37,33}, -{40,-37,34}, -{40,-37,35}, -{40,-37,36}, -{40,-37,37}, -{40,-37,38}, -{40,-37,39}, -{40,-37,40}, -{40,-37,41}, -{40,-37,42}, -{40,-37,43}, -{40,-37,44}, -{40,-37,45}, -{40,-36,12}, -{40,-36,13}, -{40,-36,14}, -{40,-36,15}, -{40,-36,16}, -{40,-36,17}, -{40,-36,18}, -{40,-36,19}, -{40,-36,20}, -{40,-36,21}, -{40,-36,22}, -{40,-36,23}, -{40,-36,24}, -{40,-36,25}, -{40,-36,26}, -{40,-36,27}, -{40,-36,28}, -{40,-36,29}, -{40,-36,30}, -{40,-36,31}, -{40,-36,32}, -{40,-36,33}, -{40,-36,34}, -{40,-36,35}, -{40,-36,36}, -{40,-36,37}, -{40,-36,38}, -{40,-36,39}, -{40,-36,40}, -{40,-36,41}, -{40,-36,42}, -{40,-36,43}, -{40,-36,44}, -{40,-36,45}, -{40,-35,10}, -{40,-35,11}, -{40,-35,12}, -{40,-35,13}, -{40,-35,14}, -{40,-35,15}, -{40,-35,16}, -{40,-35,17}, -{40,-35,18}, -{40,-35,19}, -{40,-35,20}, -{40,-35,21}, -{40,-35,22}, -{40,-35,23}, -{40,-35,24}, -{40,-35,25}, -{40,-35,26}, -{40,-35,27}, -{40,-35,28}, -{40,-35,29}, -{40,-35,30}, -{40,-35,31}, -{40,-35,32}, -{40,-35,33}, -{40,-35,34}, -{40,-35,35}, -{40,-35,36}, -{40,-35,37}, -{40,-35,38}, -{40,-35,39}, -{40,-35,40}, -{40,-35,41}, -{40,-35,42}, -{40,-35,43}, -{40,-35,44}, -{40,-35,45}, -{40,-34,8}, -{40,-34,9}, -{40,-34,10}, -{40,-34,11}, -{40,-34,12}, -{40,-34,13}, -{40,-34,14}, -{40,-34,15}, -{40,-34,16}, -{40,-34,17}, -{40,-34,18}, -{40,-34,19}, -{40,-34,20}, -{40,-34,21}, -{40,-34,22}, -{40,-34,23}, -{40,-34,24}, -{40,-34,25}, -{40,-34,26}, -{40,-34,27}, -{40,-34,28}, -{40,-34,29}, -{40,-34,30}, -{40,-34,31}, -{40,-34,32}, -{40,-34,33}, -{40,-34,34}, -{40,-34,35}, -{40,-34,36}, -{40,-34,37}, -{40,-34,38}, -{40,-34,39}, -{40,-34,40}, -{40,-34,41}, -{40,-34,42}, -{40,-34,43}, -{40,-34,44}, -{40,-34,45}, -{40,-33,6}, -{40,-33,7}, -{40,-33,8}, -{40,-33,9}, -{40,-33,10}, -{40,-33,11}, -{40,-33,12}, -{40,-33,13}, -{40,-33,14}, -{40,-33,15}, -{40,-33,16}, -{40,-33,17}, -{40,-33,18}, -{40,-33,19}, -{40,-33,20}, -{40,-33,21}, -{40,-33,22}, -{40,-33,23}, -{40,-33,24}, -{40,-33,25}, -{40,-33,26}, -{40,-33,27}, -{40,-33,28}, -{40,-33,29}, -{40,-33,30}, -{40,-33,31}, -{40,-33,32}, -{40,-33,33}, -{40,-33,34}, -{40,-33,35}, -{40,-33,36}, -{40,-33,37}, -{40,-33,38}, -{40,-33,39}, -{40,-33,40}, -{40,-33,41}, -{40,-33,42}, -{40,-33,43}, -{40,-33,44}, -{40,-33,45}, -{40,-32,5}, -{40,-32,6}, -{40,-32,7}, -{40,-32,8}, -{40,-32,9}, -{40,-32,10}, -{40,-32,11}, -{40,-32,12}, -{40,-32,13}, -{40,-32,14}, -{40,-32,15}, -{40,-32,16}, -{40,-32,17}, -{40,-32,18}, -{40,-32,19}, -{40,-32,20}, -{40,-32,21}, -{40,-32,22}, -{40,-32,23}, -{40,-32,24}, -{40,-32,25}, -{40,-32,26}, -{40,-32,27}, -{40,-32,28}, -{40,-32,29}, -{40,-32,30}, -{40,-32,31}, -{40,-32,32}, -{40,-32,33}, -{40,-32,34}, -{40,-32,35}, -{40,-32,36}, -{40,-32,37}, -{40,-32,38}, -{40,-32,39}, -{40,-32,40}, -{40,-32,41}, -{40,-32,42}, -{40,-32,43}, -{40,-32,44}, -{40,-32,45}, -{40,-31,3}, -{40,-31,4}, -{40,-31,5}, -{40,-31,6}, -{40,-31,7}, -{40,-31,8}, -{40,-31,9}, -{40,-31,10}, -{40,-31,11}, -{40,-31,12}, -{40,-31,13}, -{40,-31,14}, -{40,-31,15}, -{40,-31,16}, -{40,-31,17}, -{40,-31,18}, -{40,-31,19}, -{40,-31,20}, -{40,-31,21}, -{40,-31,22}, -{40,-31,23}, -{40,-31,24}, -{40,-31,25}, -{40,-31,26}, -{40,-31,27}, -{40,-31,28}, -{40,-31,29}, -{40,-31,30}, -{40,-31,31}, -{40,-31,32}, -{40,-31,33}, -{40,-31,34}, -{40,-31,35}, -{40,-31,36}, -{40,-31,37}, -{40,-31,38}, -{40,-31,39}, -{40,-31,40}, -{40,-31,41}, -{40,-31,42}, -{40,-31,43}, -{40,-31,44}, -{40,-31,45}, -{40,-30,1}, -{40,-30,2}, -{40,-30,3}, -{40,-30,4}, -{40,-30,5}, -{40,-30,6}, -{40,-30,7}, -{40,-30,8}, -{40,-30,9}, -{40,-30,10}, -{40,-30,11}, -{40,-30,12}, -{40,-30,13}, -{40,-30,14}, -{40,-30,15}, -{40,-30,16}, -{40,-30,17}, -{40,-30,18}, -{40,-30,19}, -{40,-30,20}, -{40,-30,21}, -{40,-30,22}, -{40,-30,23}, -{40,-30,24}, -{40,-30,25}, -{40,-30,26}, -{40,-30,27}, -{40,-30,28}, -{40,-30,29}, -{40,-30,30}, -{40,-30,31}, -{40,-30,32}, -{40,-30,33}, -{40,-30,34}, -{40,-30,35}, -{40,-30,36}, -{40,-30,37}, -{40,-30,38}, -{40,-30,39}, -{40,-30,40}, -{40,-30,41}, -{40,-30,42}, -{40,-30,43}, -{40,-30,44}, -{40,-30,45}, -{40,-29,-1}, -{40,-29,0}, -{40,-29,1}, -{40,-29,2}, -{40,-29,3}, -{40,-29,4}, -{40,-29,5}, -{40,-29,6}, -{40,-29,7}, -{40,-29,8}, -{40,-29,9}, -{40,-29,10}, -{40,-29,11}, -{40,-29,12}, -{40,-29,13}, -{40,-29,14}, -{40,-29,15}, -{40,-29,16}, -{40,-29,17}, -{40,-29,18}, -{40,-29,19}, -{40,-29,20}, -{40,-29,21}, -{40,-29,22}, -{40,-29,23}, -{40,-29,24}, -{40,-29,25}, -{40,-29,26}, -{40,-29,27}, -{40,-29,28}, -{40,-29,29}, -{40,-29,30}, -{40,-29,31}, -{40,-29,32}, -{40,-29,33}, -{40,-29,34}, -{40,-29,35}, -{40,-29,36}, -{40,-29,37}, -{40,-29,38}, -{40,-29,39}, -{40,-29,40}, -{40,-29,41}, -{40,-29,42}, -{40,-29,43}, -{40,-29,44}, -{40,-29,45}, -{40,-28,-3}, -{40,-28,-2}, -{40,-28,-1}, -{40,-28,0}, -{40,-28,1}, -{40,-28,2}, -{40,-28,3}, -{40,-28,4}, -{40,-28,5}, -{40,-28,6}, -{40,-28,7}, -{40,-28,8}, -{40,-28,9}, -{40,-28,10}, -{40,-28,11}, -{40,-28,12}, -{40,-28,13}, -{40,-28,14}, -{40,-28,15}, -{40,-28,16}, -{40,-28,17}, -{40,-28,18}, -{40,-28,19}, -{40,-28,20}, -{40,-28,21}, -{40,-28,22}, -{40,-28,23}, -{40,-28,24}, -{40,-28,25}, -{40,-28,26}, -{40,-28,27}, -{40,-28,28}, -{40,-28,29}, -{40,-28,30}, -{40,-28,31}, -{40,-28,32}, -{40,-28,33}, -{40,-28,34}, -{40,-28,35}, -{40,-28,36}, -{40,-28,37}, -{40,-28,38}, -{40,-28,39}, -{40,-28,40}, -{40,-28,41}, -{40,-28,42}, -{40,-28,43}, -{40,-28,44}, -{40,-28,45}, -{40,-27,-4}, -{40,-27,-3}, -{40,-27,-2}, -{40,-27,-1}, -{40,-27,0}, -{40,-27,1}, -{40,-27,2}, -{40,-27,3}, -{40,-27,4}, -{40,-27,5}, -{40,-27,6}, -{40,-27,7}, -{40,-27,8}, -{40,-27,9}, -{40,-27,10}, -{40,-27,11}, -{40,-27,12}, -{40,-27,13}, -{40,-27,14}, -{40,-27,15}, -{40,-27,16}, -{40,-27,17}, -{40,-27,18}, -{40,-27,19}, -{40,-27,20}, -{40,-27,21}, -{40,-27,22}, -{40,-27,23}, -{40,-27,24}, -{40,-27,25}, -{40,-27,26}, -{40,-27,27}, -{40,-27,28}, -{40,-27,29}, -{40,-27,30}, -{40,-27,31}, -{40,-27,32}, -{40,-27,33}, -{40,-27,34}, -{40,-27,35}, -{40,-27,36}, -{40,-27,37}, -{40,-27,38}, -{40,-27,39}, -{40,-27,40}, -{40,-27,41}, -{40,-27,42}, -{40,-27,43}, -{40,-27,44}, -{40,-27,45}, -{40,-27,46}, -{40,-26,-6}, -{40,-26,-5}, -{40,-26,-4}, -{40,-26,-3}, -{40,-26,-2}, -{40,-26,-1}, -{40,-26,0}, -{40,-26,1}, -{40,-26,2}, -{40,-26,3}, -{40,-26,4}, -{40,-26,5}, -{40,-26,6}, -{40,-26,7}, -{40,-26,8}, -{40,-26,9}, -{40,-26,10}, -{40,-26,11}, -{40,-26,12}, -{40,-26,13}, -{40,-26,14}, -{40,-26,15}, -{40,-26,16}, -{40,-26,17}, -{40,-26,18}, -{40,-26,19}, -{40,-26,20}, -{40,-26,21}, -{40,-26,22}, -{40,-26,23}, -{40,-26,24}, -{40,-26,25}, -{40,-26,26}, -{40,-26,27}, -{40,-26,28}, -{40,-26,29}, -{40,-26,30}, -{40,-26,31}, -{40,-26,32}, -{40,-26,33}, -{40,-26,34}, -{40,-26,35}, -{40,-26,36}, -{40,-26,37}, -{40,-26,38}, -{40,-26,39}, -{40,-26,40}, -{40,-26,41}, -{40,-26,42}, -{40,-26,43}, -{40,-26,44}, -{40,-26,45}, -{40,-26,46}, -{40,-25,-7}, -{40,-25,-6}, -{40,-25,-5}, -{40,-25,-4}, -{40,-25,-3}, -{40,-25,-2}, -{40,-25,-1}, -{40,-25,0}, -{40,-25,1}, -{40,-25,2}, -{40,-25,3}, -{40,-25,4}, -{40,-25,5}, -{40,-25,6}, -{40,-25,7}, -{40,-25,8}, -{40,-25,9}, -{40,-25,10}, -{40,-25,11}, -{40,-25,12}, -{40,-25,13}, -{40,-25,14}, -{40,-25,15}, -{40,-25,16}, -{40,-25,17}, -{40,-25,18}, -{40,-25,19}, -{40,-25,20}, -{40,-25,21}, -{40,-25,22}, -{40,-25,23}, -{40,-25,24}, -{40,-25,25}, -{40,-25,26}, -{40,-25,27}, -{40,-25,28}, -{40,-25,29}, -{40,-25,30}, -{40,-25,31}, -{40,-25,32}, -{40,-25,33}, -{40,-25,34}, -{40,-25,35}, -{40,-25,36}, -{40,-25,37}, -{40,-25,38}, -{40,-25,39}, -{40,-25,40}, -{40,-25,41}, -{40,-25,42}, -{40,-25,43}, -{40,-25,44}, -{40,-25,45}, -{40,-25,46}, -{40,-24,-9}, -{40,-24,-8}, -{40,-24,-7}, -{40,-24,-6}, -{40,-24,-5}, -{40,-24,-4}, -{40,-24,-3}, -{40,-24,-2}, -{40,-24,-1}, -{40,-24,0}, -{40,-24,1}, -{40,-24,2}, -{40,-24,3}, -{40,-24,4}, -{40,-24,5}, -{40,-24,6}, -{40,-24,7}, -{40,-24,8}, -{40,-24,9}, -{40,-24,10}, -{40,-24,11}, -{40,-24,12}, -{40,-24,13}, -{40,-24,14}, -{40,-24,15}, -{40,-24,16}, -{40,-24,17}, -{40,-24,18}, -{40,-24,19}, -{40,-24,20}, -{40,-24,21}, -{40,-24,22}, -{40,-24,23}, -{40,-24,24}, -{40,-24,25}, -{40,-24,26}, -{40,-24,27}, -{40,-24,28}, -{40,-24,29}, -{40,-24,30}, -{40,-24,31}, -{40,-24,32}, -{40,-24,33}, -{40,-24,34}, -{40,-24,35}, -{40,-24,36}, -{40,-24,37}, -{40,-24,38}, -{40,-24,39}, -{40,-24,40}, -{40,-24,41}, -{40,-24,42}, -{40,-24,43}, -{40,-24,44}, -{40,-24,45}, -{40,-24,46}, -{40,-23,-10}, -{40,-23,-9}, -{40,-23,-8}, -{40,-23,-7}, -{40,-23,-6}, -{40,-23,-5}, -{40,-23,-4}, -{40,-23,-3}, -{40,-23,-2}, -{40,-23,-1}, -{40,-23,0}, -{40,-23,1}, -{40,-23,2}, -{40,-23,3}, -{40,-23,4}, -{40,-23,5}, -{40,-23,6}, -{40,-23,7}, -{40,-23,8}, -{40,-23,9}, -{40,-23,10}, -{40,-23,11}, -{40,-23,12}, -{40,-23,13}, -{40,-23,14}, -{40,-23,15}, -{40,-23,16}, -{40,-23,17}, -{40,-23,18}, -{40,-23,19}, -{40,-23,20}, -{40,-23,21}, -{40,-23,22}, -{40,-23,23}, -{40,-23,24}, -{40,-23,25}, -{40,-23,26}, -{40,-23,27}, -{40,-23,28}, -{40,-23,29}, -{40,-23,30}, -{40,-23,31}, -{40,-23,32}, -{40,-23,33}, -{40,-23,34}, -{40,-23,35}, -{40,-23,36}, -{40,-23,37}, -{40,-23,38}, -{40,-23,39}, -{40,-23,40}, -{40,-23,41}, -{40,-23,42}, -{40,-23,43}, -{40,-23,44}, -{40,-23,45}, -{40,-23,46}, -{40,-22,-12}, -{40,-22,-11}, -{40,-22,-10}, -{40,-22,-9}, -{40,-22,-8}, -{40,-22,-7}, -{40,-22,-6}, -{40,-22,-5}, -{40,-22,-4}, -{40,-22,-3}, -{40,-22,-2}, -{40,-22,-1}, -{40,-22,0}, -{40,-22,1}, -{40,-22,2}, -{40,-22,3}, -{40,-22,4}, -{40,-22,5}, -{40,-22,6}, -{40,-22,7}, -{40,-22,8}, -{40,-22,9}, -{40,-22,10}, -{40,-22,11}, -{40,-22,12}, -{40,-22,13}, -{40,-22,14}, -{40,-22,15}, -{40,-22,16}, -{40,-22,17}, -{40,-22,18}, -{40,-22,19}, -{40,-22,20}, -{40,-22,21}, -{40,-22,22}, -{40,-22,23}, -{40,-22,24}, -{40,-22,25}, -{40,-22,26}, -{40,-22,27}, -{40,-22,28}, -{40,-22,29}, -{40,-22,30}, -{40,-22,31}, -{40,-22,32}, -{40,-22,33}, -{40,-22,34}, -{40,-22,35}, -{40,-22,36}, -{40,-22,37}, -{40,-22,38}, -{40,-22,39}, -{40,-22,40}, -{40,-22,41}, -{40,-22,42}, -{40,-22,43}, -{40,-22,44}, -{40,-22,45}, -{40,-22,46}, -{40,-21,-13}, -{40,-21,-12}, -{40,-21,-11}, -{40,-21,-10}, -{40,-21,-9}, -{40,-21,-8}, -{40,-21,-7}, -{40,-21,-6}, -{40,-21,-5}, -{40,-21,-4}, -{40,-21,-3}, -{40,-21,-2}, -{40,-21,-1}, -{40,-21,0}, -{40,-21,1}, -{40,-21,2}, -{40,-21,3}, -{40,-21,4}, -{40,-21,5}, -{40,-21,6}, -{40,-21,7}, -{40,-21,8}, -{40,-21,9}, -{40,-21,10}, -{40,-21,11}, -{40,-21,12}, -{40,-21,13}, -{40,-21,14}, -{40,-21,15}, -{40,-21,16}, -{40,-21,17}, -{40,-21,18}, -{40,-21,19}, -{40,-21,20}, -{40,-21,21}, -{40,-21,22}, -{40,-21,23}, -{40,-21,24}, -{40,-21,25}, -{40,-21,26}, -{40,-21,27}, -{40,-21,28}, -{40,-21,29}, -{40,-21,30}, -{40,-21,31}, -{40,-21,32}, -{40,-21,33}, -{40,-21,34}, -{40,-21,35}, -{40,-21,36}, -{40,-21,37}, -{40,-21,38}, -{40,-21,39}, -{40,-21,40}, -{40,-21,41}, -{40,-21,42}, -{40,-21,43}, -{40,-21,44}, -{40,-21,45}, -{40,-21,46}, -{40,-20,-15}, -{40,-20,-14}, -{40,-20,-13}, -{40,-20,-12}, -{40,-20,-11}, -{40,-20,-10}, -{40,-20,-9}, -{40,-20,-8}, -{40,-20,-7}, -{40,-20,-6}, -{40,-20,-5}, -{40,-20,-4}, -{40,-20,-3}, -{40,-20,-2}, -{40,-20,-1}, -{40,-20,0}, -{40,-20,1}, -{40,-20,2}, -{40,-20,3}, -{40,-20,4}, -{40,-20,5}, -{40,-20,6}, -{40,-20,7}, -{40,-20,8}, -{40,-20,9}, -{40,-20,10}, -{40,-20,11}, -{40,-20,12}, -{40,-20,13}, -{40,-20,14}, -{40,-20,15}, -{40,-20,16}, -{40,-20,17}, -{40,-20,18}, -{40,-20,19}, -{40,-20,20}, -{40,-20,21}, -{40,-20,22}, -{40,-20,23}, -{40,-20,24}, -{40,-20,25}, -{40,-20,26}, -{40,-20,27}, -{40,-20,28}, -{40,-20,29}, -{40,-20,30}, -{40,-20,31}, -{40,-20,32}, -{40,-20,33}, -{40,-20,34}, -{40,-20,35}, -{40,-20,36}, -{40,-20,37}, -{40,-20,38}, -{40,-20,39}, -{40,-20,40}, -{40,-20,41}, -{40,-20,42}, -{40,-20,43}, -{40,-20,44}, -{40,-20,45}, -{40,-20,46}, -{40,-19,-16}, -{40,-19,-15}, -{40,-19,-14}, -{40,-19,-13}, -{40,-19,-12}, -{40,-19,-11}, -{40,-19,-10}, -{40,-19,-9}, -{40,-19,-8}, -{40,-19,-7}, -{40,-19,-6}, -{40,-19,-5}, -{40,-19,-4}, -{40,-19,-3}, -{40,-19,-2}, -{40,-19,-1}, -{40,-19,0}, -{40,-19,1}, -{40,-19,2}, -{40,-19,3}, -{40,-19,4}, -{40,-19,5}, -{40,-19,6}, -{40,-19,7}, -{40,-19,8}, -{40,-19,9}, -{40,-19,10}, -{40,-19,11}, -{40,-19,12}, -{40,-19,13}, -{40,-19,14}, -{40,-19,15}, -{40,-19,16}, -{40,-19,17}, -{40,-19,18}, -{40,-19,19}, -{40,-19,20}, -{40,-19,21}, -{40,-19,22}, -{40,-19,23}, -{40,-19,24}, -{40,-19,25}, -{40,-19,26}, -{40,-19,27}, -{40,-19,28}, -{40,-19,29}, -{40,-19,30}, -{40,-19,31}, -{40,-19,32}, -{40,-19,33}, -{40,-19,34}, -{40,-19,35}, -{40,-19,36}, -{40,-19,37}, -{40,-19,38}, -{40,-19,39}, -{40,-19,40}, -{40,-19,41}, -{40,-19,42}, -{40,-19,43}, -{40,-19,44}, -{40,-19,45}, -{40,-19,46}, -{40,-18,-18}, -{40,-18,-17}, -{40,-18,-16}, -{40,-18,-15}, -{40,-18,-14}, -{40,-18,-13}, -{40,-18,-12}, -{40,-18,-11}, -{40,-18,-10}, -{40,-18,-9}, -{40,-18,-8}, -{40,-18,-7}, -{40,-18,-6}, -{40,-18,-5}, -{40,-18,-4}, -{40,-18,-3}, -{40,-18,-2}, -{40,-18,-1}, -{40,-18,0}, -{40,-18,1}, -{40,-18,2}, -{40,-18,3}, -{40,-18,4}, -{40,-18,5}, -{40,-18,6}, -{40,-18,7}, -{40,-18,8}, -{40,-18,9}, -{40,-18,10}, -{40,-18,11}, -{40,-18,12}, -{40,-18,13}, -{40,-18,14}, -{40,-18,15}, -{40,-18,16}, -{40,-18,17}, -{40,-18,18}, -{40,-18,19}, -{40,-18,20}, -{40,-18,21}, -{40,-18,22}, -{40,-18,23}, -{40,-18,24}, -{40,-18,25}, -{40,-18,26}, -{40,-18,27}, -{40,-18,28}, -{40,-18,29}, -{40,-18,30}, -{40,-18,31}, -{40,-18,32}, -{40,-18,33}, -{40,-18,34}, -{40,-18,35}, -{40,-18,36}, -{40,-18,37}, -{40,-18,38}, -{40,-18,39}, -{40,-18,40}, -{40,-18,41}, -{40,-18,42}, -{40,-18,43}, -{40,-18,44}, -{40,-18,45}, -{40,-18,46}, -{40,-17,-19}, -{40,-17,-18}, -{40,-17,-17}, -{40,-17,-16}, -{40,-17,-15}, -{40,-17,-14}, -{40,-17,-13}, -{40,-17,-12}, -{40,-17,-11}, -{40,-17,-10}, -{40,-17,-9}, -{40,-17,-8}, -{40,-17,-7}, -{40,-17,-6}, -{40,-17,-5}, -{40,-17,-4}, -{40,-17,-3}, -{40,-17,-2}, -{40,-17,-1}, -{40,-17,0}, -{40,-17,1}, -{40,-17,2}, -{40,-17,3}, -{40,-17,4}, -{40,-17,5}, -{40,-17,6}, -{40,-17,7}, -{40,-17,8}, -{40,-17,9}, -{40,-17,10}, -{40,-17,11}, -{40,-17,12}, -{40,-17,13}, -{40,-17,14}, -{40,-17,15}, -{40,-17,16}, -{40,-17,17}, -{40,-17,18}, -{40,-17,19}, -{40,-17,20}, -{40,-17,21}, -{40,-17,22}, -{40,-17,23}, -{40,-17,24}, -{40,-17,25}, -{40,-17,26}, -{40,-17,27}, -{40,-17,28}, -{40,-17,29}, -{40,-17,30}, -{40,-17,31}, -{40,-17,32}, -{40,-17,33}, -{40,-17,34}, -{40,-17,35}, -{40,-17,36}, -{40,-17,37}, -{40,-17,38}, -{40,-17,39}, -{40,-17,40}, -{40,-17,41}, -{40,-17,42}, -{40,-17,43}, -{40,-17,44}, -{40,-17,45}, -{40,-17,46}, -{40,-16,-20}, -{40,-16,-19}, -{40,-16,-18}, -{40,-16,-17}, -{40,-16,-16}, -{40,-16,-15}, -{40,-16,-14}, -{40,-16,-13}, -{40,-16,-12}, -{40,-16,-11}, -{40,-16,-10}, -{40,-16,-9}, -{40,-16,-8}, -{40,-16,-7}, -{40,-16,-6}, -{40,-16,-5}, -{40,-16,-4}, -{40,-16,-3}, -{40,-16,-2}, -{40,-16,-1}, -{40,-16,0}, -{40,-16,1}, -{40,-16,2}, -{40,-16,3}, -{40,-16,4}, -{40,-16,5}, -{40,-16,6}, -{40,-16,7}, -{40,-16,8}, -{40,-16,9}, -{40,-16,10}, -{40,-16,11}, -{40,-16,12}, -{40,-16,13}, -{40,-16,14}, -{40,-16,15}, -{40,-16,16}, -{40,-16,17}, -{40,-16,18}, -{40,-16,19}, -{40,-16,20}, -{40,-16,21}, -{40,-16,22}, -{40,-16,23}, -{40,-16,24}, -{40,-16,25}, -{40,-16,26}, -{40,-16,27}, -{40,-16,28}, -{40,-16,29}, -{40,-16,30}, -{40,-16,31}, -{40,-16,32}, -{40,-16,33}, -{40,-16,34}, -{40,-16,35}, -{40,-16,36}, -{40,-16,37}, -{40,-16,38}, -{40,-16,39}, -{40,-16,40}, -{40,-16,41}, -{40,-16,42}, -{40,-16,43}, -{40,-16,44}, -{40,-16,45}, -{40,-16,46}, -{40,-15,-22}, -{40,-15,-21}, -{40,-15,-20}, -{40,-15,-19}, -{40,-15,-18}, -{40,-15,-17}, -{40,-15,-16}, -{40,-15,-15}, -{40,-15,-14}, -{40,-15,-13}, -{40,-15,-12}, -{40,-15,-11}, -{40,-15,-10}, -{40,-15,-9}, -{40,-15,-8}, -{40,-15,-7}, -{40,-15,-6}, -{40,-15,-5}, -{40,-15,-4}, -{40,-15,-3}, -{40,-15,-2}, -{40,-15,-1}, -{40,-15,0}, -{40,-15,1}, -{40,-15,2}, -{40,-15,3}, -{40,-15,4}, -{40,-15,5}, -{40,-15,6}, -{40,-15,7}, -{40,-15,8}, -{40,-15,9}, -{40,-15,10}, -{40,-15,11}, -{40,-15,12}, -{40,-15,13}, -{40,-15,14}, -{40,-15,15}, -{40,-15,16}, -{40,-15,17}, -{40,-15,18}, -{40,-15,19}, -{40,-15,20}, -{40,-15,21}, -{40,-15,22}, -{40,-15,23}, -{40,-15,24}, -{40,-15,25}, -{40,-15,26}, -{40,-15,27}, -{40,-15,28}, -{40,-15,29}, -{40,-15,30}, -{40,-15,31}, -{40,-15,32}, -{40,-15,33}, -{40,-15,34}, -{40,-15,35}, -{40,-15,36}, -{40,-15,37}, -{40,-15,38}, -{40,-15,39}, -{40,-15,40}, -{40,-15,41}, -{40,-15,42}, -{40,-15,43}, -{40,-15,44}, -{40,-15,45}, -{40,-15,46}, -{40,-14,-23}, -{40,-14,-22}, -{40,-14,-21}, -{40,-14,-20}, -{40,-14,-19}, -{40,-14,-18}, -{40,-14,-17}, -{40,-14,-16}, -{40,-14,-15}, -{40,-14,-14}, -{40,-14,-13}, -{40,-14,-12}, -{40,-14,-11}, -{40,-14,-10}, -{40,-14,-9}, -{40,-14,-8}, -{40,-14,-7}, -{40,-14,-6}, -{40,-14,-5}, -{40,-14,-4}, -{40,-14,-3}, -{40,-14,-2}, -{40,-14,-1}, -{40,-14,0}, -{40,-14,1}, -{40,-14,2}, -{40,-14,3}, -{40,-14,4}, -{40,-14,5}, -{40,-14,6}, -{40,-14,7}, -{40,-14,8}, -{40,-14,9}, -{40,-14,10}, -{40,-14,11}, -{40,-14,12}, -{40,-14,13}, -{40,-14,14}, -{40,-14,15}, -{40,-14,16}, -{40,-14,17}, -{40,-14,18}, -{40,-14,19}, -{40,-14,20}, -{40,-14,21}, -{40,-14,22}, -{40,-14,23}, -{40,-14,24}, -{40,-14,25}, -{40,-14,26}, -{40,-14,27}, -{40,-14,28}, -{40,-14,29}, -{40,-14,30}, -{40,-14,31}, -{40,-14,32}, -{40,-14,33}, -{40,-14,34}, -{40,-14,35}, -{40,-14,36}, -{40,-14,37}, -{40,-14,38}, -{40,-14,39}, -{40,-14,40}, -{40,-14,41}, -{40,-14,42}, -{40,-14,43}, -{40,-14,44}, -{40,-14,45}, -{40,-14,46}, -{40,-13,-24}, -{40,-13,-23}, -{40,-13,-22}, -{40,-13,-21}, -{40,-13,-20}, -{40,-13,-19}, -{40,-13,-18}, -{40,-13,-17}, -{40,-13,-16}, -{40,-13,-15}, -{40,-13,-14}, -{40,-13,-13}, -{40,-13,-12}, -{40,-13,-11}, -{40,-13,-10}, -{40,-13,-9}, -{40,-13,-8}, -{40,-13,-7}, -{40,-13,-6}, -{40,-13,-5}, -{40,-13,-4}, -{40,-13,-3}, -{40,-13,-2}, -{40,-13,-1}, -{40,-13,0}, -{40,-13,1}, -{40,-13,2}, -{40,-13,3}, -{40,-13,4}, -{40,-13,5}, -{40,-13,6}, -{40,-13,7}, -{40,-13,8}, -{40,-13,9}, -{40,-13,10}, -{40,-13,11}, -{40,-13,12}, -{40,-13,13}, -{40,-13,14}, -{40,-13,15}, -{40,-13,16}, -{40,-13,17}, -{40,-13,18}, -{40,-13,19}, -{40,-13,20}, -{40,-13,21}, -{40,-13,22}, -{40,-13,23}, -{40,-13,24}, -{40,-13,25}, -{40,-13,26}, -{40,-13,27}, -{40,-13,28}, -{40,-13,29}, -{40,-13,30}, -{40,-13,31}, -{40,-13,32}, -{40,-13,33}, -{40,-13,34}, -{40,-13,35}, -{40,-13,36}, -{40,-13,37}, -{40,-13,38}, -{40,-13,39}, -{40,-13,40}, -{40,-13,41}, -{40,-13,42}, -{40,-13,43}, -{40,-13,44}, -{40,-13,45}, -{40,-13,46}, -{40,-12,-26}, -{40,-12,-25}, -{40,-12,-24}, -{40,-12,-23}, -{40,-12,-22}, -{40,-12,-21}, -{40,-12,-20}, -{40,-12,-19}, -{40,-12,-18}, -{40,-12,-17}, -{40,-12,-16}, -{40,-12,-15}, -{40,-12,-14}, -{40,-12,-13}, -{40,-12,-12}, -{40,-12,-11}, -{40,-12,-10}, -{40,-12,-9}, -{40,-12,-8}, -{40,-12,-7}, -{40,-12,-6}, -{40,-12,-5}, -{40,-12,-4}, -{40,-12,-3}, -{40,-12,-2}, -{40,-12,-1}, -{40,-12,0}, -{40,-12,1}, -{40,-12,2}, -{40,-12,3}, -{40,-12,4}, -{40,-12,5}, -{40,-12,6}, -{40,-12,7}, -{40,-12,8}, -{40,-12,9}, -{40,-12,10}, -{40,-12,11}, -{40,-12,12}, -{40,-12,13}, -{40,-12,14}, -{40,-12,15}, -{40,-12,16}, -{40,-12,17}, -{40,-12,18}, -{40,-12,19}, -{40,-12,20}, -{40,-12,21}, -{40,-12,22}, -{40,-12,23}, -{40,-12,24}, -{40,-12,25}, -{40,-12,26}, -{40,-12,27}, -{40,-12,28}, -{40,-12,29}, -{40,-12,30}, -{40,-12,31}, -{40,-12,32}, -{40,-12,33}, -{40,-12,34}, -{40,-12,35}, -{40,-12,36}, -{40,-12,37}, -{40,-12,38}, -{40,-12,39}, -{40,-12,40}, -{40,-12,41}, -{40,-12,42}, -{40,-12,43}, -{40,-12,44}, -{40,-12,45}, -{40,-12,46}, -{40,-11,-27}, -{40,-11,-26}, -{40,-11,-25}, -{40,-11,-24}, -{40,-11,-23}, -{40,-11,-22}, -{40,-11,-21}, -{40,-11,-20}, -{40,-11,-19}, -{40,-11,-18}, -{40,-11,-17}, -{40,-11,-16}, -{40,-11,-15}, -{40,-11,-14}, -{40,-11,-13}, -{40,-11,-12}, -{40,-11,-11}, -{40,-11,-10}, -{40,-11,-9}, -{40,-11,-8}, -{40,-11,-7}, -{40,-11,-6}, -{40,-11,-5}, -{40,-11,-4}, -{40,-11,-3}, -{40,-11,-2}, -{40,-11,-1}, -{40,-11,0}, -{40,-11,1}, -{40,-11,2}, -{40,-11,3}, -{40,-11,4}, -{40,-11,5}, -{40,-11,6}, -{40,-11,7}, -{40,-11,8}, -{40,-11,9}, -{40,-11,10}, -{40,-11,11}, -{40,-11,12}, -{40,-11,13}, -{40,-11,14}, -{40,-11,15}, -{40,-11,16}, -{40,-11,17}, -{40,-11,18}, -{40,-11,19}, -{40,-11,20}, -{40,-11,21}, -{40,-11,22}, -{40,-11,23}, -{40,-11,24}, -{40,-11,25}, -{40,-11,26}, -{40,-11,27}, -{40,-11,28}, -{40,-11,29}, -{40,-11,30}, -{40,-11,31}, -{40,-11,32}, -{40,-11,33}, -{40,-11,34}, -{40,-11,35}, -{40,-11,36}, -{40,-11,37}, -{40,-11,38}, -{40,-11,39}, -{40,-11,40}, -{40,-11,41}, -{40,-11,42}, -{40,-11,43}, -{40,-11,44}, -{40,-11,45}, -{40,-11,46}, -{40,-10,-28}, -{40,-10,-27}, -{40,-10,-26}, -{40,-10,-25}, -{40,-10,-24}, -{40,-10,-23}, -{40,-10,-22}, -{40,-10,-21}, -{40,-10,-20}, -{40,-10,-19}, -{40,-10,-18}, -{40,-10,-17}, -{40,-10,-16}, -{40,-10,-15}, -{40,-10,-14}, -{40,-10,-13}, -{40,-10,-12}, -{40,-10,-11}, -{40,-10,-10}, -{40,-10,-9}, -{40,-10,-8}, -{40,-10,-7}, -{40,-10,-6}, -{40,-10,-5}, -{40,-10,-4}, -{40,-10,-3}, -{40,-10,-2}, -{40,-10,-1}, -{40,-10,0}, -{40,-10,1}, -{40,-10,2}, -{40,-10,3}, -{40,-10,4}, -{40,-10,5}, -{40,-10,6}, -{40,-10,7}, -{40,-10,8}, -{40,-10,9}, -{40,-10,10}, -{40,-10,11}, -{40,-10,12}, -{40,-10,13}, -{40,-10,14}, -{40,-10,15}, -{40,-10,16}, -{40,-10,17}, -{40,-10,18}, -{40,-10,19}, -{40,-10,20}, -{40,-10,21}, -{40,-10,22}, -{40,-10,23}, -{40,-10,24}, -{40,-10,25}, -{40,-10,26}, -{40,-10,27}, -{40,-10,28}, -{40,-10,29}, -{40,-10,30}, -{40,-10,31}, -{40,-10,32}, -{40,-10,33}, -{40,-10,34}, -{40,-10,35}, -{40,-10,36}, -{40,-10,37}, -{40,-10,38}, -{40,-10,39}, -{40,-10,40}, -{40,-10,41}, -{40,-10,42}, -{40,-10,43}, -{40,-10,44}, -{40,-10,45}, -{40,-10,46}, -{40,-9,-29}, -{40,-9,-28}, -{40,-9,-27}, -{40,-9,-26}, -{40,-9,-25}, -{40,-9,-24}, -{40,-9,-23}, -{40,-9,-22}, -{40,-9,-21}, -{40,-9,-20}, -{40,-9,-19}, -{40,-9,-18}, -{40,-9,-17}, -{40,-9,-16}, -{40,-9,-15}, -{40,-9,-14}, -{40,-9,-13}, -{40,-9,-12}, -{40,-9,-11}, -{40,-9,-10}, -{40,-9,-9}, -{40,-9,-8}, -{40,-9,-7}, -{40,-9,-6}, -{40,-9,-5}, -{40,-9,-4}, -{40,-9,-3}, -{40,-9,-2}, -{40,-9,-1}, -{40,-9,0}, -{40,-9,1}, -{40,-9,2}, -{40,-9,3}, -{40,-9,4}, -{40,-9,5}, -{40,-9,6}, -{40,-9,7}, -{40,-9,8}, -{40,-9,9}, -{40,-9,10}, -{40,-9,11}, -{40,-9,12}, -{40,-9,13}, -{40,-9,14}, -{40,-9,15}, -{40,-9,16}, -{40,-9,17}, -{40,-9,18}, -{40,-9,19}, -{40,-9,20}, -{40,-9,21}, -{40,-9,22}, -{40,-9,23}, -{40,-9,24}, -{40,-9,25}, -{40,-9,26}, -{40,-9,27}, -{40,-9,28}, -{40,-9,29}, -{40,-9,30}, -{40,-9,31}, -{40,-9,32}, -{40,-9,33}, -{40,-9,34}, -{40,-9,35}, -{40,-9,36}, -{40,-9,37}, -{40,-9,38}, -{40,-9,39}, -{40,-9,40}, -{40,-9,41}, -{40,-9,42}, -{40,-9,43}, -{40,-9,44}, -{40,-9,45}, -{40,-9,46}, -{40,-9,47}, -{40,-8,-31}, -{40,-8,-30}, -{40,-8,-29}, -{40,-8,-28}, -{40,-8,-27}, -{40,-8,-26}, -{40,-8,-25}, -{40,-8,-24}, -{40,-8,-23}, -{40,-8,-22}, -{40,-8,-21}, -{40,-8,-20}, -{40,-8,-19}, -{40,-8,-18}, -{40,-8,-17}, -{40,-8,-16}, -{40,-8,-15}, -{40,-8,-14}, -{40,-8,-13}, -{40,-8,-12}, -{40,-8,-11}, -{40,-8,-10}, -{40,-8,-9}, -{40,-8,-8}, -{40,-8,-7}, -{40,-8,-6}, -{40,-8,-5}, -{40,-8,-4}, -{40,-8,-3}, -{40,-8,-2}, -{40,-8,-1}, -{40,-8,0}, -{40,-8,1}, -{40,-8,2}, -{40,-8,3}, -{40,-8,4}, -{40,-8,5}, -{40,-8,6}, -{40,-8,7}, -{40,-8,8}, -{40,-8,9}, -{40,-8,10}, -{40,-8,11}, -{40,-8,12}, -{40,-8,13}, -{40,-8,14}, -{40,-8,15}, -{40,-8,16}, -{40,-8,17}, -{40,-8,18}, -{40,-8,19}, -{40,-8,20}, -{40,-8,21}, -{40,-8,22}, -{40,-8,23}, -{40,-8,24}, -{40,-8,25}, -{40,-8,26}, -{40,-8,27}, -{40,-8,28}, -{40,-8,29}, -{40,-8,30}, -{40,-8,31}, -{40,-8,32}, -{40,-8,33}, -{40,-8,34}, -{40,-8,35}, -{40,-8,36}, -{40,-8,37}, -{40,-8,38}, -{40,-8,39}, -{40,-8,40}, -{40,-8,41}, -{40,-8,42}, -{40,-8,43}, -{40,-8,44}, -{40,-8,45}, -{40,-8,46}, -{40,-8,47}, -{40,-7,-32}, -{40,-7,-31}, -{40,-7,-30}, -{40,-7,-29}, -{40,-7,-28}, -{40,-7,-27}, -{40,-7,-26}, -{40,-7,-25}, -{40,-7,-24}, -{40,-7,-23}, -{40,-7,-22}, -{40,-7,-21}, -{40,-7,-20}, -{40,-7,-19}, -{40,-7,-18}, -{40,-7,-17}, -{40,-7,-16}, -{40,-7,-15}, -{40,-7,-14}, -{40,-7,-13}, -{40,-7,-12}, -{40,-7,-11}, -{40,-7,-10}, -{40,-7,-9}, -{40,-7,-8}, -{40,-7,-7}, -{40,-7,-6}, -{40,-7,-5}, -{40,-7,-4}, -{40,-7,-3}, -{40,-7,-2}, -{40,-7,-1}, -{40,-7,0}, -{40,-7,1}, -{40,-7,2}, -{40,-7,3}, -{40,-7,4}, -{40,-7,5}, -{40,-7,6}, -{40,-7,7}, -{40,-7,8}, -{40,-7,9}, -{40,-7,10}, -{40,-7,11}, -{40,-7,12}, -{40,-7,13}, -{40,-7,14}, -{40,-7,15}, -{40,-7,16}, -{40,-7,17}, -{40,-7,18}, -{40,-7,19}, -{40,-7,20}, -{40,-7,21}, -{40,-7,22}, -{40,-7,23}, -{40,-7,24}, -{40,-7,25}, -{40,-7,26}, -{40,-7,27}, -{40,-7,28}, -{40,-7,29}, -{40,-7,30}, -{40,-7,31}, -{40,-7,32}, -{40,-7,33}, -{40,-7,34}, -{40,-7,35}, -{40,-7,36}, -{40,-7,37}, -{40,-7,38}, -{40,-7,39}, -{40,-7,40}, -{40,-7,41}, -{40,-7,42}, -{40,-7,43}, -{40,-7,44}, -{40,-7,45}, -{40,-7,46}, -{40,-7,47}, -{40,-6,-33}, -{40,-6,-32}, -{40,-6,-31}, -{40,-6,-30}, -{40,-6,-29}, -{40,-6,-28}, -{40,-6,-27}, -{40,-6,-26}, -{40,-6,-25}, -{40,-6,-24}, -{40,-6,-23}, -{40,-6,-22}, -{40,-6,-21}, -{40,-6,-20}, -{40,-6,-19}, -{40,-6,-18}, -{40,-6,-17}, -{40,-6,-16}, -{40,-6,-15}, -{40,-6,-14}, -{40,-6,-13}, -{40,-6,-12}, -{40,-6,-11}, -{40,-6,-10}, -{40,-6,-9}, -{40,-6,-8}, -{40,-6,-7}, -{40,-6,-6}, -{40,-6,-5}, -{40,-6,-4}, -{40,-6,-3}, -{40,-6,-2}, -{40,-6,-1}, -{40,-6,0}, -{40,-6,1}, -{40,-6,2}, -{40,-6,3}, -{40,-6,4}, -{40,-6,5}, -{40,-6,6}, -{40,-6,7}, -{40,-6,8}, -{40,-6,9}, -{40,-6,10}, -{40,-6,11}, -{40,-6,12}, -{40,-6,13}, -{40,-6,14}, -{40,-6,15}, -{40,-6,16}, -{40,-6,17}, -{40,-6,18}, -{40,-6,19}, -{40,-6,20}, -{40,-6,21}, -{40,-6,22}, -{40,-6,23}, -{40,-6,24}, -{40,-6,25}, -{40,-6,26}, -{40,-6,27}, -{40,-6,28}, -{40,-6,29}, -{40,-6,30}, -{40,-6,31}, -{40,-6,32}, -{40,-6,33}, -{40,-6,34}, -{40,-6,35}, -{40,-6,36}, -{40,-6,37}, -{40,-6,38}, -{40,-6,39}, -{40,-6,40}, -{40,-6,41}, -{40,-6,42}, -{40,-6,43}, -{40,-6,44}, -{40,-6,45}, -{40,-6,46}, -{40,-6,47}, -{40,-5,-34}, -{40,-5,-33}, -{40,-5,-32}, -{40,-5,-31}, -{40,-5,-30}, -{40,-5,-29}, -{40,-5,-28}, -{40,-5,-27}, -{40,-5,-26}, -{40,-5,-25}, -{40,-5,-24}, -{40,-5,-23}, -{40,-5,-22}, -{40,-5,-21}, -{40,-5,-20}, -{40,-5,-19}, -{40,-5,-18}, -{40,-5,-17}, -{40,-5,-16}, -{40,-5,-15}, -{40,-5,-14}, -{40,-5,-13}, -{40,-5,-12}, -{40,-5,-11}, -{40,-5,-10}, -{40,-5,-9}, -{40,-5,-8}, -{40,-5,-7}, -{40,-5,-6}, -{40,-5,-5}, -{40,-5,-4}, -{40,-5,-3}, -{40,-5,-2}, -{40,-5,-1}, -{40,-5,0}, -{40,-5,1}, -{40,-5,2}, -{40,-5,3}, -{40,-5,4}, -{40,-5,5}, -{40,-5,6}, -{40,-5,7}, -{40,-5,8}, -{40,-5,9}, -{40,-5,10}, -{40,-5,11}, -{40,-5,12}, -{40,-5,13}, -{40,-5,14}, -{40,-5,15}, -{40,-5,16}, -{40,-5,17}, -{40,-5,18}, -{40,-5,19}, -{40,-5,20}, -{40,-5,21}, -{40,-5,22}, -{40,-5,23}, -{40,-5,24}, -{40,-5,25}, -{40,-5,26}, -{40,-5,27}, -{40,-5,28}, -{40,-5,29}, -{40,-5,30}, -{40,-5,31}, -{40,-5,32}, -{40,-5,33}, -{40,-5,34}, -{40,-5,35}, -{40,-5,36}, -{40,-5,37}, -{40,-5,38}, -{40,-5,39}, -{40,-5,40}, -{40,-5,41}, -{40,-5,42}, -{40,-5,43}, -{40,-5,44}, -{40,-5,45}, -{40,-5,46}, -{40,-5,47}, -{40,-4,-35}, -{40,-4,-34}, -{40,-4,-33}, -{40,-4,-32}, -{40,-4,-31}, -{40,-4,-30}, -{40,-4,-29}, -{40,-4,-28}, -{40,-4,-27}, -{40,-4,-26}, -{40,-4,-25}, -{40,-4,-24}, -{40,-4,-23}, -{40,-4,-22}, -{40,-4,-21}, -{40,-4,-20}, -{40,-4,-19}, -{40,-4,-18}, -{40,-4,-17}, -{40,-4,-16}, -{40,-4,-15}, -{40,-4,-14}, -{40,-4,-13}, -{40,-4,-12}, -{40,-4,-11}, -{40,-4,-10}, -{40,-4,-9}, -{40,-4,-8}, -{40,-4,-7}, -{40,-4,-6}, -{40,-4,-5}, -{40,-4,-4}, -{40,-4,-3}, -{40,-4,-2}, -{40,-4,-1}, -{40,-4,0}, -{40,-4,1}, -{40,-4,2}, -{40,-4,3}, -{40,-4,4}, -{40,-4,5}, -{40,-4,6}, -{40,-4,7}, -{40,-4,8}, -{40,-4,9}, -{40,-4,10}, -{40,-4,11}, -{40,-4,12}, -{40,-4,13}, -{40,-4,14}, -{40,-4,15}, -{40,-4,16}, -{40,-4,17}, -{40,-4,18}, -{40,-4,19}, -{40,-4,20}, -{40,-4,21}, -{40,-4,22}, -{40,-4,23}, -{40,-4,24}, -{40,-4,25}, -{40,-4,26}, -{40,-4,27}, -{40,-4,28}, -{40,-4,29}, -{40,-4,30}, -{40,-4,31}, -{40,-4,32}, -{40,-4,33}, -{40,-4,34}, -{40,-4,35}, -{40,-4,36}, -{40,-4,37}, -{40,-4,38}, -{40,-4,39}, -{40,-4,40}, -{40,-4,41}, -{40,-4,42}, -{40,-4,43}, -{40,-4,44}, -{40,-4,45}, -{40,-4,46}, -{40,-4,47}, -{40,-3,-36}, -{40,-3,-35}, -{40,-3,-34}, -{40,-3,-33}, -{40,-3,-32}, -{40,-3,-31}, -{40,-3,-30}, -{40,-3,-29}, -{40,-3,-28}, -{40,-3,-27}, -{40,-3,-26}, -{40,-3,-25}, -{40,-3,-24}, -{40,-3,-23}, -{40,-3,-22}, -{40,-3,-21}, -{40,-3,-20}, -{40,-3,-19}, -{40,-3,-18}, -{40,-3,-17}, -{40,-3,-16}, -{40,-3,-15}, -{40,-3,-14}, -{40,-3,-13}, -{40,-3,-12}, -{40,-3,-11}, -{40,-3,-10}, -{40,-3,-9}, -{40,-3,-8}, -{40,-3,-7}, -{40,-3,-6}, -{40,-3,-5}, -{40,-3,-4}, -{40,-3,-3}, -{40,-3,-2}, -{40,-3,-1}, -{40,-3,0}, -{40,-3,1}, -{40,-3,2}, -{40,-3,3}, -{40,-3,4}, -{40,-3,5}, -{40,-3,6}, -{40,-3,7}, -{40,-3,8}, -{40,-3,9}, -{40,-3,10}, -{40,-3,11}, -{40,-3,12}, -{40,-3,13}, -{40,-3,14}, -{40,-3,15}, -{40,-3,16}, -{40,-3,17}, -{40,-3,18}, -{40,-3,19}, -{40,-3,20}, -{40,-3,21}, -{40,-3,22}, -{40,-3,23}, -{40,-3,24}, -{40,-3,25}, -{40,-3,26}, -{40,-3,27}, -{40,-3,28}, -{40,-3,29}, -{40,-3,30}, -{40,-3,31}, -{40,-3,32}, -{40,-3,33}, -{40,-3,34}, -{40,-3,35}, -{40,-3,36}, -{40,-3,37}, -{40,-3,38}, -{40,-3,39}, -{40,-3,40}, -{40,-3,41}, -{40,-3,42}, -{40,-3,43}, -{40,-3,44}, -{40,-3,45}, -{40,-3,46}, -{40,-3,47}, -{40,-2,-38}, -{40,-2,-37}, -{40,-2,-36}, -{40,-2,-35}, -{40,-2,-34}, -{40,-2,-33}, -{40,-2,-32}, -{40,-2,-31}, -{40,-2,-30}, -{40,-2,-29}, -{40,-2,-28}, -{40,-2,-27}, -{40,-2,-26}, -{40,-2,-25}, -{40,-2,-24}, -{40,-2,-23}, -{40,-2,-22}, -{40,-2,-21}, -{40,-2,-20}, -{40,-2,-19}, -{40,-2,-18}, -{40,-2,-17}, -{40,-2,-16}, -{40,-2,-15}, -{40,-2,-14}, -{40,-2,-13}, -{40,-2,-12}, -{40,-2,-11}, -{40,-2,-10}, -{40,-2,-9}, -{40,-2,-8}, -{40,-2,-7}, -{40,-2,-6}, -{40,-2,-5}, -{40,-2,-4}, -{40,-2,-3}, -{40,-2,-2}, -{40,-2,-1}, -{40,-2,0}, -{40,-2,1}, -{40,-2,2}, -{40,-2,3}, -{40,-2,4}, -{40,-2,5}, -{40,-2,6}, -{40,-2,7}, -{40,-2,8}, -{40,-2,9}, -{40,-2,10}, -{40,-2,11}, -{40,-2,12}, -{40,-2,13}, -{40,-2,14}, -{40,-2,15}, -{40,-2,16}, -{40,-2,17}, -{40,-2,18}, -{40,-2,19}, -{40,-2,20}, -{40,-2,21}, -{40,-2,22}, -{40,-2,23}, -{40,-2,24}, -{40,-2,25}, -{40,-2,26}, -{40,-2,27}, -{40,-2,28}, -{40,-2,29}, -{40,-2,30}, -{40,-2,31}, -{40,-2,32}, -{40,-2,33}, -{40,-2,34}, -{40,-2,35}, -{40,-2,36}, -{40,-2,37}, -{40,-2,38}, -{40,-2,39}, -{40,-2,40}, -{40,-2,41}, -{40,-2,42}, -{40,-2,43}, -{40,-2,44}, -{40,-2,45}, -{40,-2,46}, -{40,-2,47}, -{40,-1,-39}, -{40,-1,-38}, -{40,-1,-37}, -{40,-1,-36}, -{40,-1,-35}, -{40,-1,-34}, -{40,-1,-33}, -{40,-1,-32}, -{40,-1,-31}, -{40,-1,-30}, -{40,-1,-29}, -{40,-1,-28}, -{40,-1,-27}, -{40,-1,-26}, -{40,-1,-25}, -{40,-1,-24}, -{40,-1,-23}, -{40,-1,-22}, -{40,-1,-21}, -{40,-1,-20}, -{40,-1,-19}, -{40,-1,-18}, -{40,-1,-17}, -{40,-1,-16}, -{40,-1,-15}, -{40,-1,-14}, -{40,-1,-13}, -{40,-1,-12}, -{40,-1,-11}, -{40,-1,-10}, -{40,-1,-9}, -{40,-1,-8}, -{40,-1,-7}, -{40,-1,-6}, -{40,-1,-5}, -{40,-1,-4}, -{40,-1,-3}, -{40,-1,-2}, -{40,-1,-1}, -{40,-1,0}, -{40,-1,1}, -{40,-1,2}, -{40,-1,3}, -{40,-1,4}, -{40,-1,5}, -{40,-1,6}, -{40,-1,7}, -{40,-1,8}, -{40,-1,9}, -{40,-1,10}, -{40,-1,11}, -{40,-1,12}, -{40,-1,13}, -{40,-1,14}, -{40,-1,15}, -{40,-1,16}, -{40,-1,17}, -{40,-1,18}, -{40,-1,19}, -{40,-1,20}, -{40,-1,21}, -{40,-1,22}, -{40,-1,23}, -{40,-1,24}, -{40,-1,25}, -{40,-1,26}, -{40,-1,27}, -{40,-1,28}, -{40,-1,29}, -{40,-1,30}, -{40,-1,31}, -{40,-1,32}, -{40,-1,33}, -{40,-1,34}, -{40,-1,35}, -{40,-1,36}, -{40,-1,37}, -{40,-1,38}, -{40,-1,39}, -{40,-1,40}, -{40,-1,41}, -{40,-1,42}, -{40,-1,43}, -{40,-1,44}, -{40,-1,45}, -{40,-1,46}, -{40,-1,47}, -{40,0,-40}, -{40,0,-39}, -{40,0,-38}, -{40,0,-37}, -{40,0,-36}, -{40,0,-35}, -{40,0,-34}, -{40,0,-33}, -{40,0,-32}, -{40,0,-31}, -{40,0,-30}, -{40,0,-29}, -{40,0,-28}, -{40,0,-27}, -{40,0,-26}, -{40,0,-25}, -{40,0,-24}, -{40,0,-23}, -{40,0,-22}, -{40,0,-21}, -{40,0,-20}, -{40,0,-19}, -{40,0,-18}, -{40,0,-17}, -{40,0,-16}, -{40,0,-15}, -{40,0,-14}, -{40,0,-13}, -{40,0,-12}, -{40,0,-11}, -{40,0,-10}, -{40,0,-9}, -{40,0,-8}, -{40,0,-7}, -{40,0,-6}, -{40,0,-5}, -{40,0,-4}, -{40,0,-3}, -{40,0,-2}, -{40,0,-1}, -{40,0,0}, -{40,0,1}, -{40,0,2}, -{40,0,3}, -{40,0,4}, -{40,0,5}, -{40,0,6}, -{40,0,7}, -{40,0,8}, -{40,0,9}, -{40,0,10}, -{40,0,11}, -{40,0,12}, -{40,0,13}, -{40,0,14}, -{40,0,15}, -{40,0,16}, -{40,0,17}, -{40,0,18}, -{40,0,19}, -{40,0,20}, -{40,0,21}, -{40,0,22}, -{40,0,23}, -{40,0,24}, -{40,0,25}, -{40,0,26}, -{40,0,27}, -{40,0,28}, -{40,0,29}, -{40,0,30}, -{40,0,31}, -{40,0,32}, -{40,0,33}, -{40,0,34}, -{40,0,35}, -{40,0,36}, -{40,0,37}, -{40,0,38}, -{40,0,39}, -{40,0,40}, -{40,0,41}, -{40,0,42}, -{40,0,43}, -{40,0,44}, -{40,0,45}, -{40,0,46}, -{40,0,47}, -{40,1,-41}, -{40,1,-40}, -{40,1,-39}, -{40,1,-38}, -{40,1,-37}, -{40,1,-36}, -{40,1,-35}, -{40,1,-34}, -{40,1,-33}, -{40,1,-32}, -{40,1,-31}, -{40,1,-30}, -{40,1,-29}, -{40,1,-28}, -{40,1,-27}, -{40,1,-26}, -{40,1,-25}, -{40,1,-24}, -{40,1,-23}, -{40,1,-22}, -{40,1,-21}, -{40,1,-20}, -{40,1,-19}, -{40,1,-18}, -{40,1,-17}, -{40,1,-16}, -{40,1,-15}, -{40,1,-14}, -{40,1,-13}, -{40,1,-12}, -{40,1,-11}, -{40,1,-10}, -{40,1,-9}, -{40,1,-8}, -{40,1,-7}, -{40,1,-6}, -{40,1,-5}, -{40,1,-4}, -{40,1,-3}, -{40,1,-2}, -{40,1,-1}, -{40,1,0}, -{40,1,1}, -{40,1,2}, -{40,1,3}, -{40,1,4}, -{40,1,5}, -{40,1,6}, -{40,1,7}, -{40,1,8}, -{40,1,9}, -{40,1,10}, -{40,1,11}, -{40,1,12}, -{40,1,13}, -{40,1,14}, -{40,1,15}, -{40,1,16}, -{40,1,17}, -{40,1,18}, -{40,1,19}, -{40,1,20}, -{40,1,21}, -{40,1,22}, -{40,1,23}, -{40,1,24}, -{40,1,25}, -{40,1,26}, -{40,1,27}, -{40,1,28}, -{40,1,29}, -{40,1,30}, -{40,1,31}, -{40,1,32}, -{40,1,33}, -{40,1,34}, -{40,1,35}, -{40,1,36}, -{40,1,37}, -{40,1,38}, -{40,1,39}, -{40,1,40}, -{40,1,41}, -{40,1,42}, -{40,1,43}, -{40,1,44}, -{40,1,45}, -{40,1,46}, -{40,1,47}, -{40,2,-42}, -{40,2,-41}, -{40,2,-40}, -{40,2,-39}, -{40,2,-38}, -{40,2,-37}, -{40,2,-36}, -{40,2,-35}, -{40,2,-34}, -{40,2,-33}, -{40,2,-32}, -{40,2,-31}, -{40,2,-30}, -{40,2,-29}, -{40,2,-28}, -{40,2,-27}, -{40,2,-26}, -{40,2,-25}, -{40,2,-24}, -{40,2,-23}, -{40,2,-22}, -{40,2,-21}, -{40,2,-20}, -{40,2,-19}, -{40,2,-18}, -{40,2,-17}, -{40,2,-16}, -{40,2,-15}, -{40,2,-14}, -{40,2,-13}, -{40,2,-12}, -{40,2,-11}, -{40,2,-10}, -{40,2,-9}, -{40,2,-8}, -{40,2,-7}, -{40,2,-6}, -{40,2,-5}, -{40,2,-4}, -{40,2,-3}, -{40,2,-2}, -{40,2,-1}, -{40,2,0}, -{40,2,1}, -{40,2,2}, -{40,2,3}, -{40,2,4}, -{40,2,5}, -{40,2,6}, -{40,2,7}, -{40,2,8}, -{40,2,9}, -{40,2,10}, -{40,2,11}, -{40,2,12}, -{40,2,13}, -{40,2,14}, -{40,2,15}, -{40,2,16}, -{40,2,17}, -{40,2,18}, -{40,2,19}, -{40,2,20}, -{40,2,21}, -{40,2,22}, -{40,2,23}, -{40,2,24}, -{40,2,25}, -{40,2,26}, -{40,2,27}, -{40,2,28}, -{40,2,29}, -{40,2,30}, -{40,2,31}, -{40,2,32}, -{40,2,33}, -{40,2,34}, -{40,2,35}, -{40,2,36}, -{40,2,37}, -{40,2,38}, -{40,2,39}, -{40,2,40}, -{40,2,41}, -{40,2,42}, -{40,2,43}, -{40,2,44}, -{40,2,45}, -{40,2,46}, -{40,2,47}, -{40,3,-43}, -{40,3,-42}, -{40,3,-41}, -{40,3,-40}, -{40,3,-39}, -{40,3,-38}, -{40,3,-37}, -{40,3,-36}, -{40,3,-35}, -{40,3,-34}, -{40,3,-33}, -{40,3,-32}, -{40,3,-31}, -{40,3,-30}, -{40,3,-29}, -{40,3,-28}, -{40,3,-27}, -{40,3,-26}, -{40,3,-25}, -{40,3,-24}, -{40,3,-23}, -{40,3,-22}, -{40,3,-21}, -{40,3,-20}, -{40,3,-19}, -{40,3,-18}, -{40,3,-17}, -{40,3,-16}, -{40,3,-15}, -{40,3,-14}, -{40,3,-13}, -{40,3,-12}, -{40,3,-11}, -{40,3,-10}, -{40,3,-9}, -{40,3,-8}, -{40,3,-7}, -{40,3,-6}, -{40,3,-5}, -{40,3,-4}, -{40,3,-3}, -{40,3,-2}, -{40,3,-1}, -{40,3,0}, -{40,3,1}, -{40,3,2}, -{40,3,3}, -{40,3,4}, -{40,3,5}, -{40,3,6}, -{40,3,7}, -{40,3,8}, -{40,3,9}, -{40,3,10}, -{40,3,11}, -{40,3,12}, -{40,3,13}, -{40,3,14}, -{40,3,15}, -{40,3,16}, -{40,3,17}, -{40,3,18}, -{40,3,19}, -{40,3,20}, -{40,3,21}, -{40,3,22}, -{40,3,23}, -{40,3,24}, -{40,3,25}, -{40,3,26}, -{40,3,27}, -{40,3,28}, -{40,3,29}, -{40,3,30}, -{40,3,31}, -{40,3,32}, -{40,3,33}, -{40,3,34}, -{40,3,35}, -{40,3,36}, -{40,3,37}, -{40,3,38}, -{40,3,39}, -{40,3,40}, -{40,3,41}, -{40,3,42}, -{40,3,43}, -{40,3,44}, -{40,3,45}, -{40,3,46}, -{40,3,47}, -{40,4,-44}, -{40,4,-43}, -{40,4,-42}, -{40,4,-41}, -{40,4,-40}, -{40,4,-39}, -{40,4,-38}, -{40,4,-37}, -{40,4,-36}, -{40,4,-35}, -{40,4,-34}, -{40,4,-33}, -{40,4,-32}, -{40,4,-31}, -{40,4,-30}, -{40,4,-29}, -{40,4,-28}, -{40,4,-27}, -{40,4,-26}, -{40,4,-25}, -{40,4,-24}, -{40,4,-23}, -{40,4,-22}, -{40,4,-21}, -{40,4,-20}, -{40,4,-19}, -{40,4,-18}, -{40,4,-17}, -{40,4,-16}, -{40,4,-15}, -{40,4,-14}, -{40,4,-13}, -{40,4,-12}, -{40,4,-11}, -{40,4,-10}, -{40,4,-9}, -{40,4,-8}, -{40,4,-7}, -{40,4,-6}, -{40,4,-5}, -{40,4,-4}, -{40,4,-3}, -{40,4,-2}, -{40,4,-1}, -{40,4,0}, -{40,4,1}, -{40,4,2}, -{40,4,3}, -{40,4,4}, -{40,4,5}, -{40,4,6}, -{40,4,7}, -{40,4,8}, -{40,4,9}, -{40,4,10}, -{40,4,11}, -{40,4,12}, -{40,4,13}, -{40,4,14}, -{40,4,15}, -{40,4,16}, -{40,4,17}, -{40,4,18}, -{40,4,19}, -{40,4,20}, -{40,4,21}, -{40,4,22}, -{40,4,23}, -{40,4,24}, -{40,4,25}, -{40,4,26}, -{40,4,27}, -{40,4,28}, -{40,4,29}, -{40,4,30}, -{40,4,31}, -{40,4,32}, -{40,4,33}, -{40,4,34}, -{40,4,35}, -{40,4,36}, -{40,4,37}, -{40,4,38}, -{40,4,39}, -{40,4,40}, -{40,4,41}, -{40,4,42}, -{40,4,43}, -{40,4,44}, -{40,4,45}, -{40,4,46}, -{40,4,47}, -{40,5,-45}, -{40,5,-44}, -{40,5,-43}, -{40,5,-42}, -{40,5,-41}, -{40,5,-40}, -{40,5,-39}, -{40,5,-38}, -{40,5,-37}, -{40,5,-36}, -{40,5,-35}, -{40,5,-34}, -{40,5,-33}, -{40,5,-32}, -{40,5,-31}, -{40,5,-30}, -{40,5,-29}, -{40,5,-28}, -{40,5,-27}, -{40,5,-26}, -{40,5,-25}, -{40,5,-24}, -{40,5,-23}, -{40,5,-22}, -{40,5,-21}, -{40,5,-20}, -{40,5,-19}, -{40,5,-18}, -{40,5,-17}, -{40,5,-16}, -{40,5,-15}, -{40,5,-14}, -{40,5,-13}, -{40,5,-12}, -{40,5,-11}, -{40,5,-10}, -{40,5,-9}, -{40,5,-8}, -{40,5,-7}, -{40,5,-6}, -{40,5,-5}, -{40,5,-4}, -{40,5,-3}, -{40,5,-2}, -{40,5,-1}, -{40,5,0}, -{40,5,1}, -{40,5,2}, -{40,5,3}, -{40,5,4}, -{40,5,5}, -{40,5,6}, -{40,5,7}, -{40,5,8}, -{40,5,9}, -{40,5,10}, -{40,5,11}, -{40,5,12}, -{40,5,13}, -{40,5,14}, -{40,5,15}, -{40,5,16}, -{40,5,17}, -{40,5,18}, -{40,5,19}, -{40,5,20}, -{40,5,21}, -{40,5,22}, -{40,5,23}, -{40,5,24}, -{40,5,25}, -{40,5,26}, -{40,5,27}, -{40,5,28}, -{40,5,29}, -{40,5,30}, -{40,5,31}, -{40,5,32}, -{40,5,33}, -{40,5,34}, -{40,5,35}, -{40,5,36}, -{40,5,37}, -{40,5,38}, -{40,5,39}, -{40,5,40}, -{40,5,41}, -{40,5,42}, -{40,5,43}, -{40,5,44}, -{40,5,45}, -{40,5,46}, -{40,5,47}, -{40,5,48}, -{40,6,-47}, -{40,6,-46}, -{40,6,-45}, -{40,6,-44}, -{40,6,-43}, -{40,6,-42}, -{40,6,-41}, -{40,6,-40}, -{40,6,-39}, -{40,6,-38}, -{40,6,-37}, -{40,6,-36}, -{40,6,-35}, -{40,6,-34}, -{40,6,-33}, -{40,6,-32}, -{40,6,-31}, -{40,6,-30}, -{40,6,-29}, -{40,6,-28}, -{40,6,-27}, -{40,6,-26}, -{40,6,-25}, -{40,6,-24}, -{40,6,-23}, -{40,6,-22}, -{40,6,-21}, -{40,6,-20}, -{40,6,-19}, -{40,6,-18}, -{40,6,-17}, -{40,6,-16}, -{40,6,-15}, -{40,6,-14}, -{40,6,-13}, -{40,6,-12}, -{40,6,-11}, -{40,6,-10}, -{40,6,-9}, -{40,6,-8}, -{40,6,-7}, -{40,6,-6}, -{40,6,-5}, -{40,6,-4}, -{40,6,-3}, -{40,6,-2}, -{40,6,-1}, -{40,6,0}, -{40,6,1}, -{40,6,2}, -{40,6,3}, -{40,6,4}, -{40,6,5}, -{40,6,6}, -{40,6,7}, -{40,6,8}, -{40,6,9}, -{40,6,10}, -{40,6,11}, -{40,6,12}, -{40,6,13}, -{40,6,14}, -{40,6,15}, -{40,6,16}, -{40,6,17}, -{40,6,18}, -{40,6,19}, -{40,6,20}, -{40,6,21}, -{40,6,22}, -{40,6,23}, -{40,6,24}, -{40,6,25}, -{40,6,26}, -{40,6,27}, -{40,6,28}, -{40,6,29}, -{40,6,30}, -{40,6,31}, -{40,6,32}, -{40,6,33}, -{40,6,34}, -{40,6,35}, -{40,6,36}, -{40,6,37}, -{40,6,38}, -{40,6,39}, -{40,6,40}, -{40,6,41}, -{40,6,42}, -{40,6,43}, -{40,6,44}, -{40,6,45}, -{40,6,46}, -{40,6,47}, -{40,6,48}, -{40,7,-48}, -{40,7,-47}, -{40,7,-46}, -{40,7,-45}, -{40,7,-44}, -{40,7,-43}, -{40,7,-42}, -{40,7,-41}, -{40,7,-40}, -{40,7,-39}, -{40,7,-38}, -{40,7,-37}, -{40,7,-36}, -{40,7,-35}, -{40,7,-34}, -{40,7,-33}, -{40,7,-32}, -{40,7,-31}, -{40,7,-30}, -{40,7,-29}, -{40,7,-28}, -{40,7,-27}, -{40,7,-26}, -{40,7,-25}, -{40,7,-24}, -{40,7,-23}, -{40,7,-22}, -{40,7,-21}, -{40,7,-20}, -{40,7,-19}, -{40,7,-18}, -{40,7,-17}, -{40,7,-16}, -{40,7,-15}, -{40,7,-14}, -{40,7,-13}, -{40,7,-12}, -{40,7,-11}, -{40,7,-10}, -{40,7,-9}, -{40,7,-8}, -{40,7,-7}, -{40,7,-6}, -{40,7,-5}, -{40,7,-4}, -{40,7,-3}, -{40,7,-2}, -{40,7,-1}, -{40,7,0}, -{40,7,1}, -{40,7,2}, -{40,7,3}, -{40,7,4}, -{40,7,5}, -{40,7,6}, -{40,7,7}, -{40,7,8}, -{40,7,9}, -{40,7,10}, -{40,7,11}, -{40,7,12}, -{40,7,13}, -{40,7,14}, -{40,7,15}, -{40,7,16}, -{40,7,17}, -{40,7,18}, -{40,7,19}, -{40,7,20}, -{40,7,21}, -{40,7,22}, -{40,7,23}, -{40,7,24}, -{40,7,25}, -{40,7,26}, -{40,7,27}, -{40,7,28}, -{40,7,29}, -{40,7,30}, -{40,7,31}, -{40,7,32}, -{40,7,33}, -{40,7,34}, -{40,7,35}, -{40,7,36}, -{40,7,37}, -{40,7,38}, -{40,7,39}, -{40,7,40}, -{40,7,41}, -{40,7,42}, -{40,7,43}, -{40,7,44}, -{40,7,45}, -{40,7,46}, -{40,7,47}, -{40,7,48}, -{40,8,-49}, -{40,8,-48}, -{40,8,-47}, -{40,8,-46}, -{40,8,-45}, -{40,8,-44}, -{40,8,-43}, -{40,8,-42}, -{40,8,-41}, -{40,8,-40}, -{40,8,-39}, -{40,8,-38}, -{40,8,-37}, -{40,8,-36}, -{40,8,-35}, -{40,8,-34}, -{40,8,-33}, -{40,8,-32}, -{40,8,-31}, -{40,8,-30}, -{40,8,-29}, -{40,8,-28}, -{40,8,-27}, -{40,8,-26}, -{40,8,-25}, -{40,8,-24}, -{40,8,-23}, -{40,8,-22}, -{40,8,-21}, -{40,8,-20}, -{40,8,-19}, -{40,8,-18}, -{40,8,-17}, -{40,8,-16}, -{40,8,-15}, -{40,8,-14}, -{40,8,-13}, -{40,8,-12}, -{40,8,-11}, -{40,8,-10}, -{40,8,-9}, -{40,8,-8}, -{40,8,-7}, -{40,8,-6}, -{40,8,-5}, -{40,8,-4}, -{40,8,-3}, -{40,8,-2}, -{40,8,-1}, -{40,8,0}, -{40,8,1}, -{40,8,2}, -{40,8,3}, -{40,8,4}, -{40,8,5}, -{40,8,6}, -{40,8,7}, -{40,8,8}, -{40,8,9}, -{40,8,10}, -{40,8,11}, -{40,8,12}, -{40,8,13}, -{40,8,14}, -{40,8,15}, -{40,8,16}, -{40,8,17}, -{40,8,18}, -{40,8,19}, -{40,8,20}, -{40,8,21}, -{40,8,22}, -{40,8,23}, -{40,8,24}, -{40,8,25}, -{40,8,26}, -{40,8,27}, -{40,8,28}, -{40,8,29}, -{40,8,30}, -{40,8,31}, -{40,8,32}, -{40,8,33}, -{40,8,34}, -{40,8,35}, -{40,8,36}, -{40,8,37}, -{40,8,38}, -{40,8,39}, -{40,8,40}, -{40,8,41}, -{40,8,42}, -{40,8,43}, -{40,8,44}, -{40,8,45}, -{40,8,46}, -{40,8,47}, -{40,8,48}, -{40,9,-50}, -{40,9,-49}, -{40,9,-48}, -{40,9,-47}, -{40,9,-46}, -{40,9,-45}, -{40,9,-44}, -{40,9,-43}, -{40,9,-42}, -{40,9,-41}, -{40,9,-40}, -{40,9,-39}, -{40,9,-38}, -{40,9,-37}, -{40,9,-36}, -{40,9,-35}, -{40,9,-34}, -{40,9,-33}, -{40,9,-32}, -{40,9,-31}, -{40,9,-30}, -{40,9,-29}, -{40,9,-28}, -{40,9,-27}, -{40,9,-26}, -{40,9,-25}, -{40,9,-24}, -{40,9,-23}, -{40,9,-22}, -{40,9,-21}, -{40,9,-20}, -{40,9,-19}, -{40,9,-18}, -{40,9,-17}, -{40,9,-16}, -{40,9,-15}, -{40,9,-14}, -{40,9,-13}, -{40,9,-12}, -{40,9,-11}, -{40,9,-10}, -{40,9,-9}, -{40,9,-8}, -{40,9,-7}, -{40,9,-6}, -{40,9,-5}, -{40,9,-4}, -{40,9,-3}, -{40,9,-2}, -{40,9,-1}, -{40,9,0}, -{40,9,1}, -{40,9,2}, -{40,9,3}, -{40,9,4}, -{40,9,5}, -{40,9,6}, -{40,9,7}, -{40,9,8}, -{40,9,9}, -{40,9,10}, -{40,9,11}, -{40,9,12}, -{40,9,13}, -{40,9,14}, -{40,9,15}, -{40,9,16}, -{40,9,17}, -{40,9,18}, -{40,9,19}, -{40,9,20}, -{40,9,21}, -{40,9,22}, -{40,9,23}, -{40,9,24}, -{40,9,25}, -{40,9,26}, -{40,9,27}, -{40,9,28}, -{40,9,29}, -{40,9,30}, -{40,9,31}, -{40,9,32}, -{40,9,33}, -{40,9,34}, -{40,9,35}, -{40,9,36}, -{40,9,37}, -{40,9,38}, -{40,9,39}, -{40,9,40}, -{40,9,41}, -{40,9,42}, -{40,9,43}, -{40,9,44}, -{40,9,45}, -{40,9,46}, -{40,9,47}, -{40,9,48}, -{40,10,-51}, -{40,10,-50}, -{40,10,-49}, -{40,10,-48}, -{40,10,-47}, -{40,10,-46}, -{40,10,-45}, -{40,10,-44}, -{40,10,-43}, -{40,10,-42}, -{40,10,-41}, -{40,10,-40}, -{40,10,-39}, -{40,10,-38}, -{40,10,-37}, -{40,10,-36}, -{40,10,-35}, -{40,10,-34}, -{40,10,-33}, -{40,10,-32}, -{40,10,-31}, -{40,10,-30}, -{40,10,-29}, -{40,10,-28}, -{40,10,-27}, -{40,10,-26}, -{40,10,-25}, -{40,10,-24}, -{40,10,-23}, -{40,10,-22}, -{40,10,-21}, -{40,10,-20}, -{40,10,-19}, -{40,10,-18}, -{40,10,-17}, -{40,10,-16}, -{40,10,-15}, -{40,10,-14}, -{40,10,-13}, -{40,10,-12}, -{40,10,-11}, -{40,10,-10}, -{40,10,-9}, -{40,10,-8}, -{40,10,-7}, -{40,10,-6}, -{40,10,-5}, -{40,10,-4}, -{40,10,-3}, -{40,10,-2}, -{40,10,-1}, -{40,10,0}, -{40,10,1}, -{40,10,2}, -{40,10,3}, -{40,10,4}, -{40,10,5}, -{40,10,6}, -{40,10,7}, -{40,10,8}, -{40,10,9}, -{40,10,10}, -{40,10,11}, -{40,10,12}, -{40,10,13}, -{40,10,14}, -{40,10,15}, -{40,10,16}, -{40,10,17}, -{40,10,18}, -{40,10,19}, -{40,10,20}, -{40,10,21}, -{40,10,22}, -{40,10,23}, -{40,10,24}, -{40,10,25}, -{40,10,26}, -{40,10,27}, -{40,10,28}, -{40,10,29}, -{40,10,30}, -{40,10,31}, -{40,10,32}, -{40,10,33}, -{40,10,34}, -{40,10,35}, -{40,10,36}, -{40,10,37}, -{40,10,38}, -{40,10,39}, -{40,10,40}, -{40,10,41}, -{40,10,42}, -{40,10,43}, -{40,10,44}, -{40,10,45}, -{40,10,46}, -{40,10,47}, -{40,10,48}, -{40,11,-52}, -{40,11,-51}, -{40,11,-50}, -{40,11,-49}, -{40,11,-48}, -{40,11,-47}, -{40,11,-46}, -{40,11,-45}, -{40,11,-44}, -{40,11,-43}, -{40,11,-42}, -{40,11,-41}, -{40,11,-40}, -{40,11,-39}, -{40,11,-38}, -{40,11,-37}, -{40,11,-36}, -{40,11,-35}, -{40,11,-34}, -{40,11,-33}, -{40,11,-32}, -{40,11,-31}, -{40,11,-30}, -{40,11,-29}, -{40,11,-28}, -{40,11,-27}, -{40,11,-26}, -{40,11,-25}, -{40,11,-24}, -{40,11,-23}, -{40,11,-22}, -{40,11,-21}, -{40,11,-20}, -{40,11,-19}, -{40,11,-18}, -{40,11,-17}, -{40,11,-16}, -{40,11,-15}, -{40,11,-14}, -{40,11,-13}, -{40,11,-12}, -{40,11,-11}, -{40,11,-10}, -{40,11,-9}, -{40,11,-8}, -{40,11,-7}, -{40,11,-6}, -{40,11,-5}, -{40,11,-4}, -{40,11,-3}, -{40,11,-2}, -{40,11,-1}, -{40,11,0}, -{40,11,1}, -{40,11,2}, -{40,11,3}, -{40,11,4}, -{40,11,5}, -{40,11,6}, -{40,11,7}, -{40,11,8}, -{40,11,9}, -{40,11,10}, -{40,11,11}, -{40,11,12}, -{40,11,13}, -{40,11,14}, -{40,11,15}, -{40,11,16}, -{40,11,17}, -{40,11,18}, -{40,11,19}, -{40,11,20}, -{40,11,21}, -{40,11,22}, -{40,11,23}, -{40,11,24}, -{40,11,25}, -{40,11,26}, -{40,11,27}, -{40,11,28}, -{40,11,29}, -{40,11,30}, -{40,11,31}, -{40,11,32}, -{40,11,33}, -{40,11,34}, -{40,11,35}, -{40,11,36}, -{40,11,37}, -{40,11,38}, -{40,11,39}, -{40,11,40}, -{40,11,41}, -{40,11,42}, -{40,11,43}, -{40,11,44}, -{40,11,45}, -{40,11,46}, -{40,11,47}, -{40,11,48}, -{40,12,-53}, -{40,12,-52}, -{40,12,-51}, -{40,12,-50}, -{40,12,-49}, -{40,12,-48}, -{40,12,-47}, -{40,12,-46}, -{40,12,-45}, -{40,12,-44}, -{40,12,-43}, -{40,12,-42}, -{40,12,-41}, -{40,12,-40}, -{40,12,-39}, -{40,12,-38}, -{40,12,-37}, -{40,12,-36}, -{40,12,-35}, -{40,12,-34}, -{40,12,-33}, -{40,12,-32}, -{40,12,-31}, -{40,12,-30}, -{40,12,-29}, -{40,12,-28}, -{40,12,-27}, -{40,12,-26}, -{40,12,-25}, -{40,12,-24}, -{40,12,-23}, -{40,12,-22}, -{40,12,-21}, -{40,12,-20}, -{40,12,-19}, -{40,12,-18}, -{40,12,-17}, -{40,12,-16}, -{40,12,-15}, -{40,12,-14}, -{40,12,-13}, -{40,12,-12}, -{40,12,-11}, -{40,12,-10}, -{40,12,-9}, -{40,12,-8}, -{40,12,-7}, -{40,12,-6}, -{40,12,-5}, -{40,12,-4}, -{40,12,-3}, -{40,12,-2}, -{40,12,-1}, -{40,12,0}, -{40,12,1}, -{40,12,2}, -{40,12,3}, -{40,12,4}, -{40,12,5}, -{40,12,6}, -{40,12,7}, -{40,12,8}, -{40,12,9}, -{40,12,10}, -{40,12,11}, -{40,12,12}, -{40,12,13}, -{40,12,14}, -{40,12,15}, -{40,12,16}, -{40,12,17}, -{40,12,18}, -{40,12,19}, -{40,12,20}, -{40,12,21}, -{40,12,22}, -{40,12,23}, -{40,12,24}, -{40,12,25}, -{40,12,26}, -{40,12,27}, -{40,12,28}, -{40,12,29}, -{40,12,30}, -{40,12,31}, -{40,12,32}, -{40,12,33}, -{40,12,34}, -{40,12,35}, -{40,12,36}, -{40,12,37}, -{40,12,38}, -{40,12,39}, -{40,12,40}, -{40,12,41}, -{40,12,42}, -{40,12,43}, -{40,12,44}, -{40,12,45}, -{40,12,46}, -{40,12,47}, -{40,12,48}, -{40,13,-54}, -{40,13,-53}, -{40,13,-52}, -{40,13,-51}, -{40,13,-50}, -{40,13,-49}, -{40,13,-48}, -{40,13,-47}, -{40,13,-46}, -{40,13,-45}, -{40,13,-44}, -{40,13,-43}, -{40,13,-42}, -{40,13,-41}, -{40,13,-40}, -{40,13,-39}, -{40,13,-38}, -{40,13,-37}, -{40,13,-36}, -{40,13,-35}, -{40,13,-34}, -{40,13,-33}, -{40,13,-32}, -{40,13,-31}, -{40,13,-30}, -{40,13,-29}, -{40,13,-28}, -{40,13,-27}, -{40,13,-26}, -{40,13,-25}, -{40,13,-24}, -{40,13,-23}, -{40,13,-22}, -{40,13,-21}, -{40,13,-20}, -{40,13,-19}, -{40,13,-18}, -{40,13,-17}, -{40,13,-16}, -{40,13,-15}, -{40,13,-14}, -{40,13,-13}, -{40,13,-12}, -{40,13,-11}, -{40,13,-10}, -{40,13,-9}, -{40,13,-8}, -{40,13,-7}, -{40,13,-6}, -{40,13,-5}, -{40,13,-4}, -{40,13,-3}, -{40,13,-2}, -{40,13,-1}, -{40,13,0}, -{40,13,1}, -{40,13,2}, -{40,13,3}, -{40,13,4}, -{40,13,5}, -{40,13,6}, -{40,13,7}, -{40,13,8}, -{40,13,9}, -{40,13,10}, -{40,13,11}, -{40,13,12}, -{40,13,13}, -{40,13,14}, -{40,13,15}, -{40,13,16}, -{40,13,17}, -{40,13,18}, -{40,13,19}, -{40,13,20}, -{40,13,21}, -{40,13,22}, -{40,13,23}, -{40,13,24}, -{40,13,25}, -{40,13,26}, -{40,13,27}, -{40,13,28}, -{40,13,29}, -{40,13,30}, -{40,13,31}, -{40,13,32}, -{40,13,33}, -{40,13,34}, -{40,13,35}, -{40,13,36}, -{40,13,37}, -{40,13,38}, -{40,13,39}, -{40,13,40}, -{40,13,41}, -{40,13,42}, -{40,13,43}, -{40,13,44}, -{40,13,45}, -{40,13,46}, -{40,13,47}, -{40,13,48}, -{40,14,-55}, -{40,14,-54}, -{40,14,-53}, -{40,14,-52}, -{40,14,-51}, -{40,14,-50}, -{40,14,-49}, -{40,14,-48}, -{40,14,-47}, -{40,14,-46}, -{40,14,-45}, -{40,14,-44}, -{40,14,-43}, -{40,14,-42}, -{40,14,-41}, -{40,14,-40}, -{40,14,-39}, -{40,14,-38}, -{40,14,-37}, -{40,14,-36}, -{40,14,-35}, -{40,14,-34}, -{40,14,-33}, -{40,14,-32}, -{40,14,-31}, -{40,14,-30}, -{40,14,-29}, -{40,14,-28}, -{40,14,-27}, -{40,14,-26}, -{40,14,-25}, -{40,14,-24}, -{40,14,-23}, -{40,14,-22}, -{40,14,-21}, -{40,14,-20}, -{40,14,-19}, -{40,14,-18}, -{40,14,-17}, -{40,14,-16}, -{40,14,-15}, -{40,14,-14}, -{40,14,-13}, -{40,14,-12}, -{40,14,-11}, -{40,14,-10}, -{40,14,-9}, -{40,14,-8}, -{40,14,-7}, -{40,14,-6}, -{40,14,-5}, -{40,14,-4}, -{40,14,-3}, -{40,14,-2}, -{40,14,-1}, -{40,14,0}, -{40,14,1}, -{40,14,2}, -{40,14,3}, -{40,14,4}, -{40,14,5}, -{40,14,6}, -{40,14,7}, -{40,14,8}, -{40,14,9}, -{40,14,10}, -{40,14,11}, -{40,14,12}, -{40,14,13}, -{40,14,14}, -{40,14,15}, -{40,14,16}, -{40,14,17}, -{40,14,18}, -{40,14,19}, -{40,14,20}, -{40,14,21}, -{40,14,22}, -{40,14,23}, -{40,14,24}, -{40,14,25}, -{40,14,26}, -{40,14,27}, -{40,14,28}, -{40,14,29}, -{40,14,30}, -{40,14,31}, -{40,14,32}, -{40,14,33}, -{40,14,34}, -{40,14,35}, -{40,14,36}, -{40,14,37}, -{40,14,38}, -{40,14,39}, -{40,14,40}, -{40,14,41}, -{40,14,42}, -{40,14,43}, -{40,14,44}, -{40,14,45}, -{40,14,46}, -{40,14,47}, -{40,14,48}, -{40,15,-56}, -{40,15,-55}, -{40,15,-54}, -{40,15,-53}, -{40,15,-52}, -{40,15,-51}, -{40,15,-50}, -{40,15,-49}, -{40,15,-48}, -{40,15,-47}, -{40,15,-46}, -{40,15,-45}, -{40,15,-44}, -{40,15,-43}, -{40,15,-42}, -{40,15,-41}, -{40,15,-40}, -{40,15,-39}, -{40,15,-38}, -{40,15,-37}, -{40,15,-36}, -{40,15,-35}, -{40,15,-34}, -{40,15,-33}, -{40,15,-32}, -{40,15,-31}, -{40,15,-30}, -{40,15,-29}, -{40,15,-28}, -{40,15,-27}, -{40,15,-26}, -{40,15,-25}, -{40,15,-24}, -{40,15,-23}, -{40,15,-22}, -{40,15,-21}, -{40,15,-20}, -{40,15,-19}, -{40,15,-18}, -{40,15,-17}, -{40,15,-16}, -{40,15,-15}, -{40,15,-14}, -{40,15,-13}, -{40,15,-12}, -{40,15,-11}, -{40,15,-10}, -{40,15,-9}, -{40,15,-8}, -{40,15,-7}, -{40,15,-6}, -{40,15,-5}, -{40,15,-4}, -{40,15,-3}, -{40,15,-2}, -{40,15,-1}, -{40,15,0}, -{40,15,1}, -{40,15,2}, -{40,15,3}, -{40,15,4}, -{40,15,5}, -{40,15,6}, -{40,15,7}, -{40,15,8}, -{40,15,9}, -{40,15,10}, -{40,15,11}, -{40,15,12}, -{40,15,13}, -{40,15,14}, -{40,15,15}, -{40,15,16}, -{40,15,17}, -{40,15,18}, -{40,15,19}, -{40,15,20}, -{40,15,21}, -{40,15,22}, -{40,15,23}, -{40,15,24}, -{40,15,25}, -{40,15,26}, -{40,15,27}, -{40,15,28}, -{40,15,29}, -{40,15,30}, -{40,15,31}, -{40,15,32}, -{40,15,33}, -{40,15,34}, -{40,15,35}, -{40,15,36}, -{40,15,37}, -{40,15,38}, -{40,15,39}, -{40,15,40}, -{40,15,41}, -{40,15,42}, -{40,15,43}, -{40,15,44}, -{40,15,45}, -{40,15,46}, -{40,15,47}, -{40,15,48}, -{40,16,-57}, -{40,16,-56}, -{40,16,-55}, -{40,16,-54}, -{40,16,-53}, -{40,16,-52}, -{40,16,-51}, -{40,16,-50}, -{40,16,-49}, -{40,16,-48}, -{40,16,-47}, -{40,16,-46}, -{40,16,-45}, -{40,16,-44}, -{40,16,-43}, -{40,16,-42}, -{40,16,-41}, -{40,16,-40}, -{40,16,-39}, -{40,16,-38}, -{40,16,-37}, -{40,16,-36}, -{40,16,-35}, -{40,16,-34}, -{40,16,-33}, -{40,16,-32}, -{40,16,-31}, -{40,16,-30}, -{40,16,-29}, -{40,16,-28}, -{40,16,-27}, -{40,16,-26}, -{40,16,-25}, -{40,16,-24}, -{40,16,-23}, -{40,16,-22}, -{40,16,-21}, -{40,16,-20}, -{40,16,-19}, -{40,16,-18}, -{40,16,-17}, -{40,16,-16}, -{40,16,-15}, -{40,16,-14}, -{40,16,-13}, -{40,16,-12}, -{40,16,-11}, -{40,16,-10}, -{40,16,-9}, -{40,16,-8}, -{40,16,-7}, -{40,16,-6}, -{40,16,-5}, -{40,16,-4}, -{40,16,-3}, -{40,16,-2}, -{40,16,-1}, -{40,16,0}, -{40,16,1}, -{40,16,2}, -{40,16,3}, -{40,16,4}, -{40,16,5}, -{40,16,6}, -{40,16,7}, -{40,16,8}, -{40,16,9}, -{40,16,10}, -{40,16,11}, -{40,16,12}, -{40,16,13}, -{40,16,14}, -{40,16,15}, -{40,16,16}, -{40,16,17}, -{40,16,18}, -{40,16,19}, -{40,16,20}, -{40,16,21}, -{40,16,22}, -{40,16,23}, -{40,16,24}, -{40,16,25}, -{40,16,26}, -{40,16,27}, -{40,16,28}, -{40,16,29}, -{40,16,30}, -{40,16,31}, -{40,16,32}, -{40,16,33}, -{40,16,34}, -{40,16,35}, -{40,16,36}, -{40,16,37}, -{40,16,38}, -{40,16,39}, -{40,16,40}, -{40,16,41}, -{40,16,42}, -{40,16,43}, -{40,16,44}, -{40,16,45}, -{40,16,46}, -{40,16,47}, -{40,16,48}, -{40,17,-58}, -{40,17,-57}, -{40,17,-56}, -{40,17,-55}, -{40,17,-54}, -{40,17,-53}, -{40,17,-52}, -{40,17,-51}, -{40,17,-50}, -{40,17,-49}, -{40,17,-48}, -{40,17,-47}, -{40,17,-46}, -{40,17,-45}, -{40,17,-44}, -{40,17,-43}, -{40,17,-42}, -{40,17,-41}, -{40,17,-40}, -{40,17,-39}, -{40,17,-38}, -{40,17,-37}, -{40,17,-36}, -{40,17,-35}, -{40,17,-34}, -{40,17,-33}, -{40,17,-32}, -{40,17,-31}, -{40,17,-30}, -{40,17,-29}, -{40,17,-28}, -{40,17,-27}, -{40,17,-26}, -{40,17,-25}, -{40,17,-24}, -{40,17,-23}, -{40,17,-22}, -{40,17,-21}, -{40,17,-20}, -{40,17,-19}, -{40,17,-18}, -{40,17,-17}, -{40,17,-16}, -{40,17,-15}, -{40,17,-14}, -{40,17,-13}, -{40,17,-12}, -{40,17,-11}, -{40,17,-10}, -{40,17,-9}, -{40,17,-8}, -{40,17,-7}, -{40,17,-6}, -{40,17,-5}, -{40,17,-4}, -{40,17,-3}, -{40,17,-2}, -{40,17,-1}, -{40,17,0}, -{40,17,1}, -{40,17,2}, -{40,17,3}, -{40,17,4}, -{40,17,5}, -{40,17,6}, -{40,17,7}, -{40,17,8}, -{40,17,9}, -{40,17,10}, -{40,17,11}, -{40,17,12}, -{40,17,13}, -{40,17,14}, -{40,17,15}, -{40,17,16}, -{40,17,17}, -{40,17,18}, -{40,17,19}, -{40,17,20}, -{40,17,21}, -{40,17,22}, -{40,17,23}, -{40,17,24}, -{40,17,25}, -{40,17,26}, -{40,17,27}, -{40,17,28}, -{40,17,29}, -{40,17,30}, -{40,17,31}, -{40,17,32}, -{40,17,33}, -{40,17,34}, -{40,17,35}, -{40,17,36}, -{40,17,37}, -{40,17,38}, -{40,17,39}, -{40,17,40}, -{40,17,41}, -{40,17,42}, -{40,17,43}, -{40,17,44}, -{40,17,45}, -{40,17,46}, -{40,17,47}, -{40,17,48}, -{40,17,49}, -{40,18,-59}, -{40,18,-58}, -{40,18,-57}, -{40,18,-56}, -{40,18,-55}, -{40,18,-54}, -{40,18,-53}, -{40,18,-52}, -{40,18,-51}, -{40,18,-50}, -{40,18,-49}, -{40,18,-48}, -{40,18,-47}, -{40,18,-46}, -{40,18,-45}, -{40,18,-44}, -{40,18,-43}, -{40,18,-42}, -{40,18,-41}, -{40,18,-40}, -{40,18,-39}, -{40,18,-38}, -{40,18,-37}, -{40,18,-36}, -{40,18,-35}, -{40,18,-34}, -{40,18,-33}, -{40,18,-32}, -{40,18,-31}, -{40,18,-30}, -{40,18,-29}, -{40,18,-28}, -{40,18,-27}, -{40,18,-26}, -{40,18,-25}, -{40,18,-24}, -{40,18,-23}, -{40,18,-22}, -{40,18,-21}, -{40,18,-20}, -{40,18,-19}, -{40,18,-18}, -{40,18,-17}, -{40,18,-16}, -{40,18,-15}, -{40,18,-14}, -{40,18,-13}, -{40,18,-12}, -{40,18,-11}, -{40,18,-10}, -{40,18,-9}, -{40,18,-8}, -{40,18,-7}, -{40,18,-6}, -{40,18,-5}, -{40,18,-4}, -{40,18,-3}, -{40,18,-2}, -{40,18,-1}, -{40,18,0}, -{40,18,1}, -{40,18,2}, -{40,18,3}, -{40,18,4}, -{40,18,5}, -{40,18,6}, -{40,18,7}, -{40,18,8}, -{40,18,9}, -{40,18,10}, -{40,18,11}, -{40,18,12}, -{40,18,13}, -{40,18,14}, -{40,18,15}, -{40,18,16}, -{40,18,17}, -{40,18,18}, -{40,18,19}, -{40,18,20}, -{40,18,21}, -{40,18,22}, -{40,18,23}, -{40,18,24}, -{40,18,25}, -{40,18,26}, -{40,18,27}, -{40,18,28}, -{40,18,29}, -{40,18,30}, -{40,18,31}, -{40,18,32}, -{40,18,33}, -{40,18,34}, -{40,18,35}, -{40,18,36}, -{40,18,37}, -{40,18,38}, -{40,18,39}, -{40,18,40}, -{40,18,41}, -{40,18,42}, -{40,18,43}, -{40,18,44}, -{40,18,45}, -{40,18,46}, -{40,18,47}, -{40,18,48}, -{40,18,49}, -{40,19,-60}, -{40,19,-59}, -{40,19,-58}, -{40,19,-57}, -{40,19,-56}, -{40,19,-55}, -{40,19,-54}, -{40,19,-53}, -{40,19,-52}, -{40,19,-51}, -{40,19,-50}, -{40,19,-49}, -{40,19,-48}, -{40,19,-47}, -{40,19,-46}, -{40,19,-45}, -{40,19,-44}, -{40,19,-43}, -{40,19,-42}, -{40,19,-41}, -{40,19,-40}, -{40,19,-39}, -{40,19,-38}, -{40,19,-37}, -{40,19,-36}, -{40,19,-35}, -{40,19,-34}, -{40,19,-33}, -{40,19,-32}, -{40,19,-31}, -{40,19,-30}, -{40,19,-29}, -{40,19,-28}, -{40,19,-27}, -{40,19,-26}, -{40,19,-25}, -{40,19,-24}, -{40,19,-23}, -{40,19,-22}, -{40,19,-21}, -{40,19,-20}, -{40,19,-19}, -{40,19,-18}, -{40,19,-17}, -{40,19,-16}, -{40,19,-15}, -{40,19,-14}, -{40,19,-13}, -{40,19,-12}, -{40,19,-11}, -{40,19,-10}, -{40,19,-9}, -{40,19,-8}, -{40,19,-7}, -{40,19,-6}, -{40,19,-5}, -{40,19,-4}, -{40,19,-3}, -{40,19,-2}, -{40,19,-1}, -{40,19,0}, -{40,19,1}, -{40,19,2}, -{40,19,3}, -{40,19,4}, -{40,19,5}, -{40,19,6}, -{40,19,7}, -{40,19,8}, -{40,19,9}, -{40,19,10}, -{40,19,11}, -{40,19,12}, -{40,19,13}, -{40,19,14}, -{40,19,15}, -{40,19,16}, -{40,19,17}, -{40,19,18}, -{40,19,19}, -{40,19,20}, -{40,19,21}, -{40,19,22}, -{40,19,23}, -{40,19,24}, -{40,19,25}, -{40,19,26}, -{40,19,27}, -{40,19,28}, -{40,19,29}, -{40,19,30}, -{40,19,31}, -{40,19,32}, -{40,19,33}, -{40,19,34}, -{40,19,35}, -{40,19,36}, -{40,19,37}, -{40,19,38}, -{40,19,39}, -{40,19,40}, -{40,19,41}, -{40,19,42}, -{40,19,43}, -{40,19,44}, -{40,19,45}, -{40,19,46}, -{40,19,47}, -{40,19,48}, -{40,19,49}, -{40,20,-61}, -{40,20,-60}, -{40,20,-59}, -{40,20,-58}, -{40,20,-57}, -{40,20,-56}, -{40,20,-55}, -{40,20,-54}, -{40,20,-53}, -{40,20,-52}, -{40,20,-51}, -{40,20,-50}, -{40,20,-49}, -{40,20,-48}, -{40,20,-47}, -{40,20,-46}, -{40,20,-45}, -{40,20,-44}, -{40,20,-43}, -{40,20,-42}, -{40,20,-41}, -{40,20,-40}, -{40,20,-39}, -{40,20,-38}, -{40,20,-37}, -{40,20,-36}, -{40,20,-35}, -{40,20,-34}, -{40,20,-33}, -{40,20,-32}, -{40,20,-31}, -{40,20,-30}, -{40,20,-29}, -{40,20,-28}, -{40,20,-27}, -{40,20,-26}, -{40,20,-25}, -{40,20,-24}, -{40,20,-23}, -{40,20,-22}, -{40,20,-21}, -{40,20,-20}, -{40,20,-19}, -{40,20,-18}, -{40,20,-17}, -{40,20,-16}, -{40,20,-15}, -{40,20,-14}, -{40,20,-13}, -{40,20,-12}, -{40,20,-11}, -{40,20,-10}, -{40,20,-9}, -{40,20,-8}, -{40,20,-7}, -{40,20,-6}, -{40,20,-5}, -{40,20,-4}, -{40,20,-3}, -{40,20,-2}, -{40,20,-1}, -{40,20,0}, -{40,20,1}, -{40,20,2}, -{40,20,3}, -{40,20,4}, -{40,20,5}, -{40,20,6}, -{40,20,7}, -{40,20,8}, -{40,20,9}, -{40,20,10}, -{40,20,11}, -{40,20,12}, -{40,20,13}, -{40,20,14}, -{40,20,15}, -{40,20,16}, -{40,20,17}, -{40,20,18}, -{40,20,19}, -{40,20,20}, -{40,20,21}, -{40,20,22}, -{40,20,23}, -{40,20,24}, -{40,20,25}, -{40,20,26}, -{40,20,27}, -{40,20,28}, -{40,20,29}, -{40,20,30}, -{40,20,31}, -{40,20,32}, -{40,20,33}, -{40,20,34}, -{40,20,35}, -{40,20,36}, -{40,20,37}, -{40,20,38}, -{40,20,39}, -{40,20,40}, -{40,20,41}, -{40,20,42}, -{40,20,43}, -{40,20,44}, -{40,20,45}, -{40,20,46}, -{40,20,47}, -{40,20,48}, -{40,20,49}, -{40,21,-62}, -{40,21,-61}, -{40,21,-60}, -{40,21,-59}, -{40,21,-58}, -{40,21,-57}, -{40,21,-56}, -{40,21,-55}, -{40,21,-54}, -{40,21,-53}, -{40,21,-52}, -{40,21,-51}, -{40,21,-50}, -{40,21,-49}, -{40,21,-48}, -{40,21,-47}, -{40,21,-46}, -{40,21,-45}, -{40,21,-44}, -{40,21,-43}, -{40,21,-42}, -{40,21,-41}, -{40,21,-40}, -{40,21,-39}, -{40,21,-38}, -{40,21,-37}, -{40,21,-36}, -{40,21,-35}, -{40,21,-34}, -{40,21,-33}, -{40,21,-32}, -{40,21,-31}, -{40,21,-30}, -{40,21,-29}, -{40,21,-28}, -{40,21,-27}, -{40,21,-26}, -{40,21,-25}, -{40,21,-24}, -{40,21,-23}, -{40,21,-22}, -{40,21,-21}, -{40,21,-20}, -{40,21,-19}, -{40,21,-18}, -{40,21,-17}, -{40,21,-16}, -{40,21,-15}, -{40,21,-14}, -{40,21,-13}, -{40,21,-12}, -{40,21,-11}, -{40,21,-10}, -{40,21,-9}, -{40,21,-8}, -{40,21,-7}, -{40,21,-6}, -{40,21,-5}, -{40,21,-4}, -{40,21,-3}, -{40,21,-2}, -{40,21,-1}, -{40,21,0}, -{40,21,1}, -{40,21,2}, -{40,21,3}, -{40,21,4}, -{40,21,5}, -{40,21,6}, -{40,21,7}, -{40,21,8}, -{40,21,9}, -{40,21,10}, -{40,21,11}, -{40,21,12}, -{40,21,13}, -{40,21,14}, -{40,21,15}, -{40,21,16}, -{40,21,17}, -{40,21,18}, -{40,21,19}, -{40,21,20}, -{40,21,21}, -{40,21,22}, -{40,21,23}, -{40,21,24}, -{40,21,25}, -{40,21,26}, -{40,21,27}, -{40,21,28}, -{40,21,29}, -{40,21,30}, -{40,21,31}, -{40,21,32}, -{40,21,33}, -{40,21,34}, -{40,21,35}, -{40,21,36}, -{40,21,37}, -{40,21,38}, -{40,21,39}, -{40,21,40}, -{40,21,41}, -{40,21,42}, -{40,21,43}, -{40,21,44}, -{40,21,45}, -{40,21,46}, -{40,21,47}, -{40,21,48}, -{40,21,49}, -{40,22,-63}, -{40,22,-62}, -{40,22,-61}, -{40,22,-60}, -{40,22,-59}, -{40,22,-58}, -{40,22,-57}, -{40,22,-56}, -{40,22,-55}, -{40,22,-54}, -{40,22,-53}, -{40,22,-52}, -{40,22,-51}, -{40,22,-50}, -{40,22,-49}, -{40,22,-48}, -{40,22,-47}, -{40,22,-46}, -{40,22,-45}, -{40,22,-44}, -{40,22,-43}, -{40,22,-42}, -{40,22,-41}, -{40,22,-40}, -{40,22,-39}, -{40,22,-38}, -{40,22,-37}, -{40,22,-36}, -{40,22,-35}, -{40,22,-34}, -{40,22,-33}, -{40,22,-32}, -{40,22,-31}, -{40,22,-30}, -{40,22,-29}, -{40,22,-28}, -{40,22,-27}, -{40,22,-26}, -{40,22,-25}, -{40,22,-24}, -{40,22,-23}, -{40,22,-22}, -{40,22,-21}, -{40,22,-20}, -{40,22,-19}, -{40,22,-18}, -{40,22,-17}, -{40,22,-16}, -{40,22,-15}, -{40,22,-14}, -{40,22,-13}, -{40,22,-12}, -{40,22,-11}, -{40,22,-10}, -{40,22,-9}, -{40,22,-8}, -{40,22,-7}, -{40,22,-6}, -{40,22,-5}, -{40,22,-4}, -{40,22,-3}, -{40,22,-2}, -{40,22,-1}, -{40,22,0}, -{40,22,1}, -{40,22,2}, -{40,22,3}, -{40,22,4}, -{40,22,5}, -{40,22,6}, -{40,22,7}, -{40,22,8}, -{40,22,9}, -{40,22,10}, -{40,22,11}, -{40,22,12}, -{40,22,13}, -{40,22,14}, -{40,22,15}, -{40,22,16}, -{40,22,17}, -{40,22,18}, -{40,22,19}, -{40,22,20}, -{40,22,21}, -{40,22,22}, -{40,22,23}, -{40,22,24}, -{40,22,25}, -{40,22,26}, -{40,22,27}, -{40,22,28}, -{40,22,29}, -{40,22,30}, -{40,22,31}, -{40,22,32}, -{40,22,33}, -{40,22,34}, -{40,22,35}, -{40,22,36}, -{40,22,37}, -{40,22,38}, -{40,22,39}, -{40,22,40}, -{40,22,41}, -{40,22,42}, -{40,22,43}, -{40,22,44}, -{40,22,45}, -{40,22,46}, -{40,22,47}, -{40,22,48}, -{40,22,49}, -{40,23,-64}, -{40,23,-63}, -{40,23,-62}, -{40,23,-61}, -{40,23,-60}, -{40,23,-59}, -{40,23,-58}, -{40,23,-57}, -{40,23,-56}, -{40,23,-55}, -{40,23,-54}, -{40,23,-53}, -{40,23,-52}, -{40,23,-51}, -{40,23,-50}, -{40,23,-49}, -{40,23,-48}, -{40,23,-47}, -{40,23,-46}, -{40,23,-45}, -{40,23,-44}, -{40,23,-43}, -{40,23,-42}, -{40,23,-41}, -{40,23,-40}, -{40,23,-39}, -{40,23,-38}, -{40,23,-37}, -{40,23,-36}, -{40,23,-35}, -{40,23,-34}, -{40,23,-33}, -{40,23,-32}, -{40,23,-31}, -{40,23,-30}, -{40,23,-29}, -{40,23,-28}, -{40,23,-27}, -{40,23,-26}, -{40,23,-25}, -{40,23,-24}, -{40,23,-23}, -{40,23,-22}, -{40,23,-21}, -{40,23,-20}, -{40,23,-19}, -{40,23,-18}, -{40,23,-17}, -{40,23,-16}, -{40,23,-15}, -{40,23,-14}, -{40,23,-13}, -{40,23,-12}, -{40,23,-11}, -{40,23,-10}, -{40,23,-9}, -{40,23,-8}, -{40,23,-7}, -{40,23,-6}, -{40,23,-5}, -{40,23,-4}, -{40,23,-3}, -{40,23,-2}, -{40,23,-1}, -{40,23,0}, -{40,23,1}, -{40,23,2}, -{40,23,3}, -{40,23,4}, -{40,23,5}, -{40,23,6}, -{40,23,7}, -{40,23,8}, -{40,23,9}, -{40,23,10}, -{40,23,11}, -{40,23,12}, -{40,23,13}, -{40,23,14}, -{40,23,15}, -{40,23,16}, -{40,23,17}, -{40,23,18}, -{40,23,19}, -{40,23,20}, -{40,23,21}, -{40,23,22}, -{40,23,23}, -{40,23,24}, -{40,23,25}, -{40,23,26}, -{40,23,27}, -{40,23,28}, -{40,23,29}, -{40,23,30}, -{40,23,31}, -{40,23,32}, -{40,23,33}, -{40,23,34}, -{40,23,35}, -{40,23,36}, -{40,23,37}, -{40,23,38}, -{40,23,39}, -{40,23,40}, -{40,23,41}, -{40,23,42}, -{40,23,43}, -{40,23,44}, -{40,23,45}, -{40,23,46}, -{40,23,47}, -{40,23,48}, -{40,23,49}, -{40,24,-65}, -{40,24,-64}, -{40,24,-63}, -{40,24,-62}, -{40,24,-61}, -{40,24,-60}, -{40,24,-59}, -{40,24,-58}, -{40,24,-57}, -{40,24,-56}, -{40,24,-55}, -{40,24,-54}, -{40,24,-53}, -{40,24,-52}, -{40,24,-51}, -{40,24,-50}, -{40,24,-49}, -{40,24,-48}, -{40,24,-47}, -{40,24,-46}, -{40,24,-45}, -{40,24,-44}, -{40,24,-43}, -{40,24,-42}, -{40,24,-41}, -{40,24,-40}, -{40,24,-39}, -{40,24,-38}, -{40,24,-37}, -{40,24,-36}, -{40,24,-35}, -{40,24,-34}, -{40,24,-33}, -{40,24,-32}, -{40,24,-31}, -{40,24,-30}, -{40,24,-29}, -{40,24,-28}, -{40,24,-27}, -{40,24,-26}, -{40,24,-25}, -{40,24,-24}, -{40,24,-23}, -{40,24,-22}, -{40,24,-21}, -{40,24,-20}, -{40,24,-19}, -{40,24,-18}, -{40,24,-17}, -{40,24,-16}, -{40,24,-15}, -{40,24,-14}, -{40,24,-13}, -{40,24,-12}, -{40,24,-11}, -{40,24,-10}, -{40,24,-9}, -{40,24,-8}, -{40,24,-7}, -{40,24,-6}, -{40,24,-5}, -{40,24,-4}, -{40,24,-3}, -{40,24,-2}, -{40,24,-1}, -{40,24,0}, -{40,24,1}, -{40,24,2}, -{40,24,3}, -{40,24,4}, -{40,24,5}, -{40,24,6}, -{40,24,7}, -{40,24,8}, -{40,24,9}, -{40,24,10}, -{40,24,11}, -{40,24,12}, -{40,24,13}, -{40,24,14}, -{40,24,15}, -{40,24,16}, -{40,24,17}, -{40,24,18}, -{40,24,19}, -{40,24,20}, -{40,24,21}, -{40,24,22}, -{40,24,23}, -{40,24,24}, -{40,24,25}, -{40,24,26}, -{40,24,27}, -{40,24,28}, -{40,24,29}, -{40,24,30}, -{40,24,31}, -{40,24,32}, -{40,24,33}, -{40,24,34}, -{40,24,35}, -{40,24,36}, -{40,24,37}, -{40,24,38}, -{40,24,39}, -{40,24,40}, -{40,24,41}, -{40,24,42}, -{40,24,43}, -{40,24,44}, -{40,24,45}, -{40,24,46}, -{40,24,47}, -{40,24,48}, -{40,24,49}, -{40,25,-66}, -{40,25,-65}, -{40,25,-64}, -{40,25,-63}, -{40,25,-62}, -{40,25,-61}, -{40,25,-60}, -{40,25,-59}, -{40,25,-58}, -{40,25,-57}, -{40,25,-56}, -{40,25,-55}, -{40,25,-54}, -{40,25,-53}, -{40,25,-52}, -{40,25,-51}, -{40,25,-50}, -{40,25,-49}, -{40,25,-48}, -{40,25,-47}, -{40,25,-46}, -{40,25,-45}, -{40,25,-44}, -{40,25,-43}, -{40,25,-42}, -{40,25,-41}, -{40,25,-40}, -{40,25,-39}, -{40,25,-38}, -{40,25,-37}, -{40,25,-36}, -{40,25,-35}, -{40,25,-34}, -{40,25,-33}, -{40,25,-32}, -{40,25,-31}, -{40,25,-30}, -{40,25,-29}, -{40,25,-28}, -{40,25,-27}, -{40,25,-26}, -{40,25,-25}, -{40,25,-24}, -{40,25,-23}, -{40,25,-22}, -{40,25,-21}, -{40,25,-20}, -{40,25,-19}, -{40,25,-18}, -{40,25,-17}, -{40,25,-16}, -{40,25,-15}, -{40,25,-14}, -{40,25,-13}, -{40,25,-12}, -{40,25,-11}, -{40,25,-10}, -{40,25,-9}, -{40,25,-8}, -{40,25,-7}, -{40,25,-6}, -{40,25,-5}, -{40,25,-4}, -{40,25,-3}, -{40,25,-2}, -{40,25,-1}, -{40,25,0}, -{40,25,1}, -{40,25,2}, -{40,25,3}, -{40,25,4}, -{40,25,5}, -{40,25,6}, -{40,25,7}, -{40,25,8}, -{40,25,9}, -{40,25,10}, -{40,25,11}, -{40,25,12}, -{40,25,13}, -{40,25,14}, -{40,25,15}, -{40,25,16}, -{40,25,17}, -{40,25,18}, -{40,25,19}, -{40,25,20}, -{40,25,21}, -{40,25,22}, -{40,25,23}, -{40,25,24}, -{40,25,25}, -{40,25,26}, -{40,25,27}, -{40,25,28}, -{40,25,29}, -{40,25,30}, -{40,25,31}, -{40,25,32}, -{40,25,33}, -{40,25,34}, -{40,25,35}, -{40,25,36}, -{40,25,37}, -{40,25,38}, -{40,25,39}, -{40,25,40}, -{40,25,41}, -{40,25,42}, -{40,25,43}, -{40,25,44}, -{40,25,45}, -{40,25,46}, -{40,25,47}, -{40,25,48}, -{40,25,49}, -{40,26,-67}, -{40,26,-66}, -{40,26,-65}, -{40,26,-64}, -{40,26,-63}, -{40,26,-62}, -{40,26,-61}, -{40,26,-60}, -{40,26,-59}, -{40,26,-58}, -{40,26,-57}, -{40,26,-56}, -{40,26,-55}, -{40,26,-54}, -{40,26,-53}, -{40,26,-52}, -{40,26,-51}, -{40,26,-50}, -{40,26,-49}, -{40,26,-48}, -{40,26,-47}, -{40,26,-46}, -{40,26,-45}, -{40,26,-44}, -{40,26,-43}, -{40,26,-42}, -{40,26,-41}, -{40,26,-40}, -{40,26,-39}, -{40,26,-38}, -{40,26,-37}, -{40,26,-36}, -{40,26,-35}, -{40,26,-34}, -{40,26,-33}, -{40,26,-32}, -{40,26,-31}, -{40,26,-30}, -{40,26,-29}, -{40,26,-28}, -{40,26,-27}, -{40,26,-26}, -{40,26,-25}, -{40,26,-24}, -{40,26,-23}, -{40,26,-22}, -{40,26,-21}, -{40,26,-20}, -{40,26,-19}, -{40,26,-18}, -{40,26,-17}, -{40,26,-16}, -{40,26,-15}, -{40,26,-14}, -{40,26,-13}, -{40,26,-12}, -{40,26,-11}, -{40,26,-10}, -{40,26,-9}, -{40,26,-8}, -{40,26,-7}, -{40,26,-6}, -{40,26,-5}, -{40,26,-4}, -{40,26,-3}, -{40,26,-2}, -{40,26,-1}, -{40,26,0}, -{40,26,1}, -{40,26,2}, -{40,26,3}, -{40,26,4}, -{40,26,5}, -{40,26,6}, -{40,26,7}, -{40,26,8}, -{40,26,9}, -{40,26,10}, -{40,26,11}, -{40,26,12}, -{40,26,13}, -{40,26,14}, -{40,26,15}, -{40,26,16}, -{40,26,17}, -{40,26,18}, -{40,26,19}, -{40,26,20}, -{40,26,21}, -{40,26,22}, -{40,26,23}, -{40,26,24}, -{40,26,25}, -{40,26,26}, -{40,26,27}, -{40,26,28}, -{40,26,29}, -{40,26,30}, -{40,26,31}, -{40,26,32}, -{40,26,33}, -{40,26,34}, -{40,26,35}, -{40,26,36}, -{40,26,37}, -{40,26,38}, -{40,26,39}, -{40,26,40}, -{40,26,41}, -{40,26,42}, -{40,26,43}, -{40,26,44}, -{40,26,45}, -{40,26,46}, -{40,26,47}, -{40,26,48}, -{40,26,49}, -{40,27,-68}, -{40,27,-67}, -{40,27,-66}, -{40,27,-65}, -{40,27,-64}, -{40,27,-63}, -{40,27,-62}, -{40,27,-61}, -{40,27,-60}, -{40,27,-59}, -{40,27,-58}, -{40,27,-57}, -{40,27,-56}, -{40,27,-55}, -{40,27,-54}, -{40,27,-53}, -{40,27,-52}, -{40,27,-51}, -{40,27,-50}, -{40,27,-49}, -{40,27,-48}, -{40,27,-47}, -{40,27,-46}, -{40,27,-45}, -{40,27,-44}, -{40,27,-43}, -{40,27,-42}, -{40,27,-41}, -{40,27,-40}, -{40,27,-39}, -{40,27,-38}, -{40,27,-37}, -{40,27,-36}, -{40,27,-35}, -{40,27,-34}, -{40,27,-33}, -{40,27,-32}, -{40,27,-31}, -{40,27,-30}, -{40,27,-29}, -{40,27,-28}, -{40,27,-27}, -{40,27,-26}, -{40,27,-25}, -{40,27,-24}, -{40,27,-23}, -{40,27,-22}, -{40,27,-21}, -{40,27,-20}, -{40,27,-19}, -{40,27,-18}, -{40,27,-17}, -{40,27,-16}, -{40,27,-15}, -{40,27,-14}, -{40,27,-13}, -{40,27,-12}, -{40,27,-11}, -{40,27,-10}, -{40,27,-9}, -{40,27,-8}, -{40,27,-7}, -{40,27,-6}, -{40,27,-5}, -{40,27,-4}, -{40,27,-3}, -{40,27,-2}, -{40,27,-1}, -{40,27,0}, -{40,27,1}, -{40,27,2}, -{40,27,3}, -{40,27,4}, -{40,27,5}, -{40,27,6}, -{40,27,7}, -{40,27,8}, -{40,27,9}, -{40,27,10}, -{40,27,11}, -{40,27,12}, -{40,27,13}, -{40,27,14}, -{40,27,15}, -{40,27,16}, -{40,27,17}, -{40,27,18}, -{40,27,19}, -{40,27,20}, -{40,27,21}, -{40,27,22}, -{40,27,23}, -{40,27,24}, -{40,27,25}, -{40,27,26}, -{40,27,27}, -{40,27,28}, -{40,27,29}, -{40,27,30}, -{40,27,31}, -{40,27,32}, -{40,27,33}, -{40,27,34}, -{40,27,35}, -{40,27,36}, -{40,27,37}, -{40,27,38}, -{40,27,39}, -{40,27,40}, -{40,27,41}, -{40,27,42}, -{40,27,43}, -{40,27,44}, -{40,27,45}, -{40,27,46}, -{40,27,47}, -{40,27,48}, -{40,27,49}, -{40,28,-69}, -{40,28,-68}, -{40,28,-67}, -{40,28,-66}, -{40,28,-65}, -{40,28,-64}, -{40,28,-63}, -{40,28,-62}, -{40,28,-61}, -{40,28,-60}, -{40,28,-59}, -{40,28,-58}, -{40,28,-57}, -{40,28,-56}, -{40,28,-55}, -{40,28,-54}, -{40,28,-53}, -{40,28,-52}, -{40,28,-51}, -{40,28,-50}, -{40,28,-49}, -{40,28,-48}, -{40,28,-47}, -{40,28,-46}, -{40,28,-45}, -{40,28,-44}, -{40,28,-43}, -{40,28,-42}, -{40,28,-41}, -{40,28,-40}, -{40,28,-39}, -{40,28,-38}, -{40,28,-37}, -{40,28,-36}, -{40,28,-35}, -{40,28,-34}, -{40,28,-33}, -{40,28,-32}, -{40,28,-31}, -{40,28,-30}, -{40,28,-29}, -{40,28,-28}, -{40,28,-27}, -{40,28,-26}, -{40,28,-25}, -{40,28,-24}, -{40,28,-23}, -{40,28,-22}, -{40,28,-21}, -{40,28,-20}, -{40,28,-19}, -{40,28,-18}, -{40,28,-17}, -{40,28,-16}, -{40,28,-15}, -{40,28,-14}, -{40,28,-13}, -{40,28,-12}, -{40,28,-11}, -{40,28,-10}, -{40,28,-9}, -{40,28,-8}, -{40,28,-7}, -{40,28,-6}, -{40,28,-5}, -{40,28,-4}, -{40,28,-3}, -{40,28,-2}, -{40,28,-1}, -{40,28,0}, -{40,28,1}, -{40,28,2}, -{40,28,3}, -{40,28,4}, -{40,28,5}, -{40,28,6}, -{40,28,7}, -{40,28,8}, -{40,28,9}, -{40,28,10}, -{40,28,11}, -{40,28,12}, -{40,28,13}, -{40,28,14}, -{40,28,15}, -{40,28,16}, -{40,28,17}, -{40,28,18}, -{40,28,19}, -{40,28,20}, -{40,28,21}, -{40,28,22}, -{40,28,23}, -{40,28,24}, -{40,28,25}, -{40,28,26}, -{40,28,27}, -{40,28,28}, -{40,28,29}, -{40,28,30}, -{40,28,31}, -{40,28,32}, -{40,28,33}, -{40,28,34}, -{40,28,35}, -{40,28,36}, -{40,28,37}, -{40,28,38}, -{40,28,39}, -{40,28,40}, -{40,28,41}, -{40,28,42}, -{40,28,43}, -{40,28,44}, -{40,28,45}, -{40,28,46}, -{40,28,47}, -{40,28,48}, -{40,28,49}, -{40,28,50}, -{40,29,-70}, -{40,29,-69}, -{40,29,-68}, -{40,29,-67}, -{40,29,-66}, -{40,29,-65}, -{40,29,-64}, -{40,29,-63}, -{40,29,-62}, -{40,29,-61}, -{40,29,-60}, -{40,29,-59}, -{40,29,-58}, -{40,29,-57}, -{40,29,-56}, -{40,29,-55}, -{40,29,-54}, -{40,29,-53}, -{40,29,-52}, -{40,29,-51}, -{40,29,-50}, -{40,29,-49}, -{40,29,-48}, -{40,29,-47}, -{40,29,-46}, -{40,29,-45}, -{40,29,-44}, -{40,29,-43}, -{40,29,-42}, -{40,29,-41}, -{40,29,-40}, -{40,29,-39}, -{40,29,-38}, -{40,29,-37}, -{40,29,-36}, -{40,29,-35}, -{40,29,-34}, -{40,29,-33}, -{40,29,-32}, -{40,29,-31}, -{40,29,-30}, -{40,29,-29}, -{40,29,-28}, -{40,29,-27}, -{40,29,-26}, -{40,29,-25}, -{40,29,-24}, -{40,29,-23}, -{40,29,-22}, -{40,29,-21}, -{40,29,-20}, -{40,29,-19}, -{40,29,-18}, -{40,29,-17}, -{40,29,-16}, -{40,29,-15}, -{40,29,-14}, -{40,29,-13}, -{40,29,-12}, -{40,29,-11}, -{40,29,-10}, -{40,29,-9}, -{40,29,-8}, -{40,29,-7}, -{40,29,-6}, -{40,29,-5}, -{40,29,-4}, -{40,29,-3}, -{40,29,-2}, -{40,29,-1}, -{40,29,0}, -{40,29,1}, -{40,29,2}, -{40,29,3}, -{40,29,4}, -{40,29,5}, -{40,29,6}, -{40,29,7}, -{40,29,8}, -{40,29,9}, -{40,29,10}, -{40,29,11}, -{40,29,12}, -{40,29,13}, -{40,29,14}, -{40,29,15}, -{40,29,16}, -{40,29,17}, -{40,29,18}, -{40,29,19}, -{40,29,20}, -{40,29,21}, -{40,29,22}, -{40,29,23}, -{40,29,24}, -{40,29,25}, -{40,29,26}, -{40,29,27}, -{40,29,28}, -{40,29,29}, -{40,29,30}, -{40,29,31}, -{40,29,32}, -{40,29,33}, -{40,29,34}, -{40,29,35}, -{40,29,36}, -{40,29,37}, -{40,29,38}, -{40,29,39}, -{40,29,40}, -{40,29,41}, -{40,29,42}, -{40,29,43}, -{40,29,44}, -{40,29,45}, -{40,29,46}, -{40,29,47}, -{40,29,48}, -{40,29,49}, -{40,29,50}, -{40,30,-71}, -{40,30,-70}, -{40,30,-69}, -{40,30,-68}, -{40,30,-67}, -{40,30,-66}, -{40,30,-65}, -{40,30,-64}, -{40,30,-63}, -{40,30,-62}, -{40,30,-61}, -{40,30,-60}, -{40,30,-59}, -{40,30,-58}, -{40,30,-57}, -{40,30,-56}, -{40,30,-55}, -{40,30,-54}, -{40,30,-53}, -{40,30,-52}, -{40,30,-51}, -{40,30,-50}, -{40,30,-49}, -{40,30,-48}, -{40,30,-47}, -{40,30,-46}, -{40,30,-45}, -{40,30,-44}, -{40,30,-43}, -{40,30,-42}, -{40,30,-41}, -{40,30,-40}, -{40,30,-39}, -{40,30,-38}, -{40,30,-37}, -{40,30,-36}, -{40,30,-35}, -{40,30,-34}, -{40,30,-33}, -{40,30,-32}, -{40,30,-31}, -{40,30,-30}, -{40,30,-29}, -{40,30,-28}, -{40,30,-27}, -{40,30,-26}, -{40,30,-25}, -{40,30,-24}, -{40,30,-23}, -{40,30,-22}, -{40,30,-21}, -{40,30,-20}, -{40,30,-19}, -{40,30,-18}, -{40,30,-17}, -{40,30,-16}, -{40,30,-15}, -{40,30,-14}, -{40,30,-13}, -{40,30,-12}, -{40,30,-11}, -{40,30,-10}, -{40,30,-9}, -{40,30,-8}, -{40,30,-7}, -{40,30,-6}, -{40,30,-5}, -{40,30,-4}, -{40,30,-3}, -{40,30,-2}, -{40,30,-1}, -{40,30,0}, -{40,30,1}, -{40,30,2}, -{40,30,3}, -{40,30,4}, -{40,30,5}, -{40,30,6}, -{40,30,7}, -{40,30,8}, -{40,30,9}, -{40,30,10}, -{40,30,11}, -{40,30,12}, -{40,30,13}, -{40,30,14}, -{40,30,15}, -{40,30,16}, -{40,30,17}, -{40,30,18}, -{40,30,19}, -{40,30,20}, -{40,30,21}, -{40,30,22}, -{40,30,23}, -{40,30,24}, -{40,30,25}, -{40,30,26}, -{40,30,27}, -{40,30,28}, -{40,30,29}, -{40,30,30}, -{40,30,31}, -{40,30,32}, -{40,30,33}, -{40,30,34}, -{40,30,35}, -{40,30,36}, -{40,30,37}, -{40,30,38}, -{40,30,39}, -{40,30,40}, -{40,30,41}, -{40,30,42}, -{40,30,43}, -{40,30,44}, -{40,30,45}, -{40,30,46}, -{40,30,47}, -{40,30,48}, -{40,30,49}, -{40,30,50}, -{40,31,-72}, -{40,31,-71}, -{40,31,-70}, -{40,31,-69}, -{40,31,-68}, -{40,31,-67}, -{40,31,-66}, -{40,31,-65}, -{40,31,-64}, -{40,31,-63}, -{40,31,-62}, -{40,31,-61}, -{40,31,-60}, -{40,31,-59}, -{40,31,-58}, -{40,31,-57}, -{40,31,-56}, -{40,31,-55}, -{40,31,-54}, -{40,31,-53}, -{40,31,-52}, -{40,31,-51}, -{40,31,-50}, -{40,31,-49}, -{40,31,-48}, -{40,31,-47}, -{40,31,-46}, -{40,31,-45}, -{40,31,-44}, -{40,31,-43}, -{40,31,-42}, -{40,31,-41}, -{40,31,-40}, -{40,31,-39}, -{40,31,-38}, -{40,31,-37}, -{40,31,-36}, -{40,31,-35}, -{40,31,-34}, -{40,31,-33}, -{40,31,-32}, -{40,31,-31}, -{40,31,-30}, -{40,31,-29}, -{40,31,-28}, -{40,31,-27}, -{40,31,-26}, -{40,31,-25}, -{40,31,-24}, -{40,31,-23}, -{40,31,-22}, -{40,31,-21}, -{40,31,-20}, -{40,31,-19}, -{40,31,-18}, -{40,31,-17}, -{40,31,-16}, -{40,31,-15}, -{40,31,-14}, -{40,31,-13}, -{40,31,-12}, -{40,31,-11}, -{40,31,-10}, -{40,31,-9}, -{40,31,-8}, -{40,31,-7}, -{40,31,-6}, -{40,31,-5}, -{40,31,-4}, -{40,31,-3}, -{40,31,-2}, -{40,31,-1}, -{40,31,0}, -{40,31,1}, -{40,31,2}, -{40,31,3}, -{40,31,4}, -{40,31,5}, -{40,31,6}, -{40,31,7}, -{40,31,8}, -{40,31,9}, -{40,31,10}, -{40,31,11}, -{40,31,12}, -{40,31,13}, -{40,31,14}, -{40,31,15}, -{40,31,16}, -{40,31,17}, -{40,31,18}, -{40,31,19}, -{40,31,20}, -{40,31,21}, -{40,31,22}, -{40,31,23}, -{40,31,24}, -{40,31,25}, -{40,31,26}, -{40,31,27}, -{40,31,28}, -{40,31,29}, -{40,31,30}, -{40,31,31}, -{40,31,32}, -{40,31,33}, -{40,31,34}, -{40,31,35}, -{40,31,36}, -{40,31,37}, -{40,31,38}, -{40,31,39}, -{40,31,40}, -{40,31,41}, -{40,31,42}, -{40,31,43}, -{40,31,44}, -{40,31,45}, -{40,31,46}, -{40,31,47}, -{40,31,48}, -{40,31,49}, -{40,31,50}, -{40,32,-73}, -{40,32,-72}, -{40,32,-71}, -{40,32,-70}, -{40,32,-69}, -{40,32,-68}, -{40,32,-67}, -{40,32,-66}, -{40,32,-65}, -{40,32,-64}, -{40,32,-63}, -{40,32,-62}, -{40,32,-61}, -{40,32,-60}, -{40,32,-59}, -{40,32,-58}, -{40,32,-57}, -{40,32,-56}, -{40,32,-55}, -{40,32,-54}, -{40,32,-53}, -{40,32,-52}, -{40,32,-51}, -{40,32,-50}, -{40,32,-49}, -{40,32,-48}, -{40,32,-47}, -{40,32,-46}, -{40,32,-45}, -{40,32,-44}, -{40,32,-43}, -{40,32,-42}, -{40,32,-41}, -{40,32,-40}, -{40,32,-39}, -{40,32,-38}, -{40,32,-37}, -{40,32,-36}, -{40,32,-35}, -{40,32,-34}, -{40,32,-33}, -{40,32,-32}, -{40,32,-31}, -{40,32,-30}, -{40,32,-29}, -{40,32,-28}, -{40,32,-27}, -{40,32,-26}, -{40,32,-25}, -{40,32,-24}, -{40,32,-23}, -{40,32,-22}, -{40,32,-21}, -{40,32,-20}, -{40,32,-19}, -{40,32,-18}, -{40,32,-17}, -{40,32,-16}, -{40,32,-15}, -{40,32,-14}, -{40,32,-13}, -{40,32,-12}, -{40,32,-11}, -{40,32,-10}, -{40,32,-9}, -{40,32,-8}, -{40,32,-7}, -{40,32,-6}, -{40,32,-5}, -{40,32,-4}, -{40,32,-3}, -{40,32,-2}, -{40,32,-1}, -{40,32,0}, -{40,32,1}, -{40,32,2}, -{40,32,3}, -{40,32,4}, -{40,32,5}, -{40,32,6}, -{40,32,7}, -{40,32,8}, -{40,32,9}, -{40,32,10}, -{40,32,11}, -{40,32,12}, -{40,32,13}, -{40,32,14}, -{40,32,15}, -{40,32,16}, -{40,32,17}, -{40,32,18}, -{40,32,19}, -{40,32,20}, -{40,32,21}, -{40,32,22}, -{40,32,23}, -{40,32,24}, -{40,32,25}, -{40,32,26}, -{40,32,27}, -{40,32,28}, -{40,32,29}, -{40,32,30}, -{40,32,31}, -{40,32,32}, -{40,32,33}, -{40,32,34}, -{40,32,35}, -{40,32,36}, -{40,32,37}, -{40,32,38}, -{40,32,39}, -{40,32,40}, -{40,32,41}, -{40,32,42}, -{40,32,43}, -{40,32,44}, -{40,32,45}, -{40,32,46}, -{40,32,47}, -{40,32,48}, -{40,32,49}, -{40,32,50}, -{40,33,-74}, -{40,33,-73}, -{40,33,-72}, -{40,33,-71}, -{40,33,-70}, -{40,33,-69}, -{40,33,-68}, -{40,33,-67}, -{40,33,-66}, -{40,33,-65}, -{40,33,-64}, -{40,33,-63}, -{40,33,-62}, -{40,33,-61}, -{40,33,-60}, -{40,33,-59}, -{40,33,-58}, -{40,33,-57}, -{40,33,-56}, -{40,33,-55}, -{40,33,-54}, -{40,33,-53}, -{40,33,-52}, -{40,33,-51}, -{40,33,-50}, -{40,33,-49}, -{40,33,-48}, -{40,33,-47}, -{40,33,-46}, -{40,33,-45}, -{40,33,-44}, -{40,33,-43}, -{40,33,-42}, -{40,33,-41}, -{40,33,-40}, -{40,33,-39}, -{40,33,-38}, -{40,33,-37}, -{40,33,-36}, -{40,33,-35}, -{40,33,-34}, -{40,33,-33}, -{40,33,-32}, -{40,33,-31}, -{40,33,-30}, -{40,33,-29}, -{40,33,-28}, -{40,33,-27}, -{40,33,-26}, -{40,33,-25}, -{40,33,-24}, -{40,33,-23}, -{40,33,-22}, -{40,33,-21}, -{40,33,-20}, -{40,33,-19}, -{40,33,-18}, -{40,33,-17}, -{40,33,-16}, -{40,33,-15}, -{40,33,-14}, -{40,33,-13}, -{40,33,-12}, -{40,33,-11}, -{40,33,-10}, -{40,33,-9}, -{40,33,-8}, -{40,33,-7}, -{40,33,-6}, -{40,33,-5}, -{40,33,-4}, -{40,33,-3}, -{40,33,-2}, -{40,33,-1}, -{40,33,0}, -{40,33,1}, -{40,33,2}, -{40,33,3}, -{40,33,4}, -{40,33,5}, -{40,33,6}, -{40,33,7}, -{40,33,8}, -{40,33,9}, -{40,33,10}, -{40,33,11}, -{40,33,12}, -{40,33,13}, -{40,33,14}, -{40,33,15}, -{40,33,16}, -{40,33,17}, -{40,33,18}, -{40,33,19}, -{40,33,20}, -{40,33,21}, -{40,33,22}, -{40,33,23}, -{40,33,24}, -{40,33,25}, -{40,33,26}, -{40,33,27}, -{40,33,28}, -{40,33,29}, -{40,33,30}, -{40,33,31}, -{40,33,32}, -{40,33,33}, -{40,33,34}, -{40,33,35}, -{40,33,36}, -{40,33,37}, -{40,33,38}, -{40,33,39}, -{40,33,40}, -{40,33,41}, -{40,33,42}, -{40,33,43}, -{40,33,44}, -{40,33,45}, -{40,33,46}, -{40,33,47}, -{40,33,48}, -{40,33,49}, -{40,33,50}, -{40,34,-75}, -{40,34,-74}, -{40,34,-73}, -{40,34,-72}, -{40,34,-71}, -{40,34,-70}, -{40,34,-69}, -{40,34,-68}, -{40,34,-67}, -{40,34,-66}, -{40,34,-65}, -{40,34,-64}, -{40,34,-63}, -{40,34,-62}, -{40,34,-61}, -{40,34,-60}, -{40,34,-59}, -{40,34,-58}, -{40,34,-57}, -{40,34,-56}, -{40,34,-55}, -{40,34,-54}, -{40,34,-53}, -{40,34,-52}, -{40,34,-51}, -{40,34,-50}, -{40,34,-49}, -{40,34,-48}, -{40,34,-47}, -{40,34,-46}, -{40,34,-45}, -{40,34,-44}, -{40,34,-43}, -{40,34,-42}, -{40,34,-41}, -{40,34,-40}, -{40,34,-39}, -{40,34,-38}, -{40,34,-37}, -{40,34,-36}, -{40,34,-35}, -{40,34,-34}, -{40,34,-33}, -{40,34,-32}, -{40,34,-31}, -{40,34,-30}, -{40,34,-29}, -{40,34,-28}, -{40,34,-27}, -{40,34,-26}, -{40,34,-25}, -{40,34,-24}, -{40,34,-23}, -{40,34,-22}, -{40,34,-21}, -{40,34,-20}, -{40,34,-19}, -{40,34,-18}, -{40,34,-17}, -{40,34,-16}, -{40,34,-15}, -{40,34,-14}, -{40,34,-13}, -{40,34,-12}, -{40,34,-11}, -{40,34,-10}, -{40,34,-9}, -{40,34,-8}, -{40,34,-7}, -{40,34,-6}, -{40,34,-5}, -{40,34,-4}, -{40,34,-3}, -{40,34,-2}, -{40,34,-1}, -{40,34,0}, -{40,34,1}, -{40,34,2}, -{40,34,3}, -{40,34,4}, -{40,34,5}, -{40,34,6}, -{40,34,7}, -{40,34,8}, -{40,34,9}, -{40,34,10}, -{40,34,11}, -{40,34,12}, -{40,34,13}, -{40,34,14}, -{40,34,15}, -{40,34,16}, -{40,34,17}, -{40,34,18}, -{40,34,19}, -{40,34,20}, -{40,34,21}, -{40,34,22}, -{40,34,23}, -{40,34,24}, -{40,34,25}, -{40,34,26}, -{40,34,27}, -{40,34,28}, -{40,34,29}, -{40,34,30}, -{40,34,31}, -{40,34,32}, -{40,34,33}, -{40,34,34}, -{40,34,35}, -{40,34,36}, -{40,34,37}, -{40,34,38}, -{40,34,39}, -{40,34,40}, -{40,34,41}, -{40,34,42}, -{40,34,43}, -{40,34,44}, -{40,34,45}, -{40,34,46}, -{40,34,47}, -{40,34,48}, -{40,34,49}, -{40,34,50}, -{40,35,-75}, -{40,35,-74}, -{40,35,-73}, -{40,35,-72}, -{40,35,-71}, -{40,35,-70}, -{40,35,-69}, -{40,35,-68}, -{40,35,-67}, -{40,35,-66}, -{40,35,-65}, -{40,35,-64}, -{40,35,-63}, -{40,35,-62}, -{40,35,-61}, -{40,35,-60}, -{40,35,-59}, -{40,35,-58}, -{40,35,-57}, -{40,35,-56}, -{40,35,-55}, -{40,35,-54}, -{40,35,-53}, -{40,35,-52}, -{40,35,-51}, -{40,35,-50}, -{40,35,-49}, -{40,35,-48}, -{40,35,-47}, -{40,35,-46}, -{40,35,-45}, -{40,35,-44}, -{40,35,-43}, -{40,35,-42}, -{40,35,-41}, -{40,35,-40}, -{40,35,-39}, -{40,35,-38}, -{40,35,-37}, -{40,35,-36}, -{40,35,-35}, -{40,35,-34}, -{40,35,-33}, -{40,35,-32}, -{40,35,-31}, -{40,35,-30}, -{40,35,-29}, -{40,35,-28}, -{40,35,-27}, -{40,35,-26}, -{40,35,-25}, -{40,35,-24}, -{40,35,-23}, -{40,35,-22}, -{40,35,-21}, -{40,35,-20}, -{40,35,-19}, -{40,35,-18}, -{40,35,-17}, -{40,35,-16}, -{40,35,-15}, -{40,35,-14}, -{40,35,-13}, -{40,35,-12}, -{40,35,-11}, -{40,35,-10}, -{40,35,-9}, -{40,35,-8}, -{40,35,-7}, -{40,35,-6}, -{40,35,-5}, -{40,35,-4}, -{40,35,-3}, -{40,35,-2}, -{40,35,-1}, -{40,35,0}, -{40,35,1}, -{40,35,2}, -{40,35,3}, -{40,35,4}, -{40,35,5}, -{40,35,6}, -{40,35,7}, -{40,35,8}, -{40,35,9}, -{40,35,10}, -{40,35,11}, -{40,35,12}, -{40,35,13}, -{40,35,14}, -{40,35,15}, -{40,35,16}, -{40,35,17}, -{40,35,18}, -{40,35,19}, -{40,35,20}, -{40,35,21}, -{40,35,22}, -{40,35,23}, -{40,35,24}, -{40,35,25}, -{40,35,26}, -{40,35,27}, -{40,35,28}, -{40,35,29}, -{40,35,30}, -{40,35,31}, -{40,35,32}, -{40,35,33}, -{40,35,34}, -{40,35,35}, -{40,35,36}, -{40,35,37}, -{40,35,38}, -{40,35,39}, -{40,35,40}, -{40,35,41}, -{40,35,42}, -{40,35,43}, -{40,35,44}, -{40,35,45}, -{40,35,46}, -{40,35,47}, -{40,35,48}, -{40,35,49}, -{40,35,50}, -{40,36,-76}, -{40,36,-75}, -{40,36,-74}, -{40,36,-73}, -{40,36,-72}, -{40,36,-71}, -{40,36,-70}, -{40,36,-69}, -{40,36,-68}, -{40,36,-67}, -{40,36,-66}, -{40,36,-65}, -{40,36,-64}, -{40,36,-63}, -{40,36,-62}, -{40,36,-61}, -{40,36,-60}, -{40,36,-59}, -{40,36,-58}, -{40,36,-57}, -{40,36,-56}, -{40,36,-55}, -{40,36,-54}, -{40,36,-53}, -{40,36,-52}, -{40,36,-51}, -{40,36,-50}, -{40,36,-49}, -{40,36,-48}, -{40,36,-47}, -{40,36,-46}, -{40,36,-45}, -{40,36,-44}, -{40,36,-43}, -{40,36,-42}, -{40,36,-41}, -{40,36,-40}, -{40,36,-39}, -{40,36,-38}, -{40,36,-37}, -{40,36,-36}, -{40,36,-35}, -{40,36,-34}, -{40,36,-33}, -{40,36,-32}, -{40,36,-31}, -{40,36,-30}, -{40,36,-29}, -{40,36,-28}, -{40,36,-27}, -{40,36,-26}, -{40,36,-25}, -{40,36,-24}, -{40,36,-23}, -{40,36,-22}, -{40,36,-21}, -{40,36,-20}, -{40,36,-19}, -{40,36,-18}, -{40,36,-17}, -{40,36,-16}, -{40,36,-15}, -{40,36,-14}, -{40,36,-13}, -{40,36,-12}, -{40,36,-11}, -{40,36,-10}, -{40,36,-9}, -{40,36,-8}, -{40,36,-7}, -{40,36,-6}, -{40,36,-5}, -{40,36,-4}, -{40,36,-3}, -{40,36,-2}, -{40,36,-1}, -{40,36,0}, -{40,36,1}, -{40,36,2}, -{40,36,3}, -{40,36,4}, -{40,36,5}, -{40,36,6}, -{40,36,7}, -{40,36,8}, -{40,36,9}, -{40,36,10}, -{40,36,11}, -{40,36,12}, -{40,36,13}, -{40,36,14}, -{40,36,15}, -{40,36,16}, -{40,36,17}, -{40,36,18}, -{40,36,19}, -{40,36,20}, -{40,36,21}, -{40,36,22}, -{40,36,23}, -{40,36,24}, -{40,36,25}, -{40,36,26}, -{40,36,27}, -{40,36,28}, -{40,36,29}, -{40,36,30}, -{40,36,31}, -{40,36,32}, -{40,36,33}, -{40,36,34}, -{40,36,35}, -{40,36,36}, -{40,36,37}, -{40,36,38}, -{40,36,39}, -{40,36,40}, -{40,36,41}, -{40,36,42}, -{40,36,43}, -{40,36,44}, -{40,36,45}, -{40,36,46}, -{40,36,47}, -{40,36,48}, -{40,36,49}, -{40,36,50}, -{40,37,-77}, -{40,37,-76}, -{40,37,-75}, -{40,37,-74}, -{40,37,-73}, -{40,37,-72}, -{40,37,-71}, -{40,37,-70}, -{40,37,-69}, -{40,37,-68}, -{40,37,-67}, -{40,37,-66}, -{40,37,-65}, -{40,37,-64}, -{40,37,-63}, -{40,37,-62}, -{40,37,-61}, -{40,37,-60}, -{40,37,-59}, -{40,37,-58}, -{40,37,-57}, -{40,37,-56}, -{40,37,-55}, -{40,37,-54}, -{40,37,-53}, -{40,37,-52}, -{40,37,-51}, -{40,37,-50}, -{40,37,-49}, -{40,37,-48}, -{40,37,-47}, -{40,37,-46}, -{40,37,-45}, -{40,37,-44}, -{40,37,-43}, -{40,37,-42}, -{40,37,-41}, -{40,37,-40}, -{40,37,-39}, -{40,37,-38}, -{40,37,-37}, -{40,37,-36}, -{40,37,-35}, -{40,37,-34}, -{40,37,-33}, -{40,37,-32}, -{40,37,-31}, -{40,37,-30}, -{40,37,-29}, -{40,37,-28}, -{40,37,-27}, -{40,37,-26}, -{40,37,-25}, -{40,37,-24}, -{40,37,-23}, -{40,37,-22}, -{40,37,-21}, -{40,37,-20}, -{40,37,-19}, -{40,37,-18}, -{40,37,-17}, -{40,37,-16}, -{40,37,-15}, -{40,37,-14}, -{40,37,-13}, -{40,37,-12}, -{40,37,-11}, -{40,37,-10}, -{40,37,-9}, -{40,37,-8}, -{40,37,-7}, -{40,37,-6}, -{40,37,-5}, -{40,37,-4}, -{40,37,-3}, -{40,37,-2}, -{40,37,-1}, -{40,37,0}, -{40,37,1}, -{40,37,2}, -{40,37,3}, -{40,37,4}, -{40,37,5}, -{40,37,6}, -{40,37,7}, -{40,37,8}, -{40,37,9}, -{40,37,10}, -{40,37,11}, -{40,37,12}, -{40,37,13}, -{40,37,14}, -{40,37,15}, -{40,37,16}, -{40,37,17}, -{40,37,18}, -{40,37,19}, -{40,37,20}, -{40,37,21}, -{40,37,22}, -{40,37,23}, -{40,37,24}, -{40,37,25}, -{40,37,26}, -{40,37,27}, -{40,37,28}, -{40,37,29}, -{40,37,30}, -{40,37,31}, -{40,37,32}, -{40,37,33}, -{40,37,34}, -{40,37,35}, -{40,37,36}, -{40,37,37}, -{40,37,38}, -{40,37,39}, -{40,37,40}, -{40,37,41}, -{40,37,42}, -{40,37,43}, -{40,37,44}, -{40,37,45}, -{40,37,46}, -{40,37,47}, -{40,37,48}, -{40,37,49}, -{40,37,50}, -{40,38,-78}, -{40,38,-77}, -{40,38,-76}, -{40,38,-75}, -{40,38,-74}, -{40,38,-73}, -{40,38,-72}, -{40,38,-71}, -{40,38,-70}, -{40,38,-69}, -{40,38,-68}, -{40,38,-67}, -{40,38,-66}, -{40,38,-65}, -{40,38,-64}, -{40,38,-63}, -{40,38,-62}, -{40,38,-61}, -{40,38,-60}, -{40,38,-59}, -{40,38,-58}, -{40,38,-57}, -{40,38,-56}, -{40,38,-55}, -{40,38,-54}, -{40,38,-53}, -{40,38,-52}, -{40,38,-51}, -{40,38,-50}, -{40,38,-49}, -{40,38,-48}, -{40,38,-47}, -{40,38,-46}, -{40,38,-45}, -{40,38,-44}, -{40,38,-43}, -{40,38,-42}, -{40,38,-41}, -{40,38,-40}, -{40,38,-39}, -{40,38,-38}, -{40,38,-37}, -{40,38,-36}, -{40,38,-35}, -{40,38,-34}, -{40,38,-33}, -{40,38,-32}, -{40,38,-31}, -{40,38,-30}, -{40,38,-29}, -{40,38,-28}, -{40,38,-27}, -{40,38,-26}, -{40,38,-25}, -{40,38,-24}, -{40,38,-23}, -{40,38,-22}, -{40,38,-21}, -{40,38,-20}, -{40,38,-19}, -{40,38,-18}, -{40,38,-17}, -{40,38,-16}, -{40,38,-15}, -{40,38,-14}, -{40,38,-13}, -{40,38,-12}, -{40,38,-11}, -{40,38,-10}, -{40,38,-9}, -{40,38,-8}, -{40,38,-7}, -{40,38,-6}, -{40,38,-5}, -{40,38,-4}, -{40,38,-3}, -{40,38,-2}, -{40,38,-1}, -{40,38,0}, -{40,38,1}, -{40,38,2}, -{40,38,3}, -{40,38,4}, -{40,38,5}, -{40,38,6}, -{40,38,7}, -{40,38,8}, -{40,38,9}, -{40,38,10}, -{40,38,11}, -{40,38,12}, -{40,38,13}, -{40,38,14}, -{40,38,15}, -{40,38,16}, -{40,38,17}, -{40,38,18}, -{40,38,19}, -{40,38,20}, -{40,38,21}, -{40,38,22}, -{40,38,23}, -{40,38,24}, -{40,38,25}, -{40,38,26}, -{40,38,27}, -{40,38,28}, -{40,38,29}, -{40,38,30}, -{40,38,31}, -{40,38,32}, -{40,38,33}, -{40,38,34}, -{40,38,35}, -{40,38,36}, -{40,38,37}, -{40,38,38}, -{40,38,39}, -{40,38,40}, -{40,38,41}, -{40,38,42}, -{40,38,43}, -{40,38,44}, -{40,38,45}, -{40,38,46}, -{40,38,47}, -{40,38,48}, -{40,38,49}, -{40,38,50}, -{40,38,51}, -{40,39,-79}, -{40,39,-78}, -{40,39,-77}, -{40,39,-76}, -{40,39,-75}, -{40,39,-74}, -{40,39,-73}, -{40,39,-72}, -{40,39,-71}, -{40,39,-70}, -{40,39,-69}, -{40,39,-68}, -{40,39,-67}, -{40,39,-66}, -{40,39,-65}, -{40,39,-64}, -{40,39,-63}, -{40,39,-62}, -{40,39,-61}, -{40,39,-60}, -{40,39,-59}, -{40,39,-58}, -{40,39,-57}, -{40,39,-56}, -{40,39,-55}, -{40,39,-54}, -{40,39,-53}, -{40,39,-52}, -{40,39,-51}, -{40,39,-50}, -{40,39,-49}, -{40,39,-48}, -{40,39,-47}, -{40,39,-46}, -{40,39,-45}, -{40,39,-44}, -{40,39,-43}, -{40,39,-42}, -{40,39,-41}, -{40,39,-40}, -{40,39,-39}, -{40,39,-38}, -{40,39,-37}, -{40,39,-36}, -{40,39,-35}, -{40,39,-34}, -{40,39,-33}, -{40,39,-32}, -{40,39,-31}, -{40,39,-30}, -{40,39,-29}, -{40,39,-28}, -{40,39,-27}, -{40,39,-26}, -{40,39,-25}, -{40,39,-24}, -{40,39,-23}, -{40,39,-22}, -{40,39,-21}, -{40,39,-20}, -{40,39,-19}, -{40,39,-18}, -{40,39,-17}, -{40,39,-16}, -{40,39,-15}, -{40,39,-14}, -{40,39,-13}, -{40,39,-12}, -{40,39,-11}, -{40,39,-10}, -{40,39,-9}, -{40,39,-8}, -{40,39,-7}, -{40,39,-6}, -{40,39,-5}, -{40,39,-4}, -{40,39,-3}, -{40,39,-2}, -{40,39,-1}, -{40,39,0}, -{40,39,1}, -{40,39,2}, -{40,39,3}, -{40,39,4}, -{40,39,5}, -{40,39,6}, -{40,39,7}, -{40,39,8}, -{40,39,9}, -{40,39,10}, -{40,39,11}, -{40,39,12}, -{40,39,13}, -{40,39,14}, -{40,39,15}, -{40,39,16}, -{40,39,17}, -{40,39,18}, -{40,39,19}, -{40,39,20}, -{40,39,21}, -{40,39,22}, -{40,39,23}, -{40,39,24}, -{40,39,25}, -{40,39,26}, -{40,39,27}, -{40,39,28}, -{40,39,29}, -{40,39,30}, -{40,39,31}, -{40,39,32}, -{40,39,33}, -{40,39,34}, -{40,39,35}, -{40,39,36}, -{40,39,37}, -{40,39,38}, -{40,39,39}, -{40,39,40}, -{40,39,41}, -{40,39,42}, -{40,39,43}, -{40,39,44}, -{40,39,45}, -{40,39,46}, -{40,39,47}, -{40,39,48}, -{40,39,49}, -{40,39,50}, -{40,39,51}, -{40,40,-80}, -{40,40,-79}, -{40,40,-78}, -{40,40,-77}, -{40,40,-76}, -{40,40,-75}, -{40,40,-74}, -{40,40,-73}, -{40,40,-72}, -{40,40,-71}, -{40,40,-70}, -{40,40,-69}, -{40,40,-68}, -{40,40,-67}, -{40,40,-66}, -{40,40,-65}, -{40,40,-64}, -{40,40,-63}, -{40,40,-62}, -{40,40,-61}, -{40,40,-60}, -{40,40,-59}, -{40,40,-58}, -{40,40,-57}, -{40,40,-56}, -{40,40,-55}, -{40,40,-54}, -{40,40,-53}, -{40,40,-52}, -{40,40,-51}, -{40,40,-50}, -{40,40,-49}, -{40,40,-48}, -{40,40,-47}, -{40,40,-46}, -{40,40,-45}, -{40,40,-44}, -{40,40,-43}, -{40,40,-42}, -{40,40,-41}, -{40,40,-40}, -{40,40,-39}, -{40,40,-38}, -{40,40,-37}, -{40,40,-36}, -{40,40,-35}, -{40,40,-34}, -{40,40,-33}, -{40,40,-32}, -{40,40,-31}, -{40,40,-30}, -{40,40,-29}, -{40,40,-28}, -{40,40,-27}, -{40,40,-26}, -{40,40,-25}, -{40,40,-24}, -{40,40,-23}, -{40,40,-22}, -{40,40,-21}, -{40,40,-20}, -{40,40,-19}, -{40,40,-18}, -{40,40,-17}, -{40,40,-16}, -{40,40,-15}, -{40,40,-14}, -{40,40,-13}, -{40,40,-12}, -{40,40,-11}, -{40,40,-10}, -{40,40,-9}, -{40,40,-8}, -{40,40,-7}, -{40,40,-6}, -{40,40,-5}, -{40,40,-4}, -{40,40,-3}, -{40,40,-2}, -{40,40,-1}, -{40,40,0}, -{40,40,1}, -{40,40,2}, -{40,40,3}, -{40,40,4}, -{40,40,5}, -{40,40,6}, -{40,40,7}, -{40,40,8}, -{40,40,9}, -{40,40,10}, -{40,40,11}, -{40,40,12}, -{40,40,13}, -{40,40,14}, -{40,40,15}, -{40,40,16}, -{40,40,17}, -{40,40,18}, -{40,40,19}, -{40,40,20}, -{40,40,21}, -{40,40,22}, -{40,40,23}, -{40,40,24}, -{40,40,25}, -{40,40,26}, -{40,40,27}, -{40,40,28}, -{40,40,29}, -{40,40,30}, -{40,40,31}, -{40,40,32}, -{40,40,33}, -{40,40,34}, -{40,40,35}, -{40,40,36}, -{40,40,37}, -{40,40,38}, -{40,40,39}, -{40,40,40}, -{40,40,41}, -{40,40,42}, -{40,40,43}, -{40,40,44}, -{40,40,45}, -{40,40,46}, -{40,40,47}, -{40,40,48}, -{40,40,49}, -{40,40,50}, -{40,40,51}, -{40,41,-81}, -{40,41,-80}, -{40,41,-79}, -{40,41,-78}, -{40,41,-77}, -{40,41,-76}, -{40,41,-75}, -{40,41,-74}, -{40,41,-73}, -{40,41,-72}, -{40,41,-71}, -{40,41,-70}, -{40,41,-69}, -{40,41,-68}, -{40,41,-67}, -{40,41,-66}, -{40,41,-65}, -{40,41,-64}, -{40,41,-63}, -{40,41,-62}, -{40,41,-61}, -{40,41,-60}, -{40,41,-59}, -{40,41,-58}, -{40,41,-57}, -{40,41,-56}, -{40,41,-55}, -{40,41,-54}, -{40,41,-53}, -{40,41,-52}, -{40,41,-51}, -{40,41,-50}, -{40,41,-49}, -{40,41,-48}, -{40,41,-47}, -{40,41,-46}, -{40,41,-45}, -{40,41,-44}, -{40,41,-43}, -{40,41,-42}, -{40,41,-41}, -{40,41,-40}, -{40,41,-39}, -{40,41,-38}, -{40,41,-37}, -{40,41,-36}, -{40,41,-35}, -{40,41,-34}, -{40,41,-33}, -{40,41,-32}, -{40,41,-31}, -{40,41,-30}, -{40,41,-29}, -{40,41,-28}, -{40,41,-27}, -{40,41,-26}, -{40,41,-25}, -{40,41,-24}, -{40,41,-23}, -{40,41,-22}, -{40,41,-21}, -{40,41,-20}, -{40,41,-19}, -{40,41,-18}, -{40,41,-17}, -{40,41,-16}, -{40,41,-15}, -{40,41,-14}, -{40,41,-13}, -{40,41,-12}, -{40,41,-11}, -{40,41,-10}, -{40,41,-9}, -{40,41,-8}, -{40,41,-7}, -{40,41,-6}, -{40,41,-5}, -{40,41,-4}, -{40,41,-3}, -{40,41,-2}, -{40,41,-1}, -{40,41,0}, -{40,41,1}, -{40,41,2}, -{40,41,3}, -{40,41,4}, -{40,41,5}, -{40,41,6}, -{40,41,7}, -{40,41,8}, -{40,41,9}, -{40,41,10}, -{40,41,11}, -{40,41,12}, -{40,41,13}, -{40,41,14}, -{40,41,15}, -{40,41,16}, -{40,41,17}, -{40,41,18}, -{40,41,19}, -{40,41,20}, -{40,41,21}, -{40,41,22}, -{40,41,23}, -{40,41,24}, -{40,41,25}, -{40,41,26}, -{40,41,27}, -{40,41,28}, -{40,41,29}, -{40,41,30}, -{40,41,31}, -{40,41,32}, -{40,41,33}, -{40,41,34}, -{40,41,35}, -{40,41,36}, -{40,41,37}, -{40,41,38}, -{40,41,39}, -{40,41,40}, -{40,41,41}, -{40,41,42}, -{40,41,43}, -{40,41,44}, -{40,41,45}, -{40,41,46}, -{40,41,47}, -{40,41,48}, -{40,41,49}, -{40,41,50}, -{40,41,51}, -{40,42,-82}, -{40,42,-81}, -{40,42,-80}, -{40,42,-79}, -{40,42,-78}, -{40,42,-77}, -{40,42,-76}, -{40,42,-75}, -{40,42,-74}, -{40,42,-73}, -{40,42,-72}, -{40,42,-71}, -{40,42,-70}, -{40,42,-69}, -{40,42,-68}, -{40,42,-67}, -{40,42,-66}, -{40,42,-65}, -{40,42,-64}, -{40,42,-63}, -{40,42,-62}, -{40,42,-61}, -{40,42,-60}, -{40,42,-59}, -{40,42,-58}, -{40,42,-57}, -{40,42,-56}, -{40,42,-55}, -{40,42,-54}, -{40,42,-53}, -{40,42,-52}, -{40,42,-51}, -{40,42,-50}, -{40,42,-49}, -{40,42,-48}, -{40,42,-47}, -{40,42,-46}, -{40,42,-45}, -{40,42,-44}, -{40,42,-43}, -{40,42,-42}, -{40,42,-41}, -{40,42,-40}, -{40,42,-39}, -{40,42,-38}, -{40,42,-37}, -{40,42,-36}, -{40,42,-35}, -{40,42,-34}, -{40,42,-33}, -{40,42,-32}, -{40,42,-31}, -{40,42,-30}, -{40,42,-29}, -{40,42,-28}, -{40,42,-27}, -{40,42,-26}, -{40,42,-25}, -{40,42,-24}, -{40,42,-23}, -{40,42,-22}, -{40,42,-21}, -{40,42,-20}, -{40,42,-19}, -{40,42,-18}, -{40,42,-17}, -{40,42,-16}, -{40,42,-15}, -{40,42,-14}, -{40,42,-13}, -{40,42,-12}, -{40,42,-11}, -{40,42,-10}, -{40,42,-9}, -{40,42,-8}, -{40,42,-7}, -{40,42,-6}, -{40,42,-5}, -{40,42,-4}, -{40,42,-3}, -{40,42,-2}, -{40,42,-1}, -{40,42,0}, -{40,42,1}, -{40,42,2}, -{40,42,3}, -{40,42,4}, -{40,42,5}, -{40,42,6}, -{40,42,7}, -{40,42,8}, -{40,42,9}, -{40,42,10}, -{40,42,11}, -{40,42,12}, -{40,42,13}, -{40,42,14}, -{40,42,15}, -{40,42,16}, -{40,42,17}, -{40,42,18}, -{40,42,19}, -{40,42,20}, -{40,42,21}, -{40,42,22}, -{40,42,23}, -{40,42,24}, -{40,42,25}, -{40,42,26}, -{40,42,27}, -{40,42,28}, -{40,42,29}, -{40,42,30}, -{40,42,31}, -{40,42,32}, -{40,42,33}, -{40,42,34}, -{40,42,35}, -{40,42,36}, -{40,42,37}, -{40,42,38}, -{40,42,39}, -{40,42,40}, -{40,42,41}, -{40,42,42}, -{40,42,43}, -{40,42,44}, -{40,42,45}, -{40,42,46}, -{40,42,47}, -{40,42,48}, -{40,42,49}, -{40,42,50}, -{40,42,51}, -{40,43,-83}, -{40,43,-82}, -{40,43,-81}, -{40,43,-80}, -{40,43,-79}, -{40,43,-78}, -{40,43,-77}, -{40,43,-76}, -{40,43,-75}, -{40,43,-74}, -{40,43,-73}, -{40,43,-72}, -{40,43,-71}, -{40,43,-70}, -{40,43,-69}, -{40,43,-68}, -{40,43,-67}, -{40,43,-66}, -{40,43,-65}, -{40,43,-64}, -{40,43,-63}, -{40,43,-62}, -{40,43,-61}, -{40,43,-60}, -{40,43,-59}, -{40,43,-58}, -{40,43,-57}, -{40,43,-56}, -{40,43,-55}, -{40,43,-54}, -{40,43,-53}, -{40,43,-52}, -{40,43,-51}, -{40,43,-50}, -{40,43,-49}, -{40,43,-48}, -{40,43,-47}, -{40,43,-46}, -{40,43,-45}, -{40,43,-44}, -{40,43,-43}, -{40,43,-42}, -{40,43,-41}, -{40,43,-40}, -{40,43,-39}, -{40,43,-38}, -{40,43,-37}, -{40,43,-36}, -{40,43,-35}, -{40,43,-34}, -{40,43,-33}, -{40,43,-32}, -{40,43,-31}, -{40,43,-30}, -{40,43,-29}, -{40,43,-28}, -{40,43,-27}, -{40,43,-26}, -{40,43,-25}, -{40,43,-24}, -{40,43,-23}, -{40,43,-22}, -{40,43,-21}, -{40,43,-20}, -{40,43,-19}, -{40,43,-18}, -{40,43,-17}, -{40,43,-16}, -{40,43,-15}, -{40,43,-14}, -{40,43,-13}, -{40,43,-12}, -{40,43,-11}, -{40,43,-10}, -{40,43,-9}, -{40,43,-8}, -{40,43,-7}, -{40,43,-6}, -{40,43,-5}, -{40,43,-4}, -{40,43,-3}, -{40,43,-2}, -{40,43,-1}, -{40,43,0}, -{40,43,1}, -{40,43,2}, -{40,43,3}, -{40,43,4}, -{40,43,5}, -{40,43,6}, -{40,43,7}, -{40,43,8}, -{40,43,9}, -{40,43,10}, -{40,43,11}, -{40,43,12}, -{40,43,13}, -{40,43,14}, -{40,43,15}, -{40,43,16}, -{40,43,17}, -{40,43,18}, -{40,43,19}, -{40,43,20}, -{40,43,21}, -{40,43,22}, -{40,43,23}, -{40,43,24}, -{40,43,25}, -{40,43,26}, -{40,43,27}, -{40,43,28}, -{40,43,29}, -{40,43,30}, -{40,43,31}, -{40,43,32}, -{40,43,33}, -{40,43,34}, -{40,43,35}, -{40,43,36}, -{40,43,37}, -{40,43,38}, -{40,43,39}, -{40,43,40}, -{40,43,41}, -{40,43,42}, -{40,43,43}, -{40,43,44}, -{40,43,45}, -{40,43,46}, -{40,43,47}, -{40,43,48}, -{40,43,49}, -{40,43,50}, -{40,43,51}, -{40,44,-84}, -{40,44,-83}, -{40,44,-82}, -{40,44,-81}, -{40,44,-80}, -{40,44,-79}, -{40,44,-78}, -{40,44,-77}, -{40,44,-76}, -{40,44,-75}, -{40,44,-74}, -{40,44,-73}, -{40,44,-72}, -{40,44,-71}, -{40,44,-70}, -{40,44,-69}, -{40,44,-68}, -{40,44,-67}, -{40,44,-66}, -{40,44,-65}, -{40,44,-64}, -{40,44,-63}, -{40,44,-62}, -{40,44,-61}, -{40,44,-60}, -{40,44,-59}, -{40,44,-58}, -{40,44,-57}, -{40,44,-56}, -{40,44,-55}, -{40,44,-54}, -{40,44,-53}, -{40,44,-52}, -{40,44,-51}, -{40,44,-50}, -{40,44,-49}, -{40,44,-48}, -{40,44,-47}, -{40,44,-46}, -{40,44,-45}, -{40,44,-44}, -{40,44,-43}, -{40,44,-42}, -{40,44,-41}, -{40,44,-40}, -{40,44,-39}, -{40,44,-38}, -{40,44,-37}, -{40,44,-36}, -{40,44,-35}, -{40,44,-34}, -{40,44,-33}, -{40,44,-32}, -{40,44,-31}, -{40,44,-30}, -{40,44,-29}, -{40,44,-28}, -{40,44,-27}, -{40,44,-26}, -{40,44,-25}, -{40,44,-24}, -{40,44,-23}, -{40,44,-22}, -{40,44,-21}, -{40,44,-20}, -{40,44,-19}, -{40,44,-18}, -{40,44,-17}, -{40,44,-16}, -{40,44,-15}, -{40,44,-14}, -{40,44,-13}, -{40,44,-12}, -{40,44,-11}, -{40,44,-10}, -{40,44,-9}, -{40,44,-8}, -{40,44,-7}, -{40,44,-6}, -{40,44,-5}, -{40,44,-4}, -{40,44,-3}, -{40,44,-2}, -{40,44,-1}, -{40,44,0}, -{40,44,1}, -{40,44,2}, -{40,44,3}, -{40,44,4}, -{40,44,5}, -{40,44,6}, -{40,44,7}, -{40,44,8}, -{40,44,9}, -{40,44,10}, -{40,44,11}, -{40,44,12}, -{40,44,13}, -{40,44,14}, -{40,44,15}, -{40,44,16}, -{40,44,17}, -{40,44,18}, -{40,44,19}, -{40,44,20}, -{40,44,21}, -{40,44,22}, -{40,44,23}, -{40,44,24}, -{40,44,25}, -{40,44,26}, -{40,44,27}, -{40,44,28}, -{40,44,29}, -{40,44,30}, -{40,44,31}, -{40,44,32}, -{40,44,33}, -{40,44,34}, -{40,44,35}, -{40,44,36}, -{40,44,37}, -{40,44,38}, -{40,44,39}, -{40,44,40}, -{40,44,41}, -{40,44,42}, -{40,44,43}, -{40,44,44}, -{40,44,45}, -{40,44,46}, -{40,44,47}, -{40,44,48}, -{40,44,49}, -{40,44,50}, -{40,44,51}, -{40,45,-85}, -{40,45,-84}, -{40,45,-83}, -{40,45,-82}, -{40,45,-81}, -{40,45,-80}, -{40,45,-79}, -{40,45,-78}, -{40,45,-77}, -{40,45,-76}, -{40,45,-75}, -{40,45,-74}, -{40,45,-73}, -{40,45,-72}, -{40,45,-71}, -{40,45,-70}, -{40,45,-69}, -{40,45,-68}, -{40,45,-67}, -{40,45,-66}, -{40,45,-65}, -{40,45,-64}, -{40,45,-63}, -{40,45,-62}, -{40,45,-61}, -{40,45,-60}, -{40,45,-59}, -{40,45,-58}, -{40,45,-57}, -{40,45,-56}, -{40,45,-55}, -{40,45,-54}, -{40,45,-53}, -{40,45,-52}, -{40,45,-51}, -{40,45,-50}, -{40,45,-49}, -{40,45,-48}, -{40,45,-47}, -{40,45,-46}, -{40,45,-45}, -{40,45,-44}, -{40,45,-43}, -{40,45,-42}, -{40,45,-41}, -{40,45,-40}, -{40,45,-39}, -{40,45,-38}, -{40,45,-37}, -{40,45,-36}, -{40,45,-35}, -{40,45,-34}, -{40,45,-33}, -{40,45,-32}, -{40,45,-31}, -{40,45,-30}, -{40,45,-29}, -{40,45,-28}, -{40,45,-27}, -{40,45,-26}, -{40,45,-25}, -{40,45,-24}, -{40,45,-23}, -{40,45,-22}, -{40,45,-21}, -{40,45,-20}, -{40,45,-19}, -{40,45,-18}, -{40,45,-17}, -{40,45,-16}, -{40,45,-15}, -{40,45,-14}, -{40,45,-13}, -{40,45,-12}, -{40,45,-11}, -{40,45,-10}, -{40,45,-9}, -{40,45,-8}, -{40,45,-7}, -{40,45,-6}, -{40,45,-5}, -{40,45,-4}, -{40,45,-3}, -{40,45,-2}, -{40,45,-1}, -{40,45,0}, -{40,45,1}, -{40,45,2}, -{40,45,3}, -{40,45,4}, -{40,45,5}, -{40,45,6}, -{40,45,7}, -{40,45,8}, -{40,45,9}, -{40,45,10}, -{40,45,11}, -{40,45,12}, -{40,45,13}, -{40,45,14}, -{40,45,15}, -{40,45,16}, -{40,45,17}, -{40,45,18}, -{40,45,19}, -{40,45,20}, -{40,45,21}, -{40,45,22}, -{40,45,23}, -{40,45,24}, -{40,45,25}, -{40,45,26}, -{40,45,27}, -{40,45,28}, -{40,45,29}, -{40,45,30}, -{40,45,31}, -{40,45,32}, -{40,45,33}, -{40,45,34}, -{40,45,35}, -{40,45,36}, -{40,45,37}, -{40,45,38}, -{40,45,39}, -{40,45,40}, -{40,45,41}, -{40,45,42}, -{40,45,43}, -{40,45,44}, -{40,45,45}, -{40,45,46}, -{40,45,47}, -{40,45,48}, -{40,45,49}, -{40,45,50}, -{40,45,51}, -{40,46,-86}, -{40,46,-85}, -{40,46,-84}, -{40,46,-83}, -{40,46,-82}, -{40,46,-81}, -{40,46,-80}, -{40,46,-79}, -{40,46,-78}, -{40,46,-77}, -{40,46,-76}, -{40,46,-75}, -{40,46,-74}, -{40,46,-73}, -{40,46,-72}, -{40,46,-71}, -{40,46,-70}, -{40,46,-69}, -{40,46,-68}, -{40,46,-67}, -{40,46,-66}, -{40,46,-65}, -{40,46,-64}, -{40,46,-63}, -{40,46,-62}, -{40,46,-61}, -{40,46,-60}, -{40,46,-59}, -{40,46,-58}, -{40,46,-57}, -{40,46,-56}, -{40,46,-55}, -{40,46,-54}, -{40,46,-53}, -{40,46,-52}, -{40,46,-51}, -{40,46,-50}, -{40,46,-49}, -{40,46,-48}, -{40,46,-47}, -{40,46,-46}, -{40,46,-45}, -{40,46,-44}, -{40,46,-43}, -{40,46,-42}, -{40,46,-41}, -{40,46,-40}, -{40,46,-39}, -{40,46,-38}, -{40,46,-37}, -{40,46,-36}, -{40,46,-35}, -{40,46,-34}, -{40,46,-33}, -{40,46,-32}, -{40,46,-31}, -{40,46,-30}, -{40,46,-29}, -{40,46,-28}, -{40,46,-27}, -{40,46,-26}, -{40,46,-25}, -{40,46,-24}, -{40,46,-23}, -{40,46,-22}, -{40,46,-21}, -{40,46,-20}, -{40,46,-19}, -{40,46,-18}, -{40,46,-17}, -{40,46,-16}, -{40,46,-15}, -{40,46,-14}, -{40,46,-13}, -{40,46,-12}, -{40,46,-11}, -{40,46,-10}, -{40,46,-9}, -{40,46,-8}, -{40,46,-7}, -{40,46,-6}, -{40,46,-5}, -{40,46,-4}, -{40,46,-3}, -{40,46,-2}, -{40,46,-1}, -{40,46,0}, -{40,46,1}, -{40,46,2}, -{40,46,3}, -{40,46,4}, -{40,46,5}, -{40,46,6}, -{40,46,7}, -{40,46,8}, -{40,46,9}, -{40,46,10}, -{40,46,11}, -{40,46,12}, -{40,46,13}, -{40,46,14}, -{40,46,15}, -{40,46,16}, -{40,46,17}, -{40,46,18}, -{40,46,19}, -{40,46,20}, -{40,46,21}, -{40,46,22}, -{40,46,23}, -{40,46,24}, -{40,46,25}, -{40,46,26}, -{40,46,27}, -{40,46,28}, -{40,46,29}, -{40,46,30}, -{40,46,31}, -{40,46,32}, -{40,46,33}, -{40,46,34}, -{40,46,35}, -{40,46,36}, -{40,46,37}, -{40,46,38}, -{40,46,39}, -{40,46,40}, -{40,46,41}, -{40,46,42}, -{40,46,43}, -{40,46,44}, -{40,46,45}, -{40,46,46}, -{40,46,47}, -{40,46,48}, -{40,46,49}, -{40,46,50}, -{40,46,51}, -{40,47,-86}, -{40,47,-85}, -{40,47,-84}, -{40,47,-83}, -{40,47,-82}, -{40,47,-81}, -{40,47,-80}, -{40,47,-79}, -{40,47,-78}, -{40,47,-77}, -{40,47,-76}, -{40,47,-75}, -{40,47,-74}, -{40,47,-73}, -{40,47,-72}, -{40,47,-71}, -{40,47,-70}, -{40,47,-69}, -{40,47,-68}, -{40,47,-67}, -{40,47,-66}, -{40,47,-65}, -{40,47,-64}, -{40,47,-63}, -{40,47,-62}, -{40,47,-61}, -{40,47,-60}, -{40,47,-59}, -{40,47,-58}, -{40,47,-57}, -{40,47,-56}, -{40,47,-55}, -{40,47,-54}, -{40,47,-53}, -{40,47,-52}, -{40,47,-51}, -{40,47,-50}, -{40,47,-49}, -{40,47,-48}, -{40,47,-47}, -{40,47,-46}, -{40,47,-45}, -{40,47,-44}, -{40,47,-43}, -{40,47,-42}, -{40,47,-41}, -{40,47,-40}, -{40,47,-39}, -{40,47,-38}, -{40,47,-37}, -{40,47,-36}, -{40,47,-35}, -{40,47,-34}, -{40,47,-33}, -{40,47,-32}, -{40,47,-31}, -{40,47,-30}, -{40,47,-29}, -{40,47,-28}, -{40,47,-27}, -{40,47,-26}, -{40,47,-25}, -{40,47,-24}, -{40,47,-23}, -{40,47,-22}, -{40,47,-21}, -{40,47,-20}, -{40,47,-19}, -{40,47,-18}, -{40,47,-17}, -{40,47,-16}, -{40,47,-15}, -{40,47,-14}, -{40,47,-13}, -{40,47,-12}, -{40,47,-11}, -{40,47,-10}, -{40,47,-9}, -{40,47,-8}, -{40,47,-7}, -{40,47,-6}, -{40,47,-5}, -{40,47,-4}, -{40,47,-3}, -{40,47,-2}, -{40,47,-1}, -{40,47,0}, -{40,47,1}, -{40,47,2}, -{40,47,3}, -{40,47,4}, -{40,47,5}, -{40,47,6}, -{40,47,7}, -{40,47,8}, -{40,47,9}, -{40,47,10}, -{40,47,11}, -{40,47,12}, -{40,47,13}, -{40,47,14}, -{40,47,15}, -{40,47,16}, -{40,47,17}, -{40,47,18}, -{40,47,19}, -{40,47,20}, -{40,47,21}, -{40,47,22}, -{40,47,23}, -{40,47,24}, -{40,47,25}, -{40,47,26}, -{40,47,27}, -{40,47,28}, -{40,47,29}, -{40,47,30}, -{40,47,31}, -{40,47,32}, -{40,47,33}, -{40,47,34}, -{40,47,35}, -{40,47,36}, -{40,47,37}, -{40,47,38}, -{40,47,39}, -{40,47,40}, -{40,47,41}, -{40,47,42}, -{40,47,43}, -{40,47,44}, -{40,47,45}, -{40,47,46}, -{40,47,47}, -{40,47,48}, -{40,47,49}, -{40,47,50}, -{40,47,51}, -{40,47,52}, -{40,48,-87}, -{40,48,-86}, -{40,48,-85}, -{40,48,-84}, -{40,48,-83}, -{40,48,-82}, -{40,48,-81}, -{40,48,-80}, -{40,48,-79}, -{40,48,-78}, -{40,48,-77}, -{40,48,-76}, -{40,48,-75}, -{40,48,-74}, -{40,48,-73}, -{40,48,-72}, -{40,48,-71}, -{40,48,-70}, -{40,48,-69}, -{40,48,-68}, -{40,48,-67}, -{40,48,-66}, -{40,48,-65}, -{40,48,-64}, -{40,48,-63}, -{40,48,-62}, -{40,48,-61}, -{40,48,-60}, -{40,48,-59}, -{40,48,-58}, -{40,48,-57}, -{40,48,-56}, -{40,48,-55}, -{40,48,-54}, -{40,48,-53}, -{40,48,-52}, -{40,48,-51}, -{40,48,-50}, -{40,48,-49}, -{40,48,-48}, -{40,48,-47}, -{40,48,-46}, -{40,48,-45}, -{40,48,-44}, -{40,48,-43}, -{40,48,-42}, -{40,48,-41}, -{40,48,-40}, -{40,48,-39}, -{40,48,-38}, -{40,48,-37}, -{40,48,-36}, -{40,48,-35}, -{40,48,-34}, -{40,48,-33}, -{40,48,-32}, -{40,48,-31}, -{40,48,-30}, -{40,48,-29}, -{40,48,-28}, -{40,48,-27}, -{40,48,-26}, -{40,48,-25}, -{40,48,-24}, -{40,48,-23}, -{40,48,-22}, -{40,48,-21}, -{40,48,-20}, -{40,48,-19}, -{40,48,-18}, -{40,48,-17}, -{40,48,-16}, -{40,48,-15}, -{40,48,-14}, -{40,48,-13}, -{40,48,-12}, -{40,48,-11}, -{40,48,-10}, -{40,48,-9}, -{40,48,-8}, -{40,48,-7}, -{40,48,-6}, -{40,48,-5}, -{40,48,-4}, -{40,48,-3}, -{40,48,-2}, -{40,48,-1}, -{40,48,0}, -{40,48,1}, -{40,48,2}, -{40,48,3}, -{40,48,4}, -{40,48,5}, -{40,48,6}, -{40,48,7}, -{40,48,8}, -{40,48,9}, -{40,48,10}, -{40,48,11}, -{40,48,12}, -{40,48,13}, -{40,48,14}, -{40,48,15}, -{40,48,16}, -{40,48,17}, -{40,48,18}, -{40,48,19}, -{40,48,20}, -{40,48,21}, -{40,48,22}, -{40,48,23}, -{40,48,24}, -{40,48,25}, -{40,48,26}, -{40,48,27}, -{40,48,28}, -{40,48,29}, -{40,48,30}, -{40,48,31}, -{40,48,32}, -{40,48,33}, -{40,48,34}, -{40,48,35}, -{40,48,36}, -{40,48,37}, -{40,48,38}, -{40,48,39}, -{40,48,40}, -{40,48,41}, -{40,48,42}, -{40,48,43}, -{40,48,44}, -{40,48,45}, -{40,48,46}, -{40,48,47}, -{40,48,48}, -{40,48,49}, -{40,48,50}, -{40,48,51}, -{40,48,52}, -{40,49,-88}, -{40,49,-87}, -{40,49,-86}, -{40,49,-85}, -{40,49,-84}, -{40,49,-83}, -{40,49,-82}, -{40,49,-81}, -{40,49,-80}, -{40,49,-79}, -{40,49,-78}, -{40,49,-77}, -{40,49,-76}, -{40,49,-75}, -{40,49,-74}, -{40,49,-73}, -{40,49,-72}, -{40,49,-71}, -{40,49,-70}, -{40,49,-69}, -{40,49,-68}, -{40,49,-67}, -{40,49,-66}, -{40,49,-65}, -{40,49,-64}, -{40,49,-63}, -{40,49,-62}, -{40,49,-61}, -{40,49,-60}, -{40,49,-59}, -{40,49,-58}, -{40,49,-57}, -{40,49,-56}, -{40,49,-55}, -{40,49,-54}, -{40,49,-53}, -{40,49,-52}, -{40,49,-51}, -{40,49,-50}, -{40,49,-49}, -{40,49,-48}, -{40,49,-47}, -{40,49,-46}, -{40,49,-45}, -{40,49,-44}, -{40,49,-43}, -{40,49,-42}, -{40,49,-41}, -{40,49,-40}, -{40,49,-39}, -{40,49,-38}, -{40,49,-37}, -{40,49,-36}, -{40,49,-35}, -{40,49,-34}, -{40,49,-33}, -{40,49,-32}, -{40,49,-31}, -{40,49,-30}, -{40,49,-29}, -{40,49,-28}, -{40,49,-27}, -{40,49,-26}, -{40,49,-25}, -{40,49,-24}, -{40,49,-23}, -{40,49,-22}, -{40,49,-21}, -{40,49,-20}, -{40,49,-19}, -{40,49,-18}, -{40,49,-17}, -{40,49,-16}, -{40,49,-15}, -{40,49,-14}, -{40,49,-13}, -{40,49,-12}, -{40,49,-11}, -{40,49,-10}, -{40,49,-9}, -{40,49,-8}, -{40,49,-7}, -{40,49,-6}, -{40,49,-5}, -{40,49,-4}, -{40,49,-3}, -{40,49,-2}, -{40,49,-1}, -{40,49,0}, -{40,49,1}, -{40,49,2}, -{40,49,3}, -{40,49,4}, -{40,49,5}, -{40,49,6}, -{40,49,7}, -{40,49,8}, -{40,49,9}, -{40,49,10}, -{40,49,11}, -{40,49,12}, -{40,49,13}, -{40,49,14}, -{40,49,15}, -{40,49,16}, -{40,49,17}, -{40,49,18}, -{40,49,19}, -{40,49,20}, -{40,49,21}, -{40,49,22}, -{40,49,23}, -{40,49,24}, -{40,49,25}, -{40,49,26}, -{40,49,27}, -{40,49,28}, -{40,49,29}, -{40,49,30}, -{40,49,31}, -{40,49,32}, -{40,49,33}, -{40,49,34}, -{40,49,35}, -{40,49,36}, -{40,49,37}, -{40,49,38}, -{40,49,39}, -{40,49,40}, -{40,49,41}, -{40,49,42}, -{40,49,43}, -{40,49,44}, -{40,49,45}, -{40,49,46}, -{40,49,47}, -{40,49,48}, -{40,49,49}, -{40,49,50}, -{40,49,51}, -{40,49,52}, -{40,50,-89}, -{40,50,-88}, -{40,50,-87}, -{40,50,-86}, -{40,50,-85}, -{40,50,-84}, -{40,50,-83}, -{40,50,-82}, -{40,50,-81}, -{40,50,-80}, -{40,50,-79}, -{40,50,-78}, -{40,50,-77}, -{40,50,-76}, -{40,50,-75}, -{40,50,-74}, -{40,50,-73}, -{40,50,-72}, -{40,50,-71}, -{40,50,-70}, -{40,50,-69}, -{40,50,-68}, -{40,50,-67}, -{40,50,-66}, -{40,50,-65}, -{40,50,-64}, -{40,50,-63}, -{40,50,-62}, -{40,50,-61}, -{40,50,-60}, -{40,50,-59}, -{40,50,-58}, -{40,50,-57}, -{40,50,-56}, -{40,50,-55}, -{40,50,-54}, -{40,50,-53}, -{40,50,-52}, -{40,50,-51}, -{40,50,-50}, -{40,50,-49}, -{40,50,-48}, -{40,50,-47}, -{40,50,-46}, -{40,50,-45}, -{40,50,-44}, -{40,50,-43}, -{40,50,-42}, -{40,50,-41}, -{40,50,-40}, -{40,50,-39}, -{40,50,-38}, -{40,50,-37}, -{40,50,-36}, -{40,50,-35}, -{40,50,-34}, -{40,50,-33}, -{40,50,-32}, -{40,50,-31}, -{40,50,-30}, -{40,50,-29}, -{40,50,-28}, -{40,50,-27}, -{40,50,-26}, -{40,50,-25}, -{40,50,-24}, -{40,50,-23}, -{40,50,-22}, -{40,50,-21}, -{40,50,-20}, -{40,50,-19}, -{40,50,-18}, -{40,50,-17}, -{40,50,-16}, -{40,50,-15}, -{40,50,-14}, -{40,50,-13}, -{40,50,-12}, -{40,50,-11}, -{40,50,-10}, -{40,50,-9}, -{40,50,-8}, -{40,50,-7}, -{40,50,-6}, -{40,50,-5}, -{40,50,-4}, -{40,50,-3}, -{40,50,-2}, -{40,50,-1}, -{40,50,0}, -{40,50,1}, -{40,50,2}, -{40,50,3}, -{40,50,4}, -{40,50,5}, -{40,50,6}, -{40,50,7}, -{40,50,8}, -{40,50,9}, -{40,50,10}, -{40,50,11}, -{40,50,12}, -{40,50,13}, -{40,50,14}, -{40,50,15}, -{40,50,16}, -{40,50,17}, -{40,50,18}, -{40,50,19}, -{40,50,20}, -{40,50,21}, -{40,50,22}, -{40,50,23}, -{40,50,24}, -{40,50,25}, -{40,50,26}, -{40,50,27}, -{40,50,28}, -{40,50,29}, -{40,50,30}, -{40,50,31}, -{40,50,32}, -{40,50,33}, -{40,50,34}, -{40,50,35}, -{40,50,36}, -{40,50,37}, -{40,50,38}, -{40,50,39}, -{40,50,40}, -{40,50,41}, -{40,50,42}, -{40,50,43}, -{40,50,44}, -{40,50,45}, -{40,50,46}, -{40,50,47}, -{40,50,48}, -{40,50,49}, -{40,50,50}, -{40,50,51}, -{40,50,52}, -{40,51,-90}, -{40,51,-89}, -{40,51,-88}, -{40,51,-87}, -{40,51,-86}, -{40,51,-85}, -{40,51,-84}, -{40,51,-83}, -{40,51,-82}, -{40,51,-81}, -{40,51,-80}, -{40,51,-79}, -{40,51,-78}, -{40,51,-77}, -{40,51,-76}, -{40,51,-75}, -{40,51,-74}, -{40,51,-73}, -{40,51,-72}, -{40,51,-71}, -{40,51,-70}, -{40,51,-69}, -{40,51,-68}, -{40,51,-67}, -{40,51,-66}, -{40,51,-65}, -{40,51,-64}, -{40,51,-63}, -{40,51,-62}, -{40,51,-61}, -{40,51,-60}, -{40,51,-59}, -{40,51,-58}, -{40,51,-57}, -{40,51,-56}, -{40,51,-55}, -{40,51,-54}, -{40,51,-53}, -{40,51,-52}, -{40,51,-51}, -{40,51,-50}, -{40,51,-49}, -{40,51,-48}, -{40,51,-47}, -{40,51,-46}, -{40,51,-45}, -{40,51,-44}, -{40,51,-43}, -{40,51,-42}, -{40,51,-41}, -{40,51,-40}, -{40,51,-39}, -{40,51,-38}, -{40,51,-37}, -{40,51,-36}, -{40,51,-35}, -{40,51,-34}, -{40,51,-33}, -{40,51,-32}, -{40,51,-31}, -{40,51,-30}, -{40,51,-29}, -{40,51,-28}, -{40,51,-27}, -{40,51,-26}, -{40,51,-25}, -{40,51,-24}, -{40,51,-23}, -{40,51,-22}, -{40,51,-21}, -{40,51,-20}, -{40,51,-19}, -{40,51,-18}, -{40,51,-17}, -{40,51,-16}, -{40,51,-15}, -{40,51,-14}, -{40,51,-13}, -{40,51,-12}, -{40,51,-11}, -{40,51,-10}, -{40,51,-9}, -{40,51,-8}, -{40,51,-7}, -{40,51,-6}, -{40,51,-5}, -{40,51,-4}, -{40,51,-3}, -{40,51,-2}, -{40,51,-1}, -{40,51,0}, -{40,51,1}, -{40,51,2}, -{40,51,3}, -{40,51,4}, -{40,51,5}, -{40,51,6}, -{40,51,7}, -{40,51,8}, -{40,51,9}, -{40,51,10}, -{40,51,11}, -{40,51,12}, -{40,51,13}, -{40,51,14}, -{40,51,15}, -{40,51,16}, -{40,51,17}, -{40,51,18}, -{40,51,19}, -{40,51,20}, -{40,51,21}, -{40,51,22}, -{40,51,23}, -{40,51,24}, -{40,51,25}, -{40,51,26}, -{40,51,27}, -{40,51,28}, -{40,51,29}, -{40,51,30}, -{40,51,31}, -{40,51,32}, -{40,51,33}, -{40,51,34}, -{40,51,35}, -{40,51,36}, -{40,51,37}, -{40,51,38}, -{40,51,39}, -{40,51,40}, -{40,51,41}, -{40,51,42}, -{40,51,43}, -{40,51,44}, -{40,51,45}, -{40,51,46}, -{40,51,47}, -{40,51,48}, -{40,51,49}, -{40,51,50}, -{40,51,51}, -{40,51,52}, -{40,52,-91}, -{40,52,-90}, -{40,52,-89}, -{40,52,-88}, -{40,52,-87}, -{40,52,-86}, -{40,52,-85}, -{40,52,-84}, -{40,52,-83}, -{40,52,-82}, -{40,52,-81}, -{40,52,-80}, -{40,52,-79}, -{40,52,-78}, -{40,52,-77}, -{40,52,-76}, -{40,52,-75}, -{40,52,-74}, -{40,52,-73}, -{40,52,-72}, -{40,52,-71}, -{40,52,-70}, -{40,52,-69}, -{40,52,-68}, -{40,52,-67}, -{40,52,-66}, -{40,52,-65}, -{40,52,-64}, -{40,52,-63}, -{40,52,-62}, -{40,52,-61}, -{40,52,-60}, -{40,52,-59}, -{40,52,-58}, -{40,52,-57}, -{40,52,-56}, -{40,52,-55}, -{40,52,-54}, -{40,52,-53}, -{40,52,-52}, -{40,52,-51}, -{40,52,-50}, -{40,52,-49}, -{40,52,-48}, -{40,52,-47}, -{40,52,-46}, -{40,52,-45}, -{40,52,-44}, -{40,52,-43}, -{40,52,-42}, -{40,52,-41}, -{40,52,-40}, -{40,52,-39}, -{40,52,-38}, -{40,52,-37}, -{40,52,-36}, -{40,52,-35}, -{40,52,-34}, -{40,52,-33}, -{40,52,-32}, -{40,52,-31}, -{40,52,-30}, -{40,52,-29}, -{40,52,-28}, -{40,52,-27}, -{40,52,-26}, -{40,52,-25}, -{40,52,-24}, -{40,52,-23}, -{40,52,-22}, -{40,52,-21}, -{40,52,-20}, -{40,52,-19}, -{40,52,-18}, -{40,52,-17}, -{40,52,-16}, -{40,52,-15}, -{40,52,-14}, -{40,52,-13}, -{40,52,-12}, -{40,52,-11}, -{40,52,-10}, -{40,52,-9}, -{40,52,-8}, -{40,52,-7}, -{40,52,-6}, -{40,52,-5}, -{40,52,-4}, -{40,52,-3}, -{40,52,-2}, -{40,52,-1}, -{40,52,0}, -{40,52,1}, -{40,52,2}, -{40,52,3}, -{40,52,4}, -{40,52,5}, -{40,52,6}, -{40,52,7}, -{40,52,8}, -{40,52,9}, -{40,52,10}, -{40,52,11}, -{40,52,12}, -{40,52,13}, -{40,52,14}, -{40,52,15}, -{40,52,16}, -{40,52,17}, -{40,52,18}, -{40,52,19}, -{40,52,20}, -{40,52,21}, -{40,52,22}, -{40,52,23}, -{40,52,24}, -{40,52,25}, -{40,52,26}, -{40,52,27}, -{40,52,28}, -{40,52,29}, -{40,52,30}, -{40,52,31}, -{40,52,32}, -{40,52,33}, -{40,52,34}, -{40,52,35}, -{40,52,36}, -{40,52,37}, -{40,52,38}, -{40,52,39}, -{40,52,40}, -{40,52,41}, -{40,52,42}, -{40,52,43}, -{40,52,44}, -{40,52,45}, -{40,52,46}, -{40,52,47}, -{40,52,48}, -{40,52,49}, -{40,52,50}, -{40,52,51}, -{40,52,52}, -{40,53,-92}, -{40,53,-91}, -{40,53,-90}, -{40,53,-89}, -{40,53,-88}, -{40,53,-87}, -{40,53,-86}, -{40,53,-85}, -{40,53,-84}, -{40,53,-83}, -{40,53,-82}, -{40,53,-81}, -{40,53,-80}, -{40,53,-79}, -{40,53,-78}, -{40,53,-77}, -{40,53,-76}, -{40,53,-75}, -{40,53,-74}, -{40,53,-73}, -{40,53,-72}, -{40,53,-71}, -{40,53,-70}, -{40,53,-69}, -{40,53,-68}, -{40,53,-67}, -{40,53,-66}, -{40,53,-65}, -{40,53,-64}, -{40,53,-63}, -{40,53,-62}, -{40,53,-61}, -{40,53,-60}, -{40,53,-59}, -{40,53,-58}, -{40,53,-57}, -{40,53,-56}, -{40,53,-55}, -{40,53,-54}, -{40,53,-53}, -{40,53,-52}, -{40,53,-51}, -{40,53,-50}, -{40,53,-49}, -{40,53,-48}, -{40,53,-47}, -{40,53,-46}, -{40,53,-45}, -{40,53,-44}, -{40,53,-43}, -{40,53,-42}, -{40,53,-41}, -{40,53,-40}, -{40,53,-39}, -{40,53,-38}, -{40,53,-37}, -{40,53,-36}, -{40,53,-35}, -{40,53,-34}, -{40,53,-33}, -{40,53,-32}, -{40,53,-31}, -{40,53,-30}, -{40,53,-29}, -{40,53,-28}, -{40,53,-27}, -{40,53,-26}, -{40,53,-25}, -{40,53,-24}, -{40,53,-23}, -{40,53,-22}, -{40,53,-21}, -{40,53,-20}, -{40,53,-19}, -{40,53,-18}, -{40,53,-17}, -{40,53,-16}, -{40,53,-15}, -{40,53,-14}, -{40,53,-13}, -{40,53,-12}, -{40,53,-11}, -{40,53,-10}, -{40,53,-9}, -{40,53,-8}, -{40,53,-7}, -{40,53,-6}, -{40,53,-5}, -{40,53,-4}, -{40,53,-3}, -{40,53,-2}, -{40,53,-1}, -{40,53,0}, -{40,53,1}, -{40,53,2}, -{40,53,3}, -{40,53,4}, -{40,53,5}, -{40,53,6}, -{40,53,7}, -{40,53,8}, -{40,53,9}, -{40,53,10}, -{40,53,11}, -{40,53,12}, -{40,53,13}, -{40,53,14}, -{40,53,15}, -{40,53,16}, -{40,53,17}, -{40,53,18}, -{40,53,19}, -{40,53,20}, -{40,53,21}, -{40,53,22}, -{40,53,23}, -{40,53,24}, -{40,53,25}, -{40,53,26}, -{40,53,27}, -{40,53,28}, -{40,53,29}, -{40,53,30}, -{40,53,31}, -{40,53,32}, -{40,53,33}, -{40,53,34}, -{40,53,35}, -{40,53,36}, -{40,53,37}, -{40,53,38}, -{40,53,39}, -{40,53,40}, -{40,53,41}, -{40,53,42}, -{40,53,43}, -{40,53,44}, -{40,53,45}, -{40,53,46}, -{40,53,47}, -{40,53,48}, -{40,53,49}, -{40,53,50}, -{40,53,51}, -{40,53,52}, -{40,54,-93}, -{40,54,-92}, -{40,54,-91}, -{40,54,-90}, -{40,54,-89}, -{40,54,-88}, -{40,54,-87}, -{40,54,-86}, -{40,54,-85}, -{40,54,-84}, -{40,54,-83}, -{40,54,-82}, -{40,54,-81}, -{40,54,-80}, -{40,54,-79}, -{40,54,-78}, -{40,54,-77}, -{40,54,-76}, -{40,54,-75}, -{40,54,-74}, -{40,54,-73}, -{40,54,-72}, -{40,54,-71}, -{40,54,-70}, -{40,54,-69}, -{40,54,-68}, -{40,54,-67}, -{40,54,-66}, -{40,54,-65}, -{40,54,-64}, -{40,54,-63}, -{40,54,-62}, -{40,54,-61}, -{40,54,-60}, -{40,54,-59}, -{40,54,-58}, -{40,54,-57}, -{40,54,-56}, -{40,54,-55}, -{40,54,-54}, -{40,54,-53}, -{40,54,-52}, -{40,54,-51}, -{40,54,-50}, -{40,54,-49}, -{40,54,-48}, -{40,54,-47}, -{40,54,-46}, -{40,54,-45}, -{40,54,-44}, -{40,54,-43}, -{40,54,-42}, -{40,54,-41}, -{40,54,-40}, -{40,54,-39}, -{40,54,-38}, -{40,54,-37}, -{40,54,-36}, -{40,54,-35}, -{40,54,-34}, -{40,54,-33}, -{40,54,-32}, -{40,54,-31}, -{40,54,-30}, -{40,54,-29}, -{40,54,-28}, -{40,54,-27}, -{40,54,-26}, -{40,54,-25}, -{40,54,-24}, -{40,54,-23}, -{40,54,-22}, -{40,54,-21}, -{40,54,-20}, -{40,54,-19}, -{40,54,-18}, -{40,54,-17}, -{40,54,-16}, -{40,54,-15}, -{40,54,-14}, -{40,54,-13}, -{40,54,-12}, -{40,54,-11}, -{40,54,-10}, -{40,54,-9}, -{40,54,-8}, -{40,54,-7}, -{40,54,-6}, -{40,54,-5}, -{40,54,-4}, -{40,54,-3}, -{40,54,-2}, -{40,54,-1}, -{40,54,0}, -{40,54,1}, -{40,54,2}, -{40,54,3}, -{40,54,4}, -{40,54,5}, -{40,54,6}, -{40,54,7}, -{40,54,8}, -{40,54,9}, -{40,54,10}, -{40,54,11}, -{40,54,12}, -{40,54,13}, -{40,54,14}, -{40,54,15}, -{40,54,16}, -{40,54,17}, -{40,54,18}, -{40,54,19}, -{40,54,20}, -{40,54,21}, -{40,54,22}, -{40,54,23}, -{40,54,24}, -{40,54,25}, -{40,54,26}, -{40,54,27}, -{40,54,28}, -{40,54,29}, -{40,54,30}, -{40,54,31}, -{40,54,32}, -{40,54,33}, -{40,54,34}, -{40,54,35}, -{40,54,36}, -{40,54,37}, -{40,54,38}, -{40,54,39}, -{40,54,40}, -{40,54,41}, -{40,54,42}, -{40,54,43}, -{40,54,44}, -{40,54,45}, -{40,54,46}, -{40,54,47}, -{40,54,48}, -{40,54,49}, -{40,54,50}, -{40,54,51}, -{40,54,52}, -{40,54,53}, -{40,55,-94}, -{40,55,-93}, -{40,55,-92}, -{40,55,-91}, -{40,55,-90}, -{40,55,-89}, -{40,55,-88}, -{40,55,-87}, -{40,55,-86}, -{40,55,-85}, -{40,55,-84}, -{40,55,-83}, -{40,55,-82}, -{40,55,-81}, -{40,55,-80}, -{40,55,-79}, -{40,55,-78}, -{40,55,-77}, -{40,55,-76}, -{40,55,-75}, -{40,55,-74}, -{40,55,-73}, -{40,55,-72}, -{40,55,-71}, -{40,55,-70}, -{40,55,-69}, -{40,55,-68}, -{40,55,-67}, -{40,55,-66}, -{40,55,-65}, -{40,55,-64}, -{40,55,-63}, -{40,55,-62}, -{40,55,-61}, -{40,55,-60}, -{40,55,-59}, -{40,55,-58}, -{40,55,-57}, -{40,55,-56}, -{40,55,-55}, -{40,55,-54}, -{40,55,-53}, -{40,55,-52}, -{40,55,-51}, -{40,55,-50}, -{40,55,-49}, -{40,55,-48}, -{40,55,-47}, -{40,55,-46}, -{40,55,-45}, -{40,55,-44}, -{40,55,-43}, -{40,55,-42}, -{40,55,-41}, -{40,55,-40}, -{40,55,-39}, -{40,55,-38}, -{40,55,-37}, -{40,55,-36}, -{40,55,-35}, -{40,55,-34}, -{40,55,-33}, -{40,55,-32}, -{40,55,-31}, -{40,55,-30}, -{40,55,-29}, -{40,55,-28}, -{40,55,-27}, -{40,55,-26}, -{40,55,-25}, -{40,55,-24}, -{40,55,-23}, -{40,55,-22}, -{40,55,-21}, -{40,55,-20}, -{40,55,-19}, -{40,55,-18}, -{40,55,-17}, -{40,55,-16}, -{40,55,-15}, -{40,55,-14}, -{40,55,-13}, -{40,55,-12}, -{40,55,-11}, -{40,55,-10}, -{40,55,-9}, -{40,55,-8}, -{40,55,-7}, -{40,55,-6}, -{40,55,-5}, -{40,55,-4}, -{40,55,-3}, -{40,55,-2}, -{40,55,-1}, -{40,55,0}, -{40,55,1}, -{40,55,2}, -{40,55,3}, -{40,55,4}, -{40,55,5}, -{40,55,6}, -{40,55,7}, -{40,55,8}, -{40,55,9}, -{40,55,10}, -{40,55,11}, -{40,55,12}, -{40,55,13}, -{40,55,14}, -{40,55,15}, -{40,55,16}, -{40,55,17}, -{40,55,18}, -{40,55,19}, -{40,55,20}, -{40,55,21}, -{40,55,22}, -{40,55,23}, -{40,55,24}, -{40,55,25}, -{40,55,26}, -{40,55,27}, -{40,55,28}, -{40,55,29}, -{40,55,30}, -{40,55,31}, -{40,55,32}, -{40,55,33}, -{40,55,34}, -{40,55,35}, -{40,55,36}, -{40,55,37}, -{40,55,38}, -{40,55,39}, -{40,55,40}, -{40,55,41}, -{40,55,42}, -{40,55,43}, -{40,55,44}, -{40,55,45}, -{40,55,46}, -{40,55,47}, -{40,55,48}, -{40,55,49}, -{40,55,50}, -{40,55,51}, -{40,55,52}, -{40,55,53}, -{40,56,-94}, -{40,56,-93}, -{40,56,-92}, -{40,56,-91}, -{40,56,-90}, -{40,56,-89}, -{40,56,-88}, -{40,56,-87}, -{40,56,-86}, -{40,56,-85}, -{40,56,-84}, -{40,56,-83}, -{40,56,-82}, -{40,56,-81}, -{40,56,-80}, -{40,56,-79}, -{40,56,-78}, -{40,56,-77}, -{40,56,-76}, -{40,56,-75}, -{40,56,-74}, -{40,56,-73}, -{40,56,-72}, -{40,56,-71}, -{40,56,-70}, -{40,56,-69}, -{40,56,-68}, -{40,56,-67}, -{40,56,-66}, -{40,56,-65}, -{40,56,-64}, -{40,56,-63}, -{40,56,-62}, -{40,56,-61}, -{40,56,-60}, -{40,56,-59}, -{40,56,-58}, -{40,56,-57}, -{40,56,-56}, -{40,56,-55}, -{40,56,-54}, -{40,56,-53}, -{40,56,-52}, -{40,56,-51}, -{40,56,-50}, -{40,56,-49}, -{40,56,-48}, -{40,56,-47}, -{40,56,-46}, -{40,56,-45}, -{40,56,-44}, -{40,56,-43}, -{40,56,-42}, -{40,56,-41}, -{40,56,-40}, -{40,56,-39}, -{40,56,-38}, -{40,56,-37}, -{40,56,-36}, -{40,56,-35}, -{40,56,-34}, -{40,56,-33}, -{40,56,-32}, -{40,56,-31}, -{40,56,-30}, -{40,56,-29}, -{40,56,-28}, -{40,56,-27}, -{40,56,-26}, -{40,56,-25}, -{40,56,-24}, -{40,56,-23}, -{40,56,-22}, -{40,56,-21}, -{40,56,-20}, -{40,56,-19}, -{40,56,-18}, -{40,56,-17}, -{40,56,-16}, -{40,56,-15}, -{40,56,-14}, -{40,56,-13}, -{40,56,-12}, -{40,56,-11}, -{40,56,-10}, -{40,56,-9}, -{40,56,-8}, -{40,56,-7}, -{40,56,-6}, -{40,56,-5}, -{40,56,-4}, -{40,56,-3}, -{40,56,-2}, -{40,56,-1}, -{40,56,0}, -{40,56,1}, -{40,56,2}, -{40,56,3}, -{40,56,4}, -{40,56,5}, -{40,56,6}, -{40,56,7}, -{40,56,8}, -{40,56,9}, -{40,56,10}, -{40,56,11}, -{40,56,12}, -{40,56,13}, -{40,56,14}, -{40,56,15}, -{40,56,16}, -{40,56,17}, -{40,56,18}, -{40,56,19}, -{40,56,20}, -{40,56,21}, -{40,56,22}, -{40,56,23}, -{40,56,24}, -{40,56,25}, -{40,56,26}, -{40,56,27}, -{40,56,28}, -{40,56,29}, -{40,56,30}, -{40,56,31}, -{40,56,32}, -{40,56,33}, -{40,56,34}, -{40,56,35}, -{40,56,36}, -{40,56,37}, -{40,56,38}, -{40,56,39}, -{40,56,40}, -{40,56,41}, -{40,56,42}, -{40,56,43}, -{40,56,44}, -{40,56,45}, -{40,56,46}, -{40,56,47}, -{40,56,48}, -{40,56,49}, -{40,56,50}, -{40,56,51}, -{40,56,52}, -{40,56,53}, -{40,57,-95}, -{40,57,-94}, -{40,57,-93}, -{40,57,-92}, -{40,57,-91}, -{40,57,-90}, -{40,57,-89}, -{40,57,-88}, -{40,57,-87}, -{40,57,-86}, -{40,57,-85}, -{40,57,-84}, -{40,57,-83}, -{40,57,-82}, -{40,57,-81}, -{40,57,-80}, -{40,57,-79}, -{40,57,-78}, -{40,57,-77}, -{40,57,-76}, -{40,57,-75}, -{40,57,-74}, -{40,57,-73}, -{40,57,-72}, -{40,57,-71}, -{40,57,-70}, -{40,57,-69}, -{40,57,-68}, -{40,57,-67}, -{40,57,-66}, -{40,57,-65}, -{40,57,-64}, -{40,57,-63}, -{40,57,-62}, -{40,57,-61}, -{40,57,-60}, -{40,57,-59}, -{40,57,-58}, -{40,57,-57}, -{40,57,-56}, -{40,57,-55}, -{40,57,-54}, -{40,57,-53}, -{40,57,-52}, -{40,57,-51}, -{40,57,-50}, -{40,57,-49}, -{40,57,-48}, -{40,57,-47}, -{40,57,-46}, -{40,57,-45}, -{40,57,-44}, -{40,57,-43}, -{40,57,-42}, -{40,57,-41}, -{40,57,-40}, -{40,57,-39}, -{40,57,-38}, -{40,57,-37}, -{40,57,-36}, -{40,57,-35}, -{40,57,-34}, -{40,57,-33}, -{40,57,-32}, -{40,57,-31}, -{40,57,-30}, -{40,57,-29}, -{40,57,-28}, -{40,57,-27}, -{40,57,-26}, -{40,57,-25}, -{40,57,-24}, -{40,57,-23}, -{40,57,-22}, -{40,57,-21}, -{40,57,-20}, -{40,57,-19}, -{40,57,-18}, -{40,57,-17}, -{40,57,-16}, -{40,57,-15}, -{40,57,-14}, -{40,57,-13}, -{40,57,-12}, -{40,57,-11}, -{40,57,-10}, -{40,57,-9}, -{40,57,-8}, -{40,57,-7}, -{40,57,-6}, -{40,57,-5}, -{40,57,-4}, -{40,57,-3}, -{40,57,-2}, -{40,57,-1}, -{40,57,0}, -{40,57,1}, -{40,57,2}, -{40,57,3}, -{40,57,4}, -{40,57,5}, -{40,57,6}, -{40,57,7}, -{40,57,8}, -{40,57,9}, -{40,57,10}, -{40,57,11}, -{40,57,12}, -{40,57,13}, -{40,57,14}, -{40,57,15}, -{40,57,16}, -{40,57,17}, -{40,57,18}, -{40,57,19}, -{40,57,20}, -{40,57,21}, -{40,57,22}, -{40,57,23}, -{40,57,24}, -{40,57,25}, -{40,57,26}, -{40,57,27}, -{40,57,28}, -{40,57,29}, -{40,57,30}, -{40,57,31}, -{40,57,32}, -{40,57,33}, -{40,57,34}, -{40,57,35}, -{40,57,36}, -{40,57,37}, -{40,57,38}, -{40,57,39}, -{40,57,40}, -{40,57,41}, -{40,57,42}, -{40,57,43}, -{40,57,44}, -{40,57,45}, -{40,57,46}, -{40,57,47}, -{40,57,48}, -{40,57,49}, -{40,57,50}, -{40,57,51}, -{40,57,52}, -{40,57,53}, -{40,58,-95}, -{40,58,-94}, -{40,58,-93}, -{40,58,-92}, -{40,58,-91}, -{40,58,-90}, -{40,58,-89}, -{40,58,-88}, -{40,58,-87}, -{40,58,-86}, -{40,58,-85}, -{40,58,-84}, -{40,58,-83}, -{40,58,-82}, -{40,58,-81}, -{40,58,-80}, -{40,58,-79}, -{40,58,-78}, -{40,58,-77}, -{40,58,-76}, -{40,58,-75}, -{40,58,-74}, -{40,58,-73}, -{40,58,-72}, -{40,58,-71}, -{40,58,-70}, -{40,58,-69}, -{40,58,-68}, -{40,58,-67}, -{40,58,-66}, -{40,58,-65}, -{40,58,-64}, -{40,58,-63}, -{40,58,-62}, -{40,58,-61}, -{40,58,-60}, -{40,58,-59}, -{40,58,-58}, -{40,58,-57}, -{40,58,-56}, -{40,58,-55}, -{40,58,-54}, -{40,58,-53}, -{40,58,-52}, -{40,58,-51}, -{40,58,-50}, -{40,58,-49}, -{40,58,-48}, -{40,58,-47}, -{40,58,-46}, -{40,58,-45}, -{40,58,-44}, -{40,58,-43}, -{40,58,-42}, -{40,58,-41}, -{40,58,-40}, -{40,58,-39}, -{40,58,-38}, -{40,58,-37}, -{40,58,-36}, -{40,58,-35}, -{40,58,-34}, -{40,58,-33}, -{40,58,-32}, -{40,58,-31}, -{40,58,-30}, -{40,58,-29}, -{40,58,-28}, -{40,58,-27}, -{40,58,-26}, -{40,58,-25}, -{40,58,-24}, -{40,58,-23}, -{40,58,-22}, -{40,58,-21}, -{40,58,-20}, -{40,58,-19}, -{40,58,-18}, -{40,58,-17}, -{40,58,-16}, -{40,58,-15}, -{40,58,-14}, -{40,58,-13}, -{40,58,-12}, -{40,58,-11}, -{40,58,-10}, -{40,58,-9}, -{40,58,-8}, -{40,58,-7}, -{40,58,-6}, -{40,58,-5}, -{40,58,-4}, -{40,58,-3}, -{40,58,-2}, -{40,58,-1}, -{40,58,0}, -{40,58,1}, -{40,58,2}, -{40,58,3}, -{40,58,4}, -{40,58,5}, -{40,58,6}, -{40,58,7}, -{40,58,8}, -{40,58,9}, -{40,58,10}, -{40,58,11}, -{40,58,12}, -{40,58,13}, -{40,58,14}, -{40,58,15}, -{40,58,16}, -{40,58,17}, -{40,58,18}, -{40,58,19}, -{40,58,20}, -{40,58,21}, -{40,58,22}, -{40,58,23}, -{40,58,24}, -{40,58,25}, -{40,58,26}, -{40,58,27}, -{40,58,28}, -{40,58,29}, -{40,58,30}, -{40,58,31}, -{40,58,32}, -{40,58,33}, -{40,58,34}, -{40,58,35}, -{40,58,36}, -{40,58,37}, -{40,58,38}, -{40,58,39}, -{40,58,40}, -{40,58,41}, -{40,58,42}, -{40,58,43}, -{40,58,44}, -{40,58,45}, -{40,58,46}, -{40,58,47}, -{40,58,48}, -{40,58,49}, -{40,58,50}, -{40,58,51}, -{40,58,52}, -{40,58,53}, -{40,59,-95}, -{40,59,-94}, -{40,59,-93}, -{40,59,-92}, -{40,59,-91}, -{40,59,-90}, -{40,59,-89}, -{40,59,-88}, -{40,59,-87}, -{40,59,-86}, -{40,59,-85}, -{40,59,-84}, -{40,59,-83}, -{40,59,-82}, -{40,59,-81}, -{40,59,-80}, -{40,59,-79}, -{40,59,-78}, -{40,59,-77}, -{40,59,-76}, -{40,59,-75}, -{40,59,-74}, -{40,59,-73}, -{40,59,-72}, -{40,59,-71}, -{40,59,-70}, -{40,59,-69}, -{40,59,-68}, -{40,59,-67}, -{40,59,-66}, -{40,59,-65}, -{40,59,-64}, -{40,59,-63}, -{40,59,-62}, -{40,59,-61}, -{40,59,-60}, -{40,59,-59}, -{40,59,-58}, -{40,59,-57}, -{40,59,-56}, -{40,59,-55}, -{40,59,-54}, -{40,59,-53}, -{40,59,-52}, -{40,59,-51}, -{40,59,-50}, -{40,59,-49}, -{40,59,-48}, -{40,59,-47}, -{40,59,-46}, -{40,59,-45}, -{40,59,-44}, -{40,59,-43}, -{40,59,-42}, -{40,59,-41}, -{40,59,-40}, -{40,59,-39}, -{40,59,-38}, -{40,59,-37}, -{40,59,-36}, -{40,59,-35}, -{40,59,-34}, -{40,59,-33}, -{40,59,-32}, -{40,59,-31}, -{40,59,-30}, -{40,59,-29}, -{40,59,-28}, -{40,59,-27}, -{40,59,-26}, -{40,59,-25}, -{40,59,-24}, -{40,59,-23}, -{40,59,-22}, -{40,59,-21}, -{40,59,-20}, -{40,59,-19}, -{40,59,-18}, -{40,59,-17}, -{40,59,-16}, -{40,59,-15}, -{40,59,-14}, -{40,59,-13}, -{40,59,-12}, -{40,59,-11}, -{40,59,-10}, -{40,59,-9}, -{40,59,-8}, -{40,59,-7}, -{40,59,-6}, -{40,59,-5}, -{40,59,-4}, -{40,59,-3}, -{40,59,-2}, -{40,59,-1}, -{40,59,0}, -{40,59,1}, -{40,59,2}, -{40,59,3}, -{40,59,4}, -{40,59,5}, -{40,59,6}, -{40,59,7}, -{40,59,8}, -{40,59,9}, -{40,59,10}, -{40,59,11}, -{40,59,12}, -{40,59,13}, -{40,59,14}, -{40,59,15}, -{40,59,16}, -{40,59,17}, -{40,59,18}, -{40,59,19}, -{40,59,20}, -{40,59,21}, -{40,59,22}, -{40,59,23}, -{40,59,24}, -{40,59,25}, -{40,59,26}, -{40,59,27}, -{40,59,28}, -{40,59,29}, -{40,59,30}, -{40,59,31}, -{40,59,32}, -{40,59,33}, -{40,59,34}, -{40,59,35}, -{40,59,36}, -{40,59,37}, -{40,59,38}, -{40,59,39}, -{40,59,40}, -{40,59,41}, -{40,59,42}, -{40,59,43}, -{40,59,44}, -{40,59,45}, -{40,59,46}, -{40,59,47}, -{40,59,48}, -{40,59,49}, -{40,59,50}, -{40,59,51}, -{40,59,52}, -{40,59,53}, -{40,60,-95}, -{40,60,-94}, -{40,60,-93}, -{40,60,-92}, -{40,60,-91}, -{40,60,-90}, -{40,60,-89}, -{40,60,-88}, -{40,60,-87}, -{40,60,-86}, -{40,60,-85}, -{40,60,-84}, -{40,60,-83}, -{40,60,-82}, -{40,60,-81}, -{40,60,-80}, -{40,60,-79}, -{40,60,-78}, -{40,60,-77}, -{40,60,-76}, -{40,60,-75}, -{40,60,-74}, -{40,60,-73}, -{40,60,-72}, -{40,60,-71}, -{40,60,-70}, -{40,60,-69}, -{40,60,-68}, -{40,60,-67}, -{40,60,-66}, -{40,60,-65}, -{40,60,-64}, -{40,60,-63}, -{40,60,-62}, -{40,60,-61}, -{40,60,-60}, -{40,60,-59}, -{40,60,-58}, -{40,60,-57}, -{40,60,-56}, -{40,60,-55}, -{40,60,-54}, -{40,60,-53}, -{40,60,-52}, -{40,60,-51}, -{40,60,-50}, -{40,60,-49}, -{40,60,-48}, -{40,60,-47}, -{40,60,-46}, -{40,60,-45}, -{40,60,-44}, -{40,60,-43}, -{40,60,-42}, -{40,60,-41}, -{40,60,-40}, -{40,60,-39}, -{40,60,-38}, -{40,60,-37}, -{40,60,-36}, -{40,60,-35}, -{40,60,-34}, -{40,60,-33}, -{40,60,-32}, -{40,60,-31}, -{40,60,-30}, -{40,60,-29}, -{40,60,-28}, -{40,60,-27}, -{40,60,-26}, -{40,60,-25}, -{40,60,-24}, -{40,60,-23}, -{40,60,-22}, -{40,60,-21}, -{40,60,-20}, -{40,60,-19}, -{40,60,-18}, -{40,60,-17}, -{40,60,-16}, -{40,60,-15}, -{40,60,-14}, -{40,60,-13}, -{40,60,-12}, -{40,60,-11}, -{40,60,-10}, -{40,60,-9}, -{40,60,-8}, -{40,60,-7}, -{40,60,-6}, -{40,60,-5}, -{40,60,-4}, -{40,60,-3}, -{40,60,-2}, -{40,60,-1}, -{40,60,0}, -{40,60,1}, -{40,60,2}, -{40,60,3}, -{40,60,4}, -{40,60,5}, -{40,60,6}, -{40,60,7}, -{40,60,8}, -{40,60,9}, -{40,60,10}, -{40,60,11}, -{40,60,12}, -{40,60,13}, -{40,60,14}, -{40,60,15}, -{40,60,16}, -{40,60,17}, -{40,60,18}, -{40,60,19}, -{40,60,20}, -{40,60,21}, -{40,60,22}, -{40,60,23}, -{40,60,24}, -{40,60,25}, -{40,60,26}, -{40,60,27}, -{40,60,28}, -{40,60,29}, -{40,60,30}, -{40,60,31}, -{40,60,32}, -{40,60,33}, -{40,60,34}, -{40,60,35}, -{40,60,36}, -{40,60,37}, -{40,60,38}, -{40,60,39}, -{40,60,40}, -{40,60,41}, -{40,60,42}, -{40,60,43}, -{40,60,44}, -{40,60,45}, -{40,60,46}, -{40,60,47}, -{40,60,48}, -{40,60,49}, -{40,60,50}, -{40,60,51}, -{40,60,52}, -{40,60,53}, -{40,61,-95}, -{40,61,-94}, -{40,61,-93}, -{40,61,-92}, -{40,61,-91}, -{40,61,-90}, -{40,61,-89}, -{40,61,-88}, -{40,61,-87}, -{40,61,-86}, -{40,61,-85}, -{40,61,-84}, -{40,61,-83}, -{40,61,-82}, -{40,61,-81}, -{40,61,-80}, -{40,61,-79}, -{40,61,-78}, -{40,61,-77}, -{40,61,-76}, -{40,61,-75}, -{40,61,-74}, -{40,61,-73}, -{40,61,-72}, -{40,61,-71}, -{40,61,-70}, -{40,61,-69}, -{40,61,-68}, -{40,61,-67}, -{40,61,-66}, -{40,61,-65}, -{40,61,-64}, -{40,61,-63}, -{40,61,-62}, -{40,61,-61}, -{40,61,-60}, -{40,61,-59}, -{40,61,-58}, -{40,61,-57}, -{40,61,-56}, -{40,61,-55}, -{40,61,-54}, -{40,61,-53}, -{40,61,-52}, -{40,61,-51}, -{40,61,-50}, -{40,61,-49}, -{40,61,-48}, -{40,61,-47}, -{40,61,-46}, -{40,61,-45}, -{40,61,-44}, -{40,61,-43}, -{40,61,-42}, -{40,61,-41}, -{40,61,-40}, -{40,61,-39}, -{40,61,-38}, -{40,61,-37}, -{40,61,-36}, -{40,61,-35}, -{40,61,-34}, -{40,61,-33}, -{40,61,-32}, -{40,61,-31}, -{40,61,-30}, -{40,61,-29}, -{40,61,-28}, -{40,61,-27}, -{40,61,-26}, -{40,61,-25}, -{40,61,-24}, -{40,61,-23}, -{40,61,-22}, -{40,61,-21}, -{40,61,-20}, -{40,61,-19}, -{40,61,-18}, -{40,61,-17}, -{40,61,-16}, -{40,61,-15}, -{40,61,-14}, -{40,61,-13}, -{40,61,-12}, -{40,61,-11}, -{40,61,-10}, -{40,61,-9}, -{40,61,-8}, -{40,61,-7}, -{40,61,-6}, -{40,61,-5}, -{40,61,-4}, -{40,61,-3}, -{40,61,-2}, -{40,61,-1}, -{40,61,0}, -{40,61,1}, -{40,61,2}, -{40,61,3}, -{40,61,4}, -{40,61,5}, -{40,61,6}, -{40,61,7}, -{40,61,8}, -{40,61,9}, -{40,61,10}, -{40,61,11}, -{40,61,12}, -{40,61,13}, -{40,61,14}, -{40,61,15}, -{40,61,16}, -{40,61,17}, -{40,61,18}, -{40,61,19}, -{40,61,20}, -{40,61,21}, -{40,61,22}, -{40,61,23}, -{40,61,24}, -{40,61,25}, -{40,61,26}, -{40,61,27}, -{40,61,28}, -{40,61,29}, -{40,61,30}, -{40,61,31}, -{40,61,32}, -{40,61,33}, -{40,61,34}, -{40,61,35}, -{40,61,36}, -{40,61,37}, -{40,61,38}, -{40,61,39}, -{40,61,40}, -{40,61,41}, -{40,61,42}, -{40,61,43}, -{40,61,44}, -{40,61,45}, -{40,61,46}, -{40,61,47}, -{40,61,48}, -{40,61,49}, -{40,61,50}, -{40,61,51}, -{40,61,52}, -{40,61,53}, -{40,62,-95}, -{40,62,-94}, -{40,62,-93}, -{40,62,-92}, -{40,62,-91}, -{40,62,-90}, -{40,62,-89}, -{40,62,-88}, -{40,62,-87}, -{40,62,-86}, -{40,62,-85}, -{40,62,-84}, -{40,62,-83}, -{40,62,-82}, -{40,62,-81}, -{40,62,-80}, -{40,62,-79}, -{40,62,-78}, -{40,62,-77}, -{40,62,-76}, -{40,62,-75}, -{40,62,-74}, -{40,62,-73}, -{40,62,-72}, -{40,62,-71}, -{40,62,-70}, -{40,62,-69}, -{40,62,-68}, -{40,62,-67}, -{40,62,-66}, -{40,62,-65}, -{40,62,-64}, -{40,62,-63}, -{40,62,-62}, -{40,62,-61}, -{40,62,-60}, -{40,62,-59}, -{40,62,-58}, -{40,62,-57}, -{40,62,-56}, -{40,62,-55}, -{40,62,-54}, -{40,62,-53}, -{40,62,-52}, -{40,62,-51}, -{40,62,-50}, -{40,62,-49}, -{40,62,-48}, -{40,62,-47}, -{40,62,-46}, -{40,62,-45}, -{40,62,-44}, -{40,62,-43}, -{40,62,-42}, -{40,62,-41}, -{40,62,-40}, -{40,62,-39}, -{40,62,-38}, -{40,62,-37}, -{40,62,-36}, -{40,62,-35}, -{40,62,-34}, -{40,62,-33}, -{40,62,-32}, -{40,62,-31}, -{40,62,-30}, -{40,62,-29}, -{40,62,-28}, -{40,62,-27}, -{40,62,-26}, -{40,62,-25}, -{40,62,-24}, -{40,62,-23}, -{40,62,-22}, -{40,62,-21}, -{40,62,-20}, -{40,62,-19}, -{40,62,-18}, -{40,62,-17}, -{40,62,-16}, -{40,62,-15}, -{40,62,-14}, -{40,62,-13}, -{40,62,-12}, -{40,62,-11}, -{40,62,-10}, -{40,62,-9}, -{40,62,-8}, -{40,62,-7}, -{40,62,-6}, -{40,62,-5}, -{40,62,-4}, -{40,62,-3}, -{40,62,-2}, -{40,62,-1}, -{40,62,0}, -{40,62,1}, -{40,62,2}, -{40,62,3}, -{40,62,4}, -{40,62,5}, -{40,62,6}, -{40,62,7}, -{40,62,8}, -{40,62,9}, -{40,62,10}, -{40,62,11}, -{40,62,12}, -{40,62,13}, -{40,62,14}, -{40,62,15}, -{40,62,16}, -{40,62,17}, -{40,62,18}, -{40,62,19}, -{40,62,20}, -{40,62,21}, -{40,62,22}, -{40,62,23}, -{40,62,24}, -{40,62,25}, -{40,62,26}, -{40,62,27}, -{40,62,28}, -{40,62,29}, -{40,62,30}, -{40,62,31}, -{40,62,32}, -{40,62,33}, -{40,62,34}, -{40,62,35}, -{40,62,36}, -{40,62,37}, -{40,62,38}, -{40,62,39}, -{40,62,40}, -{40,62,41}, -{40,62,42}, -{40,62,43}, -{40,62,44}, -{40,62,45}, -{40,62,46}, -{40,62,47}, -{40,62,48}, -{40,62,49}, -{40,62,50}, -{40,62,51}, -{40,62,52}, -{40,62,53}, -{40,62,54}, -{40,63,-95}, -{40,63,-94}, -{40,63,-93}, -{40,63,-92}, -{40,63,-91}, -{40,63,-90}, -{40,63,-89}, -{40,63,-88}, -{40,63,-87}, -{40,63,-86}, -{40,63,-85}, -{40,63,-84}, -{40,63,-83}, -{40,63,-82}, -{40,63,-81}, -{40,63,-80}, -{40,63,-79}, -{40,63,-78}, -{40,63,-77}, -{40,63,-76}, -{40,63,-75}, -{40,63,-74}, -{40,63,-73}, -{40,63,-72}, -{40,63,-71}, -{40,63,-70}, -{40,63,-69}, -{40,63,-68}, -{40,63,-67}, -{40,63,-66}, -{40,63,-65}, -{40,63,-64}, -{40,63,-63}, -{40,63,-62}, -{40,63,-61}, -{40,63,-60}, -{40,63,-59}, -{40,63,-58}, -{40,63,-57}, -{40,63,-56}, -{40,63,-55}, -{40,63,-54}, -{40,63,-53}, -{40,63,-52}, -{40,63,-51}, -{40,63,-50}, -{40,63,-49}, -{40,63,-48}, -{40,63,-47}, -{40,63,-46}, -{40,63,-45}, -{40,63,-44}, -{40,63,-43}, -{40,63,-42}, -{40,63,-41}, -{40,63,-40}, -{40,63,-39}, -{40,63,-38}, -{40,63,-37}, -{40,63,-36}, -{40,63,-35}, -{40,63,-34}, -{40,63,-33}, -{40,63,-32}, -{40,63,-31}, -{40,63,-30}, -{40,63,-29}, -{40,63,-28}, -{40,63,-27}, -{40,63,-26}, -{40,63,-25}, -{40,63,-24}, -{40,63,-23}, -{40,63,-22}, -{40,63,-21}, -{40,63,-20}, -{40,63,-19}, -{40,63,-18}, -{40,63,-17}, -{40,63,-16}, -{40,63,-15}, -{40,63,-14}, -{40,63,-13}, -{40,63,-12}, -{40,63,-11}, -{40,63,-10}, -{40,63,-9}, -{40,63,-8}, -{40,63,-7}, -{40,63,-6}, -{40,63,-5}, -{40,63,-4}, -{40,63,-3}, -{40,63,-2}, -{40,63,-1}, -{40,63,0}, -{40,63,1}, -{40,63,2}, -{40,63,3}, -{40,63,4}, -{40,63,5}, -{40,63,6}, -{40,63,7}, -{40,63,8}, -{40,63,9}, -{40,63,10}, -{40,63,11}, -{40,63,12}, -{40,63,13}, -{40,63,14}, -{40,63,15}, -{40,63,16}, -{40,63,17}, -{40,63,18}, -{40,63,19}, -{40,63,20}, -{40,63,21}, -{40,63,22}, -{40,63,23}, -{40,63,24}, -{40,63,25}, -{40,63,26}, -{40,63,27}, -{40,63,28}, -{40,63,29}, -{40,63,30}, -{40,63,31}, -{40,63,32}, -{40,63,33}, -{40,63,34}, -{40,63,35}, -{40,63,36}, -{40,63,37}, -{40,63,38}, -{40,63,39}, -{40,63,40}, -{40,63,41}, -{40,63,42}, -{40,63,43}, -{40,63,44}, -{40,63,45}, -{40,63,46}, -{40,63,47}, -{40,63,48}, -{40,63,49}, -{40,63,50}, -{40,63,51}, -{40,63,52}, -{40,63,53}, -{40,63,54}, -{40,64,-95}, -{40,64,-94}, -{40,64,-93}, -{40,64,-92}, -{40,64,-91}, -{40,64,-90}, -{40,64,-89}, -{40,64,-88}, -{40,64,-87}, -{40,64,-86}, -{40,64,-85}, -{40,64,-84}, -{40,64,-83}, -{40,64,-82}, -{40,64,-81}, -{40,64,-80}, -{40,64,-79}, -{40,64,-78}, -{40,64,-77}, -{40,64,-76}, -{40,64,-75}, -{40,64,-74}, -{40,64,-73}, -{40,64,-72}, -{40,64,-71}, -{40,64,-70}, -{40,64,-69}, -{40,64,-68}, -{40,64,-67}, -{40,64,-66}, -{40,64,-65}, -{40,64,-64}, -{40,64,-63}, -{40,64,-62}, -{40,64,-61}, -{40,64,-60}, -{40,64,-59}, -{40,64,-58}, -{40,64,-57}, -{40,64,-56}, -{40,64,-55}, -{40,64,-54}, -{40,64,-53}, -{40,64,-52}, -{40,64,-51}, -{40,64,-50}, -{40,64,-49}, -{40,64,-48}, -{40,64,-47}, -{40,64,-46}, -{40,64,-45}, -{40,64,-44}, -{40,64,-43}, -{40,64,-42}, -{40,64,-41}, -{40,64,-40}, -{40,64,-39}, -{40,64,-38}, -{40,64,-37}, -{40,64,-36}, -{40,64,-35}, -{40,64,-34}, -{40,64,-33}, -{40,64,-32}, -{40,64,-31}, -{40,64,-30}, -{40,64,-29}, -{40,64,-28}, -{40,64,-27}, -{40,64,-26}, -{40,64,-25}, -{40,64,-24}, -{40,64,-23}, -{40,64,-22}, -{40,64,-21}, -{40,64,-20}, -{40,64,-19}, -{40,64,-18}, -{40,64,-17}, -{40,64,-16}, -{40,64,-15}, -{40,64,-14}, -{40,64,-13}, -{40,64,-12}, -{40,64,-11}, -{40,64,-10}, -{40,64,-9}, -{40,64,-8}, -{40,64,-7}, -{40,64,-6}, -{40,64,-5}, -{40,64,-4}, -{40,64,-3}, -{40,64,-2}, -{40,64,-1}, -{40,64,0}, -{40,64,1}, -{40,64,2}, -{40,64,3}, -{40,64,4}, -{40,64,5}, -{40,64,6}, -{40,64,7}, -{40,64,8}, -{40,64,9}, -{40,64,10}, -{40,64,11}, -{40,64,12}, -{40,64,13}, -{40,64,14}, -{40,64,15}, -{40,64,16}, -{40,64,17}, -{40,64,18}, -{40,64,19}, -{40,64,20}, -{40,64,21}, -{40,64,22}, -{40,64,23}, -{40,64,24}, -{40,64,25}, -{40,64,26}, -{40,64,27}, -{40,64,28}, -{40,64,29}, -{40,64,30}, -{40,64,31}, -{40,64,32}, -{40,64,33}, -{40,64,34}, -{40,64,35}, -{40,64,36}, -{40,64,37}, -{40,64,38}, -{40,64,39}, -{40,64,40}, -{40,64,41}, -{40,64,42}, -{40,64,43}, -{40,64,44}, -{40,64,45}, -{40,64,46}, -{40,64,47}, -{40,64,48}, -{40,64,49}, -{40,64,50}, -{40,64,51}, -{40,64,52}, -{40,64,53}, -{40,64,54}, -{40,65,-95}, -{40,65,-94}, -{40,65,-93}, -{40,65,-92}, -{40,65,-91}, -{40,65,-90}, -{40,65,-89}, -{40,65,-88}, -{40,65,-87}, -{40,65,-86}, -{40,65,-85}, -{40,65,-84}, -{40,65,-83}, -{40,65,-82}, -{40,65,-81}, -{40,65,-80}, -{40,65,-79}, -{40,65,-78}, -{40,65,-77}, -{40,65,-76}, -{40,65,-75}, -{40,65,-74}, -{40,65,-73}, -{40,65,-72}, -{40,65,-71}, -{40,65,-70}, -{40,65,-69}, -{40,65,-68}, -{40,65,-67}, -{40,65,-66}, -{40,65,-65}, -{40,65,-64}, -{40,65,-63}, -{40,65,-62}, -{40,65,-61}, -{40,65,-60}, -{40,65,-59}, -{40,65,-58}, -{40,65,-57}, -{40,65,-56}, -{40,65,-55}, -{40,65,-54}, -{40,65,-53}, -{40,65,-52}, -{40,65,-51}, -{40,65,-50}, -{40,65,-49}, -{40,65,-48}, -{40,65,-47}, -{40,65,-46}, -{40,65,-45}, -{40,65,-44}, -{40,65,-43}, -{40,65,-42}, -{40,65,-41}, -{40,65,-40}, -{40,65,-39}, -{40,65,-38}, -{40,65,-37}, -{40,65,-36}, -{40,65,-35}, -{40,65,-34}, -{40,65,-33}, -{40,65,-32}, -{40,65,-31}, -{40,65,-30}, -{40,65,-29}, -{40,65,-28}, -{40,65,-27}, -{40,65,-26}, -{40,65,-25}, -{40,65,-24}, -{40,65,-23}, -{40,65,-22}, -{40,65,-21}, -{40,65,-20}, -{40,65,-19}, -{40,65,-18}, -{40,65,-17}, -{40,65,-16}, -{40,65,-15}, -{40,65,-14}, -{40,65,-13}, -{40,65,-12}, -{40,65,-11}, -{40,65,-10}, -{40,65,-9}, -{40,65,-8}, -{40,65,-7}, -{40,65,-6}, -{40,65,-5}, -{40,65,-4}, -{40,65,-3}, -{40,65,-2}, -{40,65,-1}, -{40,65,0}, -{40,65,1}, -{40,65,2}, -{40,65,3}, -{40,65,4}, -{40,65,5}, -{40,65,6}, -{40,65,7}, -{40,65,8}, -{40,65,9}, -{40,65,10}, -{40,65,11}, -{40,65,12}, -{40,65,13}, -{40,65,14}, -{40,65,15}, -{40,65,16}, -{40,65,17}, -{40,65,18}, -{40,65,19}, -{40,65,20}, -{40,65,21}, -{40,65,22}, -{40,65,23}, -{40,65,24}, -{40,65,25}, -{40,65,26}, -{40,65,27}, -{40,65,28}, -{40,65,29}, -{40,65,30}, -{40,65,31}, -{40,65,32}, -{40,65,33}, -{40,65,34}, -{40,65,35}, -{40,65,36}, -{40,65,37}, -{40,65,38}, -{40,65,39}, -{40,65,40}, -{40,65,41}, -{40,65,42}, -{40,65,43}, -{40,65,44}, -{40,65,45}, -{40,65,46}, -{40,65,47}, -{40,65,48}, -{40,65,49}, -{40,65,50}, -{40,65,51}, -{40,65,52}, -{40,65,53}, -{40,66,-95}, -{40,66,-94}, -{40,66,-93}, -{40,66,-92}, -{40,66,-91}, -{40,66,-90}, -{40,66,-89}, -{40,66,-88}, -{40,66,-87}, -{40,66,-86}, -{40,66,-85}, -{40,66,-84}, -{40,66,-83}, -{40,66,-82}, -{40,66,-81}, -{40,66,-80}, -{40,66,-79}, -{40,66,-78}, -{40,66,-77}, -{40,66,-76}, -{40,66,-75}, -{40,66,-74}, -{40,66,-73}, -{40,66,-72}, -{40,66,-71}, -{40,66,-70}, -{40,66,-69}, -{40,66,-68}, -{40,66,-67}, -{40,66,-66}, -{40,66,-65}, -{40,66,-64}, -{40,66,-63}, -{40,66,-62}, -{40,66,-61}, -{40,66,-60}, -{40,66,-59}, -{40,66,-58}, -{40,66,-57}, -{40,66,-56}, -{40,66,-55}, -{40,66,-54}, -{40,66,-53}, -{40,66,-52}, -{40,66,-51}, -{40,66,-50}, -{40,66,-49}, -{40,66,-48}, -{40,66,-47}, -{40,66,-46}, -{40,66,-45}, -{40,66,-44}, -{40,66,-43}, -{40,66,-42}, -{40,66,-41}, -{40,66,-40}, -{40,66,-39}, -{40,66,-38}, -{40,66,-37}, -{40,66,-36}, -{40,66,-35}, -{40,66,-34}, -{40,66,-33}, -{40,66,-32}, -{40,66,-31}, -{40,66,-30}, -{40,66,-29}, -{40,66,-28}, -{40,66,-27}, -{40,66,-26}, -{40,66,-25}, -{40,66,-24}, -{40,66,-23}, -{40,66,-22}, -{40,66,-21}, -{40,66,-20}, -{40,66,-19}, -{40,66,-18}, -{40,66,-17}, -{40,66,-16}, -{40,66,-15}, -{40,66,-14}, -{40,66,-13}, -{40,66,-12}, -{40,66,-11}, -{40,66,-10}, -{40,66,-9}, -{40,66,-8}, -{40,66,-7}, -{40,66,-6}, -{40,66,-5}, -{40,66,-4}, -{40,66,-3}, -{40,66,-2}, -{40,66,-1}, -{40,66,0}, -{40,66,1}, -{40,66,2}, -{40,66,3}, -{40,66,4}, -{40,66,5}, -{40,66,6}, -{40,66,7}, -{40,66,8}, -{40,66,9}, -{40,66,10}, -{40,66,11}, -{40,66,12}, -{40,66,13}, -{40,66,14}, -{40,66,15}, -{40,66,16}, -{40,66,17}, -{40,66,18}, -{40,66,19}, -{40,67,-95}, -{40,67,-94}, -{40,67,-93}, -{40,67,-92}, -{40,67,-91}, -{40,67,-90}, -{40,67,-89}, -{40,67,-88}, -{40,67,-87}, -{40,67,-86}, -{40,67,-85}, -{40,67,-84}, -{40,67,-83}, -{40,67,-82}, -{40,67,-81}, -{40,67,-80}, -{40,67,-79}, -{40,67,-78}, -{40,67,-77}, -{40,67,-76}, -{40,67,-75}, -{40,67,-74}, -{40,67,-73}, -{40,67,-72}, -{40,67,-71}, -{40,67,-70}, -{40,67,-69}, -{40,67,-68}, -{40,67,-67}, -{40,67,-66}, -{40,67,-65}, -{40,67,-64}, -{40,67,-63}, -{40,67,-62}, -{40,67,-61}, -{40,67,-60}, -{40,67,-59}, -{40,67,-58}, -{40,67,-57}, -{40,67,-56}, -{40,67,-55}, -{40,67,-54}, -{40,67,-53}, -{40,67,-52}, -{40,67,-51}, -{40,67,-50}, -{40,67,-49}, -{40,67,-48}, -{40,67,-47}, -{40,67,-46}, -{40,67,-45}, -{40,67,-44}, -{40,67,-43}, -{40,67,-42}, -{40,67,-41}, -{40,67,-40}, -{40,67,-39}, -{40,67,-38}, -{40,67,-37}, -{40,67,-36}, -{40,67,-35}, -{40,67,-34}, -{40,67,-33}, -{40,67,-32}, -{40,67,-31}, -{40,67,-30}, -{40,67,-29}, -{40,67,-28}, -{40,67,-27}, -{40,67,-26}, -{40,67,-25}, -{40,67,-24}, -{40,67,-23}, -{40,67,-22}, -{40,67,-21}, -{40,67,-20}, -{40,67,-19}, -{40,67,-18}, -{40,67,-17}, -{40,67,-16}, -{40,67,-15}, -{40,67,-14}, -{40,67,-13}, -{40,67,-12}, -{40,67,-11}, -{40,67,-10}, -{40,67,-9}, -{40,67,-8}, -{40,67,-7}, -{40,67,-6}, -{40,67,-5}, -{40,67,-4}, -{40,67,-3}, -{40,67,-2}, -{40,67,-1}, -{40,67,0}, -{40,67,1}, -{40,67,2}, -{40,68,-95}, -{40,68,-94}, -{40,68,-93}, -{40,68,-92}, -{40,68,-91}, -{40,68,-90}, -{40,68,-89}, -{40,68,-88}, -{40,68,-87}, -{40,68,-86}, -{40,68,-85}, -{40,68,-84}, -{40,68,-83}, -{40,68,-82}, -{40,68,-81}, -{40,68,-80}, -{40,68,-79}, -{40,68,-78}, -{40,68,-77}, -{40,68,-76}, -{40,68,-75}, -{40,68,-74}, -{40,68,-73}, -{40,68,-72}, -{40,68,-71}, -{40,68,-70}, -{40,68,-69}, -{40,68,-68}, -{40,68,-67}, -{40,68,-66}, -{40,68,-65}, -{40,68,-64}, -{40,68,-63}, -{40,68,-62}, -{40,68,-61}, -{40,68,-60}, -{40,68,-59}, -{40,68,-58}, -{40,68,-57}, -{40,68,-56}, -{40,68,-55}, -{40,68,-54}, -{40,68,-53}, -{40,68,-52}, -{40,68,-51}, -{40,68,-50}, -{40,68,-49}, -{40,68,-48}, -{40,68,-47}, -{40,68,-46}, -{40,68,-45}, -{40,68,-44}, -{40,68,-43}, -{40,68,-42}, -{40,68,-41}, -{40,68,-40}, -{40,68,-39}, -{40,68,-38}, -{40,68,-37}, -{40,68,-36}, -{40,68,-35}, -{40,68,-34}, -{40,68,-33}, -{40,68,-32}, -{40,68,-31}, -{40,68,-30}, -{40,68,-29}, -{40,68,-28}, -{40,68,-27}, -{40,68,-26}, -{40,68,-25}, -{40,68,-24}, -{40,68,-23}, -{40,68,-22}, -{40,68,-21}, -{40,68,-20}, -{40,68,-19}, -{40,68,-18}, -{40,68,-17}, -{40,68,-16}, -{40,68,-15}, -{40,68,-14}, -{40,68,-13}, -{40,68,-12}, -{40,68,-11}, -{40,68,-10}, -{40,69,-95}, -{40,69,-94}, -{40,69,-93}, -{40,69,-92}, -{40,69,-91}, -{40,69,-90}, -{40,69,-89}, -{40,69,-88}, -{40,69,-87}, -{40,69,-86}, -{40,69,-85}, -{40,69,-84}, -{40,69,-83}, -{40,69,-82}, -{40,69,-81}, -{40,69,-80}, -{40,69,-79}, -{40,69,-78}, -{40,69,-77}, -{40,69,-76}, -{40,69,-75}, -{40,69,-74}, -{40,69,-73}, -{40,69,-72}, -{40,69,-71}, -{40,69,-70}, -{40,69,-69}, -{40,69,-68}, -{40,69,-67}, -{40,69,-66}, -{40,69,-65}, -{40,69,-64}, -{40,69,-63}, -{40,69,-62}, -{40,69,-61}, -{40,69,-60}, -{40,69,-59}, -{40,69,-58}, -{40,69,-57}, -{40,69,-56}, -{40,69,-55}, -{40,69,-54}, -{40,69,-53}, -{40,69,-52}, -{40,69,-51}, -{40,69,-50}, -{40,69,-49}, -{40,69,-48}, -{40,69,-47}, -{40,69,-46}, -{40,69,-45}, -{40,69,-44}, -{40,69,-43}, -{40,69,-42}, -{40,69,-41}, -{40,69,-40}, -{40,69,-39}, -{40,69,-38}, -{40,69,-37}, -{40,69,-36}, -{40,69,-35}, -{40,69,-34}, -{40,69,-33}, -{40,69,-32}, -{40,69,-31}, -{40,69,-30}, -{40,69,-29}, -{40,69,-28}, -{40,69,-27}, -{40,69,-26}, -{40,69,-25}, -{40,69,-24}, -{40,69,-23}, -{40,69,-22}, -{40,69,-21}, -{40,69,-20}, -{40,70,-95}, -{40,70,-94}, -{40,70,-93}, -{40,70,-92}, -{40,70,-91}, -{40,70,-90}, -{40,70,-89}, -{40,70,-88}, -{40,70,-87}, -{40,70,-86}, -{40,70,-85}, -{40,70,-84}, -{40,70,-83}, -{40,70,-82}, -{40,70,-81}, -{40,70,-80}, -{40,70,-79}, -{40,70,-78}, -{40,70,-77}, -{40,70,-76}, -{40,70,-75}, -{40,70,-74}, -{40,70,-73}, -{40,70,-72}, -{40,70,-71}, -{40,70,-70}, -{40,70,-69}, -{40,70,-68}, -{40,70,-67}, -{40,70,-66}, -{40,70,-65}, -{40,70,-64}, -{40,70,-63}, -{40,70,-62}, -{40,70,-61}, -{40,70,-60}, -{40,70,-59}, -{40,70,-58}, -{40,70,-57}, -{40,70,-56}, -{40,70,-55}, -{40,70,-54}, -{40,70,-53}, -{40,70,-52}, -{40,70,-51}, -{40,70,-50}, -{40,70,-49}, -{40,70,-48}, -{40,70,-47}, -{40,70,-46}, -{40,70,-45}, -{40,70,-44}, -{40,70,-43}, -{40,70,-42}, -{40,70,-41}, -{40,70,-40}, -{40,70,-39}, -{40,70,-38}, -{40,70,-37}, -{40,70,-36}, -{40,70,-35}, -{40,70,-34}, -{40,70,-33}, -{40,70,-32}, -{40,70,-31}, -{40,70,-30}, -{40,70,-29}, -{40,71,-95}, -{40,71,-94}, -{40,71,-93}, -{40,71,-92}, -{40,71,-91}, -{40,71,-90}, -{40,71,-89}, -{40,71,-88}, -{40,71,-87}, -{40,71,-86}, -{40,71,-85}, -{40,71,-84}, -{40,71,-83}, -{40,71,-82}, -{40,71,-81}, -{40,71,-80}, -{40,71,-79}, -{40,71,-78}, -{40,71,-77}, -{40,71,-76}, -{40,71,-75}, -{40,71,-74}, -{40,71,-73}, -{40,71,-72}, -{40,71,-71}, -{40,71,-70}, -{40,71,-69}, -{40,71,-68}, -{40,71,-67}, -{40,71,-66}, -{40,71,-65}, -{40,71,-64}, -{40,71,-63}, -{40,71,-62}, -{40,71,-61}, -{40,71,-60}, -{40,71,-59}, -{40,71,-58}, -{40,71,-57}, -{40,71,-56}, -{40,71,-55}, -{40,71,-54}, -{40,71,-53}, -{40,71,-52}, -{40,71,-51}, -{40,71,-50}, -{40,71,-49}, -{40,71,-48}, -{40,71,-47}, -{40,71,-46}, -{40,71,-45}, -{40,71,-44}, -{40,71,-43}, -{40,71,-42}, -{40,71,-41}, -{40,71,-40}, -{40,71,-39}, -{40,71,-38}, -{40,71,-37}, -{40,72,-95}, -{40,72,-94}, -{40,72,-93}, -{40,72,-92}, -{40,72,-91}, -{40,72,-90}, -{40,72,-89}, -{40,72,-88}, -{40,72,-87}, -{40,72,-86}, -{40,72,-85}, -{40,72,-84}, -{40,72,-83}, -{40,72,-82}, -{40,72,-81}, -{40,72,-80}, -{40,72,-79}, -{40,72,-78}, -{40,72,-77}, -{40,72,-76}, -{40,72,-75}, -{40,72,-74}, -{40,72,-73}, -{40,72,-72}, -{40,72,-71}, -{40,72,-70}, -{40,72,-69}, -{40,72,-68}, -{40,72,-67}, -{40,72,-66}, -{40,72,-65}, -{40,72,-64}, -{40,72,-63}, -{40,72,-62}, -{40,72,-61}, -{40,72,-60}, -{40,72,-59}, -{40,72,-58}, -{40,72,-57}, -{40,72,-56}, -{40,72,-55}, -{40,72,-54}, -{40,72,-53}, -{40,72,-52}, -{40,72,-51}, -{40,72,-50}, -{40,72,-49}, -{40,72,-48}, -{40,72,-47}, -{40,72,-46}, -{40,72,-45}, -{40,72,-44}, -{40,73,-95}, -{40,73,-94}, -{40,73,-93}, -{40,73,-92}, -{40,73,-91}, -{40,73,-90}, -{40,73,-89}, -{40,73,-88}, -{40,73,-87}, -{40,73,-86}, -{40,73,-85}, -{40,73,-84}, -{40,73,-83}, -{40,73,-82}, -{40,73,-81}, -{40,73,-80}, -{40,73,-79}, -{40,73,-78}, -{40,73,-77}, -{40,73,-76}, -{40,73,-75}, -{40,73,-74}, -{40,73,-73}, -{40,73,-72}, -{40,73,-71}, -{40,73,-70}, -{40,73,-69}, -{40,73,-68}, -{40,73,-67}, -{40,73,-66}, -{40,73,-65}, -{40,73,-64}, -{40,73,-63}, -{40,73,-62}, -{40,73,-61}, -{40,73,-60}, -{40,73,-59}, -{40,73,-58}, -{40,73,-57}, -{40,73,-56}, -{40,73,-55}, -{40,73,-54}, -{40,73,-53}, -{40,73,-52}, -{40,73,-51}, -{40,73,-50}, -{40,74,-95}, -{40,74,-94}, -{40,74,-93}, -{40,74,-92}, -{40,74,-91}, -{40,74,-90}, -{40,74,-89}, -{40,74,-88}, -{40,74,-87}, -{40,74,-86}, -{40,74,-85}, -{40,74,-84}, -{40,74,-83}, -{40,74,-82}, -{40,74,-81}, -{40,74,-80}, -{40,74,-79}, -{40,74,-78}, -{40,74,-77}, -{40,74,-76}, -{40,74,-75}, -{40,74,-74}, -{40,74,-73}, -{40,74,-72}, -{40,74,-71}, -{40,74,-70}, -{40,74,-69}, -{40,74,-68}, -{40,74,-67}, -{40,74,-66}, -{40,74,-65}, -{40,74,-64}, -{40,74,-63}, -{40,74,-62}, -{40,74,-61}, -{40,74,-60}, -{40,74,-59}, -{40,74,-58}, -{40,74,-57}, -{40,74,-56}, -{40,75,-95}, -{40,75,-94}, -{40,75,-93}, -{40,75,-92}, -{40,75,-91}, -{40,75,-90}, -{40,75,-89}, -{40,75,-88}, -{40,75,-87}, -{40,75,-86}, -{40,75,-85}, -{40,75,-84}, -{40,75,-83}, -{40,75,-82}, -{40,75,-81}, -{40,75,-80}, -{40,75,-79}, -{40,75,-78}, -{40,75,-77}, -{40,75,-76}, -{40,75,-75}, -{40,75,-74}, -{40,75,-73}, -{40,75,-72}, -{40,75,-71}, -{40,75,-70}, -{40,75,-69}, -{40,75,-68}, -{40,75,-67}, -{40,75,-66}, -{40,75,-65}, -{40,75,-64}, -{40,75,-63}, -{40,75,-62}, -{40,75,-61}, -{40,76,-95}, -{40,76,-94}, -{40,76,-93}, -{40,76,-92}, -{40,76,-91}, -{40,76,-90}, -{40,76,-89}, -{40,76,-88}, -{40,76,-87}, -{40,76,-86}, -{40,76,-85}, -{40,76,-84}, -{40,76,-83}, -{40,76,-82}, -{40,76,-81}, -{40,76,-80}, -{40,76,-79}, -{40,76,-78}, -{40,76,-77}, -{40,76,-76}, -{40,76,-75}, -{40,76,-74}, -{40,76,-73}, -{40,76,-72}, -{40,76,-71}, -{40,76,-70}, -{40,76,-69}, -{40,76,-68}, -{40,76,-67}, -{40,76,-66}, -{40,77,-95}, -{40,77,-94}, -{40,77,-93}, -{40,77,-92}, -{40,77,-91}, -{40,77,-90}, -{40,77,-89}, -{40,77,-88}, -{40,77,-87}, -{40,77,-86}, -{40,77,-85}, -{40,77,-84}, -{40,77,-83}, -{40,77,-82}, -{40,77,-81}, -{40,77,-80}, -{40,77,-79}, -{40,77,-78}, -{40,77,-77}, -{40,77,-76}, -{40,77,-75}, -{40,77,-74}, -{40,77,-73}, -{40,77,-72}, -{40,77,-71}, -{40,78,-95}, -{40,78,-94}, -{40,78,-93}, -{40,78,-92}, -{40,78,-91}, -{40,78,-90}, -{40,78,-89}, -{40,78,-88}, -{40,78,-87}, -{40,78,-86}, -{40,78,-85}, -{40,78,-84}, -{40,78,-83}, -{40,78,-82}, -{40,78,-81}, -{40,78,-80}, -{40,78,-79}, -{40,78,-78}, -{40,78,-77}, -{40,78,-76}, -{40,79,-95}, -{40,79,-94}, -{40,79,-93}, -{40,79,-92}, -{40,79,-91}, -{40,79,-90}, -{40,79,-89}, -{40,79,-88}, -{40,79,-87}, -{40,79,-86}, -{40,79,-85}, -{40,79,-84}, -{40,79,-83}, -{40,79,-82}, -{40,79,-81}, -{40,79,-80}, -{40,80,-95}, -{40,80,-94}, -{40,80,-93}, -{40,80,-92}, -{40,80,-91}, -{40,80,-90}, -{40,80,-89}, -{40,80,-88}, -{40,80,-87}, -{40,80,-86}, -{40,80,-85}, -{40,80,-84}, -{40,81,-95}, -{40,81,-94}, -{40,81,-93}, -{40,81,-92}, -{40,81,-91}, -{40,81,-90}, -{40,81,-89}, -{40,81,-88}, -{40,82,-95}, -{40,82,-94}, -{40,82,-93}, -{40,82,-92}, -{41,-47,44}, -{41,-47,45}, -{41,-46,39}, -{41,-46,40}, -{41,-46,41}, -{41,-46,42}, -{41,-46,43}, -{41,-46,44}, -{41,-46,45}, -{41,-45,35}, -{41,-45,36}, -{41,-45,37}, -{41,-45,38}, -{41,-45,39}, -{41,-45,40}, -{41,-45,41}, -{41,-45,42}, -{41,-45,43}, -{41,-45,44}, -{41,-45,45}, -{41,-44,32}, -{41,-44,33}, -{41,-44,34}, -{41,-44,35}, -{41,-44,36}, -{41,-44,37}, -{41,-44,38}, -{41,-44,39}, -{41,-44,40}, -{41,-44,41}, -{41,-44,42}, -{41,-44,43}, -{41,-44,44}, -{41,-44,45}, -{41,-44,46}, -{41,-43,29}, -{41,-43,30}, -{41,-43,31}, -{41,-43,32}, -{41,-43,33}, -{41,-43,34}, -{41,-43,35}, -{41,-43,36}, -{41,-43,37}, -{41,-43,38}, -{41,-43,39}, -{41,-43,40}, -{41,-43,41}, -{41,-43,42}, -{41,-43,43}, -{41,-43,44}, -{41,-43,45}, -{41,-43,46}, -{41,-42,26}, -{41,-42,27}, -{41,-42,28}, -{41,-42,29}, -{41,-42,30}, -{41,-42,31}, -{41,-42,32}, -{41,-42,33}, -{41,-42,34}, -{41,-42,35}, -{41,-42,36}, -{41,-42,37}, -{41,-42,38}, -{41,-42,39}, -{41,-42,40}, -{41,-42,41}, -{41,-42,42}, -{41,-42,43}, -{41,-42,44}, -{41,-42,45}, -{41,-42,46}, -{41,-41,23}, -{41,-41,24}, -{41,-41,25}, -{41,-41,26}, -{41,-41,27}, -{41,-41,28}, -{41,-41,29}, -{41,-41,30}, -{41,-41,31}, -{41,-41,32}, -{41,-41,33}, -{41,-41,34}, -{41,-41,35}, -{41,-41,36}, -{41,-41,37}, -{41,-41,38}, -{41,-41,39}, -{41,-41,40}, -{41,-41,41}, -{41,-41,42}, -{41,-41,43}, -{41,-41,44}, -{41,-41,45}, -{41,-41,46}, -{41,-40,20}, -{41,-40,21}, -{41,-40,22}, -{41,-40,23}, -{41,-40,24}, -{41,-40,25}, -{41,-40,26}, -{41,-40,27}, -{41,-40,28}, -{41,-40,29}, -{41,-40,30}, -{41,-40,31}, -{41,-40,32}, -{41,-40,33}, -{41,-40,34}, -{41,-40,35}, -{41,-40,36}, -{41,-40,37}, -{41,-40,38}, -{41,-40,39}, -{41,-40,40}, -{41,-40,41}, -{41,-40,42}, -{41,-40,43}, -{41,-40,44}, -{41,-40,45}, -{41,-40,46}, -{41,-39,18}, -{41,-39,19}, -{41,-39,20}, -{41,-39,21}, -{41,-39,22}, -{41,-39,23}, -{41,-39,24}, -{41,-39,25}, -{41,-39,26}, -{41,-39,27}, -{41,-39,28}, -{41,-39,29}, -{41,-39,30}, -{41,-39,31}, -{41,-39,32}, -{41,-39,33}, -{41,-39,34}, -{41,-39,35}, -{41,-39,36}, -{41,-39,37}, -{41,-39,38}, -{41,-39,39}, -{41,-39,40}, -{41,-39,41}, -{41,-39,42}, -{41,-39,43}, -{41,-39,44}, -{41,-39,45}, -{41,-39,46}, -{41,-38,16}, -{41,-38,17}, -{41,-38,18}, -{41,-38,19}, -{41,-38,20}, -{41,-38,21}, -{41,-38,22}, -{41,-38,23}, -{41,-38,24}, -{41,-38,25}, -{41,-38,26}, -{41,-38,27}, -{41,-38,28}, -{41,-38,29}, -{41,-38,30}, -{41,-38,31}, -{41,-38,32}, -{41,-38,33}, -{41,-38,34}, -{41,-38,35}, -{41,-38,36}, -{41,-38,37}, -{41,-38,38}, -{41,-38,39}, -{41,-38,40}, -{41,-38,41}, -{41,-38,42}, -{41,-38,43}, -{41,-38,44}, -{41,-38,45}, -{41,-38,46}, -{41,-37,13}, -{41,-37,14}, -{41,-37,15}, -{41,-37,16}, -{41,-37,17}, -{41,-37,18}, -{41,-37,19}, -{41,-37,20}, -{41,-37,21}, -{41,-37,22}, -{41,-37,23}, -{41,-37,24}, -{41,-37,25}, -{41,-37,26}, -{41,-37,27}, -{41,-37,28}, -{41,-37,29}, -{41,-37,30}, -{41,-37,31}, -{41,-37,32}, -{41,-37,33}, -{41,-37,34}, -{41,-37,35}, -{41,-37,36}, -{41,-37,37}, -{41,-37,38}, -{41,-37,39}, -{41,-37,40}, -{41,-37,41}, -{41,-37,42}, -{41,-37,43}, -{41,-37,44}, -{41,-37,45}, -{41,-37,46}, -{41,-36,11}, -{41,-36,12}, -{41,-36,13}, -{41,-36,14}, -{41,-36,15}, -{41,-36,16}, -{41,-36,17}, -{41,-36,18}, -{41,-36,19}, -{41,-36,20}, -{41,-36,21}, -{41,-36,22}, -{41,-36,23}, -{41,-36,24}, -{41,-36,25}, -{41,-36,26}, -{41,-36,27}, -{41,-36,28}, -{41,-36,29}, -{41,-36,30}, -{41,-36,31}, -{41,-36,32}, -{41,-36,33}, -{41,-36,34}, -{41,-36,35}, -{41,-36,36}, -{41,-36,37}, -{41,-36,38}, -{41,-36,39}, -{41,-36,40}, -{41,-36,41}, -{41,-36,42}, -{41,-36,43}, -{41,-36,44}, -{41,-36,45}, -{41,-36,46}, -{41,-35,9}, -{41,-35,10}, -{41,-35,11}, -{41,-35,12}, -{41,-35,13}, -{41,-35,14}, -{41,-35,15}, -{41,-35,16}, -{41,-35,17}, -{41,-35,18}, -{41,-35,19}, -{41,-35,20}, -{41,-35,21}, -{41,-35,22}, -{41,-35,23}, -{41,-35,24}, -{41,-35,25}, -{41,-35,26}, -{41,-35,27}, -{41,-35,28}, -{41,-35,29}, -{41,-35,30}, -{41,-35,31}, -{41,-35,32}, -{41,-35,33}, -{41,-35,34}, -{41,-35,35}, -{41,-35,36}, -{41,-35,37}, -{41,-35,38}, -{41,-35,39}, -{41,-35,40}, -{41,-35,41}, -{41,-35,42}, -{41,-35,43}, -{41,-35,44}, -{41,-35,45}, -{41,-35,46}, -{41,-34,7}, -{41,-34,8}, -{41,-34,9}, -{41,-34,10}, -{41,-34,11}, -{41,-34,12}, -{41,-34,13}, -{41,-34,14}, -{41,-34,15}, -{41,-34,16}, -{41,-34,17}, -{41,-34,18}, -{41,-34,19}, -{41,-34,20}, -{41,-34,21}, -{41,-34,22}, -{41,-34,23}, -{41,-34,24}, -{41,-34,25}, -{41,-34,26}, -{41,-34,27}, -{41,-34,28}, -{41,-34,29}, -{41,-34,30}, -{41,-34,31}, -{41,-34,32}, -{41,-34,33}, -{41,-34,34}, -{41,-34,35}, -{41,-34,36}, -{41,-34,37}, -{41,-34,38}, -{41,-34,39}, -{41,-34,40}, -{41,-34,41}, -{41,-34,42}, -{41,-34,43}, -{41,-34,44}, -{41,-34,45}, -{41,-34,46}, -{41,-33,5}, -{41,-33,6}, -{41,-33,7}, -{41,-33,8}, -{41,-33,9}, -{41,-33,10}, -{41,-33,11}, -{41,-33,12}, -{41,-33,13}, -{41,-33,14}, -{41,-33,15}, -{41,-33,16}, -{41,-33,17}, -{41,-33,18}, -{41,-33,19}, -{41,-33,20}, -{41,-33,21}, -{41,-33,22}, -{41,-33,23}, -{41,-33,24}, -{41,-33,25}, -{41,-33,26}, -{41,-33,27}, -{41,-33,28}, -{41,-33,29}, -{41,-33,30}, -{41,-33,31}, -{41,-33,32}, -{41,-33,33}, -{41,-33,34}, -{41,-33,35}, -{41,-33,36}, -{41,-33,37}, -{41,-33,38}, -{41,-33,39}, -{41,-33,40}, -{41,-33,41}, -{41,-33,42}, -{41,-33,43}, -{41,-33,44}, -{41,-33,45}, -{41,-33,46}, -{41,-32,4}, -{41,-32,5}, -{41,-32,6}, -{41,-32,7}, -{41,-32,8}, -{41,-32,9}, -{41,-32,10}, -{41,-32,11}, -{41,-32,12}, -{41,-32,13}, -{41,-32,14}, -{41,-32,15}, -{41,-32,16}, -{41,-32,17}, -{41,-32,18}, -{41,-32,19}, -{41,-32,20}, -{41,-32,21}, -{41,-32,22}, -{41,-32,23}, -{41,-32,24}, -{41,-32,25}, -{41,-32,26}, -{41,-32,27}, -{41,-32,28}, -{41,-32,29}, -{41,-32,30}, -{41,-32,31}, -{41,-32,32}, -{41,-32,33}, -{41,-32,34}, -{41,-32,35}, -{41,-32,36}, -{41,-32,37}, -{41,-32,38}, -{41,-32,39}, -{41,-32,40}, -{41,-32,41}, -{41,-32,42}, -{41,-32,43}, -{41,-32,44}, -{41,-32,45}, -{41,-32,46}, -{41,-31,2}, -{41,-31,3}, -{41,-31,4}, -{41,-31,5}, -{41,-31,6}, -{41,-31,7}, -{41,-31,8}, -{41,-31,9}, -{41,-31,10}, -{41,-31,11}, -{41,-31,12}, -{41,-31,13}, -{41,-31,14}, -{41,-31,15}, -{41,-31,16}, -{41,-31,17}, -{41,-31,18}, -{41,-31,19}, -{41,-31,20}, -{41,-31,21}, -{41,-31,22}, -{41,-31,23}, -{41,-31,24}, -{41,-31,25}, -{41,-31,26}, -{41,-31,27}, -{41,-31,28}, -{41,-31,29}, -{41,-31,30}, -{41,-31,31}, -{41,-31,32}, -{41,-31,33}, -{41,-31,34}, -{41,-31,35}, -{41,-31,36}, -{41,-31,37}, -{41,-31,38}, -{41,-31,39}, -{41,-31,40}, -{41,-31,41}, -{41,-31,42}, -{41,-31,43}, -{41,-31,44}, -{41,-31,45}, -{41,-31,46}, -{41,-30,0}, -{41,-30,1}, -{41,-30,2}, -{41,-30,3}, -{41,-30,4}, -{41,-30,5}, -{41,-30,6}, -{41,-30,7}, -{41,-30,8}, -{41,-30,9}, -{41,-30,10}, -{41,-30,11}, -{41,-30,12}, -{41,-30,13}, -{41,-30,14}, -{41,-30,15}, -{41,-30,16}, -{41,-30,17}, -{41,-30,18}, -{41,-30,19}, -{41,-30,20}, -{41,-30,21}, -{41,-30,22}, -{41,-30,23}, -{41,-30,24}, -{41,-30,25}, -{41,-30,26}, -{41,-30,27}, -{41,-30,28}, -{41,-30,29}, -{41,-30,30}, -{41,-30,31}, -{41,-30,32}, -{41,-30,33}, -{41,-30,34}, -{41,-30,35}, -{41,-30,36}, -{41,-30,37}, -{41,-30,38}, -{41,-30,39}, -{41,-30,40}, -{41,-30,41}, -{41,-30,42}, -{41,-30,43}, -{41,-30,44}, -{41,-30,45}, -{41,-30,46}, -{41,-29,-2}, -{41,-29,-1}, -{41,-29,0}, -{41,-29,1}, -{41,-29,2}, -{41,-29,3}, -{41,-29,4}, -{41,-29,5}, -{41,-29,6}, -{41,-29,7}, -{41,-29,8}, -{41,-29,9}, -{41,-29,10}, -{41,-29,11}, -{41,-29,12}, -{41,-29,13}, -{41,-29,14}, -{41,-29,15}, -{41,-29,16}, -{41,-29,17}, -{41,-29,18}, -{41,-29,19}, -{41,-29,20}, -{41,-29,21}, -{41,-29,22}, -{41,-29,23}, -{41,-29,24}, -{41,-29,25}, -{41,-29,26}, -{41,-29,27}, -{41,-29,28}, -{41,-29,29}, -{41,-29,30}, -{41,-29,31}, -{41,-29,32}, -{41,-29,33}, -{41,-29,34}, -{41,-29,35}, -{41,-29,36}, -{41,-29,37}, -{41,-29,38}, -{41,-29,39}, -{41,-29,40}, -{41,-29,41}, -{41,-29,42}, -{41,-29,43}, -{41,-29,44}, -{41,-29,45}, -{41,-29,46}, -{41,-28,-3}, -{41,-28,-2}, -{41,-28,-1}, -{41,-28,0}, -{41,-28,1}, -{41,-28,2}, -{41,-28,3}, -{41,-28,4}, -{41,-28,5}, -{41,-28,6}, -{41,-28,7}, -{41,-28,8}, -{41,-28,9}, -{41,-28,10}, -{41,-28,11}, -{41,-28,12}, -{41,-28,13}, -{41,-28,14}, -{41,-28,15}, -{41,-28,16}, -{41,-28,17}, -{41,-28,18}, -{41,-28,19}, -{41,-28,20}, -{41,-28,21}, -{41,-28,22}, -{41,-28,23}, -{41,-28,24}, -{41,-28,25}, -{41,-28,26}, -{41,-28,27}, -{41,-28,28}, -{41,-28,29}, -{41,-28,30}, -{41,-28,31}, -{41,-28,32}, -{41,-28,33}, -{41,-28,34}, -{41,-28,35}, -{41,-28,36}, -{41,-28,37}, -{41,-28,38}, -{41,-28,39}, -{41,-28,40}, -{41,-28,41}, -{41,-28,42}, -{41,-28,43}, -{41,-28,44}, -{41,-28,45}, -{41,-28,46}, -{41,-27,-5}, -{41,-27,-4}, -{41,-27,-3}, -{41,-27,-2}, -{41,-27,-1}, -{41,-27,0}, -{41,-27,1}, -{41,-27,2}, -{41,-27,3}, -{41,-27,4}, -{41,-27,5}, -{41,-27,6}, -{41,-27,7}, -{41,-27,8}, -{41,-27,9}, -{41,-27,10}, -{41,-27,11}, -{41,-27,12}, -{41,-27,13}, -{41,-27,14}, -{41,-27,15}, -{41,-27,16}, -{41,-27,17}, -{41,-27,18}, -{41,-27,19}, -{41,-27,20}, -{41,-27,21}, -{41,-27,22}, -{41,-27,23}, -{41,-27,24}, -{41,-27,25}, -{41,-27,26}, -{41,-27,27}, -{41,-27,28}, -{41,-27,29}, -{41,-27,30}, -{41,-27,31}, -{41,-27,32}, -{41,-27,33}, -{41,-27,34}, -{41,-27,35}, -{41,-27,36}, -{41,-27,37}, -{41,-27,38}, -{41,-27,39}, -{41,-27,40}, -{41,-27,41}, -{41,-27,42}, -{41,-27,43}, -{41,-27,44}, -{41,-27,45}, -{41,-27,46}, -{41,-26,-7}, -{41,-26,-6}, -{41,-26,-5}, -{41,-26,-4}, -{41,-26,-3}, -{41,-26,-2}, -{41,-26,-1}, -{41,-26,0}, -{41,-26,1}, -{41,-26,2}, -{41,-26,3}, -{41,-26,4}, -{41,-26,5}, -{41,-26,6}, -{41,-26,7}, -{41,-26,8}, -{41,-26,9}, -{41,-26,10}, -{41,-26,11}, -{41,-26,12}, -{41,-26,13}, -{41,-26,14}, -{41,-26,15}, -{41,-26,16}, -{41,-26,17}, -{41,-26,18}, -{41,-26,19}, -{41,-26,20}, -{41,-26,21}, -{41,-26,22}, -{41,-26,23}, -{41,-26,24}, -{41,-26,25}, -{41,-26,26}, -{41,-26,27}, -{41,-26,28}, -{41,-26,29}, -{41,-26,30}, -{41,-26,31}, -{41,-26,32}, -{41,-26,33}, -{41,-26,34}, -{41,-26,35}, -{41,-26,36}, -{41,-26,37}, -{41,-26,38}, -{41,-26,39}, -{41,-26,40}, -{41,-26,41}, -{41,-26,42}, -{41,-26,43}, -{41,-26,44}, -{41,-26,45}, -{41,-26,46}, -{41,-25,-8}, -{41,-25,-7}, -{41,-25,-6}, -{41,-25,-5}, -{41,-25,-4}, -{41,-25,-3}, -{41,-25,-2}, -{41,-25,-1}, -{41,-25,0}, -{41,-25,1}, -{41,-25,2}, -{41,-25,3}, -{41,-25,4}, -{41,-25,5}, -{41,-25,6}, -{41,-25,7}, -{41,-25,8}, -{41,-25,9}, -{41,-25,10}, -{41,-25,11}, -{41,-25,12}, -{41,-25,13}, -{41,-25,14}, -{41,-25,15}, -{41,-25,16}, -{41,-25,17}, -{41,-25,18}, -{41,-25,19}, -{41,-25,20}, -{41,-25,21}, -{41,-25,22}, -{41,-25,23}, -{41,-25,24}, -{41,-25,25}, -{41,-25,26}, -{41,-25,27}, -{41,-25,28}, -{41,-25,29}, -{41,-25,30}, -{41,-25,31}, -{41,-25,32}, -{41,-25,33}, -{41,-25,34}, -{41,-25,35}, -{41,-25,36}, -{41,-25,37}, -{41,-25,38}, -{41,-25,39}, -{41,-25,40}, -{41,-25,41}, -{41,-25,42}, -{41,-25,43}, -{41,-25,44}, -{41,-25,45}, -{41,-25,46}, -{41,-24,-10}, -{41,-24,-9}, -{41,-24,-8}, -{41,-24,-7}, -{41,-24,-6}, -{41,-24,-5}, -{41,-24,-4}, -{41,-24,-3}, -{41,-24,-2}, -{41,-24,-1}, -{41,-24,0}, -{41,-24,1}, -{41,-24,2}, -{41,-24,3}, -{41,-24,4}, -{41,-24,5}, -{41,-24,6}, -{41,-24,7}, -{41,-24,8}, -{41,-24,9}, -{41,-24,10}, -{41,-24,11}, -{41,-24,12}, -{41,-24,13}, -{41,-24,14}, -{41,-24,15}, -{41,-24,16}, -{41,-24,17}, -{41,-24,18}, -{41,-24,19}, -{41,-24,20}, -{41,-24,21}, -{41,-24,22}, -{41,-24,23}, -{41,-24,24}, -{41,-24,25}, -{41,-24,26}, -{41,-24,27}, -{41,-24,28}, -{41,-24,29}, -{41,-24,30}, -{41,-24,31}, -{41,-24,32}, -{41,-24,33}, -{41,-24,34}, -{41,-24,35}, -{41,-24,36}, -{41,-24,37}, -{41,-24,38}, -{41,-24,39}, -{41,-24,40}, -{41,-24,41}, -{41,-24,42}, -{41,-24,43}, -{41,-24,44}, -{41,-24,45}, -{41,-24,46}, -{41,-24,47}, -{41,-23,-11}, -{41,-23,-10}, -{41,-23,-9}, -{41,-23,-8}, -{41,-23,-7}, -{41,-23,-6}, -{41,-23,-5}, -{41,-23,-4}, -{41,-23,-3}, -{41,-23,-2}, -{41,-23,-1}, -{41,-23,0}, -{41,-23,1}, -{41,-23,2}, -{41,-23,3}, -{41,-23,4}, -{41,-23,5}, -{41,-23,6}, -{41,-23,7}, -{41,-23,8}, -{41,-23,9}, -{41,-23,10}, -{41,-23,11}, -{41,-23,12}, -{41,-23,13}, -{41,-23,14}, -{41,-23,15}, -{41,-23,16}, -{41,-23,17}, -{41,-23,18}, -{41,-23,19}, -{41,-23,20}, -{41,-23,21}, -{41,-23,22}, -{41,-23,23}, -{41,-23,24}, -{41,-23,25}, -{41,-23,26}, -{41,-23,27}, -{41,-23,28}, -{41,-23,29}, -{41,-23,30}, -{41,-23,31}, -{41,-23,32}, -{41,-23,33}, -{41,-23,34}, -{41,-23,35}, -{41,-23,36}, -{41,-23,37}, -{41,-23,38}, -{41,-23,39}, -{41,-23,40}, -{41,-23,41}, -{41,-23,42}, -{41,-23,43}, -{41,-23,44}, -{41,-23,45}, -{41,-23,46}, -{41,-23,47}, -{41,-22,-13}, -{41,-22,-12}, -{41,-22,-11}, -{41,-22,-10}, -{41,-22,-9}, -{41,-22,-8}, -{41,-22,-7}, -{41,-22,-6}, -{41,-22,-5}, -{41,-22,-4}, -{41,-22,-3}, -{41,-22,-2}, -{41,-22,-1}, -{41,-22,0}, -{41,-22,1}, -{41,-22,2}, -{41,-22,3}, -{41,-22,4}, -{41,-22,5}, -{41,-22,6}, -{41,-22,7}, -{41,-22,8}, -{41,-22,9}, -{41,-22,10}, -{41,-22,11}, -{41,-22,12}, -{41,-22,13}, -{41,-22,14}, -{41,-22,15}, -{41,-22,16}, -{41,-22,17}, -{41,-22,18}, -{41,-22,19}, -{41,-22,20}, -{41,-22,21}, -{41,-22,22}, -{41,-22,23}, -{41,-22,24}, -{41,-22,25}, -{41,-22,26}, -{41,-22,27}, -{41,-22,28}, -{41,-22,29}, -{41,-22,30}, -{41,-22,31}, -{41,-22,32}, -{41,-22,33}, -{41,-22,34}, -{41,-22,35}, -{41,-22,36}, -{41,-22,37}, -{41,-22,38}, -{41,-22,39}, -{41,-22,40}, -{41,-22,41}, -{41,-22,42}, -{41,-22,43}, -{41,-22,44}, -{41,-22,45}, -{41,-22,46}, -{41,-22,47}, -{41,-21,-14}, -{41,-21,-13}, -{41,-21,-12}, -{41,-21,-11}, -{41,-21,-10}, -{41,-21,-9}, -{41,-21,-8}, -{41,-21,-7}, -{41,-21,-6}, -{41,-21,-5}, -{41,-21,-4}, -{41,-21,-3}, -{41,-21,-2}, -{41,-21,-1}, -{41,-21,0}, -{41,-21,1}, -{41,-21,2}, -{41,-21,3}, -{41,-21,4}, -{41,-21,5}, -{41,-21,6}, -{41,-21,7}, -{41,-21,8}, -{41,-21,9}, -{41,-21,10}, -{41,-21,11}, -{41,-21,12}, -{41,-21,13}, -{41,-21,14}, -{41,-21,15}, -{41,-21,16}, -{41,-21,17}, -{41,-21,18}, -{41,-21,19}, -{41,-21,20}, -{41,-21,21}, -{41,-21,22}, -{41,-21,23}, -{41,-21,24}, -{41,-21,25}, -{41,-21,26}, -{41,-21,27}, -{41,-21,28}, -{41,-21,29}, -{41,-21,30}, -{41,-21,31}, -{41,-21,32}, -{41,-21,33}, -{41,-21,34}, -{41,-21,35}, -{41,-21,36}, -{41,-21,37}, -{41,-21,38}, -{41,-21,39}, -{41,-21,40}, -{41,-21,41}, -{41,-21,42}, -{41,-21,43}, -{41,-21,44}, -{41,-21,45}, -{41,-21,46}, -{41,-21,47}, -{41,-20,-16}, -{41,-20,-15}, -{41,-20,-14}, -{41,-20,-13}, -{41,-20,-12}, -{41,-20,-11}, -{41,-20,-10}, -{41,-20,-9}, -{41,-20,-8}, -{41,-20,-7}, -{41,-20,-6}, -{41,-20,-5}, -{41,-20,-4}, -{41,-20,-3}, -{41,-20,-2}, -{41,-20,-1}, -{41,-20,0}, -{41,-20,1}, -{41,-20,2}, -{41,-20,3}, -{41,-20,4}, -{41,-20,5}, -{41,-20,6}, -{41,-20,7}, -{41,-20,8}, -{41,-20,9}, -{41,-20,10}, -{41,-20,11}, -{41,-20,12}, -{41,-20,13}, -{41,-20,14}, -{41,-20,15}, -{41,-20,16}, -{41,-20,17}, -{41,-20,18}, -{41,-20,19}, -{41,-20,20}, -{41,-20,21}, -{41,-20,22}, -{41,-20,23}, -{41,-20,24}, -{41,-20,25}, -{41,-20,26}, -{41,-20,27}, -{41,-20,28}, -{41,-20,29}, -{41,-20,30}, -{41,-20,31}, -{41,-20,32}, -{41,-20,33}, -{41,-20,34}, -{41,-20,35}, -{41,-20,36}, -{41,-20,37}, -{41,-20,38}, -{41,-20,39}, -{41,-20,40}, -{41,-20,41}, -{41,-20,42}, -{41,-20,43}, -{41,-20,44}, -{41,-20,45}, -{41,-20,46}, -{41,-20,47}, -{41,-19,-17}, -{41,-19,-16}, -{41,-19,-15}, -{41,-19,-14}, -{41,-19,-13}, -{41,-19,-12}, -{41,-19,-11}, -{41,-19,-10}, -{41,-19,-9}, -{41,-19,-8}, -{41,-19,-7}, -{41,-19,-6}, -{41,-19,-5}, -{41,-19,-4}, -{41,-19,-3}, -{41,-19,-2}, -{41,-19,-1}, -{41,-19,0}, -{41,-19,1}, -{41,-19,2}, -{41,-19,3}, -{41,-19,4}, -{41,-19,5}, -{41,-19,6}, -{41,-19,7}, -{41,-19,8}, -{41,-19,9}, -{41,-19,10}, -{41,-19,11}, -{41,-19,12}, -{41,-19,13}, -{41,-19,14}, -{41,-19,15}, -{41,-19,16}, -{41,-19,17}, -{41,-19,18}, -{41,-19,19}, -{41,-19,20}, -{41,-19,21}, -{41,-19,22}, -{41,-19,23}, -{41,-19,24}, -{41,-19,25}, -{41,-19,26}, -{41,-19,27}, -{41,-19,28}, -{41,-19,29}, -{41,-19,30}, -{41,-19,31}, -{41,-19,32}, -{41,-19,33}, -{41,-19,34}, -{41,-19,35}, -{41,-19,36}, -{41,-19,37}, -{41,-19,38}, -{41,-19,39}, -{41,-19,40}, -{41,-19,41}, -{41,-19,42}, -{41,-19,43}, -{41,-19,44}, -{41,-19,45}, -{41,-19,46}, -{41,-19,47}, -{41,-18,-18}, -{41,-18,-17}, -{41,-18,-16}, -{41,-18,-15}, -{41,-18,-14}, -{41,-18,-13}, -{41,-18,-12}, -{41,-18,-11}, -{41,-18,-10}, -{41,-18,-9}, -{41,-18,-8}, -{41,-18,-7}, -{41,-18,-6}, -{41,-18,-5}, -{41,-18,-4}, -{41,-18,-3}, -{41,-18,-2}, -{41,-18,-1}, -{41,-18,0}, -{41,-18,1}, -{41,-18,2}, -{41,-18,3}, -{41,-18,4}, -{41,-18,5}, -{41,-18,6}, -{41,-18,7}, -{41,-18,8}, -{41,-18,9}, -{41,-18,10}, -{41,-18,11}, -{41,-18,12}, -{41,-18,13}, -{41,-18,14}, -{41,-18,15}, -{41,-18,16}, -{41,-18,17}, -{41,-18,18}, -{41,-18,19}, -{41,-18,20}, -{41,-18,21}, -{41,-18,22}, -{41,-18,23}, -{41,-18,24}, -{41,-18,25}, -{41,-18,26}, -{41,-18,27}, -{41,-18,28}, -{41,-18,29}, -{41,-18,30}, -{41,-18,31}, -{41,-18,32}, -{41,-18,33}, -{41,-18,34}, -{41,-18,35}, -{41,-18,36}, -{41,-18,37}, -{41,-18,38}, -{41,-18,39}, -{41,-18,40}, -{41,-18,41}, -{41,-18,42}, -{41,-18,43}, -{41,-18,44}, -{41,-18,45}, -{41,-18,46}, -{41,-18,47}, -{41,-17,-20}, -{41,-17,-19}, -{41,-17,-18}, -{41,-17,-17}, -{41,-17,-16}, -{41,-17,-15}, -{41,-17,-14}, -{41,-17,-13}, -{41,-17,-12}, -{41,-17,-11}, -{41,-17,-10}, -{41,-17,-9}, -{41,-17,-8}, -{41,-17,-7}, -{41,-17,-6}, -{41,-17,-5}, -{41,-17,-4}, -{41,-17,-3}, -{41,-17,-2}, -{41,-17,-1}, -{41,-17,0}, -{41,-17,1}, -{41,-17,2}, -{41,-17,3}, -{41,-17,4}, -{41,-17,5}, -{41,-17,6}, -{41,-17,7}, -{41,-17,8}, -{41,-17,9}, -{41,-17,10}, -{41,-17,11}, -{41,-17,12}, -{41,-17,13}, -{41,-17,14}, -{41,-17,15}, -{41,-17,16}, -{41,-17,17}, -{41,-17,18}, -{41,-17,19}, -{41,-17,20}, -{41,-17,21}, -{41,-17,22}, -{41,-17,23}, -{41,-17,24}, -{41,-17,25}, -{41,-17,26}, -{41,-17,27}, -{41,-17,28}, -{41,-17,29}, -{41,-17,30}, -{41,-17,31}, -{41,-17,32}, -{41,-17,33}, -{41,-17,34}, -{41,-17,35}, -{41,-17,36}, -{41,-17,37}, -{41,-17,38}, -{41,-17,39}, -{41,-17,40}, -{41,-17,41}, -{41,-17,42}, -{41,-17,43}, -{41,-17,44}, -{41,-17,45}, -{41,-17,46}, -{41,-17,47}, -{41,-16,-21}, -{41,-16,-20}, -{41,-16,-19}, -{41,-16,-18}, -{41,-16,-17}, -{41,-16,-16}, -{41,-16,-15}, -{41,-16,-14}, -{41,-16,-13}, -{41,-16,-12}, -{41,-16,-11}, -{41,-16,-10}, -{41,-16,-9}, -{41,-16,-8}, -{41,-16,-7}, -{41,-16,-6}, -{41,-16,-5}, -{41,-16,-4}, -{41,-16,-3}, -{41,-16,-2}, -{41,-16,-1}, -{41,-16,0}, -{41,-16,1}, -{41,-16,2}, -{41,-16,3}, -{41,-16,4}, -{41,-16,5}, -{41,-16,6}, -{41,-16,7}, -{41,-16,8}, -{41,-16,9}, -{41,-16,10}, -{41,-16,11}, -{41,-16,12}, -{41,-16,13}, -{41,-16,14}, -{41,-16,15}, -{41,-16,16}, -{41,-16,17}, -{41,-16,18}, -{41,-16,19}, -{41,-16,20}, -{41,-16,21}, -{41,-16,22}, -{41,-16,23}, -{41,-16,24}, -{41,-16,25}, -{41,-16,26}, -{41,-16,27}, -{41,-16,28}, -{41,-16,29}, -{41,-16,30}, -{41,-16,31}, -{41,-16,32}, -{41,-16,33}, -{41,-16,34}, -{41,-16,35}, -{41,-16,36}, -{41,-16,37}, -{41,-16,38}, -{41,-16,39}, -{41,-16,40}, -{41,-16,41}, -{41,-16,42}, -{41,-16,43}, -{41,-16,44}, -{41,-16,45}, -{41,-16,46}, -{41,-16,47}, -{41,-15,-22}, -{41,-15,-21}, -{41,-15,-20}, -{41,-15,-19}, -{41,-15,-18}, -{41,-15,-17}, -{41,-15,-16}, -{41,-15,-15}, -{41,-15,-14}, -{41,-15,-13}, -{41,-15,-12}, -{41,-15,-11}, -{41,-15,-10}, -{41,-15,-9}, -{41,-15,-8}, -{41,-15,-7}, -{41,-15,-6}, -{41,-15,-5}, -{41,-15,-4}, -{41,-15,-3}, -{41,-15,-2}, -{41,-15,-1}, -{41,-15,0}, -{41,-15,1}, -{41,-15,2}, -{41,-15,3}, -{41,-15,4}, -{41,-15,5}, -{41,-15,6}, -{41,-15,7}, -{41,-15,8}, -{41,-15,9}, -{41,-15,10}, -{41,-15,11}, -{41,-15,12}, -{41,-15,13}, -{41,-15,14}, -{41,-15,15}, -{41,-15,16}, -{41,-15,17}, -{41,-15,18}, -{41,-15,19}, -{41,-15,20}, -{41,-15,21}, -{41,-15,22}, -{41,-15,23}, -{41,-15,24}, -{41,-15,25}, -{41,-15,26}, -{41,-15,27}, -{41,-15,28}, -{41,-15,29}, -{41,-15,30}, -{41,-15,31}, -{41,-15,32}, -{41,-15,33}, -{41,-15,34}, -{41,-15,35}, -{41,-15,36}, -{41,-15,37}, -{41,-15,38}, -{41,-15,39}, -{41,-15,40}, -{41,-15,41}, -{41,-15,42}, -{41,-15,43}, -{41,-15,44}, -{41,-15,45}, -{41,-15,46}, -{41,-15,47}, -{41,-14,-24}, -{41,-14,-23}, -{41,-14,-22}, -{41,-14,-21}, -{41,-14,-20}, -{41,-14,-19}, -{41,-14,-18}, -{41,-14,-17}, -{41,-14,-16}, -{41,-14,-15}, -{41,-14,-14}, -{41,-14,-13}, -{41,-14,-12}, -{41,-14,-11}, -{41,-14,-10}, -{41,-14,-9}, -{41,-14,-8}, -{41,-14,-7}, -{41,-14,-6}, -{41,-14,-5}, -{41,-14,-4}, -{41,-14,-3}, -{41,-14,-2}, -{41,-14,-1}, -{41,-14,0}, -{41,-14,1}, -{41,-14,2}, -{41,-14,3}, -{41,-14,4}, -{41,-14,5}, -{41,-14,6}, -{41,-14,7}, -{41,-14,8}, -{41,-14,9}, -{41,-14,10}, -{41,-14,11}, -{41,-14,12}, -{41,-14,13}, -{41,-14,14}, -{41,-14,15}, -{41,-14,16}, -{41,-14,17}, -{41,-14,18}, -{41,-14,19}, -{41,-14,20}, -{41,-14,21}, -{41,-14,22}, -{41,-14,23}, -{41,-14,24}, -{41,-14,25}, -{41,-14,26}, -{41,-14,27}, -{41,-14,28}, -{41,-14,29}, -{41,-14,30}, -{41,-14,31}, -{41,-14,32}, -{41,-14,33}, -{41,-14,34}, -{41,-14,35}, -{41,-14,36}, -{41,-14,37}, -{41,-14,38}, -{41,-14,39}, -{41,-14,40}, -{41,-14,41}, -{41,-14,42}, -{41,-14,43}, -{41,-14,44}, -{41,-14,45}, -{41,-14,46}, -{41,-14,47}, -{41,-13,-25}, -{41,-13,-24}, -{41,-13,-23}, -{41,-13,-22}, -{41,-13,-21}, -{41,-13,-20}, -{41,-13,-19}, -{41,-13,-18}, -{41,-13,-17}, -{41,-13,-16}, -{41,-13,-15}, -{41,-13,-14}, -{41,-13,-13}, -{41,-13,-12}, -{41,-13,-11}, -{41,-13,-10}, -{41,-13,-9}, -{41,-13,-8}, -{41,-13,-7}, -{41,-13,-6}, -{41,-13,-5}, -{41,-13,-4}, -{41,-13,-3}, -{41,-13,-2}, -{41,-13,-1}, -{41,-13,0}, -{41,-13,1}, -{41,-13,2}, -{41,-13,3}, -{41,-13,4}, -{41,-13,5}, -{41,-13,6}, -{41,-13,7}, -{41,-13,8}, -{41,-13,9}, -{41,-13,10}, -{41,-13,11}, -{41,-13,12}, -{41,-13,13}, -{41,-13,14}, -{41,-13,15}, -{41,-13,16}, -{41,-13,17}, -{41,-13,18}, -{41,-13,19}, -{41,-13,20}, -{41,-13,21}, -{41,-13,22}, -{41,-13,23}, -{41,-13,24}, -{41,-13,25}, -{41,-13,26}, -{41,-13,27}, -{41,-13,28}, -{41,-13,29}, -{41,-13,30}, -{41,-13,31}, -{41,-13,32}, -{41,-13,33}, -{41,-13,34}, -{41,-13,35}, -{41,-13,36}, -{41,-13,37}, -{41,-13,38}, -{41,-13,39}, -{41,-13,40}, -{41,-13,41}, -{41,-13,42}, -{41,-13,43}, -{41,-13,44}, -{41,-13,45}, -{41,-13,46}, -{41,-13,47}, -{41,-12,-26}, -{41,-12,-25}, -{41,-12,-24}, -{41,-12,-23}, -{41,-12,-22}, -{41,-12,-21}, -{41,-12,-20}, -{41,-12,-19}, -{41,-12,-18}, -{41,-12,-17}, -{41,-12,-16}, -{41,-12,-15}, -{41,-12,-14}, -{41,-12,-13}, -{41,-12,-12}, -{41,-12,-11}, -{41,-12,-10}, -{41,-12,-9}, -{41,-12,-8}, -{41,-12,-7}, -{41,-12,-6}, -{41,-12,-5}, -{41,-12,-4}, -{41,-12,-3}, -{41,-12,-2}, -{41,-12,-1}, -{41,-12,0}, -{41,-12,1}, -{41,-12,2}, -{41,-12,3}, -{41,-12,4}, -{41,-12,5}, -{41,-12,6}, -{41,-12,7}, -{41,-12,8}, -{41,-12,9}, -{41,-12,10}, -{41,-12,11}, -{41,-12,12}, -{41,-12,13}, -{41,-12,14}, -{41,-12,15}, -{41,-12,16}, -{41,-12,17}, -{41,-12,18}, -{41,-12,19}, -{41,-12,20}, -{41,-12,21}, -{41,-12,22}, -{41,-12,23}, -{41,-12,24}, -{41,-12,25}, -{41,-12,26}, -{41,-12,27}, -{41,-12,28}, -{41,-12,29}, -{41,-12,30}, -{41,-12,31}, -{41,-12,32}, -{41,-12,33}, -{41,-12,34}, -{41,-12,35}, -{41,-12,36}, -{41,-12,37}, -{41,-12,38}, -{41,-12,39}, -{41,-12,40}, -{41,-12,41}, -{41,-12,42}, -{41,-12,43}, -{41,-12,44}, -{41,-12,45}, -{41,-12,46}, -{41,-12,47}, -{41,-11,-28}, -{41,-11,-27}, -{41,-11,-26}, -{41,-11,-25}, -{41,-11,-24}, -{41,-11,-23}, -{41,-11,-22}, -{41,-11,-21}, -{41,-11,-20}, -{41,-11,-19}, -{41,-11,-18}, -{41,-11,-17}, -{41,-11,-16}, -{41,-11,-15}, -{41,-11,-14}, -{41,-11,-13}, -{41,-11,-12}, -{41,-11,-11}, -{41,-11,-10}, -{41,-11,-9}, -{41,-11,-8}, -{41,-11,-7}, -{41,-11,-6}, -{41,-11,-5}, -{41,-11,-4}, -{41,-11,-3}, -{41,-11,-2}, -{41,-11,-1}, -{41,-11,0}, -{41,-11,1}, -{41,-11,2}, -{41,-11,3}, -{41,-11,4}, -{41,-11,5}, -{41,-11,6}, -{41,-11,7}, -{41,-11,8}, -{41,-11,9}, -{41,-11,10}, -{41,-11,11}, -{41,-11,12}, -{41,-11,13}, -{41,-11,14}, -{41,-11,15}, -{41,-11,16}, -{41,-11,17}, -{41,-11,18}, -{41,-11,19}, -{41,-11,20}, -{41,-11,21}, -{41,-11,22}, -{41,-11,23}, -{41,-11,24}, -{41,-11,25}, -{41,-11,26}, -{41,-11,27}, -{41,-11,28}, -{41,-11,29}, -{41,-11,30}, -{41,-11,31}, -{41,-11,32}, -{41,-11,33}, -{41,-11,34}, -{41,-11,35}, -{41,-11,36}, -{41,-11,37}, -{41,-11,38}, -{41,-11,39}, -{41,-11,40}, -{41,-11,41}, -{41,-11,42}, -{41,-11,43}, -{41,-11,44}, -{41,-11,45}, -{41,-11,46}, -{41,-11,47}, -{41,-10,-29}, -{41,-10,-28}, -{41,-10,-27}, -{41,-10,-26}, -{41,-10,-25}, -{41,-10,-24}, -{41,-10,-23}, -{41,-10,-22}, -{41,-10,-21}, -{41,-10,-20}, -{41,-10,-19}, -{41,-10,-18}, -{41,-10,-17}, -{41,-10,-16}, -{41,-10,-15}, -{41,-10,-14}, -{41,-10,-13}, -{41,-10,-12}, -{41,-10,-11}, -{41,-10,-10}, -{41,-10,-9}, -{41,-10,-8}, -{41,-10,-7}, -{41,-10,-6}, -{41,-10,-5}, -{41,-10,-4}, -{41,-10,-3}, -{41,-10,-2}, -{41,-10,-1}, -{41,-10,0}, -{41,-10,1}, -{41,-10,2}, -{41,-10,3}, -{41,-10,4}, -{41,-10,5}, -{41,-10,6}, -{41,-10,7}, -{41,-10,8}, -{41,-10,9}, -{41,-10,10}, -{41,-10,11}, -{41,-10,12}, -{41,-10,13}, -{41,-10,14}, -{41,-10,15}, -{41,-10,16}, -{41,-10,17}, -{41,-10,18}, -{41,-10,19}, -{41,-10,20}, -{41,-10,21}, -{41,-10,22}, -{41,-10,23}, -{41,-10,24}, -{41,-10,25}, -{41,-10,26}, -{41,-10,27}, -{41,-10,28}, -{41,-10,29}, -{41,-10,30}, -{41,-10,31}, -{41,-10,32}, -{41,-10,33}, -{41,-10,34}, -{41,-10,35}, -{41,-10,36}, -{41,-10,37}, -{41,-10,38}, -{41,-10,39}, -{41,-10,40}, -{41,-10,41}, -{41,-10,42}, -{41,-10,43}, -{41,-10,44}, -{41,-10,45}, -{41,-10,46}, -{41,-10,47}, -{41,-9,-30}, -{41,-9,-29}, -{41,-9,-28}, -{41,-9,-27}, -{41,-9,-26}, -{41,-9,-25}, -{41,-9,-24}, -{41,-9,-23}, -{41,-9,-22}, -{41,-9,-21}, -{41,-9,-20}, -{41,-9,-19}, -{41,-9,-18}, -{41,-9,-17}, -{41,-9,-16}, -{41,-9,-15}, -{41,-9,-14}, -{41,-9,-13}, -{41,-9,-12}, -{41,-9,-11}, -{41,-9,-10}, -{41,-9,-9}, -{41,-9,-8}, -{41,-9,-7}, -{41,-9,-6}, -{41,-9,-5}, -{41,-9,-4}, -{41,-9,-3}, -{41,-9,-2}, -{41,-9,-1}, -{41,-9,0}, -{41,-9,1}, -{41,-9,2}, -{41,-9,3}, -{41,-9,4}, -{41,-9,5}, -{41,-9,6}, -{41,-9,7}, -{41,-9,8}, -{41,-9,9}, -{41,-9,10}, -{41,-9,11}, -{41,-9,12}, -{41,-9,13}, -{41,-9,14}, -{41,-9,15}, -{41,-9,16}, -{41,-9,17}, -{41,-9,18}, -{41,-9,19}, -{41,-9,20}, -{41,-9,21}, -{41,-9,22}, -{41,-9,23}, -{41,-9,24}, -{41,-9,25}, -{41,-9,26}, -{41,-9,27}, -{41,-9,28}, -{41,-9,29}, -{41,-9,30}, -{41,-9,31}, -{41,-9,32}, -{41,-9,33}, -{41,-9,34}, -{41,-9,35}, -{41,-9,36}, -{41,-9,37}, -{41,-9,38}, -{41,-9,39}, -{41,-9,40}, -{41,-9,41}, -{41,-9,42}, -{41,-9,43}, -{41,-9,44}, -{41,-9,45}, -{41,-9,46}, -{41,-9,47}, -{41,-8,-31}, -{41,-8,-30}, -{41,-8,-29}, -{41,-8,-28}, -{41,-8,-27}, -{41,-8,-26}, -{41,-8,-25}, -{41,-8,-24}, -{41,-8,-23}, -{41,-8,-22}, -{41,-8,-21}, -{41,-8,-20}, -{41,-8,-19}, -{41,-8,-18}, -{41,-8,-17}, -{41,-8,-16}, -{41,-8,-15}, -{41,-8,-14}, -{41,-8,-13}, -{41,-8,-12}, -{41,-8,-11}, -{41,-8,-10}, -{41,-8,-9}, -{41,-8,-8}, -{41,-8,-7}, -{41,-8,-6}, -{41,-8,-5}, -{41,-8,-4}, -{41,-8,-3}, -{41,-8,-2}, -{41,-8,-1}, -{41,-8,0}, -{41,-8,1}, -{41,-8,2}, -{41,-8,3}, -{41,-8,4}, -{41,-8,5}, -{41,-8,6}, -{41,-8,7}, -{41,-8,8}, -{41,-8,9}, -{41,-8,10}, -{41,-8,11}, -{41,-8,12}, -{41,-8,13}, -{41,-8,14}, -{41,-8,15}, -{41,-8,16}, -{41,-8,17}, -{41,-8,18}, -{41,-8,19}, -{41,-8,20}, -{41,-8,21}, -{41,-8,22}, -{41,-8,23}, -{41,-8,24}, -{41,-8,25}, -{41,-8,26}, -{41,-8,27}, -{41,-8,28}, -{41,-8,29}, -{41,-8,30}, -{41,-8,31}, -{41,-8,32}, -{41,-8,33}, -{41,-8,34}, -{41,-8,35}, -{41,-8,36}, -{41,-8,37}, -{41,-8,38}, -{41,-8,39}, -{41,-8,40}, -{41,-8,41}, -{41,-8,42}, -{41,-8,43}, -{41,-8,44}, -{41,-8,45}, -{41,-8,46}, -{41,-8,47}, -{41,-7,-32}, -{41,-7,-31}, -{41,-7,-30}, -{41,-7,-29}, -{41,-7,-28}, -{41,-7,-27}, -{41,-7,-26}, -{41,-7,-25}, -{41,-7,-24}, -{41,-7,-23}, -{41,-7,-22}, -{41,-7,-21}, -{41,-7,-20}, -{41,-7,-19}, -{41,-7,-18}, -{41,-7,-17}, -{41,-7,-16}, -{41,-7,-15}, -{41,-7,-14}, -{41,-7,-13}, -{41,-7,-12}, -{41,-7,-11}, -{41,-7,-10}, -{41,-7,-9}, -{41,-7,-8}, -{41,-7,-7}, -{41,-7,-6}, -{41,-7,-5}, -{41,-7,-4}, -{41,-7,-3}, -{41,-7,-2}, -{41,-7,-1}, -{41,-7,0}, -{41,-7,1}, -{41,-7,2}, -{41,-7,3}, -{41,-7,4}, -{41,-7,5}, -{41,-7,6}, -{41,-7,7}, -{41,-7,8}, -{41,-7,9}, -{41,-7,10}, -{41,-7,11}, -{41,-7,12}, -{41,-7,13}, -{41,-7,14}, -{41,-7,15}, -{41,-7,16}, -{41,-7,17}, -{41,-7,18}, -{41,-7,19}, -{41,-7,20}, -{41,-7,21}, -{41,-7,22}, -{41,-7,23}, -{41,-7,24}, -{41,-7,25}, -{41,-7,26}, -{41,-7,27}, -{41,-7,28}, -{41,-7,29}, -{41,-7,30}, -{41,-7,31}, -{41,-7,32}, -{41,-7,33}, -{41,-7,34}, -{41,-7,35}, -{41,-7,36}, -{41,-7,37}, -{41,-7,38}, -{41,-7,39}, -{41,-7,40}, -{41,-7,41}, -{41,-7,42}, -{41,-7,43}, -{41,-7,44}, -{41,-7,45}, -{41,-7,46}, -{41,-7,47}, -{41,-7,48}, -{41,-6,-34}, -{41,-6,-33}, -{41,-6,-32}, -{41,-6,-31}, -{41,-6,-30}, -{41,-6,-29}, -{41,-6,-28}, -{41,-6,-27}, -{41,-6,-26}, -{41,-6,-25}, -{41,-6,-24}, -{41,-6,-23}, -{41,-6,-22}, -{41,-6,-21}, -{41,-6,-20}, -{41,-6,-19}, -{41,-6,-18}, -{41,-6,-17}, -{41,-6,-16}, -{41,-6,-15}, -{41,-6,-14}, -{41,-6,-13}, -{41,-6,-12}, -{41,-6,-11}, -{41,-6,-10}, -{41,-6,-9}, -{41,-6,-8}, -{41,-6,-7}, -{41,-6,-6}, -{41,-6,-5}, -{41,-6,-4}, -{41,-6,-3}, -{41,-6,-2}, -{41,-6,-1}, -{41,-6,0}, -{41,-6,1}, -{41,-6,2}, -{41,-6,3}, -{41,-6,4}, -{41,-6,5}, -{41,-6,6}, -{41,-6,7}, -{41,-6,8}, -{41,-6,9}, -{41,-6,10}, -{41,-6,11}, -{41,-6,12}, -{41,-6,13}, -{41,-6,14}, -{41,-6,15}, -{41,-6,16}, -{41,-6,17}, -{41,-6,18}, -{41,-6,19}, -{41,-6,20}, -{41,-6,21}, -{41,-6,22}, -{41,-6,23}, -{41,-6,24}, -{41,-6,25}, -{41,-6,26}, -{41,-6,27}, -{41,-6,28}, -{41,-6,29}, -{41,-6,30}, -{41,-6,31}, -{41,-6,32}, -{41,-6,33}, -{41,-6,34}, -{41,-6,35}, -{41,-6,36}, -{41,-6,37}, -{41,-6,38}, -{41,-6,39}, -{41,-6,40}, -{41,-6,41}, -{41,-6,42}, -{41,-6,43}, -{41,-6,44}, -{41,-6,45}, -{41,-6,46}, -{41,-6,47}, -{41,-6,48}, -{41,-5,-35}, -{41,-5,-34}, -{41,-5,-33}, -{41,-5,-32}, -{41,-5,-31}, -{41,-5,-30}, -{41,-5,-29}, -{41,-5,-28}, -{41,-5,-27}, -{41,-5,-26}, -{41,-5,-25}, -{41,-5,-24}, -{41,-5,-23}, -{41,-5,-22}, -{41,-5,-21}, -{41,-5,-20}, -{41,-5,-19}, -{41,-5,-18}, -{41,-5,-17}, -{41,-5,-16}, -{41,-5,-15}, -{41,-5,-14}, -{41,-5,-13}, -{41,-5,-12}, -{41,-5,-11}, -{41,-5,-10}, -{41,-5,-9}, -{41,-5,-8}, -{41,-5,-7}, -{41,-5,-6}, -{41,-5,-5}, -{41,-5,-4}, -{41,-5,-3}, -{41,-5,-2}, -{41,-5,-1}, -{41,-5,0}, -{41,-5,1}, -{41,-5,2}, -{41,-5,3}, -{41,-5,4}, -{41,-5,5}, -{41,-5,6}, -{41,-5,7}, -{41,-5,8}, -{41,-5,9}, -{41,-5,10}, -{41,-5,11}, -{41,-5,12}, -{41,-5,13}, -{41,-5,14}, -{41,-5,15}, -{41,-5,16}, -{41,-5,17}, -{41,-5,18}, -{41,-5,19}, -{41,-5,20}, -{41,-5,21}, -{41,-5,22}, -{41,-5,23}, -{41,-5,24}, -{41,-5,25}, -{41,-5,26}, -{41,-5,27}, -{41,-5,28}, -{41,-5,29}, -{41,-5,30}, -{41,-5,31}, -{41,-5,32}, -{41,-5,33}, -{41,-5,34}, -{41,-5,35}, -{41,-5,36}, -{41,-5,37}, -{41,-5,38}, -{41,-5,39}, -{41,-5,40}, -{41,-5,41}, -{41,-5,42}, -{41,-5,43}, -{41,-5,44}, -{41,-5,45}, -{41,-5,46}, -{41,-5,47}, -{41,-5,48}, -{41,-4,-36}, -{41,-4,-35}, -{41,-4,-34}, -{41,-4,-33}, -{41,-4,-32}, -{41,-4,-31}, -{41,-4,-30}, -{41,-4,-29}, -{41,-4,-28}, -{41,-4,-27}, -{41,-4,-26}, -{41,-4,-25}, -{41,-4,-24}, -{41,-4,-23}, -{41,-4,-22}, -{41,-4,-21}, -{41,-4,-20}, -{41,-4,-19}, -{41,-4,-18}, -{41,-4,-17}, -{41,-4,-16}, -{41,-4,-15}, -{41,-4,-14}, -{41,-4,-13}, -{41,-4,-12}, -{41,-4,-11}, -{41,-4,-10}, -{41,-4,-9}, -{41,-4,-8}, -{41,-4,-7}, -{41,-4,-6}, -{41,-4,-5}, -{41,-4,-4}, -{41,-4,-3}, -{41,-4,-2}, -{41,-4,-1}, -{41,-4,0}, -{41,-4,1}, -{41,-4,2}, -{41,-4,3}, -{41,-4,4}, -{41,-4,5}, -{41,-4,6}, -{41,-4,7}, -{41,-4,8}, -{41,-4,9}, -{41,-4,10}, -{41,-4,11}, -{41,-4,12}, -{41,-4,13}, -{41,-4,14}, -{41,-4,15}, -{41,-4,16}, -{41,-4,17}, -{41,-4,18}, -{41,-4,19}, -{41,-4,20}, -{41,-4,21}, -{41,-4,22}, -{41,-4,23}, -{41,-4,24}, -{41,-4,25}, -{41,-4,26}, -{41,-4,27}, -{41,-4,28}, -{41,-4,29}, -{41,-4,30}, -{41,-4,31}, -{41,-4,32}, -{41,-4,33}, -{41,-4,34}, -{41,-4,35}, -{41,-4,36}, -{41,-4,37}, -{41,-4,38}, -{41,-4,39}, -{41,-4,40}, -{41,-4,41}, -{41,-4,42}, -{41,-4,43}, -{41,-4,44}, -{41,-4,45}, -{41,-4,46}, -{41,-4,47}, -{41,-4,48}, -{41,-3,-37}, -{41,-3,-36}, -{41,-3,-35}, -{41,-3,-34}, -{41,-3,-33}, -{41,-3,-32}, -{41,-3,-31}, -{41,-3,-30}, -{41,-3,-29}, -{41,-3,-28}, -{41,-3,-27}, -{41,-3,-26}, -{41,-3,-25}, -{41,-3,-24}, -{41,-3,-23}, -{41,-3,-22}, -{41,-3,-21}, -{41,-3,-20}, -{41,-3,-19}, -{41,-3,-18}, -{41,-3,-17}, -{41,-3,-16}, -{41,-3,-15}, -{41,-3,-14}, -{41,-3,-13}, -{41,-3,-12}, -{41,-3,-11}, -{41,-3,-10}, -{41,-3,-9}, -{41,-3,-8}, -{41,-3,-7}, -{41,-3,-6}, -{41,-3,-5}, -{41,-3,-4}, -{41,-3,-3}, -{41,-3,-2}, -{41,-3,-1}, -{41,-3,0}, -{41,-3,1}, -{41,-3,2}, -{41,-3,3}, -{41,-3,4}, -{41,-3,5}, -{41,-3,6}, -{41,-3,7}, -{41,-3,8}, -{41,-3,9}, -{41,-3,10}, -{41,-3,11}, -{41,-3,12}, -{41,-3,13}, -{41,-3,14}, -{41,-3,15}, -{41,-3,16}, -{41,-3,17}, -{41,-3,18}, -{41,-3,19}, -{41,-3,20}, -{41,-3,21}, -{41,-3,22}, -{41,-3,23}, -{41,-3,24}, -{41,-3,25}, -{41,-3,26}, -{41,-3,27}, -{41,-3,28}, -{41,-3,29}, -{41,-3,30}, -{41,-3,31}, -{41,-3,32}, -{41,-3,33}, -{41,-3,34}, -{41,-3,35}, -{41,-3,36}, -{41,-3,37}, -{41,-3,38}, -{41,-3,39}, -{41,-3,40}, -{41,-3,41}, -{41,-3,42}, -{41,-3,43}, -{41,-3,44}, -{41,-3,45}, -{41,-3,46}, -{41,-3,47}, -{41,-3,48}, -{41,-2,-38}, -{41,-2,-37}, -{41,-2,-36}, -{41,-2,-35}, -{41,-2,-34}, -{41,-2,-33}, -{41,-2,-32}, -{41,-2,-31}, -{41,-2,-30}, -{41,-2,-29}, -{41,-2,-28}, -{41,-2,-27}, -{41,-2,-26}, -{41,-2,-25}, -{41,-2,-24}, -{41,-2,-23}, -{41,-2,-22}, -{41,-2,-21}, -{41,-2,-20}, -{41,-2,-19}, -{41,-2,-18}, -{41,-2,-17}, -{41,-2,-16}, -{41,-2,-15}, -{41,-2,-14}, -{41,-2,-13}, -{41,-2,-12}, -{41,-2,-11}, -{41,-2,-10}, -{41,-2,-9}, -{41,-2,-8}, -{41,-2,-7}, -{41,-2,-6}, -{41,-2,-5}, -{41,-2,-4}, -{41,-2,-3}, -{41,-2,-2}, -{41,-2,-1}, -{41,-2,0}, -{41,-2,1}, -{41,-2,2}, -{41,-2,3}, -{41,-2,4}, -{41,-2,5}, -{41,-2,6}, -{41,-2,7}, -{41,-2,8}, -{41,-2,9}, -{41,-2,10}, -{41,-2,11}, -{41,-2,12}, -{41,-2,13}, -{41,-2,14}, -{41,-2,15}, -{41,-2,16}, -{41,-2,17}, -{41,-2,18}, -{41,-2,19}, -{41,-2,20}, -{41,-2,21}, -{41,-2,22}, -{41,-2,23}, -{41,-2,24}, -{41,-2,25}, -{41,-2,26}, -{41,-2,27}, -{41,-2,28}, -{41,-2,29}, -{41,-2,30}, -{41,-2,31}, -{41,-2,32}, -{41,-2,33}, -{41,-2,34}, -{41,-2,35}, -{41,-2,36}, -{41,-2,37}, -{41,-2,38}, -{41,-2,39}, -{41,-2,40}, -{41,-2,41}, -{41,-2,42}, -{41,-2,43}, -{41,-2,44}, -{41,-2,45}, -{41,-2,46}, -{41,-2,47}, -{41,-2,48}, -{41,-1,-40}, -{41,-1,-39}, -{41,-1,-38}, -{41,-1,-37}, -{41,-1,-36}, -{41,-1,-35}, -{41,-1,-34}, -{41,-1,-33}, -{41,-1,-32}, -{41,-1,-31}, -{41,-1,-30}, -{41,-1,-29}, -{41,-1,-28}, -{41,-1,-27}, -{41,-1,-26}, -{41,-1,-25}, -{41,-1,-24}, -{41,-1,-23}, -{41,-1,-22}, -{41,-1,-21}, -{41,-1,-20}, -{41,-1,-19}, -{41,-1,-18}, -{41,-1,-17}, -{41,-1,-16}, -{41,-1,-15}, -{41,-1,-14}, -{41,-1,-13}, -{41,-1,-12}, -{41,-1,-11}, -{41,-1,-10}, -{41,-1,-9}, -{41,-1,-8}, -{41,-1,-7}, -{41,-1,-6}, -{41,-1,-5}, -{41,-1,-4}, -{41,-1,-3}, -{41,-1,-2}, -{41,-1,-1}, -{41,-1,0}, -{41,-1,1}, -{41,-1,2}, -{41,-1,3}, -{41,-1,4}, -{41,-1,5}, -{41,-1,6}, -{41,-1,7}, -{41,-1,8}, -{41,-1,9}, -{41,-1,10}, -{41,-1,11}, -{41,-1,12}, -{41,-1,13}, -{41,-1,14}, -{41,-1,15}, -{41,-1,16}, -{41,-1,17}, -{41,-1,18}, -{41,-1,19}, -{41,-1,20}, -{41,-1,21}, -{41,-1,22}, -{41,-1,23}, -{41,-1,24}, -{41,-1,25}, -{41,-1,26}, -{41,-1,27}, -{41,-1,28}, -{41,-1,29}, -{41,-1,30}, -{41,-1,31}, -{41,-1,32}, -{41,-1,33}, -{41,-1,34}, -{41,-1,35}, -{41,-1,36}, -{41,-1,37}, -{41,-1,38}, -{41,-1,39}, -{41,-1,40}, -{41,-1,41}, -{41,-1,42}, -{41,-1,43}, -{41,-1,44}, -{41,-1,45}, -{41,-1,46}, -{41,-1,47}, -{41,-1,48}, -{41,0,-41}, -{41,0,-40}, -{41,0,-39}, -{41,0,-38}, -{41,0,-37}, -{41,0,-36}, -{41,0,-35}, -{41,0,-34}, -{41,0,-33}, -{41,0,-32}, -{41,0,-31}, -{41,0,-30}, -{41,0,-29}, -{41,0,-28}, -{41,0,-27}, -{41,0,-26}, -{41,0,-25}, -{41,0,-24}, -{41,0,-23}, -{41,0,-22}, -{41,0,-21}, -{41,0,-20}, -{41,0,-19}, -{41,0,-18}, -{41,0,-17}, -{41,0,-16}, -{41,0,-15}, -{41,0,-14}, -{41,0,-13}, -{41,0,-12}, -{41,0,-11}, -{41,0,-10}, -{41,0,-9}, -{41,0,-8}, -{41,0,-7}, -{41,0,-6}, -{41,0,-5}, -{41,0,-4}, -{41,0,-3}, -{41,0,-2}, -{41,0,-1}, -{41,0,0}, -{41,0,1}, -{41,0,2}, -{41,0,3}, -{41,0,4}, -{41,0,5}, -{41,0,6}, -{41,0,7}, -{41,0,8}, -{41,0,9}, -{41,0,10}, -{41,0,11}, -{41,0,12}, -{41,0,13}, -{41,0,14}, -{41,0,15}, -{41,0,16}, -{41,0,17}, -{41,0,18}, -{41,0,19}, -{41,0,20}, -{41,0,21}, -{41,0,22}, -{41,0,23}, -{41,0,24}, -{41,0,25}, -{41,0,26}, -{41,0,27}, -{41,0,28}, -{41,0,29}, -{41,0,30}, -{41,0,31}, -{41,0,32}, -{41,0,33}, -{41,0,34}, -{41,0,35}, -{41,0,36}, -{41,0,37}, -{41,0,38}, -{41,0,39}, -{41,0,40}, -{41,0,41}, -{41,0,42}, -{41,0,43}, -{41,0,44}, -{41,0,45}, -{41,0,46}, -{41,0,47}, -{41,0,48}, -{41,1,-42}, -{41,1,-41}, -{41,1,-40}, -{41,1,-39}, -{41,1,-38}, -{41,1,-37}, -{41,1,-36}, -{41,1,-35}, -{41,1,-34}, -{41,1,-33}, -{41,1,-32}, -{41,1,-31}, -{41,1,-30}, -{41,1,-29}, -{41,1,-28}, -{41,1,-27}, -{41,1,-26}, -{41,1,-25}, -{41,1,-24}, -{41,1,-23}, -{41,1,-22}, -{41,1,-21}, -{41,1,-20}, -{41,1,-19}, -{41,1,-18}, -{41,1,-17}, -{41,1,-16}, -{41,1,-15}, -{41,1,-14}, -{41,1,-13}, -{41,1,-12}, -{41,1,-11}, -{41,1,-10}, -{41,1,-9}, -{41,1,-8}, -{41,1,-7}, -{41,1,-6}, -{41,1,-5}, -{41,1,-4}, -{41,1,-3}, -{41,1,-2}, -{41,1,-1}, -{41,1,0}, -{41,1,1}, -{41,1,2}, -{41,1,3}, -{41,1,4}, -{41,1,5}, -{41,1,6}, -{41,1,7}, -{41,1,8}, -{41,1,9}, -{41,1,10}, -{41,1,11}, -{41,1,12}, -{41,1,13}, -{41,1,14}, -{41,1,15}, -{41,1,16}, -{41,1,17}, -{41,1,18}, -{41,1,19}, -{41,1,20}, -{41,1,21}, -{41,1,22}, -{41,1,23}, -{41,1,24}, -{41,1,25}, -{41,1,26}, -{41,1,27}, -{41,1,28}, -{41,1,29}, -{41,1,30}, -{41,1,31}, -{41,1,32}, -{41,1,33}, -{41,1,34}, -{41,1,35}, -{41,1,36}, -{41,1,37}, -{41,1,38}, -{41,1,39}, -{41,1,40}, -{41,1,41}, -{41,1,42}, -{41,1,43}, -{41,1,44}, -{41,1,45}, -{41,1,46}, -{41,1,47}, -{41,1,48}, -{41,2,-43}, -{41,2,-42}, -{41,2,-41}, -{41,2,-40}, -{41,2,-39}, -{41,2,-38}, -{41,2,-37}, -{41,2,-36}, -{41,2,-35}, -{41,2,-34}, -{41,2,-33}, -{41,2,-32}, -{41,2,-31}, -{41,2,-30}, -{41,2,-29}, -{41,2,-28}, -{41,2,-27}, -{41,2,-26}, -{41,2,-25}, -{41,2,-24}, -{41,2,-23}, -{41,2,-22}, -{41,2,-21}, -{41,2,-20}, -{41,2,-19}, -{41,2,-18}, -{41,2,-17}, -{41,2,-16}, -{41,2,-15}, -{41,2,-14}, -{41,2,-13}, -{41,2,-12}, -{41,2,-11}, -{41,2,-10}, -{41,2,-9}, -{41,2,-8}, -{41,2,-7}, -{41,2,-6}, -{41,2,-5}, -{41,2,-4}, -{41,2,-3}, -{41,2,-2}, -{41,2,-1}, -{41,2,0}, -{41,2,1}, -{41,2,2}, -{41,2,3}, -{41,2,4}, -{41,2,5}, -{41,2,6}, -{41,2,7}, -{41,2,8}, -{41,2,9}, -{41,2,10}, -{41,2,11}, -{41,2,12}, -{41,2,13}, -{41,2,14}, -{41,2,15}, -{41,2,16}, -{41,2,17}, -{41,2,18}, -{41,2,19}, -{41,2,20}, -{41,2,21}, -{41,2,22}, -{41,2,23}, -{41,2,24}, -{41,2,25}, -{41,2,26}, -{41,2,27}, -{41,2,28}, -{41,2,29}, -{41,2,30}, -{41,2,31}, -{41,2,32}, -{41,2,33}, -{41,2,34}, -{41,2,35}, -{41,2,36}, -{41,2,37}, -{41,2,38}, -{41,2,39}, -{41,2,40}, -{41,2,41}, -{41,2,42}, -{41,2,43}, -{41,2,44}, -{41,2,45}, -{41,2,46}, -{41,2,47}, -{41,2,48}, -{41,3,-44}, -{41,3,-43}, -{41,3,-42}, -{41,3,-41}, -{41,3,-40}, -{41,3,-39}, -{41,3,-38}, -{41,3,-37}, -{41,3,-36}, -{41,3,-35}, -{41,3,-34}, -{41,3,-33}, -{41,3,-32}, -{41,3,-31}, -{41,3,-30}, -{41,3,-29}, -{41,3,-28}, -{41,3,-27}, -{41,3,-26}, -{41,3,-25}, -{41,3,-24}, -{41,3,-23}, -{41,3,-22}, -{41,3,-21}, -{41,3,-20}, -{41,3,-19}, -{41,3,-18}, -{41,3,-17}, -{41,3,-16}, -{41,3,-15}, -{41,3,-14}, -{41,3,-13}, -{41,3,-12}, -{41,3,-11}, -{41,3,-10}, -{41,3,-9}, -{41,3,-8}, -{41,3,-7}, -{41,3,-6}, -{41,3,-5}, -{41,3,-4}, -{41,3,-3}, -{41,3,-2}, -{41,3,-1}, -{41,3,0}, -{41,3,1}, -{41,3,2}, -{41,3,3}, -{41,3,4}, -{41,3,5}, -{41,3,6}, -{41,3,7}, -{41,3,8}, -{41,3,9}, -{41,3,10}, -{41,3,11}, -{41,3,12}, -{41,3,13}, -{41,3,14}, -{41,3,15}, -{41,3,16}, -{41,3,17}, -{41,3,18}, -{41,3,19}, -{41,3,20}, -{41,3,21}, -{41,3,22}, -{41,3,23}, -{41,3,24}, -{41,3,25}, -{41,3,26}, -{41,3,27}, -{41,3,28}, -{41,3,29}, -{41,3,30}, -{41,3,31}, -{41,3,32}, -{41,3,33}, -{41,3,34}, -{41,3,35}, -{41,3,36}, -{41,3,37}, -{41,3,38}, -{41,3,39}, -{41,3,40}, -{41,3,41}, -{41,3,42}, -{41,3,43}, -{41,3,44}, -{41,3,45}, -{41,3,46}, -{41,3,47}, -{41,3,48}, -{41,4,-45}, -{41,4,-44}, -{41,4,-43}, -{41,4,-42}, -{41,4,-41}, -{41,4,-40}, -{41,4,-39}, -{41,4,-38}, -{41,4,-37}, -{41,4,-36}, -{41,4,-35}, -{41,4,-34}, -{41,4,-33}, -{41,4,-32}, -{41,4,-31}, -{41,4,-30}, -{41,4,-29}, -{41,4,-28}, -{41,4,-27}, -{41,4,-26}, -{41,4,-25}, -{41,4,-24}, -{41,4,-23}, -{41,4,-22}, -{41,4,-21}, -{41,4,-20}, -{41,4,-19}, -{41,4,-18}, -{41,4,-17}, -{41,4,-16}, -{41,4,-15}, -{41,4,-14}, -{41,4,-13}, -{41,4,-12}, -{41,4,-11}, -{41,4,-10}, -{41,4,-9}, -{41,4,-8}, -{41,4,-7}, -{41,4,-6}, -{41,4,-5}, -{41,4,-4}, -{41,4,-3}, -{41,4,-2}, -{41,4,-1}, -{41,4,0}, -{41,4,1}, -{41,4,2}, -{41,4,3}, -{41,4,4}, -{41,4,5}, -{41,4,6}, -{41,4,7}, -{41,4,8}, -{41,4,9}, -{41,4,10}, -{41,4,11}, -{41,4,12}, -{41,4,13}, -{41,4,14}, -{41,4,15}, -{41,4,16}, -{41,4,17}, -{41,4,18}, -{41,4,19}, -{41,4,20}, -{41,4,21}, -{41,4,22}, -{41,4,23}, -{41,4,24}, -{41,4,25}, -{41,4,26}, -{41,4,27}, -{41,4,28}, -{41,4,29}, -{41,4,30}, -{41,4,31}, -{41,4,32}, -{41,4,33}, -{41,4,34}, -{41,4,35}, -{41,4,36}, -{41,4,37}, -{41,4,38}, -{41,4,39}, -{41,4,40}, -{41,4,41}, -{41,4,42}, -{41,4,43}, -{41,4,44}, -{41,4,45}, -{41,4,46}, -{41,4,47}, -{41,4,48}, -{41,5,-46}, -{41,5,-45}, -{41,5,-44}, -{41,5,-43}, -{41,5,-42}, -{41,5,-41}, -{41,5,-40}, -{41,5,-39}, -{41,5,-38}, -{41,5,-37}, -{41,5,-36}, -{41,5,-35}, -{41,5,-34}, -{41,5,-33}, -{41,5,-32}, -{41,5,-31}, -{41,5,-30}, -{41,5,-29}, -{41,5,-28}, -{41,5,-27}, -{41,5,-26}, -{41,5,-25}, -{41,5,-24}, -{41,5,-23}, -{41,5,-22}, -{41,5,-21}, -{41,5,-20}, -{41,5,-19}, -{41,5,-18}, -{41,5,-17}, -{41,5,-16}, -{41,5,-15}, -{41,5,-14}, -{41,5,-13}, -{41,5,-12}, -{41,5,-11}, -{41,5,-10}, -{41,5,-9}, -{41,5,-8}, -{41,5,-7}, -{41,5,-6}, -{41,5,-5}, -{41,5,-4}, -{41,5,-3}, -{41,5,-2}, -{41,5,-1}, -{41,5,0}, -{41,5,1}, -{41,5,2}, -{41,5,3}, -{41,5,4}, -{41,5,5}, -{41,5,6}, -{41,5,7}, -{41,5,8}, -{41,5,9}, -{41,5,10}, -{41,5,11}, -{41,5,12}, -{41,5,13}, -{41,5,14}, -{41,5,15}, -{41,5,16}, -{41,5,17}, -{41,5,18}, -{41,5,19}, -{41,5,20}, -{41,5,21}, -{41,5,22}, -{41,5,23}, -{41,5,24}, -{41,5,25}, -{41,5,26}, -{41,5,27}, -{41,5,28}, -{41,5,29}, -{41,5,30}, -{41,5,31}, -{41,5,32}, -{41,5,33}, -{41,5,34}, -{41,5,35}, -{41,5,36}, -{41,5,37}, -{41,5,38}, -{41,5,39}, -{41,5,40}, -{41,5,41}, -{41,5,42}, -{41,5,43}, -{41,5,44}, -{41,5,45}, -{41,5,46}, -{41,5,47}, -{41,5,48}, -{41,6,-47}, -{41,6,-46}, -{41,6,-45}, -{41,6,-44}, -{41,6,-43}, -{41,6,-42}, -{41,6,-41}, -{41,6,-40}, -{41,6,-39}, -{41,6,-38}, -{41,6,-37}, -{41,6,-36}, -{41,6,-35}, -{41,6,-34}, -{41,6,-33}, -{41,6,-32}, -{41,6,-31}, -{41,6,-30}, -{41,6,-29}, -{41,6,-28}, -{41,6,-27}, -{41,6,-26}, -{41,6,-25}, -{41,6,-24}, -{41,6,-23}, -{41,6,-22}, -{41,6,-21}, -{41,6,-20}, -{41,6,-19}, -{41,6,-18}, -{41,6,-17}, -{41,6,-16}, -{41,6,-15}, -{41,6,-14}, -{41,6,-13}, -{41,6,-12}, -{41,6,-11}, -{41,6,-10}, -{41,6,-9}, -{41,6,-8}, -{41,6,-7}, -{41,6,-6}, -{41,6,-5}, -{41,6,-4}, -{41,6,-3}, -{41,6,-2}, -{41,6,-1}, -{41,6,0}, -{41,6,1}, -{41,6,2}, -{41,6,3}, -{41,6,4}, -{41,6,5}, -{41,6,6}, -{41,6,7}, -{41,6,8}, -{41,6,9}, -{41,6,10}, -{41,6,11}, -{41,6,12}, -{41,6,13}, -{41,6,14}, -{41,6,15}, -{41,6,16}, -{41,6,17}, -{41,6,18}, -{41,6,19}, -{41,6,20}, -{41,6,21}, -{41,6,22}, -{41,6,23}, -{41,6,24}, -{41,6,25}, -{41,6,26}, -{41,6,27}, -{41,6,28}, -{41,6,29}, -{41,6,30}, -{41,6,31}, -{41,6,32}, -{41,6,33}, -{41,6,34}, -{41,6,35}, -{41,6,36}, -{41,6,37}, -{41,6,38}, -{41,6,39}, -{41,6,40}, -{41,6,41}, -{41,6,42}, -{41,6,43}, -{41,6,44}, -{41,6,45}, -{41,6,46}, -{41,6,47}, -{41,6,48}, -{41,7,-48}, -{41,7,-47}, -{41,7,-46}, -{41,7,-45}, -{41,7,-44}, -{41,7,-43}, -{41,7,-42}, -{41,7,-41}, -{41,7,-40}, -{41,7,-39}, -{41,7,-38}, -{41,7,-37}, -{41,7,-36}, -{41,7,-35}, -{41,7,-34}, -{41,7,-33}, -{41,7,-32}, -{41,7,-31}, -{41,7,-30}, -{41,7,-29}, -{41,7,-28}, -{41,7,-27}, -{41,7,-26}, -{41,7,-25}, -{41,7,-24}, -{41,7,-23}, -{41,7,-22}, -{41,7,-21}, -{41,7,-20}, -{41,7,-19}, -{41,7,-18}, -{41,7,-17}, -{41,7,-16}, -{41,7,-15}, -{41,7,-14}, -{41,7,-13}, -{41,7,-12}, -{41,7,-11}, -{41,7,-10}, -{41,7,-9}, -{41,7,-8}, -{41,7,-7}, -{41,7,-6}, -{41,7,-5}, -{41,7,-4}, -{41,7,-3}, -{41,7,-2}, -{41,7,-1}, -{41,7,0}, -{41,7,1}, -{41,7,2}, -{41,7,3}, -{41,7,4}, -{41,7,5}, -{41,7,6}, -{41,7,7}, -{41,7,8}, -{41,7,9}, -{41,7,10}, -{41,7,11}, -{41,7,12}, -{41,7,13}, -{41,7,14}, -{41,7,15}, -{41,7,16}, -{41,7,17}, -{41,7,18}, -{41,7,19}, -{41,7,20}, -{41,7,21}, -{41,7,22}, -{41,7,23}, -{41,7,24}, -{41,7,25}, -{41,7,26}, -{41,7,27}, -{41,7,28}, -{41,7,29}, -{41,7,30}, -{41,7,31}, -{41,7,32}, -{41,7,33}, -{41,7,34}, -{41,7,35}, -{41,7,36}, -{41,7,37}, -{41,7,38}, -{41,7,39}, -{41,7,40}, -{41,7,41}, -{41,7,42}, -{41,7,43}, -{41,7,44}, -{41,7,45}, -{41,7,46}, -{41,7,47}, -{41,7,48}, -{41,7,49}, -{41,8,-49}, -{41,8,-48}, -{41,8,-47}, -{41,8,-46}, -{41,8,-45}, -{41,8,-44}, -{41,8,-43}, -{41,8,-42}, -{41,8,-41}, -{41,8,-40}, -{41,8,-39}, -{41,8,-38}, -{41,8,-37}, -{41,8,-36}, -{41,8,-35}, -{41,8,-34}, -{41,8,-33}, -{41,8,-32}, -{41,8,-31}, -{41,8,-30}, -{41,8,-29}, -{41,8,-28}, -{41,8,-27}, -{41,8,-26}, -{41,8,-25}, -{41,8,-24}, -{41,8,-23}, -{41,8,-22}, -{41,8,-21}, -{41,8,-20}, -{41,8,-19}, -{41,8,-18}, -{41,8,-17}, -{41,8,-16}, -{41,8,-15}, -{41,8,-14}, -{41,8,-13}, -{41,8,-12}, -{41,8,-11}, -{41,8,-10}, -{41,8,-9}, -{41,8,-8}, -{41,8,-7}, -{41,8,-6}, -{41,8,-5}, -{41,8,-4}, -{41,8,-3}, -{41,8,-2}, -{41,8,-1}, -{41,8,0}, -{41,8,1}, -{41,8,2}, -{41,8,3}, -{41,8,4}, -{41,8,5}, -{41,8,6}, -{41,8,7}, -{41,8,8}, -{41,8,9}, -{41,8,10}, -{41,8,11}, -{41,8,12}, -{41,8,13}, -{41,8,14}, -{41,8,15}, -{41,8,16}, -{41,8,17}, -{41,8,18}, -{41,8,19}, -{41,8,20}, -{41,8,21}, -{41,8,22}, -{41,8,23}, -{41,8,24}, -{41,8,25}, -{41,8,26}, -{41,8,27}, -{41,8,28}, -{41,8,29}, -{41,8,30}, -{41,8,31}, -{41,8,32}, -{41,8,33}, -{41,8,34}, -{41,8,35}, -{41,8,36}, -{41,8,37}, -{41,8,38}, -{41,8,39}, -{41,8,40}, -{41,8,41}, -{41,8,42}, -{41,8,43}, -{41,8,44}, -{41,8,45}, -{41,8,46}, -{41,8,47}, -{41,8,48}, -{41,8,49}, -{41,9,-50}, -{41,9,-49}, -{41,9,-48}, -{41,9,-47}, -{41,9,-46}, -{41,9,-45}, -{41,9,-44}, -{41,9,-43}, -{41,9,-42}, -{41,9,-41}, -{41,9,-40}, -{41,9,-39}, -{41,9,-38}, -{41,9,-37}, -{41,9,-36}, -{41,9,-35}, -{41,9,-34}, -{41,9,-33}, -{41,9,-32}, -{41,9,-31}, -{41,9,-30}, -{41,9,-29}, -{41,9,-28}, -{41,9,-27}, -{41,9,-26}, -{41,9,-25}, -{41,9,-24}, -{41,9,-23}, -{41,9,-22}, -{41,9,-21}, -{41,9,-20}, -{41,9,-19}, -{41,9,-18}, -{41,9,-17}, -{41,9,-16}, -{41,9,-15}, -{41,9,-14}, -{41,9,-13}, -{41,9,-12}, -{41,9,-11}, -{41,9,-10}, -{41,9,-9}, -{41,9,-8}, -{41,9,-7}, -{41,9,-6}, -{41,9,-5}, -{41,9,-4}, -{41,9,-3}, -{41,9,-2}, -{41,9,-1}, -{41,9,0}, -{41,9,1}, -{41,9,2}, -{41,9,3}, -{41,9,4}, -{41,9,5}, -{41,9,6}, -{41,9,7}, -{41,9,8}, -{41,9,9}, -{41,9,10}, -{41,9,11}, -{41,9,12}, -{41,9,13}, -{41,9,14}, -{41,9,15}, -{41,9,16}, -{41,9,17}, -{41,9,18}, -{41,9,19}, -{41,9,20}, -{41,9,21}, -{41,9,22}, -{41,9,23}, -{41,9,24}, -{41,9,25}, -{41,9,26}, -{41,9,27}, -{41,9,28}, -{41,9,29}, -{41,9,30}, -{41,9,31}, -{41,9,32}, -{41,9,33}, -{41,9,34}, -{41,9,35}, -{41,9,36}, -{41,9,37}, -{41,9,38}, -{41,9,39}, -{41,9,40}, -{41,9,41}, -{41,9,42}, -{41,9,43}, -{41,9,44}, -{41,9,45}, -{41,9,46}, -{41,9,47}, -{41,9,48}, -{41,9,49}, -{41,10,-52}, -{41,10,-51}, -{41,10,-50}, -{41,10,-49}, -{41,10,-48}, -{41,10,-47}, -{41,10,-46}, -{41,10,-45}, -{41,10,-44}, -{41,10,-43}, -{41,10,-42}, -{41,10,-41}, -{41,10,-40}, -{41,10,-39}, -{41,10,-38}, -{41,10,-37}, -{41,10,-36}, -{41,10,-35}, -{41,10,-34}, -{41,10,-33}, -{41,10,-32}, -{41,10,-31}, -{41,10,-30}, -{41,10,-29}, -{41,10,-28}, -{41,10,-27}, -{41,10,-26}, -{41,10,-25}, -{41,10,-24}, -{41,10,-23}, -{41,10,-22}, -{41,10,-21}, -{41,10,-20}, -{41,10,-19}, -{41,10,-18}, -{41,10,-17}, -{41,10,-16}, -{41,10,-15}, -{41,10,-14}, -{41,10,-13}, -{41,10,-12}, -{41,10,-11}, -{41,10,-10}, -{41,10,-9}, -{41,10,-8}, -{41,10,-7}, -{41,10,-6}, -{41,10,-5}, -{41,10,-4}, -{41,10,-3}, -{41,10,-2}, -{41,10,-1}, -{41,10,0}, -{41,10,1}, -{41,10,2}, -{41,10,3}, -{41,10,4}, -{41,10,5}, -{41,10,6}, -{41,10,7}, -{41,10,8}, -{41,10,9}, -{41,10,10}, -{41,10,11}, -{41,10,12}, -{41,10,13}, -{41,10,14}, -{41,10,15}, -{41,10,16}, -{41,10,17}, -{41,10,18}, -{41,10,19}, -{41,10,20}, -{41,10,21}, -{41,10,22}, -{41,10,23}, -{41,10,24}, -{41,10,25}, -{41,10,26}, -{41,10,27}, -{41,10,28}, -{41,10,29}, -{41,10,30}, -{41,10,31}, -{41,10,32}, -{41,10,33}, -{41,10,34}, -{41,10,35}, -{41,10,36}, -{41,10,37}, -{41,10,38}, -{41,10,39}, -{41,10,40}, -{41,10,41}, -{41,10,42}, -{41,10,43}, -{41,10,44}, -{41,10,45}, -{41,10,46}, -{41,10,47}, -{41,10,48}, -{41,10,49}, -{41,11,-53}, -{41,11,-52}, -{41,11,-51}, -{41,11,-50}, -{41,11,-49}, -{41,11,-48}, -{41,11,-47}, -{41,11,-46}, -{41,11,-45}, -{41,11,-44}, -{41,11,-43}, -{41,11,-42}, -{41,11,-41}, -{41,11,-40}, -{41,11,-39}, -{41,11,-38}, -{41,11,-37}, -{41,11,-36}, -{41,11,-35}, -{41,11,-34}, -{41,11,-33}, -{41,11,-32}, -{41,11,-31}, -{41,11,-30}, -{41,11,-29}, -{41,11,-28}, -{41,11,-27}, -{41,11,-26}, -{41,11,-25}, -{41,11,-24}, -{41,11,-23}, -{41,11,-22}, -{41,11,-21}, -{41,11,-20}, -{41,11,-19}, -{41,11,-18}, -{41,11,-17}, -{41,11,-16}, -{41,11,-15}, -{41,11,-14}, -{41,11,-13}, -{41,11,-12}, -{41,11,-11}, -{41,11,-10}, -{41,11,-9}, -{41,11,-8}, -{41,11,-7}, -{41,11,-6}, -{41,11,-5}, -{41,11,-4}, -{41,11,-3}, -{41,11,-2}, -{41,11,-1}, -{41,11,0}, -{41,11,1}, -{41,11,2}, -{41,11,3}, -{41,11,4}, -{41,11,5}, -{41,11,6}, -{41,11,7}, -{41,11,8}, -{41,11,9}, -{41,11,10}, -{41,11,11}, -{41,11,12}, -{41,11,13}, -{41,11,14}, -{41,11,15}, -{41,11,16}, -{41,11,17}, -{41,11,18}, -{41,11,19}, -{41,11,20}, -{41,11,21}, -{41,11,22}, -{41,11,23}, -{41,11,24}, -{41,11,25}, -{41,11,26}, -{41,11,27}, -{41,11,28}, -{41,11,29}, -{41,11,30}, -{41,11,31}, -{41,11,32}, -{41,11,33}, -{41,11,34}, -{41,11,35}, -{41,11,36}, -{41,11,37}, -{41,11,38}, -{41,11,39}, -{41,11,40}, -{41,11,41}, -{41,11,42}, -{41,11,43}, -{41,11,44}, -{41,11,45}, -{41,11,46}, -{41,11,47}, -{41,11,48}, -{41,11,49}, -{41,12,-54}, -{41,12,-53}, -{41,12,-52}, -{41,12,-51}, -{41,12,-50}, -{41,12,-49}, -{41,12,-48}, -{41,12,-47}, -{41,12,-46}, -{41,12,-45}, -{41,12,-44}, -{41,12,-43}, -{41,12,-42}, -{41,12,-41}, -{41,12,-40}, -{41,12,-39}, -{41,12,-38}, -{41,12,-37}, -{41,12,-36}, -{41,12,-35}, -{41,12,-34}, -{41,12,-33}, -{41,12,-32}, -{41,12,-31}, -{41,12,-30}, -{41,12,-29}, -{41,12,-28}, -{41,12,-27}, -{41,12,-26}, -{41,12,-25}, -{41,12,-24}, -{41,12,-23}, -{41,12,-22}, -{41,12,-21}, -{41,12,-20}, -{41,12,-19}, -{41,12,-18}, -{41,12,-17}, -{41,12,-16}, -{41,12,-15}, -{41,12,-14}, -{41,12,-13}, -{41,12,-12}, -{41,12,-11}, -{41,12,-10}, -{41,12,-9}, -{41,12,-8}, -{41,12,-7}, -{41,12,-6}, -{41,12,-5}, -{41,12,-4}, -{41,12,-3}, -{41,12,-2}, -{41,12,-1}, -{41,12,0}, -{41,12,1}, -{41,12,2}, -{41,12,3}, -{41,12,4}, -{41,12,5}, -{41,12,6}, -{41,12,7}, -{41,12,8}, -{41,12,9}, -{41,12,10}, -{41,12,11}, -{41,12,12}, -{41,12,13}, -{41,12,14}, -{41,12,15}, -{41,12,16}, -{41,12,17}, -{41,12,18}, -{41,12,19}, -{41,12,20}, -{41,12,21}, -{41,12,22}, -{41,12,23}, -{41,12,24}, -{41,12,25}, -{41,12,26}, -{41,12,27}, -{41,12,28}, -{41,12,29}, -{41,12,30}, -{41,12,31}, -{41,12,32}, -{41,12,33}, -{41,12,34}, -{41,12,35}, -{41,12,36}, -{41,12,37}, -{41,12,38}, -{41,12,39}, -{41,12,40}, -{41,12,41}, -{41,12,42}, -{41,12,43}, -{41,12,44}, -{41,12,45}, -{41,12,46}, -{41,12,47}, -{41,12,48}, -{41,12,49}, -{41,13,-55}, -{41,13,-54}, -{41,13,-53}, -{41,13,-52}, -{41,13,-51}, -{41,13,-50}, -{41,13,-49}, -{41,13,-48}, -{41,13,-47}, -{41,13,-46}, -{41,13,-45}, -{41,13,-44}, -{41,13,-43}, -{41,13,-42}, -{41,13,-41}, -{41,13,-40}, -{41,13,-39}, -{41,13,-38}, -{41,13,-37}, -{41,13,-36}, -{41,13,-35}, -{41,13,-34}, -{41,13,-33}, -{41,13,-32}, -{41,13,-31}, -{41,13,-30}, -{41,13,-29}, -{41,13,-28}, -{41,13,-27}, -{41,13,-26}, -{41,13,-25}, -{41,13,-24}, -{41,13,-23}, -{41,13,-22}, -{41,13,-21}, -{41,13,-20}, -{41,13,-19}, -{41,13,-18}, -{41,13,-17}, -{41,13,-16}, -{41,13,-15}, -{41,13,-14}, -{41,13,-13}, -{41,13,-12}, -{41,13,-11}, -{41,13,-10}, -{41,13,-9}, -{41,13,-8}, -{41,13,-7}, -{41,13,-6}, -{41,13,-5}, -{41,13,-4}, -{41,13,-3}, -{41,13,-2}, -{41,13,-1}, -{41,13,0}, -{41,13,1}, -{41,13,2}, -{41,13,3}, -{41,13,4}, -{41,13,5}, -{41,13,6}, -{41,13,7}, -{41,13,8}, -{41,13,9}, -{41,13,10}, -{41,13,11}, -{41,13,12}, -{41,13,13}, -{41,13,14}, -{41,13,15}, -{41,13,16}, -{41,13,17}, -{41,13,18}, -{41,13,19}, -{41,13,20}, -{41,13,21}, -{41,13,22}, -{41,13,23}, -{41,13,24}, -{41,13,25}, -{41,13,26}, -{41,13,27}, -{41,13,28}, -{41,13,29}, -{41,13,30}, -{41,13,31}, -{41,13,32}, -{41,13,33}, -{41,13,34}, -{41,13,35}, -{41,13,36}, -{41,13,37}, -{41,13,38}, -{41,13,39}, -{41,13,40}, -{41,13,41}, -{41,13,42}, -{41,13,43}, -{41,13,44}, -{41,13,45}, -{41,13,46}, -{41,13,47}, -{41,13,48}, -{41,13,49}, -{41,14,-56}, -{41,14,-55}, -{41,14,-54}, -{41,14,-53}, -{41,14,-52}, -{41,14,-51}, -{41,14,-50}, -{41,14,-49}, -{41,14,-48}, -{41,14,-47}, -{41,14,-46}, -{41,14,-45}, -{41,14,-44}, -{41,14,-43}, -{41,14,-42}, -{41,14,-41}, -{41,14,-40}, -{41,14,-39}, -{41,14,-38}, -{41,14,-37}, -{41,14,-36}, -{41,14,-35}, -{41,14,-34}, -{41,14,-33}, -{41,14,-32}, -{41,14,-31}, -{41,14,-30}, -{41,14,-29}, -{41,14,-28}, -{41,14,-27}, -{41,14,-26}, -{41,14,-25}, -{41,14,-24}, -{41,14,-23}, -{41,14,-22}, -{41,14,-21}, -{41,14,-20}, -{41,14,-19}, -{41,14,-18}, -{41,14,-17}, -{41,14,-16}, -{41,14,-15}, -{41,14,-14}, -{41,14,-13}, -{41,14,-12}, -{41,14,-11}, -{41,14,-10}, -{41,14,-9}, -{41,14,-8}, -{41,14,-7}, -{41,14,-6}, -{41,14,-5}, -{41,14,-4}, -{41,14,-3}, -{41,14,-2}, -{41,14,-1}, -{41,14,0}, -{41,14,1}, -{41,14,2}, -{41,14,3}, -{41,14,4}, -{41,14,5}, -{41,14,6}, -{41,14,7}, -{41,14,8}, -{41,14,9}, -{41,14,10}, -{41,14,11}, -{41,14,12}, -{41,14,13}, -{41,14,14}, -{41,14,15}, -{41,14,16}, -{41,14,17}, -{41,14,18}, -{41,14,19}, -{41,14,20}, -{41,14,21}, -{41,14,22}, -{41,14,23}, -{41,14,24}, -{41,14,25}, -{41,14,26}, -{41,14,27}, -{41,14,28}, -{41,14,29}, -{41,14,30}, -{41,14,31}, -{41,14,32}, -{41,14,33}, -{41,14,34}, -{41,14,35}, -{41,14,36}, -{41,14,37}, -{41,14,38}, -{41,14,39}, -{41,14,40}, -{41,14,41}, -{41,14,42}, -{41,14,43}, -{41,14,44}, -{41,14,45}, -{41,14,46}, -{41,14,47}, -{41,14,48}, -{41,14,49}, -{41,15,-57}, -{41,15,-56}, -{41,15,-55}, -{41,15,-54}, -{41,15,-53}, -{41,15,-52}, -{41,15,-51}, -{41,15,-50}, -{41,15,-49}, -{41,15,-48}, -{41,15,-47}, -{41,15,-46}, -{41,15,-45}, -{41,15,-44}, -{41,15,-43}, -{41,15,-42}, -{41,15,-41}, -{41,15,-40}, -{41,15,-39}, -{41,15,-38}, -{41,15,-37}, -{41,15,-36}, -{41,15,-35}, -{41,15,-34}, -{41,15,-33}, -{41,15,-32}, -{41,15,-31}, -{41,15,-30}, -{41,15,-29}, -{41,15,-28}, -{41,15,-27}, -{41,15,-26}, -{41,15,-25}, -{41,15,-24}, -{41,15,-23}, -{41,15,-22}, -{41,15,-21}, -{41,15,-20}, -{41,15,-19}, -{41,15,-18}, -{41,15,-17}, -{41,15,-16}, -{41,15,-15}, -{41,15,-14}, -{41,15,-13}, -{41,15,-12}, -{41,15,-11}, -{41,15,-10}, -{41,15,-9}, -{41,15,-8}, -{41,15,-7}, -{41,15,-6}, -{41,15,-5}, -{41,15,-4}, -{41,15,-3}, -{41,15,-2}, -{41,15,-1}, -{41,15,0}, -{41,15,1}, -{41,15,2}, -{41,15,3}, -{41,15,4}, -{41,15,5}, -{41,15,6}, -{41,15,7}, -{41,15,8}, -{41,15,9}, -{41,15,10}, -{41,15,11}, -{41,15,12}, -{41,15,13}, -{41,15,14}, -{41,15,15}, -{41,15,16}, -{41,15,17}, -{41,15,18}, -{41,15,19}, -{41,15,20}, -{41,15,21}, -{41,15,22}, -{41,15,23}, -{41,15,24}, -{41,15,25}, -{41,15,26}, -{41,15,27}, -{41,15,28}, -{41,15,29}, -{41,15,30}, -{41,15,31}, -{41,15,32}, -{41,15,33}, -{41,15,34}, -{41,15,35}, -{41,15,36}, -{41,15,37}, -{41,15,38}, -{41,15,39}, -{41,15,40}, -{41,15,41}, -{41,15,42}, -{41,15,43}, -{41,15,44}, -{41,15,45}, -{41,15,46}, -{41,15,47}, -{41,15,48}, -{41,15,49}, -{41,16,-58}, -{41,16,-57}, -{41,16,-56}, -{41,16,-55}, -{41,16,-54}, -{41,16,-53}, -{41,16,-52}, -{41,16,-51}, -{41,16,-50}, -{41,16,-49}, -{41,16,-48}, -{41,16,-47}, -{41,16,-46}, -{41,16,-45}, -{41,16,-44}, -{41,16,-43}, -{41,16,-42}, -{41,16,-41}, -{41,16,-40}, -{41,16,-39}, -{41,16,-38}, -{41,16,-37}, -{41,16,-36}, -{41,16,-35}, -{41,16,-34}, -{41,16,-33}, -{41,16,-32}, -{41,16,-31}, -{41,16,-30}, -{41,16,-29}, -{41,16,-28}, -{41,16,-27}, -{41,16,-26}, -{41,16,-25}, -{41,16,-24}, -{41,16,-23}, -{41,16,-22}, -{41,16,-21}, -{41,16,-20}, -{41,16,-19}, -{41,16,-18}, -{41,16,-17}, -{41,16,-16}, -{41,16,-15}, -{41,16,-14}, -{41,16,-13}, -{41,16,-12}, -{41,16,-11}, -{41,16,-10}, -{41,16,-9}, -{41,16,-8}, -{41,16,-7}, -{41,16,-6}, -{41,16,-5}, -{41,16,-4}, -{41,16,-3}, -{41,16,-2}, -{41,16,-1}, -{41,16,0}, -{41,16,1}, -{41,16,2}, -{41,16,3}, -{41,16,4}, -{41,16,5}, -{41,16,6}, -{41,16,7}, -{41,16,8}, -{41,16,9}, -{41,16,10}, -{41,16,11}, -{41,16,12}, -{41,16,13}, -{41,16,14}, -{41,16,15}, -{41,16,16}, -{41,16,17}, -{41,16,18}, -{41,16,19}, -{41,16,20}, -{41,16,21}, -{41,16,22}, -{41,16,23}, -{41,16,24}, -{41,16,25}, -{41,16,26}, -{41,16,27}, -{41,16,28}, -{41,16,29}, -{41,16,30}, -{41,16,31}, -{41,16,32}, -{41,16,33}, -{41,16,34}, -{41,16,35}, -{41,16,36}, -{41,16,37}, -{41,16,38}, -{41,16,39}, -{41,16,40}, -{41,16,41}, -{41,16,42}, -{41,16,43}, -{41,16,44}, -{41,16,45}, -{41,16,46}, -{41,16,47}, -{41,16,48}, -{41,16,49}, -{41,17,-59}, -{41,17,-58}, -{41,17,-57}, -{41,17,-56}, -{41,17,-55}, -{41,17,-54}, -{41,17,-53}, -{41,17,-52}, -{41,17,-51}, -{41,17,-50}, -{41,17,-49}, -{41,17,-48}, -{41,17,-47}, -{41,17,-46}, -{41,17,-45}, -{41,17,-44}, -{41,17,-43}, -{41,17,-42}, -{41,17,-41}, -{41,17,-40}, -{41,17,-39}, -{41,17,-38}, -{41,17,-37}, -{41,17,-36}, -{41,17,-35}, -{41,17,-34}, -{41,17,-33}, -{41,17,-32}, -{41,17,-31}, -{41,17,-30}, -{41,17,-29}, -{41,17,-28}, -{41,17,-27}, -{41,17,-26}, -{41,17,-25}, -{41,17,-24}, -{41,17,-23}, -{41,17,-22}, -{41,17,-21}, -{41,17,-20}, -{41,17,-19}, -{41,17,-18}, -{41,17,-17}, -{41,17,-16}, -{41,17,-15}, -{41,17,-14}, -{41,17,-13}, -{41,17,-12}, -{41,17,-11}, -{41,17,-10}, -{41,17,-9}, -{41,17,-8}, -{41,17,-7}, -{41,17,-6}, -{41,17,-5}, -{41,17,-4}, -{41,17,-3}, -{41,17,-2}, -{41,17,-1}, -{41,17,0}, -{41,17,1}, -{41,17,2}, -{41,17,3}, -{41,17,4}, -{41,17,5}, -{41,17,6}, -{41,17,7}, -{41,17,8}, -{41,17,9}, -{41,17,10}, -{41,17,11}, -{41,17,12}, -{41,17,13}, -{41,17,14}, -{41,17,15}, -{41,17,16}, -{41,17,17}, -{41,17,18}, -{41,17,19}, -{41,17,20}, -{41,17,21}, -{41,17,22}, -{41,17,23}, -{41,17,24}, -{41,17,25}, -{41,17,26}, -{41,17,27}, -{41,17,28}, -{41,17,29}, -{41,17,30}, -{41,17,31}, -{41,17,32}, -{41,17,33}, -{41,17,34}, -{41,17,35}, -{41,17,36}, -{41,17,37}, -{41,17,38}, -{41,17,39}, -{41,17,40}, -{41,17,41}, -{41,17,42}, -{41,17,43}, -{41,17,44}, -{41,17,45}, -{41,17,46}, -{41,17,47}, -{41,17,48}, -{41,17,49}, -{41,18,-60}, -{41,18,-59}, -{41,18,-58}, -{41,18,-57}, -{41,18,-56}, -{41,18,-55}, -{41,18,-54}, -{41,18,-53}, -{41,18,-52}, -{41,18,-51}, -{41,18,-50}, -{41,18,-49}, -{41,18,-48}, -{41,18,-47}, -{41,18,-46}, -{41,18,-45}, -{41,18,-44}, -{41,18,-43}, -{41,18,-42}, -{41,18,-41}, -{41,18,-40}, -{41,18,-39}, -{41,18,-38}, -{41,18,-37}, -{41,18,-36}, -{41,18,-35}, -{41,18,-34}, -{41,18,-33}, -{41,18,-32}, -{41,18,-31}, -{41,18,-30}, -{41,18,-29}, -{41,18,-28}, -{41,18,-27}, -{41,18,-26}, -{41,18,-25}, -{41,18,-24}, -{41,18,-23}, -{41,18,-22}, -{41,18,-21}, -{41,18,-20}, -{41,18,-19}, -{41,18,-18}, -{41,18,-17}, -{41,18,-16}, -{41,18,-15}, -{41,18,-14}, -{41,18,-13}, -{41,18,-12}, -{41,18,-11}, -{41,18,-10}, -{41,18,-9}, -{41,18,-8}, -{41,18,-7}, -{41,18,-6}, -{41,18,-5}, -{41,18,-4}, -{41,18,-3}, -{41,18,-2}, -{41,18,-1}, -{41,18,0}, -{41,18,1}, -{41,18,2}, -{41,18,3}, -{41,18,4}, -{41,18,5}, -{41,18,6}, -{41,18,7}, -{41,18,8}, -{41,18,9}, -{41,18,10}, -{41,18,11}, -{41,18,12}, -{41,18,13}, -{41,18,14}, -{41,18,15}, -{41,18,16}, -{41,18,17}, -{41,18,18}, -{41,18,19}, -{41,18,20}, -{41,18,21}, -{41,18,22}, -{41,18,23}, -{41,18,24}, -{41,18,25}, -{41,18,26}, -{41,18,27}, -{41,18,28}, -{41,18,29}, -{41,18,30}, -{41,18,31}, -{41,18,32}, -{41,18,33}, -{41,18,34}, -{41,18,35}, -{41,18,36}, -{41,18,37}, -{41,18,38}, -{41,18,39}, -{41,18,40}, -{41,18,41}, -{41,18,42}, -{41,18,43}, -{41,18,44}, -{41,18,45}, -{41,18,46}, -{41,18,47}, -{41,18,48}, -{41,18,49}, -{41,19,-61}, -{41,19,-60}, -{41,19,-59}, -{41,19,-58}, -{41,19,-57}, -{41,19,-56}, -{41,19,-55}, -{41,19,-54}, -{41,19,-53}, -{41,19,-52}, -{41,19,-51}, -{41,19,-50}, -{41,19,-49}, -{41,19,-48}, -{41,19,-47}, -{41,19,-46}, -{41,19,-45}, -{41,19,-44}, -{41,19,-43}, -{41,19,-42}, -{41,19,-41}, -{41,19,-40}, -{41,19,-39}, -{41,19,-38}, -{41,19,-37}, -{41,19,-36}, -{41,19,-35}, -{41,19,-34}, -{41,19,-33}, -{41,19,-32}, -{41,19,-31}, -{41,19,-30}, -{41,19,-29}, -{41,19,-28}, -{41,19,-27}, -{41,19,-26}, -{41,19,-25}, -{41,19,-24}, -{41,19,-23}, -{41,19,-22}, -{41,19,-21}, -{41,19,-20}, -{41,19,-19}, -{41,19,-18}, -{41,19,-17}, -{41,19,-16}, -{41,19,-15}, -{41,19,-14}, -{41,19,-13}, -{41,19,-12}, -{41,19,-11}, -{41,19,-10}, -{41,19,-9}, -{41,19,-8}, -{41,19,-7}, -{41,19,-6}, -{41,19,-5}, -{41,19,-4}, -{41,19,-3}, -{41,19,-2}, -{41,19,-1}, -{41,19,0}, -{41,19,1}, -{41,19,2}, -{41,19,3}, -{41,19,4}, -{41,19,5}, -{41,19,6}, -{41,19,7}, -{41,19,8}, -{41,19,9}, -{41,19,10}, -{41,19,11}, -{41,19,12}, -{41,19,13}, -{41,19,14}, -{41,19,15}, -{41,19,16}, -{41,19,17}, -{41,19,18}, -{41,19,19}, -{41,19,20}, -{41,19,21}, -{41,19,22}, -{41,19,23}, -{41,19,24}, -{41,19,25}, -{41,19,26}, -{41,19,27}, -{41,19,28}, -{41,19,29}, -{41,19,30}, -{41,19,31}, -{41,19,32}, -{41,19,33}, -{41,19,34}, -{41,19,35}, -{41,19,36}, -{41,19,37}, -{41,19,38}, -{41,19,39}, -{41,19,40}, -{41,19,41}, -{41,19,42}, -{41,19,43}, -{41,19,44}, -{41,19,45}, -{41,19,46}, -{41,19,47}, -{41,19,48}, -{41,19,49}, -{41,19,50}, -{41,20,-62}, -{41,20,-61}, -{41,20,-60}, -{41,20,-59}, -{41,20,-58}, -{41,20,-57}, -{41,20,-56}, -{41,20,-55}, -{41,20,-54}, -{41,20,-53}, -{41,20,-52}, -{41,20,-51}, -{41,20,-50}, -{41,20,-49}, -{41,20,-48}, -{41,20,-47}, -{41,20,-46}, -{41,20,-45}, -{41,20,-44}, -{41,20,-43}, -{41,20,-42}, -{41,20,-41}, -{41,20,-40}, -{41,20,-39}, -{41,20,-38}, -{41,20,-37}, -{41,20,-36}, -{41,20,-35}, -{41,20,-34}, -{41,20,-33}, -{41,20,-32}, -{41,20,-31}, -{41,20,-30}, -{41,20,-29}, -{41,20,-28}, -{41,20,-27}, -{41,20,-26}, -{41,20,-25}, -{41,20,-24}, -{41,20,-23}, -{41,20,-22}, -{41,20,-21}, -{41,20,-20}, -{41,20,-19}, -{41,20,-18}, -{41,20,-17}, -{41,20,-16}, -{41,20,-15}, -{41,20,-14}, -{41,20,-13}, -{41,20,-12}, -{41,20,-11}, -{41,20,-10}, -{41,20,-9}, -{41,20,-8}, -{41,20,-7}, -{41,20,-6}, -{41,20,-5}, -{41,20,-4}, -{41,20,-3}, -{41,20,-2}, -{41,20,-1}, -{41,20,0}, -{41,20,1}, -{41,20,2}, -{41,20,3}, -{41,20,4}, -{41,20,5}, -{41,20,6}, -{41,20,7}, -{41,20,8}, -{41,20,9}, -{41,20,10}, -{41,20,11}, -{41,20,12}, -{41,20,13}, -{41,20,14}, -{41,20,15}, -{41,20,16}, -{41,20,17}, -{41,20,18}, -{41,20,19}, -{41,20,20}, -{41,20,21}, -{41,20,22}, -{41,20,23}, -{41,20,24}, -{41,20,25}, -{41,20,26}, -{41,20,27}, -{41,20,28}, -{41,20,29}, -{41,20,30}, -{41,20,31}, -{41,20,32}, -{41,20,33}, -{41,20,34}, -{41,20,35}, -{41,20,36}, -{41,20,37}, -{41,20,38}, -{41,20,39}, -{41,20,40}, -{41,20,41}, -{41,20,42}, -{41,20,43}, -{41,20,44}, -{41,20,45}, -{41,20,46}, -{41,20,47}, -{41,20,48}, -{41,20,49}, -{41,20,50}, -{41,21,-63}, -{41,21,-62}, -{41,21,-61}, -{41,21,-60}, -{41,21,-59}, -{41,21,-58}, -{41,21,-57}, -{41,21,-56}, -{41,21,-55}, -{41,21,-54}, -{41,21,-53}, -{41,21,-52}, -{41,21,-51}, -{41,21,-50}, -{41,21,-49}, -{41,21,-48}, -{41,21,-47}, -{41,21,-46}, -{41,21,-45}, -{41,21,-44}, -{41,21,-43}, -{41,21,-42}, -{41,21,-41}, -{41,21,-40}, -{41,21,-39}, -{41,21,-38}, -{41,21,-37}, -{41,21,-36}, -{41,21,-35}, -{41,21,-34}, -{41,21,-33}, -{41,21,-32}, -{41,21,-31}, -{41,21,-30}, -{41,21,-29}, -{41,21,-28}, -{41,21,-27}, -{41,21,-26}, -{41,21,-25}, -{41,21,-24}, -{41,21,-23}, -{41,21,-22}, -{41,21,-21}, -{41,21,-20}, -{41,21,-19}, -{41,21,-18}, -{41,21,-17}, -{41,21,-16}, -{41,21,-15}, -{41,21,-14}, -{41,21,-13}, -{41,21,-12}, -{41,21,-11}, -{41,21,-10}, -{41,21,-9}, -{41,21,-8}, -{41,21,-7}, -{41,21,-6}, -{41,21,-5}, -{41,21,-4}, -{41,21,-3}, -{41,21,-2}, -{41,21,-1}, -{41,21,0}, -{41,21,1}, -{41,21,2}, -{41,21,3}, -{41,21,4}, -{41,21,5}, -{41,21,6}, -{41,21,7}, -{41,21,8}, -{41,21,9}, -{41,21,10}, -{41,21,11}, -{41,21,12}, -{41,21,13}, -{41,21,14}, -{41,21,15}, -{41,21,16}, -{41,21,17}, -{41,21,18}, -{41,21,19}, -{41,21,20}, -{41,21,21}, -{41,21,22}, -{41,21,23}, -{41,21,24}, -{41,21,25}, -{41,21,26}, -{41,21,27}, -{41,21,28}, -{41,21,29}, -{41,21,30}, -{41,21,31}, -{41,21,32}, -{41,21,33}, -{41,21,34}, -{41,21,35}, -{41,21,36}, -{41,21,37}, -{41,21,38}, -{41,21,39}, -{41,21,40}, -{41,21,41}, -{41,21,42}, -{41,21,43}, -{41,21,44}, -{41,21,45}, -{41,21,46}, -{41,21,47}, -{41,21,48}, -{41,21,49}, -{41,21,50}, -{41,22,-64}, -{41,22,-63}, -{41,22,-62}, -{41,22,-61}, -{41,22,-60}, -{41,22,-59}, -{41,22,-58}, -{41,22,-57}, -{41,22,-56}, -{41,22,-55}, -{41,22,-54}, -{41,22,-53}, -{41,22,-52}, -{41,22,-51}, -{41,22,-50}, -{41,22,-49}, -{41,22,-48}, -{41,22,-47}, -{41,22,-46}, -{41,22,-45}, -{41,22,-44}, -{41,22,-43}, -{41,22,-42}, -{41,22,-41}, -{41,22,-40}, -{41,22,-39}, -{41,22,-38}, -{41,22,-37}, -{41,22,-36}, -{41,22,-35}, -{41,22,-34}, -{41,22,-33}, -{41,22,-32}, -{41,22,-31}, -{41,22,-30}, -{41,22,-29}, -{41,22,-28}, -{41,22,-27}, -{41,22,-26}, -{41,22,-25}, -{41,22,-24}, -{41,22,-23}, -{41,22,-22}, -{41,22,-21}, -{41,22,-20}, -{41,22,-19}, -{41,22,-18}, -{41,22,-17}, -{41,22,-16}, -{41,22,-15}, -{41,22,-14}, -{41,22,-13}, -{41,22,-12}, -{41,22,-11}, -{41,22,-10}, -{41,22,-9}, -{41,22,-8}, -{41,22,-7}, -{41,22,-6}, -{41,22,-5}, -{41,22,-4}, -{41,22,-3}, -{41,22,-2}, -{41,22,-1}, -{41,22,0}, -{41,22,1}, -{41,22,2}, -{41,22,3}, -{41,22,4}, -{41,22,5}, -{41,22,6}, -{41,22,7}, -{41,22,8}, -{41,22,9}, -{41,22,10}, -{41,22,11}, -{41,22,12}, -{41,22,13}, -{41,22,14}, -{41,22,15}, -{41,22,16}, -{41,22,17}, -{41,22,18}, -{41,22,19}, -{41,22,20}, -{41,22,21}, -{41,22,22}, -{41,22,23}, -{41,22,24}, -{41,22,25}, -{41,22,26}, -{41,22,27}, -{41,22,28}, -{41,22,29}, -{41,22,30}, -{41,22,31}, -{41,22,32}, -{41,22,33}, -{41,22,34}, -{41,22,35}, -{41,22,36}, -{41,22,37}, -{41,22,38}, -{41,22,39}, -{41,22,40}, -{41,22,41}, -{41,22,42}, -{41,22,43}, -{41,22,44}, -{41,22,45}, -{41,22,46}, -{41,22,47}, -{41,22,48}, -{41,22,49}, -{41,22,50}, -{41,23,-65}, -{41,23,-64}, -{41,23,-63}, -{41,23,-62}, -{41,23,-61}, -{41,23,-60}, -{41,23,-59}, -{41,23,-58}, -{41,23,-57}, -{41,23,-56}, -{41,23,-55}, -{41,23,-54}, -{41,23,-53}, -{41,23,-52}, -{41,23,-51}, -{41,23,-50}, -{41,23,-49}, -{41,23,-48}, -{41,23,-47}, -{41,23,-46}, -{41,23,-45}, -{41,23,-44}, -{41,23,-43}, -{41,23,-42}, -{41,23,-41}, -{41,23,-40}, -{41,23,-39}, -{41,23,-38}, -{41,23,-37}, -{41,23,-36}, -{41,23,-35}, -{41,23,-34}, -{41,23,-33}, -{41,23,-32}, -{41,23,-31}, -{41,23,-30}, -{41,23,-29}, -{41,23,-28}, -{41,23,-27}, -{41,23,-26}, -{41,23,-25}, -{41,23,-24}, -{41,23,-23}, -{41,23,-22}, -{41,23,-21}, -{41,23,-20}, -{41,23,-19}, -{41,23,-18}, -{41,23,-17}, -{41,23,-16}, -{41,23,-15}, -{41,23,-14}, -{41,23,-13}, -{41,23,-12}, -{41,23,-11}, -{41,23,-10}, -{41,23,-9}, -{41,23,-8}, -{41,23,-7}, -{41,23,-6}, -{41,23,-5}, -{41,23,-4}, -{41,23,-3}, -{41,23,-2}, -{41,23,-1}, -{41,23,0}, -{41,23,1}, -{41,23,2}, -{41,23,3}, -{41,23,4}, -{41,23,5}, -{41,23,6}, -{41,23,7}, -{41,23,8}, -{41,23,9}, -{41,23,10}, -{41,23,11}, -{41,23,12}, -{41,23,13}, -{41,23,14}, -{41,23,15}, -{41,23,16}, -{41,23,17}, -{41,23,18}, -{41,23,19}, -{41,23,20}, -{41,23,21}, -{41,23,22}, -{41,23,23}, -{41,23,24}, -{41,23,25}, -{41,23,26}, -{41,23,27}, -{41,23,28}, -{41,23,29}, -{41,23,30}, -{41,23,31}, -{41,23,32}, -{41,23,33}, -{41,23,34}, -{41,23,35}, -{41,23,36}, -{41,23,37}, -{41,23,38}, -{41,23,39}, -{41,23,40}, -{41,23,41}, -{41,23,42}, -{41,23,43}, -{41,23,44}, -{41,23,45}, -{41,23,46}, -{41,23,47}, -{41,23,48}, -{41,23,49}, -{41,23,50}, -{41,24,-66}, -{41,24,-65}, -{41,24,-64}, -{41,24,-63}, -{41,24,-62}, -{41,24,-61}, -{41,24,-60}, -{41,24,-59}, -{41,24,-58}, -{41,24,-57}, -{41,24,-56}, -{41,24,-55}, -{41,24,-54}, -{41,24,-53}, -{41,24,-52}, -{41,24,-51}, -{41,24,-50}, -{41,24,-49}, -{41,24,-48}, -{41,24,-47}, -{41,24,-46}, -{41,24,-45}, -{41,24,-44}, -{41,24,-43}, -{41,24,-42}, -{41,24,-41}, -{41,24,-40}, -{41,24,-39}, -{41,24,-38}, -{41,24,-37}, -{41,24,-36}, -{41,24,-35}, -{41,24,-34}, -{41,24,-33}, -{41,24,-32}, -{41,24,-31}, -{41,24,-30}, -{41,24,-29}, -{41,24,-28}, -{41,24,-27}, -{41,24,-26}, -{41,24,-25}, -{41,24,-24}, -{41,24,-23}, -{41,24,-22}, -{41,24,-21}, -{41,24,-20}, -{41,24,-19}, -{41,24,-18}, -{41,24,-17}, -{41,24,-16}, -{41,24,-15}, -{41,24,-14}, -{41,24,-13}, -{41,24,-12}, -{41,24,-11}, -{41,24,-10}, -{41,24,-9}, -{41,24,-8}, -{41,24,-7}, -{41,24,-6}, -{41,24,-5}, -{41,24,-4}, -{41,24,-3}, -{41,24,-2}, -{41,24,-1}, -{41,24,0}, -{41,24,1}, -{41,24,2}, -{41,24,3}, -{41,24,4}, -{41,24,5}, -{41,24,6}, -{41,24,7}, -{41,24,8}, -{41,24,9}, -{41,24,10}, -{41,24,11}, -{41,24,12}, -{41,24,13}, -{41,24,14}, -{41,24,15}, -{41,24,16}, -{41,24,17}, -{41,24,18}, -{41,24,19}, -{41,24,20}, -{41,24,21}, -{41,24,22}, -{41,24,23}, -{41,24,24}, -{41,24,25}, -{41,24,26}, -{41,24,27}, -{41,24,28}, -{41,24,29}, -{41,24,30}, -{41,24,31}, -{41,24,32}, -{41,24,33}, -{41,24,34}, -{41,24,35}, -{41,24,36}, -{41,24,37}, -{41,24,38}, -{41,24,39}, -{41,24,40}, -{41,24,41}, -{41,24,42}, -{41,24,43}, -{41,24,44}, -{41,24,45}, -{41,24,46}, -{41,24,47}, -{41,24,48}, -{41,24,49}, -{41,24,50}, -{41,25,-67}, -{41,25,-66}, -{41,25,-65}, -{41,25,-64}, -{41,25,-63}, -{41,25,-62}, -{41,25,-61}, -{41,25,-60}, -{41,25,-59}, -{41,25,-58}, -{41,25,-57}, -{41,25,-56}, -{41,25,-55}, -{41,25,-54}, -{41,25,-53}, -{41,25,-52}, -{41,25,-51}, -{41,25,-50}, -{41,25,-49}, -{41,25,-48}, -{41,25,-47}, -{41,25,-46}, -{41,25,-45}, -{41,25,-44}, -{41,25,-43}, -{41,25,-42}, -{41,25,-41}, -{41,25,-40}, -{41,25,-39}, -{41,25,-38}, -{41,25,-37}, -{41,25,-36}, -{41,25,-35}, -{41,25,-34}, -{41,25,-33}, -{41,25,-32}, -{41,25,-31}, -{41,25,-30}, -{41,25,-29}, -{41,25,-28}, -{41,25,-27}, -{41,25,-26}, -{41,25,-25}, -{41,25,-24}, -{41,25,-23}, -{41,25,-22}, -{41,25,-21}, -{41,25,-20}, -{41,25,-19}, -{41,25,-18}, -{41,25,-17}, -{41,25,-16}, -{41,25,-15}, -{41,25,-14}, -{41,25,-13}, -{41,25,-12}, -{41,25,-11}, -{41,25,-10}, -{41,25,-9}, -{41,25,-8}, -{41,25,-7}, -{41,25,-6}, -{41,25,-5}, -{41,25,-4}, -{41,25,-3}, -{41,25,-2}, -{41,25,-1}, -{41,25,0}, -{41,25,1}, -{41,25,2}, -{41,25,3}, -{41,25,4}, -{41,25,5}, -{41,25,6}, -{41,25,7}, -{41,25,8}, -{41,25,9}, -{41,25,10}, -{41,25,11}, -{41,25,12}, -{41,25,13}, -{41,25,14}, -{41,25,15}, -{41,25,16}, -{41,25,17}, -{41,25,18}, -{41,25,19}, -{41,25,20}, -{41,25,21}, -{41,25,22}, -{41,25,23}, -{41,25,24}, -{41,25,25}, -{41,25,26}, -{41,25,27}, -{41,25,28}, -{41,25,29}, -{41,25,30}, -{41,25,31}, -{41,25,32}, -{41,25,33}, -{41,25,34}, -{41,25,35}, -{41,25,36}, -{41,25,37}, -{41,25,38}, -{41,25,39}, -{41,25,40}, -{41,25,41}, -{41,25,42}, -{41,25,43}, -{41,25,44}, -{41,25,45}, -{41,25,46}, -{41,25,47}, -{41,25,48}, -{41,25,49}, -{41,25,50}, -{41,26,-68}, -{41,26,-67}, -{41,26,-66}, -{41,26,-65}, -{41,26,-64}, -{41,26,-63}, -{41,26,-62}, -{41,26,-61}, -{41,26,-60}, -{41,26,-59}, -{41,26,-58}, -{41,26,-57}, -{41,26,-56}, -{41,26,-55}, -{41,26,-54}, -{41,26,-53}, -{41,26,-52}, -{41,26,-51}, -{41,26,-50}, -{41,26,-49}, -{41,26,-48}, -{41,26,-47}, -{41,26,-46}, -{41,26,-45}, -{41,26,-44}, -{41,26,-43}, -{41,26,-42}, -{41,26,-41}, -{41,26,-40}, -{41,26,-39}, -{41,26,-38}, -{41,26,-37}, -{41,26,-36}, -{41,26,-35}, -{41,26,-34}, -{41,26,-33}, -{41,26,-32}, -{41,26,-31}, -{41,26,-30}, -{41,26,-29}, -{41,26,-28}, -{41,26,-27}, -{41,26,-26}, -{41,26,-25}, -{41,26,-24}, -{41,26,-23}, -{41,26,-22}, -{41,26,-21}, -{41,26,-20}, -{41,26,-19}, -{41,26,-18}, -{41,26,-17}, -{41,26,-16}, -{41,26,-15}, -{41,26,-14}, -{41,26,-13}, -{41,26,-12}, -{41,26,-11}, -{41,26,-10}, -{41,26,-9}, -{41,26,-8}, -{41,26,-7}, -{41,26,-6}, -{41,26,-5}, -{41,26,-4}, -{41,26,-3}, -{41,26,-2}, -{41,26,-1}, -{41,26,0}, -{41,26,1}, -{41,26,2}, -{41,26,3}, -{41,26,4}, -{41,26,5}, -{41,26,6}, -{41,26,7}, -{41,26,8}, -{41,26,9}, -{41,26,10}, -{41,26,11}, -{41,26,12}, -{41,26,13}, -{41,26,14}, -{41,26,15}, -{41,26,16}, -{41,26,17}, -{41,26,18}, -{41,26,19}, -{41,26,20}, -{41,26,21}, -{41,26,22}, -{41,26,23}, -{41,26,24}, -{41,26,25}, -{41,26,26}, -{41,26,27}, -{41,26,28}, -{41,26,29}, -{41,26,30}, -{41,26,31}, -{41,26,32}, -{41,26,33}, -{41,26,34}, -{41,26,35}, -{41,26,36}, -{41,26,37}, -{41,26,38}, -{41,26,39}, -{41,26,40}, -{41,26,41}, -{41,26,42}, -{41,26,43}, -{41,26,44}, -{41,26,45}, -{41,26,46}, -{41,26,47}, -{41,26,48}, -{41,26,49}, -{41,26,50}, -{41,27,-69}, -{41,27,-68}, -{41,27,-67}, -{41,27,-66}, -{41,27,-65}, -{41,27,-64}, -{41,27,-63}, -{41,27,-62}, -{41,27,-61}, -{41,27,-60}, -{41,27,-59}, -{41,27,-58}, -{41,27,-57}, -{41,27,-56}, -{41,27,-55}, -{41,27,-54}, -{41,27,-53}, -{41,27,-52}, -{41,27,-51}, -{41,27,-50}, -{41,27,-49}, -{41,27,-48}, -{41,27,-47}, -{41,27,-46}, -{41,27,-45}, -{41,27,-44}, -{41,27,-43}, -{41,27,-42}, -{41,27,-41}, -{41,27,-40}, -{41,27,-39}, -{41,27,-38}, -{41,27,-37}, -{41,27,-36}, -{41,27,-35}, -{41,27,-34}, -{41,27,-33}, -{41,27,-32}, -{41,27,-31}, -{41,27,-30}, -{41,27,-29}, -{41,27,-28}, -{41,27,-27}, -{41,27,-26}, -{41,27,-25}, -{41,27,-24}, -{41,27,-23}, -{41,27,-22}, -{41,27,-21}, -{41,27,-20}, -{41,27,-19}, -{41,27,-18}, -{41,27,-17}, -{41,27,-16}, -{41,27,-15}, -{41,27,-14}, -{41,27,-13}, -{41,27,-12}, -{41,27,-11}, -{41,27,-10}, -{41,27,-9}, -{41,27,-8}, -{41,27,-7}, -{41,27,-6}, -{41,27,-5}, -{41,27,-4}, -{41,27,-3}, -{41,27,-2}, -{41,27,-1}, -{41,27,0}, -{41,27,1}, -{41,27,2}, -{41,27,3}, -{41,27,4}, -{41,27,5}, -{41,27,6}, -{41,27,7}, -{41,27,8}, -{41,27,9}, -{41,27,10}, -{41,27,11}, -{41,27,12}, -{41,27,13}, -{41,27,14}, -{41,27,15}, -{41,27,16}, -{41,27,17}, -{41,27,18}, -{41,27,19}, -{41,27,20}, -{41,27,21}, -{41,27,22}, -{41,27,23}, -{41,27,24}, -{41,27,25}, -{41,27,26}, -{41,27,27}, -{41,27,28}, -{41,27,29}, -{41,27,30}, -{41,27,31}, -{41,27,32}, -{41,27,33}, -{41,27,34}, -{41,27,35}, -{41,27,36}, -{41,27,37}, -{41,27,38}, -{41,27,39}, -{41,27,40}, -{41,27,41}, -{41,27,42}, -{41,27,43}, -{41,27,44}, -{41,27,45}, -{41,27,46}, -{41,27,47}, -{41,27,48}, -{41,27,49}, -{41,27,50}, -{41,28,-70}, -{41,28,-69}, -{41,28,-68}, -{41,28,-67}, -{41,28,-66}, -{41,28,-65}, -{41,28,-64}, -{41,28,-63}, -{41,28,-62}, -{41,28,-61}, -{41,28,-60}, -{41,28,-59}, -{41,28,-58}, -{41,28,-57}, -{41,28,-56}, -{41,28,-55}, -{41,28,-54}, -{41,28,-53}, -{41,28,-52}, -{41,28,-51}, -{41,28,-50}, -{41,28,-49}, -{41,28,-48}, -{41,28,-47}, -{41,28,-46}, -{41,28,-45}, -{41,28,-44}, -{41,28,-43}, -{41,28,-42}, -{41,28,-41}, -{41,28,-40}, -{41,28,-39}, -{41,28,-38}, -{41,28,-37}, -{41,28,-36}, -{41,28,-35}, -{41,28,-34}, -{41,28,-33}, -{41,28,-32}, -{41,28,-31}, -{41,28,-30}, -{41,28,-29}, -{41,28,-28}, -{41,28,-27}, -{41,28,-26}, -{41,28,-25}, -{41,28,-24}, -{41,28,-23}, -{41,28,-22}, -{41,28,-21}, -{41,28,-20}, -{41,28,-19}, -{41,28,-18}, -{41,28,-17}, -{41,28,-16}, -{41,28,-15}, -{41,28,-14}, -{41,28,-13}, -{41,28,-12}, -{41,28,-11}, -{41,28,-10}, -{41,28,-9}, -{41,28,-8}, -{41,28,-7}, -{41,28,-6}, -{41,28,-5}, -{41,28,-4}, -{41,28,-3}, -{41,28,-2}, -{41,28,-1}, -{41,28,0}, -{41,28,1}, -{41,28,2}, -{41,28,3}, -{41,28,4}, -{41,28,5}, -{41,28,6}, -{41,28,7}, -{41,28,8}, -{41,28,9}, -{41,28,10}, -{41,28,11}, -{41,28,12}, -{41,28,13}, -{41,28,14}, -{41,28,15}, -{41,28,16}, -{41,28,17}, -{41,28,18}, -{41,28,19}, -{41,28,20}, -{41,28,21}, -{41,28,22}, -{41,28,23}, -{41,28,24}, -{41,28,25}, -{41,28,26}, -{41,28,27}, -{41,28,28}, -{41,28,29}, -{41,28,30}, -{41,28,31}, -{41,28,32}, -{41,28,33}, -{41,28,34}, -{41,28,35}, -{41,28,36}, -{41,28,37}, -{41,28,38}, -{41,28,39}, -{41,28,40}, -{41,28,41}, -{41,28,42}, -{41,28,43}, -{41,28,44}, -{41,28,45}, -{41,28,46}, -{41,28,47}, -{41,28,48}, -{41,28,49}, -{41,28,50}, -{41,29,-71}, -{41,29,-70}, -{41,29,-69}, -{41,29,-68}, -{41,29,-67}, -{41,29,-66}, -{41,29,-65}, -{41,29,-64}, -{41,29,-63}, -{41,29,-62}, -{41,29,-61}, -{41,29,-60}, -{41,29,-59}, -{41,29,-58}, -{41,29,-57}, -{41,29,-56}, -{41,29,-55}, -{41,29,-54}, -{41,29,-53}, -{41,29,-52}, -{41,29,-51}, -{41,29,-50}, -{41,29,-49}, -{41,29,-48}, -{41,29,-47}, -{41,29,-46}, -{41,29,-45}, -{41,29,-44}, -{41,29,-43}, -{41,29,-42}, -{41,29,-41}, -{41,29,-40}, -{41,29,-39}, -{41,29,-38}, -{41,29,-37}, -{41,29,-36}, -{41,29,-35}, -{41,29,-34}, -{41,29,-33}, -{41,29,-32}, -{41,29,-31}, -{41,29,-30}, -{41,29,-29}, -{41,29,-28}, -{41,29,-27}, -{41,29,-26}, -{41,29,-25}, -{41,29,-24}, -{41,29,-23}, -{41,29,-22}, -{41,29,-21}, -{41,29,-20}, -{41,29,-19}, -{41,29,-18}, -{41,29,-17}, -{41,29,-16}, -{41,29,-15}, -{41,29,-14}, -{41,29,-13}, -{41,29,-12}, -{41,29,-11}, -{41,29,-10}, -{41,29,-9}, -{41,29,-8}, -{41,29,-7}, -{41,29,-6}, -{41,29,-5}, -{41,29,-4}, -{41,29,-3}, -{41,29,-2}, -{41,29,-1}, -{41,29,0}, -{41,29,1}, -{41,29,2}, -{41,29,3}, -{41,29,4}, -{41,29,5}, -{41,29,6}, -{41,29,7}, -{41,29,8}, -{41,29,9}, -{41,29,10}, -{41,29,11}, -{41,29,12}, -{41,29,13}, -{41,29,14}, -{41,29,15}, -{41,29,16}, -{41,29,17}, -{41,29,18}, -{41,29,19}, -{41,29,20}, -{41,29,21}, -{41,29,22}, -{41,29,23}, -{41,29,24}, -{41,29,25}, -{41,29,26}, -{41,29,27}, -{41,29,28}, -{41,29,29}, -{41,29,30}, -{41,29,31}, -{41,29,32}, -{41,29,33}, -{41,29,34}, -{41,29,35}, -{41,29,36}, -{41,29,37}, -{41,29,38}, -{41,29,39}, -{41,29,40}, -{41,29,41}, -{41,29,42}, -{41,29,43}, -{41,29,44}, -{41,29,45}, -{41,29,46}, -{41,29,47}, -{41,29,48}, -{41,29,49}, -{41,29,50}, -{41,30,-71}, -{41,30,-70}, -{41,30,-69}, -{41,30,-68}, -{41,30,-67}, -{41,30,-66}, -{41,30,-65}, -{41,30,-64}, -{41,30,-63}, -{41,30,-62}, -{41,30,-61}, -{41,30,-60}, -{41,30,-59}, -{41,30,-58}, -{41,30,-57}, -{41,30,-56}, -{41,30,-55}, -{41,30,-54}, -{41,30,-53}, -{41,30,-52}, -{41,30,-51}, -{41,30,-50}, -{41,30,-49}, -{41,30,-48}, -{41,30,-47}, -{41,30,-46}, -{41,30,-45}, -{41,30,-44}, -{41,30,-43}, -{41,30,-42}, -{41,30,-41}, -{41,30,-40}, -{41,30,-39}, -{41,30,-38}, -{41,30,-37}, -{41,30,-36}, -{41,30,-35}, -{41,30,-34}, -{41,30,-33}, -{41,30,-32}, -{41,30,-31}, -{41,30,-30}, -{41,30,-29}, -{41,30,-28}, -{41,30,-27}, -{41,30,-26}, -{41,30,-25}, -{41,30,-24}, -{41,30,-23}, -{41,30,-22}, -{41,30,-21}, -{41,30,-20}, -{41,30,-19}, -{41,30,-18}, -{41,30,-17}, -{41,30,-16}, -{41,30,-15}, -{41,30,-14}, -{41,30,-13}, -{41,30,-12}, -{41,30,-11}, -{41,30,-10}, -{41,30,-9}, -{41,30,-8}, -{41,30,-7}, -{41,30,-6}, -{41,30,-5}, -{41,30,-4}, -{41,30,-3}, -{41,30,-2}, -{41,30,-1}, -{41,30,0}, -{41,30,1}, -{41,30,2}, -{41,30,3}, -{41,30,4}, -{41,30,5}, -{41,30,6}, -{41,30,7}, -{41,30,8}, -{41,30,9}, -{41,30,10}, -{41,30,11}, -{41,30,12}, -{41,30,13}, -{41,30,14}, -{41,30,15}, -{41,30,16}, -{41,30,17}, -{41,30,18}, -{41,30,19}, -{41,30,20}, -{41,30,21}, -{41,30,22}, -{41,30,23}, -{41,30,24}, -{41,30,25}, -{41,30,26}, -{41,30,27}, -{41,30,28}, -{41,30,29}, -{41,30,30}, -{41,30,31}, -{41,30,32}, -{41,30,33}, -{41,30,34}, -{41,30,35}, -{41,30,36}, -{41,30,37}, -{41,30,38}, -{41,30,39}, -{41,30,40}, -{41,30,41}, -{41,30,42}, -{41,30,43}, -{41,30,44}, -{41,30,45}, -{41,30,46}, -{41,30,47}, -{41,30,48}, -{41,30,49}, -{41,30,50}, -{41,30,51}, -{41,31,-72}, -{41,31,-71}, -{41,31,-70}, -{41,31,-69}, -{41,31,-68}, -{41,31,-67}, -{41,31,-66}, -{41,31,-65}, -{41,31,-64}, -{41,31,-63}, -{41,31,-62}, -{41,31,-61}, -{41,31,-60}, -{41,31,-59}, -{41,31,-58}, -{41,31,-57}, -{41,31,-56}, -{41,31,-55}, -{41,31,-54}, -{41,31,-53}, -{41,31,-52}, -{41,31,-51}, -{41,31,-50}, -{41,31,-49}, -{41,31,-48}, -{41,31,-47}, -{41,31,-46}, -{41,31,-45}, -{41,31,-44}, -{41,31,-43}, -{41,31,-42}, -{41,31,-41}, -{41,31,-40}, -{41,31,-39}, -{41,31,-38}, -{41,31,-37}, -{41,31,-36}, -{41,31,-35}, -{41,31,-34}, -{41,31,-33}, -{41,31,-32}, -{41,31,-31}, -{41,31,-30}, -{41,31,-29}, -{41,31,-28}, -{41,31,-27}, -{41,31,-26}, -{41,31,-25}, -{41,31,-24}, -{41,31,-23}, -{41,31,-22}, -{41,31,-21}, -{41,31,-20}, -{41,31,-19}, -{41,31,-18}, -{41,31,-17}, -{41,31,-16}, -{41,31,-15}, -{41,31,-14}, -{41,31,-13}, -{41,31,-12}, -{41,31,-11}, -{41,31,-10}, -{41,31,-9}, -{41,31,-8}, -{41,31,-7}, -{41,31,-6}, -{41,31,-5}, -{41,31,-4}, -{41,31,-3}, -{41,31,-2}, -{41,31,-1}, -{41,31,0}, -{41,31,1}, -{41,31,2}, -{41,31,3}, -{41,31,4}, -{41,31,5}, -{41,31,6}, -{41,31,7}, -{41,31,8}, -{41,31,9}, -{41,31,10}, -{41,31,11}, -{41,31,12}, -{41,31,13}, -{41,31,14}, -{41,31,15}, -{41,31,16}, -{41,31,17}, -{41,31,18}, -{41,31,19}, -{41,31,20}, -{41,31,21}, -{41,31,22}, -{41,31,23}, -{41,31,24}, -{41,31,25}, -{41,31,26}, -{41,31,27}, -{41,31,28}, -{41,31,29}, -{41,31,30}, -{41,31,31}, -{41,31,32}, -{41,31,33}, -{41,31,34}, -{41,31,35}, -{41,31,36}, -{41,31,37}, -{41,31,38}, -{41,31,39}, -{41,31,40}, -{41,31,41}, -{41,31,42}, -{41,31,43}, -{41,31,44}, -{41,31,45}, -{41,31,46}, -{41,31,47}, -{41,31,48}, -{41,31,49}, -{41,31,50}, -{41,31,51}, -{41,32,-73}, -{41,32,-72}, -{41,32,-71}, -{41,32,-70}, -{41,32,-69}, -{41,32,-68}, -{41,32,-67}, -{41,32,-66}, -{41,32,-65}, -{41,32,-64}, -{41,32,-63}, -{41,32,-62}, -{41,32,-61}, -{41,32,-60}, -{41,32,-59}, -{41,32,-58}, -{41,32,-57}, -{41,32,-56}, -{41,32,-55}, -{41,32,-54}, -{41,32,-53}, -{41,32,-52}, -{41,32,-51}, -{41,32,-50}, -{41,32,-49}, -{41,32,-48}, -{41,32,-47}, -{41,32,-46}, -{41,32,-45}, -{41,32,-44}, -{41,32,-43}, -{41,32,-42}, -{41,32,-41}, -{41,32,-40}, -{41,32,-39}, -{41,32,-38}, -{41,32,-37}, -{41,32,-36}, -{41,32,-35}, -{41,32,-34}, -{41,32,-33}, -{41,32,-32}, -{41,32,-31}, -{41,32,-30}, -{41,32,-29}, -{41,32,-28}, -{41,32,-27}, -{41,32,-26}, -{41,32,-25}, -{41,32,-24}, -{41,32,-23}, -{41,32,-22}, -{41,32,-21}, -{41,32,-20}, -{41,32,-19}, -{41,32,-18}, -{41,32,-17}, -{41,32,-16}, -{41,32,-15}, -{41,32,-14}, -{41,32,-13}, -{41,32,-12}, -{41,32,-11}, -{41,32,-10}, -{41,32,-9}, -{41,32,-8}, -{41,32,-7}, -{41,32,-6}, -{41,32,-5}, -{41,32,-4}, -{41,32,-3}, -{41,32,-2}, -{41,32,-1}, -{41,32,0}, -{41,32,1}, -{41,32,2}, -{41,32,3}, -{41,32,4}, -{41,32,5}, -{41,32,6}, -{41,32,7}, -{41,32,8}, -{41,32,9}, -{41,32,10}, -{41,32,11}, -{41,32,12}, -{41,32,13}, -{41,32,14}, -{41,32,15}, -{41,32,16}, -{41,32,17}, -{41,32,18}, -{41,32,19}, -{41,32,20}, -{41,32,21}, -{41,32,22}, -{41,32,23}, -{41,32,24}, -{41,32,25}, -{41,32,26}, -{41,32,27}, -{41,32,28}, -{41,32,29}, -{41,32,30}, -{41,32,31}, -{41,32,32}, -{41,32,33}, -{41,32,34}, -{41,32,35}, -{41,32,36}, -{41,32,37}, -{41,32,38}, -{41,32,39}, -{41,32,40}, -{41,32,41}, -{41,32,42}, -{41,32,43}, -{41,32,44}, -{41,32,45}, -{41,32,46}, -{41,32,47}, -{41,32,48}, -{41,32,49}, -{41,32,50}, -{41,32,51}, -{41,33,-74}, -{41,33,-73}, -{41,33,-72}, -{41,33,-71}, -{41,33,-70}, -{41,33,-69}, -{41,33,-68}, -{41,33,-67}, -{41,33,-66}, -{41,33,-65}, -{41,33,-64}, -{41,33,-63}, -{41,33,-62}, -{41,33,-61}, -{41,33,-60}, -{41,33,-59}, -{41,33,-58}, -{41,33,-57}, -{41,33,-56}, -{41,33,-55}, -{41,33,-54}, -{41,33,-53}, -{41,33,-52}, -{41,33,-51}, -{41,33,-50}, -{41,33,-49}, -{41,33,-48}, -{41,33,-47}, -{41,33,-46}, -{41,33,-45}, -{41,33,-44}, -{41,33,-43}, -{41,33,-42}, -{41,33,-41}, -{41,33,-40}, -{41,33,-39}, -{41,33,-38}, -{41,33,-37}, -{41,33,-36}, -{41,33,-35}, -{41,33,-34}, -{41,33,-33}, -{41,33,-32}, -{41,33,-31}, -{41,33,-30}, -{41,33,-29}, -{41,33,-28}, -{41,33,-27}, -{41,33,-26}, -{41,33,-25}, -{41,33,-24}, -{41,33,-23}, -{41,33,-22}, -{41,33,-21}, -{41,33,-20}, -{41,33,-19}, -{41,33,-18}, -{41,33,-17}, -{41,33,-16}, -{41,33,-15}, -{41,33,-14}, -{41,33,-13}, -{41,33,-12}, -{41,33,-11}, -{41,33,-10}, -{41,33,-9}, -{41,33,-8}, -{41,33,-7}, -{41,33,-6}, -{41,33,-5}, -{41,33,-4}, -{41,33,-3}, -{41,33,-2}, -{41,33,-1}, -{41,33,0}, -{41,33,1}, -{41,33,2}, -{41,33,3}, -{41,33,4}, -{41,33,5}, -{41,33,6}, -{41,33,7}, -{41,33,8}, -{41,33,9}, -{41,33,10}, -{41,33,11}, -{41,33,12}, -{41,33,13}, -{41,33,14}, -{41,33,15}, -{41,33,16}, -{41,33,17}, -{41,33,18}, -{41,33,19}, -{41,33,20}, -{41,33,21}, -{41,33,22}, -{41,33,23}, -{41,33,24}, -{41,33,25}, -{41,33,26}, -{41,33,27}, -{41,33,28}, -{41,33,29}, -{41,33,30}, -{41,33,31}, -{41,33,32}, -{41,33,33}, -{41,33,34}, -{41,33,35}, -{41,33,36}, -{41,33,37}, -{41,33,38}, -{41,33,39}, -{41,33,40}, -{41,33,41}, -{41,33,42}, -{41,33,43}, -{41,33,44}, -{41,33,45}, -{41,33,46}, -{41,33,47}, -{41,33,48}, -{41,33,49}, -{41,33,50}, -{41,33,51}, -{41,34,-75}, -{41,34,-74}, -{41,34,-73}, -{41,34,-72}, -{41,34,-71}, -{41,34,-70}, -{41,34,-69}, -{41,34,-68}, -{41,34,-67}, -{41,34,-66}, -{41,34,-65}, -{41,34,-64}, -{41,34,-63}, -{41,34,-62}, -{41,34,-61}, -{41,34,-60}, -{41,34,-59}, -{41,34,-58}, -{41,34,-57}, -{41,34,-56}, -{41,34,-55}, -{41,34,-54}, -{41,34,-53}, -{41,34,-52}, -{41,34,-51}, -{41,34,-50}, -{41,34,-49}, -{41,34,-48}, -{41,34,-47}, -{41,34,-46}, -{41,34,-45}, -{41,34,-44}, -{41,34,-43}, -{41,34,-42}, -{41,34,-41}, -{41,34,-40}, -{41,34,-39}, -{41,34,-38}, -{41,34,-37}, -{41,34,-36}, -{41,34,-35}, -{41,34,-34}, -{41,34,-33}, -{41,34,-32}, -{41,34,-31}, -{41,34,-30}, -{41,34,-29}, -{41,34,-28}, -{41,34,-27}, -{41,34,-26}, -{41,34,-25}, -{41,34,-24}, -{41,34,-23}, -{41,34,-22}, -{41,34,-21}, -{41,34,-20}, -{41,34,-19}, -{41,34,-18}, -{41,34,-17}, -{41,34,-16}, -{41,34,-15}, -{41,34,-14}, -{41,34,-13}, -{41,34,-12}, -{41,34,-11}, -{41,34,-10}, -{41,34,-9}, -{41,34,-8}, -{41,34,-7}, -{41,34,-6}, -{41,34,-5}, -{41,34,-4}, -{41,34,-3}, -{41,34,-2}, -{41,34,-1}, -{41,34,0}, -{41,34,1}, -{41,34,2}, -{41,34,3}, -{41,34,4}, -{41,34,5}, -{41,34,6}, -{41,34,7}, -{41,34,8}, -{41,34,9}, -{41,34,10}, -{41,34,11}, -{41,34,12}, -{41,34,13}, -{41,34,14}, -{41,34,15}, -{41,34,16}, -{41,34,17}, -{41,34,18}, -{41,34,19}, -{41,34,20}, -{41,34,21}, -{41,34,22}, -{41,34,23}, -{41,34,24}, -{41,34,25}, -{41,34,26}, -{41,34,27}, -{41,34,28}, -{41,34,29}, -{41,34,30}, -{41,34,31}, -{41,34,32}, -{41,34,33}, -{41,34,34}, -{41,34,35}, -{41,34,36}, -{41,34,37}, -{41,34,38}, -{41,34,39}, -{41,34,40}, -{41,34,41}, -{41,34,42}, -{41,34,43}, -{41,34,44}, -{41,34,45}, -{41,34,46}, -{41,34,47}, -{41,34,48}, -{41,34,49}, -{41,34,50}, -{41,34,51}, -{41,35,-76}, -{41,35,-75}, -{41,35,-74}, -{41,35,-73}, -{41,35,-72}, -{41,35,-71}, -{41,35,-70}, -{41,35,-69}, -{41,35,-68}, -{41,35,-67}, -{41,35,-66}, -{41,35,-65}, -{41,35,-64}, -{41,35,-63}, -{41,35,-62}, -{41,35,-61}, -{41,35,-60}, -{41,35,-59}, -{41,35,-58}, -{41,35,-57}, -{41,35,-56}, -{41,35,-55}, -{41,35,-54}, -{41,35,-53}, -{41,35,-52}, -{41,35,-51}, -{41,35,-50}, -{41,35,-49}, -{41,35,-48}, -{41,35,-47}, -{41,35,-46}, -{41,35,-45}, -{41,35,-44}, -{41,35,-43}, -{41,35,-42}, -{41,35,-41}, -{41,35,-40}, -{41,35,-39}, -{41,35,-38}, -{41,35,-37}, -{41,35,-36}, -{41,35,-35}, -{41,35,-34}, -{41,35,-33}, -{41,35,-32}, -{41,35,-31}, -{41,35,-30}, -{41,35,-29}, -{41,35,-28}, -{41,35,-27}, -{41,35,-26}, -{41,35,-25}, -{41,35,-24}, -{41,35,-23}, -{41,35,-22}, -{41,35,-21}, -{41,35,-20}, -{41,35,-19}, -{41,35,-18}, -{41,35,-17}, -{41,35,-16}, -{41,35,-15}, -{41,35,-14}, -{41,35,-13}, -{41,35,-12}, -{41,35,-11}, -{41,35,-10}, -{41,35,-9}, -{41,35,-8}, -{41,35,-7}, -{41,35,-6}, -{41,35,-5}, -{41,35,-4}, -{41,35,-3}, -{41,35,-2}, -{41,35,-1}, -{41,35,0}, -{41,35,1}, -{41,35,2}, -{41,35,3}, -{41,35,4}, -{41,35,5}, -{41,35,6}, -{41,35,7}, -{41,35,8}, -{41,35,9}, -{41,35,10}, -{41,35,11}, -{41,35,12}, -{41,35,13}, -{41,35,14}, -{41,35,15}, -{41,35,16}, -{41,35,17}, -{41,35,18}, -{41,35,19}, -{41,35,20}, -{41,35,21}, -{41,35,22}, -{41,35,23}, -{41,35,24}, -{41,35,25}, -{41,35,26}, -{41,35,27}, -{41,35,28}, -{41,35,29}, -{41,35,30}, -{41,35,31}, -{41,35,32}, -{41,35,33}, -{41,35,34}, -{41,35,35}, -{41,35,36}, -{41,35,37}, -{41,35,38}, -{41,35,39}, -{41,35,40}, -{41,35,41}, -{41,35,42}, -{41,35,43}, -{41,35,44}, -{41,35,45}, -{41,35,46}, -{41,35,47}, -{41,35,48}, -{41,35,49}, -{41,35,50}, -{41,35,51}, -{41,36,-77}, -{41,36,-76}, -{41,36,-75}, -{41,36,-74}, -{41,36,-73}, -{41,36,-72}, -{41,36,-71}, -{41,36,-70}, -{41,36,-69}, -{41,36,-68}, -{41,36,-67}, -{41,36,-66}, -{41,36,-65}, -{41,36,-64}, -{41,36,-63}, -{41,36,-62}, -{41,36,-61}, -{41,36,-60}, -{41,36,-59}, -{41,36,-58}, -{41,36,-57}, -{41,36,-56}, -{41,36,-55}, -{41,36,-54}, -{41,36,-53}, -{41,36,-52}, -{41,36,-51}, -{41,36,-50}, -{41,36,-49}, -{41,36,-48}, -{41,36,-47}, -{41,36,-46}, -{41,36,-45}, -{41,36,-44}, -{41,36,-43}, -{41,36,-42}, -{41,36,-41}, -{41,36,-40}, -{41,36,-39}, -{41,36,-38}, -{41,36,-37}, -{41,36,-36}, -{41,36,-35}, -{41,36,-34}, -{41,36,-33}, -{41,36,-32}, -{41,36,-31}, -{41,36,-30}, -{41,36,-29}, -{41,36,-28}, -{41,36,-27}, -{41,36,-26}, -{41,36,-25}, -{41,36,-24}, -{41,36,-23}, -{41,36,-22}, -{41,36,-21}, -{41,36,-20}, -{41,36,-19}, -{41,36,-18}, -{41,36,-17}, -{41,36,-16}, -{41,36,-15}, -{41,36,-14}, -{41,36,-13}, -{41,36,-12}, -{41,36,-11}, -{41,36,-10}, -{41,36,-9}, -{41,36,-8}, -{41,36,-7}, -{41,36,-6}, -{41,36,-5}, -{41,36,-4}, -{41,36,-3}, -{41,36,-2}, -{41,36,-1}, -{41,36,0}, -{41,36,1}, -{41,36,2}, -{41,36,3}, -{41,36,4}, -{41,36,5}, -{41,36,6}, -{41,36,7}, -{41,36,8}, -{41,36,9}, -{41,36,10}, -{41,36,11}, -{41,36,12}, -{41,36,13}, -{41,36,14}, -{41,36,15}, -{41,36,16}, -{41,36,17}, -{41,36,18}, -{41,36,19}, -{41,36,20}, -{41,36,21}, -{41,36,22}, -{41,36,23}, -{41,36,24}, -{41,36,25}, -{41,36,26}, -{41,36,27}, -{41,36,28}, -{41,36,29}, -{41,36,30}, -{41,36,31}, -{41,36,32}, -{41,36,33}, -{41,36,34}, -{41,36,35}, -{41,36,36}, -{41,36,37}, -{41,36,38}, -{41,36,39}, -{41,36,40}, -{41,36,41}, -{41,36,42}, -{41,36,43}, -{41,36,44}, -{41,36,45}, -{41,36,46}, -{41,36,47}, -{41,36,48}, -{41,36,49}, -{41,36,50}, -{41,36,51}, -{41,37,-78}, -{41,37,-77}, -{41,37,-76}, -{41,37,-75}, -{41,37,-74}, -{41,37,-73}, -{41,37,-72}, -{41,37,-71}, -{41,37,-70}, -{41,37,-69}, -{41,37,-68}, -{41,37,-67}, -{41,37,-66}, -{41,37,-65}, -{41,37,-64}, -{41,37,-63}, -{41,37,-62}, -{41,37,-61}, -{41,37,-60}, -{41,37,-59}, -{41,37,-58}, -{41,37,-57}, -{41,37,-56}, -{41,37,-55}, -{41,37,-54}, -{41,37,-53}, -{41,37,-52}, -{41,37,-51}, -{41,37,-50}, -{41,37,-49}, -{41,37,-48}, -{41,37,-47}, -{41,37,-46}, -{41,37,-45}, -{41,37,-44}, -{41,37,-43}, -{41,37,-42}, -{41,37,-41}, -{41,37,-40}, -{41,37,-39}, -{41,37,-38}, -{41,37,-37}, -{41,37,-36}, -{41,37,-35}, -{41,37,-34}, -{41,37,-33}, -{41,37,-32}, -{41,37,-31}, -{41,37,-30}, -{41,37,-29}, -{41,37,-28}, -{41,37,-27}, -{41,37,-26}, -{41,37,-25}, -{41,37,-24}, -{41,37,-23}, -{41,37,-22}, -{41,37,-21}, -{41,37,-20}, -{41,37,-19}, -{41,37,-18}, -{41,37,-17}, -{41,37,-16}, -{41,37,-15}, -{41,37,-14}, -{41,37,-13}, -{41,37,-12}, -{41,37,-11}, -{41,37,-10}, -{41,37,-9}, -{41,37,-8}, -{41,37,-7}, -{41,37,-6}, -{41,37,-5}, -{41,37,-4}, -{41,37,-3}, -{41,37,-2}, -{41,37,-1}, -{41,37,0}, -{41,37,1}, -{41,37,2}, -{41,37,3}, -{41,37,4}, -{41,37,5}, -{41,37,6}, -{41,37,7}, -{41,37,8}, -{41,37,9}, -{41,37,10}, -{41,37,11}, -{41,37,12}, -{41,37,13}, -{41,37,14}, -{41,37,15}, -{41,37,16}, -{41,37,17}, -{41,37,18}, -{41,37,19}, -{41,37,20}, -{41,37,21}, -{41,37,22}, -{41,37,23}, -{41,37,24}, -{41,37,25}, -{41,37,26}, -{41,37,27}, -{41,37,28}, -{41,37,29}, -{41,37,30}, -{41,37,31}, -{41,37,32}, -{41,37,33}, -{41,37,34}, -{41,37,35}, -{41,37,36}, -{41,37,37}, -{41,37,38}, -{41,37,39}, -{41,37,40}, -{41,37,41}, -{41,37,42}, -{41,37,43}, -{41,37,44}, -{41,37,45}, -{41,37,46}, -{41,37,47}, -{41,37,48}, -{41,37,49}, -{41,37,50}, -{41,37,51}, -{41,38,-79}, -{41,38,-78}, -{41,38,-77}, -{41,38,-76}, -{41,38,-75}, -{41,38,-74}, -{41,38,-73}, -{41,38,-72}, -{41,38,-71}, -{41,38,-70}, -{41,38,-69}, -{41,38,-68}, -{41,38,-67}, -{41,38,-66}, -{41,38,-65}, -{41,38,-64}, -{41,38,-63}, -{41,38,-62}, -{41,38,-61}, -{41,38,-60}, -{41,38,-59}, -{41,38,-58}, -{41,38,-57}, -{41,38,-56}, -{41,38,-55}, -{41,38,-54}, -{41,38,-53}, -{41,38,-52}, -{41,38,-51}, -{41,38,-50}, -{41,38,-49}, -{41,38,-48}, -{41,38,-47}, -{41,38,-46}, -{41,38,-45}, -{41,38,-44}, -{41,38,-43}, -{41,38,-42}, -{41,38,-41}, -{41,38,-40}, -{41,38,-39}, -{41,38,-38}, -{41,38,-37}, -{41,38,-36}, -{41,38,-35}, -{41,38,-34}, -{41,38,-33}, -{41,38,-32}, -{41,38,-31}, -{41,38,-30}, -{41,38,-29}, -{41,38,-28}, -{41,38,-27}, -{41,38,-26}, -{41,38,-25}, -{41,38,-24}, -{41,38,-23}, -{41,38,-22}, -{41,38,-21}, -{41,38,-20}, -{41,38,-19}, -{41,38,-18}, -{41,38,-17}, -{41,38,-16}, -{41,38,-15}, -{41,38,-14}, -{41,38,-13}, -{41,38,-12}, -{41,38,-11}, -{41,38,-10}, -{41,38,-9}, -{41,38,-8}, -{41,38,-7}, -{41,38,-6}, -{41,38,-5}, -{41,38,-4}, -{41,38,-3}, -{41,38,-2}, -{41,38,-1}, -{41,38,0}, -{41,38,1}, -{41,38,2}, -{41,38,3}, -{41,38,4}, -{41,38,5}, -{41,38,6}, -{41,38,7}, -{41,38,8}, -{41,38,9}, -{41,38,10}, -{41,38,11}, -{41,38,12}, -{41,38,13}, -{41,38,14}, -{41,38,15}, -{41,38,16}, -{41,38,17}, -{41,38,18}, -{41,38,19}, -{41,38,20}, -{41,38,21}, -{41,38,22}, -{41,38,23}, -{41,38,24}, -{41,38,25}, -{41,38,26}, -{41,38,27}, -{41,38,28}, -{41,38,29}, -{41,38,30}, -{41,38,31}, -{41,38,32}, -{41,38,33}, -{41,38,34}, -{41,38,35}, -{41,38,36}, -{41,38,37}, -{41,38,38}, -{41,38,39}, -{41,38,40}, -{41,38,41}, -{41,38,42}, -{41,38,43}, -{41,38,44}, -{41,38,45}, -{41,38,46}, -{41,38,47}, -{41,38,48}, -{41,38,49}, -{41,38,50}, -{41,38,51}, -{41,39,-80}, -{41,39,-79}, -{41,39,-78}, -{41,39,-77}, -{41,39,-76}, -{41,39,-75}, -{41,39,-74}, -{41,39,-73}, -{41,39,-72}, -{41,39,-71}, -{41,39,-70}, -{41,39,-69}, -{41,39,-68}, -{41,39,-67}, -{41,39,-66}, -{41,39,-65}, -{41,39,-64}, -{41,39,-63}, -{41,39,-62}, -{41,39,-61}, -{41,39,-60}, -{41,39,-59}, -{41,39,-58}, -{41,39,-57}, -{41,39,-56}, -{41,39,-55}, -{41,39,-54}, -{41,39,-53}, -{41,39,-52}, -{41,39,-51}, -{41,39,-50}, -{41,39,-49}, -{41,39,-48}, -{41,39,-47}, -{41,39,-46}, -{41,39,-45}, -{41,39,-44}, -{41,39,-43}, -{41,39,-42}, -{41,39,-41}, -{41,39,-40}, -{41,39,-39}, -{41,39,-38}, -{41,39,-37}, -{41,39,-36}, -{41,39,-35}, -{41,39,-34}, -{41,39,-33}, -{41,39,-32}, -{41,39,-31}, -{41,39,-30}, -{41,39,-29}, -{41,39,-28}, -{41,39,-27}, -{41,39,-26}, -{41,39,-25}, -{41,39,-24}, -{41,39,-23}, -{41,39,-22}, -{41,39,-21}, -{41,39,-20}, -{41,39,-19}, -{41,39,-18}, -{41,39,-17}, -{41,39,-16}, -{41,39,-15}, -{41,39,-14}, -{41,39,-13}, -{41,39,-12}, -{41,39,-11}, -{41,39,-10}, -{41,39,-9}, -{41,39,-8}, -{41,39,-7}, -{41,39,-6}, -{41,39,-5}, -{41,39,-4}, -{41,39,-3}, -{41,39,-2}, -{41,39,-1}, -{41,39,0}, -{41,39,1}, -{41,39,2}, -{41,39,3}, -{41,39,4}, -{41,39,5}, -{41,39,6}, -{41,39,7}, -{41,39,8}, -{41,39,9}, -{41,39,10}, -{41,39,11}, -{41,39,12}, -{41,39,13}, -{41,39,14}, -{41,39,15}, -{41,39,16}, -{41,39,17}, -{41,39,18}, -{41,39,19}, -{41,39,20}, -{41,39,21}, -{41,39,22}, -{41,39,23}, -{41,39,24}, -{41,39,25}, -{41,39,26}, -{41,39,27}, -{41,39,28}, -{41,39,29}, -{41,39,30}, -{41,39,31}, -{41,39,32}, -{41,39,33}, -{41,39,34}, -{41,39,35}, -{41,39,36}, -{41,39,37}, -{41,39,38}, -{41,39,39}, -{41,39,40}, -{41,39,41}, -{41,39,42}, -{41,39,43}, -{41,39,44}, -{41,39,45}, -{41,39,46}, -{41,39,47}, -{41,39,48}, -{41,39,49}, -{41,39,50}, -{41,39,51}, -{41,39,52}, -{41,40,-81}, -{41,40,-80}, -{41,40,-79}, -{41,40,-78}, -{41,40,-77}, -{41,40,-76}, -{41,40,-75}, -{41,40,-74}, -{41,40,-73}, -{41,40,-72}, -{41,40,-71}, -{41,40,-70}, -{41,40,-69}, -{41,40,-68}, -{41,40,-67}, -{41,40,-66}, -{41,40,-65}, -{41,40,-64}, -{41,40,-63}, -{41,40,-62}, -{41,40,-61}, -{41,40,-60}, -{41,40,-59}, -{41,40,-58}, -{41,40,-57}, -{41,40,-56}, -{41,40,-55}, -{41,40,-54}, -{41,40,-53}, -{41,40,-52}, -{41,40,-51}, -{41,40,-50}, -{41,40,-49}, -{41,40,-48}, -{41,40,-47}, -{41,40,-46}, -{41,40,-45}, -{41,40,-44}, -{41,40,-43}, -{41,40,-42}, -{41,40,-41}, -{41,40,-40}, -{41,40,-39}, -{41,40,-38}, -{41,40,-37}, -{41,40,-36}, -{41,40,-35}, -{41,40,-34}, -{41,40,-33}, -{41,40,-32}, -{41,40,-31}, -{41,40,-30}, -{41,40,-29}, -{41,40,-28}, -{41,40,-27}, -{41,40,-26}, -{41,40,-25}, -{41,40,-24}, -{41,40,-23}, -{41,40,-22}, -{41,40,-21}, -{41,40,-20}, -{41,40,-19}, -{41,40,-18}, -{41,40,-17}, -{41,40,-16}, -{41,40,-15}, -{41,40,-14}, -{41,40,-13}, -{41,40,-12}, -{41,40,-11}, -{41,40,-10}, -{41,40,-9}, -{41,40,-8}, -{41,40,-7}, -{41,40,-6}, -{41,40,-5}, -{41,40,-4}, -{41,40,-3}, -{41,40,-2}, -{41,40,-1}, -{41,40,0}, -{41,40,1}, -{41,40,2}, -{41,40,3}, -{41,40,4}, -{41,40,5}, -{41,40,6}, -{41,40,7}, -{41,40,8}, -{41,40,9}, -{41,40,10}, -{41,40,11}, -{41,40,12}, -{41,40,13}, -{41,40,14}, -{41,40,15}, -{41,40,16}, -{41,40,17}, -{41,40,18}, -{41,40,19}, -{41,40,20}, -{41,40,21}, -{41,40,22}, -{41,40,23}, -{41,40,24}, -{41,40,25}, -{41,40,26}, -{41,40,27}, -{41,40,28}, -{41,40,29}, -{41,40,30}, -{41,40,31}, -{41,40,32}, -{41,40,33}, -{41,40,34}, -{41,40,35}, -{41,40,36}, -{41,40,37}, -{41,40,38}, -{41,40,39}, -{41,40,40}, -{41,40,41}, -{41,40,42}, -{41,40,43}, -{41,40,44}, -{41,40,45}, -{41,40,46}, -{41,40,47}, -{41,40,48}, -{41,40,49}, -{41,40,50}, -{41,40,51}, -{41,40,52}, -{41,41,-82}, -{41,41,-81}, -{41,41,-80}, -{41,41,-79}, -{41,41,-78}, -{41,41,-77}, -{41,41,-76}, -{41,41,-75}, -{41,41,-74}, -{41,41,-73}, -{41,41,-72}, -{41,41,-71}, -{41,41,-70}, -{41,41,-69}, -{41,41,-68}, -{41,41,-67}, -{41,41,-66}, -{41,41,-65}, -{41,41,-64}, -{41,41,-63}, -{41,41,-62}, -{41,41,-61}, -{41,41,-60}, -{41,41,-59}, -{41,41,-58}, -{41,41,-57}, -{41,41,-56}, -{41,41,-55}, -{41,41,-54}, -{41,41,-53}, -{41,41,-52}, -{41,41,-51}, -{41,41,-50}, -{41,41,-49}, -{41,41,-48}, -{41,41,-47}, -{41,41,-46}, -{41,41,-45}, -{41,41,-44}, -{41,41,-43}, -{41,41,-42}, -{41,41,-41}, -{41,41,-40}, -{41,41,-39}, -{41,41,-38}, -{41,41,-37}, -{41,41,-36}, -{41,41,-35}, -{41,41,-34}, -{41,41,-33}, -{41,41,-32}, -{41,41,-31}, -{41,41,-30}, -{41,41,-29}, -{41,41,-28}, -{41,41,-27}, -{41,41,-26}, -{41,41,-25}, -{41,41,-24}, -{41,41,-23}, -{41,41,-22}, -{41,41,-21}, -{41,41,-20}, -{41,41,-19}, -{41,41,-18}, -{41,41,-17}, -{41,41,-16}, -{41,41,-15}, -{41,41,-14}, -{41,41,-13}, -{41,41,-12}, -{41,41,-11}, -{41,41,-10}, -{41,41,-9}, -{41,41,-8}, -{41,41,-7}, -{41,41,-6}, -{41,41,-5}, -{41,41,-4}, -{41,41,-3}, -{41,41,-2}, -{41,41,-1}, -{41,41,0}, -{41,41,1}, -{41,41,2}, -{41,41,3}, -{41,41,4}, -{41,41,5}, -{41,41,6}, -{41,41,7}, -{41,41,8}, -{41,41,9}, -{41,41,10}, -{41,41,11}, -{41,41,12}, -{41,41,13}, -{41,41,14}, -{41,41,15}, -{41,41,16}, -{41,41,17}, -{41,41,18}, -{41,41,19}, -{41,41,20}, -{41,41,21}, -{41,41,22}, -{41,41,23}, -{41,41,24}, -{41,41,25}, -{41,41,26}, -{41,41,27}, -{41,41,28}, -{41,41,29}, -{41,41,30}, -{41,41,31}, -{41,41,32}, -{41,41,33}, -{41,41,34}, -{41,41,35}, -{41,41,36}, -{41,41,37}, -{41,41,38}, -{41,41,39}, -{41,41,40}, -{41,41,41}, -{41,41,42}, -{41,41,43}, -{41,41,44}, -{41,41,45}, -{41,41,46}, -{41,41,47}, -{41,41,48}, -{41,41,49}, -{41,41,50}, -{41,41,51}, -{41,41,52}, -{41,42,-83}, -{41,42,-82}, -{41,42,-81}, -{41,42,-80}, -{41,42,-79}, -{41,42,-78}, -{41,42,-77}, -{41,42,-76}, -{41,42,-75}, -{41,42,-74}, -{41,42,-73}, -{41,42,-72}, -{41,42,-71}, -{41,42,-70}, -{41,42,-69}, -{41,42,-68}, -{41,42,-67}, -{41,42,-66}, -{41,42,-65}, -{41,42,-64}, -{41,42,-63}, -{41,42,-62}, -{41,42,-61}, -{41,42,-60}, -{41,42,-59}, -{41,42,-58}, -{41,42,-57}, -{41,42,-56}, -{41,42,-55}, -{41,42,-54}, -{41,42,-53}, -{41,42,-52}, -{41,42,-51}, -{41,42,-50}, -{41,42,-49}, -{41,42,-48}, -{41,42,-47}, -{41,42,-46}, -{41,42,-45}, -{41,42,-44}, -{41,42,-43}, -{41,42,-42}, -{41,42,-41}, -{41,42,-40}, -{41,42,-39}, -{41,42,-38}, -{41,42,-37}, -{41,42,-36}, -{41,42,-35}, -{41,42,-34}, -{41,42,-33}, -{41,42,-32}, -{41,42,-31}, -{41,42,-30}, -{41,42,-29}, -{41,42,-28}, -{41,42,-27}, -{41,42,-26}, -{41,42,-25}, -{41,42,-24}, -{41,42,-23}, -{41,42,-22}, -{41,42,-21}, -{41,42,-20}, -{41,42,-19}, -{41,42,-18}, -{41,42,-17}, -{41,42,-16}, -{41,42,-15}, -{41,42,-14}, -{41,42,-13}, -{41,42,-12}, -{41,42,-11}, -{41,42,-10}, -{41,42,-9}, -{41,42,-8}, -{41,42,-7}, -{41,42,-6}, -{41,42,-5}, -{41,42,-4}, -{41,42,-3}, -{41,42,-2}, -{41,42,-1}, -{41,42,0}, -{41,42,1}, -{41,42,2}, -{41,42,3}, -{41,42,4}, -{41,42,5}, -{41,42,6}, -{41,42,7}, -{41,42,8}, -{41,42,9}, -{41,42,10}, -{41,42,11}, -{41,42,12}, -{41,42,13}, -{41,42,14}, -{41,42,15}, -{41,42,16}, -{41,42,17}, -{41,42,18}, -{41,42,19}, -{41,42,20}, -{41,42,21}, -{41,42,22}, -{41,42,23}, -{41,42,24}, -{41,42,25}, -{41,42,26}, -{41,42,27}, -{41,42,28}, -{41,42,29}, -{41,42,30}, -{41,42,31}, -{41,42,32}, -{41,42,33}, -{41,42,34}, -{41,42,35}, -{41,42,36}, -{41,42,37}, -{41,42,38}, -{41,42,39}, -{41,42,40}, -{41,42,41}, -{41,42,42}, -{41,42,43}, -{41,42,44}, -{41,42,45}, -{41,42,46}, -{41,42,47}, -{41,42,48}, -{41,42,49}, -{41,42,50}, -{41,42,51}, -{41,42,52}, -{41,43,-84}, -{41,43,-83}, -{41,43,-82}, -{41,43,-81}, -{41,43,-80}, -{41,43,-79}, -{41,43,-78}, -{41,43,-77}, -{41,43,-76}, -{41,43,-75}, -{41,43,-74}, -{41,43,-73}, -{41,43,-72}, -{41,43,-71}, -{41,43,-70}, -{41,43,-69}, -{41,43,-68}, -{41,43,-67}, -{41,43,-66}, -{41,43,-65}, -{41,43,-64}, -{41,43,-63}, -{41,43,-62}, -{41,43,-61}, -{41,43,-60}, -{41,43,-59}, -{41,43,-58}, -{41,43,-57}, -{41,43,-56}, -{41,43,-55}, -{41,43,-54}, -{41,43,-53}, -{41,43,-52}, -{41,43,-51}, -{41,43,-50}, -{41,43,-49}, -{41,43,-48}, -{41,43,-47}, -{41,43,-46}, -{41,43,-45}, -{41,43,-44}, -{41,43,-43}, -{41,43,-42}, -{41,43,-41}, -{41,43,-40}, -{41,43,-39}, -{41,43,-38}, -{41,43,-37}, -{41,43,-36}, -{41,43,-35}, -{41,43,-34}, -{41,43,-33}, -{41,43,-32}, -{41,43,-31}, -{41,43,-30}, -{41,43,-29}, -{41,43,-28}, -{41,43,-27}, -{41,43,-26}, -{41,43,-25}, -{41,43,-24}, -{41,43,-23}, -{41,43,-22}, -{41,43,-21}, -{41,43,-20}, -{41,43,-19}, -{41,43,-18}, -{41,43,-17}, -{41,43,-16}, -{41,43,-15}, -{41,43,-14}, -{41,43,-13}, -{41,43,-12}, -{41,43,-11}, -{41,43,-10}, -{41,43,-9}, -{41,43,-8}, -{41,43,-7}, -{41,43,-6}, -{41,43,-5}, -{41,43,-4}, -{41,43,-3}, -{41,43,-2}, -{41,43,-1}, -{41,43,0}, -{41,43,1}, -{41,43,2}, -{41,43,3}, -{41,43,4}, -{41,43,5}, -{41,43,6}, -{41,43,7}, -{41,43,8}, -{41,43,9}, -{41,43,10}, -{41,43,11}, -{41,43,12}, -{41,43,13}, -{41,43,14}, -{41,43,15}, -{41,43,16}, -{41,43,17}, -{41,43,18}, -{41,43,19}, -{41,43,20}, -{41,43,21}, -{41,43,22}, -{41,43,23}, -{41,43,24}, -{41,43,25}, -{41,43,26}, -{41,43,27}, -{41,43,28}, -{41,43,29}, -{41,43,30}, -{41,43,31}, -{41,43,32}, -{41,43,33}, -{41,43,34}, -{41,43,35}, -{41,43,36}, -{41,43,37}, -{41,43,38}, -{41,43,39}, -{41,43,40}, -{41,43,41}, -{41,43,42}, -{41,43,43}, -{41,43,44}, -{41,43,45}, -{41,43,46}, -{41,43,47}, -{41,43,48}, -{41,43,49}, -{41,43,50}, -{41,43,51}, -{41,43,52}, -{41,44,-85}, -{41,44,-84}, -{41,44,-83}, -{41,44,-82}, -{41,44,-81}, -{41,44,-80}, -{41,44,-79}, -{41,44,-78}, -{41,44,-77}, -{41,44,-76}, -{41,44,-75}, -{41,44,-74}, -{41,44,-73}, -{41,44,-72}, -{41,44,-71}, -{41,44,-70}, -{41,44,-69}, -{41,44,-68}, -{41,44,-67}, -{41,44,-66}, -{41,44,-65}, -{41,44,-64}, -{41,44,-63}, -{41,44,-62}, -{41,44,-61}, -{41,44,-60}, -{41,44,-59}, -{41,44,-58}, -{41,44,-57}, -{41,44,-56}, -{41,44,-55}, -{41,44,-54}, -{41,44,-53}, -{41,44,-52}, -{41,44,-51}, -{41,44,-50}, -{41,44,-49}, -{41,44,-48}, -{41,44,-47}, -{41,44,-46}, -{41,44,-45}, -{41,44,-44}, -{41,44,-43}, -{41,44,-42}, -{41,44,-41}, -{41,44,-40}, -{41,44,-39}, -{41,44,-38}, -{41,44,-37}, -{41,44,-36}, -{41,44,-35}, -{41,44,-34}, -{41,44,-33}, -{41,44,-32}, -{41,44,-31}, -{41,44,-30}, -{41,44,-29}, -{41,44,-28}, -{41,44,-27}, -{41,44,-26}, -{41,44,-25}, -{41,44,-24}, -{41,44,-23}, -{41,44,-22}, -{41,44,-21}, -{41,44,-20}, -{41,44,-19}, -{41,44,-18}, -{41,44,-17}, -{41,44,-16}, -{41,44,-15}, -{41,44,-14}, -{41,44,-13}, -{41,44,-12}, -{41,44,-11}, -{41,44,-10}, -{41,44,-9}, -{41,44,-8}, -{41,44,-7}, -{41,44,-6}, -{41,44,-5}, -{41,44,-4}, -{41,44,-3}, -{41,44,-2}, -{41,44,-1}, -{41,44,0}, -{41,44,1}, -{41,44,2}, -{41,44,3}, -{41,44,4}, -{41,44,5}, -{41,44,6}, -{41,44,7}, -{41,44,8}, -{41,44,9}, -{41,44,10}, -{41,44,11}, -{41,44,12}, -{41,44,13}, -{41,44,14}, -{41,44,15}, -{41,44,16}, -{41,44,17}, -{41,44,18}, -{41,44,19}, -{41,44,20}, -{41,44,21}, -{41,44,22}, -{41,44,23}, -{41,44,24}, -{41,44,25}, -{41,44,26}, -{41,44,27}, -{41,44,28}, -{41,44,29}, -{41,44,30}, -{41,44,31}, -{41,44,32}, -{41,44,33}, -{41,44,34}, -{41,44,35}, -{41,44,36}, -{41,44,37}, -{41,44,38}, -{41,44,39}, -{41,44,40}, -{41,44,41}, -{41,44,42}, -{41,44,43}, -{41,44,44}, -{41,44,45}, -{41,44,46}, -{41,44,47}, -{41,44,48}, -{41,44,49}, -{41,44,50}, -{41,44,51}, -{41,44,52}, -{41,45,-85}, -{41,45,-84}, -{41,45,-83}, -{41,45,-82}, -{41,45,-81}, -{41,45,-80}, -{41,45,-79}, -{41,45,-78}, -{41,45,-77}, -{41,45,-76}, -{41,45,-75}, -{41,45,-74}, -{41,45,-73}, -{41,45,-72}, -{41,45,-71}, -{41,45,-70}, -{41,45,-69}, -{41,45,-68}, -{41,45,-67}, -{41,45,-66}, -{41,45,-65}, -{41,45,-64}, -{41,45,-63}, -{41,45,-62}, -{41,45,-61}, -{41,45,-60}, -{41,45,-59}, -{41,45,-58}, -{41,45,-57}, -{41,45,-56}, -{41,45,-55}, -{41,45,-54}, -{41,45,-53}, -{41,45,-52}, -{41,45,-51}, -{41,45,-50}, -{41,45,-49}, -{41,45,-48}, -{41,45,-47}, -{41,45,-46}, -{41,45,-45}, -{41,45,-44}, -{41,45,-43}, -{41,45,-42}, -{41,45,-41}, -{41,45,-40}, -{41,45,-39}, -{41,45,-38}, -{41,45,-37}, -{41,45,-36}, -{41,45,-35}, -{41,45,-34}, -{41,45,-33}, -{41,45,-32}, -{41,45,-31}, -{41,45,-30}, -{41,45,-29}, -{41,45,-28}, -{41,45,-27}, -{41,45,-26}, -{41,45,-25}, -{41,45,-24}, -{41,45,-23}, -{41,45,-22}, -{41,45,-21}, -{41,45,-20}, -{41,45,-19}, -{41,45,-18}, -{41,45,-17}, -{41,45,-16}, -{41,45,-15}, -{41,45,-14}, -{41,45,-13}, -{41,45,-12}, -{41,45,-11}, -{41,45,-10}, -{41,45,-9}, -{41,45,-8}, -{41,45,-7}, -{41,45,-6}, -{41,45,-5}, -{41,45,-4}, -{41,45,-3}, -{41,45,-2}, -{41,45,-1}, -{41,45,0}, -{41,45,1}, -{41,45,2}, -{41,45,3}, -{41,45,4}, -{41,45,5}, -{41,45,6}, -{41,45,7}, -{41,45,8}, -{41,45,9}, -{41,45,10}, -{41,45,11}, -{41,45,12}, -{41,45,13}, -{41,45,14}, -{41,45,15}, -{41,45,16}, -{41,45,17}, -{41,45,18}, -{41,45,19}, -{41,45,20}, -{41,45,21}, -{41,45,22}, -{41,45,23}, -{41,45,24}, -{41,45,25}, -{41,45,26}, -{41,45,27}, -{41,45,28}, -{41,45,29}, -{41,45,30}, -{41,45,31}, -{41,45,32}, -{41,45,33}, -{41,45,34}, -{41,45,35}, -{41,45,36}, -{41,45,37}, -{41,45,38}, -{41,45,39}, -{41,45,40}, -{41,45,41}, -{41,45,42}, -{41,45,43}, -{41,45,44}, -{41,45,45}, -{41,45,46}, -{41,45,47}, -{41,45,48}, -{41,45,49}, -{41,45,50}, -{41,45,51}, -{41,45,52}, -{41,46,-86}, -{41,46,-85}, -{41,46,-84}, -{41,46,-83}, -{41,46,-82}, -{41,46,-81}, -{41,46,-80}, -{41,46,-79}, -{41,46,-78}, -{41,46,-77}, -{41,46,-76}, -{41,46,-75}, -{41,46,-74}, -{41,46,-73}, -{41,46,-72}, -{41,46,-71}, -{41,46,-70}, -{41,46,-69}, -{41,46,-68}, -{41,46,-67}, -{41,46,-66}, -{41,46,-65}, -{41,46,-64}, -{41,46,-63}, -{41,46,-62}, -{41,46,-61}, -{41,46,-60}, -{41,46,-59}, -{41,46,-58}, -{41,46,-57}, -{41,46,-56}, -{41,46,-55}, -{41,46,-54}, -{41,46,-53}, -{41,46,-52}, -{41,46,-51}, -{41,46,-50}, -{41,46,-49}, -{41,46,-48}, -{41,46,-47}, -{41,46,-46}, -{41,46,-45}, -{41,46,-44}, -{41,46,-43}, -{41,46,-42}, -{41,46,-41}, -{41,46,-40}, -{41,46,-39}, -{41,46,-38}, -{41,46,-37}, -{41,46,-36}, -{41,46,-35}, -{41,46,-34}, -{41,46,-33}, -{41,46,-32}, -{41,46,-31}, -{41,46,-30}, -{41,46,-29}, -{41,46,-28}, -{41,46,-27}, -{41,46,-26}, -{41,46,-25}, -{41,46,-24}, -{41,46,-23}, -{41,46,-22}, -{41,46,-21}, -{41,46,-20}, -{41,46,-19}, -{41,46,-18}, -{41,46,-17}, -{41,46,-16}, -{41,46,-15}, -{41,46,-14}, -{41,46,-13}, -{41,46,-12}, -{41,46,-11}, -{41,46,-10}, -{41,46,-9}, -{41,46,-8}, -{41,46,-7}, -{41,46,-6}, -{41,46,-5}, -{41,46,-4}, -{41,46,-3}, -{41,46,-2}, -{41,46,-1}, -{41,46,0}, -{41,46,1}, -{41,46,2}, -{41,46,3}, -{41,46,4}, -{41,46,5}, -{41,46,6}, -{41,46,7}, -{41,46,8}, -{41,46,9}, -{41,46,10}, -{41,46,11}, -{41,46,12}, -{41,46,13}, -{41,46,14}, -{41,46,15}, -{41,46,16}, -{41,46,17}, -{41,46,18}, -{41,46,19}, -{41,46,20}, -{41,46,21}, -{41,46,22}, -{41,46,23}, -{41,46,24}, -{41,46,25}, -{41,46,26}, -{41,46,27}, -{41,46,28}, -{41,46,29}, -{41,46,30}, -{41,46,31}, -{41,46,32}, -{41,46,33}, -{41,46,34}, -{41,46,35}, -{41,46,36}, -{41,46,37}, -{41,46,38}, -{41,46,39}, -{41,46,40}, -{41,46,41}, -{41,46,42}, -{41,46,43}, -{41,46,44}, -{41,46,45}, -{41,46,46}, -{41,46,47}, -{41,46,48}, -{41,46,49}, -{41,46,50}, -{41,46,51}, -{41,46,52}, -{41,47,-87}, -{41,47,-86}, -{41,47,-85}, -{41,47,-84}, -{41,47,-83}, -{41,47,-82}, -{41,47,-81}, -{41,47,-80}, -{41,47,-79}, -{41,47,-78}, -{41,47,-77}, -{41,47,-76}, -{41,47,-75}, -{41,47,-74}, -{41,47,-73}, -{41,47,-72}, -{41,47,-71}, -{41,47,-70}, -{41,47,-69}, -{41,47,-68}, -{41,47,-67}, -{41,47,-66}, -{41,47,-65}, -{41,47,-64}, -{41,47,-63}, -{41,47,-62}, -{41,47,-61}, -{41,47,-60}, -{41,47,-59}, -{41,47,-58}, -{41,47,-57}, -{41,47,-56}, -{41,47,-55}, -{41,47,-54}, -{41,47,-53}, -{41,47,-52}, -{41,47,-51}, -{41,47,-50}, -{41,47,-49}, -{41,47,-48}, -{41,47,-47}, -{41,47,-46}, -{41,47,-45}, -{41,47,-44}, -{41,47,-43}, -{41,47,-42}, -{41,47,-41}, -{41,47,-40}, -{41,47,-39}, -{41,47,-38}, -{41,47,-37}, -{41,47,-36}, -{41,47,-35}, -{41,47,-34}, -{41,47,-33}, -{41,47,-32}, -{41,47,-31}, -{41,47,-30}, -{41,47,-29}, -{41,47,-28}, -{41,47,-27}, -{41,47,-26}, -{41,47,-25}, -{41,47,-24}, -{41,47,-23}, -{41,47,-22}, -{41,47,-21}, -{41,47,-20}, -{41,47,-19}, -{41,47,-18}, -{41,47,-17}, -{41,47,-16}, -{41,47,-15}, -{41,47,-14}, -{41,47,-13}, -{41,47,-12}, -{41,47,-11}, -{41,47,-10}, -{41,47,-9}, -{41,47,-8}, -{41,47,-7}, -{41,47,-6}, -{41,47,-5}, -{41,47,-4}, -{41,47,-3}, -{41,47,-2}, -{41,47,-1}, -{41,47,0}, -{41,47,1}, -{41,47,2}, -{41,47,3}, -{41,47,4}, -{41,47,5}, -{41,47,6}, -{41,47,7}, -{41,47,8}, -{41,47,9}, -{41,47,10}, -{41,47,11}, -{41,47,12}, -{41,47,13}, -{41,47,14}, -{41,47,15}, -{41,47,16}, -{41,47,17}, -{41,47,18}, -{41,47,19}, -{41,47,20}, -{41,47,21}, -{41,47,22}, -{41,47,23}, -{41,47,24}, -{41,47,25}, -{41,47,26}, -{41,47,27}, -{41,47,28}, -{41,47,29}, -{41,47,30}, -{41,47,31}, -{41,47,32}, -{41,47,33}, -{41,47,34}, -{41,47,35}, -{41,47,36}, -{41,47,37}, -{41,47,38}, -{41,47,39}, -{41,47,40}, -{41,47,41}, -{41,47,42}, -{41,47,43}, -{41,47,44}, -{41,47,45}, -{41,47,46}, -{41,47,47}, -{41,47,48}, -{41,47,49}, -{41,47,50}, -{41,47,51}, -{41,47,52}, -{41,48,-88}, -{41,48,-87}, -{41,48,-86}, -{41,48,-85}, -{41,48,-84}, -{41,48,-83}, -{41,48,-82}, -{41,48,-81}, -{41,48,-80}, -{41,48,-79}, -{41,48,-78}, -{41,48,-77}, -{41,48,-76}, -{41,48,-75}, -{41,48,-74}, -{41,48,-73}, -{41,48,-72}, -{41,48,-71}, -{41,48,-70}, -{41,48,-69}, -{41,48,-68}, -{41,48,-67}, -{41,48,-66}, -{41,48,-65}, -{41,48,-64}, -{41,48,-63}, -{41,48,-62}, -{41,48,-61}, -{41,48,-60}, -{41,48,-59}, -{41,48,-58}, -{41,48,-57}, -{41,48,-56}, -{41,48,-55}, -{41,48,-54}, -{41,48,-53}, -{41,48,-52}, -{41,48,-51}, -{41,48,-50}, -{41,48,-49}, -{41,48,-48}, -{41,48,-47}, -{41,48,-46}, -{41,48,-45}, -{41,48,-44}, -{41,48,-43}, -{41,48,-42}, -{41,48,-41}, -{41,48,-40}, -{41,48,-39}, -{41,48,-38}, -{41,48,-37}, -{41,48,-36}, -{41,48,-35}, -{41,48,-34}, -{41,48,-33}, -{41,48,-32}, -{41,48,-31}, -{41,48,-30}, -{41,48,-29}, -{41,48,-28}, -{41,48,-27}, -{41,48,-26}, -{41,48,-25}, -{41,48,-24}, -{41,48,-23}, -{41,48,-22}, -{41,48,-21}, -{41,48,-20}, -{41,48,-19}, -{41,48,-18}, -{41,48,-17}, -{41,48,-16}, -{41,48,-15}, -{41,48,-14}, -{41,48,-13}, -{41,48,-12}, -{41,48,-11}, -{41,48,-10}, -{41,48,-9}, -{41,48,-8}, -{41,48,-7}, -{41,48,-6}, -{41,48,-5}, -{41,48,-4}, -{41,48,-3}, -{41,48,-2}, -{41,48,-1}, -{41,48,0}, -{41,48,1}, -{41,48,2}, -{41,48,3}, -{41,48,4}, -{41,48,5}, -{41,48,6}, -{41,48,7}, -{41,48,8}, -{41,48,9}, -{41,48,10}, -{41,48,11}, -{41,48,12}, -{41,48,13}, -{41,48,14}, -{41,48,15}, -{41,48,16}, -{41,48,17}, -{41,48,18}, -{41,48,19}, -{41,48,20}, -{41,48,21}, -{41,48,22}, -{41,48,23}, -{41,48,24}, -{41,48,25}, -{41,48,26}, -{41,48,27}, -{41,48,28}, -{41,48,29}, -{41,48,30}, -{41,48,31}, -{41,48,32}, -{41,48,33}, -{41,48,34}, -{41,48,35}, -{41,48,36}, -{41,48,37}, -{41,48,38}, -{41,48,39}, -{41,48,40}, -{41,48,41}, -{41,48,42}, -{41,48,43}, -{41,48,44}, -{41,48,45}, -{41,48,46}, -{41,48,47}, -{41,48,48}, -{41,48,49}, -{41,48,50}, -{41,48,51}, -{41,48,52}, -{41,48,53}, -{41,49,-89}, -{41,49,-88}, -{41,49,-87}, -{41,49,-86}, -{41,49,-85}, -{41,49,-84}, -{41,49,-83}, -{41,49,-82}, -{41,49,-81}, -{41,49,-80}, -{41,49,-79}, -{41,49,-78}, -{41,49,-77}, -{41,49,-76}, -{41,49,-75}, -{41,49,-74}, -{41,49,-73}, -{41,49,-72}, -{41,49,-71}, -{41,49,-70}, -{41,49,-69}, -{41,49,-68}, -{41,49,-67}, -{41,49,-66}, -{41,49,-65}, -{41,49,-64}, -{41,49,-63}, -{41,49,-62}, -{41,49,-61}, -{41,49,-60}, -{41,49,-59}, -{41,49,-58}, -{41,49,-57}, -{41,49,-56}, -{41,49,-55}, -{41,49,-54}, -{41,49,-53}, -{41,49,-52}, -{41,49,-51}, -{41,49,-50}, -{41,49,-49}, -{41,49,-48}, -{41,49,-47}, -{41,49,-46}, -{41,49,-45}, -{41,49,-44}, -{41,49,-43}, -{41,49,-42}, -{41,49,-41}, -{41,49,-40}, -{41,49,-39}, -{41,49,-38}, -{41,49,-37}, -{41,49,-36}, -{41,49,-35}, -{41,49,-34}, -{41,49,-33}, -{41,49,-32}, -{41,49,-31}, -{41,49,-30}, -{41,49,-29}, -{41,49,-28}, -{41,49,-27}, -{41,49,-26}, -{41,49,-25}, -{41,49,-24}, -{41,49,-23}, -{41,49,-22}, -{41,49,-21}, -{41,49,-20}, -{41,49,-19}, -{41,49,-18}, -{41,49,-17}, -{41,49,-16}, -{41,49,-15}, -{41,49,-14}, -{41,49,-13}, -{41,49,-12}, -{41,49,-11}, -{41,49,-10}, -{41,49,-9}, -{41,49,-8}, -{41,49,-7}, -{41,49,-6}, -{41,49,-5}, -{41,49,-4}, -{41,49,-3}, -{41,49,-2}, -{41,49,-1}, -{41,49,0}, -{41,49,1}, -{41,49,2}, -{41,49,3}, -{41,49,4}, -{41,49,5}, -{41,49,6}, -{41,49,7}, -{41,49,8}, -{41,49,9}, -{41,49,10}, -{41,49,11}, -{41,49,12}, -{41,49,13}, -{41,49,14}, -{41,49,15}, -{41,49,16}, -{41,49,17}, -{41,49,18}, -{41,49,19}, -{41,49,20}, -{41,49,21}, -{41,49,22}, -{41,49,23}, -{41,49,24}, -{41,49,25}, -{41,49,26}, -{41,49,27}, -{41,49,28}, -{41,49,29}, -{41,49,30}, -{41,49,31}, -{41,49,32}, -{41,49,33}, -{41,49,34}, -{41,49,35}, -{41,49,36}, -{41,49,37}, -{41,49,38}, -{41,49,39}, -{41,49,40}, -{41,49,41}, -{41,49,42}, -{41,49,43}, -{41,49,44}, -{41,49,45}, -{41,49,46}, -{41,49,47}, -{41,49,48}, -{41,49,49}, -{41,49,50}, -{41,49,51}, -{41,49,52}, -{41,49,53}, -{41,50,-90}, -{41,50,-89}, -{41,50,-88}, -{41,50,-87}, -{41,50,-86}, -{41,50,-85}, -{41,50,-84}, -{41,50,-83}, -{41,50,-82}, -{41,50,-81}, -{41,50,-80}, -{41,50,-79}, -{41,50,-78}, -{41,50,-77}, -{41,50,-76}, -{41,50,-75}, -{41,50,-74}, -{41,50,-73}, -{41,50,-72}, -{41,50,-71}, -{41,50,-70}, -{41,50,-69}, -{41,50,-68}, -{41,50,-67}, -{41,50,-66}, -{41,50,-65}, -{41,50,-64}, -{41,50,-63}, -{41,50,-62}, -{41,50,-61}, -{41,50,-60}, -{41,50,-59}, -{41,50,-58}, -{41,50,-57}, -{41,50,-56}, -{41,50,-55}, -{41,50,-54}, -{41,50,-53}, -{41,50,-52}, -{41,50,-51}, -{41,50,-50}, -{41,50,-49}, -{41,50,-48}, -{41,50,-47}, -{41,50,-46}, -{41,50,-45}, -{41,50,-44}, -{41,50,-43}, -{41,50,-42}, -{41,50,-41}, -{41,50,-40}, -{41,50,-39}, -{41,50,-38}, -{41,50,-37}, -{41,50,-36}, -{41,50,-35}, -{41,50,-34}, -{41,50,-33}, -{41,50,-32}, -{41,50,-31}, -{41,50,-30}, -{41,50,-29}, -{41,50,-28}, -{41,50,-27}, -{41,50,-26}, -{41,50,-25}, -{41,50,-24}, -{41,50,-23}, -{41,50,-22}, -{41,50,-21}, -{41,50,-20}, -{41,50,-19}, -{41,50,-18}, -{41,50,-17}, -{41,50,-16}, -{41,50,-15}, -{41,50,-14}, -{41,50,-13}, -{41,50,-12}, -{41,50,-11}, -{41,50,-10}, -{41,50,-9}, -{41,50,-8}, -{41,50,-7}, -{41,50,-6}, -{41,50,-5}, -{41,50,-4}, -{41,50,-3}, -{41,50,-2}, -{41,50,-1}, -{41,50,0}, -{41,50,1}, -{41,50,2}, -{41,50,3}, -{41,50,4}, -{41,50,5}, -{41,50,6}, -{41,50,7}, -{41,50,8}, -{41,50,9}, -{41,50,10}, -{41,50,11}, -{41,50,12}, -{41,50,13}, -{41,50,14}, -{41,50,15}, -{41,50,16}, -{41,50,17}, -{41,50,18}, -{41,50,19}, -{41,50,20}, -{41,50,21}, -{41,50,22}, -{41,50,23}, -{41,50,24}, -{41,50,25}, -{41,50,26}, -{41,50,27}, -{41,50,28}, -{41,50,29}, -{41,50,30}, -{41,50,31}, -{41,50,32}, -{41,50,33}, -{41,50,34}, -{41,50,35}, -{41,50,36}, -{41,50,37}, -{41,50,38}, -{41,50,39}, -{41,50,40}, -{41,50,41}, -{41,50,42}, -{41,50,43}, -{41,50,44}, -{41,50,45}, -{41,50,46}, -{41,50,47}, -{41,50,48}, -{41,50,49}, -{41,50,50}, -{41,50,51}, -{41,50,52}, -{41,50,53}, -{41,51,-91}, -{41,51,-90}, -{41,51,-89}, -{41,51,-88}, -{41,51,-87}, -{41,51,-86}, -{41,51,-85}, -{41,51,-84}, -{41,51,-83}, -{41,51,-82}, -{41,51,-81}, -{41,51,-80}, -{41,51,-79}, -{41,51,-78}, -{41,51,-77}, -{41,51,-76}, -{41,51,-75}, -{41,51,-74}, -{41,51,-73}, -{41,51,-72}, -{41,51,-71}, -{41,51,-70}, -{41,51,-69}, -{41,51,-68}, -{41,51,-67}, -{41,51,-66}, -{41,51,-65}, -{41,51,-64}, -{41,51,-63}, -{41,51,-62}, -{41,51,-61}, -{41,51,-60}, -{41,51,-59}, -{41,51,-58}, -{41,51,-57}, -{41,51,-56}, -{41,51,-55}, -{41,51,-54}, -{41,51,-53}, -{41,51,-52}, -{41,51,-51}, -{41,51,-50}, -{41,51,-49}, -{41,51,-48}, -{41,51,-47}, -{41,51,-46}, -{41,51,-45}, -{41,51,-44}, -{41,51,-43}, -{41,51,-42}, -{41,51,-41}, -{41,51,-40}, -{41,51,-39}, -{41,51,-38}, -{41,51,-37}, -{41,51,-36}, -{41,51,-35}, -{41,51,-34}, -{41,51,-33}, -{41,51,-32}, -{41,51,-31}, -{41,51,-30}, -{41,51,-29}, -{41,51,-28}, -{41,51,-27}, -{41,51,-26}, -{41,51,-25}, -{41,51,-24}, -{41,51,-23}, -{41,51,-22}, -{41,51,-21}, -{41,51,-20}, -{41,51,-19}, -{41,51,-18}, -{41,51,-17}, -{41,51,-16}, -{41,51,-15}, -{41,51,-14}, -{41,51,-13}, -{41,51,-12}, -{41,51,-11}, -{41,51,-10}, -{41,51,-9}, -{41,51,-8}, -{41,51,-7}, -{41,51,-6}, -{41,51,-5}, -{41,51,-4}, -{41,51,-3}, -{41,51,-2}, -{41,51,-1}, -{41,51,0}, -{41,51,1}, -{41,51,2}, -{41,51,3}, -{41,51,4}, -{41,51,5}, -{41,51,6}, -{41,51,7}, -{41,51,8}, -{41,51,9}, -{41,51,10}, -{41,51,11}, -{41,51,12}, -{41,51,13}, -{41,51,14}, -{41,51,15}, -{41,51,16}, -{41,51,17}, -{41,51,18}, -{41,51,19}, -{41,51,20}, -{41,51,21}, -{41,51,22}, -{41,51,23}, -{41,51,24}, -{41,51,25}, -{41,51,26}, -{41,51,27}, -{41,51,28}, -{41,51,29}, -{41,51,30}, -{41,51,31}, -{41,51,32}, -{41,51,33}, -{41,51,34}, -{41,51,35}, -{41,51,36}, -{41,51,37}, -{41,51,38}, -{41,51,39}, -{41,51,40}, -{41,51,41}, -{41,51,42}, -{41,51,43}, -{41,51,44}, -{41,51,45}, -{41,51,46}, -{41,51,47}, -{41,51,48}, -{41,51,49}, -{41,51,50}, -{41,51,51}, -{41,51,52}, -{41,51,53}, -{41,52,-92}, -{41,52,-91}, -{41,52,-90}, -{41,52,-89}, -{41,52,-88}, -{41,52,-87}, -{41,52,-86}, -{41,52,-85}, -{41,52,-84}, -{41,52,-83}, -{41,52,-82}, -{41,52,-81}, -{41,52,-80}, -{41,52,-79}, -{41,52,-78}, -{41,52,-77}, -{41,52,-76}, -{41,52,-75}, -{41,52,-74}, -{41,52,-73}, -{41,52,-72}, -{41,52,-71}, -{41,52,-70}, -{41,52,-69}, -{41,52,-68}, -{41,52,-67}, -{41,52,-66}, -{41,52,-65}, -{41,52,-64}, -{41,52,-63}, -{41,52,-62}, -{41,52,-61}, -{41,52,-60}, -{41,52,-59}, -{41,52,-58}, -{41,52,-57}, -{41,52,-56}, -{41,52,-55}, -{41,52,-54}, -{41,52,-53}, -{41,52,-52}, -{41,52,-51}, -{41,52,-50}, -{41,52,-49}, -{41,52,-48}, -{41,52,-47}, -{41,52,-46}, -{41,52,-45}, -{41,52,-44}, -{41,52,-43}, -{41,52,-42}, -{41,52,-41}, -{41,52,-40}, -{41,52,-39}, -{41,52,-38}, -{41,52,-37}, -{41,52,-36}, -{41,52,-35}, -{41,52,-34}, -{41,52,-33}, -{41,52,-32}, -{41,52,-31}, -{41,52,-30}, -{41,52,-29}, -{41,52,-28}, -{41,52,-27}, -{41,52,-26}, -{41,52,-25}, -{41,52,-24}, -{41,52,-23}, -{41,52,-22}, -{41,52,-21}, -{41,52,-20}, -{41,52,-19}, -{41,52,-18}, -{41,52,-17}, -{41,52,-16}, -{41,52,-15}, -{41,52,-14}, -{41,52,-13}, -{41,52,-12}, -{41,52,-11}, -{41,52,-10}, -{41,52,-9}, -{41,52,-8}, -{41,52,-7}, -{41,52,-6}, -{41,52,-5}, -{41,52,-4}, -{41,52,-3}, -{41,52,-2}, -{41,52,-1}, -{41,52,0}, -{41,52,1}, -{41,52,2}, -{41,52,3}, -{41,52,4}, -{41,52,5}, -{41,52,6}, -{41,52,7}, -{41,52,8}, -{41,52,9}, -{41,52,10}, -{41,52,11}, -{41,52,12}, -{41,52,13}, -{41,52,14}, -{41,52,15}, -{41,52,16}, -{41,52,17}, -{41,52,18}, -{41,52,19}, -{41,52,20}, -{41,52,21}, -{41,52,22}, -{41,52,23}, -{41,52,24}, -{41,52,25}, -{41,52,26}, -{41,52,27}, -{41,52,28}, -{41,52,29}, -{41,52,30}, -{41,52,31}, -{41,52,32}, -{41,52,33}, -{41,52,34}, -{41,52,35}, -{41,52,36}, -{41,52,37}, -{41,52,38}, -{41,52,39}, -{41,52,40}, -{41,52,41}, -{41,52,42}, -{41,52,43}, -{41,52,44}, -{41,52,45}, -{41,52,46}, -{41,52,47}, -{41,52,48}, -{41,52,49}, -{41,52,50}, -{41,52,51}, -{41,52,52}, -{41,52,53}, -{41,53,-93}, -{41,53,-92}, -{41,53,-91}, -{41,53,-90}, -{41,53,-89}, -{41,53,-88}, -{41,53,-87}, -{41,53,-86}, -{41,53,-85}, -{41,53,-84}, -{41,53,-83}, -{41,53,-82}, -{41,53,-81}, -{41,53,-80}, -{41,53,-79}, -{41,53,-78}, -{41,53,-77}, -{41,53,-76}, -{41,53,-75}, -{41,53,-74}, -{41,53,-73}, -{41,53,-72}, -{41,53,-71}, -{41,53,-70}, -{41,53,-69}, -{41,53,-68}, -{41,53,-67}, -{41,53,-66}, -{41,53,-65}, -{41,53,-64}, -{41,53,-63}, -{41,53,-62}, -{41,53,-61}, -{41,53,-60}, -{41,53,-59}, -{41,53,-58}, -{41,53,-57}, -{41,53,-56}, -{41,53,-55}, -{41,53,-54}, -{41,53,-53}, -{41,53,-52}, -{41,53,-51}, -{41,53,-50}, -{41,53,-49}, -{41,53,-48}, -{41,53,-47}, -{41,53,-46}, -{41,53,-45}, -{41,53,-44}, -{41,53,-43}, -{41,53,-42}, -{41,53,-41}, -{41,53,-40}, -{41,53,-39}, -{41,53,-38}, -{41,53,-37}, -{41,53,-36}, -{41,53,-35}, -{41,53,-34}, -{41,53,-33}, -{41,53,-32}, -{41,53,-31}, -{41,53,-30}, -{41,53,-29}, -{41,53,-28}, -{41,53,-27}, -{41,53,-26}, -{41,53,-25}, -{41,53,-24}, -{41,53,-23}, -{41,53,-22}, -{41,53,-21}, -{41,53,-20}, -{41,53,-19}, -{41,53,-18}, -{41,53,-17}, -{41,53,-16}, -{41,53,-15}, -{41,53,-14}, -{41,53,-13}, -{41,53,-12}, -{41,53,-11}, -{41,53,-10}, -{41,53,-9}, -{41,53,-8}, -{41,53,-7}, -{41,53,-6}, -{41,53,-5}, -{41,53,-4}, -{41,53,-3}, -{41,53,-2}, -{41,53,-1}, -{41,53,0}, -{41,53,1}, -{41,53,2}, -{41,53,3}, -{41,53,4}, -{41,53,5}, -{41,53,6}, -{41,53,7}, -{41,53,8}, -{41,53,9}, -{41,53,10}, -{41,53,11}, -{41,53,12}, -{41,53,13}, -{41,53,14}, -{41,53,15}, -{41,53,16}, -{41,53,17}, -{41,53,18}, -{41,53,19}, -{41,53,20}, -{41,53,21}, -{41,53,22}, -{41,53,23}, -{41,53,24}, -{41,53,25}, -{41,53,26}, -{41,53,27}, -{41,53,28}, -{41,53,29}, -{41,53,30}, -{41,53,31}, -{41,53,32}, -{41,53,33}, -{41,53,34}, -{41,53,35}, -{41,53,36}, -{41,53,37}, -{41,53,38}, -{41,53,39}, -{41,53,40}, -{41,53,41}, -{41,53,42}, -{41,53,43}, -{41,53,44}, -{41,53,45}, -{41,53,46}, -{41,53,47}, -{41,53,48}, -{41,53,49}, -{41,53,50}, -{41,53,51}, -{41,53,52}, -{41,53,53}, -{41,54,-93}, -{41,54,-92}, -{41,54,-91}, -{41,54,-90}, -{41,54,-89}, -{41,54,-88}, -{41,54,-87}, -{41,54,-86}, -{41,54,-85}, -{41,54,-84}, -{41,54,-83}, -{41,54,-82}, -{41,54,-81}, -{41,54,-80}, -{41,54,-79}, -{41,54,-78}, -{41,54,-77}, -{41,54,-76}, -{41,54,-75}, -{41,54,-74}, -{41,54,-73}, -{41,54,-72}, -{41,54,-71}, -{41,54,-70}, -{41,54,-69}, -{41,54,-68}, -{41,54,-67}, -{41,54,-66}, -{41,54,-65}, -{41,54,-64}, -{41,54,-63}, -{41,54,-62}, -{41,54,-61}, -{41,54,-60}, -{41,54,-59}, -{41,54,-58}, -{41,54,-57}, -{41,54,-56}, -{41,54,-55}, -{41,54,-54}, -{41,54,-53}, -{41,54,-52}, -{41,54,-51}, -{41,54,-50}, -{41,54,-49}, -{41,54,-48}, -{41,54,-47}, -{41,54,-46}, -{41,54,-45}, -{41,54,-44}, -{41,54,-43}, -{41,54,-42}, -{41,54,-41}, -{41,54,-40}, -{41,54,-39}, -{41,54,-38}, -{41,54,-37}, -{41,54,-36}, -{41,54,-35}, -{41,54,-34}, -{41,54,-33}, -{41,54,-32}, -{41,54,-31}, -{41,54,-30}, -{41,54,-29}, -{41,54,-28}, -{41,54,-27}, -{41,54,-26}, -{41,54,-25}, -{41,54,-24}, -{41,54,-23}, -{41,54,-22}, -{41,54,-21}, -{41,54,-20}, -{41,54,-19}, -{41,54,-18}, -{41,54,-17}, -{41,54,-16}, -{41,54,-15}, -{41,54,-14}, -{41,54,-13}, -{41,54,-12}, -{41,54,-11}, -{41,54,-10}, -{41,54,-9}, -{41,54,-8}, -{41,54,-7}, -{41,54,-6}, -{41,54,-5}, -{41,54,-4}, -{41,54,-3}, -{41,54,-2}, -{41,54,-1}, -{41,54,0}, -{41,54,1}, -{41,54,2}, -{41,54,3}, -{41,54,4}, -{41,54,5}, -{41,54,6}, -{41,54,7}, -{41,54,8}, -{41,54,9}, -{41,54,10}, -{41,54,11}, -{41,54,12}, -{41,54,13}, -{41,54,14}, -{41,54,15}, -{41,54,16}, -{41,54,17}, -{41,54,18}, -{41,54,19}, -{41,54,20}, -{41,54,21}, -{41,54,22}, -{41,54,23}, -{41,54,24}, -{41,54,25}, -{41,54,26}, -{41,54,27}, -{41,54,28}, -{41,54,29}, -{41,54,30}, -{41,54,31}, -{41,54,32}, -{41,54,33}, -{41,54,34}, -{41,54,35}, -{41,54,36}, -{41,54,37}, -{41,54,38}, -{41,54,39}, -{41,54,40}, -{41,54,41}, -{41,54,42}, -{41,54,43}, -{41,54,44}, -{41,54,45}, -{41,54,46}, -{41,54,47}, -{41,54,48}, -{41,54,49}, -{41,54,50}, -{41,54,51}, -{41,54,52}, -{41,54,53}, -{41,55,-93}, -{41,55,-92}, -{41,55,-91}, -{41,55,-90}, -{41,55,-89}, -{41,55,-88}, -{41,55,-87}, -{41,55,-86}, -{41,55,-85}, -{41,55,-84}, -{41,55,-83}, -{41,55,-82}, -{41,55,-81}, -{41,55,-80}, -{41,55,-79}, -{41,55,-78}, -{41,55,-77}, -{41,55,-76}, -{41,55,-75}, -{41,55,-74}, -{41,55,-73}, -{41,55,-72}, -{41,55,-71}, -{41,55,-70}, -{41,55,-69}, -{41,55,-68}, -{41,55,-67}, -{41,55,-66}, -{41,55,-65}, -{41,55,-64}, -{41,55,-63}, -{41,55,-62}, -{41,55,-61}, -{41,55,-60}, -{41,55,-59}, -{41,55,-58}, -{41,55,-57}, -{41,55,-56}, -{41,55,-55}, -{41,55,-54}, -{41,55,-53}, -{41,55,-52}, -{41,55,-51}, -{41,55,-50}, -{41,55,-49}, -{41,55,-48}, -{41,55,-47}, -{41,55,-46}, -{41,55,-45}, -{41,55,-44}, -{41,55,-43}, -{41,55,-42}, -{41,55,-41}, -{41,55,-40}, -{41,55,-39}, -{41,55,-38}, -{41,55,-37}, -{41,55,-36}, -{41,55,-35}, -{41,55,-34}, -{41,55,-33}, -{41,55,-32}, -{41,55,-31}, -{41,55,-30}, -{41,55,-29}, -{41,55,-28}, -{41,55,-27}, -{41,55,-26}, -{41,55,-25}, -{41,55,-24}, -{41,55,-23}, -{41,55,-22}, -{41,55,-21}, -{41,55,-20}, -{41,55,-19}, -{41,55,-18}, -{41,55,-17}, -{41,55,-16}, -{41,55,-15}, -{41,55,-14}, -{41,55,-13}, -{41,55,-12}, -{41,55,-11}, -{41,55,-10}, -{41,55,-9}, -{41,55,-8}, -{41,55,-7}, -{41,55,-6}, -{41,55,-5}, -{41,55,-4}, -{41,55,-3}, -{41,55,-2}, -{41,55,-1}, -{41,55,0}, -{41,55,1}, -{41,55,2}, -{41,55,3}, -{41,55,4}, -{41,55,5}, -{41,55,6}, -{41,55,7}, -{41,55,8}, -{41,55,9}, -{41,55,10}, -{41,55,11}, -{41,55,12}, -{41,55,13}, -{41,55,14}, -{41,55,15}, -{41,55,16}, -{41,55,17}, -{41,55,18}, -{41,55,19}, -{41,55,20}, -{41,55,21}, -{41,55,22}, -{41,55,23}, -{41,55,24}, -{41,55,25}, -{41,55,26}, -{41,55,27}, -{41,55,28}, -{41,55,29}, -{41,55,30}, -{41,55,31}, -{41,55,32}, -{41,55,33}, -{41,55,34}, -{41,55,35}, -{41,55,36}, -{41,55,37}, -{41,55,38}, -{41,55,39}, -{41,55,40}, -{41,55,41}, -{41,55,42}, -{41,55,43}, -{41,55,44}, -{41,55,45}, -{41,55,46}, -{41,55,47}, -{41,55,48}, -{41,55,49}, -{41,55,50}, -{41,55,51}, -{41,55,52}, -{41,55,53}, -{41,56,-93}, -{41,56,-92}, -{41,56,-91}, -{41,56,-90}, -{41,56,-89}, -{41,56,-88}, -{41,56,-87}, -{41,56,-86}, -{41,56,-85}, -{41,56,-84}, -{41,56,-83}, -{41,56,-82}, -{41,56,-81}, -{41,56,-80}, -{41,56,-79}, -{41,56,-78}, -{41,56,-77}, -{41,56,-76}, -{41,56,-75}, -{41,56,-74}, -{41,56,-73}, -{41,56,-72}, -{41,56,-71}, -{41,56,-70}, -{41,56,-69}, -{41,56,-68}, -{41,56,-67}, -{41,56,-66}, -{41,56,-65}, -{41,56,-64}, -{41,56,-63}, -{41,56,-62}, -{41,56,-61}, -{41,56,-60}, -{41,56,-59}, -{41,56,-58}, -{41,56,-57}, -{41,56,-56}, -{41,56,-55}, -{41,56,-54}, -{41,56,-53}, -{41,56,-52}, -{41,56,-51}, -{41,56,-50}, -{41,56,-49}, -{41,56,-48}, -{41,56,-47}, -{41,56,-46}, -{41,56,-45}, -{41,56,-44}, -{41,56,-43}, -{41,56,-42}, -{41,56,-41}, -{41,56,-40}, -{41,56,-39}, -{41,56,-38}, -{41,56,-37}, -{41,56,-36}, -{41,56,-35}, -{41,56,-34}, -{41,56,-33}, -{41,56,-32}, -{41,56,-31}, -{41,56,-30}, -{41,56,-29}, -{41,56,-28}, -{41,56,-27}, -{41,56,-26}, -{41,56,-25}, -{41,56,-24}, -{41,56,-23}, -{41,56,-22}, -{41,56,-21}, -{41,56,-20}, -{41,56,-19}, -{41,56,-18}, -{41,56,-17}, -{41,56,-16}, -{41,56,-15}, -{41,56,-14}, -{41,56,-13}, -{41,56,-12}, -{41,56,-11}, -{41,56,-10}, -{41,56,-9}, -{41,56,-8}, -{41,56,-7}, -{41,56,-6}, -{41,56,-5}, -{41,56,-4}, -{41,56,-3}, -{41,56,-2}, -{41,56,-1}, -{41,56,0}, -{41,56,1}, -{41,56,2}, -{41,56,3}, -{41,56,4}, -{41,56,5}, -{41,56,6}, -{41,56,7}, -{41,56,8}, -{41,56,9}, -{41,56,10}, -{41,56,11}, -{41,56,12}, -{41,56,13}, -{41,56,14}, -{41,56,15}, -{41,56,16}, -{41,56,17}, -{41,56,18}, -{41,56,19}, -{41,56,20}, -{41,56,21}, -{41,56,22}, -{41,56,23}, -{41,56,24}, -{41,56,25}, -{41,56,26}, -{41,56,27}, -{41,56,28}, -{41,56,29}, -{41,56,30}, -{41,56,31}, -{41,56,32}, -{41,56,33}, -{41,56,34}, -{41,56,35}, -{41,56,36}, -{41,56,37}, -{41,56,38}, -{41,56,39}, -{41,56,40}, -{41,56,41}, -{41,56,42}, -{41,56,43}, -{41,56,44}, -{41,56,45}, -{41,56,46}, -{41,56,47}, -{41,56,48}, -{41,56,49}, -{41,56,50}, -{41,56,51}, -{41,56,52}, -{41,56,53}, -{41,56,54}, -{41,57,-93}, -{41,57,-92}, -{41,57,-91}, -{41,57,-90}, -{41,57,-89}, -{41,57,-88}, -{41,57,-87}, -{41,57,-86}, -{41,57,-85}, -{41,57,-84}, -{41,57,-83}, -{41,57,-82}, -{41,57,-81}, -{41,57,-80}, -{41,57,-79}, -{41,57,-78}, -{41,57,-77}, -{41,57,-76}, -{41,57,-75}, -{41,57,-74}, -{41,57,-73}, -{41,57,-72}, -{41,57,-71}, -{41,57,-70}, -{41,57,-69}, -{41,57,-68}, -{41,57,-67}, -{41,57,-66}, -{41,57,-65}, -{41,57,-64}, -{41,57,-63}, -{41,57,-62}, -{41,57,-61}, -{41,57,-60}, -{41,57,-59}, -{41,57,-58}, -{41,57,-57}, -{41,57,-56}, -{41,57,-55}, -{41,57,-54}, -{41,57,-53}, -{41,57,-52}, -{41,57,-51}, -{41,57,-50}, -{41,57,-49}, -{41,57,-48}, -{41,57,-47}, -{41,57,-46}, -{41,57,-45}, -{41,57,-44}, -{41,57,-43}, -{41,57,-42}, -{41,57,-41}, -{41,57,-40}, -{41,57,-39}, -{41,57,-38}, -{41,57,-37}, -{41,57,-36}, -{41,57,-35}, -{41,57,-34}, -{41,57,-33}, -{41,57,-32}, -{41,57,-31}, -{41,57,-30}, -{41,57,-29}, -{41,57,-28}, -{41,57,-27}, -{41,57,-26}, -{41,57,-25}, -{41,57,-24}, -{41,57,-23}, -{41,57,-22}, -{41,57,-21}, -{41,57,-20}, -{41,57,-19}, -{41,57,-18}, -{41,57,-17}, -{41,57,-16}, -{41,57,-15}, -{41,57,-14}, -{41,57,-13}, -{41,57,-12}, -{41,57,-11}, -{41,57,-10}, -{41,57,-9}, -{41,57,-8}, -{41,57,-7}, -{41,57,-6}, -{41,57,-5}, -{41,57,-4}, -{41,57,-3}, -{41,57,-2}, -{41,57,-1}, -{41,57,0}, -{41,57,1}, -{41,57,2}, -{41,57,3}, -{41,57,4}, -{41,57,5}, -{41,57,6}, -{41,57,7}, -{41,57,8}, -{41,57,9}, -{41,57,10}, -{41,57,11}, -{41,57,12}, -{41,57,13}, -{41,57,14}, -{41,57,15}, -{41,57,16}, -{41,57,17}, -{41,57,18}, -{41,57,19}, -{41,57,20}, -{41,57,21}, -{41,57,22}, -{41,57,23}, -{41,57,24}, -{41,57,25}, -{41,57,26}, -{41,57,27}, -{41,57,28}, -{41,57,29}, -{41,57,30}, -{41,57,31}, -{41,57,32}, -{41,57,33}, -{41,57,34}, -{41,57,35}, -{41,57,36}, -{41,57,37}, -{41,57,38}, -{41,57,39}, -{41,57,40}, -{41,57,41}, -{41,57,42}, -{41,57,43}, -{41,57,44}, -{41,57,45}, -{41,57,46}, -{41,57,47}, -{41,57,48}, -{41,57,49}, -{41,57,50}, -{41,57,51}, -{41,57,52}, -{41,57,53}, -{41,57,54}, -{41,58,-93}, -{41,58,-92}, -{41,58,-91}, -{41,58,-90}, -{41,58,-89}, -{41,58,-88}, -{41,58,-87}, -{41,58,-86}, -{41,58,-85}, -{41,58,-84}, -{41,58,-83}, -{41,58,-82}, -{41,58,-81}, -{41,58,-80}, -{41,58,-79}, -{41,58,-78}, -{41,58,-77}, -{41,58,-76}, -{41,58,-75}, -{41,58,-74}, -{41,58,-73}, -{41,58,-72}, -{41,58,-71}, -{41,58,-70}, -{41,58,-69}, -{41,58,-68}, -{41,58,-67}, -{41,58,-66}, -{41,58,-65}, -{41,58,-64}, -{41,58,-63}, -{41,58,-62}, -{41,58,-61}, -{41,58,-60}, -{41,58,-59}, -{41,58,-58}, -{41,58,-57}, -{41,58,-56}, -{41,58,-55}, -{41,58,-54}, -{41,58,-53}, -{41,58,-52}, -{41,58,-51}, -{41,58,-50}, -{41,58,-49}, -{41,58,-48}, -{41,58,-47}, -{41,58,-46}, -{41,58,-45}, -{41,58,-44}, -{41,58,-43}, -{41,58,-42}, -{41,58,-41}, -{41,58,-40}, -{41,58,-39}, -{41,58,-38}, -{41,58,-37}, -{41,58,-36}, -{41,58,-35}, -{41,58,-34}, -{41,58,-33}, -{41,58,-32}, -{41,58,-31}, -{41,58,-30}, -{41,58,-29}, -{41,58,-28}, -{41,58,-27}, -{41,58,-26}, -{41,58,-25}, -{41,58,-24}, -{41,58,-23}, -{41,58,-22}, -{41,58,-21}, -{41,58,-20}, -{41,58,-19}, -{41,58,-18}, -{41,58,-17}, -{41,58,-16}, -{41,58,-15}, -{41,58,-14}, -{41,58,-13}, -{41,58,-12}, -{41,58,-11}, -{41,58,-10}, -{41,58,-9}, -{41,58,-8}, -{41,58,-7}, -{41,58,-6}, -{41,58,-5}, -{41,58,-4}, -{41,58,-3}, -{41,58,-2}, -{41,58,-1}, -{41,58,0}, -{41,58,1}, -{41,58,2}, -{41,58,3}, -{41,58,4}, -{41,58,5}, -{41,58,6}, -{41,58,7}, -{41,58,8}, -{41,58,9}, -{41,58,10}, -{41,58,11}, -{41,58,12}, -{41,58,13}, -{41,58,14}, -{41,58,15}, -{41,58,16}, -{41,58,17}, -{41,58,18}, -{41,58,19}, -{41,58,20}, -{41,58,21}, -{41,58,22}, -{41,58,23}, -{41,58,24}, -{41,58,25}, -{41,58,26}, -{41,58,27}, -{41,58,28}, -{41,58,29}, -{41,58,30}, -{41,58,31}, -{41,58,32}, -{41,58,33}, -{41,58,34}, -{41,58,35}, -{41,58,36}, -{41,58,37}, -{41,58,38}, -{41,58,39}, -{41,58,40}, -{41,58,41}, -{41,58,42}, -{41,58,43}, -{41,58,44}, -{41,58,45}, -{41,58,46}, -{41,58,47}, -{41,58,48}, -{41,58,49}, -{41,58,50}, -{41,58,51}, -{41,58,52}, -{41,58,53}, -{41,58,54}, -{41,59,-93}, -{41,59,-92}, -{41,59,-91}, -{41,59,-90}, -{41,59,-89}, -{41,59,-88}, -{41,59,-87}, -{41,59,-86}, -{41,59,-85}, -{41,59,-84}, -{41,59,-83}, -{41,59,-82}, -{41,59,-81}, -{41,59,-80}, -{41,59,-79}, -{41,59,-78}, -{41,59,-77}, -{41,59,-76}, -{41,59,-75}, -{41,59,-74}, -{41,59,-73}, -{41,59,-72}, -{41,59,-71}, -{41,59,-70}, -{41,59,-69}, -{41,59,-68}, -{41,59,-67}, -{41,59,-66}, -{41,59,-65}, -{41,59,-64}, -{41,59,-63}, -{41,59,-62}, -{41,59,-61}, -{41,59,-60}, -{41,59,-59}, -{41,59,-58}, -{41,59,-57}, -{41,59,-56}, -{41,59,-55}, -{41,59,-54}, -{41,59,-53}, -{41,59,-52}, -{41,59,-51}, -{41,59,-50}, -{41,59,-49}, -{41,59,-48}, -{41,59,-47}, -{41,59,-46}, -{41,59,-45}, -{41,59,-44}, -{41,59,-43}, -{41,59,-42}, -{41,59,-41}, -{41,59,-40}, -{41,59,-39}, -{41,59,-38}, -{41,59,-37}, -{41,59,-36}, -{41,59,-35}, -{41,59,-34}, -{41,59,-33}, -{41,59,-32}, -{41,59,-31}, -{41,59,-30}, -{41,59,-29}, -{41,59,-28}, -{41,59,-27}, -{41,59,-26}, -{41,59,-25}, -{41,59,-24}, -{41,59,-23}, -{41,59,-22}, -{41,59,-21}, -{41,59,-20}, -{41,59,-19}, -{41,59,-18}, -{41,59,-17}, -{41,59,-16}, -{41,59,-15}, -{41,59,-14}, -{41,59,-13}, -{41,59,-12}, -{41,59,-11}, -{41,59,-10}, -{41,59,-9}, -{41,59,-8}, -{41,59,-7}, -{41,59,-6}, -{41,59,-5}, -{41,59,-4}, -{41,59,-3}, -{41,59,-2}, -{41,59,-1}, -{41,59,0}, -{41,59,1}, -{41,59,2}, -{41,59,3}, -{41,59,4}, -{41,59,5}, -{41,59,6}, -{41,59,7}, -{41,59,8}, -{41,59,9}, -{41,59,10}, -{41,59,11}, -{41,59,12}, -{41,59,13}, -{41,59,14}, -{41,59,15}, -{41,59,16}, -{41,59,17}, -{41,59,18}, -{41,59,19}, -{41,59,20}, -{41,59,21}, -{41,59,22}, -{41,59,23}, -{41,59,24}, -{41,59,25}, -{41,59,26}, -{41,59,27}, -{41,59,28}, -{41,59,29}, -{41,59,30}, -{41,59,31}, -{41,59,32}, -{41,59,33}, -{41,59,34}, -{41,59,35}, -{41,59,36}, -{41,59,37}, -{41,59,38}, -{41,59,39}, -{41,59,40}, -{41,59,41}, -{41,59,42}, -{41,59,43}, -{41,59,44}, -{41,59,45}, -{41,59,46}, -{41,59,47}, -{41,59,48}, -{41,59,49}, -{41,59,50}, -{41,59,51}, -{41,59,52}, -{41,59,53}, -{41,59,54}, -{41,60,-93}, -{41,60,-92}, -{41,60,-91}, -{41,60,-90}, -{41,60,-89}, -{41,60,-88}, -{41,60,-87}, -{41,60,-86}, -{41,60,-85}, -{41,60,-84}, -{41,60,-83}, -{41,60,-82}, -{41,60,-81}, -{41,60,-80}, -{41,60,-79}, -{41,60,-78}, -{41,60,-77}, -{41,60,-76}, -{41,60,-75}, -{41,60,-74}, -{41,60,-73}, -{41,60,-72}, -{41,60,-71}, -{41,60,-70}, -{41,60,-69}, -{41,60,-68}, -{41,60,-67}, -{41,60,-66}, -{41,60,-65}, -{41,60,-64}, -{41,60,-63}, -{41,60,-62}, -{41,60,-61}, -{41,60,-60}, -{41,60,-59}, -{41,60,-58}, -{41,60,-57}, -{41,60,-56}, -{41,60,-55}, -{41,60,-54}, -{41,60,-53}, -{41,60,-52}, -{41,60,-51}, -{41,60,-50}, -{41,60,-49}, -{41,60,-48}, -{41,60,-47}, -{41,60,-46}, -{41,60,-45}, -{41,60,-44}, -{41,60,-43}, -{41,60,-42}, -{41,60,-41}, -{41,60,-40}, -{41,60,-39}, -{41,60,-38}, -{41,60,-37}, -{41,60,-36}, -{41,60,-35}, -{41,60,-34}, -{41,60,-33}, -{41,60,-32}, -{41,60,-31}, -{41,60,-30}, -{41,60,-29}, -{41,60,-28}, -{41,60,-27}, -{41,60,-26}, -{41,60,-25}, -{41,60,-24}, -{41,60,-23}, -{41,60,-22}, -{41,60,-21}, -{41,60,-20}, -{41,60,-19}, -{41,60,-18}, -{41,60,-17}, -{41,60,-16}, -{41,60,-15}, -{41,60,-14}, -{41,60,-13}, -{41,60,-12}, -{41,60,-11}, -{41,60,-10}, -{41,60,-9}, -{41,60,-8}, -{41,60,-7}, -{41,60,-6}, -{41,60,-5}, -{41,60,-4}, -{41,60,-3}, -{41,60,-2}, -{41,60,-1}, -{41,60,0}, -{41,60,1}, -{41,60,2}, -{41,60,3}, -{41,60,4}, -{41,60,5}, -{41,60,6}, -{41,60,7}, -{41,60,8}, -{41,60,9}, -{41,60,10}, -{41,60,11}, -{41,60,12}, -{41,60,13}, -{41,60,14}, -{41,60,15}, -{41,60,16}, -{41,60,17}, -{41,60,18}, -{41,60,19}, -{41,60,20}, -{41,60,21}, -{41,60,22}, -{41,60,23}, -{41,60,24}, -{41,60,25}, -{41,60,26}, -{41,60,27}, -{41,60,28}, -{41,60,29}, -{41,60,30}, -{41,60,31}, -{41,60,32}, -{41,60,33}, -{41,60,34}, -{41,60,35}, -{41,60,36}, -{41,60,37}, -{41,60,38}, -{41,60,39}, -{41,60,40}, -{41,60,41}, -{41,60,42}, -{41,60,43}, -{41,60,44}, -{41,60,45}, -{41,60,46}, -{41,60,47}, -{41,60,48}, -{41,60,49}, -{41,60,50}, -{41,60,51}, -{41,60,52}, -{41,60,53}, -{41,60,54}, -{41,61,-93}, -{41,61,-92}, -{41,61,-91}, -{41,61,-90}, -{41,61,-89}, -{41,61,-88}, -{41,61,-87}, -{41,61,-86}, -{41,61,-85}, -{41,61,-84}, -{41,61,-83}, -{41,61,-82}, -{41,61,-81}, -{41,61,-80}, -{41,61,-79}, -{41,61,-78}, -{41,61,-77}, -{41,61,-76}, -{41,61,-75}, -{41,61,-74}, -{41,61,-73}, -{41,61,-72}, -{41,61,-71}, -{41,61,-70}, -{41,61,-69}, -{41,61,-68}, -{41,61,-67}, -{41,61,-66}, -{41,61,-65}, -{41,61,-64}, -{41,61,-63}, -{41,61,-62}, -{41,61,-61}, -{41,61,-60}, -{41,61,-59}, -{41,61,-58}, -{41,61,-57}, -{41,61,-56}, -{41,61,-55}, -{41,61,-54}, -{41,61,-53}, -{41,61,-52}, -{41,61,-51}, -{41,61,-50}, -{41,61,-49}, -{41,61,-48}, -{41,61,-47}, -{41,61,-46}, -{41,61,-45}, -{41,61,-44}, -{41,61,-43}, -{41,61,-42}, -{41,61,-41}, -{41,61,-40}, -{41,61,-39}, -{41,61,-38}, -{41,61,-37}, -{41,61,-36}, -{41,61,-35}, -{41,61,-34}, -{41,61,-33}, -{41,61,-32}, -{41,61,-31}, -{41,61,-30}, -{41,61,-29}, -{41,61,-28}, -{41,61,-27}, -{41,61,-26}, -{41,61,-25}, -{41,61,-24}, -{41,61,-23}, -{41,61,-22}, -{41,61,-21}, -{41,61,-20}, -{41,61,-19}, -{41,61,-18}, -{41,61,-17}, -{41,61,-16}, -{41,61,-15}, -{41,61,-14}, -{41,61,-13}, -{41,61,-12}, -{41,61,-11}, -{41,61,-10}, -{41,61,-9}, -{41,61,-8}, -{41,61,-7}, -{41,61,-6}, -{41,61,-5}, -{41,61,-4}, -{41,61,-3}, -{41,61,-2}, -{41,61,-1}, -{41,61,0}, -{41,61,1}, -{41,61,2}, -{41,61,3}, -{41,61,4}, -{41,61,5}, -{41,61,6}, -{41,61,7}, -{41,61,8}, -{41,61,9}, -{41,61,10}, -{41,61,11}, -{41,61,12}, -{41,61,13}, -{41,61,14}, -{41,61,15}, -{41,61,16}, -{41,61,17}, -{41,61,18}, -{41,61,19}, -{41,61,20}, -{41,61,21}, -{41,61,22}, -{41,61,23}, -{41,61,24}, -{41,61,25}, -{41,61,26}, -{41,61,27}, -{41,61,28}, -{41,61,29}, -{41,61,30}, -{41,61,31}, -{41,61,32}, -{41,61,33}, -{41,61,34}, -{41,61,35}, -{41,61,36}, -{41,61,37}, -{41,61,38}, -{41,61,39}, -{41,61,40}, -{41,61,41}, -{41,61,42}, -{41,61,43}, -{41,61,44}, -{41,61,45}, -{41,61,46}, -{41,61,47}, -{41,61,48}, -{41,61,49}, -{41,61,50}, -{41,61,51}, -{41,61,52}, -{41,61,53}, -{41,61,54}, -{41,62,-93}, -{41,62,-92}, -{41,62,-91}, -{41,62,-90}, -{41,62,-89}, -{41,62,-88}, -{41,62,-87}, -{41,62,-86}, -{41,62,-85}, -{41,62,-84}, -{41,62,-83}, -{41,62,-82}, -{41,62,-81}, -{41,62,-80}, -{41,62,-79}, -{41,62,-78}, -{41,62,-77}, -{41,62,-76}, -{41,62,-75}, -{41,62,-74}, -{41,62,-73}, -{41,62,-72}, -{41,62,-71}, -{41,62,-70}, -{41,62,-69}, -{41,62,-68}, -{41,62,-67}, -{41,62,-66}, -{41,62,-65}, -{41,62,-64}, -{41,62,-63}, -{41,62,-62}, -{41,62,-61}, -{41,62,-60}, -{41,62,-59}, -{41,62,-58}, -{41,62,-57}, -{41,62,-56}, -{41,62,-55}, -{41,62,-54}, -{41,62,-53}, -{41,62,-52}, -{41,62,-51}, -{41,62,-50}, -{41,62,-49}, -{41,62,-48}, -{41,62,-47}, -{41,62,-46}, -{41,62,-45}, -{41,62,-44}, -{41,62,-43}, -{41,62,-42}, -{41,62,-41}, -{41,62,-40}, -{41,62,-39}, -{41,62,-38}, -{41,62,-37}, -{41,62,-36}, -{41,62,-35}, -{41,62,-34}, -{41,62,-33}, -{41,62,-32}, -{41,62,-31}, -{41,62,-30}, -{41,62,-29}, -{41,62,-28}, -{41,62,-27}, -{41,62,-26}, -{41,62,-25}, -{41,62,-24}, -{41,62,-23}, -{41,62,-22}, -{41,62,-21}, -{41,62,-20}, -{41,62,-19}, -{41,62,-18}, -{41,62,-17}, -{41,62,-16}, -{41,62,-15}, -{41,62,-14}, -{41,62,-13}, -{41,62,-12}, -{41,62,-11}, -{41,62,-10}, -{41,62,-9}, -{41,62,-8}, -{41,62,-7}, -{41,62,-6}, -{41,62,-5}, -{41,62,-4}, -{41,62,-3}, -{41,62,-2}, -{41,62,-1}, -{41,62,0}, -{41,62,1}, -{41,62,2}, -{41,62,3}, -{41,62,4}, -{41,62,5}, -{41,62,6}, -{41,62,7}, -{41,62,8}, -{41,62,9}, -{41,62,10}, -{41,62,11}, -{41,62,12}, -{41,62,13}, -{41,62,14}, -{41,62,15}, -{41,62,16}, -{41,62,17}, -{41,62,18}, -{41,62,19}, -{41,62,20}, -{41,62,21}, -{41,62,22}, -{41,62,23}, -{41,62,24}, -{41,62,25}, -{41,62,26}, -{41,62,27}, -{41,62,28}, -{41,62,29}, -{41,62,30}, -{41,62,31}, -{41,62,32}, -{41,62,33}, -{41,62,34}, -{41,62,35}, -{41,62,36}, -{41,62,37}, -{41,62,38}, -{41,62,39}, -{41,62,40}, -{41,62,41}, -{41,62,42}, -{41,62,43}, -{41,62,44}, -{41,62,45}, -{41,62,46}, -{41,62,47}, -{41,62,48}, -{41,62,49}, -{41,62,50}, -{41,62,51}, -{41,62,52}, -{41,62,53}, -{41,62,54}, -{41,63,-93}, -{41,63,-92}, -{41,63,-91}, -{41,63,-90}, -{41,63,-89}, -{41,63,-88}, -{41,63,-87}, -{41,63,-86}, -{41,63,-85}, -{41,63,-84}, -{41,63,-83}, -{41,63,-82}, -{41,63,-81}, -{41,63,-80}, -{41,63,-79}, -{41,63,-78}, -{41,63,-77}, -{41,63,-76}, -{41,63,-75}, -{41,63,-74}, -{41,63,-73}, -{41,63,-72}, -{41,63,-71}, -{41,63,-70}, -{41,63,-69}, -{41,63,-68}, -{41,63,-67}, -{41,63,-66}, -{41,63,-65}, -{41,63,-64}, -{41,63,-63}, -{41,63,-62}, -{41,63,-61}, -{41,63,-60}, -{41,63,-59}, -{41,63,-58}, -{41,63,-57}, -{41,63,-56}, -{41,63,-55}, -{41,63,-54}, -{41,63,-53}, -{41,63,-52}, -{41,63,-51}, -{41,63,-50}, -{41,63,-49}, -{41,63,-48}, -{41,63,-47}, -{41,63,-46}, -{41,63,-45}, -{41,63,-44}, -{41,63,-43}, -{41,63,-42}, -{41,63,-41}, -{41,63,-40}, -{41,63,-39}, -{41,63,-38}, -{41,63,-37}, -{41,63,-36}, -{41,63,-35}, -{41,63,-34}, -{41,63,-33}, -{41,63,-32}, -{41,63,-31}, -{41,63,-30}, -{41,63,-29}, -{41,63,-28}, -{41,63,-27}, -{41,63,-26}, -{41,63,-25}, -{41,63,-24}, -{41,63,-23}, -{41,63,-22}, -{41,63,-21}, -{41,63,-20}, -{41,63,-19}, -{41,63,-18}, -{41,63,-17}, -{41,63,-16}, -{41,63,-15}, -{41,63,-14}, -{41,63,-13}, -{41,63,-12}, -{41,63,-11}, -{41,63,-10}, -{41,63,-9}, -{41,63,-8}, -{41,63,-7}, -{41,63,-6}, -{41,63,-5}, -{41,63,-4}, -{41,63,-3}, -{41,63,-2}, -{41,63,-1}, -{41,63,0}, -{41,63,1}, -{41,63,2}, -{41,63,3}, -{41,63,4}, -{41,63,5}, -{41,63,6}, -{41,63,7}, -{41,63,8}, -{41,63,9}, -{41,63,10}, -{41,63,11}, -{41,63,12}, -{41,63,13}, -{41,63,14}, -{41,63,15}, -{41,63,16}, -{41,63,17}, -{41,63,18}, -{41,63,19}, -{41,63,20}, -{41,63,21}, -{41,63,22}, -{41,63,23}, -{41,63,24}, -{41,63,25}, -{41,63,26}, -{41,63,27}, -{41,63,28}, -{41,63,29}, -{41,63,30}, -{41,63,31}, -{41,63,32}, -{41,63,33}, -{41,63,34}, -{41,63,35}, -{41,63,36}, -{41,63,37}, -{41,63,38}, -{41,63,39}, -{41,63,40}, -{41,63,41}, -{41,63,42}, -{41,63,43}, -{41,63,44}, -{41,63,45}, -{41,63,46}, -{41,63,47}, -{41,63,48}, -{41,63,49}, -{41,63,50}, -{41,63,51}, -{41,63,52}, -{41,63,53}, -{41,63,54}, -{41,63,55}, -{41,64,-93}, -{41,64,-92}, -{41,64,-91}, -{41,64,-90}, -{41,64,-89}, -{41,64,-88}, -{41,64,-87}, -{41,64,-86}, -{41,64,-85}, -{41,64,-84}, -{41,64,-83}, -{41,64,-82}, -{41,64,-81}, -{41,64,-80}, -{41,64,-79}, -{41,64,-78}, -{41,64,-77}, -{41,64,-76}, -{41,64,-75}, -{41,64,-74}, -{41,64,-73}, -{41,64,-72}, -{41,64,-71}, -{41,64,-70}, -{41,64,-69}, -{41,64,-68}, -{41,64,-67}, -{41,64,-66}, -{41,64,-65}, -{41,64,-64}, -{41,64,-63}, -{41,64,-62}, -{41,64,-61}, -{41,64,-60}, -{41,64,-59}, -{41,64,-58}, -{41,64,-57}, -{41,64,-56}, -{41,64,-55}, -{41,64,-54}, -{41,64,-53}, -{41,64,-52}, -{41,64,-51}, -{41,64,-50}, -{41,64,-49}, -{41,64,-48}, -{41,64,-47}, -{41,64,-46}, -{41,64,-45}, -{41,64,-44}, -{41,64,-43}, -{41,64,-42}, -{41,64,-41}, -{41,64,-40}, -{41,64,-39}, -{41,64,-38}, -{41,64,-37}, -{41,64,-36}, -{41,64,-35}, -{41,64,-34}, -{41,64,-33}, -{41,64,-32}, -{41,64,-31}, -{41,64,-30}, -{41,64,-29}, -{41,64,-28}, -{41,64,-27}, -{41,64,-26}, -{41,64,-25}, -{41,64,-24}, -{41,64,-23}, -{41,64,-22}, -{41,64,-21}, -{41,64,-20}, -{41,64,-19}, -{41,64,-18}, -{41,64,-17}, -{41,64,-16}, -{41,64,-15}, -{41,64,-14}, -{41,64,-13}, -{41,64,-12}, -{41,64,-11}, -{41,64,-10}, -{41,64,-9}, -{41,64,-8}, -{41,64,-7}, -{41,64,-6}, -{41,64,-5}, -{41,64,-4}, -{41,64,-3}, -{41,64,-2}, -{41,64,-1}, -{41,64,0}, -{41,64,1}, -{41,64,2}, -{41,64,3}, -{41,64,4}, -{41,64,5}, -{41,64,6}, -{41,64,7}, -{41,64,8}, -{41,64,9}, -{41,64,10}, -{41,64,11}, -{41,64,12}, -{41,64,13}, -{41,64,14}, -{41,64,15}, -{41,64,16}, -{41,64,17}, -{41,64,18}, -{41,64,19}, -{41,64,20}, -{41,64,21}, -{41,64,22}, -{41,64,23}, -{41,64,24}, -{41,64,25}, -{41,64,26}, -{41,64,27}, -{41,64,28}, -{41,64,29}, -{41,64,30}, -{41,64,31}, -{41,64,32}, -{41,64,33}, -{41,64,34}, -{41,64,35}, -{41,64,36}, -{41,64,37}, -{41,64,38}, -{41,64,39}, -{41,64,40}, -{41,64,41}, -{41,64,42}, -{41,64,43}, -{41,64,44}, -{41,64,45}, -{41,64,46}, -{41,64,47}, -{41,64,48}, -{41,64,49}, -{41,64,50}, -{41,64,51}, -{41,64,52}, -{41,64,53}, -{41,64,54}, -{41,64,55}, -{41,65,-93}, -{41,65,-92}, -{41,65,-91}, -{41,65,-90}, -{41,65,-89}, -{41,65,-88}, -{41,65,-87}, -{41,65,-86}, -{41,65,-85}, -{41,65,-84}, -{41,65,-83}, -{41,65,-82}, -{41,65,-81}, -{41,65,-80}, -{41,65,-79}, -{41,65,-78}, -{41,65,-77}, -{41,65,-76}, -{41,65,-75}, -{41,65,-74}, -{41,65,-73}, -{41,65,-72}, -{41,65,-71}, -{41,65,-70}, -{41,65,-69}, -{41,65,-68}, -{41,65,-67}, -{41,65,-66}, -{41,65,-65}, -{41,65,-64}, -{41,65,-63}, -{41,65,-62}, -{41,65,-61}, -{41,65,-60}, -{41,65,-59}, -{41,65,-58}, -{41,65,-57}, -{41,65,-56}, -{41,65,-55}, -{41,65,-54}, -{41,65,-53}, -{41,65,-52}, -{41,65,-51}, -{41,65,-50}, -{41,65,-49}, -{41,65,-48}, -{41,65,-47}, -{41,65,-46}, -{41,65,-45}, -{41,65,-44}, -{41,65,-43}, -{41,65,-42}, -{41,65,-41}, -{41,65,-40}, -{41,65,-39}, -{41,65,-38}, -{41,65,-37}, -{41,65,-36}, -{41,65,-35}, -{41,65,-34}, -{41,65,-33}, -{41,65,-32}, -{41,65,-31}, -{41,65,-30}, -{41,65,-29}, -{41,65,-28}, -{41,65,-27}, -{41,65,-26}, -{41,65,-25}, -{41,65,-24}, -{41,65,-23}, -{41,65,-22}, -{41,65,-21}, -{41,65,-20}, -{41,65,-19}, -{41,65,-18}, -{41,65,-17}, -{41,65,-16}, -{41,65,-15}, -{41,65,-14}, -{41,65,-13}, -{41,65,-12}, -{41,65,-11}, -{41,65,-10}, -{41,65,-9}, -{41,65,-8}, -{41,65,-7}, -{41,65,-6}, -{41,65,-5}, -{41,65,-4}, -{41,65,-3}, -{41,65,-2}, -{41,65,-1}, -{41,65,0}, -{41,65,1}, -{41,65,2}, -{41,65,3}, -{41,65,4}, -{41,65,5}, -{41,65,6}, -{41,65,7}, -{41,65,8}, -{41,65,9}, -{41,65,10}, -{41,65,11}, -{41,65,12}, -{41,65,13}, -{41,65,14}, -{41,65,15}, -{41,65,16}, -{41,65,17}, -{41,65,18}, -{41,65,19}, -{41,65,20}, -{41,65,21}, -{41,65,22}, -{41,65,23}, -{41,65,24}, -{41,65,25}, -{41,65,26}, -{41,65,27}, -{41,65,28}, -{41,65,29}, -{41,65,30}, -{41,65,31}, -{41,65,32}, -{41,65,33}, -{41,65,34}, -{41,65,35}, -{41,65,36}, -{41,65,37}, -{41,65,38}, -{41,65,39}, -{41,65,40}, -{41,65,41}, -{41,65,42}, -{41,65,43}, -{41,65,44}, -{41,65,45}, -{41,65,46}, -{41,65,47}, -{41,65,48}, -{41,65,49}, -{41,65,50}, -{41,65,51}, -{41,65,52}, -{41,65,53}, -{41,65,54}, -{41,65,55}, -{41,66,-93}, -{41,66,-92}, -{41,66,-91}, -{41,66,-90}, -{41,66,-89}, -{41,66,-88}, -{41,66,-87}, -{41,66,-86}, -{41,66,-85}, -{41,66,-84}, -{41,66,-83}, -{41,66,-82}, -{41,66,-81}, -{41,66,-80}, -{41,66,-79}, -{41,66,-78}, -{41,66,-77}, -{41,66,-76}, -{41,66,-75}, -{41,66,-74}, -{41,66,-73}, -{41,66,-72}, -{41,66,-71}, -{41,66,-70}, -{41,66,-69}, -{41,66,-68}, -{41,66,-67}, -{41,66,-66}, -{41,66,-65}, -{41,66,-64}, -{41,66,-63}, -{41,66,-62}, -{41,66,-61}, -{41,66,-60}, -{41,66,-59}, -{41,66,-58}, -{41,66,-57}, -{41,66,-56}, -{41,66,-55}, -{41,66,-54}, -{41,66,-53}, -{41,66,-52}, -{41,66,-51}, -{41,66,-50}, -{41,66,-49}, -{41,66,-48}, -{41,66,-47}, -{41,66,-46}, -{41,66,-45}, -{41,66,-44}, -{41,66,-43}, -{41,66,-42}, -{41,66,-41}, -{41,66,-40}, -{41,66,-39}, -{41,66,-38}, -{41,66,-37}, -{41,66,-36}, -{41,66,-35}, -{41,66,-34}, -{41,66,-33}, -{41,66,-32}, -{41,66,-31}, -{41,66,-30}, -{41,66,-29}, -{41,66,-28}, -{41,66,-27}, -{41,66,-26}, -{41,66,-25}, -{41,66,-24}, -{41,66,-23}, -{41,66,-22}, -{41,66,-21}, -{41,66,-20}, -{41,66,-19}, -{41,66,-18}, -{41,66,-17}, -{41,66,-16}, -{41,66,-15}, -{41,66,-14}, -{41,66,-13}, -{41,66,-12}, -{41,66,-11}, -{41,66,-10}, -{41,66,-9}, -{41,66,-8}, -{41,66,-7}, -{41,66,-6}, -{41,66,-5}, -{41,66,-4}, -{41,66,-3}, -{41,66,-2}, -{41,66,-1}, -{41,66,0}, -{41,66,1}, -{41,66,2}, -{41,66,3}, -{41,66,4}, -{41,66,5}, -{41,66,6}, -{41,66,7}, -{41,66,8}, -{41,66,9}, -{41,66,10}, -{41,66,11}, -{41,66,12}, -{41,66,13}, -{41,66,14}, -{41,66,15}, -{41,66,16}, -{41,66,17}, -{41,66,18}, -{41,66,19}, -{41,66,20}, -{41,66,21}, -{41,66,22}, -{41,66,23}, -{41,66,24}, -{41,66,25}, -{41,66,26}, -{41,66,27}, -{41,66,28}, -{41,66,29}, -{41,66,30}, -{41,66,31}, -{41,66,32}, -{41,66,33}, -{41,66,34}, -{41,66,35}, -{41,66,36}, -{41,66,37}, -{41,66,38}, -{41,66,39}, -{41,66,40}, -{41,66,41}, -{41,66,42}, -{41,66,43}, -{41,66,44}, -{41,66,45}, -{41,66,46}, -{41,66,47}, -{41,66,48}, -{41,66,49}, -{41,66,50}, -{41,66,51}, -{41,66,52}, -{41,66,53}, -{41,66,54}, -{41,66,55}, -{41,67,-93}, -{41,67,-92}, -{41,67,-91}, -{41,67,-90}, -{41,67,-89}, -{41,67,-88}, -{41,67,-87}, -{41,67,-86}, -{41,67,-85}, -{41,67,-84}, -{41,67,-83}, -{41,67,-82}, -{41,67,-81}, -{41,67,-80}, -{41,67,-79}, -{41,67,-78}, -{41,67,-77}, -{41,67,-76}, -{41,67,-75}, -{41,67,-74}, -{41,67,-73}, -{41,67,-72}, -{41,67,-71}, -{41,67,-70}, -{41,67,-69}, -{41,67,-68}, -{41,67,-67}, -{41,67,-66}, -{41,67,-65}, -{41,67,-64}, -{41,67,-63}, -{41,67,-62}, -{41,67,-61}, -{41,67,-60}, -{41,67,-59}, -{41,67,-58}, -{41,67,-57}, -{41,67,-56}, -{41,67,-55}, -{41,67,-54}, -{41,67,-53}, -{41,67,-52}, -{41,67,-51}, -{41,67,-50}, -{41,67,-49}, -{41,67,-48}, -{41,67,-47}, -{41,67,-46}, -{41,67,-45}, -{41,67,-44}, -{41,67,-43}, -{41,67,-42}, -{41,67,-41}, -{41,67,-40}, -{41,67,-39}, -{41,67,-38}, -{41,67,-37}, -{41,67,-36}, -{41,67,-35}, -{41,67,-34}, -{41,67,-33}, -{41,67,-32}, -{41,67,-31}, -{41,67,-30}, -{41,67,-29}, -{41,67,-28}, -{41,67,-27}, -{41,67,-26}, -{41,67,-25}, -{41,67,-24}, -{41,67,-23}, -{41,67,-22}, -{41,67,-21}, -{41,67,-20}, -{41,67,-19}, -{41,67,-18}, -{41,67,-17}, -{41,67,-16}, -{41,67,-15}, -{41,67,-14}, -{41,67,-13}, -{41,67,-12}, -{41,67,-11}, -{41,67,-10}, -{41,67,-9}, -{41,67,-8}, -{41,67,-7}, -{41,67,-6}, -{41,67,-5}, -{41,67,-4}, -{41,67,-3}, -{41,67,-2}, -{41,67,-1}, -{41,67,0}, -{41,67,1}, -{41,67,2}, -{41,67,3}, -{41,67,4}, -{41,67,5}, -{41,67,6}, -{41,67,7}, -{41,67,8}, -{41,67,9}, -{41,67,10}, -{41,67,11}, -{41,67,12}, -{41,67,13}, -{41,67,14}, -{41,67,15}, -{41,67,16}, -{41,67,17}, -{41,67,18}, -{41,67,19}, -{41,67,20}, -{41,67,21}, -{41,67,22}, -{41,67,23}, -{41,68,-93}, -{41,68,-92}, -{41,68,-91}, -{41,68,-90}, -{41,68,-89}, -{41,68,-88}, -{41,68,-87}, -{41,68,-86}, -{41,68,-85}, -{41,68,-84}, -{41,68,-83}, -{41,68,-82}, -{41,68,-81}, -{41,68,-80}, -{41,68,-79}, -{41,68,-78}, -{41,68,-77}, -{41,68,-76}, -{41,68,-75}, -{41,68,-74}, -{41,68,-73}, -{41,68,-72}, -{41,68,-71}, -{41,68,-70}, -{41,68,-69}, -{41,68,-68}, -{41,68,-67}, -{41,68,-66}, -{41,68,-65}, -{41,68,-64}, -{41,68,-63}, -{41,68,-62}, -{41,68,-61}, -{41,68,-60}, -{41,68,-59}, -{41,68,-58}, -{41,68,-57}, -{41,68,-56}, -{41,68,-55}, -{41,68,-54}, -{41,68,-53}, -{41,68,-52}, -{41,68,-51}, -{41,68,-50}, -{41,68,-49}, -{41,68,-48}, -{41,68,-47}, -{41,68,-46}, -{41,68,-45}, -{41,68,-44}, -{41,68,-43}, -{41,68,-42}, -{41,68,-41}, -{41,68,-40}, -{41,68,-39}, -{41,68,-38}, -{41,68,-37}, -{41,68,-36}, -{41,68,-35}, -{41,68,-34}, -{41,68,-33}, -{41,68,-32}, -{41,68,-31}, -{41,68,-30}, -{41,68,-29}, -{41,68,-28}, -{41,68,-27}, -{41,68,-26}, -{41,68,-25}, -{41,68,-24}, -{41,68,-23}, -{41,68,-22}, -{41,68,-21}, -{41,68,-20}, -{41,68,-19}, -{41,68,-18}, -{41,68,-17}, -{41,68,-16}, -{41,68,-15}, -{41,68,-14}, -{41,68,-13}, -{41,68,-12}, -{41,68,-11}, -{41,68,-10}, -{41,68,-9}, -{41,68,-8}, -{41,68,-7}, -{41,68,-6}, -{41,68,-5}, -{41,68,-4}, -{41,68,-3}, -{41,68,-2}, -{41,68,-1}, -{41,68,0}, -{41,68,1}, -{41,68,2}, -{41,68,3}, -{41,68,4}, -{41,68,5}, -{41,69,-93}, -{41,69,-92}, -{41,69,-91}, -{41,69,-90}, -{41,69,-89}, -{41,69,-88}, -{41,69,-87}, -{41,69,-86}, -{41,69,-85}, -{41,69,-84}, -{41,69,-83}, -{41,69,-82}, -{41,69,-81}, -{41,69,-80}, -{41,69,-79}, -{41,69,-78}, -{41,69,-77}, -{41,69,-76}, -{41,69,-75}, -{41,69,-74}, -{41,69,-73}, -{41,69,-72}, -{41,69,-71}, -{41,69,-70}, -{41,69,-69}, -{41,69,-68}, -{41,69,-67}, -{41,69,-66}, -{41,69,-65}, -{41,69,-64}, -{41,69,-63}, -{41,69,-62}, -{41,69,-61}, -{41,69,-60}, -{41,69,-59}, -{41,69,-58}, -{41,69,-57}, -{41,69,-56}, -{41,69,-55}, -{41,69,-54}, -{41,69,-53}, -{41,69,-52}, -{41,69,-51}, -{41,69,-50}, -{41,69,-49}, -{41,69,-48}, -{41,69,-47}, -{41,69,-46}, -{41,69,-45}, -{41,69,-44}, -{41,69,-43}, -{41,69,-42}, -{41,69,-41}, -{41,69,-40}, -{41,69,-39}, -{41,69,-38}, -{41,69,-37}, -{41,69,-36}, -{41,69,-35}, -{41,69,-34}, -{41,69,-33}, -{41,69,-32}, -{41,69,-31}, -{41,69,-30}, -{41,69,-29}, -{41,69,-28}, -{41,69,-27}, -{41,69,-26}, -{41,69,-25}, -{41,69,-24}, -{41,69,-23}, -{41,69,-22}, -{41,69,-21}, -{41,69,-20}, -{41,69,-19}, -{41,69,-18}, -{41,69,-17}, -{41,69,-16}, -{41,69,-15}, -{41,69,-14}, -{41,69,-13}, -{41,69,-12}, -{41,69,-11}, -{41,69,-10}, -{41,69,-9}, -{41,69,-8}, -{41,70,-93}, -{41,70,-92}, -{41,70,-91}, -{41,70,-90}, -{41,70,-89}, -{41,70,-88}, -{41,70,-87}, -{41,70,-86}, -{41,70,-85}, -{41,70,-84}, -{41,70,-83}, -{41,70,-82}, -{41,70,-81}, -{41,70,-80}, -{41,70,-79}, -{41,70,-78}, -{41,70,-77}, -{41,70,-76}, -{41,70,-75}, -{41,70,-74}, -{41,70,-73}, -{41,70,-72}, -{41,70,-71}, -{41,70,-70}, -{41,70,-69}, -{41,70,-68}, -{41,70,-67}, -{41,70,-66}, -{41,70,-65}, -{41,70,-64}, -{41,70,-63}, -{41,70,-62}, -{41,70,-61}, -{41,70,-60}, -{41,70,-59}, -{41,70,-58}, -{41,70,-57}, -{41,70,-56}, -{41,70,-55}, -{41,70,-54}, -{41,70,-53}, -{41,70,-52}, -{41,70,-51}, -{41,70,-50}, -{41,70,-49}, -{41,70,-48}, -{41,70,-47}, -{41,70,-46}, -{41,70,-45}, -{41,70,-44}, -{41,70,-43}, -{41,70,-42}, -{41,70,-41}, -{41,70,-40}, -{41,70,-39}, -{41,70,-38}, -{41,70,-37}, -{41,70,-36}, -{41,70,-35}, -{41,70,-34}, -{41,70,-33}, -{41,70,-32}, -{41,70,-31}, -{41,70,-30}, -{41,70,-29}, -{41,70,-28}, -{41,70,-27}, -{41,70,-26}, -{41,70,-25}, -{41,70,-24}, -{41,70,-23}, -{41,70,-22}, -{41,70,-21}, -{41,70,-20}, -{41,70,-19}, -{41,71,-93}, -{41,71,-92}, -{41,71,-91}, -{41,71,-90}, -{41,71,-89}, -{41,71,-88}, -{41,71,-87}, -{41,71,-86}, -{41,71,-85}, -{41,71,-84}, -{41,71,-83}, -{41,71,-82}, -{41,71,-81}, -{41,71,-80}, -{41,71,-79}, -{41,71,-78}, -{41,71,-77}, -{41,71,-76}, -{41,71,-75}, -{41,71,-74}, -{41,71,-73}, -{41,71,-72}, -{41,71,-71}, -{41,71,-70}, -{41,71,-69}, -{41,71,-68}, -{41,71,-67}, -{41,71,-66}, -{41,71,-65}, -{41,71,-64}, -{41,71,-63}, -{41,71,-62}, -{41,71,-61}, -{41,71,-60}, -{41,71,-59}, -{41,71,-58}, -{41,71,-57}, -{41,71,-56}, -{41,71,-55}, -{41,71,-54}, -{41,71,-53}, -{41,71,-52}, -{41,71,-51}, -{41,71,-50}, -{41,71,-49}, -{41,71,-48}, -{41,71,-47}, -{41,71,-46}, -{41,71,-45}, -{41,71,-44}, -{41,71,-43}, -{41,71,-42}, -{41,71,-41}, -{41,71,-40}, -{41,71,-39}, -{41,71,-38}, -{41,71,-37}, -{41,71,-36}, -{41,71,-35}, -{41,71,-34}, -{41,71,-33}, -{41,71,-32}, -{41,71,-31}, -{41,71,-30}, -{41,71,-29}, -{41,71,-28}, -{41,72,-93}, -{41,72,-92}, -{41,72,-91}, -{41,72,-90}, -{41,72,-89}, -{41,72,-88}, -{41,72,-87}, -{41,72,-86}, -{41,72,-85}, -{41,72,-84}, -{41,72,-83}, -{41,72,-82}, -{41,72,-81}, -{41,72,-80}, -{41,72,-79}, -{41,72,-78}, -{41,72,-77}, -{41,72,-76}, -{41,72,-75}, -{41,72,-74}, -{41,72,-73}, -{41,72,-72}, -{41,72,-71}, -{41,72,-70}, -{41,72,-69}, -{41,72,-68}, -{41,72,-67}, -{41,72,-66}, -{41,72,-65}, -{41,72,-64}, -{41,72,-63}, -{41,72,-62}, -{41,72,-61}, -{41,72,-60}, -{41,72,-59}, -{41,72,-58}, -{41,72,-57}, -{41,72,-56}, -{41,72,-55}, -{41,72,-54}, -{41,72,-53}, -{41,72,-52}, -{41,72,-51}, -{41,72,-50}, -{41,72,-49}, -{41,72,-48}, -{41,72,-47}, -{41,72,-46}, -{41,72,-45}, -{41,72,-44}, -{41,72,-43}, -{41,72,-42}, -{41,72,-41}, -{41,72,-40}, -{41,72,-39}, -{41,72,-38}, -{41,72,-37}, -{41,72,-36}, -{41,72,-35}, -{41,73,-93}, -{41,73,-92}, -{41,73,-91}, -{41,73,-90}, -{41,73,-89}, -{41,73,-88}, -{41,73,-87}, -{41,73,-86}, -{41,73,-85}, -{41,73,-84}, -{41,73,-83}, -{41,73,-82}, -{41,73,-81}, -{41,73,-80}, -{41,73,-79}, -{41,73,-78}, -{41,73,-77}, -{41,73,-76}, -{41,73,-75}, -{41,73,-74}, -{41,73,-73}, -{41,73,-72}, -{41,73,-71}, -{41,73,-70}, -{41,73,-69}, -{41,73,-68}, -{41,73,-67}, -{41,73,-66}, -{41,73,-65}, -{41,73,-64}, -{41,73,-63}, -{41,73,-62}, -{41,73,-61}, -{41,73,-60}, -{41,73,-59}, -{41,73,-58}, -{41,73,-57}, -{41,73,-56}, -{41,73,-55}, -{41,73,-54}, -{41,73,-53}, -{41,73,-52}, -{41,73,-51}, -{41,73,-50}, -{41,73,-49}, -{41,73,-48}, -{41,73,-47}, -{41,73,-46}, -{41,73,-45}, -{41,73,-44}, -{41,73,-43}, -{41,74,-93}, -{41,74,-92}, -{41,74,-91}, -{41,74,-90}, -{41,74,-89}, -{41,74,-88}, -{41,74,-87}, -{41,74,-86}, -{41,74,-85}, -{41,74,-84}, -{41,74,-83}, -{41,74,-82}, -{41,74,-81}, -{41,74,-80}, -{41,74,-79}, -{41,74,-78}, -{41,74,-77}, -{41,74,-76}, -{41,74,-75}, -{41,74,-74}, -{41,74,-73}, -{41,74,-72}, -{41,74,-71}, -{41,74,-70}, -{41,74,-69}, -{41,74,-68}, -{41,74,-67}, -{41,74,-66}, -{41,74,-65}, -{41,74,-64}, -{41,74,-63}, -{41,74,-62}, -{41,74,-61}, -{41,74,-60}, -{41,74,-59}, -{41,74,-58}, -{41,74,-57}, -{41,74,-56}, -{41,74,-55}, -{41,74,-54}, -{41,74,-53}, -{41,74,-52}, -{41,74,-51}, -{41,74,-50}, -{41,74,-49}, -{41,75,-93}, -{41,75,-92}, -{41,75,-91}, -{41,75,-90}, -{41,75,-89}, -{41,75,-88}, -{41,75,-87}, -{41,75,-86}, -{41,75,-85}, -{41,75,-84}, -{41,75,-83}, -{41,75,-82}, -{41,75,-81}, -{41,75,-80}, -{41,75,-79}, -{41,75,-78}, -{41,75,-77}, -{41,75,-76}, -{41,75,-75}, -{41,75,-74}, -{41,75,-73}, -{41,75,-72}, -{41,75,-71}, -{41,75,-70}, -{41,75,-69}, -{41,75,-68}, -{41,75,-67}, -{41,75,-66}, -{41,75,-65}, -{41,75,-64}, -{41,75,-63}, -{41,75,-62}, -{41,75,-61}, -{41,75,-60}, -{41,75,-59}, -{41,75,-58}, -{41,75,-57}, -{41,75,-56}, -{41,75,-55}, -{41,76,-93}, -{41,76,-92}, -{41,76,-91}, -{41,76,-90}, -{41,76,-89}, -{41,76,-88}, -{41,76,-87}, -{41,76,-86}, -{41,76,-85}, -{41,76,-84}, -{41,76,-83}, -{41,76,-82}, -{41,76,-81}, -{41,76,-80}, -{41,76,-79}, -{41,76,-78}, -{41,76,-77}, -{41,76,-76}, -{41,76,-75}, -{41,76,-74}, -{41,76,-73}, -{41,76,-72}, -{41,76,-71}, -{41,76,-70}, -{41,76,-69}, -{41,76,-68}, -{41,76,-67}, -{41,76,-66}, -{41,76,-65}, -{41,76,-64}, -{41,76,-63}, -{41,76,-62}, -{41,76,-61}, -{41,76,-60}, -{41,77,-93}, -{41,77,-92}, -{41,77,-91}, -{41,77,-90}, -{41,77,-89}, -{41,77,-88}, -{41,77,-87}, -{41,77,-86}, -{41,77,-85}, -{41,77,-84}, -{41,77,-83}, -{41,77,-82}, -{41,77,-81}, -{41,77,-80}, -{41,77,-79}, -{41,77,-78}, -{41,77,-77}, -{41,77,-76}, -{41,77,-75}, -{41,77,-74}, -{41,77,-73}, -{41,77,-72}, -{41,77,-71}, -{41,77,-70}, -{41,77,-69}, -{41,77,-68}, -{41,77,-67}, -{41,77,-66}, -{41,78,-93}, -{41,78,-92}, -{41,78,-91}, -{41,78,-90}, -{41,78,-89}, -{41,78,-88}, -{41,78,-87}, -{41,78,-86}, -{41,78,-85}, -{41,78,-84}, -{41,78,-83}, -{41,78,-82}, -{41,78,-81}, -{41,78,-80}, -{41,78,-79}, -{41,78,-78}, -{41,78,-77}, -{41,78,-76}, -{41,78,-75}, -{41,78,-74}, -{41,78,-73}, -{41,78,-72}, -{41,78,-71}, -{41,79,-93}, -{41,79,-92}, -{41,79,-91}, -{41,79,-90}, -{41,79,-89}, -{41,79,-88}, -{41,79,-87}, -{41,79,-86}, -{41,79,-85}, -{41,79,-84}, -{41,79,-83}, -{41,79,-82}, -{41,79,-81}, -{41,79,-80}, -{41,79,-79}, -{41,79,-78}, -{41,79,-77}, -{41,79,-76}, -{41,79,-75}, -{41,80,-93}, -{41,80,-92}, -{41,80,-91}, -{41,80,-90}, -{41,80,-89}, -{41,80,-88}, -{41,80,-87}, -{41,80,-86}, -{41,80,-85}, -{41,80,-84}, -{41,80,-83}, -{41,80,-82}, -{41,80,-81}, -{41,80,-80}, -{41,81,-93}, -{41,81,-92}, -{41,81,-91}, -{41,81,-90}, -{41,81,-89}, -{41,81,-88}, -{41,81,-87}, -{41,81,-86}, -{41,81,-85}, -{41,81,-84}, -{41,82,-93}, -{41,82,-92}, -{41,82,-91}, -{41,82,-90}, -{41,82,-89}, -{41,82,-88}, -{41,83,-93}, -{41,83,-92}, -{42,-48,45}, -{42,-48,46}, -{42,-47,41}, -{42,-47,42}, -{42,-47,43}, -{42,-47,44}, -{42,-47,45}, -{42,-47,46}, -{42,-46,37}, -{42,-46,38}, -{42,-46,39}, -{42,-46,40}, -{42,-46,41}, -{42,-46,42}, -{42,-46,43}, -{42,-46,44}, -{42,-46,45}, -{42,-46,46}, -{42,-45,33}, -{42,-45,34}, -{42,-45,35}, -{42,-45,36}, -{42,-45,37}, -{42,-45,38}, -{42,-45,39}, -{42,-45,40}, -{42,-45,41}, -{42,-45,42}, -{42,-45,43}, -{42,-45,44}, -{42,-45,45}, -{42,-45,46}, -{42,-44,30}, -{42,-44,31}, -{42,-44,32}, -{42,-44,33}, -{42,-44,34}, -{42,-44,35}, -{42,-44,36}, -{42,-44,37}, -{42,-44,38}, -{42,-44,39}, -{42,-44,40}, -{42,-44,41}, -{42,-44,42}, -{42,-44,43}, -{42,-44,44}, -{42,-44,45}, -{42,-44,46}, -{42,-43,27}, -{42,-43,28}, -{42,-43,29}, -{42,-43,30}, -{42,-43,31}, -{42,-43,32}, -{42,-43,33}, -{42,-43,34}, -{42,-43,35}, -{42,-43,36}, -{42,-43,37}, -{42,-43,38}, -{42,-43,39}, -{42,-43,40}, -{42,-43,41}, -{42,-43,42}, -{42,-43,43}, -{42,-43,44}, -{42,-43,45}, -{42,-43,46}, -{42,-42,24}, -{42,-42,25}, -{42,-42,26}, -{42,-42,27}, -{42,-42,28}, -{42,-42,29}, -{42,-42,30}, -{42,-42,31}, -{42,-42,32}, -{42,-42,33}, -{42,-42,34}, -{42,-42,35}, -{42,-42,36}, -{42,-42,37}, -{42,-42,38}, -{42,-42,39}, -{42,-42,40}, -{42,-42,41}, -{42,-42,42}, -{42,-42,43}, -{42,-42,44}, -{42,-42,45}, -{42,-42,46}, -{42,-41,22}, -{42,-41,23}, -{42,-41,24}, -{42,-41,25}, -{42,-41,26}, -{42,-41,27}, -{42,-41,28}, -{42,-41,29}, -{42,-41,30}, -{42,-41,31}, -{42,-41,32}, -{42,-41,33}, -{42,-41,34}, -{42,-41,35}, -{42,-41,36}, -{42,-41,37}, -{42,-41,38}, -{42,-41,39}, -{42,-41,40}, -{42,-41,41}, -{42,-41,42}, -{42,-41,43}, -{42,-41,44}, -{42,-41,45}, -{42,-41,46}, -{42,-40,19}, -{42,-40,20}, -{42,-40,21}, -{42,-40,22}, -{42,-40,23}, -{42,-40,24}, -{42,-40,25}, -{42,-40,26}, -{42,-40,27}, -{42,-40,28}, -{42,-40,29}, -{42,-40,30}, -{42,-40,31}, -{42,-40,32}, -{42,-40,33}, -{42,-40,34}, -{42,-40,35}, -{42,-40,36}, -{42,-40,37}, -{42,-40,38}, -{42,-40,39}, -{42,-40,40}, -{42,-40,41}, -{42,-40,42}, -{42,-40,43}, -{42,-40,44}, -{42,-40,45}, -{42,-40,46}, -{42,-40,47}, -{42,-39,17}, -{42,-39,18}, -{42,-39,19}, -{42,-39,20}, -{42,-39,21}, -{42,-39,22}, -{42,-39,23}, -{42,-39,24}, -{42,-39,25}, -{42,-39,26}, -{42,-39,27}, -{42,-39,28}, -{42,-39,29}, -{42,-39,30}, -{42,-39,31}, -{42,-39,32}, -{42,-39,33}, -{42,-39,34}, -{42,-39,35}, -{42,-39,36}, -{42,-39,37}, -{42,-39,38}, -{42,-39,39}, -{42,-39,40}, -{42,-39,41}, -{42,-39,42}, -{42,-39,43}, -{42,-39,44}, -{42,-39,45}, -{42,-39,46}, -{42,-39,47}, -{42,-38,14}, -{42,-38,15}, -{42,-38,16}, -{42,-38,17}, -{42,-38,18}, -{42,-38,19}, -{42,-38,20}, -{42,-38,21}, -{42,-38,22}, -{42,-38,23}, -{42,-38,24}, -{42,-38,25}, -{42,-38,26}, -{42,-38,27}, -{42,-38,28}, -{42,-38,29}, -{42,-38,30}, -{42,-38,31}, -{42,-38,32}, -{42,-38,33}, -{42,-38,34}, -{42,-38,35}, -{42,-38,36}, -{42,-38,37}, -{42,-38,38}, -{42,-38,39}, -{42,-38,40}, -{42,-38,41}, -{42,-38,42}, -{42,-38,43}, -{42,-38,44}, -{42,-38,45}, -{42,-38,46}, -{42,-38,47}, -{42,-37,12}, -{42,-37,13}, -{42,-37,14}, -{42,-37,15}, -{42,-37,16}, -{42,-37,17}, -{42,-37,18}, -{42,-37,19}, -{42,-37,20}, -{42,-37,21}, -{42,-37,22}, -{42,-37,23}, -{42,-37,24}, -{42,-37,25}, -{42,-37,26}, -{42,-37,27}, -{42,-37,28}, -{42,-37,29}, -{42,-37,30}, -{42,-37,31}, -{42,-37,32}, -{42,-37,33}, -{42,-37,34}, -{42,-37,35}, -{42,-37,36}, -{42,-37,37}, -{42,-37,38}, -{42,-37,39}, -{42,-37,40}, -{42,-37,41}, -{42,-37,42}, -{42,-37,43}, -{42,-37,44}, -{42,-37,45}, -{42,-37,46}, -{42,-37,47}, -{42,-36,10}, -{42,-36,11}, -{42,-36,12}, -{42,-36,13}, -{42,-36,14}, -{42,-36,15}, -{42,-36,16}, -{42,-36,17}, -{42,-36,18}, -{42,-36,19}, -{42,-36,20}, -{42,-36,21}, -{42,-36,22}, -{42,-36,23}, -{42,-36,24}, -{42,-36,25}, -{42,-36,26}, -{42,-36,27}, -{42,-36,28}, -{42,-36,29}, -{42,-36,30}, -{42,-36,31}, -{42,-36,32}, -{42,-36,33}, -{42,-36,34}, -{42,-36,35}, -{42,-36,36}, -{42,-36,37}, -{42,-36,38}, -{42,-36,39}, -{42,-36,40}, -{42,-36,41}, -{42,-36,42}, -{42,-36,43}, -{42,-36,44}, -{42,-36,45}, -{42,-36,46}, -{42,-36,47}, -{42,-35,8}, -{42,-35,9}, -{42,-35,10}, -{42,-35,11}, -{42,-35,12}, -{42,-35,13}, -{42,-35,14}, -{42,-35,15}, -{42,-35,16}, -{42,-35,17}, -{42,-35,18}, -{42,-35,19}, -{42,-35,20}, -{42,-35,21}, -{42,-35,22}, -{42,-35,23}, -{42,-35,24}, -{42,-35,25}, -{42,-35,26}, -{42,-35,27}, -{42,-35,28}, -{42,-35,29}, -{42,-35,30}, -{42,-35,31}, -{42,-35,32}, -{42,-35,33}, -{42,-35,34}, -{42,-35,35}, -{42,-35,36}, -{42,-35,37}, -{42,-35,38}, -{42,-35,39}, -{42,-35,40}, -{42,-35,41}, -{42,-35,42}, -{42,-35,43}, -{42,-35,44}, -{42,-35,45}, -{42,-35,46}, -{42,-35,47}, -{42,-34,6}, -{42,-34,7}, -{42,-34,8}, -{42,-34,9}, -{42,-34,10}, -{42,-34,11}, -{42,-34,12}, -{42,-34,13}, -{42,-34,14}, -{42,-34,15}, -{42,-34,16}, -{42,-34,17}, -{42,-34,18}, -{42,-34,19}, -{42,-34,20}, -{42,-34,21}, -{42,-34,22}, -{42,-34,23}, -{42,-34,24}, -{42,-34,25}, -{42,-34,26}, -{42,-34,27}, -{42,-34,28}, -{42,-34,29}, -{42,-34,30}, -{42,-34,31}, -{42,-34,32}, -{42,-34,33}, -{42,-34,34}, -{42,-34,35}, -{42,-34,36}, -{42,-34,37}, -{42,-34,38}, -{42,-34,39}, -{42,-34,40}, -{42,-34,41}, -{42,-34,42}, -{42,-34,43}, -{42,-34,44}, -{42,-34,45}, -{42,-34,46}, -{42,-34,47}, -{42,-33,4}, -{42,-33,5}, -{42,-33,6}, -{42,-33,7}, -{42,-33,8}, -{42,-33,9}, -{42,-33,10}, -{42,-33,11}, -{42,-33,12}, -{42,-33,13}, -{42,-33,14}, -{42,-33,15}, -{42,-33,16}, -{42,-33,17}, -{42,-33,18}, -{42,-33,19}, -{42,-33,20}, -{42,-33,21}, -{42,-33,22}, -{42,-33,23}, -{42,-33,24}, -{42,-33,25}, -{42,-33,26}, -{42,-33,27}, -{42,-33,28}, -{42,-33,29}, -{42,-33,30}, -{42,-33,31}, -{42,-33,32}, -{42,-33,33}, -{42,-33,34}, -{42,-33,35}, -{42,-33,36}, -{42,-33,37}, -{42,-33,38}, -{42,-33,39}, -{42,-33,40}, -{42,-33,41}, -{42,-33,42}, -{42,-33,43}, -{42,-33,44}, -{42,-33,45}, -{42,-33,46}, -{42,-33,47}, -{42,-32,3}, -{42,-32,4}, -{42,-32,5}, -{42,-32,6}, -{42,-32,7}, -{42,-32,8}, -{42,-32,9}, -{42,-32,10}, -{42,-32,11}, -{42,-32,12}, -{42,-32,13}, -{42,-32,14}, -{42,-32,15}, -{42,-32,16}, -{42,-32,17}, -{42,-32,18}, -{42,-32,19}, -{42,-32,20}, -{42,-32,21}, -{42,-32,22}, -{42,-32,23}, -{42,-32,24}, -{42,-32,25}, -{42,-32,26}, -{42,-32,27}, -{42,-32,28}, -{42,-32,29}, -{42,-32,30}, -{42,-32,31}, -{42,-32,32}, -{42,-32,33}, -{42,-32,34}, -{42,-32,35}, -{42,-32,36}, -{42,-32,37}, -{42,-32,38}, -{42,-32,39}, -{42,-32,40}, -{42,-32,41}, -{42,-32,42}, -{42,-32,43}, -{42,-32,44}, -{42,-32,45}, -{42,-32,46}, -{42,-32,47}, -{42,-31,1}, -{42,-31,2}, -{42,-31,3}, -{42,-31,4}, -{42,-31,5}, -{42,-31,6}, -{42,-31,7}, -{42,-31,8}, -{42,-31,9}, -{42,-31,10}, -{42,-31,11}, -{42,-31,12}, -{42,-31,13}, -{42,-31,14}, -{42,-31,15}, -{42,-31,16}, -{42,-31,17}, -{42,-31,18}, -{42,-31,19}, -{42,-31,20}, -{42,-31,21}, -{42,-31,22}, -{42,-31,23}, -{42,-31,24}, -{42,-31,25}, -{42,-31,26}, -{42,-31,27}, -{42,-31,28}, -{42,-31,29}, -{42,-31,30}, -{42,-31,31}, -{42,-31,32}, -{42,-31,33}, -{42,-31,34}, -{42,-31,35}, -{42,-31,36}, -{42,-31,37}, -{42,-31,38}, -{42,-31,39}, -{42,-31,40}, -{42,-31,41}, -{42,-31,42}, -{42,-31,43}, -{42,-31,44}, -{42,-31,45}, -{42,-31,46}, -{42,-31,47}, -{42,-30,-1}, -{42,-30,0}, -{42,-30,1}, -{42,-30,2}, -{42,-30,3}, -{42,-30,4}, -{42,-30,5}, -{42,-30,6}, -{42,-30,7}, -{42,-30,8}, -{42,-30,9}, -{42,-30,10}, -{42,-30,11}, -{42,-30,12}, -{42,-30,13}, -{42,-30,14}, -{42,-30,15}, -{42,-30,16}, -{42,-30,17}, -{42,-30,18}, -{42,-30,19}, -{42,-30,20}, -{42,-30,21}, -{42,-30,22}, -{42,-30,23}, -{42,-30,24}, -{42,-30,25}, -{42,-30,26}, -{42,-30,27}, -{42,-30,28}, -{42,-30,29}, -{42,-30,30}, -{42,-30,31}, -{42,-30,32}, -{42,-30,33}, -{42,-30,34}, -{42,-30,35}, -{42,-30,36}, -{42,-30,37}, -{42,-30,38}, -{42,-30,39}, -{42,-30,40}, -{42,-30,41}, -{42,-30,42}, -{42,-30,43}, -{42,-30,44}, -{42,-30,45}, -{42,-30,46}, -{42,-30,47}, -{42,-29,-3}, -{42,-29,-2}, -{42,-29,-1}, -{42,-29,0}, -{42,-29,1}, -{42,-29,2}, -{42,-29,3}, -{42,-29,4}, -{42,-29,5}, -{42,-29,6}, -{42,-29,7}, -{42,-29,8}, -{42,-29,9}, -{42,-29,10}, -{42,-29,11}, -{42,-29,12}, -{42,-29,13}, -{42,-29,14}, -{42,-29,15}, -{42,-29,16}, -{42,-29,17}, -{42,-29,18}, -{42,-29,19}, -{42,-29,20}, -{42,-29,21}, -{42,-29,22}, -{42,-29,23}, -{42,-29,24}, -{42,-29,25}, -{42,-29,26}, -{42,-29,27}, -{42,-29,28}, -{42,-29,29}, -{42,-29,30}, -{42,-29,31}, -{42,-29,32}, -{42,-29,33}, -{42,-29,34}, -{42,-29,35}, -{42,-29,36}, -{42,-29,37}, -{42,-29,38}, -{42,-29,39}, -{42,-29,40}, -{42,-29,41}, -{42,-29,42}, -{42,-29,43}, -{42,-29,44}, -{42,-29,45}, -{42,-29,46}, -{42,-29,47}, -{42,-28,-4}, -{42,-28,-3}, -{42,-28,-2}, -{42,-28,-1}, -{42,-28,0}, -{42,-28,1}, -{42,-28,2}, -{42,-28,3}, -{42,-28,4}, -{42,-28,5}, -{42,-28,6}, -{42,-28,7}, -{42,-28,8}, -{42,-28,9}, -{42,-28,10}, -{42,-28,11}, -{42,-28,12}, -{42,-28,13}, -{42,-28,14}, -{42,-28,15}, -{42,-28,16}, -{42,-28,17}, -{42,-28,18}, -{42,-28,19}, -{42,-28,20}, -{42,-28,21}, -{42,-28,22}, -{42,-28,23}, -{42,-28,24}, -{42,-28,25}, -{42,-28,26}, -{42,-28,27}, -{42,-28,28}, -{42,-28,29}, -{42,-28,30}, -{42,-28,31}, -{42,-28,32}, -{42,-28,33}, -{42,-28,34}, -{42,-28,35}, -{42,-28,36}, -{42,-28,37}, -{42,-28,38}, -{42,-28,39}, -{42,-28,40}, -{42,-28,41}, -{42,-28,42}, -{42,-28,43}, -{42,-28,44}, -{42,-28,45}, -{42,-28,46}, -{42,-28,47}, -{42,-27,-6}, -{42,-27,-5}, -{42,-27,-4}, -{42,-27,-3}, -{42,-27,-2}, -{42,-27,-1}, -{42,-27,0}, -{42,-27,1}, -{42,-27,2}, -{42,-27,3}, -{42,-27,4}, -{42,-27,5}, -{42,-27,6}, -{42,-27,7}, -{42,-27,8}, -{42,-27,9}, -{42,-27,10}, -{42,-27,11}, -{42,-27,12}, -{42,-27,13}, -{42,-27,14}, -{42,-27,15}, -{42,-27,16}, -{42,-27,17}, -{42,-27,18}, -{42,-27,19}, -{42,-27,20}, -{42,-27,21}, -{42,-27,22}, -{42,-27,23}, -{42,-27,24}, -{42,-27,25}, -{42,-27,26}, -{42,-27,27}, -{42,-27,28}, -{42,-27,29}, -{42,-27,30}, -{42,-27,31}, -{42,-27,32}, -{42,-27,33}, -{42,-27,34}, -{42,-27,35}, -{42,-27,36}, -{42,-27,37}, -{42,-27,38}, -{42,-27,39}, -{42,-27,40}, -{42,-27,41}, -{42,-27,42}, -{42,-27,43}, -{42,-27,44}, -{42,-27,45}, -{42,-27,46}, -{42,-27,47}, -{42,-26,-7}, -{42,-26,-6}, -{42,-26,-5}, -{42,-26,-4}, -{42,-26,-3}, -{42,-26,-2}, -{42,-26,-1}, -{42,-26,0}, -{42,-26,1}, -{42,-26,2}, -{42,-26,3}, -{42,-26,4}, -{42,-26,5}, -{42,-26,6}, -{42,-26,7}, -{42,-26,8}, -{42,-26,9}, -{42,-26,10}, -{42,-26,11}, -{42,-26,12}, -{42,-26,13}, -{42,-26,14}, -{42,-26,15}, -{42,-26,16}, -{42,-26,17}, -{42,-26,18}, -{42,-26,19}, -{42,-26,20}, -{42,-26,21}, -{42,-26,22}, -{42,-26,23}, -{42,-26,24}, -{42,-26,25}, -{42,-26,26}, -{42,-26,27}, -{42,-26,28}, -{42,-26,29}, -{42,-26,30}, -{42,-26,31}, -{42,-26,32}, -{42,-26,33}, -{42,-26,34}, -{42,-26,35}, -{42,-26,36}, -{42,-26,37}, -{42,-26,38}, -{42,-26,39}, -{42,-26,40}, -{42,-26,41}, -{42,-26,42}, -{42,-26,43}, -{42,-26,44}, -{42,-26,45}, -{42,-26,46}, -{42,-26,47}, -{42,-25,-9}, -{42,-25,-8}, -{42,-25,-7}, -{42,-25,-6}, -{42,-25,-5}, -{42,-25,-4}, -{42,-25,-3}, -{42,-25,-2}, -{42,-25,-1}, -{42,-25,0}, -{42,-25,1}, -{42,-25,2}, -{42,-25,3}, -{42,-25,4}, -{42,-25,5}, -{42,-25,6}, -{42,-25,7}, -{42,-25,8}, -{42,-25,9}, -{42,-25,10}, -{42,-25,11}, -{42,-25,12}, -{42,-25,13}, -{42,-25,14}, -{42,-25,15}, -{42,-25,16}, -{42,-25,17}, -{42,-25,18}, -{42,-25,19}, -{42,-25,20}, -{42,-25,21}, -{42,-25,22}, -{42,-25,23}, -{42,-25,24}, -{42,-25,25}, -{42,-25,26}, -{42,-25,27}, -{42,-25,28}, -{42,-25,29}, -{42,-25,30}, -{42,-25,31}, -{42,-25,32}, -{42,-25,33}, -{42,-25,34}, -{42,-25,35}, -{42,-25,36}, -{42,-25,37}, -{42,-25,38}, -{42,-25,39}, -{42,-25,40}, -{42,-25,41}, -{42,-25,42}, -{42,-25,43}, -{42,-25,44}, -{42,-25,45}, -{42,-25,46}, -{42,-25,47}, -{42,-24,-11}, -{42,-24,-10}, -{42,-24,-9}, -{42,-24,-8}, -{42,-24,-7}, -{42,-24,-6}, -{42,-24,-5}, -{42,-24,-4}, -{42,-24,-3}, -{42,-24,-2}, -{42,-24,-1}, -{42,-24,0}, -{42,-24,1}, -{42,-24,2}, -{42,-24,3}, -{42,-24,4}, -{42,-24,5}, -{42,-24,6}, -{42,-24,7}, -{42,-24,8}, -{42,-24,9}, -{42,-24,10}, -{42,-24,11}, -{42,-24,12}, -{42,-24,13}, -{42,-24,14}, -{42,-24,15}, -{42,-24,16}, -{42,-24,17}, -{42,-24,18}, -{42,-24,19}, -{42,-24,20}, -{42,-24,21}, -{42,-24,22}, -{42,-24,23}, -{42,-24,24}, -{42,-24,25}, -{42,-24,26}, -{42,-24,27}, -{42,-24,28}, -{42,-24,29}, -{42,-24,30}, -{42,-24,31}, -{42,-24,32}, -{42,-24,33}, -{42,-24,34}, -{42,-24,35}, -{42,-24,36}, -{42,-24,37}, -{42,-24,38}, -{42,-24,39}, -{42,-24,40}, -{42,-24,41}, -{42,-24,42}, -{42,-24,43}, -{42,-24,44}, -{42,-24,45}, -{42,-24,46}, -{42,-24,47}, -{42,-23,-12}, -{42,-23,-11}, -{42,-23,-10}, -{42,-23,-9}, -{42,-23,-8}, -{42,-23,-7}, -{42,-23,-6}, -{42,-23,-5}, -{42,-23,-4}, -{42,-23,-3}, -{42,-23,-2}, -{42,-23,-1}, -{42,-23,0}, -{42,-23,1}, -{42,-23,2}, -{42,-23,3}, -{42,-23,4}, -{42,-23,5}, -{42,-23,6}, -{42,-23,7}, -{42,-23,8}, -{42,-23,9}, -{42,-23,10}, -{42,-23,11}, -{42,-23,12}, -{42,-23,13}, -{42,-23,14}, -{42,-23,15}, -{42,-23,16}, -{42,-23,17}, -{42,-23,18}, -{42,-23,19}, -{42,-23,20}, -{42,-23,21}, -{42,-23,22}, -{42,-23,23}, -{42,-23,24}, -{42,-23,25}, -{42,-23,26}, -{42,-23,27}, -{42,-23,28}, -{42,-23,29}, -{42,-23,30}, -{42,-23,31}, -{42,-23,32}, -{42,-23,33}, -{42,-23,34}, -{42,-23,35}, -{42,-23,36}, -{42,-23,37}, -{42,-23,38}, -{42,-23,39}, -{42,-23,40}, -{42,-23,41}, -{42,-23,42}, -{42,-23,43}, -{42,-23,44}, -{42,-23,45}, -{42,-23,46}, -{42,-23,47}, -{42,-22,-14}, -{42,-22,-13}, -{42,-22,-12}, -{42,-22,-11}, -{42,-22,-10}, -{42,-22,-9}, -{42,-22,-8}, -{42,-22,-7}, -{42,-22,-6}, -{42,-22,-5}, -{42,-22,-4}, -{42,-22,-3}, -{42,-22,-2}, -{42,-22,-1}, -{42,-22,0}, -{42,-22,1}, -{42,-22,2}, -{42,-22,3}, -{42,-22,4}, -{42,-22,5}, -{42,-22,6}, -{42,-22,7}, -{42,-22,8}, -{42,-22,9}, -{42,-22,10}, -{42,-22,11}, -{42,-22,12}, -{42,-22,13}, -{42,-22,14}, -{42,-22,15}, -{42,-22,16}, -{42,-22,17}, -{42,-22,18}, -{42,-22,19}, -{42,-22,20}, -{42,-22,21}, -{42,-22,22}, -{42,-22,23}, -{42,-22,24}, -{42,-22,25}, -{42,-22,26}, -{42,-22,27}, -{42,-22,28}, -{42,-22,29}, -{42,-22,30}, -{42,-22,31}, -{42,-22,32}, -{42,-22,33}, -{42,-22,34}, -{42,-22,35}, -{42,-22,36}, -{42,-22,37}, -{42,-22,38}, -{42,-22,39}, -{42,-22,40}, -{42,-22,41}, -{42,-22,42}, -{42,-22,43}, -{42,-22,44}, -{42,-22,45}, -{42,-22,46}, -{42,-22,47}, -{42,-21,-15}, -{42,-21,-14}, -{42,-21,-13}, -{42,-21,-12}, -{42,-21,-11}, -{42,-21,-10}, -{42,-21,-9}, -{42,-21,-8}, -{42,-21,-7}, -{42,-21,-6}, -{42,-21,-5}, -{42,-21,-4}, -{42,-21,-3}, -{42,-21,-2}, -{42,-21,-1}, -{42,-21,0}, -{42,-21,1}, -{42,-21,2}, -{42,-21,3}, -{42,-21,4}, -{42,-21,5}, -{42,-21,6}, -{42,-21,7}, -{42,-21,8}, -{42,-21,9}, -{42,-21,10}, -{42,-21,11}, -{42,-21,12}, -{42,-21,13}, -{42,-21,14}, -{42,-21,15}, -{42,-21,16}, -{42,-21,17}, -{42,-21,18}, -{42,-21,19}, -{42,-21,20}, -{42,-21,21}, -{42,-21,22}, -{42,-21,23}, -{42,-21,24}, -{42,-21,25}, -{42,-21,26}, -{42,-21,27}, -{42,-21,28}, -{42,-21,29}, -{42,-21,30}, -{42,-21,31}, -{42,-21,32}, -{42,-21,33}, -{42,-21,34}, -{42,-21,35}, -{42,-21,36}, -{42,-21,37}, -{42,-21,38}, -{42,-21,39}, -{42,-21,40}, -{42,-21,41}, -{42,-21,42}, -{42,-21,43}, -{42,-21,44}, -{42,-21,45}, -{42,-21,46}, -{42,-21,47}, -{42,-21,48}, -{42,-20,-16}, -{42,-20,-15}, -{42,-20,-14}, -{42,-20,-13}, -{42,-20,-12}, -{42,-20,-11}, -{42,-20,-10}, -{42,-20,-9}, -{42,-20,-8}, -{42,-20,-7}, -{42,-20,-6}, -{42,-20,-5}, -{42,-20,-4}, -{42,-20,-3}, -{42,-20,-2}, -{42,-20,-1}, -{42,-20,0}, -{42,-20,1}, -{42,-20,2}, -{42,-20,3}, -{42,-20,4}, -{42,-20,5}, -{42,-20,6}, -{42,-20,7}, -{42,-20,8}, -{42,-20,9}, -{42,-20,10}, -{42,-20,11}, -{42,-20,12}, -{42,-20,13}, -{42,-20,14}, -{42,-20,15}, -{42,-20,16}, -{42,-20,17}, -{42,-20,18}, -{42,-20,19}, -{42,-20,20}, -{42,-20,21}, -{42,-20,22}, -{42,-20,23}, -{42,-20,24}, -{42,-20,25}, -{42,-20,26}, -{42,-20,27}, -{42,-20,28}, -{42,-20,29}, -{42,-20,30}, -{42,-20,31}, -{42,-20,32}, -{42,-20,33}, -{42,-20,34}, -{42,-20,35}, -{42,-20,36}, -{42,-20,37}, -{42,-20,38}, -{42,-20,39}, -{42,-20,40}, -{42,-20,41}, -{42,-20,42}, -{42,-20,43}, -{42,-20,44}, -{42,-20,45}, -{42,-20,46}, -{42,-20,47}, -{42,-20,48}, -{42,-19,-18}, -{42,-19,-17}, -{42,-19,-16}, -{42,-19,-15}, -{42,-19,-14}, -{42,-19,-13}, -{42,-19,-12}, -{42,-19,-11}, -{42,-19,-10}, -{42,-19,-9}, -{42,-19,-8}, -{42,-19,-7}, -{42,-19,-6}, -{42,-19,-5}, -{42,-19,-4}, -{42,-19,-3}, -{42,-19,-2}, -{42,-19,-1}, -{42,-19,0}, -{42,-19,1}, -{42,-19,2}, -{42,-19,3}, -{42,-19,4}, -{42,-19,5}, -{42,-19,6}, -{42,-19,7}, -{42,-19,8}, -{42,-19,9}, -{42,-19,10}, -{42,-19,11}, -{42,-19,12}, -{42,-19,13}, -{42,-19,14}, -{42,-19,15}, -{42,-19,16}, -{42,-19,17}, -{42,-19,18}, -{42,-19,19}, -{42,-19,20}, -{42,-19,21}, -{42,-19,22}, -{42,-19,23}, -{42,-19,24}, -{42,-19,25}, -{42,-19,26}, -{42,-19,27}, -{42,-19,28}, -{42,-19,29}, -{42,-19,30}, -{42,-19,31}, -{42,-19,32}, -{42,-19,33}, -{42,-19,34}, -{42,-19,35}, -{42,-19,36}, -{42,-19,37}, -{42,-19,38}, -{42,-19,39}, -{42,-19,40}, -{42,-19,41}, -{42,-19,42}, -{42,-19,43}, -{42,-19,44}, -{42,-19,45}, -{42,-19,46}, -{42,-19,47}, -{42,-19,48}, -{42,-18,-19}, -{42,-18,-18}, -{42,-18,-17}, -{42,-18,-16}, -{42,-18,-15}, -{42,-18,-14}, -{42,-18,-13}, -{42,-18,-12}, -{42,-18,-11}, -{42,-18,-10}, -{42,-18,-9}, -{42,-18,-8}, -{42,-18,-7}, -{42,-18,-6}, -{42,-18,-5}, -{42,-18,-4}, -{42,-18,-3}, -{42,-18,-2}, -{42,-18,-1}, -{42,-18,0}, -{42,-18,1}, -{42,-18,2}, -{42,-18,3}, -{42,-18,4}, -{42,-18,5}, -{42,-18,6}, -{42,-18,7}, -{42,-18,8}, -{42,-18,9}, -{42,-18,10}, -{42,-18,11}, -{42,-18,12}, -{42,-18,13}, -{42,-18,14}, -{42,-18,15}, -{42,-18,16}, -{42,-18,17}, -{42,-18,18}, -{42,-18,19}, -{42,-18,20}, -{42,-18,21}, -{42,-18,22}, -{42,-18,23}, -{42,-18,24}, -{42,-18,25}, -{42,-18,26}, -{42,-18,27}, -{42,-18,28}, -{42,-18,29}, -{42,-18,30}, -{42,-18,31}, -{42,-18,32}, -{42,-18,33}, -{42,-18,34}, -{42,-18,35}, -{42,-18,36}, -{42,-18,37}, -{42,-18,38}, -{42,-18,39}, -{42,-18,40}, -{42,-18,41}, -{42,-18,42}, -{42,-18,43}, -{42,-18,44}, -{42,-18,45}, -{42,-18,46}, -{42,-18,47}, -{42,-18,48}, -{42,-17,-21}, -{42,-17,-20}, -{42,-17,-19}, -{42,-17,-18}, -{42,-17,-17}, -{42,-17,-16}, -{42,-17,-15}, -{42,-17,-14}, -{42,-17,-13}, -{42,-17,-12}, -{42,-17,-11}, -{42,-17,-10}, -{42,-17,-9}, -{42,-17,-8}, -{42,-17,-7}, -{42,-17,-6}, -{42,-17,-5}, -{42,-17,-4}, -{42,-17,-3}, -{42,-17,-2}, -{42,-17,-1}, -{42,-17,0}, -{42,-17,1}, -{42,-17,2}, -{42,-17,3}, -{42,-17,4}, -{42,-17,5}, -{42,-17,6}, -{42,-17,7}, -{42,-17,8}, -{42,-17,9}, -{42,-17,10}, -{42,-17,11}, -{42,-17,12}, -{42,-17,13}, -{42,-17,14}, -{42,-17,15}, -{42,-17,16}, -{42,-17,17}, -{42,-17,18}, -{42,-17,19}, -{42,-17,20}, -{42,-17,21}, -{42,-17,22}, -{42,-17,23}, -{42,-17,24}, -{42,-17,25}, -{42,-17,26}, -{42,-17,27}, -{42,-17,28}, -{42,-17,29}, -{42,-17,30}, -{42,-17,31}, -{42,-17,32}, -{42,-17,33}, -{42,-17,34}, -{42,-17,35}, -{42,-17,36}, -{42,-17,37}, -{42,-17,38}, -{42,-17,39}, -{42,-17,40}, -{42,-17,41}, -{42,-17,42}, -{42,-17,43}, -{42,-17,44}, -{42,-17,45}, -{42,-17,46}, -{42,-17,47}, -{42,-17,48}, -{42,-16,-22}, -{42,-16,-21}, -{42,-16,-20}, -{42,-16,-19}, -{42,-16,-18}, -{42,-16,-17}, -{42,-16,-16}, -{42,-16,-15}, -{42,-16,-14}, -{42,-16,-13}, -{42,-16,-12}, -{42,-16,-11}, -{42,-16,-10}, -{42,-16,-9}, -{42,-16,-8}, -{42,-16,-7}, -{42,-16,-6}, -{42,-16,-5}, -{42,-16,-4}, -{42,-16,-3}, -{42,-16,-2}, -{42,-16,-1}, -{42,-16,0}, -{42,-16,1}, -{42,-16,2}, -{42,-16,3}, -{42,-16,4}, -{42,-16,5}, -{42,-16,6}, -{42,-16,7}, -{42,-16,8}, -{42,-16,9}, -{42,-16,10}, -{42,-16,11}, -{42,-16,12}, -{42,-16,13}, -{42,-16,14}, -{42,-16,15}, -{42,-16,16}, -{42,-16,17}, -{42,-16,18}, -{42,-16,19}, -{42,-16,20}, -{42,-16,21}, -{42,-16,22}, -{42,-16,23}, -{42,-16,24}, -{42,-16,25}, -{42,-16,26}, -{42,-16,27}, -{42,-16,28}, -{42,-16,29}, -{42,-16,30}, -{42,-16,31}, -{42,-16,32}, -{42,-16,33}, -{42,-16,34}, -{42,-16,35}, -{42,-16,36}, -{42,-16,37}, -{42,-16,38}, -{42,-16,39}, -{42,-16,40}, -{42,-16,41}, -{42,-16,42}, -{42,-16,43}, -{42,-16,44}, -{42,-16,45}, -{42,-16,46}, -{42,-16,47}, -{42,-16,48}, -{42,-15,-23}, -{42,-15,-22}, -{42,-15,-21}, -{42,-15,-20}, -{42,-15,-19}, -{42,-15,-18}, -{42,-15,-17}, -{42,-15,-16}, -{42,-15,-15}, -{42,-15,-14}, -{42,-15,-13}, -{42,-15,-12}, -{42,-15,-11}, -{42,-15,-10}, -{42,-15,-9}, -{42,-15,-8}, -{42,-15,-7}, -{42,-15,-6}, -{42,-15,-5}, -{42,-15,-4}, -{42,-15,-3}, -{42,-15,-2}, -{42,-15,-1}, -{42,-15,0}, -{42,-15,1}, -{42,-15,2}, -{42,-15,3}, -{42,-15,4}, -{42,-15,5}, -{42,-15,6}, -{42,-15,7}, -{42,-15,8}, -{42,-15,9}, -{42,-15,10}, -{42,-15,11}, -{42,-15,12}, -{42,-15,13}, -{42,-15,14}, -{42,-15,15}, -{42,-15,16}, -{42,-15,17}, -{42,-15,18}, -{42,-15,19}, -{42,-15,20}, -{42,-15,21}, -{42,-15,22}, -{42,-15,23}, -{42,-15,24}, -{42,-15,25}, -{42,-15,26}, -{42,-15,27}, -{42,-15,28}, -{42,-15,29}, -{42,-15,30}, -{42,-15,31}, -{42,-15,32}, -{42,-15,33}, -{42,-15,34}, -{42,-15,35}, -{42,-15,36}, -{42,-15,37}, -{42,-15,38}, -{42,-15,39}, -{42,-15,40}, -{42,-15,41}, -{42,-15,42}, -{42,-15,43}, -{42,-15,44}, -{42,-15,45}, -{42,-15,46}, -{42,-15,47}, -{42,-15,48}, -{42,-14,-24}, -{42,-14,-23}, -{42,-14,-22}, -{42,-14,-21}, -{42,-14,-20}, -{42,-14,-19}, -{42,-14,-18}, -{42,-14,-17}, -{42,-14,-16}, -{42,-14,-15}, -{42,-14,-14}, -{42,-14,-13}, -{42,-14,-12}, -{42,-14,-11}, -{42,-14,-10}, -{42,-14,-9}, -{42,-14,-8}, -{42,-14,-7}, -{42,-14,-6}, -{42,-14,-5}, -{42,-14,-4}, -{42,-14,-3}, -{42,-14,-2}, -{42,-14,-1}, -{42,-14,0}, -{42,-14,1}, -{42,-14,2}, -{42,-14,3}, -{42,-14,4}, -{42,-14,5}, -{42,-14,6}, -{42,-14,7}, -{42,-14,8}, -{42,-14,9}, -{42,-14,10}, -{42,-14,11}, -{42,-14,12}, -{42,-14,13}, -{42,-14,14}, -{42,-14,15}, -{42,-14,16}, -{42,-14,17}, -{42,-14,18}, -{42,-14,19}, -{42,-14,20}, -{42,-14,21}, -{42,-14,22}, -{42,-14,23}, -{42,-14,24}, -{42,-14,25}, -{42,-14,26}, -{42,-14,27}, -{42,-14,28}, -{42,-14,29}, -{42,-14,30}, -{42,-14,31}, -{42,-14,32}, -{42,-14,33}, -{42,-14,34}, -{42,-14,35}, -{42,-14,36}, -{42,-14,37}, -{42,-14,38}, -{42,-14,39}, -{42,-14,40}, -{42,-14,41}, -{42,-14,42}, -{42,-14,43}, -{42,-14,44}, -{42,-14,45}, -{42,-14,46}, -{42,-14,47}, -{42,-14,48}, -{42,-13,-26}, -{42,-13,-25}, -{42,-13,-24}, -{42,-13,-23}, -{42,-13,-22}, -{42,-13,-21}, -{42,-13,-20}, -{42,-13,-19}, -{42,-13,-18}, -{42,-13,-17}, -{42,-13,-16}, -{42,-13,-15}, -{42,-13,-14}, -{42,-13,-13}, -{42,-13,-12}, -{42,-13,-11}, -{42,-13,-10}, -{42,-13,-9}, -{42,-13,-8}, -{42,-13,-7}, -{42,-13,-6}, -{42,-13,-5}, -{42,-13,-4}, -{42,-13,-3}, -{42,-13,-2}, -{42,-13,-1}, -{42,-13,0}, -{42,-13,1}, -{42,-13,2}, -{42,-13,3}, -{42,-13,4}, -{42,-13,5}, -{42,-13,6}, -{42,-13,7}, -{42,-13,8}, -{42,-13,9}, -{42,-13,10}, -{42,-13,11}, -{42,-13,12}, -{42,-13,13}, -{42,-13,14}, -{42,-13,15}, -{42,-13,16}, -{42,-13,17}, -{42,-13,18}, -{42,-13,19}, -{42,-13,20}, -{42,-13,21}, -{42,-13,22}, -{42,-13,23}, -{42,-13,24}, -{42,-13,25}, -{42,-13,26}, -{42,-13,27}, -{42,-13,28}, -{42,-13,29}, -{42,-13,30}, -{42,-13,31}, -{42,-13,32}, -{42,-13,33}, -{42,-13,34}, -{42,-13,35}, -{42,-13,36}, -{42,-13,37}, -{42,-13,38}, -{42,-13,39}, -{42,-13,40}, -{42,-13,41}, -{42,-13,42}, -{42,-13,43}, -{42,-13,44}, -{42,-13,45}, -{42,-13,46}, -{42,-13,47}, -{42,-13,48}, -{42,-12,-27}, -{42,-12,-26}, -{42,-12,-25}, -{42,-12,-24}, -{42,-12,-23}, -{42,-12,-22}, -{42,-12,-21}, -{42,-12,-20}, -{42,-12,-19}, -{42,-12,-18}, -{42,-12,-17}, -{42,-12,-16}, -{42,-12,-15}, -{42,-12,-14}, -{42,-12,-13}, -{42,-12,-12}, -{42,-12,-11}, -{42,-12,-10}, -{42,-12,-9}, -{42,-12,-8}, -{42,-12,-7}, -{42,-12,-6}, -{42,-12,-5}, -{42,-12,-4}, -{42,-12,-3}, -{42,-12,-2}, -{42,-12,-1}, -{42,-12,0}, -{42,-12,1}, -{42,-12,2}, -{42,-12,3}, -{42,-12,4}, -{42,-12,5}, -{42,-12,6}, -{42,-12,7}, -{42,-12,8}, -{42,-12,9}, -{42,-12,10}, -{42,-12,11}, -{42,-12,12}, -{42,-12,13}, -{42,-12,14}, -{42,-12,15}, -{42,-12,16}, -{42,-12,17}, -{42,-12,18}, -{42,-12,19}, -{42,-12,20}, -{42,-12,21}, -{42,-12,22}, -{42,-12,23}, -{42,-12,24}, -{42,-12,25}, -{42,-12,26}, -{42,-12,27}, -{42,-12,28}, -{42,-12,29}, -{42,-12,30}, -{42,-12,31}, -{42,-12,32}, -{42,-12,33}, -{42,-12,34}, -{42,-12,35}, -{42,-12,36}, -{42,-12,37}, -{42,-12,38}, -{42,-12,39}, -{42,-12,40}, -{42,-12,41}, -{42,-12,42}, -{42,-12,43}, -{42,-12,44}, -{42,-12,45}, -{42,-12,46}, -{42,-12,47}, -{42,-12,48}, -{42,-11,-28}, -{42,-11,-27}, -{42,-11,-26}, -{42,-11,-25}, -{42,-11,-24}, -{42,-11,-23}, -{42,-11,-22}, -{42,-11,-21}, -{42,-11,-20}, -{42,-11,-19}, -{42,-11,-18}, -{42,-11,-17}, -{42,-11,-16}, -{42,-11,-15}, -{42,-11,-14}, -{42,-11,-13}, -{42,-11,-12}, -{42,-11,-11}, -{42,-11,-10}, -{42,-11,-9}, -{42,-11,-8}, -{42,-11,-7}, -{42,-11,-6}, -{42,-11,-5}, -{42,-11,-4}, -{42,-11,-3}, -{42,-11,-2}, -{42,-11,-1}, -{42,-11,0}, -{42,-11,1}, -{42,-11,2}, -{42,-11,3}, -{42,-11,4}, -{42,-11,5}, -{42,-11,6}, -{42,-11,7}, -{42,-11,8}, -{42,-11,9}, -{42,-11,10}, -{42,-11,11}, -{42,-11,12}, -{42,-11,13}, -{42,-11,14}, -{42,-11,15}, -{42,-11,16}, -{42,-11,17}, -{42,-11,18}, -{42,-11,19}, -{42,-11,20}, -{42,-11,21}, -{42,-11,22}, -{42,-11,23}, -{42,-11,24}, -{42,-11,25}, -{42,-11,26}, -{42,-11,27}, -{42,-11,28}, -{42,-11,29}, -{42,-11,30}, -{42,-11,31}, -{42,-11,32}, -{42,-11,33}, -{42,-11,34}, -{42,-11,35}, -{42,-11,36}, -{42,-11,37}, -{42,-11,38}, -{42,-11,39}, -{42,-11,40}, -{42,-11,41}, -{42,-11,42}, -{42,-11,43}, -{42,-11,44}, -{42,-11,45}, -{42,-11,46}, -{42,-11,47}, -{42,-11,48}, -{42,-10,-30}, -{42,-10,-29}, -{42,-10,-28}, -{42,-10,-27}, -{42,-10,-26}, -{42,-10,-25}, -{42,-10,-24}, -{42,-10,-23}, -{42,-10,-22}, -{42,-10,-21}, -{42,-10,-20}, -{42,-10,-19}, -{42,-10,-18}, -{42,-10,-17}, -{42,-10,-16}, -{42,-10,-15}, -{42,-10,-14}, -{42,-10,-13}, -{42,-10,-12}, -{42,-10,-11}, -{42,-10,-10}, -{42,-10,-9}, -{42,-10,-8}, -{42,-10,-7}, -{42,-10,-6}, -{42,-10,-5}, -{42,-10,-4}, -{42,-10,-3}, -{42,-10,-2}, -{42,-10,-1}, -{42,-10,0}, -{42,-10,1}, -{42,-10,2}, -{42,-10,3}, -{42,-10,4}, -{42,-10,5}, -{42,-10,6}, -{42,-10,7}, -{42,-10,8}, -{42,-10,9}, -{42,-10,10}, -{42,-10,11}, -{42,-10,12}, -{42,-10,13}, -{42,-10,14}, -{42,-10,15}, -{42,-10,16}, -{42,-10,17}, -{42,-10,18}, -{42,-10,19}, -{42,-10,20}, -{42,-10,21}, -{42,-10,22}, -{42,-10,23}, -{42,-10,24}, -{42,-10,25}, -{42,-10,26}, -{42,-10,27}, -{42,-10,28}, -{42,-10,29}, -{42,-10,30}, -{42,-10,31}, -{42,-10,32}, -{42,-10,33}, -{42,-10,34}, -{42,-10,35}, -{42,-10,36}, -{42,-10,37}, -{42,-10,38}, -{42,-10,39}, -{42,-10,40}, -{42,-10,41}, -{42,-10,42}, -{42,-10,43}, -{42,-10,44}, -{42,-10,45}, -{42,-10,46}, -{42,-10,47}, -{42,-10,48}, -{42,-9,-31}, -{42,-9,-30}, -{42,-9,-29}, -{42,-9,-28}, -{42,-9,-27}, -{42,-9,-26}, -{42,-9,-25}, -{42,-9,-24}, -{42,-9,-23}, -{42,-9,-22}, -{42,-9,-21}, -{42,-9,-20}, -{42,-9,-19}, -{42,-9,-18}, -{42,-9,-17}, -{42,-9,-16}, -{42,-9,-15}, -{42,-9,-14}, -{42,-9,-13}, -{42,-9,-12}, -{42,-9,-11}, -{42,-9,-10}, -{42,-9,-9}, -{42,-9,-8}, -{42,-9,-7}, -{42,-9,-6}, -{42,-9,-5}, -{42,-9,-4}, -{42,-9,-3}, -{42,-9,-2}, -{42,-9,-1}, -{42,-9,0}, -{42,-9,1}, -{42,-9,2}, -{42,-9,3}, -{42,-9,4}, -{42,-9,5}, -{42,-9,6}, -{42,-9,7}, -{42,-9,8}, -{42,-9,9}, -{42,-9,10}, -{42,-9,11}, -{42,-9,12}, -{42,-9,13}, -{42,-9,14}, -{42,-9,15}, -{42,-9,16}, -{42,-9,17}, -{42,-9,18}, -{42,-9,19}, -{42,-9,20}, -{42,-9,21}, -{42,-9,22}, -{42,-9,23}, -{42,-9,24}, -{42,-9,25}, -{42,-9,26}, -{42,-9,27}, -{42,-9,28}, -{42,-9,29}, -{42,-9,30}, -{42,-9,31}, -{42,-9,32}, -{42,-9,33}, -{42,-9,34}, -{42,-9,35}, -{42,-9,36}, -{42,-9,37}, -{42,-9,38}, -{42,-9,39}, -{42,-9,40}, -{42,-9,41}, -{42,-9,42}, -{42,-9,43}, -{42,-9,44}, -{42,-9,45}, -{42,-9,46}, -{42,-9,47}, -{42,-9,48}, -{42,-8,-32}, -{42,-8,-31}, -{42,-8,-30}, -{42,-8,-29}, -{42,-8,-28}, -{42,-8,-27}, -{42,-8,-26}, -{42,-8,-25}, -{42,-8,-24}, -{42,-8,-23}, -{42,-8,-22}, -{42,-8,-21}, -{42,-8,-20}, -{42,-8,-19}, -{42,-8,-18}, -{42,-8,-17}, -{42,-8,-16}, -{42,-8,-15}, -{42,-8,-14}, -{42,-8,-13}, -{42,-8,-12}, -{42,-8,-11}, -{42,-8,-10}, -{42,-8,-9}, -{42,-8,-8}, -{42,-8,-7}, -{42,-8,-6}, -{42,-8,-5}, -{42,-8,-4}, -{42,-8,-3}, -{42,-8,-2}, -{42,-8,-1}, -{42,-8,0}, -{42,-8,1}, -{42,-8,2}, -{42,-8,3}, -{42,-8,4}, -{42,-8,5}, -{42,-8,6}, -{42,-8,7}, -{42,-8,8}, -{42,-8,9}, -{42,-8,10}, -{42,-8,11}, -{42,-8,12}, -{42,-8,13}, -{42,-8,14}, -{42,-8,15}, -{42,-8,16}, -{42,-8,17}, -{42,-8,18}, -{42,-8,19}, -{42,-8,20}, -{42,-8,21}, -{42,-8,22}, -{42,-8,23}, -{42,-8,24}, -{42,-8,25}, -{42,-8,26}, -{42,-8,27}, -{42,-8,28}, -{42,-8,29}, -{42,-8,30}, -{42,-8,31}, -{42,-8,32}, -{42,-8,33}, -{42,-8,34}, -{42,-8,35}, -{42,-8,36}, -{42,-8,37}, -{42,-8,38}, -{42,-8,39}, -{42,-8,40}, -{42,-8,41}, -{42,-8,42}, -{42,-8,43}, -{42,-8,44}, -{42,-8,45}, -{42,-8,46}, -{42,-8,47}, -{42,-8,48}, -{42,-7,-33}, -{42,-7,-32}, -{42,-7,-31}, -{42,-7,-30}, -{42,-7,-29}, -{42,-7,-28}, -{42,-7,-27}, -{42,-7,-26}, -{42,-7,-25}, -{42,-7,-24}, -{42,-7,-23}, -{42,-7,-22}, -{42,-7,-21}, -{42,-7,-20}, -{42,-7,-19}, -{42,-7,-18}, -{42,-7,-17}, -{42,-7,-16}, -{42,-7,-15}, -{42,-7,-14}, -{42,-7,-13}, -{42,-7,-12}, -{42,-7,-11}, -{42,-7,-10}, -{42,-7,-9}, -{42,-7,-8}, -{42,-7,-7}, -{42,-7,-6}, -{42,-7,-5}, -{42,-7,-4}, -{42,-7,-3}, -{42,-7,-2}, -{42,-7,-1}, -{42,-7,0}, -{42,-7,1}, -{42,-7,2}, -{42,-7,3}, -{42,-7,4}, -{42,-7,5}, -{42,-7,6}, -{42,-7,7}, -{42,-7,8}, -{42,-7,9}, -{42,-7,10}, -{42,-7,11}, -{42,-7,12}, -{42,-7,13}, -{42,-7,14}, -{42,-7,15}, -{42,-7,16}, -{42,-7,17}, -{42,-7,18}, -{42,-7,19}, -{42,-7,20}, -{42,-7,21}, -{42,-7,22}, -{42,-7,23}, -{42,-7,24}, -{42,-7,25}, -{42,-7,26}, -{42,-7,27}, -{42,-7,28}, -{42,-7,29}, -{42,-7,30}, -{42,-7,31}, -{42,-7,32}, -{42,-7,33}, -{42,-7,34}, -{42,-7,35}, -{42,-7,36}, -{42,-7,37}, -{42,-7,38}, -{42,-7,39}, -{42,-7,40}, -{42,-7,41}, -{42,-7,42}, -{42,-7,43}, -{42,-7,44}, -{42,-7,45}, -{42,-7,46}, -{42,-7,47}, -{42,-7,48}, -{42,-6,-34}, -{42,-6,-33}, -{42,-6,-32}, -{42,-6,-31}, -{42,-6,-30}, -{42,-6,-29}, -{42,-6,-28}, -{42,-6,-27}, -{42,-6,-26}, -{42,-6,-25}, -{42,-6,-24}, -{42,-6,-23}, -{42,-6,-22}, -{42,-6,-21}, -{42,-6,-20}, -{42,-6,-19}, -{42,-6,-18}, -{42,-6,-17}, -{42,-6,-16}, -{42,-6,-15}, -{42,-6,-14}, -{42,-6,-13}, -{42,-6,-12}, -{42,-6,-11}, -{42,-6,-10}, -{42,-6,-9}, -{42,-6,-8}, -{42,-6,-7}, -{42,-6,-6}, -{42,-6,-5}, -{42,-6,-4}, -{42,-6,-3}, -{42,-6,-2}, -{42,-6,-1}, -{42,-6,0}, -{42,-6,1}, -{42,-6,2}, -{42,-6,3}, -{42,-6,4}, -{42,-6,5}, -{42,-6,6}, -{42,-6,7}, -{42,-6,8}, -{42,-6,9}, -{42,-6,10}, -{42,-6,11}, -{42,-6,12}, -{42,-6,13}, -{42,-6,14}, -{42,-6,15}, -{42,-6,16}, -{42,-6,17}, -{42,-6,18}, -{42,-6,19}, -{42,-6,20}, -{42,-6,21}, -{42,-6,22}, -{42,-6,23}, -{42,-6,24}, -{42,-6,25}, -{42,-6,26}, -{42,-6,27}, -{42,-6,28}, -{42,-6,29}, -{42,-6,30}, -{42,-6,31}, -{42,-6,32}, -{42,-6,33}, -{42,-6,34}, -{42,-6,35}, -{42,-6,36}, -{42,-6,37}, -{42,-6,38}, -{42,-6,39}, -{42,-6,40}, -{42,-6,41}, -{42,-6,42}, -{42,-6,43}, -{42,-6,44}, -{42,-6,45}, -{42,-6,46}, -{42,-6,47}, -{42,-6,48}, -{42,-5,-36}, -{42,-5,-35}, -{42,-5,-34}, -{42,-5,-33}, -{42,-5,-32}, -{42,-5,-31}, -{42,-5,-30}, -{42,-5,-29}, -{42,-5,-28}, -{42,-5,-27}, -{42,-5,-26}, -{42,-5,-25}, -{42,-5,-24}, -{42,-5,-23}, -{42,-5,-22}, -{42,-5,-21}, -{42,-5,-20}, -{42,-5,-19}, -{42,-5,-18}, -{42,-5,-17}, -{42,-5,-16}, -{42,-5,-15}, -{42,-5,-14}, -{42,-5,-13}, -{42,-5,-12}, -{42,-5,-11}, -{42,-5,-10}, -{42,-5,-9}, -{42,-5,-8}, -{42,-5,-7}, -{42,-5,-6}, -{42,-5,-5}, -{42,-5,-4}, -{42,-5,-3}, -{42,-5,-2}, -{42,-5,-1}, -{42,-5,0}, -{42,-5,1}, -{42,-5,2}, -{42,-5,3}, -{42,-5,4}, -{42,-5,5}, -{42,-5,6}, -{42,-5,7}, -{42,-5,8}, -{42,-5,9}, -{42,-5,10}, -{42,-5,11}, -{42,-5,12}, -{42,-5,13}, -{42,-5,14}, -{42,-5,15}, -{42,-5,16}, -{42,-5,17}, -{42,-5,18}, -{42,-5,19}, -{42,-5,20}, -{42,-5,21}, -{42,-5,22}, -{42,-5,23}, -{42,-5,24}, -{42,-5,25}, -{42,-5,26}, -{42,-5,27}, -{42,-5,28}, -{42,-5,29}, -{42,-5,30}, -{42,-5,31}, -{42,-5,32}, -{42,-5,33}, -{42,-5,34}, -{42,-5,35}, -{42,-5,36}, -{42,-5,37}, -{42,-5,38}, -{42,-5,39}, -{42,-5,40}, -{42,-5,41}, -{42,-5,42}, -{42,-5,43}, -{42,-5,44}, -{42,-5,45}, -{42,-5,46}, -{42,-5,47}, -{42,-5,48}, -{42,-5,49}, -{42,-4,-37}, -{42,-4,-36}, -{42,-4,-35}, -{42,-4,-34}, -{42,-4,-33}, -{42,-4,-32}, -{42,-4,-31}, -{42,-4,-30}, -{42,-4,-29}, -{42,-4,-28}, -{42,-4,-27}, -{42,-4,-26}, -{42,-4,-25}, -{42,-4,-24}, -{42,-4,-23}, -{42,-4,-22}, -{42,-4,-21}, -{42,-4,-20}, -{42,-4,-19}, -{42,-4,-18}, -{42,-4,-17}, -{42,-4,-16}, -{42,-4,-15}, -{42,-4,-14}, -{42,-4,-13}, -{42,-4,-12}, -{42,-4,-11}, -{42,-4,-10}, -{42,-4,-9}, -{42,-4,-8}, -{42,-4,-7}, -{42,-4,-6}, -{42,-4,-5}, -{42,-4,-4}, -{42,-4,-3}, -{42,-4,-2}, -{42,-4,-1}, -{42,-4,0}, -{42,-4,1}, -{42,-4,2}, -{42,-4,3}, -{42,-4,4}, -{42,-4,5}, -{42,-4,6}, -{42,-4,7}, -{42,-4,8}, -{42,-4,9}, -{42,-4,10}, -{42,-4,11}, -{42,-4,12}, -{42,-4,13}, -{42,-4,14}, -{42,-4,15}, -{42,-4,16}, -{42,-4,17}, -{42,-4,18}, -{42,-4,19}, -{42,-4,20}, -{42,-4,21}, -{42,-4,22}, -{42,-4,23}, -{42,-4,24}, -{42,-4,25}, -{42,-4,26}, -{42,-4,27}, -{42,-4,28}, -{42,-4,29}, -{42,-4,30}, -{42,-4,31}, -{42,-4,32}, -{42,-4,33}, -{42,-4,34}, -{42,-4,35}, -{42,-4,36}, -{42,-4,37}, -{42,-4,38}, -{42,-4,39}, -{42,-4,40}, -{42,-4,41}, -{42,-4,42}, -{42,-4,43}, -{42,-4,44}, -{42,-4,45}, -{42,-4,46}, -{42,-4,47}, -{42,-4,48}, -{42,-4,49}, -{42,-3,-38}, -{42,-3,-37}, -{42,-3,-36}, -{42,-3,-35}, -{42,-3,-34}, -{42,-3,-33}, -{42,-3,-32}, -{42,-3,-31}, -{42,-3,-30}, -{42,-3,-29}, -{42,-3,-28}, -{42,-3,-27}, -{42,-3,-26}, -{42,-3,-25}, -{42,-3,-24}, -{42,-3,-23}, -{42,-3,-22}, -{42,-3,-21}, -{42,-3,-20}, -{42,-3,-19}, -{42,-3,-18}, -{42,-3,-17}, -{42,-3,-16}, -{42,-3,-15}, -{42,-3,-14}, -{42,-3,-13}, -{42,-3,-12}, -{42,-3,-11}, -{42,-3,-10}, -{42,-3,-9}, -{42,-3,-8}, -{42,-3,-7}, -{42,-3,-6}, -{42,-3,-5}, -{42,-3,-4}, -{42,-3,-3}, -{42,-3,-2}, -{42,-3,-1}, -{42,-3,0}, -{42,-3,1}, -{42,-3,2}, -{42,-3,3}, -{42,-3,4}, -{42,-3,5}, -{42,-3,6}, -{42,-3,7}, -{42,-3,8}, -{42,-3,9}, -{42,-3,10}, -{42,-3,11}, -{42,-3,12}, -{42,-3,13}, -{42,-3,14}, -{42,-3,15}, -{42,-3,16}, -{42,-3,17}, -{42,-3,18}, -{42,-3,19}, -{42,-3,20}, -{42,-3,21}, -{42,-3,22}, -{42,-3,23}, -{42,-3,24}, -{42,-3,25}, -{42,-3,26}, -{42,-3,27}, -{42,-3,28}, -{42,-3,29}, -{42,-3,30}, -{42,-3,31}, -{42,-3,32}, -{42,-3,33}, -{42,-3,34}, -{42,-3,35}, -{42,-3,36}, -{42,-3,37}, -{42,-3,38}, -{42,-3,39}, -{42,-3,40}, -{42,-3,41}, -{42,-3,42}, -{42,-3,43}, -{42,-3,44}, -{42,-3,45}, -{42,-3,46}, -{42,-3,47}, -{42,-3,48}, -{42,-3,49}, -{42,-2,-39}, -{42,-2,-38}, -{42,-2,-37}, -{42,-2,-36}, -{42,-2,-35}, -{42,-2,-34}, -{42,-2,-33}, -{42,-2,-32}, -{42,-2,-31}, -{42,-2,-30}, -{42,-2,-29}, -{42,-2,-28}, -{42,-2,-27}, -{42,-2,-26}, -{42,-2,-25}, -{42,-2,-24}, -{42,-2,-23}, -{42,-2,-22}, -{42,-2,-21}, -{42,-2,-20}, -{42,-2,-19}, -{42,-2,-18}, -{42,-2,-17}, -{42,-2,-16}, -{42,-2,-15}, -{42,-2,-14}, -{42,-2,-13}, -{42,-2,-12}, -{42,-2,-11}, -{42,-2,-10}, -{42,-2,-9}, -{42,-2,-8}, -{42,-2,-7}, -{42,-2,-6}, -{42,-2,-5}, -{42,-2,-4}, -{42,-2,-3}, -{42,-2,-2}, -{42,-2,-1}, -{42,-2,0}, -{42,-2,1}, -{42,-2,2}, -{42,-2,3}, -{42,-2,4}, -{42,-2,5}, -{42,-2,6}, -{42,-2,7}, -{42,-2,8}, -{42,-2,9}, -{42,-2,10}, -{42,-2,11}, -{42,-2,12}, -{42,-2,13}, -{42,-2,14}, -{42,-2,15}, -{42,-2,16}, -{42,-2,17}, -{42,-2,18}, -{42,-2,19}, -{42,-2,20}, -{42,-2,21}, -{42,-2,22}, -{42,-2,23}, -{42,-2,24}, -{42,-2,25}, -{42,-2,26}, -{42,-2,27}, -{42,-2,28}, -{42,-2,29}, -{42,-2,30}, -{42,-2,31}, -{42,-2,32}, -{42,-2,33}, -{42,-2,34}, -{42,-2,35}, -{42,-2,36}, -{42,-2,37}, -{42,-2,38}, -{42,-2,39}, -{42,-2,40}, -{42,-2,41}, -{42,-2,42}, -{42,-2,43}, -{42,-2,44}, -{42,-2,45}, -{42,-2,46}, -{42,-2,47}, -{42,-2,48}, -{42,-2,49}, -{42,-1,-40}, -{42,-1,-39}, -{42,-1,-38}, -{42,-1,-37}, -{42,-1,-36}, -{42,-1,-35}, -{42,-1,-34}, -{42,-1,-33}, -{42,-1,-32}, -{42,-1,-31}, -{42,-1,-30}, -{42,-1,-29}, -{42,-1,-28}, -{42,-1,-27}, -{42,-1,-26}, -{42,-1,-25}, -{42,-1,-24}, -{42,-1,-23}, -{42,-1,-22}, -{42,-1,-21}, -{42,-1,-20}, -{42,-1,-19}, -{42,-1,-18}, -{42,-1,-17}, -{42,-1,-16}, -{42,-1,-15}, -{42,-1,-14}, -{42,-1,-13}, -{42,-1,-12}, -{42,-1,-11}, -{42,-1,-10}, -{42,-1,-9}, -{42,-1,-8}, -{42,-1,-7}, -{42,-1,-6}, -{42,-1,-5}, -{42,-1,-4}, -{42,-1,-3}, -{42,-1,-2}, -{42,-1,-1}, -{42,-1,0}, -{42,-1,1}, -{42,-1,2}, -{42,-1,3}, -{42,-1,4}, -{42,-1,5}, -{42,-1,6}, -{42,-1,7}, -{42,-1,8}, -{42,-1,9}, -{42,-1,10}, -{42,-1,11}, -{42,-1,12}, -{42,-1,13}, -{42,-1,14}, -{42,-1,15}, -{42,-1,16}, -{42,-1,17}, -{42,-1,18}, -{42,-1,19}, -{42,-1,20}, -{42,-1,21}, -{42,-1,22}, -{42,-1,23}, -{42,-1,24}, -{42,-1,25}, -{42,-1,26}, -{42,-1,27}, -{42,-1,28}, -{42,-1,29}, -{42,-1,30}, -{42,-1,31}, -{42,-1,32}, -{42,-1,33}, -{42,-1,34}, -{42,-1,35}, -{42,-1,36}, -{42,-1,37}, -{42,-1,38}, -{42,-1,39}, -{42,-1,40}, -{42,-1,41}, -{42,-1,42}, -{42,-1,43}, -{42,-1,44}, -{42,-1,45}, -{42,-1,46}, -{42,-1,47}, -{42,-1,48}, -{42,-1,49}, -{42,0,-41}, -{42,0,-40}, -{42,0,-39}, -{42,0,-38}, -{42,0,-37}, -{42,0,-36}, -{42,0,-35}, -{42,0,-34}, -{42,0,-33}, -{42,0,-32}, -{42,0,-31}, -{42,0,-30}, -{42,0,-29}, -{42,0,-28}, -{42,0,-27}, -{42,0,-26}, -{42,0,-25}, -{42,0,-24}, -{42,0,-23}, -{42,0,-22}, -{42,0,-21}, -{42,0,-20}, -{42,0,-19}, -{42,0,-18}, -{42,0,-17}, -{42,0,-16}, -{42,0,-15}, -{42,0,-14}, -{42,0,-13}, -{42,0,-12}, -{42,0,-11}, -{42,0,-10}, -{42,0,-9}, -{42,0,-8}, -{42,0,-7}, -{42,0,-6}, -{42,0,-5}, -{42,0,-4}, -{42,0,-3}, -{42,0,-2}, -{42,0,-1}, -{42,0,0}, -{42,0,1}, -{42,0,2}, -{42,0,3}, -{42,0,4}, -{42,0,5}, -{42,0,6}, -{42,0,7}, -{42,0,8}, -{42,0,9}, -{42,0,10}, -{42,0,11}, -{42,0,12}, -{42,0,13}, -{42,0,14}, -{42,0,15}, -{42,0,16}, -{42,0,17}, -{42,0,18}, -{42,0,19}, -{42,0,20}, -{42,0,21}, -{42,0,22}, -{42,0,23}, -{42,0,24}, -{42,0,25}, -{42,0,26}, -{42,0,27}, -{42,0,28}, -{42,0,29}, -{42,0,30}, -{42,0,31}, -{42,0,32}, -{42,0,33}, -{42,0,34}, -{42,0,35}, -{42,0,36}, -{42,0,37}, -{42,0,38}, -{42,0,39}, -{42,0,40}, -{42,0,41}, -{42,0,42}, -{42,0,43}, -{42,0,44}, -{42,0,45}, -{42,0,46}, -{42,0,47}, -{42,0,48}, -{42,0,49}, -{42,1,-42}, -{42,1,-41}, -{42,1,-40}, -{42,1,-39}, -{42,1,-38}, -{42,1,-37}, -{42,1,-36}, -{42,1,-35}, -{42,1,-34}, -{42,1,-33}, -{42,1,-32}, -{42,1,-31}, -{42,1,-30}, -{42,1,-29}, -{42,1,-28}, -{42,1,-27}, -{42,1,-26}, -{42,1,-25}, -{42,1,-24}, -{42,1,-23}, -{42,1,-22}, -{42,1,-21}, -{42,1,-20}, -{42,1,-19}, -{42,1,-18}, -{42,1,-17}, -{42,1,-16}, -{42,1,-15}, -{42,1,-14}, -{42,1,-13}, -{42,1,-12}, -{42,1,-11}, -{42,1,-10}, -{42,1,-9}, -{42,1,-8}, -{42,1,-7}, -{42,1,-6}, -{42,1,-5}, -{42,1,-4}, -{42,1,-3}, -{42,1,-2}, -{42,1,-1}, -{42,1,0}, -{42,1,1}, -{42,1,2}, -{42,1,3}, -{42,1,4}, -{42,1,5}, -{42,1,6}, -{42,1,7}, -{42,1,8}, -{42,1,9}, -{42,1,10}, -{42,1,11}, -{42,1,12}, -{42,1,13}, -{42,1,14}, -{42,1,15}, -{42,1,16}, -{42,1,17}, -{42,1,18}, -{42,1,19}, -{42,1,20}, -{42,1,21}, -{42,1,22}, -{42,1,23}, -{42,1,24}, -{42,1,25}, -{42,1,26}, -{42,1,27}, -{42,1,28}, -{42,1,29}, -{42,1,30}, -{42,1,31}, -{42,1,32}, -{42,1,33}, -{42,1,34}, -{42,1,35}, -{42,1,36}, -{42,1,37}, -{42,1,38}, -{42,1,39}, -{42,1,40}, -{42,1,41}, -{42,1,42}, -{42,1,43}, -{42,1,44}, -{42,1,45}, -{42,1,46}, -{42,1,47}, -{42,1,48}, -{42,1,49}, -{42,2,-44}, -{42,2,-43}, -{42,2,-42}, -{42,2,-41}, -{42,2,-40}, -{42,2,-39}, -{42,2,-38}, -{42,2,-37}, -{42,2,-36}, -{42,2,-35}, -{42,2,-34}, -{42,2,-33}, -{42,2,-32}, -{42,2,-31}, -{42,2,-30}, -{42,2,-29}, -{42,2,-28}, -{42,2,-27}, -{42,2,-26}, -{42,2,-25}, -{42,2,-24}, -{42,2,-23}, -{42,2,-22}, -{42,2,-21}, -{42,2,-20}, -{42,2,-19}, -{42,2,-18}, -{42,2,-17}, -{42,2,-16}, -{42,2,-15}, -{42,2,-14}, -{42,2,-13}, -{42,2,-12}, -{42,2,-11}, -{42,2,-10}, -{42,2,-9}, -{42,2,-8}, -{42,2,-7}, -{42,2,-6}, -{42,2,-5}, -{42,2,-4}, -{42,2,-3}, -{42,2,-2}, -{42,2,-1}, -{42,2,0}, -{42,2,1}, -{42,2,2}, -{42,2,3}, -{42,2,4}, -{42,2,5}, -{42,2,6}, -{42,2,7}, -{42,2,8}, -{42,2,9}, -{42,2,10}, -{42,2,11}, -{42,2,12}, -{42,2,13}, -{42,2,14}, -{42,2,15}, -{42,2,16}, -{42,2,17}, -{42,2,18}, -{42,2,19}, -{42,2,20}, -{42,2,21}, -{42,2,22}, -{42,2,23}, -{42,2,24}, -{42,2,25}, -{42,2,26}, -{42,2,27}, -{42,2,28}, -{42,2,29}, -{42,2,30}, -{42,2,31}, -{42,2,32}, -{42,2,33}, -{42,2,34}, -{42,2,35}, -{42,2,36}, -{42,2,37}, -{42,2,38}, -{42,2,39}, -{42,2,40}, -{42,2,41}, -{42,2,42}, -{42,2,43}, -{42,2,44}, -{42,2,45}, -{42,2,46}, -{42,2,47}, -{42,2,48}, -{42,2,49}, -{42,3,-45}, -{42,3,-44}, -{42,3,-43}, -{42,3,-42}, -{42,3,-41}, -{42,3,-40}, -{42,3,-39}, -{42,3,-38}, -{42,3,-37}, -{42,3,-36}, -{42,3,-35}, -{42,3,-34}, -{42,3,-33}, -{42,3,-32}, -{42,3,-31}, -{42,3,-30}, -{42,3,-29}, -{42,3,-28}, -{42,3,-27}, -{42,3,-26}, -{42,3,-25}, -{42,3,-24}, -{42,3,-23}, -{42,3,-22}, -{42,3,-21}, -{42,3,-20}, -{42,3,-19}, -{42,3,-18}, -{42,3,-17}, -{42,3,-16}, -{42,3,-15}, -{42,3,-14}, -{42,3,-13}, -{42,3,-12}, -{42,3,-11}, -{42,3,-10}, -{42,3,-9}, -{42,3,-8}, -{42,3,-7}, -{42,3,-6}, -{42,3,-5}, -{42,3,-4}, -{42,3,-3}, -{42,3,-2}, -{42,3,-1}, -{42,3,0}, -{42,3,1}, -{42,3,2}, -{42,3,3}, -{42,3,4}, -{42,3,5}, -{42,3,6}, -{42,3,7}, -{42,3,8}, -{42,3,9}, -{42,3,10}, -{42,3,11}, -{42,3,12}, -{42,3,13}, -{42,3,14}, -{42,3,15}, -{42,3,16}, -{42,3,17}, -{42,3,18}, -{42,3,19}, -{42,3,20}, -{42,3,21}, -{42,3,22}, -{42,3,23}, -{42,3,24}, -{42,3,25}, -{42,3,26}, -{42,3,27}, -{42,3,28}, -{42,3,29}, -{42,3,30}, -{42,3,31}, -{42,3,32}, -{42,3,33}, -{42,3,34}, -{42,3,35}, -{42,3,36}, -{42,3,37}, -{42,3,38}, -{42,3,39}, -{42,3,40}, -{42,3,41}, -{42,3,42}, -{42,3,43}, -{42,3,44}, -{42,3,45}, -{42,3,46}, -{42,3,47}, -{42,3,48}, -{42,3,49}, -{42,4,-46}, -{42,4,-45}, -{42,4,-44}, -{42,4,-43}, -{42,4,-42}, -{42,4,-41}, -{42,4,-40}, -{42,4,-39}, -{42,4,-38}, -{42,4,-37}, -{42,4,-36}, -{42,4,-35}, -{42,4,-34}, -{42,4,-33}, -{42,4,-32}, -{42,4,-31}, -{42,4,-30}, -{42,4,-29}, -{42,4,-28}, -{42,4,-27}, -{42,4,-26}, -{42,4,-25}, -{42,4,-24}, -{42,4,-23}, -{42,4,-22}, -{42,4,-21}, -{42,4,-20}, -{42,4,-19}, -{42,4,-18}, -{42,4,-17}, -{42,4,-16}, -{42,4,-15}, -{42,4,-14}, -{42,4,-13}, -{42,4,-12}, -{42,4,-11}, -{42,4,-10}, -{42,4,-9}, -{42,4,-8}, -{42,4,-7}, -{42,4,-6}, -{42,4,-5}, -{42,4,-4}, -{42,4,-3}, -{42,4,-2}, -{42,4,-1}, -{42,4,0}, -{42,4,1}, -{42,4,2}, -{42,4,3}, -{42,4,4}, -{42,4,5}, -{42,4,6}, -{42,4,7}, -{42,4,8}, -{42,4,9}, -{42,4,10}, -{42,4,11}, -{42,4,12}, -{42,4,13}, -{42,4,14}, -{42,4,15}, -{42,4,16}, -{42,4,17}, -{42,4,18}, -{42,4,19}, -{42,4,20}, -{42,4,21}, -{42,4,22}, -{42,4,23}, -{42,4,24}, -{42,4,25}, -{42,4,26}, -{42,4,27}, -{42,4,28}, -{42,4,29}, -{42,4,30}, -{42,4,31}, -{42,4,32}, -{42,4,33}, -{42,4,34}, -{42,4,35}, -{42,4,36}, -{42,4,37}, -{42,4,38}, -{42,4,39}, -{42,4,40}, -{42,4,41}, -{42,4,42}, -{42,4,43}, -{42,4,44}, -{42,4,45}, -{42,4,46}, -{42,4,47}, -{42,4,48}, -{42,4,49}, -{42,5,-47}, -{42,5,-46}, -{42,5,-45}, -{42,5,-44}, -{42,5,-43}, -{42,5,-42}, -{42,5,-41}, -{42,5,-40}, -{42,5,-39}, -{42,5,-38}, -{42,5,-37}, -{42,5,-36}, -{42,5,-35}, -{42,5,-34}, -{42,5,-33}, -{42,5,-32}, -{42,5,-31}, -{42,5,-30}, -{42,5,-29}, -{42,5,-28}, -{42,5,-27}, -{42,5,-26}, -{42,5,-25}, -{42,5,-24}, -{42,5,-23}, -{42,5,-22}, -{42,5,-21}, -{42,5,-20}, -{42,5,-19}, -{42,5,-18}, -{42,5,-17}, -{42,5,-16}, -{42,5,-15}, -{42,5,-14}, -{42,5,-13}, -{42,5,-12}, -{42,5,-11}, -{42,5,-10}, -{42,5,-9}, -{42,5,-8}, -{42,5,-7}, -{42,5,-6}, -{42,5,-5}, -{42,5,-4}, -{42,5,-3}, -{42,5,-2}, -{42,5,-1}, -{42,5,0}, -{42,5,1}, -{42,5,2}, -{42,5,3}, -{42,5,4}, -{42,5,5}, -{42,5,6}, -{42,5,7}, -{42,5,8}, -{42,5,9}, -{42,5,10}, -{42,5,11}, -{42,5,12}, -{42,5,13}, -{42,5,14}, -{42,5,15}, -{42,5,16}, -{42,5,17}, -{42,5,18}, -{42,5,19}, -{42,5,20}, -{42,5,21}, -{42,5,22}, -{42,5,23}, -{42,5,24}, -{42,5,25}, -{42,5,26}, -{42,5,27}, -{42,5,28}, -{42,5,29}, -{42,5,30}, -{42,5,31}, -{42,5,32}, -{42,5,33}, -{42,5,34}, -{42,5,35}, -{42,5,36}, -{42,5,37}, -{42,5,38}, -{42,5,39}, -{42,5,40}, -{42,5,41}, -{42,5,42}, -{42,5,43}, -{42,5,44}, -{42,5,45}, -{42,5,46}, -{42,5,47}, -{42,5,48}, -{42,5,49}, -{42,6,-48}, -{42,6,-47}, -{42,6,-46}, -{42,6,-45}, -{42,6,-44}, -{42,6,-43}, -{42,6,-42}, -{42,6,-41}, -{42,6,-40}, -{42,6,-39}, -{42,6,-38}, -{42,6,-37}, -{42,6,-36}, -{42,6,-35}, -{42,6,-34}, -{42,6,-33}, -{42,6,-32}, -{42,6,-31}, -{42,6,-30}, -{42,6,-29}, -{42,6,-28}, -{42,6,-27}, -{42,6,-26}, -{42,6,-25}, -{42,6,-24}, -{42,6,-23}, -{42,6,-22}, -{42,6,-21}, -{42,6,-20}, -{42,6,-19}, -{42,6,-18}, -{42,6,-17}, -{42,6,-16}, -{42,6,-15}, -{42,6,-14}, -{42,6,-13}, -{42,6,-12}, -{42,6,-11}, -{42,6,-10}, -{42,6,-9}, -{42,6,-8}, -{42,6,-7}, -{42,6,-6}, -{42,6,-5}, -{42,6,-4}, -{42,6,-3}, -{42,6,-2}, -{42,6,-1}, -{42,6,0}, -{42,6,1}, -{42,6,2}, -{42,6,3}, -{42,6,4}, -{42,6,5}, -{42,6,6}, -{42,6,7}, -{42,6,8}, -{42,6,9}, -{42,6,10}, -{42,6,11}, -{42,6,12}, -{42,6,13}, -{42,6,14}, -{42,6,15}, -{42,6,16}, -{42,6,17}, -{42,6,18}, -{42,6,19}, -{42,6,20}, -{42,6,21}, -{42,6,22}, -{42,6,23}, -{42,6,24}, -{42,6,25}, -{42,6,26}, -{42,6,27}, -{42,6,28}, -{42,6,29}, -{42,6,30}, -{42,6,31}, -{42,6,32}, -{42,6,33}, -{42,6,34}, -{42,6,35}, -{42,6,36}, -{42,6,37}, -{42,6,38}, -{42,6,39}, -{42,6,40}, -{42,6,41}, -{42,6,42}, -{42,6,43}, -{42,6,44}, -{42,6,45}, -{42,6,46}, -{42,6,47}, -{42,6,48}, -{42,6,49}, -{42,7,-49}, -{42,7,-48}, -{42,7,-47}, -{42,7,-46}, -{42,7,-45}, -{42,7,-44}, -{42,7,-43}, -{42,7,-42}, -{42,7,-41}, -{42,7,-40}, -{42,7,-39}, -{42,7,-38}, -{42,7,-37}, -{42,7,-36}, -{42,7,-35}, -{42,7,-34}, -{42,7,-33}, -{42,7,-32}, -{42,7,-31}, -{42,7,-30}, -{42,7,-29}, -{42,7,-28}, -{42,7,-27}, -{42,7,-26}, -{42,7,-25}, -{42,7,-24}, -{42,7,-23}, -{42,7,-22}, -{42,7,-21}, -{42,7,-20}, -{42,7,-19}, -{42,7,-18}, -{42,7,-17}, -{42,7,-16}, -{42,7,-15}, -{42,7,-14}, -{42,7,-13}, -{42,7,-12}, -{42,7,-11}, -{42,7,-10}, -{42,7,-9}, -{42,7,-8}, -{42,7,-7}, -{42,7,-6}, -{42,7,-5}, -{42,7,-4}, -{42,7,-3}, -{42,7,-2}, -{42,7,-1}, -{42,7,0}, -{42,7,1}, -{42,7,2}, -{42,7,3}, -{42,7,4}, -{42,7,5}, -{42,7,6}, -{42,7,7}, -{42,7,8}, -{42,7,9}, -{42,7,10}, -{42,7,11}, -{42,7,12}, -{42,7,13}, -{42,7,14}, -{42,7,15}, -{42,7,16}, -{42,7,17}, -{42,7,18}, -{42,7,19}, -{42,7,20}, -{42,7,21}, -{42,7,22}, -{42,7,23}, -{42,7,24}, -{42,7,25}, -{42,7,26}, -{42,7,27}, -{42,7,28}, -{42,7,29}, -{42,7,30}, -{42,7,31}, -{42,7,32}, -{42,7,33}, -{42,7,34}, -{42,7,35}, -{42,7,36}, -{42,7,37}, -{42,7,38}, -{42,7,39}, -{42,7,40}, -{42,7,41}, -{42,7,42}, -{42,7,43}, -{42,7,44}, -{42,7,45}, -{42,7,46}, -{42,7,47}, -{42,7,48}, -{42,7,49}, -{42,8,-50}, -{42,8,-49}, -{42,8,-48}, -{42,8,-47}, -{42,8,-46}, -{42,8,-45}, -{42,8,-44}, -{42,8,-43}, -{42,8,-42}, -{42,8,-41}, -{42,8,-40}, -{42,8,-39}, -{42,8,-38}, -{42,8,-37}, -{42,8,-36}, -{42,8,-35}, -{42,8,-34}, -{42,8,-33}, -{42,8,-32}, -{42,8,-31}, -{42,8,-30}, -{42,8,-29}, -{42,8,-28}, -{42,8,-27}, -{42,8,-26}, -{42,8,-25}, -{42,8,-24}, -{42,8,-23}, -{42,8,-22}, -{42,8,-21}, -{42,8,-20}, -{42,8,-19}, -{42,8,-18}, -{42,8,-17}, -{42,8,-16}, -{42,8,-15}, -{42,8,-14}, -{42,8,-13}, -{42,8,-12}, -{42,8,-11}, -{42,8,-10}, -{42,8,-9}, -{42,8,-8}, -{42,8,-7}, -{42,8,-6}, -{42,8,-5}, -{42,8,-4}, -{42,8,-3}, -{42,8,-2}, -{42,8,-1}, -{42,8,0}, -{42,8,1}, -{42,8,2}, -{42,8,3}, -{42,8,4}, -{42,8,5}, -{42,8,6}, -{42,8,7}, -{42,8,8}, -{42,8,9}, -{42,8,10}, -{42,8,11}, -{42,8,12}, -{42,8,13}, -{42,8,14}, -{42,8,15}, -{42,8,16}, -{42,8,17}, -{42,8,18}, -{42,8,19}, -{42,8,20}, -{42,8,21}, -{42,8,22}, -{42,8,23}, -{42,8,24}, -{42,8,25}, -{42,8,26}, -{42,8,27}, -{42,8,28}, -{42,8,29}, -{42,8,30}, -{42,8,31}, -{42,8,32}, -{42,8,33}, -{42,8,34}, -{42,8,35}, -{42,8,36}, -{42,8,37}, -{42,8,38}, -{42,8,39}, -{42,8,40}, -{42,8,41}, -{42,8,42}, -{42,8,43}, -{42,8,44}, -{42,8,45}, -{42,8,46}, -{42,8,47}, -{42,8,48}, -{42,8,49}, -{42,9,-51}, -{42,9,-50}, -{42,9,-49}, -{42,9,-48}, -{42,9,-47}, -{42,9,-46}, -{42,9,-45}, -{42,9,-44}, -{42,9,-43}, -{42,9,-42}, -{42,9,-41}, -{42,9,-40}, -{42,9,-39}, -{42,9,-38}, -{42,9,-37}, -{42,9,-36}, -{42,9,-35}, -{42,9,-34}, -{42,9,-33}, -{42,9,-32}, -{42,9,-31}, -{42,9,-30}, -{42,9,-29}, -{42,9,-28}, -{42,9,-27}, -{42,9,-26}, -{42,9,-25}, -{42,9,-24}, -{42,9,-23}, -{42,9,-22}, -{42,9,-21}, -{42,9,-20}, -{42,9,-19}, -{42,9,-18}, -{42,9,-17}, -{42,9,-16}, -{42,9,-15}, -{42,9,-14}, -{42,9,-13}, -{42,9,-12}, -{42,9,-11}, -{42,9,-10}, -{42,9,-9}, -{42,9,-8}, -{42,9,-7}, -{42,9,-6}, -{42,9,-5}, -{42,9,-4}, -{42,9,-3}, -{42,9,-2}, -{42,9,-1}, -{42,9,0}, -{42,9,1}, -{42,9,2}, -{42,9,3}, -{42,9,4}, -{42,9,5}, -{42,9,6}, -{42,9,7}, -{42,9,8}, -{42,9,9}, -{42,9,10}, -{42,9,11}, -{42,9,12}, -{42,9,13}, -{42,9,14}, -{42,9,15}, -{42,9,16}, -{42,9,17}, -{42,9,18}, -{42,9,19}, -{42,9,20}, -{42,9,21}, -{42,9,22}, -{42,9,23}, -{42,9,24}, -{42,9,25}, -{42,9,26}, -{42,9,27}, -{42,9,28}, -{42,9,29}, -{42,9,30}, -{42,9,31}, -{42,9,32}, -{42,9,33}, -{42,9,34}, -{42,9,35}, -{42,9,36}, -{42,9,37}, -{42,9,38}, -{42,9,39}, -{42,9,40}, -{42,9,41}, -{42,9,42}, -{42,9,43}, -{42,9,44}, -{42,9,45}, -{42,9,46}, -{42,9,47}, -{42,9,48}, -{42,9,49}, -{42,9,50}, -{42,10,-52}, -{42,10,-51}, -{42,10,-50}, -{42,10,-49}, -{42,10,-48}, -{42,10,-47}, -{42,10,-46}, -{42,10,-45}, -{42,10,-44}, -{42,10,-43}, -{42,10,-42}, -{42,10,-41}, -{42,10,-40}, -{42,10,-39}, -{42,10,-38}, -{42,10,-37}, -{42,10,-36}, -{42,10,-35}, -{42,10,-34}, -{42,10,-33}, -{42,10,-32}, -{42,10,-31}, -{42,10,-30}, -{42,10,-29}, -{42,10,-28}, -{42,10,-27}, -{42,10,-26}, -{42,10,-25}, -{42,10,-24}, -{42,10,-23}, -{42,10,-22}, -{42,10,-21}, -{42,10,-20}, -{42,10,-19}, -{42,10,-18}, -{42,10,-17}, -{42,10,-16}, -{42,10,-15}, -{42,10,-14}, -{42,10,-13}, -{42,10,-12}, -{42,10,-11}, -{42,10,-10}, -{42,10,-9}, -{42,10,-8}, -{42,10,-7}, -{42,10,-6}, -{42,10,-5}, -{42,10,-4}, -{42,10,-3}, -{42,10,-2}, -{42,10,-1}, -{42,10,0}, -{42,10,1}, -{42,10,2}, -{42,10,3}, -{42,10,4}, -{42,10,5}, -{42,10,6}, -{42,10,7}, -{42,10,8}, -{42,10,9}, -{42,10,10}, -{42,10,11}, -{42,10,12}, -{42,10,13}, -{42,10,14}, -{42,10,15}, -{42,10,16}, -{42,10,17}, -{42,10,18}, -{42,10,19}, -{42,10,20}, -{42,10,21}, -{42,10,22}, -{42,10,23}, -{42,10,24}, -{42,10,25}, -{42,10,26}, -{42,10,27}, -{42,10,28}, -{42,10,29}, -{42,10,30}, -{42,10,31}, -{42,10,32}, -{42,10,33}, -{42,10,34}, -{42,10,35}, -{42,10,36}, -{42,10,37}, -{42,10,38}, -{42,10,39}, -{42,10,40}, -{42,10,41}, -{42,10,42}, -{42,10,43}, -{42,10,44}, -{42,10,45}, -{42,10,46}, -{42,10,47}, -{42,10,48}, -{42,10,49}, -{42,10,50}, -{42,11,-53}, -{42,11,-52}, -{42,11,-51}, -{42,11,-50}, -{42,11,-49}, -{42,11,-48}, -{42,11,-47}, -{42,11,-46}, -{42,11,-45}, -{42,11,-44}, -{42,11,-43}, -{42,11,-42}, -{42,11,-41}, -{42,11,-40}, -{42,11,-39}, -{42,11,-38}, -{42,11,-37}, -{42,11,-36}, -{42,11,-35}, -{42,11,-34}, -{42,11,-33}, -{42,11,-32}, -{42,11,-31}, -{42,11,-30}, -{42,11,-29}, -{42,11,-28}, -{42,11,-27}, -{42,11,-26}, -{42,11,-25}, -{42,11,-24}, -{42,11,-23}, -{42,11,-22}, -{42,11,-21}, -{42,11,-20}, -{42,11,-19}, -{42,11,-18}, -{42,11,-17}, -{42,11,-16}, -{42,11,-15}, -{42,11,-14}, -{42,11,-13}, -{42,11,-12}, -{42,11,-11}, -{42,11,-10}, -{42,11,-9}, -{42,11,-8}, -{42,11,-7}, -{42,11,-6}, -{42,11,-5}, -{42,11,-4}, -{42,11,-3}, -{42,11,-2}, -{42,11,-1}, -{42,11,0}, -{42,11,1}, -{42,11,2}, -{42,11,3}, -{42,11,4}, -{42,11,5}, -{42,11,6}, -{42,11,7}, -{42,11,8}, -{42,11,9}, -{42,11,10}, -{42,11,11}, -{42,11,12}, -{42,11,13}, -{42,11,14}, -{42,11,15}, -{42,11,16}, -{42,11,17}, -{42,11,18}, -{42,11,19}, -{42,11,20}, -{42,11,21}, -{42,11,22}, -{42,11,23}, -{42,11,24}, -{42,11,25}, -{42,11,26}, -{42,11,27}, -{42,11,28}, -{42,11,29}, -{42,11,30}, -{42,11,31}, -{42,11,32}, -{42,11,33}, -{42,11,34}, -{42,11,35}, -{42,11,36}, -{42,11,37}, -{42,11,38}, -{42,11,39}, -{42,11,40}, -{42,11,41}, -{42,11,42}, -{42,11,43}, -{42,11,44}, -{42,11,45}, -{42,11,46}, -{42,11,47}, -{42,11,48}, -{42,11,49}, -{42,11,50}, -{42,12,-54}, -{42,12,-53}, -{42,12,-52}, -{42,12,-51}, -{42,12,-50}, -{42,12,-49}, -{42,12,-48}, -{42,12,-47}, -{42,12,-46}, -{42,12,-45}, -{42,12,-44}, -{42,12,-43}, -{42,12,-42}, -{42,12,-41}, -{42,12,-40}, -{42,12,-39}, -{42,12,-38}, -{42,12,-37}, -{42,12,-36}, -{42,12,-35}, -{42,12,-34}, -{42,12,-33}, -{42,12,-32}, -{42,12,-31}, -{42,12,-30}, -{42,12,-29}, -{42,12,-28}, -{42,12,-27}, -{42,12,-26}, -{42,12,-25}, -{42,12,-24}, -{42,12,-23}, -{42,12,-22}, -{42,12,-21}, -{42,12,-20}, -{42,12,-19}, -{42,12,-18}, -{42,12,-17}, -{42,12,-16}, -{42,12,-15}, -{42,12,-14}, -{42,12,-13}, -{42,12,-12}, -{42,12,-11}, -{42,12,-10}, -{42,12,-9}, -{42,12,-8}, -{42,12,-7}, -{42,12,-6}, -{42,12,-5}, -{42,12,-4}, -{42,12,-3}, -{42,12,-2}, -{42,12,-1}, -{42,12,0}, -{42,12,1}, -{42,12,2}, -{42,12,3}, -{42,12,4}, -{42,12,5}, -{42,12,6}, -{42,12,7}, -{42,12,8}, -{42,12,9}, -{42,12,10}, -{42,12,11}, -{42,12,12}, -{42,12,13}, -{42,12,14}, -{42,12,15}, -{42,12,16}, -{42,12,17}, -{42,12,18}, -{42,12,19}, -{42,12,20}, -{42,12,21}, -{42,12,22}, -{42,12,23}, -{42,12,24}, -{42,12,25}, -{42,12,26}, -{42,12,27}, -{42,12,28}, -{42,12,29}, -{42,12,30}, -{42,12,31}, -{42,12,32}, -{42,12,33}, -{42,12,34}, -{42,12,35}, -{42,12,36}, -{42,12,37}, -{42,12,38}, -{42,12,39}, -{42,12,40}, -{42,12,41}, -{42,12,42}, -{42,12,43}, -{42,12,44}, -{42,12,45}, -{42,12,46}, -{42,12,47}, -{42,12,48}, -{42,12,49}, -{42,12,50}, -{42,13,-55}, -{42,13,-54}, -{42,13,-53}, -{42,13,-52}, -{42,13,-51}, -{42,13,-50}, -{42,13,-49}, -{42,13,-48}, -{42,13,-47}, -{42,13,-46}, -{42,13,-45}, -{42,13,-44}, -{42,13,-43}, -{42,13,-42}, -{42,13,-41}, -{42,13,-40}, -{42,13,-39}, -{42,13,-38}, -{42,13,-37}, -{42,13,-36}, -{42,13,-35}, -{42,13,-34}, -{42,13,-33}, -{42,13,-32}, -{42,13,-31}, -{42,13,-30}, -{42,13,-29}, -{42,13,-28}, -{42,13,-27}, -{42,13,-26}, -{42,13,-25}, -{42,13,-24}, -{42,13,-23}, -{42,13,-22}, -{42,13,-21}, -{42,13,-20}, -{42,13,-19}, -{42,13,-18}, -{42,13,-17}, -{42,13,-16}, -{42,13,-15}, -{42,13,-14}, -{42,13,-13}, -{42,13,-12}, -{42,13,-11}, -{42,13,-10}, -{42,13,-9}, -{42,13,-8}, -{42,13,-7}, -{42,13,-6}, -{42,13,-5}, -{42,13,-4}, -{42,13,-3}, -{42,13,-2}, -{42,13,-1}, -{42,13,0}, -{42,13,1}, -{42,13,2}, -{42,13,3}, -{42,13,4}, -{42,13,5}, -{42,13,6}, -{42,13,7}, -{42,13,8}, -{42,13,9}, -{42,13,10}, -{42,13,11}, -{42,13,12}, -{42,13,13}, -{42,13,14}, -{42,13,15}, -{42,13,16}, -{42,13,17}, -{42,13,18}, -{42,13,19}, -{42,13,20}, -{42,13,21}, -{42,13,22}, -{42,13,23}, -{42,13,24}, -{42,13,25}, -{42,13,26}, -{42,13,27}, -{42,13,28}, -{42,13,29}, -{42,13,30}, -{42,13,31}, -{42,13,32}, -{42,13,33}, -{42,13,34}, -{42,13,35}, -{42,13,36}, -{42,13,37}, -{42,13,38}, -{42,13,39}, -{42,13,40}, -{42,13,41}, -{42,13,42}, -{42,13,43}, -{42,13,44}, -{42,13,45}, -{42,13,46}, -{42,13,47}, -{42,13,48}, -{42,13,49}, -{42,13,50}, -{42,14,-56}, -{42,14,-55}, -{42,14,-54}, -{42,14,-53}, -{42,14,-52}, -{42,14,-51}, -{42,14,-50}, -{42,14,-49}, -{42,14,-48}, -{42,14,-47}, -{42,14,-46}, -{42,14,-45}, -{42,14,-44}, -{42,14,-43}, -{42,14,-42}, -{42,14,-41}, -{42,14,-40}, -{42,14,-39}, -{42,14,-38}, -{42,14,-37}, -{42,14,-36}, -{42,14,-35}, -{42,14,-34}, -{42,14,-33}, -{42,14,-32}, -{42,14,-31}, -{42,14,-30}, -{42,14,-29}, -{42,14,-28}, -{42,14,-27}, -{42,14,-26}, -{42,14,-25}, -{42,14,-24}, -{42,14,-23}, -{42,14,-22}, -{42,14,-21}, -{42,14,-20}, -{42,14,-19}, -{42,14,-18}, -{42,14,-17}, -{42,14,-16}, -{42,14,-15}, -{42,14,-14}, -{42,14,-13}, -{42,14,-12}, -{42,14,-11}, -{42,14,-10}, -{42,14,-9}, -{42,14,-8}, -{42,14,-7}, -{42,14,-6}, -{42,14,-5}, -{42,14,-4}, -{42,14,-3}, -{42,14,-2}, -{42,14,-1}, -{42,14,0}, -{42,14,1}, -{42,14,2}, -{42,14,3}, -{42,14,4}, -{42,14,5}, -{42,14,6}, -{42,14,7}, -{42,14,8}, -{42,14,9}, -{42,14,10}, -{42,14,11}, -{42,14,12}, -{42,14,13}, -{42,14,14}, -{42,14,15}, -{42,14,16}, -{42,14,17}, -{42,14,18}, -{42,14,19}, -{42,14,20}, -{42,14,21}, -{42,14,22}, -{42,14,23}, -{42,14,24}, -{42,14,25}, -{42,14,26}, -{42,14,27}, -{42,14,28}, -{42,14,29}, -{42,14,30}, -{42,14,31}, -{42,14,32}, -{42,14,33}, -{42,14,34}, -{42,14,35}, -{42,14,36}, -{42,14,37}, -{42,14,38}, -{42,14,39}, -{42,14,40}, -{42,14,41}, -{42,14,42}, -{42,14,43}, -{42,14,44}, -{42,14,45}, -{42,14,46}, -{42,14,47}, -{42,14,48}, -{42,14,49}, -{42,14,50}, -{42,15,-57}, -{42,15,-56}, -{42,15,-55}, -{42,15,-54}, -{42,15,-53}, -{42,15,-52}, -{42,15,-51}, -{42,15,-50}, -{42,15,-49}, -{42,15,-48}, -{42,15,-47}, -{42,15,-46}, -{42,15,-45}, -{42,15,-44}, -{42,15,-43}, -{42,15,-42}, -{42,15,-41}, -{42,15,-40}, -{42,15,-39}, -{42,15,-38}, -{42,15,-37}, -{42,15,-36}, -{42,15,-35}, -{42,15,-34}, -{42,15,-33}, -{42,15,-32}, -{42,15,-31}, -{42,15,-30}, -{42,15,-29}, -{42,15,-28}, -{42,15,-27}, -{42,15,-26}, -{42,15,-25}, -{42,15,-24}, -{42,15,-23}, -{42,15,-22}, -{42,15,-21}, -{42,15,-20}, -{42,15,-19}, -{42,15,-18}, -{42,15,-17}, -{42,15,-16}, -{42,15,-15}, -{42,15,-14}, -{42,15,-13}, -{42,15,-12}, -{42,15,-11}, -{42,15,-10}, -{42,15,-9}, -{42,15,-8}, -{42,15,-7}, -{42,15,-6}, -{42,15,-5}, -{42,15,-4}, -{42,15,-3}, -{42,15,-2}, -{42,15,-1}, -{42,15,0}, -{42,15,1}, -{42,15,2}, -{42,15,3}, -{42,15,4}, -{42,15,5}, -{42,15,6}, -{42,15,7}, -{42,15,8}, -{42,15,9}, -{42,15,10}, -{42,15,11}, -{42,15,12}, -{42,15,13}, -{42,15,14}, -{42,15,15}, -{42,15,16}, -{42,15,17}, -{42,15,18}, -{42,15,19}, -{42,15,20}, -{42,15,21}, -{42,15,22}, -{42,15,23}, -{42,15,24}, -{42,15,25}, -{42,15,26}, -{42,15,27}, -{42,15,28}, -{42,15,29}, -{42,15,30}, -{42,15,31}, -{42,15,32}, -{42,15,33}, -{42,15,34}, -{42,15,35}, -{42,15,36}, -{42,15,37}, -{42,15,38}, -{42,15,39}, -{42,15,40}, -{42,15,41}, -{42,15,42}, -{42,15,43}, -{42,15,44}, -{42,15,45}, -{42,15,46}, -{42,15,47}, -{42,15,48}, -{42,15,49}, -{42,15,50}, -{42,16,-58}, -{42,16,-57}, -{42,16,-56}, -{42,16,-55}, -{42,16,-54}, -{42,16,-53}, -{42,16,-52}, -{42,16,-51}, -{42,16,-50}, -{42,16,-49}, -{42,16,-48}, -{42,16,-47}, -{42,16,-46}, -{42,16,-45}, -{42,16,-44}, -{42,16,-43}, -{42,16,-42}, -{42,16,-41}, -{42,16,-40}, -{42,16,-39}, -{42,16,-38}, -{42,16,-37}, -{42,16,-36}, -{42,16,-35}, -{42,16,-34}, -{42,16,-33}, -{42,16,-32}, -{42,16,-31}, -{42,16,-30}, -{42,16,-29}, -{42,16,-28}, -{42,16,-27}, -{42,16,-26}, -{42,16,-25}, -{42,16,-24}, -{42,16,-23}, -{42,16,-22}, -{42,16,-21}, -{42,16,-20}, -{42,16,-19}, -{42,16,-18}, -{42,16,-17}, -{42,16,-16}, -{42,16,-15}, -{42,16,-14}, -{42,16,-13}, -{42,16,-12}, -{42,16,-11}, -{42,16,-10}, -{42,16,-9}, -{42,16,-8}, -{42,16,-7}, -{42,16,-6}, -{42,16,-5}, -{42,16,-4}, -{42,16,-3}, -{42,16,-2}, -{42,16,-1}, -{42,16,0}, -{42,16,1}, -{42,16,2}, -{42,16,3}, -{42,16,4}, -{42,16,5}, -{42,16,6}, -{42,16,7}, -{42,16,8}, -{42,16,9}, -{42,16,10}, -{42,16,11}, -{42,16,12}, -{42,16,13}, -{42,16,14}, -{42,16,15}, -{42,16,16}, -{42,16,17}, -{42,16,18}, -{42,16,19}, -{42,16,20}, -{42,16,21}, -{42,16,22}, -{42,16,23}, -{42,16,24}, -{42,16,25}, -{42,16,26}, -{42,16,27}, -{42,16,28}, -{42,16,29}, -{42,16,30}, -{42,16,31}, -{42,16,32}, -{42,16,33}, -{42,16,34}, -{42,16,35}, -{42,16,36}, -{42,16,37}, -{42,16,38}, -{42,16,39}, -{42,16,40}, -{42,16,41}, -{42,16,42}, -{42,16,43}, -{42,16,44}, -{42,16,45}, -{42,16,46}, -{42,16,47}, -{42,16,48}, -{42,16,49}, -{42,16,50}, -{42,17,-59}, -{42,17,-58}, -{42,17,-57}, -{42,17,-56}, -{42,17,-55}, -{42,17,-54}, -{42,17,-53}, -{42,17,-52}, -{42,17,-51}, -{42,17,-50}, -{42,17,-49}, -{42,17,-48}, -{42,17,-47}, -{42,17,-46}, -{42,17,-45}, -{42,17,-44}, -{42,17,-43}, -{42,17,-42}, -{42,17,-41}, -{42,17,-40}, -{42,17,-39}, -{42,17,-38}, -{42,17,-37}, -{42,17,-36}, -{42,17,-35}, -{42,17,-34}, -{42,17,-33}, -{42,17,-32}, -{42,17,-31}, -{42,17,-30}, -{42,17,-29}, -{42,17,-28}, -{42,17,-27}, -{42,17,-26}, -{42,17,-25}, -{42,17,-24}, -{42,17,-23}, -{42,17,-22}, -{42,17,-21}, -{42,17,-20}, -{42,17,-19}, -{42,17,-18}, -{42,17,-17}, -{42,17,-16}, -{42,17,-15}, -{42,17,-14}, -{42,17,-13}, -{42,17,-12}, -{42,17,-11}, -{42,17,-10}, -{42,17,-9}, -{42,17,-8}, -{42,17,-7}, -{42,17,-6}, -{42,17,-5}, -{42,17,-4}, -{42,17,-3}, -{42,17,-2}, -{42,17,-1}, -{42,17,0}, -{42,17,1}, -{42,17,2}, -{42,17,3}, -{42,17,4}, -{42,17,5}, -{42,17,6}, -{42,17,7}, -{42,17,8}, -{42,17,9}, -{42,17,10}, -{42,17,11}, -{42,17,12}, -{42,17,13}, -{42,17,14}, -{42,17,15}, -{42,17,16}, -{42,17,17}, -{42,17,18}, -{42,17,19}, -{42,17,20}, -{42,17,21}, -{42,17,22}, -{42,17,23}, -{42,17,24}, -{42,17,25}, -{42,17,26}, -{42,17,27}, -{42,17,28}, -{42,17,29}, -{42,17,30}, -{42,17,31}, -{42,17,32}, -{42,17,33}, -{42,17,34}, -{42,17,35}, -{42,17,36}, -{42,17,37}, -{42,17,38}, -{42,17,39}, -{42,17,40}, -{42,17,41}, -{42,17,42}, -{42,17,43}, -{42,17,44}, -{42,17,45}, -{42,17,46}, -{42,17,47}, -{42,17,48}, -{42,17,49}, -{42,17,50}, -{42,18,-60}, -{42,18,-59}, -{42,18,-58}, -{42,18,-57}, -{42,18,-56}, -{42,18,-55}, -{42,18,-54}, -{42,18,-53}, -{42,18,-52}, -{42,18,-51}, -{42,18,-50}, -{42,18,-49}, -{42,18,-48}, -{42,18,-47}, -{42,18,-46}, -{42,18,-45}, -{42,18,-44}, -{42,18,-43}, -{42,18,-42}, -{42,18,-41}, -{42,18,-40}, -{42,18,-39}, -{42,18,-38}, -{42,18,-37}, -{42,18,-36}, -{42,18,-35}, -{42,18,-34}, -{42,18,-33}, -{42,18,-32}, -{42,18,-31}, -{42,18,-30}, -{42,18,-29}, -{42,18,-28}, -{42,18,-27}, -{42,18,-26}, -{42,18,-25}, -{42,18,-24}, -{42,18,-23}, -{42,18,-22}, -{42,18,-21}, -{42,18,-20}, -{42,18,-19}, -{42,18,-18}, -{42,18,-17}, -{42,18,-16}, -{42,18,-15}, -{42,18,-14}, -{42,18,-13}, -{42,18,-12}, -{42,18,-11}, -{42,18,-10}, -{42,18,-9}, -{42,18,-8}, -{42,18,-7}, -{42,18,-6}, -{42,18,-5}, -{42,18,-4}, -{42,18,-3}, -{42,18,-2}, -{42,18,-1}, -{42,18,0}, -{42,18,1}, -{42,18,2}, -{42,18,3}, -{42,18,4}, -{42,18,5}, -{42,18,6}, -{42,18,7}, -{42,18,8}, -{42,18,9}, -{42,18,10}, -{42,18,11}, -{42,18,12}, -{42,18,13}, -{42,18,14}, -{42,18,15}, -{42,18,16}, -{42,18,17}, -{42,18,18}, -{42,18,19}, -{42,18,20}, -{42,18,21}, -{42,18,22}, -{42,18,23}, -{42,18,24}, -{42,18,25}, -{42,18,26}, -{42,18,27}, -{42,18,28}, -{42,18,29}, -{42,18,30}, -{42,18,31}, -{42,18,32}, -{42,18,33}, -{42,18,34}, -{42,18,35}, -{42,18,36}, -{42,18,37}, -{42,18,38}, -{42,18,39}, -{42,18,40}, -{42,18,41}, -{42,18,42}, -{42,18,43}, -{42,18,44}, -{42,18,45}, -{42,18,46}, -{42,18,47}, -{42,18,48}, -{42,18,49}, -{42,18,50}, -{42,19,-61}, -{42,19,-60}, -{42,19,-59}, -{42,19,-58}, -{42,19,-57}, -{42,19,-56}, -{42,19,-55}, -{42,19,-54}, -{42,19,-53}, -{42,19,-52}, -{42,19,-51}, -{42,19,-50}, -{42,19,-49}, -{42,19,-48}, -{42,19,-47}, -{42,19,-46}, -{42,19,-45}, -{42,19,-44}, -{42,19,-43}, -{42,19,-42}, -{42,19,-41}, -{42,19,-40}, -{42,19,-39}, -{42,19,-38}, -{42,19,-37}, -{42,19,-36}, -{42,19,-35}, -{42,19,-34}, -{42,19,-33}, -{42,19,-32}, -{42,19,-31}, -{42,19,-30}, -{42,19,-29}, -{42,19,-28}, -{42,19,-27}, -{42,19,-26}, -{42,19,-25}, -{42,19,-24}, -{42,19,-23}, -{42,19,-22}, -{42,19,-21}, -{42,19,-20}, -{42,19,-19}, -{42,19,-18}, -{42,19,-17}, -{42,19,-16}, -{42,19,-15}, -{42,19,-14}, -{42,19,-13}, -{42,19,-12}, -{42,19,-11}, -{42,19,-10}, -{42,19,-9}, -{42,19,-8}, -{42,19,-7}, -{42,19,-6}, -{42,19,-5}, -{42,19,-4}, -{42,19,-3}, -{42,19,-2}, -{42,19,-1}, -{42,19,0}, -{42,19,1}, -{42,19,2}, -{42,19,3}, -{42,19,4}, -{42,19,5}, -{42,19,6}, -{42,19,7}, -{42,19,8}, -{42,19,9}, -{42,19,10}, -{42,19,11}, -{42,19,12}, -{42,19,13}, -{42,19,14}, -{42,19,15}, -{42,19,16}, -{42,19,17}, -{42,19,18}, -{42,19,19}, -{42,19,20}, -{42,19,21}, -{42,19,22}, -{42,19,23}, -{42,19,24}, -{42,19,25}, -{42,19,26}, -{42,19,27}, -{42,19,28}, -{42,19,29}, -{42,19,30}, -{42,19,31}, -{42,19,32}, -{42,19,33}, -{42,19,34}, -{42,19,35}, -{42,19,36}, -{42,19,37}, -{42,19,38}, -{42,19,39}, -{42,19,40}, -{42,19,41}, -{42,19,42}, -{42,19,43}, -{42,19,44}, -{42,19,45}, -{42,19,46}, -{42,19,47}, -{42,19,48}, -{42,19,49}, -{42,19,50}, -{42,20,-62}, -{42,20,-61}, -{42,20,-60}, -{42,20,-59}, -{42,20,-58}, -{42,20,-57}, -{42,20,-56}, -{42,20,-55}, -{42,20,-54}, -{42,20,-53}, -{42,20,-52}, -{42,20,-51}, -{42,20,-50}, -{42,20,-49}, -{42,20,-48}, -{42,20,-47}, -{42,20,-46}, -{42,20,-45}, -{42,20,-44}, -{42,20,-43}, -{42,20,-42}, -{42,20,-41}, -{42,20,-40}, -{42,20,-39}, -{42,20,-38}, -{42,20,-37}, -{42,20,-36}, -{42,20,-35}, -{42,20,-34}, -{42,20,-33}, -{42,20,-32}, -{42,20,-31}, -{42,20,-30}, -{42,20,-29}, -{42,20,-28}, -{42,20,-27}, -{42,20,-26}, -{42,20,-25}, -{42,20,-24}, -{42,20,-23}, -{42,20,-22}, -{42,20,-21}, -{42,20,-20}, -{42,20,-19}, -{42,20,-18}, -{42,20,-17}, -{42,20,-16}, -{42,20,-15}, -{42,20,-14}, -{42,20,-13}, -{42,20,-12}, -{42,20,-11}, -{42,20,-10}, -{42,20,-9}, -{42,20,-8}, -{42,20,-7}, -{42,20,-6}, -{42,20,-5}, -{42,20,-4}, -{42,20,-3}, -{42,20,-2}, -{42,20,-1}, -{42,20,0}, -{42,20,1}, -{42,20,2}, -{42,20,3}, -{42,20,4}, -{42,20,5}, -{42,20,6}, -{42,20,7}, -{42,20,8}, -{42,20,9}, -{42,20,10}, -{42,20,11}, -{42,20,12}, -{42,20,13}, -{42,20,14}, -{42,20,15}, -{42,20,16}, -{42,20,17}, -{42,20,18}, -{42,20,19}, -{42,20,20}, -{42,20,21}, -{42,20,22}, -{42,20,23}, -{42,20,24}, -{42,20,25}, -{42,20,26}, -{42,20,27}, -{42,20,28}, -{42,20,29}, -{42,20,30}, -{42,20,31}, -{42,20,32}, -{42,20,33}, -{42,20,34}, -{42,20,35}, -{42,20,36}, -{42,20,37}, -{42,20,38}, -{42,20,39}, -{42,20,40}, -{42,20,41}, -{42,20,42}, -{42,20,43}, -{42,20,44}, -{42,20,45}, -{42,20,46}, -{42,20,47}, -{42,20,48}, -{42,20,49}, -{42,20,50}, -{42,21,-63}, -{42,21,-62}, -{42,21,-61}, -{42,21,-60}, -{42,21,-59}, -{42,21,-58}, -{42,21,-57}, -{42,21,-56}, -{42,21,-55}, -{42,21,-54}, -{42,21,-53}, -{42,21,-52}, -{42,21,-51}, -{42,21,-50}, -{42,21,-49}, -{42,21,-48}, -{42,21,-47}, -{42,21,-46}, -{42,21,-45}, -{42,21,-44}, -{42,21,-43}, -{42,21,-42}, -{42,21,-41}, -{42,21,-40}, -{42,21,-39}, -{42,21,-38}, -{42,21,-37}, -{42,21,-36}, -{42,21,-35}, -{42,21,-34}, -{42,21,-33}, -{42,21,-32}, -{42,21,-31}, -{42,21,-30}, -{42,21,-29}, -{42,21,-28}, -{42,21,-27}, -{42,21,-26}, -{42,21,-25}, -{42,21,-24}, -{42,21,-23}, -{42,21,-22}, -{42,21,-21}, -{42,21,-20}, -{42,21,-19}, -{42,21,-18}, -{42,21,-17}, -{42,21,-16}, -{42,21,-15}, -{42,21,-14}, -{42,21,-13}, -{42,21,-12}, -{42,21,-11}, -{42,21,-10}, -{42,21,-9}, -{42,21,-8}, -{42,21,-7}, -{42,21,-6}, -{42,21,-5}, -{42,21,-4}, -{42,21,-3}, -{42,21,-2}, -{42,21,-1}, -{42,21,0}, -{42,21,1}, -{42,21,2}, -{42,21,3}, -{42,21,4}, -{42,21,5}, -{42,21,6}, -{42,21,7}, -{42,21,8}, -{42,21,9}, -{42,21,10}, -{42,21,11}, -{42,21,12}, -{42,21,13}, -{42,21,14}, -{42,21,15}, -{42,21,16}, -{42,21,17}, -{42,21,18}, -{42,21,19}, -{42,21,20}, -{42,21,21}, -{42,21,22}, -{42,21,23}, -{42,21,24}, -{42,21,25}, -{42,21,26}, -{42,21,27}, -{42,21,28}, -{42,21,29}, -{42,21,30}, -{42,21,31}, -{42,21,32}, -{42,21,33}, -{42,21,34}, -{42,21,35}, -{42,21,36}, -{42,21,37}, -{42,21,38}, -{42,21,39}, -{42,21,40}, -{42,21,41}, -{42,21,42}, -{42,21,43}, -{42,21,44}, -{42,21,45}, -{42,21,46}, -{42,21,47}, -{42,21,48}, -{42,21,49}, -{42,21,50}, -{42,21,51}, -{42,22,-64}, -{42,22,-63}, -{42,22,-62}, -{42,22,-61}, -{42,22,-60}, -{42,22,-59}, -{42,22,-58}, -{42,22,-57}, -{42,22,-56}, -{42,22,-55}, -{42,22,-54}, -{42,22,-53}, -{42,22,-52}, -{42,22,-51}, -{42,22,-50}, -{42,22,-49}, -{42,22,-48}, -{42,22,-47}, -{42,22,-46}, -{42,22,-45}, -{42,22,-44}, -{42,22,-43}, -{42,22,-42}, -{42,22,-41}, -{42,22,-40}, -{42,22,-39}, -{42,22,-38}, -{42,22,-37}, -{42,22,-36}, -{42,22,-35}, -{42,22,-34}, -{42,22,-33}, -{42,22,-32}, -{42,22,-31}, -{42,22,-30}, -{42,22,-29}, -{42,22,-28}, -{42,22,-27}, -{42,22,-26}, -{42,22,-25}, -{42,22,-24}, -{42,22,-23}, -{42,22,-22}, -{42,22,-21}, -{42,22,-20}, -{42,22,-19}, -{42,22,-18}, -{42,22,-17}, -{42,22,-16}, -{42,22,-15}, -{42,22,-14}, -{42,22,-13}, -{42,22,-12}, -{42,22,-11}, -{42,22,-10}, -{42,22,-9}, -{42,22,-8}, -{42,22,-7}, -{42,22,-6}, -{42,22,-5}, -{42,22,-4}, -{42,22,-3}, -{42,22,-2}, -{42,22,-1}, -{42,22,0}, -{42,22,1}, -{42,22,2}, -{42,22,3}, -{42,22,4}, -{42,22,5}, -{42,22,6}, -{42,22,7}, -{42,22,8}, -{42,22,9}, -{42,22,10}, -{42,22,11}, -{42,22,12}, -{42,22,13}, -{42,22,14}, -{42,22,15}, -{42,22,16}, -{42,22,17}, -{42,22,18}, -{42,22,19}, -{42,22,20}, -{42,22,21}, -{42,22,22}, -{42,22,23}, -{42,22,24}, -{42,22,25}, -{42,22,26}, -{42,22,27}, -{42,22,28}, -{42,22,29}, -{42,22,30}, -{42,22,31}, -{42,22,32}, -{42,22,33}, -{42,22,34}, -{42,22,35}, -{42,22,36}, -{42,22,37}, -{42,22,38}, -{42,22,39}, -{42,22,40}, -{42,22,41}, -{42,22,42}, -{42,22,43}, -{42,22,44}, -{42,22,45}, -{42,22,46}, -{42,22,47}, -{42,22,48}, -{42,22,49}, -{42,22,50}, -{42,22,51}, -{42,23,-65}, -{42,23,-64}, -{42,23,-63}, -{42,23,-62}, -{42,23,-61}, -{42,23,-60}, -{42,23,-59}, -{42,23,-58}, -{42,23,-57}, -{42,23,-56}, -{42,23,-55}, -{42,23,-54}, -{42,23,-53}, -{42,23,-52}, -{42,23,-51}, -{42,23,-50}, -{42,23,-49}, -{42,23,-48}, -{42,23,-47}, -{42,23,-46}, -{42,23,-45}, -{42,23,-44}, -{42,23,-43}, -{42,23,-42}, -{42,23,-41}, -{42,23,-40}, -{42,23,-39}, -{42,23,-38}, -{42,23,-37}, -{42,23,-36}, -{42,23,-35}, -{42,23,-34}, -{42,23,-33}, -{42,23,-32}, -{42,23,-31}, -{42,23,-30}, -{42,23,-29}, -{42,23,-28}, -{42,23,-27}, -{42,23,-26}, -{42,23,-25}, -{42,23,-24}, -{42,23,-23}, -{42,23,-22}, -{42,23,-21}, -{42,23,-20}, -{42,23,-19}, -{42,23,-18}, -{42,23,-17}, -{42,23,-16}, -{42,23,-15}, -{42,23,-14}, -{42,23,-13}, -{42,23,-12}, -{42,23,-11}, -{42,23,-10}, -{42,23,-9}, -{42,23,-8}, -{42,23,-7}, -{42,23,-6}, -{42,23,-5}, -{42,23,-4}, -{42,23,-3}, -{42,23,-2}, -{42,23,-1}, -{42,23,0}, -{42,23,1}, -{42,23,2}, -{42,23,3}, -{42,23,4}, -{42,23,5}, -{42,23,6}, -{42,23,7}, -{42,23,8}, -{42,23,9}, -{42,23,10}, -{42,23,11}, -{42,23,12}, -{42,23,13}, -{42,23,14}, -{42,23,15}, -{42,23,16}, -{42,23,17}, -{42,23,18}, -{42,23,19}, -{42,23,20}, -{42,23,21}, -{42,23,22}, -{42,23,23}, -{42,23,24}, -{42,23,25}, -{42,23,26}, -{42,23,27}, -{42,23,28}, -{42,23,29}, -{42,23,30}, -{42,23,31}, -{42,23,32}, -{42,23,33}, -{42,23,34}, -{42,23,35}, -{42,23,36}, -{42,23,37}, -{42,23,38}, -{42,23,39}, -{42,23,40}, -{42,23,41}, -{42,23,42}, -{42,23,43}, -{42,23,44}, -{42,23,45}, -{42,23,46}, -{42,23,47}, -{42,23,48}, -{42,23,49}, -{42,23,50}, -{42,23,51}, -{42,24,-66}, -{42,24,-65}, -{42,24,-64}, -{42,24,-63}, -{42,24,-62}, -{42,24,-61}, -{42,24,-60}, -{42,24,-59}, -{42,24,-58}, -{42,24,-57}, -{42,24,-56}, -{42,24,-55}, -{42,24,-54}, -{42,24,-53}, -{42,24,-52}, -{42,24,-51}, -{42,24,-50}, -{42,24,-49}, -{42,24,-48}, -{42,24,-47}, -{42,24,-46}, -{42,24,-45}, -{42,24,-44}, -{42,24,-43}, -{42,24,-42}, -{42,24,-41}, -{42,24,-40}, -{42,24,-39}, -{42,24,-38}, -{42,24,-37}, -{42,24,-36}, -{42,24,-35}, -{42,24,-34}, -{42,24,-33}, -{42,24,-32}, -{42,24,-31}, -{42,24,-30}, -{42,24,-29}, -{42,24,-28}, -{42,24,-27}, -{42,24,-26}, -{42,24,-25}, -{42,24,-24}, -{42,24,-23}, -{42,24,-22}, -{42,24,-21}, -{42,24,-20}, -{42,24,-19}, -{42,24,-18}, -{42,24,-17}, -{42,24,-16}, -{42,24,-15}, -{42,24,-14}, -{42,24,-13}, -{42,24,-12}, -{42,24,-11}, -{42,24,-10}, -{42,24,-9}, -{42,24,-8}, -{42,24,-7}, -{42,24,-6}, -{42,24,-5}, -{42,24,-4}, -{42,24,-3}, -{42,24,-2}, -{42,24,-1}, -{42,24,0}, -{42,24,1}, -{42,24,2}, -{42,24,3}, -{42,24,4}, -{42,24,5}, -{42,24,6}, -{42,24,7}, -{42,24,8}, -{42,24,9}, -{42,24,10}, -{42,24,11}, -{42,24,12}, -{42,24,13}, -{42,24,14}, -{42,24,15}, -{42,24,16}, -{42,24,17}, -{42,24,18}, -{42,24,19}, -{42,24,20}, -{42,24,21}, -{42,24,22}, -{42,24,23}, -{42,24,24}, -{42,24,25}, -{42,24,26}, -{42,24,27}, -{42,24,28}, -{42,24,29}, -{42,24,30}, -{42,24,31}, -{42,24,32}, -{42,24,33}, -{42,24,34}, -{42,24,35}, -{42,24,36}, -{42,24,37}, -{42,24,38}, -{42,24,39}, -{42,24,40}, -{42,24,41}, -{42,24,42}, -{42,24,43}, -{42,24,44}, -{42,24,45}, -{42,24,46}, -{42,24,47}, -{42,24,48}, -{42,24,49}, -{42,24,50}, -{42,24,51}, -{42,25,-67}, -{42,25,-66}, -{42,25,-65}, -{42,25,-64}, -{42,25,-63}, -{42,25,-62}, -{42,25,-61}, -{42,25,-60}, -{42,25,-59}, -{42,25,-58}, -{42,25,-57}, -{42,25,-56}, -{42,25,-55}, -{42,25,-54}, -{42,25,-53}, -{42,25,-52}, -{42,25,-51}, -{42,25,-50}, -{42,25,-49}, -{42,25,-48}, -{42,25,-47}, -{42,25,-46}, -{42,25,-45}, -{42,25,-44}, -{42,25,-43}, -{42,25,-42}, -{42,25,-41}, -{42,25,-40}, -{42,25,-39}, -{42,25,-38}, -{42,25,-37}, -{42,25,-36}, -{42,25,-35}, -{42,25,-34}, -{42,25,-33}, -{42,25,-32}, -{42,25,-31}, -{42,25,-30}, -{42,25,-29}, -{42,25,-28}, -{42,25,-27}, -{42,25,-26}, -{42,25,-25}, -{42,25,-24}, -{42,25,-23}, -{42,25,-22}, -{42,25,-21}, -{42,25,-20}, -{42,25,-19}, -{42,25,-18}, -{42,25,-17}, -{42,25,-16}, -{42,25,-15}, -{42,25,-14}, -{42,25,-13}, -{42,25,-12}, -{42,25,-11}, -{42,25,-10}, -{42,25,-9}, -{42,25,-8}, -{42,25,-7}, -{42,25,-6}, -{42,25,-5}, -{42,25,-4}, -{42,25,-3}, -{42,25,-2}, -{42,25,-1}, -{42,25,0}, -{42,25,1}, -{42,25,2}, -{42,25,3}, -{42,25,4}, -{42,25,5}, -{42,25,6}, -{42,25,7}, -{42,25,8}, -{42,25,9}, -{42,25,10}, -{42,25,11}, -{42,25,12}, -{42,25,13}, -{42,25,14}, -{42,25,15}, -{42,25,16}, -{42,25,17}, -{42,25,18}, -{42,25,19}, -{42,25,20}, -{42,25,21}, -{42,25,22}, -{42,25,23}, -{42,25,24}, -{42,25,25}, -{42,25,26}, -{42,25,27}, -{42,25,28}, -{42,25,29}, -{42,25,30}, -{42,25,31}, -{42,25,32}, -{42,25,33}, -{42,25,34}, -{42,25,35}, -{42,25,36}, -{42,25,37}, -{42,25,38}, -{42,25,39}, -{42,25,40}, -{42,25,41}, -{42,25,42}, -{42,25,43}, -{42,25,44}, -{42,25,45}, -{42,25,46}, -{42,25,47}, -{42,25,48}, -{42,25,49}, -{42,25,50}, -{42,25,51}, -{42,26,-68}, -{42,26,-67}, -{42,26,-66}, -{42,26,-65}, -{42,26,-64}, -{42,26,-63}, -{42,26,-62}, -{42,26,-61}, -{42,26,-60}, -{42,26,-59}, -{42,26,-58}, -{42,26,-57}, -{42,26,-56}, -{42,26,-55}, -{42,26,-54}, -{42,26,-53}, -{42,26,-52}, -{42,26,-51}, -{42,26,-50}, -{42,26,-49}, -{42,26,-48}, -{42,26,-47}, -{42,26,-46}, -{42,26,-45}, -{42,26,-44}, -{42,26,-43}, -{42,26,-42}, -{42,26,-41}, -{42,26,-40}, -{42,26,-39}, -{42,26,-38}, -{42,26,-37}, -{42,26,-36}, -{42,26,-35}, -{42,26,-34}, -{42,26,-33}, -{42,26,-32}, -{42,26,-31}, -{42,26,-30}, -{42,26,-29}, -{42,26,-28}, -{42,26,-27}, -{42,26,-26}, -{42,26,-25}, -{42,26,-24}, -{42,26,-23}, -{42,26,-22}, -{42,26,-21}, -{42,26,-20}, -{42,26,-19}, -{42,26,-18}, -{42,26,-17}, -{42,26,-16}, -{42,26,-15}, -{42,26,-14}, -{42,26,-13}, -{42,26,-12}, -{42,26,-11}, -{42,26,-10}, -{42,26,-9}, -{42,26,-8}, -{42,26,-7}, -{42,26,-6}, -{42,26,-5}, -{42,26,-4}, -{42,26,-3}, -{42,26,-2}, -{42,26,-1}, -{42,26,0}, -{42,26,1}, -{42,26,2}, -{42,26,3}, -{42,26,4}, -{42,26,5}, -{42,26,6}, -{42,26,7}, -{42,26,8}, -{42,26,9}, -{42,26,10}, -{42,26,11}, -{42,26,12}, -{42,26,13}, -{42,26,14}, -{42,26,15}, -{42,26,16}, -{42,26,17}, -{42,26,18}, -{42,26,19}, -{42,26,20}, -{42,26,21}, -{42,26,22}, -{42,26,23}, -{42,26,24}, -{42,26,25}, -{42,26,26}, -{42,26,27}, -{42,26,28}, -{42,26,29}, -{42,26,30}, -{42,26,31}, -{42,26,32}, -{42,26,33}, -{42,26,34}, -{42,26,35}, -{42,26,36}, -{42,26,37}, -{42,26,38}, -{42,26,39}, -{42,26,40}, -{42,26,41}, -{42,26,42}, -{42,26,43}, -{42,26,44}, -{42,26,45}, -{42,26,46}, -{42,26,47}, -{42,26,48}, -{42,26,49}, -{42,26,50}, -{42,26,51}, -{42,27,-69}, -{42,27,-68}, -{42,27,-67}, -{42,27,-66}, -{42,27,-65}, -{42,27,-64}, -{42,27,-63}, -{42,27,-62}, -{42,27,-61}, -{42,27,-60}, -{42,27,-59}, -{42,27,-58}, -{42,27,-57}, -{42,27,-56}, -{42,27,-55}, -{42,27,-54}, -{42,27,-53}, -{42,27,-52}, -{42,27,-51}, -{42,27,-50}, -{42,27,-49}, -{42,27,-48}, -{42,27,-47}, -{42,27,-46}, -{42,27,-45}, -{42,27,-44}, -{42,27,-43}, -{42,27,-42}, -{42,27,-41}, -{42,27,-40}, -{42,27,-39}, -{42,27,-38}, -{42,27,-37}, -{42,27,-36}, -{42,27,-35}, -{42,27,-34}, -{42,27,-33}, -{42,27,-32}, -{42,27,-31}, -{42,27,-30}, -{42,27,-29}, -{42,27,-28}, -{42,27,-27}, -{42,27,-26}, -{42,27,-25}, -{42,27,-24}, -{42,27,-23}, -{42,27,-22}, -{42,27,-21}, -{42,27,-20}, -{42,27,-19}, -{42,27,-18}, -{42,27,-17}, -{42,27,-16}, -{42,27,-15}, -{42,27,-14}, -{42,27,-13}, -{42,27,-12}, -{42,27,-11}, -{42,27,-10}, -{42,27,-9}, -{42,27,-8}, -{42,27,-7}, -{42,27,-6}, -{42,27,-5}, -{42,27,-4}, -{42,27,-3}, -{42,27,-2}, -{42,27,-1}, -{42,27,0}, -{42,27,1}, -{42,27,2}, -{42,27,3}, -{42,27,4}, -{42,27,5}, -{42,27,6}, -{42,27,7}, -{42,27,8}, -{42,27,9}, -{42,27,10}, -{42,27,11}, -{42,27,12}, -{42,27,13}, -{42,27,14}, -{42,27,15}, -{42,27,16}, -{42,27,17}, -{42,27,18}, -{42,27,19}, -{42,27,20}, -{42,27,21}, -{42,27,22}, -{42,27,23}, -{42,27,24}, -{42,27,25}, -{42,27,26}, -{42,27,27}, -{42,27,28}, -{42,27,29}, -{42,27,30}, -{42,27,31}, -{42,27,32}, -{42,27,33}, -{42,27,34}, -{42,27,35}, -{42,27,36}, -{42,27,37}, -{42,27,38}, -{42,27,39}, -{42,27,40}, -{42,27,41}, -{42,27,42}, -{42,27,43}, -{42,27,44}, -{42,27,45}, -{42,27,46}, -{42,27,47}, -{42,27,48}, -{42,27,49}, -{42,27,50}, -{42,27,51}, -{42,28,-70}, -{42,28,-69}, -{42,28,-68}, -{42,28,-67}, -{42,28,-66}, -{42,28,-65}, -{42,28,-64}, -{42,28,-63}, -{42,28,-62}, -{42,28,-61}, -{42,28,-60}, -{42,28,-59}, -{42,28,-58}, -{42,28,-57}, -{42,28,-56}, -{42,28,-55}, -{42,28,-54}, -{42,28,-53}, -{42,28,-52}, -{42,28,-51}, -{42,28,-50}, -{42,28,-49}, -{42,28,-48}, -{42,28,-47}, -{42,28,-46}, -{42,28,-45}, -{42,28,-44}, -{42,28,-43}, -{42,28,-42}, -{42,28,-41}, -{42,28,-40}, -{42,28,-39}, -{42,28,-38}, -{42,28,-37}, -{42,28,-36}, -{42,28,-35}, -{42,28,-34}, -{42,28,-33}, -{42,28,-32}, -{42,28,-31}, -{42,28,-30}, -{42,28,-29}, -{42,28,-28}, -{42,28,-27}, -{42,28,-26}, -{42,28,-25}, -{42,28,-24}, -{42,28,-23}, -{42,28,-22}, -{42,28,-21}, -{42,28,-20}, -{42,28,-19}, -{42,28,-18}, -{42,28,-17}, -{42,28,-16}, -{42,28,-15}, -{42,28,-14}, -{42,28,-13}, -{42,28,-12}, -{42,28,-11}, -{42,28,-10}, -{42,28,-9}, -{42,28,-8}, -{42,28,-7}, -{42,28,-6}, -{42,28,-5}, -{42,28,-4}, -{42,28,-3}, -{42,28,-2}, -{42,28,-1}, -{42,28,0}, -{42,28,1}, -{42,28,2}, -{42,28,3}, -{42,28,4}, -{42,28,5}, -{42,28,6}, -{42,28,7}, -{42,28,8}, -{42,28,9}, -{42,28,10}, -{42,28,11}, -{42,28,12}, -{42,28,13}, -{42,28,14}, -{42,28,15}, -{42,28,16}, -{42,28,17}, -{42,28,18}, -{42,28,19}, -{42,28,20}, -{42,28,21}, -{42,28,22}, -{42,28,23}, -{42,28,24}, -{42,28,25}, -{42,28,26}, -{42,28,27}, -{42,28,28}, -{42,28,29}, -{42,28,30}, -{42,28,31}, -{42,28,32}, -{42,28,33}, -{42,28,34}, -{42,28,35}, -{42,28,36}, -{42,28,37}, -{42,28,38}, -{42,28,39}, -{42,28,40}, -{42,28,41}, -{42,28,42}, -{42,28,43}, -{42,28,44}, -{42,28,45}, -{42,28,46}, -{42,28,47}, -{42,28,48}, -{42,28,49}, -{42,28,50}, -{42,28,51}, -{42,29,-71}, -{42,29,-70}, -{42,29,-69}, -{42,29,-68}, -{42,29,-67}, -{42,29,-66}, -{42,29,-65}, -{42,29,-64}, -{42,29,-63}, -{42,29,-62}, -{42,29,-61}, -{42,29,-60}, -{42,29,-59}, -{42,29,-58}, -{42,29,-57}, -{42,29,-56}, -{42,29,-55}, -{42,29,-54}, -{42,29,-53}, -{42,29,-52}, -{42,29,-51}, -{42,29,-50}, -{42,29,-49}, -{42,29,-48}, -{42,29,-47}, -{42,29,-46}, -{42,29,-45}, -{42,29,-44}, -{42,29,-43}, -{42,29,-42}, -{42,29,-41}, -{42,29,-40}, -{42,29,-39}, -{42,29,-38}, -{42,29,-37}, -{42,29,-36}, -{42,29,-35}, -{42,29,-34}, -{42,29,-33}, -{42,29,-32}, -{42,29,-31}, -{42,29,-30}, -{42,29,-29}, -{42,29,-28}, -{42,29,-27}, -{42,29,-26}, -{42,29,-25}, -{42,29,-24}, -{42,29,-23}, -{42,29,-22}, -{42,29,-21}, -{42,29,-20}, -{42,29,-19}, -{42,29,-18}, -{42,29,-17}, -{42,29,-16}, -{42,29,-15}, -{42,29,-14}, -{42,29,-13}, -{42,29,-12}, -{42,29,-11}, -{42,29,-10}, -{42,29,-9}, -{42,29,-8}, -{42,29,-7}, -{42,29,-6}, -{42,29,-5}, -{42,29,-4}, -{42,29,-3}, -{42,29,-2}, -{42,29,-1}, -{42,29,0}, -{42,29,1}, -{42,29,2}, -{42,29,3}, -{42,29,4}, -{42,29,5}, -{42,29,6}, -{42,29,7}, -{42,29,8}, -{42,29,9}, -{42,29,10}, -{42,29,11}, -{42,29,12}, -{42,29,13}, -{42,29,14}, -{42,29,15}, -{42,29,16}, -{42,29,17}, -{42,29,18}, -{42,29,19}, -{42,29,20}, -{42,29,21}, -{42,29,22}, -{42,29,23}, -{42,29,24}, -{42,29,25}, -{42,29,26}, -{42,29,27}, -{42,29,28}, -{42,29,29}, -{42,29,30}, -{42,29,31}, -{42,29,32}, -{42,29,33}, -{42,29,34}, -{42,29,35}, -{42,29,36}, -{42,29,37}, -{42,29,38}, -{42,29,39}, -{42,29,40}, -{42,29,41}, -{42,29,42}, -{42,29,43}, -{42,29,44}, -{42,29,45}, -{42,29,46}, -{42,29,47}, -{42,29,48}, -{42,29,49}, -{42,29,50}, -{42,29,51}, -{42,30,-72}, -{42,30,-71}, -{42,30,-70}, -{42,30,-69}, -{42,30,-68}, -{42,30,-67}, -{42,30,-66}, -{42,30,-65}, -{42,30,-64}, -{42,30,-63}, -{42,30,-62}, -{42,30,-61}, -{42,30,-60}, -{42,30,-59}, -{42,30,-58}, -{42,30,-57}, -{42,30,-56}, -{42,30,-55}, -{42,30,-54}, -{42,30,-53}, -{42,30,-52}, -{42,30,-51}, -{42,30,-50}, -{42,30,-49}, -{42,30,-48}, -{42,30,-47}, -{42,30,-46}, -{42,30,-45}, -{42,30,-44}, -{42,30,-43}, -{42,30,-42}, -{42,30,-41}, -{42,30,-40}, -{42,30,-39}, -{42,30,-38}, -{42,30,-37}, -{42,30,-36}, -{42,30,-35}, -{42,30,-34}, -{42,30,-33}, -{42,30,-32}, -{42,30,-31}, -{42,30,-30}, -{42,30,-29}, -{42,30,-28}, -{42,30,-27}, -{42,30,-26}, -{42,30,-25}, -{42,30,-24}, -{42,30,-23}, -{42,30,-22}, -{42,30,-21}, -{42,30,-20}, -{42,30,-19}, -{42,30,-18}, -{42,30,-17}, -{42,30,-16}, -{42,30,-15}, -{42,30,-14}, -{42,30,-13}, -{42,30,-12}, -{42,30,-11}, -{42,30,-10}, -{42,30,-9}, -{42,30,-8}, -{42,30,-7}, -{42,30,-6}, -{42,30,-5}, -{42,30,-4}, -{42,30,-3}, -{42,30,-2}, -{42,30,-1}, -{42,30,0}, -{42,30,1}, -{42,30,2}, -{42,30,3}, -{42,30,4}, -{42,30,5}, -{42,30,6}, -{42,30,7}, -{42,30,8}, -{42,30,9}, -{42,30,10}, -{42,30,11}, -{42,30,12}, -{42,30,13}, -{42,30,14}, -{42,30,15}, -{42,30,16}, -{42,30,17}, -{42,30,18}, -{42,30,19}, -{42,30,20}, -{42,30,21}, -{42,30,22}, -{42,30,23}, -{42,30,24}, -{42,30,25}, -{42,30,26}, -{42,30,27}, -{42,30,28}, -{42,30,29}, -{42,30,30}, -{42,30,31}, -{42,30,32}, -{42,30,33}, -{42,30,34}, -{42,30,35}, -{42,30,36}, -{42,30,37}, -{42,30,38}, -{42,30,39}, -{42,30,40}, -{42,30,41}, -{42,30,42}, -{42,30,43}, -{42,30,44}, -{42,30,45}, -{42,30,46}, -{42,30,47}, -{42,30,48}, -{42,30,49}, -{42,30,50}, -{42,30,51}, -{42,31,-73}, -{42,31,-72}, -{42,31,-71}, -{42,31,-70}, -{42,31,-69}, -{42,31,-68}, -{42,31,-67}, -{42,31,-66}, -{42,31,-65}, -{42,31,-64}, -{42,31,-63}, -{42,31,-62}, -{42,31,-61}, -{42,31,-60}, -{42,31,-59}, -{42,31,-58}, -{42,31,-57}, -{42,31,-56}, -{42,31,-55}, -{42,31,-54}, -{42,31,-53}, -{42,31,-52}, -{42,31,-51}, -{42,31,-50}, -{42,31,-49}, -{42,31,-48}, -{42,31,-47}, -{42,31,-46}, -{42,31,-45}, -{42,31,-44}, -{42,31,-43}, -{42,31,-42}, -{42,31,-41}, -{42,31,-40}, -{42,31,-39}, -{42,31,-38}, -{42,31,-37}, -{42,31,-36}, -{42,31,-35}, -{42,31,-34}, -{42,31,-33}, -{42,31,-32}, -{42,31,-31}, -{42,31,-30}, -{42,31,-29}, -{42,31,-28}, -{42,31,-27}, -{42,31,-26}, -{42,31,-25}, -{42,31,-24}, -{42,31,-23}, -{42,31,-22}, -{42,31,-21}, -{42,31,-20}, -{42,31,-19}, -{42,31,-18}, -{42,31,-17}, -{42,31,-16}, -{42,31,-15}, -{42,31,-14}, -{42,31,-13}, -{42,31,-12}, -{42,31,-11}, -{42,31,-10}, -{42,31,-9}, -{42,31,-8}, -{42,31,-7}, -{42,31,-6}, -{42,31,-5}, -{42,31,-4}, -{42,31,-3}, -{42,31,-2}, -{42,31,-1}, -{42,31,0}, -{42,31,1}, -{42,31,2}, -{42,31,3}, -{42,31,4}, -{42,31,5}, -{42,31,6}, -{42,31,7}, -{42,31,8}, -{42,31,9}, -{42,31,10}, -{42,31,11}, -{42,31,12}, -{42,31,13}, -{42,31,14}, -{42,31,15}, -{42,31,16}, -{42,31,17}, -{42,31,18}, -{42,31,19}, -{42,31,20}, -{42,31,21}, -{42,31,22}, -{42,31,23}, -{42,31,24}, -{42,31,25}, -{42,31,26}, -{42,31,27}, -{42,31,28}, -{42,31,29}, -{42,31,30}, -{42,31,31}, -{42,31,32}, -{42,31,33}, -{42,31,34}, -{42,31,35}, -{42,31,36}, -{42,31,37}, -{42,31,38}, -{42,31,39}, -{42,31,40}, -{42,31,41}, -{42,31,42}, -{42,31,43}, -{42,31,44}, -{42,31,45}, -{42,31,46}, -{42,31,47}, -{42,31,48}, -{42,31,49}, -{42,31,50}, -{42,31,51}, -{42,32,-74}, -{42,32,-73}, -{42,32,-72}, -{42,32,-71}, -{42,32,-70}, -{42,32,-69}, -{42,32,-68}, -{42,32,-67}, -{42,32,-66}, -{42,32,-65}, -{42,32,-64}, -{42,32,-63}, -{42,32,-62}, -{42,32,-61}, -{42,32,-60}, -{42,32,-59}, -{42,32,-58}, -{42,32,-57}, -{42,32,-56}, -{42,32,-55}, -{42,32,-54}, -{42,32,-53}, -{42,32,-52}, -{42,32,-51}, -{42,32,-50}, -{42,32,-49}, -{42,32,-48}, -{42,32,-47}, -{42,32,-46}, -{42,32,-45}, -{42,32,-44}, -{42,32,-43}, -{42,32,-42}, -{42,32,-41}, -{42,32,-40}, -{42,32,-39}, -{42,32,-38}, -{42,32,-37}, -{42,32,-36}, -{42,32,-35}, -{42,32,-34}, -{42,32,-33}, -{42,32,-32}, -{42,32,-31}, -{42,32,-30}, -{42,32,-29}, -{42,32,-28}, -{42,32,-27}, -{42,32,-26}, -{42,32,-25}, -{42,32,-24}, -{42,32,-23}, -{42,32,-22}, -{42,32,-21}, -{42,32,-20}, -{42,32,-19}, -{42,32,-18}, -{42,32,-17}, -{42,32,-16}, -{42,32,-15}, -{42,32,-14}, -{42,32,-13}, -{42,32,-12}, -{42,32,-11}, -{42,32,-10}, -{42,32,-9}, -{42,32,-8}, -{42,32,-7}, -{42,32,-6}, -{42,32,-5}, -{42,32,-4}, -{42,32,-3}, -{42,32,-2}, -{42,32,-1}, -{42,32,0}, -{42,32,1}, -{42,32,2}, -{42,32,3}, -{42,32,4}, -{42,32,5}, -{42,32,6}, -{42,32,7}, -{42,32,8}, -{42,32,9}, -{42,32,10}, -{42,32,11}, -{42,32,12}, -{42,32,13}, -{42,32,14}, -{42,32,15}, -{42,32,16}, -{42,32,17}, -{42,32,18}, -{42,32,19}, -{42,32,20}, -{42,32,21}, -{42,32,22}, -{42,32,23}, -{42,32,24}, -{42,32,25}, -{42,32,26}, -{42,32,27}, -{42,32,28}, -{42,32,29}, -{42,32,30}, -{42,32,31}, -{42,32,32}, -{42,32,33}, -{42,32,34}, -{42,32,35}, -{42,32,36}, -{42,32,37}, -{42,32,38}, -{42,32,39}, -{42,32,40}, -{42,32,41}, -{42,32,42}, -{42,32,43}, -{42,32,44}, -{42,32,45}, -{42,32,46}, -{42,32,47}, -{42,32,48}, -{42,32,49}, -{42,32,50}, -{42,32,51}, -{42,32,52}, -{42,33,-75}, -{42,33,-74}, -{42,33,-73}, -{42,33,-72}, -{42,33,-71}, -{42,33,-70}, -{42,33,-69}, -{42,33,-68}, -{42,33,-67}, -{42,33,-66}, -{42,33,-65}, -{42,33,-64}, -{42,33,-63}, -{42,33,-62}, -{42,33,-61}, -{42,33,-60}, -{42,33,-59}, -{42,33,-58}, -{42,33,-57}, -{42,33,-56}, -{42,33,-55}, -{42,33,-54}, -{42,33,-53}, -{42,33,-52}, -{42,33,-51}, -{42,33,-50}, -{42,33,-49}, -{42,33,-48}, -{42,33,-47}, -{42,33,-46}, -{42,33,-45}, -{42,33,-44}, -{42,33,-43}, -{42,33,-42}, -{42,33,-41}, -{42,33,-40}, -{42,33,-39}, -{42,33,-38}, -{42,33,-37}, -{42,33,-36}, -{42,33,-35}, -{42,33,-34}, -{42,33,-33}, -{42,33,-32}, -{42,33,-31}, -{42,33,-30}, -{42,33,-29}, -{42,33,-28}, -{42,33,-27}, -{42,33,-26}, -{42,33,-25}, -{42,33,-24}, -{42,33,-23}, -{42,33,-22}, -{42,33,-21}, -{42,33,-20}, -{42,33,-19}, -{42,33,-18}, -{42,33,-17}, -{42,33,-16}, -{42,33,-15}, -{42,33,-14}, -{42,33,-13}, -{42,33,-12}, -{42,33,-11}, -{42,33,-10}, -{42,33,-9}, -{42,33,-8}, -{42,33,-7}, -{42,33,-6}, -{42,33,-5}, -{42,33,-4}, -{42,33,-3}, -{42,33,-2}, -{42,33,-1}, -{42,33,0}, -{42,33,1}, -{42,33,2}, -{42,33,3}, -{42,33,4}, -{42,33,5}, -{42,33,6}, -{42,33,7}, -{42,33,8}, -{42,33,9}, -{42,33,10}, -{42,33,11}, -{42,33,12}, -{42,33,13}, -{42,33,14}, -{42,33,15}, -{42,33,16}, -{42,33,17}, -{42,33,18}, -{42,33,19}, -{42,33,20}, -{42,33,21}, -{42,33,22}, -{42,33,23}, -{42,33,24}, -{42,33,25}, -{42,33,26}, -{42,33,27}, -{42,33,28}, -{42,33,29}, -{42,33,30}, -{42,33,31}, -{42,33,32}, -{42,33,33}, -{42,33,34}, -{42,33,35}, -{42,33,36}, -{42,33,37}, -{42,33,38}, -{42,33,39}, -{42,33,40}, -{42,33,41}, -{42,33,42}, -{42,33,43}, -{42,33,44}, -{42,33,45}, -{42,33,46}, -{42,33,47}, -{42,33,48}, -{42,33,49}, -{42,33,50}, -{42,33,51}, -{42,33,52}, -{42,34,-76}, -{42,34,-75}, -{42,34,-74}, -{42,34,-73}, -{42,34,-72}, -{42,34,-71}, -{42,34,-70}, -{42,34,-69}, -{42,34,-68}, -{42,34,-67}, -{42,34,-66}, -{42,34,-65}, -{42,34,-64}, -{42,34,-63}, -{42,34,-62}, -{42,34,-61}, -{42,34,-60}, -{42,34,-59}, -{42,34,-58}, -{42,34,-57}, -{42,34,-56}, -{42,34,-55}, -{42,34,-54}, -{42,34,-53}, -{42,34,-52}, -{42,34,-51}, -{42,34,-50}, -{42,34,-49}, -{42,34,-48}, -{42,34,-47}, -{42,34,-46}, -{42,34,-45}, -{42,34,-44}, -{42,34,-43}, -{42,34,-42}, -{42,34,-41}, -{42,34,-40}, -{42,34,-39}, -{42,34,-38}, -{42,34,-37}, -{42,34,-36}, -{42,34,-35}, -{42,34,-34}, -{42,34,-33}, -{42,34,-32}, -{42,34,-31}, -{42,34,-30}, -{42,34,-29}, -{42,34,-28}, -{42,34,-27}, -{42,34,-26}, -{42,34,-25}, -{42,34,-24}, -{42,34,-23}, -{42,34,-22}, -{42,34,-21}, -{42,34,-20}, -{42,34,-19}, -{42,34,-18}, -{42,34,-17}, -{42,34,-16}, -{42,34,-15}, -{42,34,-14}, -{42,34,-13}, -{42,34,-12}, -{42,34,-11}, -{42,34,-10}, -{42,34,-9}, -{42,34,-8}, -{42,34,-7}, -{42,34,-6}, -{42,34,-5}, -{42,34,-4}, -{42,34,-3}, -{42,34,-2}, -{42,34,-1}, -{42,34,0}, -{42,34,1}, -{42,34,2}, -{42,34,3}, -{42,34,4}, -{42,34,5}, -{42,34,6}, -{42,34,7}, -{42,34,8}, -{42,34,9}, -{42,34,10}, -{42,34,11}, -{42,34,12}, -{42,34,13}, -{42,34,14}, -{42,34,15}, -{42,34,16}, -{42,34,17}, -{42,34,18}, -{42,34,19}, -{42,34,20}, -{42,34,21}, -{42,34,22}, -{42,34,23}, -{42,34,24}, -{42,34,25}, -{42,34,26}, -{42,34,27}, -{42,34,28}, -{42,34,29}, -{42,34,30}, -{42,34,31}, -{42,34,32}, -{42,34,33}, -{42,34,34}, -{42,34,35}, -{42,34,36}, -{42,34,37}, -{42,34,38}, -{42,34,39}, -{42,34,40}, -{42,34,41}, -{42,34,42}, -{42,34,43}, -{42,34,44}, -{42,34,45}, -{42,34,46}, -{42,34,47}, -{42,34,48}, -{42,34,49}, -{42,34,50}, -{42,34,51}, -{42,34,52}, -{42,35,-77}, -{42,35,-76}, -{42,35,-75}, -{42,35,-74}, -{42,35,-73}, -{42,35,-72}, -{42,35,-71}, -{42,35,-70}, -{42,35,-69}, -{42,35,-68}, -{42,35,-67}, -{42,35,-66}, -{42,35,-65}, -{42,35,-64}, -{42,35,-63}, -{42,35,-62}, -{42,35,-61}, -{42,35,-60}, -{42,35,-59}, -{42,35,-58}, -{42,35,-57}, -{42,35,-56}, -{42,35,-55}, -{42,35,-54}, -{42,35,-53}, -{42,35,-52}, -{42,35,-51}, -{42,35,-50}, -{42,35,-49}, -{42,35,-48}, -{42,35,-47}, -{42,35,-46}, -{42,35,-45}, -{42,35,-44}, -{42,35,-43}, -{42,35,-42}, -{42,35,-41}, -{42,35,-40}, -{42,35,-39}, -{42,35,-38}, -{42,35,-37}, -{42,35,-36}, -{42,35,-35}, -{42,35,-34}, -{42,35,-33}, -{42,35,-32}, -{42,35,-31}, -{42,35,-30}, -{42,35,-29}, -{42,35,-28}, -{42,35,-27}, -{42,35,-26}, -{42,35,-25}, -{42,35,-24}, -{42,35,-23}, -{42,35,-22}, -{42,35,-21}, -{42,35,-20}, -{42,35,-19}, -{42,35,-18}, -{42,35,-17}, -{42,35,-16}, -{42,35,-15}, -{42,35,-14}, -{42,35,-13}, -{42,35,-12}, -{42,35,-11}, -{42,35,-10}, -{42,35,-9}, -{42,35,-8}, -{42,35,-7}, -{42,35,-6}, -{42,35,-5}, -{42,35,-4}, -{42,35,-3}, -{42,35,-2}, -{42,35,-1}, -{42,35,0}, -{42,35,1}, -{42,35,2}, -{42,35,3}, -{42,35,4}, -{42,35,5}, -{42,35,6}, -{42,35,7}, -{42,35,8}, -{42,35,9}, -{42,35,10}, -{42,35,11}, -{42,35,12}, -{42,35,13}, -{42,35,14}, -{42,35,15}, -{42,35,16}, -{42,35,17}, -{42,35,18}, -{42,35,19}, -{42,35,20}, -{42,35,21}, -{42,35,22}, -{42,35,23}, -{42,35,24}, -{42,35,25}, -{42,35,26}, -{42,35,27}, -{42,35,28}, -{42,35,29}, -{42,35,30}, -{42,35,31}, -{42,35,32}, -{42,35,33}, -{42,35,34}, -{42,35,35}, -{42,35,36}, -{42,35,37}, -{42,35,38}, -{42,35,39}, -{42,35,40}, -{42,35,41}, -{42,35,42}, -{42,35,43}, -{42,35,44}, -{42,35,45}, -{42,35,46}, -{42,35,47}, -{42,35,48}, -{42,35,49}, -{42,35,50}, -{42,35,51}, -{42,35,52}, -{42,36,-78}, -{42,36,-77}, -{42,36,-76}, -{42,36,-75}, -{42,36,-74}, -{42,36,-73}, -{42,36,-72}, -{42,36,-71}, -{42,36,-70}, -{42,36,-69}, -{42,36,-68}, -{42,36,-67}, -{42,36,-66}, -{42,36,-65}, -{42,36,-64}, -{42,36,-63}, -{42,36,-62}, -{42,36,-61}, -{42,36,-60}, -{42,36,-59}, -{42,36,-58}, -{42,36,-57}, -{42,36,-56}, -{42,36,-55}, -{42,36,-54}, -{42,36,-53}, -{42,36,-52}, -{42,36,-51}, -{42,36,-50}, -{42,36,-49}, -{42,36,-48}, -{42,36,-47}, -{42,36,-46}, -{42,36,-45}, -{42,36,-44}, -{42,36,-43}, -{42,36,-42}, -{42,36,-41}, -{42,36,-40}, -{42,36,-39}, -{42,36,-38}, -{42,36,-37}, -{42,36,-36}, -{42,36,-35}, -{42,36,-34}, -{42,36,-33}, -{42,36,-32}, -{42,36,-31}, -{42,36,-30}, -{42,36,-29}, -{42,36,-28}, -{42,36,-27}, -{42,36,-26}, -{42,36,-25}, -{42,36,-24}, -{42,36,-23}, -{42,36,-22}, -{42,36,-21}, -{42,36,-20}, -{42,36,-19}, -{42,36,-18}, -{42,36,-17}, -{42,36,-16}, -{42,36,-15}, -{42,36,-14}, -{42,36,-13}, -{42,36,-12}, -{42,36,-11}, -{42,36,-10}, -{42,36,-9}, -{42,36,-8}, -{42,36,-7}, -{42,36,-6}, -{42,36,-5}, -{42,36,-4}, -{42,36,-3}, -{42,36,-2}, -{42,36,-1}, -{42,36,0}, -{42,36,1}, -{42,36,2}, -{42,36,3}, -{42,36,4}, -{42,36,5}, -{42,36,6}, -{42,36,7}, -{42,36,8}, -{42,36,9}, -{42,36,10}, -{42,36,11}, -{42,36,12}, -{42,36,13}, -{42,36,14}, -{42,36,15}, -{42,36,16}, -{42,36,17}, -{42,36,18}, -{42,36,19}, -{42,36,20}, -{42,36,21}, -{42,36,22}, -{42,36,23}, -{42,36,24}, -{42,36,25}, -{42,36,26}, -{42,36,27}, -{42,36,28}, -{42,36,29}, -{42,36,30}, -{42,36,31}, -{42,36,32}, -{42,36,33}, -{42,36,34}, -{42,36,35}, -{42,36,36}, -{42,36,37}, -{42,36,38}, -{42,36,39}, -{42,36,40}, -{42,36,41}, -{42,36,42}, -{42,36,43}, -{42,36,44}, -{42,36,45}, -{42,36,46}, -{42,36,47}, -{42,36,48}, -{42,36,49}, -{42,36,50}, -{42,36,51}, -{42,36,52}, -{42,37,-79}, -{42,37,-78}, -{42,37,-77}, -{42,37,-76}, -{42,37,-75}, -{42,37,-74}, -{42,37,-73}, -{42,37,-72}, -{42,37,-71}, -{42,37,-70}, -{42,37,-69}, -{42,37,-68}, -{42,37,-67}, -{42,37,-66}, -{42,37,-65}, -{42,37,-64}, -{42,37,-63}, -{42,37,-62}, -{42,37,-61}, -{42,37,-60}, -{42,37,-59}, -{42,37,-58}, -{42,37,-57}, -{42,37,-56}, -{42,37,-55}, -{42,37,-54}, -{42,37,-53}, -{42,37,-52}, -{42,37,-51}, -{42,37,-50}, -{42,37,-49}, -{42,37,-48}, -{42,37,-47}, -{42,37,-46}, -{42,37,-45}, -{42,37,-44}, -{42,37,-43}, -{42,37,-42}, -{42,37,-41}, -{42,37,-40}, -{42,37,-39}, -{42,37,-38}, -{42,37,-37}, -{42,37,-36}, -{42,37,-35}, -{42,37,-34}, -{42,37,-33}, -{42,37,-32}, -{42,37,-31}, -{42,37,-30}, -{42,37,-29}, -{42,37,-28}, -{42,37,-27}, -{42,37,-26}, -{42,37,-25}, -{42,37,-24}, -{42,37,-23}, -{42,37,-22}, -{42,37,-21}, -{42,37,-20}, -{42,37,-19}, -{42,37,-18}, -{42,37,-17}, -{42,37,-16}, -{42,37,-15}, -{42,37,-14}, -{42,37,-13}, -{42,37,-12}, -{42,37,-11}, -{42,37,-10}, -{42,37,-9}, -{42,37,-8}, -{42,37,-7}, -{42,37,-6}, -{42,37,-5}, -{42,37,-4}, -{42,37,-3}, -{42,37,-2}, -{42,37,-1}, -{42,37,0}, -{42,37,1}, -{42,37,2}, -{42,37,3}, -{42,37,4}, -{42,37,5}, -{42,37,6}, -{42,37,7}, -{42,37,8}, -{42,37,9}, -{42,37,10}, -{42,37,11}, -{42,37,12}, -{42,37,13}, -{42,37,14}, -{42,37,15}, -{42,37,16}, -{42,37,17}, -{42,37,18}, -{42,37,19}, -{42,37,20}, -{42,37,21}, -{42,37,22}, -{42,37,23}, -{42,37,24}, -{42,37,25}, -{42,37,26}, -{42,37,27}, -{42,37,28}, -{42,37,29}, -{42,37,30}, -{42,37,31}, -{42,37,32}, -{42,37,33}, -{42,37,34}, -{42,37,35}, -{42,37,36}, -{42,37,37}, -{42,37,38}, -{42,37,39}, -{42,37,40}, -{42,37,41}, -{42,37,42}, -{42,37,43}, -{42,37,44}, -{42,37,45}, -{42,37,46}, -{42,37,47}, -{42,37,48}, -{42,37,49}, -{42,37,50}, -{42,37,51}, -{42,37,52}, -{42,38,-80}, -{42,38,-79}, -{42,38,-78}, -{42,38,-77}, -{42,38,-76}, -{42,38,-75}, -{42,38,-74}, -{42,38,-73}, -{42,38,-72}, -{42,38,-71}, -{42,38,-70}, -{42,38,-69}, -{42,38,-68}, -{42,38,-67}, -{42,38,-66}, -{42,38,-65}, -{42,38,-64}, -{42,38,-63}, -{42,38,-62}, -{42,38,-61}, -{42,38,-60}, -{42,38,-59}, -{42,38,-58}, -{42,38,-57}, -{42,38,-56}, -{42,38,-55}, -{42,38,-54}, -{42,38,-53}, -{42,38,-52}, -{42,38,-51}, -{42,38,-50}, -{42,38,-49}, -{42,38,-48}, -{42,38,-47}, -{42,38,-46}, -{42,38,-45}, -{42,38,-44}, -{42,38,-43}, -{42,38,-42}, -{42,38,-41}, -{42,38,-40}, -{42,38,-39}, -{42,38,-38}, -{42,38,-37}, -{42,38,-36}, -{42,38,-35}, -{42,38,-34}, -{42,38,-33}, -{42,38,-32}, -{42,38,-31}, -{42,38,-30}, -{42,38,-29}, -{42,38,-28}, -{42,38,-27}, -{42,38,-26}, -{42,38,-25}, -{42,38,-24}, -{42,38,-23}, -{42,38,-22}, -{42,38,-21}, -{42,38,-20}, -{42,38,-19}, -{42,38,-18}, -{42,38,-17}, -{42,38,-16}, -{42,38,-15}, -{42,38,-14}, -{42,38,-13}, -{42,38,-12}, -{42,38,-11}, -{42,38,-10}, -{42,38,-9}, -{42,38,-8}, -{42,38,-7}, -{42,38,-6}, -{42,38,-5}, -{42,38,-4}, -{42,38,-3}, -{42,38,-2}, -{42,38,-1}, -{42,38,0}, -{42,38,1}, -{42,38,2}, -{42,38,3}, -{42,38,4}, -{42,38,5}, -{42,38,6}, -{42,38,7}, -{42,38,8}, -{42,38,9}, -{42,38,10}, -{42,38,11}, -{42,38,12}, -{42,38,13}, -{42,38,14}, -{42,38,15}, -{42,38,16}, -{42,38,17}, -{42,38,18}, -{42,38,19}, -{42,38,20}, -{42,38,21}, -{42,38,22}, -{42,38,23}, -{42,38,24}, -{42,38,25}, -{42,38,26}, -{42,38,27}, -{42,38,28}, -{42,38,29}, -{42,38,30}, -{42,38,31}, -{42,38,32}, -{42,38,33}, -{42,38,34}, -{42,38,35}, -{42,38,36}, -{42,38,37}, -{42,38,38}, -{42,38,39}, -{42,38,40}, -{42,38,41}, -{42,38,42}, -{42,38,43}, -{42,38,44}, -{42,38,45}, -{42,38,46}, -{42,38,47}, -{42,38,48}, -{42,38,49}, -{42,38,50}, -{42,38,51}, -{42,38,52}, -{42,39,-81}, -{42,39,-80}, -{42,39,-79}, -{42,39,-78}, -{42,39,-77}, -{42,39,-76}, -{42,39,-75}, -{42,39,-74}, -{42,39,-73}, -{42,39,-72}, -{42,39,-71}, -{42,39,-70}, -{42,39,-69}, -{42,39,-68}, -{42,39,-67}, -{42,39,-66}, -{42,39,-65}, -{42,39,-64}, -{42,39,-63}, -{42,39,-62}, -{42,39,-61}, -{42,39,-60}, -{42,39,-59}, -{42,39,-58}, -{42,39,-57}, -{42,39,-56}, -{42,39,-55}, -{42,39,-54}, -{42,39,-53}, -{42,39,-52}, -{42,39,-51}, -{42,39,-50}, -{42,39,-49}, -{42,39,-48}, -{42,39,-47}, -{42,39,-46}, -{42,39,-45}, -{42,39,-44}, -{42,39,-43}, -{42,39,-42}, -{42,39,-41}, -{42,39,-40}, -{42,39,-39}, -{42,39,-38}, -{42,39,-37}, -{42,39,-36}, -{42,39,-35}, -{42,39,-34}, -{42,39,-33}, -{42,39,-32}, -{42,39,-31}, -{42,39,-30}, -{42,39,-29}, -{42,39,-28}, -{42,39,-27}, -{42,39,-26}, -{42,39,-25}, -{42,39,-24}, -{42,39,-23}, -{42,39,-22}, -{42,39,-21}, -{42,39,-20}, -{42,39,-19}, -{42,39,-18}, -{42,39,-17}, -{42,39,-16}, -{42,39,-15}, -{42,39,-14}, -{42,39,-13}, -{42,39,-12}, -{42,39,-11}, -{42,39,-10}, -{42,39,-9}, -{42,39,-8}, -{42,39,-7}, -{42,39,-6}, -{42,39,-5}, -{42,39,-4}, -{42,39,-3}, -{42,39,-2}, -{42,39,-1}, -{42,39,0}, -{42,39,1}, -{42,39,2}, -{42,39,3}, -{42,39,4}, -{42,39,5}, -{42,39,6}, -{42,39,7}, -{42,39,8}, -{42,39,9}, -{42,39,10}, -{42,39,11}, -{42,39,12}, -{42,39,13}, -{42,39,14}, -{42,39,15}, -{42,39,16}, -{42,39,17}, -{42,39,18}, -{42,39,19}, -{42,39,20}, -{42,39,21}, -{42,39,22}, -{42,39,23}, -{42,39,24}, -{42,39,25}, -{42,39,26}, -{42,39,27}, -{42,39,28}, -{42,39,29}, -{42,39,30}, -{42,39,31}, -{42,39,32}, -{42,39,33}, -{42,39,34}, -{42,39,35}, -{42,39,36}, -{42,39,37}, -{42,39,38}, -{42,39,39}, -{42,39,40}, -{42,39,41}, -{42,39,42}, -{42,39,43}, -{42,39,44}, -{42,39,45}, -{42,39,46}, -{42,39,47}, -{42,39,48}, -{42,39,49}, -{42,39,50}, -{42,39,51}, -{42,39,52}, -{42,40,-82}, -{42,40,-81}, -{42,40,-80}, -{42,40,-79}, -{42,40,-78}, -{42,40,-77}, -{42,40,-76}, -{42,40,-75}, -{42,40,-74}, -{42,40,-73}, -{42,40,-72}, -{42,40,-71}, -{42,40,-70}, -{42,40,-69}, -{42,40,-68}, -{42,40,-67}, -{42,40,-66}, -{42,40,-65}, -{42,40,-64}, -{42,40,-63}, -{42,40,-62}, -{42,40,-61}, -{42,40,-60}, -{42,40,-59}, -{42,40,-58}, -{42,40,-57}, -{42,40,-56}, -{42,40,-55}, -{42,40,-54}, -{42,40,-53}, -{42,40,-52}, -{42,40,-51}, -{42,40,-50}, -{42,40,-49}, -{42,40,-48}, -{42,40,-47}, -{42,40,-46}, -{42,40,-45}, -{42,40,-44}, -{42,40,-43}, -{42,40,-42}, -{42,40,-41}, -{42,40,-40}, -{42,40,-39}, -{42,40,-38}, -{42,40,-37}, -{42,40,-36}, -{42,40,-35}, -{42,40,-34}, -{42,40,-33}, -{42,40,-32}, -{42,40,-31}, -{42,40,-30}, -{42,40,-29}, -{42,40,-28}, -{42,40,-27}, -{42,40,-26}, -{42,40,-25}, -{42,40,-24}, -{42,40,-23}, -{42,40,-22}, -{42,40,-21}, -{42,40,-20}, -{42,40,-19}, -{42,40,-18}, -{42,40,-17}, -{42,40,-16}, -{42,40,-15}, -{42,40,-14}, -{42,40,-13}, -{42,40,-12}, -{42,40,-11}, -{42,40,-10}, -{42,40,-9}, -{42,40,-8}, -{42,40,-7}, -{42,40,-6}, -{42,40,-5}, -{42,40,-4}, -{42,40,-3}, -{42,40,-2}, -{42,40,-1}, -{42,40,0}, -{42,40,1}, -{42,40,2}, -{42,40,3}, -{42,40,4}, -{42,40,5}, -{42,40,6}, -{42,40,7}, -{42,40,8}, -{42,40,9}, -{42,40,10}, -{42,40,11}, -{42,40,12}, -{42,40,13}, -{42,40,14}, -{42,40,15}, -{42,40,16}, -{42,40,17}, -{42,40,18}, -{42,40,19}, -{42,40,20}, -{42,40,21}, -{42,40,22}, -{42,40,23}, -{42,40,24}, -{42,40,25}, -{42,40,26}, -{42,40,27}, -{42,40,28}, -{42,40,29}, -{42,40,30}, -{42,40,31}, -{42,40,32}, -{42,40,33}, -{42,40,34}, -{42,40,35}, -{42,40,36}, -{42,40,37}, -{42,40,38}, -{42,40,39}, -{42,40,40}, -{42,40,41}, -{42,40,42}, -{42,40,43}, -{42,40,44}, -{42,40,45}, -{42,40,46}, -{42,40,47}, -{42,40,48}, -{42,40,49}, -{42,40,50}, -{42,40,51}, -{42,40,52}, -{42,41,-83}, -{42,41,-82}, -{42,41,-81}, -{42,41,-80}, -{42,41,-79}, -{42,41,-78}, -{42,41,-77}, -{42,41,-76}, -{42,41,-75}, -{42,41,-74}, -{42,41,-73}, -{42,41,-72}, -{42,41,-71}, -{42,41,-70}, -{42,41,-69}, -{42,41,-68}, -{42,41,-67}, -{42,41,-66}, -{42,41,-65}, -{42,41,-64}, -{42,41,-63}, -{42,41,-62}, -{42,41,-61}, -{42,41,-60}, -{42,41,-59}, -{42,41,-58}, -{42,41,-57}, -{42,41,-56}, -{42,41,-55}, -{42,41,-54}, -{42,41,-53}, -{42,41,-52}, -{42,41,-51}, -{42,41,-50}, -{42,41,-49}, -{42,41,-48}, -{42,41,-47}, -{42,41,-46}, -{42,41,-45}, -{42,41,-44}, -{42,41,-43}, -{42,41,-42}, -{42,41,-41}, -{42,41,-40}, -{42,41,-39}, -{42,41,-38}, -{42,41,-37}, -{42,41,-36}, -{42,41,-35}, -{42,41,-34}, -{42,41,-33}, -{42,41,-32}, -{42,41,-31}, -{42,41,-30}, -{42,41,-29}, -{42,41,-28}, -{42,41,-27}, -{42,41,-26}, -{42,41,-25}, -{42,41,-24}, -{42,41,-23}, -{42,41,-22}, -{42,41,-21}, -{42,41,-20}, -{42,41,-19}, -{42,41,-18}, -{42,41,-17}, -{42,41,-16}, -{42,41,-15}, -{42,41,-14}, -{42,41,-13}, -{42,41,-12}, -{42,41,-11}, -{42,41,-10}, -{42,41,-9}, -{42,41,-8}, -{42,41,-7}, -{42,41,-6}, -{42,41,-5}, -{42,41,-4}, -{42,41,-3}, -{42,41,-2}, -{42,41,-1}, -{42,41,0}, -{42,41,1}, -{42,41,2}, -{42,41,3}, -{42,41,4}, -{42,41,5}, -{42,41,6}, -{42,41,7}, -{42,41,8}, -{42,41,9}, -{42,41,10}, -{42,41,11}, -{42,41,12}, -{42,41,13}, -{42,41,14}, -{42,41,15}, -{42,41,16}, -{42,41,17}, -{42,41,18}, -{42,41,19}, -{42,41,20}, -{42,41,21}, -{42,41,22}, -{42,41,23}, -{42,41,24}, -{42,41,25}, -{42,41,26}, -{42,41,27}, -{42,41,28}, -{42,41,29}, -{42,41,30}, -{42,41,31}, -{42,41,32}, -{42,41,33}, -{42,41,34}, -{42,41,35}, -{42,41,36}, -{42,41,37}, -{42,41,38}, -{42,41,39}, -{42,41,40}, -{42,41,41}, -{42,41,42}, -{42,41,43}, -{42,41,44}, -{42,41,45}, -{42,41,46}, -{42,41,47}, -{42,41,48}, -{42,41,49}, -{42,41,50}, -{42,41,51}, -{42,41,52}, -{42,41,53}, -{42,42,-83}, -{42,42,-82}, -{42,42,-81}, -{42,42,-80}, -{42,42,-79}, -{42,42,-78}, -{42,42,-77}, -{42,42,-76}, -{42,42,-75}, -{42,42,-74}, -{42,42,-73}, -{42,42,-72}, -{42,42,-71}, -{42,42,-70}, -{42,42,-69}, -{42,42,-68}, -{42,42,-67}, -{42,42,-66}, -{42,42,-65}, -{42,42,-64}, -{42,42,-63}, -{42,42,-62}, -{42,42,-61}, -{42,42,-60}, -{42,42,-59}, -{42,42,-58}, -{42,42,-57}, -{42,42,-56}, -{42,42,-55}, -{42,42,-54}, -{42,42,-53}, -{42,42,-52}, -{42,42,-51}, -{42,42,-50}, -{42,42,-49}, -{42,42,-48}, -{42,42,-47}, -{42,42,-46}, -{42,42,-45}, -{42,42,-44}, -{42,42,-43}, -{42,42,-42}, -{42,42,-41}, -{42,42,-40}, -{42,42,-39}, -{42,42,-38}, -{42,42,-37}, -{42,42,-36}, -{42,42,-35}, -{42,42,-34}, -{42,42,-33}, -{42,42,-32}, -{42,42,-31}, -{42,42,-30}, -{42,42,-29}, -{42,42,-28}, -{42,42,-27}, -{42,42,-26}, -{42,42,-25}, -{42,42,-24}, -{42,42,-23}, -{42,42,-22}, -{42,42,-21}, -{42,42,-20}, -{42,42,-19}, -{42,42,-18}, -{42,42,-17}, -{42,42,-16}, -{42,42,-15}, -{42,42,-14}, -{42,42,-13}, -{42,42,-12}, -{42,42,-11}, -{42,42,-10}, -{42,42,-9}, -{42,42,-8}, -{42,42,-7}, -{42,42,-6}, -{42,42,-5}, -{42,42,-4}, -{42,42,-3}, -{42,42,-2}, -{42,42,-1}, -{42,42,0}, -{42,42,1}, -{42,42,2}, -{42,42,3}, -{42,42,4}, -{42,42,5}, -{42,42,6}, -{42,42,7}, -{42,42,8}, -{42,42,9}, -{42,42,10}, -{42,42,11}, -{42,42,12}, -{42,42,13}, -{42,42,14}, -{42,42,15}, -{42,42,16}, -{42,42,17}, -{42,42,18}, -{42,42,19}, -{42,42,20}, -{42,42,21}, -{42,42,22}, -{42,42,23}, -{42,42,24}, -{42,42,25}, -{42,42,26}, -{42,42,27}, -{42,42,28}, -{42,42,29}, -{42,42,30}, -{42,42,31}, -{42,42,32}, -{42,42,33}, -{42,42,34}, -{42,42,35}, -{42,42,36}, -{42,42,37}, -{42,42,38}, -{42,42,39}, -{42,42,40}, -{42,42,41}, -{42,42,42}, -{42,42,43}, -{42,42,44}, -{42,42,45}, -{42,42,46}, -{42,42,47}, -{42,42,48}, -{42,42,49}, -{42,42,50}, -{42,42,51}, -{42,42,52}, -{42,42,53}, -{42,43,-84}, -{42,43,-83}, -{42,43,-82}, -{42,43,-81}, -{42,43,-80}, -{42,43,-79}, -{42,43,-78}, -{42,43,-77}, -{42,43,-76}, -{42,43,-75}, -{42,43,-74}, -{42,43,-73}, -{42,43,-72}, -{42,43,-71}, -{42,43,-70}, -{42,43,-69}, -{42,43,-68}, -{42,43,-67}, -{42,43,-66}, -{42,43,-65}, -{42,43,-64}, -{42,43,-63}, -{42,43,-62}, -{42,43,-61}, -{42,43,-60}, -{42,43,-59}, -{42,43,-58}, -{42,43,-57}, -{42,43,-56}, -{42,43,-55}, -{42,43,-54}, -{42,43,-53}, -{42,43,-52}, -{42,43,-51}, -{42,43,-50}, -{42,43,-49}, -{42,43,-48}, -{42,43,-47}, -{42,43,-46}, -{42,43,-45}, -{42,43,-44}, -{42,43,-43}, -{42,43,-42}, -{42,43,-41}, -{42,43,-40}, -{42,43,-39}, -{42,43,-38}, -{42,43,-37}, -{42,43,-36}, -{42,43,-35}, -{42,43,-34}, -{42,43,-33}, -{42,43,-32}, -{42,43,-31}, -{42,43,-30}, -{42,43,-29}, -{42,43,-28}, -{42,43,-27}, -{42,43,-26}, -{42,43,-25}, -{42,43,-24}, -{42,43,-23}, -{42,43,-22}, -{42,43,-21}, -{42,43,-20}, -{42,43,-19}, -{42,43,-18}, -{42,43,-17}, -{42,43,-16}, -{42,43,-15}, -{42,43,-14}, -{42,43,-13}, -{42,43,-12}, -{42,43,-11}, -{42,43,-10}, -{42,43,-9}, -{42,43,-8}, -{42,43,-7}, -{42,43,-6}, -{42,43,-5}, -{42,43,-4}, -{42,43,-3}, -{42,43,-2}, -{42,43,-1}, -{42,43,0}, -{42,43,1}, -{42,43,2}, -{42,43,3}, -{42,43,4}, -{42,43,5}, -{42,43,6}, -{42,43,7}, -{42,43,8}, -{42,43,9}, -{42,43,10}, -{42,43,11}, -{42,43,12}, -{42,43,13}, -{42,43,14}, -{42,43,15}, -{42,43,16}, -{42,43,17}, -{42,43,18}, -{42,43,19}, -{42,43,20}, -{42,43,21}, -{42,43,22}, -{42,43,23}, -{42,43,24}, -{42,43,25}, -{42,43,26}, -{42,43,27}, -{42,43,28}, -{42,43,29}, -{42,43,30}, -{42,43,31}, -{42,43,32}, -{42,43,33}, -{42,43,34}, -{42,43,35}, -{42,43,36}, -{42,43,37}, -{42,43,38}, -{42,43,39}, -{42,43,40}, -{42,43,41}, -{42,43,42}, -{42,43,43}, -{42,43,44}, -{42,43,45}, -{42,43,46}, -{42,43,47}, -{42,43,48}, -{42,43,49}, -{42,43,50}, -{42,43,51}, -{42,43,52}, -{42,43,53}, -{42,44,-85}, -{42,44,-84}, -{42,44,-83}, -{42,44,-82}, -{42,44,-81}, -{42,44,-80}, -{42,44,-79}, -{42,44,-78}, -{42,44,-77}, -{42,44,-76}, -{42,44,-75}, -{42,44,-74}, -{42,44,-73}, -{42,44,-72}, -{42,44,-71}, -{42,44,-70}, -{42,44,-69}, -{42,44,-68}, -{42,44,-67}, -{42,44,-66}, -{42,44,-65}, -{42,44,-64}, -{42,44,-63}, -{42,44,-62}, -{42,44,-61}, -{42,44,-60}, -{42,44,-59}, -{42,44,-58}, -{42,44,-57}, -{42,44,-56}, -{42,44,-55}, -{42,44,-54}, -{42,44,-53}, -{42,44,-52}, -{42,44,-51}, -{42,44,-50}, -{42,44,-49}, -{42,44,-48}, -{42,44,-47}, -{42,44,-46}, -{42,44,-45}, -{42,44,-44}, -{42,44,-43}, -{42,44,-42}, -{42,44,-41}, -{42,44,-40}, -{42,44,-39}, -{42,44,-38}, -{42,44,-37}, -{42,44,-36}, -{42,44,-35}, -{42,44,-34}, -{42,44,-33}, -{42,44,-32}, -{42,44,-31}, -{42,44,-30}, -{42,44,-29}, -{42,44,-28}, -{42,44,-27}, -{42,44,-26}, -{42,44,-25}, -{42,44,-24}, -{42,44,-23}, -{42,44,-22}, -{42,44,-21}, -{42,44,-20}, -{42,44,-19}, -{42,44,-18}, -{42,44,-17}, -{42,44,-16}, -{42,44,-15}, -{42,44,-14}, -{42,44,-13}, -{42,44,-12}, -{42,44,-11}, -{42,44,-10}, -{42,44,-9}, -{42,44,-8}, -{42,44,-7}, -{42,44,-6}, -{42,44,-5}, -{42,44,-4}, -{42,44,-3}, -{42,44,-2}, -{42,44,-1}, -{42,44,0}, -{42,44,1}, -{42,44,2}, -{42,44,3}, -{42,44,4}, -{42,44,5}, -{42,44,6}, -{42,44,7}, -{42,44,8}, -{42,44,9}, -{42,44,10}, -{42,44,11}, -{42,44,12}, -{42,44,13}, -{42,44,14}, -{42,44,15}, -{42,44,16}, -{42,44,17}, -{42,44,18}, -{42,44,19}, -{42,44,20}, -{42,44,21}, -{42,44,22}, -{42,44,23}, -{42,44,24}, -{42,44,25}, -{42,44,26}, -{42,44,27}, -{42,44,28}, -{42,44,29}, -{42,44,30}, -{42,44,31}, -{42,44,32}, -{42,44,33}, -{42,44,34}, -{42,44,35}, -{42,44,36}, -{42,44,37}, -{42,44,38}, -{42,44,39}, -{42,44,40}, -{42,44,41}, -{42,44,42}, -{42,44,43}, -{42,44,44}, -{42,44,45}, -{42,44,46}, -{42,44,47}, -{42,44,48}, -{42,44,49}, -{42,44,50}, -{42,44,51}, -{42,44,52}, -{42,44,53}, -{42,45,-86}, -{42,45,-85}, -{42,45,-84}, -{42,45,-83}, -{42,45,-82}, -{42,45,-81}, -{42,45,-80}, -{42,45,-79}, -{42,45,-78}, -{42,45,-77}, -{42,45,-76}, -{42,45,-75}, -{42,45,-74}, -{42,45,-73}, -{42,45,-72}, -{42,45,-71}, -{42,45,-70}, -{42,45,-69}, -{42,45,-68}, -{42,45,-67}, -{42,45,-66}, -{42,45,-65}, -{42,45,-64}, -{42,45,-63}, -{42,45,-62}, -{42,45,-61}, -{42,45,-60}, -{42,45,-59}, -{42,45,-58}, -{42,45,-57}, -{42,45,-56}, -{42,45,-55}, -{42,45,-54}, -{42,45,-53}, -{42,45,-52}, -{42,45,-51}, -{42,45,-50}, -{42,45,-49}, -{42,45,-48}, -{42,45,-47}, -{42,45,-46}, -{42,45,-45}, -{42,45,-44}, -{42,45,-43}, -{42,45,-42}, -{42,45,-41}, -{42,45,-40}, -{42,45,-39}, -{42,45,-38}, -{42,45,-37}, -{42,45,-36}, -{42,45,-35}, -{42,45,-34}, -{42,45,-33}, -{42,45,-32}, -{42,45,-31}, -{42,45,-30}, -{42,45,-29}, -{42,45,-28}, -{42,45,-27}, -{42,45,-26}, -{42,45,-25}, -{42,45,-24}, -{42,45,-23}, -{42,45,-22}, -{42,45,-21}, -{42,45,-20}, -{42,45,-19}, -{42,45,-18}, -{42,45,-17}, -{42,45,-16}, -{42,45,-15}, -{42,45,-14}, -{42,45,-13}, -{42,45,-12}, -{42,45,-11}, -{42,45,-10}, -{42,45,-9}, -{42,45,-8}, -{42,45,-7}, -{42,45,-6}, -{42,45,-5}, -{42,45,-4}, -{42,45,-3}, -{42,45,-2}, -{42,45,-1}, -{42,45,0}, -{42,45,1}, -{42,45,2}, -{42,45,3}, -{42,45,4}, -{42,45,5}, -{42,45,6}, -{42,45,7}, -{42,45,8}, -{42,45,9}, -{42,45,10}, -{42,45,11}, -{42,45,12}, -{42,45,13}, -{42,45,14}, -{42,45,15}, -{42,45,16}, -{42,45,17}, -{42,45,18}, -{42,45,19}, -{42,45,20}, -{42,45,21}, -{42,45,22}, -{42,45,23}, -{42,45,24}, -{42,45,25}, -{42,45,26}, -{42,45,27}, -{42,45,28}, -{42,45,29}, -{42,45,30}, -{42,45,31}, -{42,45,32}, -{42,45,33}, -{42,45,34}, -{42,45,35}, -{42,45,36}, -{42,45,37}, -{42,45,38}, -{42,45,39}, -{42,45,40}, -{42,45,41}, -{42,45,42}, -{42,45,43}, -{42,45,44}, -{42,45,45}, -{42,45,46}, -{42,45,47}, -{42,45,48}, -{42,45,49}, -{42,45,50}, -{42,45,51}, -{42,45,52}, -{42,45,53}, -{42,46,-87}, -{42,46,-86}, -{42,46,-85}, -{42,46,-84}, -{42,46,-83}, -{42,46,-82}, -{42,46,-81}, -{42,46,-80}, -{42,46,-79}, -{42,46,-78}, -{42,46,-77}, -{42,46,-76}, -{42,46,-75}, -{42,46,-74}, -{42,46,-73}, -{42,46,-72}, -{42,46,-71}, -{42,46,-70}, -{42,46,-69}, -{42,46,-68}, -{42,46,-67}, -{42,46,-66}, -{42,46,-65}, -{42,46,-64}, -{42,46,-63}, -{42,46,-62}, -{42,46,-61}, -{42,46,-60}, -{42,46,-59}, -{42,46,-58}, -{42,46,-57}, -{42,46,-56}, -{42,46,-55}, -{42,46,-54}, -{42,46,-53}, -{42,46,-52}, -{42,46,-51}, -{42,46,-50}, -{42,46,-49}, -{42,46,-48}, -{42,46,-47}, -{42,46,-46}, -{42,46,-45}, -{42,46,-44}, -{42,46,-43}, -{42,46,-42}, -{42,46,-41}, -{42,46,-40}, -{42,46,-39}, -{42,46,-38}, -{42,46,-37}, -{42,46,-36}, -{42,46,-35}, -{42,46,-34}, -{42,46,-33}, -{42,46,-32}, -{42,46,-31}, -{42,46,-30}, -{42,46,-29}, -{42,46,-28}, -{42,46,-27}, -{42,46,-26}, -{42,46,-25}, -{42,46,-24}, -{42,46,-23}, -{42,46,-22}, -{42,46,-21}, -{42,46,-20}, -{42,46,-19}, -{42,46,-18}, -{42,46,-17}, -{42,46,-16}, -{42,46,-15}, -{42,46,-14}, -{42,46,-13}, -{42,46,-12}, -{42,46,-11}, -{42,46,-10}, -{42,46,-9}, -{42,46,-8}, -{42,46,-7}, -{42,46,-6}, -{42,46,-5}, -{42,46,-4}, -{42,46,-3}, -{42,46,-2}, -{42,46,-1}, -{42,46,0}, -{42,46,1}, -{42,46,2}, -{42,46,3}, -{42,46,4}, -{42,46,5}, -{42,46,6}, -{42,46,7}, -{42,46,8}, -{42,46,9}, -{42,46,10}, -{42,46,11}, -{42,46,12}, -{42,46,13}, -{42,46,14}, -{42,46,15}, -{42,46,16}, -{42,46,17}, -{42,46,18}, -{42,46,19}, -{42,46,20}, -{42,46,21}, -{42,46,22}, -{42,46,23}, -{42,46,24}, -{42,46,25}, -{42,46,26}, -{42,46,27}, -{42,46,28}, -{42,46,29}, -{42,46,30}, -{42,46,31}, -{42,46,32}, -{42,46,33}, -{42,46,34}, -{42,46,35}, -{42,46,36}, -{42,46,37}, -{42,46,38}, -{42,46,39}, -{42,46,40}, -{42,46,41}, -{42,46,42}, -{42,46,43}, -{42,46,44}, -{42,46,45}, -{42,46,46}, -{42,46,47}, -{42,46,48}, -{42,46,49}, -{42,46,50}, -{42,46,51}, -{42,46,52}, -{42,46,53}, -{42,47,-88}, -{42,47,-87}, -{42,47,-86}, -{42,47,-85}, -{42,47,-84}, -{42,47,-83}, -{42,47,-82}, -{42,47,-81}, -{42,47,-80}, -{42,47,-79}, -{42,47,-78}, -{42,47,-77}, -{42,47,-76}, -{42,47,-75}, -{42,47,-74}, -{42,47,-73}, -{42,47,-72}, -{42,47,-71}, -{42,47,-70}, -{42,47,-69}, -{42,47,-68}, -{42,47,-67}, -{42,47,-66}, -{42,47,-65}, -{42,47,-64}, -{42,47,-63}, -{42,47,-62}, -{42,47,-61}, -{42,47,-60}, -{42,47,-59}, -{42,47,-58}, -{42,47,-57}, -{42,47,-56}, -{42,47,-55}, -{42,47,-54}, -{42,47,-53}, -{42,47,-52}, -{42,47,-51}, -{42,47,-50}, -{42,47,-49}, -{42,47,-48}, -{42,47,-47}, -{42,47,-46}, -{42,47,-45}, -{42,47,-44}, -{42,47,-43}, -{42,47,-42}, -{42,47,-41}, -{42,47,-40}, -{42,47,-39}, -{42,47,-38}, -{42,47,-37}, -{42,47,-36}, -{42,47,-35}, -{42,47,-34}, -{42,47,-33}, -{42,47,-32}, -{42,47,-31}, -{42,47,-30}, -{42,47,-29}, -{42,47,-28}, -{42,47,-27}, -{42,47,-26}, -{42,47,-25}, -{42,47,-24}, -{42,47,-23}, -{42,47,-22}, -{42,47,-21}, -{42,47,-20}, -{42,47,-19}, -{42,47,-18}, -{42,47,-17}, -{42,47,-16}, -{42,47,-15}, -{42,47,-14}, -{42,47,-13}, -{42,47,-12}, -{42,47,-11}, -{42,47,-10}, -{42,47,-9}, -{42,47,-8}, -{42,47,-7}, -{42,47,-6}, -{42,47,-5}, -{42,47,-4}, -{42,47,-3}, -{42,47,-2}, -{42,47,-1}, -{42,47,0}, -{42,47,1}, -{42,47,2}, -{42,47,3}, -{42,47,4}, -{42,47,5}, -{42,47,6}, -{42,47,7}, -{42,47,8}, -{42,47,9}, -{42,47,10}, -{42,47,11}, -{42,47,12}, -{42,47,13}, -{42,47,14}, -{42,47,15}, -{42,47,16}, -{42,47,17}, -{42,47,18}, -{42,47,19}, -{42,47,20}, -{42,47,21}, -{42,47,22}, -{42,47,23}, -{42,47,24}, -{42,47,25}, -{42,47,26}, -{42,47,27}, -{42,47,28}, -{42,47,29}, -{42,47,30}, -{42,47,31}, -{42,47,32}, -{42,47,33}, -{42,47,34}, -{42,47,35}, -{42,47,36}, -{42,47,37}, -{42,47,38}, -{42,47,39}, -{42,47,40}, -{42,47,41}, -{42,47,42}, -{42,47,43}, -{42,47,44}, -{42,47,45}, -{42,47,46}, -{42,47,47}, -{42,47,48}, -{42,47,49}, -{42,47,50}, -{42,47,51}, -{42,47,52}, -{42,47,53}, -{42,48,-89}, -{42,48,-88}, -{42,48,-87}, -{42,48,-86}, -{42,48,-85}, -{42,48,-84}, -{42,48,-83}, -{42,48,-82}, -{42,48,-81}, -{42,48,-80}, -{42,48,-79}, -{42,48,-78}, -{42,48,-77}, -{42,48,-76}, -{42,48,-75}, -{42,48,-74}, -{42,48,-73}, -{42,48,-72}, -{42,48,-71}, -{42,48,-70}, -{42,48,-69}, -{42,48,-68}, -{42,48,-67}, -{42,48,-66}, -{42,48,-65}, -{42,48,-64}, -{42,48,-63}, -{42,48,-62}, -{42,48,-61}, -{42,48,-60}, -{42,48,-59}, -{42,48,-58}, -{42,48,-57}, -{42,48,-56}, -{42,48,-55}, -{42,48,-54}, -{42,48,-53}, -{42,48,-52}, -{42,48,-51}, -{42,48,-50}, -{42,48,-49}, -{42,48,-48}, -{42,48,-47}, -{42,48,-46}, -{42,48,-45}, -{42,48,-44}, -{42,48,-43}, -{42,48,-42}, -{42,48,-41}, -{42,48,-40}, -{42,48,-39}, -{42,48,-38}, -{42,48,-37}, -{42,48,-36}, -{42,48,-35}, -{42,48,-34}, -{42,48,-33}, -{42,48,-32}, -{42,48,-31}, -{42,48,-30}, -{42,48,-29}, -{42,48,-28}, -{42,48,-27}, -{42,48,-26}, -{42,48,-25}, -{42,48,-24}, -{42,48,-23}, -{42,48,-22}, -{42,48,-21}, -{42,48,-20}, -{42,48,-19}, -{42,48,-18}, -{42,48,-17}, -{42,48,-16}, -{42,48,-15}, -{42,48,-14}, -{42,48,-13}, -{42,48,-12}, -{42,48,-11}, -{42,48,-10}, -{42,48,-9}, -{42,48,-8}, -{42,48,-7}, -{42,48,-6}, -{42,48,-5}, -{42,48,-4}, -{42,48,-3}, -{42,48,-2}, -{42,48,-1}, -{42,48,0}, -{42,48,1}, -{42,48,2}, -{42,48,3}, -{42,48,4}, -{42,48,5}, -{42,48,6}, -{42,48,7}, -{42,48,8}, -{42,48,9}, -{42,48,10}, -{42,48,11}, -{42,48,12}, -{42,48,13}, -{42,48,14}, -{42,48,15}, -{42,48,16}, -{42,48,17}, -{42,48,18}, -{42,48,19}, -{42,48,20}, -{42,48,21}, -{42,48,22}, -{42,48,23}, -{42,48,24}, -{42,48,25}, -{42,48,26}, -{42,48,27}, -{42,48,28}, -{42,48,29}, -{42,48,30}, -{42,48,31}, -{42,48,32}, -{42,48,33}, -{42,48,34}, -{42,48,35}, -{42,48,36}, -{42,48,37}, -{42,48,38}, -{42,48,39}, -{42,48,40}, -{42,48,41}, -{42,48,42}, -{42,48,43}, -{42,48,44}, -{42,48,45}, -{42,48,46}, -{42,48,47}, -{42,48,48}, -{42,48,49}, -{42,48,50}, -{42,48,51}, -{42,48,52}, -{42,48,53}, -{42,49,-90}, -{42,49,-89}, -{42,49,-88}, -{42,49,-87}, -{42,49,-86}, -{42,49,-85}, -{42,49,-84}, -{42,49,-83}, -{42,49,-82}, -{42,49,-81}, -{42,49,-80}, -{42,49,-79}, -{42,49,-78}, -{42,49,-77}, -{42,49,-76}, -{42,49,-75}, -{42,49,-74}, -{42,49,-73}, -{42,49,-72}, -{42,49,-71}, -{42,49,-70}, -{42,49,-69}, -{42,49,-68}, -{42,49,-67}, -{42,49,-66}, -{42,49,-65}, -{42,49,-64}, -{42,49,-63}, -{42,49,-62}, -{42,49,-61}, -{42,49,-60}, -{42,49,-59}, -{42,49,-58}, -{42,49,-57}, -{42,49,-56}, -{42,49,-55}, -{42,49,-54}, -{42,49,-53}, -{42,49,-52}, -{42,49,-51}, -{42,49,-50}, -{42,49,-49}, -{42,49,-48}, -{42,49,-47}, -{42,49,-46}, -{42,49,-45}, -{42,49,-44}, -{42,49,-43}, -{42,49,-42}, -{42,49,-41}, -{42,49,-40}, -{42,49,-39}, -{42,49,-38}, -{42,49,-37}, -{42,49,-36}, -{42,49,-35}, -{42,49,-34}, -{42,49,-33}, -{42,49,-32}, -{42,49,-31}, -{42,49,-30}, -{42,49,-29}, -{42,49,-28}, -{42,49,-27}, -{42,49,-26}, -{42,49,-25}, -{42,49,-24}, -{42,49,-23}, -{42,49,-22}, -{42,49,-21}, -{42,49,-20}, -{42,49,-19}, -{42,49,-18}, -{42,49,-17}, -{42,49,-16}, -{42,49,-15}, -{42,49,-14}, -{42,49,-13}, -{42,49,-12}, -{42,49,-11}, -{42,49,-10}, -{42,49,-9}, -{42,49,-8}, -{42,49,-7}, -{42,49,-6}, -{42,49,-5}, -{42,49,-4}, -{42,49,-3}, -{42,49,-2}, -{42,49,-1}, -{42,49,0}, -{42,49,1}, -{42,49,2}, -{42,49,3}, -{42,49,4}, -{42,49,5}, -{42,49,6}, -{42,49,7}, -{42,49,8}, -{42,49,9}, -{42,49,10}, -{42,49,11}, -{42,49,12}, -{42,49,13}, -{42,49,14}, -{42,49,15}, -{42,49,16}, -{42,49,17}, -{42,49,18}, -{42,49,19}, -{42,49,20}, -{42,49,21}, -{42,49,22}, -{42,49,23}, -{42,49,24}, -{42,49,25}, -{42,49,26}, -{42,49,27}, -{42,49,28}, -{42,49,29}, -{42,49,30}, -{42,49,31}, -{42,49,32}, -{42,49,33}, -{42,49,34}, -{42,49,35}, -{42,49,36}, -{42,49,37}, -{42,49,38}, -{42,49,39}, -{42,49,40}, -{42,49,41}, -{42,49,42}, -{42,49,43}, -{42,49,44}, -{42,49,45}, -{42,49,46}, -{42,49,47}, -{42,49,48}, -{42,49,49}, -{42,49,50}, -{42,49,51}, -{42,49,52}, -{42,49,53}, -{42,49,54}, -{42,50,-91}, -{42,50,-90}, -{42,50,-89}, -{42,50,-88}, -{42,50,-87}, -{42,50,-86}, -{42,50,-85}, -{42,50,-84}, -{42,50,-83}, -{42,50,-82}, -{42,50,-81}, -{42,50,-80}, -{42,50,-79}, -{42,50,-78}, -{42,50,-77}, -{42,50,-76}, -{42,50,-75}, -{42,50,-74}, -{42,50,-73}, -{42,50,-72}, -{42,50,-71}, -{42,50,-70}, -{42,50,-69}, -{42,50,-68}, -{42,50,-67}, -{42,50,-66}, -{42,50,-65}, -{42,50,-64}, -{42,50,-63}, -{42,50,-62}, -{42,50,-61}, -{42,50,-60}, -{42,50,-59}, -{42,50,-58}, -{42,50,-57}, -{42,50,-56}, -{42,50,-55}, -{42,50,-54}, -{42,50,-53}, -{42,50,-52}, -{42,50,-51}, -{42,50,-50}, -{42,50,-49}, -{42,50,-48}, -{42,50,-47}, -{42,50,-46}, -{42,50,-45}, -{42,50,-44}, -{42,50,-43}, -{42,50,-42}, -{42,50,-41}, -{42,50,-40}, -{42,50,-39}, -{42,50,-38}, -{42,50,-37}, -{42,50,-36}, -{42,50,-35}, -{42,50,-34}, -{42,50,-33}, -{42,50,-32}, -{42,50,-31}, -{42,50,-30}, -{42,50,-29}, -{42,50,-28}, -{42,50,-27}, -{42,50,-26}, -{42,50,-25}, -{42,50,-24}, -{42,50,-23}, -{42,50,-22}, -{42,50,-21}, -{42,50,-20}, -{42,50,-19}, -{42,50,-18}, -{42,50,-17}, -{42,50,-16}, -{42,50,-15}, -{42,50,-14}, -{42,50,-13}, -{42,50,-12}, -{42,50,-11}, -{42,50,-10}, -{42,50,-9}, -{42,50,-8}, -{42,50,-7}, -{42,50,-6}, -{42,50,-5}, -{42,50,-4}, -{42,50,-3}, -{42,50,-2}, -{42,50,-1}, -{42,50,0}, -{42,50,1}, -{42,50,2}, -{42,50,3}, -{42,50,4}, -{42,50,5}, -{42,50,6}, -{42,50,7}, -{42,50,8}, -{42,50,9}, -{42,50,10}, -{42,50,11}, -{42,50,12}, -{42,50,13}, -{42,50,14}, -{42,50,15}, -{42,50,16}, -{42,50,17}, -{42,50,18}, -{42,50,19}, -{42,50,20}, -{42,50,21}, -{42,50,22}, -{42,50,23}, -{42,50,24}, -{42,50,25}, -{42,50,26}, -{42,50,27}, -{42,50,28}, -{42,50,29}, -{42,50,30}, -{42,50,31}, -{42,50,32}, -{42,50,33}, -{42,50,34}, -{42,50,35}, -{42,50,36}, -{42,50,37}, -{42,50,38}, -{42,50,39}, -{42,50,40}, -{42,50,41}, -{42,50,42}, -{42,50,43}, -{42,50,44}, -{42,50,45}, -{42,50,46}, -{42,50,47}, -{42,50,48}, -{42,50,49}, -{42,50,50}, -{42,50,51}, -{42,50,52}, -{42,50,53}, -{42,50,54}, -{42,51,-91}, -{42,51,-90}, -{42,51,-89}, -{42,51,-88}, -{42,51,-87}, -{42,51,-86}, -{42,51,-85}, -{42,51,-84}, -{42,51,-83}, -{42,51,-82}, -{42,51,-81}, -{42,51,-80}, -{42,51,-79}, -{42,51,-78}, -{42,51,-77}, -{42,51,-76}, -{42,51,-75}, -{42,51,-74}, -{42,51,-73}, -{42,51,-72}, -{42,51,-71}, -{42,51,-70}, -{42,51,-69}, -{42,51,-68}, -{42,51,-67}, -{42,51,-66}, -{42,51,-65}, -{42,51,-64}, -{42,51,-63}, -{42,51,-62}, -{42,51,-61}, -{42,51,-60}, -{42,51,-59}, -{42,51,-58}, -{42,51,-57}, -{42,51,-56}, -{42,51,-55}, -{42,51,-54}, -{42,51,-53}, -{42,51,-52}, -{42,51,-51}, -{42,51,-50}, -{42,51,-49}, -{42,51,-48}, -{42,51,-47}, -{42,51,-46}, -{42,51,-45}, -{42,51,-44}, -{42,51,-43}, -{42,51,-42}, -{42,51,-41}, -{42,51,-40}, -{42,51,-39}, -{42,51,-38}, -{42,51,-37}, -{42,51,-36}, -{42,51,-35}, -{42,51,-34}, -{42,51,-33}, -{42,51,-32}, -{42,51,-31}, -{42,51,-30}, -{42,51,-29}, -{42,51,-28}, -{42,51,-27}, -{42,51,-26}, -{42,51,-25}, -{42,51,-24}, -{42,51,-23}, -{42,51,-22}, -{42,51,-21}, -{42,51,-20}, -{42,51,-19}, -{42,51,-18}, -{42,51,-17}, -{42,51,-16}, -{42,51,-15}, -{42,51,-14}, -{42,51,-13}, -{42,51,-12}, -{42,51,-11}, -{42,51,-10}, -{42,51,-9}, -{42,51,-8}, -{42,51,-7}, -{42,51,-6}, -{42,51,-5}, -{42,51,-4}, -{42,51,-3}, -{42,51,-2}, -{42,51,-1}, -{42,51,0}, -{42,51,1}, -{42,51,2}, -{42,51,3}, -{42,51,4}, -{42,51,5}, -{42,51,6}, -{42,51,7}, -{42,51,8}, -{42,51,9}, -{42,51,10}, -{42,51,11}, -{42,51,12}, -{42,51,13}, -{42,51,14}, -{42,51,15}, -{42,51,16}, -{42,51,17}, -{42,51,18}, -{42,51,19}, -{42,51,20}, -{42,51,21}, -{42,51,22}, -{42,51,23}, -{42,51,24}, -{42,51,25}, -{42,51,26}, -{42,51,27}, -{42,51,28}, -{42,51,29}, -{42,51,30}, -{42,51,31}, -{42,51,32}, -{42,51,33}, -{42,51,34}, -{42,51,35}, -{42,51,36}, -{42,51,37}, -{42,51,38}, -{42,51,39}, -{42,51,40}, -{42,51,41}, -{42,51,42}, -{42,51,43}, -{42,51,44}, -{42,51,45}, -{42,51,46}, -{42,51,47}, -{42,51,48}, -{42,51,49}, -{42,51,50}, -{42,51,51}, -{42,51,52}, -{42,51,53}, -{42,51,54}, -{42,52,-91}, -{42,52,-90}, -{42,52,-89}, -{42,52,-88}, -{42,52,-87}, -{42,52,-86}, -{42,52,-85}, -{42,52,-84}, -{42,52,-83}, -{42,52,-82}, -{42,52,-81}, -{42,52,-80}, -{42,52,-79}, -{42,52,-78}, -{42,52,-77}, -{42,52,-76}, -{42,52,-75}, -{42,52,-74}, -{42,52,-73}, -{42,52,-72}, -{42,52,-71}, -{42,52,-70}, -{42,52,-69}, -{42,52,-68}, -{42,52,-67}, -{42,52,-66}, -{42,52,-65}, -{42,52,-64}, -{42,52,-63}, -{42,52,-62}, -{42,52,-61}, -{42,52,-60}, -{42,52,-59}, -{42,52,-58}, -{42,52,-57}, -{42,52,-56}, -{42,52,-55}, -{42,52,-54}, -{42,52,-53}, -{42,52,-52}, -{42,52,-51}, -{42,52,-50}, -{42,52,-49}, -{42,52,-48}, -{42,52,-47}, -{42,52,-46}, -{42,52,-45}, -{42,52,-44}, -{42,52,-43}, -{42,52,-42}, -{42,52,-41}, -{42,52,-40}, -{42,52,-39}, -{42,52,-38}, -{42,52,-37}, -{42,52,-36}, -{42,52,-35}, -{42,52,-34}, -{42,52,-33}, -{42,52,-32}, -{42,52,-31}, -{42,52,-30}, -{42,52,-29}, -{42,52,-28}, -{42,52,-27}, -{42,52,-26}, -{42,52,-25}, -{42,52,-24}, -{42,52,-23}, -{42,52,-22}, -{42,52,-21}, -{42,52,-20}, -{42,52,-19}, -{42,52,-18}, -{42,52,-17}, -{42,52,-16}, -{42,52,-15}, -{42,52,-14}, -{42,52,-13}, -{42,52,-12}, -{42,52,-11}, -{42,52,-10}, -{42,52,-9}, -{42,52,-8}, -{42,52,-7}, -{42,52,-6}, -{42,52,-5}, -{42,52,-4}, -{42,52,-3}, -{42,52,-2}, -{42,52,-1}, -{42,52,0}, -{42,52,1}, -{42,52,2}, -{42,52,3}, -{42,52,4}, -{42,52,5}, -{42,52,6}, -{42,52,7}, -{42,52,8}, -{42,52,9}, -{42,52,10}, -{42,52,11}, -{42,52,12}, -{42,52,13}, -{42,52,14}, -{42,52,15}, -{42,52,16}, -{42,52,17}, -{42,52,18}, -{42,52,19}, -{42,52,20}, -{42,52,21}, -{42,52,22}, -{42,52,23}, -{42,52,24}, -{42,52,25}, -{42,52,26}, -{42,52,27}, -{42,52,28}, -{42,52,29}, -{42,52,30}, -{42,52,31}, -{42,52,32}, -{42,52,33}, -{42,52,34}, -{42,52,35}, -{42,52,36}, -{42,52,37}, -{42,52,38}, -{42,52,39}, -{42,52,40}, -{42,52,41}, -{42,52,42}, -{42,52,43}, -{42,52,44}, -{42,52,45}, -{42,52,46}, -{42,52,47}, -{42,52,48}, -{42,52,49}, -{42,52,50}, -{42,52,51}, -{42,52,52}, -{42,52,53}, -{42,52,54}, -{42,53,-91}, -{42,53,-90}, -{42,53,-89}, -{42,53,-88}, -{42,53,-87}, -{42,53,-86}, -{42,53,-85}, -{42,53,-84}, -{42,53,-83}, -{42,53,-82}, -{42,53,-81}, -{42,53,-80}, -{42,53,-79}, -{42,53,-78}, -{42,53,-77}, -{42,53,-76}, -{42,53,-75}, -{42,53,-74}, -{42,53,-73}, -{42,53,-72}, -{42,53,-71}, -{42,53,-70}, -{42,53,-69}, -{42,53,-68}, -{42,53,-67}, -{42,53,-66}, -{42,53,-65}, -{42,53,-64}, -{42,53,-63}, -{42,53,-62}, -{42,53,-61}, -{42,53,-60}, -{42,53,-59}, -{42,53,-58}, -{42,53,-57}, -{42,53,-56}, -{42,53,-55}, -{42,53,-54}, -{42,53,-53}, -{42,53,-52}, -{42,53,-51}, -{42,53,-50}, -{42,53,-49}, -{42,53,-48}, -{42,53,-47}, -{42,53,-46}, -{42,53,-45}, -{42,53,-44}, -{42,53,-43}, -{42,53,-42}, -{42,53,-41}, -{42,53,-40}, -{42,53,-39}, -{42,53,-38}, -{42,53,-37}, -{42,53,-36}, -{42,53,-35}, -{42,53,-34}, -{42,53,-33}, -{42,53,-32}, -{42,53,-31}, -{42,53,-30}, -{42,53,-29}, -{42,53,-28}, -{42,53,-27}, -{42,53,-26}, -{42,53,-25}, -{42,53,-24}, -{42,53,-23}, -{42,53,-22}, -{42,53,-21}, -{42,53,-20}, -{42,53,-19}, -{42,53,-18}, -{42,53,-17}, -{42,53,-16}, -{42,53,-15}, -{42,53,-14}, -{42,53,-13}, -{42,53,-12}, -{42,53,-11}, -{42,53,-10}, -{42,53,-9}, -{42,53,-8}, -{42,53,-7}, -{42,53,-6}, -{42,53,-5}, -{42,53,-4}, -{42,53,-3}, -{42,53,-2}, -{42,53,-1}, -{42,53,0}, -{42,53,1}, -{42,53,2}, -{42,53,3}, -{42,53,4}, -{42,53,5}, -{42,53,6}, -{42,53,7}, -{42,53,8}, -{42,53,9}, -{42,53,10}, -{42,53,11}, -{42,53,12}, -{42,53,13}, -{42,53,14}, -{42,53,15}, -{42,53,16}, -{42,53,17}, -{42,53,18}, -{42,53,19}, -{42,53,20}, -{42,53,21}, -{42,53,22}, -{42,53,23}, -{42,53,24}, -{42,53,25}, -{42,53,26}, -{42,53,27}, -{42,53,28}, -{42,53,29}, -{42,53,30}, -{42,53,31}, -{42,53,32}, -{42,53,33}, -{42,53,34}, -{42,53,35}, -{42,53,36}, -{42,53,37}, -{42,53,38}, -{42,53,39}, -{42,53,40}, -{42,53,41}, -{42,53,42}, -{42,53,43}, -{42,53,44}, -{42,53,45}, -{42,53,46}, -{42,53,47}, -{42,53,48}, -{42,53,49}, -{42,53,50}, -{42,53,51}, -{42,53,52}, -{42,53,53}, -{42,53,54}, -{42,54,-91}, -{42,54,-90}, -{42,54,-89}, -{42,54,-88}, -{42,54,-87}, -{42,54,-86}, -{42,54,-85}, -{42,54,-84}, -{42,54,-83}, -{42,54,-82}, -{42,54,-81}, -{42,54,-80}, -{42,54,-79}, -{42,54,-78}, -{42,54,-77}, -{42,54,-76}, -{42,54,-75}, -{42,54,-74}, -{42,54,-73}, -{42,54,-72}, -{42,54,-71}, -{42,54,-70}, -{42,54,-69}, -{42,54,-68}, -{42,54,-67}, -{42,54,-66}, -{42,54,-65}, -{42,54,-64}, -{42,54,-63}, -{42,54,-62}, -{42,54,-61}, -{42,54,-60}, -{42,54,-59}, -{42,54,-58}, -{42,54,-57}, -{42,54,-56}, -{42,54,-55}, -{42,54,-54}, -{42,54,-53}, -{42,54,-52}, -{42,54,-51}, -{42,54,-50}, -{42,54,-49}, -{42,54,-48}, -{42,54,-47}, -{42,54,-46}, -{42,54,-45}, -{42,54,-44}, -{42,54,-43}, -{42,54,-42}, -{42,54,-41}, -{42,54,-40}, -{42,54,-39}, -{42,54,-38}, -{42,54,-37}, -{42,54,-36}, -{42,54,-35}, -{42,54,-34}, -{42,54,-33}, -{42,54,-32}, -{42,54,-31}, -{42,54,-30}, -{42,54,-29}, -{42,54,-28}, -{42,54,-27}, -{42,54,-26}, -{42,54,-25}, -{42,54,-24}, -{42,54,-23}, -{42,54,-22}, -{42,54,-21}, -{42,54,-20}, -{42,54,-19}, -{42,54,-18}, -{42,54,-17}, -{42,54,-16}, -{42,54,-15}, -{42,54,-14}, -{42,54,-13}, -{42,54,-12}, -{42,54,-11}, -{42,54,-10}, -{42,54,-9}, -{42,54,-8}, -{42,54,-7}, -{42,54,-6}, -{42,54,-5}, -{42,54,-4}, -{42,54,-3}, -{42,54,-2}, -{42,54,-1}, -{42,54,0}, -{42,54,1}, -{42,54,2}, -{42,54,3}, -{42,54,4}, -{42,54,5}, -{42,54,6}, -{42,54,7}, -{42,54,8}, -{42,54,9}, -{42,54,10}, -{42,54,11}, -{42,54,12}, -{42,54,13}, -{42,54,14}, -{42,54,15}, -{42,54,16}, -{42,54,17}, -{42,54,18}, -{42,54,19}, -{42,54,20}, -{42,54,21}, -{42,54,22}, -{42,54,23}, -{42,54,24}, -{42,54,25}, -{42,54,26}, -{42,54,27}, -{42,54,28}, -{42,54,29}, -{42,54,30}, -{42,54,31}, -{42,54,32}, -{42,54,33}, -{42,54,34}, -{42,54,35}, -{42,54,36}, -{42,54,37}, -{42,54,38}, -{42,54,39}, -{42,54,40}, -{42,54,41}, -{42,54,42}, -{42,54,43}, -{42,54,44}, -{42,54,45}, -{42,54,46}, -{42,54,47}, -{42,54,48}, -{42,54,49}, -{42,54,50}, -{42,54,51}, -{42,54,52}, -{42,54,53}, -{42,54,54}, -{42,55,-91}, -{42,55,-90}, -{42,55,-89}, -{42,55,-88}, -{42,55,-87}, -{42,55,-86}, -{42,55,-85}, -{42,55,-84}, -{42,55,-83}, -{42,55,-82}, -{42,55,-81}, -{42,55,-80}, -{42,55,-79}, -{42,55,-78}, -{42,55,-77}, -{42,55,-76}, -{42,55,-75}, -{42,55,-74}, -{42,55,-73}, -{42,55,-72}, -{42,55,-71}, -{42,55,-70}, -{42,55,-69}, -{42,55,-68}, -{42,55,-67}, -{42,55,-66}, -{42,55,-65}, -{42,55,-64}, -{42,55,-63}, -{42,55,-62}, -{42,55,-61}, -{42,55,-60}, -{42,55,-59}, -{42,55,-58}, -{42,55,-57}, -{42,55,-56}, -{42,55,-55}, -{42,55,-54}, -{42,55,-53}, -{42,55,-52}, -{42,55,-51}, -{42,55,-50}, -{42,55,-49}, -{42,55,-48}, -{42,55,-47}, -{42,55,-46}, -{42,55,-45}, -{42,55,-44}, -{42,55,-43}, -{42,55,-42}, -{42,55,-41}, -{42,55,-40}, -{42,55,-39}, -{42,55,-38}, -{42,55,-37}, -{42,55,-36}, -{42,55,-35}, -{42,55,-34}, -{42,55,-33}, -{42,55,-32}, -{42,55,-31}, -{42,55,-30}, -{42,55,-29}, -{42,55,-28}, -{42,55,-27}, -{42,55,-26}, -{42,55,-25}, -{42,55,-24}, -{42,55,-23}, -{42,55,-22}, -{42,55,-21}, -{42,55,-20}, -{42,55,-19}, -{42,55,-18}, -{42,55,-17}, -{42,55,-16}, -{42,55,-15}, -{42,55,-14}, -{42,55,-13}, -{42,55,-12}, -{42,55,-11}, -{42,55,-10}, -{42,55,-9}, -{42,55,-8}, -{42,55,-7}, -{42,55,-6}, -{42,55,-5}, -{42,55,-4}, -{42,55,-3}, -{42,55,-2}, -{42,55,-1}, -{42,55,0}, -{42,55,1}, -{42,55,2}, -{42,55,3}, -{42,55,4}, -{42,55,5}, -{42,55,6}, -{42,55,7}, -{42,55,8}, -{42,55,9}, -{42,55,10}, -{42,55,11}, -{42,55,12}, -{42,55,13}, -{42,55,14}, -{42,55,15}, -{42,55,16}, -{42,55,17}, -{42,55,18}, -{42,55,19}, -{42,55,20}, -{42,55,21}, -{42,55,22}, -{42,55,23}, -{42,55,24}, -{42,55,25}, -{42,55,26}, -{42,55,27}, -{42,55,28}, -{42,55,29}, -{42,55,30}, -{42,55,31}, -{42,55,32}, -{42,55,33}, -{42,55,34}, -{42,55,35}, -{42,55,36}, -{42,55,37}, -{42,55,38}, -{42,55,39}, -{42,55,40}, -{42,55,41}, -{42,55,42}, -{42,55,43}, -{42,55,44}, -{42,55,45}, -{42,55,46}, -{42,55,47}, -{42,55,48}, -{42,55,49}, -{42,55,50}, -{42,55,51}, -{42,55,52}, -{42,55,53}, -{42,55,54}, -{42,56,-91}, -{42,56,-90}, -{42,56,-89}, -{42,56,-88}, -{42,56,-87}, -{42,56,-86}, -{42,56,-85}, -{42,56,-84}, -{42,56,-83}, -{42,56,-82}, -{42,56,-81}, -{42,56,-80}, -{42,56,-79}, -{42,56,-78}, -{42,56,-77}, -{42,56,-76}, -{42,56,-75}, -{42,56,-74}, -{42,56,-73}, -{42,56,-72}, -{42,56,-71}, -{42,56,-70}, -{42,56,-69}, -{42,56,-68}, -{42,56,-67}, -{42,56,-66}, -{42,56,-65}, -{42,56,-64}, -{42,56,-63}, -{42,56,-62}, -{42,56,-61}, -{42,56,-60}, -{42,56,-59}, -{42,56,-58}, -{42,56,-57}, -{42,56,-56}, -{42,56,-55}, -{42,56,-54}, -{42,56,-53}, -{42,56,-52}, -{42,56,-51}, -{42,56,-50}, -{42,56,-49}, -{42,56,-48}, -{42,56,-47}, -{42,56,-46}, -{42,56,-45}, -{42,56,-44}, -{42,56,-43}, -{42,56,-42}, -{42,56,-41}, -{42,56,-40}, -{42,56,-39}, -{42,56,-38}, -{42,56,-37}, -{42,56,-36}, -{42,56,-35}, -{42,56,-34}, -{42,56,-33}, -{42,56,-32}, -{42,56,-31}, -{42,56,-30}, -{42,56,-29}, -{42,56,-28}, -{42,56,-27}, -{42,56,-26}, -{42,56,-25}, -{42,56,-24}, -{42,56,-23}, -{42,56,-22}, -{42,56,-21}, -{42,56,-20}, -{42,56,-19}, -{42,56,-18}, -{42,56,-17}, -{42,56,-16}, -{42,56,-15}, -{42,56,-14}, -{42,56,-13}, -{42,56,-12}, -{42,56,-11}, -{42,56,-10}, -{42,56,-9}, -{42,56,-8}, -{42,56,-7}, -{42,56,-6}, -{42,56,-5}, -{42,56,-4}, -{42,56,-3}, -{42,56,-2}, -{42,56,-1}, -{42,56,0}, -{42,56,1}, -{42,56,2}, -{42,56,3}, -{42,56,4}, -{42,56,5}, -{42,56,6}, -{42,56,7}, -{42,56,8}, -{42,56,9}, -{42,56,10}, -{42,56,11}, -{42,56,12}, -{42,56,13}, -{42,56,14}, -{42,56,15}, -{42,56,16}, -{42,56,17}, -{42,56,18}, -{42,56,19}, -{42,56,20}, -{42,56,21}, -{42,56,22}, -{42,56,23}, -{42,56,24}, -{42,56,25}, -{42,56,26}, -{42,56,27}, -{42,56,28}, -{42,56,29}, -{42,56,30}, -{42,56,31}, -{42,56,32}, -{42,56,33}, -{42,56,34}, -{42,56,35}, -{42,56,36}, -{42,56,37}, -{42,56,38}, -{42,56,39}, -{42,56,40}, -{42,56,41}, -{42,56,42}, -{42,56,43}, -{42,56,44}, -{42,56,45}, -{42,56,46}, -{42,56,47}, -{42,56,48}, -{42,56,49}, -{42,56,50}, -{42,56,51}, -{42,56,52}, -{42,56,53}, -{42,56,54}, -{42,57,-91}, -{42,57,-90}, -{42,57,-89}, -{42,57,-88}, -{42,57,-87}, -{42,57,-86}, -{42,57,-85}, -{42,57,-84}, -{42,57,-83}, -{42,57,-82}, -{42,57,-81}, -{42,57,-80}, -{42,57,-79}, -{42,57,-78}, -{42,57,-77}, -{42,57,-76}, -{42,57,-75}, -{42,57,-74}, -{42,57,-73}, -{42,57,-72}, -{42,57,-71}, -{42,57,-70}, -{42,57,-69}, -{42,57,-68}, -{42,57,-67}, -{42,57,-66}, -{42,57,-65}, -{42,57,-64}, -{42,57,-63}, -{42,57,-62}, -{42,57,-61}, -{42,57,-60}, -{42,57,-59}, -{42,57,-58}, -{42,57,-57}, -{42,57,-56}, -{42,57,-55}, -{42,57,-54}, -{42,57,-53}, -{42,57,-52}, -{42,57,-51}, -{42,57,-50}, -{42,57,-49}, -{42,57,-48}, -{42,57,-47}, -{42,57,-46}, -{42,57,-45}, -{42,57,-44}, -{42,57,-43}, -{42,57,-42}, -{42,57,-41}, -{42,57,-40}, -{42,57,-39}, -{42,57,-38}, -{42,57,-37}, -{42,57,-36}, -{42,57,-35}, -{42,57,-34}, -{42,57,-33}, -{42,57,-32}, -{42,57,-31}, -{42,57,-30}, -{42,57,-29}, -{42,57,-28}, -{42,57,-27}, -{42,57,-26}, -{42,57,-25}, -{42,57,-24}, -{42,57,-23}, -{42,57,-22}, -{42,57,-21}, -{42,57,-20}, -{42,57,-19}, -{42,57,-18}, -{42,57,-17}, -{42,57,-16}, -{42,57,-15}, -{42,57,-14}, -{42,57,-13}, -{42,57,-12}, -{42,57,-11}, -{42,57,-10}, -{42,57,-9}, -{42,57,-8}, -{42,57,-7}, -{42,57,-6}, -{42,57,-5}, -{42,57,-4}, -{42,57,-3}, -{42,57,-2}, -{42,57,-1}, -{42,57,0}, -{42,57,1}, -{42,57,2}, -{42,57,3}, -{42,57,4}, -{42,57,5}, -{42,57,6}, -{42,57,7}, -{42,57,8}, -{42,57,9}, -{42,57,10}, -{42,57,11}, -{42,57,12}, -{42,57,13}, -{42,57,14}, -{42,57,15}, -{42,57,16}, -{42,57,17}, -{42,57,18}, -{42,57,19}, -{42,57,20}, -{42,57,21}, -{42,57,22}, -{42,57,23}, -{42,57,24}, -{42,57,25}, -{42,57,26}, -{42,57,27}, -{42,57,28}, -{42,57,29}, -{42,57,30}, -{42,57,31}, -{42,57,32}, -{42,57,33}, -{42,57,34}, -{42,57,35}, -{42,57,36}, -{42,57,37}, -{42,57,38}, -{42,57,39}, -{42,57,40}, -{42,57,41}, -{42,57,42}, -{42,57,43}, -{42,57,44}, -{42,57,45}, -{42,57,46}, -{42,57,47}, -{42,57,48}, -{42,57,49}, -{42,57,50}, -{42,57,51}, -{42,57,52}, -{42,57,53}, -{42,57,54}, -{42,57,55}, -{42,58,-91}, -{42,58,-90}, -{42,58,-89}, -{42,58,-88}, -{42,58,-87}, -{42,58,-86}, -{42,58,-85}, -{42,58,-84}, -{42,58,-83}, -{42,58,-82}, -{42,58,-81}, -{42,58,-80}, -{42,58,-79}, -{42,58,-78}, -{42,58,-77}, -{42,58,-76}, -{42,58,-75}, -{42,58,-74}, -{42,58,-73}, -{42,58,-72}, -{42,58,-71}, -{42,58,-70}, -{42,58,-69}, -{42,58,-68}, -{42,58,-67}, -{42,58,-66}, -{42,58,-65}, -{42,58,-64}, -{42,58,-63}, -{42,58,-62}, -{42,58,-61}, -{42,58,-60}, -{42,58,-59}, -{42,58,-58}, -{42,58,-57}, -{42,58,-56}, -{42,58,-55}, -{42,58,-54}, -{42,58,-53}, -{42,58,-52}, -{42,58,-51}, -{42,58,-50}, -{42,58,-49}, -{42,58,-48}, -{42,58,-47}, -{42,58,-46}, -{42,58,-45}, -{42,58,-44}, -{42,58,-43}, -{42,58,-42}, -{42,58,-41}, -{42,58,-40}, -{42,58,-39}, -{42,58,-38}, -{42,58,-37}, -{42,58,-36}, -{42,58,-35}, -{42,58,-34}, -{42,58,-33}, -{42,58,-32}, -{42,58,-31}, -{42,58,-30}, -{42,58,-29}, -{42,58,-28}, -{42,58,-27}, -{42,58,-26}, -{42,58,-25}, -{42,58,-24}, -{42,58,-23}, -{42,58,-22}, -{42,58,-21}, -{42,58,-20}, -{42,58,-19}, -{42,58,-18}, -{42,58,-17}, -{42,58,-16}, -{42,58,-15}, -{42,58,-14}, -{42,58,-13}, -{42,58,-12}, -{42,58,-11}, -{42,58,-10}, -{42,58,-9}, -{42,58,-8}, -{42,58,-7}, -{42,58,-6}, -{42,58,-5}, -{42,58,-4}, -{42,58,-3}, -{42,58,-2}, -{42,58,-1}, -{42,58,0}, -{42,58,1}, -{42,58,2}, -{42,58,3}, -{42,58,4}, -{42,58,5}, -{42,58,6}, -{42,58,7}, -{42,58,8}, -{42,58,9}, -{42,58,10}, -{42,58,11}, -{42,58,12}, -{42,58,13}, -{42,58,14}, -{42,58,15}, -{42,58,16}, -{42,58,17}, -{42,58,18}, -{42,58,19}, -{42,58,20}, -{42,58,21}, -{42,58,22}, -{42,58,23}, -{42,58,24}, -{42,58,25}, -{42,58,26}, -{42,58,27}, -{42,58,28}, -{42,58,29}, -{42,58,30}, -{42,58,31}, -{42,58,32}, -{42,58,33}, -{42,58,34}, -{42,58,35}, -{42,58,36}, -{42,58,37}, -{42,58,38}, -{42,58,39}, -{42,58,40}, -{42,58,41}, -{42,58,42}, -{42,58,43}, -{42,58,44}, -{42,58,45}, -{42,58,46}, -{42,58,47}, -{42,58,48}, -{42,58,49}, -{42,58,50}, -{42,58,51}, -{42,58,52}, -{42,58,53}, -{42,58,54}, -{42,58,55}, -{42,59,-91}, -{42,59,-90}, -{42,59,-89}, -{42,59,-88}, -{42,59,-87}, -{42,59,-86}, -{42,59,-85}, -{42,59,-84}, -{42,59,-83}, -{42,59,-82}, -{42,59,-81}, -{42,59,-80}, -{42,59,-79}, -{42,59,-78}, -{42,59,-77}, -{42,59,-76}, -{42,59,-75}, -{42,59,-74}, -{42,59,-73}, -{42,59,-72}, -{42,59,-71}, -{42,59,-70}, -{42,59,-69}, -{42,59,-68}, -{42,59,-67}, -{42,59,-66}, -{42,59,-65}, -{42,59,-64}, -{42,59,-63}, -{42,59,-62}, -{42,59,-61}, -{42,59,-60}, -{42,59,-59}, -{42,59,-58}, -{42,59,-57}, -{42,59,-56}, -{42,59,-55}, -{42,59,-54}, -{42,59,-53}, -{42,59,-52}, -{42,59,-51}, -{42,59,-50}, -{42,59,-49}, -{42,59,-48}, -{42,59,-47}, -{42,59,-46}, -{42,59,-45}, -{42,59,-44}, -{42,59,-43}, -{42,59,-42}, -{42,59,-41}, -{42,59,-40}, -{42,59,-39}, -{42,59,-38}, -{42,59,-37}, -{42,59,-36}, -{42,59,-35}, -{42,59,-34}, -{42,59,-33}, -{42,59,-32}, -{42,59,-31}, -{42,59,-30}, -{42,59,-29}, -{42,59,-28}, -{42,59,-27}, -{42,59,-26}, -{42,59,-25}, -{42,59,-24}, -{42,59,-23}, -{42,59,-22}, -{42,59,-21}, -{42,59,-20}, -{42,59,-19}, -{42,59,-18}, -{42,59,-17}, -{42,59,-16}, -{42,59,-15}, -{42,59,-14}, -{42,59,-13}, -{42,59,-12}, -{42,59,-11}, -{42,59,-10}, -{42,59,-9}, -{42,59,-8}, -{42,59,-7}, -{42,59,-6}, -{42,59,-5}, -{42,59,-4}, -{42,59,-3}, -{42,59,-2}, -{42,59,-1}, -{42,59,0}, -{42,59,1}, -{42,59,2}, -{42,59,3}, -{42,59,4}, -{42,59,5}, -{42,59,6}, -{42,59,7}, -{42,59,8}, -{42,59,9}, -{42,59,10}, -{42,59,11}, -{42,59,12}, -{42,59,13}, -{42,59,14}, -{42,59,15}, -{42,59,16}, -{42,59,17}, -{42,59,18}, -{42,59,19}, -{42,59,20}, -{42,59,21}, -{42,59,22}, -{42,59,23}, -{42,59,24}, -{42,59,25}, -{42,59,26}, -{42,59,27}, -{42,59,28}, -{42,59,29}, -{42,59,30}, -{42,59,31}, -{42,59,32}, -{42,59,33}, -{42,59,34}, -{42,59,35}, -{42,59,36}, -{42,59,37}, -{42,59,38}, -{42,59,39}, -{42,59,40}, -{42,59,41}, -{42,59,42}, -{42,59,43}, -{42,59,44}, -{42,59,45}, -{42,59,46}, -{42,59,47}, -{42,59,48}, -{42,59,49}, -{42,59,50}, -{42,59,51}, -{42,59,52}, -{42,59,53}, -{42,59,54}, -{42,59,55}, -{42,60,-91}, -{42,60,-90}, -{42,60,-89}, -{42,60,-88}, -{42,60,-87}, -{42,60,-86}, -{42,60,-85}, -{42,60,-84}, -{42,60,-83}, -{42,60,-82}, -{42,60,-81}, -{42,60,-80}, -{42,60,-79}, -{42,60,-78}, -{42,60,-77}, -{42,60,-76}, -{42,60,-75}, -{42,60,-74}, -{42,60,-73}, -{42,60,-72}, -{42,60,-71}, -{42,60,-70}, -{42,60,-69}, -{42,60,-68}, -{42,60,-67}, -{42,60,-66}, -{42,60,-65}, -{42,60,-64}, -{42,60,-63}, -{42,60,-62}, -{42,60,-61}, -{42,60,-60}, -{42,60,-59}, -{42,60,-58}, -{42,60,-57}, -{42,60,-56}, -{42,60,-55}, -{42,60,-54}, -{42,60,-53}, -{42,60,-52}, -{42,60,-51}, -{42,60,-50}, -{42,60,-49}, -{42,60,-48}, -{42,60,-47}, -{42,60,-46}, -{42,60,-45}, -{42,60,-44}, -{42,60,-43}, -{42,60,-42}, -{42,60,-41}, -{42,60,-40}, -{42,60,-39}, -{42,60,-38}, -{42,60,-37}, -{42,60,-36}, -{42,60,-35}, -{42,60,-34}, -{42,60,-33}, -{42,60,-32}, -{42,60,-31}, -{42,60,-30}, -{42,60,-29}, -{42,60,-28}, -{42,60,-27}, -{42,60,-26}, -{42,60,-25}, -{42,60,-24}, -{42,60,-23}, -{42,60,-22}, -{42,60,-21}, -{42,60,-20}, -{42,60,-19}, -{42,60,-18}, -{42,60,-17}, -{42,60,-16}, -{42,60,-15}, -{42,60,-14}, -{42,60,-13}, -{42,60,-12}, -{42,60,-11}, -{42,60,-10}, -{42,60,-9}, -{42,60,-8}, -{42,60,-7}, -{42,60,-6}, -{42,60,-5}, -{42,60,-4}, -{42,60,-3}, -{42,60,-2}, -{42,60,-1}, -{42,60,0}, -{42,60,1}, -{42,60,2}, -{42,60,3}, -{42,60,4}, -{42,60,5}, -{42,60,6}, -{42,60,7}, -{42,60,8}, -{42,60,9}, -{42,60,10}, -{42,60,11}, -{42,60,12}, -{42,60,13}, -{42,60,14}, -{42,60,15}, -{42,60,16}, -{42,60,17}, -{42,60,18}, -{42,60,19}, -{42,60,20}, -{42,60,21}, -{42,60,22}, -{42,60,23}, -{42,60,24}, -{42,60,25}, -{42,60,26}, -{42,60,27}, -{42,60,28}, -{42,60,29}, -{42,60,30}, -{42,60,31}, -{42,60,32}, -{42,60,33}, -{42,60,34}, -{42,60,35}, -{42,60,36}, -{42,60,37}, -{42,60,38}, -{42,60,39}, -{42,60,40}, -{42,60,41}, -{42,60,42}, -{42,60,43}, -{42,60,44}, -{42,60,45}, -{42,60,46}, -{42,60,47}, -{42,60,48}, -{42,60,49}, -{42,60,50}, -{42,60,51}, -{42,60,52}, -{42,60,53}, -{42,60,54}, -{42,60,55}, -{42,61,-91}, -{42,61,-90}, -{42,61,-89}, -{42,61,-88}, -{42,61,-87}, -{42,61,-86}, -{42,61,-85}, -{42,61,-84}, -{42,61,-83}, -{42,61,-82}, -{42,61,-81}, -{42,61,-80}, -{42,61,-79}, -{42,61,-78}, -{42,61,-77}, -{42,61,-76}, -{42,61,-75}, -{42,61,-74}, -{42,61,-73}, -{42,61,-72}, -{42,61,-71}, -{42,61,-70}, -{42,61,-69}, -{42,61,-68}, -{42,61,-67}, -{42,61,-66}, -{42,61,-65}, -{42,61,-64}, -{42,61,-63}, -{42,61,-62}, -{42,61,-61}, -{42,61,-60}, -{42,61,-59}, -{42,61,-58}, -{42,61,-57}, -{42,61,-56}, -{42,61,-55}, -{42,61,-54}, -{42,61,-53}, -{42,61,-52}, -{42,61,-51}, -{42,61,-50}, -{42,61,-49}, -{42,61,-48}, -{42,61,-47}, -{42,61,-46}, -{42,61,-45}, -{42,61,-44}, -{42,61,-43}, -{42,61,-42}, -{42,61,-41}, -{42,61,-40}, -{42,61,-39}, -{42,61,-38}, -{42,61,-37}, -{42,61,-36}, -{42,61,-35}, -{42,61,-34}, -{42,61,-33}, -{42,61,-32}, -{42,61,-31}, -{42,61,-30}, -{42,61,-29}, -{42,61,-28}, -{42,61,-27}, -{42,61,-26}, -{42,61,-25}, -{42,61,-24}, -{42,61,-23}, -{42,61,-22}, -{42,61,-21}, -{42,61,-20}, -{42,61,-19}, -{42,61,-18}, -{42,61,-17}, -{42,61,-16}, -{42,61,-15}, -{42,61,-14}, -{42,61,-13}, -{42,61,-12}, -{42,61,-11}, -{42,61,-10}, -{42,61,-9}, -{42,61,-8}, -{42,61,-7}, -{42,61,-6}, -{42,61,-5}, -{42,61,-4}, -{42,61,-3}, -{42,61,-2}, -{42,61,-1}, -{42,61,0}, -{42,61,1}, -{42,61,2}, -{42,61,3}, -{42,61,4}, -{42,61,5}, -{42,61,6}, -{42,61,7}, -{42,61,8}, -{42,61,9}, -{42,61,10}, -{42,61,11}, -{42,61,12}, -{42,61,13}, -{42,61,14}, -{42,61,15}, -{42,61,16}, -{42,61,17}, -{42,61,18}, -{42,61,19}, -{42,61,20}, -{42,61,21}, -{42,61,22}, -{42,61,23}, -{42,61,24}, -{42,61,25}, -{42,61,26}, -{42,61,27}, -{42,61,28}, -{42,61,29}, -{42,61,30}, -{42,61,31}, -{42,61,32}, -{42,61,33}, -{42,61,34}, -{42,61,35}, -{42,61,36}, -{42,61,37}, -{42,61,38}, -{42,61,39}, -{42,61,40}, -{42,61,41}, -{42,61,42}, -{42,61,43}, -{42,61,44}, -{42,61,45}, -{42,61,46}, -{42,61,47}, -{42,61,48}, -{42,61,49}, -{42,61,50}, -{42,61,51}, -{42,61,52}, -{42,61,53}, -{42,61,54}, -{42,61,55}, -{42,62,-91}, -{42,62,-90}, -{42,62,-89}, -{42,62,-88}, -{42,62,-87}, -{42,62,-86}, -{42,62,-85}, -{42,62,-84}, -{42,62,-83}, -{42,62,-82}, -{42,62,-81}, -{42,62,-80}, -{42,62,-79}, -{42,62,-78}, -{42,62,-77}, -{42,62,-76}, -{42,62,-75}, -{42,62,-74}, -{42,62,-73}, -{42,62,-72}, -{42,62,-71}, -{42,62,-70}, -{42,62,-69}, -{42,62,-68}, -{42,62,-67}, -{42,62,-66}, -{42,62,-65}, -{42,62,-64}, -{42,62,-63}, -{42,62,-62}, -{42,62,-61}, -{42,62,-60}, -{42,62,-59}, -{42,62,-58}, -{42,62,-57}, -{42,62,-56}, -{42,62,-55}, -{42,62,-54}, -{42,62,-53}, -{42,62,-52}, -{42,62,-51}, -{42,62,-50}, -{42,62,-49}, -{42,62,-48}, -{42,62,-47}, -{42,62,-46}, -{42,62,-45}, -{42,62,-44}, -{42,62,-43}, -{42,62,-42}, -{42,62,-41}, -{42,62,-40}, -{42,62,-39}, -{42,62,-38}, -{42,62,-37}, -{42,62,-36}, -{42,62,-35}, -{42,62,-34}, -{42,62,-33}, -{42,62,-32}, -{42,62,-31}, -{42,62,-30}, -{42,62,-29}, -{42,62,-28}, -{42,62,-27}, -{42,62,-26}, -{42,62,-25}, -{42,62,-24}, -{42,62,-23}, -{42,62,-22}, -{42,62,-21}, -{42,62,-20}, -{42,62,-19}, -{42,62,-18}, -{42,62,-17}, -{42,62,-16}, -{42,62,-15}, -{42,62,-14}, -{42,62,-13}, -{42,62,-12}, -{42,62,-11}, -{42,62,-10}, -{42,62,-9}, -{42,62,-8}, -{42,62,-7}, -{42,62,-6}, -{42,62,-5}, -{42,62,-4}, -{42,62,-3}, -{42,62,-2}, -{42,62,-1}, -{42,62,0}, -{42,62,1}, -{42,62,2}, -{42,62,3}, -{42,62,4}, -{42,62,5}, -{42,62,6}, -{42,62,7}, -{42,62,8}, -{42,62,9}, -{42,62,10}, -{42,62,11}, -{42,62,12}, -{42,62,13}, -{42,62,14}, -{42,62,15}, -{42,62,16}, -{42,62,17}, -{42,62,18}, -{42,62,19}, -{42,62,20}, -{42,62,21}, -{42,62,22}, -{42,62,23}, -{42,62,24}, -{42,62,25}, -{42,62,26}, -{42,62,27}, -{42,62,28}, -{42,62,29}, -{42,62,30}, -{42,62,31}, -{42,62,32}, -{42,62,33}, -{42,62,34}, -{42,62,35}, -{42,62,36}, -{42,62,37}, -{42,62,38}, -{42,62,39}, -{42,62,40}, -{42,62,41}, -{42,62,42}, -{42,62,43}, -{42,62,44}, -{42,62,45}, -{42,62,46}, -{42,62,47}, -{42,62,48}, -{42,62,49}, -{42,62,50}, -{42,62,51}, -{42,62,52}, -{42,62,53}, -{42,62,54}, -{42,62,55}, -{42,63,-91}, -{42,63,-90}, -{42,63,-89}, -{42,63,-88}, -{42,63,-87}, -{42,63,-86}, -{42,63,-85}, -{42,63,-84}, -{42,63,-83}, -{42,63,-82}, -{42,63,-81}, -{42,63,-80}, -{42,63,-79}, -{42,63,-78}, -{42,63,-77}, -{42,63,-76}, -{42,63,-75}, -{42,63,-74}, -{42,63,-73}, -{42,63,-72}, -{42,63,-71}, -{42,63,-70}, -{42,63,-69}, -{42,63,-68}, -{42,63,-67}, -{42,63,-66}, -{42,63,-65}, -{42,63,-64}, -{42,63,-63}, -{42,63,-62}, -{42,63,-61}, -{42,63,-60}, -{42,63,-59}, -{42,63,-58}, -{42,63,-57}, -{42,63,-56}, -{42,63,-55}, -{42,63,-54}, -{42,63,-53}, -{42,63,-52}, -{42,63,-51}, -{42,63,-50}, -{42,63,-49}, -{42,63,-48}, -{42,63,-47}, -{42,63,-46}, -{42,63,-45}, -{42,63,-44}, -{42,63,-43}, -{42,63,-42}, -{42,63,-41}, -{42,63,-40}, -{42,63,-39}, -{42,63,-38}, -{42,63,-37}, -{42,63,-36}, -{42,63,-35}, -{42,63,-34}, -{42,63,-33}, -{42,63,-32}, -{42,63,-31}, -{42,63,-30}, -{42,63,-29}, -{42,63,-28}, -{42,63,-27}, -{42,63,-26}, -{42,63,-25}, -{42,63,-24}, -{42,63,-23}, -{42,63,-22}, -{42,63,-21}, -{42,63,-20}, -{42,63,-19}, -{42,63,-18}, -{42,63,-17}, -{42,63,-16}, -{42,63,-15}, -{42,63,-14}, -{42,63,-13}, -{42,63,-12}, -{42,63,-11}, -{42,63,-10}, -{42,63,-9}, -{42,63,-8}, -{42,63,-7}, -{42,63,-6}, -{42,63,-5}, -{42,63,-4}, -{42,63,-3}, -{42,63,-2}, -{42,63,-1}, -{42,63,0}, -{42,63,1}, -{42,63,2}, -{42,63,3}, -{42,63,4}, -{42,63,5}, -{42,63,6}, -{42,63,7}, -{42,63,8}, -{42,63,9}, -{42,63,10}, -{42,63,11}, -{42,63,12}, -{42,63,13}, -{42,63,14}, -{42,63,15}, -{42,63,16}, -{42,63,17}, -{42,63,18}, -{42,63,19}, -{42,63,20}, -{42,63,21}, -{42,63,22}, -{42,63,23}, -{42,63,24}, -{42,63,25}, -{42,63,26}, -{42,63,27}, -{42,63,28}, -{42,63,29}, -{42,63,30}, -{42,63,31}, -{42,63,32}, -{42,63,33}, -{42,63,34}, -{42,63,35}, -{42,63,36}, -{42,63,37}, -{42,63,38}, -{42,63,39}, -{42,63,40}, -{42,63,41}, -{42,63,42}, -{42,63,43}, -{42,63,44}, -{42,63,45}, -{42,63,46}, -{42,63,47}, -{42,63,48}, -{42,63,49}, -{42,63,50}, -{42,63,51}, -{42,63,52}, -{42,63,53}, -{42,63,54}, -{42,63,55}, -{42,64,-91}, -{42,64,-90}, -{42,64,-89}, -{42,64,-88}, -{42,64,-87}, -{42,64,-86}, -{42,64,-85}, -{42,64,-84}, -{42,64,-83}, -{42,64,-82}, -{42,64,-81}, -{42,64,-80}, -{42,64,-79}, -{42,64,-78}, -{42,64,-77}, -{42,64,-76}, -{42,64,-75}, -{42,64,-74}, -{42,64,-73}, -{42,64,-72}, -{42,64,-71}, -{42,64,-70}, -{42,64,-69}, -{42,64,-68}, -{42,64,-67}, -{42,64,-66}, -{42,64,-65}, -{42,64,-64}, -{42,64,-63}, -{42,64,-62}, -{42,64,-61}, -{42,64,-60}, -{42,64,-59}, -{42,64,-58}, -{42,64,-57}, -{42,64,-56}, -{42,64,-55}, -{42,64,-54}, -{42,64,-53}, -{42,64,-52}, -{42,64,-51}, -{42,64,-50}, -{42,64,-49}, -{42,64,-48}, -{42,64,-47}, -{42,64,-46}, -{42,64,-45}, -{42,64,-44}, -{42,64,-43}, -{42,64,-42}, -{42,64,-41}, -{42,64,-40}, -{42,64,-39}, -{42,64,-38}, -{42,64,-37}, -{42,64,-36}, -{42,64,-35}, -{42,64,-34}, -{42,64,-33}, -{42,64,-32}, -{42,64,-31}, -{42,64,-30}, -{42,64,-29}, -{42,64,-28}, -{42,64,-27}, -{42,64,-26}, -{42,64,-25}, -{42,64,-24}, -{42,64,-23}, -{42,64,-22}, -{42,64,-21}, -{42,64,-20}, -{42,64,-19}, -{42,64,-18}, -{42,64,-17}, -{42,64,-16}, -{42,64,-15}, -{42,64,-14}, -{42,64,-13}, -{42,64,-12}, -{42,64,-11}, -{42,64,-10}, -{42,64,-9}, -{42,64,-8}, -{42,64,-7}, -{42,64,-6}, -{42,64,-5}, -{42,64,-4}, -{42,64,-3}, -{42,64,-2}, -{42,64,-1}, -{42,64,0}, -{42,64,1}, -{42,64,2}, -{42,64,3}, -{42,64,4}, -{42,64,5}, -{42,64,6}, -{42,64,7}, -{42,64,8}, -{42,64,9}, -{42,64,10}, -{42,64,11}, -{42,64,12}, -{42,64,13}, -{42,64,14}, -{42,64,15}, -{42,64,16}, -{42,64,17}, -{42,64,18}, -{42,64,19}, -{42,64,20}, -{42,64,21}, -{42,64,22}, -{42,64,23}, -{42,64,24}, -{42,64,25}, -{42,64,26}, -{42,64,27}, -{42,64,28}, -{42,64,29}, -{42,64,30}, -{42,64,31}, -{42,64,32}, -{42,64,33}, -{42,64,34}, -{42,64,35}, -{42,64,36}, -{42,64,37}, -{42,64,38}, -{42,64,39}, -{42,64,40}, -{42,64,41}, -{42,64,42}, -{42,64,43}, -{42,64,44}, -{42,64,45}, -{42,64,46}, -{42,64,47}, -{42,64,48}, -{42,64,49}, -{42,64,50}, -{42,64,51}, -{42,64,52}, -{42,64,53}, -{42,64,54}, -{42,64,55}, -{42,64,56}, -{42,65,-91}, -{42,65,-90}, -{42,65,-89}, -{42,65,-88}, -{42,65,-87}, -{42,65,-86}, -{42,65,-85}, -{42,65,-84}, -{42,65,-83}, -{42,65,-82}, -{42,65,-81}, -{42,65,-80}, -{42,65,-79}, -{42,65,-78}, -{42,65,-77}, -{42,65,-76}, -{42,65,-75}, -{42,65,-74}, -{42,65,-73}, -{42,65,-72}, -{42,65,-71}, -{42,65,-70}, -{42,65,-69}, -{42,65,-68}, -{42,65,-67}, -{42,65,-66}, -{42,65,-65}, -{42,65,-64}, -{42,65,-63}, -{42,65,-62}, -{42,65,-61}, -{42,65,-60}, -{42,65,-59}, -{42,65,-58}, -{42,65,-57}, -{42,65,-56}, -{42,65,-55}, -{42,65,-54}, -{42,65,-53}, -{42,65,-52}, -{42,65,-51}, -{42,65,-50}, -{42,65,-49}, -{42,65,-48}, -{42,65,-47}, -{42,65,-46}, -{42,65,-45}, -{42,65,-44}, -{42,65,-43}, -{42,65,-42}, -{42,65,-41}, -{42,65,-40}, -{42,65,-39}, -{42,65,-38}, -{42,65,-37}, -{42,65,-36}, -{42,65,-35}, -{42,65,-34}, -{42,65,-33}, -{42,65,-32}, -{42,65,-31}, -{42,65,-30}, -{42,65,-29}, -{42,65,-28}, -{42,65,-27}, -{42,65,-26}, -{42,65,-25}, -{42,65,-24}, -{42,65,-23}, -{42,65,-22}, -{42,65,-21}, -{42,65,-20}, -{42,65,-19}, -{42,65,-18}, -{42,65,-17}, -{42,65,-16}, -{42,65,-15}, -{42,65,-14}, -{42,65,-13}, -{42,65,-12}, -{42,65,-11}, -{42,65,-10}, -{42,65,-9}, -{42,65,-8}, -{42,65,-7}, -{42,65,-6}, -{42,65,-5}, -{42,65,-4}, -{42,65,-3}, -{42,65,-2}, -{42,65,-1}, -{42,65,0}, -{42,65,1}, -{42,65,2}, -{42,65,3}, -{42,65,4}, -{42,65,5}, -{42,65,6}, -{42,65,7}, -{42,65,8}, -{42,65,9}, -{42,65,10}, -{42,65,11}, -{42,65,12}, -{42,65,13}, -{42,65,14}, -{42,65,15}, -{42,65,16}, -{42,65,17}, -{42,65,18}, -{42,65,19}, -{42,65,20}, -{42,65,21}, -{42,65,22}, -{42,65,23}, -{42,65,24}, -{42,65,25}, -{42,65,26}, -{42,65,27}, -{42,65,28}, -{42,65,29}, -{42,65,30}, -{42,65,31}, -{42,65,32}, -{42,65,33}, -{42,65,34}, -{42,65,35}, -{42,65,36}, -{42,65,37}, -{42,65,38}, -{42,65,39}, -{42,65,40}, -{42,65,41}, -{42,65,42}, -{42,65,43}, -{42,65,44}, -{42,65,45}, -{42,65,46}, -{42,65,47}, -{42,65,48}, -{42,65,49}, -{42,65,50}, -{42,65,51}, -{42,65,52}, -{42,65,53}, -{42,65,54}, -{42,65,55}, -{42,65,56}, -{42,66,-91}, -{42,66,-90}, -{42,66,-89}, -{42,66,-88}, -{42,66,-87}, -{42,66,-86}, -{42,66,-85}, -{42,66,-84}, -{42,66,-83}, -{42,66,-82}, -{42,66,-81}, -{42,66,-80}, -{42,66,-79}, -{42,66,-78}, -{42,66,-77}, -{42,66,-76}, -{42,66,-75}, -{42,66,-74}, -{42,66,-73}, -{42,66,-72}, -{42,66,-71}, -{42,66,-70}, -{42,66,-69}, -{42,66,-68}, -{42,66,-67}, -{42,66,-66}, -{42,66,-65}, -{42,66,-64}, -{42,66,-63}, -{42,66,-62}, -{42,66,-61}, -{42,66,-60}, -{42,66,-59}, -{42,66,-58}, -{42,66,-57}, -{42,66,-56}, -{42,66,-55}, -{42,66,-54}, -{42,66,-53}, -{42,66,-52}, -{42,66,-51}, -{42,66,-50}, -{42,66,-49}, -{42,66,-48}, -{42,66,-47}, -{42,66,-46}, -{42,66,-45}, -{42,66,-44}, -{42,66,-43}, -{42,66,-42}, -{42,66,-41}, -{42,66,-40}, -{42,66,-39}, -{42,66,-38}, -{42,66,-37}, -{42,66,-36}, -{42,66,-35}, -{42,66,-34}, -{42,66,-33}, -{42,66,-32}, -{42,66,-31}, -{42,66,-30}, -{42,66,-29}, -{42,66,-28}, -{42,66,-27}, -{42,66,-26}, -{42,66,-25}, -{42,66,-24}, -{42,66,-23}, -{42,66,-22}, -{42,66,-21}, -{42,66,-20}, -{42,66,-19}, -{42,66,-18}, -{42,66,-17}, -{42,66,-16}, -{42,66,-15}, -{42,66,-14}, -{42,66,-13}, -{42,66,-12}, -{42,66,-11}, -{42,66,-10}, -{42,66,-9}, -{42,66,-8}, -{42,66,-7}, -{42,66,-6}, -{42,66,-5}, -{42,66,-4}, -{42,66,-3}, -{42,66,-2}, -{42,66,-1}, -{42,66,0}, -{42,66,1}, -{42,66,2}, -{42,66,3}, -{42,66,4}, -{42,66,5}, -{42,66,6}, -{42,66,7}, -{42,66,8}, -{42,66,9}, -{42,66,10}, -{42,66,11}, -{42,66,12}, -{42,66,13}, -{42,66,14}, -{42,66,15}, -{42,66,16}, -{42,66,17}, -{42,66,18}, -{42,66,19}, -{42,66,20}, -{42,66,21}, -{42,66,22}, -{42,66,23}, -{42,66,24}, -{42,66,25}, -{42,66,26}, -{42,66,27}, -{42,66,28}, -{42,66,29}, -{42,66,30}, -{42,66,31}, -{42,66,32}, -{42,66,33}, -{42,66,34}, -{42,66,35}, -{42,66,36}, -{42,66,37}, -{42,66,38}, -{42,66,39}, -{42,66,40}, -{42,66,41}, -{42,66,42}, -{42,66,43}, -{42,66,44}, -{42,66,45}, -{42,66,46}, -{42,66,47}, -{42,66,48}, -{42,66,49}, -{42,66,50}, -{42,66,51}, -{42,66,52}, -{42,66,53}, -{42,66,54}, -{42,66,55}, -{42,66,56}, -{42,67,-91}, -{42,67,-90}, -{42,67,-89}, -{42,67,-88}, -{42,67,-87}, -{42,67,-86}, -{42,67,-85}, -{42,67,-84}, -{42,67,-83}, -{42,67,-82}, -{42,67,-81}, -{42,67,-80}, -{42,67,-79}, -{42,67,-78}, -{42,67,-77}, -{42,67,-76}, -{42,67,-75}, -{42,67,-74}, -{42,67,-73}, -{42,67,-72}, -{42,67,-71}, -{42,67,-70}, -{42,67,-69}, -{42,67,-68}, -{42,67,-67}, -{42,67,-66}, -{42,67,-65}, -{42,67,-64}, -{42,67,-63}, -{42,67,-62}, -{42,67,-61}, -{42,67,-60}, -{42,67,-59}, -{42,67,-58}, -{42,67,-57}, -{42,67,-56}, -{42,67,-55}, -{42,67,-54}, -{42,67,-53}, -{42,67,-52}, -{42,67,-51}, -{42,67,-50}, -{42,67,-49}, -{42,67,-48}, -{42,67,-47}, -{42,67,-46}, -{42,67,-45}, -{42,67,-44}, -{42,67,-43}, -{42,67,-42}, -{42,67,-41}, -{42,67,-40}, -{42,67,-39}, -{42,67,-38}, -{42,67,-37}, -{42,67,-36}, -{42,67,-35}, -{42,67,-34}, -{42,67,-33}, -{42,67,-32}, -{42,67,-31}, -{42,67,-30}, -{42,67,-29}, -{42,67,-28}, -{42,67,-27}, -{42,67,-26}, -{42,67,-25}, -{42,67,-24}, -{42,67,-23}, -{42,67,-22}, -{42,67,-21}, -{42,67,-20}, -{42,67,-19}, -{42,67,-18}, -{42,67,-17}, -{42,67,-16}, -{42,67,-15}, -{42,67,-14}, -{42,67,-13}, -{42,67,-12}, -{42,67,-11}, -{42,67,-10}, -{42,67,-9}, -{42,67,-8}, -{42,67,-7}, -{42,67,-6}, -{42,67,-5}, -{42,67,-4}, -{42,67,-3}, -{42,67,-2}, -{42,67,-1}, -{42,67,0}, -{42,67,1}, -{42,67,2}, -{42,67,3}, -{42,67,4}, -{42,67,5}, -{42,67,6}, -{42,67,7}, -{42,67,8}, -{42,67,9}, -{42,67,10}, -{42,67,11}, -{42,67,12}, -{42,67,13}, -{42,67,14}, -{42,67,15}, -{42,67,16}, -{42,67,17}, -{42,67,18}, -{42,67,19}, -{42,67,20}, -{42,67,21}, -{42,67,22}, -{42,67,23}, -{42,67,24}, -{42,67,25}, -{42,67,26}, -{42,67,27}, -{42,67,28}, -{42,67,29}, -{42,67,30}, -{42,67,31}, -{42,67,32}, -{42,67,33}, -{42,67,34}, -{42,67,35}, -{42,67,36}, -{42,67,37}, -{42,67,38}, -{42,67,39}, -{42,67,40}, -{42,67,41}, -{42,67,42}, -{42,67,43}, -{42,67,44}, -{42,67,45}, -{42,67,46}, -{42,67,47}, -{42,67,48}, -{42,67,49}, -{42,67,50}, -{42,67,51}, -{42,67,52}, -{42,67,53}, -{42,67,54}, -{42,67,55}, -{42,67,56}, -{42,68,-91}, -{42,68,-90}, -{42,68,-89}, -{42,68,-88}, -{42,68,-87}, -{42,68,-86}, -{42,68,-85}, -{42,68,-84}, -{42,68,-83}, -{42,68,-82}, -{42,68,-81}, -{42,68,-80}, -{42,68,-79}, -{42,68,-78}, -{42,68,-77}, -{42,68,-76}, -{42,68,-75}, -{42,68,-74}, -{42,68,-73}, -{42,68,-72}, -{42,68,-71}, -{42,68,-70}, -{42,68,-69}, -{42,68,-68}, -{42,68,-67}, -{42,68,-66}, -{42,68,-65}, -{42,68,-64}, -{42,68,-63}, -{42,68,-62}, -{42,68,-61}, -{42,68,-60}, -{42,68,-59}, -{42,68,-58}, -{42,68,-57}, -{42,68,-56}, -{42,68,-55}, -{42,68,-54}, -{42,68,-53}, -{42,68,-52}, -{42,68,-51}, -{42,68,-50}, -{42,68,-49}, -{42,68,-48}, -{42,68,-47}, -{42,68,-46}, -{42,68,-45}, -{42,68,-44}, -{42,68,-43}, -{42,68,-42}, -{42,68,-41}, -{42,68,-40}, -{42,68,-39}, -{42,68,-38}, -{42,68,-37}, -{42,68,-36}, -{42,68,-35}, -{42,68,-34}, -{42,68,-33}, -{42,68,-32}, -{42,68,-31}, -{42,68,-30}, -{42,68,-29}, -{42,68,-28}, -{42,68,-27}, -{42,68,-26}, -{42,68,-25}, -{42,68,-24}, -{42,68,-23}, -{42,68,-22}, -{42,68,-21}, -{42,68,-20}, -{42,68,-19}, -{42,68,-18}, -{42,68,-17}, -{42,68,-16}, -{42,68,-15}, -{42,68,-14}, -{42,68,-13}, -{42,68,-12}, -{42,68,-11}, -{42,68,-10}, -{42,68,-9}, -{42,68,-8}, -{42,68,-7}, -{42,68,-6}, -{42,68,-5}, -{42,68,-4}, -{42,68,-3}, -{42,68,-2}, -{42,68,-1}, -{42,68,0}, -{42,68,1}, -{42,68,2}, -{42,68,3}, -{42,68,4}, -{42,68,5}, -{42,68,6}, -{42,68,7}, -{42,68,8}, -{42,68,9}, -{42,68,10}, -{42,68,11}, -{42,68,12}, -{42,68,13}, -{42,68,14}, -{42,68,15}, -{42,68,16}, -{42,68,17}, -{42,68,18}, -{42,68,19}, -{42,68,20}, -{42,68,21}, -{42,68,22}, -{42,68,23}, -{42,68,24}, -{42,68,25}, -{42,68,26}, -{42,68,27}, -{42,68,28}, -{42,69,-91}, -{42,69,-90}, -{42,69,-89}, -{42,69,-88}, -{42,69,-87}, -{42,69,-86}, -{42,69,-85}, -{42,69,-84}, -{42,69,-83}, -{42,69,-82}, -{42,69,-81}, -{42,69,-80}, -{42,69,-79}, -{42,69,-78}, -{42,69,-77}, -{42,69,-76}, -{42,69,-75}, -{42,69,-74}, -{42,69,-73}, -{42,69,-72}, -{42,69,-71}, -{42,69,-70}, -{42,69,-69}, -{42,69,-68}, -{42,69,-67}, -{42,69,-66}, -{42,69,-65}, -{42,69,-64}, -{42,69,-63}, -{42,69,-62}, -{42,69,-61}, -{42,69,-60}, -{42,69,-59}, -{42,69,-58}, -{42,69,-57}, -{42,69,-56}, -{42,69,-55}, -{42,69,-54}, -{42,69,-53}, -{42,69,-52}, -{42,69,-51}, -{42,69,-50}, -{42,69,-49}, -{42,69,-48}, -{42,69,-47}, -{42,69,-46}, -{42,69,-45}, -{42,69,-44}, -{42,69,-43}, -{42,69,-42}, -{42,69,-41}, -{42,69,-40}, -{42,69,-39}, -{42,69,-38}, -{42,69,-37}, -{42,69,-36}, -{42,69,-35}, -{42,69,-34}, -{42,69,-33}, -{42,69,-32}, -{42,69,-31}, -{42,69,-30}, -{42,69,-29}, -{42,69,-28}, -{42,69,-27}, -{42,69,-26}, -{42,69,-25}, -{42,69,-24}, -{42,69,-23}, -{42,69,-22}, -{42,69,-21}, -{42,69,-20}, -{42,69,-19}, -{42,69,-18}, -{42,69,-17}, -{42,69,-16}, -{42,69,-15}, -{42,69,-14}, -{42,69,-13}, -{42,69,-12}, -{42,69,-11}, -{42,69,-10}, -{42,69,-9}, -{42,69,-8}, -{42,69,-7}, -{42,69,-6}, -{42,69,-5}, -{42,69,-4}, -{42,69,-3}, -{42,69,-2}, -{42,69,-1}, -{42,69,0}, -{42,69,1}, -{42,69,2}, -{42,69,3}, -{42,69,4}, -{42,69,5}, -{42,69,6}, -{42,69,7}, -{42,69,8}, -{42,70,-91}, -{42,70,-90}, -{42,70,-89}, -{42,70,-88}, -{42,70,-87}, -{42,70,-86}, -{42,70,-85}, -{42,70,-84}, -{42,70,-83}, -{42,70,-82}, -{42,70,-81}, -{42,70,-80}, -{42,70,-79}, -{42,70,-78}, -{42,70,-77}, -{42,70,-76}, -{42,70,-75}, -{42,70,-74}, -{42,70,-73}, -{42,70,-72}, -{42,70,-71}, -{42,70,-70}, -{42,70,-69}, -{42,70,-68}, -{42,70,-67}, -{42,70,-66}, -{42,70,-65}, -{42,70,-64}, -{42,70,-63}, -{42,70,-62}, -{42,70,-61}, -{42,70,-60}, -{42,70,-59}, -{42,70,-58}, -{42,70,-57}, -{42,70,-56}, -{42,70,-55}, -{42,70,-54}, -{42,70,-53}, -{42,70,-52}, -{42,70,-51}, -{42,70,-50}, -{42,70,-49}, -{42,70,-48}, -{42,70,-47}, -{42,70,-46}, -{42,70,-45}, -{42,70,-44}, -{42,70,-43}, -{42,70,-42}, -{42,70,-41}, -{42,70,-40}, -{42,70,-39}, -{42,70,-38}, -{42,70,-37}, -{42,70,-36}, -{42,70,-35}, -{42,70,-34}, -{42,70,-33}, -{42,70,-32}, -{42,70,-31}, -{42,70,-30}, -{42,70,-29}, -{42,70,-28}, -{42,70,-27}, -{42,70,-26}, -{42,70,-25}, -{42,70,-24}, -{42,70,-23}, -{42,70,-22}, -{42,70,-21}, -{42,70,-20}, -{42,70,-19}, -{42,70,-18}, -{42,70,-17}, -{42,70,-16}, -{42,70,-15}, -{42,70,-14}, -{42,70,-13}, -{42,70,-12}, -{42,70,-11}, -{42,70,-10}, -{42,70,-9}, -{42,70,-8}, -{42,70,-7}, -{42,70,-6}, -{42,71,-91}, -{42,71,-90}, -{42,71,-89}, -{42,71,-88}, -{42,71,-87}, -{42,71,-86}, -{42,71,-85}, -{42,71,-84}, -{42,71,-83}, -{42,71,-82}, -{42,71,-81}, -{42,71,-80}, -{42,71,-79}, -{42,71,-78}, -{42,71,-77}, -{42,71,-76}, -{42,71,-75}, -{42,71,-74}, -{42,71,-73}, -{42,71,-72}, -{42,71,-71}, -{42,71,-70}, -{42,71,-69}, -{42,71,-68}, -{42,71,-67}, -{42,71,-66}, -{42,71,-65}, -{42,71,-64}, -{42,71,-63}, -{42,71,-62}, -{42,71,-61}, -{42,71,-60}, -{42,71,-59}, -{42,71,-58}, -{42,71,-57}, -{42,71,-56}, -{42,71,-55}, -{42,71,-54}, -{42,71,-53}, -{42,71,-52}, -{42,71,-51}, -{42,71,-50}, -{42,71,-49}, -{42,71,-48}, -{42,71,-47}, -{42,71,-46}, -{42,71,-45}, -{42,71,-44}, -{42,71,-43}, -{42,71,-42}, -{42,71,-41}, -{42,71,-40}, -{42,71,-39}, -{42,71,-38}, -{42,71,-37}, -{42,71,-36}, -{42,71,-35}, -{42,71,-34}, -{42,71,-33}, -{42,71,-32}, -{42,71,-31}, -{42,71,-30}, -{42,71,-29}, -{42,71,-28}, -{42,71,-27}, -{42,71,-26}, -{42,71,-25}, -{42,71,-24}, -{42,71,-23}, -{42,71,-22}, -{42,71,-21}, -{42,71,-20}, -{42,71,-19}, -{42,71,-18}, -{42,71,-17}, -{42,72,-91}, -{42,72,-90}, -{42,72,-89}, -{42,72,-88}, -{42,72,-87}, -{42,72,-86}, -{42,72,-85}, -{42,72,-84}, -{42,72,-83}, -{42,72,-82}, -{42,72,-81}, -{42,72,-80}, -{42,72,-79}, -{42,72,-78}, -{42,72,-77}, -{42,72,-76}, -{42,72,-75}, -{42,72,-74}, -{42,72,-73}, -{42,72,-72}, -{42,72,-71}, -{42,72,-70}, -{42,72,-69}, -{42,72,-68}, -{42,72,-67}, -{42,72,-66}, -{42,72,-65}, -{42,72,-64}, -{42,72,-63}, -{42,72,-62}, -{42,72,-61}, -{42,72,-60}, -{42,72,-59}, -{42,72,-58}, -{42,72,-57}, -{42,72,-56}, -{42,72,-55}, -{42,72,-54}, -{42,72,-53}, -{42,72,-52}, -{42,72,-51}, -{42,72,-50}, -{42,72,-49}, -{42,72,-48}, -{42,72,-47}, -{42,72,-46}, -{42,72,-45}, -{42,72,-44}, -{42,72,-43}, -{42,72,-42}, -{42,72,-41}, -{42,72,-40}, -{42,72,-39}, -{42,72,-38}, -{42,72,-37}, -{42,72,-36}, -{42,72,-35}, -{42,72,-34}, -{42,72,-33}, -{42,72,-32}, -{42,72,-31}, -{42,72,-30}, -{42,72,-29}, -{42,72,-28}, -{42,72,-27}, -{42,72,-26}, -{42,73,-91}, -{42,73,-90}, -{42,73,-89}, -{42,73,-88}, -{42,73,-87}, -{42,73,-86}, -{42,73,-85}, -{42,73,-84}, -{42,73,-83}, -{42,73,-82}, -{42,73,-81}, -{42,73,-80}, -{42,73,-79}, -{42,73,-78}, -{42,73,-77}, -{42,73,-76}, -{42,73,-75}, -{42,73,-74}, -{42,73,-73}, -{42,73,-72}, -{42,73,-71}, -{42,73,-70}, -{42,73,-69}, -{42,73,-68}, -{42,73,-67}, -{42,73,-66}, -{42,73,-65}, -{42,73,-64}, -{42,73,-63}, -{42,73,-62}, -{42,73,-61}, -{42,73,-60}, -{42,73,-59}, -{42,73,-58}, -{42,73,-57}, -{42,73,-56}, -{42,73,-55}, -{42,73,-54}, -{42,73,-53}, -{42,73,-52}, -{42,73,-51}, -{42,73,-50}, -{42,73,-49}, -{42,73,-48}, -{42,73,-47}, -{42,73,-46}, -{42,73,-45}, -{42,73,-44}, -{42,73,-43}, -{42,73,-42}, -{42,73,-41}, -{42,73,-40}, -{42,73,-39}, -{42,73,-38}, -{42,73,-37}, -{42,73,-36}, -{42,73,-35}, -{42,73,-34}, -{42,74,-91}, -{42,74,-90}, -{42,74,-89}, -{42,74,-88}, -{42,74,-87}, -{42,74,-86}, -{42,74,-85}, -{42,74,-84}, -{42,74,-83}, -{42,74,-82}, -{42,74,-81}, -{42,74,-80}, -{42,74,-79}, -{42,74,-78}, -{42,74,-77}, -{42,74,-76}, -{42,74,-75}, -{42,74,-74}, -{42,74,-73}, -{42,74,-72}, -{42,74,-71}, -{42,74,-70}, -{42,74,-69}, -{42,74,-68}, -{42,74,-67}, -{42,74,-66}, -{42,74,-65}, -{42,74,-64}, -{42,74,-63}, -{42,74,-62}, -{42,74,-61}, -{42,74,-60}, -{42,74,-59}, -{42,74,-58}, -{42,74,-57}, -{42,74,-56}, -{42,74,-55}, -{42,74,-54}, -{42,74,-53}, -{42,74,-52}, -{42,74,-51}, -{42,74,-50}, -{42,74,-49}, -{42,74,-48}, -{42,74,-47}, -{42,74,-46}, -{42,74,-45}, -{42,74,-44}, -{42,74,-43}, -{42,74,-42}, -{42,74,-41}, -{42,75,-91}, -{42,75,-90}, -{42,75,-89}, -{42,75,-88}, -{42,75,-87}, -{42,75,-86}, -{42,75,-85}, -{42,75,-84}, -{42,75,-83}, -{42,75,-82}, -{42,75,-81}, -{42,75,-80}, -{42,75,-79}, -{42,75,-78}, -{42,75,-77}, -{42,75,-76}, -{42,75,-75}, -{42,75,-74}, -{42,75,-73}, -{42,75,-72}, -{42,75,-71}, -{42,75,-70}, -{42,75,-69}, -{42,75,-68}, -{42,75,-67}, -{42,75,-66}, -{42,75,-65}, -{42,75,-64}, -{42,75,-63}, -{42,75,-62}, -{42,75,-61}, -{42,75,-60}, -{42,75,-59}, -{42,75,-58}, -{42,75,-57}, -{42,75,-56}, -{42,75,-55}, -{42,75,-54}, -{42,75,-53}, -{42,75,-52}, -{42,75,-51}, -{42,75,-50}, -{42,75,-49}, -{42,75,-48}, -{42,76,-91}, -{42,76,-90}, -{42,76,-89}, -{42,76,-88}, -{42,76,-87}, -{42,76,-86}, -{42,76,-85}, -{42,76,-84}, -{42,76,-83}, -{42,76,-82}, -{42,76,-81}, -{42,76,-80}, -{42,76,-79}, -{42,76,-78}, -{42,76,-77}, -{42,76,-76}, -{42,76,-75}, -{42,76,-74}, -{42,76,-73}, -{42,76,-72}, -{42,76,-71}, -{42,76,-70}, -{42,76,-69}, -{42,76,-68}, -{42,76,-67}, -{42,76,-66}, -{42,76,-65}, -{42,76,-64}, -{42,76,-63}, -{42,76,-62}, -{42,76,-61}, -{42,76,-60}, -{42,76,-59}, -{42,76,-58}, -{42,76,-57}, -{42,76,-56}, -{42,76,-55}, -{42,76,-54}, -{42,77,-91}, -{42,77,-90}, -{42,77,-89}, -{42,77,-88}, -{42,77,-87}, -{42,77,-86}, -{42,77,-85}, -{42,77,-84}, -{42,77,-83}, -{42,77,-82}, -{42,77,-81}, -{42,77,-80}, -{42,77,-79}, -{42,77,-78}, -{42,77,-77}, -{42,77,-76}, -{42,77,-75}, -{42,77,-74}, -{42,77,-73}, -{42,77,-72}, -{42,77,-71}, -{42,77,-70}, -{42,77,-69}, -{42,77,-68}, -{42,77,-67}, -{42,77,-66}, -{42,77,-65}, -{42,77,-64}, -{42,77,-63}, -{42,77,-62}, -{42,77,-61}, -{42,77,-60}, -{42,78,-91}, -{42,78,-90}, -{42,78,-89}, -{42,78,-88}, -{42,78,-87}, -{42,78,-86}, -{42,78,-85}, -{42,78,-84}, -{42,78,-83}, -{42,78,-82}, -{42,78,-81}, -{42,78,-80}, -{42,78,-79}, -{42,78,-78}, -{42,78,-77}, -{42,78,-76}, -{42,78,-75}, -{42,78,-74}, -{42,78,-73}, -{42,78,-72}, -{42,78,-71}, -{42,78,-70}, -{42,78,-69}, -{42,78,-68}, -{42,78,-67}, -{42,78,-66}, -{42,78,-65}, -{42,79,-91}, -{42,79,-90}, -{42,79,-89}, -{42,79,-88}, -{42,79,-87}, -{42,79,-86}, -{42,79,-85}, -{42,79,-84}, -{42,79,-83}, -{42,79,-82}, -{42,79,-81}, -{42,79,-80}, -{42,79,-79}, -{42,79,-78}, -{42,79,-77}, -{42,79,-76}, -{42,79,-75}, -{42,79,-74}, -{42,79,-73}, -{42,79,-72}, -{42,79,-71}, -{42,79,-70}, -{42,80,-91}, -{42,80,-90}, -{42,80,-89}, -{42,80,-88}, -{42,80,-87}, -{42,80,-86}, -{42,80,-85}, -{42,80,-84}, -{42,80,-83}, -{42,80,-82}, -{42,80,-81}, -{42,80,-80}, -{42,80,-79}, -{42,80,-78}, -{42,80,-77}, -{42,80,-76}, -{42,80,-75}, -{42,81,-91}, -{42,81,-90}, -{42,81,-89}, -{42,81,-88}, -{42,81,-87}, -{42,81,-86}, -{42,81,-85}, -{42,81,-84}, -{42,81,-83}, -{42,81,-82}, -{42,81,-81}, -{42,81,-80}, -{42,81,-79}, -{42,82,-91}, -{42,82,-90}, -{42,82,-89}, -{42,82,-88}, -{42,82,-87}, -{42,82,-86}, -{42,82,-85}, -{42,82,-84}, -{42,83,-91}, -{42,83,-90}, -{42,83,-89}, -{42,83,-88}, -{43,-49,47}, -{43,-48,42}, -{43,-48,43}, -{43,-48,44}, -{43,-48,45}, -{43,-48,46}, -{43,-48,47}, -{43,-47,38}, -{43,-47,39}, -{43,-47,40}, -{43,-47,41}, -{43,-47,42}, -{43,-47,43}, -{43,-47,44}, -{43,-47,45}, -{43,-47,46}, -{43,-47,47}, -{43,-46,35}, -{43,-46,36}, -{43,-46,37}, -{43,-46,38}, -{43,-46,39}, -{43,-46,40}, -{43,-46,41}, -{43,-46,42}, -{43,-46,43}, -{43,-46,44}, -{43,-46,45}, -{43,-46,46}, -{43,-46,47}, -{43,-45,31}, -{43,-45,32}, -{43,-45,33}, -{43,-45,34}, -{43,-45,35}, -{43,-45,36}, -{43,-45,37}, -{43,-45,38}, -{43,-45,39}, -{43,-45,40}, -{43,-45,41}, -{43,-45,42}, -{43,-45,43}, -{43,-45,44}, -{43,-45,45}, -{43,-45,46}, -{43,-45,47}, -{43,-44,28}, -{43,-44,29}, -{43,-44,30}, -{43,-44,31}, -{43,-44,32}, -{43,-44,33}, -{43,-44,34}, -{43,-44,35}, -{43,-44,36}, -{43,-44,37}, -{43,-44,38}, -{43,-44,39}, -{43,-44,40}, -{43,-44,41}, -{43,-44,42}, -{43,-44,43}, -{43,-44,44}, -{43,-44,45}, -{43,-44,46}, -{43,-44,47}, -{43,-43,25}, -{43,-43,26}, -{43,-43,27}, -{43,-43,28}, -{43,-43,29}, -{43,-43,30}, -{43,-43,31}, -{43,-43,32}, -{43,-43,33}, -{43,-43,34}, -{43,-43,35}, -{43,-43,36}, -{43,-43,37}, -{43,-43,38}, -{43,-43,39}, -{43,-43,40}, -{43,-43,41}, -{43,-43,42}, -{43,-43,43}, -{43,-43,44}, -{43,-43,45}, -{43,-43,46}, -{43,-43,47}, -{43,-42,23}, -{43,-42,24}, -{43,-42,25}, -{43,-42,26}, -{43,-42,27}, -{43,-42,28}, -{43,-42,29}, -{43,-42,30}, -{43,-42,31}, -{43,-42,32}, -{43,-42,33}, -{43,-42,34}, -{43,-42,35}, -{43,-42,36}, -{43,-42,37}, -{43,-42,38}, -{43,-42,39}, -{43,-42,40}, -{43,-42,41}, -{43,-42,42}, -{43,-42,43}, -{43,-42,44}, -{43,-42,45}, -{43,-42,46}, -{43,-42,47}, -{43,-41,20}, -{43,-41,21}, -{43,-41,22}, -{43,-41,23}, -{43,-41,24}, -{43,-41,25}, -{43,-41,26}, -{43,-41,27}, -{43,-41,28}, -{43,-41,29}, -{43,-41,30}, -{43,-41,31}, -{43,-41,32}, -{43,-41,33}, -{43,-41,34}, -{43,-41,35}, -{43,-41,36}, -{43,-41,37}, -{43,-41,38}, -{43,-41,39}, -{43,-41,40}, -{43,-41,41}, -{43,-41,42}, -{43,-41,43}, -{43,-41,44}, -{43,-41,45}, -{43,-41,46}, -{43,-41,47}, -{43,-40,18}, -{43,-40,19}, -{43,-40,20}, -{43,-40,21}, -{43,-40,22}, -{43,-40,23}, -{43,-40,24}, -{43,-40,25}, -{43,-40,26}, -{43,-40,27}, -{43,-40,28}, -{43,-40,29}, -{43,-40,30}, -{43,-40,31}, -{43,-40,32}, -{43,-40,33}, -{43,-40,34}, -{43,-40,35}, -{43,-40,36}, -{43,-40,37}, -{43,-40,38}, -{43,-40,39}, -{43,-40,40}, -{43,-40,41}, -{43,-40,42}, -{43,-40,43}, -{43,-40,44}, -{43,-40,45}, -{43,-40,46}, -{43,-40,47}, -{43,-39,15}, -{43,-39,16}, -{43,-39,17}, -{43,-39,18}, -{43,-39,19}, -{43,-39,20}, -{43,-39,21}, -{43,-39,22}, -{43,-39,23}, -{43,-39,24}, -{43,-39,25}, -{43,-39,26}, -{43,-39,27}, -{43,-39,28}, -{43,-39,29}, -{43,-39,30}, -{43,-39,31}, -{43,-39,32}, -{43,-39,33}, -{43,-39,34}, -{43,-39,35}, -{43,-39,36}, -{43,-39,37}, -{43,-39,38}, -{43,-39,39}, -{43,-39,40}, -{43,-39,41}, -{43,-39,42}, -{43,-39,43}, -{43,-39,44}, -{43,-39,45}, -{43,-39,46}, -{43,-39,47}, -{43,-38,13}, -{43,-38,14}, -{43,-38,15}, -{43,-38,16}, -{43,-38,17}, -{43,-38,18}, -{43,-38,19}, -{43,-38,20}, -{43,-38,21}, -{43,-38,22}, -{43,-38,23}, -{43,-38,24}, -{43,-38,25}, -{43,-38,26}, -{43,-38,27}, -{43,-38,28}, -{43,-38,29}, -{43,-38,30}, -{43,-38,31}, -{43,-38,32}, -{43,-38,33}, -{43,-38,34}, -{43,-38,35}, -{43,-38,36}, -{43,-38,37}, -{43,-38,38}, -{43,-38,39}, -{43,-38,40}, -{43,-38,41}, -{43,-38,42}, -{43,-38,43}, -{43,-38,44}, -{43,-38,45}, -{43,-38,46}, -{43,-38,47}, -{43,-37,11}, -{43,-37,12}, -{43,-37,13}, -{43,-37,14}, -{43,-37,15}, -{43,-37,16}, -{43,-37,17}, -{43,-37,18}, -{43,-37,19}, -{43,-37,20}, -{43,-37,21}, -{43,-37,22}, -{43,-37,23}, -{43,-37,24}, -{43,-37,25}, -{43,-37,26}, -{43,-37,27}, -{43,-37,28}, -{43,-37,29}, -{43,-37,30}, -{43,-37,31}, -{43,-37,32}, -{43,-37,33}, -{43,-37,34}, -{43,-37,35}, -{43,-37,36}, -{43,-37,37}, -{43,-37,38}, -{43,-37,39}, -{43,-37,40}, -{43,-37,41}, -{43,-37,42}, -{43,-37,43}, -{43,-37,44}, -{43,-37,45}, -{43,-37,46}, -{43,-37,47}, -{43,-37,48}, -{43,-36,9}, -{43,-36,10}, -{43,-36,11}, -{43,-36,12}, -{43,-36,13}, -{43,-36,14}, -{43,-36,15}, -{43,-36,16}, -{43,-36,17}, -{43,-36,18}, -{43,-36,19}, -{43,-36,20}, -{43,-36,21}, -{43,-36,22}, -{43,-36,23}, -{43,-36,24}, -{43,-36,25}, -{43,-36,26}, -{43,-36,27}, -{43,-36,28}, -{43,-36,29}, -{43,-36,30}, -{43,-36,31}, -{43,-36,32}, -{43,-36,33}, -{43,-36,34}, -{43,-36,35}, -{43,-36,36}, -{43,-36,37}, -{43,-36,38}, -{43,-36,39}, -{43,-36,40}, -{43,-36,41}, -{43,-36,42}, -{43,-36,43}, -{43,-36,44}, -{43,-36,45}, -{43,-36,46}, -{43,-36,47}, -{43,-36,48}, -{43,-35,7}, -{43,-35,8}, -{43,-35,9}, -{43,-35,10}, -{43,-35,11}, -{43,-35,12}, -{43,-35,13}, -{43,-35,14}, -{43,-35,15}, -{43,-35,16}, -{43,-35,17}, -{43,-35,18}, -{43,-35,19}, -{43,-35,20}, -{43,-35,21}, -{43,-35,22}, -{43,-35,23}, -{43,-35,24}, -{43,-35,25}, -{43,-35,26}, -{43,-35,27}, -{43,-35,28}, -{43,-35,29}, -{43,-35,30}, -{43,-35,31}, -{43,-35,32}, -{43,-35,33}, -{43,-35,34}, -{43,-35,35}, -{43,-35,36}, -{43,-35,37}, -{43,-35,38}, -{43,-35,39}, -{43,-35,40}, -{43,-35,41}, -{43,-35,42}, -{43,-35,43}, -{43,-35,44}, -{43,-35,45}, -{43,-35,46}, -{43,-35,47}, -{43,-35,48}, -{43,-34,5}, -{43,-34,6}, -{43,-34,7}, -{43,-34,8}, -{43,-34,9}, -{43,-34,10}, -{43,-34,11}, -{43,-34,12}, -{43,-34,13}, -{43,-34,14}, -{43,-34,15}, -{43,-34,16}, -{43,-34,17}, -{43,-34,18}, -{43,-34,19}, -{43,-34,20}, -{43,-34,21}, -{43,-34,22}, -{43,-34,23}, -{43,-34,24}, -{43,-34,25}, -{43,-34,26}, -{43,-34,27}, -{43,-34,28}, -{43,-34,29}, -{43,-34,30}, -{43,-34,31}, -{43,-34,32}, -{43,-34,33}, -{43,-34,34}, -{43,-34,35}, -{43,-34,36}, -{43,-34,37}, -{43,-34,38}, -{43,-34,39}, -{43,-34,40}, -{43,-34,41}, -{43,-34,42}, -{43,-34,43}, -{43,-34,44}, -{43,-34,45}, -{43,-34,46}, -{43,-34,47}, -{43,-34,48}, -{43,-33,3}, -{43,-33,4}, -{43,-33,5}, -{43,-33,6}, -{43,-33,7}, -{43,-33,8}, -{43,-33,9}, -{43,-33,10}, -{43,-33,11}, -{43,-33,12}, -{43,-33,13}, -{43,-33,14}, -{43,-33,15}, -{43,-33,16}, -{43,-33,17}, -{43,-33,18}, -{43,-33,19}, -{43,-33,20}, -{43,-33,21}, -{43,-33,22}, -{43,-33,23}, -{43,-33,24}, -{43,-33,25}, -{43,-33,26}, -{43,-33,27}, -{43,-33,28}, -{43,-33,29}, -{43,-33,30}, -{43,-33,31}, -{43,-33,32}, -{43,-33,33}, -{43,-33,34}, -{43,-33,35}, -{43,-33,36}, -{43,-33,37}, -{43,-33,38}, -{43,-33,39}, -{43,-33,40}, -{43,-33,41}, -{43,-33,42}, -{43,-33,43}, -{43,-33,44}, -{43,-33,45}, -{43,-33,46}, -{43,-33,47}, -{43,-33,48}, -{43,-32,2}, -{43,-32,3}, -{43,-32,4}, -{43,-32,5}, -{43,-32,6}, -{43,-32,7}, -{43,-32,8}, -{43,-32,9}, -{43,-32,10}, -{43,-32,11}, -{43,-32,12}, -{43,-32,13}, -{43,-32,14}, -{43,-32,15}, -{43,-32,16}, -{43,-32,17}, -{43,-32,18}, -{43,-32,19}, -{43,-32,20}, -{43,-32,21}, -{43,-32,22}, -{43,-32,23}, -{43,-32,24}, -{43,-32,25}, -{43,-32,26}, -{43,-32,27}, -{43,-32,28}, -{43,-32,29}, -{43,-32,30}, -{43,-32,31}, -{43,-32,32}, -{43,-32,33}, -{43,-32,34}, -{43,-32,35}, -{43,-32,36}, -{43,-32,37}, -{43,-32,38}, -{43,-32,39}, -{43,-32,40}, -{43,-32,41}, -{43,-32,42}, -{43,-32,43}, -{43,-32,44}, -{43,-32,45}, -{43,-32,46}, -{43,-32,47}, -{43,-32,48}, -{43,-31,0}, -{43,-31,1}, -{43,-31,2}, -{43,-31,3}, -{43,-31,4}, -{43,-31,5}, -{43,-31,6}, -{43,-31,7}, -{43,-31,8}, -{43,-31,9}, -{43,-31,10}, -{43,-31,11}, -{43,-31,12}, -{43,-31,13}, -{43,-31,14}, -{43,-31,15}, -{43,-31,16}, -{43,-31,17}, -{43,-31,18}, -{43,-31,19}, -{43,-31,20}, -{43,-31,21}, -{43,-31,22}, -{43,-31,23}, -{43,-31,24}, -{43,-31,25}, -{43,-31,26}, -{43,-31,27}, -{43,-31,28}, -{43,-31,29}, -{43,-31,30}, -{43,-31,31}, -{43,-31,32}, -{43,-31,33}, -{43,-31,34}, -{43,-31,35}, -{43,-31,36}, -{43,-31,37}, -{43,-31,38}, -{43,-31,39}, -{43,-31,40}, -{43,-31,41}, -{43,-31,42}, -{43,-31,43}, -{43,-31,44}, -{43,-31,45}, -{43,-31,46}, -{43,-31,47}, -{43,-31,48}, -{43,-30,-2}, -{43,-30,-1}, -{43,-30,0}, -{43,-30,1}, -{43,-30,2}, -{43,-30,3}, -{43,-30,4}, -{43,-30,5}, -{43,-30,6}, -{43,-30,7}, -{43,-30,8}, -{43,-30,9}, -{43,-30,10}, -{43,-30,11}, -{43,-30,12}, -{43,-30,13}, -{43,-30,14}, -{43,-30,15}, -{43,-30,16}, -{43,-30,17}, -{43,-30,18}, -{43,-30,19}, -{43,-30,20}, -{43,-30,21}, -{43,-30,22}, -{43,-30,23}, -{43,-30,24}, -{43,-30,25}, -{43,-30,26}, -{43,-30,27}, -{43,-30,28}, -{43,-30,29}, -{43,-30,30}, -{43,-30,31}, -{43,-30,32}, -{43,-30,33}, -{43,-30,34}, -{43,-30,35}, -{43,-30,36}, -{43,-30,37}, -{43,-30,38}, -{43,-30,39}, -{43,-30,40}, -{43,-30,41}, -{43,-30,42}, -{43,-30,43}, -{43,-30,44}, -{43,-30,45}, -{43,-30,46}, -{43,-30,47}, -{43,-30,48}, -{43,-29,-4}, -{43,-29,-3}, -{43,-29,-2}, -{43,-29,-1}, -{43,-29,0}, -{43,-29,1}, -{43,-29,2}, -{43,-29,3}, -{43,-29,4}, -{43,-29,5}, -{43,-29,6}, -{43,-29,7}, -{43,-29,8}, -{43,-29,9}, -{43,-29,10}, -{43,-29,11}, -{43,-29,12}, -{43,-29,13}, -{43,-29,14}, -{43,-29,15}, -{43,-29,16}, -{43,-29,17}, -{43,-29,18}, -{43,-29,19}, -{43,-29,20}, -{43,-29,21}, -{43,-29,22}, -{43,-29,23}, -{43,-29,24}, -{43,-29,25}, -{43,-29,26}, -{43,-29,27}, -{43,-29,28}, -{43,-29,29}, -{43,-29,30}, -{43,-29,31}, -{43,-29,32}, -{43,-29,33}, -{43,-29,34}, -{43,-29,35}, -{43,-29,36}, -{43,-29,37}, -{43,-29,38}, -{43,-29,39}, -{43,-29,40}, -{43,-29,41}, -{43,-29,42}, -{43,-29,43}, -{43,-29,44}, -{43,-29,45}, -{43,-29,46}, -{43,-29,47}, -{43,-29,48}, -{43,-28,-5}, -{43,-28,-4}, -{43,-28,-3}, -{43,-28,-2}, -{43,-28,-1}, -{43,-28,0}, -{43,-28,1}, -{43,-28,2}, -{43,-28,3}, -{43,-28,4}, -{43,-28,5}, -{43,-28,6}, -{43,-28,7}, -{43,-28,8}, -{43,-28,9}, -{43,-28,10}, -{43,-28,11}, -{43,-28,12}, -{43,-28,13}, -{43,-28,14}, -{43,-28,15}, -{43,-28,16}, -{43,-28,17}, -{43,-28,18}, -{43,-28,19}, -{43,-28,20}, -{43,-28,21}, -{43,-28,22}, -{43,-28,23}, -{43,-28,24}, -{43,-28,25}, -{43,-28,26}, -{43,-28,27}, -{43,-28,28}, -{43,-28,29}, -{43,-28,30}, -{43,-28,31}, -{43,-28,32}, -{43,-28,33}, -{43,-28,34}, -{43,-28,35}, -{43,-28,36}, -{43,-28,37}, -{43,-28,38}, -{43,-28,39}, -{43,-28,40}, -{43,-28,41}, -{43,-28,42}, -{43,-28,43}, -{43,-28,44}, -{43,-28,45}, -{43,-28,46}, -{43,-28,47}, -{43,-28,48}, -{43,-27,-7}, -{43,-27,-6}, -{43,-27,-5}, -{43,-27,-4}, -{43,-27,-3}, -{43,-27,-2}, -{43,-27,-1}, -{43,-27,0}, -{43,-27,1}, -{43,-27,2}, -{43,-27,3}, -{43,-27,4}, -{43,-27,5}, -{43,-27,6}, -{43,-27,7}, -{43,-27,8}, -{43,-27,9}, -{43,-27,10}, -{43,-27,11}, -{43,-27,12}, -{43,-27,13}, -{43,-27,14}, -{43,-27,15}, -{43,-27,16}, -{43,-27,17}, -{43,-27,18}, -{43,-27,19}, -{43,-27,20}, -{43,-27,21}, -{43,-27,22}, -{43,-27,23}, -{43,-27,24}, -{43,-27,25}, -{43,-27,26}, -{43,-27,27}, -{43,-27,28}, -{43,-27,29}, -{43,-27,30}, -{43,-27,31}, -{43,-27,32}, -{43,-27,33}, -{43,-27,34}, -{43,-27,35}, -{43,-27,36}, -{43,-27,37}, -{43,-27,38}, -{43,-27,39}, -{43,-27,40}, -{43,-27,41}, -{43,-27,42}, -{43,-27,43}, -{43,-27,44}, -{43,-27,45}, -{43,-27,46}, -{43,-27,47}, -{43,-27,48}, -{43,-26,-8}, -{43,-26,-7}, -{43,-26,-6}, -{43,-26,-5}, -{43,-26,-4}, -{43,-26,-3}, -{43,-26,-2}, -{43,-26,-1}, -{43,-26,0}, -{43,-26,1}, -{43,-26,2}, -{43,-26,3}, -{43,-26,4}, -{43,-26,5}, -{43,-26,6}, -{43,-26,7}, -{43,-26,8}, -{43,-26,9}, -{43,-26,10}, -{43,-26,11}, -{43,-26,12}, -{43,-26,13}, -{43,-26,14}, -{43,-26,15}, -{43,-26,16}, -{43,-26,17}, -{43,-26,18}, -{43,-26,19}, -{43,-26,20}, -{43,-26,21}, -{43,-26,22}, -{43,-26,23}, -{43,-26,24}, -{43,-26,25}, -{43,-26,26}, -{43,-26,27}, -{43,-26,28}, -{43,-26,29}, -{43,-26,30}, -{43,-26,31}, -{43,-26,32}, -{43,-26,33}, -{43,-26,34}, -{43,-26,35}, -{43,-26,36}, -{43,-26,37}, -{43,-26,38}, -{43,-26,39}, -{43,-26,40}, -{43,-26,41}, -{43,-26,42}, -{43,-26,43}, -{43,-26,44}, -{43,-26,45}, -{43,-26,46}, -{43,-26,47}, -{43,-26,48}, -{43,-25,-10}, -{43,-25,-9}, -{43,-25,-8}, -{43,-25,-7}, -{43,-25,-6}, -{43,-25,-5}, -{43,-25,-4}, -{43,-25,-3}, -{43,-25,-2}, -{43,-25,-1}, -{43,-25,0}, -{43,-25,1}, -{43,-25,2}, -{43,-25,3}, -{43,-25,4}, -{43,-25,5}, -{43,-25,6}, -{43,-25,7}, -{43,-25,8}, -{43,-25,9}, -{43,-25,10}, -{43,-25,11}, -{43,-25,12}, -{43,-25,13}, -{43,-25,14}, -{43,-25,15}, -{43,-25,16}, -{43,-25,17}, -{43,-25,18}, -{43,-25,19}, -{43,-25,20}, -{43,-25,21}, -{43,-25,22}, -{43,-25,23}, -{43,-25,24}, -{43,-25,25}, -{43,-25,26}, -{43,-25,27}, -{43,-25,28}, -{43,-25,29}, -{43,-25,30}, -{43,-25,31}, -{43,-25,32}, -{43,-25,33}, -{43,-25,34}, -{43,-25,35}, -{43,-25,36}, -{43,-25,37}, -{43,-25,38}, -{43,-25,39}, -{43,-25,40}, -{43,-25,41}, -{43,-25,42}, -{43,-25,43}, -{43,-25,44}, -{43,-25,45}, -{43,-25,46}, -{43,-25,47}, -{43,-25,48}, -{43,-24,-11}, -{43,-24,-10}, -{43,-24,-9}, -{43,-24,-8}, -{43,-24,-7}, -{43,-24,-6}, -{43,-24,-5}, -{43,-24,-4}, -{43,-24,-3}, -{43,-24,-2}, -{43,-24,-1}, -{43,-24,0}, -{43,-24,1}, -{43,-24,2}, -{43,-24,3}, -{43,-24,4}, -{43,-24,5}, -{43,-24,6}, -{43,-24,7}, -{43,-24,8}, -{43,-24,9}, -{43,-24,10}, -{43,-24,11}, -{43,-24,12}, -{43,-24,13}, -{43,-24,14}, -{43,-24,15}, -{43,-24,16}, -{43,-24,17}, -{43,-24,18}, -{43,-24,19}, -{43,-24,20}, -{43,-24,21}, -{43,-24,22}, -{43,-24,23}, -{43,-24,24}, -{43,-24,25}, -{43,-24,26}, -{43,-24,27}, -{43,-24,28}, -{43,-24,29}, -{43,-24,30}, -{43,-24,31}, -{43,-24,32}, -{43,-24,33}, -{43,-24,34}, -{43,-24,35}, -{43,-24,36}, -{43,-24,37}, -{43,-24,38}, -{43,-24,39}, -{43,-24,40}, -{43,-24,41}, -{43,-24,42}, -{43,-24,43}, -{43,-24,44}, -{43,-24,45}, -{43,-24,46}, -{43,-24,47}, -{43,-24,48}, -{43,-23,-13}, -{43,-23,-12}, -{43,-23,-11}, -{43,-23,-10}, -{43,-23,-9}, -{43,-23,-8}, -{43,-23,-7}, -{43,-23,-6}, -{43,-23,-5}, -{43,-23,-4}, -{43,-23,-3}, -{43,-23,-2}, -{43,-23,-1}, -{43,-23,0}, -{43,-23,1}, -{43,-23,2}, -{43,-23,3}, -{43,-23,4}, -{43,-23,5}, -{43,-23,6}, -{43,-23,7}, -{43,-23,8}, -{43,-23,9}, -{43,-23,10}, -{43,-23,11}, -{43,-23,12}, -{43,-23,13}, -{43,-23,14}, -{43,-23,15}, -{43,-23,16}, -{43,-23,17}, -{43,-23,18}, -{43,-23,19}, -{43,-23,20}, -{43,-23,21}, -{43,-23,22}, -{43,-23,23}, -{43,-23,24}, -{43,-23,25}, -{43,-23,26}, -{43,-23,27}, -{43,-23,28}, -{43,-23,29}, -{43,-23,30}, -{43,-23,31}, -{43,-23,32}, -{43,-23,33}, -{43,-23,34}, -{43,-23,35}, -{43,-23,36}, -{43,-23,37}, -{43,-23,38}, -{43,-23,39}, -{43,-23,40}, -{43,-23,41}, -{43,-23,42}, -{43,-23,43}, -{43,-23,44}, -{43,-23,45}, -{43,-23,46}, -{43,-23,47}, -{43,-23,48}, -{43,-22,-14}, -{43,-22,-13}, -{43,-22,-12}, -{43,-22,-11}, -{43,-22,-10}, -{43,-22,-9}, -{43,-22,-8}, -{43,-22,-7}, -{43,-22,-6}, -{43,-22,-5}, -{43,-22,-4}, -{43,-22,-3}, -{43,-22,-2}, -{43,-22,-1}, -{43,-22,0}, -{43,-22,1}, -{43,-22,2}, -{43,-22,3}, -{43,-22,4}, -{43,-22,5}, -{43,-22,6}, -{43,-22,7}, -{43,-22,8}, -{43,-22,9}, -{43,-22,10}, -{43,-22,11}, -{43,-22,12}, -{43,-22,13}, -{43,-22,14}, -{43,-22,15}, -{43,-22,16}, -{43,-22,17}, -{43,-22,18}, -{43,-22,19}, -{43,-22,20}, -{43,-22,21}, -{43,-22,22}, -{43,-22,23}, -{43,-22,24}, -{43,-22,25}, -{43,-22,26}, -{43,-22,27}, -{43,-22,28}, -{43,-22,29}, -{43,-22,30}, -{43,-22,31}, -{43,-22,32}, -{43,-22,33}, -{43,-22,34}, -{43,-22,35}, -{43,-22,36}, -{43,-22,37}, -{43,-22,38}, -{43,-22,39}, -{43,-22,40}, -{43,-22,41}, -{43,-22,42}, -{43,-22,43}, -{43,-22,44}, -{43,-22,45}, -{43,-22,46}, -{43,-22,47}, -{43,-22,48}, -{43,-21,-16}, -{43,-21,-15}, -{43,-21,-14}, -{43,-21,-13}, -{43,-21,-12}, -{43,-21,-11}, -{43,-21,-10}, -{43,-21,-9}, -{43,-21,-8}, -{43,-21,-7}, -{43,-21,-6}, -{43,-21,-5}, -{43,-21,-4}, -{43,-21,-3}, -{43,-21,-2}, -{43,-21,-1}, -{43,-21,0}, -{43,-21,1}, -{43,-21,2}, -{43,-21,3}, -{43,-21,4}, -{43,-21,5}, -{43,-21,6}, -{43,-21,7}, -{43,-21,8}, -{43,-21,9}, -{43,-21,10}, -{43,-21,11}, -{43,-21,12}, -{43,-21,13}, -{43,-21,14}, -{43,-21,15}, -{43,-21,16}, -{43,-21,17}, -{43,-21,18}, -{43,-21,19}, -{43,-21,20}, -{43,-21,21}, -{43,-21,22}, -{43,-21,23}, -{43,-21,24}, -{43,-21,25}, -{43,-21,26}, -{43,-21,27}, -{43,-21,28}, -{43,-21,29}, -{43,-21,30}, -{43,-21,31}, -{43,-21,32}, -{43,-21,33}, -{43,-21,34}, -{43,-21,35}, -{43,-21,36}, -{43,-21,37}, -{43,-21,38}, -{43,-21,39}, -{43,-21,40}, -{43,-21,41}, -{43,-21,42}, -{43,-21,43}, -{43,-21,44}, -{43,-21,45}, -{43,-21,46}, -{43,-21,47}, -{43,-21,48}, -{43,-20,-17}, -{43,-20,-16}, -{43,-20,-15}, -{43,-20,-14}, -{43,-20,-13}, -{43,-20,-12}, -{43,-20,-11}, -{43,-20,-10}, -{43,-20,-9}, -{43,-20,-8}, -{43,-20,-7}, -{43,-20,-6}, -{43,-20,-5}, -{43,-20,-4}, -{43,-20,-3}, -{43,-20,-2}, -{43,-20,-1}, -{43,-20,0}, -{43,-20,1}, -{43,-20,2}, -{43,-20,3}, -{43,-20,4}, -{43,-20,5}, -{43,-20,6}, -{43,-20,7}, -{43,-20,8}, -{43,-20,9}, -{43,-20,10}, -{43,-20,11}, -{43,-20,12}, -{43,-20,13}, -{43,-20,14}, -{43,-20,15}, -{43,-20,16}, -{43,-20,17}, -{43,-20,18}, -{43,-20,19}, -{43,-20,20}, -{43,-20,21}, -{43,-20,22}, -{43,-20,23}, -{43,-20,24}, -{43,-20,25}, -{43,-20,26}, -{43,-20,27}, -{43,-20,28}, -{43,-20,29}, -{43,-20,30}, -{43,-20,31}, -{43,-20,32}, -{43,-20,33}, -{43,-20,34}, -{43,-20,35}, -{43,-20,36}, -{43,-20,37}, -{43,-20,38}, -{43,-20,39}, -{43,-20,40}, -{43,-20,41}, -{43,-20,42}, -{43,-20,43}, -{43,-20,44}, -{43,-20,45}, -{43,-20,46}, -{43,-20,47}, -{43,-20,48}, -{43,-19,-19}, -{43,-19,-18}, -{43,-19,-17}, -{43,-19,-16}, -{43,-19,-15}, -{43,-19,-14}, -{43,-19,-13}, -{43,-19,-12}, -{43,-19,-11}, -{43,-19,-10}, -{43,-19,-9}, -{43,-19,-8}, -{43,-19,-7}, -{43,-19,-6}, -{43,-19,-5}, -{43,-19,-4}, -{43,-19,-3}, -{43,-19,-2}, -{43,-19,-1}, -{43,-19,0}, -{43,-19,1}, -{43,-19,2}, -{43,-19,3}, -{43,-19,4}, -{43,-19,5}, -{43,-19,6}, -{43,-19,7}, -{43,-19,8}, -{43,-19,9}, -{43,-19,10}, -{43,-19,11}, -{43,-19,12}, -{43,-19,13}, -{43,-19,14}, -{43,-19,15}, -{43,-19,16}, -{43,-19,17}, -{43,-19,18}, -{43,-19,19}, -{43,-19,20}, -{43,-19,21}, -{43,-19,22}, -{43,-19,23}, -{43,-19,24}, -{43,-19,25}, -{43,-19,26}, -{43,-19,27}, -{43,-19,28}, -{43,-19,29}, -{43,-19,30}, -{43,-19,31}, -{43,-19,32}, -{43,-19,33}, -{43,-19,34}, -{43,-19,35}, -{43,-19,36}, -{43,-19,37}, -{43,-19,38}, -{43,-19,39}, -{43,-19,40}, -{43,-19,41}, -{43,-19,42}, -{43,-19,43}, -{43,-19,44}, -{43,-19,45}, -{43,-19,46}, -{43,-19,47}, -{43,-19,48}, -{43,-18,-20}, -{43,-18,-19}, -{43,-18,-18}, -{43,-18,-17}, -{43,-18,-16}, -{43,-18,-15}, -{43,-18,-14}, -{43,-18,-13}, -{43,-18,-12}, -{43,-18,-11}, -{43,-18,-10}, -{43,-18,-9}, -{43,-18,-8}, -{43,-18,-7}, -{43,-18,-6}, -{43,-18,-5}, -{43,-18,-4}, -{43,-18,-3}, -{43,-18,-2}, -{43,-18,-1}, -{43,-18,0}, -{43,-18,1}, -{43,-18,2}, -{43,-18,3}, -{43,-18,4}, -{43,-18,5}, -{43,-18,6}, -{43,-18,7}, -{43,-18,8}, -{43,-18,9}, -{43,-18,10}, -{43,-18,11}, -{43,-18,12}, -{43,-18,13}, -{43,-18,14}, -{43,-18,15}, -{43,-18,16}, -{43,-18,17}, -{43,-18,18}, -{43,-18,19}, -{43,-18,20}, -{43,-18,21}, -{43,-18,22}, -{43,-18,23}, -{43,-18,24}, -{43,-18,25}, -{43,-18,26}, -{43,-18,27}, -{43,-18,28}, -{43,-18,29}, -{43,-18,30}, -{43,-18,31}, -{43,-18,32}, -{43,-18,33}, -{43,-18,34}, -{43,-18,35}, -{43,-18,36}, -{43,-18,37}, -{43,-18,38}, -{43,-18,39}, -{43,-18,40}, -{43,-18,41}, -{43,-18,42}, -{43,-18,43}, -{43,-18,44}, -{43,-18,45}, -{43,-18,46}, -{43,-18,47}, -{43,-18,48}, -{43,-18,49}, -{43,-17,-21}, -{43,-17,-20}, -{43,-17,-19}, -{43,-17,-18}, -{43,-17,-17}, -{43,-17,-16}, -{43,-17,-15}, -{43,-17,-14}, -{43,-17,-13}, -{43,-17,-12}, -{43,-17,-11}, -{43,-17,-10}, -{43,-17,-9}, -{43,-17,-8}, -{43,-17,-7}, -{43,-17,-6}, -{43,-17,-5}, -{43,-17,-4}, -{43,-17,-3}, -{43,-17,-2}, -{43,-17,-1}, -{43,-17,0}, -{43,-17,1}, -{43,-17,2}, -{43,-17,3}, -{43,-17,4}, -{43,-17,5}, -{43,-17,6}, -{43,-17,7}, -{43,-17,8}, -{43,-17,9}, -{43,-17,10}, -{43,-17,11}, -{43,-17,12}, -{43,-17,13}, -{43,-17,14}, -{43,-17,15}, -{43,-17,16}, -{43,-17,17}, -{43,-17,18}, -{43,-17,19}, -{43,-17,20}, -{43,-17,21}, -{43,-17,22}, -{43,-17,23}, -{43,-17,24}, -{43,-17,25}, -{43,-17,26}, -{43,-17,27}, -{43,-17,28}, -{43,-17,29}, -{43,-17,30}, -{43,-17,31}, -{43,-17,32}, -{43,-17,33}, -{43,-17,34}, -{43,-17,35}, -{43,-17,36}, -{43,-17,37}, -{43,-17,38}, -{43,-17,39}, -{43,-17,40}, -{43,-17,41}, -{43,-17,42}, -{43,-17,43}, -{43,-17,44}, -{43,-17,45}, -{43,-17,46}, -{43,-17,47}, -{43,-17,48}, -{43,-17,49}, -{43,-16,-23}, -{43,-16,-22}, -{43,-16,-21}, -{43,-16,-20}, -{43,-16,-19}, -{43,-16,-18}, -{43,-16,-17}, -{43,-16,-16}, -{43,-16,-15}, -{43,-16,-14}, -{43,-16,-13}, -{43,-16,-12}, -{43,-16,-11}, -{43,-16,-10}, -{43,-16,-9}, -{43,-16,-8}, -{43,-16,-7}, -{43,-16,-6}, -{43,-16,-5}, -{43,-16,-4}, -{43,-16,-3}, -{43,-16,-2}, -{43,-16,-1}, -{43,-16,0}, -{43,-16,1}, -{43,-16,2}, -{43,-16,3}, -{43,-16,4}, -{43,-16,5}, -{43,-16,6}, -{43,-16,7}, -{43,-16,8}, -{43,-16,9}, -{43,-16,10}, -{43,-16,11}, -{43,-16,12}, -{43,-16,13}, -{43,-16,14}, -{43,-16,15}, -{43,-16,16}, -{43,-16,17}, -{43,-16,18}, -{43,-16,19}, -{43,-16,20}, -{43,-16,21}, -{43,-16,22}, -{43,-16,23}, -{43,-16,24}, -{43,-16,25}, -{43,-16,26}, -{43,-16,27}, -{43,-16,28}, -{43,-16,29}, -{43,-16,30}, -{43,-16,31}, -{43,-16,32}, -{43,-16,33}, -{43,-16,34}, -{43,-16,35}, -{43,-16,36}, -{43,-16,37}, -{43,-16,38}, -{43,-16,39}, -{43,-16,40}, -{43,-16,41}, -{43,-16,42}, -{43,-16,43}, -{43,-16,44}, -{43,-16,45}, -{43,-16,46}, -{43,-16,47}, -{43,-16,48}, -{43,-16,49}, -{43,-15,-24}, -{43,-15,-23}, -{43,-15,-22}, -{43,-15,-21}, -{43,-15,-20}, -{43,-15,-19}, -{43,-15,-18}, -{43,-15,-17}, -{43,-15,-16}, -{43,-15,-15}, -{43,-15,-14}, -{43,-15,-13}, -{43,-15,-12}, -{43,-15,-11}, -{43,-15,-10}, -{43,-15,-9}, -{43,-15,-8}, -{43,-15,-7}, -{43,-15,-6}, -{43,-15,-5}, -{43,-15,-4}, -{43,-15,-3}, -{43,-15,-2}, -{43,-15,-1}, -{43,-15,0}, -{43,-15,1}, -{43,-15,2}, -{43,-15,3}, -{43,-15,4}, -{43,-15,5}, -{43,-15,6}, -{43,-15,7}, -{43,-15,8}, -{43,-15,9}, -{43,-15,10}, -{43,-15,11}, -{43,-15,12}, -{43,-15,13}, -{43,-15,14}, -{43,-15,15}, -{43,-15,16}, -{43,-15,17}, -{43,-15,18}, -{43,-15,19}, -{43,-15,20}, -{43,-15,21}, -{43,-15,22}, -{43,-15,23}, -{43,-15,24}, -{43,-15,25}, -{43,-15,26}, -{43,-15,27}, -{43,-15,28}, -{43,-15,29}, -{43,-15,30}, -{43,-15,31}, -{43,-15,32}, -{43,-15,33}, -{43,-15,34}, -{43,-15,35}, -{43,-15,36}, -{43,-15,37}, -{43,-15,38}, -{43,-15,39}, -{43,-15,40}, -{43,-15,41}, -{43,-15,42}, -{43,-15,43}, -{43,-15,44}, -{43,-15,45}, -{43,-15,46}, -{43,-15,47}, -{43,-15,48}, -{43,-15,49}, -{43,-14,-25}, -{43,-14,-24}, -{43,-14,-23}, -{43,-14,-22}, -{43,-14,-21}, -{43,-14,-20}, -{43,-14,-19}, -{43,-14,-18}, -{43,-14,-17}, -{43,-14,-16}, -{43,-14,-15}, -{43,-14,-14}, -{43,-14,-13}, -{43,-14,-12}, -{43,-14,-11}, -{43,-14,-10}, -{43,-14,-9}, -{43,-14,-8}, -{43,-14,-7}, -{43,-14,-6}, -{43,-14,-5}, -{43,-14,-4}, -{43,-14,-3}, -{43,-14,-2}, -{43,-14,-1}, -{43,-14,0}, -{43,-14,1}, -{43,-14,2}, -{43,-14,3}, -{43,-14,4}, -{43,-14,5}, -{43,-14,6}, -{43,-14,7}, -{43,-14,8}, -{43,-14,9}, -{43,-14,10}, -{43,-14,11}, -{43,-14,12}, -{43,-14,13}, -{43,-14,14}, -{43,-14,15}, -{43,-14,16}, -{43,-14,17}, -{43,-14,18}, -{43,-14,19}, -{43,-14,20}, -{43,-14,21}, -{43,-14,22}, -{43,-14,23}, -{43,-14,24}, -{43,-14,25}, -{43,-14,26}, -{43,-14,27}, -{43,-14,28}, -{43,-14,29}, -{43,-14,30}, -{43,-14,31}, -{43,-14,32}, -{43,-14,33}, -{43,-14,34}, -{43,-14,35}, -{43,-14,36}, -{43,-14,37}, -{43,-14,38}, -{43,-14,39}, -{43,-14,40}, -{43,-14,41}, -{43,-14,42}, -{43,-14,43}, -{43,-14,44}, -{43,-14,45}, -{43,-14,46}, -{43,-14,47}, -{43,-14,48}, -{43,-14,49}, -{43,-13,-27}, -{43,-13,-26}, -{43,-13,-25}, -{43,-13,-24}, -{43,-13,-23}, -{43,-13,-22}, -{43,-13,-21}, -{43,-13,-20}, -{43,-13,-19}, -{43,-13,-18}, -{43,-13,-17}, -{43,-13,-16}, -{43,-13,-15}, -{43,-13,-14}, -{43,-13,-13}, -{43,-13,-12}, -{43,-13,-11}, -{43,-13,-10}, -{43,-13,-9}, -{43,-13,-8}, -{43,-13,-7}, -{43,-13,-6}, -{43,-13,-5}, -{43,-13,-4}, -{43,-13,-3}, -{43,-13,-2}, -{43,-13,-1}, -{43,-13,0}, -{43,-13,1}, -{43,-13,2}, -{43,-13,3}, -{43,-13,4}, -{43,-13,5}, -{43,-13,6}, -{43,-13,7}, -{43,-13,8}, -{43,-13,9}, -{43,-13,10}, -{43,-13,11}, -{43,-13,12}, -{43,-13,13}, -{43,-13,14}, -{43,-13,15}, -{43,-13,16}, -{43,-13,17}, -{43,-13,18}, -{43,-13,19}, -{43,-13,20}, -{43,-13,21}, -{43,-13,22}, -{43,-13,23}, -{43,-13,24}, -{43,-13,25}, -{43,-13,26}, -{43,-13,27}, -{43,-13,28}, -{43,-13,29}, -{43,-13,30}, -{43,-13,31}, -{43,-13,32}, -{43,-13,33}, -{43,-13,34}, -{43,-13,35}, -{43,-13,36}, -{43,-13,37}, -{43,-13,38}, -{43,-13,39}, -{43,-13,40}, -{43,-13,41}, -{43,-13,42}, -{43,-13,43}, -{43,-13,44}, -{43,-13,45}, -{43,-13,46}, -{43,-13,47}, -{43,-13,48}, -{43,-13,49}, -{43,-12,-28}, -{43,-12,-27}, -{43,-12,-26}, -{43,-12,-25}, -{43,-12,-24}, -{43,-12,-23}, -{43,-12,-22}, -{43,-12,-21}, -{43,-12,-20}, -{43,-12,-19}, -{43,-12,-18}, -{43,-12,-17}, -{43,-12,-16}, -{43,-12,-15}, -{43,-12,-14}, -{43,-12,-13}, -{43,-12,-12}, -{43,-12,-11}, -{43,-12,-10}, -{43,-12,-9}, -{43,-12,-8}, -{43,-12,-7}, -{43,-12,-6}, -{43,-12,-5}, -{43,-12,-4}, -{43,-12,-3}, -{43,-12,-2}, -{43,-12,-1}, -{43,-12,0}, -{43,-12,1}, -{43,-12,2}, -{43,-12,3}, -{43,-12,4}, -{43,-12,5}, -{43,-12,6}, -{43,-12,7}, -{43,-12,8}, -{43,-12,9}, -{43,-12,10}, -{43,-12,11}, -{43,-12,12}, -{43,-12,13}, -{43,-12,14}, -{43,-12,15}, -{43,-12,16}, -{43,-12,17}, -{43,-12,18}, -{43,-12,19}, -{43,-12,20}, -{43,-12,21}, -{43,-12,22}, -{43,-12,23}, -{43,-12,24}, -{43,-12,25}, -{43,-12,26}, -{43,-12,27}, -{43,-12,28}, -{43,-12,29}, -{43,-12,30}, -{43,-12,31}, -{43,-12,32}, -{43,-12,33}, -{43,-12,34}, -{43,-12,35}, -{43,-12,36}, -{43,-12,37}, -{43,-12,38}, -{43,-12,39}, -{43,-12,40}, -{43,-12,41}, -{43,-12,42}, -{43,-12,43}, -{43,-12,44}, -{43,-12,45}, -{43,-12,46}, -{43,-12,47}, -{43,-12,48}, -{43,-12,49}, -{43,-11,-29}, -{43,-11,-28}, -{43,-11,-27}, -{43,-11,-26}, -{43,-11,-25}, -{43,-11,-24}, -{43,-11,-23}, -{43,-11,-22}, -{43,-11,-21}, -{43,-11,-20}, -{43,-11,-19}, -{43,-11,-18}, -{43,-11,-17}, -{43,-11,-16}, -{43,-11,-15}, -{43,-11,-14}, -{43,-11,-13}, -{43,-11,-12}, -{43,-11,-11}, -{43,-11,-10}, -{43,-11,-9}, -{43,-11,-8}, -{43,-11,-7}, -{43,-11,-6}, -{43,-11,-5}, -{43,-11,-4}, -{43,-11,-3}, -{43,-11,-2}, -{43,-11,-1}, -{43,-11,0}, -{43,-11,1}, -{43,-11,2}, -{43,-11,3}, -{43,-11,4}, -{43,-11,5}, -{43,-11,6}, -{43,-11,7}, -{43,-11,8}, -{43,-11,9}, -{43,-11,10}, -{43,-11,11}, -{43,-11,12}, -{43,-11,13}, -{43,-11,14}, -{43,-11,15}, -{43,-11,16}, -{43,-11,17}, -{43,-11,18}, -{43,-11,19}, -{43,-11,20}, -{43,-11,21}, -{43,-11,22}, -{43,-11,23}, -{43,-11,24}, -{43,-11,25}, -{43,-11,26}, -{43,-11,27}, -{43,-11,28}, -{43,-11,29}, -{43,-11,30}, -{43,-11,31}, -{43,-11,32}, -{43,-11,33}, -{43,-11,34}, -{43,-11,35}, -{43,-11,36}, -{43,-11,37}, -{43,-11,38}, -{43,-11,39}, -{43,-11,40}, -{43,-11,41}, -{43,-11,42}, -{43,-11,43}, -{43,-11,44}, -{43,-11,45}, -{43,-11,46}, -{43,-11,47}, -{43,-11,48}, -{43,-11,49}, -{43,-10,-30}, -{43,-10,-29}, -{43,-10,-28}, -{43,-10,-27}, -{43,-10,-26}, -{43,-10,-25}, -{43,-10,-24}, -{43,-10,-23}, -{43,-10,-22}, -{43,-10,-21}, -{43,-10,-20}, -{43,-10,-19}, -{43,-10,-18}, -{43,-10,-17}, -{43,-10,-16}, -{43,-10,-15}, -{43,-10,-14}, -{43,-10,-13}, -{43,-10,-12}, -{43,-10,-11}, -{43,-10,-10}, -{43,-10,-9}, -{43,-10,-8}, -{43,-10,-7}, -{43,-10,-6}, -{43,-10,-5}, -{43,-10,-4}, -{43,-10,-3}, -{43,-10,-2}, -{43,-10,-1}, -{43,-10,0}, -{43,-10,1}, -{43,-10,2}, -{43,-10,3}, -{43,-10,4}, -{43,-10,5}, -{43,-10,6}, -{43,-10,7}, -{43,-10,8}, -{43,-10,9}, -{43,-10,10}, -{43,-10,11}, -{43,-10,12}, -{43,-10,13}, -{43,-10,14}, -{43,-10,15}, -{43,-10,16}, -{43,-10,17}, -{43,-10,18}, -{43,-10,19}, -{43,-10,20}, -{43,-10,21}, -{43,-10,22}, -{43,-10,23}, -{43,-10,24}, -{43,-10,25}, -{43,-10,26}, -{43,-10,27}, -{43,-10,28}, -{43,-10,29}, -{43,-10,30}, -{43,-10,31}, -{43,-10,32}, -{43,-10,33}, -{43,-10,34}, -{43,-10,35}, -{43,-10,36}, -{43,-10,37}, -{43,-10,38}, -{43,-10,39}, -{43,-10,40}, -{43,-10,41}, -{43,-10,42}, -{43,-10,43}, -{43,-10,44}, -{43,-10,45}, -{43,-10,46}, -{43,-10,47}, -{43,-10,48}, -{43,-10,49}, -{43,-9,-32}, -{43,-9,-31}, -{43,-9,-30}, -{43,-9,-29}, -{43,-9,-28}, -{43,-9,-27}, -{43,-9,-26}, -{43,-9,-25}, -{43,-9,-24}, -{43,-9,-23}, -{43,-9,-22}, -{43,-9,-21}, -{43,-9,-20}, -{43,-9,-19}, -{43,-9,-18}, -{43,-9,-17}, -{43,-9,-16}, -{43,-9,-15}, -{43,-9,-14}, -{43,-9,-13}, -{43,-9,-12}, -{43,-9,-11}, -{43,-9,-10}, -{43,-9,-9}, -{43,-9,-8}, -{43,-9,-7}, -{43,-9,-6}, -{43,-9,-5}, -{43,-9,-4}, -{43,-9,-3}, -{43,-9,-2}, -{43,-9,-1}, -{43,-9,0}, -{43,-9,1}, -{43,-9,2}, -{43,-9,3}, -{43,-9,4}, -{43,-9,5}, -{43,-9,6}, -{43,-9,7}, -{43,-9,8}, -{43,-9,9}, -{43,-9,10}, -{43,-9,11}, -{43,-9,12}, -{43,-9,13}, -{43,-9,14}, -{43,-9,15}, -{43,-9,16}, -{43,-9,17}, -{43,-9,18}, -{43,-9,19}, -{43,-9,20}, -{43,-9,21}, -{43,-9,22}, -{43,-9,23}, -{43,-9,24}, -{43,-9,25}, -{43,-9,26}, -{43,-9,27}, -{43,-9,28}, -{43,-9,29}, -{43,-9,30}, -{43,-9,31}, -{43,-9,32}, -{43,-9,33}, -{43,-9,34}, -{43,-9,35}, -{43,-9,36}, -{43,-9,37}, -{43,-9,38}, -{43,-9,39}, -{43,-9,40}, -{43,-9,41}, -{43,-9,42}, -{43,-9,43}, -{43,-9,44}, -{43,-9,45}, -{43,-9,46}, -{43,-9,47}, -{43,-9,48}, -{43,-9,49}, -{43,-8,-33}, -{43,-8,-32}, -{43,-8,-31}, -{43,-8,-30}, -{43,-8,-29}, -{43,-8,-28}, -{43,-8,-27}, -{43,-8,-26}, -{43,-8,-25}, -{43,-8,-24}, -{43,-8,-23}, -{43,-8,-22}, -{43,-8,-21}, -{43,-8,-20}, -{43,-8,-19}, -{43,-8,-18}, -{43,-8,-17}, -{43,-8,-16}, -{43,-8,-15}, -{43,-8,-14}, -{43,-8,-13}, -{43,-8,-12}, -{43,-8,-11}, -{43,-8,-10}, -{43,-8,-9}, -{43,-8,-8}, -{43,-8,-7}, -{43,-8,-6}, -{43,-8,-5}, -{43,-8,-4}, -{43,-8,-3}, -{43,-8,-2}, -{43,-8,-1}, -{43,-8,0}, -{43,-8,1}, -{43,-8,2}, -{43,-8,3}, -{43,-8,4}, -{43,-8,5}, -{43,-8,6}, -{43,-8,7}, -{43,-8,8}, -{43,-8,9}, -{43,-8,10}, -{43,-8,11}, -{43,-8,12}, -{43,-8,13}, -{43,-8,14}, -{43,-8,15}, -{43,-8,16}, -{43,-8,17}, -{43,-8,18}, -{43,-8,19}, -{43,-8,20}, -{43,-8,21}, -{43,-8,22}, -{43,-8,23}, -{43,-8,24}, -{43,-8,25}, -{43,-8,26}, -{43,-8,27}, -{43,-8,28}, -{43,-8,29}, -{43,-8,30}, -{43,-8,31}, -{43,-8,32}, -{43,-8,33}, -{43,-8,34}, -{43,-8,35}, -{43,-8,36}, -{43,-8,37}, -{43,-8,38}, -{43,-8,39}, -{43,-8,40}, -{43,-8,41}, -{43,-8,42}, -{43,-8,43}, -{43,-8,44}, -{43,-8,45}, -{43,-8,46}, -{43,-8,47}, -{43,-8,48}, -{43,-8,49}, -{43,-7,-34}, -{43,-7,-33}, -{43,-7,-32}, -{43,-7,-31}, -{43,-7,-30}, -{43,-7,-29}, -{43,-7,-28}, -{43,-7,-27}, -{43,-7,-26}, -{43,-7,-25}, -{43,-7,-24}, -{43,-7,-23}, -{43,-7,-22}, -{43,-7,-21}, -{43,-7,-20}, -{43,-7,-19}, -{43,-7,-18}, -{43,-7,-17}, -{43,-7,-16}, -{43,-7,-15}, -{43,-7,-14}, -{43,-7,-13}, -{43,-7,-12}, -{43,-7,-11}, -{43,-7,-10}, -{43,-7,-9}, -{43,-7,-8}, -{43,-7,-7}, -{43,-7,-6}, -{43,-7,-5}, -{43,-7,-4}, -{43,-7,-3}, -{43,-7,-2}, -{43,-7,-1}, -{43,-7,0}, -{43,-7,1}, -{43,-7,2}, -{43,-7,3}, -{43,-7,4}, -{43,-7,5}, -{43,-7,6}, -{43,-7,7}, -{43,-7,8}, -{43,-7,9}, -{43,-7,10}, -{43,-7,11}, -{43,-7,12}, -{43,-7,13}, -{43,-7,14}, -{43,-7,15}, -{43,-7,16}, -{43,-7,17}, -{43,-7,18}, -{43,-7,19}, -{43,-7,20}, -{43,-7,21}, -{43,-7,22}, -{43,-7,23}, -{43,-7,24}, -{43,-7,25}, -{43,-7,26}, -{43,-7,27}, -{43,-7,28}, -{43,-7,29}, -{43,-7,30}, -{43,-7,31}, -{43,-7,32}, -{43,-7,33}, -{43,-7,34}, -{43,-7,35}, -{43,-7,36}, -{43,-7,37}, -{43,-7,38}, -{43,-7,39}, -{43,-7,40}, -{43,-7,41}, -{43,-7,42}, -{43,-7,43}, -{43,-7,44}, -{43,-7,45}, -{43,-7,46}, -{43,-7,47}, -{43,-7,48}, -{43,-7,49}, -{43,-6,-35}, -{43,-6,-34}, -{43,-6,-33}, -{43,-6,-32}, -{43,-6,-31}, -{43,-6,-30}, -{43,-6,-29}, -{43,-6,-28}, -{43,-6,-27}, -{43,-6,-26}, -{43,-6,-25}, -{43,-6,-24}, -{43,-6,-23}, -{43,-6,-22}, -{43,-6,-21}, -{43,-6,-20}, -{43,-6,-19}, -{43,-6,-18}, -{43,-6,-17}, -{43,-6,-16}, -{43,-6,-15}, -{43,-6,-14}, -{43,-6,-13}, -{43,-6,-12}, -{43,-6,-11}, -{43,-6,-10}, -{43,-6,-9}, -{43,-6,-8}, -{43,-6,-7}, -{43,-6,-6}, -{43,-6,-5}, -{43,-6,-4}, -{43,-6,-3}, -{43,-6,-2}, -{43,-6,-1}, -{43,-6,0}, -{43,-6,1}, -{43,-6,2}, -{43,-6,3}, -{43,-6,4}, -{43,-6,5}, -{43,-6,6}, -{43,-6,7}, -{43,-6,8}, -{43,-6,9}, -{43,-6,10}, -{43,-6,11}, -{43,-6,12}, -{43,-6,13}, -{43,-6,14}, -{43,-6,15}, -{43,-6,16}, -{43,-6,17}, -{43,-6,18}, -{43,-6,19}, -{43,-6,20}, -{43,-6,21}, -{43,-6,22}, -{43,-6,23}, -{43,-6,24}, -{43,-6,25}, -{43,-6,26}, -{43,-6,27}, -{43,-6,28}, -{43,-6,29}, -{43,-6,30}, -{43,-6,31}, -{43,-6,32}, -{43,-6,33}, -{43,-6,34}, -{43,-6,35}, -{43,-6,36}, -{43,-6,37}, -{43,-6,38}, -{43,-6,39}, -{43,-6,40}, -{43,-6,41}, -{43,-6,42}, -{43,-6,43}, -{43,-6,44}, -{43,-6,45}, -{43,-6,46}, -{43,-6,47}, -{43,-6,48}, -{43,-6,49}, -{43,-5,-36}, -{43,-5,-35}, -{43,-5,-34}, -{43,-5,-33}, -{43,-5,-32}, -{43,-5,-31}, -{43,-5,-30}, -{43,-5,-29}, -{43,-5,-28}, -{43,-5,-27}, -{43,-5,-26}, -{43,-5,-25}, -{43,-5,-24}, -{43,-5,-23}, -{43,-5,-22}, -{43,-5,-21}, -{43,-5,-20}, -{43,-5,-19}, -{43,-5,-18}, -{43,-5,-17}, -{43,-5,-16}, -{43,-5,-15}, -{43,-5,-14}, -{43,-5,-13}, -{43,-5,-12}, -{43,-5,-11}, -{43,-5,-10}, -{43,-5,-9}, -{43,-5,-8}, -{43,-5,-7}, -{43,-5,-6}, -{43,-5,-5}, -{43,-5,-4}, -{43,-5,-3}, -{43,-5,-2}, -{43,-5,-1}, -{43,-5,0}, -{43,-5,1}, -{43,-5,2}, -{43,-5,3}, -{43,-5,4}, -{43,-5,5}, -{43,-5,6}, -{43,-5,7}, -{43,-5,8}, -{43,-5,9}, -{43,-5,10}, -{43,-5,11}, -{43,-5,12}, -{43,-5,13}, -{43,-5,14}, -{43,-5,15}, -{43,-5,16}, -{43,-5,17}, -{43,-5,18}, -{43,-5,19}, -{43,-5,20}, -{43,-5,21}, -{43,-5,22}, -{43,-5,23}, -{43,-5,24}, -{43,-5,25}, -{43,-5,26}, -{43,-5,27}, -{43,-5,28}, -{43,-5,29}, -{43,-5,30}, -{43,-5,31}, -{43,-5,32}, -{43,-5,33}, -{43,-5,34}, -{43,-5,35}, -{43,-5,36}, -{43,-5,37}, -{43,-5,38}, -{43,-5,39}, -{43,-5,40}, -{43,-5,41}, -{43,-5,42}, -{43,-5,43}, -{43,-5,44}, -{43,-5,45}, -{43,-5,46}, -{43,-5,47}, -{43,-5,48}, -{43,-5,49}, -{43,-4,-37}, -{43,-4,-36}, -{43,-4,-35}, -{43,-4,-34}, -{43,-4,-33}, -{43,-4,-32}, -{43,-4,-31}, -{43,-4,-30}, -{43,-4,-29}, -{43,-4,-28}, -{43,-4,-27}, -{43,-4,-26}, -{43,-4,-25}, -{43,-4,-24}, -{43,-4,-23}, -{43,-4,-22}, -{43,-4,-21}, -{43,-4,-20}, -{43,-4,-19}, -{43,-4,-18}, -{43,-4,-17}, -{43,-4,-16}, -{43,-4,-15}, -{43,-4,-14}, -{43,-4,-13}, -{43,-4,-12}, -{43,-4,-11}, -{43,-4,-10}, -{43,-4,-9}, -{43,-4,-8}, -{43,-4,-7}, -{43,-4,-6}, -{43,-4,-5}, -{43,-4,-4}, -{43,-4,-3}, -{43,-4,-2}, -{43,-4,-1}, -{43,-4,0}, -{43,-4,1}, -{43,-4,2}, -{43,-4,3}, -{43,-4,4}, -{43,-4,5}, -{43,-4,6}, -{43,-4,7}, -{43,-4,8}, -{43,-4,9}, -{43,-4,10}, -{43,-4,11}, -{43,-4,12}, -{43,-4,13}, -{43,-4,14}, -{43,-4,15}, -{43,-4,16}, -{43,-4,17}, -{43,-4,18}, -{43,-4,19}, -{43,-4,20}, -{43,-4,21}, -{43,-4,22}, -{43,-4,23}, -{43,-4,24}, -{43,-4,25}, -{43,-4,26}, -{43,-4,27}, -{43,-4,28}, -{43,-4,29}, -{43,-4,30}, -{43,-4,31}, -{43,-4,32}, -{43,-4,33}, -{43,-4,34}, -{43,-4,35}, -{43,-4,36}, -{43,-4,37}, -{43,-4,38}, -{43,-4,39}, -{43,-4,40}, -{43,-4,41}, -{43,-4,42}, -{43,-4,43}, -{43,-4,44}, -{43,-4,45}, -{43,-4,46}, -{43,-4,47}, -{43,-4,48}, -{43,-4,49}, -{43,-3,-39}, -{43,-3,-38}, -{43,-3,-37}, -{43,-3,-36}, -{43,-3,-35}, -{43,-3,-34}, -{43,-3,-33}, -{43,-3,-32}, -{43,-3,-31}, -{43,-3,-30}, -{43,-3,-29}, -{43,-3,-28}, -{43,-3,-27}, -{43,-3,-26}, -{43,-3,-25}, -{43,-3,-24}, -{43,-3,-23}, -{43,-3,-22}, -{43,-3,-21}, -{43,-3,-20}, -{43,-3,-19}, -{43,-3,-18}, -{43,-3,-17}, -{43,-3,-16}, -{43,-3,-15}, -{43,-3,-14}, -{43,-3,-13}, -{43,-3,-12}, -{43,-3,-11}, -{43,-3,-10}, -{43,-3,-9}, -{43,-3,-8}, -{43,-3,-7}, -{43,-3,-6}, -{43,-3,-5}, -{43,-3,-4}, -{43,-3,-3}, -{43,-3,-2}, -{43,-3,-1}, -{43,-3,0}, -{43,-3,1}, -{43,-3,2}, -{43,-3,3}, -{43,-3,4}, -{43,-3,5}, -{43,-3,6}, -{43,-3,7}, -{43,-3,8}, -{43,-3,9}, -{43,-3,10}, -{43,-3,11}, -{43,-3,12}, -{43,-3,13}, -{43,-3,14}, -{43,-3,15}, -{43,-3,16}, -{43,-3,17}, -{43,-3,18}, -{43,-3,19}, -{43,-3,20}, -{43,-3,21}, -{43,-3,22}, -{43,-3,23}, -{43,-3,24}, -{43,-3,25}, -{43,-3,26}, -{43,-3,27}, -{43,-3,28}, -{43,-3,29}, -{43,-3,30}, -{43,-3,31}, -{43,-3,32}, -{43,-3,33}, -{43,-3,34}, -{43,-3,35}, -{43,-3,36}, -{43,-3,37}, -{43,-3,38}, -{43,-3,39}, -{43,-3,40}, -{43,-3,41}, -{43,-3,42}, -{43,-3,43}, -{43,-3,44}, -{43,-3,45}, -{43,-3,46}, -{43,-3,47}, -{43,-3,48}, -{43,-3,49}, -{43,-3,50}, -{43,-2,-40}, -{43,-2,-39}, -{43,-2,-38}, -{43,-2,-37}, -{43,-2,-36}, -{43,-2,-35}, -{43,-2,-34}, -{43,-2,-33}, -{43,-2,-32}, -{43,-2,-31}, -{43,-2,-30}, -{43,-2,-29}, -{43,-2,-28}, -{43,-2,-27}, -{43,-2,-26}, -{43,-2,-25}, -{43,-2,-24}, -{43,-2,-23}, -{43,-2,-22}, -{43,-2,-21}, -{43,-2,-20}, -{43,-2,-19}, -{43,-2,-18}, -{43,-2,-17}, -{43,-2,-16}, -{43,-2,-15}, -{43,-2,-14}, -{43,-2,-13}, -{43,-2,-12}, -{43,-2,-11}, -{43,-2,-10}, -{43,-2,-9}, -{43,-2,-8}, -{43,-2,-7}, -{43,-2,-6}, -{43,-2,-5}, -{43,-2,-4}, -{43,-2,-3}, -{43,-2,-2}, -{43,-2,-1}, -{43,-2,0}, -{43,-2,1}, -{43,-2,2}, -{43,-2,3}, -{43,-2,4}, -{43,-2,5}, -{43,-2,6}, -{43,-2,7}, -{43,-2,8}, -{43,-2,9}, -{43,-2,10}, -{43,-2,11}, -{43,-2,12}, -{43,-2,13}, -{43,-2,14}, -{43,-2,15}, -{43,-2,16}, -{43,-2,17}, -{43,-2,18}, -{43,-2,19}, -{43,-2,20}, -{43,-2,21}, -{43,-2,22}, -{43,-2,23}, -{43,-2,24}, -{43,-2,25}, -{43,-2,26}, -{43,-2,27}, -{43,-2,28}, -{43,-2,29}, -{43,-2,30}, -{43,-2,31}, -{43,-2,32}, -{43,-2,33}, -{43,-2,34}, -{43,-2,35}, -{43,-2,36}, -{43,-2,37}, -{43,-2,38}, -{43,-2,39}, -{43,-2,40}, -{43,-2,41}, -{43,-2,42}, -{43,-2,43}, -{43,-2,44}, -{43,-2,45}, -{43,-2,46}, -{43,-2,47}, -{43,-2,48}, -{43,-2,49}, -{43,-2,50}, -{43,-1,-41}, -{43,-1,-40}, -{43,-1,-39}, -{43,-1,-38}, -{43,-1,-37}, -{43,-1,-36}, -{43,-1,-35}, -{43,-1,-34}, -{43,-1,-33}, -{43,-1,-32}, -{43,-1,-31}, -{43,-1,-30}, -{43,-1,-29}, -{43,-1,-28}, -{43,-1,-27}, -{43,-1,-26}, -{43,-1,-25}, -{43,-1,-24}, -{43,-1,-23}, -{43,-1,-22}, -{43,-1,-21}, -{43,-1,-20}, -{43,-1,-19}, -{43,-1,-18}, -{43,-1,-17}, -{43,-1,-16}, -{43,-1,-15}, -{43,-1,-14}, -{43,-1,-13}, -{43,-1,-12}, -{43,-1,-11}, -{43,-1,-10}, -{43,-1,-9}, -{43,-1,-8}, -{43,-1,-7}, -{43,-1,-6}, -{43,-1,-5}, -{43,-1,-4}, -{43,-1,-3}, -{43,-1,-2}, -{43,-1,-1}, -{43,-1,0}, -{43,-1,1}, -{43,-1,2}, -{43,-1,3}, -{43,-1,4}, -{43,-1,5}, -{43,-1,6}, -{43,-1,7}, -{43,-1,8}, -{43,-1,9}, -{43,-1,10}, -{43,-1,11}, -{43,-1,12}, -{43,-1,13}, -{43,-1,14}, -{43,-1,15}, -{43,-1,16}, -{43,-1,17}, -{43,-1,18}, -{43,-1,19}, -{43,-1,20}, -{43,-1,21}, -{43,-1,22}, -{43,-1,23}, -{43,-1,24}, -{43,-1,25}, -{43,-1,26}, -{43,-1,27}, -{43,-1,28}, -{43,-1,29}, -{43,-1,30}, -{43,-1,31}, -{43,-1,32}, -{43,-1,33}, -{43,-1,34}, -{43,-1,35}, -{43,-1,36}, -{43,-1,37}, -{43,-1,38}, -{43,-1,39}, -{43,-1,40}, -{43,-1,41}, -{43,-1,42}, -{43,-1,43}, -{43,-1,44}, -{43,-1,45}, -{43,-1,46}, -{43,-1,47}, -{43,-1,48}, -{43,-1,49}, -{43,-1,50}, -{43,0,-42}, -{43,0,-41}, -{43,0,-40}, -{43,0,-39}, -{43,0,-38}, -{43,0,-37}, -{43,0,-36}, -{43,0,-35}, -{43,0,-34}, -{43,0,-33}, -{43,0,-32}, -{43,0,-31}, -{43,0,-30}, -{43,0,-29}, -{43,0,-28}, -{43,0,-27}, -{43,0,-26}, -{43,0,-25}, -{43,0,-24}, -{43,0,-23}, -{43,0,-22}, -{43,0,-21}, -{43,0,-20}, -{43,0,-19}, -{43,0,-18}, -{43,0,-17}, -{43,0,-16}, -{43,0,-15}, -{43,0,-14}, -{43,0,-13}, -{43,0,-12}, -{43,0,-11}, -{43,0,-10}, -{43,0,-9}, -{43,0,-8}, -{43,0,-7}, -{43,0,-6}, -{43,0,-5}, -{43,0,-4}, -{43,0,-3}, -{43,0,-2}, -{43,0,-1}, -{43,0,0}, -{43,0,1}, -{43,0,2}, -{43,0,3}, -{43,0,4}, -{43,0,5}, -{43,0,6}, -{43,0,7}, -{43,0,8}, -{43,0,9}, -{43,0,10}, -{43,0,11}, -{43,0,12}, -{43,0,13}, -{43,0,14}, -{43,0,15}, -{43,0,16}, -{43,0,17}, -{43,0,18}, -{43,0,19}, -{43,0,20}, -{43,0,21}, -{43,0,22}, -{43,0,23}, -{43,0,24}, -{43,0,25}, -{43,0,26}, -{43,0,27}, -{43,0,28}, -{43,0,29}, -{43,0,30}, -{43,0,31}, -{43,0,32}, -{43,0,33}, -{43,0,34}, -{43,0,35}, -{43,0,36}, -{43,0,37}, -{43,0,38}, -{43,0,39}, -{43,0,40}, -{43,0,41}, -{43,0,42}, -{43,0,43}, -{43,0,44}, -{43,0,45}, -{43,0,46}, -{43,0,47}, -{43,0,48}, -{43,0,49}, -{43,0,50}, -{43,1,-43}, -{43,1,-42}, -{43,1,-41}, -{43,1,-40}, -{43,1,-39}, -{43,1,-38}, -{43,1,-37}, -{43,1,-36}, -{43,1,-35}, -{43,1,-34}, -{43,1,-33}, -{43,1,-32}, -{43,1,-31}, -{43,1,-30}, -{43,1,-29}, -{43,1,-28}, -{43,1,-27}, -{43,1,-26}, -{43,1,-25}, -{43,1,-24}, -{43,1,-23}, -{43,1,-22}, -{43,1,-21}, -{43,1,-20}, -{43,1,-19}, -{43,1,-18}, -{43,1,-17}, -{43,1,-16}, -{43,1,-15}, -{43,1,-14}, -{43,1,-13}, -{43,1,-12}, -{43,1,-11}, -{43,1,-10}, -{43,1,-9}, -{43,1,-8}, -{43,1,-7}, -{43,1,-6}, -{43,1,-5}, -{43,1,-4}, -{43,1,-3}, -{43,1,-2}, -{43,1,-1}, -{43,1,0}, -{43,1,1}, -{43,1,2}, -{43,1,3}, -{43,1,4}, -{43,1,5}, -{43,1,6}, -{43,1,7}, -{43,1,8}, -{43,1,9}, -{43,1,10}, -{43,1,11}, -{43,1,12}, -{43,1,13}, -{43,1,14}, -{43,1,15}, -{43,1,16}, -{43,1,17}, -{43,1,18}, -{43,1,19}, -{43,1,20}, -{43,1,21}, -{43,1,22}, -{43,1,23}, -{43,1,24}, -{43,1,25}, -{43,1,26}, -{43,1,27}, -{43,1,28}, -{43,1,29}, -{43,1,30}, -{43,1,31}, -{43,1,32}, -{43,1,33}, -{43,1,34}, -{43,1,35}, -{43,1,36}, -{43,1,37}, -{43,1,38}, -{43,1,39}, -{43,1,40}, -{43,1,41}, -{43,1,42}, -{43,1,43}, -{43,1,44}, -{43,1,45}, -{43,1,46}, -{43,1,47}, -{43,1,48}, -{43,1,49}, -{43,1,50}, -{43,2,-44}, -{43,2,-43}, -{43,2,-42}, -{43,2,-41}, -{43,2,-40}, -{43,2,-39}, -{43,2,-38}, -{43,2,-37}, -{43,2,-36}, -{43,2,-35}, -{43,2,-34}, -{43,2,-33}, -{43,2,-32}, -{43,2,-31}, -{43,2,-30}, -{43,2,-29}, -{43,2,-28}, -{43,2,-27}, -{43,2,-26}, -{43,2,-25}, -{43,2,-24}, -{43,2,-23}, -{43,2,-22}, -{43,2,-21}, -{43,2,-20}, -{43,2,-19}, -{43,2,-18}, -{43,2,-17}, -{43,2,-16}, -{43,2,-15}, -{43,2,-14}, -{43,2,-13}, -{43,2,-12}, -{43,2,-11}, -{43,2,-10}, -{43,2,-9}, -{43,2,-8}, -{43,2,-7}, -{43,2,-6}, -{43,2,-5}, -{43,2,-4}, -{43,2,-3}, -{43,2,-2}, -{43,2,-1}, -{43,2,0}, -{43,2,1}, -{43,2,2}, -{43,2,3}, -{43,2,4}, -{43,2,5}, -{43,2,6}, -{43,2,7}, -{43,2,8}, -{43,2,9}, -{43,2,10}, -{43,2,11}, -{43,2,12}, -{43,2,13}, -{43,2,14}, -{43,2,15}, -{43,2,16}, -{43,2,17}, -{43,2,18}, -{43,2,19}, -{43,2,20}, -{43,2,21}, -{43,2,22}, -{43,2,23}, -{43,2,24}, -{43,2,25}, -{43,2,26}, -{43,2,27}, -{43,2,28}, -{43,2,29}, -{43,2,30}, -{43,2,31}, -{43,2,32}, -{43,2,33}, -{43,2,34}, -{43,2,35}, -{43,2,36}, -{43,2,37}, -{43,2,38}, -{43,2,39}, -{43,2,40}, -{43,2,41}, -{43,2,42}, -{43,2,43}, -{43,2,44}, -{43,2,45}, -{43,2,46}, -{43,2,47}, -{43,2,48}, -{43,2,49}, -{43,2,50}, -{43,3,-45}, -{43,3,-44}, -{43,3,-43}, -{43,3,-42}, -{43,3,-41}, -{43,3,-40}, -{43,3,-39}, -{43,3,-38}, -{43,3,-37}, -{43,3,-36}, -{43,3,-35}, -{43,3,-34}, -{43,3,-33}, -{43,3,-32}, -{43,3,-31}, -{43,3,-30}, -{43,3,-29}, -{43,3,-28}, -{43,3,-27}, -{43,3,-26}, -{43,3,-25}, -{43,3,-24}, -{43,3,-23}, -{43,3,-22}, -{43,3,-21}, -{43,3,-20}, -{43,3,-19}, -{43,3,-18}, -{43,3,-17}, -{43,3,-16}, -{43,3,-15}, -{43,3,-14}, -{43,3,-13}, -{43,3,-12}, -{43,3,-11}, -{43,3,-10}, -{43,3,-9}, -{43,3,-8}, -{43,3,-7}, -{43,3,-6}, -{43,3,-5}, -{43,3,-4}, -{43,3,-3}, -{43,3,-2}, -{43,3,-1}, -{43,3,0}, -{43,3,1}, -{43,3,2}, -{43,3,3}, -{43,3,4}, -{43,3,5}, -{43,3,6}, -{43,3,7}, -{43,3,8}, -{43,3,9}, -{43,3,10}, -{43,3,11}, -{43,3,12}, -{43,3,13}, -{43,3,14}, -{43,3,15}, -{43,3,16}, -{43,3,17}, -{43,3,18}, -{43,3,19}, -{43,3,20}, -{43,3,21}, -{43,3,22}, -{43,3,23}, -{43,3,24}, -{43,3,25}, -{43,3,26}, -{43,3,27}, -{43,3,28}, -{43,3,29}, -{43,3,30}, -{43,3,31}, -{43,3,32}, -{43,3,33}, -{43,3,34}, -{43,3,35}, -{43,3,36}, -{43,3,37}, -{43,3,38}, -{43,3,39}, -{43,3,40}, -{43,3,41}, -{43,3,42}, -{43,3,43}, -{43,3,44}, -{43,3,45}, -{43,3,46}, -{43,3,47}, -{43,3,48}, -{43,3,49}, -{43,3,50}, -{43,4,-47}, -{43,4,-46}, -{43,4,-45}, -{43,4,-44}, -{43,4,-43}, -{43,4,-42}, -{43,4,-41}, -{43,4,-40}, -{43,4,-39}, -{43,4,-38}, -{43,4,-37}, -{43,4,-36}, -{43,4,-35}, -{43,4,-34}, -{43,4,-33}, -{43,4,-32}, -{43,4,-31}, -{43,4,-30}, -{43,4,-29}, -{43,4,-28}, -{43,4,-27}, -{43,4,-26}, -{43,4,-25}, -{43,4,-24}, -{43,4,-23}, -{43,4,-22}, -{43,4,-21}, -{43,4,-20}, -{43,4,-19}, -{43,4,-18}, -{43,4,-17}, -{43,4,-16}, -{43,4,-15}, -{43,4,-14}, -{43,4,-13}, -{43,4,-12}, -{43,4,-11}, -{43,4,-10}, -{43,4,-9}, -{43,4,-8}, -{43,4,-7}, -{43,4,-6}, -{43,4,-5}, -{43,4,-4}, -{43,4,-3}, -{43,4,-2}, -{43,4,-1}, -{43,4,0}, -{43,4,1}, -{43,4,2}, -{43,4,3}, -{43,4,4}, -{43,4,5}, -{43,4,6}, -{43,4,7}, -{43,4,8}, -{43,4,9}, -{43,4,10}, -{43,4,11}, -{43,4,12}, -{43,4,13}, -{43,4,14}, -{43,4,15}, -{43,4,16}, -{43,4,17}, -{43,4,18}, -{43,4,19}, -{43,4,20}, -{43,4,21}, -{43,4,22}, -{43,4,23}, -{43,4,24}, -{43,4,25}, -{43,4,26}, -{43,4,27}, -{43,4,28}, -{43,4,29}, -{43,4,30}, -{43,4,31}, -{43,4,32}, -{43,4,33}, -{43,4,34}, -{43,4,35}, -{43,4,36}, -{43,4,37}, -{43,4,38}, -{43,4,39}, -{43,4,40}, -{43,4,41}, -{43,4,42}, -{43,4,43}, -{43,4,44}, -{43,4,45}, -{43,4,46}, -{43,4,47}, -{43,4,48}, -{43,4,49}, -{43,4,50}, -{43,5,-48}, -{43,5,-47}, -{43,5,-46}, -{43,5,-45}, -{43,5,-44}, -{43,5,-43}, -{43,5,-42}, -{43,5,-41}, -{43,5,-40}, -{43,5,-39}, -{43,5,-38}, -{43,5,-37}, -{43,5,-36}, -{43,5,-35}, -{43,5,-34}, -{43,5,-33}, -{43,5,-32}, -{43,5,-31}, -{43,5,-30}, -{43,5,-29}, -{43,5,-28}, -{43,5,-27}, -{43,5,-26}, -{43,5,-25}, -{43,5,-24}, -{43,5,-23}, -{43,5,-22}, -{43,5,-21}, -{43,5,-20}, -{43,5,-19}, -{43,5,-18}, -{43,5,-17}, -{43,5,-16}, -{43,5,-15}, -{43,5,-14}, -{43,5,-13}, -{43,5,-12}, -{43,5,-11}, -{43,5,-10}, -{43,5,-9}, -{43,5,-8}, -{43,5,-7}, -{43,5,-6}, -{43,5,-5}, -{43,5,-4}, -{43,5,-3}, -{43,5,-2}, -{43,5,-1}, -{43,5,0}, -{43,5,1}, -{43,5,2}, -{43,5,3}, -{43,5,4}, -{43,5,5}, -{43,5,6}, -{43,5,7}, -{43,5,8}, -{43,5,9}, -{43,5,10}, -{43,5,11}, -{43,5,12}, -{43,5,13}, -{43,5,14}, -{43,5,15}, -{43,5,16}, -{43,5,17}, -{43,5,18}, -{43,5,19}, -{43,5,20}, -{43,5,21}, -{43,5,22}, -{43,5,23}, -{43,5,24}, -{43,5,25}, -{43,5,26}, -{43,5,27}, -{43,5,28}, -{43,5,29}, -{43,5,30}, -{43,5,31}, -{43,5,32}, -{43,5,33}, -{43,5,34}, -{43,5,35}, -{43,5,36}, -{43,5,37}, -{43,5,38}, -{43,5,39}, -{43,5,40}, -{43,5,41}, -{43,5,42}, -{43,5,43}, -{43,5,44}, -{43,5,45}, -{43,5,46}, -{43,5,47}, -{43,5,48}, -{43,5,49}, -{43,5,50}, -{43,6,-49}, -{43,6,-48}, -{43,6,-47}, -{43,6,-46}, -{43,6,-45}, -{43,6,-44}, -{43,6,-43}, -{43,6,-42}, -{43,6,-41}, -{43,6,-40}, -{43,6,-39}, -{43,6,-38}, -{43,6,-37}, -{43,6,-36}, -{43,6,-35}, -{43,6,-34}, -{43,6,-33}, -{43,6,-32}, -{43,6,-31}, -{43,6,-30}, -{43,6,-29}, -{43,6,-28}, -{43,6,-27}, -{43,6,-26}, -{43,6,-25}, -{43,6,-24}, -{43,6,-23}, -{43,6,-22}, -{43,6,-21}, -{43,6,-20}, -{43,6,-19}, -{43,6,-18}, -{43,6,-17}, -{43,6,-16}, -{43,6,-15}, -{43,6,-14}, -{43,6,-13}, -{43,6,-12}, -{43,6,-11}, -{43,6,-10}, -{43,6,-9}, -{43,6,-8}, -{43,6,-7}, -{43,6,-6}, -{43,6,-5}, -{43,6,-4}, -{43,6,-3}, -{43,6,-2}, -{43,6,-1}, -{43,6,0}, -{43,6,1}, -{43,6,2}, -{43,6,3}, -{43,6,4}, -{43,6,5}, -{43,6,6}, -{43,6,7}, -{43,6,8}, -{43,6,9}, -{43,6,10}, -{43,6,11}, -{43,6,12}, -{43,6,13}, -{43,6,14}, -{43,6,15}, -{43,6,16}, -{43,6,17}, -{43,6,18}, -{43,6,19}, -{43,6,20}, -{43,6,21}, -{43,6,22}, -{43,6,23}, -{43,6,24}, -{43,6,25}, -{43,6,26}, -{43,6,27}, -{43,6,28}, -{43,6,29}, -{43,6,30}, -{43,6,31}, -{43,6,32}, -{43,6,33}, -{43,6,34}, -{43,6,35}, -{43,6,36}, -{43,6,37}, -{43,6,38}, -{43,6,39}, -{43,6,40}, -{43,6,41}, -{43,6,42}, -{43,6,43}, -{43,6,44}, -{43,6,45}, -{43,6,46}, -{43,6,47}, -{43,6,48}, -{43,6,49}, -{43,6,50}, -{43,7,-50}, -{43,7,-49}, -{43,7,-48}, -{43,7,-47}, -{43,7,-46}, -{43,7,-45}, -{43,7,-44}, -{43,7,-43}, -{43,7,-42}, -{43,7,-41}, -{43,7,-40}, -{43,7,-39}, -{43,7,-38}, -{43,7,-37}, -{43,7,-36}, -{43,7,-35}, -{43,7,-34}, -{43,7,-33}, -{43,7,-32}, -{43,7,-31}, -{43,7,-30}, -{43,7,-29}, -{43,7,-28}, -{43,7,-27}, -{43,7,-26}, -{43,7,-25}, -{43,7,-24}, -{43,7,-23}, -{43,7,-22}, -{43,7,-21}, -{43,7,-20}, -{43,7,-19}, -{43,7,-18}, -{43,7,-17}, -{43,7,-16}, -{43,7,-15}, -{43,7,-14}, -{43,7,-13}, -{43,7,-12}, -{43,7,-11}, -{43,7,-10}, -{43,7,-9}, -{43,7,-8}, -{43,7,-7}, -{43,7,-6}, -{43,7,-5}, -{43,7,-4}, -{43,7,-3}, -{43,7,-2}, -{43,7,-1}, -{43,7,0}, -{43,7,1}, -{43,7,2}, -{43,7,3}, -{43,7,4}, -{43,7,5}, -{43,7,6}, -{43,7,7}, -{43,7,8}, -{43,7,9}, -{43,7,10}, -{43,7,11}, -{43,7,12}, -{43,7,13}, -{43,7,14}, -{43,7,15}, -{43,7,16}, -{43,7,17}, -{43,7,18}, -{43,7,19}, -{43,7,20}, -{43,7,21}, -{43,7,22}, -{43,7,23}, -{43,7,24}, -{43,7,25}, -{43,7,26}, -{43,7,27}, -{43,7,28}, -{43,7,29}, -{43,7,30}, -{43,7,31}, -{43,7,32}, -{43,7,33}, -{43,7,34}, -{43,7,35}, -{43,7,36}, -{43,7,37}, -{43,7,38}, -{43,7,39}, -{43,7,40}, -{43,7,41}, -{43,7,42}, -{43,7,43}, -{43,7,44}, -{43,7,45}, -{43,7,46}, -{43,7,47}, -{43,7,48}, -{43,7,49}, -{43,7,50}, -{43,8,-51}, -{43,8,-50}, -{43,8,-49}, -{43,8,-48}, -{43,8,-47}, -{43,8,-46}, -{43,8,-45}, -{43,8,-44}, -{43,8,-43}, -{43,8,-42}, -{43,8,-41}, -{43,8,-40}, -{43,8,-39}, -{43,8,-38}, -{43,8,-37}, -{43,8,-36}, -{43,8,-35}, -{43,8,-34}, -{43,8,-33}, -{43,8,-32}, -{43,8,-31}, -{43,8,-30}, -{43,8,-29}, -{43,8,-28}, -{43,8,-27}, -{43,8,-26}, -{43,8,-25}, -{43,8,-24}, -{43,8,-23}, -{43,8,-22}, -{43,8,-21}, -{43,8,-20}, -{43,8,-19}, -{43,8,-18}, -{43,8,-17}, -{43,8,-16}, -{43,8,-15}, -{43,8,-14}, -{43,8,-13}, -{43,8,-12}, -{43,8,-11}, -{43,8,-10}, -{43,8,-9}, -{43,8,-8}, -{43,8,-7}, -{43,8,-6}, -{43,8,-5}, -{43,8,-4}, -{43,8,-3}, -{43,8,-2}, -{43,8,-1}, -{43,8,0}, -{43,8,1}, -{43,8,2}, -{43,8,3}, -{43,8,4}, -{43,8,5}, -{43,8,6}, -{43,8,7}, -{43,8,8}, -{43,8,9}, -{43,8,10}, -{43,8,11}, -{43,8,12}, -{43,8,13}, -{43,8,14}, -{43,8,15}, -{43,8,16}, -{43,8,17}, -{43,8,18}, -{43,8,19}, -{43,8,20}, -{43,8,21}, -{43,8,22}, -{43,8,23}, -{43,8,24}, -{43,8,25}, -{43,8,26}, -{43,8,27}, -{43,8,28}, -{43,8,29}, -{43,8,30}, -{43,8,31}, -{43,8,32}, -{43,8,33}, -{43,8,34}, -{43,8,35}, -{43,8,36}, -{43,8,37}, -{43,8,38}, -{43,8,39}, -{43,8,40}, -{43,8,41}, -{43,8,42}, -{43,8,43}, -{43,8,44}, -{43,8,45}, -{43,8,46}, -{43,8,47}, -{43,8,48}, -{43,8,49}, -{43,8,50}, -{43,9,-52}, -{43,9,-51}, -{43,9,-50}, -{43,9,-49}, -{43,9,-48}, -{43,9,-47}, -{43,9,-46}, -{43,9,-45}, -{43,9,-44}, -{43,9,-43}, -{43,9,-42}, -{43,9,-41}, -{43,9,-40}, -{43,9,-39}, -{43,9,-38}, -{43,9,-37}, -{43,9,-36}, -{43,9,-35}, -{43,9,-34}, -{43,9,-33}, -{43,9,-32}, -{43,9,-31}, -{43,9,-30}, -{43,9,-29}, -{43,9,-28}, -{43,9,-27}, -{43,9,-26}, -{43,9,-25}, -{43,9,-24}, -{43,9,-23}, -{43,9,-22}, -{43,9,-21}, -{43,9,-20}, -{43,9,-19}, -{43,9,-18}, -{43,9,-17}, -{43,9,-16}, -{43,9,-15}, -{43,9,-14}, -{43,9,-13}, -{43,9,-12}, -{43,9,-11}, -{43,9,-10}, -{43,9,-9}, -{43,9,-8}, -{43,9,-7}, -{43,9,-6}, -{43,9,-5}, -{43,9,-4}, -{43,9,-3}, -{43,9,-2}, -{43,9,-1}, -{43,9,0}, -{43,9,1}, -{43,9,2}, -{43,9,3}, -{43,9,4}, -{43,9,5}, -{43,9,6}, -{43,9,7}, -{43,9,8}, -{43,9,9}, -{43,9,10}, -{43,9,11}, -{43,9,12}, -{43,9,13}, -{43,9,14}, -{43,9,15}, -{43,9,16}, -{43,9,17}, -{43,9,18}, -{43,9,19}, -{43,9,20}, -{43,9,21}, -{43,9,22}, -{43,9,23}, -{43,9,24}, -{43,9,25}, -{43,9,26}, -{43,9,27}, -{43,9,28}, -{43,9,29}, -{43,9,30}, -{43,9,31}, -{43,9,32}, -{43,9,33}, -{43,9,34}, -{43,9,35}, -{43,9,36}, -{43,9,37}, -{43,9,38}, -{43,9,39}, -{43,9,40}, -{43,9,41}, -{43,9,42}, -{43,9,43}, -{43,9,44}, -{43,9,45}, -{43,9,46}, -{43,9,47}, -{43,9,48}, -{43,9,49}, -{43,9,50}, -{43,10,-53}, -{43,10,-52}, -{43,10,-51}, -{43,10,-50}, -{43,10,-49}, -{43,10,-48}, -{43,10,-47}, -{43,10,-46}, -{43,10,-45}, -{43,10,-44}, -{43,10,-43}, -{43,10,-42}, -{43,10,-41}, -{43,10,-40}, -{43,10,-39}, -{43,10,-38}, -{43,10,-37}, -{43,10,-36}, -{43,10,-35}, -{43,10,-34}, -{43,10,-33}, -{43,10,-32}, -{43,10,-31}, -{43,10,-30}, -{43,10,-29}, -{43,10,-28}, -{43,10,-27}, -{43,10,-26}, -{43,10,-25}, -{43,10,-24}, -{43,10,-23}, -{43,10,-22}, -{43,10,-21}, -{43,10,-20}, -{43,10,-19}, -{43,10,-18}, -{43,10,-17}, -{43,10,-16}, -{43,10,-15}, -{43,10,-14}, -{43,10,-13}, -{43,10,-12}, -{43,10,-11}, -{43,10,-10}, -{43,10,-9}, -{43,10,-8}, -{43,10,-7}, -{43,10,-6}, -{43,10,-5}, -{43,10,-4}, -{43,10,-3}, -{43,10,-2}, -{43,10,-1}, -{43,10,0}, -{43,10,1}, -{43,10,2}, -{43,10,3}, -{43,10,4}, -{43,10,5}, -{43,10,6}, -{43,10,7}, -{43,10,8}, -{43,10,9}, -{43,10,10}, -{43,10,11}, -{43,10,12}, -{43,10,13}, -{43,10,14}, -{43,10,15}, -{43,10,16}, -{43,10,17}, -{43,10,18}, -{43,10,19}, -{43,10,20}, -{43,10,21}, -{43,10,22}, -{43,10,23}, -{43,10,24}, -{43,10,25}, -{43,10,26}, -{43,10,27}, -{43,10,28}, -{43,10,29}, -{43,10,30}, -{43,10,31}, -{43,10,32}, -{43,10,33}, -{43,10,34}, -{43,10,35}, -{43,10,36}, -{43,10,37}, -{43,10,38}, -{43,10,39}, -{43,10,40}, -{43,10,41}, -{43,10,42}, -{43,10,43}, -{43,10,44}, -{43,10,45}, -{43,10,46}, -{43,10,47}, -{43,10,48}, -{43,10,49}, -{43,10,50}, -{43,11,-54}, -{43,11,-53}, -{43,11,-52}, -{43,11,-51}, -{43,11,-50}, -{43,11,-49}, -{43,11,-48}, -{43,11,-47}, -{43,11,-46}, -{43,11,-45}, -{43,11,-44}, -{43,11,-43}, -{43,11,-42}, -{43,11,-41}, -{43,11,-40}, -{43,11,-39}, -{43,11,-38}, -{43,11,-37}, -{43,11,-36}, -{43,11,-35}, -{43,11,-34}, -{43,11,-33}, -{43,11,-32}, -{43,11,-31}, -{43,11,-30}, -{43,11,-29}, -{43,11,-28}, -{43,11,-27}, -{43,11,-26}, -{43,11,-25}, -{43,11,-24}, -{43,11,-23}, -{43,11,-22}, -{43,11,-21}, -{43,11,-20}, -{43,11,-19}, -{43,11,-18}, -{43,11,-17}, -{43,11,-16}, -{43,11,-15}, -{43,11,-14}, -{43,11,-13}, -{43,11,-12}, -{43,11,-11}, -{43,11,-10}, -{43,11,-9}, -{43,11,-8}, -{43,11,-7}, -{43,11,-6}, -{43,11,-5}, -{43,11,-4}, -{43,11,-3}, -{43,11,-2}, -{43,11,-1}, -{43,11,0}, -{43,11,1}, -{43,11,2}, -{43,11,3}, -{43,11,4}, -{43,11,5}, -{43,11,6}, -{43,11,7}, -{43,11,8}, -{43,11,9}, -{43,11,10}, -{43,11,11}, -{43,11,12}, -{43,11,13}, -{43,11,14}, -{43,11,15}, -{43,11,16}, -{43,11,17}, -{43,11,18}, -{43,11,19}, -{43,11,20}, -{43,11,21}, -{43,11,22}, -{43,11,23}, -{43,11,24}, -{43,11,25}, -{43,11,26}, -{43,11,27}, -{43,11,28}, -{43,11,29}, -{43,11,30}, -{43,11,31}, -{43,11,32}, -{43,11,33}, -{43,11,34}, -{43,11,35}, -{43,11,36}, -{43,11,37}, -{43,11,38}, -{43,11,39}, -{43,11,40}, -{43,11,41}, -{43,11,42}, -{43,11,43}, -{43,11,44}, -{43,11,45}, -{43,11,46}, -{43,11,47}, -{43,11,48}, -{43,11,49}, -{43,11,50}, -{43,11,51}, -{43,12,-55}, -{43,12,-54}, -{43,12,-53}, -{43,12,-52}, -{43,12,-51}, -{43,12,-50}, -{43,12,-49}, -{43,12,-48}, -{43,12,-47}, -{43,12,-46}, -{43,12,-45}, -{43,12,-44}, -{43,12,-43}, -{43,12,-42}, -{43,12,-41}, -{43,12,-40}, -{43,12,-39}, -{43,12,-38}, -{43,12,-37}, -{43,12,-36}, -{43,12,-35}, -{43,12,-34}, -{43,12,-33}, -{43,12,-32}, -{43,12,-31}, -{43,12,-30}, -{43,12,-29}, -{43,12,-28}, -{43,12,-27}, -{43,12,-26}, -{43,12,-25}, -{43,12,-24}, -{43,12,-23}, -{43,12,-22}, -{43,12,-21}, -{43,12,-20}, -{43,12,-19}, -{43,12,-18}, -{43,12,-17}, -{43,12,-16}, -{43,12,-15}, -{43,12,-14}, -{43,12,-13}, -{43,12,-12}, -{43,12,-11}, -{43,12,-10}, -{43,12,-9}, -{43,12,-8}, -{43,12,-7}, -{43,12,-6}, -{43,12,-5}, -{43,12,-4}, -{43,12,-3}, -{43,12,-2}, -{43,12,-1}, -{43,12,0}, -{43,12,1}, -{43,12,2}, -{43,12,3}, -{43,12,4}, -{43,12,5}, -{43,12,6}, -{43,12,7}, -{43,12,8}, -{43,12,9}, -{43,12,10}, -{43,12,11}, -{43,12,12}, -{43,12,13}, -{43,12,14}, -{43,12,15}, -{43,12,16}, -{43,12,17}, -{43,12,18}, -{43,12,19}, -{43,12,20}, -{43,12,21}, -{43,12,22}, -{43,12,23}, -{43,12,24}, -{43,12,25}, -{43,12,26}, -{43,12,27}, -{43,12,28}, -{43,12,29}, -{43,12,30}, -{43,12,31}, -{43,12,32}, -{43,12,33}, -{43,12,34}, -{43,12,35}, -{43,12,36}, -{43,12,37}, -{43,12,38}, -{43,12,39}, -{43,12,40}, -{43,12,41}, -{43,12,42}, -{43,12,43}, -{43,12,44}, -{43,12,45}, -{43,12,46}, -{43,12,47}, -{43,12,48}, -{43,12,49}, -{43,12,50}, -{43,12,51}, -{43,13,-56}, -{43,13,-55}, -{43,13,-54}, -{43,13,-53}, -{43,13,-52}, -{43,13,-51}, -{43,13,-50}, -{43,13,-49}, -{43,13,-48}, -{43,13,-47}, -{43,13,-46}, -{43,13,-45}, -{43,13,-44}, -{43,13,-43}, -{43,13,-42}, -{43,13,-41}, -{43,13,-40}, -{43,13,-39}, -{43,13,-38}, -{43,13,-37}, -{43,13,-36}, -{43,13,-35}, -{43,13,-34}, -{43,13,-33}, -{43,13,-32}, -{43,13,-31}, -{43,13,-30}, -{43,13,-29}, -{43,13,-28}, -{43,13,-27}, -{43,13,-26}, -{43,13,-25}, -{43,13,-24}, -{43,13,-23}, -{43,13,-22}, -{43,13,-21}, -{43,13,-20}, -{43,13,-19}, -{43,13,-18}, -{43,13,-17}, -{43,13,-16}, -{43,13,-15}, -{43,13,-14}, -{43,13,-13}, -{43,13,-12}, -{43,13,-11}, -{43,13,-10}, -{43,13,-9}, -{43,13,-8}, -{43,13,-7}, -{43,13,-6}, -{43,13,-5}, -{43,13,-4}, -{43,13,-3}, -{43,13,-2}, -{43,13,-1}, -{43,13,0}, -{43,13,1}, -{43,13,2}, -{43,13,3}, -{43,13,4}, -{43,13,5}, -{43,13,6}, -{43,13,7}, -{43,13,8}, -{43,13,9}, -{43,13,10}, -{43,13,11}, -{43,13,12}, -{43,13,13}, -{43,13,14}, -{43,13,15}, -{43,13,16}, -{43,13,17}, -{43,13,18}, -{43,13,19}, -{43,13,20}, -{43,13,21}, -{43,13,22}, -{43,13,23}, -{43,13,24}, -{43,13,25}, -{43,13,26}, -{43,13,27}, -{43,13,28}, -{43,13,29}, -{43,13,30}, -{43,13,31}, -{43,13,32}, -{43,13,33}, -{43,13,34}, -{43,13,35}, -{43,13,36}, -{43,13,37}, -{43,13,38}, -{43,13,39}, -{43,13,40}, -{43,13,41}, -{43,13,42}, -{43,13,43}, -{43,13,44}, -{43,13,45}, -{43,13,46}, -{43,13,47}, -{43,13,48}, -{43,13,49}, -{43,13,50}, -{43,13,51}, -{43,14,-57}, -{43,14,-56}, -{43,14,-55}, -{43,14,-54}, -{43,14,-53}, -{43,14,-52}, -{43,14,-51}, -{43,14,-50}, -{43,14,-49}, -{43,14,-48}, -{43,14,-47}, -{43,14,-46}, -{43,14,-45}, -{43,14,-44}, -{43,14,-43}, -{43,14,-42}, -{43,14,-41}, -{43,14,-40}, -{43,14,-39}, -{43,14,-38}, -{43,14,-37}, -{43,14,-36}, -{43,14,-35}, -{43,14,-34}, -{43,14,-33}, -{43,14,-32}, -{43,14,-31}, -{43,14,-30}, -{43,14,-29}, -{43,14,-28}, -{43,14,-27}, -{43,14,-26}, -{43,14,-25}, -{43,14,-24}, -{43,14,-23}, -{43,14,-22}, -{43,14,-21}, -{43,14,-20}, -{43,14,-19}, -{43,14,-18}, -{43,14,-17}, -{43,14,-16}, -{43,14,-15}, -{43,14,-14}, -{43,14,-13}, -{43,14,-12}, -{43,14,-11}, -{43,14,-10}, -{43,14,-9}, -{43,14,-8}, -{43,14,-7}, -{43,14,-6}, -{43,14,-5}, -{43,14,-4}, -{43,14,-3}, -{43,14,-2}, -{43,14,-1}, -{43,14,0}, -{43,14,1}, -{43,14,2}, -{43,14,3}, -{43,14,4}, -{43,14,5}, -{43,14,6}, -{43,14,7}, -{43,14,8}, -{43,14,9}, -{43,14,10}, -{43,14,11}, -{43,14,12}, -{43,14,13}, -{43,14,14}, -{43,14,15}, -{43,14,16}, -{43,14,17}, -{43,14,18}, -{43,14,19}, -{43,14,20}, -{43,14,21}, -{43,14,22}, -{43,14,23}, -{43,14,24}, -{43,14,25}, -{43,14,26}, -{43,14,27}, -{43,14,28}, -{43,14,29}, -{43,14,30}, -{43,14,31}, -{43,14,32}, -{43,14,33}, -{43,14,34}, -{43,14,35}, -{43,14,36}, -{43,14,37}, -{43,14,38}, -{43,14,39}, -{43,14,40}, -{43,14,41}, -{43,14,42}, -{43,14,43}, -{43,14,44}, -{43,14,45}, -{43,14,46}, -{43,14,47}, -{43,14,48}, -{43,14,49}, -{43,14,50}, -{43,14,51}, -{43,15,-58}, -{43,15,-57}, -{43,15,-56}, -{43,15,-55}, -{43,15,-54}, -{43,15,-53}, -{43,15,-52}, -{43,15,-51}, -{43,15,-50}, -{43,15,-49}, -{43,15,-48}, -{43,15,-47}, -{43,15,-46}, -{43,15,-45}, -{43,15,-44}, -{43,15,-43}, -{43,15,-42}, -{43,15,-41}, -{43,15,-40}, -{43,15,-39}, -{43,15,-38}, -{43,15,-37}, -{43,15,-36}, -{43,15,-35}, -{43,15,-34}, -{43,15,-33}, -{43,15,-32}, -{43,15,-31}, -{43,15,-30}, -{43,15,-29}, -{43,15,-28}, -{43,15,-27}, -{43,15,-26}, -{43,15,-25}, -{43,15,-24}, -{43,15,-23}, -{43,15,-22}, -{43,15,-21}, -{43,15,-20}, -{43,15,-19}, -{43,15,-18}, -{43,15,-17}, -{43,15,-16}, -{43,15,-15}, -{43,15,-14}, -{43,15,-13}, -{43,15,-12}, -{43,15,-11}, -{43,15,-10}, -{43,15,-9}, -{43,15,-8}, -{43,15,-7}, -{43,15,-6}, -{43,15,-5}, -{43,15,-4}, -{43,15,-3}, -{43,15,-2}, -{43,15,-1}, -{43,15,0}, -{43,15,1}, -{43,15,2}, -{43,15,3}, -{43,15,4}, -{43,15,5}, -{43,15,6}, -{43,15,7}, -{43,15,8}, -{43,15,9}, -{43,15,10}, -{43,15,11}, -{43,15,12}, -{43,15,13}, -{43,15,14}, -{43,15,15}, -{43,15,16}, -{43,15,17}, -{43,15,18}, -{43,15,19}, -{43,15,20}, -{43,15,21}, -{43,15,22}, -{43,15,23}, -{43,15,24}, -{43,15,25}, -{43,15,26}, -{43,15,27}, -{43,15,28}, -{43,15,29}, -{43,15,30}, -{43,15,31}, -{43,15,32}, -{43,15,33}, -{43,15,34}, -{43,15,35}, -{43,15,36}, -{43,15,37}, -{43,15,38}, -{43,15,39}, -{43,15,40}, -{43,15,41}, -{43,15,42}, -{43,15,43}, -{43,15,44}, -{43,15,45}, -{43,15,46}, -{43,15,47}, -{43,15,48}, -{43,15,49}, -{43,15,50}, -{43,15,51}, -{43,16,-59}, -{43,16,-58}, -{43,16,-57}, -{43,16,-56}, -{43,16,-55}, -{43,16,-54}, -{43,16,-53}, -{43,16,-52}, -{43,16,-51}, -{43,16,-50}, -{43,16,-49}, -{43,16,-48}, -{43,16,-47}, -{43,16,-46}, -{43,16,-45}, -{43,16,-44}, -{43,16,-43}, -{43,16,-42}, -{43,16,-41}, -{43,16,-40}, -{43,16,-39}, -{43,16,-38}, -{43,16,-37}, -{43,16,-36}, -{43,16,-35}, -{43,16,-34}, -{43,16,-33}, -{43,16,-32}, -{43,16,-31}, -{43,16,-30}, -{43,16,-29}, -{43,16,-28}, -{43,16,-27}, -{43,16,-26}, -{43,16,-25}, -{43,16,-24}, -{43,16,-23}, -{43,16,-22}, -{43,16,-21}, -{43,16,-20}, -{43,16,-19}, -{43,16,-18}, -{43,16,-17}, -{43,16,-16}, -{43,16,-15}, -{43,16,-14}, -{43,16,-13}, -{43,16,-12}, -{43,16,-11}, -{43,16,-10}, -{43,16,-9}, -{43,16,-8}, -{43,16,-7}, -{43,16,-6}, -{43,16,-5}, -{43,16,-4}, -{43,16,-3}, -{43,16,-2}, -{43,16,-1}, -{43,16,0}, -{43,16,1}, -{43,16,2}, -{43,16,3}, -{43,16,4}, -{43,16,5}, -{43,16,6}, -{43,16,7}, -{43,16,8}, -{43,16,9}, -{43,16,10}, -{43,16,11}, -{43,16,12}, -{43,16,13}, -{43,16,14}, -{43,16,15}, -{43,16,16}, -{43,16,17}, -{43,16,18}, -{43,16,19}, -{43,16,20}, -{43,16,21}, -{43,16,22}, -{43,16,23}, -{43,16,24}, -{43,16,25}, -{43,16,26}, -{43,16,27}, -{43,16,28}, -{43,16,29}, -{43,16,30}, -{43,16,31}, -{43,16,32}, -{43,16,33}, -{43,16,34}, -{43,16,35}, -{43,16,36}, -{43,16,37}, -{43,16,38}, -{43,16,39}, -{43,16,40}, -{43,16,41}, -{43,16,42}, -{43,16,43}, -{43,16,44}, -{43,16,45}, -{43,16,46}, -{43,16,47}, -{43,16,48}, -{43,16,49}, -{43,16,50}, -{43,16,51}, -{43,17,-60}, -{43,17,-59}, -{43,17,-58}, -{43,17,-57}, -{43,17,-56}, -{43,17,-55}, -{43,17,-54}, -{43,17,-53}, -{43,17,-52}, -{43,17,-51}, -{43,17,-50}, -{43,17,-49}, -{43,17,-48}, -{43,17,-47}, -{43,17,-46}, -{43,17,-45}, -{43,17,-44}, -{43,17,-43}, -{43,17,-42}, -{43,17,-41}, -{43,17,-40}, -{43,17,-39}, -{43,17,-38}, -{43,17,-37}, -{43,17,-36}, -{43,17,-35}, -{43,17,-34}, -{43,17,-33}, -{43,17,-32}, -{43,17,-31}, -{43,17,-30}, -{43,17,-29}, -{43,17,-28}, -{43,17,-27}, -{43,17,-26}, -{43,17,-25}, -{43,17,-24}, -{43,17,-23}, -{43,17,-22}, -{43,17,-21}, -{43,17,-20}, -{43,17,-19}, -{43,17,-18}, -{43,17,-17}, -{43,17,-16}, -{43,17,-15}, -{43,17,-14}, -{43,17,-13}, -{43,17,-12}, -{43,17,-11}, -{43,17,-10}, -{43,17,-9}, -{43,17,-8}, -{43,17,-7}, -{43,17,-6}, -{43,17,-5}, -{43,17,-4}, -{43,17,-3}, -{43,17,-2}, -{43,17,-1}, -{43,17,0}, -{43,17,1}, -{43,17,2}, -{43,17,3}, -{43,17,4}, -{43,17,5}, -{43,17,6}, -{43,17,7}, -{43,17,8}, -{43,17,9}, -{43,17,10}, -{43,17,11}, -{43,17,12}, -{43,17,13}, -{43,17,14}, -{43,17,15}, -{43,17,16}, -{43,17,17}, -{43,17,18}, -{43,17,19}, -{43,17,20}, -{43,17,21}, -{43,17,22}, -{43,17,23}, -{43,17,24}, -{43,17,25}, -{43,17,26}, -{43,17,27}, -{43,17,28}, -{43,17,29}, -{43,17,30}, -{43,17,31}, -{43,17,32}, -{43,17,33}, -{43,17,34}, -{43,17,35}, -{43,17,36}, -{43,17,37}, -{43,17,38}, -{43,17,39}, -{43,17,40}, -{43,17,41}, -{43,17,42}, -{43,17,43}, -{43,17,44}, -{43,17,45}, -{43,17,46}, -{43,17,47}, -{43,17,48}, -{43,17,49}, -{43,17,50}, -{43,17,51}, -{43,18,-61}, -{43,18,-60}, -{43,18,-59}, -{43,18,-58}, -{43,18,-57}, -{43,18,-56}, -{43,18,-55}, -{43,18,-54}, -{43,18,-53}, -{43,18,-52}, -{43,18,-51}, -{43,18,-50}, -{43,18,-49}, -{43,18,-48}, -{43,18,-47}, -{43,18,-46}, -{43,18,-45}, -{43,18,-44}, -{43,18,-43}, -{43,18,-42}, -{43,18,-41}, -{43,18,-40}, -{43,18,-39}, -{43,18,-38}, -{43,18,-37}, -{43,18,-36}, -{43,18,-35}, -{43,18,-34}, -{43,18,-33}, -{43,18,-32}, -{43,18,-31}, -{43,18,-30}, -{43,18,-29}, -{43,18,-28}, -{43,18,-27}, -{43,18,-26}, -{43,18,-25}, -{43,18,-24}, -{43,18,-23}, -{43,18,-22}, -{43,18,-21}, -{43,18,-20}, -{43,18,-19}, -{43,18,-18}, -{43,18,-17}, -{43,18,-16}, -{43,18,-15}, -{43,18,-14}, -{43,18,-13}, -{43,18,-12}, -{43,18,-11}, -{43,18,-10}, -{43,18,-9}, -{43,18,-8}, -{43,18,-7}, -{43,18,-6}, -{43,18,-5}, -{43,18,-4}, -{43,18,-3}, -{43,18,-2}, -{43,18,-1}, -{43,18,0}, -{43,18,1}, -{43,18,2}, -{43,18,3}, -{43,18,4}, -{43,18,5}, -{43,18,6}, -{43,18,7}, -{43,18,8}, -{43,18,9}, -{43,18,10}, -{43,18,11}, -{43,18,12}, -{43,18,13}, -{43,18,14}, -{43,18,15}, -{43,18,16}, -{43,18,17}, -{43,18,18}, -{43,18,19}, -{43,18,20}, -{43,18,21}, -{43,18,22}, -{43,18,23}, -{43,18,24}, -{43,18,25}, -{43,18,26}, -{43,18,27}, -{43,18,28}, -{43,18,29}, -{43,18,30}, -{43,18,31}, -{43,18,32}, -{43,18,33}, -{43,18,34}, -{43,18,35}, -{43,18,36}, -{43,18,37}, -{43,18,38}, -{43,18,39}, -{43,18,40}, -{43,18,41}, -{43,18,42}, -{43,18,43}, -{43,18,44}, -{43,18,45}, -{43,18,46}, -{43,18,47}, -{43,18,48}, -{43,18,49}, -{43,18,50}, -{43,18,51}, -{43,19,-62}, -{43,19,-61}, -{43,19,-60}, -{43,19,-59}, -{43,19,-58}, -{43,19,-57}, -{43,19,-56}, -{43,19,-55}, -{43,19,-54}, -{43,19,-53}, -{43,19,-52}, -{43,19,-51}, -{43,19,-50}, -{43,19,-49}, -{43,19,-48}, -{43,19,-47}, -{43,19,-46}, -{43,19,-45}, -{43,19,-44}, -{43,19,-43}, -{43,19,-42}, -{43,19,-41}, -{43,19,-40}, -{43,19,-39}, -{43,19,-38}, -{43,19,-37}, -{43,19,-36}, -{43,19,-35}, -{43,19,-34}, -{43,19,-33}, -{43,19,-32}, -{43,19,-31}, -{43,19,-30}, -{43,19,-29}, -{43,19,-28}, -{43,19,-27}, -{43,19,-26}, -{43,19,-25}, -{43,19,-24}, -{43,19,-23}, -{43,19,-22}, -{43,19,-21}, -{43,19,-20}, -{43,19,-19}, -{43,19,-18}, -{43,19,-17}, -{43,19,-16}, -{43,19,-15}, -{43,19,-14}, -{43,19,-13}, -{43,19,-12}, -{43,19,-11}, -{43,19,-10}, -{43,19,-9}, -{43,19,-8}, -{43,19,-7}, -{43,19,-6}, -{43,19,-5}, -{43,19,-4}, -{43,19,-3}, -{43,19,-2}, -{43,19,-1}, -{43,19,0}, -{43,19,1}, -{43,19,2}, -{43,19,3}, -{43,19,4}, -{43,19,5}, -{43,19,6}, -{43,19,7}, -{43,19,8}, -{43,19,9}, -{43,19,10}, -{43,19,11}, -{43,19,12}, -{43,19,13}, -{43,19,14}, -{43,19,15}, -{43,19,16}, -{43,19,17}, -{43,19,18}, -{43,19,19}, -{43,19,20}, -{43,19,21}, -{43,19,22}, -{43,19,23}, -{43,19,24}, -{43,19,25}, -{43,19,26}, -{43,19,27}, -{43,19,28}, -{43,19,29}, -{43,19,30}, -{43,19,31}, -{43,19,32}, -{43,19,33}, -{43,19,34}, -{43,19,35}, -{43,19,36}, -{43,19,37}, -{43,19,38}, -{43,19,39}, -{43,19,40}, -{43,19,41}, -{43,19,42}, -{43,19,43}, -{43,19,44}, -{43,19,45}, -{43,19,46}, -{43,19,47}, -{43,19,48}, -{43,19,49}, -{43,19,50}, -{43,19,51}, -{43,20,-63}, -{43,20,-62}, -{43,20,-61}, -{43,20,-60}, -{43,20,-59}, -{43,20,-58}, -{43,20,-57}, -{43,20,-56}, -{43,20,-55}, -{43,20,-54}, -{43,20,-53}, -{43,20,-52}, -{43,20,-51}, -{43,20,-50}, -{43,20,-49}, -{43,20,-48}, -{43,20,-47}, -{43,20,-46}, -{43,20,-45}, -{43,20,-44}, -{43,20,-43}, -{43,20,-42}, -{43,20,-41}, -{43,20,-40}, -{43,20,-39}, -{43,20,-38}, -{43,20,-37}, -{43,20,-36}, -{43,20,-35}, -{43,20,-34}, -{43,20,-33}, -{43,20,-32}, -{43,20,-31}, -{43,20,-30}, -{43,20,-29}, -{43,20,-28}, -{43,20,-27}, -{43,20,-26}, -{43,20,-25}, -{43,20,-24}, -{43,20,-23}, -{43,20,-22}, -{43,20,-21}, -{43,20,-20}, -{43,20,-19}, -{43,20,-18}, -{43,20,-17}, -{43,20,-16}, -{43,20,-15}, -{43,20,-14}, -{43,20,-13}, -{43,20,-12}, -{43,20,-11}, -{43,20,-10}, -{43,20,-9}, -{43,20,-8}, -{43,20,-7}, -{43,20,-6}, -{43,20,-5}, -{43,20,-4}, -{43,20,-3}, -{43,20,-2}, -{43,20,-1}, -{43,20,0}, -{43,20,1}, -{43,20,2}, -{43,20,3}, -{43,20,4}, -{43,20,5}, -{43,20,6}, -{43,20,7}, -{43,20,8}, -{43,20,9}, -{43,20,10}, -{43,20,11}, -{43,20,12}, -{43,20,13}, -{43,20,14}, -{43,20,15}, -{43,20,16}, -{43,20,17}, -{43,20,18}, -{43,20,19}, -{43,20,20}, -{43,20,21}, -{43,20,22}, -{43,20,23}, -{43,20,24}, -{43,20,25}, -{43,20,26}, -{43,20,27}, -{43,20,28}, -{43,20,29}, -{43,20,30}, -{43,20,31}, -{43,20,32}, -{43,20,33}, -{43,20,34}, -{43,20,35}, -{43,20,36}, -{43,20,37}, -{43,20,38}, -{43,20,39}, -{43,20,40}, -{43,20,41}, -{43,20,42}, -{43,20,43}, -{43,20,44}, -{43,20,45}, -{43,20,46}, -{43,20,47}, -{43,20,48}, -{43,20,49}, -{43,20,50}, -{43,20,51}, -{43,21,-64}, -{43,21,-63}, -{43,21,-62}, -{43,21,-61}, -{43,21,-60}, -{43,21,-59}, -{43,21,-58}, -{43,21,-57}, -{43,21,-56}, -{43,21,-55}, -{43,21,-54}, -{43,21,-53}, -{43,21,-52}, -{43,21,-51}, -{43,21,-50}, -{43,21,-49}, -{43,21,-48}, -{43,21,-47}, -{43,21,-46}, -{43,21,-45}, -{43,21,-44}, -{43,21,-43}, -{43,21,-42}, -{43,21,-41}, -{43,21,-40}, -{43,21,-39}, -{43,21,-38}, -{43,21,-37}, -{43,21,-36}, -{43,21,-35}, -{43,21,-34}, -{43,21,-33}, -{43,21,-32}, -{43,21,-31}, -{43,21,-30}, -{43,21,-29}, -{43,21,-28}, -{43,21,-27}, -{43,21,-26}, -{43,21,-25}, -{43,21,-24}, -{43,21,-23}, -{43,21,-22}, -{43,21,-21}, -{43,21,-20}, -{43,21,-19}, -{43,21,-18}, -{43,21,-17}, -{43,21,-16}, -{43,21,-15}, -{43,21,-14}, -{43,21,-13}, -{43,21,-12}, -{43,21,-11}, -{43,21,-10}, -{43,21,-9}, -{43,21,-8}, -{43,21,-7}, -{43,21,-6}, -{43,21,-5}, -{43,21,-4}, -{43,21,-3}, -{43,21,-2}, -{43,21,-1}, -{43,21,0}, -{43,21,1}, -{43,21,2}, -{43,21,3}, -{43,21,4}, -{43,21,5}, -{43,21,6}, -{43,21,7}, -{43,21,8}, -{43,21,9}, -{43,21,10}, -{43,21,11}, -{43,21,12}, -{43,21,13}, -{43,21,14}, -{43,21,15}, -{43,21,16}, -{43,21,17}, -{43,21,18}, -{43,21,19}, -{43,21,20}, -{43,21,21}, -{43,21,22}, -{43,21,23}, -{43,21,24}, -{43,21,25}, -{43,21,26}, -{43,21,27}, -{43,21,28}, -{43,21,29}, -{43,21,30}, -{43,21,31}, -{43,21,32}, -{43,21,33}, -{43,21,34}, -{43,21,35}, -{43,21,36}, -{43,21,37}, -{43,21,38}, -{43,21,39}, -{43,21,40}, -{43,21,41}, -{43,21,42}, -{43,21,43}, -{43,21,44}, -{43,21,45}, -{43,21,46}, -{43,21,47}, -{43,21,48}, -{43,21,49}, -{43,21,50}, -{43,21,51}, -{43,22,-65}, -{43,22,-64}, -{43,22,-63}, -{43,22,-62}, -{43,22,-61}, -{43,22,-60}, -{43,22,-59}, -{43,22,-58}, -{43,22,-57}, -{43,22,-56}, -{43,22,-55}, -{43,22,-54}, -{43,22,-53}, -{43,22,-52}, -{43,22,-51}, -{43,22,-50}, -{43,22,-49}, -{43,22,-48}, -{43,22,-47}, -{43,22,-46}, -{43,22,-45}, -{43,22,-44}, -{43,22,-43}, -{43,22,-42}, -{43,22,-41}, -{43,22,-40}, -{43,22,-39}, -{43,22,-38}, -{43,22,-37}, -{43,22,-36}, -{43,22,-35}, -{43,22,-34}, -{43,22,-33}, -{43,22,-32}, -{43,22,-31}, -{43,22,-30}, -{43,22,-29}, -{43,22,-28}, -{43,22,-27}, -{43,22,-26}, -{43,22,-25}, -{43,22,-24}, -{43,22,-23}, -{43,22,-22}, -{43,22,-21}, -{43,22,-20}, -{43,22,-19}, -{43,22,-18}, -{43,22,-17}, -{43,22,-16}, -{43,22,-15}, -{43,22,-14}, -{43,22,-13}, -{43,22,-12}, -{43,22,-11}, -{43,22,-10}, -{43,22,-9}, -{43,22,-8}, -{43,22,-7}, -{43,22,-6}, -{43,22,-5}, -{43,22,-4}, -{43,22,-3}, -{43,22,-2}, -{43,22,-1}, -{43,22,0}, -{43,22,1}, -{43,22,2}, -{43,22,3}, -{43,22,4}, -{43,22,5}, -{43,22,6}, -{43,22,7}, -{43,22,8}, -{43,22,9}, -{43,22,10}, -{43,22,11}, -{43,22,12}, -{43,22,13}, -{43,22,14}, -{43,22,15}, -{43,22,16}, -{43,22,17}, -{43,22,18}, -{43,22,19}, -{43,22,20}, -{43,22,21}, -{43,22,22}, -{43,22,23}, -{43,22,24}, -{43,22,25}, -{43,22,26}, -{43,22,27}, -{43,22,28}, -{43,22,29}, -{43,22,30}, -{43,22,31}, -{43,22,32}, -{43,22,33}, -{43,22,34}, -{43,22,35}, -{43,22,36}, -{43,22,37}, -{43,22,38}, -{43,22,39}, -{43,22,40}, -{43,22,41}, -{43,22,42}, -{43,22,43}, -{43,22,44}, -{43,22,45}, -{43,22,46}, -{43,22,47}, -{43,22,48}, -{43,22,49}, -{43,22,50}, -{43,22,51}, -{43,23,-66}, -{43,23,-65}, -{43,23,-64}, -{43,23,-63}, -{43,23,-62}, -{43,23,-61}, -{43,23,-60}, -{43,23,-59}, -{43,23,-58}, -{43,23,-57}, -{43,23,-56}, -{43,23,-55}, -{43,23,-54}, -{43,23,-53}, -{43,23,-52}, -{43,23,-51}, -{43,23,-50}, -{43,23,-49}, -{43,23,-48}, -{43,23,-47}, -{43,23,-46}, -{43,23,-45}, -{43,23,-44}, -{43,23,-43}, -{43,23,-42}, -{43,23,-41}, -{43,23,-40}, -{43,23,-39}, -{43,23,-38}, -{43,23,-37}, -{43,23,-36}, -{43,23,-35}, -{43,23,-34}, -{43,23,-33}, -{43,23,-32}, -{43,23,-31}, -{43,23,-30}, -{43,23,-29}, -{43,23,-28}, -{43,23,-27}, -{43,23,-26}, -{43,23,-25}, -{43,23,-24}, -{43,23,-23}, -{43,23,-22}, -{43,23,-21}, -{43,23,-20}, -{43,23,-19}, -{43,23,-18}, -{43,23,-17}, -{43,23,-16}, -{43,23,-15}, -{43,23,-14}, -{43,23,-13}, -{43,23,-12}, -{43,23,-11}, -{43,23,-10}, -{43,23,-9}, -{43,23,-8}, -{43,23,-7}, -{43,23,-6}, -{43,23,-5}, -{43,23,-4}, -{43,23,-3}, -{43,23,-2}, -{43,23,-1}, -{43,23,0}, -{43,23,1}, -{43,23,2}, -{43,23,3}, -{43,23,4}, -{43,23,5}, -{43,23,6}, -{43,23,7}, -{43,23,8}, -{43,23,9}, -{43,23,10}, -{43,23,11}, -{43,23,12}, -{43,23,13}, -{43,23,14}, -{43,23,15}, -{43,23,16}, -{43,23,17}, -{43,23,18}, -{43,23,19}, -{43,23,20}, -{43,23,21}, -{43,23,22}, -{43,23,23}, -{43,23,24}, -{43,23,25}, -{43,23,26}, -{43,23,27}, -{43,23,28}, -{43,23,29}, -{43,23,30}, -{43,23,31}, -{43,23,32}, -{43,23,33}, -{43,23,34}, -{43,23,35}, -{43,23,36}, -{43,23,37}, -{43,23,38}, -{43,23,39}, -{43,23,40}, -{43,23,41}, -{43,23,42}, -{43,23,43}, -{43,23,44}, -{43,23,45}, -{43,23,46}, -{43,23,47}, -{43,23,48}, -{43,23,49}, -{43,23,50}, -{43,23,51}, -{43,23,52}, -{43,24,-67}, -{43,24,-66}, -{43,24,-65}, -{43,24,-64}, -{43,24,-63}, -{43,24,-62}, -{43,24,-61}, -{43,24,-60}, -{43,24,-59}, -{43,24,-58}, -{43,24,-57}, -{43,24,-56}, -{43,24,-55}, -{43,24,-54}, -{43,24,-53}, -{43,24,-52}, -{43,24,-51}, -{43,24,-50}, -{43,24,-49}, -{43,24,-48}, -{43,24,-47}, -{43,24,-46}, -{43,24,-45}, -{43,24,-44}, -{43,24,-43}, -{43,24,-42}, -{43,24,-41}, -{43,24,-40}, -{43,24,-39}, -{43,24,-38}, -{43,24,-37}, -{43,24,-36}, -{43,24,-35}, -{43,24,-34}, -{43,24,-33}, -{43,24,-32}, -{43,24,-31}, -{43,24,-30}, -{43,24,-29}, -{43,24,-28}, -{43,24,-27}, -{43,24,-26}, -{43,24,-25}, -{43,24,-24}, -{43,24,-23}, -{43,24,-22}, -{43,24,-21}, -{43,24,-20}, -{43,24,-19}, -{43,24,-18}, -{43,24,-17}, -{43,24,-16}, -{43,24,-15}, -{43,24,-14}, -{43,24,-13}, -{43,24,-12}, -{43,24,-11}, -{43,24,-10}, -{43,24,-9}, -{43,24,-8}, -{43,24,-7}, -{43,24,-6}, -{43,24,-5}, -{43,24,-4}, -{43,24,-3}, -{43,24,-2}, -{43,24,-1}, -{43,24,0}, -{43,24,1}, -{43,24,2}, -{43,24,3}, -{43,24,4}, -{43,24,5}, -{43,24,6}, -{43,24,7}, -{43,24,8}, -{43,24,9}, -{43,24,10}, -{43,24,11}, -{43,24,12}, -{43,24,13}, -{43,24,14}, -{43,24,15}, -{43,24,16}, -{43,24,17}, -{43,24,18}, -{43,24,19}, -{43,24,20}, -{43,24,21}, -{43,24,22}, -{43,24,23}, -{43,24,24}, -{43,24,25}, -{43,24,26}, -{43,24,27}, -{43,24,28}, -{43,24,29}, -{43,24,30}, -{43,24,31}, -{43,24,32}, -{43,24,33}, -{43,24,34}, -{43,24,35}, -{43,24,36}, -{43,24,37}, -{43,24,38}, -{43,24,39}, -{43,24,40}, -{43,24,41}, -{43,24,42}, -{43,24,43}, -{43,24,44}, -{43,24,45}, -{43,24,46}, -{43,24,47}, -{43,24,48}, -{43,24,49}, -{43,24,50}, -{43,24,51}, -{43,24,52}, -{43,25,-68}, -{43,25,-67}, -{43,25,-66}, -{43,25,-65}, -{43,25,-64}, -{43,25,-63}, -{43,25,-62}, -{43,25,-61}, -{43,25,-60}, -{43,25,-59}, -{43,25,-58}, -{43,25,-57}, -{43,25,-56}, -{43,25,-55}, -{43,25,-54}, -{43,25,-53}, -{43,25,-52}, -{43,25,-51}, -{43,25,-50}, -{43,25,-49}, -{43,25,-48}, -{43,25,-47}, -{43,25,-46}, -{43,25,-45}, -{43,25,-44}, -{43,25,-43}, -{43,25,-42}, -{43,25,-41}, -{43,25,-40}, -{43,25,-39}, -{43,25,-38}, -{43,25,-37}, -{43,25,-36}, -{43,25,-35}, -{43,25,-34}, -{43,25,-33}, -{43,25,-32}, -{43,25,-31}, -{43,25,-30}, -{43,25,-29}, -{43,25,-28}, -{43,25,-27}, -{43,25,-26}, -{43,25,-25}, -{43,25,-24}, -{43,25,-23}, -{43,25,-22}, -{43,25,-21}, -{43,25,-20}, -{43,25,-19}, -{43,25,-18}, -{43,25,-17}, -{43,25,-16}, -{43,25,-15}, -{43,25,-14}, -{43,25,-13}, -{43,25,-12}, -{43,25,-11}, -{43,25,-10}, -{43,25,-9}, -{43,25,-8}, -{43,25,-7}, -{43,25,-6}, -{43,25,-5}, -{43,25,-4}, -{43,25,-3}, -{43,25,-2}, -{43,25,-1}, -{43,25,0}, -{43,25,1}, -{43,25,2}, -{43,25,3}, -{43,25,4}, -{43,25,5}, -{43,25,6}, -{43,25,7}, -{43,25,8}, -{43,25,9}, -{43,25,10}, -{43,25,11}, -{43,25,12}, -{43,25,13}, -{43,25,14}, -{43,25,15}, -{43,25,16}, -{43,25,17}, -{43,25,18}, -{43,25,19}, -{43,25,20}, -{43,25,21}, -{43,25,22}, -{43,25,23}, -{43,25,24}, -{43,25,25}, -{43,25,26}, -{43,25,27}, -{43,25,28}, -{43,25,29}, -{43,25,30}, -{43,25,31}, -{43,25,32}, -{43,25,33}, -{43,25,34}, -{43,25,35}, -{43,25,36}, -{43,25,37}, -{43,25,38}, -{43,25,39}, -{43,25,40}, -{43,25,41}, -{43,25,42}, -{43,25,43}, -{43,25,44}, -{43,25,45}, -{43,25,46}, -{43,25,47}, -{43,25,48}, -{43,25,49}, -{43,25,50}, -{43,25,51}, -{43,25,52}, -{43,26,-69}, -{43,26,-68}, -{43,26,-67}, -{43,26,-66}, -{43,26,-65}, -{43,26,-64}, -{43,26,-63}, -{43,26,-62}, -{43,26,-61}, -{43,26,-60}, -{43,26,-59}, -{43,26,-58}, -{43,26,-57}, -{43,26,-56}, -{43,26,-55}, -{43,26,-54}, -{43,26,-53}, -{43,26,-52}, -{43,26,-51}, -{43,26,-50}, -{43,26,-49}, -{43,26,-48}, -{43,26,-47}, -{43,26,-46}, -{43,26,-45}, -{43,26,-44}, -{43,26,-43}, -{43,26,-42}, -{43,26,-41}, -{43,26,-40}, -{43,26,-39}, -{43,26,-38}, -{43,26,-37}, -{43,26,-36}, -{43,26,-35}, -{43,26,-34}, -{43,26,-33}, -{43,26,-32}, -{43,26,-31}, -{43,26,-30}, -{43,26,-29}, -{43,26,-28}, -{43,26,-27}, -{43,26,-26}, -{43,26,-25}, -{43,26,-24}, -{43,26,-23}, -{43,26,-22}, -{43,26,-21}, -{43,26,-20}, -{43,26,-19}, -{43,26,-18}, -{43,26,-17}, -{43,26,-16}, -{43,26,-15}, -{43,26,-14}, -{43,26,-13}, -{43,26,-12}, -{43,26,-11}, -{43,26,-10}, -{43,26,-9}, -{43,26,-8}, -{43,26,-7}, -{43,26,-6}, -{43,26,-5}, -{43,26,-4}, -{43,26,-3}, -{43,26,-2}, -{43,26,-1}, -{43,26,0}, -{43,26,1}, -{43,26,2}, -{43,26,3}, -{43,26,4}, -{43,26,5}, -{43,26,6}, -{43,26,7}, -{43,26,8}, -{43,26,9}, -{43,26,10}, -{43,26,11}, -{43,26,12}, -{43,26,13}, -{43,26,14}, -{43,26,15}, -{43,26,16}, -{43,26,17}, -{43,26,18}, -{43,26,19}, -{43,26,20}, -{43,26,21}, -{43,26,22}, -{43,26,23}, -{43,26,24}, -{43,26,25}, -{43,26,26}, -{43,26,27}, -{43,26,28}, -{43,26,29}, -{43,26,30}, -{43,26,31}, -{43,26,32}, -{43,26,33}, -{43,26,34}, -{43,26,35}, -{43,26,36}, -{43,26,37}, -{43,26,38}, -{43,26,39}, -{43,26,40}, -{43,26,41}, -{43,26,42}, -{43,26,43}, -{43,26,44}, -{43,26,45}, -{43,26,46}, -{43,26,47}, -{43,26,48}, -{43,26,49}, -{43,26,50}, -{43,26,51}, -{43,26,52}, -{43,27,-70}, -{43,27,-69}, -{43,27,-68}, -{43,27,-67}, -{43,27,-66}, -{43,27,-65}, -{43,27,-64}, -{43,27,-63}, -{43,27,-62}, -{43,27,-61}, -{43,27,-60}, -{43,27,-59}, -{43,27,-58}, -{43,27,-57}, -{43,27,-56}, -{43,27,-55}, -{43,27,-54}, -{43,27,-53}, -{43,27,-52}, -{43,27,-51}, -{43,27,-50}, -{43,27,-49}, -{43,27,-48}, -{43,27,-47}, -{43,27,-46}, -{43,27,-45}, -{43,27,-44}, -{43,27,-43}, -{43,27,-42}, -{43,27,-41}, -{43,27,-40}, -{43,27,-39}, -{43,27,-38}, -{43,27,-37}, -{43,27,-36}, -{43,27,-35}, -{43,27,-34}, -{43,27,-33}, -{43,27,-32}, -{43,27,-31}, -{43,27,-30}, -{43,27,-29}, -{43,27,-28}, -{43,27,-27}, -{43,27,-26}, -{43,27,-25}, -{43,27,-24}, -{43,27,-23}, -{43,27,-22}, -{43,27,-21}, -{43,27,-20}, -{43,27,-19}, -{43,27,-18}, -{43,27,-17}, -{43,27,-16}, -{43,27,-15}, -{43,27,-14}, -{43,27,-13}, -{43,27,-12}, -{43,27,-11}, -{43,27,-10}, -{43,27,-9}, -{43,27,-8}, -{43,27,-7}, -{43,27,-6}, -{43,27,-5}, -{43,27,-4}, -{43,27,-3}, -{43,27,-2}, -{43,27,-1}, -{43,27,0}, -{43,27,1}, -{43,27,2}, -{43,27,3}, -{43,27,4}, -{43,27,5}, -{43,27,6}, -{43,27,7}, -{43,27,8}, -{43,27,9}, -{43,27,10}, -{43,27,11}, -{43,27,12}, -{43,27,13}, -{43,27,14}, -{43,27,15}, -{43,27,16}, -{43,27,17}, -{43,27,18}, -{43,27,19}, -{43,27,20}, -{43,27,21}, -{43,27,22}, -{43,27,23}, -{43,27,24}, -{43,27,25}, -{43,27,26}, -{43,27,27}, -{43,27,28}, -{43,27,29}, -{43,27,30}, -{43,27,31}, -{43,27,32}, -{43,27,33}, -{43,27,34}, -{43,27,35}, -{43,27,36}, -{43,27,37}, -{43,27,38}, -{43,27,39}, -{43,27,40}, -{43,27,41}, -{43,27,42}, -{43,27,43}, -{43,27,44}, -{43,27,45}, -{43,27,46}, -{43,27,47}, -{43,27,48}, -{43,27,49}, -{43,27,50}, -{43,27,51}, -{43,27,52}, -{43,28,-71}, -{43,28,-70}, -{43,28,-69}, -{43,28,-68}, -{43,28,-67}, -{43,28,-66}, -{43,28,-65}, -{43,28,-64}, -{43,28,-63}, -{43,28,-62}, -{43,28,-61}, -{43,28,-60}, -{43,28,-59}, -{43,28,-58}, -{43,28,-57}, -{43,28,-56}, -{43,28,-55}, -{43,28,-54}, -{43,28,-53}, -{43,28,-52}, -{43,28,-51}, -{43,28,-50}, -{43,28,-49}, -{43,28,-48}, -{43,28,-47}, -{43,28,-46}, -{43,28,-45}, -{43,28,-44}, -{43,28,-43}, -{43,28,-42}, -{43,28,-41}, -{43,28,-40}, -{43,28,-39}, -{43,28,-38}, -{43,28,-37}, -{43,28,-36}, -{43,28,-35}, -{43,28,-34}, -{43,28,-33}, -{43,28,-32}, -{43,28,-31}, -{43,28,-30}, -{43,28,-29}, -{43,28,-28}, -{43,28,-27}, -{43,28,-26}, -{43,28,-25}, -{43,28,-24}, -{43,28,-23}, -{43,28,-22}, -{43,28,-21}, -{43,28,-20}, -{43,28,-19}, -{43,28,-18}, -{43,28,-17}, -{43,28,-16}, -{43,28,-15}, -{43,28,-14}, -{43,28,-13}, -{43,28,-12}, -{43,28,-11}, -{43,28,-10}, -{43,28,-9}, -{43,28,-8}, -{43,28,-7}, -{43,28,-6}, -{43,28,-5}, -{43,28,-4}, -{43,28,-3}, -{43,28,-2}, -{43,28,-1}, -{43,28,0}, -{43,28,1}, -{43,28,2}, -{43,28,3}, -{43,28,4}, -{43,28,5}, -{43,28,6}, -{43,28,7}, -{43,28,8}, -{43,28,9}, -{43,28,10}, -{43,28,11}, -{43,28,12}, -{43,28,13}, -{43,28,14}, -{43,28,15}, -{43,28,16}, -{43,28,17}, -{43,28,18}, -{43,28,19}, -{43,28,20}, -{43,28,21}, -{43,28,22}, -{43,28,23}, -{43,28,24}, -{43,28,25}, -{43,28,26}, -{43,28,27}, -{43,28,28}, -{43,28,29}, -{43,28,30}, -{43,28,31}, -{43,28,32}, -{43,28,33}, -{43,28,34}, -{43,28,35}, -{43,28,36}, -{43,28,37}, -{43,28,38}, -{43,28,39}, -{43,28,40}, -{43,28,41}, -{43,28,42}, -{43,28,43}, -{43,28,44}, -{43,28,45}, -{43,28,46}, -{43,28,47}, -{43,28,48}, -{43,28,49}, -{43,28,50}, -{43,28,51}, -{43,28,52}, -{43,29,-72}, -{43,29,-71}, -{43,29,-70}, -{43,29,-69}, -{43,29,-68}, -{43,29,-67}, -{43,29,-66}, -{43,29,-65}, -{43,29,-64}, -{43,29,-63}, -{43,29,-62}, -{43,29,-61}, -{43,29,-60}, -{43,29,-59}, -{43,29,-58}, -{43,29,-57}, -{43,29,-56}, -{43,29,-55}, -{43,29,-54}, -{43,29,-53}, -{43,29,-52}, -{43,29,-51}, -{43,29,-50}, -{43,29,-49}, -{43,29,-48}, -{43,29,-47}, -{43,29,-46}, -{43,29,-45}, -{43,29,-44}, -{43,29,-43}, -{43,29,-42}, -{43,29,-41}, -{43,29,-40}, -{43,29,-39}, -{43,29,-38}, -{43,29,-37}, -{43,29,-36}, -{43,29,-35}, -{43,29,-34}, -{43,29,-33}, -{43,29,-32}, -{43,29,-31}, -{43,29,-30}, -{43,29,-29}, -{43,29,-28}, -{43,29,-27}, -{43,29,-26}, -{43,29,-25}, -{43,29,-24}, -{43,29,-23}, -{43,29,-22}, -{43,29,-21}, -{43,29,-20}, -{43,29,-19}, -{43,29,-18}, -{43,29,-17}, -{43,29,-16}, -{43,29,-15}, -{43,29,-14}, -{43,29,-13}, -{43,29,-12}, -{43,29,-11}, -{43,29,-10}, -{43,29,-9}, -{43,29,-8}, -{43,29,-7}, -{43,29,-6}, -{43,29,-5}, -{43,29,-4}, -{43,29,-3}, -{43,29,-2}, -{43,29,-1}, -{43,29,0}, -{43,29,1}, -{43,29,2}, -{43,29,3}, -{43,29,4}, -{43,29,5}, -{43,29,6}, -{43,29,7}, -{43,29,8}, -{43,29,9}, -{43,29,10}, -{43,29,11}, -{43,29,12}, -{43,29,13}, -{43,29,14}, -{43,29,15}, -{43,29,16}, -{43,29,17}, -{43,29,18}, -{43,29,19}, -{43,29,20}, -{43,29,21}, -{43,29,22}, -{43,29,23}, -{43,29,24}, -{43,29,25}, -{43,29,26}, -{43,29,27}, -{43,29,28}, -{43,29,29}, -{43,29,30}, -{43,29,31}, -{43,29,32}, -{43,29,33}, -{43,29,34}, -{43,29,35}, -{43,29,36}, -{43,29,37}, -{43,29,38}, -{43,29,39}, -{43,29,40}, -{43,29,41}, -{43,29,42}, -{43,29,43}, -{43,29,44}, -{43,29,45}, -{43,29,46}, -{43,29,47}, -{43,29,48}, -{43,29,49}, -{43,29,50}, -{43,29,51}, -{43,29,52}, -{43,30,-73}, -{43,30,-72}, -{43,30,-71}, -{43,30,-70}, -{43,30,-69}, -{43,30,-68}, -{43,30,-67}, -{43,30,-66}, -{43,30,-65}, -{43,30,-64}, -{43,30,-63}, -{43,30,-62}, -{43,30,-61}, -{43,30,-60}, -{43,30,-59}, -{43,30,-58}, -{43,30,-57}, -{43,30,-56}, -{43,30,-55}, -{43,30,-54}, -{43,30,-53}, -{43,30,-52}, -{43,30,-51}, -{43,30,-50}, -{43,30,-49}, -{43,30,-48}, -{43,30,-47}, -{43,30,-46}, -{43,30,-45}, -{43,30,-44}, -{43,30,-43}, -{43,30,-42}, -{43,30,-41}, -{43,30,-40}, -{43,30,-39}, -{43,30,-38}, -{43,30,-37}, -{43,30,-36}, -{43,30,-35}, -{43,30,-34}, -{43,30,-33}, -{43,30,-32}, -{43,30,-31}, -{43,30,-30}, -{43,30,-29}, -{43,30,-28}, -{43,30,-27}, -{43,30,-26}, -{43,30,-25}, -{43,30,-24}, -{43,30,-23}, -{43,30,-22}, -{43,30,-21}, -{43,30,-20}, -{43,30,-19}, -{43,30,-18}, -{43,30,-17}, -{43,30,-16}, -{43,30,-15}, -{43,30,-14}, -{43,30,-13}, -{43,30,-12}, -{43,30,-11}, -{43,30,-10}, -{43,30,-9}, -{43,30,-8}, -{43,30,-7}, -{43,30,-6}, -{43,30,-5}, -{43,30,-4}, -{43,30,-3}, -{43,30,-2}, -{43,30,-1}, -{43,30,0}, -{43,30,1}, -{43,30,2}, -{43,30,3}, -{43,30,4}, -{43,30,5}, -{43,30,6}, -{43,30,7}, -{43,30,8}, -{43,30,9}, -{43,30,10}, -{43,30,11}, -{43,30,12}, -{43,30,13}, -{43,30,14}, -{43,30,15}, -{43,30,16}, -{43,30,17}, -{43,30,18}, -{43,30,19}, -{43,30,20}, -{43,30,21}, -{43,30,22}, -{43,30,23}, -{43,30,24}, -{43,30,25}, -{43,30,26}, -{43,30,27}, -{43,30,28}, -{43,30,29}, -{43,30,30}, -{43,30,31}, -{43,30,32}, -{43,30,33}, -{43,30,34}, -{43,30,35}, -{43,30,36}, -{43,30,37}, -{43,30,38}, -{43,30,39}, -{43,30,40}, -{43,30,41}, -{43,30,42}, -{43,30,43}, -{43,30,44}, -{43,30,45}, -{43,30,46}, -{43,30,47}, -{43,30,48}, -{43,30,49}, -{43,30,50}, -{43,30,51}, -{43,30,52}, -{43,31,-74}, -{43,31,-73}, -{43,31,-72}, -{43,31,-71}, -{43,31,-70}, -{43,31,-69}, -{43,31,-68}, -{43,31,-67}, -{43,31,-66}, -{43,31,-65}, -{43,31,-64}, -{43,31,-63}, -{43,31,-62}, -{43,31,-61}, -{43,31,-60}, -{43,31,-59}, -{43,31,-58}, -{43,31,-57}, -{43,31,-56}, -{43,31,-55}, -{43,31,-54}, -{43,31,-53}, -{43,31,-52}, -{43,31,-51}, -{43,31,-50}, -{43,31,-49}, -{43,31,-48}, -{43,31,-47}, -{43,31,-46}, -{43,31,-45}, -{43,31,-44}, -{43,31,-43}, -{43,31,-42}, -{43,31,-41}, -{43,31,-40}, -{43,31,-39}, -{43,31,-38}, -{43,31,-37}, -{43,31,-36}, -{43,31,-35}, -{43,31,-34}, -{43,31,-33}, -{43,31,-32}, -{43,31,-31}, -{43,31,-30}, -{43,31,-29}, -{43,31,-28}, -{43,31,-27}, -{43,31,-26}, -{43,31,-25}, -{43,31,-24}, -{43,31,-23}, -{43,31,-22}, -{43,31,-21}, -{43,31,-20}, -{43,31,-19}, -{43,31,-18}, -{43,31,-17}, -{43,31,-16}, -{43,31,-15}, -{43,31,-14}, -{43,31,-13}, -{43,31,-12}, -{43,31,-11}, -{43,31,-10}, -{43,31,-9}, -{43,31,-8}, -{43,31,-7}, -{43,31,-6}, -{43,31,-5}, -{43,31,-4}, -{43,31,-3}, -{43,31,-2}, -{43,31,-1}, -{43,31,0}, -{43,31,1}, -{43,31,2}, -{43,31,3}, -{43,31,4}, -{43,31,5}, -{43,31,6}, -{43,31,7}, -{43,31,8}, -{43,31,9}, -{43,31,10}, -{43,31,11}, -{43,31,12}, -{43,31,13}, -{43,31,14}, -{43,31,15}, -{43,31,16}, -{43,31,17}, -{43,31,18}, -{43,31,19}, -{43,31,20}, -{43,31,21}, -{43,31,22}, -{43,31,23}, -{43,31,24}, -{43,31,25}, -{43,31,26}, -{43,31,27}, -{43,31,28}, -{43,31,29}, -{43,31,30}, -{43,31,31}, -{43,31,32}, -{43,31,33}, -{43,31,34}, -{43,31,35}, -{43,31,36}, -{43,31,37}, -{43,31,38}, -{43,31,39}, -{43,31,40}, -{43,31,41}, -{43,31,42}, -{43,31,43}, -{43,31,44}, -{43,31,45}, -{43,31,46}, -{43,31,47}, -{43,31,48}, -{43,31,49}, -{43,31,50}, -{43,31,51}, -{43,31,52}, -{43,32,-75}, -{43,32,-74}, -{43,32,-73}, -{43,32,-72}, -{43,32,-71}, -{43,32,-70}, -{43,32,-69}, -{43,32,-68}, -{43,32,-67}, -{43,32,-66}, -{43,32,-65}, -{43,32,-64}, -{43,32,-63}, -{43,32,-62}, -{43,32,-61}, -{43,32,-60}, -{43,32,-59}, -{43,32,-58}, -{43,32,-57}, -{43,32,-56}, -{43,32,-55}, -{43,32,-54}, -{43,32,-53}, -{43,32,-52}, -{43,32,-51}, -{43,32,-50}, -{43,32,-49}, -{43,32,-48}, -{43,32,-47}, -{43,32,-46}, -{43,32,-45}, -{43,32,-44}, -{43,32,-43}, -{43,32,-42}, -{43,32,-41}, -{43,32,-40}, -{43,32,-39}, -{43,32,-38}, -{43,32,-37}, -{43,32,-36}, -{43,32,-35}, -{43,32,-34}, -{43,32,-33}, -{43,32,-32}, -{43,32,-31}, -{43,32,-30}, -{43,32,-29}, -{43,32,-28}, -{43,32,-27}, -{43,32,-26}, -{43,32,-25}, -{43,32,-24}, -{43,32,-23}, -{43,32,-22}, -{43,32,-21}, -{43,32,-20}, -{43,32,-19}, -{43,32,-18}, -{43,32,-17}, -{43,32,-16}, -{43,32,-15}, -{43,32,-14}, -{43,32,-13}, -{43,32,-12}, -{43,32,-11}, -{43,32,-10}, -{43,32,-9}, -{43,32,-8}, -{43,32,-7}, -{43,32,-6}, -{43,32,-5}, -{43,32,-4}, -{43,32,-3}, -{43,32,-2}, -{43,32,-1}, -{43,32,0}, -{43,32,1}, -{43,32,2}, -{43,32,3}, -{43,32,4}, -{43,32,5}, -{43,32,6}, -{43,32,7}, -{43,32,8}, -{43,32,9}, -{43,32,10}, -{43,32,11}, -{43,32,12}, -{43,32,13}, -{43,32,14}, -{43,32,15}, -{43,32,16}, -{43,32,17}, -{43,32,18}, -{43,32,19}, -{43,32,20}, -{43,32,21}, -{43,32,22}, -{43,32,23}, -{43,32,24}, -{43,32,25}, -{43,32,26}, -{43,32,27}, -{43,32,28}, -{43,32,29}, -{43,32,30}, -{43,32,31}, -{43,32,32}, -{43,32,33}, -{43,32,34}, -{43,32,35}, -{43,32,36}, -{43,32,37}, -{43,32,38}, -{43,32,39}, -{43,32,40}, -{43,32,41}, -{43,32,42}, -{43,32,43}, -{43,32,44}, -{43,32,45}, -{43,32,46}, -{43,32,47}, -{43,32,48}, -{43,32,49}, -{43,32,50}, -{43,32,51}, -{43,32,52}, -{43,33,-76}, -{43,33,-75}, -{43,33,-74}, -{43,33,-73}, -{43,33,-72}, -{43,33,-71}, -{43,33,-70}, -{43,33,-69}, -{43,33,-68}, -{43,33,-67}, -{43,33,-66}, -{43,33,-65}, -{43,33,-64}, -{43,33,-63}, -{43,33,-62}, -{43,33,-61}, -{43,33,-60}, -{43,33,-59}, -{43,33,-58}, -{43,33,-57}, -{43,33,-56}, -{43,33,-55}, -{43,33,-54}, -{43,33,-53}, -{43,33,-52}, -{43,33,-51}, -{43,33,-50}, -{43,33,-49}, -{43,33,-48}, -{43,33,-47}, -{43,33,-46}, -{43,33,-45}, -{43,33,-44}, -{43,33,-43}, -{43,33,-42}, -{43,33,-41}, -{43,33,-40}, -{43,33,-39}, -{43,33,-38}, -{43,33,-37}, -{43,33,-36}, -{43,33,-35}, -{43,33,-34}, -{43,33,-33}, -{43,33,-32}, -{43,33,-31}, -{43,33,-30}, -{43,33,-29}, -{43,33,-28}, -{43,33,-27}, -{43,33,-26}, -{43,33,-25}, -{43,33,-24}, -{43,33,-23}, -{43,33,-22}, -{43,33,-21}, -{43,33,-20}, -{43,33,-19}, -{43,33,-18}, -{43,33,-17}, -{43,33,-16}, -{43,33,-15}, -{43,33,-14}, -{43,33,-13}, -{43,33,-12}, -{43,33,-11}, -{43,33,-10}, -{43,33,-9}, -{43,33,-8}, -{43,33,-7}, -{43,33,-6}, -{43,33,-5}, -{43,33,-4}, -{43,33,-3}, -{43,33,-2}, -{43,33,-1}, -{43,33,0}, -{43,33,1}, -{43,33,2}, -{43,33,3}, -{43,33,4}, -{43,33,5}, -{43,33,6}, -{43,33,7}, -{43,33,8}, -{43,33,9}, -{43,33,10}, -{43,33,11}, -{43,33,12}, -{43,33,13}, -{43,33,14}, -{43,33,15}, -{43,33,16}, -{43,33,17}, -{43,33,18}, -{43,33,19}, -{43,33,20}, -{43,33,21}, -{43,33,22}, -{43,33,23}, -{43,33,24}, -{43,33,25}, -{43,33,26}, -{43,33,27}, -{43,33,28}, -{43,33,29}, -{43,33,30}, -{43,33,31}, -{43,33,32}, -{43,33,33}, -{43,33,34}, -{43,33,35}, -{43,33,36}, -{43,33,37}, -{43,33,38}, -{43,33,39}, -{43,33,40}, -{43,33,41}, -{43,33,42}, -{43,33,43}, -{43,33,44}, -{43,33,45}, -{43,33,46}, -{43,33,47}, -{43,33,48}, -{43,33,49}, -{43,33,50}, -{43,33,51}, -{43,33,52}, -{43,33,53}, -{43,34,-77}, -{43,34,-76}, -{43,34,-75}, -{43,34,-74}, -{43,34,-73}, -{43,34,-72}, -{43,34,-71}, -{43,34,-70}, -{43,34,-69}, -{43,34,-68}, -{43,34,-67}, -{43,34,-66}, -{43,34,-65}, -{43,34,-64}, -{43,34,-63}, -{43,34,-62}, -{43,34,-61}, -{43,34,-60}, -{43,34,-59}, -{43,34,-58}, -{43,34,-57}, -{43,34,-56}, -{43,34,-55}, -{43,34,-54}, -{43,34,-53}, -{43,34,-52}, -{43,34,-51}, -{43,34,-50}, -{43,34,-49}, -{43,34,-48}, -{43,34,-47}, -{43,34,-46}, -{43,34,-45}, -{43,34,-44}, -{43,34,-43}, -{43,34,-42}, -{43,34,-41}, -{43,34,-40}, -{43,34,-39}, -{43,34,-38}, -{43,34,-37}, -{43,34,-36}, -{43,34,-35}, -{43,34,-34}, -{43,34,-33}, -{43,34,-32}, -{43,34,-31}, -{43,34,-30}, -{43,34,-29}, -{43,34,-28}, -{43,34,-27}, -{43,34,-26}, -{43,34,-25}, -{43,34,-24}, -{43,34,-23}, -{43,34,-22}, -{43,34,-21}, -{43,34,-20}, -{43,34,-19}, -{43,34,-18}, -{43,34,-17}, -{43,34,-16}, -{43,34,-15}, -{43,34,-14}, -{43,34,-13}, -{43,34,-12}, -{43,34,-11}, -{43,34,-10}, -{43,34,-9}, -{43,34,-8}, -{43,34,-7}, -{43,34,-6}, -{43,34,-5}, -{43,34,-4}, -{43,34,-3}, -{43,34,-2}, -{43,34,-1}, -{43,34,0}, -{43,34,1}, -{43,34,2}, -{43,34,3}, -{43,34,4}, -{43,34,5}, -{43,34,6}, -{43,34,7}, -{43,34,8}, -{43,34,9}, -{43,34,10}, -{43,34,11}, -{43,34,12}, -{43,34,13}, -{43,34,14}, -{43,34,15}, -{43,34,16}, -{43,34,17}, -{43,34,18}, -{43,34,19}, -{43,34,20}, -{43,34,21}, -{43,34,22}, -{43,34,23}, -{43,34,24}, -{43,34,25}, -{43,34,26}, -{43,34,27}, -{43,34,28}, -{43,34,29}, -{43,34,30}, -{43,34,31}, -{43,34,32}, -{43,34,33}, -{43,34,34}, -{43,34,35}, -{43,34,36}, -{43,34,37}, -{43,34,38}, -{43,34,39}, -{43,34,40}, -{43,34,41}, -{43,34,42}, -{43,34,43}, -{43,34,44}, -{43,34,45}, -{43,34,46}, -{43,34,47}, -{43,34,48}, -{43,34,49}, -{43,34,50}, -{43,34,51}, -{43,34,52}, -{43,34,53}, -{43,35,-78}, -{43,35,-77}, -{43,35,-76}, -{43,35,-75}, -{43,35,-74}, -{43,35,-73}, -{43,35,-72}, -{43,35,-71}, -{43,35,-70}, -{43,35,-69}, -{43,35,-68}, -{43,35,-67}, -{43,35,-66}, -{43,35,-65}, -{43,35,-64}, -{43,35,-63}, -{43,35,-62}, -{43,35,-61}, -{43,35,-60}, -{43,35,-59}, -{43,35,-58}, -{43,35,-57}, -{43,35,-56}, -{43,35,-55}, -{43,35,-54}, -{43,35,-53}, -{43,35,-52}, -{43,35,-51}, -{43,35,-50}, -{43,35,-49}, -{43,35,-48}, -{43,35,-47}, -{43,35,-46}, -{43,35,-45}, -{43,35,-44}, -{43,35,-43}, -{43,35,-42}, -{43,35,-41}, -{43,35,-40}, -{43,35,-39}, -{43,35,-38}, -{43,35,-37}, -{43,35,-36}, -{43,35,-35}, -{43,35,-34}, -{43,35,-33}, -{43,35,-32}, -{43,35,-31}, -{43,35,-30}, -{43,35,-29}, -{43,35,-28}, -{43,35,-27}, -{43,35,-26}, -{43,35,-25}, -{43,35,-24}, -{43,35,-23}, -{43,35,-22}, -{43,35,-21}, -{43,35,-20}, -{43,35,-19}, -{43,35,-18}, -{43,35,-17}, -{43,35,-16}, -{43,35,-15}, -{43,35,-14}, -{43,35,-13}, -{43,35,-12}, -{43,35,-11}, -{43,35,-10}, -{43,35,-9}, -{43,35,-8}, -{43,35,-7}, -{43,35,-6}, -{43,35,-5}, -{43,35,-4}, -{43,35,-3}, -{43,35,-2}, -{43,35,-1}, -{43,35,0}, -{43,35,1}, -{43,35,2}, -{43,35,3}, -{43,35,4}, -{43,35,5}, -{43,35,6}, -{43,35,7}, -{43,35,8}, -{43,35,9}, -{43,35,10}, -{43,35,11}, -{43,35,12}, -{43,35,13}, -{43,35,14}, -{43,35,15}, -{43,35,16}, -{43,35,17}, -{43,35,18}, -{43,35,19}, -{43,35,20}, -{43,35,21}, -{43,35,22}, -{43,35,23}, -{43,35,24}, -{43,35,25}, -{43,35,26}, -{43,35,27}, -{43,35,28}, -{43,35,29}, -{43,35,30}, -{43,35,31}, -{43,35,32}, -{43,35,33}, -{43,35,34}, -{43,35,35}, -{43,35,36}, -{43,35,37}, -{43,35,38}, -{43,35,39}, -{43,35,40}, -{43,35,41}, -{43,35,42}, -{43,35,43}, -{43,35,44}, -{43,35,45}, -{43,35,46}, -{43,35,47}, -{43,35,48}, -{43,35,49}, -{43,35,50}, -{43,35,51}, -{43,35,52}, -{43,35,53}, -{43,36,-79}, -{43,36,-78}, -{43,36,-77}, -{43,36,-76}, -{43,36,-75}, -{43,36,-74}, -{43,36,-73}, -{43,36,-72}, -{43,36,-71}, -{43,36,-70}, -{43,36,-69}, -{43,36,-68}, -{43,36,-67}, -{43,36,-66}, -{43,36,-65}, -{43,36,-64}, -{43,36,-63}, -{43,36,-62}, -{43,36,-61}, -{43,36,-60}, -{43,36,-59}, -{43,36,-58}, -{43,36,-57}, -{43,36,-56}, -{43,36,-55}, -{43,36,-54}, -{43,36,-53}, -{43,36,-52}, -{43,36,-51}, -{43,36,-50}, -{43,36,-49}, -{43,36,-48}, -{43,36,-47}, -{43,36,-46}, -{43,36,-45}, -{43,36,-44}, -{43,36,-43}, -{43,36,-42}, -{43,36,-41}, -{43,36,-40}, -{43,36,-39}, -{43,36,-38}, -{43,36,-37}, -{43,36,-36}, -{43,36,-35}, -{43,36,-34}, -{43,36,-33}, -{43,36,-32}, -{43,36,-31}, -{43,36,-30}, -{43,36,-29}, -{43,36,-28}, -{43,36,-27}, -{43,36,-26}, -{43,36,-25}, -{43,36,-24}, -{43,36,-23}, -{43,36,-22}, -{43,36,-21}, -{43,36,-20}, -{43,36,-19}, -{43,36,-18}, -{43,36,-17}, -{43,36,-16}, -{43,36,-15}, -{43,36,-14}, -{43,36,-13}, -{43,36,-12}, -{43,36,-11}, -{43,36,-10}, -{43,36,-9}, -{43,36,-8}, -{43,36,-7}, -{43,36,-6}, -{43,36,-5}, -{43,36,-4}, -{43,36,-3}, -{43,36,-2}, -{43,36,-1}, -{43,36,0}, -{43,36,1}, -{43,36,2}, -{43,36,3}, -{43,36,4}, -{43,36,5}, -{43,36,6}, -{43,36,7}, -{43,36,8}, -{43,36,9}, -{43,36,10}, -{43,36,11}, -{43,36,12}, -{43,36,13}, -{43,36,14}, -{43,36,15}, -{43,36,16}, -{43,36,17}, -{43,36,18}, -{43,36,19}, -{43,36,20}, -{43,36,21}, -{43,36,22}, -{43,36,23}, -{43,36,24}, -{43,36,25}, -{43,36,26}, -{43,36,27}, -{43,36,28}, -{43,36,29}, -{43,36,30}, -{43,36,31}, -{43,36,32}, -{43,36,33}, -{43,36,34}, -{43,36,35}, -{43,36,36}, -{43,36,37}, -{43,36,38}, -{43,36,39}, -{43,36,40}, -{43,36,41}, -{43,36,42}, -{43,36,43}, -{43,36,44}, -{43,36,45}, -{43,36,46}, -{43,36,47}, -{43,36,48}, -{43,36,49}, -{43,36,50}, -{43,36,51}, -{43,36,52}, -{43,36,53}, -{43,37,-80}, -{43,37,-79}, -{43,37,-78}, -{43,37,-77}, -{43,37,-76}, -{43,37,-75}, -{43,37,-74}, -{43,37,-73}, -{43,37,-72}, -{43,37,-71}, -{43,37,-70}, -{43,37,-69}, -{43,37,-68}, -{43,37,-67}, -{43,37,-66}, -{43,37,-65}, -{43,37,-64}, -{43,37,-63}, -{43,37,-62}, -{43,37,-61}, -{43,37,-60}, -{43,37,-59}, -{43,37,-58}, -{43,37,-57}, -{43,37,-56}, -{43,37,-55}, -{43,37,-54}, -{43,37,-53}, -{43,37,-52}, -{43,37,-51}, -{43,37,-50}, -{43,37,-49}, -{43,37,-48}, -{43,37,-47}, -{43,37,-46}, -{43,37,-45}, -{43,37,-44}, -{43,37,-43}, -{43,37,-42}, -{43,37,-41}, -{43,37,-40}, -{43,37,-39}, -{43,37,-38}, -{43,37,-37}, -{43,37,-36}, -{43,37,-35}, -{43,37,-34}, -{43,37,-33}, -{43,37,-32}, -{43,37,-31}, -{43,37,-30}, -{43,37,-29}, -{43,37,-28}, -{43,37,-27}, -{43,37,-26}, -{43,37,-25}, -{43,37,-24}, -{43,37,-23}, -{43,37,-22}, -{43,37,-21}, -{43,37,-20}, -{43,37,-19}, -{43,37,-18}, -{43,37,-17}, -{43,37,-16}, -{43,37,-15}, -{43,37,-14}, -{43,37,-13}, -{43,37,-12}, -{43,37,-11}, -{43,37,-10}, -{43,37,-9}, -{43,37,-8}, -{43,37,-7}, -{43,37,-6}, -{43,37,-5}, -{43,37,-4}, -{43,37,-3}, -{43,37,-2}, -{43,37,-1}, -{43,37,0}, -{43,37,1}, -{43,37,2}, -{43,37,3}, -{43,37,4}, -{43,37,5}, -{43,37,6}, -{43,37,7}, -{43,37,8}, -{43,37,9}, -{43,37,10}, -{43,37,11}, -{43,37,12}, -{43,37,13}, -{43,37,14}, -{43,37,15}, -{43,37,16}, -{43,37,17}, -{43,37,18}, -{43,37,19}, -{43,37,20}, -{43,37,21}, -{43,37,22}, -{43,37,23}, -{43,37,24}, -{43,37,25}, -{43,37,26}, -{43,37,27}, -{43,37,28}, -{43,37,29}, -{43,37,30}, -{43,37,31}, -{43,37,32}, -{43,37,33}, -{43,37,34}, -{43,37,35}, -{43,37,36}, -{43,37,37}, -{43,37,38}, -{43,37,39}, -{43,37,40}, -{43,37,41}, -{43,37,42}, -{43,37,43}, -{43,37,44}, -{43,37,45}, -{43,37,46}, -{43,37,47}, -{43,37,48}, -{43,37,49}, -{43,37,50}, -{43,37,51}, -{43,37,52}, -{43,37,53}, -{43,38,-81}, -{43,38,-80}, -{43,38,-79}, -{43,38,-78}, -{43,38,-77}, -{43,38,-76}, -{43,38,-75}, -{43,38,-74}, -{43,38,-73}, -{43,38,-72}, -{43,38,-71}, -{43,38,-70}, -{43,38,-69}, -{43,38,-68}, -{43,38,-67}, -{43,38,-66}, -{43,38,-65}, -{43,38,-64}, -{43,38,-63}, -{43,38,-62}, -{43,38,-61}, -{43,38,-60}, -{43,38,-59}, -{43,38,-58}, -{43,38,-57}, -{43,38,-56}, -{43,38,-55}, -{43,38,-54}, -{43,38,-53}, -{43,38,-52}, -{43,38,-51}, -{43,38,-50}, -{43,38,-49}, -{43,38,-48}, -{43,38,-47}, -{43,38,-46}, -{43,38,-45}, -{43,38,-44}, -{43,38,-43}, -{43,38,-42}, -{43,38,-41}, -{43,38,-40}, -{43,38,-39}, -{43,38,-38}, -{43,38,-37}, -{43,38,-36}, -{43,38,-35}, -{43,38,-34}, -{43,38,-33}, -{43,38,-32}, -{43,38,-31}, -{43,38,-30}, -{43,38,-29}, -{43,38,-28}, -{43,38,-27}, -{43,38,-26}, -{43,38,-25}, -{43,38,-24}, -{43,38,-23}, -{43,38,-22}, -{43,38,-21}, -{43,38,-20}, -{43,38,-19}, -{43,38,-18}, -{43,38,-17}, -{43,38,-16}, -{43,38,-15}, -{43,38,-14}, -{43,38,-13}, -{43,38,-12}, -{43,38,-11}, -{43,38,-10}, -{43,38,-9}, -{43,38,-8}, -{43,38,-7}, -{43,38,-6}, -{43,38,-5}, -{43,38,-4}, -{43,38,-3}, -{43,38,-2}, -{43,38,-1}, -{43,38,0}, -{43,38,1}, -{43,38,2}, -{43,38,3}, -{43,38,4}, -{43,38,5}, -{43,38,6}, -{43,38,7}, -{43,38,8}, -{43,38,9}, -{43,38,10}, -{43,38,11}, -{43,38,12}, -{43,38,13}, -{43,38,14}, -{43,38,15}, -{43,38,16}, -{43,38,17}, -{43,38,18}, -{43,38,19}, -{43,38,20}, -{43,38,21}, -{43,38,22}, -{43,38,23}, -{43,38,24}, -{43,38,25}, -{43,38,26}, -{43,38,27}, -{43,38,28}, -{43,38,29}, -{43,38,30}, -{43,38,31}, -{43,38,32}, -{43,38,33}, -{43,38,34}, -{43,38,35}, -{43,38,36}, -{43,38,37}, -{43,38,38}, -{43,38,39}, -{43,38,40}, -{43,38,41}, -{43,38,42}, -{43,38,43}, -{43,38,44}, -{43,38,45}, -{43,38,46}, -{43,38,47}, -{43,38,48}, -{43,38,49}, -{43,38,50}, -{43,38,51}, -{43,38,52}, -{43,38,53}, -{43,39,-81}, -{43,39,-80}, -{43,39,-79}, -{43,39,-78}, -{43,39,-77}, -{43,39,-76}, -{43,39,-75}, -{43,39,-74}, -{43,39,-73}, -{43,39,-72}, -{43,39,-71}, -{43,39,-70}, -{43,39,-69}, -{43,39,-68}, -{43,39,-67}, -{43,39,-66}, -{43,39,-65}, -{43,39,-64}, -{43,39,-63}, -{43,39,-62}, -{43,39,-61}, -{43,39,-60}, -{43,39,-59}, -{43,39,-58}, -{43,39,-57}, -{43,39,-56}, -{43,39,-55}, -{43,39,-54}, -{43,39,-53}, -{43,39,-52}, -{43,39,-51}, -{43,39,-50}, -{43,39,-49}, -{43,39,-48}, -{43,39,-47}, -{43,39,-46}, -{43,39,-45}, -{43,39,-44}, -{43,39,-43}, -{43,39,-42}, -{43,39,-41}, -{43,39,-40}, -{43,39,-39}, -{43,39,-38}, -{43,39,-37}, -{43,39,-36}, -{43,39,-35}, -{43,39,-34}, -{43,39,-33}, -{43,39,-32}, -{43,39,-31}, -{43,39,-30}, -{43,39,-29}, -{43,39,-28}, -{43,39,-27}, -{43,39,-26}, -{43,39,-25}, -{43,39,-24}, -{43,39,-23}, -{43,39,-22}, -{43,39,-21}, -{43,39,-20}, -{43,39,-19}, -{43,39,-18}, -{43,39,-17}, -{43,39,-16}, -{43,39,-15}, -{43,39,-14}, -{43,39,-13}, -{43,39,-12}, -{43,39,-11}, -{43,39,-10}, -{43,39,-9}, -{43,39,-8}, -{43,39,-7}, -{43,39,-6}, -{43,39,-5}, -{43,39,-4}, -{43,39,-3}, -{43,39,-2}, -{43,39,-1}, -{43,39,0}, -{43,39,1}, -{43,39,2}, -{43,39,3}, -{43,39,4}, -{43,39,5}, -{43,39,6}, -{43,39,7}, -{43,39,8}, -{43,39,9}, -{43,39,10}, -{43,39,11}, -{43,39,12}, -{43,39,13}, -{43,39,14}, -{43,39,15}, -{43,39,16}, -{43,39,17}, -{43,39,18}, -{43,39,19}, -{43,39,20}, -{43,39,21}, -{43,39,22}, -{43,39,23}, -{43,39,24}, -{43,39,25}, -{43,39,26}, -{43,39,27}, -{43,39,28}, -{43,39,29}, -{43,39,30}, -{43,39,31}, -{43,39,32}, -{43,39,33}, -{43,39,34}, -{43,39,35}, -{43,39,36}, -{43,39,37}, -{43,39,38}, -{43,39,39}, -{43,39,40}, -{43,39,41}, -{43,39,42}, -{43,39,43}, -{43,39,44}, -{43,39,45}, -{43,39,46}, -{43,39,47}, -{43,39,48}, -{43,39,49}, -{43,39,50}, -{43,39,51}, -{43,39,52}, -{43,39,53}, -{43,40,-82}, -{43,40,-81}, -{43,40,-80}, -{43,40,-79}, -{43,40,-78}, -{43,40,-77}, -{43,40,-76}, -{43,40,-75}, -{43,40,-74}, -{43,40,-73}, -{43,40,-72}, -{43,40,-71}, -{43,40,-70}, -{43,40,-69}, -{43,40,-68}, -{43,40,-67}, -{43,40,-66}, -{43,40,-65}, -{43,40,-64}, -{43,40,-63}, -{43,40,-62}, -{43,40,-61}, -{43,40,-60}, -{43,40,-59}, -{43,40,-58}, -{43,40,-57}, -{43,40,-56}, -{43,40,-55}, -{43,40,-54}, -{43,40,-53}, -{43,40,-52}, -{43,40,-51}, -{43,40,-50}, -{43,40,-49}, -{43,40,-48}, -{43,40,-47}, -{43,40,-46}, -{43,40,-45}, -{43,40,-44}, -{43,40,-43}, -{43,40,-42}, -{43,40,-41}, -{43,40,-40}, -{43,40,-39}, -{43,40,-38}, -{43,40,-37}, -{43,40,-36}, -{43,40,-35}, -{43,40,-34}, -{43,40,-33}, -{43,40,-32}, -{43,40,-31}, -{43,40,-30}, -{43,40,-29}, -{43,40,-28}, -{43,40,-27}, -{43,40,-26}, -{43,40,-25}, -{43,40,-24}, -{43,40,-23}, -{43,40,-22}, -{43,40,-21}, -{43,40,-20}, -{43,40,-19}, -{43,40,-18}, -{43,40,-17}, -{43,40,-16}, -{43,40,-15}, -{43,40,-14}, -{43,40,-13}, -{43,40,-12}, -{43,40,-11}, -{43,40,-10}, -{43,40,-9}, -{43,40,-8}, -{43,40,-7}, -{43,40,-6}, -{43,40,-5}, -{43,40,-4}, -{43,40,-3}, -{43,40,-2}, -{43,40,-1}, -{43,40,0}, -{43,40,1}, -{43,40,2}, -{43,40,3}, -{43,40,4}, -{43,40,5}, -{43,40,6}, -{43,40,7}, -{43,40,8}, -{43,40,9}, -{43,40,10}, -{43,40,11}, -{43,40,12}, -{43,40,13}, -{43,40,14}, -{43,40,15}, -{43,40,16}, -{43,40,17}, -{43,40,18}, -{43,40,19}, -{43,40,20}, -{43,40,21}, -{43,40,22}, -{43,40,23}, -{43,40,24}, -{43,40,25}, -{43,40,26}, -{43,40,27}, -{43,40,28}, -{43,40,29}, -{43,40,30}, -{43,40,31}, -{43,40,32}, -{43,40,33}, -{43,40,34}, -{43,40,35}, -{43,40,36}, -{43,40,37}, -{43,40,38}, -{43,40,39}, -{43,40,40}, -{43,40,41}, -{43,40,42}, -{43,40,43}, -{43,40,44}, -{43,40,45}, -{43,40,46}, -{43,40,47}, -{43,40,48}, -{43,40,49}, -{43,40,50}, -{43,40,51}, -{43,40,52}, -{43,40,53}, -{43,41,-83}, -{43,41,-82}, -{43,41,-81}, -{43,41,-80}, -{43,41,-79}, -{43,41,-78}, -{43,41,-77}, -{43,41,-76}, -{43,41,-75}, -{43,41,-74}, -{43,41,-73}, -{43,41,-72}, -{43,41,-71}, -{43,41,-70}, -{43,41,-69}, -{43,41,-68}, -{43,41,-67}, -{43,41,-66}, -{43,41,-65}, -{43,41,-64}, -{43,41,-63}, -{43,41,-62}, -{43,41,-61}, -{43,41,-60}, -{43,41,-59}, -{43,41,-58}, -{43,41,-57}, -{43,41,-56}, -{43,41,-55}, -{43,41,-54}, -{43,41,-53}, -{43,41,-52}, -{43,41,-51}, -{43,41,-50}, -{43,41,-49}, -{43,41,-48}, -{43,41,-47}, -{43,41,-46}, -{43,41,-45}, -{43,41,-44}, -{43,41,-43}, -{43,41,-42}, -{43,41,-41}, -{43,41,-40}, -{43,41,-39}, -{43,41,-38}, -{43,41,-37}, -{43,41,-36}, -{43,41,-35}, -{43,41,-34}, -{43,41,-33}, -{43,41,-32}, -{43,41,-31}, -{43,41,-30}, -{43,41,-29}, -{43,41,-28}, -{43,41,-27}, -{43,41,-26}, -{43,41,-25}, -{43,41,-24}, -{43,41,-23}, -{43,41,-22}, -{43,41,-21}, -{43,41,-20}, -{43,41,-19}, -{43,41,-18}, -{43,41,-17}, -{43,41,-16}, -{43,41,-15}, -{43,41,-14}, -{43,41,-13}, -{43,41,-12}, -{43,41,-11}, -{43,41,-10}, -{43,41,-9}, -{43,41,-8}, -{43,41,-7}, -{43,41,-6}, -{43,41,-5}, -{43,41,-4}, -{43,41,-3}, -{43,41,-2}, -{43,41,-1}, -{43,41,0}, -{43,41,1}, -{43,41,2}, -{43,41,3}, -{43,41,4}, -{43,41,5}, -{43,41,6}, -{43,41,7}, -{43,41,8}, -{43,41,9}, -{43,41,10}, -{43,41,11}, -{43,41,12}, -{43,41,13}, -{43,41,14}, -{43,41,15}, -{43,41,16}, -{43,41,17}, -{43,41,18}, -{43,41,19}, -{43,41,20}, -{43,41,21}, -{43,41,22}, -{43,41,23}, -{43,41,24}, -{43,41,25}, -{43,41,26}, -{43,41,27}, -{43,41,28}, -{43,41,29}, -{43,41,30}, -{43,41,31}, -{43,41,32}, -{43,41,33}, -{43,41,34}, -{43,41,35}, -{43,41,36}, -{43,41,37}, -{43,41,38}, -{43,41,39}, -{43,41,40}, -{43,41,41}, -{43,41,42}, -{43,41,43}, -{43,41,44}, -{43,41,45}, -{43,41,46}, -{43,41,47}, -{43,41,48}, -{43,41,49}, -{43,41,50}, -{43,41,51}, -{43,41,52}, -{43,41,53}, -{43,42,-84}, -{43,42,-83}, -{43,42,-82}, -{43,42,-81}, -{43,42,-80}, -{43,42,-79}, -{43,42,-78}, -{43,42,-77}, -{43,42,-76}, -{43,42,-75}, -{43,42,-74}, -{43,42,-73}, -{43,42,-72}, -{43,42,-71}, -{43,42,-70}, -{43,42,-69}, -{43,42,-68}, -{43,42,-67}, -{43,42,-66}, -{43,42,-65}, -{43,42,-64}, -{43,42,-63}, -{43,42,-62}, -{43,42,-61}, -{43,42,-60}, -{43,42,-59}, -{43,42,-58}, -{43,42,-57}, -{43,42,-56}, -{43,42,-55}, -{43,42,-54}, -{43,42,-53}, -{43,42,-52}, -{43,42,-51}, -{43,42,-50}, -{43,42,-49}, -{43,42,-48}, -{43,42,-47}, -{43,42,-46}, -{43,42,-45}, -{43,42,-44}, -{43,42,-43}, -{43,42,-42}, -{43,42,-41}, -{43,42,-40}, -{43,42,-39}, -{43,42,-38}, -{43,42,-37}, -{43,42,-36}, -{43,42,-35}, -{43,42,-34}, -{43,42,-33}, -{43,42,-32}, -{43,42,-31}, -{43,42,-30}, -{43,42,-29}, -{43,42,-28}, -{43,42,-27}, -{43,42,-26}, -{43,42,-25}, -{43,42,-24}, -{43,42,-23}, -{43,42,-22}, -{43,42,-21}, -{43,42,-20}, -{43,42,-19}, -{43,42,-18}, -{43,42,-17}, -{43,42,-16}, -{43,42,-15}, -{43,42,-14}, -{43,42,-13}, -{43,42,-12}, -{43,42,-11}, -{43,42,-10}, -{43,42,-9}, -{43,42,-8}, -{43,42,-7}, -{43,42,-6}, -{43,42,-5}, -{43,42,-4}, -{43,42,-3}, -{43,42,-2}, -{43,42,-1}, -{43,42,0}, -{43,42,1}, -{43,42,2}, -{43,42,3}, -{43,42,4}, -{43,42,5}, -{43,42,6}, -{43,42,7}, -{43,42,8}, -{43,42,9}, -{43,42,10}, -{43,42,11}, -{43,42,12}, -{43,42,13}, -{43,42,14}, -{43,42,15}, -{43,42,16}, -{43,42,17}, -{43,42,18}, -{43,42,19}, -{43,42,20}, -{43,42,21}, -{43,42,22}, -{43,42,23}, -{43,42,24}, -{43,42,25}, -{43,42,26}, -{43,42,27}, -{43,42,28}, -{43,42,29}, -{43,42,30}, -{43,42,31}, -{43,42,32}, -{43,42,33}, -{43,42,34}, -{43,42,35}, -{43,42,36}, -{43,42,37}, -{43,42,38}, -{43,42,39}, -{43,42,40}, -{43,42,41}, -{43,42,42}, -{43,42,43}, -{43,42,44}, -{43,42,45}, -{43,42,46}, -{43,42,47}, -{43,42,48}, -{43,42,49}, -{43,42,50}, -{43,42,51}, -{43,42,52}, -{43,42,53}, -{43,42,54}, -{43,43,-85}, -{43,43,-84}, -{43,43,-83}, -{43,43,-82}, -{43,43,-81}, -{43,43,-80}, -{43,43,-79}, -{43,43,-78}, -{43,43,-77}, -{43,43,-76}, -{43,43,-75}, -{43,43,-74}, -{43,43,-73}, -{43,43,-72}, -{43,43,-71}, -{43,43,-70}, -{43,43,-69}, -{43,43,-68}, -{43,43,-67}, -{43,43,-66}, -{43,43,-65}, -{43,43,-64}, -{43,43,-63}, -{43,43,-62}, -{43,43,-61}, -{43,43,-60}, -{43,43,-59}, -{43,43,-58}, -{43,43,-57}, -{43,43,-56}, -{43,43,-55}, -{43,43,-54}, -{43,43,-53}, -{43,43,-52}, -{43,43,-51}, -{43,43,-50}, -{43,43,-49}, -{43,43,-48}, -{43,43,-47}, -{43,43,-46}, -{43,43,-45}, -{43,43,-44}, -{43,43,-43}, -{43,43,-42}, -{43,43,-41}, -{43,43,-40}, -{43,43,-39}, -{43,43,-38}, -{43,43,-37}, -{43,43,-36}, -{43,43,-35}, -{43,43,-34}, -{43,43,-33}, -{43,43,-32}, -{43,43,-31}, -{43,43,-30}, -{43,43,-29}, -{43,43,-28}, -{43,43,-27}, -{43,43,-26}, -{43,43,-25}, -{43,43,-24}, -{43,43,-23}, -{43,43,-22}, -{43,43,-21}, -{43,43,-20}, -{43,43,-19}, -{43,43,-18}, -{43,43,-17}, -{43,43,-16}, -{43,43,-15}, -{43,43,-14}, -{43,43,-13}, -{43,43,-12}, -{43,43,-11}, -{43,43,-10}, -{43,43,-9}, -{43,43,-8}, -{43,43,-7}, -{43,43,-6}, -{43,43,-5}, -{43,43,-4}, -{43,43,-3}, -{43,43,-2}, -{43,43,-1}, -{43,43,0}, -{43,43,1}, -{43,43,2}, -{43,43,3}, -{43,43,4}, -{43,43,5}, -{43,43,6}, -{43,43,7}, -{43,43,8}, -{43,43,9}, -{43,43,10}, -{43,43,11}, -{43,43,12}, -{43,43,13}, -{43,43,14}, -{43,43,15}, -{43,43,16}, -{43,43,17}, -{43,43,18}, -{43,43,19}, -{43,43,20}, -{43,43,21}, -{43,43,22}, -{43,43,23}, -{43,43,24}, -{43,43,25}, -{43,43,26}, -{43,43,27}, -{43,43,28}, -{43,43,29}, -{43,43,30}, -{43,43,31}, -{43,43,32}, -{43,43,33}, -{43,43,34}, -{43,43,35}, -{43,43,36}, -{43,43,37}, -{43,43,38}, -{43,43,39}, -{43,43,40}, -{43,43,41}, -{43,43,42}, -{43,43,43}, -{43,43,44}, -{43,43,45}, -{43,43,46}, -{43,43,47}, -{43,43,48}, -{43,43,49}, -{43,43,50}, -{43,43,51}, -{43,43,52}, -{43,43,53}, -{43,43,54}, -{43,44,-86}, -{43,44,-85}, -{43,44,-84}, -{43,44,-83}, -{43,44,-82}, -{43,44,-81}, -{43,44,-80}, -{43,44,-79}, -{43,44,-78}, -{43,44,-77}, -{43,44,-76}, -{43,44,-75}, -{43,44,-74}, -{43,44,-73}, -{43,44,-72}, -{43,44,-71}, -{43,44,-70}, -{43,44,-69}, -{43,44,-68}, -{43,44,-67}, -{43,44,-66}, -{43,44,-65}, -{43,44,-64}, -{43,44,-63}, -{43,44,-62}, -{43,44,-61}, -{43,44,-60}, -{43,44,-59}, -{43,44,-58}, -{43,44,-57}, -{43,44,-56}, -{43,44,-55}, -{43,44,-54}, -{43,44,-53}, -{43,44,-52}, -{43,44,-51}, -{43,44,-50}, -{43,44,-49}, -{43,44,-48}, -{43,44,-47}, -{43,44,-46}, -{43,44,-45}, -{43,44,-44}, -{43,44,-43}, -{43,44,-42}, -{43,44,-41}, -{43,44,-40}, -{43,44,-39}, -{43,44,-38}, -{43,44,-37}, -{43,44,-36}, -{43,44,-35}, -{43,44,-34}, -{43,44,-33}, -{43,44,-32}, -{43,44,-31}, -{43,44,-30}, -{43,44,-29}, -{43,44,-28}, -{43,44,-27}, -{43,44,-26}, -{43,44,-25}, -{43,44,-24}, -{43,44,-23}, -{43,44,-22}, -{43,44,-21}, -{43,44,-20}, -{43,44,-19}, -{43,44,-18}, -{43,44,-17}, -{43,44,-16}, -{43,44,-15}, -{43,44,-14}, -{43,44,-13}, -{43,44,-12}, -{43,44,-11}, -{43,44,-10}, -{43,44,-9}, -{43,44,-8}, -{43,44,-7}, -{43,44,-6}, -{43,44,-5}, -{43,44,-4}, -{43,44,-3}, -{43,44,-2}, -{43,44,-1}, -{43,44,0}, -{43,44,1}, -{43,44,2}, -{43,44,3}, -{43,44,4}, -{43,44,5}, -{43,44,6}, -{43,44,7}, -{43,44,8}, -{43,44,9}, -{43,44,10}, -{43,44,11}, -{43,44,12}, -{43,44,13}, -{43,44,14}, -{43,44,15}, -{43,44,16}, -{43,44,17}, -{43,44,18}, -{43,44,19}, -{43,44,20}, -{43,44,21}, -{43,44,22}, -{43,44,23}, -{43,44,24}, -{43,44,25}, -{43,44,26}, -{43,44,27}, -{43,44,28}, -{43,44,29}, -{43,44,30}, -{43,44,31}, -{43,44,32}, -{43,44,33}, -{43,44,34}, -{43,44,35}, -{43,44,36}, -{43,44,37}, -{43,44,38}, -{43,44,39}, -{43,44,40}, -{43,44,41}, -{43,44,42}, -{43,44,43}, -{43,44,44}, -{43,44,45}, -{43,44,46}, -{43,44,47}, -{43,44,48}, -{43,44,49}, -{43,44,50}, -{43,44,51}, -{43,44,52}, -{43,44,53}, -{43,44,54}, -{43,45,-87}, -{43,45,-86}, -{43,45,-85}, -{43,45,-84}, -{43,45,-83}, -{43,45,-82}, -{43,45,-81}, -{43,45,-80}, -{43,45,-79}, -{43,45,-78}, -{43,45,-77}, -{43,45,-76}, -{43,45,-75}, -{43,45,-74}, -{43,45,-73}, -{43,45,-72}, -{43,45,-71}, -{43,45,-70}, -{43,45,-69}, -{43,45,-68}, -{43,45,-67}, -{43,45,-66}, -{43,45,-65}, -{43,45,-64}, -{43,45,-63}, -{43,45,-62}, -{43,45,-61}, -{43,45,-60}, -{43,45,-59}, -{43,45,-58}, -{43,45,-57}, -{43,45,-56}, -{43,45,-55}, -{43,45,-54}, -{43,45,-53}, -{43,45,-52}, -{43,45,-51}, -{43,45,-50}, -{43,45,-49}, -{43,45,-48}, -{43,45,-47}, -{43,45,-46}, -{43,45,-45}, -{43,45,-44}, -{43,45,-43}, -{43,45,-42}, -{43,45,-41}, -{43,45,-40}, -{43,45,-39}, -{43,45,-38}, -{43,45,-37}, -{43,45,-36}, -{43,45,-35}, -{43,45,-34}, -{43,45,-33}, -{43,45,-32}, -{43,45,-31}, -{43,45,-30}, -{43,45,-29}, -{43,45,-28}, -{43,45,-27}, -{43,45,-26}, -{43,45,-25}, -{43,45,-24}, -{43,45,-23}, -{43,45,-22}, -{43,45,-21}, -{43,45,-20}, -{43,45,-19}, -{43,45,-18}, -{43,45,-17}, -{43,45,-16}, -{43,45,-15}, -{43,45,-14}, -{43,45,-13}, -{43,45,-12}, -{43,45,-11}, -{43,45,-10}, -{43,45,-9}, -{43,45,-8}, -{43,45,-7}, -{43,45,-6}, -{43,45,-5}, -{43,45,-4}, -{43,45,-3}, -{43,45,-2}, -{43,45,-1}, -{43,45,0}, -{43,45,1}, -{43,45,2}, -{43,45,3}, -{43,45,4}, -{43,45,5}, -{43,45,6}, -{43,45,7}, -{43,45,8}, -{43,45,9}, -{43,45,10}, -{43,45,11}, -{43,45,12}, -{43,45,13}, -{43,45,14}, -{43,45,15}, -{43,45,16}, -{43,45,17}, -{43,45,18}, -{43,45,19}, -{43,45,20}, -{43,45,21}, -{43,45,22}, -{43,45,23}, -{43,45,24}, -{43,45,25}, -{43,45,26}, -{43,45,27}, -{43,45,28}, -{43,45,29}, -{43,45,30}, -{43,45,31}, -{43,45,32}, -{43,45,33}, -{43,45,34}, -{43,45,35}, -{43,45,36}, -{43,45,37}, -{43,45,38}, -{43,45,39}, -{43,45,40}, -{43,45,41}, -{43,45,42}, -{43,45,43}, -{43,45,44}, -{43,45,45}, -{43,45,46}, -{43,45,47}, -{43,45,48}, -{43,45,49}, -{43,45,50}, -{43,45,51}, -{43,45,52}, -{43,45,53}, -{43,45,54}, -{43,46,-88}, -{43,46,-87}, -{43,46,-86}, -{43,46,-85}, -{43,46,-84}, -{43,46,-83}, -{43,46,-82}, -{43,46,-81}, -{43,46,-80}, -{43,46,-79}, -{43,46,-78}, -{43,46,-77}, -{43,46,-76}, -{43,46,-75}, -{43,46,-74}, -{43,46,-73}, -{43,46,-72}, -{43,46,-71}, -{43,46,-70}, -{43,46,-69}, -{43,46,-68}, -{43,46,-67}, -{43,46,-66}, -{43,46,-65}, -{43,46,-64}, -{43,46,-63}, -{43,46,-62}, -{43,46,-61}, -{43,46,-60}, -{43,46,-59}, -{43,46,-58}, -{43,46,-57}, -{43,46,-56}, -{43,46,-55}, -{43,46,-54}, -{43,46,-53}, -{43,46,-52}, -{43,46,-51}, -{43,46,-50}, -{43,46,-49}, -{43,46,-48}, -{43,46,-47}, -{43,46,-46}, -{43,46,-45}, -{43,46,-44}, -{43,46,-43}, -{43,46,-42}, -{43,46,-41}, -{43,46,-40}, -{43,46,-39}, -{43,46,-38}, -{43,46,-37}, -{43,46,-36}, -{43,46,-35}, -{43,46,-34}, -{43,46,-33}, -{43,46,-32}, -{43,46,-31}, -{43,46,-30}, -{43,46,-29}, -{43,46,-28}, -{43,46,-27}, -{43,46,-26}, -{43,46,-25}, -{43,46,-24}, -{43,46,-23}, -{43,46,-22}, -{43,46,-21}, -{43,46,-20}, -{43,46,-19}, -{43,46,-18}, -{43,46,-17}, -{43,46,-16}, -{43,46,-15}, -{43,46,-14}, -{43,46,-13}, -{43,46,-12}, -{43,46,-11}, -{43,46,-10}, -{43,46,-9}, -{43,46,-8}, -{43,46,-7}, -{43,46,-6}, -{43,46,-5}, -{43,46,-4}, -{43,46,-3}, -{43,46,-2}, -{43,46,-1}, -{43,46,0}, -{43,46,1}, -{43,46,2}, -{43,46,3}, -{43,46,4}, -{43,46,5}, -{43,46,6}, -{43,46,7}, -{43,46,8}, -{43,46,9}, -{43,46,10}, -{43,46,11}, -{43,46,12}, -{43,46,13}, -{43,46,14}, -{43,46,15}, -{43,46,16}, -{43,46,17}, -{43,46,18}, -{43,46,19}, -{43,46,20}, -{43,46,21}, -{43,46,22}, -{43,46,23}, -{43,46,24}, -{43,46,25}, -{43,46,26}, -{43,46,27}, -{43,46,28}, -{43,46,29}, -{43,46,30}, -{43,46,31}, -{43,46,32}, -{43,46,33}, -{43,46,34}, -{43,46,35}, -{43,46,36}, -{43,46,37}, -{43,46,38}, -{43,46,39}, -{43,46,40}, -{43,46,41}, -{43,46,42}, -{43,46,43}, -{43,46,44}, -{43,46,45}, -{43,46,46}, -{43,46,47}, -{43,46,48}, -{43,46,49}, -{43,46,50}, -{43,46,51}, -{43,46,52}, -{43,46,53}, -{43,46,54}, -{43,47,-89}, -{43,47,-88}, -{43,47,-87}, -{43,47,-86}, -{43,47,-85}, -{43,47,-84}, -{43,47,-83}, -{43,47,-82}, -{43,47,-81}, -{43,47,-80}, -{43,47,-79}, -{43,47,-78}, -{43,47,-77}, -{43,47,-76}, -{43,47,-75}, -{43,47,-74}, -{43,47,-73}, -{43,47,-72}, -{43,47,-71}, -{43,47,-70}, -{43,47,-69}, -{43,47,-68}, -{43,47,-67}, -{43,47,-66}, -{43,47,-65}, -{43,47,-64}, -{43,47,-63}, -{43,47,-62}, -{43,47,-61}, -{43,47,-60}, -{43,47,-59}, -{43,47,-58}, -{43,47,-57}, -{43,47,-56}, -{43,47,-55}, -{43,47,-54}, -{43,47,-53}, -{43,47,-52}, -{43,47,-51}, -{43,47,-50}, -{43,47,-49}, -{43,47,-48}, -{43,47,-47}, -{43,47,-46}, -{43,47,-45}, -{43,47,-44}, -{43,47,-43}, -{43,47,-42}, -{43,47,-41}, -{43,47,-40}, -{43,47,-39}, -{43,47,-38}, -{43,47,-37}, -{43,47,-36}, -{43,47,-35}, -{43,47,-34}, -{43,47,-33}, -{43,47,-32}, -{43,47,-31}, -{43,47,-30}, -{43,47,-29}, -{43,47,-28}, -{43,47,-27}, -{43,47,-26}, -{43,47,-25}, -{43,47,-24}, -{43,47,-23}, -{43,47,-22}, -{43,47,-21}, -{43,47,-20}, -{43,47,-19}, -{43,47,-18}, -{43,47,-17}, -{43,47,-16}, -{43,47,-15}, -{43,47,-14}, -{43,47,-13}, -{43,47,-12}, -{43,47,-11}, -{43,47,-10}, -{43,47,-9}, -{43,47,-8}, -{43,47,-7}, -{43,47,-6}, -{43,47,-5}, -{43,47,-4}, -{43,47,-3}, -{43,47,-2}, -{43,47,-1}, -{43,47,0}, -{43,47,1}, -{43,47,2}, -{43,47,3}, -{43,47,4}, -{43,47,5}, -{43,47,6}, -{43,47,7}, -{43,47,8}, -{43,47,9}, -{43,47,10}, -{43,47,11}, -{43,47,12}, -{43,47,13}, -{43,47,14}, -{43,47,15}, -{43,47,16}, -{43,47,17}, -{43,47,18}, -{43,47,19}, -{43,47,20}, -{43,47,21}, -{43,47,22}, -{43,47,23}, -{43,47,24}, -{43,47,25}, -{43,47,26}, -{43,47,27}, -{43,47,28}, -{43,47,29}, -{43,47,30}, -{43,47,31}, -{43,47,32}, -{43,47,33}, -{43,47,34}, -{43,47,35}, -{43,47,36}, -{43,47,37}, -{43,47,38}, -{43,47,39}, -{43,47,40}, -{43,47,41}, -{43,47,42}, -{43,47,43}, -{43,47,44}, -{43,47,45}, -{43,47,46}, -{43,47,47}, -{43,47,48}, -{43,47,49}, -{43,47,50}, -{43,47,51}, -{43,47,52}, -{43,47,53}, -{43,47,54}, -{43,48,-90}, -{43,48,-89}, -{43,48,-88}, -{43,48,-87}, -{43,48,-86}, -{43,48,-85}, -{43,48,-84}, -{43,48,-83}, -{43,48,-82}, -{43,48,-81}, -{43,48,-80}, -{43,48,-79}, -{43,48,-78}, -{43,48,-77}, -{43,48,-76}, -{43,48,-75}, -{43,48,-74}, -{43,48,-73}, -{43,48,-72}, -{43,48,-71}, -{43,48,-70}, -{43,48,-69}, -{43,48,-68}, -{43,48,-67}, -{43,48,-66}, -{43,48,-65}, -{43,48,-64}, -{43,48,-63}, -{43,48,-62}, -{43,48,-61}, -{43,48,-60}, -{43,48,-59}, -{43,48,-58}, -{43,48,-57}, -{43,48,-56}, -{43,48,-55}, -{43,48,-54}, -{43,48,-53}, -{43,48,-52}, -{43,48,-51}, -{43,48,-50}, -{43,48,-49}, -{43,48,-48}, -{43,48,-47}, -{43,48,-46}, -{43,48,-45}, -{43,48,-44}, -{43,48,-43}, -{43,48,-42}, -{43,48,-41}, -{43,48,-40}, -{43,48,-39}, -{43,48,-38}, -{43,48,-37}, -{43,48,-36}, -{43,48,-35}, -{43,48,-34}, -{43,48,-33}, -{43,48,-32}, -{43,48,-31}, -{43,48,-30}, -{43,48,-29}, -{43,48,-28}, -{43,48,-27}, -{43,48,-26}, -{43,48,-25}, -{43,48,-24}, -{43,48,-23}, -{43,48,-22}, -{43,48,-21}, -{43,48,-20}, -{43,48,-19}, -{43,48,-18}, -{43,48,-17}, -{43,48,-16}, -{43,48,-15}, -{43,48,-14}, -{43,48,-13}, -{43,48,-12}, -{43,48,-11}, -{43,48,-10}, -{43,48,-9}, -{43,48,-8}, -{43,48,-7}, -{43,48,-6}, -{43,48,-5}, -{43,48,-4}, -{43,48,-3}, -{43,48,-2}, -{43,48,-1}, -{43,48,0}, -{43,48,1}, -{43,48,2}, -{43,48,3}, -{43,48,4}, -{43,48,5}, -{43,48,6}, -{43,48,7}, -{43,48,8}, -{43,48,9}, -{43,48,10}, -{43,48,11}, -{43,48,12}, -{43,48,13}, -{43,48,14}, -{43,48,15}, -{43,48,16}, -{43,48,17}, -{43,48,18}, -{43,48,19}, -{43,48,20}, -{43,48,21}, -{43,48,22}, -{43,48,23}, -{43,48,24}, -{43,48,25}, -{43,48,26}, -{43,48,27}, -{43,48,28}, -{43,48,29}, -{43,48,30}, -{43,48,31}, -{43,48,32}, -{43,48,33}, -{43,48,34}, -{43,48,35}, -{43,48,36}, -{43,48,37}, -{43,48,38}, -{43,48,39}, -{43,48,40}, -{43,48,41}, -{43,48,42}, -{43,48,43}, -{43,48,44}, -{43,48,45}, -{43,48,46}, -{43,48,47}, -{43,48,48}, -{43,48,49}, -{43,48,50}, -{43,48,51}, -{43,48,52}, -{43,48,53}, -{43,48,54}, -{43,49,-90}, -{43,49,-89}, -{43,49,-88}, -{43,49,-87}, -{43,49,-86}, -{43,49,-85}, -{43,49,-84}, -{43,49,-83}, -{43,49,-82}, -{43,49,-81}, -{43,49,-80}, -{43,49,-79}, -{43,49,-78}, -{43,49,-77}, -{43,49,-76}, -{43,49,-75}, -{43,49,-74}, -{43,49,-73}, -{43,49,-72}, -{43,49,-71}, -{43,49,-70}, -{43,49,-69}, -{43,49,-68}, -{43,49,-67}, -{43,49,-66}, -{43,49,-65}, -{43,49,-64}, -{43,49,-63}, -{43,49,-62}, -{43,49,-61}, -{43,49,-60}, -{43,49,-59}, -{43,49,-58}, -{43,49,-57}, -{43,49,-56}, -{43,49,-55}, -{43,49,-54}, -{43,49,-53}, -{43,49,-52}, -{43,49,-51}, -{43,49,-50}, -{43,49,-49}, -{43,49,-48}, -{43,49,-47}, -{43,49,-46}, -{43,49,-45}, -{43,49,-44}, -{43,49,-43}, -{43,49,-42}, -{43,49,-41}, -{43,49,-40}, -{43,49,-39}, -{43,49,-38}, -{43,49,-37}, -{43,49,-36}, -{43,49,-35}, -{43,49,-34}, -{43,49,-33}, -{43,49,-32}, -{43,49,-31}, -{43,49,-30}, -{43,49,-29}, -{43,49,-28}, -{43,49,-27}, -{43,49,-26}, -{43,49,-25}, -{43,49,-24}, -{43,49,-23}, -{43,49,-22}, -{43,49,-21}, -{43,49,-20}, -{43,49,-19}, -{43,49,-18}, -{43,49,-17}, -{43,49,-16}, -{43,49,-15}, -{43,49,-14}, -{43,49,-13}, -{43,49,-12}, -{43,49,-11}, -{43,49,-10}, -{43,49,-9}, -{43,49,-8}, -{43,49,-7}, -{43,49,-6}, -{43,49,-5}, -{43,49,-4}, -{43,49,-3}, -{43,49,-2}, -{43,49,-1}, -{43,49,0}, -{43,49,1}, -{43,49,2}, -{43,49,3}, -{43,49,4}, -{43,49,5}, -{43,49,6}, -{43,49,7}, -{43,49,8}, -{43,49,9}, -{43,49,10}, -{43,49,11}, -{43,49,12}, -{43,49,13}, -{43,49,14}, -{43,49,15}, -{43,49,16}, -{43,49,17}, -{43,49,18}, -{43,49,19}, -{43,49,20}, -{43,49,21}, -{43,49,22}, -{43,49,23}, -{43,49,24}, -{43,49,25}, -{43,49,26}, -{43,49,27}, -{43,49,28}, -{43,49,29}, -{43,49,30}, -{43,49,31}, -{43,49,32}, -{43,49,33}, -{43,49,34}, -{43,49,35}, -{43,49,36}, -{43,49,37}, -{43,49,38}, -{43,49,39}, -{43,49,40}, -{43,49,41}, -{43,49,42}, -{43,49,43}, -{43,49,44}, -{43,49,45}, -{43,49,46}, -{43,49,47}, -{43,49,48}, -{43,49,49}, -{43,49,50}, -{43,49,51}, -{43,49,52}, -{43,49,53}, -{43,49,54}, -{43,50,-90}, -{43,50,-89}, -{43,50,-88}, -{43,50,-87}, -{43,50,-86}, -{43,50,-85}, -{43,50,-84}, -{43,50,-83}, -{43,50,-82}, -{43,50,-81}, -{43,50,-80}, -{43,50,-79}, -{43,50,-78}, -{43,50,-77}, -{43,50,-76}, -{43,50,-75}, -{43,50,-74}, -{43,50,-73}, -{43,50,-72}, -{43,50,-71}, -{43,50,-70}, -{43,50,-69}, -{43,50,-68}, -{43,50,-67}, -{43,50,-66}, -{43,50,-65}, -{43,50,-64}, -{43,50,-63}, -{43,50,-62}, -{43,50,-61}, -{43,50,-60}, -{43,50,-59}, -{43,50,-58}, -{43,50,-57}, -{43,50,-56}, -{43,50,-55}, -{43,50,-54}, -{43,50,-53}, -{43,50,-52}, -{43,50,-51}, -{43,50,-50}, -{43,50,-49}, -{43,50,-48}, -{43,50,-47}, -{43,50,-46}, -{43,50,-45}, -{43,50,-44}, -{43,50,-43}, -{43,50,-42}, -{43,50,-41}, -{43,50,-40}, -{43,50,-39}, -{43,50,-38}, -{43,50,-37}, -{43,50,-36}, -{43,50,-35}, -{43,50,-34}, -{43,50,-33}, -{43,50,-32}, -{43,50,-31}, -{43,50,-30}, -{43,50,-29}, -{43,50,-28}, -{43,50,-27}, -{43,50,-26}, -{43,50,-25}, -{43,50,-24}, -{43,50,-23}, -{43,50,-22}, -{43,50,-21}, -{43,50,-20}, -{43,50,-19}, -{43,50,-18}, -{43,50,-17}, -{43,50,-16}, -{43,50,-15}, -{43,50,-14}, -{43,50,-13}, -{43,50,-12}, -{43,50,-11}, -{43,50,-10}, -{43,50,-9}, -{43,50,-8}, -{43,50,-7}, -{43,50,-6}, -{43,50,-5}, -{43,50,-4}, -{43,50,-3}, -{43,50,-2}, -{43,50,-1}, -{43,50,0}, -{43,50,1}, -{43,50,2}, -{43,50,3}, -{43,50,4}, -{43,50,5}, -{43,50,6}, -{43,50,7}, -{43,50,8}, -{43,50,9}, -{43,50,10}, -{43,50,11}, -{43,50,12}, -{43,50,13}, -{43,50,14}, -{43,50,15}, -{43,50,16}, -{43,50,17}, -{43,50,18}, -{43,50,19}, -{43,50,20}, -{43,50,21}, -{43,50,22}, -{43,50,23}, -{43,50,24}, -{43,50,25}, -{43,50,26}, -{43,50,27}, -{43,50,28}, -{43,50,29}, -{43,50,30}, -{43,50,31}, -{43,50,32}, -{43,50,33}, -{43,50,34}, -{43,50,35}, -{43,50,36}, -{43,50,37}, -{43,50,38}, -{43,50,39}, -{43,50,40}, -{43,50,41}, -{43,50,42}, -{43,50,43}, -{43,50,44}, -{43,50,45}, -{43,50,46}, -{43,50,47}, -{43,50,48}, -{43,50,49}, -{43,50,50}, -{43,50,51}, -{43,50,52}, -{43,50,53}, -{43,50,54}, -{43,51,-90}, -{43,51,-89}, -{43,51,-88}, -{43,51,-87}, -{43,51,-86}, -{43,51,-85}, -{43,51,-84}, -{43,51,-83}, -{43,51,-82}, -{43,51,-81}, -{43,51,-80}, -{43,51,-79}, -{43,51,-78}, -{43,51,-77}, -{43,51,-76}, -{43,51,-75}, -{43,51,-74}, -{43,51,-73}, -{43,51,-72}, -{43,51,-71}, -{43,51,-70}, -{43,51,-69}, -{43,51,-68}, -{43,51,-67}, -{43,51,-66}, -{43,51,-65}, -{43,51,-64}, -{43,51,-63}, -{43,51,-62}, -{43,51,-61}, -{43,51,-60}, -{43,51,-59}, -{43,51,-58}, -{43,51,-57}, -{43,51,-56}, -{43,51,-55}, -{43,51,-54}, -{43,51,-53}, -{43,51,-52}, -{43,51,-51}, -{43,51,-50}, -{43,51,-49}, -{43,51,-48}, -{43,51,-47}, -{43,51,-46}, -{43,51,-45}, -{43,51,-44}, -{43,51,-43}, -{43,51,-42}, -{43,51,-41}, -{43,51,-40}, -{43,51,-39}, -{43,51,-38}, -{43,51,-37}, -{43,51,-36}, -{43,51,-35}, -{43,51,-34}, -{43,51,-33}, -{43,51,-32}, -{43,51,-31}, -{43,51,-30}, -{43,51,-29}, -{43,51,-28}, -{43,51,-27}, -{43,51,-26}, -{43,51,-25}, -{43,51,-24}, -{43,51,-23}, -{43,51,-22}, -{43,51,-21}, -{43,51,-20}, -{43,51,-19}, -{43,51,-18}, -{43,51,-17}, -{43,51,-16}, -{43,51,-15}, -{43,51,-14}, -{43,51,-13}, -{43,51,-12}, -{43,51,-11}, -{43,51,-10}, -{43,51,-9}, -{43,51,-8}, -{43,51,-7}, -{43,51,-6}, -{43,51,-5}, -{43,51,-4}, -{43,51,-3}, -{43,51,-2}, -{43,51,-1}, -{43,51,0}, -{43,51,1}, -{43,51,2}, -{43,51,3}, -{43,51,4}, -{43,51,5}, -{43,51,6}, -{43,51,7}, -{43,51,8}, -{43,51,9}, -{43,51,10}, -{43,51,11}, -{43,51,12}, -{43,51,13}, -{43,51,14}, -{43,51,15}, -{43,51,16}, -{43,51,17}, -{43,51,18}, -{43,51,19}, -{43,51,20}, -{43,51,21}, -{43,51,22}, -{43,51,23}, -{43,51,24}, -{43,51,25}, -{43,51,26}, -{43,51,27}, -{43,51,28}, -{43,51,29}, -{43,51,30}, -{43,51,31}, -{43,51,32}, -{43,51,33}, -{43,51,34}, -{43,51,35}, -{43,51,36}, -{43,51,37}, -{43,51,38}, -{43,51,39}, -{43,51,40}, -{43,51,41}, -{43,51,42}, -{43,51,43}, -{43,51,44}, -{43,51,45}, -{43,51,46}, -{43,51,47}, -{43,51,48}, -{43,51,49}, -{43,51,50}, -{43,51,51}, -{43,51,52}, -{43,51,53}, -{43,51,54}, -{43,51,55}, -{43,52,-90}, -{43,52,-89}, -{43,52,-88}, -{43,52,-87}, -{43,52,-86}, -{43,52,-85}, -{43,52,-84}, -{43,52,-83}, -{43,52,-82}, -{43,52,-81}, -{43,52,-80}, -{43,52,-79}, -{43,52,-78}, -{43,52,-77}, -{43,52,-76}, -{43,52,-75}, -{43,52,-74}, -{43,52,-73}, -{43,52,-72}, -{43,52,-71}, -{43,52,-70}, -{43,52,-69}, -{43,52,-68}, -{43,52,-67}, -{43,52,-66}, -{43,52,-65}, -{43,52,-64}, -{43,52,-63}, -{43,52,-62}, -{43,52,-61}, -{43,52,-60}, -{43,52,-59}, -{43,52,-58}, -{43,52,-57}, -{43,52,-56}, -{43,52,-55}, -{43,52,-54}, -{43,52,-53}, -{43,52,-52}, -{43,52,-51}, -{43,52,-50}, -{43,52,-49}, -{43,52,-48}, -{43,52,-47}, -{43,52,-46}, -{43,52,-45}, -{43,52,-44}, -{43,52,-43}, -{43,52,-42}, -{43,52,-41}, -{43,52,-40}, -{43,52,-39}, -{43,52,-38}, -{43,52,-37}, -{43,52,-36}, -{43,52,-35}, -{43,52,-34}, -{43,52,-33}, -{43,52,-32}, -{43,52,-31}, -{43,52,-30}, -{43,52,-29}, -{43,52,-28}, -{43,52,-27}, -{43,52,-26}, -{43,52,-25}, -{43,52,-24}, -{43,52,-23}, -{43,52,-22}, -{43,52,-21}, -{43,52,-20}, -{43,52,-19}, -{43,52,-18}, -{43,52,-17}, -{43,52,-16}, -{43,52,-15}, -{43,52,-14}, -{43,52,-13}, -{43,52,-12}, -{43,52,-11}, -{43,52,-10}, -{43,52,-9}, -{43,52,-8}, -{43,52,-7}, -{43,52,-6}, -{43,52,-5}, -{43,52,-4}, -{43,52,-3}, -{43,52,-2}, -{43,52,-1}, -{43,52,0}, -{43,52,1}, -{43,52,2}, -{43,52,3}, -{43,52,4}, -{43,52,5}, -{43,52,6}, -{43,52,7}, -{43,52,8}, -{43,52,9}, -{43,52,10}, -{43,52,11}, -{43,52,12}, -{43,52,13}, -{43,52,14}, -{43,52,15}, -{43,52,16}, -{43,52,17}, -{43,52,18}, -{43,52,19}, -{43,52,20}, -{43,52,21}, -{43,52,22}, -{43,52,23}, -{43,52,24}, -{43,52,25}, -{43,52,26}, -{43,52,27}, -{43,52,28}, -{43,52,29}, -{43,52,30}, -{43,52,31}, -{43,52,32}, -{43,52,33}, -{43,52,34}, -{43,52,35}, -{43,52,36}, -{43,52,37}, -{43,52,38}, -{43,52,39}, -{43,52,40}, -{43,52,41}, -{43,52,42}, -{43,52,43}, -{43,52,44}, -{43,52,45}, -{43,52,46}, -{43,52,47}, -{43,52,48}, -{43,52,49}, -{43,52,50}, -{43,52,51}, -{43,52,52}, -{43,52,53}, -{43,52,54}, -{43,52,55}, -{43,53,-90}, -{43,53,-89}, -{43,53,-88}, -{43,53,-87}, -{43,53,-86}, -{43,53,-85}, -{43,53,-84}, -{43,53,-83}, -{43,53,-82}, -{43,53,-81}, -{43,53,-80}, -{43,53,-79}, -{43,53,-78}, -{43,53,-77}, -{43,53,-76}, -{43,53,-75}, -{43,53,-74}, -{43,53,-73}, -{43,53,-72}, -{43,53,-71}, -{43,53,-70}, -{43,53,-69}, -{43,53,-68}, -{43,53,-67}, -{43,53,-66}, -{43,53,-65}, -{43,53,-64}, -{43,53,-63}, -{43,53,-62}, -{43,53,-61}, -{43,53,-60}, -{43,53,-59}, -{43,53,-58}, -{43,53,-57}, -{43,53,-56}, -{43,53,-55}, -{43,53,-54}, -{43,53,-53}, -{43,53,-52}, -{43,53,-51}, -{43,53,-50}, -{43,53,-49}, -{43,53,-48}, -{43,53,-47}, -{43,53,-46}, -{43,53,-45}, -{43,53,-44}, -{43,53,-43}, -{43,53,-42}, -{43,53,-41}, -{43,53,-40}, -{43,53,-39}, -{43,53,-38}, -{43,53,-37}, -{43,53,-36}, -{43,53,-35}, -{43,53,-34}, -{43,53,-33}, -{43,53,-32}, -{43,53,-31}, -{43,53,-30}, -{43,53,-29}, -{43,53,-28}, -{43,53,-27}, -{43,53,-26}, -{43,53,-25}, -{43,53,-24}, -{43,53,-23}, -{43,53,-22}, -{43,53,-21}, -{43,53,-20}, -{43,53,-19}, -{43,53,-18}, -{43,53,-17}, -{43,53,-16}, -{43,53,-15}, -{43,53,-14}, -{43,53,-13}, -{43,53,-12}, -{43,53,-11}, -{43,53,-10}, -{43,53,-9}, -{43,53,-8}, -{43,53,-7}, -{43,53,-6}, -{43,53,-5}, -{43,53,-4}, -{43,53,-3}, -{43,53,-2}, -{43,53,-1}, -{43,53,0}, -{43,53,1}, -{43,53,2}, -{43,53,3}, -{43,53,4}, -{43,53,5}, -{43,53,6}, -{43,53,7}, -{43,53,8}, -{43,53,9}, -{43,53,10}, -{43,53,11}, -{43,53,12}, -{43,53,13}, -{43,53,14}, -{43,53,15}, -{43,53,16}, -{43,53,17}, -{43,53,18}, -{43,53,19}, -{43,53,20}, -{43,53,21}, -{43,53,22}, -{43,53,23}, -{43,53,24}, -{43,53,25}, -{43,53,26}, -{43,53,27}, -{43,53,28}, -{43,53,29}, -{43,53,30}, -{43,53,31}, -{43,53,32}, -{43,53,33}, -{43,53,34}, -{43,53,35}, -{43,53,36}, -{43,53,37}, -{43,53,38}, -{43,53,39}, -{43,53,40}, -{43,53,41}, -{43,53,42}, -{43,53,43}, -{43,53,44}, -{43,53,45}, -{43,53,46}, -{43,53,47}, -{43,53,48}, -{43,53,49}, -{43,53,50}, -{43,53,51}, -{43,53,52}, -{43,53,53}, -{43,53,54}, -{43,53,55}, -{43,54,-90}, -{43,54,-89}, -{43,54,-88}, -{43,54,-87}, -{43,54,-86}, -{43,54,-85}, -{43,54,-84}, -{43,54,-83}, -{43,54,-82}, -{43,54,-81}, -{43,54,-80}, -{43,54,-79}, -{43,54,-78}, -{43,54,-77}, -{43,54,-76}, -{43,54,-75}, -{43,54,-74}, -{43,54,-73}, -{43,54,-72}, -{43,54,-71}, -{43,54,-70}, -{43,54,-69}, -{43,54,-68}, -{43,54,-67}, -{43,54,-66}, -{43,54,-65}, -{43,54,-64}, -{43,54,-63}, -{43,54,-62}, -{43,54,-61}, -{43,54,-60}, -{43,54,-59}, -{43,54,-58}, -{43,54,-57}, -{43,54,-56}, -{43,54,-55}, -{43,54,-54}, -{43,54,-53}, -{43,54,-52}, -{43,54,-51}, -{43,54,-50}, -{43,54,-49}, -{43,54,-48}, -{43,54,-47}, -{43,54,-46}, -{43,54,-45}, -{43,54,-44}, -{43,54,-43}, -{43,54,-42}, -{43,54,-41}, -{43,54,-40}, -{43,54,-39}, -{43,54,-38}, -{43,54,-37}, -{43,54,-36}, -{43,54,-35}, -{43,54,-34}, -{43,54,-33}, -{43,54,-32}, -{43,54,-31}, -{43,54,-30}, -{43,54,-29}, -{43,54,-28}, -{43,54,-27}, -{43,54,-26}, -{43,54,-25}, -{43,54,-24}, -{43,54,-23}, -{43,54,-22}, -{43,54,-21}, -{43,54,-20}, -{43,54,-19}, -{43,54,-18}, -{43,54,-17}, -{43,54,-16}, -{43,54,-15}, -{43,54,-14}, -{43,54,-13}, -{43,54,-12}, -{43,54,-11}, -{43,54,-10}, -{43,54,-9}, -{43,54,-8}, -{43,54,-7}, -{43,54,-6}, -{43,54,-5}, -{43,54,-4}, -{43,54,-3}, -{43,54,-2}, -{43,54,-1}, -{43,54,0}, -{43,54,1}, -{43,54,2}, -{43,54,3}, -{43,54,4}, -{43,54,5}, -{43,54,6}, -{43,54,7}, -{43,54,8}, -{43,54,9}, -{43,54,10}, -{43,54,11}, -{43,54,12}, -{43,54,13}, -{43,54,14}, -{43,54,15}, -{43,54,16}, -{43,54,17}, -{43,54,18}, -{43,54,19}, -{43,54,20}, -{43,54,21}, -{43,54,22}, -{43,54,23}, -{43,54,24}, -{43,54,25}, -{43,54,26}, -{43,54,27}, -{43,54,28}, -{43,54,29}, -{43,54,30}, -{43,54,31}, -{43,54,32}, -{43,54,33}, -{43,54,34}, -{43,54,35}, -{43,54,36}, -{43,54,37}, -{43,54,38}, -{43,54,39}, -{43,54,40}, -{43,54,41}, -{43,54,42}, -{43,54,43}, -{43,54,44}, -{43,54,45}, -{43,54,46}, -{43,54,47}, -{43,54,48}, -{43,54,49}, -{43,54,50}, -{43,54,51}, -{43,54,52}, -{43,54,53}, -{43,54,54}, -{43,54,55}, -{43,55,-90}, -{43,55,-89}, -{43,55,-88}, -{43,55,-87}, -{43,55,-86}, -{43,55,-85}, -{43,55,-84}, -{43,55,-83}, -{43,55,-82}, -{43,55,-81}, -{43,55,-80}, -{43,55,-79}, -{43,55,-78}, -{43,55,-77}, -{43,55,-76}, -{43,55,-75}, -{43,55,-74}, -{43,55,-73}, -{43,55,-72}, -{43,55,-71}, -{43,55,-70}, -{43,55,-69}, -{43,55,-68}, -{43,55,-67}, -{43,55,-66}, -{43,55,-65}, -{43,55,-64}, -{43,55,-63}, -{43,55,-62}, -{43,55,-61}, -{43,55,-60}, -{43,55,-59}, -{43,55,-58}, -{43,55,-57}, -{43,55,-56}, -{43,55,-55}, -{43,55,-54}, -{43,55,-53}, -{43,55,-52}, -{43,55,-51}, -{43,55,-50}, -{43,55,-49}, -{43,55,-48}, -{43,55,-47}, -{43,55,-46}, -{43,55,-45}, -{43,55,-44}, -{43,55,-43}, -{43,55,-42}, -{43,55,-41}, -{43,55,-40}, -{43,55,-39}, -{43,55,-38}, -{43,55,-37}, -{43,55,-36}, -{43,55,-35}, -{43,55,-34}, -{43,55,-33}, -{43,55,-32}, -{43,55,-31}, -{43,55,-30}, -{43,55,-29}, -{43,55,-28}, -{43,55,-27}, -{43,55,-26}, -{43,55,-25}, -{43,55,-24}, -{43,55,-23}, -{43,55,-22}, -{43,55,-21}, -{43,55,-20}, -{43,55,-19}, -{43,55,-18}, -{43,55,-17}, -{43,55,-16}, -{43,55,-15}, -{43,55,-14}, -{43,55,-13}, -{43,55,-12}, -{43,55,-11}, -{43,55,-10}, -{43,55,-9}, -{43,55,-8}, -{43,55,-7}, -{43,55,-6}, -{43,55,-5}, -{43,55,-4}, -{43,55,-3}, -{43,55,-2}, -{43,55,-1}, -{43,55,0}, -{43,55,1}, -{43,55,2}, -{43,55,3}, -{43,55,4}, -{43,55,5}, -{43,55,6}, -{43,55,7}, -{43,55,8}, -{43,55,9}, -{43,55,10}, -{43,55,11}, -{43,55,12}, -{43,55,13}, -{43,55,14}, -{43,55,15}, -{43,55,16}, -{43,55,17}, -{43,55,18}, -{43,55,19}, -{43,55,20}, -{43,55,21}, -{43,55,22}, -{43,55,23}, -{43,55,24}, -{43,55,25}, -{43,55,26}, -{43,55,27}, -{43,55,28}, -{43,55,29}, -{43,55,30}, -{43,55,31}, -{43,55,32}, -{43,55,33}, -{43,55,34}, -{43,55,35}, -{43,55,36}, -{43,55,37}, -{43,55,38}, -{43,55,39}, -{43,55,40}, -{43,55,41}, -{43,55,42}, -{43,55,43}, -{43,55,44}, -{43,55,45}, -{43,55,46}, -{43,55,47}, -{43,55,48}, -{43,55,49}, -{43,55,50}, -{43,55,51}, -{43,55,52}, -{43,55,53}, -{43,55,54}, -{43,55,55}, -{43,56,-90}, -{43,56,-89}, -{43,56,-88}, -{43,56,-87}, -{43,56,-86}, -{43,56,-85}, -{43,56,-84}, -{43,56,-83}, -{43,56,-82}, -{43,56,-81}, -{43,56,-80}, -{43,56,-79}, -{43,56,-78}, -{43,56,-77}, -{43,56,-76}, -{43,56,-75}, -{43,56,-74}, -{43,56,-73}, -{43,56,-72}, -{43,56,-71}, -{43,56,-70}, -{43,56,-69}, -{43,56,-68}, -{43,56,-67}, -{43,56,-66}, -{43,56,-65}, -{43,56,-64}, -{43,56,-63}, -{43,56,-62}, -{43,56,-61}, -{43,56,-60}, -{43,56,-59}, -{43,56,-58}, -{43,56,-57}, -{43,56,-56}, -{43,56,-55}, -{43,56,-54}, -{43,56,-53}, -{43,56,-52}, -{43,56,-51}, -{43,56,-50}, -{43,56,-49}, -{43,56,-48}, -{43,56,-47}, -{43,56,-46}, -{43,56,-45}, -{43,56,-44}, -{43,56,-43}, -{43,56,-42}, -{43,56,-41}, -{43,56,-40}, -{43,56,-39}, -{43,56,-38}, -{43,56,-37}, -{43,56,-36}, -{43,56,-35}, -{43,56,-34}, -{43,56,-33}, -{43,56,-32}, -{43,56,-31}, -{43,56,-30}, -{43,56,-29}, -{43,56,-28}, -{43,56,-27}, -{43,56,-26}, -{43,56,-25}, -{43,56,-24}, -{43,56,-23}, -{43,56,-22}, -{43,56,-21}, -{43,56,-20}, -{43,56,-19}, -{43,56,-18}, -{43,56,-17}, -{43,56,-16}, -{43,56,-15}, -{43,56,-14}, -{43,56,-13}, -{43,56,-12}, -{43,56,-11}, -{43,56,-10}, -{43,56,-9}, -{43,56,-8}, -{43,56,-7}, -{43,56,-6}, -{43,56,-5}, -{43,56,-4}, -{43,56,-3}, -{43,56,-2}, -{43,56,-1}, -{43,56,0}, -{43,56,1}, -{43,56,2}, -{43,56,3}, -{43,56,4}, -{43,56,5}, -{43,56,6}, -{43,56,7}, -{43,56,8}, -{43,56,9}, -{43,56,10}, -{43,56,11}, -{43,56,12}, -{43,56,13}, -{43,56,14}, -{43,56,15}, -{43,56,16}, -{43,56,17}, -{43,56,18}, -{43,56,19}, -{43,56,20}, -{43,56,21}, -{43,56,22}, -{43,56,23}, -{43,56,24}, -{43,56,25}, -{43,56,26}, -{43,56,27}, -{43,56,28}, -{43,56,29}, -{43,56,30}, -{43,56,31}, -{43,56,32}, -{43,56,33}, -{43,56,34}, -{43,56,35}, -{43,56,36}, -{43,56,37}, -{43,56,38}, -{43,56,39}, -{43,56,40}, -{43,56,41}, -{43,56,42}, -{43,56,43}, -{43,56,44}, -{43,56,45}, -{43,56,46}, -{43,56,47}, -{43,56,48}, -{43,56,49}, -{43,56,50}, -{43,56,51}, -{43,56,52}, -{43,56,53}, -{43,56,54}, -{43,56,55}, -{43,57,-90}, -{43,57,-89}, -{43,57,-88}, -{43,57,-87}, -{43,57,-86}, -{43,57,-85}, -{43,57,-84}, -{43,57,-83}, -{43,57,-82}, -{43,57,-81}, -{43,57,-80}, -{43,57,-79}, -{43,57,-78}, -{43,57,-77}, -{43,57,-76}, -{43,57,-75}, -{43,57,-74}, -{43,57,-73}, -{43,57,-72}, -{43,57,-71}, -{43,57,-70}, -{43,57,-69}, -{43,57,-68}, -{43,57,-67}, -{43,57,-66}, -{43,57,-65}, -{43,57,-64}, -{43,57,-63}, -{43,57,-62}, -{43,57,-61}, -{43,57,-60}, -{43,57,-59}, -{43,57,-58}, -{43,57,-57}, -{43,57,-56}, -{43,57,-55}, -{43,57,-54}, -{43,57,-53}, -{43,57,-52}, -{43,57,-51}, -{43,57,-50}, -{43,57,-49}, -{43,57,-48}, -{43,57,-47}, -{43,57,-46}, -{43,57,-45}, -{43,57,-44}, -{43,57,-43}, -{43,57,-42}, -{43,57,-41}, -{43,57,-40}, -{43,57,-39}, -{43,57,-38}, -{43,57,-37}, -{43,57,-36}, -{43,57,-35}, -{43,57,-34}, -{43,57,-33}, -{43,57,-32}, -{43,57,-31}, -{43,57,-30}, -{43,57,-29}, -{43,57,-28}, -{43,57,-27}, -{43,57,-26}, -{43,57,-25}, -{43,57,-24}, -{43,57,-23}, -{43,57,-22}, -{43,57,-21}, -{43,57,-20}, -{43,57,-19}, -{43,57,-18}, -{43,57,-17}, -{43,57,-16}, -{43,57,-15}, -{43,57,-14}, -{43,57,-13}, -{43,57,-12}, -{43,57,-11}, -{43,57,-10}, -{43,57,-9}, -{43,57,-8}, -{43,57,-7}, -{43,57,-6}, -{43,57,-5}, -{43,57,-4}, -{43,57,-3}, -{43,57,-2}, -{43,57,-1}, -{43,57,0}, -{43,57,1}, -{43,57,2}, -{43,57,3}, -{43,57,4}, -{43,57,5}, -{43,57,6}, -{43,57,7}, -{43,57,8}, -{43,57,9}, -{43,57,10}, -{43,57,11}, -{43,57,12}, -{43,57,13}, -{43,57,14}, -{43,57,15}, -{43,57,16}, -{43,57,17}, -{43,57,18}, -{43,57,19}, -{43,57,20}, -{43,57,21}, -{43,57,22}, -{43,57,23}, -{43,57,24}, -{43,57,25}, -{43,57,26}, -{43,57,27}, -{43,57,28}, -{43,57,29}, -{43,57,30}, -{43,57,31}, -{43,57,32}, -{43,57,33}, -{43,57,34}, -{43,57,35}, -{43,57,36}, -{43,57,37}, -{43,57,38}, -{43,57,39}, -{43,57,40}, -{43,57,41}, -{43,57,42}, -{43,57,43}, -{43,57,44}, -{43,57,45}, -{43,57,46}, -{43,57,47}, -{43,57,48}, -{43,57,49}, -{43,57,50}, -{43,57,51}, -{43,57,52}, -{43,57,53}, -{43,57,54}, -{43,57,55}, -{43,58,-90}, -{43,58,-89}, -{43,58,-88}, -{43,58,-87}, -{43,58,-86}, -{43,58,-85}, -{43,58,-84}, -{43,58,-83}, -{43,58,-82}, -{43,58,-81}, -{43,58,-80}, -{43,58,-79}, -{43,58,-78}, -{43,58,-77}, -{43,58,-76}, -{43,58,-75}, -{43,58,-74}, -{43,58,-73}, -{43,58,-72}, -{43,58,-71}, -{43,58,-70}, -{43,58,-69}, -{43,58,-68}, -{43,58,-67}, -{43,58,-66}, -{43,58,-65}, -{43,58,-64}, -{43,58,-63}, -{43,58,-62}, -{43,58,-61}, -{43,58,-60}, -{43,58,-59}, -{43,58,-58}, -{43,58,-57}, -{43,58,-56}, -{43,58,-55}, -{43,58,-54}, -{43,58,-53}, -{43,58,-52}, -{43,58,-51}, -{43,58,-50}, -{43,58,-49}, -{43,58,-48}, -{43,58,-47}, -{43,58,-46}, -{43,58,-45}, -{43,58,-44}, -{43,58,-43}, -{43,58,-42}, -{43,58,-41}, -{43,58,-40}, -{43,58,-39}, -{43,58,-38}, -{43,58,-37}, -{43,58,-36}, -{43,58,-35}, -{43,58,-34}, -{43,58,-33}, -{43,58,-32}, -{43,58,-31}, -{43,58,-30}, -{43,58,-29}, -{43,58,-28}, -{43,58,-27}, -{43,58,-26}, -{43,58,-25}, -{43,58,-24}, -{43,58,-23}, -{43,58,-22}, -{43,58,-21}, -{43,58,-20}, -{43,58,-19}, -{43,58,-18}, -{43,58,-17}, -{43,58,-16}, -{43,58,-15}, -{43,58,-14}, -{43,58,-13}, -{43,58,-12}, -{43,58,-11}, -{43,58,-10}, -{43,58,-9}, -{43,58,-8}, -{43,58,-7}, -{43,58,-6}, -{43,58,-5}, -{43,58,-4}, -{43,58,-3}, -{43,58,-2}, -{43,58,-1}, -{43,58,0}, -{43,58,1}, -{43,58,2}, -{43,58,3}, -{43,58,4}, -{43,58,5}, -{43,58,6}, -{43,58,7}, -{43,58,8}, -{43,58,9}, -{43,58,10}, -{43,58,11}, -{43,58,12}, -{43,58,13}, -{43,58,14}, -{43,58,15}, -{43,58,16}, -{43,58,17}, -{43,58,18}, -{43,58,19}, -{43,58,20}, -{43,58,21}, -{43,58,22}, -{43,58,23}, -{43,58,24}, -{43,58,25}, -{43,58,26}, -{43,58,27}, -{43,58,28}, -{43,58,29}, -{43,58,30}, -{43,58,31}, -{43,58,32}, -{43,58,33}, -{43,58,34}, -{43,58,35}, -{43,58,36}, -{43,58,37}, -{43,58,38}, -{43,58,39}, -{43,58,40}, -{43,58,41}, -{43,58,42}, -{43,58,43}, -{43,58,44}, -{43,58,45}, -{43,58,46}, -{43,58,47}, -{43,58,48}, -{43,58,49}, -{43,58,50}, -{43,58,51}, -{43,58,52}, -{43,58,53}, -{43,58,54}, -{43,58,55}, -{43,59,-90}, -{43,59,-89}, -{43,59,-88}, -{43,59,-87}, -{43,59,-86}, -{43,59,-85}, -{43,59,-84}, -{43,59,-83}, -{43,59,-82}, -{43,59,-81}, -{43,59,-80}, -{43,59,-79}, -{43,59,-78}, -{43,59,-77}, -{43,59,-76}, -{43,59,-75}, -{43,59,-74}, -{43,59,-73}, -{43,59,-72}, -{43,59,-71}, -{43,59,-70}, -{43,59,-69}, -{43,59,-68}, -{43,59,-67}, -{43,59,-66}, -{43,59,-65}, -{43,59,-64}, -{43,59,-63}, -{43,59,-62}, -{43,59,-61}, -{43,59,-60}, -{43,59,-59}, -{43,59,-58}, -{43,59,-57}, -{43,59,-56}, -{43,59,-55}, -{43,59,-54}, -{43,59,-53}, -{43,59,-52}, -{43,59,-51}, -{43,59,-50}, -{43,59,-49}, -{43,59,-48}, -{43,59,-47}, -{43,59,-46}, -{43,59,-45}, -{43,59,-44}, -{43,59,-43}, -{43,59,-42}, -{43,59,-41}, -{43,59,-40}, -{43,59,-39}, -{43,59,-38}, -{43,59,-37}, -{43,59,-36}, -{43,59,-35}, -{43,59,-34}, -{43,59,-33}, -{43,59,-32}, -{43,59,-31}, -{43,59,-30}, -{43,59,-29}, -{43,59,-28}, -{43,59,-27}, -{43,59,-26}, -{43,59,-25}, -{43,59,-24}, -{43,59,-23}, -{43,59,-22}, -{43,59,-21}, -{43,59,-20}, -{43,59,-19}, -{43,59,-18}, -{43,59,-17}, -{43,59,-16}, -{43,59,-15}, -{43,59,-14}, -{43,59,-13}, -{43,59,-12}, -{43,59,-11}, -{43,59,-10}, -{43,59,-9}, -{43,59,-8}, -{43,59,-7}, -{43,59,-6}, -{43,59,-5}, -{43,59,-4}, -{43,59,-3}, -{43,59,-2}, -{43,59,-1}, -{43,59,0}, -{43,59,1}, -{43,59,2}, -{43,59,3}, -{43,59,4}, -{43,59,5}, -{43,59,6}, -{43,59,7}, -{43,59,8}, -{43,59,9}, -{43,59,10}, -{43,59,11}, -{43,59,12}, -{43,59,13}, -{43,59,14}, -{43,59,15}, -{43,59,16}, -{43,59,17}, -{43,59,18}, -{43,59,19}, -{43,59,20}, -{43,59,21}, -{43,59,22}, -{43,59,23}, -{43,59,24}, -{43,59,25}, -{43,59,26}, -{43,59,27}, -{43,59,28}, -{43,59,29}, -{43,59,30}, -{43,59,31}, -{43,59,32}, -{43,59,33}, -{43,59,34}, -{43,59,35}, -{43,59,36}, -{43,59,37}, -{43,59,38}, -{43,59,39}, -{43,59,40}, -{43,59,41}, -{43,59,42}, -{43,59,43}, -{43,59,44}, -{43,59,45}, -{43,59,46}, -{43,59,47}, -{43,59,48}, -{43,59,49}, -{43,59,50}, -{43,59,51}, -{43,59,52}, -{43,59,53}, -{43,59,54}, -{43,59,55}, -{43,59,56}, -{43,60,-90}, -{43,60,-89}, -{43,60,-88}, -{43,60,-87}, -{43,60,-86}, -{43,60,-85}, -{43,60,-84}, -{43,60,-83}, -{43,60,-82}, -{43,60,-81}, -{43,60,-80}, -{43,60,-79}, -{43,60,-78}, -{43,60,-77}, -{43,60,-76}, -{43,60,-75}, -{43,60,-74}, -{43,60,-73}, -{43,60,-72}, -{43,60,-71}, -{43,60,-70}, -{43,60,-69}, -{43,60,-68}, -{43,60,-67}, -{43,60,-66}, -{43,60,-65}, -{43,60,-64}, -{43,60,-63}, -{43,60,-62}, -{43,60,-61}, -{43,60,-60}, -{43,60,-59}, -{43,60,-58}, -{43,60,-57}, -{43,60,-56}, -{43,60,-55}, -{43,60,-54}, -{43,60,-53}, -{43,60,-52}, -{43,60,-51}, -{43,60,-50}, -{43,60,-49}, -{43,60,-48}, -{43,60,-47}, -{43,60,-46}, -{43,60,-45}, -{43,60,-44}, -{43,60,-43}, -{43,60,-42}, -{43,60,-41}, -{43,60,-40}, -{43,60,-39}, -{43,60,-38}, -{43,60,-37}, -{43,60,-36}, -{43,60,-35}, -{43,60,-34}, -{43,60,-33}, -{43,60,-32}, -{43,60,-31}, -{43,60,-30}, -{43,60,-29}, -{43,60,-28}, -{43,60,-27}, -{43,60,-26}, -{43,60,-25}, -{43,60,-24}, -{43,60,-23}, -{43,60,-22}, -{43,60,-21}, -{43,60,-20}, -{43,60,-19}, -{43,60,-18}, -{43,60,-17}, -{43,60,-16}, -{43,60,-15}, -{43,60,-14}, -{43,60,-13}, -{43,60,-12}, -{43,60,-11}, -{43,60,-10}, -{43,60,-9}, -{43,60,-8}, -{43,60,-7}, -{43,60,-6}, -{43,60,-5}, -{43,60,-4}, -{43,60,-3}, -{43,60,-2}, -{43,60,-1}, -{43,60,0}, -{43,60,1}, -{43,60,2}, -{43,60,3}, -{43,60,4}, -{43,60,5}, -{43,60,6}, -{43,60,7}, -{43,60,8}, -{43,60,9}, -{43,60,10}, -{43,60,11}, -{43,60,12}, -{43,60,13}, -{43,60,14}, -{43,60,15}, -{43,60,16}, -{43,60,17}, -{43,60,18}, -{43,60,19}, -{43,60,20}, -{43,60,21}, -{43,60,22}, -{43,60,23}, -{43,60,24}, -{43,60,25}, -{43,60,26}, -{43,60,27}, -{43,60,28}, -{43,60,29}, -{43,60,30}, -{43,60,31}, -{43,60,32}, -{43,60,33}, -{43,60,34}, -{43,60,35}, -{43,60,36}, -{43,60,37}, -{43,60,38}, -{43,60,39}, -{43,60,40}, -{43,60,41}, -{43,60,42}, -{43,60,43}, -{43,60,44}, -{43,60,45}, -{43,60,46}, -{43,60,47}, -{43,60,48}, -{43,60,49}, -{43,60,50}, -{43,60,51}, -{43,60,52}, -{43,60,53}, -{43,60,54}, -{43,60,55}, -{43,60,56}, -{43,61,-90}, -{43,61,-89}, -{43,61,-88}, -{43,61,-87}, -{43,61,-86}, -{43,61,-85}, -{43,61,-84}, -{43,61,-83}, -{43,61,-82}, -{43,61,-81}, -{43,61,-80}, -{43,61,-79}, -{43,61,-78}, -{43,61,-77}, -{43,61,-76}, -{43,61,-75}, -{43,61,-74}, -{43,61,-73}, -{43,61,-72}, -{43,61,-71}, -{43,61,-70}, -{43,61,-69}, -{43,61,-68}, -{43,61,-67}, -{43,61,-66}, -{43,61,-65}, -{43,61,-64}, -{43,61,-63}, -{43,61,-62}, -{43,61,-61}, -{43,61,-60}, -{43,61,-59}, -{43,61,-58}, -{43,61,-57}, -{43,61,-56}, -{43,61,-55}, -{43,61,-54}, -{43,61,-53}, -{43,61,-52}, -{43,61,-51}, -{43,61,-50}, -{43,61,-49}, -{43,61,-48}, -{43,61,-47}, -{43,61,-46}, -{43,61,-45}, -{43,61,-44}, -{43,61,-43}, -{43,61,-42}, -{43,61,-41}, -{43,61,-40}, -{43,61,-39}, -{43,61,-38}, -{43,61,-37}, -{43,61,-36}, -{43,61,-35}, -{43,61,-34}, -{43,61,-33}, -{43,61,-32}, -{43,61,-31}, -{43,61,-30}, -{43,61,-29}, -{43,61,-28}, -{43,61,-27}, -{43,61,-26}, -{43,61,-25}, -{43,61,-24}, -{43,61,-23}, -{43,61,-22}, -{43,61,-21}, -{43,61,-20}, -{43,61,-19}, -{43,61,-18}, -{43,61,-17}, -{43,61,-16}, -{43,61,-15}, -{43,61,-14}, -{43,61,-13}, -{43,61,-12}, -{43,61,-11}, -{43,61,-10}, -{43,61,-9}, -{43,61,-8}, -{43,61,-7}, -{43,61,-6}, -{43,61,-5}, -{43,61,-4}, -{43,61,-3}, -{43,61,-2}, -{43,61,-1}, -{43,61,0}, -{43,61,1}, -{43,61,2}, -{43,61,3}, -{43,61,4}, -{43,61,5}, -{43,61,6}, -{43,61,7}, -{43,61,8}, -{43,61,9}, -{43,61,10}, -{43,61,11}, -{43,61,12}, -{43,61,13}, -{43,61,14}, -{43,61,15}, -{43,61,16}, -{43,61,17}, -{43,61,18}, -{43,61,19}, -{43,61,20}, -{43,61,21}, -{43,61,22}, -{43,61,23}, -{43,61,24}, -{43,61,25}, -{43,61,26}, -{43,61,27}, -{43,61,28}, -{43,61,29}, -{43,61,30}, -{43,61,31}, -{43,61,32}, -{43,61,33}, -{43,61,34}, -{43,61,35}, -{43,61,36}, -{43,61,37}, -{43,61,38}, -{43,61,39}, -{43,61,40}, -{43,61,41}, -{43,61,42}, -{43,61,43}, -{43,61,44}, -{43,61,45}, -{43,61,46}, -{43,61,47}, -{43,61,48}, -{43,61,49}, -{43,61,50}, -{43,61,51}, -{43,61,52}, -{43,61,53}, -{43,61,54}, -{43,61,55}, -{43,61,56}, -{43,62,-90}, -{43,62,-89}, -{43,62,-88}, -{43,62,-87}, -{43,62,-86}, -{43,62,-85}, -{43,62,-84}, -{43,62,-83}, -{43,62,-82}, -{43,62,-81}, -{43,62,-80}, -{43,62,-79}, -{43,62,-78}, -{43,62,-77}, -{43,62,-76}, -{43,62,-75}, -{43,62,-74}, -{43,62,-73}, -{43,62,-72}, -{43,62,-71}, -{43,62,-70}, -{43,62,-69}, -{43,62,-68}, -{43,62,-67}, -{43,62,-66}, -{43,62,-65}, -{43,62,-64}, -{43,62,-63}, -{43,62,-62}, -{43,62,-61}, -{43,62,-60}, -{43,62,-59}, -{43,62,-58}, -{43,62,-57}, -{43,62,-56}, -{43,62,-55}, -{43,62,-54}, -{43,62,-53}, -{43,62,-52}, -{43,62,-51}, -{43,62,-50}, -{43,62,-49}, -{43,62,-48}, -{43,62,-47}, -{43,62,-46}, -{43,62,-45}, -{43,62,-44}, -{43,62,-43}, -{43,62,-42}, -{43,62,-41}, -{43,62,-40}, -{43,62,-39}, -{43,62,-38}, -{43,62,-37}, -{43,62,-36}, -{43,62,-35}, -{43,62,-34}, -{43,62,-33}, -{43,62,-32}, -{43,62,-31}, -{43,62,-30}, -{43,62,-29}, -{43,62,-28}, -{43,62,-27}, -{43,62,-26}, -{43,62,-25}, -{43,62,-24}, -{43,62,-23}, -{43,62,-22}, -{43,62,-21}, -{43,62,-20}, -{43,62,-19}, -{43,62,-18}, -{43,62,-17}, -{43,62,-16}, -{43,62,-15}, -{43,62,-14}, -{43,62,-13}, -{43,62,-12}, -{43,62,-11}, -{43,62,-10}, -{43,62,-9}, -{43,62,-8}, -{43,62,-7}, -{43,62,-6}, -{43,62,-5}, -{43,62,-4}, -{43,62,-3}, -{43,62,-2}, -{43,62,-1}, -{43,62,0}, -{43,62,1}, -{43,62,2}, -{43,62,3}, -{43,62,4}, -{43,62,5}, -{43,62,6}, -{43,62,7}, -{43,62,8}, -{43,62,9}, -{43,62,10}, -{43,62,11}, -{43,62,12}, -{43,62,13}, -{43,62,14}, -{43,62,15}, -{43,62,16}, -{43,62,17}, -{43,62,18}, -{43,62,19}, -{43,62,20}, -{43,62,21}, -{43,62,22}, -{43,62,23}, -{43,62,24}, -{43,62,25}, -{43,62,26}, -{43,62,27}, -{43,62,28}, -{43,62,29}, -{43,62,30}, -{43,62,31}, -{43,62,32}, -{43,62,33}, -{43,62,34}, -{43,62,35}, -{43,62,36}, -{43,62,37}, -{43,62,38}, -{43,62,39}, -{43,62,40}, -{43,62,41}, -{43,62,42}, -{43,62,43}, -{43,62,44}, -{43,62,45}, -{43,62,46}, -{43,62,47}, -{43,62,48}, -{43,62,49}, -{43,62,50}, -{43,62,51}, -{43,62,52}, -{43,62,53}, -{43,62,54}, -{43,62,55}, -{43,62,56}, -{43,63,-90}, -{43,63,-89}, -{43,63,-88}, -{43,63,-87}, -{43,63,-86}, -{43,63,-85}, -{43,63,-84}, -{43,63,-83}, -{43,63,-82}, -{43,63,-81}, -{43,63,-80}, -{43,63,-79}, -{43,63,-78}, -{43,63,-77}, -{43,63,-76}, -{43,63,-75}, -{43,63,-74}, -{43,63,-73}, -{43,63,-72}, -{43,63,-71}, -{43,63,-70}, -{43,63,-69}, -{43,63,-68}, -{43,63,-67}, -{43,63,-66}, -{43,63,-65}, -{43,63,-64}, -{43,63,-63}, -{43,63,-62}, -{43,63,-61}, -{43,63,-60}, -{43,63,-59}, -{43,63,-58}, -{43,63,-57}, -{43,63,-56}, -{43,63,-55}, -{43,63,-54}, -{43,63,-53}, -{43,63,-52}, -{43,63,-51}, -{43,63,-50}, -{43,63,-49}, -{43,63,-48}, -{43,63,-47}, -{43,63,-46}, -{43,63,-45}, -{43,63,-44}, -{43,63,-43}, -{43,63,-42}, -{43,63,-41}, -{43,63,-40}, -{43,63,-39}, -{43,63,-38}, -{43,63,-37}, -{43,63,-36}, -{43,63,-35}, -{43,63,-34}, -{43,63,-33}, -{43,63,-32}, -{43,63,-31}, -{43,63,-30}, -{43,63,-29}, -{43,63,-28}, -{43,63,-27}, -{43,63,-26}, -{43,63,-25}, -{43,63,-24}, -{43,63,-23}, -{43,63,-22}, -{43,63,-21}, -{43,63,-20}, -{43,63,-19}, -{43,63,-18}, -{43,63,-17}, -{43,63,-16}, -{43,63,-15}, -{43,63,-14}, -{43,63,-13}, -{43,63,-12}, -{43,63,-11}, -{43,63,-10}, -{43,63,-9}, -{43,63,-8}, -{43,63,-7}, -{43,63,-6}, -{43,63,-5}, -{43,63,-4}, -{43,63,-3}, -{43,63,-2}, -{43,63,-1}, -{43,63,0}, -{43,63,1}, -{43,63,2}, -{43,63,3}, -{43,63,4}, -{43,63,5}, -{43,63,6}, -{43,63,7}, -{43,63,8}, -{43,63,9}, -{43,63,10}, -{43,63,11}, -{43,63,12}, -{43,63,13}, -{43,63,14}, -{43,63,15}, -{43,63,16}, -{43,63,17}, -{43,63,18}, -{43,63,19}, -{43,63,20}, -{43,63,21}, -{43,63,22}, -{43,63,23}, -{43,63,24}, -{43,63,25}, -{43,63,26}, -{43,63,27}, -{43,63,28}, -{43,63,29}, -{43,63,30}, -{43,63,31}, -{43,63,32}, -{43,63,33}, -{43,63,34}, -{43,63,35}, -{43,63,36}, -{43,63,37}, -{43,63,38}, -{43,63,39}, -{43,63,40}, -{43,63,41}, -{43,63,42}, -{43,63,43}, -{43,63,44}, -{43,63,45}, -{43,63,46}, -{43,63,47}, -{43,63,48}, -{43,63,49}, -{43,63,50}, -{43,63,51}, -{43,63,52}, -{43,63,53}, -{43,63,54}, -{43,63,55}, -{43,63,56}, -{43,64,-90}, -{43,64,-89}, -{43,64,-88}, -{43,64,-87}, -{43,64,-86}, -{43,64,-85}, -{43,64,-84}, -{43,64,-83}, -{43,64,-82}, -{43,64,-81}, -{43,64,-80}, -{43,64,-79}, -{43,64,-78}, -{43,64,-77}, -{43,64,-76}, -{43,64,-75}, -{43,64,-74}, -{43,64,-73}, -{43,64,-72}, -{43,64,-71}, -{43,64,-70}, -{43,64,-69}, -{43,64,-68}, -{43,64,-67}, -{43,64,-66}, -{43,64,-65}, -{43,64,-64}, -{43,64,-63}, -{43,64,-62}, -{43,64,-61}, -{43,64,-60}, -{43,64,-59}, -{43,64,-58}, -{43,64,-57}, -{43,64,-56}, -{43,64,-55}, -{43,64,-54}, -{43,64,-53}, -{43,64,-52}, -{43,64,-51}, -{43,64,-50}, -{43,64,-49}, -{43,64,-48}, -{43,64,-47}, -{43,64,-46}, -{43,64,-45}, -{43,64,-44}, -{43,64,-43}, -{43,64,-42}, -{43,64,-41}, -{43,64,-40}, -{43,64,-39}, -{43,64,-38}, -{43,64,-37}, -{43,64,-36}, -{43,64,-35}, -{43,64,-34}, -{43,64,-33}, -{43,64,-32}, -{43,64,-31}, -{43,64,-30}, -{43,64,-29}, -{43,64,-28}, -{43,64,-27}, -{43,64,-26}, -{43,64,-25}, -{43,64,-24}, -{43,64,-23}, -{43,64,-22}, -{43,64,-21}, -{43,64,-20}, -{43,64,-19}, -{43,64,-18}, -{43,64,-17}, -{43,64,-16}, -{43,64,-15}, -{43,64,-14}, -{43,64,-13}, -{43,64,-12}, -{43,64,-11}, -{43,64,-10}, -{43,64,-9}, -{43,64,-8}, -{43,64,-7}, -{43,64,-6}, -{43,64,-5}, -{43,64,-4}, -{43,64,-3}, -{43,64,-2}, -{43,64,-1}, -{43,64,0}, -{43,64,1}, -{43,64,2}, -{43,64,3}, -{43,64,4}, -{43,64,5}, -{43,64,6}, -{43,64,7}, -{43,64,8}, -{43,64,9}, -{43,64,10}, -{43,64,11}, -{43,64,12}, -{43,64,13}, -{43,64,14}, -{43,64,15}, -{43,64,16}, -{43,64,17}, -{43,64,18}, -{43,64,19}, -{43,64,20}, -{43,64,21}, -{43,64,22}, -{43,64,23}, -{43,64,24}, -{43,64,25}, -{43,64,26}, -{43,64,27}, -{43,64,28}, -{43,64,29}, -{43,64,30}, -{43,64,31}, -{43,64,32}, -{43,64,33}, -{43,64,34}, -{43,64,35}, -{43,64,36}, -{43,64,37}, -{43,64,38}, -{43,64,39}, -{43,64,40}, -{43,64,41}, -{43,64,42}, -{43,64,43}, -{43,64,44}, -{43,64,45}, -{43,64,46}, -{43,64,47}, -{43,64,48}, -{43,64,49}, -{43,64,50}, -{43,64,51}, -{43,64,52}, -{43,64,53}, -{43,64,54}, -{43,64,55}, -{43,64,56}, -{43,65,-90}, -{43,65,-89}, -{43,65,-88}, -{43,65,-87}, -{43,65,-86}, -{43,65,-85}, -{43,65,-84}, -{43,65,-83}, -{43,65,-82}, -{43,65,-81}, -{43,65,-80}, -{43,65,-79}, -{43,65,-78}, -{43,65,-77}, -{43,65,-76}, -{43,65,-75}, -{43,65,-74}, -{43,65,-73}, -{43,65,-72}, -{43,65,-71}, -{43,65,-70}, -{43,65,-69}, -{43,65,-68}, -{43,65,-67}, -{43,65,-66}, -{43,65,-65}, -{43,65,-64}, -{43,65,-63}, -{43,65,-62}, -{43,65,-61}, -{43,65,-60}, -{43,65,-59}, -{43,65,-58}, -{43,65,-57}, -{43,65,-56}, -{43,65,-55}, -{43,65,-54}, -{43,65,-53}, -{43,65,-52}, -{43,65,-51}, -{43,65,-50}, -{43,65,-49}, -{43,65,-48}, -{43,65,-47}, -{43,65,-46}, -{43,65,-45}, -{43,65,-44}, -{43,65,-43}, -{43,65,-42}, -{43,65,-41}, -{43,65,-40}, -{43,65,-39}, -{43,65,-38}, -{43,65,-37}, -{43,65,-36}, -{43,65,-35}, -{43,65,-34}, -{43,65,-33}, -{43,65,-32}, -{43,65,-31}, -{43,65,-30}, -{43,65,-29}, -{43,65,-28}, -{43,65,-27}, -{43,65,-26}, -{43,65,-25}, -{43,65,-24}, -{43,65,-23}, -{43,65,-22}, -{43,65,-21}, -{43,65,-20}, -{43,65,-19}, -{43,65,-18}, -{43,65,-17}, -{43,65,-16}, -{43,65,-15}, -{43,65,-14}, -{43,65,-13}, -{43,65,-12}, -{43,65,-11}, -{43,65,-10}, -{43,65,-9}, -{43,65,-8}, -{43,65,-7}, -{43,65,-6}, -{43,65,-5}, -{43,65,-4}, -{43,65,-3}, -{43,65,-2}, -{43,65,-1}, -{43,65,0}, -{43,65,1}, -{43,65,2}, -{43,65,3}, -{43,65,4}, -{43,65,5}, -{43,65,6}, -{43,65,7}, -{43,65,8}, -{43,65,9}, -{43,65,10}, -{43,65,11}, -{43,65,12}, -{43,65,13}, -{43,65,14}, -{43,65,15}, -{43,65,16}, -{43,65,17}, -{43,65,18}, -{43,65,19}, -{43,65,20}, -{43,65,21}, -{43,65,22}, -{43,65,23}, -{43,65,24}, -{43,65,25}, -{43,65,26}, -{43,65,27}, -{43,65,28}, -{43,65,29}, -{43,65,30}, -{43,65,31}, -{43,65,32}, -{43,65,33}, -{43,65,34}, -{43,65,35}, -{43,65,36}, -{43,65,37}, -{43,65,38}, -{43,65,39}, -{43,65,40}, -{43,65,41}, -{43,65,42}, -{43,65,43}, -{43,65,44}, -{43,65,45}, -{43,65,46}, -{43,65,47}, -{43,65,48}, -{43,65,49}, -{43,65,50}, -{43,65,51}, -{43,65,52}, -{43,65,53}, -{43,65,54}, -{43,65,55}, -{43,65,56}, -{43,66,-90}, -{43,66,-89}, -{43,66,-88}, -{43,66,-87}, -{43,66,-86}, -{43,66,-85}, -{43,66,-84}, -{43,66,-83}, -{43,66,-82}, -{43,66,-81}, -{43,66,-80}, -{43,66,-79}, -{43,66,-78}, -{43,66,-77}, -{43,66,-76}, -{43,66,-75}, -{43,66,-74}, -{43,66,-73}, -{43,66,-72}, -{43,66,-71}, -{43,66,-70}, -{43,66,-69}, -{43,66,-68}, -{43,66,-67}, -{43,66,-66}, -{43,66,-65}, -{43,66,-64}, -{43,66,-63}, -{43,66,-62}, -{43,66,-61}, -{43,66,-60}, -{43,66,-59}, -{43,66,-58}, -{43,66,-57}, -{43,66,-56}, -{43,66,-55}, -{43,66,-54}, -{43,66,-53}, -{43,66,-52}, -{43,66,-51}, -{43,66,-50}, -{43,66,-49}, -{43,66,-48}, -{43,66,-47}, -{43,66,-46}, -{43,66,-45}, -{43,66,-44}, -{43,66,-43}, -{43,66,-42}, -{43,66,-41}, -{43,66,-40}, -{43,66,-39}, -{43,66,-38}, -{43,66,-37}, -{43,66,-36}, -{43,66,-35}, -{43,66,-34}, -{43,66,-33}, -{43,66,-32}, -{43,66,-31}, -{43,66,-30}, -{43,66,-29}, -{43,66,-28}, -{43,66,-27}, -{43,66,-26}, -{43,66,-25}, -{43,66,-24}, -{43,66,-23}, -{43,66,-22}, -{43,66,-21}, -{43,66,-20}, -{43,66,-19}, -{43,66,-18}, -{43,66,-17}, -{43,66,-16}, -{43,66,-15}, -{43,66,-14}, -{43,66,-13}, -{43,66,-12}, -{43,66,-11}, -{43,66,-10}, -{43,66,-9}, -{43,66,-8}, -{43,66,-7}, -{43,66,-6}, -{43,66,-5}, -{43,66,-4}, -{43,66,-3}, -{43,66,-2}, -{43,66,-1}, -{43,66,0}, -{43,66,1}, -{43,66,2}, -{43,66,3}, -{43,66,4}, -{43,66,5}, -{43,66,6}, -{43,66,7}, -{43,66,8}, -{43,66,9}, -{43,66,10}, -{43,66,11}, -{43,66,12}, -{43,66,13}, -{43,66,14}, -{43,66,15}, -{43,66,16}, -{43,66,17}, -{43,66,18}, -{43,66,19}, -{43,66,20}, -{43,66,21}, -{43,66,22}, -{43,66,23}, -{43,66,24}, -{43,66,25}, -{43,66,26}, -{43,66,27}, -{43,66,28}, -{43,66,29}, -{43,66,30}, -{43,66,31}, -{43,66,32}, -{43,66,33}, -{43,66,34}, -{43,66,35}, -{43,66,36}, -{43,66,37}, -{43,66,38}, -{43,66,39}, -{43,66,40}, -{43,66,41}, -{43,66,42}, -{43,66,43}, -{43,66,44}, -{43,66,45}, -{43,66,46}, -{43,66,47}, -{43,66,48}, -{43,66,49}, -{43,66,50}, -{43,66,51}, -{43,66,52}, -{43,66,53}, -{43,66,54}, -{43,66,55}, -{43,66,56}, -{43,66,57}, -{43,67,-90}, -{43,67,-89}, -{43,67,-88}, -{43,67,-87}, -{43,67,-86}, -{43,67,-85}, -{43,67,-84}, -{43,67,-83}, -{43,67,-82}, -{43,67,-81}, -{43,67,-80}, -{43,67,-79}, -{43,67,-78}, -{43,67,-77}, -{43,67,-76}, -{43,67,-75}, -{43,67,-74}, -{43,67,-73}, -{43,67,-72}, -{43,67,-71}, -{43,67,-70}, -{43,67,-69}, -{43,67,-68}, -{43,67,-67}, -{43,67,-66}, -{43,67,-65}, -{43,67,-64}, -{43,67,-63}, -{43,67,-62}, -{43,67,-61}, -{43,67,-60}, -{43,67,-59}, -{43,67,-58}, -{43,67,-57}, -{43,67,-56}, -{43,67,-55}, -{43,67,-54}, -{43,67,-53}, -{43,67,-52}, -{43,67,-51}, -{43,67,-50}, -{43,67,-49}, -{43,67,-48}, -{43,67,-47}, -{43,67,-46}, -{43,67,-45}, -{43,67,-44}, -{43,67,-43}, -{43,67,-42}, -{43,67,-41}, -{43,67,-40}, -{43,67,-39}, -{43,67,-38}, -{43,67,-37}, -{43,67,-36}, -{43,67,-35}, -{43,67,-34}, -{43,67,-33}, -{43,67,-32}, -{43,67,-31}, -{43,67,-30}, -{43,67,-29}, -{43,67,-28}, -{43,67,-27}, -{43,67,-26}, -{43,67,-25}, -{43,67,-24}, -{43,67,-23}, -{43,67,-22}, -{43,67,-21}, -{43,67,-20}, -{43,67,-19}, -{43,67,-18}, -{43,67,-17}, -{43,67,-16}, -{43,67,-15}, -{43,67,-14}, -{43,67,-13}, -{43,67,-12}, -{43,67,-11}, -{43,67,-10}, -{43,67,-9}, -{43,67,-8}, -{43,67,-7}, -{43,67,-6}, -{43,67,-5}, -{43,67,-4}, -{43,67,-3}, -{43,67,-2}, -{43,67,-1}, -{43,67,0}, -{43,67,1}, -{43,67,2}, -{43,67,3}, -{43,67,4}, -{43,67,5}, -{43,67,6}, -{43,67,7}, -{43,67,8}, -{43,67,9}, -{43,67,10}, -{43,67,11}, -{43,67,12}, -{43,67,13}, -{43,67,14}, -{43,67,15}, -{43,67,16}, -{43,67,17}, -{43,67,18}, -{43,67,19}, -{43,67,20}, -{43,67,21}, -{43,67,22}, -{43,67,23}, -{43,67,24}, -{43,67,25}, -{43,67,26}, -{43,67,27}, -{43,67,28}, -{43,67,29}, -{43,67,30}, -{43,67,31}, -{43,67,32}, -{43,67,33}, -{43,67,34}, -{43,67,35}, -{43,67,36}, -{43,67,37}, -{43,67,38}, -{43,67,39}, -{43,67,40}, -{43,67,41}, -{43,67,42}, -{43,67,43}, -{43,67,44}, -{43,67,45}, -{43,67,46}, -{43,67,47}, -{43,67,48}, -{43,67,49}, -{43,67,50}, -{43,67,51}, -{43,67,52}, -{43,67,53}, -{43,67,54}, -{43,67,55}, -{43,67,56}, -{43,67,57}, -{43,68,-90}, -{43,68,-89}, -{43,68,-88}, -{43,68,-87}, -{43,68,-86}, -{43,68,-85}, -{43,68,-84}, -{43,68,-83}, -{43,68,-82}, -{43,68,-81}, -{43,68,-80}, -{43,68,-79}, -{43,68,-78}, -{43,68,-77}, -{43,68,-76}, -{43,68,-75}, -{43,68,-74}, -{43,68,-73}, -{43,68,-72}, -{43,68,-71}, -{43,68,-70}, -{43,68,-69}, -{43,68,-68}, -{43,68,-67}, -{43,68,-66}, -{43,68,-65}, -{43,68,-64}, -{43,68,-63}, -{43,68,-62}, -{43,68,-61}, -{43,68,-60}, -{43,68,-59}, -{43,68,-58}, -{43,68,-57}, -{43,68,-56}, -{43,68,-55}, -{43,68,-54}, -{43,68,-53}, -{43,68,-52}, -{43,68,-51}, -{43,68,-50}, -{43,68,-49}, -{43,68,-48}, -{43,68,-47}, -{43,68,-46}, -{43,68,-45}, -{43,68,-44}, -{43,68,-43}, -{43,68,-42}, -{43,68,-41}, -{43,68,-40}, -{43,68,-39}, -{43,68,-38}, -{43,68,-37}, -{43,68,-36}, -{43,68,-35}, -{43,68,-34}, -{43,68,-33}, -{43,68,-32}, -{43,68,-31}, -{43,68,-30}, -{43,68,-29}, -{43,68,-28}, -{43,68,-27}, -{43,68,-26}, -{43,68,-25}, -{43,68,-24}, -{43,68,-23}, -{43,68,-22}, -{43,68,-21}, -{43,68,-20}, -{43,68,-19}, -{43,68,-18}, -{43,68,-17}, -{43,68,-16}, -{43,68,-15}, -{43,68,-14}, -{43,68,-13}, -{43,68,-12}, -{43,68,-11}, -{43,68,-10}, -{43,68,-9}, -{43,68,-8}, -{43,68,-7}, -{43,68,-6}, -{43,68,-5}, -{43,68,-4}, -{43,68,-3}, -{43,68,-2}, -{43,68,-1}, -{43,68,0}, -{43,68,1}, -{43,68,2}, -{43,68,3}, -{43,68,4}, -{43,68,5}, -{43,68,6}, -{43,68,7}, -{43,68,8}, -{43,68,9}, -{43,68,10}, -{43,68,11}, -{43,68,12}, -{43,68,13}, -{43,68,14}, -{43,68,15}, -{43,68,16}, -{43,68,17}, -{43,68,18}, -{43,68,19}, -{43,68,20}, -{43,68,21}, -{43,68,22}, -{43,68,23}, -{43,68,24}, -{43,68,25}, -{43,68,26}, -{43,68,27}, -{43,68,28}, -{43,68,29}, -{43,68,30}, -{43,68,31}, -{43,68,32}, -{43,68,33}, -{43,68,34}, -{43,68,35}, -{43,68,36}, -{43,68,37}, -{43,68,38}, -{43,68,39}, -{43,68,40}, -{43,68,41}, -{43,68,42}, -{43,68,43}, -{43,68,44}, -{43,68,45}, -{43,68,46}, -{43,68,47}, -{43,68,48}, -{43,68,49}, -{43,68,50}, -{43,68,51}, -{43,68,52}, -{43,68,53}, -{43,68,54}, -{43,68,55}, -{43,68,56}, -{43,68,57}, -{43,69,-90}, -{43,69,-89}, -{43,69,-88}, -{43,69,-87}, -{43,69,-86}, -{43,69,-85}, -{43,69,-84}, -{43,69,-83}, -{43,69,-82}, -{43,69,-81}, -{43,69,-80}, -{43,69,-79}, -{43,69,-78}, -{43,69,-77}, -{43,69,-76}, -{43,69,-75}, -{43,69,-74}, -{43,69,-73}, -{43,69,-72}, -{43,69,-71}, -{43,69,-70}, -{43,69,-69}, -{43,69,-68}, -{43,69,-67}, -{43,69,-66}, -{43,69,-65}, -{43,69,-64}, -{43,69,-63}, -{43,69,-62}, -{43,69,-61}, -{43,69,-60}, -{43,69,-59}, -{43,69,-58}, -{43,69,-57}, -{43,69,-56}, -{43,69,-55}, -{43,69,-54}, -{43,69,-53}, -{43,69,-52}, -{43,69,-51}, -{43,69,-50}, -{43,69,-49}, -{43,69,-48}, -{43,69,-47}, -{43,69,-46}, -{43,69,-45}, -{43,69,-44}, -{43,69,-43}, -{43,69,-42}, -{43,69,-41}, -{43,69,-40}, -{43,69,-39}, -{43,69,-38}, -{43,69,-37}, -{43,69,-36}, -{43,69,-35}, -{43,69,-34}, -{43,69,-33}, -{43,69,-32}, -{43,69,-31}, -{43,69,-30}, -{43,69,-29}, -{43,69,-28}, -{43,69,-27}, -{43,69,-26}, -{43,69,-25}, -{43,69,-24}, -{43,69,-23}, -{43,69,-22}, -{43,69,-21}, -{43,69,-20}, -{43,69,-19}, -{43,69,-18}, -{43,69,-17}, -{43,69,-16}, -{43,69,-15}, -{43,69,-14}, -{43,69,-13}, -{43,69,-12}, -{43,69,-11}, -{43,69,-10}, -{43,69,-9}, -{43,69,-8}, -{43,69,-7}, -{43,69,-6}, -{43,69,-5}, -{43,69,-4}, -{43,69,-3}, -{43,69,-2}, -{43,69,-1}, -{43,69,0}, -{43,69,1}, -{43,69,2}, -{43,69,3}, -{43,69,4}, -{43,69,5}, -{43,69,6}, -{43,69,7}, -{43,69,8}, -{43,69,9}, -{43,69,10}, -{43,69,11}, -{43,69,12}, -{43,69,13}, -{43,69,14}, -{43,69,15}, -{43,69,16}, -{43,69,17}, -{43,69,18}, -{43,69,19}, -{43,69,20}, -{43,69,21}, -{43,69,22}, -{43,69,23}, -{43,69,24}, -{43,69,25}, -{43,69,26}, -{43,69,27}, -{43,69,28}, -{43,69,29}, -{43,69,30}, -{43,69,31}, -{43,69,32}, -{43,69,33}, -{43,70,-90}, -{43,70,-89}, -{43,70,-88}, -{43,70,-87}, -{43,70,-86}, -{43,70,-85}, -{43,70,-84}, -{43,70,-83}, -{43,70,-82}, -{43,70,-81}, -{43,70,-80}, -{43,70,-79}, -{43,70,-78}, -{43,70,-77}, -{43,70,-76}, -{43,70,-75}, -{43,70,-74}, -{43,70,-73}, -{43,70,-72}, -{43,70,-71}, -{43,70,-70}, -{43,70,-69}, -{43,70,-68}, -{43,70,-67}, -{43,70,-66}, -{43,70,-65}, -{43,70,-64}, -{43,70,-63}, -{43,70,-62}, -{43,70,-61}, -{43,70,-60}, -{43,70,-59}, -{43,70,-58}, -{43,70,-57}, -{43,70,-56}, -{43,70,-55}, -{43,70,-54}, -{43,70,-53}, -{43,70,-52}, -{43,70,-51}, -{43,70,-50}, -{43,70,-49}, -{43,70,-48}, -{43,70,-47}, -{43,70,-46}, -{43,70,-45}, -{43,70,-44}, -{43,70,-43}, -{43,70,-42}, -{43,70,-41}, -{43,70,-40}, -{43,70,-39}, -{43,70,-38}, -{43,70,-37}, -{43,70,-36}, -{43,70,-35}, -{43,70,-34}, -{43,70,-33}, -{43,70,-32}, -{43,70,-31}, -{43,70,-30}, -{43,70,-29}, -{43,70,-28}, -{43,70,-27}, -{43,70,-26}, -{43,70,-25}, -{43,70,-24}, -{43,70,-23}, -{43,70,-22}, -{43,70,-21}, -{43,70,-20}, -{43,70,-19}, -{43,70,-18}, -{43,70,-17}, -{43,70,-16}, -{43,70,-15}, -{43,70,-14}, -{43,70,-13}, -{43,70,-12}, -{43,70,-11}, -{43,70,-10}, -{43,70,-9}, -{43,70,-8}, -{43,70,-7}, -{43,70,-6}, -{43,70,-5}, -{43,70,-4}, -{43,70,-3}, -{43,70,-2}, -{43,70,-1}, -{43,70,0}, -{43,70,1}, -{43,70,2}, -{43,70,3}, -{43,70,4}, -{43,70,5}, -{43,70,6}, -{43,70,7}, -{43,70,8}, -{43,70,9}, -{43,70,10}, -{43,70,11}, -{43,71,-90}, -{43,71,-89}, -{43,71,-88}, -{43,71,-87}, -{43,71,-86}, -{43,71,-85}, -{43,71,-84}, -{43,71,-83}, -{43,71,-82}, -{43,71,-81}, -{43,71,-80}, -{43,71,-79}, -{43,71,-78}, -{43,71,-77}, -{43,71,-76}, -{43,71,-75}, -{43,71,-74}, -{43,71,-73}, -{43,71,-72}, -{43,71,-71}, -{43,71,-70}, -{43,71,-69}, -{43,71,-68}, -{43,71,-67}, -{43,71,-66}, -{43,71,-65}, -{43,71,-64}, -{43,71,-63}, -{43,71,-62}, -{43,71,-61}, -{43,71,-60}, -{43,71,-59}, -{43,71,-58}, -{43,71,-57}, -{43,71,-56}, -{43,71,-55}, -{43,71,-54}, -{43,71,-53}, -{43,71,-52}, -{43,71,-51}, -{43,71,-50}, -{43,71,-49}, -{43,71,-48}, -{43,71,-47}, -{43,71,-46}, -{43,71,-45}, -{43,71,-44}, -{43,71,-43}, -{43,71,-42}, -{43,71,-41}, -{43,71,-40}, -{43,71,-39}, -{43,71,-38}, -{43,71,-37}, -{43,71,-36}, -{43,71,-35}, -{43,71,-34}, -{43,71,-33}, -{43,71,-32}, -{43,71,-31}, -{43,71,-30}, -{43,71,-29}, -{43,71,-28}, -{43,71,-27}, -{43,71,-26}, -{43,71,-25}, -{43,71,-24}, -{43,71,-23}, -{43,71,-22}, -{43,71,-21}, -{43,71,-20}, -{43,71,-19}, -{43,71,-18}, -{43,71,-17}, -{43,71,-16}, -{43,71,-15}, -{43,71,-14}, -{43,71,-13}, -{43,71,-12}, -{43,71,-11}, -{43,71,-10}, -{43,71,-9}, -{43,71,-8}, -{43,71,-7}, -{43,71,-6}, -{43,71,-5}, -{43,71,-4}, -{43,71,-3}, -{43,72,-90}, -{43,72,-89}, -{43,72,-88}, -{43,72,-87}, -{43,72,-86}, -{43,72,-85}, -{43,72,-84}, -{43,72,-83}, -{43,72,-82}, -{43,72,-81}, -{43,72,-80}, -{43,72,-79}, -{43,72,-78}, -{43,72,-77}, -{43,72,-76}, -{43,72,-75}, -{43,72,-74}, -{43,72,-73}, -{43,72,-72}, -{43,72,-71}, -{43,72,-70}, -{43,72,-69}, -{43,72,-68}, -{43,72,-67}, -{43,72,-66}, -{43,72,-65}, -{43,72,-64}, -{43,72,-63}, -{43,72,-62}, -{43,72,-61}, -{43,72,-60}, -{43,72,-59}, -{43,72,-58}, -{43,72,-57}, -{43,72,-56}, -{43,72,-55}, -{43,72,-54}, -{43,72,-53}, -{43,72,-52}, -{43,72,-51}, -{43,72,-50}, -{43,72,-49}, -{43,72,-48}, -{43,72,-47}, -{43,72,-46}, -{43,72,-45}, -{43,72,-44}, -{43,72,-43}, -{43,72,-42}, -{43,72,-41}, -{43,72,-40}, -{43,72,-39}, -{43,72,-38}, -{43,72,-37}, -{43,72,-36}, -{43,72,-35}, -{43,72,-34}, -{43,72,-33}, -{43,72,-32}, -{43,72,-31}, -{43,72,-30}, -{43,72,-29}, -{43,72,-28}, -{43,72,-27}, -{43,72,-26}, -{43,72,-25}, -{43,72,-24}, -{43,72,-23}, -{43,72,-22}, -{43,72,-21}, -{43,72,-20}, -{43,72,-19}, -{43,72,-18}, -{43,72,-17}, -{43,72,-16}, -{43,72,-15}, -{43,73,-90}, -{43,73,-89}, -{43,73,-88}, -{43,73,-87}, -{43,73,-86}, -{43,73,-85}, -{43,73,-84}, -{43,73,-83}, -{43,73,-82}, -{43,73,-81}, -{43,73,-80}, -{43,73,-79}, -{43,73,-78}, -{43,73,-77}, -{43,73,-76}, -{43,73,-75}, -{43,73,-74}, -{43,73,-73}, -{43,73,-72}, -{43,73,-71}, -{43,73,-70}, -{43,73,-69}, -{43,73,-68}, -{43,73,-67}, -{43,73,-66}, -{43,73,-65}, -{43,73,-64}, -{43,73,-63}, -{43,73,-62}, -{43,73,-61}, -{43,73,-60}, -{43,73,-59}, -{43,73,-58}, -{43,73,-57}, -{43,73,-56}, -{43,73,-55}, -{43,73,-54}, -{43,73,-53}, -{43,73,-52}, -{43,73,-51}, -{43,73,-50}, -{43,73,-49}, -{43,73,-48}, -{43,73,-47}, -{43,73,-46}, -{43,73,-45}, -{43,73,-44}, -{43,73,-43}, -{43,73,-42}, -{43,73,-41}, -{43,73,-40}, -{43,73,-39}, -{43,73,-38}, -{43,73,-37}, -{43,73,-36}, -{43,73,-35}, -{43,73,-34}, -{43,73,-33}, -{43,73,-32}, -{43,73,-31}, -{43,73,-30}, -{43,73,-29}, -{43,73,-28}, -{43,73,-27}, -{43,73,-26}, -{43,73,-25}, -{43,73,-24}, -{43,74,-90}, -{43,74,-89}, -{43,74,-88}, -{43,74,-87}, -{43,74,-86}, -{43,74,-85}, -{43,74,-84}, -{43,74,-83}, -{43,74,-82}, -{43,74,-81}, -{43,74,-80}, -{43,74,-79}, -{43,74,-78}, -{43,74,-77}, -{43,74,-76}, -{43,74,-75}, -{43,74,-74}, -{43,74,-73}, -{43,74,-72}, -{43,74,-71}, -{43,74,-70}, -{43,74,-69}, -{43,74,-68}, -{43,74,-67}, -{43,74,-66}, -{43,74,-65}, -{43,74,-64}, -{43,74,-63}, -{43,74,-62}, -{43,74,-61}, -{43,74,-60}, -{43,74,-59}, -{43,74,-58}, -{43,74,-57}, -{43,74,-56}, -{43,74,-55}, -{43,74,-54}, -{43,74,-53}, -{43,74,-52}, -{43,74,-51}, -{43,74,-50}, -{43,74,-49}, -{43,74,-48}, -{43,74,-47}, -{43,74,-46}, -{43,74,-45}, -{43,74,-44}, -{43,74,-43}, -{43,74,-42}, -{43,74,-41}, -{43,74,-40}, -{43,74,-39}, -{43,74,-38}, -{43,74,-37}, -{43,74,-36}, -{43,74,-35}, -{43,74,-34}, -{43,74,-33}, -{43,75,-90}, -{43,75,-89}, -{43,75,-88}, -{43,75,-87}, -{43,75,-86}, -{43,75,-85}, -{43,75,-84}, -{43,75,-83}, -{43,75,-82}, -{43,75,-81}, -{43,75,-80}, -{43,75,-79}, -{43,75,-78}, -{43,75,-77}, -{43,75,-76}, -{43,75,-75}, -{43,75,-74}, -{43,75,-73}, -{43,75,-72}, -{43,75,-71}, -{43,75,-70}, -{43,75,-69}, -{43,75,-68}, -{43,75,-67}, -{43,75,-66}, -{43,75,-65}, -{43,75,-64}, -{43,75,-63}, -{43,75,-62}, -{43,75,-61}, -{43,75,-60}, -{43,75,-59}, -{43,75,-58}, -{43,75,-57}, -{43,75,-56}, -{43,75,-55}, -{43,75,-54}, -{43,75,-53}, -{43,75,-52}, -{43,75,-51}, -{43,75,-50}, -{43,75,-49}, -{43,75,-48}, -{43,75,-47}, -{43,75,-46}, -{43,75,-45}, -{43,75,-44}, -{43,75,-43}, -{43,75,-42}, -{43,75,-41}, -{43,75,-40}, -{43,76,-90}, -{43,76,-89}, -{43,76,-88}, -{43,76,-87}, -{43,76,-86}, -{43,76,-85}, -{43,76,-84}, -{43,76,-83}, -{43,76,-82}, -{43,76,-81}, -{43,76,-80}, -{43,76,-79}, -{43,76,-78}, -{43,76,-77}, -{43,76,-76}, -{43,76,-75}, -{43,76,-74}, -{43,76,-73}, -{43,76,-72}, -{43,76,-71}, -{43,76,-70}, -{43,76,-69}, -{43,76,-68}, -{43,76,-67}, -{43,76,-66}, -{43,76,-65}, -{43,76,-64}, -{43,76,-63}, -{43,76,-62}, -{43,76,-61}, -{43,76,-60}, -{43,76,-59}, -{43,76,-58}, -{43,76,-57}, -{43,76,-56}, -{43,76,-55}, -{43,76,-54}, -{43,76,-53}, -{43,76,-52}, -{43,76,-51}, -{43,76,-50}, -{43,76,-49}, -{43,76,-48}, -{43,76,-47}, -{43,77,-90}, -{43,77,-89}, -{43,77,-88}, -{43,77,-87}, -{43,77,-86}, -{43,77,-85}, -{43,77,-84}, -{43,77,-83}, -{43,77,-82}, -{43,77,-81}, -{43,77,-80}, -{43,77,-79}, -{43,77,-78}, -{43,77,-77}, -{43,77,-76}, -{43,77,-75}, -{43,77,-74}, -{43,77,-73}, -{43,77,-72}, -{43,77,-71}, -{43,77,-70}, -{43,77,-69}, -{43,77,-68}, -{43,77,-67}, -{43,77,-66}, -{43,77,-65}, -{43,77,-64}, -{43,77,-63}, -{43,77,-62}, -{43,77,-61}, -{43,77,-60}, -{43,77,-59}, -{43,77,-58}, -{43,77,-57}, -{43,77,-56}, -{43,77,-55}, -{43,77,-54}, -{43,77,-53}, -{43,78,-89}, -{43,78,-88}, -{43,78,-87}, -{43,78,-86}, -{43,78,-85}, -{43,78,-84}, -{43,78,-83}, -{43,78,-82}, -{43,78,-81}, -{43,78,-80}, -{43,78,-79}, -{43,78,-78}, -{43,78,-77}, -{43,78,-76}, -{43,78,-75}, -{43,78,-74}, -{43,78,-73}, -{43,78,-72}, -{43,78,-71}, -{43,78,-70}, -{43,78,-69}, -{43,78,-68}, -{43,78,-67}, -{43,78,-66}, -{43,78,-65}, -{43,78,-64}, -{43,78,-63}, -{43,78,-62}, -{43,78,-61}, -{43,78,-60}, -{43,78,-59}, -{43,79,-89}, -{43,79,-88}, -{43,79,-87}, -{43,79,-86}, -{43,79,-85}, -{43,79,-84}, -{43,79,-83}, -{43,79,-82}, -{43,79,-81}, -{43,79,-80}, -{43,79,-79}, -{43,79,-78}, -{43,79,-77}, -{43,79,-76}, -{43,79,-75}, -{43,79,-74}, -{43,79,-73}, -{43,79,-72}, -{43,79,-71}, -{43,79,-70}, -{43,79,-69}, -{43,79,-68}, -{43,79,-67}, -{43,79,-66}, -{43,79,-65}, -{43,79,-64}, -{43,80,-89}, -{43,80,-88}, -{43,80,-87}, -{43,80,-86}, -{43,80,-85}, -{43,80,-84}, -{43,80,-83}, -{43,80,-82}, -{43,80,-81}, -{43,80,-80}, -{43,80,-79}, -{43,80,-78}, -{43,80,-77}, -{43,80,-76}, -{43,80,-75}, -{43,80,-74}, -{43,80,-73}, -{43,80,-72}, -{43,80,-71}, -{43,80,-70}, -{43,81,-89}, -{43,81,-88}, -{43,81,-87}, -{43,81,-86}, -{43,81,-85}, -{43,81,-84}, -{43,81,-83}, -{43,81,-82}, -{43,81,-81}, -{43,81,-80}, -{43,81,-79}, -{43,81,-78}, -{43,81,-77}, -{43,81,-76}, -{43,81,-75}, -{43,81,-74}, -{43,82,-89}, -{43,82,-88}, -{43,82,-87}, -{43,82,-86}, -{43,82,-85}, -{43,82,-84}, -{43,82,-83}, -{43,82,-82}, -{43,82,-81}, -{43,82,-80}, -{43,82,-79}, -{43,83,-89}, -{43,83,-88}, -{43,83,-87}, -{43,83,-86}, -{43,83,-85}, -{43,83,-84}, -{43,84,-89}, -{43,84,-88}, -{44,-50,48}, -{44,-49,44}, -{44,-49,45}, -{44,-49,46}, -{44,-49,47}, -{44,-49,48}, -{44,-48,40}, -{44,-48,41}, -{44,-48,42}, -{44,-48,43}, -{44,-48,44}, -{44,-48,45}, -{44,-48,46}, -{44,-48,47}, -{44,-48,48}, -{44,-47,36}, -{44,-47,37}, -{44,-47,38}, -{44,-47,39}, -{44,-47,40}, -{44,-47,41}, -{44,-47,42}, -{44,-47,43}, -{44,-47,44}, -{44,-47,45}, -{44,-47,46}, -{44,-47,47}, -{44,-47,48}, -{44,-46,33}, -{44,-46,34}, -{44,-46,35}, -{44,-46,36}, -{44,-46,37}, -{44,-46,38}, -{44,-46,39}, -{44,-46,40}, -{44,-46,41}, -{44,-46,42}, -{44,-46,43}, -{44,-46,44}, -{44,-46,45}, -{44,-46,46}, -{44,-46,47}, -{44,-46,48}, -{44,-45,29}, -{44,-45,30}, -{44,-45,31}, -{44,-45,32}, -{44,-45,33}, -{44,-45,34}, -{44,-45,35}, -{44,-45,36}, -{44,-45,37}, -{44,-45,38}, -{44,-45,39}, -{44,-45,40}, -{44,-45,41}, -{44,-45,42}, -{44,-45,43}, -{44,-45,44}, -{44,-45,45}, -{44,-45,46}, -{44,-45,47}, -{44,-45,48}, -{44,-44,27}, -{44,-44,28}, -{44,-44,29}, -{44,-44,30}, -{44,-44,31}, -{44,-44,32}, -{44,-44,33}, -{44,-44,34}, -{44,-44,35}, -{44,-44,36}, -{44,-44,37}, -{44,-44,38}, -{44,-44,39}, -{44,-44,40}, -{44,-44,41}, -{44,-44,42}, -{44,-44,43}, -{44,-44,44}, -{44,-44,45}, -{44,-44,46}, -{44,-44,47}, -{44,-44,48}, -{44,-43,24}, -{44,-43,25}, -{44,-43,26}, -{44,-43,27}, -{44,-43,28}, -{44,-43,29}, -{44,-43,30}, -{44,-43,31}, -{44,-43,32}, -{44,-43,33}, -{44,-43,34}, -{44,-43,35}, -{44,-43,36}, -{44,-43,37}, -{44,-43,38}, -{44,-43,39}, -{44,-43,40}, -{44,-43,41}, -{44,-43,42}, -{44,-43,43}, -{44,-43,44}, -{44,-43,45}, -{44,-43,46}, -{44,-43,47}, -{44,-43,48}, -{44,-42,21}, -{44,-42,22}, -{44,-42,23}, -{44,-42,24}, -{44,-42,25}, -{44,-42,26}, -{44,-42,27}, -{44,-42,28}, -{44,-42,29}, -{44,-42,30}, -{44,-42,31}, -{44,-42,32}, -{44,-42,33}, -{44,-42,34}, -{44,-42,35}, -{44,-42,36}, -{44,-42,37}, -{44,-42,38}, -{44,-42,39}, -{44,-42,40}, -{44,-42,41}, -{44,-42,42}, -{44,-42,43}, -{44,-42,44}, -{44,-42,45}, -{44,-42,46}, -{44,-42,47}, -{44,-42,48}, -{44,-41,19}, -{44,-41,20}, -{44,-41,21}, -{44,-41,22}, -{44,-41,23}, -{44,-41,24}, -{44,-41,25}, -{44,-41,26}, -{44,-41,27}, -{44,-41,28}, -{44,-41,29}, -{44,-41,30}, -{44,-41,31}, -{44,-41,32}, -{44,-41,33}, -{44,-41,34}, -{44,-41,35}, -{44,-41,36}, -{44,-41,37}, -{44,-41,38}, -{44,-41,39}, -{44,-41,40}, -{44,-41,41}, -{44,-41,42}, -{44,-41,43}, -{44,-41,44}, -{44,-41,45}, -{44,-41,46}, -{44,-41,47}, -{44,-41,48}, -{44,-40,17}, -{44,-40,18}, -{44,-40,19}, -{44,-40,20}, -{44,-40,21}, -{44,-40,22}, -{44,-40,23}, -{44,-40,24}, -{44,-40,25}, -{44,-40,26}, -{44,-40,27}, -{44,-40,28}, -{44,-40,29}, -{44,-40,30}, -{44,-40,31}, -{44,-40,32}, -{44,-40,33}, -{44,-40,34}, -{44,-40,35}, -{44,-40,36}, -{44,-40,37}, -{44,-40,38}, -{44,-40,39}, -{44,-40,40}, -{44,-40,41}, -{44,-40,42}, -{44,-40,43}, -{44,-40,44}, -{44,-40,45}, -{44,-40,46}, -{44,-40,47}, -{44,-40,48}, -{44,-39,14}, -{44,-39,15}, -{44,-39,16}, -{44,-39,17}, -{44,-39,18}, -{44,-39,19}, -{44,-39,20}, -{44,-39,21}, -{44,-39,22}, -{44,-39,23}, -{44,-39,24}, -{44,-39,25}, -{44,-39,26}, -{44,-39,27}, -{44,-39,28}, -{44,-39,29}, -{44,-39,30}, -{44,-39,31}, -{44,-39,32}, -{44,-39,33}, -{44,-39,34}, -{44,-39,35}, -{44,-39,36}, -{44,-39,37}, -{44,-39,38}, -{44,-39,39}, -{44,-39,40}, -{44,-39,41}, -{44,-39,42}, -{44,-39,43}, -{44,-39,44}, -{44,-39,45}, -{44,-39,46}, -{44,-39,47}, -{44,-39,48}, -{44,-38,12}, -{44,-38,13}, -{44,-38,14}, -{44,-38,15}, -{44,-38,16}, -{44,-38,17}, -{44,-38,18}, -{44,-38,19}, -{44,-38,20}, -{44,-38,21}, -{44,-38,22}, -{44,-38,23}, -{44,-38,24}, -{44,-38,25}, -{44,-38,26}, -{44,-38,27}, -{44,-38,28}, -{44,-38,29}, -{44,-38,30}, -{44,-38,31}, -{44,-38,32}, -{44,-38,33}, -{44,-38,34}, -{44,-38,35}, -{44,-38,36}, -{44,-38,37}, -{44,-38,38}, -{44,-38,39}, -{44,-38,40}, -{44,-38,41}, -{44,-38,42}, -{44,-38,43}, -{44,-38,44}, -{44,-38,45}, -{44,-38,46}, -{44,-38,47}, -{44,-38,48}, -{44,-37,10}, -{44,-37,11}, -{44,-37,12}, -{44,-37,13}, -{44,-37,14}, -{44,-37,15}, -{44,-37,16}, -{44,-37,17}, -{44,-37,18}, -{44,-37,19}, -{44,-37,20}, -{44,-37,21}, -{44,-37,22}, -{44,-37,23}, -{44,-37,24}, -{44,-37,25}, -{44,-37,26}, -{44,-37,27}, -{44,-37,28}, -{44,-37,29}, -{44,-37,30}, -{44,-37,31}, -{44,-37,32}, -{44,-37,33}, -{44,-37,34}, -{44,-37,35}, -{44,-37,36}, -{44,-37,37}, -{44,-37,38}, -{44,-37,39}, -{44,-37,40}, -{44,-37,41}, -{44,-37,42}, -{44,-37,43}, -{44,-37,44}, -{44,-37,45}, -{44,-37,46}, -{44,-37,47}, -{44,-37,48}, -{44,-36,8}, -{44,-36,9}, -{44,-36,10}, -{44,-36,11}, -{44,-36,12}, -{44,-36,13}, -{44,-36,14}, -{44,-36,15}, -{44,-36,16}, -{44,-36,17}, -{44,-36,18}, -{44,-36,19}, -{44,-36,20}, -{44,-36,21}, -{44,-36,22}, -{44,-36,23}, -{44,-36,24}, -{44,-36,25}, -{44,-36,26}, -{44,-36,27}, -{44,-36,28}, -{44,-36,29}, -{44,-36,30}, -{44,-36,31}, -{44,-36,32}, -{44,-36,33}, -{44,-36,34}, -{44,-36,35}, -{44,-36,36}, -{44,-36,37}, -{44,-36,38}, -{44,-36,39}, -{44,-36,40}, -{44,-36,41}, -{44,-36,42}, -{44,-36,43}, -{44,-36,44}, -{44,-36,45}, -{44,-36,46}, -{44,-36,47}, -{44,-36,48}, -{44,-35,6}, -{44,-35,7}, -{44,-35,8}, -{44,-35,9}, -{44,-35,10}, -{44,-35,11}, -{44,-35,12}, -{44,-35,13}, -{44,-35,14}, -{44,-35,15}, -{44,-35,16}, -{44,-35,17}, -{44,-35,18}, -{44,-35,19}, -{44,-35,20}, -{44,-35,21}, -{44,-35,22}, -{44,-35,23}, -{44,-35,24}, -{44,-35,25}, -{44,-35,26}, -{44,-35,27}, -{44,-35,28}, -{44,-35,29}, -{44,-35,30}, -{44,-35,31}, -{44,-35,32}, -{44,-35,33}, -{44,-35,34}, -{44,-35,35}, -{44,-35,36}, -{44,-35,37}, -{44,-35,38}, -{44,-35,39}, -{44,-35,40}, -{44,-35,41}, -{44,-35,42}, -{44,-35,43}, -{44,-35,44}, -{44,-35,45}, -{44,-35,46}, -{44,-35,47}, -{44,-35,48}, -{44,-34,4}, -{44,-34,5}, -{44,-34,6}, -{44,-34,7}, -{44,-34,8}, -{44,-34,9}, -{44,-34,10}, -{44,-34,11}, -{44,-34,12}, -{44,-34,13}, -{44,-34,14}, -{44,-34,15}, -{44,-34,16}, -{44,-34,17}, -{44,-34,18}, -{44,-34,19}, -{44,-34,20}, -{44,-34,21}, -{44,-34,22}, -{44,-34,23}, -{44,-34,24}, -{44,-34,25}, -{44,-34,26}, -{44,-34,27}, -{44,-34,28}, -{44,-34,29}, -{44,-34,30}, -{44,-34,31}, -{44,-34,32}, -{44,-34,33}, -{44,-34,34}, -{44,-34,35}, -{44,-34,36}, -{44,-34,37}, -{44,-34,38}, -{44,-34,39}, -{44,-34,40}, -{44,-34,41}, -{44,-34,42}, -{44,-34,43}, -{44,-34,44}, -{44,-34,45}, -{44,-34,46}, -{44,-34,47}, -{44,-34,48}, -{44,-34,49}, -{44,-33,2}, -{44,-33,3}, -{44,-33,4}, -{44,-33,5}, -{44,-33,6}, -{44,-33,7}, -{44,-33,8}, -{44,-33,9}, -{44,-33,10}, -{44,-33,11}, -{44,-33,12}, -{44,-33,13}, -{44,-33,14}, -{44,-33,15}, -{44,-33,16}, -{44,-33,17}, -{44,-33,18}, -{44,-33,19}, -{44,-33,20}, -{44,-33,21}, -{44,-33,22}, -{44,-33,23}, -{44,-33,24}, -{44,-33,25}, -{44,-33,26}, -{44,-33,27}, -{44,-33,28}, -{44,-33,29}, -{44,-33,30}, -{44,-33,31}, -{44,-33,32}, -{44,-33,33}, -{44,-33,34}, -{44,-33,35}, -{44,-33,36}, -{44,-33,37}, -{44,-33,38}, -{44,-33,39}, -{44,-33,40}, -{44,-33,41}, -{44,-33,42}, -{44,-33,43}, -{44,-33,44}, -{44,-33,45}, -{44,-33,46}, -{44,-33,47}, -{44,-33,48}, -{44,-33,49}, -{44,-32,1}, -{44,-32,2}, -{44,-32,3}, -{44,-32,4}, -{44,-32,5}, -{44,-32,6}, -{44,-32,7}, -{44,-32,8}, -{44,-32,9}, -{44,-32,10}, -{44,-32,11}, -{44,-32,12}, -{44,-32,13}, -{44,-32,14}, -{44,-32,15}, -{44,-32,16}, -{44,-32,17}, -{44,-32,18}, -{44,-32,19}, -{44,-32,20}, -{44,-32,21}, -{44,-32,22}, -{44,-32,23}, -{44,-32,24}, -{44,-32,25}, -{44,-32,26}, -{44,-32,27}, -{44,-32,28}, -{44,-32,29}, -{44,-32,30}, -{44,-32,31}, -{44,-32,32}, -{44,-32,33}, -{44,-32,34}, -{44,-32,35}, -{44,-32,36}, -{44,-32,37}, -{44,-32,38}, -{44,-32,39}, -{44,-32,40}, -{44,-32,41}, -{44,-32,42}, -{44,-32,43}, -{44,-32,44}, -{44,-32,45}, -{44,-32,46}, -{44,-32,47}, -{44,-32,48}, -{44,-32,49}, -{44,-31,-1}, -{44,-31,0}, -{44,-31,1}, -{44,-31,2}, -{44,-31,3}, -{44,-31,4}, -{44,-31,5}, -{44,-31,6}, -{44,-31,7}, -{44,-31,8}, -{44,-31,9}, -{44,-31,10}, -{44,-31,11}, -{44,-31,12}, -{44,-31,13}, -{44,-31,14}, -{44,-31,15}, -{44,-31,16}, -{44,-31,17}, -{44,-31,18}, -{44,-31,19}, -{44,-31,20}, -{44,-31,21}, -{44,-31,22}, -{44,-31,23}, -{44,-31,24}, -{44,-31,25}, -{44,-31,26}, -{44,-31,27}, -{44,-31,28}, -{44,-31,29}, -{44,-31,30}, -{44,-31,31}, -{44,-31,32}, -{44,-31,33}, -{44,-31,34}, -{44,-31,35}, -{44,-31,36}, -{44,-31,37}, -{44,-31,38}, -{44,-31,39}, -{44,-31,40}, -{44,-31,41}, -{44,-31,42}, -{44,-31,43}, -{44,-31,44}, -{44,-31,45}, -{44,-31,46}, -{44,-31,47}, -{44,-31,48}, -{44,-31,49}, -{44,-30,-3}, -{44,-30,-2}, -{44,-30,-1}, -{44,-30,0}, -{44,-30,1}, -{44,-30,2}, -{44,-30,3}, -{44,-30,4}, -{44,-30,5}, -{44,-30,6}, -{44,-30,7}, -{44,-30,8}, -{44,-30,9}, -{44,-30,10}, -{44,-30,11}, -{44,-30,12}, -{44,-30,13}, -{44,-30,14}, -{44,-30,15}, -{44,-30,16}, -{44,-30,17}, -{44,-30,18}, -{44,-30,19}, -{44,-30,20}, -{44,-30,21}, -{44,-30,22}, -{44,-30,23}, -{44,-30,24}, -{44,-30,25}, -{44,-30,26}, -{44,-30,27}, -{44,-30,28}, -{44,-30,29}, -{44,-30,30}, -{44,-30,31}, -{44,-30,32}, -{44,-30,33}, -{44,-30,34}, -{44,-30,35}, -{44,-30,36}, -{44,-30,37}, -{44,-30,38}, -{44,-30,39}, -{44,-30,40}, -{44,-30,41}, -{44,-30,42}, -{44,-30,43}, -{44,-30,44}, -{44,-30,45}, -{44,-30,46}, -{44,-30,47}, -{44,-30,48}, -{44,-30,49}, -{44,-29,-4}, -{44,-29,-3}, -{44,-29,-2}, -{44,-29,-1}, -{44,-29,0}, -{44,-29,1}, -{44,-29,2}, -{44,-29,3}, -{44,-29,4}, -{44,-29,5}, -{44,-29,6}, -{44,-29,7}, -{44,-29,8}, -{44,-29,9}, -{44,-29,10}, -{44,-29,11}, -{44,-29,12}, -{44,-29,13}, -{44,-29,14}, -{44,-29,15}, -{44,-29,16}, -{44,-29,17}, -{44,-29,18}, -{44,-29,19}, -{44,-29,20}, -{44,-29,21}, -{44,-29,22}, -{44,-29,23}, -{44,-29,24}, -{44,-29,25}, -{44,-29,26}, -{44,-29,27}, -{44,-29,28}, -{44,-29,29}, -{44,-29,30}, -{44,-29,31}, -{44,-29,32}, -{44,-29,33}, -{44,-29,34}, -{44,-29,35}, -{44,-29,36}, -{44,-29,37}, -{44,-29,38}, -{44,-29,39}, -{44,-29,40}, -{44,-29,41}, -{44,-29,42}, -{44,-29,43}, -{44,-29,44}, -{44,-29,45}, -{44,-29,46}, -{44,-29,47}, -{44,-29,48}, -{44,-29,49}, -{44,-28,-6}, -{44,-28,-5}, -{44,-28,-4}, -{44,-28,-3}, -{44,-28,-2}, -{44,-28,-1}, -{44,-28,0}, -{44,-28,1}, -{44,-28,2}, -{44,-28,3}, -{44,-28,4}, -{44,-28,5}, -{44,-28,6}, -{44,-28,7}, -{44,-28,8}, -{44,-28,9}, -{44,-28,10}, -{44,-28,11}, -{44,-28,12}, -{44,-28,13}, -{44,-28,14}, -{44,-28,15}, -{44,-28,16}, -{44,-28,17}, -{44,-28,18}, -{44,-28,19}, -{44,-28,20}, -{44,-28,21}, -{44,-28,22}, -{44,-28,23}, -{44,-28,24}, -{44,-28,25}, -{44,-28,26}, -{44,-28,27}, -{44,-28,28}, -{44,-28,29}, -{44,-28,30}, -{44,-28,31}, -{44,-28,32}, -{44,-28,33}, -{44,-28,34}, -{44,-28,35}, -{44,-28,36}, -{44,-28,37}, -{44,-28,38}, -{44,-28,39}, -{44,-28,40}, -{44,-28,41}, -{44,-28,42}, -{44,-28,43}, -{44,-28,44}, -{44,-28,45}, -{44,-28,46}, -{44,-28,47}, -{44,-28,48}, -{44,-28,49}, -{44,-27,-8}, -{44,-27,-7}, -{44,-27,-6}, -{44,-27,-5}, -{44,-27,-4}, -{44,-27,-3}, -{44,-27,-2}, -{44,-27,-1}, -{44,-27,0}, -{44,-27,1}, -{44,-27,2}, -{44,-27,3}, -{44,-27,4}, -{44,-27,5}, -{44,-27,6}, -{44,-27,7}, -{44,-27,8}, -{44,-27,9}, -{44,-27,10}, -{44,-27,11}, -{44,-27,12}, -{44,-27,13}, -{44,-27,14}, -{44,-27,15}, -{44,-27,16}, -{44,-27,17}, -{44,-27,18}, -{44,-27,19}, -{44,-27,20}, -{44,-27,21}, -{44,-27,22}, -{44,-27,23}, -{44,-27,24}, -{44,-27,25}, -{44,-27,26}, -{44,-27,27}, -{44,-27,28}, -{44,-27,29}, -{44,-27,30}, -{44,-27,31}, -{44,-27,32}, -{44,-27,33}, -{44,-27,34}, -{44,-27,35}, -{44,-27,36}, -{44,-27,37}, -{44,-27,38}, -{44,-27,39}, -{44,-27,40}, -{44,-27,41}, -{44,-27,42}, -{44,-27,43}, -{44,-27,44}, -{44,-27,45}, -{44,-27,46}, -{44,-27,47}, -{44,-27,48}, -{44,-27,49}, -{44,-26,-9}, -{44,-26,-8}, -{44,-26,-7}, -{44,-26,-6}, -{44,-26,-5}, -{44,-26,-4}, -{44,-26,-3}, -{44,-26,-2}, -{44,-26,-1}, -{44,-26,0}, -{44,-26,1}, -{44,-26,2}, -{44,-26,3}, -{44,-26,4}, -{44,-26,5}, -{44,-26,6}, -{44,-26,7}, -{44,-26,8}, -{44,-26,9}, -{44,-26,10}, -{44,-26,11}, -{44,-26,12}, -{44,-26,13}, -{44,-26,14}, -{44,-26,15}, -{44,-26,16}, -{44,-26,17}, -{44,-26,18}, -{44,-26,19}, -{44,-26,20}, -{44,-26,21}, -{44,-26,22}, -{44,-26,23}, -{44,-26,24}, -{44,-26,25}, -{44,-26,26}, -{44,-26,27}, -{44,-26,28}, -{44,-26,29}, -{44,-26,30}, -{44,-26,31}, -{44,-26,32}, -{44,-26,33}, -{44,-26,34}, -{44,-26,35}, -{44,-26,36}, -{44,-26,37}, -{44,-26,38}, -{44,-26,39}, -{44,-26,40}, -{44,-26,41}, -{44,-26,42}, -{44,-26,43}, -{44,-26,44}, -{44,-26,45}, -{44,-26,46}, -{44,-26,47}, -{44,-26,48}, -{44,-26,49}, -{44,-25,-11}, -{44,-25,-10}, -{44,-25,-9}, -{44,-25,-8}, -{44,-25,-7}, -{44,-25,-6}, -{44,-25,-5}, -{44,-25,-4}, -{44,-25,-3}, -{44,-25,-2}, -{44,-25,-1}, -{44,-25,0}, -{44,-25,1}, -{44,-25,2}, -{44,-25,3}, -{44,-25,4}, -{44,-25,5}, -{44,-25,6}, -{44,-25,7}, -{44,-25,8}, -{44,-25,9}, -{44,-25,10}, -{44,-25,11}, -{44,-25,12}, -{44,-25,13}, -{44,-25,14}, -{44,-25,15}, -{44,-25,16}, -{44,-25,17}, -{44,-25,18}, -{44,-25,19}, -{44,-25,20}, -{44,-25,21}, -{44,-25,22}, -{44,-25,23}, -{44,-25,24}, -{44,-25,25}, -{44,-25,26}, -{44,-25,27}, -{44,-25,28}, -{44,-25,29}, -{44,-25,30}, -{44,-25,31}, -{44,-25,32}, -{44,-25,33}, -{44,-25,34}, -{44,-25,35}, -{44,-25,36}, -{44,-25,37}, -{44,-25,38}, -{44,-25,39}, -{44,-25,40}, -{44,-25,41}, -{44,-25,42}, -{44,-25,43}, -{44,-25,44}, -{44,-25,45}, -{44,-25,46}, -{44,-25,47}, -{44,-25,48}, -{44,-25,49}, -{44,-24,-12}, -{44,-24,-11}, -{44,-24,-10}, -{44,-24,-9}, -{44,-24,-8}, -{44,-24,-7}, -{44,-24,-6}, -{44,-24,-5}, -{44,-24,-4}, -{44,-24,-3}, -{44,-24,-2}, -{44,-24,-1}, -{44,-24,0}, -{44,-24,1}, -{44,-24,2}, -{44,-24,3}, -{44,-24,4}, -{44,-24,5}, -{44,-24,6}, -{44,-24,7}, -{44,-24,8}, -{44,-24,9}, -{44,-24,10}, -{44,-24,11}, -{44,-24,12}, -{44,-24,13}, -{44,-24,14}, -{44,-24,15}, -{44,-24,16}, -{44,-24,17}, -{44,-24,18}, -{44,-24,19}, -{44,-24,20}, -{44,-24,21}, -{44,-24,22}, -{44,-24,23}, -{44,-24,24}, -{44,-24,25}, -{44,-24,26}, -{44,-24,27}, -{44,-24,28}, -{44,-24,29}, -{44,-24,30}, -{44,-24,31}, -{44,-24,32}, -{44,-24,33}, -{44,-24,34}, -{44,-24,35}, -{44,-24,36}, -{44,-24,37}, -{44,-24,38}, -{44,-24,39}, -{44,-24,40}, -{44,-24,41}, -{44,-24,42}, -{44,-24,43}, -{44,-24,44}, -{44,-24,45}, -{44,-24,46}, -{44,-24,47}, -{44,-24,48}, -{44,-24,49}, -{44,-23,-14}, -{44,-23,-13}, -{44,-23,-12}, -{44,-23,-11}, -{44,-23,-10}, -{44,-23,-9}, -{44,-23,-8}, -{44,-23,-7}, -{44,-23,-6}, -{44,-23,-5}, -{44,-23,-4}, -{44,-23,-3}, -{44,-23,-2}, -{44,-23,-1}, -{44,-23,0}, -{44,-23,1}, -{44,-23,2}, -{44,-23,3}, -{44,-23,4}, -{44,-23,5}, -{44,-23,6}, -{44,-23,7}, -{44,-23,8}, -{44,-23,9}, -{44,-23,10}, -{44,-23,11}, -{44,-23,12}, -{44,-23,13}, -{44,-23,14}, -{44,-23,15}, -{44,-23,16}, -{44,-23,17}, -{44,-23,18}, -{44,-23,19}, -{44,-23,20}, -{44,-23,21}, -{44,-23,22}, -{44,-23,23}, -{44,-23,24}, -{44,-23,25}, -{44,-23,26}, -{44,-23,27}, -{44,-23,28}, -{44,-23,29}, -{44,-23,30}, -{44,-23,31}, -{44,-23,32}, -{44,-23,33}, -{44,-23,34}, -{44,-23,35}, -{44,-23,36}, -{44,-23,37}, -{44,-23,38}, -{44,-23,39}, -{44,-23,40}, -{44,-23,41}, -{44,-23,42}, -{44,-23,43}, -{44,-23,44}, -{44,-23,45}, -{44,-23,46}, -{44,-23,47}, -{44,-23,48}, -{44,-23,49}, -{44,-22,-15}, -{44,-22,-14}, -{44,-22,-13}, -{44,-22,-12}, -{44,-22,-11}, -{44,-22,-10}, -{44,-22,-9}, -{44,-22,-8}, -{44,-22,-7}, -{44,-22,-6}, -{44,-22,-5}, -{44,-22,-4}, -{44,-22,-3}, -{44,-22,-2}, -{44,-22,-1}, -{44,-22,0}, -{44,-22,1}, -{44,-22,2}, -{44,-22,3}, -{44,-22,4}, -{44,-22,5}, -{44,-22,6}, -{44,-22,7}, -{44,-22,8}, -{44,-22,9}, -{44,-22,10}, -{44,-22,11}, -{44,-22,12}, -{44,-22,13}, -{44,-22,14}, -{44,-22,15}, -{44,-22,16}, -{44,-22,17}, -{44,-22,18}, -{44,-22,19}, -{44,-22,20}, -{44,-22,21}, -{44,-22,22}, -{44,-22,23}, -{44,-22,24}, -{44,-22,25}, -{44,-22,26}, -{44,-22,27}, -{44,-22,28}, -{44,-22,29}, -{44,-22,30}, -{44,-22,31}, -{44,-22,32}, -{44,-22,33}, -{44,-22,34}, -{44,-22,35}, -{44,-22,36}, -{44,-22,37}, -{44,-22,38}, -{44,-22,39}, -{44,-22,40}, -{44,-22,41}, -{44,-22,42}, -{44,-22,43}, -{44,-22,44}, -{44,-22,45}, -{44,-22,46}, -{44,-22,47}, -{44,-22,48}, -{44,-22,49}, -{44,-21,-17}, -{44,-21,-16}, -{44,-21,-15}, -{44,-21,-14}, -{44,-21,-13}, -{44,-21,-12}, -{44,-21,-11}, -{44,-21,-10}, -{44,-21,-9}, -{44,-21,-8}, -{44,-21,-7}, -{44,-21,-6}, -{44,-21,-5}, -{44,-21,-4}, -{44,-21,-3}, -{44,-21,-2}, -{44,-21,-1}, -{44,-21,0}, -{44,-21,1}, -{44,-21,2}, -{44,-21,3}, -{44,-21,4}, -{44,-21,5}, -{44,-21,6}, -{44,-21,7}, -{44,-21,8}, -{44,-21,9}, -{44,-21,10}, -{44,-21,11}, -{44,-21,12}, -{44,-21,13}, -{44,-21,14}, -{44,-21,15}, -{44,-21,16}, -{44,-21,17}, -{44,-21,18}, -{44,-21,19}, -{44,-21,20}, -{44,-21,21}, -{44,-21,22}, -{44,-21,23}, -{44,-21,24}, -{44,-21,25}, -{44,-21,26}, -{44,-21,27}, -{44,-21,28}, -{44,-21,29}, -{44,-21,30}, -{44,-21,31}, -{44,-21,32}, -{44,-21,33}, -{44,-21,34}, -{44,-21,35}, -{44,-21,36}, -{44,-21,37}, -{44,-21,38}, -{44,-21,39}, -{44,-21,40}, -{44,-21,41}, -{44,-21,42}, -{44,-21,43}, -{44,-21,44}, -{44,-21,45}, -{44,-21,46}, -{44,-21,47}, -{44,-21,48}, -{44,-21,49}, -{44,-20,-18}, -{44,-20,-17}, -{44,-20,-16}, -{44,-20,-15}, -{44,-20,-14}, -{44,-20,-13}, -{44,-20,-12}, -{44,-20,-11}, -{44,-20,-10}, -{44,-20,-9}, -{44,-20,-8}, -{44,-20,-7}, -{44,-20,-6}, -{44,-20,-5}, -{44,-20,-4}, -{44,-20,-3}, -{44,-20,-2}, -{44,-20,-1}, -{44,-20,0}, -{44,-20,1}, -{44,-20,2}, -{44,-20,3}, -{44,-20,4}, -{44,-20,5}, -{44,-20,6}, -{44,-20,7}, -{44,-20,8}, -{44,-20,9}, -{44,-20,10}, -{44,-20,11}, -{44,-20,12}, -{44,-20,13}, -{44,-20,14}, -{44,-20,15}, -{44,-20,16}, -{44,-20,17}, -{44,-20,18}, -{44,-20,19}, -{44,-20,20}, -{44,-20,21}, -{44,-20,22}, -{44,-20,23}, -{44,-20,24}, -{44,-20,25}, -{44,-20,26}, -{44,-20,27}, -{44,-20,28}, -{44,-20,29}, -{44,-20,30}, -{44,-20,31}, -{44,-20,32}, -{44,-20,33}, -{44,-20,34}, -{44,-20,35}, -{44,-20,36}, -{44,-20,37}, -{44,-20,38}, -{44,-20,39}, -{44,-20,40}, -{44,-20,41}, -{44,-20,42}, -{44,-20,43}, -{44,-20,44}, -{44,-20,45}, -{44,-20,46}, -{44,-20,47}, -{44,-20,48}, -{44,-20,49}, -{44,-19,-19}, -{44,-19,-18}, -{44,-19,-17}, -{44,-19,-16}, -{44,-19,-15}, -{44,-19,-14}, -{44,-19,-13}, -{44,-19,-12}, -{44,-19,-11}, -{44,-19,-10}, -{44,-19,-9}, -{44,-19,-8}, -{44,-19,-7}, -{44,-19,-6}, -{44,-19,-5}, -{44,-19,-4}, -{44,-19,-3}, -{44,-19,-2}, -{44,-19,-1}, -{44,-19,0}, -{44,-19,1}, -{44,-19,2}, -{44,-19,3}, -{44,-19,4}, -{44,-19,5}, -{44,-19,6}, -{44,-19,7}, -{44,-19,8}, -{44,-19,9}, -{44,-19,10}, -{44,-19,11}, -{44,-19,12}, -{44,-19,13}, -{44,-19,14}, -{44,-19,15}, -{44,-19,16}, -{44,-19,17}, -{44,-19,18}, -{44,-19,19}, -{44,-19,20}, -{44,-19,21}, -{44,-19,22}, -{44,-19,23}, -{44,-19,24}, -{44,-19,25}, -{44,-19,26}, -{44,-19,27}, -{44,-19,28}, -{44,-19,29}, -{44,-19,30}, -{44,-19,31}, -{44,-19,32}, -{44,-19,33}, -{44,-19,34}, -{44,-19,35}, -{44,-19,36}, -{44,-19,37}, -{44,-19,38}, -{44,-19,39}, -{44,-19,40}, -{44,-19,41}, -{44,-19,42}, -{44,-19,43}, -{44,-19,44}, -{44,-19,45}, -{44,-19,46}, -{44,-19,47}, -{44,-19,48}, -{44,-19,49}, -{44,-18,-21}, -{44,-18,-20}, -{44,-18,-19}, -{44,-18,-18}, -{44,-18,-17}, -{44,-18,-16}, -{44,-18,-15}, -{44,-18,-14}, -{44,-18,-13}, -{44,-18,-12}, -{44,-18,-11}, -{44,-18,-10}, -{44,-18,-9}, -{44,-18,-8}, -{44,-18,-7}, -{44,-18,-6}, -{44,-18,-5}, -{44,-18,-4}, -{44,-18,-3}, -{44,-18,-2}, -{44,-18,-1}, -{44,-18,0}, -{44,-18,1}, -{44,-18,2}, -{44,-18,3}, -{44,-18,4}, -{44,-18,5}, -{44,-18,6}, -{44,-18,7}, -{44,-18,8}, -{44,-18,9}, -{44,-18,10}, -{44,-18,11}, -{44,-18,12}, -{44,-18,13}, -{44,-18,14}, -{44,-18,15}, -{44,-18,16}, -{44,-18,17}, -{44,-18,18}, -{44,-18,19}, -{44,-18,20}, -{44,-18,21}, -{44,-18,22}, -{44,-18,23}, -{44,-18,24}, -{44,-18,25}, -{44,-18,26}, -{44,-18,27}, -{44,-18,28}, -{44,-18,29}, -{44,-18,30}, -{44,-18,31}, -{44,-18,32}, -{44,-18,33}, -{44,-18,34}, -{44,-18,35}, -{44,-18,36}, -{44,-18,37}, -{44,-18,38}, -{44,-18,39}, -{44,-18,40}, -{44,-18,41}, -{44,-18,42}, -{44,-18,43}, -{44,-18,44}, -{44,-18,45}, -{44,-18,46}, -{44,-18,47}, -{44,-18,48}, -{44,-18,49}, -{44,-17,-22}, -{44,-17,-21}, -{44,-17,-20}, -{44,-17,-19}, -{44,-17,-18}, -{44,-17,-17}, -{44,-17,-16}, -{44,-17,-15}, -{44,-17,-14}, -{44,-17,-13}, -{44,-17,-12}, -{44,-17,-11}, -{44,-17,-10}, -{44,-17,-9}, -{44,-17,-8}, -{44,-17,-7}, -{44,-17,-6}, -{44,-17,-5}, -{44,-17,-4}, -{44,-17,-3}, -{44,-17,-2}, -{44,-17,-1}, -{44,-17,0}, -{44,-17,1}, -{44,-17,2}, -{44,-17,3}, -{44,-17,4}, -{44,-17,5}, -{44,-17,6}, -{44,-17,7}, -{44,-17,8}, -{44,-17,9}, -{44,-17,10}, -{44,-17,11}, -{44,-17,12}, -{44,-17,13}, -{44,-17,14}, -{44,-17,15}, -{44,-17,16}, -{44,-17,17}, -{44,-17,18}, -{44,-17,19}, -{44,-17,20}, -{44,-17,21}, -{44,-17,22}, -{44,-17,23}, -{44,-17,24}, -{44,-17,25}, -{44,-17,26}, -{44,-17,27}, -{44,-17,28}, -{44,-17,29}, -{44,-17,30}, -{44,-17,31}, -{44,-17,32}, -{44,-17,33}, -{44,-17,34}, -{44,-17,35}, -{44,-17,36}, -{44,-17,37}, -{44,-17,38}, -{44,-17,39}, -{44,-17,40}, -{44,-17,41}, -{44,-17,42}, -{44,-17,43}, -{44,-17,44}, -{44,-17,45}, -{44,-17,46}, -{44,-17,47}, -{44,-17,48}, -{44,-17,49}, -{44,-16,-23}, -{44,-16,-22}, -{44,-16,-21}, -{44,-16,-20}, -{44,-16,-19}, -{44,-16,-18}, -{44,-16,-17}, -{44,-16,-16}, -{44,-16,-15}, -{44,-16,-14}, -{44,-16,-13}, -{44,-16,-12}, -{44,-16,-11}, -{44,-16,-10}, -{44,-16,-9}, -{44,-16,-8}, -{44,-16,-7}, -{44,-16,-6}, -{44,-16,-5}, -{44,-16,-4}, -{44,-16,-3}, -{44,-16,-2}, -{44,-16,-1}, -{44,-16,0}, -{44,-16,1}, -{44,-16,2}, -{44,-16,3}, -{44,-16,4}, -{44,-16,5}, -{44,-16,6}, -{44,-16,7}, -{44,-16,8}, -{44,-16,9}, -{44,-16,10}, -{44,-16,11}, -{44,-16,12}, -{44,-16,13}, -{44,-16,14}, -{44,-16,15}, -{44,-16,16}, -{44,-16,17}, -{44,-16,18}, -{44,-16,19}, -{44,-16,20}, -{44,-16,21}, -{44,-16,22}, -{44,-16,23}, -{44,-16,24}, -{44,-16,25}, -{44,-16,26}, -{44,-16,27}, -{44,-16,28}, -{44,-16,29}, -{44,-16,30}, -{44,-16,31}, -{44,-16,32}, -{44,-16,33}, -{44,-16,34}, -{44,-16,35}, -{44,-16,36}, -{44,-16,37}, -{44,-16,38}, -{44,-16,39}, -{44,-16,40}, -{44,-16,41}, -{44,-16,42}, -{44,-16,43}, -{44,-16,44}, -{44,-16,45}, -{44,-16,46}, -{44,-16,47}, -{44,-16,48}, -{44,-16,49}, -{44,-16,50}, -{44,-15,-25}, -{44,-15,-24}, -{44,-15,-23}, -{44,-15,-22}, -{44,-15,-21}, -{44,-15,-20}, -{44,-15,-19}, -{44,-15,-18}, -{44,-15,-17}, -{44,-15,-16}, -{44,-15,-15}, -{44,-15,-14}, -{44,-15,-13}, -{44,-15,-12}, -{44,-15,-11}, -{44,-15,-10}, -{44,-15,-9}, -{44,-15,-8}, -{44,-15,-7}, -{44,-15,-6}, -{44,-15,-5}, -{44,-15,-4}, -{44,-15,-3}, -{44,-15,-2}, -{44,-15,-1}, -{44,-15,0}, -{44,-15,1}, -{44,-15,2}, -{44,-15,3}, -{44,-15,4}, -{44,-15,5}, -{44,-15,6}, -{44,-15,7}, -{44,-15,8}, -{44,-15,9}, -{44,-15,10}, -{44,-15,11}, -{44,-15,12}, -{44,-15,13}, -{44,-15,14}, -{44,-15,15}, -{44,-15,16}, -{44,-15,17}, -{44,-15,18}, -{44,-15,19}, -{44,-15,20}, -{44,-15,21}, -{44,-15,22}, -{44,-15,23}, -{44,-15,24}, -{44,-15,25}, -{44,-15,26}, -{44,-15,27}, -{44,-15,28}, -{44,-15,29}, -{44,-15,30}, -{44,-15,31}, -{44,-15,32}, -{44,-15,33}, -{44,-15,34}, -{44,-15,35}, -{44,-15,36}, -{44,-15,37}, -{44,-15,38}, -{44,-15,39}, -{44,-15,40}, -{44,-15,41}, -{44,-15,42}, -{44,-15,43}, -{44,-15,44}, -{44,-15,45}, -{44,-15,46}, -{44,-15,47}, -{44,-15,48}, -{44,-15,49}, -{44,-15,50}, -{44,-14,-26}, -{44,-14,-25}, -{44,-14,-24}, -{44,-14,-23}, -{44,-14,-22}, -{44,-14,-21}, -{44,-14,-20}, -{44,-14,-19}, -{44,-14,-18}, -{44,-14,-17}, -{44,-14,-16}, -{44,-14,-15}, -{44,-14,-14}, -{44,-14,-13}, -{44,-14,-12}, -{44,-14,-11}, -{44,-14,-10}, -{44,-14,-9}, -{44,-14,-8}, -{44,-14,-7}, -{44,-14,-6}, -{44,-14,-5}, -{44,-14,-4}, -{44,-14,-3}, -{44,-14,-2}, -{44,-14,-1}, -{44,-14,0}, -{44,-14,1}, -{44,-14,2}, -{44,-14,3}, -{44,-14,4}, -{44,-14,5}, -{44,-14,6}, -{44,-14,7}, -{44,-14,8}, -{44,-14,9}, -{44,-14,10}, -{44,-14,11}, -{44,-14,12}, -{44,-14,13}, -{44,-14,14}, -{44,-14,15}, -{44,-14,16}, -{44,-14,17}, -{44,-14,18}, -{44,-14,19}, -{44,-14,20}, -{44,-14,21}, -{44,-14,22}, -{44,-14,23}, -{44,-14,24}, -{44,-14,25}, -{44,-14,26}, -{44,-14,27}, -{44,-14,28}, -{44,-14,29}, -{44,-14,30}, -{44,-14,31}, -{44,-14,32}, -{44,-14,33}, -{44,-14,34}, -{44,-14,35}, -{44,-14,36}, -{44,-14,37}, -{44,-14,38}, -{44,-14,39}, -{44,-14,40}, -{44,-14,41}, -{44,-14,42}, -{44,-14,43}, -{44,-14,44}, -{44,-14,45}, -{44,-14,46}, -{44,-14,47}, -{44,-14,48}, -{44,-14,49}, -{44,-14,50}, -{44,-13,-27}, -{44,-13,-26}, -{44,-13,-25}, -{44,-13,-24}, -{44,-13,-23}, -{44,-13,-22}, -{44,-13,-21}, -{44,-13,-20}, -{44,-13,-19}, -{44,-13,-18}, -{44,-13,-17}, -{44,-13,-16}, -{44,-13,-15}, -{44,-13,-14}, -{44,-13,-13}, -{44,-13,-12}, -{44,-13,-11}, -{44,-13,-10}, -{44,-13,-9}, -{44,-13,-8}, -{44,-13,-7}, -{44,-13,-6}, -{44,-13,-5}, -{44,-13,-4}, -{44,-13,-3}, -{44,-13,-2}, -{44,-13,-1}, -{44,-13,0}, -{44,-13,1}, -{44,-13,2}, -{44,-13,3}, -{44,-13,4}, -{44,-13,5}, -{44,-13,6}, -{44,-13,7}, -{44,-13,8}, -{44,-13,9}, -{44,-13,10}, -{44,-13,11}, -{44,-13,12}, -{44,-13,13}, -{44,-13,14}, -{44,-13,15}, -{44,-13,16}, -{44,-13,17}, -{44,-13,18}, -{44,-13,19}, -{44,-13,20}, -{44,-13,21}, -{44,-13,22}, -{44,-13,23}, -{44,-13,24}, -{44,-13,25}, -{44,-13,26}, -{44,-13,27}, -{44,-13,28}, -{44,-13,29}, -{44,-13,30}, -{44,-13,31}, -{44,-13,32}, -{44,-13,33}, -{44,-13,34}, -{44,-13,35}, -{44,-13,36}, -{44,-13,37}, -{44,-13,38}, -{44,-13,39}, -{44,-13,40}, -{44,-13,41}, -{44,-13,42}, -{44,-13,43}, -{44,-13,44}, -{44,-13,45}, -{44,-13,46}, -{44,-13,47}, -{44,-13,48}, -{44,-13,49}, -{44,-13,50}, -{44,-12,-29}, -{44,-12,-28}, -{44,-12,-27}, -{44,-12,-26}, -{44,-12,-25}, -{44,-12,-24}, -{44,-12,-23}, -{44,-12,-22}, -{44,-12,-21}, -{44,-12,-20}, -{44,-12,-19}, -{44,-12,-18}, -{44,-12,-17}, -{44,-12,-16}, -{44,-12,-15}, -{44,-12,-14}, -{44,-12,-13}, -{44,-12,-12}, -{44,-12,-11}, -{44,-12,-10}, -{44,-12,-9}, -{44,-12,-8}, -{44,-12,-7}, -{44,-12,-6}, -{44,-12,-5}, -{44,-12,-4}, -{44,-12,-3}, -{44,-12,-2}, -{44,-12,-1}, -{44,-12,0}, -{44,-12,1}, -{44,-12,2}, -{44,-12,3}, -{44,-12,4}, -{44,-12,5}, -{44,-12,6}, -{44,-12,7}, -{44,-12,8}, -{44,-12,9}, -{44,-12,10}, -{44,-12,11}, -{44,-12,12}, -{44,-12,13}, -{44,-12,14}, -{44,-12,15}, -{44,-12,16}, -{44,-12,17}, -{44,-12,18}, -{44,-12,19}, -{44,-12,20}, -{44,-12,21}, -{44,-12,22}, -{44,-12,23}, -{44,-12,24}, -{44,-12,25}, -{44,-12,26}, -{44,-12,27}, -{44,-12,28}, -{44,-12,29}, -{44,-12,30}, -{44,-12,31}, -{44,-12,32}, -{44,-12,33}, -{44,-12,34}, -{44,-12,35}, -{44,-12,36}, -{44,-12,37}, -{44,-12,38}, -{44,-12,39}, -{44,-12,40}, -{44,-12,41}, -{44,-12,42}, -{44,-12,43}, -{44,-12,44}, -{44,-12,45}, -{44,-12,46}, -{44,-12,47}, -{44,-12,48}, -{44,-12,49}, -{44,-12,50}, -{44,-11,-30}, -{44,-11,-29}, -{44,-11,-28}, -{44,-11,-27}, -{44,-11,-26}, -{44,-11,-25}, -{44,-11,-24}, -{44,-11,-23}, -{44,-11,-22}, -{44,-11,-21}, -{44,-11,-20}, -{44,-11,-19}, -{44,-11,-18}, -{44,-11,-17}, -{44,-11,-16}, -{44,-11,-15}, -{44,-11,-14}, -{44,-11,-13}, -{44,-11,-12}, -{44,-11,-11}, -{44,-11,-10}, -{44,-11,-9}, -{44,-11,-8}, -{44,-11,-7}, -{44,-11,-6}, -{44,-11,-5}, -{44,-11,-4}, -{44,-11,-3}, -{44,-11,-2}, -{44,-11,-1}, -{44,-11,0}, -{44,-11,1}, -{44,-11,2}, -{44,-11,3}, -{44,-11,4}, -{44,-11,5}, -{44,-11,6}, -{44,-11,7}, -{44,-11,8}, -{44,-11,9}, -{44,-11,10}, -{44,-11,11}, -{44,-11,12}, -{44,-11,13}, -{44,-11,14}, -{44,-11,15}, -{44,-11,16}, -{44,-11,17}, -{44,-11,18}, -{44,-11,19}, -{44,-11,20}, -{44,-11,21}, -{44,-11,22}, -{44,-11,23}, -{44,-11,24}, -{44,-11,25}, -{44,-11,26}, -{44,-11,27}, -{44,-11,28}, -{44,-11,29}, -{44,-11,30}, -{44,-11,31}, -{44,-11,32}, -{44,-11,33}, -{44,-11,34}, -{44,-11,35}, -{44,-11,36}, -{44,-11,37}, -{44,-11,38}, -{44,-11,39}, -{44,-11,40}, -{44,-11,41}, -{44,-11,42}, -{44,-11,43}, -{44,-11,44}, -{44,-11,45}, -{44,-11,46}, -{44,-11,47}, -{44,-11,48}, -{44,-11,49}, -{44,-11,50}, -{44,-10,-31}, -{44,-10,-30}, -{44,-10,-29}, -{44,-10,-28}, -{44,-10,-27}, -{44,-10,-26}, -{44,-10,-25}, -{44,-10,-24}, -{44,-10,-23}, -{44,-10,-22}, -{44,-10,-21}, -{44,-10,-20}, -{44,-10,-19}, -{44,-10,-18}, -{44,-10,-17}, -{44,-10,-16}, -{44,-10,-15}, -{44,-10,-14}, -{44,-10,-13}, -{44,-10,-12}, -{44,-10,-11}, -{44,-10,-10}, -{44,-10,-9}, -{44,-10,-8}, -{44,-10,-7}, -{44,-10,-6}, -{44,-10,-5}, -{44,-10,-4}, -{44,-10,-3}, -{44,-10,-2}, -{44,-10,-1}, -{44,-10,0}, -{44,-10,1}, -{44,-10,2}, -{44,-10,3}, -{44,-10,4}, -{44,-10,5}, -{44,-10,6}, -{44,-10,7}, -{44,-10,8}, -{44,-10,9}, -{44,-10,10}, -{44,-10,11}, -{44,-10,12}, -{44,-10,13}, -{44,-10,14}, -{44,-10,15}, -{44,-10,16}, -{44,-10,17}, -{44,-10,18}, -{44,-10,19}, -{44,-10,20}, -{44,-10,21}, -{44,-10,22}, -{44,-10,23}, -{44,-10,24}, -{44,-10,25}, -{44,-10,26}, -{44,-10,27}, -{44,-10,28}, -{44,-10,29}, -{44,-10,30}, -{44,-10,31}, -{44,-10,32}, -{44,-10,33}, -{44,-10,34}, -{44,-10,35}, -{44,-10,36}, -{44,-10,37}, -{44,-10,38}, -{44,-10,39}, -{44,-10,40}, -{44,-10,41}, -{44,-10,42}, -{44,-10,43}, -{44,-10,44}, -{44,-10,45}, -{44,-10,46}, -{44,-10,47}, -{44,-10,48}, -{44,-10,49}, -{44,-10,50}, -{44,-9,-32}, -{44,-9,-31}, -{44,-9,-30}, -{44,-9,-29}, -{44,-9,-28}, -{44,-9,-27}, -{44,-9,-26}, -{44,-9,-25}, -{44,-9,-24}, -{44,-9,-23}, -{44,-9,-22}, -{44,-9,-21}, -{44,-9,-20}, -{44,-9,-19}, -{44,-9,-18}, -{44,-9,-17}, -{44,-9,-16}, -{44,-9,-15}, -{44,-9,-14}, -{44,-9,-13}, -{44,-9,-12}, -{44,-9,-11}, -{44,-9,-10}, -{44,-9,-9}, -{44,-9,-8}, -{44,-9,-7}, -{44,-9,-6}, -{44,-9,-5}, -{44,-9,-4}, -{44,-9,-3}, -{44,-9,-2}, -{44,-9,-1}, -{44,-9,0}, -{44,-9,1}, -{44,-9,2}, -{44,-9,3}, -{44,-9,4}, -{44,-9,5}, -{44,-9,6}, -{44,-9,7}, -{44,-9,8}, -{44,-9,9}, -{44,-9,10}, -{44,-9,11}, -{44,-9,12}, -{44,-9,13}, -{44,-9,14}, -{44,-9,15}, -{44,-9,16}, -{44,-9,17}, -{44,-9,18}, -{44,-9,19}, -{44,-9,20}, -{44,-9,21}, -{44,-9,22}, -{44,-9,23}, -{44,-9,24}, -{44,-9,25}, -{44,-9,26}, -{44,-9,27}, -{44,-9,28}, -{44,-9,29}, -{44,-9,30}, -{44,-9,31}, -{44,-9,32}, -{44,-9,33}, -{44,-9,34}, -{44,-9,35}, -{44,-9,36}, -{44,-9,37}, -{44,-9,38}, -{44,-9,39}, -{44,-9,40}, -{44,-9,41}, -{44,-9,42}, -{44,-9,43}, -{44,-9,44}, -{44,-9,45}, -{44,-9,46}, -{44,-9,47}, -{44,-9,48}, -{44,-9,49}, -{44,-9,50}, -{44,-8,-33}, -{44,-8,-32}, -{44,-8,-31}, -{44,-8,-30}, -{44,-8,-29}, -{44,-8,-28}, -{44,-8,-27}, -{44,-8,-26}, -{44,-8,-25}, -{44,-8,-24}, -{44,-8,-23}, -{44,-8,-22}, -{44,-8,-21}, -{44,-8,-20}, -{44,-8,-19}, -{44,-8,-18}, -{44,-8,-17}, -{44,-8,-16}, -{44,-8,-15}, -{44,-8,-14}, -{44,-8,-13}, -{44,-8,-12}, -{44,-8,-11}, -{44,-8,-10}, -{44,-8,-9}, -{44,-8,-8}, -{44,-8,-7}, -{44,-8,-6}, -{44,-8,-5}, -{44,-8,-4}, -{44,-8,-3}, -{44,-8,-2}, -{44,-8,-1}, -{44,-8,0}, -{44,-8,1}, -{44,-8,2}, -{44,-8,3}, -{44,-8,4}, -{44,-8,5}, -{44,-8,6}, -{44,-8,7}, -{44,-8,8}, -{44,-8,9}, -{44,-8,10}, -{44,-8,11}, -{44,-8,12}, -{44,-8,13}, -{44,-8,14}, -{44,-8,15}, -{44,-8,16}, -{44,-8,17}, -{44,-8,18}, -{44,-8,19}, -{44,-8,20}, -{44,-8,21}, -{44,-8,22}, -{44,-8,23}, -{44,-8,24}, -{44,-8,25}, -{44,-8,26}, -{44,-8,27}, -{44,-8,28}, -{44,-8,29}, -{44,-8,30}, -{44,-8,31}, -{44,-8,32}, -{44,-8,33}, -{44,-8,34}, -{44,-8,35}, -{44,-8,36}, -{44,-8,37}, -{44,-8,38}, -{44,-8,39}, -{44,-8,40}, -{44,-8,41}, -{44,-8,42}, -{44,-8,43}, -{44,-8,44}, -{44,-8,45}, -{44,-8,46}, -{44,-8,47}, -{44,-8,48}, -{44,-8,49}, -{44,-8,50}, -{44,-7,-35}, -{44,-7,-34}, -{44,-7,-33}, -{44,-7,-32}, -{44,-7,-31}, -{44,-7,-30}, -{44,-7,-29}, -{44,-7,-28}, -{44,-7,-27}, -{44,-7,-26}, -{44,-7,-25}, -{44,-7,-24}, -{44,-7,-23}, -{44,-7,-22}, -{44,-7,-21}, -{44,-7,-20}, -{44,-7,-19}, -{44,-7,-18}, -{44,-7,-17}, -{44,-7,-16}, -{44,-7,-15}, -{44,-7,-14}, -{44,-7,-13}, -{44,-7,-12}, -{44,-7,-11}, -{44,-7,-10}, -{44,-7,-9}, -{44,-7,-8}, -{44,-7,-7}, -{44,-7,-6}, -{44,-7,-5}, -{44,-7,-4}, -{44,-7,-3}, -{44,-7,-2}, -{44,-7,-1}, -{44,-7,0}, -{44,-7,1}, -{44,-7,2}, -{44,-7,3}, -{44,-7,4}, -{44,-7,5}, -{44,-7,6}, -{44,-7,7}, -{44,-7,8}, -{44,-7,9}, -{44,-7,10}, -{44,-7,11}, -{44,-7,12}, -{44,-7,13}, -{44,-7,14}, -{44,-7,15}, -{44,-7,16}, -{44,-7,17}, -{44,-7,18}, -{44,-7,19}, -{44,-7,20}, -{44,-7,21}, -{44,-7,22}, -{44,-7,23}, -{44,-7,24}, -{44,-7,25}, -{44,-7,26}, -{44,-7,27}, -{44,-7,28}, -{44,-7,29}, -{44,-7,30}, -{44,-7,31}, -{44,-7,32}, -{44,-7,33}, -{44,-7,34}, -{44,-7,35}, -{44,-7,36}, -{44,-7,37}, -{44,-7,38}, -{44,-7,39}, -{44,-7,40}, -{44,-7,41}, -{44,-7,42}, -{44,-7,43}, -{44,-7,44}, -{44,-7,45}, -{44,-7,46}, -{44,-7,47}, -{44,-7,48}, -{44,-7,49}, -{44,-7,50}, -{44,-6,-36}, -{44,-6,-35}, -{44,-6,-34}, -{44,-6,-33}, -{44,-6,-32}, -{44,-6,-31}, -{44,-6,-30}, -{44,-6,-29}, -{44,-6,-28}, -{44,-6,-27}, -{44,-6,-26}, -{44,-6,-25}, -{44,-6,-24}, -{44,-6,-23}, -{44,-6,-22}, -{44,-6,-21}, -{44,-6,-20}, -{44,-6,-19}, -{44,-6,-18}, -{44,-6,-17}, -{44,-6,-16}, -{44,-6,-15}, -{44,-6,-14}, -{44,-6,-13}, -{44,-6,-12}, -{44,-6,-11}, -{44,-6,-10}, -{44,-6,-9}, -{44,-6,-8}, -{44,-6,-7}, -{44,-6,-6}, -{44,-6,-5}, -{44,-6,-4}, -{44,-6,-3}, -{44,-6,-2}, -{44,-6,-1}, -{44,-6,0}, -{44,-6,1}, -{44,-6,2}, -{44,-6,3}, -{44,-6,4}, -{44,-6,5}, -{44,-6,6}, -{44,-6,7}, -{44,-6,8}, -{44,-6,9}, -{44,-6,10}, -{44,-6,11}, -{44,-6,12}, -{44,-6,13}, -{44,-6,14}, -{44,-6,15}, -{44,-6,16}, -{44,-6,17}, -{44,-6,18}, -{44,-6,19}, -{44,-6,20}, -{44,-6,21}, -{44,-6,22}, -{44,-6,23}, -{44,-6,24}, -{44,-6,25}, -{44,-6,26}, -{44,-6,27}, -{44,-6,28}, -{44,-6,29}, -{44,-6,30}, -{44,-6,31}, -{44,-6,32}, -{44,-6,33}, -{44,-6,34}, -{44,-6,35}, -{44,-6,36}, -{44,-6,37}, -{44,-6,38}, -{44,-6,39}, -{44,-6,40}, -{44,-6,41}, -{44,-6,42}, -{44,-6,43}, -{44,-6,44}, -{44,-6,45}, -{44,-6,46}, -{44,-6,47}, -{44,-6,48}, -{44,-6,49}, -{44,-6,50}, -{44,-5,-37}, -{44,-5,-36}, -{44,-5,-35}, -{44,-5,-34}, -{44,-5,-33}, -{44,-5,-32}, -{44,-5,-31}, -{44,-5,-30}, -{44,-5,-29}, -{44,-5,-28}, -{44,-5,-27}, -{44,-5,-26}, -{44,-5,-25}, -{44,-5,-24}, -{44,-5,-23}, -{44,-5,-22}, -{44,-5,-21}, -{44,-5,-20}, -{44,-5,-19}, -{44,-5,-18}, -{44,-5,-17}, -{44,-5,-16}, -{44,-5,-15}, -{44,-5,-14}, -{44,-5,-13}, -{44,-5,-12}, -{44,-5,-11}, -{44,-5,-10}, -{44,-5,-9}, -{44,-5,-8}, -{44,-5,-7}, -{44,-5,-6}, -{44,-5,-5}, -{44,-5,-4}, -{44,-5,-3}, -{44,-5,-2}, -{44,-5,-1}, -{44,-5,0}, -{44,-5,1}, -{44,-5,2}, -{44,-5,3}, -{44,-5,4}, -{44,-5,5}, -{44,-5,6}, -{44,-5,7}, -{44,-5,8}, -{44,-5,9}, -{44,-5,10}, -{44,-5,11}, -{44,-5,12}, -{44,-5,13}, -{44,-5,14}, -{44,-5,15}, -{44,-5,16}, -{44,-5,17}, -{44,-5,18}, -{44,-5,19}, -{44,-5,20}, -{44,-5,21}, -{44,-5,22}, -{44,-5,23}, -{44,-5,24}, -{44,-5,25}, -{44,-5,26}, -{44,-5,27}, -{44,-5,28}, -{44,-5,29}, -{44,-5,30}, -{44,-5,31}, -{44,-5,32}, -{44,-5,33}, -{44,-5,34}, -{44,-5,35}, -{44,-5,36}, -{44,-5,37}, -{44,-5,38}, -{44,-5,39}, -{44,-5,40}, -{44,-5,41}, -{44,-5,42}, -{44,-5,43}, -{44,-5,44}, -{44,-5,45}, -{44,-5,46}, -{44,-5,47}, -{44,-5,48}, -{44,-5,49}, -{44,-5,50}, -{44,-4,-38}, -{44,-4,-37}, -{44,-4,-36}, -{44,-4,-35}, -{44,-4,-34}, -{44,-4,-33}, -{44,-4,-32}, -{44,-4,-31}, -{44,-4,-30}, -{44,-4,-29}, -{44,-4,-28}, -{44,-4,-27}, -{44,-4,-26}, -{44,-4,-25}, -{44,-4,-24}, -{44,-4,-23}, -{44,-4,-22}, -{44,-4,-21}, -{44,-4,-20}, -{44,-4,-19}, -{44,-4,-18}, -{44,-4,-17}, -{44,-4,-16}, -{44,-4,-15}, -{44,-4,-14}, -{44,-4,-13}, -{44,-4,-12}, -{44,-4,-11}, -{44,-4,-10}, -{44,-4,-9}, -{44,-4,-8}, -{44,-4,-7}, -{44,-4,-6}, -{44,-4,-5}, -{44,-4,-4}, -{44,-4,-3}, -{44,-4,-2}, -{44,-4,-1}, -{44,-4,0}, -{44,-4,1}, -{44,-4,2}, -{44,-4,3}, -{44,-4,4}, -{44,-4,5}, -{44,-4,6}, -{44,-4,7}, -{44,-4,8}, -{44,-4,9}, -{44,-4,10}, -{44,-4,11}, -{44,-4,12}, -{44,-4,13}, -{44,-4,14}, -{44,-4,15}, -{44,-4,16}, -{44,-4,17}, -{44,-4,18}, -{44,-4,19}, -{44,-4,20}, -{44,-4,21}, -{44,-4,22}, -{44,-4,23}, -{44,-4,24}, -{44,-4,25}, -{44,-4,26}, -{44,-4,27}, -{44,-4,28}, -{44,-4,29}, -{44,-4,30}, -{44,-4,31}, -{44,-4,32}, -{44,-4,33}, -{44,-4,34}, -{44,-4,35}, -{44,-4,36}, -{44,-4,37}, -{44,-4,38}, -{44,-4,39}, -{44,-4,40}, -{44,-4,41}, -{44,-4,42}, -{44,-4,43}, -{44,-4,44}, -{44,-4,45}, -{44,-4,46}, -{44,-4,47}, -{44,-4,48}, -{44,-4,49}, -{44,-4,50}, -{44,-3,-39}, -{44,-3,-38}, -{44,-3,-37}, -{44,-3,-36}, -{44,-3,-35}, -{44,-3,-34}, -{44,-3,-33}, -{44,-3,-32}, -{44,-3,-31}, -{44,-3,-30}, -{44,-3,-29}, -{44,-3,-28}, -{44,-3,-27}, -{44,-3,-26}, -{44,-3,-25}, -{44,-3,-24}, -{44,-3,-23}, -{44,-3,-22}, -{44,-3,-21}, -{44,-3,-20}, -{44,-3,-19}, -{44,-3,-18}, -{44,-3,-17}, -{44,-3,-16}, -{44,-3,-15}, -{44,-3,-14}, -{44,-3,-13}, -{44,-3,-12}, -{44,-3,-11}, -{44,-3,-10}, -{44,-3,-9}, -{44,-3,-8}, -{44,-3,-7}, -{44,-3,-6}, -{44,-3,-5}, -{44,-3,-4}, -{44,-3,-3}, -{44,-3,-2}, -{44,-3,-1}, -{44,-3,0}, -{44,-3,1}, -{44,-3,2}, -{44,-3,3}, -{44,-3,4}, -{44,-3,5}, -{44,-3,6}, -{44,-3,7}, -{44,-3,8}, -{44,-3,9}, -{44,-3,10}, -{44,-3,11}, -{44,-3,12}, -{44,-3,13}, -{44,-3,14}, -{44,-3,15}, -{44,-3,16}, -{44,-3,17}, -{44,-3,18}, -{44,-3,19}, -{44,-3,20}, -{44,-3,21}, -{44,-3,22}, -{44,-3,23}, -{44,-3,24}, -{44,-3,25}, -{44,-3,26}, -{44,-3,27}, -{44,-3,28}, -{44,-3,29}, -{44,-3,30}, -{44,-3,31}, -{44,-3,32}, -{44,-3,33}, -{44,-3,34}, -{44,-3,35}, -{44,-3,36}, -{44,-3,37}, -{44,-3,38}, -{44,-3,39}, -{44,-3,40}, -{44,-3,41}, -{44,-3,42}, -{44,-3,43}, -{44,-3,44}, -{44,-3,45}, -{44,-3,46}, -{44,-3,47}, -{44,-3,48}, -{44,-3,49}, -{44,-3,50}, -{44,-2,-41}, -{44,-2,-40}, -{44,-2,-39}, -{44,-2,-38}, -{44,-2,-37}, -{44,-2,-36}, -{44,-2,-35}, -{44,-2,-34}, -{44,-2,-33}, -{44,-2,-32}, -{44,-2,-31}, -{44,-2,-30}, -{44,-2,-29}, -{44,-2,-28}, -{44,-2,-27}, -{44,-2,-26}, -{44,-2,-25}, -{44,-2,-24}, -{44,-2,-23}, -{44,-2,-22}, -{44,-2,-21}, -{44,-2,-20}, -{44,-2,-19}, -{44,-2,-18}, -{44,-2,-17}, -{44,-2,-16}, -{44,-2,-15}, -{44,-2,-14}, -{44,-2,-13}, -{44,-2,-12}, -{44,-2,-11}, -{44,-2,-10}, -{44,-2,-9}, -{44,-2,-8}, -{44,-2,-7}, -{44,-2,-6}, -{44,-2,-5}, -{44,-2,-4}, -{44,-2,-3}, -{44,-2,-2}, -{44,-2,-1}, -{44,-2,0}, -{44,-2,1}, -{44,-2,2}, -{44,-2,3}, -{44,-2,4}, -{44,-2,5}, -{44,-2,6}, -{44,-2,7}, -{44,-2,8}, -{44,-2,9}, -{44,-2,10}, -{44,-2,11}, -{44,-2,12}, -{44,-2,13}, -{44,-2,14}, -{44,-2,15}, -{44,-2,16}, -{44,-2,17}, -{44,-2,18}, -{44,-2,19}, -{44,-2,20}, -{44,-2,21}, -{44,-2,22}, -{44,-2,23}, -{44,-2,24}, -{44,-2,25}, -{44,-2,26}, -{44,-2,27}, -{44,-2,28}, -{44,-2,29}, -{44,-2,30}, -{44,-2,31}, -{44,-2,32}, -{44,-2,33}, -{44,-2,34}, -{44,-2,35}, -{44,-2,36}, -{44,-2,37}, -{44,-2,38}, -{44,-2,39}, -{44,-2,40}, -{44,-2,41}, -{44,-2,42}, -{44,-2,43}, -{44,-2,44}, -{44,-2,45}, -{44,-2,46}, -{44,-2,47}, -{44,-2,48}, -{44,-2,49}, -{44,-2,50}, -{44,-1,-42}, -{44,-1,-41}, -{44,-1,-40}, -{44,-1,-39}, -{44,-1,-38}, -{44,-1,-37}, -{44,-1,-36}, -{44,-1,-35}, -{44,-1,-34}, -{44,-1,-33}, -{44,-1,-32}, -{44,-1,-31}, -{44,-1,-30}, -{44,-1,-29}, -{44,-1,-28}, -{44,-1,-27}, -{44,-1,-26}, -{44,-1,-25}, -{44,-1,-24}, -{44,-1,-23}, -{44,-1,-22}, -{44,-1,-21}, -{44,-1,-20}, -{44,-1,-19}, -{44,-1,-18}, -{44,-1,-17}, -{44,-1,-16}, -{44,-1,-15}, -{44,-1,-14}, -{44,-1,-13}, -{44,-1,-12}, -{44,-1,-11}, -{44,-1,-10}, -{44,-1,-9}, -{44,-1,-8}, -{44,-1,-7}, -{44,-1,-6}, -{44,-1,-5}, -{44,-1,-4}, -{44,-1,-3}, -{44,-1,-2}, -{44,-1,-1}, -{44,-1,0}, -{44,-1,1}, -{44,-1,2}, -{44,-1,3}, -{44,-1,4}, -{44,-1,5}, -{44,-1,6}, -{44,-1,7}, -{44,-1,8}, -{44,-1,9}, -{44,-1,10}, -{44,-1,11}, -{44,-1,12}, -{44,-1,13}, -{44,-1,14}, -{44,-1,15}, -{44,-1,16}, -{44,-1,17}, -{44,-1,18}, -{44,-1,19}, -{44,-1,20}, -{44,-1,21}, -{44,-1,22}, -{44,-1,23}, -{44,-1,24}, -{44,-1,25}, -{44,-1,26}, -{44,-1,27}, -{44,-1,28}, -{44,-1,29}, -{44,-1,30}, -{44,-1,31}, -{44,-1,32}, -{44,-1,33}, -{44,-1,34}, -{44,-1,35}, -{44,-1,36}, -{44,-1,37}, -{44,-1,38}, -{44,-1,39}, -{44,-1,40}, -{44,-1,41}, -{44,-1,42}, -{44,-1,43}, -{44,-1,44}, -{44,-1,45}, -{44,-1,46}, -{44,-1,47}, -{44,-1,48}, -{44,-1,49}, -{44,-1,50}, -{44,0,-43}, -{44,0,-42}, -{44,0,-41}, -{44,0,-40}, -{44,0,-39}, -{44,0,-38}, -{44,0,-37}, -{44,0,-36}, -{44,0,-35}, -{44,0,-34}, -{44,0,-33}, -{44,0,-32}, -{44,0,-31}, -{44,0,-30}, -{44,0,-29}, -{44,0,-28}, -{44,0,-27}, -{44,0,-26}, -{44,0,-25}, -{44,0,-24}, -{44,0,-23}, -{44,0,-22}, -{44,0,-21}, -{44,0,-20}, -{44,0,-19}, -{44,0,-18}, -{44,0,-17}, -{44,0,-16}, -{44,0,-15}, -{44,0,-14}, -{44,0,-13}, -{44,0,-12}, -{44,0,-11}, -{44,0,-10}, -{44,0,-9}, -{44,0,-8}, -{44,0,-7}, -{44,0,-6}, -{44,0,-5}, -{44,0,-4}, -{44,0,-3}, -{44,0,-2}, -{44,0,-1}, -{44,0,0}, -{44,0,1}, -{44,0,2}, -{44,0,3}, -{44,0,4}, -{44,0,5}, -{44,0,6}, -{44,0,7}, -{44,0,8}, -{44,0,9}, -{44,0,10}, -{44,0,11}, -{44,0,12}, -{44,0,13}, -{44,0,14}, -{44,0,15}, -{44,0,16}, -{44,0,17}, -{44,0,18}, -{44,0,19}, -{44,0,20}, -{44,0,21}, -{44,0,22}, -{44,0,23}, -{44,0,24}, -{44,0,25}, -{44,0,26}, -{44,0,27}, -{44,0,28}, -{44,0,29}, -{44,0,30}, -{44,0,31}, -{44,0,32}, -{44,0,33}, -{44,0,34}, -{44,0,35}, -{44,0,36}, -{44,0,37}, -{44,0,38}, -{44,0,39}, -{44,0,40}, -{44,0,41}, -{44,0,42}, -{44,0,43}, -{44,0,44}, -{44,0,45}, -{44,0,46}, -{44,0,47}, -{44,0,48}, -{44,0,49}, -{44,0,50}, -{44,0,51}, -{44,1,-44}, -{44,1,-43}, -{44,1,-42}, -{44,1,-41}, -{44,1,-40}, -{44,1,-39}, -{44,1,-38}, -{44,1,-37}, -{44,1,-36}, -{44,1,-35}, -{44,1,-34}, -{44,1,-33}, -{44,1,-32}, -{44,1,-31}, -{44,1,-30}, -{44,1,-29}, -{44,1,-28}, -{44,1,-27}, -{44,1,-26}, -{44,1,-25}, -{44,1,-24}, -{44,1,-23}, -{44,1,-22}, -{44,1,-21}, -{44,1,-20}, -{44,1,-19}, -{44,1,-18}, -{44,1,-17}, -{44,1,-16}, -{44,1,-15}, -{44,1,-14}, -{44,1,-13}, -{44,1,-12}, -{44,1,-11}, -{44,1,-10}, -{44,1,-9}, -{44,1,-8}, -{44,1,-7}, -{44,1,-6}, -{44,1,-5}, -{44,1,-4}, -{44,1,-3}, -{44,1,-2}, -{44,1,-1}, -{44,1,0}, -{44,1,1}, -{44,1,2}, -{44,1,3}, -{44,1,4}, -{44,1,5}, -{44,1,6}, -{44,1,7}, -{44,1,8}, -{44,1,9}, -{44,1,10}, -{44,1,11}, -{44,1,12}, -{44,1,13}, -{44,1,14}, -{44,1,15}, -{44,1,16}, -{44,1,17}, -{44,1,18}, -{44,1,19}, -{44,1,20}, -{44,1,21}, -{44,1,22}, -{44,1,23}, -{44,1,24}, -{44,1,25}, -{44,1,26}, -{44,1,27}, -{44,1,28}, -{44,1,29}, -{44,1,30}, -{44,1,31}, -{44,1,32}, -{44,1,33}, -{44,1,34}, -{44,1,35}, -{44,1,36}, -{44,1,37}, -{44,1,38}, -{44,1,39}, -{44,1,40}, -{44,1,41}, -{44,1,42}, -{44,1,43}, -{44,1,44}, -{44,1,45}, -{44,1,46}, -{44,1,47}, -{44,1,48}, -{44,1,49}, -{44,1,50}, -{44,1,51}, -{44,2,-45}, -{44,2,-44}, -{44,2,-43}, -{44,2,-42}, -{44,2,-41}, -{44,2,-40}, -{44,2,-39}, -{44,2,-38}, -{44,2,-37}, -{44,2,-36}, -{44,2,-35}, -{44,2,-34}, -{44,2,-33}, -{44,2,-32}, -{44,2,-31}, -{44,2,-30}, -{44,2,-29}, -{44,2,-28}, -{44,2,-27}, -{44,2,-26}, -{44,2,-25}, -{44,2,-24}, -{44,2,-23}, -{44,2,-22}, -{44,2,-21}, -{44,2,-20}, -{44,2,-19}, -{44,2,-18}, -{44,2,-17}, -{44,2,-16}, -{44,2,-15}, -{44,2,-14}, -{44,2,-13}, -{44,2,-12}, -{44,2,-11}, -{44,2,-10}, -{44,2,-9}, -{44,2,-8}, -{44,2,-7}, -{44,2,-6}, -{44,2,-5}, -{44,2,-4}, -{44,2,-3}, -{44,2,-2}, -{44,2,-1}, -{44,2,0}, -{44,2,1}, -{44,2,2}, -{44,2,3}, -{44,2,4}, -{44,2,5}, -{44,2,6}, -{44,2,7}, -{44,2,8}, -{44,2,9}, -{44,2,10}, -{44,2,11}, -{44,2,12}, -{44,2,13}, -{44,2,14}, -{44,2,15}, -{44,2,16}, -{44,2,17}, -{44,2,18}, -{44,2,19}, -{44,2,20}, -{44,2,21}, -{44,2,22}, -{44,2,23}, -{44,2,24}, -{44,2,25}, -{44,2,26}, -{44,2,27}, -{44,2,28}, -{44,2,29}, -{44,2,30}, -{44,2,31}, -{44,2,32}, -{44,2,33}, -{44,2,34}, -{44,2,35}, -{44,2,36}, -{44,2,37}, -{44,2,38}, -{44,2,39}, -{44,2,40}, -{44,2,41}, -{44,2,42}, -{44,2,43}, -{44,2,44}, -{44,2,45}, -{44,2,46}, -{44,2,47}, -{44,2,48}, -{44,2,49}, -{44,2,50}, -{44,2,51}, -{44,3,-46}, -{44,3,-45}, -{44,3,-44}, -{44,3,-43}, -{44,3,-42}, -{44,3,-41}, -{44,3,-40}, -{44,3,-39}, -{44,3,-38}, -{44,3,-37}, -{44,3,-36}, -{44,3,-35}, -{44,3,-34}, -{44,3,-33}, -{44,3,-32}, -{44,3,-31}, -{44,3,-30}, -{44,3,-29}, -{44,3,-28}, -{44,3,-27}, -{44,3,-26}, -{44,3,-25}, -{44,3,-24}, -{44,3,-23}, -{44,3,-22}, -{44,3,-21}, -{44,3,-20}, -{44,3,-19}, -{44,3,-18}, -{44,3,-17}, -{44,3,-16}, -{44,3,-15}, -{44,3,-14}, -{44,3,-13}, -{44,3,-12}, -{44,3,-11}, -{44,3,-10}, -{44,3,-9}, -{44,3,-8}, -{44,3,-7}, -{44,3,-6}, -{44,3,-5}, -{44,3,-4}, -{44,3,-3}, -{44,3,-2}, -{44,3,-1}, -{44,3,0}, -{44,3,1}, -{44,3,2}, -{44,3,3}, -{44,3,4}, -{44,3,5}, -{44,3,6}, -{44,3,7}, -{44,3,8}, -{44,3,9}, -{44,3,10}, -{44,3,11}, -{44,3,12}, -{44,3,13}, -{44,3,14}, -{44,3,15}, -{44,3,16}, -{44,3,17}, -{44,3,18}, -{44,3,19}, -{44,3,20}, -{44,3,21}, -{44,3,22}, -{44,3,23}, -{44,3,24}, -{44,3,25}, -{44,3,26}, -{44,3,27}, -{44,3,28}, -{44,3,29}, -{44,3,30}, -{44,3,31}, -{44,3,32}, -{44,3,33}, -{44,3,34}, -{44,3,35}, -{44,3,36}, -{44,3,37}, -{44,3,38}, -{44,3,39}, -{44,3,40}, -{44,3,41}, -{44,3,42}, -{44,3,43}, -{44,3,44}, -{44,3,45}, -{44,3,46}, -{44,3,47}, -{44,3,48}, -{44,3,49}, -{44,3,50}, -{44,3,51}, -{44,4,-47}, -{44,4,-46}, -{44,4,-45}, -{44,4,-44}, -{44,4,-43}, -{44,4,-42}, -{44,4,-41}, -{44,4,-40}, -{44,4,-39}, -{44,4,-38}, -{44,4,-37}, -{44,4,-36}, -{44,4,-35}, -{44,4,-34}, -{44,4,-33}, -{44,4,-32}, -{44,4,-31}, -{44,4,-30}, -{44,4,-29}, -{44,4,-28}, -{44,4,-27}, -{44,4,-26}, -{44,4,-25}, -{44,4,-24}, -{44,4,-23}, -{44,4,-22}, -{44,4,-21}, -{44,4,-20}, -{44,4,-19}, -{44,4,-18}, -{44,4,-17}, -{44,4,-16}, -{44,4,-15}, -{44,4,-14}, -{44,4,-13}, -{44,4,-12}, -{44,4,-11}, -{44,4,-10}, -{44,4,-9}, -{44,4,-8}, -{44,4,-7}, -{44,4,-6}, -{44,4,-5}, -{44,4,-4}, -{44,4,-3}, -{44,4,-2}, -{44,4,-1}, -{44,4,0}, -{44,4,1}, -{44,4,2}, -{44,4,3}, -{44,4,4}, -{44,4,5}, -{44,4,6}, -{44,4,7}, -{44,4,8}, -{44,4,9}, -{44,4,10}, -{44,4,11}, -{44,4,12}, -{44,4,13}, -{44,4,14}, -{44,4,15}, -{44,4,16}, -{44,4,17}, -{44,4,18}, -{44,4,19}, -{44,4,20}, -{44,4,21}, -{44,4,22}, -{44,4,23}, -{44,4,24}, -{44,4,25}, -{44,4,26}, -{44,4,27}, -{44,4,28}, -{44,4,29}, -{44,4,30}, -{44,4,31}, -{44,4,32}, -{44,4,33}, -{44,4,34}, -{44,4,35}, -{44,4,36}, -{44,4,37}, -{44,4,38}, -{44,4,39}, -{44,4,40}, -{44,4,41}, -{44,4,42}, -{44,4,43}, -{44,4,44}, -{44,4,45}, -{44,4,46}, -{44,4,47}, -{44,4,48}, -{44,4,49}, -{44,4,50}, -{44,4,51}, -{44,5,-48}, -{44,5,-47}, -{44,5,-46}, -{44,5,-45}, -{44,5,-44}, -{44,5,-43}, -{44,5,-42}, -{44,5,-41}, -{44,5,-40}, -{44,5,-39}, -{44,5,-38}, -{44,5,-37}, -{44,5,-36}, -{44,5,-35}, -{44,5,-34}, -{44,5,-33}, -{44,5,-32}, -{44,5,-31}, -{44,5,-30}, -{44,5,-29}, -{44,5,-28}, -{44,5,-27}, -{44,5,-26}, -{44,5,-25}, -{44,5,-24}, -{44,5,-23}, -{44,5,-22}, -{44,5,-21}, -{44,5,-20}, -{44,5,-19}, -{44,5,-18}, -{44,5,-17}, -{44,5,-16}, -{44,5,-15}, -{44,5,-14}, -{44,5,-13}, -{44,5,-12}, -{44,5,-11}, -{44,5,-10}, -{44,5,-9}, -{44,5,-8}, -{44,5,-7}, -{44,5,-6}, -{44,5,-5}, -{44,5,-4}, -{44,5,-3}, -{44,5,-2}, -{44,5,-1}, -{44,5,0}, -{44,5,1}, -{44,5,2}, -{44,5,3}, -{44,5,4}, -{44,5,5}, -{44,5,6}, -{44,5,7}, -{44,5,8}, -{44,5,9}, -{44,5,10}, -{44,5,11}, -{44,5,12}, -{44,5,13}, -{44,5,14}, -{44,5,15}, -{44,5,16}, -{44,5,17}, -{44,5,18}, -{44,5,19}, -{44,5,20}, -{44,5,21}, -{44,5,22}, -{44,5,23}, -{44,5,24}, -{44,5,25}, -{44,5,26}, -{44,5,27}, -{44,5,28}, -{44,5,29}, -{44,5,30}, -{44,5,31}, -{44,5,32}, -{44,5,33}, -{44,5,34}, -{44,5,35}, -{44,5,36}, -{44,5,37}, -{44,5,38}, -{44,5,39}, -{44,5,40}, -{44,5,41}, -{44,5,42}, -{44,5,43}, -{44,5,44}, -{44,5,45}, -{44,5,46}, -{44,5,47}, -{44,5,48}, -{44,5,49}, -{44,5,50}, -{44,5,51}, -{44,6,-49}, -{44,6,-48}, -{44,6,-47}, -{44,6,-46}, -{44,6,-45}, -{44,6,-44}, -{44,6,-43}, -{44,6,-42}, -{44,6,-41}, -{44,6,-40}, -{44,6,-39}, -{44,6,-38}, -{44,6,-37}, -{44,6,-36}, -{44,6,-35}, -{44,6,-34}, -{44,6,-33}, -{44,6,-32}, -{44,6,-31}, -{44,6,-30}, -{44,6,-29}, -{44,6,-28}, -{44,6,-27}, -{44,6,-26}, -{44,6,-25}, -{44,6,-24}, -{44,6,-23}, -{44,6,-22}, -{44,6,-21}, -{44,6,-20}, -{44,6,-19}, -{44,6,-18}, -{44,6,-17}, -{44,6,-16}, -{44,6,-15}, -{44,6,-14}, -{44,6,-13}, -{44,6,-12}, -{44,6,-11}, -{44,6,-10}, -{44,6,-9}, -{44,6,-8}, -{44,6,-7}, -{44,6,-6}, -{44,6,-5}, -{44,6,-4}, -{44,6,-3}, -{44,6,-2}, -{44,6,-1}, -{44,6,0}, -{44,6,1}, -{44,6,2}, -{44,6,3}, -{44,6,4}, -{44,6,5}, -{44,6,6}, -{44,6,7}, -{44,6,8}, -{44,6,9}, -{44,6,10}, -{44,6,11}, -{44,6,12}, -{44,6,13}, -{44,6,14}, -{44,6,15}, -{44,6,16}, -{44,6,17}, -{44,6,18}, -{44,6,19}, -{44,6,20}, -{44,6,21}, -{44,6,22}, -{44,6,23}, -{44,6,24}, -{44,6,25}, -{44,6,26}, -{44,6,27}, -{44,6,28}, -{44,6,29}, -{44,6,30}, -{44,6,31}, -{44,6,32}, -{44,6,33}, -{44,6,34}, -{44,6,35}, -{44,6,36}, -{44,6,37}, -{44,6,38}, -{44,6,39}, -{44,6,40}, -{44,6,41}, -{44,6,42}, -{44,6,43}, -{44,6,44}, -{44,6,45}, -{44,6,46}, -{44,6,47}, -{44,6,48}, -{44,6,49}, -{44,6,50}, -{44,6,51}, -{44,7,-51}, -{44,7,-50}, -{44,7,-49}, -{44,7,-48}, -{44,7,-47}, -{44,7,-46}, -{44,7,-45}, -{44,7,-44}, -{44,7,-43}, -{44,7,-42}, -{44,7,-41}, -{44,7,-40}, -{44,7,-39}, -{44,7,-38}, -{44,7,-37}, -{44,7,-36}, -{44,7,-35}, -{44,7,-34}, -{44,7,-33}, -{44,7,-32}, -{44,7,-31}, -{44,7,-30}, -{44,7,-29}, -{44,7,-28}, -{44,7,-27}, -{44,7,-26}, -{44,7,-25}, -{44,7,-24}, -{44,7,-23}, -{44,7,-22}, -{44,7,-21}, -{44,7,-20}, -{44,7,-19}, -{44,7,-18}, -{44,7,-17}, -{44,7,-16}, -{44,7,-15}, -{44,7,-14}, -{44,7,-13}, -{44,7,-12}, -{44,7,-11}, -{44,7,-10}, -{44,7,-9}, -{44,7,-8}, -{44,7,-7}, -{44,7,-6}, -{44,7,-5}, -{44,7,-4}, -{44,7,-3}, -{44,7,-2}, -{44,7,-1}, -{44,7,0}, -{44,7,1}, -{44,7,2}, -{44,7,3}, -{44,7,4}, -{44,7,5}, -{44,7,6}, -{44,7,7}, -{44,7,8}, -{44,7,9}, -{44,7,10}, -{44,7,11}, -{44,7,12}, -{44,7,13}, -{44,7,14}, -{44,7,15}, -{44,7,16}, -{44,7,17}, -{44,7,18}, -{44,7,19}, -{44,7,20}, -{44,7,21}, -{44,7,22}, -{44,7,23}, -{44,7,24}, -{44,7,25}, -{44,7,26}, -{44,7,27}, -{44,7,28}, -{44,7,29}, -{44,7,30}, -{44,7,31}, -{44,7,32}, -{44,7,33}, -{44,7,34}, -{44,7,35}, -{44,7,36}, -{44,7,37}, -{44,7,38}, -{44,7,39}, -{44,7,40}, -{44,7,41}, -{44,7,42}, -{44,7,43}, -{44,7,44}, -{44,7,45}, -{44,7,46}, -{44,7,47}, -{44,7,48}, -{44,7,49}, -{44,7,50}, -{44,7,51}, -{44,8,-52}, -{44,8,-51}, -{44,8,-50}, -{44,8,-49}, -{44,8,-48}, -{44,8,-47}, -{44,8,-46}, -{44,8,-45}, -{44,8,-44}, -{44,8,-43}, -{44,8,-42}, -{44,8,-41}, -{44,8,-40}, -{44,8,-39}, -{44,8,-38}, -{44,8,-37}, -{44,8,-36}, -{44,8,-35}, -{44,8,-34}, -{44,8,-33}, -{44,8,-32}, -{44,8,-31}, -{44,8,-30}, -{44,8,-29}, -{44,8,-28}, -{44,8,-27}, -{44,8,-26}, -{44,8,-25}, -{44,8,-24}, -{44,8,-23}, -{44,8,-22}, -{44,8,-21}, -{44,8,-20}, -{44,8,-19}, -{44,8,-18}, -{44,8,-17}, -{44,8,-16}, -{44,8,-15}, -{44,8,-14}, -{44,8,-13}, -{44,8,-12}, -{44,8,-11}, -{44,8,-10}, -{44,8,-9}, -{44,8,-8}, -{44,8,-7}, -{44,8,-6}, -{44,8,-5}, -{44,8,-4}, -{44,8,-3}, -{44,8,-2}, -{44,8,-1}, -{44,8,0}, -{44,8,1}, -{44,8,2}, -{44,8,3}, -{44,8,4}, -{44,8,5}, -{44,8,6}, -{44,8,7}, -{44,8,8}, -{44,8,9}, -{44,8,10}, -{44,8,11}, -{44,8,12}, -{44,8,13}, -{44,8,14}, -{44,8,15}, -{44,8,16}, -{44,8,17}, -{44,8,18}, -{44,8,19}, -{44,8,20}, -{44,8,21}, -{44,8,22}, -{44,8,23}, -{44,8,24}, -{44,8,25}, -{44,8,26}, -{44,8,27}, -{44,8,28}, -{44,8,29}, -{44,8,30}, -{44,8,31}, -{44,8,32}, -{44,8,33}, -{44,8,34}, -{44,8,35}, -{44,8,36}, -{44,8,37}, -{44,8,38}, -{44,8,39}, -{44,8,40}, -{44,8,41}, -{44,8,42}, -{44,8,43}, -{44,8,44}, -{44,8,45}, -{44,8,46}, -{44,8,47}, -{44,8,48}, -{44,8,49}, -{44,8,50}, -{44,8,51}, -{44,9,-53}, -{44,9,-52}, -{44,9,-51}, -{44,9,-50}, -{44,9,-49}, -{44,9,-48}, -{44,9,-47}, -{44,9,-46}, -{44,9,-45}, -{44,9,-44}, -{44,9,-43}, -{44,9,-42}, -{44,9,-41}, -{44,9,-40}, -{44,9,-39}, -{44,9,-38}, -{44,9,-37}, -{44,9,-36}, -{44,9,-35}, -{44,9,-34}, -{44,9,-33}, -{44,9,-32}, -{44,9,-31}, -{44,9,-30}, -{44,9,-29}, -{44,9,-28}, -{44,9,-27}, -{44,9,-26}, -{44,9,-25}, -{44,9,-24}, -{44,9,-23}, -{44,9,-22}, -{44,9,-21}, -{44,9,-20}, -{44,9,-19}, -{44,9,-18}, -{44,9,-17}, -{44,9,-16}, -{44,9,-15}, -{44,9,-14}, -{44,9,-13}, -{44,9,-12}, -{44,9,-11}, -{44,9,-10}, -{44,9,-9}, -{44,9,-8}, -{44,9,-7}, -{44,9,-6}, -{44,9,-5}, -{44,9,-4}, -{44,9,-3}, -{44,9,-2}, -{44,9,-1}, -{44,9,0}, -{44,9,1}, -{44,9,2}, -{44,9,3}, -{44,9,4}, -{44,9,5}, -{44,9,6}, -{44,9,7}, -{44,9,8}, -{44,9,9}, -{44,9,10}, -{44,9,11}, -{44,9,12}, -{44,9,13}, -{44,9,14}, -{44,9,15}, -{44,9,16}, -{44,9,17}, -{44,9,18}, -{44,9,19}, -{44,9,20}, -{44,9,21}, -{44,9,22}, -{44,9,23}, -{44,9,24}, -{44,9,25}, -{44,9,26}, -{44,9,27}, -{44,9,28}, -{44,9,29}, -{44,9,30}, -{44,9,31}, -{44,9,32}, -{44,9,33}, -{44,9,34}, -{44,9,35}, -{44,9,36}, -{44,9,37}, -{44,9,38}, -{44,9,39}, -{44,9,40}, -{44,9,41}, -{44,9,42}, -{44,9,43}, -{44,9,44}, -{44,9,45}, -{44,9,46}, -{44,9,47}, -{44,9,48}, -{44,9,49}, -{44,9,50}, -{44,9,51}, -{44,10,-54}, -{44,10,-53}, -{44,10,-52}, -{44,10,-51}, -{44,10,-50}, -{44,10,-49}, -{44,10,-48}, -{44,10,-47}, -{44,10,-46}, -{44,10,-45}, -{44,10,-44}, -{44,10,-43}, -{44,10,-42}, -{44,10,-41}, -{44,10,-40}, -{44,10,-39}, -{44,10,-38}, -{44,10,-37}, -{44,10,-36}, -{44,10,-35}, -{44,10,-34}, -{44,10,-33}, -{44,10,-32}, -{44,10,-31}, -{44,10,-30}, -{44,10,-29}, -{44,10,-28}, -{44,10,-27}, -{44,10,-26}, -{44,10,-25}, -{44,10,-24}, -{44,10,-23}, -{44,10,-22}, -{44,10,-21}, -{44,10,-20}, -{44,10,-19}, -{44,10,-18}, -{44,10,-17}, -{44,10,-16}, -{44,10,-15}, -{44,10,-14}, -{44,10,-13}, -{44,10,-12}, -{44,10,-11}, -{44,10,-10}, -{44,10,-9}, -{44,10,-8}, -{44,10,-7}, -{44,10,-6}, -{44,10,-5}, -{44,10,-4}, -{44,10,-3}, -{44,10,-2}, -{44,10,-1}, -{44,10,0}, -{44,10,1}, -{44,10,2}, -{44,10,3}, -{44,10,4}, -{44,10,5}, -{44,10,6}, -{44,10,7}, -{44,10,8}, -{44,10,9}, -{44,10,10}, -{44,10,11}, -{44,10,12}, -{44,10,13}, -{44,10,14}, -{44,10,15}, -{44,10,16}, -{44,10,17}, -{44,10,18}, -{44,10,19}, -{44,10,20}, -{44,10,21}, -{44,10,22}, -{44,10,23}, -{44,10,24}, -{44,10,25}, -{44,10,26}, -{44,10,27}, -{44,10,28}, -{44,10,29}, -{44,10,30}, -{44,10,31}, -{44,10,32}, -{44,10,33}, -{44,10,34}, -{44,10,35}, -{44,10,36}, -{44,10,37}, -{44,10,38}, -{44,10,39}, -{44,10,40}, -{44,10,41}, -{44,10,42}, -{44,10,43}, -{44,10,44}, -{44,10,45}, -{44,10,46}, -{44,10,47}, -{44,10,48}, -{44,10,49}, -{44,10,50}, -{44,10,51}, -{44,11,-55}, -{44,11,-54}, -{44,11,-53}, -{44,11,-52}, -{44,11,-51}, -{44,11,-50}, -{44,11,-49}, -{44,11,-48}, -{44,11,-47}, -{44,11,-46}, -{44,11,-45}, -{44,11,-44}, -{44,11,-43}, -{44,11,-42}, -{44,11,-41}, -{44,11,-40}, -{44,11,-39}, -{44,11,-38}, -{44,11,-37}, -{44,11,-36}, -{44,11,-35}, -{44,11,-34}, -{44,11,-33}, -{44,11,-32}, -{44,11,-31}, -{44,11,-30}, -{44,11,-29}, -{44,11,-28}, -{44,11,-27}, -{44,11,-26}, -{44,11,-25}, -{44,11,-24}, -{44,11,-23}, -{44,11,-22}, -{44,11,-21}, -{44,11,-20}, -{44,11,-19}, -{44,11,-18}, -{44,11,-17}, -{44,11,-16}, -{44,11,-15}, -{44,11,-14}, -{44,11,-13}, -{44,11,-12}, -{44,11,-11}, -{44,11,-10}, -{44,11,-9}, -{44,11,-8}, -{44,11,-7}, -{44,11,-6}, -{44,11,-5}, -{44,11,-4}, -{44,11,-3}, -{44,11,-2}, -{44,11,-1}, -{44,11,0}, -{44,11,1}, -{44,11,2}, -{44,11,3}, -{44,11,4}, -{44,11,5}, -{44,11,6}, -{44,11,7}, -{44,11,8}, -{44,11,9}, -{44,11,10}, -{44,11,11}, -{44,11,12}, -{44,11,13}, -{44,11,14}, -{44,11,15}, -{44,11,16}, -{44,11,17}, -{44,11,18}, -{44,11,19}, -{44,11,20}, -{44,11,21}, -{44,11,22}, -{44,11,23}, -{44,11,24}, -{44,11,25}, -{44,11,26}, -{44,11,27}, -{44,11,28}, -{44,11,29}, -{44,11,30}, -{44,11,31}, -{44,11,32}, -{44,11,33}, -{44,11,34}, -{44,11,35}, -{44,11,36}, -{44,11,37}, -{44,11,38}, -{44,11,39}, -{44,11,40}, -{44,11,41}, -{44,11,42}, -{44,11,43}, -{44,11,44}, -{44,11,45}, -{44,11,46}, -{44,11,47}, -{44,11,48}, -{44,11,49}, -{44,11,50}, -{44,11,51}, -{44,12,-56}, -{44,12,-55}, -{44,12,-54}, -{44,12,-53}, -{44,12,-52}, -{44,12,-51}, -{44,12,-50}, -{44,12,-49}, -{44,12,-48}, -{44,12,-47}, -{44,12,-46}, -{44,12,-45}, -{44,12,-44}, -{44,12,-43}, -{44,12,-42}, -{44,12,-41}, -{44,12,-40}, -{44,12,-39}, -{44,12,-38}, -{44,12,-37}, -{44,12,-36}, -{44,12,-35}, -{44,12,-34}, -{44,12,-33}, -{44,12,-32}, -{44,12,-31}, -{44,12,-30}, -{44,12,-29}, -{44,12,-28}, -{44,12,-27}, -{44,12,-26}, -{44,12,-25}, -{44,12,-24}, -{44,12,-23}, -{44,12,-22}, -{44,12,-21}, -{44,12,-20}, -{44,12,-19}, -{44,12,-18}, -{44,12,-17}, -{44,12,-16}, -{44,12,-15}, -{44,12,-14}, -{44,12,-13}, -{44,12,-12}, -{44,12,-11}, -{44,12,-10}, -{44,12,-9}, -{44,12,-8}, -{44,12,-7}, -{44,12,-6}, -{44,12,-5}, -{44,12,-4}, -{44,12,-3}, -{44,12,-2}, -{44,12,-1}, -{44,12,0}, -{44,12,1}, -{44,12,2}, -{44,12,3}, -{44,12,4}, -{44,12,5}, -{44,12,6}, -{44,12,7}, -{44,12,8}, -{44,12,9}, -{44,12,10}, -{44,12,11}, -{44,12,12}, -{44,12,13}, -{44,12,14}, -{44,12,15}, -{44,12,16}, -{44,12,17}, -{44,12,18}, -{44,12,19}, -{44,12,20}, -{44,12,21}, -{44,12,22}, -{44,12,23}, -{44,12,24}, -{44,12,25}, -{44,12,26}, -{44,12,27}, -{44,12,28}, -{44,12,29}, -{44,12,30}, -{44,12,31}, -{44,12,32}, -{44,12,33}, -{44,12,34}, -{44,12,35}, -{44,12,36}, -{44,12,37}, -{44,12,38}, -{44,12,39}, -{44,12,40}, -{44,12,41}, -{44,12,42}, -{44,12,43}, -{44,12,44}, -{44,12,45}, -{44,12,46}, -{44,12,47}, -{44,12,48}, -{44,12,49}, -{44,12,50}, -{44,12,51}, -{44,13,-57}, -{44,13,-56}, -{44,13,-55}, -{44,13,-54}, -{44,13,-53}, -{44,13,-52}, -{44,13,-51}, -{44,13,-50}, -{44,13,-49}, -{44,13,-48}, -{44,13,-47}, -{44,13,-46}, -{44,13,-45}, -{44,13,-44}, -{44,13,-43}, -{44,13,-42}, -{44,13,-41}, -{44,13,-40}, -{44,13,-39}, -{44,13,-38}, -{44,13,-37}, -{44,13,-36}, -{44,13,-35}, -{44,13,-34}, -{44,13,-33}, -{44,13,-32}, -{44,13,-31}, -{44,13,-30}, -{44,13,-29}, -{44,13,-28}, -{44,13,-27}, -{44,13,-26}, -{44,13,-25}, -{44,13,-24}, -{44,13,-23}, -{44,13,-22}, -{44,13,-21}, -{44,13,-20}, -{44,13,-19}, -{44,13,-18}, -{44,13,-17}, -{44,13,-16}, -{44,13,-15}, -{44,13,-14}, -{44,13,-13}, -{44,13,-12}, -{44,13,-11}, -{44,13,-10}, -{44,13,-9}, -{44,13,-8}, -{44,13,-7}, -{44,13,-6}, -{44,13,-5}, -{44,13,-4}, -{44,13,-3}, -{44,13,-2}, -{44,13,-1}, -{44,13,0}, -{44,13,1}, -{44,13,2}, -{44,13,3}, -{44,13,4}, -{44,13,5}, -{44,13,6}, -{44,13,7}, -{44,13,8}, -{44,13,9}, -{44,13,10}, -{44,13,11}, -{44,13,12}, -{44,13,13}, -{44,13,14}, -{44,13,15}, -{44,13,16}, -{44,13,17}, -{44,13,18}, -{44,13,19}, -{44,13,20}, -{44,13,21}, -{44,13,22}, -{44,13,23}, -{44,13,24}, -{44,13,25}, -{44,13,26}, -{44,13,27}, -{44,13,28}, -{44,13,29}, -{44,13,30}, -{44,13,31}, -{44,13,32}, -{44,13,33}, -{44,13,34}, -{44,13,35}, -{44,13,36}, -{44,13,37}, -{44,13,38}, -{44,13,39}, -{44,13,40}, -{44,13,41}, -{44,13,42}, -{44,13,43}, -{44,13,44}, -{44,13,45}, -{44,13,46}, -{44,13,47}, -{44,13,48}, -{44,13,49}, -{44,13,50}, -{44,13,51}, -{44,13,52}, -{44,14,-58}, -{44,14,-57}, -{44,14,-56}, -{44,14,-55}, -{44,14,-54}, -{44,14,-53}, -{44,14,-52}, -{44,14,-51}, -{44,14,-50}, -{44,14,-49}, -{44,14,-48}, -{44,14,-47}, -{44,14,-46}, -{44,14,-45}, -{44,14,-44}, -{44,14,-43}, -{44,14,-42}, -{44,14,-41}, -{44,14,-40}, -{44,14,-39}, -{44,14,-38}, -{44,14,-37}, -{44,14,-36}, -{44,14,-35}, -{44,14,-34}, -{44,14,-33}, -{44,14,-32}, -{44,14,-31}, -{44,14,-30}, -{44,14,-29}, -{44,14,-28}, -{44,14,-27}, -{44,14,-26}, -{44,14,-25}, -{44,14,-24}, -{44,14,-23}, -{44,14,-22}, -{44,14,-21}, -{44,14,-20}, -{44,14,-19}, -{44,14,-18}, -{44,14,-17}, -{44,14,-16}, -{44,14,-15}, -{44,14,-14}, -{44,14,-13}, -{44,14,-12}, -{44,14,-11}, -{44,14,-10}, -{44,14,-9}, -{44,14,-8}, -{44,14,-7}, -{44,14,-6}, -{44,14,-5}, -{44,14,-4}, -{44,14,-3}, -{44,14,-2}, -{44,14,-1}, -{44,14,0}, -{44,14,1}, -{44,14,2}, -{44,14,3}, -{44,14,4}, -{44,14,5}, -{44,14,6}, -{44,14,7}, -{44,14,8}, -{44,14,9}, -{44,14,10}, -{44,14,11}, -{44,14,12}, -{44,14,13}, -{44,14,14}, -{44,14,15}, -{44,14,16}, -{44,14,17}, -{44,14,18}, -{44,14,19}, -{44,14,20}, -{44,14,21}, -{44,14,22}, -{44,14,23}, -{44,14,24}, -{44,14,25}, -{44,14,26}, -{44,14,27}, -{44,14,28}, -{44,14,29}, -{44,14,30}, -{44,14,31}, -{44,14,32}, -{44,14,33}, -{44,14,34}, -{44,14,35}, -{44,14,36}, -{44,14,37}, -{44,14,38}, -{44,14,39}, -{44,14,40}, -{44,14,41}, -{44,14,42}, -{44,14,43}, -{44,14,44}, -{44,14,45}, -{44,14,46}, -{44,14,47}, -{44,14,48}, -{44,14,49}, -{44,14,50}, -{44,14,51}, -{44,14,52}, -{44,15,-59}, -{44,15,-58}, -{44,15,-57}, -{44,15,-56}, -{44,15,-55}, -{44,15,-54}, -{44,15,-53}, -{44,15,-52}, -{44,15,-51}, -{44,15,-50}, -{44,15,-49}, -{44,15,-48}, -{44,15,-47}, -{44,15,-46}, -{44,15,-45}, -{44,15,-44}, -{44,15,-43}, -{44,15,-42}, -{44,15,-41}, -{44,15,-40}, -{44,15,-39}, -{44,15,-38}, -{44,15,-37}, -{44,15,-36}, -{44,15,-35}, -{44,15,-34}, -{44,15,-33}, -{44,15,-32}, -{44,15,-31}, -{44,15,-30}, -{44,15,-29}, -{44,15,-28}, -{44,15,-27}, -{44,15,-26}, -{44,15,-25}, -{44,15,-24}, -{44,15,-23}, -{44,15,-22}, -{44,15,-21}, -{44,15,-20}, -{44,15,-19}, -{44,15,-18}, -{44,15,-17}, -{44,15,-16}, -{44,15,-15}, -{44,15,-14}, -{44,15,-13}, -{44,15,-12}, -{44,15,-11}, -{44,15,-10}, -{44,15,-9}, -{44,15,-8}, -{44,15,-7}, -{44,15,-6}, -{44,15,-5}, -{44,15,-4}, -{44,15,-3}, -{44,15,-2}, -{44,15,-1}, -{44,15,0}, -{44,15,1}, -{44,15,2}, -{44,15,3}, -{44,15,4}, -{44,15,5}, -{44,15,6}, -{44,15,7}, -{44,15,8}, -{44,15,9}, -{44,15,10}, -{44,15,11}, -{44,15,12}, -{44,15,13}, -{44,15,14}, -{44,15,15}, -{44,15,16}, -{44,15,17}, -{44,15,18}, -{44,15,19}, -{44,15,20}, -{44,15,21}, -{44,15,22}, -{44,15,23}, -{44,15,24}, -{44,15,25}, -{44,15,26}, -{44,15,27}, -{44,15,28}, -{44,15,29}, -{44,15,30}, -{44,15,31}, -{44,15,32}, -{44,15,33}, -{44,15,34}, -{44,15,35}, -{44,15,36}, -{44,15,37}, -{44,15,38}, -{44,15,39}, -{44,15,40}, -{44,15,41}, -{44,15,42}, -{44,15,43}, -{44,15,44}, -{44,15,45}, -{44,15,46}, -{44,15,47}, -{44,15,48}, -{44,15,49}, -{44,15,50}, -{44,15,51}, -{44,15,52}, -{44,16,-60}, -{44,16,-59}, -{44,16,-58}, -{44,16,-57}, -{44,16,-56}, -{44,16,-55}, -{44,16,-54}, -{44,16,-53}, -{44,16,-52}, -{44,16,-51}, -{44,16,-50}, -{44,16,-49}, -{44,16,-48}, -{44,16,-47}, -{44,16,-46}, -{44,16,-45}, -{44,16,-44}, -{44,16,-43}, -{44,16,-42}, -{44,16,-41}, -{44,16,-40}, -{44,16,-39}, -{44,16,-38}, -{44,16,-37}, -{44,16,-36}, -{44,16,-35}, -{44,16,-34}, -{44,16,-33}, -{44,16,-32}, -{44,16,-31}, -{44,16,-30}, -{44,16,-29}, -{44,16,-28}, -{44,16,-27}, -{44,16,-26}, -{44,16,-25}, -{44,16,-24}, -{44,16,-23}, -{44,16,-22}, -{44,16,-21}, -{44,16,-20}, -{44,16,-19}, -{44,16,-18}, -{44,16,-17}, -{44,16,-16}, -{44,16,-15}, -{44,16,-14}, -{44,16,-13}, -{44,16,-12}, -{44,16,-11}, -{44,16,-10}, -{44,16,-9}, -{44,16,-8}, -{44,16,-7}, -{44,16,-6}, -{44,16,-5}, -{44,16,-4}, -{44,16,-3}, -{44,16,-2}, -{44,16,-1}, -{44,16,0}, -{44,16,1}, -{44,16,2}, -{44,16,3}, -{44,16,4}, -{44,16,5}, -{44,16,6}, -{44,16,7}, -{44,16,8}, -{44,16,9}, -{44,16,10}, -{44,16,11}, -{44,16,12}, -{44,16,13}, -{44,16,14}, -{44,16,15}, -{44,16,16}, -{44,16,17}, -{44,16,18}, -{44,16,19}, -{44,16,20}, -{44,16,21}, -{44,16,22}, -{44,16,23}, -{44,16,24}, -{44,16,25}, -{44,16,26}, -{44,16,27}, -{44,16,28}, -{44,16,29}, -{44,16,30}, -{44,16,31}, -{44,16,32}, -{44,16,33}, -{44,16,34}, -{44,16,35}, -{44,16,36}, -{44,16,37}, -{44,16,38}, -{44,16,39}, -{44,16,40}, -{44,16,41}, -{44,16,42}, -{44,16,43}, -{44,16,44}, -{44,16,45}, -{44,16,46}, -{44,16,47}, -{44,16,48}, -{44,16,49}, -{44,16,50}, -{44,16,51}, -{44,16,52}, -{44,17,-61}, -{44,17,-60}, -{44,17,-59}, -{44,17,-58}, -{44,17,-57}, -{44,17,-56}, -{44,17,-55}, -{44,17,-54}, -{44,17,-53}, -{44,17,-52}, -{44,17,-51}, -{44,17,-50}, -{44,17,-49}, -{44,17,-48}, -{44,17,-47}, -{44,17,-46}, -{44,17,-45}, -{44,17,-44}, -{44,17,-43}, -{44,17,-42}, -{44,17,-41}, -{44,17,-40}, -{44,17,-39}, -{44,17,-38}, -{44,17,-37}, -{44,17,-36}, -{44,17,-35}, -{44,17,-34}, -{44,17,-33}, -{44,17,-32}, -{44,17,-31}, -{44,17,-30}, -{44,17,-29}, -{44,17,-28}, -{44,17,-27}, -{44,17,-26}, -{44,17,-25}, -{44,17,-24}, -{44,17,-23}, -{44,17,-22}, -{44,17,-21}, -{44,17,-20}, -{44,17,-19}, -{44,17,-18}, -{44,17,-17}, -{44,17,-16}, -{44,17,-15}, -{44,17,-14}, -{44,17,-13}, -{44,17,-12}, -{44,17,-11}, -{44,17,-10}, -{44,17,-9}, -{44,17,-8}, -{44,17,-7}, -{44,17,-6}, -{44,17,-5}, -{44,17,-4}, -{44,17,-3}, -{44,17,-2}, -{44,17,-1}, -{44,17,0}, -{44,17,1}, -{44,17,2}, -{44,17,3}, -{44,17,4}, -{44,17,5}, -{44,17,6}, -{44,17,7}, -{44,17,8}, -{44,17,9}, -{44,17,10}, -{44,17,11}, -{44,17,12}, -{44,17,13}, -{44,17,14}, -{44,17,15}, -{44,17,16}, -{44,17,17}, -{44,17,18}, -{44,17,19}, -{44,17,20}, -{44,17,21}, -{44,17,22}, -{44,17,23}, -{44,17,24}, -{44,17,25}, -{44,17,26}, -{44,17,27}, -{44,17,28}, -{44,17,29}, -{44,17,30}, -{44,17,31}, -{44,17,32}, -{44,17,33}, -{44,17,34}, -{44,17,35}, -{44,17,36}, -{44,17,37}, -{44,17,38}, -{44,17,39}, -{44,17,40}, -{44,17,41}, -{44,17,42}, -{44,17,43}, -{44,17,44}, -{44,17,45}, -{44,17,46}, -{44,17,47}, -{44,17,48}, -{44,17,49}, -{44,17,50}, -{44,17,51}, -{44,17,52}, -{44,18,-62}, -{44,18,-61}, -{44,18,-60}, -{44,18,-59}, -{44,18,-58}, -{44,18,-57}, -{44,18,-56}, -{44,18,-55}, -{44,18,-54}, -{44,18,-53}, -{44,18,-52}, -{44,18,-51}, -{44,18,-50}, -{44,18,-49}, -{44,18,-48}, -{44,18,-47}, -{44,18,-46}, -{44,18,-45}, -{44,18,-44}, -{44,18,-43}, -{44,18,-42}, -{44,18,-41}, -{44,18,-40}, -{44,18,-39}, -{44,18,-38}, -{44,18,-37}, -{44,18,-36}, -{44,18,-35}, -{44,18,-34}, -{44,18,-33}, -{44,18,-32}, -{44,18,-31}, -{44,18,-30}, -{44,18,-29}, -{44,18,-28}, -{44,18,-27}, -{44,18,-26}, -{44,18,-25}, -{44,18,-24}, -{44,18,-23}, -{44,18,-22}, -{44,18,-21}, -{44,18,-20}, -{44,18,-19}, -{44,18,-18}, -{44,18,-17}, -{44,18,-16}, -{44,18,-15}, -{44,18,-14}, -{44,18,-13}, -{44,18,-12}, -{44,18,-11}, -{44,18,-10}, -{44,18,-9}, -{44,18,-8}, -{44,18,-7}, -{44,18,-6}, -{44,18,-5}, -{44,18,-4}, -{44,18,-3}, -{44,18,-2}, -{44,18,-1}, -{44,18,0}, -{44,18,1}, -{44,18,2}, -{44,18,3}, -{44,18,4}, -{44,18,5}, -{44,18,6}, -{44,18,7}, -{44,18,8}, -{44,18,9}, -{44,18,10}, -{44,18,11}, -{44,18,12}, -{44,18,13}, -{44,18,14}, -{44,18,15}, -{44,18,16}, -{44,18,17}, -{44,18,18}, -{44,18,19}, -{44,18,20}, -{44,18,21}, -{44,18,22}, -{44,18,23}, -{44,18,24}, -{44,18,25}, -{44,18,26}, -{44,18,27}, -{44,18,28}, -{44,18,29}, -{44,18,30}, -{44,18,31}, -{44,18,32}, -{44,18,33}, -{44,18,34}, -{44,18,35}, -{44,18,36}, -{44,18,37}, -{44,18,38}, -{44,18,39}, -{44,18,40}, -{44,18,41}, -{44,18,42}, -{44,18,43}, -{44,18,44}, -{44,18,45}, -{44,18,46}, -{44,18,47}, -{44,18,48}, -{44,18,49}, -{44,18,50}, -{44,18,51}, -{44,18,52}, -{44,19,-63}, -{44,19,-62}, -{44,19,-61}, -{44,19,-60}, -{44,19,-59}, -{44,19,-58}, -{44,19,-57}, -{44,19,-56}, -{44,19,-55}, -{44,19,-54}, -{44,19,-53}, -{44,19,-52}, -{44,19,-51}, -{44,19,-50}, -{44,19,-49}, -{44,19,-48}, -{44,19,-47}, -{44,19,-46}, -{44,19,-45}, -{44,19,-44}, -{44,19,-43}, -{44,19,-42}, -{44,19,-41}, -{44,19,-40}, -{44,19,-39}, -{44,19,-38}, -{44,19,-37}, -{44,19,-36}, -{44,19,-35}, -{44,19,-34}, -{44,19,-33}, -{44,19,-32}, -{44,19,-31}, -{44,19,-30}, -{44,19,-29}, -{44,19,-28}, -{44,19,-27}, -{44,19,-26}, -{44,19,-25}, -{44,19,-24}, -{44,19,-23}, -{44,19,-22}, -{44,19,-21}, -{44,19,-20}, -{44,19,-19}, -{44,19,-18}, -{44,19,-17}, -{44,19,-16}, -{44,19,-15}, -{44,19,-14}, -{44,19,-13}, -{44,19,-12}, -{44,19,-11}, -{44,19,-10}, -{44,19,-9}, -{44,19,-8}, -{44,19,-7}, -{44,19,-6}, -{44,19,-5}, -{44,19,-4}, -{44,19,-3}, -{44,19,-2}, -{44,19,-1}, -{44,19,0}, -{44,19,1}, -{44,19,2}, -{44,19,3}, -{44,19,4}, -{44,19,5}, -{44,19,6}, -{44,19,7}, -{44,19,8}, -{44,19,9}, -{44,19,10}, -{44,19,11}, -{44,19,12}, -{44,19,13}, -{44,19,14}, -{44,19,15}, -{44,19,16}, -{44,19,17}, -{44,19,18}, -{44,19,19}, -{44,19,20}, -{44,19,21}, -{44,19,22}, -{44,19,23}, -{44,19,24}, -{44,19,25}, -{44,19,26}, -{44,19,27}, -{44,19,28}, -{44,19,29}, -{44,19,30}, -{44,19,31}, -{44,19,32}, -{44,19,33}, -{44,19,34}, -{44,19,35}, -{44,19,36}, -{44,19,37}, -{44,19,38}, -{44,19,39}, -{44,19,40}, -{44,19,41}, -{44,19,42}, -{44,19,43}, -{44,19,44}, -{44,19,45}, -{44,19,46}, -{44,19,47}, -{44,19,48}, -{44,19,49}, -{44,19,50}, -{44,19,51}, -{44,19,52}, -{44,20,-64}, -{44,20,-63}, -{44,20,-62}, -{44,20,-61}, -{44,20,-60}, -{44,20,-59}, -{44,20,-58}, -{44,20,-57}, -{44,20,-56}, -{44,20,-55}, -{44,20,-54}, -{44,20,-53}, -{44,20,-52}, -{44,20,-51}, -{44,20,-50}, -{44,20,-49}, -{44,20,-48}, -{44,20,-47}, -{44,20,-46}, -{44,20,-45}, -{44,20,-44}, -{44,20,-43}, -{44,20,-42}, -{44,20,-41}, -{44,20,-40}, -{44,20,-39}, -{44,20,-38}, -{44,20,-37}, -{44,20,-36}, -{44,20,-35}, -{44,20,-34}, -{44,20,-33}, -{44,20,-32}, -{44,20,-31}, -{44,20,-30}, -{44,20,-29}, -{44,20,-28}, -{44,20,-27}, -{44,20,-26}, -{44,20,-25}, -{44,20,-24}, -{44,20,-23}, -{44,20,-22}, -{44,20,-21}, -{44,20,-20}, -{44,20,-19}, -{44,20,-18}, -{44,20,-17}, -{44,20,-16}, -{44,20,-15}, -{44,20,-14}, -{44,20,-13}, -{44,20,-12}, -{44,20,-11}, -{44,20,-10}, -{44,20,-9}, -{44,20,-8}, -{44,20,-7}, -{44,20,-6}, -{44,20,-5}, -{44,20,-4}, -{44,20,-3}, -{44,20,-2}, -{44,20,-1}, -{44,20,0}, -{44,20,1}, -{44,20,2}, -{44,20,3}, -{44,20,4}, -{44,20,5}, -{44,20,6}, -{44,20,7}, -{44,20,8}, -{44,20,9}, -{44,20,10}, -{44,20,11}, -{44,20,12}, -{44,20,13}, -{44,20,14}, -{44,20,15}, -{44,20,16}, -{44,20,17}, -{44,20,18}, -{44,20,19}, -{44,20,20}, -{44,20,21}, -{44,20,22}, -{44,20,23}, -{44,20,24}, -{44,20,25}, -{44,20,26}, -{44,20,27}, -{44,20,28}, -{44,20,29}, -{44,20,30}, -{44,20,31}, -{44,20,32}, -{44,20,33}, -{44,20,34}, -{44,20,35}, -{44,20,36}, -{44,20,37}, -{44,20,38}, -{44,20,39}, -{44,20,40}, -{44,20,41}, -{44,20,42}, -{44,20,43}, -{44,20,44}, -{44,20,45}, -{44,20,46}, -{44,20,47}, -{44,20,48}, -{44,20,49}, -{44,20,50}, -{44,20,51}, -{44,20,52}, -{44,21,-65}, -{44,21,-64}, -{44,21,-63}, -{44,21,-62}, -{44,21,-61}, -{44,21,-60}, -{44,21,-59}, -{44,21,-58}, -{44,21,-57}, -{44,21,-56}, -{44,21,-55}, -{44,21,-54}, -{44,21,-53}, -{44,21,-52}, -{44,21,-51}, -{44,21,-50}, -{44,21,-49}, -{44,21,-48}, -{44,21,-47}, -{44,21,-46}, -{44,21,-45}, -{44,21,-44}, -{44,21,-43}, -{44,21,-42}, -{44,21,-41}, -{44,21,-40}, -{44,21,-39}, -{44,21,-38}, -{44,21,-37}, -{44,21,-36}, -{44,21,-35}, -{44,21,-34}, -{44,21,-33}, -{44,21,-32}, -{44,21,-31}, -{44,21,-30}, -{44,21,-29}, -{44,21,-28}, -{44,21,-27}, -{44,21,-26}, -{44,21,-25}, -{44,21,-24}, -{44,21,-23}, -{44,21,-22}, -{44,21,-21}, -{44,21,-20}, -{44,21,-19}, -{44,21,-18}, -{44,21,-17}, -{44,21,-16}, -{44,21,-15}, -{44,21,-14}, -{44,21,-13}, -{44,21,-12}, -{44,21,-11}, -{44,21,-10}, -{44,21,-9}, -{44,21,-8}, -{44,21,-7}, -{44,21,-6}, -{44,21,-5}, -{44,21,-4}, -{44,21,-3}, -{44,21,-2}, -{44,21,-1}, -{44,21,0}, -{44,21,1}, -{44,21,2}, -{44,21,3}, -{44,21,4}, -{44,21,5}, -{44,21,6}, -{44,21,7}, -{44,21,8}, -{44,21,9}, -{44,21,10}, -{44,21,11}, -{44,21,12}, -{44,21,13}, -{44,21,14}, -{44,21,15}, -{44,21,16}, -{44,21,17}, -{44,21,18}, -{44,21,19}, -{44,21,20}, -{44,21,21}, -{44,21,22}, -{44,21,23}, -{44,21,24}, -{44,21,25}, -{44,21,26}, -{44,21,27}, -{44,21,28}, -{44,21,29}, -{44,21,30}, -{44,21,31}, -{44,21,32}, -{44,21,33}, -{44,21,34}, -{44,21,35}, -{44,21,36}, -{44,21,37}, -{44,21,38}, -{44,21,39}, -{44,21,40}, -{44,21,41}, -{44,21,42}, -{44,21,43}, -{44,21,44}, -{44,21,45}, -{44,21,46}, -{44,21,47}, -{44,21,48}, -{44,21,49}, -{44,21,50}, -{44,21,51}, -{44,21,52}, -{44,22,-66}, -{44,22,-65}, -{44,22,-64}, -{44,22,-63}, -{44,22,-62}, -{44,22,-61}, -{44,22,-60}, -{44,22,-59}, -{44,22,-58}, -{44,22,-57}, -{44,22,-56}, -{44,22,-55}, -{44,22,-54}, -{44,22,-53}, -{44,22,-52}, -{44,22,-51}, -{44,22,-50}, -{44,22,-49}, -{44,22,-48}, -{44,22,-47}, -{44,22,-46}, -{44,22,-45}, -{44,22,-44}, -{44,22,-43}, -{44,22,-42}, -{44,22,-41}, -{44,22,-40}, -{44,22,-39}, -{44,22,-38}, -{44,22,-37}, -{44,22,-36}, -{44,22,-35}, -{44,22,-34}, -{44,22,-33}, -{44,22,-32}, -{44,22,-31}, -{44,22,-30}, -{44,22,-29}, -{44,22,-28}, -{44,22,-27}, -{44,22,-26}, -{44,22,-25}, -{44,22,-24}, -{44,22,-23}, -{44,22,-22}, -{44,22,-21}, -{44,22,-20}, -{44,22,-19}, -{44,22,-18}, -{44,22,-17}, -{44,22,-16}, -{44,22,-15}, -{44,22,-14}, -{44,22,-13}, -{44,22,-12}, -{44,22,-11}, -{44,22,-10}, -{44,22,-9}, -{44,22,-8}, -{44,22,-7}, -{44,22,-6}, -{44,22,-5}, -{44,22,-4}, -{44,22,-3}, -{44,22,-2}, -{44,22,-1}, -{44,22,0}, -{44,22,1}, -{44,22,2}, -{44,22,3}, -{44,22,4}, -{44,22,5}, -{44,22,6}, -{44,22,7}, -{44,22,8}, -{44,22,9}, -{44,22,10}, -{44,22,11}, -{44,22,12}, -{44,22,13}, -{44,22,14}, -{44,22,15}, -{44,22,16}, -{44,22,17}, -{44,22,18}, -{44,22,19}, -{44,22,20}, -{44,22,21}, -{44,22,22}, -{44,22,23}, -{44,22,24}, -{44,22,25}, -{44,22,26}, -{44,22,27}, -{44,22,28}, -{44,22,29}, -{44,22,30}, -{44,22,31}, -{44,22,32}, -{44,22,33}, -{44,22,34}, -{44,22,35}, -{44,22,36}, -{44,22,37}, -{44,22,38}, -{44,22,39}, -{44,22,40}, -{44,22,41}, -{44,22,42}, -{44,22,43}, -{44,22,44}, -{44,22,45}, -{44,22,46}, -{44,22,47}, -{44,22,48}, -{44,22,49}, -{44,22,50}, -{44,22,51}, -{44,22,52}, -{44,23,-67}, -{44,23,-66}, -{44,23,-65}, -{44,23,-64}, -{44,23,-63}, -{44,23,-62}, -{44,23,-61}, -{44,23,-60}, -{44,23,-59}, -{44,23,-58}, -{44,23,-57}, -{44,23,-56}, -{44,23,-55}, -{44,23,-54}, -{44,23,-53}, -{44,23,-52}, -{44,23,-51}, -{44,23,-50}, -{44,23,-49}, -{44,23,-48}, -{44,23,-47}, -{44,23,-46}, -{44,23,-45}, -{44,23,-44}, -{44,23,-43}, -{44,23,-42}, -{44,23,-41}, -{44,23,-40}, -{44,23,-39}, -{44,23,-38}, -{44,23,-37}, -{44,23,-36}, -{44,23,-35}, -{44,23,-34}, -{44,23,-33}, -{44,23,-32}, -{44,23,-31}, -{44,23,-30}, -{44,23,-29}, -{44,23,-28}, -{44,23,-27}, -{44,23,-26}, -{44,23,-25}, -{44,23,-24}, -{44,23,-23}, -{44,23,-22}, -{44,23,-21}, -{44,23,-20}, -{44,23,-19}, -{44,23,-18}, -{44,23,-17}, -{44,23,-16}, -{44,23,-15}, -{44,23,-14}, -{44,23,-13}, -{44,23,-12}, -{44,23,-11}, -{44,23,-10}, -{44,23,-9}, -{44,23,-8}, -{44,23,-7}, -{44,23,-6}, -{44,23,-5}, -{44,23,-4}, -{44,23,-3}, -{44,23,-2}, -{44,23,-1}, -{44,23,0}, -{44,23,1}, -{44,23,2}, -{44,23,3}, -{44,23,4}, -{44,23,5}, -{44,23,6}, -{44,23,7}, -{44,23,8}, -{44,23,9}, -{44,23,10}, -{44,23,11}, -{44,23,12}, -{44,23,13}, -{44,23,14}, -{44,23,15}, -{44,23,16}, -{44,23,17}, -{44,23,18}, -{44,23,19}, -{44,23,20}, -{44,23,21}, -{44,23,22}, -{44,23,23}, -{44,23,24}, -{44,23,25}, -{44,23,26}, -{44,23,27}, -{44,23,28}, -{44,23,29}, -{44,23,30}, -{44,23,31}, -{44,23,32}, -{44,23,33}, -{44,23,34}, -{44,23,35}, -{44,23,36}, -{44,23,37}, -{44,23,38}, -{44,23,39}, -{44,23,40}, -{44,23,41}, -{44,23,42}, -{44,23,43}, -{44,23,44}, -{44,23,45}, -{44,23,46}, -{44,23,47}, -{44,23,48}, -{44,23,49}, -{44,23,50}, -{44,23,51}, -{44,23,52}, -{44,24,-68}, -{44,24,-67}, -{44,24,-66}, -{44,24,-65}, -{44,24,-64}, -{44,24,-63}, -{44,24,-62}, -{44,24,-61}, -{44,24,-60}, -{44,24,-59}, -{44,24,-58}, -{44,24,-57}, -{44,24,-56}, -{44,24,-55}, -{44,24,-54}, -{44,24,-53}, -{44,24,-52}, -{44,24,-51}, -{44,24,-50}, -{44,24,-49}, -{44,24,-48}, -{44,24,-47}, -{44,24,-46}, -{44,24,-45}, -{44,24,-44}, -{44,24,-43}, -{44,24,-42}, -{44,24,-41}, -{44,24,-40}, -{44,24,-39}, -{44,24,-38}, -{44,24,-37}, -{44,24,-36}, -{44,24,-35}, -{44,24,-34}, -{44,24,-33}, -{44,24,-32}, -{44,24,-31}, -{44,24,-30}, -{44,24,-29}, -{44,24,-28}, -{44,24,-27}, -{44,24,-26}, -{44,24,-25}, -{44,24,-24}, -{44,24,-23}, -{44,24,-22}, -{44,24,-21}, -{44,24,-20}, -{44,24,-19}, -{44,24,-18}, -{44,24,-17}, -{44,24,-16}, -{44,24,-15}, -{44,24,-14}, -{44,24,-13}, -{44,24,-12}, -{44,24,-11}, -{44,24,-10}, -{44,24,-9}, -{44,24,-8}, -{44,24,-7}, -{44,24,-6}, -{44,24,-5}, -{44,24,-4}, -{44,24,-3}, -{44,24,-2}, -{44,24,-1}, -{44,24,0}, -{44,24,1}, -{44,24,2}, -{44,24,3}, -{44,24,4}, -{44,24,5}, -{44,24,6}, -{44,24,7}, -{44,24,8}, -{44,24,9}, -{44,24,10}, -{44,24,11}, -{44,24,12}, -{44,24,13}, -{44,24,14}, -{44,24,15}, -{44,24,16}, -{44,24,17}, -{44,24,18}, -{44,24,19}, -{44,24,20}, -{44,24,21}, -{44,24,22}, -{44,24,23}, -{44,24,24}, -{44,24,25}, -{44,24,26}, -{44,24,27}, -{44,24,28}, -{44,24,29}, -{44,24,30}, -{44,24,31}, -{44,24,32}, -{44,24,33}, -{44,24,34}, -{44,24,35}, -{44,24,36}, -{44,24,37}, -{44,24,38}, -{44,24,39}, -{44,24,40}, -{44,24,41}, -{44,24,42}, -{44,24,43}, -{44,24,44}, -{44,24,45}, -{44,24,46}, -{44,24,47}, -{44,24,48}, -{44,24,49}, -{44,24,50}, -{44,24,51}, -{44,24,52}, -{44,24,53}, -{44,25,-69}, -{44,25,-68}, -{44,25,-67}, -{44,25,-66}, -{44,25,-65}, -{44,25,-64}, -{44,25,-63}, -{44,25,-62}, -{44,25,-61}, -{44,25,-60}, -{44,25,-59}, -{44,25,-58}, -{44,25,-57}, -{44,25,-56}, -{44,25,-55}, -{44,25,-54}, -{44,25,-53}, -{44,25,-52}, -{44,25,-51}, -{44,25,-50}, -{44,25,-49}, -{44,25,-48}, -{44,25,-47}, -{44,25,-46}, -{44,25,-45}, -{44,25,-44}, -{44,25,-43}, -{44,25,-42}, -{44,25,-41}, -{44,25,-40}, -{44,25,-39}, -{44,25,-38}, -{44,25,-37}, -{44,25,-36}, -{44,25,-35}, -{44,25,-34}, -{44,25,-33}, -{44,25,-32}, -{44,25,-31}, -{44,25,-30}, -{44,25,-29}, -{44,25,-28}, -{44,25,-27}, -{44,25,-26}, -{44,25,-25}, -{44,25,-24}, -{44,25,-23}, -{44,25,-22}, -{44,25,-21}, -{44,25,-20}, -{44,25,-19}, -{44,25,-18}, -{44,25,-17}, -{44,25,-16}, -{44,25,-15}, -{44,25,-14}, -{44,25,-13}, -{44,25,-12}, -{44,25,-11}, -{44,25,-10}, -{44,25,-9}, -{44,25,-8}, -{44,25,-7}, -{44,25,-6}, -{44,25,-5}, -{44,25,-4}, -{44,25,-3}, -{44,25,-2}, -{44,25,-1}, -{44,25,0}, -{44,25,1}, -{44,25,2}, -{44,25,3}, -{44,25,4}, -{44,25,5}, -{44,25,6}, -{44,25,7}, -{44,25,8}, -{44,25,9}, -{44,25,10}, -{44,25,11}, -{44,25,12}, -{44,25,13}, -{44,25,14}, -{44,25,15}, -{44,25,16}, -{44,25,17}, -{44,25,18}, -{44,25,19}, -{44,25,20}, -{44,25,21}, -{44,25,22}, -{44,25,23}, -{44,25,24}, -{44,25,25}, -{44,25,26}, -{44,25,27}, -{44,25,28}, -{44,25,29}, -{44,25,30}, -{44,25,31}, -{44,25,32}, -{44,25,33}, -{44,25,34}, -{44,25,35}, -{44,25,36}, -{44,25,37}, -{44,25,38}, -{44,25,39}, -{44,25,40}, -{44,25,41}, -{44,25,42}, -{44,25,43}, -{44,25,44}, -{44,25,45}, -{44,25,46}, -{44,25,47}, -{44,25,48}, -{44,25,49}, -{44,25,50}, -{44,25,51}, -{44,25,52}, -{44,25,53}, -{44,26,-70}, -{44,26,-69}, -{44,26,-68}, -{44,26,-67}, -{44,26,-66}, -{44,26,-65}, -{44,26,-64}, -{44,26,-63}, -{44,26,-62}, -{44,26,-61}, -{44,26,-60}, -{44,26,-59}, -{44,26,-58}, -{44,26,-57}, -{44,26,-56}, -{44,26,-55}, -{44,26,-54}, -{44,26,-53}, -{44,26,-52}, -{44,26,-51}, -{44,26,-50}, -{44,26,-49}, -{44,26,-48}, -{44,26,-47}, -{44,26,-46}, -{44,26,-45}, -{44,26,-44}, -{44,26,-43}, -{44,26,-42}, -{44,26,-41}, -{44,26,-40}, -{44,26,-39}, -{44,26,-38}, -{44,26,-37}, -{44,26,-36}, -{44,26,-35}, -{44,26,-34}, -{44,26,-33}, -{44,26,-32}, -{44,26,-31}, -{44,26,-30}, -{44,26,-29}, -{44,26,-28}, -{44,26,-27}, -{44,26,-26}, -{44,26,-25}, -{44,26,-24}, -{44,26,-23}, -{44,26,-22}, -{44,26,-21}, -{44,26,-20}, -{44,26,-19}, -{44,26,-18}, -{44,26,-17}, -{44,26,-16}, -{44,26,-15}, -{44,26,-14}, -{44,26,-13}, -{44,26,-12}, -{44,26,-11}, -{44,26,-10}, -{44,26,-9}, -{44,26,-8}, -{44,26,-7}, -{44,26,-6}, -{44,26,-5}, -{44,26,-4}, -{44,26,-3}, -{44,26,-2}, -{44,26,-1}, -{44,26,0}, -{44,26,1}, -{44,26,2}, -{44,26,3}, -{44,26,4}, -{44,26,5}, -{44,26,6}, -{44,26,7}, -{44,26,8}, -{44,26,9}, -{44,26,10}, -{44,26,11}, -{44,26,12}, -{44,26,13}, -{44,26,14}, -{44,26,15}, -{44,26,16}, -{44,26,17}, -{44,26,18}, -{44,26,19}, -{44,26,20}, -{44,26,21}, -{44,26,22}, -{44,26,23}, -{44,26,24}, -{44,26,25}, -{44,26,26}, -{44,26,27}, -{44,26,28}, -{44,26,29}, -{44,26,30}, -{44,26,31}, -{44,26,32}, -{44,26,33}, -{44,26,34}, -{44,26,35}, -{44,26,36}, -{44,26,37}, -{44,26,38}, -{44,26,39}, -{44,26,40}, -{44,26,41}, -{44,26,42}, -{44,26,43}, -{44,26,44}, -{44,26,45}, -{44,26,46}, -{44,26,47}, -{44,26,48}, -{44,26,49}, -{44,26,50}, -{44,26,51}, -{44,26,52}, -{44,26,53}, -{44,27,-71}, -{44,27,-70}, -{44,27,-69}, -{44,27,-68}, -{44,27,-67}, -{44,27,-66}, -{44,27,-65}, -{44,27,-64}, -{44,27,-63}, -{44,27,-62}, -{44,27,-61}, -{44,27,-60}, -{44,27,-59}, -{44,27,-58}, -{44,27,-57}, -{44,27,-56}, -{44,27,-55}, -{44,27,-54}, -{44,27,-53}, -{44,27,-52}, -{44,27,-51}, -{44,27,-50}, -{44,27,-49}, -{44,27,-48}, -{44,27,-47}, -{44,27,-46}, -{44,27,-45}, -{44,27,-44}, -{44,27,-43}, -{44,27,-42}, -{44,27,-41}, -{44,27,-40}, -{44,27,-39}, -{44,27,-38}, -{44,27,-37}, -{44,27,-36}, -{44,27,-35}, -{44,27,-34}, -{44,27,-33}, -{44,27,-32}, -{44,27,-31}, -{44,27,-30}, -{44,27,-29}, -{44,27,-28}, -{44,27,-27}, -{44,27,-26}, -{44,27,-25}, -{44,27,-24}, -{44,27,-23}, -{44,27,-22}, -{44,27,-21}, -{44,27,-20}, -{44,27,-19}, -{44,27,-18}, -{44,27,-17}, -{44,27,-16}, -{44,27,-15}, -{44,27,-14}, -{44,27,-13}, -{44,27,-12}, -{44,27,-11}, -{44,27,-10}, -{44,27,-9}, -{44,27,-8}, -{44,27,-7}, -{44,27,-6}, -{44,27,-5}, -{44,27,-4}, -{44,27,-3}, -{44,27,-2}, -{44,27,-1}, -{44,27,0}, -{44,27,1}, -{44,27,2}, -{44,27,3}, -{44,27,4}, -{44,27,5}, -{44,27,6}, -{44,27,7}, -{44,27,8}, -{44,27,9}, -{44,27,10}, -{44,27,11}, -{44,27,12}, -{44,27,13}, -{44,27,14}, -{44,27,15}, -{44,27,16}, -{44,27,17}, -{44,27,18}, -{44,27,19}, -{44,27,20}, -{44,27,21}, -{44,27,22}, -{44,27,23}, -{44,27,24}, -{44,27,25}, -{44,27,26}, -{44,27,27}, -{44,27,28}, -{44,27,29}, -{44,27,30}, -{44,27,31}, -{44,27,32}, -{44,27,33}, -{44,27,34}, -{44,27,35}, -{44,27,36}, -{44,27,37}, -{44,27,38}, -{44,27,39}, -{44,27,40}, -{44,27,41}, -{44,27,42}, -{44,27,43}, -{44,27,44}, -{44,27,45}, -{44,27,46}, -{44,27,47}, -{44,27,48}, -{44,27,49}, -{44,27,50}, -{44,27,51}, -{44,27,52}, -{44,27,53}, -{44,28,-72}, -{44,28,-71}, -{44,28,-70}, -{44,28,-69}, -{44,28,-68}, -{44,28,-67}, -{44,28,-66}, -{44,28,-65}, -{44,28,-64}, -{44,28,-63}, -{44,28,-62}, -{44,28,-61}, -{44,28,-60}, -{44,28,-59}, -{44,28,-58}, -{44,28,-57}, -{44,28,-56}, -{44,28,-55}, -{44,28,-54}, -{44,28,-53}, -{44,28,-52}, -{44,28,-51}, -{44,28,-50}, -{44,28,-49}, -{44,28,-48}, -{44,28,-47}, -{44,28,-46}, -{44,28,-45}, -{44,28,-44}, -{44,28,-43}, -{44,28,-42}, -{44,28,-41}, -{44,28,-40}, -{44,28,-39}, -{44,28,-38}, -{44,28,-37}, -{44,28,-36}, -{44,28,-35}, -{44,28,-34}, -{44,28,-33}, -{44,28,-32}, -{44,28,-31}, -{44,28,-30}, -{44,28,-29}, -{44,28,-28}, -{44,28,-27}, -{44,28,-26}, -{44,28,-25}, -{44,28,-24}, -{44,28,-23}, -{44,28,-22}, -{44,28,-21}, -{44,28,-20}, -{44,28,-19}, -{44,28,-18}, -{44,28,-17}, -{44,28,-16}, -{44,28,-15}, -{44,28,-14}, -{44,28,-13}, -{44,28,-12}, -{44,28,-11}, -{44,28,-10}, -{44,28,-9}, -{44,28,-8}, -{44,28,-7}, -{44,28,-6}, -{44,28,-5}, -{44,28,-4}, -{44,28,-3}, -{44,28,-2}, -{44,28,-1}, -{44,28,0}, -{44,28,1}, -{44,28,2}, -{44,28,3}, -{44,28,4}, -{44,28,5}, -{44,28,6}, -{44,28,7}, -{44,28,8}, -{44,28,9}, -{44,28,10}, -{44,28,11}, -{44,28,12}, -{44,28,13}, -{44,28,14}, -{44,28,15}, -{44,28,16}, -{44,28,17}, -{44,28,18}, -{44,28,19}, -{44,28,20}, -{44,28,21}, -{44,28,22}, -{44,28,23}, -{44,28,24}, -{44,28,25}, -{44,28,26}, -{44,28,27}, -{44,28,28}, -{44,28,29}, -{44,28,30}, -{44,28,31}, -{44,28,32}, -{44,28,33}, -{44,28,34}, -{44,28,35}, -{44,28,36}, -{44,28,37}, -{44,28,38}, -{44,28,39}, -{44,28,40}, -{44,28,41}, -{44,28,42}, -{44,28,43}, -{44,28,44}, -{44,28,45}, -{44,28,46}, -{44,28,47}, -{44,28,48}, -{44,28,49}, -{44,28,50}, -{44,28,51}, -{44,28,52}, -{44,28,53}, -{44,29,-73}, -{44,29,-72}, -{44,29,-71}, -{44,29,-70}, -{44,29,-69}, -{44,29,-68}, -{44,29,-67}, -{44,29,-66}, -{44,29,-65}, -{44,29,-64}, -{44,29,-63}, -{44,29,-62}, -{44,29,-61}, -{44,29,-60}, -{44,29,-59}, -{44,29,-58}, -{44,29,-57}, -{44,29,-56}, -{44,29,-55}, -{44,29,-54}, -{44,29,-53}, -{44,29,-52}, -{44,29,-51}, -{44,29,-50}, -{44,29,-49}, -{44,29,-48}, -{44,29,-47}, -{44,29,-46}, -{44,29,-45}, -{44,29,-44}, -{44,29,-43}, -{44,29,-42}, -{44,29,-41}, -{44,29,-40}, -{44,29,-39}, -{44,29,-38}, -{44,29,-37}, -{44,29,-36}, -{44,29,-35}, -{44,29,-34}, -{44,29,-33}, -{44,29,-32}, -{44,29,-31}, -{44,29,-30}, -{44,29,-29}, -{44,29,-28}, -{44,29,-27}, -{44,29,-26}, -{44,29,-25}, -{44,29,-24}, -{44,29,-23}, -{44,29,-22}, -{44,29,-21}, -{44,29,-20}, -{44,29,-19}, -{44,29,-18}, -{44,29,-17}, -{44,29,-16}, -{44,29,-15}, -{44,29,-14}, -{44,29,-13}, -{44,29,-12}, -{44,29,-11}, -{44,29,-10}, -{44,29,-9}, -{44,29,-8}, -{44,29,-7}, -{44,29,-6}, -{44,29,-5}, -{44,29,-4}, -{44,29,-3}, -{44,29,-2}, -{44,29,-1}, -{44,29,0}, -{44,29,1}, -{44,29,2}, -{44,29,3}, -{44,29,4}, -{44,29,5}, -{44,29,6}, -{44,29,7}, -{44,29,8}, -{44,29,9}, -{44,29,10}, -{44,29,11}, -{44,29,12}, -{44,29,13}, -{44,29,14}, -{44,29,15}, -{44,29,16}, -{44,29,17}, -{44,29,18}, -{44,29,19}, -{44,29,20}, -{44,29,21}, -{44,29,22}, -{44,29,23}, -{44,29,24}, -{44,29,25}, -{44,29,26}, -{44,29,27}, -{44,29,28}, -{44,29,29}, -{44,29,30}, -{44,29,31}, -{44,29,32}, -{44,29,33}, -{44,29,34}, -{44,29,35}, -{44,29,36}, -{44,29,37}, -{44,29,38}, -{44,29,39}, -{44,29,40}, -{44,29,41}, -{44,29,42}, -{44,29,43}, -{44,29,44}, -{44,29,45}, -{44,29,46}, -{44,29,47}, -{44,29,48}, -{44,29,49}, -{44,29,50}, -{44,29,51}, -{44,29,52}, -{44,29,53}, -{44,30,-74}, -{44,30,-73}, -{44,30,-72}, -{44,30,-71}, -{44,30,-70}, -{44,30,-69}, -{44,30,-68}, -{44,30,-67}, -{44,30,-66}, -{44,30,-65}, -{44,30,-64}, -{44,30,-63}, -{44,30,-62}, -{44,30,-61}, -{44,30,-60}, -{44,30,-59}, -{44,30,-58}, -{44,30,-57}, -{44,30,-56}, -{44,30,-55}, -{44,30,-54}, -{44,30,-53}, -{44,30,-52}, -{44,30,-51}, -{44,30,-50}, -{44,30,-49}, -{44,30,-48}, -{44,30,-47}, -{44,30,-46}, -{44,30,-45}, -{44,30,-44}, -{44,30,-43}, -{44,30,-42}, -{44,30,-41}, -{44,30,-40}, -{44,30,-39}, -{44,30,-38}, -{44,30,-37}, -{44,30,-36}, -{44,30,-35}, -{44,30,-34}, -{44,30,-33}, -{44,30,-32}, -{44,30,-31}, -{44,30,-30}, -{44,30,-29}, -{44,30,-28}, -{44,30,-27}, -{44,30,-26}, -{44,30,-25}, -{44,30,-24}, -{44,30,-23}, -{44,30,-22}, -{44,30,-21}, -{44,30,-20}, -{44,30,-19}, -{44,30,-18}, -{44,30,-17}, -{44,30,-16}, -{44,30,-15}, -{44,30,-14}, -{44,30,-13}, -{44,30,-12}, -{44,30,-11}, -{44,30,-10}, -{44,30,-9}, -{44,30,-8}, -{44,30,-7}, -{44,30,-6}, -{44,30,-5}, -{44,30,-4}, -{44,30,-3}, -{44,30,-2}, -{44,30,-1}, -{44,30,0}, -{44,30,1}, -{44,30,2}, -{44,30,3}, -{44,30,4}, -{44,30,5}, -{44,30,6}, -{44,30,7}, -{44,30,8}, -{44,30,9}, -{44,30,10}, -{44,30,11}, -{44,30,12}, -{44,30,13}, -{44,30,14}, -{44,30,15}, -{44,30,16}, -{44,30,17}, -{44,30,18}, -{44,30,19}, -{44,30,20}, -{44,30,21}, -{44,30,22}, -{44,30,23}, -{44,30,24}, -{44,30,25}, -{44,30,26}, -{44,30,27}, -{44,30,28}, -{44,30,29}, -{44,30,30}, -{44,30,31}, -{44,30,32}, -{44,30,33}, -{44,30,34}, -{44,30,35}, -{44,30,36}, -{44,30,37}, -{44,30,38}, -{44,30,39}, -{44,30,40}, -{44,30,41}, -{44,30,42}, -{44,30,43}, -{44,30,44}, -{44,30,45}, -{44,30,46}, -{44,30,47}, -{44,30,48}, -{44,30,49}, -{44,30,50}, -{44,30,51}, -{44,30,52}, -{44,30,53}, -{44,31,-75}, -{44,31,-74}, -{44,31,-73}, -{44,31,-72}, -{44,31,-71}, -{44,31,-70}, -{44,31,-69}, -{44,31,-68}, -{44,31,-67}, -{44,31,-66}, -{44,31,-65}, -{44,31,-64}, -{44,31,-63}, -{44,31,-62}, -{44,31,-61}, -{44,31,-60}, -{44,31,-59}, -{44,31,-58}, -{44,31,-57}, -{44,31,-56}, -{44,31,-55}, -{44,31,-54}, -{44,31,-53}, -{44,31,-52}, -{44,31,-51}, -{44,31,-50}, -{44,31,-49}, -{44,31,-48}, -{44,31,-47}, -{44,31,-46}, -{44,31,-45}, -{44,31,-44}, -{44,31,-43}, -{44,31,-42}, -{44,31,-41}, -{44,31,-40}, -{44,31,-39}, -{44,31,-38}, -{44,31,-37}, -{44,31,-36}, -{44,31,-35}, -{44,31,-34}, -{44,31,-33}, -{44,31,-32}, -{44,31,-31}, -{44,31,-30}, -{44,31,-29}, -{44,31,-28}, -{44,31,-27}, -{44,31,-26}, -{44,31,-25}, -{44,31,-24}, -{44,31,-23}, -{44,31,-22}, -{44,31,-21}, -{44,31,-20}, -{44,31,-19}, -{44,31,-18}, -{44,31,-17}, -{44,31,-16}, -{44,31,-15}, -{44,31,-14}, -{44,31,-13}, -{44,31,-12}, -{44,31,-11}, -{44,31,-10}, -{44,31,-9}, -{44,31,-8}, -{44,31,-7}, -{44,31,-6}, -{44,31,-5}, -{44,31,-4}, -{44,31,-3}, -{44,31,-2}, -{44,31,-1}, -{44,31,0}, -{44,31,1}, -{44,31,2}, -{44,31,3}, -{44,31,4}, -{44,31,5}, -{44,31,6}, -{44,31,7}, -{44,31,8}, -{44,31,9}, -{44,31,10}, -{44,31,11}, -{44,31,12}, -{44,31,13}, -{44,31,14}, -{44,31,15}, -{44,31,16}, -{44,31,17}, -{44,31,18}, -{44,31,19}, -{44,31,20}, -{44,31,21}, -{44,31,22}, -{44,31,23}, -{44,31,24}, -{44,31,25}, -{44,31,26}, -{44,31,27}, -{44,31,28}, -{44,31,29}, -{44,31,30}, -{44,31,31}, -{44,31,32}, -{44,31,33}, -{44,31,34}, -{44,31,35}, -{44,31,36}, -{44,31,37}, -{44,31,38}, -{44,31,39}, -{44,31,40}, -{44,31,41}, -{44,31,42}, -{44,31,43}, -{44,31,44}, -{44,31,45}, -{44,31,46}, -{44,31,47}, -{44,31,48}, -{44,31,49}, -{44,31,50}, -{44,31,51}, -{44,31,52}, -{44,31,53}, -{44,32,-76}, -{44,32,-75}, -{44,32,-74}, -{44,32,-73}, -{44,32,-72}, -{44,32,-71}, -{44,32,-70}, -{44,32,-69}, -{44,32,-68}, -{44,32,-67}, -{44,32,-66}, -{44,32,-65}, -{44,32,-64}, -{44,32,-63}, -{44,32,-62}, -{44,32,-61}, -{44,32,-60}, -{44,32,-59}, -{44,32,-58}, -{44,32,-57}, -{44,32,-56}, -{44,32,-55}, -{44,32,-54}, -{44,32,-53}, -{44,32,-52}, -{44,32,-51}, -{44,32,-50}, -{44,32,-49}, -{44,32,-48}, -{44,32,-47}, -{44,32,-46}, -{44,32,-45}, -{44,32,-44}, -{44,32,-43}, -{44,32,-42}, -{44,32,-41}, -{44,32,-40}, -{44,32,-39}, -{44,32,-38}, -{44,32,-37}, -{44,32,-36}, -{44,32,-35}, -{44,32,-34}, -{44,32,-33}, -{44,32,-32}, -{44,32,-31}, -{44,32,-30}, -{44,32,-29}, -{44,32,-28}, -{44,32,-27}, -{44,32,-26}, -{44,32,-25}, -{44,32,-24}, -{44,32,-23}, -{44,32,-22}, -{44,32,-21}, -{44,32,-20}, -{44,32,-19}, -{44,32,-18}, -{44,32,-17}, -{44,32,-16}, -{44,32,-15}, -{44,32,-14}, -{44,32,-13}, -{44,32,-12}, -{44,32,-11}, -{44,32,-10}, -{44,32,-9}, -{44,32,-8}, -{44,32,-7}, -{44,32,-6}, -{44,32,-5}, -{44,32,-4}, -{44,32,-3}, -{44,32,-2}, -{44,32,-1}, -{44,32,0}, -{44,32,1}, -{44,32,2}, -{44,32,3}, -{44,32,4}, -{44,32,5}, -{44,32,6}, -{44,32,7}, -{44,32,8}, -{44,32,9}, -{44,32,10}, -{44,32,11}, -{44,32,12}, -{44,32,13}, -{44,32,14}, -{44,32,15}, -{44,32,16}, -{44,32,17}, -{44,32,18}, -{44,32,19}, -{44,32,20}, -{44,32,21}, -{44,32,22}, -{44,32,23}, -{44,32,24}, -{44,32,25}, -{44,32,26}, -{44,32,27}, -{44,32,28}, -{44,32,29}, -{44,32,30}, -{44,32,31}, -{44,32,32}, -{44,32,33}, -{44,32,34}, -{44,32,35}, -{44,32,36}, -{44,32,37}, -{44,32,38}, -{44,32,39}, -{44,32,40}, -{44,32,41}, -{44,32,42}, -{44,32,43}, -{44,32,44}, -{44,32,45}, -{44,32,46}, -{44,32,47}, -{44,32,48}, -{44,32,49}, -{44,32,50}, -{44,32,51}, -{44,32,52}, -{44,32,53}, -{44,33,-77}, -{44,33,-76}, -{44,33,-75}, -{44,33,-74}, -{44,33,-73}, -{44,33,-72}, -{44,33,-71}, -{44,33,-70}, -{44,33,-69}, -{44,33,-68}, -{44,33,-67}, -{44,33,-66}, -{44,33,-65}, -{44,33,-64}, -{44,33,-63}, -{44,33,-62}, -{44,33,-61}, -{44,33,-60}, -{44,33,-59}, -{44,33,-58}, -{44,33,-57}, -{44,33,-56}, -{44,33,-55}, -{44,33,-54}, -{44,33,-53}, -{44,33,-52}, -{44,33,-51}, -{44,33,-50}, -{44,33,-49}, -{44,33,-48}, -{44,33,-47}, -{44,33,-46}, -{44,33,-45}, -{44,33,-44}, -{44,33,-43}, -{44,33,-42}, -{44,33,-41}, -{44,33,-40}, -{44,33,-39}, -{44,33,-38}, -{44,33,-37}, -{44,33,-36}, -{44,33,-35}, -{44,33,-34}, -{44,33,-33}, -{44,33,-32}, -{44,33,-31}, -{44,33,-30}, -{44,33,-29}, -{44,33,-28}, -{44,33,-27}, -{44,33,-26}, -{44,33,-25}, -{44,33,-24}, -{44,33,-23}, -{44,33,-22}, -{44,33,-21}, -{44,33,-20}, -{44,33,-19}, -{44,33,-18}, -{44,33,-17}, -{44,33,-16}, -{44,33,-15}, -{44,33,-14}, -{44,33,-13}, -{44,33,-12}, -{44,33,-11}, -{44,33,-10}, -{44,33,-9}, -{44,33,-8}, -{44,33,-7}, -{44,33,-6}, -{44,33,-5}, -{44,33,-4}, -{44,33,-3}, -{44,33,-2}, -{44,33,-1}, -{44,33,0}, -{44,33,1}, -{44,33,2}, -{44,33,3}, -{44,33,4}, -{44,33,5}, -{44,33,6}, -{44,33,7}, -{44,33,8}, -{44,33,9}, -{44,33,10}, -{44,33,11}, -{44,33,12}, -{44,33,13}, -{44,33,14}, -{44,33,15}, -{44,33,16}, -{44,33,17}, -{44,33,18}, -{44,33,19}, -{44,33,20}, -{44,33,21}, -{44,33,22}, -{44,33,23}, -{44,33,24}, -{44,33,25}, -{44,33,26}, -{44,33,27}, -{44,33,28}, -{44,33,29}, -{44,33,30}, -{44,33,31}, -{44,33,32}, -{44,33,33}, -{44,33,34}, -{44,33,35}, -{44,33,36}, -{44,33,37}, -{44,33,38}, -{44,33,39}, -{44,33,40}, -{44,33,41}, -{44,33,42}, -{44,33,43}, -{44,33,44}, -{44,33,45}, -{44,33,46}, -{44,33,47}, -{44,33,48}, -{44,33,49}, -{44,33,50}, -{44,33,51}, -{44,33,52}, -{44,33,53}, -{44,34,-78}, -{44,34,-77}, -{44,34,-76}, -{44,34,-75}, -{44,34,-74}, -{44,34,-73}, -{44,34,-72}, -{44,34,-71}, -{44,34,-70}, -{44,34,-69}, -{44,34,-68}, -{44,34,-67}, -{44,34,-66}, -{44,34,-65}, -{44,34,-64}, -{44,34,-63}, -{44,34,-62}, -{44,34,-61}, -{44,34,-60}, -{44,34,-59}, -{44,34,-58}, -{44,34,-57}, -{44,34,-56}, -{44,34,-55}, -{44,34,-54}, -{44,34,-53}, -{44,34,-52}, -{44,34,-51}, -{44,34,-50}, -{44,34,-49}, -{44,34,-48}, -{44,34,-47}, -{44,34,-46}, -{44,34,-45}, -{44,34,-44}, -{44,34,-43}, -{44,34,-42}, -{44,34,-41}, -{44,34,-40}, -{44,34,-39}, -{44,34,-38}, -{44,34,-37}, -{44,34,-36}, -{44,34,-35}, -{44,34,-34}, -{44,34,-33}, -{44,34,-32}, -{44,34,-31}, -{44,34,-30}, -{44,34,-29}, -{44,34,-28}, -{44,34,-27}, -{44,34,-26}, -{44,34,-25}, -{44,34,-24}, -{44,34,-23}, -{44,34,-22}, -{44,34,-21}, -{44,34,-20}, -{44,34,-19}, -{44,34,-18}, -{44,34,-17}, -{44,34,-16}, -{44,34,-15}, -{44,34,-14}, -{44,34,-13}, -{44,34,-12}, -{44,34,-11}, -{44,34,-10}, -{44,34,-9}, -{44,34,-8}, -{44,34,-7}, -{44,34,-6}, -{44,34,-5}, -{44,34,-4}, -{44,34,-3}, -{44,34,-2}, -{44,34,-1}, -{44,34,0}, -{44,34,1}, -{44,34,2}, -{44,34,3}, -{44,34,4}, -{44,34,5}, -{44,34,6}, -{44,34,7}, -{44,34,8}, -{44,34,9}, -{44,34,10}, -{44,34,11}, -{44,34,12}, -{44,34,13}, -{44,34,14}, -{44,34,15}, -{44,34,16}, -{44,34,17}, -{44,34,18}, -{44,34,19}, -{44,34,20}, -{44,34,21}, -{44,34,22}, -{44,34,23}, -{44,34,24}, -{44,34,25}, -{44,34,26}, -{44,34,27}, -{44,34,28}, -{44,34,29}, -{44,34,30}, -{44,34,31}, -{44,34,32}, -{44,34,33}, -{44,34,34}, -{44,34,35}, -{44,34,36}, -{44,34,37}, -{44,34,38}, -{44,34,39}, -{44,34,40}, -{44,34,41}, -{44,34,42}, -{44,34,43}, -{44,34,44}, -{44,34,45}, -{44,34,46}, -{44,34,47}, -{44,34,48}, -{44,34,49}, -{44,34,50}, -{44,34,51}, -{44,34,52}, -{44,34,53}, -{44,35,-79}, -{44,35,-78}, -{44,35,-77}, -{44,35,-76}, -{44,35,-75}, -{44,35,-74}, -{44,35,-73}, -{44,35,-72}, -{44,35,-71}, -{44,35,-70}, -{44,35,-69}, -{44,35,-68}, -{44,35,-67}, -{44,35,-66}, -{44,35,-65}, -{44,35,-64}, -{44,35,-63}, -{44,35,-62}, -{44,35,-61}, -{44,35,-60}, -{44,35,-59}, -{44,35,-58}, -{44,35,-57}, -{44,35,-56}, -{44,35,-55}, -{44,35,-54}, -{44,35,-53}, -{44,35,-52}, -{44,35,-51}, -{44,35,-50}, -{44,35,-49}, -{44,35,-48}, -{44,35,-47}, -{44,35,-46}, -{44,35,-45}, -{44,35,-44}, -{44,35,-43}, -{44,35,-42}, -{44,35,-41}, -{44,35,-40}, -{44,35,-39}, -{44,35,-38}, -{44,35,-37}, -{44,35,-36}, -{44,35,-35}, -{44,35,-34}, -{44,35,-33}, -{44,35,-32}, -{44,35,-31}, -{44,35,-30}, -{44,35,-29}, -{44,35,-28}, -{44,35,-27}, -{44,35,-26}, -{44,35,-25}, -{44,35,-24}, -{44,35,-23}, -{44,35,-22}, -{44,35,-21}, -{44,35,-20}, -{44,35,-19}, -{44,35,-18}, -{44,35,-17}, -{44,35,-16}, -{44,35,-15}, -{44,35,-14}, -{44,35,-13}, -{44,35,-12}, -{44,35,-11}, -{44,35,-10}, -{44,35,-9}, -{44,35,-8}, -{44,35,-7}, -{44,35,-6}, -{44,35,-5}, -{44,35,-4}, -{44,35,-3}, -{44,35,-2}, -{44,35,-1}, -{44,35,0}, -{44,35,1}, -{44,35,2}, -{44,35,3}, -{44,35,4}, -{44,35,5}, -{44,35,6}, -{44,35,7}, -{44,35,8}, -{44,35,9}, -{44,35,10}, -{44,35,11}, -{44,35,12}, -{44,35,13}, -{44,35,14}, -{44,35,15}, -{44,35,16}, -{44,35,17}, -{44,35,18}, -{44,35,19}, -{44,35,20}, -{44,35,21}, -{44,35,22}, -{44,35,23}, -{44,35,24}, -{44,35,25}, -{44,35,26}, -{44,35,27}, -{44,35,28}, -{44,35,29}, -{44,35,30}, -{44,35,31}, -{44,35,32}, -{44,35,33}, -{44,35,34}, -{44,35,35}, -{44,35,36}, -{44,35,37}, -{44,35,38}, -{44,35,39}, -{44,35,40}, -{44,35,41}, -{44,35,42}, -{44,35,43}, -{44,35,44}, -{44,35,45}, -{44,35,46}, -{44,35,47}, -{44,35,48}, -{44,35,49}, -{44,35,50}, -{44,35,51}, -{44,35,52}, -{44,35,53}, -{44,35,54}, -{44,36,-79}, -{44,36,-78}, -{44,36,-77}, -{44,36,-76}, -{44,36,-75}, -{44,36,-74}, -{44,36,-73}, -{44,36,-72}, -{44,36,-71}, -{44,36,-70}, -{44,36,-69}, -{44,36,-68}, -{44,36,-67}, -{44,36,-66}, -{44,36,-65}, -{44,36,-64}, -{44,36,-63}, -{44,36,-62}, -{44,36,-61}, -{44,36,-60}, -{44,36,-59}, -{44,36,-58}, -{44,36,-57}, -{44,36,-56}, -{44,36,-55}, -{44,36,-54}, -{44,36,-53}, -{44,36,-52}, -{44,36,-51}, -{44,36,-50}, -{44,36,-49}, -{44,36,-48}, -{44,36,-47}, -{44,36,-46}, -{44,36,-45}, -{44,36,-44}, -{44,36,-43}, -{44,36,-42}, -{44,36,-41}, -{44,36,-40}, -{44,36,-39}, -{44,36,-38}, -{44,36,-37}, -{44,36,-36}, -{44,36,-35}, -{44,36,-34}, -{44,36,-33}, -{44,36,-32}, -{44,36,-31}, -{44,36,-30}, -{44,36,-29}, -{44,36,-28}, -{44,36,-27}, -{44,36,-26}, -{44,36,-25}, -{44,36,-24}, -{44,36,-23}, -{44,36,-22}, -{44,36,-21}, -{44,36,-20}, -{44,36,-19}, -{44,36,-18}, -{44,36,-17}, -{44,36,-16}, -{44,36,-15}, -{44,36,-14}, -{44,36,-13}, -{44,36,-12}, -{44,36,-11}, -{44,36,-10}, -{44,36,-9}, -{44,36,-8}, -{44,36,-7}, -{44,36,-6}, -{44,36,-5}, -{44,36,-4}, -{44,36,-3}, -{44,36,-2}, -{44,36,-1}, -{44,36,0}, -{44,36,1}, -{44,36,2}, -{44,36,3}, -{44,36,4}, -{44,36,5}, -{44,36,6}, -{44,36,7}, -{44,36,8}, -{44,36,9}, -{44,36,10}, -{44,36,11}, -{44,36,12}, -{44,36,13}, -{44,36,14}, -{44,36,15}, -{44,36,16}, -{44,36,17}, -{44,36,18}, -{44,36,19}, -{44,36,20}, -{44,36,21}, -{44,36,22}, -{44,36,23}, -{44,36,24}, -{44,36,25}, -{44,36,26}, -{44,36,27}, -{44,36,28}, -{44,36,29}, -{44,36,30}, -{44,36,31}, -{44,36,32}, -{44,36,33}, -{44,36,34}, -{44,36,35}, -{44,36,36}, -{44,36,37}, -{44,36,38}, -{44,36,39}, -{44,36,40}, -{44,36,41}, -{44,36,42}, -{44,36,43}, -{44,36,44}, -{44,36,45}, -{44,36,46}, -{44,36,47}, -{44,36,48}, -{44,36,49}, -{44,36,50}, -{44,36,51}, -{44,36,52}, -{44,36,53}, -{44,36,54}, -{44,37,-80}, -{44,37,-79}, -{44,37,-78}, -{44,37,-77}, -{44,37,-76}, -{44,37,-75}, -{44,37,-74}, -{44,37,-73}, -{44,37,-72}, -{44,37,-71}, -{44,37,-70}, -{44,37,-69}, -{44,37,-68}, -{44,37,-67}, -{44,37,-66}, -{44,37,-65}, -{44,37,-64}, -{44,37,-63}, -{44,37,-62}, -{44,37,-61}, -{44,37,-60}, -{44,37,-59}, -{44,37,-58}, -{44,37,-57}, -{44,37,-56}, -{44,37,-55}, -{44,37,-54}, -{44,37,-53}, -{44,37,-52}, -{44,37,-51}, -{44,37,-50}, -{44,37,-49}, -{44,37,-48}, -{44,37,-47}, -{44,37,-46}, -{44,37,-45}, -{44,37,-44}, -{44,37,-43}, -{44,37,-42}, -{44,37,-41}, -{44,37,-40}, -{44,37,-39}, -{44,37,-38}, -{44,37,-37}, -{44,37,-36}, -{44,37,-35}, -{44,37,-34}, -{44,37,-33}, -{44,37,-32}, -{44,37,-31}, -{44,37,-30}, -{44,37,-29}, -{44,37,-28}, -{44,37,-27}, -{44,37,-26}, -{44,37,-25}, -{44,37,-24}, -{44,37,-23}, -{44,37,-22}, -{44,37,-21}, -{44,37,-20}, -{44,37,-19}, -{44,37,-18}, -{44,37,-17}, -{44,37,-16}, -{44,37,-15}, -{44,37,-14}, -{44,37,-13}, -{44,37,-12}, -{44,37,-11}, -{44,37,-10}, -{44,37,-9}, -{44,37,-8}, -{44,37,-7}, -{44,37,-6}, -{44,37,-5}, -{44,37,-4}, -{44,37,-3}, -{44,37,-2}, -{44,37,-1}, -{44,37,0}, -{44,37,1}, -{44,37,2}, -{44,37,3}, -{44,37,4}, -{44,37,5}, -{44,37,6}, -{44,37,7}, -{44,37,8}, -{44,37,9}, -{44,37,10}, -{44,37,11}, -{44,37,12}, -{44,37,13}, -{44,37,14}, -{44,37,15}, -{44,37,16}, -{44,37,17}, -{44,37,18}, -{44,37,19}, -{44,37,20}, -{44,37,21}, -{44,37,22}, -{44,37,23}, -{44,37,24}, -{44,37,25}, -{44,37,26}, -{44,37,27}, -{44,37,28}, -{44,37,29}, -{44,37,30}, -{44,37,31}, -{44,37,32}, -{44,37,33}, -{44,37,34}, -{44,37,35}, -{44,37,36}, -{44,37,37}, -{44,37,38}, -{44,37,39}, -{44,37,40}, -{44,37,41}, -{44,37,42}, -{44,37,43}, -{44,37,44}, -{44,37,45}, -{44,37,46}, -{44,37,47}, -{44,37,48}, -{44,37,49}, -{44,37,50}, -{44,37,51}, -{44,37,52}, -{44,37,53}, -{44,37,54}, -{44,38,-81}, -{44,38,-80}, -{44,38,-79}, -{44,38,-78}, -{44,38,-77}, -{44,38,-76}, -{44,38,-75}, -{44,38,-74}, -{44,38,-73}, -{44,38,-72}, -{44,38,-71}, -{44,38,-70}, -{44,38,-69}, -{44,38,-68}, -{44,38,-67}, -{44,38,-66}, -{44,38,-65}, -{44,38,-64}, -{44,38,-63}, -{44,38,-62}, -{44,38,-61}, -{44,38,-60}, -{44,38,-59}, -{44,38,-58}, -{44,38,-57}, -{44,38,-56}, -{44,38,-55}, -{44,38,-54}, -{44,38,-53}, -{44,38,-52}, -{44,38,-51}, -{44,38,-50}, -{44,38,-49}, -{44,38,-48}, -{44,38,-47}, -{44,38,-46}, -{44,38,-45}, -{44,38,-44}, -{44,38,-43}, -{44,38,-42}, -{44,38,-41}, -{44,38,-40}, -{44,38,-39}, -{44,38,-38}, -{44,38,-37}, -{44,38,-36}, -{44,38,-35}, -{44,38,-34}, -{44,38,-33}, -{44,38,-32}, -{44,38,-31}, -{44,38,-30}, -{44,38,-29}, -{44,38,-28}, -{44,38,-27}, -{44,38,-26}, -{44,38,-25}, -{44,38,-24}, -{44,38,-23}, -{44,38,-22}, -{44,38,-21}, -{44,38,-20}, -{44,38,-19}, -{44,38,-18}, -{44,38,-17}, -{44,38,-16}, -{44,38,-15}, -{44,38,-14}, -{44,38,-13}, -{44,38,-12}, -{44,38,-11}, -{44,38,-10}, -{44,38,-9}, -{44,38,-8}, -{44,38,-7}, -{44,38,-6}, -{44,38,-5}, -{44,38,-4}, -{44,38,-3}, -{44,38,-2}, -{44,38,-1}, -{44,38,0}, -{44,38,1}, -{44,38,2}, -{44,38,3}, -{44,38,4}, -{44,38,5}, -{44,38,6}, -{44,38,7}, -{44,38,8}, -{44,38,9}, -{44,38,10}, -{44,38,11}, -{44,38,12}, -{44,38,13}, -{44,38,14}, -{44,38,15}, -{44,38,16}, -{44,38,17}, -{44,38,18}, -{44,38,19}, -{44,38,20}, -{44,38,21}, -{44,38,22}, -{44,38,23}, -{44,38,24}, -{44,38,25}, -{44,38,26}, -{44,38,27}, -{44,38,28}, -{44,38,29}, -{44,38,30}, -{44,38,31}, -{44,38,32}, -{44,38,33}, -{44,38,34}, -{44,38,35}, -{44,38,36}, -{44,38,37}, -{44,38,38}, -{44,38,39}, -{44,38,40}, -{44,38,41}, -{44,38,42}, -{44,38,43}, -{44,38,44}, -{44,38,45}, -{44,38,46}, -{44,38,47}, -{44,38,48}, -{44,38,49}, -{44,38,50}, -{44,38,51}, -{44,38,52}, -{44,38,53}, -{44,38,54}, -{44,39,-82}, -{44,39,-81}, -{44,39,-80}, -{44,39,-79}, -{44,39,-78}, -{44,39,-77}, -{44,39,-76}, -{44,39,-75}, -{44,39,-74}, -{44,39,-73}, -{44,39,-72}, -{44,39,-71}, -{44,39,-70}, -{44,39,-69}, -{44,39,-68}, -{44,39,-67}, -{44,39,-66}, -{44,39,-65}, -{44,39,-64}, -{44,39,-63}, -{44,39,-62}, -{44,39,-61}, -{44,39,-60}, -{44,39,-59}, -{44,39,-58}, -{44,39,-57}, -{44,39,-56}, -{44,39,-55}, -{44,39,-54}, -{44,39,-53}, -{44,39,-52}, -{44,39,-51}, -{44,39,-50}, -{44,39,-49}, -{44,39,-48}, -{44,39,-47}, -{44,39,-46}, -{44,39,-45}, -{44,39,-44}, -{44,39,-43}, -{44,39,-42}, -{44,39,-41}, -{44,39,-40}, -{44,39,-39}, -{44,39,-38}, -{44,39,-37}, -{44,39,-36}, -{44,39,-35}, -{44,39,-34}, -{44,39,-33}, -{44,39,-32}, -{44,39,-31}, -{44,39,-30}, -{44,39,-29}, -{44,39,-28}, -{44,39,-27}, -{44,39,-26}, -{44,39,-25}, -{44,39,-24}, -{44,39,-23}, -{44,39,-22}, -{44,39,-21}, -{44,39,-20}, -{44,39,-19}, -{44,39,-18}, -{44,39,-17}, -{44,39,-16}, -{44,39,-15}, -{44,39,-14}, -{44,39,-13}, -{44,39,-12}, -{44,39,-11}, -{44,39,-10}, -{44,39,-9}, -{44,39,-8}, -{44,39,-7}, -{44,39,-6}, -{44,39,-5}, -{44,39,-4}, -{44,39,-3}, -{44,39,-2}, -{44,39,-1}, -{44,39,0}, -{44,39,1}, -{44,39,2}, -{44,39,3}, -{44,39,4}, -{44,39,5}, -{44,39,6}, -{44,39,7}, -{44,39,8}, -{44,39,9}, -{44,39,10}, -{44,39,11}, -{44,39,12}, -{44,39,13}, -{44,39,14}, -{44,39,15}, -{44,39,16}, -{44,39,17}, -{44,39,18}, -{44,39,19}, -{44,39,20}, -{44,39,21}, -{44,39,22}, -{44,39,23}, -{44,39,24}, -{44,39,25}, -{44,39,26}, -{44,39,27}, -{44,39,28}, -{44,39,29}, -{44,39,30}, -{44,39,31}, -{44,39,32}, -{44,39,33}, -{44,39,34}, -{44,39,35}, -{44,39,36}, -{44,39,37}, -{44,39,38}, -{44,39,39}, -{44,39,40}, -{44,39,41}, -{44,39,42}, -{44,39,43}, -{44,39,44}, -{44,39,45}, -{44,39,46}, -{44,39,47}, -{44,39,48}, -{44,39,49}, -{44,39,50}, -{44,39,51}, -{44,39,52}, -{44,39,53}, -{44,39,54}, -{44,40,-83}, -{44,40,-82}, -{44,40,-81}, -{44,40,-80}, -{44,40,-79}, -{44,40,-78}, -{44,40,-77}, -{44,40,-76}, -{44,40,-75}, -{44,40,-74}, -{44,40,-73}, -{44,40,-72}, -{44,40,-71}, -{44,40,-70}, -{44,40,-69}, -{44,40,-68}, -{44,40,-67}, -{44,40,-66}, -{44,40,-65}, -{44,40,-64}, -{44,40,-63}, -{44,40,-62}, -{44,40,-61}, -{44,40,-60}, -{44,40,-59}, -{44,40,-58}, -{44,40,-57}, -{44,40,-56}, -{44,40,-55}, -{44,40,-54}, -{44,40,-53}, -{44,40,-52}, -{44,40,-51}, -{44,40,-50}, -{44,40,-49}, -{44,40,-48}, -{44,40,-47}, -{44,40,-46}, -{44,40,-45}, -{44,40,-44}, -{44,40,-43}, -{44,40,-42}, -{44,40,-41}, -{44,40,-40}, -{44,40,-39}, -{44,40,-38}, -{44,40,-37}, -{44,40,-36}, -{44,40,-35}, -{44,40,-34}, -{44,40,-33}, -{44,40,-32}, -{44,40,-31}, -{44,40,-30}, -{44,40,-29}, -{44,40,-28}, -{44,40,-27}, -{44,40,-26}, -{44,40,-25}, -{44,40,-24}, -{44,40,-23}, -{44,40,-22}, -{44,40,-21}, -{44,40,-20}, -{44,40,-19}, -{44,40,-18}, -{44,40,-17}, -{44,40,-16}, -{44,40,-15}, -{44,40,-14}, -{44,40,-13}, -{44,40,-12}, -{44,40,-11}, -{44,40,-10}, -{44,40,-9}, -{44,40,-8}, -{44,40,-7}, -{44,40,-6}, -{44,40,-5}, -{44,40,-4}, -{44,40,-3}, -{44,40,-2}, -{44,40,-1}, -{44,40,0}, -{44,40,1}, -{44,40,2}, -{44,40,3}, -{44,40,4}, -{44,40,5}, -{44,40,6}, -{44,40,7}, -{44,40,8}, -{44,40,9}, -{44,40,10}, -{44,40,11}, -{44,40,12}, -{44,40,13}, -{44,40,14}, -{44,40,15}, -{44,40,16}, -{44,40,17}, -{44,40,18}, -{44,40,19}, -{44,40,20}, -{44,40,21}, -{44,40,22}, -{44,40,23}, -{44,40,24}, -{44,40,25}, -{44,40,26}, -{44,40,27}, -{44,40,28}, -{44,40,29}, -{44,40,30}, -{44,40,31}, -{44,40,32}, -{44,40,33}, -{44,40,34}, -{44,40,35}, -{44,40,36}, -{44,40,37}, -{44,40,38}, -{44,40,39}, -{44,40,40}, -{44,40,41}, -{44,40,42}, -{44,40,43}, -{44,40,44}, -{44,40,45}, -{44,40,46}, -{44,40,47}, -{44,40,48}, -{44,40,49}, -{44,40,50}, -{44,40,51}, -{44,40,52}, -{44,40,53}, -{44,40,54}, -{44,41,-84}, -{44,41,-83}, -{44,41,-82}, -{44,41,-81}, -{44,41,-80}, -{44,41,-79}, -{44,41,-78}, -{44,41,-77}, -{44,41,-76}, -{44,41,-75}, -{44,41,-74}, -{44,41,-73}, -{44,41,-72}, -{44,41,-71}, -{44,41,-70}, -{44,41,-69}, -{44,41,-68}, -{44,41,-67}, -{44,41,-66}, -{44,41,-65}, -{44,41,-64}, -{44,41,-63}, -{44,41,-62}, -{44,41,-61}, -{44,41,-60}, -{44,41,-59}, -{44,41,-58}, -{44,41,-57}, -{44,41,-56}, -{44,41,-55}, -{44,41,-54}, -{44,41,-53}, -{44,41,-52}, -{44,41,-51}, -{44,41,-50}, -{44,41,-49}, -{44,41,-48}, -{44,41,-47}, -{44,41,-46}, -{44,41,-45}, -{44,41,-44}, -{44,41,-43}, -{44,41,-42}, -{44,41,-41}, -{44,41,-40}, -{44,41,-39}, -{44,41,-38}, -{44,41,-37}, -{44,41,-36}, -{44,41,-35}, -{44,41,-34}, -{44,41,-33}, -{44,41,-32}, -{44,41,-31}, -{44,41,-30}, -{44,41,-29}, -{44,41,-28}, -{44,41,-27}, -{44,41,-26}, -{44,41,-25}, -{44,41,-24}, -{44,41,-23}, -{44,41,-22}, -{44,41,-21}, -{44,41,-20}, -{44,41,-19}, -{44,41,-18}, -{44,41,-17}, -{44,41,-16}, -{44,41,-15}, -{44,41,-14}, -{44,41,-13}, -{44,41,-12}, -{44,41,-11}, -{44,41,-10}, -{44,41,-9}, -{44,41,-8}, -{44,41,-7}, -{44,41,-6}, -{44,41,-5}, -{44,41,-4}, -{44,41,-3}, -{44,41,-2}, -{44,41,-1}, -{44,41,0}, -{44,41,1}, -{44,41,2}, -{44,41,3}, -{44,41,4}, -{44,41,5}, -{44,41,6}, -{44,41,7}, -{44,41,8}, -{44,41,9}, -{44,41,10}, -{44,41,11}, -{44,41,12}, -{44,41,13}, -{44,41,14}, -{44,41,15}, -{44,41,16}, -{44,41,17}, -{44,41,18}, -{44,41,19}, -{44,41,20}, -{44,41,21}, -{44,41,22}, -{44,41,23}, -{44,41,24}, -{44,41,25}, -{44,41,26}, -{44,41,27}, -{44,41,28}, -{44,41,29}, -{44,41,30}, -{44,41,31}, -{44,41,32}, -{44,41,33}, -{44,41,34}, -{44,41,35}, -{44,41,36}, -{44,41,37}, -{44,41,38}, -{44,41,39}, -{44,41,40}, -{44,41,41}, -{44,41,42}, -{44,41,43}, -{44,41,44}, -{44,41,45}, -{44,41,46}, -{44,41,47}, -{44,41,48}, -{44,41,49}, -{44,41,50}, -{44,41,51}, -{44,41,52}, -{44,41,53}, -{44,41,54}, -{44,42,-85}, -{44,42,-84}, -{44,42,-83}, -{44,42,-82}, -{44,42,-81}, -{44,42,-80}, -{44,42,-79}, -{44,42,-78}, -{44,42,-77}, -{44,42,-76}, -{44,42,-75}, -{44,42,-74}, -{44,42,-73}, -{44,42,-72}, -{44,42,-71}, -{44,42,-70}, -{44,42,-69}, -{44,42,-68}, -{44,42,-67}, -{44,42,-66}, -{44,42,-65}, -{44,42,-64}, -{44,42,-63}, -{44,42,-62}, -{44,42,-61}, -{44,42,-60}, -{44,42,-59}, -{44,42,-58}, -{44,42,-57}, -{44,42,-56}, -{44,42,-55}, -{44,42,-54}, -{44,42,-53}, -{44,42,-52}, -{44,42,-51}, -{44,42,-50}, -{44,42,-49}, -{44,42,-48}, -{44,42,-47}, -{44,42,-46}, -{44,42,-45}, -{44,42,-44}, -{44,42,-43}, -{44,42,-42}, -{44,42,-41}, -{44,42,-40}, -{44,42,-39}, -{44,42,-38}, -{44,42,-37}, -{44,42,-36}, -{44,42,-35}, -{44,42,-34}, -{44,42,-33}, -{44,42,-32}, -{44,42,-31}, -{44,42,-30}, -{44,42,-29}, -{44,42,-28}, -{44,42,-27}, -{44,42,-26}, -{44,42,-25}, -{44,42,-24}, -{44,42,-23}, -{44,42,-22}, -{44,42,-21}, -{44,42,-20}, -{44,42,-19}, -{44,42,-18}, -{44,42,-17}, -{44,42,-16}, -{44,42,-15}, -{44,42,-14}, -{44,42,-13}, -{44,42,-12}, -{44,42,-11}, -{44,42,-10}, -{44,42,-9}, -{44,42,-8}, -{44,42,-7}, -{44,42,-6}, -{44,42,-5}, -{44,42,-4}, -{44,42,-3}, -{44,42,-2}, -{44,42,-1}, -{44,42,0}, -{44,42,1}, -{44,42,2}, -{44,42,3}, -{44,42,4}, -{44,42,5}, -{44,42,6}, -{44,42,7}, -{44,42,8}, -{44,42,9}, -{44,42,10}, -{44,42,11}, -{44,42,12}, -{44,42,13}, -{44,42,14}, -{44,42,15}, -{44,42,16}, -{44,42,17}, -{44,42,18}, -{44,42,19}, -{44,42,20}, -{44,42,21}, -{44,42,22}, -{44,42,23}, -{44,42,24}, -{44,42,25}, -{44,42,26}, -{44,42,27}, -{44,42,28}, -{44,42,29}, -{44,42,30}, -{44,42,31}, -{44,42,32}, -{44,42,33}, -{44,42,34}, -{44,42,35}, -{44,42,36}, -{44,42,37}, -{44,42,38}, -{44,42,39}, -{44,42,40}, -{44,42,41}, -{44,42,42}, -{44,42,43}, -{44,42,44}, -{44,42,45}, -{44,42,46}, -{44,42,47}, -{44,42,48}, -{44,42,49}, -{44,42,50}, -{44,42,51}, -{44,42,52}, -{44,42,53}, -{44,42,54}, -{44,43,-86}, -{44,43,-85}, -{44,43,-84}, -{44,43,-83}, -{44,43,-82}, -{44,43,-81}, -{44,43,-80}, -{44,43,-79}, -{44,43,-78}, -{44,43,-77}, -{44,43,-76}, -{44,43,-75}, -{44,43,-74}, -{44,43,-73}, -{44,43,-72}, -{44,43,-71}, -{44,43,-70}, -{44,43,-69}, -{44,43,-68}, -{44,43,-67}, -{44,43,-66}, -{44,43,-65}, -{44,43,-64}, -{44,43,-63}, -{44,43,-62}, -{44,43,-61}, -{44,43,-60}, -{44,43,-59}, -{44,43,-58}, -{44,43,-57}, -{44,43,-56}, -{44,43,-55}, -{44,43,-54}, -{44,43,-53}, -{44,43,-52}, -{44,43,-51}, -{44,43,-50}, -{44,43,-49}, -{44,43,-48}, -{44,43,-47}, -{44,43,-46}, -{44,43,-45}, -{44,43,-44}, -{44,43,-43}, -{44,43,-42}, -{44,43,-41}, -{44,43,-40}, -{44,43,-39}, -{44,43,-38}, -{44,43,-37}, -{44,43,-36}, -{44,43,-35}, -{44,43,-34}, -{44,43,-33}, -{44,43,-32}, -{44,43,-31}, -{44,43,-30}, -{44,43,-29}, -{44,43,-28}, -{44,43,-27}, -{44,43,-26}, -{44,43,-25}, -{44,43,-24}, -{44,43,-23}, -{44,43,-22}, -{44,43,-21}, -{44,43,-20}, -{44,43,-19}, -{44,43,-18}, -{44,43,-17}, -{44,43,-16}, -{44,43,-15}, -{44,43,-14}, -{44,43,-13}, -{44,43,-12}, -{44,43,-11}, -{44,43,-10}, -{44,43,-9}, -{44,43,-8}, -{44,43,-7}, -{44,43,-6}, -{44,43,-5}, -{44,43,-4}, -{44,43,-3}, -{44,43,-2}, -{44,43,-1}, -{44,43,0}, -{44,43,1}, -{44,43,2}, -{44,43,3}, -{44,43,4}, -{44,43,5}, -{44,43,6}, -{44,43,7}, -{44,43,8}, -{44,43,9}, -{44,43,10}, -{44,43,11}, -{44,43,12}, -{44,43,13}, -{44,43,14}, -{44,43,15}, -{44,43,16}, -{44,43,17}, -{44,43,18}, -{44,43,19}, -{44,43,20}, -{44,43,21}, -{44,43,22}, -{44,43,23}, -{44,43,24}, -{44,43,25}, -{44,43,26}, -{44,43,27}, -{44,43,28}, -{44,43,29}, -{44,43,30}, -{44,43,31}, -{44,43,32}, -{44,43,33}, -{44,43,34}, -{44,43,35}, -{44,43,36}, -{44,43,37}, -{44,43,38}, -{44,43,39}, -{44,43,40}, -{44,43,41}, -{44,43,42}, -{44,43,43}, -{44,43,44}, -{44,43,45}, -{44,43,46}, -{44,43,47}, -{44,43,48}, -{44,43,49}, -{44,43,50}, -{44,43,51}, -{44,43,52}, -{44,43,53}, -{44,43,54}, -{44,44,-87}, -{44,44,-86}, -{44,44,-85}, -{44,44,-84}, -{44,44,-83}, -{44,44,-82}, -{44,44,-81}, -{44,44,-80}, -{44,44,-79}, -{44,44,-78}, -{44,44,-77}, -{44,44,-76}, -{44,44,-75}, -{44,44,-74}, -{44,44,-73}, -{44,44,-72}, -{44,44,-71}, -{44,44,-70}, -{44,44,-69}, -{44,44,-68}, -{44,44,-67}, -{44,44,-66}, -{44,44,-65}, -{44,44,-64}, -{44,44,-63}, -{44,44,-62}, -{44,44,-61}, -{44,44,-60}, -{44,44,-59}, -{44,44,-58}, -{44,44,-57}, -{44,44,-56}, -{44,44,-55}, -{44,44,-54}, -{44,44,-53}, -{44,44,-52}, -{44,44,-51}, -{44,44,-50}, -{44,44,-49}, -{44,44,-48}, -{44,44,-47}, -{44,44,-46}, -{44,44,-45}, -{44,44,-44}, -{44,44,-43}, -{44,44,-42}, -{44,44,-41}, -{44,44,-40}, -{44,44,-39}, -{44,44,-38}, -{44,44,-37}, -{44,44,-36}, -{44,44,-35}, -{44,44,-34}, -{44,44,-33}, -{44,44,-32}, -{44,44,-31}, -{44,44,-30}, -{44,44,-29}, -{44,44,-28}, -{44,44,-27}, -{44,44,-26}, -{44,44,-25}, -{44,44,-24}, -{44,44,-23}, -{44,44,-22}, -{44,44,-21}, -{44,44,-20}, -{44,44,-19}, -{44,44,-18}, -{44,44,-17}, -{44,44,-16}, -{44,44,-15}, -{44,44,-14}, -{44,44,-13}, -{44,44,-12}, -{44,44,-11}, -{44,44,-10}, -{44,44,-9}, -{44,44,-8}, -{44,44,-7}, -{44,44,-6}, -{44,44,-5}, -{44,44,-4}, -{44,44,-3}, -{44,44,-2}, -{44,44,-1}, -{44,44,0}, -{44,44,1}, -{44,44,2}, -{44,44,3}, -{44,44,4}, -{44,44,5}, -{44,44,6}, -{44,44,7}, -{44,44,8}, -{44,44,9}, -{44,44,10}, -{44,44,11}, -{44,44,12}, -{44,44,13}, -{44,44,14}, -{44,44,15}, -{44,44,16}, -{44,44,17}, -{44,44,18}, -{44,44,19}, -{44,44,20}, -{44,44,21}, -{44,44,22}, -{44,44,23}, -{44,44,24}, -{44,44,25}, -{44,44,26}, -{44,44,27}, -{44,44,28}, -{44,44,29}, -{44,44,30}, -{44,44,31}, -{44,44,32}, -{44,44,33}, -{44,44,34}, -{44,44,35}, -{44,44,36}, -{44,44,37}, -{44,44,38}, -{44,44,39}, -{44,44,40}, -{44,44,41}, -{44,44,42}, -{44,44,43}, -{44,44,44}, -{44,44,45}, -{44,44,46}, -{44,44,47}, -{44,44,48}, -{44,44,49}, -{44,44,50}, -{44,44,51}, -{44,44,52}, -{44,44,53}, -{44,44,54}, -{44,44,55}, -{44,45,-88}, -{44,45,-87}, -{44,45,-86}, -{44,45,-85}, -{44,45,-84}, -{44,45,-83}, -{44,45,-82}, -{44,45,-81}, -{44,45,-80}, -{44,45,-79}, -{44,45,-78}, -{44,45,-77}, -{44,45,-76}, -{44,45,-75}, -{44,45,-74}, -{44,45,-73}, -{44,45,-72}, -{44,45,-71}, -{44,45,-70}, -{44,45,-69}, -{44,45,-68}, -{44,45,-67}, -{44,45,-66}, -{44,45,-65}, -{44,45,-64}, -{44,45,-63}, -{44,45,-62}, -{44,45,-61}, -{44,45,-60}, -{44,45,-59}, -{44,45,-58}, -{44,45,-57}, -{44,45,-56}, -{44,45,-55}, -{44,45,-54}, -{44,45,-53}, -{44,45,-52}, -{44,45,-51}, -{44,45,-50}, -{44,45,-49}, -{44,45,-48}, -{44,45,-47}, -{44,45,-46}, -{44,45,-45}, -{44,45,-44}, -{44,45,-43}, -{44,45,-42}, -{44,45,-41}, -{44,45,-40}, -{44,45,-39}, -{44,45,-38}, -{44,45,-37}, -{44,45,-36}, -{44,45,-35}, -{44,45,-34}, -{44,45,-33}, -{44,45,-32}, -{44,45,-31}, -{44,45,-30}, -{44,45,-29}, -{44,45,-28}, -{44,45,-27}, -{44,45,-26}, -{44,45,-25}, -{44,45,-24}, -{44,45,-23}, -{44,45,-22}, -{44,45,-21}, -{44,45,-20}, -{44,45,-19}, -{44,45,-18}, -{44,45,-17}, -{44,45,-16}, -{44,45,-15}, -{44,45,-14}, -{44,45,-13}, -{44,45,-12}, -{44,45,-11}, -{44,45,-10}, -{44,45,-9}, -{44,45,-8}, -{44,45,-7}, -{44,45,-6}, -{44,45,-5}, -{44,45,-4}, -{44,45,-3}, -{44,45,-2}, -{44,45,-1}, -{44,45,0}, -{44,45,1}, -{44,45,2}, -{44,45,3}, -{44,45,4}, -{44,45,5}, -{44,45,6}, -{44,45,7}, -{44,45,8}, -{44,45,9}, -{44,45,10}, -{44,45,11}, -{44,45,12}, -{44,45,13}, -{44,45,14}, -{44,45,15}, -{44,45,16}, -{44,45,17}, -{44,45,18}, -{44,45,19}, -{44,45,20}, -{44,45,21}, -{44,45,22}, -{44,45,23}, -{44,45,24}, -{44,45,25}, -{44,45,26}, -{44,45,27}, -{44,45,28}, -{44,45,29}, -{44,45,30}, -{44,45,31}, -{44,45,32}, -{44,45,33}, -{44,45,34}, -{44,45,35}, -{44,45,36}, -{44,45,37}, -{44,45,38}, -{44,45,39}, -{44,45,40}, -{44,45,41}, -{44,45,42}, -{44,45,43}, -{44,45,44}, -{44,45,45}, -{44,45,46}, -{44,45,47}, -{44,45,48}, -{44,45,49}, -{44,45,50}, -{44,45,51}, -{44,45,52}, -{44,45,53}, -{44,45,54}, -{44,45,55}, -{44,46,-88}, -{44,46,-87}, -{44,46,-86}, -{44,46,-85}, -{44,46,-84}, -{44,46,-83}, -{44,46,-82}, -{44,46,-81}, -{44,46,-80}, -{44,46,-79}, -{44,46,-78}, -{44,46,-77}, -{44,46,-76}, -{44,46,-75}, -{44,46,-74}, -{44,46,-73}, -{44,46,-72}, -{44,46,-71}, -{44,46,-70}, -{44,46,-69}, -{44,46,-68}, -{44,46,-67}, -{44,46,-66}, -{44,46,-65}, -{44,46,-64}, -{44,46,-63}, -{44,46,-62}, -{44,46,-61}, -{44,46,-60}, -{44,46,-59}, -{44,46,-58}, -{44,46,-57}, -{44,46,-56}, -{44,46,-55}, -{44,46,-54}, -{44,46,-53}, -{44,46,-52}, -{44,46,-51}, -{44,46,-50}, -{44,46,-49}, -{44,46,-48}, -{44,46,-47}, -{44,46,-46}, -{44,46,-45}, -{44,46,-44}, -{44,46,-43}, -{44,46,-42}, -{44,46,-41}, -{44,46,-40}, -{44,46,-39}, -{44,46,-38}, -{44,46,-37}, -{44,46,-36}, -{44,46,-35}, -{44,46,-34}, -{44,46,-33}, -{44,46,-32}, -{44,46,-31}, -{44,46,-30}, -{44,46,-29}, -{44,46,-28}, -{44,46,-27}, -{44,46,-26}, -{44,46,-25}, -{44,46,-24}, -{44,46,-23}, -{44,46,-22}, -{44,46,-21}, -{44,46,-20}, -{44,46,-19}, -{44,46,-18}, -{44,46,-17}, -{44,46,-16}, -{44,46,-15}, -{44,46,-14}, -{44,46,-13}, -{44,46,-12}, -{44,46,-11}, -{44,46,-10}, -{44,46,-9}, -{44,46,-8}, -{44,46,-7}, -{44,46,-6}, -{44,46,-5}, -{44,46,-4}, -{44,46,-3}, -{44,46,-2}, -{44,46,-1}, -{44,46,0}, -{44,46,1}, -{44,46,2}, -{44,46,3}, -{44,46,4}, -{44,46,5}, -{44,46,6}, -{44,46,7}, -{44,46,8}, -{44,46,9}, -{44,46,10}, -{44,46,11}, -{44,46,12}, -{44,46,13}, -{44,46,14}, -{44,46,15}, -{44,46,16}, -{44,46,17}, -{44,46,18}, -{44,46,19}, -{44,46,20}, -{44,46,21}, -{44,46,22}, -{44,46,23}, -{44,46,24}, -{44,46,25}, -{44,46,26}, -{44,46,27}, -{44,46,28}, -{44,46,29}, -{44,46,30}, -{44,46,31}, -{44,46,32}, -{44,46,33}, -{44,46,34}, -{44,46,35}, -{44,46,36}, -{44,46,37}, -{44,46,38}, -{44,46,39}, -{44,46,40}, -{44,46,41}, -{44,46,42}, -{44,46,43}, -{44,46,44}, -{44,46,45}, -{44,46,46}, -{44,46,47}, -{44,46,48}, -{44,46,49}, -{44,46,50}, -{44,46,51}, -{44,46,52}, -{44,46,53}, -{44,46,54}, -{44,46,55}, -{44,47,-88}, -{44,47,-87}, -{44,47,-86}, -{44,47,-85}, -{44,47,-84}, -{44,47,-83}, -{44,47,-82}, -{44,47,-81}, -{44,47,-80}, -{44,47,-79}, -{44,47,-78}, -{44,47,-77}, -{44,47,-76}, -{44,47,-75}, -{44,47,-74}, -{44,47,-73}, -{44,47,-72}, -{44,47,-71}, -{44,47,-70}, -{44,47,-69}, -{44,47,-68}, -{44,47,-67}, -{44,47,-66}, -{44,47,-65}, -{44,47,-64}, -{44,47,-63}, -{44,47,-62}, -{44,47,-61}, -{44,47,-60}, -{44,47,-59}, -{44,47,-58}, -{44,47,-57}, -{44,47,-56}, -{44,47,-55}, -{44,47,-54}, -{44,47,-53}, -{44,47,-52}, -{44,47,-51}, -{44,47,-50}, -{44,47,-49}, -{44,47,-48}, -{44,47,-47}, -{44,47,-46}, -{44,47,-45}, -{44,47,-44}, -{44,47,-43}, -{44,47,-42}, -{44,47,-41}, -{44,47,-40}, -{44,47,-39}, -{44,47,-38}, -{44,47,-37}, -{44,47,-36}, -{44,47,-35}, -{44,47,-34}, -{44,47,-33}, -{44,47,-32}, -{44,47,-31}, -{44,47,-30}, -{44,47,-29}, -{44,47,-28}, -{44,47,-27}, -{44,47,-26}, -{44,47,-25}, -{44,47,-24}, -{44,47,-23}, -{44,47,-22}, -{44,47,-21}, -{44,47,-20}, -{44,47,-19}, -{44,47,-18}, -{44,47,-17}, -{44,47,-16}, -{44,47,-15}, -{44,47,-14}, -{44,47,-13}, -{44,47,-12}, -{44,47,-11}, -{44,47,-10}, -{44,47,-9}, -{44,47,-8}, -{44,47,-7}, -{44,47,-6}, -{44,47,-5}, -{44,47,-4}, -{44,47,-3}, -{44,47,-2}, -{44,47,-1}, -{44,47,0}, -{44,47,1}, -{44,47,2}, -{44,47,3}, -{44,47,4}, -{44,47,5}, -{44,47,6}, -{44,47,7}, -{44,47,8}, -{44,47,9}, -{44,47,10}, -{44,47,11}, -{44,47,12}, -{44,47,13}, -{44,47,14}, -{44,47,15}, -{44,47,16}, -{44,47,17}, -{44,47,18}, -{44,47,19}, -{44,47,20}, -{44,47,21}, -{44,47,22}, -{44,47,23}, -{44,47,24}, -{44,47,25}, -{44,47,26}, -{44,47,27}, -{44,47,28}, -{44,47,29}, -{44,47,30}, -{44,47,31}, -{44,47,32}, -{44,47,33}, -{44,47,34}, -{44,47,35}, -{44,47,36}, -{44,47,37}, -{44,47,38}, -{44,47,39}, -{44,47,40}, -{44,47,41}, -{44,47,42}, -{44,47,43}, -{44,47,44}, -{44,47,45}, -{44,47,46}, -{44,47,47}, -{44,47,48}, -{44,47,49}, -{44,47,50}, -{44,47,51}, -{44,47,52}, -{44,47,53}, -{44,47,54}, -{44,47,55}, -{44,48,-88}, -{44,48,-87}, -{44,48,-86}, -{44,48,-85}, -{44,48,-84}, -{44,48,-83}, -{44,48,-82}, -{44,48,-81}, -{44,48,-80}, -{44,48,-79}, -{44,48,-78}, -{44,48,-77}, -{44,48,-76}, -{44,48,-75}, -{44,48,-74}, -{44,48,-73}, -{44,48,-72}, -{44,48,-71}, -{44,48,-70}, -{44,48,-69}, -{44,48,-68}, -{44,48,-67}, -{44,48,-66}, -{44,48,-65}, -{44,48,-64}, -{44,48,-63}, -{44,48,-62}, -{44,48,-61}, -{44,48,-60}, -{44,48,-59}, -{44,48,-58}, -{44,48,-57}, -{44,48,-56}, -{44,48,-55}, -{44,48,-54}, -{44,48,-53}, -{44,48,-52}, -{44,48,-51}, -{44,48,-50}, -{44,48,-49}, -{44,48,-48}, -{44,48,-47}, -{44,48,-46}, -{44,48,-45}, -{44,48,-44}, -{44,48,-43}, -{44,48,-42}, -{44,48,-41}, -{44,48,-40}, -{44,48,-39}, -{44,48,-38}, -{44,48,-37}, -{44,48,-36}, -{44,48,-35}, -{44,48,-34}, -{44,48,-33}, -{44,48,-32}, -{44,48,-31}, -{44,48,-30}, -{44,48,-29}, -{44,48,-28}, -{44,48,-27}, -{44,48,-26}, -{44,48,-25}, -{44,48,-24}, -{44,48,-23}, -{44,48,-22}, -{44,48,-21}, -{44,48,-20}, -{44,48,-19}, -{44,48,-18}, -{44,48,-17}, -{44,48,-16}, -{44,48,-15}, -{44,48,-14}, -{44,48,-13}, -{44,48,-12}, -{44,48,-11}, -{44,48,-10}, -{44,48,-9}, -{44,48,-8}, -{44,48,-7}, -{44,48,-6}, -{44,48,-5}, -{44,48,-4}, -{44,48,-3}, -{44,48,-2}, -{44,48,-1}, -{44,48,0}, -{44,48,1}, -{44,48,2}, -{44,48,3}, -{44,48,4}, -{44,48,5}, -{44,48,6}, -{44,48,7}, -{44,48,8}, -{44,48,9}, -{44,48,10}, -{44,48,11}, -{44,48,12}, -{44,48,13}, -{44,48,14}, -{44,48,15}, -{44,48,16}, -{44,48,17}, -{44,48,18}, -{44,48,19}, -{44,48,20}, -{44,48,21}, -{44,48,22}, -{44,48,23}, -{44,48,24}, -{44,48,25}, -{44,48,26}, -{44,48,27}, -{44,48,28}, -{44,48,29}, -{44,48,30}, -{44,48,31}, -{44,48,32}, -{44,48,33}, -{44,48,34}, -{44,48,35}, -{44,48,36}, -{44,48,37}, -{44,48,38}, -{44,48,39}, -{44,48,40}, -{44,48,41}, -{44,48,42}, -{44,48,43}, -{44,48,44}, -{44,48,45}, -{44,48,46}, -{44,48,47}, -{44,48,48}, -{44,48,49}, -{44,48,50}, -{44,48,51}, -{44,48,52}, -{44,48,53}, -{44,48,54}, -{44,48,55}, -{44,49,-88}, -{44,49,-87}, -{44,49,-86}, -{44,49,-85}, -{44,49,-84}, -{44,49,-83}, -{44,49,-82}, -{44,49,-81}, -{44,49,-80}, -{44,49,-79}, -{44,49,-78}, -{44,49,-77}, -{44,49,-76}, -{44,49,-75}, -{44,49,-74}, -{44,49,-73}, -{44,49,-72}, -{44,49,-71}, -{44,49,-70}, -{44,49,-69}, -{44,49,-68}, -{44,49,-67}, -{44,49,-66}, -{44,49,-65}, -{44,49,-64}, -{44,49,-63}, -{44,49,-62}, -{44,49,-61}, -{44,49,-60}, -{44,49,-59}, -{44,49,-58}, -{44,49,-57}, -{44,49,-56}, -{44,49,-55}, -{44,49,-54}, -{44,49,-53}, -{44,49,-52}, -{44,49,-51}, -{44,49,-50}, -{44,49,-49}, -{44,49,-48}, -{44,49,-47}, -{44,49,-46}, -{44,49,-45}, -{44,49,-44}, -{44,49,-43}, -{44,49,-42}, -{44,49,-41}, -{44,49,-40}, -{44,49,-39}, -{44,49,-38}, -{44,49,-37}, -{44,49,-36}, -{44,49,-35}, -{44,49,-34}, -{44,49,-33}, -{44,49,-32}, -{44,49,-31}, -{44,49,-30}, -{44,49,-29}, -{44,49,-28}, -{44,49,-27}, -{44,49,-26}, -{44,49,-25}, -{44,49,-24}, -{44,49,-23}, -{44,49,-22}, -{44,49,-21}, -{44,49,-20}, -{44,49,-19}, -{44,49,-18}, -{44,49,-17}, -{44,49,-16}, -{44,49,-15}, -{44,49,-14}, -{44,49,-13}, -{44,49,-12}, -{44,49,-11}, -{44,49,-10}, -{44,49,-9}, -{44,49,-8}, -{44,49,-7}, -{44,49,-6}, -{44,49,-5}, -{44,49,-4}, -{44,49,-3}, -{44,49,-2}, -{44,49,-1}, -{44,49,0}, -{44,49,1}, -{44,49,2}, -{44,49,3}, -{44,49,4}, -{44,49,5}, -{44,49,6}, -{44,49,7}, -{44,49,8}, -{44,49,9}, -{44,49,10}, -{44,49,11}, -{44,49,12}, -{44,49,13}, -{44,49,14}, -{44,49,15}, -{44,49,16}, -{44,49,17}, -{44,49,18}, -{44,49,19}, -{44,49,20}, -{44,49,21}, -{44,49,22}, -{44,49,23}, -{44,49,24}, -{44,49,25}, -{44,49,26}, -{44,49,27}, -{44,49,28}, -{44,49,29}, -{44,49,30}, -{44,49,31}, -{44,49,32}, -{44,49,33}, -{44,49,34}, -{44,49,35}, -{44,49,36}, -{44,49,37}, -{44,49,38}, -{44,49,39}, -{44,49,40}, -{44,49,41}, -{44,49,42}, -{44,49,43}, -{44,49,44}, -{44,49,45}, -{44,49,46}, -{44,49,47}, -{44,49,48}, -{44,49,49}, -{44,49,50}, -{44,49,51}, -{44,49,52}, -{44,49,53}, -{44,49,54}, -{44,49,55}, -{44,50,-88}, -{44,50,-87}, -{44,50,-86}, -{44,50,-85}, -{44,50,-84}, -{44,50,-83}, -{44,50,-82}, -{44,50,-81}, -{44,50,-80}, -{44,50,-79}, -{44,50,-78}, -{44,50,-77}, -{44,50,-76}, -{44,50,-75}, -{44,50,-74}, -{44,50,-73}, -{44,50,-72}, -{44,50,-71}, -{44,50,-70}, -{44,50,-69}, -{44,50,-68}, -{44,50,-67}, -{44,50,-66}, -{44,50,-65}, -{44,50,-64}, -{44,50,-63}, -{44,50,-62}, -{44,50,-61}, -{44,50,-60}, -{44,50,-59}, -{44,50,-58}, -{44,50,-57}, -{44,50,-56}, -{44,50,-55}, -{44,50,-54}, -{44,50,-53}, -{44,50,-52}, -{44,50,-51}, -{44,50,-50}, -{44,50,-49}, -{44,50,-48}, -{44,50,-47}, -{44,50,-46}, -{44,50,-45}, -{44,50,-44}, -{44,50,-43}, -{44,50,-42}, -{44,50,-41}, -{44,50,-40}, -{44,50,-39}, -{44,50,-38}, -{44,50,-37}, -{44,50,-36}, -{44,50,-35}, -{44,50,-34}, -{44,50,-33}, -{44,50,-32}, -{44,50,-31}, -{44,50,-30}, -{44,50,-29}, -{44,50,-28}, -{44,50,-27}, -{44,50,-26}, -{44,50,-25}, -{44,50,-24}, -{44,50,-23}, -{44,50,-22}, -{44,50,-21}, -{44,50,-20}, -{44,50,-19}, -{44,50,-18}, -{44,50,-17}, -{44,50,-16}, -{44,50,-15}, -{44,50,-14}, -{44,50,-13}, -{44,50,-12}, -{44,50,-11}, -{44,50,-10}, -{44,50,-9}, -{44,50,-8}, -{44,50,-7}, -{44,50,-6}, -{44,50,-5}, -{44,50,-4}, -{44,50,-3}, -{44,50,-2}, -{44,50,-1}, -{44,50,0}, -{44,50,1}, -{44,50,2}, -{44,50,3}, -{44,50,4}, -{44,50,5}, -{44,50,6}, -{44,50,7}, -{44,50,8}, -{44,50,9}, -{44,50,10}, -{44,50,11}, -{44,50,12}, -{44,50,13}, -{44,50,14}, -{44,50,15}, -{44,50,16}, -{44,50,17}, -{44,50,18}, -{44,50,19}, -{44,50,20}, -{44,50,21}, -{44,50,22}, -{44,50,23}, -{44,50,24}, -{44,50,25}, -{44,50,26}, -{44,50,27}, -{44,50,28}, -{44,50,29}, -{44,50,30}, -{44,50,31}, -{44,50,32}, -{44,50,33}, -{44,50,34}, -{44,50,35}, -{44,50,36}, -{44,50,37}, -{44,50,38}, -{44,50,39}, -{44,50,40}, -{44,50,41}, -{44,50,42}, -{44,50,43}, -{44,50,44}, -{44,50,45}, -{44,50,46}, -{44,50,47}, -{44,50,48}, -{44,50,49}, -{44,50,50}, -{44,50,51}, -{44,50,52}, -{44,50,53}, -{44,50,54}, -{44,50,55}, -{44,51,-88}, -{44,51,-87}, -{44,51,-86}, -{44,51,-85}, -{44,51,-84}, -{44,51,-83}, -{44,51,-82}, -{44,51,-81}, -{44,51,-80}, -{44,51,-79}, -{44,51,-78}, -{44,51,-77}, -{44,51,-76}, -{44,51,-75}, -{44,51,-74}, -{44,51,-73}, -{44,51,-72}, -{44,51,-71}, -{44,51,-70}, -{44,51,-69}, -{44,51,-68}, -{44,51,-67}, -{44,51,-66}, -{44,51,-65}, -{44,51,-64}, -{44,51,-63}, -{44,51,-62}, -{44,51,-61}, -{44,51,-60}, -{44,51,-59}, -{44,51,-58}, -{44,51,-57}, -{44,51,-56}, -{44,51,-55}, -{44,51,-54}, -{44,51,-53}, -{44,51,-52}, -{44,51,-51}, -{44,51,-50}, -{44,51,-49}, -{44,51,-48}, -{44,51,-47}, -{44,51,-46}, -{44,51,-45}, -{44,51,-44}, -{44,51,-43}, -{44,51,-42}, -{44,51,-41}, -{44,51,-40}, -{44,51,-39}, -{44,51,-38}, -{44,51,-37}, -{44,51,-36}, -{44,51,-35}, -{44,51,-34}, -{44,51,-33}, -{44,51,-32}, -{44,51,-31}, -{44,51,-30}, -{44,51,-29}, -{44,51,-28}, -{44,51,-27}, -{44,51,-26}, -{44,51,-25}, -{44,51,-24}, -{44,51,-23}, -{44,51,-22}, -{44,51,-21}, -{44,51,-20}, -{44,51,-19}, -{44,51,-18}, -{44,51,-17}, -{44,51,-16}, -{44,51,-15}, -{44,51,-14}, -{44,51,-13}, -{44,51,-12}, -{44,51,-11}, -{44,51,-10}, -{44,51,-9}, -{44,51,-8}, -{44,51,-7}, -{44,51,-6}, -{44,51,-5}, -{44,51,-4}, -{44,51,-3}, -{44,51,-2}, -{44,51,-1}, -{44,51,0}, -{44,51,1}, -{44,51,2}, -{44,51,3}, -{44,51,4}, -{44,51,5}, -{44,51,6}, -{44,51,7}, -{44,51,8}, -{44,51,9}, -{44,51,10}, -{44,51,11}, -{44,51,12}, -{44,51,13}, -{44,51,14}, -{44,51,15}, -{44,51,16}, -{44,51,17}, -{44,51,18}, -{44,51,19}, -{44,51,20}, -{44,51,21}, -{44,51,22}, -{44,51,23}, -{44,51,24}, -{44,51,25}, -{44,51,26}, -{44,51,27}, -{44,51,28}, -{44,51,29}, -{44,51,30}, -{44,51,31}, -{44,51,32}, -{44,51,33}, -{44,51,34}, -{44,51,35}, -{44,51,36}, -{44,51,37}, -{44,51,38}, -{44,51,39}, -{44,51,40}, -{44,51,41}, -{44,51,42}, -{44,51,43}, -{44,51,44}, -{44,51,45}, -{44,51,46}, -{44,51,47}, -{44,51,48}, -{44,51,49}, -{44,51,50}, -{44,51,51}, -{44,51,52}, -{44,51,53}, -{44,51,54}, -{44,51,55}, -{44,52,-88}, -{44,52,-87}, -{44,52,-86}, -{44,52,-85}, -{44,52,-84}, -{44,52,-83}, -{44,52,-82}, -{44,52,-81}, -{44,52,-80}, -{44,52,-79}, -{44,52,-78}, -{44,52,-77}, -{44,52,-76}, -{44,52,-75}, -{44,52,-74}, -{44,52,-73}, -{44,52,-72}, -{44,52,-71}, -{44,52,-70}, -{44,52,-69}, -{44,52,-68}, -{44,52,-67}, -{44,52,-66}, -{44,52,-65}, -{44,52,-64}, -{44,52,-63}, -{44,52,-62}, -{44,52,-61}, -{44,52,-60}, -{44,52,-59}, -{44,52,-58}, -{44,52,-57}, -{44,52,-56}, -{44,52,-55}, -{44,52,-54}, -{44,52,-53}, -{44,52,-52}, -{44,52,-51}, -{44,52,-50}, -{44,52,-49}, -{44,52,-48}, -{44,52,-47}, -{44,52,-46}, -{44,52,-45}, -{44,52,-44}, -{44,52,-43}, -{44,52,-42}, -{44,52,-41}, -{44,52,-40}, -{44,52,-39}, -{44,52,-38}, -{44,52,-37}, -{44,52,-36}, -{44,52,-35}, -{44,52,-34}, -{44,52,-33}, -{44,52,-32}, -{44,52,-31}, -{44,52,-30}, -{44,52,-29}, -{44,52,-28}, -{44,52,-27}, -{44,52,-26}, -{44,52,-25}, -{44,52,-24}, -{44,52,-23}, -{44,52,-22}, -{44,52,-21}, -{44,52,-20}, -{44,52,-19}, -{44,52,-18}, -{44,52,-17}, -{44,52,-16}, -{44,52,-15}, -{44,52,-14}, -{44,52,-13}, -{44,52,-12}, -{44,52,-11}, -{44,52,-10}, -{44,52,-9}, -{44,52,-8}, -{44,52,-7}, -{44,52,-6}, -{44,52,-5}, -{44,52,-4}, -{44,52,-3}, -{44,52,-2}, -{44,52,-1}, -{44,52,0}, -{44,52,1}, -{44,52,2}, -{44,52,3}, -{44,52,4}, -{44,52,5}, -{44,52,6}, -{44,52,7}, -{44,52,8}, -{44,52,9}, -{44,52,10}, -{44,52,11}, -{44,52,12}, -{44,52,13}, -{44,52,14}, -{44,52,15}, -{44,52,16}, -{44,52,17}, -{44,52,18}, -{44,52,19}, -{44,52,20}, -{44,52,21}, -{44,52,22}, -{44,52,23}, -{44,52,24}, -{44,52,25}, -{44,52,26}, -{44,52,27}, -{44,52,28}, -{44,52,29}, -{44,52,30}, -{44,52,31}, -{44,52,32}, -{44,52,33}, -{44,52,34}, -{44,52,35}, -{44,52,36}, -{44,52,37}, -{44,52,38}, -{44,52,39}, -{44,52,40}, -{44,52,41}, -{44,52,42}, -{44,52,43}, -{44,52,44}, -{44,52,45}, -{44,52,46}, -{44,52,47}, -{44,52,48}, -{44,52,49}, -{44,52,50}, -{44,52,51}, -{44,52,52}, -{44,52,53}, -{44,52,54}, -{44,52,55}, -{44,52,56}, -{44,53,-88}, -{44,53,-87}, -{44,53,-86}, -{44,53,-85}, -{44,53,-84}, -{44,53,-83}, -{44,53,-82}, -{44,53,-81}, -{44,53,-80}, -{44,53,-79}, -{44,53,-78}, -{44,53,-77}, -{44,53,-76}, -{44,53,-75}, -{44,53,-74}, -{44,53,-73}, -{44,53,-72}, -{44,53,-71}, -{44,53,-70}, -{44,53,-69}, -{44,53,-68}, -{44,53,-67}, -{44,53,-66}, -{44,53,-65}, -{44,53,-64}, -{44,53,-63}, -{44,53,-62}, -{44,53,-61}, -{44,53,-60}, -{44,53,-59}, -{44,53,-58}, -{44,53,-57}, -{44,53,-56}, -{44,53,-55}, -{44,53,-54}, -{44,53,-53}, -{44,53,-52}, -{44,53,-51}, -{44,53,-50}, -{44,53,-49}, -{44,53,-48}, -{44,53,-47}, -{44,53,-46}, -{44,53,-45}, -{44,53,-44}, -{44,53,-43}, -{44,53,-42}, -{44,53,-41}, -{44,53,-40}, -{44,53,-39}, -{44,53,-38}, -{44,53,-37}, -{44,53,-36}, -{44,53,-35}, -{44,53,-34}, -{44,53,-33}, -{44,53,-32}, -{44,53,-31}, -{44,53,-30}, -{44,53,-29}, -{44,53,-28}, -{44,53,-27}, -{44,53,-26}, -{44,53,-25}, -{44,53,-24}, -{44,53,-23}, -{44,53,-22}, -{44,53,-21}, -{44,53,-20}, -{44,53,-19}, -{44,53,-18}, -{44,53,-17}, -{44,53,-16}, -{44,53,-15}, -{44,53,-14}, -{44,53,-13}, -{44,53,-12}, -{44,53,-11}, -{44,53,-10}, -{44,53,-9}, -{44,53,-8}, -{44,53,-7}, -{44,53,-6}, -{44,53,-5}, -{44,53,-4}, -{44,53,-3}, -{44,53,-2}, -{44,53,-1}, -{44,53,0}, -{44,53,1}, -{44,53,2}, -{44,53,3}, -{44,53,4}, -{44,53,5}, -{44,53,6}, -{44,53,7}, -{44,53,8}, -{44,53,9}, -{44,53,10}, -{44,53,11}, -{44,53,12}, -{44,53,13}, -{44,53,14}, -{44,53,15}, -{44,53,16}, -{44,53,17}, -{44,53,18}, -{44,53,19}, -{44,53,20}, -{44,53,21}, -{44,53,22}, -{44,53,23}, -{44,53,24}, -{44,53,25}, -{44,53,26}, -{44,53,27}, -{44,53,28}, -{44,53,29}, -{44,53,30}, -{44,53,31}, -{44,53,32}, -{44,53,33}, -{44,53,34}, -{44,53,35}, -{44,53,36}, -{44,53,37}, -{44,53,38}, -{44,53,39}, -{44,53,40}, -{44,53,41}, -{44,53,42}, -{44,53,43}, -{44,53,44}, -{44,53,45}, -{44,53,46}, -{44,53,47}, -{44,53,48}, -{44,53,49}, -{44,53,50}, -{44,53,51}, -{44,53,52}, -{44,53,53}, -{44,53,54}, -{44,53,55}, -{44,53,56}, -{44,54,-88}, -{44,54,-87}, -{44,54,-86}, -{44,54,-85}, -{44,54,-84}, -{44,54,-83}, -{44,54,-82}, -{44,54,-81}, -{44,54,-80}, -{44,54,-79}, -{44,54,-78}, -{44,54,-77}, -{44,54,-76}, -{44,54,-75}, -{44,54,-74}, -{44,54,-73}, -{44,54,-72}, -{44,54,-71}, -{44,54,-70}, -{44,54,-69}, -{44,54,-68}, -{44,54,-67}, -{44,54,-66}, -{44,54,-65}, -{44,54,-64}, -{44,54,-63}, -{44,54,-62}, -{44,54,-61}, -{44,54,-60}, -{44,54,-59}, -{44,54,-58}, -{44,54,-57}, -{44,54,-56}, -{44,54,-55}, -{44,54,-54}, -{44,54,-53}, -{44,54,-52}, -{44,54,-51}, -{44,54,-50}, -{44,54,-49}, -{44,54,-48}, -{44,54,-47}, -{44,54,-46}, -{44,54,-45}, -{44,54,-44}, -{44,54,-43}, -{44,54,-42}, -{44,54,-41}, -{44,54,-40}, -{44,54,-39}, -{44,54,-38}, -{44,54,-37}, -{44,54,-36}, -{44,54,-35}, -{44,54,-34}, -{44,54,-33}, -{44,54,-32}, -{44,54,-31}, -{44,54,-30}, -{44,54,-29}, -{44,54,-28}, -{44,54,-27}, -{44,54,-26}, -{44,54,-25}, -{44,54,-24}, -{44,54,-23}, -{44,54,-22}, -{44,54,-21}, -{44,54,-20}, -{44,54,-19}, -{44,54,-18}, -{44,54,-17}, -{44,54,-16}, -{44,54,-15}, -{44,54,-14}, -{44,54,-13}, -{44,54,-12}, -{44,54,-11}, -{44,54,-10}, -{44,54,-9}, -{44,54,-8}, -{44,54,-7}, -{44,54,-6}, -{44,54,-5}, -{44,54,-4}, -{44,54,-3}, -{44,54,-2}, -{44,54,-1}, -{44,54,0}, -{44,54,1}, -{44,54,2}, -{44,54,3}, -{44,54,4}, -{44,54,5}, -{44,54,6}, -{44,54,7}, -{44,54,8}, -{44,54,9}, -{44,54,10}, -{44,54,11}, -{44,54,12}, -{44,54,13}, -{44,54,14}, -{44,54,15}, -{44,54,16}, -{44,54,17}, -{44,54,18}, -{44,54,19}, -{44,54,20}, -{44,54,21}, -{44,54,22}, -{44,54,23}, -{44,54,24}, -{44,54,25}, -{44,54,26}, -{44,54,27}, -{44,54,28}, -{44,54,29}, -{44,54,30}, -{44,54,31}, -{44,54,32}, -{44,54,33}, -{44,54,34}, -{44,54,35}, -{44,54,36}, -{44,54,37}, -{44,54,38}, -{44,54,39}, -{44,54,40}, -{44,54,41}, -{44,54,42}, -{44,54,43}, -{44,54,44}, -{44,54,45}, -{44,54,46}, -{44,54,47}, -{44,54,48}, -{44,54,49}, -{44,54,50}, -{44,54,51}, -{44,54,52}, -{44,54,53}, -{44,54,54}, -{44,54,55}, -{44,54,56}, -{44,55,-88}, -{44,55,-87}, -{44,55,-86}, -{44,55,-85}, -{44,55,-84}, -{44,55,-83}, -{44,55,-82}, -{44,55,-81}, -{44,55,-80}, -{44,55,-79}, -{44,55,-78}, -{44,55,-77}, -{44,55,-76}, -{44,55,-75}, -{44,55,-74}, -{44,55,-73}, -{44,55,-72}, -{44,55,-71}, -{44,55,-70}, -{44,55,-69}, -{44,55,-68}, -{44,55,-67}, -{44,55,-66}, -{44,55,-65}, -{44,55,-64}, -{44,55,-63}, -{44,55,-62}, -{44,55,-61}, -{44,55,-60}, -{44,55,-59}, -{44,55,-58}, -{44,55,-57}, -{44,55,-56}, -{44,55,-55}, -{44,55,-54}, -{44,55,-53}, -{44,55,-52}, -{44,55,-51}, -{44,55,-50}, -{44,55,-49}, -{44,55,-48}, -{44,55,-47}, -{44,55,-46}, -{44,55,-45}, -{44,55,-44}, -{44,55,-43}, -{44,55,-42}, -{44,55,-41}, -{44,55,-40}, -{44,55,-39}, -{44,55,-38}, -{44,55,-37}, -{44,55,-36}, -{44,55,-35}, -{44,55,-34}, -{44,55,-33}, -{44,55,-32}, -{44,55,-31}, -{44,55,-30}, -{44,55,-29}, -{44,55,-28}, -{44,55,-27}, -{44,55,-26}, -{44,55,-25}, -{44,55,-24}, -{44,55,-23}, -{44,55,-22}, -{44,55,-21}, -{44,55,-20}, -{44,55,-19}, -{44,55,-18}, -{44,55,-17}, -{44,55,-16}, -{44,55,-15}, -{44,55,-14}, -{44,55,-13}, -{44,55,-12}, -{44,55,-11}, -{44,55,-10}, -{44,55,-9}, -{44,55,-8}, -{44,55,-7}, -{44,55,-6}, -{44,55,-5}, -{44,55,-4}, -{44,55,-3}, -{44,55,-2}, -{44,55,-1}, -{44,55,0}, -{44,55,1}, -{44,55,2}, -{44,55,3}, -{44,55,4}, -{44,55,5}, -{44,55,6}, -{44,55,7}, -{44,55,8}, -{44,55,9}, -{44,55,10}, -{44,55,11}, -{44,55,12}, -{44,55,13}, -{44,55,14}, -{44,55,15}, -{44,55,16}, -{44,55,17}, -{44,55,18}, -{44,55,19}, -{44,55,20}, -{44,55,21}, -{44,55,22}, -{44,55,23}, -{44,55,24}, -{44,55,25}, -{44,55,26}, -{44,55,27}, -{44,55,28}, -{44,55,29}, -{44,55,30}, -{44,55,31}, -{44,55,32}, -{44,55,33}, -{44,55,34}, -{44,55,35}, -{44,55,36}, -{44,55,37}, -{44,55,38}, -{44,55,39}, -{44,55,40}, -{44,55,41}, -{44,55,42}, -{44,55,43}, -{44,55,44}, -{44,55,45}, -{44,55,46}, -{44,55,47}, -{44,55,48}, -{44,55,49}, -{44,55,50}, -{44,55,51}, -{44,55,52}, -{44,55,53}, -{44,55,54}, -{44,55,55}, -{44,55,56}, -{44,56,-88}, -{44,56,-87}, -{44,56,-86}, -{44,56,-85}, -{44,56,-84}, -{44,56,-83}, -{44,56,-82}, -{44,56,-81}, -{44,56,-80}, -{44,56,-79}, -{44,56,-78}, -{44,56,-77}, -{44,56,-76}, -{44,56,-75}, -{44,56,-74}, -{44,56,-73}, -{44,56,-72}, -{44,56,-71}, -{44,56,-70}, -{44,56,-69}, -{44,56,-68}, -{44,56,-67}, -{44,56,-66}, -{44,56,-65}, -{44,56,-64}, -{44,56,-63}, -{44,56,-62}, -{44,56,-61}, -{44,56,-60}, -{44,56,-59}, -{44,56,-58}, -{44,56,-57}, -{44,56,-56}, -{44,56,-55}, -{44,56,-54}, -{44,56,-53}, -{44,56,-52}, -{44,56,-51}, -{44,56,-50}, -{44,56,-49}, -{44,56,-48}, -{44,56,-47}, -{44,56,-46}, -{44,56,-45}, -{44,56,-44}, -{44,56,-43}, -{44,56,-42}, -{44,56,-41}, -{44,56,-40}, -{44,56,-39}, -{44,56,-38}, -{44,56,-37}, -{44,56,-36}, -{44,56,-35}, -{44,56,-34}, -{44,56,-33}, -{44,56,-32}, -{44,56,-31}, -{44,56,-30}, -{44,56,-29}, -{44,56,-28}, -{44,56,-27}, -{44,56,-26}, -{44,56,-25}, -{44,56,-24}, -{44,56,-23}, -{44,56,-22}, -{44,56,-21}, -{44,56,-20}, -{44,56,-19}, -{44,56,-18}, -{44,56,-17}, -{44,56,-16}, -{44,56,-15}, -{44,56,-14}, -{44,56,-13}, -{44,56,-12}, -{44,56,-11}, -{44,56,-10}, -{44,56,-9}, -{44,56,-8}, -{44,56,-7}, -{44,56,-6}, -{44,56,-5}, -{44,56,-4}, -{44,56,-3}, -{44,56,-2}, -{44,56,-1}, -{44,56,0}, -{44,56,1}, -{44,56,2}, -{44,56,3}, -{44,56,4}, -{44,56,5}, -{44,56,6}, -{44,56,7}, -{44,56,8}, -{44,56,9}, -{44,56,10}, -{44,56,11}, -{44,56,12}, -{44,56,13}, -{44,56,14}, -{44,56,15}, -{44,56,16}, -{44,56,17}, -{44,56,18}, -{44,56,19}, -{44,56,20}, -{44,56,21}, -{44,56,22}, -{44,56,23}, -{44,56,24}, -{44,56,25}, -{44,56,26}, -{44,56,27}, -{44,56,28}, -{44,56,29}, -{44,56,30}, -{44,56,31}, -{44,56,32}, -{44,56,33}, -{44,56,34}, -{44,56,35}, -{44,56,36}, -{44,56,37}, -{44,56,38}, -{44,56,39}, -{44,56,40}, -{44,56,41}, -{44,56,42}, -{44,56,43}, -{44,56,44}, -{44,56,45}, -{44,56,46}, -{44,56,47}, -{44,56,48}, -{44,56,49}, -{44,56,50}, -{44,56,51}, -{44,56,52}, -{44,56,53}, -{44,56,54}, -{44,56,55}, -{44,56,56}, -{44,57,-88}, -{44,57,-87}, -{44,57,-86}, -{44,57,-85}, -{44,57,-84}, -{44,57,-83}, -{44,57,-82}, -{44,57,-81}, -{44,57,-80}, -{44,57,-79}, -{44,57,-78}, -{44,57,-77}, -{44,57,-76}, -{44,57,-75}, -{44,57,-74}, -{44,57,-73}, -{44,57,-72}, -{44,57,-71}, -{44,57,-70}, -{44,57,-69}, -{44,57,-68}, -{44,57,-67}, -{44,57,-66}, -{44,57,-65}, -{44,57,-64}, -{44,57,-63}, -{44,57,-62}, -{44,57,-61}, -{44,57,-60}, -{44,57,-59}, -{44,57,-58}, -{44,57,-57}, -{44,57,-56}, -{44,57,-55}, -{44,57,-54}, -{44,57,-53}, -{44,57,-52}, -{44,57,-51}, -{44,57,-50}, -{44,57,-49}, -{44,57,-48}, -{44,57,-47}, -{44,57,-46}, -{44,57,-45}, -{44,57,-44}, -{44,57,-43}, -{44,57,-42}, -{44,57,-41}, -{44,57,-40}, -{44,57,-39}, -{44,57,-38}, -{44,57,-37}, -{44,57,-36}, -{44,57,-35}, -{44,57,-34}, -{44,57,-33}, -{44,57,-32}, -{44,57,-31}, -{44,57,-30}, -{44,57,-29}, -{44,57,-28}, -{44,57,-27}, -{44,57,-26}, -{44,57,-25}, -{44,57,-24}, -{44,57,-23}, -{44,57,-22}, -{44,57,-21}, -{44,57,-20}, -{44,57,-19}, -{44,57,-18}, -{44,57,-17}, -{44,57,-16}, -{44,57,-15}, -{44,57,-14}, -{44,57,-13}, -{44,57,-12}, -{44,57,-11}, -{44,57,-10}, -{44,57,-9}, -{44,57,-8}, -{44,57,-7}, -{44,57,-6}, -{44,57,-5}, -{44,57,-4}, -{44,57,-3}, -{44,57,-2}, -{44,57,-1}, -{44,57,0}, -{44,57,1}, -{44,57,2}, -{44,57,3}, -{44,57,4}, -{44,57,5}, -{44,57,6}, -{44,57,7}, -{44,57,8}, -{44,57,9}, -{44,57,10}, -{44,57,11}, -{44,57,12}, -{44,57,13}, -{44,57,14}, -{44,57,15}, -{44,57,16}, -{44,57,17}, -{44,57,18}, -{44,57,19}, -{44,57,20}, -{44,57,21}, -{44,57,22}, -{44,57,23}, -{44,57,24}, -{44,57,25}, -{44,57,26}, -{44,57,27}, -{44,57,28}, -{44,57,29}, -{44,57,30}, -{44,57,31}, -{44,57,32}, -{44,57,33}, -{44,57,34}, -{44,57,35}, -{44,57,36}, -{44,57,37}, -{44,57,38}, -{44,57,39}, -{44,57,40}, -{44,57,41}, -{44,57,42}, -{44,57,43}, -{44,57,44}, -{44,57,45}, -{44,57,46}, -{44,57,47}, -{44,57,48}, -{44,57,49}, -{44,57,50}, -{44,57,51}, -{44,57,52}, -{44,57,53}, -{44,57,54}, -{44,57,55}, -{44,57,56}, -{44,58,-88}, -{44,58,-87}, -{44,58,-86}, -{44,58,-85}, -{44,58,-84}, -{44,58,-83}, -{44,58,-82}, -{44,58,-81}, -{44,58,-80}, -{44,58,-79}, -{44,58,-78}, -{44,58,-77}, -{44,58,-76}, -{44,58,-75}, -{44,58,-74}, -{44,58,-73}, -{44,58,-72}, -{44,58,-71}, -{44,58,-70}, -{44,58,-69}, -{44,58,-68}, -{44,58,-67}, -{44,58,-66}, -{44,58,-65}, -{44,58,-64}, -{44,58,-63}, -{44,58,-62}, -{44,58,-61}, -{44,58,-60}, -{44,58,-59}, -{44,58,-58}, -{44,58,-57}, -{44,58,-56}, -{44,58,-55}, -{44,58,-54}, -{44,58,-53}, -{44,58,-52}, -{44,58,-51}, -{44,58,-50}, -{44,58,-49}, -{44,58,-48}, -{44,58,-47}, -{44,58,-46}, -{44,58,-45}, -{44,58,-44}, -{44,58,-43}, -{44,58,-42}, -{44,58,-41}, -{44,58,-40}, -{44,58,-39}, -{44,58,-38}, -{44,58,-37}, -{44,58,-36}, -{44,58,-35}, -{44,58,-34}, -{44,58,-33}, -{44,58,-32}, -{44,58,-31}, -{44,58,-30}, -{44,58,-29}, -{44,58,-28}, -{44,58,-27}, -{44,58,-26}, -{44,58,-25}, -{44,58,-24}, -{44,58,-23}, -{44,58,-22}, -{44,58,-21}, -{44,58,-20}, -{44,58,-19}, -{44,58,-18}, -{44,58,-17}, -{44,58,-16}, -{44,58,-15}, -{44,58,-14}, -{44,58,-13}, -{44,58,-12}, -{44,58,-11}, -{44,58,-10}, -{44,58,-9}, -{44,58,-8}, -{44,58,-7}, -{44,58,-6}, -{44,58,-5}, -{44,58,-4}, -{44,58,-3}, -{44,58,-2}, -{44,58,-1}, -{44,58,0}, -{44,58,1}, -{44,58,2}, -{44,58,3}, -{44,58,4}, -{44,58,5}, -{44,58,6}, -{44,58,7}, -{44,58,8}, -{44,58,9}, -{44,58,10}, -{44,58,11}, -{44,58,12}, -{44,58,13}, -{44,58,14}, -{44,58,15}, -{44,58,16}, -{44,58,17}, -{44,58,18}, -{44,58,19}, -{44,58,20}, -{44,58,21}, -{44,58,22}, -{44,58,23}, -{44,58,24}, -{44,58,25}, -{44,58,26}, -{44,58,27}, -{44,58,28}, -{44,58,29}, -{44,58,30}, -{44,58,31}, -{44,58,32}, -{44,58,33}, -{44,58,34}, -{44,58,35}, -{44,58,36}, -{44,58,37}, -{44,58,38}, -{44,58,39}, -{44,58,40}, -{44,58,41}, -{44,58,42}, -{44,58,43}, -{44,58,44}, -{44,58,45}, -{44,58,46}, -{44,58,47}, -{44,58,48}, -{44,58,49}, -{44,58,50}, -{44,58,51}, -{44,58,52}, -{44,58,53}, -{44,58,54}, -{44,58,55}, -{44,58,56}, -{44,59,-88}, -{44,59,-87}, -{44,59,-86}, -{44,59,-85}, -{44,59,-84}, -{44,59,-83}, -{44,59,-82}, -{44,59,-81}, -{44,59,-80}, -{44,59,-79}, -{44,59,-78}, -{44,59,-77}, -{44,59,-76}, -{44,59,-75}, -{44,59,-74}, -{44,59,-73}, -{44,59,-72}, -{44,59,-71}, -{44,59,-70}, -{44,59,-69}, -{44,59,-68}, -{44,59,-67}, -{44,59,-66}, -{44,59,-65}, -{44,59,-64}, -{44,59,-63}, -{44,59,-62}, -{44,59,-61}, -{44,59,-60}, -{44,59,-59}, -{44,59,-58}, -{44,59,-57}, -{44,59,-56}, -{44,59,-55}, -{44,59,-54}, -{44,59,-53}, -{44,59,-52}, -{44,59,-51}, -{44,59,-50}, -{44,59,-49}, -{44,59,-48}, -{44,59,-47}, -{44,59,-46}, -{44,59,-45}, -{44,59,-44}, -{44,59,-43}, -{44,59,-42}, -{44,59,-41}, -{44,59,-40}, -{44,59,-39}, -{44,59,-38}, -{44,59,-37}, -{44,59,-36}, -{44,59,-35}, -{44,59,-34}, -{44,59,-33}, -{44,59,-32}, -{44,59,-31}, -{44,59,-30}, -{44,59,-29}, -{44,59,-28}, -{44,59,-27}, -{44,59,-26}, -{44,59,-25}, -{44,59,-24}, -{44,59,-23}, -{44,59,-22}, -{44,59,-21}, -{44,59,-20}, -{44,59,-19}, -{44,59,-18}, -{44,59,-17}, -{44,59,-16}, -{44,59,-15}, -{44,59,-14}, -{44,59,-13}, -{44,59,-12}, -{44,59,-11}, -{44,59,-10}, -{44,59,-9}, -{44,59,-8}, -{44,59,-7}, -{44,59,-6}, -{44,59,-5}, -{44,59,-4}, -{44,59,-3}, -{44,59,-2}, -{44,59,-1}, -{44,59,0}, -{44,59,1}, -{44,59,2}, -{44,59,3}, -{44,59,4}, -{44,59,5}, -{44,59,6}, -{44,59,7}, -{44,59,8}, -{44,59,9}, -{44,59,10}, -{44,59,11}, -{44,59,12}, -{44,59,13}, -{44,59,14}, -{44,59,15}, -{44,59,16}, -{44,59,17}, -{44,59,18}, -{44,59,19}, -{44,59,20}, -{44,59,21}, -{44,59,22}, -{44,59,23}, -{44,59,24}, -{44,59,25}, -{44,59,26}, -{44,59,27}, -{44,59,28}, -{44,59,29}, -{44,59,30}, -{44,59,31}, -{44,59,32}, -{44,59,33}, -{44,59,34}, -{44,59,35}, -{44,59,36}, -{44,59,37}, -{44,59,38}, -{44,59,39}, -{44,59,40}, -{44,59,41}, -{44,59,42}, -{44,59,43}, -{44,59,44}, -{44,59,45}, -{44,59,46}, -{44,59,47}, -{44,59,48}, -{44,59,49}, -{44,59,50}, -{44,59,51}, -{44,59,52}, -{44,59,53}, -{44,59,54}, -{44,59,55}, -{44,59,56}, -{44,60,-88}, -{44,60,-87}, -{44,60,-86}, -{44,60,-85}, -{44,60,-84}, -{44,60,-83}, -{44,60,-82}, -{44,60,-81}, -{44,60,-80}, -{44,60,-79}, -{44,60,-78}, -{44,60,-77}, -{44,60,-76}, -{44,60,-75}, -{44,60,-74}, -{44,60,-73}, -{44,60,-72}, -{44,60,-71}, -{44,60,-70}, -{44,60,-69}, -{44,60,-68}, -{44,60,-67}, -{44,60,-66}, -{44,60,-65}, -{44,60,-64}, -{44,60,-63}, -{44,60,-62}, -{44,60,-61}, -{44,60,-60}, -{44,60,-59}, -{44,60,-58}, -{44,60,-57}, -{44,60,-56}, -{44,60,-55}, -{44,60,-54}, -{44,60,-53}, -{44,60,-52}, -{44,60,-51}, -{44,60,-50}, -{44,60,-49}, -{44,60,-48}, -{44,60,-47}, -{44,60,-46}, -{44,60,-45}, -{44,60,-44}, -{44,60,-43}, -{44,60,-42}, -{44,60,-41}, -{44,60,-40}, -{44,60,-39}, -{44,60,-38}, -{44,60,-37}, -{44,60,-36}, -{44,60,-35}, -{44,60,-34}, -{44,60,-33}, -{44,60,-32}, -{44,60,-31}, -{44,60,-30}, -{44,60,-29}, -{44,60,-28}, -{44,60,-27}, -{44,60,-26}, -{44,60,-25}, -{44,60,-24}, -{44,60,-23}, -{44,60,-22}, -{44,60,-21}, -{44,60,-20}, -{44,60,-19}, -{44,60,-18}, -{44,60,-17}, -{44,60,-16}, -{44,60,-15}, -{44,60,-14}, -{44,60,-13}, -{44,60,-12}, -{44,60,-11}, -{44,60,-10}, -{44,60,-9}, -{44,60,-8}, -{44,60,-7}, -{44,60,-6}, -{44,60,-5}, -{44,60,-4}, -{44,60,-3}, -{44,60,-2}, -{44,60,-1}, -{44,60,0}, -{44,60,1}, -{44,60,2}, -{44,60,3}, -{44,60,4}, -{44,60,5}, -{44,60,6}, -{44,60,7}, -{44,60,8}, -{44,60,9}, -{44,60,10}, -{44,60,11}, -{44,60,12}, -{44,60,13}, -{44,60,14}, -{44,60,15}, -{44,60,16}, -{44,60,17}, -{44,60,18}, -{44,60,19}, -{44,60,20}, -{44,60,21}, -{44,60,22}, -{44,60,23}, -{44,60,24}, -{44,60,25}, -{44,60,26}, -{44,60,27}, -{44,60,28}, -{44,60,29}, -{44,60,30}, -{44,60,31}, -{44,60,32}, -{44,60,33}, -{44,60,34}, -{44,60,35}, -{44,60,36}, -{44,60,37}, -{44,60,38}, -{44,60,39}, -{44,60,40}, -{44,60,41}, -{44,60,42}, -{44,60,43}, -{44,60,44}, -{44,60,45}, -{44,60,46}, -{44,60,47}, -{44,60,48}, -{44,60,49}, -{44,60,50}, -{44,60,51}, -{44,60,52}, -{44,60,53}, -{44,60,54}, -{44,60,55}, -{44,60,56}, -{44,60,57}, -{44,61,-88}, -{44,61,-87}, -{44,61,-86}, -{44,61,-85}, -{44,61,-84}, -{44,61,-83}, -{44,61,-82}, -{44,61,-81}, -{44,61,-80}, -{44,61,-79}, -{44,61,-78}, -{44,61,-77}, -{44,61,-76}, -{44,61,-75}, -{44,61,-74}, -{44,61,-73}, -{44,61,-72}, -{44,61,-71}, -{44,61,-70}, -{44,61,-69}, -{44,61,-68}, -{44,61,-67}, -{44,61,-66}, -{44,61,-65}, -{44,61,-64}, -{44,61,-63}, -{44,61,-62}, -{44,61,-61}, -{44,61,-60}, -{44,61,-59}, -{44,61,-58}, -{44,61,-57}, -{44,61,-56}, -{44,61,-55}, -{44,61,-54}, -{44,61,-53}, -{44,61,-52}, -{44,61,-51}, -{44,61,-50}, -{44,61,-49}, -{44,61,-48}, -{44,61,-47}, -{44,61,-46}, -{44,61,-45}, -{44,61,-44}, -{44,61,-43}, -{44,61,-42}, -{44,61,-41}, -{44,61,-40}, -{44,61,-39}, -{44,61,-38}, -{44,61,-37}, -{44,61,-36}, -{44,61,-35}, -{44,61,-34}, -{44,61,-33}, -{44,61,-32}, -{44,61,-31}, -{44,61,-30}, -{44,61,-29}, -{44,61,-28}, -{44,61,-27}, -{44,61,-26}, -{44,61,-25}, -{44,61,-24}, -{44,61,-23}, -{44,61,-22}, -{44,61,-21}, -{44,61,-20}, -{44,61,-19}, -{44,61,-18}, -{44,61,-17}, -{44,61,-16}, -{44,61,-15}, -{44,61,-14}, -{44,61,-13}, -{44,61,-12}, -{44,61,-11}, -{44,61,-10}, -{44,61,-9}, -{44,61,-8}, -{44,61,-7}, -{44,61,-6}, -{44,61,-5}, -{44,61,-4}, -{44,61,-3}, -{44,61,-2}, -{44,61,-1}, -{44,61,0}, -{44,61,1}, -{44,61,2}, -{44,61,3}, -{44,61,4}, -{44,61,5}, -{44,61,6}, -{44,61,7}, -{44,61,8}, -{44,61,9}, -{44,61,10}, -{44,61,11}, -{44,61,12}, -{44,61,13}, -{44,61,14}, -{44,61,15}, -{44,61,16}, -{44,61,17}, -{44,61,18}, -{44,61,19}, -{44,61,20}, -{44,61,21}, -{44,61,22}, -{44,61,23}, -{44,61,24}, -{44,61,25}, -{44,61,26}, -{44,61,27}, -{44,61,28}, -{44,61,29}, -{44,61,30}, -{44,61,31}, -{44,61,32}, -{44,61,33}, -{44,61,34}, -{44,61,35}, -{44,61,36}, -{44,61,37}, -{44,61,38}, -{44,61,39}, -{44,61,40}, -{44,61,41}, -{44,61,42}, -{44,61,43}, -{44,61,44}, -{44,61,45}, -{44,61,46}, -{44,61,47}, -{44,61,48}, -{44,61,49}, -{44,61,50}, -{44,61,51}, -{44,61,52}, -{44,61,53}, -{44,61,54}, -{44,61,55}, -{44,61,56}, -{44,61,57}, -{44,62,-88}, -{44,62,-87}, -{44,62,-86}, -{44,62,-85}, -{44,62,-84}, -{44,62,-83}, -{44,62,-82}, -{44,62,-81}, -{44,62,-80}, -{44,62,-79}, -{44,62,-78}, -{44,62,-77}, -{44,62,-76}, -{44,62,-75}, -{44,62,-74}, -{44,62,-73}, -{44,62,-72}, -{44,62,-71}, -{44,62,-70}, -{44,62,-69}, -{44,62,-68}, -{44,62,-67}, -{44,62,-66}, -{44,62,-65}, -{44,62,-64}, -{44,62,-63}, -{44,62,-62}, -{44,62,-61}, -{44,62,-60}, -{44,62,-59}, -{44,62,-58}, -{44,62,-57}, -{44,62,-56}, -{44,62,-55}, -{44,62,-54}, -{44,62,-53}, -{44,62,-52}, -{44,62,-51}, -{44,62,-50}, -{44,62,-49}, -{44,62,-48}, -{44,62,-47}, -{44,62,-46}, -{44,62,-45}, -{44,62,-44}, -{44,62,-43}, -{44,62,-42}, -{44,62,-41}, -{44,62,-40}, -{44,62,-39}, -{44,62,-38}, -{44,62,-37}, -{44,62,-36}, -{44,62,-35}, -{44,62,-34}, -{44,62,-33}, -{44,62,-32}, -{44,62,-31}, -{44,62,-30}, -{44,62,-29}, -{44,62,-28}, -{44,62,-27}, -{44,62,-26}, -{44,62,-25}, -{44,62,-24}, -{44,62,-23}, -{44,62,-22}, -{44,62,-21}, -{44,62,-20}, -{44,62,-19}, -{44,62,-18}, -{44,62,-17}, -{44,62,-16}, -{44,62,-15}, -{44,62,-14}, -{44,62,-13}, -{44,62,-12}, -{44,62,-11}, -{44,62,-10}, -{44,62,-9}, -{44,62,-8}, -{44,62,-7}, -{44,62,-6}, -{44,62,-5}, -{44,62,-4}, -{44,62,-3}, -{44,62,-2}, -{44,62,-1}, -{44,62,0}, -{44,62,1}, -{44,62,2}, -{44,62,3}, -{44,62,4}, -{44,62,5}, -{44,62,6}, -{44,62,7}, -{44,62,8}, -{44,62,9}, -{44,62,10}, -{44,62,11}, -{44,62,12}, -{44,62,13}, -{44,62,14}, -{44,62,15}, -{44,62,16}, -{44,62,17}, -{44,62,18}, -{44,62,19}, -{44,62,20}, -{44,62,21}, -{44,62,22}, -{44,62,23}, -{44,62,24}, -{44,62,25}, -{44,62,26}, -{44,62,27}, -{44,62,28}, -{44,62,29}, -{44,62,30}, -{44,62,31}, -{44,62,32}, -{44,62,33}, -{44,62,34}, -{44,62,35}, -{44,62,36}, -{44,62,37}, -{44,62,38}, -{44,62,39}, -{44,62,40}, -{44,62,41}, -{44,62,42}, -{44,62,43}, -{44,62,44}, -{44,62,45}, -{44,62,46}, -{44,62,47}, -{44,62,48}, -{44,62,49}, -{44,62,50}, -{44,62,51}, -{44,62,52}, -{44,62,53}, -{44,62,54}, -{44,62,55}, -{44,62,56}, -{44,62,57}, -{44,63,-88}, -{44,63,-87}, -{44,63,-86}, -{44,63,-85}, -{44,63,-84}, -{44,63,-83}, -{44,63,-82}, -{44,63,-81}, -{44,63,-80}, -{44,63,-79}, -{44,63,-78}, -{44,63,-77}, -{44,63,-76}, -{44,63,-75}, -{44,63,-74}, -{44,63,-73}, -{44,63,-72}, -{44,63,-71}, -{44,63,-70}, -{44,63,-69}, -{44,63,-68}, -{44,63,-67}, -{44,63,-66}, -{44,63,-65}, -{44,63,-64}, -{44,63,-63}, -{44,63,-62}, -{44,63,-61}, -{44,63,-60}, -{44,63,-59}, -{44,63,-58}, -{44,63,-57}, -{44,63,-56}, -{44,63,-55}, -{44,63,-54}, -{44,63,-53}, -{44,63,-52}, -{44,63,-51}, -{44,63,-50}, -{44,63,-49}, -{44,63,-48}, -{44,63,-47}, -{44,63,-46}, -{44,63,-45}, -{44,63,-44}, -{44,63,-43}, -{44,63,-42}, -{44,63,-41}, -{44,63,-40}, -{44,63,-39}, -{44,63,-38}, -{44,63,-37}, -{44,63,-36}, -{44,63,-35}, -{44,63,-34}, -{44,63,-33}, -{44,63,-32}, -{44,63,-31}, -{44,63,-30}, -{44,63,-29}, -{44,63,-28}, -{44,63,-27}, -{44,63,-26}, -{44,63,-25}, -{44,63,-24}, -{44,63,-23}, -{44,63,-22}, -{44,63,-21}, -{44,63,-20}, -{44,63,-19}, -{44,63,-18}, -{44,63,-17}, -{44,63,-16}, -{44,63,-15}, -{44,63,-14}, -{44,63,-13}, -{44,63,-12}, -{44,63,-11}, -{44,63,-10}, -{44,63,-9}, -{44,63,-8}, -{44,63,-7}, -{44,63,-6}, -{44,63,-5}, -{44,63,-4}, -{44,63,-3}, -{44,63,-2}, -{44,63,-1}, -{44,63,0}, -{44,63,1}, -{44,63,2}, -{44,63,3}, -{44,63,4}, -{44,63,5}, -{44,63,6}, -{44,63,7}, -{44,63,8}, -{44,63,9}, -{44,63,10}, -{44,63,11}, -{44,63,12}, -{44,63,13}, -{44,63,14}, -{44,63,15}, -{44,63,16}, -{44,63,17}, -{44,63,18}, -{44,63,19}, -{44,63,20}, -{44,63,21}, -{44,63,22}, -{44,63,23}, -{44,63,24}, -{44,63,25}, -{44,63,26}, -{44,63,27}, -{44,63,28}, -{44,63,29}, -{44,63,30}, -{44,63,31}, -{44,63,32}, -{44,63,33}, -{44,63,34}, -{44,63,35}, -{44,63,36}, -{44,63,37}, -{44,63,38}, -{44,63,39}, -{44,63,40}, -{44,63,41}, -{44,63,42}, -{44,63,43}, -{44,63,44}, -{44,63,45}, -{44,63,46}, -{44,63,47}, -{44,63,48}, -{44,63,49}, -{44,63,50}, -{44,63,51}, -{44,63,52}, -{44,63,53}, -{44,63,54}, -{44,63,55}, -{44,63,56}, -{44,63,57}, -{44,64,-88}, -{44,64,-87}, -{44,64,-86}, -{44,64,-85}, -{44,64,-84}, -{44,64,-83}, -{44,64,-82}, -{44,64,-81}, -{44,64,-80}, -{44,64,-79}, -{44,64,-78}, -{44,64,-77}, -{44,64,-76}, -{44,64,-75}, -{44,64,-74}, -{44,64,-73}, -{44,64,-72}, -{44,64,-71}, -{44,64,-70}, -{44,64,-69}, -{44,64,-68}, -{44,64,-67}, -{44,64,-66}, -{44,64,-65}, -{44,64,-64}, -{44,64,-63}, -{44,64,-62}, -{44,64,-61}, -{44,64,-60}, -{44,64,-59}, -{44,64,-58}, -{44,64,-57}, -{44,64,-56}, -{44,64,-55}, -{44,64,-54}, -{44,64,-53}, -{44,64,-52}, -{44,64,-51}, -{44,64,-50}, -{44,64,-49}, -{44,64,-48}, -{44,64,-47}, -{44,64,-46}, -{44,64,-45}, -{44,64,-44}, -{44,64,-43}, -{44,64,-42}, -{44,64,-41}, -{44,64,-40}, -{44,64,-39}, -{44,64,-38}, -{44,64,-37}, -{44,64,-36}, -{44,64,-35}, -{44,64,-34}, -{44,64,-33}, -{44,64,-32}, -{44,64,-31}, -{44,64,-30}, -{44,64,-29}, -{44,64,-28}, -{44,64,-27}, -{44,64,-26}, -{44,64,-25}, -{44,64,-24}, -{44,64,-23}, -{44,64,-22}, -{44,64,-21}, -{44,64,-20}, -{44,64,-19}, -{44,64,-18}, -{44,64,-17}, -{44,64,-16}, -{44,64,-15}, -{44,64,-14}, -{44,64,-13}, -{44,64,-12}, -{44,64,-11}, -{44,64,-10}, -{44,64,-9}, -{44,64,-8}, -{44,64,-7}, -{44,64,-6}, -{44,64,-5}, -{44,64,-4}, -{44,64,-3}, -{44,64,-2}, -{44,64,-1}, -{44,64,0}, -{44,64,1}, -{44,64,2}, -{44,64,3}, -{44,64,4}, -{44,64,5}, -{44,64,6}, -{44,64,7}, -{44,64,8}, -{44,64,9}, -{44,64,10}, -{44,64,11}, -{44,64,12}, -{44,64,13}, -{44,64,14}, -{44,64,15}, -{44,64,16}, -{44,64,17}, -{44,64,18}, -{44,64,19}, -{44,64,20}, -{44,64,21}, -{44,64,22}, -{44,64,23}, -{44,64,24}, -{44,64,25}, -{44,64,26}, -{44,64,27}, -{44,64,28}, -{44,64,29}, -{44,64,30}, -{44,64,31}, -{44,64,32}, -{44,64,33}, -{44,64,34}, -{44,64,35}, -{44,64,36}, -{44,64,37}, -{44,64,38}, -{44,64,39}, -{44,64,40}, -{44,64,41}, -{44,64,42}, -{44,64,43}, -{44,64,44}, -{44,64,45}, -{44,64,46}, -{44,64,47}, -{44,64,48}, -{44,64,49}, -{44,64,50}, -{44,64,51}, -{44,64,52}, -{44,64,53}, -{44,64,54}, -{44,64,55}, -{44,64,56}, -{44,64,57}, -{44,65,-88}, -{44,65,-87}, -{44,65,-86}, -{44,65,-85}, -{44,65,-84}, -{44,65,-83}, -{44,65,-82}, -{44,65,-81}, -{44,65,-80}, -{44,65,-79}, -{44,65,-78}, -{44,65,-77}, -{44,65,-76}, -{44,65,-75}, -{44,65,-74}, -{44,65,-73}, -{44,65,-72}, -{44,65,-71}, -{44,65,-70}, -{44,65,-69}, -{44,65,-68}, -{44,65,-67}, -{44,65,-66}, -{44,65,-65}, -{44,65,-64}, -{44,65,-63}, -{44,65,-62}, -{44,65,-61}, -{44,65,-60}, -{44,65,-59}, -{44,65,-58}, -{44,65,-57}, -{44,65,-56}, -{44,65,-55}, -{44,65,-54}, -{44,65,-53}, -{44,65,-52}, -{44,65,-51}, -{44,65,-50}, -{44,65,-49}, -{44,65,-48}, -{44,65,-47}, -{44,65,-46}, -{44,65,-45}, -{44,65,-44}, -{44,65,-43}, -{44,65,-42}, -{44,65,-41}, -{44,65,-40}, -{44,65,-39}, -{44,65,-38}, -{44,65,-37}, -{44,65,-36}, -{44,65,-35}, -{44,65,-34}, -{44,65,-33}, -{44,65,-32}, -{44,65,-31}, -{44,65,-30}, -{44,65,-29}, -{44,65,-28}, -{44,65,-27}, -{44,65,-26}, -{44,65,-25}, -{44,65,-24}, -{44,65,-23}, -{44,65,-22}, -{44,65,-21}, -{44,65,-20}, -{44,65,-19}, -{44,65,-18}, -{44,65,-17}, -{44,65,-16}, -{44,65,-15}, -{44,65,-14}, -{44,65,-13}, -{44,65,-12}, -{44,65,-11}, -{44,65,-10}, -{44,65,-9}, -{44,65,-8}, -{44,65,-7}, -{44,65,-6}, -{44,65,-5}, -{44,65,-4}, -{44,65,-3}, -{44,65,-2}, -{44,65,-1}, -{44,65,0}, -{44,65,1}, -{44,65,2}, -{44,65,3}, -{44,65,4}, -{44,65,5}, -{44,65,6}, -{44,65,7}, -{44,65,8}, -{44,65,9}, -{44,65,10}, -{44,65,11}, -{44,65,12}, -{44,65,13}, -{44,65,14}, -{44,65,15}, -{44,65,16}, -{44,65,17}, -{44,65,18}, -{44,65,19}, -{44,65,20}, -{44,65,21}, -{44,65,22}, -{44,65,23}, -{44,65,24}, -{44,65,25}, -{44,65,26}, -{44,65,27}, -{44,65,28}, -{44,65,29}, -{44,65,30}, -{44,65,31}, -{44,65,32}, -{44,65,33}, -{44,65,34}, -{44,65,35}, -{44,65,36}, -{44,65,37}, -{44,65,38}, -{44,65,39}, -{44,65,40}, -{44,65,41}, -{44,65,42}, -{44,65,43}, -{44,65,44}, -{44,65,45}, -{44,65,46}, -{44,65,47}, -{44,65,48}, -{44,65,49}, -{44,65,50}, -{44,65,51}, -{44,65,52}, -{44,65,53}, -{44,65,54}, -{44,65,55}, -{44,65,56}, -{44,65,57}, -{44,66,-88}, -{44,66,-87}, -{44,66,-86}, -{44,66,-85}, -{44,66,-84}, -{44,66,-83}, -{44,66,-82}, -{44,66,-81}, -{44,66,-80}, -{44,66,-79}, -{44,66,-78}, -{44,66,-77}, -{44,66,-76}, -{44,66,-75}, -{44,66,-74}, -{44,66,-73}, -{44,66,-72}, -{44,66,-71}, -{44,66,-70}, -{44,66,-69}, -{44,66,-68}, -{44,66,-67}, -{44,66,-66}, -{44,66,-65}, -{44,66,-64}, -{44,66,-63}, -{44,66,-62}, -{44,66,-61}, -{44,66,-60}, -{44,66,-59}, -{44,66,-58}, -{44,66,-57}, -{44,66,-56}, -{44,66,-55}, -{44,66,-54}, -{44,66,-53}, -{44,66,-52}, -{44,66,-51}, -{44,66,-50}, -{44,66,-49}, -{44,66,-48}, -{44,66,-47}, -{44,66,-46}, -{44,66,-45}, -{44,66,-44}, -{44,66,-43}, -{44,66,-42}, -{44,66,-41}, -{44,66,-40}, -{44,66,-39}, -{44,66,-38}, -{44,66,-37}, -{44,66,-36}, -{44,66,-35}, -{44,66,-34}, -{44,66,-33}, -{44,66,-32}, -{44,66,-31}, -{44,66,-30}, -{44,66,-29}, -{44,66,-28}, -{44,66,-27}, -{44,66,-26}, -{44,66,-25}, -{44,66,-24}, -{44,66,-23}, -{44,66,-22}, -{44,66,-21}, -{44,66,-20}, -{44,66,-19}, -{44,66,-18}, -{44,66,-17}, -{44,66,-16}, -{44,66,-15}, -{44,66,-14}, -{44,66,-13}, -{44,66,-12}, -{44,66,-11}, -{44,66,-10}, -{44,66,-9}, -{44,66,-8}, -{44,66,-7}, -{44,66,-6}, -{44,66,-5}, -{44,66,-4}, -{44,66,-3}, -{44,66,-2}, -{44,66,-1}, -{44,66,0}, -{44,66,1}, -{44,66,2}, -{44,66,3}, -{44,66,4}, -{44,66,5}, -{44,66,6}, -{44,66,7}, -{44,66,8}, -{44,66,9}, -{44,66,10}, -{44,66,11}, -{44,66,12}, -{44,66,13}, -{44,66,14}, -{44,66,15}, -{44,66,16}, -{44,66,17}, -{44,66,18}, -{44,66,19}, -{44,66,20}, -{44,66,21}, -{44,66,22}, -{44,66,23}, -{44,66,24}, -{44,66,25}, -{44,66,26}, -{44,66,27}, -{44,66,28}, -{44,66,29}, -{44,66,30}, -{44,66,31}, -{44,66,32}, -{44,66,33}, -{44,66,34}, -{44,66,35}, -{44,66,36}, -{44,66,37}, -{44,66,38}, -{44,66,39}, -{44,66,40}, -{44,66,41}, -{44,66,42}, -{44,66,43}, -{44,66,44}, -{44,66,45}, -{44,66,46}, -{44,66,47}, -{44,66,48}, -{44,66,49}, -{44,66,50}, -{44,66,51}, -{44,66,52}, -{44,66,53}, -{44,66,54}, -{44,66,55}, -{44,66,56}, -{44,66,57}, -{44,67,-88}, -{44,67,-87}, -{44,67,-86}, -{44,67,-85}, -{44,67,-84}, -{44,67,-83}, -{44,67,-82}, -{44,67,-81}, -{44,67,-80}, -{44,67,-79}, -{44,67,-78}, -{44,67,-77}, -{44,67,-76}, -{44,67,-75}, -{44,67,-74}, -{44,67,-73}, -{44,67,-72}, -{44,67,-71}, -{44,67,-70}, -{44,67,-69}, -{44,67,-68}, -{44,67,-67}, -{44,67,-66}, -{44,67,-65}, -{44,67,-64}, -{44,67,-63}, -{44,67,-62}, -{44,67,-61}, -{44,67,-60}, -{44,67,-59}, -{44,67,-58}, -{44,67,-57}, -{44,67,-56}, -{44,67,-55}, -{44,67,-54}, -{44,67,-53}, -{44,67,-52}, -{44,67,-51}, -{44,67,-50}, -{44,67,-49}, -{44,67,-48}, -{44,67,-47}, -{44,67,-46}, -{44,67,-45}, -{44,67,-44}, -{44,67,-43}, -{44,67,-42}, -{44,67,-41}, -{44,67,-40}, -{44,67,-39}, -{44,67,-38}, -{44,67,-37}, -{44,67,-36}, -{44,67,-35}, -{44,67,-34}, -{44,67,-33}, -{44,67,-32}, -{44,67,-31}, -{44,67,-30}, -{44,67,-29}, -{44,67,-28}, -{44,67,-27}, -{44,67,-26}, -{44,67,-25}, -{44,67,-24}, -{44,67,-23}, -{44,67,-22}, -{44,67,-21}, -{44,67,-20}, -{44,67,-19}, -{44,67,-18}, -{44,67,-17}, -{44,67,-16}, -{44,67,-15}, -{44,67,-14}, -{44,67,-13}, -{44,67,-12}, -{44,67,-11}, -{44,67,-10}, -{44,67,-9}, -{44,67,-8}, -{44,67,-7}, -{44,67,-6}, -{44,67,-5}, -{44,67,-4}, -{44,67,-3}, -{44,67,-2}, -{44,67,-1}, -{44,67,0}, -{44,67,1}, -{44,67,2}, -{44,67,3}, -{44,67,4}, -{44,67,5}, -{44,67,6}, -{44,67,7}, -{44,67,8}, -{44,67,9}, -{44,67,10}, -{44,67,11}, -{44,67,12}, -{44,67,13}, -{44,67,14}, -{44,67,15}, -{44,67,16}, -{44,67,17}, -{44,67,18}, -{44,67,19}, -{44,67,20}, -{44,67,21}, -{44,67,22}, -{44,67,23}, -{44,67,24}, -{44,67,25}, -{44,67,26}, -{44,67,27}, -{44,67,28}, -{44,67,29}, -{44,67,30}, -{44,67,31}, -{44,67,32}, -{44,67,33}, -{44,67,34}, -{44,67,35}, -{44,67,36}, -{44,67,37}, -{44,67,38}, -{44,67,39}, -{44,67,40}, -{44,67,41}, -{44,67,42}, -{44,67,43}, -{44,67,44}, -{44,67,45}, -{44,67,46}, -{44,67,47}, -{44,67,48}, -{44,67,49}, -{44,67,50}, -{44,67,51}, -{44,67,52}, -{44,67,53}, -{44,67,54}, -{44,67,55}, -{44,67,56}, -{44,67,57}, -{44,67,58}, -{44,68,-88}, -{44,68,-87}, -{44,68,-86}, -{44,68,-85}, -{44,68,-84}, -{44,68,-83}, -{44,68,-82}, -{44,68,-81}, -{44,68,-80}, -{44,68,-79}, -{44,68,-78}, -{44,68,-77}, -{44,68,-76}, -{44,68,-75}, -{44,68,-74}, -{44,68,-73}, -{44,68,-72}, -{44,68,-71}, -{44,68,-70}, -{44,68,-69}, -{44,68,-68}, -{44,68,-67}, -{44,68,-66}, -{44,68,-65}, -{44,68,-64}, -{44,68,-63}, -{44,68,-62}, -{44,68,-61}, -{44,68,-60}, -{44,68,-59}, -{44,68,-58}, -{44,68,-57}, -{44,68,-56}, -{44,68,-55}, -{44,68,-54}, -{44,68,-53}, -{44,68,-52}, -{44,68,-51}, -{44,68,-50}, -{44,68,-49}, -{44,68,-48}, -{44,68,-47}, -{44,68,-46}, -{44,68,-45}, -{44,68,-44}, -{44,68,-43}, -{44,68,-42}, -{44,68,-41}, -{44,68,-40}, -{44,68,-39}, -{44,68,-38}, -{44,68,-37}, -{44,68,-36}, -{44,68,-35}, -{44,68,-34}, -{44,68,-33}, -{44,68,-32}, -{44,68,-31}, -{44,68,-30}, -{44,68,-29}, -{44,68,-28}, -{44,68,-27}, -{44,68,-26}, -{44,68,-25}, -{44,68,-24}, -{44,68,-23}, -{44,68,-22}, -{44,68,-21}, -{44,68,-20}, -{44,68,-19}, -{44,68,-18}, -{44,68,-17}, -{44,68,-16}, -{44,68,-15}, -{44,68,-14}, -{44,68,-13}, -{44,68,-12}, -{44,68,-11}, -{44,68,-10}, -{44,68,-9}, -{44,68,-8}, -{44,68,-7}, -{44,68,-6}, -{44,68,-5}, -{44,68,-4}, -{44,68,-3}, -{44,68,-2}, -{44,68,-1}, -{44,68,0}, -{44,68,1}, -{44,68,2}, -{44,68,3}, -{44,68,4}, -{44,68,5}, -{44,68,6}, -{44,68,7}, -{44,68,8}, -{44,68,9}, -{44,68,10}, -{44,68,11}, -{44,68,12}, -{44,68,13}, -{44,68,14}, -{44,68,15}, -{44,68,16}, -{44,68,17}, -{44,68,18}, -{44,68,19}, -{44,68,20}, -{44,68,21}, -{44,68,22}, -{44,68,23}, -{44,68,24}, -{44,68,25}, -{44,68,26}, -{44,68,27}, -{44,68,28}, -{44,68,29}, -{44,68,30}, -{44,68,31}, -{44,68,32}, -{44,68,33}, -{44,68,34}, -{44,68,35}, -{44,68,36}, -{44,68,37}, -{44,68,38}, -{44,68,39}, -{44,68,40}, -{44,68,41}, -{44,68,42}, -{44,68,43}, -{44,68,44}, -{44,68,45}, -{44,68,46}, -{44,68,47}, -{44,68,48}, -{44,68,49}, -{44,68,50}, -{44,68,51}, -{44,68,52}, -{44,68,53}, -{44,68,54}, -{44,68,55}, -{44,68,56}, -{44,68,57}, -{44,68,58}, -{44,69,-88}, -{44,69,-87}, -{44,69,-86}, -{44,69,-85}, -{44,69,-84}, -{44,69,-83}, -{44,69,-82}, -{44,69,-81}, -{44,69,-80}, -{44,69,-79}, -{44,69,-78}, -{44,69,-77}, -{44,69,-76}, -{44,69,-75}, -{44,69,-74}, -{44,69,-73}, -{44,69,-72}, -{44,69,-71}, -{44,69,-70}, -{44,69,-69}, -{44,69,-68}, -{44,69,-67}, -{44,69,-66}, -{44,69,-65}, -{44,69,-64}, -{44,69,-63}, -{44,69,-62}, -{44,69,-61}, -{44,69,-60}, -{44,69,-59}, -{44,69,-58}, -{44,69,-57}, -{44,69,-56}, -{44,69,-55}, -{44,69,-54}, -{44,69,-53}, -{44,69,-52}, -{44,69,-51}, -{44,69,-50}, -{44,69,-49}, -{44,69,-48}, -{44,69,-47}, -{44,69,-46}, -{44,69,-45}, -{44,69,-44}, -{44,69,-43}, -{44,69,-42}, -{44,69,-41}, -{44,69,-40}, -{44,69,-39}, -{44,69,-38}, -{44,69,-37}, -{44,69,-36}, -{44,69,-35}, -{44,69,-34}, -{44,69,-33}, -{44,69,-32}, -{44,69,-31}, -{44,69,-30}, -{44,69,-29}, -{44,69,-28}, -{44,69,-27}, -{44,69,-26}, -{44,69,-25}, -{44,69,-24}, -{44,69,-23}, -{44,69,-22}, -{44,69,-21}, -{44,69,-20}, -{44,69,-19}, -{44,69,-18}, -{44,69,-17}, -{44,69,-16}, -{44,69,-15}, -{44,69,-14}, -{44,69,-13}, -{44,69,-12}, -{44,69,-11}, -{44,69,-10}, -{44,69,-9}, -{44,69,-8}, -{44,69,-7}, -{44,69,-6}, -{44,69,-5}, -{44,69,-4}, -{44,69,-3}, -{44,69,-2}, -{44,69,-1}, -{44,69,0}, -{44,69,1}, -{44,69,2}, -{44,69,3}, -{44,69,4}, -{44,69,5}, -{44,69,6}, -{44,69,7}, -{44,69,8}, -{44,69,9}, -{44,69,10}, -{44,69,11}, -{44,69,12}, -{44,69,13}, -{44,69,14}, -{44,69,15}, -{44,69,16}, -{44,69,17}, -{44,69,18}, -{44,69,19}, -{44,69,20}, -{44,69,21}, -{44,69,22}, -{44,69,23}, -{44,69,24}, -{44,69,25}, -{44,69,26}, -{44,69,27}, -{44,69,28}, -{44,69,29}, -{44,69,30}, -{44,69,31}, -{44,69,32}, -{44,69,33}, -{44,69,34}, -{44,69,35}, -{44,69,36}, -{44,69,37}, -{44,69,38}, -{44,69,39}, -{44,69,40}, -{44,69,41}, -{44,69,42}, -{44,69,43}, -{44,69,44}, -{44,69,45}, -{44,69,46}, -{44,69,47}, -{44,69,48}, -{44,69,49}, -{44,69,50}, -{44,69,51}, -{44,69,52}, -{44,69,53}, -{44,69,54}, -{44,69,55}, -{44,69,56}, -{44,69,57}, -{44,69,58}, -{44,70,-88}, -{44,70,-87}, -{44,70,-86}, -{44,70,-85}, -{44,70,-84}, -{44,70,-83}, -{44,70,-82}, -{44,70,-81}, -{44,70,-80}, -{44,70,-79}, -{44,70,-78}, -{44,70,-77}, -{44,70,-76}, -{44,70,-75}, -{44,70,-74}, -{44,70,-73}, -{44,70,-72}, -{44,70,-71}, -{44,70,-70}, -{44,70,-69}, -{44,70,-68}, -{44,70,-67}, -{44,70,-66}, -{44,70,-65}, -{44,70,-64}, -{44,70,-63}, -{44,70,-62}, -{44,70,-61}, -{44,70,-60}, -{44,70,-59}, -{44,70,-58}, -{44,70,-57}, -{44,70,-56}, -{44,70,-55}, -{44,70,-54}, -{44,70,-53}, -{44,70,-52}, -{44,70,-51}, -{44,70,-50}, -{44,70,-49}, -{44,70,-48}, -{44,70,-47}, -{44,70,-46}, -{44,70,-45}, -{44,70,-44}, -{44,70,-43}, -{44,70,-42}, -{44,70,-41}, -{44,70,-40}, -{44,70,-39}, -{44,70,-38}, -{44,70,-37}, -{44,70,-36}, -{44,70,-35}, -{44,70,-34}, -{44,70,-33}, -{44,70,-32}, -{44,70,-31}, -{44,70,-30}, -{44,70,-29}, -{44,70,-28}, -{44,70,-27}, -{44,70,-26}, -{44,70,-25}, -{44,70,-24}, -{44,70,-23}, -{44,70,-22}, -{44,70,-21}, -{44,70,-20}, -{44,70,-19}, -{44,70,-18}, -{44,70,-17}, -{44,70,-16}, -{44,70,-15}, -{44,70,-14}, -{44,70,-13}, -{44,70,-12}, -{44,70,-11}, -{44,70,-10}, -{44,70,-9}, -{44,70,-8}, -{44,70,-7}, -{44,70,-6}, -{44,70,-5}, -{44,70,-4}, -{44,70,-3}, -{44,70,-2}, -{44,70,-1}, -{44,70,0}, -{44,70,1}, -{44,70,2}, -{44,70,3}, -{44,70,4}, -{44,70,5}, -{44,70,6}, -{44,70,7}, -{44,70,8}, -{44,70,9}, -{44,70,10}, -{44,70,11}, -{44,70,12}, -{44,70,13}, -{44,70,14}, -{44,70,15}, -{44,70,16}, -{44,70,17}, -{44,70,18}, -{44,70,19}, -{44,70,20}, -{44,70,21}, -{44,70,22}, -{44,70,23}, -{44,70,24}, -{44,70,25}, -{44,70,26}, -{44,70,27}, -{44,70,28}, -{44,70,29}, -{44,70,30}, -{44,70,31}, -{44,70,32}, -{44,70,33}, -{44,70,34}, -{44,70,35}, -{44,70,36}, -{44,70,37}, -{44,70,38}, -{44,70,39}, -{44,71,-88}, -{44,71,-87}, -{44,71,-86}, -{44,71,-85}, -{44,71,-84}, -{44,71,-83}, -{44,71,-82}, -{44,71,-81}, -{44,71,-80}, -{44,71,-79}, -{44,71,-78}, -{44,71,-77}, -{44,71,-76}, -{44,71,-75}, -{44,71,-74}, -{44,71,-73}, -{44,71,-72}, -{44,71,-71}, -{44,71,-70}, -{44,71,-69}, -{44,71,-68}, -{44,71,-67}, -{44,71,-66}, -{44,71,-65}, -{44,71,-64}, -{44,71,-63}, -{44,71,-62}, -{44,71,-61}, -{44,71,-60}, -{44,71,-59}, -{44,71,-58}, -{44,71,-57}, -{44,71,-56}, -{44,71,-55}, -{44,71,-54}, -{44,71,-53}, -{44,71,-52}, -{44,71,-51}, -{44,71,-50}, -{44,71,-49}, -{44,71,-48}, -{44,71,-47}, -{44,71,-46}, -{44,71,-45}, -{44,71,-44}, -{44,71,-43}, -{44,71,-42}, -{44,71,-41}, -{44,71,-40}, -{44,71,-39}, -{44,71,-38}, -{44,71,-37}, -{44,71,-36}, -{44,71,-35}, -{44,71,-34}, -{44,71,-33}, -{44,71,-32}, -{44,71,-31}, -{44,71,-30}, -{44,71,-29}, -{44,71,-28}, -{44,71,-27}, -{44,71,-26}, -{44,71,-25}, -{44,71,-24}, -{44,71,-23}, -{44,71,-22}, -{44,71,-21}, -{44,71,-20}, -{44,71,-19}, -{44,71,-18}, -{44,71,-17}, -{44,71,-16}, -{44,71,-15}, -{44,71,-14}, -{44,71,-13}, -{44,71,-12}, -{44,71,-11}, -{44,71,-10}, -{44,71,-9}, -{44,71,-8}, -{44,71,-7}, -{44,71,-6}, -{44,71,-5}, -{44,71,-4}, -{44,71,-3}, -{44,71,-2}, -{44,71,-1}, -{44,71,0}, -{44,71,1}, -{44,71,2}, -{44,71,3}, -{44,71,4}, -{44,71,5}, -{44,71,6}, -{44,71,7}, -{44,71,8}, -{44,71,9}, -{44,71,10}, -{44,71,11}, -{44,71,12}, -{44,71,13}, -{44,71,14}, -{44,72,-88}, -{44,72,-87}, -{44,72,-86}, -{44,72,-85}, -{44,72,-84}, -{44,72,-83}, -{44,72,-82}, -{44,72,-81}, -{44,72,-80}, -{44,72,-79}, -{44,72,-78}, -{44,72,-77}, -{44,72,-76}, -{44,72,-75}, -{44,72,-74}, -{44,72,-73}, -{44,72,-72}, -{44,72,-71}, -{44,72,-70}, -{44,72,-69}, -{44,72,-68}, -{44,72,-67}, -{44,72,-66}, -{44,72,-65}, -{44,72,-64}, -{44,72,-63}, -{44,72,-62}, -{44,72,-61}, -{44,72,-60}, -{44,72,-59}, -{44,72,-58}, -{44,72,-57}, -{44,72,-56}, -{44,72,-55}, -{44,72,-54}, -{44,72,-53}, -{44,72,-52}, -{44,72,-51}, -{44,72,-50}, -{44,72,-49}, -{44,72,-48}, -{44,72,-47}, -{44,72,-46}, -{44,72,-45}, -{44,72,-44}, -{44,72,-43}, -{44,72,-42}, -{44,72,-41}, -{44,72,-40}, -{44,72,-39}, -{44,72,-38}, -{44,72,-37}, -{44,72,-36}, -{44,72,-35}, -{44,72,-34}, -{44,72,-33}, -{44,72,-32}, -{44,72,-31}, -{44,72,-30}, -{44,72,-29}, -{44,72,-28}, -{44,72,-27}, -{44,72,-26}, -{44,72,-25}, -{44,72,-24}, -{44,72,-23}, -{44,72,-22}, -{44,72,-21}, -{44,72,-20}, -{44,72,-19}, -{44,72,-18}, -{44,72,-17}, -{44,72,-16}, -{44,72,-15}, -{44,72,-14}, -{44,72,-13}, -{44,72,-12}, -{44,72,-11}, -{44,72,-10}, -{44,72,-9}, -{44,72,-8}, -{44,72,-7}, -{44,72,-6}, -{44,72,-5}, -{44,72,-4}, -{44,72,-3}, -{44,72,-2}, -{44,72,-1}, -{44,73,-88}, -{44,73,-87}, -{44,73,-86}, -{44,73,-85}, -{44,73,-84}, -{44,73,-83}, -{44,73,-82}, -{44,73,-81}, -{44,73,-80}, -{44,73,-79}, -{44,73,-78}, -{44,73,-77}, -{44,73,-76}, -{44,73,-75}, -{44,73,-74}, -{44,73,-73}, -{44,73,-72}, -{44,73,-71}, -{44,73,-70}, -{44,73,-69}, -{44,73,-68}, -{44,73,-67}, -{44,73,-66}, -{44,73,-65}, -{44,73,-64}, -{44,73,-63}, -{44,73,-62}, -{44,73,-61}, -{44,73,-60}, -{44,73,-59}, -{44,73,-58}, -{44,73,-57}, -{44,73,-56}, -{44,73,-55}, -{44,73,-54}, -{44,73,-53}, -{44,73,-52}, -{44,73,-51}, -{44,73,-50}, -{44,73,-49}, -{44,73,-48}, -{44,73,-47}, -{44,73,-46}, -{44,73,-45}, -{44,73,-44}, -{44,73,-43}, -{44,73,-42}, -{44,73,-41}, -{44,73,-40}, -{44,73,-39}, -{44,73,-38}, -{44,73,-37}, -{44,73,-36}, -{44,73,-35}, -{44,73,-34}, -{44,73,-33}, -{44,73,-32}, -{44,73,-31}, -{44,73,-30}, -{44,73,-29}, -{44,73,-28}, -{44,73,-27}, -{44,73,-26}, -{44,73,-25}, -{44,73,-24}, -{44,73,-23}, -{44,73,-22}, -{44,73,-21}, -{44,73,-20}, -{44,73,-19}, -{44,73,-18}, -{44,73,-17}, -{44,73,-16}, -{44,73,-15}, -{44,73,-14}, -{44,73,-13}, -{44,74,-88}, -{44,74,-87}, -{44,74,-86}, -{44,74,-85}, -{44,74,-84}, -{44,74,-83}, -{44,74,-82}, -{44,74,-81}, -{44,74,-80}, -{44,74,-79}, -{44,74,-78}, -{44,74,-77}, -{44,74,-76}, -{44,74,-75}, -{44,74,-74}, -{44,74,-73}, -{44,74,-72}, -{44,74,-71}, -{44,74,-70}, -{44,74,-69}, -{44,74,-68}, -{44,74,-67}, -{44,74,-66}, -{44,74,-65}, -{44,74,-64}, -{44,74,-63}, -{44,74,-62}, -{44,74,-61}, -{44,74,-60}, -{44,74,-59}, -{44,74,-58}, -{44,74,-57}, -{44,74,-56}, -{44,74,-55}, -{44,74,-54}, -{44,74,-53}, -{44,74,-52}, -{44,74,-51}, -{44,74,-50}, -{44,74,-49}, -{44,74,-48}, -{44,74,-47}, -{44,74,-46}, -{44,74,-45}, -{44,74,-44}, -{44,74,-43}, -{44,74,-42}, -{44,74,-41}, -{44,74,-40}, -{44,74,-39}, -{44,74,-38}, -{44,74,-37}, -{44,74,-36}, -{44,74,-35}, -{44,74,-34}, -{44,74,-33}, -{44,74,-32}, -{44,74,-31}, -{44,74,-30}, -{44,74,-29}, -{44,74,-28}, -{44,74,-27}, -{44,74,-26}, -{44,74,-25}, -{44,74,-24}, -{44,74,-23}, -{44,75,-88}, -{44,75,-87}, -{44,75,-86}, -{44,75,-85}, -{44,75,-84}, -{44,75,-83}, -{44,75,-82}, -{44,75,-81}, -{44,75,-80}, -{44,75,-79}, -{44,75,-78}, -{44,75,-77}, -{44,75,-76}, -{44,75,-75}, -{44,75,-74}, -{44,75,-73}, -{44,75,-72}, -{44,75,-71}, -{44,75,-70}, -{44,75,-69}, -{44,75,-68}, -{44,75,-67}, -{44,75,-66}, -{44,75,-65}, -{44,75,-64}, -{44,75,-63}, -{44,75,-62}, -{44,75,-61}, -{44,75,-60}, -{44,75,-59}, -{44,75,-58}, -{44,75,-57}, -{44,75,-56}, -{44,75,-55}, -{44,75,-54}, -{44,75,-53}, -{44,75,-52}, -{44,75,-51}, -{44,75,-50}, -{44,75,-49}, -{44,75,-48}, -{44,75,-47}, -{44,75,-46}, -{44,75,-45}, -{44,75,-44}, -{44,75,-43}, -{44,75,-42}, -{44,75,-41}, -{44,75,-40}, -{44,75,-39}, -{44,75,-38}, -{44,75,-37}, -{44,75,-36}, -{44,75,-35}, -{44,75,-34}, -{44,75,-33}, -{44,75,-32}, -{44,75,-31}, -{44,76,-88}, -{44,76,-87}, -{44,76,-86}, -{44,76,-85}, -{44,76,-84}, -{44,76,-83}, -{44,76,-82}, -{44,76,-81}, -{44,76,-80}, -{44,76,-79}, -{44,76,-78}, -{44,76,-77}, -{44,76,-76}, -{44,76,-75}, -{44,76,-74}, -{44,76,-73}, -{44,76,-72}, -{44,76,-71}, -{44,76,-70}, -{44,76,-69}, -{44,76,-68}, -{44,76,-67}, -{44,76,-66}, -{44,76,-65}, -{44,76,-64}, -{44,76,-63}, -{44,76,-62}, -{44,76,-61}, -{44,76,-60}, -{44,76,-59}, -{44,76,-58}, -{44,76,-57}, -{44,76,-56}, -{44,76,-55}, -{44,76,-54}, -{44,76,-53}, -{44,76,-52}, -{44,76,-51}, -{44,76,-50}, -{44,76,-49}, -{44,76,-48}, -{44,76,-47}, -{44,76,-46}, -{44,76,-45}, -{44,76,-44}, -{44,76,-43}, -{44,76,-42}, -{44,76,-41}, -{44,76,-40}, -{44,76,-39}, -{44,77,-88}, -{44,77,-87}, -{44,77,-86}, -{44,77,-85}, -{44,77,-84}, -{44,77,-83}, -{44,77,-82}, -{44,77,-81}, -{44,77,-80}, -{44,77,-79}, -{44,77,-78}, -{44,77,-77}, -{44,77,-76}, -{44,77,-75}, -{44,77,-74}, -{44,77,-73}, -{44,77,-72}, -{44,77,-71}, -{44,77,-70}, -{44,77,-69}, -{44,77,-68}, -{44,77,-67}, -{44,77,-66}, -{44,77,-65}, -{44,77,-64}, -{44,77,-63}, -{44,77,-62}, -{44,77,-61}, -{44,77,-60}, -{44,77,-59}, -{44,77,-58}, -{44,77,-57}, -{44,77,-56}, -{44,77,-55}, -{44,77,-54}, -{44,77,-53}, -{44,77,-52}, -{44,77,-51}, -{44,77,-50}, -{44,77,-49}, -{44,77,-48}, -{44,77,-47}, -{44,77,-46}, -{44,78,-88}, -{44,78,-87}, -{44,78,-86}, -{44,78,-85}, -{44,78,-84}, -{44,78,-83}, -{44,78,-82}, -{44,78,-81}, -{44,78,-80}, -{44,78,-79}, -{44,78,-78}, -{44,78,-77}, -{44,78,-76}, -{44,78,-75}, -{44,78,-74}, -{44,78,-73}, -{44,78,-72}, -{44,78,-71}, -{44,78,-70}, -{44,78,-69}, -{44,78,-68}, -{44,78,-67}, -{44,78,-66}, -{44,78,-65}, -{44,78,-64}, -{44,78,-63}, -{44,78,-62}, -{44,78,-61}, -{44,78,-60}, -{44,78,-59}, -{44,78,-58}, -{44,78,-57}, -{44,78,-56}, -{44,78,-55}, -{44,78,-54}, -{44,78,-53}, -{44,78,-52}, -{44,79,-88}, -{44,79,-87}, -{44,79,-86}, -{44,79,-85}, -{44,79,-84}, -{44,79,-83}, -{44,79,-82}, -{44,79,-81}, -{44,79,-80}, -{44,79,-79}, -{44,79,-78}, -{44,79,-77}, -{44,79,-76}, -{44,79,-75}, -{44,79,-74}, -{44,79,-73}, -{44,79,-72}, -{44,79,-71}, -{44,79,-70}, -{44,79,-69}, -{44,79,-68}, -{44,79,-67}, -{44,79,-66}, -{44,79,-65}, -{44,79,-64}, -{44,79,-63}, -{44,79,-62}, -{44,79,-61}, -{44,79,-60}, -{44,79,-59}, -{44,79,-58}, -{44,80,-88}, -{44,80,-87}, -{44,80,-86}, -{44,80,-85}, -{44,80,-84}, -{44,80,-83}, -{44,80,-82}, -{44,80,-81}, -{44,80,-80}, -{44,80,-79}, -{44,80,-78}, -{44,80,-77}, -{44,80,-76}, -{44,80,-75}, -{44,80,-74}, -{44,80,-73}, -{44,80,-72}, -{44,80,-71}, -{44,80,-70}, -{44,80,-69}, -{44,80,-68}, -{44,80,-67}, -{44,80,-66}, -{44,80,-65}, -{44,80,-64}, -{44,81,-88}, -{44,81,-87}, -{44,81,-86}, -{44,81,-85}, -{44,81,-84}, -{44,81,-83}, -{44,81,-82}, -{44,81,-81}, -{44,81,-80}, -{44,81,-79}, -{44,81,-78}, -{44,81,-77}, -{44,81,-76}, -{44,81,-75}, -{44,81,-74}, -{44,81,-73}, -{44,81,-72}, -{44,81,-71}, -{44,81,-70}, -{44,81,-69}, -{44,82,-88}, -{44,82,-87}, -{44,82,-86}, -{44,82,-85}, -{44,82,-84}, -{44,82,-83}, -{44,82,-82}, -{44,82,-81}, -{44,82,-80}, -{44,82,-79}, -{44,82,-78}, -{44,82,-77}, -{44,82,-76}, -{44,82,-75}, -{44,82,-74}, -{44,83,-88}, -{44,83,-87}, -{44,83,-86}, -{44,83,-85}, -{44,83,-84}, -{44,83,-83}, -{44,83,-82}, -{44,83,-81}, -{44,83,-80}, -{44,83,-79}, -{44,84,-88}, -{44,84,-87}, -{44,84,-86}, -{44,84,-85}, -{44,84,-84}, -{44,84,-83}, -{44,85,-88}, -{44,85,-87}, -{45,-50,45}, -{45,-50,46}, -{45,-50,47}, -{45,-50,48}, -{45,-50,49}, -{45,-49,41}, -{45,-49,42}, -{45,-49,43}, -{45,-49,44}, -{45,-49,45}, -{45,-49,46}, -{45,-49,47}, -{45,-49,48}, -{45,-49,49}, -{45,-48,37}, -{45,-48,38}, -{45,-48,39}, -{45,-48,40}, -{45,-48,41}, -{45,-48,42}, -{45,-48,43}, -{45,-48,44}, -{45,-48,45}, -{45,-48,46}, -{45,-48,47}, -{45,-48,48}, -{45,-48,49}, -{45,-47,34}, -{45,-47,35}, -{45,-47,36}, -{45,-47,37}, -{45,-47,38}, -{45,-47,39}, -{45,-47,40}, -{45,-47,41}, -{45,-47,42}, -{45,-47,43}, -{45,-47,44}, -{45,-47,45}, -{45,-47,46}, -{45,-47,47}, -{45,-47,48}, -{45,-47,49}, -{45,-46,31}, -{45,-46,32}, -{45,-46,33}, -{45,-46,34}, -{45,-46,35}, -{45,-46,36}, -{45,-46,37}, -{45,-46,38}, -{45,-46,39}, -{45,-46,40}, -{45,-46,41}, -{45,-46,42}, -{45,-46,43}, -{45,-46,44}, -{45,-46,45}, -{45,-46,46}, -{45,-46,47}, -{45,-46,48}, -{45,-46,49}, -{45,-45,28}, -{45,-45,29}, -{45,-45,30}, -{45,-45,31}, -{45,-45,32}, -{45,-45,33}, -{45,-45,34}, -{45,-45,35}, -{45,-45,36}, -{45,-45,37}, -{45,-45,38}, -{45,-45,39}, -{45,-45,40}, -{45,-45,41}, -{45,-45,42}, -{45,-45,43}, -{45,-45,44}, -{45,-45,45}, -{45,-45,46}, -{45,-45,47}, -{45,-45,48}, -{45,-45,49}, -{45,-44,25}, -{45,-44,26}, -{45,-44,27}, -{45,-44,28}, -{45,-44,29}, -{45,-44,30}, -{45,-44,31}, -{45,-44,32}, -{45,-44,33}, -{45,-44,34}, -{45,-44,35}, -{45,-44,36}, -{45,-44,37}, -{45,-44,38}, -{45,-44,39}, -{45,-44,40}, -{45,-44,41}, -{45,-44,42}, -{45,-44,43}, -{45,-44,44}, -{45,-44,45}, -{45,-44,46}, -{45,-44,47}, -{45,-44,48}, -{45,-44,49}, -{45,-43,22}, -{45,-43,23}, -{45,-43,24}, -{45,-43,25}, -{45,-43,26}, -{45,-43,27}, -{45,-43,28}, -{45,-43,29}, -{45,-43,30}, -{45,-43,31}, -{45,-43,32}, -{45,-43,33}, -{45,-43,34}, -{45,-43,35}, -{45,-43,36}, -{45,-43,37}, -{45,-43,38}, -{45,-43,39}, -{45,-43,40}, -{45,-43,41}, -{45,-43,42}, -{45,-43,43}, -{45,-43,44}, -{45,-43,45}, -{45,-43,46}, -{45,-43,47}, -{45,-43,48}, -{45,-43,49}, -{45,-42,20}, -{45,-42,21}, -{45,-42,22}, -{45,-42,23}, -{45,-42,24}, -{45,-42,25}, -{45,-42,26}, -{45,-42,27}, -{45,-42,28}, -{45,-42,29}, -{45,-42,30}, -{45,-42,31}, -{45,-42,32}, -{45,-42,33}, -{45,-42,34}, -{45,-42,35}, -{45,-42,36}, -{45,-42,37}, -{45,-42,38}, -{45,-42,39}, -{45,-42,40}, -{45,-42,41}, -{45,-42,42}, -{45,-42,43}, -{45,-42,44}, -{45,-42,45}, -{45,-42,46}, -{45,-42,47}, -{45,-42,48}, -{45,-42,49}, -{45,-41,18}, -{45,-41,19}, -{45,-41,20}, -{45,-41,21}, -{45,-41,22}, -{45,-41,23}, -{45,-41,24}, -{45,-41,25}, -{45,-41,26}, -{45,-41,27}, -{45,-41,28}, -{45,-41,29}, -{45,-41,30}, -{45,-41,31}, -{45,-41,32}, -{45,-41,33}, -{45,-41,34}, -{45,-41,35}, -{45,-41,36}, -{45,-41,37}, -{45,-41,38}, -{45,-41,39}, -{45,-41,40}, -{45,-41,41}, -{45,-41,42}, -{45,-41,43}, -{45,-41,44}, -{45,-41,45}, -{45,-41,46}, -{45,-41,47}, -{45,-41,48}, -{45,-41,49}, -{45,-40,15}, -{45,-40,16}, -{45,-40,17}, -{45,-40,18}, -{45,-40,19}, -{45,-40,20}, -{45,-40,21}, -{45,-40,22}, -{45,-40,23}, -{45,-40,24}, -{45,-40,25}, -{45,-40,26}, -{45,-40,27}, -{45,-40,28}, -{45,-40,29}, -{45,-40,30}, -{45,-40,31}, -{45,-40,32}, -{45,-40,33}, -{45,-40,34}, -{45,-40,35}, -{45,-40,36}, -{45,-40,37}, -{45,-40,38}, -{45,-40,39}, -{45,-40,40}, -{45,-40,41}, -{45,-40,42}, -{45,-40,43}, -{45,-40,44}, -{45,-40,45}, -{45,-40,46}, -{45,-40,47}, -{45,-40,48}, -{45,-40,49}, -{45,-39,13}, -{45,-39,14}, -{45,-39,15}, -{45,-39,16}, -{45,-39,17}, -{45,-39,18}, -{45,-39,19}, -{45,-39,20}, -{45,-39,21}, -{45,-39,22}, -{45,-39,23}, -{45,-39,24}, -{45,-39,25}, -{45,-39,26}, -{45,-39,27}, -{45,-39,28}, -{45,-39,29}, -{45,-39,30}, -{45,-39,31}, -{45,-39,32}, -{45,-39,33}, -{45,-39,34}, -{45,-39,35}, -{45,-39,36}, -{45,-39,37}, -{45,-39,38}, -{45,-39,39}, -{45,-39,40}, -{45,-39,41}, -{45,-39,42}, -{45,-39,43}, -{45,-39,44}, -{45,-39,45}, -{45,-39,46}, -{45,-39,47}, -{45,-39,48}, -{45,-39,49}, -{45,-38,11}, -{45,-38,12}, -{45,-38,13}, -{45,-38,14}, -{45,-38,15}, -{45,-38,16}, -{45,-38,17}, -{45,-38,18}, -{45,-38,19}, -{45,-38,20}, -{45,-38,21}, -{45,-38,22}, -{45,-38,23}, -{45,-38,24}, -{45,-38,25}, -{45,-38,26}, -{45,-38,27}, -{45,-38,28}, -{45,-38,29}, -{45,-38,30}, -{45,-38,31}, -{45,-38,32}, -{45,-38,33}, -{45,-38,34}, -{45,-38,35}, -{45,-38,36}, -{45,-38,37}, -{45,-38,38}, -{45,-38,39}, -{45,-38,40}, -{45,-38,41}, -{45,-38,42}, -{45,-38,43}, -{45,-38,44}, -{45,-38,45}, -{45,-38,46}, -{45,-38,47}, -{45,-38,48}, -{45,-38,49}, -{45,-37,9}, -{45,-37,10}, -{45,-37,11}, -{45,-37,12}, -{45,-37,13}, -{45,-37,14}, -{45,-37,15}, -{45,-37,16}, -{45,-37,17}, -{45,-37,18}, -{45,-37,19}, -{45,-37,20}, -{45,-37,21}, -{45,-37,22}, -{45,-37,23}, -{45,-37,24}, -{45,-37,25}, -{45,-37,26}, -{45,-37,27}, -{45,-37,28}, -{45,-37,29}, -{45,-37,30}, -{45,-37,31}, -{45,-37,32}, -{45,-37,33}, -{45,-37,34}, -{45,-37,35}, -{45,-37,36}, -{45,-37,37}, -{45,-37,38}, -{45,-37,39}, -{45,-37,40}, -{45,-37,41}, -{45,-37,42}, -{45,-37,43}, -{45,-37,44}, -{45,-37,45}, -{45,-37,46}, -{45,-37,47}, -{45,-37,48}, -{45,-37,49}, -{45,-36,7}, -{45,-36,8}, -{45,-36,9}, -{45,-36,10}, -{45,-36,11}, -{45,-36,12}, -{45,-36,13}, -{45,-36,14}, -{45,-36,15}, -{45,-36,16}, -{45,-36,17}, -{45,-36,18}, -{45,-36,19}, -{45,-36,20}, -{45,-36,21}, -{45,-36,22}, -{45,-36,23}, -{45,-36,24}, -{45,-36,25}, -{45,-36,26}, -{45,-36,27}, -{45,-36,28}, -{45,-36,29}, -{45,-36,30}, -{45,-36,31}, -{45,-36,32}, -{45,-36,33}, -{45,-36,34}, -{45,-36,35}, -{45,-36,36}, -{45,-36,37}, -{45,-36,38}, -{45,-36,39}, -{45,-36,40}, -{45,-36,41}, -{45,-36,42}, -{45,-36,43}, -{45,-36,44}, -{45,-36,45}, -{45,-36,46}, -{45,-36,47}, -{45,-36,48}, -{45,-36,49}, -{45,-35,5}, -{45,-35,6}, -{45,-35,7}, -{45,-35,8}, -{45,-35,9}, -{45,-35,10}, -{45,-35,11}, -{45,-35,12}, -{45,-35,13}, -{45,-35,14}, -{45,-35,15}, -{45,-35,16}, -{45,-35,17}, -{45,-35,18}, -{45,-35,19}, -{45,-35,20}, -{45,-35,21}, -{45,-35,22}, -{45,-35,23}, -{45,-35,24}, -{45,-35,25}, -{45,-35,26}, -{45,-35,27}, -{45,-35,28}, -{45,-35,29}, -{45,-35,30}, -{45,-35,31}, -{45,-35,32}, -{45,-35,33}, -{45,-35,34}, -{45,-35,35}, -{45,-35,36}, -{45,-35,37}, -{45,-35,38}, -{45,-35,39}, -{45,-35,40}, -{45,-35,41}, -{45,-35,42}, -{45,-35,43}, -{45,-35,44}, -{45,-35,45}, -{45,-35,46}, -{45,-35,47}, -{45,-35,48}, -{45,-35,49}, -{45,-34,3}, -{45,-34,4}, -{45,-34,5}, -{45,-34,6}, -{45,-34,7}, -{45,-34,8}, -{45,-34,9}, -{45,-34,10}, -{45,-34,11}, -{45,-34,12}, -{45,-34,13}, -{45,-34,14}, -{45,-34,15}, -{45,-34,16}, -{45,-34,17}, -{45,-34,18}, -{45,-34,19}, -{45,-34,20}, -{45,-34,21}, -{45,-34,22}, -{45,-34,23}, -{45,-34,24}, -{45,-34,25}, -{45,-34,26}, -{45,-34,27}, -{45,-34,28}, -{45,-34,29}, -{45,-34,30}, -{45,-34,31}, -{45,-34,32}, -{45,-34,33}, -{45,-34,34}, -{45,-34,35}, -{45,-34,36}, -{45,-34,37}, -{45,-34,38}, -{45,-34,39}, -{45,-34,40}, -{45,-34,41}, -{45,-34,42}, -{45,-34,43}, -{45,-34,44}, -{45,-34,45}, -{45,-34,46}, -{45,-34,47}, -{45,-34,48}, -{45,-34,49}, -{45,-33,2}, -{45,-33,3}, -{45,-33,4}, -{45,-33,5}, -{45,-33,6}, -{45,-33,7}, -{45,-33,8}, -{45,-33,9}, -{45,-33,10}, -{45,-33,11}, -{45,-33,12}, -{45,-33,13}, -{45,-33,14}, -{45,-33,15}, -{45,-33,16}, -{45,-33,17}, -{45,-33,18}, -{45,-33,19}, -{45,-33,20}, -{45,-33,21}, -{45,-33,22}, -{45,-33,23}, -{45,-33,24}, -{45,-33,25}, -{45,-33,26}, -{45,-33,27}, -{45,-33,28}, -{45,-33,29}, -{45,-33,30}, -{45,-33,31}, -{45,-33,32}, -{45,-33,33}, -{45,-33,34}, -{45,-33,35}, -{45,-33,36}, -{45,-33,37}, -{45,-33,38}, -{45,-33,39}, -{45,-33,40}, -{45,-33,41}, -{45,-33,42}, -{45,-33,43}, -{45,-33,44}, -{45,-33,45}, -{45,-33,46}, -{45,-33,47}, -{45,-33,48}, -{45,-33,49}, -{45,-32,0}, -{45,-32,1}, -{45,-32,2}, -{45,-32,3}, -{45,-32,4}, -{45,-32,5}, -{45,-32,6}, -{45,-32,7}, -{45,-32,8}, -{45,-32,9}, -{45,-32,10}, -{45,-32,11}, -{45,-32,12}, -{45,-32,13}, -{45,-32,14}, -{45,-32,15}, -{45,-32,16}, -{45,-32,17}, -{45,-32,18}, -{45,-32,19}, -{45,-32,20}, -{45,-32,21}, -{45,-32,22}, -{45,-32,23}, -{45,-32,24}, -{45,-32,25}, -{45,-32,26}, -{45,-32,27}, -{45,-32,28}, -{45,-32,29}, -{45,-32,30}, -{45,-32,31}, -{45,-32,32}, -{45,-32,33}, -{45,-32,34}, -{45,-32,35}, -{45,-32,36}, -{45,-32,37}, -{45,-32,38}, -{45,-32,39}, -{45,-32,40}, -{45,-32,41}, -{45,-32,42}, -{45,-32,43}, -{45,-32,44}, -{45,-32,45}, -{45,-32,46}, -{45,-32,47}, -{45,-32,48}, -{45,-32,49}, -{45,-31,-2}, -{45,-31,-1}, -{45,-31,0}, -{45,-31,1}, -{45,-31,2}, -{45,-31,3}, -{45,-31,4}, -{45,-31,5}, -{45,-31,6}, -{45,-31,7}, -{45,-31,8}, -{45,-31,9}, -{45,-31,10}, -{45,-31,11}, -{45,-31,12}, -{45,-31,13}, -{45,-31,14}, -{45,-31,15}, -{45,-31,16}, -{45,-31,17}, -{45,-31,18}, -{45,-31,19}, -{45,-31,20}, -{45,-31,21}, -{45,-31,22}, -{45,-31,23}, -{45,-31,24}, -{45,-31,25}, -{45,-31,26}, -{45,-31,27}, -{45,-31,28}, -{45,-31,29}, -{45,-31,30}, -{45,-31,31}, -{45,-31,32}, -{45,-31,33}, -{45,-31,34}, -{45,-31,35}, -{45,-31,36}, -{45,-31,37}, -{45,-31,38}, -{45,-31,39}, -{45,-31,40}, -{45,-31,41}, -{45,-31,42}, -{45,-31,43}, -{45,-31,44}, -{45,-31,45}, -{45,-31,46}, -{45,-31,47}, -{45,-31,48}, -{45,-31,49}, -{45,-31,50}, -{45,-30,-4}, -{45,-30,-3}, -{45,-30,-2}, -{45,-30,-1}, -{45,-30,0}, -{45,-30,1}, -{45,-30,2}, -{45,-30,3}, -{45,-30,4}, -{45,-30,5}, -{45,-30,6}, -{45,-30,7}, -{45,-30,8}, -{45,-30,9}, -{45,-30,10}, -{45,-30,11}, -{45,-30,12}, -{45,-30,13}, -{45,-30,14}, -{45,-30,15}, -{45,-30,16}, -{45,-30,17}, -{45,-30,18}, -{45,-30,19}, -{45,-30,20}, -{45,-30,21}, -{45,-30,22}, -{45,-30,23}, -{45,-30,24}, -{45,-30,25}, -{45,-30,26}, -{45,-30,27}, -{45,-30,28}, -{45,-30,29}, -{45,-30,30}, -{45,-30,31}, -{45,-30,32}, -{45,-30,33}, -{45,-30,34}, -{45,-30,35}, -{45,-30,36}, -{45,-30,37}, -{45,-30,38}, -{45,-30,39}, -{45,-30,40}, -{45,-30,41}, -{45,-30,42}, -{45,-30,43}, -{45,-30,44}, -{45,-30,45}, -{45,-30,46}, -{45,-30,47}, -{45,-30,48}, -{45,-30,49}, -{45,-30,50}, -{45,-29,-5}, -{45,-29,-4}, -{45,-29,-3}, -{45,-29,-2}, -{45,-29,-1}, -{45,-29,0}, -{45,-29,1}, -{45,-29,2}, -{45,-29,3}, -{45,-29,4}, -{45,-29,5}, -{45,-29,6}, -{45,-29,7}, -{45,-29,8}, -{45,-29,9}, -{45,-29,10}, -{45,-29,11}, -{45,-29,12}, -{45,-29,13}, -{45,-29,14}, -{45,-29,15}, -{45,-29,16}, -{45,-29,17}, -{45,-29,18}, -{45,-29,19}, -{45,-29,20}, -{45,-29,21}, -{45,-29,22}, -{45,-29,23}, -{45,-29,24}, -{45,-29,25}, -{45,-29,26}, -{45,-29,27}, -{45,-29,28}, -{45,-29,29}, -{45,-29,30}, -{45,-29,31}, -{45,-29,32}, -{45,-29,33}, -{45,-29,34}, -{45,-29,35}, -{45,-29,36}, -{45,-29,37}, -{45,-29,38}, -{45,-29,39}, -{45,-29,40}, -{45,-29,41}, -{45,-29,42}, -{45,-29,43}, -{45,-29,44}, -{45,-29,45}, -{45,-29,46}, -{45,-29,47}, -{45,-29,48}, -{45,-29,49}, -{45,-29,50}, -{45,-28,-7}, -{45,-28,-6}, -{45,-28,-5}, -{45,-28,-4}, -{45,-28,-3}, -{45,-28,-2}, -{45,-28,-1}, -{45,-28,0}, -{45,-28,1}, -{45,-28,2}, -{45,-28,3}, -{45,-28,4}, -{45,-28,5}, -{45,-28,6}, -{45,-28,7}, -{45,-28,8}, -{45,-28,9}, -{45,-28,10}, -{45,-28,11}, -{45,-28,12}, -{45,-28,13}, -{45,-28,14}, -{45,-28,15}, -{45,-28,16}, -{45,-28,17}, -{45,-28,18}, -{45,-28,19}, -{45,-28,20}, -{45,-28,21}, -{45,-28,22}, -{45,-28,23}, -{45,-28,24}, -{45,-28,25}, -{45,-28,26}, -{45,-28,27}, -{45,-28,28}, -{45,-28,29}, -{45,-28,30}, -{45,-28,31}, -{45,-28,32}, -{45,-28,33}, -{45,-28,34}, -{45,-28,35}, -{45,-28,36}, -{45,-28,37}, -{45,-28,38}, -{45,-28,39}, -{45,-28,40}, -{45,-28,41}, -{45,-28,42}, -{45,-28,43}, -{45,-28,44}, -{45,-28,45}, -{45,-28,46}, -{45,-28,47}, -{45,-28,48}, -{45,-28,49}, -{45,-28,50}, -{45,-27,-8}, -{45,-27,-7}, -{45,-27,-6}, -{45,-27,-5}, -{45,-27,-4}, -{45,-27,-3}, -{45,-27,-2}, -{45,-27,-1}, -{45,-27,0}, -{45,-27,1}, -{45,-27,2}, -{45,-27,3}, -{45,-27,4}, -{45,-27,5}, -{45,-27,6}, -{45,-27,7}, -{45,-27,8}, -{45,-27,9}, -{45,-27,10}, -{45,-27,11}, -{45,-27,12}, -{45,-27,13}, -{45,-27,14}, -{45,-27,15}, -{45,-27,16}, -{45,-27,17}, -{45,-27,18}, -{45,-27,19}, -{45,-27,20}, -{45,-27,21}, -{45,-27,22}, -{45,-27,23}, -{45,-27,24}, -{45,-27,25}, -{45,-27,26}, -{45,-27,27}, -{45,-27,28}, -{45,-27,29}, -{45,-27,30}, -{45,-27,31}, -{45,-27,32}, -{45,-27,33}, -{45,-27,34}, -{45,-27,35}, -{45,-27,36}, -{45,-27,37}, -{45,-27,38}, -{45,-27,39}, -{45,-27,40}, -{45,-27,41}, -{45,-27,42}, -{45,-27,43}, -{45,-27,44}, -{45,-27,45}, -{45,-27,46}, -{45,-27,47}, -{45,-27,48}, -{45,-27,49}, -{45,-27,50}, -{45,-26,-10}, -{45,-26,-9}, -{45,-26,-8}, -{45,-26,-7}, -{45,-26,-6}, -{45,-26,-5}, -{45,-26,-4}, -{45,-26,-3}, -{45,-26,-2}, -{45,-26,-1}, -{45,-26,0}, -{45,-26,1}, -{45,-26,2}, -{45,-26,3}, -{45,-26,4}, -{45,-26,5}, -{45,-26,6}, -{45,-26,7}, -{45,-26,8}, -{45,-26,9}, -{45,-26,10}, -{45,-26,11}, -{45,-26,12}, -{45,-26,13}, -{45,-26,14}, -{45,-26,15}, -{45,-26,16}, -{45,-26,17}, -{45,-26,18}, -{45,-26,19}, -{45,-26,20}, -{45,-26,21}, -{45,-26,22}, -{45,-26,23}, -{45,-26,24}, -{45,-26,25}, -{45,-26,26}, -{45,-26,27}, -{45,-26,28}, -{45,-26,29}, -{45,-26,30}, -{45,-26,31}, -{45,-26,32}, -{45,-26,33}, -{45,-26,34}, -{45,-26,35}, -{45,-26,36}, -{45,-26,37}, -{45,-26,38}, -{45,-26,39}, -{45,-26,40}, -{45,-26,41}, -{45,-26,42}, -{45,-26,43}, -{45,-26,44}, -{45,-26,45}, -{45,-26,46}, -{45,-26,47}, -{45,-26,48}, -{45,-26,49}, -{45,-26,50}, -{45,-25,-11}, -{45,-25,-10}, -{45,-25,-9}, -{45,-25,-8}, -{45,-25,-7}, -{45,-25,-6}, -{45,-25,-5}, -{45,-25,-4}, -{45,-25,-3}, -{45,-25,-2}, -{45,-25,-1}, -{45,-25,0}, -{45,-25,1}, -{45,-25,2}, -{45,-25,3}, -{45,-25,4}, -{45,-25,5}, -{45,-25,6}, -{45,-25,7}, -{45,-25,8}, -{45,-25,9}, -{45,-25,10}, -{45,-25,11}, -{45,-25,12}, -{45,-25,13}, -{45,-25,14}, -{45,-25,15}, -{45,-25,16}, -{45,-25,17}, -{45,-25,18}, -{45,-25,19}, -{45,-25,20}, -{45,-25,21}, -{45,-25,22}, -{45,-25,23}, -{45,-25,24}, -{45,-25,25}, -{45,-25,26}, -{45,-25,27}, -{45,-25,28}, -{45,-25,29}, -{45,-25,30}, -{45,-25,31}, -{45,-25,32}, -{45,-25,33}, -{45,-25,34}, -{45,-25,35}, -{45,-25,36}, -{45,-25,37}, -{45,-25,38}, -{45,-25,39}, -{45,-25,40}, -{45,-25,41}, -{45,-25,42}, -{45,-25,43}, -{45,-25,44}, -{45,-25,45}, -{45,-25,46}, -{45,-25,47}, -{45,-25,48}, -{45,-25,49}, -{45,-25,50}, -{45,-24,-13}, -{45,-24,-12}, -{45,-24,-11}, -{45,-24,-10}, -{45,-24,-9}, -{45,-24,-8}, -{45,-24,-7}, -{45,-24,-6}, -{45,-24,-5}, -{45,-24,-4}, -{45,-24,-3}, -{45,-24,-2}, -{45,-24,-1}, -{45,-24,0}, -{45,-24,1}, -{45,-24,2}, -{45,-24,3}, -{45,-24,4}, -{45,-24,5}, -{45,-24,6}, -{45,-24,7}, -{45,-24,8}, -{45,-24,9}, -{45,-24,10}, -{45,-24,11}, -{45,-24,12}, -{45,-24,13}, -{45,-24,14}, -{45,-24,15}, -{45,-24,16}, -{45,-24,17}, -{45,-24,18}, -{45,-24,19}, -{45,-24,20}, -{45,-24,21}, -{45,-24,22}, -{45,-24,23}, -{45,-24,24}, -{45,-24,25}, -{45,-24,26}, -{45,-24,27}, -{45,-24,28}, -{45,-24,29}, -{45,-24,30}, -{45,-24,31}, -{45,-24,32}, -{45,-24,33}, -{45,-24,34}, -{45,-24,35}, -{45,-24,36}, -{45,-24,37}, -{45,-24,38}, -{45,-24,39}, -{45,-24,40}, -{45,-24,41}, -{45,-24,42}, -{45,-24,43}, -{45,-24,44}, -{45,-24,45}, -{45,-24,46}, -{45,-24,47}, -{45,-24,48}, -{45,-24,49}, -{45,-24,50}, -{45,-23,-14}, -{45,-23,-13}, -{45,-23,-12}, -{45,-23,-11}, -{45,-23,-10}, -{45,-23,-9}, -{45,-23,-8}, -{45,-23,-7}, -{45,-23,-6}, -{45,-23,-5}, -{45,-23,-4}, -{45,-23,-3}, -{45,-23,-2}, -{45,-23,-1}, -{45,-23,0}, -{45,-23,1}, -{45,-23,2}, -{45,-23,3}, -{45,-23,4}, -{45,-23,5}, -{45,-23,6}, -{45,-23,7}, -{45,-23,8}, -{45,-23,9}, -{45,-23,10}, -{45,-23,11}, -{45,-23,12}, -{45,-23,13}, -{45,-23,14}, -{45,-23,15}, -{45,-23,16}, -{45,-23,17}, -{45,-23,18}, -{45,-23,19}, -{45,-23,20}, -{45,-23,21}, -{45,-23,22}, -{45,-23,23}, -{45,-23,24}, -{45,-23,25}, -{45,-23,26}, -{45,-23,27}, -{45,-23,28}, -{45,-23,29}, -{45,-23,30}, -{45,-23,31}, -{45,-23,32}, -{45,-23,33}, -{45,-23,34}, -{45,-23,35}, -{45,-23,36}, -{45,-23,37}, -{45,-23,38}, -{45,-23,39}, -{45,-23,40}, -{45,-23,41}, -{45,-23,42}, -{45,-23,43}, -{45,-23,44}, -{45,-23,45}, -{45,-23,46}, -{45,-23,47}, -{45,-23,48}, -{45,-23,49}, -{45,-23,50}, -{45,-22,-16}, -{45,-22,-15}, -{45,-22,-14}, -{45,-22,-13}, -{45,-22,-12}, -{45,-22,-11}, -{45,-22,-10}, -{45,-22,-9}, -{45,-22,-8}, -{45,-22,-7}, -{45,-22,-6}, -{45,-22,-5}, -{45,-22,-4}, -{45,-22,-3}, -{45,-22,-2}, -{45,-22,-1}, -{45,-22,0}, -{45,-22,1}, -{45,-22,2}, -{45,-22,3}, -{45,-22,4}, -{45,-22,5}, -{45,-22,6}, -{45,-22,7}, -{45,-22,8}, -{45,-22,9}, -{45,-22,10}, -{45,-22,11}, -{45,-22,12}, -{45,-22,13}, -{45,-22,14}, -{45,-22,15}, -{45,-22,16}, -{45,-22,17}, -{45,-22,18}, -{45,-22,19}, -{45,-22,20}, -{45,-22,21}, -{45,-22,22}, -{45,-22,23}, -{45,-22,24}, -{45,-22,25}, -{45,-22,26}, -{45,-22,27}, -{45,-22,28}, -{45,-22,29}, -{45,-22,30}, -{45,-22,31}, -{45,-22,32}, -{45,-22,33}, -{45,-22,34}, -{45,-22,35}, -{45,-22,36}, -{45,-22,37}, -{45,-22,38}, -{45,-22,39}, -{45,-22,40}, -{45,-22,41}, -{45,-22,42}, -{45,-22,43}, -{45,-22,44}, -{45,-22,45}, -{45,-22,46}, -{45,-22,47}, -{45,-22,48}, -{45,-22,49}, -{45,-22,50}, -{45,-21,-17}, -{45,-21,-16}, -{45,-21,-15}, -{45,-21,-14}, -{45,-21,-13}, -{45,-21,-12}, -{45,-21,-11}, -{45,-21,-10}, -{45,-21,-9}, -{45,-21,-8}, -{45,-21,-7}, -{45,-21,-6}, -{45,-21,-5}, -{45,-21,-4}, -{45,-21,-3}, -{45,-21,-2}, -{45,-21,-1}, -{45,-21,0}, -{45,-21,1}, -{45,-21,2}, -{45,-21,3}, -{45,-21,4}, -{45,-21,5}, -{45,-21,6}, -{45,-21,7}, -{45,-21,8}, -{45,-21,9}, -{45,-21,10}, -{45,-21,11}, -{45,-21,12}, -{45,-21,13}, -{45,-21,14}, -{45,-21,15}, -{45,-21,16}, -{45,-21,17}, -{45,-21,18}, -{45,-21,19}, -{45,-21,20}, -{45,-21,21}, -{45,-21,22}, -{45,-21,23}, -{45,-21,24}, -{45,-21,25}, -{45,-21,26}, -{45,-21,27}, -{45,-21,28}, -{45,-21,29}, -{45,-21,30}, -{45,-21,31}, -{45,-21,32}, -{45,-21,33}, -{45,-21,34}, -{45,-21,35}, -{45,-21,36}, -{45,-21,37}, -{45,-21,38}, -{45,-21,39}, -{45,-21,40}, -{45,-21,41}, -{45,-21,42}, -{45,-21,43}, -{45,-21,44}, -{45,-21,45}, -{45,-21,46}, -{45,-21,47}, -{45,-21,48}, -{45,-21,49}, -{45,-21,50}, -{45,-20,-19}, -{45,-20,-18}, -{45,-20,-17}, -{45,-20,-16}, -{45,-20,-15}, -{45,-20,-14}, -{45,-20,-13}, -{45,-20,-12}, -{45,-20,-11}, -{45,-20,-10}, -{45,-20,-9}, -{45,-20,-8}, -{45,-20,-7}, -{45,-20,-6}, -{45,-20,-5}, -{45,-20,-4}, -{45,-20,-3}, -{45,-20,-2}, -{45,-20,-1}, -{45,-20,0}, -{45,-20,1}, -{45,-20,2}, -{45,-20,3}, -{45,-20,4}, -{45,-20,5}, -{45,-20,6}, -{45,-20,7}, -{45,-20,8}, -{45,-20,9}, -{45,-20,10}, -{45,-20,11}, -{45,-20,12}, -{45,-20,13}, -{45,-20,14}, -{45,-20,15}, -{45,-20,16}, -{45,-20,17}, -{45,-20,18}, -{45,-20,19}, -{45,-20,20}, -{45,-20,21}, -{45,-20,22}, -{45,-20,23}, -{45,-20,24}, -{45,-20,25}, -{45,-20,26}, -{45,-20,27}, -{45,-20,28}, -{45,-20,29}, -{45,-20,30}, -{45,-20,31}, -{45,-20,32}, -{45,-20,33}, -{45,-20,34}, -{45,-20,35}, -{45,-20,36}, -{45,-20,37}, -{45,-20,38}, -{45,-20,39}, -{45,-20,40}, -{45,-20,41}, -{45,-20,42}, -{45,-20,43}, -{45,-20,44}, -{45,-20,45}, -{45,-20,46}, -{45,-20,47}, -{45,-20,48}, -{45,-20,49}, -{45,-20,50}, -{45,-19,-20}, -{45,-19,-19}, -{45,-19,-18}, -{45,-19,-17}, -{45,-19,-16}, -{45,-19,-15}, -{45,-19,-14}, -{45,-19,-13}, -{45,-19,-12}, -{45,-19,-11}, -{45,-19,-10}, -{45,-19,-9}, -{45,-19,-8}, -{45,-19,-7}, -{45,-19,-6}, -{45,-19,-5}, -{45,-19,-4}, -{45,-19,-3}, -{45,-19,-2}, -{45,-19,-1}, -{45,-19,0}, -{45,-19,1}, -{45,-19,2}, -{45,-19,3}, -{45,-19,4}, -{45,-19,5}, -{45,-19,6}, -{45,-19,7}, -{45,-19,8}, -{45,-19,9}, -{45,-19,10}, -{45,-19,11}, -{45,-19,12}, -{45,-19,13}, -{45,-19,14}, -{45,-19,15}, -{45,-19,16}, -{45,-19,17}, -{45,-19,18}, -{45,-19,19}, -{45,-19,20}, -{45,-19,21}, -{45,-19,22}, -{45,-19,23}, -{45,-19,24}, -{45,-19,25}, -{45,-19,26}, -{45,-19,27}, -{45,-19,28}, -{45,-19,29}, -{45,-19,30}, -{45,-19,31}, -{45,-19,32}, -{45,-19,33}, -{45,-19,34}, -{45,-19,35}, -{45,-19,36}, -{45,-19,37}, -{45,-19,38}, -{45,-19,39}, -{45,-19,40}, -{45,-19,41}, -{45,-19,42}, -{45,-19,43}, -{45,-19,44}, -{45,-19,45}, -{45,-19,46}, -{45,-19,47}, -{45,-19,48}, -{45,-19,49}, -{45,-19,50}, -{45,-18,-21}, -{45,-18,-20}, -{45,-18,-19}, -{45,-18,-18}, -{45,-18,-17}, -{45,-18,-16}, -{45,-18,-15}, -{45,-18,-14}, -{45,-18,-13}, -{45,-18,-12}, -{45,-18,-11}, -{45,-18,-10}, -{45,-18,-9}, -{45,-18,-8}, -{45,-18,-7}, -{45,-18,-6}, -{45,-18,-5}, -{45,-18,-4}, -{45,-18,-3}, -{45,-18,-2}, -{45,-18,-1}, -{45,-18,0}, -{45,-18,1}, -{45,-18,2}, -{45,-18,3}, -{45,-18,4}, -{45,-18,5}, -{45,-18,6}, -{45,-18,7}, -{45,-18,8}, -{45,-18,9}, -{45,-18,10}, -{45,-18,11}, -{45,-18,12}, -{45,-18,13}, -{45,-18,14}, -{45,-18,15}, -{45,-18,16}, -{45,-18,17}, -{45,-18,18}, -{45,-18,19}, -{45,-18,20}, -{45,-18,21}, -{45,-18,22}, -{45,-18,23}, -{45,-18,24}, -{45,-18,25}, -{45,-18,26}, -{45,-18,27}, -{45,-18,28}, -{45,-18,29}, -{45,-18,30}, -{45,-18,31}, -{45,-18,32}, -{45,-18,33}, -{45,-18,34}, -{45,-18,35}, -{45,-18,36}, -{45,-18,37}, -{45,-18,38}, -{45,-18,39}, -{45,-18,40}, -{45,-18,41}, -{45,-18,42}, -{45,-18,43}, -{45,-18,44}, -{45,-18,45}, -{45,-18,46}, -{45,-18,47}, -{45,-18,48}, -{45,-18,49}, -{45,-18,50}, -{45,-17,-23}, -{45,-17,-22}, -{45,-17,-21}, -{45,-17,-20}, -{45,-17,-19}, -{45,-17,-18}, -{45,-17,-17}, -{45,-17,-16}, -{45,-17,-15}, -{45,-17,-14}, -{45,-17,-13}, -{45,-17,-12}, -{45,-17,-11}, -{45,-17,-10}, -{45,-17,-9}, -{45,-17,-8}, -{45,-17,-7}, -{45,-17,-6}, -{45,-17,-5}, -{45,-17,-4}, -{45,-17,-3}, -{45,-17,-2}, -{45,-17,-1}, -{45,-17,0}, -{45,-17,1}, -{45,-17,2}, -{45,-17,3}, -{45,-17,4}, -{45,-17,5}, -{45,-17,6}, -{45,-17,7}, -{45,-17,8}, -{45,-17,9}, -{45,-17,10}, -{45,-17,11}, -{45,-17,12}, -{45,-17,13}, -{45,-17,14}, -{45,-17,15}, -{45,-17,16}, -{45,-17,17}, -{45,-17,18}, -{45,-17,19}, -{45,-17,20}, -{45,-17,21}, -{45,-17,22}, -{45,-17,23}, -{45,-17,24}, -{45,-17,25}, -{45,-17,26}, -{45,-17,27}, -{45,-17,28}, -{45,-17,29}, -{45,-17,30}, -{45,-17,31}, -{45,-17,32}, -{45,-17,33}, -{45,-17,34}, -{45,-17,35}, -{45,-17,36}, -{45,-17,37}, -{45,-17,38}, -{45,-17,39}, -{45,-17,40}, -{45,-17,41}, -{45,-17,42}, -{45,-17,43}, -{45,-17,44}, -{45,-17,45}, -{45,-17,46}, -{45,-17,47}, -{45,-17,48}, -{45,-17,49}, -{45,-17,50}, -{45,-16,-24}, -{45,-16,-23}, -{45,-16,-22}, -{45,-16,-21}, -{45,-16,-20}, -{45,-16,-19}, -{45,-16,-18}, -{45,-16,-17}, -{45,-16,-16}, -{45,-16,-15}, -{45,-16,-14}, -{45,-16,-13}, -{45,-16,-12}, -{45,-16,-11}, -{45,-16,-10}, -{45,-16,-9}, -{45,-16,-8}, -{45,-16,-7}, -{45,-16,-6}, -{45,-16,-5}, -{45,-16,-4}, -{45,-16,-3}, -{45,-16,-2}, -{45,-16,-1}, -{45,-16,0}, -{45,-16,1}, -{45,-16,2}, -{45,-16,3}, -{45,-16,4}, -{45,-16,5}, -{45,-16,6}, -{45,-16,7}, -{45,-16,8}, -{45,-16,9}, -{45,-16,10}, -{45,-16,11}, -{45,-16,12}, -{45,-16,13}, -{45,-16,14}, -{45,-16,15}, -{45,-16,16}, -{45,-16,17}, -{45,-16,18}, -{45,-16,19}, -{45,-16,20}, -{45,-16,21}, -{45,-16,22}, -{45,-16,23}, -{45,-16,24}, -{45,-16,25}, -{45,-16,26}, -{45,-16,27}, -{45,-16,28}, -{45,-16,29}, -{45,-16,30}, -{45,-16,31}, -{45,-16,32}, -{45,-16,33}, -{45,-16,34}, -{45,-16,35}, -{45,-16,36}, -{45,-16,37}, -{45,-16,38}, -{45,-16,39}, -{45,-16,40}, -{45,-16,41}, -{45,-16,42}, -{45,-16,43}, -{45,-16,44}, -{45,-16,45}, -{45,-16,46}, -{45,-16,47}, -{45,-16,48}, -{45,-16,49}, -{45,-16,50}, -{45,-15,-25}, -{45,-15,-24}, -{45,-15,-23}, -{45,-15,-22}, -{45,-15,-21}, -{45,-15,-20}, -{45,-15,-19}, -{45,-15,-18}, -{45,-15,-17}, -{45,-15,-16}, -{45,-15,-15}, -{45,-15,-14}, -{45,-15,-13}, -{45,-15,-12}, -{45,-15,-11}, -{45,-15,-10}, -{45,-15,-9}, -{45,-15,-8}, -{45,-15,-7}, -{45,-15,-6}, -{45,-15,-5}, -{45,-15,-4}, -{45,-15,-3}, -{45,-15,-2}, -{45,-15,-1}, -{45,-15,0}, -{45,-15,1}, -{45,-15,2}, -{45,-15,3}, -{45,-15,4}, -{45,-15,5}, -{45,-15,6}, -{45,-15,7}, -{45,-15,8}, -{45,-15,9}, -{45,-15,10}, -{45,-15,11}, -{45,-15,12}, -{45,-15,13}, -{45,-15,14}, -{45,-15,15}, -{45,-15,16}, -{45,-15,17}, -{45,-15,18}, -{45,-15,19}, -{45,-15,20}, -{45,-15,21}, -{45,-15,22}, -{45,-15,23}, -{45,-15,24}, -{45,-15,25}, -{45,-15,26}, -{45,-15,27}, -{45,-15,28}, -{45,-15,29}, -{45,-15,30}, -{45,-15,31}, -{45,-15,32}, -{45,-15,33}, -{45,-15,34}, -{45,-15,35}, -{45,-15,36}, -{45,-15,37}, -{45,-15,38}, -{45,-15,39}, -{45,-15,40}, -{45,-15,41}, -{45,-15,42}, -{45,-15,43}, -{45,-15,44}, -{45,-15,45}, -{45,-15,46}, -{45,-15,47}, -{45,-15,48}, -{45,-15,49}, -{45,-15,50}, -{45,-14,-27}, -{45,-14,-26}, -{45,-14,-25}, -{45,-14,-24}, -{45,-14,-23}, -{45,-14,-22}, -{45,-14,-21}, -{45,-14,-20}, -{45,-14,-19}, -{45,-14,-18}, -{45,-14,-17}, -{45,-14,-16}, -{45,-14,-15}, -{45,-14,-14}, -{45,-14,-13}, -{45,-14,-12}, -{45,-14,-11}, -{45,-14,-10}, -{45,-14,-9}, -{45,-14,-8}, -{45,-14,-7}, -{45,-14,-6}, -{45,-14,-5}, -{45,-14,-4}, -{45,-14,-3}, -{45,-14,-2}, -{45,-14,-1}, -{45,-14,0}, -{45,-14,1}, -{45,-14,2}, -{45,-14,3}, -{45,-14,4}, -{45,-14,5}, -{45,-14,6}, -{45,-14,7}, -{45,-14,8}, -{45,-14,9}, -{45,-14,10}, -{45,-14,11}, -{45,-14,12}, -{45,-14,13}, -{45,-14,14}, -{45,-14,15}, -{45,-14,16}, -{45,-14,17}, -{45,-14,18}, -{45,-14,19}, -{45,-14,20}, -{45,-14,21}, -{45,-14,22}, -{45,-14,23}, -{45,-14,24}, -{45,-14,25}, -{45,-14,26}, -{45,-14,27}, -{45,-14,28}, -{45,-14,29}, -{45,-14,30}, -{45,-14,31}, -{45,-14,32}, -{45,-14,33}, -{45,-14,34}, -{45,-14,35}, -{45,-14,36}, -{45,-14,37}, -{45,-14,38}, -{45,-14,39}, -{45,-14,40}, -{45,-14,41}, -{45,-14,42}, -{45,-14,43}, -{45,-14,44}, -{45,-14,45}, -{45,-14,46}, -{45,-14,47}, -{45,-14,48}, -{45,-14,49}, -{45,-14,50}, -{45,-13,-28}, -{45,-13,-27}, -{45,-13,-26}, -{45,-13,-25}, -{45,-13,-24}, -{45,-13,-23}, -{45,-13,-22}, -{45,-13,-21}, -{45,-13,-20}, -{45,-13,-19}, -{45,-13,-18}, -{45,-13,-17}, -{45,-13,-16}, -{45,-13,-15}, -{45,-13,-14}, -{45,-13,-13}, -{45,-13,-12}, -{45,-13,-11}, -{45,-13,-10}, -{45,-13,-9}, -{45,-13,-8}, -{45,-13,-7}, -{45,-13,-6}, -{45,-13,-5}, -{45,-13,-4}, -{45,-13,-3}, -{45,-13,-2}, -{45,-13,-1}, -{45,-13,0}, -{45,-13,1}, -{45,-13,2}, -{45,-13,3}, -{45,-13,4}, -{45,-13,5}, -{45,-13,6}, -{45,-13,7}, -{45,-13,8}, -{45,-13,9}, -{45,-13,10}, -{45,-13,11}, -{45,-13,12}, -{45,-13,13}, -{45,-13,14}, -{45,-13,15}, -{45,-13,16}, -{45,-13,17}, -{45,-13,18}, -{45,-13,19}, -{45,-13,20}, -{45,-13,21}, -{45,-13,22}, -{45,-13,23}, -{45,-13,24}, -{45,-13,25}, -{45,-13,26}, -{45,-13,27}, -{45,-13,28}, -{45,-13,29}, -{45,-13,30}, -{45,-13,31}, -{45,-13,32}, -{45,-13,33}, -{45,-13,34}, -{45,-13,35}, -{45,-13,36}, -{45,-13,37}, -{45,-13,38}, -{45,-13,39}, -{45,-13,40}, -{45,-13,41}, -{45,-13,42}, -{45,-13,43}, -{45,-13,44}, -{45,-13,45}, -{45,-13,46}, -{45,-13,47}, -{45,-13,48}, -{45,-13,49}, -{45,-13,50}, -{45,-13,51}, -{45,-12,-29}, -{45,-12,-28}, -{45,-12,-27}, -{45,-12,-26}, -{45,-12,-25}, -{45,-12,-24}, -{45,-12,-23}, -{45,-12,-22}, -{45,-12,-21}, -{45,-12,-20}, -{45,-12,-19}, -{45,-12,-18}, -{45,-12,-17}, -{45,-12,-16}, -{45,-12,-15}, -{45,-12,-14}, -{45,-12,-13}, -{45,-12,-12}, -{45,-12,-11}, -{45,-12,-10}, -{45,-12,-9}, -{45,-12,-8}, -{45,-12,-7}, -{45,-12,-6}, -{45,-12,-5}, -{45,-12,-4}, -{45,-12,-3}, -{45,-12,-2}, -{45,-12,-1}, -{45,-12,0}, -{45,-12,1}, -{45,-12,2}, -{45,-12,3}, -{45,-12,4}, -{45,-12,5}, -{45,-12,6}, -{45,-12,7}, -{45,-12,8}, -{45,-12,9}, -{45,-12,10}, -{45,-12,11}, -{45,-12,12}, -{45,-12,13}, -{45,-12,14}, -{45,-12,15}, -{45,-12,16}, -{45,-12,17}, -{45,-12,18}, -{45,-12,19}, -{45,-12,20}, -{45,-12,21}, -{45,-12,22}, -{45,-12,23}, -{45,-12,24}, -{45,-12,25}, -{45,-12,26}, -{45,-12,27}, -{45,-12,28}, -{45,-12,29}, -{45,-12,30}, -{45,-12,31}, -{45,-12,32}, -{45,-12,33}, -{45,-12,34}, -{45,-12,35}, -{45,-12,36}, -{45,-12,37}, -{45,-12,38}, -{45,-12,39}, -{45,-12,40}, -{45,-12,41}, -{45,-12,42}, -{45,-12,43}, -{45,-12,44}, -{45,-12,45}, -{45,-12,46}, -{45,-12,47}, -{45,-12,48}, -{45,-12,49}, -{45,-12,50}, -{45,-12,51}, -{45,-11,-30}, -{45,-11,-29}, -{45,-11,-28}, -{45,-11,-27}, -{45,-11,-26}, -{45,-11,-25}, -{45,-11,-24}, -{45,-11,-23}, -{45,-11,-22}, -{45,-11,-21}, -{45,-11,-20}, -{45,-11,-19}, -{45,-11,-18}, -{45,-11,-17}, -{45,-11,-16}, -{45,-11,-15}, -{45,-11,-14}, -{45,-11,-13}, -{45,-11,-12}, -{45,-11,-11}, -{45,-11,-10}, -{45,-11,-9}, -{45,-11,-8}, -{45,-11,-7}, -{45,-11,-6}, -{45,-11,-5}, -{45,-11,-4}, -{45,-11,-3}, -{45,-11,-2}, -{45,-11,-1}, -{45,-11,0}, -{45,-11,1}, -{45,-11,2}, -{45,-11,3}, -{45,-11,4}, -{45,-11,5}, -{45,-11,6}, -{45,-11,7}, -{45,-11,8}, -{45,-11,9}, -{45,-11,10}, -{45,-11,11}, -{45,-11,12}, -{45,-11,13}, -{45,-11,14}, -{45,-11,15}, -{45,-11,16}, -{45,-11,17}, -{45,-11,18}, -{45,-11,19}, -{45,-11,20}, -{45,-11,21}, -{45,-11,22}, -{45,-11,23}, -{45,-11,24}, -{45,-11,25}, -{45,-11,26}, -{45,-11,27}, -{45,-11,28}, -{45,-11,29}, -{45,-11,30}, -{45,-11,31}, -{45,-11,32}, -{45,-11,33}, -{45,-11,34}, -{45,-11,35}, -{45,-11,36}, -{45,-11,37}, -{45,-11,38}, -{45,-11,39}, -{45,-11,40}, -{45,-11,41}, -{45,-11,42}, -{45,-11,43}, -{45,-11,44}, -{45,-11,45}, -{45,-11,46}, -{45,-11,47}, -{45,-11,48}, -{45,-11,49}, -{45,-11,50}, -{45,-11,51}, -{45,-10,-32}, -{45,-10,-31}, -{45,-10,-30}, -{45,-10,-29}, -{45,-10,-28}, -{45,-10,-27}, -{45,-10,-26}, -{45,-10,-25}, -{45,-10,-24}, -{45,-10,-23}, -{45,-10,-22}, -{45,-10,-21}, -{45,-10,-20}, -{45,-10,-19}, -{45,-10,-18}, -{45,-10,-17}, -{45,-10,-16}, -{45,-10,-15}, -{45,-10,-14}, -{45,-10,-13}, -{45,-10,-12}, -{45,-10,-11}, -{45,-10,-10}, -{45,-10,-9}, -{45,-10,-8}, -{45,-10,-7}, -{45,-10,-6}, -{45,-10,-5}, -{45,-10,-4}, -{45,-10,-3}, -{45,-10,-2}, -{45,-10,-1}, -{45,-10,0}, -{45,-10,1}, -{45,-10,2}, -{45,-10,3}, -{45,-10,4}, -{45,-10,5}, -{45,-10,6}, -{45,-10,7}, -{45,-10,8}, -{45,-10,9}, -{45,-10,10}, -{45,-10,11}, -{45,-10,12}, -{45,-10,13}, -{45,-10,14}, -{45,-10,15}, -{45,-10,16}, -{45,-10,17}, -{45,-10,18}, -{45,-10,19}, -{45,-10,20}, -{45,-10,21}, -{45,-10,22}, -{45,-10,23}, -{45,-10,24}, -{45,-10,25}, -{45,-10,26}, -{45,-10,27}, -{45,-10,28}, -{45,-10,29}, -{45,-10,30}, -{45,-10,31}, -{45,-10,32}, -{45,-10,33}, -{45,-10,34}, -{45,-10,35}, -{45,-10,36}, -{45,-10,37}, -{45,-10,38}, -{45,-10,39}, -{45,-10,40}, -{45,-10,41}, -{45,-10,42}, -{45,-10,43}, -{45,-10,44}, -{45,-10,45}, -{45,-10,46}, -{45,-10,47}, -{45,-10,48}, -{45,-10,49}, -{45,-10,50}, -{45,-10,51}, -{45,-9,-33}, -{45,-9,-32}, -{45,-9,-31}, -{45,-9,-30}, -{45,-9,-29}, -{45,-9,-28}, -{45,-9,-27}, -{45,-9,-26}, -{45,-9,-25}, -{45,-9,-24}, -{45,-9,-23}, -{45,-9,-22}, -{45,-9,-21}, -{45,-9,-20}, -{45,-9,-19}, -{45,-9,-18}, -{45,-9,-17}, -{45,-9,-16}, -{45,-9,-15}, -{45,-9,-14}, -{45,-9,-13}, -{45,-9,-12}, -{45,-9,-11}, -{45,-9,-10}, -{45,-9,-9}, -{45,-9,-8}, -{45,-9,-7}, -{45,-9,-6}, -{45,-9,-5}, -{45,-9,-4}, -{45,-9,-3}, -{45,-9,-2}, -{45,-9,-1}, -{45,-9,0}, -{45,-9,1}, -{45,-9,2}, -{45,-9,3}, -{45,-9,4}, -{45,-9,5}, -{45,-9,6}, -{45,-9,7}, -{45,-9,8}, -{45,-9,9}, -{45,-9,10}, -{45,-9,11}, -{45,-9,12}, -{45,-9,13}, -{45,-9,14}, -{45,-9,15}, -{45,-9,16}, -{45,-9,17}, -{45,-9,18}, -{45,-9,19}, -{45,-9,20}, -{45,-9,21}, -{45,-9,22}, -{45,-9,23}, -{45,-9,24}, -{45,-9,25}, -{45,-9,26}, -{45,-9,27}, -{45,-9,28}, -{45,-9,29}, -{45,-9,30}, -{45,-9,31}, -{45,-9,32}, -{45,-9,33}, -{45,-9,34}, -{45,-9,35}, -{45,-9,36}, -{45,-9,37}, -{45,-9,38}, -{45,-9,39}, -{45,-9,40}, -{45,-9,41}, -{45,-9,42}, -{45,-9,43}, -{45,-9,44}, -{45,-9,45}, -{45,-9,46}, -{45,-9,47}, -{45,-9,48}, -{45,-9,49}, -{45,-9,50}, -{45,-9,51}, -{45,-8,-34}, -{45,-8,-33}, -{45,-8,-32}, -{45,-8,-31}, -{45,-8,-30}, -{45,-8,-29}, -{45,-8,-28}, -{45,-8,-27}, -{45,-8,-26}, -{45,-8,-25}, -{45,-8,-24}, -{45,-8,-23}, -{45,-8,-22}, -{45,-8,-21}, -{45,-8,-20}, -{45,-8,-19}, -{45,-8,-18}, -{45,-8,-17}, -{45,-8,-16}, -{45,-8,-15}, -{45,-8,-14}, -{45,-8,-13}, -{45,-8,-12}, -{45,-8,-11}, -{45,-8,-10}, -{45,-8,-9}, -{45,-8,-8}, -{45,-8,-7}, -{45,-8,-6}, -{45,-8,-5}, -{45,-8,-4}, -{45,-8,-3}, -{45,-8,-2}, -{45,-8,-1}, -{45,-8,0}, -{45,-8,1}, -{45,-8,2}, -{45,-8,3}, -{45,-8,4}, -{45,-8,5}, -{45,-8,6}, -{45,-8,7}, -{45,-8,8}, -{45,-8,9}, -{45,-8,10}, -{45,-8,11}, -{45,-8,12}, -{45,-8,13}, -{45,-8,14}, -{45,-8,15}, -{45,-8,16}, -{45,-8,17}, -{45,-8,18}, -{45,-8,19}, -{45,-8,20}, -{45,-8,21}, -{45,-8,22}, -{45,-8,23}, -{45,-8,24}, -{45,-8,25}, -{45,-8,26}, -{45,-8,27}, -{45,-8,28}, -{45,-8,29}, -{45,-8,30}, -{45,-8,31}, -{45,-8,32}, -{45,-8,33}, -{45,-8,34}, -{45,-8,35}, -{45,-8,36}, -{45,-8,37}, -{45,-8,38}, -{45,-8,39}, -{45,-8,40}, -{45,-8,41}, -{45,-8,42}, -{45,-8,43}, -{45,-8,44}, -{45,-8,45}, -{45,-8,46}, -{45,-8,47}, -{45,-8,48}, -{45,-8,49}, -{45,-8,50}, -{45,-8,51}, -{45,-7,-35}, -{45,-7,-34}, -{45,-7,-33}, -{45,-7,-32}, -{45,-7,-31}, -{45,-7,-30}, -{45,-7,-29}, -{45,-7,-28}, -{45,-7,-27}, -{45,-7,-26}, -{45,-7,-25}, -{45,-7,-24}, -{45,-7,-23}, -{45,-7,-22}, -{45,-7,-21}, -{45,-7,-20}, -{45,-7,-19}, -{45,-7,-18}, -{45,-7,-17}, -{45,-7,-16}, -{45,-7,-15}, -{45,-7,-14}, -{45,-7,-13}, -{45,-7,-12}, -{45,-7,-11}, -{45,-7,-10}, -{45,-7,-9}, -{45,-7,-8}, -{45,-7,-7}, -{45,-7,-6}, -{45,-7,-5}, -{45,-7,-4}, -{45,-7,-3}, -{45,-7,-2}, -{45,-7,-1}, -{45,-7,0}, -{45,-7,1}, -{45,-7,2}, -{45,-7,3}, -{45,-7,4}, -{45,-7,5}, -{45,-7,6}, -{45,-7,7}, -{45,-7,8}, -{45,-7,9}, -{45,-7,10}, -{45,-7,11}, -{45,-7,12}, -{45,-7,13}, -{45,-7,14}, -{45,-7,15}, -{45,-7,16}, -{45,-7,17}, -{45,-7,18}, -{45,-7,19}, -{45,-7,20}, -{45,-7,21}, -{45,-7,22}, -{45,-7,23}, -{45,-7,24}, -{45,-7,25}, -{45,-7,26}, -{45,-7,27}, -{45,-7,28}, -{45,-7,29}, -{45,-7,30}, -{45,-7,31}, -{45,-7,32}, -{45,-7,33}, -{45,-7,34}, -{45,-7,35}, -{45,-7,36}, -{45,-7,37}, -{45,-7,38}, -{45,-7,39}, -{45,-7,40}, -{45,-7,41}, -{45,-7,42}, -{45,-7,43}, -{45,-7,44}, -{45,-7,45}, -{45,-7,46}, -{45,-7,47}, -{45,-7,48}, -{45,-7,49}, -{45,-7,50}, -{45,-7,51}, -{45,-6,-37}, -{45,-6,-36}, -{45,-6,-35}, -{45,-6,-34}, -{45,-6,-33}, -{45,-6,-32}, -{45,-6,-31}, -{45,-6,-30}, -{45,-6,-29}, -{45,-6,-28}, -{45,-6,-27}, -{45,-6,-26}, -{45,-6,-25}, -{45,-6,-24}, -{45,-6,-23}, -{45,-6,-22}, -{45,-6,-21}, -{45,-6,-20}, -{45,-6,-19}, -{45,-6,-18}, -{45,-6,-17}, -{45,-6,-16}, -{45,-6,-15}, -{45,-6,-14}, -{45,-6,-13}, -{45,-6,-12}, -{45,-6,-11}, -{45,-6,-10}, -{45,-6,-9}, -{45,-6,-8}, -{45,-6,-7}, -{45,-6,-6}, -{45,-6,-5}, -{45,-6,-4}, -{45,-6,-3}, -{45,-6,-2}, -{45,-6,-1}, -{45,-6,0}, -{45,-6,1}, -{45,-6,2}, -{45,-6,3}, -{45,-6,4}, -{45,-6,5}, -{45,-6,6}, -{45,-6,7}, -{45,-6,8}, -{45,-6,9}, -{45,-6,10}, -{45,-6,11}, -{45,-6,12}, -{45,-6,13}, -{45,-6,14}, -{45,-6,15}, -{45,-6,16}, -{45,-6,17}, -{45,-6,18}, -{45,-6,19}, -{45,-6,20}, -{45,-6,21}, -{45,-6,22}, -{45,-6,23}, -{45,-6,24}, -{45,-6,25}, -{45,-6,26}, -{45,-6,27}, -{45,-6,28}, -{45,-6,29}, -{45,-6,30}, -{45,-6,31}, -{45,-6,32}, -{45,-6,33}, -{45,-6,34}, -{45,-6,35}, -{45,-6,36}, -{45,-6,37}, -{45,-6,38}, -{45,-6,39}, -{45,-6,40}, -{45,-6,41}, -{45,-6,42}, -{45,-6,43}, -{45,-6,44}, -{45,-6,45}, -{45,-6,46}, -{45,-6,47}, -{45,-6,48}, -{45,-6,49}, -{45,-6,50}, -{45,-6,51}, -{45,-5,-38}, -{45,-5,-37}, -{45,-5,-36}, -{45,-5,-35}, -{45,-5,-34}, -{45,-5,-33}, -{45,-5,-32}, -{45,-5,-31}, -{45,-5,-30}, -{45,-5,-29}, -{45,-5,-28}, -{45,-5,-27}, -{45,-5,-26}, -{45,-5,-25}, -{45,-5,-24}, -{45,-5,-23}, -{45,-5,-22}, -{45,-5,-21}, -{45,-5,-20}, -{45,-5,-19}, -{45,-5,-18}, -{45,-5,-17}, -{45,-5,-16}, -{45,-5,-15}, -{45,-5,-14}, -{45,-5,-13}, -{45,-5,-12}, -{45,-5,-11}, -{45,-5,-10}, -{45,-5,-9}, -{45,-5,-8}, -{45,-5,-7}, -{45,-5,-6}, -{45,-5,-5}, -{45,-5,-4}, -{45,-5,-3}, -{45,-5,-2}, -{45,-5,-1}, -{45,-5,0}, -{45,-5,1}, -{45,-5,2}, -{45,-5,3}, -{45,-5,4}, -{45,-5,5}, -{45,-5,6}, -{45,-5,7}, -{45,-5,8}, -{45,-5,9}, -{45,-5,10}, -{45,-5,11}, -{45,-5,12}, -{45,-5,13}, -{45,-5,14}, -{45,-5,15}, -{45,-5,16}, -{45,-5,17}, -{45,-5,18}, -{45,-5,19}, -{45,-5,20}, -{45,-5,21}, -{45,-5,22}, -{45,-5,23}, -{45,-5,24}, -{45,-5,25}, -{45,-5,26}, -{45,-5,27}, -{45,-5,28}, -{45,-5,29}, -{45,-5,30}, -{45,-5,31}, -{45,-5,32}, -{45,-5,33}, -{45,-5,34}, -{45,-5,35}, -{45,-5,36}, -{45,-5,37}, -{45,-5,38}, -{45,-5,39}, -{45,-5,40}, -{45,-5,41}, -{45,-5,42}, -{45,-5,43}, -{45,-5,44}, -{45,-5,45}, -{45,-5,46}, -{45,-5,47}, -{45,-5,48}, -{45,-5,49}, -{45,-5,50}, -{45,-5,51}, -{45,-4,-39}, -{45,-4,-38}, -{45,-4,-37}, -{45,-4,-36}, -{45,-4,-35}, -{45,-4,-34}, -{45,-4,-33}, -{45,-4,-32}, -{45,-4,-31}, -{45,-4,-30}, -{45,-4,-29}, -{45,-4,-28}, -{45,-4,-27}, -{45,-4,-26}, -{45,-4,-25}, -{45,-4,-24}, -{45,-4,-23}, -{45,-4,-22}, -{45,-4,-21}, -{45,-4,-20}, -{45,-4,-19}, -{45,-4,-18}, -{45,-4,-17}, -{45,-4,-16}, -{45,-4,-15}, -{45,-4,-14}, -{45,-4,-13}, -{45,-4,-12}, -{45,-4,-11}, -{45,-4,-10}, -{45,-4,-9}, -{45,-4,-8}, -{45,-4,-7}, -{45,-4,-6}, -{45,-4,-5}, -{45,-4,-4}, -{45,-4,-3}, -{45,-4,-2}, -{45,-4,-1}, -{45,-4,0}, -{45,-4,1}, -{45,-4,2}, -{45,-4,3}, -{45,-4,4}, -{45,-4,5}, -{45,-4,6}, -{45,-4,7}, -{45,-4,8}, -{45,-4,9}, -{45,-4,10}, -{45,-4,11}, -{45,-4,12}, -{45,-4,13}, -{45,-4,14}, -{45,-4,15}, -{45,-4,16}, -{45,-4,17}, -{45,-4,18}, -{45,-4,19}, -{45,-4,20}, -{45,-4,21}, -{45,-4,22}, -{45,-4,23}, -{45,-4,24}, -{45,-4,25}, -{45,-4,26}, -{45,-4,27}, -{45,-4,28}, -{45,-4,29}, -{45,-4,30}, -{45,-4,31}, -{45,-4,32}, -{45,-4,33}, -{45,-4,34}, -{45,-4,35}, -{45,-4,36}, -{45,-4,37}, -{45,-4,38}, -{45,-4,39}, -{45,-4,40}, -{45,-4,41}, -{45,-4,42}, -{45,-4,43}, -{45,-4,44}, -{45,-4,45}, -{45,-4,46}, -{45,-4,47}, -{45,-4,48}, -{45,-4,49}, -{45,-4,50}, -{45,-4,51}, -{45,-3,-40}, -{45,-3,-39}, -{45,-3,-38}, -{45,-3,-37}, -{45,-3,-36}, -{45,-3,-35}, -{45,-3,-34}, -{45,-3,-33}, -{45,-3,-32}, -{45,-3,-31}, -{45,-3,-30}, -{45,-3,-29}, -{45,-3,-28}, -{45,-3,-27}, -{45,-3,-26}, -{45,-3,-25}, -{45,-3,-24}, -{45,-3,-23}, -{45,-3,-22}, -{45,-3,-21}, -{45,-3,-20}, -{45,-3,-19}, -{45,-3,-18}, -{45,-3,-17}, -{45,-3,-16}, -{45,-3,-15}, -{45,-3,-14}, -{45,-3,-13}, -{45,-3,-12}, -{45,-3,-11}, -{45,-3,-10}, -{45,-3,-9}, -{45,-3,-8}, -{45,-3,-7}, -{45,-3,-6}, -{45,-3,-5}, -{45,-3,-4}, -{45,-3,-3}, -{45,-3,-2}, -{45,-3,-1}, -{45,-3,0}, -{45,-3,1}, -{45,-3,2}, -{45,-3,3}, -{45,-3,4}, -{45,-3,5}, -{45,-3,6}, -{45,-3,7}, -{45,-3,8}, -{45,-3,9}, -{45,-3,10}, -{45,-3,11}, -{45,-3,12}, -{45,-3,13}, -{45,-3,14}, -{45,-3,15}, -{45,-3,16}, -{45,-3,17}, -{45,-3,18}, -{45,-3,19}, -{45,-3,20}, -{45,-3,21}, -{45,-3,22}, -{45,-3,23}, -{45,-3,24}, -{45,-3,25}, -{45,-3,26}, -{45,-3,27}, -{45,-3,28}, -{45,-3,29}, -{45,-3,30}, -{45,-3,31}, -{45,-3,32}, -{45,-3,33}, -{45,-3,34}, -{45,-3,35}, -{45,-3,36}, -{45,-3,37}, -{45,-3,38}, -{45,-3,39}, -{45,-3,40}, -{45,-3,41}, -{45,-3,42}, -{45,-3,43}, -{45,-3,44}, -{45,-3,45}, -{45,-3,46}, -{45,-3,47}, -{45,-3,48}, -{45,-3,49}, -{45,-3,50}, -{45,-3,51}, -{45,-2,-41}, -{45,-2,-40}, -{45,-2,-39}, -{45,-2,-38}, -{45,-2,-37}, -{45,-2,-36}, -{45,-2,-35}, -{45,-2,-34}, -{45,-2,-33}, -{45,-2,-32}, -{45,-2,-31}, -{45,-2,-30}, -{45,-2,-29}, -{45,-2,-28}, -{45,-2,-27}, -{45,-2,-26}, -{45,-2,-25}, -{45,-2,-24}, -{45,-2,-23}, -{45,-2,-22}, -{45,-2,-21}, -{45,-2,-20}, -{45,-2,-19}, -{45,-2,-18}, -{45,-2,-17}, -{45,-2,-16}, -{45,-2,-15}, -{45,-2,-14}, -{45,-2,-13}, -{45,-2,-12}, -{45,-2,-11}, -{45,-2,-10}, -{45,-2,-9}, -{45,-2,-8}, -{45,-2,-7}, -{45,-2,-6}, -{45,-2,-5}, -{45,-2,-4}, -{45,-2,-3}, -{45,-2,-2}, -{45,-2,-1}, -{45,-2,0}, -{45,-2,1}, -{45,-2,2}, -{45,-2,3}, -{45,-2,4}, -{45,-2,5}, -{45,-2,6}, -{45,-2,7}, -{45,-2,8}, -{45,-2,9}, -{45,-2,10}, -{45,-2,11}, -{45,-2,12}, -{45,-2,13}, -{45,-2,14}, -{45,-2,15}, -{45,-2,16}, -{45,-2,17}, -{45,-2,18}, -{45,-2,19}, -{45,-2,20}, -{45,-2,21}, -{45,-2,22}, -{45,-2,23}, -{45,-2,24}, -{45,-2,25}, -{45,-2,26}, -{45,-2,27}, -{45,-2,28}, -{45,-2,29}, -{45,-2,30}, -{45,-2,31}, -{45,-2,32}, -{45,-2,33}, -{45,-2,34}, -{45,-2,35}, -{45,-2,36}, -{45,-2,37}, -{45,-2,38}, -{45,-2,39}, -{45,-2,40}, -{45,-2,41}, -{45,-2,42}, -{45,-2,43}, -{45,-2,44}, -{45,-2,45}, -{45,-2,46}, -{45,-2,47}, -{45,-2,48}, -{45,-2,49}, -{45,-2,50}, -{45,-2,51}, -{45,-1,-42}, -{45,-1,-41}, -{45,-1,-40}, -{45,-1,-39}, -{45,-1,-38}, -{45,-1,-37}, -{45,-1,-36}, -{45,-1,-35}, -{45,-1,-34}, -{45,-1,-33}, -{45,-1,-32}, -{45,-1,-31}, -{45,-1,-30}, -{45,-1,-29}, -{45,-1,-28}, -{45,-1,-27}, -{45,-1,-26}, -{45,-1,-25}, -{45,-1,-24}, -{45,-1,-23}, -{45,-1,-22}, -{45,-1,-21}, -{45,-1,-20}, -{45,-1,-19}, -{45,-1,-18}, -{45,-1,-17}, -{45,-1,-16}, -{45,-1,-15}, -{45,-1,-14}, -{45,-1,-13}, -{45,-1,-12}, -{45,-1,-11}, -{45,-1,-10}, -{45,-1,-9}, -{45,-1,-8}, -{45,-1,-7}, -{45,-1,-6}, -{45,-1,-5}, -{45,-1,-4}, -{45,-1,-3}, -{45,-1,-2}, -{45,-1,-1}, -{45,-1,0}, -{45,-1,1}, -{45,-1,2}, -{45,-1,3}, -{45,-1,4}, -{45,-1,5}, -{45,-1,6}, -{45,-1,7}, -{45,-1,8}, -{45,-1,9}, -{45,-1,10}, -{45,-1,11}, -{45,-1,12}, -{45,-1,13}, -{45,-1,14}, -{45,-1,15}, -{45,-1,16}, -{45,-1,17}, -{45,-1,18}, -{45,-1,19}, -{45,-1,20}, -{45,-1,21}, -{45,-1,22}, -{45,-1,23}, -{45,-1,24}, -{45,-1,25}, -{45,-1,26}, -{45,-1,27}, -{45,-1,28}, -{45,-1,29}, -{45,-1,30}, -{45,-1,31}, -{45,-1,32}, -{45,-1,33}, -{45,-1,34}, -{45,-1,35}, -{45,-1,36}, -{45,-1,37}, -{45,-1,38}, -{45,-1,39}, -{45,-1,40}, -{45,-1,41}, -{45,-1,42}, -{45,-1,43}, -{45,-1,44}, -{45,-1,45}, -{45,-1,46}, -{45,-1,47}, -{45,-1,48}, -{45,-1,49}, -{45,-1,50}, -{45,-1,51}, -{45,0,-44}, -{45,0,-43}, -{45,0,-42}, -{45,0,-41}, -{45,0,-40}, -{45,0,-39}, -{45,0,-38}, -{45,0,-37}, -{45,0,-36}, -{45,0,-35}, -{45,0,-34}, -{45,0,-33}, -{45,0,-32}, -{45,0,-31}, -{45,0,-30}, -{45,0,-29}, -{45,0,-28}, -{45,0,-27}, -{45,0,-26}, -{45,0,-25}, -{45,0,-24}, -{45,0,-23}, -{45,0,-22}, -{45,0,-21}, -{45,0,-20}, -{45,0,-19}, -{45,0,-18}, -{45,0,-17}, -{45,0,-16}, -{45,0,-15}, -{45,0,-14}, -{45,0,-13}, -{45,0,-12}, -{45,0,-11}, -{45,0,-10}, -{45,0,-9}, -{45,0,-8}, -{45,0,-7}, -{45,0,-6}, -{45,0,-5}, -{45,0,-4}, -{45,0,-3}, -{45,0,-2}, -{45,0,-1}, -{45,0,0}, -{45,0,1}, -{45,0,2}, -{45,0,3}, -{45,0,4}, -{45,0,5}, -{45,0,6}, -{45,0,7}, -{45,0,8}, -{45,0,9}, -{45,0,10}, -{45,0,11}, -{45,0,12}, -{45,0,13}, -{45,0,14}, -{45,0,15}, -{45,0,16}, -{45,0,17}, -{45,0,18}, -{45,0,19}, -{45,0,20}, -{45,0,21}, -{45,0,22}, -{45,0,23}, -{45,0,24}, -{45,0,25}, -{45,0,26}, -{45,0,27}, -{45,0,28}, -{45,0,29}, -{45,0,30}, -{45,0,31}, -{45,0,32}, -{45,0,33}, -{45,0,34}, -{45,0,35}, -{45,0,36}, -{45,0,37}, -{45,0,38}, -{45,0,39}, -{45,0,40}, -{45,0,41}, -{45,0,42}, -{45,0,43}, -{45,0,44}, -{45,0,45}, -{45,0,46}, -{45,0,47}, -{45,0,48}, -{45,0,49}, -{45,0,50}, -{45,0,51}, -{45,1,-45}, -{45,1,-44}, -{45,1,-43}, -{45,1,-42}, -{45,1,-41}, -{45,1,-40}, -{45,1,-39}, -{45,1,-38}, -{45,1,-37}, -{45,1,-36}, -{45,1,-35}, -{45,1,-34}, -{45,1,-33}, -{45,1,-32}, -{45,1,-31}, -{45,1,-30}, -{45,1,-29}, -{45,1,-28}, -{45,1,-27}, -{45,1,-26}, -{45,1,-25}, -{45,1,-24}, -{45,1,-23}, -{45,1,-22}, -{45,1,-21}, -{45,1,-20}, -{45,1,-19}, -{45,1,-18}, -{45,1,-17}, -{45,1,-16}, -{45,1,-15}, -{45,1,-14}, -{45,1,-13}, -{45,1,-12}, -{45,1,-11}, -{45,1,-10}, -{45,1,-9}, -{45,1,-8}, -{45,1,-7}, -{45,1,-6}, -{45,1,-5}, -{45,1,-4}, -{45,1,-3}, -{45,1,-2}, -{45,1,-1}, -{45,1,0}, -{45,1,1}, -{45,1,2}, -{45,1,3}, -{45,1,4}, -{45,1,5}, -{45,1,6}, -{45,1,7}, -{45,1,8}, -{45,1,9}, -{45,1,10}, -{45,1,11}, -{45,1,12}, -{45,1,13}, -{45,1,14}, -{45,1,15}, -{45,1,16}, -{45,1,17}, -{45,1,18}, -{45,1,19}, -{45,1,20}, -{45,1,21}, -{45,1,22}, -{45,1,23}, -{45,1,24}, -{45,1,25}, -{45,1,26}, -{45,1,27}, -{45,1,28}, -{45,1,29}, -{45,1,30}, -{45,1,31}, -{45,1,32}, -{45,1,33}, -{45,1,34}, -{45,1,35}, -{45,1,36}, -{45,1,37}, -{45,1,38}, -{45,1,39}, -{45,1,40}, -{45,1,41}, -{45,1,42}, -{45,1,43}, -{45,1,44}, -{45,1,45}, -{45,1,46}, -{45,1,47}, -{45,1,48}, -{45,1,49}, -{45,1,50}, -{45,1,51}, -{45,2,-46}, -{45,2,-45}, -{45,2,-44}, -{45,2,-43}, -{45,2,-42}, -{45,2,-41}, -{45,2,-40}, -{45,2,-39}, -{45,2,-38}, -{45,2,-37}, -{45,2,-36}, -{45,2,-35}, -{45,2,-34}, -{45,2,-33}, -{45,2,-32}, -{45,2,-31}, -{45,2,-30}, -{45,2,-29}, -{45,2,-28}, -{45,2,-27}, -{45,2,-26}, -{45,2,-25}, -{45,2,-24}, -{45,2,-23}, -{45,2,-22}, -{45,2,-21}, -{45,2,-20}, -{45,2,-19}, -{45,2,-18}, -{45,2,-17}, -{45,2,-16}, -{45,2,-15}, -{45,2,-14}, -{45,2,-13}, -{45,2,-12}, -{45,2,-11}, -{45,2,-10}, -{45,2,-9}, -{45,2,-8}, -{45,2,-7}, -{45,2,-6}, -{45,2,-5}, -{45,2,-4}, -{45,2,-3}, -{45,2,-2}, -{45,2,-1}, -{45,2,0}, -{45,2,1}, -{45,2,2}, -{45,2,3}, -{45,2,4}, -{45,2,5}, -{45,2,6}, -{45,2,7}, -{45,2,8}, -{45,2,9}, -{45,2,10}, -{45,2,11}, -{45,2,12}, -{45,2,13}, -{45,2,14}, -{45,2,15}, -{45,2,16}, -{45,2,17}, -{45,2,18}, -{45,2,19}, -{45,2,20}, -{45,2,21}, -{45,2,22}, -{45,2,23}, -{45,2,24}, -{45,2,25}, -{45,2,26}, -{45,2,27}, -{45,2,28}, -{45,2,29}, -{45,2,30}, -{45,2,31}, -{45,2,32}, -{45,2,33}, -{45,2,34}, -{45,2,35}, -{45,2,36}, -{45,2,37}, -{45,2,38}, -{45,2,39}, -{45,2,40}, -{45,2,41}, -{45,2,42}, -{45,2,43}, -{45,2,44}, -{45,2,45}, -{45,2,46}, -{45,2,47}, -{45,2,48}, -{45,2,49}, -{45,2,50}, -{45,2,51}, -{45,2,52}, -{45,3,-47}, -{45,3,-46}, -{45,3,-45}, -{45,3,-44}, -{45,3,-43}, -{45,3,-42}, -{45,3,-41}, -{45,3,-40}, -{45,3,-39}, -{45,3,-38}, -{45,3,-37}, -{45,3,-36}, -{45,3,-35}, -{45,3,-34}, -{45,3,-33}, -{45,3,-32}, -{45,3,-31}, -{45,3,-30}, -{45,3,-29}, -{45,3,-28}, -{45,3,-27}, -{45,3,-26}, -{45,3,-25}, -{45,3,-24}, -{45,3,-23}, -{45,3,-22}, -{45,3,-21}, -{45,3,-20}, -{45,3,-19}, -{45,3,-18}, -{45,3,-17}, -{45,3,-16}, -{45,3,-15}, -{45,3,-14}, -{45,3,-13}, -{45,3,-12}, -{45,3,-11}, -{45,3,-10}, -{45,3,-9}, -{45,3,-8}, -{45,3,-7}, -{45,3,-6}, -{45,3,-5}, -{45,3,-4}, -{45,3,-3}, -{45,3,-2}, -{45,3,-1}, -{45,3,0}, -{45,3,1}, -{45,3,2}, -{45,3,3}, -{45,3,4}, -{45,3,5}, -{45,3,6}, -{45,3,7}, -{45,3,8}, -{45,3,9}, -{45,3,10}, -{45,3,11}, -{45,3,12}, -{45,3,13}, -{45,3,14}, -{45,3,15}, -{45,3,16}, -{45,3,17}, -{45,3,18}, -{45,3,19}, -{45,3,20}, -{45,3,21}, -{45,3,22}, -{45,3,23}, -{45,3,24}, -{45,3,25}, -{45,3,26}, -{45,3,27}, -{45,3,28}, -{45,3,29}, -{45,3,30}, -{45,3,31}, -{45,3,32}, -{45,3,33}, -{45,3,34}, -{45,3,35}, -{45,3,36}, -{45,3,37}, -{45,3,38}, -{45,3,39}, -{45,3,40}, -{45,3,41}, -{45,3,42}, -{45,3,43}, -{45,3,44}, -{45,3,45}, -{45,3,46}, -{45,3,47}, -{45,3,48}, -{45,3,49}, -{45,3,50}, -{45,3,51}, -{45,3,52}, -{45,4,-48}, -{45,4,-47}, -{45,4,-46}, -{45,4,-45}, -{45,4,-44}, -{45,4,-43}, -{45,4,-42}, -{45,4,-41}, -{45,4,-40}, -{45,4,-39}, -{45,4,-38}, -{45,4,-37}, -{45,4,-36}, -{45,4,-35}, -{45,4,-34}, -{45,4,-33}, -{45,4,-32}, -{45,4,-31}, -{45,4,-30}, -{45,4,-29}, -{45,4,-28}, -{45,4,-27}, -{45,4,-26}, -{45,4,-25}, -{45,4,-24}, -{45,4,-23}, -{45,4,-22}, -{45,4,-21}, -{45,4,-20}, -{45,4,-19}, -{45,4,-18}, -{45,4,-17}, -{45,4,-16}, -{45,4,-15}, -{45,4,-14}, -{45,4,-13}, -{45,4,-12}, -{45,4,-11}, -{45,4,-10}, -{45,4,-9}, -{45,4,-8}, -{45,4,-7}, -{45,4,-6}, -{45,4,-5}, -{45,4,-4}, -{45,4,-3}, -{45,4,-2}, -{45,4,-1}, -{45,4,0}, -{45,4,1}, -{45,4,2}, -{45,4,3}, -{45,4,4}, -{45,4,5}, -{45,4,6}, -{45,4,7}, -{45,4,8}, -{45,4,9}, -{45,4,10}, -{45,4,11}, -{45,4,12}, -{45,4,13}, -{45,4,14}, -{45,4,15}, -{45,4,16}, -{45,4,17}, -{45,4,18}, -{45,4,19}, -{45,4,20}, -{45,4,21}, -{45,4,22}, -{45,4,23}, -{45,4,24}, -{45,4,25}, -{45,4,26}, -{45,4,27}, -{45,4,28}, -{45,4,29}, -{45,4,30}, -{45,4,31}, -{45,4,32}, -{45,4,33}, -{45,4,34}, -{45,4,35}, -{45,4,36}, -{45,4,37}, -{45,4,38}, -{45,4,39}, -{45,4,40}, -{45,4,41}, -{45,4,42}, -{45,4,43}, -{45,4,44}, -{45,4,45}, -{45,4,46}, -{45,4,47}, -{45,4,48}, -{45,4,49}, -{45,4,50}, -{45,4,51}, -{45,4,52}, -{45,5,-49}, -{45,5,-48}, -{45,5,-47}, -{45,5,-46}, -{45,5,-45}, -{45,5,-44}, -{45,5,-43}, -{45,5,-42}, -{45,5,-41}, -{45,5,-40}, -{45,5,-39}, -{45,5,-38}, -{45,5,-37}, -{45,5,-36}, -{45,5,-35}, -{45,5,-34}, -{45,5,-33}, -{45,5,-32}, -{45,5,-31}, -{45,5,-30}, -{45,5,-29}, -{45,5,-28}, -{45,5,-27}, -{45,5,-26}, -{45,5,-25}, -{45,5,-24}, -{45,5,-23}, -{45,5,-22}, -{45,5,-21}, -{45,5,-20}, -{45,5,-19}, -{45,5,-18}, -{45,5,-17}, -{45,5,-16}, -{45,5,-15}, -{45,5,-14}, -{45,5,-13}, -{45,5,-12}, -{45,5,-11}, -{45,5,-10}, -{45,5,-9}, -{45,5,-8}, -{45,5,-7}, -{45,5,-6}, -{45,5,-5}, -{45,5,-4}, -{45,5,-3}, -{45,5,-2}, -{45,5,-1}, -{45,5,0}, -{45,5,1}, -{45,5,2}, -{45,5,3}, -{45,5,4}, -{45,5,5}, -{45,5,6}, -{45,5,7}, -{45,5,8}, -{45,5,9}, -{45,5,10}, -{45,5,11}, -{45,5,12}, -{45,5,13}, -{45,5,14}, -{45,5,15}, -{45,5,16}, -{45,5,17}, -{45,5,18}, -{45,5,19}, -{45,5,20}, -{45,5,21}, -{45,5,22}, -{45,5,23}, -{45,5,24}, -{45,5,25}, -{45,5,26}, -{45,5,27}, -{45,5,28}, -{45,5,29}, -{45,5,30}, -{45,5,31}, -{45,5,32}, -{45,5,33}, -{45,5,34}, -{45,5,35}, -{45,5,36}, -{45,5,37}, -{45,5,38}, -{45,5,39}, -{45,5,40}, -{45,5,41}, -{45,5,42}, -{45,5,43}, -{45,5,44}, -{45,5,45}, -{45,5,46}, -{45,5,47}, -{45,5,48}, -{45,5,49}, -{45,5,50}, -{45,5,51}, -{45,5,52}, -{45,6,-50}, -{45,6,-49}, -{45,6,-48}, -{45,6,-47}, -{45,6,-46}, -{45,6,-45}, -{45,6,-44}, -{45,6,-43}, -{45,6,-42}, -{45,6,-41}, -{45,6,-40}, -{45,6,-39}, -{45,6,-38}, -{45,6,-37}, -{45,6,-36}, -{45,6,-35}, -{45,6,-34}, -{45,6,-33}, -{45,6,-32}, -{45,6,-31}, -{45,6,-30}, -{45,6,-29}, -{45,6,-28}, -{45,6,-27}, -{45,6,-26}, -{45,6,-25}, -{45,6,-24}, -{45,6,-23}, -{45,6,-22}, -{45,6,-21}, -{45,6,-20}, -{45,6,-19}, -{45,6,-18}, -{45,6,-17}, -{45,6,-16}, -{45,6,-15}, -{45,6,-14}, -{45,6,-13}, -{45,6,-12}, -{45,6,-11}, -{45,6,-10}, -{45,6,-9}, -{45,6,-8}, -{45,6,-7}, -{45,6,-6}, -{45,6,-5}, -{45,6,-4}, -{45,6,-3}, -{45,6,-2}, -{45,6,-1}, -{45,6,0}, -{45,6,1}, -{45,6,2}, -{45,6,3}, -{45,6,4}, -{45,6,5}, -{45,6,6}, -{45,6,7}, -{45,6,8}, -{45,6,9}, -{45,6,10}, -{45,6,11}, -{45,6,12}, -{45,6,13}, -{45,6,14}, -{45,6,15}, -{45,6,16}, -{45,6,17}, -{45,6,18}, -{45,6,19}, -{45,6,20}, -{45,6,21}, -{45,6,22}, -{45,6,23}, -{45,6,24}, -{45,6,25}, -{45,6,26}, -{45,6,27}, -{45,6,28}, -{45,6,29}, -{45,6,30}, -{45,6,31}, -{45,6,32}, -{45,6,33}, -{45,6,34}, -{45,6,35}, -{45,6,36}, -{45,6,37}, -{45,6,38}, -{45,6,39}, -{45,6,40}, -{45,6,41}, -{45,6,42}, -{45,6,43}, -{45,6,44}, -{45,6,45}, -{45,6,46}, -{45,6,47}, -{45,6,48}, -{45,6,49}, -{45,6,50}, -{45,6,51}, -{45,6,52}, -{45,7,-51}, -{45,7,-50}, -{45,7,-49}, -{45,7,-48}, -{45,7,-47}, -{45,7,-46}, -{45,7,-45}, -{45,7,-44}, -{45,7,-43}, -{45,7,-42}, -{45,7,-41}, -{45,7,-40}, -{45,7,-39}, -{45,7,-38}, -{45,7,-37}, -{45,7,-36}, -{45,7,-35}, -{45,7,-34}, -{45,7,-33}, -{45,7,-32}, -{45,7,-31}, -{45,7,-30}, -{45,7,-29}, -{45,7,-28}, -{45,7,-27}, -{45,7,-26}, -{45,7,-25}, -{45,7,-24}, -{45,7,-23}, -{45,7,-22}, -{45,7,-21}, -{45,7,-20}, -{45,7,-19}, -{45,7,-18}, -{45,7,-17}, -{45,7,-16}, -{45,7,-15}, -{45,7,-14}, -{45,7,-13}, -{45,7,-12}, -{45,7,-11}, -{45,7,-10}, -{45,7,-9}, -{45,7,-8}, -{45,7,-7}, -{45,7,-6}, -{45,7,-5}, -{45,7,-4}, -{45,7,-3}, -{45,7,-2}, -{45,7,-1}, -{45,7,0}, -{45,7,1}, -{45,7,2}, -{45,7,3}, -{45,7,4}, -{45,7,5}, -{45,7,6}, -{45,7,7}, -{45,7,8}, -{45,7,9}, -{45,7,10}, -{45,7,11}, -{45,7,12}, -{45,7,13}, -{45,7,14}, -{45,7,15}, -{45,7,16}, -{45,7,17}, -{45,7,18}, -{45,7,19}, -{45,7,20}, -{45,7,21}, -{45,7,22}, -{45,7,23}, -{45,7,24}, -{45,7,25}, -{45,7,26}, -{45,7,27}, -{45,7,28}, -{45,7,29}, -{45,7,30}, -{45,7,31}, -{45,7,32}, -{45,7,33}, -{45,7,34}, -{45,7,35}, -{45,7,36}, -{45,7,37}, -{45,7,38}, -{45,7,39}, -{45,7,40}, -{45,7,41}, -{45,7,42}, -{45,7,43}, -{45,7,44}, -{45,7,45}, -{45,7,46}, -{45,7,47}, -{45,7,48}, -{45,7,49}, -{45,7,50}, -{45,7,51}, -{45,7,52}, -{45,8,-52}, -{45,8,-51}, -{45,8,-50}, -{45,8,-49}, -{45,8,-48}, -{45,8,-47}, -{45,8,-46}, -{45,8,-45}, -{45,8,-44}, -{45,8,-43}, -{45,8,-42}, -{45,8,-41}, -{45,8,-40}, -{45,8,-39}, -{45,8,-38}, -{45,8,-37}, -{45,8,-36}, -{45,8,-35}, -{45,8,-34}, -{45,8,-33}, -{45,8,-32}, -{45,8,-31}, -{45,8,-30}, -{45,8,-29}, -{45,8,-28}, -{45,8,-27}, -{45,8,-26}, -{45,8,-25}, -{45,8,-24}, -{45,8,-23}, -{45,8,-22}, -{45,8,-21}, -{45,8,-20}, -{45,8,-19}, -{45,8,-18}, -{45,8,-17}, -{45,8,-16}, -{45,8,-15}, -{45,8,-14}, -{45,8,-13}, -{45,8,-12}, -{45,8,-11}, -{45,8,-10}, -{45,8,-9}, -{45,8,-8}, -{45,8,-7}, -{45,8,-6}, -{45,8,-5}, -{45,8,-4}, -{45,8,-3}, -{45,8,-2}, -{45,8,-1}, -{45,8,0}, -{45,8,1}, -{45,8,2}, -{45,8,3}, -{45,8,4}, -{45,8,5}, -{45,8,6}, -{45,8,7}, -{45,8,8}, -{45,8,9}, -{45,8,10}, -{45,8,11}, -{45,8,12}, -{45,8,13}, -{45,8,14}, -{45,8,15}, -{45,8,16}, -{45,8,17}, -{45,8,18}, -{45,8,19}, -{45,8,20}, -{45,8,21}, -{45,8,22}, -{45,8,23}, -{45,8,24}, -{45,8,25}, -{45,8,26}, -{45,8,27}, -{45,8,28}, -{45,8,29}, -{45,8,30}, -{45,8,31}, -{45,8,32}, -{45,8,33}, -{45,8,34}, -{45,8,35}, -{45,8,36}, -{45,8,37}, -{45,8,38}, -{45,8,39}, -{45,8,40}, -{45,8,41}, -{45,8,42}, -{45,8,43}, -{45,8,44}, -{45,8,45}, -{45,8,46}, -{45,8,47}, -{45,8,48}, -{45,8,49}, -{45,8,50}, -{45,8,51}, -{45,8,52}, -{45,9,-53}, -{45,9,-52}, -{45,9,-51}, -{45,9,-50}, -{45,9,-49}, -{45,9,-48}, -{45,9,-47}, -{45,9,-46}, -{45,9,-45}, -{45,9,-44}, -{45,9,-43}, -{45,9,-42}, -{45,9,-41}, -{45,9,-40}, -{45,9,-39}, -{45,9,-38}, -{45,9,-37}, -{45,9,-36}, -{45,9,-35}, -{45,9,-34}, -{45,9,-33}, -{45,9,-32}, -{45,9,-31}, -{45,9,-30}, -{45,9,-29}, -{45,9,-28}, -{45,9,-27}, -{45,9,-26}, -{45,9,-25}, -{45,9,-24}, -{45,9,-23}, -{45,9,-22}, -{45,9,-21}, -{45,9,-20}, -{45,9,-19}, -{45,9,-18}, -{45,9,-17}, -{45,9,-16}, -{45,9,-15}, -{45,9,-14}, -{45,9,-13}, -{45,9,-12}, -{45,9,-11}, -{45,9,-10}, -{45,9,-9}, -{45,9,-8}, -{45,9,-7}, -{45,9,-6}, -{45,9,-5}, -{45,9,-4}, -{45,9,-3}, -{45,9,-2}, -{45,9,-1}, -{45,9,0}, -{45,9,1}, -{45,9,2}, -{45,9,3}, -{45,9,4}, -{45,9,5}, -{45,9,6}, -{45,9,7}, -{45,9,8}, -{45,9,9}, -{45,9,10}, -{45,9,11}, -{45,9,12}, -{45,9,13}, -{45,9,14}, -{45,9,15}, -{45,9,16}, -{45,9,17}, -{45,9,18}, -{45,9,19}, -{45,9,20}, -{45,9,21}, -{45,9,22}, -{45,9,23}, -{45,9,24}, -{45,9,25}, -{45,9,26}, -{45,9,27}, -{45,9,28}, -{45,9,29}, -{45,9,30}, -{45,9,31}, -{45,9,32}, -{45,9,33}, -{45,9,34}, -{45,9,35}, -{45,9,36}, -{45,9,37}, -{45,9,38}, -{45,9,39}, -{45,9,40}, -{45,9,41}, -{45,9,42}, -{45,9,43}, -{45,9,44}, -{45,9,45}, -{45,9,46}, -{45,9,47}, -{45,9,48}, -{45,9,49}, -{45,9,50}, -{45,9,51}, -{45,9,52}, -{45,10,-54}, -{45,10,-53}, -{45,10,-52}, -{45,10,-51}, -{45,10,-50}, -{45,10,-49}, -{45,10,-48}, -{45,10,-47}, -{45,10,-46}, -{45,10,-45}, -{45,10,-44}, -{45,10,-43}, -{45,10,-42}, -{45,10,-41}, -{45,10,-40}, -{45,10,-39}, -{45,10,-38}, -{45,10,-37}, -{45,10,-36}, -{45,10,-35}, -{45,10,-34}, -{45,10,-33}, -{45,10,-32}, -{45,10,-31}, -{45,10,-30}, -{45,10,-29}, -{45,10,-28}, -{45,10,-27}, -{45,10,-26}, -{45,10,-25}, -{45,10,-24}, -{45,10,-23}, -{45,10,-22}, -{45,10,-21}, -{45,10,-20}, -{45,10,-19}, -{45,10,-18}, -{45,10,-17}, -{45,10,-16}, -{45,10,-15}, -{45,10,-14}, -{45,10,-13}, -{45,10,-12}, -{45,10,-11}, -{45,10,-10}, -{45,10,-9}, -{45,10,-8}, -{45,10,-7}, -{45,10,-6}, -{45,10,-5}, -{45,10,-4}, -{45,10,-3}, -{45,10,-2}, -{45,10,-1}, -{45,10,0}, -{45,10,1}, -{45,10,2}, -{45,10,3}, -{45,10,4}, -{45,10,5}, -{45,10,6}, -{45,10,7}, -{45,10,8}, -{45,10,9}, -{45,10,10}, -{45,10,11}, -{45,10,12}, -{45,10,13}, -{45,10,14}, -{45,10,15}, -{45,10,16}, -{45,10,17}, -{45,10,18}, -{45,10,19}, -{45,10,20}, -{45,10,21}, -{45,10,22}, -{45,10,23}, -{45,10,24}, -{45,10,25}, -{45,10,26}, -{45,10,27}, -{45,10,28}, -{45,10,29}, -{45,10,30}, -{45,10,31}, -{45,10,32}, -{45,10,33}, -{45,10,34}, -{45,10,35}, -{45,10,36}, -{45,10,37}, -{45,10,38}, -{45,10,39}, -{45,10,40}, -{45,10,41}, -{45,10,42}, -{45,10,43}, -{45,10,44}, -{45,10,45}, -{45,10,46}, -{45,10,47}, -{45,10,48}, -{45,10,49}, -{45,10,50}, -{45,10,51}, -{45,10,52}, -{45,11,-55}, -{45,11,-54}, -{45,11,-53}, -{45,11,-52}, -{45,11,-51}, -{45,11,-50}, -{45,11,-49}, -{45,11,-48}, -{45,11,-47}, -{45,11,-46}, -{45,11,-45}, -{45,11,-44}, -{45,11,-43}, -{45,11,-42}, -{45,11,-41}, -{45,11,-40}, -{45,11,-39}, -{45,11,-38}, -{45,11,-37}, -{45,11,-36}, -{45,11,-35}, -{45,11,-34}, -{45,11,-33}, -{45,11,-32}, -{45,11,-31}, -{45,11,-30}, -{45,11,-29}, -{45,11,-28}, -{45,11,-27}, -{45,11,-26}, -{45,11,-25}, -{45,11,-24}, -{45,11,-23}, -{45,11,-22}, -{45,11,-21}, -{45,11,-20}, -{45,11,-19}, -{45,11,-18}, -{45,11,-17}, -{45,11,-16}, -{45,11,-15}, -{45,11,-14}, -{45,11,-13}, -{45,11,-12}, -{45,11,-11}, -{45,11,-10}, -{45,11,-9}, -{45,11,-8}, -{45,11,-7}, -{45,11,-6}, -{45,11,-5}, -{45,11,-4}, -{45,11,-3}, -{45,11,-2}, -{45,11,-1}, -{45,11,0}, -{45,11,1}, -{45,11,2}, -{45,11,3}, -{45,11,4}, -{45,11,5}, -{45,11,6}, -{45,11,7}, -{45,11,8}, -{45,11,9}, -{45,11,10}, -{45,11,11}, -{45,11,12}, -{45,11,13}, -{45,11,14}, -{45,11,15}, -{45,11,16}, -{45,11,17}, -{45,11,18}, -{45,11,19}, -{45,11,20}, -{45,11,21}, -{45,11,22}, -{45,11,23}, -{45,11,24}, -{45,11,25}, -{45,11,26}, -{45,11,27}, -{45,11,28}, -{45,11,29}, -{45,11,30}, -{45,11,31}, -{45,11,32}, -{45,11,33}, -{45,11,34}, -{45,11,35}, -{45,11,36}, -{45,11,37}, -{45,11,38}, -{45,11,39}, -{45,11,40}, -{45,11,41}, -{45,11,42}, -{45,11,43}, -{45,11,44}, -{45,11,45}, -{45,11,46}, -{45,11,47}, -{45,11,48}, -{45,11,49}, -{45,11,50}, -{45,11,51}, -{45,11,52}, -{45,12,-57}, -{45,12,-56}, -{45,12,-55}, -{45,12,-54}, -{45,12,-53}, -{45,12,-52}, -{45,12,-51}, -{45,12,-50}, -{45,12,-49}, -{45,12,-48}, -{45,12,-47}, -{45,12,-46}, -{45,12,-45}, -{45,12,-44}, -{45,12,-43}, -{45,12,-42}, -{45,12,-41}, -{45,12,-40}, -{45,12,-39}, -{45,12,-38}, -{45,12,-37}, -{45,12,-36}, -{45,12,-35}, -{45,12,-34}, -{45,12,-33}, -{45,12,-32}, -{45,12,-31}, -{45,12,-30}, -{45,12,-29}, -{45,12,-28}, -{45,12,-27}, -{45,12,-26}, -{45,12,-25}, -{45,12,-24}, -{45,12,-23}, -{45,12,-22}, -{45,12,-21}, -{45,12,-20}, -{45,12,-19}, -{45,12,-18}, -{45,12,-17}, -{45,12,-16}, -{45,12,-15}, -{45,12,-14}, -{45,12,-13}, -{45,12,-12}, -{45,12,-11}, -{45,12,-10}, -{45,12,-9}, -{45,12,-8}, -{45,12,-7}, -{45,12,-6}, -{45,12,-5}, -{45,12,-4}, -{45,12,-3}, -{45,12,-2}, -{45,12,-1}, -{45,12,0}, -{45,12,1}, -{45,12,2}, -{45,12,3}, -{45,12,4}, -{45,12,5}, -{45,12,6}, -{45,12,7}, -{45,12,8}, -{45,12,9}, -{45,12,10}, -{45,12,11}, -{45,12,12}, -{45,12,13}, -{45,12,14}, -{45,12,15}, -{45,12,16}, -{45,12,17}, -{45,12,18}, -{45,12,19}, -{45,12,20}, -{45,12,21}, -{45,12,22}, -{45,12,23}, -{45,12,24}, -{45,12,25}, -{45,12,26}, -{45,12,27}, -{45,12,28}, -{45,12,29}, -{45,12,30}, -{45,12,31}, -{45,12,32}, -{45,12,33}, -{45,12,34}, -{45,12,35}, -{45,12,36}, -{45,12,37}, -{45,12,38}, -{45,12,39}, -{45,12,40}, -{45,12,41}, -{45,12,42}, -{45,12,43}, -{45,12,44}, -{45,12,45}, -{45,12,46}, -{45,12,47}, -{45,12,48}, -{45,12,49}, -{45,12,50}, -{45,12,51}, -{45,12,52}, -{45,13,-58}, -{45,13,-57}, -{45,13,-56}, -{45,13,-55}, -{45,13,-54}, -{45,13,-53}, -{45,13,-52}, -{45,13,-51}, -{45,13,-50}, -{45,13,-49}, -{45,13,-48}, -{45,13,-47}, -{45,13,-46}, -{45,13,-45}, -{45,13,-44}, -{45,13,-43}, -{45,13,-42}, -{45,13,-41}, -{45,13,-40}, -{45,13,-39}, -{45,13,-38}, -{45,13,-37}, -{45,13,-36}, -{45,13,-35}, -{45,13,-34}, -{45,13,-33}, -{45,13,-32}, -{45,13,-31}, -{45,13,-30}, -{45,13,-29}, -{45,13,-28}, -{45,13,-27}, -{45,13,-26}, -{45,13,-25}, -{45,13,-24}, -{45,13,-23}, -{45,13,-22}, -{45,13,-21}, -{45,13,-20}, -{45,13,-19}, -{45,13,-18}, -{45,13,-17}, -{45,13,-16}, -{45,13,-15}, -{45,13,-14}, -{45,13,-13}, -{45,13,-12}, -{45,13,-11}, -{45,13,-10}, -{45,13,-9}, -{45,13,-8}, -{45,13,-7}, -{45,13,-6}, -{45,13,-5}, -{45,13,-4}, -{45,13,-3}, -{45,13,-2}, -{45,13,-1}, -{45,13,0}, -{45,13,1}, -{45,13,2}, -{45,13,3}, -{45,13,4}, -{45,13,5}, -{45,13,6}, -{45,13,7}, -{45,13,8}, -{45,13,9}, -{45,13,10}, -{45,13,11}, -{45,13,12}, -{45,13,13}, -{45,13,14}, -{45,13,15}, -{45,13,16}, -{45,13,17}, -{45,13,18}, -{45,13,19}, -{45,13,20}, -{45,13,21}, -{45,13,22}, -{45,13,23}, -{45,13,24}, -{45,13,25}, -{45,13,26}, -{45,13,27}, -{45,13,28}, -{45,13,29}, -{45,13,30}, -{45,13,31}, -{45,13,32}, -{45,13,33}, -{45,13,34}, -{45,13,35}, -{45,13,36}, -{45,13,37}, -{45,13,38}, -{45,13,39}, -{45,13,40}, -{45,13,41}, -{45,13,42}, -{45,13,43}, -{45,13,44}, -{45,13,45}, -{45,13,46}, -{45,13,47}, -{45,13,48}, -{45,13,49}, -{45,13,50}, -{45,13,51}, -{45,13,52}, -{45,14,-59}, -{45,14,-58}, -{45,14,-57}, -{45,14,-56}, -{45,14,-55}, -{45,14,-54}, -{45,14,-53}, -{45,14,-52}, -{45,14,-51}, -{45,14,-50}, -{45,14,-49}, -{45,14,-48}, -{45,14,-47}, -{45,14,-46}, -{45,14,-45}, -{45,14,-44}, -{45,14,-43}, -{45,14,-42}, -{45,14,-41}, -{45,14,-40}, -{45,14,-39}, -{45,14,-38}, -{45,14,-37}, -{45,14,-36}, -{45,14,-35}, -{45,14,-34}, -{45,14,-33}, -{45,14,-32}, -{45,14,-31}, -{45,14,-30}, -{45,14,-29}, -{45,14,-28}, -{45,14,-27}, -{45,14,-26}, -{45,14,-25}, -{45,14,-24}, -{45,14,-23}, -{45,14,-22}, -{45,14,-21}, -{45,14,-20}, -{45,14,-19}, -{45,14,-18}, -{45,14,-17}, -{45,14,-16}, -{45,14,-15}, -{45,14,-14}, -{45,14,-13}, -{45,14,-12}, -{45,14,-11}, -{45,14,-10}, -{45,14,-9}, -{45,14,-8}, -{45,14,-7}, -{45,14,-6}, -{45,14,-5}, -{45,14,-4}, -{45,14,-3}, -{45,14,-2}, -{45,14,-1}, -{45,14,0}, -{45,14,1}, -{45,14,2}, -{45,14,3}, -{45,14,4}, -{45,14,5}, -{45,14,6}, -{45,14,7}, -{45,14,8}, -{45,14,9}, -{45,14,10}, -{45,14,11}, -{45,14,12}, -{45,14,13}, -{45,14,14}, -{45,14,15}, -{45,14,16}, -{45,14,17}, -{45,14,18}, -{45,14,19}, -{45,14,20}, -{45,14,21}, -{45,14,22}, -{45,14,23}, -{45,14,24}, -{45,14,25}, -{45,14,26}, -{45,14,27}, -{45,14,28}, -{45,14,29}, -{45,14,30}, -{45,14,31}, -{45,14,32}, -{45,14,33}, -{45,14,34}, -{45,14,35}, -{45,14,36}, -{45,14,37}, -{45,14,38}, -{45,14,39}, -{45,14,40}, -{45,14,41}, -{45,14,42}, -{45,14,43}, -{45,14,44}, -{45,14,45}, -{45,14,46}, -{45,14,47}, -{45,14,48}, -{45,14,49}, -{45,14,50}, -{45,14,51}, -{45,14,52}, -{45,15,-60}, -{45,15,-59}, -{45,15,-58}, -{45,15,-57}, -{45,15,-56}, -{45,15,-55}, -{45,15,-54}, -{45,15,-53}, -{45,15,-52}, -{45,15,-51}, -{45,15,-50}, -{45,15,-49}, -{45,15,-48}, -{45,15,-47}, -{45,15,-46}, -{45,15,-45}, -{45,15,-44}, -{45,15,-43}, -{45,15,-42}, -{45,15,-41}, -{45,15,-40}, -{45,15,-39}, -{45,15,-38}, -{45,15,-37}, -{45,15,-36}, -{45,15,-35}, -{45,15,-34}, -{45,15,-33}, -{45,15,-32}, -{45,15,-31}, -{45,15,-30}, -{45,15,-29}, -{45,15,-28}, -{45,15,-27}, -{45,15,-26}, -{45,15,-25}, -{45,15,-24}, -{45,15,-23}, -{45,15,-22}, -{45,15,-21}, -{45,15,-20}, -{45,15,-19}, -{45,15,-18}, -{45,15,-17}, -{45,15,-16}, -{45,15,-15}, -{45,15,-14}, -{45,15,-13}, -{45,15,-12}, -{45,15,-11}, -{45,15,-10}, -{45,15,-9}, -{45,15,-8}, -{45,15,-7}, -{45,15,-6}, -{45,15,-5}, -{45,15,-4}, -{45,15,-3}, -{45,15,-2}, -{45,15,-1}, -{45,15,0}, -{45,15,1}, -{45,15,2}, -{45,15,3}, -{45,15,4}, -{45,15,5}, -{45,15,6}, -{45,15,7}, -{45,15,8}, -{45,15,9}, -{45,15,10}, -{45,15,11}, -{45,15,12}, -{45,15,13}, -{45,15,14}, -{45,15,15}, -{45,15,16}, -{45,15,17}, -{45,15,18}, -{45,15,19}, -{45,15,20}, -{45,15,21}, -{45,15,22}, -{45,15,23}, -{45,15,24}, -{45,15,25}, -{45,15,26}, -{45,15,27}, -{45,15,28}, -{45,15,29}, -{45,15,30}, -{45,15,31}, -{45,15,32}, -{45,15,33}, -{45,15,34}, -{45,15,35}, -{45,15,36}, -{45,15,37}, -{45,15,38}, -{45,15,39}, -{45,15,40}, -{45,15,41}, -{45,15,42}, -{45,15,43}, -{45,15,44}, -{45,15,45}, -{45,15,46}, -{45,15,47}, -{45,15,48}, -{45,15,49}, -{45,15,50}, -{45,15,51}, -{45,15,52}, -{45,15,53}, -{45,16,-61}, -{45,16,-60}, -{45,16,-59}, -{45,16,-58}, -{45,16,-57}, -{45,16,-56}, -{45,16,-55}, -{45,16,-54}, -{45,16,-53}, -{45,16,-52}, -{45,16,-51}, -{45,16,-50}, -{45,16,-49}, -{45,16,-48}, -{45,16,-47}, -{45,16,-46}, -{45,16,-45}, -{45,16,-44}, -{45,16,-43}, -{45,16,-42}, -{45,16,-41}, -{45,16,-40}, -{45,16,-39}, -{45,16,-38}, -{45,16,-37}, -{45,16,-36}, -{45,16,-35}, -{45,16,-34}, -{45,16,-33}, -{45,16,-32}, -{45,16,-31}, -{45,16,-30}, -{45,16,-29}, -{45,16,-28}, -{45,16,-27}, -{45,16,-26}, -{45,16,-25}, -{45,16,-24}, -{45,16,-23}, -{45,16,-22}, -{45,16,-21}, -{45,16,-20}, -{45,16,-19}, -{45,16,-18}, -{45,16,-17}, -{45,16,-16}, -{45,16,-15}, -{45,16,-14}, -{45,16,-13}, -{45,16,-12}, -{45,16,-11}, -{45,16,-10}, -{45,16,-9}, -{45,16,-8}, -{45,16,-7}, -{45,16,-6}, -{45,16,-5}, -{45,16,-4}, -{45,16,-3}, -{45,16,-2}, -{45,16,-1}, -{45,16,0}, -{45,16,1}, -{45,16,2}, -{45,16,3}, -{45,16,4}, -{45,16,5}, -{45,16,6}, -{45,16,7}, -{45,16,8}, -{45,16,9}, -{45,16,10}, -{45,16,11}, -{45,16,12}, -{45,16,13}, -{45,16,14}, -{45,16,15}, -{45,16,16}, -{45,16,17}, -{45,16,18}, -{45,16,19}, -{45,16,20}, -{45,16,21}, -{45,16,22}, -{45,16,23}, -{45,16,24}, -{45,16,25}, -{45,16,26}, -{45,16,27}, -{45,16,28}, -{45,16,29}, -{45,16,30}, -{45,16,31}, -{45,16,32}, -{45,16,33}, -{45,16,34}, -{45,16,35}, -{45,16,36}, -{45,16,37}, -{45,16,38}, -{45,16,39}, -{45,16,40}, -{45,16,41}, -{45,16,42}, -{45,16,43}, -{45,16,44}, -{45,16,45}, -{45,16,46}, -{45,16,47}, -{45,16,48}, -{45,16,49}, -{45,16,50}, -{45,16,51}, -{45,16,52}, -{45,16,53}, -{45,17,-62}, -{45,17,-61}, -{45,17,-60}, -{45,17,-59}, -{45,17,-58}, -{45,17,-57}, -{45,17,-56}, -{45,17,-55}, -{45,17,-54}, -{45,17,-53}, -{45,17,-52}, -{45,17,-51}, -{45,17,-50}, -{45,17,-49}, -{45,17,-48}, -{45,17,-47}, -{45,17,-46}, -{45,17,-45}, -{45,17,-44}, -{45,17,-43}, -{45,17,-42}, -{45,17,-41}, -{45,17,-40}, -{45,17,-39}, -{45,17,-38}, -{45,17,-37}, -{45,17,-36}, -{45,17,-35}, -{45,17,-34}, -{45,17,-33}, -{45,17,-32}, -{45,17,-31}, -{45,17,-30}, -{45,17,-29}, -{45,17,-28}, -{45,17,-27}, -{45,17,-26}, -{45,17,-25}, -{45,17,-24}, -{45,17,-23}, -{45,17,-22}, -{45,17,-21}, -{45,17,-20}, -{45,17,-19}, -{45,17,-18}, -{45,17,-17}, -{45,17,-16}, -{45,17,-15}, -{45,17,-14}, -{45,17,-13}, -{45,17,-12}, -{45,17,-11}, -{45,17,-10}, -{45,17,-9}, -{45,17,-8}, -{45,17,-7}, -{45,17,-6}, -{45,17,-5}, -{45,17,-4}, -{45,17,-3}, -{45,17,-2}, -{45,17,-1}, -{45,17,0}, -{45,17,1}, -{45,17,2}, -{45,17,3}, -{45,17,4}, -{45,17,5}, -{45,17,6}, -{45,17,7}, -{45,17,8}, -{45,17,9}, -{45,17,10}, -{45,17,11}, -{45,17,12}, -{45,17,13}, -{45,17,14}, -{45,17,15}, -{45,17,16}, -{45,17,17}, -{45,17,18}, -{45,17,19}, -{45,17,20}, -{45,17,21}, -{45,17,22}, -{45,17,23}, -{45,17,24}, -{45,17,25}, -{45,17,26}, -{45,17,27}, -{45,17,28}, -{45,17,29}, -{45,17,30}, -{45,17,31}, -{45,17,32}, -{45,17,33}, -{45,17,34}, -{45,17,35}, -{45,17,36}, -{45,17,37}, -{45,17,38}, -{45,17,39}, -{45,17,40}, -{45,17,41}, -{45,17,42}, -{45,17,43}, -{45,17,44}, -{45,17,45}, -{45,17,46}, -{45,17,47}, -{45,17,48}, -{45,17,49}, -{45,17,50}, -{45,17,51}, -{45,17,52}, -{45,17,53}, -{45,18,-63}, -{45,18,-62}, -{45,18,-61}, -{45,18,-60}, -{45,18,-59}, -{45,18,-58}, -{45,18,-57}, -{45,18,-56}, -{45,18,-55}, -{45,18,-54}, -{45,18,-53}, -{45,18,-52}, -{45,18,-51}, -{45,18,-50}, -{45,18,-49}, -{45,18,-48}, -{45,18,-47}, -{45,18,-46}, -{45,18,-45}, -{45,18,-44}, -{45,18,-43}, -{45,18,-42}, -{45,18,-41}, -{45,18,-40}, -{45,18,-39}, -{45,18,-38}, -{45,18,-37}, -{45,18,-36}, -{45,18,-35}, -{45,18,-34}, -{45,18,-33}, -{45,18,-32}, -{45,18,-31}, -{45,18,-30}, -{45,18,-29}, -{45,18,-28}, -{45,18,-27}, -{45,18,-26}, -{45,18,-25}, -{45,18,-24}, -{45,18,-23}, -{45,18,-22}, -{45,18,-21}, -{45,18,-20}, -{45,18,-19}, -{45,18,-18}, -{45,18,-17}, -{45,18,-16}, -{45,18,-15}, -{45,18,-14}, -{45,18,-13}, -{45,18,-12}, -{45,18,-11}, -{45,18,-10}, -{45,18,-9}, -{45,18,-8}, -{45,18,-7}, -{45,18,-6}, -{45,18,-5}, -{45,18,-4}, -{45,18,-3}, -{45,18,-2}, -{45,18,-1}, -{45,18,0}, -{45,18,1}, -{45,18,2}, -{45,18,3}, -{45,18,4}, -{45,18,5}, -{45,18,6}, -{45,18,7}, -{45,18,8}, -{45,18,9}, -{45,18,10}, -{45,18,11}, -{45,18,12}, -{45,18,13}, -{45,18,14}, -{45,18,15}, -{45,18,16}, -{45,18,17}, -{45,18,18}, -{45,18,19}, -{45,18,20}, -{45,18,21}, -{45,18,22}, -{45,18,23}, -{45,18,24}, -{45,18,25}, -{45,18,26}, -{45,18,27}, -{45,18,28}, -{45,18,29}, -{45,18,30}, -{45,18,31}, -{45,18,32}, -{45,18,33}, -{45,18,34}, -{45,18,35}, -{45,18,36}, -{45,18,37}, -{45,18,38}, -{45,18,39}, -{45,18,40}, -{45,18,41}, -{45,18,42}, -{45,18,43}, -{45,18,44}, -{45,18,45}, -{45,18,46}, -{45,18,47}, -{45,18,48}, -{45,18,49}, -{45,18,50}, -{45,18,51}, -{45,18,52}, -{45,18,53}, -{45,19,-64}, -{45,19,-63}, -{45,19,-62}, -{45,19,-61}, -{45,19,-60}, -{45,19,-59}, -{45,19,-58}, -{45,19,-57}, -{45,19,-56}, -{45,19,-55}, -{45,19,-54}, -{45,19,-53}, -{45,19,-52}, -{45,19,-51}, -{45,19,-50}, -{45,19,-49}, -{45,19,-48}, -{45,19,-47}, -{45,19,-46}, -{45,19,-45}, -{45,19,-44}, -{45,19,-43}, -{45,19,-42}, -{45,19,-41}, -{45,19,-40}, -{45,19,-39}, -{45,19,-38}, -{45,19,-37}, -{45,19,-36}, -{45,19,-35}, -{45,19,-34}, -{45,19,-33}, -{45,19,-32}, -{45,19,-31}, -{45,19,-30}, -{45,19,-29}, -{45,19,-28}, -{45,19,-27}, -{45,19,-26}, -{45,19,-25}, -{45,19,-24}, -{45,19,-23}, -{45,19,-22}, -{45,19,-21}, -{45,19,-20}, -{45,19,-19}, -{45,19,-18}, -{45,19,-17}, -{45,19,-16}, -{45,19,-15}, -{45,19,-14}, -{45,19,-13}, -{45,19,-12}, -{45,19,-11}, -{45,19,-10}, -{45,19,-9}, -{45,19,-8}, -{45,19,-7}, -{45,19,-6}, -{45,19,-5}, -{45,19,-4}, -{45,19,-3}, -{45,19,-2}, -{45,19,-1}, -{45,19,0}, -{45,19,1}, -{45,19,2}, -{45,19,3}, -{45,19,4}, -{45,19,5}, -{45,19,6}, -{45,19,7}, -{45,19,8}, -{45,19,9}, -{45,19,10}, -{45,19,11}, -{45,19,12}, -{45,19,13}, -{45,19,14}, -{45,19,15}, -{45,19,16}, -{45,19,17}, -{45,19,18}, -{45,19,19}, -{45,19,20}, -{45,19,21}, -{45,19,22}, -{45,19,23}, -{45,19,24}, -{45,19,25}, -{45,19,26}, -{45,19,27}, -{45,19,28}, -{45,19,29}, -{45,19,30}, -{45,19,31}, -{45,19,32}, -{45,19,33}, -{45,19,34}, -{45,19,35}, -{45,19,36}, -{45,19,37}, -{45,19,38}, -{45,19,39}, -{45,19,40}, -{45,19,41}, -{45,19,42}, -{45,19,43}, -{45,19,44}, -{45,19,45}, -{45,19,46}, -{45,19,47}, -{45,19,48}, -{45,19,49}, -{45,19,50}, -{45,19,51}, -{45,19,52}, -{45,19,53}, -{45,20,-65}, -{45,20,-64}, -{45,20,-63}, -{45,20,-62}, -{45,20,-61}, -{45,20,-60}, -{45,20,-59}, -{45,20,-58}, -{45,20,-57}, -{45,20,-56}, -{45,20,-55}, -{45,20,-54}, -{45,20,-53}, -{45,20,-52}, -{45,20,-51}, -{45,20,-50}, -{45,20,-49}, -{45,20,-48}, -{45,20,-47}, -{45,20,-46}, -{45,20,-45}, -{45,20,-44}, -{45,20,-43}, -{45,20,-42}, -{45,20,-41}, -{45,20,-40}, -{45,20,-39}, -{45,20,-38}, -{45,20,-37}, -{45,20,-36}, -{45,20,-35}, -{45,20,-34}, -{45,20,-33}, -{45,20,-32}, -{45,20,-31}, -{45,20,-30}, -{45,20,-29}, -{45,20,-28}, -{45,20,-27}, -{45,20,-26}, -{45,20,-25}, -{45,20,-24}, -{45,20,-23}, -{45,20,-22}, -{45,20,-21}, -{45,20,-20}, -{45,20,-19}, -{45,20,-18}, -{45,20,-17}, -{45,20,-16}, -{45,20,-15}, -{45,20,-14}, -{45,20,-13}, -{45,20,-12}, -{45,20,-11}, -{45,20,-10}, -{45,20,-9}, -{45,20,-8}, -{45,20,-7}, -{45,20,-6}, -{45,20,-5}, -{45,20,-4}, -{45,20,-3}, -{45,20,-2}, -{45,20,-1}, -{45,20,0}, -{45,20,1}, -{45,20,2}, -{45,20,3}, -{45,20,4}, -{45,20,5}, -{45,20,6}, -{45,20,7}, -{45,20,8}, -{45,20,9}, -{45,20,10}, -{45,20,11}, -{45,20,12}, -{45,20,13}, -{45,20,14}, -{45,20,15}, -{45,20,16}, -{45,20,17}, -{45,20,18}, -{45,20,19}, -{45,20,20}, -{45,20,21}, -{45,20,22}, -{45,20,23}, -{45,20,24}, -{45,20,25}, -{45,20,26}, -{45,20,27}, -{45,20,28}, -{45,20,29}, -{45,20,30}, -{45,20,31}, -{45,20,32}, -{45,20,33}, -{45,20,34}, -{45,20,35}, -{45,20,36}, -{45,20,37}, -{45,20,38}, -{45,20,39}, -{45,20,40}, -{45,20,41}, -{45,20,42}, -{45,20,43}, -{45,20,44}, -{45,20,45}, -{45,20,46}, -{45,20,47}, -{45,20,48}, -{45,20,49}, -{45,20,50}, -{45,20,51}, -{45,20,52}, -{45,20,53}, -{45,21,-66}, -{45,21,-65}, -{45,21,-64}, -{45,21,-63}, -{45,21,-62}, -{45,21,-61}, -{45,21,-60}, -{45,21,-59}, -{45,21,-58}, -{45,21,-57}, -{45,21,-56}, -{45,21,-55}, -{45,21,-54}, -{45,21,-53}, -{45,21,-52}, -{45,21,-51}, -{45,21,-50}, -{45,21,-49}, -{45,21,-48}, -{45,21,-47}, -{45,21,-46}, -{45,21,-45}, -{45,21,-44}, -{45,21,-43}, -{45,21,-42}, -{45,21,-41}, -{45,21,-40}, -{45,21,-39}, -{45,21,-38}, -{45,21,-37}, -{45,21,-36}, -{45,21,-35}, -{45,21,-34}, -{45,21,-33}, -{45,21,-32}, -{45,21,-31}, -{45,21,-30}, -{45,21,-29}, -{45,21,-28}, -{45,21,-27}, -{45,21,-26}, -{45,21,-25}, -{45,21,-24}, -{45,21,-23}, -{45,21,-22}, -{45,21,-21}, -{45,21,-20}, -{45,21,-19}, -{45,21,-18}, -{45,21,-17}, -{45,21,-16}, -{45,21,-15}, -{45,21,-14}, -{45,21,-13}, -{45,21,-12}, -{45,21,-11}, -{45,21,-10}, -{45,21,-9}, -{45,21,-8}, -{45,21,-7}, -{45,21,-6}, -{45,21,-5}, -{45,21,-4}, -{45,21,-3}, -{45,21,-2}, -{45,21,-1}, -{45,21,0}, -{45,21,1}, -{45,21,2}, -{45,21,3}, -{45,21,4}, -{45,21,5}, -{45,21,6}, -{45,21,7}, -{45,21,8}, -{45,21,9}, -{45,21,10}, -{45,21,11}, -{45,21,12}, -{45,21,13}, -{45,21,14}, -{45,21,15}, -{45,21,16}, -{45,21,17}, -{45,21,18}, -{45,21,19}, -{45,21,20}, -{45,21,21}, -{45,21,22}, -{45,21,23}, -{45,21,24}, -{45,21,25}, -{45,21,26}, -{45,21,27}, -{45,21,28}, -{45,21,29}, -{45,21,30}, -{45,21,31}, -{45,21,32}, -{45,21,33}, -{45,21,34}, -{45,21,35}, -{45,21,36}, -{45,21,37}, -{45,21,38}, -{45,21,39}, -{45,21,40}, -{45,21,41}, -{45,21,42}, -{45,21,43}, -{45,21,44}, -{45,21,45}, -{45,21,46}, -{45,21,47}, -{45,21,48}, -{45,21,49}, -{45,21,50}, -{45,21,51}, -{45,21,52}, -{45,21,53}, -{45,22,-67}, -{45,22,-66}, -{45,22,-65}, -{45,22,-64}, -{45,22,-63}, -{45,22,-62}, -{45,22,-61}, -{45,22,-60}, -{45,22,-59}, -{45,22,-58}, -{45,22,-57}, -{45,22,-56}, -{45,22,-55}, -{45,22,-54}, -{45,22,-53}, -{45,22,-52}, -{45,22,-51}, -{45,22,-50}, -{45,22,-49}, -{45,22,-48}, -{45,22,-47}, -{45,22,-46}, -{45,22,-45}, -{45,22,-44}, -{45,22,-43}, -{45,22,-42}, -{45,22,-41}, -{45,22,-40}, -{45,22,-39}, -{45,22,-38}, -{45,22,-37}, -{45,22,-36}, -{45,22,-35}, -{45,22,-34}, -{45,22,-33}, -{45,22,-32}, -{45,22,-31}, -{45,22,-30}, -{45,22,-29}, -{45,22,-28}, -{45,22,-27}, -{45,22,-26}, -{45,22,-25}, -{45,22,-24}, -{45,22,-23}, -{45,22,-22}, -{45,22,-21}, -{45,22,-20}, -{45,22,-19}, -{45,22,-18}, -{45,22,-17}, -{45,22,-16}, -{45,22,-15}, -{45,22,-14}, -{45,22,-13}, -{45,22,-12}, -{45,22,-11}, -{45,22,-10}, -{45,22,-9}, -{45,22,-8}, -{45,22,-7}, -{45,22,-6}, -{45,22,-5}, -{45,22,-4}, -{45,22,-3}, -{45,22,-2}, -{45,22,-1}, -{45,22,0}, -{45,22,1}, -{45,22,2}, -{45,22,3}, -{45,22,4}, -{45,22,5}, -{45,22,6}, -{45,22,7}, -{45,22,8}, -{45,22,9}, -{45,22,10}, -{45,22,11}, -{45,22,12}, -{45,22,13}, -{45,22,14}, -{45,22,15}, -{45,22,16}, -{45,22,17}, -{45,22,18}, -{45,22,19}, -{45,22,20}, -{45,22,21}, -{45,22,22}, -{45,22,23}, -{45,22,24}, -{45,22,25}, -{45,22,26}, -{45,22,27}, -{45,22,28}, -{45,22,29}, -{45,22,30}, -{45,22,31}, -{45,22,32}, -{45,22,33}, -{45,22,34}, -{45,22,35}, -{45,22,36}, -{45,22,37}, -{45,22,38}, -{45,22,39}, -{45,22,40}, -{45,22,41}, -{45,22,42}, -{45,22,43}, -{45,22,44}, -{45,22,45}, -{45,22,46}, -{45,22,47}, -{45,22,48}, -{45,22,49}, -{45,22,50}, -{45,22,51}, -{45,22,52}, -{45,22,53}, -{45,23,-68}, -{45,23,-67}, -{45,23,-66}, -{45,23,-65}, -{45,23,-64}, -{45,23,-63}, -{45,23,-62}, -{45,23,-61}, -{45,23,-60}, -{45,23,-59}, -{45,23,-58}, -{45,23,-57}, -{45,23,-56}, -{45,23,-55}, -{45,23,-54}, -{45,23,-53}, -{45,23,-52}, -{45,23,-51}, -{45,23,-50}, -{45,23,-49}, -{45,23,-48}, -{45,23,-47}, -{45,23,-46}, -{45,23,-45}, -{45,23,-44}, -{45,23,-43}, -{45,23,-42}, -{45,23,-41}, -{45,23,-40}, -{45,23,-39}, -{45,23,-38}, -{45,23,-37}, -{45,23,-36}, -{45,23,-35}, -{45,23,-34}, -{45,23,-33}, -{45,23,-32}, -{45,23,-31}, -{45,23,-30}, -{45,23,-29}, -{45,23,-28}, -{45,23,-27}, -{45,23,-26}, -{45,23,-25}, -{45,23,-24}, -{45,23,-23}, -{45,23,-22}, -{45,23,-21}, -{45,23,-20}, -{45,23,-19}, -{45,23,-18}, -{45,23,-17}, -{45,23,-16}, -{45,23,-15}, -{45,23,-14}, -{45,23,-13}, -{45,23,-12}, -{45,23,-11}, -{45,23,-10}, -{45,23,-9}, -{45,23,-8}, -{45,23,-7}, -{45,23,-6}, -{45,23,-5}, -{45,23,-4}, -{45,23,-3}, -{45,23,-2}, -{45,23,-1}, -{45,23,0}, -{45,23,1}, -{45,23,2}, -{45,23,3}, -{45,23,4}, -{45,23,5}, -{45,23,6}, -{45,23,7}, -{45,23,8}, -{45,23,9}, -{45,23,10}, -{45,23,11}, -{45,23,12}, -{45,23,13}, -{45,23,14}, -{45,23,15}, -{45,23,16}, -{45,23,17}, -{45,23,18}, -{45,23,19}, -{45,23,20}, -{45,23,21}, -{45,23,22}, -{45,23,23}, -{45,23,24}, -{45,23,25}, -{45,23,26}, -{45,23,27}, -{45,23,28}, -{45,23,29}, -{45,23,30}, -{45,23,31}, -{45,23,32}, -{45,23,33}, -{45,23,34}, -{45,23,35}, -{45,23,36}, -{45,23,37}, -{45,23,38}, -{45,23,39}, -{45,23,40}, -{45,23,41}, -{45,23,42}, -{45,23,43}, -{45,23,44}, -{45,23,45}, -{45,23,46}, -{45,23,47}, -{45,23,48}, -{45,23,49}, -{45,23,50}, -{45,23,51}, -{45,23,52}, -{45,23,53}, -{45,24,-69}, -{45,24,-68}, -{45,24,-67}, -{45,24,-66}, -{45,24,-65}, -{45,24,-64}, -{45,24,-63}, -{45,24,-62}, -{45,24,-61}, -{45,24,-60}, -{45,24,-59}, -{45,24,-58}, -{45,24,-57}, -{45,24,-56}, -{45,24,-55}, -{45,24,-54}, -{45,24,-53}, -{45,24,-52}, -{45,24,-51}, -{45,24,-50}, -{45,24,-49}, -{45,24,-48}, -{45,24,-47}, -{45,24,-46}, -{45,24,-45}, -{45,24,-44}, -{45,24,-43}, -{45,24,-42}, -{45,24,-41}, -{45,24,-40}, -{45,24,-39}, -{45,24,-38}, -{45,24,-37}, -{45,24,-36}, -{45,24,-35}, -{45,24,-34}, -{45,24,-33}, -{45,24,-32}, -{45,24,-31}, -{45,24,-30}, -{45,24,-29}, -{45,24,-28}, -{45,24,-27}, -{45,24,-26}, -{45,24,-25}, -{45,24,-24}, -{45,24,-23}, -{45,24,-22}, -{45,24,-21}, -{45,24,-20}, -{45,24,-19}, -{45,24,-18}, -{45,24,-17}, -{45,24,-16}, -{45,24,-15}, -{45,24,-14}, -{45,24,-13}, -{45,24,-12}, -{45,24,-11}, -{45,24,-10}, -{45,24,-9}, -{45,24,-8}, -{45,24,-7}, -{45,24,-6}, -{45,24,-5}, -{45,24,-4}, -{45,24,-3}, -{45,24,-2}, -{45,24,-1}, -{45,24,0}, -{45,24,1}, -{45,24,2}, -{45,24,3}, -{45,24,4}, -{45,24,5}, -{45,24,6}, -{45,24,7}, -{45,24,8}, -{45,24,9}, -{45,24,10}, -{45,24,11}, -{45,24,12}, -{45,24,13}, -{45,24,14}, -{45,24,15}, -{45,24,16}, -{45,24,17}, -{45,24,18}, -{45,24,19}, -{45,24,20}, -{45,24,21}, -{45,24,22}, -{45,24,23}, -{45,24,24}, -{45,24,25}, -{45,24,26}, -{45,24,27}, -{45,24,28}, -{45,24,29}, -{45,24,30}, -{45,24,31}, -{45,24,32}, -{45,24,33}, -{45,24,34}, -{45,24,35}, -{45,24,36}, -{45,24,37}, -{45,24,38}, -{45,24,39}, -{45,24,40}, -{45,24,41}, -{45,24,42}, -{45,24,43}, -{45,24,44}, -{45,24,45}, -{45,24,46}, -{45,24,47}, -{45,24,48}, -{45,24,49}, -{45,24,50}, -{45,24,51}, -{45,24,52}, -{45,24,53}, -{45,25,-70}, -{45,25,-69}, -{45,25,-68}, -{45,25,-67}, -{45,25,-66}, -{45,25,-65}, -{45,25,-64}, -{45,25,-63}, -{45,25,-62}, -{45,25,-61}, -{45,25,-60}, -{45,25,-59}, -{45,25,-58}, -{45,25,-57}, -{45,25,-56}, -{45,25,-55}, -{45,25,-54}, -{45,25,-53}, -{45,25,-52}, -{45,25,-51}, -{45,25,-50}, -{45,25,-49}, -{45,25,-48}, -{45,25,-47}, -{45,25,-46}, -{45,25,-45}, -{45,25,-44}, -{45,25,-43}, -{45,25,-42}, -{45,25,-41}, -{45,25,-40}, -{45,25,-39}, -{45,25,-38}, -{45,25,-37}, -{45,25,-36}, -{45,25,-35}, -{45,25,-34}, -{45,25,-33}, -{45,25,-32}, -{45,25,-31}, -{45,25,-30}, -{45,25,-29}, -{45,25,-28}, -{45,25,-27}, -{45,25,-26}, -{45,25,-25}, -{45,25,-24}, -{45,25,-23}, -{45,25,-22}, -{45,25,-21}, -{45,25,-20}, -{45,25,-19}, -{45,25,-18}, -{45,25,-17}, -{45,25,-16}, -{45,25,-15}, -{45,25,-14}, -{45,25,-13}, -{45,25,-12}, -{45,25,-11}, -{45,25,-10}, -{45,25,-9}, -{45,25,-8}, -{45,25,-7}, -{45,25,-6}, -{45,25,-5}, -{45,25,-4}, -{45,25,-3}, -{45,25,-2}, -{45,25,-1}, -{45,25,0}, -{45,25,1}, -{45,25,2}, -{45,25,3}, -{45,25,4}, -{45,25,5}, -{45,25,6}, -{45,25,7}, -{45,25,8}, -{45,25,9}, -{45,25,10}, -{45,25,11}, -{45,25,12}, -{45,25,13}, -{45,25,14}, -{45,25,15}, -{45,25,16}, -{45,25,17}, -{45,25,18}, -{45,25,19}, -{45,25,20}, -{45,25,21}, -{45,25,22}, -{45,25,23}, -{45,25,24}, -{45,25,25}, -{45,25,26}, -{45,25,27}, -{45,25,28}, -{45,25,29}, -{45,25,30}, -{45,25,31}, -{45,25,32}, -{45,25,33}, -{45,25,34}, -{45,25,35}, -{45,25,36}, -{45,25,37}, -{45,25,38}, -{45,25,39}, -{45,25,40}, -{45,25,41}, -{45,25,42}, -{45,25,43}, -{45,25,44}, -{45,25,45}, -{45,25,46}, -{45,25,47}, -{45,25,48}, -{45,25,49}, -{45,25,50}, -{45,25,51}, -{45,25,52}, -{45,25,53}, -{45,26,-71}, -{45,26,-70}, -{45,26,-69}, -{45,26,-68}, -{45,26,-67}, -{45,26,-66}, -{45,26,-65}, -{45,26,-64}, -{45,26,-63}, -{45,26,-62}, -{45,26,-61}, -{45,26,-60}, -{45,26,-59}, -{45,26,-58}, -{45,26,-57}, -{45,26,-56}, -{45,26,-55}, -{45,26,-54}, -{45,26,-53}, -{45,26,-52}, -{45,26,-51}, -{45,26,-50}, -{45,26,-49}, -{45,26,-48}, -{45,26,-47}, -{45,26,-46}, -{45,26,-45}, -{45,26,-44}, -{45,26,-43}, -{45,26,-42}, -{45,26,-41}, -{45,26,-40}, -{45,26,-39}, -{45,26,-38}, -{45,26,-37}, -{45,26,-36}, -{45,26,-35}, -{45,26,-34}, -{45,26,-33}, -{45,26,-32}, -{45,26,-31}, -{45,26,-30}, -{45,26,-29}, -{45,26,-28}, -{45,26,-27}, -{45,26,-26}, -{45,26,-25}, -{45,26,-24}, -{45,26,-23}, -{45,26,-22}, -{45,26,-21}, -{45,26,-20}, -{45,26,-19}, -{45,26,-18}, -{45,26,-17}, -{45,26,-16}, -{45,26,-15}, -{45,26,-14}, -{45,26,-13}, -{45,26,-12}, -{45,26,-11}, -{45,26,-10}, -{45,26,-9}, -{45,26,-8}, -{45,26,-7}, -{45,26,-6}, -{45,26,-5}, -{45,26,-4}, -{45,26,-3}, -{45,26,-2}, -{45,26,-1}, -{45,26,0}, -{45,26,1}, -{45,26,2}, -{45,26,3}, -{45,26,4}, -{45,26,5}, -{45,26,6}, -{45,26,7}, -{45,26,8}, -{45,26,9}, -{45,26,10}, -{45,26,11}, -{45,26,12}, -{45,26,13}, -{45,26,14}, -{45,26,15}, -{45,26,16}, -{45,26,17}, -{45,26,18}, -{45,26,19}, -{45,26,20}, -{45,26,21}, -{45,26,22}, -{45,26,23}, -{45,26,24}, -{45,26,25}, -{45,26,26}, -{45,26,27}, -{45,26,28}, -{45,26,29}, -{45,26,30}, -{45,26,31}, -{45,26,32}, -{45,26,33}, -{45,26,34}, -{45,26,35}, -{45,26,36}, -{45,26,37}, -{45,26,38}, -{45,26,39}, -{45,26,40}, -{45,26,41}, -{45,26,42}, -{45,26,43}, -{45,26,44}, -{45,26,45}, -{45,26,46}, -{45,26,47}, -{45,26,48}, -{45,26,49}, -{45,26,50}, -{45,26,51}, -{45,26,52}, -{45,26,53}, -{45,26,54}, -{45,27,-72}, -{45,27,-71}, -{45,27,-70}, -{45,27,-69}, -{45,27,-68}, -{45,27,-67}, -{45,27,-66}, -{45,27,-65}, -{45,27,-64}, -{45,27,-63}, -{45,27,-62}, -{45,27,-61}, -{45,27,-60}, -{45,27,-59}, -{45,27,-58}, -{45,27,-57}, -{45,27,-56}, -{45,27,-55}, -{45,27,-54}, -{45,27,-53}, -{45,27,-52}, -{45,27,-51}, -{45,27,-50}, -{45,27,-49}, -{45,27,-48}, -{45,27,-47}, -{45,27,-46}, -{45,27,-45}, -{45,27,-44}, -{45,27,-43}, -{45,27,-42}, -{45,27,-41}, -{45,27,-40}, -{45,27,-39}, -{45,27,-38}, -{45,27,-37}, -{45,27,-36}, -{45,27,-35}, -{45,27,-34}, -{45,27,-33}, -{45,27,-32}, -{45,27,-31}, -{45,27,-30}, -{45,27,-29}, -{45,27,-28}, -{45,27,-27}, -{45,27,-26}, -{45,27,-25}, -{45,27,-24}, -{45,27,-23}, -{45,27,-22}, -{45,27,-21}, -{45,27,-20}, -{45,27,-19}, -{45,27,-18}, -{45,27,-17}, -{45,27,-16}, -{45,27,-15}, -{45,27,-14}, -{45,27,-13}, -{45,27,-12}, -{45,27,-11}, -{45,27,-10}, -{45,27,-9}, -{45,27,-8}, -{45,27,-7}, -{45,27,-6}, -{45,27,-5}, -{45,27,-4}, -{45,27,-3}, -{45,27,-2}, -{45,27,-1}, -{45,27,0}, -{45,27,1}, -{45,27,2}, -{45,27,3}, -{45,27,4}, -{45,27,5}, -{45,27,6}, -{45,27,7}, -{45,27,8}, -{45,27,9}, -{45,27,10}, -{45,27,11}, -{45,27,12}, -{45,27,13}, -{45,27,14}, -{45,27,15}, -{45,27,16}, -{45,27,17}, -{45,27,18}, -{45,27,19}, -{45,27,20}, -{45,27,21}, -{45,27,22}, -{45,27,23}, -{45,27,24}, -{45,27,25}, -{45,27,26}, -{45,27,27}, -{45,27,28}, -{45,27,29}, -{45,27,30}, -{45,27,31}, -{45,27,32}, -{45,27,33}, -{45,27,34}, -{45,27,35}, -{45,27,36}, -{45,27,37}, -{45,27,38}, -{45,27,39}, -{45,27,40}, -{45,27,41}, -{45,27,42}, -{45,27,43}, -{45,27,44}, -{45,27,45}, -{45,27,46}, -{45,27,47}, -{45,27,48}, -{45,27,49}, -{45,27,50}, -{45,27,51}, -{45,27,52}, -{45,27,53}, -{45,27,54}, -{45,28,-73}, -{45,28,-72}, -{45,28,-71}, -{45,28,-70}, -{45,28,-69}, -{45,28,-68}, -{45,28,-67}, -{45,28,-66}, -{45,28,-65}, -{45,28,-64}, -{45,28,-63}, -{45,28,-62}, -{45,28,-61}, -{45,28,-60}, -{45,28,-59}, -{45,28,-58}, -{45,28,-57}, -{45,28,-56}, -{45,28,-55}, -{45,28,-54}, -{45,28,-53}, -{45,28,-52}, -{45,28,-51}, -{45,28,-50}, -{45,28,-49}, -{45,28,-48}, -{45,28,-47}, -{45,28,-46}, -{45,28,-45}, -{45,28,-44}, -{45,28,-43}, -{45,28,-42}, -{45,28,-41}, -{45,28,-40}, -{45,28,-39}, -{45,28,-38}, -{45,28,-37}, -{45,28,-36}, -{45,28,-35}, -{45,28,-34}, -{45,28,-33}, -{45,28,-32}, -{45,28,-31}, -{45,28,-30}, -{45,28,-29}, -{45,28,-28}, -{45,28,-27}, -{45,28,-26}, -{45,28,-25}, -{45,28,-24}, -{45,28,-23}, -{45,28,-22}, -{45,28,-21}, -{45,28,-20}, -{45,28,-19}, -{45,28,-18}, -{45,28,-17}, -{45,28,-16}, -{45,28,-15}, -{45,28,-14}, -{45,28,-13}, -{45,28,-12}, -{45,28,-11}, -{45,28,-10}, -{45,28,-9}, -{45,28,-8}, -{45,28,-7}, -{45,28,-6}, -{45,28,-5}, -{45,28,-4}, -{45,28,-3}, -{45,28,-2}, -{45,28,-1}, -{45,28,0}, -{45,28,1}, -{45,28,2}, -{45,28,3}, -{45,28,4}, -{45,28,5}, -{45,28,6}, -{45,28,7}, -{45,28,8}, -{45,28,9}, -{45,28,10}, -{45,28,11}, -{45,28,12}, -{45,28,13}, -{45,28,14}, -{45,28,15}, -{45,28,16}, -{45,28,17}, -{45,28,18}, -{45,28,19}, -{45,28,20}, -{45,28,21}, -{45,28,22}, -{45,28,23}, -{45,28,24}, -{45,28,25}, -{45,28,26}, -{45,28,27}, -{45,28,28}, -{45,28,29}, -{45,28,30}, -{45,28,31}, -{45,28,32}, -{45,28,33}, -{45,28,34}, -{45,28,35}, -{45,28,36}, -{45,28,37}, -{45,28,38}, -{45,28,39}, -{45,28,40}, -{45,28,41}, -{45,28,42}, -{45,28,43}, -{45,28,44}, -{45,28,45}, -{45,28,46}, -{45,28,47}, -{45,28,48}, -{45,28,49}, -{45,28,50}, -{45,28,51}, -{45,28,52}, -{45,28,53}, -{45,28,54}, -{45,29,-74}, -{45,29,-73}, -{45,29,-72}, -{45,29,-71}, -{45,29,-70}, -{45,29,-69}, -{45,29,-68}, -{45,29,-67}, -{45,29,-66}, -{45,29,-65}, -{45,29,-64}, -{45,29,-63}, -{45,29,-62}, -{45,29,-61}, -{45,29,-60}, -{45,29,-59}, -{45,29,-58}, -{45,29,-57}, -{45,29,-56}, -{45,29,-55}, -{45,29,-54}, -{45,29,-53}, -{45,29,-52}, -{45,29,-51}, -{45,29,-50}, -{45,29,-49}, -{45,29,-48}, -{45,29,-47}, -{45,29,-46}, -{45,29,-45}, -{45,29,-44}, -{45,29,-43}, -{45,29,-42}, -{45,29,-41}, -{45,29,-40}, -{45,29,-39}, -{45,29,-38}, -{45,29,-37}, -{45,29,-36}, -{45,29,-35}, -{45,29,-34}, -{45,29,-33}, -{45,29,-32}, -{45,29,-31}, -{45,29,-30}, -{45,29,-29}, -{45,29,-28}, -{45,29,-27}, -{45,29,-26}, -{45,29,-25}, -{45,29,-24}, -{45,29,-23}, -{45,29,-22}, -{45,29,-21}, -{45,29,-20}, -{45,29,-19}, -{45,29,-18}, -{45,29,-17}, -{45,29,-16}, -{45,29,-15}, -{45,29,-14}, -{45,29,-13}, -{45,29,-12}, -{45,29,-11}, -{45,29,-10}, -{45,29,-9}, -{45,29,-8}, -{45,29,-7}, -{45,29,-6}, -{45,29,-5}, -{45,29,-4}, -{45,29,-3}, -{45,29,-2}, -{45,29,-1}, -{45,29,0}, -{45,29,1}, -{45,29,2}, -{45,29,3}, -{45,29,4}, -{45,29,5}, -{45,29,6}, -{45,29,7}, -{45,29,8}, -{45,29,9}, -{45,29,10}, -{45,29,11}, -{45,29,12}, -{45,29,13}, -{45,29,14}, -{45,29,15}, -{45,29,16}, -{45,29,17}, -{45,29,18}, -{45,29,19}, -{45,29,20}, -{45,29,21}, -{45,29,22}, -{45,29,23}, -{45,29,24}, -{45,29,25}, -{45,29,26}, -{45,29,27}, -{45,29,28}, -{45,29,29}, -{45,29,30}, -{45,29,31}, -{45,29,32}, -{45,29,33}, -{45,29,34}, -{45,29,35}, -{45,29,36}, -{45,29,37}, -{45,29,38}, -{45,29,39}, -{45,29,40}, -{45,29,41}, -{45,29,42}, -{45,29,43}, -{45,29,44}, -{45,29,45}, -{45,29,46}, -{45,29,47}, -{45,29,48}, -{45,29,49}, -{45,29,50}, -{45,29,51}, -{45,29,52}, -{45,29,53}, -{45,29,54}, -{45,30,-75}, -{45,30,-74}, -{45,30,-73}, -{45,30,-72}, -{45,30,-71}, -{45,30,-70}, -{45,30,-69}, -{45,30,-68}, -{45,30,-67}, -{45,30,-66}, -{45,30,-65}, -{45,30,-64}, -{45,30,-63}, -{45,30,-62}, -{45,30,-61}, -{45,30,-60}, -{45,30,-59}, -{45,30,-58}, -{45,30,-57}, -{45,30,-56}, -{45,30,-55}, -{45,30,-54}, -{45,30,-53}, -{45,30,-52}, -{45,30,-51}, -{45,30,-50}, -{45,30,-49}, -{45,30,-48}, -{45,30,-47}, -{45,30,-46}, -{45,30,-45}, -{45,30,-44}, -{45,30,-43}, -{45,30,-42}, -{45,30,-41}, -{45,30,-40}, -{45,30,-39}, -{45,30,-38}, -{45,30,-37}, -{45,30,-36}, -{45,30,-35}, -{45,30,-34}, -{45,30,-33}, -{45,30,-32}, -{45,30,-31}, -{45,30,-30}, -{45,30,-29}, -{45,30,-28}, -{45,30,-27}, -{45,30,-26}, -{45,30,-25}, -{45,30,-24}, -{45,30,-23}, -{45,30,-22}, -{45,30,-21}, -{45,30,-20}, -{45,30,-19}, -{45,30,-18}, -{45,30,-17}, -{45,30,-16}, -{45,30,-15}, -{45,30,-14}, -{45,30,-13}, -{45,30,-12}, -{45,30,-11}, -{45,30,-10}, -{45,30,-9}, -{45,30,-8}, -{45,30,-7}, -{45,30,-6}, -{45,30,-5}, -{45,30,-4}, -{45,30,-3}, -{45,30,-2}, -{45,30,-1}, -{45,30,0}, -{45,30,1}, -{45,30,2}, -{45,30,3}, -{45,30,4}, -{45,30,5}, -{45,30,6}, -{45,30,7}, -{45,30,8}, -{45,30,9}, -{45,30,10}, -{45,30,11}, -{45,30,12}, -{45,30,13}, -{45,30,14}, -{45,30,15}, -{45,30,16}, -{45,30,17}, -{45,30,18}, -{45,30,19}, -{45,30,20}, -{45,30,21}, -{45,30,22}, -{45,30,23}, -{45,30,24}, -{45,30,25}, -{45,30,26}, -{45,30,27}, -{45,30,28}, -{45,30,29}, -{45,30,30}, -{45,30,31}, -{45,30,32}, -{45,30,33}, -{45,30,34}, -{45,30,35}, -{45,30,36}, -{45,30,37}, -{45,30,38}, -{45,30,39}, -{45,30,40}, -{45,30,41}, -{45,30,42}, -{45,30,43}, -{45,30,44}, -{45,30,45}, -{45,30,46}, -{45,30,47}, -{45,30,48}, -{45,30,49}, -{45,30,50}, -{45,30,51}, -{45,30,52}, -{45,30,53}, -{45,30,54}, -{45,31,-75}, -{45,31,-74}, -{45,31,-73}, -{45,31,-72}, -{45,31,-71}, -{45,31,-70}, -{45,31,-69}, -{45,31,-68}, -{45,31,-67}, -{45,31,-66}, -{45,31,-65}, -{45,31,-64}, -{45,31,-63}, -{45,31,-62}, -{45,31,-61}, -{45,31,-60}, -{45,31,-59}, -{45,31,-58}, -{45,31,-57}, -{45,31,-56}, -{45,31,-55}, -{45,31,-54}, -{45,31,-53}, -{45,31,-52}, -{45,31,-51}, -{45,31,-50}, -{45,31,-49}, -{45,31,-48}, -{45,31,-47}, -{45,31,-46}, -{45,31,-45}, -{45,31,-44}, -{45,31,-43}, -{45,31,-42}, -{45,31,-41}, -{45,31,-40}, -{45,31,-39}, -{45,31,-38}, -{45,31,-37}, -{45,31,-36}, -{45,31,-35}, -{45,31,-34}, -{45,31,-33}, -{45,31,-32}, -{45,31,-31}, -{45,31,-30}, -{45,31,-29}, -{45,31,-28}, -{45,31,-27}, -{45,31,-26}, -{45,31,-25}, -{45,31,-24}, -{45,31,-23}, -{45,31,-22}, -{45,31,-21}, -{45,31,-20}, -{45,31,-19}, -{45,31,-18}, -{45,31,-17}, -{45,31,-16}, -{45,31,-15}, -{45,31,-14}, -{45,31,-13}, -{45,31,-12}, -{45,31,-11}, -{45,31,-10}, -{45,31,-9}, -{45,31,-8}, -{45,31,-7}, -{45,31,-6}, -{45,31,-5}, -{45,31,-4}, -{45,31,-3}, -{45,31,-2}, -{45,31,-1}, -{45,31,0}, -{45,31,1}, -{45,31,2}, -{45,31,3}, -{45,31,4}, -{45,31,5}, -{45,31,6}, -{45,31,7}, -{45,31,8}, -{45,31,9}, -{45,31,10}, -{45,31,11}, -{45,31,12}, -{45,31,13}, -{45,31,14}, -{45,31,15}, -{45,31,16}, -{45,31,17}, -{45,31,18}, -{45,31,19}, -{45,31,20}, -{45,31,21}, -{45,31,22}, -{45,31,23}, -{45,31,24}, -{45,31,25}, -{45,31,26}, -{45,31,27}, -{45,31,28}, -{45,31,29}, -{45,31,30}, -{45,31,31}, -{45,31,32}, -{45,31,33}, -{45,31,34}, -{45,31,35}, -{45,31,36}, -{45,31,37}, -{45,31,38}, -{45,31,39}, -{45,31,40}, -{45,31,41}, -{45,31,42}, -{45,31,43}, -{45,31,44}, -{45,31,45}, -{45,31,46}, -{45,31,47}, -{45,31,48}, -{45,31,49}, -{45,31,50}, -{45,31,51}, -{45,31,52}, -{45,31,53}, -{45,31,54}, -{45,32,-76}, -{45,32,-75}, -{45,32,-74}, -{45,32,-73}, -{45,32,-72}, -{45,32,-71}, -{45,32,-70}, -{45,32,-69}, -{45,32,-68}, -{45,32,-67}, -{45,32,-66}, -{45,32,-65}, -{45,32,-64}, -{45,32,-63}, -{45,32,-62}, -{45,32,-61}, -{45,32,-60}, -{45,32,-59}, -{45,32,-58}, -{45,32,-57}, -{45,32,-56}, -{45,32,-55}, -{45,32,-54}, -{45,32,-53}, -{45,32,-52}, -{45,32,-51}, -{45,32,-50}, -{45,32,-49}, -{45,32,-48}, -{45,32,-47}, -{45,32,-46}, -{45,32,-45}, -{45,32,-44}, -{45,32,-43}, -{45,32,-42}, -{45,32,-41}, -{45,32,-40}, -{45,32,-39}, -{45,32,-38}, -{45,32,-37}, -{45,32,-36}, -{45,32,-35}, -{45,32,-34}, -{45,32,-33}, -{45,32,-32}, -{45,32,-31}, -{45,32,-30}, -{45,32,-29}, -{45,32,-28}, -{45,32,-27}, -{45,32,-26}, -{45,32,-25}, -{45,32,-24}, -{45,32,-23}, -{45,32,-22}, -{45,32,-21}, -{45,32,-20}, -{45,32,-19}, -{45,32,-18}, -{45,32,-17}, -{45,32,-16}, -{45,32,-15}, -{45,32,-14}, -{45,32,-13}, -{45,32,-12}, -{45,32,-11}, -{45,32,-10}, -{45,32,-9}, -{45,32,-8}, -{45,32,-7}, -{45,32,-6}, -{45,32,-5}, -{45,32,-4}, -{45,32,-3}, -{45,32,-2}, -{45,32,-1}, -{45,32,0}, -{45,32,1}, -{45,32,2}, -{45,32,3}, -{45,32,4}, -{45,32,5}, -{45,32,6}, -{45,32,7}, -{45,32,8}, -{45,32,9}, -{45,32,10}, -{45,32,11}, -{45,32,12}, -{45,32,13}, -{45,32,14}, -{45,32,15}, -{45,32,16}, -{45,32,17}, -{45,32,18}, -{45,32,19}, -{45,32,20}, -{45,32,21}, -{45,32,22}, -{45,32,23}, -{45,32,24}, -{45,32,25}, -{45,32,26}, -{45,32,27}, -{45,32,28}, -{45,32,29}, -{45,32,30}, -{45,32,31}, -{45,32,32}, -{45,32,33}, -{45,32,34}, -{45,32,35}, -{45,32,36}, -{45,32,37}, -{45,32,38}, -{45,32,39}, -{45,32,40}, -{45,32,41}, -{45,32,42}, -{45,32,43}, -{45,32,44}, -{45,32,45}, -{45,32,46}, -{45,32,47}, -{45,32,48}, -{45,32,49}, -{45,32,50}, -{45,32,51}, -{45,32,52}, -{45,32,53}, -{45,32,54}, -{45,33,-77}, -{45,33,-76}, -{45,33,-75}, -{45,33,-74}, -{45,33,-73}, -{45,33,-72}, -{45,33,-71}, -{45,33,-70}, -{45,33,-69}, -{45,33,-68}, -{45,33,-67}, -{45,33,-66}, -{45,33,-65}, -{45,33,-64}, -{45,33,-63}, -{45,33,-62}, -{45,33,-61}, -{45,33,-60}, -{45,33,-59}, -{45,33,-58}, -{45,33,-57}, -{45,33,-56}, -{45,33,-55}, -{45,33,-54}, -{45,33,-53}, -{45,33,-52}, -{45,33,-51}, -{45,33,-50}, -{45,33,-49}, -{45,33,-48}, -{45,33,-47}, -{45,33,-46}, -{45,33,-45}, -{45,33,-44}, -{45,33,-43}, -{45,33,-42}, -{45,33,-41}, -{45,33,-40}, -{45,33,-39}, -{45,33,-38}, -{45,33,-37}, -{45,33,-36}, -{45,33,-35}, -{45,33,-34}, -{45,33,-33}, -{45,33,-32}, -{45,33,-31}, -{45,33,-30}, -{45,33,-29}, -{45,33,-28}, -{45,33,-27}, -{45,33,-26}, -{45,33,-25}, -{45,33,-24}, -{45,33,-23}, -{45,33,-22}, -{45,33,-21}, -{45,33,-20}, -{45,33,-19}, -{45,33,-18}, -{45,33,-17}, -{45,33,-16}, -{45,33,-15}, -{45,33,-14}, -{45,33,-13}, -{45,33,-12}, -{45,33,-11}, -{45,33,-10}, -{45,33,-9}, -{45,33,-8}, -{45,33,-7}, -{45,33,-6}, -{45,33,-5}, -{45,33,-4}, -{45,33,-3}, -{45,33,-2}, -{45,33,-1}, -{45,33,0}, -{45,33,1}, -{45,33,2}, -{45,33,3}, -{45,33,4}, -{45,33,5}, -{45,33,6}, -{45,33,7}, -{45,33,8}, -{45,33,9}, -{45,33,10}, -{45,33,11}, -{45,33,12}, -{45,33,13}, -{45,33,14}, -{45,33,15}, -{45,33,16}, -{45,33,17}, -{45,33,18}, -{45,33,19}, -{45,33,20}, -{45,33,21}, -{45,33,22}, -{45,33,23}, -{45,33,24}, -{45,33,25}, -{45,33,26}, -{45,33,27}, -{45,33,28}, -{45,33,29}, -{45,33,30}, -{45,33,31}, -{45,33,32}, -{45,33,33}, -{45,33,34}, -{45,33,35}, -{45,33,36}, -{45,33,37}, -{45,33,38}, -{45,33,39}, -{45,33,40}, -{45,33,41}, -{45,33,42}, -{45,33,43}, -{45,33,44}, -{45,33,45}, -{45,33,46}, -{45,33,47}, -{45,33,48}, -{45,33,49}, -{45,33,50}, -{45,33,51}, -{45,33,52}, -{45,33,53}, -{45,33,54}, -{45,34,-78}, -{45,34,-77}, -{45,34,-76}, -{45,34,-75}, -{45,34,-74}, -{45,34,-73}, -{45,34,-72}, -{45,34,-71}, -{45,34,-70}, -{45,34,-69}, -{45,34,-68}, -{45,34,-67}, -{45,34,-66}, -{45,34,-65}, -{45,34,-64}, -{45,34,-63}, -{45,34,-62}, -{45,34,-61}, -{45,34,-60}, -{45,34,-59}, -{45,34,-58}, -{45,34,-57}, -{45,34,-56}, -{45,34,-55}, -{45,34,-54}, -{45,34,-53}, -{45,34,-52}, -{45,34,-51}, -{45,34,-50}, -{45,34,-49}, -{45,34,-48}, -{45,34,-47}, -{45,34,-46}, -{45,34,-45}, -{45,34,-44}, -{45,34,-43}, -{45,34,-42}, -{45,34,-41}, -{45,34,-40}, -{45,34,-39}, -{45,34,-38}, -{45,34,-37}, -{45,34,-36}, -{45,34,-35}, -{45,34,-34}, -{45,34,-33}, -{45,34,-32}, -{45,34,-31}, -{45,34,-30}, -{45,34,-29}, -{45,34,-28}, -{45,34,-27}, -{45,34,-26}, -{45,34,-25}, -{45,34,-24}, -{45,34,-23}, -{45,34,-22}, -{45,34,-21}, -{45,34,-20}, -{45,34,-19}, -{45,34,-18}, -{45,34,-17}, -{45,34,-16}, -{45,34,-15}, -{45,34,-14}, -{45,34,-13}, -{45,34,-12}, -{45,34,-11}, -{45,34,-10}, -{45,34,-9}, -{45,34,-8}, -{45,34,-7}, -{45,34,-6}, -{45,34,-5}, -{45,34,-4}, -{45,34,-3}, -{45,34,-2}, -{45,34,-1}, -{45,34,0}, -{45,34,1}, -{45,34,2}, -{45,34,3}, -{45,34,4}, -{45,34,5}, -{45,34,6}, -{45,34,7}, -{45,34,8}, -{45,34,9}, -{45,34,10}, -{45,34,11}, -{45,34,12}, -{45,34,13}, -{45,34,14}, -{45,34,15}, -{45,34,16}, -{45,34,17}, -{45,34,18}, -{45,34,19}, -{45,34,20}, -{45,34,21}, -{45,34,22}, -{45,34,23}, -{45,34,24}, -{45,34,25}, -{45,34,26}, -{45,34,27}, -{45,34,28}, -{45,34,29}, -{45,34,30}, -{45,34,31}, -{45,34,32}, -{45,34,33}, -{45,34,34}, -{45,34,35}, -{45,34,36}, -{45,34,37}, -{45,34,38}, -{45,34,39}, -{45,34,40}, -{45,34,41}, -{45,34,42}, -{45,34,43}, -{45,34,44}, -{45,34,45}, -{45,34,46}, -{45,34,47}, -{45,34,48}, -{45,34,49}, -{45,34,50}, -{45,34,51}, -{45,34,52}, -{45,34,53}, -{45,34,54}, -{45,35,-79}, -{45,35,-78}, -{45,35,-77}, -{45,35,-76}, -{45,35,-75}, -{45,35,-74}, -{45,35,-73}, -{45,35,-72}, -{45,35,-71}, -{45,35,-70}, -{45,35,-69}, -{45,35,-68}, -{45,35,-67}, -{45,35,-66}, -{45,35,-65}, -{45,35,-64}, -{45,35,-63}, -{45,35,-62}, -{45,35,-61}, -{45,35,-60}, -{45,35,-59}, -{45,35,-58}, -{45,35,-57}, -{45,35,-56}, -{45,35,-55}, -{45,35,-54}, -{45,35,-53}, -{45,35,-52}, -{45,35,-51}, -{45,35,-50}, -{45,35,-49}, -{45,35,-48}, -{45,35,-47}, -{45,35,-46}, -{45,35,-45}, -{45,35,-44}, -{45,35,-43}, -{45,35,-42}, -{45,35,-41}, -{45,35,-40}, -{45,35,-39}, -{45,35,-38}, -{45,35,-37}, -{45,35,-36}, -{45,35,-35}, -{45,35,-34}, -{45,35,-33}, -{45,35,-32}, -{45,35,-31}, -{45,35,-30}, -{45,35,-29}, -{45,35,-28}, -{45,35,-27}, -{45,35,-26}, -{45,35,-25}, -{45,35,-24}, -{45,35,-23}, -{45,35,-22}, -{45,35,-21}, -{45,35,-20}, -{45,35,-19}, -{45,35,-18}, -{45,35,-17}, -{45,35,-16}, -{45,35,-15}, -{45,35,-14}, -{45,35,-13}, -{45,35,-12}, -{45,35,-11}, -{45,35,-10}, -{45,35,-9}, -{45,35,-8}, -{45,35,-7}, -{45,35,-6}, -{45,35,-5}, -{45,35,-4}, -{45,35,-3}, -{45,35,-2}, -{45,35,-1}, -{45,35,0}, -{45,35,1}, -{45,35,2}, -{45,35,3}, -{45,35,4}, -{45,35,5}, -{45,35,6}, -{45,35,7}, -{45,35,8}, -{45,35,9}, -{45,35,10}, -{45,35,11}, -{45,35,12}, -{45,35,13}, -{45,35,14}, -{45,35,15}, -{45,35,16}, -{45,35,17}, -{45,35,18}, -{45,35,19}, -{45,35,20}, -{45,35,21}, -{45,35,22}, -{45,35,23}, -{45,35,24}, -{45,35,25}, -{45,35,26}, -{45,35,27}, -{45,35,28}, -{45,35,29}, -{45,35,30}, -{45,35,31}, -{45,35,32}, -{45,35,33}, -{45,35,34}, -{45,35,35}, -{45,35,36}, -{45,35,37}, -{45,35,38}, -{45,35,39}, -{45,35,40}, -{45,35,41}, -{45,35,42}, -{45,35,43}, -{45,35,44}, -{45,35,45}, -{45,35,46}, -{45,35,47}, -{45,35,48}, -{45,35,49}, -{45,35,50}, -{45,35,51}, -{45,35,52}, -{45,35,53}, -{45,35,54}, -{45,36,-80}, -{45,36,-79}, -{45,36,-78}, -{45,36,-77}, -{45,36,-76}, -{45,36,-75}, -{45,36,-74}, -{45,36,-73}, -{45,36,-72}, -{45,36,-71}, -{45,36,-70}, -{45,36,-69}, -{45,36,-68}, -{45,36,-67}, -{45,36,-66}, -{45,36,-65}, -{45,36,-64}, -{45,36,-63}, -{45,36,-62}, -{45,36,-61}, -{45,36,-60}, -{45,36,-59}, -{45,36,-58}, -{45,36,-57}, -{45,36,-56}, -{45,36,-55}, -{45,36,-54}, -{45,36,-53}, -{45,36,-52}, -{45,36,-51}, -{45,36,-50}, -{45,36,-49}, -{45,36,-48}, -{45,36,-47}, -{45,36,-46}, -{45,36,-45}, -{45,36,-44}, -{45,36,-43}, -{45,36,-42}, -{45,36,-41}, -{45,36,-40}, -{45,36,-39}, -{45,36,-38}, -{45,36,-37}, -{45,36,-36}, -{45,36,-35}, -{45,36,-34}, -{45,36,-33}, -{45,36,-32}, -{45,36,-31}, -{45,36,-30}, -{45,36,-29}, -{45,36,-28}, -{45,36,-27}, -{45,36,-26}, -{45,36,-25}, -{45,36,-24}, -{45,36,-23}, -{45,36,-22}, -{45,36,-21}, -{45,36,-20}, -{45,36,-19}, -{45,36,-18}, -{45,36,-17}, -{45,36,-16}, -{45,36,-15}, -{45,36,-14}, -{45,36,-13}, -{45,36,-12}, -{45,36,-11}, -{45,36,-10}, -{45,36,-9}, -{45,36,-8}, -{45,36,-7}, -{45,36,-6}, -{45,36,-5}, -{45,36,-4}, -{45,36,-3}, -{45,36,-2}, -{45,36,-1}, -{45,36,0}, -{45,36,1}, -{45,36,2}, -{45,36,3}, -{45,36,4}, -{45,36,5}, -{45,36,6}, -{45,36,7}, -{45,36,8}, -{45,36,9}, -{45,36,10}, -{45,36,11}, -{45,36,12}, -{45,36,13}, -{45,36,14}, -{45,36,15}, -{45,36,16}, -{45,36,17}, -{45,36,18}, -{45,36,19}, -{45,36,20}, -{45,36,21}, -{45,36,22}, -{45,36,23}, -{45,36,24}, -{45,36,25}, -{45,36,26}, -{45,36,27}, -{45,36,28}, -{45,36,29}, -{45,36,30}, -{45,36,31}, -{45,36,32}, -{45,36,33}, -{45,36,34}, -{45,36,35}, -{45,36,36}, -{45,36,37}, -{45,36,38}, -{45,36,39}, -{45,36,40}, -{45,36,41}, -{45,36,42}, -{45,36,43}, -{45,36,44}, -{45,36,45}, -{45,36,46}, -{45,36,47}, -{45,36,48}, -{45,36,49}, -{45,36,50}, -{45,36,51}, -{45,36,52}, -{45,36,53}, -{45,36,54}, -{45,36,55}, -{45,37,-81}, -{45,37,-80}, -{45,37,-79}, -{45,37,-78}, -{45,37,-77}, -{45,37,-76}, -{45,37,-75}, -{45,37,-74}, -{45,37,-73}, -{45,37,-72}, -{45,37,-71}, -{45,37,-70}, -{45,37,-69}, -{45,37,-68}, -{45,37,-67}, -{45,37,-66}, -{45,37,-65}, -{45,37,-64}, -{45,37,-63}, -{45,37,-62}, -{45,37,-61}, -{45,37,-60}, -{45,37,-59}, -{45,37,-58}, -{45,37,-57}, -{45,37,-56}, -{45,37,-55}, -{45,37,-54}, -{45,37,-53}, -{45,37,-52}, -{45,37,-51}, -{45,37,-50}, -{45,37,-49}, -{45,37,-48}, -{45,37,-47}, -{45,37,-46}, -{45,37,-45}, -{45,37,-44}, -{45,37,-43}, -{45,37,-42}, -{45,37,-41}, -{45,37,-40}, -{45,37,-39}, -{45,37,-38}, -{45,37,-37}, -{45,37,-36}, -{45,37,-35}, -{45,37,-34}, -{45,37,-33}, -{45,37,-32}, -{45,37,-31}, -{45,37,-30}, -{45,37,-29}, -{45,37,-28}, -{45,37,-27}, -{45,37,-26}, -{45,37,-25}, -{45,37,-24}, -{45,37,-23}, -{45,37,-22}, -{45,37,-21}, -{45,37,-20}, -{45,37,-19}, -{45,37,-18}, -{45,37,-17}, -{45,37,-16}, -{45,37,-15}, -{45,37,-14}, -{45,37,-13}, -{45,37,-12}, -{45,37,-11}, -{45,37,-10}, -{45,37,-9}, -{45,37,-8}, -{45,37,-7}, -{45,37,-6}, -{45,37,-5}, -{45,37,-4}, -{45,37,-3}, -{45,37,-2}, -{45,37,-1}, -{45,37,0}, -{45,37,1}, -{45,37,2}, -{45,37,3}, -{45,37,4}, -{45,37,5}, -{45,37,6}, -{45,37,7}, -{45,37,8}, -{45,37,9}, -{45,37,10}, -{45,37,11}, -{45,37,12}, -{45,37,13}, -{45,37,14}, -{45,37,15}, -{45,37,16}, -{45,37,17}, -{45,37,18}, -{45,37,19}, -{45,37,20}, -{45,37,21}, -{45,37,22}, -{45,37,23}, -{45,37,24}, -{45,37,25}, -{45,37,26}, -{45,37,27}, -{45,37,28}, -{45,37,29}, -{45,37,30}, -{45,37,31}, -{45,37,32}, -{45,37,33}, -{45,37,34}, -{45,37,35}, -{45,37,36}, -{45,37,37}, -{45,37,38}, -{45,37,39}, -{45,37,40}, -{45,37,41}, -{45,37,42}, -{45,37,43}, -{45,37,44}, -{45,37,45}, -{45,37,46}, -{45,37,47}, -{45,37,48}, -{45,37,49}, -{45,37,50}, -{45,37,51}, -{45,37,52}, -{45,37,53}, -{45,37,54}, -{45,37,55}, -{45,38,-82}, -{45,38,-81}, -{45,38,-80}, -{45,38,-79}, -{45,38,-78}, -{45,38,-77}, -{45,38,-76}, -{45,38,-75}, -{45,38,-74}, -{45,38,-73}, -{45,38,-72}, -{45,38,-71}, -{45,38,-70}, -{45,38,-69}, -{45,38,-68}, -{45,38,-67}, -{45,38,-66}, -{45,38,-65}, -{45,38,-64}, -{45,38,-63}, -{45,38,-62}, -{45,38,-61}, -{45,38,-60}, -{45,38,-59}, -{45,38,-58}, -{45,38,-57}, -{45,38,-56}, -{45,38,-55}, -{45,38,-54}, -{45,38,-53}, -{45,38,-52}, -{45,38,-51}, -{45,38,-50}, -{45,38,-49}, -{45,38,-48}, -{45,38,-47}, -{45,38,-46}, -{45,38,-45}, -{45,38,-44}, -{45,38,-43}, -{45,38,-42}, -{45,38,-41}, -{45,38,-40}, -{45,38,-39}, -{45,38,-38}, -{45,38,-37}, -{45,38,-36}, -{45,38,-35}, -{45,38,-34}, -{45,38,-33}, -{45,38,-32}, -{45,38,-31}, -{45,38,-30}, -{45,38,-29}, -{45,38,-28}, -{45,38,-27}, -{45,38,-26}, -{45,38,-25}, -{45,38,-24}, -{45,38,-23}, -{45,38,-22}, -{45,38,-21}, -{45,38,-20}, -{45,38,-19}, -{45,38,-18}, -{45,38,-17}, -{45,38,-16}, -{45,38,-15}, -{45,38,-14}, -{45,38,-13}, -{45,38,-12}, -{45,38,-11}, -{45,38,-10}, -{45,38,-9}, -{45,38,-8}, -{45,38,-7}, -{45,38,-6}, -{45,38,-5}, -{45,38,-4}, -{45,38,-3}, -{45,38,-2}, -{45,38,-1}, -{45,38,0}, -{45,38,1}, -{45,38,2}, -{45,38,3}, -{45,38,4}, -{45,38,5}, -{45,38,6}, -{45,38,7}, -{45,38,8}, -{45,38,9}, -{45,38,10}, -{45,38,11}, -{45,38,12}, -{45,38,13}, -{45,38,14}, -{45,38,15}, -{45,38,16}, -{45,38,17}, -{45,38,18}, -{45,38,19}, -{45,38,20}, -{45,38,21}, -{45,38,22}, -{45,38,23}, -{45,38,24}, -{45,38,25}, -{45,38,26}, -{45,38,27}, -{45,38,28}, -{45,38,29}, -{45,38,30}, -{45,38,31}, -{45,38,32}, -{45,38,33}, -{45,38,34}, -{45,38,35}, -{45,38,36}, -{45,38,37}, -{45,38,38}, -{45,38,39}, -{45,38,40}, -{45,38,41}, -{45,38,42}, -{45,38,43}, -{45,38,44}, -{45,38,45}, -{45,38,46}, -{45,38,47}, -{45,38,48}, -{45,38,49}, -{45,38,50}, -{45,38,51}, -{45,38,52}, -{45,38,53}, -{45,38,54}, -{45,38,55}, -{45,39,-83}, -{45,39,-82}, -{45,39,-81}, -{45,39,-80}, -{45,39,-79}, -{45,39,-78}, -{45,39,-77}, -{45,39,-76}, -{45,39,-75}, -{45,39,-74}, -{45,39,-73}, -{45,39,-72}, -{45,39,-71}, -{45,39,-70}, -{45,39,-69}, -{45,39,-68}, -{45,39,-67}, -{45,39,-66}, -{45,39,-65}, -{45,39,-64}, -{45,39,-63}, -{45,39,-62}, -{45,39,-61}, -{45,39,-60}, -{45,39,-59}, -{45,39,-58}, -{45,39,-57}, -{45,39,-56}, -{45,39,-55}, -{45,39,-54}, -{45,39,-53}, -{45,39,-52}, -{45,39,-51}, -{45,39,-50}, -{45,39,-49}, -{45,39,-48}, -{45,39,-47}, -{45,39,-46}, -{45,39,-45}, -{45,39,-44}, -{45,39,-43}, -{45,39,-42}, -{45,39,-41}, -{45,39,-40}, -{45,39,-39}, -{45,39,-38}, -{45,39,-37}, -{45,39,-36}, -{45,39,-35}, -{45,39,-34}, -{45,39,-33}, -{45,39,-32}, -{45,39,-31}, -{45,39,-30}, -{45,39,-29}, -{45,39,-28}, -{45,39,-27}, -{45,39,-26}, -{45,39,-25}, -{45,39,-24}, -{45,39,-23}, -{45,39,-22}, -{45,39,-21}, -{45,39,-20}, -{45,39,-19}, -{45,39,-18}, -{45,39,-17}, -{45,39,-16}, -{45,39,-15}, -{45,39,-14}, -{45,39,-13}, -{45,39,-12}, -{45,39,-11}, -{45,39,-10}, -{45,39,-9}, -{45,39,-8}, -{45,39,-7}, -{45,39,-6}, -{45,39,-5}, -{45,39,-4}, -{45,39,-3}, -{45,39,-2}, -{45,39,-1}, -{45,39,0}, -{45,39,1}, -{45,39,2}, -{45,39,3}, -{45,39,4}, -{45,39,5}, -{45,39,6}, -{45,39,7}, -{45,39,8}, -{45,39,9}, -{45,39,10}, -{45,39,11}, -{45,39,12}, -{45,39,13}, -{45,39,14}, -{45,39,15}, -{45,39,16}, -{45,39,17}, -{45,39,18}, -{45,39,19}, -{45,39,20}, -{45,39,21}, -{45,39,22}, -{45,39,23}, -{45,39,24}, -{45,39,25}, -{45,39,26}, -{45,39,27}, -{45,39,28}, -{45,39,29}, -{45,39,30}, -{45,39,31}, -{45,39,32}, -{45,39,33}, -{45,39,34}, -{45,39,35}, -{45,39,36}, -{45,39,37}, -{45,39,38}, -{45,39,39}, -{45,39,40}, -{45,39,41}, -{45,39,42}, -{45,39,43}, -{45,39,44}, -{45,39,45}, -{45,39,46}, -{45,39,47}, -{45,39,48}, -{45,39,49}, -{45,39,50}, -{45,39,51}, -{45,39,52}, -{45,39,53}, -{45,39,54}, -{45,39,55}, -{45,40,-84}, -{45,40,-83}, -{45,40,-82}, -{45,40,-81}, -{45,40,-80}, -{45,40,-79}, -{45,40,-78}, -{45,40,-77}, -{45,40,-76}, -{45,40,-75}, -{45,40,-74}, -{45,40,-73}, -{45,40,-72}, -{45,40,-71}, -{45,40,-70}, -{45,40,-69}, -{45,40,-68}, -{45,40,-67}, -{45,40,-66}, -{45,40,-65}, -{45,40,-64}, -{45,40,-63}, -{45,40,-62}, -{45,40,-61}, -{45,40,-60}, -{45,40,-59}, -{45,40,-58}, -{45,40,-57}, -{45,40,-56}, -{45,40,-55}, -{45,40,-54}, -{45,40,-53}, -{45,40,-52}, -{45,40,-51}, -{45,40,-50}, -{45,40,-49}, -{45,40,-48}, -{45,40,-47}, -{45,40,-46}, -{45,40,-45}, -{45,40,-44}, -{45,40,-43}, -{45,40,-42}, -{45,40,-41}, -{45,40,-40}, -{45,40,-39}, -{45,40,-38}, -{45,40,-37}, -{45,40,-36}, -{45,40,-35}, -{45,40,-34}, -{45,40,-33}, -{45,40,-32}, -{45,40,-31}, -{45,40,-30}, -{45,40,-29}, -{45,40,-28}, -{45,40,-27}, -{45,40,-26}, -{45,40,-25}, -{45,40,-24}, -{45,40,-23}, -{45,40,-22}, -{45,40,-21}, -{45,40,-20}, -{45,40,-19}, -{45,40,-18}, -{45,40,-17}, -{45,40,-16}, -{45,40,-15}, -{45,40,-14}, -{45,40,-13}, -{45,40,-12}, -{45,40,-11}, -{45,40,-10}, -{45,40,-9}, -{45,40,-8}, -{45,40,-7}, -{45,40,-6}, -{45,40,-5}, -{45,40,-4}, -{45,40,-3}, -{45,40,-2}, -{45,40,-1}, -{45,40,0}, -{45,40,1}, -{45,40,2}, -{45,40,3}, -{45,40,4}, -{45,40,5}, -{45,40,6}, -{45,40,7}, -{45,40,8}, -{45,40,9}, -{45,40,10}, -{45,40,11}, -{45,40,12}, -{45,40,13}, -{45,40,14}, -{45,40,15}, -{45,40,16}, -{45,40,17}, -{45,40,18}, -{45,40,19}, -{45,40,20}, -{45,40,21}, -{45,40,22}, -{45,40,23}, -{45,40,24}, -{45,40,25}, -{45,40,26}, -{45,40,27}, -{45,40,28}, -{45,40,29}, -{45,40,30}, -{45,40,31}, -{45,40,32}, -{45,40,33}, -{45,40,34}, -{45,40,35}, -{45,40,36}, -{45,40,37}, -{45,40,38}, -{45,40,39}, -{45,40,40}, -{45,40,41}, -{45,40,42}, -{45,40,43}, -{45,40,44}, -{45,40,45}, -{45,40,46}, -{45,40,47}, -{45,40,48}, -{45,40,49}, -{45,40,50}, -{45,40,51}, -{45,40,52}, -{45,40,53}, -{45,40,54}, -{45,40,55}, -{45,41,-85}, -{45,41,-84}, -{45,41,-83}, -{45,41,-82}, -{45,41,-81}, -{45,41,-80}, -{45,41,-79}, -{45,41,-78}, -{45,41,-77}, -{45,41,-76}, -{45,41,-75}, -{45,41,-74}, -{45,41,-73}, -{45,41,-72}, -{45,41,-71}, -{45,41,-70}, -{45,41,-69}, -{45,41,-68}, -{45,41,-67}, -{45,41,-66}, -{45,41,-65}, -{45,41,-64}, -{45,41,-63}, -{45,41,-62}, -{45,41,-61}, -{45,41,-60}, -{45,41,-59}, -{45,41,-58}, -{45,41,-57}, -{45,41,-56}, -{45,41,-55}, -{45,41,-54}, -{45,41,-53}, -{45,41,-52}, -{45,41,-51}, -{45,41,-50}, -{45,41,-49}, -{45,41,-48}, -{45,41,-47}, -{45,41,-46}, -{45,41,-45}, -{45,41,-44}, -{45,41,-43}, -{45,41,-42}, -{45,41,-41}, -{45,41,-40}, -{45,41,-39}, -{45,41,-38}, -{45,41,-37}, -{45,41,-36}, -{45,41,-35}, -{45,41,-34}, -{45,41,-33}, -{45,41,-32}, -{45,41,-31}, -{45,41,-30}, -{45,41,-29}, -{45,41,-28}, -{45,41,-27}, -{45,41,-26}, -{45,41,-25}, -{45,41,-24}, -{45,41,-23}, -{45,41,-22}, -{45,41,-21}, -{45,41,-20}, -{45,41,-19}, -{45,41,-18}, -{45,41,-17}, -{45,41,-16}, -{45,41,-15}, -{45,41,-14}, -{45,41,-13}, -{45,41,-12}, -{45,41,-11}, -{45,41,-10}, -{45,41,-9}, -{45,41,-8}, -{45,41,-7}, -{45,41,-6}, -{45,41,-5}, -{45,41,-4}, -{45,41,-3}, -{45,41,-2}, -{45,41,-1}, -{45,41,0}, -{45,41,1}, -{45,41,2}, -{45,41,3}, -{45,41,4}, -{45,41,5}, -{45,41,6}, -{45,41,7}, -{45,41,8}, -{45,41,9}, -{45,41,10}, -{45,41,11}, -{45,41,12}, -{45,41,13}, -{45,41,14}, -{45,41,15}, -{45,41,16}, -{45,41,17}, -{45,41,18}, -{45,41,19}, -{45,41,20}, -{45,41,21}, -{45,41,22}, -{45,41,23}, -{45,41,24}, -{45,41,25}, -{45,41,26}, -{45,41,27}, -{45,41,28}, -{45,41,29}, -{45,41,30}, -{45,41,31}, -{45,41,32}, -{45,41,33}, -{45,41,34}, -{45,41,35}, -{45,41,36}, -{45,41,37}, -{45,41,38}, -{45,41,39}, -{45,41,40}, -{45,41,41}, -{45,41,42}, -{45,41,43}, -{45,41,44}, -{45,41,45}, -{45,41,46}, -{45,41,47}, -{45,41,48}, -{45,41,49}, -{45,41,50}, -{45,41,51}, -{45,41,52}, -{45,41,53}, -{45,41,54}, -{45,41,55}, -{45,42,-86}, -{45,42,-85}, -{45,42,-84}, -{45,42,-83}, -{45,42,-82}, -{45,42,-81}, -{45,42,-80}, -{45,42,-79}, -{45,42,-78}, -{45,42,-77}, -{45,42,-76}, -{45,42,-75}, -{45,42,-74}, -{45,42,-73}, -{45,42,-72}, -{45,42,-71}, -{45,42,-70}, -{45,42,-69}, -{45,42,-68}, -{45,42,-67}, -{45,42,-66}, -{45,42,-65}, -{45,42,-64}, -{45,42,-63}, -{45,42,-62}, -{45,42,-61}, -{45,42,-60}, -{45,42,-59}, -{45,42,-58}, -{45,42,-57}, -{45,42,-56}, -{45,42,-55}, -{45,42,-54}, -{45,42,-53}, -{45,42,-52}, -{45,42,-51}, -{45,42,-50}, -{45,42,-49}, -{45,42,-48}, -{45,42,-47}, -{45,42,-46}, -{45,42,-45}, -{45,42,-44}, -{45,42,-43}, -{45,42,-42}, -{45,42,-41}, -{45,42,-40}, -{45,42,-39}, -{45,42,-38}, -{45,42,-37}, -{45,42,-36}, -{45,42,-35}, -{45,42,-34}, -{45,42,-33}, -{45,42,-32}, -{45,42,-31}, -{45,42,-30}, -{45,42,-29}, -{45,42,-28}, -{45,42,-27}, -{45,42,-26}, -{45,42,-25}, -{45,42,-24}, -{45,42,-23}, -{45,42,-22}, -{45,42,-21}, -{45,42,-20}, -{45,42,-19}, -{45,42,-18}, -{45,42,-17}, -{45,42,-16}, -{45,42,-15}, -{45,42,-14}, -{45,42,-13}, -{45,42,-12}, -{45,42,-11}, -{45,42,-10}, -{45,42,-9}, -{45,42,-8}, -{45,42,-7}, -{45,42,-6}, -{45,42,-5}, -{45,42,-4}, -{45,42,-3}, -{45,42,-2}, -{45,42,-1}, -{45,42,0}, -{45,42,1}, -{45,42,2}, -{45,42,3}, -{45,42,4}, -{45,42,5}, -{45,42,6}, -{45,42,7}, -{45,42,8}, -{45,42,9}, -{45,42,10}, -{45,42,11}, -{45,42,12}, -{45,42,13}, -{45,42,14}, -{45,42,15}, -{45,42,16}, -{45,42,17}, -{45,42,18}, -{45,42,19}, -{45,42,20}, -{45,42,21}, -{45,42,22}, -{45,42,23}, -{45,42,24}, -{45,42,25}, -{45,42,26}, -{45,42,27}, -{45,42,28}, -{45,42,29}, -{45,42,30}, -{45,42,31}, -{45,42,32}, -{45,42,33}, -{45,42,34}, -{45,42,35}, -{45,42,36}, -{45,42,37}, -{45,42,38}, -{45,42,39}, -{45,42,40}, -{45,42,41}, -{45,42,42}, -{45,42,43}, -{45,42,44}, -{45,42,45}, -{45,42,46}, -{45,42,47}, -{45,42,48}, -{45,42,49}, -{45,42,50}, -{45,42,51}, -{45,42,52}, -{45,42,53}, -{45,42,54}, -{45,42,55}, -{45,43,-86}, -{45,43,-85}, -{45,43,-84}, -{45,43,-83}, -{45,43,-82}, -{45,43,-81}, -{45,43,-80}, -{45,43,-79}, -{45,43,-78}, -{45,43,-77}, -{45,43,-76}, -{45,43,-75}, -{45,43,-74}, -{45,43,-73}, -{45,43,-72}, -{45,43,-71}, -{45,43,-70}, -{45,43,-69}, -{45,43,-68}, -{45,43,-67}, -{45,43,-66}, -{45,43,-65}, -{45,43,-64}, -{45,43,-63}, -{45,43,-62}, -{45,43,-61}, -{45,43,-60}, -{45,43,-59}, -{45,43,-58}, -{45,43,-57}, -{45,43,-56}, -{45,43,-55}, -{45,43,-54}, -{45,43,-53}, -{45,43,-52}, -{45,43,-51}, -{45,43,-50}, -{45,43,-49}, -{45,43,-48}, -{45,43,-47}, -{45,43,-46}, -{45,43,-45}, -{45,43,-44}, -{45,43,-43}, -{45,43,-42}, -{45,43,-41}, -{45,43,-40}, -{45,43,-39}, -{45,43,-38}, -{45,43,-37}, -{45,43,-36}, -{45,43,-35}, -{45,43,-34}, -{45,43,-33}, -{45,43,-32}, -{45,43,-31}, -{45,43,-30}, -{45,43,-29}, -{45,43,-28}, -{45,43,-27}, -{45,43,-26}, -{45,43,-25}, -{45,43,-24}, -{45,43,-23}, -{45,43,-22}, -{45,43,-21}, -{45,43,-20}, -{45,43,-19}, -{45,43,-18}, -{45,43,-17}, -{45,43,-16}, -{45,43,-15}, -{45,43,-14}, -{45,43,-13}, -{45,43,-12}, -{45,43,-11}, -{45,43,-10}, -{45,43,-9}, -{45,43,-8}, -{45,43,-7}, -{45,43,-6}, -{45,43,-5}, -{45,43,-4}, -{45,43,-3}, -{45,43,-2}, -{45,43,-1}, -{45,43,0}, -{45,43,1}, -{45,43,2}, -{45,43,3}, -{45,43,4}, -{45,43,5}, -{45,43,6}, -{45,43,7}, -{45,43,8}, -{45,43,9}, -{45,43,10}, -{45,43,11}, -{45,43,12}, -{45,43,13}, -{45,43,14}, -{45,43,15}, -{45,43,16}, -{45,43,17}, -{45,43,18}, -{45,43,19}, -{45,43,20}, -{45,43,21}, -{45,43,22}, -{45,43,23}, -{45,43,24}, -{45,43,25}, -{45,43,26}, -{45,43,27}, -{45,43,28}, -{45,43,29}, -{45,43,30}, -{45,43,31}, -{45,43,32}, -{45,43,33}, -{45,43,34}, -{45,43,35}, -{45,43,36}, -{45,43,37}, -{45,43,38}, -{45,43,39}, -{45,43,40}, -{45,43,41}, -{45,43,42}, -{45,43,43}, -{45,43,44}, -{45,43,45}, -{45,43,46}, -{45,43,47}, -{45,43,48}, -{45,43,49}, -{45,43,50}, -{45,43,51}, -{45,43,52}, -{45,43,53}, -{45,43,54}, -{45,43,55}, -{45,44,-86}, -{45,44,-85}, -{45,44,-84}, -{45,44,-83}, -{45,44,-82}, -{45,44,-81}, -{45,44,-80}, -{45,44,-79}, -{45,44,-78}, -{45,44,-77}, -{45,44,-76}, -{45,44,-75}, -{45,44,-74}, -{45,44,-73}, -{45,44,-72}, -{45,44,-71}, -{45,44,-70}, -{45,44,-69}, -{45,44,-68}, -{45,44,-67}, -{45,44,-66}, -{45,44,-65}, -{45,44,-64}, -{45,44,-63}, -{45,44,-62}, -{45,44,-61}, -{45,44,-60}, -{45,44,-59}, -{45,44,-58}, -{45,44,-57}, -{45,44,-56}, -{45,44,-55}, -{45,44,-54}, -{45,44,-53}, -{45,44,-52}, -{45,44,-51}, -{45,44,-50}, -{45,44,-49}, -{45,44,-48}, -{45,44,-47}, -{45,44,-46}, -{45,44,-45}, -{45,44,-44}, -{45,44,-43}, -{45,44,-42}, -{45,44,-41}, -{45,44,-40}, -{45,44,-39}, -{45,44,-38}, -{45,44,-37}, -{45,44,-36}, -{45,44,-35}, -{45,44,-34}, -{45,44,-33}, -{45,44,-32}, -{45,44,-31}, -{45,44,-30}, -{45,44,-29}, -{45,44,-28}, -{45,44,-27}, -{45,44,-26}, -{45,44,-25}, -{45,44,-24}, -{45,44,-23}, -{45,44,-22}, -{45,44,-21}, -{45,44,-20}, -{45,44,-19}, -{45,44,-18}, -{45,44,-17}, -{45,44,-16}, -{45,44,-15}, -{45,44,-14}, -{45,44,-13}, -{45,44,-12}, -{45,44,-11}, -{45,44,-10}, -{45,44,-9}, -{45,44,-8}, -{45,44,-7}, -{45,44,-6}, -{45,44,-5}, -{45,44,-4}, -{45,44,-3}, -{45,44,-2}, -{45,44,-1}, -{45,44,0}, -{45,44,1}, -{45,44,2}, -{45,44,3}, -{45,44,4}, -{45,44,5}, -{45,44,6}, -{45,44,7}, -{45,44,8}, -{45,44,9}, -{45,44,10}, -{45,44,11}, -{45,44,12}, -{45,44,13}, -{45,44,14}, -{45,44,15}, -{45,44,16}, -{45,44,17}, -{45,44,18}, -{45,44,19}, -{45,44,20}, -{45,44,21}, -{45,44,22}, -{45,44,23}, -{45,44,24}, -{45,44,25}, -{45,44,26}, -{45,44,27}, -{45,44,28}, -{45,44,29}, -{45,44,30}, -{45,44,31}, -{45,44,32}, -{45,44,33}, -{45,44,34}, -{45,44,35}, -{45,44,36}, -{45,44,37}, -{45,44,38}, -{45,44,39}, -{45,44,40}, -{45,44,41}, -{45,44,42}, -{45,44,43}, -{45,44,44}, -{45,44,45}, -{45,44,46}, -{45,44,47}, -{45,44,48}, -{45,44,49}, -{45,44,50}, -{45,44,51}, -{45,44,52}, -{45,44,53}, -{45,44,54}, -{45,44,55}, -{45,45,-86}, -{45,45,-85}, -{45,45,-84}, -{45,45,-83}, -{45,45,-82}, -{45,45,-81}, -{45,45,-80}, -{45,45,-79}, -{45,45,-78}, -{45,45,-77}, -{45,45,-76}, -{45,45,-75}, -{45,45,-74}, -{45,45,-73}, -{45,45,-72}, -{45,45,-71}, -{45,45,-70}, -{45,45,-69}, -{45,45,-68}, -{45,45,-67}, -{45,45,-66}, -{45,45,-65}, -{45,45,-64}, -{45,45,-63}, -{45,45,-62}, -{45,45,-61}, -{45,45,-60}, -{45,45,-59}, -{45,45,-58}, -{45,45,-57}, -{45,45,-56}, -{45,45,-55}, -{45,45,-54}, -{45,45,-53}, -{45,45,-52}, -{45,45,-51}, -{45,45,-50}, -{45,45,-49}, -{45,45,-48}, -{45,45,-47}, -{45,45,-46}, -{45,45,-45}, -{45,45,-44}, -{45,45,-43}, -{45,45,-42}, -{45,45,-41}, -{45,45,-40}, -{45,45,-39}, -{45,45,-38}, -{45,45,-37}, -{45,45,-36}, -{45,45,-35}, -{45,45,-34}, -{45,45,-33}, -{45,45,-32}, -{45,45,-31}, -{45,45,-30}, -{45,45,-29}, -{45,45,-28}, -{45,45,-27}, -{45,45,-26}, -{45,45,-25}, -{45,45,-24}, -{45,45,-23}, -{45,45,-22}, -{45,45,-21}, -{45,45,-20}, -{45,45,-19}, -{45,45,-18}, -{45,45,-17}, -{45,45,-16}, -{45,45,-15}, -{45,45,-14}, -{45,45,-13}, -{45,45,-12}, -{45,45,-11}, -{45,45,-10}, -{45,45,-9}, -{45,45,-8}, -{45,45,-7}, -{45,45,-6}, -{45,45,-5}, -{45,45,-4}, -{45,45,-3}, -{45,45,-2}, -{45,45,-1}, -{45,45,0}, -{45,45,1}, -{45,45,2}, -{45,45,3}, -{45,45,4}, -{45,45,5}, -{45,45,6}, -{45,45,7}, -{45,45,8}, -{45,45,9}, -{45,45,10}, -{45,45,11}, -{45,45,12}, -{45,45,13}, -{45,45,14}, -{45,45,15}, -{45,45,16}, -{45,45,17}, -{45,45,18}, -{45,45,19}, -{45,45,20}, -{45,45,21}, -{45,45,22}, -{45,45,23}, -{45,45,24}, -{45,45,25}, -{45,45,26}, -{45,45,27}, -{45,45,28}, -{45,45,29}, -{45,45,30}, -{45,45,31}, -{45,45,32}, -{45,45,33}, -{45,45,34}, -{45,45,35}, -{45,45,36}, -{45,45,37}, -{45,45,38}, -{45,45,39}, -{45,45,40}, -{45,45,41}, -{45,45,42}, -{45,45,43}, -{45,45,44}, -{45,45,45}, -{45,45,46}, -{45,45,47}, -{45,45,48}, -{45,45,49}, -{45,45,50}, -{45,45,51}, -{45,45,52}, -{45,45,53}, -{45,45,54}, -{45,45,55}, -{45,45,56}, -{45,46,-86}, -{45,46,-85}, -{45,46,-84}, -{45,46,-83}, -{45,46,-82}, -{45,46,-81}, -{45,46,-80}, -{45,46,-79}, -{45,46,-78}, -{45,46,-77}, -{45,46,-76}, -{45,46,-75}, -{45,46,-74}, -{45,46,-73}, -{45,46,-72}, -{45,46,-71}, -{45,46,-70}, -{45,46,-69}, -{45,46,-68}, -{45,46,-67}, -{45,46,-66}, -{45,46,-65}, -{45,46,-64}, -{45,46,-63}, -{45,46,-62}, -{45,46,-61}, -{45,46,-60}, -{45,46,-59}, -{45,46,-58}, -{45,46,-57}, -{45,46,-56}, -{45,46,-55}, -{45,46,-54}, -{45,46,-53}, -{45,46,-52}, -{45,46,-51}, -{45,46,-50}, -{45,46,-49}, -{45,46,-48}, -{45,46,-47}, -{45,46,-46}, -{45,46,-45}, -{45,46,-44}, -{45,46,-43}, -{45,46,-42}, -{45,46,-41}, -{45,46,-40}, -{45,46,-39}, -{45,46,-38}, -{45,46,-37}, -{45,46,-36}, -{45,46,-35}, -{45,46,-34}, -{45,46,-33}, -{45,46,-32}, -{45,46,-31}, -{45,46,-30}, -{45,46,-29}, -{45,46,-28}, -{45,46,-27}, -{45,46,-26}, -{45,46,-25}, -{45,46,-24}, -{45,46,-23}, -{45,46,-22}, -{45,46,-21}, -{45,46,-20}, -{45,46,-19}, -{45,46,-18}, -{45,46,-17}, -{45,46,-16}, -{45,46,-15}, -{45,46,-14}, -{45,46,-13}, -{45,46,-12}, -{45,46,-11}, -{45,46,-10}, -{45,46,-9}, -{45,46,-8}, -{45,46,-7}, -{45,46,-6}, -{45,46,-5}, -{45,46,-4}, -{45,46,-3}, -{45,46,-2}, -{45,46,-1}, -{45,46,0}, -{45,46,1}, -{45,46,2}, -{45,46,3}, -{45,46,4}, -{45,46,5}, -{45,46,6}, -{45,46,7}, -{45,46,8}, -{45,46,9}, -{45,46,10}, -{45,46,11}, -{45,46,12}, -{45,46,13}, -{45,46,14}, -{45,46,15}, -{45,46,16}, -{45,46,17}, -{45,46,18}, -{45,46,19}, -{45,46,20}, -{45,46,21}, -{45,46,22}, -{45,46,23}, -{45,46,24}, -{45,46,25}, -{45,46,26}, -{45,46,27}, -{45,46,28}, -{45,46,29}, -{45,46,30}, -{45,46,31}, -{45,46,32}, -{45,46,33}, -{45,46,34}, -{45,46,35}, -{45,46,36}, -{45,46,37}, -{45,46,38}, -{45,46,39}, -{45,46,40}, -{45,46,41}, -{45,46,42}, -{45,46,43}, -{45,46,44}, -{45,46,45}, -{45,46,46}, -{45,46,47}, -{45,46,48}, -{45,46,49}, -{45,46,50}, -{45,46,51}, -{45,46,52}, -{45,46,53}, -{45,46,54}, -{45,46,55}, -{45,46,56}, -{45,47,-86}, -{45,47,-85}, -{45,47,-84}, -{45,47,-83}, -{45,47,-82}, -{45,47,-81}, -{45,47,-80}, -{45,47,-79}, -{45,47,-78}, -{45,47,-77}, -{45,47,-76}, -{45,47,-75}, -{45,47,-74}, -{45,47,-73}, -{45,47,-72}, -{45,47,-71}, -{45,47,-70}, -{45,47,-69}, -{45,47,-68}, -{45,47,-67}, -{45,47,-66}, -{45,47,-65}, -{45,47,-64}, -{45,47,-63}, -{45,47,-62}, -{45,47,-61}, -{45,47,-60}, -{45,47,-59}, -{45,47,-58}, -{45,47,-57}, -{45,47,-56}, -{45,47,-55}, -{45,47,-54}, -{45,47,-53}, -{45,47,-52}, -{45,47,-51}, -{45,47,-50}, -{45,47,-49}, -{45,47,-48}, -{45,47,-47}, -{45,47,-46}, -{45,47,-45}, -{45,47,-44}, -{45,47,-43}, -{45,47,-42}, -{45,47,-41}, -{45,47,-40}, -{45,47,-39}, -{45,47,-38}, -{45,47,-37}, -{45,47,-36}, -{45,47,-35}, -{45,47,-34}, -{45,47,-33}, -{45,47,-32}, -{45,47,-31}, -{45,47,-30}, -{45,47,-29}, -{45,47,-28}, -{45,47,-27}, -{45,47,-26}, -{45,47,-25}, -{45,47,-24}, -{45,47,-23}, -{45,47,-22}, -{45,47,-21}, -{45,47,-20}, -{45,47,-19}, -{45,47,-18}, -{45,47,-17}, -{45,47,-16}, -{45,47,-15}, -{45,47,-14}, -{45,47,-13}, -{45,47,-12}, -{45,47,-11}, -{45,47,-10}, -{45,47,-9}, -{45,47,-8}, -{45,47,-7}, -{45,47,-6}, -{45,47,-5}, -{45,47,-4}, -{45,47,-3}, -{45,47,-2}, -{45,47,-1}, -{45,47,0}, -{45,47,1}, -{45,47,2}, -{45,47,3}, -{45,47,4}, -{45,47,5}, -{45,47,6}, -{45,47,7}, -{45,47,8}, -{45,47,9}, -{45,47,10}, -{45,47,11}, -{45,47,12}, -{45,47,13}, -{45,47,14}, -{45,47,15}, -{45,47,16}, -{45,47,17}, -{45,47,18}, -{45,47,19}, -{45,47,20}, -{45,47,21}, -{45,47,22}, -{45,47,23}, -{45,47,24}, -{45,47,25}, -{45,47,26}, -{45,47,27}, -{45,47,28}, -{45,47,29}, -{45,47,30}, -{45,47,31}, -{45,47,32}, -{45,47,33}, -{45,47,34}, -{45,47,35}, -{45,47,36}, -{45,47,37}, -{45,47,38}, -{45,47,39}, -{45,47,40}, -{45,47,41}, -{45,47,42}, -{45,47,43}, -{45,47,44}, -{45,47,45}, -{45,47,46}, -{45,47,47}, -{45,47,48}, -{45,47,49}, -{45,47,50}, -{45,47,51}, -{45,47,52}, -{45,47,53}, -{45,47,54}, -{45,47,55}, -{45,47,56}, -{45,48,-86}, -{45,48,-85}, -{45,48,-84}, -{45,48,-83}, -{45,48,-82}, -{45,48,-81}, -{45,48,-80}, -{45,48,-79}, -{45,48,-78}, -{45,48,-77}, -{45,48,-76}, -{45,48,-75}, -{45,48,-74}, -{45,48,-73}, -{45,48,-72}, -{45,48,-71}, -{45,48,-70}, -{45,48,-69}, -{45,48,-68}, -{45,48,-67}, -{45,48,-66}, -{45,48,-65}, -{45,48,-64}, -{45,48,-63}, -{45,48,-62}, -{45,48,-61}, -{45,48,-60}, -{45,48,-59}, -{45,48,-58}, -{45,48,-57}, -{45,48,-56}, -{45,48,-55}, -{45,48,-54}, -{45,48,-53}, -{45,48,-52}, -{45,48,-51}, -{45,48,-50}, -{45,48,-49}, -{45,48,-48}, -{45,48,-47}, -{45,48,-46}, -{45,48,-45}, -{45,48,-44}, -{45,48,-43}, -{45,48,-42}, -{45,48,-41}, -{45,48,-40}, -{45,48,-39}, -{45,48,-38}, -{45,48,-37}, -{45,48,-36}, -{45,48,-35}, -{45,48,-34}, -{45,48,-33}, -{45,48,-32}, -{45,48,-31}, -{45,48,-30}, -{45,48,-29}, -{45,48,-28}, -{45,48,-27}, -{45,48,-26}, -{45,48,-25}, -{45,48,-24}, -{45,48,-23}, -{45,48,-22}, -{45,48,-21}, -{45,48,-20}, -{45,48,-19}, -{45,48,-18}, -{45,48,-17}, -{45,48,-16}, -{45,48,-15}, -{45,48,-14}, -{45,48,-13}, -{45,48,-12}, -{45,48,-11}, -{45,48,-10}, -{45,48,-9}, -{45,48,-8}, -{45,48,-7}, -{45,48,-6}, -{45,48,-5}, -{45,48,-4}, -{45,48,-3}, -{45,48,-2}, -{45,48,-1}, -{45,48,0}, -{45,48,1}, -{45,48,2}, -{45,48,3}, -{45,48,4}, -{45,48,5}, -{45,48,6}, -{45,48,7}, -{45,48,8}, -{45,48,9}, -{45,48,10}, -{45,48,11}, -{45,48,12}, -{45,48,13}, -{45,48,14}, -{45,48,15}, -{45,48,16}, -{45,48,17}, -{45,48,18}, -{45,48,19}, -{45,48,20}, -{45,48,21}, -{45,48,22}, -{45,48,23}, -{45,48,24}, -{45,48,25}, -{45,48,26}, -{45,48,27}, -{45,48,28}, -{45,48,29}, -{45,48,30}, -{45,48,31}, -{45,48,32}, -{45,48,33}, -{45,48,34}, -{45,48,35}, -{45,48,36}, -{45,48,37}, -{45,48,38}, -{45,48,39}, -{45,48,40}, -{45,48,41}, -{45,48,42}, -{45,48,43}, -{45,48,44}, -{45,48,45}, -{45,48,46}, -{45,48,47}, -{45,48,48}, -{45,48,49}, -{45,48,50}, -{45,48,51}, -{45,48,52}, -{45,48,53}, -{45,48,54}, -{45,48,55}, -{45,48,56}, -{45,49,-86}, -{45,49,-85}, -{45,49,-84}, -{45,49,-83}, -{45,49,-82}, -{45,49,-81}, -{45,49,-80}, -{45,49,-79}, -{45,49,-78}, -{45,49,-77}, -{45,49,-76}, -{45,49,-75}, -{45,49,-74}, -{45,49,-73}, -{45,49,-72}, -{45,49,-71}, -{45,49,-70}, -{45,49,-69}, -{45,49,-68}, -{45,49,-67}, -{45,49,-66}, -{45,49,-65}, -{45,49,-64}, -{45,49,-63}, -{45,49,-62}, -{45,49,-61}, -{45,49,-60}, -{45,49,-59}, -{45,49,-58}, -{45,49,-57}, -{45,49,-56}, -{45,49,-55}, -{45,49,-54}, -{45,49,-53}, -{45,49,-52}, -{45,49,-51}, -{45,49,-50}, -{45,49,-49}, -{45,49,-48}, -{45,49,-47}, -{45,49,-46}, -{45,49,-45}, -{45,49,-44}, -{45,49,-43}, -{45,49,-42}, -{45,49,-41}, -{45,49,-40}, -{45,49,-39}, -{45,49,-38}, -{45,49,-37}, -{45,49,-36}, -{45,49,-35}, -{45,49,-34}, -{45,49,-33}, -{45,49,-32}, -{45,49,-31}, -{45,49,-30}, -{45,49,-29}, -{45,49,-28}, -{45,49,-27}, -{45,49,-26}, -{45,49,-25}, -{45,49,-24}, -{45,49,-23}, -{45,49,-22}, -{45,49,-21}, -{45,49,-20}, -{45,49,-19}, -{45,49,-18}, -{45,49,-17}, -{45,49,-16}, -{45,49,-15}, -{45,49,-14}, -{45,49,-13}, -{45,49,-12}, -{45,49,-11}, -{45,49,-10}, -{45,49,-9}, -{45,49,-8}, -{45,49,-7}, -{45,49,-6}, -{45,49,-5}, -{45,49,-4}, -{45,49,-3}, -{45,49,-2}, -{45,49,-1}, -{45,49,0}, -{45,49,1}, -{45,49,2}, -{45,49,3}, -{45,49,4}, -{45,49,5}, -{45,49,6}, -{45,49,7}, -{45,49,8}, -{45,49,9}, -{45,49,10}, -{45,49,11}, -{45,49,12}, -{45,49,13}, -{45,49,14}, -{45,49,15}, -{45,49,16}, -{45,49,17}, -{45,49,18}, -{45,49,19}, -{45,49,20}, -{45,49,21}, -{45,49,22}, -{45,49,23}, -{45,49,24}, -{45,49,25}, -{45,49,26}, -{45,49,27}, -{45,49,28}, -{45,49,29}, -{45,49,30}, -{45,49,31}, -{45,49,32}, -{45,49,33}, -{45,49,34}, -{45,49,35}, -{45,49,36}, -{45,49,37}, -{45,49,38}, -{45,49,39}, -{45,49,40}, -{45,49,41}, -{45,49,42}, -{45,49,43}, -{45,49,44}, -{45,49,45}, -{45,49,46}, -{45,49,47}, -{45,49,48}, -{45,49,49}, -{45,49,50}, -{45,49,51}, -{45,49,52}, -{45,49,53}, -{45,49,54}, -{45,49,55}, -{45,49,56}, -{45,50,-86}, -{45,50,-85}, -{45,50,-84}, -{45,50,-83}, -{45,50,-82}, -{45,50,-81}, -{45,50,-80}, -{45,50,-79}, -{45,50,-78}, -{45,50,-77}, -{45,50,-76}, -{45,50,-75}, -{45,50,-74}, -{45,50,-73}, -{45,50,-72}, -{45,50,-71}, -{45,50,-70}, -{45,50,-69}, -{45,50,-68}, -{45,50,-67}, -{45,50,-66}, -{45,50,-65}, -{45,50,-64}, -{45,50,-63}, -{45,50,-62}, -{45,50,-61}, -{45,50,-60}, -{45,50,-59}, -{45,50,-58}, -{45,50,-57}, -{45,50,-56}, -{45,50,-55}, -{45,50,-54}, -{45,50,-53}, -{45,50,-52}, -{45,50,-51}, -{45,50,-50}, -{45,50,-49}, -{45,50,-48}, -{45,50,-47}, -{45,50,-46}, -{45,50,-45}, -{45,50,-44}, -{45,50,-43}, -{45,50,-42}, -{45,50,-41}, -{45,50,-40}, -{45,50,-39}, -{45,50,-38}, -{45,50,-37}, -{45,50,-36}, -{45,50,-35}, -{45,50,-34}, -{45,50,-33}, -{45,50,-32}, -{45,50,-31}, -{45,50,-30}, -{45,50,-29}, -{45,50,-28}, -{45,50,-27}, -{45,50,-26}, -{45,50,-25}, -{45,50,-24}, -{45,50,-23}, -{45,50,-22}, -{45,50,-21}, -{45,50,-20}, -{45,50,-19}, -{45,50,-18}, -{45,50,-17}, -{45,50,-16}, -{45,50,-15}, -{45,50,-14}, -{45,50,-13}, -{45,50,-12}, -{45,50,-11}, -{45,50,-10}, -{45,50,-9}, -{45,50,-8}, -{45,50,-7}, -{45,50,-6}, -{45,50,-5}, -{45,50,-4}, -{45,50,-3}, -{45,50,-2}, -{45,50,-1}, -{45,50,0}, -{45,50,1}, -{45,50,2}, -{45,50,3}, -{45,50,4}, -{45,50,5}, -{45,50,6}, -{45,50,7}, -{45,50,8}, -{45,50,9}, -{45,50,10}, -{45,50,11}, -{45,50,12}, -{45,50,13}, -{45,50,14}, -{45,50,15}, -{45,50,16}, -{45,50,17}, -{45,50,18}, -{45,50,19}, -{45,50,20}, -{45,50,21}, -{45,50,22}, -{45,50,23}, -{45,50,24}, -{45,50,25}, -{45,50,26}, -{45,50,27}, -{45,50,28}, -{45,50,29}, -{45,50,30}, -{45,50,31}, -{45,50,32}, -{45,50,33}, -{45,50,34}, -{45,50,35}, -{45,50,36}, -{45,50,37}, -{45,50,38}, -{45,50,39}, -{45,50,40}, -{45,50,41}, -{45,50,42}, -{45,50,43}, -{45,50,44}, -{45,50,45}, -{45,50,46}, -{45,50,47}, -{45,50,48}, -{45,50,49}, -{45,50,50}, -{45,50,51}, -{45,50,52}, -{45,50,53}, -{45,50,54}, -{45,50,55}, -{45,50,56}, -{45,51,-86}, -{45,51,-85}, -{45,51,-84}, -{45,51,-83}, -{45,51,-82}, -{45,51,-81}, -{45,51,-80}, -{45,51,-79}, -{45,51,-78}, -{45,51,-77}, -{45,51,-76}, -{45,51,-75}, -{45,51,-74}, -{45,51,-73}, -{45,51,-72}, -{45,51,-71}, -{45,51,-70}, -{45,51,-69}, -{45,51,-68}, -{45,51,-67}, -{45,51,-66}, -{45,51,-65}, -{45,51,-64}, -{45,51,-63}, -{45,51,-62}, -{45,51,-61}, -{45,51,-60}, -{45,51,-59}, -{45,51,-58}, -{45,51,-57}, -{45,51,-56}, -{45,51,-55}, -{45,51,-54}, -{45,51,-53}, -{45,51,-52}, -{45,51,-51}, -{45,51,-50}, -{45,51,-49}, -{45,51,-48}, -{45,51,-47}, -{45,51,-46}, -{45,51,-45}, -{45,51,-44}, -{45,51,-43}, -{45,51,-42}, -{45,51,-41}, -{45,51,-40}, -{45,51,-39}, -{45,51,-38}, -{45,51,-37}, -{45,51,-36}, -{45,51,-35}, -{45,51,-34}, -{45,51,-33}, -{45,51,-32}, -{45,51,-31}, -{45,51,-30}, -{45,51,-29}, -{45,51,-28}, -{45,51,-27}, -{45,51,-26}, -{45,51,-25}, -{45,51,-24}, -{45,51,-23}, -{45,51,-22}, -{45,51,-21}, -{45,51,-20}, -{45,51,-19}, -{45,51,-18}, -{45,51,-17}, -{45,51,-16}, -{45,51,-15}, -{45,51,-14}, -{45,51,-13}, -{45,51,-12}, -{45,51,-11}, -{45,51,-10}, -{45,51,-9}, -{45,51,-8}, -{45,51,-7}, -{45,51,-6}, -{45,51,-5}, -{45,51,-4}, -{45,51,-3}, -{45,51,-2}, -{45,51,-1}, -{45,51,0}, -{45,51,1}, -{45,51,2}, -{45,51,3}, -{45,51,4}, -{45,51,5}, -{45,51,6}, -{45,51,7}, -{45,51,8}, -{45,51,9}, -{45,51,10}, -{45,51,11}, -{45,51,12}, -{45,51,13}, -{45,51,14}, -{45,51,15}, -{45,51,16}, -{45,51,17}, -{45,51,18}, -{45,51,19}, -{45,51,20}, -{45,51,21}, -{45,51,22}, -{45,51,23}, -{45,51,24}, -{45,51,25}, -{45,51,26}, -{45,51,27}, -{45,51,28}, -{45,51,29}, -{45,51,30}, -{45,51,31}, -{45,51,32}, -{45,51,33}, -{45,51,34}, -{45,51,35}, -{45,51,36}, -{45,51,37}, -{45,51,38}, -{45,51,39}, -{45,51,40}, -{45,51,41}, -{45,51,42}, -{45,51,43}, -{45,51,44}, -{45,51,45}, -{45,51,46}, -{45,51,47}, -{45,51,48}, -{45,51,49}, -{45,51,50}, -{45,51,51}, -{45,51,52}, -{45,51,53}, -{45,51,54}, -{45,51,55}, -{45,51,56}, -{45,52,-86}, -{45,52,-85}, -{45,52,-84}, -{45,52,-83}, -{45,52,-82}, -{45,52,-81}, -{45,52,-80}, -{45,52,-79}, -{45,52,-78}, -{45,52,-77}, -{45,52,-76}, -{45,52,-75}, -{45,52,-74}, -{45,52,-73}, -{45,52,-72}, -{45,52,-71}, -{45,52,-70}, -{45,52,-69}, -{45,52,-68}, -{45,52,-67}, -{45,52,-66}, -{45,52,-65}, -{45,52,-64}, -{45,52,-63}, -{45,52,-62}, -{45,52,-61}, -{45,52,-60}, -{45,52,-59}, -{45,52,-58}, -{45,52,-57}, -{45,52,-56}, -{45,52,-55}, -{45,52,-54}, -{45,52,-53}, -{45,52,-52}, -{45,52,-51}, -{45,52,-50}, -{45,52,-49}, -{45,52,-48}, -{45,52,-47}, -{45,52,-46}, -{45,52,-45}, -{45,52,-44}, -{45,52,-43}, -{45,52,-42}, -{45,52,-41}, -{45,52,-40}, -{45,52,-39}, -{45,52,-38}, -{45,52,-37}, -{45,52,-36}, -{45,52,-35}, -{45,52,-34}, -{45,52,-33}, -{45,52,-32}, -{45,52,-31}, -{45,52,-30}, -{45,52,-29}, -{45,52,-28}, -{45,52,-27}, -{45,52,-26}, -{45,52,-25}, -{45,52,-24}, -{45,52,-23}, -{45,52,-22}, -{45,52,-21}, -{45,52,-20}, -{45,52,-19}, -{45,52,-18}, -{45,52,-17}, -{45,52,-16}, -{45,52,-15}, -{45,52,-14}, -{45,52,-13}, -{45,52,-12}, -{45,52,-11}, -{45,52,-10}, -{45,52,-9}, -{45,52,-8}, -{45,52,-7}, -{45,52,-6}, -{45,52,-5}, -{45,52,-4}, -{45,52,-3}, -{45,52,-2}, -{45,52,-1}, -{45,52,0}, -{45,52,1}, -{45,52,2}, -{45,52,3}, -{45,52,4}, -{45,52,5}, -{45,52,6}, -{45,52,7}, -{45,52,8}, -{45,52,9}, -{45,52,10}, -{45,52,11}, -{45,52,12}, -{45,52,13}, -{45,52,14}, -{45,52,15}, -{45,52,16}, -{45,52,17}, -{45,52,18}, -{45,52,19}, -{45,52,20}, -{45,52,21}, -{45,52,22}, -{45,52,23}, -{45,52,24}, -{45,52,25}, -{45,52,26}, -{45,52,27}, -{45,52,28}, -{45,52,29}, -{45,52,30}, -{45,52,31}, -{45,52,32}, -{45,52,33}, -{45,52,34}, -{45,52,35}, -{45,52,36}, -{45,52,37}, -{45,52,38}, -{45,52,39}, -{45,52,40}, -{45,52,41}, -{45,52,42}, -{45,52,43}, -{45,52,44}, -{45,52,45}, -{45,52,46}, -{45,52,47}, -{45,52,48}, -{45,52,49}, -{45,52,50}, -{45,52,51}, -{45,52,52}, -{45,52,53}, -{45,52,54}, -{45,52,55}, -{45,52,56}, -{45,53,-86}, -{45,53,-85}, -{45,53,-84}, -{45,53,-83}, -{45,53,-82}, -{45,53,-81}, -{45,53,-80}, -{45,53,-79}, -{45,53,-78}, -{45,53,-77}, -{45,53,-76}, -{45,53,-75}, -{45,53,-74}, -{45,53,-73}, -{45,53,-72}, -{45,53,-71}, -{45,53,-70}, -{45,53,-69}, -{45,53,-68}, -{45,53,-67}, -{45,53,-66}, -{45,53,-65}, -{45,53,-64}, -{45,53,-63}, -{45,53,-62}, -{45,53,-61}, -{45,53,-60}, -{45,53,-59}, -{45,53,-58}, -{45,53,-57}, -{45,53,-56}, -{45,53,-55}, -{45,53,-54}, -{45,53,-53}, -{45,53,-52}, -{45,53,-51}, -{45,53,-50}, -{45,53,-49}, -{45,53,-48}, -{45,53,-47}, -{45,53,-46}, -{45,53,-45}, -{45,53,-44}, -{45,53,-43}, -{45,53,-42}, -{45,53,-41}, -{45,53,-40}, -{45,53,-39}, -{45,53,-38}, -{45,53,-37}, -{45,53,-36}, -{45,53,-35}, -{45,53,-34}, -{45,53,-33}, -{45,53,-32}, -{45,53,-31}, -{45,53,-30}, -{45,53,-29}, -{45,53,-28}, -{45,53,-27}, -{45,53,-26}, -{45,53,-25}, -{45,53,-24}, -{45,53,-23}, -{45,53,-22}, -{45,53,-21}, -{45,53,-20}, -{45,53,-19}, -{45,53,-18}, -{45,53,-17}, -{45,53,-16}, -{45,53,-15}, -{45,53,-14}, -{45,53,-13}, -{45,53,-12}, -{45,53,-11}, -{45,53,-10}, -{45,53,-9}, -{45,53,-8}, -{45,53,-7}, -{45,53,-6}, -{45,53,-5}, -{45,53,-4}, -{45,53,-3}, -{45,53,-2}, -{45,53,-1}, -{45,53,0}, -{45,53,1}, -{45,53,2}, -{45,53,3}, -{45,53,4}, -{45,53,5}, -{45,53,6}, -{45,53,7}, -{45,53,8}, -{45,53,9}, -{45,53,10}, -{45,53,11}, -{45,53,12}, -{45,53,13}, -{45,53,14}, -{45,53,15}, -{45,53,16}, -{45,53,17}, -{45,53,18}, -{45,53,19}, -{45,53,20}, -{45,53,21}, -{45,53,22}, -{45,53,23}, -{45,53,24}, -{45,53,25}, -{45,53,26}, -{45,53,27}, -{45,53,28}, -{45,53,29}, -{45,53,30}, -{45,53,31}, -{45,53,32}, -{45,53,33}, -{45,53,34}, -{45,53,35}, -{45,53,36}, -{45,53,37}, -{45,53,38}, -{45,53,39}, -{45,53,40}, -{45,53,41}, -{45,53,42}, -{45,53,43}, -{45,53,44}, -{45,53,45}, -{45,53,46}, -{45,53,47}, -{45,53,48}, -{45,53,49}, -{45,53,50}, -{45,53,51}, -{45,53,52}, -{45,53,53}, -{45,53,54}, -{45,53,55}, -{45,53,56}, -{45,54,-86}, -{45,54,-85}, -{45,54,-84}, -{45,54,-83}, -{45,54,-82}, -{45,54,-81}, -{45,54,-80}, -{45,54,-79}, -{45,54,-78}, -{45,54,-77}, -{45,54,-76}, -{45,54,-75}, -{45,54,-74}, -{45,54,-73}, -{45,54,-72}, -{45,54,-71}, -{45,54,-70}, -{45,54,-69}, -{45,54,-68}, -{45,54,-67}, -{45,54,-66}, -{45,54,-65}, -{45,54,-64}, -{45,54,-63}, -{45,54,-62}, -{45,54,-61}, -{45,54,-60}, -{45,54,-59}, -{45,54,-58}, -{45,54,-57}, -{45,54,-56}, -{45,54,-55}, -{45,54,-54}, -{45,54,-53}, -{45,54,-52}, -{45,54,-51}, -{45,54,-50}, -{45,54,-49}, -{45,54,-48}, -{45,54,-47}, -{45,54,-46}, -{45,54,-45}, -{45,54,-44}, -{45,54,-43}, -{45,54,-42}, -{45,54,-41}, -{45,54,-40}, -{45,54,-39}, -{45,54,-38}, -{45,54,-37}, -{45,54,-36}, -{45,54,-35}, -{45,54,-34}, -{45,54,-33}, -{45,54,-32}, -{45,54,-31}, -{45,54,-30}, -{45,54,-29}, -{45,54,-28}, -{45,54,-27}, -{45,54,-26}, -{45,54,-25}, -{45,54,-24}, -{45,54,-23}, -{45,54,-22}, -{45,54,-21}, -{45,54,-20}, -{45,54,-19}, -{45,54,-18}, -{45,54,-17}, -{45,54,-16}, -{45,54,-15}, -{45,54,-14}, -{45,54,-13}, -{45,54,-12}, -{45,54,-11}, -{45,54,-10}, -{45,54,-9}, -{45,54,-8}, -{45,54,-7}, -{45,54,-6}, -{45,54,-5}, -{45,54,-4}, -{45,54,-3}, -{45,54,-2}, -{45,54,-1}, -{45,54,0}, -{45,54,1}, -{45,54,2}, -{45,54,3}, -{45,54,4}, -{45,54,5}, -{45,54,6}, -{45,54,7}, -{45,54,8}, -{45,54,9}, -{45,54,10}, -{45,54,11}, -{45,54,12}, -{45,54,13}, -{45,54,14}, -{45,54,15}, -{45,54,16}, -{45,54,17}, -{45,54,18}, -{45,54,19}, -{45,54,20}, -{45,54,21}, -{45,54,22}, -{45,54,23}, -{45,54,24}, -{45,54,25}, -{45,54,26}, -{45,54,27}, -{45,54,28}, -{45,54,29}, -{45,54,30}, -{45,54,31}, -{45,54,32}, -{45,54,33}, -{45,54,34}, -{45,54,35}, -{45,54,36}, -{45,54,37}, -{45,54,38}, -{45,54,39}, -{45,54,40}, -{45,54,41}, -{45,54,42}, -{45,54,43}, -{45,54,44}, -{45,54,45}, -{45,54,46}, -{45,54,47}, -{45,54,48}, -{45,54,49}, -{45,54,50}, -{45,54,51}, -{45,54,52}, -{45,54,53}, -{45,54,54}, -{45,54,55}, -{45,54,56}, -{45,54,57}, -{45,55,-86}, -{45,55,-85}, -{45,55,-84}, -{45,55,-83}, -{45,55,-82}, -{45,55,-81}, -{45,55,-80}, -{45,55,-79}, -{45,55,-78}, -{45,55,-77}, -{45,55,-76}, -{45,55,-75}, -{45,55,-74}, -{45,55,-73}, -{45,55,-72}, -{45,55,-71}, -{45,55,-70}, -{45,55,-69}, -{45,55,-68}, -{45,55,-67}, -{45,55,-66}, -{45,55,-65}, -{45,55,-64}, -{45,55,-63}, -{45,55,-62}, -{45,55,-61}, -{45,55,-60}, -{45,55,-59}, -{45,55,-58}, -{45,55,-57}, -{45,55,-56}, -{45,55,-55}, -{45,55,-54}, -{45,55,-53}, -{45,55,-52}, -{45,55,-51}, -{45,55,-50}, -{45,55,-49}, -{45,55,-48}, -{45,55,-47}, -{45,55,-46}, -{45,55,-45}, -{45,55,-44}, -{45,55,-43}, -{45,55,-42}, -{45,55,-41}, -{45,55,-40}, -{45,55,-39}, -{45,55,-38}, -{45,55,-37}, -{45,55,-36}, -{45,55,-35}, -{45,55,-34}, -{45,55,-33}, -{45,55,-32}, -{45,55,-31}, -{45,55,-30}, -{45,55,-29}, -{45,55,-28}, -{45,55,-27}, -{45,55,-26}, -{45,55,-25}, -{45,55,-24}, -{45,55,-23}, -{45,55,-22}, -{45,55,-21}, -{45,55,-20}, -{45,55,-19}, -{45,55,-18}, -{45,55,-17}, -{45,55,-16}, -{45,55,-15}, -{45,55,-14}, -{45,55,-13}, -{45,55,-12}, -{45,55,-11}, -{45,55,-10}, -{45,55,-9}, -{45,55,-8}, -{45,55,-7}, -{45,55,-6}, -{45,55,-5}, -{45,55,-4}, -{45,55,-3}, -{45,55,-2}, -{45,55,-1}, -{45,55,0}, -{45,55,1}, -{45,55,2}, -{45,55,3}, -{45,55,4}, -{45,55,5}, -{45,55,6}, -{45,55,7}, -{45,55,8}, -{45,55,9}, -{45,55,10}, -{45,55,11}, -{45,55,12}, -{45,55,13}, -{45,55,14}, -{45,55,15}, -{45,55,16}, -{45,55,17}, -{45,55,18}, -{45,55,19}, -{45,55,20}, -{45,55,21}, -{45,55,22}, -{45,55,23}, -{45,55,24}, -{45,55,25}, -{45,55,26}, -{45,55,27}, -{45,55,28}, -{45,55,29}, -{45,55,30}, -{45,55,31}, -{45,55,32}, -{45,55,33}, -{45,55,34}, -{45,55,35}, -{45,55,36}, -{45,55,37}, -{45,55,38}, -{45,55,39}, -{45,55,40}, -{45,55,41}, -{45,55,42}, -{45,55,43}, -{45,55,44}, -{45,55,45}, -{45,55,46}, -{45,55,47}, -{45,55,48}, -{45,55,49}, -{45,55,50}, -{45,55,51}, -{45,55,52}, -{45,55,53}, -{45,55,54}, -{45,55,55}, -{45,55,56}, -{45,55,57}, -{45,56,-86}, -{45,56,-85}, -{45,56,-84}, -{45,56,-83}, -{45,56,-82}, -{45,56,-81}, -{45,56,-80}, -{45,56,-79}, -{45,56,-78}, -{45,56,-77}, -{45,56,-76}, -{45,56,-75}, -{45,56,-74}, -{45,56,-73}, -{45,56,-72}, -{45,56,-71}, -{45,56,-70}, -{45,56,-69}, -{45,56,-68}, -{45,56,-67}, -{45,56,-66}, -{45,56,-65}, -{45,56,-64}, -{45,56,-63}, -{45,56,-62}, -{45,56,-61}, -{45,56,-60}, -{45,56,-59}, -{45,56,-58}, -{45,56,-57}, -{45,56,-56}, -{45,56,-55}, -{45,56,-54}, -{45,56,-53}, -{45,56,-52}, -{45,56,-51}, -{45,56,-50}, -{45,56,-49}, -{45,56,-48}, -{45,56,-47}, -{45,56,-46}, -{45,56,-45}, -{45,56,-44}, -{45,56,-43}, -{45,56,-42}, -{45,56,-41}, -{45,56,-40}, -{45,56,-39}, -{45,56,-38}, -{45,56,-37}, -{45,56,-36}, -{45,56,-35}, -{45,56,-34}, -{45,56,-33}, -{45,56,-32}, -{45,56,-31}, -{45,56,-30}, -{45,56,-29}, -{45,56,-28}, -{45,56,-27}, -{45,56,-26}, -{45,56,-25}, -{45,56,-24}, -{45,56,-23}, -{45,56,-22}, -{45,56,-21}, -{45,56,-20}, -{45,56,-19}, -{45,56,-18}, -{45,56,-17}, -{45,56,-16}, -{45,56,-15}, -{45,56,-14}, -{45,56,-13}, -{45,56,-12}, -{45,56,-11}, -{45,56,-10}, -{45,56,-9}, -{45,56,-8}, -{45,56,-7}, -{45,56,-6}, -{45,56,-5}, -{45,56,-4}, -{45,56,-3}, -{45,56,-2}, -{45,56,-1}, -{45,56,0}, -{45,56,1}, -{45,56,2}, -{45,56,3}, -{45,56,4}, -{45,56,5}, -{45,56,6}, -{45,56,7}, -{45,56,8}, -{45,56,9}, -{45,56,10}, -{45,56,11}, -{45,56,12}, -{45,56,13}, -{45,56,14}, -{45,56,15}, -{45,56,16}, -{45,56,17}, -{45,56,18}, -{45,56,19}, -{45,56,20}, -{45,56,21}, -{45,56,22}, -{45,56,23}, -{45,56,24}, -{45,56,25}, -{45,56,26}, -{45,56,27}, -{45,56,28}, -{45,56,29}, -{45,56,30}, -{45,56,31}, -{45,56,32}, -{45,56,33}, -{45,56,34}, -{45,56,35}, -{45,56,36}, -{45,56,37}, -{45,56,38}, -{45,56,39}, -{45,56,40}, -{45,56,41}, -{45,56,42}, -{45,56,43}, -{45,56,44}, -{45,56,45}, -{45,56,46}, -{45,56,47}, -{45,56,48}, -{45,56,49}, -{45,56,50}, -{45,56,51}, -{45,56,52}, -{45,56,53}, -{45,56,54}, -{45,56,55}, -{45,56,56}, -{45,56,57}, -{45,57,-86}, -{45,57,-85}, -{45,57,-84}, -{45,57,-83}, -{45,57,-82}, -{45,57,-81}, -{45,57,-80}, -{45,57,-79}, -{45,57,-78}, -{45,57,-77}, -{45,57,-76}, -{45,57,-75}, -{45,57,-74}, -{45,57,-73}, -{45,57,-72}, -{45,57,-71}, -{45,57,-70}, -{45,57,-69}, -{45,57,-68}, -{45,57,-67}, -{45,57,-66}, -{45,57,-65}, -{45,57,-64}, -{45,57,-63}, -{45,57,-62}, -{45,57,-61}, -{45,57,-60}, -{45,57,-59}, -{45,57,-58}, -{45,57,-57}, -{45,57,-56}, -{45,57,-55}, -{45,57,-54}, -{45,57,-53}, -{45,57,-52}, -{45,57,-51}, -{45,57,-50}, -{45,57,-49}, -{45,57,-48}, -{45,57,-47}, -{45,57,-46}, -{45,57,-45}, -{45,57,-44}, -{45,57,-43}, -{45,57,-42}, -{45,57,-41}, -{45,57,-40}, -{45,57,-39}, -{45,57,-38}, -{45,57,-37}, -{45,57,-36}, -{45,57,-35}, -{45,57,-34}, -{45,57,-33}, -{45,57,-32}, -{45,57,-31}, -{45,57,-30}, -{45,57,-29}, -{45,57,-28}, -{45,57,-27}, -{45,57,-26}, -{45,57,-25}, -{45,57,-24}, -{45,57,-23}, -{45,57,-22}, -{45,57,-21}, -{45,57,-20}, -{45,57,-19}, -{45,57,-18}, -{45,57,-17}, -{45,57,-16}, -{45,57,-15}, -{45,57,-14}, -{45,57,-13}, -{45,57,-12}, -{45,57,-11}, -{45,57,-10}, -{45,57,-9}, -{45,57,-8}, -{45,57,-7}, -{45,57,-6}, -{45,57,-5}, -{45,57,-4}, -{45,57,-3}, -{45,57,-2}, -{45,57,-1}, -{45,57,0}, -{45,57,1}, -{45,57,2}, -{45,57,3}, -{45,57,4}, -{45,57,5}, -{45,57,6}, -{45,57,7}, -{45,57,8}, -{45,57,9}, -{45,57,10}, -{45,57,11}, -{45,57,12}, -{45,57,13}, -{45,57,14}, -{45,57,15}, -{45,57,16}, -{45,57,17}, -{45,57,18}, -{45,57,19}, -{45,57,20}, -{45,57,21}, -{45,57,22}, -{45,57,23}, -{45,57,24}, -{45,57,25}, -{45,57,26}, -{45,57,27}, -{45,57,28}, -{45,57,29}, -{45,57,30}, -{45,57,31}, -{45,57,32}, -{45,57,33}, -{45,57,34}, -{45,57,35}, -{45,57,36}, -{45,57,37}, -{45,57,38}, -{45,57,39}, -{45,57,40}, -{45,57,41}, -{45,57,42}, -{45,57,43}, -{45,57,44}, -{45,57,45}, -{45,57,46}, -{45,57,47}, -{45,57,48}, -{45,57,49}, -{45,57,50}, -{45,57,51}, -{45,57,52}, -{45,57,53}, -{45,57,54}, -{45,57,55}, -{45,57,56}, -{45,57,57}, -{45,58,-86}, -{45,58,-85}, -{45,58,-84}, -{45,58,-83}, -{45,58,-82}, -{45,58,-81}, -{45,58,-80}, -{45,58,-79}, -{45,58,-78}, -{45,58,-77}, -{45,58,-76}, -{45,58,-75}, -{45,58,-74}, -{45,58,-73}, -{45,58,-72}, -{45,58,-71}, -{45,58,-70}, -{45,58,-69}, -{45,58,-68}, -{45,58,-67}, -{45,58,-66}, -{45,58,-65}, -{45,58,-64}, -{45,58,-63}, -{45,58,-62}, -{45,58,-61}, -{45,58,-60}, -{45,58,-59}, -{45,58,-58}, -{45,58,-57}, -{45,58,-56}, -{45,58,-55}, -{45,58,-54}, -{45,58,-53}, -{45,58,-52}, -{45,58,-51}, -{45,58,-50}, -{45,58,-49}, -{45,58,-48}, -{45,58,-47}, -{45,58,-46}, -{45,58,-45}, -{45,58,-44}, -{45,58,-43}, -{45,58,-42}, -{45,58,-41}, -{45,58,-40}, -{45,58,-39}, -{45,58,-38}, -{45,58,-37}, -{45,58,-36}, -{45,58,-35}, -{45,58,-34}, -{45,58,-33}, -{45,58,-32}, -{45,58,-31}, -{45,58,-30}, -{45,58,-29}, -{45,58,-28}, -{45,58,-27}, -{45,58,-26}, -{45,58,-25}, -{45,58,-24}, -{45,58,-23}, -{45,58,-22}, -{45,58,-21}, -{45,58,-20}, -{45,58,-19}, -{45,58,-18}, -{45,58,-17}, -{45,58,-16}, -{45,58,-15}, -{45,58,-14}, -{45,58,-13}, -{45,58,-12}, -{45,58,-11}, -{45,58,-10}, -{45,58,-9}, -{45,58,-8}, -{45,58,-7}, -{45,58,-6}, -{45,58,-5}, -{45,58,-4}, -{45,58,-3}, -{45,58,-2}, -{45,58,-1}, -{45,58,0}, -{45,58,1}, -{45,58,2}, -{45,58,3}, -{45,58,4}, -{45,58,5}, -{45,58,6}, -{45,58,7}, -{45,58,8}, -{45,58,9}, -{45,58,10}, -{45,58,11}, -{45,58,12}, -{45,58,13}, -{45,58,14}, -{45,58,15}, -{45,58,16}, -{45,58,17}, -{45,58,18}, -{45,58,19}, -{45,58,20}, -{45,58,21}, -{45,58,22}, -{45,58,23}, -{45,58,24}, -{45,58,25}, -{45,58,26}, -{45,58,27}, -{45,58,28}, -{45,58,29}, -{45,58,30}, -{45,58,31}, -{45,58,32}, -{45,58,33}, -{45,58,34}, -{45,58,35}, -{45,58,36}, -{45,58,37}, -{45,58,38}, -{45,58,39}, -{45,58,40}, -{45,58,41}, -{45,58,42}, -{45,58,43}, -{45,58,44}, -{45,58,45}, -{45,58,46}, -{45,58,47}, -{45,58,48}, -{45,58,49}, -{45,58,50}, -{45,58,51}, -{45,58,52}, -{45,58,53}, -{45,58,54}, -{45,58,55}, -{45,58,56}, -{45,58,57}, -{45,59,-86}, -{45,59,-85}, -{45,59,-84}, -{45,59,-83}, -{45,59,-82}, -{45,59,-81}, -{45,59,-80}, -{45,59,-79}, -{45,59,-78}, -{45,59,-77}, -{45,59,-76}, -{45,59,-75}, -{45,59,-74}, -{45,59,-73}, -{45,59,-72}, -{45,59,-71}, -{45,59,-70}, -{45,59,-69}, -{45,59,-68}, -{45,59,-67}, -{45,59,-66}, -{45,59,-65}, -{45,59,-64}, -{45,59,-63}, -{45,59,-62}, -{45,59,-61}, -{45,59,-60}, -{45,59,-59}, -{45,59,-58}, -{45,59,-57}, -{45,59,-56}, -{45,59,-55}, -{45,59,-54}, -{45,59,-53}, -{45,59,-52}, -{45,59,-51}, -{45,59,-50}, -{45,59,-49}, -{45,59,-48}, -{45,59,-47}, -{45,59,-46}, -{45,59,-45}, -{45,59,-44}, -{45,59,-43}, -{45,59,-42}, -{45,59,-41}, -{45,59,-40}, -{45,59,-39}, -{45,59,-38}, -{45,59,-37}, -{45,59,-36}, -{45,59,-35}, -{45,59,-34}, -{45,59,-33}, -{45,59,-32}, -{45,59,-31}, -{45,59,-30}, -{45,59,-29}, -{45,59,-28}, -{45,59,-27}, -{45,59,-26}, -{45,59,-25}, -{45,59,-24}, -{45,59,-23}, -{45,59,-22}, -{45,59,-21}, -{45,59,-20}, -{45,59,-19}, -{45,59,-18}, -{45,59,-17}, -{45,59,-16}, -{45,59,-15}, -{45,59,-14}, -{45,59,-13}, -{45,59,-12}, -{45,59,-11}, -{45,59,-10}, -{45,59,-9}, -{45,59,-8}, -{45,59,-7}, -{45,59,-6}, -{45,59,-5}, -{45,59,-4}, -{45,59,-3}, -{45,59,-2}, -{45,59,-1}, -{45,59,0}, -{45,59,1}, -{45,59,2}, -{45,59,3}, -{45,59,4}, -{45,59,5}, -{45,59,6}, -{45,59,7}, -{45,59,8}, -{45,59,9}, -{45,59,10}, -{45,59,11}, -{45,59,12}, -{45,59,13}, -{45,59,14}, -{45,59,15}, -{45,59,16}, -{45,59,17}, -{45,59,18}, -{45,59,19}, -{45,59,20}, -{45,59,21}, -{45,59,22}, -{45,59,23}, -{45,59,24}, -{45,59,25}, -{45,59,26}, -{45,59,27}, -{45,59,28}, -{45,59,29}, -{45,59,30}, -{45,59,31}, -{45,59,32}, -{45,59,33}, -{45,59,34}, -{45,59,35}, -{45,59,36}, -{45,59,37}, -{45,59,38}, -{45,59,39}, -{45,59,40}, -{45,59,41}, -{45,59,42}, -{45,59,43}, -{45,59,44}, -{45,59,45}, -{45,59,46}, -{45,59,47}, -{45,59,48}, -{45,59,49}, -{45,59,50}, -{45,59,51}, -{45,59,52}, -{45,59,53}, -{45,59,54}, -{45,59,55}, -{45,59,56}, -{45,59,57}, -{45,60,-86}, -{45,60,-85}, -{45,60,-84}, -{45,60,-83}, -{45,60,-82}, -{45,60,-81}, -{45,60,-80}, -{45,60,-79}, -{45,60,-78}, -{45,60,-77}, -{45,60,-76}, -{45,60,-75}, -{45,60,-74}, -{45,60,-73}, -{45,60,-72}, -{45,60,-71}, -{45,60,-70}, -{45,60,-69}, -{45,60,-68}, -{45,60,-67}, -{45,60,-66}, -{45,60,-65}, -{45,60,-64}, -{45,60,-63}, -{45,60,-62}, -{45,60,-61}, -{45,60,-60}, -{45,60,-59}, -{45,60,-58}, -{45,60,-57}, -{45,60,-56}, -{45,60,-55}, -{45,60,-54}, -{45,60,-53}, -{45,60,-52}, -{45,60,-51}, -{45,60,-50}, -{45,60,-49}, -{45,60,-48}, -{45,60,-47}, -{45,60,-46}, -{45,60,-45}, -{45,60,-44}, -{45,60,-43}, -{45,60,-42}, -{45,60,-41}, -{45,60,-40}, -{45,60,-39}, -{45,60,-38}, -{45,60,-37}, -{45,60,-36}, -{45,60,-35}, -{45,60,-34}, -{45,60,-33}, -{45,60,-32}, -{45,60,-31}, -{45,60,-30}, -{45,60,-29}, -{45,60,-28}, -{45,60,-27}, -{45,60,-26}, -{45,60,-25}, -{45,60,-24}, -{45,60,-23}, -{45,60,-22}, -{45,60,-21}, -{45,60,-20}, -{45,60,-19}, -{45,60,-18}, -{45,60,-17}, -{45,60,-16}, -{45,60,-15}, -{45,60,-14}, -{45,60,-13}, -{45,60,-12}, -{45,60,-11}, -{45,60,-10}, -{45,60,-9}, -{45,60,-8}, -{45,60,-7}, -{45,60,-6}, -{45,60,-5}, -{45,60,-4}, -{45,60,-3}, -{45,60,-2}, -{45,60,-1}, -{45,60,0}, -{45,60,1}, -{45,60,2}, -{45,60,3}, -{45,60,4}, -{45,60,5}, -{45,60,6}, -{45,60,7}, -{45,60,8}, -{45,60,9}, -{45,60,10}, -{45,60,11}, -{45,60,12}, -{45,60,13}, -{45,60,14}, -{45,60,15}, -{45,60,16}, -{45,60,17}, -{45,60,18}, -{45,60,19}, -{45,60,20}, -{45,60,21}, -{45,60,22}, -{45,60,23}, -{45,60,24}, -{45,60,25}, -{45,60,26}, -{45,60,27}, -{45,60,28}, -{45,60,29}, -{45,60,30}, -{45,60,31}, -{45,60,32}, -{45,60,33}, -{45,60,34}, -{45,60,35}, -{45,60,36}, -{45,60,37}, -{45,60,38}, -{45,60,39}, -{45,60,40}, -{45,60,41}, -{45,60,42}, -{45,60,43}, -{45,60,44}, -{45,60,45}, -{45,60,46}, -{45,60,47}, -{45,60,48}, -{45,60,49}, -{45,60,50}, -{45,60,51}, -{45,60,52}, -{45,60,53}, -{45,60,54}, -{45,60,55}, -{45,60,56}, -{45,60,57}, -{45,61,-86}, -{45,61,-85}, -{45,61,-84}, -{45,61,-83}, -{45,61,-82}, -{45,61,-81}, -{45,61,-80}, -{45,61,-79}, -{45,61,-78}, -{45,61,-77}, -{45,61,-76}, -{45,61,-75}, -{45,61,-74}, -{45,61,-73}, -{45,61,-72}, -{45,61,-71}, -{45,61,-70}, -{45,61,-69}, -{45,61,-68}, -{45,61,-67}, -{45,61,-66}, -{45,61,-65}, -{45,61,-64}, -{45,61,-63}, -{45,61,-62}, -{45,61,-61}, -{45,61,-60}, -{45,61,-59}, -{45,61,-58}, -{45,61,-57}, -{45,61,-56}, -{45,61,-55}, -{45,61,-54}, -{45,61,-53}, -{45,61,-52}, -{45,61,-51}, -{45,61,-50}, -{45,61,-49}, -{45,61,-48}, -{45,61,-47}, -{45,61,-46}, -{45,61,-45}, -{45,61,-44}, -{45,61,-43}, -{45,61,-42}, -{45,61,-41}, -{45,61,-40}, -{45,61,-39}, -{45,61,-38}, -{45,61,-37}, -{45,61,-36}, -{45,61,-35}, -{45,61,-34}, -{45,61,-33}, -{45,61,-32}, -{45,61,-31}, -{45,61,-30}, -{45,61,-29}, -{45,61,-28}, -{45,61,-27}, -{45,61,-26}, -{45,61,-25}, -{45,61,-24}, -{45,61,-23}, -{45,61,-22}, -{45,61,-21}, -{45,61,-20}, -{45,61,-19}, -{45,61,-18}, -{45,61,-17}, -{45,61,-16}, -{45,61,-15}, -{45,61,-14}, -{45,61,-13}, -{45,61,-12}, -{45,61,-11}, -{45,61,-10}, -{45,61,-9}, -{45,61,-8}, -{45,61,-7}, -{45,61,-6}, -{45,61,-5}, -{45,61,-4}, -{45,61,-3}, -{45,61,-2}, -{45,61,-1}, -{45,61,0}, -{45,61,1}, -{45,61,2}, -{45,61,3}, -{45,61,4}, -{45,61,5}, -{45,61,6}, -{45,61,7}, -{45,61,8}, -{45,61,9}, -{45,61,10}, -{45,61,11}, -{45,61,12}, -{45,61,13}, -{45,61,14}, -{45,61,15}, -{45,61,16}, -{45,61,17}, -{45,61,18}, -{45,61,19}, -{45,61,20}, -{45,61,21}, -{45,61,22}, -{45,61,23}, -{45,61,24}, -{45,61,25}, -{45,61,26}, -{45,61,27}, -{45,61,28}, -{45,61,29}, -{45,61,30}, -{45,61,31}, -{45,61,32}, -{45,61,33}, -{45,61,34}, -{45,61,35}, -{45,61,36}, -{45,61,37}, -{45,61,38}, -{45,61,39}, -{45,61,40}, -{45,61,41}, -{45,61,42}, -{45,61,43}, -{45,61,44}, -{45,61,45}, -{45,61,46}, -{45,61,47}, -{45,61,48}, -{45,61,49}, -{45,61,50}, -{45,61,51}, -{45,61,52}, -{45,61,53}, -{45,61,54}, -{45,61,55}, -{45,61,56}, -{45,61,57}, -{45,61,58}, -{45,62,-86}, -{45,62,-85}, -{45,62,-84}, -{45,62,-83}, -{45,62,-82}, -{45,62,-81}, -{45,62,-80}, -{45,62,-79}, -{45,62,-78}, -{45,62,-77}, -{45,62,-76}, -{45,62,-75}, -{45,62,-74}, -{45,62,-73}, -{45,62,-72}, -{45,62,-71}, -{45,62,-70}, -{45,62,-69}, -{45,62,-68}, -{45,62,-67}, -{45,62,-66}, -{45,62,-65}, -{45,62,-64}, -{45,62,-63}, -{45,62,-62}, -{45,62,-61}, -{45,62,-60}, -{45,62,-59}, -{45,62,-58}, -{45,62,-57}, -{45,62,-56}, -{45,62,-55}, -{45,62,-54}, -{45,62,-53}, -{45,62,-52}, -{45,62,-51}, -{45,62,-50}, -{45,62,-49}, -{45,62,-48}, -{45,62,-47}, -{45,62,-46}, -{45,62,-45}, -{45,62,-44}, -{45,62,-43}, -{45,62,-42}, -{45,62,-41}, -{45,62,-40}, -{45,62,-39}, -{45,62,-38}, -{45,62,-37}, -{45,62,-36}, -{45,62,-35}, -{45,62,-34}, -{45,62,-33}, -{45,62,-32}, -{45,62,-31}, -{45,62,-30}, -{45,62,-29}, -{45,62,-28}, -{45,62,-27}, -{45,62,-26}, -{45,62,-25}, -{45,62,-24}, -{45,62,-23}, -{45,62,-22}, -{45,62,-21}, -{45,62,-20}, -{45,62,-19}, -{45,62,-18}, -{45,62,-17}, -{45,62,-16}, -{45,62,-15}, -{45,62,-14}, -{45,62,-13}, -{45,62,-12}, -{45,62,-11}, -{45,62,-10}, -{45,62,-9}, -{45,62,-8}, -{45,62,-7}, -{45,62,-6}, -{45,62,-5}, -{45,62,-4}, -{45,62,-3}, -{45,62,-2}, -{45,62,-1}, -{45,62,0}, -{45,62,1}, -{45,62,2}, -{45,62,3}, -{45,62,4}, -{45,62,5}, -{45,62,6}, -{45,62,7}, -{45,62,8}, -{45,62,9}, -{45,62,10}, -{45,62,11}, -{45,62,12}, -{45,62,13}, -{45,62,14}, -{45,62,15}, -{45,62,16}, -{45,62,17}, -{45,62,18}, -{45,62,19}, -{45,62,20}, -{45,62,21}, -{45,62,22}, -{45,62,23}, -{45,62,24}, -{45,62,25}, -{45,62,26}, -{45,62,27}, -{45,62,28}, -{45,62,29}, -{45,62,30}, -{45,62,31}, -{45,62,32}, -{45,62,33}, -{45,62,34}, -{45,62,35}, -{45,62,36}, -{45,62,37}, -{45,62,38}, -{45,62,39}, -{45,62,40}, -{45,62,41}, -{45,62,42}, -{45,62,43}, -{45,62,44}, -{45,62,45}, -{45,62,46}, -{45,62,47}, -{45,62,48}, -{45,62,49}, -{45,62,50}, -{45,62,51}, -{45,62,52}, -{45,62,53}, -{45,62,54}, -{45,62,55}, -{45,62,56}, -{45,62,57}, -{45,62,58}, -{45,63,-86}, -{45,63,-85}, -{45,63,-84}, -{45,63,-83}, -{45,63,-82}, -{45,63,-81}, -{45,63,-80}, -{45,63,-79}, -{45,63,-78}, -{45,63,-77}, -{45,63,-76}, -{45,63,-75}, -{45,63,-74}, -{45,63,-73}, -{45,63,-72}, -{45,63,-71}, -{45,63,-70}, -{45,63,-69}, -{45,63,-68}, -{45,63,-67}, -{45,63,-66}, -{45,63,-65}, -{45,63,-64}, -{45,63,-63}, -{45,63,-62}, -{45,63,-61}, -{45,63,-60}, -{45,63,-59}, -{45,63,-58}, -{45,63,-57}, -{45,63,-56}, -{45,63,-55}, -{45,63,-54}, -{45,63,-53}, -{45,63,-52}, -{45,63,-51}, -{45,63,-50}, -{45,63,-49}, -{45,63,-48}, -{45,63,-47}, -{45,63,-46}, -{45,63,-45}, -{45,63,-44}, -{45,63,-43}, -{45,63,-42}, -{45,63,-41}, -{45,63,-40}, -{45,63,-39}, -{45,63,-38}, -{45,63,-37}, -{45,63,-36}, -{45,63,-35}, -{45,63,-34}, -{45,63,-33}, -{45,63,-32}, -{45,63,-31}, -{45,63,-30}, -{45,63,-29}, -{45,63,-28}, -{45,63,-27}, -{45,63,-26}, -{45,63,-25}, -{45,63,-24}, -{45,63,-23}, -{45,63,-22}, -{45,63,-21}, -{45,63,-20}, -{45,63,-19}, -{45,63,-18}, -{45,63,-17}, -{45,63,-16}, -{45,63,-15}, -{45,63,-14}, -{45,63,-13}, -{45,63,-12}, -{45,63,-11}, -{45,63,-10}, -{45,63,-9}, -{45,63,-8}, -{45,63,-7}, -{45,63,-6}, -{45,63,-5}, -{45,63,-4}, -{45,63,-3}, -{45,63,-2}, -{45,63,-1}, -{45,63,0}, -{45,63,1}, -{45,63,2}, -{45,63,3}, -{45,63,4}, -{45,63,5}, -{45,63,6}, -{45,63,7}, -{45,63,8}, -{45,63,9}, -{45,63,10}, -{45,63,11}, -{45,63,12}, -{45,63,13}, -{45,63,14}, -{45,63,15}, -{45,63,16}, -{45,63,17}, -{45,63,18}, -{45,63,19}, -{45,63,20}, -{45,63,21}, -{45,63,22}, -{45,63,23}, -{45,63,24}, -{45,63,25}, -{45,63,26}, -{45,63,27}, -{45,63,28}, -{45,63,29}, -{45,63,30}, -{45,63,31}, -{45,63,32}, -{45,63,33}, -{45,63,34}, -{45,63,35}, -{45,63,36}, -{45,63,37}, -{45,63,38}, -{45,63,39}, -{45,63,40}, -{45,63,41}, -{45,63,42}, -{45,63,43}, -{45,63,44}, -{45,63,45}, -{45,63,46}, -{45,63,47}, -{45,63,48}, -{45,63,49}, -{45,63,50}, -{45,63,51}, -{45,63,52}, -{45,63,53}, -{45,63,54}, -{45,63,55}, -{45,63,56}, -{45,63,57}, -{45,63,58}, -{45,64,-86}, -{45,64,-85}, -{45,64,-84}, -{45,64,-83}, -{45,64,-82}, -{45,64,-81}, -{45,64,-80}, -{45,64,-79}, -{45,64,-78}, -{45,64,-77}, -{45,64,-76}, -{45,64,-75}, -{45,64,-74}, -{45,64,-73}, -{45,64,-72}, -{45,64,-71}, -{45,64,-70}, -{45,64,-69}, -{45,64,-68}, -{45,64,-67}, -{45,64,-66}, -{45,64,-65}, -{45,64,-64}, -{45,64,-63}, -{45,64,-62}, -{45,64,-61}, -{45,64,-60}, -{45,64,-59}, -{45,64,-58}, -{45,64,-57}, -{45,64,-56}, -{45,64,-55}, -{45,64,-54}, -{45,64,-53}, -{45,64,-52}, -{45,64,-51}, -{45,64,-50}, -{45,64,-49}, -{45,64,-48}, -{45,64,-47}, -{45,64,-46}, -{45,64,-45}, -{45,64,-44}, -{45,64,-43}, -{45,64,-42}, -{45,64,-41}, -{45,64,-40}, -{45,64,-39}, -{45,64,-38}, -{45,64,-37}, -{45,64,-36}, -{45,64,-35}, -{45,64,-34}, -{45,64,-33}, -{45,64,-32}, -{45,64,-31}, -{45,64,-30}, -{45,64,-29}, -{45,64,-28}, -{45,64,-27}, -{45,64,-26}, -{45,64,-25}, -{45,64,-24}, -{45,64,-23}, -{45,64,-22}, -{45,64,-21}, -{45,64,-20}, -{45,64,-19}, -{45,64,-18}, -{45,64,-17}, -{45,64,-16}, -{45,64,-15}, -{45,64,-14}, -{45,64,-13}, -{45,64,-12}, -{45,64,-11}, -{45,64,-10}, -{45,64,-9}, -{45,64,-8}, -{45,64,-7}, -{45,64,-6}, -{45,64,-5}, -{45,64,-4}, -{45,64,-3}, -{45,64,-2}, -{45,64,-1}, -{45,64,0}, -{45,64,1}, -{45,64,2}, -{45,64,3}, -{45,64,4}, -{45,64,5}, -{45,64,6}, -{45,64,7}, -{45,64,8}, -{45,64,9}, -{45,64,10}, -{45,64,11}, -{45,64,12}, -{45,64,13}, -{45,64,14}, -{45,64,15}, -{45,64,16}, -{45,64,17}, -{45,64,18}, -{45,64,19}, -{45,64,20}, -{45,64,21}, -{45,64,22}, -{45,64,23}, -{45,64,24}, -{45,64,25}, -{45,64,26}, -{45,64,27}, -{45,64,28}, -{45,64,29}, -{45,64,30}, -{45,64,31}, -{45,64,32}, -{45,64,33}, -{45,64,34}, -{45,64,35}, -{45,64,36}, -{45,64,37}, -{45,64,38}, -{45,64,39}, -{45,64,40}, -{45,64,41}, -{45,64,42}, -{45,64,43}, -{45,64,44}, -{45,64,45}, -{45,64,46}, -{45,64,47}, -{45,64,48}, -{45,64,49}, -{45,64,50}, -{45,64,51}, -{45,64,52}, -{45,64,53}, -{45,64,54}, -{45,64,55}, -{45,64,56}, -{45,64,57}, -{45,64,58}, -{45,65,-86}, -{45,65,-85}, -{45,65,-84}, -{45,65,-83}, -{45,65,-82}, -{45,65,-81}, -{45,65,-80}, -{45,65,-79}, -{45,65,-78}, -{45,65,-77}, -{45,65,-76}, -{45,65,-75}, -{45,65,-74}, -{45,65,-73}, -{45,65,-72}, -{45,65,-71}, -{45,65,-70}, -{45,65,-69}, -{45,65,-68}, -{45,65,-67}, -{45,65,-66}, -{45,65,-65}, -{45,65,-64}, -{45,65,-63}, -{45,65,-62}, -{45,65,-61}, -{45,65,-60}, -{45,65,-59}, -{45,65,-58}, -{45,65,-57}, -{45,65,-56}, -{45,65,-55}, -{45,65,-54}, -{45,65,-53}, -{45,65,-52}, -{45,65,-51}, -{45,65,-50}, -{45,65,-49}, -{45,65,-48}, -{45,65,-47}, -{45,65,-46}, -{45,65,-45}, -{45,65,-44}, -{45,65,-43}, -{45,65,-42}, -{45,65,-41}, -{45,65,-40}, -{45,65,-39}, -{45,65,-38}, -{45,65,-37}, -{45,65,-36}, -{45,65,-35}, -{45,65,-34}, -{45,65,-33}, -{45,65,-32}, -{45,65,-31}, -{45,65,-30}, -{45,65,-29}, -{45,65,-28}, -{45,65,-27}, -{45,65,-26}, -{45,65,-25}, -{45,65,-24}, -{45,65,-23}, -{45,65,-22}, -{45,65,-21}, -{45,65,-20}, -{45,65,-19}, -{45,65,-18}, -{45,65,-17}, -{45,65,-16}, -{45,65,-15}, -{45,65,-14}, -{45,65,-13}, -{45,65,-12}, -{45,65,-11}, -{45,65,-10}, -{45,65,-9}, -{45,65,-8}, -{45,65,-7}, -{45,65,-6}, -{45,65,-5}, -{45,65,-4}, -{45,65,-3}, -{45,65,-2}, -{45,65,-1}, -{45,65,0}, -{45,65,1}, -{45,65,2}, -{45,65,3}, -{45,65,4}, -{45,65,5}, -{45,65,6}, -{45,65,7}, -{45,65,8}, -{45,65,9}, -{45,65,10}, -{45,65,11}, -{45,65,12}, -{45,65,13}, -{45,65,14}, -{45,65,15}, -{45,65,16}, -{45,65,17}, -{45,65,18}, -{45,65,19}, -{45,65,20}, -{45,65,21}, -{45,65,22}, -{45,65,23}, -{45,65,24}, -{45,65,25}, -{45,65,26}, -{45,65,27}, -{45,65,28}, -{45,65,29}, -{45,65,30}, -{45,65,31}, -{45,65,32}, -{45,65,33}, -{45,65,34}, -{45,65,35}, -{45,65,36}, -{45,65,37}, -{45,65,38}, -{45,65,39}, -{45,65,40}, -{45,65,41}, -{45,65,42}, -{45,65,43}, -{45,65,44}, -{45,65,45}, -{45,65,46}, -{45,65,47}, -{45,65,48}, -{45,65,49}, -{45,65,50}, -{45,65,51}, -{45,65,52}, -{45,65,53}, -{45,65,54}, -{45,65,55}, -{45,65,56}, -{45,65,57}, -{45,65,58}, -{45,66,-86}, -{45,66,-85}, -{45,66,-84}, -{45,66,-83}, -{45,66,-82}, -{45,66,-81}, -{45,66,-80}, -{45,66,-79}, -{45,66,-78}, -{45,66,-77}, -{45,66,-76}, -{45,66,-75}, -{45,66,-74}, -{45,66,-73}, -{45,66,-72}, -{45,66,-71}, -{45,66,-70}, -{45,66,-69}, -{45,66,-68}, -{45,66,-67}, -{45,66,-66}, -{45,66,-65}, -{45,66,-64}, -{45,66,-63}, -{45,66,-62}, -{45,66,-61}, -{45,66,-60}, -{45,66,-59}, -{45,66,-58}, -{45,66,-57}, -{45,66,-56}, -{45,66,-55}, -{45,66,-54}, -{45,66,-53}, -{45,66,-52}, -{45,66,-51}, -{45,66,-50}, -{45,66,-49}, -{45,66,-48}, -{45,66,-47}, -{45,66,-46}, -{45,66,-45}, -{45,66,-44}, -{45,66,-43}, -{45,66,-42}, -{45,66,-41}, -{45,66,-40}, -{45,66,-39}, -{45,66,-38}, -{45,66,-37}, -{45,66,-36}, -{45,66,-35}, -{45,66,-34}, -{45,66,-33}, -{45,66,-32}, -{45,66,-31}, -{45,66,-30}, -{45,66,-29}, -{45,66,-28}, -{45,66,-27}, -{45,66,-26}, -{45,66,-25}, -{45,66,-24}, -{45,66,-23}, -{45,66,-22}, -{45,66,-21}, -{45,66,-20}, -{45,66,-19}, -{45,66,-18}, -{45,66,-17}, -{45,66,-16}, -{45,66,-15}, -{45,66,-14}, -{45,66,-13}, -{45,66,-12}, -{45,66,-11}, -{45,66,-10}, -{45,66,-9}, -{45,66,-8}, -{45,66,-7}, -{45,66,-6}, -{45,66,-5}, -{45,66,-4}, -{45,66,-3}, -{45,66,-2}, -{45,66,-1}, -{45,66,0}, -{45,66,1}, -{45,66,2}, -{45,66,3}, -{45,66,4}, -{45,66,5}, -{45,66,6}, -{45,66,7}, -{45,66,8}, -{45,66,9}, -{45,66,10}, -{45,66,11}, -{45,66,12}, -{45,66,13}, -{45,66,14}, -{45,66,15}, -{45,66,16}, -{45,66,17}, -{45,66,18}, -{45,66,19}, -{45,66,20}, -{45,66,21}, -{45,66,22}, -{45,66,23}, -{45,66,24}, -{45,66,25}, -{45,66,26}, -{45,66,27}, -{45,66,28}, -{45,66,29}, -{45,66,30}, -{45,66,31}, -{45,66,32}, -{45,66,33}, -{45,66,34}, -{45,66,35}, -{45,66,36}, -{45,66,37}, -{45,66,38}, -{45,66,39}, -{45,66,40}, -{45,66,41}, -{45,66,42}, -{45,66,43}, -{45,66,44}, -{45,66,45}, -{45,66,46}, -{45,66,47}, -{45,66,48}, -{45,66,49}, -{45,66,50}, -{45,66,51}, -{45,66,52}, -{45,66,53}, -{45,66,54}, -{45,66,55}, -{45,66,56}, -{45,66,57}, -{45,66,58}, -{45,67,-86}, -{45,67,-85}, -{45,67,-84}, -{45,67,-83}, -{45,67,-82}, -{45,67,-81}, -{45,67,-80}, -{45,67,-79}, -{45,67,-78}, -{45,67,-77}, -{45,67,-76}, -{45,67,-75}, -{45,67,-74}, -{45,67,-73}, -{45,67,-72}, -{45,67,-71}, -{45,67,-70}, -{45,67,-69}, -{45,67,-68}, -{45,67,-67}, -{45,67,-66}, -{45,67,-65}, -{45,67,-64}, -{45,67,-63}, -{45,67,-62}, -{45,67,-61}, -{45,67,-60}, -{45,67,-59}, -{45,67,-58}, -{45,67,-57}, -{45,67,-56}, -{45,67,-55}, -{45,67,-54}, -{45,67,-53}, -{45,67,-52}, -{45,67,-51}, -{45,67,-50}, -{45,67,-49}, -{45,67,-48}, -{45,67,-47}, -{45,67,-46}, -{45,67,-45}, -{45,67,-44}, -{45,67,-43}, -{45,67,-42}, -{45,67,-41}, -{45,67,-40}, -{45,67,-39}, -{45,67,-38}, -{45,67,-37}, -{45,67,-36}, -{45,67,-35}, -{45,67,-34}, -{45,67,-33}, -{45,67,-32}, -{45,67,-31}, -{45,67,-30}, -{45,67,-29}, -{45,67,-28}, -{45,67,-27}, -{45,67,-26}, -{45,67,-25}, -{45,67,-24}, -{45,67,-23}, -{45,67,-22}, -{45,67,-21}, -{45,67,-20}, -{45,67,-19}, -{45,67,-18}, -{45,67,-17}, -{45,67,-16}, -{45,67,-15}, -{45,67,-14}, -{45,67,-13}, -{45,67,-12}, -{45,67,-11}, -{45,67,-10}, -{45,67,-9}, -{45,67,-8}, -{45,67,-7}, -{45,67,-6}, -{45,67,-5}, -{45,67,-4}, -{45,67,-3}, -{45,67,-2}, -{45,67,-1}, -{45,67,0}, -{45,67,1}, -{45,67,2}, -{45,67,3}, -{45,67,4}, -{45,67,5}, -{45,67,6}, -{45,67,7}, -{45,67,8}, -{45,67,9}, -{45,67,10}, -{45,67,11}, -{45,67,12}, -{45,67,13}, -{45,67,14}, -{45,67,15}, -{45,67,16}, -{45,67,17}, -{45,67,18}, -{45,67,19}, -{45,67,20}, -{45,67,21}, -{45,67,22}, -{45,67,23}, -{45,67,24}, -{45,67,25}, -{45,67,26}, -{45,67,27}, -{45,67,28}, -{45,67,29}, -{45,67,30}, -{45,67,31}, -{45,67,32}, -{45,67,33}, -{45,67,34}, -{45,67,35}, -{45,67,36}, -{45,67,37}, -{45,67,38}, -{45,67,39}, -{45,67,40}, -{45,67,41}, -{45,67,42}, -{45,67,43}, -{45,67,44}, -{45,67,45}, -{45,67,46}, -{45,67,47}, -{45,67,48}, -{45,67,49}, -{45,67,50}, -{45,67,51}, -{45,67,52}, -{45,67,53}, -{45,67,54}, -{45,67,55}, -{45,67,56}, -{45,67,57}, -{45,67,58}, -{45,68,-86}, -{45,68,-85}, -{45,68,-84}, -{45,68,-83}, -{45,68,-82}, -{45,68,-81}, -{45,68,-80}, -{45,68,-79}, -{45,68,-78}, -{45,68,-77}, -{45,68,-76}, -{45,68,-75}, -{45,68,-74}, -{45,68,-73}, -{45,68,-72}, -{45,68,-71}, -{45,68,-70}, -{45,68,-69}, -{45,68,-68}, -{45,68,-67}, -{45,68,-66}, -{45,68,-65}, -{45,68,-64}, -{45,68,-63}, -{45,68,-62}, -{45,68,-61}, -{45,68,-60}, -{45,68,-59}, -{45,68,-58}, -{45,68,-57}, -{45,68,-56}, -{45,68,-55}, -{45,68,-54}, -{45,68,-53}, -{45,68,-52}, -{45,68,-51}, -{45,68,-50}, -{45,68,-49}, -{45,68,-48}, -{45,68,-47}, -{45,68,-46}, -{45,68,-45}, -{45,68,-44}, -{45,68,-43}, -{45,68,-42}, -{45,68,-41}, -{45,68,-40}, -{45,68,-39}, -{45,68,-38}, -{45,68,-37}, -{45,68,-36}, -{45,68,-35}, -{45,68,-34}, -{45,68,-33}, -{45,68,-32}, -{45,68,-31}, -{45,68,-30}, -{45,68,-29}, -{45,68,-28}, -{45,68,-27}, -{45,68,-26}, -{45,68,-25}, -{45,68,-24}, -{45,68,-23}, -{45,68,-22}, -{45,68,-21}, -{45,68,-20}, -{45,68,-19}, -{45,68,-18}, -{45,68,-17}, -{45,68,-16}, -{45,68,-15}, -{45,68,-14}, -{45,68,-13}, -{45,68,-12}, -{45,68,-11}, -{45,68,-10}, -{45,68,-9}, -{45,68,-8}, -{45,68,-7}, -{45,68,-6}, -{45,68,-5}, -{45,68,-4}, -{45,68,-3}, -{45,68,-2}, -{45,68,-1}, -{45,68,0}, -{45,68,1}, -{45,68,2}, -{45,68,3}, -{45,68,4}, -{45,68,5}, -{45,68,6}, -{45,68,7}, -{45,68,8}, -{45,68,9}, -{45,68,10}, -{45,68,11}, -{45,68,12}, -{45,68,13}, -{45,68,14}, -{45,68,15}, -{45,68,16}, -{45,68,17}, -{45,68,18}, -{45,68,19}, -{45,68,20}, -{45,68,21}, -{45,68,22}, -{45,68,23}, -{45,68,24}, -{45,68,25}, -{45,68,26}, -{45,68,27}, -{45,68,28}, -{45,68,29}, -{45,68,30}, -{45,68,31}, -{45,68,32}, -{45,68,33}, -{45,68,34}, -{45,68,35}, -{45,68,36}, -{45,68,37}, -{45,68,38}, -{45,68,39}, -{45,68,40}, -{45,68,41}, -{45,68,42}, -{45,68,43}, -{45,68,44}, -{45,68,45}, -{45,68,46}, -{45,68,47}, -{45,68,48}, -{45,68,49}, -{45,68,50}, -{45,68,51}, -{45,68,52}, -{45,68,53}, -{45,68,54}, -{45,68,55}, -{45,68,56}, -{45,68,57}, -{45,68,58}, -{45,68,59}, -{45,69,-86}, -{45,69,-85}, -{45,69,-84}, -{45,69,-83}, -{45,69,-82}, -{45,69,-81}, -{45,69,-80}, -{45,69,-79}, -{45,69,-78}, -{45,69,-77}, -{45,69,-76}, -{45,69,-75}, -{45,69,-74}, -{45,69,-73}, -{45,69,-72}, -{45,69,-71}, -{45,69,-70}, -{45,69,-69}, -{45,69,-68}, -{45,69,-67}, -{45,69,-66}, -{45,69,-65}, -{45,69,-64}, -{45,69,-63}, -{45,69,-62}, -{45,69,-61}, -{45,69,-60}, -{45,69,-59}, -{45,69,-58}, -{45,69,-57}, -{45,69,-56}, -{45,69,-55}, -{45,69,-54}, -{45,69,-53}, -{45,69,-52}, -{45,69,-51}, -{45,69,-50}, -{45,69,-49}, -{45,69,-48}, -{45,69,-47}, -{45,69,-46}, -{45,69,-45}, -{45,69,-44}, -{45,69,-43}, -{45,69,-42}, -{45,69,-41}, -{45,69,-40}, -{45,69,-39}, -{45,69,-38}, -{45,69,-37}, -{45,69,-36}, -{45,69,-35}, -{45,69,-34}, -{45,69,-33}, -{45,69,-32}, -{45,69,-31}, -{45,69,-30}, -{45,69,-29}, -{45,69,-28}, -{45,69,-27}, -{45,69,-26}, -{45,69,-25}, -{45,69,-24}, -{45,69,-23}, -{45,69,-22}, -{45,69,-21}, -{45,69,-20}, -{45,69,-19}, -{45,69,-18}, -{45,69,-17}, -{45,69,-16}, -{45,69,-15}, -{45,69,-14}, -{45,69,-13}, -{45,69,-12}, -{45,69,-11}, -{45,69,-10}, -{45,69,-9}, -{45,69,-8}, -{45,69,-7}, -{45,69,-6}, -{45,69,-5}, -{45,69,-4}, -{45,69,-3}, -{45,69,-2}, -{45,69,-1}, -{45,69,0}, -{45,69,1}, -{45,69,2}, -{45,69,3}, -{45,69,4}, -{45,69,5}, -{45,69,6}, -{45,69,7}, -{45,69,8}, -{45,69,9}, -{45,69,10}, -{45,69,11}, -{45,69,12}, -{45,69,13}, -{45,69,14}, -{45,69,15}, -{45,69,16}, -{45,69,17}, -{45,69,18}, -{45,69,19}, -{45,69,20}, -{45,69,21}, -{45,69,22}, -{45,69,23}, -{45,69,24}, -{45,69,25}, -{45,69,26}, -{45,69,27}, -{45,69,28}, -{45,69,29}, -{45,69,30}, -{45,69,31}, -{45,69,32}, -{45,69,33}, -{45,69,34}, -{45,69,35}, -{45,69,36}, -{45,69,37}, -{45,69,38}, -{45,69,39}, -{45,69,40}, -{45,69,41}, -{45,69,42}, -{45,69,43}, -{45,69,44}, -{45,69,45}, -{45,69,46}, -{45,69,47}, -{45,69,48}, -{45,69,49}, -{45,69,50}, -{45,69,51}, -{45,69,52}, -{45,69,53}, -{45,69,54}, -{45,69,55}, -{45,69,56}, -{45,69,57}, -{45,69,58}, -{45,69,59}, -{45,70,-86}, -{45,70,-85}, -{45,70,-84}, -{45,70,-83}, -{45,70,-82}, -{45,70,-81}, -{45,70,-80}, -{45,70,-79}, -{45,70,-78}, -{45,70,-77}, -{45,70,-76}, -{45,70,-75}, -{45,70,-74}, -{45,70,-73}, -{45,70,-72}, -{45,70,-71}, -{45,70,-70}, -{45,70,-69}, -{45,70,-68}, -{45,70,-67}, -{45,70,-66}, -{45,70,-65}, -{45,70,-64}, -{45,70,-63}, -{45,70,-62}, -{45,70,-61}, -{45,70,-60}, -{45,70,-59}, -{45,70,-58}, -{45,70,-57}, -{45,70,-56}, -{45,70,-55}, -{45,70,-54}, -{45,70,-53}, -{45,70,-52}, -{45,70,-51}, -{45,70,-50}, -{45,70,-49}, -{45,70,-48}, -{45,70,-47}, -{45,70,-46}, -{45,70,-45}, -{45,70,-44}, -{45,70,-43}, -{45,70,-42}, -{45,70,-41}, -{45,70,-40}, -{45,70,-39}, -{45,70,-38}, -{45,70,-37}, -{45,70,-36}, -{45,70,-35}, -{45,70,-34}, -{45,70,-33}, -{45,70,-32}, -{45,70,-31}, -{45,70,-30}, -{45,70,-29}, -{45,70,-28}, -{45,70,-27}, -{45,70,-26}, -{45,70,-25}, -{45,70,-24}, -{45,70,-23}, -{45,70,-22}, -{45,70,-21}, -{45,70,-20}, -{45,70,-19}, -{45,70,-18}, -{45,70,-17}, -{45,70,-16}, -{45,70,-15}, -{45,70,-14}, -{45,70,-13}, -{45,70,-12}, -{45,70,-11}, -{45,70,-10}, -{45,70,-9}, -{45,70,-8}, -{45,70,-7}, -{45,70,-6}, -{45,70,-5}, -{45,70,-4}, -{45,70,-3}, -{45,70,-2}, -{45,70,-1}, -{45,70,0}, -{45,70,1}, -{45,70,2}, -{45,70,3}, -{45,70,4}, -{45,70,5}, -{45,70,6}, -{45,70,7}, -{45,70,8}, -{45,70,9}, -{45,70,10}, -{45,70,11}, -{45,70,12}, -{45,70,13}, -{45,70,14}, -{45,70,15}, -{45,70,16}, -{45,70,17}, -{45,70,18}, -{45,70,19}, -{45,70,20}, -{45,70,21}, -{45,70,22}, -{45,70,23}, -{45,70,24}, -{45,70,25}, -{45,70,26}, -{45,70,27}, -{45,70,28}, -{45,70,29}, -{45,70,30}, -{45,70,31}, -{45,70,32}, -{45,70,33}, -{45,70,34}, -{45,70,35}, -{45,70,36}, -{45,70,37}, -{45,70,38}, -{45,70,39}, -{45,70,40}, -{45,70,41}, -{45,70,42}, -{45,70,43}, -{45,70,44}, -{45,70,45}, -{45,70,46}, -{45,70,47}, -{45,70,48}, -{45,70,49}, -{45,70,50}, -{45,70,51}, -{45,70,52}, -{45,70,53}, -{45,70,54}, -{45,70,55}, -{45,70,56}, -{45,70,57}, -{45,70,58}, -{45,70,59}, -{45,71,-86}, -{45,71,-85}, -{45,71,-84}, -{45,71,-83}, -{45,71,-82}, -{45,71,-81}, -{45,71,-80}, -{45,71,-79}, -{45,71,-78}, -{45,71,-77}, -{45,71,-76}, -{45,71,-75}, -{45,71,-74}, -{45,71,-73}, -{45,71,-72}, -{45,71,-71}, -{45,71,-70}, -{45,71,-69}, -{45,71,-68}, -{45,71,-67}, -{45,71,-66}, -{45,71,-65}, -{45,71,-64}, -{45,71,-63}, -{45,71,-62}, -{45,71,-61}, -{45,71,-60}, -{45,71,-59}, -{45,71,-58}, -{45,71,-57}, -{45,71,-56}, -{45,71,-55}, -{45,71,-54}, -{45,71,-53}, -{45,71,-52}, -{45,71,-51}, -{45,71,-50}, -{45,71,-49}, -{45,71,-48}, -{45,71,-47}, -{45,71,-46}, -{45,71,-45}, -{45,71,-44}, -{45,71,-43}, -{45,71,-42}, -{45,71,-41}, -{45,71,-40}, -{45,71,-39}, -{45,71,-38}, -{45,71,-37}, -{45,71,-36}, -{45,71,-35}, -{45,71,-34}, -{45,71,-33}, -{45,71,-32}, -{45,71,-31}, -{45,71,-30}, -{45,71,-29}, -{45,71,-28}, -{45,71,-27}, -{45,71,-26}, -{45,71,-25}, -{45,71,-24}, -{45,71,-23}, -{45,71,-22}, -{45,71,-21}, -{45,71,-20}, -{45,71,-19}, -{45,71,-18}, -{45,71,-17}, -{45,71,-16}, -{45,71,-15}, -{45,71,-14}, -{45,71,-13}, -{45,71,-12}, -{45,71,-11}, -{45,71,-10}, -{45,71,-9}, -{45,71,-8}, -{45,71,-7}, -{45,71,-6}, -{45,71,-5}, -{45,71,-4}, -{45,71,-3}, -{45,71,-2}, -{45,71,-1}, -{45,71,0}, -{45,71,1}, -{45,71,2}, -{45,71,3}, -{45,71,4}, -{45,71,5}, -{45,71,6}, -{45,71,7}, -{45,71,8}, -{45,71,9}, -{45,71,10}, -{45,71,11}, -{45,71,12}, -{45,71,13}, -{45,71,14}, -{45,71,15}, -{45,71,16}, -{45,71,17}, -{45,71,18}, -{45,71,19}, -{45,71,20}, -{45,71,21}, -{45,71,22}, -{45,71,23}, -{45,71,24}, -{45,71,25}, -{45,71,26}, -{45,71,27}, -{45,71,28}, -{45,71,29}, -{45,71,30}, -{45,71,31}, -{45,71,32}, -{45,71,33}, -{45,71,34}, -{45,71,35}, -{45,71,36}, -{45,71,37}, -{45,71,38}, -{45,71,39}, -{45,71,40}, -{45,71,41}, -{45,71,42}, -{45,71,43}, -{45,71,44}, -{45,71,45}, -{45,71,46}, -{45,72,-86}, -{45,72,-85}, -{45,72,-84}, -{45,72,-83}, -{45,72,-82}, -{45,72,-81}, -{45,72,-80}, -{45,72,-79}, -{45,72,-78}, -{45,72,-77}, -{45,72,-76}, -{45,72,-75}, -{45,72,-74}, -{45,72,-73}, -{45,72,-72}, -{45,72,-71}, -{45,72,-70}, -{45,72,-69}, -{45,72,-68}, -{45,72,-67}, -{45,72,-66}, -{45,72,-65}, -{45,72,-64}, -{45,72,-63}, -{45,72,-62}, -{45,72,-61}, -{45,72,-60}, -{45,72,-59}, -{45,72,-58}, -{45,72,-57}, -{45,72,-56}, -{45,72,-55}, -{45,72,-54}, -{45,72,-53}, -{45,72,-52}, -{45,72,-51}, -{45,72,-50}, -{45,72,-49}, -{45,72,-48}, -{45,72,-47}, -{45,72,-46}, -{45,72,-45}, -{45,72,-44}, -{45,72,-43}, -{45,72,-42}, -{45,72,-41}, -{45,72,-40}, -{45,72,-39}, -{45,72,-38}, -{45,72,-37}, -{45,72,-36}, -{45,72,-35}, -{45,72,-34}, -{45,72,-33}, -{45,72,-32}, -{45,72,-31}, -{45,72,-30}, -{45,72,-29}, -{45,72,-28}, -{45,72,-27}, -{45,72,-26}, -{45,72,-25}, -{45,72,-24}, -{45,72,-23}, -{45,72,-22}, -{45,72,-21}, -{45,72,-20}, -{45,72,-19}, -{45,72,-18}, -{45,72,-17}, -{45,72,-16}, -{45,72,-15}, -{45,72,-14}, -{45,72,-13}, -{45,72,-12}, -{45,72,-11}, -{45,72,-10}, -{45,72,-9}, -{45,72,-8}, -{45,72,-7}, -{45,72,-6}, -{45,72,-5}, -{45,72,-4}, -{45,72,-3}, -{45,72,-2}, -{45,72,-1}, -{45,72,0}, -{45,72,1}, -{45,72,2}, -{45,72,3}, -{45,72,4}, -{45,72,5}, -{45,72,6}, -{45,72,7}, -{45,72,8}, -{45,72,9}, -{45,72,10}, -{45,72,11}, -{45,72,12}, -{45,72,13}, -{45,72,14}, -{45,72,15}, -{45,72,16}, -{45,72,17}, -{45,72,18}, -{45,73,-86}, -{45,73,-85}, -{45,73,-84}, -{45,73,-83}, -{45,73,-82}, -{45,73,-81}, -{45,73,-80}, -{45,73,-79}, -{45,73,-78}, -{45,73,-77}, -{45,73,-76}, -{45,73,-75}, -{45,73,-74}, -{45,73,-73}, -{45,73,-72}, -{45,73,-71}, -{45,73,-70}, -{45,73,-69}, -{45,73,-68}, -{45,73,-67}, -{45,73,-66}, -{45,73,-65}, -{45,73,-64}, -{45,73,-63}, -{45,73,-62}, -{45,73,-61}, -{45,73,-60}, -{45,73,-59}, -{45,73,-58}, -{45,73,-57}, -{45,73,-56}, -{45,73,-55}, -{45,73,-54}, -{45,73,-53}, -{45,73,-52}, -{45,73,-51}, -{45,73,-50}, -{45,73,-49}, -{45,73,-48}, -{45,73,-47}, -{45,73,-46}, -{45,73,-45}, -{45,73,-44}, -{45,73,-43}, -{45,73,-42}, -{45,73,-41}, -{45,73,-40}, -{45,73,-39}, -{45,73,-38}, -{45,73,-37}, -{45,73,-36}, -{45,73,-35}, -{45,73,-34}, -{45,73,-33}, -{45,73,-32}, -{45,73,-31}, -{45,73,-30}, -{45,73,-29}, -{45,73,-28}, -{45,73,-27}, -{45,73,-26}, -{45,73,-25}, -{45,73,-24}, -{45,73,-23}, -{45,73,-22}, -{45,73,-21}, -{45,73,-20}, -{45,73,-19}, -{45,73,-18}, -{45,73,-17}, -{45,73,-16}, -{45,73,-15}, -{45,73,-14}, -{45,73,-13}, -{45,73,-12}, -{45,73,-11}, -{45,73,-10}, -{45,73,-9}, -{45,73,-8}, -{45,73,-7}, -{45,73,-6}, -{45,73,-5}, -{45,73,-4}, -{45,73,-3}, -{45,73,-2}, -{45,73,-1}, -{45,73,0}, -{45,73,1}, -{45,73,2}, -{45,74,-86}, -{45,74,-85}, -{45,74,-84}, -{45,74,-83}, -{45,74,-82}, -{45,74,-81}, -{45,74,-80}, -{45,74,-79}, -{45,74,-78}, -{45,74,-77}, -{45,74,-76}, -{45,74,-75}, -{45,74,-74}, -{45,74,-73}, -{45,74,-72}, -{45,74,-71}, -{45,74,-70}, -{45,74,-69}, -{45,74,-68}, -{45,74,-67}, -{45,74,-66}, -{45,74,-65}, -{45,74,-64}, -{45,74,-63}, -{45,74,-62}, -{45,74,-61}, -{45,74,-60}, -{45,74,-59}, -{45,74,-58}, -{45,74,-57}, -{45,74,-56}, -{45,74,-55}, -{45,74,-54}, -{45,74,-53}, -{45,74,-52}, -{45,74,-51}, -{45,74,-50}, -{45,74,-49}, -{45,74,-48}, -{45,74,-47}, -{45,74,-46}, -{45,74,-45}, -{45,74,-44}, -{45,74,-43}, -{45,74,-42}, -{45,74,-41}, -{45,74,-40}, -{45,74,-39}, -{45,74,-38}, -{45,74,-37}, -{45,74,-36}, -{45,74,-35}, -{45,74,-34}, -{45,74,-33}, -{45,74,-32}, -{45,74,-31}, -{45,74,-30}, -{45,74,-29}, -{45,74,-28}, -{45,74,-27}, -{45,74,-26}, -{45,74,-25}, -{45,74,-24}, -{45,74,-23}, -{45,74,-22}, -{45,74,-21}, -{45,74,-20}, -{45,74,-19}, -{45,74,-18}, -{45,74,-17}, -{45,74,-16}, -{45,74,-15}, -{45,74,-14}, -{45,74,-13}, -{45,74,-12}, -{45,74,-11}, -{45,75,-86}, -{45,75,-85}, -{45,75,-84}, -{45,75,-83}, -{45,75,-82}, -{45,75,-81}, -{45,75,-80}, -{45,75,-79}, -{45,75,-78}, -{45,75,-77}, -{45,75,-76}, -{45,75,-75}, -{45,75,-74}, -{45,75,-73}, -{45,75,-72}, -{45,75,-71}, -{45,75,-70}, -{45,75,-69}, -{45,75,-68}, -{45,75,-67}, -{45,75,-66}, -{45,75,-65}, -{45,75,-64}, -{45,75,-63}, -{45,75,-62}, -{45,75,-61}, -{45,75,-60}, -{45,75,-59}, -{45,75,-58}, -{45,75,-57}, -{45,75,-56}, -{45,75,-55}, -{45,75,-54}, -{45,75,-53}, -{45,75,-52}, -{45,75,-51}, -{45,75,-50}, -{45,75,-49}, -{45,75,-48}, -{45,75,-47}, -{45,75,-46}, -{45,75,-45}, -{45,75,-44}, -{45,75,-43}, -{45,75,-42}, -{45,75,-41}, -{45,75,-40}, -{45,75,-39}, -{45,75,-38}, -{45,75,-37}, -{45,75,-36}, -{45,75,-35}, -{45,75,-34}, -{45,75,-33}, -{45,75,-32}, -{45,75,-31}, -{45,75,-30}, -{45,75,-29}, -{45,75,-28}, -{45,75,-27}, -{45,75,-26}, -{45,75,-25}, -{45,75,-24}, -{45,75,-23}, -{45,75,-22}, -{45,75,-21}, -{45,76,-86}, -{45,76,-85}, -{45,76,-84}, -{45,76,-83}, -{45,76,-82}, -{45,76,-81}, -{45,76,-80}, -{45,76,-79}, -{45,76,-78}, -{45,76,-77}, -{45,76,-76}, -{45,76,-75}, -{45,76,-74}, -{45,76,-73}, -{45,76,-72}, -{45,76,-71}, -{45,76,-70}, -{45,76,-69}, -{45,76,-68}, -{45,76,-67}, -{45,76,-66}, -{45,76,-65}, -{45,76,-64}, -{45,76,-63}, -{45,76,-62}, -{45,76,-61}, -{45,76,-60}, -{45,76,-59}, -{45,76,-58}, -{45,76,-57}, -{45,76,-56}, -{45,76,-55}, -{45,76,-54}, -{45,76,-53}, -{45,76,-52}, -{45,76,-51}, -{45,76,-50}, -{45,76,-49}, -{45,76,-48}, -{45,76,-47}, -{45,76,-46}, -{45,76,-45}, -{45,76,-44}, -{45,76,-43}, -{45,76,-42}, -{45,76,-41}, -{45,76,-40}, -{45,76,-39}, -{45,76,-38}, -{45,76,-37}, -{45,76,-36}, -{45,76,-35}, -{45,76,-34}, -{45,76,-33}, -{45,76,-32}, -{45,76,-31}, -{45,76,-30}, -{45,77,-86}, -{45,77,-85}, -{45,77,-84}, -{45,77,-83}, -{45,77,-82}, -{45,77,-81}, -{45,77,-80}, -{45,77,-79}, -{45,77,-78}, -{45,77,-77}, -{45,77,-76}, -{45,77,-75}, -{45,77,-74}, -{45,77,-73}, -{45,77,-72}, -{45,77,-71}, -{45,77,-70}, -{45,77,-69}, -{45,77,-68}, -{45,77,-67}, -{45,77,-66}, -{45,77,-65}, -{45,77,-64}, -{45,77,-63}, -{45,77,-62}, -{45,77,-61}, -{45,77,-60}, -{45,77,-59}, -{45,77,-58}, -{45,77,-57}, -{45,77,-56}, -{45,77,-55}, -{45,77,-54}, -{45,77,-53}, -{45,77,-52}, -{45,77,-51}, -{45,77,-50}, -{45,77,-49}, -{45,77,-48}, -{45,77,-47}, -{45,77,-46}, -{45,77,-45}, -{45,77,-44}, -{45,77,-43}, -{45,77,-42}, -{45,77,-41}, -{45,77,-40}, -{45,77,-39}, -{45,77,-38}, -{45,78,-86}, -{45,78,-85}, -{45,78,-84}, -{45,78,-83}, -{45,78,-82}, -{45,78,-81}, -{45,78,-80}, -{45,78,-79}, -{45,78,-78}, -{45,78,-77}, -{45,78,-76}, -{45,78,-75}, -{45,78,-74}, -{45,78,-73}, -{45,78,-72}, -{45,78,-71}, -{45,78,-70}, -{45,78,-69}, -{45,78,-68}, -{45,78,-67}, -{45,78,-66}, -{45,78,-65}, -{45,78,-64}, -{45,78,-63}, -{45,78,-62}, -{45,78,-61}, -{45,78,-60}, -{45,78,-59}, -{45,78,-58}, -{45,78,-57}, -{45,78,-56}, -{45,78,-55}, -{45,78,-54}, -{45,78,-53}, -{45,78,-52}, -{45,78,-51}, -{45,78,-50}, -{45,78,-49}, -{45,78,-48}, -{45,78,-47}, -{45,78,-46}, -{45,78,-45}, -{45,79,-86}, -{45,79,-85}, -{45,79,-84}, -{45,79,-83}, -{45,79,-82}, -{45,79,-81}, -{45,79,-80}, -{45,79,-79}, -{45,79,-78}, -{45,79,-77}, -{45,79,-76}, -{45,79,-75}, -{45,79,-74}, -{45,79,-73}, -{45,79,-72}, -{45,79,-71}, -{45,79,-70}, -{45,79,-69}, -{45,79,-68}, -{45,79,-67}, -{45,79,-66}, -{45,79,-65}, -{45,79,-64}, -{45,79,-63}, -{45,79,-62}, -{45,79,-61}, -{45,79,-60}, -{45,79,-59}, -{45,79,-58}, -{45,79,-57}, -{45,79,-56}, -{45,79,-55}, -{45,79,-54}, -{45,79,-53}, -{45,79,-52}, -{45,79,-51}, -{45,80,-86}, -{45,80,-85}, -{45,80,-84}, -{45,80,-83}, -{45,80,-82}, -{45,80,-81}, -{45,80,-80}, -{45,80,-79}, -{45,80,-78}, -{45,80,-77}, -{45,80,-76}, -{45,80,-75}, -{45,80,-74}, -{45,80,-73}, -{45,80,-72}, -{45,80,-71}, -{45,80,-70}, -{45,80,-69}, -{45,80,-68}, -{45,80,-67}, -{45,80,-66}, -{45,80,-65}, -{45,80,-64}, -{45,80,-63}, -{45,80,-62}, -{45,80,-61}, -{45,80,-60}, -{45,80,-59}, -{45,80,-58}, -{45,80,-57}, -{45,81,-86}, -{45,81,-85}, -{45,81,-84}, -{45,81,-83}, -{45,81,-82}, -{45,81,-81}, -{45,81,-80}, -{45,81,-79}, -{45,81,-78}, -{45,81,-77}, -{45,81,-76}, -{45,81,-75}, -{45,81,-74}, -{45,81,-73}, -{45,81,-72}, -{45,81,-71}, -{45,81,-70}, -{45,81,-69}, -{45,81,-68}, -{45,81,-67}, -{45,81,-66}, -{45,81,-65}, -{45,81,-64}, -{45,81,-63}, -{45,82,-86}, -{45,82,-85}, -{45,82,-84}, -{45,82,-83}, -{45,82,-82}, -{45,82,-81}, -{45,82,-80}, -{45,82,-79}, -{45,82,-78}, -{45,82,-77}, -{45,82,-76}, -{45,82,-75}, -{45,82,-74}, -{45,82,-73}, -{45,82,-72}, -{45,82,-71}, -{45,82,-70}, -{45,82,-69}, -{45,82,-68}, -{45,83,-86}, -{45,83,-85}, -{45,83,-84}, -{45,83,-83}, -{45,83,-82}, -{45,83,-81}, -{45,83,-80}, -{45,83,-79}, -{45,83,-78}, -{45,83,-77}, -{45,83,-76}, -{45,83,-75}, -{45,83,-74}, -{45,83,-73}, -{45,84,-86}, -{45,84,-85}, -{45,84,-84}, -{45,84,-83}, -{45,84,-82}, -{45,84,-81}, -{45,84,-80}, -{45,84,-79}, -{45,84,-78}, -{45,85,-86}, -{45,85,-85}, -{45,85,-84}, -{45,85,-83}, -{46,-51,47}, -{46,-51,48}, -{46,-51,49}, -{46,-50,43}, -{46,-50,44}, -{46,-50,45}, -{46,-50,46}, -{46,-50,47}, -{46,-50,48}, -{46,-50,49}, -{46,-49,39}, -{46,-49,40}, -{46,-49,41}, -{46,-49,42}, -{46,-49,43}, -{46,-49,44}, -{46,-49,45}, -{46,-49,46}, -{46,-49,47}, -{46,-49,48}, -{46,-49,49}, -{46,-48,35}, -{46,-48,36}, -{46,-48,37}, -{46,-48,38}, -{46,-48,39}, -{46,-48,40}, -{46,-48,41}, -{46,-48,42}, -{46,-48,43}, -{46,-48,44}, -{46,-48,45}, -{46,-48,46}, -{46,-48,47}, -{46,-48,48}, -{46,-48,49}, -{46,-48,50}, -{46,-47,32}, -{46,-47,33}, -{46,-47,34}, -{46,-47,35}, -{46,-47,36}, -{46,-47,37}, -{46,-47,38}, -{46,-47,39}, -{46,-47,40}, -{46,-47,41}, -{46,-47,42}, -{46,-47,43}, -{46,-47,44}, -{46,-47,45}, -{46,-47,46}, -{46,-47,47}, -{46,-47,48}, -{46,-47,49}, -{46,-47,50}, -{46,-46,29}, -{46,-46,30}, -{46,-46,31}, -{46,-46,32}, -{46,-46,33}, -{46,-46,34}, -{46,-46,35}, -{46,-46,36}, -{46,-46,37}, -{46,-46,38}, -{46,-46,39}, -{46,-46,40}, -{46,-46,41}, -{46,-46,42}, -{46,-46,43}, -{46,-46,44}, -{46,-46,45}, -{46,-46,46}, -{46,-46,47}, -{46,-46,48}, -{46,-46,49}, -{46,-46,50}, -{46,-45,26}, -{46,-45,27}, -{46,-45,28}, -{46,-45,29}, -{46,-45,30}, -{46,-45,31}, -{46,-45,32}, -{46,-45,33}, -{46,-45,34}, -{46,-45,35}, -{46,-45,36}, -{46,-45,37}, -{46,-45,38}, -{46,-45,39}, -{46,-45,40}, -{46,-45,41}, -{46,-45,42}, -{46,-45,43}, -{46,-45,44}, -{46,-45,45}, -{46,-45,46}, -{46,-45,47}, -{46,-45,48}, -{46,-45,49}, -{46,-45,50}, -{46,-44,23}, -{46,-44,24}, -{46,-44,25}, -{46,-44,26}, -{46,-44,27}, -{46,-44,28}, -{46,-44,29}, -{46,-44,30}, -{46,-44,31}, -{46,-44,32}, -{46,-44,33}, -{46,-44,34}, -{46,-44,35}, -{46,-44,36}, -{46,-44,37}, -{46,-44,38}, -{46,-44,39}, -{46,-44,40}, -{46,-44,41}, -{46,-44,42}, -{46,-44,43}, -{46,-44,44}, -{46,-44,45}, -{46,-44,46}, -{46,-44,47}, -{46,-44,48}, -{46,-44,49}, -{46,-44,50}, -{46,-43,21}, -{46,-43,22}, -{46,-43,23}, -{46,-43,24}, -{46,-43,25}, -{46,-43,26}, -{46,-43,27}, -{46,-43,28}, -{46,-43,29}, -{46,-43,30}, -{46,-43,31}, -{46,-43,32}, -{46,-43,33}, -{46,-43,34}, -{46,-43,35}, -{46,-43,36}, -{46,-43,37}, -{46,-43,38}, -{46,-43,39}, -{46,-43,40}, -{46,-43,41}, -{46,-43,42}, -{46,-43,43}, -{46,-43,44}, -{46,-43,45}, -{46,-43,46}, -{46,-43,47}, -{46,-43,48}, -{46,-43,49}, -{46,-43,50}, -{46,-42,19}, -{46,-42,20}, -{46,-42,21}, -{46,-42,22}, -{46,-42,23}, -{46,-42,24}, -{46,-42,25}, -{46,-42,26}, -{46,-42,27}, -{46,-42,28}, -{46,-42,29}, -{46,-42,30}, -{46,-42,31}, -{46,-42,32}, -{46,-42,33}, -{46,-42,34}, -{46,-42,35}, -{46,-42,36}, -{46,-42,37}, -{46,-42,38}, -{46,-42,39}, -{46,-42,40}, -{46,-42,41}, -{46,-42,42}, -{46,-42,43}, -{46,-42,44}, -{46,-42,45}, -{46,-42,46}, -{46,-42,47}, -{46,-42,48}, -{46,-42,49}, -{46,-42,50}, -{46,-41,16}, -{46,-41,17}, -{46,-41,18}, -{46,-41,19}, -{46,-41,20}, -{46,-41,21}, -{46,-41,22}, -{46,-41,23}, -{46,-41,24}, -{46,-41,25}, -{46,-41,26}, -{46,-41,27}, -{46,-41,28}, -{46,-41,29}, -{46,-41,30}, -{46,-41,31}, -{46,-41,32}, -{46,-41,33}, -{46,-41,34}, -{46,-41,35}, -{46,-41,36}, -{46,-41,37}, -{46,-41,38}, -{46,-41,39}, -{46,-41,40}, -{46,-41,41}, -{46,-41,42}, -{46,-41,43}, -{46,-41,44}, -{46,-41,45}, -{46,-41,46}, -{46,-41,47}, -{46,-41,48}, -{46,-41,49}, -{46,-41,50}, -{46,-40,14}, -{46,-40,15}, -{46,-40,16}, -{46,-40,17}, -{46,-40,18}, -{46,-40,19}, -{46,-40,20}, -{46,-40,21}, -{46,-40,22}, -{46,-40,23}, -{46,-40,24}, -{46,-40,25}, -{46,-40,26}, -{46,-40,27}, -{46,-40,28}, -{46,-40,29}, -{46,-40,30}, -{46,-40,31}, -{46,-40,32}, -{46,-40,33}, -{46,-40,34}, -{46,-40,35}, -{46,-40,36}, -{46,-40,37}, -{46,-40,38}, -{46,-40,39}, -{46,-40,40}, -{46,-40,41}, -{46,-40,42}, -{46,-40,43}, -{46,-40,44}, -{46,-40,45}, -{46,-40,46}, -{46,-40,47}, -{46,-40,48}, -{46,-40,49}, -{46,-40,50}, -{46,-39,12}, -{46,-39,13}, -{46,-39,14}, -{46,-39,15}, -{46,-39,16}, -{46,-39,17}, -{46,-39,18}, -{46,-39,19}, -{46,-39,20}, -{46,-39,21}, -{46,-39,22}, -{46,-39,23}, -{46,-39,24}, -{46,-39,25}, -{46,-39,26}, -{46,-39,27}, -{46,-39,28}, -{46,-39,29}, -{46,-39,30}, -{46,-39,31}, -{46,-39,32}, -{46,-39,33}, -{46,-39,34}, -{46,-39,35}, -{46,-39,36}, -{46,-39,37}, -{46,-39,38}, -{46,-39,39}, -{46,-39,40}, -{46,-39,41}, -{46,-39,42}, -{46,-39,43}, -{46,-39,44}, -{46,-39,45}, -{46,-39,46}, -{46,-39,47}, -{46,-39,48}, -{46,-39,49}, -{46,-39,50}, -{46,-38,10}, -{46,-38,11}, -{46,-38,12}, -{46,-38,13}, -{46,-38,14}, -{46,-38,15}, -{46,-38,16}, -{46,-38,17}, -{46,-38,18}, -{46,-38,19}, -{46,-38,20}, -{46,-38,21}, -{46,-38,22}, -{46,-38,23}, -{46,-38,24}, -{46,-38,25}, -{46,-38,26}, -{46,-38,27}, -{46,-38,28}, -{46,-38,29}, -{46,-38,30}, -{46,-38,31}, -{46,-38,32}, -{46,-38,33}, -{46,-38,34}, -{46,-38,35}, -{46,-38,36}, -{46,-38,37}, -{46,-38,38}, -{46,-38,39}, -{46,-38,40}, -{46,-38,41}, -{46,-38,42}, -{46,-38,43}, -{46,-38,44}, -{46,-38,45}, -{46,-38,46}, -{46,-38,47}, -{46,-38,48}, -{46,-38,49}, -{46,-38,50}, -{46,-37,8}, -{46,-37,9}, -{46,-37,10}, -{46,-37,11}, -{46,-37,12}, -{46,-37,13}, -{46,-37,14}, -{46,-37,15}, -{46,-37,16}, -{46,-37,17}, -{46,-37,18}, -{46,-37,19}, -{46,-37,20}, -{46,-37,21}, -{46,-37,22}, -{46,-37,23}, -{46,-37,24}, -{46,-37,25}, -{46,-37,26}, -{46,-37,27}, -{46,-37,28}, -{46,-37,29}, -{46,-37,30}, -{46,-37,31}, -{46,-37,32}, -{46,-37,33}, -{46,-37,34}, -{46,-37,35}, -{46,-37,36}, -{46,-37,37}, -{46,-37,38}, -{46,-37,39}, -{46,-37,40}, -{46,-37,41}, -{46,-37,42}, -{46,-37,43}, -{46,-37,44}, -{46,-37,45}, -{46,-37,46}, -{46,-37,47}, -{46,-37,48}, -{46,-37,49}, -{46,-37,50}, -{46,-36,6}, -{46,-36,7}, -{46,-36,8}, -{46,-36,9}, -{46,-36,10}, -{46,-36,11}, -{46,-36,12}, -{46,-36,13}, -{46,-36,14}, -{46,-36,15}, -{46,-36,16}, -{46,-36,17}, -{46,-36,18}, -{46,-36,19}, -{46,-36,20}, -{46,-36,21}, -{46,-36,22}, -{46,-36,23}, -{46,-36,24}, -{46,-36,25}, -{46,-36,26}, -{46,-36,27}, -{46,-36,28}, -{46,-36,29}, -{46,-36,30}, -{46,-36,31}, -{46,-36,32}, -{46,-36,33}, -{46,-36,34}, -{46,-36,35}, -{46,-36,36}, -{46,-36,37}, -{46,-36,38}, -{46,-36,39}, -{46,-36,40}, -{46,-36,41}, -{46,-36,42}, -{46,-36,43}, -{46,-36,44}, -{46,-36,45}, -{46,-36,46}, -{46,-36,47}, -{46,-36,48}, -{46,-36,49}, -{46,-36,50}, -{46,-35,4}, -{46,-35,5}, -{46,-35,6}, -{46,-35,7}, -{46,-35,8}, -{46,-35,9}, -{46,-35,10}, -{46,-35,11}, -{46,-35,12}, -{46,-35,13}, -{46,-35,14}, -{46,-35,15}, -{46,-35,16}, -{46,-35,17}, -{46,-35,18}, -{46,-35,19}, -{46,-35,20}, -{46,-35,21}, -{46,-35,22}, -{46,-35,23}, -{46,-35,24}, -{46,-35,25}, -{46,-35,26}, -{46,-35,27}, -{46,-35,28}, -{46,-35,29}, -{46,-35,30}, -{46,-35,31}, -{46,-35,32}, -{46,-35,33}, -{46,-35,34}, -{46,-35,35}, -{46,-35,36}, -{46,-35,37}, -{46,-35,38}, -{46,-35,39}, -{46,-35,40}, -{46,-35,41}, -{46,-35,42}, -{46,-35,43}, -{46,-35,44}, -{46,-35,45}, -{46,-35,46}, -{46,-35,47}, -{46,-35,48}, -{46,-35,49}, -{46,-35,50}, -{46,-34,2}, -{46,-34,3}, -{46,-34,4}, -{46,-34,5}, -{46,-34,6}, -{46,-34,7}, -{46,-34,8}, -{46,-34,9}, -{46,-34,10}, -{46,-34,11}, -{46,-34,12}, -{46,-34,13}, -{46,-34,14}, -{46,-34,15}, -{46,-34,16}, -{46,-34,17}, -{46,-34,18}, -{46,-34,19}, -{46,-34,20}, -{46,-34,21}, -{46,-34,22}, -{46,-34,23}, -{46,-34,24}, -{46,-34,25}, -{46,-34,26}, -{46,-34,27}, -{46,-34,28}, -{46,-34,29}, -{46,-34,30}, -{46,-34,31}, -{46,-34,32}, -{46,-34,33}, -{46,-34,34}, -{46,-34,35}, -{46,-34,36}, -{46,-34,37}, -{46,-34,38}, -{46,-34,39}, -{46,-34,40}, -{46,-34,41}, -{46,-34,42}, -{46,-34,43}, -{46,-34,44}, -{46,-34,45}, -{46,-34,46}, -{46,-34,47}, -{46,-34,48}, -{46,-34,49}, -{46,-34,50}, -{46,-33,1}, -{46,-33,2}, -{46,-33,3}, -{46,-33,4}, -{46,-33,5}, -{46,-33,6}, -{46,-33,7}, -{46,-33,8}, -{46,-33,9}, -{46,-33,10}, -{46,-33,11}, -{46,-33,12}, -{46,-33,13}, -{46,-33,14}, -{46,-33,15}, -{46,-33,16}, -{46,-33,17}, -{46,-33,18}, -{46,-33,19}, -{46,-33,20}, -{46,-33,21}, -{46,-33,22}, -{46,-33,23}, -{46,-33,24}, -{46,-33,25}, -{46,-33,26}, -{46,-33,27}, -{46,-33,28}, -{46,-33,29}, -{46,-33,30}, -{46,-33,31}, -{46,-33,32}, -{46,-33,33}, -{46,-33,34}, -{46,-33,35}, -{46,-33,36}, -{46,-33,37}, -{46,-33,38}, -{46,-33,39}, -{46,-33,40}, -{46,-33,41}, -{46,-33,42}, -{46,-33,43}, -{46,-33,44}, -{46,-33,45}, -{46,-33,46}, -{46,-33,47}, -{46,-33,48}, -{46,-33,49}, -{46,-33,50}, -{46,-32,-1}, -{46,-32,0}, -{46,-32,1}, -{46,-32,2}, -{46,-32,3}, -{46,-32,4}, -{46,-32,5}, -{46,-32,6}, -{46,-32,7}, -{46,-32,8}, -{46,-32,9}, -{46,-32,10}, -{46,-32,11}, -{46,-32,12}, -{46,-32,13}, -{46,-32,14}, -{46,-32,15}, -{46,-32,16}, -{46,-32,17}, -{46,-32,18}, -{46,-32,19}, -{46,-32,20}, -{46,-32,21}, -{46,-32,22}, -{46,-32,23}, -{46,-32,24}, -{46,-32,25}, -{46,-32,26}, -{46,-32,27}, -{46,-32,28}, -{46,-32,29}, -{46,-32,30}, -{46,-32,31}, -{46,-32,32}, -{46,-32,33}, -{46,-32,34}, -{46,-32,35}, -{46,-32,36}, -{46,-32,37}, -{46,-32,38}, -{46,-32,39}, -{46,-32,40}, -{46,-32,41}, -{46,-32,42}, -{46,-32,43}, -{46,-32,44}, -{46,-32,45}, -{46,-32,46}, -{46,-32,47}, -{46,-32,48}, -{46,-32,49}, -{46,-32,50}, -{46,-31,-3}, -{46,-31,-2}, -{46,-31,-1}, -{46,-31,0}, -{46,-31,1}, -{46,-31,2}, -{46,-31,3}, -{46,-31,4}, -{46,-31,5}, -{46,-31,6}, -{46,-31,7}, -{46,-31,8}, -{46,-31,9}, -{46,-31,10}, -{46,-31,11}, -{46,-31,12}, -{46,-31,13}, -{46,-31,14}, -{46,-31,15}, -{46,-31,16}, -{46,-31,17}, -{46,-31,18}, -{46,-31,19}, -{46,-31,20}, -{46,-31,21}, -{46,-31,22}, -{46,-31,23}, -{46,-31,24}, -{46,-31,25}, -{46,-31,26}, -{46,-31,27}, -{46,-31,28}, -{46,-31,29}, -{46,-31,30}, -{46,-31,31}, -{46,-31,32}, -{46,-31,33}, -{46,-31,34}, -{46,-31,35}, -{46,-31,36}, -{46,-31,37}, -{46,-31,38}, -{46,-31,39}, -{46,-31,40}, -{46,-31,41}, -{46,-31,42}, -{46,-31,43}, -{46,-31,44}, -{46,-31,45}, -{46,-31,46}, -{46,-31,47}, -{46,-31,48}, -{46,-31,49}, -{46,-31,50}, -{46,-30,-4}, -{46,-30,-3}, -{46,-30,-2}, -{46,-30,-1}, -{46,-30,0}, -{46,-30,1}, -{46,-30,2}, -{46,-30,3}, -{46,-30,4}, -{46,-30,5}, -{46,-30,6}, -{46,-30,7}, -{46,-30,8}, -{46,-30,9}, -{46,-30,10}, -{46,-30,11}, -{46,-30,12}, -{46,-30,13}, -{46,-30,14}, -{46,-30,15}, -{46,-30,16}, -{46,-30,17}, -{46,-30,18}, -{46,-30,19}, -{46,-30,20}, -{46,-30,21}, -{46,-30,22}, -{46,-30,23}, -{46,-30,24}, -{46,-30,25}, -{46,-30,26}, -{46,-30,27}, -{46,-30,28}, -{46,-30,29}, -{46,-30,30}, -{46,-30,31}, -{46,-30,32}, -{46,-30,33}, -{46,-30,34}, -{46,-30,35}, -{46,-30,36}, -{46,-30,37}, -{46,-30,38}, -{46,-30,39}, -{46,-30,40}, -{46,-30,41}, -{46,-30,42}, -{46,-30,43}, -{46,-30,44}, -{46,-30,45}, -{46,-30,46}, -{46,-30,47}, -{46,-30,48}, -{46,-30,49}, -{46,-30,50}, -{46,-29,-6}, -{46,-29,-5}, -{46,-29,-4}, -{46,-29,-3}, -{46,-29,-2}, -{46,-29,-1}, -{46,-29,0}, -{46,-29,1}, -{46,-29,2}, -{46,-29,3}, -{46,-29,4}, -{46,-29,5}, -{46,-29,6}, -{46,-29,7}, -{46,-29,8}, -{46,-29,9}, -{46,-29,10}, -{46,-29,11}, -{46,-29,12}, -{46,-29,13}, -{46,-29,14}, -{46,-29,15}, -{46,-29,16}, -{46,-29,17}, -{46,-29,18}, -{46,-29,19}, -{46,-29,20}, -{46,-29,21}, -{46,-29,22}, -{46,-29,23}, -{46,-29,24}, -{46,-29,25}, -{46,-29,26}, -{46,-29,27}, -{46,-29,28}, -{46,-29,29}, -{46,-29,30}, -{46,-29,31}, -{46,-29,32}, -{46,-29,33}, -{46,-29,34}, -{46,-29,35}, -{46,-29,36}, -{46,-29,37}, -{46,-29,38}, -{46,-29,39}, -{46,-29,40}, -{46,-29,41}, -{46,-29,42}, -{46,-29,43}, -{46,-29,44}, -{46,-29,45}, -{46,-29,46}, -{46,-29,47}, -{46,-29,48}, -{46,-29,49}, -{46,-29,50}, -{46,-28,-8}, -{46,-28,-7}, -{46,-28,-6}, -{46,-28,-5}, -{46,-28,-4}, -{46,-28,-3}, -{46,-28,-2}, -{46,-28,-1}, -{46,-28,0}, -{46,-28,1}, -{46,-28,2}, -{46,-28,3}, -{46,-28,4}, -{46,-28,5}, -{46,-28,6}, -{46,-28,7}, -{46,-28,8}, -{46,-28,9}, -{46,-28,10}, -{46,-28,11}, -{46,-28,12}, -{46,-28,13}, -{46,-28,14}, -{46,-28,15}, -{46,-28,16}, -{46,-28,17}, -{46,-28,18}, -{46,-28,19}, -{46,-28,20}, -{46,-28,21}, -{46,-28,22}, -{46,-28,23}, -{46,-28,24}, -{46,-28,25}, -{46,-28,26}, -{46,-28,27}, -{46,-28,28}, -{46,-28,29}, -{46,-28,30}, -{46,-28,31}, -{46,-28,32}, -{46,-28,33}, -{46,-28,34}, -{46,-28,35}, -{46,-28,36}, -{46,-28,37}, -{46,-28,38}, -{46,-28,39}, -{46,-28,40}, -{46,-28,41}, -{46,-28,42}, -{46,-28,43}, -{46,-28,44}, -{46,-28,45}, -{46,-28,46}, -{46,-28,47}, -{46,-28,48}, -{46,-28,49}, -{46,-28,50}, -{46,-28,51}, -{46,-27,-9}, -{46,-27,-8}, -{46,-27,-7}, -{46,-27,-6}, -{46,-27,-5}, -{46,-27,-4}, -{46,-27,-3}, -{46,-27,-2}, -{46,-27,-1}, -{46,-27,0}, -{46,-27,1}, -{46,-27,2}, -{46,-27,3}, -{46,-27,4}, -{46,-27,5}, -{46,-27,6}, -{46,-27,7}, -{46,-27,8}, -{46,-27,9}, -{46,-27,10}, -{46,-27,11}, -{46,-27,12}, -{46,-27,13}, -{46,-27,14}, -{46,-27,15}, -{46,-27,16}, -{46,-27,17}, -{46,-27,18}, -{46,-27,19}, -{46,-27,20}, -{46,-27,21}, -{46,-27,22}, -{46,-27,23}, -{46,-27,24}, -{46,-27,25}, -{46,-27,26}, -{46,-27,27}, -{46,-27,28}, -{46,-27,29}, -{46,-27,30}, -{46,-27,31}, -{46,-27,32}, -{46,-27,33}, -{46,-27,34}, -{46,-27,35}, -{46,-27,36}, -{46,-27,37}, -{46,-27,38}, -{46,-27,39}, -{46,-27,40}, -{46,-27,41}, -{46,-27,42}, -{46,-27,43}, -{46,-27,44}, -{46,-27,45}, -{46,-27,46}, -{46,-27,47}, -{46,-27,48}, -{46,-27,49}, -{46,-27,50}, -{46,-27,51}, -{46,-26,-11}, -{46,-26,-10}, -{46,-26,-9}, -{46,-26,-8}, -{46,-26,-7}, -{46,-26,-6}, -{46,-26,-5}, -{46,-26,-4}, -{46,-26,-3}, -{46,-26,-2}, -{46,-26,-1}, -{46,-26,0}, -{46,-26,1}, -{46,-26,2}, -{46,-26,3}, -{46,-26,4}, -{46,-26,5}, -{46,-26,6}, -{46,-26,7}, -{46,-26,8}, -{46,-26,9}, -{46,-26,10}, -{46,-26,11}, -{46,-26,12}, -{46,-26,13}, -{46,-26,14}, -{46,-26,15}, -{46,-26,16}, -{46,-26,17}, -{46,-26,18}, -{46,-26,19}, -{46,-26,20}, -{46,-26,21}, -{46,-26,22}, -{46,-26,23}, -{46,-26,24}, -{46,-26,25}, -{46,-26,26}, -{46,-26,27}, -{46,-26,28}, -{46,-26,29}, -{46,-26,30}, -{46,-26,31}, -{46,-26,32}, -{46,-26,33}, -{46,-26,34}, -{46,-26,35}, -{46,-26,36}, -{46,-26,37}, -{46,-26,38}, -{46,-26,39}, -{46,-26,40}, -{46,-26,41}, -{46,-26,42}, -{46,-26,43}, -{46,-26,44}, -{46,-26,45}, -{46,-26,46}, -{46,-26,47}, -{46,-26,48}, -{46,-26,49}, -{46,-26,50}, -{46,-26,51}, -{46,-25,-12}, -{46,-25,-11}, -{46,-25,-10}, -{46,-25,-9}, -{46,-25,-8}, -{46,-25,-7}, -{46,-25,-6}, -{46,-25,-5}, -{46,-25,-4}, -{46,-25,-3}, -{46,-25,-2}, -{46,-25,-1}, -{46,-25,0}, -{46,-25,1}, -{46,-25,2}, -{46,-25,3}, -{46,-25,4}, -{46,-25,5}, -{46,-25,6}, -{46,-25,7}, -{46,-25,8}, -{46,-25,9}, -{46,-25,10}, -{46,-25,11}, -{46,-25,12}, -{46,-25,13}, -{46,-25,14}, -{46,-25,15}, -{46,-25,16}, -{46,-25,17}, -{46,-25,18}, -{46,-25,19}, -{46,-25,20}, -{46,-25,21}, -{46,-25,22}, -{46,-25,23}, -{46,-25,24}, -{46,-25,25}, -{46,-25,26}, -{46,-25,27}, -{46,-25,28}, -{46,-25,29}, -{46,-25,30}, -{46,-25,31}, -{46,-25,32}, -{46,-25,33}, -{46,-25,34}, -{46,-25,35}, -{46,-25,36}, -{46,-25,37}, -{46,-25,38}, -{46,-25,39}, -{46,-25,40}, -{46,-25,41}, -{46,-25,42}, -{46,-25,43}, -{46,-25,44}, -{46,-25,45}, -{46,-25,46}, -{46,-25,47}, -{46,-25,48}, -{46,-25,49}, -{46,-25,50}, -{46,-25,51}, -{46,-24,-14}, -{46,-24,-13}, -{46,-24,-12}, -{46,-24,-11}, -{46,-24,-10}, -{46,-24,-9}, -{46,-24,-8}, -{46,-24,-7}, -{46,-24,-6}, -{46,-24,-5}, -{46,-24,-4}, -{46,-24,-3}, -{46,-24,-2}, -{46,-24,-1}, -{46,-24,0}, -{46,-24,1}, -{46,-24,2}, -{46,-24,3}, -{46,-24,4}, -{46,-24,5}, -{46,-24,6}, -{46,-24,7}, -{46,-24,8}, -{46,-24,9}, -{46,-24,10}, -{46,-24,11}, -{46,-24,12}, -{46,-24,13}, -{46,-24,14}, -{46,-24,15}, -{46,-24,16}, -{46,-24,17}, -{46,-24,18}, -{46,-24,19}, -{46,-24,20}, -{46,-24,21}, -{46,-24,22}, -{46,-24,23}, -{46,-24,24}, -{46,-24,25}, -{46,-24,26}, -{46,-24,27}, -{46,-24,28}, -{46,-24,29}, -{46,-24,30}, -{46,-24,31}, -{46,-24,32}, -{46,-24,33}, -{46,-24,34}, -{46,-24,35}, -{46,-24,36}, -{46,-24,37}, -{46,-24,38}, -{46,-24,39}, -{46,-24,40}, -{46,-24,41}, -{46,-24,42}, -{46,-24,43}, -{46,-24,44}, -{46,-24,45}, -{46,-24,46}, -{46,-24,47}, -{46,-24,48}, -{46,-24,49}, -{46,-24,50}, -{46,-24,51}, -{46,-23,-15}, -{46,-23,-14}, -{46,-23,-13}, -{46,-23,-12}, -{46,-23,-11}, -{46,-23,-10}, -{46,-23,-9}, -{46,-23,-8}, -{46,-23,-7}, -{46,-23,-6}, -{46,-23,-5}, -{46,-23,-4}, -{46,-23,-3}, -{46,-23,-2}, -{46,-23,-1}, -{46,-23,0}, -{46,-23,1}, -{46,-23,2}, -{46,-23,3}, -{46,-23,4}, -{46,-23,5}, -{46,-23,6}, -{46,-23,7}, -{46,-23,8}, -{46,-23,9}, -{46,-23,10}, -{46,-23,11}, -{46,-23,12}, -{46,-23,13}, -{46,-23,14}, -{46,-23,15}, -{46,-23,16}, -{46,-23,17}, -{46,-23,18}, -{46,-23,19}, -{46,-23,20}, -{46,-23,21}, -{46,-23,22}, -{46,-23,23}, -{46,-23,24}, -{46,-23,25}, -{46,-23,26}, -{46,-23,27}, -{46,-23,28}, -{46,-23,29}, -{46,-23,30}, -{46,-23,31}, -{46,-23,32}, -{46,-23,33}, -{46,-23,34}, -{46,-23,35}, -{46,-23,36}, -{46,-23,37}, -{46,-23,38}, -{46,-23,39}, -{46,-23,40}, -{46,-23,41}, -{46,-23,42}, -{46,-23,43}, -{46,-23,44}, -{46,-23,45}, -{46,-23,46}, -{46,-23,47}, -{46,-23,48}, -{46,-23,49}, -{46,-23,50}, -{46,-23,51}, -{46,-22,-17}, -{46,-22,-16}, -{46,-22,-15}, -{46,-22,-14}, -{46,-22,-13}, -{46,-22,-12}, -{46,-22,-11}, -{46,-22,-10}, -{46,-22,-9}, -{46,-22,-8}, -{46,-22,-7}, -{46,-22,-6}, -{46,-22,-5}, -{46,-22,-4}, -{46,-22,-3}, -{46,-22,-2}, -{46,-22,-1}, -{46,-22,0}, -{46,-22,1}, -{46,-22,2}, -{46,-22,3}, -{46,-22,4}, -{46,-22,5}, -{46,-22,6}, -{46,-22,7}, -{46,-22,8}, -{46,-22,9}, -{46,-22,10}, -{46,-22,11}, -{46,-22,12}, -{46,-22,13}, -{46,-22,14}, -{46,-22,15}, -{46,-22,16}, -{46,-22,17}, -{46,-22,18}, -{46,-22,19}, -{46,-22,20}, -{46,-22,21}, -{46,-22,22}, -{46,-22,23}, -{46,-22,24}, -{46,-22,25}, -{46,-22,26}, -{46,-22,27}, -{46,-22,28}, -{46,-22,29}, -{46,-22,30}, -{46,-22,31}, -{46,-22,32}, -{46,-22,33}, -{46,-22,34}, -{46,-22,35}, -{46,-22,36}, -{46,-22,37}, -{46,-22,38}, -{46,-22,39}, -{46,-22,40}, -{46,-22,41}, -{46,-22,42}, -{46,-22,43}, -{46,-22,44}, -{46,-22,45}, -{46,-22,46}, -{46,-22,47}, -{46,-22,48}, -{46,-22,49}, -{46,-22,50}, -{46,-22,51}, -{46,-21,-18}, -{46,-21,-17}, -{46,-21,-16}, -{46,-21,-15}, -{46,-21,-14}, -{46,-21,-13}, -{46,-21,-12}, -{46,-21,-11}, -{46,-21,-10}, -{46,-21,-9}, -{46,-21,-8}, -{46,-21,-7}, -{46,-21,-6}, -{46,-21,-5}, -{46,-21,-4}, -{46,-21,-3}, -{46,-21,-2}, -{46,-21,-1}, -{46,-21,0}, -{46,-21,1}, -{46,-21,2}, -{46,-21,3}, -{46,-21,4}, -{46,-21,5}, -{46,-21,6}, -{46,-21,7}, -{46,-21,8}, -{46,-21,9}, -{46,-21,10}, -{46,-21,11}, -{46,-21,12}, -{46,-21,13}, -{46,-21,14}, -{46,-21,15}, -{46,-21,16}, -{46,-21,17}, -{46,-21,18}, -{46,-21,19}, -{46,-21,20}, -{46,-21,21}, -{46,-21,22}, -{46,-21,23}, -{46,-21,24}, -{46,-21,25}, -{46,-21,26}, -{46,-21,27}, -{46,-21,28}, -{46,-21,29}, -{46,-21,30}, -{46,-21,31}, -{46,-21,32}, -{46,-21,33}, -{46,-21,34}, -{46,-21,35}, -{46,-21,36}, -{46,-21,37}, -{46,-21,38}, -{46,-21,39}, -{46,-21,40}, -{46,-21,41}, -{46,-21,42}, -{46,-21,43}, -{46,-21,44}, -{46,-21,45}, -{46,-21,46}, -{46,-21,47}, -{46,-21,48}, -{46,-21,49}, -{46,-21,50}, -{46,-21,51}, -{46,-20,-19}, -{46,-20,-18}, -{46,-20,-17}, -{46,-20,-16}, -{46,-20,-15}, -{46,-20,-14}, -{46,-20,-13}, -{46,-20,-12}, -{46,-20,-11}, -{46,-20,-10}, -{46,-20,-9}, -{46,-20,-8}, -{46,-20,-7}, -{46,-20,-6}, -{46,-20,-5}, -{46,-20,-4}, -{46,-20,-3}, -{46,-20,-2}, -{46,-20,-1}, -{46,-20,0}, -{46,-20,1}, -{46,-20,2}, -{46,-20,3}, -{46,-20,4}, -{46,-20,5}, -{46,-20,6}, -{46,-20,7}, -{46,-20,8}, -{46,-20,9}, -{46,-20,10}, -{46,-20,11}, -{46,-20,12}, -{46,-20,13}, -{46,-20,14}, -{46,-20,15}, -{46,-20,16}, -{46,-20,17}, -{46,-20,18}, -{46,-20,19}, -{46,-20,20}, -{46,-20,21}, -{46,-20,22}, -{46,-20,23}, -{46,-20,24}, -{46,-20,25}, -{46,-20,26}, -{46,-20,27}, -{46,-20,28}, -{46,-20,29}, -{46,-20,30}, -{46,-20,31}, -{46,-20,32}, -{46,-20,33}, -{46,-20,34}, -{46,-20,35}, -{46,-20,36}, -{46,-20,37}, -{46,-20,38}, -{46,-20,39}, -{46,-20,40}, -{46,-20,41}, -{46,-20,42}, -{46,-20,43}, -{46,-20,44}, -{46,-20,45}, -{46,-20,46}, -{46,-20,47}, -{46,-20,48}, -{46,-20,49}, -{46,-20,50}, -{46,-20,51}, -{46,-19,-21}, -{46,-19,-20}, -{46,-19,-19}, -{46,-19,-18}, -{46,-19,-17}, -{46,-19,-16}, -{46,-19,-15}, -{46,-19,-14}, -{46,-19,-13}, -{46,-19,-12}, -{46,-19,-11}, -{46,-19,-10}, -{46,-19,-9}, -{46,-19,-8}, -{46,-19,-7}, -{46,-19,-6}, -{46,-19,-5}, -{46,-19,-4}, -{46,-19,-3}, -{46,-19,-2}, -{46,-19,-1}, -{46,-19,0}, -{46,-19,1}, -{46,-19,2}, -{46,-19,3}, -{46,-19,4}, -{46,-19,5}, -{46,-19,6}, -{46,-19,7}, -{46,-19,8}, -{46,-19,9}, -{46,-19,10}, -{46,-19,11}, -{46,-19,12}, -{46,-19,13}, -{46,-19,14}, -{46,-19,15}, -{46,-19,16}, -{46,-19,17}, -{46,-19,18}, -{46,-19,19}, -{46,-19,20}, -{46,-19,21}, -{46,-19,22}, -{46,-19,23}, -{46,-19,24}, -{46,-19,25}, -{46,-19,26}, -{46,-19,27}, -{46,-19,28}, -{46,-19,29}, -{46,-19,30}, -{46,-19,31}, -{46,-19,32}, -{46,-19,33}, -{46,-19,34}, -{46,-19,35}, -{46,-19,36}, -{46,-19,37}, -{46,-19,38}, -{46,-19,39}, -{46,-19,40}, -{46,-19,41}, -{46,-19,42}, -{46,-19,43}, -{46,-19,44}, -{46,-19,45}, -{46,-19,46}, -{46,-19,47}, -{46,-19,48}, -{46,-19,49}, -{46,-19,50}, -{46,-19,51}, -{46,-18,-22}, -{46,-18,-21}, -{46,-18,-20}, -{46,-18,-19}, -{46,-18,-18}, -{46,-18,-17}, -{46,-18,-16}, -{46,-18,-15}, -{46,-18,-14}, -{46,-18,-13}, -{46,-18,-12}, -{46,-18,-11}, -{46,-18,-10}, -{46,-18,-9}, -{46,-18,-8}, -{46,-18,-7}, -{46,-18,-6}, -{46,-18,-5}, -{46,-18,-4}, -{46,-18,-3}, -{46,-18,-2}, -{46,-18,-1}, -{46,-18,0}, -{46,-18,1}, -{46,-18,2}, -{46,-18,3}, -{46,-18,4}, -{46,-18,5}, -{46,-18,6}, -{46,-18,7}, -{46,-18,8}, -{46,-18,9}, -{46,-18,10}, -{46,-18,11}, -{46,-18,12}, -{46,-18,13}, -{46,-18,14}, -{46,-18,15}, -{46,-18,16}, -{46,-18,17}, -{46,-18,18}, -{46,-18,19}, -{46,-18,20}, -{46,-18,21}, -{46,-18,22}, -{46,-18,23}, -{46,-18,24}, -{46,-18,25}, -{46,-18,26}, -{46,-18,27}, -{46,-18,28}, -{46,-18,29}, -{46,-18,30}, -{46,-18,31}, -{46,-18,32}, -{46,-18,33}, -{46,-18,34}, -{46,-18,35}, -{46,-18,36}, -{46,-18,37}, -{46,-18,38}, -{46,-18,39}, -{46,-18,40}, -{46,-18,41}, -{46,-18,42}, -{46,-18,43}, -{46,-18,44}, -{46,-18,45}, -{46,-18,46}, -{46,-18,47}, -{46,-18,48}, -{46,-18,49}, -{46,-18,50}, -{46,-18,51}, -{46,-17,-24}, -{46,-17,-23}, -{46,-17,-22}, -{46,-17,-21}, -{46,-17,-20}, -{46,-17,-19}, -{46,-17,-18}, -{46,-17,-17}, -{46,-17,-16}, -{46,-17,-15}, -{46,-17,-14}, -{46,-17,-13}, -{46,-17,-12}, -{46,-17,-11}, -{46,-17,-10}, -{46,-17,-9}, -{46,-17,-8}, -{46,-17,-7}, -{46,-17,-6}, -{46,-17,-5}, -{46,-17,-4}, -{46,-17,-3}, -{46,-17,-2}, -{46,-17,-1}, -{46,-17,0}, -{46,-17,1}, -{46,-17,2}, -{46,-17,3}, -{46,-17,4}, -{46,-17,5}, -{46,-17,6}, -{46,-17,7}, -{46,-17,8}, -{46,-17,9}, -{46,-17,10}, -{46,-17,11}, -{46,-17,12}, -{46,-17,13}, -{46,-17,14}, -{46,-17,15}, -{46,-17,16}, -{46,-17,17}, -{46,-17,18}, -{46,-17,19}, -{46,-17,20}, -{46,-17,21}, -{46,-17,22}, -{46,-17,23}, -{46,-17,24}, -{46,-17,25}, -{46,-17,26}, -{46,-17,27}, -{46,-17,28}, -{46,-17,29}, -{46,-17,30}, -{46,-17,31}, -{46,-17,32}, -{46,-17,33}, -{46,-17,34}, -{46,-17,35}, -{46,-17,36}, -{46,-17,37}, -{46,-17,38}, -{46,-17,39}, -{46,-17,40}, -{46,-17,41}, -{46,-17,42}, -{46,-17,43}, -{46,-17,44}, -{46,-17,45}, -{46,-17,46}, -{46,-17,47}, -{46,-17,48}, -{46,-17,49}, -{46,-17,50}, -{46,-17,51}, -{46,-16,-25}, -{46,-16,-24}, -{46,-16,-23}, -{46,-16,-22}, -{46,-16,-21}, -{46,-16,-20}, -{46,-16,-19}, -{46,-16,-18}, -{46,-16,-17}, -{46,-16,-16}, -{46,-16,-15}, -{46,-16,-14}, -{46,-16,-13}, -{46,-16,-12}, -{46,-16,-11}, -{46,-16,-10}, -{46,-16,-9}, -{46,-16,-8}, -{46,-16,-7}, -{46,-16,-6}, -{46,-16,-5}, -{46,-16,-4}, -{46,-16,-3}, -{46,-16,-2}, -{46,-16,-1}, -{46,-16,0}, -{46,-16,1}, -{46,-16,2}, -{46,-16,3}, -{46,-16,4}, -{46,-16,5}, -{46,-16,6}, -{46,-16,7}, -{46,-16,8}, -{46,-16,9}, -{46,-16,10}, -{46,-16,11}, -{46,-16,12}, -{46,-16,13}, -{46,-16,14}, -{46,-16,15}, -{46,-16,16}, -{46,-16,17}, -{46,-16,18}, -{46,-16,19}, -{46,-16,20}, -{46,-16,21}, -{46,-16,22}, -{46,-16,23}, -{46,-16,24}, -{46,-16,25}, -{46,-16,26}, -{46,-16,27}, -{46,-16,28}, -{46,-16,29}, -{46,-16,30}, -{46,-16,31}, -{46,-16,32}, -{46,-16,33}, -{46,-16,34}, -{46,-16,35}, -{46,-16,36}, -{46,-16,37}, -{46,-16,38}, -{46,-16,39}, -{46,-16,40}, -{46,-16,41}, -{46,-16,42}, -{46,-16,43}, -{46,-16,44}, -{46,-16,45}, -{46,-16,46}, -{46,-16,47}, -{46,-16,48}, -{46,-16,49}, -{46,-16,50}, -{46,-16,51}, -{46,-15,-26}, -{46,-15,-25}, -{46,-15,-24}, -{46,-15,-23}, -{46,-15,-22}, -{46,-15,-21}, -{46,-15,-20}, -{46,-15,-19}, -{46,-15,-18}, -{46,-15,-17}, -{46,-15,-16}, -{46,-15,-15}, -{46,-15,-14}, -{46,-15,-13}, -{46,-15,-12}, -{46,-15,-11}, -{46,-15,-10}, -{46,-15,-9}, -{46,-15,-8}, -{46,-15,-7}, -{46,-15,-6}, -{46,-15,-5}, -{46,-15,-4}, -{46,-15,-3}, -{46,-15,-2}, -{46,-15,-1}, -{46,-15,0}, -{46,-15,1}, -{46,-15,2}, -{46,-15,3}, -{46,-15,4}, -{46,-15,5}, -{46,-15,6}, -{46,-15,7}, -{46,-15,8}, -{46,-15,9}, -{46,-15,10}, -{46,-15,11}, -{46,-15,12}, -{46,-15,13}, -{46,-15,14}, -{46,-15,15}, -{46,-15,16}, -{46,-15,17}, -{46,-15,18}, -{46,-15,19}, -{46,-15,20}, -{46,-15,21}, -{46,-15,22}, -{46,-15,23}, -{46,-15,24}, -{46,-15,25}, -{46,-15,26}, -{46,-15,27}, -{46,-15,28}, -{46,-15,29}, -{46,-15,30}, -{46,-15,31}, -{46,-15,32}, -{46,-15,33}, -{46,-15,34}, -{46,-15,35}, -{46,-15,36}, -{46,-15,37}, -{46,-15,38}, -{46,-15,39}, -{46,-15,40}, -{46,-15,41}, -{46,-15,42}, -{46,-15,43}, -{46,-15,44}, -{46,-15,45}, -{46,-15,46}, -{46,-15,47}, -{46,-15,48}, -{46,-15,49}, -{46,-15,50}, -{46,-15,51}, -{46,-14,-27}, -{46,-14,-26}, -{46,-14,-25}, -{46,-14,-24}, -{46,-14,-23}, -{46,-14,-22}, -{46,-14,-21}, -{46,-14,-20}, -{46,-14,-19}, -{46,-14,-18}, -{46,-14,-17}, -{46,-14,-16}, -{46,-14,-15}, -{46,-14,-14}, -{46,-14,-13}, -{46,-14,-12}, -{46,-14,-11}, -{46,-14,-10}, -{46,-14,-9}, -{46,-14,-8}, -{46,-14,-7}, -{46,-14,-6}, -{46,-14,-5}, -{46,-14,-4}, -{46,-14,-3}, -{46,-14,-2}, -{46,-14,-1}, -{46,-14,0}, -{46,-14,1}, -{46,-14,2}, -{46,-14,3}, -{46,-14,4}, -{46,-14,5}, -{46,-14,6}, -{46,-14,7}, -{46,-14,8}, -{46,-14,9}, -{46,-14,10}, -{46,-14,11}, -{46,-14,12}, -{46,-14,13}, -{46,-14,14}, -{46,-14,15}, -{46,-14,16}, -{46,-14,17}, -{46,-14,18}, -{46,-14,19}, -{46,-14,20}, -{46,-14,21}, -{46,-14,22}, -{46,-14,23}, -{46,-14,24}, -{46,-14,25}, -{46,-14,26}, -{46,-14,27}, -{46,-14,28}, -{46,-14,29}, -{46,-14,30}, -{46,-14,31}, -{46,-14,32}, -{46,-14,33}, -{46,-14,34}, -{46,-14,35}, -{46,-14,36}, -{46,-14,37}, -{46,-14,38}, -{46,-14,39}, -{46,-14,40}, -{46,-14,41}, -{46,-14,42}, -{46,-14,43}, -{46,-14,44}, -{46,-14,45}, -{46,-14,46}, -{46,-14,47}, -{46,-14,48}, -{46,-14,49}, -{46,-14,50}, -{46,-14,51}, -{46,-13,-29}, -{46,-13,-28}, -{46,-13,-27}, -{46,-13,-26}, -{46,-13,-25}, -{46,-13,-24}, -{46,-13,-23}, -{46,-13,-22}, -{46,-13,-21}, -{46,-13,-20}, -{46,-13,-19}, -{46,-13,-18}, -{46,-13,-17}, -{46,-13,-16}, -{46,-13,-15}, -{46,-13,-14}, -{46,-13,-13}, -{46,-13,-12}, -{46,-13,-11}, -{46,-13,-10}, -{46,-13,-9}, -{46,-13,-8}, -{46,-13,-7}, -{46,-13,-6}, -{46,-13,-5}, -{46,-13,-4}, -{46,-13,-3}, -{46,-13,-2}, -{46,-13,-1}, -{46,-13,0}, -{46,-13,1}, -{46,-13,2}, -{46,-13,3}, -{46,-13,4}, -{46,-13,5}, -{46,-13,6}, -{46,-13,7}, -{46,-13,8}, -{46,-13,9}, -{46,-13,10}, -{46,-13,11}, -{46,-13,12}, -{46,-13,13}, -{46,-13,14}, -{46,-13,15}, -{46,-13,16}, -{46,-13,17}, -{46,-13,18}, -{46,-13,19}, -{46,-13,20}, -{46,-13,21}, -{46,-13,22}, -{46,-13,23}, -{46,-13,24}, -{46,-13,25}, -{46,-13,26}, -{46,-13,27}, -{46,-13,28}, -{46,-13,29}, -{46,-13,30}, -{46,-13,31}, -{46,-13,32}, -{46,-13,33}, -{46,-13,34}, -{46,-13,35}, -{46,-13,36}, -{46,-13,37}, -{46,-13,38}, -{46,-13,39}, -{46,-13,40}, -{46,-13,41}, -{46,-13,42}, -{46,-13,43}, -{46,-13,44}, -{46,-13,45}, -{46,-13,46}, -{46,-13,47}, -{46,-13,48}, -{46,-13,49}, -{46,-13,50}, -{46,-13,51}, -{46,-12,-30}, -{46,-12,-29}, -{46,-12,-28}, -{46,-12,-27}, -{46,-12,-26}, -{46,-12,-25}, -{46,-12,-24}, -{46,-12,-23}, -{46,-12,-22}, -{46,-12,-21}, -{46,-12,-20}, -{46,-12,-19}, -{46,-12,-18}, -{46,-12,-17}, -{46,-12,-16}, -{46,-12,-15}, -{46,-12,-14}, -{46,-12,-13}, -{46,-12,-12}, -{46,-12,-11}, -{46,-12,-10}, -{46,-12,-9}, -{46,-12,-8}, -{46,-12,-7}, -{46,-12,-6}, -{46,-12,-5}, -{46,-12,-4}, -{46,-12,-3}, -{46,-12,-2}, -{46,-12,-1}, -{46,-12,0}, -{46,-12,1}, -{46,-12,2}, -{46,-12,3}, -{46,-12,4}, -{46,-12,5}, -{46,-12,6}, -{46,-12,7}, -{46,-12,8}, -{46,-12,9}, -{46,-12,10}, -{46,-12,11}, -{46,-12,12}, -{46,-12,13}, -{46,-12,14}, -{46,-12,15}, -{46,-12,16}, -{46,-12,17}, -{46,-12,18}, -{46,-12,19}, -{46,-12,20}, -{46,-12,21}, -{46,-12,22}, -{46,-12,23}, -{46,-12,24}, -{46,-12,25}, -{46,-12,26}, -{46,-12,27}, -{46,-12,28}, -{46,-12,29}, -{46,-12,30}, -{46,-12,31}, -{46,-12,32}, -{46,-12,33}, -{46,-12,34}, -{46,-12,35}, -{46,-12,36}, -{46,-12,37}, -{46,-12,38}, -{46,-12,39}, -{46,-12,40}, -{46,-12,41}, -{46,-12,42}, -{46,-12,43}, -{46,-12,44}, -{46,-12,45}, -{46,-12,46}, -{46,-12,47}, -{46,-12,48}, -{46,-12,49}, -{46,-12,50}, -{46,-12,51}, -{46,-11,-31}, -{46,-11,-30}, -{46,-11,-29}, -{46,-11,-28}, -{46,-11,-27}, -{46,-11,-26}, -{46,-11,-25}, -{46,-11,-24}, -{46,-11,-23}, -{46,-11,-22}, -{46,-11,-21}, -{46,-11,-20}, -{46,-11,-19}, -{46,-11,-18}, -{46,-11,-17}, -{46,-11,-16}, -{46,-11,-15}, -{46,-11,-14}, -{46,-11,-13}, -{46,-11,-12}, -{46,-11,-11}, -{46,-11,-10}, -{46,-11,-9}, -{46,-11,-8}, -{46,-11,-7}, -{46,-11,-6}, -{46,-11,-5}, -{46,-11,-4}, -{46,-11,-3}, -{46,-11,-2}, -{46,-11,-1}, -{46,-11,0}, -{46,-11,1}, -{46,-11,2}, -{46,-11,3}, -{46,-11,4}, -{46,-11,5}, -{46,-11,6}, -{46,-11,7}, -{46,-11,8}, -{46,-11,9}, -{46,-11,10}, -{46,-11,11}, -{46,-11,12}, -{46,-11,13}, -{46,-11,14}, -{46,-11,15}, -{46,-11,16}, -{46,-11,17}, -{46,-11,18}, -{46,-11,19}, -{46,-11,20}, -{46,-11,21}, -{46,-11,22}, -{46,-11,23}, -{46,-11,24}, -{46,-11,25}, -{46,-11,26}, -{46,-11,27}, -{46,-11,28}, -{46,-11,29}, -{46,-11,30}, -{46,-11,31}, -{46,-11,32}, -{46,-11,33}, -{46,-11,34}, -{46,-11,35}, -{46,-11,36}, -{46,-11,37}, -{46,-11,38}, -{46,-11,39}, -{46,-11,40}, -{46,-11,41}, -{46,-11,42}, -{46,-11,43}, -{46,-11,44}, -{46,-11,45}, -{46,-11,46}, -{46,-11,47}, -{46,-11,48}, -{46,-11,49}, -{46,-11,50}, -{46,-11,51}, -{46,-11,52}, -{46,-10,-32}, -{46,-10,-31}, -{46,-10,-30}, -{46,-10,-29}, -{46,-10,-28}, -{46,-10,-27}, -{46,-10,-26}, -{46,-10,-25}, -{46,-10,-24}, -{46,-10,-23}, -{46,-10,-22}, -{46,-10,-21}, -{46,-10,-20}, -{46,-10,-19}, -{46,-10,-18}, -{46,-10,-17}, -{46,-10,-16}, -{46,-10,-15}, -{46,-10,-14}, -{46,-10,-13}, -{46,-10,-12}, -{46,-10,-11}, -{46,-10,-10}, -{46,-10,-9}, -{46,-10,-8}, -{46,-10,-7}, -{46,-10,-6}, -{46,-10,-5}, -{46,-10,-4}, -{46,-10,-3}, -{46,-10,-2}, -{46,-10,-1}, -{46,-10,0}, -{46,-10,1}, -{46,-10,2}, -{46,-10,3}, -{46,-10,4}, -{46,-10,5}, -{46,-10,6}, -{46,-10,7}, -{46,-10,8}, -{46,-10,9}, -{46,-10,10}, -{46,-10,11}, -{46,-10,12}, -{46,-10,13}, -{46,-10,14}, -{46,-10,15}, -{46,-10,16}, -{46,-10,17}, -{46,-10,18}, -{46,-10,19}, -{46,-10,20}, -{46,-10,21}, -{46,-10,22}, -{46,-10,23}, -{46,-10,24}, -{46,-10,25}, -{46,-10,26}, -{46,-10,27}, -{46,-10,28}, -{46,-10,29}, -{46,-10,30}, -{46,-10,31}, -{46,-10,32}, -{46,-10,33}, -{46,-10,34}, -{46,-10,35}, -{46,-10,36}, -{46,-10,37}, -{46,-10,38}, -{46,-10,39}, -{46,-10,40}, -{46,-10,41}, -{46,-10,42}, -{46,-10,43}, -{46,-10,44}, -{46,-10,45}, -{46,-10,46}, -{46,-10,47}, -{46,-10,48}, -{46,-10,49}, -{46,-10,50}, -{46,-10,51}, -{46,-10,52}, -{46,-9,-34}, -{46,-9,-33}, -{46,-9,-32}, -{46,-9,-31}, -{46,-9,-30}, -{46,-9,-29}, -{46,-9,-28}, -{46,-9,-27}, -{46,-9,-26}, -{46,-9,-25}, -{46,-9,-24}, -{46,-9,-23}, -{46,-9,-22}, -{46,-9,-21}, -{46,-9,-20}, -{46,-9,-19}, -{46,-9,-18}, -{46,-9,-17}, -{46,-9,-16}, -{46,-9,-15}, -{46,-9,-14}, -{46,-9,-13}, -{46,-9,-12}, -{46,-9,-11}, -{46,-9,-10}, -{46,-9,-9}, -{46,-9,-8}, -{46,-9,-7}, -{46,-9,-6}, -{46,-9,-5}, -{46,-9,-4}, -{46,-9,-3}, -{46,-9,-2}, -{46,-9,-1}, -{46,-9,0}, -{46,-9,1}, -{46,-9,2}, -{46,-9,3}, -{46,-9,4}, -{46,-9,5}, -{46,-9,6}, -{46,-9,7}, -{46,-9,8}, -{46,-9,9}, -{46,-9,10}, -{46,-9,11}, -{46,-9,12}, -{46,-9,13}, -{46,-9,14}, -{46,-9,15}, -{46,-9,16}, -{46,-9,17}, -{46,-9,18}, -{46,-9,19}, -{46,-9,20}, -{46,-9,21}, -{46,-9,22}, -{46,-9,23}, -{46,-9,24}, -{46,-9,25}, -{46,-9,26}, -{46,-9,27}, -{46,-9,28}, -{46,-9,29}, -{46,-9,30}, -{46,-9,31}, -{46,-9,32}, -{46,-9,33}, -{46,-9,34}, -{46,-9,35}, -{46,-9,36}, -{46,-9,37}, -{46,-9,38}, -{46,-9,39}, -{46,-9,40}, -{46,-9,41}, -{46,-9,42}, -{46,-9,43}, -{46,-9,44}, -{46,-9,45}, -{46,-9,46}, -{46,-9,47}, -{46,-9,48}, -{46,-9,49}, -{46,-9,50}, -{46,-9,51}, -{46,-9,52}, -{46,-8,-35}, -{46,-8,-34}, -{46,-8,-33}, -{46,-8,-32}, -{46,-8,-31}, -{46,-8,-30}, -{46,-8,-29}, -{46,-8,-28}, -{46,-8,-27}, -{46,-8,-26}, -{46,-8,-25}, -{46,-8,-24}, -{46,-8,-23}, -{46,-8,-22}, -{46,-8,-21}, -{46,-8,-20}, -{46,-8,-19}, -{46,-8,-18}, -{46,-8,-17}, -{46,-8,-16}, -{46,-8,-15}, -{46,-8,-14}, -{46,-8,-13}, -{46,-8,-12}, -{46,-8,-11}, -{46,-8,-10}, -{46,-8,-9}, -{46,-8,-8}, -{46,-8,-7}, -{46,-8,-6}, -{46,-8,-5}, -{46,-8,-4}, -{46,-8,-3}, -{46,-8,-2}, -{46,-8,-1}, -{46,-8,0}, -{46,-8,1}, -{46,-8,2}, -{46,-8,3}, -{46,-8,4}, -{46,-8,5}, -{46,-8,6}, -{46,-8,7}, -{46,-8,8}, -{46,-8,9}, -{46,-8,10}, -{46,-8,11}, -{46,-8,12}, -{46,-8,13}, -{46,-8,14}, -{46,-8,15}, -{46,-8,16}, -{46,-8,17}, -{46,-8,18}, -{46,-8,19}, -{46,-8,20}, -{46,-8,21}, -{46,-8,22}, -{46,-8,23}, -{46,-8,24}, -{46,-8,25}, -{46,-8,26}, -{46,-8,27}, -{46,-8,28}, -{46,-8,29}, -{46,-8,30}, -{46,-8,31}, -{46,-8,32}, -{46,-8,33}, -{46,-8,34}, -{46,-8,35}, -{46,-8,36}, -{46,-8,37}, -{46,-8,38}, -{46,-8,39}, -{46,-8,40}, -{46,-8,41}, -{46,-8,42}, -{46,-8,43}, -{46,-8,44}, -{46,-8,45}, -{46,-8,46}, -{46,-8,47}, -{46,-8,48}, -{46,-8,49}, -{46,-8,50}, -{46,-8,51}, -{46,-8,52}, -{46,-7,-36}, -{46,-7,-35}, -{46,-7,-34}, -{46,-7,-33}, -{46,-7,-32}, -{46,-7,-31}, -{46,-7,-30}, -{46,-7,-29}, -{46,-7,-28}, -{46,-7,-27}, -{46,-7,-26}, -{46,-7,-25}, -{46,-7,-24}, -{46,-7,-23}, -{46,-7,-22}, -{46,-7,-21}, -{46,-7,-20}, -{46,-7,-19}, -{46,-7,-18}, -{46,-7,-17}, -{46,-7,-16}, -{46,-7,-15}, -{46,-7,-14}, -{46,-7,-13}, -{46,-7,-12}, -{46,-7,-11}, -{46,-7,-10}, -{46,-7,-9}, -{46,-7,-8}, -{46,-7,-7}, -{46,-7,-6}, -{46,-7,-5}, -{46,-7,-4}, -{46,-7,-3}, -{46,-7,-2}, -{46,-7,-1}, -{46,-7,0}, -{46,-7,1}, -{46,-7,2}, -{46,-7,3}, -{46,-7,4}, -{46,-7,5}, -{46,-7,6}, -{46,-7,7}, -{46,-7,8}, -{46,-7,9}, -{46,-7,10}, -{46,-7,11}, -{46,-7,12}, -{46,-7,13}, -{46,-7,14}, -{46,-7,15}, -{46,-7,16}, -{46,-7,17}, -{46,-7,18}, -{46,-7,19}, -{46,-7,20}, -{46,-7,21}, -{46,-7,22}, -{46,-7,23}, -{46,-7,24}, -{46,-7,25}, -{46,-7,26}, -{46,-7,27}, -{46,-7,28}, -{46,-7,29}, -{46,-7,30}, -{46,-7,31}, -{46,-7,32}, -{46,-7,33}, -{46,-7,34}, -{46,-7,35}, -{46,-7,36}, -{46,-7,37}, -{46,-7,38}, -{46,-7,39}, -{46,-7,40}, -{46,-7,41}, -{46,-7,42}, -{46,-7,43}, -{46,-7,44}, -{46,-7,45}, -{46,-7,46}, -{46,-7,47}, -{46,-7,48}, -{46,-7,49}, -{46,-7,50}, -{46,-7,51}, -{46,-7,52}, -{46,-6,-37}, -{46,-6,-36}, -{46,-6,-35}, -{46,-6,-34}, -{46,-6,-33}, -{46,-6,-32}, -{46,-6,-31}, -{46,-6,-30}, -{46,-6,-29}, -{46,-6,-28}, -{46,-6,-27}, -{46,-6,-26}, -{46,-6,-25}, -{46,-6,-24}, -{46,-6,-23}, -{46,-6,-22}, -{46,-6,-21}, -{46,-6,-20}, -{46,-6,-19}, -{46,-6,-18}, -{46,-6,-17}, -{46,-6,-16}, -{46,-6,-15}, -{46,-6,-14}, -{46,-6,-13}, -{46,-6,-12}, -{46,-6,-11}, -{46,-6,-10}, -{46,-6,-9}, -{46,-6,-8}, -{46,-6,-7}, -{46,-6,-6}, -{46,-6,-5}, -{46,-6,-4}, -{46,-6,-3}, -{46,-6,-2}, -{46,-6,-1}, -{46,-6,0}, -{46,-6,1}, -{46,-6,2}, -{46,-6,3}, -{46,-6,4}, -{46,-6,5}, -{46,-6,6}, -{46,-6,7}, -{46,-6,8}, -{46,-6,9}, -{46,-6,10}, -{46,-6,11}, -{46,-6,12}, -{46,-6,13}, -{46,-6,14}, -{46,-6,15}, -{46,-6,16}, -{46,-6,17}, -{46,-6,18}, -{46,-6,19}, -{46,-6,20}, -{46,-6,21}, -{46,-6,22}, -{46,-6,23}, -{46,-6,24}, -{46,-6,25}, -{46,-6,26}, -{46,-6,27}, -{46,-6,28}, -{46,-6,29}, -{46,-6,30}, -{46,-6,31}, -{46,-6,32}, -{46,-6,33}, -{46,-6,34}, -{46,-6,35}, -{46,-6,36}, -{46,-6,37}, -{46,-6,38}, -{46,-6,39}, -{46,-6,40}, -{46,-6,41}, -{46,-6,42}, -{46,-6,43}, -{46,-6,44}, -{46,-6,45}, -{46,-6,46}, -{46,-6,47}, -{46,-6,48}, -{46,-6,49}, -{46,-6,50}, -{46,-6,51}, -{46,-6,52}, -{46,-5,-38}, -{46,-5,-37}, -{46,-5,-36}, -{46,-5,-35}, -{46,-5,-34}, -{46,-5,-33}, -{46,-5,-32}, -{46,-5,-31}, -{46,-5,-30}, -{46,-5,-29}, -{46,-5,-28}, -{46,-5,-27}, -{46,-5,-26}, -{46,-5,-25}, -{46,-5,-24}, -{46,-5,-23}, -{46,-5,-22}, -{46,-5,-21}, -{46,-5,-20}, -{46,-5,-19}, -{46,-5,-18}, -{46,-5,-17}, -{46,-5,-16}, -{46,-5,-15}, -{46,-5,-14}, -{46,-5,-13}, -{46,-5,-12}, -{46,-5,-11}, -{46,-5,-10}, -{46,-5,-9}, -{46,-5,-8}, -{46,-5,-7}, -{46,-5,-6}, -{46,-5,-5}, -{46,-5,-4}, -{46,-5,-3}, -{46,-5,-2}, -{46,-5,-1}, -{46,-5,0}, -{46,-5,1}, -{46,-5,2}, -{46,-5,3}, -{46,-5,4}, -{46,-5,5}, -{46,-5,6}, -{46,-5,7}, -{46,-5,8}, -{46,-5,9}, -{46,-5,10}, -{46,-5,11}, -{46,-5,12}, -{46,-5,13}, -{46,-5,14}, -{46,-5,15}, -{46,-5,16}, -{46,-5,17}, -{46,-5,18}, -{46,-5,19}, -{46,-5,20}, -{46,-5,21}, -{46,-5,22}, -{46,-5,23}, -{46,-5,24}, -{46,-5,25}, -{46,-5,26}, -{46,-5,27}, -{46,-5,28}, -{46,-5,29}, -{46,-5,30}, -{46,-5,31}, -{46,-5,32}, -{46,-5,33}, -{46,-5,34}, -{46,-5,35}, -{46,-5,36}, -{46,-5,37}, -{46,-5,38}, -{46,-5,39}, -{46,-5,40}, -{46,-5,41}, -{46,-5,42}, -{46,-5,43}, -{46,-5,44}, -{46,-5,45}, -{46,-5,46}, -{46,-5,47}, -{46,-5,48}, -{46,-5,49}, -{46,-5,50}, -{46,-5,51}, -{46,-5,52}, -{46,-4,-40}, -{46,-4,-39}, -{46,-4,-38}, -{46,-4,-37}, -{46,-4,-36}, -{46,-4,-35}, -{46,-4,-34}, -{46,-4,-33}, -{46,-4,-32}, -{46,-4,-31}, -{46,-4,-30}, -{46,-4,-29}, -{46,-4,-28}, -{46,-4,-27}, -{46,-4,-26}, -{46,-4,-25}, -{46,-4,-24}, -{46,-4,-23}, -{46,-4,-22}, -{46,-4,-21}, -{46,-4,-20}, -{46,-4,-19}, -{46,-4,-18}, -{46,-4,-17}, -{46,-4,-16}, -{46,-4,-15}, -{46,-4,-14}, -{46,-4,-13}, -{46,-4,-12}, -{46,-4,-11}, -{46,-4,-10}, -{46,-4,-9}, -{46,-4,-8}, -{46,-4,-7}, -{46,-4,-6}, -{46,-4,-5}, -{46,-4,-4}, -{46,-4,-3}, -{46,-4,-2}, -{46,-4,-1}, -{46,-4,0}, -{46,-4,1}, -{46,-4,2}, -{46,-4,3}, -{46,-4,4}, -{46,-4,5}, -{46,-4,6}, -{46,-4,7}, -{46,-4,8}, -{46,-4,9}, -{46,-4,10}, -{46,-4,11}, -{46,-4,12}, -{46,-4,13}, -{46,-4,14}, -{46,-4,15}, -{46,-4,16}, -{46,-4,17}, -{46,-4,18}, -{46,-4,19}, -{46,-4,20}, -{46,-4,21}, -{46,-4,22}, -{46,-4,23}, -{46,-4,24}, -{46,-4,25}, -{46,-4,26}, -{46,-4,27}, -{46,-4,28}, -{46,-4,29}, -{46,-4,30}, -{46,-4,31}, -{46,-4,32}, -{46,-4,33}, -{46,-4,34}, -{46,-4,35}, -{46,-4,36}, -{46,-4,37}, -{46,-4,38}, -{46,-4,39}, -{46,-4,40}, -{46,-4,41}, -{46,-4,42}, -{46,-4,43}, -{46,-4,44}, -{46,-4,45}, -{46,-4,46}, -{46,-4,47}, -{46,-4,48}, -{46,-4,49}, -{46,-4,50}, -{46,-4,51}, -{46,-4,52}, -{46,-3,-41}, -{46,-3,-40}, -{46,-3,-39}, -{46,-3,-38}, -{46,-3,-37}, -{46,-3,-36}, -{46,-3,-35}, -{46,-3,-34}, -{46,-3,-33}, -{46,-3,-32}, -{46,-3,-31}, -{46,-3,-30}, -{46,-3,-29}, -{46,-3,-28}, -{46,-3,-27}, -{46,-3,-26}, -{46,-3,-25}, -{46,-3,-24}, -{46,-3,-23}, -{46,-3,-22}, -{46,-3,-21}, -{46,-3,-20}, -{46,-3,-19}, -{46,-3,-18}, -{46,-3,-17}, -{46,-3,-16}, -{46,-3,-15}, -{46,-3,-14}, -{46,-3,-13}, -{46,-3,-12}, -{46,-3,-11}, -{46,-3,-10}, -{46,-3,-9}, -{46,-3,-8}, -{46,-3,-7}, -{46,-3,-6}, -{46,-3,-5}, -{46,-3,-4}, -{46,-3,-3}, -{46,-3,-2}, -{46,-3,-1}, -{46,-3,0}, -{46,-3,1}, -{46,-3,2}, -{46,-3,3}, -{46,-3,4}, -{46,-3,5}, -{46,-3,6}, -{46,-3,7}, -{46,-3,8}, -{46,-3,9}, -{46,-3,10}, -{46,-3,11}, -{46,-3,12}, -{46,-3,13}, -{46,-3,14}, -{46,-3,15}, -{46,-3,16}, -{46,-3,17}, -{46,-3,18}, -{46,-3,19}, -{46,-3,20}, -{46,-3,21}, -{46,-3,22}, -{46,-3,23}, -{46,-3,24}, -{46,-3,25}, -{46,-3,26}, -{46,-3,27}, -{46,-3,28}, -{46,-3,29}, -{46,-3,30}, -{46,-3,31}, -{46,-3,32}, -{46,-3,33}, -{46,-3,34}, -{46,-3,35}, -{46,-3,36}, -{46,-3,37}, -{46,-3,38}, -{46,-3,39}, -{46,-3,40}, -{46,-3,41}, -{46,-3,42}, -{46,-3,43}, -{46,-3,44}, -{46,-3,45}, -{46,-3,46}, -{46,-3,47}, -{46,-3,48}, -{46,-3,49}, -{46,-3,50}, -{46,-3,51}, -{46,-3,52}, -{46,-2,-42}, -{46,-2,-41}, -{46,-2,-40}, -{46,-2,-39}, -{46,-2,-38}, -{46,-2,-37}, -{46,-2,-36}, -{46,-2,-35}, -{46,-2,-34}, -{46,-2,-33}, -{46,-2,-32}, -{46,-2,-31}, -{46,-2,-30}, -{46,-2,-29}, -{46,-2,-28}, -{46,-2,-27}, -{46,-2,-26}, -{46,-2,-25}, -{46,-2,-24}, -{46,-2,-23}, -{46,-2,-22}, -{46,-2,-21}, -{46,-2,-20}, -{46,-2,-19}, -{46,-2,-18}, -{46,-2,-17}, -{46,-2,-16}, -{46,-2,-15}, -{46,-2,-14}, -{46,-2,-13}, -{46,-2,-12}, -{46,-2,-11}, -{46,-2,-10}, -{46,-2,-9}, -{46,-2,-8}, -{46,-2,-7}, -{46,-2,-6}, -{46,-2,-5}, -{46,-2,-4}, -{46,-2,-3}, -{46,-2,-2}, -{46,-2,-1}, -{46,-2,0}, -{46,-2,1}, -{46,-2,2}, -{46,-2,3}, -{46,-2,4}, -{46,-2,5}, -{46,-2,6}, -{46,-2,7}, -{46,-2,8}, -{46,-2,9}, -{46,-2,10}, -{46,-2,11}, -{46,-2,12}, -{46,-2,13}, -{46,-2,14}, -{46,-2,15}, -{46,-2,16}, -{46,-2,17}, -{46,-2,18}, -{46,-2,19}, -{46,-2,20}, -{46,-2,21}, -{46,-2,22}, -{46,-2,23}, -{46,-2,24}, -{46,-2,25}, -{46,-2,26}, -{46,-2,27}, -{46,-2,28}, -{46,-2,29}, -{46,-2,30}, -{46,-2,31}, -{46,-2,32}, -{46,-2,33}, -{46,-2,34}, -{46,-2,35}, -{46,-2,36}, -{46,-2,37}, -{46,-2,38}, -{46,-2,39}, -{46,-2,40}, -{46,-2,41}, -{46,-2,42}, -{46,-2,43}, -{46,-2,44}, -{46,-2,45}, -{46,-2,46}, -{46,-2,47}, -{46,-2,48}, -{46,-2,49}, -{46,-2,50}, -{46,-2,51}, -{46,-2,52}, -{46,-1,-43}, -{46,-1,-42}, -{46,-1,-41}, -{46,-1,-40}, -{46,-1,-39}, -{46,-1,-38}, -{46,-1,-37}, -{46,-1,-36}, -{46,-1,-35}, -{46,-1,-34}, -{46,-1,-33}, -{46,-1,-32}, -{46,-1,-31}, -{46,-1,-30}, -{46,-1,-29}, -{46,-1,-28}, -{46,-1,-27}, -{46,-1,-26}, -{46,-1,-25}, -{46,-1,-24}, -{46,-1,-23}, -{46,-1,-22}, -{46,-1,-21}, -{46,-1,-20}, -{46,-1,-19}, -{46,-1,-18}, -{46,-1,-17}, -{46,-1,-16}, -{46,-1,-15}, -{46,-1,-14}, -{46,-1,-13}, -{46,-1,-12}, -{46,-1,-11}, -{46,-1,-10}, -{46,-1,-9}, -{46,-1,-8}, -{46,-1,-7}, -{46,-1,-6}, -{46,-1,-5}, -{46,-1,-4}, -{46,-1,-3}, -{46,-1,-2}, -{46,-1,-1}, -{46,-1,0}, -{46,-1,1}, -{46,-1,2}, -{46,-1,3}, -{46,-1,4}, -{46,-1,5}, -{46,-1,6}, -{46,-1,7}, -{46,-1,8}, -{46,-1,9}, -{46,-1,10}, -{46,-1,11}, -{46,-1,12}, -{46,-1,13}, -{46,-1,14}, -{46,-1,15}, -{46,-1,16}, -{46,-1,17}, -{46,-1,18}, -{46,-1,19}, -{46,-1,20}, -{46,-1,21}, -{46,-1,22}, -{46,-1,23}, -{46,-1,24}, -{46,-1,25}, -{46,-1,26}, -{46,-1,27}, -{46,-1,28}, -{46,-1,29}, -{46,-1,30}, -{46,-1,31}, -{46,-1,32}, -{46,-1,33}, -{46,-1,34}, -{46,-1,35}, -{46,-1,36}, -{46,-1,37}, -{46,-1,38}, -{46,-1,39}, -{46,-1,40}, -{46,-1,41}, -{46,-1,42}, -{46,-1,43}, -{46,-1,44}, -{46,-1,45}, -{46,-1,46}, -{46,-1,47}, -{46,-1,48}, -{46,-1,49}, -{46,-1,50}, -{46,-1,51}, -{46,-1,52}, -{46,0,-44}, -{46,0,-43}, -{46,0,-42}, -{46,0,-41}, -{46,0,-40}, -{46,0,-39}, -{46,0,-38}, -{46,0,-37}, -{46,0,-36}, -{46,0,-35}, -{46,0,-34}, -{46,0,-33}, -{46,0,-32}, -{46,0,-31}, -{46,0,-30}, -{46,0,-29}, -{46,0,-28}, -{46,0,-27}, -{46,0,-26}, -{46,0,-25}, -{46,0,-24}, -{46,0,-23}, -{46,0,-22}, -{46,0,-21}, -{46,0,-20}, -{46,0,-19}, -{46,0,-18}, -{46,0,-17}, -{46,0,-16}, -{46,0,-15}, -{46,0,-14}, -{46,0,-13}, -{46,0,-12}, -{46,0,-11}, -{46,0,-10}, -{46,0,-9}, -{46,0,-8}, -{46,0,-7}, -{46,0,-6}, -{46,0,-5}, -{46,0,-4}, -{46,0,-3}, -{46,0,-2}, -{46,0,-1}, -{46,0,0}, -{46,0,1}, -{46,0,2}, -{46,0,3}, -{46,0,4}, -{46,0,5}, -{46,0,6}, -{46,0,7}, -{46,0,8}, -{46,0,9}, -{46,0,10}, -{46,0,11}, -{46,0,12}, -{46,0,13}, -{46,0,14}, -{46,0,15}, -{46,0,16}, -{46,0,17}, -{46,0,18}, -{46,0,19}, -{46,0,20}, -{46,0,21}, -{46,0,22}, -{46,0,23}, -{46,0,24}, -{46,0,25}, -{46,0,26}, -{46,0,27}, -{46,0,28}, -{46,0,29}, -{46,0,30}, -{46,0,31}, -{46,0,32}, -{46,0,33}, -{46,0,34}, -{46,0,35}, -{46,0,36}, -{46,0,37}, -{46,0,38}, -{46,0,39}, -{46,0,40}, -{46,0,41}, -{46,0,42}, -{46,0,43}, -{46,0,44}, -{46,0,45}, -{46,0,46}, -{46,0,47}, -{46,0,48}, -{46,0,49}, -{46,0,50}, -{46,0,51}, -{46,0,52}, -{46,1,-45}, -{46,1,-44}, -{46,1,-43}, -{46,1,-42}, -{46,1,-41}, -{46,1,-40}, -{46,1,-39}, -{46,1,-38}, -{46,1,-37}, -{46,1,-36}, -{46,1,-35}, -{46,1,-34}, -{46,1,-33}, -{46,1,-32}, -{46,1,-31}, -{46,1,-30}, -{46,1,-29}, -{46,1,-28}, -{46,1,-27}, -{46,1,-26}, -{46,1,-25}, -{46,1,-24}, -{46,1,-23}, -{46,1,-22}, -{46,1,-21}, -{46,1,-20}, -{46,1,-19}, -{46,1,-18}, -{46,1,-17}, -{46,1,-16}, -{46,1,-15}, -{46,1,-14}, -{46,1,-13}, -{46,1,-12}, -{46,1,-11}, -{46,1,-10}, -{46,1,-9}, -{46,1,-8}, -{46,1,-7}, -{46,1,-6}, -{46,1,-5}, -{46,1,-4}, -{46,1,-3}, -{46,1,-2}, -{46,1,-1}, -{46,1,0}, -{46,1,1}, -{46,1,2}, -{46,1,3}, -{46,1,4}, -{46,1,5}, -{46,1,6}, -{46,1,7}, -{46,1,8}, -{46,1,9}, -{46,1,10}, -{46,1,11}, -{46,1,12}, -{46,1,13}, -{46,1,14}, -{46,1,15}, -{46,1,16}, -{46,1,17}, -{46,1,18}, -{46,1,19}, -{46,1,20}, -{46,1,21}, -{46,1,22}, -{46,1,23}, -{46,1,24}, -{46,1,25}, -{46,1,26}, -{46,1,27}, -{46,1,28}, -{46,1,29}, -{46,1,30}, -{46,1,31}, -{46,1,32}, -{46,1,33}, -{46,1,34}, -{46,1,35}, -{46,1,36}, -{46,1,37}, -{46,1,38}, -{46,1,39}, -{46,1,40}, -{46,1,41}, -{46,1,42}, -{46,1,43}, -{46,1,44}, -{46,1,45}, -{46,1,46}, -{46,1,47}, -{46,1,48}, -{46,1,49}, -{46,1,50}, -{46,1,51}, -{46,1,52}, -{46,2,-46}, -{46,2,-45}, -{46,2,-44}, -{46,2,-43}, -{46,2,-42}, -{46,2,-41}, -{46,2,-40}, -{46,2,-39}, -{46,2,-38}, -{46,2,-37}, -{46,2,-36}, -{46,2,-35}, -{46,2,-34}, -{46,2,-33}, -{46,2,-32}, -{46,2,-31}, -{46,2,-30}, -{46,2,-29}, -{46,2,-28}, -{46,2,-27}, -{46,2,-26}, -{46,2,-25}, -{46,2,-24}, -{46,2,-23}, -{46,2,-22}, -{46,2,-21}, -{46,2,-20}, -{46,2,-19}, -{46,2,-18}, -{46,2,-17}, -{46,2,-16}, -{46,2,-15}, -{46,2,-14}, -{46,2,-13}, -{46,2,-12}, -{46,2,-11}, -{46,2,-10}, -{46,2,-9}, -{46,2,-8}, -{46,2,-7}, -{46,2,-6}, -{46,2,-5}, -{46,2,-4}, -{46,2,-3}, -{46,2,-2}, -{46,2,-1}, -{46,2,0}, -{46,2,1}, -{46,2,2}, -{46,2,3}, -{46,2,4}, -{46,2,5}, -{46,2,6}, -{46,2,7}, -{46,2,8}, -{46,2,9}, -{46,2,10}, -{46,2,11}, -{46,2,12}, -{46,2,13}, -{46,2,14}, -{46,2,15}, -{46,2,16}, -{46,2,17}, -{46,2,18}, -{46,2,19}, -{46,2,20}, -{46,2,21}, -{46,2,22}, -{46,2,23}, -{46,2,24}, -{46,2,25}, -{46,2,26}, -{46,2,27}, -{46,2,28}, -{46,2,29}, -{46,2,30}, -{46,2,31}, -{46,2,32}, -{46,2,33}, -{46,2,34}, -{46,2,35}, -{46,2,36}, -{46,2,37}, -{46,2,38}, -{46,2,39}, -{46,2,40}, -{46,2,41}, -{46,2,42}, -{46,2,43}, -{46,2,44}, -{46,2,45}, -{46,2,46}, -{46,2,47}, -{46,2,48}, -{46,2,49}, -{46,2,50}, -{46,2,51}, -{46,2,52}, -{46,3,-48}, -{46,3,-47}, -{46,3,-46}, -{46,3,-45}, -{46,3,-44}, -{46,3,-43}, -{46,3,-42}, -{46,3,-41}, -{46,3,-40}, -{46,3,-39}, -{46,3,-38}, -{46,3,-37}, -{46,3,-36}, -{46,3,-35}, -{46,3,-34}, -{46,3,-33}, -{46,3,-32}, -{46,3,-31}, -{46,3,-30}, -{46,3,-29}, -{46,3,-28}, -{46,3,-27}, -{46,3,-26}, -{46,3,-25}, -{46,3,-24}, -{46,3,-23}, -{46,3,-22}, -{46,3,-21}, -{46,3,-20}, -{46,3,-19}, -{46,3,-18}, -{46,3,-17}, -{46,3,-16}, -{46,3,-15}, -{46,3,-14}, -{46,3,-13}, -{46,3,-12}, -{46,3,-11}, -{46,3,-10}, -{46,3,-9}, -{46,3,-8}, -{46,3,-7}, -{46,3,-6}, -{46,3,-5}, -{46,3,-4}, -{46,3,-3}, -{46,3,-2}, -{46,3,-1}, -{46,3,0}, -{46,3,1}, -{46,3,2}, -{46,3,3}, -{46,3,4}, -{46,3,5}, -{46,3,6}, -{46,3,7}, -{46,3,8}, -{46,3,9}, -{46,3,10}, -{46,3,11}, -{46,3,12}, -{46,3,13}, -{46,3,14}, -{46,3,15}, -{46,3,16}, -{46,3,17}, -{46,3,18}, -{46,3,19}, -{46,3,20}, -{46,3,21}, -{46,3,22}, -{46,3,23}, -{46,3,24}, -{46,3,25}, -{46,3,26}, -{46,3,27}, -{46,3,28}, -{46,3,29}, -{46,3,30}, -{46,3,31}, -{46,3,32}, -{46,3,33}, -{46,3,34}, -{46,3,35}, -{46,3,36}, -{46,3,37}, -{46,3,38}, -{46,3,39}, -{46,3,40}, -{46,3,41}, -{46,3,42}, -{46,3,43}, -{46,3,44}, -{46,3,45}, -{46,3,46}, -{46,3,47}, -{46,3,48}, -{46,3,49}, -{46,3,50}, -{46,3,51}, -{46,3,52}, -{46,4,-49}, -{46,4,-48}, -{46,4,-47}, -{46,4,-46}, -{46,4,-45}, -{46,4,-44}, -{46,4,-43}, -{46,4,-42}, -{46,4,-41}, -{46,4,-40}, -{46,4,-39}, -{46,4,-38}, -{46,4,-37}, -{46,4,-36}, -{46,4,-35}, -{46,4,-34}, -{46,4,-33}, -{46,4,-32}, -{46,4,-31}, -{46,4,-30}, -{46,4,-29}, -{46,4,-28}, -{46,4,-27}, -{46,4,-26}, -{46,4,-25}, -{46,4,-24}, -{46,4,-23}, -{46,4,-22}, -{46,4,-21}, -{46,4,-20}, -{46,4,-19}, -{46,4,-18}, -{46,4,-17}, -{46,4,-16}, -{46,4,-15}, -{46,4,-14}, -{46,4,-13}, -{46,4,-12}, -{46,4,-11}, -{46,4,-10}, -{46,4,-9}, -{46,4,-8}, -{46,4,-7}, -{46,4,-6}, -{46,4,-5}, -{46,4,-4}, -{46,4,-3}, -{46,4,-2}, -{46,4,-1}, -{46,4,0}, -{46,4,1}, -{46,4,2}, -{46,4,3}, -{46,4,4}, -{46,4,5}, -{46,4,6}, -{46,4,7}, -{46,4,8}, -{46,4,9}, -{46,4,10}, -{46,4,11}, -{46,4,12}, -{46,4,13}, -{46,4,14}, -{46,4,15}, -{46,4,16}, -{46,4,17}, -{46,4,18}, -{46,4,19}, -{46,4,20}, -{46,4,21}, -{46,4,22}, -{46,4,23}, -{46,4,24}, -{46,4,25}, -{46,4,26}, -{46,4,27}, -{46,4,28}, -{46,4,29}, -{46,4,30}, -{46,4,31}, -{46,4,32}, -{46,4,33}, -{46,4,34}, -{46,4,35}, -{46,4,36}, -{46,4,37}, -{46,4,38}, -{46,4,39}, -{46,4,40}, -{46,4,41}, -{46,4,42}, -{46,4,43}, -{46,4,44}, -{46,4,45}, -{46,4,46}, -{46,4,47}, -{46,4,48}, -{46,4,49}, -{46,4,50}, -{46,4,51}, -{46,4,52}, -{46,4,53}, -{46,5,-50}, -{46,5,-49}, -{46,5,-48}, -{46,5,-47}, -{46,5,-46}, -{46,5,-45}, -{46,5,-44}, -{46,5,-43}, -{46,5,-42}, -{46,5,-41}, -{46,5,-40}, -{46,5,-39}, -{46,5,-38}, -{46,5,-37}, -{46,5,-36}, -{46,5,-35}, -{46,5,-34}, -{46,5,-33}, -{46,5,-32}, -{46,5,-31}, -{46,5,-30}, -{46,5,-29}, -{46,5,-28}, -{46,5,-27}, -{46,5,-26}, -{46,5,-25}, -{46,5,-24}, -{46,5,-23}, -{46,5,-22}, -{46,5,-21}, -{46,5,-20}, -{46,5,-19}, -{46,5,-18}, -{46,5,-17}, -{46,5,-16}, -{46,5,-15}, -{46,5,-14}, -{46,5,-13}, -{46,5,-12}, -{46,5,-11}, -{46,5,-10}, -{46,5,-9}, -{46,5,-8}, -{46,5,-7}, -{46,5,-6}, -{46,5,-5}, -{46,5,-4}, -{46,5,-3}, -{46,5,-2}, -{46,5,-1}, -{46,5,0}, -{46,5,1}, -{46,5,2}, -{46,5,3}, -{46,5,4}, -{46,5,5}, -{46,5,6}, -{46,5,7}, -{46,5,8}, -{46,5,9}, -{46,5,10}, -{46,5,11}, -{46,5,12}, -{46,5,13}, -{46,5,14}, -{46,5,15}, -{46,5,16}, -{46,5,17}, -{46,5,18}, -{46,5,19}, -{46,5,20}, -{46,5,21}, -{46,5,22}, -{46,5,23}, -{46,5,24}, -{46,5,25}, -{46,5,26}, -{46,5,27}, -{46,5,28}, -{46,5,29}, -{46,5,30}, -{46,5,31}, -{46,5,32}, -{46,5,33}, -{46,5,34}, -{46,5,35}, -{46,5,36}, -{46,5,37}, -{46,5,38}, -{46,5,39}, -{46,5,40}, -{46,5,41}, -{46,5,42}, -{46,5,43}, -{46,5,44}, -{46,5,45}, -{46,5,46}, -{46,5,47}, -{46,5,48}, -{46,5,49}, -{46,5,50}, -{46,5,51}, -{46,5,52}, -{46,5,53}, -{46,6,-51}, -{46,6,-50}, -{46,6,-49}, -{46,6,-48}, -{46,6,-47}, -{46,6,-46}, -{46,6,-45}, -{46,6,-44}, -{46,6,-43}, -{46,6,-42}, -{46,6,-41}, -{46,6,-40}, -{46,6,-39}, -{46,6,-38}, -{46,6,-37}, -{46,6,-36}, -{46,6,-35}, -{46,6,-34}, -{46,6,-33}, -{46,6,-32}, -{46,6,-31}, -{46,6,-30}, -{46,6,-29}, -{46,6,-28}, -{46,6,-27}, -{46,6,-26}, -{46,6,-25}, -{46,6,-24}, -{46,6,-23}, -{46,6,-22}, -{46,6,-21}, -{46,6,-20}, -{46,6,-19}, -{46,6,-18}, -{46,6,-17}, -{46,6,-16}, -{46,6,-15}, -{46,6,-14}, -{46,6,-13}, -{46,6,-12}, -{46,6,-11}, -{46,6,-10}, -{46,6,-9}, -{46,6,-8}, -{46,6,-7}, -{46,6,-6}, -{46,6,-5}, -{46,6,-4}, -{46,6,-3}, -{46,6,-2}, -{46,6,-1}, -{46,6,0}, -{46,6,1}, -{46,6,2}, -{46,6,3}, -{46,6,4}, -{46,6,5}, -{46,6,6}, -{46,6,7}, -{46,6,8}, -{46,6,9}, -{46,6,10}, -{46,6,11}, -{46,6,12}, -{46,6,13}, -{46,6,14}, -{46,6,15}, -{46,6,16}, -{46,6,17}, -{46,6,18}, -{46,6,19}, -{46,6,20}, -{46,6,21}, -{46,6,22}, -{46,6,23}, -{46,6,24}, -{46,6,25}, -{46,6,26}, -{46,6,27}, -{46,6,28}, -{46,6,29}, -{46,6,30}, -{46,6,31}, -{46,6,32}, -{46,6,33}, -{46,6,34}, -{46,6,35}, -{46,6,36}, -{46,6,37}, -{46,6,38}, -{46,6,39}, -{46,6,40}, -{46,6,41}, -{46,6,42}, -{46,6,43}, -{46,6,44}, -{46,6,45}, -{46,6,46}, -{46,6,47}, -{46,6,48}, -{46,6,49}, -{46,6,50}, -{46,6,51}, -{46,6,52}, -{46,6,53}, -{46,7,-52}, -{46,7,-51}, -{46,7,-50}, -{46,7,-49}, -{46,7,-48}, -{46,7,-47}, -{46,7,-46}, -{46,7,-45}, -{46,7,-44}, -{46,7,-43}, -{46,7,-42}, -{46,7,-41}, -{46,7,-40}, -{46,7,-39}, -{46,7,-38}, -{46,7,-37}, -{46,7,-36}, -{46,7,-35}, -{46,7,-34}, -{46,7,-33}, -{46,7,-32}, -{46,7,-31}, -{46,7,-30}, -{46,7,-29}, -{46,7,-28}, -{46,7,-27}, -{46,7,-26}, -{46,7,-25}, -{46,7,-24}, -{46,7,-23}, -{46,7,-22}, -{46,7,-21}, -{46,7,-20}, -{46,7,-19}, -{46,7,-18}, -{46,7,-17}, -{46,7,-16}, -{46,7,-15}, -{46,7,-14}, -{46,7,-13}, -{46,7,-12}, -{46,7,-11}, -{46,7,-10}, -{46,7,-9}, -{46,7,-8}, -{46,7,-7}, -{46,7,-6}, -{46,7,-5}, -{46,7,-4}, -{46,7,-3}, -{46,7,-2}, -{46,7,-1}, -{46,7,0}, -{46,7,1}, -{46,7,2}, -{46,7,3}, -{46,7,4}, -{46,7,5}, -{46,7,6}, -{46,7,7}, -{46,7,8}, -{46,7,9}, -{46,7,10}, -{46,7,11}, -{46,7,12}, -{46,7,13}, -{46,7,14}, -{46,7,15}, -{46,7,16}, -{46,7,17}, -{46,7,18}, -{46,7,19}, -{46,7,20}, -{46,7,21}, -{46,7,22}, -{46,7,23}, -{46,7,24}, -{46,7,25}, -{46,7,26}, -{46,7,27}, -{46,7,28}, -{46,7,29}, -{46,7,30}, -{46,7,31}, -{46,7,32}, -{46,7,33}, -{46,7,34}, -{46,7,35}, -{46,7,36}, -{46,7,37}, -{46,7,38}, -{46,7,39}, -{46,7,40}, -{46,7,41}, -{46,7,42}, -{46,7,43}, -{46,7,44}, -{46,7,45}, -{46,7,46}, -{46,7,47}, -{46,7,48}, -{46,7,49}, -{46,7,50}, -{46,7,51}, -{46,7,52}, -{46,7,53}, -{46,8,-53}, -{46,8,-52}, -{46,8,-51}, -{46,8,-50}, -{46,8,-49}, -{46,8,-48}, -{46,8,-47}, -{46,8,-46}, -{46,8,-45}, -{46,8,-44}, -{46,8,-43}, -{46,8,-42}, -{46,8,-41}, -{46,8,-40}, -{46,8,-39}, -{46,8,-38}, -{46,8,-37}, -{46,8,-36}, -{46,8,-35}, -{46,8,-34}, -{46,8,-33}, -{46,8,-32}, -{46,8,-31}, -{46,8,-30}, -{46,8,-29}, -{46,8,-28}, -{46,8,-27}, -{46,8,-26}, -{46,8,-25}, -{46,8,-24}, -{46,8,-23}, -{46,8,-22}, -{46,8,-21}, -{46,8,-20}, -{46,8,-19}, -{46,8,-18}, -{46,8,-17}, -{46,8,-16}, -{46,8,-15}, -{46,8,-14}, -{46,8,-13}, -{46,8,-12}, -{46,8,-11}, -{46,8,-10}, -{46,8,-9}, -{46,8,-8}, -{46,8,-7}, -{46,8,-6}, -{46,8,-5}, -{46,8,-4}, -{46,8,-3}, -{46,8,-2}, -{46,8,-1}, -{46,8,0}, -{46,8,1}, -{46,8,2}, -{46,8,3}, -{46,8,4}, -{46,8,5}, -{46,8,6}, -{46,8,7}, -{46,8,8}, -{46,8,9}, -{46,8,10}, -{46,8,11}, -{46,8,12}, -{46,8,13}, -{46,8,14}, -{46,8,15}, -{46,8,16}, -{46,8,17}, -{46,8,18}, -{46,8,19}, -{46,8,20}, -{46,8,21}, -{46,8,22}, -{46,8,23}, -{46,8,24}, -{46,8,25}, -{46,8,26}, -{46,8,27}, -{46,8,28}, -{46,8,29}, -{46,8,30}, -{46,8,31}, -{46,8,32}, -{46,8,33}, -{46,8,34}, -{46,8,35}, -{46,8,36}, -{46,8,37}, -{46,8,38}, -{46,8,39}, -{46,8,40}, -{46,8,41}, -{46,8,42}, -{46,8,43}, -{46,8,44}, -{46,8,45}, -{46,8,46}, -{46,8,47}, -{46,8,48}, -{46,8,49}, -{46,8,50}, -{46,8,51}, -{46,8,52}, -{46,8,53}, -{46,9,-54}, -{46,9,-53}, -{46,9,-52}, -{46,9,-51}, -{46,9,-50}, -{46,9,-49}, -{46,9,-48}, -{46,9,-47}, -{46,9,-46}, -{46,9,-45}, -{46,9,-44}, -{46,9,-43}, -{46,9,-42}, -{46,9,-41}, -{46,9,-40}, -{46,9,-39}, -{46,9,-38}, -{46,9,-37}, -{46,9,-36}, -{46,9,-35}, -{46,9,-34}, -{46,9,-33}, -{46,9,-32}, -{46,9,-31}, -{46,9,-30}, -{46,9,-29}, -{46,9,-28}, -{46,9,-27}, -{46,9,-26}, -{46,9,-25}, -{46,9,-24}, -{46,9,-23}, -{46,9,-22}, -{46,9,-21}, -{46,9,-20}, -{46,9,-19}, -{46,9,-18}, -{46,9,-17}, -{46,9,-16}, -{46,9,-15}, -{46,9,-14}, -{46,9,-13}, -{46,9,-12}, -{46,9,-11}, -{46,9,-10}, -{46,9,-9}, -{46,9,-8}, -{46,9,-7}, -{46,9,-6}, -{46,9,-5}, -{46,9,-4}, -{46,9,-3}, -{46,9,-2}, -{46,9,-1}, -{46,9,0}, -{46,9,1}, -{46,9,2}, -{46,9,3}, -{46,9,4}, -{46,9,5}, -{46,9,6}, -{46,9,7}, -{46,9,8}, -{46,9,9}, -{46,9,10}, -{46,9,11}, -{46,9,12}, -{46,9,13}, -{46,9,14}, -{46,9,15}, -{46,9,16}, -{46,9,17}, -{46,9,18}, -{46,9,19}, -{46,9,20}, -{46,9,21}, -{46,9,22}, -{46,9,23}, -{46,9,24}, -{46,9,25}, -{46,9,26}, -{46,9,27}, -{46,9,28}, -{46,9,29}, -{46,9,30}, -{46,9,31}, -{46,9,32}, -{46,9,33}, -{46,9,34}, -{46,9,35}, -{46,9,36}, -{46,9,37}, -{46,9,38}, -{46,9,39}, -{46,9,40}, -{46,9,41}, -{46,9,42}, -{46,9,43}, -{46,9,44}, -{46,9,45}, -{46,9,46}, -{46,9,47}, -{46,9,48}, -{46,9,49}, -{46,9,50}, -{46,9,51}, -{46,9,52}, -{46,9,53}, -{46,10,-55}, -{46,10,-54}, -{46,10,-53}, -{46,10,-52}, -{46,10,-51}, -{46,10,-50}, -{46,10,-49}, -{46,10,-48}, -{46,10,-47}, -{46,10,-46}, -{46,10,-45}, -{46,10,-44}, -{46,10,-43}, -{46,10,-42}, -{46,10,-41}, -{46,10,-40}, -{46,10,-39}, -{46,10,-38}, -{46,10,-37}, -{46,10,-36}, -{46,10,-35}, -{46,10,-34}, -{46,10,-33}, -{46,10,-32}, -{46,10,-31}, -{46,10,-30}, -{46,10,-29}, -{46,10,-28}, -{46,10,-27}, -{46,10,-26}, -{46,10,-25}, -{46,10,-24}, -{46,10,-23}, -{46,10,-22}, -{46,10,-21}, -{46,10,-20}, -{46,10,-19}, -{46,10,-18}, -{46,10,-17}, -{46,10,-16}, -{46,10,-15}, -{46,10,-14}, -{46,10,-13}, -{46,10,-12}, -{46,10,-11}, -{46,10,-10}, -{46,10,-9}, -{46,10,-8}, -{46,10,-7}, -{46,10,-6}, -{46,10,-5}, -{46,10,-4}, -{46,10,-3}, -{46,10,-2}, -{46,10,-1}, -{46,10,0}, -{46,10,1}, -{46,10,2}, -{46,10,3}, -{46,10,4}, -{46,10,5}, -{46,10,6}, -{46,10,7}, -{46,10,8}, -{46,10,9}, -{46,10,10}, -{46,10,11}, -{46,10,12}, -{46,10,13}, -{46,10,14}, -{46,10,15}, -{46,10,16}, -{46,10,17}, -{46,10,18}, -{46,10,19}, -{46,10,20}, -{46,10,21}, -{46,10,22}, -{46,10,23}, -{46,10,24}, -{46,10,25}, -{46,10,26}, -{46,10,27}, -{46,10,28}, -{46,10,29}, -{46,10,30}, -{46,10,31}, -{46,10,32}, -{46,10,33}, -{46,10,34}, -{46,10,35}, -{46,10,36}, -{46,10,37}, -{46,10,38}, -{46,10,39}, -{46,10,40}, -{46,10,41}, -{46,10,42}, -{46,10,43}, -{46,10,44}, -{46,10,45}, -{46,10,46}, -{46,10,47}, -{46,10,48}, -{46,10,49}, -{46,10,50}, -{46,10,51}, -{46,10,52}, -{46,10,53}, -{46,11,-56}, -{46,11,-55}, -{46,11,-54}, -{46,11,-53}, -{46,11,-52}, -{46,11,-51}, -{46,11,-50}, -{46,11,-49}, -{46,11,-48}, -{46,11,-47}, -{46,11,-46}, -{46,11,-45}, -{46,11,-44}, -{46,11,-43}, -{46,11,-42}, -{46,11,-41}, -{46,11,-40}, -{46,11,-39}, -{46,11,-38}, -{46,11,-37}, -{46,11,-36}, -{46,11,-35}, -{46,11,-34}, -{46,11,-33}, -{46,11,-32}, -{46,11,-31}, -{46,11,-30}, -{46,11,-29}, -{46,11,-28}, -{46,11,-27}, -{46,11,-26}, -{46,11,-25}, -{46,11,-24}, -{46,11,-23}, -{46,11,-22}, -{46,11,-21}, -{46,11,-20}, -{46,11,-19}, -{46,11,-18}, -{46,11,-17}, -{46,11,-16}, -{46,11,-15}, -{46,11,-14}, -{46,11,-13}, -{46,11,-12}, -{46,11,-11}, -{46,11,-10}, -{46,11,-9}, -{46,11,-8}, -{46,11,-7}, -{46,11,-6}, -{46,11,-5}, -{46,11,-4}, -{46,11,-3}, -{46,11,-2}, -{46,11,-1}, -{46,11,0}, -{46,11,1}, -{46,11,2}, -{46,11,3}, -{46,11,4}, -{46,11,5}, -{46,11,6}, -{46,11,7}, -{46,11,8}, -{46,11,9}, -{46,11,10}, -{46,11,11}, -{46,11,12}, -{46,11,13}, -{46,11,14}, -{46,11,15}, -{46,11,16}, -{46,11,17}, -{46,11,18}, -{46,11,19}, -{46,11,20}, -{46,11,21}, -{46,11,22}, -{46,11,23}, -{46,11,24}, -{46,11,25}, -{46,11,26}, -{46,11,27}, -{46,11,28}, -{46,11,29}, -{46,11,30}, -{46,11,31}, -{46,11,32}, -{46,11,33}, -{46,11,34}, -{46,11,35}, -{46,11,36}, -{46,11,37}, -{46,11,38}, -{46,11,39}, -{46,11,40}, -{46,11,41}, -{46,11,42}, -{46,11,43}, -{46,11,44}, -{46,11,45}, -{46,11,46}, -{46,11,47}, -{46,11,48}, -{46,11,49}, -{46,11,50}, -{46,11,51}, -{46,11,52}, -{46,11,53}, -{46,12,-57}, -{46,12,-56}, -{46,12,-55}, -{46,12,-54}, -{46,12,-53}, -{46,12,-52}, -{46,12,-51}, -{46,12,-50}, -{46,12,-49}, -{46,12,-48}, -{46,12,-47}, -{46,12,-46}, -{46,12,-45}, -{46,12,-44}, -{46,12,-43}, -{46,12,-42}, -{46,12,-41}, -{46,12,-40}, -{46,12,-39}, -{46,12,-38}, -{46,12,-37}, -{46,12,-36}, -{46,12,-35}, -{46,12,-34}, -{46,12,-33}, -{46,12,-32}, -{46,12,-31}, -{46,12,-30}, -{46,12,-29}, -{46,12,-28}, -{46,12,-27}, -{46,12,-26}, -{46,12,-25}, -{46,12,-24}, -{46,12,-23}, -{46,12,-22}, -{46,12,-21}, -{46,12,-20}, -{46,12,-19}, -{46,12,-18}, -{46,12,-17}, -{46,12,-16}, -{46,12,-15}, -{46,12,-14}, -{46,12,-13}, -{46,12,-12}, -{46,12,-11}, -{46,12,-10}, -{46,12,-9}, -{46,12,-8}, -{46,12,-7}, -{46,12,-6}, -{46,12,-5}, -{46,12,-4}, -{46,12,-3}, -{46,12,-2}, -{46,12,-1}, -{46,12,0}, -{46,12,1}, -{46,12,2}, -{46,12,3}, -{46,12,4}, -{46,12,5}, -{46,12,6}, -{46,12,7}, -{46,12,8}, -{46,12,9}, -{46,12,10}, -{46,12,11}, -{46,12,12}, -{46,12,13}, -{46,12,14}, -{46,12,15}, -{46,12,16}, -{46,12,17}, -{46,12,18}, -{46,12,19}, -{46,12,20}, -{46,12,21}, -{46,12,22}, -{46,12,23}, -{46,12,24}, -{46,12,25}, -{46,12,26}, -{46,12,27}, -{46,12,28}, -{46,12,29}, -{46,12,30}, -{46,12,31}, -{46,12,32}, -{46,12,33}, -{46,12,34}, -{46,12,35}, -{46,12,36}, -{46,12,37}, -{46,12,38}, -{46,12,39}, -{46,12,40}, -{46,12,41}, -{46,12,42}, -{46,12,43}, -{46,12,44}, -{46,12,45}, -{46,12,46}, -{46,12,47}, -{46,12,48}, -{46,12,49}, -{46,12,50}, -{46,12,51}, -{46,12,52}, -{46,12,53}, -{46,13,-58}, -{46,13,-57}, -{46,13,-56}, -{46,13,-55}, -{46,13,-54}, -{46,13,-53}, -{46,13,-52}, -{46,13,-51}, -{46,13,-50}, -{46,13,-49}, -{46,13,-48}, -{46,13,-47}, -{46,13,-46}, -{46,13,-45}, -{46,13,-44}, -{46,13,-43}, -{46,13,-42}, -{46,13,-41}, -{46,13,-40}, -{46,13,-39}, -{46,13,-38}, -{46,13,-37}, -{46,13,-36}, -{46,13,-35}, -{46,13,-34}, -{46,13,-33}, -{46,13,-32}, -{46,13,-31}, -{46,13,-30}, -{46,13,-29}, -{46,13,-28}, -{46,13,-27}, -{46,13,-26}, -{46,13,-25}, -{46,13,-24}, -{46,13,-23}, -{46,13,-22}, -{46,13,-21}, -{46,13,-20}, -{46,13,-19}, -{46,13,-18}, -{46,13,-17}, -{46,13,-16}, -{46,13,-15}, -{46,13,-14}, -{46,13,-13}, -{46,13,-12}, -{46,13,-11}, -{46,13,-10}, -{46,13,-9}, -{46,13,-8}, -{46,13,-7}, -{46,13,-6}, -{46,13,-5}, -{46,13,-4}, -{46,13,-3}, -{46,13,-2}, -{46,13,-1}, -{46,13,0}, -{46,13,1}, -{46,13,2}, -{46,13,3}, -{46,13,4}, -{46,13,5}, -{46,13,6}, -{46,13,7}, -{46,13,8}, -{46,13,9}, -{46,13,10}, -{46,13,11}, -{46,13,12}, -{46,13,13}, -{46,13,14}, -{46,13,15}, -{46,13,16}, -{46,13,17}, -{46,13,18}, -{46,13,19}, -{46,13,20}, -{46,13,21}, -{46,13,22}, -{46,13,23}, -{46,13,24}, -{46,13,25}, -{46,13,26}, -{46,13,27}, -{46,13,28}, -{46,13,29}, -{46,13,30}, -{46,13,31}, -{46,13,32}, -{46,13,33}, -{46,13,34}, -{46,13,35}, -{46,13,36}, -{46,13,37}, -{46,13,38}, -{46,13,39}, -{46,13,40}, -{46,13,41}, -{46,13,42}, -{46,13,43}, -{46,13,44}, -{46,13,45}, -{46,13,46}, -{46,13,47}, -{46,13,48}, -{46,13,49}, -{46,13,50}, -{46,13,51}, -{46,13,52}, -{46,13,53}, -{46,14,-59}, -{46,14,-58}, -{46,14,-57}, -{46,14,-56}, -{46,14,-55}, -{46,14,-54}, -{46,14,-53}, -{46,14,-52}, -{46,14,-51}, -{46,14,-50}, -{46,14,-49}, -{46,14,-48}, -{46,14,-47}, -{46,14,-46}, -{46,14,-45}, -{46,14,-44}, -{46,14,-43}, -{46,14,-42}, -{46,14,-41}, -{46,14,-40}, -{46,14,-39}, -{46,14,-38}, -{46,14,-37}, -{46,14,-36}, -{46,14,-35}, -{46,14,-34}, -{46,14,-33}, -{46,14,-32}, -{46,14,-31}, -{46,14,-30}, -{46,14,-29}, -{46,14,-28}, -{46,14,-27}, -{46,14,-26}, -{46,14,-25}, -{46,14,-24}, -{46,14,-23}, -{46,14,-22}, -{46,14,-21}, -{46,14,-20}, -{46,14,-19}, -{46,14,-18}, -{46,14,-17}, -{46,14,-16}, -{46,14,-15}, -{46,14,-14}, -{46,14,-13}, -{46,14,-12}, -{46,14,-11}, -{46,14,-10}, -{46,14,-9}, -{46,14,-8}, -{46,14,-7}, -{46,14,-6}, -{46,14,-5}, -{46,14,-4}, -{46,14,-3}, -{46,14,-2}, -{46,14,-1}, -{46,14,0}, -{46,14,1}, -{46,14,2}, -{46,14,3}, -{46,14,4}, -{46,14,5}, -{46,14,6}, -{46,14,7}, -{46,14,8}, -{46,14,9}, -{46,14,10}, -{46,14,11}, -{46,14,12}, -{46,14,13}, -{46,14,14}, -{46,14,15}, -{46,14,16}, -{46,14,17}, -{46,14,18}, -{46,14,19}, -{46,14,20}, -{46,14,21}, -{46,14,22}, -{46,14,23}, -{46,14,24}, -{46,14,25}, -{46,14,26}, -{46,14,27}, -{46,14,28}, -{46,14,29}, -{46,14,30}, -{46,14,31}, -{46,14,32}, -{46,14,33}, -{46,14,34}, -{46,14,35}, -{46,14,36}, -{46,14,37}, -{46,14,38}, -{46,14,39}, -{46,14,40}, -{46,14,41}, -{46,14,42}, -{46,14,43}, -{46,14,44}, -{46,14,45}, -{46,14,46}, -{46,14,47}, -{46,14,48}, -{46,14,49}, -{46,14,50}, -{46,14,51}, -{46,14,52}, -{46,14,53}, -{46,15,-60}, -{46,15,-59}, -{46,15,-58}, -{46,15,-57}, -{46,15,-56}, -{46,15,-55}, -{46,15,-54}, -{46,15,-53}, -{46,15,-52}, -{46,15,-51}, -{46,15,-50}, -{46,15,-49}, -{46,15,-48}, -{46,15,-47}, -{46,15,-46}, -{46,15,-45}, -{46,15,-44}, -{46,15,-43}, -{46,15,-42}, -{46,15,-41}, -{46,15,-40}, -{46,15,-39}, -{46,15,-38}, -{46,15,-37}, -{46,15,-36}, -{46,15,-35}, -{46,15,-34}, -{46,15,-33}, -{46,15,-32}, -{46,15,-31}, -{46,15,-30}, -{46,15,-29}, -{46,15,-28}, -{46,15,-27}, -{46,15,-26}, -{46,15,-25}, -{46,15,-24}, -{46,15,-23}, -{46,15,-22}, -{46,15,-21}, -{46,15,-20}, -{46,15,-19}, -{46,15,-18}, -{46,15,-17}, -{46,15,-16}, -{46,15,-15}, -{46,15,-14}, -{46,15,-13}, -{46,15,-12}, -{46,15,-11}, -{46,15,-10}, -{46,15,-9}, -{46,15,-8}, -{46,15,-7}, -{46,15,-6}, -{46,15,-5}, -{46,15,-4}, -{46,15,-3}, -{46,15,-2}, -{46,15,-1}, -{46,15,0}, -{46,15,1}, -{46,15,2}, -{46,15,3}, -{46,15,4}, -{46,15,5}, -{46,15,6}, -{46,15,7}, -{46,15,8}, -{46,15,9}, -{46,15,10}, -{46,15,11}, -{46,15,12}, -{46,15,13}, -{46,15,14}, -{46,15,15}, -{46,15,16}, -{46,15,17}, -{46,15,18}, -{46,15,19}, -{46,15,20}, -{46,15,21}, -{46,15,22}, -{46,15,23}, -{46,15,24}, -{46,15,25}, -{46,15,26}, -{46,15,27}, -{46,15,28}, -{46,15,29}, -{46,15,30}, -{46,15,31}, -{46,15,32}, -{46,15,33}, -{46,15,34}, -{46,15,35}, -{46,15,36}, -{46,15,37}, -{46,15,38}, -{46,15,39}, -{46,15,40}, -{46,15,41}, -{46,15,42}, -{46,15,43}, -{46,15,44}, -{46,15,45}, -{46,15,46}, -{46,15,47}, -{46,15,48}, -{46,15,49}, -{46,15,50}, -{46,15,51}, -{46,15,52}, -{46,15,53}, -{46,16,-61}, -{46,16,-60}, -{46,16,-59}, -{46,16,-58}, -{46,16,-57}, -{46,16,-56}, -{46,16,-55}, -{46,16,-54}, -{46,16,-53}, -{46,16,-52}, -{46,16,-51}, -{46,16,-50}, -{46,16,-49}, -{46,16,-48}, -{46,16,-47}, -{46,16,-46}, -{46,16,-45}, -{46,16,-44}, -{46,16,-43}, -{46,16,-42}, -{46,16,-41}, -{46,16,-40}, -{46,16,-39}, -{46,16,-38}, -{46,16,-37}, -{46,16,-36}, -{46,16,-35}, -{46,16,-34}, -{46,16,-33}, -{46,16,-32}, -{46,16,-31}, -{46,16,-30}, -{46,16,-29}, -{46,16,-28}, -{46,16,-27}, -{46,16,-26}, -{46,16,-25}, -{46,16,-24}, -{46,16,-23}, -{46,16,-22}, -{46,16,-21}, -{46,16,-20}, -{46,16,-19}, -{46,16,-18}, -{46,16,-17}, -{46,16,-16}, -{46,16,-15}, -{46,16,-14}, -{46,16,-13}, -{46,16,-12}, -{46,16,-11}, -{46,16,-10}, -{46,16,-9}, -{46,16,-8}, -{46,16,-7}, -{46,16,-6}, -{46,16,-5}, -{46,16,-4}, -{46,16,-3}, -{46,16,-2}, -{46,16,-1}, -{46,16,0}, -{46,16,1}, -{46,16,2}, -{46,16,3}, -{46,16,4}, -{46,16,5}, -{46,16,6}, -{46,16,7}, -{46,16,8}, -{46,16,9}, -{46,16,10}, -{46,16,11}, -{46,16,12}, -{46,16,13}, -{46,16,14}, -{46,16,15}, -{46,16,16}, -{46,16,17}, -{46,16,18}, -{46,16,19}, -{46,16,20}, -{46,16,21}, -{46,16,22}, -{46,16,23}, -{46,16,24}, -{46,16,25}, -{46,16,26}, -{46,16,27}, -{46,16,28}, -{46,16,29}, -{46,16,30}, -{46,16,31}, -{46,16,32}, -{46,16,33}, -{46,16,34}, -{46,16,35}, -{46,16,36}, -{46,16,37}, -{46,16,38}, -{46,16,39}, -{46,16,40}, -{46,16,41}, -{46,16,42}, -{46,16,43}, -{46,16,44}, -{46,16,45}, -{46,16,46}, -{46,16,47}, -{46,16,48}, -{46,16,49}, -{46,16,50}, -{46,16,51}, -{46,16,52}, -{46,16,53}, -{46,17,-62}, -{46,17,-61}, -{46,17,-60}, -{46,17,-59}, -{46,17,-58}, -{46,17,-57}, -{46,17,-56}, -{46,17,-55}, -{46,17,-54}, -{46,17,-53}, -{46,17,-52}, -{46,17,-51}, -{46,17,-50}, -{46,17,-49}, -{46,17,-48}, -{46,17,-47}, -{46,17,-46}, -{46,17,-45}, -{46,17,-44}, -{46,17,-43}, -{46,17,-42}, -{46,17,-41}, -{46,17,-40}, -{46,17,-39}, -{46,17,-38}, -{46,17,-37}, -{46,17,-36}, -{46,17,-35}, -{46,17,-34}, -{46,17,-33}, -{46,17,-32}, -{46,17,-31}, -{46,17,-30}, -{46,17,-29}, -{46,17,-28}, -{46,17,-27}, -{46,17,-26}, -{46,17,-25}, -{46,17,-24}, -{46,17,-23}, -{46,17,-22}, -{46,17,-21}, -{46,17,-20}, -{46,17,-19}, -{46,17,-18}, -{46,17,-17}, -{46,17,-16}, -{46,17,-15}, -{46,17,-14}, -{46,17,-13}, -{46,17,-12}, -{46,17,-11}, -{46,17,-10}, -{46,17,-9}, -{46,17,-8}, -{46,17,-7}, -{46,17,-6}, -{46,17,-5}, -{46,17,-4}, -{46,17,-3}, -{46,17,-2}, -{46,17,-1}, -{46,17,0}, -{46,17,1}, -{46,17,2}, -{46,17,3}, -{46,17,4}, -{46,17,5}, -{46,17,6}, -{46,17,7}, -{46,17,8}, -{46,17,9}, -{46,17,10}, -{46,17,11}, -{46,17,12}, -{46,17,13}, -{46,17,14}, -{46,17,15}, -{46,17,16}, -{46,17,17}, -{46,17,18}, -{46,17,19}, -{46,17,20}, -{46,17,21}, -{46,17,22}, -{46,17,23}, -{46,17,24}, -{46,17,25}, -{46,17,26}, -{46,17,27}, -{46,17,28}, -{46,17,29}, -{46,17,30}, -{46,17,31}, -{46,17,32}, -{46,17,33}, -{46,17,34}, -{46,17,35}, -{46,17,36}, -{46,17,37}, -{46,17,38}, -{46,17,39}, -{46,17,40}, -{46,17,41}, -{46,17,42}, -{46,17,43}, -{46,17,44}, -{46,17,45}, -{46,17,46}, -{46,17,47}, -{46,17,48}, -{46,17,49}, -{46,17,50}, -{46,17,51}, -{46,17,52}, -{46,17,53}, -{46,17,54}, -{46,18,-63}, -{46,18,-62}, -{46,18,-61}, -{46,18,-60}, -{46,18,-59}, -{46,18,-58}, -{46,18,-57}, -{46,18,-56}, -{46,18,-55}, -{46,18,-54}, -{46,18,-53}, -{46,18,-52}, -{46,18,-51}, -{46,18,-50}, -{46,18,-49}, -{46,18,-48}, -{46,18,-47}, -{46,18,-46}, -{46,18,-45}, -{46,18,-44}, -{46,18,-43}, -{46,18,-42}, -{46,18,-41}, -{46,18,-40}, -{46,18,-39}, -{46,18,-38}, -{46,18,-37}, -{46,18,-36}, -{46,18,-35}, -{46,18,-34}, -{46,18,-33}, -{46,18,-32}, -{46,18,-31}, -{46,18,-30}, -{46,18,-29}, -{46,18,-28}, -{46,18,-27}, -{46,18,-26}, -{46,18,-25}, -{46,18,-24}, -{46,18,-23}, -{46,18,-22}, -{46,18,-21}, -{46,18,-20}, -{46,18,-19}, -{46,18,-18}, -{46,18,-17}, -{46,18,-16}, -{46,18,-15}, -{46,18,-14}, -{46,18,-13}, -{46,18,-12}, -{46,18,-11}, -{46,18,-10}, -{46,18,-9}, -{46,18,-8}, -{46,18,-7}, -{46,18,-6}, -{46,18,-5}, -{46,18,-4}, -{46,18,-3}, -{46,18,-2}, -{46,18,-1}, -{46,18,0}, -{46,18,1}, -{46,18,2}, -{46,18,3}, -{46,18,4}, -{46,18,5}, -{46,18,6}, -{46,18,7}, -{46,18,8}, -{46,18,9}, -{46,18,10}, -{46,18,11}, -{46,18,12}, -{46,18,13}, -{46,18,14}, -{46,18,15}, -{46,18,16}, -{46,18,17}, -{46,18,18}, -{46,18,19}, -{46,18,20}, -{46,18,21}, -{46,18,22}, -{46,18,23}, -{46,18,24}, -{46,18,25}, -{46,18,26}, -{46,18,27}, -{46,18,28}, -{46,18,29}, -{46,18,30}, -{46,18,31}, -{46,18,32}, -{46,18,33}, -{46,18,34}, -{46,18,35}, -{46,18,36}, -{46,18,37}, -{46,18,38}, -{46,18,39}, -{46,18,40}, -{46,18,41}, -{46,18,42}, -{46,18,43}, -{46,18,44}, -{46,18,45}, -{46,18,46}, -{46,18,47}, -{46,18,48}, -{46,18,49}, -{46,18,50}, -{46,18,51}, -{46,18,52}, -{46,18,53}, -{46,18,54}, -{46,19,-64}, -{46,19,-63}, -{46,19,-62}, -{46,19,-61}, -{46,19,-60}, -{46,19,-59}, -{46,19,-58}, -{46,19,-57}, -{46,19,-56}, -{46,19,-55}, -{46,19,-54}, -{46,19,-53}, -{46,19,-52}, -{46,19,-51}, -{46,19,-50}, -{46,19,-49}, -{46,19,-48}, -{46,19,-47}, -{46,19,-46}, -{46,19,-45}, -{46,19,-44}, -{46,19,-43}, -{46,19,-42}, -{46,19,-41}, -{46,19,-40}, -{46,19,-39}, -{46,19,-38}, -{46,19,-37}, -{46,19,-36}, -{46,19,-35}, -{46,19,-34}, -{46,19,-33}, -{46,19,-32}, -{46,19,-31}, -{46,19,-30}, -{46,19,-29}, -{46,19,-28}, -{46,19,-27}, -{46,19,-26}, -{46,19,-25}, -{46,19,-24}, -{46,19,-23}, -{46,19,-22}, -{46,19,-21}, -{46,19,-20}, -{46,19,-19}, -{46,19,-18}, -{46,19,-17}, -{46,19,-16}, -{46,19,-15}, -{46,19,-14}, -{46,19,-13}, -{46,19,-12}, -{46,19,-11}, -{46,19,-10}, -{46,19,-9}, -{46,19,-8}, -{46,19,-7}, -{46,19,-6}, -{46,19,-5}, -{46,19,-4}, -{46,19,-3}, -{46,19,-2}, -{46,19,-1}, -{46,19,0}, -{46,19,1}, -{46,19,2}, -{46,19,3}, -{46,19,4}, -{46,19,5}, -{46,19,6}, -{46,19,7}, -{46,19,8}, -{46,19,9}, -{46,19,10}, -{46,19,11}, -{46,19,12}, -{46,19,13}, -{46,19,14}, -{46,19,15}, -{46,19,16}, -{46,19,17}, -{46,19,18}, -{46,19,19}, -{46,19,20}, -{46,19,21}, -{46,19,22}, -{46,19,23}, -{46,19,24}, -{46,19,25}, -{46,19,26}, -{46,19,27}, -{46,19,28}, -{46,19,29}, -{46,19,30}, -{46,19,31}, -{46,19,32}, -{46,19,33}, -{46,19,34}, -{46,19,35}, -{46,19,36}, -{46,19,37}, -{46,19,38}, -{46,19,39}, -{46,19,40}, -{46,19,41}, -{46,19,42}, -{46,19,43}, -{46,19,44}, -{46,19,45}, -{46,19,46}, -{46,19,47}, -{46,19,48}, -{46,19,49}, -{46,19,50}, -{46,19,51}, -{46,19,52}, -{46,19,53}, -{46,19,54}, -{46,20,-65}, -{46,20,-64}, -{46,20,-63}, -{46,20,-62}, -{46,20,-61}, -{46,20,-60}, -{46,20,-59}, -{46,20,-58}, -{46,20,-57}, -{46,20,-56}, -{46,20,-55}, -{46,20,-54}, -{46,20,-53}, -{46,20,-52}, -{46,20,-51}, -{46,20,-50}, -{46,20,-49}, -{46,20,-48}, -{46,20,-47}, -{46,20,-46}, -{46,20,-45}, -{46,20,-44}, -{46,20,-43}, -{46,20,-42}, -{46,20,-41}, -{46,20,-40}, -{46,20,-39}, -{46,20,-38}, -{46,20,-37}, -{46,20,-36}, -{46,20,-35}, -{46,20,-34}, -{46,20,-33}, -{46,20,-32}, -{46,20,-31}, -{46,20,-30}, -{46,20,-29}, -{46,20,-28}, -{46,20,-27}, -{46,20,-26}, -{46,20,-25}, -{46,20,-24}, -{46,20,-23}, -{46,20,-22}, -{46,20,-21}, -{46,20,-20}, -{46,20,-19}, -{46,20,-18}, -{46,20,-17}, -{46,20,-16}, -{46,20,-15}, -{46,20,-14}, -{46,20,-13}, -{46,20,-12}, -{46,20,-11}, -{46,20,-10}, -{46,20,-9}, -{46,20,-8}, -{46,20,-7}, -{46,20,-6}, -{46,20,-5}, -{46,20,-4}, -{46,20,-3}, -{46,20,-2}, -{46,20,-1}, -{46,20,0}, -{46,20,1}, -{46,20,2}, -{46,20,3}, -{46,20,4}, -{46,20,5}, -{46,20,6}, -{46,20,7}, -{46,20,8}, -{46,20,9}, -{46,20,10}, -{46,20,11}, -{46,20,12}, -{46,20,13}, -{46,20,14}, -{46,20,15}, -{46,20,16}, -{46,20,17}, -{46,20,18}, -{46,20,19}, -{46,20,20}, -{46,20,21}, -{46,20,22}, -{46,20,23}, -{46,20,24}, -{46,20,25}, -{46,20,26}, -{46,20,27}, -{46,20,28}, -{46,20,29}, -{46,20,30}, -{46,20,31}, -{46,20,32}, -{46,20,33}, -{46,20,34}, -{46,20,35}, -{46,20,36}, -{46,20,37}, -{46,20,38}, -{46,20,39}, -{46,20,40}, -{46,20,41}, -{46,20,42}, -{46,20,43}, -{46,20,44}, -{46,20,45}, -{46,20,46}, -{46,20,47}, -{46,20,48}, -{46,20,49}, -{46,20,50}, -{46,20,51}, -{46,20,52}, -{46,20,53}, -{46,20,54}, -{46,21,-66}, -{46,21,-65}, -{46,21,-64}, -{46,21,-63}, -{46,21,-62}, -{46,21,-61}, -{46,21,-60}, -{46,21,-59}, -{46,21,-58}, -{46,21,-57}, -{46,21,-56}, -{46,21,-55}, -{46,21,-54}, -{46,21,-53}, -{46,21,-52}, -{46,21,-51}, -{46,21,-50}, -{46,21,-49}, -{46,21,-48}, -{46,21,-47}, -{46,21,-46}, -{46,21,-45}, -{46,21,-44}, -{46,21,-43}, -{46,21,-42}, -{46,21,-41}, -{46,21,-40}, -{46,21,-39}, -{46,21,-38}, -{46,21,-37}, -{46,21,-36}, -{46,21,-35}, -{46,21,-34}, -{46,21,-33}, -{46,21,-32}, -{46,21,-31}, -{46,21,-30}, -{46,21,-29}, -{46,21,-28}, -{46,21,-27}, -{46,21,-26}, -{46,21,-25}, -{46,21,-24}, -{46,21,-23}, -{46,21,-22}, -{46,21,-21}, -{46,21,-20}, -{46,21,-19}, -{46,21,-18}, -{46,21,-17}, -{46,21,-16}, -{46,21,-15}, -{46,21,-14}, -{46,21,-13}, -{46,21,-12}, -{46,21,-11}, -{46,21,-10}, -{46,21,-9}, -{46,21,-8}, -{46,21,-7}, -{46,21,-6}, -{46,21,-5}, -{46,21,-4}, -{46,21,-3}, -{46,21,-2}, -{46,21,-1}, -{46,21,0}, -{46,21,1}, -{46,21,2}, -{46,21,3}, -{46,21,4}, -{46,21,5}, -{46,21,6}, -{46,21,7}, -{46,21,8}, -{46,21,9}, -{46,21,10}, -{46,21,11}, -{46,21,12}, -{46,21,13}, -{46,21,14}, -{46,21,15}, -{46,21,16}, -{46,21,17}, -{46,21,18}, -{46,21,19}, -{46,21,20}, -{46,21,21}, -{46,21,22}, -{46,21,23}, -{46,21,24}, -{46,21,25}, -{46,21,26}, -{46,21,27}, -{46,21,28}, -{46,21,29}, -{46,21,30}, -{46,21,31}, -{46,21,32}, -{46,21,33}, -{46,21,34}, -{46,21,35}, -{46,21,36}, -{46,21,37}, -{46,21,38}, -{46,21,39}, -{46,21,40}, -{46,21,41}, -{46,21,42}, -{46,21,43}, -{46,21,44}, -{46,21,45}, -{46,21,46}, -{46,21,47}, -{46,21,48}, -{46,21,49}, -{46,21,50}, -{46,21,51}, -{46,21,52}, -{46,21,53}, -{46,21,54}, -{46,22,-67}, -{46,22,-66}, -{46,22,-65}, -{46,22,-64}, -{46,22,-63}, -{46,22,-62}, -{46,22,-61}, -{46,22,-60}, -{46,22,-59}, -{46,22,-58}, -{46,22,-57}, -{46,22,-56}, -{46,22,-55}, -{46,22,-54}, -{46,22,-53}, -{46,22,-52}, -{46,22,-51}, -{46,22,-50}, -{46,22,-49}, -{46,22,-48}, -{46,22,-47}, -{46,22,-46}, -{46,22,-45}, -{46,22,-44}, -{46,22,-43}, -{46,22,-42}, -{46,22,-41}, -{46,22,-40}, -{46,22,-39}, -{46,22,-38}, -{46,22,-37}, -{46,22,-36}, -{46,22,-35}, -{46,22,-34}, -{46,22,-33}, -{46,22,-32}, -{46,22,-31}, -{46,22,-30}, -{46,22,-29}, -{46,22,-28}, -{46,22,-27}, -{46,22,-26}, -{46,22,-25}, -{46,22,-24}, -{46,22,-23}, -{46,22,-22}, -{46,22,-21}, -{46,22,-20}, -{46,22,-19}, -{46,22,-18}, -{46,22,-17}, -{46,22,-16}, -{46,22,-15}, -{46,22,-14}, -{46,22,-13}, -{46,22,-12}, -{46,22,-11}, -{46,22,-10}, -{46,22,-9}, -{46,22,-8}, -{46,22,-7}, -{46,22,-6}, -{46,22,-5}, -{46,22,-4}, -{46,22,-3}, -{46,22,-2}, -{46,22,-1}, -{46,22,0}, -{46,22,1}, -{46,22,2}, -{46,22,3}, -{46,22,4}, -{46,22,5}, -{46,22,6}, -{46,22,7}, -{46,22,8}, -{46,22,9}, -{46,22,10}, -{46,22,11}, -{46,22,12}, -{46,22,13}, -{46,22,14}, -{46,22,15}, -{46,22,16}, -{46,22,17}, -{46,22,18}, -{46,22,19}, -{46,22,20}, -{46,22,21}, -{46,22,22}, -{46,22,23}, -{46,22,24}, -{46,22,25}, -{46,22,26}, -{46,22,27}, -{46,22,28}, -{46,22,29}, -{46,22,30}, -{46,22,31}, -{46,22,32}, -{46,22,33}, -{46,22,34}, -{46,22,35}, -{46,22,36}, -{46,22,37}, -{46,22,38}, -{46,22,39}, -{46,22,40}, -{46,22,41}, -{46,22,42}, -{46,22,43}, -{46,22,44}, -{46,22,45}, -{46,22,46}, -{46,22,47}, -{46,22,48}, -{46,22,49}, -{46,22,50}, -{46,22,51}, -{46,22,52}, -{46,22,53}, -{46,22,54}, -{46,23,-68}, -{46,23,-67}, -{46,23,-66}, -{46,23,-65}, -{46,23,-64}, -{46,23,-63}, -{46,23,-62}, -{46,23,-61}, -{46,23,-60}, -{46,23,-59}, -{46,23,-58}, -{46,23,-57}, -{46,23,-56}, -{46,23,-55}, -{46,23,-54}, -{46,23,-53}, -{46,23,-52}, -{46,23,-51}, -{46,23,-50}, -{46,23,-49}, -{46,23,-48}, -{46,23,-47}, -{46,23,-46}, -{46,23,-45}, -{46,23,-44}, -{46,23,-43}, -{46,23,-42}, -{46,23,-41}, -{46,23,-40}, -{46,23,-39}, -{46,23,-38}, -{46,23,-37}, -{46,23,-36}, -{46,23,-35}, -{46,23,-34}, -{46,23,-33}, -{46,23,-32}, -{46,23,-31}, -{46,23,-30}, -{46,23,-29}, -{46,23,-28}, -{46,23,-27}, -{46,23,-26}, -{46,23,-25}, -{46,23,-24}, -{46,23,-23}, -{46,23,-22}, -{46,23,-21}, -{46,23,-20}, -{46,23,-19}, -{46,23,-18}, -{46,23,-17}, -{46,23,-16}, -{46,23,-15}, -{46,23,-14}, -{46,23,-13}, -{46,23,-12}, -{46,23,-11}, -{46,23,-10}, -{46,23,-9}, -{46,23,-8}, -{46,23,-7}, -{46,23,-6}, -{46,23,-5}, -{46,23,-4}, -{46,23,-3}, -{46,23,-2}, -{46,23,-1}, -{46,23,0}, -{46,23,1}, -{46,23,2}, -{46,23,3}, -{46,23,4}, -{46,23,5}, -{46,23,6}, -{46,23,7}, -{46,23,8}, -{46,23,9}, -{46,23,10}, -{46,23,11}, -{46,23,12}, -{46,23,13}, -{46,23,14}, -{46,23,15}, -{46,23,16}, -{46,23,17}, -{46,23,18}, -{46,23,19}, -{46,23,20}, -{46,23,21}, -{46,23,22}, -{46,23,23}, -{46,23,24}, -{46,23,25}, -{46,23,26}, -{46,23,27}, -{46,23,28}, -{46,23,29}, -{46,23,30}, -{46,23,31}, -{46,23,32}, -{46,23,33}, -{46,23,34}, -{46,23,35}, -{46,23,36}, -{46,23,37}, -{46,23,38}, -{46,23,39}, -{46,23,40}, -{46,23,41}, -{46,23,42}, -{46,23,43}, -{46,23,44}, -{46,23,45}, -{46,23,46}, -{46,23,47}, -{46,23,48}, -{46,23,49}, -{46,23,50}, -{46,23,51}, -{46,23,52}, -{46,23,53}, -{46,23,54}, -{46,24,-69}, -{46,24,-68}, -{46,24,-67}, -{46,24,-66}, -{46,24,-65}, -{46,24,-64}, -{46,24,-63}, -{46,24,-62}, -{46,24,-61}, -{46,24,-60}, -{46,24,-59}, -{46,24,-58}, -{46,24,-57}, -{46,24,-56}, -{46,24,-55}, -{46,24,-54}, -{46,24,-53}, -{46,24,-52}, -{46,24,-51}, -{46,24,-50}, -{46,24,-49}, -{46,24,-48}, -{46,24,-47}, -{46,24,-46}, -{46,24,-45}, -{46,24,-44}, -{46,24,-43}, -{46,24,-42}, -{46,24,-41}, -{46,24,-40}, -{46,24,-39}, -{46,24,-38}, -{46,24,-37}, -{46,24,-36}, -{46,24,-35}, -{46,24,-34}, -{46,24,-33}, -{46,24,-32}, -{46,24,-31}, -{46,24,-30}, -{46,24,-29}, -{46,24,-28}, -{46,24,-27}, -{46,24,-26}, -{46,24,-25}, -{46,24,-24}, -{46,24,-23}, -{46,24,-22}, -{46,24,-21}, -{46,24,-20}, -{46,24,-19}, -{46,24,-18}, -{46,24,-17}, -{46,24,-16}, -{46,24,-15}, -{46,24,-14}, -{46,24,-13}, -{46,24,-12}, -{46,24,-11}, -{46,24,-10}, -{46,24,-9}, -{46,24,-8}, -{46,24,-7}, -{46,24,-6}, -{46,24,-5}, -{46,24,-4}, -{46,24,-3}, -{46,24,-2}, -{46,24,-1}, -{46,24,0}, -{46,24,1}, -{46,24,2}, -{46,24,3}, -{46,24,4}, -{46,24,5}, -{46,24,6}, -{46,24,7}, -{46,24,8}, -{46,24,9}, -{46,24,10}, -{46,24,11}, -{46,24,12}, -{46,24,13}, -{46,24,14}, -{46,24,15}, -{46,24,16}, -{46,24,17}, -{46,24,18}, -{46,24,19}, -{46,24,20}, -{46,24,21}, -{46,24,22}, -{46,24,23}, -{46,24,24}, -{46,24,25}, -{46,24,26}, -{46,24,27}, -{46,24,28}, -{46,24,29}, -{46,24,30}, -{46,24,31}, -{46,24,32}, -{46,24,33}, -{46,24,34}, -{46,24,35}, -{46,24,36}, -{46,24,37}, -{46,24,38}, -{46,24,39}, -{46,24,40}, -{46,24,41}, -{46,24,42}, -{46,24,43}, -{46,24,44}, -{46,24,45}, -{46,24,46}, -{46,24,47}, -{46,24,48}, -{46,24,49}, -{46,24,50}, -{46,24,51}, -{46,24,52}, -{46,24,53}, -{46,24,54}, -{46,25,-70}, -{46,25,-69}, -{46,25,-68}, -{46,25,-67}, -{46,25,-66}, -{46,25,-65}, -{46,25,-64}, -{46,25,-63}, -{46,25,-62}, -{46,25,-61}, -{46,25,-60}, -{46,25,-59}, -{46,25,-58}, -{46,25,-57}, -{46,25,-56}, -{46,25,-55}, -{46,25,-54}, -{46,25,-53}, -{46,25,-52}, -{46,25,-51}, -{46,25,-50}, -{46,25,-49}, -{46,25,-48}, -{46,25,-47}, -{46,25,-46}, -{46,25,-45}, -{46,25,-44}, -{46,25,-43}, -{46,25,-42}, -{46,25,-41}, -{46,25,-40}, -{46,25,-39}, -{46,25,-38}, -{46,25,-37}, -{46,25,-36}, -{46,25,-35}, -{46,25,-34}, -{46,25,-33}, -{46,25,-32}, -{46,25,-31}, -{46,25,-30}, -{46,25,-29}, -{46,25,-28}, -{46,25,-27}, -{46,25,-26}, -{46,25,-25}, -{46,25,-24}, -{46,25,-23}, -{46,25,-22}, -{46,25,-21}, -{46,25,-20}, -{46,25,-19}, -{46,25,-18}, -{46,25,-17}, -{46,25,-16}, -{46,25,-15}, -{46,25,-14}, -{46,25,-13}, -{46,25,-12}, -{46,25,-11}, -{46,25,-10}, -{46,25,-9}, -{46,25,-8}, -{46,25,-7}, -{46,25,-6}, -{46,25,-5}, -{46,25,-4}, -{46,25,-3}, -{46,25,-2}, -{46,25,-1}, -{46,25,0}, -{46,25,1}, -{46,25,2}, -{46,25,3}, -{46,25,4}, -{46,25,5}, -{46,25,6}, -{46,25,7}, -{46,25,8}, -{46,25,9}, -{46,25,10}, -{46,25,11}, -{46,25,12}, -{46,25,13}, -{46,25,14}, -{46,25,15}, -{46,25,16}, -{46,25,17}, -{46,25,18}, -{46,25,19}, -{46,25,20}, -{46,25,21}, -{46,25,22}, -{46,25,23}, -{46,25,24}, -{46,25,25}, -{46,25,26}, -{46,25,27}, -{46,25,28}, -{46,25,29}, -{46,25,30}, -{46,25,31}, -{46,25,32}, -{46,25,33}, -{46,25,34}, -{46,25,35}, -{46,25,36}, -{46,25,37}, -{46,25,38}, -{46,25,39}, -{46,25,40}, -{46,25,41}, -{46,25,42}, -{46,25,43}, -{46,25,44}, -{46,25,45}, -{46,25,46}, -{46,25,47}, -{46,25,48}, -{46,25,49}, -{46,25,50}, -{46,25,51}, -{46,25,52}, -{46,25,53}, -{46,25,54}, -{46,26,-71}, -{46,26,-70}, -{46,26,-69}, -{46,26,-68}, -{46,26,-67}, -{46,26,-66}, -{46,26,-65}, -{46,26,-64}, -{46,26,-63}, -{46,26,-62}, -{46,26,-61}, -{46,26,-60}, -{46,26,-59}, -{46,26,-58}, -{46,26,-57}, -{46,26,-56}, -{46,26,-55}, -{46,26,-54}, -{46,26,-53}, -{46,26,-52}, -{46,26,-51}, -{46,26,-50}, -{46,26,-49}, -{46,26,-48}, -{46,26,-47}, -{46,26,-46}, -{46,26,-45}, -{46,26,-44}, -{46,26,-43}, -{46,26,-42}, -{46,26,-41}, -{46,26,-40}, -{46,26,-39}, -{46,26,-38}, -{46,26,-37}, -{46,26,-36}, -{46,26,-35}, -{46,26,-34}, -{46,26,-33}, -{46,26,-32}, -{46,26,-31}, -{46,26,-30}, -{46,26,-29}, -{46,26,-28}, -{46,26,-27}, -{46,26,-26}, -{46,26,-25}, -{46,26,-24}, -{46,26,-23}, -{46,26,-22}, -{46,26,-21}, -{46,26,-20}, -{46,26,-19}, -{46,26,-18}, -{46,26,-17}, -{46,26,-16}, -{46,26,-15}, -{46,26,-14}, -{46,26,-13}, -{46,26,-12}, -{46,26,-11}, -{46,26,-10}, -{46,26,-9}, -{46,26,-8}, -{46,26,-7}, -{46,26,-6}, -{46,26,-5}, -{46,26,-4}, -{46,26,-3}, -{46,26,-2}, -{46,26,-1}, -{46,26,0}, -{46,26,1}, -{46,26,2}, -{46,26,3}, -{46,26,4}, -{46,26,5}, -{46,26,6}, -{46,26,7}, -{46,26,8}, -{46,26,9}, -{46,26,10}, -{46,26,11}, -{46,26,12}, -{46,26,13}, -{46,26,14}, -{46,26,15}, -{46,26,16}, -{46,26,17}, -{46,26,18}, -{46,26,19}, -{46,26,20}, -{46,26,21}, -{46,26,22}, -{46,26,23}, -{46,26,24}, -{46,26,25}, -{46,26,26}, -{46,26,27}, -{46,26,28}, -{46,26,29}, -{46,26,30}, -{46,26,31}, -{46,26,32}, -{46,26,33}, -{46,26,34}, -{46,26,35}, -{46,26,36}, -{46,26,37}, -{46,26,38}, -{46,26,39}, -{46,26,40}, -{46,26,41}, -{46,26,42}, -{46,26,43}, -{46,26,44}, -{46,26,45}, -{46,26,46}, -{46,26,47}, -{46,26,48}, -{46,26,49}, -{46,26,50}, -{46,26,51}, -{46,26,52}, -{46,26,53}, -{46,26,54}, -{46,27,-72}, -{46,27,-71}, -{46,27,-70}, -{46,27,-69}, -{46,27,-68}, -{46,27,-67}, -{46,27,-66}, -{46,27,-65}, -{46,27,-64}, -{46,27,-63}, -{46,27,-62}, -{46,27,-61}, -{46,27,-60}, -{46,27,-59}, -{46,27,-58}, -{46,27,-57}, -{46,27,-56}, -{46,27,-55}, -{46,27,-54}, -{46,27,-53}, -{46,27,-52}, -{46,27,-51}, -{46,27,-50}, -{46,27,-49}, -{46,27,-48}, -{46,27,-47}, -{46,27,-46}, -{46,27,-45}, -{46,27,-44}, -{46,27,-43}, -{46,27,-42}, -{46,27,-41}, -{46,27,-40}, -{46,27,-39}, -{46,27,-38}, -{46,27,-37}, -{46,27,-36}, -{46,27,-35}, -{46,27,-34}, -{46,27,-33}, -{46,27,-32}, -{46,27,-31}, -{46,27,-30}, -{46,27,-29}, -{46,27,-28}, -{46,27,-27}, -{46,27,-26}, -{46,27,-25}, -{46,27,-24}, -{46,27,-23}, -{46,27,-22}, -{46,27,-21}, -{46,27,-20}, -{46,27,-19}, -{46,27,-18}, -{46,27,-17}, -{46,27,-16}, -{46,27,-15}, -{46,27,-14}, -{46,27,-13}, -{46,27,-12}, -{46,27,-11}, -{46,27,-10}, -{46,27,-9}, -{46,27,-8}, -{46,27,-7}, -{46,27,-6}, -{46,27,-5}, -{46,27,-4}, -{46,27,-3}, -{46,27,-2}, -{46,27,-1}, -{46,27,0}, -{46,27,1}, -{46,27,2}, -{46,27,3}, -{46,27,4}, -{46,27,5}, -{46,27,6}, -{46,27,7}, -{46,27,8}, -{46,27,9}, -{46,27,10}, -{46,27,11}, -{46,27,12}, -{46,27,13}, -{46,27,14}, -{46,27,15}, -{46,27,16}, -{46,27,17}, -{46,27,18}, -{46,27,19}, -{46,27,20}, -{46,27,21}, -{46,27,22}, -{46,27,23}, -{46,27,24}, -{46,27,25}, -{46,27,26}, -{46,27,27}, -{46,27,28}, -{46,27,29}, -{46,27,30}, -{46,27,31}, -{46,27,32}, -{46,27,33}, -{46,27,34}, -{46,27,35}, -{46,27,36}, -{46,27,37}, -{46,27,38}, -{46,27,39}, -{46,27,40}, -{46,27,41}, -{46,27,42}, -{46,27,43}, -{46,27,44}, -{46,27,45}, -{46,27,46}, -{46,27,47}, -{46,27,48}, -{46,27,49}, -{46,27,50}, -{46,27,51}, -{46,27,52}, -{46,27,53}, -{46,27,54}, -{46,28,-73}, -{46,28,-72}, -{46,28,-71}, -{46,28,-70}, -{46,28,-69}, -{46,28,-68}, -{46,28,-67}, -{46,28,-66}, -{46,28,-65}, -{46,28,-64}, -{46,28,-63}, -{46,28,-62}, -{46,28,-61}, -{46,28,-60}, -{46,28,-59}, -{46,28,-58}, -{46,28,-57}, -{46,28,-56}, -{46,28,-55}, -{46,28,-54}, -{46,28,-53}, -{46,28,-52}, -{46,28,-51}, -{46,28,-50}, -{46,28,-49}, -{46,28,-48}, -{46,28,-47}, -{46,28,-46}, -{46,28,-45}, -{46,28,-44}, -{46,28,-43}, -{46,28,-42}, -{46,28,-41}, -{46,28,-40}, -{46,28,-39}, -{46,28,-38}, -{46,28,-37}, -{46,28,-36}, -{46,28,-35}, -{46,28,-34}, -{46,28,-33}, -{46,28,-32}, -{46,28,-31}, -{46,28,-30}, -{46,28,-29}, -{46,28,-28}, -{46,28,-27}, -{46,28,-26}, -{46,28,-25}, -{46,28,-24}, -{46,28,-23}, -{46,28,-22}, -{46,28,-21}, -{46,28,-20}, -{46,28,-19}, -{46,28,-18}, -{46,28,-17}, -{46,28,-16}, -{46,28,-15}, -{46,28,-14}, -{46,28,-13}, -{46,28,-12}, -{46,28,-11}, -{46,28,-10}, -{46,28,-9}, -{46,28,-8}, -{46,28,-7}, -{46,28,-6}, -{46,28,-5}, -{46,28,-4}, -{46,28,-3}, -{46,28,-2}, -{46,28,-1}, -{46,28,0}, -{46,28,1}, -{46,28,2}, -{46,28,3}, -{46,28,4}, -{46,28,5}, -{46,28,6}, -{46,28,7}, -{46,28,8}, -{46,28,9}, -{46,28,10}, -{46,28,11}, -{46,28,12}, -{46,28,13}, -{46,28,14}, -{46,28,15}, -{46,28,16}, -{46,28,17}, -{46,28,18}, -{46,28,19}, -{46,28,20}, -{46,28,21}, -{46,28,22}, -{46,28,23}, -{46,28,24}, -{46,28,25}, -{46,28,26}, -{46,28,27}, -{46,28,28}, -{46,28,29}, -{46,28,30}, -{46,28,31}, -{46,28,32}, -{46,28,33}, -{46,28,34}, -{46,28,35}, -{46,28,36}, -{46,28,37}, -{46,28,38}, -{46,28,39}, -{46,28,40}, -{46,28,41}, -{46,28,42}, -{46,28,43}, -{46,28,44}, -{46,28,45}, -{46,28,46}, -{46,28,47}, -{46,28,48}, -{46,28,49}, -{46,28,50}, -{46,28,51}, -{46,28,52}, -{46,28,53}, -{46,28,54}, -{46,28,55}, -{46,29,-74}, -{46,29,-73}, -{46,29,-72}, -{46,29,-71}, -{46,29,-70}, -{46,29,-69}, -{46,29,-68}, -{46,29,-67}, -{46,29,-66}, -{46,29,-65}, -{46,29,-64}, -{46,29,-63}, -{46,29,-62}, -{46,29,-61}, -{46,29,-60}, -{46,29,-59}, -{46,29,-58}, -{46,29,-57}, -{46,29,-56}, -{46,29,-55}, -{46,29,-54}, -{46,29,-53}, -{46,29,-52}, -{46,29,-51}, -{46,29,-50}, -{46,29,-49}, -{46,29,-48}, -{46,29,-47}, -{46,29,-46}, -{46,29,-45}, -{46,29,-44}, -{46,29,-43}, -{46,29,-42}, -{46,29,-41}, -{46,29,-40}, -{46,29,-39}, -{46,29,-38}, -{46,29,-37}, -{46,29,-36}, -{46,29,-35}, -{46,29,-34}, -{46,29,-33}, -{46,29,-32}, -{46,29,-31}, -{46,29,-30}, -{46,29,-29}, -{46,29,-28}, -{46,29,-27}, -{46,29,-26}, -{46,29,-25}, -{46,29,-24}, -{46,29,-23}, -{46,29,-22}, -{46,29,-21}, -{46,29,-20}, -{46,29,-19}, -{46,29,-18}, -{46,29,-17}, -{46,29,-16}, -{46,29,-15}, -{46,29,-14}, -{46,29,-13}, -{46,29,-12}, -{46,29,-11}, -{46,29,-10}, -{46,29,-9}, -{46,29,-8}, -{46,29,-7}, -{46,29,-6}, -{46,29,-5}, -{46,29,-4}, -{46,29,-3}, -{46,29,-2}, -{46,29,-1}, -{46,29,0}, -{46,29,1}, -{46,29,2}, -{46,29,3}, -{46,29,4}, -{46,29,5}, -{46,29,6}, -{46,29,7}, -{46,29,8}, -{46,29,9}, -{46,29,10}, -{46,29,11}, -{46,29,12}, -{46,29,13}, -{46,29,14}, -{46,29,15}, -{46,29,16}, -{46,29,17}, -{46,29,18}, -{46,29,19}, -{46,29,20}, -{46,29,21}, -{46,29,22}, -{46,29,23}, -{46,29,24}, -{46,29,25}, -{46,29,26}, -{46,29,27}, -{46,29,28}, -{46,29,29}, -{46,29,30}, -{46,29,31}, -{46,29,32}, -{46,29,33}, -{46,29,34}, -{46,29,35}, -{46,29,36}, -{46,29,37}, -{46,29,38}, -{46,29,39}, -{46,29,40}, -{46,29,41}, -{46,29,42}, -{46,29,43}, -{46,29,44}, -{46,29,45}, -{46,29,46}, -{46,29,47}, -{46,29,48}, -{46,29,49}, -{46,29,50}, -{46,29,51}, -{46,29,52}, -{46,29,53}, -{46,29,54}, -{46,29,55}, -{46,30,-75}, -{46,30,-74}, -{46,30,-73}, -{46,30,-72}, -{46,30,-71}, -{46,30,-70}, -{46,30,-69}, -{46,30,-68}, -{46,30,-67}, -{46,30,-66}, -{46,30,-65}, -{46,30,-64}, -{46,30,-63}, -{46,30,-62}, -{46,30,-61}, -{46,30,-60}, -{46,30,-59}, -{46,30,-58}, -{46,30,-57}, -{46,30,-56}, -{46,30,-55}, -{46,30,-54}, -{46,30,-53}, -{46,30,-52}, -{46,30,-51}, -{46,30,-50}, -{46,30,-49}, -{46,30,-48}, -{46,30,-47}, -{46,30,-46}, -{46,30,-45}, -{46,30,-44}, -{46,30,-43}, -{46,30,-42}, -{46,30,-41}, -{46,30,-40}, -{46,30,-39}, -{46,30,-38}, -{46,30,-37}, -{46,30,-36}, -{46,30,-35}, -{46,30,-34}, -{46,30,-33}, -{46,30,-32}, -{46,30,-31}, -{46,30,-30}, -{46,30,-29}, -{46,30,-28}, -{46,30,-27}, -{46,30,-26}, -{46,30,-25}, -{46,30,-24}, -{46,30,-23}, -{46,30,-22}, -{46,30,-21}, -{46,30,-20}, -{46,30,-19}, -{46,30,-18}, -{46,30,-17}, -{46,30,-16}, -{46,30,-15}, -{46,30,-14}, -{46,30,-13}, -{46,30,-12}, -{46,30,-11}, -{46,30,-10}, -{46,30,-9}, -{46,30,-8}, -{46,30,-7}, -{46,30,-6}, -{46,30,-5}, -{46,30,-4}, -{46,30,-3}, -{46,30,-2}, -{46,30,-1}, -{46,30,0}, -{46,30,1}, -{46,30,2}, -{46,30,3}, -{46,30,4}, -{46,30,5}, -{46,30,6}, -{46,30,7}, -{46,30,8}, -{46,30,9}, -{46,30,10}, -{46,30,11}, -{46,30,12}, -{46,30,13}, -{46,30,14}, -{46,30,15}, -{46,30,16}, -{46,30,17}, -{46,30,18}, -{46,30,19}, -{46,30,20}, -{46,30,21}, -{46,30,22}, -{46,30,23}, -{46,30,24}, -{46,30,25}, -{46,30,26}, -{46,30,27}, -{46,30,28}, -{46,30,29}, -{46,30,30}, -{46,30,31}, -{46,30,32}, -{46,30,33}, -{46,30,34}, -{46,30,35}, -{46,30,36}, -{46,30,37}, -{46,30,38}, -{46,30,39}, -{46,30,40}, -{46,30,41}, -{46,30,42}, -{46,30,43}, -{46,30,44}, -{46,30,45}, -{46,30,46}, -{46,30,47}, -{46,30,48}, -{46,30,49}, -{46,30,50}, -{46,30,51}, -{46,30,52}, -{46,30,53}, -{46,30,54}, -{46,30,55}, -{46,31,-76}, -{46,31,-75}, -{46,31,-74}, -{46,31,-73}, -{46,31,-72}, -{46,31,-71}, -{46,31,-70}, -{46,31,-69}, -{46,31,-68}, -{46,31,-67}, -{46,31,-66}, -{46,31,-65}, -{46,31,-64}, -{46,31,-63}, -{46,31,-62}, -{46,31,-61}, -{46,31,-60}, -{46,31,-59}, -{46,31,-58}, -{46,31,-57}, -{46,31,-56}, -{46,31,-55}, -{46,31,-54}, -{46,31,-53}, -{46,31,-52}, -{46,31,-51}, -{46,31,-50}, -{46,31,-49}, -{46,31,-48}, -{46,31,-47}, -{46,31,-46}, -{46,31,-45}, -{46,31,-44}, -{46,31,-43}, -{46,31,-42}, -{46,31,-41}, -{46,31,-40}, -{46,31,-39}, -{46,31,-38}, -{46,31,-37}, -{46,31,-36}, -{46,31,-35}, -{46,31,-34}, -{46,31,-33}, -{46,31,-32}, -{46,31,-31}, -{46,31,-30}, -{46,31,-29}, -{46,31,-28}, -{46,31,-27}, -{46,31,-26}, -{46,31,-25}, -{46,31,-24}, -{46,31,-23}, -{46,31,-22}, -{46,31,-21}, -{46,31,-20}, -{46,31,-19}, -{46,31,-18}, -{46,31,-17}, -{46,31,-16}, -{46,31,-15}, -{46,31,-14}, -{46,31,-13}, -{46,31,-12}, -{46,31,-11}, -{46,31,-10}, -{46,31,-9}, -{46,31,-8}, -{46,31,-7}, -{46,31,-6}, -{46,31,-5}, -{46,31,-4}, -{46,31,-3}, -{46,31,-2}, -{46,31,-1}, -{46,31,0}, -{46,31,1}, -{46,31,2}, -{46,31,3}, -{46,31,4}, -{46,31,5}, -{46,31,6}, -{46,31,7}, -{46,31,8}, -{46,31,9}, -{46,31,10}, -{46,31,11}, -{46,31,12}, -{46,31,13}, -{46,31,14}, -{46,31,15}, -{46,31,16}, -{46,31,17}, -{46,31,18}, -{46,31,19}, -{46,31,20}, -{46,31,21}, -{46,31,22}, -{46,31,23}, -{46,31,24}, -{46,31,25}, -{46,31,26}, -{46,31,27}, -{46,31,28}, -{46,31,29}, -{46,31,30}, -{46,31,31}, -{46,31,32}, -{46,31,33}, -{46,31,34}, -{46,31,35}, -{46,31,36}, -{46,31,37}, -{46,31,38}, -{46,31,39}, -{46,31,40}, -{46,31,41}, -{46,31,42}, -{46,31,43}, -{46,31,44}, -{46,31,45}, -{46,31,46}, -{46,31,47}, -{46,31,48}, -{46,31,49}, -{46,31,50}, -{46,31,51}, -{46,31,52}, -{46,31,53}, -{46,31,54}, -{46,31,55}, -{46,32,-77}, -{46,32,-76}, -{46,32,-75}, -{46,32,-74}, -{46,32,-73}, -{46,32,-72}, -{46,32,-71}, -{46,32,-70}, -{46,32,-69}, -{46,32,-68}, -{46,32,-67}, -{46,32,-66}, -{46,32,-65}, -{46,32,-64}, -{46,32,-63}, -{46,32,-62}, -{46,32,-61}, -{46,32,-60}, -{46,32,-59}, -{46,32,-58}, -{46,32,-57}, -{46,32,-56}, -{46,32,-55}, -{46,32,-54}, -{46,32,-53}, -{46,32,-52}, -{46,32,-51}, -{46,32,-50}, -{46,32,-49}, -{46,32,-48}, -{46,32,-47}, -{46,32,-46}, -{46,32,-45}, -{46,32,-44}, -{46,32,-43}, -{46,32,-42}, -{46,32,-41}, -{46,32,-40}, -{46,32,-39}, -{46,32,-38}, -{46,32,-37}, -{46,32,-36}, -{46,32,-35}, -{46,32,-34}, -{46,32,-33}, -{46,32,-32}, -{46,32,-31}, -{46,32,-30}, -{46,32,-29}, -{46,32,-28}, -{46,32,-27}, -{46,32,-26}, -{46,32,-25}, -{46,32,-24}, -{46,32,-23}, -{46,32,-22}, -{46,32,-21}, -{46,32,-20}, -{46,32,-19}, -{46,32,-18}, -{46,32,-17}, -{46,32,-16}, -{46,32,-15}, -{46,32,-14}, -{46,32,-13}, -{46,32,-12}, -{46,32,-11}, -{46,32,-10}, -{46,32,-9}, -{46,32,-8}, -{46,32,-7}, -{46,32,-6}, -{46,32,-5}, -{46,32,-4}, -{46,32,-3}, -{46,32,-2}, -{46,32,-1}, -{46,32,0}, -{46,32,1}, -{46,32,2}, -{46,32,3}, -{46,32,4}, -{46,32,5}, -{46,32,6}, -{46,32,7}, -{46,32,8}, -{46,32,9}, -{46,32,10}, -{46,32,11}, -{46,32,12}, -{46,32,13}, -{46,32,14}, -{46,32,15}, -{46,32,16}, -{46,32,17}, -{46,32,18}, -{46,32,19}, -{46,32,20}, -{46,32,21}, -{46,32,22}, -{46,32,23}, -{46,32,24}, -{46,32,25}, -{46,32,26}, -{46,32,27}, -{46,32,28}, -{46,32,29}, -{46,32,30}, -{46,32,31}, -{46,32,32}, -{46,32,33}, -{46,32,34}, -{46,32,35}, -{46,32,36}, -{46,32,37}, -{46,32,38}, -{46,32,39}, -{46,32,40}, -{46,32,41}, -{46,32,42}, -{46,32,43}, -{46,32,44}, -{46,32,45}, -{46,32,46}, -{46,32,47}, -{46,32,48}, -{46,32,49}, -{46,32,50}, -{46,32,51}, -{46,32,52}, -{46,32,53}, -{46,32,54}, -{46,32,55}, -{46,33,-78}, -{46,33,-77}, -{46,33,-76}, -{46,33,-75}, -{46,33,-74}, -{46,33,-73}, -{46,33,-72}, -{46,33,-71}, -{46,33,-70}, -{46,33,-69}, -{46,33,-68}, -{46,33,-67}, -{46,33,-66}, -{46,33,-65}, -{46,33,-64}, -{46,33,-63}, -{46,33,-62}, -{46,33,-61}, -{46,33,-60}, -{46,33,-59}, -{46,33,-58}, -{46,33,-57}, -{46,33,-56}, -{46,33,-55}, -{46,33,-54}, -{46,33,-53}, -{46,33,-52}, -{46,33,-51}, -{46,33,-50}, -{46,33,-49}, -{46,33,-48}, -{46,33,-47}, -{46,33,-46}, -{46,33,-45}, -{46,33,-44}, -{46,33,-43}, -{46,33,-42}, -{46,33,-41}, -{46,33,-40}, -{46,33,-39}, -{46,33,-38}, -{46,33,-37}, -{46,33,-36}, -{46,33,-35}, -{46,33,-34}, -{46,33,-33}, -{46,33,-32}, -{46,33,-31}, -{46,33,-30}, -{46,33,-29}, -{46,33,-28}, -{46,33,-27}, -{46,33,-26}, -{46,33,-25}, -{46,33,-24}, -{46,33,-23}, -{46,33,-22}, -{46,33,-21}, -{46,33,-20}, -{46,33,-19}, -{46,33,-18}, -{46,33,-17}, -{46,33,-16}, -{46,33,-15}, -{46,33,-14}, -{46,33,-13}, -{46,33,-12}, -{46,33,-11}, -{46,33,-10}, -{46,33,-9}, -{46,33,-8}, -{46,33,-7}, -{46,33,-6}, -{46,33,-5}, -{46,33,-4}, -{46,33,-3}, -{46,33,-2}, -{46,33,-1}, -{46,33,0}, -{46,33,1}, -{46,33,2}, -{46,33,3}, -{46,33,4}, -{46,33,5}, -{46,33,6}, -{46,33,7}, -{46,33,8}, -{46,33,9}, -{46,33,10}, -{46,33,11}, -{46,33,12}, -{46,33,13}, -{46,33,14}, -{46,33,15}, -{46,33,16}, -{46,33,17}, -{46,33,18}, -{46,33,19}, -{46,33,20}, -{46,33,21}, -{46,33,22}, -{46,33,23}, -{46,33,24}, -{46,33,25}, -{46,33,26}, -{46,33,27}, -{46,33,28}, -{46,33,29}, -{46,33,30}, -{46,33,31}, -{46,33,32}, -{46,33,33}, -{46,33,34}, -{46,33,35}, -{46,33,36}, -{46,33,37}, -{46,33,38}, -{46,33,39}, -{46,33,40}, -{46,33,41}, -{46,33,42}, -{46,33,43}, -{46,33,44}, -{46,33,45}, -{46,33,46}, -{46,33,47}, -{46,33,48}, -{46,33,49}, -{46,33,50}, -{46,33,51}, -{46,33,52}, -{46,33,53}, -{46,33,54}, -{46,33,55}, -{46,34,-79}, -{46,34,-78}, -{46,34,-77}, -{46,34,-76}, -{46,34,-75}, -{46,34,-74}, -{46,34,-73}, -{46,34,-72}, -{46,34,-71}, -{46,34,-70}, -{46,34,-69}, -{46,34,-68}, -{46,34,-67}, -{46,34,-66}, -{46,34,-65}, -{46,34,-64}, -{46,34,-63}, -{46,34,-62}, -{46,34,-61}, -{46,34,-60}, -{46,34,-59}, -{46,34,-58}, -{46,34,-57}, -{46,34,-56}, -{46,34,-55}, -{46,34,-54}, -{46,34,-53}, -{46,34,-52}, -{46,34,-51}, -{46,34,-50}, -{46,34,-49}, -{46,34,-48}, -{46,34,-47}, -{46,34,-46}, -{46,34,-45}, -{46,34,-44}, -{46,34,-43}, -{46,34,-42}, -{46,34,-41}, -{46,34,-40}, -{46,34,-39}, -{46,34,-38}, -{46,34,-37}, -{46,34,-36}, -{46,34,-35}, -{46,34,-34}, -{46,34,-33}, -{46,34,-32}, -{46,34,-31}, -{46,34,-30}, -{46,34,-29}, -{46,34,-28}, -{46,34,-27}, -{46,34,-26}, -{46,34,-25}, -{46,34,-24}, -{46,34,-23}, -{46,34,-22}, -{46,34,-21}, -{46,34,-20}, -{46,34,-19}, -{46,34,-18}, -{46,34,-17}, -{46,34,-16}, -{46,34,-15}, -{46,34,-14}, -{46,34,-13}, -{46,34,-12}, -{46,34,-11}, -{46,34,-10}, -{46,34,-9}, -{46,34,-8}, -{46,34,-7}, -{46,34,-6}, -{46,34,-5}, -{46,34,-4}, -{46,34,-3}, -{46,34,-2}, -{46,34,-1}, -{46,34,0}, -{46,34,1}, -{46,34,2}, -{46,34,3}, -{46,34,4}, -{46,34,5}, -{46,34,6}, -{46,34,7}, -{46,34,8}, -{46,34,9}, -{46,34,10}, -{46,34,11}, -{46,34,12}, -{46,34,13}, -{46,34,14}, -{46,34,15}, -{46,34,16}, -{46,34,17}, -{46,34,18}, -{46,34,19}, -{46,34,20}, -{46,34,21}, -{46,34,22}, -{46,34,23}, -{46,34,24}, -{46,34,25}, -{46,34,26}, -{46,34,27}, -{46,34,28}, -{46,34,29}, -{46,34,30}, -{46,34,31}, -{46,34,32}, -{46,34,33}, -{46,34,34}, -{46,34,35}, -{46,34,36}, -{46,34,37}, -{46,34,38}, -{46,34,39}, -{46,34,40}, -{46,34,41}, -{46,34,42}, -{46,34,43}, -{46,34,44}, -{46,34,45}, -{46,34,46}, -{46,34,47}, -{46,34,48}, -{46,34,49}, -{46,34,50}, -{46,34,51}, -{46,34,52}, -{46,34,53}, -{46,34,54}, -{46,34,55}, -{46,35,-80}, -{46,35,-79}, -{46,35,-78}, -{46,35,-77}, -{46,35,-76}, -{46,35,-75}, -{46,35,-74}, -{46,35,-73}, -{46,35,-72}, -{46,35,-71}, -{46,35,-70}, -{46,35,-69}, -{46,35,-68}, -{46,35,-67}, -{46,35,-66}, -{46,35,-65}, -{46,35,-64}, -{46,35,-63}, -{46,35,-62}, -{46,35,-61}, -{46,35,-60}, -{46,35,-59}, -{46,35,-58}, -{46,35,-57}, -{46,35,-56}, -{46,35,-55}, -{46,35,-54}, -{46,35,-53}, -{46,35,-52}, -{46,35,-51}, -{46,35,-50}, -{46,35,-49}, -{46,35,-48}, -{46,35,-47}, -{46,35,-46}, -{46,35,-45}, -{46,35,-44}, -{46,35,-43}, -{46,35,-42}, -{46,35,-41}, -{46,35,-40}, -{46,35,-39}, -{46,35,-38}, -{46,35,-37}, -{46,35,-36}, -{46,35,-35}, -{46,35,-34}, -{46,35,-33}, -{46,35,-32}, -{46,35,-31}, -{46,35,-30}, -{46,35,-29}, -{46,35,-28}, -{46,35,-27}, -{46,35,-26}, -{46,35,-25}, -{46,35,-24}, -{46,35,-23}, -{46,35,-22}, -{46,35,-21}, -{46,35,-20}, -{46,35,-19}, -{46,35,-18}, -{46,35,-17}, -{46,35,-16}, -{46,35,-15}, -{46,35,-14}, -{46,35,-13}, -{46,35,-12}, -{46,35,-11}, -{46,35,-10}, -{46,35,-9}, -{46,35,-8}, -{46,35,-7}, -{46,35,-6}, -{46,35,-5}, -{46,35,-4}, -{46,35,-3}, -{46,35,-2}, -{46,35,-1}, -{46,35,0}, -{46,35,1}, -{46,35,2}, -{46,35,3}, -{46,35,4}, -{46,35,5}, -{46,35,6}, -{46,35,7}, -{46,35,8}, -{46,35,9}, -{46,35,10}, -{46,35,11}, -{46,35,12}, -{46,35,13}, -{46,35,14}, -{46,35,15}, -{46,35,16}, -{46,35,17}, -{46,35,18}, -{46,35,19}, -{46,35,20}, -{46,35,21}, -{46,35,22}, -{46,35,23}, -{46,35,24}, -{46,35,25}, -{46,35,26}, -{46,35,27}, -{46,35,28}, -{46,35,29}, -{46,35,30}, -{46,35,31}, -{46,35,32}, -{46,35,33}, -{46,35,34}, -{46,35,35}, -{46,35,36}, -{46,35,37}, -{46,35,38}, -{46,35,39}, -{46,35,40}, -{46,35,41}, -{46,35,42}, -{46,35,43}, -{46,35,44}, -{46,35,45}, -{46,35,46}, -{46,35,47}, -{46,35,48}, -{46,35,49}, -{46,35,50}, -{46,35,51}, -{46,35,52}, -{46,35,53}, -{46,35,54}, -{46,35,55}, -{46,36,-81}, -{46,36,-80}, -{46,36,-79}, -{46,36,-78}, -{46,36,-77}, -{46,36,-76}, -{46,36,-75}, -{46,36,-74}, -{46,36,-73}, -{46,36,-72}, -{46,36,-71}, -{46,36,-70}, -{46,36,-69}, -{46,36,-68}, -{46,36,-67}, -{46,36,-66}, -{46,36,-65}, -{46,36,-64}, -{46,36,-63}, -{46,36,-62}, -{46,36,-61}, -{46,36,-60}, -{46,36,-59}, -{46,36,-58}, -{46,36,-57}, -{46,36,-56}, -{46,36,-55}, -{46,36,-54}, -{46,36,-53}, -{46,36,-52}, -{46,36,-51}, -{46,36,-50}, -{46,36,-49}, -{46,36,-48}, -{46,36,-47}, -{46,36,-46}, -{46,36,-45}, -{46,36,-44}, -{46,36,-43}, -{46,36,-42}, -{46,36,-41}, -{46,36,-40}, -{46,36,-39}, -{46,36,-38}, -{46,36,-37}, -{46,36,-36}, -{46,36,-35}, -{46,36,-34}, -{46,36,-33}, -{46,36,-32}, -{46,36,-31}, -{46,36,-30}, -{46,36,-29}, -{46,36,-28}, -{46,36,-27}, -{46,36,-26}, -{46,36,-25}, -{46,36,-24}, -{46,36,-23}, -{46,36,-22}, -{46,36,-21}, -{46,36,-20}, -{46,36,-19}, -{46,36,-18}, -{46,36,-17}, -{46,36,-16}, -{46,36,-15}, -{46,36,-14}, -{46,36,-13}, -{46,36,-12}, -{46,36,-11}, -{46,36,-10}, -{46,36,-9}, -{46,36,-8}, -{46,36,-7}, -{46,36,-6}, -{46,36,-5}, -{46,36,-4}, -{46,36,-3}, -{46,36,-2}, -{46,36,-1}, -{46,36,0}, -{46,36,1}, -{46,36,2}, -{46,36,3}, -{46,36,4}, -{46,36,5}, -{46,36,6}, -{46,36,7}, -{46,36,8}, -{46,36,9}, -{46,36,10}, -{46,36,11}, -{46,36,12}, -{46,36,13}, -{46,36,14}, -{46,36,15}, -{46,36,16}, -{46,36,17}, -{46,36,18}, -{46,36,19}, -{46,36,20}, -{46,36,21}, -{46,36,22}, -{46,36,23}, -{46,36,24}, -{46,36,25}, -{46,36,26}, -{46,36,27}, -{46,36,28}, -{46,36,29}, -{46,36,30}, -{46,36,31}, -{46,36,32}, -{46,36,33}, -{46,36,34}, -{46,36,35}, -{46,36,36}, -{46,36,37}, -{46,36,38}, -{46,36,39}, -{46,36,40}, -{46,36,41}, -{46,36,42}, -{46,36,43}, -{46,36,44}, -{46,36,45}, -{46,36,46}, -{46,36,47}, -{46,36,48}, -{46,36,49}, -{46,36,50}, -{46,36,51}, -{46,36,52}, -{46,36,53}, -{46,36,54}, -{46,36,55}, -{46,37,-82}, -{46,37,-81}, -{46,37,-80}, -{46,37,-79}, -{46,37,-78}, -{46,37,-77}, -{46,37,-76}, -{46,37,-75}, -{46,37,-74}, -{46,37,-73}, -{46,37,-72}, -{46,37,-71}, -{46,37,-70}, -{46,37,-69}, -{46,37,-68}, -{46,37,-67}, -{46,37,-66}, -{46,37,-65}, -{46,37,-64}, -{46,37,-63}, -{46,37,-62}, -{46,37,-61}, -{46,37,-60}, -{46,37,-59}, -{46,37,-58}, -{46,37,-57}, -{46,37,-56}, -{46,37,-55}, -{46,37,-54}, -{46,37,-53}, -{46,37,-52}, -{46,37,-51}, -{46,37,-50}, -{46,37,-49}, -{46,37,-48}, -{46,37,-47}, -{46,37,-46}, -{46,37,-45}, -{46,37,-44}, -{46,37,-43}, -{46,37,-42}, -{46,37,-41}, -{46,37,-40}, -{46,37,-39}, -{46,37,-38}, -{46,37,-37}, -{46,37,-36}, -{46,37,-35}, -{46,37,-34}, -{46,37,-33}, -{46,37,-32}, -{46,37,-31}, -{46,37,-30}, -{46,37,-29}, -{46,37,-28}, -{46,37,-27}, -{46,37,-26}, -{46,37,-25}, -{46,37,-24}, -{46,37,-23}, -{46,37,-22}, -{46,37,-21}, -{46,37,-20}, -{46,37,-19}, -{46,37,-18}, -{46,37,-17}, -{46,37,-16}, -{46,37,-15}, -{46,37,-14}, -{46,37,-13}, -{46,37,-12}, -{46,37,-11}, -{46,37,-10}, -{46,37,-9}, -{46,37,-8}, -{46,37,-7}, -{46,37,-6}, -{46,37,-5}, -{46,37,-4}, -{46,37,-3}, -{46,37,-2}, -{46,37,-1}, -{46,37,0}, -{46,37,1}, -{46,37,2}, -{46,37,3}, -{46,37,4}, -{46,37,5}, -{46,37,6}, -{46,37,7}, -{46,37,8}, -{46,37,9}, -{46,37,10}, -{46,37,11}, -{46,37,12}, -{46,37,13}, -{46,37,14}, -{46,37,15}, -{46,37,16}, -{46,37,17}, -{46,37,18}, -{46,37,19}, -{46,37,20}, -{46,37,21}, -{46,37,22}, -{46,37,23}, -{46,37,24}, -{46,37,25}, -{46,37,26}, -{46,37,27}, -{46,37,28}, -{46,37,29}, -{46,37,30}, -{46,37,31}, -{46,37,32}, -{46,37,33}, -{46,37,34}, -{46,37,35}, -{46,37,36}, -{46,37,37}, -{46,37,38}, -{46,37,39}, -{46,37,40}, -{46,37,41}, -{46,37,42}, -{46,37,43}, -{46,37,44}, -{46,37,45}, -{46,37,46}, -{46,37,47}, -{46,37,48}, -{46,37,49}, -{46,37,50}, -{46,37,51}, -{46,37,52}, -{46,37,53}, -{46,37,54}, -{46,37,55}, -{46,38,-83}, -{46,38,-82}, -{46,38,-81}, -{46,38,-80}, -{46,38,-79}, -{46,38,-78}, -{46,38,-77}, -{46,38,-76}, -{46,38,-75}, -{46,38,-74}, -{46,38,-73}, -{46,38,-72}, -{46,38,-71}, -{46,38,-70}, -{46,38,-69}, -{46,38,-68}, -{46,38,-67}, -{46,38,-66}, -{46,38,-65}, -{46,38,-64}, -{46,38,-63}, -{46,38,-62}, -{46,38,-61}, -{46,38,-60}, -{46,38,-59}, -{46,38,-58}, -{46,38,-57}, -{46,38,-56}, -{46,38,-55}, -{46,38,-54}, -{46,38,-53}, -{46,38,-52}, -{46,38,-51}, -{46,38,-50}, -{46,38,-49}, -{46,38,-48}, -{46,38,-47}, -{46,38,-46}, -{46,38,-45}, -{46,38,-44}, -{46,38,-43}, -{46,38,-42}, -{46,38,-41}, -{46,38,-40}, -{46,38,-39}, -{46,38,-38}, -{46,38,-37}, -{46,38,-36}, -{46,38,-35}, -{46,38,-34}, -{46,38,-33}, -{46,38,-32}, -{46,38,-31}, -{46,38,-30}, -{46,38,-29}, -{46,38,-28}, -{46,38,-27}, -{46,38,-26}, -{46,38,-25}, -{46,38,-24}, -{46,38,-23}, -{46,38,-22}, -{46,38,-21}, -{46,38,-20}, -{46,38,-19}, -{46,38,-18}, -{46,38,-17}, -{46,38,-16}, -{46,38,-15}, -{46,38,-14}, -{46,38,-13}, -{46,38,-12}, -{46,38,-11}, -{46,38,-10}, -{46,38,-9}, -{46,38,-8}, -{46,38,-7}, -{46,38,-6}, -{46,38,-5}, -{46,38,-4}, -{46,38,-3}, -{46,38,-2}, -{46,38,-1}, -{46,38,0}, -{46,38,1}, -{46,38,2}, -{46,38,3}, -{46,38,4}, -{46,38,5}, -{46,38,6}, -{46,38,7}, -{46,38,8}, -{46,38,9}, -{46,38,10}, -{46,38,11}, -{46,38,12}, -{46,38,13}, -{46,38,14}, -{46,38,15}, -{46,38,16}, -{46,38,17}, -{46,38,18}, -{46,38,19}, -{46,38,20}, -{46,38,21}, -{46,38,22}, -{46,38,23}, -{46,38,24}, -{46,38,25}, -{46,38,26}, -{46,38,27}, -{46,38,28}, -{46,38,29}, -{46,38,30}, -{46,38,31}, -{46,38,32}, -{46,38,33}, -{46,38,34}, -{46,38,35}, -{46,38,36}, -{46,38,37}, -{46,38,38}, -{46,38,39}, -{46,38,40}, -{46,38,41}, -{46,38,42}, -{46,38,43}, -{46,38,44}, -{46,38,45}, -{46,38,46}, -{46,38,47}, -{46,38,48}, -{46,38,49}, -{46,38,50}, -{46,38,51}, -{46,38,52}, -{46,38,53}, -{46,38,54}, -{46,38,55}, -{46,38,56}, -{46,39,-84}, -{46,39,-83}, -{46,39,-82}, -{46,39,-81}, -{46,39,-80}, -{46,39,-79}, -{46,39,-78}, -{46,39,-77}, -{46,39,-76}, -{46,39,-75}, -{46,39,-74}, -{46,39,-73}, -{46,39,-72}, -{46,39,-71}, -{46,39,-70}, -{46,39,-69}, -{46,39,-68}, -{46,39,-67}, -{46,39,-66}, -{46,39,-65}, -{46,39,-64}, -{46,39,-63}, -{46,39,-62}, -{46,39,-61}, -{46,39,-60}, -{46,39,-59}, -{46,39,-58}, -{46,39,-57}, -{46,39,-56}, -{46,39,-55}, -{46,39,-54}, -{46,39,-53}, -{46,39,-52}, -{46,39,-51}, -{46,39,-50}, -{46,39,-49}, -{46,39,-48}, -{46,39,-47}, -{46,39,-46}, -{46,39,-45}, -{46,39,-44}, -{46,39,-43}, -{46,39,-42}, -{46,39,-41}, -{46,39,-40}, -{46,39,-39}, -{46,39,-38}, -{46,39,-37}, -{46,39,-36}, -{46,39,-35}, -{46,39,-34}, -{46,39,-33}, -{46,39,-32}, -{46,39,-31}, -{46,39,-30}, -{46,39,-29}, -{46,39,-28}, -{46,39,-27}, -{46,39,-26}, -{46,39,-25}, -{46,39,-24}, -{46,39,-23}, -{46,39,-22}, -{46,39,-21}, -{46,39,-20}, -{46,39,-19}, -{46,39,-18}, -{46,39,-17}, -{46,39,-16}, -{46,39,-15}, -{46,39,-14}, -{46,39,-13}, -{46,39,-12}, -{46,39,-11}, -{46,39,-10}, -{46,39,-9}, -{46,39,-8}, -{46,39,-7}, -{46,39,-6}, -{46,39,-5}, -{46,39,-4}, -{46,39,-3}, -{46,39,-2}, -{46,39,-1}, -{46,39,0}, -{46,39,1}, -{46,39,2}, -{46,39,3}, -{46,39,4}, -{46,39,5}, -{46,39,6}, -{46,39,7}, -{46,39,8}, -{46,39,9}, -{46,39,10}, -{46,39,11}, -{46,39,12}, -{46,39,13}, -{46,39,14}, -{46,39,15}, -{46,39,16}, -{46,39,17}, -{46,39,18}, -{46,39,19}, -{46,39,20}, -{46,39,21}, -{46,39,22}, -{46,39,23}, -{46,39,24}, -{46,39,25}, -{46,39,26}, -{46,39,27}, -{46,39,28}, -{46,39,29}, -{46,39,30}, -{46,39,31}, -{46,39,32}, -{46,39,33}, -{46,39,34}, -{46,39,35}, -{46,39,36}, -{46,39,37}, -{46,39,38}, -{46,39,39}, -{46,39,40}, -{46,39,41}, -{46,39,42}, -{46,39,43}, -{46,39,44}, -{46,39,45}, -{46,39,46}, -{46,39,47}, -{46,39,48}, -{46,39,49}, -{46,39,50}, -{46,39,51}, -{46,39,52}, -{46,39,53}, -{46,39,54}, -{46,39,55}, -{46,39,56}, -{46,40,-85}, -{46,40,-84}, -{46,40,-83}, -{46,40,-82}, -{46,40,-81}, -{46,40,-80}, -{46,40,-79}, -{46,40,-78}, -{46,40,-77}, -{46,40,-76}, -{46,40,-75}, -{46,40,-74}, -{46,40,-73}, -{46,40,-72}, -{46,40,-71}, -{46,40,-70}, -{46,40,-69}, -{46,40,-68}, -{46,40,-67}, -{46,40,-66}, -{46,40,-65}, -{46,40,-64}, -{46,40,-63}, -{46,40,-62}, -{46,40,-61}, -{46,40,-60}, -{46,40,-59}, -{46,40,-58}, -{46,40,-57}, -{46,40,-56}, -{46,40,-55}, -{46,40,-54}, -{46,40,-53}, -{46,40,-52}, -{46,40,-51}, -{46,40,-50}, -{46,40,-49}, -{46,40,-48}, -{46,40,-47}, -{46,40,-46}, -{46,40,-45}, -{46,40,-44}, -{46,40,-43}, -{46,40,-42}, -{46,40,-41}, -{46,40,-40}, -{46,40,-39}, -{46,40,-38}, -{46,40,-37}, -{46,40,-36}, -{46,40,-35}, -{46,40,-34}, -{46,40,-33}, -{46,40,-32}, -{46,40,-31}, -{46,40,-30}, -{46,40,-29}, -{46,40,-28}, -{46,40,-27}, -{46,40,-26}, -{46,40,-25}, -{46,40,-24}, -{46,40,-23}, -{46,40,-22}, -{46,40,-21}, -{46,40,-20}, -{46,40,-19}, -{46,40,-18}, -{46,40,-17}, -{46,40,-16}, -{46,40,-15}, -{46,40,-14}, -{46,40,-13}, -{46,40,-12}, -{46,40,-11}, -{46,40,-10}, -{46,40,-9}, -{46,40,-8}, -{46,40,-7}, -{46,40,-6}, -{46,40,-5}, -{46,40,-4}, -{46,40,-3}, -{46,40,-2}, -{46,40,-1}, -{46,40,0}, -{46,40,1}, -{46,40,2}, -{46,40,3}, -{46,40,4}, -{46,40,5}, -{46,40,6}, -{46,40,7}, -{46,40,8}, -{46,40,9}, -{46,40,10}, -{46,40,11}, -{46,40,12}, -{46,40,13}, -{46,40,14}, -{46,40,15}, -{46,40,16}, -{46,40,17}, -{46,40,18}, -{46,40,19}, -{46,40,20}, -{46,40,21}, -{46,40,22}, -{46,40,23}, -{46,40,24}, -{46,40,25}, -{46,40,26}, -{46,40,27}, -{46,40,28}, -{46,40,29}, -{46,40,30}, -{46,40,31}, -{46,40,32}, -{46,40,33}, -{46,40,34}, -{46,40,35}, -{46,40,36}, -{46,40,37}, -{46,40,38}, -{46,40,39}, -{46,40,40}, -{46,40,41}, -{46,40,42}, -{46,40,43}, -{46,40,44}, -{46,40,45}, -{46,40,46}, -{46,40,47}, -{46,40,48}, -{46,40,49}, -{46,40,50}, -{46,40,51}, -{46,40,52}, -{46,40,53}, -{46,40,54}, -{46,40,55}, -{46,40,56}, -{46,41,-85}, -{46,41,-84}, -{46,41,-83}, -{46,41,-82}, -{46,41,-81}, -{46,41,-80}, -{46,41,-79}, -{46,41,-78}, -{46,41,-77}, -{46,41,-76}, -{46,41,-75}, -{46,41,-74}, -{46,41,-73}, -{46,41,-72}, -{46,41,-71}, -{46,41,-70}, -{46,41,-69}, -{46,41,-68}, -{46,41,-67}, -{46,41,-66}, -{46,41,-65}, -{46,41,-64}, -{46,41,-63}, -{46,41,-62}, -{46,41,-61}, -{46,41,-60}, -{46,41,-59}, -{46,41,-58}, -{46,41,-57}, -{46,41,-56}, -{46,41,-55}, -{46,41,-54}, -{46,41,-53}, -{46,41,-52}, -{46,41,-51}, -{46,41,-50}, -{46,41,-49}, -{46,41,-48}, -{46,41,-47}, -{46,41,-46}, -{46,41,-45}, -{46,41,-44}, -{46,41,-43}, -{46,41,-42}, -{46,41,-41}, -{46,41,-40}, -{46,41,-39}, -{46,41,-38}, -{46,41,-37}, -{46,41,-36}, -{46,41,-35}, -{46,41,-34}, -{46,41,-33}, -{46,41,-32}, -{46,41,-31}, -{46,41,-30}, -{46,41,-29}, -{46,41,-28}, -{46,41,-27}, -{46,41,-26}, -{46,41,-25}, -{46,41,-24}, -{46,41,-23}, -{46,41,-22}, -{46,41,-21}, -{46,41,-20}, -{46,41,-19}, -{46,41,-18}, -{46,41,-17}, -{46,41,-16}, -{46,41,-15}, -{46,41,-14}, -{46,41,-13}, -{46,41,-12}, -{46,41,-11}, -{46,41,-10}, -{46,41,-9}, -{46,41,-8}, -{46,41,-7}, -{46,41,-6}, -{46,41,-5}, -{46,41,-4}, -{46,41,-3}, -{46,41,-2}, -{46,41,-1}, -{46,41,0}, -{46,41,1}, -{46,41,2}, -{46,41,3}, -{46,41,4}, -{46,41,5}, -{46,41,6}, -{46,41,7}, -{46,41,8}, -{46,41,9}, -{46,41,10}, -{46,41,11}, -{46,41,12}, -{46,41,13}, -{46,41,14}, -{46,41,15}, -{46,41,16}, -{46,41,17}, -{46,41,18}, -{46,41,19}, -{46,41,20}, -{46,41,21}, -{46,41,22}, -{46,41,23}, -{46,41,24}, -{46,41,25}, -{46,41,26}, -{46,41,27}, -{46,41,28}, -{46,41,29}, -{46,41,30}, -{46,41,31}, -{46,41,32}, -{46,41,33}, -{46,41,34}, -{46,41,35}, -{46,41,36}, -{46,41,37}, -{46,41,38}, -{46,41,39}, -{46,41,40}, -{46,41,41}, -{46,41,42}, -{46,41,43}, -{46,41,44}, -{46,41,45}, -{46,41,46}, -{46,41,47}, -{46,41,48}, -{46,41,49}, -{46,41,50}, -{46,41,51}, -{46,41,52}, -{46,41,53}, -{46,41,54}, -{46,41,55}, -{46,41,56}, -{46,42,-85}, -{46,42,-84}, -{46,42,-83}, -{46,42,-82}, -{46,42,-81}, -{46,42,-80}, -{46,42,-79}, -{46,42,-78}, -{46,42,-77}, -{46,42,-76}, -{46,42,-75}, -{46,42,-74}, -{46,42,-73}, -{46,42,-72}, -{46,42,-71}, -{46,42,-70}, -{46,42,-69}, -{46,42,-68}, -{46,42,-67}, -{46,42,-66}, -{46,42,-65}, -{46,42,-64}, -{46,42,-63}, -{46,42,-62}, -{46,42,-61}, -{46,42,-60}, -{46,42,-59}, -{46,42,-58}, -{46,42,-57}, -{46,42,-56}, -{46,42,-55}, -{46,42,-54}, -{46,42,-53}, -{46,42,-52}, -{46,42,-51}, -{46,42,-50}, -{46,42,-49}, -{46,42,-48}, -{46,42,-47}, -{46,42,-46}, -{46,42,-45}, -{46,42,-44}, -{46,42,-43}, -{46,42,-42}, -{46,42,-41}, -{46,42,-40}, -{46,42,-39}, -{46,42,-38}, -{46,42,-37}, -{46,42,-36}, -{46,42,-35}, -{46,42,-34}, -{46,42,-33}, -{46,42,-32}, -{46,42,-31}, -{46,42,-30}, -{46,42,-29}, -{46,42,-28}, -{46,42,-27}, -{46,42,-26}, -{46,42,-25}, -{46,42,-24}, -{46,42,-23}, -{46,42,-22}, -{46,42,-21}, -{46,42,-20}, -{46,42,-19}, -{46,42,-18}, -{46,42,-17}, -{46,42,-16}, -{46,42,-15}, -{46,42,-14}, -{46,42,-13}, -{46,42,-12}, -{46,42,-11}, -{46,42,-10}, -{46,42,-9}, -{46,42,-8}, -{46,42,-7}, -{46,42,-6}, -{46,42,-5}, -{46,42,-4}, -{46,42,-3}, -{46,42,-2}, -{46,42,-1}, -{46,42,0}, -{46,42,1}, -{46,42,2}, -{46,42,3}, -{46,42,4}, -{46,42,5}, -{46,42,6}, -{46,42,7}, -{46,42,8}, -{46,42,9}, -{46,42,10}, -{46,42,11}, -{46,42,12}, -{46,42,13}, -{46,42,14}, -{46,42,15}, -{46,42,16}, -{46,42,17}, -{46,42,18}, -{46,42,19}, -{46,42,20}, -{46,42,21}, -{46,42,22}, -{46,42,23}, -{46,42,24}, -{46,42,25}, -{46,42,26}, -{46,42,27}, -{46,42,28}, -{46,42,29}, -{46,42,30}, -{46,42,31}, -{46,42,32}, -{46,42,33}, -{46,42,34}, -{46,42,35}, -{46,42,36}, -{46,42,37}, -{46,42,38}, -{46,42,39}, -{46,42,40}, -{46,42,41}, -{46,42,42}, -{46,42,43}, -{46,42,44}, -{46,42,45}, -{46,42,46}, -{46,42,47}, -{46,42,48}, -{46,42,49}, -{46,42,50}, -{46,42,51}, -{46,42,52}, -{46,42,53}, -{46,42,54}, -{46,42,55}, -{46,42,56}, -{46,43,-85}, -{46,43,-84}, -{46,43,-83}, -{46,43,-82}, -{46,43,-81}, -{46,43,-80}, -{46,43,-79}, -{46,43,-78}, -{46,43,-77}, -{46,43,-76}, -{46,43,-75}, -{46,43,-74}, -{46,43,-73}, -{46,43,-72}, -{46,43,-71}, -{46,43,-70}, -{46,43,-69}, -{46,43,-68}, -{46,43,-67}, -{46,43,-66}, -{46,43,-65}, -{46,43,-64}, -{46,43,-63}, -{46,43,-62}, -{46,43,-61}, -{46,43,-60}, -{46,43,-59}, -{46,43,-58}, -{46,43,-57}, -{46,43,-56}, -{46,43,-55}, -{46,43,-54}, -{46,43,-53}, -{46,43,-52}, -{46,43,-51}, -{46,43,-50}, -{46,43,-49}, -{46,43,-48}, -{46,43,-47}, -{46,43,-46}, -{46,43,-45}, -{46,43,-44}, -{46,43,-43}, -{46,43,-42}, -{46,43,-41}, -{46,43,-40}, -{46,43,-39}, -{46,43,-38}, -{46,43,-37}, -{46,43,-36}, -{46,43,-35}, -{46,43,-34}, -{46,43,-33}, -{46,43,-32}, -{46,43,-31}, -{46,43,-30}, -{46,43,-29}, -{46,43,-28}, -{46,43,-27}, -{46,43,-26}, -{46,43,-25}, -{46,43,-24}, -{46,43,-23}, -{46,43,-22}, -{46,43,-21}, -{46,43,-20}, -{46,43,-19}, -{46,43,-18}, -{46,43,-17}, -{46,43,-16}, -{46,43,-15}, -{46,43,-14}, -{46,43,-13}, -{46,43,-12}, -{46,43,-11}, -{46,43,-10}, -{46,43,-9}, -{46,43,-8}, -{46,43,-7}, -{46,43,-6}, -{46,43,-5}, -{46,43,-4}, -{46,43,-3}, -{46,43,-2}, -{46,43,-1}, -{46,43,0}, -{46,43,1}, -{46,43,2}, -{46,43,3}, -{46,43,4}, -{46,43,5}, -{46,43,6}, -{46,43,7}, -{46,43,8}, -{46,43,9}, -{46,43,10}, -{46,43,11}, -{46,43,12}, -{46,43,13}, -{46,43,14}, -{46,43,15}, -{46,43,16}, -{46,43,17}, -{46,43,18}, -{46,43,19}, -{46,43,20}, -{46,43,21}, -{46,43,22}, -{46,43,23}, -{46,43,24}, -{46,43,25}, -{46,43,26}, -{46,43,27}, -{46,43,28}, -{46,43,29}, -{46,43,30}, -{46,43,31}, -{46,43,32}, -{46,43,33}, -{46,43,34}, -{46,43,35}, -{46,43,36}, -{46,43,37}, -{46,43,38}, -{46,43,39}, -{46,43,40}, -{46,43,41}, -{46,43,42}, -{46,43,43}, -{46,43,44}, -{46,43,45}, -{46,43,46}, -{46,43,47}, -{46,43,48}, -{46,43,49}, -{46,43,50}, -{46,43,51}, -{46,43,52}, -{46,43,53}, -{46,43,54}, -{46,43,55}, -{46,43,56}, -{46,44,-85}, -{46,44,-84}, -{46,44,-83}, -{46,44,-82}, -{46,44,-81}, -{46,44,-80}, -{46,44,-79}, -{46,44,-78}, -{46,44,-77}, -{46,44,-76}, -{46,44,-75}, -{46,44,-74}, -{46,44,-73}, -{46,44,-72}, -{46,44,-71}, -{46,44,-70}, -{46,44,-69}, -{46,44,-68}, -{46,44,-67}, -{46,44,-66}, -{46,44,-65}, -{46,44,-64}, -{46,44,-63}, -{46,44,-62}, -{46,44,-61}, -{46,44,-60}, -{46,44,-59}, -{46,44,-58}, -{46,44,-57}, -{46,44,-56}, -{46,44,-55}, -{46,44,-54}, -{46,44,-53}, -{46,44,-52}, -{46,44,-51}, -{46,44,-50}, -{46,44,-49}, -{46,44,-48}, -{46,44,-47}, -{46,44,-46}, -{46,44,-45}, -{46,44,-44}, -{46,44,-43}, -{46,44,-42}, -{46,44,-41}, -{46,44,-40}, -{46,44,-39}, -{46,44,-38}, -{46,44,-37}, -{46,44,-36}, -{46,44,-35}, -{46,44,-34}, -{46,44,-33}, -{46,44,-32}, -{46,44,-31}, -{46,44,-30}, -{46,44,-29}, -{46,44,-28}, -{46,44,-27}, -{46,44,-26}, -{46,44,-25}, -{46,44,-24}, -{46,44,-23}, -{46,44,-22}, -{46,44,-21}, -{46,44,-20}, -{46,44,-19}, -{46,44,-18}, -{46,44,-17}, -{46,44,-16}, -{46,44,-15}, -{46,44,-14}, -{46,44,-13}, -{46,44,-12}, -{46,44,-11}, -{46,44,-10}, -{46,44,-9}, -{46,44,-8}, -{46,44,-7}, -{46,44,-6}, -{46,44,-5}, -{46,44,-4}, -{46,44,-3}, -{46,44,-2}, -{46,44,-1}, -{46,44,0}, -{46,44,1}, -{46,44,2}, -{46,44,3}, -{46,44,4}, -{46,44,5}, -{46,44,6}, -{46,44,7}, -{46,44,8}, -{46,44,9}, -{46,44,10}, -{46,44,11}, -{46,44,12}, -{46,44,13}, -{46,44,14}, -{46,44,15}, -{46,44,16}, -{46,44,17}, -{46,44,18}, -{46,44,19}, -{46,44,20}, -{46,44,21}, -{46,44,22}, -{46,44,23}, -{46,44,24}, -{46,44,25}, -{46,44,26}, -{46,44,27}, -{46,44,28}, -{46,44,29}, -{46,44,30}, -{46,44,31}, -{46,44,32}, -{46,44,33}, -{46,44,34}, -{46,44,35}, -{46,44,36}, -{46,44,37}, -{46,44,38}, -{46,44,39}, -{46,44,40}, -{46,44,41}, -{46,44,42}, -{46,44,43}, -{46,44,44}, -{46,44,45}, -{46,44,46}, -{46,44,47}, -{46,44,48}, -{46,44,49}, -{46,44,50}, -{46,44,51}, -{46,44,52}, -{46,44,53}, -{46,44,54}, -{46,44,55}, -{46,44,56}, -{46,45,-85}, -{46,45,-84}, -{46,45,-83}, -{46,45,-82}, -{46,45,-81}, -{46,45,-80}, -{46,45,-79}, -{46,45,-78}, -{46,45,-77}, -{46,45,-76}, -{46,45,-75}, -{46,45,-74}, -{46,45,-73}, -{46,45,-72}, -{46,45,-71}, -{46,45,-70}, -{46,45,-69}, -{46,45,-68}, -{46,45,-67}, -{46,45,-66}, -{46,45,-65}, -{46,45,-64}, -{46,45,-63}, -{46,45,-62}, -{46,45,-61}, -{46,45,-60}, -{46,45,-59}, -{46,45,-58}, -{46,45,-57}, -{46,45,-56}, -{46,45,-55}, -{46,45,-54}, -{46,45,-53}, -{46,45,-52}, -{46,45,-51}, -{46,45,-50}, -{46,45,-49}, -{46,45,-48}, -{46,45,-47}, -{46,45,-46}, -{46,45,-45}, -{46,45,-44}, -{46,45,-43}, -{46,45,-42}, -{46,45,-41}, -{46,45,-40}, -{46,45,-39}, -{46,45,-38}, -{46,45,-37}, -{46,45,-36}, -{46,45,-35}, -{46,45,-34}, -{46,45,-33}, -{46,45,-32}, -{46,45,-31}, -{46,45,-30}, -{46,45,-29}, -{46,45,-28}, -{46,45,-27}, -{46,45,-26}, -{46,45,-25}, -{46,45,-24}, -{46,45,-23}, -{46,45,-22}, -{46,45,-21}, -{46,45,-20}, -{46,45,-19}, -{46,45,-18}, -{46,45,-17}, -{46,45,-16}, -{46,45,-15}, -{46,45,-14}, -{46,45,-13}, -{46,45,-12}, -{46,45,-11}, -{46,45,-10}, -{46,45,-9}, -{46,45,-8}, -{46,45,-7}, -{46,45,-6}, -{46,45,-5}, -{46,45,-4}, -{46,45,-3}, -{46,45,-2}, -{46,45,-1}, -{46,45,0}, -{46,45,1}, -{46,45,2}, -{46,45,3}, -{46,45,4}, -{46,45,5}, -{46,45,6}, -{46,45,7}, -{46,45,8}, -{46,45,9}, -{46,45,10}, -{46,45,11}, -{46,45,12}, -{46,45,13}, -{46,45,14}, -{46,45,15}, -{46,45,16}, -{46,45,17}, -{46,45,18}, -{46,45,19}, -{46,45,20}, -{46,45,21}, -{46,45,22}, -{46,45,23}, -{46,45,24}, -{46,45,25}, -{46,45,26}, -{46,45,27}, -{46,45,28}, -{46,45,29}, -{46,45,30}, -{46,45,31}, -{46,45,32}, -{46,45,33}, -{46,45,34}, -{46,45,35}, -{46,45,36}, -{46,45,37}, -{46,45,38}, -{46,45,39}, -{46,45,40}, -{46,45,41}, -{46,45,42}, -{46,45,43}, -{46,45,44}, -{46,45,45}, -{46,45,46}, -{46,45,47}, -{46,45,48}, -{46,45,49}, -{46,45,50}, -{46,45,51}, -{46,45,52}, -{46,45,53}, -{46,45,54}, -{46,45,55}, -{46,45,56}, -{46,46,-85}, -{46,46,-84}, -{46,46,-83}, -{46,46,-82}, -{46,46,-81}, -{46,46,-80}, -{46,46,-79}, -{46,46,-78}, -{46,46,-77}, -{46,46,-76}, -{46,46,-75}, -{46,46,-74}, -{46,46,-73}, -{46,46,-72}, -{46,46,-71}, -{46,46,-70}, -{46,46,-69}, -{46,46,-68}, -{46,46,-67}, -{46,46,-66}, -{46,46,-65}, -{46,46,-64}, -{46,46,-63}, -{46,46,-62}, -{46,46,-61}, -{46,46,-60}, -{46,46,-59}, -{46,46,-58}, -{46,46,-57}, -{46,46,-56}, -{46,46,-55}, -{46,46,-54}, -{46,46,-53}, -{46,46,-52}, -{46,46,-51}, -{46,46,-50}, -{46,46,-49}, -{46,46,-48}, -{46,46,-47}, -{46,46,-46}, -{46,46,-45}, -{46,46,-44}, -{46,46,-43}, -{46,46,-42}, -{46,46,-41}, -{46,46,-40}, -{46,46,-39}, -{46,46,-38}, -{46,46,-37}, -{46,46,-36}, -{46,46,-35}, -{46,46,-34}, -{46,46,-33}, -{46,46,-32}, -{46,46,-31}, -{46,46,-30}, -{46,46,-29}, -{46,46,-28}, -{46,46,-27}, -{46,46,-26}, -{46,46,-25}, -{46,46,-24}, -{46,46,-23}, -{46,46,-22}, -{46,46,-21}, -{46,46,-20}, -{46,46,-19}, -{46,46,-18}, -{46,46,-17}, -{46,46,-16}, -{46,46,-15}, -{46,46,-14}, -{46,46,-13}, -{46,46,-12}, -{46,46,-11}, -{46,46,-10}, -{46,46,-9}, -{46,46,-8}, -{46,46,-7}, -{46,46,-6}, -{46,46,-5}, -{46,46,-4}, -{46,46,-3}, -{46,46,-2}, -{46,46,-1}, -{46,46,0}, -{46,46,1}, -{46,46,2}, -{46,46,3}, -{46,46,4}, -{46,46,5}, -{46,46,6}, -{46,46,7}, -{46,46,8}, -{46,46,9}, -{46,46,10}, -{46,46,11}, -{46,46,12}, -{46,46,13}, -{46,46,14}, -{46,46,15}, -{46,46,16}, -{46,46,17}, -{46,46,18}, -{46,46,19}, -{46,46,20}, -{46,46,21}, -{46,46,22}, -{46,46,23}, -{46,46,24}, -{46,46,25}, -{46,46,26}, -{46,46,27}, -{46,46,28}, -{46,46,29}, -{46,46,30}, -{46,46,31}, -{46,46,32}, -{46,46,33}, -{46,46,34}, -{46,46,35}, -{46,46,36}, -{46,46,37}, -{46,46,38}, -{46,46,39}, -{46,46,40}, -{46,46,41}, -{46,46,42}, -{46,46,43}, -{46,46,44}, -{46,46,45}, -{46,46,46}, -{46,46,47}, -{46,46,48}, -{46,46,49}, -{46,46,50}, -{46,46,51}, -{46,46,52}, -{46,46,53}, -{46,46,54}, -{46,46,55}, -{46,46,56}, -{46,47,-85}, -{46,47,-84}, -{46,47,-83}, -{46,47,-82}, -{46,47,-81}, -{46,47,-80}, -{46,47,-79}, -{46,47,-78}, -{46,47,-77}, -{46,47,-76}, -{46,47,-75}, -{46,47,-74}, -{46,47,-73}, -{46,47,-72}, -{46,47,-71}, -{46,47,-70}, -{46,47,-69}, -{46,47,-68}, -{46,47,-67}, -{46,47,-66}, -{46,47,-65}, -{46,47,-64}, -{46,47,-63}, -{46,47,-62}, -{46,47,-61}, -{46,47,-60}, -{46,47,-59}, -{46,47,-58}, -{46,47,-57}, -{46,47,-56}, -{46,47,-55}, -{46,47,-54}, -{46,47,-53}, -{46,47,-52}, -{46,47,-51}, -{46,47,-50}, -{46,47,-49}, -{46,47,-48}, -{46,47,-47}, -{46,47,-46}, -{46,47,-45}, -{46,47,-44}, -{46,47,-43}, -{46,47,-42}, -{46,47,-41}, -{46,47,-40}, -{46,47,-39}, -{46,47,-38}, -{46,47,-37}, -{46,47,-36}, -{46,47,-35}, -{46,47,-34}, -{46,47,-33}, -{46,47,-32}, -{46,47,-31}, -{46,47,-30}, -{46,47,-29}, -{46,47,-28}, -{46,47,-27}, -{46,47,-26}, -{46,47,-25}, -{46,47,-24}, -{46,47,-23}, -{46,47,-22}, -{46,47,-21}, -{46,47,-20}, -{46,47,-19}, -{46,47,-18}, -{46,47,-17}, -{46,47,-16}, -{46,47,-15}, -{46,47,-14}, -{46,47,-13}, -{46,47,-12}, -{46,47,-11}, -{46,47,-10}, -{46,47,-9}, -{46,47,-8}, -{46,47,-7}, -{46,47,-6}, -{46,47,-5}, -{46,47,-4}, -{46,47,-3}, -{46,47,-2}, -{46,47,-1}, -{46,47,0}, -{46,47,1}, -{46,47,2}, -{46,47,3}, -{46,47,4}, -{46,47,5}, -{46,47,6}, -{46,47,7}, -{46,47,8}, -{46,47,9}, -{46,47,10}, -{46,47,11}, -{46,47,12}, -{46,47,13}, -{46,47,14}, -{46,47,15}, -{46,47,16}, -{46,47,17}, -{46,47,18}, -{46,47,19}, -{46,47,20}, -{46,47,21}, -{46,47,22}, -{46,47,23}, -{46,47,24}, -{46,47,25}, -{46,47,26}, -{46,47,27}, -{46,47,28}, -{46,47,29}, -{46,47,30}, -{46,47,31}, -{46,47,32}, -{46,47,33}, -{46,47,34}, -{46,47,35}, -{46,47,36}, -{46,47,37}, -{46,47,38}, -{46,47,39}, -{46,47,40}, -{46,47,41}, -{46,47,42}, -{46,47,43}, -{46,47,44}, -{46,47,45}, -{46,47,46}, -{46,47,47}, -{46,47,48}, -{46,47,49}, -{46,47,50}, -{46,47,51}, -{46,47,52}, -{46,47,53}, -{46,47,54}, -{46,47,55}, -{46,47,56}, -{46,47,57}, -{46,48,-85}, -{46,48,-84}, -{46,48,-83}, -{46,48,-82}, -{46,48,-81}, -{46,48,-80}, -{46,48,-79}, -{46,48,-78}, -{46,48,-77}, -{46,48,-76}, -{46,48,-75}, -{46,48,-74}, -{46,48,-73}, -{46,48,-72}, -{46,48,-71}, -{46,48,-70}, -{46,48,-69}, -{46,48,-68}, -{46,48,-67}, -{46,48,-66}, -{46,48,-65}, -{46,48,-64}, -{46,48,-63}, -{46,48,-62}, -{46,48,-61}, -{46,48,-60}, -{46,48,-59}, -{46,48,-58}, -{46,48,-57}, -{46,48,-56}, -{46,48,-55}, -{46,48,-54}, -{46,48,-53}, -{46,48,-52}, -{46,48,-51}, -{46,48,-50}, -{46,48,-49}, -{46,48,-48}, -{46,48,-47}, -{46,48,-46}, -{46,48,-45}, -{46,48,-44}, -{46,48,-43}, -{46,48,-42}, -{46,48,-41}, -{46,48,-40}, -{46,48,-39}, -{46,48,-38}, -{46,48,-37}, -{46,48,-36}, -{46,48,-35}, -{46,48,-34}, -{46,48,-33}, -{46,48,-32}, -{46,48,-31}, -{46,48,-30}, -{46,48,-29}, -{46,48,-28}, -{46,48,-27}, -{46,48,-26}, -{46,48,-25}, -{46,48,-24}, -{46,48,-23}, -{46,48,-22}, -{46,48,-21}, -{46,48,-20}, -{46,48,-19}, -{46,48,-18}, -{46,48,-17}, -{46,48,-16}, -{46,48,-15}, -{46,48,-14}, -{46,48,-13}, -{46,48,-12}, -{46,48,-11}, -{46,48,-10}, -{46,48,-9}, -{46,48,-8}, -{46,48,-7}, -{46,48,-6}, -{46,48,-5}, -{46,48,-4}, -{46,48,-3}, -{46,48,-2}, -{46,48,-1}, -{46,48,0}, -{46,48,1}, -{46,48,2}, -{46,48,3}, -{46,48,4}, -{46,48,5}, -{46,48,6}, -{46,48,7}, -{46,48,8}, -{46,48,9}, -{46,48,10}, -{46,48,11}, -{46,48,12}, -{46,48,13}, -{46,48,14}, -{46,48,15}, -{46,48,16}, -{46,48,17}, -{46,48,18}, -{46,48,19}, -{46,48,20}, -{46,48,21}, -{46,48,22}, -{46,48,23}, -{46,48,24}, -{46,48,25}, -{46,48,26}, -{46,48,27}, -{46,48,28}, -{46,48,29}, -{46,48,30}, -{46,48,31}, -{46,48,32}, -{46,48,33}, -{46,48,34}, -{46,48,35}, -{46,48,36}, -{46,48,37}, -{46,48,38}, -{46,48,39}, -{46,48,40}, -{46,48,41}, -{46,48,42}, -{46,48,43}, -{46,48,44}, -{46,48,45}, -{46,48,46}, -{46,48,47}, -{46,48,48}, -{46,48,49}, -{46,48,50}, -{46,48,51}, -{46,48,52}, -{46,48,53}, -{46,48,54}, -{46,48,55}, -{46,48,56}, -{46,48,57}, -{46,49,-85}, -{46,49,-84}, -{46,49,-83}, -{46,49,-82}, -{46,49,-81}, -{46,49,-80}, -{46,49,-79}, -{46,49,-78}, -{46,49,-77}, -{46,49,-76}, -{46,49,-75}, -{46,49,-74}, -{46,49,-73}, -{46,49,-72}, -{46,49,-71}, -{46,49,-70}, -{46,49,-69}, -{46,49,-68}, -{46,49,-67}, -{46,49,-66}, -{46,49,-65}, -{46,49,-64}, -{46,49,-63}, -{46,49,-62}, -{46,49,-61}, -{46,49,-60}, -{46,49,-59}, -{46,49,-58}, -{46,49,-57}, -{46,49,-56}, -{46,49,-55}, -{46,49,-54}, -{46,49,-53}, -{46,49,-52}, -{46,49,-51}, -{46,49,-50}, -{46,49,-49}, -{46,49,-48}, -{46,49,-47}, -{46,49,-46}, -{46,49,-45}, -{46,49,-44}, -{46,49,-43}, -{46,49,-42}, -{46,49,-41}, -{46,49,-40}, -{46,49,-39}, -{46,49,-38}, -{46,49,-37}, -{46,49,-36}, -{46,49,-35}, -{46,49,-34}, -{46,49,-33}, -{46,49,-32}, -{46,49,-31}, -{46,49,-30}, -{46,49,-29}, -{46,49,-28}, -{46,49,-27}, -{46,49,-26}, -{46,49,-25}, -{46,49,-24}, -{46,49,-23}, -{46,49,-22}, -{46,49,-21}, -{46,49,-20}, -{46,49,-19}, -{46,49,-18}, -{46,49,-17}, -{46,49,-16}, -{46,49,-15}, -{46,49,-14}, -{46,49,-13}, -{46,49,-12}, -{46,49,-11}, -{46,49,-10}, -{46,49,-9}, -{46,49,-8}, -{46,49,-7}, -{46,49,-6}, -{46,49,-5}, -{46,49,-4}, -{46,49,-3}, -{46,49,-2}, -{46,49,-1}, -{46,49,0}, -{46,49,1}, -{46,49,2}, -{46,49,3}, -{46,49,4}, -{46,49,5}, -{46,49,6}, -{46,49,7}, -{46,49,8}, -{46,49,9}, -{46,49,10}, -{46,49,11}, -{46,49,12}, -{46,49,13}, -{46,49,14}, -{46,49,15}, -{46,49,16}, -{46,49,17}, -{46,49,18}, -{46,49,19}, -{46,49,20}, -{46,49,21}, -{46,49,22}, -{46,49,23}, -{46,49,24}, -{46,49,25}, -{46,49,26}, -{46,49,27}, -{46,49,28}, -{46,49,29}, -{46,49,30}, -{46,49,31}, -{46,49,32}, -{46,49,33}, -{46,49,34}, -{46,49,35}, -{46,49,36}, -{46,49,37}, -{46,49,38}, -{46,49,39}, -{46,49,40}, -{46,49,41}, -{46,49,42}, -{46,49,43}, -{46,49,44}, -{46,49,45}, -{46,49,46}, -{46,49,47}, -{46,49,48}, -{46,49,49}, -{46,49,50}, -{46,49,51}, -{46,49,52}, -{46,49,53}, -{46,49,54}, -{46,49,55}, -{46,49,56}, -{46,49,57}, -{46,50,-85}, -{46,50,-84}, -{46,50,-83}, -{46,50,-82}, -{46,50,-81}, -{46,50,-80}, -{46,50,-79}, -{46,50,-78}, -{46,50,-77}, -{46,50,-76}, -{46,50,-75}, -{46,50,-74}, -{46,50,-73}, -{46,50,-72}, -{46,50,-71}, -{46,50,-70}, -{46,50,-69}, -{46,50,-68}, -{46,50,-67}, -{46,50,-66}, -{46,50,-65}, -{46,50,-64}, -{46,50,-63}, -{46,50,-62}, -{46,50,-61}, -{46,50,-60}, -{46,50,-59}, -{46,50,-58}, -{46,50,-57}, -{46,50,-56}, -{46,50,-55}, -{46,50,-54}, -{46,50,-53}, -{46,50,-52}, -{46,50,-51}, -{46,50,-50}, -{46,50,-49}, -{46,50,-48}, -{46,50,-47}, -{46,50,-46}, -{46,50,-45}, -{46,50,-44}, -{46,50,-43}, -{46,50,-42}, -{46,50,-41}, -{46,50,-40}, -{46,50,-39}, -{46,50,-38}, -{46,50,-37}, -{46,50,-36}, -{46,50,-35}, -{46,50,-34}, -{46,50,-33}, -{46,50,-32}, -{46,50,-31}, -{46,50,-30}, -{46,50,-29}, -{46,50,-28}, -{46,50,-27}, -{46,50,-26}, -{46,50,-25}, -{46,50,-24}, -{46,50,-23}, -{46,50,-22}, -{46,50,-21}, -{46,50,-20}, -{46,50,-19}, -{46,50,-18}, -{46,50,-17}, -{46,50,-16}, -{46,50,-15}, -{46,50,-14}, -{46,50,-13}, -{46,50,-12}, -{46,50,-11}, -{46,50,-10}, -{46,50,-9}, -{46,50,-8}, -{46,50,-7}, -{46,50,-6}, -{46,50,-5}, -{46,50,-4}, -{46,50,-3}, -{46,50,-2}, -{46,50,-1}, -{46,50,0}, -{46,50,1}, -{46,50,2}, -{46,50,3}, -{46,50,4}, -{46,50,5}, -{46,50,6}, -{46,50,7}, -{46,50,8}, -{46,50,9}, -{46,50,10}, -{46,50,11}, -{46,50,12}, -{46,50,13}, -{46,50,14}, -{46,50,15}, -{46,50,16}, -{46,50,17}, -{46,50,18}, -{46,50,19}, -{46,50,20}, -{46,50,21}, -{46,50,22}, -{46,50,23}, -{46,50,24}, -{46,50,25}, -{46,50,26}, -{46,50,27}, -{46,50,28}, -{46,50,29}, -{46,50,30}, -{46,50,31}, -{46,50,32}, -{46,50,33}, -{46,50,34}, -{46,50,35}, -{46,50,36}, -{46,50,37}, -{46,50,38}, -{46,50,39}, -{46,50,40}, -{46,50,41}, -{46,50,42}, -{46,50,43}, -{46,50,44}, -{46,50,45}, -{46,50,46}, -{46,50,47}, -{46,50,48}, -{46,50,49}, -{46,50,50}, -{46,50,51}, -{46,50,52}, -{46,50,53}, -{46,50,54}, -{46,50,55}, -{46,50,56}, -{46,50,57}, -{46,51,-85}, -{46,51,-84}, -{46,51,-83}, -{46,51,-82}, -{46,51,-81}, -{46,51,-80}, -{46,51,-79}, -{46,51,-78}, -{46,51,-77}, -{46,51,-76}, -{46,51,-75}, -{46,51,-74}, -{46,51,-73}, -{46,51,-72}, -{46,51,-71}, -{46,51,-70}, -{46,51,-69}, -{46,51,-68}, -{46,51,-67}, -{46,51,-66}, -{46,51,-65}, -{46,51,-64}, -{46,51,-63}, -{46,51,-62}, -{46,51,-61}, -{46,51,-60}, -{46,51,-59}, -{46,51,-58}, -{46,51,-57}, -{46,51,-56}, -{46,51,-55}, -{46,51,-54}, -{46,51,-53}, -{46,51,-52}, -{46,51,-51}, -{46,51,-50}, -{46,51,-49}, -{46,51,-48}, -{46,51,-47}, -{46,51,-46}, -{46,51,-45}, -{46,51,-44}, -{46,51,-43}, -{46,51,-42}, -{46,51,-41}, -{46,51,-40}, -{46,51,-39}, -{46,51,-38}, -{46,51,-37}, -{46,51,-36}, -{46,51,-35}, -{46,51,-34}, -{46,51,-33}, -{46,51,-32}, -{46,51,-31}, -{46,51,-30}, -{46,51,-29}, -{46,51,-28}, -{46,51,-27}, -{46,51,-26}, -{46,51,-25}, -{46,51,-24}, -{46,51,-23}, -{46,51,-22}, -{46,51,-21}, -{46,51,-20}, -{46,51,-19}, -{46,51,-18}, -{46,51,-17}, -{46,51,-16}, -{46,51,-15}, -{46,51,-14}, -{46,51,-13}, -{46,51,-12}, -{46,51,-11}, -{46,51,-10}, -{46,51,-9}, -{46,51,-8}, -{46,51,-7}, -{46,51,-6}, -{46,51,-5}, -{46,51,-4}, -{46,51,-3}, -{46,51,-2}, -{46,51,-1}, -{46,51,0}, -{46,51,1}, -{46,51,2}, -{46,51,3}, -{46,51,4}, -{46,51,5}, -{46,51,6}, -{46,51,7}, -{46,51,8}, -{46,51,9}, -{46,51,10}, -{46,51,11}, -{46,51,12}, -{46,51,13}, -{46,51,14}, -{46,51,15}, -{46,51,16}, -{46,51,17}, -{46,51,18}, -{46,51,19}, -{46,51,20}, -{46,51,21}, -{46,51,22}, -{46,51,23}, -{46,51,24}, -{46,51,25}, -{46,51,26}, -{46,51,27}, -{46,51,28}, -{46,51,29}, -{46,51,30}, -{46,51,31}, -{46,51,32}, -{46,51,33}, -{46,51,34}, -{46,51,35}, -{46,51,36}, -{46,51,37}, -{46,51,38}, -{46,51,39}, -{46,51,40}, -{46,51,41}, -{46,51,42}, -{46,51,43}, -{46,51,44}, -{46,51,45}, -{46,51,46}, -{46,51,47}, -{46,51,48}, -{46,51,49}, -{46,51,50}, -{46,51,51}, -{46,51,52}, -{46,51,53}, -{46,51,54}, -{46,51,55}, -{46,51,56}, -{46,51,57}, -{46,52,-85}, -{46,52,-84}, -{46,52,-83}, -{46,52,-82}, -{46,52,-81}, -{46,52,-80}, -{46,52,-79}, -{46,52,-78}, -{46,52,-77}, -{46,52,-76}, -{46,52,-75}, -{46,52,-74}, -{46,52,-73}, -{46,52,-72}, -{46,52,-71}, -{46,52,-70}, -{46,52,-69}, -{46,52,-68}, -{46,52,-67}, -{46,52,-66}, -{46,52,-65}, -{46,52,-64}, -{46,52,-63}, -{46,52,-62}, -{46,52,-61}, -{46,52,-60}, -{46,52,-59}, -{46,52,-58}, -{46,52,-57}, -{46,52,-56}, -{46,52,-55}, -{46,52,-54}, -{46,52,-53}, -{46,52,-52}, -{46,52,-51}, -{46,52,-50}, -{46,52,-49}, -{46,52,-48}, -{46,52,-47}, -{46,52,-46}, -{46,52,-45}, -{46,52,-44}, -{46,52,-43}, -{46,52,-42}, -{46,52,-41}, -{46,52,-40}, -{46,52,-39}, -{46,52,-38}, -{46,52,-37}, -{46,52,-36}, -{46,52,-35}, -{46,52,-34}, -{46,52,-33}, -{46,52,-32}, -{46,52,-31}, -{46,52,-30}, -{46,52,-29}, -{46,52,-28}, -{46,52,-27}, -{46,52,-26}, -{46,52,-25}, -{46,52,-24}, -{46,52,-23}, -{46,52,-22}, -{46,52,-21}, -{46,52,-20}, -{46,52,-19}, -{46,52,-18}, -{46,52,-17}, -{46,52,-16}, -{46,52,-15}, -{46,52,-14}, -{46,52,-13}, -{46,52,-12}, -{46,52,-11}, -{46,52,-10}, -{46,52,-9}, -{46,52,-8}, -{46,52,-7}, -{46,52,-6}, -{46,52,-5}, -{46,52,-4}, -{46,52,-3}, -{46,52,-2}, -{46,52,-1}, -{46,52,0}, -{46,52,1}, -{46,52,2}, -{46,52,3}, -{46,52,4}, -{46,52,5}, -{46,52,6}, -{46,52,7}, -{46,52,8}, -{46,52,9}, -{46,52,10}, -{46,52,11}, -{46,52,12}, -{46,52,13}, -{46,52,14}, -{46,52,15}, -{46,52,16}, -{46,52,17}, -{46,52,18}, -{46,52,19}, -{46,52,20}, -{46,52,21}, -{46,52,22}, -{46,52,23}, -{46,52,24}, -{46,52,25}, -{46,52,26}, -{46,52,27}, -{46,52,28}, -{46,52,29}, -{46,52,30}, -{46,52,31}, -{46,52,32}, -{46,52,33}, -{46,52,34}, -{46,52,35}, -{46,52,36}, -{46,52,37}, -{46,52,38}, -{46,52,39}, -{46,52,40}, -{46,52,41}, -{46,52,42}, -{46,52,43}, -{46,52,44}, -{46,52,45}, -{46,52,46}, -{46,52,47}, -{46,52,48}, -{46,52,49}, -{46,52,50}, -{46,52,51}, -{46,52,52}, -{46,52,53}, -{46,52,54}, -{46,52,55}, -{46,52,56}, -{46,52,57}, -{46,53,-85}, -{46,53,-84}, -{46,53,-83}, -{46,53,-82}, -{46,53,-81}, -{46,53,-80}, -{46,53,-79}, -{46,53,-78}, -{46,53,-77}, -{46,53,-76}, -{46,53,-75}, -{46,53,-74}, -{46,53,-73}, -{46,53,-72}, -{46,53,-71}, -{46,53,-70}, -{46,53,-69}, -{46,53,-68}, -{46,53,-67}, -{46,53,-66}, -{46,53,-65}, -{46,53,-64}, -{46,53,-63}, -{46,53,-62}, -{46,53,-61}, -{46,53,-60}, -{46,53,-59}, -{46,53,-58}, -{46,53,-57}, -{46,53,-56}, -{46,53,-55}, -{46,53,-54}, -{46,53,-53}, -{46,53,-52}, -{46,53,-51}, -{46,53,-50}, -{46,53,-49}, -{46,53,-48}, -{46,53,-47}, -{46,53,-46}, -{46,53,-45}, -{46,53,-44}, -{46,53,-43}, -{46,53,-42}, -{46,53,-41}, -{46,53,-40}, -{46,53,-39}, -{46,53,-38}, -{46,53,-37}, -{46,53,-36}, -{46,53,-35}, -{46,53,-34}, -{46,53,-33}, -{46,53,-32}, -{46,53,-31}, -{46,53,-30}, -{46,53,-29}, -{46,53,-28}, -{46,53,-27}, -{46,53,-26}, -{46,53,-25}, -{46,53,-24}, -{46,53,-23}, -{46,53,-22}, -{46,53,-21}, -{46,53,-20}, -{46,53,-19}, -{46,53,-18}, -{46,53,-17}, -{46,53,-16}, -{46,53,-15}, -{46,53,-14}, -{46,53,-13}, -{46,53,-12}, -{46,53,-11}, -{46,53,-10}, -{46,53,-9}, -{46,53,-8}, -{46,53,-7}, -{46,53,-6}, -{46,53,-5}, -{46,53,-4}, -{46,53,-3}, -{46,53,-2}, -{46,53,-1}, -{46,53,0}, -{46,53,1}, -{46,53,2}, -{46,53,3}, -{46,53,4}, -{46,53,5}, -{46,53,6}, -{46,53,7}, -{46,53,8}, -{46,53,9}, -{46,53,10}, -{46,53,11}, -{46,53,12}, -{46,53,13}, -{46,53,14}, -{46,53,15}, -{46,53,16}, -{46,53,17}, -{46,53,18}, -{46,53,19}, -{46,53,20}, -{46,53,21}, -{46,53,22}, -{46,53,23}, -{46,53,24}, -{46,53,25}, -{46,53,26}, -{46,53,27}, -{46,53,28}, -{46,53,29}, -{46,53,30}, -{46,53,31}, -{46,53,32}, -{46,53,33}, -{46,53,34}, -{46,53,35}, -{46,53,36}, -{46,53,37}, -{46,53,38}, -{46,53,39}, -{46,53,40}, -{46,53,41}, -{46,53,42}, -{46,53,43}, -{46,53,44}, -{46,53,45}, -{46,53,46}, -{46,53,47}, -{46,53,48}, -{46,53,49}, -{46,53,50}, -{46,53,51}, -{46,53,52}, -{46,53,53}, -{46,53,54}, -{46,53,55}, -{46,53,56}, -{46,53,57}, -{46,54,-85}, -{46,54,-84}, -{46,54,-83}, -{46,54,-82}, -{46,54,-81}, -{46,54,-80}, -{46,54,-79}, -{46,54,-78}, -{46,54,-77}, -{46,54,-76}, -{46,54,-75}, -{46,54,-74}, -{46,54,-73}, -{46,54,-72}, -{46,54,-71}, -{46,54,-70}, -{46,54,-69}, -{46,54,-68}, -{46,54,-67}, -{46,54,-66}, -{46,54,-65}, -{46,54,-64}, -{46,54,-63}, -{46,54,-62}, -{46,54,-61}, -{46,54,-60}, -{46,54,-59}, -{46,54,-58}, -{46,54,-57}, -{46,54,-56}, -{46,54,-55}, -{46,54,-54}, -{46,54,-53}, -{46,54,-52}, -{46,54,-51}, -{46,54,-50}, -{46,54,-49}, -{46,54,-48}, -{46,54,-47}, -{46,54,-46}, -{46,54,-45}, -{46,54,-44}, -{46,54,-43}, -{46,54,-42}, -{46,54,-41}, -{46,54,-40}, -{46,54,-39}, -{46,54,-38}, -{46,54,-37}, -{46,54,-36}, -{46,54,-35}, -{46,54,-34}, -{46,54,-33}, -{46,54,-32}, -{46,54,-31}, -{46,54,-30}, -{46,54,-29}, -{46,54,-28}, -{46,54,-27}, -{46,54,-26}, -{46,54,-25}, -{46,54,-24}, -{46,54,-23}, -{46,54,-22}, -{46,54,-21}, -{46,54,-20}, -{46,54,-19}, -{46,54,-18}, -{46,54,-17}, -{46,54,-16}, -{46,54,-15}, -{46,54,-14}, -{46,54,-13}, -{46,54,-12}, -{46,54,-11}, -{46,54,-10}, -{46,54,-9}, -{46,54,-8}, -{46,54,-7}, -{46,54,-6}, -{46,54,-5}, -{46,54,-4}, -{46,54,-3}, -{46,54,-2}, -{46,54,-1}, -{46,54,0}, -{46,54,1}, -{46,54,2}, -{46,54,3}, -{46,54,4}, -{46,54,5}, -{46,54,6}, -{46,54,7}, -{46,54,8}, -{46,54,9}, -{46,54,10}, -{46,54,11}, -{46,54,12}, -{46,54,13}, -{46,54,14}, -{46,54,15}, -{46,54,16}, -{46,54,17}, -{46,54,18}, -{46,54,19}, -{46,54,20}, -{46,54,21}, -{46,54,22}, -{46,54,23}, -{46,54,24}, -{46,54,25}, -{46,54,26}, -{46,54,27}, -{46,54,28}, -{46,54,29}, -{46,54,30}, -{46,54,31}, -{46,54,32}, -{46,54,33}, -{46,54,34}, -{46,54,35}, -{46,54,36}, -{46,54,37}, -{46,54,38}, -{46,54,39}, -{46,54,40}, -{46,54,41}, -{46,54,42}, -{46,54,43}, -{46,54,44}, -{46,54,45}, -{46,54,46}, -{46,54,47}, -{46,54,48}, -{46,54,49}, -{46,54,50}, -{46,54,51}, -{46,54,52}, -{46,54,53}, -{46,54,54}, -{46,54,55}, -{46,54,56}, -{46,54,57}, -{46,55,-85}, -{46,55,-84}, -{46,55,-83}, -{46,55,-82}, -{46,55,-81}, -{46,55,-80}, -{46,55,-79}, -{46,55,-78}, -{46,55,-77}, -{46,55,-76}, -{46,55,-75}, -{46,55,-74}, -{46,55,-73}, -{46,55,-72}, -{46,55,-71}, -{46,55,-70}, -{46,55,-69}, -{46,55,-68}, -{46,55,-67}, -{46,55,-66}, -{46,55,-65}, -{46,55,-64}, -{46,55,-63}, -{46,55,-62}, -{46,55,-61}, -{46,55,-60}, -{46,55,-59}, -{46,55,-58}, -{46,55,-57}, -{46,55,-56}, -{46,55,-55}, -{46,55,-54}, -{46,55,-53}, -{46,55,-52}, -{46,55,-51}, -{46,55,-50}, -{46,55,-49}, -{46,55,-48}, -{46,55,-47}, -{46,55,-46}, -{46,55,-45}, -{46,55,-44}, -{46,55,-43}, -{46,55,-42}, -{46,55,-41}, -{46,55,-40}, -{46,55,-39}, -{46,55,-38}, -{46,55,-37}, -{46,55,-36}, -{46,55,-35}, -{46,55,-34}, -{46,55,-33}, -{46,55,-32}, -{46,55,-31}, -{46,55,-30}, -{46,55,-29}, -{46,55,-28}, -{46,55,-27}, -{46,55,-26}, -{46,55,-25}, -{46,55,-24}, -{46,55,-23}, -{46,55,-22}, -{46,55,-21}, -{46,55,-20}, -{46,55,-19}, -{46,55,-18}, -{46,55,-17}, -{46,55,-16}, -{46,55,-15}, -{46,55,-14}, -{46,55,-13}, -{46,55,-12}, -{46,55,-11}, -{46,55,-10}, -{46,55,-9}, -{46,55,-8}, -{46,55,-7}, -{46,55,-6}, -{46,55,-5}, -{46,55,-4}, -{46,55,-3}, -{46,55,-2}, -{46,55,-1}, -{46,55,0}, -{46,55,1}, -{46,55,2}, -{46,55,3}, -{46,55,4}, -{46,55,5}, -{46,55,6}, -{46,55,7}, -{46,55,8}, -{46,55,9}, -{46,55,10}, -{46,55,11}, -{46,55,12}, -{46,55,13}, -{46,55,14}, -{46,55,15}, -{46,55,16}, -{46,55,17}, -{46,55,18}, -{46,55,19}, -{46,55,20}, -{46,55,21}, -{46,55,22}, -{46,55,23}, -{46,55,24}, -{46,55,25}, -{46,55,26}, -{46,55,27}, -{46,55,28}, -{46,55,29}, -{46,55,30}, -{46,55,31}, -{46,55,32}, -{46,55,33}, -{46,55,34}, -{46,55,35}, -{46,55,36}, -{46,55,37}, -{46,55,38}, -{46,55,39}, -{46,55,40}, -{46,55,41}, -{46,55,42}, -{46,55,43}, -{46,55,44}, -{46,55,45}, -{46,55,46}, -{46,55,47}, -{46,55,48}, -{46,55,49}, -{46,55,50}, -{46,55,51}, -{46,55,52}, -{46,55,53}, -{46,55,54}, -{46,55,55}, -{46,55,56}, -{46,55,57}, -{46,55,58}, -{46,56,-85}, -{46,56,-84}, -{46,56,-83}, -{46,56,-82}, -{46,56,-81}, -{46,56,-80}, -{46,56,-79}, -{46,56,-78}, -{46,56,-77}, -{46,56,-76}, -{46,56,-75}, -{46,56,-74}, -{46,56,-73}, -{46,56,-72}, -{46,56,-71}, -{46,56,-70}, -{46,56,-69}, -{46,56,-68}, -{46,56,-67}, -{46,56,-66}, -{46,56,-65}, -{46,56,-64}, -{46,56,-63}, -{46,56,-62}, -{46,56,-61}, -{46,56,-60}, -{46,56,-59}, -{46,56,-58}, -{46,56,-57}, -{46,56,-56}, -{46,56,-55}, -{46,56,-54}, -{46,56,-53}, -{46,56,-52}, -{46,56,-51}, -{46,56,-50}, -{46,56,-49}, -{46,56,-48}, -{46,56,-47}, -{46,56,-46}, -{46,56,-45}, -{46,56,-44}, -{46,56,-43}, -{46,56,-42}, -{46,56,-41}, -{46,56,-40}, -{46,56,-39}, -{46,56,-38}, -{46,56,-37}, -{46,56,-36}, -{46,56,-35}, -{46,56,-34}, -{46,56,-33}, -{46,56,-32}, -{46,56,-31}, -{46,56,-30}, -{46,56,-29}, -{46,56,-28}, -{46,56,-27}, -{46,56,-26}, -{46,56,-25}, -{46,56,-24}, -{46,56,-23}, -{46,56,-22}, -{46,56,-21}, -{46,56,-20}, -{46,56,-19}, -{46,56,-18}, -{46,56,-17}, -{46,56,-16}, -{46,56,-15}, -{46,56,-14}, -{46,56,-13}, -{46,56,-12}, -{46,56,-11}, -{46,56,-10}, -{46,56,-9}, -{46,56,-8}, -{46,56,-7}, -{46,56,-6}, -{46,56,-5}, -{46,56,-4}, -{46,56,-3}, -{46,56,-2}, -{46,56,-1}, -{46,56,0}, -{46,56,1}, -{46,56,2}, -{46,56,3}, -{46,56,4}, -{46,56,5}, -{46,56,6}, -{46,56,7}, -{46,56,8}, -{46,56,9}, -{46,56,10}, -{46,56,11}, -{46,56,12}, -{46,56,13}, -{46,56,14}, -{46,56,15}, -{46,56,16}, -{46,56,17}, -{46,56,18}, -{46,56,19}, -{46,56,20}, -{46,56,21}, -{46,56,22}, -{46,56,23}, -{46,56,24}, -{46,56,25}, -{46,56,26}, -{46,56,27}, -{46,56,28}, -{46,56,29}, -{46,56,30}, -{46,56,31}, -{46,56,32}, -{46,56,33}, -{46,56,34}, -{46,56,35}, -{46,56,36}, -{46,56,37}, -{46,56,38}, -{46,56,39}, -{46,56,40}, -{46,56,41}, -{46,56,42}, -{46,56,43}, -{46,56,44}, -{46,56,45}, -{46,56,46}, -{46,56,47}, -{46,56,48}, -{46,56,49}, -{46,56,50}, -{46,56,51}, -{46,56,52}, -{46,56,53}, -{46,56,54}, -{46,56,55}, -{46,56,56}, -{46,56,57}, -{46,56,58}, -{46,57,-85}, -{46,57,-84}, -{46,57,-83}, -{46,57,-82}, -{46,57,-81}, -{46,57,-80}, -{46,57,-79}, -{46,57,-78}, -{46,57,-77}, -{46,57,-76}, -{46,57,-75}, -{46,57,-74}, -{46,57,-73}, -{46,57,-72}, -{46,57,-71}, -{46,57,-70}, -{46,57,-69}, -{46,57,-68}, -{46,57,-67}, -{46,57,-66}, -{46,57,-65}, -{46,57,-64}, -{46,57,-63}, -{46,57,-62}, -{46,57,-61}, -{46,57,-60}, -{46,57,-59}, -{46,57,-58}, -{46,57,-57}, -{46,57,-56}, -{46,57,-55}, -{46,57,-54}, -{46,57,-53}, -{46,57,-52}, -{46,57,-51}, -{46,57,-50}, -{46,57,-49}, -{46,57,-48}, -{46,57,-47}, -{46,57,-46}, -{46,57,-45}, -{46,57,-44}, -{46,57,-43}, -{46,57,-42}, -{46,57,-41}, -{46,57,-40}, -{46,57,-39}, -{46,57,-38}, -{46,57,-37}, -{46,57,-36}, -{46,57,-35}, -{46,57,-34}, -{46,57,-33}, -{46,57,-32}, -{46,57,-31}, -{46,57,-30}, -{46,57,-29}, -{46,57,-28}, -{46,57,-27}, -{46,57,-26}, -{46,57,-25}, -{46,57,-24}, -{46,57,-23}, -{46,57,-22}, -{46,57,-21}, -{46,57,-20}, -{46,57,-19}, -{46,57,-18}, -{46,57,-17}, -{46,57,-16}, -{46,57,-15}, -{46,57,-14}, -{46,57,-13}, -{46,57,-12}, -{46,57,-11}, -{46,57,-10}, -{46,57,-9}, -{46,57,-8}, -{46,57,-7}, -{46,57,-6}, -{46,57,-5}, -{46,57,-4}, -{46,57,-3}, -{46,57,-2}, -{46,57,-1}, -{46,57,0}, -{46,57,1}, -{46,57,2}, -{46,57,3}, -{46,57,4}, -{46,57,5}, -{46,57,6}, -{46,57,7}, -{46,57,8}, -{46,57,9}, -{46,57,10}, -{46,57,11}, -{46,57,12}, -{46,57,13}, -{46,57,14}, -{46,57,15}, -{46,57,16}, -{46,57,17}, -{46,57,18}, -{46,57,19}, -{46,57,20}, -{46,57,21}, -{46,57,22}, -{46,57,23}, -{46,57,24}, -{46,57,25}, -{46,57,26}, -{46,57,27}, -{46,57,28}, -{46,57,29}, -{46,57,30}, -{46,57,31}, -{46,57,32}, -{46,57,33}, -{46,57,34}, -{46,57,35}, -{46,57,36}, -{46,57,37}, -{46,57,38}, -{46,57,39}, -{46,57,40}, -{46,57,41}, -{46,57,42}, -{46,57,43}, -{46,57,44}, -{46,57,45}, -{46,57,46}, -{46,57,47}, -{46,57,48}, -{46,57,49}, -{46,57,50}, -{46,57,51}, -{46,57,52}, -{46,57,53}, -{46,57,54}, -{46,57,55}, -{46,57,56}, -{46,57,57}, -{46,57,58}, -{46,58,-85}, -{46,58,-84}, -{46,58,-83}, -{46,58,-82}, -{46,58,-81}, -{46,58,-80}, -{46,58,-79}, -{46,58,-78}, -{46,58,-77}, -{46,58,-76}, -{46,58,-75}, -{46,58,-74}, -{46,58,-73}, -{46,58,-72}, -{46,58,-71}, -{46,58,-70}, -{46,58,-69}, -{46,58,-68}, -{46,58,-67}, -{46,58,-66}, -{46,58,-65}, -{46,58,-64}, -{46,58,-63}, -{46,58,-62}, -{46,58,-61}, -{46,58,-60}, -{46,58,-59}, -{46,58,-58}, -{46,58,-57}, -{46,58,-56}, -{46,58,-55}, -{46,58,-54}, -{46,58,-53}, -{46,58,-52}, -{46,58,-51}, -{46,58,-50}, -{46,58,-49}, -{46,58,-48}, -{46,58,-47}, -{46,58,-46}, -{46,58,-45}, -{46,58,-44}, -{46,58,-43}, -{46,58,-42}, -{46,58,-41}, -{46,58,-40}, -{46,58,-39}, -{46,58,-38}, -{46,58,-37}, -{46,58,-36}, -{46,58,-35}, -{46,58,-34}, -{46,58,-33}, -{46,58,-32}, -{46,58,-31}, -{46,58,-30}, -{46,58,-29}, -{46,58,-28}, -{46,58,-27}, -{46,58,-26}, -{46,58,-25}, -{46,58,-24}, -{46,58,-23}, -{46,58,-22}, -{46,58,-21}, -{46,58,-20}, -{46,58,-19}, -{46,58,-18}, -{46,58,-17}, -{46,58,-16}, -{46,58,-15}, -{46,58,-14}, -{46,58,-13}, -{46,58,-12}, -{46,58,-11}, -{46,58,-10}, -{46,58,-9}, -{46,58,-8}, -{46,58,-7}, -{46,58,-6}, -{46,58,-5}, -{46,58,-4}, -{46,58,-3}, -{46,58,-2}, -{46,58,-1}, -{46,58,0}, -{46,58,1}, -{46,58,2}, -{46,58,3}, -{46,58,4}, -{46,58,5}, -{46,58,6}, -{46,58,7}, -{46,58,8}, -{46,58,9}, -{46,58,10}, -{46,58,11}, -{46,58,12}, -{46,58,13}, -{46,58,14}, -{46,58,15}, -{46,58,16}, -{46,58,17}, -{46,58,18}, -{46,58,19}, -{46,58,20}, -{46,58,21}, -{46,58,22}, -{46,58,23}, -{46,58,24}, -{46,58,25}, -{46,58,26}, -{46,58,27}, -{46,58,28}, -{46,58,29}, -{46,58,30}, -{46,58,31}, -{46,58,32}, -{46,58,33}, -{46,58,34}, -{46,58,35}, -{46,58,36}, -{46,58,37}, -{46,58,38}, -{46,58,39}, -{46,58,40}, -{46,58,41}, -{46,58,42}, -{46,58,43}, -{46,58,44}, -{46,58,45}, -{46,58,46}, -{46,58,47}, -{46,58,48}, -{46,58,49}, -{46,58,50}, -{46,58,51}, -{46,58,52}, -{46,58,53}, -{46,58,54}, -{46,58,55}, -{46,58,56}, -{46,58,57}, -{46,58,58}, -{46,59,-85}, -{46,59,-84}, -{46,59,-83}, -{46,59,-82}, -{46,59,-81}, -{46,59,-80}, -{46,59,-79}, -{46,59,-78}, -{46,59,-77}, -{46,59,-76}, -{46,59,-75}, -{46,59,-74}, -{46,59,-73}, -{46,59,-72}, -{46,59,-71}, -{46,59,-70}, -{46,59,-69}, -{46,59,-68}, -{46,59,-67}, -{46,59,-66}, -{46,59,-65}, -{46,59,-64}, -{46,59,-63}, -{46,59,-62}, -{46,59,-61}, -{46,59,-60}, -{46,59,-59}, -{46,59,-58}, -{46,59,-57}, -{46,59,-56}, -{46,59,-55}, -{46,59,-54}, -{46,59,-53}, -{46,59,-52}, -{46,59,-51}, -{46,59,-50}, -{46,59,-49}, -{46,59,-48}, -{46,59,-47}, -{46,59,-46}, -{46,59,-45}, -{46,59,-44}, -{46,59,-43}, -{46,59,-42}, -{46,59,-41}, -{46,59,-40}, -{46,59,-39}, -{46,59,-38}, -{46,59,-37}, -{46,59,-36}, -{46,59,-35}, -{46,59,-34}, -{46,59,-33}, -{46,59,-32}, -{46,59,-31}, -{46,59,-30}, -{46,59,-29}, -{46,59,-28}, -{46,59,-27}, -{46,59,-26}, -{46,59,-25}, -{46,59,-24}, -{46,59,-23}, -{46,59,-22}, -{46,59,-21}, -{46,59,-20}, -{46,59,-19}, -{46,59,-18}, -{46,59,-17}, -{46,59,-16}, -{46,59,-15}, -{46,59,-14}, -{46,59,-13}, -{46,59,-12}, -{46,59,-11}, -{46,59,-10}, -{46,59,-9}, -{46,59,-8}, -{46,59,-7}, -{46,59,-6}, -{46,59,-5}, -{46,59,-4}, -{46,59,-3}, -{46,59,-2}, -{46,59,-1}, -{46,59,0}, -{46,59,1}, -{46,59,2}, -{46,59,3}, -{46,59,4}, -{46,59,5}, -{46,59,6}, -{46,59,7}, -{46,59,8}, -{46,59,9}, -{46,59,10}, -{46,59,11}, -{46,59,12}, -{46,59,13}, -{46,59,14}, -{46,59,15}, -{46,59,16}, -{46,59,17}, -{46,59,18}, -{46,59,19}, -{46,59,20}, -{46,59,21}, -{46,59,22}, -{46,59,23}, -{46,59,24}, -{46,59,25}, -{46,59,26}, -{46,59,27}, -{46,59,28}, -{46,59,29}, -{46,59,30}, -{46,59,31}, -{46,59,32}, -{46,59,33}, -{46,59,34}, -{46,59,35}, -{46,59,36}, -{46,59,37}, -{46,59,38}, -{46,59,39}, -{46,59,40}, -{46,59,41}, -{46,59,42}, -{46,59,43}, -{46,59,44}, -{46,59,45}, -{46,59,46}, -{46,59,47}, -{46,59,48}, -{46,59,49}, -{46,59,50}, -{46,59,51}, -{46,59,52}, -{46,59,53}, -{46,59,54}, -{46,59,55}, -{46,59,56}, -{46,59,57}, -{46,59,58}, -{46,60,-85}, -{46,60,-84}, -{46,60,-83}, -{46,60,-82}, -{46,60,-81}, -{46,60,-80}, -{46,60,-79}, -{46,60,-78}, -{46,60,-77}, -{46,60,-76}, -{46,60,-75}, -{46,60,-74}, -{46,60,-73}, -{46,60,-72}, -{46,60,-71}, -{46,60,-70}, -{46,60,-69}, -{46,60,-68}, -{46,60,-67}, -{46,60,-66}, -{46,60,-65}, -{46,60,-64}, -{46,60,-63}, -{46,60,-62}, -{46,60,-61}, -{46,60,-60}, -{46,60,-59}, -{46,60,-58}, -{46,60,-57}, -{46,60,-56}, -{46,60,-55}, -{46,60,-54}, -{46,60,-53}, -{46,60,-52}, -{46,60,-51}, -{46,60,-50}, -{46,60,-49}, -{46,60,-48}, -{46,60,-47}, -{46,60,-46}, -{46,60,-45}, -{46,60,-44}, -{46,60,-43}, -{46,60,-42}, -{46,60,-41}, -{46,60,-40}, -{46,60,-39}, -{46,60,-38}, -{46,60,-37}, -{46,60,-36}, -{46,60,-35}, -{46,60,-34}, -{46,60,-33}, -{46,60,-32}, -{46,60,-31}, -{46,60,-30}, -{46,60,-29}, -{46,60,-28}, -{46,60,-27}, -{46,60,-26}, -{46,60,-25}, -{46,60,-24}, -{46,60,-23}, -{46,60,-22}, -{46,60,-21}, -{46,60,-20}, -{46,60,-19}, -{46,60,-18}, -{46,60,-17}, -{46,60,-16}, -{46,60,-15}, -{46,60,-14}, -{46,60,-13}, -{46,60,-12}, -{46,60,-11}, -{46,60,-10}, -{46,60,-9}, -{46,60,-8}, -{46,60,-7}, -{46,60,-6}, -{46,60,-5}, -{46,60,-4}, -{46,60,-3}, -{46,60,-2}, -{46,60,-1}, -{46,60,0}, -{46,60,1}, -{46,60,2}, -{46,60,3}, -{46,60,4}, -{46,60,5}, -{46,60,6}, -{46,60,7}, -{46,60,8}, -{46,60,9}, -{46,60,10}, -{46,60,11}, -{46,60,12}, -{46,60,13}, -{46,60,14}, -{46,60,15}, -{46,60,16}, -{46,60,17}, -{46,60,18}, -{46,60,19}, -{46,60,20}, -{46,60,21}, -{46,60,22}, -{46,60,23}, -{46,60,24}, -{46,60,25}, -{46,60,26}, -{46,60,27}, -{46,60,28}, -{46,60,29}, -{46,60,30}, -{46,60,31}, -{46,60,32}, -{46,60,33}, -{46,60,34}, -{46,60,35}, -{46,60,36}, -{46,60,37}, -{46,60,38}, -{46,60,39}, -{46,60,40}, -{46,60,41}, -{46,60,42}, -{46,60,43}, -{46,60,44}, -{46,60,45}, -{46,60,46}, -{46,60,47}, -{46,60,48}, -{46,60,49}, -{46,60,50}, -{46,60,51}, -{46,60,52}, -{46,60,53}, -{46,60,54}, -{46,60,55}, -{46,60,56}, -{46,60,57}, -{46,60,58}, -{46,61,-85}, -{46,61,-84}, -{46,61,-83}, -{46,61,-82}, -{46,61,-81}, -{46,61,-80}, -{46,61,-79}, -{46,61,-78}, -{46,61,-77}, -{46,61,-76}, -{46,61,-75}, -{46,61,-74}, -{46,61,-73}, -{46,61,-72}, -{46,61,-71}, -{46,61,-70}, -{46,61,-69}, -{46,61,-68}, -{46,61,-67}, -{46,61,-66}, -{46,61,-65}, -{46,61,-64}, -{46,61,-63}, -{46,61,-62}, -{46,61,-61}, -{46,61,-60}, -{46,61,-59}, -{46,61,-58}, -{46,61,-57}, -{46,61,-56}, -{46,61,-55}, -{46,61,-54}, -{46,61,-53}, -{46,61,-52}, -{46,61,-51}, -{46,61,-50}, -{46,61,-49}, -{46,61,-48}, -{46,61,-47}, -{46,61,-46}, -{46,61,-45}, -{46,61,-44}, -{46,61,-43}, -{46,61,-42}, -{46,61,-41}, -{46,61,-40}, -{46,61,-39}, -{46,61,-38}, -{46,61,-37}, -{46,61,-36}, -{46,61,-35}, -{46,61,-34}, -{46,61,-33}, -{46,61,-32}, -{46,61,-31}, -{46,61,-30}, -{46,61,-29}, -{46,61,-28}, -{46,61,-27}, -{46,61,-26}, -{46,61,-25}, -{46,61,-24}, -{46,61,-23}, -{46,61,-22}, -{46,61,-21}, -{46,61,-20}, -{46,61,-19}, -{46,61,-18}, -{46,61,-17}, -{46,61,-16}, -{46,61,-15}, -{46,61,-14}, -{46,61,-13}, -{46,61,-12}, -{46,61,-11}, -{46,61,-10}, -{46,61,-9}, -{46,61,-8}, -{46,61,-7}, -{46,61,-6}, -{46,61,-5}, -{46,61,-4}, -{46,61,-3}, -{46,61,-2}, -{46,61,-1}, -{46,61,0}, -{46,61,1}, -{46,61,2}, -{46,61,3}, -{46,61,4}, -{46,61,5}, -{46,61,6}, -{46,61,7}, -{46,61,8}, -{46,61,9}, -{46,61,10}, -{46,61,11}, -{46,61,12}, -{46,61,13}, -{46,61,14}, -{46,61,15}, -{46,61,16}, -{46,61,17}, -{46,61,18}, -{46,61,19}, -{46,61,20}, -{46,61,21}, -{46,61,22}, -{46,61,23}, -{46,61,24}, -{46,61,25}, -{46,61,26}, -{46,61,27}, -{46,61,28}, -{46,61,29}, -{46,61,30}, -{46,61,31}, -{46,61,32}, -{46,61,33}, -{46,61,34}, -{46,61,35}, -{46,61,36}, -{46,61,37}, -{46,61,38}, -{46,61,39}, -{46,61,40}, -{46,61,41}, -{46,61,42}, -{46,61,43}, -{46,61,44}, -{46,61,45}, -{46,61,46}, -{46,61,47}, -{46,61,48}, -{46,61,49}, -{46,61,50}, -{46,61,51}, -{46,61,52}, -{46,61,53}, -{46,61,54}, -{46,61,55}, -{46,61,56}, -{46,61,57}, -{46,61,58}, -{46,62,-85}, -{46,62,-84}, -{46,62,-83}, -{46,62,-82}, -{46,62,-81}, -{46,62,-80}, -{46,62,-79}, -{46,62,-78}, -{46,62,-77}, -{46,62,-76}, -{46,62,-75}, -{46,62,-74}, -{46,62,-73}, -{46,62,-72}, -{46,62,-71}, -{46,62,-70}, -{46,62,-69}, -{46,62,-68}, -{46,62,-67}, -{46,62,-66}, -{46,62,-65}, -{46,62,-64}, -{46,62,-63}, -{46,62,-62}, -{46,62,-61}, -{46,62,-60}, -{46,62,-59}, -{46,62,-58}, -{46,62,-57}, -{46,62,-56}, -{46,62,-55}, -{46,62,-54}, -{46,62,-53}, -{46,62,-52}, -{46,62,-51}, -{46,62,-50}, -{46,62,-49}, -{46,62,-48}, -{46,62,-47}, -{46,62,-46}, -{46,62,-45}, -{46,62,-44}, -{46,62,-43}, -{46,62,-42}, -{46,62,-41}, -{46,62,-40}, -{46,62,-39}, -{46,62,-38}, -{46,62,-37}, -{46,62,-36}, -{46,62,-35}, -{46,62,-34}, -{46,62,-33}, -{46,62,-32}, -{46,62,-31}, -{46,62,-30}, -{46,62,-29}, -{46,62,-28}, -{46,62,-27}, -{46,62,-26}, -{46,62,-25}, -{46,62,-24}, -{46,62,-23}, -{46,62,-22}, -{46,62,-21}, -{46,62,-20}, -{46,62,-19}, -{46,62,-18}, -{46,62,-17}, -{46,62,-16}, -{46,62,-15}, -{46,62,-14}, -{46,62,-13}, -{46,62,-12}, -{46,62,-11}, -{46,62,-10}, -{46,62,-9}, -{46,62,-8}, -{46,62,-7}, -{46,62,-6}, -{46,62,-5}, -{46,62,-4}, -{46,62,-3}, -{46,62,-2}, -{46,62,-1}, -{46,62,0}, -{46,62,1}, -{46,62,2}, -{46,62,3}, -{46,62,4}, -{46,62,5}, -{46,62,6}, -{46,62,7}, -{46,62,8}, -{46,62,9}, -{46,62,10}, -{46,62,11}, -{46,62,12}, -{46,62,13}, -{46,62,14}, -{46,62,15}, -{46,62,16}, -{46,62,17}, -{46,62,18}, -{46,62,19}, -{46,62,20}, -{46,62,21}, -{46,62,22}, -{46,62,23}, -{46,62,24}, -{46,62,25}, -{46,62,26}, -{46,62,27}, -{46,62,28}, -{46,62,29}, -{46,62,30}, -{46,62,31}, -{46,62,32}, -{46,62,33}, -{46,62,34}, -{46,62,35}, -{46,62,36}, -{46,62,37}, -{46,62,38}, -{46,62,39}, -{46,62,40}, -{46,62,41}, -{46,62,42}, -{46,62,43}, -{46,62,44}, -{46,62,45}, -{46,62,46}, -{46,62,47}, -{46,62,48}, -{46,62,49}, -{46,62,50}, -{46,62,51}, -{46,62,52}, -{46,62,53}, -{46,62,54}, -{46,62,55}, -{46,62,56}, -{46,62,57}, -{46,62,58}, -{46,63,-85}, -{46,63,-84}, -{46,63,-83}, -{46,63,-82}, -{46,63,-81}, -{46,63,-80}, -{46,63,-79}, -{46,63,-78}, -{46,63,-77}, -{46,63,-76}, -{46,63,-75}, -{46,63,-74}, -{46,63,-73}, -{46,63,-72}, -{46,63,-71}, -{46,63,-70}, -{46,63,-69}, -{46,63,-68}, -{46,63,-67}, -{46,63,-66}, -{46,63,-65}, -{46,63,-64}, -{46,63,-63}, -{46,63,-62}, -{46,63,-61}, -{46,63,-60}, -{46,63,-59}, -{46,63,-58}, -{46,63,-57}, -{46,63,-56}, -{46,63,-55}, -{46,63,-54}, -{46,63,-53}, -{46,63,-52}, -{46,63,-51}, -{46,63,-50}, -{46,63,-49}, -{46,63,-48}, -{46,63,-47}, -{46,63,-46}, -{46,63,-45}, -{46,63,-44}, -{46,63,-43}, -{46,63,-42}, -{46,63,-41}, -{46,63,-40}, -{46,63,-39}, -{46,63,-38}, -{46,63,-37}, -{46,63,-36}, -{46,63,-35}, -{46,63,-34}, -{46,63,-33}, -{46,63,-32}, -{46,63,-31}, -{46,63,-30}, -{46,63,-29}, -{46,63,-28}, -{46,63,-27}, -{46,63,-26}, -{46,63,-25}, -{46,63,-24}, -{46,63,-23}, -{46,63,-22}, -{46,63,-21}, -{46,63,-20}, -{46,63,-19}, -{46,63,-18}, -{46,63,-17}, -{46,63,-16}, -{46,63,-15}, -{46,63,-14}, -{46,63,-13}, -{46,63,-12}, -{46,63,-11}, -{46,63,-10}, -{46,63,-9}, -{46,63,-8}, -{46,63,-7}, -{46,63,-6}, -{46,63,-5}, -{46,63,-4}, -{46,63,-3}, -{46,63,-2}, -{46,63,-1}, -{46,63,0}, -{46,63,1}, -{46,63,2}, -{46,63,3}, -{46,63,4}, -{46,63,5}, -{46,63,6}, -{46,63,7}, -{46,63,8}, -{46,63,9}, -{46,63,10}, -{46,63,11}, -{46,63,12}, -{46,63,13}, -{46,63,14}, -{46,63,15}, -{46,63,16}, -{46,63,17}, -{46,63,18}, -{46,63,19}, -{46,63,20}, -{46,63,21}, -{46,63,22}, -{46,63,23}, -{46,63,24}, -{46,63,25}, -{46,63,26}, -{46,63,27}, -{46,63,28}, -{46,63,29}, -{46,63,30}, -{46,63,31}, -{46,63,32}, -{46,63,33}, -{46,63,34}, -{46,63,35}, -{46,63,36}, -{46,63,37}, -{46,63,38}, -{46,63,39}, -{46,63,40}, -{46,63,41}, -{46,63,42}, -{46,63,43}, -{46,63,44}, -{46,63,45}, -{46,63,46}, -{46,63,47}, -{46,63,48}, -{46,63,49}, -{46,63,50}, -{46,63,51}, -{46,63,52}, -{46,63,53}, -{46,63,54}, -{46,63,55}, -{46,63,56}, -{46,63,57}, -{46,63,58}, -{46,63,59}, -{46,64,-85}, -{46,64,-84}, -{46,64,-83}, -{46,64,-82}, -{46,64,-81}, -{46,64,-80}, -{46,64,-79}, -{46,64,-78}, -{46,64,-77}, -{46,64,-76}, -{46,64,-75}, -{46,64,-74}, -{46,64,-73}, -{46,64,-72}, -{46,64,-71}, -{46,64,-70}, -{46,64,-69}, -{46,64,-68}, -{46,64,-67}, -{46,64,-66}, -{46,64,-65}, -{46,64,-64}, -{46,64,-63}, -{46,64,-62}, -{46,64,-61}, -{46,64,-60}, -{46,64,-59}, -{46,64,-58}, -{46,64,-57}, -{46,64,-56}, -{46,64,-55}, -{46,64,-54}, -{46,64,-53}, -{46,64,-52}, -{46,64,-51}, -{46,64,-50}, -{46,64,-49}, -{46,64,-48}, -{46,64,-47}, -{46,64,-46}, -{46,64,-45}, -{46,64,-44}, -{46,64,-43}, -{46,64,-42}, -{46,64,-41}, -{46,64,-40}, -{46,64,-39}, -{46,64,-38}, -{46,64,-37}, -{46,64,-36}, -{46,64,-35}, -{46,64,-34}, -{46,64,-33}, -{46,64,-32}, -{46,64,-31}, -{46,64,-30}, -{46,64,-29}, -{46,64,-28}, -{46,64,-27}, -{46,64,-26}, -{46,64,-25}, -{46,64,-24}, -{46,64,-23}, -{46,64,-22}, -{46,64,-21}, -{46,64,-20}, -{46,64,-19}, -{46,64,-18}, -{46,64,-17}, -{46,64,-16}, -{46,64,-15}, -{46,64,-14}, -{46,64,-13}, -{46,64,-12}, -{46,64,-11}, -{46,64,-10}, -{46,64,-9}, -{46,64,-8}, -{46,64,-7}, -{46,64,-6}, -{46,64,-5}, -{46,64,-4}, -{46,64,-3}, -{46,64,-2}, -{46,64,-1}, -{46,64,0}, -{46,64,1}, -{46,64,2}, -{46,64,3}, -{46,64,4}, -{46,64,5}, -{46,64,6}, -{46,64,7}, -{46,64,8}, -{46,64,9}, -{46,64,10}, -{46,64,11}, -{46,64,12}, -{46,64,13}, -{46,64,14}, -{46,64,15}, -{46,64,16}, -{46,64,17}, -{46,64,18}, -{46,64,19}, -{46,64,20}, -{46,64,21}, -{46,64,22}, -{46,64,23}, -{46,64,24}, -{46,64,25}, -{46,64,26}, -{46,64,27}, -{46,64,28}, -{46,64,29}, -{46,64,30}, -{46,64,31}, -{46,64,32}, -{46,64,33}, -{46,64,34}, -{46,64,35}, -{46,64,36}, -{46,64,37}, -{46,64,38}, -{46,64,39}, -{46,64,40}, -{46,64,41}, -{46,64,42}, -{46,64,43}, -{46,64,44}, -{46,64,45}, -{46,64,46}, -{46,64,47}, -{46,64,48}, -{46,64,49}, -{46,64,50}, -{46,64,51}, -{46,64,52}, -{46,64,53}, -{46,64,54}, -{46,64,55}, -{46,64,56}, -{46,64,57}, -{46,64,58}, -{46,64,59}, -{46,65,-85}, -{46,65,-84}, -{46,65,-83}, -{46,65,-82}, -{46,65,-81}, -{46,65,-80}, -{46,65,-79}, -{46,65,-78}, -{46,65,-77}, -{46,65,-76}, -{46,65,-75}, -{46,65,-74}, -{46,65,-73}, -{46,65,-72}, -{46,65,-71}, -{46,65,-70}, -{46,65,-69}, -{46,65,-68}, -{46,65,-67}, -{46,65,-66}, -{46,65,-65}, -{46,65,-64}, -{46,65,-63}, -{46,65,-62}, -{46,65,-61}, -{46,65,-60}, -{46,65,-59}, -{46,65,-58}, -{46,65,-57}, -{46,65,-56}, -{46,65,-55}, -{46,65,-54}, -{46,65,-53}, -{46,65,-52}, -{46,65,-51}, -{46,65,-50}, -{46,65,-49}, -{46,65,-48}, -{46,65,-47}, -{46,65,-46}, -{46,65,-45}, -{46,65,-44}, -{46,65,-43}, -{46,65,-42}, -{46,65,-41}, -{46,65,-40}, -{46,65,-39}, -{46,65,-38}, -{46,65,-37}, -{46,65,-36}, -{46,65,-35}, -{46,65,-34}, -{46,65,-33}, -{46,65,-32}, -{46,65,-31}, -{46,65,-30}, -{46,65,-29}, -{46,65,-28}, -{46,65,-27}, -{46,65,-26}, -{46,65,-25}, -{46,65,-24}, -{46,65,-23}, -{46,65,-22}, -{46,65,-21}, -{46,65,-20}, -{46,65,-19}, -{46,65,-18}, -{46,65,-17}, -{46,65,-16}, -{46,65,-15}, -{46,65,-14}, -{46,65,-13}, -{46,65,-12}, -{46,65,-11}, -{46,65,-10}, -{46,65,-9}, -{46,65,-8}, -{46,65,-7}, -{46,65,-6}, -{46,65,-5}, -{46,65,-4}, -{46,65,-3}, -{46,65,-2}, -{46,65,-1}, -{46,65,0}, -{46,65,1}, -{46,65,2}, -{46,65,3}, -{46,65,4}, -{46,65,5}, -{46,65,6}, -{46,65,7}, -{46,65,8}, -{46,65,9}, -{46,65,10}, -{46,65,11}, -{46,65,12}, -{46,65,13}, -{46,65,14}, -{46,65,15}, -{46,65,16}, -{46,65,17}, -{46,65,18}, -{46,65,19}, -{46,65,20}, -{46,65,21}, -{46,65,22}, -{46,65,23}, -{46,65,24}, -{46,65,25}, -{46,65,26}, -{46,65,27}, -{46,65,28}, -{46,65,29}, -{46,65,30}, -{46,65,31}, -{46,65,32}, -{46,65,33}, -{46,65,34}, -{46,65,35}, -{46,65,36}, -{46,65,37}, -{46,65,38}, -{46,65,39}, -{46,65,40}, -{46,65,41}, -{46,65,42}, -{46,65,43}, -{46,65,44}, -{46,65,45}, -{46,65,46}, -{46,65,47}, -{46,65,48}, -{46,65,49}, -{46,65,50}, -{46,65,51}, -{46,65,52}, -{46,65,53}, -{46,65,54}, -{46,65,55}, -{46,65,56}, -{46,65,57}, -{46,65,58}, -{46,65,59}, -{46,66,-85}, -{46,66,-84}, -{46,66,-83}, -{46,66,-82}, -{46,66,-81}, -{46,66,-80}, -{46,66,-79}, -{46,66,-78}, -{46,66,-77}, -{46,66,-76}, -{46,66,-75}, -{46,66,-74}, -{46,66,-73}, -{46,66,-72}, -{46,66,-71}, -{46,66,-70}, -{46,66,-69}, -{46,66,-68}, -{46,66,-67}, -{46,66,-66}, -{46,66,-65}, -{46,66,-64}, -{46,66,-63}, -{46,66,-62}, -{46,66,-61}, -{46,66,-60}, -{46,66,-59}, -{46,66,-58}, -{46,66,-57}, -{46,66,-56}, -{46,66,-55}, -{46,66,-54}, -{46,66,-53}, -{46,66,-52}, -{46,66,-51}, -{46,66,-50}, -{46,66,-49}, -{46,66,-48}, -{46,66,-47}, -{46,66,-46}, -{46,66,-45}, -{46,66,-44}, -{46,66,-43}, -{46,66,-42}, -{46,66,-41}, -{46,66,-40}, -{46,66,-39}, -{46,66,-38}, -{46,66,-37}, -{46,66,-36}, -{46,66,-35}, -{46,66,-34}, -{46,66,-33}, -{46,66,-32}, -{46,66,-31}, -{46,66,-30}, -{46,66,-29}, -{46,66,-28}, -{46,66,-27}, -{46,66,-26}, -{46,66,-25}, -{46,66,-24}, -{46,66,-23}, -{46,66,-22}, -{46,66,-21}, -{46,66,-20}, -{46,66,-19}, -{46,66,-18}, -{46,66,-17}, -{46,66,-16}, -{46,66,-15}, -{46,66,-14}, -{46,66,-13}, -{46,66,-12}, -{46,66,-11}, -{46,66,-10}, -{46,66,-9}, -{46,66,-8}, -{46,66,-7}, -{46,66,-6}, -{46,66,-5}, -{46,66,-4}, -{46,66,-3}, -{46,66,-2}, -{46,66,-1}, -{46,66,0}, -{46,66,1}, -{46,66,2}, -{46,66,3}, -{46,66,4}, -{46,66,5}, -{46,66,6}, -{46,66,7}, -{46,66,8}, -{46,66,9}, -{46,66,10}, -{46,66,11}, -{46,66,12}, -{46,66,13}, -{46,66,14}, -{46,66,15}, -{46,66,16}, -{46,66,17}, -{46,66,18}, -{46,66,19}, -{46,66,20}, -{46,66,21}, -{46,66,22}, -{46,66,23}, -{46,66,24}, -{46,66,25}, -{46,66,26}, -{46,66,27}, -{46,66,28}, -{46,66,29}, -{46,66,30}, -{46,66,31}, -{46,66,32}, -{46,66,33}, -{46,66,34}, -{46,66,35}, -{46,66,36}, -{46,66,37}, -{46,66,38}, -{46,66,39}, -{46,66,40}, -{46,66,41}, -{46,66,42}, -{46,66,43}, -{46,66,44}, -{46,66,45}, -{46,66,46}, -{46,66,47}, -{46,66,48}, -{46,66,49}, -{46,66,50}, -{46,66,51}, -{46,66,52}, -{46,66,53}, -{46,66,54}, -{46,66,55}, -{46,66,56}, -{46,66,57}, -{46,66,58}, -{46,66,59}, -{46,67,-85}, -{46,67,-84}, -{46,67,-83}, -{46,67,-82}, -{46,67,-81}, -{46,67,-80}, -{46,67,-79}, -{46,67,-78}, -{46,67,-77}, -{46,67,-76}, -{46,67,-75}, -{46,67,-74}, -{46,67,-73}, -{46,67,-72}, -{46,67,-71}, -{46,67,-70}, -{46,67,-69}, -{46,67,-68}, -{46,67,-67}, -{46,67,-66}, -{46,67,-65}, -{46,67,-64}, -{46,67,-63}, -{46,67,-62}, -{46,67,-61}, -{46,67,-60}, -{46,67,-59}, -{46,67,-58}, -{46,67,-57}, -{46,67,-56}, -{46,67,-55}, -{46,67,-54}, -{46,67,-53}, -{46,67,-52}, -{46,67,-51}, -{46,67,-50}, -{46,67,-49}, -{46,67,-48}, -{46,67,-47}, -{46,67,-46}, -{46,67,-45}, -{46,67,-44}, -{46,67,-43}, -{46,67,-42}, -{46,67,-41}, -{46,67,-40}, -{46,67,-39}, -{46,67,-38}, -{46,67,-37}, -{46,67,-36}, -{46,67,-35}, -{46,67,-34}, -{46,67,-33}, -{46,67,-32}, -{46,67,-31}, -{46,67,-30}, -{46,67,-29}, -{46,67,-28}, -{46,67,-27}, -{46,67,-26}, -{46,67,-25}, -{46,67,-24}, -{46,67,-23}, -{46,67,-22}, -{46,67,-21}, -{46,67,-20}, -{46,67,-19}, -{46,67,-18}, -{46,67,-17}, -{46,67,-16}, -{46,67,-15}, -{46,67,-14}, -{46,67,-13}, -{46,67,-12}, -{46,67,-11}, -{46,67,-10}, -{46,67,-9}, -{46,67,-8}, -{46,67,-7}, -{46,67,-6}, -{46,67,-5}, -{46,67,-4}, -{46,67,-3}, -{46,67,-2}, -{46,67,-1}, -{46,67,0}, -{46,67,1}, -{46,67,2}, -{46,67,3}, -{46,67,4}, -{46,67,5}, -{46,67,6}, -{46,67,7}, -{46,67,8}, -{46,67,9}, -{46,67,10}, -{46,67,11}, -{46,67,12}, -{46,67,13}, -{46,67,14}, -{46,67,15}, -{46,67,16}, -{46,67,17}, -{46,67,18}, -{46,67,19}, -{46,67,20}, -{46,67,21}, -{46,67,22}, -{46,67,23}, -{46,67,24}, -{46,67,25}, -{46,67,26}, -{46,67,27}, -{46,67,28}, -{46,67,29}, -{46,67,30}, -{46,67,31}, -{46,67,32}, -{46,67,33}, -{46,67,34}, -{46,67,35}, -{46,67,36}, -{46,67,37}, -{46,67,38}, -{46,67,39}, -{46,67,40}, -{46,67,41}, -{46,67,42}, -{46,67,43}, -{46,67,44}, -{46,67,45}, -{46,67,46}, -{46,67,47}, -{46,67,48}, -{46,67,49}, -{46,67,50}, -{46,67,51}, -{46,67,52}, -{46,67,53}, -{46,67,54}, -{46,67,55}, -{46,67,56}, -{46,67,57}, -{46,67,58}, -{46,67,59}, -{46,68,-85}, -{46,68,-84}, -{46,68,-83}, -{46,68,-82}, -{46,68,-81}, -{46,68,-80}, -{46,68,-79}, -{46,68,-78}, -{46,68,-77}, -{46,68,-76}, -{46,68,-75}, -{46,68,-74}, -{46,68,-73}, -{46,68,-72}, -{46,68,-71}, -{46,68,-70}, -{46,68,-69}, -{46,68,-68}, -{46,68,-67}, -{46,68,-66}, -{46,68,-65}, -{46,68,-64}, -{46,68,-63}, -{46,68,-62}, -{46,68,-61}, -{46,68,-60}, -{46,68,-59}, -{46,68,-58}, -{46,68,-57}, -{46,68,-56}, -{46,68,-55}, -{46,68,-54}, -{46,68,-53}, -{46,68,-52}, -{46,68,-51}, -{46,68,-50}, -{46,68,-49}, -{46,68,-48}, -{46,68,-47}, -{46,68,-46}, -{46,68,-45}, -{46,68,-44}, -{46,68,-43}, -{46,68,-42}, -{46,68,-41}, -{46,68,-40}, -{46,68,-39}, -{46,68,-38}, -{46,68,-37}, -{46,68,-36}, -{46,68,-35}, -{46,68,-34}, -{46,68,-33}, -{46,68,-32}, -{46,68,-31}, -{46,68,-30}, -{46,68,-29}, -{46,68,-28}, -{46,68,-27}, -{46,68,-26}, -{46,68,-25}, -{46,68,-24}, -{46,68,-23}, -{46,68,-22}, -{46,68,-21}, -{46,68,-20}, -{46,68,-19}, -{46,68,-18}, -{46,68,-17}, -{46,68,-16}, -{46,68,-15}, -{46,68,-14}, -{46,68,-13}, -{46,68,-12}, -{46,68,-11}, -{46,68,-10}, -{46,68,-9}, -{46,68,-8}, -{46,68,-7}, -{46,68,-6}, -{46,68,-5}, -{46,68,-4}, -{46,68,-3}, -{46,68,-2}, -{46,68,-1}, -{46,68,0}, -{46,68,1}, -{46,68,2}, -{46,68,3}, -{46,68,4}, -{46,68,5}, -{46,68,6}, -{46,68,7}, -{46,68,8}, -{46,68,9}, -{46,68,10}, -{46,68,11}, -{46,68,12}, -{46,68,13}, -{46,68,14}, -{46,68,15}, -{46,68,16}, -{46,68,17}, -{46,68,18}, -{46,68,19}, -{46,68,20}, -{46,68,21}, -{46,68,22}, -{46,68,23}, -{46,68,24}, -{46,68,25}, -{46,68,26}, -{46,68,27}, -{46,68,28}, -{46,68,29}, -{46,68,30}, -{46,68,31}, -{46,68,32}, -{46,68,33}, -{46,68,34}, -{46,68,35}, -{46,68,36}, -{46,68,37}, -{46,68,38}, -{46,68,39}, -{46,68,40}, -{46,68,41}, -{46,68,42}, -{46,68,43}, -{46,68,44}, -{46,68,45}, -{46,68,46}, -{46,68,47}, -{46,68,48}, -{46,68,49}, -{46,68,50}, -{46,68,51}, -{46,68,52}, -{46,68,53}, -{46,68,54}, -{46,68,55}, -{46,68,56}, -{46,68,57}, -{46,68,58}, -{46,68,59}, -{46,69,-85}, -{46,69,-84}, -{46,69,-83}, -{46,69,-82}, -{46,69,-81}, -{46,69,-80}, -{46,69,-79}, -{46,69,-78}, -{46,69,-77}, -{46,69,-76}, -{46,69,-75}, -{46,69,-74}, -{46,69,-73}, -{46,69,-72}, -{46,69,-71}, -{46,69,-70}, -{46,69,-69}, -{46,69,-68}, -{46,69,-67}, -{46,69,-66}, -{46,69,-65}, -{46,69,-64}, -{46,69,-63}, -{46,69,-62}, -{46,69,-61}, -{46,69,-60}, -{46,69,-59}, -{46,69,-58}, -{46,69,-57}, -{46,69,-56}, -{46,69,-55}, -{46,69,-54}, -{46,69,-53}, -{46,69,-52}, -{46,69,-51}, -{46,69,-50}, -{46,69,-49}, -{46,69,-48}, -{46,69,-47}, -{46,69,-46}, -{46,69,-45}, -{46,69,-44}, -{46,69,-43}, -{46,69,-42}, -{46,69,-41}, -{46,69,-40}, -{46,69,-39}, -{46,69,-38}, -{46,69,-37}, -{46,69,-36}, -{46,69,-35}, -{46,69,-34}, -{46,69,-33}, -{46,69,-32}, -{46,69,-31}, -{46,69,-30}, -{46,69,-29}, -{46,69,-28}, -{46,69,-27}, -{46,69,-26}, -{46,69,-25}, -{46,69,-24}, -{46,69,-23}, -{46,69,-22}, -{46,69,-21}, -{46,69,-20}, -{46,69,-19}, -{46,69,-18}, -{46,69,-17}, -{46,69,-16}, -{46,69,-15}, -{46,69,-14}, -{46,69,-13}, -{46,69,-12}, -{46,69,-11}, -{46,69,-10}, -{46,69,-9}, -{46,69,-8}, -{46,69,-7}, -{46,69,-6}, -{46,69,-5}, -{46,69,-4}, -{46,69,-3}, -{46,69,-2}, -{46,69,-1}, -{46,69,0}, -{46,69,1}, -{46,69,2}, -{46,69,3}, -{46,69,4}, -{46,69,5}, -{46,69,6}, -{46,69,7}, -{46,69,8}, -{46,69,9}, -{46,69,10}, -{46,69,11}, -{46,69,12}, -{46,69,13}, -{46,69,14}, -{46,69,15}, -{46,69,16}, -{46,69,17}, -{46,69,18}, -{46,69,19}, -{46,69,20}, -{46,69,21}, -{46,69,22}, -{46,69,23}, -{46,69,24}, -{46,69,25}, -{46,69,26}, -{46,69,27}, -{46,69,28}, -{46,69,29}, -{46,69,30}, -{46,69,31}, -{46,69,32}, -{46,69,33}, -{46,69,34}, -{46,69,35}, -{46,69,36}, -{46,69,37}, -{46,69,38}, -{46,69,39}, -{46,69,40}, -{46,69,41}, -{46,69,42}, -{46,69,43}, -{46,69,44}, -{46,69,45}, -{46,69,46}, -{46,69,47}, -{46,69,48}, -{46,69,49}, -{46,69,50}, -{46,69,51}, -{46,69,52}, -{46,69,53}, -{46,69,54}, -{46,69,55}, -{46,69,56}, -{46,69,57}, -{46,69,58}, -{46,69,59}, -{46,70,-85}, -{46,70,-84}, -{46,70,-83}, -{46,70,-82}, -{46,70,-81}, -{46,70,-80}, -{46,70,-79}, -{46,70,-78}, -{46,70,-77}, -{46,70,-76}, -{46,70,-75}, -{46,70,-74}, -{46,70,-73}, -{46,70,-72}, -{46,70,-71}, -{46,70,-70}, -{46,70,-69}, -{46,70,-68}, -{46,70,-67}, -{46,70,-66}, -{46,70,-65}, -{46,70,-64}, -{46,70,-63}, -{46,70,-62}, -{46,70,-61}, -{46,70,-60}, -{46,70,-59}, -{46,70,-58}, -{46,70,-57}, -{46,70,-56}, -{46,70,-55}, -{46,70,-54}, -{46,70,-53}, -{46,70,-52}, -{46,70,-51}, -{46,70,-50}, -{46,70,-49}, -{46,70,-48}, -{46,70,-47}, -{46,70,-46}, -{46,70,-45}, -{46,70,-44}, -{46,70,-43}, -{46,70,-42}, -{46,70,-41}, -{46,70,-40}, -{46,70,-39}, -{46,70,-38}, -{46,70,-37}, -{46,70,-36}, -{46,70,-35}, -{46,70,-34}, -{46,70,-33}, -{46,70,-32}, -{46,70,-31}, -{46,70,-30}, -{46,70,-29}, -{46,70,-28}, -{46,70,-27}, -{46,70,-26}, -{46,70,-25}, -{46,70,-24}, -{46,70,-23}, -{46,70,-22}, -{46,70,-21}, -{46,70,-20}, -{46,70,-19}, -{46,70,-18}, -{46,70,-17}, -{46,70,-16}, -{46,70,-15}, -{46,70,-14}, -{46,70,-13}, -{46,70,-12}, -{46,70,-11}, -{46,70,-10}, -{46,70,-9}, -{46,70,-8}, -{46,70,-7}, -{46,70,-6}, -{46,70,-5}, -{46,70,-4}, -{46,70,-3}, -{46,70,-2}, -{46,70,-1}, -{46,70,0}, -{46,70,1}, -{46,70,2}, -{46,70,3}, -{46,70,4}, -{46,70,5}, -{46,70,6}, -{46,70,7}, -{46,70,8}, -{46,70,9}, -{46,70,10}, -{46,70,11}, -{46,70,12}, -{46,70,13}, -{46,70,14}, -{46,70,15}, -{46,70,16}, -{46,70,17}, -{46,70,18}, -{46,70,19}, -{46,70,20}, -{46,70,21}, -{46,70,22}, -{46,70,23}, -{46,70,24}, -{46,70,25}, -{46,70,26}, -{46,70,27}, -{46,70,28}, -{46,70,29}, -{46,70,30}, -{46,70,31}, -{46,70,32}, -{46,70,33}, -{46,70,34}, -{46,70,35}, -{46,70,36}, -{46,70,37}, -{46,70,38}, -{46,70,39}, -{46,70,40}, -{46,70,41}, -{46,70,42}, -{46,70,43}, -{46,70,44}, -{46,70,45}, -{46,70,46}, -{46,70,47}, -{46,70,48}, -{46,70,49}, -{46,70,50}, -{46,70,51}, -{46,70,52}, -{46,70,53}, -{46,70,54}, -{46,70,55}, -{46,70,56}, -{46,70,57}, -{46,70,58}, -{46,70,59}, -{46,70,60}, -{46,71,-85}, -{46,71,-84}, -{46,71,-83}, -{46,71,-82}, -{46,71,-81}, -{46,71,-80}, -{46,71,-79}, -{46,71,-78}, -{46,71,-77}, -{46,71,-76}, -{46,71,-75}, -{46,71,-74}, -{46,71,-73}, -{46,71,-72}, -{46,71,-71}, -{46,71,-70}, -{46,71,-69}, -{46,71,-68}, -{46,71,-67}, -{46,71,-66}, -{46,71,-65}, -{46,71,-64}, -{46,71,-63}, -{46,71,-62}, -{46,71,-61}, -{46,71,-60}, -{46,71,-59}, -{46,71,-58}, -{46,71,-57}, -{46,71,-56}, -{46,71,-55}, -{46,71,-54}, -{46,71,-53}, -{46,71,-52}, -{46,71,-51}, -{46,71,-50}, -{46,71,-49}, -{46,71,-48}, -{46,71,-47}, -{46,71,-46}, -{46,71,-45}, -{46,71,-44}, -{46,71,-43}, -{46,71,-42}, -{46,71,-41}, -{46,71,-40}, -{46,71,-39}, -{46,71,-38}, -{46,71,-37}, -{46,71,-36}, -{46,71,-35}, -{46,71,-34}, -{46,71,-33}, -{46,71,-32}, -{46,71,-31}, -{46,71,-30}, -{46,71,-29}, -{46,71,-28}, -{46,71,-27}, -{46,71,-26}, -{46,71,-25}, -{46,71,-24}, -{46,71,-23}, -{46,71,-22}, -{46,71,-21}, -{46,71,-20}, -{46,71,-19}, -{46,71,-18}, -{46,71,-17}, -{46,71,-16}, -{46,71,-15}, -{46,71,-14}, -{46,71,-13}, -{46,71,-12}, -{46,71,-11}, -{46,71,-10}, -{46,71,-9}, -{46,71,-8}, -{46,71,-7}, -{46,71,-6}, -{46,71,-5}, -{46,71,-4}, -{46,71,-3}, -{46,71,-2}, -{46,71,-1}, -{46,71,0}, -{46,71,1}, -{46,71,2}, -{46,71,3}, -{46,71,4}, -{46,71,5}, -{46,71,6}, -{46,71,7}, -{46,71,8}, -{46,71,9}, -{46,71,10}, -{46,71,11}, -{46,71,12}, -{46,71,13}, -{46,71,14}, -{46,71,15}, -{46,71,16}, -{46,71,17}, -{46,71,18}, -{46,71,19}, -{46,71,20}, -{46,71,21}, -{46,71,22}, -{46,71,23}, -{46,71,24}, -{46,71,25}, -{46,71,26}, -{46,71,27}, -{46,71,28}, -{46,71,29}, -{46,71,30}, -{46,71,31}, -{46,71,32}, -{46,71,33}, -{46,71,34}, -{46,71,35}, -{46,71,36}, -{46,71,37}, -{46,71,38}, -{46,71,39}, -{46,71,40}, -{46,71,41}, -{46,71,42}, -{46,71,43}, -{46,71,44}, -{46,71,45}, -{46,71,46}, -{46,71,47}, -{46,71,48}, -{46,71,49}, -{46,71,50}, -{46,71,51}, -{46,71,52}, -{46,71,53}, -{46,71,54}, -{46,71,55}, -{46,71,56}, -{46,71,57}, -{46,71,58}, -{46,71,59}, -{46,71,60}, -{46,72,-85}, -{46,72,-84}, -{46,72,-83}, -{46,72,-82}, -{46,72,-81}, -{46,72,-80}, -{46,72,-79}, -{46,72,-78}, -{46,72,-77}, -{46,72,-76}, -{46,72,-75}, -{46,72,-74}, -{46,72,-73}, -{46,72,-72}, -{46,72,-71}, -{46,72,-70}, -{46,72,-69}, -{46,72,-68}, -{46,72,-67}, -{46,72,-66}, -{46,72,-65}, -{46,72,-64}, -{46,72,-63}, -{46,72,-62}, -{46,72,-61}, -{46,72,-60}, -{46,72,-59}, -{46,72,-58}, -{46,72,-57}, -{46,72,-56}, -{46,72,-55}, -{46,72,-54}, -{46,72,-53}, -{46,72,-52}, -{46,72,-51}, -{46,72,-50}, -{46,72,-49}, -{46,72,-48}, -{46,72,-47}, -{46,72,-46}, -{46,72,-45}, -{46,72,-44}, -{46,72,-43}, -{46,72,-42}, -{46,72,-41}, -{46,72,-40}, -{46,72,-39}, -{46,72,-38}, -{46,72,-37}, -{46,72,-36}, -{46,72,-35}, -{46,72,-34}, -{46,72,-33}, -{46,72,-32}, -{46,72,-31}, -{46,72,-30}, -{46,72,-29}, -{46,72,-28}, -{46,72,-27}, -{46,72,-26}, -{46,72,-25}, -{46,72,-24}, -{46,72,-23}, -{46,72,-22}, -{46,72,-21}, -{46,72,-20}, -{46,72,-19}, -{46,72,-18}, -{46,72,-17}, -{46,72,-16}, -{46,72,-15}, -{46,72,-14}, -{46,72,-13}, -{46,72,-12}, -{46,72,-11}, -{46,72,-10}, -{46,72,-9}, -{46,72,-8}, -{46,72,-7}, -{46,72,-6}, -{46,72,-5}, -{46,72,-4}, -{46,72,-3}, -{46,72,-2}, -{46,72,-1}, -{46,72,0}, -{46,72,1}, -{46,72,2}, -{46,72,3}, -{46,72,4}, -{46,72,5}, -{46,72,6}, -{46,72,7}, -{46,72,8}, -{46,72,9}, -{46,72,10}, -{46,72,11}, -{46,72,12}, -{46,72,13}, -{46,72,14}, -{46,72,15}, -{46,72,16}, -{46,72,17}, -{46,72,18}, -{46,72,19}, -{46,72,20}, -{46,72,21}, -{46,72,22}, -{46,72,23}, -{46,72,24}, -{46,72,25}, -{46,72,26}, -{46,72,27}, -{46,72,28}, -{46,72,29}, -{46,72,30}, -{46,72,31}, -{46,72,32}, -{46,72,33}, -{46,72,34}, -{46,72,35}, -{46,72,36}, -{46,72,37}, -{46,72,38}, -{46,72,39}, -{46,72,40}, -{46,72,41}, -{46,72,42}, -{46,72,43}, -{46,72,44}, -{46,72,45}, -{46,72,46}, -{46,72,47}, -{46,72,48}, -{46,72,49}, -{46,72,50}, -{46,72,51}, -{46,72,52}, -{46,72,53}, -{46,72,54}, -{46,72,55}, -{46,73,-85}, -{46,73,-84}, -{46,73,-83}, -{46,73,-82}, -{46,73,-81}, -{46,73,-80}, -{46,73,-79}, -{46,73,-78}, -{46,73,-77}, -{46,73,-76}, -{46,73,-75}, -{46,73,-74}, -{46,73,-73}, -{46,73,-72}, -{46,73,-71}, -{46,73,-70}, -{46,73,-69}, -{46,73,-68}, -{46,73,-67}, -{46,73,-66}, -{46,73,-65}, -{46,73,-64}, -{46,73,-63}, -{46,73,-62}, -{46,73,-61}, -{46,73,-60}, -{46,73,-59}, -{46,73,-58}, -{46,73,-57}, -{46,73,-56}, -{46,73,-55}, -{46,73,-54}, -{46,73,-53}, -{46,73,-52}, -{46,73,-51}, -{46,73,-50}, -{46,73,-49}, -{46,73,-48}, -{46,73,-47}, -{46,73,-46}, -{46,73,-45}, -{46,73,-44}, -{46,73,-43}, -{46,73,-42}, -{46,73,-41}, -{46,73,-40}, -{46,73,-39}, -{46,73,-38}, -{46,73,-37}, -{46,73,-36}, -{46,73,-35}, -{46,73,-34}, -{46,73,-33}, -{46,73,-32}, -{46,73,-31}, -{46,73,-30}, -{46,73,-29}, -{46,73,-28}, -{46,73,-27}, -{46,73,-26}, -{46,73,-25}, -{46,73,-24}, -{46,73,-23}, -{46,73,-22}, -{46,73,-21}, -{46,73,-20}, -{46,73,-19}, -{46,73,-18}, -{46,73,-17}, -{46,73,-16}, -{46,73,-15}, -{46,73,-14}, -{46,73,-13}, -{46,73,-12}, -{46,73,-11}, -{46,73,-10}, -{46,73,-9}, -{46,73,-8}, -{46,73,-7}, -{46,73,-6}, -{46,73,-5}, -{46,73,-4}, -{46,73,-3}, -{46,73,-2}, -{46,73,-1}, -{46,73,0}, -{46,73,1}, -{46,73,2}, -{46,73,3}, -{46,73,4}, -{46,73,5}, -{46,73,6}, -{46,73,7}, -{46,73,8}, -{46,73,9}, -{46,73,10}, -{46,73,11}, -{46,73,12}, -{46,73,13}, -{46,73,14}, -{46,73,15}, -{46,73,16}, -{46,73,17}, -{46,73,18}, -{46,73,19}, -{46,73,20}, -{46,73,21}, -{46,73,22}, -{46,74,-85}, -{46,74,-84}, -{46,74,-83}, -{46,74,-82}, -{46,74,-81}, -{46,74,-80}, -{46,74,-79}, -{46,74,-78}, -{46,74,-77}, -{46,74,-76}, -{46,74,-75}, -{46,74,-74}, -{46,74,-73}, -{46,74,-72}, -{46,74,-71}, -{46,74,-70}, -{46,74,-69}, -{46,74,-68}, -{46,74,-67}, -{46,74,-66}, -{46,74,-65}, -{46,74,-64}, -{46,74,-63}, -{46,74,-62}, -{46,74,-61}, -{46,74,-60}, -{46,74,-59}, -{46,74,-58}, -{46,74,-57}, -{46,74,-56}, -{46,74,-55}, -{46,74,-54}, -{46,74,-53}, -{46,74,-52}, -{46,74,-51}, -{46,74,-50}, -{46,74,-49}, -{46,74,-48}, -{46,74,-47}, -{46,74,-46}, -{46,74,-45}, -{46,74,-44}, -{46,74,-43}, -{46,74,-42}, -{46,74,-41}, -{46,74,-40}, -{46,74,-39}, -{46,74,-38}, -{46,74,-37}, -{46,74,-36}, -{46,74,-35}, -{46,74,-34}, -{46,74,-33}, -{46,74,-32}, -{46,74,-31}, -{46,74,-30}, -{46,74,-29}, -{46,74,-28}, -{46,74,-27}, -{46,74,-26}, -{46,74,-25}, -{46,74,-24}, -{46,74,-23}, -{46,74,-22}, -{46,74,-21}, -{46,74,-20}, -{46,74,-19}, -{46,74,-18}, -{46,74,-17}, -{46,74,-16}, -{46,74,-15}, -{46,74,-14}, -{46,74,-13}, -{46,74,-12}, -{46,74,-11}, -{46,74,-10}, -{46,74,-9}, -{46,74,-8}, -{46,74,-7}, -{46,74,-6}, -{46,74,-5}, -{46,74,-4}, -{46,74,-3}, -{46,74,-2}, -{46,74,-1}, -{46,74,0}, -{46,74,1}, -{46,74,2}, -{46,74,3}, -{46,74,4}, -{46,74,5}, -{46,75,-85}, -{46,75,-84}, -{46,75,-83}, -{46,75,-82}, -{46,75,-81}, -{46,75,-80}, -{46,75,-79}, -{46,75,-78}, -{46,75,-77}, -{46,75,-76}, -{46,75,-75}, -{46,75,-74}, -{46,75,-73}, -{46,75,-72}, -{46,75,-71}, -{46,75,-70}, -{46,75,-69}, -{46,75,-68}, -{46,75,-67}, -{46,75,-66}, -{46,75,-65}, -{46,75,-64}, -{46,75,-63}, -{46,75,-62}, -{46,75,-61}, -{46,75,-60}, -{46,75,-59}, -{46,75,-58}, -{46,75,-57}, -{46,75,-56}, -{46,75,-55}, -{46,75,-54}, -{46,75,-53}, -{46,75,-52}, -{46,75,-51}, -{46,75,-50}, -{46,75,-49}, -{46,75,-48}, -{46,75,-47}, -{46,75,-46}, -{46,75,-45}, -{46,75,-44}, -{46,75,-43}, -{46,75,-42}, -{46,75,-41}, -{46,75,-40}, -{46,75,-39}, -{46,75,-38}, -{46,75,-37}, -{46,75,-36}, -{46,75,-35}, -{46,75,-34}, -{46,75,-33}, -{46,75,-32}, -{46,75,-31}, -{46,75,-30}, -{46,75,-29}, -{46,75,-28}, -{46,75,-27}, -{46,75,-26}, -{46,75,-25}, -{46,75,-24}, -{46,75,-23}, -{46,75,-22}, -{46,75,-21}, -{46,75,-20}, -{46,75,-19}, -{46,75,-18}, -{46,75,-17}, -{46,75,-16}, -{46,75,-15}, -{46,75,-14}, -{46,75,-13}, -{46,75,-12}, -{46,75,-11}, -{46,75,-10}, -{46,75,-9}, -{46,75,-8}, -{46,76,-84}, -{46,76,-83}, -{46,76,-82}, -{46,76,-81}, -{46,76,-80}, -{46,76,-79}, -{46,76,-78}, -{46,76,-77}, -{46,76,-76}, -{46,76,-75}, -{46,76,-74}, -{46,76,-73}, -{46,76,-72}, -{46,76,-71}, -{46,76,-70}, -{46,76,-69}, -{46,76,-68}, -{46,76,-67}, -{46,76,-66}, -{46,76,-65}, -{46,76,-64}, -{46,76,-63}, -{46,76,-62}, -{46,76,-61}, -{46,76,-60}, -{46,76,-59}, -{46,76,-58}, -{46,76,-57}, -{46,76,-56}, -{46,76,-55}, -{46,76,-54}, -{46,76,-53}, -{46,76,-52}, -{46,76,-51}, -{46,76,-50}, -{46,76,-49}, -{46,76,-48}, -{46,76,-47}, -{46,76,-46}, -{46,76,-45}, -{46,76,-44}, -{46,76,-43}, -{46,76,-42}, -{46,76,-41}, -{46,76,-40}, -{46,76,-39}, -{46,76,-38}, -{46,76,-37}, -{46,76,-36}, -{46,76,-35}, -{46,76,-34}, -{46,76,-33}, -{46,76,-32}, -{46,76,-31}, -{46,76,-30}, -{46,76,-29}, -{46,76,-28}, -{46,76,-27}, -{46,76,-26}, -{46,76,-25}, -{46,76,-24}, -{46,76,-23}, -{46,76,-22}, -{46,76,-21}, -{46,76,-20}, -{46,76,-19}, -{46,77,-84}, -{46,77,-83}, -{46,77,-82}, -{46,77,-81}, -{46,77,-80}, -{46,77,-79}, -{46,77,-78}, -{46,77,-77}, -{46,77,-76}, -{46,77,-75}, -{46,77,-74}, -{46,77,-73}, -{46,77,-72}, -{46,77,-71}, -{46,77,-70}, -{46,77,-69}, -{46,77,-68}, -{46,77,-67}, -{46,77,-66}, -{46,77,-65}, -{46,77,-64}, -{46,77,-63}, -{46,77,-62}, -{46,77,-61}, -{46,77,-60}, -{46,77,-59}, -{46,77,-58}, -{46,77,-57}, -{46,77,-56}, -{46,77,-55}, -{46,77,-54}, -{46,77,-53}, -{46,77,-52}, -{46,77,-51}, -{46,77,-50}, -{46,77,-49}, -{46,77,-48}, -{46,77,-47}, -{46,77,-46}, -{46,77,-45}, -{46,77,-44}, -{46,77,-43}, -{46,77,-42}, -{46,77,-41}, -{46,77,-40}, -{46,77,-39}, -{46,77,-38}, -{46,77,-37}, -{46,77,-36}, -{46,77,-35}, -{46,77,-34}, -{46,77,-33}, -{46,77,-32}, -{46,77,-31}, -{46,77,-30}, -{46,77,-29}, -{46,77,-28}, -{46,78,-84}, -{46,78,-83}, -{46,78,-82}, -{46,78,-81}, -{46,78,-80}, -{46,78,-79}, -{46,78,-78}, -{46,78,-77}, -{46,78,-76}, -{46,78,-75}, -{46,78,-74}, -{46,78,-73}, -{46,78,-72}, -{46,78,-71}, -{46,78,-70}, -{46,78,-69}, -{46,78,-68}, -{46,78,-67}, -{46,78,-66}, -{46,78,-65}, -{46,78,-64}, -{46,78,-63}, -{46,78,-62}, -{46,78,-61}, -{46,78,-60}, -{46,78,-59}, -{46,78,-58}, -{46,78,-57}, -{46,78,-56}, -{46,78,-55}, -{46,78,-54}, -{46,78,-53}, -{46,78,-52}, -{46,78,-51}, -{46,78,-50}, -{46,78,-49}, -{46,78,-48}, -{46,78,-47}, -{46,78,-46}, -{46,78,-45}, -{46,78,-44}, -{46,78,-43}, -{46,78,-42}, -{46,78,-41}, -{46,78,-40}, -{46,78,-39}, -{46,78,-38}, -{46,78,-37}, -{46,78,-36}, -{46,79,-84}, -{46,79,-83}, -{46,79,-82}, -{46,79,-81}, -{46,79,-80}, -{46,79,-79}, -{46,79,-78}, -{46,79,-77}, -{46,79,-76}, -{46,79,-75}, -{46,79,-74}, -{46,79,-73}, -{46,79,-72}, -{46,79,-71}, -{46,79,-70}, -{46,79,-69}, -{46,79,-68}, -{46,79,-67}, -{46,79,-66}, -{46,79,-65}, -{46,79,-64}, -{46,79,-63}, -{46,79,-62}, -{46,79,-61}, -{46,79,-60}, -{46,79,-59}, -{46,79,-58}, -{46,79,-57}, -{46,79,-56}, -{46,79,-55}, -{46,79,-54}, -{46,79,-53}, -{46,79,-52}, -{46,79,-51}, -{46,79,-50}, -{46,79,-49}, -{46,79,-48}, -{46,79,-47}, -{46,79,-46}, -{46,79,-45}, -{46,79,-44}, -{46,80,-84}, -{46,80,-83}, -{46,80,-82}, -{46,80,-81}, -{46,80,-80}, -{46,80,-79}, -{46,80,-78}, -{46,80,-77}, -{46,80,-76}, -{46,80,-75}, -{46,80,-74}, -{46,80,-73}, -{46,80,-72}, -{46,80,-71}, -{46,80,-70}, -{46,80,-69}, -{46,80,-68}, -{46,80,-67}, -{46,80,-66}, -{46,80,-65}, -{46,80,-64}, -{46,80,-63}, -{46,80,-62}, -{46,80,-61}, -{46,80,-60}, -{46,80,-59}, -{46,80,-58}, -{46,80,-57}, -{46,80,-56}, -{46,80,-55}, -{46,80,-54}, -{46,80,-53}, -{46,80,-52}, -{46,80,-51}, -{46,80,-50}, -{46,81,-84}, -{46,81,-83}, -{46,81,-82}, -{46,81,-81}, -{46,81,-80}, -{46,81,-79}, -{46,81,-78}, -{46,81,-77}, -{46,81,-76}, -{46,81,-75}, -{46,81,-74}, -{46,81,-73}, -{46,81,-72}, -{46,81,-71}, -{46,81,-70}, -{46,81,-69}, -{46,81,-68}, -{46,81,-67}, -{46,81,-66}, -{46,81,-65}, -{46,81,-64}, -{46,81,-63}, -{46,81,-62}, -{46,81,-61}, -{46,81,-60}, -{46,81,-59}, -{46,81,-58}, -{46,81,-57}, -{46,81,-56}, -{46,82,-84}, -{46,82,-83}, -{46,82,-82}, -{46,82,-81}, -{46,82,-80}, -{46,82,-79}, -{46,82,-78}, -{46,82,-77}, -{46,82,-76}, -{46,82,-75}, -{46,82,-74}, -{46,82,-73}, -{46,82,-72}, -{46,82,-71}, -{46,82,-70}, -{46,82,-69}, -{46,82,-68}, -{46,82,-67}, -{46,82,-66}, -{46,82,-65}, -{46,82,-64}, -{46,82,-63}, -{46,82,-62}, -{46,83,-84}, -{46,83,-83}, -{46,83,-82}, -{46,83,-81}, -{46,83,-80}, -{46,83,-79}, -{46,83,-78}, -{46,83,-77}, -{46,83,-76}, -{46,83,-75}, -{46,83,-74}, -{46,83,-73}, -{46,83,-72}, -{46,83,-71}, -{46,83,-70}, -{46,83,-69}, -{46,83,-68}, -{46,84,-84}, -{46,84,-83}, -{46,84,-82}, -{46,84,-81}, -{46,84,-80}, -{46,84,-79}, -{46,84,-78}, -{46,84,-77}, -{46,84,-76}, -{46,84,-75}, -{46,84,-74}, -{46,84,-73}, -{46,85,-84}, -{46,85,-83}, -{46,85,-82}, -{46,85,-81}, -{46,85,-80}, -{46,85,-79}, -{46,85,-78}, -{46,86,-84}, -{46,86,-83}, -{46,86,-82}, -{47,-52,48}, -{47,-52,49}, -{47,-52,50}, -{47,-51,44}, -{47,-51,45}, -{47,-51,46}, -{47,-51,47}, -{47,-51,48}, -{47,-51,49}, -{47,-51,50}, -{47,-50,40}, -{47,-50,41}, -{47,-50,42}, -{47,-50,43}, -{47,-50,44}, -{47,-50,45}, -{47,-50,46}, -{47,-50,47}, -{47,-50,48}, -{47,-50,49}, -{47,-50,50}, -{47,-49,36}, -{47,-49,37}, -{47,-49,38}, -{47,-49,39}, -{47,-49,40}, -{47,-49,41}, -{47,-49,42}, -{47,-49,43}, -{47,-49,44}, -{47,-49,45}, -{47,-49,46}, -{47,-49,47}, -{47,-49,48}, -{47,-49,49}, -{47,-49,50}, -{47,-48,33}, -{47,-48,34}, -{47,-48,35}, -{47,-48,36}, -{47,-48,37}, -{47,-48,38}, -{47,-48,39}, -{47,-48,40}, -{47,-48,41}, -{47,-48,42}, -{47,-48,43}, -{47,-48,44}, -{47,-48,45}, -{47,-48,46}, -{47,-48,47}, -{47,-48,48}, -{47,-48,49}, -{47,-48,50}, -{47,-47,30}, -{47,-47,31}, -{47,-47,32}, -{47,-47,33}, -{47,-47,34}, -{47,-47,35}, -{47,-47,36}, -{47,-47,37}, -{47,-47,38}, -{47,-47,39}, -{47,-47,40}, -{47,-47,41}, -{47,-47,42}, -{47,-47,43}, -{47,-47,44}, -{47,-47,45}, -{47,-47,46}, -{47,-47,47}, -{47,-47,48}, -{47,-47,49}, -{47,-47,50}, -{47,-46,27}, -{47,-46,28}, -{47,-46,29}, -{47,-46,30}, -{47,-46,31}, -{47,-46,32}, -{47,-46,33}, -{47,-46,34}, -{47,-46,35}, -{47,-46,36}, -{47,-46,37}, -{47,-46,38}, -{47,-46,39}, -{47,-46,40}, -{47,-46,41}, -{47,-46,42}, -{47,-46,43}, -{47,-46,44}, -{47,-46,45}, -{47,-46,46}, -{47,-46,47}, -{47,-46,48}, -{47,-46,49}, -{47,-46,50}, -{47,-45,25}, -{47,-45,26}, -{47,-45,27}, -{47,-45,28}, -{47,-45,29}, -{47,-45,30}, -{47,-45,31}, -{47,-45,32}, -{47,-45,33}, -{47,-45,34}, -{47,-45,35}, -{47,-45,36}, -{47,-45,37}, -{47,-45,38}, -{47,-45,39}, -{47,-45,40}, -{47,-45,41}, -{47,-45,42}, -{47,-45,43}, -{47,-45,44}, -{47,-45,45}, -{47,-45,46}, -{47,-45,47}, -{47,-45,48}, -{47,-45,49}, -{47,-45,50}, -{47,-45,51}, -{47,-44,22}, -{47,-44,23}, -{47,-44,24}, -{47,-44,25}, -{47,-44,26}, -{47,-44,27}, -{47,-44,28}, -{47,-44,29}, -{47,-44,30}, -{47,-44,31}, -{47,-44,32}, -{47,-44,33}, -{47,-44,34}, -{47,-44,35}, -{47,-44,36}, -{47,-44,37}, -{47,-44,38}, -{47,-44,39}, -{47,-44,40}, -{47,-44,41}, -{47,-44,42}, -{47,-44,43}, -{47,-44,44}, -{47,-44,45}, -{47,-44,46}, -{47,-44,47}, -{47,-44,48}, -{47,-44,49}, -{47,-44,50}, -{47,-44,51}, -{47,-43,20}, -{47,-43,21}, -{47,-43,22}, -{47,-43,23}, -{47,-43,24}, -{47,-43,25}, -{47,-43,26}, -{47,-43,27}, -{47,-43,28}, -{47,-43,29}, -{47,-43,30}, -{47,-43,31}, -{47,-43,32}, -{47,-43,33}, -{47,-43,34}, -{47,-43,35}, -{47,-43,36}, -{47,-43,37}, -{47,-43,38}, -{47,-43,39}, -{47,-43,40}, -{47,-43,41}, -{47,-43,42}, -{47,-43,43}, -{47,-43,44}, -{47,-43,45}, -{47,-43,46}, -{47,-43,47}, -{47,-43,48}, -{47,-43,49}, -{47,-43,50}, -{47,-43,51}, -{47,-42,17}, -{47,-42,18}, -{47,-42,19}, -{47,-42,20}, -{47,-42,21}, -{47,-42,22}, -{47,-42,23}, -{47,-42,24}, -{47,-42,25}, -{47,-42,26}, -{47,-42,27}, -{47,-42,28}, -{47,-42,29}, -{47,-42,30}, -{47,-42,31}, -{47,-42,32}, -{47,-42,33}, -{47,-42,34}, -{47,-42,35}, -{47,-42,36}, -{47,-42,37}, -{47,-42,38}, -{47,-42,39}, -{47,-42,40}, -{47,-42,41}, -{47,-42,42}, -{47,-42,43}, -{47,-42,44}, -{47,-42,45}, -{47,-42,46}, -{47,-42,47}, -{47,-42,48}, -{47,-42,49}, -{47,-42,50}, -{47,-42,51}, -{47,-41,15}, -{47,-41,16}, -{47,-41,17}, -{47,-41,18}, -{47,-41,19}, -{47,-41,20}, -{47,-41,21}, -{47,-41,22}, -{47,-41,23}, -{47,-41,24}, -{47,-41,25}, -{47,-41,26}, -{47,-41,27}, -{47,-41,28}, -{47,-41,29}, -{47,-41,30}, -{47,-41,31}, -{47,-41,32}, -{47,-41,33}, -{47,-41,34}, -{47,-41,35}, -{47,-41,36}, -{47,-41,37}, -{47,-41,38}, -{47,-41,39}, -{47,-41,40}, -{47,-41,41}, -{47,-41,42}, -{47,-41,43}, -{47,-41,44}, -{47,-41,45}, -{47,-41,46}, -{47,-41,47}, -{47,-41,48}, -{47,-41,49}, -{47,-41,50}, -{47,-41,51}, -{47,-40,13}, -{47,-40,14}, -{47,-40,15}, -{47,-40,16}, -{47,-40,17}, -{47,-40,18}, -{47,-40,19}, -{47,-40,20}, -{47,-40,21}, -{47,-40,22}, -{47,-40,23}, -{47,-40,24}, -{47,-40,25}, -{47,-40,26}, -{47,-40,27}, -{47,-40,28}, -{47,-40,29}, -{47,-40,30}, -{47,-40,31}, -{47,-40,32}, -{47,-40,33}, -{47,-40,34}, -{47,-40,35}, -{47,-40,36}, -{47,-40,37}, -{47,-40,38}, -{47,-40,39}, -{47,-40,40}, -{47,-40,41}, -{47,-40,42}, -{47,-40,43}, -{47,-40,44}, -{47,-40,45}, -{47,-40,46}, -{47,-40,47}, -{47,-40,48}, -{47,-40,49}, -{47,-40,50}, -{47,-40,51}, -{47,-39,11}, -{47,-39,12}, -{47,-39,13}, -{47,-39,14}, -{47,-39,15}, -{47,-39,16}, -{47,-39,17}, -{47,-39,18}, -{47,-39,19}, -{47,-39,20}, -{47,-39,21}, -{47,-39,22}, -{47,-39,23}, -{47,-39,24}, -{47,-39,25}, -{47,-39,26}, -{47,-39,27}, -{47,-39,28}, -{47,-39,29}, -{47,-39,30}, -{47,-39,31}, -{47,-39,32}, -{47,-39,33}, -{47,-39,34}, -{47,-39,35}, -{47,-39,36}, -{47,-39,37}, -{47,-39,38}, -{47,-39,39}, -{47,-39,40}, -{47,-39,41}, -{47,-39,42}, -{47,-39,43}, -{47,-39,44}, -{47,-39,45}, -{47,-39,46}, -{47,-39,47}, -{47,-39,48}, -{47,-39,49}, -{47,-39,50}, -{47,-39,51}, -{47,-38,9}, -{47,-38,10}, -{47,-38,11}, -{47,-38,12}, -{47,-38,13}, -{47,-38,14}, -{47,-38,15}, -{47,-38,16}, -{47,-38,17}, -{47,-38,18}, -{47,-38,19}, -{47,-38,20}, -{47,-38,21}, -{47,-38,22}, -{47,-38,23}, -{47,-38,24}, -{47,-38,25}, -{47,-38,26}, -{47,-38,27}, -{47,-38,28}, -{47,-38,29}, -{47,-38,30}, -{47,-38,31}, -{47,-38,32}, -{47,-38,33}, -{47,-38,34}, -{47,-38,35}, -{47,-38,36}, -{47,-38,37}, -{47,-38,38}, -{47,-38,39}, -{47,-38,40}, -{47,-38,41}, -{47,-38,42}, -{47,-38,43}, -{47,-38,44}, -{47,-38,45}, -{47,-38,46}, -{47,-38,47}, -{47,-38,48}, -{47,-38,49}, -{47,-38,50}, -{47,-38,51}, -{47,-37,7}, -{47,-37,8}, -{47,-37,9}, -{47,-37,10}, -{47,-37,11}, -{47,-37,12}, -{47,-37,13}, -{47,-37,14}, -{47,-37,15}, -{47,-37,16}, -{47,-37,17}, -{47,-37,18}, -{47,-37,19}, -{47,-37,20}, -{47,-37,21}, -{47,-37,22}, -{47,-37,23}, -{47,-37,24}, -{47,-37,25}, -{47,-37,26}, -{47,-37,27}, -{47,-37,28}, -{47,-37,29}, -{47,-37,30}, -{47,-37,31}, -{47,-37,32}, -{47,-37,33}, -{47,-37,34}, -{47,-37,35}, -{47,-37,36}, -{47,-37,37}, -{47,-37,38}, -{47,-37,39}, -{47,-37,40}, -{47,-37,41}, -{47,-37,42}, -{47,-37,43}, -{47,-37,44}, -{47,-37,45}, -{47,-37,46}, -{47,-37,47}, -{47,-37,48}, -{47,-37,49}, -{47,-37,50}, -{47,-37,51}, -{47,-36,5}, -{47,-36,6}, -{47,-36,7}, -{47,-36,8}, -{47,-36,9}, -{47,-36,10}, -{47,-36,11}, -{47,-36,12}, -{47,-36,13}, -{47,-36,14}, -{47,-36,15}, -{47,-36,16}, -{47,-36,17}, -{47,-36,18}, -{47,-36,19}, -{47,-36,20}, -{47,-36,21}, -{47,-36,22}, -{47,-36,23}, -{47,-36,24}, -{47,-36,25}, -{47,-36,26}, -{47,-36,27}, -{47,-36,28}, -{47,-36,29}, -{47,-36,30}, -{47,-36,31}, -{47,-36,32}, -{47,-36,33}, -{47,-36,34}, -{47,-36,35}, -{47,-36,36}, -{47,-36,37}, -{47,-36,38}, -{47,-36,39}, -{47,-36,40}, -{47,-36,41}, -{47,-36,42}, -{47,-36,43}, -{47,-36,44}, -{47,-36,45}, -{47,-36,46}, -{47,-36,47}, -{47,-36,48}, -{47,-36,49}, -{47,-36,50}, -{47,-36,51}, -{47,-35,3}, -{47,-35,4}, -{47,-35,5}, -{47,-35,6}, -{47,-35,7}, -{47,-35,8}, -{47,-35,9}, -{47,-35,10}, -{47,-35,11}, -{47,-35,12}, -{47,-35,13}, -{47,-35,14}, -{47,-35,15}, -{47,-35,16}, -{47,-35,17}, -{47,-35,18}, -{47,-35,19}, -{47,-35,20}, -{47,-35,21}, -{47,-35,22}, -{47,-35,23}, -{47,-35,24}, -{47,-35,25}, -{47,-35,26}, -{47,-35,27}, -{47,-35,28}, -{47,-35,29}, -{47,-35,30}, -{47,-35,31}, -{47,-35,32}, -{47,-35,33}, -{47,-35,34}, -{47,-35,35}, -{47,-35,36}, -{47,-35,37}, -{47,-35,38}, -{47,-35,39}, -{47,-35,40}, -{47,-35,41}, -{47,-35,42}, -{47,-35,43}, -{47,-35,44}, -{47,-35,45}, -{47,-35,46}, -{47,-35,47}, -{47,-35,48}, -{47,-35,49}, -{47,-35,50}, -{47,-35,51}, -{47,-34,1}, -{47,-34,2}, -{47,-34,3}, -{47,-34,4}, -{47,-34,5}, -{47,-34,6}, -{47,-34,7}, -{47,-34,8}, -{47,-34,9}, -{47,-34,10}, -{47,-34,11}, -{47,-34,12}, -{47,-34,13}, -{47,-34,14}, -{47,-34,15}, -{47,-34,16}, -{47,-34,17}, -{47,-34,18}, -{47,-34,19}, -{47,-34,20}, -{47,-34,21}, -{47,-34,22}, -{47,-34,23}, -{47,-34,24}, -{47,-34,25}, -{47,-34,26}, -{47,-34,27}, -{47,-34,28}, -{47,-34,29}, -{47,-34,30}, -{47,-34,31}, -{47,-34,32}, -{47,-34,33}, -{47,-34,34}, -{47,-34,35}, -{47,-34,36}, -{47,-34,37}, -{47,-34,38}, -{47,-34,39}, -{47,-34,40}, -{47,-34,41}, -{47,-34,42}, -{47,-34,43}, -{47,-34,44}, -{47,-34,45}, -{47,-34,46}, -{47,-34,47}, -{47,-34,48}, -{47,-34,49}, -{47,-34,50}, -{47,-34,51}, -{47,-33,0}, -{47,-33,1}, -{47,-33,2}, -{47,-33,3}, -{47,-33,4}, -{47,-33,5}, -{47,-33,6}, -{47,-33,7}, -{47,-33,8}, -{47,-33,9}, -{47,-33,10}, -{47,-33,11}, -{47,-33,12}, -{47,-33,13}, -{47,-33,14}, -{47,-33,15}, -{47,-33,16}, -{47,-33,17}, -{47,-33,18}, -{47,-33,19}, -{47,-33,20}, -{47,-33,21}, -{47,-33,22}, -{47,-33,23}, -{47,-33,24}, -{47,-33,25}, -{47,-33,26}, -{47,-33,27}, -{47,-33,28}, -{47,-33,29}, -{47,-33,30}, -{47,-33,31}, -{47,-33,32}, -{47,-33,33}, -{47,-33,34}, -{47,-33,35}, -{47,-33,36}, -{47,-33,37}, -{47,-33,38}, -{47,-33,39}, -{47,-33,40}, -{47,-33,41}, -{47,-33,42}, -{47,-33,43}, -{47,-33,44}, -{47,-33,45}, -{47,-33,46}, -{47,-33,47}, -{47,-33,48}, -{47,-33,49}, -{47,-33,50}, -{47,-33,51}, -{47,-32,-2}, -{47,-32,-1}, -{47,-32,0}, -{47,-32,1}, -{47,-32,2}, -{47,-32,3}, -{47,-32,4}, -{47,-32,5}, -{47,-32,6}, -{47,-32,7}, -{47,-32,8}, -{47,-32,9}, -{47,-32,10}, -{47,-32,11}, -{47,-32,12}, -{47,-32,13}, -{47,-32,14}, -{47,-32,15}, -{47,-32,16}, -{47,-32,17}, -{47,-32,18}, -{47,-32,19}, -{47,-32,20}, -{47,-32,21}, -{47,-32,22}, -{47,-32,23}, -{47,-32,24}, -{47,-32,25}, -{47,-32,26}, -{47,-32,27}, -{47,-32,28}, -{47,-32,29}, -{47,-32,30}, -{47,-32,31}, -{47,-32,32}, -{47,-32,33}, -{47,-32,34}, -{47,-32,35}, -{47,-32,36}, -{47,-32,37}, -{47,-32,38}, -{47,-32,39}, -{47,-32,40}, -{47,-32,41}, -{47,-32,42}, -{47,-32,43}, -{47,-32,44}, -{47,-32,45}, -{47,-32,46}, -{47,-32,47}, -{47,-32,48}, -{47,-32,49}, -{47,-32,50}, -{47,-32,51}, -{47,-31,-4}, -{47,-31,-3}, -{47,-31,-2}, -{47,-31,-1}, -{47,-31,0}, -{47,-31,1}, -{47,-31,2}, -{47,-31,3}, -{47,-31,4}, -{47,-31,5}, -{47,-31,6}, -{47,-31,7}, -{47,-31,8}, -{47,-31,9}, -{47,-31,10}, -{47,-31,11}, -{47,-31,12}, -{47,-31,13}, -{47,-31,14}, -{47,-31,15}, -{47,-31,16}, -{47,-31,17}, -{47,-31,18}, -{47,-31,19}, -{47,-31,20}, -{47,-31,21}, -{47,-31,22}, -{47,-31,23}, -{47,-31,24}, -{47,-31,25}, -{47,-31,26}, -{47,-31,27}, -{47,-31,28}, -{47,-31,29}, -{47,-31,30}, -{47,-31,31}, -{47,-31,32}, -{47,-31,33}, -{47,-31,34}, -{47,-31,35}, -{47,-31,36}, -{47,-31,37}, -{47,-31,38}, -{47,-31,39}, -{47,-31,40}, -{47,-31,41}, -{47,-31,42}, -{47,-31,43}, -{47,-31,44}, -{47,-31,45}, -{47,-31,46}, -{47,-31,47}, -{47,-31,48}, -{47,-31,49}, -{47,-31,50}, -{47,-31,51}, -{47,-30,-5}, -{47,-30,-4}, -{47,-30,-3}, -{47,-30,-2}, -{47,-30,-1}, -{47,-30,0}, -{47,-30,1}, -{47,-30,2}, -{47,-30,3}, -{47,-30,4}, -{47,-30,5}, -{47,-30,6}, -{47,-30,7}, -{47,-30,8}, -{47,-30,9}, -{47,-30,10}, -{47,-30,11}, -{47,-30,12}, -{47,-30,13}, -{47,-30,14}, -{47,-30,15}, -{47,-30,16}, -{47,-30,17}, -{47,-30,18}, -{47,-30,19}, -{47,-30,20}, -{47,-30,21}, -{47,-30,22}, -{47,-30,23}, -{47,-30,24}, -{47,-30,25}, -{47,-30,26}, -{47,-30,27}, -{47,-30,28}, -{47,-30,29}, -{47,-30,30}, -{47,-30,31}, -{47,-30,32}, -{47,-30,33}, -{47,-30,34}, -{47,-30,35}, -{47,-30,36}, -{47,-30,37}, -{47,-30,38}, -{47,-30,39}, -{47,-30,40}, -{47,-30,41}, -{47,-30,42}, -{47,-30,43}, -{47,-30,44}, -{47,-30,45}, -{47,-30,46}, -{47,-30,47}, -{47,-30,48}, -{47,-30,49}, -{47,-30,50}, -{47,-30,51}, -{47,-29,-7}, -{47,-29,-6}, -{47,-29,-5}, -{47,-29,-4}, -{47,-29,-3}, -{47,-29,-2}, -{47,-29,-1}, -{47,-29,0}, -{47,-29,1}, -{47,-29,2}, -{47,-29,3}, -{47,-29,4}, -{47,-29,5}, -{47,-29,6}, -{47,-29,7}, -{47,-29,8}, -{47,-29,9}, -{47,-29,10}, -{47,-29,11}, -{47,-29,12}, -{47,-29,13}, -{47,-29,14}, -{47,-29,15}, -{47,-29,16}, -{47,-29,17}, -{47,-29,18}, -{47,-29,19}, -{47,-29,20}, -{47,-29,21}, -{47,-29,22}, -{47,-29,23}, -{47,-29,24}, -{47,-29,25}, -{47,-29,26}, -{47,-29,27}, -{47,-29,28}, -{47,-29,29}, -{47,-29,30}, -{47,-29,31}, -{47,-29,32}, -{47,-29,33}, -{47,-29,34}, -{47,-29,35}, -{47,-29,36}, -{47,-29,37}, -{47,-29,38}, -{47,-29,39}, -{47,-29,40}, -{47,-29,41}, -{47,-29,42}, -{47,-29,43}, -{47,-29,44}, -{47,-29,45}, -{47,-29,46}, -{47,-29,47}, -{47,-29,48}, -{47,-29,49}, -{47,-29,50}, -{47,-29,51}, -{47,-28,-9}, -{47,-28,-8}, -{47,-28,-7}, -{47,-28,-6}, -{47,-28,-5}, -{47,-28,-4}, -{47,-28,-3}, -{47,-28,-2}, -{47,-28,-1}, -{47,-28,0}, -{47,-28,1}, -{47,-28,2}, -{47,-28,3}, -{47,-28,4}, -{47,-28,5}, -{47,-28,6}, -{47,-28,7}, -{47,-28,8}, -{47,-28,9}, -{47,-28,10}, -{47,-28,11}, -{47,-28,12}, -{47,-28,13}, -{47,-28,14}, -{47,-28,15}, -{47,-28,16}, -{47,-28,17}, -{47,-28,18}, -{47,-28,19}, -{47,-28,20}, -{47,-28,21}, -{47,-28,22}, -{47,-28,23}, -{47,-28,24}, -{47,-28,25}, -{47,-28,26}, -{47,-28,27}, -{47,-28,28}, -{47,-28,29}, -{47,-28,30}, -{47,-28,31}, -{47,-28,32}, -{47,-28,33}, -{47,-28,34}, -{47,-28,35}, -{47,-28,36}, -{47,-28,37}, -{47,-28,38}, -{47,-28,39}, -{47,-28,40}, -{47,-28,41}, -{47,-28,42}, -{47,-28,43}, -{47,-28,44}, -{47,-28,45}, -{47,-28,46}, -{47,-28,47}, -{47,-28,48}, -{47,-28,49}, -{47,-28,50}, -{47,-28,51}, -{47,-27,-10}, -{47,-27,-9}, -{47,-27,-8}, -{47,-27,-7}, -{47,-27,-6}, -{47,-27,-5}, -{47,-27,-4}, -{47,-27,-3}, -{47,-27,-2}, -{47,-27,-1}, -{47,-27,0}, -{47,-27,1}, -{47,-27,2}, -{47,-27,3}, -{47,-27,4}, -{47,-27,5}, -{47,-27,6}, -{47,-27,7}, -{47,-27,8}, -{47,-27,9}, -{47,-27,10}, -{47,-27,11}, -{47,-27,12}, -{47,-27,13}, -{47,-27,14}, -{47,-27,15}, -{47,-27,16}, -{47,-27,17}, -{47,-27,18}, -{47,-27,19}, -{47,-27,20}, -{47,-27,21}, -{47,-27,22}, -{47,-27,23}, -{47,-27,24}, -{47,-27,25}, -{47,-27,26}, -{47,-27,27}, -{47,-27,28}, -{47,-27,29}, -{47,-27,30}, -{47,-27,31}, -{47,-27,32}, -{47,-27,33}, -{47,-27,34}, -{47,-27,35}, -{47,-27,36}, -{47,-27,37}, -{47,-27,38}, -{47,-27,39}, -{47,-27,40}, -{47,-27,41}, -{47,-27,42}, -{47,-27,43}, -{47,-27,44}, -{47,-27,45}, -{47,-27,46}, -{47,-27,47}, -{47,-27,48}, -{47,-27,49}, -{47,-27,50}, -{47,-27,51}, -{47,-26,-12}, -{47,-26,-11}, -{47,-26,-10}, -{47,-26,-9}, -{47,-26,-8}, -{47,-26,-7}, -{47,-26,-6}, -{47,-26,-5}, -{47,-26,-4}, -{47,-26,-3}, -{47,-26,-2}, -{47,-26,-1}, -{47,-26,0}, -{47,-26,1}, -{47,-26,2}, -{47,-26,3}, -{47,-26,4}, -{47,-26,5}, -{47,-26,6}, -{47,-26,7}, -{47,-26,8}, -{47,-26,9}, -{47,-26,10}, -{47,-26,11}, -{47,-26,12}, -{47,-26,13}, -{47,-26,14}, -{47,-26,15}, -{47,-26,16}, -{47,-26,17}, -{47,-26,18}, -{47,-26,19}, -{47,-26,20}, -{47,-26,21}, -{47,-26,22}, -{47,-26,23}, -{47,-26,24}, -{47,-26,25}, -{47,-26,26}, -{47,-26,27}, -{47,-26,28}, -{47,-26,29}, -{47,-26,30}, -{47,-26,31}, -{47,-26,32}, -{47,-26,33}, -{47,-26,34}, -{47,-26,35}, -{47,-26,36}, -{47,-26,37}, -{47,-26,38}, -{47,-26,39}, -{47,-26,40}, -{47,-26,41}, -{47,-26,42}, -{47,-26,43}, -{47,-26,44}, -{47,-26,45}, -{47,-26,46}, -{47,-26,47}, -{47,-26,48}, -{47,-26,49}, -{47,-26,50}, -{47,-26,51}, -{47,-25,-13}, -{47,-25,-12}, -{47,-25,-11}, -{47,-25,-10}, -{47,-25,-9}, -{47,-25,-8}, -{47,-25,-7}, -{47,-25,-6}, -{47,-25,-5}, -{47,-25,-4}, -{47,-25,-3}, -{47,-25,-2}, -{47,-25,-1}, -{47,-25,0}, -{47,-25,1}, -{47,-25,2}, -{47,-25,3}, -{47,-25,4}, -{47,-25,5}, -{47,-25,6}, -{47,-25,7}, -{47,-25,8}, -{47,-25,9}, -{47,-25,10}, -{47,-25,11}, -{47,-25,12}, -{47,-25,13}, -{47,-25,14}, -{47,-25,15}, -{47,-25,16}, -{47,-25,17}, -{47,-25,18}, -{47,-25,19}, -{47,-25,20}, -{47,-25,21}, -{47,-25,22}, -{47,-25,23}, -{47,-25,24}, -{47,-25,25}, -{47,-25,26}, -{47,-25,27}, -{47,-25,28}, -{47,-25,29}, -{47,-25,30}, -{47,-25,31}, -{47,-25,32}, -{47,-25,33}, -{47,-25,34}, -{47,-25,35}, -{47,-25,36}, -{47,-25,37}, -{47,-25,38}, -{47,-25,39}, -{47,-25,40}, -{47,-25,41}, -{47,-25,42}, -{47,-25,43}, -{47,-25,44}, -{47,-25,45}, -{47,-25,46}, -{47,-25,47}, -{47,-25,48}, -{47,-25,49}, -{47,-25,50}, -{47,-25,51}, -{47,-25,52}, -{47,-24,-15}, -{47,-24,-14}, -{47,-24,-13}, -{47,-24,-12}, -{47,-24,-11}, -{47,-24,-10}, -{47,-24,-9}, -{47,-24,-8}, -{47,-24,-7}, -{47,-24,-6}, -{47,-24,-5}, -{47,-24,-4}, -{47,-24,-3}, -{47,-24,-2}, -{47,-24,-1}, -{47,-24,0}, -{47,-24,1}, -{47,-24,2}, -{47,-24,3}, -{47,-24,4}, -{47,-24,5}, -{47,-24,6}, -{47,-24,7}, -{47,-24,8}, -{47,-24,9}, -{47,-24,10}, -{47,-24,11}, -{47,-24,12}, -{47,-24,13}, -{47,-24,14}, -{47,-24,15}, -{47,-24,16}, -{47,-24,17}, -{47,-24,18}, -{47,-24,19}, -{47,-24,20}, -{47,-24,21}, -{47,-24,22}, -{47,-24,23}, -{47,-24,24}, -{47,-24,25}, -{47,-24,26}, -{47,-24,27}, -{47,-24,28}, -{47,-24,29}, -{47,-24,30}, -{47,-24,31}, -{47,-24,32}, -{47,-24,33}, -{47,-24,34}, -{47,-24,35}, -{47,-24,36}, -{47,-24,37}, -{47,-24,38}, -{47,-24,39}, -{47,-24,40}, -{47,-24,41}, -{47,-24,42}, -{47,-24,43}, -{47,-24,44}, -{47,-24,45}, -{47,-24,46}, -{47,-24,47}, -{47,-24,48}, -{47,-24,49}, -{47,-24,50}, -{47,-24,51}, -{47,-24,52}, -{47,-23,-16}, -{47,-23,-15}, -{47,-23,-14}, -{47,-23,-13}, -{47,-23,-12}, -{47,-23,-11}, -{47,-23,-10}, -{47,-23,-9}, -{47,-23,-8}, -{47,-23,-7}, -{47,-23,-6}, -{47,-23,-5}, -{47,-23,-4}, -{47,-23,-3}, -{47,-23,-2}, -{47,-23,-1}, -{47,-23,0}, -{47,-23,1}, -{47,-23,2}, -{47,-23,3}, -{47,-23,4}, -{47,-23,5}, -{47,-23,6}, -{47,-23,7}, -{47,-23,8}, -{47,-23,9}, -{47,-23,10}, -{47,-23,11}, -{47,-23,12}, -{47,-23,13}, -{47,-23,14}, -{47,-23,15}, -{47,-23,16}, -{47,-23,17}, -{47,-23,18}, -{47,-23,19}, -{47,-23,20}, -{47,-23,21}, -{47,-23,22}, -{47,-23,23}, -{47,-23,24}, -{47,-23,25}, -{47,-23,26}, -{47,-23,27}, -{47,-23,28}, -{47,-23,29}, -{47,-23,30}, -{47,-23,31}, -{47,-23,32}, -{47,-23,33}, -{47,-23,34}, -{47,-23,35}, -{47,-23,36}, -{47,-23,37}, -{47,-23,38}, -{47,-23,39}, -{47,-23,40}, -{47,-23,41}, -{47,-23,42}, -{47,-23,43}, -{47,-23,44}, -{47,-23,45}, -{47,-23,46}, -{47,-23,47}, -{47,-23,48}, -{47,-23,49}, -{47,-23,50}, -{47,-23,51}, -{47,-23,52}, -{47,-22,-17}, -{47,-22,-16}, -{47,-22,-15}, -{47,-22,-14}, -{47,-22,-13}, -{47,-22,-12}, -{47,-22,-11}, -{47,-22,-10}, -{47,-22,-9}, -{47,-22,-8}, -{47,-22,-7}, -{47,-22,-6}, -{47,-22,-5}, -{47,-22,-4}, -{47,-22,-3}, -{47,-22,-2}, -{47,-22,-1}, -{47,-22,0}, -{47,-22,1}, -{47,-22,2}, -{47,-22,3}, -{47,-22,4}, -{47,-22,5}, -{47,-22,6}, -{47,-22,7}, -{47,-22,8}, -{47,-22,9}, -{47,-22,10}, -{47,-22,11}, -{47,-22,12}, -{47,-22,13}, -{47,-22,14}, -{47,-22,15}, -{47,-22,16}, -{47,-22,17}, -{47,-22,18}, -{47,-22,19}, -{47,-22,20}, -{47,-22,21}, -{47,-22,22}, -{47,-22,23}, -{47,-22,24}, -{47,-22,25}, -{47,-22,26}, -{47,-22,27}, -{47,-22,28}, -{47,-22,29}, -{47,-22,30}, -{47,-22,31}, -{47,-22,32}, -{47,-22,33}, -{47,-22,34}, -{47,-22,35}, -{47,-22,36}, -{47,-22,37}, -{47,-22,38}, -{47,-22,39}, -{47,-22,40}, -{47,-22,41}, -{47,-22,42}, -{47,-22,43}, -{47,-22,44}, -{47,-22,45}, -{47,-22,46}, -{47,-22,47}, -{47,-22,48}, -{47,-22,49}, -{47,-22,50}, -{47,-22,51}, -{47,-22,52}, -{47,-21,-19}, -{47,-21,-18}, -{47,-21,-17}, -{47,-21,-16}, -{47,-21,-15}, -{47,-21,-14}, -{47,-21,-13}, -{47,-21,-12}, -{47,-21,-11}, -{47,-21,-10}, -{47,-21,-9}, -{47,-21,-8}, -{47,-21,-7}, -{47,-21,-6}, -{47,-21,-5}, -{47,-21,-4}, -{47,-21,-3}, -{47,-21,-2}, -{47,-21,-1}, -{47,-21,0}, -{47,-21,1}, -{47,-21,2}, -{47,-21,3}, -{47,-21,4}, -{47,-21,5}, -{47,-21,6}, -{47,-21,7}, -{47,-21,8}, -{47,-21,9}, -{47,-21,10}, -{47,-21,11}, -{47,-21,12}, -{47,-21,13}, -{47,-21,14}, -{47,-21,15}, -{47,-21,16}, -{47,-21,17}, -{47,-21,18}, -{47,-21,19}, -{47,-21,20}, -{47,-21,21}, -{47,-21,22}, -{47,-21,23}, -{47,-21,24}, -{47,-21,25}, -{47,-21,26}, -{47,-21,27}, -{47,-21,28}, -{47,-21,29}, -{47,-21,30}, -{47,-21,31}, -{47,-21,32}, -{47,-21,33}, -{47,-21,34}, -{47,-21,35}, -{47,-21,36}, -{47,-21,37}, -{47,-21,38}, -{47,-21,39}, -{47,-21,40}, -{47,-21,41}, -{47,-21,42}, -{47,-21,43}, -{47,-21,44}, -{47,-21,45}, -{47,-21,46}, -{47,-21,47}, -{47,-21,48}, -{47,-21,49}, -{47,-21,50}, -{47,-21,51}, -{47,-21,52}, -{47,-20,-20}, -{47,-20,-19}, -{47,-20,-18}, -{47,-20,-17}, -{47,-20,-16}, -{47,-20,-15}, -{47,-20,-14}, -{47,-20,-13}, -{47,-20,-12}, -{47,-20,-11}, -{47,-20,-10}, -{47,-20,-9}, -{47,-20,-8}, -{47,-20,-7}, -{47,-20,-6}, -{47,-20,-5}, -{47,-20,-4}, -{47,-20,-3}, -{47,-20,-2}, -{47,-20,-1}, -{47,-20,0}, -{47,-20,1}, -{47,-20,2}, -{47,-20,3}, -{47,-20,4}, -{47,-20,5}, -{47,-20,6}, -{47,-20,7}, -{47,-20,8}, -{47,-20,9}, -{47,-20,10}, -{47,-20,11}, -{47,-20,12}, -{47,-20,13}, -{47,-20,14}, -{47,-20,15}, -{47,-20,16}, -{47,-20,17}, -{47,-20,18}, -{47,-20,19}, -{47,-20,20}, -{47,-20,21}, -{47,-20,22}, -{47,-20,23}, -{47,-20,24}, -{47,-20,25}, -{47,-20,26}, -{47,-20,27}, -{47,-20,28}, -{47,-20,29}, -{47,-20,30}, -{47,-20,31}, -{47,-20,32}, -{47,-20,33}, -{47,-20,34}, -{47,-20,35}, -{47,-20,36}, -{47,-20,37}, -{47,-20,38}, -{47,-20,39}, -{47,-20,40}, -{47,-20,41}, -{47,-20,42}, -{47,-20,43}, -{47,-20,44}, -{47,-20,45}, -{47,-20,46}, -{47,-20,47}, -{47,-20,48}, -{47,-20,49}, -{47,-20,50}, -{47,-20,51}, -{47,-20,52}, -{47,-19,-22}, -{47,-19,-21}, -{47,-19,-20}, -{47,-19,-19}, -{47,-19,-18}, -{47,-19,-17}, -{47,-19,-16}, -{47,-19,-15}, -{47,-19,-14}, -{47,-19,-13}, -{47,-19,-12}, -{47,-19,-11}, -{47,-19,-10}, -{47,-19,-9}, -{47,-19,-8}, -{47,-19,-7}, -{47,-19,-6}, -{47,-19,-5}, -{47,-19,-4}, -{47,-19,-3}, -{47,-19,-2}, -{47,-19,-1}, -{47,-19,0}, -{47,-19,1}, -{47,-19,2}, -{47,-19,3}, -{47,-19,4}, -{47,-19,5}, -{47,-19,6}, -{47,-19,7}, -{47,-19,8}, -{47,-19,9}, -{47,-19,10}, -{47,-19,11}, -{47,-19,12}, -{47,-19,13}, -{47,-19,14}, -{47,-19,15}, -{47,-19,16}, -{47,-19,17}, -{47,-19,18}, -{47,-19,19}, -{47,-19,20}, -{47,-19,21}, -{47,-19,22}, -{47,-19,23}, -{47,-19,24}, -{47,-19,25}, -{47,-19,26}, -{47,-19,27}, -{47,-19,28}, -{47,-19,29}, -{47,-19,30}, -{47,-19,31}, -{47,-19,32}, -{47,-19,33}, -{47,-19,34}, -{47,-19,35}, -{47,-19,36}, -{47,-19,37}, -{47,-19,38}, -{47,-19,39}, -{47,-19,40}, -{47,-19,41}, -{47,-19,42}, -{47,-19,43}, -{47,-19,44}, -{47,-19,45}, -{47,-19,46}, -{47,-19,47}, -{47,-19,48}, -{47,-19,49}, -{47,-19,50}, -{47,-19,51}, -{47,-19,52}, -{47,-18,-23}, -{47,-18,-22}, -{47,-18,-21}, -{47,-18,-20}, -{47,-18,-19}, -{47,-18,-18}, -{47,-18,-17}, -{47,-18,-16}, -{47,-18,-15}, -{47,-18,-14}, -{47,-18,-13}, -{47,-18,-12}, -{47,-18,-11}, -{47,-18,-10}, -{47,-18,-9}, -{47,-18,-8}, -{47,-18,-7}, -{47,-18,-6}, -{47,-18,-5}, -{47,-18,-4}, -{47,-18,-3}, -{47,-18,-2}, -{47,-18,-1}, -{47,-18,0}, -{47,-18,1}, -{47,-18,2}, -{47,-18,3}, -{47,-18,4}, -{47,-18,5}, -{47,-18,6}, -{47,-18,7}, -{47,-18,8}, -{47,-18,9}, -{47,-18,10}, -{47,-18,11}, -{47,-18,12}, -{47,-18,13}, -{47,-18,14}, -{47,-18,15}, -{47,-18,16}, -{47,-18,17}, -{47,-18,18}, -{47,-18,19}, -{47,-18,20}, -{47,-18,21}, -{47,-18,22}, -{47,-18,23}, -{47,-18,24}, -{47,-18,25}, -{47,-18,26}, -{47,-18,27}, -{47,-18,28}, -{47,-18,29}, -{47,-18,30}, -{47,-18,31}, -{47,-18,32}, -{47,-18,33}, -{47,-18,34}, -{47,-18,35}, -{47,-18,36}, -{47,-18,37}, -{47,-18,38}, -{47,-18,39}, -{47,-18,40}, -{47,-18,41}, -{47,-18,42}, -{47,-18,43}, -{47,-18,44}, -{47,-18,45}, -{47,-18,46}, -{47,-18,47}, -{47,-18,48}, -{47,-18,49}, -{47,-18,50}, -{47,-18,51}, -{47,-18,52}, -{47,-17,-24}, -{47,-17,-23}, -{47,-17,-22}, -{47,-17,-21}, -{47,-17,-20}, -{47,-17,-19}, -{47,-17,-18}, -{47,-17,-17}, -{47,-17,-16}, -{47,-17,-15}, -{47,-17,-14}, -{47,-17,-13}, -{47,-17,-12}, -{47,-17,-11}, -{47,-17,-10}, -{47,-17,-9}, -{47,-17,-8}, -{47,-17,-7}, -{47,-17,-6}, -{47,-17,-5}, -{47,-17,-4}, -{47,-17,-3}, -{47,-17,-2}, -{47,-17,-1}, -{47,-17,0}, -{47,-17,1}, -{47,-17,2}, -{47,-17,3}, -{47,-17,4}, -{47,-17,5}, -{47,-17,6}, -{47,-17,7}, -{47,-17,8}, -{47,-17,9}, -{47,-17,10}, -{47,-17,11}, -{47,-17,12}, -{47,-17,13}, -{47,-17,14}, -{47,-17,15}, -{47,-17,16}, -{47,-17,17}, -{47,-17,18}, -{47,-17,19}, -{47,-17,20}, -{47,-17,21}, -{47,-17,22}, -{47,-17,23}, -{47,-17,24}, -{47,-17,25}, -{47,-17,26}, -{47,-17,27}, -{47,-17,28}, -{47,-17,29}, -{47,-17,30}, -{47,-17,31}, -{47,-17,32}, -{47,-17,33}, -{47,-17,34}, -{47,-17,35}, -{47,-17,36}, -{47,-17,37}, -{47,-17,38}, -{47,-17,39}, -{47,-17,40}, -{47,-17,41}, -{47,-17,42}, -{47,-17,43}, -{47,-17,44}, -{47,-17,45}, -{47,-17,46}, -{47,-17,47}, -{47,-17,48}, -{47,-17,49}, -{47,-17,50}, -{47,-17,51}, -{47,-17,52}, -{47,-16,-26}, -{47,-16,-25}, -{47,-16,-24}, -{47,-16,-23}, -{47,-16,-22}, -{47,-16,-21}, -{47,-16,-20}, -{47,-16,-19}, -{47,-16,-18}, -{47,-16,-17}, -{47,-16,-16}, -{47,-16,-15}, -{47,-16,-14}, -{47,-16,-13}, -{47,-16,-12}, -{47,-16,-11}, -{47,-16,-10}, -{47,-16,-9}, -{47,-16,-8}, -{47,-16,-7}, -{47,-16,-6}, -{47,-16,-5}, -{47,-16,-4}, -{47,-16,-3}, -{47,-16,-2}, -{47,-16,-1}, -{47,-16,0}, -{47,-16,1}, -{47,-16,2}, -{47,-16,3}, -{47,-16,4}, -{47,-16,5}, -{47,-16,6}, -{47,-16,7}, -{47,-16,8}, -{47,-16,9}, -{47,-16,10}, -{47,-16,11}, -{47,-16,12}, -{47,-16,13}, -{47,-16,14}, -{47,-16,15}, -{47,-16,16}, -{47,-16,17}, -{47,-16,18}, -{47,-16,19}, -{47,-16,20}, -{47,-16,21}, -{47,-16,22}, -{47,-16,23}, -{47,-16,24}, -{47,-16,25}, -{47,-16,26}, -{47,-16,27}, -{47,-16,28}, -{47,-16,29}, -{47,-16,30}, -{47,-16,31}, -{47,-16,32}, -{47,-16,33}, -{47,-16,34}, -{47,-16,35}, -{47,-16,36}, -{47,-16,37}, -{47,-16,38}, -{47,-16,39}, -{47,-16,40}, -{47,-16,41}, -{47,-16,42}, -{47,-16,43}, -{47,-16,44}, -{47,-16,45}, -{47,-16,46}, -{47,-16,47}, -{47,-16,48}, -{47,-16,49}, -{47,-16,50}, -{47,-16,51}, -{47,-16,52}, -{47,-15,-27}, -{47,-15,-26}, -{47,-15,-25}, -{47,-15,-24}, -{47,-15,-23}, -{47,-15,-22}, -{47,-15,-21}, -{47,-15,-20}, -{47,-15,-19}, -{47,-15,-18}, -{47,-15,-17}, -{47,-15,-16}, -{47,-15,-15}, -{47,-15,-14}, -{47,-15,-13}, -{47,-15,-12}, -{47,-15,-11}, -{47,-15,-10}, -{47,-15,-9}, -{47,-15,-8}, -{47,-15,-7}, -{47,-15,-6}, -{47,-15,-5}, -{47,-15,-4}, -{47,-15,-3}, -{47,-15,-2}, -{47,-15,-1}, -{47,-15,0}, -{47,-15,1}, -{47,-15,2}, -{47,-15,3}, -{47,-15,4}, -{47,-15,5}, -{47,-15,6}, -{47,-15,7}, -{47,-15,8}, -{47,-15,9}, -{47,-15,10}, -{47,-15,11}, -{47,-15,12}, -{47,-15,13}, -{47,-15,14}, -{47,-15,15}, -{47,-15,16}, -{47,-15,17}, -{47,-15,18}, -{47,-15,19}, -{47,-15,20}, -{47,-15,21}, -{47,-15,22}, -{47,-15,23}, -{47,-15,24}, -{47,-15,25}, -{47,-15,26}, -{47,-15,27}, -{47,-15,28}, -{47,-15,29}, -{47,-15,30}, -{47,-15,31}, -{47,-15,32}, -{47,-15,33}, -{47,-15,34}, -{47,-15,35}, -{47,-15,36}, -{47,-15,37}, -{47,-15,38}, -{47,-15,39}, -{47,-15,40}, -{47,-15,41}, -{47,-15,42}, -{47,-15,43}, -{47,-15,44}, -{47,-15,45}, -{47,-15,46}, -{47,-15,47}, -{47,-15,48}, -{47,-15,49}, -{47,-15,50}, -{47,-15,51}, -{47,-15,52}, -{47,-14,-28}, -{47,-14,-27}, -{47,-14,-26}, -{47,-14,-25}, -{47,-14,-24}, -{47,-14,-23}, -{47,-14,-22}, -{47,-14,-21}, -{47,-14,-20}, -{47,-14,-19}, -{47,-14,-18}, -{47,-14,-17}, -{47,-14,-16}, -{47,-14,-15}, -{47,-14,-14}, -{47,-14,-13}, -{47,-14,-12}, -{47,-14,-11}, -{47,-14,-10}, -{47,-14,-9}, -{47,-14,-8}, -{47,-14,-7}, -{47,-14,-6}, -{47,-14,-5}, -{47,-14,-4}, -{47,-14,-3}, -{47,-14,-2}, -{47,-14,-1}, -{47,-14,0}, -{47,-14,1}, -{47,-14,2}, -{47,-14,3}, -{47,-14,4}, -{47,-14,5}, -{47,-14,6}, -{47,-14,7}, -{47,-14,8}, -{47,-14,9}, -{47,-14,10}, -{47,-14,11}, -{47,-14,12}, -{47,-14,13}, -{47,-14,14}, -{47,-14,15}, -{47,-14,16}, -{47,-14,17}, -{47,-14,18}, -{47,-14,19}, -{47,-14,20}, -{47,-14,21}, -{47,-14,22}, -{47,-14,23}, -{47,-14,24}, -{47,-14,25}, -{47,-14,26}, -{47,-14,27}, -{47,-14,28}, -{47,-14,29}, -{47,-14,30}, -{47,-14,31}, -{47,-14,32}, -{47,-14,33}, -{47,-14,34}, -{47,-14,35}, -{47,-14,36}, -{47,-14,37}, -{47,-14,38}, -{47,-14,39}, -{47,-14,40}, -{47,-14,41}, -{47,-14,42}, -{47,-14,43}, -{47,-14,44}, -{47,-14,45}, -{47,-14,46}, -{47,-14,47}, -{47,-14,48}, -{47,-14,49}, -{47,-14,50}, -{47,-14,51}, -{47,-14,52}, -{47,-13,-29}, -{47,-13,-28}, -{47,-13,-27}, -{47,-13,-26}, -{47,-13,-25}, -{47,-13,-24}, -{47,-13,-23}, -{47,-13,-22}, -{47,-13,-21}, -{47,-13,-20}, -{47,-13,-19}, -{47,-13,-18}, -{47,-13,-17}, -{47,-13,-16}, -{47,-13,-15}, -{47,-13,-14}, -{47,-13,-13}, -{47,-13,-12}, -{47,-13,-11}, -{47,-13,-10}, -{47,-13,-9}, -{47,-13,-8}, -{47,-13,-7}, -{47,-13,-6}, -{47,-13,-5}, -{47,-13,-4}, -{47,-13,-3}, -{47,-13,-2}, -{47,-13,-1}, -{47,-13,0}, -{47,-13,1}, -{47,-13,2}, -{47,-13,3}, -{47,-13,4}, -{47,-13,5}, -{47,-13,6}, -{47,-13,7}, -{47,-13,8}, -{47,-13,9}, -{47,-13,10}, -{47,-13,11}, -{47,-13,12}, -{47,-13,13}, -{47,-13,14}, -{47,-13,15}, -{47,-13,16}, -{47,-13,17}, -{47,-13,18}, -{47,-13,19}, -{47,-13,20}, -{47,-13,21}, -{47,-13,22}, -{47,-13,23}, -{47,-13,24}, -{47,-13,25}, -{47,-13,26}, -{47,-13,27}, -{47,-13,28}, -{47,-13,29}, -{47,-13,30}, -{47,-13,31}, -{47,-13,32}, -{47,-13,33}, -{47,-13,34}, -{47,-13,35}, -{47,-13,36}, -{47,-13,37}, -{47,-13,38}, -{47,-13,39}, -{47,-13,40}, -{47,-13,41}, -{47,-13,42}, -{47,-13,43}, -{47,-13,44}, -{47,-13,45}, -{47,-13,46}, -{47,-13,47}, -{47,-13,48}, -{47,-13,49}, -{47,-13,50}, -{47,-13,51}, -{47,-13,52}, -{47,-12,-31}, -{47,-12,-30}, -{47,-12,-29}, -{47,-12,-28}, -{47,-12,-27}, -{47,-12,-26}, -{47,-12,-25}, -{47,-12,-24}, -{47,-12,-23}, -{47,-12,-22}, -{47,-12,-21}, -{47,-12,-20}, -{47,-12,-19}, -{47,-12,-18}, -{47,-12,-17}, -{47,-12,-16}, -{47,-12,-15}, -{47,-12,-14}, -{47,-12,-13}, -{47,-12,-12}, -{47,-12,-11}, -{47,-12,-10}, -{47,-12,-9}, -{47,-12,-8}, -{47,-12,-7}, -{47,-12,-6}, -{47,-12,-5}, -{47,-12,-4}, -{47,-12,-3}, -{47,-12,-2}, -{47,-12,-1}, -{47,-12,0}, -{47,-12,1}, -{47,-12,2}, -{47,-12,3}, -{47,-12,4}, -{47,-12,5}, -{47,-12,6}, -{47,-12,7}, -{47,-12,8}, -{47,-12,9}, -{47,-12,10}, -{47,-12,11}, -{47,-12,12}, -{47,-12,13}, -{47,-12,14}, -{47,-12,15}, -{47,-12,16}, -{47,-12,17}, -{47,-12,18}, -{47,-12,19}, -{47,-12,20}, -{47,-12,21}, -{47,-12,22}, -{47,-12,23}, -{47,-12,24}, -{47,-12,25}, -{47,-12,26}, -{47,-12,27}, -{47,-12,28}, -{47,-12,29}, -{47,-12,30}, -{47,-12,31}, -{47,-12,32}, -{47,-12,33}, -{47,-12,34}, -{47,-12,35}, -{47,-12,36}, -{47,-12,37}, -{47,-12,38}, -{47,-12,39}, -{47,-12,40}, -{47,-12,41}, -{47,-12,42}, -{47,-12,43}, -{47,-12,44}, -{47,-12,45}, -{47,-12,46}, -{47,-12,47}, -{47,-12,48}, -{47,-12,49}, -{47,-12,50}, -{47,-12,51}, -{47,-12,52}, -{47,-11,-32}, -{47,-11,-31}, -{47,-11,-30}, -{47,-11,-29}, -{47,-11,-28}, -{47,-11,-27}, -{47,-11,-26}, -{47,-11,-25}, -{47,-11,-24}, -{47,-11,-23}, -{47,-11,-22}, -{47,-11,-21}, -{47,-11,-20}, -{47,-11,-19}, -{47,-11,-18}, -{47,-11,-17}, -{47,-11,-16}, -{47,-11,-15}, -{47,-11,-14}, -{47,-11,-13}, -{47,-11,-12}, -{47,-11,-11}, -{47,-11,-10}, -{47,-11,-9}, -{47,-11,-8}, -{47,-11,-7}, -{47,-11,-6}, -{47,-11,-5}, -{47,-11,-4}, -{47,-11,-3}, -{47,-11,-2}, -{47,-11,-1}, -{47,-11,0}, -{47,-11,1}, -{47,-11,2}, -{47,-11,3}, -{47,-11,4}, -{47,-11,5}, -{47,-11,6}, -{47,-11,7}, -{47,-11,8}, -{47,-11,9}, -{47,-11,10}, -{47,-11,11}, -{47,-11,12}, -{47,-11,13}, -{47,-11,14}, -{47,-11,15}, -{47,-11,16}, -{47,-11,17}, -{47,-11,18}, -{47,-11,19}, -{47,-11,20}, -{47,-11,21}, -{47,-11,22}, -{47,-11,23}, -{47,-11,24}, -{47,-11,25}, -{47,-11,26}, -{47,-11,27}, -{47,-11,28}, -{47,-11,29}, -{47,-11,30}, -{47,-11,31}, -{47,-11,32}, -{47,-11,33}, -{47,-11,34}, -{47,-11,35}, -{47,-11,36}, -{47,-11,37}, -{47,-11,38}, -{47,-11,39}, -{47,-11,40}, -{47,-11,41}, -{47,-11,42}, -{47,-11,43}, -{47,-11,44}, -{47,-11,45}, -{47,-11,46}, -{47,-11,47}, -{47,-11,48}, -{47,-11,49}, -{47,-11,50}, -{47,-11,51}, -{47,-11,52}, -{47,-10,-33}, -{47,-10,-32}, -{47,-10,-31}, -{47,-10,-30}, -{47,-10,-29}, -{47,-10,-28}, -{47,-10,-27}, -{47,-10,-26}, -{47,-10,-25}, -{47,-10,-24}, -{47,-10,-23}, -{47,-10,-22}, -{47,-10,-21}, -{47,-10,-20}, -{47,-10,-19}, -{47,-10,-18}, -{47,-10,-17}, -{47,-10,-16}, -{47,-10,-15}, -{47,-10,-14}, -{47,-10,-13}, -{47,-10,-12}, -{47,-10,-11}, -{47,-10,-10}, -{47,-10,-9}, -{47,-10,-8}, -{47,-10,-7}, -{47,-10,-6}, -{47,-10,-5}, -{47,-10,-4}, -{47,-10,-3}, -{47,-10,-2}, -{47,-10,-1}, -{47,-10,0}, -{47,-10,1}, -{47,-10,2}, -{47,-10,3}, -{47,-10,4}, -{47,-10,5}, -{47,-10,6}, -{47,-10,7}, -{47,-10,8}, -{47,-10,9}, -{47,-10,10}, -{47,-10,11}, -{47,-10,12}, -{47,-10,13}, -{47,-10,14}, -{47,-10,15}, -{47,-10,16}, -{47,-10,17}, -{47,-10,18}, -{47,-10,19}, -{47,-10,20}, -{47,-10,21}, -{47,-10,22}, -{47,-10,23}, -{47,-10,24}, -{47,-10,25}, -{47,-10,26}, -{47,-10,27}, -{47,-10,28}, -{47,-10,29}, -{47,-10,30}, -{47,-10,31}, -{47,-10,32}, -{47,-10,33}, -{47,-10,34}, -{47,-10,35}, -{47,-10,36}, -{47,-10,37}, -{47,-10,38}, -{47,-10,39}, -{47,-10,40}, -{47,-10,41}, -{47,-10,42}, -{47,-10,43}, -{47,-10,44}, -{47,-10,45}, -{47,-10,46}, -{47,-10,47}, -{47,-10,48}, -{47,-10,49}, -{47,-10,50}, -{47,-10,51}, -{47,-10,52}, -{47,-9,-34}, -{47,-9,-33}, -{47,-9,-32}, -{47,-9,-31}, -{47,-9,-30}, -{47,-9,-29}, -{47,-9,-28}, -{47,-9,-27}, -{47,-9,-26}, -{47,-9,-25}, -{47,-9,-24}, -{47,-9,-23}, -{47,-9,-22}, -{47,-9,-21}, -{47,-9,-20}, -{47,-9,-19}, -{47,-9,-18}, -{47,-9,-17}, -{47,-9,-16}, -{47,-9,-15}, -{47,-9,-14}, -{47,-9,-13}, -{47,-9,-12}, -{47,-9,-11}, -{47,-9,-10}, -{47,-9,-9}, -{47,-9,-8}, -{47,-9,-7}, -{47,-9,-6}, -{47,-9,-5}, -{47,-9,-4}, -{47,-9,-3}, -{47,-9,-2}, -{47,-9,-1}, -{47,-9,0}, -{47,-9,1}, -{47,-9,2}, -{47,-9,3}, -{47,-9,4}, -{47,-9,5}, -{47,-9,6}, -{47,-9,7}, -{47,-9,8}, -{47,-9,9}, -{47,-9,10}, -{47,-9,11}, -{47,-9,12}, -{47,-9,13}, -{47,-9,14}, -{47,-9,15}, -{47,-9,16}, -{47,-9,17}, -{47,-9,18}, -{47,-9,19}, -{47,-9,20}, -{47,-9,21}, -{47,-9,22}, -{47,-9,23}, -{47,-9,24}, -{47,-9,25}, -{47,-9,26}, -{47,-9,27}, -{47,-9,28}, -{47,-9,29}, -{47,-9,30}, -{47,-9,31}, -{47,-9,32}, -{47,-9,33}, -{47,-9,34}, -{47,-9,35}, -{47,-9,36}, -{47,-9,37}, -{47,-9,38}, -{47,-9,39}, -{47,-9,40}, -{47,-9,41}, -{47,-9,42}, -{47,-9,43}, -{47,-9,44}, -{47,-9,45}, -{47,-9,46}, -{47,-9,47}, -{47,-9,48}, -{47,-9,49}, -{47,-9,50}, -{47,-9,51}, -{47,-9,52}, -{47,-8,-36}, -{47,-8,-35}, -{47,-8,-34}, -{47,-8,-33}, -{47,-8,-32}, -{47,-8,-31}, -{47,-8,-30}, -{47,-8,-29}, -{47,-8,-28}, -{47,-8,-27}, -{47,-8,-26}, -{47,-8,-25}, -{47,-8,-24}, -{47,-8,-23}, -{47,-8,-22}, -{47,-8,-21}, -{47,-8,-20}, -{47,-8,-19}, -{47,-8,-18}, -{47,-8,-17}, -{47,-8,-16}, -{47,-8,-15}, -{47,-8,-14}, -{47,-8,-13}, -{47,-8,-12}, -{47,-8,-11}, -{47,-8,-10}, -{47,-8,-9}, -{47,-8,-8}, -{47,-8,-7}, -{47,-8,-6}, -{47,-8,-5}, -{47,-8,-4}, -{47,-8,-3}, -{47,-8,-2}, -{47,-8,-1}, -{47,-8,0}, -{47,-8,1}, -{47,-8,2}, -{47,-8,3}, -{47,-8,4}, -{47,-8,5}, -{47,-8,6}, -{47,-8,7}, -{47,-8,8}, -{47,-8,9}, -{47,-8,10}, -{47,-8,11}, -{47,-8,12}, -{47,-8,13}, -{47,-8,14}, -{47,-8,15}, -{47,-8,16}, -{47,-8,17}, -{47,-8,18}, -{47,-8,19}, -{47,-8,20}, -{47,-8,21}, -{47,-8,22}, -{47,-8,23}, -{47,-8,24}, -{47,-8,25}, -{47,-8,26}, -{47,-8,27}, -{47,-8,28}, -{47,-8,29}, -{47,-8,30}, -{47,-8,31}, -{47,-8,32}, -{47,-8,33}, -{47,-8,34}, -{47,-8,35}, -{47,-8,36}, -{47,-8,37}, -{47,-8,38}, -{47,-8,39}, -{47,-8,40}, -{47,-8,41}, -{47,-8,42}, -{47,-8,43}, -{47,-8,44}, -{47,-8,45}, -{47,-8,46}, -{47,-8,47}, -{47,-8,48}, -{47,-8,49}, -{47,-8,50}, -{47,-8,51}, -{47,-8,52}, -{47,-8,53}, -{47,-7,-37}, -{47,-7,-36}, -{47,-7,-35}, -{47,-7,-34}, -{47,-7,-33}, -{47,-7,-32}, -{47,-7,-31}, -{47,-7,-30}, -{47,-7,-29}, -{47,-7,-28}, -{47,-7,-27}, -{47,-7,-26}, -{47,-7,-25}, -{47,-7,-24}, -{47,-7,-23}, -{47,-7,-22}, -{47,-7,-21}, -{47,-7,-20}, -{47,-7,-19}, -{47,-7,-18}, -{47,-7,-17}, -{47,-7,-16}, -{47,-7,-15}, -{47,-7,-14}, -{47,-7,-13}, -{47,-7,-12}, -{47,-7,-11}, -{47,-7,-10}, -{47,-7,-9}, -{47,-7,-8}, -{47,-7,-7}, -{47,-7,-6}, -{47,-7,-5}, -{47,-7,-4}, -{47,-7,-3}, -{47,-7,-2}, -{47,-7,-1}, -{47,-7,0}, -{47,-7,1}, -{47,-7,2}, -{47,-7,3}, -{47,-7,4}, -{47,-7,5}, -{47,-7,6}, -{47,-7,7}, -{47,-7,8}, -{47,-7,9}, -{47,-7,10}, -{47,-7,11}, -{47,-7,12}, -{47,-7,13}, -{47,-7,14}, -{47,-7,15}, -{47,-7,16}, -{47,-7,17}, -{47,-7,18}, -{47,-7,19}, -{47,-7,20}, -{47,-7,21}, -{47,-7,22}, -{47,-7,23}, -{47,-7,24}, -{47,-7,25}, -{47,-7,26}, -{47,-7,27}, -{47,-7,28}, -{47,-7,29}, -{47,-7,30}, -{47,-7,31}, -{47,-7,32}, -{47,-7,33}, -{47,-7,34}, -{47,-7,35}, -{47,-7,36}, -{47,-7,37}, -{47,-7,38}, -{47,-7,39}, -{47,-7,40}, -{47,-7,41}, -{47,-7,42}, -{47,-7,43}, -{47,-7,44}, -{47,-7,45}, -{47,-7,46}, -{47,-7,47}, -{47,-7,48}, -{47,-7,49}, -{47,-7,50}, -{47,-7,51}, -{47,-7,52}, -{47,-7,53}, -{47,-6,-38}, -{47,-6,-37}, -{47,-6,-36}, -{47,-6,-35}, -{47,-6,-34}, -{47,-6,-33}, -{47,-6,-32}, -{47,-6,-31}, -{47,-6,-30}, -{47,-6,-29}, -{47,-6,-28}, -{47,-6,-27}, -{47,-6,-26}, -{47,-6,-25}, -{47,-6,-24}, -{47,-6,-23}, -{47,-6,-22}, -{47,-6,-21}, -{47,-6,-20}, -{47,-6,-19}, -{47,-6,-18}, -{47,-6,-17}, -{47,-6,-16}, -{47,-6,-15}, -{47,-6,-14}, -{47,-6,-13}, -{47,-6,-12}, -{47,-6,-11}, -{47,-6,-10}, -{47,-6,-9}, -{47,-6,-8}, -{47,-6,-7}, -{47,-6,-6}, -{47,-6,-5}, -{47,-6,-4}, -{47,-6,-3}, -{47,-6,-2}, -{47,-6,-1}, -{47,-6,0}, -{47,-6,1}, -{47,-6,2}, -{47,-6,3}, -{47,-6,4}, -{47,-6,5}, -{47,-6,6}, -{47,-6,7}, -{47,-6,8}, -{47,-6,9}, -{47,-6,10}, -{47,-6,11}, -{47,-6,12}, -{47,-6,13}, -{47,-6,14}, -{47,-6,15}, -{47,-6,16}, -{47,-6,17}, -{47,-6,18}, -{47,-6,19}, -{47,-6,20}, -{47,-6,21}, -{47,-6,22}, -{47,-6,23}, -{47,-6,24}, -{47,-6,25}, -{47,-6,26}, -{47,-6,27}, -{47,-6,28}, -{47,-6,29}, -{47,-6,30}, -{47,-6,31}, -{47,-6,32}, -{47,-6,33}, -{47,-6,34}, -{47,-6,35}, -{47,-6,36}, -{47,-6,37}, -{47,-6,38}, -{47,-6,39}, -{47,-6,40}, -{47,-6,41}, -{47,-6,42}, -{47,-6,43}, -{47,-6,44}, -{47,-6,45}, -{47,-6,46}, -{47,-6,47}, -{47,-6,48}, -{47,-6,49}, -{47,-6,50}, -{47,-6,51}, -{47,-6,52}, -{47,-6,53}, -{47,-5,-39}, -{47,-5,-38}, -{47,-5,-37}, -{47,-5,-36}, -{47,-5,-35}, -{47,-5,-34}, -{47,-5,-33}, -{47,-5,-32}, -{47,-5,-31}, -{47,-5,-30}, -{47,-5,-29}, -{47,-5,-28}, -{47,-5,-27}, -{47,-5,-26}, -{47,-5,-25}, -{47,-5,-24}, -{47,-5,-23}, -{47,-5,-22}, -{47,-5,-21}, -{47,-5,-20}, -{47,-5,-19}, -{47,-5,-18}, -{47,-5,-17}, -{47,-5,-16}, -{47,-5,-15}, -{47,-5,-14}, -{47,-5,-13}, -{47,-5,-12}, -{47,-5,-11}, -{47,-5,-10}, -{47,-5,-9}, -{47,-5,-8}, -{47,-5,-7}, -{47,-5,-6}, -{47,-5,-5}, -{47,-5,-4}, -{47,-5,-3}, -{47,-5,-2}, -{47,-5,-1}, -{47,-5,0}, -{47,-5,1}, -{47,-5,2}, -{47,-5,3}, -{47,-5,4}, -{47,-5,5}, -{47,-5,6}, -{47,-5,7}, -{47,-5,8}, -{47,-5,9}, -{47,-5,10}, -{47,-5,11}, -{47,-5,12}, -{47,-5,13}, -{47,-5,14}, -{47,-5,15}, -{47,-5,16}, -{47,-5,17}, -{47,-5,18}, -{47,-5,19}, -{47,-5,20}, -{47,-5,21}, -{47,-5,22}, -{47,-5,23}, -{47,-5,24}, -{47,-5,25}, -{47,-5,26}, -{47,-5,27}, -{47,-5,28}, -{47,-5,29}, -{47,-5,30}, -{47,-5,31}, -{47,-5,32}, -{47,-5,33}, -{47,-5,34}, -{47,-5,35}, -{47,-5,36}, -{47,-5,37}, -{47,-5,38}, -{47,-5,39}, -{47,-5,40}, -{47,-5,41}, -{47,-5,42}, -{47,-5,43}, -{47,-5,44}, -{47,-5,45}, -{47,-5,46}, -{47,-5,47}, -{47,-5,48}, -{47,-5,49}, -{47,-5,50}, -{47,-5,51}, -{47,-5,52}, -{47,-5,53}, -{47,-4,-40}, -{47,-4,-39}, -{47,-4,-38}, -{47,-4,-37}, -{47,-4,-36}, -{47,-4,-35}, -{47,-4,-34}, -{47,-4,-33}, -{47,-4,-32}, -{47,-4,-31}, -{47,-4,-30}, -{47,-4,-29}, -{47,-4,-28}, -{47,-4,-27}, -{47,-4,-26}, -{47,-4,-25}, -{47,-4,-24}, -{47,-4,-23}, -{47,-4,-22}, -{47,-4,-21}, -{47,-4,-20}, -{47,-4,-19}, -{47,-4,-18}, -{47,-4,-17}, -{47,-4,-16}, -{47,-4,-15}, -{47,-4,-14}, -{47,-4,-13}, -{47,-4,-12}, -{47,-4,-11}, -{47,-4,-10}, -{47,-4,-9}, -{47,-4,-8}, -{47,-4,-7}, -{47,-4,-6}, -{47,-4,-5}, -{47,-4,-4}, -{47,-4,-3}, -{47,-4,-2}, -{47,-4,-1}, -{47,-4,0}, -{47,-4,1}, -{47,-4,2}, -{47,-4,3}, -{47,-4,4}, -{47,-4,5}, -{47,-4,6}, -{47,-4,7}, -{47,-4,8}, -{47,-4,9}, -{47,-4,10}, -{47,-4,11}, -{47,-4,12}, -{47,-4,13}, -{47,-4,14}, -{47,-4,15}, -{47,-4,16}, -{47,-4,17}, -{47,-4,18}, -{47,-4,19}, -{47,-4,20}, -{47,-4,21}, -{47,-4,22}, -{47,-4,23}, -{47,-4,24}, -{47,-4,25}, -{47,-4,26}, -{47,-4,27}, -{47,-4,28}, -{47,-4,29}, -{47,-4,30}, -{47,-4,31}, -{47,-4,32}, -{47,-4,33}, -{47,-4,34}, -{47,-4,35}, -{47,-4,36}, -{47,-4,37}, -{47,-4,38}, -{47,-4,39}, -{47,-4,40}, -{47,-4,41}, -{47,-4,42}, -{47,-4,43}, -{47,-4,44}, -{47,-4,45}, -{47,-4,46}, -{47,-4,47}, -{47,-4,48}, -{47,-4,49}, -{47,-4,50}, -{47,-4,51}, -{47,-4,52}, -{47,-4,53}, -{47,-3,-42}, -{47,-3,-41}, -{47,-3,-40}, -{47,-3,-39}, -{47,-3,-38}, -{47,-3,-37}, -{47,-3,-36}, -{47,-3,-35}, -{47,-3,-34}, -{47,-3,-33}, -{47,-3,-32}, -{47,-3,-31}, -{47,-3,-30}, -{47,-3,-29}, -{47,-3,-28}, -{47,-3,-27}, -{47,-3,-26}, -{47,-3,-25}, -{47,-3,-24}, -{47,-3,-23}, -{47,-3,-22}, -{47,-3,-21}, -{47,-3,-20}, -{47,-3,-19}, -{47,-3,-18}, -{47,-3,-17}, -{47,-3,-16}, -{47,-3,-15}, -{47,-3,-14}, -{47,-3,-13}, -{47,-3,-12}, -{47,-3,-11}, -{47,-3,-10}, -{47,-3,-9}, -{47,-3,-8}, -{47,-3,-7}, -{47,-3,-6}, -{47,-3,-5}, -{47,-3,-4}, -{47,-3,-3}, -{47,-3,-2}, -{47,-3,-1}, -{47,-3,0}, -{47,-3,1}, -{47,-3,2}, -{47,-3,3}, -{47,-3,4}, -{47,-3,5}, -{47,-3,6}, -{47,-3,7}, -{47,-3,8}, -{47,-3,9}, -{47,-3,10}, -{47,-3,11}, -{47,-3,12}, -{47,-3,13}, -{47,-3,14}, -{47,-3,15}, -{47,-3,16}, -{47,-3,17}, -{47,-3,18}, -{47,-3,19}, -{47,-3,20}, -{47,-3,21}, -{47,-3,22}, -{47,-3,23}, -{47,-3,24}, -{47,-3,25}, -{47,-3,26}, -{47,-3,27}, -{47,-3,28}, -{47,-3,29}, -{47,-3,30}, -{47,-3,31}, -{47,-3,32}, -{47,-3,33}, -{47,-3,34}, -{47,-3,35}, -{47,-3,36}, -{47,-3,37}, -{47,-3,38}, -{47,-3,39}, -{47,-3,40}, -{47,-3,41}, -{47,-3,42}, -{47,-3,43}, -{47,-3,44}, -{47,-3,45}, -{47,-3,46}, -{47,-3,47}, -{47,-3,48}, -{47,-3,49}, -{47,-3,50}, -{47,-3,51}, -{47,-3,52}, -{47,-3,53}, -{47,-2,-43}, -{47,-2,-42}, -{47,-2,-41}, -{47,-2,-40}, -{47,-2,-39}, -{47,-2,-38}, -{47,-2,-37}, -{47,-2,-36}, -{47,-2,-35}, -{47,-2,-34}, -{47,-2,-33}, -{47,-2,-32}, -{47,-2,-31}, -{47,-2,-30}, -{47,-2,-29}, -{47,-2,-28}, -{47,-2,-27}, -{47,-2,-26}, -{47,-2,-25}, -{47,-2,-24}, -{47,-2,-23}, -{47,-2,-22}, -{47,-2,-21}, -{47,-2,-20}, -{47,-2,-19}, -{47,-2,-18}, -{47,-2,-17}, -{47,-2,-16}, -{47,-2,-15}, -{47,-2,-14}, -{47,-2,-13}, -{47,-2,-12}, -{47,-2,-11}, -{47,-2,-10}, -{47,-2,-9}, -{47,-2,-8}, -{47,-2,-7}, -{47,-2,-6}, -{47,-2,-5}, -{47,-2,-4}, -{47,-2,-3}, -{47,-2,-2}, -{47,-2,-1}, -{47,-2,0}, -{47,-2,1}, -{47,-2,2}, -{47,-2,3}, -{47,-2,4}, -{47,-2,5}, -{47,-2,6}, -{47,-2,7}, -{47,-2,8}, -{47,-2,9}, -{47,-2,10}, -{47,-2,11}, -{47,-2,12}, -{47,-2,13}, -{47,-2,14}, -{47,-2,15}, -{47,-2,16}, -{47,-2,17}, -{47,-2,18}, -{47,-2,19}, -{47,-2,20}, -{47,-2,21}, -{47,-2,22}, -{47,-2,23}, -{47,-2,24}, -{47,-2,25}, -{47,-2,26}, -{47,-2,27}, -{47,-2,28}, -{47,-2,29}, -{47,-2,30}, -{47,-2,31}, -{47,-2,32}, -{47,-2,33}, -{47,-2,34}, -{47,-2,35}, -{47,-2,36}, -{47,-2,37}, -{47,-2,38}, -{47,-2,39}, -{47,-2,40}, -{47,-2,41}, -{47,-2,42}, -{47,-2,43}, -{47,-2,44}, -{47,-2,45}, -{47,-2,46}, -{47,-2,47}, -{47,-2,48}, -{47,-2,49}, -{47,-2,50}, -{47,-2,51}, -{47,-2,52}, -{47,-2,53}, -{47,-1,-44}, -{47,-1,-43}, -{47,-1,-42}, -{47,-1,-41}, -{47,-1,-40}, -{47,-1,-39}, -{47,-1,-38}, -{47,-1,-37}, -{47,-1,-36}, -{47,-1,-35}, -{47,-1,-34}, -{47,-1,-33}, -{47,-1,-32}, -{47,-1,-31}, -{47,-1,-30}, -{47,-1,-29}, -{47,-1,-28}, -{47,-1,-27}, -{47,-1,-26}, -{47,-1,-25}, -{47,-1,-24}, -{47,-1,-23}, -{47,-1,-22}, -{47,-1,-21}, -{47,-1,-20}, -{47,-1,-19}, -{47,-1,-18}, -{47,-1,-17}, -{47,-1,-16}, -{47,-1,-15}, -{47,-1,-14}, -{47,-1,-13}, -{47,-1,-12}, -{47,-1,-11}, -{47,-1,-10}, -{47,-1,-9}, -{47,-1,-8}, -{47,-1,-7}, -{47,-1,-6}, -{47,-1,-5}, -{47,-1,-4}, -{47,-1,-3}, -{47,-1,-2}, -{47,-1,-1}, -{47,-1,0}, -{47,-1,1}, -{47,-1,2}, -{47,-1,3}, -{47,-1,4}, -{47,-1,5}, -{47,-1,6}, -{47,-1,7}, -{47,-1,8}, -{47,-1,9}, -{47,-1,10}, -{47,-1,11}, -{47,-1,12}, -{47,-1,13}, -{47,-1,14}, -{47,-1,15}, -{47,-1,16}, -{47,-1,17}, -{47,-1,18}, -{47,-1,19}, -{47,-1,20}, -{47,-1,21}, -{47,-1,22}, -{47,-1,23}, -{47,-1,24}, -{47,-1,25}, -{47,-1,26}, -{47,-1,27}, -{47,-1,28}, -{47,-1,29}, -{47,-1,30}, -{47,-1,31}, -{47,-1,32}, -{47,-1,33}, -{47,-1,34}, -{47,-1,35}, -{47,-1,36}, -{47,-1,37}, -{47,-1,38}, -{47,-1,39}, -{47,-1,40}, -{47,-1,41}, -{47,-1,42}, -{47,-1,43}, -{47,-1,44}, -{47,-1,45}, -{47,-1,46}, -{47,-1,47}, -{47,-1,48}, -{47,-1,49}, -{47,-1,50}, -{47,-1,51}, -{47,-1,52}, -{47,-1,53}, -{47,0,-45}, -{47,0,-44}, -{47,0,-43}, -{47,0,-42}, -{47,0,-41}, -{47,0,-40}, -{47,0,-39}, -{47,0,-38}, -{47,0,-37}, -{47,0,-36}, -{47,0,-35}, -{47,0,-34}, -{47,0,-33}, -{47,0,-32}, -{47,0,-31}, -{47,0,-30}, -{47,0,-29}, -{47,0,-28}, -{47,0,-27}, -{47,0,-26}, -{47,0,-25}, -{47,0,-24}, -{47,0,-23}, -{47,0,-22}, -{47,0,-21}, -{47,0,-20}, -{47,0,-19}, -{47,0,-18}, -{47,0,-17}, -{47,0,-16}, -{47,0,-15}, -{47,0,-14}, -{47,0,-13}, -{47,0,-12}, -{47,0,-11}, -{47,0,-10}, -{47,0,-9}, -{47,0,-8}, -{47,0,-7}, -{47,0,-6}, -{47,0,-5}, -{47,0,-4}, -{47,0,-3}, -{47,0,-2}, -{47,0,-1}, -{47,0,0}, -{47,0,1}, -{47,0,2}, -{47,0,3}, -{47,0,4}, -{47,0,5}, -{47,0,6}, -{47,0,7}, -{47,0,8}, -{47,0,9}, -{47,0,10}, -{47,0,11}, -{47,0,12}, -{47,0,13}, -{47,0,14}, -{47,0,15}, -{47,0,16}, -{47,0,17}, -{47,0,18}, -{47,0,19}, -{47,0,20}, -{47,0,21}, -{47,0,22}, -{47,0,23}, -{47,0,24}, -{47,0,25}, -{47,0,26}, -{47,0,27}, -{47,0,28}, -{47,0,29}, -{47,0,30}, -{47,0,31}, -{47,0,32}, -{47,0,33}, -{47,0,34}, -{47,0,35}, -{47,0,36}, -{47,0,37}, -{47,0,38}, -{47,0,39}, -{47,0,40}, -{47,0,41}, -{47,0,42}, -{47,0,43}, -{47,0,44}, -{47,0,45}, -{47,0,46}, -{47,0,47}, -{47,0,48}, -{47,0,49}, -{47,0,50}, -{47,0,51}, -{47,0,52}, -{47,0,53}, -{47,1,-46}, -{47,1,-45}, -{47,1,-44}, -{47,1,-43}, -{47,1,-42}, -{47,1,-41}, -{47,1,-40}, -{47,1,-39}, -{47,1,-38}, -{47,1,-37}, -{47,1,-36}, -{47,1,-35}, -{47,1,-34}, -{47,1,-33}, -{47,1,-32}, -{47,1,-31}, -{47,1,-30}, -{47,1,-29}, -{47,1,-28}, -{47,1,-27}, -{47,1,-26}, -{47,1,-25}, -{47,1,-24}, -{47,1,-23}, -{47,1,-22}, -{47,1,-21}, -{47,1,-20}, -{47,1,-19}, -{47,1,-18}, -{47,1,-17}, -{47,1,-16}, -{47,1,-15}, -{47,1,-14}, -{47,1,-13}, -{47,1,-12}, -{47,1,-11}, -{47,1,-10}, -{47,1,-9}, -{47,1,-8}, -{47,1,-7}, -{47,1,-6}, -{47,1,-5}, -{47,1,-4}, -{47,1,-3}, -{47,1,-2}, -{47,1,-1}, -{47,1,0}, -{47,1,1}, -{47,1,2}, -{47,1,3}, -{47,1,4}, -{47,1,5}, -{47,1,6}, -{47,1,7}, -{47,1,8}, -{47,1,9}, -{47,1,10}, -{47,1,11}, -{47,1,12}, -{47,1,13}, -{47,1,14}, -{47,1,15}, -{47,1,16}, -{47,1,17}, -{47,1,18}, -{47,1,19}, -{47,1,20}, -{47,1,21}, -{47,1,22}, -{47,1,23}, -{47,1,24}, -{47,1,25}, -{47,1,26}, -{47,1,27}, -{47,1,28}, -{47,1,29}, -{47,1,30}, -{47,1,31}, -{47,1,32}, -{47,1,33}, -{47,1,34}, -{47,1,35}, -{47,1,36}, -{47,1,37}, -{47,1,38}, -{47,1,39}, -{47,1,40}, -{47,1,41}, -{47,1,42}, -{47,1,43}, -{47,1,44}, -{47,1,45}, -{47,1,46}, -{47,1,47}, -{47,1,48}, -{47,1,49}, -{47,1,50}, -{47,1,51}, -{47,1,52}, -{47,1,53}, -{47,2,-47}, -{47,2,-46}, -{47,2,-45}, -{47,2,-44}, -{47,2,-43}, -{47,2,-42}, -{47,2,-41}, -{47,2,-40}, -{47,2,-39}, -{47,2,-38}, -{47,2,-37}, -{47,2,-36}, -{47,2,-35}, -{47,2,-34}, -{47,2,-33}, -{47,2,-32}, -{47,2,-31}, -{47,2,-30}, -{47,2,-29}, -{47,2,-28}, -{47,2,-27}, -{47,2,-26}, -{47,2,-25}, -{47,2,-24}, -{47,2,-23}, -{47,2,-22}, -{47,2,-21}, -{47,2,-20}, -{47,2,-19}, -{47,2,-18}, -{47,2,-17}, -{47,2,-16}, -{47,2,-15}, -{47,2,-14}, -{47,2,-13}, -{47,2,-12}, -{47,2,-11}, -{47,2,-10}, -{47,2,-9}, -{47,2,-8}, -{47,2,-7}, -{47,2,-6}, -{47,2,-5}, -{47,2,-4}, -{47,2,-3}, -{47,2,-2}, -{47,2,-1}, -{47,2,0}, -{47,2,1}, -{47,2,2}, -{47,2,3}, -{47,2,4}, -{47,2,5}, -{47,2,6}, -{47,2,7}, -{47,2,8}, -{47,2,9}, -{47,2,10}, -{47,2,11}, -{47,2,12}, -{47,2,13}, -{47,2,14}, -{47,2,15}, -{47,2,16}, -{47,2,17}, -{47,2,18}, -{47,2,19}, -{47,2,20}, -{47,2,21}, -{47,2,22}, -{47,2,23}, -{47,2,24}, -{47,2,25}, -{47,2,26}, -{47,2,27}, -{47,2,28}, -{47,2,29}, -{47,2,30}, -{47,2,31}, -{47,2,32}, -{47,2,33}, -{47,2,34}, -{47,2,35}, -{47,2,36}, -{47,2,37}, -{47,2,38}, -{47,2,39}, -{47,2,40}, -{47,2,41}, -{47,2,42}, -{47,2,43}, -{47,2,44}, -{47,2,45}, -{47,2,46}, -{47,2,47}, -{47,2,48}, -{47,2,49}, -{47,2,50}, -{47,2,51}, -{47,2,52}, -{47,2,53}, -{47,3,-48}, -{47,3,-47}, -{47,3,-46}, -{47,3,-45}, -{47,3,-44}, -{47,3,-43}, -{47,3,-42}, -{47,3,-41}, -{47,3,-40}, -{47,3,-39}, -{47,3,-38}, -{47,3,-37}, -{47,3,-36}, -{47,3,-35}, -{47,3,-34}, -{47,3,-33}, -{47,3,-32}, -{47,3,-31}, -{47,3,-30}, -{47,3,-29}, -{47,3,-28}, -{47,3,-27}, -{47,3,-26}, -{47,3,-25}, -{47,3,-24}, -{47,3,-23}, -{47,3,-22}, -{47,3,-21}, -{47,3,-20}, -{47,3,-19}, -{47,3,-18}, -{47,3,-17}, -{47,3,-16}, -{47,3,-15}, -{47,3,-14}, -{47,3,-13}, -{47,3,-12}, -{47,3,-11}, -{47,3,-10}, -{47,3,-9}, -{47,3,-8}, -{47,3,-7}, -{47,3,-6}, -{47,3,-5}, -{47,3,-4}, -{47,3,-3}, -{47,3,-2}, -{47,3,-1}, -{47,3,0}, -{47,3,1}, -{47,3,2}, -{47,3,3}, -{47,3,4}, -{47,3,5}, -{47,3,6}, -{47,3,7}, -{47,3,8}, -{47,3,9}, -{47,3,10}, -{47,3,11}, -{47,3,12}, -{47,3,13}, -{47,3,14}, -{47,3,15}, -{47,3,16}, -{47,3,17}, -{47,3,18}, -{47,3,19}, -{47,3,20}, -{47,3,21}, -{47,3,22}, -{47,3,23}, -{47,3,24}, -{47,3,25}, -{47,3,26}, -{47,3,27}, -{47,3,28}, -{47,3,29}, -{47,3,30}, -{47,3,31}, -{47,3,32}, -{47,3,33}, -{47,3,34}, -{47,3,35}, -{47,3,36}, -{47,3,37}, -{47,3,38}, -{47,3,39}, -{47,3,40}, -{47,3,41}, -{47,3,42}, -{47,3,43}, -{47,3,44}, -{47,3,45}, -{47,3,46}, -{47,3,47}, -{47,3,48}, -{47,3,49}, -{47,3,50}, -{47,3,51}, -{47,3,52}, -{47,3,53}, -{47,4,-49}, -{47,4,-48}, -{47,4,-47}, -{47,4,-46}, -{47,4,-45}, -{47,4,-44}, -{47,4,-43}, -{47,4,-42}, -{47,4,-41}, -{47,4,-40}, -{47,4,-39}, -{47,4,-38}, -{47,4,-37}, -{47,4,-36}, -{47,4,-35}, -{47,4,-34}, -{47,4,-33}, -{47,4,-32}, -{47,4,-31}, -{47,4,-30}, -{47,4,-29}, -{47,4,-28}, -{47,4,-27}, -{47,4,-26}, -{47,4,-25}, -{47,4,-24}, -{47,4,-23}, -{47,4,-22}, -{47,4,-21}, -{47,4,-20}, -{47,4,-19}, -{47,4,-18}, -{47,4,-17}, -{47,4,-16}, -{47,4,-15}, -{47,4,-14}, -{47,4,-13}, -{47,4,-12}, -{47,4,-11}, -{47,4,-10}, -{47,4,-9}, -{47,4,-8}, -{47,4,-7}, -{47,4,-6}, -{47,4,-5}, -{47,4,-4}, -{47,4,-3}, -{47,4,-2}, -{47,4,-1}, -{47,4,0}, -{47,4,1}, -{47,4,2}, -{47,4,3}, -{47,4,4}, -{47,4,5}, -{47,4,6}, -{47,4,7}, -{47,4,8}, -{47,4,9}, -{47,4,10}, -{47,4,11}, -{47,4,12}, -{47,4,13}, -{47,4,14}, -{47,4,15}, -{47,4,16}, -{47,4,17}, -{47,4,18}, -{47,4,19}, -{47,4,20}, -{47,4,21}, -{47,4,22}, -{47,4,23}, -{47,4,24}, -{47,4,25}, -{47,4,26}, -{47,4,27}, -{47,4,28}, -{47,4,29}, -{47,4,30}, -{47,4,31}, -{47,4,32}, -{47,4,33}, -{47,4,34}, -{47,4,35}, -{47,4,36}, -{47,4,37}, -{47,4,38}, -{47,4,39}, -{47,4,40}, -{47,4,41}, -{47,4,42}, -{47,4,43}, -{47,4,44}, -{47,4,45}, -{47,4,46}, -{47,4,47}, -{47,4,48}, -{47,4,49}, -{47,4,50}, -{47,4,51}, -{47,4,52}, -{47,4,53}, -{47,5,-50}, -{47,5,-49}, -{47,5,-48}, -{47,5,-47}, -{47,5,-46}, -{47,5,-45}, -{47,5,-44}, -{47,5,-43}, -{47,5,-42}, -{47,5,-41}, -{47,5,-40}, -{47,5,-39}, -{47,5,-38}, -{47,5,-37}, -{47,5,-36}, -{47,5,-35}, -{47,5,-34}, -{47,5,-33}, -{47,5,-32}, -{47,5,-31}, -{47,5,-30}, -{47,5,-29}, -{47,5,-28}, -{47,5,-27}, -{47,5,-26}, -{47,5,-25}, -{47,5,-24}, -{47,5,-23}, -{47,5,-22}, -{47,5,-21}, -{47,5,-20}, -{47,5,-19}, -{47,5,-18}, -{47,5,-17}, -{47,5,-16}, -{47,5,-15}, -{47,5,-14}, -{47,5,-13}, -{47,5,-12}, -{47,5,-11}, -{47,5,-10}, -{47,5,-9}, -{47,5,-8}, -{47,5,-7}, -{47,5,-6}, -{47,5,-5}, -{47,5,-4}, -{47,5,-3}, -{47,5,-2}, -{47,5,-1}, -{47,5,0}, -{47,5,1}, -{47,5,2}, -{47,5,3}, -{47,5,4}, -{47,5,5}, -{47,5,6}, -{47,5,7}, -{47,5,8}, -{47,5,9}, -{47,5,10}, -{47,5,11}, -{47,5,12}, -{47,5,13}, -{47,5,14}, -{47,5,15}, -{47,5,16}, -{47,5,17}, -{47,5,18}, -{47,5,19}, -{47,5,20}, -{47,5,21}, -{47,5,22}, -{47,5,23}, -{47,5,24}, -{47,5,25}, -{47,5,26}, -{47,5,27}, -{47,5,28}, -{47,5,29}, -{47,5,30}, -{47,5,31}, -{47,5,32}, -{47,5,33}, -{47,5,34}, -{47,5,35}, -{47,5,36}, -{47,5,37}, -{47,5,38}, -{47,5,39}, -{47,5,40}, -{47,5,41}, -{47,5,42}, -{47,5,43}, -{47,5,44}, -{47,5,45}, -{47,5,46}, -{47,5,47}, -{47,5,48}, -{47,5,49}, -{47,5,50}, -{47,5,51}, -{47,5,52}, -{47,5,53}, -{47,6,-52}, -{47,6,-51}, -{47,6,-50}, -{47,6,-49}, -{47,6,-48}, -{47,6,-47}, -{47,6,-46}, -{47,6,-45}, -{47,6,-44}, -{47,6,-43}, -{47,6,-42}, -{47,6,-41}, -{47,6,-40}, -{47,6,-39}, -{47,6,-38}, -{47,6,-37}, -{47,6,-36}, -{47,6,-35}, -{47,6,-34}, -{47,6,-33}, -{47,6,-32}, -{47,6,-31}, -{47,6,-30}, -{47,6,-29}, -{47,6,-28}, -{47,6,-27}, -{47,6,-26}, -{47,6,-25}, -{47,6,-24}, -{47,6,-23}, -{47,6,-22}, -{47,6,-21}, -{47,6,-20}, -{47,6,-19}, -{47,6,-18}, -{47,6,-17}, -{47,6,-16}, -{47,6,-15}, -{47,6,-14}, -{47,6,-13}, -{47,6,-12}, -{47,6,-11}, -{47,6,-10}, -{47,6,-9}, -{47,6,-8}, -{47,6,-7}, -{47,6,-6}, -{47,6,-5}, -{47,6,-4}, -{47,6,-3}, -{47,6,-2}, -{47,6,-1}, -{47,6,0}, -{47,6,1}, -{47,6,2}, -{47,6,3}, -{47,6,4}, -{47,6,5}, -{47,6,6}, -{47,6,7}, -{47,6,8}, -{47,6,9}, -{47,6,10}, -{47,6,11}, -{47,6,12}, -{47,6,13}, -{47,6,14}, -{47,6,15}, -{47,6,16}, -{47,6,17}, -{47,6,18}, -{47,6,19}, -{47,6,20}, -{47,6,21}, -{47,6,22}, -{47,6,23}, -{47,6,24}, -{47,6,25}, -{47,6,26}, -{47,6,27}, -{47,6,28}, -{47,6,29}, -{47,6,30}, -{47,6,31}, -{47,6,32}, -{47,6,33}, -{47,6,34}, -{47,6,35}, -{47,6,36}, -{47,6,37}, -{47,6,38}, -{47,6,39}, -{47,6,40}, -{47,6,41}, -{47,6,42}, -{47,6,43}, -{47,6,44}, -{47,6,45}, -{47,6,46}, -{47,6,47}, -{47,6,48}, -{47,6,49}, -{47,6,50}, -{47,6,51}, -{47,6,52}, -{47,6,53}, -{47,6,54}, -{47,7,-53}, -{47,7,-52}, -{47,7,-51}, -{47,7,-50}, -{47,7,-49}, -{47,7,-48}, -{47,7,-47}, -{47,7,-46}, -{47,7,-45}, -{47,7,-44}, -{47,7,-43}, -{47,7,-42}, -{47,7,-41}, -{47,7,-40}, -{47,7,-39}, -{47,7,-38}, -{47,7,-37}, -{47,7,-36}, -{47,7,-35}, -{47,7,-34}, -{47,7,-33}, -{47,7,-32}, -{47,7,-31}, -{47,7,-30}, -{47,7,-29}, -{47,7,-28}, -{47,7,-27}, -{47,7,-26}, -{47,7,-25}, -{47,7,-24}, -{47,7,-23}, -{47,7,-22}, -{47,7,-21}, -{47,7,-20}, -{47,7,-19}, -{47,7,-18}, -{47,7,-17}, -{47,7,-16}, -{47,7,-15}, -{47,7,-14}, -{47,7,-13}, -{47,7,-12}, -{47,7,-11}, -{47,7,-10}, -{47,7,-9}, -{47,7,-8}, -{47,7,-7}, -{47,7,-6}, -{47,7,-5}, -{47,7,-4}, -{47,7,-3}, -{47,7,-2}, -{47,7,-1}, -{47,7,0}, -{47,7,1}, -{47,7,2}, -{47,7,3}, -{47,7,4}, -{47,7,5}, -{47,7,6}, -{47,7,7}, -{47,7,8}, -{47,7,9}, -{47,7,10}, -{47,7,11}, -{47,7,12}, -{47,7,13}, -{47,7,14}, -{47,7,15}, -{47,7,16}, -{47,7,17}, -{47,7,18}, -{47,7,19}, -{47,7,20}, -{47,7,21}, -{47,7,22}, -{47,7,23}, -{47,7,24}, -{47,7,25}, -{47,7,26}, -{47,7,27}, -{47,7,28}, -{47,7,29}, -{47,7,30}, -{47,7,31}, -{47,7,32}, -{47,7,33}, -{47,7,34}, -{47,7,35}, -{47,7,36}, -{47,7,37}, -{47,7,38}, -{47,7,39}, -{47,7,40}, -{47,7,41}, -{47,7,42}, -{47,7,43}, -{47,7,44}, -{47,7,45}, -{47,7,46}, -{47,7,47}, -{47,7,48}, -{47,7,49}, -{47,7,50}, -{47,7,51}, -{47,7,52}, -{47,7,53}, -{47,7,54}, -{47,8,-54}, -{47,8,-53}, -{47,8,-52}, -{47,8,-51}, -{47,8,-50}, -{47,8,-49}, -{47,8,-48}, -{47,8,-47}, -{47,8,-46}, -{47,8,-45}, -{47,8,-44}, -{47,8,-43}, -{47,8,-42}, -{47,8,-41}, -{47,8,-40}, -{47,8,-39}, -{47,8,-38}, -{47,8,-37}, -{47,8,-36}, -{47,8,-35}, -{47,8,-34}, -{47,8,-33}, -{47,8,-32}, -{47,8,-31}, -{47,8,-30}, -{47,8,-29}, -{47,8,-28}, -{47,8,-27}, -{47,8,-26}, -{47,8,-25}, -{47,8,-24}, -{47,8,-23}, -{47,8,-22}, -{47,8,-21}, -{47,8,-20}, -{47,8,-19}, -{47,8,-18}, -{47,8,-17}, -{47,8,-16}, -{47,8,-15}, -{47,8,-14}, -{47,8,-13}, -{47,8,-12}, -{47,8,-11}, -{47,8,-10}, -{47,8,-9}, -{47,8,-8}, -{47,8,-7}, -{47,8,-6}, -{47,8,-5}, -{47,8,-4}, -{47,8,-3}, -{47,8,-2}, -{47,8,-1}, -{47,8,0}, -{47,8,1}, -{47,8,2}, -{47,8,3}, -{47,8,4}, -{47,8,5}, -{47,8,6}, -{47,8,7}, -{47,8,8}, -{47,8,9}, -{47,8,10}, -{47,8,11}, -{47,8,12}, -{47,8,13}, -{47,8,14}, -{47,8,15}, -{47,8,16}, -{47,8,17}, -{47,8,18}, -{47,8,19}, -{47,8,20}, -{47,8,21}, -{47,8,22}, -{47,8,23}, -{47,8,24}, -{47,8,25}, -{47,8,26}, -{47,8,27}, -{47,8,28}, -{47,8,29}, -{47,8,30}, -{47,8,31}, -{47,8,32}, -{47,8,33}, -{47,8,34}, -{47,8,35}, -{47,8,36}, -{47,8,37}, -{47,8,38}, -{47,8,39}, -{47,8,40}, -{47,8,41}, -{47,8,42}, -{47,8,43}, -{47,8,44}, -{47,8,45}, -{47,8,46}, -{47,8,47}, -{47,8,48}, -{47,8,49}, -{47,8,50}, -{47,8,51}, -{47,8,52}, -{47,8,53}, -{47,8,54}, -{47,9,-55}, -{47,9,-54}, -{47,9,-53}, -{47,9,-52}, -{47,9,-51}, -{47,9,-50}, -{47,9,-49}, -{47,9,-48}, -{47,9,-47}, -{47,9,-46}, -{47,9,-45}, -{47,9,-44}, -{47,9,-43}, -{47,9,-42}, -{47,9,-41}, -{47,9,-40}, -{47,9,-39}, -{47,9,-38}, -{47,9,-37}, -{47,9,-36}, -{47,9,-35}, -{47,9,-34}, -{47,9,-33}, -{47,9,-32}, -{47,9,-31}, -{47,9,-30}, -{47,9,-29}, -{47,9,-28}, -{47,9,-27}, -{47,9,-26}, -{47,9,-25}, -{47,9,-24}, -{47,9,-23}, -{47,9,-22}, -{47,9,-21}, -{47,9,-20}, -{47,9,-19}, -{47,9,-18}, -{47,9,-17}, -{47,9,-16}, -{47,9,-15}, -{47,9,-14}, -{47,9,-13}, -{47,9,-12}, -{47,9,-11}, -{47,9,-10}, -{47,9,-9}, -{47,9,-8}, -{47,9,-7}, -{47,9,-6}, -{47,9,-5}, -{47,9,-4}, -{47,9,-3}, -{47,9,-2}, -{47,9,-1}, -{47,9,0}, -{47,9,1}, -{47,9,2}, -{47,9,3}, -{47,9,4}, -{47,9,5}, -{47,9,6}, -{47,9,7}, -{47,9,8}, -{47,9,9}, -{47,9,10}, -{47,9,11}, -{47,9,12}, -{47,9,13}, -{47,9,14}, -{47,9,15}, -{47,9,16}, -{47,9,17}, -{47,9,18}, -{47,9,19}, -{47,9,20}, -{47,9,21}, -{47,9,22}, -{47,9,23}, -{47,9,24}, -{47,9,25}, -{47,9,26}, -{47,9,27}, -{47,9,28}, -{47,9,29}, -{47,9,30}, -{47,9,31}, -{47,9,32}, -{47,9,33}, -{47,9,34}, -{47,9,35}, -{47,9,36}, -{47,9,37}, -{47,9,38}, -{47,9,39}, -{47,9,40}, -{47,9,41}, -{47,9,42}, -{47,9,43}, -{47,9,44}, -{47,9,45}, -{47,9,46}, -{47,9,47}, -{47,9,48}, -{47,9,49}, -{47,9,50}, -{47,9,51}, -{47,9,52}, -{47,9,53}, -{47,9,54}, -{47,10,-56}, -{47,10,-55}, -{47,10,-54}, -{47,10,-53}, -{47,10,-52}, -{47,10,-51}, -{47,10,-50}, -{47,10,-49}, -{47,10,-48}, -{47,10,-47}, -{47,10,-46}, -{47,10,-45}, -{47,10,-44}, -{47,10,-43}, -{47,10,-42}, -{47,10,-41}, -{47,10,-40}, -{47,10,-39}, -{47,10,-38}, -{47,10,-37}, -{47,10,-36}, -{47,10,-35}, -{47,10,-34}, -{47,10,-33}, -{47,10,-32}, -{47,10,-31}, -{47,10,-30}, -{47,10,-29}, -{47,10,-28}, -{47,10,-27}, -{47,10,-26}, -{47,10,-25}, -{47,10,-24}, -{47,10,-23}, -{47,10,-22}, -{47,10,-21}, -{47,10,-20}, -{47,10,-19}, -{47,10,-18}, -{47,10,-17}, -{47,10,-16}, -{47,10,-15}, -{47,10,-14}, -{47,10,-13}, -{47,10,-12}, -{47,10,-11}, -{47,10,-10}, -{47,10,-9}, -{47,10,-8}, -{47,10,-7}, -{47,10,-6}, -{47,10,-5}, -{47,10,-4}, -{47,10,-3}, -{47,10,-2}, -{47,10,-1}, -{47,10,0}, -{47,10,1}, -{47,10,2}, -{47,10,3}, -{47,10,4}, -{47,10,5}, -{47,10,6}, -{47,10,7}, -{47,10,8}, -{47,10,9}, -{47,10,10}, -{47,10,11}, -{47,10,12}, -{47,10,13}, -{47,10,14}, -{47,10,15}, -{47,10,16}, -{47,10,17}, -{47,10,18}, -{47,10,19}, -{47,10,20}, -{47,10,21}, -{47,10,22}, -{47,10,23}, -{47,10,24}, -{47,10,25}, -{47,10,26}, -{47,10,27}, -{47,10,28}, -{47,10,29}, -{47,10,30}, -{47,10,31}, -{47,10,32}, -{47,10,33}, -{47,10,34}, -{47,10,35}, -{47,10,36}, -{47,10,37}, -{47,10,38}, -{47,10,39}, -{47,10,40}, -{47,10,41}, -{47,10,42}, -{47,10,43}, -{47,10,44}, -{47,10,45}, -{47,10,46}, -{47,10,47}, -{47,10,48}, -{47,10,49}, -{47,10,50}, -{47,10,51}, -{47,10,52}, -{47,10,53}, -{47,10,54}, -{47,11,-57}, -{47,11,-56}, -{47,11,-55}, -{47,11,-54}, -{47,11,-53}, -{47,11,-52}, -{47,11,-51}, -{47,11,-50}, -{47,11,-49}, -{47,11,-48}, -{47,11,-47}, -{47,11,-46}, -{47,11,-45}, -{47,11,-44}, -{47,11,-43}, -{47,11,-42}, -{47,11,-41}, -{47,11,-40}, -{47,11,-39}, -{47,11,-38}, -{47,11,-37}, -{47,11,-36}, -{47,11,-35}, -{47,11,-34}, -{47,11,-33}, -{47,11,-32}, -{47,11,-31}, -{47,11,-30}, -{47,11,-29}, -{47,11,-28}, -{47,11,-27}, -{47,11,-26}, -{47,11,-25}, -{47,11,-24}, -{47,11,-23}, -{47,11,-22}, -{47,11,-21}, -{47,11,-20}, -{47,11,-19}, -{47,11,-18}, -{47,11,-17}, -{47,11,-16}, -{47,11,-15}, -{47,11,-14}, -{47,11,-13}, -{47,11,-12}, -{47,11,-11}, -{47,11,-10}, -{47,11,-9}, -{47,11,-8}, -{47,11,-7}, -{47,11,-6}, -{47,11,-5}, -{47,11,-4}, -{47,11,-3}, -{47,11,-2}, -{47,11,-1}, -{47,11,0}, -{47,11,1}, -{47,11,2}, -{47,11,3}, -{47,11,4}, -{47,11,5}, -{47,11,6}, -{47,11,7}, -{47,11,8}, -{47,11,9}, -{47,11,10}, -{47,11,11}, -{47,11,12}, -{47,11,13}, -{47,11,14}, -{47,11,15}, -{47,11,16}, -{47,11,17}, -{47,11,18}, -{47,11,19}, -{47,11,20}, -{47,11,21}, -{47,11,22}, -{47,11,23}, -{47,11,24}, -{47,11,25}, -{47,11,26}, -{47,11,27}, -{47,11,28}, -{47,11,29}, -{47,11,30}, -{47,11,31}, -{47,11,32}, -{47,11,33}, -{47,11,34}, -{47,11,35}, -{47,11,36}, -{47,11,37}, -{47,11,38}, -{47,11,39}, -{47,11,40}, -{47,11,41}, -{47,11,42}, -{47,11,43}, -{47,11,44}, -{47,11,45}, -{47,11,46}, -{47,11,47}, -{47,11,48}, -{47,11,49}, -{47,11,50}, -{47,11,51}, -{47,11,52}, -{47,11,53}, -{47,11,54}, -{47,12,-58}, -{47,12,-57}, -{47,12,-56}, -{47,12,-55}, -{47,12,-54}, -{47,12,-53}, -{47,12,-52}, -{47,12,-51}, -{47,12,-50}, -{47,12,-49}, -{47,12,-48}, -{47,12,-47}, -{47,12,-46}, -{47,12,-45}, -{47,12,-44}, -{47,12,-43}, -{47,12,-42}, -{47,12,-41}, -{47,12,-40}, -{47,12,-39}, -{47,12,-38}, -{47,12,-37}, -{47,12,-36}, -{47,12,-35}, -{47,12,-34}, -{47,12,-33}, -{47,12,-32}, -{47,12,-31}, -{47,12,-30}, -{47,12,-29}, -{47,12,-28}, -{47,12,-27}, -{47,12,-26}, -{47,12,-25}, -{47,12,-24}, -{47,12,-23}, -{47,12,-22}, -{47,12,-21}, -{47,12,-20}, -{47,12,-19}, -{47,12,-18}, -{47,12,-17}, -{47,12,-16}, -{47,12,-15}, -{47,12,-14}, -{47,12,-13}, -{47,12,-12}, -{47,12,-11}, -{47,12,-10}, -{47,12,-9}, -{47,12,-8}, -{47,12,-7}, -{47,12,-6}, -{47,12,-5}, -{47,12,-4}, -{47,12,-3}, -{47,12,-2}, -{47,12,-1}, -{47,12,0}, -{47,12,1}, -{47,12,2}, -{47,12,3}, -{47,12,4}, -{47,12,5}, -{47,12,6}, -{47,12,7}, -{47,12,8}, -{47,12,9}, -{47,12,10}, -{47,12,11}, -{47,12,12}, -{47,12,13}, -{47,12,14}, -{47,12,15}, -{47,12,16}, -{47,12,17}, -{47,12,18}, -{47,12,19}, -{47,12,20}, -{47,12,21}, -{47,12,22}, -{47,12,23}, -{47,12,24}, -{47,12,25}, -{47,12,26}, -{47,12,27}, -{47,12,28}, -{47,12,29}, -{47,12,30}, -{47,12,31}, -{47,12,32}, -{47,12,33}, -{47,12,34}, -{47,12,35}, -{47,12,36}, -{47,12,37}, -{47,12,38}, -{47,12,39}, -{47,12,40}, -{47,12,41}, -{47,12,42}, -{47,12,43}, -{47,12,44}, -{47,12,45}, -{47,12,46}, -{47,12,47}, -{47,12,48}, -{47,12,49}, -{47,12,50}, -{47,12,51}, -{47,12,52}, -{47,12,53}, -{47,12,54}, -{47,13,-59}, -{47,13,-58}, -{47,13,-57}, -{47,13,-56}, -{47,13,-55}, -{47,13,-54}, -{47,13,-53}, -{47,13,-52}, -{47,13,-51}, -{47,13,-50}, -{47,13,-49}, -{47,13,-48}, -{47,13,-47}, -{47,13,-46}, -{47,13,-45}, -{47,13,-44}, -{47,13,-43}, -{47,13,-42}, -{47,13,-41}, -{47,13,-40}, -{47,13,-39}, -{47,13,-38}, -{47,13,-37}, -{47,13,-36}, -{47,13,-35}, -{47,13,-34}, -{47,13,-33}, -{47,13,-32}, -{47,13,-31}, -{47,13,-30}, -{47,13,-29}, -{47,13,-28}, -{47,13,-27}, -{47,13,-26}, -{47,13,-25}, -{47,13,-24}, -{47,13,-23}, -{47,13,-22}, -{47,13,-21}, -{47,13,-20}, -{47,13,-19}, -{47,13,-18}, -{47,13,-17}, -{47,13,-16}, -{47,13,-15}, -{47,13,-14}, -{47,13,-13}, -{47,13,-12}, -{47,13,-11}, -{47,13,-10}, -{47,13,-9}, -{47,13,-8}, -{47,13,-7}, -{47,13,-6}, -{47,13,-5}, -{47,13,-4}, -{47,13,-3}, -{47,13,-2}, -{47,13,-1}, -{47,13,0}, -{47,13,1}, -{47,13,2}, -{47,13,3}, -{47,13,4}, -{47,13,5}, -{47,13,6}, -{47,13,7}, -{47,13,8}, -{47,13,9}, -{47,13,10}, -{47,13,11}, -{47,13,12}, -{47,13,13}, -{47,13,14}, -{47,13,15}, -{47,13,16}, -{47,13,17}, -{47,13,18}, -{47,13,19}, -{47,13,20}, -{47,13,21}, -{47,13,22}, -{47,13,23}, -{47,13,24}, -{47,13,25}, -{47,13,26}, -{47,13,27}, -{47,13,28}, -{47,13,29}, -{47,13,30}, -{47,13,31}, -{47,13,32}, -{47,13,33}, -{47,13,34}, -{47,13,35}, -{47,13,36}, -{47,13,37}, -{47,13,38}, -{47,13,39}, -{47,13,40}, -{47,13,41}, -{47,13,42}, -{47,13,43}, -{47,13,44}, -{47,13,45}, -{47,13,46}, -{47,13,47}, -{47,13,48}, -{47,13,49}, -{47,13,50}, -{47,13,51}, -{47,13,52}, -{47,13,53}, -{47,13,54}, -{47,14,-60}, -{47,14,-59}, -{47,14,-58}, -{47,14,-57}, -{47,14,-56}, -{47,14,-55}, -{47,14,-54}, -{47,14,-53}, -{47,14,-52}, -{47,14,-51}, -{47,14,-50}, -{47,14,-49}, -{47,14,-48}, -{47,14,-47}, -{47,14,-46}, -{47,14,-45}, -{47,14,-44}, -{47,14,-43}, -{47,14,-42}, -{47,14,-41}, -{47,14,-40}, -{47,14,-39}, -{47,14,-38}, -{47,14,-37}, -{47,14,-36}, -{47,14,-35}, -{47,14,-34}, -{47,14,-33}, -{47,14,-32}, -{47,14,-31}, -{47,14,-30}, -{47,14,-29}, -{47,14,-28}, -{47,14,-27}, -{47,14,-26}, -{47,14,-25}, -{47,14,-24}, -{47,14,-23}, -{47,14,-22}, -{47,14,-21}, -{47,14,-20}, -{47,14,-19}, -{47,14,-18}, -{47,14,-17}, -{47,14,-16}, -{47,14,-15}, -{47,14,-14}, -{47,14,-13}, -{47,14,-12}, -{47,14,-11}, -{47,14,-10}, -{47,14,-9}, -{47,14,-8}, -{47,14,-7}, -{47,14,-6}, -{47,14,-5}, -{47,14,-4}, -{47,14,-3}, -{47,14,-2}, -{47,14,-1}, -{47,14,0}, -{47,14,1}, -{47,14,2}, -{47,14,3}, -{47,14,4}, -{47,14,5}, -{47,14,6}, -{47,14,7}, -{47,14,8}, -{47,14,9}, -{47,14,10}, -{47,14,11}, -{47,14,12}, -{47,14,13}, -{47,14,14}, -{47,14,15}, -{47,14,16}, -{47,14,17}, -{47,14,18}, -{47,14,19}, -{47,14,20}, -{47,14,21}, -{47,14,22}, -{47,14,23}, -{47,14,24}, -{47,14,25}, -{47,14,26}, -{47,14,27}, -{47,14,28}, -{47,14,29}, -{47,14,30}, -{47,14,31}, -{47,14,32}, -{47,14,33}, -{47,14,34}, -{47,14,35}, -{47,14,36}, -{47,14,37}, -{47,14,38}, -{47,14,39}, -{47,14,40}, -{47,14,41}, -{47,14,42}, -{47,14,43}, -{47,14,44}, -{47,14,45}, -{47,14,46}, -{47,14,47}, -{47,14,48}, -{47,14,49}, -{47,14,50}, -{47,14,51}, -{47,14,52}, -{47,14,53}, -{47,14,54}, -{47,15,-61}, -{47,15,-60}, -{47,15,-59}, -{47,15,-58}, -{47,15,-57}, -{47,15,-56}, -{47,15,-55}, -{47,15,-54}, -{47,15,-53}, -{47,15,-52}, -{47,15,-51}, -{47,15,-50}, -{47,15,-49}, -{47,15,-48}, -{47,15,-47}, -{47,15,-46}, -{47,15,-45}, -{47,15,-44}, -{47,15,-43}, -{47,15,-42}, -{47,15,-41}, -{47,15,-40}, -{47,15,-39}, -{47,15,-38}, -{47,15,-37}, -{47,15,-36}, -{47,15,-35}, -{47,15,-34}, -{47,15,-33}, -{47,15,-32}, -{47,15,-31}, -{47,15,-30}, -{47,15,-29}, -{47,15,-28}, -{47,15,-27}, -{47,15,-26}, -{47,15,-25}, -{47,15,-24}, -{47,15,-23}, -{47,15,-22}, -{47,15,-21}, -{47,15,-20}, -{47,15,-19}, -{47,15,-18}, -{47,15,-17}, -{47,15,-16}, -{47,15,-15}, -{47,15,-14}, -{47,15,-13}, -{47,15,-12}, -{47,15,-11}, -{47,15,-10}, -{47,15,-9}, -{47,15,-8}, -{47,15,-7}, -{47,15,-6}, -{47,15,-5}, -{47,15,-4}, -{47,15,-3}, -{47,15,-2}, -{47,15,-1}, -{47,15,0}, -{47,15,1}, -{47,15,2}, -{47,15,3}, -{47,15,4}, -{47,15,5}, -{47,15,6}, -{47,15,7}, -{47,15,8}, -{47,15,9}, -{47,15,10}, -{47,15,11}, -{47,15,12}, -{47,15,13}, -{47,15,14}, -{47,15,15}, -{47,15,16}, -{47,15,17}, -{47,15,18}, -{47,15,19}, -{47,15,20}, -{47,15,21}, -{47,15,22}, -{47,15,23}, -{47,15,24}, -{47,15,25}, -{47,15,26}, -{47,15,27}, -{47,15,28}, -{47,15,29}, -{47,15,30}, -{47,15,31}, -{47,15,32}, -{47,15,33}, -{47,15,34}, -{47,15,35}, -{47,15,36}, -{47,15,37}, -{47,15,38}, -{47,15,39}, -{47,15,40}, -{47,15,41}, -{47,15,42}, -{47,15,43}, -{47,15,44}, -{47,15,45}, -{47,15,46}, -{47,15,47}, -{47,15,48}, -{47,15,49}, -{47,15,50}, -{47,15,51}, -{47,15,52}, -{47,15,53}, -{47,15,54}, -{47,16,-62}, -{47,16,-61}, -{47,16,-60}, -{47,16,-59}, -{47,16,-58}, -{47,16,-57}, -{47,16,-56}, -{47,16,-55}, -{47,16,-54}, -{47,16,-53}, -{47,16,-52}, -{47,16,-51}, -{47,16,-50}, -{47,16,-49}, -{47,16,-48}, -{47,16,-47}, -{47,16,-46}, -{47,16,-45}, -{47,16,-44}, -{47,16,-43}, -{47,16,-42}, -{47,16,-41}, -{47,16,-40}, -{47,16,-39}, -{47,16,-38}, -{47,16,-37}, -{47,16,-36}, -{47,16,-35}, -{47,16,-34}, -{47,16,-33}, -{47,16,-32}, -{47,16,-31}, -{47,16,-30}, -{47,16,-29}, -{47,16,-28}, -{47,16,-27}, -{47,16,-26}, -{47,16,-25}, -{47,16,-24}, -{47,16,-23}, -{47,16,-22}, -{47,16,-21}, -{47,16,-20}, -{47,16,-19}, -{47,16,-18}, -{47,16,-17}, -{47,16,-16}, -{47,16,-15}, -{47,16,-14}, -{47,16,-13}, -{47,16,-12}, -{47,16,-11}, -{47,16,-10}, -{47,16,-9}, -{47,16,-8}, -{47,16,-7}, -{47,16,-6}, -{47,16,-5}, -{47,16,-4}, -{47,16,-3}, -{47,16,-2}, -{47,16,-1}, -{47,16,0}, -{47,16,1}, -{47,16,2}, -{47,16,3}, -{47,16,4}, -{47,16,5}, -{47,16,6}, -{47,16,7}, -{47,16,8}, -{47,16,9}, -{47,16,10}, -{47,16,11}, -{47,16,12}, -{47,16,13}, -{47,16,14}, -{47,16,15}, -{47,16,16}, -{47,16,17}, -{47,16,18}, -{47,16,19}, -{47,16,20}, -{47,16,21}, -{47,16,22}, -{47,16,23}, -{47,16,24}, -{47,16,25}, -{47,16,26}, -{47,16,27}, -{47,16,28}, -{47,16,29}, -{47,16,30}, -{47,16,31}, -{47,16,32}, -{47,16,33}, -{47,16,34}, -{47,16,35}, -{47,16,36}, -{47,16,37}, -{47,16,38}, -{47,16,39}, -{47,16,40}, -{47,16,41}, -{47,16,42}, -{47,16,43}, -{47,16,44}, -{47,16,45}, -{47,16,46}, -{47,16,47}, -{47,16,48}, -{47,16,49}, -{47,16,50}, -{47,16,51}, -{47,16,52}, -{47,16,53}, -{47,16,54}, -{47,17,-63}, -{47,17,-62}, -{47,17,-61}, -{47,17,-60}, -{47,17,-59}, -{47,17,-58}, -{47,17,-57}, -{47,17,-56}, -{47,17,-55}, -{47,17,-54}, -{47,17,-53}, -{47,17,-52}, -{47,17,-51}, -{47,17,-50}, -{47,17,-49}, -{47,17,-48}, -{47,17,-47}, -{47,17,-46}, -{47,17,-45}, -{47,17,-44}, -{47,17,-43}, -{47,17,-42}, -{47,17,-41}, -{47,17,-40}, -{47,17,-39}, -{47,17,-38}, -{47,17,-37}, -{47,17,-36}, -{47,17,-35}, -{47,17,-34}, -{47,17,-33}, -{47,17,-32}, -{47,17,-31}, -{47,17,-30}, -{47,17,-29}, -{47,17,-28}, -{47,17,-27}, -{47,17,-26}, -{47,17,-25}, -{47,17,-24}, -{47,17,-23}, -{47,17,-22}, -{47,17,-21}, -{47,17,-20}, -{47,17,-19}, -{47,17,-18}, -{47,17,-17}, -{47,17,-16}, -{47,17,-15}, -{47,17,-14}, -{47,17,-13}, -{47,17,-12}, -{47,17,-11}, -{47,17,-10}, -{47,17,-9}, -{47,17,-8}, -{47,17,-7}, -{47,17,-6}, -{47,17,-5}, -{47,17,-4}, -{47,17,-3}, -{47,17,-2}, -{47,17,-1}, -{47,17,0}, -{47,17,1}, -{47,17,2}, -{47,17,3}, -{47,17,4}, -{47,17,5}, -{47,17,6}, -{47,17,7}, -{47,17,8}, -{47,17,9}, -{47,17,10}, -{47,17,11}, -{47,17,12}, -{47,17,13}, -{47,17,14}, -{47,17,15}, -{47,17,16}, -{47,17,17}, -{47,17,18}, -{47,17,19}, -{47,17,20}, -{47,17,21}, -{47,17,22}, -{47,17,23}, -{47,17,24}, -{47,17,25}, -{47,17,26}, -{47,17,27}, -{47,17,28}, -{47,17,29}, -{47,17,30}, -{47,17,31}, -{47,17,32}, -{47,17,33}, -{47,17,34}, -{47,17,35}, -{47,17,36}, -{47,17,37}, -{47,17,38}, -{47,17,39}, -{47,17,40}, -{47,17,41}, -{47,17,42}, -{47,17,43}, -{47,17,44}, -{47,17,45}, -{47,17,46}, -{47,17,47}, -{47,17,48}, -{47,17,49}, -{47,17,50}, -{47,17,51}, -{47,17,52}, -{47,17,53}, -{47,17,54}, -{47,18,-64}, -{47,18,-63}, -{47,18,-62}, -{47,18,-61}, -{47,18,-60}, -{47,18,-59}, -{47,18,-58}, -{47,18,-57}, -{47,18,-56}, -{47,18,-55}, -{47,18,-54}, -{47,18,-53}, -{47,18,-52}, -{47,18,-51}, -{47,18,-50}, -{47,18,-49}, -{47,18,-48}, -{47,18,-47}, -{47,18,-46}, -{47,18,-45}, -{47,18,-44}, -{47,18,-43}, -{47,18,-42}, -{47,18,-41}, -{47,18,-40}, -{47,18,-39}, -{47,18,-38}, -{47,18,-37}, -{47,18,-36}, -{47,18,-35}, -{47,18,-34}, -{47,18,-33}, -{47,18,-32}, -{47,18,-31}, -{47,18,-30}, -{47,18,-29}, -{47,18,-28}, -{47,18,-27}, -{47,18,-26}, -{47,18,-25}, -{47,18,-24}, -{47,18,-23}, -{47,18,-22}, -{47,18,-21}, -{47,18,-20}, -{47,18,-19}, -{47,18,-18}, -{47,18,-17}, -{47,18,-16}, -{47,18,-15}, -{47,18,-14}, -{47,18,-13}, -{47,18,-12}, -{47,18,-11}, -{47,18,-10}, -{47,18,-9}, -{47,18,-8}, -{47,18,-7}, -{47,18,-6}, -{47,18,-5}, -{47,18,-4}, -{47,18,-3}, -{47,18,-2}, -{47,18,-1}, -{47,18,0}, -{47,18,1}, -{47,18,2}, -{47,18,3}, -{47,18,4}, -{47,18,5}, -{47,18,6}, -{47,18,7}, -{47,18,8}, -{47,18,9}, -{47,18,10}, -{47,18,11}, -{47,18,12}, -{47,18,13}, -{47,18,14}, -{47,18,15}, -{47,18,16}, -{47,18,17}, -{47,18,18}, -{47,18,19}, -{47,18,20}, -{47,18,21}, -{47,18,22}, -{47,18,23}, -{47,18,24}, -{47,18,25}, -{47,18,26}, -{47,18,27}, -{47,18,28}, -{47,18,29}, -{47,18,30}, -{47,18,31}, -{47,18,32}, -{47,18,33}, -{47,18,34}, -{47,18,35}, -{47,18,36}, -{47,18,37}, -{47,18,38}, -{47,18,39}, -{47,18,40}, -{47,18,41}, -{47,18,42}, -{47,18,43}, -{47,18,44}, -{47,18,45}, -{47,18,46}, -{47,18,47}, -{47,18,48}, -{47,18,49}, -{47,18,50}, -{47,18,51}, -{47,18,52}, -{47,18,53}, -{47,18,54}, -{47,18,55}, -{47,19,-65}, -{47,19,-64}, -{47,19,-63}, -{47,19,-62}, -{47,19,-61}, -{47,19,-60}, -{47,19,-59}, -{47,19,-58}, -{47,19,-57}, -{47,19,-56}, -{47,19,-55}, -{47,19,-54}, -{47,19,-53}, -{47,19,-52}, -{47,19,-51}, -{47,19,-50}, -{47,19,-49}, -{47,19,-48}, -{47,19,-47}, -{47,19,-46}, -{47,19,-45}, -{47,19,-44}, -{47,19,-43}, -{47,19,-42}, -{47,19,-41}, -{47,19,-40}, -{47,19,-39}, -{47,19,-38}, -{47,19,-37}, -{47,19,-36}, -{47,19,-35}, -{47,19,-34}, -{47,19,-33}, -{47,19,-32}, -{47,19,-31}, -{47,19,-30}, -{47,19,-29}, -{47,19,-28}, -{47,19,-27}, -{47,19,-26}, -{47,19,-25}, -{47,19,-24}, -{47,19,-23}, -{47,19,-22}, -{47,19,-21}, -{47,19,-20}, -{47,19,-19}, -{47,19,-18}, -{47,19,-17}, -{47,19,-16}, -{47,19,-15}, -{47,19,-14}, -{47,19,-13}, -{47,19,-12}, -{47,19,-11}, -{47,19,-10}, -{47,19,-9}, -{47,19,-8}, -{47,19,-7}, -{47,19,-6}, -{47,19,-5}, -{47,19,-4}, -{47,19,-3}, -{47,19,-2}, -{47,19,-1}, -{47,19,0}, -{47,19,1}, -{47,19,2}, -{47,19,3}, -{47,19,4}, -{47,19,5}, -{47,19,6}, -{47,19,7}, -{47,19,8}, -{47,19,9}, -{47,19,10}, -{47,19,11}, -{47,19,12}, -{47,19,13}, -{47,19,14}, -{47,19,15}, -{47,19,16}, -{47,19,17}, -{47,19,18}, -{47,19,19}, -{47,19,20}, -{47,19,21}, -{47,19,22}, -{47,19,23}, -{47,19,24}, -{47,19,25}, -{47,19,26}, -{47,19,27}, -{47,19,28}, -{47,19,29}, -{47,19,30}, -{47,19,31}, -{47,19,32}, -{47,19,33}, -{47,19,34}, -{47,19,35}, -{47,19,36}, -{47,19,37}, -{47,19,38}, -{47,19,39}, -{47,19,40}, -{47,19,41}, -{47,19,42}, -{47,19,43}, -{47,19,44}, -{47,19,45}, -{47,19,46}, -{47,19,47}, -{47,19,48}, -{47,19,49}, -{47,19,50}, -{47,19,51}, -{47,19,52}, -{47,19,53}, -{47,19,54}, -{47,19,55}, -{47,20,-66}, -{47,20,-65}, -{47,20,-64}, -{47,20,-63}, -{47,20,-62}, -{47,20,-61}, -{47,20,-60}, -{47,20,-59}, -{47,20,-58}, -{47,20,-57}, -{47,20,-56}, -{47,20,-55}, -{47,20,-54}, -{47,20,-53}, -{47,20,-52}, -{47,20,-51}, -{47,20,-50}, -{47,20,-49}, -{47,20,-48}, -{47,20,-47}, -{47,20,-46}, -{47,20,-45}, -{47,20,-44}, -{47,20,-43}, -{47,20,-42}, -{47,20,-41}, -{47,20,-40}, -{47,20,-39}, -{47,20,-38}, -{47,20,-37}, -{47,20,-36}, -{47,20,-35}, -{47,20,-34}, -{47,20,-33}, -{47,20,-32}, -{47,20,-31}, -{47,20,-30}, -{47,20,-29}, -{47,20,-28}, -{47,20,-27}, -{47,20,-26}, -{47,20,-25}, -{47,20,-24}, -{47,20,-23}, -{47,20,-22}, -{47,20,-21}, -{47,20,-20}, -{47,20,-19}, -{47,20,-18}, -{47,20,-17}, -{47,20,-16}, -{47,20,-15}, -{47,20,-14}, -{47,20,-13}, -{47,20,-12}, -{47,20,-11}, -{47,20,-10}, -{47,20,-9}, -{47,20,-8}, -{47,20,-7}, -{47,20,-6}, -{47,20,-5}, -{47,20,-4}, -{47,20,-3}, -{47,20,-2}, -{47,20,-1}, -{47,20,0}, -{47,20,1}, -{47,20,2}, -{47,20,3}, -{47,20,4}, -{47,20,5}, -{47,20,6}, -{47,20,7}, -{47,20,8}, -{47,20,9}, -{47,20,10}, -{47,20,11}, -{47,20,12}, -{47,20,13}, -{47,20,14}, -{47,20,15}, -{47,20,16}, -{47,20,17}, -{47,20,18}, -{47,20,19}, -{47,20,20}, -{47,20,21}, -{47,20,22}, -{47,20,23}, -{47,20,24}, -{47,20,25}, -{47,20,26}, -{47,20,27}, -{47,20,28}, -{47,20,29}, -{47,20,30}, -{47,20,31}, -{47,20,32}, -{47,20,33}, -{47,20,34}, -{47,20,35}, -{47,20,36}, -{47,20,37}, -{47,20,38}, -{47,20,39}, -{47,20,40}, -{47,20,41}, -{47,20,42}, -{47,20,43}, -{47,20,44}, -{47,20,45}, -{47,20,46}, -{47,20,47}, -{47,20,48}, -{47,20,49}, -{47,20,50}, -{47,20,51}, -{47,20,52}, -{47,20,53}, -{47,20,54}, -{47,20,55}, -{47,21,-67}, -{47,21,-66}, -{47,21,-65}, -{47,21,-64}, -{47,21,-63}, -{47,21,-62}, -{47,21,-61}, -{47,21,-60}, -{47,21,-59}, -{47,21,-58}, -{47,21,-57}, -{47,21,-56}, -{47,21,-55}, -{47,21,-54}, -{47,21,-53}, -{47,21,-52}, -{47,21,-51}, -{47,21,-50}, -{47,21,-49}, -{47,21,-48}, -{47,21,-47}, -{47,21,-46}, -{47,21,-45}, -{47,21,-44}, -{47,21,-43}, -{47,21,-42}, -{47,21,-41}, -{47,21,-40}, -{47,21,-39}, -{47,21,-38}, -{47,21,-37}, -{47,21,-36}, -{47,21,-35}, -{47,21,-34}, -{47,21,-33}, -{47,21,-32}, -{47,21,-31}, -{47,21,-30}, -{47,21,-29}, -{47,21,-28}, -{47,21,-27}, -{47,21,-26}, -{47,21,-25}, -{47,21,-24}, -{47,21,-23}, -{47,21,-22}, -{47,21,-21}, -{47,21,-20}, -{47,21,-19}, -{47,21,-18}, -{47,21,-17}, -{47,21,-16}, -{47,21,-15}, -{47,21,-14}, -{47,21,-13}, -{47,21,-12}, -{47,21,-11}, -{47,21,-10}, -{47,21,-9}, -{47,21,-8}, -{47,21,-7}, -{47,21,-6}, -{47,21,-5}, -{47,21,-4}, -{47,21,-3}, -{47,21,-2}, -{47,21,-1}, -{47,21,0}, -{47,21,1}, -{47,21,2}, -{47,21,3}, -{47,21,4}, -{47,21,5}, -{47,21,6}, -{47,21,7}, -{47,21,8}, -{47,21,9}, -{47,21,10}, -{47,21,11}, -{47,21,12}, -{47,21,13}, -{47,21,14}, -{47,21,15}, -{47,21,16}, -{47,21,17}, -{47,21,18}, -{47,21,19}, -{47,21,20}, -{47,21,21}, -{47,21,22}, -{47,21,23}, -{47,21,24}, -{47,21,25}, -{47,21,26}, -{47,21,27}, -{47,21,28}, -{47,21,29}, -{47,21,30}, -{47,21,31}, -{47,21,32}, -{47,21,33}, -{47,21,34}, -{47,21,35}, -{47,21,36}, -{47,21,37}, -{47,21,38}, -{47,21,39}, -{47,21,40}, -{47,21,41}, -{47,21,42}, -{47,21,43}, -{47,21,44}, -{47,21,45}, -{47,21,46}, -{47,21,47}, -{47,21,48}, -{47,21,49}, -{47,21,50}, -{47,21,51}, -{47,21,52}, -{47,21,53}, -{47,21,54}, -{47,21,55}, -{47,22,-68}, -{47,22,-67}, -{47,22,-66}, -{47,22,-65}, -{47,22,-64}, -{47,22,-63}, -{47,22,-62}, -{47,22,-61}, -{47,22,-60}, -{47,22,-59}, -{47,22,-58}, -{47,22,-57}, -{47,22,-56}, -{47,22,-55}, -{47,22,-54}, -{47,22,-53}, -{47,22,-52}, -{47,22,-51}, -{47,22,-50}, -{47,22,-49}, -{47,22,-48}, -{47,22,-47}, -{47,22,-46}, -{47,22,-45}, -{47,22,-44}, -{47,22,-43}, -{47,22,-42}, -{47,22,-41}, -{47,22,-40}, -{47,22,-39}, -{47,22,-38}, -{47,22,-37}, -{47,22,-36}, -{47,22,-35}, -{47,22,-34}, -{47,22,-33}, -{47,22,-32}, -{47,22,-31}, -{47,22,-30}, -{47,22,-29}, -{47,22,-28}, -{47,22,-27}, -{47,22,-26}, -{47,22,-25}, -{47,22,-24}, -{47,22,-23}, -{47,22,-22}, -{47,22,-21}, -{47,22,-20}, -{47,22,-19}, -{47,22,-18}, -{47,22,-17}, -{47,22,-16}, -{47,22,-15}, -{47,22,-14}, -{47,22,-13}, -{47,22,-12}, -{47,22,-11}, -{47,22,-10}, -{47,22,-9}, -{47,22,-8}, -{47,22,-7}, -{47,22,-6}, -{47,22,-5}, -{47,22,-4}, -{47,22,-3}, -{47,22,-2}, -{47,22,-1}, -{47,22,0}, -{47,22,1}, -{47,22,2}, -{47,22,3}, -{47,22,4}, -{47,22,5}, -{47,22,6}, -{47,22,7}, -{47,22,8}, -{47,22,9}, -{47,22,10}, -{47,22,11}, -{47,22,12}, -{47,22,13}, -{47,22,14}, -{47,22,15}, -{47,22,16}, -{47,22,17}, -{47,22,18}, -{47,22,19}, -{47,22,20}, -{47,22,21}, -{47,22,22}, -{47,22,23}, -{47,22,24}, -{47,22,25}, -{47,22,26}, -{47,22,27}, -{47,22,28}, -{47,22,29}, -{47,22,30}, -{47,22,31}, -{47,22,32}, -{47,22,33}, -{47,22,34}, -{47,22,35}, -{47,22,36}, -{47,22,37}, -{47,22,38}, -{47,22,39}, -{47,22,40}, -{47,22,41}, -{47,22,42}, -{47,22,43}, -{47,22,44}, -{47,22,45}, -{47,22,46}, -{47,22,47}, -{47,22,48}, -{47,22,49}, -{47,22,50}, -{47,22,51}, -{47,22,52}, -{47,22,53}, -{47,22,54}, -{47,22,55}, -{47,23,-69}, -{47,23,-68}, -{47,23,-67}, -{47,23,-66}, -{47,23,-65}, -{47,23,-64}, -{47,23,-63}, -{47,23,-62}, -{47,23,-61}, -{47,23,-60}, -{47,23,-59}, -{47,23,-58}, -{47,23,-57}, -{47,23,-56}, -{47,23,-55}, -{47,23,-54}, -{47,23,-53}, -{47,23,-52}, -{47,23,-51}, -{47,23,-50}, -{47,23,-49}, -{47,23,-48}, -{47,23,-47}, -{47,23,-46}, -{47,23,-45}, -{47,23,-44}, -{47,23,-43}, -{47,23,-42}, -{47,23,-41}, -{47,23,-40}, -{47,23,-39}, -{47,23,-38}, -{47,23,-37}, -{47,23,-36}, -{47,23,-35}, -{47,23,-34}, -{47,23,-33}, -{47,23,-32}, -{47,23,-31}, -{47,23,-30}, -{47,23,-29}, -{47,23,-28}, -{47,23,-27}, -{47,23,-26}, -{47,23,-25}, -{47,23,-24}, -{47,23,-23}, -{47,23,-22}, -{47,23,-21}, -{47,23,-20}, -{47,23,-19}, -{47,23,-18}, -{47,23,-17}, -{47,23,-16}, -{47,23,-15}, -{47,23,-14}, -{47,23,-13}, -{47,23,-12}, -{47,23,-11}, -{47,23,-10}, -{47,23,-9}, -{47,23,-8}, -{47,23,-7}, -{47,23,-6}, -{47,23,-5}, -{47,23,-4}, -{47,23,-3}, -{47,23,-2}, -{47,23,-1}, -{47,23,0}, -{47,23,1}, -{47,23,2}, -{47,23,3}, -{47,23,4}, -{47,23,5}, -{47,23,6}, -{47,23,7}, -{47,23,8}, -{47,23,9}, -{47,23,10}, -{47,23,11}, -{47,23,12}, -{47,23,13}, -{47,23,14}, -{47,23,15}, -{47,23,16}, -{47,23,17}, -{47,23,18}, -{47,23,19}, -{47,23,20}, -{47,23,21}, -{47,23,22}, -{47,23,23}, -{47,23,24}, -{47,23,25}, -{47,23,26}, -{47,23,27}, -{47,23,28}, -{47,23,29}, -{47,23,30}, -{47,23,31}, -{47,23,32}, -{47,23,33}, -{47,23,34}, -{47,23,35}, -{47,23,36}, -{47,23,37}, -{47,23,38}, -{47,23,39}, -{47,23,40}, -{47,23,41}, -{47,23,42}, -{47,23,43}, -{47,23,44}, -{47,23,45}, -{47,23,46}, -{47,23,47}, -{47,23,48}, -{47,23,49}, -{47,23,50}, -{47,23,51}, -{47,23,52}, -{47,23,53}, -{47,23,54}, -{47,23,55}, -{47,24,-70}, -{47,24,-69}, -{47,24,-68}, -{47,24,-67}, -{47,24,-66}, -{47,24,-65}, -{47,24,-64}, -{47,24,-63}, -{47,24,-62}, -{47,24,-61}, -{47,24,-60}, -{47,24,-59}, -{47,24,-58}, -{47,24,-57}, -{47,24,-56}, -{47,24,-55}, -{47,24,-54}, -{47,24,-53}, -{47,24,-52}, -{47,24,-51}, -{47,24,-50}, -{47,24,-49}, -{47,24,-48}, -{47,24,-47}, -{47,24,-46}, -{47,24,-45}, -{47,24,-44}, -{47,24,-43}, -{47,24,-42}, -{47,24,-41}, -{47,24,-40}, -{47,24,-39}, -{47,24,-38}, -{47,24,-37}, -{47,24,-36}, -{47,24,-35}, -{47,24,-34}, -{47,24,-33}, -{47,24,-32}, -{47,24,-31}, -{47,24,-30}, -{47,24,-29}, -{47,24,-28}, -{47,24,-27}, -{47,24,-26}, -{47,24,-25}, -{47,24,-24}, -{47,24,-23}, -{47,24,-22}, -{47,24,-21}, -{47,24,-20}, -{47,24,-19}, -{47,24,-18}, -{47,24,-17}, -{47,24,-16}, -{47,24,-15}, -{47,24,-14}, -{47,24,-13}, -{47,24,-12}, -{47,24,-11}, -{47,24,-10}, -{47,24,-9}, -{47,24,-8}, -{47,24,-7}, -{47,24,-6}, -{47,24,-5}, -{47,24,-4}, -{47,24,-3}, -{47,24,-2}, -{47,24,-1}, -{47,24,0}, -{47,24,1}, -{47,24,2}, -{47,24,3}, -{47,24,4}, -{47,24,5}, -{47,24,6}, -{47,24,7}, -{47,24,8}, -{47,24,9}, -{47,24,10}, -{47,24,11}, -{47,24,12}, -{47,24,13}, -{47,24,14}, -{47,24,15}, -{47,24,16}, -{47,24,17}, -{47,24,18}, -{47,24,19}, -{47,24,20}, -{47,24,21}, -{47,24,22}, -{47,24,23}, -{47,24,24}, -{47,24,25}, -{47,24,26}, -{47,24,27}, -{47,24,28}, -{47,24,29}, -{47,24,30}, -{47,24,31}, -{47,24,32}, -{47,24,33}, -{47,24,34}, -{47,24,35}, -{47,24,36}, -{47,24,37}, -{47,24,38}, -{47,24,39}, -{47,24,40}, -{47,24,41}, -{47,24,42}, -{47,24,43}, -{47,24,44}, -{47,24,45}, -{47,24,46}, -{47,24,47}, -{47,24,48}, -{47,24,49}, -{47,24,50}, -{47,24,51}, -{47,24,52}, -{47,24,53}, -{47,24,54}, -{47,24,55}, -{47,25,-71}, -{47,25,-70}, -{47,25,-69}, -{47,25,-68}, -{47,25,-67}, -{47,25,-66}, -{47,25,-65}, -{47,25,-64}, -{47,25,-63}, -{47,25,-62}, -{47,25,-61}, -{47,25,-60}, -{47,25,-59}, -{47,25,-58}, -{47,25,-57}, -{47,25,-56}, -{47,25,-55}, -{47,25,-54}, -{47,25,-53}, -{47,25,-52}, -{47,25,-51}, -{47,25,-50}, -{47,25,-49}, -{47,25,-48}, -{47,25,-47}, -{47,25,-46}, -{47,25,-45}, -{47,25,-44}, -{47,25,-43}, -{47,25,-42}, -{47,25,-41}, -{47,25,-40}, -{47,25,-39}, -{47,25,-38}, -{47,25,-37}, -{47,25,-36}, -{47,25,-35}, -{47,25,-34}, -{47,25,-33}, -{47,25,-32}, -{47,25,-31}, -{47,25,-30}, -{47,25,-29}, -{47,25,-28}, -{47,25,-27}, -{47,25,-26}, -{47,25,-25}, -{47,25,-24}, -{47,25,-23}, -{47,25,-22}, -{47,25,-21}, -{47,25,-20}, -{47,25,-19}, -{47,25,-18}, -{47,25,-17}, -{47,25,-16}, -{47,25,-15}, -{47,25,-14}, -{47,25,-13}, -{47,25,-12}, -{47,25,-11}, -{47,25,-10}, -{47,25,-9}, -{47,25,-8}, -{47,25,-7}, -{47,25,-6}, -{47,25,-5}, -{47,25,-4}, -{47,25,-3}, -{47,25,-2}, -{47,25,-1}, -{47,25,0}, -{47,25,1}, -{47,25,2}, -{47,25,3}, -{47,25,4}, -{47,25,5}, -{47,25,6}, -{47,25,7}, -{47,25,8}, -{47,25,9}, -{47,25,10}, -{47,25,11}, -{47,25,12}, -{47,25,13}, -{47,25,14}, -{47,25,15}, -{47,25,16}, -{47,25,17}, -{47,25,18}, -{47,25,19}, -{47,25,20}, -{47,25,21}, -{47,25,22}, -{47,25,23}, -{47,25,24}, -{47,25,25}, -{47,25,26}, -{47,25,27}, -{47,25,28}, -{47,25,29}, -{47,25,30}, -{47,25,31}, -{47,25,32}, -{47,25,33}, -{47,25,34}, -{47,25,35}, -{47,25,36}, -{47,25,37}, -{47,25,38}, -{47,25,39}, -{47,25,40}, -{47,25,41}, -{47,25,42}, -{47,25,43}, -{47,25,44}, -{47,25,45}, -{47,25,46}, -{47,25,47}, -{47,25,48}, -{47,25,49}, -{47,25,50}, -{47,25,51}, -{47,25,52}, -{47,25,53}, -{47,25,54}, -{47,25,55}, -{47,26,-72}, -{47,26,-71}, -{47,26,-70}, -{47,26,-69}, -{47,26,-68}, -{47,26,-67}, -{47,26,-66}, -{47,26,-65}, -{47,26,-64}, -{47,26,-63}, -{47,26,-62}, -{47,26,-61}, -{47,26,-60}, -{47,26,-59}, -{47,26,-58}, -{47,26,-57}, -{47,26,-56}, -{47,26,-55}, -{47,26,-54}, -{47,26,-53}, -{47,26,-52}, -{47,26,-51}, -{47,26,-50}, -{47,26,-49}, -{47,26,-48}, -{47,26,-47}, -{47,26,-46}, -{47,26,-45}, -{47,26,-44}, -{47,26,-43}, -{47,26,-42}, -{47,26,-41}, -{47,26,-40}, -{47,26,-39}, -{47,26,-38}, -{47,26,-37}, -{47,26,-36}, -{47,26,-35}, -{47,26,-34}, -{47,26,-33}, -{47,26,-32}, -{47,26,-31}, -{47,26,-30}, -{47,26,-29}, -{47,26,-28}, -{47,26,-27}, -{47,26,-26}, -{47,26,-25}, -{47,26,-24}, -{47,26,-23}, -{47,26,-22}, -{47,26,-21}, -{47,26,-20}, -{47,26,-19}, -{47,26,-18}, -{47,26,-17}, -{47,26,-16}, -{47,26,-15}, -{47,26,-14}, -{47,26,-13}, -{47,26,-12}, -{47,26,-11}, -{47,26,-10}, -{47,26,-9}, -{47,26,-8}, -{47,26,-7}, -{47,26,-6}, -{47,26,-5}, -{47,26,-4}, -{47,26,-3}, -{47,26,-2}, -{47,26,-1}, -{47,26,0}, -{47,26,1}, -{47,26,2}, -{47,26,3}, -{47,26,4}, -{47,26,5}, -{47,26,6}, -{47,26,7}, -{47,26,8}, -{47,26,9}, -{47,26,10}, -{47,26,11}, -{47,26,12}, -{47,26,13}, -{47,26,14}, -{47,26,15}, -{47,26,16}, -{47,26,17}, -{47,26,18}, -{47,26,19}, -{47,26,20}, -{47,26,21}, -{47,26,22}, -{47,26,23}, -{47,26,24}, -{47,26,25}, -{47,26,26}, -{47,26,27}, -{47,26,28}, -{47,26,29}, -{47,26,30}, -{47,26,31}, -{47,26,32}, -{47,26,33}, -{47,26,34}, -{47,26,35}, -{47,26,36}, -{47,26,37}, -{47,26,38}, -{47,26,39}, -{47,26,40}, -{47,26,41}, -{47,26,42}, -{47,26,43}, -{47,26,44}, -{47,26,45}, -{47,26,46}, -{47,26,47}, -{47,26,48}, -{47,26,49}, -{47,26,50}, -{47,26,51}, -{47,26,52}, -{47,26,53}, -{47,26,54}, -{47,26,55}, -{47,27,-73}, -{47,27,-72}, -{47,27,-71}, -{47,27,-70}, -{47,27,-69}, -{47,27,-68}, -{47,27,-67}, -{47,27,-66}, -{47,27,-65}, -{47,27,-64}, -{47,27,-63}, -{47,27,-62}, -{47,27,-61}, -{47,27,-60}, -{47,27,-59}, -{47,27,-58}, -{47,27,-57}, -{47,27,-56}, -{47,27,-55}, -{47,27,-54}, -{47,27,-53}, -{47,27,-52}, -{47,27,-51}, -{47,27,-50}, -{47,27,-49}, -{47,27,-48}, -{47,27,-47}, -{47,27,-46}, -{47,27,-45}, -{47,27,-44}, -{47,27,-43}, -{47,27,-42}, -{47,27,-41}, -{47,27,-40}, -{47,27,-39}, -{47,27,-38}, -{47,27,-37}, -{47,27,-36}, -{47,27,-35}, -{47,27,-34}, -{47,27,-33}, -{47,27,-32}, -{47,27,-31}, -{47,27,-30}, -{47,27,-29}, -{47,27,-28}, -{47,27,-27}, -{47,27,-26}, -{47,27,-25}, -{47,27,-24}, -{47,27,-23}, -{47,27,-22}, -{47,27,-21}, -{47,27,-20}, -{47,27,-19}, -{47,27,-18}, -{47,27,-17}, -{47,27,-16}, -{47,27,-15}, -{47,27,-14}, -{47,27,-13}, -{47,27,-12}, -{47,27,-11}, -{47,27,-10}, -{47,27,-9}, -{47,27,-8}, -{47,27,-7}, -{47,27,-6}, -{47,27,-5}, -{47,27,-4}, -{47,27,-3}, -{47,27,-2}, -{47,27,-1}, -{47,27,0}, -{47,27,1}, -{47,27,2}, -{47,27,3}, -{47,27,4}, -{47,27,5}, -{47,27,6}, -{47,27,7}, -{47,27,8}, -{47,27,9}, -{47,27,10}, -{47,27,11}, -{47,27,12}, -{47,27,13}, -{47,27,14}, -{47,27,15}, -{47,27,16}, -{47,27,17}, -{47,27,18}, -{47,27,19}, -{47,27,20}, -{47,27,21}, -{47,27,22}, -{47,27,23}, -{47,27,24}, -{47,27,25}, -{47,27,26}, -{47,27,27}, -{47,27,28}, -{47,27,29}, -{47,27,30}, -{47,27,31}, -{47,27,32}, -{47,27,33}, -{47,27,34}, -{47,27,35}, -{47,27,36}, -{47,27,37}, -{47,27,38}, -{47,27,39}, -{47,27,40}, -{47,27,41}, -{47,27,42}, -{47,27,43}, -{47,27,44}, -{47,27,45}, -{47,27,46}, -{47,27,47}, -{47,27,48}, -{47,27,49}, -{47,27,50}, -{47,27,51}, -{47,27,52}, -{47,27,53}, -{47,27,54}, -{47,27,55}, -{47,28,-74}, -{47,28,-73}, -{47,28,-72}, -{47,28,-71}, -{47,28,-70}, -{47,28,-69}, -{47,28,-68}, -{47,28,-67}, -{47,28,-66}, -{47,28,-65}, -{47,28,-64}, -{47,28,-63}, -{47,28,-62}, -{47,28,-61}, -{47,28,-60}, -{47,28,-59}, -{47,28,-58}, -{47,28,-57}, -{47,28,-56}, -{47,28,-55}, -{47,28,-54}, -{47,28,-53}, -{47,28,-52}, -{47,28,-51}, -{47,28,-50}, -{47,28,-49}, -{47,28,-48}, -{47,28,-47}, -{47,28,-46}, -{47,28,-45}, -{47,28,-44}, -{47,28,-43}, -{47,28,-42}, -{47,28,-41}, -{47,28,-40}, -{47,28,-39}, -{47,28,-38}, -{47,28,-37}, -{47,28,-36}, -{47,28,-35}, -{47,28,-34}, -{47,28,-33}, -{47,28,-32}, -{47,28,-31}, -{47,28,-30}, -{47,28,-29}, -{47,28,-28}, -{47,28,-27}, -{47,28,-26}, -{47,28,-25}, -{47,28,-24}, -{47,28,-23}, -{47,28,-22}, -{47,28,-21}, -{47,28,-20}, -{47,28,-19}, -{47,28,-18}, -{47,28,-17}, -{47,28,-16}, -{47,28,-15}, -{47,28,-14}, -{47,28,-13}, -{47,28,-12}, -{47,28,-11}, -{47,28,-10}, -{47,28,-9}, -{47,28,-8}, -{47,28,-7}, -{47,28,-6}, -{47,28,-5}, -{47,28,-4}, -{47,28,-3}, -{47,28,-2}, -{47,28,-1}, -{47,28,0}, -{47,28,1}, -{47,28,2}, -{47,28,3}, -{47,28,4}, -{47,28,5}, -{47,28,6}, -{47,28,7}, -{47,28,8}, -{47,28,9}, -{47,28,10}, -{47,28,11}, -{47,28,12}, -{47,28,13}, -{47,28,14}, -{47,28,15}, -{47,28,16}, -{47,28,17}, -{47,28,18}, -{47,28,19}, -{47,28,20}, -{47,28,21}, -{47,28,22}, -{47,28,23}, -{47,28,24}, -{47,28,25}, -{47,28,26}, -{47,28,27}, -{47,28,28}, -{47,28,29}, -{47,28,30}, -{47,28,31}, -{47,28,32}, -{47,28,33}, -{47,28,34}, -{47,28,35}, -{47,28,36}, -{47,28,37}, -{47,28,38}, -{47,28,39}, -{47,28,40}, -{47,28,41}, -{47,28,42}, -{47,28,43}, -{47,28,44}, -{47,28,45}, -{47,28,46}, -{47,28,47}, -{47,28,48}, -{47,28,49}, -{47,28,50}, -{47,28,51}, -{47,28,52}, -{47,28,53}, -{47,28,54}, -{47,28,55}, -{47,29,-75}, -{47,29,-74}, -{47,29,-73}, -{47,29,-72}, -{47,29,-71}, -{47,29,-70}, -{47,29,-69}, -{47,29,-68}, -{47,29,-67}, -{47,29,-66}, -{47,29,-65}, -{47,29,-64}, -{47,29,-63}, -{47,29,-62}, -{47,29,-61}, -{47,29,-60}, -{47,29,-59}, -{47,29,-58}, -{47,29,-57}, -{47,29,-56}, -{47,29,-55}, -{47,29,-54}, -{47,29,-53}, -{47,29,-52}, -{47,29,-51}, -{47,29,-50}, -{47,29,-49}, -{47,29,-48}, -{47,29,-47}, -{47,29,-46}, -{47,29,-45}, -{47,29,-44}, -{47,29,-43}, -{47,29,-42}, -{47,29,-41}, -{47,29,-40}, -{47,29,-39}, -{47,29,-38}, -{47,29,-37}, -{47,29,-36}, -{47,29,-35}, -{47,29,-34}, -{47,29,-33}, -{47,29,-32}, -{47,29,-31}, -{47,29,-30}, -{47,29,-29}, -{47,29,-28}, -{47,29,-27}, -{47,29,-26}, -{47,29,-25}, -{47,29,-24}, -{47,29,-23}, -{47,29,-22}, -{47,29,-21}, -{47,29,-20}, -{47,29,-19}, -{47,29,-18}, -{47,29,-17}, -{47,29,-16}, -{47,29,-15}, -{47,29,-14}, -{47,29,-13}, -{47,29,-12}, -{47,29,-11}, -{47,29,-10}, -{47,29,-9}, -{47,29,-8}, -{47,29,-7}, -{47,29,-6}, -{47,29,-5}, -{47,29,-4}, -{47,29,-3}, -{47,29,-2}, -{47,29,-1}, -{47,29,0}, -{47,29,1}, -{47,29,2}, -{47,29,3}, -{47,29,4}, -{47,29,5}, -{47,29,6}, -{47,29,7}, -{47,29,8}, -{47,29,9}, -{47,29,10}, -{47,29,11}, -{47,29,12}, -{47,29,13}, -{47,29,14}, -{47,29,15}, -{47,29,16}, -{47,29,17}, -{47,29,18}, -{47,29,19}, -{47,29,20}, -{47,29,21}, -{47,29,22}, -{47,29,23}, -{47,29,24}, -{47,29,25}, -{47,29,26}, -{47,29,27}, -{47,29,28}, -{47,29,29}, -{47,29,30}, -{47,29,31}, -{47,29,32}, -{47,29,33}, -{47,29,34}, -{47,29,35}, -{47,29,36}, -{47,29,37}, -{47,29,38}, -{47,29,39}, -{47,29,40}, -{47,29,41}, -{47,29,42}, -{47,29,43}, -{47,29,44}, -{47,29,45}, -{47,29,46}, -{47,29,47}, -{47,29,48}, -{47,29,49}, -{47,29,50}, -{47,29,51}, -{47,29,52}, -{47,29,53}, -{47,29,54}, -{47,29,55}, -{47,29,56}, -{47,30,-76}, -{47,30,-75}, -{47,30,-74}, -{47,30,-73}, -{47,30,-72}, -{47,30,-71}, -{47,30,-70}, -{47,30,-69}, -{47,30,-68}, -{47,30,-67}, -{47,30,-66}, -{47,30,-65}, -{47,30,-64}, -{47,30,-63}, -{47,30,-62}, -{47,30,-61}, -{47,30,-60}, -{47,30,-59}, -{47,30,-58}, -{47,30,-57}, -{47,30,-56}, -{47,30,-55}, -{47,30,-54}, -{47,30,-53}, -{47,30,-52}, -{47,30,-51}, -{47,30,-50}, -{47,30,-49}, -{47,30,-48}, -{47,30,-47}, -{47,30,-46}, -{47,30,-45}, -{47,30,-44}, -{47,30,-43}, -{47,30,-42}, -{47,30,-41}, -{47,30,-40}, -{47,30,-39}, -{47,30,-38}, -{47,30,-37}, -{47,30,-36}, -{47,30,-35}, -{47,30,-34}, -{47,30,-33}, -{47,30,-32}, -{47,30,-31}, -{47,30,-30}, -{47,30,-29}, -{47,30,-28}, -{47,30,-27}, -{47,30,-26}, -{47,30,-25}, -{47,30,-24}, -{47,30,-23}, -{47,30,-22}, -{47,30,-21}, -{47,30,-20}, -{47,30,-19}, -{47,30,-18}, -{47,30,-17}, -{47,30,-16}, -{47,30,-15}, -{47,30,-14}, -{47,30,-13}, -{47,30,-12}, -{47,30,-11}, -{47,30,-10}, -{47,30,-9}, -{47,30,-8}, -{47,30,-7}, -{47,30,-6}, -{47,30,-5}, -{47,30,-4}, -{47,30,-3}, -{47,30,-2}, -{47,30,-1}, -{47,30,0}, -{47,30,1}, -{47,30,2}, -{47,30,3}, -{47,30,4}, -{47,30,5}, -{47,30,6}, -{47,30,7}, -{47,30,8}, -{47,30,9}, -{47,30,10}, -{47,30,11}, -{47,30,12}, -{47,30,13}, -{47,30,14}, -{47,30,15}, -{47,30,16}, -{47,30,17}, -{47,30,18}, -{47,30,19}, -{47,30,20}, -{47,30,21}, -{47,30,22}, -{47,30,23}, -{47,30,24}, -{47,30,25}, -{47,30,26}, -{47,30,27}, -{47,30,28}, -{47,30,29}, -{47,30,30}, -{47,30,31}, -{47,30,32}, -{47,30,33}, -{47,30,34}, -{47,30,35}, -{47,30,36}, -{47,30,37}, -{47,30,38}, -{47,30,39}, -{47,30,40}, -{47,30,41}, -{47,30,42}, -{47,30,43}, -{47,30,44}, -{47,30,45}, -{47,30,46}, -{47,30,47}, -{47,30,48}, -{47,30,49}, -{47,30,50}, -{47,30,51}, -{47,30,52}, -{47,30,53}, -{47,30,54}, -{47,30,55}, -{47,30,56}, -{47,31,-77}, -{47,31,-76}, -{47,31,-75}, -{47,31,-74}, -{47,31,-73}, -{47,31,-72}, -{47,31,-71}, -{47,31,-70}, -{47,31,-69}, -{47,31,-68}, -{47,31,-67}, -{47,31,-66}, -{47,31,-65}, -{47,31,-64}, -{47,31,-63}, -{47,31,-62}, -{47,31,-61}, -{47,31,-60}, -{47,31,-59}, -{47,31,-58}, -{47,31,-57}, -{47,31,-56}, -{47,31,-55}, -{47,31,-54}, -{47,31,-53}, -{47,31,-52}, -{47,31,-51}, -{47,31,-50}, -{47,31,-49}, -{47,31,-48}, -{47,31,-47}, -{47,31,-46}, -{47,31,-45}, -{47,31,-44}, -{47,31,-43}, -{47,31,-42}, -{47,31,-41}, -{47,31,-40}, -{47,31,-39}, -{47,31,-38}, -{47,31,-37}, -{47,31,-36}, -{47,31,-35}, -{47,31,-34}, -{47,31,-33}, -{47,31,-32}, -{47,31,-31}, -{47,31,-30}, -{47,31,-29}, -{47,31,-28}, -{47,31,-27}, -{47,31,-26}, -{47,31,-25}, -{47,31,-24}, -{47,31,-23}, -{47,31,-22}, -{47,31,-21}, -{47,31,-20}, -{47,31,-19}, -{47,31,-18}, -{47,31,-17}, -{47,31,-16}, -{47,31,-15}, -{47,31,-14}, -{47,31,-13}, -{47,31,-12}, -{47,31,-11}, -{47,31,-10}, -{47,31,-9}, -{47,31,-8}, -{47,31,-7}, -{47,31,-6}, -{47,31,-5}, -{47,31,-4}, -{47,31,-3}, -{47,31,-2}, -{47,31,-1}, -{47,31,0}, -{47,31,1}, -{47,31,2}, -{47,31,3}, -{47,31,4}, -{47,31,5}, -{47,31,6}, -{47,31,7}, -{47,31,8}, -{47,31,9}, -{47,31,10}, -{47,31,11}, -{47,31,12}, -{47,31,13}, -{47,31,14}, -{47,31,15}, -{47,31,16}, -{47,31,17}, -{47,31,18}, -{47,31,19}, -{47,31,20}, -{47,31,21}, -{47,31,22}, -{47,31,23}, -{47,31,24}, -{47,31,25}, -{47,31,26}, -{47,31,27}, -{47,31,28}, -{47,31,29}, -{47,31,30}, -{47,31,31}, -{47,31,32}, -{47,31,33}, -{47,31,34}, -{47,31,35}, -{47,31,36}, -{47,31,37}, -{47,31,38}, -{47,31,39}, -{47,31,40}, -{47,31,41}, -{47,31,42}, -{47,31,43}, -{47,31,44}, -{47,31,45}, -{47,31,46}, -{47,31,47}, -{47,31,48}, -{47,31,49}, -{47,31,50}, -{47,31,51}, -{47,31,52}, -{47,31,53}, -{47,31,54}, -{47,31,55}, -{47,31,56}, -{47,32,-78}, -{47,32,-77}, -{47,32,-76}, -{47,32,-75}, -{47,32,-74}, -{47,32,-73}, -{47,32,-72}, -{47,32,-71}, -{47,32,-70}, -{47,32,-69}, -{47,32,-68}, -{47,32,-67}, -{47,32,-66}, -{47,32,-65}, -{47,32,-64}, -{47,32,-63}, -{47,32,-62}, -{47,32,-61}, -{47,32,-60}, -{47,32,-59}, -{47,32,-58}, -{47,32,-57}, -{47,32,-56}, -{47,32,-55}, -{47,32,-54}, -{47,32,-53}, -{47,32,-52}, -{47,32,-51}, -{47,32,-50}, -{47,32,-49}, -{47,32,-48}, -{47,32,-47}, -{47,32,-46}, -{47,32,-45}, -{47,32,-44}, -{47,32,-43}, -{47,32,-42}, -{47,32,-41}, -{47,32,-40}, -{47,32,-39}, -{47,32,-38}, -{47,32,-37}, -{47,32,-36}, -{47,32,-35}, -{47,32,-34}, -{47,32,-33}, -{47,32,-32}, -{47,32,-31}, -{47,32,-30}, -{47,32,-29}, -{47,32,-28}, -{47,32,-27}, -{47,32,-26}, -{47,32,-25}, -{47,32,-24}, -{47,32,-23}, -{47,32,-22}, -{47,32,-21}, -{47,32,-20}, -{47,32,-19}, -{47,32,-18}, -{47,32,-17}, -{47,32,-16}, -{47,32,-15}, -{47,32,-14}, -{47,32,-13}, -{47,32,-12}, -{47,32,-11}, -{47,32,-10}, -{47,32,-9}, -{47,32,-8}, -{47,32,-7}, -{47,32,-6}, -{47,32,-5}, -{47,32,-4}, -{47,32,-3}, -{47,32,-2}, -{47,32,-1}, -{47,32,0}, -{47,32,1}, -{47,32,2}, -{47,32,3}, -{47,32,4}, -{47,32,5}, -{47,32,6}, -{47,32,7}, -{47,32,8}, -{47,32,9}, -{47,32,10}, -{47,32,11}, -{47,32,12}, -{47,32,13}, -{47,32,14}, -{47,32,15}, -{47,32,16}, -{47,32,17}, -{47,32,18}, -{47,32,19}, -{47,32,20}, -{47,32,21}, -{47,32,22}, -{47,32,23}, -{47,32,24}, -{47,32,25}, -{47,32,26}, -{47,32,27}, -{47,32,28}, -{47,32,29}, -{47,32,30}, -{47,32,31}, -{47,32,32}, -{47,32,33}, -{47,32,34}, -{47,32,35}, -{47,32,36}, -{47,32,37}, -{47,32,38}, -{47,32,39}, -{47,32,40}, -{47,32,41}, -{47,32,42}, -{47,32,43}, -{47,32,44}, -{47,32,45}, -{47,32,46}, -{47,32,47}, -{47,32,48}, -{47,32,49}, -{47,32,50}, -{47,32,51}, -{47,32,52}, -{47,32,53}, -{47,32,54}, -{47,32,55}, -{47,32,56}, -{47,33,-79}, -{47,33,-78}, -{47,33,-77}, -{47,33,-76}, -{47,33,-75}, -{47,33,-74}, -{47,33,-73}, -{47,33,-72}, -{47,33,-71}, -{47,33,-70}, -{47,33,-69}, -{47,33,-68}, -{47,33,-67}, -{47,33,-66}, -{47,33,-65}, -{47,33,-64}, -{47,33,-63}, -{47,33,-62}, -{47,33,-61}, -{47,33,-60}, -{47,33,-59}, -{47,33,-58}, -{47,33,-57}, -{47,33,-56}, -{47,33,-55}, -{47,33,-54}, -{47,33,-53}, -{47,33,-52}, -{47,33,-51}, -{47,33,-50}, -{47,33,-49}, -{47,33,-48}, -{47,33,-47}, -{47,33,-46}, -{47,33,-45}, -{47,33,-44}, -{47,33,-43}, -{47,33,-42}, -{47,33,-41}, -{47,33,-40}, -{47,33,-39}, -{47,33,-38}, -{47,33,-37}, -{47,33,-36}, -{47,33,-35}, -{47,33,-34}, -{47,33,-33}, -{47,33,-32}, -{47,33,-31}, -{47,33,-30}, -{47,33,-29}, -{47,33,-28}, -{47,33,-27}, -{47,33,-26}, -{47,33,-25}, -{47,33,-24}, -{47,33,-23}, -{47,33,-22}, -{47,33,-21}, -{47,33,-20}, -{47,33,-19}, -{47,33,-18}, -{47,33,-17}, -{47,33,-16}, -{47,33,-15}, -{47,33,-14}, -{47,33,-13}, -{47,33,-12}, -{47,33,-11}, -{47,33,-10}, -{47,33,-9}, -{47,33,-8}, -{47,33,-7}, -{47,33,-6}, -{47,33,-5}, -{47,33,-4}, -{47,33,-3}, -{47,33,-2}, -{47,33,-1}, -{47,33,0}, -{47,33,1}, -{47,33,2}, -{47,33,3}, -{47,33,4}, -{47,33,5}, -{47,33,6}, -{47,33,7}, -{47,33,8}, -{47,33,9}, -{47,33,10}, -{47,33,11}, -{47,33,12}, -{47,33,13}, -{47,33,14}, -{47,33,15}, -{47,33,16}, -{47,33,17}, -{47,33,18}, -{47,33,19}, -{47,33,20}, -{47,33,21}, -{47,33,22}, -{47,33,23}, -{47,33,24}, -{47,33,25}, -{47,33,26}, -{47,33,27}, -{47,33,28}, -{47,33,29}, -{47,33,30}, -{47,33,31}, -{47,33,32}, -{47,33,33}, -{47,33,34}, -{47,33,35}, -{47,33,36}, -{47,33,37}, -{47,33,38}, -{47,33,39}, -{47,33,40}, -{47,33,41}, -{47,33,42}, -{47,33,43}, -{47,33,44}, -{47,33,45}, -{47,33,46}, -{47,33,47}, -{47,33,48}, -{47,33,49}, -{47,33,50}, -{47,33,51}, -{47,33,52}, -{47,33,53}, -{47,33,54}, -{47,33,55}, -{47,33,56}, -{47,34,-80}, -{47,34,-79}, -{47,34,-78}, -{47,34,-77}, -{47,34,-76}, -{47,34,-75}, -{47,34,-74}, -{47,34,-73}, -{47,34,-72}, -{47,34,-71}, -{47,34,-70}, -{47,34,-69}, -{47,34,-68}, -{47,34,-67}, -{47,34,-66}, -{47,34,-65}, -{47,34,-64}, -{47,34,-63}, -{47,34,-62}, -{47,34,-61}, -{47,34,-60}, -{47,34,-59}, -{47,34,-58}, -{47,34,-57}, -{47,34,-56}, -{47,34,-55}, -{47,34,-54}, -{47,34,-53}, -{47,34,-52}, -{47,34,-51}, -{47,34,-50}, -{47,34,-49}, -{47,34,-48}, -{47,34,-47}, -{47,34,-46}, -{47,34,-45}, -{47,34,-44}, -{47,34,-43}, -{47,34,-42}, -{47,34,-41}, -{47,34,-40}, -{47,34,-39}, -{47,34,-38}, -{47,34,-37}, -{47,34,-36}, -{47,34,-35}, -{47,34,-34}, -{47,34,-33}, -{47,34,-32}, -{47,34,-31}, -{47,34,-30}, -{47,34,-29}, -{47,34,-28}, -{47,34,-27}, -{47,34,-26}, -{47,34,-25}, -{47,34,-24}, -{47,34,-23}, -{47,34,-22}, -{47,34,-21}, -{47,34,-20}, -{47,34,-19}, -{47,34,-18}, -{47,34,-17}, -{47,34,-16}, -{47,34,-15}, -{47,34,-14}, -{47,34,-13}, -{47,34,-12}, -{47,34,-11}, -{47,34,-10}, -{47,34,-9}, -{47,34,-8}, -{47,34,-7}, -{47,34,-6}, -{47,34,-5}, -{47,34,-4}, -{47,34,-3}, -{47,34,-2}, -{47,34,-1}, -{47,34,0}, -{47,34,1}, -{47,34,2}, -{47,34,3}, -{47,34,4}, -{47,34,5}, -{47,34,6}, -{47,34,7}, -{47,34,8}, -{47,34,9}, -{47,34,10}, -{47,34,11}, -{47,34,12}, -{47,34,13}, -{47,34,14}, -{47,34,15}, -{47,34,16}, -{47,34,17}, -{47,34,18}, -{47,34,19}, -{47,34,20}, -{47,34,21}, -{47,34,22}, -{47,34,23}, -{47,34,24}, -{47,34,25}, -{47,34,26}, -{47,34,27}, -{47,34,28}, -{47,34,29}, -{47,34,30}, -{47,34,31}, -{47,34,32}, -{47,34,33}, -{47,34,34}, -{47,34,35}, -{47,34,36}, -{47,34,37}, -{47,34,38}, -{47,34,39}, -{47,34,40}, -{47,34,41}, -{47,34,42}, -{47,34,43}, -{47,34,44}, -{47,34,45}, -{47,34,46}, -{47,34,47}, -{47,34,48}, -{47,34,49}, -{47,34,50}, -{47,34,51}, -{47,34,52}, -{47,34,53}, -{47,34,54}, -{47,34,55}, -{47,34,56}, -{47,35,-81}, -{47,35,-80}, -{47,35,-79}, -{47,35,-78}, -{47,35,-77}, -{47,35,-76}, -{47,35,-75}, -{47,35,-74}, -{47,35,-73}, -{47,35,-72}, -{47,35,-71}, -{47,35,-70}, -{47,35,-69}, -{47,35,-68}, -{47,35,-67}, -{47,35,-66}, -{47,35,-65}, -{47,35,-64}, -{47,35,-63}, -{47,35,-62}, -{47,35,-61}, -{47,35,-60}, -{47,35,-59}, -{47,35,-58}, -{47,35,-57}, -{47,35,-56}, -{47,35,-55}, -{47,35,-54}, -{47,35,-53}, -{47,35,-52}, -{47,35,-51}, -{47,35,-50}, -{47,35,-49}, -{47,35,-48}, -{47,35,-47}, -{47,35,-46}, -{47,35,-45}, -{47,35,-44}, -{47,35,-43}, -{47,35,-42}, -{47,35,-41}, -{47,35,-40}, -{47,35,-39}, -{47,35,-38}, -{47,35,-37}, -{47,35,-36}, -{47,35,-35}, -{47,35,-34}, -{47,35,-33}, -{47,35,-32}, -{47,35,-31}, -{47,35,-30}, -{47,35,-29}, -{47,35,-28}, -{47,35,-27}, -{47,35,-26}, -{47,35,-25}, -{47,35,-24}, -{47,35,-23}, -{47,35,-22}, -{47,35,-21}, -{47,35,-20}, -{47,35,-19}, -{47,35,-18}, -{47,35,-17}, -{47,35,-16}, -{47,35,-15}, -{47,35,-14}, -{47,35,-13}, -{47,35,-12}, -{47,35,-11}, -{47,35,-10}, -{47,35,-9}, -{47,35,-8}, -{47,35,-7}, -{47,35,-6}, -{47,35,-5}, -{47,35,-4}, -{47,35,-3}, -{47,35,-2}, -{47,35,-1}, -{47,35,0}, -{47,35,1}, -{47,35,2}, -{47,35,3}, -{47,35,4}, -{47,35,5}, -{47,35,6}, -{47,35,7}, -{47,35,8}, -{47,35,9}, -{47,35,10}, -{47,35,11}, -{47,35,12}, -{47,35,13}, -{47,35,14}, -{47,35,15}, -{47,35,16}, -{47,35,17}, -{47,35,18}, -{47,35,19}, -{47,35,20}, -{47,35,21}, -{47,35,22}, -{47,35,23}, -{47,35,24}, -{47,35,25}, -{47,35,26}, -{47,35,27}, -{47,35,28}, -{47,35,29}, -{47,35,30}, -{47,35,31}, -{47,35,32}, -{47,35,33}, -{47,35,34}, -{47,35,35}, -{47,35,36}, -{47,35,37}, -{47,35,38}, -{47,35,39}, -{47,35,40}, -{47,35,41}, -{47,35,42}, -{47,35,43}, -{47,35,44}, -{47,35,45}, -{47,35,46}, -{47,35,47}, -{47,35,48}, -{47,35,49}, -{47,35,50}, -{47,35,51}, -{47,35,52}, -{47,35,53}, -{47,35,54}, -{47,35,55}, -{47,35,56}, -{47,36,-82}, -{47,36,-81}, -{47,36,-80}, -{47,36,-79}, -{47,36,-78}, -{47,36,-77}, -{47,36,-76}, -{47,36,-75}, -{47,36,-74}, -{47,36,-73}, -{47,36,-72}, -{47,36,-71}, -{47,36,-70}, -{47,36,-69}, -{47,36,-68}, -{47,36,-67}, -{47,36,-66}, -{47,36,-65}, -{47,36,-64}, -{47,36,-63}, -{47,36,-62}, -{47,36,-61}, -{47,36,-60}, -{47,36,-59}, -{47,36,-58}, -{47,36,-57}, -{47,36,-56}, -{47,36,-55}, -{47,36,-54}, -{47,36,-53}, -{47,36,-52}, -{47,36,-51}, -{47,36,-50}, -{47,36,-49}, -{47,36,-48}, -{47,36,-47}, -{47,36,-46}, -{47,36,-45}, -{47,36,-44}, -{47,36,-43}, -{47,36,-42}, -{47,36,-41}, -{47,36,-40}, -{47,36,-39}, -{47,36,-38}, -{47,36,-37}, -{47,36,-36}, -{47,36,-35}, -{47,36,-34}, -{47,36,-33}, -{47,36,-32}, -{47,36,-31}, -{47,36,-30}, -{47,36,-29}, -{47,36,-28}, -{47,36,-27}, -{47,36,-26}, -{47,36,-25}, -{47,36,-24}, -{47,36,-23}, -{47,36,-22}, -{47,36,-21}, -{47,36,-20}, -{47,36,-19}, -{47,36,-18}, -{47,36,-17}, -{47,36,-16}, -{47,36,-15}, -{47,36,-14}, -{47,36,-13}, -{47,36,-12}, -{47,36,-11}, -{47,36,-10}, -{47,36,-9}, -{47,36,-8}, -{47,36,-7}, -{47,36,-6}, -{47,36,-5}, -{47,36,-4}, -{47,36,-3}, -{47,36,-2}, -{47,36,-1}, -{47,36,0}, -{47,36,1}, -{47,36,2}, -{47,36,3}, -{47,36,4}, -{47,36,5}, -{47,36,6}, -{47,36,7}, -{47,36,8}, -{47,36,9}, -{47,36,10}, -{47,36,11}, -{47,36,12}, -{47,36,13}, -{47,36,14}, -{47,36,15}, -{47,36,16}, -{47,36,17}, -{47,36,18}, -{47,36,19}, -{47,36,20}, -{47,36,21}, -{47,36,22}, -{47,36,23}, -{47,36,24}, -{47,36,25}, -{47,36,26}, -{47,36,27}, -{47,36,28}, -{47,36,29}, -{47,36,30}, -{47,36,31}, -{47,36,32}, -{47,36,33}, -{47,36,34}, -{47,36,35}, -{47,36,36}, -{47,36,37}, -{47,36,38}, -{47,36,39}, -{47,36,40}, -{47,36,41}, -{47,36,42}, -{47,36,43}, -{47,36,44}, -{47,36,45}, -{47,36,46}, -{47,36,47}, -{47,36,48}, -{47,36,49}, -{47,36,50}, -{47,36,51}, -{47,36,52}, -{47,36,53}, -{47,36,54}, -{47,36,55}, -{47,36,56}, -{47,37,-83}, -{47,37,-82}, -{47,37,-81}, -{47,37,-80}, -{47,37,-79}, -{47,37,-78}, -{47,37,-77}, -{47,37,-76}, -{47,37,-75}, -{47,37,-74}, -{47,37,-73}, -{47,37,-72}, -{47,37,-71}, -{47,37,-70}, -{47,37,-69}, -{47,37,-68}, -{47,37,-67}, -{47,37,-66}, -{47,37,-65}, -{47,37,-64}, -{47,37,-63}, -{47,37,-62}, -{47,37,-61}, -{47,37,-60}, -{47,37,-59}, -{47,37,-58}, -{47,37,-57}, -{47,37,-56}, -{47,37,-55}, -{47,37,-54}, -{47,37,-53}, -{47,37,-52}, -{47,37,-51}, -{47,37,-50}, -{47,37,-49}, -{47,37,-48}, -{47,37,-47}, -{47,37,-46}, -{47,37,-45}, -{47,37,-44}, -{47,37,-43}, -{47,37,-42}, -{47,37,-41}, -{47,37,-40}, -{47,37,-39}, -{47,37,-38}, -{47,37,-37}, -{47,37,-36}, -{47,37,-35}, -{47,37,-34}, -{47,37,-33}, -{47,37,-32}, -{47,37,-31}, -{47,37,-30}, -{47,37,-29}, -{47,37,-28}, -{47,37,-27}, -{47,37,-26}, -{47,37,-25}, -{47,37,-24}, -{47,37,-23}, -{47,37,-22}, -{47,37,-21}, -{47,37,-20}, -{47,37,-19}, -{47,37,-18}, -{47,37,-17}, -{47,37,-16}, -{47,37,-15}, -{47,37,-14}, -{47,37,-13}, -{47,37,-12}, -{47,37,-11}, -{47,37,-10}, -{47,37,-9}, -{47,37,-8}, -{47,37,-7}, -{47,37,-6}, -{47,37,-5}, -{47,37,-4}, -{47,37,-3}, -{47,37,-2}, -{47,37,-1}, -{47,37,0}, -{47,37,1}, -{47,37,2}, -{47,37,3}, -{47,37,4}, -{47,37,5}, -{47,37,6}, -{47,37,7}, -{47,37,8}, -{47,37,9}, -{47,37,10}, -{47,37,11}, -{47,37,12}, -{47,37,13}, -{47,37,14}, -{47,37,15}, -{47,37,16}, -{47,37,17}, -{47,37,18}, -{47,37,19}, -{47,37,20}, -{47,37,21}, -{47,37,22}, -{47,37,23}, -{47,37,24}, -{47,37,25}, -{47,37,26}, -{47,37,27}, -{47,37,28}, -{47,37,29}, -{47,37,30}, -{47,37,31}, -{47,37,32}, -{47,37,33}, -{47,37,34}, -{47,37,35}, -{47,37,36}, -{47,37,37}, -{47,37,38}, -{47,37,39}, -{47,37,40}, -{47,37,41}, -{47,37,42}, -{47,37,43}, -{47,37,44}, -{47,37,45}, -{47,37,46}, -{47,37,47}, -{47,37,48}, -{47,37,49}, -{47,37,50}, -{47,37,51}, -{47,37,52}, -{47,37,53}, -{47,37,54}, -{47,37,55}, -{47,37,56}, -{47,38,-83}, -{47,38,-82}, -{47,38,-81}, -{47,38,-80}, -{47,38,-79}, -{47,38,-78}, -{47,38,-77}, -{47,38,-76}, -{47,38,-75}, -{47,38,-74}, -{47,38,-73}, -{47,38,-72}, -{47,38,-71}, -{47,38,-70}, -{47,38,-69}, -{47,38,-68}, -{47,38,-67}, -{47,38,-66}, -{47,38,-65}, -{47,38,-64}, -{47,38,-63}, -{47,38,-62}, -{47,38,-61}, -{47,38,-60}, -{47,38,-59}, -{47,38,-58}, -{47,38,-57}, -{47,38,-56}, -{47,38,-55}, -{47,38,-54}, -{47,38,-53}, -{47,38,-52}, -{47,38,-51}, -{47,38,-50}, -{47,38,-49}, -{47,38,-48}, -{47,38,-47}, -{47,38,-46}, -{47,38,-45}, -{47,38,-44}, -{47,38,-43}, -{47,38,-42}, -{47,38,-41}, -{47,38,-40}, -{47,38,-39}, -{47,38,-38}, -{47,38,-37}, -{47,38,-36}, -{47,38,-35}, -{47,38,-34}, -{47,38,-33}, -{47,38,-32}, -{47,38,-31}, -{47,38,-30}, -{47,38,-29}, -{47,38,-28}, -{47,38,-27}, -{47,38,-26}, -{47,38,-25}, -{47,38,-24}, -{47,38,-23}, -{47,38,-22}, -{47,38,-21}, -{47,38,-20}, -{47,38,-19}, -{47,38,-18}, -{47,38,-17}, -{47,38,-16}, -{47,38,-15}, -{47,38,-14}, -{47,38,-13}, -{47,38,-12}, -{47,38,-11}, -{47,38,-10}, -{47,38,-9}, -{47,38,-8}, -{47,38,-7}, -{47,38,-6}, -{47,38,-5}, -{47,38,-4}, -{47,38,-3}, -{47,38,-2}, -{47,38,-1}, -{47,38,0}, -{47,38,1}, -{47,38,2}, -{47,38,3}, -{47,38,4}, -{47,38,5}, -{47,38,6}, -{47,38,7}, -{47,38,8}, -{47,38,9}, -{47,38,10}, -{47,38,11}, -{47,38,12}, -{47,38,13}, -{47,38,14}, -{47,38,15}, -{47,38,16}, -{47,38,17}, -{47,38,18}, -{47,38,19}, -{47,38,20}, -{47,38,21}, -{47,38,22}, -{47,38,23}, -{47,38,24}, -{47,38,25}, -{47,38,26}, -{47,38,27}, -{47,38,28}, -{47,38,29}, -{47,38,30}, -{47,38,31}, -{47,38,32}, -{47,38,33}, -{47,38,34}, -{47,38,35}, -{47,38,36}, -{47,38,37}, -{47,38,38}, -{47,38,39}, -{47,38,40}, -{47,38,41}, -{47,38,42}, -{47,38,43}, -{47,38,44}, -{47,38,45}, -{47,38,46}, -{47,38,47}, -{47,38,48}, -{47,38,49}, -{47,38,50}, -{47,38,51}, -{47,38,52}, -{47,38,53}, -{47,38,54}, -{47,38,55}, -{47,38,56}, -{47,39,-83}, -{47,39,-82}, -{47,39,-81}, -{47,39,-80}, -{47,39,-79}, -{47,39,-78}, -{47,39,-77}, -{47,39,-76}, -{47,39,-75}, -{47,39,-74}, -{47,39,-73}, -{47,39,-72}, -{47,39,-71}, -{47,39,-70}, -{47,39,-69}, -{47,39,-68}, -{47,39,-67}, -{47,39,-66}, -{47,39,-65}, -{47,39,-64}, -{47,39,-63}, -{47,39,-62}, -{47,39,-61}, -{47,39,-60}, -{47,39,-59}, -{47,39,-58}, -{47,39,-57}, -{47,39,-56}, -{47,39,-55}, -{47,39,-54}, -{47,39,-53}, -{47,39,-52}, -{47,39,-51}, -{47,39,-50}, -{47,39,-49}, -{47,39,-48}, -{47,39,-47}, -{47,39,-46}, -{47,39,-45}, -{47,39,-44}, -{47,39,-43}, -{47,39,-42}, -{47,39,-41}, -{47,39,-40}, -{47,39,-39}, -{47,39,-38}, -{47,39,-37}, -{47,39,-36}, -{47,39,-35}, -{47,39,-34}, -{47,39,-33}, -{47,39,-32}, -{47,39,-31}, -{47,39,-30}, -{47,39,-29}, -{47,39,-28}, -{47,39,-27}, -{47,39,-26}, -{47,39,-25}, -{47,39,-24}, -{47,39,-23}, -{47,39,-22}, -{47,39,-21}, -{47,39,-20}, -{47,39,-19}, -{47,39,-18}, -{47,39,-17}, -{47,39,-16}, -{47,39,-15}, -{47,39,-14}, -{47,39,-13}, -{47,39,-12}, -{47,39,-11}, -{47,39,-10}, -{47,39,-9}, -{47,39,-8}, -{47,39,-7}, -{47,39,-6}, -{47,39,-5}, -{47,39,-4}, -{47,39,-3}, -{47,39,-2}, -{47,39,-1}, -{47,39,0}, -{47,39,1}, -{47,39,2}, -{47,39,3}, -{47,39,4}, -{47,39,5}, -{47,39,6}, -{47,39,7}, -{47,39,8}, -{47,39,9}, -{47,39,10}, -{47,39,11}, -{47,39,12}, -{47,39,13}, -{47,39,14}, -{47,39,15}, -{47,39,16}, -{47,39,17}, -{47,39,18}, -{47,39,19}, -{47,39,20}, -{47,39,21}, -{47,39,22}, -{47,39,23}, -{47,39,24}, -{47,39,25}, -{47,39,26}, -{47,39,27}, -{47,39,28}, -{47,39,29}, -{47,39,30}, -{47,39,31}, -{47,39,32}, -{47,39,33}, -{47,39,34}, -{47,39,35}, -{47,39,36}, -{47,39,37}, -{47,39,38}, -{47,39,39}, -{47,39,40}, -{47,39,41}, -{47,39,42}, -{47,39,43}, -{47,39,44}, -{47,39,45}, -{47,39,46}, -{47,39,47}, -{47,39,48}, -{47,39,49}, -{47,39,50}, -{47,39,51}, -{47,39,52}, -{47,39,53}, -{47,39,54}, -{47,39,55}, -{47,39,56}, -{47,39,57}, -{47,40,-83}, -{47,40,-82}, -{47,40,-81}, -{47,40,-80}, -{47,40,-79}, -{47,40,-78}, -{47,40,-77}, -{47,40,-76}, -{47,40,-75}, -{47,40,-74}, -{47,40,-73}, -{47,40,-72}, -{47,40,-71}, -{47,40,-70}, -{47,40,-69}, -{47,40,-68}, -{47,40,-67}, -{47,40,-66}, -{47,40,-65}, -{47,40,-64}, -{47,40,-63}, -{47,40,-62}, -{47,40,-61}, -{47,40,-60}, -{47,40,-59}, -{47,40,-58}, -{47,40,-57}, -{47,40,-56}, -{47,40,-55}, -{47,40,-54}, -{47,40,-53}, -{47,40,-52}, -{47,40,-51}, -{47,40,-50}, -{47,40,-49}, -{47,40,-48}, -{47,40,-47}, -{47,40,-46}, -{47,40,-45}, -{47,40,-44}, -{47,40,-43}, -{47,40,-42}, -{47,40,-41}, -{47,40,-40}, -{47,40,-39}, -{47,40,-38}, -{47,40,-37}, -{47,40,-36}, -{47,40,-35}, -{47,40,-34}, -{47,40,-33}, -{47,40,-32}, -{47,40,-31}, -{47,40,-30}, -{47,40,-29}, -{47,40,-28}, -{47,40,-27}, -{47,40,-26}, -{47,40,-25}, -{47,40,-24}, -{47,40,-23}, -{47,40,-22}, -{47,40,-21}, -{47,40,-20}, -{47,40,-19}, -{47,40,-18}, -{47,40,-17}, -{47,40,-16}, -{47,40,-15}, -{47,40,-14}, -{47,40,-13}, -{47,40,-12}, -{47,40,-11}, -{47,40,-10}, -{47,40,-9}, -{47,40,-8}, -{47,40,-7}, -{47,40,-6}, -{47,40,-5}, -{47,40,-4}, -{47,40,-3}, -{47,40,-2}, -{47,40,-1}, -{47,40,0}, -{47,40,1}, -{47,40,2}, -{47,40,3}, -{47,40,4}, -{47,40,5}, -{47,40,6}, -{47,40,7}, -{47,40,8}, -{47,40,9}, -{47,40,10}, -{47,40,11}, -{47,40,12}, -{47,40,13}, -{47,40,14}, -{47,40,15}, -{47,40,16}, -{47,40,17}, -{47,40,18}, -{47,40,19}, -{47,40,20}, -{47,40,21}, -{47,40,22}, -{47,40,23}, -{47,40,24}, -{47,40,25}, -{47,40,26}, -{47,40,27}, -{47,40,28}, -{47,40,29}, -{47,40,30}, -{47,40,31}, -{47,40,32}, -{47,40,33}, -{47,40,34}, -{47,40,35}, -{47,40,36}, -{47,40,37}, -{47,40,38}, -{47,40,39}, -{47,40,40}, -{47,40,41}, -{47,40,42}, -{47,40,43}, -{47,40,44}, -{47,40,45}, -{47,40,46}, -{47,40,47}, -{47,40,48}, -{47,40,49}, -{47,40,50}, -{47,40,51}, -{47,40,52}, -{47,40,53}, -{47,40,54}, -{47,40,55}, -{47,40,56}, -{47,40,57}, -{47,41,-83}, -{47,41,-82}, -{47,41,-81}, -{47,41,-80}, -{47,41,-79}, -{47,41,-78}, -{47,41,-77}, -{47,41,-76}, -{47,41,-75}, -{47,41,-74}, -{47,41,-73}, -{47,41,-72}, -{47,41,-71}, -{47,41,-70}, -{47,41,-69}, -{47,41,-68}, -{47,41,-67}, -{47,41,-66}, -{47,41,-65}, -{47,41,-64}, -{47,41,-63}, -{47,41,-62}, -{47,41,-61}, -{47,41,-60}, -{47,41,-59}, -{47,41,-58}, -{47,41,-57}, -{47,41,-56}, -{47,41,-55}, -{47,41,-54}, -{47,41,-53}, -{47,41,-52}, -{47,41,-51}, -{47,41,-50}, -{47,41,-49}, -{47,41,-48}, -{47,41,-47}, -{47,41,-46}, -{47,41,-45}, -{47,41,-44}, -{47,41,-43}, -{47,41,-42}, -{47,41,-41}, -{47,41,-40}, -{47,41,-39}, -{47,41,-38}, -{47,41,-37}, -{47,41,-36}, -{47,41,-35}, -{47,41,-34}, -{47,41,-33}, -{47,41,-32}, -{47,41,-31}, -{47,41,-30}, -{47,41,-29}, -{47,41,-28}, -{47,41,-27}, -{47,41,-26}, -{47,41,-25}, -{47,41,-24}, -{47,41,-23}, -{47,41,-22}, -{47,41,-21}, -{47,41,-20}, -{47,41,-19}, -{47,41,-18}, -{47,41,-17}, -{47,41,-16}, -{47,41,-15}, -{47,41,-14}, -{47,41,-13}, -{47,41,-12}, -{47,41,-11}, -{47,41,-10}, -{47,41,-9}, -{47,41,-8}, -{47,41,-7}, -{47,41,-6}, -{47,41,-5}, -{47,41,-4}, -{47,41,-3}, -{47,41,-2}, -{47,41,-1}, -{47,41,0}, -{47,41,1}, -{47,41,2}, -{47,41,3}, -{47,41,4}, -{47,41,5}, -{47,41,6}, -{47,41,7}, -{47,41,8}, -{47,41,9}, -{47,41,10}, -{47,41,11}, -{47,41,12}, -{47,41,13}, -{47,41,14}, -{47,41,15}, -{47,41,16}, -{47,41,17}, -{47,41,18}, -{47,41,19}, -{47,41,20}, -{47,41,21}, -{47,41,22}, -{47,41,23}, -{47,41,24}, -{47,41,25}, -{47,41,26}, -{47,41,27}, -{47,41,28}, -{47,41,29}, -{47,41,30}, -{47,41,31}, -{47,41,32}, -{47,41,33}, -{47,41,34}, -{47,41,35}, -{47,41,36}, -{47,41,37}, -{47,41,38}, -{47,41,39}, -{47,41,40}, -{47,41,41}, -{47,41,42}, -{47,41,43}, -{47,41,44}, -{47,41,45}, -{47,41,46}, -{47,41,47}, -{47,41,48}, -{47,41,49}, -{47,41,50}, -{47,41,51}, -{47,41,52}, -{47,41,53}, -{47,41,54}, -{47,41,55}, -{47,41,56}, -{47,41,57}, -{47,42,-83}, -{47,42,-82}, -{47,42,-81}, -{47,42,-80}, -{47,42,-79}, -{47,42,-78}, -{47,42,-77}, -{47,42,-76}, -{47,42,-75}, -{47,42,-74}, -{47,42,-73}, -{47,42,-72}, -{47,42,-71}, -{47,42,-70}, -{47,42,-69}, -{47,42,-68}, -{47,42,-67}, -{47,42,-66}, -{47,42,-65}, -{47,42,-64}, -{47,42,-63}, -{47,42,-62}, -{47,42,-61}, -{47,42,-60}, -{47,42,-59}, -{47,42,-58}, -{47,42,-57}, -{47,42,-56}, -{47,42,-55}, -{47,42,-54}, -{47,42,-53}, -{47,42,-52}, -{47,42,-51}, -{47,42,-50}, -{47,42,-49}, -{47,42,-48}, -{47,42,-47}, -{47,42,-46}, -{47,42,-45}, -{47,42,-44}, -{47,42,-43}, -{47,42,-42}, -{47,42,-41}, -{47,42,-40}, -{47,42,-39}, -{47,42,-38}, -{47,42,-37}, -{47,42,-36}, -{47,42,-35}, -{47,42,-34}, -{47,42,-33}, -{47,42,-32}, -{47,42,-31}, -{47,42,-30}, -{47,42,-29}, -{47,42,-28}, -{47,42,-27}, -{47,42,-26}, -{47,42,-25}, -{47,42,-24}, -{47,42,-23}, -{47,42,-22}, -{47,42,-21}, -{47,42,-20}, -{47,42,-19}, -{47,42,-18}, -{47,42,-17}, -{47,42,-16}, -{47,42,-15}, -{47,42,-14}, -{47,42,-13}, -{47,42,-12}, -{47,42,-11}, -{47,42,-10}, -{47,42,-9}, -{47,42,-8}, -{47,42,-7}, -{47,42,-6}, -{47,42,-5}, -{47,42,-4}, -{47,42,-3}, -{47,42,-2}, -{47,42,-1}, -{47,42,0}, -{47,42,1}, -{47,42,2}, -{47,42,3}, -{47,42,4}, -{47,42,5}, -{47,42,6}, -{47,42,7}, -{47,42,8}, -{47,42,9}, -{47,42,10}, -{47,42,11}, -{47,42,12}, -{47,42,13}, -{47,42,14}, -{47,42,15}, -{47,42,16}, -{47,42,17}, -{47,42,18}, -{47,42,19}, -{47,42,20}, -{47,42,21}, -{47,42,22}, -{47,42,23}, -{47,42,24}, -{47,42,25}, -{47,42,26}, -{47,42,27}, -{47,42,28}, -{47,42,29}, -{47,42,30}, -{47,42,31}, -{47,42,32}, -{47,42,33}, -{47,42,34}, -{47,42,35}, -{47,42,36}, -{47,42,37}, -{47,42,38}, -{47,42,39}, -{47,42,40}, -{47,42,41}, -{47,42,42}, -{47,42,43}, -{47,42,44}, -{47,42,45}, -{47,42,46}, -{47,42,47}, -{47,42,48}, -{47,42,49}, -{47,42,50}, -{47,42,51}, -{47,42,52}, -{47,42,53}, -{47,42,54}, -{47,42,55}, -{47,42,56}, -{47,42,57}, -{47,43,-83}, -{47,43,-82}, -{47,43,-81}, -{47,43,-80}, -{47,43,-79}, -{47,43,-78}, -{47,43,-77}, -{47,43,-76}, -{47,43,-75}, -{47,43,-74}, -{47,43,-73}, -{47,43,-72}, -{47,43,-71}, -{47,43,-70}, -{47,43,-69}, -{47,43,-68}, -{47,43,-67}, -{47,43,-66}, -{47,43,-65}, -{47,43,-64}, -{47,43,-63}, -{47,43,-62}, -{47,43,-61}, -{47,43,-60}, -{47,43,-59}, -{47,43,-58}, -{47,43,-57}, -{47,43,-56}, -{47,43,-55}, -{47,43,-54}, -{47,43,-53}, -{47,43,-52}, -{47,43,-51}, -{47,43,-50}, -{47,43,-49}, -{47,43,-48}, -{47,43,-47}, -{47,43,-46}, -{47,43,-45}, -{47,43,-44}, -{47,43,-43}, -{47,43,-42}, -{47,43,-41}, -{47,43,-40}, -{47,43,-39}, -{47,43,-38}, -{47,43,-37}, -{47,43,-36}, -{47,43,-35}, -{47,43,-34}, -{47,43,-33}, -{47,43,-32}, -{47,43,-31}, -{47,43,-30}, -{47,43,-29}, -{47,43,-28}, -{47,43,-27}, -{47,43,-26}, -{47,43,-25}, -{47,43,-24}, -{47,43,-23}, -{47,43,-22}, -{47,43,-21}, -{47,43,-20}, -{47,43,-19}, -{47,43,-18}, -{47,43,-17}, -{47,43,-16}, -{47,43,-15}, -{47,43,-14}, -{47,43,-13}, -{47,43,-12}, -{47,43,-11}, -{47,43,-10}, -{47,43,-9}, -{47,43,-8}, -{47,43,-7}, -{47,43,-6}, -{47,43,-5}, -{47,43,-4}, -{47,43,-3}, -{47,43,-2}, -{47,43,-1}, -{47,43,0}, -{47,43,1}, -{47,43,2}, -{47,43,3}, -{47,43,4}, -{47,43,5}, -{47,43,6}, -{47,43,7}, -{47,43,8}, -{47,43,9}, -{47,43,10}, -{47,43,11}, -{47,43,12}, -{47,43,13}, -{47,43,14}, -{47,43,15}, -{47,43,16}, -{47,43,17}, -{47,43,18}, -{47,43,19}, -{47,43,20}, -{47,43,21}, -{47,43,22}, -{47,43,23}, -{47,43,24}, -{47,43,25}, -{47,43,26}, -{47,43,27}, -{47,43,28}, -{47,43,29}, -{47,43,30}, -{47,43,31}, -{47,43,32}, -{47,43,33}, -{47,43,34}, -{47,43,35}, -{47,43,36}, -{47,43,37}, -{47,43,38}, -{47,43,39}, -{47,43,40}, -{47,43,41}, -{47,43,42}, -{47,43,43}, -{47,43,44}, -{47,43,45}, -{47,43,46}, -{47,43,47}, -{47,43,48}, -{47,43,49}, -{47,43,50}, -{47,43,51}, -{47,43,52}, -{47,43,53}, -{47,43,54}, -{47,43,55}, -{47,43,56}, -{47,43,57}, -{47,44,-83}, -{47,44,-82}, -{47,44,-81}, -{47,44,-80}, -{47,44,-79}, -{47,44,-78}, -{47,44,-77}, -{47,44,-76}, -{47,44,-75}, -{47,44,-74}, -{47,44,-73}, -{47,44,-72}, -{47,44,-71}, -{47,44,-70}, -{47,44,-69}, -{47,44,-68}, -{47,44,-67}, -{47,44,-66}, -{47,44,-65}, -{47,44,-64}, -{47,44,-63}, -{47,44,-62}, -{47,44,-61}, -{47,44,-60}, -{47,44,-59}, -{47,44,-58}, -{47,44,-57}, -{47,44,-56}, -{47,44,-55}, -{47,44,-54}, -{47,44,-53}, -{47,44,-52}, -{47,44,-51}, -{47,44,-50}, -{47,44,-49}, -{47,44,-48}, -{47,44,-47}, -{47,44,-46}, -{47,44,-45}, -{47,44,-44}, -{47,44,-43}, -{47,44,-42}, -{47,44,-41}, -{47,44,-40}, -{47,44,-39}, -{47,44,-38}, -{47,44,-37}, -{47,44,-36}, -{47,44,-35}, -{47,44,-34}, -{47,44,-33}, -{47,44,-32}, -{47,44,-31}, -{47,44,-30}, -{47,44,-29}, -{47,44,-28}, -{47,44,-27}, -{47,44,-26}, -{47,44,-25}, -{47,44,-24}, -{47,44,-23}, -{47,44,-22}, -{47,44,-21}, -{47,44,-20}, -{47,44,-19}, -{47,44,-18}, -{47,44,-17}, -{47,44,-16}, -{47,44,-15}, -{47,44,-14}, -{47,44,-13}, -{47,44,-12}, -{47,44,-11}, -{47,44,-10}, -{47,44,-9}, -{47,44,-8}, -{47,44,-7}, -{47,44,-6}, -{47,44,-5}, -{47,44,-4}, -{47,44,-3}, -{47,44,-2}, -{47,44,-1}, -{47,44,0}, -{47,44,1}, -{47,44,2}, -{47,44,3}, -{47,44,4}, -{47,44,5}, -{47,44,6}, -{47,44,7}, -{47,44,8}, -{47,44,9}, -{47,44,10}, -{47,44,11}, -{47,44,12}, -{47,44,13}, -{47,44,14}, -{47,44,15}, -{47,44,16}, -{47,44,17}, -{47,44,18}, -{47,44,19}, -{47,44,20}, -{47,44,21}, -{47,44,22}, -{47,44,23}, -{47,44,24}, -{47,44,25}, -{47,44,26}, -{47,44,27}, -{47,44,28}, -{47,44,29}, -{47,44,30}, -{47,44,31}, -{47,44,32}, -{47,44,33}, -{47,44,34}, -{47,44,35}, -{47,44,36}, -{47,44,37}, -{47,44,38}, -{47,44,39}, -{47,44,40}, -{47,44,41}, -{47,44,42}, -{47,44,43}, -{47,44,44}, -{47,44,45}, -{47,44,46}, -{47,44,47}, -{47,44,48}, -{47,44,49}, -{47,44,50}, -{47,44,51}, -{47,44,52}, -{47,44,53}, -{47,44,54}, -{47,44,55}, -{47,44,56}, -{47,44,57}, -{47,45,-83}, -{47,45,-82}, -{47,45,-81}, -{47,45,-80}, -{47,45,-79}, -{47,45,-78}, -{47,45,-77}, -{47,45,-76}, -{47,45,-75}, -{47,45,-74}, -{47,45,-73}, -{47,45,-72}, -{47,45,-71}, -{47,45,-70}, -{47,45,-69}, -{47,45,-68}, -{47,45,-67}, -{47,45,-66}, -{47,45,-65}, -{47,45,-64}, -{47,45,-63}, -{47,45,-62}, -{47,45,-61}, -{47,45,-60}, -{47,45,-59}, -{47,45,-58}, -{47,45,-57}, -{47,45,-56}, -{47,45,-55}, -{47,45,-54}, -{47,45,-53}, -{47,45,-52}, -{47,45,-51}, -{47,45,-50}, -{47,45,-49}, -{47,45,-48}, -{47,45,-47}, -{47,45,-46}, -{47,45,-45}, -{47,45,-44}, -{47,45,-43}, -{47,45,-42}, -{47,45,-41}, -{47,45,-40}, -{47,45,-39}, -{47,45,-38}, -{47,45,-37}, -{47,45,-36}, -{47,45,-35}, -{47,45,-34}, -{47,45,-33}, -{47,45,-32}, -{47,45,-31}, -{47,45,-30}, -{47,45,-29}, -{47,45,-28}, -{47,45,-27}, -{47,45,-26}, -{47,45,-25}, -{47,45,-24}, -{47,45,-23}, -{47,45,-22}, -{47,45,-21}, -{47,45,-20}, -{47,45,-19}, -{47,45,-18}, -{47,45,-17}, -{47,45,-16}, -{47,45,-15}, -{47,45,-14}, -{47,45,-13}, -{47,45,-12}, -{47,45,-11}, -{47,45,-10}, -{47,45,-9}, -{47,45,-8}, -{47,45,-7}, -{47,45,-6}, -{47,45,-5}, -{47,45,-4}, -{47,45,-3}, -{47,45,-2}, -{47,45,-1}, -{47,45,0}, -{47,45,1}, -{47,45,2}, -{47,45,3}, -{47,45,4}, -{47,45,5}, -{47,45,6}, -{47,45,7}, -{47,45,8}, -{47,45,9}, -{47,45,10}, -{47,45,11}, -{47,45,12}, -{47,45,13}, -{47,45,14}, -{47,45,15}, -{47,45,16}, -{47,45,17}, -{47,45,18}, -{47,45,19}, -{47,45,20}, -{47,45,21}, -{47,45,22}, -{47,45,23}, -{47,45,24}, -{47,45,25}, -{47,45,26}, -{47,45,27}, -{47,45,28}, -{47,45,29}, -{47,45,30}, -{47,45,31}, -{47,45,32}, -{47,45,33}, -{47,45,34}, -{47,45,35}, -{47,45,36}, -{47,45,37}, -{47,45,38}, -{47,45,39}, -{47,45,40}, -{47,45,41}, -{47,45,42}, -{47,45,43}, -{47,45,44}, -{47,45,45}, -{47,45,46}, -{47,45,47}, -{47,45,48}, -{47,45,49}, -{47,45,50}, -{47,45,51}, -{47,45,52}, -{47,45,53}, -{47,45,54}, -{47,45,55}, -{47,45,56}, -{47,45,57}, -{47,46,-83}, -{47,46,-82}, -{47,46,-81}, -{47,46,-80}, -{47,46,-79}, -{47,46,-78}, -{47,46,-77}, -{47,46,-76}, -{47,46,-75}, -{47,46,-74}, -{47,46,-73}, -{47,46,-72}, -{47,46,-71}, -{47,46,-70}, -{47,46,-69}, -{47,46,-68}, -{47,46,-67}, -{47,46,-66}, -{47,46,-65}, -{47,46,-64}, -{47,46,-63}, -{47,46,-62}, -{47,46,-61}, -{47,46,-60}, -{47,46,-59}, -{47,46,-58}, -{47,46,-57}, -{47,46,-56}, -{47,46,-55}, -{47,46,-54}, -{47,46,-53}, -{47,46,-52}, -{47,46,-51}, -{47,46,-50}, -{47,46,-49}, -{47,46,-48}, -{47,46,-47}, -{47,46,-46}, -{47,46,-45}, -{47,46,-44}, -{47,46,-43}, -{47,46,-42}, -{47,46,-41}, -{47,46,-40}, -{47,46,-39}, -{47,46,-38}, -{47,46,-37}, -{47,46,-36}, -{47,46,-35}, -{47,46,-34}, -{47,46,-33}, -{47,46,-32}, -{47,46,-31}, -{47,46,-30}, -{47,46,-29}, -{47,46,-28}, -{47,46,-27}, -{47,46,-26}, -{47,46,-25}, -{47,46,-24}, -{47,46,-23}, -{47,46,-22}, -{47,46,-21}, -{47,46,-20}, -{47,46,-19}, -{47,46,-18}, -{47,46,-17}, -{47,46,-16}, -{47,46,-15}, -{47,46,-14}, -{47,46,-13}, -{47,46,-12}, -{47,46,-11}, -{47,46,-10}, -{47,46,-9}, -{47,46,-8}, -{47,46,-7}, -{47,46,-6}, -{47,46,-5}, -{47,46,-4}, -{47,46,-3}, -{47,46,-2}, -{47,46,-1}, -{47,46,0}, -{47,46,1}, -{47,46,2}, -{47,46,3}, -{47,46,4}, -{47,46,5}, -{47,46,6}, -{47,46,7}, -{47,46,8}, -{47,46,9}, -{47,46,10}, -{47,46,11}, -{47,46,12}, -{47,46,13}, -{47,46,14}, -{47,46,15}, -{47,46,16}, -{47,46,17}, -{47,46,18}, -{47,46,19}, -{47,46,20}, -{47,46,21}, -{47,46,22}, -{47,46,23}, -{47,46,24}, -{47,46,25}, -{47,46,26}, -{47,46,27}, -{47,46,28}, -{47,46,29}, -{47,46,30}, -{47,46,31}, -{47,46,32}, -{47,46,33}, -{47,46,34}, -{47,46,35}, -{47,46,36}, -{47,46,37}, -{47,46,38}, -{47,46,39}, -{47,46,40}, -{47,46,41}, -{47,46,42}, -{47,46,43}, -{47,46,44}, -{47,46,45}, -{47,46,46}, -{47,46,47}, -{47,46,48}, -{47,46,49}, -{47,46,50}, -{47,46,51}, -{47,46,52}, -{47,46,53}, -{47,46,54}, -{47,46,55}, -{47,46,56}, -{47,46,57}, -{47,47,-83}, -{47,47,-82}, -{47,47,-81}, -{47,47,-80}, -{47,47,-79}, -{47,47,-78}, -{47,47,-77}, -{47,47,-76}, -{47,47,-75}, -{47,47,-74}, -{47,47,-73}, -{47,47,-72}, -{47,47,-71}, -{47,47,-70}, -{47,47,-69}, -{47,47,-68}, -{47,47,-67}, -{47,47,-66}, -{47,47,-65}, -{47,47,-64}, -{47,47,-63}, -{47,47,-62}, -{47,47,-61}, -{47,47,-60}, -{47,47,-59}, -{47,47,-58}, -{47,47,-57}, -{47,47,-56}, -{47,47,-55}, -{47,47,-54}, -{47,47,-53}, -{47,47,-52}, -{47,47,-51}, -{47,47,-50}, -{47,47,-49}, -{47,47,-48}, -{47,47,-47}, -{47,47,-46}, -{47,47,-45}, -{47,47,-44}, -{47,47,-43}, -{47,47,-42}, -{47,47,-41}, -{47,47,-40}, -{47,47,-39}, -{47,47,-38}, -{47,47,-37}, -{47,47,-36}, -{47,47,-35}, -{47,47,-34}, -{47,47,-33}, -{47,47,-32}, -{47,47,-31}, -{47,47,-30}, -{47,47,-29}, -{47,47,-28}, -{47,47,-27}, -{47,47,-26}, -{47,47,-25}, -{47,47,-24}, -{47,47,-23}, -{47,47,-22}, -{47,47,-21}, -{47,47,-20}, -{47,47,-19}, -{47,47,-18}, -{47,47,-17}, -{47,47,-16}, -{47,47,-15}, -{47,47,-14}, -{47,47,-13}, -{47,47,-12}, -{47,47,-11}, -{47,47,-10}, -{47,47,-9}, -{47,47,-8}, -{47,47,-7}, -{47,47,-6}, -{47,47,-5}, -{47,47,-4}, -{47,47,-3}, -{47,47,-2}, -{47,47,-1}, -{47,47,0}, -{47,47,1}, -{47,47,2}, -{47,47,3}, -{47,47,4}, -{47,47,5}, -{47,47,6}, -{47,47,7}, -{47,47,8}, -{47,47,9}, -{47,47,10}, -{47,47,11}, -{47,47,12}, -{47,47,13}, -{47,47,14}, -{47,47,15}, -{47,47,16}, -{47,47,17}, -{47,47,18}, -{47,47,19}, -{47,47,20}, -{47,47,21}, -{47,47,22}, -{47,47,23}, -{47,47,24}, -{47,47,25}, -{47,47,26}, -{47,47,27}, -{47,47,28}, -{47,47,29}, -{47,47,30}, -{47,47,31}, -{47,47,32}, -{47,47,33}, -{47,47,34}, -{47,47,35}, -{47,47,36}, -{47,47,37}, -{47,47,38}, -{47,47,39}, -{47,47,40}, -{47,47,41}, -{47,47,42}, -{47,47,43}, -{47,47,44}, -{47,47,45}, -{47,47,46}, -{47,47,47}, -{47,47,48}, -{47,47,49}, -{47,47,50}, -{47,47,51}, -{47,47,52}, -{47,47,53}, -{47,47,54}, -{47,47,55}, -{47,47,56}, -{47,47,57}, -{47,48,-83}, -{47,48,-82}, -{47,48,-81}, -{47,48,-80}, -{47,48,-79}, -{47,48,-78}, -{47,48,-77}, -{47,48,-76}, -{47,48,-75}, -{47,48,-74}, -{47,48,-73}, -{47,48,-72}, -{47,48,-71}, -{47,48,-70}, -{47,48,-69}, -{47,48,-68}, -{47,48,-67}, -{47,48,-66}, -{47,48,-65}, -{47,48,-64}, -{47,48,-63}, -{47,48,-62}, -{47,48,-61}, -{47,48,-60}, -{47,48,-59}, -{47,48,-58}, -{47,48,-57}, -{47,48,-56}, -{47,48,-55}, -{47,48,-54}, -{47,48,-53}, -{47,48,-52}, -{47,48,-51}, -{47,48,-50}, -{47,48,-49}, -{47,48,-48}, -{47,48,-47}, -{47,48,-46}, -{47,48,-45}, -{47,48,-44}, -{47,48,-43}, -{47,48,-42}, -{47,48,-41}, -{47,48,-40}, -{47,48,-39}, -{47,48,-38}, -{47,48,-37}, -{47,48,-36}, -{47,48,-35}, -{47,48,-34}, -{47,48,-33}, -{47,48,-32}, -{47,48,-31}, -{47,48,-30}, -{47,48,-29}, -{47,48,-28}, -{47,48,-27}, -{47,48,-26}, -{47,48,-25}, -{47,48,-24}, -{47,48,-23}, -{47,48,-22}, -{47,48,-21}, -{47,48,-20}, -{47,48,-19}, -{47,48,-18}, -{47,48,-17}, -{47,48,-16}, -{47,48,-15}, -{47,48,-14}, -{47,48,-13}, -{47,48,-12}, -{47,48,-11}, -{47,48,-10}, -{47,48,-9}, -{47,48,-8}, -{47,48,-7}, -{47,48,-6}, -{47,48,-5}, -{47,48,-4}, -{47,48,-3}, -{47,48,-2}, -{47,48,-1}, -{47,48,0}, -{47,48,1}, -{47,48,2}, -{47,48,3}, -{47,48,4}, -{47,48,5}, -{47,48,6}, -{47,48,7}, -{47,48,8}, -{47,48,9}, -{47,48,10}, -{47,48,11}, -{47,48,12}, -{47,48,13}, -{47,48,14}, -{47,48,15}, -{47,48,16}, -{47,48,17}, -{47,48,18}, -{47,48,19}, -{47,48,20}, -{47,48,21}, -{47,48,22}, -{47,48,23}, -{47,48,24}, -{47,48,25}, -{47,48,26}, -{47,48,27}, -{47,48,28}, -{47,48,29}, -{47,48,30}, -{47,48,31}, -{47,48,32}, -{47,48,33}, -{47,48,34}, -{47,48,35}, -{47,48,36}, -{47,48,37}, -{47,48,38}, -{47,48,39}, -{47,48,40}, -{47,48,41}, -{47,48,42}, -{47,48,43}, -{47,48,44}, -{47,48,45}, -{47,48,46}, -{47,48,47}, -{47,48,48}, -{47,48,49}, -{47,48,50}, -{47,48,51}, -{47,48,52}, -{47,48,53}, -{47,48,54}, -{47,48,55}, -{47,48,56}, -{47,48,57}, -{47,48,58}, -{47,49,-83}, -{47,49,-82}, -{47,49,-81}, -{47,49,-80}, -{47,49,-79}, -{47,49,-78}, -{47,49,-77}, -{47,49,-76}, -{47,49,-75}, -{47,49,-74}, -{47,49,-73}, -{47,49,-72}, -{47,49,-71}, -{47,49,-70}, -{47,49,-69}, -{47,49,-68}, -{47,49,-67}, -{47,49,-66}, -{47,49,-65}, -{47,49,-64}, -{47,49,-63}, -{47,49,-62}, -{47,49,-61}, -{47,49,-60}, -{47,49,-59}, -{47,49,-58}, -{47,49,-57}, -{47,49,-56}, -{47,49,-55}, -{47,49,-54}, -{47,49,-53}, -{47,49,-52}, -{47,49,-51}, -{47,49,-50}, -{47,49,-49}, -{47,49,-48}, -{47,49,-47}, -{47,49,-46}, -{47,49,-45}, -{47,49,-44}, -{47,49,-43}, -{47,49,-42}, -{47,49,-41}, -{47,49,-40}, -{47,49,-39}, -{47,49,-38}, -{47,49,-37}, -{47,49,-36}, -{47,49,-35}, -{47,49,-34}, -{47,49,-33}, -{47,49,-32}, -{47,49,-31}, -{47,49,-30}, -{47,49,-29}, -{47,49,-28}, -{47,49,-27}, -{47,49,-26}, -{47,49,-25}, -{47,49,-24}, -{47,49,-23}, -{47,49,-22}, -{47,49,-21}, -{47,49,-20}, -{47,49,-19}, -{47,49,-18}, -{47,49,-17}, -{47,49,-16}, -{47,49,-15}, -{47,49,-14}, -{47,49,-13}, -{47,49,-12}, -{47,49,-11}, -{47,49,-10}, -{47,49,-9}, -{47,49,-8}, -{47,49,-7}, -{47,49,-6}, -{47,49,-5}, -{47,49,-4}, -{47,49,-3}, -{47,49,-2}, -{47,49,-1}, -{47,49,0}, -{47,49,1}, -{47,49,2}, -{47,49,3}, -{47,49,4}, -{47,49,5}, -{47,49,6}, -{47,49,7}, -{47,49,8}, -{47,49,9}, -{47,49,10}, -{47,49,11}, -{47,49,12}, -{47,49,13}, -{47,49,14}, -{47,49,15}, -{47,49,16}, -{47,49,17}, -{47,49,18}, -{47,49,19}, -{47,49,20}, -{47,49,21}, -{47,49,22}, -{47,49,23}, -{47,49,24}, -{47,49,25}, -{47,49,26}, -{47,49,27}, -{47,49,28}, -{47,49,29}, -{47,49,30}, -{47,49,31}, -{47,49,32}, -{47,49,33}, -{47,49,34}, -{47,49,35}, -{47,49,36}, -{47,49,37}, -{47,49,38}, -{47,49,39}, -{47,49,40}, -{47,49,41}, -{47,49,42}, -{47,49,43}, -{47,49,44}, -{47,49,45}, -{47,49,46}, -{47,49,47}, -{47,49,48}, -{47,49,49}, -{47,49,50}, -{47,49,51}, -{47,49,52}, -{47,49,53}, -{47,49,54}, -{47,49,55}, -{47,49,56}, -{47,49,57}, -{47,49,58}, -{47,50,-83}, -{47,50,-82}, -{47,50,-81}, -{47,50,-80}, -{47,50,-79}, -{47,50,-78}, -{47,50,-77}, -{47,50,-76}, -{47,50,-75}, -{47,50,-74}, -{47,50,-73}, -{47,50,-72}, -{47,50,-71}, -{47,50,-70}, -{47,50,-69}, -{47,50,-68}, -{47,50,-67}, -{47,50,-66}, -{47,50,-65}, -{47,50,-64}, -{47,50,-63}, -{47,50,-62}, -{47,50,-61}, -{47,50,-60}, -{47,50,-59}, -{47,50,-58}, -{47,50,-57}, -{47,50,-56}, -{47,50,-55}, -{47,50,-54}, -{47,50,-53}, -{47,50,-52}, -{47,50,-51}, -{47,50,-50}, -{47,50,-49}, -{47,50,-48}, -{47,50,-47}, -{47,50,-46}, -{47,50,-45}, -{47,50,-44}, -{47,50,-43}, -{47,50,-42}, -{47,50,-41}, -{47,50,-40}, -{47,50,-39}, -{47,50,-38}, -{47,50,-37}, -{47,50,-36}, -{47,50,-35}, -{47,50,-34}, -{47,50,-33}, -{47,50,-32}, -{47,50,-31}, -{47,50,-30}, -{47,50,-29}, -{47,50,-28}, -{47,50,-27}, -{47,50,-26}, -{47,50,-25}, -{47,50,-24}, -{47,50,-23}, -{47,50,-22}, -{47,50,-21}, -{47,50,-20}, -{47,50,-19}, -{47,50,-18}, -{47,50,-17}, -{47,50,-16}, -{47,50,-15}, -{47,50,-14}, -{47,50,-13}, -{47,50,-12}, -{47,50,-11}, -{47,50,-10}, -{47,50,-9}, -{47,50,-8}, -{47,50,-7}, -{47,50,-6}, -{47,50,-5}, -{47,50,-4}, -{47,50,-3}, -{47,50,-2}, -{47,50,-1}, -{47,50,0}, -{47,50,1}, -{47,50,2}, -{47,50,3}, -{47,50,4}, -{47,50,5}, -{47,50,6}, -{47,50,7}, -{47,50,8}, -{47,50,9}, -{47,50,10}, -{47,50,11}, -{47,50,12}, -{47,50,13}, -{47,50,14}, -{47,50,15}, -{47,50,16}, -{47,50,17}, -{47,50,18}, -{47,50,19}, -{47,50,20}, -{47,50,21}, -{47,50,22}, -{47,50,23}, -{47,50,24}, -{47,50,25}, -{47,50,26}, -{47,50,27}, -{47,50,28}, -{47,50,29}, -{47,50,30}, -{47,50,31}, -{47,50,32}, -{47,50,33}, -{47,50,34}, -{47,50,35}, -{47,50,36}, -{47,50,37}, -{47,50,38}, -{47,50,39}, -{47,50,40}, -{47,50,41}, -{47,50,42}, -{47,50,43}, -{47,50,44}, -{47,50,45}, -{47,50,46}, -{47,50,47}, -{47,50,48}, -{47,50,49}, -{47,50,50}, -{47,50,51}, -{47,50,52}, -{47,50,53}, -{47,50,54}, -{47,50,55}, -{47,50,56}, -{47,50,57}, -{47,50,58}, -{47,51,-83}, -{47,51,-82}, -{47,51,-81}, -{47,51,-80}, -{47,51,-79}, -{47,51,-78}, -{47,51,-77}, -{47,51,-76}, -{47,51,-75}, -{47,51,-74}, -{47,51,-73}, -{47,51,-72}, -{47,51,-71}, -{47,51,-70}, -{47,51,-69}, -{47,51,-68}, -{47,51,-67}, -{47,51,-66}, -{47,51,-65}, -{47,51,-64}, -{47,51,-63}, -{47,51,-62}, -{47,51,-61}, -{47,51,-60}, -{47,51,-59}, -{47,51,-58}, -{47,51,-57}, -{47,51,-56}, -{47,51,-55}, -{47,51,-54}, -{47,51,-53}, -{47,51,-52}, -{47,51,-51}, -{47,51,-50}, -{47,51,-49}, -{47,51,-48}, -{47,51,-47}, -{47,51,-46}, -{47,51,-45}, -{47,51,-44}, -{47,51,-43}, -{47,51,-42}, -{47,51,-41}, -{47,51,-40}, -{47,51,-39}, -{47,51,-38}, -{47,51,-37}, -{47,51,-36}, -{47,51,-35}, -{47,51,-34}, -{47,51,-33}, -{47,51,-32}, -{47,51,-31}, -{47,51,-30}, -{47,51,-29}, -{47,51,-28}, -{47,51,-27}, -{47,51,-26}, -{47,51,-25}, -{47,51,-24}, -{47,51,-23}, -{47,51,-22}, -{47,51,-21}, -{47,51,-20}, -{47,51,-19}, -{47,51,-18}, -{47,51,-17}, -{47,51,-16}, -{47,51,-15}, -{47,51,-14}, -{47,51,-13}, -{47,51,-12}, -{47,51,-11}, -{47,51,-10}, -{47,51,-9}, -{47,51,-8}, -{47,51,-7}, -{47,51,-6}, -{47,51,-5}, -{47,51,-4}, -{47,51,-3}, -{47,51,-2}, -{47,51,-1}, -{47,51,0}, -{47,51,1}, -{47,51,2}, -{47,51,3}, -{47,51,4}, -{47,51,5}, -{47,51,6}, -{47,51,7}, -{47,51,8}, -{47,51,9}, -{47,51,10}, -{47,51,11}, -{47,51,12}, -{47,51,13}, -{47,51,14}, -{47,51,15}, -{47,51,16}, -{47,51,17}, -{47,51,18}, -{47,51,19}, -{47,51,20}, -{47,51,21}, -{47,51,22}, -{47,51,23}, -{47,51,24}, -{47,51,25}, -{47,51,26}, -{47,51,27}, -{47,51,28}, -{47,51,29}, -{47,51,30}, -{47,51,31}, -{47,51,32}, -{47,51,33}, -{47,51,34}, -{47,51,35}, -{47,51,36}, -{47,51,37}, -{47,51,38}, -{47,51,39}, -{47,51,40}, -{47,51,41}, -{47,51,42}, -{47,51,43}, -{47,51,44}, -{47,51,45}, -{47,51,46}, -{47,51,47}, -{47,51,48}, -{47,51,49}, -{47,51,50}, -{47,51,51}, -{47,51,52}, -{47,51,53}, -{47,51,54}, -{47,51,55}, -{47,51,56}, -{47,51,57}, -{47,51,58}, -{47,52,-83}, -{47,52,-82}, -{47,52,-81}, -{47,52,-80}, -{47,52,-79}, -{47,52,-78}, -{47,52,-77}, -{47,52,-76}, -{47,52,-75}, -{47,52,-74}, -{47,52,-73}, -{47,52,-72}, -{47,52,-71}, -{47,52,-70}, -{47,52,-69}, -{47,52,-68}, -{47,52,-67}, -{47,52,-66}, -{47,52,-65}, -{47,52,-64}, -{47,52,-63}, -{47,52,-62}, -{47,52,-61}, -{47,52,-60}, -{47,52,-59}, -{47,52,-58}, -{47,52,-57}, -{47,52,-56}, -{47,52,-55}, -{47,52,-54}, -{47,52,-53}, -{47,52,-52}, -{47,52,-51}, -{47,52,-50}, -{47,52,-49}, -{47,52,-48}, -{47,52,-47}, -{47,52,-46}, -{47,52,-45}, -{47,52,-44}, -{47,52,-43}, -{47,52,-42}, -{47,52,-41}, -{47,52,-40}, -{47,52,-39}, -{47,52,-38}, -{47,52,-37}, -{47,52,-36}, -{47,52,-35}, -{47,52,-34}, -{47,52,-33}, -{47,52,-32}, -{47,52,-31}, -{47,52,-30}, -{47,52,-29}, -{47,52,-28}, -{47,52,-27}, -{47,52,-26}, -{47,52,-25}, -{47,52,-24}, -{47,52,-23}, -{47,52,-22}, -{47,52,-21}, -{47,52,-20}, -{47,52,-19}, -{47,52,-18}, -{47,52,-17}, -{47,52,-16}, -{47,52,-15}, -{47,52,-14}, -{47,52,-13}, -{47,52,-12}, -{47,52,-11}, -{47,52,-10}, -{47,52,-9}, -{47,52,-8}, -{47,52,-7}, -{47,52,-6}, -{47,52,-5}, -{47,52,-4}, -{47,52,-3}, -{47,52,-2}, -{47,52,-1}, -{47,52,0}, -{47,52,1}, -{47,52,2}, -{47,52,3}, -{47,52,4}, -{47,52,5}, -{47,52,6}, -{47,52,7}, -{47,52,8}, -{47,52,9}, -{47,52,10}, -{47,52,11}, -{47,52,12}, -{47,52,13}, -{47,52,14}, -{47,52,15}, -{47,52,16}, -{47,52,17}, -{47,52,18}, -{47,52,19}, -{47,52,20}, -{47,52,21}, -{47,52,22}, -{47,52,23}, -{47,52,24}, -{47,52,25}, -{47,52,26}, -{47,52,27}, -{47,52,28}, -{47,52,29}, -{47,52,30}, -{47,52,31}, -{47,52,32}, -{47,52,33}, -{47,52,34}, -{47,52,35}, -{47,52,36}, -{47,52,37}, -{47,52,38}, -{47,52,39}, -{47,52,40}, -{47,52,41}, -{47,52,42}, -{47,52,43}, -{47,52,44}, -{47,52,45}, -{47,52,46}, -{47,52,47}, -{47,52,48}, -{47,52,49}, -{47,52,50}, -{47,52,51}, -{47,52,52}, -{47,52,53}, -{47,52,54}, -{47,52,55}, -{47,52,56}, -{47,52,57}, -{47,52,58}, -{47,53,-83}, -{47,53,-82}, -{47,53,-81}, -{47,53,-80}, -{47,53,-79}, -{47,53,-78}, -{47,53,-77}, -{47,53,-76}, -{47,53,-75}, -{47,53,-74}, -{47,53,-73}, -{47,53,-72}, -{47,53,-71}, -{47,53,-70}, -{47,53,-69}, -{47,53,-68}, -{47,53,-67}, -{47,53,-66}, -{47,53,-65}, -{47,53,-64}, -{47,53,-63}, -{47,53,-62}, -{47,53,-61}, -{47,53,-60}, -{47,53,-59}, -{47,53,-58}, -{47,53,-57}, -{47,53,-56}, -{47,53,-55}, -{47,53,-54}, -{47,53,-53}, -{47,53,-52}, -{47,53,-51}, -{47,53,-50}, -{47,53,-49}, -{47,53,-48}, -{47,53,-47}, -{47,53,-46}, -{47,53,-45}, -{47,53,-44}, -{47,53,-43}, -{47,53,-42}, -{47,53,-41}, -{47,53,-40}, -{47,53,-39}, -{47,53,-38}, -{47,53,-37}, -{47,53,-36}, -{47,53,-35}, -{47,53,-34}, -{47,53,-33}, -{47,53,-32}, -{47,53,-31}, -{47,53,-30}, -{47,53,-29}, -{47,53,-28}, -{47,53,-27}, -{47,53,-26}, -{47,53,-25}, -{47,53,-24}, -{47,53,-23}, -{47,53,-22}, -{47,53,-21}, -{47,53,-20}, -{47,53,-19}, -{47,53,-18}, -{47,53,-17}, -{47,53,-16}, -{47,53,-15}, -{47,53,-14}, -{47,53,-13}, -{47,53,-12}, -{47,53,-11}, -{47,53,-10}, -{47,53,-9}, -{47,53,-8}, -{47,53,-7}, -{47,53,-6}, -{47,53,-5}, -{47,53,-4}, -{47,53,-3}, -{47,53,-2}, -{47,53,-1}, -{47,53,0}, -{47,53,1}, -{47,53,2}, -{47,53,3}, -{47,53,4}, -{47,53,5}, -{47,53,6}, -{47,53,7}, -{47,53,8}, -{47,53,9}, -{47,53,10}, -{47,53,11}, -{47,53,12}, -{47,53,13}, -{47,53,14}, -{47,53,15}, -{47,53,16}, -{47,53,17}, -{47,53,18}, -{47,53,19}, -{47,53,20}, -{47,53,21}, -{47,53,22}, -{47,53,23}, -{47,53,24}, -{47,53,25}, -{47,53,26}, -{47,53,27}, -{47,53,28}, -{47,53,29}, -{47,53,30}, -{47,53,31}, -{47,53,32}, -{47,53,33}, -{47,53,34}, -{47,53,35}, -{47,53,36}, -{47,53,37}, -{47,53,38}, -{47,53,39}, -{47,53,40}, -{47,53,41}, -{47,53,42}, -{47,53,43}, -{47,53,44}, -{47,53,45}, -{47,53,46}, -{47,53,47}, -{47,53,48}, -{47,53,49}, -{47,53,50}, -{47,53,51}, -{47,53,52}, -{47,53,53}, -{47,53,54}, -{47,53,55}, -{47,53,56}, -{47,53,57}, -{47,53,58}, -{47,54,-83}, -{47,54,-82}, -{47,54,-81}, -{47,54,-80}, -{47,54,-79}, -{47,54,-78}, -{47,54,-77}, -{47,54,-76}, -{47,54,-75}, -{47,54,-74}, -{47,54,-73}, -{47,54,-72}, -{47,54,-71}, -{47,54,-70}, -{47,54,-69}, -{47,54,-68}, -{47,54,-67}, -{47,54,-66}, -{47,54,-65}, -{47,54,-64}, -{47,54,-63}, -{47,54,-62}, -{47,54,-61}, -{47,54,-60}, -{47,54,-59}, -{47,54,-58}, -{47,54,-57}, -{47,54,-56}, -{47,54,-55}, -{47,54,-54}, -{47,54,-53}, -{47,54,-52}, -{47,54,-51}, -{47,54,-50}, -{47,54,-49}, -{47,54,-48}, -{47,54,-47}, -{47,54,-46}, -{47,54,-45}, -{47,54,-44}, -{47,54,-43}, -{47,54,-42}, -{47,54,-41}, -{47,54,-40}, -{47,54,-39}, -{47,54,-38}, -{47,54,-37}, -{47,54,-36}, -{47,54,-35}, -{47,54,-34}, -{47,54,-33}, -{47,54,-32}, -{47,54,-31}, -{47,54,-30}, -{47,54,-29}, -{47,54,-28}, -{47,54,-27}, -{47,54,-26}, -{47,54,-25}, -{47,54,-24}, -{47,54,-23}, -{47,54,-22}, -{47,54,-21}, -{47,54,-20}, -{47,54,-19}, -{47,54,-18}, -{47,54,-17}, -{47,54,-16}, -{47,54,-15}, -{47,54,-14}, -{47,54,-13}, -{47,54,-12}, -{47,54,-11}, -{47,54,-10}, -{47,54,-9}, -{47,54,-8}, -{47,54,-7}, -{47,54,-6}, -{47,54,-5}, -{47,54,-4}, -{47,54,-3}, -{47,54,-2}, -{47,54,-1}, -{47,54,0}, -{47,54,1}, -{47,54,2}, -{47,54,3}, -{47,54,4}, -{47,54,5}, -{47,54,6}, -{47,54,7}, -{47,54,8}, -{47,54,9}, -{47,54,10}, -{47,54,11}, -{47,54,12}, -{47,54,13}, -{47,54,14}, -{47,54,15}, -{47,54,16}, -{47,54,17}, -{47,54,18}, -{47,54,19}, -{47,54,20}, -{47,54,21}, -{47,54,22}, -{47,54,23}, -{47,54,24}, -{47,54,25}, -{47,54,26}, -{47,54,27}, -{47,54,28}, -{47,54,29}, -{47,54,30}, -{47,54,31}, -{47,54,32}, -{47,54,33}, -{47,54,34}, -{47,54,35}, -{47,54,36}, -{47,54,37}, -{47,54,38}, -{47,54,39}, -{47,54,40}, -{47,54,41}, -{47,54,42}, -{47,54,43}, -{47,54,44}, -{47,54,45}, -{47,54,46}, -{47,54,47}, -{47,54,48}, -{47,54,49}, -{47,54,50}, -{47,54,51}, -{47,54,52}, -{47,54,53}, -{47,54,54}, -{47,54,55}, -{47,54,56}, -{47,54,57}, -{47,54,58}, -{47,55,-83}, -{47,55,-82}, -{47,55,-81}, -{47,55,-80}, -{47,55,-79}, -{47,55,-78}, -{47,55,-77}, -{47,55,-76}, -{47,55,-75}, -{47,55,-74}, -{47,55,-73}, -{47,55,-72}, -{47,55,-71}, -{47,55,-70}, -{47,55,-69}, -{47,55,-68}, -{47,55,-67}, -{47,55,-66}, -{47,55,-65}, -{47,55,-64}, -{47,55,-63}, -{47,55,-62}, -{47,55,-61}, -{47,55,-60}, -{47,55,-59}, -{47,55,-58}, -{47,55,-57}, -{47,55,-56}, -{47,55,-55}, -{47,55,-54}, -{47,55,-53}, -{47,55,-52}, -{47,55,-51}, -{47,55,-50}, -{47,55,-49}, -{47,55,-48}, -{47,55,-47}, -{47,55,-46}, -{47,55,-45}, -{47,55,-44}, -{47,55,-43}, -{47,55,-42}, -{47,55,-41}, -{47,55,-40}, -{47,55,-39}, -{47,55,-38}, -{47,55,-37}, -{47,55,-36}, -{47,55,-35}, -{47,55,-34}, -{47,55,-33}, -{47,55,-32}, -{47,55,-31}, -{47,55,-30}, -{47,55,-29}, -{47,55,-28}, -{47,55,-27}, -{47,55,-26}, -{47,55,-25}, -{47,55,-24}, -{47,55,-23}, -{47,55,-22}, -{47,55,-21}, -{47,55,-20}, -{47,55,-19}, -{47,55,-18}, -{47,55,-17}, -{47,55,-16}, -{47,55,-15}, -{47,55,-14}, -{47,55,-13}, -{47,55,-12}, -{47,55,-11}, -{47,55,-10}, -{47,55,-9}, -{47,55,-8}, -{47,55,-7}, -{47,55,-6}, -{47,55,-5}, -{47,55,-4}, -{47,55,-3}, -{47,55,-2}, -{47,55,-1}, -{47,55,0}, -{47,55,1}, -{47,55,2}, -{47,55,3}, -{47,55,4}, -{47,55,5}, -{47,55,6}, -{47,55,7}, -{47,55,8}, -{47,55,9}, -{47,55,10}, -{47,55,11}, -{47,55,12}, -{47,55,13}, -{47,55,14}, -{47,55,15}, -{47,55,16}, -{47,55,17}, -{47,55,18}, -{47,55,19}, -{47,55,20}, -{47,55,21}, -{47,55,22}, -{47,55,23}, -{47,55,24}, -{47,55,25}, -{47,55,26}, -{47,55,27}, -{47,55,28}, -{47,55,29}, -{47,55,30}, -{47,55,31}, -{47,55,32}, -{47,55,33}, -{47,55,34}, -{47,55,35}, -{47,55,36}, -{47,55,37}, -{47,55,38}, -{47,55,39}, -{47,55,40}, -{47,55,41}, -{47,55,42}, -{47,55,43}, -{47,55,44}, -{47,55,45}, -{47,55,46}, -{47,55,47}, -{47,55,48}, -{47,55,49}, -{47,55,50}, -{47,55,51}, -{47,55,52}, -{47,55,53}, -{47,55,54}, -{47,55,55}, -{47,55,56}, -{47,55,57}, -{47,55,58}, -{47,56,-83}, -{47,56,-82}, -{47,56,-81}, -{47,56,-80}, -{47,56,-79}, -{47,56,-78}, -{47,56,-77}, -{47,56,-76}, -{47,56,-75}, -{47,56,-74}, -{47,56,-73}, -{47,56,-72}, -{47,56,-71}, -{47,56,-70}, -{47,56,-69}, -{47,56,-68}, -{47,56,-67}, -{47,56,-66}, -{47,56,-65}, -{47,56,-64}, -{47,56,-63}, -{47,56,-62}, -{47,56,-61}, -{47,56,-60}, -{47,56,-59}, -{47,56,-58}, -{47,56,-57}, -{47,56,-56}, -{47,56,-55}, -{47,56,-54}, -{47,56,-53}, -{47,56,-52}, -{47,56,-51}, -{47,56,-50}, -{47,56,-49}, -{47,56,-48}, -{47,56,-47}, -{47,56,-46}, -{47,56,-45}, -{47,56,-44}, -{47,56,-43}, -{47,56,-42}, -{47,56,-41}, -{47,56,-40}, -{47,56,-39}, -{47,56,-38}, -{47,56,-37}, -{47,56,-36}, -{47,56,-35}, -{47,56,-34}, -{47,56,-33}, -{47,56,-32}, -{47,56,-31}, -{47,56,-30}, -{47,56,-29}, -{47,56,-28}, -{47,56,-27}, -{47,56,-26}, -{47,56,-25}, -{47,56,-24}, -{47,56,-23}, -{47,56,-22}, -{47,56,-21}, -{47,56,-20}, -{47,56,-19}, -{47,56,-18}, -{47,56,-17}, -{47,56,-16}, -{47,56,-15}, -{47,56,-14}, -{47,56,-13}, -{47,56,-12}, -{47,56,-11}, -{47,56,-10}, -{47,56,-9}, -{47,56,-8}, -{47,56,-7}, -{47,56,-6}, -{47,56,-5}, -{47,56,-4}, -{47,56,-3}, -{47,56,-2}, -{47,56,-1}, -{47,56,0}, -{47,56,1}, -{47,56,2}, -{47,56,3}, -{47,56,4}, -{47,56,5}, -{47,56,6}, -{47,56,7}, -{47,56,8}, -{47,56,9}, -{47,56,10}, -{47,56,11}, -{47,56,12}, -{47,56,13}, -{47,56,14}, -{47,56,15}, -{47,56,16}, -{47,56,17}, -{47,56,18}, -{47,56,19}, -{47,56,20}, -{47,56,21}, -{47,56,22}, -{47,56,23}, -{47,56,24}, -{47,56,25}, -{47,56,26}, -{47,56,27}, -{47,56,28}, -{47,56,29}, -{47,56,30}, -{47,56,31}, -{47,56,32}, -{47,56,33}, -{47,56,34}, -{47,56,35}, -{47,56,36}, -{47,56,37}, -{47,56,38}, -{47,56,39}, -{47,56,40}, -{47,56,41}, -{47,56,42}, -{47,56,43}, -{47,56,44}, -{47,56,45}, -{47,56,46}, -{47,56,47}, -{47,56,48}, -{47,56,49}, -{47,56,50}, -{47,56,51}, -{47,56,52}, -{47,56,53}, -{47,56,54}, -{47,56,55}, -{47,56,56}, -{47,56,57}, -{47,56,58}, -{47,57,-83}, -{47,57,-82}, -{47,57,-81}, -{47,57,-80}, -{47,57,-79}, -{47,57,-78}, -{47,57,-77}, -{47,57,-76}, -{47,57,-75}, -{47,57,-74}, -{47,57,-73}, -{47,57,-72}, -{47,57,-71}, -{47,57,-70}, -{47,57,-69}, -{47,57,-68}, -{47,57,-67}, -{47,57,-66}, -{47,57,-65}, -{47,57,-64}, -{47,57,-63}, -{47,57,-62}, -{47,57,-61}, -{47,57,-60}, -{47,57,-59}, -{47,57,-58}, -{47,57,-57}, -{47,57,-56}, -{47,57,-55}, -{47,57,-54}, -{47,57,-53}, -{47,57,-52}, -{47,57,-51}, -{47,57,-50}, -{47,57,-49}, -{47,57,-48}, -{47,57,-47}, -{47,57,-46}, -{47,57,-45}, -{47,57,-44}, -{47,57,-43}, -{47,57,-42}, -{47,57,-41}, -{47,57,-40}, -{47,57,-39}, -{47,57,-38}, -{47,57,-37}, -{47,57,-36}, -{47,57,-35}, -{47,57,-34}, -{47,57,-33}, -{47,57,-32}, -{47,57,-31}, -{47,57,-30}, -{47,57,-29}, -{47,57,-28}, -{47,57,-27}, -{47,57,-26}, -{47,57,-25}, -{47,57,-24}, -{47,57,-23}, -{47,57,-22}, -{47,57,-21}, -{47,57,-20}, -{47,57,-19}, -{47,57,-18}, -{47,57,-17}, -{47,57,-16}, -{47,57,-15}, -{47,57,-14}, -{47,57,-13}, -{47,57,-12}, -{47,57,-11}, -{47,57,-10}, -{47,57,-9}, -{47,57,-8}, -{47,57,-7}, -{47,57,-6}, -{47,57,-5}, -{47,57,-4}, -{47,57,-3}, -{47,57,-2}, -{47,57,-1}, -{47,57,0}, -{47,57,1}, -{47,57,2}, -{47,57,3}, -{47,57,4}, -{47,57,5}, -{47,57,6}, -{47,57,7}, -{47,57,8}, -{47,57,9}, -{47,57,10}, -{47,57,11}, -{47,57,12}, -{47,57,13}, -{47,57,14}, -{47,57,15}, -{47,57,16}, -{47,57,17}, -{47,57,18}, -{47,57,19}, -{47,57,20}, -{47,57,21}, -{47,57,22}, -{47,57,23}, -{47,57,24}, -{47,57,25}, -{47,57,26}, -{47,57,27}, -{47,57,28}, -{47,57,29}, -{47,57,30}, -{47,57,31}, -{47,57,32}, -{47,57,33}, -{47,57,34}, -{47,57,35}, -{47,57,36}, -{47,57,37}, -{47,57,38}, -{47,57,39}, -{47,57,40}, -{47,57,41}, -{47,57,42}, -{47,57,43}, -{47,57,44}, -{47,57,45}, -{47,57,46}, -{47,57,47}, -{47,57,48}, -{47,57,49}, -{47,57,50}, -{47,57,51}, -{47,57,52}, -{47,57,53}, -{47,57,54}, -{47,57,55}, -{47,57,56}, -{47,57,57}, -{47,57,58}, -{47,57,59}, -{47,58,-83}, -{47,58,-82}, -{47,58,-81}, -{47,58,-80}, -{47,58,-79}, -{47,58,-78}, -{47,58,-77}, -{47,58,-76}, -{47,58,-75}, -{47,58,-74}, -{47,58,-73}, -{47,58,-72}, -{47,58,-71}, -{47,58,-70}, -{47,58,-69}, -{47,58,-68}, -{47,58,-67}, -{47,58,-66}, -{47,58,-65}, -{47,58,-64}, -{47,58,-63}, -{47,58,-62}, -{47,58,-61}, -{47,58,-60}, -{47,58,-59}, -{47,58,-58}, -{47,58,-57}, -{47,58,-56}, -{47,58,-55}, -{47,58,-54}, -{47,58,-53}, -{47,58,-52}, -{47,58,-51}, -{47,58,-50}, -{47,58,-49}, -{47,58,-48}, -{47,58,-47}, -{47,58,-46}, -{47,58,-45}, -{47,58,-44}, -{47,58,-43}, -{47,58,-42}, -{47,58,-41}, -{47,58,-40}, -{47,58,-39}, -{47,58,-38}, -{47,58,-37}, -{47,58,-36}, -{47,58,-35}, -{47,58,-34}, -{47,58,-33}, -{47,58,-32}, -{47,58,-31}, -{47,58,-30}, -{47,58,-29}, -{47,58,-28}, -{47,58,-27}, -{47,58,-26}, -{47,58,-25}, -{47,58,-24}, -{47,58,-23}, -{47,58,-22}, -{47,58,-21}, -{47,58,-20}, -{47,58,-19}, -{47,58,-18}, -{47,58,-17}, -{47,58,-16}, -{47,58,-15}, -{47,58,-14}, -{47,58,-13}, -{47,58,-12}, -{47,58,-11}, -{47,58,-10}, -{47,58,-9}, -{47,58,-8}, -{47,58,-7}, -{47,58,-6}, -{47,58,-5}, -{47,58,-4}, -{47,58,-3}, -{47,58,-2}, -{47,58,-1}, -{47,58,0}, -{47,58,1}, -{47,58,2}, -{47,58,3}, -{47,58,4}, -{47,58,5}, -{47,58,6}, -{47,58,7}, -{47,58,8}, -{47,58,9}, -{47,58,10}, -{47,58,11}, -{47,58,12}, -{47,58,13}, -{47,58,14}, -{47,58,15}, -{47,58,16}, -{47,58,17}, -{47,58,18}, -{47,58,19}, -{47,58,20}, -{47,58,21}, -{47,58,22}, -{47,58,23}, -{47,58,24}, -{47,58,25}, -{47,58,26}, -{47,58,27}, -{47,58,28}, -{47,58,29}, -{47,58,30}, -{47,58,31}, -{47,58,32}, -{47,58,33}, -{47,58,34}, -{47,58,35}, -{47,58,36}, -{47,58,37}, -{47,58,38}, -{47,58,39}, -{47,58,40}, -{47,58,41}, -{47,58,42}, -{47,58,43}, -{47,58,44}, -{47,58,45}, -{47,58,46}, -{47,58,47}, -{47,58,48}, -{47,58,49}, -{47,58,50}, -{47,58,51}, -{47,58,52}, -{47,58,53}, -{47,58,54}, -{47,58,55}, -{47,58,56}, -{47,58,57}, -{47,58,58}, -{47,58,59}, -{47,59,-83}, -{47,59,-82}, -{47,59,-81}, -{47,59,-80}, -{47,59,-79}, -{47,59,-78}, -{47,59,-77}, -{47,59,-76}, -{47,59,-75}, -{47,59,-74}, -{47,59,-73}, -{47,59,-72}, -{47,59,-71}, -{47,59,-70}, -{47,59,-69}, -{47,59,-68}, -{47,59,-67}, -{47,59,-66}, -{47,59,-65}, -{47,59,-64}, -{47,59,-63}, -{47,59,-62}, -{47,59,-61}, -{47,59,-60}, -{47,59,-59}, -{47,59,-58}, -{47,59,-57}, -{47,59,-56}, -{47,59,-55}, -{47,59,-54}, -{47,59,-53}, -{47,59,-52}, -{47,59,-51}, -{47,59,-50}, -{47,59,-49}, -{47,59,-48}, -{47,59,-47}, -{47,59,-46}, -{47,59,-45}, -{47,59,-44}, -{47,59,-43}, -{47,59,-42}, -{47,59,-41}, -{47,59,-40}, -{47,59,-39}, -{47,59,-38}, -{47,59,-37}, -{47,59,-36}, -{47,59,-35}, -{47,59,-34}, -{47,59,-33}, -{47,59,-32}, -{47,59,-31}, -{47,59,-30}, -{47,59,-29}, -{47,59,-28}, -{47,59,-27}, -{47,59,-26}, -{47,59,-25}, -{47,59,-24}, -{47,59,-23}, -{47,59,-22}, -{47,59,-21}, -{47,59,-20}, -{47,59,-19}, -{47,59,-18}, -{47,59,-17}, -{47,59,-16}, -{47,59,-15}, -{47,59,-14}, -{47,59,-13}, -{47,59,-12}, -{47,59,-11}, -{47,59,-10}, -{47,59,-9}, -{47,59,-8}, -{47,59,-7}, -{47,59,-6}, -{47,59,-5}, -{47,59,-4}, -{47,59,-3}, -{47,59,-2}, -{47,59,-1}, -{47,59,0}, -{47,59,1}, -{47,59,2}, -{47,59,3}, -{47,59,4}, -{47,59,5}, -{47,59,6}, -{47,59,7}, -{47,59,8}, -{47,59,9}, -{47,59,10}, -{47,59,11}, -{47,59,12}, -{47,59,13}, -{47,59,14}, -{47,59,15}, -{47,59,16}, -{47,59,17}, -{47,59,18}, -{47,59,19}, -{47,59,20}, -{47,59,21}, -{47,59,22}, -{47,59,23}, -{47,59,24}, -{47,59,25}, -{47,59,26}, -{47,59,27}, -{47,59,28}, -{47,59,29}, -{47,59,30}, -{47,59,31}, -{47,59,32}, -{47,59,33}, -{47,59,34}, -{47,59,35}, -{47,59,36}, -{47,59,37}, -{47,59,38}, -{47,59,39}, -{47,59,40}, -{47,59,41}, -{47,59,42}, -{47,59,43}, -{47,59,44}, -{47,59,45}, -{47,59,46}, -{47,59,47}, -{47,59,48}, -{47,59,49}, -{47,59,50}, -{47,59,51}, -{47,59,52}, -{47,59,53}, -{47,59,54}, -{47,59,55}, -{47,59,56}, -{47,59,57}, -{47,59,58}, -{47,59,59}, -{47,60,-83}, -{47,60,-82}, -{47,60,-81}, -{47,60,-80}, -{47,60,-79}, -{47,60,-78}, -{47,60,-77}, -{47,60,-76}, -{47,60,-75}, -{47,60,-74}, -{47,60,-73}, -{47,60,-72}, -{47,60,-71}, -{47,60,-70}, -{47,60,-69}, -{47,60,-68}, -{47,60,-67}, -{47,60,-66}, -{47,60,-65}, -{47,60,-64}, -{47,60,-63}, -{47,60,-62}, -{47,60,-61}, -{47,60,-60}, -{47,60,-59}, -{47,60,-58}, -{47,60,-57}, -{47,60,-56}, -{47,60,-55}, -{47,60,-54}, -{47,60,-53}, -{47,60,-52}, -{47,60,-51}, -{47,60,-50}, -{47,60,-49}, -{47,60,-48}, -{47,60,-47}, -{47,60,-46}, -{47,60,-45}, -{47,60,-44}, -{47,60,-43}, -{47,60,-42}, -{47,60,-41}, -{47,60,-40}, -{47,60,-39}, -{47,60,-38}, -{47,60,-37}, -{47,60,-36}, -{47,60,-35}, -{47,60,-34}, -{47,60,-33}, -{47,60,-32}, -{47,60,-31}, -{47,60,-30}, -{47,60,-29}, -{47,60,-28}, -{47,60,-27}, -{47,60,-26}, -{47,60,-25}, -{47,60,-24}, -{47,60,-23}, -{47,60,-22}, -{47,60,-21}, -{47,60,-20}, -{47,60,-19}, -{47,60,-18}, -{47,60,-17}, -{47,60,-16}, -{47,60,-15}, -{47,60,-14}, -{47,60,-13}, -{47,60,-12}, -{47,60,-11}, -{47,60,-10}, -{47,60,-9}, -{47,60,-8}, -{47,60,-7}, -{47,60,-6}, -{47,60,-5}, -{47,60,-4}, -{47,60,-3}, -{47,60,-2}, -{47,60,-1}, -{47,60,0}, -{47,60,1}, -{47,60,2}, -{47,60,3}, -{47,60,4}, -{47,60,5}, -{47,60,6}, -{47,60,7}, -{47,60,8}, -{47,60,9}, -{47,60,10}, -{47,60,11}, -{47,60,12}, -{47,60,13}, -{47,60,14}, -{47,60,15}, -{47,60,16}, -{47,60,17}, -{47,60,18}, -{47,60,19}, -{47,60,20}, -{47,60,21}, -{47,60,22}, -{47,60,23}, -{47,60,24}, -{47,60,25}, -{47,60,26}, -{47,60,27}, -{47,60,28}, -{47,60,29}, -{47,60,30}, -{47,60,31}, -{47,60,32}, -{47,60,33}, -{47,60,34}, -{47,60,35}, -{47,60,36}, -{47,60,37}, -{47,60,38}, -{47,60,39}, -{47,60,40}, -{47,60,41}, -{47,60,42}, -{47,60,43}, -{47,60,44}, -{47,60,45}, -{47,60,46}, -{47,60,47}, -{47,60,48}, -{47,60,49}, -{47,60,50}, -{47,60,51}, -{47,60,52}, -{47,60,53}, -{47,60,54}, -{47,60,55}, -{47,60,56}, -{47,60,57}, -{47,60,58}, -{47,60,59}, -{47,61,-83}, -{47,61,-82}, -{47,61,-81}, -{47,61,-80}, -{47,61,-79}, -{47,61,-78}, -{47,61,-77}, -{47,61,-76}, -{47,61,-75}, -{47,61,-74}, -{47,61,-73}, -{47,61,-72}, -{47,61,-71}, -{47,61,-70}, -{47,61,-69}, -{47,61,-68}, -{47,61,-67}, -{47,61,-66}, -{47,61,-65}, -{47,61,-64}, -{47,61,-63}, -{47,61,-62}, -{47,61,-61}, -{47,61,-60}, -{47,61,-59}, -{47,61,-58}, -{47,61,-57}, -{47,61,-56}, -{47,61,-55}, -{47,61,-54}, -{47,61,-53}, -{47,61,-52}, -{47,61,-51}, -{47,61,-50}, -{47,61,-49}, -{47,61,-48}, -{47,61,-47}, -{47,61,-46}, -{47,61,-45}, -{47,61,-44}, -{47,61,-43}, -{47,61,-42}, -{47,61,-41}, -{47,61,-40}, -{47,61,-39}, -{47,61,-38}, -{47,61,-37}, -{47,61,-36}, -{47,61,-35}, -{47,61,-34}, -{47,61,-33}, -{47,61,-32}, -{47,61,-31}, -{47,61,-30}, -{47,61,-29}, -{47,61,-28}, -{47,61,-27}, -{47,61,-26}, -{47,61,-25}, -{47,61,-24}, -{47,61,-23}, -{47,61,-22}, -{47,61,-21}, -{47,61,-20}, -{47,61,-19}, -{47,61,-18}, -{47,61,-17}, -{47,61,-16}, -{47,61,-15}, -{47,61,-14}, -{47,61,-13}, -{47,61,-12}, -{47,61,-11}, -{47,61,-10}, -{47,61,-9}, -{47,61,-8}, -{47,61,-7}, -{47,61,-6}, -{47,61,-5}, -{47,61,-4}, -{47,61,-3}, -{47,61,-2}, -{47,61,-1}, -{47,61,0}, -{47,61,1}, -{47,61,2}, -{47,61,3}, -{47,61,4}, -{47,61,5}, -{47,61,6}, -{47,61,7}, -{47,61,8}, -{47,61,9}, -{47,61,10}, -{47,61,11}, -{47,61,12}, -{47,61,13}, -{47,61,14}, -{47,61,15}, -{47,61,16}, -{47,61,17}, -{47,61,18}, -{47,61,19}, -{47,61,20}, -{47,61,21}, -{47,61,22}, -{47,61,23}, -{47,61,24}, -{47,61,25}, -{47,61,26}, -{47,61,27}, -{47,61,28}, -{47,61,29}, -{47,61,30}, -{47,61,31}, -{47,61,32}, -{47,61,33}, -{47,61,34}, -{47,61,35}, -{47,61,36}, -{47,61,37}, -{47,61,38}, -{47,61,39}, -{47,61,40}, -{47,61,41}, -{47,61,42}, -{47,61,43}, -{47,61,44}, -{47,61,45}, -{47,61,46}, -{47,61,47}, -{47,61,48}, -{47,61,49}, -{47,61,50}, -{47,61,51}, -{47,61,52}, -{47,61,53}, -{47,61,54}, -{47,61,55}, -{47,61,56}, -{47,61,57}, -{47,61,58}, -{47,61,59}, -{47,62,-83}, -{47,62,-82}, -{47,62,-81}, -{47,62,-80}, -{47,62,-79}, -{47,62,-78}, -{47,62,-77}, -{47,62,-76}, -{47,62,-75}, -{47,62,-74}, -{47,62,-73}, -{47,62,-72}, -{47,62,-71}, -{47,62,-70}, -{47,62,-69}, -{47,62,-68}, -{47,62,-67}, -{47,62,-66}, -{47,62,-65}, -{47,62,-64}, -{47,62,-63}, -{47,62,-62}, -{47,62,-61}, -{47,62,-60}, -{47,62,-59}, -{47,62,-58}, -{47,62,-57}, -{47,62,-56}, -{47,62,-55}, -{47,62,-54}, -{47,62,-53}, -{47,62,-52}, -{47,62,-51}, -{47,62,-50}, -{47,62,-49}, -{47,62,-48}, -{47,62,-47}, -{47,62,-46}, -{47,62,-45}, -{47,62,-44}, -{47,62,-43}, -{47,62,-42}, -{47,62,-41}, -{47,62,-40}, -{47,62,-39}, -{47,62,-38}, -{47,62,-37}, -{47,62,-36}, -{47,62,-35}, -{47,62,-34}, -{47,62,-33}, -{47,62,-32}, -{47,62,-31}, -{47,62,-30}, -{47,62,-29}, -{47,62,-28}, -{47,62,-27}, -{47,62,-26}, -{47,62,-25}, -{47,62,-24}, -{47,62,-23}, -{47,62,-22}, -{47,62,-21}, -{47,62,-20}, -{47,62,-19}, -{47,62,-18}, -{47,62,-17}, -{47,62,-16}, -{47,62,-15}, -{47,62,-14}, -{47,62,-13}, -{47,62,-12}, -{47,62,-11}, -{47,62,-10}, -{47,62,-9}, -{47,62,-8}, -{47,62,-7}, -{47,62,-6}, -{47,62,-5}, -{47,62,-4}, -{47,62,-3}, -{47,62,-2}, -{47,62,-1}, -{47,62,0}, -{47,62,1}, -{47,62,2}, -{47,62,3}, -{47,62,4}, -{47,62,5}, -{47,62,6}, -{47,62,7}, -{47,62,8}, -{47,62,9}, -{47,62,10}, -{47,62,11}, -{47,62,12}, -{47,62,13}, -{47,62,14}, -{47,62,15}, -{47,62,16}, -{47,62,17}, -{47,62,18}, -{47,62,19}, -{47,62,20}, -{47,62,21}, -{47,62,22}, -{47,62,23}, -{47,62,24}, -{47,62,25}, -{47,62,26}, -{47,62,27}, -{47,62,28}, -{47,62,29}, -{47,62,30}, -{47,62,31}, -{47,62,32}, -{47,62,33}, -{47,62,34}, -{47,62,35}, -{47,62,36}, -{47,62,37}, -{47,62,38}, -{47,62,39}, -{47,62,40}, -{47,62,41}, -{47,62,42}, -{47,62,43}, -{47,62,44}, -{47,62,45}, -{47,62,46}, -{47,62,47}, -{47,62,48}, -{47,62,49}, -{47,62,50}, -{47,62,51}, -{47,62,52}, -{47,62,53}, -{47,62,54}, -{47,62,55}, -{47,62,56}, -{47,62,57}, -{47,62,58}, -{47,62,59}, -{47,63,-83}, -{47,63,-82}, -{47,63,-81}, -{47,63,-80}, -{47,63,-79}, -{47,63,-78}, -{47,63,-77}, -{47,63,-76}, -{47,63,-75}, -{47,63,-74}, -{47,63,-73}, -{47,63,-72}, -{47,63,-71}, -{47,63,-70}, -{47,63,-69}, -{47,63,-68}, -{47,63,-67}, -{47,63,-66}, -{47,63,-65}, -{47,63,-64}, -{47,63,-63}, -{47,63,-62}, -{47,63,-61}, -{47,63,-60}, -{47,63,-59}, -{47,63,-58}, -{47,63,-57}, -{47,63,-56}, -{47,63,-55}, -{47,63,-54}, -{47,63,-53}, -{47,63,-52}, -{47,63,-51}, -{47,63,-50}, -{47,63,-49}, -{47,63,-48}, -{47,63,-47}, -{47,63,-46}, -{47,63,-45}, -{47,63,-44}, -{47,63,-43}, -{47,63,-42}, -{47,63,-41}, -{47,63,-40}, -{47,63,-39}, -{47,63,-38}, -{47,63,-37}, -{47,63,-36}, -{47,63,-35}, -{47,63,-34}, -{47,63,-33}, -{47,63,-32}, -{47,63,-31}, -{47,63,-30}, -{47,63,-29}, -{47,63,-28}, -{47,63,-27}, -{47,63,-26}, -{47,63,-25}, -{47,63,-24}, -{47,63,-23}, -{47,63,-22}, -{47,63,-21}, -{47,63,-20}, -{47,63,-19}, -{47,63,-18}, -{47,63,-17}, -{47,63,-16}, -{47,63,-15}, -{47,63,-14}, -{47,63,-13}, -{47,63,-12}, -{47,63,-11}, -{47,63,-10}, -{47,63,-9}, -{47,63,-8}, -{47,63,-7}, -{47,63,-6}, -{47,63,-5}, -{47,63,-4}, -{47,63,-3}, -{47,63,-2}, -{47,63,-1}, -{47,63,0}, -{47,63,1}, -{47,63,2}, -{47,63,3}, -{47,63,4}, -{47,63,5}, -{47,63,6}, -{47,63,7}, -{47,63,8}, -{47,63,9}, -{47,63,10}, -{47,63,11}, -{47,63,12}, -{47,63,13}, -{47,63,14}, -{47,63,15}, -{47,63,16}, -{47,63,17}, -{47,63,18}, -{47,63,19}, -{47,63,20}, -{47,63,21}, -{47,63,22}, -{47,63,23}, -{47,63,24}, -{47,63,25}, -{47,63,26}, -{47,63,27}, -{47,63,28}, -{47,63,29}, -{47,63,30}, -{47,63,31}, -{47,63,32}, -{47,63,33}, -{47,63,34}, -{47,63,35}, -{47,63,36}, -{47,63,37}, -{47,63,38}, -{47,63,39}, -{47,63,40}, -{47,63,41}, -{47,63,42}, -{47,63,43}, -{47,63,44}, -{47,63,45}, -{47,63,46}, -{47,63,47}, -{47,63,48}, -{47,63,49}, -{47,63,50}, -{47,63,51}, -{47,63,52}, -{47,63,53}, -{47,63,54}, -{47,63,55}, -{47,63,56}, -{47,63,57}, -{47,63,58}, -{47,63,59}, -{47,64,-83}, -{47,64,-82}, -{47,64,-81}, -{47,64,-80}, -{47,64,-79}, -{47,64,-78}, -{47,64,-77}, -{47,64,-76}, -{47,64,-75}, -{47,64,-74}, -{47,64,-73}, -{47,64,-72}, -{47,64,-71}, -{47,64,-70}, -{47,64,-69}, -{47,64,-68}, -{47,64,-67}, -{47,64,-66}, -{47,64,-65}, -{47,64,-64}, -{47,64,-63}, -{47,64,-62}, -{47,64,-61}, -{47,64,-60}, -{47,64,-59}, -{47,64,-58}, -{47,64,-57}, -{47,64,-56}, -{47,64,-55}, -{47,64,-54}, -{47,64,-53}, -{47,64,-52}, -{47,64,-51}, -{47,64,-50}, -{47,64,-49}, -{47,64,-48}, -{47,64,-47}, -{47,64,-46}, -{47,64,-45}, -{47,64,-44}, -{47,64,-43}, -{47,64,-42}, -{47,64,-41}, -{47,64,-40}, -{47,64,-39}, -{47,64,-38}, -{47,64,-37}, -{47,64,-36}, -{47,64,-35}, -{47,64,-34}, -{47,64,-33}, -{47,64,-32}, -{47,64,-31}, -{47,64,-30}, -{47,64,-29}, -{47,64,-28}, -{47,64,-27}, -{47,64,-26}, -{47,64,-25}, -{47,64,-24}, -{47,64,-23}, -{47,64,-22}, -{47,64,-21}, -{47,64,-20}, -{47,64,-19}, -{47,64,-18}, -{47,64,-17}, -{47,64,-16}, -{47,64,-15}, -{47,64,-14}, -{47,64,-13}, -{47,64,-12}, -{47,64,-11}, -{47,64,-10}, -{47,64,-9}, -{47,64,-8}, -{47,64,-7}, -{47,64,-6}, -{47,64,-5}, -{47,64,-4}, -{47,64,-3}, -{47,64,-2}, -{47,64,-1}, -{47,64,0}, -{47,64,1}, -{47,64,2}, -{47,64,3}, -{47,64,4}, -{47,64,5}, -{47,64,6}, -{47,64,7}, -{47,64,8}, -{47,64,9}, -{47,64,10}, -{47,64,11}, -{47,64,12}, -{47,64,13}, -{47,64,14}, -{47,64,15}, -{47,64,16}, -{47,64,17}, -{47,64,18}, -{47,64,19}, -{47,64,20}, -{47,64,21}, -{47,64,22}, -{47,64,23}, -{47,64,24}, -{47,64,25}, -{47,64,26}, -{47,64,27}, -{47,64,28}, -{47,64,29}, -{47,64,30}, -{47,64,31}, -{47,64,32}, -{47,64,33}, -{47,64,34}, -{47,64,35}, -{47,64,36}, -{47,64,37}, -{47,64,38}, -{47,64,39}, -{47,64,40}, -{47,64,41}, -{47,64,42}, -{47,64,43}, -{47,64,44}, -{47,64,45}, -{47,64,46}, -{47,64,47}, -{47,64,48}, -{47,64,49}, -{47,64,50}, -{47,64,51}, -{47,64,52}, -{47,64,53}, -{47,64,54}, -{47,64,55}, -{47,64,56}, -{47,64,57}, -{47,64,58}, -{47,64,59}, -{47,64,60}, -{47,65,-83}, -{47,65,-82}, -{47,65,-81}, -{47,65,-80}, -{47,65,-79}, -{47,65,-78}, -{47,65,-77}, -{47,65,-76}, -{47,65,-75}, -{47,65,-74}, -{47,65,-73}, -{47,65,-72}, -{47,65,-71}, -{47,65,-70}, -{47,65,-69}, -{47,65,-68}, -{47,65,-67}, -{47,65,-66}, -{47,65,-65}, -{47,65,-64}, -{47,65,-63}, -{47,65,-62}, -{47,65,-61}, -{47,65,-60}, -{47,65,-59}, -{47,65,-58}, -{47,65,-57}, -{47,65,-56}, -{47,65,-55}, -{47,65,-54}, -{47,65,-53}, -{47,65,-52}, -{47,65,-51}, -{47,65,-50}, -{47,65,-49}, -{47,65,-48}, -{47,65,-47}, -{47,65,-46}, -{47,65,-45}, -{47,65,-44}, -{47,65,-43}, -{47,65,-42}, -{47,65,-41}, -{47,65,-40}, -{47,65,-39}, -{47,65,-38}, -{47,65,-37}, -{47,65,-36}, -{47,65,-35}, -{47,65,-34}, -{47,65,-33}, -{47,65,-32}, -{47,65,-31}, -{47,65,-30}, -{47,65,-29}, -{47,65,-28}, -{47,65,-27}, -{47,65,-26}, -{47,65,-25}, -{47,65,-24}, -{47,65,-23}, -{47,65,-22}, -{47,65,-21}, -{47,65,-20}, -{47,65,-19}, -{47,65,-18}, -{47,65,-17}, -{47,65,-16}, -{47,65,-15}, -{47,65,-14}, -{47,65,-13}, -{47,65,-12}, -{47,65,-11}, -{47,65,-10}, -{47,65,-9}, -{47,65,-8}, -{47,65,-7}, -{47,65,-6}, -{47,65,-5}, -{47,65,-4}, -{47,65,-3}, -{47,65,-2}, -{47,65,-1}, -{47,65,0}, -{47,65,1}, -{47,65,2}, -{47,65,3}, -{47,65,4}, -{47,65,5}, -{47,65,6}, -{47,65,7}, -{47,65,8}, -{47,65,9}, -{47,65,10}, -{47,65,11}, -{47,65,12}, -{47,65,13}, -{47,65,14}, -{47,65,15}, -{47,65,16}, -{47,65,17}, -{47,65,18}, -{47,65,19}, -{47,65,20}, -{47,65,21}, -{47,65,22}, -{47,65,23}, -{47,65,24}, -{47,65,25}, -{47,65,26}, -{47,65,27}, -{47,65,28}, -{47,65,29}, -{47,65,30}, -{47,65,31}, -{47,65,32}, -{47,65,33}, -{47,65,34}, -{47,65,35}, -{47,65,36}, -{47,65,37}, -{47,65,38}, -{47,65,39}, -{47,65,40}, -{47,65,41}, -{47,65,42}, -{47,65,43}, -{47,65,44}, -{47,65,45}, -{47,65,46}, -{47,65,47}, -{47,65,48}, -{47,65,49}, -{47,65,50}, -{47,65,51}, -{47,65,52}, -{47,65,53}, -{47,65,54}, -{47,65,55}, -{47,65,56}, -{47,65,57}, -{47,65,58}, -{47,65,59}, -{47,65,60}, -{47,66,-83}, -{47,66,-82}, -{47,66,-81}, -{47,66,-80}, -{47,66,-79}, -{47,66,-78}, -{47,66,-77}, -{47,66,-76}, -{47,66,-75}, -{47,66,-74}, -{47,66,-73}, -{47,66,-72}, -{47,66,-71}, -{47,66,-70}, -{47,66,-69}, -{47,66,-68}, -{47,66,-67}, -{47,66,-66}, -{47,66,-65}, -{47,66,-64}, -{47,66,-63}, -{47,66,-62}, -{47,66,-61}, -{47,66,-60}, -{47,66,-59}, -{47,66,-58}, -{47,66,-57}, -{47,66,-56}, -{47,66,-55}, -{47,66,-54}, -{47,66,-53}, -{47,66,-52}, -{47,66,-51}, -{47,66,-50}, -{47,66,-49}, -{47,66,-48}, -{47,66,-47}, -{47,66,-46}, -{47,66,-45}, -{47,66,-44}, -{47,66,-43}, -{47,66,-42}, -{47,66,-41}, -{47,66,-40}, -{47,66,-39}, -{47,66,-38}, -{47,66,-37}, -{47,66,-36}, -{47,66,-35}, -{47,66,-34}, -{47,66,-33}, -{47,66,-32}, -{47,66,-31}, -{47,66,-30}, -{47,66,-29}, -{47,66,-28}, -{47,66,-27}, -{47,66,-26}, -{47,66,-25}, -{47,66,-24}, -{47,66,-23}, -{47,66,-22}, -{47,66,-21}, -{47,66,-20}, -{47,66,-19}, -{47,66,-18}, -{47,66,-17}, -{47,66,-16}, -{47,66,-15}, -{47,66,-14}, -{47,66,-13}, -{47,66,-12}, -{47,66,-11}, -{47,66,-10}, -{47,66,-9}, -{47,66,-8}, -{47,66,-7}, -{47,66,-6}, -{47,66,-5}, -{47,66,-4}, -{47,66,-3}, -{47,66,-2}, -{47,66,-1}, -{47,66,0}, -{47,66,1}, -{47,66,2}, -{47,66,3}, -{47,66,4}, -{47,66,5}, -{47,66,6}, -{47,66,7}, -{47,66,8}, -{47,66,9}, -{47,66,10}, -{47,66,11}, -{47,66,12}, -{47,66,13}, -{47,66,14}, -{47,66,15}, -{47,66,16}, -{47,66,17}, -{47,66,18}, -{47,66,19}, -{47,66,20}, -{47,66,21}, -{47,66,22}, -{47,66,23}, -{47,66,24}, -{47,66,25}, -{47,66,26}, -{47,66,27}, -{47,66,28}, -{47,66,29}, -{47,66,30}, -{47,66,31}, -{47,66,32}, -{47,66,33}, -{47,66,34}, -{47,66,35}, -{47,66,36}, -{47,66,37}, -{47,66,38}, -{47,66,39}, -{47,66,40}, -{47,66,41}, -{47,66,42}, -{47,66,43}, -{47,66,44}, -{47,66,45}, -{47,66,46}, -{47,66,47}, -{47,66,48}, -{47,66,49}, -{47,66,50}, -{47,66,51}, -{47,66,52}, -{47,66,53}, -{47,66,54}, -{47,66,55}, -{47,66,56}, -{47,66,57}, -{47,66,58}, -{47,66,59}, -{47,66,60}, -{47,67,-83}, -{47,67,-82}, -{47,67,-81}, -{47,67,-80}, -{47,67,-79}, -{47,67,-78}, -{47,67,-77}, -{47,67,-76}, -{47,67,-75}, -{47,67,-74}, -{47,67,-73}, -{47,67,-72}, -{47,67,-71}, -{47,67,-70}, -{47,67,-69}, -{47,67,-68}, -{47,67,-67}, -{47,67,-66}, -{47,67,-65}, -{47,67,-64}, -{47,67,-63}, -{47,67,-62}, -{47,67,-61}, -{47,67,-60}, -{47,67,-59}, -{47,67,-58}, -{47,67,-57}, -{47,67,-56}, -{47,67,-55}, -{47,67,-54}, -{47,67,-53}, -{47,67,-52}, -{47,67,-51}, -{47,67,-50}, -{47,67,-49}, -{47,67,-48}, -{47,67,-47}, -{47,67,-46}, -{47,67,-45}, -{47,67,-44}, -{47,67,-43}, -{47,67,-42}, -{47,67,-41}, -{47,67,-40}, -{47,67,-39}, -{47,67,-38}, -{47,67,-37}, -{47,67,-36}, -{47,67,-35}, -{47,67,-34}, -{47,67,-33}, -{47,67,-32}, -{47,67,-31}, -{47,67,-30}, -{47,67,-29}, -{47,67,-28}, -{47,67,-27}, -{47,67,-26}, -{47,67,-25}, -{47,67,-24}, -{47,67,-23}, -{47,67,-22}, -{47,67,-21}, -{47,67,-20}, -{47,67,-19}, -{47,67,-18}, -{47,67,-17}, -{47,67,-16}, -{47,67,-15}, -{47,67,-14}, -{47,67,-13}, -{47,67,-12}, -{47,67,-11}, -{47,67,-10}, -{47,67,-9}, -{47,67,-8}, -{47,67,-7}, -{47,67,-6}, -{47,67,-5}, -{47,67,-4}, -{47,67,-3}, -{47,67,-2}, -{47,67,-1}, -{47,67,0}, -{47,67,1}, -{47,67,2}, -{47,67,3}, -{47,67,4}, -{47,67,5}, -{47,67,6}, -{47,67,7}, -{47,67,8}, -{47,67,9}, -{47,67,10}, -{47,67,11}, -{47,67,12}, -{47,67,13}, -{47,67,14}, -{47,67,15}, -{47,67,16}, -{47,67,17}, -{47,67,18}, -{47,67,19}, -{47,67,20}, -{47,67,21}, -{47,67,22}, -{47,67,23}, -{47,67,24}, -{47,67,25}, -{47,67,26}, -{47,67,27}, -{47,67,28}, -{47,67,29}, -{47,67,30}, -{47,67,31}, -{47,67,32}, -{47,67,33}, -{47,67,34}, -{47,67,35}, -{47,67,36}, -{47,67,37}, -{47,67,38}, -{47,67,39}, -{47,67,40}, -{47,67,41}, -{47,67,42}, -{47,67,43}, -{47,67,44}, -{47,67,45}, -{47,67,46}, -{47,67,47}, -{47,67,48}, -{47,67,49}, -{47,67,50}, -{47,67,51}, -{47,67,52}, -{47,67,53}, -{47,67,54}, -{47,67,55}, -{47,67,56}, -{47,67,57}, -{47,67,58}, -{47,67,59}, -{47,67,60}, -{47,68,-83}, -{47,68,-82}, -{47,68,-81}, -{47,68,-80}, -{47,68,-79}, -{47,68,-78}, -{47,68,-77}, -{47,68,-76}, -{47,68,-75}, -{47,68,-74}, -{47,68,-73}, -{47,68,-72}, -{47,68,-71}, -{47,68,-70}, -{47,68,-69}, -{47,68,-68}, -{47,68,-67}, -{47,68,-66}, -{47,68,-65}, -{47,68,-64}, -{47,68,-63}, -{47,68,-62}, -{47,68,-61}, -{47,68,-60}, -{47,68,-59}, -{47,68,-58}, -{47,68,-57}, -{47,68,-56}, -{47,68,-55}, -{47,68,-54}, -{47,68,-53}, -{47,68,-52}, -{47,68,-51}, -{47,68,-50}, -{47,68,-49}, -{47,68,-48}, -{47,68,-47}, -{47,68,-46}, -{47,68,-45}, -{47,68,-44}, -{47,68,-43}, -{47,68,-42}, -{47,68,-41}, -{47,68,-40}, -{47,68,-39}, -{47,68,-38}, -{47,68,-37}, -{47,68,-36}, -{47,68,-35}, -{47,68,-34}, -{47,68,-33}, -{47,68,-32}, -{47,68,-31}, -{47,68,-30}, -{47,68,-29}, -{47,68,-28}, -{47,68,-27}, -{47,68,-26}, -{47,68,-25}, -{47,68,-24}, -{47,68,-23}, -{47,68,-22}, -{47,68,-21}, -{47,68,-20}, -{47,68,-19}, -{47,68,-18}, -{47,68,-17}, -{47,68,-16}, -{47,68,-15}, -{47,68,-14}, -{47,68,-13}, -{47,68,-12}, -{47,68,-11}, -{47,68,-10}, -{47,68,-9}, -{47,68,-8}, -{47,68,-7}, -{47,68,-6}, -{47,68,-5}, -{47,68,-4}, -{47,68,-3}, -{47,68,-2}, -{47,68,-1}, -{47,68,0}, -{47,68,1}, -{47,68,2}, -{47,68,3}, -{47,68,4}, -{47,68,5}, -{47,68,6}, -{47,68,7}, -{47,68,8}, -{47,68,9}, -{47,68,10}, -{47,68,11}, -{47,68,12}, -{47,68,13}, -{47,68,14}, -{47,68,15}, -{47,68,16}, -{47,68,17}, -{47,68,18}, -{47,68,19}, -{47,68,20}, -{47,68,21}, -{47,68,22}, -{47,68,23}, -{47,68,24}, -{47,68,25}, -{47,68,26}, -{47,68,27}, -{47,68,28}, -{47,68,29}, -{47,68,30}, -{47,68,31}, -{47,68,32}, -{47,68,33}, -{47,68,34}, -{47,68,35}, -{47,68,36}, -{47,68,37}, -{47,68,38}, -{47,68,39}, -{47,68,40}, -{47,68,41}, -{47,68,42}, -{47,68,43}, -{47,68,44}, -{47,68,45}, -{47,68,46}, -{47,68,47}, -{47,68,48}, -{47,68,49}, -{47,68,50}, -{47,68,51}, -{47,68,52}, -{47,68,53}, -{47,68,54}, -{47,68,55}, -{47,68,56}, -{47,68,57}, -{47,68,58}, -{47,68,59}, -{47,68,60}, -{47,69,-83}, -{47,69,-82}, -{47,69,-81}, -{47,69,-80}, -{47,69,-79}, -{47,69,-78}, -{47,69,-77}, -{47,69,-76}, -{47,69,-75}, -{47,69,-74}, -{47,69,-73}, -{47,69,-72}, -{47,69,-71}, -{47,69,-70}, -{47,69,-69}, -{47,69,-68}, -{47,69,-67}, -{47,69,-66}, -{47,69,-65}, -{47,69,-64}, -{47,69,-63}, -{47,69,-62}, -{47,69,-61}, -{47,69,-60}, -{47,69,-59}, -{47,69,-58}, -{47,69,-57}, -{47,69,-56}, -{47,69,-55}, -{47,69,-54}, -{47,69,-53}, -{47,69,-52}, -{47,69,-51}, -{47,69,-50}, -{47,69,-49}, -{47,69,-48}, -{47,69,-47}, -{47,69,-46}, -{47,69,-45}, -{47,69,-44}, -{47,69,-43}, -{47,69,-42}, -{47,69,-41}, -{47,69,-40}, -{47,69,-39}, -{47,69,-38}, -{47,69,-37}, -{47,69,-36}, -{47,69,-35}, -{47,69,-34}, -{47,69,-33}, -{47,69,-32}, -{47,69,-31}, -{47,69,-30}, -{47,69,-29}, -{47,69,-28}, -{47,69,-27}, -{47,69,-26}, -{47,69,-25}, -{47,69,-24}, -{47,69,-23}, -{47,69,-22}, -{47,69,-21}, -{47,69,-20}, -{47,69,-19}, -{47,69,-18}, -{47,69,-17}, -{47,69,-16}, -{47,69,-15}, -{47,69,-14}, -{47,69,-13}, -{47,69,-12}, -{47,69,-11}, -{47,69,-10}, -{47,69,-9}, -{47,69,-8}, -{47,69,-7}, -{47,69,-6}, -{47,69,-5}, -{47,69,-4}, -{47,69,-3}, -{47,69,-2}, -{47,69,-1}, -{47,69,0}, -{47,69,1}, -{47,69,2}, -{47,69,3}, -{47,69,4}, -{47,69,5}, -{47,69,6}, -{47,69,7}, -{47,69,8}, -{47,69,9}, -{47,69,10}, -{47,69,11}, -{47,69,12}, -{47,69,13}, -{47,69,14}, -{47,69,15}, -{47,69,16}, -{47,69,17}, -{47,69,18}, -{47,69,19}, -{47,69,20}, -{47,69,21}, -{47,69,22}, -{47,69,23}, -{47,69,24}, -{47,69,25}, -{47,69,26}, -{47,69,27}, -{47,69,28}, -{47,69,29}, -{47,69,30}, -{47,69,31}, -{47,69,32}, -{47,69,33}, -{47,69,34}, -{47,69,35}, -{47,69,36}, -{47,69,37}, -{47,69,38}, -{47,69,39}, -{47,69,40}, -{47,69,41}, -{47,69,42}, -{47,69,43}, -{47,69,44}, -{47,69,45}, -{47,69,46}, -{47,69,47}, -{47,69,48}, -{47,69,49}, -{47,69,50}, -{47,69,51}, -{47,69,52}, -{47,69,53}, -{47,69,54}, -{47,69,55}, -{47,69,56}, -{47,69,57}, -{47,69,58}, -{47,69,59}, -{47,69,60}, -{47,70,-83}, -{47,70,-82}, -{47,70,-81}, -{47,70,-80}, -{47,70,-79}, -{47,70,-78}, -{47,70,-77}, -{47,70,-76}, -{47,70,-75}, -{47,70,-74}, -{47,70,-73}, -{47,70,-72}, -{47,70,-71}, -{47,70,-70}, -{47,70,-69}, -{47,70,-68}, -{47,70,-67}, -{47,70,-66}, -{47,70,-65}, -{47,70,-64}, -{47,70,-63}, -{47,70,-62}, -{47,70,-61}, -{47,70,-60}, -{47,70,-59}, -{47,70,-58}, -{47,70,-57}, -{47,70,-56}, -{47,70,-55}, -{47,70,-54}, -{47,70,-53}, -{47,70,-52}, -{47,70,-51}, -{47,70,-50}, -{47,70,-49}, -{47,70,-48}, -{47,70,-47}, -{47,70,-46}, -{47,70,-45}, -{47,70,-44}, -{47,70,-43}, -{47,70,-42}, -{47,70,-41}, -{47,70,-40}, -{47,70,-39}, -{47,70,-38}, -{47,70,-37}, -{47,70,-36}, -{47,70,-35}, -{47,70,-34}, -{47,70,-33}, -{47,70,-32}, -{47,70,-31}, -{47,70,-30}, -{47,70,-29}, -{47,70,-28}, -{47,70,-27}, -{47,70,-26}, -{47,70,-25}, -{47,70,-24}, -{47,70,-23}, -{47,70,-22}, -{47,70,-21}, -{47,70,-20}, -{47,70,-19}, -{47,70,-18}, -{47,70,-17}, -{47,70,-16}, -{47,70,-15}, -{47,70,-14}, -{47,70,-13}, -{47,70,-12}, -{47,70,-11}, -{47,70,-10}, -{47,70,-9}, -{47,70,-8}, -{47,70,-7}, -{47,70,-6}, -{47,70,-5}, -{47,70,-4}, -{47,70,-3}, -{47,70,-2}, -{47,70,-1}, -{47,70,0}, -{47,70,1}, -{47,70,2}, -{47,70,3}, -{47,70,4}, -{47,70,5}, -{47,70,6}, -{47,70,7}, -{47,70,8}, -{47,70,9}, -{47,70,10}, -{47,70,11}, -{47,70,12}, -{47,70,13}, -{47,70,14}, -{47,70,15}, -{47,70,16}, -{47,70,17}, -{47,70,18}, -{47,70,19}, -{47,70,20}, -{47,70,21}, -{47,70,22}, -{47,70,23}, -{47,70,24}, -{47,70,25}, -{47,70,26}, -{47,70,27}, -{47,70,28}, -{47,70,29}, -{47,70,30}, -{47,70,31}, -{47,70,32}, -{47,70,33}, -{47,70,34}, -{47,70,35}, -{47,70,36}, -{47,70,37}, -{47,70,38}, -{47,70,39}, -{47,70,40}, -{47,70,41}, -{47,70,42}, -{47,70,43}, -{47,70,44}, -{47,70,45}, -{47,70,46}, -{47,70,47}, -{47,70,48}, -{47,70,49}, -{47,70,50}, -{47,70,51}, -{47,70,52}, -{47,70,53}, -{47,70,54}, -{47,70,55}, -{47,70,56}, -{47,70,57}, -{47,70,58}, -{47,70,59}, -{47,70,60}, -{47,71,-83}, -{47,71,-82}, -{47,71,-81}, -{47,71,-80}, -{47,71,-79}, -{47,71,-78}, -{47,71,-77}, -{47,71,-76}, -{47,71,-75}, -{47,71,-74}, -{47,71,-73}, -{47,71,-72}, -{47,71,-71}, -{47,71,-70}, -{47,71,-69}, -{47,71,-68}, -{47,71,-67}, -{47,71,-66}, -{47,71,-65}, -{47,71,-64}, -{47,71,-63}, -{47,71,-62}, -{47,71,-61}, -{47,71,-60}, -{47,71,-59}, -{47,71,-58}, -{47,71,-57}, -{47,71,-56}, -{47,71,-55}, -{47,71,-54}, -{47,71,-53}, -{47,71,-52}, -{47,71,-51}, -{47,71,-50}, -{47,71,-49}, -{47,71,-48}, -{47,71,-47}, -{47,71,-46}, -{47,71,-45}, -{47,71,-44}, -{47,71,-43}, -{47,71,-42}, -{47,71,-41}, -{47,71,-40}, -{47,71,-39}, -{47,71,-38}, -{47,71,-37}, -{47,71,-36}, -{47,71,-35}, -{47,71,-34}, -{47,71,-33}, -{47,71,-32}, -{47,71,-31}, -{47,71,-30}, -{47,71,-29}, -{47,71,-28}, -{47,71,-27}, -{47,71,-26}, -{47,71,-25}, -{47,71,-24}, -{47,71,-23}, -{47,71,-22}, -{47,71,-21}, -{47,71,-20}, -{47,71,-19}, -{47,71,-18}, -{47,71,-17}, -{47,71,-16}, -{47,71,-15}, -{47,71,-14}, -{47,71,-13}, -{47,71,-12}, -{47,71,-11}, -{47,71,-10}, -{47,71,-9}, -{47,71,-8}, -{47,71,-7}, -{47,71,-6}, -{47,71,-5}, -{47,71,-4}, -{47,71,-3}, -{47,71,-2}, -{47,71,-1}, -{47,71,0}, -{47,71,1}, -{47,71,2}, -{47,71,3}, -{47,71,4}, -{47,71,5}, -{47,71,6}, -{47,71,7}, -{47,71,8}, -{47,71,9}, -{47,71,10}, -{47,71,11}, -{47,71,12}, -{47,71,13}, -{47,71,14}, -{47,71,15}, -{47,71,16}, -{47,71,17}, -{47,71,18}, -{47,71,19}, -{47,71,20}, -{47,71,21}, -{47,71,22}, -{47,71,23}, -{47,71,24}, -{47,71,25}, -{47,71,26}, -{47,71,27}, -{47,71,28}, -{47,71,29}, -{47,71,30}, -{47,71,31}, -{47,71,32}, -{47,71,33}, -{47,71,34}, -{47,71,35}, -{47,71,36}, -{47,71,37}, -{47,71,38}, -{47,71,39}, -{47,71,40}, -{47,71,41}, -{47,71,42}, -{47,71,43}, -{47,71,44}, -{47,71,45}, -{47,71,46}, -{47,71,47}, -{47,71,48}, -{47,71,49}, -{47,71,50}, -{47,71,51}, -{47,71,52}, -{47,71,53}, -{47,71,54}, -{47,71,55}, -{47,71,56}, -{47,71,57}, -{47,71,58}, -{47,71,59}, -{47,71,60}, -{47,71,61}, -{47,72,-83}, -{47,72,-82}, -{47,72,-81}, -{47,72,-80}, -{47,72,-79}, -{47,72,-78}, -{47,72,-77}, -{47,72,-76}, -{47,72,-75}, -{47,72,-74}, -{47,72,-73}, -{47,72,-72}, -{47,72,-71}, -{47,72,-70}, -{47,72,-69}, -{47,72,-68}, -{47,72,-67}, -{47,72,-66}, -{47,72,-65}, -{47,72,-64}, -{47,72,-63}, -{47,72,-62}, -{47,72,-61}, -{47,72,-60}, -{47,72,-59}, -{47,72,-58}, -{47,72,-57}, -{47,72,-56}, -{47,72,-55}, -{47,72,-54}, -{47,72,-53}, -{47,72,-52}, -{47,72,-51}, -{47,72,-50}, -{47,72,-49}, -{47,72,-48}, -{47,72,-47}, -{47,72,-46}, -{47,72,-45}, -{47,72,-44}, -{47,72,-43}, -{47,72,-42}, -{47,72,-41}, -{47,72,-40}, -{47,72,-39}, -{47,72,-38}, -{47,72,-37}, -{47,72,-36}, -{47,72,-35}, -{47,72,-34}, -{47,72,-33}, -{47,72,-32}, -{47,72,-31}, -{47,72,-30}, -{47,72,-29}, -{47,72,-28}, -{47,72,-27}, -{47,72,-26}, -{47,72,-25}, -{47,72,-24}, -{47,72,-23}, -{47,72,-22}, -{47,72,-21}, -{47,72,-20}, -{47,72,-19}, -{47,72,-18}, -{47,72,-17}, -{47,72,-16}, -{47,72,-15}, -{47,72,-14}, -{47,72,-13}, -{47,72,-12}, -{47,72,-11}, -{47,72,-10}, -{47,72,-9}, -{47,72,-8}, -{47,72,-7}, -{47,72,-6}, -{47,72,-5}, -{47,72,-4}, -{47,72,-3}, -{47,72,-2}, -{47,72,-1}, -{47,72,0}, -{47,72,1}, -{47,72,2}, -{47,72,3}, -{47,72,4}, -{47,72,5}, -{47,72,6}, -{47,72,7}, -{47,72,8}, -{47,72,9}, -{47,72,10}, -{47,72,11}, -{47,72,12}, -{47,72,13}, -{47,72,14}, -{47,72,15}, -{47,72,16}, -{47,72,17}, -{47,72,18}, -{47,72,19}, -{47,72,20}, -{47,72,21}, -{47,72,22}, -{47,72,23}, -{47,72,24}, -{47,72,25}, -{47,72,26}, -{47,72,27}, -{47,72,28}, -{47,72,29}, -{47,72,30}, -{47,72,31}, -{47,72,32}, -{47,72,33}, -{47,72,34}, -{47,72,35}, -{47,72,36}, -{47,72,37}, -{47,72,38}, -{47,72,39}, -{47,72,40}, -{47,72,41}, -{47,72,42}, -{47,72,43}, -{47,72,44}, -{47,72,45}, -{47,72,46}, -{47,72,47}, -{47,72,48}, -{47,72,49}, -{47,72,50}, -{47,72,51}, -{47,72,52}, -{47,72,53}, -{47,72,54}, -{47,72,55}, -{47,72,56}, -{47,72,57}, -{47,72,58}, -{47,72,59}, -{47,72,60}, -{47,72,61}, -{47,73,-83}, -{47,73,-82}, -{47,73,-81}, -{47,73,-80}, -{47,73,-79}, -{47,73,-78}, -{47,73,-77}, -{47,73,-76}, -{47,73,-75}, -{47,73,-74}, -{47,73,-73}, -{47,73,-72}, -{47,73,-71}, -{47,73,-70}, -{47,73,-69}, -{47,73,-68}, -{47,73,-67}, -{47,73,-66}, -{47,73,-65}, -{47,73,-64}, -{47,73,-63}, -{47,73,-62}, -{47,73,-61}, -{47,73,-60}, -{47,73,-59}, -{47,73,-58}, -{47,73,-57}, -{47,73,-56}, -{47,73,-55}, -{47,73,-54}, -{47,73,-53}, -{47,73,-52}, -{47,73,-51}, -{47,73,-50}, -{47,73,-49}, -{47,73,-48}, -{47,73,-47}, -{47,73,-46}, -{47,73,-45}, -{47,73,-44}, -{47,73,-43}, -{47,73,-42}, -{47,73,-41}, -{47,73,-40}, -{47,73,-39}, -{47,73,-38}, -{47,73,-37}, -{47,73,-36}, -{47,73,-35}, -{47,73,-34}, -{47,73,-33}, -{47,73,-32}, -{47,73,-31}, -{47,73,-30}, -{47,73,-29}, -{47,73,-28}, -{47,73,-27}, -{47,73,-26}, -{47,73,-25}, -{47,73,-24}, -{47,73,-23}, -{47,73,-22}, -{47,73,-21}, -{47,73,-20}, -{47,73,-19}, -{47,73,-18}, -{47,73,-17}, -{47,73,-16}, -{47,73,-15}, -{47,73,-14}, -{47,73,-13}, -{47,73,-12}, -{47,73,-11}, -{47,73,-10}, -{47,73,-9}, -{47,73,-8}, -{47,73,-7}, -{47,73,-6}, -{47,73,-5}, -{47,73,-4}, -{47,73,-3}, -{47,73,-2}, -{47,73,-1}, -{47,73,0}, -{47,73,1}, -{47,73,2}, -{47,73,3}, -{47,73,4}, -{47,73,5}, -{47,73,6}, -{47,73,7}, -{47,73,8}, -{47,73,9}, -{47,73,10}, -{47,73,11}, -{47,73,12}, -{47,73,13}, -{47,73,14}, -{47,73,15}, -{47,73,16}, -{47,73,17}, -{47,73,18}, -{47,73,19}, -{47,73,20}, -{47,73,21}, -{47,73,22}, -{47,73,23}, -{47,73,24}, -{47,73,25}, -{47,73,26}, -{47,73,27}, -{47,73,28}, -{47,73,29}, -{47,73,30}, -{47,73,31}, -{47,73,32}, -{47,73,33}, -{47,73,34}, -{47,73,35}, -{47,73,36}, -{47,73,37}, -{47,73,38}, -{47,73,39}, -{47,73,40}, -{47,73,41}, -{47,73,42}, -{47,73,43}, -{47,73,44}, -{47,73,45}, -{47,73,46}, -{47,73,47}, -{47,73,48}, -{47,73,49}, -{47,73,50}, -{47,73,51}, -{47,73,52}, -{47,73,53}, -{47,73,54}, -{47,73,55}, -{47,73,56}, -{47,73,57}, -{47,73,58}, -{47,73,59}, -{47,73,60}, -{47,73,61}, -{47,74,-83}, -{47,74,-82}, -{47,74,-81}, -{47,74,-80}, -{47,74,-79}, -{47,74,-78}, -{47,74,-77}, -{47,74,-76}, -{47,74,-75}, -{47,74,-74}, -{47,74,-73}, -{47,74,-72}, -{47,74,-71}, -{47,74,-70}, -{47,74,-69}, -{47,74,-68}, -{47,74,-67}, -{47,74,-66}, -{47,74,-65}, -{47,74,-64}, -{47,74,-63}, -{47,74,-62}, -{47,74,-61}, -{47,74,-60}, -{47,74,-59}, -{47,74,-58}, -{47,74,-57}, -{47,74,-56}, -{47,74,-55}, -{47,74,-54}, -{47,74,-53}, -{47,74,-52}, -{47,74,-51}, -{47,74,-50}, -{47,74,-49}, -{47,74,-48}, -{47,74,-47}, -{47,74,-46}, -{47,74,-45}, -{47,74,-44}, -{47,74,-43}, -{47,74,-42}, -{47,74,-41}, -{47,74,-40}, -{47,74,-39}, -{47,74,-38}, -{47,74,-37}, -{47,74,-36}, -{47,74,-35}, -{47,74,-34}, -{47,74,-33}, -{47,74,-32}, -{47,74,-31}, -{47,74,-30}, -{47,74,-29}, -{47,74,-28}, -{47,74,-27}, -{47,74,-26}, -{47,74,-25}, -{47,74,-24}, -{47,74,-23}, -{47,74,-22}, -{47,74,-21}, -{47,74,-20}, -{47,74,-19}, -{47,74,-18}, -{47,74,-17}, -{47,74,-16}, -{47,74,-15}, -{47,74,-14}, -{47,74,-13}, -{47,74,-12}, -{47,74,-11}, -{47,74,-10}, -{47,74,-9}, -{47,74,-8}, -{47,74,-7}, -{47,74,-6}, -{47,74,-5}, -{47,74,-4}, -{47,74,-3}, -{47,74,-2}, -{47,74,-1}, -{47,74,0}, -{47,74,1}, -{47,74,2}, -{47,74,3}, -{47,74,4}, -{47,74,5}, -{47,74,6}, -{47,74,7}, -{47,74,8}, -{47,74,9}, -{47,74,10}, -{47,74,11}, -{47,74,12}, -{47,74,13}, -{47,74,14}, -{47,74,15}, -{47,74,16}, -{47,74,17}, -{47,74,18}, -{47,74,19}, -{47,74,20}, -{47,74,21}, -{47,74,22}, -{47,74,23}, -{47,74,24}, -{47,74,25}, -{47,74,26}, -{47,75,-83}, -{47,75,-82}, -{47,75,-81}, -{47,75,-80}, -{47,75,-79}, -{47,75,-78}, -{47,75,-77}, -{47,75,-76}, -{47,75,-75}, -{47,75,-74}, -{47,75,-73}, -{47,75,-72}, -{47,75,-71}, -{47,75,-70}, -{47,75,-69}, -{47,75,-68}, -{47,75,-67}, -{47,75,-66}, -{47,75,-65}, -{47,75,-64}, -{47,75,-63}, -{47,75,-62}, -{47,75,-61}, -{47,75,-60}, -{47,75,-59}, -{47,75,-58}, -{47,75,-57}, -{47,75,-56}, -{47,75,-55}, -{47,75,-54}, -{47,75,-53}, -{47,75,-52}, -{47,75,-51}, -{47,75,-50}, -{47,75,-49}, -{47,75,-48}, -{47,75,-47}, -{47,75,-46}, -{47,75,-45}, -{47,75,-44}, -{47,75,-43}, -{47,75,-42}, -{47,75,-41}, -{47,75,-40}, -{47,75,-39}, -{47,75,-38}, -{47,75,-37}, -{47,75,-36}, -{47,75,-35}, -{47,75,-34}, -{47,75,-33}, -{47,75,-32}, -{47,75,-31}, -{47,75,-30}, -{47,75,-29}, -{47,75,-28}, -{47,75,-27}, -{47,75,-26}, -{47,75,-25}, -{47,75,-24}, -{47,75,-23}, -{47,75,-22}, -{47,75,-21}, -{47,75,-20}, -{47,75,-19}, -{47,75,-18}, -{47,75,-17}, -{47,75,-16}, -{47,75,-15}, -{47,75,-14}, -{47,75,-13}, -{47,75,-12}, -{47,75,-11}, -{47,75,-10}, -{47,75,-9}, -{47,75,-8}, -{47,75,-7}, -{47,75,-6}, -{47,75,-5}, -{47,75,-4}, -{47,75,-3}, -{47,75,-2}, -{47,75,-1}, -{47,75,0}, -{47,75,1}, -{47,75,2}, -{47,75,3}, -{47,75,4}, -{47,75,5}, -{47,75,6}, -{47,75,7}, -{47,75,8}, -{47,76,-83}, -{47,76,-82}, -{47,76,-81}, -{47,76,-80}, -{47,76,-79}, -{47,76,-78}, -{47,76,-77}, -{47,76,-76}, -{47,76,-75}, -{47,76,-74}, -{47,76,-73}, -{47,76,-72}, -{47,76,-71}, -{47,76,-70}, -{47,76,-69}, -{47,76,-68}, -{47,76,-67}, -{47,76,-66}, -{47,76,-65}, -{47,76,-64}, -{47,76,-63}, -{47,76,-62}, -{47,76,-61}, -{47,76,-60}, -{47,76,-59}, -{47,76,-58}, -{47,76,-57}, -{47,76,-56}, -{47,76,-55}, -{47,76,-54}, -{47,76,-53}, -{47,76,-52}, -{47,76,-51}, -{47,76,-50}, -{47,76,-49}, -{47,76,-48}, -{47,76,-47}, -{47,76,-46}, -{47,76,-45}, -{47,76,-44}, -{47,76,-43}, -{47,76,-42}, -{47,76,-41}, -{47,76,-40}, -{47,76,-39}, -{47,76,-38}, -{47,76,-37}, -{47,76,-36}, -{47,76,-35}, -{47,76,-34}, -{47,76,-33}, -{47,76,-32}, -{47,76,-31}, -{47,76,-30}, -{47,76,-29}, -{47,76,-28}, -{47,76,-27}, -{47,76,-26}, -{47,76,-25}, -{47,76,-24}, -{47,76,-23}, -{47,76,-22}, -{47,76,-21}, -{47,76,-20}, -{47,76,-19}, -{47,76,-18}, -{47,76,-17}, -{47,76,-16}, -{47,76,-15}, -{47,76,-14}, -{47,76,-13}, -{47,76,-12}, -{47,76,-11}, -{47,76,-10}, -{47,76,-9}, -{47,76,-8}, -{47,76,-7}, -{47,76,-6}, -{47,77,-83}, -{47,77,-82}, -{47,77,-81}, -{47,77,-80}, -{47,77,-79}, -{47,77,-78}, -{47,77,-77}, -{47,77,-76}, -{47,77,-75}, -{47,77,-74}, -{47,77,-73}, -{47,77,-72}, -{47,77,-71}, -{47,77,-70}, -{47,77,-69}, -{47,77,-68}, -{47,77,-67}, -{47,77,-66}, -{47,77,-65}, -{47,77,-64}, -{47,77,-63}, -{47,77,-62}, -{47,77,-61}, -{47,77,-60}, -{47,77,-59}, -{47,77,-58}, -{47,77,-57}, -{47,77,-56}, -{47,77,-55}, -{47,77,-54}, -{47,77,-53}, -{47,77,-52}, -{47,77,-51}, -{47,77,-50}, -{47,77,-49}, -{47,77,-48}, -{47,77,-47}, -{47,77,-46}, -{47,77,-45}, -{47,77,-44}, -{47,77,-43}, -{47,77,-42}, -{47,77,-41}, -{47,77,-40}, -{47,77,-39}, -{47,77,-38}, -{47,77,-37}, -{47,77,-36}, -{47,77,-35}, -{47,77,-34}, -{47,77,-33}, -{47,77,-32}, -{47,77,-31}, -{47,77,-30}, -{47,77,-29}, -{47,77,-28}, -{47,77,-27}, -{47,77,-26}, -{47,77,-25}, -{47,77,-24}, -{47,77,-23}, -{47,77,-22}, -{47,77,-21}, -{47,77,-20}, -{47,77,-19}, -{47,77,-18}, -{47,77,-17}, -{47,78,-83}, -{47,78,-82}, -{47,78,-81}, -{47,78,-80}, -{47,78,-79}, -{47,78,-78}, -{47,78,-77}, -{47,78,-76}, -{47,78,-75}, -{47,78,-74}, -{47,78,-73}, -{47,78,-72}, -{47,78,-71}, -{47,78,-70}, -{47,78,-69}, -{47,78,-68}, -{47,78,-67}, -{47,78,-66}, -{47,78,-65}, -{47,78,-64}, -{47,78,-63}, -{47,78,-62}, -{47,78,-61}, -{47,78,-60}, -{47,78,-59}, -{47,78,-58}, -{47,78,-57}, -{47,78,-56}, -{47,78,-55}, -{47,78,-54}, -{47,78,-53}, -{47,78,-52}, -{47,78,-51}, -{47,78,-50}, -{47,78,-49}, -{47,78,-48}, -{47,78,-47}, -{47,78,-46}, -{47,78,-45}, -{47,78,-44}, -{47,78,-43}, -{47,78,-42}, -{47,78,-41}, -{47,78,-40}, -{47,78,-39}, -{47,78,-38}, -{47,78,-37}, -{47,78,-36}, -{47,78,-35}, -{47,78,-34}, -{47,78,-33}, -{47,78,-32}, -{47,78,-31}, -{47,78,-30}, -{47,78,-29}, -{47,78,-28}, -{47,78,-27}, -{47,79,-83}, -{47,79,-82}, -{47,79,-81}, -{47,79,-80}, -{47,79,-79}, -{47,79,-78}, -{47,79,-77}, -{47,79,-76}, -{47,79,-75}, -{47,79,-74}, -{47,79,-73}, -{47,79,-72}, -{47,79,-71}, -{47,79,-70}, -{47,79,-69}, -{47,79,-68}, -{47,79,-67}, -{47,79,-66}, -{47,79,-65}, -{47,79,-64}, -{47,79,-63}, -{47,79,-62}, -{47,79,-61}, -{47,79,-60}, -{47,79,-59}, -{47,79,-58}, -{47,79,-57}, -{47,79,-56}, -{47,79,-55}, -{47,79,-54}, -{47,79,-53}, -{47,79,-52}, -{47,79,-51}, -{47,79,-50}, -{47,79,-49}, -{47,79,-48}, -{47,79,-47}, -{47,79,-46}, -{47,79,-45}, -{47,79,-44}, -{47,79,-43}, -{47,79,-42}, -{47,79,-41}, -{47,79,-40}, -{47,79,-39}, -{47,79,-38}, -{47,79,-37}, -{47,79,-36}, -{47,79,-35}, -{47,80,-83}, -{47,80,-82}, -{47,80,-81}, -{47,80,-80}, -{47,80,-79}, -{47,80,-78}, -{47,80,-77}, -{47,80,-76}, -{47,80,-75}, -{47,80,-74}, -{47,80,-73}, -{47,80,-72}, -{47,80,-71}, -{47,80,-70}, -{47,80,-69}, -{47,80,-68}, -{47,80,-67}, -{47,80,-66}, -{47,80,-65}, -{47,80,-64}, -{47,80,-63}, -{47,80,-62}, -{47,80,-61}, -{47,80,-60}, -{47,80,-59}, -{47,80,-58}, -{47,80,-57}, -{47,80,-56}, -{47,80,-55}, -{47,80,-54}, -{47,80,-53}, -{47,80,-52}, -{47,80,-51}, -{47,80,-50}, -{47,80,-49}, -{47,80,-48}, -{47,80,-47}, -{47,80,-46}, -{47,80,-45}, -{47,80,-44}, -{47,80,-43}, -{47,80,-42}, -{47,81,-83}, -{47,81,-82}, -{47,81,-81}, -{47,81,-80}, -{47,81,-79}, -{47,81,-78}, -{47,81,-77}, -{47,81,-76}, -{47,81,-75}, -{47,81,-74}, -{47,81,-73}, -{47,81,-72}, -{47,81,-71}, -{47,81,-70}, -{47,81,-69}, -{47,81,-68}, -{47,81,-67}, -{47,81,-66}, -{47,81,-65}, -{47,81,-64}, -{47,81,-63}, -{47,81,-62}, -{47,81,-61}, -{47,81,-60}, -{47,81,-59}, -{47,81,-58}, -{47,81,-57}, -{47,81,-56}, -{47,81,-55}, -{47,81,-54}, -{47,81,-53}, -{47,81,-52}, -{47,81,-51}, -{47,81,-50}, -{47,81,-49}, -{47,82,-83}, -{47,82,-82}, -{47,82,-81}, -{47,82,-80}, -{47,82,-79}, -{47,82,-78}, -{47,82,-77}, -{47,82,-76}, -{47,82,-75}, -{47,82,-74}, -{47,82,-73}, -{47,82,-72}, -{47,82,-71}, -{47,82,-70}, -{47,82,-69}, -{47,82,-68}, -{47,82,-67}, -{47,82,-66}, -{47,82,-65}, -{47,82,-64}, -{47,82,-63}, -{47,82,-62}, -{47,82,-61}, -{47,82,-60}, -{47,82,-59}, -{47,82,-58}, -{47,82,-57}, -{47,82,-56}, -{47,82,-55}, -{47,83,-83}, -{47,83,-82}, -{47,83,-81}, -{47,83,-80}, -{47,83,-79}, -{47,83,-78}, -{47,83,-77}, -{47,83,-76}, -{47,83,-75}, -{47,83,-74}, -{47,83,-73}, -{47,83,-72}, -{47,83,-71}, -{47,83,-70}, -{47,83,-69}, -{47,83,-68}, -{47,83,-67}, -{47,83,-66}, -{47,83,-65}, -{47,83,-64}, -{47,83,-63}, -{47,83,-62}, -{47,83,-61}, -{47,84,-83}, -{47,84,-82}, -{47,84,-81}, -{47,84,-80}, -{47,84,-79}, -{47,84,-78}, -{47,84,-77}, -{47,84,-76}, -{47,84,-75}, -{47,84,-74}, -{47,84,-73}, -{47,84,-72}, -{47,84,-71}, -{47,84,-70}, -{47,84,-69}, -{47,84,-68}, -{47,84,-67}, -{47,85,-83}, -{47,85,-82}, -{47,85,-81}, -{47,85,-80}, -{47,85,-79}, -{47,85,-78}, -{47,85,-77}, -{47,85,-76}, -{47,85,-75}, -{47,85,-74}, -{47,85,-73}, -{47,85,-72}, -{47,86,-83}, -{47,86,-82}, -{47,86,-81}, -{47,86,-80}, -{47,86,-79}, -{47,86,-78}, -{47,86,-77}, -{47,87,-83}, -{47,87,-82}, -{48,-53,50}, -{48,-53,51}, -{48,-52,46}, -{48,-52,47}, -{48,-52,48}, -{48,-52,49}, -{48,-52,50}, -{48,-52,51}, -{48,-51,41}, -{48,-51,42}, -{48,-51,43}, -{48,-51,44}, -{48,-51,45}, -{48,-51,46}, -{48,-51,47}, -{48,-51,48}, -{48,-51,49}, -{48,-51,50}, -{48,-51,51}, -{48,-50,38}, -{48,-50,39}, -{48,-50,40}, -{48,-50,41}, -{48,-50,42}, -{48,-50,43}, -{48,-50,44}, -{48,-50,45}, -{48,-50,46}, -{48,-50,47}, -{48,-50,48}, -{48,-50,49}, -{48,-50,50}, -{48,-50,51}, -{48,-49,34}, -{48,-49,35}, -{48,-49,36}, -{48,-49,37}, -{48,-49,38}, -{48,-49,39}, -{48,-49,40}, -{48,-49,41}, -{48,-49,42}, -{48,-49,43}, -{48,-49,44}, -{48,-49,45}, -{48,-49,46}, -{48,-49,47}, -{48,-49,48}, -{48,-49,49}, -{48,-49,50}, -{48,-49,51}, -{48,-48,31}, -{48,-48,32}, -{48,-48,33}, -{48,-48,34}, -{48,-48,35}, -{48,-48,36}, -{48,-48,37}, -{48,-48,38}, -{48,-48,39}, -{48,-48,40}, -{48,-48,41}, -{48,-48,42}, -{48,-48,43}, -{48,-48,44}, -{48,-48,45}, -{48,-48,46}, -{48,-48,47}, -{48,-48,48}, -{48,-48,49}, -{48,-48,50}, -{48,-48,51}, -{48,-47,29}, -{48,-47,30}, -{48,-47,31}, -{48,-47,32}, -{48,-47,33}, -{48,-47,34}, -{48,-47,35}, -{48,-47,36}, -{48,-47,37}, -{48,-47,38}, -{48,-47,39}, -{48,-47,40}, -{48,-47,41}, -{48,-47,42}, -{48,-47,43}, -{48,-47,44}, -{48,-47,45}, -{48,-47,46}, -{48,-47,47}, -{48,-47,48}, -{48,-47,49}, -{48,-47,50}, -{48,-47,51}, -{48,-46,26}, -{48,-46,27}, -{48,-46,28}, -{48,-46,29}, -{48,-46,30}, -{48,-46,31}, -{48,-46,32}, -{48,-46,33}, -{48,-46,34}, -{48,-46,35}, -{48,-46,36}, -{48,-46,37}, -{48,-46,38}, -{48,-46,39}, -{48,-46,40}, -{48,-46,41}, -{48,-46,42}, -{48,-46,43}, -{48,-46,44}, -{48,-46,45}, -{48,-46,46}, -{48,-46,47}, -{48,-46,48}, -{48,-46,49}, -{48,-46,50}, -{48,-46,51}, -{48,-45,23}, -{48,-45,24}, -{48,-45,25}, -{48,-45,26}, -{48,-45,27}, -{48,-45,28}, -{48,-45,29}, -{48,-45,30}, -{48,-45,31}, -{48,-45,32}, -{48,-45,33}, -{48,-45,34}, -{48,-45,35}, -{48,-45,36}, -{48,-45,37}, -{48,-45,38}, -{48,-45,39}, -{48,-45,40}, -{48,-45,41}, -{48,-45,42}, -{48,-45,43}, -{48,-45,44}, -{48,-45,45}, -{48,-45,46}, -{48,-45,47}, -{48,-45,48}, -{48,-45,49}, -{48,-45,50}, -{48,-45,51}, -{48,-44,21}, -{48,-44,22}, -{48,-44,23}, -{48,-44,24}, -{48,-44,25}, -{48,-44,26}, -{48,-44,27}, -{48,-44,28}, -{48,-44,29}, -{48,-44,30}, -{48,-44,31}, -{48,-44,32}, -{48,-44,33}, -{48,-44,34}, -{48,-44,35}, -{48,-44,36}, -{48,-44,37}, -{48,-44,38}, -{48,-44,39}, -{48,-44,40}, -{48,-44,41}, -{48,-44,42}, -{48,-44,43}, -{48,-44,44}, -{48,-44,45}, -{48,-44,46}, -{48,-44,47}, -{48,-44,48}, -{48,-44,49}, -{48,-44,50}, -{48,-44,51}, -{48,-43,18}, -{48,-43,19}, -{48,-43,20}, -{48,-43,21}, -{48,-43,22}, -{48,-43,23}, -{48,-43,24}, -{48,-43,25}, -{48,-43,26}, -{48,-43,27}, -{48,-43,28}, -{48,-43,29}, -{48,-43,30}, -{48,-43,31}, -{48,-43,32}, -{48,-43,33}, -{48,-43,34}, -{48,-43,35}, -{48,-43,36}, -{48,-43,37}, -{48,-43,38}, -{48,-43,39}, -{48,-43,40}, -{48,-43,41}, -{48,-43,42}, -{48,-43,43}, -{48,-43,44}, -{48,-43,45}, -{48,-43,46}, -{48,-43,47}, -{48,-43,48}, -{48,-43,49}, -{48,-43,50}, -{48,-43,51}, -{48,-42,16}, -{48,-42,17}, -{48,-42,18}, -{48,-42,19}, -{48,-42,20}, -{48,-42,21}, -{48,-42,22}, -{48,-42,23}, -{48,-42,24}, -{48,-42,25}, -{48,-42,26}, -{48,-42,27}, -{48,-42,28}, -{48,-42,29}, -{48,-42,30}, -{48,-42,31}, -{48,-42,32}, -{48,-42,33}, -{48,-42,34}, -{48,-42,35}, -{48,-42,36}, -{48,-42,37}, -{48,-42,38}, -{48,-42,39}, -{48,-42,40}, -{48,-42,41}, -{48,-42,42}, -{48,-42,43}, -{48,-42,44}, -{48,-42,45}, -{48,-42,46}, -{48,-42,47}, -{48,-42,48}, -{48,-42,49}, -{48,-42,50}, -{48,-42,51}, -{48,-41,14}, -{48,-41,15}, -{48,-41,16}, -{48,-41,17}, -{48,-41,18}, -{48,-41,19}, -{48,-41,20}, -{48,-41,21}, -{48,-41,22}, -{48,-41,23}, -{48,-41,24}, -{48,-41,25}, -{48,-41,26}, -{48,-41,27}, -{48,-41,28}, -{48,-41,29}, -{48,-41,30}, -{48,-41,31}, -{48,-41,32}, -{48,-41,33}, -{48,-41,34}, -{48,-41,35}, -{48,-41,36}, -{48,-41,37}, -{48,-41,38}, -{48,-41,39}, -{48,-41,40}, -{48,-41,41}, -{48,-41,42}, -{48,-41,43}, -{48,-41,44}, -{48,-41,45}, -{48,-41,46}, -{48,-41,47}, -{48,-41,48}, -{48,-41,49}, -{48,-41,50}, -{48,-41,51}, -{48,-41,52}, -{48,-40,12}, -{48,-40,13}, -{48,-40,14}, -{48,-40,15}, -{48,-40,16}, -{48,-40,17}, -{48,-40,18}, -{48,-40,19}, -{48,-40,20}, -{48,-40,21}, -{48,-40,22}, -{48,-40,23}, -{48,-40,24}, -{48,-40,25}, -{48,-40,26}, -{48,-40,27}, -{48,-40,28}, -{48,-40,29}, -{48,-40,30}, -{48,-40,31}, -{48,-40,32}, -{48,-40,33}, -{48,-40,34}, -{48,-40,35}, -{48,-40,36}, -{48,-40,37}, -{48,-40,38}, -{48,-40,39}, -{48,-40,40}, -{48,-40,41}, -{48,-40,42}, -{48,-40,43}, -{48,-40,44}, -{48,-40,45}, -{48,-40,46}, -{48,-40,47}, -{48,-40,48}, -{48,-40,49}, -{48,-40,50}, -{48,-40,51}, -{48,-40,52}, -{48,-39,10}, -{48,-39,11}, -{48,-39,12}, -{48,-39,13}, -{48,-39,14}, -{48,-39,15}, -{48,-39,16}, -{48,-39,17}, -{48,-39,18}, -{48,-39,19}, -{48,-39,20}, -{48,-39,21}, -{48,-39,22}, -{48,-39,23}, -{48,-39,24}, -{48,-39,25}, -{48,-39,26}, -{48,-39,27}, -{48,-39,28}, -{48,-39,29}, -{48,-39,30}, -{48,-39,31}, -{48,-39,32}, -{48,-39,33}, -{48,-39,34}, -{48,-39,35}, -{48,-39,36}, -{48,-39,37}, -{48,-39,38}, -{48,-39,39}, -{48,-39,40}, -{48,-39,41}, -{48,-39,42}, -{48,-39,43}, -{48,-39,44}, -{48,-39,45}, -{48,-39,46}, -{48,-39,47}, -{48,-39,48}, -{48,-39,49}, -{48,-39,50}, -{48,-39,51}, -{48,-39,52}, -{48,-38,8}, -{48,-38,9}, -{48,-38,10}, -{48,-38,11}, -{48,-38,12}, -{48,-38,13}, -{48,-38,14}, -{48,-38,15}, -{48,-38,16}, -{48,-38,17}, -{48,-38,18}, -{48,-38,19}, -{48,-38,20}, -{48,-38,21}, -{48,-38,22}, -{48,-38,23}, -{48,-38,24}, -{48,-38,25}, -{48,-38,26}, -{48,-38,27}, -{48,-38,28}, -{48,-38,29}, -{48,-38,30}, -{48,-38,31}, -{48,-38,32}, -{48,-38,33}, -{48,-38,34}, -{48,-38,35}, -{48,-38,36}, -{48,-38,37}, -{48,-38,38}, -{48,-38,39}, -{48,-38,40}, -{48,-38,41}, -{48,-38,42}, -{48,-38,43}, -{48,-38,44}, -{48,-38,45}, -{48,-38,46}, -{48,-38,47}, -{48,-38,48}, -{48,-38,49}, -{48,-38,50}, -{48,-38,51}, -{48,-38,52}, -{48,-37,6}, -{48,-37,7}, -{48,-37,8}, -{48,-37,9}, -{48,-37,10}, -{48,-37,11}, -{48,-37,12}, -{48,-37,13}, -{48,-37,14}, -{48,-37,15}, -{48,-37,16}, -{48,-37,17}, -{48,-37,18}, -{48,-37,19}, -{48,-37,20}, -{48,-37,21}, -{48,-37,22}, -{48,-37,23}, -{48,-37,24}, -{48,-37,25}, -{48,-37,26}, -{48,-37,27}, -{48,-37,28}, -{48,-37,29}, -{48,-37,30}, -{48,-37,31}, -{48,-37,32}, -{48,-37,33}, -{48,-37,34}, -{48,-37,35}, -{48,-37,36}, -{48,-37,37}, -{48,-37,38}, -{48,-37,39}, -{48,-37,40}, -{48,-37,41}, -{48,-37,42}, -{48,-37,43}, -{48,-37,44}, -{48,-37,45}, -{48,-37,46}, -{48,-37,47}, -{48,-37,48}, -{48,-37,49}, -{48,-37,50}, -{48,-37,51}, -{48,-37,52}, -{48,-36,4}, -{48,-36,5}, -{48,-36,6}, -{48,-36,7}, -{48,-36,8}, -{48,-36,9}, -{48,-36,10}, -{48,-36,11}, -{48,-36,12}, -{48,-36,13}, -{48,-36,14}, -{48,-36,15}, -{48,-36,16}, -{48,-36,17}, -{48,-36,18}, -{48,-36,19}, -{48,-36,20}, -{48,-36,21}, -{48,-36,22}, -{48,-36,23}, -{48,-36,24}, -{48,-36,25}, -{48,-36,26}, -{48,-36,27}, -{48,-36,28}, -{48,-36,29}, -{48,-36,30}, -{48,-36,31}, -{48,-36,32}, -{48,-36,33}, -{48,-36,34}, -{48,-36,35}, -{48,-36,36}, -{48,-36,37}, -{48,-36,38}, -{48,-36,39}, -{48,-36,40}, -{48,-36,41}, -{48,-36,42}, -{48,-36,43}, -{48,-36,44}, -{48,-36,45}, -{48,-36,46}, -{48,-36,47}, -{48,-36,48}, -{48,-36,49}, -{48,-36,50}, -{48,-36,51}, -{48,-36,52}, -{48,-35,2}, -{48,-35,3}, -{48,-35,4}, -{48,-35,5}, -{48,-35,6}, -{48,-35,7}, -{48,-35,8}, -{48,-35,9}, -{48,-35,10}, -{48,-35,11}, -{48,-35,12}, -{48,-35,13}, -{48,-35,14}, -{48,-35,15}, -{48,-35,16}, -{48,-35,17}, -{48,-35,18}, -{48,-35,19}, -{48,-35,20}, -{48,-35,21}, -{48,-35,22}, -{48,-35,23}, -{48,-35,24}, -{48,-35,25}, -{48,-35,26}, -{48,-35,27}, -{48,-35,28}, -{48,-35,29}, -{48,-35,30}, -{48,-35,31}, -{48,-35,32}, -{48,-35,33}, -{48,-35,34}, -{48,-35,35}, -{48,-35,36}, -{48,-35,37}, -{48,-35,38}, -{48,-35,39}, -{48,-35,40}, -{48,-35,41}, -{48,-35,42}, -{48,-35,43}, -{48,-35,44}, -{48,-35,45}, -{48,-35,46}, -{48,-35,47}, -{48,-35,48}, -{48,-35,49}, -{48,-35,50}, -{48,-35,51}, -{48,-35,52}, -{48,-34,0}, -{48,-34,1}, -{48,-34,2}, -{48,-34,3}, -{48,-34,4}, -{48,-34,5}, -{48,-34,6}, -{48,-34,7}, -{48,-34,8}, -{48,-34,9}, -{48,-34,10}, -{48,-34,11}, -{48,-34,12}, -{48,-34,13}, -{48,-34,14}, -{48,-34,15}, -{48,-34,16}, -{48,-34,17}, -{48,-34,18}, -{48,-34,19}, -{48,-34,20}, -{48,-34,21}, -{48,-34,22}, -{48,-34,23}, -{48,-34,24}, -{48,-34,25}, -{48,-34,26}, -{48,-34,27}, -{48,-34,28}, -{48,-34,29}, -{48,-34,30}, -{48,-34,31}, -{48,-34,32}, -{48,-34,33}, -{48,-34,34}, -{48,-34,35}, -{48,-34,36}, -{48,-34,37}, -{48,-34,38}, -{48,-34,39}, -{48,-34,40}, -{48,-34,41}, -{48,-34,42}, -{48,-34,43}, -{48,-34,44}, -{48,-34,45}, -{48,-34,46}, -{48,-34,47}, -{48,-34,48}, -{48,-34,49}, -{48,-34,50}, -{48,-34,51}, -{48,-34,52}, -{48,-33,-1}, -{48,-33,0}, -{48,-33,1}, -{48,-33,2}, -{48,-33,3}, -{48,-33,4}, -{48,-33,5}, -{48,-33,6}, -{48,-33,7}, -{48,-33,8}, -{48,-33,9}, -{48,-33,10}, -{48,-33,11}, -{48,-33,12}, -{48,-33,13}, -{48,-33,14}, -{48,-33,15}, -{48,-33,16}, -{48,-33,17}, -{48,-33,18}, -{48,-33,19}, -{48,-33,20}, -{48,-33,21}, -{48,-33,22}, -{48,-33,23}, -{48,-33,24}, -{48,-33,25}, -{48,-33,26}, -{48,-33,27}, -{48,-33,28}, -{48,-33,29}, -{48,-33,30}, -{48,-33,31}, -{48,-33,32}, -{48,-33,33}, -{48,-33,34}, -{48,-33,35}, -{48,-33,36}, -{48,-33,37}, -{48,-33,38}, -{48,-33,39}, -{48,-33,40}, -{48,-33,41}, -{48,-33,42}, -{48,-33,43}, -{48,-33,44}, -{48,-33,45}, -{48,-33,46}, -{48,-33,47}, -{48,-33,48}, -{48,-33,49}, -{48,-33,50}, -{48,-33,51}, -{48,-33,52}, -{48,-32,-3}, -{48,-32,-2}, -{48,-32,-1}, -{48,-32,0}, -{48,-32,1}, -{48,-32,2}, -{48,-32,3}, -{48,-32,4}, -{48,-32,5}, -{48,-32,6}, -{48,-32,7}, -{48,-32,8}, -{48,-32,9}, -{48,-32,10}, -{48,-32,11}, -{48,-32,12}, -{48,-32,13}, -{48,-32,14}, -{48,-32,15}, -{48,-32,16}, -{48,-32,17}, -{48,-32,18}, -{48,-32,19}, -{48,-32,20}, -{48,-32,21}, -{48,-32,22}, -{48,-32,23}, -{48,-32,24}, -{48,-32,25}, -{48,-32,26}, -{48,-32,27}, -{48,-32,28}, -{48,-32,29}, -{48,-32,30}, -{48,-32,31}, -{48,-32,32}, -{48,-32,33}, -{48,-32,34}, -{48,-32,35}, -{48,-32,36}, -{48,-32,37}, -{48,-32,38}, -{48,-32,39}, -{48,-32,40}, -{48,-32,41}, -{48,-32,42}, -{48,-32,43}, -{48,-32,44}, -{48,-32,45}, -{48,-32,46}, -{48,-32,47}, -{48,-32,48}, -{48,-32,49}, -{48,-32,50}, -{48,-32,51}, -{48,-32,52}, -{48,-31,-5}, -{48,-31,-4}, -{48,-31,-3}, -{48,-31,-2}, -{48,-31,-1}, -{48,-31,0}, -{48,-31,1}, -{48,-31,2}, -{48,-31,3}, -{48,-31,4}, -{48,-31,5}, -{48,-31,6}, -{48,-31,7}, -{48,-31,8}, -{48,-31,9}, -{48,-31,10}, -{48,-31,11}, -{48,-31,12}, -{48,-31,13}, -{48,-31,14}, -{48,-31,15}, -{48,-31,16}, -{48,-31,17}, -{48,-31,18}, -{48,-31,19}, -{48,-31,20}, -{48,-31,21}, -{48,-31,22}, -{48,-31,23}, -{48,-31,24}, -{48,-31,25}, -{48,-31,26}, -{48,-31,27}, -{48,-31,28}, -{48,-31,29}, -{48,-31,30}, -{48,-31,31}, -{48,-31,32}, -{48,-31,33}, -{48,-31,34}, -{48,-31,35}, -{48,-31,36}, -{48,-31,37}, -{48,-31,38}, -{48,-31,39}, -{48,-31,40}, -{48,-31,41}, -{48,-31,42}, -{48,-31,43}, -{48,-31,44}, -{48,-31,45}, -{48,-31,46}, -{48,-31,47}, -{48,-31,48}, -{48,-31,49}, -{48,-31,50}, -{48,-31,51}, -{48,-31,52}, -{48,-30,-6}, -{48,-30,-5}, -{48,-30,-4}, -{48,-30,-3}, -{48,-30,-2}, -{48,-30,-1}, -{48,-30,0}, -{48,-30,1}, -{48,-30,2}, -{48,-30,3}, -{48,-30,4}, -{48,-30,5}, -{48,-30,6}, -{48,-30,7}, -{48,-30,8}, -{48,-30,9}, -{48,-30,10}, -{48,-30,11}, -{48,-30,12}, -{48,-30,13}, -{48,-30,14}, -{48,-30,15}, -{48,-30,16}, -{48,-30,17}, -{48,-30,18}, -{48,-30,19}, -{48,-30,20}, -{48,-30,21}, -{48,-30,22}, -{48,-30,23}, -{48,-30,24}, -{48,-30,25}, -{48,-30,26}, -{48,-30,27}, -{48,-30,28}, -{48,-30,29}, -{48,-30,30}, -{48,-30,31}, -{48,-30,32}, -{48,-30,33}, -{48,-30,34}, -{48,-30,35}, -{48,-30,36}, -{48,-30,37}, -{48,-30,38}, -{48,-30,39}, -{48,-30,40}, -{48,-30,41}, -{48,-30,42}, -{48,-30,43}, -{48,-30,44}, -{48,-30,45}, -{48,-30,46}, -{48,-30,47}, -{48,-30,48}, -{48,-30,49}, -{48,-30,50}, -{48,-30,51}, -{48,-30,52}, -{48,-29,-8}, -{48,-29,-7}, -{48,-29,-6}, -{48,-29,-5}, -{48,-29,-4}, -{48,-29,-3}, -{48,-29,-2}, -{48,-29,-1}, -{48,-29,0}, -{48,-29,1}, -{48,-29,2}, -{48,-29,3}, -{48,-29,4}, -{48,-29,5}, -{48,-29,6}, -{48,-29,7}, -{48,-29,8}, -{48,-29,9}, -{48,-29,10}, -{48,-29,11}, -{48,-29,12}, -{48,-29,13}, -{48,-29,14}, -{48,-29,15}, -{48,-29,16}, -{48,-29,17}, -{48,-29,18}, -{48,-29,19}, -{48,-29,20}, -{48,-29,21}, -{48,-29,22}, -{48,-29,23}, -{48,-29,24}, -{48,-29,25}, -{48,-29,26}, -{48,-29,27}, -{48,-29,28}, -{48,-29,29}, -{48,-29,30}, -{48,-29,31}, -{48,-29,32}, -{48,-29,33}, -{48,-29,34}, -{48,-29,35}, -{48,-29,36}, -{48,-29,37}, -{48,-29,38}, -{48,-29,39}, -{48,-29,40}, -{48,-29,41}, -{48,-29,42}, -{48,-29,43}, -{48,-29,44}, -{48,-29,45}, -{48,-29,46}, -{48,-29,47}, -{48,-29,48}, -{48,-29,49}, -{48,-29,50}, -{48,-29,51}, -{48,-29,52}, -{48,-28,-9}, -{48,-28,-8}, -{48,-28,-7}, -{48,-28,-6}, -{48,-28,-5}, -{48,-28,-4}, -{48,-28,-3}, -{48,-28,-2}, -{48,-28,-1}, -{48,-28,0}, -{48,-28,1}, -{48,-28,2}, -{48,-28,3}, -{48,-28,4}, -{48,-28,5}, -{48,-28,6}, -{48,-28,7}, -{48,-28,8}, -{48,-28,9}, -{48,-28,10}, -{48,-28,11}, -{48,-28,12}, -{48,-28,13}, -{48,-28,14}, -{48,-28,15}, -{48,-28,16}, -{48,-28,17}, -{48,-28,18}, -{48,-28,19}, -{48,-28,20}, -{48,-28,21}, -{48,-28,22}, -{48,-28,23}, -{48,-28,24}, -{48,-28,25}, -{48,-28,26}, -{48,-28,27}, -{48,-28,28}, -{48,-28,29}, -{48,-28,30}, -{48,-28,31}, -{48,-28,32}, -{48,-28,33}, -{48,-28,34}, -{48,-28,35}, -{48,-28,36}, -{48,-28,37}, -{48,-28,38}, -{48,-28,39}, -{48,-28,40}, -{48,-28,41}, -{48,-28,42}, -{48,-28,43}, -{48,-28,44}, -{48,-28,45}, -{48,-28,46}, -{48,-28,47}, -{48,-28,48}, -{48,-28,49}, -{48,-28,50}, -{48,-28,51}, -{48,-28,52}, -{48,-27,-11}, -{48,-27,-10}, -{48,-27,-9}, -{48,-27,-8}, -{48,-27,-7}, -{48,-27,-6}, -{48,-27,-5}, -{48,-27,-4}, -{48,-27,-3}, -{48,-27,-2}, -{48,-27,-1}, -{48,-27,0}, -{48,-27,1}, -{48,-27,2}, -{48,-27,3}, -{48,-27,4}, -{48,-27,5}, -{48,-27,6}, -{48,-27,7}, -{48,-27,8}, -{48,-27,9}, -{48,-27,10}, -{48,-27,11}, -{48,-27,12}, -{48,-27,13}, -{48,-27,14}, -{48,-27,15}, -{48,-27,16}, -{48,-27,17}, -{48,-27,18}, -{48,-27,19}, -{48,-27,20}, -{48,-27,21}, -{48,-27,22}, -{48,-27,23}, -{48,-27,24}, -{48,-27,25}, -{48,-27,26}, -{48,-27,27}, -{48,-27,28}, -{48,-27,29}, -{48,-27,30}, -{48,-27,31}, -{48,-27,32}, -{48,-27,33}, -{48,-27,34}, -{48,-27,35}, -{48,-27,36}, -{48,-27,37}, -{48,-27,38}, -{48,-27,39}, -{48,-27,40}, -{48,-27,41}, -{48,-27,42}, -{48,-27,43}, -{48,-27,44}, -{48,-27,45}, -{48,-27,46}, -{48,-27,47}, -{48,-27,48}, -{48,-27,49}, -{48,-27,50}, -{48,-27,51}, -{48,-27,52}, -{48,-26,-12}, -{48,-26,-11}, -{48,-26,-10}, -{48,-26,-9}, -{48,-26,-8}, -{48,-26,-7}, -{48,-26,-6}, -{48,-26,-5}, -{48,-26,-4}, -{48,-26,-3}, -{48,-26,-2}, -{48,-26,-1}, -{48,-26,0}, -{48,-26,1}, -{48,-26,2}, -{48,-26,3}, -{48,-26,4}, -{48,-26,5}, -{48,-26,6}, -{48,-26,7}, -{48,-26,8}, -{48,-26,9}, -{48,-26,10}, -{48,-26,11}, -{48,-26,12}, -{48,-26,13}, -{48,-26,14}, -{48,-26,15}, -{48,-26,16}, -{48,-26,17}, -{48,-26,18}, -{48,-26,19}, -{48,-26,20}, -{48,-26,21}, -{48,-26,22}, -{48,-26,23}, -{48,-26,24}, -{48,-26,25}, -{48,-26,26}, -{48,-26,27}, -{48,-26,28}, -{48,-26,29}, -{48,-26,30}, -{48,-26,31}, -{48,-26,32}, -{48,-26,33}, -{48,-26,34}, -{48,-26,35}, -{48,-26,36}, -{48,-26,37}, -{48,-26,38}, -{48,-26,39}, -{48,-26,40}, -{48,-26,41}, -{48,-26,42}, -{48,-26,43}, -{48,-26,44}, -{48,-26,45}, -{48,-26,46}, -{48,-26,47}, -{48,-26,48}, -{48,-26,49}, -{48,-26,50}, -{48,-26,51}, -{48,-26,52}, -{48,-25,-14}, -{48,-25,-13}, -{48,-25,-12}, -{48,-25,-11}, -{48,-25,-10}, -{48,-25,-9}, -{48,-25,-8}, -{48,-25,-7}, -{48,-25,-6}, -{48,-25,-5}, -{48,-25,-4}, -{48,-25,-3}, -{48,-25,-2}, -{48,-25,-1}, -{48,-25,0}, -{48,-25,1}, -{48,-25,2}, -{48,-25,3}, -{48,-25,4}, -{48,-25,5}, -{48,-25,6}, -{48,-25,7}, -{48,-25,8}, -{48,-25,9}, -{48,-25,10}, -{48,-25,11}, -{48,-25,12}, -{48,-25,13}, -{48,-25,14}, -{48,-25,15}, -{48,-25,16}, -{48,-25,17}, -{48,-25,18}, -{48,-25,19}, -{48,-25,20}, -{48,-25,21}, -{48,-25,22}, -{48,-25,23}, -{48,-25,24}, -{48,-25,25}, -{48,-25,26}, -{48,-25,27}, -{48,-25,28}, -{48,-25,29}, -{48,-25,30}, -{48,-25,31}, -{48,-25,32}, -{48,-25,33}, -{48,-25,34}, -{48,-25,35}, -{48,-25,36}, -{48,-25,37}, -{48,-25,38}, -{48,-25,39}, -{48,-25,40}, -{48,-25,41}, -{48,-25,42}, -{48,-25,43}, -{48,-25,44}, -{48,-25,45}, -{48,-25,46}, -{48,-25,47}, -{48,-25,48}, -{48,-25,49}, -{48,-25,50}, -{48,-25,51}, -{48,-25,52}, -{48,-24,-15}, -{48,-24,-14}, -{48,-24,-13}, -{48,-24,-12}, -{48,-24,-11}, -{48,-24,-10}, -{48,-24,-9}, -{48,-24,-8}, -{48,-24,-7}, -{48,-24,-6}, -{48,-24,-5}, -{48,-24,-4}, -{48,-24,-3}, -{48,-24,-2}, -{48,-24,-1}, -{48,-24,0}, -{48,-24,1}, -{48,-24,2}, -{48,-24,3}, -{48,-24,4}, -{48,-24,5}, -{48,-24,6}, -{48,-24,7}, -{48,-24,8}, -{48,-24,9}, -{48,-24,10}, -{48,-24,11}, -{48,-24,12}, -{48,-24,13}, -{48,-24,14}, -{48,-24,15}, -{48,-24,16}, -{48,-24,17}, -{48,-24,18}, -{48,-24,19}, -{48,-24,20}, -{48,-24,21}, -{48,-24,22}, -{48,-24,23}, -{48,-24,24}, -{48,-24,25}, -{48,-24,26}, -{48,-24,27}, -{48,-24,28}, -{48,-24,29}, -{48,-24,30}, -{48,-24,31}, -{48,-24,32}, -{48,-24,33}, -{48,-24,34}, -{48,-24,35}, -{48,-24,36}, -{48,-24,37}, -{48,-24,38}, -{48,-24,39}, -{48,-24,40}, -{48,-24,41}, -{48,-24,42}, -{48,-24,43}, -{48,-24,44}, -{48,-24,45}, -{48,-24,46}, -{48,-24,47}, -{48,-24,48}, -{48,-24,49}, -{48,-24,50}, -{48,-24,51}, -{48,-24,52}, -{48,-23,-17}, -{48,-23,-16}, -{48,-23,-15}, -{48,-23,-14}, -{48,-23,-13}, -{48,-23,-12}, -{48,-23,-11}, -{48,-23,-10}, -{48,-23,-9}, -{48,-23,-8}, -{48,-23,-7}, -{48,-23,-6}, -{48,-23,-5}, -{48,-23,-4}, -{48,-23,-3}, -{48,-23,-2}, -{48,-23,-1}, -{48,-23,0}, -{48,-23,1}, -{48,-23,2}, -{48,-23,3}, -{48,-23,4}, -{48,-23,5}, -{48,-23,6}, -{48,-23,7}, -{48,-23,8}, -{48,-23,9}, -{48,-23,10}, -{48,-23,11}, -{48,-23,12}, -{48,-23,13}, -{48,-23,14}, -{48,-23,15}, -{48,-23,16}, -{48,-23,17}, -{48,-23,18}, -{48,-23,19}, -{48,-23,20}, -{48,-23,21}, -{48,-23,22}, -{48,-23,23}, -{48,-23,24}, -{48,-23,25}, -{48,-23,26}, -{48,-23,27}, -{48,-23,28}, -{48,-23,29}, -{48,-23,30}, -{48,-23,31}, -{48,-23,32}, -{48,-23,33}, -{48,-23,34}, -{48,-23,35}, -{48,-23,36}, -{48,-23,37}, -{48,-23,38}, -{48,-23,39}, -{48,-23,40}, -{48,-23,41}, -{48,-23,42}, -{48,-23,43}, -{48,-23,44}, -{48,-23,45}, -{48,-23,46}, -{48,-23,47}, -{48,-23,48}, -{48,-23,49}, -{48,-23,50}, -{48,-23,51}, -{48,-23,52}, -{48,-22,-18}, -{48,-22,-17}, -{48,-22,-16}, -{48,-22,-15}, -{48,-22,-14}, -{48,-22,-13}, -{48,-22,-12}, -{48,-22,-11}, -{48,-22,-10}, -{48,-22,-9}, -{48,-22,-8}, -{48,-22,-7}, -{48,-22,-6}, -{48,-22,-5}, -{48,-22,-4}, -{48,-22,-3}, -{48,-22,-2}, -{48,-22,-1}, -{48,-22,0}, -{48,-22,1}, -{48,-22,2}, -{48,-22,3}, -{48,-22,4}, -{48,-22,5}, -{48,-22,6}, -{48,-22,7}, -{48,-22,8}, -{48,-22,9}, -{48,-22,10}, -{48,-22,11}, -{48,-22,12}, -{48,-22,13}, -{48,-22,14}, -{48,-22,15}, -{48,-22,16}, -{48,-22,17}, -{48,-22,18}, -{48,-22,19}, -{48,-22,20}, -{48,-22,21}, -{48,-22,22}, -{48,-22,23}, -{48,-22,24}, -{48,-22,25}, -{48,-22,26}, -{48,-22,27}, -{48,-22,28}, -{48,-22,29}, -{48,-22,30}, -{48,-22,31}, -{48,-22,32}, -{48,-22,33}, -{48,-22,34}, -{48,-22,35}, -{48,-22,36}, -{48,-22,37}, -{48,-22,38}, -{48,-22,39}, -{48,-22,40}, -{48,-22,41}, -{48,-22,42}, -{48,-22,43}, -{48,-22,44}, -{48,-22,45}, -{48,-22,46}, -{48,-22,47}, -{48,-22,48}, -{48,-22,49}, -{48,-22,50}, -{48,-22,51}, -{48,-22,52}, -{48,-22,53}, -{48,-21,-20}, -{48,-21,-19}, -{48,-21,-18}, -{48,-21,-17}, -{48,-21,-16}, -{48,-21,-15}, -{48,-21,-14}, -{48,-21,-13}, -{48,-21,-12}, -{48,-21,-11}, -{48,-21,-10}, -{48,-21,-9}, -{48,-21,-8}, -{48,-21,-7}, -{48,-21,-6}, -{48,-21,-5}, -{48,-21,-4}, -{48,-21,-3}, -{48,-21,-2}, -{48,-21,-1}, -{48,-21,0}, -{48,-21,1}, -{48,-21,2}, -{48,-21,3}, -{48,-21,4}, -{48,-21,5}, -{48,-21,6}, -{48,-21,7}, -{48,-21,8}, -{48,-21,9}, -{48,-21,10}, -{48,-21,11}, -{48,-21,12}, -{48,-21,13}, -{48,-21,14}, -{48,-21,15}, -{48,-21,16}, -{48,-21,17}, -{48,-21,18}, -{48,-21,19}, -{48,-21,20}, -{48,-21,21}, -{48,-21,22}, -{48,-21,23}, -{48,-21,24}, -{48,-21,25}, -{48,-21,26}, -{48,-21,27}, -{48,-21,28}, -{48,-21,29}, -{48,-21,30}, -{48,-21,31}, -{48,-21,32}, -{48,-21,33}, -{48,-21,34}, -{48,-21,35}, -{48,-21,36}, -{48,-21,37}, -{48,-21,38}, -{48,-21,39}, -{48,-21,40}, -{48,-21,41}, -{48,-21,42}, -{48,-21,43}, -{48,-21,44}, -{48,-21,45}, -{48,-21,46}, -{48,-21,47}, -{48,-21,48}, -{48,-21,49}, -{48,-21,50}, -{48,-21,51}, -{48,-21,52}, -{48,-21,53}, -{48,-20,-21}, -{48,-20,-20}, -{48,-20,-19}, -{48,-20,-18}, -{48,-20,-17}, -{48,-20,-16}, -{48,-20,-15}, -{48,-20,-14}, -{48,-20,-13}, -{48,-20,-12}, -{48,-20,-11}, -{48,-20,-10}, -{48,-20,-9}, -{48,-20,-8}, -{48,-20,-7}, -{48,-20,-6}, -{48,-20,-5}, -{48,-20,-4}, -{48,-20,-3}, -{48,-20,-2}, -{48,-20,-1}, -{48,-20,0}, -{48,-20,1}, -{48,-20,2}, -{48,-20,3}, -{48,-20,4}, -{48,-20,5}, -{48,-20,6}, -{48,-20,7}, -{48,-20,8}, -{48,-20,9}, -{48,-20,10}, -{48,-20,11}, -{48,-20,12}, -{48,-20,13}, -{48,-20,14}, -{48,-20,15}, -{48,-20,16}, -{48,-20,17}, -{48,-20,18}, -{48,-20,19}, -{48,-20,20}, -{48,-20,21}, -{48,-20,22}, -{48,-20,23}, -{48,-20,24}, -{48,-20,25}, -{48,-20,26}, -{48,-20,27}, -{48,-20,28}, -{48,-20,29}, -{48,-20,30}, -{48,-20,31}, -{48,-20,32}, -{48,-20,33}, -{48,-20,34}, -{48,-20,35}, -{48,-20,36}, -{48,-20,37}, -{48,-20,38}, -{48,-20,39}, -{48,-20,40}, -{48,-20,41}, -{48,-20,42}, -{48,-20,43}, -{48,-20,44}, -{48,-20,45}, -{48,-20,46}, -{48,-20,47}, -{48,-20,48}, -{48,-20,49}, -{48,-20,50}, -{48,-20,51}, -{48,-20,52}, -{48,-20,53}, -{48,-19,-22}, -{48,-19,-21}, -{48,-19,-20}, -{48,-19,-19}, -{48,-19,-18}, -{48,-19,-17}, -{48,-19,-16}, -{48,-19,-15}, -{48,-19,-14}, -{48,-19,-13}, -{48,-19,-12}, -{48,-19,-11}, -{48,-19,-10}, -{48,-19,-9}, -{48,-19,-8}, -{48,-19,-7}, -{48,-19,-6}, -{48,-19,-5}, -{48,-19,-4}, -{48,-19,-3}, -{48,-19,-2}, -{48,-19,-1}, -{48,-19,0}, -{48,-19,1}, -{48,-19,2}, -{48,-19,3}, -{48,-19,4}, -{48,-19,5}, -{48,-19,6}, -{48,-19,7}, -{48,-19,8}, -{48,-19,9}, -{48,-19,10}, -{48,-19,11}, -{48,-19,12}, -{48,-19,13}, -{48,-19,14}, -{48,-19,15}, -{48,-19,16}, -{48,-19,17}, -{48,-19,18}, -{48,-19,19}, -{48,-19,20}, -{48,-19,21}, -{48,-19,22}, -{48,-19,23}, -{48,-19,24}, -{48,-19,25}, -{48,-19,26}, -{48,-19,27}, -{48,-19,28}, -{48,-19,29}, -{48,-19,30}, -{48,-19,31}, -{48,-19,32}, -{48,-19,33}, -{48,-19,34}, -{48,-19,35}, -{48,-19,36}, -{48,-19,37}, -{48,-19,38}, -{48,-19,39}, -{48,-19,40}, -{48,-19,41}, -{48,-19,42}, -{48,-19,43}, -{48,-19,44}, -{48,-19,45}, -{48,-19,46}, -{48,-19,47}, -{48,-19,48}, -{48,-19,49}, -{48,-19,50}, -{48,-19,51}, -{48,-19,52}, -{48,-19,53}, -{48,-18,-24}, -{48,-18,-23}, -{48,-18,-22}, -{48,-18,-21}, -{48,-18,-20}, -{48,-18,-19}, -{48,-18,-18}, -{48,-18,-17}, -{48,-18,-16}, -{48,-18,-15}, -{48,-18,-14}, -{48,-18,-13}, -{48,-18,-12}, -{48,-18,-11}, -{48,-18,-10}, -{48,-18,-9}, -{48,-18,-8}, -{48,-18,-7}, -{48,-18,-6}, -{48,-18,-5}, -{48,-18,-4}, -{48,-18,-3}, -{48,-18,-2}, -{48,-18,-1}, -{48,-18,0}, -{48,-18,1}, -{48,-18,2}, -{48,-18,3}, -{48,-18,4}, -{48,-18,5}, -{48,-18,6}, -{48,-18,7}, -{48,-18,8}, -{48,-18,9}, -{48,-18,10}, -{48,-18,11}, -{48,-18,12}, -{48,-18,13}, -{48,-18,14}, -{48,-18,15}, -{48,-18,16}, -{48,-18,17}, -{48,-18,18}, -{48,-18,19}, -{48,-18,20}, -{48,-18,21}, -{48,-18,22}, -{48,-18,23}, -{48,-18,24}, -{48,-18,25}, -{48,-18,26}, -{48,-18,27}, -{48,-18,28}, -{48,-18,29}, -{48,-18,30}, -{48,-18,31}, -{48,-18,32}, -{48,-18,33}, -{48,-18,34}, -{48,-18,35}, -{48,-18,36}, -{48,-18,37}, -{48,-18,38}, -{48,-18,39}, -{48,-18,40}, -{48,-18,41}, -{48,-18,42}, -{48,-18,43}, -{48,-18,44}, -{48,-18,45}, -{48,-18,46}, -{48,-18,47}, -{48,-18,48}, -{48,-18,49}, -{48,-18,50}, -{48,-18,51}, -{48,-18,52}, -{48,-18,53}, -{48,-17,-25}, -{48,-17,-24}, -{48,-17,-23}, -{48,-17,-22}, -{48,-17,-21}, -{48,-17,-20}, -{48,-17,-19}, -{48,-17,-18}, -{48,-17,-17}, -{48,-17,-16}, -{48,-17,-15}, -{48,-17,-14}, -{48,-17,-13}, -{48,-17,-12}, -{48,-17,-11}, -{48,-17,-10}, -{48,-17,-9}, -{48,-17,-8}, -{48,-17,-7}, -{48,-17,-6}, -{48,-17,-5}, -{48,-17,-4}, -{48,-17,-3}, -{48,-17,-2}, -{48,-17,-1}, -{48,-17,0}, -{48,-17,1}, -{48,-17,2}, -{48,-17,3}, -{48,-17,4}, -{48,-17,5}, -{48,-17,6}, -{48,-17,7}, -{48,-17,8}, -{48,-17,9}, -{48,-17,10}, -{48,-17,11}, -{48,-17,12}, -{48,-17,13}, -{48,-17,14}, -{48,-17,15}, -{48,-17,16}, -{48,-17,17}, -{48,-17,18}, -{48,-17,19}, -{48,-17,20}, -{48,-17,21}, -{48,-17,22}, -{48,-17,23}, -{48,-17,24}, -{48,-17,25}, -{48,-17,26}, -{48,-17,27}, -{48,-17,28}, -{48,-17,29}, -{48,-17,30}, -{48,-17,31}, -{48,-17,32}, -{48,-17,33}, -{48,-17,34}, -{48,-17,35}, -{48,-17,36}, -{48,-17,37}, -{48,-17,38}, -{48,-17,39}, -{48,-17,40}, -{48,-17,41}, -{48,-17,42}, -{48,-17,43}, -{48,-17,44}, -{48,-17,45}, -{48,-17,46}, -{48,-17,47}, -{48,-17,48}, -{48,-17,49}, -{48,-17,50}, -{48,-17,51}, -{48,-17,52}, -{48,-17,53}, -{48,-16,-26}, -{48,-16,-25}, -{48,-16,-24}, -{48,-16,-23}, -{48,-16,-22}, -{48,-16,-21}, -{48,-16,-20}, -{48,-16,-19}, -{48,-16,-18}, -{48,-16,-17}, -{48,-16,-16}, -{48,-16,-15}, -{48,-16,-14}, -{48,-16,-13}, -{48,-16,-12}, -{48,-16,-11}, -{48,-16,-10}, -{48,-16,-9}, -{48,-16,-8}, -{48,-16,-7}, -{48,-16,-6}, -{48,-16,-5}, -{48,-16,-4}, -{48,-16,-3}, -{48,-16,-2}, -{48,-16,-1}, -{48,-16,0}, -{48,-16,1}, -{48,-16,2}, -{48,-16,3}, -{48,-16,4}, -{48,-16,5}, -{48,-16,6}, -{48,-16,7}, -{48,-16,8}, -{48,-16,9}, -{48,-16,10}, -{48,-16,11}, -{48,-16,12}, -{48,-16,13}, -{48,-16,14}, -{48,-16,15}, -{48,-16,16}, -{48,-16,17}, -{48,-16,18}, -{48,-16,19}, -{48,-16,20}, -{48,-16,21}, -{48,-16,22}, -{48,-16,23}, -{48,-16,24}, -{48,-16,25}, -{48,-16,26}, -{48,-16,27}, -{48,-16,28}, -{48,-16,29}, -{48,-16,30}, -{48,-16,31}, -{48,-16,32}, -{48,-16,33}, -{48,-16,34}, -{48,-16,35}, -{48,-16,36}, -{48,-16,37}, -{48,-16,38}, -{48,-16,39}, -{48,-16,40}, -{48,-16,41}, -{48,-16,42}, -{48,-16,43}, -{48,-16,44}, -{48,-16,45}, -{48,-16,46}, -{48,-16,47}, -{48,-16,48}, -{48,-16,49}, -{48,-16,50}, -{48,-16,51}, -{48,-16,52}, -{48,-16,53}, -{48,-15,-28}, -{48,-15,-27}, -{48,-15,-26}, -{48,-15,-25}, -{48,-15,-24}, -{48,-15,-23}, -{48,-15,-22}, -{48,-15,-21}, -{48,-15,-20}, -{48,-15,-19}, -{48,-15,-18}, -{48,-15,-17}, -{48,-15,-16}, -{48,-15,-15}, -{48,-15,-14}, -{48,-15,-13}, -{48,-15,-12}, -{48,-15,-11}, -{48,-15,-10}, -{48,-15,-9}, -{48,-15,-8}, -{48,-15,-7}, -{48,-15,-6}, -{48,-15,-5}, -{48,-15,-4}, -{48,-15,-3}, -{48,-15,-2}, -{48,-15,-1}, -{48,-15,0}, -{48,-15,1}, -{48,-15,2}, -{48,-15,3}, -{48,-15,4}, -{48,-15,5}, -{48,-15,6}, -{48,-15,7}, -{48,-15,8}, -{48,-15,9}, -{48,-15,10}, -{48,-15,11}, -{48,-15,12}, -{48,-15,13}, -{48,-15,14}, -{48,-15,15}, -{48,-15,16}, -{48,-15,17}, -{48,-15,18}, -{48,-15,19}, -{48,-15,20}, -{48,-15,21}, -{48,-15,22}, -{48,-15,23}, -{48,-15,24}, -{48,-15,25}, -{48,-15,26}, -{48,-15,27}, -{48,-15,28}, -{48,-15,29}, -{48,-15,30}, -{48,-15,31}, -{48,-15,32}, -{48,-15,33}, -{48,-15,34}, -{48,-15,35}, -{48,-15,36}, -{48,-15,37}, -{48,-15,38}, -{48,-15,39}, -{48,-15,40}, -{48,-15,41}, -{48,-15,42}, -{48,-15,43}, -{48,-15,44}, -{48,-15,45}, -{48,-15,46}, -{48,-15,47}, -{48,-15,48}, -{48,-15,49}, -{48,-15,50}, -{48,-15,51}, -{48,-15,52}, -{48,-15,53}, -{48,-14,-29}, -{48,-14,-28}, -{48,-14,-27}, -{48,-14,-26}, -{48,-14,-25}, -{48,-14,-24}, -{48,-14,-23}, -{48,-14,-22}, -{48,-14,-21}, -{48,-14,-20}, -{48,-14,-19}, -{48,-14,-18}, -{48,-14,-17}, -{48,-14,-16}, -{48,-14,-15}, -{48,-14,-14}, -{48,-14,-13}, -{48,-14,-12}, -{48,-14,-11}, -{48,-14,-10}, -{48,-14,-9}, -{48,-14,-8}, -{48,-14,-7}, -{48,-14,-6}, -{48,-14,-5}, -{48,-14,-4}, -{48,-14,-3}, -{48,-14,-2}, -{48,-14,-1}, -{48,-14,0}, -{48,-14,1}, -{48,-14,2}, -{48,-14,3}, -{48,-14,4}, -{48,-14,5}, -{48,-14,6}, -{48,-14,7}, -{48,-14,8}, -{48,-14,9}, -{48,-14,10}, -{48,-14,11}, -{48,-14,12}, -{48,-14,13}, -{48,-14,14}, -{48,-14,15}, -{48,-14,16}, -{48,-14,17}, -{48,-14,18}, -{48,-14,19}, -{48,-14,20}, -{48,-14,21}, -{48,-14,22}, -{48,-14,23}, -{48,-14,24}, -{48,-14,25}, -{48,-14,26}, -{48,-14,27}, -{48,-14,28}, -{48,-14,29}, -{48,-14,30}, -{48,-14,31}, -{48,-14,32}, -{48,-14,33}, -{48,-14,34}, -{48,-14,35}, -{48,-14,36}, -{48,-14,37}, -{48,-14,38}, -{48,-14,39}, -{48,-14,40}, -{48,-14,41}, -{48,-14,42}, -{48,-14,43}, -{48,-14,44}, -{48,-14,45}, -{48,-14,46}, -{48,-14,47}, -{48,-14,48}, -{48,-14,49}, -{48,-14,50}, -{48,-14,51}, -{48,-14,52}, -{48,-14,53}, -{48,-13,-30}, -{48,-13,-29}, -{48,-13,-28}, -{48,-13,-27}, -{48,-13,-26}, -{48,-13,-25}, -{48,-13,-24}, -{48,-13,-23}, -{48,-13,-22}, -{48,-13,-21}, -{48,-13,-20}, -{48,-13,-19}, -{48,-13,-18}, -{48,-13,-17}, -{48,-13,-16}, -{48,-13,-15}, -{48,-13,-14}, -{48,-13,-13}, -{48,-13,-12}, -{48,-13,-11}, -{48,-13,-10}, -{48,-13,-9}, -{48,-13,-8}, -{48,-13,-7}, -{48,-13,-6}, -{48,-13,-5}, -{48,-13,-4}, -{48,-13,-3}, -{48,-13,-2}, -{48,-13,-1}, -{48,-13,0}, -{48,-13,1}, -{48,-13,2}, -{48,-13,3}, -{48,-13,4}, -{48,-13,5}, -{48,-13,6}, -{48,-13,7}, -{48,-13,8}, -{48,-13,9}, -{48,-13,10}, -{48,-13,11}, -{48,-13,12}, -{48,-13,13}, -{48,-13,14}, -{48,-13,15}, -{48,-13,16}, -{48,-13,17}, -{48,-13,18}, -{48,-13,19}, -{48,-13,20}, -{48,-13,21}, -{48,-13,22}, -{48,-13,23}, -{48,-13,24}, -{48,-13,25}, -{48,-13,26}, -{48,-13,27}, -{48,-13,28}, -{48,-13,29}, -{48,-13,30}, -{48,-13,31}, -{48,-13,32}, -{48,-13,33}, -{48,-13,34}, -{48,-13,35}, -{48,-13,36}, -{48,-13,37}, -{48,-13,38}, -{48,-13,39}, -{48,-13,40}, -{48,-13,41}, -{48,-13,42}, -{48,-13,43}, -{48,-13,44}, -{48,-13,45}, -{48,-13,46}, -{48,-13,47}, -{48,-13,48}, -{48,-13,49}, -{48,-13,50}, -{48,-13,51}, -{48,-13,52}, -{48,-13,53}, -{48,-12,-31}, -{48,-12,-30}, -{48,-12,-29}, -{48,-12,-28}, -{48,-12,-27}, -{48,-12,-26}, -{48,-12,-25}, -{48,-12,-24}, -{48,-12,-23}, -{48,-12,-22}, -{48,-12,-21}, -{48,-12,-20}, -{48,-12,-19}, -{48,-12,-18}, -{48,-12,-17}, -{48,-12,-16}, -{48,-12,-15}, -{48,-12,-14}, -{48,-12,-13}, -{48,-12,-12}, -{48,-12,-11}, -{48,-12,-10}, -{48,-12,-9}, -{48,-12,-8}, -{48,-12,-7}, -{48,-12,-6}, -{48,-12,-5}, -{48,-12,-4}, -{48,-12,-3}, -{48,-12,-2}, -{48,-12,-1}, -{48,-12,0}, -{48,-12,1}, -{48,-12,2}, -{48,-12,3}, -{48,-12,4}, -{48,-12,5}, -{48,-12,6}, -{48,-12,7}, -{48,-12,8}, -{48,-12,9}, -{48,-12,10}, -{48,-12,11}, -{48,-12,12}, -{48,-12,13}, -{48,-12,14}, -{48,-12,15}, -{48,-12,16}, -{48,-12,17}, -{48,-12,18}, -{48,-12,19}, -{48,-12,20}, -{48,-12,21}, -{48,-12,22}, -{48,-12,23}, -{48,-12,24}, -{48,-12,25}, -{48,-12,26}, -{48,-12,27}, -{48,-12,28}, -{48,-12,29}, -{48,-12,30}, -{48,-12,31}, -{48,-12,32}, -{48,-12,33}, -{48,-12,34}, -{48,-12,35}, -{48,-12,36}, -{48,-12,37}, -{48,-12,38}, -{48,-12,39}, -{48,-12,40}, -{48,-12,41}, -{48,-12,42}, -{48,-12,43}, -{48,-12,44}, -{48,-12,45}, -{48,-12,46}, -{48,-12,47}, -{48,-12,48}, -{48,-12,49}, -{48,-12,50}, -{48,-12,51}, -{48,-12,52}, -{48,-12,53}, -{48,-11,-33}, -{48,-11,-32}, -{48,-11,-31}, -{48,-11,-30}, -{48,-11,-29}, -{48,-11,-28}, -{48,-11,-27}, -{48,-11,-26}, -{48,-11,-25}, -{48,-11,-24}, -{48,-11,-23}, -{48,-11,-22}, -{48,-11,-21}, -{48,-11,-20}, -{48,-11,-19}, -{48,-11,-18}, -{48,-11,-17}, -{48,-11,-16}, -{48,-11,-15}, -{48,-11,-14}, -{48,-11,-13}, -{48,-11,-12}, -{48,-11,-11}, -{48,-11,-10}, -{48,-11,-9}, -{48,-11,-8}, -{48,-11,-7}, -{48,-11,-6}, -{48,-11,-5}, -{48,-11,-4}, -{48,-11,-3}, -{48,-11,-2}, -{48,-11,-1}, -{48,-11,0}, -{48,-11,1}, -{48,-11,2}, -{48,-11,3}, -{48,-11,4}, -{48,-11,5}, -{48,-11,6}, -{48,-11,7}, -{48,-11,8}, -{48,-11,9}, -{48,-11,10}, -{48,-11,11}, -{48,-11,12}, -{48,-11,13}, -{48,-11,14}, -{48,-11,15}, -{48,-11,16}, -{48,-11,17}, -{48,-11,18}, -{48,-11,19}, -{48,-11,20}, -{48,-11,21}, -{48,-11,22}, -{48,-11,23}, -{48,-11,24}, -{48,-11,25}, -{48,-11,26}, -{48,-11,27}, -{48,-11,28}, -{48,-11,29}, -{48,-11,30}, -{48,-11,31}, -{48,-11,32}, -{48,-11,33}, -{48,-11,34}, -{48,-11,35}, -{48,-11,36}, -{48,-11,37}, -{48,-11,38}, -{48,-11,39}, -{48,-11,40}, -{48,-11,41}, -{48,-11,42}, -{48,-11,43}, -{48,-11,44}, -{48,-11,45}, -{48,-11,46}, -{48,-11,47}, -{48,-11,48}, -{48,-11,49}, -{48,-11,50}, -{48,-11,51}, -{48,-11,52}, -{48,-11,53}, -{48,-10,-34}, -{48,-10,-33}, -{48,-10,-32}, -{48,-10,-31}, -{48,-10,-30}, -{48,-10,-29}, -{48,-10,-28}, -{48,-10,-27}, -{48,-10,-26}, -{48,-10,-25}, -{48,-10,-24}, -{48,-10,-23}, -{48,-10,-22}, -{48,-10,-21}, -{48,-10,-20}, -{48,-10,-19}, -{48,-10,-18}, -{48,-10,-17}, -{48,-10,-16}, -{48,-10,-15}, -{48,-10,-14}, -{48,-10,-13}, -{48,-10,-12}, -{48,-10,-11}, -{48,-10,-10}, -{48,-10,-9}, -{48,-10,-8}, -{48,-10,-7}, -{48,-10,-6}, -{48,-10,-5}, -{48,-10,-4}, -{48,-10,-3}, -{48,-10,-2}, -{48,-10,-1}, -{48,-10,0}, -{48,-10,1}, -{48,-10,2}, -{48,-10,3}, -{48,-10,4}, -{48,-10,5}, -{48,-10,6}, -{48,-10,7}, -{48,-10,8}, -{48,-10,9}, -{48,-10,10}, -{48,-10,11}, -{48,-10,12}, -{48,-10,13}, -{48,-10,14}, -{48,-10,15}, -{48,-10,16}, -{48,-10,17}, -{48,-10,18}, -{48,-10,19}, -{48,-10,20}, -{48,-10,21}, -{48,-10,22}, -{48,-10,23}, -{48,-10,24}, -{48,-10,25}, -{48,-10,26}, -{48,-10,27}, -{48,-10,28}, -{48,-10,29}, -{48,-10,30}, -{48,-10,31}, -{48,-10,32}, -{48,-10,33}, -{48,-10,34}, -{48,-10,35}, -{48,-10,36}, -{48,-10,37}, -{48,-10,38}, -{48,-10,39}, -{48,-10,40}, -{48,-10,41}, -{48,-10,42}, -{48,-10,43}, -{48,-10,44}, -{48,-10,45}, -{48,-10,46}, -{48,-10,47}, -{48,-10,48}, -{48,-10,49}, -{48,-10,50}, -{48,-10,51}, -{48,-10,52}, -{48,-10,53}, -{48,-9,-35}, -{48,-9,-34}, -{48,-9,-33}, -{48,-9,-32}, -{48,-9,-31}, -{48,-9,-30}, -{48,-9,-29}, -{48,-9,-28}, -{48,-9,-27}, -{48,-9,-26}, -{48,-9,-25}, -{48,-9,-24}, -{48,-9,-23}, -{48,-9,-22}, -{48,-9,-21}, -{48,-9,-20}, -{48,-9,-19}, -{48,-9,-18}, -{48,-9,-17}, -{48,-9,-16}, -{48,-9,-15}, -{48,-9,-14}, -{48,-9,-13}, -{48,-9,-12}, -{48,-9,-11}, -{48,-9,-10}, -{48,-9,-9}, -{48,-9,-8}, -{48,-9,-7}, -{48,-9,-6}, -{48,-9,-5}, -{48,-9,-4}, -{48,-9,-3}, -{48,-9,-2}, -{48,-9,-1}, -{48,-9,0}, -{48,-9,1}, -{48,-9,2}, -{48,-9,3}, -{48,-9,4}, -{48,-9,5}, -{48,-9,6}, -{48,-9,7}, -{48,-9,8}, -{48,-9,9}, -{48,-9,10}, -{48,-9,11}, -{48,-9,12}, -{48,-9,13}, -{48,-9,14}, -{48,-9,15}, -{48,-9,16}, -{48,-9,17}, -{48,-9,18}, -{48,-9,19}, -{48,-9,20}, -{48,-9,21}, -{48,-9,22}, -{48,-9,23}, -{48,-9,24}, -{48,-9,25}, -{48,-9,26}, -{48,-9,27}, -{48,-9,28}, -{48,-9,29}, -{48,-9,30}, -{48,-9,31}, -{48,-9,32}, -{48,-9,33}, -{48,-9,34}, -{48,-9,35}, -{48,-9,36}, -{48,-9,37}, -{48,-9,38}, -{48,-9,39}, -{48,-9,40}, -{48,-9,41}, -{48,-9,42}, -{48,-9,43}, -{48,-9,44}, -{48,-9,45}, -{48,-9,46}, -{48,-9,47}, -{48,-9,48}, -{48,-9,49}, -{48,-9,50}, -{48,-9,51}, -{48,-9,52}, -{48,-9,53}, -{48,-8,-36}, -{48,-8,-35}, -{48,-8,-34}, -{48,-8,-33}, -{48,-8,-32}, -{48,-8,-31}, -{48,-8,-30}, -{48,-8,-29}, -{48,-8,-28}, -{48,-8,-27}, -{48,-8,-26}, -{48,-8,-25}, -{48,-8,-24}, -{48,-8,-23}, -{48,-8,-22}, -{48,-8,-21}, -{48,-8,-20}, -{48,-8,-19}, -{48,-8,-18}, -{48,-8,-17}, -{48,-8,-16}, -{48,-8,-15}, -{48,-8,-14}, -{48,-8,-13}, -{48,-8,-12}, -{48,-8,-11}, -{48,-8,-10}, -{48,-8,-9}, -{48,-8,-8}, -{48,-8,-7}, -{48,-8,-6}, -{48,-8,-5}, -{48,-8,-4}, -{48,-8,-3}, -{48,-8,-2}, -{48,-8,-1}, -{48,-8,0}, -{48,-8,1}, -{48,-8,2}, -{48,-8,3}, -{48,-8,4}, -{48,-8,5}, -{48,-8,6}, -{48,-8,7}, -{48,-8,8}, -{48,-8,9}, -{48,-8,10}, -{48,-8,11}, -{48,-8,12}, -{48,-8,13}, -{48,-8,14}, -{48,-8,15}, -{48,-8,16}, -{48,-8,17}, -{48,-8,18}, -{48,-8,19}, -{48,-8,20}, -{48,-8,21}, -{48,-8,22}, -{48,-8,23}, -{48,-8,24}, -{48,-8,25}, -{48,-8,26}, -{48,-8,27}, -{48,-8,28}, -{48,-8,29}, -{48,-8,30}, -{48,-8,31}, -{48,-8,32}, -{48,-8,33}, -{48,-8,34}, -{48,-8,35}, -{48,-8,36}, -{48,-8,37}, -{48,-8,38}, -{48,-8,39}, -{48,-8,40}, -{48,-8,41}, -{48,-8,42}, -{48,-8,43}, -{48,-8,44}, -{48,-8,45}, -{48,-8,46}, -{48,-8,47}, -{48,-8,48}, -{48,-8,49}, -{48,-8,50}, -{48,-8,51}, -{48,-8,52}, -{48,-8,53}, -{48,-7,-38}, -{48,-7,-37}, -{48,-7,-36}, -{48,-7,-35}, -{48,-7,-34}, -{48,-7,-33}, -{48,-7,-32}, -{48,-7,-31}, -{48,-7,-30}, -{48,-7,-29}, -{48,-7,-28}, -{48,-7,-27}, -{48,-7,-26}, -{48,-7,-25}, -{48,-7,-24}, -{48,-7,-23}, -{48,-7,-22}, -{48,-7,-21}, -{48,-7,-20}, -{48,-7,-19}, -{48,-7,-18}, -{48,-7,-17}, -{48,-7,-16}, -{48,-7,-15}, -{48,-7,-14}, -{48,-7,-13}, -{48,-7,-12}, -{48,-7,-11}, -{48,-7,-10}, -{48,-7,-9}, -{48,-7,-8}, -{48,-7,-7}, -{48,-7,-6}, -{48,-7,-5}, -{48,-7,-4}, -{48,-7,-3}, -{48,-7,-2}, -{48,-7,-1}, -{48,-7,0}, -{48,-7,1}, -{48,-7,2}, -{48,-7,3}, -{48,-7,4}, -{48,-7,5}, -{48,-7,6}, -{48,-7,7}, -{48,-7,8}, -{48,-7,9}, -{48,-7,10}, -{48,-7,11}, -{48,-7,12}, -{48,-7,13}, -{48,-7,14}, -{48,-7,15}, -{48,-7,16}, -{48,-7,17}, -{48,-7,18}, -{48,-7,19}, -{48,-7,20}, -{48,-7,21}, -{48,-7,22}, -{48,-7,23}, -{48,-7,24}, -{48,-7,25}, -{48,-7,26}, -{48,-7,27}, -{48,-7,28}, -{48,-7,29}, -{48,-7,30}, -{48,-7,31}, -{48,-7,32}, -{48,-7,33}, -{48,-7,34}, -{48,-7,35}, -{48,-7,36}, -{48,-7,37}, -{48,-7,38}, -{48,-7,39}, -{48,-7,40}, -{48,-7,41}, -{48,-7,42}, -{48,-7,43}, -{48,-7,44}, -{48,-7,45}, -{48,-7,46}, -{48,-7,47}, -{48,-7,48}, -{48,-7,49}, -{48,-7,50}, -{48,-7,51}, -{48,-7,52}, -{48,-7,53}, -{48,-6,-39}, -{48,-6,-38}, -{48,-6,-37}, -{48,-6,-36}, -{48,-6,-35}, -{48,-6,-34}, -{48,-6,-33}, -{48,-6,-32}, -{48,-6,-31}, -{48,-6,-30}, -{48,-6,-29}, -{48,-6,-28}, -{48,-6,-27}, -{48,-6,-26}, -{48,-6,-25}, -{48,-6,-24}, -{48,-6,-23}, -{48,-6,-22}, -{48,-6,-21}, -{48,-6,-20}, -{48,-6,-19}, -{48,-6,-18}, -{48,-6,-17}, -{48,-6,-16}, -{48,-6,-15}, -{48,-6,-14}, -{48,-6,-13}, -{48,-6,-12}, -{48,-6,-11}, -{48,-6,-10}, -{48,-6,-9}, -{48,-6,-8}, -{48,-6,-7}, -{48,-6,-6}, -{48,-6,-5}, -{48,-6,-4}, -{48,-6,-3}, -{48,-6,-2}, -{48,-6,-1}, -{48,-6,0}, -{48,-6,1}, -{48,-6,2}, -{48,-6,3}, -{48,-6,4}, -{48,-6,5}, -{48,-6,6}, -{48,-6,7}, -{48,-6,8}, -{48,-6,9}, -{48,-6,10}, -{48,-6,11}, -{48,-6,12}, -{48,-6,13}, -{48,-6,14}, -{48,-6,15}, -{48,-6,16}, -{48,-6,17}, -{48,-6,18}, -{48,-6,19}, -{48,-6,20}, -{48,-6,21}, -{48,-6,22}, -{48,-6,23}, -{48,-6,24}, -{48,-6,25}, -{48,-6,26}, -{48,-6,27}, -{48,-6,28}, -{48,-6,29}, -{48,-6,30}, -{48,-6,31}, -{48,-6,32}, -{48,-6,33}, -{48,-6,34}, -{48,-6,35}, -{48,-6,36}, -{48,-6,37}, -{48,-6,38}, -{48,-6,39}, -{48,-6,40}, -{48,-6,41}, -{48,-6,42}, -{48,-6,43}, -{48,-6,44}, -{48,-6,45}, -{48,-6,46}, -{48,-6,47}, -{48,-6,48}, -{48,-6,49}, -{48,-6,50}, -{48,-6,51}, -{48,-6,52}, -{48,-6,53}, -{48,-6,54}, -{48,-5,-40}, -{48,-5,-39}, -{48,-5,-38}, -{48,-5,-37}, -{48,-5,-36}, -{48,-5,-35}, -{48,-5,-34}, -{48,-5,-33}, -{48,-5,-32}, -{48,-5,-31}, -{48,-5,-30}, -{48,-5,-29}, -{48,-5,-28}, -{48,-5,-27}, -{48,-5,-26}, -{48,-5,-25}, -{48,-5,-24}, -{48,-5,-23}, -{48,-5,-22}, -{48,-5,-21}, -{48,-5,-20}, -{48,-5,-19}, -{48,-5,-18}, -{48,-5,-17}, -{48,-5,-16}, -{48,-5,-15}, -{48,-5,-14}, -{48,-5,-13}, -{48,-5,-12}, -{48,-5,-11}, -{48,-5,-10}, -{48,-5,-9}, -{48,-5,-8}, -{48,-5,-7}, -{48,-5,-6}, -{48,-5,-5}, -{48,-5,-4}, -{48,-5,-3}, -{48,-5,-2}, -{48,-5,-1}, -{48,-5,0}, -{48,-5,1}, -{48,-5,2}, -{48,-5,3}, -{48,-5,4}, -{48,-5,5}, -{48,-5,6}, -{48,-5,7}, -{48,-5,8}, -{48,-5,9}, -{48,-5,10}, -{48,-5,11}, -{48,-5,12}, -{48,-5,13}, -{48,-5,14}, -{48,-5,15}, -{48,-5,16}, -{48,-5,17}, -{48,-5,18}, -{48,-5,19}, -{48,-5,20}, -{48,-5,21}, -{48,-5,22}, -{48,-5,23}, -{48,-5,24}, -{48,-5,25}, -{48,-5,26}, -{48,-5,27}, -{48,-5,28}, -{48,-5,29}, -{48,-5,30}, -{48,-5,31}, -{48,-5,32}, -{48,-5,33}, -{48,-5,34}, -{48,-5,35}, -{48,-5,36}, -{48,-5,37}, -{48,-5,38}, -{48,-5,39}, -{48,-5,40}, -{48,-5,41}, -{48,-5,42}, -{48,-5,43}, -{48,-5,44}, -{48,-5,45}, -{48,-5,46}, -{48,-5,47}, -{48,-5,48}, -{48,-5,49}, -{48,-5,50}, -{48,-5,51}, -{48,-5,52}, -{48,-5,53}, -{48,-5,54}, -{48,-4,-41}, -{48,-4,-40}, -{48,-4,-39}, -{48,-4,-38}, -{48,-4,-37}, -{48,-4,-36}, -{48,-4,-35}, -{48,-4,-34}, -{48,-4,-33}, -{48,-4,-32}, -{48,-4,-31}, -{48,-4,-30}, -{48,-4,-29}, -{48,-4,-28}, -{48,-4,-27}, -{48,-4,-26}, -{48,-4,-25}, -{48,-4,-24}, -{48,-4,-23}, -{48,-4,-22}, -{48,-4,-21}, -{48,-4,-20}, -{48,-4,-19}, -{48,-4,-18}, -{48,-4,-17}, -{48,-4,-16}, -{48,-4,-15}, -{48,-4,-14}, -{48,-4,-13}, -{48,-4,-12}, -{48,-4,-11}, -{48,-4,-10}, -{48,-4,-9}, -{48,-4,-8}, -{48,-4,-7}, -{48,-4,-6}, -{48,-4,-5}, -{48,-4,-4}, -{48,-4,-3}, -{48,-4,-2}, -{48,-4,-1}, -{48,-4,0}, -{48,-4,1}, -{48,-4,2}, -{48,-4,3}, -{48,-4,4}, -{48,-4,5}, -{48,-4,6}, -{48,-4,7}, -{48,-4,8}, -{48,-4,9}, -{48,-4,10}, -{48,-4,11}, -{48,-4,12}, -{48,-4,13}, -{48,-4,14}, -{48,-4,15}, -{48,-4,16}, -{48,-4,17}, -{48,-4,18}, -{48,-4,19}, -{48,-4,20}, -{48,-4,21}, -{48,-4,22}, -{48,-4,23}, -{48,-4,24}, -{48,-4,25}, -{48,-4,26}, -{48,-4,27}, -{48,-4,28}, -{48,-4,29}, -{48,-4,30}, -{48,-4,31}, -{48,-4,32}, -{48,-4,33}, -{48,-4,34}, -{48,-4,35}, -{48,-4,36}, -{48,-4,37}, -{48,-4,38}, -{48,-4,39}, -{48,-4,40}, -{48,-4,41}, -{48,-4,42}, -{48,-4,43}, -{48,-4,44}, -{48,-4,45}, -{48,-4,46}, -{48,-4,47}, -{48,-4,48}, -{48,-4,49}, -{48,-4,50}, -{48,-4,51}, -{48,-4,52}, -{48,-4,53}, -{48,-4,54}, -{48,-3,-42}, -{48,-3,-41}, -{48,-3,-40}, -{48,-3,-39}, -{48,-3,-38}, -{48,-3,-37}, -{48,-3,-36}, -{48,-3,-35}, -{48,-3,-34}, -{48,-3,-33}, -{48,-3,-32}, -{48,-3,-31}, -{48,-3,-30}, -{48,-3,-29}, -{48,-3,-28}, -{48,-3,-27}, -{48,-3,-26}, -{48,-3,-25}, -{48,-3,-24}, -{48,-3,-23}, -{48,-3,-22}, -{48,-3,-21}, -{48,-3,-20}, -{48,-3,-19}, -{48,-3,-18}, -{48,-3,-17}, -{48,-3,-16}, -{48,-3,-15}, -{48,-3,-14}, -{48,-3,-13}, -{48,-3,-12}, -{48,-3,-11}, -{48,-3,-10}, -{48,-3,-9}, -{48,-3,-8}, -{48,-3,-7}, -{48,-3,-6}, -{48,-3,-5}, -{48,-3,-4}, -{48,-3,-3}, -{48,-3,-2}, -{48,-3,-1}, -{48,-3,0}, -{48,-3,1}, -{48,-3,2}, -{48,-3,3}, -{48,-3,4}, -{48,-3,5}, -{48,-3,6}, -{48,-3,7}, -{48,-3,8}, -{48,-3,9}, -{48,-3,10}, -{48,-3,11}, -{48,-3,12}, -{48,-3,13}, -{48,-3,14}, -{48,-3,15}, -{48,-3,16}, -{48,-3,17}, -{48,-3,18}, -{48,-3,19}, -{48,-3,20}, -{48,-3,21}, -{48,-3,22}, -{48,-3,23}, -{48,-3,24}, -{48,-3,25}, -{48,-3,26}, -{48,-3,27}, -{48,-3,28}, -{48,-3,29}, -{48,-3,30}, -{48,-3,31}, -{48,-3,32}, -{48,-3,33}, -{48,-3,34}, -{48,-3,35}, -{48,-3,36}, -{48,-3,37}, -{48,-3,38}, -{48,-3,39}, -{48,-3,40}, -{48,-3,41}, -{48,-3,42}, -{48,-3,43}, -{48,-3,44}, -{48,-3,45}, -{48,-3,46}, -{48,-3,47}, -{48,-3,48}, -{48,-3,49}, -{48,-3,50}, -{48,-3,51}, -{48,-3,52}, -{48,-3,53}, -{48,-3,54}, -{48,-2,-43}, -{48,-2,-42}, -{48,-2,-41}, -{48,-2,-40}, -{48,-2,-39}, -{48,-2,-38}, -{48,-2,-37}, -{48,-2,-36}, -{48,-2,-35}, -{48,-2,-34}, -{48,-2,-33}, -{48,-2,-32}, -{48,-2,-31}, -{48,-2,-30}, -{48,-2,-29}, -{48,-2,-28}, -{48,-2,-27}, -{48,-2,-26}, -{48,-2,-25}, -{48,-2,-24}, -{48,-2,-23}, -{48,-2,-22}, -{48,-2,-21}, -{48,-2,-20}, -{48,-2,-19}, -{48,-2,-18}, -{48,-2,-17}, -{48,-2,-16}, -{48,-2,-15}, -{48,-2,-14}, -{48,-2,-13}, -{48,-2,-12}, -{48,-2,-11}, -{48,-2,-10}, -{48,-2,-9}, -{48,-2,-8}, -{48,-2,-7}, -{48,-2,-6}, -{48,-2,-5}, -{48,-2,-4}, -{48,-2,-3}, -{48,-2,-2}, -{48,-2,-1}, -{48,-2,0}, -{48,-2,1}, -{48,-2,2}, -{48,-2,3}, -{48,-2,4}, -{48,-2,5}, -{48,-2,6}, -{48,-2,7}, -{48,-2,8}, -{48,-2,9}, -{48,-2,10}, -{48,-2,11}, -{48,-2,12}, -{48,-2,13}, -{48,-2,14}, -{48,-2,15}, -{48,-2,16}, -{48,-2,17}, -{48,-2,18}, -{48,-2,19}, -{48,-2,20}, -{48,-2,21}, -{48,-2,22}, -{48,-2,23}, -{48,-2,24}, -{48,-2,25}, -{48,-2,26}, -{48,-2,27}, -{48,-2,28}, -{48,-2,29}, -{48,-2,30}, -{48,-2,31}, -{48,-2,32}, -{48,-2,33}, -{48,-2,34}, -{48,-2,35}, -{48,-2,36}, -{48,-2,37}, -{48,-2,38}, -{48,-2,39}, -{48,-2,40}, -{48,-2,41}, -{48,-2,42}, -{48,-2,43}, -{48,-2,44}, -{48,-2,45}, -{48,-2,46}, -{48,-2,47}, -{48,-2,48}, -{48,-2,49}, -{48,-2,50}, -{48,-2,51}, -{48,-2,52}, -{48,-2,53}, -{48,-2,54}, -{48,-1,-45}, -{48,-1,-44}, -{48,-1,-43}, -{48,-1,-42}, -{48,-1,-41}, -{48,-1,-40}, -{48,-1,-39}, -{48,-1,-38}, -{48,-1,-37}, -{48,-1,-36}, -{48,-1,-35}, -{48,-1,-34}, -{48,-1,-33}, -{48,-1,-32}, -{48,-1,-31}, -{48,-1,-30}, -{48,-1,-29}, -{48,-1,-28}, -{48,-1,-27}, -{48,-1,-26}, -{48,-1,-25}, -{48,-1,-24}, -{48,-1,-23}, -{48,-1,-22}, -{48,-1,-21}, -{48,-1,-20}, -{48,-1,-19}, -{48,-1,-18}, -{48,-1,-17}, -{48,-1,-16}, -{48,-1,-15}, -{48,-1,-14}, -{48,-1,-13}, -{48,-1,-12}, -{48,-1,-11}, -{48,-1,-10}, -{48,-1,-9}, -{48,-1,-8}, -{48,-1,-7}, -{48,-1,-6}, -{48,-1,-5}, -{48,-1,-4}, -{48,-1,-3}, -{48,-1,-2}, -{48,-1,-1}, -{48,-1,0}, -{48,-1,1}, -{48,-1,2}, -{48,-1,3}, -{48,-1,4}, -{48,-1,5}, -{48,-1,6}, -{48,-1,7}, -{48,-1,8}, -{48,-1,9}, -{48,-1,10}, -{48,-1,11}, -{48,-1,12}, -{48,-1,13}, -{48,-1,14}, -{48,-1,15}, -{48,-1,16}, -{48,-1,17}, -{48,-1,18}, -{48,-1,19}, -{48,-1,20}, -{48,-1,21}, -{48,-1,22}, -{48,-1,23}, -{48,-1,24}, -{48,-1,25}, -{48,-1,26}, -{48,-1,27}, -{48,-1,28}, -{48,-1,29}, -{48,-1,30}, -{48,-1,31}, -{48,-1,32}, -{48,-1,33}, -{48,-1,34}, -{48,-1,35}, -{48,-1,36}, -{48,-1,37}, -{48,-1,38}, -{48,-1,39}, -{48,-1,40}, -{48,-1,41}, -{48,-1,42}, -{48,-1,43}, -{48,-1,44}, -{48,-1,45}, -{48,-1,46}, -{48,-1,47}, -{48,-1,48}, -{48,-1,49}, -{48,-1,50}, -{48,-1,51}, -{48,-1,52}, -{48,-1,53}, -{48,-1,54}, -{48,0,-46}, -{48,0,-45}, -{48,0,-44}, -{48,0,-43}, -{48,0,-42}, -{48,0,-41}, -{48,0,-40}, -{48,0,-39}, -{48,0,-38}, -{48,0,-37}, -{48,0,-36}, -{48,0,-35}, -{48,0,-34}, -{48,0,-33}, -{48,0,-32}, -{48,0,-31}, -{48,0,-30}, -{48,0,-29}, -{48,0,-28}, -{48,0,-27}, -{48,0,-26}, -{48,0,-25}, -{48,0,-24}, -{48,0,-23}, -{48,0,-22}, -{48,0,-21}, -{48,0,-20}, -{48,0,-19}, -{48,0,-18}, -{48,0,-17}, -{48,0,-16}, -{48,0,-15}, -{48,0,-14}, -{48,0,-13}, -{48,0,-12}, -{48,0,-11}, -{48,0,-10}, -{48,0,-9}, -{48,0,-8}, -{48,0,-7}, -{48,0,-6}, -{48,0,-5}, -{48,0,-4}, -{48,0,-3}, -{48,0,-2}, -{48,0,-1}, -{48,0,0}, -{48,0,1}, -{48,0,2}, -{48,0,3}, -{48,0,4}, -{48,0,5}, -{48,0,6}, -{48,0,7}, -{48,0,8}, -{48,0,9}, -{48,0,10}, -{48,0,11}, -{48,0,12}, -{48,0,13}, -{48,0,14}, -{48,0,15}, -{48,0,16}, -{48,0,17}, -{48,0,18}, -{48,0,19}, -{48,0,20}, -{48,0,21}, -{48,0,22}, -{48,0,23}, -{48,0,24}, -{48,0,25}, -{48,0,26}, -{48,0,27}, -{48,0,28}, -{48,0,29}, -{48,0,30}, -{48,0,31}, -{48,0,32}, -{48,0,33}, -{48,0,34}, -{48,0,35}, -{48,0,36}, -{48,0,37}, -{48,0,38}, -{48,0,39}, -{48,0,40}, -{48,0,41}, -{48,0,42}, -{48,0,43}, -{48,0,44}, -{48,0,45}, -{48,0,46}, -{48,0,47}, -{48,0,48}, -{48,0,49}, -{48,0,50}, -{48,0,51}, -{48,0,52}, -{48,0,53}, -{48,0,54}, -{48,1,-47}, -{48,1,-46}, -{48,1,-45}, -{48,1,-44}, -{48,1,-43}, -{48,1,-42}, -{48,1,-41}, -{48,1,-40}, -{48,1,-39}, -{48,1,-38}, -{48,1,-37}, -{48,1,-36}, -{48,1,-35}, -{48,1,-34}, -{48,1,-33}, -{48,1,-32}, -{48,1,-31}, -{48,1,-30}, -{48,1,-29}, -{48,1,-28}, -{48,1,-27}, -{48,1,-26}, -{48,1,-25}, -{48,1,-24}, -{48,1,-23}, -{48,1,-22}, -{48,1,-21}, -{48,1,-20}, -{48,1,-19}, -{48,1,-18}, -{48,1,-17}, -{48,1,-16}, -{48,1,-15}, -{48,1,-14}, -{48,1,-13}, -{48,1,-12}, -{48,1,-11}, -{48,1,-10}, -{48,1,-9}, -{48,1,-8}, -{48,1,-7}, -{48,1,-6}, -{48,1,-5}, -{48,1,-4}, -{48,1,-3}, -{48,1,-2}, -{48,1,-1}, -{48,1,0}, -{48,1,1}, -{48,1,2}, -{48,1,3}, -{48,1,4}, -{48,1,5}, -{48,1,6}, -{48,1,7}, -{48,1,8}, -{48,1,9}, -{48,1,10}, -{48,1,11}, -{48,1,12}, -{48,1,13}, -{48,1,14}, -{48,1,15}, -{48,1,16}, -{48,1,17}, -{48,1,18}, -{48,1,19}, -{48,1,20}, -{48,1,21}, -{48,1,22}, -{48,1,23}, -{48,1,24}, -{48,1,25}, -{48,1,26}, -{48,1,27}, -{48,1,28}, -{48,1,29}, -{48,1,30}, -{48,1,31}, -{48,1,32}, -{48,1,33}, -{48,1,34}, -{48,1,35}, -{48,1,36}, -{48,1,37}, -{48,1,38}, -{48,1,39}, -{48,1,40}, -{48,1,41}, -{48,1,42}, -{48,1,43}, -{48,1,44}, -{48,1,45}, -{48,1,46}, -{48,1,47}, -{48,1,48}, -{48,1,49}, -{48,1,50}, -{48,1,51}, -{48,1,52}, -{48,1,53}, -{48,1,54}, -{48,2,-48}, -{48,2,-47}, -{48,2,-46}, -{48,2,-45}, -{48,2,-44}, -{48,2,-43}, -{48,2,-42}, -{48,2,-41}, -{48,2,-40}, -{48,2,-39}, -{48,2,-38}, -{48,2,-37}, -{48,2,-36}, -{48,2,-35}, -{48,2,-34}, -{48,2,-33}, -{48,2,-32}, -{48,2,-31}, -{48,2,-30}, -{48,2,-29}, -{48,2,-28}, -{48,2,-27}, -{48,2,-26}, -{48,2,-25}, -{48,2,-24}, -{48,2,-23}, -{48,2,-22}, -{48,2,-21}, -{48,2,-20}, -{48,2,-19}, -{48,2,-18}, -{48,2,-17}, -{48,2,-16}, -{48,2,-15}, -{48,2,-14}, -{48,2,-13}, -{48,2,-12}, -{48,2,-11}, -{48,2,-10}, -{48,2,-9}, -{48,2,-8}, -{48,2,-7}, -{48,2,-6}, -{48,2,-5}, -{48,2,-4}, -{48,2,-3}, -{48,2,-2}, -{48,2,-1}, -{48,2,0}, -{48,2,1}, -{48,2,2}, -{48,2,3}, -{48,2,4}, -{48,2,5}, -{48,2,6}, -{48,2,7}, -{48,2,8}, -{48,2,9}, -{48,2,10}, -{48,2,11}, -{48,2,12}, -{48,2,13}, -{48,2,14}, -{48,2,15}, -{48,2,16}, -{48,2,17}, -{48,2,18}, -{48,2,19}, -{48,2,20}, -{48,2,21}, -{48,2,22}, -{48,2,23}, -{48,2,24}, -{48,2,25}, -{48,2,26}, -{48,2,27}, -{48,2,28}, -{48,2,29}, -{48,2,30}, -{48,2,31}, -{48,2,32}, -{48,2,33}, -{48,2,34}, -{48,2,35}, -{48,2,36}, -{48,2,37}, -{48,2,38}, -{48,2,39}, -{48,2,40}, -{48,2,41}, -{48,2,42}, -{48,2,43}, -{48,2,44}, -{48,2,45}, -{48,2,46}, -{48,2,47}, -{48,2,48}, -{48,2,49}, -{48,2,50}, -{48,2,51}, -{48,2,52}, -{48,2,53}, -{48,2,54}, -{48,3,-49}, -{48,3,-48}, -{48,3,-47}, -{48,3,-46}, -{48,3,-45}, -{48,3,-44}, -{48,3,-43}, -{48,3,-42}, -{48,3,-41}, -{48,3,-40}, -{48,3,-39}, -{48,3,-38}, -{48,3,-37}, -{48,3,-36}, -{48,3,-35}, -{48,3,-34}, -{48,3,-33}, -{48,3,-32}, -{48,3,-31}, -{48,3,-30}, -{48,3,-29}, -{48,3,-28}, -{48,3,-27}, -{48,3,-26}, -{48,3,-25}, -{48,3,-24}, -{48,3,-23}, -{48,3,-22}, -{48,3,-21}, -{48,3,-20}, -{48,3,-19}, -{48,3,-18}, -{48,3,-17}, -{48,3,-16}, -{48,3,-15}, -{48,3,-14}, -{48,3,-13}, -{48,3,-12}, -{48,3,-11}, -{48,3,-10}, -{48,3,-9}, -{48,3,-8}, -{48,3,-7}, -{48,3,-6}, -{48,3,-5}, -{48,3,-4}, -{48,3,-3}, -{48,3,-2}, -{48,3,-1}, -{48,3,0}, -{48,3,1}, -{48,3,2}, -{48,3,3}, -{48,3,4}, -{48,3,5}, -{48,3,6}, -{48,3,7}, -{48,3,8}, -{48,3,9}, -{48,3,10}, -{48,3,11}, -{48,3,12}, -{48,3,13}, -{48,3,14}, -{48,3,15}, -{48,3,16}, -{48,3,17}, -{48,3,18}, -{48,3,19}, -{48,3,20}, -{48,3,21}, -{48,3,22}, -{48,3,23}, -{48,3,24}, -{48,3,25}, -{48,3,26}, -{48,3,27}, -{48,3,28}, -{48,3,29}, -{48,3,30}, -{48,3,31}, -{48,3,32}, -{48,3,33}, -{48,3,34}, -{48,3,35}, -{48,3,36}, -{48,3,37}, -{48,3,38}, -{48,3,39}, -{48,3,40}, -{48,3,41}, -{48,3,42}, -{48,3,43}, -{48,3,44}, -{48,3,45}, -{48,3,46}, -{48,3,47}, -{48,3,48}, -{48,3,49}, -{48,3,50}, -{48,3,51}, -{48,3,52}, -{48,3,53}, -{48,3,54}, -{48,4,-50}, -{48,4,-49}, -{48,4,-48}, -{48,4,-47}, -{48,4,-46}, -{48,4,-45}, -{48,4,-44}, -{48,4,-43}, -{48,4,-42}, -{48,4,-41}, -{48,4,-40}, -{48,4,-39}, -{48,4,-38}, -{48,4,-37}, -{48,4,-36}, -{48,4,-35}, -{48,4,-34}, -{48,4,-33}, -{48,4,-32}, -{48,4,-31}, -{48,4,-30}, -{48,4,-29}, -{48,4,-28}, -{48,4,-27}, -{48,4,-26}, -{48,4,-25}, -{48,4,-24}, -{48,4,-23}, -{48,4,-22}, -{48,4,-21}, -{48,4,-20}, -{48,4,-19}, -{48,4,-18}, -{48,4,-17}, -{48,4,-16}, -{48,4,-15}, -{48,4,-14}, -{48,4,-13}, -{48,4,-12}, -{48,4,-11}, -{48,4,-10}, -{48,4,-9}, -{48,4,-8}, -{48,4,-7}, -{48,4,-6}, -{48,4,-5}, -{48,4,-4}, -{48,4,-3}, -{48,4,-2}, -{48,4,-1}, -{48,4,0}, -{48,4,1}, -{48,4,2}, -{48,4,3}, -{48,4,4}, -{48,4,5}, -{48,4,6}, -{48,4,7}, -{48,4,8}, -{48,4,9}, -{48,4,10}, -{48,4,11}, -{48,4,12}, -{48,4,13}, -{48,4,14}, -{48,4,15}, -{48,4,16}, -{48,4,17}, -{48,4,18}, -{48,4,19}, -{48,4,20}, -{48,4,21}, -{48,4,22}, -{48,4,23}, -{48,4,24}, -{48,4,25}, -{48,4,26}, -{48,4,27}, -{48,4,28}, -{48,4,29}, -{48,4,30}, -{48,4,31}, -{48,4,32}, -{48,4,33}, -{48,4,34}, -{48,4,35}, -{48,4,36}, -{48,4,37}, -{48,4,38}, -{48,4,39}, -{48,4,40}, -{48,4,41}, -{48,4,42}, -{48,4,43}, -{48,4,44}, -{48,4,45}, -{48,4,46}, -{48,4,47}, -{48,4,48}, -{48,4,49}, -{48,4,50}, -{48,4,51}, -{48,4,52}, -{48,4,53}, -{48,4,54}, -{48,5,-51}, -{48,5,-50}, -{48,5,-49}, -{48,5,-48}, -{48,5,-47}, -{48,5,-46}, -{48,5,-45}, -{48,5,-44}, -{48,5,-43}, -{48,5,-42}, -{48,5,-41}, -{48,5,-40}, -{48,5,-39}, -{48,5,-38}, -{48,5,-37}, -{48,5,-36}, -{48,5,-35}, -{48,5,-34}, -{48,5,-33}, -{48,5,-32}, -{48,5,-31}, -{48,5,-30}, -{48,5,-29}, -{48,5,-28}, -{48,5,-27}, -{48,5,-26}, -{48,5,-25}, -{48,5,-24}, -{48,5,-23}, -{48,5,-22}, -{48,5,-21}, -{48,5,-20}, -{48,5,-19}, -{48,5,-18}, -{48,5,-17}, -{48,5,-16}, -{48,5,-15}, -{48,5,-14}, -{48,5,-13}, -{48,5,-12}, -{48,5,-11}, -{48,5,-10}, -{48,5,-9}, -{48,5,-8}, -{48,5,-7}, -{48,5,-6}, -{48,5,-5}, -{48,5,-4}, -{48,5,-3}, -{48,5,-2}, -{48,5,-1}, -{48,5,0}, -{48,5,1}, -{48,5,2}, -{48,5,3}, -{48,5,4}, -{48,5,5}, -{48,5,6}, -{48,5,7}, -{48,5,8}, -{48,5,9}, -{48,5,10}, -{48,5,11}, -{48,5,12}, -{48,5,13}, -{48,5,14}, -{48,5,15}, -{48,5,16}, -{48,5,17}, -{48,5,18}, -{48,5,19}, -{48,5,20}, -{48,5,21}, -{48,5,22}, -{48,5,23}, -{48,5,24}, -{48,5,25}, -{48,5,26}, -{48,5,27}, -{48,5,28}, -{48,5,29}, -{48,5,30}, -{48,5,31}, -{48,5,32}, -{48,5,33}, -{48,5,34}, -{48,5,35}, -{48,5,36}, -{48,5,37}, -{48,5,38}, -{48,5,39}, -{48,5,40}, -{48,5,41}, -{48,5,42}, -{48,5,43}, -{48,5,44}, -{48,5,45}, -{48,5,46}, -{48,5,47}, -{48,5,48}, -{48,5,49}, -{48,5,50}, -{48,5,51}, -{48,5,52}, -{48,5,53}, -{48,5,54}, -{48,6,-52}, -{48,6,-51}, -{48,6,-50}, -{48,6,-49}, -{48,6,-48}, -{48,6,-47}, -{48,6,-46}, -{48,6,-45}, -{48,6,-44}, -{48,6,-43}, -{48,6,-42}, -{48,6,-41}, -{48,6,-40}, -{48,6,-39}, -{48,6,-38}, -{48,6,-37}, -{48,6,-36}, -{48,6,-35}, -{48,6,-34}, -{48,6,-33}, -{48,6,-32}, -{48,6,-31}, -{48,6,-30}, -{48,6,-29}, -{48,6,-28}, -{48,6,-27}, -{48,6,-26}, -{48,6,-25}, -{48,6,-24}, -{48,6,-23}, -{48,6,-22}, -{48,6,-21}, -{48,6,-20}, -{48,6,-19}, -{48,6,-18}, -{48,6,-17}, -{48,6,-16}, -{48,6,-15}, -{48,6,-14}, -{48,6,-13}, -{48,6,-12}, -{48,6,-11}, -{48,6,-10}, -{48,6,-9}, -{48,6,-8}, -{48,6,-7}, -{48,6,-6}, -{48,6,-5}, -{48,6,-4}, -{48,6,-3}, -{48,6,-2}, -{48,6,-1}, -{48,6,0}, -{48,6,1}, -{48,6,2}, -{48,6,3}, -{48,6,4}, -{48,6,5}, -{48,6,6}, -{48,6,7}, -{48,6,8}, -{48,6,9}, -{48,6,10}, -{48,6,11}, -{48,6,12}, -{48,6,13}, -{48,6,14}, -{48,6,15}, -{48,6,16}, -{48,6,17}, -{48,6,18}, -{48,6,19}, -{48,6,20}, -{48,6,21}, -{48,6,22}, -{48,6,23}, -{48,6,24}, -{48,6,25}, -{48,6,26}, -{48,6,27}, -{48,6,28}, -{48,6,29}, -{48,6,30}, -{48,6,31}, -{48,6,32}, -{48,6,33}, -{48,6,34}, -{48,6,35}, -{48,6,36}, -{48,6,37}, -{48,6,38}, -{48,6,39}, -{48,6,40}, -{48,6,41}, -{48,6,42}, -{48,6,43}, -{48,6,44}, -{48,6,45}, -{48,6,46}, -{48,6,47}, -{48,6,48}, -{48,6,49}, -{48,6,50}, -{48,6,51}, -{48,6,52}, -{48,6,53}, -{48,6,54}, -{48,7,-53}, -{48,7,-52}, -{48,7,-51}, -{48,7,-50}, -{48,7,-49}, -{48,7,-48}, -{48,7,-47}, -{48,7,-46}, -{48,7,-45}, -{48,7,-44}, -{48,7,-43}, -{48,7,-42}, -{48,7,-41}, -{48,7,-40}, -{48,7,-39}, -{48,7,-38}, -{48,7,-37}, -{48,7,-36}, -{48,7,-35}, -{48,7,-34}, -{48,7,-33}, -{48,7,-32}, -{48,7,-31}, -{48,7,-30}, -{48,7,-29}, -{48,7,-28}, -{48,7,-27}, -{48,7,-26}, -{48,7,-25}, -{48,7,-24}, -{48,7,-23}, -{48,7,-22}, -{48,7,-21}, -{48,7,-20}, -{48,7,-19}, -{48,7,-18}, -{48,7,-17}, -{48,7,-16}, -{48,7,-15}, -{48,7,-14}, -{48,7,-13}, -{48,7,-12}, -{48,7,-11}, -{48,7,-10}, -{48,7,-9}, -{48,7,-8}, -{48,7,-7}, -{48,7,-6}, -{48,7,-5}, -{48,7,-4}, -{48,7,-3}, -{48,7,-2}, -{48,7,-1}, -{48,7,0}, -{48,7,1}, -{48,7,2}, -{48,7,3}, -{48,7,4}, -{48,7,5}, -{48,7,6}, -{48,7,7}, -{48,7,8}, -{48,7,9}, -{48,7,10}, -{48,7,11}, -{48,7,12}, -{48,7,13}, -{48,7,14}, -{48,7,15}, -{48,7,16}, -{48,7,17}, -{48,7,18}, -{48,7,19}, -{48,7,20}, -{48,7,21}, -{48,7,22}, -{48,7,23}, -{48,7,24}, -{48,7,25}, -{48,7,26}, -{48,7,27}, -{48,7,28}, -{48,7,29}, -{48,7,30}, -{48,7,31}, -{48,7,32}, -{48,7,33}, -{48,7,34}, -{48,7,35}, -{48,7,36}, -{48,7,37}, -{48,7,38}, -{48,7,39}, -{48,7,40}, -{48,7,41}, -{48,7,42}, -{48,7,43}, -{48,7,44}, -{48,7,45}, -{48,7,46}, -{48,7,47}, -{48,7,48}, -{48,7,49}, -{48,7,50}, -{48,7,51}, -{48,7,52}, -{48,7,53}, -{48,7,54}, -{48,8,-54}, -{48,8,-53}, -{48,8,-52}, -{48,8,-51}, -{48,8,-50}, -{48,8,-49}, -{48,8,-48}, -{48,8,-47}, -{48,8,-46}, -{48,8,-45}, -{48,8,-44}, -{48,8,-43}, -{48,8,-42}, -{48,8,-41}, -{48,8,-40}, -{48,8,-39}, -{48,8,-38}, -{48,8,-37}, -{48,8,-36}, -{48,8,-35}, -{48,8,-34}, -{48,8,-33}, -{48,8,-32}, -{48,8,-31}, -{48,8,-30}, -{48,8,-29}, -{48,8,-28}, -{48,8,-27}, -{48,8,-26}, -{48,8,-25}, -{48,8,-24}, -{48,8,-23}, -{48,8,-22}, -{48,8,-21}, -{48,8,-20}, -{48,8,-19}, -{48,8,-18}, -{48,8,-17}, -{48,8,-16}, -{48,8,-15}, -{48,8,-14}, -{48,8,-13}, -{48,8,-12}, -{48,8,-11}, -{48,8,-10}, -{48,8,-9}, -{48,8,-8}, -{48,8,-7}, -{48,8,-6}, -{48,8,-5}, -{48,8,-4}, -{48,8,-3}, -{48,8,-2}, -{48,8,-1}, -{48,8,0}, -{48,8,1}, -{48,8,2}, -{48,8,3}, -{48,8,4}, -{48,8,5}, -{48,8,6}, -{48,8,7}, -{48,8,8}, -{48,8,9}, -{48,8,10}, -{48,8,11}, -{48,8,12}, -{48,8,13}, -{48,8,14}, -{48,8,15}, -{48,8,16}, -{48,8,17}, -{48,8,18}, -{48,8,19}, -{48,8,20}, -{48,8,21}, -{48,8,22}, -{48,8,23}, -{48,8,24}, -{48,8,25}, -{48,8,26}, -{48,8,27}, -{48,8,28}, -{48,8,29}, -{48,8,30}, -{48,8,31}, -{48,8,32}, -{48,8,33}, -{48,8,34}, -{48,8,35}, -{48,8,36}, -{48,8,37}, -{48,8,38}, -{48,8,39}, -{48,8,40}, -{48,8,41}, -{48,8,42}, -{48,8,43}, -{48,8,44}, -{48,8,45}, -{48,8,46}, -{48,8,47}, -{48,8,48}, -{48,8,49}, -{48,8,50}, -{48,8,51}, -{48,8,52}, -{48,8,53}, -{48,8,54}, -{48,8,55}, -{48,9,-56}, -{48,9,-55}, -{48,9,-54}, -{48,9,-53}, -{48,9,-52}, -{48,9,-51}, -{48,9,-50}, -{48,9,-49}, -{48,9,-48}, -{48,9,-47}, -{48,9,-46}, -{48,9,-45}, -{48,9,-44}, -{48,9,-43}, -{48,9,-42}, -{48,9,-41}, -{48,9,-40}, -{48,9,-39}, -{48,9,-38}, -{48,9,-37}, -{48,9,-36}, -{48,9,-35}, -{48,9,-34}, -{48,9,-33}, -{48,9,-32}, -{48,9,-31}, -{48,9,-30}, -{48,9,-29}, -{48,9,-28}, -{48,9,-27}, -{48,9,-26}, -{48,9,-25}, -{48,9,-24}, -{48,9,-23}, -{48,9,-22}, -{48,9,-21}, -{48,9,-20}, -{48,9,-19}, -{48,9,-18}, -{48,9,-17}, -{48,9,-16}, -{48,9,-15}, -{48,9,-14}, -{48,9,-13}, -{48,9,-12}, -{48,9,-11}, -{48,9,-10}, -{48,9,-9}, -{48,9,-8}, -{48,9,-7}, -{48,9,-6}, -{48,9,-5}, -{48,9,-4}, -{48,9,-3}, -{48,9,-2}, -{48,9,-1}, -{48,9,0}, -{48,9,1}, -{48,9,2}, -{48,9,3}, -{48,9,4}, -{48,9,5}, -{48,9,6}, -{48,9,7}, -{48,9,8}, -{48,9,9}, -{48,9,10}, -{48,9,11}, -{48,9,12}, -{48,9,13}, -{48,9,14}, -{48,9,15}, -{48,9,16}, -{48,9,17}, -{48,9,18}, -{48,9,19}, -{48,9,20}, -{48,9,21}, -{48,9,22}, -{48,9,23}, -{48,9,24}, -{48,9,25}, -{48,9,26}, -{48,9,27}, -{48,9,28}, -{48,9,29}, -{48,9,30}, -{48,9,31}, -{48,9,32}, -{48,9,33}, -{48,9,34}, -{48,9,35}, -{48,9,36}, -{48,9,37}, -{48,9,38}, -{48,9,39}, -{48,9,40}, -{48,9,41}, -{48,9,42}, -{48,9,43}, -{48,9,44}, -{48,9,45}, -{48,9,46}, -{48,9,47}, -{48,9,48}, -{48,9,49}, -{48,9,50}, -{48,9,51}, -{48,9,52}, -{48,9,53}, -{48,9,54}, -{48,9,55}, -{48,10,-57}, -{48,10,-56}, -{48,10,-55}, -{48,10,-54}, -{48,10,-53}, -{48,10,-52}, -{48,10,-51}, -{48,10,-50}, -{48,10,-49}, -{48,10,-48}, -{48,10,-47}, -{48,10,-46}, -{48,10,-45}, -{48,10,-44}, -{48,10,-43}, -{48,10,-42}, -{48,10,-41}, -{48,10,-40}, -{48,10,-39}, -{48,10,-38}, -{48,10,-37}, -{48,10,-36}, -{48,10,-35}, -{48,10,-34}, -{48,10,-33}, -{48,10,-32}, -{48,10,-31}, -{48,10,-30}, -{48,10,-29}, -{48,10,-28}, -{48,10,-27}, -{48,10,-26}, -{48,10,-25}, -{48,10,-24}, -{48,10,-23}, -{48,10,-22}, -{48,10,-21}, -{48,10,-20}, -{48,10,-19}, -{48,10,-18}, -{48,10,-17}, -{48,10,-16}, -{48,10,-15}, -{48,10,-14}, -{48,10,-13}, -{48,10,-12}, -{48,10,-11}, -{48,10,-10}, -{48,10,-9}, -{48,10,-8}, -{48,10,-7}, -{48,10,-6}, -{48,10,-5}, -{48,10,-4}, -{48,10,-3}, -{48,10,-2}, -{48,10,-1}, -{48,10,0}, -{48,10,1}, -{48,10,2}, -{48,10,3}, -{48,10,4}, -{48,10,5}, -{48,10,6}, -{48,10,7}, -{48,10,8}, -{48,10,9}, -{48,10,10}, -{48,10,11}, -{48,10,12}, -{48,10,13}, -{48,10,14}, -{48,10,15}, -{48,10,16}, -{48,10,17}, -{48,10,18}, -{48,10,19}, -{48,10,20}, -{48,10,21}, -{48,10,22}, -{48,10,23}, -{48,10,24}, -{48,10,25}, -{48,10,26}, -{48,10,27}, -{48,10,28}, -{48,10,29}, -{48,10,30}, -{48,10,31}, -{48,10,32}, -{48,10,33}, -{48,10,34}, -{48,10,35}, -{48,10,36}, -{48,10,37}, -{48,10,38}, -{48,10,39}, -{48,10,40}, -{48,10,41}, -{48,10,42}, -{48,10,43}, -{48,10,44}, -{48,10,45}, -{48,10,46}, -{48,10,47}, -{48,10,48}, -{48,10,49}, -{48,10,50}, -{48,10,51}, -{48,10,52}, -{48,10,53}, -{48,10,54}, -{48,10,55}, -{48,11,-58}, -{48,11,-57}, -{48,11,-56}, -{48,11,-55}, -{48,11,-54}, -{48,11,-53}, -{48,11,-52}, -{48,11,-51}, -{48,11,-50}, -{48,11,-49}, -{48,11,-48}, -{48,11,-47}, -{48,11,-46}, -{48,11,-45}, -{48,11,-44}, -{48,11,-43}, -{48,11,-42}, -{48,11,-41}, -{48,11,-40}, -{48,11,-39}, -{48,11,-38}, -{48,11,-37}, -{48,11,-36}, -{48,11,-35}, -{48,11,-34}, -{48,11,-33}, -{48,11,-32}, -{48,11,-31}, -{48,11,-30}, -{48,11,-29}, -{48,11,-28}, -{48,11,-27}, -{48,11,-26}, -{48,11,-25}, -{48,11,-24}, -{48,11,-23}, -{48,11,-22}, -{48,11,-21}, -{48,11,-20}, -{48,11,-19}, -{48,11,-18}, -{48,11,-17}, -{48,11,-16}, -{48,11,-15}, -{48,11,-14}, -{48,11,-13}, -{48,11,-12}, -{48,11,-11}, -{48,11,-10}, -{48,11,-9}, -{48,11,-8}, -{48,11,-7}, -{48,11,-6}, -{48,11,-5}, -{48,11,-4}, -{48,11,-3}, -{48,11,-2}, -{48,11,-1}, -{48,11,0}, -{48,11,1}, -{48,11,2}, -{48,11,3}, -{48,11,4}, -{48,11,5}, -{48,11,6}, -{48,11,7}, -{48,11,8}, -{48,11,9}, -{48,11,10}, -{48,11,11}, -{48,11,12}, -{48,11,13}, -{48,11,14}, -{48,11,15}, -{48,11,16}, -{48,11,17}, -{48,11,18}, -{48,11,19}, -{48,11,20}, -{48,11,21}, -{48,11,22}, -{48,11,23}, -{48,11,24}, -{48,11,25}, -{48,11,26}, -{48,11,27}, -{48,11,28}, -{48,11,29}, -{48,11,30}, -{48,11,31}, -{48,11,32}, -{48,11,33}, -{48,11,34}, -{48,11,35}, -{48,11,36}, -{48,11,37}, -{48,11,38}, -{48,11,39}, -{48,11,40}, -{48,11,41}, -{48,11,42}, -{48,11,43}, -{48,11,44}, -{48,11,45}, -{48,11,46}, -{48,11,47}, -{48,11,48}, -{48,11,49}, -{48,11,50}, -{48,11,51}, -{48,11,52}, -{48,11,53}, -{48,11,54}, -{48,11,55}, -{48,12,-59}, -{48,12,-58}, -{48,12,-57}, -{48,12,-56}, -{48,12,-55}, -{48,12,-54}, -{48,12,-53}, -{48,12,-52}, -{48,12,-51}, -{48,12,-50}, -{48,12,-49}, -{48,12,-48}, -{48,12,-47}, -{48,12,-46}, -{48,12,-45}, -{48,12,-44}, -{48,12,-43}, -{48,12,-42}, -{48,12,-41}, -{48,12,-40}, -{48,12,-39}, -{48,12,-38}, -{48,12,-37}, -{48,12,-36}, -{48,12,-35}, -{48,12,-34}, -{48,12,-33}, -{48,12,-32}, -{48,12,-31}, -{48,12,-30}, -{48,12,-29}, -{48,12,-28}, -{48,12,-27}, -{48,12,-26}, -{48,12,-25}, -{48,12,-24}, -{48,12,-23}, -{48,12,-22}, -{48,12,-21}, -{48,12,-20}, -{48,12,-19}, -{48,12,-18}, -{48,12,-17}, -{48,12,-16}, -{48,12,-15}, -{48,12,-14}, -{48,12,-13}, -{48,12,-12}, -{48,12,-11}, -{48,12,-10}, -{48,12,-9}, -{48,12,-8}, -{48,12,-7}, -{48,12,-6}, -{48,12,-5}, -{48,12,-4}, -{48,12,-3}, -{48,12,-2}, -{48,12,-1}, -{48,12,0}, -{48,12,1}, -{48,12,2}, -{48,12,3}, -{48,12,4}, -{48,12,5}, -{48,12,6}, -{48,12,7}, -{48,12,8}, -{48,12,9}, -{48,12,10}, -{48,12,11}, -{48,12,12}, -{48,12,13}, -{48,12,14}, -{48,12,15}, -{48,12,16}, -{48,12,17}, -{48,12,18}, -{48,12,19}, -{48,12,20}, -{48,12,21}, -{48,12,22}, -{48,12,23}, -{48,12,24}, -{48,12,25}, -{48,12,26}, -{48,12,27}, -{48,12,28}, -{48,12,29}, -{48,12,30}, -{48,12,31}, -{48,12,32}, -{48,12,33}, -{48,12,34}, -{48,12,35}, -{48,12,36}, -{48,12,37}, -{48,12,38}, -{48,12,39}, -{48,12,40}, -{48,12,41}, -{48,12,42}, -{48,12,43}, -{48,12,44}, -{48,12,45}, -{48,12,46}, -{48,12,47}, -{48,12,48}, -{48,12,49}, -{48,12,50}, -{48,12,51}, -{48,12,52}, -{48,12,53}, -{48,12,54}, -{48,12,55}, -{48,13,-60}, -{48,13,-59}, -{48,13,-58}, -{48,13,-57}, -{48,13,-56}, -{48,13,-55}, -{48,13,-54}, -{48,13,-53}, -{48,13,-52}, -{48,13,-51}, -{48,13,-50}, -{48,13,-49}, -{48,13,-48}, -{48,13,-47}, -{48,13,-46}, -{48,13,-45}, -{48,13,-44}, -{48,13,-43}, -{48,13,-42}, -{48,13,-41}, -{48,13,-40}, -{48,13,-39}, -{48,13,-38}, -{48,13,-37}, -{48,13,-36}, -{48,13,-35}, -{48,13,-34}, -{48,13,-33}, -{48,13,-32}, -{48,13,-31}, -{48,13,-30}, -{48,13,-29}, -{48,13,-28}, -{48,13,-27}, -{48,13,-26}, -{48,13,-25}, -{48,13,-24}, -{48,13,-23}, -{48,13,-22}, -{48,13,-21}, -{48,13,-20}, -{48,13,-19}, -{48,13,-18}, -{48,13,-17}, -{48,13,-16}, -{48,13,-15}, -{48,13,-14}, -{48,13,-13}, -{48,13,-12}, -{48,13,-11}, -{48,13,-10}, -{48,13,-9}, -{48,13,-8}, -{48,13,-7}, -{48,13,-6}, -{48,13,-5}, -{48,13,-4}, -{48,13,-3}, -{48,13,-2}, -{48,13,-1}, -{48,13,0}, -{48,13,1}, -{48,13,2}, -{48,13,3}, -{48,13,4}, -{48,13,5}, -{48,13,6}, -{48,13,7}, -{48,13,8}, -{48,13,9}, -{48,13,10}, -{48,13,11}, -{48,13,12}, -{48,13,13}, -{48,13,14}, -{48,13,15}, -{48,13,16}, -{48,13,17}, -{48,13,18}, -{48,13,19}, -{48,13,20}, -{48,13,21}, -{48,13,22}, -{48,13,23}, -{48,13,24}, -{48,13,25}, -{48,13,26}, -{48,13,27}, -{48,13,28}, -{48,13,29}, -{48,13,30}, -{48,13,31}, -{48,13,32}, -{48,13,33}, -{48,13,34}, -{48,13,35}, -{48,13,36}, -{48,13,37}, -{48,13,38}, -{48,13,39}, -{48,13,40}, -{48,13,41}, -{48,13,42}, -{48,13,43}, -{48,13,44}, -{48,13,45}, -{48,13,46}, -{48,13,47}, -{48,13,48}, -{48,13,49}, -{48,13,50}, -{48,13,51}, -{48,13,52}, -{48,13,53}, -{48,13,54}, -{48,13,55}, -{48,14,-61}, -{48,14,-60}, -{48,14,-59}, -{48,14,-58}, -{48,14,-57}, -{48,14,-56}, -{48,14,-55}, -{48,14,-54}, -{48,14,-53}, -{48,14,-52}, -{48,14,-51}, -{48,14,-50}, -{48,14,-49}, -{48,14,-48}, -{48,14,-47}, -{48,14,-46}, -{48,14,-45}, -{48,14,-44}, -{48,14,-43}, -{48,14,-42}, -{48,14,-41}, -{48,14,-40}, -{48,14,-39}, -{48,14,-38}, -{48,14,-37}, -{48,14,-36}, -{48,14,-35}, -{48,14,-34}, -{48,14,-33}, -{48,14,-32}, -{48,14,-31}, -{48,14,-30}, -{48,14,-29}, -{48,14,-28}, -{48,14,-27}, -{48,14,-26}, -{48,14,-25}, -{48,14,-24}, -{48,14,-23}, -{48,14,-22}, -{48,14,-21}, -{48,14,-20}, -{48,14,-19}, -{48,14,-18}, -{48,14,-17}, -{48,14,-16}, -{48,14,-15}, -{48,14,-14}, -{48,14,-13}, -{48,14,-12}, -{48,14,-11}, -{48,14,-10}, -{48,14,-9}, -{48,14,-8}, -{48,14,-7}, -{48,14,-6}, -{48,14,-5}, -{48,14,-4}, -{48,14,-3}, -{48,14,-2}, -{48,14,-1}, -{48,14,0}, -{48,14,1}, -{48,14,2}, -{48,14,3}, -{48,14,4}, -{48,14,5}, -{48,14,6}, -{48,14,7}, -{48,14,8}, -{48,14,9}, -{48,14,10}, -{48,14,11}, -{48,14,12}, -{48,14,13}, -{48,14,14}, -{48,14,15}, -{48,14,16}, -{48,14,17}, -{48,14,18}, -{48,14,19}, -{48,14,20}, -{48,14,21}, -{48,14,22}, -{48,14,23}, -{48,14,24}, -{48,14,25}, -{48,14,26}, -{48,14,27}, -{48,14,28}, -{48,14,29}, -{48,14,30}, -{48,14,31}, -{48,14,32}, -{48,14,33}, -{48,14,34}, -{48,14,35}, -{48,14,36}, -{48,14,37}, -{48,14,38}, -{48,14,39}, -{48,14,40}, -{48,14,41}, -{48,14,42}, -{48,14,43}, -{48,14,44}, -{48,14,45}, -{48,14,46}, -{48,14,47}, -{48,14,48}, -{48,14,49}, -{48,14,50}, -{48,14,51}, -{48,14,52}, -{48,14,53}, -{48,14,54}, -{48,14,55}, -{48,15,-62}, -{48,15,-61}, -{48,15,-60}, -{48,15,-59}, -{48,15,-58}, -{48,15,-57}, -{48,15,-56}, -{48,15,-55}, -{48,15,-54}, -{48,15,-53}, -{48,15,-52}, -{48,15,-51}, -{48,15,-50}, -{48,15,-49}, -{48,15,-48}, -{48,15,-47}, -{48,15,-46}, -{48,15,-45}, -{48,15,-44}, -{48,15,-43}, -{48,15,-42}, -{48,15,-41}, -{48,15,-40}, -{48,15,-39}, -{48,15,-38}, -{48,15,-37}, -{48,15,-36}, -{48,15,-35}, -{48,15,-34}, -{48,15,-33}, -{48,15,-32}, -{48,15,-31}, -{48,15,-30}, -{48,15,-29}, -{48,15,-28}, -{48,15,-27}, -{48,15,-26}, -{48,15,-25}, -{48,15,-24}, -{48,15,-23}, -{48,15,-22}, -{48,15,-21}, -{48,15,-20}, -{48,15,-19}, -{48,15,-18}, -{48,15,-17}, -{48,15,-16}, -{48,15,-15}, -{48,15,-14}, -{48,15,-13}, -{48,15,-12}, -{48,15,-11}, -{48,15,-10}, -{48,15,-9}, -{48,15,-8}, -{48,15,-7}, -{48,15,-6}, -{48,15,-5}, -{48,15,-4}, -{48,15,-3}, -{48,15,-2}, -{48,15,-1}, -{48,15,0}, -{48,15,1}, -{48,15,2}, -{48,15,3}, -{48,15,4}, -{48,15,5}, -{48,15,6}, -{48,15,7}, -{48,15,8}, -{48,15,9}, -{48,15,10}, -{48,15,11}, -{48,15,12}, -{48,15,13}, -{48,15,14}, -{48,15,15}, -{48,15,16}, -{48,15,17}, -{48,15,18}, -{48,15,19}, -{48,15,20}, -{48,15,21}, -{48,15,22}, -{48,15,23}, -{48,15,24}, -{48,15,25}, -{48,15,26}, -{48,15,27}, -{48,15,28}, -{48,15,29}, -{48,15,30}, -{48,15,31}, -{48,15,32}, -{48,15,33}, -{48,15,34}, -{48,15,35}, -{48,15,36}, -{48,15,37}, -{48,15,38}, -{48,15,39}, -{48,15,40}, -{48,15,41}, -{48,15,42}, -{48,15,43}, -{48,15,44}, -{48,15,45}, -{48,15,46}, -{48,15,47}, -{48,15,48}, -{48,15,49}, -{48,15,50}, -{48,15,51}, -{48,15,52}, -{48,15,53}, -{48,15,54}, -{48,15,55}, -{48,16,-63}, -{48,16,-62}, -{48,16,-61}, -{48,16,-60}, -{48,16,-59}, -{48,16,-58}, -{48,16,-57}, -{48,16,-56}, -{48,16,-55}, -{48,16,-54}, -{48,16,-53}, -{48,16,-52}, -{48,16,-51}, -{48,16,-50}, -{48,16,-49}, -{48,16,-48}, -{48,16,-47}, -{48,16,-46}, -{48,16,-45}, -{48,16,-44}, -{48,16,-43}, -{48,16,-42}, -{48,16,-41}, -{48,16,-40}, -{48,16,-39}, -{48,16,-38}, -{48,16,-37}, -{48,16,-36}, -{48,16,-35}, -{48,16,-34}, -{48,16,-33}, -{48,16,-32}, -{48,16,-31}, -{48,16,-30}, -{48,16,-29}, -{48,16,-28}, -{48,16,-27}, -{48,16,-26}, -{48,16,-25}, -{48,16,-24}, -{48,16,-23}, -{48,16,-22}, -{48,16,-21}, -{48,16,-20}, -{48,16,-19}, -{48,16,-18}, -{48,16,-17}, -{48,16,-16}, -{48,16,-15}, -{48,16,-14}, -{48,16,-13}, -{48,16,-12}, -{48,16,-11}, -{48,16,-10}, -{48,16,-9}, -{48,16,-8}, -{48,16,-7}, -{48,16,-6}, -{48,16,-5}, -{48,16,-4}, -{48,16,-3}, -{48,16,-2}, -{48,16,-1}, -{48,16,0}, -{48,16,1}, -{48,16,2}, -{48,16,3}, -{48,16,4}, -{48,16,5}, -{48,16,6}, -{48,16,7}, -{48,16,8}, -{48,16,9}, -{48,16,10}, -{48,16,11}, -{48,16,12}, -{48,16,13}, -{48,16,14}, -{48,16,15}, -{48,16,16}, -{48,16,17}, -{48,16,18}, -{48,16,19}, -{48,16,20}, -{48,16,21}, -{48,16,22}, -{48,16,23}, -{48,16,24}, -{48,16,25}, -{48,16,26}, -{48,16,27}, -{48,16,28}, -{48,16,29}, -{48,16,30}, -{48,16,31}, -{48,16,32}, -{48,16,33}, -{48,16,34}, -{48,16,35}, -{48,16,36}, -{48,16,37}, -{48,16,38}, -{48,16,39}, -{48,16,40}, -{48,16,41}, -{48,16,42}, -{48,16,43}, -{48,16,44}, -{48,16,45}, -{48,16,46}, -{48,16,47}, -{48,16,48}, -{48,16,49}, -{48,16,50}, -{48,16,51}, -{48,16,52}, -{48,16,53}, -{48,16,54}, -{48,16,55}, -{48,17,-64}, -{48,17,-63}, -{48,17,-62}, -{48,17,-61}, -{48,17,-60}, -{48,17,-59}, -{48,17,-58}, -{48,17,-57}, -{48,17,-56}, -{48,17,-55}, -{48,17,-54}, -{48,17,-53}, -{48,17,-52}, -{48,17,-51}, -{48,17,-50}, -{48,17,-49}, -{48,17,-48}, -{48,17,-47}, -{48,17,-46}, -{48,17,-45}, -{48,17,-44}, -{48,17,-43}, -{48,17,-42}, -{48,17,-41}, -{48,17,-40}, -{48,17,-39}, -{48,17,-38}, -{48,17,-37}, -{48,17,-36}, -{48,17,-35}, -{48,17,-34}, -{48,17,-33}, -{48,17,-32}, -{48,17,-31}, -{48,17,-30}, -{48,17,-29}, -{48,17,-28}, -{48,17,-27}, -{48,17,-26}, -{48,17,-25}, -{48,17,-24}, -{48,17,-23}, -{48,17,-22}, -{48,17,-21}, -{48,17,-20}, -{48,17,-19}, -{48,17,-18}, -{48,17,-17}, -{48,17,-16}, -{48,17,-15}, -{48,17,-14}, -{48,17,-13}, -{48,17,-12}, -{48,17,-11}, -{48,17,-10}, -{48,17,-9}, -{48,17,-8}, -{48,17,-7}, -{48,17,-6}, -{48,17,-5}, -{48,17,-4}, -{48,17,-3}, -{48,17,-2}, -{48,17,-1}, -{48,17,0}, -{48,17,1}, -{48,17,2}, -{48,17,3}, -{48,17,4}, -{48,17,5}, -{48,17,6}, -{48,17,7}, -{48,17,8}, -{48,17,9}, -{48,17,10}, -{48,17,11}, -{48,17,12}, -{48,17,13}, -{48,17,14}, -{48,17,15}, -{48,17,16}, -{48,17,17}, -{48,17,18}, -{48,17,19}, -{48,17,20}, -{48,17,21}, -{48,17,22}, -{48,17,23}, -{48,17,24}, -{48,17,25}, -{48,17,26}, -{48,17,27}, -{48,17,28}, -{48,17,29}, -{48,17,30}, -{48,17,31}, -{48,17,32}, -{48,17,33}, -{48,17,34}, -{48,17,35}, -{48,17,36}, -{48,17,37}, -{48,17,38}, -{48,17,39}, -{48,17,40}, -{48,17,41}, -{48,17,42}, -{48,17,43}, -{48,17,44}, -{48,17,45}, -{48,17,46}, -{48,17,47}, -{48,17,48}, -{48,17,49}, -{48,17,50}, -{48,17,51}, -{48,17,52}, -{48,17,53}, -{48,17,54}, -{48,17,55}, -{48,18,-65}, -{48,18,-64}, -{48,18,-63}, -{48,18,-62}, -{48,18,-61}, -{48,18,-60}, -{48,18,-59}, -{48,18,-58}, -{48,18,-57}, -{48,18,-56}, -{48,18,-55}, -{48,18,-54}, -{48,18,-53}, -{48,18,-52}, -{48,18,-51}, -{48,18,-50}, -{48,18,-49}, -{48,18,-48}, -{48,18,-47}, -{48,18,-46}, -{48,18,-45}, -{48,18,-44}, -{48,18,-43}, -{48,18,-42}, -{48,18,-41}, -{48,18,-40}, -{48,18,-39}, -{48,18,-38}, -{48,18,-37}, -{48,18,-36}, -{48,18,-35}, -{48,18,-34}, -{48,18,-33}, -{48,18,-32}, -{48,18,-31}, -{48,18,-30}, -{48,18,-29}, -{48,18,-28}, -{48,18,-27}, -{48,18,-26}, -{48,18,-25}, -{48,18,-24}, -{48,18,-23}, -{48,18,-22}, -{48,18,-21}, -{48,18,-20}, -{48,18,-19}, -{48,18,-18}, -{48,18,-17}, -{48,18,-16}, -{48,18,-15}, -{48,18,-14}, -{48,18,-13}, -{48,18,-12}, -{48,18,-11}, -{48,18,-10}, -{48,18,-9}, -{48,18,-8}, -{48,18,-7}, -{48,18,-6}, -{48,18,-5}, -{48,18,-4}, -{48,18,-3}, -{48,18,-2}, -{48,18,-1}, -{48,18,0}, -{48,18,1}, -{48,18,2}, -{48,18,3}, -{48,18,4}, -{48,18,5}, -{48,18,6}, -{48,18,7}, -{48,18,8}, -{48,18,9}, -{48,18,10}, -{48,18,11}, -{48,18,12}, -{48,18,13}, -{48,18,14}, -{48,18,15}, -{48,18,16}, -{48,18,17}, -{48,18,18}, -{48,18,19}, -{48,18,20}, -{48,18,21}, -{48,18,22}, -{48,18,23}, -{48,18,24}, -{48,18,25}, -{48,18,26}, -{48,18,27}, -{48,18,28}, -{48,18,29}, -{48,18,30}, -{48,18,31}, -{48,18,32}, -{48,18,33}, -{48,18,34}, -{48,18,35}, -{48,18,36}, -{48,18,37}, -{48,18,38}, -{48,18,39}, -{48,18,40}, -{48,18,41}, -{48,18,42}, -{48,18,43}, -{48,18,44}, -{48,18,45}, -{48,18,46}, -{48,18,47}, -{48,18,48}, -{48,18,49}, -{48,18,50}, -{48,18,51}, -{48,18,52}, -{48,18,53}, -{48,18,54}, -{48,18,55}, -{48,19,-66}, -{48,19,-65}, -{48,19,-64}, -{48,19,-63}, -{48,19,-62}, -{48,19,-61}, -{48,19,-60}, -{48,19,-59}, -{48,19,-58}, -{48,19,-57}, -{48,19,-56}, -{48,19,-55}, -{48,19,-54}, -{48,19,-53}, -{48,19,-52}, -{48,19,-51}, -{48,19,-50}, -{48,19,-49}, -{48,19,-48}, -{48,19,-47}, -{48,19,-46}, -{48,19,-45}, -{48,19,-44}, -{48,19,-43}, -{48,19,-42}, -{48,19,-41}, -{48,19,-40}, -{48,19,-39}, -{48,19,-38}, -{48,19,-37}, -{48,19,-36}, -{48,19,-35}, -{48,19,-34}, -{48,19,-33}, -{48,19,-32}, -{48,19,-31}, -{48,19,-30}, -{48,19,-29}, -{48,19,-28}, -{48,19,-27}, -{48,19,-26}, -{48,19,-25}, -{48,19,-24}, -{48,19,-23}, -{48,19,-22}, -{48,19,-21}, -{48,19,-20}, -{48,19,-19}, -{48,19,-18}, -{48,19,-17}, -{48,19,-16}, -{48,19,-15}, -{48,19,-14}, -{48,19,-13}, -{48,19,-12}, -{48,19,-11}, -{48,19,-10}, -{48,19,-9}, -{48,19,-8}, -{48,19,-7}, -{48,19,-6}, -{48,19,-5}, -{48,19,-4}, -{48,19,-3}, -{48,19,-2}, -{48,19,-1}, -{48,19,0}, -{48,19,1}, -{48,19,2}, -{48,19,3}, -{48,19,4}, -{48,19,5}, -{48,19,6}, -{48,19,7}, -{48,19,8}, -{48,19,9}, -{48,19,10}, -{48,19,11}, -{48,19,12}, -{48,19,13}, -{48,19,14}, -{48,19,15}, -{48,19,16}, -{48,19,17}, -{48,19,18}, -{48,19,19}, -{48,19,20}, -{48,19,21}, -{48,19,22}, -{48,19,23}, -{48,19,24}, -{48,19,25}, -{48,19,26}, -{48,19,27}, -{48,19,28}, -{48,19,29}, -{48,19,30}, -{48,19,31}, -{48,19,32}, -{48,19,33}, -{48,19,34}, -{48,19,35}, -{48,19,36}, -{48,19,37}, -{48,19,38}, -{48,19,39}, -{48,19,40}, -{48,19,41}, -{48,19,42}, -{48,19,43}, -{48,19,44}, -{48,19,45}, -{48,19,46}, -{48,19,47}, -{48,19,48}, -{48,19,49}, -{48,19,50}, -{48,19,51}, -{48,19,52}, -{48,19,53}, -{48,19,54}, -{48,19,55}, -{48,20,-67}, -{48,20,-66}, -{48,20,-65}, -{48,20,-64}, -{48,20,-63}, -{48,20,-62}, -{48,20,-61}, -{48,20,-60}, -{48,20,-59}, -{48,20,-58}, -{48,20,-57}, -{48,20,-56}, -{48,20,-55}, -{48,20,-54}, -{48,20,-53}, -{48,20,-52}, -{48,20,-51}, -{48,20,-50}, -{48,20,-49}, -{48,20,-48}, -{48,20,-47}, -{48,20,-46}, -{48,20,-45}, -{48,20,-44}, -{48,20,-43}, -{48,20,-42}, -{48,20,-41}, -{48,20,-40}, -{48,20,-39}, -{48,20,-38}, -{48,20,-37}, -{48,20,-36}, -{48,20,-35}, -{48,20,-34}, -{48,20,-33}, -{48,20,-32}, -{48,20,-31}, -{48,20,-30}, -{48,20,-29}, -{48,20,-28}, -{48,20,-27}, -{48,20,-26}, -{48,20,-25}, -{48,20,-24}, -{48,20,-23}, -{48,20,-22}, -{48,20,-21}, -{48,20,-20}, -{48,20,-19}, -{48,20,-18}, -{48,20,-17}, -{48,20,-16}, -{48,20,-15}, -{48,20,-14}, -{48,20,-13}, -{48,20,-12}, -{48,20,-11}, -{48,20,-10}, -{48,20,-9}, -{48,20,-8}, -{48,20,-7}, -{48,20,-6}, -{48,20,-5}, -{48,20,-4}, -{48,20,-3}, -{48,20,-2}, -{48,20,-1}, -{48,20,0}, -{48,20,1}, -{48,20,2}, -{48,20,3}, -{48,20,4}, -{48,20,5}, -{48,20,6}, -{48,20,7}, -{48,20,8}, -{48,20,9}, -{48,20,10}, -{48,20,11}, -{48,20,12}, -{48,20,13}, -{48,20,14}, -{48,20,15}, -{48,20,16}, -{48,20,17}, -{48,20,18}, -{48,20,19}, -{48,20,20}, -{48,20,21}, -{48,20,22}, -{48,20,23}, -{48,20,24}, -{48,20,25}, -{48,20,26}, -{48,20,27}, -{48,20,28}, -{48,20,29}, -{48,20,30}, -{48,20,31}, -{48,20,32}, -{48,20,33}, -{48,20,34}, -{48,20,35}, -{48,20,36}, -{48,20,37}, -{48,20,38}, -{48,20,39}, -{48,20,40}, -{48,20,41}, -{48,20,42}, -{48,20,43}, -{48,20,44}, -{48,20,45}, -{48,20,46}, -{48,20,47}, -{48,20,48}, -{48,20,49}, -{48,20,50}, -{48,20,51}, -{48,20,52}, -{48,20,53}, -{48,20,54}, -{48,20,55}, -{48,20,56}, -{48,21,-68}, -{48,21,-67}, -{48,21,-66}, -{48,21,-65}, -{48,21,-64}, -{48,21,-63}, -{48,21,-62}, -{48,21,-61}, -{48,21,-60}, -{48,21,-59}, -{48,21,-58}, -{48,21,-57}, -{48,21,-56}, -{48,21,-55}, -{48,21,-54}, -{48,21,-53}, -{48,21,-52}, -{48,21,-51}, -{48,21,-50}, -{48,21,-49}, -{48,21,-48}, -{48,21,-47}, -{48,21,-46}, -{48,21,-45}, -{48,21,-44}, -{48,21,-43}, -{48,21,-42}, -{48,21,-41}, -{48,21,-40}, -{48,21,-39}, -{48,21,-38}, -{48,21,-37}, -{48,21,-36}, -{48,21,-35}, -{48,21,-34}, -{48,21,-33}, -{48,21,-32}, -{48,21,-31}, -{48,21,-30}, -{48,21,-29}, -{48,21,-28}, -{48,21,-27}, -{48,21,-26}, -{48,21,-25}, -{48,21,-24}, -{48,21,-23}, -{48,21,-22}, -{48,21,-21}, -{48,21,-20}, -{48,21,-19}, -{48,21,-18}, -{48,21,-17}, -{48,21,-16}, -{48,21,-15}, -{48,21,-14}, -{48,21,-13}, -{48,21,-12}, -{48,21,-11}, -{48,21,-10}, -{48,21,-9}, -{48,21,-8}, -{48,21,-7}, -{48,21,-6}, -{48,21,-5}, -{48,21,-4}, -{48,21,-3}, -{48,21,-2}, -{48,21,-1}, -{48,21,0}, -{48,21,1}, -{48,21,2}, -{48,21,3}, -{48,21,4}, -{48,21,5}, -{48,21,6}, -{48,21,7}, -{48,21,8}, -{48,21,9}, -{48,21,10}, -{48,21,11}, -{48,21,12}, -{48,21,13}, -{48,21,14}, -{48,21,15}, -{48,21,16}, -{48,21,17}, -{48,21,18}, -{48,21,19}, -{48,21,20}, -{48,21,21}, -{48,21,22}, -{48,21,23}, -{48,21,24}, -{48,21,25}, -{48,21,26}, -{48,21,27}, -{48,21,28}, -{48,21,29}, -{48,21,30}, -{48,21,31}, -{48,21,32}, -{48,21,33}, -{48,21,34}, -{48,21,35}, -{48,21,36}, -{48,21,37}, -{48,21,38}, -{48,21,39}, -{48,21,40}, -{48,21,41}, -{48,21,42}, -{48,21,43}, -{48,21,44}, -{48,21,45}, -{48,21,46}, -{48,21,47}, -{48,21,48}, -{48,21,49}, -{48,21,50}, -{48,21,51}, -{48,21,52}, -{48,21,53}, -{48,21,54}, -{48,21,55}, -{48,21,56}, -{48,22,-69}, -{48,22,-68}, -{48,22,-67}, -{48,22,-66}, -{48,22,-65}, -{48,22,-64}, -{48,22,-63}, -{48,22,-62}, -{48,22,-61}, -{48,22,-60}, -{48,22,-59}, -{48,22,-58}, -{48,22,-57}, -{48,22,-56}, -{48,22,-55}, -{48,22,-54}, -{48,22,-53}, -{48,22,-52}, -{48,22,-51}, -{48,22,-50}, -{48,22,-49}, -{48,22,-48}, -{48,22,-47}, -{48,22,-46}, -{48,22,-45}, -{48,22,-44}, -{48,22,-43}, -{48,22,-42}, -{48,22,-41}, -{48,22,-40}, -{48,22,-39}, -{48,22,-38}, -{48,22,-37}, -{48,22,-36}, -{48,22,-35}, -{48,22,-34}, -{48,22,-33}, -{48,22,-32}, -{48,22,-31}, -{48,22,-30}, -{48,22,-29}, -{48,22,-28}, -{48,22,-27}, -{48,22,-26}, -{48,22,-25}, -{48,22,-24}, -{48,22,-23}, -{48,22,-22}, -{48,22,-21}, -{48,22,-20}, -{48,22,-19}, -{48,22,-18}, -{48,22,-17}, -{48,22,-16}, -{48,22,-15}, -{48,22,-14}, -{48,22,-13}, -{48,22,-12}, -{48,22,-11}, -{48,22,-10}, -{48,22,-9}, -{48,22,-8}, -{48,22,-7}, -{48,22,-6}, -{48,22,-5}, -{48,22,-4}, -{48,22,-3}, -{48,22,-2}, -{48,22,-1}, -{48,22,0}, -{48,22,1}, -{48,22,2}, -{48,22,3}, -{48,22,4}, -{48,22,5}, -{48,22,6}, -{48,22,7}, -{48,22,8}, -{48,22,9}, -{48,22,10}, -{48,22,11}, -{48,22,12}, -{48,22,13}, -{48,22,14}, -{48,22,15}, -{48,22,16}, -{48,22,17}, -{48,22,18}, -{48,22,19}, -{48,22,20}, -{48,22,21}, -{48,22,22}, -{48,22,23}, -{48,22,24}, -{48,22,25}, -{48,22,26}, -{48,22,27}, -{48,22,28}, -{48,22,29}, -{48,22,30}, -{48,22,31}, -{48,22,32}, -{48,22,33}, -{48,22,34}, -{48,22,35}, -{48,22,36}, -{48,22,37}, -{48,22,38}, -{48,22,39}, -{48,22,40}, -{48,22,41}, -{48,22,42}, -{48,22,43}, -{48,22,44}, -{48,22,45}, -{48,22,46}, -{48,22,47}, -{48,22,48}, -{48,22,49}, -{48,22,50}, -{48,22,51}, -{48,22,52}, -{48,22,53}, -{48,22,54}, -{48,22,55}, -{48,22,56}, -{48,23,-70}, -{48,23,-69}, -{48,23,-68}, -{48,23,-67}, -{48,23,-66}, -{48,23,-65}, -{48,23,-64}, -{48,23,-63}, -{48,23,-62}, -{48,23,-61}, -{48,23,-60}, -{48,23,-59}, -{48,23,-58}, -{48,23,-57}, -{48,23,-56}, -{48,23,-55}, -{48,23,-54}, -{48,23,-53}, -{48,23,-52}, -{48,23,-51}, -{48,23,-50}, -{48,23,-49}, -{48,23,-48}, -{48,23,-47}, -{48,23,-46}, -{48,23,-45}, -{48,23,-44}, -{48,23,-43}, -{48,23,-42}, -{48,23,-41}, -{48,23,-40}, -{48,23,-39}, -{48,23,-38}, -{48,23,-37}, -{48,23,-36}, -{48,23,-35}, -{48,23,-34}, -{48,23,-33}, -{48,23,-32}, -{48,23,-31}, -{48,23,-30}, -{48,23,-29}, -{48,23,-28}, -{48,23,-27}, -{48,23,-26}, -{48,23,-25}, -{48,23,-24}, -{48,23,-23}, -{48,23,-22}, -{48,23,-21}, -{48,23,-20}, -{48,23,-19}, -{48,23,-18}, -{48,23,-17}, -{48,23,-16}, -{48,23,-15}, -{48,23,-14}, -{48,23,-13}, -{48,23,-12}, -{48,23,-11}, -{48,23,-10}, -{48,23,-9}, -{48,23,-8}, -{48,23,-7}, -{48,23,-6}, -{48,23,-5}, -{48,23,-4}, -{48,23,-3}, -{48,23,-2}, -{48,23,-1}, -{48,23,0}, -{48,23,1}, -{48,23,2}, -{48,23,3}, -{48,23,4}, -{48,23,5}, -{48,23,6}, -{48,23,7}, -{48,23,8}, -{48,23,9}, -{48,23,10}, -{48,23,11}, -{48,23,12}, -{48,23,13}, -{48,23,14}, -{48,23,15}, -{48,23,16}, -{48,23,17}, -{48,23,18}, -{48,23,19}, -{48,23,20}, -{48,23,21}, -{48,23,22}, -{48,23,23}, -{48,23,24}, -{48,23,25}, -{48,23,26}, -{48,23,27}, -{48,23,28}, -{48,23,29}, -{48,23,30}, -{48,23,31}, -{48,23,32}, -{48,23,33}, -{48,23,34}, -{48,23,35}, -{48,23,36}, -{48,23,37}, -{48,23,38}, -{48,23,39}, -{48,23,40}, -{48,23,41}, -{48,23,42}, -{48,23,43}, -{48,23,44}, -{48,23,45}, -{48,23,46}, -{48,23,47}, -{48,23,48}, -{48,23,49}, -{48,23,50}, -{48,23,51}, -{48,23,52}, -{48,23,53}, -{48,23,54}, -{48,23,55}, -{48,23,56}, -{48,24,-71}, -{48,24,-70}, -{48,24,-69}, -{48,24,-68}, -{48,24,-67}, -{48,24,-66}, -{48,24,-65}, -{48,24,-64}, -{48,24,-63}, -{48,24,-62}, -{48,24,-61}, -{48,24,-60}, -{48,24,-59}, -{48,24,-58}, -{48,24,-57}, -{48,24,-56}, -{48,24,-55}, -{48,24,-54}, -{48,24,-53}, -{48,24,-52}, -{48,24,-51}, -{48,24,-50}, -{48,24,-49}, -{48,24,-48}, -{48,24,-47}, -{48,24,-46}, -{48,24,-45}, -{48,24,-44}, -{48,24,-43}, -{48,24,-42}, -{48,24,-41}, -{48,24,-40}, -{48,24,-39}, -{48,24,-38}, -{48,24,-37}, -{48,24,-36}, -{48,24,-35}, -{48,24,-34}, -{48,24,-33}, -{48,24,-32}, -{48,24,-31}, -{48,24,-30}, -{48,24,-29}, -{48,24,-28}, -{48,24,-27}, -{48,24,-26}, -{48,24,-25}, -{48,24,-24}, -{48,24,-23}, -{48,24,-22}, -{48,24,-21}, -{48,24,-20}, -{48,24,-19}, -{48,24,-18}, -{48,24,-17}, -{48,24,-16}, -{48,24,-15}, -{48,24,-14}, -{48,24,-13}, -{48,24,-12}, -{48,24,-11}, -{48,24,-10}, -{48,24,-9}, -{48,24,-8}, -{48,24,-7}, -{48,24,-6}, -{48,24,-5}, -{48,24,-4}, -{48,24,-3}, -{48,24,-2}, -{48,24,-1}, -{48,24,0}, -{48,24,1}, -{48,24,2}, -{48,24,3}, -{48,24,4}, -{48,24,5}, -{48,24,6}, -{48,24,7}, -{48,24,8}, -{48,24,9}, -{48,24,10}, -{48,24,11}, -{48,24,12}, -{48,24,13}, -{48,24,14}, -{48,24,15}, -{48,24,16}, -{48,24,17}, -{48,24,18}, -{48,24,19}, -{48,24,20}, -{48,24,21}, -{48,24,22}, -{48,24,23}, -{48,24,24}, -{48,24,25}, -{48,24,26}, -{48,24,27}, -{48,24,28}, -{48,24,29}, -{48,24,30}, -{48,24,31}, -{48,24,32}, -{48,24,33}, -{48,24,34}, -{48,24,35}, -{48,24,36}, -{48,24,37}, -{48,24,38}, -{48,24,39}, -{48,24,40}, -{48,24,41}, -{48,24,42}, -{48,24,43}, -{48,24,44}, -{48,24,45}, -{48,24,46}, -{48,24,47}, -{48,24,48}, -{48,24,49}, -{48,24,50}, -{48,24,51}, -{48,24,52}, -{48,24,53}, -{48,24,54}, -{48,24,55}, -{48,24,56}, -{48,25,-72}, -{48,25,-71}, -{48,25,-70}, -{48,25,-69}, -{48,25,-68}, -{48,25,-67}, -{48,25,-66}, -{48,25,-65}, -{48,25,-64}, -{48,25,-63}, -{48,25,-62}, -{48,25,-61}, -{48,25,-60}, -{48,25,-59}, -{48,25,-58}, -{48,25,-57}, -{48,25,-56}, -{48,25,-55}, -{48,25,-54}, -{48,25,-53}, -{48,25,-52}, -{48,25,-51}, -{48,25,-50}, -{48,25,-49}, -{48,25,-48}, -{48,25,-47}, -{48,25,-46}, -{48,25,-45}, -{48,25,-44}, -{48,25,-43}, -{48,25,-42}, -{48,25,-41}, -{48,25,-40}, -{48,25,-39}, -{48,25,-38}, -{48,25,-37}, -{48,25,-36}, -{48,25,-35}, -{48,25,-34}, -{48,25,-33}, -{48,25,-32}, -{48,25,-31}, -{48,25,-30}, -{48,25,-29}, -{48,25,-28}, -{48,25,-27}, -{48,25,-26}, -{48,25,-25}, -{48,25,-24}, -{48,25,-23}, -{48,25,-22}, -{48,25,-21}, -{48,25,-20}, -{48,25,-19}, -{48,25,-18}, -{48,25,-17}, -{48,25,-16}, -{48,25,-15}, -{48,25,-14}, -{48,25,-13}, -{48,25,-12}, -{48,25,-11}, -{48,25,-10}, -{48,25,-9}, -{48,25,-8}, -{48,25,-7}, -{48,25,-6}, -{48,25,-5}, -{48,25,-4}, -{48,25,-3}, -{48,25,-2}, -{48,25,-1}, -{48,25,0}, -{48,25,1}, -{48,25,2}, -{48,25,3}, -{48,25,4}, -{48,25,5}, -{48,25,6}, -{48,25,7}, -{48,25,8}, -{48,25,9}, -{48,25,10}, -{48,25,11}, -{48,25,12}, -{48,25,13}, -{48,25,14}, -{48,25,15}, -{48,25,16}, -{48,25,17}, -{48,25,18}, -{48,25,19}, -{48,25,20}, -{48,25,21}, -{48,25,22}, -{48,25,23}, -{48,25,24}, -{48,25,25}, -{48,25,26}, -{48,25,27}, -{48,25,28}, -{48,25,29}, -{48,25,30}, -{48,25,31}, -{48,25,32}, -{48,25,33}, -{48,25,34}, -{48,25,35}, -{48,25,36}, -{48,25,37}, -{48,25,38}, -{48,25,39}, -{48,25,40}, -{48,25,41}, -{48,25,42}, -{48,25,43}, -{48,25,44}, -{48,25,45}, -{48,25,46}, -{48,25,47}, -{48,25,48}, -{48,25,49}, -{48,25,50}, -{48,25,51}, -{48,25,52}, -{48,25,53}, -{48,25,54}, -{48,25,55}, -{48,25,56}, -{48,26,-73}, -{48,26,-72}, -{48,26,-71}, -{48,26,-70}, -{48,26,-69}, -{48,26,-68}, -{48,26,-67}, -{48,26,-66}, -{48,26,-65}, -{48,26,-64}, -{48,26,-63}, -{48,26,-62}, -{48,26,-61}, -{48,26,-60}, -{48,26,-59}, -{48,26,-58}, -{48,26,-57}, -{48,26,-56}, -{48,26,-55}, -{48,26,-54}, -{48,26,-53}, -{48,26,-52}, -{48,26,-51}, -{48,26,-50}, -{48,26,-49}, -{48,26,-48}, -{48,26,-47}, -{48,26,-46}, -{48,26,-45}, -{48,26,-44}, -{48,26,-43}, -{48,26,-42}, -{48,26,-41}, -{48,26,-40}, -{48,26,-39}, -{48,26,-38}, -{48,26,-37}, -{48,26,-36}, -{48,26,-35}, -{48,26,-34}, -{48,26,-33}, -{48,26,-32}, -{48,26,-31}, -{48,26,-30}, -{48,26,-29}, -{48,26,-28}, -{48,26,-27}, -{48,26,-26}, -{48,26,-25}, -{48,26,-24}, -{48,26,-23}, -{48,26,-22}, -{48,26,-21}, -{48,26,-20}, -{48,26,-19}, -{48,26,-18}, -{48,26,-17}, -{48,26,-16}, -{48,26,-15}, -{48,26,-14}, -{48,26,-13}, -{48,26,-12}, -{48,26,-11}, -{48,26,-10}, -{48,26,-9}, -{48,26,-8}, -{48,26,-7}, -{48,26,-6}, -{48,26,-5}, -{48,26,-4}, -{48,26,-3}, -{48,26,-2}, -{48,26,-1}, -{48,26,0}, -{48,26,1}, -{48,26,2}, -{48,26,3}, -{48,26,4}, -{48,26,5}, -{48,26,6}, -{48,26,7}, -{48,26,8}, -{48,26,9}, -{48,26,10}, -{48,26,11}, -{48,26,12}, -{48,26,13}, -{48,26,14}, -{48,26,15}, -{48,26,16}, -{48,26,17}, -{48,26,18}, -{48,26,19}, -{48,26,20}, -{48,26,21}, -{48,26,22}, -{48,26,23}, -{48,26,24}, -{48,26,25}, -{48,26,26}, -{48,26,27}, -{48,26,28}, -{48,26,29}, -{48,26,30}, -{48,26,31}, -{48,26,32}, -{48,26,33}, -{48,26,34}, -{48,26,35}, -{48,26,36}, -{48,26,37}, -{48,26,38}, -{48,26,39}, -{48,26,40}, -{48,26,41}, -{48,26,42}, -{48,26,43}, -{48,26,44}, -{48,26,45}, -{48,26,46}, -{48,26,47}, -{48,26,48}, -{48,26,49}, -{48,26,50}, -{48,26,51}, -{48,26,52}, -{48,26,53}, -{48,26,54}, -{48,26,55}, -{48,26,56}, -{48,27,-74}, -{48,27,-73}, -{48,27,-72}, -{48,27,-71}, -{48,27,-70}, -{48,27,-69}, -{48,27,-68}, -{48,27,-67}, -{48,27,-66}, -{48,27,-65}, -{48,27,-64}, -{48,27,-63}, -{48,27,-62}, -{48,27,-61}, -{48,27,-60}, -{48,27,-59}, -{48,27,-58}, -{48,27,-57}, -{48,27,-56}, -{48,27,-55}, -{48,27,-54}, -{48,27,-53}, -{48,27,-52}, -{48,27,-51}, -{48,27,-50}, -{48,27,-49}, -{48,27,-48}, -{48,27,-47}, -{48,27,-46}, -{48,27,-45}, -{48,27,-44}, -{48,27,-43}, -{48,27,-42}, -{48,27,-41}, -{48,27,-40}, -{48,27,-39}, -{48,27,-38}, -{48,27,-37}, -{48,27,-36}, -{48,27,-35}, -{48,27,-34}, -{48,27,-33}, -{48,27,-32}, -{48,27,-31}, -{48,27,-30}, -{48,27,-29}, -{48,27,-28}, -{48,27,-27}, -{48,27,-26}, -{48,27,-25}, -{48,27,-24}, -{48,27,-23}, -{48,27,-22}, -{48,27,-21}, -{48,27,-20}, -{48,27,-19}, -{48,27,-18}, -{48,27,-17}, -{48,27,-16}, -{48,27,-15}, -{48,27,-14}, -{48,27,-13}, -{48,27,-12}, -{48,27,-11}, -{48,27,-10}, -{48,27,-9}, -{48,27,-8}, -{48,27,-7}, -{48,27,-6}, -{48,27,-5}, -{48,27,-4}, -{48,27,-3}, -{48,27,-2}, -{48,27,-1}, -{48,27,0}, -{48,27,1}, -{48,27,2}, -{48,27,3}, -{48,27,4}, -{48,27,5}, -{48,27,6}, -{48,27,7}, -{48,27,8}, -{48,27,9}, -{48,27,10}, -{48,27,11}, -{48,27,12}, -{48,27,13}, -{48,27,14}, -{48,27,15}, -{48,27,16}, -{48,27,17}, -{48,27,18}, -{48,27,19}, -{48,27,20}, -{48,27,21}, -{48,27,22}, -{48,27,23}, -{48,27,24}, -{48,27,25}, -{48,27,26}, -{48,27,27}, -{48,27,28}, -{48,27,29}, -{48,27,30}, -{48,27,31}, -{48,27,32}, -{48,27,33}, -{48,27,34}, -{48,27,35}, -{48,27,36}, -{48,27,37}, -{48,27,38}, -{48,27,39}, -{48,27,40}, -{48,27,41}, -{48,27,42}, -{48,27,43}, -{48,27,44}, -{48,27,45}, -{48,27,46}, -{48,27,47}, -{48,27,48}, -{48,27,49}, -{48,27,50}, -{48,27,51}, -{48,27,52}, -{48,27,53}, -{48,27,54}, -{48,27,55}, -{48,27,56}, -{48,28,-75}, -{48,28,-74}, -{48,28,-73}, -{48,28,-72}, -{48,28,-71}, -{48,28,-70}, -{48,28,-69}, -{48,28,-68}, -{48,28,-67}, -{48,28,-66}, -{48,28,-65}, -{48,28,-64}, -{48,28,-63}, -{48,28,-62}, -{48,28,-61}, -{48,28,-60}, -{48,28,-59}, -{48,28,-58}, -{48,28,-57}, -{48,28,-56}, -{48,28,-55}, -{48,28,-54}, -{48,28,-53}, -{48,28,-52}, -{48,28,-51}, -{48,28,-50}, -{48,28,-49}, -{48,28,-48}, -{48,28,-47}, -{48,28,-46}, -{48,28,-45}, -{48,28,-44}, -{48,28,-43}, -{48,28,-42}, -{48,28,-41}, -{48,28,-40}, -{48,28,-39}, -{48,28,-38}, -{48,28,-37}, -{48,28,-36}, -{48,28,-35}, -{48,28,-34}, -{48,28,-33}, -{48,28,-32}, -{48,28,-31}, -{48,28,-30}, -{48,28,-29}, -{48,28,-28}, -{48,28,-27}, -{48,28,-26}, -{48,28,-25}, -{48,28,-24}, -{48,28,-23}, -{48,28,-22}, -{48,28,-21}, -{48,28,-20}, -{48,28,-19}, -{48,28,-18}, -{48,28,-17}, -{48,28,-16}, -{48,28,-15}, -{48,28,-14}, -{48,28,-13}, -{48,28,-12}, -{48,28,-11}, -{48,28,-10}, -{48,28,-9}, -{48,28,-8}, -{48,28,-7}, -{48,28,-6}, -{48,28,-5}, -{48,28,-4}, -{48,28,-3}, -{48,28,-2}, -{48,28,-1}, -{48,28,0}, -{48,28,1}, -{48,28,2}, -{48,28,3}, -{48,28,4}, -{48,28,5}, -{48,28,6}, -{48,28,7}, -{48,28,8}, -{48,28,9}, -{48,28,10}, -{48,28,11}, -{48,28,12}, -{48,28,13}, -{48,28,14}, -{48,28,15}, -{48,28,16}, -{48,28,17}, -{48,28,18}, -{48,28,19}, -{48,28,20}, -{48,28,21}, -{48,28,22}, -{48,28,23}, -{48,28,24}, -{48,28,25}, -{48,28,26}, -{48,28,27}, -{48,28,28}, -{48,28,29}, -{48,28,30}, -{48,28,31}, -{48,28,32}, -{48,28,33}, -{48,28,34}, -{48,28,35}, -{48,28,36}, -{48,28,37}, -{48,28,38}, -{48,28,39}, -{48,28,40}, -{48,28,41}, -{48,28,42}, -{48,28,43}, -{48,28,44}, -{48,28,45}, -{48,28,46}, -{48,28,47}, -{48,28,48}, -{48,28,49}, -{48,28,50}, -{48,28,51}, -{48,28,52}, -{48,28,53}, -{48,28,54}, -{48,28,55}, -{48,28,56}, -{48,29,-76}, -{48,29,-75}, -{48,29,-74}, -{48,29,-73}, -{48,29,-72}, -{48,29,-71}, -{48,29,-70}, -{48,29,-69}, -{48,29,-68}, -{48,29,-67}, -{48,29,-66}, -{48,29,-65}, -{48,29,-64}, -{48,29,-63}, -{48,29,-62}, -{48,29,-61}, -{48,29,-60}, -{48,29,-59}, -{48,29,-58}, -{48,29,-57}, -{48,29,-56}, -{48,29,-55}, -{48,29,-54}, -{48,29,-53}, -{48,29,-52}, -{48,29,-51}, -{48,29,-50}, -{48,29,-49}, -{48,29,-48}, -{48,29,-47}, -{48,29,-46}, -{48,29,-45}, -{48,29,-44}, -{48,29,-43}, -{48,29,-42}, -{48,29,-41}, -{48,29,-40}, -{48,29,-39}, -{48,29,-38}, -{48,29,-37}, -{48,29,-36}, -{48,29,-35}, -{48,29,-34}, -{48,29,-33}, -{48,29,-32}, -{48,29,-31}, -{48,29,-30}, -{48,29,-29}, -{48,29,-28}, -{48,29,-27}, -{48,29,-26}, -{48,29,-25}, -{48,29,-24}, -{48,29,-23}, -{48,29,-22}, -{48,29,-21}, -{48,29,-20}, -{48,29,-19}, -{48,29,-18}, -{48,29,-17}, -{48,29,-16}, -{48,29,-15}, -{48,29,-14}, -{48,29,-13}, -{48,29,-12}, -{48,29,-11}, -{48,29,-10}, -{48,29,-9}, -{48,29,-8}, -{48,29,-7}, -{48,29,-6}, -{48,29,-5}, -{48,29,-4}, -{48,29,-3}, -{48,29,-2}, -{48,29,-1}, -{48,29,0}, -{48,29,1}, -{48,29,2}, -{48,29,3}, -{48,29,4}, -{48,29,5}, -{48,29,6}, -{48,29,7}, -{48,29,8}, -{48,29,9}, -{48,29,10}, -{48,29,11}, -{48,29,12}, -{48,29,13}, -{48,29,14}, -{48,29,15}, -{48,29,16}, -{48,29,17}, -{48,29,18}, -{48,29,19}, -{48,29,20}, -{48,29,21}, -{48,29,22}, -{48,29,23}, -{48,29,24}, -{48,29,25}, -{48,29,26}, -{48,29,27}, -{48,29,28}, -{48,29,29}, -{48,29,30}, -{48,29,31}, -{48,29,32}, -{48,29,33}, -{48,29,34}, -{48,29,35}, -{48,29,36}, -{48,29,37}, -{48,29,38}, -{48,29,39}, -{48,29,40}, -{48,29,41}, -{48,29,42}, -{48,29,43}, -{48,29,44}, -{48,29,45}, -{48,29,46}, -{48,29,47}, -{48,29,48}, -{48,29,49}, -{48,29,50}, -{48,29,51}, -{48,29,52}, -{48,29,53}, -{48,29,54}, -{48,29,55}, -{48,29,56}, -{48,30,-77}, -{48,30,-76}, -{48,30,-75}, -{48,30,-74}, -{48,30,-73}, -{48,30,-72}, -{48,30,-71}, -{48,30,-70}, -{48,30,-69}, -{48,30,-68}, -{48,30,-67}, -{48,30,-66}, -{48,30,-65}, -{48,30,-64}, -{48,30,-63}, -{48,30,-62}, -{48,30,-61}, -{48,30,-60}, -{48,30,-59}, -{48,30,-58}, -{48,30,-57}, -{48,30,-56}, -{48,30,-55}, -{48,30,-54}, -{48,30,-53}, -{48,30,-52}, -{48,30,-51}, -{48,30,-50}, -{48,30,-49}, -{48,30,-48}, -{48,30,-47}, -{48,30,-46}, -{48,30,-45}, -{48,30,-44}, -{48,30,-43}, -{48,30,-42}, -{48,30,-41}, -{48,30,-40}, -{48,30,-39}, -{48,30,-38}, -{48,30,-37}, -{48,30,-36}, -{48,30,-35}, -{48,30,-34}, -{48,30,-33}, -{48,30,-32}, -{48,30,-31}, -{48,30,-30}, -{48,30,-29}, -{48,30,-28}, -{48,30,-27}, -{48,30,-26}, -{48,30,-25}, -{48,30,-24}, -{48,30,-23}, -{48,30,-22}, -{48,30,-21}, -{48,30,-20}, -{48,30,-19}, -{48,30,-18}, -{48,30,-17}, -{48,30,-16}, -{48,30,-15}, -{48,30,-14}, -{48,30,-13}, -{48,30,-12}, -{48,30,-11}, -{48,30,-10}, -{48,30,-9}, -{48,30,-8}, -{48,30,-7}, -{48,30,-6}, -{48,30,-5}, -{48,30,-4}, -{48,30,-3}, -{48,30,-2}, -{48,30,-1}, -{48,30,0}, -{48,30,1}, -{48,30,2}, -{48,30,3}, -{48,30,4}, -{48,30,5}, -{48,30,6}, -{48,30,7}, -{48,30,8}, -{48,30,9}, -{48,30,10}, -{48,30,11}, -{48,30,12}, -{48,30,13}, -{48,30,14}, -{48,30,15}, -{48,30,16}, -{48,30,17}, -{48,30,18}, -{48,30,19}, -{48,30,20}, -{48,30,21}, -{48,30,22}, -{48,30,23}, -{48,30,24}, -{48,30,25}, -{48,30,26}, -{48,30,27}, -{48,30,28}, -{48,30,29}, -{48,30,30}, -{48,30,31}, -{48,30,32}, -{48,30,33}, -{48,30,34}, -{48,30,35}, -{48,30,36}, -{48,30,37}, -{48,30,38}, -{48,30,39}, -{48,30,40}, -{48,30,41}, -{48,30,42}, -{48,30,43}, -{48,30,44}, -{48,30,45}, -{48,30,46}, -{48,30,47}, -{48,30,48}, -{48,30,49}, -{48,30,50}, -{48,30,51}, -{48,30,52}, -{48,30,53}, -{48,30,54}, -{48,30,55}, -{48,30,56}, -{48,31,-78}, -{48,31,-77}, -{48,31,-76}, -{48,31,-75}, -{48,31,-74}, -{48,31,-73}, -{48,31,-72}, -{48,31,-71}, -{48,31,-70}, -{48,31,-69}, -{48,31,-68}, -{48,31,-67}, -{48,31,-66}, -{48,31,-65}, -{48,31,-64}, -{48,31,-63}, -{48,31,-62}, -{48,31,-61}, -{48,31,-60}, -{48,31,-59}, -{48,31,-58}, -{48,31,-57}, -{48,31,-56}, -{48,31,-55}, -{48,31,-54}, -{48,31,-53}, -{48,31,-52}, -{48,31,-51}, -{48,31,-50}, -{48,31,-49}, -{48,31,-48}, -{48,31,-47}, -{48,31,-46}, -{48,31,-45}, -{48,31,-44}, -{48,31,-43}, -{48,31,-42}, -{48,31,-41}, -{48,31,-40}, -{48,31,-39}, -{48,31,-38}, -{48,31,-37}, -{48,31,-36}, -{48,31,-35}, -{48,31,-34}, -{48,31,-33}, -{48,31,-32}, -{48,31,-31}, -{48,31,-30}, -{48,31,-29}, -{48,31,-28}, -{48,31,-27}, -{48,31,-26}, -{48,31,-25}, -{48,31,-24}, -{48,31,-23}, -{48,31,-22}, -{48,31,-21}, -{48,31,-20}, -{48,31,-19}, -{48,31,-18}, -{48,31,-17}, -{48,31,-16}, -{48,31,-15}, -{48,31,-14}, -{48,31,-13}, -{48,31,-12}, -{48,31,-11}, -{48,31,-10}, -{48,31,-9}, -{48,31,-8}, -{48,31,-7}, -{48,31,-6}, -{48,31,-5}, -{48,31,-4}, -{48,31,-3}, -{48,31,-2}, -{48,31,-1}, -{48,31,0}, -{48,31,1}, -{48,31,2}, -{48,31,3}, -{48,31,4}, -{48,31,5}, -{48,31,6}, -{48,31,7}, -{48,31,8}, -{48,31,9}, -{48,31,10}, -{48,31,11}, -{48,31,12}, -{48,31,13}, -{48,31,14}, -{48,31,15}, -{48,31,16}, -{48,31,17}, -{48,31,18}, -{48,31,19}, -{48,31,20}, -{48,31,21}, -{48,31,22}, -{48,31,23}, -{48,31,24}, -{48,31,25}, -{48,31,26}, -{48,31,27}, -{48,31,28}, -{48,31,29}, -{48,31,30}, -{48,31,31}, -{48,31,32}, -{48,31,33}, -{48,31,34}, -{48,31,35}, -{48,31,36}, -{48,31,37}, -{48,31,38}, -{48,31,39}, -{48,31,40}, -{48,31,41}, -{48,31,42}, -{48,31,43}, -{48,31,44}, -{48,31,45}, -{48,31,46}, -{48,31,47}, -{48,31,48}, -{48,31,49}, -{48,31,50}, -{48,31,51}, -{48,31,52}, -{48,31,53}, -{48,31,54}, -{48,31,55}, -{48,31,56}, -{48,31,57}, -{48,32,-79}, -{48,32,-78}, -{48,32,-77}, -{48,32,-76}, -{48,32,-75}, -{48,32,-74}, -{48,32,-73}, -{48,32,-72}, -{48,32,-71}, -{48,32,-70}, -{48,32,-69}, -{48,32,-68}, -{48,32,-67}, -{48,32,-66}, -{48,32,-65}, -{48,32,-64}, -{48,32,-63}, -{48,32,-62}, -{48,32,-61}, -{48,32,-60}, -{48,32,-59}, -{48,32,-58}, -{48,32,-57}, -{48,32,-56}, -{48,32,-55}, -{48,32,-54}, -{48,32,-53}, -{48,32,-52}, -{48,32,-51}, -{48,32,-50}, -{48,32,-49}, -{48,32,-48}, -{48,32,-47}, -{48,32,-46}, -{48,32,-45}, -{48,32,-44}, -{48,32,-43}, -{48,32,-42}, -{48,32,-41}, -{48,32,-40}, -{48,32,-39}, -{48,32,-38}, -{48,32,-37}, -{48,32,-36}, -{48,32,-35}, -{48,32,-34}, -{48,32,-33}, -{48,32,-32}, -{48,32,-31}, -{48,32,-30}, -{48,32,-29}, -{48,32,-28}, -{48,32,-27}, -{48,32,-26}, -{48,32,-25}, -{48,32,-24}, -{48,32,-23}, -{48,32,-22}, -{48,32,-21}, -{48,32,-20}, -{48,32,-19}, -{48,32,-18}, -{48,32,-17}, -{48,32,-16}, -{48,32,-15}, -{48,32,-14}, -{48,32,-13}, -{48,32,-12}, -{48,32,-11}, -{48,32,-10}, -{48,32,-9}, -{48,32,-8}, -{48,32,-7}, -{48,32,-6}, -{48,32,-5}, -{48,32,-4}, -{48,32,-3}, -{48,32,-2}, -{48,32,-1}, -{48,32,0}, -{48,32,1}, -{48,32,2}, -{48,32,3}, -{48,32,4}, -{48,32,5}, -{48,32,6}, -{48,32,7}, -{48,32,8}, -{48,32,9}, -{48,32,10}, -{48,32,11}, -{48,32,12}, -{48,32,13}, -{48,32,14}, -{48,32,15}, -{48,32,16}, -{48,32,17}, -{48,32,18}, -{48,32,19}, -{48,32,20}, -{48,32,21}, -{48,32,22}, -{48,32,23}, -{48,32,24}, -{48,32,25}, -{48,32,26}, -{48,32,27}, -{48,32,28}, -{48,32,29}, -{48,32,30}, -{48,32,31}, -{48,32,32}, -{48,32,33}, -{48,32,34}, -{48,32,35}, -{48,32,36}, -{48,32,37}, -{48,32,38}, -{48,32,39}, -{48,32,40}, -{48,32,41}, -{48,32,42}, -{48,32,43}, -{48,32,44}, -{48,32,45}, -{48,32,46}, -{48,32,47}, -{48,32,48}, -{48,32,49}, -{48,32,50}, -{48,32,51}, -{48,32,52}, -{48,32,53}, -{48,32,54}, -{48,32,55}, -{48,32,56}, -{48,32,57}, -{48,33,-80}, -{48,33,-79}, -{48,33,-78}, -{48,33,-77}, -{48,33,-76}, -{48,33,-75}, -{48,33,-74}, -{48,33,-73}, -{48,33,-72}, -{48,33,-71}, -{48,33,-70}, -{48,33,-69}, -{48,33,-68}, -{48,33,-67}, -{48,33,-66}, -{48,33,-65}, -{48,33,-64}, -{48,33,-63}, -{48,33,-62}, -{48,33,-61}, -{48,33,-60}, -{48,33,-59}, -{48,33,-58}, -{48,33,-57}, -{48,33,-56}, -{48,33,-55}, -{48,33,-54}, -{48,33,-53}, -{48,33,-52}, -{48,33,-51}, -{48,33,-50}, -{48,33,-49}, -{48,33,-48}, -{48,33,-47}, -{48,33,-46}, -{48,33,-45}, -{48,33,-44}, -{48,33,-43}, -{48,33,-42}, -{48,33,-41}, -{48,33,-40}, -{48,33,-39}, -{48,33,-38}, -{48,33,-37}, -{48,33,-36}, -{48,33,-35}, -{48,33,-34}, -{48,33,-33}, -{48,33,-32}, -{48,33,-31}, -{48,33,-30}, -{48,33,-29}, -{48,33,-28}, -{48,33,-27}, -{48,33,-26}, -{48,33,-25}, -{48,33,-24}, -{48,33,-23}, -{48,33,-22}, -{48,33,-21}, -{48,33,-20}, -{48,33,-19}, -{48,33,-18}, -{48,33,-17}, -{48,33,-16}, -{48,33,-15}, -{48,33,-14}, -{48,33,-13}, -{48,33,-12}, -{48,33,-11}, -{48,33,-10}, -{48,33,-9}, -{48,33,-8}, -{48,33,-7}, -{48,33,-6}, -{48,33,-5}, -{48,33,-4}, -{48,33,-3}, -{48,33,-2}, -{48,33,-1}, -{48,33,0}, -{48,33,1}, -{48,33,2}, -{48,33,3}, -{48,33,4}, -{48,33,5}, -{48,33,6}, -{48,33,7}, -{48,33,8}, -{48,33,9}, -{48,33,10}, -{48,33,11}, -{48,33,12}, -{48,33,13}, -{48,33,14}, -{48,33,15}, -{48,33,16}, -{48,33,17}, -{48,33,18}, -{48,33,19}, -{48,33,20}, -{48,33,21}, -{48,33,22}, -{48,33,23}, -{48,33,24}, -{48,33,25}, -{48,33,26}, -{48,33,27}, -{48,33,28}, -{48,33,29}, -{48,33,30}, -{48,33,31}, -{48,33,32}, -{48,33,33}, -{48,33,34}, -{48,33,35}, -{48,33,36}, -{48,33,37}, -{48,33,38}, -{48,33,39}, -{48,33,40}, -{48,33,41}, -{48,33,42}, -{48,33,43}, -{48,33,44}, -{48,33,45}, -{48,33,46}, -{48,33,47}, -{48,33,48}, -{48,33,49}, -{48,33,50}, -{48,33,51}, -{48,33,52}, -{48,33,53}, -{48,33,54}, -{48,33,55}, -{48,33,56}, -{48,33,57}, -{48,34,-81}, -{48,34,-80}, -{48,34,-79}, -{48,34,-78}, -{48,34,-77}, -{48,34,-76}, -{48,34,-75}, -{48,34,-74}, -{48,34,-73}, -{48,34,-72}, -{48,34,-71}, -{48,34,-70}, -{48,34,-69}, -{48,34,-68}, -{48,34,-67}, -{48,34,-66}, -{48,34,-65}, -{48,34,-64}, -{48,34,-63}, -{48,34,-62}, -{48,34,-61}, -{48,34,-60}, -{48,34,-59}, -{48,34,-58}, -{48,34,-57}, -{48,34,-56}, -{48,34,-55}, -{48,34,-54}, -{48,34,-53}, -{48,34,-52}, -{48,34,-51}, -{48,34,-50}, -{48,34,-49}, -{48,34,-48}, -{48,34,-47}, -{48,34,-46}, -{48,34,-45}, -{48,34,-44}, -{48,34,-43}, -{48,34,-42}, -{48,34,-41}, -{48,34,-40}, -{48,34,-39}, -{48,34,-38}, -{48,34,-37}, -{48,34,-36}, -{48,34,-35}, -{48,34,-34}, -{48,34,-33}, -{48,34,-32}, -{48,34,-31}, -{48,34,-30}, -{48,34,-29}, -{48,34,-28}, -{48,34,-27}, -{48,34,-26}, -{48,34,-25}, -{48,34,-24}, -{48,34,-23}, -{48,34,-22}, -{48,34,-21}, -{48,34,-20}, -{48,34,-19}, -{48,34,-18}, -{48,34,-17}, -{48,34,-16}, -{48,34,-15}, -{48,34,-14}, -{48,34,-13}, -{48,34,-12}, -{48,34,-11}, -{48,34,-10}, -{48,34,-9}, -{48,34,-8}, -{48,34,-7}, -{48,34,-6}, -{48,34,-5}, -{48,34,-4}, -{48,34,-3}, -{48,34,-2}, -{48,34,-1}, -{48,34,0}, -{48,34,1}, -{48,34,2}, -{48,34,3}, -{48,34,4}, -{48,34,5}, -{48,34,6}, -{48,34,7}, -{48,34,8}, -{48,34,9}, -{48,34,10}, -{48,34,11}, -{48,34,12}, -{48,34,13}, -{48,34,14}, -{48,34,15}, -{48,34,16}, -{48,34,17}, -{48,34,18}, -{48,34,19}, -{48,34,20}, -{48,34,21}, -{48,34,22}, -{48,34,23}, -{48,34,24}, -{48,34,25}, -{48,34,26}, -{48,34,27}, -{48,34,28}, -{48,34,29}, -{48,34,30}, -{48,34,31}, -{48,34,32}, -{48,34,33}, -{48,34,34}, -{48,34,35}, -{48,34,36}, -{48,34,37}, -{48,34,38}, -{48,34,39}, -{48,34,40}, -{48,34,41}, -{48,34,42}, -{48,34,43}, -{48,34,44}, -{48,34,45}, -{48,34,46}, -{48,34,47}, -{48,34,48}, -{48,34,49}, -{48,34,50}, -{48,34,51}, -{48,34,52}, -{48,34,53}, -{48,34,54}, -{48,34,55}, -{48,34,56}, -{48,34,57}, -{48,35,-82}, -{48,35,-81}, -{48,35,-80}, -{48,35,-79}, -{48,35,-78}, -{48,35,-77}, -{48,35,-76}, -{48,35,-75}, -{48,35,-74}, -{48,35,-73}, -{48,35,-72}, -{48,35,-71}, -{48,35,-70}, -{48,35,-69}, -{48,35,-68}, -{48,35,-67}, -{48,35,-66}, -{48,35,-65}, -{48,35,-64}, -{48,35,-63}, -{48,35,-62}, -{48,35,-61}, -{48,35,-60}, -{48,35,-59}, -{48,35,-58}, -{48,35,-57}, -{48,35,-56}, -{48,35,-55}, -{48,35,-54}, -{48,35,-53}, -{48,35,-52}, -{48,35,-51}, -{48,35,-50}, -{48,35,-49}, -{48,35,-48}, -{48,35,-47}, -{48,35,-46}, -{48,35,-45}, -{48,35,-44}, -{48,35,-43}, -{48,35,-42}, -{48,35,-41}, -{48,35,-40}, -{48,35,-39}, -{48,35,-38}, -{48,35,-37}, -{48,35,-36}, -{48,35,-35}, -{48,35,-34}, -{48,35,-33}, -{48,35,-32}, -{48,35,-31}, -{48,35,-30}, -{48,35,-29}, -{48,35,-28}, -{48,35,-27}, -{48,35,-26}, -{48,35,-25}, -{48,35,-24}, -{48,35,-23}, -{48,35,-22}, -{48,35,-21}, -{48,35,-20}, -{48,35,-19}, -{48,35,-18}, -{48,35,-17}, -{48,35,-16}, -{48,35,-15}, -{48,35,-14}, -{48,35,-13}, -{48,35,-12}, -{48,35,-11}, -{48,35,-10}, -{48,35,-9}, -{48,35,-8}, -{48,35,-7}, -{48,35,-6}, -{48,35,-5}, -{48,35,-4}, -{48,35,-3}, -{48,35,-2}, -{48,35,-1}, -{48,35,0}, -{48,35,1}, -{48,35,2}, -{48,35,3}, -{48,35,4}, -{48,35,5}, -{48,35,6}, -{48,35,7}, -{48,35,8}, -{48,35,9}, -{48,35,10}, -{48,35,11}, -{48,35,12}, -{48,35,13}, -{48,35,14}, -{48,35,15}, -{48,35,16}, -{48,35,17}, -{48,35,18}, -{48,35,19}, -{48,35,20}, -{48,35,21}, -{48,35,22}, -{48,35,23}, -{48,35,24}, -{48,35,25}, -{48,35,26}, -{48,35,27}, -{48,35,28}, -{48,35,29}, -{48,35,30}, -{48,35,31}, -{48,35,32}, -{48,35,33}, -{48,35,34}, -{48,35,35}, -{48,35,36}, -{48,35,37}, -{48,35,38}, -{48,35,39}, -{48,35,40}, -{48,35,41}, -{48,35,42}, -{48,35,43}, -{48,35,44}, -{48,35,45}, -{48,35,46}, -{48,35,47}, -{48,35,48}, -{48,35,49}, -{48,35,50}, -{48,35,51}, -{48,35,52}, -{48,35,53}, -{48,35,54}, -{48,35,55}, -{48,35,56}, -{48,35,57}, -{48,36,-81}, -{48,36,-80}, -{48,36,-79}, -{48,36,-78}, -{48,36,-77}, -{48,36,-76}, -{48,36,-75}, -{48,36,-74}, -{48,36,-73}, -{48,36,-72}, -{48,36,-71}, -{48,36,-70}, -{48,36,-69}, -{48,36,-68}, -{48,36,-67}, -{48,36,-66}, -{48,36,-65}, -{48,36,-64}, -{48,36,-63}, -{48,36,-62}, -{48,36,-61}, -{48,36,-60}, -{48,36,-59}, -{48,36,-58}, -{48,36,-57}, -{48,36,-56}, -{48,36,-55}, -{48,36,-54}, -{48,36,-53}, -{48,36,-52}, -{48,36,-51}, -{48,36,-50}, -{48,36,-49}, -{48,36,-48}, -{48,36,-47}, -{48,36,-46}, -{48,36,-45}, -{48,36,-44}, -{48,36,-43}, -{48,36,-42}, -{48,36,-41}, -{48,36,-40}, -{48,36,-39}, -{48,36,-38}, -{48,36,-37}, -{48,36,-36}, -{48,36,-35}, -{48,36,-34}, -{48,36,-33}, -{48,36,-32}, -{48,36,-31}, -{48,36,-30}, -{48,36,-29}, -{48,36,-28}, -{48,36,-27}, -{48,36,-26}, -{48,36,-25}, -{48,36,-24}, -{48,36,-23}, -{48,36,-22}, -{48,36,-21}, -{48,36,-20}, -{48,36,-19}, -{48,36,-18}, -{48,36,-17}, -{48,36,-16}, -{48,36,-15}, -{48,36,-14}, -{48,36,-13}, -{48,36,-12}, -{48,36,-11}, -{48,36,-10}, -{48,36,-9}, -{48,36,-8}, -{48,36,-7}, -{48,36,-6}, -{48,36,-5}, -{48,36,-4}, -{48,36,-3}, -{48,36,-2}, -{48,36,-1}, -{48,36,0}, -{48,36,1}, -{48,36,2}, -{48,36,3}, -{48,36,4}, -{48,36,5}, -{48,36,6}, -{48,36,7}, -{48,36,8}, -{48,36,9}, -{48,36,10}, -{48,36,11}, -{48,36,12}, -{48,36,13}, -{48,36,14}, -{48,36,15}, -{48,36,16}, -{48,36,17}, -{48,36,18}, -{48,36,19}, -{48,36,20}, -{48,36,21}, -{48,36,22}, -{48,36,23}, -{48,36,24}, -{48,36,25}, -{48,36,26}, -{48,36,27}, -{48,36,28}, -{48,36,29}, -{48,36,30}, -{48,36,31}, -{48,36,32}, -{48,36,33}, -{48,36,34}, -{48,36,35}, -{48,36,36}, -{48,36,37}, -{48,36,38}, -{48,36,39}, -{48,36,40}, -{48,36,41}, -{48,36,42}, -{48,36,43}, -{48,36,44}, -{48,36,45}, -{48,36,46}, -{48,36,47}, -{48,36,48}, -{48,36,49}, -{48,36,50}, -{48,36,51}, -{48,36,52}, -{48,36,53}, -{48,36,54}, -{48,36,55}, -{48,36,56}, -{48,36,57}, -{48,37,-81}, -{48,37,-80}, -{48,37,-79}, -{48,37,-78}, -{48,37,-77}, -{48,37,-76}, -{48,37,-75}, -{48,37,-74}, -{48,37,-73}, -{48,37,-72}, -{48,37,-71}, -{48,37,-70}, -{48,37,-69}, -{48,37,-68}, -{48,37,-67}, -{48,37,-66}, -{48,37,-65}, -{48,37,-64}, -{48,37,-63}, -{48,37,-62}, -{48,37,-61}, -{48,37,-60}, -{48,37,-59}, -{48,37,-58}, -{48,37,-57}, -{48,37,-56}, -{48,37,-55}, -{48,37,-54}, -{48,37,-53}, -{48,37,-52}, -{48,37,-51}, -{48,37,-50}, -{48,37,-49}, -{48,37,-48}, -{48,37,-47}, -{48,37,-46}, -{48,37,-45}, -{48,37,-44}, -{48,37,-43}, -{48,37,-42}, -{48,37,-41}, -{48,37,-40}, -{48,37,-39}, -{48,37,-38}, -{48,37,-37}, -{48,37,-36}, -{48,37,-35}, -{48,37,-34}, -{48,37,-33}, -{48,37,-32}, -{48,37,-31}, -{48,37,-30}, -{48,37,-29}, -{48,37,-28}, -{48,37,-27}, -{48,37,-26}, -{48,37,-25}, -{48,37,-24}, -{48,37,-23}, -{48,37,-22}, -{48,37,-21}, -{48,37,-20}, -{48,37,-19}, -{48,37,-18}, -{48,37,-17}, -{48,37,-16}, -{48,37,-15}, -{48,37,-14}, -{48,37,-13}, -{48,37,-12}, -{48,37,-11}, -{48,37,-10}, -{48,37,-9}, -{48,37,-8}, -{48,37,-7}, -{48,37,-6}, -{48,37,-5}, -{48,37,-4}, -{48,37,-3}, -{48,37,-2}, -{48,37,-1}, -{48,37,0}, -{48,37,1}, -{48,37,2}, -{48,37,3}, -{48,37,4}, -{48,37,5}, -{48,37,6}, -{48,37,7}, -{48,37,8}, -{48,37,9}, -{48,37,10}, -{48,37,11}, -{48,37,12}, -{48,37,13}, -{48,37,14}, -{48,37,15}, -{48,37,16}, -{48,37,17}, -{48,37,18}, -{48,37,19}, -{48,37,20}, -{48,37,21}, -{48,37,22}, -{48,37,23}, -{48,37,24}, -{48,37,25}, -{48,37,26}, -{48,37,27}, -{48,37,28}, -{48,37,29}, -{48,37,30}, -{48,37,31}, -{48,37,32}, -{48,37,33}, -{48,37,34}, -{48,37,35}, -{48,37,36}, -{48,37,37}, -{48,37,38}, -{48,37,39}, -{48,37,40}, -{48,37,41}, -{48,37,42}, -{48,37,43}, -{48,37,44}, -{48,37,45}, -{48,37,46}, -{48,37,47}, -{48,37,48}, -{48,37,49}, -{48,37,50}, -{48,37,51}, -{48,37,52}, -{48,37,53}, -{48,37,54}, -{48,37,55}, -{48,37,56}, -{48,37,57}, -{48,38,-81}, -{48,38,-80}, -{48,38,-79}, -{48,38,-78}, -{48,38,-77}, -{48,38,-76}, -{48,38,-75}, -{48,38,-74}, -{48,38,-73}, -{48,38,-72}, -{48,38,-71}, -{48,38,-70}, -{48,38,-69}, -{48,38,-68}, -{48,38,-67}, -{48,38,-66}, -{48,38,-65}, -{48,38,-64}, -{48,38,-63}, -{48,38,-62}, -{48,38,-61}, -{48,38,-60}, -{48,38,-59}, -{48,38,-58}, -{48,38,-57}, -{48,38,-56}, -{48,38,-55}, -{48,38,-54}, -{48,38,-53}, -{48,38,-52}, -{48,38,-51}, -{48,38,-50}, -{48,38,-49}, -{48,38,-48}, -{48,38,-47}, -{48,38,-46}, -{48,38,-45}, -{48,38,-44}, -{48,38,-43}, -{48,38,-42}, -{48,38,-41}, -{48,38,-40}, -{48,38,-39}, -{48,38,-38}, -{48,38,-37}, -{48,38,-36}, -{48,38,-35}, -{48,38,-34}, -{48,38,-33}, -{48,38,-32}, -{48,38,-31}, -{48,38,-30}, -{48,38,-29}, -{48,38,-28}, -{48,38,-27}, -{48,38,-26}, -{48,38,-25}, -{48,38,-24}, -{48,38,-23}, -{48,38,-22}, -{48,38,-21}, -{48,38,-20}, -{48,38,-19}, -{48,38,-18}, -{48,38,-17}, -{48,38,-16}, -{48,38,-15}, -{48,38,-14}, -{48,38,-13}, -{48,38,-12}, -{48,38,-11}, -{48,38,-10}, -{48,38,-9}, -{48,38,-8}, -{48,38,-7}, -{48,38,-6}, -{48,38,-5}, -{48,38,-4}, -{48,38,-3}, -{48,38,-2}, -{48,38,-1}, -{48,38,0}, -{48,38,1}, -{48,38,2}, -{48,38,3}, -{48,38,4}, -{48,38,5}, -{48,38,6}, -{48,38,7}, -{48,38,8}, -{48,38,9}, -{48,38,10}, -{48,38,11}, -{48,38,12}, -{48,38,13}, -{48,38,14}, -{48,38,15}, -{48,38,16}, -{48,38,17}, -{48,38,18}, -{48,38,19}, -{48,38,20}, -{48,38,21}, -{48,38,22}, -{48,38,23}, -{48,38,24}, -{48,38,25}, -{48,38,26}, -{48,38,27}, -{48,38,28}, -{48,38,29}, -{48,38,30}, -{48,38,31}, -{48,38,32}, -{48,38,33}, -{48,38,34}, -{48,38,35}, -{48,38,36}, -{48,38,37}, -{48,38,38}, -{48,38,39}, -{48,38,40}, -{48,38,41}, -{48,38,42}, -{48,38,43}, -{48,38,44}, -{48,38,45}, -{48,38,46}, -{48,38,47}, -{48,38,48}, -{48,38,49}, -{48,38,50}, -{48,38,51}, -{48,38,52}, -{48,38,53}, -{48,38,54}, -{48,38,55}, -{48,38,56}, -{48,38,57}, -{48,39,-81}, -{48,39,-80}, -{48,39,-79}, -{48,39,-78}, -{48,39,-77}, -{48,39,-76}, -{48,39,-75}, -{48,39,-74}, -{48,39,-73}, -{48,39,-72}, -{48,39,-71}, -{48,39,-70}, -{48,39,-69}, -{48,39,-68}, -{48,39,-67}, -{48,39,-66}, -{48,39,-65}, -{48,39,-64}, -{48,39,-63}, -{48,39,-62}, -{48,39,-61}, -{48,39,-60}, -{48,39,-59}, -{48,39,-58}, -{48,39,-57}, -{48,39,-56}, -{48,39,-55}, -{48,39,-54}, -{48,39,-53}, -{48,39,-52}, -{48,39,-51}, -{48,39,-50}, -{48,39,-49}, -{48,39,-48}, -{48,39,-47}, -{48,39,-46}, -{48,39,-45}, -{48,39,-44}, -{48,39,-43}, -{48,39,-42}, -{48,39,-41}, -{48,39,-40}, -{48,39,-39}, -{48,39,-38}, -{48,39,-37}, -{48,39,-36}, -{48,39,-35}, -{48,39,-34}, -{48,39,-33}, -{48,39,-32}, -{48,39,-31}, -{48,39,-30}, -{48,39,-29}, -{48,39,-28}, -{48,39,-27}, -{48,39,-26}, -{48,39,-25}, -{48,39,-24}, -{48,39,-23}, -{48,39,-22}, -{48,39,-21}, -{48,39,-20}, -{48,39,-19}, -{48,39,-18}, -{48,39,-17}, -{48,39,-16}, -{48,39,-15}, -{48,39,-14}, -{48,39,-13}, -{48,39,-12}, -{48,39,-11}, -{48,39,-10}, -{48,39,-9}, -{48,39,-8}, -{48,39,-7}, -{48,39,-6}, -{48,39,-5}, -{48,39,-4}, -{48,39,-3}, -{48,39,-2}, -{48,39,-1}, -{48,39,0}, -{48,39,1}, -{48,39,2}, -{48,39,3}, -{48,39,4}, -{48,39,5}, -{48,39,6}, -{48,39,7}, -{48,39,8}, -{48,39,9}, -{48,39,10}, -{48,39,11}, -{48,39,12}, -{48,39,13}, -{48,39,14}, -{48,39,15}, -{48,39,16}, -{48,39,17}, -{48,39,18}, -{48,39,19}, -{48,39,20}, -{48,39,21}, -{48,39,22}, -{48,39,23}, -{48,39,24}, -{48,39,25}, -{48,39,26}, -{48,39,27}, -{48,39,28}, -{48,39,29}, -{48,39,30}, -{48,39,31}, -{48,39,32}, -{48,39,33}, -{48,39,34}, -{48,39,35}, -{48,39,36}, -{48,39,37}, -{48,39,38}, -{48,39,39}, -{48,39,40}, -{48,39,41}, -{48,39,42}, -{48,39,43}, -{48,39,44}, -{48,39,45}, -{48,39,46}, -{48,39,47}, -{48,39,48}, -{48,39,49}, -{48,39,50}, -{48,39,51}, -{48,39,52}, -{48,39,53}, -{48,39,54}, -{48,39,55}, -{48,39,56}, -{48,39,57}, -{48,40,-81}, -{48,40,-80}, -{48,40,-79}, -{48,40,-78}, -{48,40,-77}, -{48,40,-76}, -{48,40,-75}, -{48,40,-74}, -{48,40,-73}, -{48,40,-72}, -{48,40,-71}, -{48,40,-70}, -{48,40,-69}, -{48,40,-68}, -{48,40,-67}, -{48,40,-66}, -{48,40,-65}, -{48,40,-64}, -{48,40,-63}, -{48,40,-62}, -{48,40,-61}, -{48,40,-60}, -{48,40,-59}, -{48,40,-58}, -{48,40,-57}, -{48,40,-56}, -{48,40,-55}, -{48,40,-54}, -{48,40,-53}, -{48,40,-52}, -{48,40,-51}, -{48,40,-50}, -{48,40,-49}, -{48,40,-48}, -{48,40,-47}, -{48,40,-46}, -{48,40,-45}, -{48,40,-44}, -{48,40,-43}, -{48,40,-42}, -{48,40,-41}, -{48,40,-40}, -{48,40,-39}, -{48,40,-38}, -{48,40,-37}, -{48,40,-36}, -{48,40,-35}, -{48,40,-34}, -{48,40,-33}, -{48,40,-32}, -{48,40,-31}, -{48,40,-30}, -{48,40,-29}, -{48,40,-28}, -{48,40,-27}, -{48,40,-26}, -{48,40,-25}, -{48,40,-24}, -{48,40,-23}, -{48,40,-22}, -{48,40,-21}, -{48,40,-20}, -{48,40,-19}, -{48,40,-18}, -{48,40,-17}, -{48,40,-16}, -{48,40,-15}, -{48,40,-14}, -{48,40,-13}, -{48,40,-12}, -{48,40,-11}, -{48,40,-10}, -{48,40,-9}, -{48,40,-8}, -{48,40,-7}, -{48,40,-6}, -{48,40,-5}, -{48,40,-4}, -{48,40,-3}, -{48,40,-2}, -{48,40,-1}, -{48,40,0}, -{48,40,1}, -{48,40,2}, -{48,40,3}, -{48,40,4}, -{48,40,5}, -{48,40,6}, -{48,40,7}, -{48,40,8}, -{48,40,9}, -{48,40,10}, -{48,40,11}, -{48,40,12}, -{48,40,13}, -{48,40,14}, -{48,40,15}, -{48,40,16}, -{48,40,17}, -{48,40,18}, -{48,40,19}, -{48,40,20}, -{48,40,21}, -{48,40,22}, -{48,40,23}, -{48,40,24}, -{48,40,25}, -{48,40,26}, -{48,40,27}, -{48,40,28}, -{48,40,29}, -{48,40,30}, -{48,40,31}, -{48,40,32}, -{48,40,33}, -{48,40,34}, -{48,40,35}, -{48,40,36}, -{48,40,37}, -{48,40,38}, -{48,40,39}, -{48,40,40}, -{48,40,41}, -{48,40,42}, -{48,40,43}, -{48,40,44}, -{48,40,45}, -{48,40,46}, -{48,40,47}, -{48,40,48}, -{48,40,49}, -{48,40,50}, -{48,40,51}, -{48,40,52}, -{48,40,53}, -{48,40,54}, -{48,40,55}, -{48,40,56}, -{48,40,57}, -{48,41,-81}, -{48,41,-80}, -{48,41,-79}, -{48,41,-78}, -{48,41,-77}, -{48,41,-76}, -{48,41,-75}, -{48,41,-74}, -{48,41,-73}, -{48,41,-72}, -{48,41,-71}, -{48,41,-70}, -{48,41,-69}, -{48,41,-68}, -{48,41,-67}, -{48,41,-66}, -{48,41,-65}, -{48,41,-64}, -{48,41,-63}, -{48,41,-62}, -{48,41,-61}, -{48,41,-60}, -{48,41,-59}, -{48,41,-58}, -{48,41,-57}, -{48,41,-56}, -{48,41,-55}, -{48,41,-54}, -{48,41,-53}, -{48,41,-52}, -{48,41,-51}, -{48,41,-50}, -{48,41,-49}, -{48,41,-48}, -{48,41,-47}, -{48,41,-46}, -{48,41,-45}, -{48,41,-44}, -{48,41,-43}, -{48,41,-42}, -{48,41,-41}, -{48,41,-40}, -{48,41,-39}, -{48,41,-38}, -{48,41,-37}, -{48,41,-36}, -{48,41,-35}, -{48,41,-34}, -{48,41,-33}, -{48,41,-32}, -{48,41,-31}, -{48,41,-30}, -{48,41,-29}, -{48,41,-28}, -{48,41,-27}, -{48,41,-26}, -{48,41,-25}, -{48,41,-24}, -{48,41,-23}, -{48,41,-22}, -{48,41,-21}, -{48,41,-20}, -{48,41,-19}, -{48,41,-18}, -{48,41,-17}, -{48,41,-16}, -{48,41,-15}, -{48,41,-14}, -{48,41,-13}, -{48,41,-12}, -{48,41,-11}, -{48,41,-10}, -{48,41,-9}, -{48,41,-8}, -{48,41,-7}, -{48,41,-6}, -{48,41,-5}, -{48,41,-4}, -{48,41,-3}, -{48,41,-2}, -{48,41,-1}, -{48,41,0}, -{48,41,1}, -{48,41,2}, -{48,41,3}, -{48,41,4}, -{48,41,5}, -{48,41,6}, -{48,41,7}, -{48,41,8}, -{48,41,9}, -{48,41,10}, -{48,41,11}, -{48,41,12}, -{48,41,13}, -{48,41,14}, -{48,41,15}, -{48,41,16}, -{48,41,17}, -{48,41,18}, -{48,41,19}, -{48,41,20}, -{48,41,21}, -{48,41,22}, -{48,41,23}, -{48,41,24}, -{48,41,25}, -{48,41,26}, -{48,41,27}, -{48,41,28}, -{48,41,29}, -{48,41,30}, -{48,41,31}, -{48,41,32}, -{48,41,33}, -{48,41,34}, -{48,41,35}, -{48,41,36}, -{48,41,37}, -{48,41,38}, -{48,41,39}, -{48,41,40}, -{48,41,41}, -{48,41,42}, -{48,41,43}, -{48,41,44}, -{48,41,45}, -{48,41,46}, -{48,41,47}, -{48,41,48}, -{48,41,49}, -{48,41,50}, -{48,41,51}, -{48,41,52}, -{48,41,53}, -{48,41,54}, -{48,41,55}, -{48,41,56}, -{48,41,57}, -{48,41,58}, -{48,42,-81}, -{48,42,-80}, -{48,42,-79}, -{48,42,-78}, -{48,42,-77}, -{48,42,-76}, -{48,42,-75}, -{48,42,-74}, -{48,42,-73}, -{48,42,-72}, -{48,42,-71}, -{48,42,-70}, -{48,42,-69}, -{48,42,-68}, -{48,42,-67}, -{48,42,-66}, -{48,42,-65}, -{48,42,-64}, -{48,42,-63}, -{48,42,-62}, -{48,42,-61}, -{48,42,-60}, -{48,42,-59}, -{48,42,-58}, -{48,42,-57}, -{48,42,-56}, -{48,42,-55}, -{48,42,-54}, -{48,42,-53}, -{48,42,-52}, -{48,42,-51}, -{48,42,-50}, -{48,42,-49}, -{48,42,-48}, -{48,42,-47}, -{48,42,-46}, -{48,42,-45}, -{48,42,-44}, -{48,42,-43}, -{48,42,-42}, -{48,42,-41}, -{48,42,-40}, -{48,42,-39}, -{48,42,-38}, -{48,42,-37}, -{48,42,-36}, -{48,42,-35}, -{48,42,-34}, -{48,42,-33}, -{48,42,-32}, -{48,42,-31}, -{48,42,-30}, -{48,42,-29}, -{48,42,-28}, -{48,42,-27}, -{48,42,-26}, -{48,42,-25}, -{48,42,-24}, -{48,42,-23}, -{48,42,-22}, -{48,42,-21}, -{48,42,-20}, -{48,42,-19}, -{48,42,-18}, -{48,42,-17}, -{48,42,-16}, -{48,42,-15}, -{48,42,-14}, -{48,42,-13}, -{48,42,-12}, -{48,42,-11}, -{48,42,-10}, -{48,42,-9}, -{48,42,-8}, -{48,42,-7}, -{48,42,-6}, -{48,42,-5}, -{48,42,-4}, -{48,42,-3}, -{48,42,-2}, -{48,42,-1}, -{48,42,0}, -{48,42,1}, -{48,42,2}, -{48,42,3}, -{48,42,4}, -{48,42,5}, -{48,42,6}, -{48,42,7}, -{48,42,8}, -{48,42,9}, -{48,42,10}, -{48,42,11}, -{48,42,12}, -{48,42,13}, -{48,42,14}, -{48,42,15}, -{48,42,16}, -{48,42,17}, -{48,42,18}, -{48,42,19}, -{48,42,20}, -{48,42,21}, -{48,42,22}, -{48,42,23}, -{48,42,24}, -{48,42,25}, -{48,42,26}, -{48,42,27}, -{48,42,28}, -{48,42,29}, -{48,42,30}, -{48,42,31}, -{48,42,32}, -{48,42,33}, -{48,42,34}, -{48,42,35}, -{48,42,36}, -{48,42,37}, -{48,42,38}, -{48,42,39}, -{48,42,40}, -{48,42,41}, -{48,42,42}, -{48,42,43}, -{48,42,44}, -{48,42,45}, -{48,42,46}, -{48,42,47}, -{48,42,48}, -{48,42,49}, -{48,42,50}, -{48,42,51}, -{48,42,52}, -{48,42,53}, -{48,42,54}, -{48,42,55}, -{48,42,56}, -{48,42,57}, -{48,42,58}, -{48,43,-81}, -{48,43,-80}, -{48,43,-79}, -{48,43,-78}, -{48,43,-77}, -{48,43,-76}, -{48,43,-75}, -{48,43,-74}, -{48,43,-73}, -{48,43,-72}, -{48,43,-71}, -{48,43,-70}, -{48,43,-69}, -{48,43,-68}, -{48,43,-67}, -{48,43,-66}, -{48,43,-65}, -{48,43,-64}, -{48,43,-63}, -{48,43,-62}, -{48,43,-61}, -{48,43,-60}, -{48,43,-59}, -{48,43,-58}, -{48,43,-57}, -{48,43,-56}, -{48,43,-55}, -{48,43,-54}, -{48,43,-53}, -{48,43,-52}, -{48,43,-51}, -{48,43,-50}, -{48,43,-49}, -{48,43,-48}, -{48,43,-47}, -{48,43,-46}, -{48,43,-45}, -{48,43,-44}, -{48,43,-43}, -{48,43,-42}, -{48,43,-41}, -{48,43,-40}, -{48,43,-39}, -{48,43,-38}, -{48,43,-37}, -{48,43,-36}, -{48,43,-35}, -{48,43,-34}, -{48,43,-33}, -{48,43,-32}, -{48,43,-31}, -{48,43,-30}, -{48,43,-29}, -{48,43,-28}, -{48,43,-27}, -{48,43,-26}, -{48,43,-25}, -{48,43,-24}, -{48,43,-23}, -{48,43,-22}, -{48,43,-21}, -{48,43,-20}, -{48,43,-19}, -{48,43,-18}, -{48,43,-17}, -{48,43,-16}, -{48,43,-15}, -{48,43,-14}, -{48,43,-13}, -{48,43,-12}, -{48,43,-11}, -{48,43,-10}, -{48,43,-9}, -{48,43,-8}, -{48,43,-7}, -{48,43,-6}, -{48,43,-5}, -{48,43,-4}, -{48,43,-3}, -{48,43,-2}, -{48,43,-1}, -{48,43,0}, -{48,43,1}, -{48,43,2}, -{48,43,3}, -{48,43,4}, -{48,43,5}, -{48,43,6}, -{48,43,7}, -{48,43,8}, -{48,43,9}, -{48,43,10}, -{48,43,11}, -{48,43,12}, -{48,43,13}, -{48,43,14}, -{48,43,15}, -{48,43,16}, -{48,43,17}, -{48,43,18}, -{48,43,19}, -{48,43,20}, -{48,43,21}, -{48,43,22}, -{48,43,23}, -{48,43,24}, -{48,43,25}, -{48,43,26}, -{48,43,27}, -{48,43,28}, -{48,43,29}, -{48,43,30}, -{48,43,31}, -{48,43,32}, -{48,43,33}, -{48,43,34}, -{48,43,35}, -{48,43,36}, -{48,43,37}, -{48,43,38}, -{48,43,39}, -{48,43,40}, -{48,43,41}, -{48,43,42}, -{48,43,43}, -{48,43,44}, -{48,43,45}, -{48,43,46}, -{48,43,47}, -{48,43,48}, -{48,43,49}, -{48,43,50}, -{48,43,51}, -{48,43,52}, -{48,43,53}, -{48,43,54}, -{48,43,55}, -{48,43,56}, -{48,43,57}, -{48,43,58}, -{48,44,-81}, -{48,44,-80}, -{48,44,-79}, -{48,44,-78}, -{48,44,-77}, -{48,44,-76}, -{48,44,-75}, -{48,44,-74}, -{48,44,-73}, -{48,44,-72}, -{48,44,-71}, -{48,44,-70}, -{48,44,-69}, -{48,44,-68}, -{48,44,-67}, -{48,44,-66}, -{48,44,-65}, -{48,44,-64}, -{48,44,-63}, -{48,44,-62}, -{48,44,-61}, -{48,44,-60}, -{48,44,-59}, -{48,44,-58}, -{48,44,-57}, -{48,44,-56}, -{48,44,-55}, -{48,44,-54}, -{48,44,-53}, -{48,44,-52}, -{48,44,-51}, -{48,44,-50}, -{48,44,-49}, -{48,44,-48}, -{48,44,-47}, -{48,44,-46}, -{48,44,-45}, -{48,44,-44}, -{48,44,-43}, -{48,44,-42}, -{48,44,-41}, -{48,44,-40}, -{48,44,-39}, -{48,44,-38}, -{48,44,-37}, -{48,44,-36}, -{48,44,-35}, -{48,44,-34}, -{48,44,-33}, -{48,44,-32}, -{48,44,-31}, -{48,44,-30}, -{48,44,-29}, -{48,44,-28}, -{48,44,-27}, -{48,44,-26}, -{48,44,-25}, -{48,44,-24}, -{48,44,-23}, -{48,44,-22}, -{48,44,-21}, -{48,44,-20}, -{48,44,-19}, -{48,44,-18}, -{48,44,-17}, -{48,44,-16}, -{48,44,-15}, -{48,44,-14}, -{48,44,-13}, -{48,44,-12}, -{48,44,-11}, -{48,44,-10}, -{48,44,-9}, -{48,44,-8}, -{48,44,-7}, -{48,44,-6}, -{48,44,-5}, -{48,44,-4}, -{48,44,-3}, -{48,44,-2}, -{48,44,-1}, -{48,44,0}, -{48,44,1}, -{48,44,2}, -{48,44,3}, -{48,44,4}, -{48,44,5}, -{48,44,6}, -{48,44,7}, -{48,44,8}, -{48,44,9}, -{48,44,10}, -{48,44,11}, -{48,44,12}, -{48,44,13}, -{48,44,14}, -{48,44,15}, -{48,44,16}, -{48,44,17}, -{48,44,18}, -{48,44,19}, -{48,44,20}, -{48,44,21}, -{48,44,22}, -{48,44,23}, -{48,44,24}, -{48,44,25}, -{48,44,26}, -{48,44,27}, -{48,44,28}, -{48,44,29}, -{48,44,30}, -{48,44,31}, -{48,44,32}, -{48,44,33}, -{48,44,34}, -{48,44,35}, -{48,44,36}, -{48,44,37}, -{48,44,38}, -{48,44,39}, -{48,44,40}, -{48,44,41}, -{48,44,42}, -{48,44,43}, -{48,44,44}, -{48,44,45}, -{48,44,46}, -{48,44,47}, -{48,44,48}, -{48,44,49}, -{48,44,50}, -{48,44,51}, -{48,44,52}, -{48,44,53}, -{48,44,54}, -{48,44,55}, -{48,44,56}, -{48,44,57}, -{48,44,58}, -{48,45,-81}, -{48,45,-80}, -{48,45,-79}, -{48,45,-78}, -{48,45,-77}, -{48,45,-76}, -{48,45,-75}, -{48,45,-74}, -{48,45,-73}, -{48,45,-72}, -{48,45,-71}, -{48,45,-70}, -{48,45,-69}, -{48,45,-68}, -{48,45,-67}, -{48,45,-66}, -{48,45,-65}, -{48,45,-64}, -{48,45,-63}, -{48,45,-62}, -{48,45,-61}, -{48,45,-60}, -{48,45,-59}, -{48,45,-58}, -{48,45,-57}, -{48,45,-56}, -{48,45,-55}, -{48,45,-54}, -{48,45,-53}, -{48,45,-52}, -{48,45,-51}, -{48,45,-50}, -{48,45,-49}, -{48,45,-48}, -{48,45,-47}, -{48,45,-46}, -{48,45,-45}, -{48,45,-44}, -{48,45,-43}, -{48,45,-42}, -{48,45,-41}, -{48,45,-40}, -{48,45,-39}, -{48,45,-38}, -{48,45,-37}, -{48,45,-36}, -{48,45,-35}, -{48,45,-34}, -{48,45,-33}, -{48,45,-32}, -{48,45,-31}, -{48,45,-30}, -{48,45,-29}, -{48,45,-28}, -{48,45,-27}, -{48,45,-26}, -{48,45,-25}, -{48,45,-24}, -{48,45,-23}, -{48,45,-22}, -{48,45,-21}, -{48,45,-20}, -{48,45,-19}, -{48,45,-18}, -{48,45,-17}, -{48,45,-16}, -{48,45,-15}, -{48,45,-14}, -{48,45,-13}, -{48,45,-12}, -{48,45,-11}, -{48,45,-10}, -{48,45,-9}, -{48,45,-8}, -{48,45,-7}, -{48,45,-6}, -{48,45,-5}, -{48,45,-4}, -{48,45,-3}, -{48,45,-2}, -{48,45,-1}, -{48,45,0}, -{48,45,1}, -{48,45,2}, -{48,45,3}, -{48,45,4}, -{48,45,5}, -{48,45,6}, -{48,45,7}, -{48,45,8}, -{48,45,9}, -{48,45,10}, -{48,45,11}, -{48,45,12}, -{48,45,13}, -{48,45,14}, -{48,45,15}, -{48,45,16}, -{48,45,17}, -{48,45,18}, -{48,45,19}, -{48,45,20}, -{48,45,21}, -{48,45,22}, -{48,45,23}, -{48,45,24}, -{48,45,25}, -{48,45,26}, -{48,45,27}, -{48,45,28}, -{48,45,29}, -{48,45,30}, -{48,45,31}, -{48,45,32}, -{48,45,33}, -{48,45,34}, -{48,45,35}, -{48,45,36}, -{48,45,37}, -{48,45,38}, -{48,45,39}, -{48,45,40}, -{48,45,41}, -{48,45,42}, -{48,45,43}, -{48,45,44}, -{48,45,45}, -{48,45,46}, -{48,45,47}, -{48,45,48}, -{48,45,49}, -{48,45,50}, -{48,45,51}, -{48,45,52}, -{48,45,53}, -{48,45,54}, -{48,45,55}, -{48,45,56}, -{48,45,57}, -{48,45,58}, -{48,46,-81}, -{48,46,-80}, -{48,46,-79}, -{48,46,-78}, -{48,46,-77}, -{48,46,-76}, -{48,46,-75}, -{48,46,-74}, -{48,46,-73}, -{48,46,-72}, -{48,46,-71}, -{48,46,-70}, -{48,46,-69}, -{48,46,-68}, -{48,46,-67}, -{48,46,-66}, -{48,46,-65}, -{48,46,-64}, -{48,46,-63}, -{48,46,-62}, -{48,46,-61}, -{48,46,-60}, -{48,46,-59}, -{48,46,-58}, -{48,46,-57}, -{48,46,-56}, -{48,46,-55}, -{48,46,-54}, -{48,46,-53}, -{48,46,-52}, -{48,46,-51}, -{48,46,-50}, -{48,46,-49}, -{48,46,-48}, -{48,46,-47}, -{48,46,-46}, -{48,46,-45}, -{48,46,-44}, -{48,46,-43}, -{48,46,-42}, -{48,46,-41}, -{48,46,-40}, -{48,46,-39}, -{48,46,-38}, -{48,46,-37}, -{48,46,-36}, -{48,46,-35}, -{48,46,-34}, -{48,46,-33}, -{48,46,-32}, -{48,46,-31}, -{48,46,-30}, -{48,46,-29}, -{48,46,-28}, -{48,46,-27}, -{48,46,-26}, -{48,46,-25}, -{48,46,-24}, -{48,46,-23}, -{48,46,-22}, -{48,46,-21}, -{48,46,-20}, -{48,46,-19}, -{48,46,-18}, -{48,46,-17}, -{48,46,-16}, -{48,46,-15}, -{48,46,-14}, -{48,46,-13}, -{48,46,-12}, -{48,46,-11}, -{48,46,-10}, -{48,46,-9}, -{48,46,-8}, -{48,46,-7}, -{48,46,-6}, -{48,46,-5}, -{48,46,-4}, -{48,46,-3}, -{48,46,-2}, -{48,46,-1}, -{48,46,0}, -{48,46,1}, -{48,46,2}, -{48,46,3}, -{48,46,4}, -{48,46,5}, -{48,46,6}, -{48,46,7}, -{48,46,8}, -{48,46,9}, -{48,46,10}, -{48,46,11}, -{48,46,12}, -{48,46,13}, -{48,46,14}, -{48,46,15}, -{48,46,16}, -{48,46,17}, -{48,46,18}, -{48,46,19}, -{48,46,20}, -{48,46,21}, -{48,46,22}, -{48,46,23}, -{48,46,24}, -{48,46,25}, -{48,46,26}, -{48,46,27}, -{48,46,28}, -{48,46,29}, -{48,46,30}, -{48,46,31}, -{48,46,32}, -{48,46,33}, -{48,46,34}, -{48,46,35}, -{48,46,36}, -{48,46,37}, -{48,46,38}, -{48,46,39}, -{48,46,40}, -{48,46,41}, -{48,46,42}, -{48,46,43}, -{48,46,44}, -{48,46,45}, -{48,46,46}, -{48,46,47}, -{48,46,48}, -{48,46,49}, -{48,46,50}, -{48,46,51}, -{48,46,52}, -{48,46,53}, -{48,46,54}, -{48,46,55}, -{48,46,56}, -{48,46,57}, -{48,46,58}, -{48,47,-81}, -{48,47,-80}, -{48,47,-79}, -{48,47,-78}, -{48,47,-77}, -{48,47,-76}, -{48,47,-75}, -{48,47,-74}, -{48,47,-73}, -{48,47,-72}, -{48,47,-71}, -{48,47,-70}, -{48,47,-69}, -{48,47,-68}, -{48,47,-67}, -{48,47,-66}, -{48,47,-65}, -{48,47,-64}, -{48,47,-63}, -{48,47,-62}, -{48,47,-61}, -{48,47,-60}, -{48,47,-59}, -{48,47,-58}, -{48,47,-57}, -{48,47,-56}, -{48,47,-55}, -{48,47,-54}, -{48,47,-53}, -{48,47,-52}, -{48,47,-51}, -{48,47,-50}, -{48,47,-49}, -{48,47,-48}, -{48,47,-47}, -{48,47,-46}, -{48,47,-45}, -{48,47,-44}, -{48,47,-43}, -{48,47,-42}, -{48,47,-41}, -{48,47,-40}, -{48,47,-39}, -{48,47,-38}, -{48,47,-37}, -{48,47,-36}, -{48,47,-35}, -{48,47,-34}, -{48,47,-33}, -{48,47,-32}, -{48,47,-31}, -{48,47,-30}, -{48,47,-29}, -{48,47,-28}, -{48,47,-27}, -{48,47,-26}, -{48,47,-25}, -{48,47,-24}, -{48,47,-23}, -{48,47,-22}, -{48,47,-21}, -{48,47,-20}, -{48,47,-19}, -{48,47,-18}, -{48,47,-17}, -{48,47,-16}, -{48,47,-15}, -{48,47,-14}, -{48,47,-13}, -{48,47,-12}, -{48,47,-11}, -{48,47,-10}, -{48,47,-9}, -{48,47,-8}, -{48,47,-7}, -{48,47,-6}, -{48,47,-5}, -{48,47,-4}, -{48,47,-3}, -{48,47,-2}, -{48,47,-1}, -{48,47,0}, -{48,47,1}, -{48,47,2}, -{48,47,3}, -{48,47,4}, -{48,47,5}, -{48,47,6}, -{48,47,7}, -{48,47,8}, -{48,47,9}, -{48,47,10}, -{48,47,11}, -{48,47,12}, -{48,47,13}, -{48,47,14}, -{48,47,15}, -{48,47,16}, -{48,47,17}, -{48,47,18}, -{48,47,19}, -{48,47,20}, -{48,47,21}, -{48,47,22}, -{48,47,23}, -{48,47,24}, -{48,47,25}, -{48,47,26}, -{48,47,27}, -{48,47,28}, -{48,47,29}, -{48,47,30}, -{48,47,31}, -{48,47,32}, -{48,47,33}, -{48,47,34}, -{48,47,35}, -{48,47,36}, -{48,47,37}, -{48,47,38}, -{48,47,39}, -{48,47,40}, -{48,47,41}, -{48,47,42}, -{48,47,43}, -{48,47,44}, -{48,47,45}, -{48,47,46}, -{48,47,47}, -{48,47,48}, -{48,47,49}, -{48,47,50}, -{48,47,51}, -{48,47,52}, -{48,47,53}, -{48,47,54}, -{48,47,55}, -{48,47,56}, -{48,47,57}, -{48,47,58}, -{48,48,-81}, -{48,48,-80}, -{48,48,-79}, -{48,48,-78}, -{48,48,-77}, -{48,48,-76}, -{48,48,-75}, -{48,48,-74}, -{48,48,-73}, -{48,48,-72}, -{48,48,-71}, -{48,48,-70}, -{48,48,-69}, -{48,48,-68}, -{48,48,-67}, -{48,48,-66}, -{48,48,-65}, -{48,48,-64}, -{48,48,-63}, -{48,48,-62}, -{48,48,-61}, -{48,48,-60}, -{48,48,-59}, -{48,48,-58}, -{48,48,-57}, -{48,48,-56}, -{48,48,-55}, -{48,48,-54}, -{48,48,-53}, -{48,48,-52}, -{48,48,-51}, -{48,48,-50}, -{48,48,-49}, -{48,48,-48}, -{48,48,-47}, -{48,48,-46}, -{48,48,-45}, -{48,48,-44}, -{48,48,-43}, -{48,48,-42}, -{48,48,-41}, -{48,48,-40}, -{48,48,-39}, -{48,48,-38}, -{48,48,-37}, -{48,48,-36}, -{48,48,-35}, -{48,48,-34}, -{48,48,-33}, -{48,48,-32}, -{48,48,-31}, -{48,48,-30}, -{48,48,-29}, -{48,48,-28}, -{48,48,-27}, -{48,48,-26}, -{48,48,-25}, -{48,48,-24}, -{48,48,-23}, -{48,48,-22}, -{48,48,-21}, -{48,48,-20}, -{48,48,-19}, -{48,48,-18}, -{48,48,-17}, -{48,48,-16}, -{48,48,-15}, -{48,48,-14}, -{48,48,-13}, -{48,48,-12}, -{48,48,-11}, -{48,48,-10}, -{48,48,-9}, -{48,48,-8}, -{48,48,-7}, -{48,48,-6}, -{48,48,-5}, -{48,48,-4}, -{48,48,-3}, -{48,48,-2}, -{48,48,-1}, -{48,48,0}, -{48,48,1}, -{48,48,2}, -{48,48,3}, -{48,48,4}, -{48,48,5}, -{48,48,6}, -{48,48,7}, -{48,48,8}, -{48,48,9}, -{48,48,10}, -{48,48,11}, -{48,48,12}, -{48,48,13}, -{48,48,14}, -{48,48,15}, -{48,48,16}, -{48,48,17}, -{48,48,18}, -{48,48,19}, -{48,48,20}, -{48,48,21}, -{48,48,22}, -{48,48,23}, -{48,48,24}, -{48,48,25}, -{48,48,26}, -{48,48,27}, -{48,48,28}, -{48,48,29}, -{48,48,30}, -{48,48,31}, -{48,48,32}, -{48,48,33}, -{48,48,34}, -{48,48,35}, -{48,48,36}, -{48,48,37}, -{48,48,38}, -{48,48,39}, -{48,48,40}, -{48,48,41}, -{48,48,42}, -{48,48,43}, -{48,48,44}, -{48,48,45}, -{48,48,46}, -{48,48,47}, -{48,48,48}, -{48,48,49}, -{48,48,50}, -{48,48,51}, -{48,48,52}, -{48,48,53}, -{48,48,54}, -{48,48,55}, -{48,48,56}, -{48,48,57}, -{48,48,58}, -{48,49,-81}, -{48,49,-80}, -{48,49,-79}, -{48,49,-78}, -{48,49,-77}, -{48,49,-76}, -{48,49,-75}, -{48,49,-74}, -{48,49,-73}, -{48,49,-72}, -{48,49,-71}, -{48,49,-70}, -{48,49,-69}, -{48,49,-68}, -{48,49,-67}, -{48,49,-66}, -{48,49,-65}, -{48,49,-64}, -{48,49,-63}, -{48,49,-62}, -{48,49,-61}, -{48,49,-60}, -{48,49,-59}, -{48,49,-58}, -{48,49,-57}, -{48,49,-56}, -{48,49,-55}, -{48,49,-54}, -{48,49,-53}, -{48,49,-52}, -{48,49,-51}, -{48,49,-50}, -{48,49,-49}, -{48,49,-48}, -{48,49,-47}, -{48,49,-46}, -{48,49,-45}, -{48,49,-44}, -{48,49,-43}, -{48,49,-42}, -{48,49,-41}, -{48,49,-40}, -{48,49,-39}, -{48,49,-38}, -{48,49,-37}, -{48,49,-36}, -{48,49,-35}, -{48,49,-34}, -{48,49,-33}, -{48,49,-32}, -{48,49,-31}, -{48,49,-30}, -{48,49,-29}, -{48,49,-28}, -{48,49,-27}, -{48,49,-26}, -{48,49,-25}, -{48,49,-24}, -{48,49,-23}, -{48,49,-22}, -{48,49,-21}, -{48,49,-20}, -{48,49,-19}, -{48,49,-18}, -{48,49,-17}, -{48,49,-16}, -{48,49,-15}, -{48,49,-14}, -{48,49,-13}, -{48,49,-12}, -{48,49,-11}, -{48,49,-10}, -{48,49,-9}, -{48,49,-8}, -{48,49,-7}, -{48,49,-6}, -{48,49,-5}, -{48,49,-4}, -{48,49,-3}, -{48,49,-2}, -{48,49,-1}, -{48,49,0}, -{48,49,1}, -{48,49,2}, -{48,49,3}, -{48,49,4}, -{48,49,5}, -{48,49,6}, -{48,49,7}, -{48,49,8}, -{48,49,9}, -{48,49,10}, -{48,49,11}, -{48,49,12}, -{48,49,13}, -{48,49,14}, -{48,49,15}, -{48,49,16}, -{48,49,17}, -{48,49,18}, -{48,49,19}, -{48,49,20}, -{48,49,21}, -{48,49,22}, -{48,49,23}, -{48,49,24}, -{48,49,25}, -{48,49,26}, -{48,49,27}, -{48,49,28}, -{48,49,29}, -{48,49,30}, -{48,49,31}, -{48,49,32}, -{48,49,33}, -{48,49,34}, -{48,49,35}, -{48,49,36}, -{48,49,37}, -{48,49,38}, -{48,49,39}, -{48,49,40}, -{48,49,41}, -{48,49,42}, -{48,49,43}, -{48,49,44}, -{48,49,45}, -{48,49,46}, -{48,49,47}, -{48,49,48}, -{48,49,49}, -{48,49,50}, -{48,49,51}, -{48,49,52}, -{48,49,53}, -{48,49,54}, -{48,49,55}, -{48,49,56}, -{48,49,57}, -{48,49,58}, -{48,50,-81}, -{48,50,-80}, -{48,50,-79}, -{48,50,-78}, -{48,50,-77}, -{48,50,-76}, -{48,50,-75}, -{48,50,-74}, -{48,50,-73}, -{48,50,-72}, -{48,50,-71}, -{48,50,-70}, -{48,50,-69}, -{48,50,-68}, -{48,50,-67}, -{48,50,-66}, -{48,50,-65}, -{48,50,-64}, -{48,50,-63}, -{48,50,-62}, -{48,50,-61}, -{48,50,-60}, -{48,50,-59}, -{48,50,-58}, -{48,50,-57}, -{48,50,-56}, -{48,50,-55}, -{48,50,-54}, -{48,50,-53}, -{48,50,-52}, -{48,50,-51}, -{48,50,-50}, -{48,50,-49}, -{48,50,-48}, -{48,50,-47}, -{48,50,-46}, -{48,50,-45}, -{48,50,-44}, -{48,50,-43}, -{48,50,-42}, -{48,50,-41}, -{48,50,-40}, -{48,50,-39}, -{48,50,-38}, -{48,50,-37}, -{48,50,-36}, -{48,50,-35}, -{48,50,-34}, -{48,50,-33}, -{48,50,-32}, -{48,50,-31}, -{48,50,-30}, -{48,50,-29}, -{48,50,-28}, -{48,50,-27}, -{48,50,-26}, -{48,50,-25}, -{48,50,-24}, -{48,50,-23}, -{48,50,-22}, -{48,50,-21}, -{48,50,-20}, -{48,50,-19}, -{48,50,-18}, -{48,50,-17}, -{48,50,-16}, -{48,50,-15}, -{48,50,-14}, -{48,50,-13}, -{48,50,-12}, -{48,50,-11}, -{48,50,-10}, -{48,50,-9}, -{48,50,-8}, -{48,50,-7}, -{48,50,-6}, -{48,50,-5}, -{48,50,-4}, -{48,50,-3}, -{48,50,-2}, -{48,50,-1}, -{48,50,0}, -{48,50,1}, -{48,50,2}, -{48,50,3}, -{48,50,4}, -{48,50,5}, -{48,50,6}, -{48,50,7}, -{48,50,8}, -{48,50,9}, -{48,50,10}, -{48,50,11}, -{48,50,12}, -{48,50,13}, -{48,50,14}, -{48,50,15}, -{48,50,16}, -{48,50,17}, -{48,50,18}, -{48,50,19}, -{48,50,20}, -{48,50,21}, -{48,50,22}, -{48,50,23}, -{48,50,24}, -{48,50,25}, -{48,50,26}, -{48,50,27}, -{48,50,28}, -{48,50,29}, -{48,50,30}, -{48,50,31}, -{48,50,32}, -{48,50,33}, -{48,50,34}, -{48,50,35}, -{48,50,36}, -{48,50,37}, -{48,50,38}, -{48,50,39}, -{48,50,40}, -{48,50,41}, -{48,50,42}, -{48,50,43}, -{48,50,44}, -{48,50,45}, -{48,50,46}, -{48,50,47}, -{48,50,48}, -{48,50,49}, -{48,50,50}, -{48,50,51}, -{48,50,52}, -{48,50,53}, -{48,50,54}, -{48,50,55}, -{48,50,56}, -{48,50,57}, -{48,50,58}, -{48,50,59}, -{48,51,-81}, -{48,51,-80}, -{48,51,-79}, -{48,51,-78}, -{48,51,-77}, -{48,51,-76}, -{48,51,-75}, -{48,51,-74}, -{48,51,-73}, -{48,51,-72}, -{48,51,-71}, -{48,51,-70}, -{48,51,-69}, -{48,51,-68}, -{48,51,-67}, -{48,51,-66}, -{48,51,-65}, -{48,51,-64}, -{48,51,-63}, -{48,51,-62}, -{48,51,-61}, -{48,51,-60}, -{48,51,-59}, -{48,51,-58}, -{48,51,-57}, -{48,51,-56}, -{48,51,-55}, -{48,51,-54}, -{48,51,-53}, -{48,51,-52}, -{48,51,-51}, -{48,51,-50}, -{48,51,-49}, -{48,51,-48}, -{48,51,-47}, -{48,51,-46}, -{48,51,-45}, -{48,51,-44}, -{48,51,-43}, -{48,51,-42}, -{48,51,-41}, -{48,51,-40}, -{48,51,-39}, -{48,51,-38}, -{48,51,-37}, -{48,51,-36}, -{48,51,-35}, -{48,51,-34}, -{48,51,-33}, -{48,51,-32}, -{48,51,-31}, -{48,51,-30}, -{48,51,-29}, -{48,51,-28}, -{48,51,-27}, -{48,51,-26}, -{48,51,-25}, -{48,51,-24}, -{48,51,-23}, -{48,51,-22}, -{48,51,-21}, -{48,51,-20}, -{48,51,-19}, -{48,51,-18}, -{48,51,-17}, -{48,51,-16}, -{48,51,-15}, -{48,51,-14}, -{48,51,-13}, -{48,51,-12}, -{48,51,-11}, -{48,51,-10}, -{48,51,-9}, -{48,51,-8}, -{48,51,-7}, -{48,51,-6}, -{48,51,-5}, -{48,51,-4}, -{48,51,-3}, -{48,51,-2}, -{48,51,-1}, -{48,51,0}, -{48,51,1}, -{48,51,2}, -{48,51,3}, -{48,51,4}, -{48,51,5}, -{48,51,6}, -{48,51,7}, -{48,51,8}, -{48,51,9}, -{48,51,10}, -{48,51,11}, -{48,51,12}, -{48,51,13}, -{48,51,14}, -{48,51,15}, -{48,51,16}, -{48,51,17}, -{48,51,18}, -{48,51,19}, -{48,51,20}, -{48,51,21}, -{48,51,22}, -{48,51,23}, -{48,51,24}, -{48,51,25}, -{48,51,26}, -{48,51,27}, -{48,51,28}, -{48,51,29}, -{48,51,30}, -{48,51,31}, -{48,51,32}, -{48,51,33}, -{48,51,34}, -{48,51,35}, -{48,51,36}, -{48,51,37}, -{48,51,38}, -{48,51,39}, -{48,51,40}, -{48,51,41}, -{48,51,42}, -{48,51,43}, -{48,51,44}, -{48,51,45}, -{48,51,46}, -{48,51,47}, -{48,51,48}, -{48,51,49}, -{48,51,50}, -{48,51,51}, -{48,51,52}, -{48,51,53}, -{48,51,54}, -{48,51,55}, -{48,51,56}, -{48,51,57}, -{48,51,58}, -{48,51,59}, -{48,52,-81}, -{48,52,-80}, -{48,52,-79}, -{48,52,-78}, -{48,52,-77}, -{48,52,-76}, -{48,52,-75}, -{48,52,-74}, -{48,52,-73}, -{48,52,-72}, -{48,52,-71}, -{48,52,-70}, -{48,52,-69}, -{48,52,-68}, -{48,52,-67}, -{48,52,-66}, -{48,52,-65}, -{48,52,-64}, -{48,52,-63}, -{48,52,-62}, -{48,52,-61}, -{48,52,-60}, -{48,52,-59}, -{48,52,-58}, -{48,52,-57}, -{48,52,-56}, -{48,52,-55}, -{48,52,-54}, -{48,52,-53}, -{48,52,-52}, -{48,52,-51}, -{48,52,-50}, -{48,52,-49}, -{48,52,-48}, -{48,52,-47}, -{48,52,-46}, -{48,52,-45}, -{48,52,-44}, -{48,52,-43}, -{48,52,-42}, -{48,52,-41}, -{48,52,-40}, -{48,52,-39}, -{48,52,-38}, -{48,52,-37}, -{48,52,-36}, -{48,52,-35}, -{48,52,-34}, -{48,52,-33}, -{48,52,-32}, -{48,52,-31}, -{48,52,-30}, -{48,52,-29}, -{48,52,-28}, -{48,52,-27}, -{48,52,-26}, -{48,52,-25}, -{48,52,-24}, -{48,52,-23}, -{48,52,-22}, -{48,52,-21}, -{48,52,-20}, -{48,52,-19}, -{48,52,-18}, -{48,52,-17}, -{48,52,-16}, -{48,52,-15}, -{48,52,-14}, -{48,52,-13}, -{48,52,-12}, -{48,52,-11}, -{48,52,-10}, -{48,52,-9}, -{48,52,-8}, -{48,52,-7}, -{48,52,-6}, -{48,52,-5}, -{48,52,-4}, -{48,52,-3}, -{48,52,-2}, -{48,52,-1}, -{48,52,0}, -{48,52,1}, -{48,52,2}, -{48,52,3}, -{48,52,4}, -{48,52,5}, -{48,52,6}, -{48,52,7}, -{48,52,8}, -{48,52,9}, -{48,52,10}, -{48,52,11}, -{48,52,12}, -{48,52,13}, -{48,52,14}, -{48,52,15}, -{48,52,16}, -{48,52,17}, -{48,52,18}, -{48,52,19}, -{48,52,20}, -{48,52,21}, -{48,52,22}, -{48,52,23}, -{48,52,24}, -{48,52,25}, -{48,52,26}, -{48,52,27}, -{48,52,28}, -{48,52,29}, -{48,52,30}, -{48,52,31}, -{48,52,32}, -{48,52,33}, -{48,52,34}, -{48,52,35}, -{48,52,36}, -{48,52,37}, -{48,52,38}, -{48,52,39}, -{48,52,40}, -{48,52,41}, -{48,52,42}, -{48,52,43}, -{48,52,44}, -{48,52,45}, -{48,52,46}, -{48,52,47}, -{48,52,48}, -{48,52,49}, -{48,52,50}, -{48,52,51}, -{48,52,52}, -{48,52,53}, -{48,52,54}, -{48,52,55}, -{48,52,56}, -{48,52,57}, -{48,52,58}, -{48,52,59}, -{48,53,-81}, -{48,53,-80}, -{48,53,-79}, -{48,53,-78}, -{48,53,-77}, -{48,53,-76}, -{48,53,-75}, -{48,53,-74}, -{48,53,-73}, -{48,53,-72}, -{48,53,-71}, -{48,53,-70}, -{48,53,-69}, -{48,53,-68}, -{48,53,-67}, -{48,53,-66}, -{48,53,-65}, -{48,53,-64}, -{48,53,-63}, -{48,53,-62}, -{48,53,-61}, -{48,53,-60}, -{48,53,-59}, -{48,53,-58}, -{48,53,-57}, -{48,53,-56}, -{48,53,-55}, -{48,53,-54}, -{48,53,-53}, -{48,53,-52}, -{48,53,-51}, -{48,53,-50}, -{48,53,-49}, -{48,53,-48}, -{48,53,-47}, -{48,53,-46}, -{48,53,-45}, -{48,53,-44}, -{48,53,-43}, -{48,53,-42}, -{48,53,-41}, -{48,53,-40}, -{48,53,-39}, -{48,53,-38}, -{48,53,-37}, -{48,53,-36}, -{48,53,-35}, -{48,53,-34}, -{48,53,-33}, -{48,53,-32}, -{48,53,-31}, -{48,53,-30}, -{48,53,-29}, -{48,53,-28}, -{48,53,-27}, -{48,53,-26}, -{48,53,-25}, -{48,53,-24}, -{48,53,-23}, -{48,53,-22}, -{48,53,-21}, -{48,53,-20}, -{48,53,-19}, -{48,53,-18}, -{48,53,-17}, -{48,53,-16}, -{48,53,-15}, -{48,53,-14}, -{48,53,-13}, -{48,53,-12}, -{48,53,-11}, -{48,53,-10}, -{48,53,-9}, -{48,53,-8}, -{48,53,-7}, -{48,53,-6}, -{48,53,-5}, -{48,53,-4}, -{48,53,-3}, -{48,53,-2}, -{48,53,-1}, -{48,53,0}, -{48,53,1}, -{48,53,2}, -{48,53,3}, -{48,53,4}, -{48,53,5}, -{48,53,6}, -{48,53,7}, -{48,53,8}, -{48,53,9}, -{48,53,10}, -{48,53,11}, -{48,53,12}, -{48,53,13}, -{48,53,14}, -{48,53,15}, -{48,53,16}, -{48,53,17}, -{48,53,18}, -{48,53,19}, -{48,53,20}, -{48,53,21}, -{48,53,22}, -{48,53,23}, -{48,53,24}, -{48,53,25}, -{48,53,26}, -{48,53,27}, -{48,53,28}, -{48,53,29}, -{48,53,30}, -{48,53,31}, -{48,53,32}, -{48,53,33}, -{48,53,34}, -{48,53,35}, -{48,53,36}, -{48,53,37}, -{48,53,38}, -{48,53,39}, -{48,53,40}, -{48,53,41}, -{48,53,42}, -{48,53,43}, -{48,53,44}, -{48,53,45}, -{48,53,46}, -{48,53,47}, -{48,53,48}, -{48,53,49}, -{48,53,50}, -{48,53,51}, -{48,53,52}, -{48,53,53}, -{48,53,54}, -{48,53,55}, -{48,53,56}, -{48,53,57}, -{48,53,58}, -{48,53,59}, -{48,54,-81}, -{48,54,-80}, -{48,54,-79}, -{48,54,-78}, -{48,54,-77}, -{48,54,-76}, -{48,54,-75}, -{48,54,-74}, -{48,54,-73}, -{48,54,-72}, -{48,54,-71}, -{48,54,-70}, -{48,54,-69}, -{48,54,-68}, -{48,54,-67}, -{48,54,-66}, -{48,54,-65}, -{48,54,-64}, -{48,54,-63}, -{48,54,-62}, -{48,54,-61}, -{48,54,-60}, -{48,54,-59}, -{48,54,-58}, -{48,54,-57}, -{48,54,-56}, -{48,54,-55}, -{48,54,-54}, -{48,54,-53}, -{48,54,-52}, -{48,54,-51}, -{48,54,-50}, -{48,54,-49}, -{48,54,-48}, -{48,54,-47}, -{48,54,-46}, -{48,54,-45}, -{48,54,-44}, -{48,54,-43}, -{48,54,-42}, -{48,54,-41}, -{48,54,-40}, -{48,54,-39}, -{48,54,-38}, -{48,54,-37}, -{48,54,-36}, -{48,54,-35}, -{48,54,-34}, -{48,54,-33}, -{48,54,-32}, -{48,54,-31}, -{48,54,-30}, -{48,54,-29}, -{48,54,-28}, -{48,54,-27}, -{48,54,-26}, -{48,54,-25}, -{48,54,-24}, -{48,54,-23}, -{48,54,-22}, -{48,54,-21}, -{48,54,-20}, -{48,54,-19}, -{48,54,-18}, -{48,54,-17}, -{48,54,-16}, -{48,54,-15}, -{48,54,-14}, -{48,54,-13}, -{48,54,-12}, -{48,54,-11}, -{48,54,-10}, -{48,54,-9}, -{48,54,-8}, -{48,54,-7}, -{48,54,-6}, -{48,54,-5}, -{48,54,-4}, -{48,54,-3}, -{48,54,-2}, -{48,54,-1}, -{48,54,0}, -{48,54,1}, -{48,54,2}, -{48,54,3}, -{48,54,4}, -{48,54,5}, -{48,54,6}, -{48,54,7}, -{48,54,8}, -{48,54,9}, -{48,54,10}, -{48,54,11}, -{48,54,12}, -{48,54,13}, -{48,54,14}, -{48,54,15}, -{48,54,16}, -{48,54,17}, -{48,54,18}, -{48,54,19}, -{48,54,20}, -{48,54,21}, -{48,54,22}, -{48,54,23}, -{48,54,24}, -{48,54,25}, -{48,54,26}, -{48,54,27}, -{48,54,28}, -{48,54,29}, -{48,54,30}, -{48,54,31}, -{48,54,32}, -{48,54,33}, -{48,54,34}, -{48,54,35}, -{48,54,36}, -{48,54,37}, -{48,54,38}, -{48,54,39}, -{48,54,40}, -{48,54,41}, -{48,54,42}, -{48,54,43}, -{48,54,44}, -{48,54,45}, -{48,54,46}, -{48,54,47}, -{48,54,48}, -{48,54,49}, -{48,54,50}, -{48,54,51}, -{48,54,52}, -{48,54,53}, -{48,54,54}, -{48,54,55}, -{48,54,56}, -{48,54,57}, -{48,54,58}, -{48,54,59}, -{48,55,-81}, -{48,55,-80}, -{48,55,-79}, -{48,55,-78}, -{48,55,-77}, -{48,55,-76}, -{48,55,-75}, -{48,55,-74}, -{48,55,-73}, -{48,55,-72}, -{48,55,-71}, -{48,55,-70}, -{48,55,-69}, -{48,55,-68}, -{48,55,-67}, -{48,55,-66}, -{48,55,-65}, -{48,55,-64}, -{48,55,-63}, -{48,55,-62}, -{48,55,-61}, -{48,55,-60}, -{48,55,-59}, -{48,55,-58}, -{48,55,-57}, -{48,55,-56}, -{48,55,-55}, -{48,55,-54}, -{48,55,-53}, -{48,55,-52}, -{48,55,-51}, -{48,55,-50}, -{48,55,-49}, -{48,55,-48}, -{48,55,-47}, -{48,55,-46}, -{48,55,-45}, -{48,55,-44}, -{48,55,-43}, -{48,55,-42}, -{48,55,-41}, -{48,55,-40}, -{48,55,-39}, -{48,55,-38}, -{48,55,-37}, -{48,55,-36}, -{48,55,-35}, -{48,55,-34}, -{48,55,-33}, -{48,55,-32}, -{48,55,-31}, -{48,55,-30}, -{48,55,-29}, -{48,55,-28}, -{48,55,-27}, -{48,55,-26}, -{48,55,-25}, -{48,55,-24}, -{48,55,-23}, -{48,55,-22}, -{48,55,-21}, -{48,55,-20}, -{48,55,-19}, -{48,55,-18}, -{48,55,-17}, -{48,55,-16}, -{48,55,-15}, -{48,55,-14}, -{48,55,-13}, -{48,55,-12}, -{48,55,-11}, -{48,55,-10}, -{48,55,-9}, -{48,55,-8}, -{48,55,-7}, -{48,55,-6}, -{48,55,-5}, -{48,55,-4}, -{48,55,-3}, -{48,55,-2}, -{48,55,-1}, -{48,55,0}, -{48,55,1}, -{48,55,2}, -{48,55,3}, -{48,55,4}, -{48,55,5}, -{48,55,6}, -{48,55,7}, -{48,55,8}, -{48,55,9}, -{48,55,10}, -{48,55,11}, -{48,55,12}, -{48,55,13}, -{48,55,14}, -{48,55,15}, -{48,55,16}, -{48,55,17}, -{48,55,18}, -{48,55,19}, -{48,55,20}, -{48,55,21}, -{48,55,22}, -{48,55,23}, -{48,55,24}, -{48,55,25}, -{48,55,26}, -{48,55,27}, -{48,55,28}, -{48,55,29}, -{48,55,30}, -{48,55,31}, -{48,55,32}, -{48,55,33}, -{48,55,34}, -{48,55,35}, -{48,55,36}, -{48,55,37}, -{48,55,38}, -{48,55,39}, -{48,55,40}, -{48,55,41}, -{48,55,42}, -{48,55,43}, -{48,55,44}, -{48,55,45}, -{48,55,46}, -{48,55,47}, -{48,55,48}, -{48,55,49}, -{48,55,50}, -{48,55,51}, -{48,55,52}, -{48,55,53}, -{48,55,54}, -{48,55,55}, -{48,55,56}, -{48,55,57}, -{48,55,58}, -{48,55,59}, -{48,56,-81}, -{48,56,-80}, -{48,56,-79}, -{48,56,-78}, -{48,56,-77}, -{48,56,-76}, -{48,56,-75}, -{48,56,-74}, -{48,56,-73}, -{48,56,-72}, -{48,56,-71}, -{48,56,-70}, -{48,56,-69}, -{48,56,-68}, -{48,56,-67}, -{48,56,-66}, -{48,56,-65}, -{48,56,-64}, -{48,56,-63}, -{48,56,-62}, -{48,56,-61}, -{48,56,-60}, -{48,56,-59}, -{48,56,-58}, -{48,56,-57}, -{48,56,-56}, -{48,56,-55}, -{48,56,-54}, -{48,56,-53}, -{48,56,-52}, -{48,56,-51}, -{48,56,-50}, -{48,56,-49}, -{48,56,-48}, -{48,56,-47}, -{48,56,-46}, -{48,56,-45}, -{48,56,-44}, -{48,56,-43}, -{48,56,-42}, -{48,56,-41}, -{48,56,-40}, -{48,56,-39}, -{48,56,-38}, -{48,56,-37}, -{48,56,-36}, -{48,56,-35}, -{48,56,-34}, -{48,56,-33}, -{48,56,-32}, -{48,56,-31}, -{48,56,-30}, -{48,56,-29}, -{48,56,-28}, -{48,56,-27}, -{48,56,-26}, -{48,56,-25}, -{48,56,-24}, -{48,56,-23}, -{48,56,-22}, -{48,56,-21}, -{48,56,-20}, -{48,56,-19}, -{48,56,-18}, -{48,56,-17}, -{48,56,-16}, -{48,56,-15}, -{48,56,-14}, -{48,56,-13}, -{48,56,-12}, -{48,56,-11}, -{48,56,-10}, -{48,56,-9}, -{48,56,-8}, -{48,56,-7}, -{48,56,-6}, -{48,56,-5}, -{48,56,-4}, -{48,56,-3}, -{48,56,-2}, -{48,56,-1}, -{48,56,0}, -{48,56,1}, -{48,56,2}, -{48,56,3}, -{48,56,4}, -{48,56,5}, -{48,56,6}, -{48,56,7}, -{48,56,8}, -{48,56,9}, -{48,56,10}, -{48,56,11}, -{48,56,12}, -{48,56,13}, -{48,56,14}, -{48,56,15}, -{48,56,16}, -{48,56,17}, -{48,56,18}, -{48,56,19}, -{48,56,20}, -{48,56,21}, -{48,56,22}, -{48,56,23}, -{48,56,24}, -{48,56,25}, -{48,56,26}, -{48,56,27}, -{48,56,28}, -{48,56,29}, -{48,56,30}, -{48,56,31}, -{48,56,32}, -{48,56,33}, -{48,56,34}, -{48,56,35}, -{48,56,36}, -{48,56,37}, -{48,56,38}, -{48,56,39}, -{48,56,40}, -{48,56,41}, -{48,56,42}, -{48,56,43}, -{48,56,44}, -{48,56,45}, -{48,56,46}, -{48,56,47}, -{48,56,48}, -{48,56,49}, -{48,56,50}, -{48,56,51}, -{48,56,52}, -{48,56,53}, -{48,56,54}, -{48,56,55}, -{48,56,56}, -{48,56,57}, -{48,56,58}, -{48,56,59}, -{48,57,-81}, -{48,57,-80}, -{48,57,-79}, -{48,57,-78}, -{48,57,-77}, -{48,57,-76}, -{48,57,-75}, -{48,57,-74}, -{48,57,-73}, -{48,57,-72}, -{48,57,-71}, -{48,57,-70}, -{48,57,-69}, -{48,57,-68}, -{48,57,-67}, -{48,57,-66}, -{48,57,-65}, -{48,57,-64}, -{48,57,-63}, -{48,57,-62}, -{48,57,-61}, -{48,57,-60}, -{48,57,-59}, -{48,57,-58}, -{48,57,-57}, -{48,57,-56}, -{48,57,-55}, -{48,57,-54}, -{48,57,-53}, -{48,57,-52}, -{48,57,-51}, -{48,57,-50}, -{48,57,-49}, -{48,57,-48}, -{48,57,-47}, -{48,57,-46}, -{48,57,-45}, -{48,57,-44}, -{48,57,-43}, -{48,57,-42}, -{48,57,-41}, -{48,57,-40}, -{48,57,-39}, -{48,57,-38}, -{48,57,-37}, -{48,57,-36}, -{48,57,-35}, -{48,57,-34}, -{48,57,-33}, -{48,57,-32}, -{48,57,-31}, -{48,57,-30}, -{48,57,-29}, -{48,57,-28}, -{48,57,-27}, -{48,57,-26}, -{48,57,-25}, -{48,57,-24}, -{48,57,-23}, -{48,57,-22}, -{48,57,-21}, -{48,57,-20}, -{48,57,-19}, -{48,57,-18}, -{48,57,-17}, -{48,57,-16}, -{48,57,-15}, -{48,57,-14}, -{48,57,-13}, -{48,57,-12}, -{48,57,-11}, -{48,57,-10}, -{48,57,-9}, -{48,57,-8}, -{48,57,-7}, -{48,57,-6}, -{48,57,-5}, -{48,57,-4}, -{48,57,-3}, -{48,57,-2}, -{48,57,-1}, -{48,57,0}, -{48,57,1}, -{48,57,2}, -{48,57,3}, -{48,57,4}, -{48,57,5}, -{48,57,6}, -{48,57,7}, -{48,57,8}, -{48,57,9}, -{48,57,10}, -{48,57,11}, -{48,57,12}, -{48,57,13}, -{48,57,14}, -{48,57,15}, -{48,57,16}, -{48,57,17}, -{48,57,18}, -{48,57,19}, -{48,57,20}, -{48,57,21}, -{48,57,22}, -{48,57,23}, -{48,57,24}, -{48,57,25}, -{48,57,26}, -{48,57,27}, -{48,57,28}, -{48,57,29}, -{48,57,30}, -{48,57,31}, -{48,57,32}, -{48,57,33}, -{48,57,34}, -{48,57,35}, -{48,57,36}, -{48,57,37}, -{48,57,38}, -{48,57,39}, -{48,57,40}, -{48,57,41}, -{48,57,42}, -{48,57,43}, -{48,57,44}, -{48,57,45}, -{48,57,46}, -{48,57,47}, -{48,57,48}, -{48,57,49}, -{48,57,50}, -{48,57,51}, -{48,57,52}, -{48,57,53}, -{48,57,54}, -{48,57,55}, -{48,57,56}, -{48,57,57}, -{48,57,58}, -{48,57,59}, -{48,58,-81}, -{48,58,-80}, -{48,58,-79}, -{48,58,-78}, -{48,58,-77}, -{48,58,-76}, -{48,58,-75}, -{48,58,-74}, -{48,58,-73}, -{48,58,-72}, -{48,58,-71}, -{48,58,-70}, -{48,58,-69}, -{48,58,-68}, -{48,58,-67}, -{48,58,-66}, -{48,58,-65}, -{48,58,-64}, -{48,58,-63}, -{48,58,-62}, -{48,58,-61}, -{48,58,-60}, -{48,58,-59}, -{48,58,-58}, -{48,58,-57}, -{48,58,-56}, -{48,58,-55}, -{48,58,-54}, -{48,58,-53}, -{48,58,-52}, -{48,58,-51}, -{48,58,-50}, -{48,58,-49}, -{48,58,-48}, -{48,58,-47}, -{48,58,-46}, -{48,58,-45}, -{48,58,-44}, -{48,58,-43}, -{48,58,-42}, -{48,58,-41}, -{48,58,-40}, -{48,58,-39}, -{48,58,-38}, -{48,58,-37}, -{48,58,-36}, -{48,58,-35}, -{48,58,-34}, -{48,58,-33}, -{48,58,-32}, -{48,58,-31}, -{48,58,-30}, -{48,58,-29}, -{48,58,-28}, -{48,58,-27}, -{48,58,-26}, -{48,58,-25}, -{48,58,-24}, -{48,58,-23}, -{48,58,-22}, -{48,58,-21}, -{48,58,-20}, -{48,58,-19}, -{48,58,-18}, -{48,58,-17}, -{48,58,-16}, -{48,58,-15}, -{48,58,-14}, -{48,58,-13}, -{48,58,-12}, -{48,58,-11}, -{48,58,-10}, -{48,58,-9}, -{48,58,-8}, -{48,58,-7}, -{48,58,-6}, -{48,58,-5}, -{48,58,-4}, -{48,58,-3}, -{48,58,-2}, -{48,58,-1}, -{48,58,0}, -{48,58,1}, -{48,58,2}, -{48,58,3}, -{48,58,4}, -{48,58,5}, -{48,58,6}, -{48,58,7}, -{48,58,8}, -{48,58,9}, -{48,58,10}, -{48,58,11}, -{48,58,12}, -{48,58,13}, -{48,58,14}, -{48,58,15}, -{48,58,16}, -{48,58,17}, -{48,58,18}, -{48,58,19}, -{48,58,20}, -{48,58,21}, -{48,58,22}, -{48,58,23}, -{48,58,24}, -{48,58,25}, -{48,58,26}, -{48,58,27}, -{48,58,28}, -{48,58,29}, -{48,58,30}, -{48,58,31}, -{48,58,32}, -{48,58,33}, -{48,58,34}, -{48,58,35}, -{48,58,36}, -{48,58,37}, -{48,58,38}, -{48,58,39}, -{48,58,40}, -{48,58,41}, -{48,58,42}, -{48,58,43}, -{48,58,44}, -{48,58,45}, -{48,58,46}, -{48,58,47}, -{48,58,48}, -{48,58,49}, -{48,58,50}, -{48,58,51}, -{48,58,52}, -{48,58,53}, -{48,58,54}, -{48,58,55}, -{48,58,56}, -{48,58,57}, -{48,58,58}, -{48,58,59}, -{48,58,60}, -{48,59,-81}, -{48,59,-80}, -{48,59,-79}, -{48,59,-78}, -{48,59,-77}, -{48,59,-76}, -{48,59,-75}, -{48,59,-74}, -{48,59,-73}, -{48,59,-72}, -{48,59,-71}, -{48,59,-70}, -{48,59,-69}, -{48,59,-68}, -{48,59,-67}, -{48,59,-66}, -{48,59,-65}, -{48,59,-64}, -{48,59,-63}, -{48,59,-62}, -{48,59,-61}, -{48,59,-60}, -{48,59,-59}, -{48,59,-58}, -{48,59,-57}, -{48,59,-56}, -{48,59,-55}, -{48,59,-54}, -{48,59,-53}, -{48,59,-52}, -{48,59,-51}, -{48,59,-50}, -{48,59,-49}, -{48,59,-48}, -{48,59,-47}, -{48,59,-46}, -{48,59,-45}, -{48,59,-44}, -{48,59,-43}, -{48,59,-42}, -{48,59,-41}, -{48,59,-40}, -{48,59,-39}, -{48,59,-38}, -{48,59,-37}, -{48,59,-36}, -{48,59,-35}, -{48,59,-34}, -{48,59,-33}, -{48,59,-32}, -{48,59,-31}, -{48,59,-30}, -{48,59,-29}, -{48,59,-28}, -{48,59,-27}, -{48,59,-26}, -{48,59,-25}, -{48,59,-24}, -{48,59,-23}, -{48,59,-22}, -{48,59,-21}, -{48,59,-20}, -{48,59,-19}, -{48,59,-18}, -{48,59,-17}, -{48,59,-16}, -{48,59,-15}, -{48,59,-14}, -{48,59,-13}, -{48,59,-12}, -{48,59,-11}, -{48,59,-10}, -{48,59,-9}, -{48,59,-8}, -{48,59,-7}, -{48,59,-6}, -{48,59,-5}, -{48,59,-4}, -{48,59,-3}, -{48,59,-2}, -{48,59,-1}, -{48,59,0}, -{48,59,1}, -{48,59,2}, -{48,59,3}, -{48,59,4}, -{48,59,5}, -{48,59,6}, -{48,59,7}, -{48,59,8}, -{48,59,9}, -{48,59,10}, -{48,59,11}, -{48,59,12}, -{48,59,13}, -{48,59,14}, -{48,59,15}, -{48,59,16}, -{48,59,17}, -{48,59,18}, -{48,59,19}, -{48,59,20}, -{48,59,21}, -{48,59,22}, -{48,59,23}, -{48,59,24}, -{48,59,25}, -{48,59,26}, -{48,59,27}, -{48,59,28}, -{48,59,29}, -{48,59,30}, -{48,59,31}, -{48,59,32}, -{48,59,33}, -{48,59,34}, -{48,59,35}, -{48,59,36}, -{48,59,37}, -{48,59,38}, -{48,59,39}, -{48,59,40}, -{48,59,41}, -{48,59,42}, -{48,59,43}, -{48,59,44}, -{48,59,45}, -{48,59,46}, -{48,59,47}, -{48,59,48}, -{48,59,49}, -{48,59,50}, -{48,59,51}, -{48,59,52}, -{48,59,53}, -{48,59,54}, -{48,59,55}, -{48,59,56}, -{48,59,57}, -{48,59,58}, -{48,59,59}, -{48,59,60}, -{48,60,-81}, -{48,60,-80}, -{48,60,-79}, -{48,60,-78}, -{48,60,-77}, -{48,60,-76}, -{48,60,-75}, -{48,60,-74}, -{48,60,-73}, -{48,60,-72}, -{48,60,-71}, -{48,60,-70}, -{48,60,-69}, -{48,60,-68}, -{48,60,-67}, -{48,60,-66}, -{48,60,-65}, -{48,60,-64}, -{48,60,-63}, -{48,60,-62}, -{48,60,-61}, -{48,60,-60}, -{48,60,-59}, -{48,60,-58}, -{48,60,-57}, -{48,60,-56}, -{48,60,-55}, -{48,60,-54}, -{48,60,-53}, -{48,60,-52}, -{48,60,-51}, -{48,60,-50}, -{48,60,-49}, -{48,60,-48}, -{48,60,-47}, -{48,60,-46}, -{48,60,-45}, -{48,60,-44}, -{48,60,-43}, -{48,60,-42}, -{48,60,-41}, -{48,60,-40}, -{48,60,-39}, -{48,60,-38}, -{48,60,-37}, -{48,60,-36}, -{48,60,-35}, -{48,60,-34}, -{48,60,-33}, -{48,60,-32}, -{48,60,-31}, -{48,60,-30}, -{48,60,-29}, -{48,60,-28}, -{48,60,-27}, -{48,60,-26}, -{48,60,-25}, -{48,60,-24}, -{48,60,-23}, -{48,60,-22}, -{48,60,-21}, -{48,60,-20}, -{48,60,-19}, -{48,60,-18}, -{48,60,-17}, -{48,60,-16}, -{48,60,-15}, -{48,60,-14}, -{48,60,-13}, -{48,60,-12}, -{48,60,-11}, -{48,60,-10}, -{48,60,-9}, -{48,60,-8}, -{48,60,-7}, -{48,60,-6}, -{48,60,-5}, -{48,60,-4}, -{48,60,-3}, -{48,60,-2}, -{48,60,-1}, -{48,60,0}, -{48,60,1}, -{48,60,2}, -{48,60,3}, -{48,60,4}, -{48,60,5}, -{48,60,6}, -{48,60,7}, -{48,60,8}, -{48,60,9}, -{48,60,10}, -{48,60,11}, -{48,60,12}, -{48,60,13}, -{48,60,14}, -{48,60,15}, -{48,60,16}, -{48,60,17}, -{48,60,18}, -{48,60,19}, -{48,60,20}, -{48,60,21}, -{48,60,22}, -{48,60,23}, -{48,60,24}, -{48,60,25}, -{48,60,26}, -{48,60,27}, -{48,60,28}, -{48,60,29}, -{48,60,30}, -{48,60,31}, -{48,60,32}, -{48,60,33}, -{48,60,34}, -{48,60,35}, -{48,60,36}, -{48,60,37}, -{48,60,38}, -{48,60,39}, -{48,60,40}, -{48,60,41}, -{48,60,42}, -{48,60,43}, -{48,60,44}, -{48,60,45}, -{48,60,46}, -{48,60,47}, -{48,60,48}, -{48,60,49}, -{48,60,50}, -{48,60,51}, -{48,60,52}, -{48,60,53}, -{48,60,54}, -{48,60,55}, -{48,60,56}, -{48,60,57}, -{48,60,58}, -{48,60,59}, -{48,60,60}, -{48,61,-81}, -{48,61,-80}, -{48,61,-79}, -{48,61,-78}, -{48,61,-77}, -{48,61,-76}, -{48,61,-75}, -{48,61,-74}, -{48,61,-73}, -{48,61,-72}, -{48,61,-71}, -{48,61,-70}, -{48,61,-69}, -{48,61,-68}, -{48,61,-67}, -{48,61,-66}, -{48,61,-65}, -{48,61,-64}, -{48,61,-63}, -{48,61,-62}, -{48,61,-61}, -{48,61,-60}, -{48,61,-59}, -{48,61,-58}, -{48,61,-57}, -{48,61,-56}, -{48,61,-55}, -{48,61,-54}, -{48,61,-53}, -{48,61,-52}, -{48,61,-51}, -{48,61,-50}, -{48,61,-49}, -{48,61,-48}, -{48,61,-47}, -{48,61,-46}, -{48,61,-45}, -{48,61,-44}, -{48,61,-43}, -{48,61,-42}, -{48,61,-41}, -{48,61,-40}, -{48,61,-39}, -{48,61,-38}, -{48,61,-37}, -{48,61,-36}, -{48,61,-35}, -{48,61,-34}, -{48,61,-33}, -{48,61,-32}, -{48,61,-31}, -{48,61,-30}, -{48,61,-29}, -{48,61,-28}, -{48,61,-27}, -{48,61,-26}, -{48,61,-25}, -{48,61,-24}, -{48,61,-23}, -{48,61,-22}, -{48,61,-21}, -{48,61,-20}, -{48,61,-19}, -{48,61,-18}, -{48,61,-17}, -{48,61,-16}, -{48,61,-15}, -{48,61,-14}, -{48,61,-13}, -{48,61,-12}, -{48,61,-11}, -{48,61,-10}, -{48,61,-9}, -{48,61,-8}, -{48,61,-7}, -{48,61,-6}, -{48,61,-5}, -{48,61,-4}, -{48,61,-3}, -{48,61,-2}, -{48,61,-1}, -{48,61,0}, -{48,61,1}, -{48,61,2}, -{48,61,3}, -{48,61,4}, -{48,61,5}, -{48,61,6}, -{48,61,7}, -{48,61,8}, -{48,61,9}, -{48,61,10}, -{48,61,11}, -{48,61,12}, -{48,61,13}, -{48,61,14}, -{48,61,15}, -{48,61,16}, -{48,61,17}, -{48,61,18}, -{48,61,19}, -{48,61,20}, -{48,61,21}, -{48,61,22}, -{48,61,23}, -{48,61,24}, -{48,61,25}, -{48,61,26}, -{48,61,27}, -{48,61,28}, -{48,61,29}, -{48,61,30}, -{48,61,31}, -{48,61,32}, -{48,61,33}, -{48,61,34}, -{48,61,35}, -{48,61,36}, -{48,61,37}, -{48,61,38}, -{48,61,39}, -{48,61,40}, -{48,61,41}, -{48,61,42}, -{48,61,43}, -{48,61,44}, -{48,61,45}, -{48,61,46}, -{48,61,47}, -{48,61,48}, -{48,61,49}, -{48,61,50}, -{48,61,51}, -{48,61,52}, -{48,61,53}, -{48,61,54}, -{48,61,55}, -{48,61,56}, -{48,61,57}, -{48,61,58}, -{48,61,59}, -{48,61,60}, -{48,62,-81}, -{48,62,-80}, -{48,62,-79}, -{48,62,-78}, -{48,62,-77}, -{48,62,-76}, -{48,62,-75}, -{48,62,-74}, -{48,62,-73}, -{48,62,-72}, -{48,62,-71}, -{48,62,-70}, -{48,62,-69}, -{48,62,-68}, -{48,62,-67}, -{48,62,-66}, -{48,62,-65}, -{48,62,-64}, -{48,62,-63}, -{48,62,-62}, -{48,62,-61}, -{48,62,-60}, -{48,62,-59}, -{48,62,-58}, -{48,62,-57}, -{48,62,-56}, -{48,62,-55}, -{48,62,-54}, -{48,62,-53}, -{48,62,-52}, -{48,62,-51}, -{48,62,-50}, -{48,62,-49}, -{48,62,-48}, -{48,62,-47}, -{48,62,-46}, -{48,62,-45}, -{48,62,-44}, -{48,62,-43}, -{48,62,-42}, -{48,62,-41}, -{48,62,-40}, -{48,62,-39}, -{48,62,-38}, -{48,62,-37}, -{48,62,-36}, -{48,62,-35}, -{48,62,-34}, -{48,62,-33}, -{48,62,-32}, -{48,62,-31}, -{48,62,-30}, -{48,62,-29}, -{48,62,-28}, -{48,62,-27}, -{48,62,-26}, -{48,62,-25}, -{48,62,-24}, -{48,62,-23}, -{48,62,-22}, -{48,62,-21}, -{48,62,-20}, -{48,62,-19}, -{48,62,-18}, -{48,62,-17}, -{48,62,-16}, -{48,62,-15}, -{48,62,-14}, -{48,62,-13}, -{48,62,-12}, -{48,62,-11}, -{48,62,-10}, -{48,62,-9}, -{48,62,-8}, -{48,62,-7}, -{48,62,-6}, -{48,62,-5}, -{48,62,-4}, -{48,62,-3}, -{48,62,-2}, -{48,62,-1}, -{48,62,0}, -{48,62,1}, -{48,62,2}, -{48,62,3}, -{48,62,4}, -{48,62,5}, -{48,62,6}, -{48,62,7}, -{48,62,8}, -{48,62,9}, -{48,62,10}, -{48,62,11}, -{48,62,12}, -{48,62,13}, -{48,62,14}, -{48,62,15}, -{48,62,16}, -{48,62,17}, -{48,62,18}, -{48,62,19}, -{48,62,20}, -{48,62,21}, -{48,62,22}, -{48,62,23}, -{48,62,24}, -{48,62,25}, -{48,62,26}, -{48,62,27}, -{48,62,28}, -{48,62,29}, -{48,62,30}, -{48,62,31}, -{48,62,32}, -{48,62,33}, -{48,62,34}, -{48,62,35}, -{48,62,36}, -{48,62,37}, -{48,62,38}, -{48,62,39}, -{48,62,40}, -{48,62,41}, -{48,62,42}, -{48,62,43}, -{48,62,44}, -{48,62,45}, -{48,62,46}, -{48,62,47}, -{48,62,48}, -{48,62,49}, -{48,62,50}, -{48,62,51}, -{48,62,52}, -{48,62,53}, -{48,62,54}, -{48,62,55}, -{48,62,56}, -{48,62,57}, -{48,62,58}, -{48,62,59}, -{48,62,60}, -{48,63,-81}, -{48,63,-80}, -{48,63,-79}, -{48,63,-78}, -{48,63,-77}, -{48,63,-76}, -{48,63,-75}, -{48,63,-74}, -{48,63,-73}, -{48,63,-72}, -{48,63,-71}, -{48,63,-70}, -{48,63,-69}, -{48,63,-68}, -{48,63,-67}, -{48,63,-66}, -{48,63,-65}, -{48,63,-64}, -{48,63,-63}, -{48,63,-62}, -{48,63,-61}, -{48,63,-60}, -{48,63,-59}, -{48,63,-58}, -{48,63,-57}, -{48,63,-56}, -{48,63,-55}, -{48,63,-54}, -{48,63,-53}, -{48,63,-52}, -{48,63,-51}, -{48,63,-50}, -{48,63,-49}, -{48,63,-48}, -{48,63,-47}, -{48,63,-46}, -{48,63,-45}, -{48,63,-44}, -{48,63,-43}, -{48,63,-42}, -{48,63,-41}, -{48,63,-40}, -{48,63,-39}, -{48,63,-38}, -{48,63,-37}, -{48,63,-36}, -{48,63,-35}, -{48,63,-34}, -{48,63,-33}, -{48,63,-32}, -{48,63,-31}, -{48,63,-30}, -{48,63,-29}, -{48,63,-28}, -{48,63,-27}, -{48,63,-26}, -{48,63,-25}, -{48,63,-24}, -{48,63,-23}, -{48,63,-22}, -{48,63,-21}, -{48,63,-20}, -{48,63,-19}, -{48,63,-18}, -{48,63,-17}, -{48,63,-16}, -{48,63,-15}, -{48,63,-14}, -{48,63,-13}, -{48,63,-12}, -{48,63,-11}, -{48,63,-10}, -{48,63,-9}, -{48,63,-8}, -{48,63,-7}, -{48,63,-6}, -{48,63,-5}, -{48,63,-4}, -{48,63,-3}, -{48,63,-2}, -{48,63,-1}, -{48,63,0}, -{48,63,1}, -{48,63,2}, -{48,63,3}, -{48,63,4}, -{48,63,5}, -{48,63,6}, -{48,63,7}, -{48,63,8}, -{48,63,9}, -{48,63,10}, -{48,63,11}, -{48,63,12}, -{48,63,13}, -{48,63,14}, -{48,63,15}, -{48,63,16}, -{48,63,17}, -{48,63,18}, -{48,63,19}, -{48,63,20}, -{48,63,21}, -{48,63,22}, -{48,63,23}, -{48,63,24}, -{48,63,25}, -{48,63,26}, -{48,63,27}, -{48,63,28}, -{48,63,29}, -{48,63,30}, -{48,63,31}, -{48,63,32}, -{48,63,33}, -{48,63,34}, -{48,63,35}, -{48,63,36}, -{48,63,37}, -{48,63,38}, -{48,63,39}, -{48,63,40}, -{48,63,41}, -{48,63,42}, -{48,63,43}, -{48,63,44}, -{48,63,45}, -{48,63,46}, -{48,63,47}, -{48,63,48}, -{48,63,49}, -{48,63,50}, -{48,63,51}, -{48,63,52}, -{48,63,53}, -{48,63,54}, -{48,63,55}, -{48,63,56}, -{48,63,57}, -{48,63,58}, -{48,63,59}, -{48,63,60}, -{48,64,-81}, -{48,64,-80}, -{48,64,-79}, -{48,64,-78}, -{48,64,-77}, -{48,64,-76}, -{48,64,-75}, -{48,64,-74}, -{48,64,-73}, -{48,64,-72}, -{48,64,-71}, -{48,64,-70}, -{48,64,-69}, -{48,64,-68}, -{48,64,-67}, -{48,64,-66}, -{48,64,-65}, -{48,64,-64}, -{48,64,-63}, -{48,64,-62}, -{48,64,-61}, -{48,64,-60}, -{48,64,-59}, -{48,64,-58}, -{48,64,-57}, -{48,64,-56}, -{48,64,-55}, -{48,64,-54}, -{48,64,-53}, -{48,64,-52}, -{48,64,-51}, -{48,64,-50}, -{48,64,-49}, -{48,64,-48}, -{48,64,-47}, -{48,64,-46}, -{48,64,-45}, -{48,64,-44}, -{48,64,-43}, -{48,64,-42}, -{48,64,-41}, -{48,64,-40}, -{48,64,-39}, -{48,64,-38}, -{48,64,-37}, -{48,64,-36}, -{48,64,-35}, -{48,64,-34}, -{48,64,-33}, -{48,64,-32}, -{48,64,-31}, -{48,64,-30}, -{48,64,-29}, -{48,64,-28}, -{48,64,-27}, -{48,64,-26}, -{48,64,-25}, -{48,64,-24}, -{48,64,-23}, -{48,64,-22}, -{48,64,-21}, -{48,64,-20}, -{48,64,-19}, -{48,64,-18}, -{48,64,-17}, -{48,64,-16}, -{48,64,-15}, -{48,64,-14}, -{48,64,-13}, -{48,64,-12}, -{48,64,-11}, -{48,64,-10}, -{48,64,-9}, -{48,64,-8}, -{48,64,-7}, -{48,64,-6}, -{48,64,-5}, -{48,64,-4}, -{48,64,-3}, -{48,64,-2}, -{48,64,-1}, -{48,64,0}, -{48,64,1}, -{48,64,2}, -{48,64,3}, -{48,64,4}, -{48,64,5}, -{48,64,6}, -{48,64,7}, -{48,64,8}, -{48,64,9}, -{48,64,10}, -{48,64,11}, -{48,64,12}, -{48,64,13}, -{48,64,14}, -{48,64,15}, -{48,64,16}, -{48,64,17}, -{48,64,18}, -{48,64,19}, -{48,64,20}, -{48,64,21}, -{48,64,22}, -{48,64,23}, -{48,64,24}, -{48,64,25}, -{48,64,26}, -{48,64,27}, -{48,64,28}, -{48,64,29}, -{48,64,30}, -{48,64,31}, -{48,64,32}, -{48,64,33}, -{48,64,34}, -{48,64,35}, -{48,64,36}, -{48,64,37}, -{48,64,38}, -{48,64,39}, -{48,64,40}, -{48,64,41}, -{48,64,42}, -{48,64,43}, -{48,64,44}, -{48,64,45}, -{48,64,46}, -{48,64,47}, -{48,64,48}, -{48,64,49}, -{48,64,50}, -{48,64,51}, -{48,64,52}, -{48,64,53}, -{48,64,54}, -{48,64,55}, -{48,64,56}, -{48,64,57}, -{48,64,58}, -{48,64,59}, -{48,64,60}, -{48,65,-81}, -{48,65,-80}, -{48,65,-79}, -{48,65,-78}, -{48,65,-77}, -{48,65,-76}, -{48,65,-75}, -{48,65,-74}, -{48,65,-73}, -{48,65,-72}, -{48,65,-71}, -{48,65,-70}, -{48,65,-69}, -{48,65,-68}, -{48,65,-67}, -{48,65,-66}, -{48,65,-65}, -{48,65,-64}, -{48,65,-63}, -{48,65,-62}, -{48,65,-61}, -{48,65,-60}, -{48,65,-59}, -{48,65,-58}, -{48,65,-57}, -{48,65,-56}, -{48,65,-55}, -{48,65,-54}, -{48,65,-53}, -{48,65,-52}, -{48,65,-51}, -{48,65,-50}, -{48,65,-49}, -{48,65,-48}, -{48,65,-47}, -{48,65,-46}, -{48,65,-45}, -{48,65,-44}, -{48,65,-43}, -{48,65,-42}, -{48,65,-41}, -{48,65,-40}, -{48,65,-39}, -{48,65,-38}, -{48,65,-37}, -{48,65,-36}, -{48,65,-35}, -{48,65,-34}, -{48,65,-33}, -{48,65,-32}, -{48,65,-31}, -{48,65,-30}, -{48,65,-29}, -{48,65,-28}, -{48,65,-27}, -{48,65,-26}, -{48,65,-25}, -{48,65,-24}, -{48,65,-23}, -{48,65,-22}, -{48,65,-21}, -{48,65,-20}, -{48,65,-19}, -{48,65,-18}, -{48,65,-17}, -{48,65,-16}, -{48,65,-15}, -{48,65,-14}, -{48,65,-13}, -{48,65,-12}, -{48,65,-11}, -{48,65,-10}, -{48,65,-9}, -{48,65,-8}, -{48,65,-7}, -{48,65,-6}, -{48,65,-5}, -{48,65,-4}, -{48,65,-3}, -{48,65,-2}, -{48,65,-1}, -{48,65,0}, -{48,65,1}, -{48,65,2}, -{48,65,3}, -{48,65,4}, -{48,65,5}, -{48,65,6}, -{48,65,7}, -{48,65,8}, -{48,65,9}, -{48,65,10}, -{48,65,11}, -{48,65,12}, -{48,65,13}, -{48,65,14}, -{48,65,15}, -{48,65,16}, -{48,65,17}, -{48,65,18}, -{48,65,19}, -{48,65,20}, -{48,65,21}, -{48,65,22}, -{48,65,23}, -{48,65,24}, -{48,65,25}, -{48,65,26}, -{48,65,27}, -{48,65,28}, -{48,65,29}, -{48,65,30}, -{48,65,31}, -{48,65,32}, -{48,65,33}, -{48,65,34}, -{48,65,35}, -{48,65,36}, -{48,65,37}, -{48,65,38}, -{48,65,39}, -{48,65,40}, -{48,65,41}, -{48,65,42}, -{48,65,43}, -{48,65,44}, -{48,65,45}, -{48,65,46}, -{48,65,47}, -{48,65,48}, -{48,65,49}, -{48,65,50}, -{48,65,51}, -{48,65,52}, -{48,65,53}, -{48,65,54}, -{48,65,55}, -{48,65,56}, -{48,65,57}, -{48,65,58}, -{48,65,59}, -{48,65,60}, -{48,65,61}, -{48,66,-81}, -{48,66,-80}, -{48,66,-79}, -{48,66,-78}, -{48,66,-77}, -{48,66,-76}, -{48,66,-75}, -{48,66,-74}, -{48,66,-73}, -{48,66,-72}, -{48,66,-71}, -{48,66,-70}, -{48,66,-69}, -{48,66,-68}, -{48,66,-67}, -{48,66,-66}, -{48,66,-65}, -{48,66,-64}, -{48,66,-63}, -{48,66,-62}, -{48,66,-61}, -{48,66,-60}, -{48,66,-59}, -{48,66,-58}, -{48,66,-57}, -{48,66,-56}, -{48,66,-55}, -{48,66,-54}, -{48,66,-53}, -{48,66,-52}, -{48,66,-51}, -{48,66,-50}, -{48,66,-49}, -{48,66,-48}, -{48,66,-47}, -{48,66,-46}, -{48,66,-45}, -{48,66,-44}, -{48,66,-43}, -{48,66,-42}, -{48,66,-41}, -{48,66,-40}, -{48,66,-39}, -{48,66,-38}, -{48,66,-37}, -{48,66,-36}, -{48,66,-35}, -{48,66,-34}, -{48,66,-33}, -{48,66,-32}, -{48,66,-31}, -{48,66,-30}, -{48,66,-29}, -{48,66,-28}, -{48,66,-27}, -{48,66,-26}, -{48,66,-25}, -{48,66,-24}, -{48,66,-23}, -{48,66,-22}, -{48,66,-21}, -{48,66,-20}, -{48,66,-19}, -{48,66,-18}, -{48,66,-17}, -{48,66,-16}, -{48,66,-15}, -{48,66,-14}, -{48,66,-13}, -{48,66,-12}, -{48,66,-11}, -{48,66,-10}, -{48,66,-9}, -{48,66,-8}, -{48,66,-7}, -{48,66,-6}, -{48,66,-5}, -{48,66,-4}, -{48,66,-3}, -{48,66,-2}, -{48,66,-1}, -{48,66,0}, -{48,66,1}, -{48,66,2}, -{48,66,3}, -{48,66,4}, -{48,66,5}, -{48,66,6}, -{48,66,7}, -{48,66,8}, -{48,66,9}, -{48,66,10}, -{48,66,11}, -{48,66,12}, -{48,66,13}, -{48,66,14}, -{48,66,15}, -{48,66,16}, -{48,66,17}, -{48,66,18}, -{48,66,19}, -{48,66,20}, -{48,66,21}, -{48,66,22}, -{48,66,23}, -{48,66,24}, -{48,66,25}, -{48,66,26}, -{48,66,27}, -{48,66,28}, -{48,66,29}, -{48,66,30}, -{48,66,31}, -{48,66,32}, -{48,66,33}, -{48,66,34}, -{48,66,35}, -{48,66,36}, -{48,66,37}, -{48,66,38}, -{48,66,39}, -{48,66,40}, -{48,66,41}, -{48,66,42}, -{48,66,43}, -{48,66,44}, -{48,66,45}, -{48,66,46}, -{48,66,47}, -{48,66,48}, -{48,66,49}, -{48,66,50}, -{48,66,51}, -{48,66,52}, -{48,66,53}, -{48,66,54}, -{48,66,55}, -{48,66,56}, -{48,66,57}, -{48,66,58}, -{48,66,59}, -{48,66,60}, -{48,66,61}, -{48,67,-81}, -{48,67,-80}, -{48,67,-79}, -{48,67,-78}, -{48,67,-77}, -{48,67,-76}, -{48,67,-75}, -{48,67,-74}, -{48,67,-73}, -{48,67,-72}, -{48,67,-71}, -{48,67,-70}, -{48,67,-69}, -{48,67,-68}, -{48,67,-67}, -{48,67,-66}, -{48,67,-65}, -{48,67,-64}, -{48,67,-63}, -{48,67,-62}, -{48,67,-61}, -{48,67,-60}, -{48,67,-59}, -{48,67,-58}, -{48,67,-57}, -{48,67,-56}, -{48,67,-55}, -{48,67,-54}, -{48,67,-53}, -{48,67,-52}, -{48,67,-51}, -{48,67,-50}, -{48,67,-49}, -{48,67,-48}, -{48,67,-47}, -{48,67,-46}, -{48,67,-45}, -{48,67,-44}, -{48,67,-43}, -{48,67,-42}, -{48,67,-41}, -{48,67,-40}, -{48,67,-39}, -{48,67,-38}, -{48,67,-37}, -{48,67,-36}, -{48,67,-35}, -{48,67,-34}, -{48,67,-33}, -{48,67,-32}, -{48,67,-31}, -{48,67,-30}, -{48,67,-29}, -{48,67,-28}, -{48,67,-27}, -{48,67,-26}, -{48,67,-25}, -{48,67,-24}, -{48,67,-23}, -{48,67,-22}, -{48,67,-21}, -{48,67,-20}, -{48,67,-19}, -{48,67,-18}, -{48,67,-17}, -{48,67,-16}, -{48,67,-15}, -{48,67,-14}, -{48,67,-13}, -{48,67,-12}, -{48,67,-11}, -{48,67,-10}, -{48,67,-9}, -{48,67,-8}, -{48,67,-7}, -{48,67,-6}, -{48,67,-5}, -{48,67,-4}, -{48,67,-3}, -{48,67,-2}, -{48,67,-1}, -{48,67,0}, -{48,67,1}, -{48,67,2}, -{48,67,3}, -{48,67,4}, -{48,67,5}, -{48,67,6}, -{48,67,7}, -{48,67,8}, -{48,67,9}, -{48,67,10}, -{48,67,11}, -{48,67,12}, -{48,67,13}, -{48,67,14}, -{48,67,15}, -{48,67,16}, -{48,67,17}, -{48,67,18}, -{48,67,19}, -{48,67,20}, -{48,67,21}, -{48,67,22}, -{48,67,23}, -{48,67,24}, -{48,67,25}, -{48,67,26}, -{48,67,27}, -{48,67,28}, -{48,67,29}, -{48,67,30}, -{48,67,31}, -{48,67,32}, -{48,67,33}, -{48,67,34}, -{48,67,35}, -{48,67,36}, -{48,67,37}, -{48,67,38}, -{48,67,39}, -{48,67,40}, -{48,67,41}, -{48,67,42}, -{48,67,43}, -{48,67,44}, -{48,67,45}, -{48,67,46}, -{48,67,47}, -{48,67,48}, -{48,67,49}, -{48,67,50}, -{48,67,51}, -{48,67,52}, -{48,67,53}, -{48,67,54}, -{48,67,55}, -{48,67,56}, -{48,67,57}, -{48,67,58}, -{48,67,59}, -{48,67,60}, -{48,67,61}, -{48,68,-81}, -{48,68,-80}, -{48,68,-79}, -{48,68,-78}, -{48,68,-77}, -{48,68,-76}, -{48,68,-75}, -{48,68,-74}, -{48,68,-73}, -{48,68,-72}, -{48,68,-71}, -{48,68,-70}, -{48,68,-69}, -{48,68,-68}, -{48,68,-67}, -{48,68,-66}, -{48,68,-65}, -{48,68,-64}, -{48,68,-63}, -{48,68,-62}, -{48,68,-61}, -{48,68,-60}, -{48,68,-59}, -{48,68,-58}, -{48,68,-57}, -{48,68,-56}, -{48,68,-55}, -{48,68,-54}, -{48,68,-53}, -{48,68,-52}, -{48,68,-51}, -{48,68,-50}, -{48,68,-49}, -{48,68,-48}, -{48,68,-47}, -{48,68,-46}, -{48,68,-45}, -{48,68,-44}, -{48,68,-43}, -{48,68,-42}, -{48,68,-41}, -{48,68,-40}, -{48,68,-39}, -{48,68,-38}, -{48,68,-37}, -{48,68,-36}, -{48,68,-35}, -{48,68,-34}, -{48,68,-33}, -{48,68,-32}, -{48,68,-31}, -{48,68,-30}, -{48,68,-29}, -{48,68,-28}, -{48,68,-27}, -{48,68,-26}, -{48,68,-25}, -{48,68,-24}, -{48,68,-23}, -{48,68,-22}, -{48,68,-21}, -{48,68,-20}, -{48,68,-19}, -{48,68,-18}, -{48,68,-17}, -{48,68,-16}, -{48,68,-15}, -{48,68,-14}, -{48,68,-13}, -{48,68,-12}, -{48,68,-11}, -{48,68,-10}, -{48,68,-9}, -{48,68,-8}, -{48,68,-7}, -{48,68,-6}, -{48,68,-5}, -{48,68,-4}, -{48,68,-3}, -{48,68,-2}, -{48,68,-1}, -{48,68,0}, -{48,68,1}, -{48,68,2}, -{48,68,3}, -{48,68,4}, -{48,68,5}, -{48,68,6}, -{48,68,7}, -{48,68,8}, -{48,68,9}, -{48,68,10}, -{48,68,11}, -{48,68,12}, -{48,68,13}, -{48,68,14}, -{48,68,15}, -{48,68,16}, -{48,68,17}, -{48,68,18}, -{48,68,19}, -{48,68,20}, -{48,68,21}, -{48,68,22}, -{48,68,23}, -{48,68,24}, -{48,68,25}, -{48,68,26}, -{48,68,27}, -{48,68,28}, -{48,68,29}, -{48,68,30}, -{48,68,31}, -{48,68,32}, -{48,68,33}, -{48,68,34}, -{48,68,35}, -{48,68,36}, -{48,68,37}, -{48,68,38}, -{48,68,39}, -{48,68,40}, -{48,68,41}, -{48,68,42}, -{48,68,43}, -{48,68,44}, -{48,68,45}, -{48,68,46}, -{48,68,47}, -{48,68,48}, -{48,68,49}, -{48,68,50}, -{48,68,51}, -{48,68,52}, -{48,68,53}, -{48,68,54}, -{48,68,55}, -{48,68,56}, -{48,68,57}, -{48,68,58}, -{48,68,59}, -{48,68,60}, -{48,68,61}, -{48,69,-81}, -{48,69,-80}, -{48,69,-79}, -{48,69,-78}, -{48,69,-77}, -{48,69,-76}, -{48,69,-75}, -{48,69,-74}, -{48,69,-73}, -{48,69,-72}, -{48,69,-71}, -{48,69,-70}, -{48,69,-69}, -{48,69,-68}, -{48,69,-67}, -{48,69,-66}, -{48,69,-65}, -{48,69,-64}, -{48,69,-63}, -{48,69,-62}, -{48,69,-61}, -{48,69,-60}, -{48,69,-59}, -{48,69,-58}, -{48,69,-57}, -{48,69,-56}, -{48,69,-55}, -{48,69,-54}, -{48,69,-53}, -{48,69,-52}, -{48,69,-51}, -{48,69,-50}, -{48,69,-49}, -{48,69,-48}, -{48,69,-47}, -{48,69,-46}, -{48,69,-45}, -{48,69,-44}, -{48,69,-43}, -{48,69,-42}, -{48,69,-41}, -{48,69,-40}, -{48,69,-39}, -{48,69,-38}, -{48,69,-37}, -{48,69,-36}, -{48,69,-35}, -{48,69,-34}, -{48,69,-33}, -{48,69,-32}, -{48,69,-31}, -{48,69,-30}, -{48,69,-29}, -{48,69,-28}, -{48,69,-27}, -{48,69,-26}, -{48,69,-25}, -{48,69,-24}, -{48,69,-23}, -{48,69,-22}, -{48,69,-21}, -{48,69,-20}, -{48,69,-19}, -{48,69,-18}, -{48,69,-17}, -{48,69,-16}, -{48,69,-15}, -{48,69,-14}, -{48,69,-13}, -{48,69,-12}, -{48,69,-11}, -{48,69,-10}, -{48,69,-9}, -{48,69,-8}, -{48,69,-7}, -{48,69,-6}, -{48,69,-5}, -{48,69,-4}, -{48,69,-3}, -{48,69,-2}, -{48,69,-1}, -{48,69,0}, -{48,69,1}, -{48,69,2}, -{48,69,3}, -{48,69,4}, -{48,69,5}, -{48,69,6}, -{48,69,7}, -{48,69,8}, -{48,69,9}, -{48,69,10}, -{48,69,11}, -{48,69,12}, -{48,69,13}, -{48,69,14}, -{48,69,15}, -{48,69,16}, -{48,69,17}, -{48,69,18}, -{48,69,19}, -{48,69,20}, -{48,69,21}, -{48,69,22}, -{48,69,23}, -{48,69,24}, -{48,69,25}, -{48,69,26}, -{48,69,27}, -{48,69,28}, -{48,69,29}, -{48,69,30}, -{48,69,31}, -{48,69,32}, -{48,69,33}, -{48,69,34}, -{48,69,35}, -{48,69,36}, -{48,69,37}, -{48,69,38}, -{48,69,39}, -{48,69,40}, -{48,69,41}, -{48,69,42}, -{48,69,43}, -{48,69,44}, -{48,69,45}, -{48,69,46}, -{48,69,47}, -{48,69,48}, -{48,69,49}, -{48,69,50}, -{48,69,51}, -{48,69,52}, -{48,69,53}, -{48,69,54}, -{48,69,55}, -{48,69,56}, -{48,69,57}, -{48,69,58}, -{48,69,59}, -{48,69,60}, -{48,69,61}, -{48,70,-81}, -{48,70,-80}, -{48,70,-79}, -{48,70,-78}, -{48,70,-77}, -{48,70,-76}, -{48,70,-75}, -{48,70,-74}, -{48,70,-73}, -{48,70,-72}, -{48,70,-71}, -{48,70,-70}, -{48,70,-69}, -{48,70,-68}, -{48,70,-67}, -{48,70,-66}, -{48,70,-65}, -{48,70,-64}, -{48,70,-63}, -{48,70,-62}, -{48,70,-61}, -{48,70,-60}, -{48,70,-59}, -{48,70,-58}, -{48,70,-57}, -{48,70,-56}, -{48,70,-55}, -{48,70,-54}, -{48,70,-53}, -{48,70,-52}, -{48,70,-51}, -{48,70,-50}, -{48,70,-49}, -{48,70,-48}, -{48,70,-47}, -{48,70,-46}, -{48,70,-45}, -{48,70,-44}, -{48,70,-43}, -{48,70,-42}, -{48,70,-41}, -{48,70,-40}, -{48,70,-39}, -{48,70,-38}, -{48,70,-37}, -{48,70,-36}, -{48,70,-35}, -{48,70,-34}, -{48,70,-33}, -{48,70,-32}, -{48,70,-31}, -{48,70,-30}, -{48,70,-29}, -{48,70,-28}, -{48,70,-27}, -{48,70,-26}, -{48,70,-25}, -{48,70,-24}, -{48,70,-23}, -{48,70,-22}, -{48,70,-21}, -{48,70,-20}, -{48,70,-19}, -{48,70,-18}, -{48,70,-17}, -{48,70,-16}, -{48,70,-15}, -{48,70,-14}, -{48,70,-13}, -{48,70,-12}, -{48,70,-11}, -{48,70,-10}, -{48,70,-9}, -{48,70,-8}, -{48,70,-7}, -{48,70,-6}, -{48,70,-5}, -{48,70,-4}, -{48,70,-3}, -{48,70,-2}, -{48,70,-1}, -{48,70,0}, -{48,70,1}, -{48,70,2}, -{48,70,3}, -{48,70,4}, -{48,70,5}, -{48,70,6}, -{48,70,7}, -{48,70,8}, -{48,70,9}, -{48,70,10}, -{48,70,11}, -{48,70,12}, -{48,70,13}, -{48,70,14}, -{48,70,15}, -{48,70,16}, -{48,70,17}, -{48,70,18}, -{48,70,19}, -{48,70,20}, -{48,70,21}, -{48,70,22}, -{48,70,23}, -{48,70,24}, -{48,70,25}, -{48,70,26}, -{48,70,27}, -{48,70,28}, -{48,70,29}, -{48,70,30}, -{48,70,31}, -{48,70,32}, -{48,70,33}, -{48,70,34}, -{48,70,35}, -{48,70,36}, -{48,70,37}, -{48,70,38}, -{48,70,39}, -{48,70,40}, -{48,70,41}, -{48,70,42}, -{48,70,43}, -{48,70,44}, -{48,70,45}, -{48,70,46}, -{48,70,47}, -{48,70,48}, -{48,70,49}, -{48,70,50}, -{48,70,51}, -{48,70,52}, -{48,70,53}, -{48,70,54}, -{48,70,55}, -{48,70,56}, -{48,70,57}, -{48,70,58}, -{48,70,59}, -{48,70,60}, -{48,70,61}, -{48,71,-81}, -{48,71,-80}, -{48,71,-79}, -{48,71,-78}, -{48,71,-77}, -{48,71,-76}, -{48,71,-75}, -{48,71,-74}, -{48,71,-73}, -{48,71,-72}, -{48,71,-71}, -{48,71,-70}, -{48,71,-69}, -{48,71,-68}, -{48,71,-67}, -{48,71,-66}, -{48,71,-65}, -{48,71,-64}, -{48,71,-63}, -{48,71,-62}, -{48,71,-61}, -{48,71,-60}, -{48,71,-59}, -{48,71,-58}, -{48,71,-57}, -{48,71,-56}, -{48,71,-55}, -{48,71,-54}, -{48,71,-53}, -{48,71,-52}, -{48,71,-51}, -{48,71,-50}, -{48,71,-49}, -{48,71,-48}, -{48,71,-47}, -{48,71,-46}, -{48,71,-45}, -{48,71,-44}, -{48,71,-43}, -{48,71,-42}, -{48,71,-41}, -{48,71,-40}, -{48,71,-39}, -{48,71,-38}, -{48,71,-37}, -{48,71,-36}, -{48,71,-35}, -{48,71,-34}, -{48,71,-33}, -{48,71,-32}, -{48,71,-31}, -{48,71,-30}, -{48,71,-29}, -{48,71,-28}, -{48,71,-27}, -{48,71,-26}, -{48,71,-25}, -{48,71,-24}, -{48,71,-23}, -{48,71,-22}, -{48,71,-21}, -{48,71,-20}, -{48,71,-19}, -{48,71,-18}, -{48,71,-17}, -{48,71,-16}, -{48,71,-15}, -{48,71,-14}, -{48,71,-13}, -{48,71,-12}, -{48,71,-11}, -{48,71,-10}, -{48,71,-9}, -{48,71,-8}, -{48,71,-7}, -{48,71,-6}, -{48,71,-5}, -{48,71,-4}, -{48,71,-3}, -{48,71,-2}, -{48,71,-1}, -{48,71,0}, -{48,71,1}, -{48,71,2}, -{48,71,3}, -{48,71,4}, -{48,71,5}, -{48,71,6}, -{48,71,7}, -{48,71,8}, -{48,71,9}, -{48,71,10}, -{48,71,11}, -{48,71,12}, -{48,71,13}, -{48,71,14}, -{48,71,15}, -{48,71,16}, -{48,71,17}, -{48,71,18}, -{48,71,19}, -{48,71,20}, -{48,71,21}, -{48,71,22}, -{48,71,23}, -{48,71,24}, -{48,71,25}, -{48,71,26}, -{48,71,27}, -{48,71,28}, -{48,71,29}, -{48,71,30}, -{48,71,31}, -{48,71,32}, -{48,71,33}, -{48,71,34}, -{48,71,35}, -{48,71,36}, -{48,71,37}, -{48,71,38}, -{48,71,39}, -{48,71,40}, -{48,71,41}, -{48,71,42}, -{48,71,43}, -{48,71,44}, -{48,71,45}, -{48,71,46}, -{48,71,47}, -{48,71,48}, -{48,71,49}, -{48,71,50}, -{48,71,51}, -{48,71,52}, -{48,71,53}, -{48,71,54}, -{48,71,55}, -{48,71,56}, -{48,71,57}, -{48,71,58}, -{48,71,59}, -{48,71,60}, -{48,71,61}, -{48,72,-81}, -{48,72,-80}, -{48,72,-79}, -{48,72,-78}, -{48,72,-77}, -{48,72,-76}, -{48,72,-75}, -{48,72,-74}, -{48,72,-73}, -{48,72,-72}, -{48,72,-71}, -{48,72,-70}, -{48,72,-69}, -{48,72,-68}, -{48,72,-67}, -{48,72,-66}, -{48,72,-65}, -{48,72,-64}, -{48,72,-63}, -{48,72,-62}, -{48,72,-61}, -{48,72,-60}, -{48,72,-59}, -{48,72,-58}, -{48,72,-57}, -{48,72,-56}, -{48,72,-55}, -{48,72,-54}, -{48,72,-53}, -{48,72,-52}, -{48,72,-51}, -{48,72,-50}, -{48,72,-49}, -{48,72,-48}, -{48,72,-47}, -{48,72,-46}, -{48,72,-45}, -{48,72,-44}, -{48,72,-43}, -{48,72,-42}, -{48,72,-41}, -{48,72,-40}, -{48,72,-39}, -{48,72,-38}, -{48,72,-37}, -{48,72,-36}, -{48,72,-35}, -{48,72,-34}, -{48,72,-33}, -{48,72,-32}, -{48,72,-31}, -{48,72,-30}, -{48,72,-29}, -{48,72,-28}, -{48,72,-27}, -{48,72,-26}, -{48,72,-25}, -{48,72,-24}, -{48,72,-23}, -{48,72,-22}, -{48,72,-21}, -{48,72,-20}, -{48,72,-19}, -{48,72,-18}, -{48,72,-17}, -{48,72,-16}, -{48,72,-15}, -{48,72,-14}, -{48,72,-13}, -{48,72,-12}, -{48,72,-11}, -{48,72,-10}, -{48,72,-9}, -{48,72,-8}, -{48,72,-7}, -{48,72,-6}, -{48,72,-5}, -{48,72,-4}, -{48,72,-3}, -{48,72,-2}, -{48,72,-1}, -{48,72,0}, -{48,72,1}, -{48,72,2}, -{48,72,3}, -{48,72,4}, -{48,72,5}, -{48,72,6}, -{48,72,7}, -{48,72,8}, -{48,72,9}, -{48,72,10}, -{48,72,11}, -{48,72,12}, -{48,72,13}, -{48,72,14}, -{48,72,15}, -{48,72,16}, -{48,72,17}, -{48,72,18}, -{48,72,19}, -{48,72,20}, -{48,72,21}, -{48,72,22}, -{48,72,23}, -{48,72,24}, -{48,72,25}, -{48,72,26}, -{48,72,27}, -{48,72,28}, -{48,72,29}, -{48,72,30}, -{48,72,31}, -{48,72,32}, -{48,72,33}, -{48,72,34}, -{48,72,35}, -{48,72,36}, -{48,72,37}, -{48,72,38}, -{48,72,39}, -{48,72,40}, -{48,72,41}, -{48,72,42}, -{48,72,43}, -{48,72,44}, -{48,72,45}, -{48,72,46}, -{48,72,47}, -{48,72,48}, -{48,72,49}, -{48,72,50}, -{48,72,51}, -{48,72,52}, -{48,72,53}, -{48,72,54}, -{48,72,55}, -{48,72,56}, -{48,72,57}, -{48,72,58}, -{48,72,59}, -{48,72,60}, -{48,72,61}, -{48,72,62}, -{48,73,-81}, -{48,73,-80}, -{48,73,-79}, -{48,73,-78}, -{48,73,-77}, -{48,73,-76}, -{48,73,-75}, -{48,73,-74}, -{48,73,-73}, -{48,73,-72}, -{48,73,-71}, -{48,73,-70}, -{48,73,-69}, -{48,73,-68}, -{48,73,-67}, -{48,73,-66}, -{48,73,-65}, -{48,73,-64}, -{48,73,-63}, -{48,73,-62}, -{48,73,-61}, -{48,73,-60}, -{48,73,-59}, -{48,73,-58}, -{48,73,-57}, -{48,73,-56}, -{48,73,-55}, -{48,73,-54}, -{48,73,-53}, -{48,73,-52}, -{48,73,-51}, -{48,73,-50}, -{48,73,-49}, -{48,73,-48}, -{48,73,-47}, -{48,73,-46}, -{48,73,-45}, -{48,73,-44}, -{48,73,-43}, -{48,73,-42}, -{48,73,-41}, -{48,73,-40}, -{48,73,-39}, -{48,73,-38}, -{48,73,-37}, -{48,73,-36}, -{48,73,-35}, -{48,73,-34}, -{48,73,-33}, -{48,73,-32}, -{48,73,-31}, -{48,73,-30}, -{48,73,-29}, -{48,73,-28}, -{48,73,-27}, -{48,73,-26}, -{48,73,-25}, -{48,73,-24}, -{48,73,-23}, -{48,73,-22}, -{48,73,-21}, -{48,73,-20}, -{48,73,-19}, -{48,73,-18}, -{48,73,-17}, -{48,73,-16}, -{48,73,-15}, -{48,73,-14}, -{48,73,-13}, -{48,73,-12}, -{48,73,-11}, -{48,73,-10}, -{48,73,-9}, -{48,73,-8}, -{48,73,-7}, -{48,73,-6}, -{48,73,-5}, -{48,73,-4}, -{48,73,-3}, -{48,73,-2}, -{48,73,-1}, -{48,73,0}, -{48,73,1}, -{48,73,2}, -{48,73,3}, -{48,73,4}, -{48,73,5}, -{48,73,6}, -{48,73,7}, -{48,73,8}, -{48,73,9}, -{48,73,10}, -{48,73,11}, -{48,73,12}, -{48,73,13}, -{48,73,14}, -{48,73,15}, -{48,73,16}, -{48,73,17}, -{48,73,18}, -{48,73,19}, -{48,73,20}, -{48,73,21}, -{48,73,22}, -{48,73,23}, -{48,73,24}, -{48,73,25}, -{48,73,26}, -{48,73,27}, -{48,73,28}, -{48,73,29}, -{48,73,30}, -{48,73,31}, -{48,73,32}, -{48,73,33}, -{48,73,34}, -{48,73,35}, -{48,73,36}, -{48,73,37}, -{48,73,38}, -{48,73,39}, -{48,73,40}, -{48,73,41}, -{48,73,42}, -{48,73,43}, -{48,73,44}, -{48,73,45}, -{48,73,46}, -{48,73,47}, -{48,73,48}, -{48,73,49}, -{48,73,50}, -{48,73,51}, -{48,73,52}, -{48,73,53}, -{48,73,54}, -{48,73,55}, -{48,73,56}, -{48,73,57}, -{48,73,58}, -{48,73,59}, -{48,73,60}, -{48,73,61}, -{48,73,62}, -{48,74,-81}, -{48,74,-80}, -{48,74,-79}, -{48,74,-78}, -{48,74,-77}, -{48,74,-76}, -{48,74,-75}, -{48,74,-74}, -{48,74,-73}, -{48,74,-72}, -{48,74,-71}, -{48,74,-70}, -{48,74,-69}, -{48,74,-68}, -{48,74,-67}, -{48,74,-66}, -{48,74,-65}, -{48,74,-64}, -{48,74,-63}, -{48,74,-62}, -{48,74,-61}, -{48,74,-60}, -{48,74,-59}, -{48,74,-58}, -{48,74,-57}, -{48,74,-56}, -{48,74,-55}, -{48,74,-54}, -{48,74,-53}, -{48,74,-52}, -{48,74,-51}, -{48,74,-50}, -{48,74,-49}, -{48,74,-48}, -{48,74,-47}, -{48,74,-46}, -{48,74,-45}, -{48,74,-44}, -{48,74,-43}, -{48,74,-42}, -{48,74,-41}, -{48,74,-40}, -{48,74,-39}, -{48,74,-38}, -{48,74,-37}, -{48,74,-36}, -{48,74,-35}, -{48,74,-34}, -{48,74,-33}, -{48,74,-32}, -{48,74,-31}, -{48,74,-30}, -{48,74,-29}, -{48,74,-28}, -{48,74,-27}, -{48,74,-26}, -{48,74,-25}, -{48,74,-24}, -{48,74,-23}, -{48,74,-22}, -{48,74,-21}, -{48,74,-20}, -{48,74,-19}, -{48,74,-18}, -{48,74,-17}, -{48,74,-16}, -{48,74,-15}, -{48,74,-14}, -{48,74,-13}, -{48,74,-12}, -{48,74,-11}, -{48,74,-10}, -{48,74,-9}, -{48,74,-8}, -{48,74,-7}, -{48,74,-6}, -{48,74,-5}, -{48,74,-4}, -{48,74,-3}, -{48,74,-2}, -{48,74,-1}, -{48,74,0}, -{48,74,1}, -{48,74,2}, -{48,74,3}, -{48,74,4}, -{48,74,5}, -{48,74,6}, -{48,74,7}, -{48,74,8}, -{48,74,9}, -{48,74,10}, -{48,74,11}, -{48,74,12}, -{48,74,13}, -{48,74,14}, -{48,74,15}, -{48,74,16}, -{48,74,17}, -{48,74,18}, -{48,74,19}, -{48,74,20}, -{48,74,21}, -{48,74,22}, -{48,74,23}, -{48,74,24}, -{48,74,25}, -{48,74,26}, -{48,74,27}, -{48,74,28}, -{48,74,29}, -{48,74,30}, -{48,74,31}, -{48,74,32}, -{48,74,33}, -{48,74,34}, -{48,74,35}, -{48,74,36}, -{48,74,37}, -{48,74,38}, -{48,74,39}, -{48,74,40}, -{48,74,41}, -{48,74,42}, -{48,74,43}, -{48,74,44}, -{48,74,45}, -{48,74,46}, -{48,74,47}, -{48,74,48}, -{48,74,49}, -{48,74,50}, -{48,74,51}, -{48,74,52}, -{48,74,53}, -{48,74,54}, -{48,74,55}, -{48,74,56}, -{48,74,57}, -{48,74,58}, -{48,74,59}, -{48,74,60}, -{48,74,61}, -{48,74,62}, -{48,75,-81}, -{48,75,-80}, -{48,75,-79}, -{48,75,-78}, -{48,75,-77}, -{48,75,-76}, -{48,75,-75}, -{48,75,-74}, -{48,75,-73}, -{48,75,-72}, -{48,75,-71}, -{48,75,-70}, -{48,75,-69}, -{48,75,-68}, -{48,75,-67}, -{48,75,-66}, -{48,75,-65}, -{48,75,-64}, -{48,75,-63}, -{48,75,-62}, -{48,75,-61}, -{48,75,-60}, -{48,75,-59}, -{48,75,-58}, -{48,75,-57}, -{48,75,-56}, -{48,75,-55}, -{48,75,-54}, -{48,75,-53}, -{48,75,-52}, -{48,75,-51}, -{48,75,-50}, -{48,75,-49}, -{48,75,-48}, -{48,75,-47}, -{48,75,-46}, -{48,75,-45}, -{48,75,-44}, -{48,75,-43}, -{48,75,-42}, -{48,75,-41}, -{48,75,-40}, -{48,75,-39}, -{48,75,-38}, -{48,75,-37}, -{48,75,-36}, -{48,75,-35}, -{48,75,-34}, -{48,75,-33}, -{48,75,-32}, -{48,75,-31}, -{48,75,-30}, -{48,75,-29}, -{48,75,-28}, -{48,75,-27}, -{48,75,-26}, -{48,75,-25}, -{48,75,-24}, -{48,75,-23}, -{48,75,-22}, -{48,75,-21}, -{48,75,-20}, -{48,75,-19}, -{48,75,-18}, -{48,75,-17}, -{48,75,-16}, -{48,75,-15}, -{48,75,-14}, -{48,75,-13}, -{48,75,-12}, -{48,75,-11}, -{48,75,-10}, -{48,75,-9}, -{48,75,-8}, -{48,75,-7}, -{48,75,-6}, -{48,75,-5}, -{48,75,-4}, -{48,75,-3}, -{48,75,-2}, -{48,75,-1}, -{48,75,0}, -{48,75,1}, -{48,75,2}, -{48,75,3}, -{48,75,4}, -{48,75,5}, -{48,75,6}, -{48,75,7}, -{48,75,8}, -{48,75,9}, -{48,75,10}, -{48,75,11}, -{48,75,12}, -{48,75,13}, -{48,75,14}, -{48,75,15}, -{48,75,16}, -{48,75,17}, -{48,75,18}, -{48,75,19}, -{48,75,20}, -{48,75,21}, -{48,75,22}, -{48,75,23}, -{48,75,24}, -{48,75,25}, -{48,75,26}, -{48,75,27}, -{48,75,28}, -{48,75,29}, -{48,75,30}, -{48,75,31}, -{48,76,-81}, -{48,76,-80}, -{48,76,-79}, -{48,76,-78}, -{48,76,-77}, -{48,76,-76}, -{48,76,-75}, -{48,76,-74}, -{48,76,-73}, -{48,76,-72}, -{48,76,-71}, -{48,76,-70}, -{48,76,-69}, -{48,76,-68}, -{48,76,-67}, -{48,76,-66}, -{48,76,-65}, -{48,76,-64}, -{48,76,-63}, -{48,76,-62}, -{48,76,-61}, -{48,76,-60}, -{48,76,-59}, -{48,76,-58}, -{48,76,-57}, -{48,76,-56}, -{48,76,-55}, -{48,76,-54}, -{48,76,-53}, -{48,76,-52}, -{48,76,-51}, -{48,76,-50}, -{48,76,-49}, -{48,76,-48}, -{48,76,-47}, -{48,76,-46}, -{48,76,-45}, -{48,76,-44}, -{48,76,-43}, -{48,76,-42}, -{48,76,-41}, -{48,76,-40}, -{48,76,-39}, -{48,76,-38}, -{48,76,-37}, -{48,76,-36}, -{48,76,-35}, -{48,76,-34}, -{48,76,-33}, -{48,76,-32}, -{48,76,-31}, -{48,76,-30}, -{48,76,-29}, -{48,76,-28}, -{48,76,-27}, -{48,76,-26}, -{48,76,-25}, -{48,76,-24}, -{48,76,-23}, -{48,76,-22}, -{48,76,-21}, -{48,76,-20}, -{48,76,-19}, -{48,76,-18}, -{48,76,-17}, -{48,76,-16}, -{48,76,-15}, -{48,76,-14}, -{48,76,-13}, -{48,76,-12}, -{48,76,-11}, -{48,76,-10}, -{48,76,-9}, -{48,76,-8}, -{48,76,-7}, -{48,76,-6}, -{48,76,-5}, -{48,76,-4}, -{48,76,-3}, -{48,76,-2}, -{48,76,-1}, -{48,76,0}, -{48,76,1}, -{48,76,2}, -{48,76,3}, -{48,76,4}, -{48,76,5}, -{48,76,6}, -{48,76,7}, -{48,76,8}, -{48,76,9}, -{48,76,10}, -{48,76,11}, -{48,77,-81}, -{48,77,-80}, -{48,77,-79}, -{48,77,-78}, -{48,77,-77}, -{48,77,-76}, -{48,77,-75}, -{48,77,-74}, -{48,77,-73}, -{48,77,-72}, -{48,77,-71}, -{48,77,-70}, -{48,77,-69}, -{48,77,-68}, -{48,77,-67}, -{48,77,-66}, -{48,77,-65}, -{48,77,-64}, -{48,77,-63}, -{48,77,-62}, -{48,77,-61}, -{48,77,-60}, -{48,77,-59}, -{48,77,-58}, -{48,77,-57}, -{48,77,-56}, -{48,77,-55}, -{48,77,-54}, -{48,77,-53}, -{48,77,-52}, -{48,77,-51}, -{48,77,-50}, -{48,77,-49}, -{48,77,-48}, -{48,77,-47}, -{48,77,-46}, -{48,77,-45}, -{48,77,-44}, -{48,77,-43}, -{48,77,-42}, -{48,77,-41}, -{48,77,-40}, -{48,77,-39}, -{48,77,-38}, -{48,77,-37}, -{48,77,-36}, -{48,77,-35}, -{48,77,-34}, -{48,77,-33}, -{48,77,-32}, -{48,77,-31}, -{48,77,-30}, -{48,77,-29}, -{48,77,-28}, -{48,77,-27}, -{48,77,-26}, -{48,77,-25}, -{48,77,-24}, -{48,77,-23}, -{48,77,-22}, -{48,77,-21}, -{48,77,-20}, -{48,77,-19}, -{48,77,-18}, -{48,77,-17}, -{48,77,-16}, -{48,77,-15}, -{48,77,-14}, -{48,77,-13}, -{48,77,-12}, -{48,77,-11}, -{48,77,-10}, -{48,77,-9}, -{48,77,-8}, -{48,77,-7}, -{48,77,-6}, -{48,77,-5}, -{48,77,-4}, -{48,78,-81}, -{48,78,-80}, -{48,78,-79}, -{48,78,-78}, -{48,78,-77}, -{48,78,-76}, -{48,78,-75}, -{48,78,-74}, -{48,78,-73}, -{48,78,-72}, -{48,78,-71}, -{48,78,-70}, -{48,78,-69}, -{48,78,-68}, -{48,78,-67}, -{48,78,-66}, -{48,78,-65}, -{48,78,-64}, -{48,78,-63}, -{48,78,-62}, -{48,78,-61}, -{48,78,-60}, -{48,78,-59}, -{48,78,-58}, -{48,78,-57}, -{48,78,-56}, -{48,78,-55}, -{48,78,-54}, -{48,78,-53}, -{48,78,-52}, -{48,78,-51}, -{48,78,-50}, -{48,78,-49}, -{48,78,-48}, -{48,78,-47}, -{48,78,-46}, -{48,78,-45}, -{48,78,-44}, -{48,78,-43}, -{48,78,-42}, -{48,78,-41}, -{48,78,-40}, -{48,78,-39}, -{48,78,-38}, -{48,78,-37}, -{48,78,-36}, -{48,78,-35}, -{48,78,-34}, -{48,78,-33}, -{48,78,-32}, -{48,78,-31}, -{48,78,-30}, -{48,78,-29}, -{48,78,-28}, -{48,78,-27}, -{48,78,-26}, -{48,78,-25}, -{48,78,-24}, -{48,78,-23}, -{48,78,-22}, -{48,78,-21}, -{48,78,-20}, -{48,78,-19}, -{48,78,-18}, -{48,78,-17}, -{48,78,-16}, -{48,78,-15}, -{48,79,-81}, -{48,79,-80}, -{48,79,-79}, -{48,79,-78}, -{48,79,-77}, -{48,79,-76}, -{48,79,-75}, -{48,79,-74}, -{48,79,-73}, -{48,79,-72}, -{48,79,-71}, -{48,79,-70}, -{48,79,-69}, -{48,79,-68}, -{48,79,-67}, -{48,79,-66}, -{48,79,-65}, -{48,79,-64}, -{48,79,-63}, -{48,79,-62}, -{48,79,-61}, -{48,79,-60}, -{48,79,-59}, -{48,79,-58}, -{48,79,-57}, -{48,79,-56}, -{48,79,-55}, -{48,79,-54}, -{48,79,-53}, -{48,79,-52}, -{48,79,-51}, -{48,79,-50}, -{48,79,-49}, -{48,79,-48}, -{48,79,-47}, -{48,79,-46}, -{48,79,-45}, -{48,79,-44}, -{48,79,-43}, -{48,79,-42}, -{48,79,-41}, -{48,79,-40}, -{48,79,-39}, -{48,79,-38}, -{48,79,-37}, -{48,79,-36}, -{48,79,-35}, -{48,79,-34}, -{48,79,-33}, -{48,79,-32}, -{48,79,-31}, -{48,79,-30}, -{48,79,-29}, -{48,79,-28}, -{48,79,-27}, -{48,79,-26}, -{48,79,-25}, -{48,80,-81}, -{48,80,-80}, -{48,80,-79}, -{48,80,-78}, -{48,80,-77}, -{48,80,-76}, -{48,80,-75}, -{48,80,-74}, -{48,80,-73}, -{48,80,-72}, -{48,80,-71}, -{48,80,-70}, -{48,80,-69}, -{48,80,-68}, -{48,80,-67}, -{48,80,-66}, -{48,80,-65}, -{48,80,-64}, -{48,80,-63}, -{48,80,-62}, -{48,80,-61}, -{48,80,-60}, -{48,80,-59}, -{48,80,-58}, -{48,80,-57}, -{48,80,-56}, -{48,80,-55}, -{48,80,-54}, -{48,80,-53}, -{48,80,-52}, -{48,80,-51}, -{48,80,-50}, -{48,80,-49}, -{48,80,-48}, -{48,80,-47}, -{48,80,-46}, -{48,80,-45}, -{48,80,-44}, -{48,80,-43}, -{48,80,-42}, -{48,80,-41}, -{48,80,-40}, -{48,80,-39}, -{48,80,-38}, -{48,80,-37}, -{48,80,-36}, -{48,80,-35}, -{48,80,-34}, -{48,80,-33}, -{48,81,-81}, -{48,81,-80}, -{48,81,-79}, -{48,81,-78}, -{48,81,-77}, -{48,81,-76}, -{48,81,-75}, -{48,81,-74}, -{48,81,-73}, -{48,81,-72}, -{48,81,-71}, -{48,81,-70}, -{48,81,-69}, -{48,81,-68}, -{48,81,-67}, -{48,81,-66}, -{48,81,-65}, -{48,81,-64}, -{48,81,-63}, -{48,81,-62}, -{48,81,-61}, -{48,81,-60}, -{48,81,-59}, -{48,81,-58}, -{48,81,-57}, -{48,81,-56}, -{48,81,-55}, -{48,81,-54}, -{48,81,-53}, -{48,81,-52}, -{48,81,-51}, -{48,81,-50}, -{48,81,-49}, -{48,81,-48}, -{48,81,-47}, -{48,81,-46}, -{48,81,-45}, -{48,81,-44}, -{48,81,-43}, -{48,81,-42}, -{48,81,-41}, -{48,82,-81}, -{48,82,-80}, -{48,82,-79}, -{48,82,-78}, -{48,82,-77}, -{48,82,-76}, -{48,82,-75}, -{48,82,-74}, -{48,82,-73}, -{48,82,-72}, -{48,82,-71}, -{48,82,-70}, -{48,82,-69}, -{48,82,-68}, -{48,82,-67}, -{48,82,-66}, -{48,82,-65}, -{48,82,-64}, -{48,82,-63}, -{48,82,-62}, -{48,82,-61}, -{48,82,-60}, -{48,82,-59}, -{48,82,-58}, -{48,82,-57}, -{48,82,-56}, -{48,82,-55}, -{48,82,-54}, -{48,82,-53}, -{48,82,-52}, -{48,82,-51}, -{48,82,-50}, -{48,82,-49}, -{48,82,-48}, -{48,83,-81}, -{48,83,-80}, -{48,83,-79}, -{48,83,-78}, -{48,83,-77}, -{48,83,-76}, -{48,83,-75}, -{48,83,-74}, -{48,83,-73}, -{48,83,-72}, -{48,83,-71}, -{48,83,-70}, -{48,83,-69}, -{48,83,-68}, -{48,83,-67}, -{48,83,-66}, -{48,83,-65}, -{48,83,-64}, -{48,83,-63}, -{48,83,-62}, -{48,83,-61}, -{48,83,-60}, -{48,83,-59}, -{48,83,-58}, -{48,83,-57}, -{48,83,-56}, -{48,83,-55}, -{48,83,-54}, -{48,84,-81}, -{48,84,-80}, -{48,84,-79}, -{48,84,-78}, -{48,84,-77}, -{48,84,-76}, -{48,84,-75}, -{48,84,-74}, -{48,84,-73}, -{48,84,-72}, -{48,84,-71}, -{48,84,-70}, -{48,84,-69}, -{48,84,-68}, -{48,84,-67}, -{48,84,-66}, -{48,84,-65}, -{48,84,-64}, -{48,84,-63}, -{48,84,-62}, -{48,84,-61}, -{48,84,-60}, -{48,85,-81}, -{48,85,-80}, -{48,85,-79}, -{48,85,-78}, -{48,85,-77}, -{48,85,-76}, -{48,85,-75}, -{48,85,-74}, -{48,85,-73}, -{48,85,-72}, -{48,85,-71}, -{48,85,-70}, -{48,85,-69}, -{48,85,-68}, -{48,85,-67}, -{48,85,-66}, -{48,86,-81}, -{48,86,-80}, -{48,86,-79}, -{48,86,-78}, -{48,86,-77}, -{48,86,-76}, -{48,86,-75}, -{48,86,-74}, -{48,86,-73}, -{48,86,-72}, -{48,86,-71}, -{48,87,-81}, -{48,87,-80}, -{48,87,-79}, -{48,87,-78}, -{48,87,-77}, -{48,88,-81}, -{49,-54,52}, -{49,-53,47}, -{49,-53,48}, -{49,-53,49}, -{49,-53,50}, -{49,-53,51}, -{49,-53,52}, -{49,-52,43}, -{49,-52,44}, -{49,-52,45}, -{49,-52,46}, -{49,-52,47}, -{49,-52,48}, -{49,-52,49}, -{49,-52,50}, -{49,-52,51}, -{49,-52,52}, -{49,-51,39}, -{49,-51,40}, -{49,-51,41}, -{49,-51,42}, -{49,-51,43}, -{49,-51,44}, -{49,-51,45}, -{49,-51,46}, -{49,-51,47}, -{49,-51,48}, -{49,-51,49}, -{49,-51,50}, -{49,-51,51}, -{49,-51,52}, -{49,-50,36}, -{49,-50,37}, -{49,-50,38}, -{49,-50,39}, -{49,-50,40}, -{49,-50,41}, -{49,-50,42}, -{49,-50,43}, -{49,-50,44}, -{49,-50,45}, -{49,-50,46}, -{49,-50,47}, -{49,-50,48}, -{49,-50,49}, -{49,-50,50}, -{49,-50,51}, -{49,-50,52}, -{49,-49,33}, -{49,-49,34}, -{49,-49,35}, -{49,-49,36}, -{49,-49,37}, -{49,-49,38}, -{49,-49,39}, -{49,-49,40}, -{49,-49,41}, -{49,-49,42}, -{49,-49,43}, -{49,-49,44}, -{49,-49,45}, -{49,-49,46}, -{49,-49,47}, -{49,-49,48}, -{49,-49,49}, -{49,-49,50}, -{49,-49,51}, -{49,-49,52}, -{49,-48,30}, -{49,-48,31}, -{49,-48,32}, -{49,-48,33}, -{49,-48,34}, -{49,-48,35}, -{49,-48,36}, -{49,-48,37}, -{49,-48,38}, -{49,-48,39}, -{49,-48,40}, -{49,-48,41}, -{49,-48,42}, -{49,-48,43}, -{49,-48,44}, -{49,-48,45}, -{49,-48,46}, -{49,-48,47}, -{49,-48,48}, -{49,-48,49}, -{49,-48,50}, -{49,-48,51}, -{49,-48,52}, -{49,-47,27}, -{49,-47,28}, -{49,-47,29}, -{49,-47,30}, -{49,-47,31}, -{49,-47,32}, -{49,-47,33}, -{49,-47,34}, -{49,-47,35}, -{49,-47,36}, -{49,-47,37}, -{49,-47,38}, -{49,-47,39}, -{49,-47,40}, -{49,-47,41}, -{49,-47,42}, -{49,-47,43}, -{49,-47,44}, -{49,-47,45}, -{49,-47,46}, -{49,-47,47}, -{49,-47,48}, -{49,-47,49}, -{49,-47,50}, -{49,-47,51}, -{49,-47,52}, -{49,-46,24}, -{49,-46,25}, -{49,-46,26}, -{49,-46,27}, -{49,-46,28}, -{49,-46,29}, -{49,-46,30}, -{49,-46,31}, -{49,-46,32}, -{49,-46,33}, -{49,-46,34}, -{49,-46,35}, -{49,-46,36}, -{49,-46,37}, -{49,-46,38}, -{49,-46,39}, -{49,-46,40}, -{49,-46,41}, -{49,-46,42}, -{49,-46,43}, -{49,-46,44}, -{49,-46,45}, -{49,-46,46}, -{49,-46,47}, -{49,-46,48}, -{49,-46,49}, -{49,-46,50}, -{49,-46,51}, -{49,-46,52}, -{49,-45,22}, -{49,-45,23}, -{49,-45,24}, -{49,-45,25}, -{49,-45,26}, -{49,-45,27}, -{49,-45,28}, -{49,-45,29}, -{49,-45,30}, -{49,-45,31}, -{49,-45,32}, -{49,-45,33}, -{49,-45,34}, -{49,-45,35}, -{49,-45,36}, -{49,-45,37}, -{49,-45,38}, -{49,-45,39}, -{49,-45,40}, -{49,-45,41}, -{49,-45,42}, -{49,-45,43}, -{49,-45,44}, -{49,-45,45}, -{49,-45,46}, -{49,-45,47}, -{49,-45,48}, -{49,-45,49}, -{49,-45,50}, -{49,-45,51}, -{49,-45,52}, -{49,-44,19}, -{49,-44,20}, -{49,-44,21}, -{49,-44,22}, -{49,-44,23}, -{49,-44,24}, -{49,-44,25}, -{49,-44,26}, -{49,-44,27}, -{49,-44,28}, -{49,-44,29}, -{49,-44,30}, -{49,-44,31}, -{49,-44,32}, -{49,-44,33}, -{49,-44,34}, -{49,-44,35}, -{49,-44,36}, -{49,-44,37}, -{49,-44,38}, -{49,-44,39}, -{49,-44,40}, -{49,-44,41}, -{49,-44,42}, -{49,-44,43}, -{49,-44,44}, -{49,-44,45}, -{49,-44,46}, -{49,-44,47}, -{49,-44,48}, -{49,-44,49}, -{49,-44,50}, -{49,-44,51}, -{49,-44,52}, -{49,-43,17}, -{49,-43,18}, -{49,-43,19}, -{49,-43,20}, -{49,-43,21}, -{49,-43,22}, -{49,-43,23}, -{49,-43,24}, -{49,-43,25}, -{49,-43,26}, -{49,-43,27}, -{49,-43,28}, -{49,-43,29}, -{49,-43,30}, -{49,-43,31}, -{49,-43,32}, -{49,-43,33}, -{49,-43,34}, -{49,-43,35}, -{49,-43,36}, -{49,-43,37}, -{49,-43,38}, -{49,-43,39}, -{49,-43,40}, -{49,-43,41}, -{49,-43,42}, -{49,-43,43}, -{49,-43,44}, -{49,-43,45}, -{49,-43,46}, -{49,-43,47}, -{49,-43,48}, -{49,-43,49}, -{49,-43,50}, -{49,-43,51}, -{49,-43,52}, -{49,-42,15}, -{49,-42,16}, -{49,-42,17}, -{49,-42,18}, -{49,-42,19}, -{49,-42,20}, -{49,-42,21}, -{49,-42,22}, -{49,-42,23}, -{49,-42,24}, -{49,-42,25}, -{49,-42,26}, -{49,-42,27}, -{49,-42,28}, -{49,-42,29}, -{49,-42,30}, -{49,-42,31}, -{49,-42,32}, -{49,-42,33}, -{49,-42,34}, -{49,-42,35}, -{49,-42,36}, -{49,-42,37}, -{49,-42,38}, -{49,-42,39}, -{49,-42,40}, -{49,-42,41}, -{49,-42,42}, -{49,-42,43}, -{49,-42,44}, -{49,-42,45}, -{49,-42,46}, -{49,-42,47}, -{49,-42,48}, -{49,-42,49}, -{49,-42,50}, -{49,-42,51}, -{49,-42,52}, -{49,-41,13}, -{49,-41,14}, -{49,-41,15}, -{49,-41,16}, -{49,-41,17}, -{49,-41,18}, -{49,-41,19}, -{49,-41,20}, -{49,-41,21}, -{49,-41,22}, -{49,-41,23}, -{49,-41,24}, -{49,-41,25}, -{49,-41,26}, -{49,-41,27}, -{49,-41,28}, -{49,-41,29}, -{49,-41,30}, -{49,-41,31}, -{49,-41,32}, -{49,-41,33}, -{49,-41,34}, -{49,-41,35}, -{49,-41,36}, -{49,-41,37}, -{49,-41,38}, -{49,-41,39}, -{49,-41,40}, -{49,-41,41}, -{49,-41,42}, -{49,-41,43}, -{49,-41,44}, -{49,-41,45}, -{49,-41,46}, -{49,-41,47}, -{49,-41,48}, -{49,-41,49}, -{49,-41,50}, -{49,-41,51}, -{49,-41,52}, -{49,-40,11}, -{49,-40,12}, -{49,-40,13}, -{49,-40,14}, -{49,-40,15}, -{49,-40,16}, -{49,-40,17}, -{49,-40,18}, -{49,-40,19}, -{49,-40,20}, -{49,-40,21}, -{49,-40,22}, -{49,-40,23}, -{49,-40,24}, -{49,-40,25}, -{49,-40,26}, -{49,-40,27}, -{49,-40,28}, -{49,-40,29}, -{49,-40,30}, -{49,-40,31}, -{49,-40,32}, -{49,-40,33}, -{49,-40,34}, -{49,-40,35}, -{49,-40,36}, -{49,-40,37}, -{49,-40,38}, -{49,-40,39}, -{49,-40,40}, -{49,-40,41}, -{49,-40,42}, -{49,-40,43}, -{49,-40,44}, -{49,-40,45}, -{49,-40,46}, -{49,-40,47}, -{49,-40,48}, -{49,-40,49}, -{49,-40,50}, -{49,-40,51}, -{49,-40,52}, -{49,-39,9}, -{49,-39,10}, -{49,-39,11}, -{49,-39,12}, -{49,-39,13}, -{49,-39,14}, -{49,-39,15}, -{49,-39,16}, -{49,-39,17}, -{49,-39,18}, -{49,-39,19}, -{49,-39,20}, -{49,-39,21}, -{49,-39,22}, -{49,-39,23}, -{49,-39,24}, -{49,-39,25}, -{49,-39,26}, -{49,-39,27}, -{49,-39,28}, -{49,-39,29}, -{49,-39,30}, -{49,-39,31}, -{49,-39,32}, -{49,-39,33}, -{49,-39,34}, -{49,-39,35}, -{49,-39,36}, -{49,-39,37}, -{49,-39,38}, -{49,-39,39}, -{49,-39,40}, -{49,-39,41}, -{49,-39,42}, -{49,-39,43}, -{49,-39,44}, -{49,-39,45}, -{49,-39,46}, -{49,-39,47}, -{49,-39,48}, -{49,-39,49}, -{49,-39,50}, -{49,-39,51}, -{49,-39,52}, -{49,-38,7}, -{49,-38,8}, -{49,-38,9}, -{49,-38,10}, -{49,-38,11}, -{49,-38,12}, -{49,-38,13}, -{49,-38,14}, -{49,-38,15}, -{49,-38,16}, -{49,-38,17}, -{49,-38,18}, -{49,-38,19}, -{49,-38,20}, -{49,-38,21}, -{49,-38,22}, -{49,-38,23}, -{49,-38,24}, -{49,-38,25}, -{49,-38,26}, -{49,-38,27}, -{49,-38,28}, -{49,-38,29}, -{49,-38,30}, -{49,-38,31}, -{49,-38,32}, -{49,-38,33}, -{49,-38,34}, -{49,-38,35}, -{49,-38,36}, -{49,-38,37}, -{49,-38,38}, -{49,-38,39}, -{49,-38,40}, -{49,-38,41}, -{49,-38,42}, -{49,-38,43}, -{49,-38,44}, -{49,-38,45}, -{49,-38,46}, -{49,-38,47}, -{49,-38,48}, -{49,-38,49}, -{49,-38,50}, -{49,-38,51}, -{49,-38,52}, -{49,-38,53}, -{49,-37,5}, -{49,-37,6}, -{49,-37,7}, -{49,-37,8}, -{49,-37,9}, -{49,-37,10}, -{49,-37,11}, -{49,-37,12}, -{49,-37,13}, -{49,-37,14}, -{49,-37,15}, -{49,-37,16}, -{49,-37,17}, -{49,-37,18}, -{49,-37,19}, -{49,-37,20}, -{49,-37,21}, -{49,-37,22}, -{49,-37,23}, -{49,-37,24}, -{49,-37,25}, -{49,-37,26}, -{49,-37,27}, -{49,-37,28}, -{49,-37,29}, -{49,-37,30}, -{49,-37,31}, -{49,-37,32}, -{49,-37,33}, -{49,-37,34}, -{49,-37,35}, -{49,-37,36}, -{49,-37,37}, -{49,-37,38}, -{49,-37,39}, -{49,-37,40}, -{49,-37,41}, -{49,-37,42}, -{49,-37,43}, -{49,-37,44}, -{49,-37,45}, -{49,-37,46}, -{49,-37,47}, -{49,-37,48}, -{49,-37,49}, -{49,-37,50}, -{49,-37,51}, -{49,-37,52}, -{49,-37,53}, -{49,-36,3}, -{49,-36,4}, -{49,-36,5}, -{49,-36,6}, -{49,-36,7}, -{49,-36,8}, -{49,-36,9}, -{49,-36,10}, -{49,-36,11}, -{49,-36,12}, -{49,-36,13}, -{49,-36,14}, -{49,-36,15}, -{49,-36,16}, -{49,-36,17}, -{49,-36,18}, -{49,-36,19}, -{49,-36,20}, -{49,-36,21}, -{49,-36,22}, -{49,-36,23}, -{49,-36,24}, -{49,-36,25}, -{49,-36,26}, -{49,-36,27}, -{49,-36,28}, -{49,-36,29}, -{49,-36,30}, -{49,-36,31}, -{49,-36,32}, -{49,-36,33}, -{49,-36,34}, -{49,-36,35}, -{49,-36,36}, -{49,-36,37}, -{49,-36,38}, -{49,-36,39}, -{49,-36,40}, -{49,-36,41}, -{49,-36,42}, -{49,-36,43}, -{49,-36,44}, -{49,-36,45}, -{49,-36,46}, -{49,-36,47}, -{49,-36,48}, -{49,-36,49}, -{49,-36,50}, -{49,-36,51}, -{49,-36,52}, -{49,-36,53}, -{49,-35,1}, -{49,-35,2}, -{49,-35,3}, -{49,-35,4}, -{49,-35,5}, -{49,-35,6}, -{49,-35,7}, -{49,-35,8}, -{49,-35,9}, -{49,-35,10}, -{49,-35,11}, -{49,-35,12}, -{49,-35,13}, -{49,-35,14}, -{49,-35,15}, -{49,-35,16}, -{49,-35,17}, -{49,-35,18}, -{49,-35,19}, -{49,-35,20}, -{49,-35,21}, -{49,-35,22}, -{49,-35,23}, -{49,-35,24}, -{49,-35,25}, -{49,-35,26}, -{49,-35,27}, -{49,-35,28}, -{49,-35,29}, -{49,-35,30}, -{49,-35,31}, -{49,-35,32}, -{49,-35,33}, -{49,-35,34}, -{49,-35,35}, -{49,-35,36}, -{49,-35,37}, -{49,-35,38}, -{49,-35,39}, -{49,-35,40}, -{49,-35,41}, -{49,-35,42}, -{49,-35,43}, -{49,-35,44}, -{49,-35,45}, -{49,-35,46}, -{49,-35,47}, -{49,-35,48}, -{49,-35,49}, -{49,-35,50}, -{49,-35,51}, -{49,-35,52}, -{49,-35,53}, -{49,-34,0}, -{49,-34,1}, -{49,-34,2}, -{49,-34,3}, -{49,-34,4}, -{49,-34,5}, -{49,-34,6}, -{49,-34,7}, -{49,-34,8}, -{49,-34,9}, -{49,-34,10}, -{49,-34,11}, -{49,-34,12}, -{49,-34,13}, -{49,-34,14}, -{49,-34,15}, -{49,-34,16}, -{49,-34,17}, -{49,-34,18}, -{49,-34,19}, -{49,-34,20}, -{49,-34,21}, -{49,-34,22}, -{49,-34,23}, -{49,-34,24}, -{49,-34,25}, -{49,-34,26}, -{49,-34,27}, -{49,-34,28}, -{49,-34,29}, -{49,-34,30}, -{49,-34,31}, -{49,-34,32}, -{49,-34,33}, -{49,-34,34}, -{49,-34,35}, -{49,-34,36}, -{49,-34,37}, -{49,-34,38}, -{49,-34,39}, -{49,-34,40}, -{49,-34,41}, -{49,-34,42}, -{49,-34,43}, -{49,-34,44}, -{49,-34,45}, -{49,-34,46}, -{49,-34,47}, -{49,-34,48}, -{49,-34,49}, -{49,-34,50}, -{49,-34,51}, -{49,-34,52}, -{49,-34,53}, -{49,-33,-2}, -{49,-33,-1}, -{49,-33,0}, -{49,-33,1}, -{49,-33,2}, -{49,-33,3}, -{49,-33,4}, -{49,-33,5}, -{49,-33,6}, -{49,-33,7}, -{49,-33,8}, -{49,-33,9}, -{49,-33,10}, -{49,-33,11}, -{49,-33,12}, -{49,-33,13}, -{49,-33,14}, -{49,-33,15}, -{49,-33,16}, -{49,-33,17}, -{49,-33,18}, -{49,-33,19}, -{49,-33,20}, -{49,-33,21}, -{49,-33,22}, -{49,-33,23}, -{49,-33,24}, -{49,-33,25}, -{49,-33,26}, -{49,-33,27}, -{49,-33,28}, -{49,-33,29}, -{49,-33,30}, -{49,-33,31}, -{49,-33,32}, -{49,-33,33}, -{49,-33,34}, -{49,-33,35}, -{49,-33,36}, -{49,-33,37}, -{49,-33,38}, -{49,-33,39}, -{49,-33,40}, -{49,-33,41}, -{49,-33,42}, -{49,-33,43}, -{49,-33,44}, -{49,-33,45}, -{49,-33,46}, -{49,-33,47}, -{49,-33,48}, -{49,-33,49}, -{49,-33,50}, -{49,-33,51}, -{49,-33,52}, -{49,-33,53}, -{49,-32,-4}, -{49,-32,-3}, -{49,-32,-2}, -{49,-32,-1}, -{49,-32,0}, -{49,-32,1}, -{49,-32,2}, -{49,-32,3}, -{49,-32,4}, -{49,-32,5}, -{49,-32,6}, -{49,-32,7}, -{49,-32,8}, -{49,-32,9}, -{49,-32,10}, -{49,-32,11}, -{49,-32,12}, -{49,-32,13}, -{49,-32,14}, -{49,-32,15}, -{49,-32,16}, -{49,-32,17}, -{49,-32,18}, -{49,-32,19}, -{49,-32,20}, -{49,-32,21}, -{49,-32,22}, -{49,-32,23}, -{49,-32,24}, -{49,-32,25}, -{49,-32,26}, -{49,-32,27}, -{49,-32,28}, -{49,-32,29}, -{49,-32,30}, -{49,-32,31}, -{49,-32,32}, -{49,-32,33}, -{49,-32,34}, -{49,-32,35}, -{49,-32,36}, -{49,-32,37}, -{49,-32,38}, -{49,-32,39}, -{49,-32,40}, -{49,-32,41}, -{49,-32,42}, -{49,-32,43}, -{49,-32,44}, -{49,-32,45}, -{49,-32,46}, -{49,-32,47}, -{49,-32,48}, -{49,-32,49}, -{49,-32,50}, -{49,-32,51}, -{49,-32,52}, -{49,-32,53}, -{49,-31,-5}, -{49,-31,-4}, -{49,-31,-3}, -{49,-31,-2}, -{49,-31,-1}, -{49,-31,0}, -{49,-31,1}, -{49,-31,2}, -{49,-31,3}, -{49,-31,4}, -{49,-31,5}, -{49,-31,6}, -{49,-31,7}, -{49,-31,8}, -{49,-31,9}, -{49,-31,10}, -{49,-31,11}, -{49,-31,12}, -{49,-31,13}, -{49,-31,14}, -{49,-31,15}, -{49,-31,16}, -{49,-31,17}, -{49,-31,18}, -{49,-31,19}, -{49,-31,20}, -{49,-31,21}, -{49,-31,22}, -{49,-31,23}, -{49,-31,24}, -{49,-31,25}, -{49,-31,26}, -{49,-31,27}, -{49,-31,28}, -{49,-31,29}, -{49,-31,30}, -{49,-31,31}, -{49,-31,32}, -{49,-31,33}, -{49,-31,34}, -{49,-31,35}, -{49,-31,36}, -{49,-31,37}, -{49,-31,38}, -{49,-31,39}, -{49,-31,40}, -{49,-31,41}, -{49,-31,42}, -{49,-31,43}, -{49,-31,44}, -{49,-31,45}, -{49,-31,46}, -{49,-31,47}, -{49,-31,48}, -{49,-31,49}, -{49,-31,50}, -{49,-31,51}, -{49,-31,52}, -{49,-31,53}, -{49,-30,-7}, -{49,-30,-6}, -{49,-30,-5}, -{49,-30,-4}, -{49,-30,-3}, -{49,-30,-2}, -{49,-30,-1}, -{49,-30,0}, -{49,-30,1}, -{49,-30,2}, -{49,-30,3}, -{49,-30,4}, -{49,-30,5}, -{49,-30,6}, -{49,-30,7}, -{49,-30,8}, -{49,-30,9}, -{49,-30,10}, -{49,-30,11}, -{49,-30,12}, -{49,-30,13}, -{49,-30,14}, -{49,-30,15}, -{49,-30,16}, -{49,-30,17}, -{49,-30,18}, -{49,-30,19}, -{49,-30,20}, -{49,-30,21}, -{49,-30,22}, -{49,-30,23}, -{49,-30,24}, -{49,-30,25}, -{49,-30,26}, -{49,-30,27}, -{49,-30,28}, -{49,-30,29}, -{49,-30,30}, -{49,-30,31}, -{49,-30,32}, -{49,-30,33}, -{49,-30,34}, -{49,-30,35}, -{49,-30,36}, -{49,-30,37}, -{49,-30,38}, -{49,-30,39}, -{49,-30,40}, -{49,-30,41}, -{49,-30,42}, -{49,-30,43}, -{49,-30,44}, -{49,-30,45}, -{49,-30,46}, -{49,-30,47}, -{49,-30,48}, -{49,-30,49}, -{49,-30,50}, -{49,-30,51}, -{49,-30,52}, -{49,-30,53}, -{49,-29,-9}, -{49,-29,-8}, -{49,-29,-7}, -{49,-29,-6}, -{49,-29,-5}, -{49,-29,-4}, -{49,-29,-3}, -{49,-29,-2}, -{49,-29,-1}, -{49,-29,0}, -{49,-29,1}, -{49,-29,2}, -{49,-29,3}, -{49,-29,4}, -{49,-29,5}, -{49,-29,6}, -{49,-29,7}, -{49,-29,8}, -{49,-29,9}, -{49,-29,10}, -{49,-29,11}, -{49,-29,12}, -{49,-29,13}, -{49,-29,14}, -{49,-29,15}, -{49,-29,16}, -{49,-29,17}, -{49,-29,18}, -{49,-29,19}, -{49,-29,20}, -{49,-29,21}, -{49,-29,22}, -{49,-29,23}, -{49,-29,24}, -{49,-29,25}, -{49,-29,26}, -{49,-29,27}, -{49,-29,28}, -{49,-29,29}, -{49,-29,30}, -{49,-29,31}, -{49,-29,32}, -{49,-29,33}, -{49,-29,34}, -{49,-29,35}, -{49,-29,36}, -{49,-29,37}, -{49,-29,38}, -{49,-29,39}, -{49,-29,40}, -{49,-29,41}, -{49,-29,42}, -{49,-29,43}, -{49,-29,44}, -{49,-29,45}, -{49,-29,46}, -{49,-29,47}, -{49,-29,48}, -{49,-29,49}, -{49,-29,50}, -{49,-29,51}, -{49,-29,52}, -{49,-29,53}, -{49,-28,-10}, -{49,-28,-9}, -{49,-28,-8}, -{49,-28,-7}, -{49,-28,-6}, -{49,-28,-5}, -{49,-28,-4}, -{49,-28,-3}, -{49,-28,-2}, -{49,-28,-1}, -{49,-28,0}, -{49,-28,1}, -{49,-28,2}, -{49,-28,3}, -{49,-28,4}, -{49,-28,5}, -{49,-28,6}, -{49,-28,7}, -{49,-28,8}, -{49,-28,9}, -{49,-28,10}, -{49,-28,11}, -{49,-28,12}, -{49,-28,13}, -{49,-28,14}, -{49,-28,15}, -{49,-28,16}, -{49,-28,17}, -{49,-28,18}, -{49,-28,19}, -{49,-28,20}, -{49,-28,21}, -{49,-28,22}, -{49,-28,23}, -{49,-28,24}, -{49,-28,25}, -{49,-28,26}, -{49,-28,27}, -{49,-28,28}, -{49,-28,29}, -{49,-28,30}, -{49,-28,31}, -{49,-28,32}, -{49,-28,33}, -{49,-28,34}, -{49,-28,35}, -{49,-28,36}, -{49,-28,37}, -{49,-28,38}, -{49,-28,39}, -{49,-28,40}, -{49,-28,41}, -{49,-28,42}, -{49,-28,43}, -{49,-28,44}, -{49,-28,45}, -{49,-28,46}, -{49,-28,47}, -{49,-28,48}, -{49,-28,49}, -{49,-28,50}, -{49,-28,51}, -{49,-28,52}, -{49,-28,53}, -{49,-27,-12}, -{49,-27,-11}, -{49,-27,-10}, -{49,-27,-9}, -{49,-27,-8}, -{49,-27,-7}, -{49,-27,-6}, -{49,-27,-5}, -{49,-27,-4}, -{49,-27,-3}, -{49,-27,-2}, -{49,-27,-1}, -{49,-27,0}, -{49,-27,1}, -{49,-27,2}, -{49,-27,3}, -{49,-27,4}, -{49,-27,5}, -{49,-27,6}, -{49,-27,7}, -{49,-27,8}, -{49,-27,9}, -{49,-27,10}, -{49,-27,11}, -{49,-27,12}, -{49,-27,13}, -{49,-27,14}, -{49,-27,15}, -{49,-27,16}, -{49,-27,17}, -{49,-27,18}, -{49,-27,19}, -{49,-27,20}, -{49,-27,21}, -{49,-27,22}, -{49,-27,23}, -{49,-27,24}, -{49,-27,25}, -{49,-27,26}, -{49,-27,27}, -{49,-27,28}, -{49,-27,29}, -{49,-27,30}, -{49,-27,31}, -{49,-27,32}, -{49,-27,33}, -{49,-27,34}, -{49,-27,35}, -{49,-27,36}, -{49,-27,37}, -{49,-27,38}, -{49,-27,39}, -{49,-27,40}, -{49,-27,41}, -{49,-27,42}, -{49,-27,43}, -{49,-27,44}, -{49,-27,45}, -{49,-27,46}, -{49,-27,47}, -{49,-27,48}, -{49,-27,49}, -{49,-27,50}, -{49,-27,51}, -{49,-27,52}, -{49,-27,53}, -{49,-26,-13}, -{49,-26,-12}, -{49,-26,-11}, -{49,-26,-10}, -{49,-26,-9}, -{49,-26,-8}, -{49,-26,-7}, -{49,-26,-6}, -{49,-26,-5}, -{49,-26,-4}, -{49,-26,-3}, -{49,-26,-2}, -{49,-26,-1}, -{49,-26,0}, -{49,-26,1}, -{49,-26,2}, -{49,-26,3}, -{49,-26,4}, -{49,-26,5}, -{49,-26,6}, -{49,-26,7}, -{49,-26,8}, -{49,-26,9}, -{49,-26,10}, -{49,-26,11}, -{49,-26,12}, -{49,-26,13}, -{49,-26,14}, -{49,-26,15}, -{49,-26,16}, -{49,-26,17}, -{49,-26,18}, -{49,-26,19}, -{49,-26,20}, -{49,-26,21}, -{49,-26,22}, -{49,-26,23}, -{49,-26,24}, -{49,-26,25}, -{49,-26,26}, -{49,-26,27}, -{49,-26,28}, -{49,-26,29}, -{49,-26,30}, -{49,-26,31}, -{49,-26,32}, -{49,-26,33}, -{49,-26,34}, -{49,-26,35}, -{49,-26,36}, -{49,-26,37}, -{49,-26,38}, -{49,-26,39}, -{49,-26,40}, -{49,-26,41}, -{49,-26,42}, -{49,-26,43}, -{49,-26,44}, -{49,-26,45}, -{49,-26,46}, -{49,-26,47}, -{49,-26,48}, -{49,-26,49}, -{49,-26,50}, -{49,-26,51}, -{49,-26,52}, -{49,-26,53}, -{49,-25,-15}, -{49,-25,-14}, -{49,-25,-13}, -{49,-25,-12}, -{49,-25,-11}, -{49,-25,-10}, -{49,-25,-9}, -{49,-25,-8}, -{49,-25,-7}, -{49,-25,-6}, -{49,-25,-5}, -{49,-25,-4}, -{49,-25,-3}, -{49,-25,-2}, -{49,-25,-1}, -{49,-25,0}, -{49,-25,1}, -{49,-25,2}, -{49,-25,3}, -{49,-25,4}, -{49,-25,5}, -{49,-25,6}, -{49,-25,7}, -{49,-25,8}, -{49,-25,9}, -{49,-25,10}, -{49,-25,11}, -{49,-25,12}, -{49,-25,13}, -{49,-25,14}, -{49,-25,15}, -{49,-25,16}, -{49,-25,17}, -{49,-25,18}, -{49,-25,19}, -{49,-25,20}, -{49,-25,21}, -{49,-25,22}, -{49,-25,23}, -{49,-25,24}, -{49,-25,25}, -{49,-25,26}, -{49,-25,27}, -{49,-25,28}, -{49,-25,29}, -{49,-25,30}, -{49,-25,31}, -{49,-25,32}, -{49,-25,33}, -{49,-25,34}, -{49,-25,35}, -{49,-25,36}, -{49,-25,37}, -{49,-25,38}, -{49,-25,39}, -{49,-25,40}, -{49,-25,41}, -{49,-25,42}, -{49,-25,43}, -{49,-25,44}, -{49,-25,45}, -{49,-25,46}, -{49,-25,47}, -{49,-25,48}, -{49,-25,49}, -{49,-25,50}, -{49,-25,51}, -{49,-25,52}, -{49,-25,53}, -{49,-24,-16}, -{49,-24,-15}, -{49,-24,-14}, -{49,-24,-13}, -{49,-24,-12}, -{49,-24,-11}, -{49,-24,-10}, -{49,-24,-9}, -{49,-24,-8}, -{49,-24,-7}, -{49,-24,-6}, -{49,-24,-5}, -{49,-24,-4}, -{49,-24,-3}, -{49,-24,-2}, -{49,-24,-1}, -{49,-24,0}, -{49,-24,1}, -{49,-24,2}, -{49,-24,3}, -{49,-24,4}, -{49,-24,5}, -{49,-24,6}, -{49,-24,7}, -{49,-24,8}, -{49,-24,9}, -{49,-24,10}, -{49,-24,11}, -{49,-24,12}, -{49,-24,13}, -{49,-24,14}, -{49,-24,15}, -{49,-24,16}, -{49,-24,17}, -{49,-24,18}, -{49,-24,19}, -{49,-24,20}, -{49,-24,21}, -{49,-24,22}, -{49,-24,23}, -{49,-24,24}, -{49,-24,25}, -{49,-24,26}, -{49,-24,27}, -{49,-24,28}, -{49,-24,29}, -{49,-24,30}, -{49,-24,31}, -{49,-24,32}, -{49,-24,33}, -{49,-24,34}, -{49,-24,35}, -{49,-24,36}, -{49,-24,37}, -{49,-24,38}, -{49,-24,39}, -{49,-24,40}, -{49,-24,41}, -{49,-24,42}, -{49,-24,43}, -{49,-24,44}, -{49,-24,45}, -{49,-24,46}, -{49,-24,47}, -{49,-24,48}, -{49,-24,49}, -{49,-24,50}, -{49,-24,51}, -{49,-24,52}, -{49,-24,53}, -{49,-23,-18}, -{49,-23,-17}, -{49,-23,-16}, -{49,-23,-15}, -{49,-23,-14}, -{49,-23,-13}, -{49,-23,-12}, -{49,-23,-11}, -{49,-23,-10}, -{49,-23,-9}, -{49,-23,-8}, -{49,-23,-7}, -{49,-23,-6}, -{49,-23,-5}, -{49,-23,-4}, -{49,-23,-3}, -{49,-23,-2}, -{49,-23,-1}, -{49,-23,0}, -{49,-23,1}, -{49,-23,2}, -{49,-23,3}, -{49,-23,4}, -{49,-23,5}, -{49,-23,6}, -{49,-23,7}, -{49,-23,8}, -{49,-23,9}, -{49,-23,10}, -{49,-23,11}, -{49,-23,12}, -{49,-23,13}, -{49,-23,14}, -{49,-23,15}, -{49,-23,16}, -{49,-23,17}, -{49,-23,18}, -{49,-23,19}, -{49,-23,20}, -{49,-23,21}, -{49,-23,22}, -{49,-23,23}, -{49,-23,24}, -{49,-23,25}, -{49,-23,26}, -{49,-23,27}, -{49,-23,28}, -{49,-23,29}, -{49,-23,30}, -{49,-23,31}, -{49,-23,32}, -{49,-23,33}, -{49,-23,34}, -{49,-23,35}, -{49,-23,36}, -{49,-23,37}, -{49,-23,38}, -{49,-23,39}, -{49,-23,40}, -{49,-23,41}, -{49,-23,42}, -{49,-23,43}, -{49,-23,44}, -{49,-23,45}, -{49,-23,46}, -{49,-23,47}, -{49,-23,48}, -{49,-23,49}, -{49,-23,50}, -{49,-23,51}, -{49,-23,52}, -{49,-23,53}, -{49,-22,-19}, -{49,-22,-18}, -{49,-22,-17}, -{49,-22,-16}, -{49,-22,-15}, -{49,-22,-14}, -{49,-22,-13}, -{49,-22,-12}, -{49,-22,-11}, -{49,-22,-10}, -{49,-22,-9}, -{49,-22,-8}, -{49,-22,-7}, -{49,-22,-6}, -{49,-22,-5}, -{49,-22,-4}, -{49,-22,-3}, -{49,-22,-2}, -{49,-22,-1}, -{49,-22,0}, -{49,-22,1}, -{49,-22,2}, -{49,-22,3}, -{49,-22,4}, -{49,-22,5}, -{49,-22,6}, -{49,-22,7}, -{49,-22,8}, -{49,-22,9}, -{49,-22,10}, -{49,-22,11}, -{49,-22,12}, -{49,-22,13}, -{49,-22,14}, -{49,-22,15}, -{49,-22,16}, -{49,-22,17}, -{49,-22,18}, -{49,-22,19}, -{49,-22,20}, -{49,-22,21}, -{49,-22,22}, -{49,-22,23}, -{49,-22,24}, -{49,-22,25}, -{49,-22,26}, -{49,-22,27}, -{49,-22,28}, -{49,-22,29}, -{49,-22,30}, -{49,-22,31}, -{49,-22,32}, -{49,-22,33}, -{49,-22,34}, -{49,-22,35}, -{49,-22,36}, -{49,-22,37}, -{49,-22,38}, -{49,-22,39}, -{49,-22,40}, -{49,-22,41}, -{49,-22,42}, -{49,-22,43}, -{49,-22,44}, -{49,-22,45}, -{49,-22,46}, -{49,-22,47}, -{49,-22,48}, -{49,-22,49}, -{49,-22,50}, -{49,-22,51}, -{49,-22,52}, -{49,-22,53}, -{49,-21,-20}, -{49,-21,-19}, -{49,-21,-18}, -{49,-21,-17}, -{49,-21,-16}, -{49,-21,-15}, -{49,-21,-14}, -{49,-21,-13}, -{49,-21,-12}, -{49,-21,-11}, -{49,-21,-10}, -{49,-21,-9}, -{49,-21,-8}, -{49,-21,-7}, -{49,-21,-6}, -{49,-21,-5}, -{49,-21,-4}, -{49,-21,-3}, -{49,-21,-2}, -{49,-21,-1}, -{49,-21,0}, -{49,-21,1}, -{49,-21,2}, -{49,-21,3}, -{49,-21,4}, -{49,-21,5}, -{49,-21,6}, -{49,-21,7}, -{49,-21,8}, -{49,-21,9}, -{49,-21,10}, -{49,-21,11}, -{49,-21,12}, -{49,-21,13}, -{49,-21,14}, -{49,-21,15}, -{49,-21,16}, -{49,-21,17}, -{49,-21,18}, -{49,-21,19}, -{49,-21,20}, -{49,-21,21}, -{49,-21,22}, -{49,-21,23}, -{49,-21,24}, -{49,-21,25}, -{49,-21,26}, -{49,-21,27}, -{49,-21,28}, -{49,-21,29}, -{49,-21,30}, -{49,-21,31}, -{49,-21,32}, -{49,-21,33}, -{49,-21,34}, -{49,-21,35}, -{49,-21,36}, -{49,-21,37}, -{49,-21,38}, -{49,-21,39}, -{49,-21,40}, -{49,-21,41}, -{49,-21,42}, -{49,-21,43}, -{49,-21,44}, -{49,-21,45}, -{49,-21,46}, -{49,-21,47}, -{49,-21,48}, -{49,-21,49}, -{49,-21,50}, -{49,-21,51}, -{49,-21,52}, -{49,-21,53}, -{49,-20,-22}, -{49,-20,-21}, -{49,-20,-20}, -{49,-20,-19}, -{49,-20,-18}, -{49,-20,-17}, -{49,-20,-16}, -{49,-20,-15}, -{49,-20,-14}, -{49,-20,-13}, -{49,-20,-12}, -{49,-20,-11}, -{49,-20,-10}, -{49,-20,-9}, -{49,-20,-8}, -{49,-20,-7}, -{49,-20,-6}, -{49,-20,-5}, -{49,-20,-4}, -{49,-20,-3}, -{49,-20,-2}, -{49,-20,-1}, -{49,-20,0}, -{49,-20,1}, -{49,-20,2}, -{49,-20,3}, -{49,-20,4}, -{49,-20,5}, -{49,-20,6}, -{49,-20,7}, -{49,-20,8}, -{49,-20,9}, -{49,-20,10}, -{49,-20,11}, -{49,-20,12}, -{49,-20,13}, -{49,-20,14}, -{49,-20,15}, -{49,-20,16}, -{49,-20,17}, -{49,-20,18}, -{49,-20,19}, -{49,-20,20}, -{49,-20,21}, -{49,-20,22}, -{49,-20,23}, -{49,-20,24}, -{49,-20,25}, -{49,-20,26}, -{49,-20,27}, -{49,-20,28}, -{49,-20,29}, -{49,-20,30}, -{49,-20,31}, -{49,-20,32}, -{49,-20,33}, -{49,-20,34}, -{49,-20,35}, -{49,-20,36}, -{49,-20,37}, -{49,-20,38}, -{49,-20,39}, -{49,-20,40}, -{49,-20,41}, -{49,-20,42}, -{49,-20,43}, -{49,-20,44}, -{49,-20,45}, -{49,-20,46}, -{49,-20,47}, -{49,-20,48}, -{49,-20,49}, -{49,-20,50}, -{49,-20,51}, -{49,-20,52}, -{49,-20,53}, -{49,-19,-23}, -{49,-19,-22}, -{49,-19,-21}, -{49,-19,-20}, -{49,-19,-19}, -{49,-19,-18}, -{49,-19,-17}, -{49,-19,-16}, -{49,-19,-15}, -{49,-19,-14}, -{49,-19,-13}, -{49,-19,-12}, -{49,-19,-11}, -{49,-19,-10}, -{49,-19,-9}, -{49,-19,-8}, -{49,-19,-7}, -{49,-19,-6}, -{49,-19,-5}, -{49,-19,-4}, -{49,-19,-3}, -{49,-19,-2}, -{49,-19,-1}, -{49,-19,0}, -{49,-19,1}, -{49,-19,2}, -{49,-19,3}, -{49,-19,4}, -{49,-19,5}, -{49,-19,6}, -{49,-19,7}, -{49,-19,8}, -{49,-19,9}, -{49,-19,10}, -{49,-19,11}, -{49,-19,12}, -{49,-19,13}, -{49,-19,14}, -{49,-19,15}, -{49,-19,16}, -{49,-19,17}, -{49,-19,18}, -{49,-19,19}, -{49,-19,20}, -{49,-19,21}, -{49,-19,22}, -{49,-19,23}, -{49,-19,24}, -{49,-19,25}, -{49,-19,26}, -{49,-19,27}, -{49,-19,28}, -{49,-19,29}, -{49,-19,30}, -{49,-19,31}, -{49,-19,32}, -{49,-19,33}, -{49,-19,34}, -{49,-19,35}, -{49,-19,36}, -{49,-19,37}, -{49,-19,38}, -{49,-19,39}, -{49,-19,40}, -{49,-19,41}, -{49,-19,42}, -{49,-19,43}, -{49,-19,44}, -{49,-19,45}, -{49,-19,46}, -{49,-19,47}, -{49,-19,48}, -{49,-19,49}, -{49,-19,50}, -{49,-19,51}, -{49,-19,52}, -{49,-19,53}, -{49,-19,54}, -{49,-18,-24}, -{49,-18,-23}, -{49,-18,-22}, -{49,-18,-21}, -{49,-18,-20}, -{49,-18,-19}, -{49,-18,-18}, -{49,-18,-17}, -{49,-18,-16}, -{49,-18,-15}, -{49,-18,-14}, -{49,-18,-13}, -{49,-18,-12}, -{49,-18,-11}, -{49,-18,-10}, -{49,-18,-9}, -{49,-18,-8}, -{49,-18,-7}, -{49,-18,-6}, -{49,-18,-5}, -{49,-18,-4}, -{49,-18,-3}, -{49,-18,-2}, -{49,-18,-1}, -{49,-18,0}, -{49,-18,1}, -{49,-18,2}, -{49,-18,3}, -{49,-18,4}, -{49,-18,5}, -{49,-18,6}, -{49,-18,7}, -{49,-18,8}, -{49,-18,9}, -{49,-18,10}, -{49,-18,11}, -{49,-18,12}, -{49,-18,13}, -{49,-18,14}, -{49,-18,15}, -{49,-18,16}, -{49,-18,17}, -{49,-18,18}, -{49,-18,19}, -{49,-18,20}, -{49,-18,21}, -{49,-18,22}, -{49,-18,23}, -{49,-18,24}, -{49,-18,25}, -{49,-18,26}, -{49,-18,27}, -{49,-18,28}, -{49,-18,29}, -{49,-18,30}, -{49,-18,31}, -{49,-18,32}, -{49,-18,33}, -{49,-18,34}, -{49,-18,35}, -{49,-18,36}, -{49,-18,37}, -{49,-18,38}, -{49,-18,39}, -{49,-18,40}, -{49,-18,41}, -{49,-18,42}, -{49,-18,43}, -{49,-18,44}, -{49,-18,45}, -{49,-18,46}, -{49,-18,47}, -{49,-18,48}, -{49,-18,49}, -{49,-18,50}, -{49,-18,51}, -{49,-18,52}, -{49,-18,53}, -{49,-18,54}, -{49,-17,-26}, -{49,-17,-25}, -{49,-17,-24}, -{49,-17,-23}, -{49,-17,-22}, -{49,-17,-21}, -{49,-17,-20}, -{49,-17,-19}, -{49,-17,-18}, -{49,-17,-17}, -{49,-17,-16}, -{49,-17,-15}, -{49,-17,-14}, -{49,-17,-13}, -{49,-17,-12}, -{49,-17,-11}, -{49,-17,-10}, -{49,-17,-9}, -{49,-17,-8}, -{49,-17,-7}, -{49,-17,-6}, -{49,-17,-5}, -{49,-17,-4}, -{49,-17,-3}, -{49,-17,-2}, -{49,-17,-1}, -{49,-17,0}, -{49,-17,1}, -{49,-17,2}, -{49,-17,3}, -{49,-17,4}, -{49,-17,5}, -{49,-17,6}, -{49,-17,7}, -{49,-17,8}, -{49,-17,9}, -{49,-17,10}, -{49,-17,11}, -{49,-17,12}, -{49,-17,13}, -{49,-17,14}, -{49,-17,15}, -{49,-17,16}, -{49,-17,17}, -{49,-17,18}, -{49,-17,19}, -{49,-17,20}, -{49,-17,21}, -{49,-17,22}, -{49,-17,23}, -{49,-17,24}, -{49,-17,25}, -{49,-17,26}, -{49,-17,27}, -{49,-17,28}, -{49,-17,29}, -{49,-17,30}, -{49,-17,31}, -{49,-17,32}, -{49,-17,33}, -{49,-17,34}, -{49,-17,35}, -{49,-17,36}, -{49,-17,37}, -{49,-17,38}, -{49,-17,39}, -{49,-17,40}, -{49,-17,41}, -{49,-17,42}, -{49,-17,43}, -{49,-17,44}, -{49,-17,45}, -{49,-17,46}, -{49,-17,47}, -{49,-17,48}, -{49,-17,49}, -{49,-17,50}, -{49,-17,51}, -{49,-17,52}, -{49,-17,53}, -{49,-17,54}, -{49,-16,-27}, -{49,-16,-26}, -{49,-16,-25}, -{49,-16,-24}, -{49,-16,-23}, -{49,-16,-22}, -{49,-16,-21}, -{49,-16,-20}, -{49,-16,-19}, -{49,-16,-18}, -{49,-16,-17}, -{49,-16,-16}, -{49,-16,-15}, -{49,-16,-14}, -{49,-16,-13}, -{49,-16,-12}, -{49,-16,-11}, -{49,-16,-10}, -{49,-16,-9}, -{49,-16,-8}, -{49,-16,-7}, -{49,-16,-6}, -{49,-16,-5}, -{49,-16,-4}, -{49,-16,-3}, -{49,-16,-2}, -{49,-16,-1}, -{49,-16,0}, -{49,-16,1}, -{49,-16,2}, -{49,-16,3}, -{49,-16,4}, -{49,-16,5}, -{49,-16,6}, -{49,-16,7}, -{49,-16,8}, -{49,-16,9}, -{49,-16,10}, -{49,-16,11}, -{49,-16,12}, -{49,-16,13}, -{49,-16,14}, -{49,-16,15}, -{49,-16,16}, -{49,-16,17}, -{49,-16,18}, -{49,-16,19}, -{49,-16,20}, -{49,-16,21}, -{49,-16,22}, -{49,-16,23}, -{49,-16,24}, -{49,-16,25}, -{49,-16,26}, -{49,-16,27}, -{49,-16,28}, -{49,-16,29}, -{49,-16,30}, -{49,-16,31}, -{49,-16,32}, -{49,-16,33}, -{49,-16,34}, -{49,-16,35}, -{49,-16,36}, -{49,-16,37}, -{49,-16,38}, -{49,-16,39}, -{49,-16,40}, -{49,-16,41}, -{49,-16,42}, -{49,-16,43}, -{49,-16,44}, -{49,-16,45}, -{49,-16,46}, -{49,-16,47}, -{49,-16,48}, -{49,-16,49}, -{49,-16,50}, -{49,-16,51}, -{49,-16,52}, -{49,-16,53}, -{49,-16,54}, -{49,-15,-28}, -{49,-15,-27}, -{49,-15,-26}, -{49,-15,-25}, -{49,-15,-24}, -{49,-15,-23}, -{49,-15,-22}, -{49,-15,-21}, -{49,-15,-20}, -{49,-15,-19}, -{49,-15,-18}, -{49,-15,-17}, -{49,-15,-16}, -{49,-15,-15}, -{49,-15,-14}, -{49,-15,-13}, -{49,-15,-12}, -{49,-15,-11}, -{49,-15,-10}, -{49,-15,-9}, -{49,-15,-8}, -{49,-15,-7}, -{49,-15,-6}, -{49,-15,-5}, -{49,-15,-4}, -{49,-15,-3}, -{49,-15,-2}, -{49,-15,-1}, -{49,-15,0}, -{49,-15,1}, -{49,-15,2}, -{49,-15,3}, -{49,-15,4}, -{49,-15,5}, -{49,-15,6}, -{49,-15,7}, -{49,-15,8}, -{49,-15,9}, -{49,-15,10}, -{49,-15,11}, -{49,-15,12}, -{49,-15,13}, -{49,-15,14}, -{49,-15,15}, -{49,-15,16}, -{49,-15,17}, -{49,-15,18}, -{49,-15,19}, -{49,-15,20}, -{49,-15,21}, -{49,-15,22}, -{49,-15,23}, -{49,-15,24}, -{49,-15,25}, -{49,-15,26}, -{49,-15,27}, -{49,-15,28}, -{49,-15,29}, -{49,-15,30}, -{49,-15,31}, -{49,-15,32}, -{49,-15,33}, -{49,-15,34}, -{49,-15,35}, -{49,-15,36}, -{49,-15,37}, -{49,-15,38}, -{49,-15,39}, -{49,-15,40}, -{49,-15,41}, -{49,-15,42}, -{49,-15,43}, -{49,-15,44}, -{49,-15,45}, -{49,-15,46}, -{49,-15,47}, -{49,-15,48}, -{49,-15,49}, -{49,-15,50}, -{49,-15,51}, -{49,-15,52}, -{49,-15,53}, -{49,-15,54}, -{49,-14,-30}, -{49,-14,-29}, -{49,-14,-28}, -{49,-14,-27}, -{49,-14,-26}, -{49,-14,-25}, -{49,-14,-24}, -{49,-14,-23}, -{49,-14,-22}, -{49,-14,-21}, -{49,-14,-20}, -{49,-14,-19}, -{49,-14,-18}, -{49,-14,-17}, -{49,-14,-16}, -{49,-14,-15}, -{49,-14,-14}, -{49,-14,-13}, -{49,-14,-12}, -{49,-14,-11}, -{49,-14,-10}, -{49,-14,-9}, -{49,-14,-8}, -{49,-14,-7}, -{49,-14,-6}, -{49,-14,-5}, -{49,-14,-4}, -{49,-14,-3}, -{49,-14,-2}, -{49,-14,-1}, -{49,-14,0}, -{49,-14,1}, -{49,-14,2}, -{49,-14,3}, -{49,-14,4}, -{49,-14,5}, -{49,-14,6}, -{49,-14,7}, -{49,-14,8}, -{49,-14,9}, -{49,-14,10}, -{49,-14,11}, -{49,-14,12}, -{49,-14,13}, -{49,-14,14}, -{49,-14,15}, -{49,-14,16}, -{49,-14,17}, -{49,-14,18}, -{49,-14,19}, -{49,-14,20}, -{49,-14,21}, -{49,-14,22}, -{49,-14,23}, -{49,-14,24}, -{49,-14,25}, -{49,-14,26}, -{49,-14,27}, -{49,-14,28}, -{49,-14,29}, -{49,-14,30}, -{49,-14,31}, -{49,-14,32}, -{49,-14,33}, -{49,-14,34}, -{49,-14,35}, -{49,-14,36}, -{49,-14,37}, -{49,-14,38}, -{49,-14,39}, -{49,-14,40}, -{49,-14,41}, -{49,-14,42}, -{49,-14,43}, -{49,-14,44}, -{49,-14,45}, -{49,-14,46}, -{49,-14,47}, -{49,-14,48}, -{49,-14,49}, -{49,-14,50}, -{49,-14,51}, -{49,-14,52}, -{49,-14,53}, -{49,-14,54}, -{49,-13,-31}, -{49,-13,-30}, -{49,-13,-29}, -{49,-13,-28}, -{49,-13,-27}, -{49,-13,-26}, -{49,-13,-25}, -{49,-13,-24}, -{49,-13,-23}, -{49,-13,-22}, -{49,-13,-21}, -{49,-13,-20}, -{49,-13,-19}, -{49,-13,-18}, -{49,-13,-17}, -{49,-13,-16}, -{49,-13,-15}, -{49,-13,-14}, -{49,-13,-13}, -{49,-13,-12}, -{49,-13,-11}, -{49,-13,-10}, -{49,-13,-9}, -{49,-13,-8}, -{49,-13,-7}, -{49,-13,-6}, -{49,-13,-5}, -{49,-13,-4}, -{49,-13,-3}, -{49,-13,-2}, -{49,-13,-1}, -{49,-13,0}, -{49,-13,1}, -{49,-13,2}, -{49,-13,3}, -{49,-13,4}, -{49,-13,5}, -{49,-13,6}, -{49,-13,7}, -{49,-13,8}, -{49,-13,9}, -{49,-13,10}, -{49,-13,11}, -{49,-13,12}, -{49,-13,13}, -{49,-13,14}, -{49,-13,15}, -{49,-13,16}, -{49,-13,17}, -{49,-13,18}, -{49,-13,19}, -{49,-13,20}, -{49,-13,21}, -{49,-13,22}, -{49,-13,23}, -{49,-13,24}, -{49,-13,25}, -{49,-13,26}, -{49,-13,27}, -{49,-13,28}, -{49,-13,29}, -{49,-13,30}, -{49,-13,31}, -{49,-13,32}, -{49,-13,33}, -{49,-13,34}, -{49,-13,35}, -{49,-13,36}, -{49,-13,37}, -{49,-13,38}, -{49,-13,39}, -{49,-13,40}, -{49,-13,41}, -{49,-13,42}, -{49,-13,43}, -{49,-13,44}, -{49,-13,45}, -{49,-13,46}, -{49,-13,47}, -{49,-13,48}, -{49,-13,49}, -{49,-13,50}, -{49,-13,51}, -{49,-13,52}, -{49,-13,53}, -{49,-13,54}, -{49,-12,-32}, -{49,-12,-31}, -{49,-12,-30}, -{49,-12,-29}, -{49,-12,-28}, -{49,-12,-27}, -{49,-12,-26}, -{49,-12,-25}, -{49,-12,-24}, -{49,-12,-23}, -{49,-12,-22}, -{49,-12,-21}, -{49,-12,-20}, -{49,-12,-19}, -{49,-12,-18}, -{49,-12,-17}, -{49,-12,-16}, -{49,-12,-15}, -{49,-12,-14}, -{49,-12,-13}, -{49,-12,-12}, -{49,-12,-11}, -{49,-12,-10}, -{49,-12,-9}, -{49,-12,-8}, -{49,-12,-7}, -{49,-12,-6}, -{49,-12,-5}, -{49,-12,-4}, -{49,-12,-3}, -{49,-12,-2}, -{49,-12,-1}, -{49,-12,0}, -{49,-12,1}, -{49,-12,2}, -{49,-12,3}, -{49,-12,4}, -{49,-12,5}, -{49,-12,6}, -{49,-12,7}, -{49,-12,8}, -{49,-12,9}, -{49,-12,10}, -{49,-12,11}, -{49,-12,12}, -{49,-12,13}, -{49,-12,14}, -{49,-12,15}, -{49,-12,16}, -{49,-12,17}, -{49,-12,18}, -{49,-12,19}, -{49,-12,20}, -{49,-12,21}, -{49,-12,22}, -{49,-12,23}, -{49,-12,24}, -{49,-12,25}, -{49,-12,26}, -{49,-12,27}, -{49,-12,28}, -{49,-12,29}, -{49,-12,30}, -{49,-12,31}, -{49,-12,32}, -{49,-12,33}, -{49,-12,34}, -{49,-12,35}, -{49,-12,36}, -{49,-12,37}, -{49,-12,38}, -{49,-12,39}, -{49,-12,40}, -{49,-12,41}, -{49,-12,42}, -{49,-12,43}, -{49,-12,44}, -{49,-12,45}, -{49,-12,46}, -{49,-12,47}, -{49,-12,48}, -{49,-12,49}, -{49,-12,50}, -{49,-12,51}, -{49,-12,52}, -{49,-12,53}, -{49,-12,54}, -{49,-11,-33}, -{49,-11,-32}, -{49,-11,-31}, -{49,-11,-30}, -{49,-11,-29}, -{49,-11,-28}, -{49,-11,-27}, -{49,-11,-26}, -{49,-11,-25}, -{49,-11,-24}, -{49,-11,-23}, -{49,-11,-22}, -{49,-11,-21}, -{49,-11,-20}, -{49,-11,-19}, -{49,-11,-18}, -{49,-11,-17}, -{49,-11,-16}, -{49,-11,-15}, -{49,-11,-14}, -{49,-11,-13}, -{49,-11,-12}, -{49,-11,-11}, -{49,-11,-10}, -{49,-11,-9}, -{49,-11,-8}, -{49,-11,-7}, -{49,-11,-6}, -{49,-11,-5}, -{49,-11,-4}, -{49,-11,-3}, -{49,-11,-2}, -{49,-11,-1}, -{49,-11,0}, -{49,-11,1}, -{49,-11,2}, -{49,-11,3}, -{49,-11,4}, -{49,-11,5}, -{49,-11,6}, -{49,-11,7}, -{49,-11,8}, -{49,-11,9}, -{49,-11,10}, -{49,-11,11}, -{49,-11,12}, -{49,-11,13}, -{49,-11,14}, -{49,-11,15}, -{49,-11,16}, -{49,-11,17}, -{49,-11,18}, -{49,-11,19}, -{49,-11,20}, -{49,-11,21}, -{49,-11,22}, -{49,-11,23}, -{49,-11,24}, -{49,-11,25}, -{49,-11,26}, -{49,-11,27}, -{49,-11,28}, -{49,-11,29}, -{49,-11,30}, -{49,-11,31}, -{49,-11,32}, -{49,-11,33}, -{49,-11,34}, -{49,-11,35}, -{49,-11,36}, -{49,-11,37}, -{49,-11,38}, -{49,-11,39}, -{49,-11,40}, -{49,-11,41}, -{49,-11,42}, -{49,-11,43}, -{49,-11,44}, -{49,-11,45}, -{49,-11,46}, -{49,-11,47}, -{49,-11,48}, -{49,-11,49}, -{49,-11,50}, -{49,-11,51}, -{49,-11,52}, -{49,-11,53}, -{49,-11,54}, -{49,-10,-35}, -{49,-10,-34}, -{49,-10,-33}, -{49,-10,-32}, -{49,-10,-31}, -{49,-10,-30}, -{49,-10,-29}, -{49,-10,-28}, -{49,-10,-27}, -{49,-10,-26}, -{49,-10,-25}, -{49,-10,-24}, -{49,-10,-23}, -{49,-10,-22}, -{49,-10,-21}, -{49,-10,-20}, -{49,-10,-19}, -{49,-10,-18}, -{49,-10,-17}, -{49,-10,-16}, -{49,-10,-15}, -{49,-10,-14}, -{49,-10,-13}, -{49,-10,-12}, -{49,-10,-11}, -{49,-10,-10}, -{49,-10,-9}, -{49,-10,-8}, -{49,-10,-7}, -{49,-10,-6}, -{49,-10,-5}, -{49,-10,-4}, -{49,-10,-3}, -{49,-10,-2}, -{49,-10,-1}, -{49,-10,0}, -{49,-10,1}, -{49,-10,2}, -{49,-10,3}, -{49,-10,4}, -{49,-10,5}, -{49,-10,6}, -{49,-10,7}, -{49,-10,8}, -{49,-10,9}, -{49,-10,10}, -{49,-10,11}, -{49,-10,12}, -{49,-10,13}, -{49,-10,14}, -{49,-10,15}, -{49,-10,16}, -{49,-10,17}, -{49,-10,18}, -{49,-10,19}, -{49,-10,20}, -{49,-10,21}, -{49,-10,22}, -{49,-10,23}, -{49,-10,24}, -{49,-10,25}, -{49,-10,26}, -{49,-10,27}, -{49,-10,28}, -{49,-10,29}, -{49,-10,30}, -{49,-10,31}, -{49,-10,32}, -{49,-10,33}, -{49,-10,34}, -{49,-10,35}, -{49,-10,36}, -{49,-10,37}, -{49,-10,38}, -{49,-10,39}, -{49,-10,40}, -{49,-10,41}, -{49,-10,42}, -{49,-10,43}, -{49,-10,44}, -{49,-10,45}, -{49,-10,46}, -{49,-10,47}, -{49,-10,48}, -{49,-10,49}, -{49,-10,50}, -{49,-10,51}, -{49,-10,52}, -{49,-10,53}, -{49,-10,54}, -{49,-9,-36}, -{49,-9,-35}, -{49,-9,-34}, -{49,-9,-33}, -{49,-9,-32}, -{49,-9,-31}, -{49,-9,-30}, -{49,-9,-29}, -{49,-9,-28}, -{49,-9,-27}, -{49,-9,-26}, -{49,-9,-25}, -{49,-9,-24}, -{49,-9,-23}, -{49,-9,-22}, -{49,-9,-21}, -{49,-9,-20}, -{49,-9,-19}, -{49,-9,-18}, -{49,-9,-17}, -{49,-9,-16}, -{49,-9,-15}, -{49,-9,-14}, -{49,-9,-13}, -{49,-9,-12}, -{49,-9,-11}, -{49,-9,-10}, -{49,-9,-9}, -{49,-9,-8}, -{49,-9,-7}, -{49,-9,-6}, -{49,-9,-5}, -{49,-9,-4}, -{49,-9,-3}, -{49,-9,-2}, -{49,-9,-1}, -{49,-9,0}, -{49,-9,1}, -{49,-9,2}, -{49,-9,3}, -{49,-9,4}, -{49,-9,5}, -{49,-9,6}, -{49,-9,7}, -{49,-9,8}, -{49,-9,9}, -{49,-9,10}, -{49,-9,11}, -{49,-9,12}, -{49,-9,13}, -{49,-9,14}, -{49,-9,15}, -{49,-9,16}, -{49,-9,17}, -{49,-9,18}, -{49,-9,19}, -{49,-9,20}, -{49,-9,21}, -{49,-9,22}, -{49,-9,23}, -{49,-9,24}, -{49,-9,25}, -{49,-9,26}, -{49,-9,27}, -{49,-9,28}, -{49,-9,29}, -{49,-9,30}, -{49,-9,31}, -{49,-9,32}, -{49,-9,33}, -{49,-9,34}, -{49,-9,35}, -{49,-9,36}, -{49,-9,37}, -{49,-9,38}, -{49,-9,39}, -{49,-9,40}, -{49,-9,41}, -{49,-9,42}, -{49,-9,43}, -{49,-9,44}, -{49,-9,45}, -{49,-9,46}, -{49,-9,47}, -{49,-9,48}, -{49,-9,49}, -{49,-9,50}, -{49,-9,51}, -{49,-9,52}, -{49,-9,53}, -{49,-9,54}, -{49,-8,-37}, -{49,-8,-36}, -{49,-8,-35}, -{49,-8,-34}, -{49,-8,-33}, -{49,-8,-32}, -{49,-8,-31}, -{49,-8,-30}, -{49,-8,-29}, -{49,-8,-28}, -{49,-8,-27}, -{49,-8,-26}, -{49,-8,-25}, -{49,-8,-24}, -{49,-8,-23}, -{49,-8,-22}, -{49,-8,-21}, -{49,-8,-20}, -{49,-8,-19}, -{49,-8,-18}, -{49,-8,-17}, -{49,-8,-16}, -{49,-8,-15}, -{49,-8,-14}, -{49,-8,-13}, -{49,-8,-12}, -{49,-8,-11}, -{49,-8,-10}, -{49,-8,-9}, -{49,-8,-8}, -{49,-8,-7}, -{49,-8,-6}, -{49,-8,-5}, -{49,-8,-4}, -{49,-8,-3}, -{49,-8,-2}, -{49,-8,-1}, -{49,-8,0}, -{49,-8,1}, -{49,-8,2}, -{49,-8,3}, -{49,-8,4}, -{49,-8,5}, -{49,-8,6}, -{49,-8,7}, -{49,-8,8}, -{49,-8,9}, -{49,-8,10}, -{49,-8,11}, -{49,-8,12}, -{49,-8,13}, -{49,-8,14}, -{49,-8,15}, -{49,-8,16}, -{49,-8,17}, -{49,-8,18}, -{49,-8,19}, -{49,-8,20}, -{49,-8,21}, -{49,-8,22}, -{49,-8,23}, -{49,-8,24}, -{49,-8,25}, -{49,-8,26}, -{49,-8,27}, -{49,-8,28}, -{49,-8,29}, -{49,-8,30}, -{49,-8,31}, -{49,-8,32}, -{49,-8,33}, -{49,-8,34}, -{49,-8,35}, -{49,-8,36}, -{49,-8,37}, -{49,-8,38}, -{49,-8,39}, -{49,-8,40}, -{49,-8,41}, -{49,-8,42}, -{49,-8,43}, -{49,-8,44}, -{49,-8,45}, -{49,-8,46}, -{49,-8,47}, -{49,-8,48}, -{49,-8,49}, -{49,-8,50}, -{49,-8,51}, -{49,-8,52}, -{49,-8,53}, -{49,-8,54}, -{49,-7,-38}, -{49,-7,-37}, -{49,-7,-36}, -{49,-7,-35}, -{49,-7,-34}, -{49,-7,-33}, -{49,-7,-32}, -{49,-7,-31}, -{49,-7,-30}, -{49,-7,-29}, -{49,-7,-28}, -{49,-7,-27}, -{49,-7,-26}, -{49,-7,-25}, -{49,-7,-24}, -{49,-7,-23}, -{49,-7,-22}, -{49,-7,-21}, -{49,-7,-20}, -{49,-7,-19}, -{49,-7,-18}, -{49,-7,-17}, -{49,-7,-16}, -{49,-7,-15}, -{49,-7,-14}, -{49,-7,-13}, -{49,-7,-12}, -{49,-7,-11}, -{49,-7,-10}, -{49,-7,-9}, -{49,-7,-8}, -{49,-7,-7}, -{49,-7,-6}, -{49,-7,-5}, -{49,-7,-4}, -{49,-7,-3}, -{49,-7,-2}, -{49,-7,-1}, -{49,-7,0}, -{49,-7,1}, -{49,-7,2}, -{49,-7,3}, -{49,-7,4}, -{49,-7,5}, -{49,-7,6}, -{49,-7,7}, -{49,-7,8}, -{49,-7,9}, -{49,-7,10}, -{49,-7,11}, -{49,-7,12}, -{49,-7,13}, -{49,-7,14}, -{49,-7,15}, -{49,-7,16}, -{49,-7,17}, -{49,-7,18}, -{49,-7,19}, -{49,-7,20}, -{49,-7,21}, -{49,-7,22}, -{49,-7,23}, -{49,-7,24}, -{49,-7,25}, -{49,-7,26}, -{49,-7,27}, -{49,-7,28}, -{49,-7,29}, -{49,-7,30}, -{49,-7,31}, -{49,-7,32}, -{49,-7,33}, -{49,-7,34}, -{49,-7,35}, -{49,-7,36}, -{49,-7,37}, -{49,-7,38}, -{49,-7,39}, -{49,-7,40}, -{49,-7,41}, -{49,-7,42}, -{49,-7,43}, -{49,-7,44}, -{49,-7,45}, -{49,-7,46}, -{49,-7,47}, -{49,-7,48}, -{49,-7,49}, -{49,-7,50}, -{49,-7,51}, -{49,-7,52}, -{49,-7,53}, -{49,-7,54}, -{49,-6,-39}, -{49,-6,-38}, -{49,-6,-37}, -{49,-6,-36}, -{49,-6,-35}, -{49,-6,-34}, -{49,-6,-33}, -{49,-6,-32}, -{49,-6,-31}, -{49,-6,-30}, -{49,-6,-29}, -{49,-6,-28}, -{49,-6,-27}, -{49,-6,-26}, -{49,-6,-25}, -{49,-6,-24}, -{49,-6,-23}, -{49,-6,-22}, -{49,-6,-21}, -{49,-6,-20}, -{49,-6,-19}, -{49,-6,-18}, -{49,-6,-17}, -{49,-6,-16}, -{49,-6,-15}, -{49,-6,-14}, -{49,-6,-13}, -{49,-6,-12}, -{49,-6,-11}, -{49,-6,-10}, -{49,-6,-9}, -{49,-6,-8}, -{49,-6,-7}, -{49,-6,-6}, -{49,-6,-5}, -{49,-6,-4}, -{49,-6,-3}, -{49,-6,-2}, -{49,-6,-1}, -{49,-6,0}, -{49,-6,1}, -{49,-6,2}, -{49,-6,3}, -{49,-6,4}, -{49,-6,5}, -{49,-6,6}, -{49,-6,7}, -{49,-6,8}, -{49,-6,9}, -{49,-6,10}, -{49,-6,11}, -{49,-6,12}, -{49,-6,13}, -{49,-6,14}, -{49,-6,15}, -{49,-6,16}, -{49,-6,17}, -{49,-6,18}, -{49,-6,19}, -{49,-6,20}, -{49,-6,21}, -{49,-6,22}, -{49,-6,23}, -{49,-6,24}, -{49,-6,25}, -{49,-6,26}, -{49,-6,27}, -{49,-6,28}, -{49,-6,29}, -{49,-6,30}, -{49,-6,31}, -{49,-6,32}, -{49,-6,33}, -{49,-6,34}, -{49,-6,35}, -{49,-6,36}, -{49,-6,37}, -{49,-6,38}, -{49,-6,39}, -{49,-6,40}, -{49,-6,41}, -{49,-6,42}, -{49,-6,43}, -{49,-6,44}, -{49,-6,45}, -{49,-6,46}, -{49,-6,47}, -{49,-6,48}, -{49,-6,49}, -{49,-6,50}, -{49,-6,51}, -{49,-6,52}, -{49,-6,53}, -{49,-6,54}, -{49,-5,-41}, -{49,-5,-40}, -{49,-5,-39}, -{49,-5,-38}, -{49,-5,-37}, -{49,-5,-36}, -{49,-5,-35}, -{49,-5,-34}, -{49,-5,-33}, -{49,-5,-32}, -{49,-5,-31}, -{49,-5,-30}, -{49,-5,-29}, -{49,-5,-28}, -{49,-5,-27}, -{49,-5,-26}, -{49,-5,-25}, -{49,-5,-24}, -{49,-5,-23}, -{49,-5,-22}, -{49,-5,-21}, -{49,-5,-20}, -{49,-5,-19}, -{49,-5,-18}, -{49,-5,-17}, -{49,-5,-16}, -{49,-5,-15}, -{49,-5,-14}, -{49,-5,-13}, -{49,-5,-12}, -{49,-5,-11}, -{49,-5,-10}, -{49,-5,-9}, -{49,-5,-8}, -{49,-5,-7}, -{49,-5,-6}, -{49,-5,-5}, -{49,-5,-4}, -{49,-5,-3}, -{49,-5,-2}, -{49,-5,-1}, -{49,-5,0}, -{49,-5,1}, -{49,-5,2}, -{49,-5,3}, -{49,-5,4}, -{49,-5,5}, -{49,-5,6}, -{49,-5,7}, -{49,-5,8}, -{49,-5,9}, -{49,-5,10}, -{49,-5,11}, -{49,-5,12}, -{49,-5,13}, -{49,-5,14}, -{49,-5,15}, -{49,-5,16}, -{49,-5,17}, -{49,-5,18}, -{49,-5,19}, -{49,-5,20}, -{49,-5,21}, -{49,-5,22}, -{49,-5,23}, -{49,-5,24}, -{49,-5,25}, -{49,-5,26}, -{49,-5,27}, -{49,-5,28}, -{49,-5,29}, -{49,-5,30}, -{49,-5,31}, -{49,-5,32}, -{49,-5,33}, -{49,-5,34}, -{49,-5,35}, -{49,-5,36}, -{49,-5,37}, -{49,-5,38}, -{49,-5,39}, -{49,-5,40}, -{49,-5,41}, -{49,-5,42}, -{49,-5,43}, -{49,-5,44}, -{49,-5,45}, -{49,-5,46}, -{49,-5,47}, -{49,-5,48}, -{49,-5,49}, -{49,-5,50}, -{49,-5,51}, -{49,-5,52}, -{49,-5,53}, -{49,-5,54}, -{49,-4,-42}, -{49,-4,-41}, -{49,-4,-40}, -{49,-4,-39}, -{49,-4,-38}, -{49,-4,-37}, -{49,-4,-36}, -{49,-4,-35}, -{49,-4,-34}, -{49,-4,-33}, -{49,-4,-32}, -{49,-4,-31}, -{49,-4,-30}, -{49,-4,-29}, -{49,-4,-28}, -{49,-4,-27}, -{49,-4,-26}, -{49,-4,-25}, -{49,-4,-24}, -{49,-4,-23}, -{49,-4,-22}, -{49,-4,-21}, -{49,-4,-20}, -{49,-4,-19}, -{49,-4,-18}, -{49,-4,-17}, -{49,-4,-16}, -{49,-4,-15}, -{49,-4,-14}, -{49,-4,-13}, -{49,-4,-12}, -{49,-4,-11}, -{49,-4,-10}, -{49,-4,-9}, -{49,-4,-8}, -{49,-4,-7}, -{49,-4,-6}, -{49,-4,-5}, -{49,-4,-4}, -{49,-4,-3}, -{49,-4,-2}, -{49,-4,-1}, -{49,-4,0}, -{49,-4,1}, -{49,-4,2}, -{49,-4,3}, -{49,-4,4}, -{49,-4,5}, -{49,-4,6}, -{49,-4,7}, -{49,-4,8}, -{49,-4,9}, -{49,-4,10}, -{49,-4,11}, -{49,-4,12}, -{49,-4,13}, -{49,-4,14}, -{49,-4,15}, -{49,-4,16}, -{49,-4,17}, -{49,-4,18}, -{49,-4,19}, -{49,-4,20}, -{49,-4,21}, -{49,-4,22}, -{49,-4,23}, -{49,-4,24}, -{49,-4,25}, -{49,-4,26}, -{49,-4,27}, -{49,-4,28}, -{49,-4,29}, -{49,-4,30}, -{49,-4,31}, -{49,-4,32}, -{49,-4,33}, -{49,-4,34}, -{49,-4,35}, -{49,-4,36}, -{49,-4,37}, -{49,-4,38}, -{49,-4,39}, -{49,-4,40}, -{49,-4,41}, -{49,-4,42}, -{49,-4,43}, -{49,-4,44}, -{49,-4,45}, -{49,-4,46}, -{49,-4,47}, -{49,-4,48}, -{49,-4,49}, -{49,-4,50}, -{49,-4,51}, -{49,-4,52}, -{49,-4,53}, -{49,-4,54}, -{49,-4,55}, -{49,-3,-43}, -{49,-3,-42}, -{49,-3,-41}, -{49,-3,-40}, -{49,-3,-39}, -{49,-3,-38}, -{49,-3,-37}, -{49,-3,-36}, -{49,-3,-35}, -{49,-3,-34}, -{49,-3,-33}, -{49,-3,-32}, -{49,-3,-31}, -{49,-3,-30}, -{49,-3,-29}, -{49,-3,-28}, -{49,-3,-27}, -{49,-3,-26}, -{49,-3,-25}, -{49,-3,-24}, -{49,-3,-23}, -{49,-3,-22}, -{49,-3,-21}, -{49,-3,-20}, -{49,-3,-19}, -{49,-3,-18}, -{49,-3,-17}, -{49,-3,-16}, -{49,-3,-15}, -{49,-3,-14}, -{49,-3,-13}, -{49,-3,-12}, -{49,-3,-11}, -{49,-3,-10}, -{49,-3,-9}, -{49,-3,-8}, -{49,-3,-7}, -{49,-3,-6}, -{49,-3,-5}, -{49,-3,-4}, -{49,-3,-3}, -{49,-3,-2}, -{49,-3,-1}, -{49,-3,0}, -{49,-3,1}, -{49,-3,2}, -{49,-3,3}, -{49,-3,4}, -{49,-3,5}, -{49,-3,6}, -{49,-3,7}, -{49,-3,8}, -{49,-3,9}, -{49,-3,10}, -{49,-3,11}, -{49,-3,12}, -{49,-3,13}, -{49,-3,14}, -{49,-3,15}, -{49,-3,16}, -{49,-3,17}, -{49,-3,18}, -{49,-3,19}, -{49,-3,20}, -{49,-3,21}, -{49,-3,22}, -{49,-3,23}, -{49,-3,24}, -{49,-3,25}, -{49,-3,26}, -{49,-3,27}, -{49,-3,28}, -{49,-3,29}, -{49,-3,30}, -{49,-3,31}, -{49,-3,32}, -{49,-3,33}, -{49,-3,34}, -{49,-3,35}, -{49,-3,36}, -{49,-3,37}, -{49,-3,38}, -{49,-3,39}, -{49,-3,40}, -{49,-3,41}, -{49,-3,42}, -{49,-3,43}, -{49,-3,44}, -{49,-3,45}, -{49,-3,46}, -{49,-3,47}, -{49,-3,48}, -{49,-3,49}, -{49,-3,50}, -{49,-3,51}, -{49,-3,52}, -{49,-3,53}, -{49,-3,54}, -{49,-3,55}, -{49,-2,-44}, -{49,-2,-43}, -{49,-2,-42}, -{49,-2,-41}, -{49,-2,-40}, -{49,-2,-39}, -{49,-2,-38}, -{49,-2,-37}, -{49,-2,-36}, -{49,-2,-35}, -{49,-2,-34}, -{49,-2,-33}, -{49,-2,-32}, -{49,-2,-31}, -{49,-2,-30}, -{49,-2,-29}, -{49,-2,-28}, -{49,-2,-27}, -{49,-2,-26}, -{49,-2,-25}, -{49,-2,-24}, -{49,-2,-23}, -{49,-2,-22}, -{49,-2,-21}, -{49,-2,-20}, -{49,-2,-19}, -{49,-2,-18}, -{49,-2,-17}, -{49,-2,-16}, -{49,-2,-15}, -{49,-2,-14}, -{49,-2,-13}, -{49,-2,-12}, -{49,-2,-11}, -{49,-2,-10}, -{49,-2,-9}, -{49,-2,-8}, -{49,-2,-7}, -{49,-2,-6}, -{49,-2,-5}, -{49,-2,-4}, -{49,-2,-3}, -{49,-2,-2}, -{49,-2,-1}, -{49,-2,0}, -{49,-2,1}, -{49,-2,2}, -{49,-2,3}, -{49,-2,4}, -{49,-2,5}, -{49,-2,6}, -{49,-2,7}, -{49,-2,8}, -{49,-2,9}, -{49,-2,10}, -{49,-2,11}, -{49,-2,12}, -{49,-2,13}, -{49,-2,14}, -{49,-2,15}, -{49,-2,16}, -{49,-2,17}, -{49,-2,18}, -{49,-2,19}, -{49,-2,20}, -{49,-2,21}, -{49,-2,22}, -{49,-2,23}, -{49,-2,24}, -{49,-2,25}, -{49,-2,26}, -{49,-2,27}, -{49,-2,28}, -{49,-2,29}, -{49,-2,30}, -{49,-2,31}, -{49,-2,32}, -{49,-2,33}, -{49,-2,34}, -{49,-2,35}, -{49,-2,36}, -{49,-2,37}, -{49,-2,38}, -{49,-2,39}, -{49,-2,40}, -{49,-2,41}, -{49,-2,42}, -{49,-2,43}, -{49,-2,44}, -{49,-2,45}, -{49,-2,46}, -{49,-2,47}, -{49,-2,48}, -{49,-2,49}, -{49,-2,50}, -{49,-2,51}, -{49,-2,52}, -{49,-2,53}, -{49,-2,54}, -{49,-2,55}, -{49,-1,-45}, -{49,-1,-44}, -{49,-1,-43}, -{49,-1,-42}, -{49,-1,-41}, -{49,-1,-40}, -{49,-1,-39}, -{49,-1,-38}, -{49,-1,-37}, -{49,-1,-36}, -{49,-1,-35}, -{49,-1,-34}, -{49,-1,-33}, -{49,-1,-32}, -{49,-1,-31}, -{49,-1,-30}, -{49,-1,-29}, -{49,-1,-28}, -{49,-1,-27}, -{49,-1,-26}, -{49,-1,-25}, -{49,-1,-24}, -{49,-1,-23}, -{49,-1,-22}, -{49,-1,-21}, -{49,-1,-20}, -{49,-1,-19}, -{49,-1,-18}, -{49,-1,-17}, -{49,-1,-16}, -{49,-1,-15}, -{49,-1,-14}, -{49,-1,-13}, -{49,-1,-12}, -{49,-1,-11}, -{49,-1,-10}, -{49,-1,-9}, -{49,-1,-8}, -{49,-1,-7}, -{49,-1,-6}, -{49,-1,-5}, -{49,-1,-4}, -{49,-1,-3}, -{49,-1,-2}, -{49,-1,-1}, -{49,-1,0}, -{49,-1,1}, -{49,-1,2}, -{49,-1,3}, -{49,-1,4}, -{49,-1,5}, -{49,-1,6}, -{49,-1,7}, -{49,-1,8}, -{49,-1,9}, -{49,-1,10}, -{49,-1,11}, -{49,-1,12}, -{49,-1,13}, -{49,-1,14}, -{49,-1,15}, -{49,-1,16}, -{49,-1,17}, -{49,-1,18}, -{49,-1,19}, -{49,-1,20}, -{49,-1,21}, -{49,-1,22}, -{49,-1,23}, -{49,-1,24}, -{49,-1,25}, -{49,-1,26}, -{49,-1,27}, -{49,-1,28}, -{49,-1,29}, -{49,-1,30}, -{49,-1,31}, -{49,-1,32}, -{49,-1,33}, -{49,-1,34}, -{49,-1,35}, -{49,-1,36}, -{49,-1,37}, -{49,-1,38}, -{49,-1,39}, -{49,-1,40}, -{49,-1,41}, -{49,-1,42}, -{49,-1,43}, -{49,-1,44}, -{49,-1,45}, -{49,-1,46}, -{49,-1,47}, -{49,-1,48}, -{49,-1,49}, -{49,-1,50}, -{49,-1,51}, -{49,-1,52}, -{49,-1,53}, -{49,-1,54}, -{49,-1,55}, -{49,0,-46}, -{49,0,-45}, -{49,0,-44}, -{49,0,-43}, -{49,0,-42}, -{49,0,-41}, -{49,0,-40}, -{49,0,-39}, -{49,0,-38}, -{49,0,-37}, -{49,0,-36}, -{49,0,-35}, -{49,0,-34}, -{49,0,-33}, -{49,0,-32}, -{49,0,-31}, -{49,0,-30}, -{49,0,-29}, -{49,0,-28}, -{49,0,-27}, -{49,0,-26}, -{49,0,-25}, -{49,0,-24}, -{49,0,-23}, -{49,0,-22}, -{49,0,-21}, -{49,0,-20}, -{49,0,-19}, -{49,0,-18}, -{49,0,-17}, -{49,0,-16}, -{49,0,-15}, -{49,0,-14}, -{49,0,-13}, -{49,0,-12}, -{49,0,-11}, -{49,0,-10}, -{49,0,-9}, -{49,0,-8}, -{49,0,-7}, -{49,0,-6}, -{49,0,-5}, -{49,0,-4}, -{49,0,-3}, -{49,0,-2}, -{49,0,-1}, -{49,0,0}, -{49,0,1}, -{49,0,2}, -{49,0,3}, -{49,0,4}, -{49,0,5}, -{49,0,6}, -{49,0,7}, -{49,0,8}, -{49,0,9}, -{49,0,10}, -{49,0,11}, -{49,0,12}, -{49,0,13}, -{49,0,14}, -{49,0,15}, -{49,0,16}, -{49,0,17}, -{49,0,18}, -{49,0,19}, -{49,0,20}, -{49,0,21}, -{49,0,22}, -{49,0,23}, -{49,0,24}, -{49,0,25}, -{49,0,26}, -{49,0,27}, -{49,0,28}, -{49,0,29}, -{49,0,30}, -{49,0,31}, -{49,0,32}, -{49,0,33}, -{49,0,34}, -{49,0,35}, -{49,0,36}, -{49,0,37}, -{49,0,38}, -{49,0,39}, -{49,0,40}, -{49,0,41}, -{49,0,42}, -{49,0,43}, -{49,0,44}, -{49,0,45}, -{49,0,46}, -{49,0,47}, -{49,0,48}, -{49,0,49}, -{49,0,50}, -{49,0,51}, -{49,0,52}, -{49,0,53}, -{49,0,54}, -{49,0,55}, -{49,1,-48}, -{49,1,-47}, -{49,1,-46}, -{49,1,-45}, -{49,1,-44}, -{49,1,-43}, -{49,1,-42}, -{49,1,-41}, -{49,1,-40}, -{49,1,-39}, -{49,1,-38}, -{49,1,-37}, -{49,1,-36}, -{49,1,-35}, -{49,1,-34}, -{49,1,-33}, -{49,1,-32}, -{49,1,-31}, -{49,1,-30}, -{49,1,-29}, -{49,1,-28}, -{49,1,-27}, -{49,1,-26}, -{49,1,-25}, -{49,1,-24}, -{49,1,-23}, -{49,1,-22}, -{49,1,-21}, -{49,1,-20}, -{49,1,-19}, -{49,1,-18}, -{49,1,-17}, -{49,1,-16}, -{49,1,-15}, -{49,1,-14}, -{49,1,-13}, -{49,1,-12}, -{49,1,-11}, -{49,1,-10}, -{49,1,-9}, -{49,1,-8}, -{49,1,-7}, -{49,1,-6}, -{49,1,-5}, -{49,1,-4}, -{49,1,-3}, -{49,1,-2}, -{49,1,-1}, -{49,1,0}, -{49,1,1}, -{49,1,2}, -{49,1,3}, -{49,1,4}, -{49,1,5}, -{49,1,6}, -{49,1,7}, -{49,1,8}, -{49,1,9}, -{49,1,10}, -{49,1,11}, -{49,1,12}, -{49,1,13}, -{49,1,14}, -{49,1,15}, -{49,1,16}, -{49,1,17}, -{49,1,18}, -{49,1,19}, -{49,1,20}, -{49,1,21}, -{49,1,22}, -{49,1,23}, -{49,1,24}, -{49,1,25}, -{49,1,26}, -{49,1,27}, -{49,1,28}, -{49,1,29}, -{49,1,30}, -{49,1,31}, -{49,1,32}, -{49,1,33}, -{49,1,34}, -{49,1,35}, -{49,1,36}, -{49,1,37}, -{49,1,38}, -{49,1,39}, -{49,1,40}, -{49,1,41}, -{49,1,42}, -{49,1,43}, -{49,1,44}, -{49,1,45}, -{49,1,46}, -{49,1,47}, -{49,1,48}, -{49,1,49}, -{49,1,50}, -{49,1,51}, -{49,1,52}, -{49,1,53}, -{49,1,54}, -{49,1,55}, -{49,2,-49}, -{49,2,-48}, -{49,2,-47}, -{49,2,-46}, -{49,2,-45}, -{49,2,-44}, -{49,2,-43}, -{49,2,-42}, -{49,2,-41}, -{49,2,-40}, -{49,2,-39}, -{49,2,-38}, -{49,2,-37}, -{49,2,-36}, -{49,2,-35}, -{49,2,-34}, -{49,2,-33}, -{49,2,-32}, -{49,2,-31}, -{49,2,-30}, -{49,2,-29}, -{49,2,-28}, -{49,2,-27}, -{49,2,-26}, -{49,2,-25}, -{49,2,-24}, -{49,2,-23}, -{49,2,-22}, -{49,2,-21}, -{49,2,-20}, -{49,2,-19}, -{49,2,-18}, -{49,2,-17}, -{49,2,-16}, -{49,2,-15}, -{49,2,-14}, -{49,2,-13}, -{49,2,-12}, -{49,2,-11}, -{49,2,-10}, -{49,2,-9}, -{49,2,-8}, -{49,2,-7}, -{49,2,-6}, -{49,2,-5}, -{49,2,-4}, -{49,2,-3}, -{49,2,-2}, -{49,2,-1}, -{49,2,0}, -{49,2,1}, -{49,2,2}, -{49,2,3}, -{49,2,4}, -{49,2,5}, -{49,2,6}, -{49,2,7}, -{49,2,8}, -{49,2,9}, -{49,2,10}, -{49,2,11}, -{49,2,12}, -{49,2,13}, -{49,2,14}, -{49,2,15}, -{49,2,16}, -{49,2,17}, -{49,2,18}, -{49,2,19}, -{49,2,20}, -{49,2,21}, -{49,2,22}, -{49,2,23}, -{49,2,24}, -{49,2,25}, -{49,2,26}, -{49,2,27}, -{49,2,28}, -{49,2,29}, -{49,2,30}, -{49,2,31}, -{49,2,32}, -{49,2,33}, -{49,2,34}, -{49,2,35}, -{49,2,36}, -{49,2,37}, -{49,2,38}, -{49,2,39}, -{49,2,40}, -{49,2,41}, -{49,2,42}, -{49,2,43}, -{49,2,44}, -{49,2,45}, -{49,2,46}, -{49,2,47}, -{49,2,48}, -{49,2,49}, -{49,2,50}, -{49,2,51}, -{49,2,52}, -{49,2,53}, -{49,2,54}, -{49,2,55}, -{49,3,-50}, -{49,3,-49}, -{49,3,-48}, -{49,3,-47}, -{49,3,-46}, -{49,3,-45}, -{49,3,-44}, -{49,3,-43}, -{49,3,-42}, -{49,3,-41}, -{49,3,-40}, -{49,3,-39}, -{49,3,-38}, -{49,3,-37}, -{49,3,-36}, -{49,3,-35}, -{49,3,-34}, -{49,3,-33}, -{49,3,-32}, -{49,3,-31}, -{49,3,-30}, -{49,3,-29}, -{49,3,-28}, -{49,3,-27}, -{49,3,-26}, -{49,3,-25}, -{49,3,-24}, -{49,3,-23}, -{49,3,-22}, -{49,3,-21}, -{49,3,-20}, -{49,3,-19}, -{49,3,-18}, -{49,3,-17}, -{49,3,-16}, -{49,3,-15}, -{49,3,-14}, -{49,3,-13}, -{49,3,-12}, -{49,3,-11}, -{49,3,-10}, -{49,3,-9}, -{49,3,-8}, -{49,3,-7}, -{49,3,-6}, -{49,3,-5}, -{49,3,-4}, -{49,3,-3}, -{49,3,-2}, -{49,3,-1}, -{49,3,0}, -{49,3,1}, -{49,3,2}, -{49,3,3}, -{49,3,4}, -{49,3,5}, -{49,3,6}, -{49,3,7}, -{49,3,8}, -{49,3,9}, -{49,3,10}, -{49,3,11}, -{49,3,12}, -{49,3,13}, -{49,3,14}, -{49,3,15}, -{49,3,16}, -{49,3,17}, -{49,3,18}, -{49,3,19}, -{49,3,20}, -{49,3,21}, -{49,3,22}, -{49,3,23}, -{49,3,24}, -{49,3,25}, -{49,3,26}, -{49,3,27}, -{49,3,28}, -{49,3,29}, -{49,3,30}, -{49,3,31}, -{49,3,32}, -{49,3,33}, -{49,3,34}, -{49,3,35}, -{49,3,36}, -{49,3,37}, -{49,3,38}, -{49,3,39}, -{49,3,40}, -{49,3,41}, -{49,3,42}, -{49,3,43}, -{49,3,44}, -{49,3,45}, -{49,3,46}, -{49,3,47}, -{49,3,48}, -{49,3,49}, -{49,3,50}, -{49,3,51}, -{49,3,52}, -{49,3,53}, -{49,3,54}, -{49,3,55}, -{49,4,-51}, -{49,4,-50}, -{49,4,-49}, -{49,4,-48}, -{49,4,-47}, -{49,4,-46}, -{49,4,-45}, -{49,4,-44}, -{49,4,-43}, -{49,4,-42}, -{49,4,-41}, -{49,4,-40}, -{49,4,-39}, -{49,4,-38}, -{49,4,-37}, -{49,4,-36}, -{49,4,-35}, -{49,4,-34}, -{49,4,-33}, -{49,4,-32}, -{49,4,-31}, -{49,4,-30}, -{49,4,-29}, -{49,4,-28}, -{49,4,-27}, -{49,4,-26}, -{49,4,-25}, -{49,4,-24}, -{49,4,-23}, -{49,4,-22}, -{49,4,-21}, -{49,4,-20}, -{49,4,-19}, -{49,4,-18}, -{49,4,-17}, -{49,4,-16}, -{49,4,-15}, -{49,4,-14}, -{49,4,-13}, -{49,4,-12}, -{49,4,-11}, -{49,4,-10}, -{49,4,-9}, -{49,4,-8}, -{49,4,-7}, -{49,4,-6}, -{49,4,-5}, -{49,4,-4}, -{49,4,-3}, -{49,4,-2}, -{49,4,-1}, -{49,4,0}, -{49,4,1}, -{49,4,2}, -{49,4,3}, -{49,4,4}, -{49,4,5}, -{49,4,6}, -{49,4,7}, -{49,4,8}, -{49,4,9}, -{49,4,10}, -{49,4,11}, -{49,4,12}, -{49,4,13}, -{49,4,14}, -{49,4,15}, -{49,4,16}, -{49,4,17}, -{49,4,18}, -{49,4,19}, -{49,4,20}, -{49,4,21}, -{49,4,22}, -{49,4,23}, -{49,4,24}, -{49,4,25}, -{49,4,26}, -{49,4,27}, -{49,4,28}, -{49,4,29}, -{49,4,30}, -{49,4,31}, -{49,4,32}, -{49,4,33}, -{49,4,34}, -{49,4,35}, -{49,4,36}, -{49,4,37}, -{49,4,38}, -{49,4,39}, -{49,4,40}, -{49,4,41}, -{49,4,42}, -{49,4,43}, -{49,4,44}, -{49,4,45}, -{49,4,46}, -{49,4,47}, -{49,4,48}, -{49,4,49}, -{49,4,50}, -{49,4,51}, -{49,4,52}, -{49,4,53}, -{49,4,54}, -{49,4,55}, -{49,5,-52}, -{49,5,-51}, -{49,5,-50}, -{49,5,-49}, -{49,5,-48}, -{49,5,-47}, -{49,5,-46}, -{49,5,-45}, -{49,5,-44}, -{49,5,-43}, -{49,5,-42}, -{49,5,-41}, -{49,5,-40}, -{49,5,-39}, -{49,5,-38}, -{49,5,-37}, -{49,5,-36}, -{49,5,-35}, -{49,5,-34}, -{49,5,-33}, -{49,5,-32}, -{49,5,-31}, -{49,5,-30}, -{49,5,-29}, -{49,5,-28}, -{49,5,-27}, -{49,5,-26}, -{49,5,-25}, -{49,5,-24}, -{49,5,-23}, -{49,5,-22}, -{49,5,-21}, -{49,5,-20}, -{49,5,-19}, -{49,5,-18}, -{49,5,-17}, -{49,5,-16}, -{49,5,-15}, -{49,5,-14}, -{49,5,-13}, -{49,5,-12}, -{49,5,-11}, -{49,5,-10}, -{49,5,-9}, -{49,5,-8}, -{49,5,-7}, -{49,5,-6}, -{49,5,-5}, -{49,5,-4}, -{49,5,-3}, -{49,5,-2}, -{49,5,-1}, -{49,5,0}, -{49,5,1}, -{49,5,2}, -{49,5,3}, -{49,5,4}, -{49,5,5}, -{49,5,6}, -{49,5,7}, -{49,5,8}, -{49,5,9}, -{49,5,10}, -{49,5,11}, -{49,5,12}, -{49,5,13}, -{49,5,14}, -{49,5,15}, -{49,5,16}, -{49,5,17}, -{49,5,18}, -{49,5,19}, -{49,5,20}, -{49,5,21}, -{49,5,22}, -{49,5,23}, -{49,5,24}, -{49,5,25}, -{49,5,26}, -{49,5,27}, -{49,5,28}, -{49,5,29}, -{49,5,30}, -{49,5,31}, -{49,5,32}, -{49,5,33}, -{49,5,34}, -{49,5,35}, -{49,5,36}, -{49,5,37}, -{49,5,38}, -{49,5,39}, -{49,5,40}, -{49,5,41}, -{49,5,42}, -{49,5,43}, -{49,5,44}, -{49,5,45}, -{49,5,46}, -{49,5,47}, -{49,5,48}, -{49,5,49}, -{49,5,50}, -{49,5,51}, -{49,5,52}, -{49,5,53}, -{49,5,54}, -{49,5,55}, -{49,6,-53}, -{49,6,-52}, -{49,6,-51}, -{49,6,-50}, -{49,6,-49}, -{49,6,-48}, -{49,6,-47}, -{49,6,-46}, -{49,6,-45}, -{49,6,-44}, -{49,6,-43}, -{49,6,-42}, -{49,6,-41}, -{49,6,-40}, -{49,6,-39}, -{49,6,-38}, -{49,6,-37}, -{49,6,-36}, -{49,6,-35}, -{49,6,-34}, -{49,6,-33}, -{49,6,-32}, -{49,6,-31}, -{49,6,-30}, -{49,6,-29}, -{49,6,-28}, -{49,6,-27}, -{49,6,-26}, -{49,6,-25}, -{49,6,-24}, -{49,6,-23}, -{49,6,-22}, -{49,6,-21}, -{49,6,-20}, -{49,6,-19}, -{49,6,-18}, -{49,6,-17}, -{49,6,-16}, -{49,6,-15}, -{49,6,-14}, -{49,6,-13}, -{49,6,-12}, -{49,6,-11}, -{49,6,-10}, -{49,6,-9}, -{49,6,-8}, -{49,6,-7}, -{49,6,-6}, -{49,6,-5}, -{49,6,-4}, -{49,6,-3}, -{49,6,-2}, -{49,6,-1}, -{49,6,0}, -{49,6,1}, -{49,6,2}, -{49,6,3}, -{49,6,4}, -{49,6,5}, -{49,6,6}, -{49,6,7}, -{49,6,8}, -{49,6,9}, -{49,6,10}, -{49,6,11}, -{49,6,12}, -{49,6,13}, -{49,6,14}, -{49,6,15}, -{49,6,16}, -{49,6,17}, -{49,6,18}, -{49,6,19}, -{49,6,20}, -{49,6,21}, -{49,6,22}, -{49,6,23}, -{49,6,24}, -{49,6,25}, -{49,6,26}, -{49,6,27}, -{49,6,28}, -{49,6,29}, -{49,6,30}, -{49,6,31}, -{49,6,32}, -{49,6,33}, -{49,6,34}, -{49,6,35}, -{49,6,36}, -{49,6,37}, -{49,6,38}, -{49,6,39}, -{49,6,40}, -{49,6,41}, -{49,6,42}, -{49,6,43}, -{49,6,44}, -{49,6,45}, -{49,6,46}, -{49,6,47}, -{49,6,48}, -{49,6,49}, -{49,6,50}, -{49,6,51}, -{49,6,52}, -{49,6,53}, -{49,6,54}, -{49,6,55}, -{49,7,-54}, -{49,7,-53}, -{49,7,-52}, -{49,7,-51}, -{49,7,-50}, -{49,7,-49}, -{49,7,-48}, -{49,7,-47}, -{49,7,-46}, -{49,7,-45}, -{49,7,-44}, -{49,7,-43}, -{49,7,-42}, -{49,7,-41}, -{49,7,-40}, -{49,7,-39}, -{49,7,-38}, -{49,7,-37}, -{49,7,-36}, -{49,7,-35}, -{49,7,-34}, -{49,7,-33}, -{49,7,-32}, -{49,7,-31}, -{49,7,-30}, -{49,7,-29}, -{49,7,-28}, -{49,7,-27}, -{49,7,-26}, -{49,7,-25}, -{49,7,-24}, -{49,7,-23}, -{49,7,-22}, -{49,7,-21}, -{49,7,-20}, -{49,7,-19}, -{49,7,-18}, -{49,7,-17}, -{49,7,-16}, -{49,7,-15}, -{49,7,-14}, -{49,7,-13}, -{49,7,-12}, -{49,7,-11}, -{49,7,-10}, -{49,7,-9}, -{49,7,-8}, -{49,7,-7}, -{49,7,-6}, -{49,7,-5}, -{49,7,-4}, -{49,7,-3}, -{49,7,-2}, -{49,7,-1}, -{49,7,0}, -{49,7,1}, -{49,7,2}, -{49,7,3}, -{49,7,4}, -{49,7,5}, -{49,7,6}, -{49,7,7}, -{49,7,8}, -{49,7,9}, -{49,7,10}, -{49,7,11}, -{49,7,12}, -{49,7,13}, -{49,7,14}, -{49,7,15}, -{49,7,16}, -{49,7,17}, -{49,7,18}, -{49,7,19}, -{49,7,20}, -{49,7,21}, -{49,7,22}, -{49,7,23}, -{49,7,24}, -{49,7,25}, -{49,7,26}, -{49,7,27}, -{49,7,28}, -{49,7,29}, -{49,7,30}, -{49,7,31}, -{49,7,32}, -{49,7,33}, -{49,7,34}, -{49,7,35}, -{49,7,36}, -{49,7,37}, -{49,7,38}, -{49,7,39}, -{49,7,40}, -{49,7,41}, -{49,7,42}, -{49,7,43}, -{49,7,44}, -{49,7,45}, -{49,7,46}, -{49,7,47}, -{49,7,48}, -{49,7,49}, -{49,7,50}, -{49,7,51}, -{49,7,52}, -{49,7,53}, -{49,7,54}, -{49,7,55}, -{49,8,-55}, -{49,8,-54}, -{49,8,-53}, -{49,8,-52}, -{49,8,-51}, -{49,8,-50}, -{49,8,-49}, -{49,8,-48}, -{49,8,-47}, -{49,8,-46}, -{49,8,-45}, -{49,8,-44}, -{49,8,-43}, -{49,8,-42}, -{49,8,-41}, -{49,8,-40}, -{49,8,-39}, -{49,8,-38}, -{49,8,-37}, -{49,8,-36}, -{49,8,-35}, -{49,8,-34}, -{49,8,-33}, -{49,8,-32}, -{49,8,-31}, -{49,8,-30}, -{49,8,-29}, -{49,8,-28}, -{49,8,-27}, -{49,8,-26}, -{49,8,-25}, -{49,8,-24}, -{49,8,-23}, -{49,8,-22}, -{49,8,-21}, -{49,8,-20}, -{49,8,-19}, -{49,8,-18}, -{49,8,-17}, -{49,8,-16}, -{49,8,-15}, -{49,8,-14}, -{49,8,-13}, -{49,8,-12}, -{49,8,-11}, -{49,8,-10}, -{49,8,-9}, -{49,8,-8}, -{49,8,-7}, -{49,8,-6}, -{49,8,-5}, -{49,8,-4}, -{49,8,-3}, -{49,8,-2}, -{49,8,-1}, -{49,8,0}, -{49,8,1}, -{49,8,2}, -{49,8,3}, -{49,8,4}, -{49,8,5}, -{49,8,6}, -{49,8,7}, -{49,8,8}, -{49,8,9}, -{49,8,10}, -{49,8,11}, -{49,8,12}, -{49,8,13}, -{49,8,14}, -{49,8,15}, -{49,8,16}, -{49,8,17}, -{49,8,18}, -{49,8,19}, -{49,8,20}, -{49,8,21}, -{49,8,22}, -{49,8,23}, -{49,8,24}, -{49,8,25}, -{49,8,26}, -{49,8,27}, -{49,8,28}, -{49,8,29}, -{49,8,30}, -{49,8,31}, -{49,8,32}, -{49,8,33}, -{49,8,34}, -{49,8,35}, -{49,8,36}, -{49,8,37}, -{49,8,38}, -{49,8,39}, -{49,8,40}, -{49,8,41}, -{49,8,42}, -{49,8,43}, -{49,8,44}, -{49,8,45}, -{49,8,46}, -{49,8,47}, -{49,8,48}, -{49,8,49}, -{49,8,50}, -{49,8,51}, -{49,8,52}, -{49,8,53}, -{49,8,54}, -{49,8,55}, -{49,9,-56}, -{49,9,-55}, -{49,9,-54}, -{49,9,-53}, -{49,9,-52}, -{49,9,-51}, -{49,9,-50}, -{49,9,-49}, -{49,9,-48}, -{49,9,-47}, -{49,9,-46}, -{49,9,-45}, -{49,9,-44}, -{49,9,-43}, -{49,9,-42}, -{49,9,-41}, -{49,9,-40}, -{49,9,-39}, -{49,9,-38}, -{49,9,-37}, -{49,9,-36}, -{49,9,-35}, -{49,9,-34}, -{49,9,-33}, -{49,9,-32}, -{49,9,-31}, -{49,9,-30}, -{49,9,-29}, -{49,9,-28}, -{49,9,-27}, -{49,9,-26}, -{49,9,-25}, -{49,9,-24}, -{49,9,-23}, -{49,9,-22}, -{49,9,-21}, -{49,9,-20}, -{49,9,-19}, -{49,9,-18}, -{49,9,-17}, -{49,9,-16}, -{49,9,-15}, -{49,9,-14}, -{49,9,-13}, -{49,9,-12}, -{49,9,-11}, -{49,9,-10}, -{49,9,-9}, -{49,9,-8}, -{49,9,-7}, -{49,9,-6}, -{49,9,-5}, -{49,9,-4}, -{49,9,-3}, -{49,9,-2}, -{49,9,-1}, -{49,9,0}, -{49,9,1}, -{49,9,2}, -{49,9,3}, -{49,9,4}, -{49,9,5}, -{49,9,6}, -{49,9,7}, -{49,9,8}, -{49,9,9}, -{49,9,10}, -{49,9,11}, -{49,9,12}, -{49,9,13}, -{49,9,14}, -{49,9,15}, -{49,9,16}, -{49,9,17}, -{49,9,18}, -{49,9,19}, -{49,9,20}, -{49,9,21}, -{49,9,22}, -{49,9,23}, -{49,9,24}, -{49,9,25}, -{49,9,26}, -{49,9,27}, -{49,9,28}, -{49,9,29}, -{49,9,30}, -{49,9,31}, -{49,9,32}, -{49,9,33}, -{49,9,34}, -{49,9,35}, -{49,9,36}, -{49,9,37}, -{49,9,38}, -{49,9,39}, -{49,9,40}, -{49,9,41}, -{49,9,42}, -{49,9,43}, -{49,9,44}, -{49,9,45}, -{49,9,46}, -{49,9,47}, -{49,9,48}, -{49,9,49}, -{49,9,50}, -{49,9,51}, -{49,9,52}, -{49,9,53}, -{49,9,54}, -{49,9,55}, -{49,10,-57}, -{49,10,-56}, -{49,10,-55}, -{49,10,-54}, -{49,10,-53}, -{49,10,-52}, -{49,10,-51}, -{49,10,-50}, -{49,10,-49}, -{49,10,-48}, -{49,10,-47}, -{49,10,-46}, -{49,10,-45}, -{49,10,-44}, -{49,10,-43}, -{49,10,-42}, -{49,10,-41}, -{49,10,-40}, -{49,10,-39}, -{49,10,-38}, -{49,10,-37}, -{49,10,-36}, -{49,10,-35}, -{49,10,-34}, -{49,10,-33}, -{49,10,-32}, -{49,10,-31}, -{49,10,-30}, -{49,10,-29}, -{49,10,-28}, -{49,10,-27}, -{49,10,-26}, -{49,10,-25}, -{49,10,-24}, -{49,10,-23}, -{49,10,-22}, -{49,10,-21}, -{49,10,-20}, -{49,10,-19}, -{49,10,-18}, -{49,10,-17}, -{49,10,-16}, -{49,10,-15}, -{49,10,-14}, -{49,10,-13}, -{49,10,-12}, -{49,10,-11}, -{49,10,-10}, -{49,10,-9}, -{49,10,-8}, -{49,10,-7}, -{49,10,-6}, -{49,10,-5}, -{49,10,-4}, -{49,10,-3}, -{49,10,-2}, -{49,10,-1}, -{49,10,0}, -{49,10,1}, -{49,10,2}, -{49,10,3}, -{49,10,4}, -{49,10,5}, -{49,10,6}, -{49,10,7}, -{49,10,8}, -{49,10,9}, -{49,10,10}, -{49,10,11}, -{49,10,12}, -{49,10,13}, -{49,10,14}, -{49,10,15}, -{49,10,16}, -{49,10,17}, -{49,10,18}, -{49,10,19}, -{49,10,20}, -{49,10,21}, -{49,10,22}, -{49,10,23}, -{49,10,24}, -{49,10,25}, -{49,10,26}, -{49,10,27}, -{49,10,28}, -{49,10,29}, -{49,10,30}, -{49,10,31}, -{49,10,32}, -{49,10,33}, -{49,10,34}, -{49,10,35}, -{49,10,36}, -{49,10,37}, -{49,10,38}, -{49,10,39}, -{49,10,40}, -{49,10,41}, -{49,10,42}, -{49,10,43}, -{49,10,44}, -{49,10,45}, -{49,10,46}, -{49,10,47}, -{49,10,48}, -{49,10,49}, -{49,10,50}, -{49,10,51}, -{49,10,52}, -{49,10,53}, -{49,10,54}, -{49,10,55}, -{49,10,56}, -{49,11,-58}, -{49,11,-57}, -{49,11,-56}, -{49,11,-55}, -{49,11,-54}, -{49,11,-53}, -{49,11,-52}, -{49,11,-51}, -{49,11,-50}, -{49,11,-49}, -{49,11,-48}, -{49,11,-47}, -{49,11,-46}, -{49,11,-45}, -{49,11,-44}, -{49,11,-43}, -{49,11,-42}, -{49,11,-41}, -{49,11,-40}, -{49,11,-39}, -{49,11,-38}, -{49,11,-37}, -{49,11,-36}, -{49,11,-35}, -{49,11,-34}, -{49,11,-33}, -{49,11,-32}, -{49,11,-31}, -{49,11,-30}, -{49,11,-29}, -{49,11,-28}, -{49,11,-27}, -{49,11,-26}, -{49,11,-25}, -{49,11,-24}, -{49,11,-23}, -{49,11,-22}, -{49,11,-21}, -{49,11,-20}, -{49,11,-19}, -{49,11,-18}, -{49,11,-17}, -{49,11,-16}, -{49,11,-15}, -{49,11,-14}, -{49,11,-13}, -{49,11,-12}, -{49,11,-11}, -{49,11,-10}, -{49,11,-9}, -{49,11,-8}, -{49,11,-7}, -{49,11,-6}, -{49,11,-5}, -{49,11,-4}, -{49,11,-3}, -{49,11,-2}, -{49,11,-1}, -{49,11,0}, -{49,11,1}, -{49,11,2}, -{49,11,3}, -{49,11,4}, -{49,11,5}, -{49,11,6}, -{49,11,7}, -{49,11,8}, -{49,11,9}, -{49,11,10}, -{49,11,11}, -{49,11,12}, -{49,11,13}, -{49,11,14}, -{49,11,15}, -{49,11,16}, -{49,11,17}, -{49,11,18}, -{49,11,19}, -{49,11,20}, -{49,11,21}, -{49,11,22}, -{49,11,23}, -{49,11,24}, -{49,11,25}, -{49,11,26}, -{49,11,27}, -{49,11,28}, -{49,11,29}, -{49,11,30}, -{49,11,31}, -{49,11,32}, -{49,11,33}, -{49,11,34}, -{49,11,35}, -{49,11,36}, -{49,11,37}, -{49,11,38}, -{49,11,39}, -{49,11,40}, -{49,11,41}, -{49,11,42}, -{49,11,43}, -{49,11,44}, -{49,11,45}, -{49,11,46}, -{49,11,47}, -{49,11,48}, -{49,11,49}, -{49,11,50}, -{49,11,51}, -{49,11,52}, -{49,11,53}, -{49,11,54}, -{49,11,55}, -{49,11,56}, -{49,12,-59}, -{49,12,-58}, -{49,12,-57}, -{49,12,-56}, -{49,12,-55}, -{49,12,-54}, -{49,12,-53}, -{49,12,-52}, -{49,12,-51}, -{49,12,-50}, -{49,12,-49}, -{49,12,-48}, -{49,12,-47}, -{49,12,-46}, -{49,12,-45}, -{49,12,-44}, -{49,12,-43}, -{49,12,-42}, -{49,12,-41}, -{49,12,-40}, -{49,12,-39}, -{49,12,-38}, -{49,12,-37}, -{49,12,-36}, -{49,12,-35}, -{49,12,-34}, -{49,12,-33}, -{49,12,-32}, -{49,12,-31}, -{49,12,-30}, -{49,12,-29}, -{49,12,-28}, -{49,12,-27}, -{49,12,-26}, -{49,12,-25}, -{49,12,-24}, -{49,12,-23}, -{49,12,-22}, -{49,12,-21}, -{49,12,-20}, -{49,12,-19}, -{49,12,-18}, -{49,12,-17}, -{49,12,-16}, -{49,12,-15}, -{49,12,-14}, -{49,12,-13}, -{49,12,-12}, -{49,12,-11}, -{49,12,-10}, -{49,12,-9}, -{49,12,-8}, -{49,12,-7}, -{49,12,-6}, -{49,12,-5}, -{49,12,-4}, -{49,12,-3}, -{49,12,-2}, -{49,12,-1}, -{49,12,0}, -{49,12,1}, -{49,12,2}, -{49,12,3}, -{49,12,4}, -{49,12,5}, -{49,12,6}, -{49,12,7}, -{49,12,8}, -{49,12,9}, -{49,12,10}, -{49,12,11}, -{49,12,12}, -{49,12,13}, -{49,12,14}, -{49,12,15}, -{49,12,16}, -{49,12,17}, -{49,12,18}, -{49,12,19}, -{49,12,20}, -{49,12,21}, -{49,12,22}, -{49,12,23}, -{49,12,24}, -{49,12,25}, -{49,12,26}, -{49,12,27}, -{49,12,28}, -{49,12,29}, -{49,12,30}, -{49,12,31}, -{49,12,32}, -{49,12,33}, -{49,12,34}, -{49,12,35}, -{49,12,36}, -{49,12,37}, -{49,12,38}, -{49,12,39}, -{49,12,40}, -{49,12,41}, -{49,12,42}, -{49,12,43}, -{49,12,44}, -{49,12,45}, -{49,12,46}, -{49,12,47}, -{49,12,48}, -{49,12,49}, -{49,12,50}, -{49,12,51}, -{49,12,52}, -{49,12,53}, -{49,12,54}, -{49,12,55}, -{49,12,56}, -{49,13,-60}, -{49,13,-59}, -{49,13,-58}, -{49,13,-57}, -{49,13,-56}, -{49,13,-55}, -{49,13,-54}, -{49,13,-53}, -{49,13,-52}, -{49,13,-51}, -{49,13,-50}, -{49,13,-49}, -{49,13,-48}, -{49,13,-47}, -{49,13,-46}, -{49,13,-45}, -{49,13,-44}, -{49,13,-43}, -{49,13,-42}, -{49,13,-41}, -{49,13,-40}, -{49,13,-39}, -{49,13,-38}, -{49,13,-37}, -{49,13,-36}, -{49,13,-35}, -{49,13,-34}, -{49,13,-33}, -{49,13,-32}, -{49,13,-31}, -{49,13,-30}, -{49,13,-29}, -{49,13,-28}, -{49,13,-27}, -{49,13,-26}, -{49,13,-25}, -{49,13,-24}, -{49,13,-23}, -{49,13,-22}, -{49,13,-21}, -{49,13,-20}, -{49,13,-19}, -{49,13,-18}, -{49,13,-17}, -{49,13,-16}, -{49,13,-15}, -{49,13,-14}, -{49,13,-13}, -{49,13,-12}, -{49,13,-11}, -{49,13,-10}, -{49,13,-9}, -{49,13,-8}, -{49,13,-7}, -{49,13,-6}, -{49,13,-5}, -{49,13,-4}, -{49,13,-3}, -{49,13,-2}, -{49,13,-1}, -{49,13,0}, -{49,13,1}, -{49,13,2}, -{49,13,3}, -{49,13,4}, -{49,13,5}, -{49,13,6}, -{49,13,7}, -{49,13,8}, -{49,13,9}, -{49,13,10}, -{49,13,11}, -{49,13,12}, -{49,13,13}, -{49,13,14}, -{49,13,15}, -{49,13,16}, -{49,13,17}, -{49,13,18}, -{49,13,19}, -{49,13,20}, -{49,13,21}, -{49,13,22}, -{49,13,23}, -{49,13,24}, -{49,13,25}, -{49,13,26}, -{49,13,27}, -{49,13,28}, -{49,13,29}, -{49,13,30}, -{49,13,31}, -{49,13,32}, -{49,13,33}, -{49,13,34}, -{49,13,35}, -{49,13,36}, -{49,13,37}, -{49,13,38}, -{49,13,39}, -{49,13,40}, -{49,13,41}, -{49,13,42}, -{49,13,43}, -{49,13,44}, -{49,13,45}, -{49,13,46}, -{49,13,47}, -{49,13,48}, -{49,13,49}, -{49,13,50}, -{49,13,51}, -{49,13,52}, -{49,13,53}, -{49,13,54}, -{49,13,55}, -{49,13,56}, -{49,14,-62}, -{49,14,-61}, -{49,14,-60}, -{49,14,-59}, -{49,14,-58}, -{49,14,-57}, -{49,14,-56}, -{49,14,-55}, -{49,14,-54}, -{49,14,-53}, -{49,14,-52}, -{49,14,-51}, -{49,14,-50}, -{49,14,-49}, -{49,14,-48}, -{49,14,-47}, -{49,14,-46}, -{49,14,-45}, -{49,14,-44}, -{49,14,-43}, -{49,14,-42}, -{49,14,-41}, -{49,14,-40}, -{49,14,-39}, -{49,14,-38}, -{49,14,-37}, -{49,14,-36}, -{49,14,-35}, -{49,14,-34}, -{49,14,-33}, -{49,14,-32}, -{49,14,-31}, -{49,14,-30}, -{49,14,-29}, -{49,14,-28}, -{49,14,-27}, -{49,14,-26}, -{49,14,-25}, -{49,14,-24}, -{49,14,-23}, -{49,14,-22}, -{49,14,-21}, -{49,14,-20}, -{49,14,-19}, -{49,14,-18}, -{49,14,-17}, -{49,14,-16}, -{49,14,-15}, -{49,14,-14}, -{49,14,-13}, -{49,14,-12}, -{49,14,-11}, -{49,14,-10}, -{49,14,-9}, -{49,14,-8}, -{49,14,-7}, -{49,14,-6}, -{49,14,-5}, -{49,14,-4}, -{49,14,-3}, -{49,14,-2}, -{49,14,-1}, -{49,14,0}, -{49,14,1}, -{49,14,2}, -{49,14,3}, -{49,14,4}, -{49,14,5}, -{49,14,6}, -{49,14,7}, -{49,14,8}, -{49,14,9}, -{49,14,10}, -{49,14,11}, -{49,14,12}, -{49,14,13}, -{49,14,14}, -{49,14,15}, -{49,14,16}, -{49,14,17}, -{49,14,18}, -{49,14,19}, -{49,14,20}, -{49,14,21}, -{49,14,22}, -{49,14,23}, -{49,14,24}, -{49,14,25}, -{49,14,26}, -{49,14,27}, -{49,14,28}, -{49,14,29}, -{49,14,30}, -{49,14,31}, -{49,14,32}, -{49,14,33}, -{49,14,34}, -{49,14,35}, -{49,14,36}, -{49,14,37}, -{49,14,38}, -{49,14,39}, -{49,14,40}, -{49,14,41}, -{49,14,42}, -{49,14,43}, -{49,14,44}, -{49,14,45}, -{49,14,46}, -{49,14,47}, -{49,14,48}, -{49,14,49}, -{49,14,50}, -{49,14,51}, -{49,14,52}, -{49,14,53}, -{49,14,54}, -{49,14,55}, -{49,14,56}, -{49,15,-63}, -{49,15,-62}, -{49,15,-61}, -{49,15,-60}, -{49,15,-59}, -{49,15,-58}, -{49,15,-57}, -{49,15,-56}, -{49,15,-55}, -{49,15,-54}, -{49,15,-53}, -{49,15,-52}, -{49,15,-51}, -{49,15,-50}, -{49,15,-49}, -{49,15,-48}, -{49,15,-47}, -{49,15,-46}, -{49,15,-45}, -{49,15,-44}, -{49,15,-43}, -{49,15,-42}, -{49,15,-41}, -{49,15,-40}, -{49,15,-39}, -{49,15,-38}, -{49,15,-37}, -{49,15,-36}, -{49,15,-35}, -{49,15,-34}, -{49,15,-33}, -{49,15,-32}, -{49,15,-31}, -{49,15,-30}, -{49,15,-29}, -{49,15,-28}, -{49,15,-27}, -{49,15,-26}, -{49,15,-25}, -{49,15,-24}, -{49,15,-23}, -{49,15,-22}, -{49,15,-21}, -{49,15,-20}, -{49,15,-19}, -{49,15,-18}, -{49,15,-17}, -{49,15,-16}, -{49,15,-15}, -{49,15,-14}, -{49,15,-13}, -{49,15,-12}, -{49,15,-11}, -{49,15,-10}, -{49,15,-9}, -{49,15,-8}, -{49,15,-7}, -{49,15,-6}, -{49,15,-5}, -{49,15,-4}, -{49,15,-3}, -{49,15,-2}, -{49,15,-1}, -{49,15,0}, -{49,15,1}, -{49,15,2}, -{49,15,3}, -{49,15,4}, -{49,15,5}, -{49,15,6}, -{49,15,7}, -{49,15,8}, -{49,15,9}, -{49,15,10}, -{49,15,11}, -{49,15,12}, -{49,15,13}, -{49,15,14}, -{49,15,15}, -{49,15,16}, -{49,15,17}, -{49,15,18}, -{49,15,19}, -{49,15,20}, -{49,15,21}, -{49,15,22}, -{49,15,23}, -{49,15,24}, -{49,15,25}, -{49,15,26}, -{49,15,27}, -{49,15,28}, -{49,15,29}, -{49,15,30}, -{49,15,31}, -{49,15,32}, -{49,15,33}, -{49,15,34}, -{49,15,35}, -{49,15,36}, -{49,15,37}, -{49,15,38}, -{49,15,39}, -{49,15,40}, -{49,15,41}, -{49,15,42}, -{49,15,43}, -{49,15,44}, -{49,15,45}, -{49,15,46}, -{49,15,47}, -{49,15,48}, -{49,15,49}, -{49,15,50}, -{49,15,51}, -{49,15,52}, -{49,15,53}, -{49,15,54}, -{49,15,55}, -{49,15,56}, -{49,16,-64}, -{49,16,-63}, -{49,16,-62}, -{49,16,-61}, -{49,16,-60}, -{49,16,-59}, -{49,16,-58}, -{49,16,-57}, -{49,16,-56}, -{49,16,-55}, -{49,16,-54}, -{49,16,-53}, -{49,16,-52}, -{49,16,-51}, -{49,16,-50}, -{49,16,-49}, -{49,16,-48}, -{49,16,-47}, -{49,16,-46}, -{49,16,-45}, -{49,16,-44}, -{49,16,-43}, -{49,16,-42}, -{49,16,-41}, -{49,16,-40}, -{49,16,-39}, -{49,16,-38}, -{49,16,-37}, -{49,16,-36}, -{49,16,-35}, -{49,16,-34}, -{49,16,-33}, -{49,16,-32}, -{49,16,-31}, -{49,16,-30}, -{49,16,-29}, -{49,16,-28}, -{49,16,-27}, -{49,16,-26}, -{49,16,-25}, -{49,16,-24}, -{49,16,-23}, -{49,16,-22}, -{49,16,-21}, -{49,16,-20}, -{49,16,-19}, -{49,16,-18}, -{49,16,-17}, -{49,16,-16}, -{49,16,-15}, -{49,16,-14}, -{49,16,-13}, -{49,16,-12}, -{49,16,-11}, -{49,16,-10}, -{49,16,-9}, -{49,16,-8}, -{49,16,-7}, -{49,16,-6}, -{49,16,-5}, -{49,16,-4}, -{49,16,-3}, -{49,16,-2}, -{49,16,-1}, -{49,16,0}, -{49,16,1}, -{49,16,2}, -{49,16,3}, -{49,16,4}, -{49,16,5}, -{49,16,6}, -{49,16,7}, -{49,16,8}, -{49,16,9}, -{49,16,10}, -{49,16,11}, -{49,16,12}, -{49,16,13}, -{49,16,14}, -{49,16,15}, -{49,16,16}, -{49,16,17}, -{49,16,18}, -{49,16,19}, -{49,16,20}, -{49,16,21}, -{49,16,22}, -{49,16,23}, -{49,16,24}, -{49,16,25}, -{49,16,26}, -{49,16,27}, -{49,16,28}, -{49,16,29}, -{49,16,30}, -{49,16,31}, -{49,16,32}, -{49,16,33}, -{49,16,34}, -{49,16,35}, -{49,16,36}, -{49,16,37}, -{49,16,38}, -{49,16,39}, -{49,16,40}, -{49,16,41}, -{49,16,42}, -{49,16,43}, -{49,16,44}, -{49,16,45}, -{49,16,46}, -{49,16,47}, -{49,16,48}, -{49,16,49}, -{49,16,50}, -{49,16,51}, -{49,16,52}, -{49,16,53}, -{49,16,54}, -{49,16,55}, -{49,16,56}, -{49,17,-65}, -{49,17,-64}, -{49,17,-63}, -{49,17,-62}, -{49,17,-61}, -{49,17,-60}, -{49,17,-59}, -{49,17,-58}, -{49,17,-57}, -{49,17,-56}, -{49,17,-55}, -{49,17,-54}, -{49,17,-53}, -{49,17,-52}, -{49,17,-51}, -{49,17,-50}, -{49,17,-49}, -{49,17,-48}, -{49,17,-47}, -{49,17,-46}, -{49,17,-45}, -{49,17,-44}, -{49,17,-43}, -{49,17,-42}, -{49,17,-41}, -{49,17,-40}, -{49,17,-39}, -{49,17,-38}, -{49,17,-37}, -{49,17,-36}, -{49,17,-35}, -{49,17,-34}, -{49,17,-33}, -{49,17,-32}, -{49,17,-31}, -{49,17,-30}, -{49,17,-29}, -{49,17,-28}, -{49,17,-27}, -{49,17,-26}, -{49,17,-25}, -{49,17,-24}, -{49,17,-23}, -{49,17,-22}, -{49,17,-21}, -{49,17,-20}, -{49,17,-19}, -{49,17,-18}, -{49,17,-17}, -{49,17,-16}, -{49,17,-15}, -{49,17,-14}, -{49,17,-13}, -{49,17,-12}, -{49,17,-11}, -{49,17,-10}, -{49,17,-9}, -{49,17,-8}, -{49,17,-7}, -{49,17,-6}, -{49,17,-5}, -{49,17,-4}, -{49,17,-3}, -{49,17,-2}, -{49,17,-1}, -{49,17,0}, -{49,17,1}, -{49,17,2}, -{49,17,3}, -{49,17,4}, -{49,17,5}, -{49,17,6}, -{49,17,7}, -{49,17,8}, -{49,17,9}, -{49,17,10}, -{49,17,11}, -{49,17,12}, -{49,17,13}, -{49,17,14}, -{49,17,15}, -{49,17,16}, -{49,17,17}, -{49,17,18}, -{49,17,19}, -{49,17,20}, -{49,17,21}, -{49,17,22}, -{49,17,23}, -{49,17,24}, -{49,17,25}, -{49,17,26}, -{49,17,27}, -{49,17,28}, -{49,17,29}, -{49,17,30}, -{49,17,31}, -{49,17,32}, -{49,17,33}, -{49,17,34}, -{49,17,35}, -{49,17,36}, -{49,17,37}, -{49,17,38}, -{49,17,39}, -{49,17,40}, -{49,17,41}, -{49,17,42}, -{49,17,43}, -{49,17,44}, -{49,17,45}, -{49,17,46}, -{49,17,47}, -{49,17,48}, -{49,17,49}, -{49,17,50}, -{49,17,51}, -{49,17,52}, -{49,17,53}, -{49,17,54}, -{49,17,55}, -{49,17,56}, -{49,18,-66}, -{49,18,-65}, -{49,18,-64}, -{49,18,-63}, -{49,18,-62}, -{49,18,-61}, -{49,18,-60}, -{49,18,-59}, -{49,18,-58}, -{49,18,-57}, -{49,18,-56}, -{49,18,-55}, -{49,18,-54}, -{49,18,-53}, -{49,18,-52}, -{49,18,-51}, -{49,18,-50}, -{49,18,-49}, -{49,18,-48}, -{49,18,-47}, -{49,18,-46}, -{49,18,-45}, -{49,18,-44}, -{49,18,-43}, -{49,18,-42}, -{49,18,-41}, -{49,18,-40}, -{49,18,-39}, -{49,18,-38}, -{49,18,-37}, -{49,18,-36}, -{49,18,-35}, -{49,18,-34}, -{49,18,-33}, -{49,18,-32}, -{49,18,-31}, -{49,18,-30}, -{49,18,-29}, -{49,18,-28}, -{49,18,-27}, -{49,18,-26}, -{49,18,-25}, -{49,18,-24}, -{49,18,-23}, -{49,18,-22}, -{49,18,-21}, -{49,18,-20}, -{49,18,-19}, -{49,18,-18}, -{49,18,-17}, -{49,18,-16}, -{49,18,-15}, -{49,18,-14}, -{49,18,-13}, -{49,18,-12}, -{49,18,-11}, -{49,18,-10}, -{49,18,-9}, -{49,18,-8}, -{49,18,-7}, -{49,18,-6}, -{49,18,-5}, -{49,18,-4}, -{49,18,-3}, -{49,18,-2}, -{49,18,-1}, -{49,18,0}, -{49,18,1}, -{49,18,2}, -{49,18,3}, -{49,18,4}, -{49,18,5}, -{49,18,6}, -{49,18,7}, -{49,18,8}, -{49,18,9}, -{49,18,10}, -{49,18,11}, -{49,18,12}, -{49,18,13}, -{49,18,14}, -{49,18,15}, -{49,18,16}, -{49,18,17}, -{49,18,18}, -{49,18,19}, -{49,18,20}, -{49,18,21}, -{49,18,22}, -{49,18,23}, -{49,18,24}, -{49,18,25}, -{49,18,26}, -{49,18,27}, -{49,18,28}, -{49,18,29}, -{49,18,30}, -{49,18,31}, -{49,18,32}, -{49,18,33}, -{49,18,34}, -{49,18,35}, -{49,18,36}, -{49,18,37}, -{49,18,38}, -{49,18,39}, -{49,18,40}, -{49,18,41}, -{49,18,42}, -{49,18,43}, -{49,18,44}, -{49,18,45}, -{49,18,46}, -{49,18,47}, -{49,18,48}, -{49,18,49}, -{49,18,50}, -{49,18,51}, -{49,18,52}, -{49,18,53}, -{49,18,54}, -{49,18,55}, -{49,18,56}, -{49,19,-67}, -{49,19,-66}, -{49,19,-65}, -{49,19,-64}, -{49,19,-63}, -{49,19,-62}, -{49,19,-61}, -{49,19,-60}, -{49,19,-59}, -{49,19,-58}, -{49,19,-57}, -{49,19,-56}, -{49,19,-55}, -{49,19,-54}, -{49,19,-53}, -{49,19,-52}, -{49,19,-51}, -{49,19,-50}, -{49,19,-49}, -{49,19,-48}, -{49,19,-47}, -{49,19,-46}, -{49,19,-45}, -{49,19,-44}, -{49,19,-43}, -{49,19,-42}, -{49,19,-41}, -{49,19,-40}, -{49,19,-39}, -{49,19,-38}, -{49,19,-37}, -{49,19,-36}, -{49,19,-35}, -{49,19,-34}, -{49,19,-33}, -{49,19,-32}, -{49,19,-31}, -{49,19,-30}, -{49,19,-29}, -{49,19,-28}, -{49,19,-27}, -{49,19,-26}, -{49,19,-25}, -{49,19,-24}, -{49,19,-23}, -{49,19,-22}, -{49,19,-21}, -{49,19,-20}, -{49,19,-19}, -{49,19,-18}, -{49,19,-17}, -{49,19,-16}, -{49,19,-15}, -{49,19,-14}, -{49,19,-13}, -{49,19,-12}, -{49,19,-11}, -{49,19,-10}, -{49,19,-9}, -{49,19,-8}, -{49,19,-7}, -{49,19,-6}, -{49,19,-5}, -{49,19,-4}, -{49,19,-3}, -{49,19,-2}, -{49,19,-1}, -{49,19,0}, -{49,19,1}, -{49,19,2}, -{49,19,3}, -{49,19,4}, -{49,19,5}, -{49,19,6}, -{49,19,7}, -{49,19,8}, -{49,19,9}, -{49,19,10}, -{49,19,11}, -{49,19,12}, -{49,19,13}, -{49,19,14}, -{49,19,15}, -{49,19,16}, -{49,19,17}, -{49,19,18}, -{49,19,19}, -{49,19,20}, -{49,19,21}, -{49,19,22}, -{49,19,23}, -{49,19,24}, -{49,19,25}, -{49,19,26}, -{49,19,27}, -{49,19,28}, -{49,19,29}, -{49,19,30}, -{49,19,31}, -{49,19,32}, -{49,19,33}, -{49,19,34}, -{49,19,35}, -{49,19,36}, -{49,19,37}, -{49,19,38}, -{49,19,39}, -{49,19,40}, -{49,19,41}, -{49,19,42}, -{49,19,43}, -{49,19,44}, -{49,19,45}, -{49,19,46}, -{49,19,47}, -{49,19,48}, -{49,19,49}, -{49,19,50}, -{49,19,51}, -{49,19,52}, -{49,19,53}, -{49,19,54}, -{49,19,55}, -{49,19,56}, -{49,20,-68}, -{49,20,-67}, -{49,20,-66}, -{49,20,-65}, -{49,20,-64}, -{49,20,-63}, -{49,20,-62}, -{49,20,-61}, -{49,20,-60}, -{49,20,-59}, -{49,20,-58}, -{49,20,-57}, -{49,20,-56}, -{49,20,-55}, -{49,20,-54}, -{49,20,-53}, -{49,20,-52}, -{49,20,-51}, -{49,20,-50}, -{49,20,-49}, -{49,20,-48}, -{49,20,-47}, -{49,20,-46}, -{49,20,-45}, -{49,20,-44}, -{49,20,-43}, -{49,20,-42}, -{49,20,-41}, -{49,20,-40}, -{49,20,-39}, -{49,20,-38}, -{49,20,-37}, -{49,20,-36}, -{49,20,-35}, -{49,20,-34}, -{49,20,-33}, -{49,20,-32}, -{49,20,-31}, -{49,20,-30}, -{49,20,-29}, -{49,20,-28}, -{49,20,-27}, -{49,20,-26}, -{49,20,-25}, -{49,20,-24}, -{49,20,-23}, -{49,20,-22}, -{49,20,-21}, -{49,20,-20}, -{49,20,-19}, -{49,20,-18}, -{49,20,-17}, -{49,20,-16}, -{49,20,-15}, -{49,20,-14}, -{49,20,-13}, -{49,20,-12}, -{49,20,-11}, -{49,20,-10}, -{49,20,-9}, -{49,20,-8}, -{49,20,-7}, -{49,20,-6}, -{49,20,-5}, -{49,20,-4}, -{49,20,-3}, -{49,20,-2}, -{49,20,-1}, -{49,20,0}, -{49,20,1}, -{49,20,2}, -{49,20,3}, -{49,20,4}, -{49,20,5}, -{49,20,6}, -{49,20,7}, -{49,20,8}, -{49,20,9}, -{49,20,10}, -{49,20,11}, -{49,20,12}, -{49,20,13}, -{49,20,14}, -{49,20,15}, -{49,20,16}, -{49,20,17}, -{49,20,18}, -{49,20,19}, -{49,20,20}, -{49,20,21}, -{49,20,22}, -{49,20,23}, -{49,20,24}, -{49,20,25}, -{49,20,26}, -{49,20,27}, -{49,20,28}, -{49,20,29}, -{49,20,30}, -{49,20,31}, -{49,20,32}, -{49,20,33}, -{49,20,34}, -{49,20,35}, -{49,20,36}, -{49,20,37}, -{49,20,38}, -{49,20,39}, -{49,20,40}, -{49,20,41}, -{49,20,42}, -{49,20,43}, -{49,20,44}, -{49,20,45}, -{49,20,46}, -{49,20,47}, -{49,20,48}, -{49,20,49}, -{49,20,50}, -{49,20,51}, -{49,20,52}, -{49,20,53}, -{49,20,54}, -{49,20,55}, -{49,20,56}, -{49,21,-69}, -{49,21,-68}, -{49,21,-67}, -{49,21,-66}, -{49,21,-65}, -{49,21,-64}, -{49,21,-63}, -{49,21,-62}, -{49,21,-61}, -{49,21,-60}, -{49,21,-59}, -{49,21,-58}, -{49,21,-57}, -{49,21,-56}, -{49,21,-55}, -{49,21,-54}, -{49,21,-53}, -{49,21,-52}, -{49,21,-51}, -{49,21,-50}, -{49,21,-49}, -{49,21,-48}, -{49,21,-47}, -{49,21,-46}, -{49,21,-45}, -{49,21,-44}, -{49,21,-43}, -{49,21,-42}, -{49,21,-41}, -{49,21,-40}, -{49,21,-39}, -{49,21,-38}, -{49,21,-37}, -{49,21,-36}, -{49,21,-35}, -{49,21,-34}, -{49,21,-33}, -{49,21,-32}, -{49,21,-31}, -{49,21,-30}, -{49,21,-29}, -{49,21,-28}, -{49,21,-27}, -{49,21,-26}, -{49,21,-25}, -{49,21,-24}, -{49,21,-23}, -{49,21,-22}, -{49,21,-21}, -{49,21,-20}, -{49,21,-19}, -{49,21,-18}, -{49,21,-17}, -{49,21,-16}, -{49,21,-15}, -{49,21,-14}, -{49,21,-13}, -{49,21,-12}, -{49,21,-11}, -{49,21,-10}, -{49,21,-9}, -{49,21,-8}, -{49,21,-7}, -{49,21,-6}, -{49,21,-5}, -{49,21,-4}, -{49,21,-3}, -{49,21,-2}, -{49,21,-1}, -{49,21,0}, -{49,21,1}, -{49,21,2}, -{49,21,3}, -{49,21,4}, -{49,21,5}, -{49,21,6}, -{49,21,7}, -{49,21,8}, -{49,21,9}, -{49,21,10}, -{49,21,11}, -{49,21,12}, -{49,21,13}, -{49,21,14}, -{49,21,15}, -{49,21,16}, -{49,21,17}, -{49,21,18}, -{49,21,19}, -{49,21,20}, -{49,21,21}, -{49,21,22}, -{49,21,23}, -{49,21,24}, -{49,21,25}, -{49,21,26}, -{49,21,27}, -{49,21,28}, -{49,21,29}, -{49,21,30}, -{49,21,31}, -{49,21,32}, -{49,21,33}, -{49,21,34}, -{49,21,35}, -{49,21,36}, -{49,21,37}, -{49,21,38}, -{49,21,39}, -{49,21,40}, -{49,21,41}, -{49,21,42}, -{49,21,43}, -{49,21,44}, -{49,21,45}, -{49,21,46}, -{49,21,47}, -{49,21,48}, -{49,21,49}, -{49,21,50}, -{49,21,51}, -{49,21,52}, -{49,21,53}, -{49,21,54}, -{49,21,55}, -{49,21,56}, -{49,22,-70}, -{49,22,-69}, -{49,22,-68}, -{49,22,-67}, -{49,22,-66}, -{49,22,-65}, -{49,22,-64}, -{49,22,-63}, -{49,22,-62}, -{49,22,-61}, -{49,22,-60}, -{49,22,-59}, -{49,22,-58}, -{49,22,-57}, -{49,22,-56}, -{49,22,-55}, -{49,22,-54}, -{49,22,-53}, -{49,22,-52}, -{49,22,-51}, -{49,22,-50}, -{49,22,-49}, -{49,22,-48}, -{49,22,-47}, -{49,22,-46}, -{49,22,-45}, -{49,22,-44}, -{49,22,-43}, -{49,22,-42}, -{49,22,-41}, -{49,22,-40}, -{49,22,-39}, -{49,22,-38}, -{49,22,-37}, -{49,22,-36}, -{49,22,-35}, -{49,22,-34}, -{49,22,-33}, -{49,22,-32}, -{49,22,-31}, -{49,22,-30}, -{49,22,-29}, -{49,22,-28}, -{49,22,-27}, -{49,22,-26}, -{49,22,-25}, -{49,22,-24}, -{49,22,-23}, -{49,22,-22}, -{49,22,-21}, -{49,22,-20}, -{49,22,-19}, -{49,22,-18}, -{49,22,-17}, -{49,22,-16}, -{49,22,-15}, -{49,22,-14}, -{49,22,-13}, -{49,22,-12}, -{49,22,-11}, -{49,22,-10}, -{49,22,-9}, -{49,22,-8}, -{49,22,-7}, -{49,22,-6}, -{49,22,-5}, -{49,22,-4}, -{49,22,-3}, -{49,22,-2}, -{49,22,-1}, -{49,22,0}, -{49,22,1}, -{49,22,2}, -{49,22,3}, -{49,22,4}, -{49,22,5}, -{49,22,6}, -{49,22,7}, -{49,22,8}, -{49,22,9}, -{49,22,10}, -{49,22,11}, -{49,22,12}, -{49,22,13}, -{49,22,14}, -{49,22,15}, -{49,22,16}, -{49,22,17}, -{49,22,18}, -{49,22,19}, -{49,22,20}, -{49,22,21}, -{49,22,22}, -{49,22,23}, -{49,22,24}, -{49,22,25}, -{49,22,26}, -{49,22,27}, -{49,22,28}, -{49,22,29}, -{49,22,30}, -{49,22,31}, -{49,22,32}, -{49,22,33}, -{49,22,34}, -{49,22,35}, -{49,22,36}, -{49,22,37}, -{49,22,38}, -{49,22,39}, -{49,22,40}, -{49,22,41}, -{49,22,42}, -{49,22,43}, -{49,22,44}, -{49,22,45}, -{49,22,46}, -{49,22,47}, -{49,22,48}, -{49,22,49}, -{49,22,50}, -{49,22,51}, -{49,22,52}, -{49,22,53}, -{49,22,54}, -{49,22,55}, -{49,22,56}, -{49,22,57}, -{49,23,-71}, -{49,23,-70}, -{49,23,-69}, -{49,23,-68}, -{49,23,-67}, -{49,23,-66}, -{49,23,-65}, -{49,23,-64}, -{49,23,-63}, -{49,23,-62}, -{49,23,-61}, -{49,23,-60}, -{49,23,-59}, -{49,23,-58}, -{49,23,-57}, -{49,23,-56}, -{49,23,-55}, -{49,23,-54}, -{49,23,-53}, -{49,23,-52}, -{49,23,-51}, -{49,23,-50}, -{49,23,-49}, -{49,23,-48}, -{49,23,-47}, -{49,23,-46}, -{49,23,-45}, -{49,23,-44}, -{49,23,-43}, -{49,23,-42}, -{49,23,-41}, -{49,23,-40}, -{49,23,-39}, -{49,23,-38}, -{49,23,-37}, -{49,23,-36}, -{49,23,-35}, -{49,23,-34}, -{49,23,-33}, -{49,23,-32}, -{49,23,-31}, -{49,23,-30}, -{49,23,-29}, -{49,23,-28}, -{49,23,-27}, -{49,23,-26}, -{49,23,-25}, -{49,23,-24}, -{49,23,-23}, -{49,23,-22}, -{49,23,-21}, -{49,23,-20}, -{49,23,-19}, -{49,23,-18}, -{49,23,-17}, -{49,23,-16}, -{49,23,-15}, -{49,23,-14}, -{49,23,-13}, -{49,23,-12}, -{49,23,-11}, -{49,23,-10}, -{49,23,-9}, -{49,23,-8}, -{49,23,-7}, -{49,23,-6}, -{49,23,-5}, -{49,23,-4}, -{49,23,-3}, -{49,23,-2}, -{49,23,-1}, -{49,23,0}, -{49,23,1}, -{49,23,2}, -{49,23,3}, -{49,23,4}, -{49,23,5}, -{49,23,6}, -{49,23,7}, -{49,23,8}, -{49,23,9}, -{49,23,10}, -{49,23,11}, -{49,23,12}, -{49,23,13}, -{49,23,14}, -{49,23,15}, -{49,23,16}, -{49,23,17}, -{49,23,18}, -{49,23,19}, -{49,23,20}, -{49,23,21}, -{49,23,22}, -{49,23,23}, -{49,23,24}, -{49,23,25}, -{49,23,26}, -{49,23,27}, -{49,23,28}, -{49,23,29}, -{49,23,30}, -{49,23,31}, -{49,23,32}, -{49,23,33}, -{49,23,34}, -{49,23,35}, -{49,23,36}, -{49,23,37}, -{49,23,38}, -{49,23,39}, -{49,23,40}, -{49,23,41}, -{49,23,42}, -{49,23,43}, -{49,23,44}, -{49,23,45}, -{49,23,46}, -{49,23,47}, -{49,23,48}, -{49,23,49}, -{49,23,50}, -{49,23,51}, -{49,23,52}, -{49,23,53}, -{49,23,54}, -{49,23,55}, -{49,23,56}, -{49,23,57}, -{49,24,-72}, -{49,24,-71}, -{49,24,-70}, -{49,24,-69}, -{49,24,-68}, -{49,24,-67}, -{49,24,-66}, -{49,24,-65}, -{49,24,-64}, -{49,24,-63}, -{49,24,-62}, -{49,24,-61}, -{49,24,-60}, -{49,24,-59}, -{49,24,-58}, -{49,24,-57}, -{49,24,-56}, -{49,24,-55}, -{49,24,-54}, -{49,24,-53}, -{49,24,-52}, -{49,24,-51}, -{49,24,-50}, -{49,24,-49}, -{49,24,-48}, -{49,24,-47}, -{49,24,-46}, -{49,24,-45}, -{49,24,-44}, -{49,24,-43}, -{49,24,-42}, -{49,24,-41}, -{49,24,-40}, -{49,24,-39}, -{49,24,-38}, -{49,24,-37}, -{49,24,-36}, -{49,24,-35}, -{49,24,-34}, -{49,24,-33}, -{49,24,-32}, -{49,24,-31}, -{49,24,-30}, -{49,24,-29}, -{49,24,-28}, -{49,24,-27}, -{49,24,-26}, -{49,24,-25}, -{49,24,-24}, -{49,24,-23}, -{49,24,-22}, -{49,24,-21}, -{49,24,-20}, -{49,24,-19}, -{49,24,-18}, -{49,24,-17}, -{49,24,-16}, -{49,24,-15}, -{49,24,-14}, -{49,24,-13}, -{49,24,-12}, -{49,24,-11}, -{49,24,-10}, -{49,24,-9}, -{49,24,-8}, -{49,24,-7}, -{49,24,-6}, -{49,24,-5}, -{49,24,-4}, -{49,24,-3}, -{49,24,-2}, -{49,24,-1}, -{49,24,0}, -{49,24,1}, -{49,24,2}, -{49,24,3}, -{49,24,4}, -{49,24,5}, -{49,24,6}, -{49,24,7}, -{49,24,8}, -{49,24,9}, -{49,24,10}, -{49,24,11}, -{49,24,12}, -{49,24,13}, -{49,24,14}, -{49,24,15}, -{49,24,16}, -{49,24,17}, -{49,24,18}, -{49,24,19}, -{49,24,20}, -{49,24,21}, -{49,24,22}, -{49,24,23}, -{49,24,24}, -{49,24,25}, -{49,24,26}, -{49,24,27}, -{49,24,28}, -{49,24,29}, -{49,24,30}, -{49,24,31}, -{49,24,32}, -{49,24,33}, -{49,24,34}, -{49,24,35}, -{49,24,36}, -{49,24,37}, -{49,24,38}, -{49,24,39}, -{49,24,40}, -{49,24,41}, -{49,24,42}, -{49,24,43}, -{49,24,44}, -{49,24,45}, -{49,24,46}, -{49,24,47}, -{49,24,48}, -{49,24,49}, -{49,24,50}, -{49,24,51}, -{49,24,52}, -{49,24,53}, -{49,24,54}, -{49,24,55}, -{49,24,56}, -{49,24,57}, -{49,25,-73}, -{49,25,-72}, -{49,25,-71}, -{49,25,-70}, -{49,25,-69}, -{49,25,-68}, -{49,25,-67}, -{49,25,-66}, -{49,25,-65}, -{49,25,-64}, -{49,25,-63}, -{49,25,-62}, -{49,25,-61}, -{49,25,-60}, -{49,25,-59}, -{49,25,-58}, -{49,25,-57}, -{49,25,-56}, -{49,25,-55}, -{49,25,-54}, -{49,25,-53}, -{49,25,-52}, -{49,25,-51}, -{49,25,-50}, -{49,25,-49}, -{49,25,-48}, -{49,25,-47}, -{49,25,-46}, -{49,25,-45}, -{49,25,-44}, -{49,25,-43}, -{49,25,-42}, -{49,25,-41}, -{49,25,-40}, -{49,25,-39}, -{49,25,-38}, -{49,25,-37}, -{49,25,-36}, -{49,25,-35}, -{49,25,-34}, -{49,25,-33}, -{49,25,-32}, -{49,25,-31}, -{49,25,-30}, -{49,25,-29}, -{49,25,-28}, -{49,25,-27}, -{49,25,-26}, -{49,25,-25}, -{49,25,-24}, -{49,25,-23}, -{49,25,-22}, -{49,25,-21}, -{49,25,-20}, -{49,25,-19}, -{49,25,-18}, -{49,25,-17}, -{49,25,-16}, -{49,25,-15}, -{49,25,-14}, -{49,25,-13}, -{49,25,-12}, -{49,25,-11}, -{49,25,-10}, -{49,25,-9}, -{49,25,-8}, -{49,25,-7}, -{49,25,-6}, -{49,25,-5}, -{49,25,-4}, -{49,25,-3}, -{49,25,-2}, -{49,25,-1}, -{49,25,0}, -{49,25,1}, -{49,25,2}, -{49,25,3}, -{49,25,4}, -{49,25,5}, -{49,25,6}, -{49,25,7}, -{49,25,8}, -{49,25,9}, -{49,25,10}, -{49,25,11}, -{49,25,12}, -{49,25,13}, -{49,25,14}, -{49,25,15}, -{49,25,16}, -{49,25,17}, -{49,25,18}, -{49,25,19}, -{49,25,20}, -{49,25,21}, -{49,25,22}, -{49,25,23}, -{49,25,24}, -{49,25,25}, -{49,25,26}, -{49,25,27}, -{49,25,28}, -{49,25,29}, -{49,25,30}, -{49,25,31}, -{49,25,32}, -{49,25,33}, -{49,25,34}, -{49,25,35}, -{49,25,36}, -{49,25,37}, -{49,25,38}, -{49,25,39}, -{49,25,40}, -{49,25,41}, -{49,25,42}, -{49,25,43}, -{49,25,44}, -{49,25,45}, -{49,25,46}, -{49,25,47}, -{49,25,48}, -{49,25,49}, -{49,25,50}, -{49,25,51}, -{49,25,52}, -{49,25,53}, -{49,25,54}, -{49,25,55}, -{49,25,56}, -{49,25,57}, -{49,26,-74}, -{49,26,-73}, -{49,26,-72}, -{49,26,-71}, -{49,26,-70}, -{49,26,-69}, -{49,26,-68}, -{49,26,-67}, -{49,26,-66}, -{49,26,-65}, -{49,26,-64}, -{49,26,-63}, -{49,26,-62}, -{49,26,-61}, -{49,26,-60}, -{49,26,-59}, -{49,26,-58}, -{49,26,-57}, -{49,26,-56}, -{49,26,-55}, -{49,26,-54}, -{49,26,-53}, -{49,26,-52}, -{49,26,-51}, -{49,26,-50}, -{49,26,-49}, -{49,26,-48}, -{49,26,-47}, -{49,26,-46}, -{49,26,-45}, -{49,26,-44}, -{49,26,-43}, -{49,26,-42}, -{49,26,-41}, -{49,26,-40}, -{49,26,-39}, -{49,26,-38}, -{49,26,-37}, -{49,26,-36}, -{49,26,-35}, -{49,26,-34}, -{49,26,-33}, -{49,26,-32}, -{49,26,-31}, -{49,26,-30}, -{49,26,-29}, -{49,26,-28}, -{49,26,-27}, -{49,26,-26}, -{49,26,-25}, -{49,26,-24}, -{49,26,-23}, -{49,26,-22}, -{49,26,-21}, -{49,26,-20}, -{49,26,-19}, -{49,26,-18}, -{49,26,-17}, -{49,26,-16}, -{49,26,-15}, -{49,26,-14}, -{49,26,-13}, -{49,26,-12}, -{49,26,-11}, -{49,26,-10}, -{49,26,-9}, -{49,26,-8}, -{49,26,-7}, -{49,26,-6}, -{49,26,-5}, -{49,26,-4}, -{49,26,-3}, -{49,26,-2}, -{49,26,-1}, -{49,26,0}, -{49,26,1}, -{49,26,2}, -{49,26,3}, -{49,26,4}, -{49,26,5}, -{49,26,6}, -{49,26,7}, -{49,26,8}, -{49,26,9}, -{49,26,10}, -{49,26,11}, -{49,26,12}, -{49,26,13}, -{49,26,14}, -{49,26,15}, -{49,26,16}, -{49,26,17}, -{49,26,18}, -{49,26,19}, -{49,26,20}, -{49,26,21}, -{49,26,22}, -{49,26,23}, -{49,26,24}, -{49,26,25}, -{49,26,26}, -{49,26,27}, -{49,26,28}, -{49,26,29}, -{49,26,30}, -{49,26,31}, -{49,26,32}, -{49,26,33}, -{49,26,34}, -{49,26,35}, -{49,26,36}, -{49,26,37}, -{49,26,38}, -{49,26,39}, -{49,26,40}, -{49,26,41}, -{49,26,42}, -{49,26,43}, -{49,26,44}, -{49,26,45}, -{49,26,46}, -{49,26,47}, -{49,26,48}, -{49,26,49}, -{49,26,50}, -{49,26,51}, -{49,26,52}, -{49,26,53}, -{49,26,54}, -{49,26,55}, -{49,26,56}, -{49,26,57}, -{49,27,-75}, -{49,27,-74}, -{49,27,-73}, -{49,27,-72}, -{49,27,-71}, -{49,27,-70}, -{49,27,-69}, -{49,27,-68}, -{49,27,-67}, -{49,27,-66}, -{49,27,-65}, -{49,27,-64}, -{49,27,-63}, -{49,27,-62}, -{49,27,-61}, -{49,27,-60}, -{49,27,-59}, -{49,27,-58}, -{49,27,-57}, -{49,27,-56}, -{49,27,-55}, -{49,27,-54}, -{49,27,-53}, -{49,27,-52}, -{49,27,-51}, -{49,27,-50}, -{49,27,-49}, -{49,27,-48}, -{49,27,-47}, -{49,27,-46}, -{49,27,-45}, -{49,27,-44}, -{49,27,-43}, -{49,27,-42}, -{49,27,-41}, -{49,27,-40}, -{49,27,-39}, -{49,27,-38}, -{49,27,-37}, -{49,27,-36}, -{49,27,-35}, -{49,27,-34}, -{49,27,-33}, -{49,27,-32}, -{49,27,-31}, -{49,27,-30}, -{49,27,-29}, -{49,27,-28}, -{49,27,-27}, -{49,27,-26}, -{49,27,-25}, -{49,27,-24}, -{49,27,-23}, -{49,27,-22}, -{49,27,-21}, -{49,27,-20}, -{49,27,-19}, -{49,27,-18}, -{49,27,-17}, -{49,27,-16}, -{49,27,-15}, -{49,27,-14}, -{49,27,-13}, -{49,27,-12}, -{49,27,-11}, -{49,27,-10}, -{49,27,-9}, -{49,27,-8}, -{49,27,-7}, -{49,27,-6}, -{49,27,-5}, -{49,27,-4}, -{49,27,-3}, -{49,27,-2}, -{49,27,-1}, -{49,27,0}, -{49,27,1}, -{49,27,2}, -{49,27,3}, -{49,27,4}, -{49,27,5}, -{49,27,6}, -{49,27,7}, -{49,27,8}, -{49,27,9}, -{49,27,10}, -{49,27,11}, -{49,27,12}, -{49,27,13}, -{49,27,14}, -{49,27,15}, -{49,27,16}, -{49,27,17}, -{49,27,18}, -{49,27,19}, -{49,27,20}, -{49,27,21}, -{49,27,22}, -{49,27,23}, -{49,27,24}, -{49,27,25}, -{49,27,26}, -{49,27,27}, -{49,27,28}, -{49,27,29}, -{49,27,30}, -{49,27,31}, -{49,27,32}, -{49,27,33}, -{49,27,34}, -{49,27,35}, -{49,27,36}, -{49,27,37}, -{49,27,38}, -{49,27,39}, -{49,27,40}, -{49,27,41}, -{49,27,42}, -{49,27,43}, -{49,27,44}, -{49,27,45}, -{49,27,46}, -{49,27,47}, -{49,27,48}, -{49,27,49}, -{49,27,50}, -{49,27,51}, -{49,27,52}, -{49,27,53}, -{49,27,54}, -{49,27,55}, -{49,27,56}, -{49,27,57}, -{49,28,-76}, -{49,28,-75}, -{49,28,-74}, -{49,28,-73}, -{49,28,-72}, -{49,28,-71}, -{49,28,-70}, -{49,28,-69}, -{49,28,-68}, -{49,28,-67}, -{49,28,-66}, -{49,28,-65}, -{49,28,-64}, -{49,28,-63}, -{49,28,-62}, -{49,28,-61}, -{49,28,-60}, -{49,28,-59}, -{49,28,-58}, -{49,28,-57}, -{49,28,-56}, -{49,28,-55}, -{49,28,-54}, -{49,28,-53}, -{49,28,-52}, -{49,28,-51}, -{49,28,-50}, -{49,28,-49}, -{49,28,-48}, -{49,28,-47}, -{49,28,-46}, -{49,28,-45}, -{49,28,-44}, -{49,28,-43}, -{49,28,-42}, -{49,28,-41}, -{49,28,-40}, -{49,28,-39}, -{49,28,-38}, -{49,28,-37}, -{49,28,-36}, -{49,28,-35}, -{49,28,-34}, -{49,28,-33}, -{49,28,-32}, -{49,28,-31}, -{49,28,-30}, -{49,28,-29}, -{49,28,-28}, -{49,28,-27}, -{49,28,-26}, -{49,28,-25}, -{49,28,-24}, -{49,28,-23}, -{49,28,-22}, -{49,28,-21}, -{49,28,-20}, -{49,28,-19}, -{49,28,-18}, -{49,28,-17}, -{49,28,-16}, -{49,28,-15}, -{49,28,-14}, -{49,28,-13}, -{49,28,-12}, -{49,28,-11}, -{49,28,-10}, -{49,28,-9}, -{49,28,-8}, -{49,28,-7}, -{49,28,-6}, -{49,28,-5}, -{49,28,-4}, -{49,28,-3}, -{49,28,-2}, -{49,28,-1}, -{49,28,0}, -{49,28,1}, -{49,28,2}, -{49,28,3}, -{49,28,4}, -{49,28,5}, -{49,28,6}, -{49,28,7}, -{49,28,8}, -{49,28,9}, -{49,28,10}, -{49,28,11}, -{49,28,12}, -{49,28,13}, -{49,28,14}, -{49,28,15}, -{49,28,16}, -{49,28,17}, -{49,28,18}, -{49,28,19}, -{49,28,20}, -{49,28,21}, -{49,28,22}, -{49,28,23}, -{49,28,24}, -{49,28,25}, -{49,28,26}, -{49,28,27}, -{49,28,28}, -{49,28,29}, -{49,28,30}, -{49,28,31}, -{49,28,32}, -{49,28,33}, -{49,28,34}, -{49,28,35}, -{49,28,36}, -{49,28,37}, -{49,28,38}, -{49,28,39}, -{49,28,40}, -{49,28,41}, -{49,28,42}, -{49,28,43}, -{49,28,44}, -{49,28,45}, -{49,28,46}, -{49,28,47}, -{49,28,48}, -{49,28,49}, -{49,28,50}, -{49,28,51}, -{49,28,52}, -{49,28,53}, -{49,28,54}, -{49,28,55}, -{49,28,56}, -{49,28,57}, -{49,29,-77}, -{49,29,-76}, -{49,29,-75}, -{49,29,-74}, -{49,29,-73}, -{49,29,-72}, -{49,29,-71}, -{49,29,-70}, -{49,29,-69}, -{49,29,-68}, -{49,29,-67}, -{49,29,-66}, -{49,29,-65}, -{49,29,-64}, -{49,29,-63}, -{49,29,-62}, -{49,29,-61}, -{49,29,-60}, -{49,29,-59}, -{49,29,-58}, -{49,29,-57}, -{49,29,-56}, -{49,29,-55}, -{49,29,-54}, -{49,29,-53}, -{49,29,-52}, -{49,29,-51}, -{49,29,-50}, -{49,29,-49}, -{49,29,-48}, -{49,29,-47}, -{49,29,-46}, -{49,29,-45}, -{49,29,-44}, -{49,29,-43}, -{49,29,-42}, -{49,29,-41}, -{49,29,-40}, -{49,29,-39}, -{49,29,-38}, -{49,29,-37}, -{49,29,-36}, -{49,29,-35}, -{49,29,-34}, -{49,29,-33}, -{49,29,-32}, -{49,29,-31}, -{49,29,-30}, -{49,29,-29}, -{49,29,-28}, -{49,29,-27}, -{49,29,-26}, -{49,29,-25}, -{49,29,-24}, -{49,29,-23}, -{49,29,-22}, -{49,29,-21}, -{49,29,-20}, -{49,29,-19}, -{49,29,-18}, -{49,29,-17}, -{49,29,-16}, -{49,29,-15}, -{49,29,-14}, -{49,29,-13}, -{49,29,-12}, -{49,29,-11}, -{49,29,-10}, -{49,29,-9}, -{49,29,-8}, -{49,29,-7}, -{49,29,-6}, -{49,29,-5}, -{49,29,-4}, -{49,29,-3}, -{49,29,-2}, -{49,29,-1}, -{49,29,0}, -{49,29,1}, -{49,29,2}, -{49,29,3}, -{49,29,4}, -{49,29,5}, -{49,29,6}, -{49,29,7}, -{49,29,8}, -{49,29,9}, -{49,29,10}, -{49,29,11}, -{49,29,12}, -{49,29,13}, -{49,29,14}, -{49,29,15}, -{49,29,16}, -{49,29,17}, -{49,29,18}, -{49,29,19}, -{49,29,20}, -{49,29,21}, -{49,29,22}, -{49,29,23}, -{49,29,24}, -{49,29,25}, -{49,29,26}, -{49,29,27}, -{49,29,28}, -{49,29,29}, -{49,29,30}, -{49,29,31}, -{49,29,32}, -{49,29,33}, -{49,29,34}, -{49,29,35}, -{49,29,36}, -{49,29,37}, -{49,29,38}, -{49,29,39}, -{49,29,40}, -{49,29,41}, -{49,29,42}, -{49,29,43}, -{49,29,44}, -{49,29,45}, -{49,29,46}, -{49,29,47}, -{49,29,48}, -{49,29,49}, -{49,29,50}, -{49,29,51}, -{49,29,52}, -{49,29,53}, -{49,29,54}, -{49,29,55}, -{49,29,56}, -{49,29,57}, -{49,30,-78}, -{49,30,-77}, -{49,30,-76}, -{49,30,-75}, -{49,30,-74}, -{49,30,-73}, -{49,30,-72}, -{49,30,-71}, -{49,30,-70}, -{49,30,-69}, -{49,30,-68}, -{49,30,-67}, -{49,30,-66}, -{49,30,-65}, -{49,30,-64}, -{49,30,-63}, -{49,30,-62}, -{49,30,-61}, -{49,30,-60}, -{49,30,-59}, -{49,30,-58}, -{49,30,-57}, -{49,30,-56}, -{49,30,-55}, -{49,30,-54}, -{49,30,-53}, -{49,30,-52}, -{49,30,-51}, -{49,30,-50}, -{49,30,-49}, -{49,30,-48}, -{49,30,-47}, -{49,30,-46}, -{49,30,-45}, -{49,30,-44}, -{49,30,-43}, -{49,30,-42}, -{49,30,-41}, -{49,30,-40}, -{49,30,-39}, -{49,30,-38}, -{49,30,-37}, -{49,30,-36}, -{49,30,-35}, -{49,30,-34}, -{49,30,-33}, -{49,30,-32}, -{49,30,-31}, -{49,30,-30}, -{49,30,-29}, -{49,30,-28}, -{49,30,-27}, -{49,30,-26}, -{49,30,-25}, -{49,30,-24}, -{49,30,-23}, -{49,30,-22}, -{49,30,-21}, -{49,30,-20}, -{49,30,-19}, -{49,30,-18}, -{49,30,-17}, -{49,30,-16}, -{49,30,-15}, -{49,30,-14}, -{49,30,-13}, -{49,30,-12}, -{49,30,-11}, -{49,30,-10}, -{49,30,-9}, -{49,30,-8}, -{49,30,-7}, -{49,30,-6}, -{49,30,-5}, -{49,30,-4}, -{49,30,-3}, -{49,30,-2}, -{49,30,-1}, -{49,30,0}, -{49,30,1}, -{49,30,2}, -{49,30,3}, -{49,30,4}, -{49,30,5}, -{49,30,6}, -{49,30,7}, -{49,30,8}, -{49,30,9}, -{49,30,10}, -{49,30,11}, -{49,30,12}, -{49,30,13}, -{49,30,14}, -{49,30,15}, -{49,30,16}, -{49,30,17}, -{49,30,18}, -{49,30,19}, -{49,30,20}, -{49,30,21}, -{49,30,22}, -{49,30,23}, -{49,30,24}, -{49,30,25}, -{49,30,26}, -{49,30,27}, -{49,30,28}, -{49,30,29}, -{49,30,30}, -{49,30,31}, -{49,30,32}, -{49,30,33}, -{49,30,34}, -{49,30,35}, -{49,30,36}, -{49,30,37}, -{49,30,38}, -{49,30,39}, -{49,30,40}, -{49,30,41}, -{49,30,42}, -{49,30,43}, -{49,30,44}, -{49,30,45}, -{49,30,46}, -{49,30,47}, -{49,30,48}, -{49,30,49}, -{49,30,50}, -{49,30,51}, -{49,30,52}, -{49,30,53}, -{49,30,54}, -{49,30,55}, -{49,30,56}, -{49,30,57}, -{49,31,-78}, -{49,31,-77}, -{49,31,-76}, -{49,31,-75}, -{49,31,-74}, -{49,31,-73}, -{49,31,-72}, -{49,31,-71}, -{49,31,-70}, -{49,31,-69}, -{49,31,-68}, -{49,31,-67}, -{49,31,-66}, -{49,31,-65}, -{49,31,-64}, -{49,31,-63}, -{49,31,-62}, -{49,31,-61}, -{49,31,-60}, -{49,31,-59}, -{49,31,-58}, -{49,31,-57}, -{49,31,-56}, -{49,31,-55}, -{49,31,-54}, -{49,31,-53}, -{49,31,-52}, -{49,31,-51}, -{49,31,-50}, -{49,31,-49}, -{49,31,-48}, -{49,31,-47}, -{49,31,-46}, -{49,31,-45}, -{49,31,-44}, -{49,31,-43}, -{49,31,-42}, -{49,31,-41}, -{49,31,-40}, -{49,31,-39}, -{49,31,-38}, -{49,31,-37}, -{49,31,-36}, -{49,31,-35}, -{49,31,-34}, -{49,31,-33}, -{49,31,-32}, -{49,31,-31}, -{49,31,-30}, -{49,31,-29}, -{49,31,-28}, -{49,31,-27}, -{49,31,-26}, -{49,31,-25}, -{49,31,-24}, -{49,31,-23}, -{49,31,-22}, -{49,31,-21}, -{49,31,-20}, -{49,31,-19}, -{49,31,-18}, -{49,31,-17}, -{49,31,-16}, -{49,31,-15}, -{49,31,-14}, -{49,31,-13}, -{49,31,-12}, -{49,31,-11}, -{49,31,-10}, -{49,31,-9}, -{49,31,-8}, -{49,31,-7}, -{49,31,-6}, -{49,31,-5}, -{49,31,-4}, -{49,31,-3}, -{49,31,-2}, -{49,31,-1}, -{49,31,0}, -{49,31,1}, -{49,31,2}, -{49,31,3}, -{49,31,4}, -{49,31,5}, -{49,31,6}, -{49,31,7}, -{49,31,8}, -{49,31,9}, -{49,31,10}, -{49,31,11}, -{49,31,12}, -{49,31,13}, -{49,31,14}, -{49,31,15}, -{49,31,16}, -{49,31,17}, -{49,31,18}, -{49,31,19}, -{49,31,20}, -{49,31,21}, -{49,31,22}, -{49,31,23}, -{49,31,24}, -{49,31,25}, -{49,31,26}, -{49,31,27}, -{49,31,28}, -{49,31,29}, -{49,31,30}, -{49,31,31}, -{49,31,32}, -{49,31,33}, -{49,31,34}, -{49,31,35}, -{49,31,36}, -{49,31,37}, -{49,31,38}, -{49,31,39}, -{49,31,40}, -{49,31,41}, -{49,31,42}, -{49,31,43}, -{49,31,44}, -{49,31,45}, -{49,31,46}, -{49,31,47}, -{49,31,48}, -{49,31,49}, -{49,31,50}, -{49,31,51}, -{49,31,52}, -{49,31,53}, -{49,31,54}, -{49,31,55}, -{49,31,56}, -{49,31,57}, -{49,32,-79}, -{49,32,-78}, -{49,32,-77}, -{49,32,-76}, -{49,32,-75}, -{49,32,-74}, -{49,32,-73}, -{49,32,-72}, -{49,32,-71}, -{49,32,-70}, -{49,32,-69}, -{49,32,-68}, -{49,32,-67}, -{49,32,-66}, -{49,32,-65}, -{49,32,-64}, -{49,32,-63}, -{49,32,-62}, -{49,32,-61}, -{49,32,-60}, -{49,32,-59}, -{49,32,-58}, -{49,32,-57}, -{49,32,-56}, -{49,32,-55}, -{49,32,-54}, -{49,32,-53}, -{49,32,-52}, -{49,32,-51}, -{49,32,-50}, -{49,32,-49}, -{49,32,-48}, -{49,32,-47}, -{49,32,-46}, -{49,32,-45}, -{49,32,-44}, -{49,32,-43}, -{49,32,-42}, -{49,32,-41}, -{49,32,-40}, -{49,32,-39}, -{49,32,-38}, -{49,32,-37}, -{49,32,-36}, -{49,32,-35}, -{49,32,-34}, -{49,32,-33}, -{49,32,-32}, -{49,32,-31}, -{49,32,-30}, -{49,32,-29}, -{49,32,-28}, -{49,32,-27}, -{49,32,-26}, -{49,32,-25}, -{49,32,-24}, -{49,32,-23}, -{49,32,-22}, -{49,32,-21}, -{49,32,-20}, -{49,32,-19}, -{49,32,-18}, -{49,32,-17}, -{49,32,-16}, -{49,32,-15}, -{49,32,-14}, -{49,32,-13}, -{49,32,-12}, -{49,32,-11}, -{49,32,-10}, -{49,32,-9}, -{49,32,-8}, -{49,32,-7}, -{49,32,-6}, -{49,32,-5}, -{49,32,-4}, -{49,32,-3}, -{49,32,-2}, -{49,32,-1}, -{49,32,0}, -{49,32,1}, -{49,32,2}, -{49,32,3}, -{49,32,4}, -{49,32,5}, -{49,32,6}, -{49,32,7}, -{49,32,8}, -{49,32,9}, -{49,32,10}, -{49,32,11}, -{49,32,12}, -{49,32,13}, -{49,32,14}, -{49,32,15}, -{49,32,16}, -{49,32,17}, -{49,32,18}, -{49,32,19}, -{49,32,20}, -{49,32,21}, -{49,32,22}, -{49,32,23}, -{49,32,24}, -{49,32,25}, -{49,32,26}, -{49,32,27}, -{49,32,28}, -{49,32,29}, -{49,32,30}, -{49,32,31}, -{49,32,32}, -{49,32,33}, -{49,32,34}, -{49,32,35}, -{49,32,36}, -{49,32,37}, -{49,32,38}, -{49,32,39}, -{49,32,40}, -{49,32,41}, -{49,32,42}, -{49,32,43}, -{49,32,44}, -{49,32,45}, -{49,32,46}, -{49,32,47}, -{49,32,48}, -{49,32,49}, -{49,32,50}, -{49,32,51}, -{49,32,52}, -{49,32,53}, -{49,32,54}, -{49,32,55}, -{49,32,56}, -{49,32,57}, -{49,33,-80}, -{49,33,-79}, -{49,33,-78}, -{49,33,-77}, -{49,33,-76}, -{49,33,-75}, -{49,33,-74}, -{49,33,-73}, -{49,33,-72}, -{49,33,-71}, -{49,33,-70}, -{49,33,-69}, -{49,33,-68}, -{49,33,-67}, -{49,33,-66}, -{49,33,-65}, -{49,33,-64}, -{49,33,-63}, -{49,33,-62}, -{49,33,-61}, -{49,33,-60}, -{49,33,-59}, -{49,33,-58}, -{49,33,-57}, -{49,33,-56}, -{49,33,-55}, -{49,33,-54}, -{49,33,-53}, -{49,33,-52}, -{49,33,-51}, -{49,33,-50}, -{49,33,-49}, -{49,33,-48}, -{49,33,-47}, -{49,33,-46}, -{49,33,-45}, -{49,33,-44}, -{49,33,-43}, -{49,33,-42}, -{49,33,-41}, -{49,33,-40}, -{49,33,-39}, -{49,33,-38}, -{49,33,-37}, -{49,33,-36}, -{49,33,-35}, -{49,33,-34}, -{49,33,-33}, -{49,33,-32}, -{49,33,-31}, -{49,33,-30}, -{49,33,-29}, -{49,33,-28}, -{49,33,-27}, -{49,33,-26}, -{49,33,-25}, -{49,33,-24}, -{49,33,-23}, -{49,33,-22}, -{49,33,-21}, -{49,33,-20}, -{49,33,-19}, -{49,33,-18}, -{49,33,-17}, -{49,33,-16}, -{49,33,-15}, -{49,33,-14}, -{49,33,-13}, -{49,33,-12}, -{49,33,-11}, -{49,33,-10}, -{49,33,-9}, -{49,33,-8}, -{49,33,-7}, -{49,33,-6}, -{49,33,-5}, -{49,33,-4}, -{49,33,-3}, -{49,33,-2}, -{49,33,-1}, -{49,33,0}, -{49,33,1}, -{49,33,2}, -{49,33,3}, -{49,33,4}, -{49,33,5}, -{49,33,6}, -{49,33,7}, -{49,33,8}, -{49,33,9}, -{49,33,10}, -{49,33,11}, -{49,33,12}, -{49,33,13}, -{49,33,14}, -{49,33,15}, -{49,33,16}, -{49,33,17}, -{49,33,18}, -{49,33,19}, -{49,33,20}, -{49,33,21}, -{49,33,22}, -{49,33,23}, -{49,33,24}, -{49,33,25}, -{49,33,26}, -{49,33,27}, -{49,33,28}, -{49,33,29}, -{49,33,30}, -{49,33,31}, -{49,33,32}, -{49,33,33}, -{49,33,34}, -{49,33,35}, -{49,33,36}, -{49,33,37}, -{49,33,38}, -{49,33,39}, -{49,33,40}, -{49,33,41}, -{49,33,42}, -{49,33,43}, -{49,33,44}, -{49,33,45}, -{49,33,46}, -{49,33,47}, -{49,33,48}, -{49,33,49}, -{49,33,50}, -{49,33,51}, -{49,33,52}, -{49,33,53}, -{49,33,54}, -{49,33,55}, -{49,33,56}, -{49,33,57}, -{49,33,58}, -{49,34,-80}, -{49,34,-79}, -{49,34,-78}, -{49,34,-77}, -{49,34,-76}, -{49,34,-75}, -{49,34,-74}, -{49,34,-73}, -{49,34,-72}, -{49,34,-71}, -{49,34,-70}, -{49,34,-69}, -{49,34,-68}, -{49,34,-67}, -{49,34,-66}, -{49,34,-65}, -{49,34,-64}, -{49,34,-63}, -{49,34,-62}, -{49,34,-61}, -{49,34,-60}, -{49,34,-59}, -{49,34,-58}, -{49,34,-57}, -{49,34,-56}, -{49,34,-55}, -{49,34,-54}, -{49,34,-53}, -{49,34,-52}, -{49,34,-51}, -{49,34,-50}, -{49,34,-49}, -{49,34,-48}, -{49,34,-47}, -{49,34,-46}, -{49,34,-45}, -{49,34,-44}, -{49,34,-43}, -{49,34,-42}, -{49,34,-41}, -{49,34,-40}, -{49,34,-39}, -{49,34,-38}, -{49,34,-37}, -{49,34,-36}, -{49,34,-35}, -{49,34,-34}, -{49,34,-33}, -{49,34,-32}, -{49,34,-31}, -{49,34,-30}, -{49,34,-29}, -{49,34,-28}, -{49,34,-27}, -{49,34,-26}, -{49,34,-25}, -{49,34,-24}, -{49,34,-23}, -{49,34,-22}, -{49,34,-21}, -{49,34,-20}, -{49,34,-19}, -{49,34,-18}, -{49,34,-17}, -{49,34,-16}, -{49,34,-15}, -{49,34,-14}, -{49,34,-13}, -{49,34,-12}, -{49,34,-11}, -{49,34,-10}, -{49,34,-9}, -{49,34,-8}, -{49,34,-7}, -{49,34,-6}, -{49,34,-5}, -{49,34,-4}, -{49,34,-3}, -{49,34,-2}, -{49,34,-1}, -{49,34,0}, -{49,34,1}, -{49,34,2}, -{49,34,3}, -{49,34,4}, -{49,34,5}, -{49,34,6}, -{49,34,7}, -{49,34,8}, -{49,34,9}, -{49,34,10}, -{49,34,11}, -{49,34,12}, -{49,34,13}, -{49,34,14}, -{49,34,15}, -{49,34,16}, -{49,34,17}, -{49,34,18}, -{49,34,19}, -{49,34,20}, -{49,34,21}, -{49,34,22}, -{49,34,23}, -{49,34,24}, -{49,34,25}, -{49,34,26}, -{49,34,27}, -{49,34,28}, -{49,34,29}, -{49,34,30}, -{49,34,31}, -{49,34,32}, -{49,34,33}, -{49,34,34}, -{49,34,35}, -{49,34,36}, -{49,34,37}, -{49,34,38}, -{49,34,39}, -{49,34,40}, -{49,34,41}, -{49,34,42}, -{49,34,43}, -{49,34,44}, -{49,34,45}, -{49,34,46}, -{49,34,47}, -{49,34,48}, -{49,34,49}, -{49,34,50}, -{49,34,51}, -{49,34,52}, -{49,34,53}, -{49,34,54}, -{49,34,55}, -{49,34,56}, -{49,34,57}, -{49,34,58}, -{49,35,-80}, -{49,35,-79}, -{49,35,-78}, -{49,35,-77}, -{49,35,-76}, -{49,35,-75}, -{49,35,-74}, -{49,35,-73}, -{49,35,-72}, -{49,35,-71}, -{49,35,-70}, -{49,35,-69}, -{49,35,-68}, -{49,35,-67}, -{49,35,-66}, -{49,35,-65}, -{49,35,-64}, -{49,35,-63}, -{49,35,-62}, -{49,35,-61}, -{49,35,-60}, -{49,35,-59}, -{49,35,-58}, -{49,35,-57}, -{49,35,-56}, -{49,35,-55}, -{49,35,-54}, -{49,35,-53}, -{49,35,-52}, -{49,35,-51}, -{49,35,-50}, -{49,35,-49}, -{49,35,-48}, -{49,35,-47}, -{49,35,-46}, -{49,35,-45}, -{49,35,-44}, -{49,35,-43}, -{49,35,-42}, -{49,35,-41}, -{49,35,-40}, -{49,35,-39}, -{49,35,-38}, -{49,35,-37}, -{49,35,-36}, -{49,35,-35}, -{49,35,-34}, -{49,35,-33}, -{49,35,-32}, -{49,35,-31}, -{49,35,-30}, -{49,35,-29}, -{49,35,-28}, -{49,35,-27}, -{49,35,-26}, -{49,35,-25}, -{49,35,-24}, -{49,35,-23}, -{49,35,-22}, -{49,35,-21}, -{49,35,-20}, -{49,35,-19}, -{49,35,-18}, -{49,35,-17}, -{49,35,-16}, -{49,35,-15}, -{49,35,-14}, -{49,35,-13}, -{49,35,-12}, -{49,35,-11}, -{49,35,-10}, -{49,35,-9}, -{49,35,-8}, -{49,35,-7}, -{49,35,-6}, -{49,35,-5}, -{49,35,-4}, -{49,35,-3}, -{49,35,-2}, -{49,35,-1}, -{49,35,0}, -{49,35,1}, -{49,35,2}, -{49,35,3}, -{49,35,4}, -{49,35,5}, -{49,35,6}, -{49,35,7}, -{49,35,8}, -{49,35,9}, -{49,35,10}, -{49,35,11}, -{49,35,12}, -{49,35,13}, -{49,35,14}, -{49,35,15}, -{49,35,16}, -{49,35,17}, -{49,35,18}, -{49,35,19}, -{49,35,20}, -{49,35,21}, -{49,35,22}, -{49,35,23}, -{49,35,24}, -{49,35,25}, -{49,35,26}, -{49,35,27}, -{49,35,28}, -{49,35,29}, -{49,35,30}, -{49,35,31}, -{49,35,32}, -{49,35,33}, -{49,35,34}, -{49,35,35}, -{49,35,36}, -{49,35,37}, -{49,35,38}, -{49,35,39}, -{49,35,40}, -{49,35,41}, -{49,35,42}, -{49,35,43}, -{49,35,44}, -{49,35,45}, -{49,35,46}, -{49,35,47}, -{49,35,48}, -{49,35,49}, -{49,35,50}, -{49,35,51}, -{49,35,52}, -{49,35,53}, -{49,35,54}, -{49,35,55}, -{49,35,56}, -{49,35,57}, -{49,35,58}, -{49,36,-80}, -{49,36,-79}, -{49,36,-78}, -{49,36,-77}, -{49,36,-76}, -{49,36,-75}, -{49,36,-74}, -{49,36,-73}, -{49,36,-72}, -{49,36,-71}, -{49,36,-70}, -{49,36,-69}, -{49,36,-68}, -{49,36,-67}, -{49,36,-66}, -{49,36,-65}, -{49,36,-64}, -{49,36,-63}, -{49,36,-62}, -{49,36,-61}, -{49,36,-60}, -{49,36,-59}, -{49,36,-58}, -{49,36,-57}, -{49,36,-56}, -{49,36,-55}, -{49,36,-54}, -{49,36,-53}, -{49,36,-52}, -{49,36,-51}, -{49,36,-50}, -{49,36,-49}, -{49,36,-48}, -{49,36,-47}, -{49,36,-46}, -{49,36,-45}, -{49,36,-44}, -{49,36,-43}, -{49,36,-42}, -{49,36,-41}, -{49,36,-40}, -{49,36,-39}, -{49,36,-38}, -{49,36,-37}, -{49,36,-36}, -{49,36,-35}, -{49,36,-34}, -{49,36,-33}, -{49,36,-32}, -{49,36,-31}, -{49,36,-30}, -{49,36,-29}, -{49,36,-28}, -{49,36,-27}, -{49,36,-26}, -{49,36,-25}, -{49,36,-24}, -{49,36,-23}, -{49,36,-22}, -{49,36,-21}, -{49,36,-20}, -{49,36,-19}, -{49,36,-18}, -{49,36,-17}, -{49,36,-16}, -{49,36,-15}, -{49,36,-14}, -{49,36,-13}, -{49,36,-12}, -{49,36,-11}, -{49,36,-10}, -{49,36,-9}, -{49,36,-8}, -{49,36,-7}, -{49,36,-6}, -{49,36,-5}, -{49,36,-4}, -{49,36,-3}, -{49,36,-2}, -{49,36,-1}, -{49,36,0}, -{49,36,1}, -{49,36,2}, -{49,36,3}, -{49,36,4}, -{49,36,5}, -{49,36,6}, -{49,36,7}, -{49,36,8}, -{49,36,9}, -{49,36,10}, -{49,36,11}, -{49,36,12}, -{49,36,13}, -{49,36,14}, -{49,36,15}, -{49,36,16}, -{49,36,17}, -{49,36,18}, -{49,36,19}, -{49,36,20}, -{49,36,21}, -{49,36,22}, -{49,36,23}, -{49,36,24}, -{49,36,25}, -{49,36,26}, -{49,36,27}, -{49,36,28}, -{49,36,29}, -{49,36,30}, -{49,36,31}, -{49,36,32}, -{49,36,33}, -{49,36,34}, -{49,36,35}, -{49,36,36}, -{49,36,37}, -{49,36,38}, -{49,36,39}, -{49,36,40}, -{49,36,41}, -{49,36,42}, -{49,36,43}, -{49,36,44}, -{49,36,45}, -{49,36,46}, -{49,36,47}, -{49,36,48}, -{49,36,49}, -{49,36,50}, -{49,36,51}, -{49,36,52}, -{49,36,53}, -{49,36,54}, -{49,36,55}, -{49,36,56}, -{49,36,57}, -{49,36,58}, -{49,37,-80}, -{49,37,-79}, -{49,37,-78}, -{49,37,-77}, -{49,37,-76}, -{49,37,-75}, -{49,37,-74}, -{49,37,-73}, -{49,37,-72}, -{49,37,-71}, -{49,37,-70}, -{49,37,-69}, -{49,37,-68}, -{49,37,-67}, -{49,37,-66}, -{49,37,-65}, -{49,37,-64}, -{49,37,-63}, -{49,37,-62}, -{49,37,-61}, -{49,37,-60}, -{49,37,-59}, -{49,37,-58}, -{49,37,-57}, -{49,37,-56}, -{49,37,-55}, -{49,37,-54}, -{49,37,-53}, -{49,37,-52}, -{49,37,-51}, -{49,37,-50}, -{49,37,-49}, -{49,37,-48}, -{49,37,-47}, -{49,37,-46}, -{49,37,-45}, -{49,37,-44}, -{49,37,-43}, -{49,37,-42}, -{49,37,-41}, -{49,37,-40}, -{49,37,-39}, -{49,37,-38}, -{49,37,-37}, -{49,37,-36}, -{49,37,-35}, -{49,37,-34}, -{49,37,-33}, -{49,37,-32}, -{49,37,-31}, -{49,37,-30}, -{49,37,-29}, -{49,37,-28}, -{49,37,-27}, -{49,37,-26}, -{49,37,-25}, -{49,37,-24}, -{49,37,-23}, -{49,37,-22}, -{49,37,-21}, -{49,37,-20}, -{49,37,-19}, -{49,37,-18}, -{49,37,-17}, -{49,37,-16}, -{49,37,-15}, -{49,37,-14}, -{49,37,-13}, -{49,37,-12}, -{49,37,-11}, -{49,37,-10}, -{49,37,-9}, -{49,37,-8}, -{49,37,-7}, -{49,37,-6}, -{49,37,-5}, -{49,37,-4}, -{49,37,-3}, -{49,37,-2}, -{49,37,-1}, -{49,37,0}, -{49,37,1}, -{49,37,2}, -{49,37,3}, -{49,37,4}, -{49,37,5}, -{49,37,6}, -{49,37,7}, -{49,37,8}, -{49,37,9}, -{49,37,10}, -{49,37,11}, -{49,37,12}, -{49,37,13}, -{49,37,14}, -{49,37,15}, -{49,37,16}, -{49,37,17}, -{49,37,18}, -{49,37,19}, -{49,37,20}, -{49,37,21}, -{49,37,22}, -{49,37,23}, -{49,37,24}, -{49,37,25}, -{49,37,26}, -{49,37,27}, -{49,37,28}, -{49,37,29}, -{49,37,30}, -{49,37,31}, -{49,37,32}, -{49,37,33}, -{49,37,34}, -{49,37,35}, -{49,37,36}, -{49,37,37}, -{49,37,38}, -{49,37,39}, -{49,37,40}, -{49,37,41}, -{49,37,42}, -{49,37,43}, -{49,37,44}, -{49,37,45}, -{49,37,46}, -{49,37,47}, -{49,37,48}, -{49,37,49}, -{49,37,50}, -{49,37,51}, -{49,37,52}, -{49,37,53}, -{49,37,54}, -{49,37,55}, -{49,37,56}, -{49,37,57}, -{49,37,58}, -{49,38,-80}, -{49,38,-79}, -{49,38,-78}, -{49,38,-77}, -{49,38,-76}, -{49,38,-75}, -{49,38,-74}, -{49,38,-73}, -{49,38,-72}, -{49,38,-71}, -{49,38,-70}, -{49,38,-69}, -{49,38,-68}, -{49,38,-67}, -{49,38,-66}, -{49,38,-65}, -{49,38,-64}, -{49,38,-63}, -{49,38,-62}, -{49,38,-61}, -{49,38,-60}, -{49,38,-59}, -{49,38,-58}, -{49,38,-57}, -{49,38,-56}, -{49,38,-55}, -{49,38,-54}, -{49,38,-53}, -{49,38,-52}, -{49,38,-51}, -{49,38,-50}, -{49,38,-49}, -{49,38,-48}, -{49,38,-47}, -{49,38,-46}, -{49,38,-45}, -{49,38,-44}, -{49,38,-43}, -{49,38,-42}, -{49,38,-41}, -{49,38,-40}, -{49,38,-39}, -{49,38,-38}, -{49,38,-37}, -{49,38,-36}, -{49,38,-35}, -{49,38,-34}, -{49,38,-33}, -{49,38,-32}, -{49,38,-31}, -{49,38,-30}, -{49,38,-29}, -{49,38,-28}, -{49,38,-27}, -{49,38,-26}, -{49,38,-25}, -{49,38,-24}, -{49,38,-23}, -{49,38,-22}, -{49,38,-21}, -{49,38,-20}, -{49,38,-19}, -{49,38,-18}, -{49,38,-17}, -{49,38,-16}, -{49,38,-15}, -{49,38,-14}, -{49,38,-13}, -{49,38,-12}, -{49,38,-11}, -{49,38,-10}, -{49,38,-9}, -{49,38,-8}, -{49,38,-7}, -{49,38,-6}, -{49,38,-5}, -{49,38,-4}, -{49,38,-3}, -{49,38,-2}, -{49,38,-1}, -{49,38,0}, -{49,38,1}, -{49,38,2}, -{49,38,3}, -{49,38,4}, -{49,38,5}, -{49,38,6}, -{49,38,7}, -{49,38,8}, -{49,38,9}, -{49,38,10}, -{49,38,11}, -{49,38,12}, -{49,38,13}, -{49,38,14}, -{49,38,15}, -{49,38,16}, -{49,38,17}, -{49,38,18}, -{49,38,19}, -{49,38,20}, -{49,38,21}, -{49,38,22}, -{49,38,23}, -{49,38,24}, -{49,38,25}, -{49,38,26}, -{49,38,27}, -{49,38,28}, -{49,38,29}, -{49,38,30}, -{49,38,31}, -{49,38,32}, -{49,38,33}, -{49,38,34}, -{49,38,35}, -{49,38,36}, -{49,38,37}, -{49,38,38}, -{49,38,39}, -{49,38,40}, -{49,38,41}, -{49,38,42}, -{49,38,43}, -{49,38,44}, -{49,38,45}, -{49,38,46}, -{49,38,47}, -{49,38,48}, -{49,38,49}, -{49,38,50}, -{49,38,51}, -{49,38,52}, -{49,38,53}, -{49,38,54}, -{49,38,55}, -{49,38,56}, -{49,38,57}, -{49,38,58}, -{49,39,-80}, -{49,39,-79}, -{49,39,-78}, -{49,39,-77}, -{49,39,-76}, -{49,39,-75}, -{49,39,-74}, -{49,39,-73}, -{49,39,-72}, -{49,39,-71}, -{49,39,-70}, -{49,39,-69}, -{49,39,-68}, -{49,39,-67}, -{49,39,-66}, -{49,39,-65}, -{49,39,-64}, -{49,39,-63}, -{49,39,-62}, -{49,39,-61}, -{49,39,-60}, -{49,39,-59}, -{49,39,-58}, -{49,39,-57}, -{49,39,-56}, -{49,39,-55}, -{49,39,-54}, -{49,39,-53}, -{49,39,-52}, -{49,39,-51}, -{49,39,-50}, -{49,39,-49}, -{49,39,-48}, -{49,39,-47}, -{49,39,-46}, -{49,39,-45}, -{49,39,-44}, -{49,39,-43}, -{49,39,-42}, -{49,39,-41}, -{49,39,-40}, -{49,39,-39}, -{49,39,-38}, -{49,39,-37}, -{49,39,-36}, -{49,39,-35}, -{49,39,-34}, -{49,39,-33}, -{49,39,-32}, -{49,39,-31}, -{49,39,-30}, -{49,39,-29}, -{49,39,-28}, -{49,39,-27}, -{49,39,-26}, -{49,39,-25}, -{49,39,-24}, -{49,39,-23}, -{49,39,-22}, -{49,39,-21}, -{49,39,-20}, -{49,39,-19}, -{49,39,-18}, -{49,39,-17}, -{49,39,-16}, -{49,39,-15}, -{49,39,-14}, -{49,39,-13}, -{49,39,-12}, -{49,39,-11}, -{49,39,-10}, -{49,39,-9}, -{49,39,-8}, -{49,39,-7}, -{49,39,-6}, -{49,39,-5}, -{49,39,-4}, -{49,39,-3}, -{49,39,-2}, -{49,39,-1}, -{49,39,0}, -{49,39,1}, -{49,39,2}, -{49,39,3}, -{49,39,4}, -{49,39,5}, -{49,39,6}, -{49,39,7}, -{49,39,8}, -{49,39,9}, -{49,39,10}, -{49,39,11}, -{49,39,12}, -{49,39,13}, -{49,39,14}, -{49,39,15}, -{49,39,16}, -{49,39,17}, -{49,39,18}, -{49,39,19}, -{49,39,20}, -{49,39,21}, -{49,39,22}, -{49,39,23}, -{49,39,24}, -{49,39,25}, -{49,39,26}, -{49,39,27}, -{49,39,28}, -{49,39,29}, -{49,39,30}, -{49,39,31}, -{49,39,32}, -{49,39,33}, -{49,39,34}, -{49,39,35}, -{49,39,36}, -{49,39,37}, -{49,39,38}, -{49,39,39}, -{49,39,40}, -{49,39,41}, -{49,39,42}, -{49,39,43}, -{49,39,44}, -{49,39,45}, -{49,39,46}, -{49,39,47}, -{49,39,48}, -{49,39,49}, -{49,39,50}, -{49,39,51}, -{49,39,52}, -{49,39,53}, -{49,39,54}, -{49,39,55}, -{49,39,56}, -{49,39,57}, -{49,39,58}, -{49,40,-80}, -{49,40,-79}, -{49,40,-78}, -{49,40,-77}, -{49,40,-76}, -{49,40,-75}, -{49,40,-74}, -{49,40,-73}, -{49,40,-72}, -{49,40,-71}, -{49,40,-70}, -{49,40,-69}, -{49,40,-68}, -{49,40,-67}, -{49,40,-66}, -{49,40,-65}, -{49,40,-64}, -{49,40,-63}, -{49,40,-62}, -{49,40,-61}, -{49,40,-60}, -{49,40,-59}, -{49,40,-58}, -{49,40,-57}, -{49,40,-56}, -{49,40,-55}, -{49,40,-54}, -{49,40,-53}, -{49,40,-52}, -{49,40,-51}, -{49,40,-50}, -{49,40,-49}, -{49,40,-48}, -{49,40,-47}, -{49,40,-46}, -{49,40,-45}, -{49,40,-44}, -{49,40,-43}, -{49,40,-42}, -{49,40,-41}, -{49,40,-40}, -{49,40,-39}, -{49,40,-38}, -{49,40,-37}, -{49,40,-36}, -{49,40,-35}, -{49,40,-34}, -{49,40,-33}, -{49,40,-32}, -{49,40,-31}, -{49,40,-30}, -{49,40,-29}, -{49,40,-28}, -{49,40,-27}, -{49,40,-26}, -{49,40,-25}, -{49,40,-24}, -{49,40,-23}, -{49,40,-22}, -{49,40,-21}, -{49,40,-20}, -{49,40,-19}, -{49,40,-18}, -{49,40,-17}, -{49,40,-16}, -{49,40,-15}, -{49,40,-14}, -{49,40,-13}, -{49,40,-12}, -{49,40,-11}, -{49,40,-10}, -{49,40,-9}, -{49,40,-8}, -{49,40,-7}, -{49,40,-6}, -{49,40,-5}, -{49,40,-4}, -{49,40,-3}, -{49,40,-2}, -{49,40,-1}, -{49,40,0}, -{49,40,1}, -{49,40,2}, -{49,40,3}, -{49,40,4}, -{49,40,5}, -{49,40,6}, -{49,40,7}, -{49,40,8}, -{49,40,9}, -{49,40,10}, -{49,40,11}, -{49,40,12}, -{49,40,13}, -{49,40,14}, -{49,40,15}, -{49,40,16}, -{49,40,17}, -{49,40,18}, -{49,40,19}, -{49,40,20}, -{49,40,21}, -{49,40,22}, -{49,40,23}, -{49,40,24}, -{49,40,25}, -{49,40,26}, -{49,40,27}, -{49,40,28}, -{49,40,29}, -{49,40,30}, -{49,40,31}, -{49,40,32}, -{49,40,33}, -{49,40,34}, -{49,40,35}, -{49,40,36}, -{49,40,37}, -{49,40,38}, -{49,40,39}, -{49,40,40}, -{49,40,41}, -{49,40,42}, -{49,40,43}, -{49,40,44}, -{49,40,45}, -{49,40,46}, -{49,40,47}, -{49,40,48}, -{49,40,49}, -{49,40,50}, -{49,40,51}, -{49,40,52}, -{49,40,53}, -{49,40,54}, -{49,40,55}, -{49,40,56}, -{49,40,57}, -{49,40,58}, -{49,41,-80}, -{49,41,-79}, -{49,41,-78}, -{49,41,-77}, -{49,41,-76}, -{49,41,-75}, -{49,41,-74}, -{49,41,-73}, -{49,41,-72}, -{49,41,-71}, -{49,41,-70}, -{49,41,-69}, -{49,41,-68}, -{49,41,-67}, -{49,41,-66}, -{49,41,-65}, -{49,41,-64}, -{49,41,-63}, -{49,41,-62}, -{49,41,-61}, -{49,41,-60}, -{49,41,-59}, -{49,41,-58}, -{49,41,-57}, -{49,41,-56}, -{49,41,-55}, -{49,41,-54}, -{49,41,-53}, -{49,41,-52}, -{49,41,-51}, -{49,41,-50}, -{49,41,-49}, -{49,41,-48}, -{49,41,-47}, -{49,41,-46}, -{49,41,-45}, -{49,41,-44}, -{49,41,-43}, -{49,41,-42}, -{49,41,-41}, -{49,41,-40}, -{49,41,-39}, -{49,41,-38}, -{49,41,-37}, -{49,41,-36}, -{49,41,-35}, -{49,41,-34}, -{49,41,-33}, -{49,41,-32}, -{49,41,-31}, -{49,41,-30}, -{49,41,-29}, -{49,41,-28}, -{49,41,-27}, -{49,41,-26}, -{49,41,-25}, -{49,41,-24}, -{49,41,-23}, -{49,41,-22}, -{49,41,-21}, -{49,41,-20}, -{49,41,-19}, -{49,41,-18}, -{49,41,-17}, -{49,41,-16}, -{49,41,-15}, -{49,41,-14}, -{49,41,-13}, -{49,41,-12}, -{49,41,-11}, -{49,41,-10}, -{49,41,-9}, -{49,41,-8}, -{49,41,-7}, -{49,41,-6}, -{49,41,-5}, -{49,41,-4}, -{49,41,-3}, -{49,41,-2}, -{49,41,-1}, -{49,41,0}, -{49,41,1}, -{49,41,2}, -{49,41,3}, -{49,41,4}, -{49,41,5}, -{49,41,6}, -{49,41,7}, -{49,41,8}, -{49,41,9}, -{49,41,10}, -{49,41,11}, -{49,41,12}, -{49,41,13}, -{49,41,14}, -{49,41,15}, -{49,41,16}, -{49,41,17}, -{49,41,18}, -{49,41,19}, -{49,41,20}, -{49,41,21}, -{49,41,22}, -{49,41,23}, -{49,41,24}, -{49,41,25}, -{49,41,26}, -{49,41,27}, -{49,41,28}, -{49,41,29}, -{49,41,30}, -{49,41,31}, -{49,41,32}, -{49,41,33}, -{49,41,34}, -{49,41,35}, -{49,41,36}, -{49,41,37}, -{49,41,38}, -{49,41,39}, -{49,41,40}, -{49,41,41}, -{49,41,42}, -{49,41,43}, -{49,41,44}, -{49,41,45}, -{49,41,46}, -{49,41,47}, -{49,41,48}, -{49,41,49}, -{49,41,50}, -{49,41,51}, -{49,41,52}, -{49,41,53}, -{49,41,54}, -{49,41,55}, -{49,41,56}, -{49,41,57}, -{49,41,58}, -{49,42,-80}, -{49,42,-79}, -{49,42,-78}, -{49,42,-77}, -{49,42,-76}, -{49,42,-75}, -{49,42,-74}, -{49,42,-73}, -{49,42,-72}, -{49,42,-71}, -{49,42,-70}, -{49,42,-69}, -{49,42,-68}, -{49,42,-67}, -{49,42,-66}, -{49,42,-65}, -{49,42,-64}, -{49,42,-63}, -{49,42,-62}, -{49,42,-61}, -{49,42,-60}, -{49,42,-59}, -{49,42,-58}, -{49,42,-57}, -{49,42,-56}, -{49,42,-55}, -{49,42,-54}, -{49,42,-53}, -{49,42,-52}, -{49,42,-51}, -{49,42,-50}, -{49,42,-49}, -{49,42,-48}, -{49,42,-47}, -{49,42,-46}, -{49,42,-45}, -{49,42,-44}, -{49,42,-43}, -{49,42,-42}, -{49,42,-41}, -{49,42,-40}, -{49,42,-39}, -{49,42,-38}, -{49,42,-37}, -{49,42,-36}, -{49,42,-35}, -{49,42,-34}, -{49,42,-33}, -{49,42,-32}, -{49,42,-31}, -{49,42,-30}, -{49,42,-29}, -{49,42,-28}, -{49,42,-27}, -{49,42,-26}, -{49,42,-25}, -{49,42,-24}, -{49,42,-23}, -{49,42,-22}, -{49,42,-21}, -{49,42,-20}, -{49,42,-19}, -{49,42,-18}, -{49,42,-17}, -{49,42,-16}, -{49,42,-15}, -{49,42,-14}, -{49,42,-13}, -{49,42,-12}, -{49,42,-11}, -{49,42,-10}, -{49,42,-9}, -{49,42,-8}, -{49,42,-7}, -{49,42,-6}, -{49,42,-5}, -{49,42,-4}, -{49,42,-3}, -{49,42,-2}, -{49,42,-1}, -{49,42,0}, -{49,42,1}, -{49,42,2}, -{49,42,3}, -{49,42,4}, -{49,42,5}, -{49,42,6}, -{49,42,7}, -{49,42,8}, -{49,42,9}, -{49,42,10}, -{49,42,11}, -{49,42,12}, -{49,42,13}, -{49,42,14}, -{49,42,15}, -{49,42,16}, -{49,42,17}, -{49,42,18}, -{49,42,19}, -{49,42,20}, -{49,42,21}, -{49,42,22}, -{49,42,23}, -{49,42,24}, -{49,42,25}, -{49,42,26}, -{49,42,27}, -{49,42,28}, -{49,42,29}, -{49,42,30}, -{49,42,31}, -{49,42,32}, -{49,42,33}, -{49,42,34}, -{49,42,35}, -{49,42,36}, -{49,42,37}, -{49,42,38}, -{49,42,39}, -{49,42,40}, -{49,42,41}, -{49,42,42}, -{49,42,43}, -{49,42,44}, -{49,42,45}, -{49,42,46}, -{49,42,47}, -{49,42,48}, -{49,42,49}, -{49,42,50}, -{49,42,51}, -{49,42,52}, -{49,42,53}, -{49,42,54}, -{49,42,55}, -{49,42,56}, -{49,42,57}, -{49,42,58}, -{49,42,59}, -{49,43,-80}, -{49,43,-79}, -{49,43,-78}, -{49,43,-77}, -{49,43,-76}, -{49,43,-75}, -{49,43,-74}, -{49,43,-73}, -{49,43,-72}, -{49,43,-71}, -{49,43,-70}, -{49,43,-69}, -{49,43,-68}, -{49,43,-67}, -{49,43,-66}, -{49,43,-65}, -{49,43,-64}, -{49,43,-63}, -{49,43,-62}, -{49,43,-61}, -{49,43,-60}, -{49,43,-59}, -{49,43,-58}, -{49,43,-57}, -{49,43,-56}, -{49,43,-55}, -{49,43,-54}, -{49,43,-53}, -{49,43,-52}, -{49,43,-51}, -{49,43,-50}, -{49,43,-49}, -{49,43,-48}, -{49,43,-47}, -{49,43,-46}, -{49,43,-45}, -{49,43,-44}, -{49,43,-43}, -{49,43,-42}, -{49,43,-41}, -{49,43,-40}, -{49,43,-39}, -{49,43,-38}, -{49,43,-37}, -{49,43,-36}, -{49,43,-35}, -{49,43,-34}, -{49,43,-33}, -{49,43,-32}, -{49,43,-31}, -{49,43,-30}, -{49,43,-29}, -{49,43,-28}, -{49,43,-27}, -{49,43,-26}, -{49,43,-25}, -{49,43,-24}, -{49,43,-23}, -{49,43,-22}, -{49,43,-21}, -{49,43,-20}, -{49,43,-19}, -{49,43,-18}, -{49,43,-17}, -{49,43,-16}, -{49,43,-15}, -{49,43,-14}, -{49,43,-13}, -{49,43,-12}, -{49,43,-11}, -{49,43,-10}, -{49,43,-9}, -{49,43,-8}, -{49,43,-7}, -{49,43,-6}, -{49,43,-5}, -{49,43,-4}, -{49,43,-3}, -{49,43,-2}, -{49,43,-1}, -{49,43,0}, -{49,43,1}, -{49,43,2}, -{49,43,3}, -{49,43,4}, -{49,43,5}, -{49,43,6}, -{49,43,7}, -{49,43,8}, -{49,43,9}, -{49,43,10}, -{49,43,11}, -{49,43,12}, -{49,43,13}, -{49,43,14}, -{49,43,15}, -{49,43,16}, -{49,43,17}, -{49,43,18}, -{49,43,19}, -{49,43,20}, -{49,43,21}, -{49,43,22}, -{49,43,23}, -{49,43,24}, -{49,43,25}, -{49,43,26}, -{49,43,27}, -{49,43,28}, -{49,43,29}, -{49,43,30}, -{49,43,31}, -{49,43,32}, -{49,43,33}, -{49,43,34}, -{49,43,35}, -{49,43,36}, -{49,43,37}, -{49,43,38}, -{49,43,39}, -{49,43,40}, -{49,43,41}, -{49,43,42}, -{49,43,43}, -{49,43,44}, -{49,43,45}, -{49,43,46}, -{49,43,47}, -{49,43,48}, -{49,43,49}, -{49,43,50}, -{49,43,51}, -{49,43,52}, -{49,43,53}, -{49,43,54}, -{49,43,55}, -{49,43,56}, -{49,43,57}, -{49,43,58}, -{49,43,59}, -{49,44,-80}, -{49,44,-79}, -{49,44,-78}, -{49,44,-77}, -{49,44,-76}, -{49,44,-75}, -{49,44,-74}, -{49,44,-73}, -{49,44,-72}, -{49,44,-71}, -{49,44,-70}, -{49,44,-69}, -{49,44,-68}, -{49,44,-67}, -{49,44,-66}, -{49,44,-65}, -{49,44,-64}, -{49,44,-63}, -{49,44,-62}, -{49,44,-61}, -{49,44,-60}, -{49,44,-59}, -{49,44,-58}, -{49,44,-57}, -{49,44,-56}, -{49,44,-55}, -{49,44,-54}, -{49,44,-53}, -{49,44,-52}, -{49,44,-51}, -{49,44,-50}, -{49,44,-49}, -{49,44,-48}, -{49,44,-47}, -{49,44,-46}, -{49,44,-45}, -{49,44,-44}, -{49,44,-43}, -{49,44,-42}, -{49,44,-41}, -{49,44,-40}, -{49,44,-39}, -{49,44,-38}, -{49,44,-37}, -{49,44,-36}, -{49,44,-35}, -{49,44,-34}, -{49,44,-33}, -{49,44,-32}, -{49,44,-31}, -{49,44,-30}, -{49,44,-29}, -{49,44,-28}, -{49,44,-27}, -{49,44,-26}, -{49,44,-25}, -{49,44,-24}, -{49,44,-23}, -{49,44,-22}, -{49,44,-21}, -{49,44,-20}, -{49,44,-19}, -{49,44,-18}, -{49,44,-17}, -{49,44,-16}, -{49,44,-15}, -{49,44,-14}, -{49,44,-13}, -{49,44,-12}, -{49,44,-11}, -{49,44,-10}, -{49,44,-9}, -{49,44,-8}, -{49,44,-7}, -{49,44,-6}, -{49,44,-5}, -{49,44,-4}, -{49,44,-3}, -{49,44,-2}, -{49,44,-1}, -{49,44,0}, -{49,44,1}, -{49,44,2}, -{49,44,3}, -{49,44,4}, -{49,44,5}, -{49,44,6}, -{49,44,7}, -{49,44,8}, -{49,44,9}, -{49,44,10}, -{49,44,11}, -{49,44,12}, -{49,44,13}, -{49,44,14}, -{49,44,15}, -{49,44,16}, -{49,44,17}, -{49,44,18}, -{49,44,19}, -{49,44,20}, -{49,44,21}, -{49,44,22}, -{49,44,23}, -{49,44,24}, -{49,44,25}, -{49,44,26}, -{49,44,27}, -{49,44,28}, -{49,44,29}, -{49,44,30}, -{49,44,31}, -{49,44,32}, -{49,44,33}, -{49,44,34}, -{49,44,35}, -{49,44,36}, -{49,44,37}, -{49,44,38}, -{49,44,39}, -{49,44,40}, -{49,44,41}, -{49,44,42}, -{49,44,43}, -{49,44,44}, -{49,44,45}, -{49,44,46}, -{49,44,47}, -{49,44,48}, -{49,44,49}, -{49,44,50}, -{49,44,51}, -{49,44,52}, -{49,44,53}, -{49,44,54}, -{49,44,55}, -{49,44,56}, -{49,44,57}, -{49,44,58}, -{49,44,59}, -{49,45,-80}, -{49,45,-79}, -{49,45,-78}, -{49,45,-77}, -{49,45,-76}, -{49,45,-75}, -{49,45,-74}, -{49,45,-73}, -{49,45,-72}, -{49,45,-71}, -{49,45,-70}, -{49,45,-69}, -{49,45,-68}, -{49,45,-67}, -{49,45,-66}, -{49,45,-65}, -{49,45,-64}, -{49,45,-63}, -{49,45,-62}, -{49,45,-61}, -{49,45,-60}, -{49,45,-59}, -{49,45,-58}, -{49,45,-57}, -{49,45,-56}, -{49,45,-55}, -{49,45,-54}, -{49,45,-53}, -{49,45,-52}, -{49,45,-51}, -{49,45,-50}, -{49,45,-49}, -{49,45,-48}, -{49,45,-47}, -{49,45,-46}, -{49,45,-45}, -{49,45,-44}, -{49,45,-43}, -{49,45,-42}, -{49,45,-41}, -{49,45,-40}, -{49,45,-39}, -{49,45,-38}, -{49,45,-37}, -{49,45,-36}, -{49,45,-35}, -{49,45,-34}, -{49,45,-33}, -{49,45,-32}, -{49,45,-31}, -{49,45,-30}, -{49,45,-29}, -{49,45,-28}, -{49,45,-27}, -{49,45,-26}, -{49,45,-25}, -{49,45,-24}, -{49,45,-23}, -{49,45,-22}, -{49,45,-21}, -{49,45,-20}, -{49,45,-19}, -{49,45,-18}, -{49,45,-17}, -{49,45,-16}, -{49,45,-15}, -{49,45,-14}, -{49,45,-13}, -{49,45,-12}, -{49,45,-11}, -{49,45,-10}, -{49,45,-9}, -{49,45,-8}, -{49,45,-7}, -{49,45,-6}, -{49,45,-5}, -{49,45,-4}, -{49,45,-3}, -{49,45,-2}, -{49,45,-1}, -{49,45,0}, -{49,45,1}, -{49,45,2}, -{49,45,3}, -{49,45,4}, -{49,45,5}, -{49,45,6}, -{49,45,7}, -{49,45,8}, -{49,45,9}, -{49,45,10}, -{49,45,11}, -{49,45,12}, -{49,45,13}, -{49,45,14}, -{49,45,15}, -{49,45,16}, -{49,45,17}, -{49,45,18}, -{49,45,19}, -{49,45,20}, -{49,45,21}, -{49,45,22}, -{49,45,23}, -{49,45,24}, -{49,45,25}, -{49,45,26}, -{49,45,27}, -{49,45,28}, -{49,45,29}, -{49,45,30}, -{49,45,31}, -{49,45,32}, -{49,45,33}, -{49,45,34}, -{49,45,35}, -{49,45,36}, -{49,45,37}, -{49,45,38}, -{49,45,39}, -{49,45,40}, -{49,45,41}, -{49,45,42}, -{49,45,43}, -{49,45,44}, -{49,45,45}, -{49,45,46}, -{49,45,47}, -{49,45,48}, -{49,45,49}, -{49,45,50}, -{49,45,51}, -{49,45,52}, -{49,45,53}, -{49,45,54}, -{49,45,55}, -{49,45,56}, -{49,45,57}, -{49,45,58}, -{49,45,59}, -{49,46,-80}, -{49,46,-79}, -{49,46,-78}, -{49,46,-77}, -{49,46,-76}, -{49,46,-75}, -{49,46,-74}, -{49,46,-73}, -{49,46,-72}, -{49,46,-71}, -{49,46,-70}, -{49,46,-69}, -{49,46,-68}, -{49,46,-67}, -{49,46,-66}, -{49,46,-65}, -{49,46,-64}, -{49,46,-63}, -{49,46,-62}, -{49,46,-61}, -{49,46,-60}, -{49,46,-59}, -{49,46,-58}, -{49,46,-57}, -{49,46,-56}, -{49,46,-55}, -{49,46,-54}, -{49,46,-53}, -{49,46,-52}, -{49,46,-51}, -{49,46,-50}, -{49,46,-49}, -{49,46,-48}, -{49,46,-47}, -{49,46,-46}, -{49,46,-45}, -{49,46,-44}, -{49,46,-43}, -{49,46,-42}, -{49,46,-41}, -{49,46,-40}, -{49,46,-39}, -{49,46,-38}, -{49,46,-37}, -{49,46,-36}, -{49,46,-35}, -{49,46,-34}, -{49,46,-33}, -{49,46,-32}, -{49,46,-31}, -{49,46,-30}, -{49,46,-29}, -{49,46,-28}, -{49,46,-27}, -{49,46,-26}, -{49,46,-25}, -{49,46,-24}, -{49,46,-23}, -{49,46,-22}, -{49,46,-21}, -{49,46,-20}, -{49,46,-19}, -{49,46,-18}, -{49,46,-17}, -{49,46,-16}, -{49,46,-15}, -{49,46,-14}, -{49,46,-13}, -{49,46,-12}, -{49,46,-11}, -{49,46,-10}, -{49,46,-9}, -{49,46,-8}, -{49,46,-7}, -{49,46,-6}, -{49,46,-5}, -{49,46,-4}, -{49,46,-3}, -{49,46,-2}, -{49,46,-1}, -{49,46,0}, -{49,46,1}, -{49,46,2}, -{49,46,3}, -{49,46,4}, -{49,46,5}, -{49,46,6}, -{49,46,7}, -{49,46,8}, -{49,46,9}, -{49,46,10}, -{49,46,11}, -{49,46,12}, -{49,46,13}, -{49,46,14}, -{49,46,15}, -{49,46,16}, -{49,46,17}, -{49,46,18}, -{49,46,19}, -{49,46,20}, -{49,46,21}, -{49,46,22}, -{49,46,23}, -{49,46,24}, -{49,46,25}, -{49,46,26}, -{49,46,27}, -{49,46,28}, -{49,46,29}, -{49,46,30}, -{49,46,31}, -{49,46,32}, -{49,46,33}, -{49,46,34}, -{49,46,35}, -{49,46,36}, -{49,46,37}, -{49,46,38}, -{49,46,39}, -{49,46,40}, -{49,46,41}, -{49,46,42}, -{49,46,43}, -{49,46,44}, -{49,46,45}, -{49,46,46}, -{49,46,47}, -{49,46,48}, -{49,46,49}, -{49,46,50}, -{49,46,51}, -{49,46,52}, -{49,46,53}, -{49,46,54}, -{49,46,55}, -{49,46,56}, -{49,46,57}, -{49,46,58}, -{49,46,59}, -{49,47,-80}, -{49,47,-79}, -{49,47,-78}, -{49,47,-77}, -{49,47,-76}, -{49,47,-75}, -{49,47,-74}, -{49,47,-73}, -{49,47,-72}, -{49,47,-71}, -{49,47,-70}, -{49,47,-69}, -{49,47,-68}, -{49,47,-67}, -{49,47,-66}, -{49,47,-65}, -{49,47,-64}, -{49,47,-63}, -{49,47,-62}, -{49,47,-61}, -{49,47,-60}, -{49,47,-59}, -{49,47,-58}, -{49,47,-57}, -{49,47,-56}, -{49,47,-55}, -{49,47,-54}, -{49,47,-53}, -{49,47,-52}, -{49,47,-51}, -{49,47,-50}, -{49,47,-49}, -{49,47,-48}, -{49,47,-47}, -{49,47,-46}, -{49,47,-45}, -{49,47,-44}, -{49,47,-43}, -{49,47,-42}, -{49,47,-41}, -{49,47,-40}, -{49,47,-39}, -{49,47,-38}, -{49,47,-37}, -{49,47,-36}, -{49,47,-35}, -{49,47,-34}, -{49,47,-33}, -{49,47,-32}, -{49,47,-31}, -{49,47,-30}, -{49,47,-29}, -{49,47,-28}, -{49,47,-27}, -{49,47,-26}, -{49,47,-25}, -{49,47,-24}, -{49,47,-23}, -{49,47,-22}, -{49,47,-21}, -{49,47,-20}, -{49,47,-19}, -{49,47,-18}, -{49,47,-17}, -{49,47,-16}, -{49,47,-15}, -{49,47,-14}, -{49,47,-13}, -{49,47,-12}, -{49,47,-11}, -{49,47,-10}, -{49,47,-9}, -{49,47,-8}, -{49,47,-7}, -{49,47,-6}, -{49,47,-5}, -{49,47,-4}, -{49,47,-3}, -{49,47,-2}, -{49,47,-1}, -{49,47,0}, -{49,47,1}, -{49,47,2}, -{49,47,3}, -{49,47,4}, -{49,47,5}, -{49,47,6}, -{49,47,7}, -{49,47,8}, -{49,47,9}, -{49,47,10}, -{49,47,11}, -{49,47,12}, -{49,47,13}, -{49,47,14}, -{49,47,15}, -{49,47,16}, -{49,47,17}, -{49,47,18}, -{49,47,19}, -{49,47,20}, -{49,47,21}, -{49,47,22}, -{49,47,23}, -{49,47,24}, -{49,47,25}, -{49,47,26}, -{49,47,27}, -{49,47,28}, -{49,47,29}, -{49,47,30}, -{49,47,31}, -{49,47,32}, -{49,47,33}, -{49,47,34}, -{49,47,35}, -{49,47,36}, -{49,47,37}, -{49,47,38}, -{49,47,39}, -{49,47,40}, -{49,47,41}, -{49,47,42}, -{49,47,43}, -{49,47,44}, -{49,47,45}, -{49,47,46}, -{49,47,47}, -{49,47,48}, -{49,47,49}, -{49,47,50}, -{49,47,51}, -{49,47,52}, -{49,47,53}, -{49,47,54}, -{49,47,55}, -{49,47,56}, -{49,47,57}, -{49,47,58}, -{49,47,59}, -{49,48,-80}, -{49,48,-79}, -{49,48,-78}, -{49,48,-77}, -{49,48,-76}, -{49,48,-75}, -{49,48,-74}, -{49,48,-73}, -{49,48,-72}, -{49,48,-71}, -{49,48,-70}, -{49,48,-69}, -{49,48,-68}, -{49,48,-67}, -{49,48,-66}, -{49,48,-65}, -{49,48,-64}, -{49,48,-63}, -{49,48,-62}, -{49,48,-61}, -{49,48,-60}, -{49,48,-59}, -{49,48,-58}, -{49,48,-57}, -{49,48,-56}, -{49,48,-55}, -{49,48,-54}, -{49,48,-53}, -{49,48,-52}, -{49,48,-51}, -{49,48,-50}, -{49,48,-49}, -{49,48,-48}, -{49,48,-47}, -{49,48,-46}, -{49,48,-45}, -{49,48,-44}, -{49,48,-43}, -{49,48,-42}, -{49,48,-41}, -{49,48,-40}, -{49,48,-39}, -{49,48,-38}, -{49,48,-37}, -{49,48,-36}, -{49,48,-35}, -{49,48,-34}, -{49,48,-33}, -{49,48,-32}, -{49,48,-31}, -{49,48,-30}, -{49,48,-29}, -{49,48,-28}, -{49,48,-27}, -{49,48,-26}, -{49,48,-25}, -{49,48,-24}, -{49,48,-23}, -{49,48,-22}, -{49,48,-21}, -{49,48,-20}, -{49,48,-19}, -{49,48,-18}, -{49,48,-17}, -{49,48,-16}, -{49,48,-15}, -{49,48,-14}, -{49,48,-13}, -{49,48,-12}, -{49,48,-11}, -{49,48,-10}, -{49,48,-9}, -{49,48,-8}, -{49,48,-7}, -{49,48,-6}, -{49,48,-5}, -{49,48,-4}, -{49,48,-3}, -{49,48,-2}, -{49,48,-1}, -{49,48,0}, -{49,48,1}, -{49,48,2}, -{49,48,3}, -{49,48,4}, -{49,48,5}, -{49,48,6}, -{49,48,7}, -{49,48,8}, -{49,48,9}, -{49,48,10}, -{49,48,11}, -{49,48,12}, -{49,48,13}, -{49,48,14}, -{49,48,15}, -{49,48,16}, -{49,48,17}, -{49,48,18}, -{49,48,19}, -{49,48,20}, -{49,48,21}, -{49,48,22}, -{49,48,23}, -{49,48,24}, -{49,48,25}, -{49,48,26}, -{49,48,27}, -{49,48,28}, -{49,48,29}, -{49,48,30}, -{49,48,31}, -{49,48,32}, -{49,48,33}, -{49,48,34}, -{49,48,35}, -{49,48,36}, -{49,48,37}, -{49,48,38}, -{49,48,39}, -{49,48,40}, -{49,48,41}, -{49,48,42}, -{49,48,43}, -{49,48,44}, -{49,48,45}, -{49,48,46}, -{49,48,47}, -{49,48,48}, -{49,48,49}, -{49,48,50}, -{49,48,51}, -{49,48,52}, -{49,48,53}, -{49,48,54}, -{49,48,55}, -{49,48,56}, -{49,48,57}, -{49,48,58}, -{49,48,59}, -{49,49,-80}, -{49,49,-79}, -{49,49,-78}, -{49,49,-77}, -{49,49,-76}, -{49,49,-75}, -{49,49,-74}, -{49,49,-73}, -{49,49,-72}, -{49,49,-71}, -{49,49,-70}, -{49,49,-69}, -{49,49,-68}, -{49,49,-67}, -{49,49,-66}, -{49,49,-65}, -{49,49,-64}, -{49,49,-63}, -{49,49,-62}, -{49,49,-61}, -{49,49,-60}, -{49,49,-59}, -{49,49,-58}, -{49,49,-57}, -{49,49,-56}, -{49,49,-55}, -{49,49,-54}, -{49,49,-53}, -{49,49,-52}, -{49,49,-51}, -{49,49,-50}, -{49,49,-49}, -{49,49,-48}, -{49,49,-47}, -{49,49,-46}, -{49,49,-45}, -{49,49,-44}, -{49,49,-43}, -{49,49,-42}, -{49,49,-41}, -{49,49,-40}, -{49,49,-39}, -{49,49,-38}, -{49,49,-37}, -{49,49,-36}, -{49,49,-35}, -{49,49,-34}, -{49,49,-33}, -{49,49,-32}, -{49,49,-31}, -{49,49,-30}, -{49,49,-29}, -{49,49,-28}, -{49,49,-27}, -{49,49,-26}, -{49,49,-25}, -{49,49,-24}, -{49,49,-23}, -{49,49,-22}, -{49,49,-21}, -{49,49,-20}, -{49,49,-19}, -{49,49,-18}, -{49,49,-17}, -{49,49,-16}, -{49,49,-15}, -{49,49,-14}, -{49,49,-13}, -{49,49,-12}, -{49,49,-11}, -{49,49,-10}, -{49,49,-9}, -{49,49,-8}, -{49,49,-7}, -{49,49,-6}, -{49,49,-5}, -{49,49,-4}, -{49,49,-3}, -{49,49,-2}, -{49,49,-1}, -{49,49,0}, -{49,49,1}, -{49,49,2}, -{49,49,3}, -{49,49,4}, -{49,49,5}, -{49,49,6}, -{49,49,7}, -{49,49,8}, -{49,49,9}, -{49,49,10}, -{49,49,11}, -{49,49,12}, -{49,49,13}, -{49,49,14}, -{49,49,15}, -{49,49,16}, -{49,49,17}, -{49,49,18}, -{49,49,19}, -{49,49,20}, -{49,49,21}, -{49,49,22}, -{49,49,23}, -{49,49,24}, -{49,49,25}, -{49,49,26}, -{49,49,27}, -{49,49,28}, -{49,49,29}, -{49,49,30}, -{49,49,31}, -{49,49,32}, -{49,49,33}, -{49,49,34}, -{49,49,35}, -{49,49,36}, -{49,49,37}, -{49,49,38}, -{49,49,39}, -{49,49,40}, -{49,49,41}, -{49,49,42}, -{49,49,43}, -{49,49,44}, -{49,49,45}, -{49,49,46}, -{49,49,47}, -{49,49,48}, -{49,49,49}, -{49,49,50}, -{49,49,51}, -{49,49,52}, -{49,49,53}, -{49,49,54}, -{49,49,55}, -{49,49,56}, -{49,49,57}, -{49,49,58}, -{49,49,59}, -{49,50,-80}, -{49,50,-79}, -{49,50,-78}, -{49,50,-77}, -{49,50,-76}, -{49,50,-75}, -{49,50,-74}, -{49,50,-73}, -{49,50,-72}, -{49,50,-71}, -{49,50,-70}, -{49,50,-69}, -{49,50,-68}, -{49,50,-67}, -{49,50,-66}, -{49,50,-65}, -{49,50,-64}, -{49,50,-63}, -{49,50,-62}, -{49,50,-61}, -{49,50,-60}, -{49,50,-59}, -{49,50,-58}, -{49,50,-57}, -{49,50,-56}, -{49,50,-55}, -{49,50,-54}, -{49,50,-53}, -{49,50,-52}, -{49,50,-51}, -{49,50,-50}, -{49,50,-49}, -{49,50,-48}, -{49,50,-47}, -{49,50,-46}, -{49,50,-45}, -{49,50,-44}, -{49,50,-43}, -{49,50,-42}, -{49,50,-41}, -{49,50,-40}, -{49,50,-39}, -{49,50,-38}, -{49,50,-37}, -{49,50,-36}, -{49,50,-35}, -{49,50,-34}, -{49,50,-33}, -{49,50,-32}, -{49,50,-31}, -{49,50,-30}, -{49,50,-29}, -{49,50,-28}, -{49,50,-27}, -{49,50,-26}, -{49,50,-25}, -{49,50,-24}, -{49,50,-23}, -{49,50,-22}, -{49,50,-21}, -{49,50,-20}, -{49,50,-19}, -{49,50,-18}, -{49,50,-17}, -{49,50,-16}, -{49,50,-15}, -{49,50,-14}, -{49,50,-13}, -{49,50,-12}, -{49,50,-11}, -{49,50,-10}, -{49,50,-9}, -{49,50,-8}, -{49,50,-7}, -{49,50,-6}, -{49,50,-5}, -{49,50,-4}, -{49,50,-3}, -{49,50,-2}, -{49,50,-1}, -{49,50,0}, -{49,50,1}, -{49,50,2}, -{49,50,3}, -{49,50,4}, -{49,50,5}, -{49,50,6}, -{49,50,7}, -{49,50,8}, -{49,50,9}, -{49,50,10}, -{49,50,11}, -{49,50,12}, -{49,50,13}, -{49,50,14}, -{49,50,15}, -{49,50,16}, -{49,50,17}, -{49,50,18}, -{49,50,19}, -{49,50,20}, -{49,50,21}, -{49,50,22}, -{49,50,23}, -{49,50,24}, -{49,50,25}, -{49,50,26}, -{49,50,27}, -{49,50,28}, -{49,50,29}, -{49,50,30}, -{49,50,31}, -{49,50,32}, -{49,50,33}, -{49,50,34}, -{49,50,35}, -{49,50,36}, -{49,50,37}, -{49,50,38}, -{49,50,39}, -{49,50,40}, -{49,50,41}, -{49,50,42}, -{49,50,43}, -{49,50,44}, -{49,50,45}, -{49,50,46}, -{49,50,47}, -{49,50,48}, -{49,50,49}, -{49,50,50}, -{49,50,51}, -{49,50,52}, -{49,50,53}, -{49,50,54}, -{49,50,55}, -{49,50,56}, -{49,50,57}, -{49,50,58}, -{49,50,59}, -{49,51,-80}, -{49,51,-79}, -{49,51,-78}, -{49,51,-77}, -{49,51,-76}, -{49,51,-75}, -{49,51,-74}, -{49,51,-73}, -{49,51,-72}, -{49,51,-71}, -{49,51,-70}, -{49,51,-69}, -{49,51,-68}, -{49,51,-67}, -{49,51,-66}, -{49,51,-65}, -{49,51,-64}, -{49,51,-63}, -{49,51,-62}, -{49,51,-61}, -{49,51,-60}, -{49,51,-59}, -{49,51,-58}, -{49,51,-57}, -{49,51,-56}, -{49,51,-55}, -{49,51,-54}, -{49,51,-53}, -{49,51,-52}, -{49,51,-51}, -{49,51,-50}, -{49,51,-49}, -{49,51,-48}, -{49,51,-47}, -{49,51,-46}, -{49,51,-45}, -{49,51,-44}, -{49,51,-43}, -{49,51,-42}, -{49,51,-41}, -{49,51,-40}, -{49,51,-39}, -{49,51,-38}, -{49,51,-37}, -{49,51,-36}, -{49,51,-35}, -{49,51,-34}, -{49,51,-33}, -{49,51,-32}, -{49,51,-31}, -{49,51,-30}, -{49,51,-29}, -{49,51,-28}, -{49,51,-27}, -{49,51,-26}, -{49,51,-25}, -{49,51,-24}, -{49,51,-23}, -{49,51,-22}, -{49,51,-21}, -{49,51,-20}, -{49,51,-19}, -{49,51,-18}, -{49,51,-17}, -{49,51,-16}, -{49,51,-15}, -{49,51,-14}, -{49,51,-13}, -{49,51,-12}, -{49,51,-11}, -{49,51,-10}, -{49,51,-9}, -{49,51,-8}, -{49,51,-7}, -{49,51,-6}, -{49,51,-5}, -{49,51,-4}, -{49,51,-3}, -{49,51,-2}, -{49,51,-1}, -{49,51,0}, -{49,51,1}, -{49,51,2}, -{49,51,3}, -{49,51,4}, -{49,51,5}, -{49,51,6}, -{49,51,7}, -{49,51,8}, -{49,51,9}, -{49,51,10}, -{49,51,11}, -{49,51,12}, -{49,51,13}, -{49,51,14}, -{49,51,15}, -{49,51,16}, -{49,51,17}, -{49,51,18}, -{49,51,19}, -{49,51,20}, -{49,51,21}, -{49,51,22}, -{49,51,23}, -{49,51,24}, -{49,51,25}, -{49,51,26}, -{49,51,27}, -{49,51,28}, -{49,51,29}, -{49,51,30}, -{49,51,31}, -{49,51,32}, -{49,51,33}, -{49,51,34}, -{49,51,35}, -{49,51,36}, -{49,51,37}, -{49,51,38}, -{49,51,39}, -{49,51,40}, -{49,51,41}, -{49,51,42}, -{49,51,43}, -{49,51,44}, -{49,51,45}, -{49,51,46}, -{49,51,47}, -{49,51,48}, -{49,51,49}, -{49,51,50}, -{49,51,51}, -{49,51,52}, -{49,51,53}, -{49,51,54}, -{49,51,55}, -{49,51,56}, -{49,51,57}, -{49,51,58}, -{49,51,59}, -{49,51,60}, -{49,52,-80}, -{49,52,-79}, -{49,52,-78}, -{49,52,-77}, -{49,52,-76}, -{49,52,-75}, -{49,52,-74}, -{49,52,-73}, -{49,52,-72}, -{49,52,-71}, -{49,52,-70}, -{49,52,-69}, -{49,52,-68}, -{49,52,-67}, -{49,52,-66}, -{49,52,-65}, -{49,52,-64}, -{49,52,-63}, -{49,52,-62}, -{49,52,-61}, -{49,52,-60}, -{49,52,-59}, -{49,52,-58}, -{49,52,-57}, -{49,52,-56}, -{49,52,-55}, -{49,52,-54}, -{49,52,-53}, -{49,52,-52}, -{49,52,-51}, -{49,52,-50}, -{49,52,-49}, -{49,52,-48}, -{49,52,-47}, -{49,52,-46}, -{49,52,-45}, -{49,52,-44}, -{49,52,-43}, -{49,52,-42}, -{49,52,-41}, -{49,52,-40}, -{49,52,-39}, -{49,52,-38}, -{49,52,-37}, -{49,52,-36}, -{49,52,-35}, -{49,52,-34}, -{49,52,-33}, -{49,52,-32}, -{49,52,-31}, -{49,52,-30}, -{49,52,-29}, -{49,52,-28}, -{49,52,-27}, -{49,52,-26}, -{49,52,-25}, -{49,52,-24}, -{49,52,-23}, -{49,52,-22}, -{49,52,-21}, -{49,52,-20}, -{49,52,-19}, -{49,52,-18}, -{49,52,-17}, -{49,52,-16}, -{49,52,-15}, -{49,52,-14}, -{49,52,-13}, -{49,52,-12}, -{49,52,-11}, -{49,52,-10}, -{49,52,-9}, -{49,52,-8}, -{49,52,-7}, -{49,52,-6}, -{49,52,-5}, -{49,52,-4}, -{49,52,-3}, -{49,52,-2}, -{49,52,-1}, -{49,52,0}, -{49,52,1}, -{49,52,2}, -{49,52,3}, -{49,52,4}, -{49,52,5}, -{49,52,6}, -{49,52,7}, -{49,52,8}, -{49,52,9}, -{49,52,10}, -{49,52,11}, -{49,52,12}, -{49,52,13}, -{49,52,14}, -{49,52,15}, -{49,52,16}, -{49,52,17}, -{49,52,18}, -{49,52,19}, -{49,52,20}, -{49,52,21}, -{49,52,22}, -{49,52,23}, -{49,52,24}, -{49,52,25}, -{49,52,26}, -{49,52,27}, -{49,52,28}, -{49,52,29}, -{49,52,30}, -{49,52,31}, -{49,52,32}, -{49,52,33}, -{49,52,34}, -{49,52,35}, -{49,52,36}, -{49,52,37}, -{49,52,38}, -{49,52,39}, -{49,52,40}, -{49,52,41}, -{49,52,42}, -{49,52,43}, -{49,52,44}, -{49,52,45}, -{49,52,46}, -{49,52,47}, -{49,52,48}, -{49,52,49}, -{49,52,50}, -{49,52,51}, -{49,52,52}, -{49,52,53}, -{49,52,54}, -{49,52,55}, -{49,52,56}, -{49,52,57}, -{49,52,58}, -{49,52,59}, -{49,52,60}, -{49,53,-80}, -{49,53,-79}, -{49,53,-78}, -{49,53,-77}, -{49,53,-76}, -{49,53,-75}, -{49,53,-74}, -{49,53,-73}, -{49,53,-72}, -{49,53,-71}, -{49,53,-70}, -{49,53,-69}, -{49,53,-68}, -{49,53,-67}, -{49,53,-66}, -{49,53,-65}, -{49,53,-64}, -{49,53,-63}, -{49,53,-62}, -{49,53,-61}, -{49,53,-60}, -{49,53,-59}, -{49,53,-58}, -{49,53,-57}, -{49,53,-56}, -{49,53,-55}, -{49,53,-54}, -{49,53,-53}, -{49,53,-52}, -{49,53,-51}, -{49,53,-50}, -{49,53,-49}, -{49,53,-48}, -{49,53,-47}, -{49,53,-46}, -{49,53,-45}, -{49,53,-44}, -{49,53,-43}, -{49,53,-42}, -{49,53,-41}, -{49,53,-40}, -{49,53,-39}, -{49,53,-38}, -{49,53,-37}, -{49,53,-36}, -{49,53,-35}, -{49,53,-34}, -{49,53,-33}, -{49,53,-32}, -{49,53,-31}, -{49,53,-30}, -{49,53,-29}, -{49,53,-28}, -{49,53,-27}, -{49,53,-26}, -{49,53,-25}, -{49,53,-24}, -{49,53,-23}, -{49,53,-22}, -{49,53,-21}, -{49,53,-20}, -{49,53,-19}, -{49,53,-18}, -{49,53,-17}, -{49,53,-16}, -{49,53,-15}, -{49,53,-14}, -{49,53,-13}, -{49,53,-12}, -{49,53,-11}, -{49,53,-10}, -{49,53,-9}, -{49,53,-8}, -{49,53,-7}, -{49,53,-6}, -{49,53,-5}, -{49,53,-4}, -{49,53,-3}, -{49,53,-2}, -{49,53,-1}, -{49,53,0}, -{49,53,1}, -{49,53,2}, -{49,53,3}, -{49,53,4}, -{49,53,5}, -{49,53,6}, -{49,53,7}, -{49,53,8}, -{49,53,9}, -{49,53,10}, -{49,53,11}, -{49,53,12}, -{49,53,13}, -{49,53,14}, -{49,53,15}, -{49,53,16}, -{49,53,17}, -{49,53,18}, -{49,53,19}, -{49,53,20}, -{49,53,21}, -{49,53,22}, -{49,53,23}, -{49,53,24}, -{49,53,25}, -{49,53,26}, -{49,53,27}, -{49,53,28}, -{49,53,29}, -{49,53,30}, -{49,53,31}, -{49,53,32}, -{49,53,33}, -{49,53,34}, -{49,53,35}, -{49,53,36}, -{49,53,37}, -{49,53,38}, -{49,53,39}, -{49,53,40}, -{49,53,41}, -{49,53,42}, -{49,53,43}, -{49,53,44}, -{49,53,45}, -{49,53,46}, -{49,53,47}, -{49,53,48}, -{49,53,49}, -{49,53,50}, -{49,53,51}, -{49,53,52}, -{49,53,53}, -{49,53,54}, -{49,53,55}, -{49,53,56}, -{49,53,57}, -{49,53,58}, -{49,53,59}, -{49,53,60}, -{49,54,-80}, -{49,54,-79}, -{49,54,-78}, -{49,54,-77}, -{49,54,-76}, -{49,54,-75}, -{49,54,-74}, -{49,54,-73}, -{49,54,-72}, -{49,54,-71}, -{49,54,-70}, -{49,54,-69}, -{49,54,-68}, -{49,54,-67}, -{49,54,-66}, -{49,54,-65}, -{49,54,-64}, -{49,54,-63}, -{49,54,-62}, -{49,54,-61}, -{49,54,-60}, -{49,54,-59}, -{49,54,-58}, -{49,54,-57}, -{49,54,-56}, -{49,54,-55}, -{49,54,-54}, -{49,54,-53}, -{49,54,-52}, -{49,54,-51}, -{49,54,-50}, -{49,54,-49}, -{49,54,-48}, -{49,54,-47}, -{49,54,-46}, -{49,54,-45}, -{49,54,-44}, -{49,54,-43}, -{49,54,-42}, -{49,54,-41}, -{49,54,-40}, -{49,54,-39}, -{49,54,-38}, -{49,54,-37}, -{49,54,-36}, -{49,54,-35}, -{49,54,-34}, -{49,54,-33}, -{49,54,-32}, -{49,54,-31}, -{49,54,-30}, -{49,54,-29}, -{49,54,-28}, -{49,54,-27}, -{49,54,-26}, -{49,54,-25}, -{49,54,-24}, -{49,54,-23}, -{49,54,-22}, -{49,54,-21}, -{49,54,-20}, -{49,54,-19}, -{49,54,-18}, -{49,54,-17}, -{49,54,-16}, -{49,54,-15}, -{49,54,-14}, -{49,54,-13}, -{49,54,-12}, -{49,54,-11}, -{49,54,-10}, -{49,54,-9}, -{49,54,-8}, -{49,54,-7}, -{49,54,-6}, -{49,54,-5}, -{49,54,-4}, -{49,54,-3}, -{49,54,-2}, -{49,54,-1}, -{49,54,0}, -{49,54,1}, -{49,54,2}, -{49,54,3}, -{49,54,4}, -{49,54,5}, -{49,54,6}, -{49,54,7}, -{49,54,8}, -{49,54,9}, -{49,54,10}, -{49,54,11}, -{49,54,12}, -{49,54,13}, -{49,54,14}, -{49,54,15}, -{49,54,16}, -{49,54,17}, -{49,54,18}, -{49,54,19}, -{49,54,20}, -{49,54,21}, -{49,54,22}, -{49,54,23}, -{49,54,24}, -{49,54,25}, -{49,54,26}, -{49,54,27}, -{49,54,28}, -{49,54,29}, -{49,54,30}, -{49,54,31}, -{49,54,32}, -{49,54,33}, -{49,54,34}, -{49,54,35}, -{49,54,36}, -{49,54,37}, -{49,54,38}, -{49,54,39}, -{49,54,40}, -{49,54,41}, -{49,54,42}, -{49,54,43}, -{49,54,44}, -{49,54,45}, -{49,54,46}, -{49,54,47}, -{49,54,48}, -{49,54,49}, -{49,54,50}, -{49,54,51}, -{49,54,52}, -{49,54,53}, -{49,54,54}, -{49,54,55}, -{49,54,56}, -{49,54,57}, -{49,54,58}, -{49,54,59}, -{49,54,60}, -{49,55,-80}, -{49,55,-79}, -{49,55,-78}, -{49,55,-77}, -{49,55,-76}, -{49,55,-75}, -{49,55,-74}, -{49,55,-73}, -{49,55,-72}, -{49,55,-71}, -{49,55,-70}, -{49,55,-69}, -{49,55,-68}, -{49,55,-67}, -{49,55,-66}, -{49,55,-65}, -{49,55,-64}, -{49,55,-63}, -{49,55,-62}, -{49,55,-61}, -{49,55,-60}, -{49,55,-59}, -{49,55,-58}, -{49,55,-57}, -{49,55,-56}, -{49,55,-55}, -{49,55,-54}, -{49,55,-53}, -{49,55,-52}, -{49,55,-51}, -{49,55,-50}, -{49,55,-49}, -{49,55,-48}, -{49,55,-47}, -{49,55,-46}, -{49,55,-45}, -{49,55,-44}, -{49,55,-43}, -{49,55,-42}, -{49,55,-41}, -{49,55,-40}, -{49,55,-39}, -{49,55,-38}, -{49,55,-37}, -{49,55,-36}, -{49,55,-35}, -{49,55,-34}, -{49,55,-33}, -{49,55,-32}, -{49,55,-31}, -{49,55,-30}, -{49,55,-29}, -{49,55,-28}, -{49,55,-27}, -{49,55,-26}, -{49,55,-25}, -{49,55,-24}, -{49,55,-23}, -{49,55,-22}, -{49,55,-21}, -{49,55,-20}, -{49,55,-19}, -{49,55,-18}, -{49,55,-17}, -{49,55,-16}, -{49,55,-15}, -{49,55,-14}, -{49,55,-13}, -{49,55,-12}, -{49,55,-11}, -{49,55,-10}, -{49,55,-9}, -{49,55,-8}, -{49,55,-7}, -{49,55,-6}, -{49,55,-5}, -{49,55,-4}, -{49,55,-3}, -{49,55,-2}, -{49,55,-1}, -{49,55,0}, -{49,55,1}, -{49,55,2}, -{49,55,3}, -{49,55,4}, -{49,55,5}, -{49,55,6}, -{49,55,7}, -{49,55,8}, -{49,55,9}, -{49,55,10}, -{49,55,11}, -{49,55,12}, -{49,55,13}, -{49,55,14}, -{49,55,15}, -{49,55,16}, -{49,55,17}, -{49,55,18}, -{49,55,19}, -{49,55,20}, -{49,55,21}, -{49,55,22}, -{49,55,23}, -{49,55,24}, -{49,55,25}, -{49,55,26}, -{49,55,27}, -{49,55,28}, -{49,55,29}, -{49,55,30}, -{49,55,31}, -{49,55,32}, -{49,55,33}, -{49,55,34}, -{49,55,35}, -{49,55,36}, -{49,55,37}, -{49,55,38}, -{49,55,39}, -{49,55,40}, -{49,55,41}, -{49,55,42}, -{49,55,43}, -{49,55,44}, -{49,55,45}, -{49,55,46}, -{49,55,47}, -{49,55,48}, -{49,55,49}, -{49,55,50}, -{49,55,51}, -{49,55,52}, -{49,55,53}, -{49,55,54}, -{49,55,55}, -{49,55,56}, -{49,55,57}, -{49,55,58}, -{49,55,59}, -{49,55,60}, -{49,56,-80}, -{49,56,-79}, -{49,56,-78}, -{49,56,-77}, -{49,56,-76}, -{49,56,-75}, -{49,56,-74}, -{49,56,-73}, -{49,56,-72}, -{49,56,-71}, -{49,56,-70}, -{49,56,-69}, -{49,56,-68}, -{49,56,-67}, -{49,56,-66}, -{49,56,-65}, -{49,56,-64}, -{49,56,-63}, -{49,56,-62}, -{49,56,-61}, -{49,56,-60}, -{49,56,-59}, -{49,56,-58}, -{49,56,-57}, -{49,56,-56}, -{49,56,-55}, -{49,56,-54}, -{49,56,-53}, -{49,56,-52}, -{49,56,-51}, -{49,56,-50}, -{49,56,-49}, -{49,56,-48}, -{49,56,-47}, -{49,56,-46}, -{49,56,-45}, -{49,56,-44}, -{49,56,-43}, -{49,56,-42}, -{49,56,-41}, -{49,56,-40}, -{49,56,-39}, -{49,56,-38}, -{49,56,-37}, -{49,56,-36}, -{49,56,-35}, -{49,56,-34}, -{49,56,-33}, -{49,56,-32}, -{49,56,-31}, -{49,56,-30}, -{49,56,-29}, -{49,56,-28}, -{49,56,-27}, -{49,56,-26}, -{49,56,-25}, -{49,56,-24}, -{49,56,-23}, -{49,56,-22}, -{49,56,-21}, -{49,56,-20}, -{49,56,-19}, -{49,56,-18}, -{49,56,-17}, -{49,56,-16}, -{49,56,-15}, -{49,56,-14}, -{49,56,-13}, -{49,56,-12}, -{49,56,-11}, -{49,56,-10}, -{49,56,-9}, -{49,56,-8}, -{49,56,-7}, -{49,56,-6}, -{49,56,-5}, -{49,56,-4}, -{49,56,-3}, -{49,56,-2}, -{49,56,-1}, -{49,56,0}, -{49,56,1}, -{49,56,2}, -{49,56,3}, -{49,56,4}, -{49,56,5}, -{49,56,6}, -{49,56,7}, -{49,56,8}, -{49,56,9}, -{49,56,10}, -{49,56,11}, -{49,56,12}, -{49,56,13}, -{49,56,14}, -{49,56,15}, -{49,56,16}, -{49,56,17}, -{49,56,18}, -{49,56,19}, -{49,56,20}, -{49,56,21}, -{49,56,22}, -{49,56,23}, -{49,56,24}, -{49,56,25}, -{49,56,26}, -{49,56,27}, -{49,56,28}, -{49,56,29}, -{49,56,30}, -{49,56,31}, -{49,56,32}, -{49,56,33}, -{49,56,34}, -{49,56,35}, -{49,56,36}, -{49,56,37}, -{49,56,38}, -{49,56,39}, -{49,56,40}, -{49,56,41}, -{49,56,42}, -{49,56,43}, -{49,56,44}, -{49,56,45}, -{49,56,46}, -{49,56,47}, -{49,56,48}, -{49,56,49}, -{49,56,50}, -{49,56,51}, -{49,56,52}, -{49,56,53}, -{49,56,54}, -{49,56,55}, -{49,56,56}, -{49,56,57}, -{49,56,58}, -{49,56,59}, -{49,56,60}, -{49,57,-80}, -{49,57,-79}, -{49,57,-78}, -{49,57,-77}, -{49,57,-76}, -{49,57,-75}, -{49,57,-74}, -{49,57,-73}, -{49,57,-72}, -{49,57,-71}, -{49,57,-70}, -{49,57,-69}, -{49,57,-68}, -{49,57,-67}, -{49,57,-66}, -{49,57,-65}, -{49,57,-64}, -{49,57,-63}, -{49,57,-62}, -{49,57,-61}, -{49,57,-60}, -{49,57,-59}, -{49,57,-58}, -{49,57,-57}, -{49,57,-56}, -{49,57,-55}, -{49,57,-54}, -{49,57,-53}, -{49,57,-52}, -{49,57,-51}, -{49,57,-50}, -{49,57,-49}, -{49,57,-48}, -{49,57,-47}, -{49,57,-46}, -{49,57,-45}, -{49,57,-44}, -{49,57,-43}, -{49,57,-42}, -{49,57,-41}, -{49,57,-40}, -{49,57,-39}, -{49,57,-38}, -{49,57,-37}, -{49,57,-36}, -{49,57,-35}, -{49,57,-34}, -{49,57,-33}, -{49,57,-32}, -{49,57,-31}, -{49,57,-30}, -{49,57,-29}, -{49,57,-28}, -{49,57,-27}, -{49,57,-26}, -{49,57,-25}, -{49,57,-24}, -{49,57,-23}, -{49,57,-22}, -{49,57,-21}, -{49,57,-20}, -{49,57,-19}, -{49,57,-18}, -{49,57,-17}, -{49,57,-16}, -{49,57,-15}, -{49,57,-14}, -{49,57,-13}, -{49,57,-12}, -{49,57,-11}, -{49,57,-10}, -{49,57,-9}, -{49,57,-8}, -{49,57,-7}, -{49,57,-6}, -{49,57,-5}, -{49,57,-4}, -{49,57,-3}, -{49,57,-2}, -{49,57,-1}, -{49,57,0}, -{49,57,1}, -{49,57,2}, -{49,57,3}, -{49,57,4}, -{49,57,5}, -{49,57,6}, -{49,57,7}, -{49,57,8}, -{49,57,9}, -{49,57,10}, -{49,57,11}, -{49,57,12}, -{49,57,13}, -{49,57,14}, -{49,57,15}, -{49,57,16}, -{49,57,17}, -{49,57,18}, -{49,57,19}, -{49,57,20}, -{49,57,21}, -{49,57,22}, -{49,57,23}, -{49,57,24}, -{49,57,25}, -{49,57,26}, -{49,57,27}, -{49,57,28}, -{49,57,29}, -{49,57,30}, -{49,57,31}, -{49,57,32}, -{49,57,33}, -{49,57,34}, -{49,57,35}, -{49,57,36}, -{49,57,37}, -{49,57,38}, -{49,57,39}, -{49,57,40}, -{49,57,41}, -{49,57,42}, -{49,57,43}, -{49,57,44}, -{49,57,45}, -{49,57,46}, -{49,57,47}, -{49,57,48}, -{49,57,49}, -{49,57,50}, -{49,57,51}, -{49,57,52}, -{49,57,53}, -{49,57,54}, -{49,57,55}, -{49,57,56}, -{49,57,57}, -{49,57,58}, -{49,57,59}, -{49,57,60}, -{49,58,-80}, -{49,58,-79}, -{49,58,-78}, -{49,58,-77}, -{49,58,-76}, -{49,58,-75}, -{49,58,-74}, -{49,58,-73}, -{49,58,-72}, -{49,58,-71}, -{49,58,-70}, -{49,58,-69}, -{49,58,-68}, -{49,58,-67}, -{49,58,-66}, -{49,58,-65}, -{49,58,-64}, -{49,58,-63}, -{49,58,-62}, -{49,58,-61}, -{49,58,-60}, -{49,58,-59}, -{49,58,-58}, -{49,58,-57}, -{49,58,-56}, -{49,58,-55}, -{49,58,-54}, -{49,58,-53}, -{49,58,-52}, -{49,58,-51}, -{49,58,-50}, -{49,58,-49}, -{49,58,-48}, -{49,58,-47}, -{49,58,-46}, -{49,58,-45}, -{49,58,-44}, -{49,58,-43}, -{49,58,-42}, -{49,58,-41}, -{49,58,-40}, -{49,58,-39}, -{49,58,-38}, -{49,58,-37}, -{49,58,-36}, -{49,58,-35}, -{49,58,-34}, -{49,58,-33}, -{49,58,-32}, -{49,58,-31}, -{49,58,-30}, -{49,58,-29}, -{49,58,-28}, -{49,58,-27}, -{49,58,-26}, -{49,58,-25}, -{49,58,-24}, -{49,58,-23}, -{49,58,-22}, -{49,58,-21}, -{49,58,-20}, -{49,58,-19}, -{49,58,-18}, -{49,58,-17}, -{49,58,-16}, -{49,58,-15}, -{49,58,-14}, -{49,58,-13}, -{49,58,-12}, -{49,58,-11}, -{49,58,-10}, -{49,58,-9}, -{49,58,-8}, -{49,58,-7}, -{49,58,-6}, -{49,58,-5}, -{49,58,-4}, -{49,58,-3}, -{49,58,-2}, -{49,58,-1}, -{49,58,0}, -{49,58,1}, -{49,58,2}, -{49,58,3}, -{49,58,4}, -{49,58,5}, -{49,58,6}, -{49,58,7}, -{49,58,8}, -{49,58,9}, -{49,58,10}, -{49,58,11}, -{49,58,12}, -{49,58,13}, -{49,58,14}, -{49,58,15}, -{49,58,16}, -{49,58,17}, -{49,58,18}, -{49,58,19}, -{49,58,20}, -{49,58,21}, -{49,58,22}, -{49,58,23}, -{49,58,24}, -{49,58,25}, -{49,58,26}, -{49,58,27}, -{49,58,28}, -{49,58,29}, -{49,58,30}, -{49,58,31}, -{49,58,32}, -{49,58,33}, -{49,58,34}, -{49,58,35}, -{49,58,36}, -{49,58,37}, -{49,58,38}, -{49,58,39}, -{49,58,40}, -{49,58,41}, -{49,58,42}, -{49,58,43}, -{49,58,44}, -{49,58,45}, -{49,58,46}, -{49,58,47}, -{49,58,48}, -{49,58,49}, -{49,58,50}, -{49,58,51}, -{49,58,52}, -{49,58,53}, -{49,58,54}, -{49,58,55}, -{49,58,56}, -{49,58,57}, -{49,58,58}, -{49,58,59}, -{49,58,60}, -{49,59,-80}, -{49,59,-79}, -{49,59,-78}, -{49,59,-77}, -{49,59,-76}, -{49,59,-75}, -{49,59,-74}, -{49,59,-73}, -{49,59,-72}, -{49,59,-71}, -{49,59,-70}, -{49,59,-69}, -{49,59,-68}, -{49,59,-67}, -{49,59,-66}, -{49,59,-65}, -{49,59,-64}, -{49,59,-63}, -{49,59,-62}, -{49,59,-61}, -{49,59,-60}, -{49,59,-59}, -{49,59,-58}, -{49,59,-57}, -{49,59,-56}, -{49,59,-55}, -{49,59,-54}, -{49,59,-53}, -{49,59,-52}, -{49,59,-51}, -{49,59,-50}, -{49,59,-49}, -{49,59,-48}, -{49,59,-47}, -{49,59,-46}, -{49,59,-45}, -{49,59,-44}, -{49,59,-43}, -{49,59,-42}, -{49,59,-41}, -{49,59,-40}, -{49,59,-39}, -{49,59,-38}, -{49,59,-37}, -{49,59,-36}, -{49,59,-35}, -{49,59,-34}, -{49,59,-33}, -{49,59,-32}, -{49,59,-31}, -{49,59,-30}, -{49,59,-29}, -{49,59,-28}, -{49,59,-27}, -{49,59,-26}, -{49,59,-25}, -{49,59,-24}, -{49,59,-23}, -{49,59,-22}, -{49,59,-21}, -{49,59,-20}, -{49,59,-19}, -{49,59,-18}, -{49,59,-17}, -{49,59,-16}, -{49,59,-15}, -{49,59,-14}, -{49,59,-13}, -{49,59,-12}, -{49,59,-11}, -{49,59,-10}, -{49,59,-9}, -{49,59,-8}, -{49,59,-7}, -{49,59,-6}, -{49,59,-5}, -{49,59,-4}, -{49,59,-3}, -{49,59,-2}, -{49,59,-1}, -{49,59,0}, -{49,59,1}, -{49,59,2}, -{49,59,3}, -{49,59,4}, -{49,59,5}, -{49,59,6}, -{49,59,7}, -{49,59,8}, -{49,59,9}, -{49,59,10}, -{49,59,11}, -{49,59,12}, -{49,59,13}, -{49,59,14}, -{49,59,15}, -{49,59,16}, -{49,59,17}, -{49,59,18}, -{49,59,19}, -{49,59,20}, -{49,59,21}, -{49,59,22}, -{49,59,23}, -{49,59,24}, -{49,59,25}, -{49,59,26}, -{49,59,27}, -{49,59,28}, -{49,59,29}, -{49,59,30}, -{49,59,31}, -{49,59,32}, -{49,59,33}, -{49,59,34}, -{49,59,35}, -{49,59,36}, -{49,59,37}, -{49,59,38}, -{49,59,39}, -{49,59,40}, -{49,59,41}, -{49,59,42}, -{49,59,43}, -{49,59,44}, -{49,59,45}, -{49,59,46}, -{49,59,47}, -{49,59,48}, -{49,59,49}, -{49,59,50}, -{49,59,51}, -{49,59,52}, -{49,59,53}, -{49,59,54}, -{49,59,55}, -{49,59,56}, -{49,59,57}, -{49,59,58}, -{49,59,59}, -{49,59,60}, -{49,59,61}, -{49,60,-80}, -{49,60,-79}, -{49,60,-78}, -{49,60,-77}, -{49,60,-76}, -{49,60,-75}, -{49,60,-74}, -{49,60,-73}, -{49,60,-72}, -{49,60,-71}, -{49,60,-70}, -{49,60,-69}, -{49,60,-68}, -{49,60,-67}, -{49,60,-66}, -{49,60,-65}, -{49,60,-64}, -{49,60,-63}, -{49,60,-62}, -{49,60,-61}, -{49,60,-60}, -{49,60,-59}, -{49,60,-58}, -{49,60,-57}, -{49,60,-56}, -{49,60,-55}, -{49,60,-54}, -{49,60,-53}, -{49,60,-52}, -{49,60,-51}, -{49,60,-50}, -{49,60,-49}, -{49,60,-48}, -{49,60,-47}, -{49,60,-46}, -{49,60,-45}, -{49,60,-44}, -{49,60,-43}, -{49,60,-42}, -{49,60,-41}, -{49,60,-40}, -{49,60,-39}, -{49,60,-38}, -{49,60,-37}, -{49,60,-36}, -{49,60,-35}, -{49,60,-34}, -{49,60,-33}, -{49,60,-32}, -{49,60,-31}, -{49,60,-30}, -{49,60,-29}, -{49,60,-28}, -{49,60,-27}, -{49,60,-26}, -{49,60,-25}, -{49,60,-24}, -{49,60,-23}, -{49,60,-22}, -{49,60,-21}, -{49,60,-20}, -{49,60,-19}, -{49,60,-18}, -{49,60,-17}, -{49,60,-16}, -{49,60,-15}, -{49,60,-14}, -{49,60,-13}, -{49,60,-12}, -{49,60,-11}, -{49,60,-10}, -{49,60,-9}, -{49,60,-8}, -{49,60,-7}, -{49,60,-6}, -{49,60,-5}, -{49,60,-4}, -{49,60,-3}, -{49,60,-2}, -{49,60,-1}, -{49,60,0}, -{49,60,1}, -{49,60,2}, -{49,60,3}, -{49,60,4}, -{49,60,5}, -{49,60,6}, -{49,60,7}, -{49,60,8}, -{49,60,9}, -{49,60,10}, -{49,60,11}, -{49,60,12}, -{49,60,13}, -{49,60,14}, -{49,60,15}, -{49,60,16}, -{49,60,17}, -{49,60,18}, -{49,60,19}, -{49,60,20}, -{49,60,21}, -{49,60,22}, -{49,60,23}, -{49,60,24}, -{49,60,25}, -{49,60,26}, -{49,60,27}, -{49,60,28}, -{49,60,29}, -{49,60,30}, -{49,60,31}, -{49,60,32}, -{49,60,33}, -{49,60,34}, -{49,60,35}, -{49,60,36}, -{49,60,37}, -{49,60,38}, -{49,60,39}, -{49,60,40}, -{49,60,41}, -{49,60,42}, -{49,60,43}, -{49,60,44}, -{49,60,45}, -{49,60,46}, -{49,60,47}, -{49,60,48}, -{49,60,49}, -{49,60,50}, -{49,60,51}, -{49,60,52}, -{49,60,53}, -{49,60,54}, -{49,60,55}, -{49,60,56}, -{49,60,57}, -{49,60,58}, -{49,60,59}, -{49,60,60}, -{49,60,61}, -{49,61,-80}, -{49,61,-79}, -{49,61,-78}, -{49,61,-77}, -{49,61,-76}, -{49,61,-75}, -{49,61,-74}, -{49,61,-73}, -{49,61,-72}, -{49,61,-71}, -{49,61,-70}, -{49,61,-69}, -{49,61,-68}, -{49,61,-67}, -{49,61,-66}, -{49,61,-65}, -{49,61,-64}, -{49,61,-63}, -{49,61,-62}, -{49,61,-61}, -{49,61,-60}, -{49,61,-59}, -{49,61,-58}, -{49,61,-57}, -{49,61,-56}, -{49,61,-55}, -{49,61,-54}, -{49,61,-53}, -{49,61,-52}, -{49,61,-51}, -{49,61,-50}, -{49,61,-49}, -{49,61,-48}, -{49,61,-47}, -{49,61,-46}, -{49,61,-45}, -{49,61,-44}, -{49,61,-43}, -{49,61,-42}, -{49,61,-41}, -{49,61,-40}, -{49,61,-39}, -{49,61,-38}, -{49,61,-37}, -{49,61,-36}, -{49,61,-35}, -{49,61,-34}, -{49,61,-33}, -{49,61,-32}, -{49,61,-31}, -{49,61,-30}, -{49,61,-29}, -{49,61,-28}, -{49,61,-27}, -{49,61,-26}, -{49,61,-25}, -{49,61,-24}, -{49,61,-23}, -{49,61,-22}, -{49,61,-21}, -{49,61,-20}, -{49,61,-19}, -{49,61,-18}, -{49,61,-17}, -{49,61,-16}, -{49,61,-15}, -{49,61,-14}, -{49,61,-13}, -{49,61,-12}, -{49,61,-11}, -{49,61,-10}, -{49,61,-9}, -{49,61,-8}, -{49,61,-7}, -{49,61,-6}, -{49,61,-5}, -{49,61,-4}, -{49,61,-3}, -{49,61,-2}, -{49,61,-1}, -{49,61,0}, -{49,61,1}, -{49,61,2}, -{49,61,3}, -{49,61,4}, -{49,61,5}, -{49,61,6}, -{49,61,7}, -{49,61,8}, -{49,61,9}, -{49,61,10}, -{49,61,11}, -{49,61,12}, -{49,61,13}, -{49,61,14}, -{49,61,15}, -{49,61,16}, -{49,61,17}, -{49,61,18}, -{49,61,19}, -{49,61,20}, -{49,61,21}, -{49,61,22}, -{49,61,23}, -{49,61,24}, -{49,61,25}, -{49,61,26}, -{49,61,27}, -{49,61,28}, -{49,61,29}, -{49,61,30}, -{49,61,31}, -{49,61,32}, -{49,61,33}, -{49,61,34}, -{49,61,35}, -{49,61,36}, -{49,61,37}, -{49,61,38}, -{49,61,39}, -{49,61,40}, -{49,61,41}, -{49,61,42}, -{49,61,43}, -{49,61,44}, -{49,61,45}, -{49,61,46}, -{49,61,47}, -{49,61,48}, -{49,61,49}, -{49,61,50}, -{49,61,51}, -{49,61,52}, -{49,61,53}, -{49,61,54}, -{49,61,55}, -{49,61,56}, -{49,61,57}, -{49,61,58}, -{49,61,59}, -{49,61,60}, -{49,61,61}, -{49,62,-80}, -{49,62,-79}, -{49,62,-78}, -{49,62,-77}, -{49,62,-76}, -{49,62,-75}, -{49,62,-74}, -{49,62,-73}, -{49,62,-72}, -{49,62,-71}, -{49,62,-70}, -{49,62,-69}, -{49,62,-68}, -{49,62,-67}, -{49,62,-66}, -{49,62,-65}, -{49,62,-64}, -{49,62,-63}, -{49,62,-62}, -{49,62,-61}, -{49,62,-60}, -{49,62,-59}, -{49,62,-58}, -{49,62,-57}, -{49,62,-56}, -{49,62,-55}, -{49,62,-54}, -{49,62,-53}, -{49,62,-52}, -{49,62,-51}, -{49,62,-50}, -{49,62,-49}, -{49,62,-48}, -{49,62,-47}, -{49,62,-46}, -{49,62,-45}, -{49,62,-44}, -{49,62,-43}, -{49,62,-42}, -{49,62,-41}, -{49,62,-40}, -{49,62,-39}, -{49,62,-38}, -{49,62,-37}, -{49,62,-36}, -{49,62,-35}, -{49,62,-34}, -{49,62,-33}, -{49,62,-32}, -{49,62,-31}, -{49,62,-30}, -{49,62,-29}, -{49,62,-28}, -{49,62,-27}, -{49,62,-26}, -{49,62,-25}, -{49,62,-24}, -{49,62,-23}, -{49,62,-22}, -{49,62,-21}, -{49,62,-20}, -{49,62,-19}, -{49,62,-18}, -{49,62,-17}, -{49,62,-16}, -{49,62,-15}, -{49,62,-14}, -{49,62,-13}, -{49,62,-12}, -{49,62,-11}, -{49,62,-10}, -{49,62,-9}, -{49,62,-8}, -{49,62,-7}, -{49,62,-6}, -{49,62,-5}, -{49,62,-4}, -{49,62,-3}, -{49,62,-2}, -{49,62,-1}, -{49,62,0}, -{49,62,1}, -{49,62,2}, -{49,62,3}, -{49,62,4}, -{49,62,5}, -{49,62,6}, -{49,62,7}, -{49,62,8}, -{49,62,9}, -{49,62,10}, -{49,62,11}, -{49,62,12}, -{49,62,13}, -{49,62,14}, -{49,62,15}, -{49,62,16}, -{49,62,17}, -{49,62,18}, -{49,62,19}, -{49,62,20}, -{49,62,21}, -{49,62,22}, -{49,62,23}, -{49,62,24}, -{49,62,25}, -{49,62,26}, -{49,62,27}, -{49,62,28}, -{49,62,29}, -{49,62,30}, -{49,62,31}, -{49,62,32}, -{49,62,33}, -{49,62,34}, -{49,62,35}, -{49,62,36}, -{49,62,37}, -{49,62,38}, -{49,62,39}, -{49,62,40}, -{49,62,41}, -{49,62,42}, -{49,62,43}, -{49,62,44}, -{49,62,45}, -{49,62,46}, -{49,62,47}, -{49,62,48}, -{49,62,49}, -{49,62,50}, -{49,62,51}, -{49,62,52}, -{49,62,53}, -{49,62,54}, -{49,62,55}, -{49,62,56}, -{49,62,57}, -{49,62,58}, -{49,62,59}, -{49,62,60}, -{49,62,61}, -{49,63,-80}, -{49,63,-79}, -{49,63,-78}, -{49,63,-77}, -{49,63,-76}, -{49,63,-75}, -{49,63,-74}, -{49,63,-73}, -{49,63,-72}, -{49,63,-71}, -{49,63,-70}, -{49,63,-69}, -{49,63,-68}, -{49,63,-67}, -{49,63,-66}, -{49,63,-65}, -{49,63,-64}, -{49,63,-63}, -{49,63,-62}, -{49,63,-61}, -{49,63,-60}, -{49,63,-59}, -{49,63,-58}, -{49,63,-57}, -{49,63,-56}, -{49,63,-55}, -{49,63,-54}, -{49,63,-53}, -{49,63,-52}, -{49,63,-51}, -{49,63,-50}, -{49,63,-49}, -{49,63,-48}, -{49,63,-47}, -{49,63,-46}, -{49,63,-45}, -{49,63,-44}, -{49,63,-43}, -{49,63,-42}, -{49,63,-41}, -{49,63,-40}, -{49,63,-39}, -{49,63,-38}, -{49,63,-37}, -{49,63,-36}, -{49,63,-35}, -{49,63,-34}, -{49,63,-33}, -{49,63,-32}, -{49,63,-31}, -{49,63,-30}, -{49,63,-29}, -{49,63,-28}, -{49,63,-27}, -{49,63,-26}, -{49,63,-25}, -{49,63,-24}, -{49,63,-23}, -{49,63,-22}, -{49,63,-21}, -{49,63,-20}, -{49,63,-19}, -{49,63,-18}, -{49,63,-17}, -{49,63,-16}, -{49,63,-15}, -{49,63,-14}, -{49,63,-13}, -{49,63,-12}, -{49,63,-11}, -{49,63,-10}, -{49,63,-9}, -{49,63,-8}, -{49,63,-7}, -{49,63,-6}, -{49,63,-5}, -{49,63,-4}, -{49,63,-3}, -{49,63,-2}, -{49,63,-1}, -{49,63,0}, -{49,63,1}, -{49,63,2}, -{49,63,3}, -{49,63,4}, -{49,63,5}, -{49,63,6}, -{49,63,7}, -{49,63,8}, -{49,63,9}, -{49,63,10}, -{49,63,11}, -{49,63,12}, -{49,63,13}, -{49,63,14}, -{49,63,15}, -{49,63,16}, -{49,63,17}, -{49,63,18}, -{49,63,19}, -{49,63,20}, -{49,63,21}, -{49,63,22}, -{49,63,23}, -{49,63,24}, -{49,63,25}, -{49,63,26}, -{49,63,27}, -{49,63,28}, -{49,63,29}, -{49,63,30}, -{49,63,31}, -{49,63,32}, -{49,63,33}, -{49,63,34}, -{49,63,35}, -{49,63,36}, -{49,63,37}, -{49,63,38}, -{49,63,39}, -{49,63,40}, -{49,63,41}, -{49,63,42}, -{49,63,43}, -{49,63,44}, -{49,63,45}, -{49,63,46}, -{49,63,47}, -{49,63,48}, -{49,63,49}, -{49,63,50}, -{49,63,51}, -{49,63,52}, -{49,63,53}, -{49,63,54}, -{49,63,55}, -{49,63,56}, -{49,63,57}, -{49,63,58}, -{49,63,59}, -{49,63,60}, -{49,63,61}, -{49,64,-80}, -{49,64,-79}, -{49,64,-78}, -{49,64,-77}, -{49,64,-76}, -{49,64,-75}, -{49,64,-74}, -{49,64,-73}, -{49,64,-72}, -{49,64,-71}, -{49,64,-70}, -{49,64,-69}, -{49,64,-68}, -{49,64,-67}, -{49,64,-66}, -{49,64,-65}, -{49,64,-64}, -{49,64,-63}, -{49,64,-62}, -{49,64,-61}, -{49,64,-60}, -{49,64,-59}, -{49,64,-58}, -{49,64,-57}, -{49,64,-56}, -{49,64,-55}, -{49,64,-54}, -{49,64,-53}, -{49,64,-52}, -{49,64,-51}, -{49,64,-50}, -{49,64,-49}, -{49,64,-48}, -{49,64,-47}, -{49,64,-46}, -{49,64,-45}, -{49,64,-44}, -{49,64,-43}, -{49,64,-42}, -{49,64,-41}, -{49,64,-40}, -{49,64,-39}, -{49,64,-38}, -{49,64,-37}, -{49,64,-36}, -{49,64,-35}, -{49,64,-34}, -{49,64,-33}, -{49,64,-32}, -{49,64,-31}, -{49,64,-30}, -{49,64,-29}, -{49,64,-28}, -{49,64,-27}, -{49,64,-26}, -{49,64,-25}, -{49,64,-24}, -{49,64,-23}, -{49,64,-22}, -{49,64,-21}, -{49,64,-20}, -{49,64,-19}, -{49,64,-18}, -{49,64,-17}, -{49,64,-16}, -{49,64,-15}, -{49,64,-14}, -{49,64,-13}, -{49,64,-12}, -{49,64,-11}, -{49,64,-10}, -{49,64,-9}, -{49,64,-8}, -{49,64,-7}, -{49,64,-6}, -{49,64,-5}, -{49,64,-4}, -{49,64,-3}, -{49,64,-2}, -{49,64,-1}, -{49,64,0}, -{49,64,1}, -{49,64,2}, -{49,64,3}, -{49,64,4}, -{49,64,5}, -{49,64,6}, -{49,64,7}, -{49,64,8}, -{49,64,9}, -{49,64,10}, -{49,64,11}, -{49,64,12}, -{49,64,13}, -{49,64,14}, -{49,64,15}, -{49,64,16}, -{49,64,17}, -{49,64,18}, -{49,64,19}, -{49,64,20}, -{49,64,21}, -{49,64,22}, -{49,64,23}, -{49,64,24}, -{49,64,25}, -{49,64,26}, -{49,64,27}, -{49,64,28}, -{49,64,29}, -{49,64,30}, -{49,64,31}, -{49,64,32}, -{49,64,33}, -{49,64,34}, -{49,64,35}, -{49,64,36}, -{49,64,37}, -{49,64,38}, -{49,64,39}, -{49,64,40}, -{49,64,41}, -{49,64,42}, -{49,64,43}, -{49,64,44}, -{49,64,45}, -{49,64,46}, -{49,64,47}, -{49,64,48}, -{49,64,49}, -{49,64,50}, -{49,64,51}, -{49,64,52}, -{49,64,53}, -{49,64,54}, -{49,64,55}, -{49,64,56}, -{49,64,57}, -{49,64,58}, -{49,64,59}, -{49,64,60}, -{49,64,61}, -{49,65,-80}, -{49,65,-79}, -{49,65,-78}, -{49,65,-77}, -{49,65,-76}, -{49,65,-75}, -{49,65,-74}, -{49,65,-73}, -{49,65,-72}, -{49,65,-71}, -{49,65,-70}, -{49,65,-69}, -{49,65,-68}, -{49,65,-67}, -{49,65,-66}, -{49,65,-65}, -{49,65,-64}, -{49,65,-63}, -{49,65,-62}, -{49,65,-61}, -{49,65,-60}, -{49,65,-59}, -{49,65,-58}, -{49,65,-57}, -{49,65,-56}, -{49,65,-55}, -{49,65,-54}, -{49,65,-53}, -{49,65,-52}, -{49,65,-51}, -{49,65,-50}, -{49,65,-49}, -{49,65,-48}, -{49,65,-47}, -{49,65,-46}, -{49,65,-45}, -{49,65,-44}, -{49,65,-43}, -{49,65,-42}, -{49,65,-41}, -{49,65,-40}, -{49,65,-39}, -{49,65,-38}, -{49,65,-37}, -{49,65,-36}, -{49,65,-35}, -{49,65,-34}, -{49,65,-33}, -{49,65,-32}, -{49,65,-31}, -{49,65,-30}, -{49,65,-29}, -{49,65,-28}, -{49,65,-27}, -{49,65,-26}, -{49,65,-25}, -{49,65,-24}, -{49,65,-23}, -{49,65,-22}, -{49,65,-21}, -{49,65,-20}, -{49,65,-19}, -{49,65,-18}, -{49,65,-17}, -{49,65,-16}, -{49,65,-15}, -{49,65,-14}, -{49,65,-13}, -{49,65,-12}, -{49,65,-11}, -{49,65,-10}, -{49,65,-9}, -{49,65,-8}, -{49,65,-7}, -{49,65,-6}, -{49,65,-5}, -{49,65,-4}, -{49,65,-3}, -{49,65,-2}, -{49,65,-1}, -{49,65,0}, -{49,65,1}, -{49,65,2}, -{49,65,3}, -{49,65,4}, -{49,65,5}, -{49,65,6}, -{49,65,7}, -{49,65,8}, -{49,65,9}, -{49,65,10}, -{49,65,11}, -{49,65,12}, -{49,65,13}, -{49,65,14}, -{49,65,15}, -{49,65,16}, -{49,65,17}, -{49,65,18}, -{49,65,19}, -{49,65,20}, -{49,65,21}, -{49,65,22}, -{49,65,23}, -{49,65,24}, -{49,65,25}, -{49,65,26}, -{49,65,27}, -{49,65,28}, -{49,65,29}, -{49,65,30}, -{49,65,31}, -{49,65,32}, -{49,65,33}, -{49,65,34}, -{49,65,35}, -{49,65,36}, -{49,65,37}, -{49,65,38}, -{49,65,39}, -{49,65,40}, -{49,65,41}, -{49,65,42}, -{49,65,43}, -{49,65,44}, -{49,65,45}, -{49,65,46}, -{49,65,47}, -{49,65,48}, -{49,65,49}, -{49,65,50}, -{49,65,51}, -{49,65,52}, -{49,65,53}, -{49,65,54}, -{49,65,55}, -{49,65,56}, -{49,65,57}, -{49,65,58}, -{49,65,59}, -{49,65,60}, -{49,65,61}, -{49,66,-80}, -{49,66,-79}, -{49,66,-78}, -{49,66,-77}, -{49,66,-76}, -{49,66,-75}, -{49,66,-74}, -{49,66,-73}, -{49,66,-72}, -{49,66,-71}, -{49,66,-70}, -{49,66,-69}, -{49,66,-68}, -{49,66,-67}, -{49,66,-66}, -{49,66,-65}, -{49,66,-64}, -{49,66,-63}, -{49,66,-62}, -{49,66,-61}, -{49,66,-60}, -{49,66,-59}, -{49,66,-58}, -{49,66,-57}, -{49,66,-56}, -{49,66,-55}, -{49,66,-54}, -{49,66,-53}, -{49,66,-52}, -{49,66,-51}, -{49,66,-50}, -{49,66,-49}, -{49,66,-48}, -{49,66,-47}, -{49,66,-46}, -{49,66,-45}, -{49,66,-44}, -{49,66,-43}, -{49,66,-42}, -{49,66,-41}, -{49,66,-40}, -{49,66,-39}, -{49,66,-38}, -{49,66,-37}, -{49,66,-36}, -{49,66,-35}, -{49,66,-34}, -{49,66,-33}, -{49,66,-32}, -{49,66,-31}, -{49,66,-30}, -{49,66,-29}, -{49,66,-28}, -{49,66,-27}, -{49,66,-26}, -{49,66,-25}, -{49,66,-24}, -{49,66,-23}, -{49,66,-22}, -{49,66,-21}, -{49,66,-20}, -{49,66,-19}, -{49,66,-18}, -{49,66,-17}, -{49,66,-16}, -{49,66,-15}, -{49,66,-14}, -{49,66,-13}, -{49,66,-12}, -{49,66,-11}, -{49,66,-10}, -{49,66,-9}, -{49,66,-8}, -{49,66,-7}, -{49,66,-6}, -{49,66,-5}, -{49,66,-4}, -{49,66,-3}, -{49,66,-2}, -{49,66,-1}, -{49,66,0}, -{49,66,1}, -{49,66,2}, -{49,66,3}, -{49,66,4}, -{49,66,5}, -{49,66,6}, -{49,66,7}, -{49,66,8}, -{49,66,9}, -{49,66,10}, -{49,66,11}, -{49,66,12}, -{49,66,13}, -{49,66,14}, -{49,66,15}, -{49,66,16}, -{49,66,17}, -{49,66,18}, -{49,66,19}, -{49,66,20}, -{49,66,21}, -{49,66,22}, -{49,66,23}, -{49,66,24}, -{49,66,25}, -{49,66,26}, -{49,66,27}, -{49,66,28}, -{49,66,29}, -{49,66,30}, -{49,66,31}, -{49,66,32}, -{49,66,33}, -{49,66,34}, -{49,66,35}, -{49,66,36}, -{49,66,37}, -{49,66,38}, -{49,66,39}, -{49,66,40}, -{49,66,41}, -{49,66,42}, -{49,66,43}, -{49,66,44}, -{49,66,45}, -{49,66,46}, -{49,66,47}, -{49,66,48}, -{49,66,49}, -{49,66,50}, -{49,66,51}, -{49,66,52}, -{49,66,53}, -{49,66,54}, -{49,66,55}, -{49,66,56}, -{49,66,57}, -{49,66,58}, -{49,66,59}, -{49,66,60}, -{49,66,61}, -{49,67,-80}, -{49,67,-79}, -{49,67,-78}, -{49,67,-77}, -{49,67,-76}, -{49,67,-75}, -{49,67,-74}, -{49,67,-73}, -{49,67,-72}, -{49,67,-71}, -{49,67,-70}, -{49,67,-69}, -{49,67,-68}, -{49,67,-67}, -{49,67,-66}, -{49,67,-65}, -{49,67,-64}, -{49,67,-63}, -{49,67,-62}, -{49,67,-61}, -{49,67,-60}, -{49,67,-59}, -{49,67,-58}, -{49,67,-57}, -{49,67,-56}, -{49,67,-55}, -{49,67,-54}, -{49,67,-53}, -{49,67,-52}, -{49,67,-51}, -{49,67,-50}, -{49,67,-49}, -{49,67,-48}, -{49,67,-47}, -{49,67,-46}, -{49,67,-45}, -{49,67,-44}, -{49,67,-43}, -{49,67,-42}, -{49,67,-41}, -{49,67,-40}, -{49,67,-39}, -{49,67,-38}, -{49,67,-37}, -{49,67,-36}, -{49,67,-35}, -{49,67,-34}, -{49,67,-33}, -{49,67,-32}, -{49,67,-31}, -{49,67,-30}, -{49,67,-29}, -{49,67,-28}, -{49,67,-27}, -{49,67,-26}, -{49,67,-25}, -{49,67,-24}, -{49,67,-23}, -{49,67,-22}, -{49,67,-21}, -{49,67,-20}, -{49,67,-19}, -{49,67,-18}, -{49,67,-17}, -{49,67,-16}, -{49,67,-15}, -{49,67,-14}, -{49,67,-13}, -{49,67,-12}, -{49,67,-11}, -{49,67,-10}, -{49,67,-9}, -{49,67,-8}, -{49,67,-7}, -{49,67,-6}, -{49,67,-5}, -{49,67,-4}, -{49,67,-3}, -{49,67,-2}, -{49,67,-1}, -{49,67,0}, -{49,67,1}, -{49,67,2}, -{49,67,3}, -{49,67,4}, -{49,67,5}, -{49,67,6}, -{49,67,7}, -{49,67,8}, -{49,67,9}, -{49,67,10}, -{49,67,11}, -{49,67,12}, -{49,67,13}, -{49,67,14}, -{49,67,15}, -{49,67,16}, -{49,67,17}, -{49,67,18}, -{49,67,19}, -{49,67,20}, -{49,67,21}, -{49,67,22}, -{49,67,23}, -{49,67,24}, -{49,67,25}, -{49,67,26}, -{49,67,27}, -{49,67,28}, -{49,67,29}, -{49,67,30}, -{49,67,31}, -{49,67,32}, -{49,67,33}, -{49,67,34}, -{49,67,35}, -{49,67,36}, -{49,67,37}, -{49,67,38}, -{49,67,39}, -{49,67,40}, -{49,67,41}, -{49,67,42}, -{49,67,43}, -{49,67,44}, -{49,67,45}, -{49,67,46}, -{49,67,47}, -{49,67,48}, -{49,67,49}, -{49,67,50}, -{49,67,51}, -{49,67,52}, -{49,67,53}, -{49,67,54}, -{49,67,55}, -{49,67,56}, -{49,67,57}, -{49,67,58}, -{49,67,59}, -{49,67,60}, -{49,67,61}, -{49,67,62}, -{49,68,-80}, -{49,68,-79}, -{49,68,-78}, -{49,68,-77}, -{49,68,-76}, -{49,68,-75}, -{49,68,-74}, -{49,68,-73}, -{49,68,-72}, -{49,68,-71}, -{49,68,-70}, -{49,68,-69}, -{49,68,-68}, -{49,68,-67}, -{49,68,-66}, -{49,68,-65}, -{49,68,-64}, -{49,68,-63}, -{49,68,-62}, -{49,68,-61}, -{49,68,-60}, -{49,68,-59}, -{49,68,-58}, -{49,68,-57}, -{49,68,-56}, -{49,68,-55}, -{49,68,-54}, -{49,68,-53}, -{49,68,-52}, -{49,68,-51}, -{49,68,-50}, -{49,68,-49}, -{49,68,-48}, -{49,68,-47}, -{49,68,-46}, -{49,68,-45}, -{49,68,-44}, -{49,68,-43}, -{49,68,-42}, -{49,68,-41}, -{49,68,-40}, -{49,68,-39}, -{49,68,-38}, -{49,68,-37}, -{49,68,-36}, -{49,68,-35}, -{49,68,-34}, -{49,68,-33}, -{49,68,-32}, -{49,68,-31}, -{49,68,-30}, -{49,68,-29}, -{49,68,-28}, -{49,68,-27}, -{49,68,-26}, -{49,68,-25}, -{49,68,-24}, -{49,68,-23}, -{49,68,-22}, -{49,68,-21}, -{49,68,-20}, -{49,68,-19}, -{49,68,-18}, -{49,68,-17}, -{49,68,-16}, -{49,68,-15}, -{49,68,-14}, -{49,68,-13}, -{49,68,-12}, -{49,68,-11}, -{49,68,-10}, -{49,68,-9}, -{49,68,-8}, -{49,68,-7}, -{49,68,-6}, -{49,68,-5}, -{49,68,-4}, -{49,68,-3}, -{49,68,-2}, -{49,68,-1}, -{49,68,0}, -{49,68,1}, -{49,68,2}, -{49,68,3}, -{49,68,4}, -{49,68,5}, -{49,68,6}, -{49,68,7}, -{49,68,8}, -{49,68,9}, -{49,68,10}, -{49,68,11}, -{49,68,12}, -{49,68,13}, -{49,68,14}, -{49,68,15}, -{49,68,16}, -{49,68,17}, -{49,68,18}, -{49,68,19}, -{49,68,20}, -{49,68,21}, -{49,68,22}, -{49,68,23}, -{49,68,24}, -{49,68,25}, -{49,68,26}, -{49,68,27}, -{49,68,28}, -{49,68,29}, -{49,68,30}, -{49,68,31}, -{49,68,32}, -{49,68,33}, -{49,68,34}, -{49,68,35}, -{49,68,36}, -{49,68,37}, -{49,68,38}, -{49,68,39}, -{49,68,40}, -{49,68,41}, -{49,68,42}, -{49,68,43}, -{49,68,44}, -{49,68,45}, -{49,68,46}, -{49,68,47}, -{49,68,48}, -{49,68,49}, -{49,68,50}, -{49,68,51}, -{49,68,52}, -{49,68,53}, -{49,68,54}, -{49,68,55}, -{49,68,56}, -{49,68,57}, -{49,68,58}, -{49,68,59}, -{49,68,60}, -{49,68,61}, -{49,68,62}, -{49,69,-80}, -{49,69,-79}, -{49,69,-78}, -{49,69,-77}, -{49,69,-76}, -{49,69,-75}, -{49,69,-74}, -{49,69,-73}, -{49,69,-72}, -{49,69,-71}, -{49,69,-70}, -{49,69,-69}, -{49,69,-68}, -{49,69,-67}, -{49,69,-66}, -{49,69,-65}, -{49,69,-64}, -{49,69,-63}, -{49,69,-62}, -{49,69,-61}, -{49,69,-60}, -{49,69,-59}, -{49,69,-58}, -{49,69,-57}, -{49,69,-56}, -{49,69,-55}, -{49,69,-54}, -{49,69,-53}, -{49,69,-52}, -{49,69,-51}, -{49,69,-50}, -{49,69,-49}, -{49,69,-48}, -{49,69,-47}, -{49,69,-46}, -{49,69,-45}, -{49,69,-44}, -{49,69,-43}, -{49,69,-42}, -{49,69,-41}, -{49,69,-40}, -{49,69,-39}, -{49,69,-38}, -{49,69,-37}, -{49,69,-36}, -{49,69,-35}, -{49,69,-34}, -{49,69,-33}, -{49,69,-32}, -{49,69,-31}, -{49,69,-30}, -{49,69,-29}, -{49,69,-28}, -{49,69,-27}, -{49,69,-26}, -{49,69,-25}, -{49,69,-24}, -{49,69,-23}, -{49,69,-22}, -{49,69,-21}, -{49,69,-20}, -{49,69,-19}, -{49,69,-18}, -{49,69,-17}, -{49,69,-16}, -{49,69,-15}, -{49,69,-14}, -{49,69,-13}, -{49,69,-12}, -{49,69,-11}, -{49,69,-10}, -{49,69,-9}, -{49,69,-8}, -{49,69,-7}, -{49,69,-6}, -{49,69,-5}, -{49,69,-4}, -{49,69,-3}, -{49,69,-2}, -{49,69,-1}, -{49,69,0}, -{49,69,1}, -{49,69,2}, -{49,69,3}, -{49,69,4}, -{49,69,5}, -{49,69,6}, -{49,69,7}, -{49,69,8}, -{49,69,9}, -{49,69,10}, -{49,69,11}, -{49,69,12}, -{49,69,13}, -{49,69,14}, -{49,69,15}, -{49,69,16}, -{49,69,17}, -{49,69,18}, -{49,69,19}, -{49,69,20}, -{49,69,21}, -{49,69,22}, -{49,69,23}, -{49,69,24}, -{49,69,25}, -{49,69,26}, -{49,69,27}, -{49,69,28}, -{49,69,29}, -{49,69,30}, -{49,69,31}, -{49,69,32}, -{49,69,33}, -{49,69,34}, -{49,69,35}, -{49,69,36}, -{49,69,37}, -{49,69,38}, -{49,69,39}, -{49,69,40}, -{49,69,41}, -{49,69,42}, -{49,69,43}, -{49,69,44}, -{49,69,45}, -{49,69,46}, -{49,69,47}, -{49,69,48}, -{49,69,49}, -{49,69,50}, -{49,69,51}, -{49,69,52}, -{49,69,53}, -{49,69,54}, -{49,69,55}, -{49,69,56}, -{49,69,57}, -{49,69,58}, -{49,69,59}, -{49,69,60}, -{49,69,61}, -{49,69,62}, -{49,70,-80}, -{49,70,-79}, -{49,70,-78}, -{49,70,-77}, -{49,70,-76}, -{49,70,-75}, -{49,70,-74}, -{49,70,-73}, -{49,70,-72}, -{49,70,-71}, -{49,70,-70}, -{49,70,-69}, -{49,70,-68}, -{49,70,-67}, -{49,70,-66}, -{49,70,-65}, -{49,70,-64}, -{49,70,-63}, -{49,70,-62}, -{49,70,-61}, -{49,70,-60}, -{49,70,-59}, -{49,70,-58}, -{49,70,-57}, -{49,70,-56}, -{49,70,-55}, -{49,70,-54}, -{49,70,-53}, -{49,70,-52}, -{49,70,-51}, -{49,70,-50}, -{49,70,-49}, -{49,70,-48}, -{49,70,-47}, -{49,70,-46}, -{49,70,-45}, -{49,70,-44}, -{49,70,-43}, -{49,70,-42}, -{49,70,-41}, -{49,70,-40}, -{49,70,-39}, -{49,70,-38}, -{49,70,-37}, -{49,70,-36}, -{49,70,-35}, -{49,70,-34}, -{49,70,-33}, -{49,70,-32}, -{49,70,-31}, -{49,70,-30}, -{49,70,-29}, -{49,70,-28}, -{49,70,-27}, -{49,70,-26}, -{49,70,-25}, -{49,70,-24}, -{49,70,-23}, -{49,70,-22}, -{49,70,-21}, -{49,70,-20}, -{49,70,-19}, -{49,70,-18}, -{49,70,-17}, -{49,70,-16}, -{49,70,-15}, -{49,70,-14}, -{49,70,-13}, -{49,70,-12}, -{49,70,-11}, -{49,70,-10}, -{49,70,-9}, -{49,70,-8}, -{49,70,-7}, -{49,70,-6}, -{49,70,-5}, -{49,70,-4}, -{49,70,-3}, -{49,70,-2}, -{49,70,-1}, -{49,70,0}, -{49,70,1}, -{49,70,2}, -{49,70,3}, -{49,70,4}, -{49,70,5}, -{49,70,6}, -{49,70,7}, -{49,70,8}, -{49,70,9}, -{49,70,10}, -{49,70,11}, -{49,70,12}, -{49,70,13}, -{49,70,14}, -{49,70,15}, -{49,70,16}, -{49,70,17}, -{49,70,18}, -{49,70,19}, -{49,70,20}, -{49,70,21}, -{49,70,22}, -{49,70,23}, -{49,70,24}, -{49,70,25}, -{49,70,26}, -{49,70,27}, -{49,70,28}, -{49,70,29}, -{49,70,30}, -{49,70,31}, -{49,70,32}, -{49,70,33}, -{49,70,34}, -{49,70,35}, -{49,70,36}, -{49,70,37}, -{49,70,38}, -{49,70,39}, -{49,70,40}, -{49,70,41}, -{49,70,42}, -{49,70,43}, -{49,70,44}, -{49,70,45}, -{49,70,46}, -{49,70,47}, -{49,70,48}, -{49,70,49}, -{49,70,50}, -{49,70,51}, -{49,70,52}, -{49,70,53}, -{49,70,54}, -{49,70,55}, -{49,70,56}, -{49,70,57}, -{49,70,58}, -{49,70,59}, -{49,70,60}, -{49,70,61}, -{49,70,62}, -{49,71,-80}, -{49,71,-79}, -{49,71,-78}, -{49,71,-77}, -{49,71,-76}, -{49,71,-75}, -{49,71,-74}, -{49,71,-73}, -{49,71,-72}, -{49,71,-71}, -{49,71,-70}, -{49,71,-69}, -{49,71,-68}, -{49,71,-67}, -{49,71,-66}, -{49,71,-65}, -{49,71,-64}, -{49,71,-63}, -{49,71,-62}, -{49,71,-61}, -{49,71,-60}, -{49,71,-59}, -{49,71,-58}, -{49,71,-57}, -{49,71,-56}, -{49,71,-55}, -{49,71,-54}, -{49,71,-53}, -{49,71,-52}, -{49,71,-51}, -{49,71,-50}, -{49,71,-49}, -{49,71,-48}, -{49,71,-47}, -{49,71,-46}, -{49,71,-45}, -{49,71,-44}, -{49,71,-43}, -{49,71,-42}, -{49,71,-41}, -{49,71,-40}, -{49,71,-39}, -{49,71,-38}, -{49,71,-37}, -{49,71,-36}, -{49,71,-35}, -{49,71,-34}, -{49,71,-33}, -{49,71,-32}, -{49,71,-31}, -{49,71,-30}, -{49,71,-29}, -{49,71,-28}, -{49,71,-27}, -{49,71,-26}, -{49,71,-25}, -{49,71,-24}, -{49,71,-23}, -{49,71,-22}, -{49,71,-21}, -{49,71,-20}, -{49,71,-19}, -{49,71,-18}, -{49,71,-17}, -{49,71,-16}, -{49,71,-15}, -{49,71,-14}, -{49,71,-13}, -{49,71,-12}, -{49,71,-11}, -{49,71,-10}, -{49,71,-9}, -{49,71,-8}, -{49,71,-7}, -{49,71,-6}, -{49,71,-5}, -{49,71,-4}, -{49,71,-3}, -{49,71,-2}, -{49,71,-1}, -{49,71,0}, -{49,71,1}, -{49,71,2}, -{49,71,3}, -{49,71,4}, -{49,71,5}, -{49,71,6}, -{49,71,7}, -{49,71,8}, -{49,71,9}, -{49,71,10}, -{49,71,11}, -{49,71,12}, -{49,71,13}, -{49,71,14}, -{49,71,15}, -{49,71,16}, -{49,71,17}, -{49,71,18}, -{49,71,19}, -{49,71,20}, -{49,71,21}, -{49,71,22}, -{49,71,23}, -{49,71,24}, -{49,71,25}, -{49,71,26}, -{49,71,27}, -{49,71,28}, -{49,71,29}, -{49,71,30}, -{49,71,31}, -{49,71,32}, -{49,71,33}, -{49,71,34}, -{49,71,35}, -{49,71,36}, -{49,71,37}, -{49,71,38}, -{49,71,39}, -{49,71,40}, -{49,71,41}, -{49,71,42}, -{49,71,43}, -{49,71,44}, -{49,71,45}, -{49,71,46}, -{49,71,47}, -{49,71,48}, -{49,71,49}, -{49,71,50}, -{49,71,51}, -{49,71,52}, -{49,71,53}, -{49,71,54}, -{49,71,55}, -{49,71,56}, -{49,71,57}, -{49,71,58}, -{49,71,59}, -{49,71,60}, -{49,71,61}, -{49,71,62}, -{49,72,-80}, -{49,72,-79}, -{49,72,-78}, -{49,72,-77}, -{49,72,-76}, -{49,72,-75}, -{49,72,-74}, -{49,72,-73}, -{49,72,-72}, -{49,72,-71}, -{49,72,-70}, -{49,72,-69}, -{49,72,-68}, -{49,72,-67}, -{49,72,-66}, -{49,72,-65}, -{49,72,-64}, -{49,72,-63}, -{49,72,-62}, -{49,72,-61}, -{49,72,-60}, -{49,72,-59}, -{49,72,-58}, -{49,72,-57}, -{49,72,-56}, -{49,72,-55}, -{49,72,-54}, -{49,72,-53}, -{49,72,-52}, -{49,72,-51}, -{49,72,-50}, -{49,72,-49}, -{49,72,-48}, -{49,72,-47}, -{49,72,-46}, -{49,72,-45}, -{49,72,-44}, -{49,72,-43}, -{49,72,-42}, -{49,72,-41}, -{49,72,-40}, -{49,72,-39}, -{49,72,-38}, -{49,72,-37}, -{49,72,-36}, -{49,72,-35}, -{49,72,-34}, -{49,72,-33}, -{49,72,-32}, -{49,72,-31}, -{49,72,-30}, -{49,72,-29}, -{49,72,-28}, -{49,72,-27}, -{49,72,-26}, -{49,72,-25}, -{49,72,-24}, -{49,72,-23}, -{49,72,-22}, -{49,72,-21}, -{49,72,-20}, -{49,72,-19}, -{49,72,-18}, -{49,72,-17}, -{49,72,-16}, -{49,72,-15}, -{49,72,-14}, -{49,72,-13}, -{49,72,-12}, -{49,72,-11}, -{49,72,-10}, -{49,72,-9}, -{49,72,-8}, -{49,72,-7}, -{49,72,-6}, -{49,72,-5}, -{49,72,-4}, -{49,72,-3}, -{49,72,-2}, -{49,72,-1}, -{49,72,0}, -{49,72,1}, -{49,72,2}, -{49,72,3}, -{49,72,4}, -{49,72,5}, -{49,72,6}, -{49,72,7}, -{49,72,8}, -{49,72,9}, -{49,72,10}, -{49,72,11}, -{49,72,12}, -{49,72,13}, -{49,72,14}, -{49,72,15}, -{49,72,16}, -{49,72,17}, -{49,72,18}, -{49,72,19}, -{49,72,20}, -{49,72,21}, -{49,72,22}, -{49,72,23}, -{49,72,24}, -{49,72,25}, -{49,72,26}, -{49,72,27}, -{49,72,28}, -{49,72,29}, -{49,72,30}, -{49,72,31}, -{49,72,32}, -{49,72,33}, -{49,72,34}, -{49,72,35}, -{49,72,36}, -{49,72,37}, -{49,72,38}, -{49,72,39}, -{49,72,40}, -{49,72,41}, -{49,72,42}, -{49,72,43}, -{49,72,44}, -{49,72,45}, -{49,72,46}, -{49,72,47}, -{49,72,48}, -{49,72,49}, -{49,72,50}, -{49,72,51}, -{49,72,52}, -{49,72,53}, -{49,72,54}, -{49,72,55}, -{49,72,56}, -{49,72,57}, -{49,72,58}, -{49,72,59}, -{49,72,60}, -{49,72,61}, -{49,72,62}, -{49,73,-80}, -{49,73,-79}, -{49,73,-78}, -{49,73,-77}, -{49,73,-76}, -{49,73,-75}, -{49,73,-74}, -{49,73,-73}, -{49,73,-72}, -{49,73,-71}, -{49,73,-70}, -{49,73,-69}, -{49,73,-68}, -{49,73,-67}, -{49,73,-66}, -{49,73,-65}, -{49,73,-64}, -{49,73,-63}, -{49,73,-62}, -{49,73,-61}, -{49,73,-60}, -{49,73,-59}, -{49,73,-58}, -{49,73,-57}, -{49,73,-56}, -{49,73,-55}, -{49,73,-54}, -{49,73,-53}, -{49,73,-52}, -{49,73,-51}, -{49,73,-50}, -{49,73,-49}, -{49,73,-48}, -{49,73,-47}, -{49,73,-46}, -{49,73,-45}, -{49,73,-44}, -{49,73,-43}, -{49,73,-42}, -{49,73,-41}, -{49,73,-40}, -{49,73,-39}, -{49,73,-38}, -{49,73,-37}, -{49,73,-36}, -{49,73,-35}, -{49,73,-34}, -{49,73,-33}, -{49,73,-32}, -{49,73,-31}, -{49,73,-30}, -{49,73,-29}, -{49,73,-28}, -{49,73,-27}, -{49,73,-26}, -{49,73,-25}, -{49,73,-24}, -{49,73,-23}, -{49,73,-22}, -{49,73,-21}, -{49,73,-20}, -{49,73,-19}, -{49,73,-18}, -{49,73,-17}, -{49,73,-16}, -{49,73,-15}, -{49,73,-14}, -{49,73,-13}, -{49,73,-12}, -{49,73,-11}, -{49,73,-10}, -{49,73,-9}, -{49,73,-8}, -{49,73,-7}, -{49,73,-6}, -{49,73,-5}, -{49,73,-4}, -{49,73,-3}, -{49,73,-2}, -{49,73,-1}, -{49,73,0}, -{49,73,1}, -{49,73,2}, -{49,73,3}, -{49,73,4}, -{49,73,5}, -{49,73,6}, -{49,73,7}, -{49,73,8}, -{49,73,9}, -{49,73,10}, -{49,73,11}, -{49,73,12}, -{49,73,13}, -{49,73,14}, -{49,73,15}, -{49,73,16}, -{49,73,17}, -{49,73,18}, -{49,73,19}, -{49,73,20}, -{49,73,21}, -{49,73,22}, -{49,73,23}, -{49,73,24}, -{49,73,25}, -{49,73,26}, -{49,73,27}, -{49,73,28}, -{49,73,29}, -{49,73,30}, -{49,73,31}, -{49,73,32}, -{49,73,33}, -{49,73,34}, -{49,73,35}, -{49,73,36}, -{49,73,37}, -{49,73,38}, -{49,73,39}, -{49,73,40}, -{49,73,41}, -{49,73,42}, -{49,73,43}, -{49,73,44}, -{49,73,45}, -{49,73,46}, -{49,73,47}, -{49,73,48}, -{49,73,49}, -{49,73,50}, -{49,73,51}, -{49,73,52}, -{49,73,53}, -{49,73,54}, -{49,73,55}, -{49,73,56}, -{49,73,57}, -{49,73,58}, -{49,73,59}, -{49,73,60}, -{49,73,61}, -{49,73,62}, -{49,74,-80}, -{49,74,-79}, -{49,74,-78}, -{49,74,-77}, -{49,74,-76}, -{49,74,-75}, -{49,74,-74}, -{49,74,-73}, -{49,74,-72}, -{49,74,-71}, -{49,74,-70}, -{49,74,-69}, -{49,74,-68}, -{49,74,-67}, -{49,74,-66}, -{49,74,-65}, -{49,74,-64}, -{49,74,-63}, -{49,74,-62}, -{49,74,-61}, -{49,74,-60}, -{49,74,-59}, -{49,74,-58}, -{49,74,-57}, -{49,74,-56}, -{49,74,-55}, -{49,74,-54}, -{49,74,-53}, -{49,74,-52}, -{49,74,-51}, -{49,74,-50}, -{49,74,-49}, -{49,74,-48}, -{49,74,-47}, -{49,74,-46}, -{49,74,-45}, -{49,74,-44}, -{49,74,-43}, -{49,74,-42}, -{49,74,-41}, -{49,74,-40}, -{49,74,-39}, -{49,74,-38}, -{49,74,-37}, -{49,74,-36}, -{49,74,-35}, -{49,74,-34}, -{49,74,-33}, -{49,74,-32}, -{49,74,-31}, -{49,74,-30}, -{49,74,-29}, -{49,74,-28}, -{49,74,-27}, -{49,74,-26}, -{49,74,-25}, -{49,74,-24}, -{49,74,-23}, -{49,74,-22}, -{49,74,-21}, -{49,74,-20}, -{49,74,-19}, -{49,74,-18}, -{49,74,-17}, -{49,74,-16}, -{49,74,-15}, -{49,74,-14}, -{49,74,-13}, -{49,74,-12}, -{49,74,-11}, -{49,74,-10}, -{49,74,-9}, -{49,74,-8}, -{49,74,-7}, -{49,74,-6}, -{49,74,-5}, -{49,74,-4}, -{49,74,-3}, -{49,74,-2}, -{49,74,-1}, -{49,74,0}, -{49,74,1}, -{49,74,2}, -{49,74,3}, -{49,74,4}, -{49,74,5}, -{49,74,6}, -{49,74,7}, -{49,74,8}, -{49,74,9}, -{49,74,10}, -{49,74,11}, -{49,74,12}, -{49,74,13}, -{49,74,14}, -{49,74,15}, -{49,74,16}, -{49,74,17}, -{49,74,18}, -{49,74,19}, -{49,74,20}, -{49,74,21}, -{49,74,22}, -{49,74,23}, -{49,74,24}, -{49,74,25}, -{49,74,26}, -{49,74,27}, -{49,74,28}, -{49,74,29}, -{49,74,30}, -{49,74,31}, -{49,74,32}, -{49,74,33}, -{49,74,34}, -{49,74,35}, -{49,74,36}, -{49,74,37}, -{49,74,38}, -{49,74,39}, -{49,74,40}, -{49,74,41}, -{49,74,42}, -{49,74,43}, -{49,74,44}, -{49,74,45}, -{49,74,46}, -{49,74,47}, -{49,74,48}, -{49,74,49}, -{49,74,50}, -{49,74,51}, -{49,74,52}, -{49,74,53}, -{49,74,54}, -{49,74,55}, -{49,74,56}, -{49,74,57}, -{49,74,58}, -{49,74,59}, -{49,74,60}, -{49,74,61}, -{49,74,62}, -{49,74,63}, -{49,75,-80}, -{49,75,-79}, -{49,75,-78}, -{49,75,-77}, -{49,75,-76}, -{49,75,-75}, -{49,75,-74}, -{49,75,-73}, -{49,75,-72}, -{49,75,-71}, -{49,75,-70}, -{49,75,-69}, -{49,75,-68}, -{49,75,-67}, -{49,75,-66}, -{49,75,-65}, -{49,75,-64}, -{49,75,-63}, -{49,75,-62}, -{49,75,-61}, -{49,75,-60}, -{49,75,-59}, -{49,75,-58}, -{49,75,-57}, -{49,75,-56}, -{49,75,-55}, -{49,75,-54}, -{49,75,-53}, -{49,75,-52}, -{49,75,-51}, -{49,75,-50}, -{49,75,-49}, -{49,75,-48}, -{49,75,-47}, -{49,75,-46}, -{49,75,-45}, -{49,75,-44}, -{49,75,-43}, -{49,75,-42}, -{49,75,-41}, -{49,75,-40}, -{49,75,-39}, -{49,75,-38}, -{49,75,-37}, -{49,75,-36}, -{49,75,-35}, -{49,75,-34}, -{49,75,-33}, -{49,75,-32}, -{49,75,-31}, -{49,75,-30}, -{49,75,-29}, -{49,75,-28}, -{49,75,-27}, -{49,75,-26}, -{49,75,-25}, -{49,75,-24}, -{49,75,-23}, -{49,75,-22}, -{49,75,-21}, -{49,75,-20}, -{49,75,-19}, -{49,75,-18}, -{49,75,-17}, -{49,75,-16}, -{49,75,-15}, -{49,75,-14}, -{49,75,-13}, -{49,75,-12}, -{49,75,-11}, -{49,75,-10}, -{49,75,-9}, -{49,75,-8}, -{49,75,-7}, -{49,75,-6}, -{49,75,-5}, -{49,75,-4}, -{49,75,-3}, -{49,75,-2}, -{49,75,-1}, -{49,75,0}, -{49,75,1}, -{49,75,2}, -{49,75,3}, -{49,75,4}, -{49,75,5}, -{49,75,6}, -{49,75,7}, -{49,75,8}, -{49,75,9}, -{49,75,10}, -{49,75,11}, -{49,75,12}, -{49,75,13}, -{49,75,14}, -{49,75,15}, -{49,75,16}, -{49,75,17}, -{49,75,18}, -{49,75,19}, -{49,75,20}, -{49,75,21}, -{49,75,22}, -{49,75,23}, -{49,75,24}, -{49,75,25}, -{49,75,26}, -{49,75,27}, -{49,75,28}, -{49,75,29}, -{49,75,30}, -{49,75,31}, -{49,75,32}, -{49,75,33}, -{49,75,34}, -{49,75,35}, -{49,75,36}, -{49,75,37}, -{49,75,38}, -{49,75,39}, -{49,75,40}, -{49,75,41}, -{49,75,42}, -{49,75,43}, -{49,75,44}, -{49,75,45}, -{49,75,46}, -{49,75,47}, -{49,75,48}, -{49,75,49}, -{49,75,50}, -{49,75,51}, -{49,75,52}, -{49,75,53}, -{49,75,54}, -{49,75,55}, -{49,75,56}, -{49,75,57}, -{49,75,58}, -{49,75,59}, -{49,75,60}, -{49,75,61}, -{49,75,62}, -{49,75,63}, -{49,76,-79}, -{49,76,-78}, -{49,76,-77}, -{49,76,-76}, -{49,76,-75}, -{49,76,-74}, -{49,76,-73}, -{49,76,-72}, -{49,76,-71}, -{49,76,-70}, -{49,76,-69}, -{49,76,-68}, -{49,76,-67}, -{49,76,-66}, -{49,76,-65}, -{49,76,-64}, -{49,76,-63}, -{49,76,-62}, -{49,76,-61}, -{49,76,-60}, -{49,76,-59}, -{49,76,-58}, -{49,76,-57}, -{49,76,-56}, -{49,76,-55}, -{49,76,-54}, -{49,76,-53}, -{49,76,-52}, -{49,76,-51}, -{49,76,-50}, -{49,76,-49}, -{49,76,-48}, -{49,76,-47}, -{49,76,-46}, -{49,76,-45}, -{49,76,-44}, -{49,76,-43}, -{49,76,-42}, -{49,76,-41}, -{49,76,-40}, -{49,76,-39}, -{49,76,-38}, -{49,76,-37}, -{49,76,-36}, -{49,76,-35}, -{49,76,-34}, -{49,76,-33}, -{49,76,-32}, -{49,76,-31}, -{49,76,-30}, -{49,76,-29}, -{49,76,-28}, -{49,76,-27}, -{49,76,-26}, -{49,76,-25}, -{49,76,-24}, -{49,76,-23}, -{49,76,-22}, -{49,76,-21}, -{49,76,-20}, -{49,76,-19}, -{49,76,-18}, -{49,76,-17}, -{49,76,-16}, -{49,76,-15}, -{49,76,-14}, -{49,76,-13}, -{49,76,-12}, -{49,76,-11}, -{49,76,-10}, -{49,76,-9}, -{49,76,-8}, -{49,76,-7}, -{49,76,-6}, -{49,76,-5}, -{49,76,-4}, -{49,76,-3}, -{49,76,-2}, -{49,76,-1}, -{49,76,0}, -{49,76,1}, -{49,76,2}, -{49,76,3}, -{49,76,4}, -{49,76,5}, -{49,76,6}, -{49,76,7}, -{49,76,8}, -{49,76,9}, -{49,76,10}, -{49,76,11}, -{49,76,12}, -{49,76,13}, -{49,76,14}, -{49,76,15}, -{49,76,16}, -{49,76,17}, -{49,76,18}, -{49,76,19}, -{49,76,20}, -{49,76,21}, -{49,76,22}, -{49,76,23}, -{49,76,24}, -{49,76,25}, -{49,76,26}, -{49,76,27}, -{49,76,28}, -{49,76,29}, -{49,76,30}, -{49,76,31}, -{49,76,32}, -{49,76,33}, -{49,76,34}, -{49,76,35}, -{49,76,36}, -{49,77,-79}, -{49,77,-78}, -{49,77,-77}, -{49,77,-76}, -{49,77,-75}, -{49,77,-74}, -{49,77,-73}, -{49,77,-72}, -{49,77,-71}, -{49,77,-70}, -{49,77,-69}, -{49,77,-68}, -{49,77,-67}, -{49,77,-66}, -{49,77,-65}, -{49,77,-64}, -{49,77,-63}, -{49,77,-62}, -{49,77,-61}, -{49,77,-60}, -{49,77,-59}, -{49,77,-58}, -{49,77,-57}, -{49,77,-56}, -{49,77,-55}, -{49,77,-54}, -{49,77,-53}, -{49,77,-52}, -{49,77,-51}, -{49,77,-50}, -{49,77,-49}, -{49,77,-48}, -{49,77,-47}, -{49,77,-46}, -{49,77,-45}, -{49,77,-44}, -{49,77,-43}, -{49,77,-42}, -{49,77,-41}, -{49,77,-40}, -{49,77,-39}, -{49,77,-38}, -{49,77,-37}, -{49,77,-36}, -{49,77,-35}, -{49,77,-34}, -{49,77,-33}, -{49,77,-32}, -{49,77,-31}, -{49,77,-30}, -{49,77,-29}, -{49,77,-28}, -{49,77,-27}, -{49,77,-26}, -{49,77,-25}, -{49,77,-24}, -{49,77,-23}, -{49,77,-22}, -{49,77,-21}, -{49,77,-20}, -{49,77,-19}, -{49,77,-18}, -{49,77,-17}, -{49,77,-16}, -{49,77,-15}, -{49,77,-14}, -{49,77,-13}, -{49,77,-12}, -{49,77,-11}, -{49,77,-10}, -{49,77,-9}, -{49,77,-8}, -{49,77,-7}, -{49,77,-6}, -{49,77,-5}, -{49,77,-4}, -{49,77,-3}, -{49,77,-2}, -{49,77,-1}, -{49,77,0}, -{49,77,1}, -{49,77,2}, -{49,77,3}, -{49,77,4}, -{49,77,5}, -{49,77,6}, -{49,77,7}, -{49,77,8}, -{49,77,9}, -{49,77,10}, -{49,77,11}, -{49,77,12}, -{49,77,13}, -{49,77,14}, -{49,78,-79}, -{49,78,-78}, -{49,78,-77}, -{49,78,-76}, -{49,78,-75}, -{49,78,-74}, -{49,78,-73}, -{49,78,-72}, -{49,78,-71}, -{49,78,-70}, -{49,78,-69}, -{49,78,-68}, -{49,78,-67}, -{49,78,-66}, -{49,78,-65}, -{49,78,-64}, -{49,78,-63}, -{49,78,-62}, -{49,78,-61}, -{49,78,-60}, -{49,78,-59}, -{49,78,-58}, -{49,78,-57}, -{49,78,-56}, -{49,78,-55}, -{49,78,-54}, -{49,78,-53}, -{49,78,-52}, -{49,78,-51}, -{49,78,-50}, -{49,78,-49}, -{49,78,-48}, -{49,78,-47}, -{49,78,-46}, -{49,78,-45}, -{49,78,-44}, -{49,78,-43}, -{49,78,-42}, -{49,78,-41}, -{49,78,-40}, -{49,78,-39}, -{49,78,-38}, -{49,78,-37}, -{49,78,-36}, -{49,78,-35}, -{49,78,-34}, -{49,78,-33}, -{49,78,-32}, -{49,78,-31}, -{49,78,-30}, -{49,78,-29}, -{49,78,-28}, -{49,78,-27}, -{49,78,-26}, -{49,78,-25}, -{49,78,-24}, -{49,78,-23}, -{49,78,-22}, -{49,78,-21}, -{49,78,-20}, -{49,78,-19}, -{49,78,-18}, -{49,78,-17}, -{49,78,-16}, -{49,78,-15}, -{49,78,-14}, -{49,78,-13}, -{49,78,-12}, -{49,78,-11}, -{49,78,-10}, -{49,78,-9}, -{49,78,-8}, -{49,78,-7}, -{49,78,-6}, -{49,78,-5}, -{49,78,-4}, -{49,78,-3}, -{49,78,-2}, -{49,78,-1}, -{49,79,-79}, -{49,79,-78}, -{49,79,-77}, -{49,79,-76}, -{49,79,-75}, -{49,79,-74}, -{49,79,-73}, -{49,79,-72}, -{49,79,-71}, -{49,79,-70}, -{49,79,-69}, -{49,79,-68}, -{49,79,-67}, -{49,79,-66}, -{49,79,-65}, -{49,79,-64}, -{49,79,-63}, -{49,79,-62}, -{49,79,-61}, -{49,79,-60}, -{49,79,-59}, -{49,79,-58}, -{49,79,-57}, -{49,79,-56}, -{49,79,-55}, -{49,79,-54}, -{49,79,-53}, -{49,79,-52}, -{49,79,-51}, -{49,79,-50}, -{49,79,-49}, -{49,79,-48}, -{49,79,-47}, -{49,79,-46}, -{49,79,-45}, -{49,79,-44}, -{49,79,-43}, -{49,79,-42}, -{49,79,-41}, -{49,79,-40}, -{49,79,-39}, -{49,79,-38}, -{49,79,-37}, -{49,79,-36}, -{49,79,-35}, -{49,79,-34}, -{49,79,-33}, -{49,79,-32}, -{49,79,-31}, -{49,79,-30}, -{49,79,-29}, -{49,79,-28}, -{49,79,-27}, -{49,79,-26}, -{49,79,-25}, -{49,79,-24}, -{49,79,-23}, -{49,79,-22}, -{49,79,-21}, -{49,79,-20}, -{49,79,-19}, -{49,79,-18}, -{49,79,-17}, -{49,79,-16}, -{49,79,-15}, -{49,79,-14}, -{49,79,-13}, -{49,80,-79}, -{49,80,-78}, -{49,80,-77}, -{49,80,-76}, -{49,80,-75}, -{49,80,-74}, -{49,80,-73}, -{49,80,-72}, -{49,80,-71}, -{49,80,-70}, -{49,80,-69}, -{49,80,-68}, -{49,80,-67}, -{49,80,-66}, -{49,80,-65}, -{49,80,-64}, -{49,80,-63}, -{49,80,-62}, -{49,80,-61}, -{49,80,-60}, -{49,80,-59}, -{49,80,-58}, -{49,80,-57}, -{49,80,-56}, -{49,80,-55}, -{49,80,-54}, -{49,80,-53}, -{49,80,-52}, -{49,80,-51}, -{49,80,-50}, -{49,80,-49}, -{49,80,-48}, -{49,80,-47}, -{49,80,-46}, -{49,80,-45}, -{49,80,-44}, -{49,80,-43}, -{49,80,-42}, -{49,80,-41}, -{49,80,-40}, -{49,80,-39}, -{49,80,-38}, -{49,80,-37}, -{49,80,-36}, -{49,80,-35}, -{49,80,-34}, -{49,80,-33}, -{49,80,-32}, -{49,80,-31}, -{49,80,-30}, -{49,80,-29}, -{49,80,-28}, -{49,80,-27}, -{49,80,-26}, -{49,80,-25}, -{49,80,-24}, -{49,80,-23}, -{49,81,-79}, -{49,81,-78}, -{49,81,-77}, -{49,81,-76}, -{49,81,-75}, -{49,81,-74}, -{49,81,-73}, -{49,81,-72}, -{49,81,-71}, -{49,81,-70}, -{49,81,-69}, -{49,81,-68}, -{49,81,-67}, -{49,81,-66}, -{49,81,-65}, -{49,81,-64}, -{49,81,-63}, -{49,81,-62}, -{49,81,-61}, -{49,81,-60}, -{49,81,-59}, -{49,81,-58}, -{49,81,-57}, -{49,81,-56}, -{49,81,-55}, -{49,81,-54}, -{49,81,-53}, -{49,81,-52}, -{49,81,-51}, -{49,81,-50}, -{49,81,-49}, -{49,81,-48}, -{49,81,-47}, -{49,81,-46}, -{49,81,-45}, -{49,81,-44}, -{49,81,-43}, -{49,81,-42}, -{49,81,-41}, -{49,81,-40}, -{49,81,-39}, -{49,81,-38}, -{49,81,-37}, -{49,81,-36}, -{49,81,-35}, -{49,81,-34}, -{49,81,-33}, -{49,81,-32}, -{49,82,-79}, -{49,82,-78}, -{49,82,-77}, -{49,82,-76}, -{49,82,-75}, -{49,82,-74}, -{49,82,-73}, -{49,82,-72}, -{49,82,-71}, -{49,82,-70}, -{49,82,-69}, -{49,82,-68}, -{49,82,-67}, -{49,82,-66}, -{49,82,-65}, -{49,82,-64}, -{49,82,-63}, -{49,82,-62}, -{49,82,-61}, -{49,82,-60}, -{49,82,-59}, -{49,82,-58}, -{49,82,-57}, -{49,82,-56}, -{49,82,-55}, -{49,82,-54}, -{49,82,-53}, -{49,82,-52}, -{49,82,-51}, -{49,82,-50}, -{49,82,-49}, -{49,82,-48}, -{49,82,-47}, -{49,82,-46}, -{49,82,-45}, -{49,82,-44}, -{49,82,-43}, -{49,82,-42}, -{49,82,-41}, -{49,82,-40}, -{49,83,-79}, -{49,83,-78}, -{49,83,-77}, -{49,83,-76}, -{49,83,-75}, -{49,83,-74}, -{49,83,-73}, -{49,83,-72}, -{49,83,-71}, -{49,83,-70}, -{49,83,-69}, -{49,83,-68}, -{49,83,-67}, -{49,83,-66}, -{49,83,-65}, -{49,83,-64}, -{49,83,-63}, -{49,83,-62}, -{49,83,-61}, -{49,83,-60}, -{49,83,-59}, -{49,83,-58}, -{49,83,-57}, -{49,83,-56}, -{49,83,-55}, -{49,83,-54}, -{49,83,-53}, -{49,83,-52}, -{49,83,-51}, -{49,83,-50}, -{49,83,-49}, -{49,83,-48}, -{49,83,-47}, -{49,84,-79}, -{49,84,-78}, -{49,84,-77}, -{49,84,-76}, -{49,84,-75}, -{49,84,-74}, -{49,84,-73}, -{49,84,-72}, -{49,84,-71}, -{49,84,-70}, -{49,84,-69}, -{49,84,-68}, -{49,84,-67}, -{49,84,-66}, -{49,84,-65}, -{49,84,-64}, -{49,84,-63}, -{49,84,-62}, -{49,84,-61}, -{49,84,-60}, -{49,84,-59}, -{49,84,-58}, -{49,84,-57}, -{49,84,-56}, -{49,84,-55}, -{49,84,-54}, -{49,84,-53}, -{49,85,-79}, -{49,85,-78}, -{49,85,-77}, -{49,85,-76}, -{49,85,-75}, -{49,85,-74}, -{49,85,-73}, -{49,85,-72}, -{49,85,-71}, -{49,85,-70}, -{49,85,-69}, -{49,85,-68}, -{49,85,-67}, -{49,85,-66}, -{49,85,-65}, -{49,85,-64}, -{49,85,-63}, -{49,85,-62}, -{49,85,-61}, -{49,85,-60}, -{49,86,-79}, -{49,86,-78}, -{49,86,-77}, -{49,86,-76}, -{49,86,-75}, -{49,86,-74}, -{49,86,-73}, -{49,86,-72}, -{49,86,-71}, -{49,86,-70}, -{49,86,-69}, -{49,86,-68}, -{49,86,-67}, -{49,86,-66}, -{49,86,-65}, -{49,87,-79}, -{49,87,-78}, -{49,87,-77}, -{49,87,-76}, -{49,87,-75}, -{49,87,-74}, -{49,87,-73}, -{49,87,-72}, -{49,87,-71}, -{49,88,-79}, -{49,88,-78}, -{49,88,-77}, -{49,88,-76}, -{50,-54,49}, -{50,-54,50}, -{50,-54,51}, -{50,-54,52}, -{50,-54,53}, -{50,-53,44}, -{50,-53,45}, -{50,-53,46}, -{50,-53,47}, -{50,-53,48}, -{50,-53,49}, -{50,-53,50}, -{50,-53,51}, -{50,-53,52}, -{50,-53,53}, -{50,-52,41}, -{50,-52,42}, -{50,-52,43}, -{50,-52,44}, -{50,-52,45}, -{50,-52,46}, -{50,-52,47}, -{50,-52,48}, -{50,-52,49}, -{50,-52,50}, -{50,-52,51}, -{50,-52,52}, -{50,-52,53}, -{50,-51,37}, -{50,-51,38}, -{50,-51,39}, -{50,-51,40}, -{50,-51,41}, -{50,-51,42}, -{50,-51,43}, -{50,-51,44}, -{50,-51,45}, -{50,-51,46}, -{50,-51,47}, -{50,-51,48}, -{50,-51,49}, -{50,-51,50}, -{50,-51,51}, -{50,-51,52}, -{50,-51,53}, -{50,-50,34}, -{50,-50,35}, -{50,-50,36}, -{50,-50,37}, -{50,-50,38}, -{50,-50,39}, -{50,-50,40}, -{50,-50,41}, -{50,-50,42}, -{50,-50,43}, -{50,-50,44}, -{50,-50,45}, -{50,-50,46}, -{50,-50,47}, -{50,-50,48}, -{50,-50,49}, -{50,-50,50}, -{50,-50,51}, -{50,-50,52}, -{50,-50,53}, -{50,-49,31}, -{50,-49,32}, -{50,-49,33}, -{50,-49,34}, -{50,-49,35}, -{50,-49,36}, -{50,-49,37}, -{50,-49,38}, -{50,-49,39}, -{50,-49,40}, -{50,-49,41}, -{50,-49,42}, -{50,-49,43}, -{50,-49,44}, -{50,-49,45}, -{50,-49,46}, -{50,-49,47}, -{50,-49,48}, -{50,-49,49}, -{50,-49,50}, -{50,-49,51}, -{50,-49,52}, -{50,-49,53}, -{50,-48,28}, -{50,-48,29}, -{50,-48,30}, -{50,-48,31}, -{50,-48,32}, -{50,-48,33}, -{50,-48,34}, -{50,-48,35}, -{50,-48,36}, -{50,-48,37}, -{50,-48,38}, -{50,-48,39}, -{50,-48,40}, -{50,-48,41}, -{50,-48,42}, -{50,-48,43}, -{50,-48,44}, -{50,-48,45}, -{50,-48,46}, -{50,-48,47}, -{50,-48,48}, -{50,-48,49}, -{50,-48,50}, -{50,-48,51}, -{50,-48,52}, -{50,-48,53}, -{50,-47,25}, -{50,-47,26}, -{50,-47,27}, -{50,-47,28}, -{50,-47,29}, -{50,-47,30}, -{50,-47,31}, -{50,-47,32}, -{50,-47,33}, -{50,-47,34}, -{50,-47,35}, -{50,-47,36}, -{50,-47,37}, -{50,-47,38}, -{50,-47,39}, -{50,-47,40}, -{50,-47,41}, -{50,-47,42}, -{50,-47,43}, -{50,-47,44}, -{50,-47,45}, -{50,-47,46}, -{50,-47,47}, -{50,-47,48}, -{50,-47,49}, -{50,-47,50}, -{50,-47,51}, -{50,-47,52}, -{50,-47,53}, -{50,-46,23}, -{50,-46,24}, -{50,-46,25}, -{50,-46,26}, -{50,-46,27}, -{50,-46,28}, -{50,-46,29}, -{50,-46,30}, -{50,-46,31}, -{50,-46,32}, -{50,-46,33}, -{50,-46,34}, -{50,-46,35}, -{50,-46,36}, -{50,-46,37}, -{50,-46,38}, -{50,-46,39}, -{50,-46,40}, -{50,-46,41}, -{50,-46,42}, -{50,-46,43}, -{50,-46,44}, -{50,-46,45}, -{50,-46,46}, -{50,-46,47}, -{50,-46,48}, -{50,-46,49}, -{50,-46,50}, -{50,-46,51}, -{50,-46,52}, -{50,-46,53}, -{50,-45,20}, -{50,-45,21}, -{50,-45,22}, -{50,-45,23}, -{50,-45,24}, -{50,-45,25}, -{50,-45,26}, -{50,-45,27}, -{50,-45,28}, -{50,-45,29}, -{50,-45,30}, -{50,-45,31}, -{50,-45,32}, -{50,-45,33}, -{50,-45,34}, -{50,-45,35}, -{50,-45,36}, -{50,-45,37}, -{50,-45,38}, -{50,-45,39}, -{50,-45,40}, -{50,-45,41}, -{50,-45,42}, -{50,-45,43}, -{50,-45,44}, -{50,-45,45}, -{50,-45,46}, -{50,-45,47}, -{50,-45,48}, -{50,-45,49}, -{50,-45,50}, -{50,-45,51}, -{50,-45,52}, -{50,-45,53}, -{50,-44,18}, -{50,-44,19}, -{50,-44,20}, -{50,-44,21}, -{50,-44,22}, -{50,-44,23}, -{50,-44,24}, -{50,-44,25}, -{50,-44,26}, -{50,-44,27}, -{50,-44,28}, -{50,-44,29}, -{50,-44,30}, -{50,-44,31}, -{50,-44,32}, -{50,-44,33}, -{50,-44,34}, -{50,-44,35}, -{50,-44,36}, -{50,-44,37}, -{50,-44,38}, -{50,-44,39}, -{50,-44,40}, -{50,-44,41}, -{50,-44,42}, -{50,-44,43}, -{50,-44,44}, -{50,-44,45}, -{50,-44,46}, -{50,-44,47}, -{50,-44,48}, -{50,-44,49}, -{50,-44,50}, -{50,-44,51}, -{50,-44,52}, -{50,-44,53}, -{50,-43,16}, -{50,-43,17}, -{50,-43,18}, -{50,-43,19}, -{50,-43,20}, -{50,-43,21}, -{50,-43,22}, -{50,-43,23}, -{50,-43,24}, -{50,-43,25}, -{50,-43,26}, -{50,-43,27}, -{50,-43,28}, -{50,-43,29}, -{50,-43,30}, -{50,-43,31}, -{50,-43,32}, -{50,-43,33}, -{50,-43,34}, -{50,-43,35}, -{50,-43,36}, -{50,-43,37}, -{50,-43,38}, -{50,-43,39}, -{50,-43,40}, -{50,-43,41}, -{50,-43,42}, -{50,-43,43}, -{50,-43,44}, -{50,-43,45}, -{50,-43,46}, -{50,-43,47}, -{50,-43,48}, -{50,-43,49}, -{50,-43,50}, -{50,-43,51}, -{50,-43,52}, -{50,-43,53}, -{50,-42,14}, -{50,-42,15}, -{50,-42,16}, -{50,-42,17}, -{50,-42,18}, -{50,-42,19}, -{50,-42,20}, -{50,-42,21}, -{50,-42,22}, -{50,-42,23}, -{50,-42,24}, -{50,-42,25}, -{50,-42,26}, -{50,-42,27}, -{50,-42,28}, -{50,-42,29}, -{50,-42,30}, -{50,-42,31}, -{50,-42,32}, -{50,-42,33}, -{50,-42,34}, -{50,-42,35}, -{50,-42,36}, -{50,-42,37}, -{50,-42,38}, -{50,-42,39}, -{50,-42,40}, -{50,-42,41}, -{50,-42,42}, -{50,-42,43}, -{50,-42,44}, -{50,-42,45}, -{50,-42,46}, -{50,-42,47}, -{50,-42,48}, -{50,-42,49}, -{50,-42,50}, -{50,-42,51}, -{50,-42,52}, -{50,-42,53}, -{50,-41,12}, -{50,-41,13}, -{50,-41,14}, -{50,-41,15}, -{50,-41,16}, -{50,-41,17}, -{50,-41,18}, -{50,-41,19}, -{50,-41,20}, -{50,-41,21}, -{50,-41,22}, -{50,-41,23}, -{50,-41,24}, -{50,-41,25}, -{50,-41,26}, -{50,-41,27}, -{50,-41,28}, -{50,-41,29}, -{50,-41,30}, -{50,-41,31}, -{50,-41,32}, -{50,-41,33}, -{50,-41,34}, -{50,-41,35}, -{50,-41,36}, -{50,-41,37}, -{50,-41,38}, -{50,-41,39}, -{50,-41,40}, -{50,-41,41}, -{50,-41,42}, -{50,-41,43}, -{50,-41,44}, -{50,-41,45}, -{50,-41,46}, -{50,-41,47}, -{50,-41,48}, -{50,-41,49}, -{50,-41,50}, -{50,-41,51}, -{50,-41,52}, -{50,-41,53}, -{50,-40,10}, -{50,-40,11}, -{50,-40,12}, -{50,-40,13}, -{50,-40,14}, -{50,-40,15}, -{50,-40,16}, -{50,-40,17}, -{50,-40,18}, -{50,-40,19}, -{50,-40,20}, -{50,-40,21}, -{50,-40,22}, -{50,-40,23}, -{50,-40,24}, -{50,-40,25}, -{50,-40,26}, -{50,-40,27}, -{50,-40,28}, -{50,-40,29}, -{50,-40,30}, -{50,-40,31}, -{50,-40,32}, -{50,-40,33}, -{50,-40,34}, -{50,-40,35}, -{50,-40,36}, -{50,-40,37}, -{50,-40,38}, -{50,-40,39}, -{50,-40,40}, -{50,-40,41}, -{50,-40,42}, -{50,-40,43}, -{50,-40,44}, -{50,-40,45}, -{50,-40,46}, -{50,-40,47}, -{50,-40,48}, -{50,-40,49}, -{50,-40,50}, -{50,-40,51}, -{50,-40,52}, -{50,-40,53}, -{50,-39,8}, -{50,-39,9}, -{50,-39,10}, -{50,-39,11}, -{50,-39,12}, -{50,-39,13}, -{50,-39,14}, -{50,-39,15}, -{50,-39,16}, -{50,-39,17}, -{50,-39,18}, -{50,-39,19}, -{50,-39,20}, -{50,-39,21}, -{50,-39,22}, -{50,-39,23}, -{50,-39,24}, -{50,-39,25}, -{50,-39,26}, -{50,-39,27}, -{50,-39,28}, -{50,-39,29}, -{50,-39,30}, -{50,-39,31}, -{50,-39,32}, -{50,-39,33}, -{50,-39,34}, -{50,-39,35}, -{50,-39,36}, -{50,-39,37}, -{50,-39,38}, -{50,-39,39}, -{50,-39,40}, -{50,-39,41}, -{50,-39,42}, -{50,-39,43}, -{50,-39,44}, -{50,-39,45}, -{50,-39,46}, -{50,-39,47}, -{50,-39,48}, -{50,-39,49}, -{50,-39,50}, -{50,-39,51}, -{50,-39,52}, -{50,-39,53}, -{50,-38,6}, -{50,-38,7}, -{50,-38,8}, -{50,-38,9}, -{50,-38,10}, -{50,-38,11}, -{50,-38,12}, -{50,-38,13}, -{50,-38,14}, -{50,-38,15}, -{50,-38,16}, -{50,-38,17}, -{50,-38,18}, -{50,-38,19}, -{50,-38,20}, -{50,-38,21}, -{50,-38,22}, -{50,-38,23}, -{50,-38,24}, -{50,-38,25}, -{50,-38,26}, -{50,-38,27}, -{50,-38,28}, -{50,-38,29}, -{50,-38,30}, -{50,-38,31}, -{50,-38,32}, -{50,-38,33}, -{50,-38,34}, -{50,-38,35}, -{50,-38,36}, -{50,-38,37}, -{50,-38,38}, -{50,-38,39}, -{50,-38,40}, -{50,-38,41}, -{50,-38,42}, -{50,-38,43}, -{50,-38,44}, -{50,-38,45}, -{50,-38,46}, -{50,-38,47}, -{50,-38,48}, -{50,-38,49}, -{50,-38,50}, -{50,-38,51}, -{50,-38,52}, -{50,-38,53}, -{50,-37,4}, -{50,-37,5}, -{50,-37,6}, -{50,-37,7}, -{50,-37,8}, -{50,-37,9}, -{50,-37,10}, -{50,-37,11}, -{50,-37,12}, -{50,-37,13}, -{50,-37,14}, -{50,-37,15}, -{50,-37,16}, -{50,-37,17}, -{50,-37,18}, -{50,-37,19}, -{50,-37,20}, -{50,-37,21}, -{50,-37,22}, -{50,-37,23}, -{50,-37,24}, -{50,-37,25}, -{50,-37,26}, -{50,-37,27}, -{50,-37,28}, -{50,-37,29}, -{50,-37,30}, -{50,-37,31}, -{50,-37,32}, -{50,-37,33}, -{50,-37,34}, -{50,-37,35}, -{50,-37,36}, -{50,-37,37}, -{50,-37,38}, -{50,-37,39}, -{50,-37,40}, -{50,-37,41}, -{50,-37,42}, -{50,-37,43}, -{50,-37,44}, -{50,-37,45}, -{50,-37,46}, -{50,-37,47}, -{50,-37,48}, -{50,-37,49}, -{50,-37,50}, -{50,-37,51}, -{50,-37,52}, -{50,-37,53}, -{50,-36,2}, -{50,-36,3}, -{50,-36,4}, -{50,-36,5}, -{50,-36,6}, -{50,-36,7}, -{50,-36,8}, -{50,-36,9}, -{50,-36,10}, -{50,-36,11}, -{50,-36,12}, -{50,-36,13}, -{50,-36,14}, -{50,-36,15}, -{50,-36,16}, -{50,-36,17}, -{50,-36,18}, -{50,-36,19}, -{50,-36,20}, -{50,-36,21}, -{50,-36,22}, -{50,-36,23}, -{50,-36,24}, -{50,-36,25}, -{50,-36,26}, -{50,-36,27}, -{50,-36,28}, -{50,-36,29}, -{50,-36,30}, -{50,-36,31}, -{50,-36,32}, -{50,-36,33}, -{50,-36,34}, -{50,-36,35}, -{50,-36,36}, -{50,-36,37}, -{50,-36,38}, -{50,-36,39}, -{50,-36,40}, -{50,-36,41}, -{50,-36,42}, -{50,-36,43}, -{50,-36,44}, -{50,-36,45}, -{50,-36,46}, -{50,-36,47}, -{50,-36,48}, -{50,-36,49}, -{50,-36,50}, -{50,-36,51}, -{50,-36,52}, -{50,-36,53}, -{50,-35,0}, -{50,-35,1}, -{50,-35,2}, -{50,-35,3}, -{50,-35,4}, -{50,-35,5}, -{50,-35,6}, -{50,-35,7}, -{50,-35,8}, -{50,-35,9}, -{50,-35,10}, -{50,-35,11}, -{50,-35,12}, -{50,-35,13}, -{50,-35,14}, -{50,-35,15}, -{50,-35,16}, -{50,-35,17}, -{50,-35,18}, -{50,-35,19}, -{50,-35,20}, -{50,-35,21}, -{50,-35,22}, -{50,-35,23}, -{50,-35,24}, -{50,-35,25}, -{50,-35,26}, -{50,-35,27}, -{50,-35,28}, -{50,-35,29}, -{50,-35,30}, -{50,-35,31}, -{50,-35,32}, -{50,-35,33}, -{50,-35,34}, -{50,-35,35}, -{50,-35,36}, -{50,-35,37}, -{50,-35,38}, -{50,-35,39}, -{50,-35,40}, -{50,-35,41}, -{50,-35,42}, -{50,-35,43}, -{50,-35,44}, -{50,-35,45}, -{50,-35,46}, -{50,-35,47}, -{50,-35,48}, -{50,-35,49}, -{50,-35,50}, -{50,-35,51}, -{50,-35,52}, -{50,-35,53}, -{50,-35,54}, -{50,-34,-1}, -{50,-34,0}, -{50,-34,1}, -{50,-34,2}, -{50,-34,3}, -{50,-34,4}, -{50,-34,5}, -{50,-34,6}, -{50,-34,7}, -{50,-34,8}, -{50,-34,9}, -{50,-34,10}, -{50,-34,11}, -{50,-34,12}, -{50,-34,13}, -{50,-34,14}, -{50,-34,15}, -{50,-34,16}, -{50,-34,17}, -{50,-34,18}, -{50,-34,19}, -{50,-34,20}, -{50,-34,21}, -{50,-34,22}, -{50,-34,23}, -{50,-34,24}, -{50,-34,25}, -{50,-34,26}, -{50,-34,27}, -{50,-34,28}, -{50,-34,29}, -{50,-34,30}, -{50,-34,31}, -{50,-34,32}, -{50,-34,33}, -{50,-34,34}, -{50,-34,35}, -{50,-34,36}, -{50,-34,37}, -{50,-34,38}, -{50,-34,39}, -{50,-34,40}, -{50,-34,41}, -{50,-34,42}, -{50,-34,43}, -{50,-34,44}, -{50,-34,45}, -{50,-34,46}, -{50,-34,47}, -{50,-34,48}, -{50,-34,49}, -{50,-34,50}, -{50,-34,51}, -{50,-34,52}, -{50,-34,53}, -{50,-34,54}, -{50,-33,-3}, -{50,-33,-2}, -{50,-33,-1}, -{50,-33,0}, -{50,-33,1}, -{50,-33,2}, -{50,-33,3}, -{50,-33,4}, -{50,-33,5}, -{50,-33,6}, -{50,-33,7}, -{50,-33,8}, -{50,-33,9}, -{50,-33,10}, -{50,-33,11}, -{50,-33,12}, -{50,-33,13}, -{50,-33,14}, -{50,-33,15}, -{50,-33,16}, -{50,-33,17}, -{50,-33,18}, -{50,-33,19}, -{50,-33,20}, -{50,-33,21}, -{50,-33,22}, -{50,-33,23}, -{50,-33,24}, -{50,-33,25}, -{50,-33,26}, -{50,-33,27}, -{50,-33,28}, -{50,-33,29}, -{50,-33,30}, -{50,-33,31}, -{50,-33,32}, -{50,-33,33}, -{50,-33,34}, -{50,-33,35}, -{50,-33,36}, -{50,-33,37}, -{50,-33,38}, -{50,-33,39}, -{50,-33,40}, -{50,-33,41}, -{50,-33,42}, -{50,-33,43}, -{50,-33,44}, -{50,-33,45}, -{50,-33,46}, -{50,-33,47}, -{50,-33,48}, -{50,-33,49}, -{50,-33,50}, -{50,-33,51}, -{50,-33,52}, -{50,-33,53}, -{50,-33,54}, -{50,-32,-5}, -{50,-32,-4}, -{50,-32,-3}, -{50,-32,-2}, -{50,-32,-1}, -{50,-32,0}, -{50,-32,1}, -{50,-32,2}, -{50,-32,3}, -{50,-32,4}, -{50,-32,5}, -{50,-32,6}, -{50,-32,7}, -{50,-32,8}, -{50,-32,9}, -{50,-32,10}, -{50,-32,11}, -{50,-32,12}, -{50,-32,13}, -{50,-32,14}, -{50,-32,15}, -{50,-32,16}, -{50,-32,17}, -{50,-32,18}, -{50,-32,19}, -{50,-32,20}, -{50,-32,21}, -{50,-32,22}, -{50,-32,23}, -{50,-32,24}, -{50,-32,25}, -{50,-32,26}, -{50,-32,27}, -{50,-32,28}, -{50,-32,29}, -{50,-32,30}, -{50,-32,31}, -{50,-32,32}, -{50,-32,33}, -{50,-32,34}, -{50,-32,35}, -{50,-32,36}, -{50,-32,37}, -{50,-32,38}, -{50,-32,39}, -{50,-32,40}, -{50,-32,41}, -{50,-32,42}, -{50,-32,43}, -{50,-32,44}, -{50,-32,45}, -{50,-32,46}, -{50,-32,47}, -{50,-32,48}, -{50,-32,49}, -{50,-32,50}, -{50,-32,51}, -{50,-32,52}, -{50,-32,53}, -{50,-32,54}, -{50,-31,-6}, -{50,-31,-5}, -{50,-31,-4}, -{50,-31,-3}, -{50,-31,-2}, -{50,-31,-1}, -{50,-31,0}, -{50,-31,1}, -{50,-31,2}, -{50,-31,3}, -{50,-31,4}, -{50,-31,5}, -{50,-31,6}, -{50,-31,7}, -{50,-31,8}, -{50,-31,9}, -{50,-31,10}, -{50,-31,11}, -{50,-31,12}, -{50,-31,13}, -{50,-31,14}, -{50,-31,15}, -{50,-31,16}, -{50,-31,17}, -{50,-31,18}, -{50,-31,19}, -{50,-31,20}, -{50,-31,21}, -{50,-31,22}, -{50,-31,23}, -{50,-31,24}, -{50,-31,25}, -{50,-31,26}, -{50,-31,27}, -{50,-31,28}, -{50,-31,29}, -{50,-31,30}, -{50,-31,31}, -{50,-31,32}, -{50,-31,33}, -{50,-31,34}, -{50,-31,35}, -{50,-31,36}, -{50,-31,37}, -{50,-31,38}, -{50,-31,39}, -{50,-31,40}, -{50,-31,41}, -{50,-31,42}, -{50,-31,43}, -{50,-31,44}, -{50,-31,45}, -{50,-31,46}, -{50,-31,47}, -{50,-31,48}, -{50,-31,49}, -{50,-31,50}, -{50,-31,51}, -{50,-31,52}, -{50,-31,53}, -{50,-31,54}, -{50,-30,-8}, -{50,-30,-7}, -{50,-30,-6}, -{50,-30,-5}, -{50,-30,-4}, -{50,-30,-3}, -{50,-30,-2}, -{50,-30,-1}, -{50,-30,0}, -{50,-30,1}, -{50,-30,2}, -{50,-30,3}, -{50,-30,4}, -{50,-30,5}, -{50,-30,6}, -{50,-30,7}, -{50,-30,8}, -{50,-30,9}, -{50,-30,10}, -{50,-30,11}, -{50,-30,12}, -{50,-30,13}, -{50,-30,14}, -{50,-30,15}, -{50,-30,16}, -{50,-30,17}, -{50,-30,18}, -{50,-30,19}, -{50,-30,20}, -{50,-30,21}, -{50,-30,22}, -{50,-30,23}, -{50,-30,24}, -{50,-30,25}, -{50,-30,26}, -{50,-30,27}, -{50,-30,28}, -{50,-30,29}, -{50,-30,30}, -{50,-30,31}, -{50,-30,32}, -{50,-30,33}, -{50,-30,34}, -{50,-30,35}, -{50,-30,36}, -{50,-30,37}, -{50,-30,38}, -{50,-30,39}, -{50,-30,40}, -{50,-30,41}, -{50,-30,42}, -{50,-30,43}, -{50,-30,44}, -{50,-30,45}, -{50,-30,46}, -{50,-30,47}, -{50,-30,48}, -{50,-30,49}, -{50,-30,50}, -{50,-30,51}, -{50,-30,52}, -{50,-30,53}, -{50,-30,54}, -{50,-29,-9}, -{50,-29,-8}, -{50,-29,-7}, -{50,-29,-6}, -{50,-29,-5}, -{50,-29,-4}, -{50,-29,-3}, -{50,-29,-2}, -{50,-29,-1}, -{50,-29,0}, -{50,-29,1}, -{50,-29,2}, -{50,-29,3}, -{50,-29,4}, -{50,-29,5}, -{50,-29,6}, -{50,-29,7}, -{50,-29,8}, -{50,-29,9}, -{50,-29,10}, -{50,-29,11}, -{50,-29,12}, -{50,-29,13}, -{50,-29,14}, -{50,-29,15}, -{50,-29,16}, -{50,-29,17}, -{50,-29,18}, -{50,-29,19}, -{50,-29,20}, -{50,-29,21}, -{50,-29,22}, -{50,-29,23}, -{50,-29,24}, -{50,-29,25}, -{50,-29,26}, -{50,-29,27}, -{50,-29,28}, -{50,-29,29}, -{50,-29,30}, -{50,-29,31}, -{50,-29,32}, -{50,-29,33}, -{50,-29,34}, -{50,-29,35}, -{50,-29,36}, -{50,-29,37}, -{50,-29,38}, -{50,-29,39}, -{50,-29,40}, -{50,-29,41}, -{50,-29,42}, -{50,-29,43}, -{50,-29,44}, -{50,-29,45}, -{50,-29,46}, -{50,-29,47}, -{50,-29,48}, -{50,-29,49}, -{50,-29,50}, -{50,-29,51}, -{50,-29,52}, -{50,-29,53}, -{50,-29,54}, -{50,-28,-11}, -{50,-28,-10}, -{50,-28,-9}, -{50,-28,-8}, -{50,-28,-7}, -{50,-28,-6}, -{50,-28,-5}, -{50,-28,-4}, -{50,-28,-3}, -{50,-28,-2}, -{50,-28,-1}, -{50,-28,0}, -{50,-28,1}, -{50,-28,2}, -{50,-28,3}, -{50,-28,4}, -{50,-28,5}, -{50,-28,6}, -{50,-28,7}, -{50,-28,8}, -{50,-28,9}, -{50,-28,10}, -{50,-28,11}, -{50,-28,12}, -{50,-28,13}, -{50,-28,14}, -{50,-28,15}, -{50,-28,16}, -{50,-28,17}, -{50,-28,18}, -{50,-28,19}, -{50,-28,20}, -{50,-28,21}, -{50,-28,22}, -{50,-28,23}, -{50,-28,24}, -{50,-28,25}, -{50,-28,26}, -{50,-28,27}, -{50,-28,28}, -{50,-28,29}, -{50,-28,30}, -{50,-28,31}, -{50,-28,32}, -{50,-28,33}, -{50,-28,34}, -{50,-28,35}, -{50,-28,36}, -{50,-28,37}, -{50,-28,38}, -{50,-28,39}, -{50,-28,40}, -{50,-28,41}, -{50,-28,42}, -{50,-28,43}, -{50,-28,44}, -{50,-28,45}, -{50,-28,46}, -{50,-28,47}, -{50,-28,48}, -{50,-28,49}, -{50,-28,50}, -{50,-28,51}, -{50,-28,52}, -{50,-28,53}, -{50,-28,54}, -{50,-27,-13}, -{50,-27,-12}, -{50,-27,-11}, -{50,-27,-10}, -{50,-27,-9}, -{50,-27,-8}, -{50,-27,-7}, -{50,-27,-6}, -{50,-27,-5}, -{50,-27,-4}, -{50,-27,-3}, -{50,-27,-2}, -{50,-27,-1}, -{50,-27,0}, -{50,-27,1}, -{50,-27,2}, -{50,-27,3}, -{50,-27,4}, -{50,-27,5}, -{50,-27,6}, -{50,-27,7}, -{50,-27,8}, -{50,-27,9}, -{50,-27,10}, -{50,-27,11}, -{50,-27,12}, -{50,-27,13}, -{50,-27,14}, -{50,-27,15}, -{50,-27,16}, -{50,-27,17}, -{50,-27,18}, -{50,-27,19}, -{50,-27,20}, -{50,-27,21}, -{50,-27,22}, -{50,-27,23}, -{50,-27,24}, -{50,-27,25}, -{50,-27,26}, -{50,-27,27}, -{50,-27,28}, -{50,-27,29}, -{50,-27,30}, -{50,-27,31}, -{50,-27,32}, -{50,-27,33}, -{50,-27,34}, -{50,-27,35}, -{50,-27,36}, -{50,-27,37}, -{50,-27,38}, -{50,-27,39}, -{50,-27,40}, -{50,-27,41}, -{50,-27,42}, -{50,-27,43}, -{50,-27,44}, -{50,-27,45}, -{50,-27,46}, -{50,-27,47}, -{50,-27,48}, -{50,-27,49}, -{50,-27,50}, -{50,-27,51}, -{50,-27,52}, -{50,-27,53}, -{50,-27,54}, -{50,-26,-14}, -{50,-26,-13}, -{50,-26,-12}, -{50,-26,-11}, -{50,-26,-10}, -{50,-26,-9}, -{50,-26,-8}, -{50,-26,-7}, -{50,-26,-6}, -{50,-26,-5}, -{50,-26,-4}, -{50,-26,-3}, -{50,-26,-2}, -{50,-26,-1}, -{50,-26,0}, -{50,-26,1}, -{50,-26,2}, -{50,-26,3}, -{50,-26,4}, -{50,-26,5}, -{50,-26,6}, -{50,-26,7}, -{50,-26,8}, -{50,-26,9}, -{50,-26,10}, -{50,-26,11}, -{50,-26,12}, -{50,-26,13}, -{50,-26,14}, -{50,-26,15}, -{50,-26,16}, -{50,-26,17}, -{50,-26,18}, -{50,-26,19}, -{50,-26,20}, -{50,-26,21}, -{50,-26,22}, -{50,-26,23}, -{50,-26,24}, -{50,-26,25}, -{50,-26,26}, -{50,-26,27}, -{50,-26,28}, -{50,-26,29}, -{50,-26,30}, -{50,-26,31}, -{50,-26,32}, -{50,-26,33}, -{50,-26,34}, -{50,-26,35}, -{50,-26,36}, -{50,-26,37}, -{50,-26,38}, -{50,-26,39}, -{50,-26,40}, -{50,-26,41}, -{50,-26,42}, -{50,-26,43}, -{50,-26,44}, -{50,-26,45}, -{50,-26,46}, -{50,-26,47}, -{50,-26,48}, -{50,-26,49}, -{50,-26,50}, -{50,-26,51}, -{50,-26,52}, -{50,-26,53}, -{50,-26,54}, -{50,-25,-15}, -{50,-25,-14}, -{50,-25,-13}, -{50,-25,-12}, -{50,-25,-11}, -{50,-25,-10}, -{50,-25,-9}, -{50,-25,-8}, -{50,-25,-7}, -{50,-25,-6}, -{50,-25,-5}, -{50,-25,-4}, -{50,-25,-3}, -{50,-25,-2}, -{50,-25,-1}, -{50,-25,0}, -{50,-25,1}, -{50,-25,2}, -{50,-25,3}, -{50,-25,4}, -{50,-25,5}, -{50,-25,6}, -{50,-25,7}, -{50,-25,8}, -{50,-25,9}, -{50,-25,10}, -{50,-25,11}, -{50,-25,12}, -{50,-25,13}, -{50,-25,14}, -{50,-25,15}, -{50,-25,16}, -{50,-25,17}, -{50,-25,18}, -{50,-25,19}, -{50,-25,20}, -{50,-25,21}, -{50,-25,22}, -{50,-25,23}, -{50,-25,24}, -{50,-25,25}, -{50,-25,26}, -{50,-25,27}, -{50,-25,28}, -{50,-25,29}, -{50,-25,30}, -{50,-25,31}, -{50,-25,32}, -{50,-25,33}, -{50,-25,34}, -{50,-25,35}, -{50,-25,36}, -{50,-25,37}, -{50,-25,38}, -{50,-25,39}, -{50,-25,40}, -{50,-25,41}, -{50,-25,42}, -{50,-25,43}, -{50,-25,44}, -{50,-25,45}, -{50,-25,46}, -{50,-25,47}, -{50,-25,48}, -{50,-25,49}, -{50,-25,50}, -{50,-25,51}, -{50,-25,52}, -{50,-25,53}, -{50,-25,54}, -{50,-24,-17}, -{50,-24,-16}, -{50,-24,-15}, -{50,-24,-14}, -{50,-24,-13}, -{50,-24,-12}, -{50,-24,-11}, -{50,-24,-10}, -{50,-24,-9}, -{50,-24,-8}, -{50,-24,-7}, -{50,-24,-6}, -{50,-24,-5}, -{50,-24,-4}, -{50,-24,-3}, -{50,-24,-2}, -{50,-24,-1}, -{50,-24,0}, -{50,-24,1}, -{50,-24,2}, -{50,-24,3}, -{50,-24,4}, -{50,-24,5}, -{50,-24,6}, -{50,-24,7}, -{50,-24,8}, -{50,-24,9}, -{50,-24,10}, -{50,-24,11}, -{50,-24,12}, -{50,-24,13}, -{50,-24,14}, -{50,-24,15}, -{50,-24,16}, -{50,-24,17}, -{50,-24,18}, -{50,-24,19}, -{50,-24,20}, -{50,-24,21}, -{50,-24,22}, -{50,-24,23}, -{50,-24,24}, -{50,-24,25}, -{50,-24,26}, -{50,-24,27}, -{50,-24,28}, -{50,-24,29}, -{50,-24,30}, -{50,-24,31}, -{50,-24,32}, -{50,-24,33}, -{50,-24,34}, -{50,-24,35}, -{50,-24,36}, -{50,-24,37}, -{50,-24,38}, -{50,-24,39}, -{50,-24,40}, -{50,-24,41}, -{50,-24,42}, -{50,-24,43}, -{50,-24,44}, -{50,-24,45}, -{50,-24,46}, -{50,-24,47}, -{50,-24,48}, -{50,-24,49}, -{50,-24,50}, -{50,-24,51}, -{50,-24,52}, -{50,-24,53}, -{50,-24,54}, -{50,-23,-18}, -{50,-23,-17}, -{50,-23,-16}, -{50,-23,-15}, -{50,-23,-14}, -{50,-23,-13}, -{50,-23,-12}, -{50,-23,-11}, -{50,-23,-10}, -{50,-23,-9}, -{50,-23,-8}, -{50,-23,-7}, -{50,-23,-6}, -{50,-23,-5}, -{50,-23,-4}, -{50,-23,-3}, -{50,-23,-2}, -{50,-23,-1}, -{50,-23,0}, -{50,-23,1}, -{50,-23,2}, -{50,-23,3}, -{50,-23,4}, -{50,-23,5}, -{50,-23,6}, -{50,-23,7}, -{50,-23,8}, -{50,-23,9}, -{50,-23,10}, -{50,-23,11}, -{50,-23,12}, -{50,-23,13}, -{50,-23,14}, -{50,-23,15}, -{50,-23,16}, -{50,-23,17}, -{50,-23,18}, -{50,-23,19}, -{50,-23,20}, -{50,-23,21}, -{50,-23,22}, -{50,-23,23}, -{50,-23,24}, -{50,-23,25}, -{50,-23,26}, -{50,-23,27}, -{50,-23,28}, -{50,-23,29}, -{50,-23,30}, -{50,-23,31}, -{50,-23,32}, -{50,-23,33}, -{50,-23,34}, -{50,-23,35}, -{50,-23,36}, -{50,-23,37}, -{50,-23,38}, -{50,-23,39}, -{50,-23,40}, -{50,-23,41}, -{50,-23,42}, -{50,-23,43}, -{50,-23,44}, -{50,-23,45}, -{50,-23,46}, -{50,-23,47}, -{50,-23,48}, -{50,-23,49}, -{50,-23,50}, -{50,-23,51}, -{50,-23,52}, -{50,-23,53}, -{50,-23,54}, -{50,-22,-20}, -{50,-22,-19}, -{50,-22,-18}, -{50,-22,-17}, -{50,-22,-16}, -{50,-22,-15}, -{50,-22,-14}, -{50,-22,-13}, -{50,-22,-12}, -{50,-22,-11}, -{50,-22,-10}, -{50,-22,-9}, -{50,-22,-8}, -{50,-22,-7}, -{50,-22,-6}, -{50,-22,-5}, -{50,-22,-4}, -{50,-22,-3}, -{50,-22,-2}, -{50,-22,-1}, -{50,-22,0}, -{50,-22,1}, -{50,-22,2}, -{50,-22,3}, -{50,-22,4}, -{50,-22,5}, -{50,-22,6}, -{50,-22,7}, -{50,-22,8}, -{50,-22,9}, -{50,-22,10}, -{50,-22,11}, -{50,-22,12}, -{50,-22,13}, -{50,-22,14}, -{50,-22,15}, -{50,-22,16}, -{50,-22,17}, -{50,-22,18}, -{50,-22,19}, -{50,-22,20}, -{50,-22,21}, -{50,-22,22}, -{50,-22,23}, -{50,-22,24}, -{50,-22,25}, -{50,-22,26}, -{50,-22,27}, -{50,-22,28}, -{50,-22,29}, -{50,-22,30}, -{50,-22,31}, -{50,-22,32}, -{50,-22,33}, -{50,-22,34}, -{50,-22,35}, -{50,-22,36}, -{50,-22,37}, -{50,-22,38}, -{50,-22,39}, -{50,-22,40}, -{50,-22,41}, -{50,-22,42}, -{50,-22,43}, -{50,-22,44}, -{50,-22,45}, -{50,-22,46}, -{50,-22,47}, -{50,-22,48}, -{50,-22,49}, -{50,-22,50}, -{50,-22,51}, -{50,-22,52}, -{50,-22,53}, -{50,-22,54}, -{50,-21,-21}, -{50,-21,-20}, -{50,-21,-19}, -{50,-21,-18}, -{50,-21,-17}, -{50,-21,-16}, -{50,-21,-15}, -{50,-21,-14}, -{50,-21,-13}, -{50,-21,-12}, -{50,-21,-11}, -{50,-21,-10}, -{50,-21,-9}, -{50,-21,-8}, -{50,-21,-7}, -{50,-21,-6}, -{50,-21,-5}, -{50,-21,-4}, -{50,-21,-3}, -{50,-21,-2}, -{50,-21,-1}, -{50,-21,0}, -{50,-21,1}, -{50,-21,2}, -{50,-21,3}, -{50,-21,4}, -{50,-21,5}, -{50,-21,6}, -{50,-21,7}, -{50,-21,8}, -{50,-21,9}, -{50,-21,10}, -{50,-21,11}, -{50,-21,12}, -{50,-21,13}, -{50,-21,14}, -{50,-21,15}, -{50,-21,16}, -{50,-21,17}, -{50,-21,18}, -{50,-21,19}, -{50,-21,20}, -{50,-21,21}, -{50,-21,22}, -{50,-21,23}, -{50,-21,24}, -{50,-21,25}, -{50,-21,26}, -{50,-21,27}, -{50,-21,28}, -{50,-21,29}, -{50,-21,30}, -{50,-21,31}, -{50,-21,32}, -{50,-21,33}, -{50,-21,34}, -{50,-21,35}, -{50,-21,36}, -{50,-21,37}, -{50,-21,38}, -{50,-21,39}, -{50,-21,40}, -{50,-21,41}, -{50,-21,42}, -{50,-21,43}, -{50,-21,44}, -{50,-21,45}, -{50,-21,46}, -{50,-21,47}, -{50,-21,48}, -{50,-21,49}, -{50,-21,50}, -{50,-21,51}, -{50,-21,52}, -{50,-21,53}, -{50,-21,54}, -{50,-20,-22}, -{50,-20,-21}, -{50,-20,-20}, -{50,-20,-19}, -{50,-20,-18}, -{50,-20,-17}, -{50,-20,-16}, -{50,-20,-15}, -{50,-20,-14}, -{50,-20,-13}, -{50,-20,-12}, -{50,-20,-11}, -{50,-20,-10}, -{50,-20,-9}, -{50,-20,-8}, -{50,-20,-7}, -{50,-20,-6}, -{50,-20,-5}, -{50,-20,-4}, -{50,-20,-3}, -{50,-20,-2}, -{50,-20,-1}, -{50,-20,0}, -{50,-20,1}, -{50,-20,2}, -{50,-20,3}, -{50,-20,4}, -{50,-20,5}, -{50,-20,6}, -{50,-20,7}, -{50,-20,8}, -{50,-20,9}, -{50,-20,10}, -{50,-20,11}, -{50,-20,12}, -{50,-20,13}, -{50,-20,14}, -{50,-20,15}, -{50,-20,16}, -{50,-20,17}, -{50,-20,18}, -{50,-20,19}, -{50,-20,20}, -{50,-20,21}, -{50,-20,22}, -{50,-20,23}, -{50,-20,24}, -{50,-20,25}, -{50,-20,26}, -{50,-20,27}, -{50,-20,28}, -{50,-20,29}, -{50,-20,30}, -{50,-20,31}, -{50,-20,32}, -{50,-20,33}, -{50,-20,34}, -{50,-20,35}, -{50,-20,36}, -{50,-20,37}, -{50,-20,38}, -{50,-20,39}, -{50,-20,40}, -{50,-20,41}, -{50,-20,42}, -{50,-20,43}, -{50,-20,44}, -{50,-20,45}, -{50,-20,46}, -{50,-20,47}, -{50,-20,48}, -{50,-20,49}, -{50,-20,50}, -{50,-20,51}, -{50,-20,52}, -{50,-20,53}, -{50,-20,54}, -{50,-19,-24}, -{50,-19,-23}, -{50,-19,-22}, -{50,-19,-21}, -{50,-19,-20}, -{50,-19,-19}, -{50,-19,-18}, -{50,-19,-17}, -{50,-19,-16}, -{50,-19,-15}, -{50,-19,-14}, -{50,-19,-13}, -{50,-19,-12}, -{50,-19,-11}, -{50,-19,-10}, -{50,-19,-9}, -{50,-19,-8}, -{50,-19,-7}, -{50,-19,-6}, -{50,-19,-5}, -{50,-19,-4}, -{50,-19,-3}, -{50,-19,-2}, -{50,-19,-1}, -{50,-19,0}, -{50,-19,1}, -{50,-19,2}, -{50,-19,3}, -{50,-19,4}, -{50,-19,5}, -{50,-19,6}, -{50,-19,7}, -{50,-19,8}, -{50,-19,9}, -{50,-19,10}, -{50,-19,11}, -{50,-19,12}, -{50,-19,13}, -{50,-19,14}, -{50,-19,15}, -{50,-19,16}, -{50,-19,17}, -{50,-19,18}, -{50,-19,19}, -{50,-19,20}, -{50,-19,21}, -{50,-19,22}, -{50,-19,23}, -{50,-19,24}, -{50,-19,25}, -{50,-19,26}, -{50,-19,27}, -{50,-19,28}, -{50,-19,29}, -{50,-19,30}, -{50,-19,31}, -{50,-19,32}, -{50,-19,33}, -{50,-19,34}, -{50,-19,35}, -{50,-19,36}, -{50,-19,37}, -{50,-19,38}, -{50,-19,39}, -{50,-19,40}, -{50,-19,41}, -{50,-19,42}, -{50,-19,43}, -{50,-19,44}, -{50,-19,45}, -{50,-19,46}, -{50,-19,47}, -{50,-19,48}, -{50,-19,49}, -{50,-19,50}, -{50,-19,51}, -{50,-19,52}, -{50,-19,53}, -{50,-19,54}, -{50,-18,-25}, -{50,-18,-24}, -{50,-18,-23}, -{50,-18,-22}, -{50,-18,-21}, -{50,-18,-20}, -{50,-18,-19}, -{50,-18,-18}, -{50,-18,-17}, -{50,-18,-16}, -{50,-18,-15}, -{50,-18,-14}, -{50,-18,-13}, -{50,-18,-12}, -{50,-18,-11}, -{50,-18,-10}, -{50,-18,-9}, -{50,-18,-8}, -{50,-18,-7}, -{50,-18,-6}, -{50,-18,-5}, -{50,-18,-4}, -{50,-18,-3}, -{50,-18,-2}, -{50,-18,-1}, -{50,-18,0}, -{50,-18,1}, -{50,-18,2}, -{50,-18,3}, -{50,-18,4}, -{50,-18,5}, -{50,-18,6}, -{50,-18,7}, -{50,-18,8}, -{50,-18,9}, -{50,-18,10}, -{50,-18,11}, -{50,-18,12}, -{50,-18,13}, -{50,-18,14}, -{50,-18,15}, -{50,-18,16}, -{50,-18,17}, -{50,-18,18}, -{50,-18,19}, -{50,-18,20}, -{50,-18,21}, -{50,-18,22}, -{50,-18,23}, -{50,-18,24}, -{50,-18,25}, -{50,-18,26}, -{50,-18,27}, -{50,-18,28}, -{50,-18,29}, -{50,-18,30}, -{50,-18,31}, -{50,-18,32}, -{50,-18,33}, -{50,-18,34}, -{50,-18,35}, -{50,-18,36}, -{50,-18,37}, -{50,-18,38}, -{50,-18,39}, -{50,-18,40}, -{50,-18,41}, -{50,-18,42}, -{50,-18,43}, -{50,-18,44}, -{50,-18,45}, -{50,-18,46}, -{50,-18,47}, -{50,-18,48}, -{50,-18,49}, -{50,-18,50}, -{50,-18,51}, -{50,-18,52}, -{50,-18,53}, -{50,-18,54}, -{50,-17,-26}, -{50,-17,-25}, -{50,-17,-24}, -{50,-17,-23}, -{50,-17,-22}, -{50,-17,-21}, -{50,-17,-20}, -{50,-17,-19}, -{50,-17,-18}, -{50,-17,-17}, -{50,-17,-16}, -{50,-17,-15}, -{50,-17,-14}, -{50,-17,-13}, -{50,-17,-12}, -{50,-17,-11}, -{50,-17,-10}, -{50,-17,-9}, -{50,-17,-8}, -{50,-17,-7}, -{50,-17,-6}, -{50,-17,-5}, -{50,-17,-4}, -{50,-17,-3}, -{50,-17,-2}, -{50,-17,-1}, -{50,-17,0}, -{50,-17,1}, -{50,-17,2}, -{50,-17,3}, -{50,-17,4}, -{50,-17,5}, -{50,-17,6}, -{50,-17,7}, -{50,-17,8}, -{50,-17,9}, -{50,-17,10}, -{50,-17,11}, -{50,-17,12}, -{50,-17,13}, -{50,-17,14}, -{50,-17,15}, -{50,-17,16}, -{50,-17,17}, -{50,-17,18}, -{50,-17,19}, -{50,-17,20}, -{50,-17,21}, -{50,-17,22}, -{50,-17,23}, -{50,-17,24}, -{50,-17,25}, -{50,-17,26}, -{50,-17,27}, -{50,-17,28}, -{50,-17,29}, -{50,-17,30}, -{50,-17,31}, -{50,-17,32}, -{50,-17,33}, -{50,-17,34}, -{50,-17,35}, -{50,-17,36}, -{50,-17,37}, -{50,-17,38}, -{50,-17,39}, -{50,-17,40}, -{50,-17,41}, -{50,-17,42}, -{50,-17,43}, -{50,-17,44}, -{50,-17,45}, -{50,-17,46}, -{50,-17,47}, -{50,-17,48}, -{50,-17,49}, -{50,-17,50}, -{50,-17,51}, -{50,-17,52}, -{50,-17,53}, -{50,-17,54}, -{50,-17,55}, -{50,-16,-28}, -{50,-16,-27}, -{50,-16,-26}, -{50,-16,-25}, -{50,-16,-24}, -{50,-16,-23}, -{50,-16,-22}, -{50,-16,-21}, -{50,-16,-20}, -{50,-16,-19}, -{50,-16,-18}, -{50,-16,-17}, -{50,-16,-16}, -{50,-16,-15}, -{50,-16,-14}, -{50,-16,-13}, -{50,-16,-12}, -{50,-16,-11}, -{50,-16,-10}, -{50,-16,-9}, -{50,-16,-8}, -{50,-16,-7}, -{50,-16,-6}, -{50,-16,-5}, -{50,-16,-4}, -{50,-16,-3}, -{50,-16,-2}, -{50,-16,-1}, -{50,-16,0}, -{50,-16,1}, -{50,-16,2}, -{50,-16,3}, -{50,-16,4}, -{50,-16,5}, -{50,-16,6}, -{50,-16,7}, -{50,-16,8}, -{50,-16,9}, -{50,-16,10}, -{50,-16,11}, -{50,-16,12}, -{50,-16,13}, -{50,-16,14}, -{50,-16,15}, -{50,-16,16}, -{50,-16,17}, -{50,-16,18}, -{50,-16,19}, -{50,-16,20}, -{50,-16,21}, -{50,-16,22}, -{50,-16,23}, -{50,-16,24}, -{50,-16,25}, -{50,-16,26}, -{50,-16,27}, -{50,-16,28}, -{50,-16,29}, -{50,-16,30}, -{50,-16,31}, -{50,-16,32}, -{50,-16,33}, -{50,-16,34}, -{50,-16,35}, -{50,-16,36}, -{50,-16,37}, -{50,-16,38}, -{50,-16,39}, -{50,-16,40}, -{50,-16,41}, -{50,-16,42}, -{50,-16,43}, -{50,-16,44}, -{50,-16,45}, -{50,-16,46}, -{50,-16,47}, -{50,-16,48}, -{50,-16,49}, -{50,-16,50}, -{50,-16,51}, -{50,-16,52}, -{50,-16,53}, -{50,-16,54}, -{50,-16,55}, -{50,-15,-29}, -{50,-15,-28}, -{50,-15,-27}, -{50,-15,-26}, -{50,-15,-25}, -{50,-15,-24}, -{50,-15,-23}, -{50,-15,-22}, -{50,-15,-21}, -{50,-15,-20}, -{50,-15,-19}, -{50,-15,-18}, -{50,-15,-17}, -{50,-15,-16}, -{50,-15,-15}, -{50,-15,-14}, -{50,-15,-13}, -{50,-15,-12}, -{50,-15,-11}, -{50,-15,-10}, -{50,-15,-9}, -{50,-15,-8}, -{50,-15,-7}, -{50,-15,-6}, -{50,-15,-5}, -{50,-15,-4}, -{50,-15,-3}, -{50,-15,-2}, -{50,-15,-1}, -{50,-15,0}, -{50,-15,1}, -{50,-15,2}, -{50,-15,3}, -{50,-15,4}, -{50,-15,5}, -{50,-15,6}, -{50,-15,7}, -{50,-15,8}, -{50,-15,9}, -{50,-15,10}, -{50,-15,11}, -{50,-15,12}, -{50,-15,13}, -{50,-15,14}, -{50,-15,15}, -{50,-15,16}, -{50,-15,17}, -{50,-15,18}, -{50,-15,19}, -{50,-15,20}, -{50,-15,21}, -{50,-15,22}, -{50,-15,23}, -{50,-15,24}, -{50,-15,25}, -{50,-15,26}, -{50,-15,27}, -{50,-15,28}, -{50,-15,29}, -{50,-15,30}, -{50,-15,31}, -{50,-15,32}, -{50,-15,33}, -{50,-15,34}, -{50,-15,35}, -{50,-15,36}, -{50,-15,37}, -{50,-15,38}, -{50,-15,39}, -{50,-15,40}, -{50,-15,41}, -{50,-15,42}, -{50,-15,43}, -{50,-15,44}, -{50,-15,45}, -{50,-15,46}, -{50,-15,47}, -{50,-15,48}, -{50,-15,49}, -{50,-15,50}, -{50,-15,51}, -{50,-15,52}, -{50,-15,53}, -{50,-15,54}, -{50,-15,55}, -{50,-14,-30}, -{50,-14,-29}, -{50,-14,-28}, -{50,-14,-27}, -{50,-14,-26}, -{50,-14,-25}, -{50,-14,-24}, -{50,-14,-23}, -{50,-14,-22}, -{50,-14,-21}, -{50,-14,-20}, -{50,-14,-19}, -{50,-14,-18}, -{50,-14,-17}, -{50,-14,-16}, -{50,-14,-15}, -{50,-14,-14}, -{50,-14,-13}, -{50,-14,-12}, -{50,-14,-11}, -{50,-14,-10}, -{50,-14,-9}, -{50,-14,-8}, -{50,-14,-7}, -{50,-14,-6}, -{50,-14,-5}, -{50,-14,-4}, -{50,-14,-3}, -{50,-14,-2}, -{50,-14,-1}, -{50,-14,0}, -{50,-14,1}, -{50,-14,2}, -{50,-14,3}, -{50,-14,4}, -{50,-14,5}, -{50,-14,6}, -{50,-14,7}, -{50,-14,8}, -{50,-14,9}, -{50,-14,10}, -{50,-14,11}, -{50,-14,12}, -{50,-14,13}, -{50,-14,14}, -{50,-14,15}, -{50,-14,16}, -{50,-14,17}, -{50,-14,18}, -{50,-14,19}, -{50,-14,20}, -{50,-14,21}, -{50,-14,22}, -{50,-14,23}, -{50,-14,24}, -{50,-14,25}, -{50,-14,26}, -{50,-14,27}, -{50,-14,28}, -{50,-14,29}, -{50,-14,30}, -{50,-14,31}, -{50,-14,32}, -{50,-14,33}, -{50,-14,34}, -{50,-14,35}, -{50,-14,36}, -{50,-14,37}, -{50,-14,38}, -{50,-14,39}, -{50,-14,40}, -{50,-14,41}, -{50,-14,42}, -{50,-14,43}, -{50,-14,44}, -{50,-14,45}, -{50,-14,46}, -{50,-14,47}, -{50,-14,48}, -{50,-14,49}, -{50,-14,50}, -{50,-14,51}, -{50,-14,52}, -{50,-14,53}, -{50,-14,54}, -{50,-14,55}, -{50,-13,-32}, -{50,-13,-31}, -{50,-13,-30}, -{50,-13,-29}, -{50,-13,-28}, -{50,-13,-27}, -{50,-13,-26}, -{50,-13,-25}, -{50,-13,-24}, -{50,-13,-23}, -{50,-13,-22}, -{50,-13,-21}, -{50,-13,-20}, -{50,-13,-19}, -{50,-13,-18}, -{50,-13,-17}, -{50,-13,-16}, -{50,-13,-15}, -{50,-13,-14}, -{50,-13,-13}, -{50,-13,-12}, -{50,-13,-11}, -{50,-13,-10}, -{50,-13,-9}, -{50,-13,-8}, -{50,-13,-7}, -{50,-13,-6}, -{50,-13,-5}, -{50,-13,-4}, -{50,-13,-3}, -{50,-13,-2}, -{50,-13,-1}, -{50,-13,0}, -{50,-13,1}, -{50,-13,2}, -{50,-13,3}, -{50,-13,4}, -{50,-13,5}, -{50,-13,6}, -{50,-13,7}, -{50,-13,8}, -{50,-13,9}, -{50,-13,10}, -{50,-13,11}, -{50,-13,12}, -{50,-13,13}, -{50,-13,14}, -{50,-13,15}, -{50,-13,16}, -{50,-13,17}, -{50,-13,18}, -{50,-13,19}, -{50,-13,20}, -{50,-13,21}, -{50,-13,22}, -{50,-13,23}, -{50,-13,24}, -{50,-13,25}, -{50,-13,26}, -{50,-13,27}, -{50,-13,28}, -{50,-13,29}, -{50,-13,30}, -{50,-13,31}, -{50,-13,32}, -{50,-13,33}, -{50,-13,34}, -{50,-13,35}, -{50,-13,36}, -{50,-13,37}, -{50,-13,38}, -{50,-13,39}, -{50,-13,40}, -{50,-13,41}, -{50,-13,42}, -{50,-13,43}, -{50,-13,44}, -{50,-13,45}, -{50,-13,46}, -{50,-13,47}, -{50,-13,48}, -{50,-13,49}, -{50,-13,50}, -{50,-13,51}, -{50,-13,52}, -{50,-13,53}, -{50,-13,54}, -{50,-13,55}, -{50,-12,-33}, -{50,-12,-32}, -{50,-12,-31}, -{50,-12,-30}, -{50,-12,-29}, -{50,-12,-28}, -{50,-12,-27}, -{50,-12,-26}, -{50,-12,-25}, -{50,-12,-24}, -{50,-12,-23}, -{50,-12,-22}, -{50,-12,-21}, -{50,-12,-20}, -{50,-12,-19}, -{50,-12,-18}, -{50,-12,-17}, -{50,-12,-16}, -{50,-12,-15}, -{50,-12,-14}, -{50,-12,-13}, -{50,-12,-12}, -{50,-12,-11}, -{50,-12,-10}, -{50,-12,-9}, -{50,-12,-8}, -{50,-12,-7}, -{50,-12,-6}, -{50,-12,-5}, -{50,-12,-4}, -{50,-12,-3}, -{50,-12,-2}, -{50,-12,-1}, -{50,-12,0}, -{50,-12,1}, -{50,-12,2}, -{50,-12,3}, -{50,-12,4}, -{50,-12,5}, -{50,-12,6}, -{50,-12,7}, -{50,-12,8}, -{50,-12,9}, -{50,-12,10}, -{50,-12,11}, -{50,-12,12}, -{50,-12,13}, -{50,-12,14}, -{50,-12,15}, -{50,-12,16}, -{50,-12,17}, -{50,-12,18}, -{50,-12,19}, -{50,-12,20}, -{50,-12,21}, -{50,-12,22}, -{50,-12,23}, -{50,-12,24}, -{50,-12,25}, -{50,-12,26}, -{50,-12,27}, -{50,-12,28}, -{50,-12,29}, -{50,-12,30}, -{50,-12,31}, -{50,-12,32}, -{50,-12,33}, -{50,-12,34}, -{50,-12,35}, -{50,-12,36}, -{50,-12,37}, -{50,-12,38}, -{50,-12,39}, -{50,-12,40}, -{50,-12,41}, -{50,-12,42}, -{50,-12,43}, -{50,-12,44}, -{50,-12,45}, -{50,-12,46}, -{50,-12,47}, -{50,-12,48}, -{50,-12,49}, -{50,-12,50}, -{50,-12,51}, -{50,-12,52}, -{50,-12,53}, -{50,-12,54}, -{50,-12,55}, -{50,-11,-34}, -{50,-11,-33}, -{50,-11,-32}, -{50,-11,-31}, -{50,-11,-30}, -{50,-11,-29}, -{50,-11,-28}, -{50,-11,-27}, -{50,-11,-26}, -{50,-11,-25}, -{50,-11,-24}, -{50,-11,-23}, -{50,-11,-22}, -{50,-11,-21}, -{50,-11,-20}, -{50,-11,-19}, -{50,-11,-18}, -{50,-11,-17}, -{50,-11,-16}, -{50,-11,-15}, -{50,-11,-14}, -{50,-11,-13}, -{50,-11,-12}, -{50,-11,-11}, -{50,-11,-10}, -{50,-11,-9}, -{50,-11,-8}, -{50,-11,-7}, -{50,-11,-6}, -{50,-11,-5}, -{50,-11,-4}, -{50,-11,-3}, -{50,-11,-2}, -{50,-11,-1}, -{50,-11,0}, -{50,-11,1}, -{50,-11,2}, -{50,-11,3}, -{50,-11,4}, -{50,-11,5}, -{50,-11,6}, -{50,-11,7}, -{50,-11,8}, -{50,-11,9}, -{50,-11,10}, -{50,-11,11}, -{50,-11,12}, -{50,-11,13}, -{50,-11,14}, -{50,-11,15}, -{50,-11,16}, -{50,-11,17}, -{50,-11,18}, -{50,-11,19}, -{50,-11,20}, -{50,-11,21}, -{50,-11,22}, -{50,-11,23}, -{50,-11,24}, -{50,-11,25}, -{50,-11,26}, -{50,-11,27}, -{50,-11,28}, -{50,-11,29}, -{50,-11,30}, -{50,-11,31}, -{50,-11,32}, -{50,-11,33}, -{50,-11,34}, -{50,-11,35}, -{50,-11,36}, -{50,-11,37}, -{50,-11,38}, -{50,-11,39}, -{50,-11,40}, -{50,-11,41}, -{50,-11,42}, -{50,-11,43}, -{50,-11,44}, -{50,-11,45}, -{50,-11,46}, -{50,-11,47}, -{50,-11,48}, -{50,-11,49}, -{50,-11,50}, -{50,-11,51}, -{50,-11,52}, -{50,-11,53}, -{50,-11,54}, -{50,-11,55}, -{50,-10,-35}, -{50,-10,-34}, -{50,-10,-33}, -{50,-10,-32}, -{50,-10,-31}, -{50,-10,-30}, -{50,-10,-29}, -{50,-10,-28}, -{50,-10,-27}, -{50,-10,-26}, -{50,-10,-25}, -{50,-10,-24}, -{50,-10,-23}, -{50,-10,-22}, -{50,-10,-21}, -{50,-10,-20}, -{50,-10,-19}, -{50,-10,-18}, -{50,-10,-17}, -{50,-10,-16}, -{50,-10,-15}, -{50,-10,-14}, -{50,-10,-13}, -{50,-10,-12}, -{50,-10,-11}, -{50,-10,-10}, -{50,-10,-9}, -{50,-10,-8}, -{50,-10,-7}, -{50,-10,-6}, -{50,-10,-5}, -{50,-10,-4}, -{50,-10,-3}, -{50,-10,-2}, -{50,-10,-1}, -{50,-10,0}, -{50,-10,1}, -{50,-10,2}, -{50,-10,3}, -{50,-10,4}, -{50,-10,5}, -{50,-10,6}, -{50,-10,7}, -{50,-10,8}, -{50,-10,9}, -{50,-10,10}, -{50,-10,11}, -{50,-10,12}, -{50,-10,13}, -{50,-10,14}, -{50,-10,15}, -{50,-10,16}, -{50,-10,17}, -{50,-10,18}, -{50,-10,19}, -{50,-10,20}, -{50,-10,21}, -{50,-10,22}, -{50,-10,23}, -{50,-10,24}, -{50,-10,25}, -{50,-10,26}, -{50,-10,27}, -{50,-10,28}, -{50,-10,29}, -{50,-10,30}, -{50,-10,31}, -{50,-10,32}, -{50,-10,33}, -{50,-10,34}, -{50,-10,35}, -{50,-10,36}, -{50,-10,37}, -{50,-10,38}, -{50,-10,39}, -{50,-10,40}, -{50,-10,41}, -{50,-10,42}, -{50,-10,43}, -{50,-10,44}, -{50,-10,45}, -{50,-10,46}, -{50,-10,47}, -{50,-10,48}, -{50,-10,49}, -{50,-10,50}, -{50,-10,51}, -{50,-10,52}, -{50,-10,53}, -{50,-10,54}, -{50,-10,55}, -{50,-9,-37}, -{50,-9,-36}, -{50,-9,-35}, -{50,-9,-34}, -{50,-9,-33}, -{50,-9,-32}, -{50,-9,-31}, -{50,-9,-30}, -{50,-9,-29}, -{50,-9,-28}, -{50,-9,-27}, -{50,-9,-26}, -{50,-9,-25}, -{50,-9,-24}, -{50,-9,-23}, -{50,-9,-22}, -{50,-9,-21}, -{50,-9,-20}, -{50,-9,-19}, -{50,-9,-18}, -{50,-9,-17}, -{50,-9,-16}, -{50,-9,-15}, -{50,-9,-14}, -{50,-9,-13}, -{50,-9,-12}, -{50,-9,-11}, -{50,-9,-10}, -{50,-9,-9}, -{50,-9,-8}, -{50,-9,-7}, -{50,-9,-6}, -{50,-9,-5}, -{50,-9,-4}, -{50,-9,-3}, -{50,-9,-2}, -{50,-9,-1}, -{50,-9,0}, -{50,-9,1}, -{50,-9,2}, -{50,-9,3}, -{50,-9,4}, -{50,-9,5}, -{50,-9,6}, -{50,-9,7}, -{50,-9,8}, -{50,-9,9}, -{50,-9,10}, -{50,-9,11}, -{50,-9,12}, -{50,-9,13}, -{50,-9,14}, -{50,-9,15}, -{50,-9,16}, -{50,-9,17}, -{50,-9,18}, -{50,-9,19}, -{50,-9,20}, -{50,-9,21}, -{50,-9,22}, -{50,-9,23}, -{50,-9,24}, -{50,-9,25}, -{50,-9,26}, -{50,-9,27}, -{50,-9,28}, -{50,-9,29}, -{50,-9,30}, -{50,-9,31}, -{50,-9,32}, -{50,-9,33}, -{50,-9,34}, -{50,-9,35}, -{50,-9,36}, -{50,-9,37}, -{50,-9,38}, -{50,-9,39}, -{50,-9,40}, -{50,-9,41}, -{50,-9,42}, -{50,-9,43}, -{50,-9,44}, -{50,-9,45}, -{50,-9,46}, -{50,-9,47}, -{50,-9,48}, -{50,-9,49}, -{50,-9,50}, -{50,-9,51}, -{50,-9,52}, -{50,-9,53}, -{50,-9,54}, -{50,-9,55}, -{50,-8,-38}, -{50,-8,-37}, -{50,-8,-36}, -{50,-8,-35}, -{50,-8,-34}, -{50,-8,-33}, -{50,-8,-32}, -{50,-8,-31}, -{50,-8,-30}, -{50,-8,-29}, -{50,-8,-28}, -{50,-8,-27}, -{50,-8,-26}, -{50,-8,-25}, -{50,-8,-24}, -{50,-8,-23}, -{50,-8,-22}, -{50,-8,-21}, -{50,-8,-20}, -{50,-8,-19}, -{50,-8,-18}, -{50,-8,-17}, -{50,-8,-16}, -{50,-8,-15}, -{50,-8,-14}, -{50,-8,-13}, -{50,-8,-12}, -{50,-8,-11}, -{50,-8,-10}, -{50,-8,-9}, -{50,-8,-8}, -{50,-8,-7}, -{50,-8,-6}, -{50,-8,-5}, -{50,-8,-4}, -{50,-8,-3}, -{50,-8,-2}, -{50,-8,-1}, -{50,-8,0}, -{50,-8,1}, -{50,-8,2}, -{50,-8,3}, -{50,-8,4}, -{50,-8,5}, -{50,-8,6}, -{50,-8,7}, -{50,-8,8}, -{50,-8,9}, -{50,-8,10}, -{50,-8,11}, -{50,-8,12}, -{50,-8,13}, -{50,-8,14}, -{50,-8,15}, -{50,-8,16}, -{50,-8,17}, -{50,-8,18}, -{50,-8,19}, -{50,-8,20}, -{50,-8,21}, -{50,-8,22}, -{50,-8,23}, -{50,-8,24}, -{50,-8,25}, -{50,-8,26}, -{50,-8,27}, -{50,-8,28}, -{50,-8,29}, -{50,-8,30}, -{50,-8,31}, -{50,-8,32}, -{50,-8,33}, -{50,-8,34}, -{50,-8,35}, -{50,-8,36}, -{50,-8,37}, -{50,-8,38}, -{50,-8,39}, -{50,-8,40}, -{50,-8,41}, -{50,-8,42}, -{50,-8,43}, -{50,-8,44}, -{50,-8,45}, -{50,-8,46}, -{50,-8,47}, -{50,-8,48}, -{50,-8,49}, -{50,-8,50}, -{50,-8,51}, -{50,-8,52}, -{50,-8,53}, -{50,-8,54}, -{50,-8,55}, -{50,-7,-39}, -{50,-7,-38}, -{50,-7,-37}, -{50,-7,-36}, -{50,-7,-35}, -{50,-7,-34}, -{50,-7,-33}, -{50,-7,-32}, -{50,-7,-31}, -{50,-7,-30}, -{50,-7,-29}, -{50,-7,-28}, -{50,-7,-27}, -{50,-7,-26}, -{50,-7,-25}, -{50,-7,-24}, -{50,-7,-23}, -{50,-7,-22}, -{50,-7,-21}, -{50,-7,-20}, -{50,-7,-19}, -{50,-7,-18}, -{50,-7,-17}, -{50,-7,-16}, -{50,-7,-15}, -{50,-7,-14}, -{50,-7,-13}, -{50,-7,-12}, -{50,-7,-11}, -{50,-7,-10}, -{50,-7,-9}, -{50,-7,-8}, -{50,-7,-7}, -{50,-7,-6}, -{50,-7,-5}, -{50,-7,-4}, -{50,-7,-3}, -{50,-7,-2}, -{50,-7,-1}, -{50,-7,0}, -{50,-7,1}, -{50,-7,2}, -{50,-7,3}, -{50,-7,4}, -{50,-7,5}, -{50,-7,6}, -{50,-7,7}, -{50,-7,8}, -{50,-7,9}, -{50,-7,10}, -{50,-7,11}, -{50,-7,12}, -{50,-7,13}, -{50,-7,14}, -{50,-7,15}, -{50,-7,16}, -{50,-7,17}, -{50,-7,18}, -{50,-7,19}, -{50,-7,20}, -{50,-7,21}, -{50,-7,22}, -{50,-7,23}, -{50,-7,24}, -{50,-7,25}, -{50,-7,26}, -{50,-7,27}, -{50,-7,28}, -{50,-7,29}, -{50,-7,30}, -{50,-7,31}, -{50,-7,32}, -{50,-7,33}, -{50,-7,34}, -{50,-7,35}, -{50,-7,36}, -{50,-7,37}, -{50,-7,38}, -{50,-7,39}, -{50,-7,40}, -{50,-7,41}, -{50,-7,42}, -{50,-7,43}, -{50,-7,44}, -{50,-7,45}, -{50,-7,46}, -{50,-7,47}, -{50,-7,48}, -{50,-7,49}, -{50,-7,50}, -{50,-7,51}, -{50,-7,52}, -{50,-7,53}, -{50,-7,54}, -{50,-7,55}, -{50,-6,-40}, -{50,-6,-39}, -{50,-6,-38}, -{50,-6,-37}, -{50,-6,-36}, -{50,-6,-35}, -{50,-6,-34}, -{50,-6,-33}, -{50,-6,-32}, -{50,-6,-31}, -{50,-6,-30}, -{50,-6,-29}, -{50,-6,-28}, -{50,-6,-27}, -{50,-6,-26}, -{50,-6,-25}, -{50,-6,-24}, -{50,-6,-23}, -{50,-6,-22}, -{50,-6,-21}, -{50,-6,-20}, -{50,-6,-19}, -{50,-6,-18}, -{50,-6,-17}, -{50,-6,-16}, -{50,-6,-15}, -{50,-6,-14}, -{50,-6,-13}, -{50,-6,-12}, -{50,-6,-11}, -{50,-6,-10}, -{50,-6,-9}, -{50,-6,-8}, -{50,-6,-7}, -{50,-6,-6}, -{50,-6,-5}, -{50,-6,-4}, -{50,-6,-3}, -{50,-6,-2}, -{50,-6,-1}, -{50,-6,0}, -{50,-6,1}, -{50,-6,2}, -{50,-6,3}, -{50,-6,4}, -{50,-6,5}, -{50,-6,6}, -{50,-6,7}, -{50,-6,8}, -{50,-6,9}, -{50,-6,10}, -{50,-6,11}, -{50,-6,12}, -{50,-6,13}, -{50,-6,14}, -{50,-6,15}, -{50,-6,16}, -{50,-6,17}, -{50,-6,18}, -{50,-6,19}, -{50,-6,20}, -{50,-6,21}, -{50,-6,22}, -{50,-6,23}, -{50,-6,24}, -{50,-6,25}, -{50,-6,26}, -{50,-6,27}, -{50,-6,28}, -{50,-6,29}, -{50,-6,30}, -{50,-6,31}, -{50,-6,32}, -{50,-6,33}, -{50,-6,34}, -{50,-6,35}, -{50,-6,36}, -{50,-6,37}, -{50,-6,38}, -{50,-6,39}, -{50,-6,40}, -{50,-6,41}, -{50,-6,42}, -{50,-6,43}, -{50,-6,44}, -{50,-6,45}, -{50,-6,46}, -{50,-6,47}, -{50,-6,48}, -{50,-6,49}, -{50,-6,50}, -{50,-6,51}, -{50,-6,52}, -{50,-6,53}, -{50,-6,54}, -{50,-6,55}, -{50,-5,-41}, -{50,-5,-40}, -{50,-5,-39}, -{50,-5,-38}, -{50,-5,-37}, -{50,-5,-36}, -{50,-5,-35}, -{50,-5,-34}, -{50,-5,-33}, -{50,-5,-32}, -{50,-5,-31}, -{50,-5,-30}, -{50,-5,-29}, -{50,-5,-28}, -{50,-5,-27}, -{50,-5,-26}, -{50,-5,-25}, -{50,-5,-24}, -{50,-5,-23}, -{50,-5,-22}, -{50,-5,-21}, -{50,-5,-20}, -{50,-5,-19}, -{50,-5,-18}, -{50,-5,-17}, -{50,-5,-16}, -{50,-5,-15}, -{50,-5,-14}, -{50,-5,-13}, -{50,-5,-12}, -{50,-5,-11}, -{50,-5,-10}, -{50,-5,-9}, -{50,-5,-8}, -{50,-5,-7}, -{50,-5,-6}, -{50,-5,-5}, -{50,-5,-4}, -{50,-5,-3}, -{50,-5,-2}, -{50,-5,-1}, -{50,-5,0}, -{50,-5,1}, -{50,-5,2}, -{50,-5,3}, -{50,-5,4}, -{50,-5,5}, -{50,-5,6}, -{50,-5,7}, -{50,-5,8}, -{50,-5,9}, -{50,-5,10}, -{50,-5,11}, -{50,-5,12}, -{50,-5,13}, -{50,-5,14}, -{50,-5,15}, -{50,-5,16}, -{50,-5,17}, -{50,-5,18}, -{50,-5,19}, -{50,-5,20}, -{50,-5,21}, -{50,-5,22}, -{50,-5,23}, -{50,-5,24}, -{50,-5,25}, -{50,-5,26}, -{50,-5,27}, -{50,-5,28}, -{50,-5,29}, -{50,-5,30}, -{50,-5,31}, -{50,-5,32}, -{50,-5,33}, -{50,-5,34}, -{50,-5,35}, -{50,-5,36}, -{50,-5,37}, -{50,-5,38}, -{50,-5,39}, -{50,-5,40}, -{50,-5,41}, -{50,-5,42}, -{50,-5,43}, -{50,-5,44}, -{50,-5,45}, -{50,-5,46}, -{50,-5,47}, -{50,-5,48}, -{50,-5,49}, -{50,-5,50}, -{50,-5,51}, -{50,-5,52}, -{50,-5,53}, -{50,-5,54}, -{50,-5,55}, -{50,-4,-43}, -{50,-4,-42}, -{50,-4,-41}, -{50,-4,-40}, -{50,-4,-39}, -{50,-4,-38}, -{50,-4,-37}, -{50,-4,-36}, -{50,-4,-35}, -{50,-4,-34}, -{50,-4,-33}, -{50,-4,-32}, -{50,-4,-31}, -{50,-4,-30}, -{50,-4,-29}, -{50,-4,-28}, -{50,-4,-27}, -{50,-4,-26}, -{50,-4,-25}, -{50,-4,-24}, -{50,-4,-23}, -{50,-4,-22}, -{50,-4,-21}, -{50,-4,-20}, -{50,-4,-19}, -{50,-4,-18}, -{50,-4,-17}, -{50,-4,-16}, -{50,-4,-15}, -{50,-4,-14}, -{50,-4,-13}, -{50,-4,-12}, -{50,-4,-11}, -{50,-4,-10}, -{50,-4,-9}, -{50,-4,-8}, -{50,-4,-7}, -{50,-4,-6}, -{50,-4,-5}, -{50,-4,-4}, -{50,-4,-3}, -{50,-4,-2}, -{50,-4,-1}, -{50,-4,0}, -{50,-4,1}, -{50,-4,2}, -{50,-4,3}, -{50,-4,4}, -{50,-4,5}, -{50,-4,6}, -{50,-4,7}, -{50,-4,8}, -{50,-4,9}, -{50,-4,10}, -{50,-4,11}, -{50,-4,12}, -{50,-4,13}, -{50,-4,14}, -{50,-4,15}, -{50,-4,16}, -{50,-4,17}, -{50,-4,18}, -{50,-4,19}, -{50,-4,20}, -{50,-4,21}, -{50,-4,22}, -{50,-4,23}, -{50,-4,24}, -{50,-4,25}, -{50,-4,26}, -{50,-4,27}, -{50,-4,28}, -{50,-4,29}, -{50,-4,30}, -{50,-4,31}, -{50,-4,32}, -{50,-4,33}, -{50,-4,34}, -{50,-4,35}, -{50,-4,36}, -{50,-4,37}, -{50,-4,38}, -{50,-4,39}, -{50,-4,40}, -{50,-4,41}, -{50,-4,42}, -{50,-4,43}, -{50,-4,44}, -{50,-4,45}, -{50,-4,46}, -{50,-4,47}, -{50,-4,48}, -{50,-4,49}, -{50,-4,50}, -{50,-4,51}, -{50,-4,52}, -{50,-4,53}, -{50,-4,54}, -{50,-4,55}, -{50,-3,-44}, -{50,-3,-43}, -{50,-3,-42}, -{50,-3,-41}, -{50,-3,-40}, -{50,-3,-39}, -{50,-3,-38}, -{50,-3,-37}, -{50,-3,-36}, -{50,-3,-35}, -{50,-3,-34}, -{50,-3,-33}, -{50,-3,-32}, -{50,-3,-31}, -{50,-3,-30}, -{50,-3,-29}, -{50,-3,-28}, -{50,-3,-27}, -{50,-3,-26}, -{50,-3,-25}, -{50,-3,-24}, -{50,-3,-23}, -{50,-3,-22}, -{50,-3,-21}, -{50,-3,-20}, -{50,-3,-19}, -{50,-3,-18}, -{50,-3,-17}, -{50,-3,-16}, -{50,-3,-15}, -{50,-3,-14}, -{50,-3,-13}, -{50,-3,-12}, -{50,-3,-11}, -{50,-3,-10}, -{50,-3,-9}, -{50,-3,-8}, -{50,-3,-7}, -{50,-3,-6}, -{50,-3,-5}, -{50,-3,-4}, -{50,-3,-3}, -{50,-3,-2}, -{50,-3,-1}, -{50,-3,0}, -{50,-3,1}, -{50,-3,2}, -{50,-3,3}, -{50,-3,4}, -{50,-3,5}, -{50,-3,6}, -{50,-3,7}, -{50,-3,8}, -{50,-3,9}, -{50,-3,10}, -{50,-3,11}, -{50,-3,12}, -{50,-3,13}, -{50,-3,14}, -{50,-3,15}, -{50,-3,16}, -{50,-3,17}, -{50,-3,18}, -{50,-3,19}, -{50,-3,20}, -{50,-3,21}, -{50,-3,22}, -{50,-3,23}, -{50,-3,24}, -{50,-3,25}, -{50,-3,26}, -{50,-3,27}, -{50,-3,28}, -{50,-3,29}, -{50,-3,30}, -{50,-3,31}, -{50,-3,32}, -{50,-3,33}, -{50,-3,34}, -{50,-3,35}, -{50,-3,36}, -{50,-3,37}, -{50,-3,38}, -{50,-3,39}, -{50,-3,40}, -{50,-3,41}, -{50,-3,42}, -{50,-3,43}, -{50,-3,44}, -{50,-3,45}, -{50,-3,46}, -{50,-3,47}, -{50,-3,48}, -{50,-3,49}, -{50,-3,50}, -{50,-3,51}, -{50,-3,52}, -{50,-3,53}, -{50,-3,54}, -{50,-3,55}, -{50,-2,-45}, -{50,-2,-44}, -{50,-2,-43}, -{50,-2,-42}, -{50,-2,-41}, -{50,-2,-40}, -{50,-2,-39}, -{50,-2,-38}, -{50,-2,-37}, -{50,-2,-36}, -{50,-2,-35}, -{50,-2,-34}, -{50,-2,-33}, -{50,-2,-32}, -{50,-2,-31}, -{50,-2,-30}, -{50,-2,-29}, -{50,-2,-28}, -{50,-2,-27}, -{50,-2,-26}, -{50,-2,-25}, -{50,-2,-24}, -{50,-2,-23}, -{50,-2,-22}, -{50,-2,-21}, -{50,-2,-20}, -{50,-2,-19}, -{50,-2,-18}, -{50,-2,-17}, -{50,-2,-16}, -{50,-2,-15}, -{50,-2,-14}, -{50,-2,-13}, -{50,-2,-12}, -{50,-2,-11}, -{50,-2,-10}, -{50,-2,-9}, -{50,-2,-8}, -{50,-2,-7}, -{50,-2,-6}, -{50,-2,-5}, -{50,-2,-4}, -{50,-2,-3}, -{50,-2,-2}, -{50,-2,-1}, -{50,-2,0}, -{50,-2,1}, -{50,-2,2}, -{50,-2,3}, -{50,-2,4}, -{50,-2,5}, -{50,-2,6}, -{50,-2,7}, -{50,-2,8}, -{50,-2,9}, -{50,-2,10}, -{50,-2,11}, -{50,-2,12}, -{50,-2,13}, -{50,-2,14}, -{50,-2,15}, -{50,-2,16}, -{50,-2,17}, -{50,-2,18}, -{50,-2,19}, -{50,-2,20}, -{50,-2,21}, -{50,-2,22}, -{50,-2,23}, -{50,-2,24}, -{50,-2,25}, -{50,-2,26}, -{50,-2,27}, -{50,-2,28}, -{50,-2,29}, -{50,-2,30}, -{50,-2,31}, -{50,-2,32}, -{50,-2,33}, -{50,-2,34}, -{50,-2,35}, -{50,-2,36}, -{50,-2,37}, -{50,-2,38}, -{50,-2,39}, -{50,-2,40}, -{50,-2,41}, -{50,-2,42}, -{50,-2,43}, -{50,-2,44}, -{50,-2,45}, -{50,-2,46}, -{50,-2,47}, -{50,-2,48}, -{50,-2,49}, -{50,-2,50}, -{50,-2,51}, -{50,-2,52}, -{50,-2,53}, -{50,-2,54}, -{50,-2,55}, -{50,-2,56}, -{50,-1,-46}, -{50,-1,-45}, -{50,-1,-44}, -{50,-1,-43}, -{50,-1,-42}, -{50,-1,-41}, -{50,-1,-40}, -{50,-1,-39}, -{50,-1,-38}, -{50,-1,-37}, -{50,-1,-36}, -{50,-1,-35}, -{50,-1,-34}, -{50,-1,-33}, -{50,-1,-32}, -{50,-1,-31}, -{50,-1,-30}, -{50,-1,-29}, -{50,-1,-28}, -{50,-1,-27}, -{50,-1,-26}, -{50,-1,-25}, -{50,-1,-24}, -{50,-1,-23}, -{50,-1,-22}, -{50,-1,-21}, -{50,-1,-20}, -{50,-1,-19}, -{50,-1,-18}, -{50,-1,-17}, -{50,-1,-16}, -{50,-1,-15}, -{50,-1,-14}, -{50,-1,-13}, -{50,-1,-12}, -{50,-1,-11}, -{50,-1,-10}, -{50,-1,-9}, -{50,-1,-8}, -{50,-1,-7}, -{50,-1,-6}, -{50,-1,-5}, -{50,-1,-4}, -{50,-1,-3}, -{50,-1,-2}, -{50,-1,-1}, -{50,-1,0}, -{50,-1,1}, -{50,-1,2}, -{50,-1,3}, -{50,-1,4}, -{50,-1,5}, -{50,-1,6}, -{50,-1,7}, -{50,-1,8}, -{50,-1,9}, -{50,-1,10}, -{50,-1,11}, -{50,-1,12}, -{50,-1,13}, -{50,-1,14}, -{50,-1,15}, -{50,-1,16}, -{50,-1,17}, -{50,-1,18}, -{50,-1,19}, -{50,-1,20}, -{50,-1,21}, -{50,-1,22}, -{50,-1,23}, -{50,-1,24}, -{50,-1,25}, -{50,-1,26}, -{50,-1,27}, -{50,-1,28}, -{50,-1,29}, -{50,-1,30}, -{50,-1,31}, -{50,-1,32}, -{50,-1,33}, -{50,-1,34}, -{50,-1,35}, -{50,-1,36}, -{50,-1,37}, -{50,-1,38}, -{50,-1,39}, -{50,-1,40}, -{50,-1,41}, -{50,-1,42}, -{50,-1,43}, -{50,-1,44}, -{50,-1,45}, -{50,-1,46}, -{50,-1,47}, -{50,-1,48}, -{50,-1,49}, -{50,-1,50}, -{50,-1,51}, -{50,-1,52}, -{50,-1,53}, -{50,-1,54}, -{50,-1,55}, -{50,-1,56}, -{50,0,-47}, -{50,0,-46}, -{50,0,-45}, -{50,0,-44}, -{50,0,-43}, -{50,0,-42}, -{50,0,-41}, -{50,0,-40}, -{50,0,-39}, -{50,0,-38}, -{50,0,-37}, -{50,0,-36}, -{50,0,-35}, -{50,0,-34}, -{50,0,-33}, -{50,0,-32}, -{50,0,-31}, -{50,0,-30}, -{50,0,-29}, -{50,0,-28}, -{50,0,-27}, -{50,0,-26}, -{50,0,-25}, -{50,0,-24}, -{50,0,-23}, -{50,0,-22}, -{50,0,-21}, -{50,0,-20}, -{50,0,-19}, -{50,0,-18}, -{50,0,-17}, -{50,0,-16}, -{50,0,-15}, -{50,0,-14}, -{50,0,-13}, -{50,0,-12}, -{50,0,-11}, -{50,0,-10}, -{50,0,-9}, -{50,0,-8}, -{50,0,-7}, -{50,0,-6}, -{50,0,-5}, -{50,0,-4}, -{50,0,-3}, -{50,0,-2}, -{50,0,-1}, -{50,0,0}, -{50,0,1}, -{50,0,2}, -{50,0,3}, -{50,0,4}, -{50,0,5}, -{50,0,6}, -{50,0,7}, -{50,0,8}, -{50,0,9}, -{50,0,10}, -{50,0,11}, -{50,0,12}, -{50,0,13}, -{50,0,14}, -{50,0,15}, -{50,0,16}, -{50,0,17}, -{50,0,18}, -{50,0,19}, -{50,0,20}, -{50,0,21}, -{50,0,22}, -{50,0,23}, -{50,0,24}, -{50,0,25}, -{50,0,26}, -{50,0,27}, -{50,0,28}, -{50,0,29}, -{50,0,30}, -{50,0,31}, -{50,0,32}, -{50,0,33}, -{50,0,34}, -{50,0,35}, -{50,0,36}, -{50,0,37}, -{50,0,38}, -{50,0,39}, -{50,0,40}, -{50,0,41}, -{50,0,42}, -{50,0,43}, -{50,0,44}, -{50,0,45}, -{50,0,46}, -{50,0,47}, -{50,0,48}, -{50,0,49}, -{50,0,50}, -{50,0,51}, -{50,0,52}, -{50,0,53}, -{50,0,54}, -{50,0,55}, -{50,0,56}, -{50,1,-48}, -{50,1,-47}, -{50,1,-46}, -{50,1,-45}, -{50,1,-44}, -{50,1,-43}, -{50,1,-42}, -{50,1,-41}, -{50,1,-40}, -{50,1,-39}, -{50,1,-38}, -{50,1,-37}, -{50,1,-36}, -{50,1,-35}, -{50,1,-34}, -{50,1,-33}, -{50,1,-32}, -{50,1,-31}, -{50,1,-30}, -{50,1,-29}, -{50,1,-28}, -{50,1,-27}, -{50,1,-26}, -{50,1,-25}, -{50,1,-24}, -{50,1,-23}, -{50,1,-22}, -{50,1,-21}, -{50,1,-20}, -{50,1,-19}, -{50,1,-18}, -{50,1,-17}, -{50,1,-16}, -{50,1,-15}, -{50,1,-14}, -{50,1,-13}, -{50,1,-12}, -{50,1,-11}, -{50,1,-10}, -{50,1,-9}, -{50,1,-8}, -{50,1,-7}, -{50,1,-6}, -{50,1,-5}, -{50,1,-4}, -{50,1,-3}, -{50,1,-2}, -{50,1,-1}, -{50,1,0}, -{50,1,1}, -{50,1,2}, -{50,1,3}, -{50,1,4}, -{50,1,5}, -{50,1,6}, -{50,1,7}, -{50,1,8}, -{50,1,9}, -{50,1,10}, -{50,1,11}, -{50,1,12}, -{50,1,13}, -{50,1,14}, -{50,1,15}, -{50,1,16}, -{50,1,17}, -{50,1,18}, -{50,1,19}, -{50,1,20}, -{50,1,21}, -{50,1,22}, -{50,1,23}, -{50,1,24}, -{50,1,25}, -{50,1,26}, -{50,1,27}, -{50,1,28}, -{50,1,29}, -{50,1,30}, -{50,1,31}, -{50,1,32}, -{50,1,33}, -{50,1,34}, -{50,1,35}, -{50,1,36}, -{50,1,37}, -{50,1,38}, -{50,1,39}, -{50,1,40}, -{50,1,41}, -{50,1,42}, -{50,1,43}, -{50,1,44}, -{50,1,45}, -{50,1,46}, -{50,1,47}, -{50,1,48}, -{50,1,49}, -{50,1,50}, -{50,1,51}, -{50,1,52}, -{50,1,53}, -{50,1,54}, -{50,1,55}, -{50,1,56}, -{50,2,-49}, -{50,2,-48}, -{50,2,-47}, -{50,2,-46}, -{50,2,-45}, -{50,2,-44}, -{50,2,-43}, -{50,2,-42}, -{50,2,-41}, -{50,2,-40}, -{50,2,-39}, -{50,2,-38}, -{50,2,-37}, -{50,2,-36}, -{50,2,-35}, -{50,2,-34}, -{50,2,-33}, -{50,2,-32}, -{50,2,-31}, -{50,2,-30}, -{50,2,-29}, -{50,2,-28}, -{50,2,-27}, -{50,2,-26}, -{50,2,-25}, -{50,2,-24}, -{50,2,-23}, -{50,2,-22}, -{50,2,-21}, -{50,2,-20}, -{50,2,-19}, -{50,2,-18}, -{50,2,-17}, -{50,2,-16}, -{50,2,-15}, -{50,2,-14}, -{50,2,-13}, -{50,2,-12}, -{50,2,-11}, -{50,2,-10}, -{50,2,-9}, -{50,2,-8}, -{50,2,-7}, -{50,2,-6}, -{50,2,-5}, -{50,2,-4}, -{50,2,-3}, -{50,2,-2}, -{50,2,-1}, -{50,2,0}, -{50,2,1}, -{50,2,2}, -{50,2,3}, -{50,2,4}, -{50,2,5}, -{50,2,6}, -{50,2,7}, -{50,2,8}, -{50,2,9}, -{50,2,10}, -{50,2,11}, -{50,2,12}, -{50,2,13}, -{50,2,14}, -{50,2,15}, -{50,2,16}, -{50,2,17}, -{50,2,18}, -{50,2,19}, -{50,2,20}, -{50,2,21}, -{50,2,22}, -{50,2,23}, -{50,2,24}, -{50,2,25}, -{50,2,26}, -{50,2,27}, -{50,2,28}, -{50,2,29}, -{50,2,30}, -{50,2,31}, -{50,2,32}, -{50,2,33}, -{50,2,34}, -{50,2,35}, -{50,2,36}, -{50,2,37}, -{50,2,38}, -{50,2,39}, -{50,2,40}, -{50,2,41}, -{50,2,42}, -{50,2,43}, -{50,2,44}, -{50,2,45}, -{50,2,46}, -{50,2,47}, -{50,2,48}, -{50,2,49}, -{50,2,50}, -{50,2,51}, -{50,2,52}, -{50,2,53}, -{50,2,54}, -{50,2,55}, -{50,2,56}, -{50,3,-50}, -{50,3,-49}, -{50,3,-48}, -{50,3,-47}, -{50,3,-46}, -{50,3,-45}, -{50,3,-44}, -{50,3,-43}, -{50,3,-42}, -{50,3,-41}, -{50,3,-40}, -{50,3,-39}, -{50,3,-38}, -{50,3,-37}, -{50,3,-36}, -{50,3,-35}, -{50,3,-34}, -{50,3,-33}, -{50,3,-32}, -{50,3,-31}, -{50,3,-30}, -{50,3,-29}, -{50,3,-28}, -{50,3,-27}, -{50,3,-26}, -{50,3,-25}, -{50,3,-24}, -{50,3,-23}, -{50,3,-22}, -{50,3,-21}, -{50,3,-20}, -{50,3,-19}, -{50,3,-18}, -{50,3,-17}, -{50,3,-16}, -{50,3,-15}, -{50,3,-14}, -{50,3,-13}, -{50,3,-12}, -{50,3,-11}, -{50,3,-10}, -{50,3,-9}, -{50,3,-8}, -{50,3,-7}, -{50,3,-6}, -{50,3,-5}, -{50,3,-4}, -{50,3,-3}, -{50,3,-2}, -{50,3,-1}, -{50,3,0}, -{50,3,1}, -{50,3,2}, -{50,3,3}, -{50,3,4}, -{50,3,5}, -{50,3,6}, -{50,3,7}, -{50,3,8}, -{50,3,9}, -{50,3,10}, -{50,3,11}, -{50,3,12}, -{50,3,13}, -{50,3,14}, -{50,3,15}, -{50,3,16}, -{50,3,17}, -{50,3,18}, -{50,3,19}, -{50,3,20}, -{50,3,21}, -{50,3,22}, -{50,3,23}, -{50,3,24}, -{50,3,25}, -{50,3,26}, -{50,3,27}, -{50,3,28}, -{50,3,29}, -{50,3,30}, -{50,3,31}, -{50,3,32}, -{50,3,33}, -{50,3,34}, -{50,3,35}, -{50,3,36}, -{50,3,37}, -{50,3,38}, -{50,3,39}, -{50,3,40}, -{50,3,41}, -{50,3,42}, -{50,3,43}, -{50,3,44}, -{50,3,45}, -{50,3,46}, -{50,3,47}, -{50,3,48}, -{50,3,49}, -{50,3,50}, -{50,3,51}, -{50,3,52}, -{50,3,53}, -{50,3,54}, -{50,3,55}, -{50,3,56}, -{50,4,-52}, -{50,4,-51}, -{50,4,-50}, -{50,4,-49}, -{50,4,-48}, -{50,4,-47}, -{50,4,-46}, -{50,4,-45}, -{50,4,-44}, -{50,4,-43}, -{50,4,-42}, -{50,4,-41}, -{50,4,-40}, -{50,4,-39}, -{50,4,-38}, -{50,4,-37}, -{50,4,-36}, -{50,4,-35}, -{50,4,-34}, -{50,4,-33}, -{50,4,-32}, -{50,4,-31}, -{50,4,-30}, -{50,4,-29}, -{50,4,-28}, -{50,4,-27}, -{50,4,-26}, -{50,4,-25}, -{50,4,-24}, -{50,4,-23}, -{50,4,-22}, -{50,4,-21}, -{50,4,-20}, -{50,4,-19}, -{50,4,-18}, -{50,4,-17}, -{50,4,-16}, -{50,4,-15}, -{50,4,-14}, -{50,4,-13}, -{50,4,-12}, -{50,4,-11}, -{50,4,-10}, -{50,4,-9}, -{50,4,-8}, -{50,4,-7}, -{50,4,-6}, -{50,4,-5}, -{50,4,-4}, -{50,4,-3}, -{50,4,-2}, -{50,4,-1}, -{50,4,0}, -{50,4,1}, -{50,4,2}, -{50,4,3}, -{50,4,4}, -{50,4,5}, -{50,4,6}, -{50,4,7}, -{50,4,8}, -{50,4,9}, -{50,4,10}, -{50,4,11}, -{50,4,12}, -{50,4,13}, -{50,4,14}, -{50,4,15}, -{50,4,16}, -{50,4,17}, -{50,4,18}, -{50,4,19}, -{50,4,20}, -{50,4,21}, -{50,4,22}, -{50,4,23}, -{50,4,24}, -{50,4,25}, -{50,4,26}, -{50,4,27}, -{50,4,28}, -{50,4,29}, -{50,4,30}, -{50,4,31}, -{50,4,32}, -{50,4,33}, -{50,4,34}, -{50,4,35}, -{50,4,36}, -{50,4,37}, -{50,4,38}, -{50,4,39}, -{50,4,40}, -{50,4,41}, -{50,4,42}, -{50,4,43}, -{50,4,44}, -{50,4,45}, -{50,4,46}, -{50,4,47}, -{50,4,48}, -{50,4,49}, -{50,4,50}, -{50,4,51}, -{50,4,52}, -{50,4,53}, -{50,4,54}, -{50,4,55}, -{50,4,56}, -{50,5,-53}, -{50,5,-52}, -{50,5,-51}, -{50,5,-50}, -{50,5,-49}, -{50,5,-48}, -{50,5,-47}, -{50,5,-46}, -{50,5,-45}, -{50,5,-44}, -{50,5,-43}, -{50,5,-42}, -{50,5,-41}, -{50,5,-40}, -{50,5,-39}, -{50,5,-38}, -{50,5,-37}, -{50,5,-36}, -{50,5,-35}, -{50,5,-34}, -{50,5,-33}, -{50,5,-32}, -{50,5,-31}, -{50,5,-30}, -{50,5,-29}, -{50,5,-28}, -{50,5,-27}, -{50,5,-26}, -{50,5,-25}, -{50,5,-24}, -{50,5,-23}, -{50,5,-22}, -{50,5,-21}, -{50,5,-20}, -{50,5,-19}, -{50,5,-18}, -{50,5,-17}, -{50,5,-16}, -{50,5,-15}, -{50,5,-14}, -{50,5,-13}, -{50,5,-12}, -{50,5,-11}, -{50,5,-10}, -{50,5,-9}, -{50,5,-8}, -{50,5,-7}, -{50,5,-6}, -{50,5,-5}, -{50,5,-4}, -{50,5,-3}, -{50,5,-2}, -{50,5,-1}, -{50,5,0}, -{50,5,1}, -{50,5,2}, -{50,5,3}, -{50,5,4}, -{50,5,5}, -{50,5,6}, -{50,5,7}, -{50,5,8}, -{50,5,9}, -{50,5,10}, -{50,5,11}, -{50,5,12}, -{50,5,13}, -{50,5,14}, -{50,5,15}, -{50,5,16}, -{50,5,17}, -{50,5,18}, -{50,5,19}, -{50,5,20}, -{50,5,21}, -{50,5,22}, -{50,5,23}, -{50,5,24}, -{50,5,25}, -{50,5,26}, -{50,5,27}, -{50,5,28}, -{50,5,29}, -{50,5,30}, -{50,5,31}, -{50,5,32}, -{50,5,33}, -{50,5,34}, -{50,5,35}, -{50,5,36}, -{50,5,37}, -{50,5,38}, -{50,5,39}, -{50,5,40}, -{50,5,41}, -{50,5,42}, -{50,5,43}, -{50,5,44}, -{50,5,45}, -{50,5,46}, -{50,5,47}, -{50,5,48}, -{50,5,49}, -{50,5,50}, -{50,5,51}, -{50,5,52}, -{50,5,53}, -{50,5,54}, -{50,5,55}, -{50,5,56}, -{50,6,-54}, -{50,6,-53}, -{50,6,-52}, -{50,6,-51}, -{50,6,-50}, -{50,6,-49}, -{50,6,-48}, -{50,6,-47}, -{50,6,-46}, -{50,6,-45}, -{50,6,-44}, -{50,6,-43}, -{50,6,-42}, -{50,6,-41}, -{50,6,-40}, -{50,6,-39}, -{50,6,-38}, -{50,6,-37}, -{50,6,-36}, -{50,6,-35}, -{50,6,-34}, -{50,6,-33}, -{50,6,-32}, -{50,6,-31}, -{50,6,-30}, -{50,6,-29}, -{50,6,-28}, -{50,6,-27}, -{50,6,-26}, -{50,6,-25}, -{50,6,-24}, -{50,6,-23}, -{50,6,-22}, -{50,6,-21}, -{50,6,-20}, -{50,6,-19}, -{50,6,-18}, -{50,6,-17}, -{50,6,-16}, -{50,6,-15}, -{50,6,-14}, -{50,6,-13}, -{50,6,-12}, -{50,6,-11}, -{50,6,-10}, -{50,6,-9}, -{50,6,-8}, -{50,6,-7}, -{50,6,-6}, -{50,6,-5}, -{50,6,-4}, -{50,6,-3}, -{50,6,-2}, -{50,6,-1}, -{50,6,0}, -{50,6,1}, -{50,6,2}, -{50,6,3}, -{50,6,4}, -{50,6,5}, -{50,6,6}, -{50,6,7}, -{50,6,8}, -{50,6,9}, -{50,6,10}, -{50,6,11}, -{50,6,12}, -{50,6,13}, -{50,6,14}, -{50,6,15}, -{50,6,16}, -{50,6,17}, -{50,6,18}, -{50,6,19}, -{50,6,20}, -{50,6,21}, -{50,6,22}, -{50,6,23}, -{50,6,24}, -{50,6,25}, -{50,6,26}, -{50,6,27}, -{50,6,28}, -{50,6,29}, -{50,6,30}, -{50,6,31}, -{50,6,32}, -{50,6,33}, -{50,6,34}, -{50,6,35}, -{50,6,36}, -{50,6,37}, -{50,6,38}, -{50,6,39}, -{50,6,40}, -{50,6,41}, -{50,6,42}, -{50,6,43}, -{50,6,44}, -{50,6,45}, -{50,6,46}, -{50,6,47}, -{50,6,48}, -{50,6,49}, -{50,6,50}, -{50,6,51}, -{50,6,52}, -{50,6,53}, -{50,6,54}, -{50,6,55}, -{50,6,56}, -{50,7,-55}, -{50,7,-54}, -{50,7,-53}, -{50,7,-52}, -{50,7,-51}, -{50,7,-50}, -{50,7,-49}, -{50,7,-48}, -{50,7,-47}, -{50,7,-46}, -{50,7,-45}, -{50,7,-44}, -{50,7,-43}, -{50,7,-42}, -{50,7,-41}, -{50,7,-40}, -{50,7,-39}, -{50,7,-38}, -{50,7,-37}, -{50,7,-36}, -{50,7,-35}, -{50,7,-34}, -{50,7,-33}, -{50,7,-32}, -{50,7,-31}, -{50,7,-30}, -{50,7,-29}, -{50,7,-28}, -{50,7,-27}, -{50,7,-26}, -{50,7,-25}, -{50,7,-24}, -{50,7,-23}, -{50,7,-22}, -{50,7,-21}, -{50,7,-20}, -{50,7,-19}, -{50,7,-18}, -{50,7,-17}, -{50,7,-16}, -{50,7,-15}, -{50,7,-14}, -{50,7,-13}, -{50,7,-12}, -{50,7,-11}, -{50,7,-10}, -{50,7,-9}, -{50,7,-8}, -{50,7,-7}, -{50,7,-6}, -{50,7,-5}, -{50,7,-4}, -{50,7,-3}, -{50,7,-2}, -{50,7,-1}, -{50,7,0}, -{50,7,1}, -{50,7,2}, -{50,7,3}, -{50,7,4}, -{50,7,5}, -{50,7,6}, -{50,7,7}, -{50,7,8}, -{50,7,9}, -{50,7,10}, -{50,7,11}, -{50,7,12}, -{50,7,13}, -{50,7,14}, -{50,7,15}, -{50,7,16}, -{50,7,17}, -{50,7,18}, -{50,7,19}, -{50,7,20}, -{50,7,21}, -{50,7,22}, -{50,7,23}, -{50,7,24}, -{50,7,25}, -{50,7,26}, -{50,7,27}, -{50,7,28}, -{50,7,29}, -{50,7,30}, -{50,7,31}, -{50,7,32}, -{50,7,33}, -{50,7,34}, -{50,7,35}, -{50,7,36}, -{50,7,37}, -{50,7,38}, -{50,7,39}, -{50,7,40}, -{50,7,41}, -{50,7,42}, -{50,7,43}, -{50,7,44}, -{50,7,45}, -{50,7,46}, -{50,7,47}, -{50,7,48}, -{50,7,49}, -{50,7,50}, -{50,7,51}, -{50,7,52}, -{50,7,53}, -{50,7,54}, -{50,7,55}, -{50,7,56}, -{50,8,-56}, -{50,8,-55}, -{50,8,-54}, -{50,8,-53}, -{50,8,-52}, -{50,8,-51}, -{50,8,-50}, -{50,8,-49}, -{50,8,-48}, -{50,8,-47}, -{50,8,-46}, -{50,8,-45}, -{50,8,-44}, -{50,8,-43}, -{50,8,-42}, -{50,8,-41}, -{50,8,-40}, -{50,8,-39}, -{50,8,-38}, -{50,8,-37}, -{50,8,-36}, -{50,8,-35}, -{50,8,-34}, -{50,8,-33}, -{50,8,-32}, -{50,8,-31}, -{50,8,-30}, -{50,8,-29}, -{50,8,-28}, -{50,8,-27}, -{50,8,-26}, -{50,8,-25}, -{50,8,-24}, -{50,8,-23}, -{50,8,-22}, -{50,8,-21}, -{50,8,-20}, -{50,8,-19}, -{50,8,-18}, -{50,8,-17}, -{50,8,-16}, -{50,8,-15}, -{50,8,-14}, -{50,8,-13}, -{50,8,-12}, -{50,8,-11}, -{50,8,-10}, -{50,8,-9}, -{50,8,-8}, -{50,8,-7}, -{50,8,-6}, -{50,8,-5}, -{50,8,-4}, -{50,8,-3}, -{50,8,-2}, -{50,8,-1}, -{50,8,0}, -{50,8,1}, -{50,8,2}, -{50,8,3}, -{50,8,4}, -{50,8,5}, -{50,8,6}, -{50,8,7}, -{50,8,8}, -{50,8,9}, -{50,8,10}, -{50,8,11}, -{50,8,12}, -{50,8,13}, -{50,8,14}, -{50,8,15}, -{50,8,16}, -{50,8,17}, -{50,8,18}, -{50,8,19}, -{50,8,20}, -{50,8,21}, -{50,8,22}, -{50,8,23}, -{50,8,24}, -{50,8,25}, -{50,8,26}, -{50,8,27}, -{50,8,28}, -{50,8,29}, -{50,8,30}, -{50,8,31}, -{50,8,32}, -{50,8,33}, -{50,8,34}, -{50,8,35}, -{50,8,36}, -{50,8,37}, -{50,8,38}, -{50,8,39}, -{50,8,40}, -{50,8,41}, -{50,8,42}, -{50,8,43}, -{50,8,44}, -{50,8,45}, -{50,8,46}, -{50,8,47}, -{50,8,48}, -{50,8,49}, -{50,8,50}, -{50,8,51}, -{50,8,52}, -{50,8,53}, -{50,8,54}, -{50,8,55}, -{50,8,56}, -{50,9,-57}, -{50,9,-56}, -{50,9,-55}, -{50,9,-54}, -{50,9,-53}, -{50,9,-52}, -{50,9,-51}, -{50,9,-50}, -{50,9,-49}, -{50,9,-48}, -{50,9,-47}, -{50,9,-46}, -{50,9,-45}, -{50,9,-44}, -{50,9,-43}, -{50,9,-42}, -{50,9,-41}, -{50,9,-40}, -{50,9,-39}, -{50,9,-38}, -{50,9,-37}, -{50,9,-36}, -{50,9,-35}, -{50,9,-34}, -{50,9,-33}, -{50,9,-32}, -{50,9,-31}, -{50,9,-30}, -{50,9,-29}, -{50,9,-28}, -{50,9,-27}, -{50,9,-26}, -{50,9,-25}, -{50,9,-24}, -{50,9,-23}, -{50,9,-22}, -{50,9,-21}, -{50,9,-20}, -{50,9,-19}, -{50,9,-18}, -{50,9,-17}, -{50,9,-16}, -{50,9,-15}, -{50,9,-14}, -{50,9,-13}, -{50,9,-12}, -{50,9,-11}, -{50,9,-10}, -{50,9,-9}, -{50,9,-8}, -{50,9,-7}, -{50,9,-6}, -{50,9,-5}, -{50,9,-4}, -{50,9,-3}, -{50,9,-2}, -{50,9,-1}, -{50,9,0}, -{50,9,1}, -{50,9,2}, -{50,9,3}, -{50,9,4}, -{50,9,5}, -{50,9,6}, -{50,9,7}, -{50,9,8}, -{50,9,9}, -{50,9,10}, -{50,9,11}, -{50,9,12}, -{50,9,13}, -{50,9,14}, -{50,9,15}, -{50,9,16}, -{50,9,17}, -{50,9,18}, -{50,9,19}, -{50,9,20}, -{50,9,21}, -{50,9,22}, -{50,9,23}, -{50,9,24}, -{50,9,25}, -{50,9,26}, -{50,9,27}, -{50,9,28}, -{50,9,29}, -{50,9,30}, -{50,9,31}, -{50,9,32}, -{50,9,33}, -{50,9,34}, -{50,9,35}, -{50,9,36}, -{50,9,37}, -{50,9,38}, -{50,9,39}, -{50,9,40}, -{50,9,41}, -{50,9,42}, -{50,9,43}, -{50,9,44}, -{50,9,45}, -{50,9,46}, -{50,9,47}, -{50,9,48}, -{50,9,49}, -{50,9,50}, -{50,9,51}, -{50,9,52}, -{50,9,53}, -{50,9,54}, -{50,9,55}, -{50,9,56}, -{50,10,-58}, -{50,10,-57}, -{50,10,-56}, -{50,10,-55}, -{50,10,-54}, -{50,10,-53}, -{50,10,-52}, -{50,10,-51}, -{50,10,-50}, -{50,10,-49}, -{50,10,-48}, -{50,10,-47}, -{50,10,-46}, -{50,10,-45}, -{50,10,-44}, -{50,10,-43}, -{50,10,-42}, -{50,10,-41}, -{50,10,-40}, -{50,10,-39}, -{50,10,-38}, -{50,10,-37}, -{50,10,-36}, -{50,10,-35}, -{50,10,-34}, -{50,10,-33}, -{50,10,-32}, -{50,10,-31}, -{50,10,-30}, -{50,10,-29}, -{50,10,-28}, -{50,10,-27}, -{50,10,-26}, -{50,10,-25}, -{50,10,-24}, -{50,10,-23}, -{50,10,-22}, -{50,10,-21}, -{50,10,-20}, -{50,10,-19}, -{50,10,-18}, -{50,10,-17}, -{50,10,-16}, -{50,10,-15}, -{50,10,-14}, -{50,10,-13}, -{50,10,-12}, -{50,10,-11}, -{50,10,-10}, -{50,10,-9}, -{50,10,-8}, -{50,10,-7}, -{50,10,-6}, -{50,10,-5}, -{50,10,-4}, -{50,10,-3}, -{50,10,-2}, -{50,10,-1}, -{50,10,0}, -{50,10,1}, -{50,10,2}, -{50,10,3}, -{50,10,4}, -{50,10,5}, -{50,10,6}, -{50,10,7}, -{50,10,8}, -{50,10,9}, -{50,10,10}, -{50,10,11}, -{50,10,12}, -{50,10,13}, -{50,10,14}, -{50,10,15}, -{50,10,16}, -{50,10,17}, -{50,10,18}, -{50,10,19}, -{50,10,20}, -{50,10,21}, -{50,10,22}, -{50,10,23}, -{50,10,24}, -{50,10,25}, -{50,10,26}, -{50,10,27}, -{50,10,28}, -{50,10,29}, -{50,10,30}, -{50,10,31}, -{50,10,32}, -{50,10,33}, -{50,10,34}, -{50,10,35}, -{50,10,36}, -{50,10,37}, -{50,10,38}, -{50,10,39}, -{50,10,40}, -{50,10,41}, -{50,10,42}, -{50,10,43}, -{50,10,44}, -{50,10,45}, -{50,10,46}, -{50,10,47}, -{50,10,48}, -{50,10,49}, -{50,10,50}, -{50,10,51}, -{50,10,52}, -{50,10,53}, -{50,10,54}, -{50,10,55}, -{50,10,56}, -{50,11,-59}, -{50,11,-58}, -{50,11,-57}, -{50,11,-56}, -{50,11,-55}, -{50,11,-54}, -{50,11,-53}, -{50,11,-52}, -{50,11,-51}, -{50,11,-50}, -{50,11,-49}, -{50,11,-48}, -{50,11,-47}, -{50,11,-46}, -{50,11,-45}, -{50,11,-44}, -{50,11,-43}, -{50,11,-42}, -{50,11,-41}, -{50,11,-40}, -{50,11,-39}, -{50,11,-38}, -{50,11,-37}, -{50,11,-36}, -{50,11,-35}, -{50,11,-34}, -{50,11,-33}, -{50,11,-32}, -{50,11,-31}, -{50,11,-30}, -{50,11,-29}, -{50,11,-28}, -{50,11,-27}, -{50,11,-26}, -{50,11,-25}, -{50,11,-24}, -{50,11,-23}, -{50,11,-22}, -{50,11,-21}, -{50,11,-20}, -{50,11,-19}, -{50,11,-18}, -{50,11,-17}, -{50,11,-16}, -{50,11,-15}, -{50,11,-14}, -{50,11,-13}, -{50,11,-12}, -{50,11,-11}, -{50,11,-10}, -{50,11,-9}, -{50,11,-8}, -{50,11,-7}, -{50,11,-6}, -{50,11,-5}, -{50,11,-4}, -{50,11,-3}, -{50,11,-2}, -{50,11,-1}, -{50,11,0}, -{50,11,1}, -{50,11,2}, -{50,11,3}, -{50,11,4}, -{50,11,5}, -{50,11,6}, -{50,11,7}, -{50,11,8}, -{50,11,9}, -{50,11,10}, -{50,11,11}, -{50,11,12}, -{50,11,13}, -{50,11,14}, -{50,11,15}, -{50,11,16}, -{50,11,17}, -{50,11,18}, -{50,11,19}, -{50,11,20}, -{50,11,21}, -{50,11,22}, -{50,11,23}, -{50,11,24}, -{50,11,25}, -{50,11,26}, -{50,11,27}, -{50,11,28}, -{50,11,29}, -{50,11,30}, -{50,11,31}, -{50,11,32}, -{50,11,33}, -{50,11,34}, -{50,11,35}, -{50,11,36}, -{50,11,37}, -{50,11,38}, -{50,11,39}, -{50,11,40}, -{50,11,41}, -{50,11,42}, -{50,11,43}, -{50,11,44}, -{50,11,45}, -{50,11,46}, -{50,11,47}, -{50,11,48}, -{50,11,49}, -{50,11,50}, -{50,11,51}, -{50,11,52}, -{50,11,53}, -{50,11,54}, -{50,11,55}, -{50,11,56}, -{50,12,-60}, -{50,12,-59}, -{50,12,-58}, -{50,12,-57}, -{50,12,-56}, -{50,12,-55}, -{50,12,-54}, -{50,12,-53}, -{50,12,-52}, -{50,12,-51}, -{50,12,-50}, -{50,12,-49}, -{50,12,-48}, -{50,12,-47}, -{50,12,-46}, -{50,12,-45}, -{50,12,-44}, -{50,12,-43}, -{50,12,-42}, -{50,12,-41}, -{50,12,-40}, -{50,12,-39}, -{50,12,-38}, -{50,12,-37}, -{50,12,-36}, -{50,12,-35}, -{50,12,-34}, -{50,12,-33}, -{50,12,-32}, -{50,12,-31}, -{50,12,-30}, -{50,12,-29}, -{50,12,-28}, -{50,12,-27}, -{50,12,-26}, -{50,12,-25}, -{50,12,-24}, -{50,12,-23}, -{50,12,-22}, -{50,12,-21}, -{50,12,-20}, -{50,12,-19}, -{50,12,-18}, -{50,12,-17}, -{50,12,-16}, -{50,12,-15}, -{50,12,-14}, -{50,12,-13}, -{50,12,-12}, -{50,12,-11}, -{50,12,-10}, -{50,12,-9}, -{50,12,-8}, -{50,12,-7}, -{50,12,-6}, -{50,12,-5}, -{50,12,-4}, -{50,12,-3}, -{50,12,-2}, -{50,12,-1}, -{50,12,0}, -{50,12,1}, -{50,12,2}, -{50,12,3}, -{50,12,4}, -{50,12,5}, -{50,12,6}, -{50,12,7}, -{50,12,8}, -{50,12,9}, -{50,12,10}, -{50,12,11}, -{50,12,12}, -{50,12,13}, -{50,12,14}, -{50,12,15}, -{50,12,16}, -{50,12,17}, -{50,12,18}, -{50,12,19}, -{50,12,20}, -{50,12,21}, -{50,12,22}, -{50,12,23}, -{50,12,24}, -{50,12,25}, -{50,12,26}, -{50,12,27}, -{50,12,28}, -{50,12,29}, -{50,12,30}, -{50,12,31}, -{50,12,32}, -{50,12,33}, -{50,12,34}, -{50,12,35}, -{50,12,36}, -{50,12,37}, -{50,12,38}, -{50,12,39}, -{50,12,40}, -{50,12,41}, -{50,12,42}, -{50,12,43}, -{50,12,44}, -{50,12,45}, -{50,12,46}, -{50,12,47}, -{50,12,48}, -{50,12,49}, -{50,12,50}, -{50,12,51}, -{50,12,52}, -{50,12,53}, -{50,12,54}, -{50,12,55}, -{50,12,56}, -{50,12,57}, -{50,13,-61}, -{50,13,-60}, -{50,13,-59}, -{50,13,-58}, -{50,13,-57}, -{50,13,-56}, -{50,13,-55}, -{50,13,-54}, -{50,13,-53}, -{50,13,-52}, -{50,13,-51}, -{50,13,-50}, -{50,13,-49}, -{50,13,-48}, -{50,13,-47}, -{50,13,-46}, -{50,13,-45}, -{50,13,-44}, -{50,13,-43}, -{50,13,-42}, -{50,13,-41}, -{50,13,-40}, -{50,13,-39}, -{50,13,-38}, -{50,13,-37}, -{50,13,-36}, -{50,13,-35}, -{50,13,-34}, -{50,13,-33}, -{50,13,-32}, -{50,13,-31}, -{50,13,-30}, -{50,13,-29}, -{50,13,-28}, -{50,13,-27}, -{50,13,-26}, -{50,13,-25}, -{50,13,-24}, -{50,13,-23}, -{50,13,-22}, -{50,13,-21}, -{50,13,-20}, -{50,13,-19}, -{50,13,-18}, -{50,13,-17}, -{50,13,-16}, -{50,13,-15}, -{50,13,-14}, -{50,13,-13}, -{50,13,-12}, -{50,13,-11}, -{50,13,-10}, -{50,13,-9}, -{50,13,-8}, -{50,13,-7}, -{50,13,-6}, -{50,13,-5}, -{50,13,-4}, -{50,13,-3}, -{50,13,-2}, -{50,13,-1}, -{50,13,0}, -{50,13,1}, -{50,13,2}, -{50,13,3}, -{50,13,4}, -{50,13,5}, -{50,13,6}, -{50,13,7}, -{50,13,8}, -{50,13,9}, -{50,13,10}, -{50,13,11}, -{50,13,12}, -{50,13,13}, -{50,13,14}, -{50,13,15}, -{50,13,16}, -{50,13,17}, -{50,13,18}, -{50,13,19}, -{50,13,20}, -{50,13,21}, -{50,13,22}, -{50,13,23}, -{50,13,24}, -{50,13,25}, -{50,13,26}, -{50,13,27}, -{50,13,28}, -{50,13,29}, -{50,13,30}, -{50,13,31}, -{50,13,32}, -{50,13,33}, -{50,13,34}, -{50,13,35}, -{50,13,36}, -{50,13,37}, -{50,13,38}, -{50,13,39}, -{50,13,40}, -{50,13,41}, -{50,13,42}, -{50,13,43}, -{50,13,44}, -{50,13,45}, -{50,13,46}, -{50,13,47}, -{50,13,48}, -{50,13,49}, -{50,13,50}, -{50,13,51}, -{50,13,52}, -{50,13,53}, -{50,13,54}, -{50,13,55}, -{50,13,56}, -{50,13,57}, -{50,14,-62}, -{50,14,-61}, -{50,14,-60}, -{50,14,-59}, -{50,14,-58}, -{50,14,-57}, -{50,14,-56}, -{50,14,-55}, -{50,14,-54}, -{50,14,-53}, -{50,14,-52}, -{50,14,-51}, -{50,14,-50}, -{50,14,-49}, -{50,14,-48}, -{50,14,-47}, -{50,14,-46}, -{50,14,-45}, -{50,14,-44}, -{50,14,-43}, -{50,14,-42}, -{50,14,-41}, -{50,14,-40}, -{50,14,-39}, -{50,14,-38}, -{50,14,-37}, -{50,14,-36}, -{50,14,-35}, -{50,14,-34}, -{50,14,-33}, -{50,14,-32}, -{50,14,-31}, -{50,14,-30}, -{50,14,-29}, -{50,14,-28}, -{50,14,-27}, -{50,14,-26}, -{50,14,-25}, -{50,14,-24}, -{50,14,-23}, -{50,14,-22}, -{50,14,-21}, -{50,14,-20}, -{50,14,-19}, -{50,14,-18}, -{50,14,-17}, -{50,14,-16}, -{50,14,-15}, -{50,14,-14}, -{50,14,-13}, -{50,14,-12}, -{50,14,-11}, -{50,14,-10}, -{50,14,-9}, -{50,14,-8}, -{50,14,-7}, -{50,14,-6}, -{50,14,-5}, -{50,14,-4}, -{50,14,-3}, -{50,14,-2}, -{50,14,-1}, -{50,14,0}, -{50,14,1}, -{50,14,2}, -{50,14,3}, -{50,14,4}, -{50,14,5}, -{50,14,6}, -{50,14,7}, -{50,14,8}, -{50,14,9}, -{50,14,10}, -{50,14,11}, -{50,14,12}, -{50,14,13}, -{50,14,14}, -{50,14,15}, -{50,14,16}, -{50,14,17}, -{50,14,18}, -{50,14,19}, -{50,14,20}, -{50,14,21}, -{50,14,22}, -{50,14,23}, -{50,14,24}, -{50,14,25}, -{50,14,26}, -{50,14,27}, -{50,14,28}, -{50,14,29}, -{50,14,30}, -{50,14,31}, -{50,14,32}, -{50,14,33}, -{50,14,34}, -{50,14,35}, -{50,14,36}, -{50,14,37}, -{50,14,38}, -{50,14,39}, -{50,14,40}, -{50,14,41}, -{50,14,42}, -{50,14,43}, -{50,14,44}, -{50,14,45}, -{50,14,46}, -{50,14,47}, -{50,14,48}, -{50,14,49}, -{50,14,50}, -{50,14,51}, -{50,14,52}, -{50,14,53}, -{50,14,54}, -{50,14,55}, -{50,14,56}, -{50,14,57}, -{50,15,-63}, -{50,15,-62}, -{50,15,-61}, -{50,15,-60}, -{50,15,-59}, -{50,15,-58}, -{50,15,-57}, -{50,15,-56}, -{50,15,-55}, -{50,15,-54}, -{50,15,-53}, -{50,15,-52}, -{50,15,-51}, -{50,15,-50}, -{50,15,-49}, -{50,15,-48}, -{50,15,-47}, -{50,15,-46}, -{50,15,-45}, -{50,15,-44}, -{50,15,-43}, -{50,15,-42}, -{50,15,-41}, -{50,15,-40}, -{50,15,-39}, -{50,15,-38}, -{50,15,-37}, -{50,15,-36}, -{50,15,-35}, -{50,15,-34}, -{50,15,-33}, -{50,15,-32}, -{50,15,-31}, -{50,15,-30}, -{50,15,-29}, -{50,15,-28}, -{50,15,-27}, -{50,15,-26}, -{50,15,-25}, -{50,15,-24}, -{50,15,-23}, -{50,15,-22}, -{50,15,-21}, -{50,15,-20}, -{50,15,-19}, -{50,15,-18}, -{50,15,-17}, -{50,15,-16}, -{50,15,-15}, -{50,15,-14}, -{50,15,-13}, -{50,15,-12}, -{50,15,-11}, -{50,15,-10}, -{50,15,-9}, -{50,15,-8}, -{50,15,-7}, -{50,15,-6}, -{50,15,-5}, -{50,15,-4}, -{50,15,-3}, -{50,15,-2}, -{50,15,-1}, -{50,15,0}, -{50,15,1}, -{50,15,2}, -{50,15,3}, -{50,15,4}, -{50,15,5}, -{50,15,6}, -{50,15,7}, -{50,15,8}, -{50,15,9}, -{50,15,10}, -{50,15,11}, -{50,15,12}, -{50,15,13}, -{50,15,14}, -{50,15,15}, -{50,15,16}, -{50,15,17}, -{50,15,18}, -{50,15,19}, -{50,15,20}, -{50,15,21}, -{50,15,22}, -{50,15,23}, -{50,15,24}, -{50,15,25}, -{50,15,26}, -{50,15,27}, -{50,15,28}, -{50,15,29}, -{50,15,30}, -{50,15,31}, -{50,15,32}, -{50,15,33}, -{50,15,34}, -{50,15,35}, -{50,15,36}, -{50,15,37}, -{50,15,38}, -{50,15,39}, -{50,15,40}, -{50,15,41}, -{50,15,42}, -{50,15,43}, -{50,15,44}, -{50,15,45}, -{50,15,46}, -{50,15,47}, -{50,15,48}, -{50,15,49}, -{50,15,50}, -{50,15,51}, -{50,15,52}, -{50,15,53}, -{50,15,54}, -{50,15,55}, -{50,15,56}, -{50,15,57}, -{50,16,-64}, -{50,16,-63}, -{50,16,-62}, -{50,16,-61}, -{50,16,-60}, -{50,16,-59}, -{50,16,-58}, -{50,16,-57}, -{50,16,-56}, -{50,16,-55}, -{50,16,-54}, -{50,16,-53}, -{50,16,-52}, -{50,16,-51}, -{50,16,-50}, -{50,16,-49}, -{50,16,-48}, -{50,16,-47}, -{50,16,-46}, -{50,16,-45}, -{50,16,-44}, -{50,16,-43}, -{50,16,-42}, -{50,16,-41}, -{50,16,-40}, -{50,16,-39}, -{50,16,-38}, -{50,16,-37}, -{50,16,-36}, -{50,16,-35}, -{50,16,-34}, -{50,16,-33}, -{50,16,-32}, -{50,16,-31}, -{50,16,-30}, -{50,16,-29}, -{50,16,-28}, -{50,16,-27}, -{50,16,-26}, -{50,16,-25}, -{50,16,-24}, -{50,16,-23}, -{50,16,-22}, -{50,16,-21}, -{50,16,-20}, -{50,16,-19}, -{50,16,-18}, -{50,16,-17}, -{50,16,-16}, -{50,16,-15}, -{50,16,-14}, -{50,16,-13}, -{50,16,-12}, -{50,16,-11}, -{50,16,-10}, -{50,16,-9}, -{50,16,-8}, -{50,16,-7}, -{50,16,-6}, -{50,16,-5}, -{50,16,-4}, -{50,16,-3}, -{50,16,-2}, -{50,16,-1}, -{50,16,0}, -{50,16,1}, -{50,16,2}, -{50,16,3}, -{50,16,4}, -{50,16,5}, -{50,16,6}, -{50,16,7}, -{50,16,8}, -{50,16,9}, -{50,16,10}, -{50,16,11}, -{50,16,12}, -{50,16,13}, -{50,16,14}, -{50,16,15}, -{50,16,16}, -{50,16,17}, -{50,16,18}, -{50,16,19}, -{50,16,20}, -{50,16,21}, -{50,16,22}, -{50,16,23}, -{50,16,24}, -{50,16,25}, -{50,16,26}, -{50,16,27}, -{50,16,28}, -{50,16,29}, -{50,16,30}, -{50,16,31}, -{50,16,32}, -{50,16,33}, -{50,16,34}, -{50,16,35}, -{50,16,36}, -{50,16,37}, -{50,16,38}, -{50,16,39}, -{50,16,40}, -{50,16,41}, -{50,16,42}, -{50,16,43}, -{50,16,44}, -{50,16,45}, -{50,16,46}, -{50,16,47}, -{50,16,48}, -{50,16,49}, -{50,16,50}, -{50,16,51}, -{50,16,52}, -{50,16,53}, -{50,16,54}, -{50,16,55}, -{50,16,56}, -{50,16,57}, -{50,17,-65}, -{50,17,-64}, -{50,17,-63}, -{50,17,-62}, -{50,17,-61}, -{50,17,-60}, -{50,17,-59}, -{50,17,-58}, -{50,17,-57}, -{50,17,-56}, -{50,17,-55}, -{50,17,-54}, -{50,17,-53}, -{50,17,-52}, -{50,17,-51}, -{50,17,-50}, -{50,17,-49}, -{50,17,-48}, -{50,17,-47}, -{50,17,-46}, -{50,17,-45}, -{50,17,-44}, -{50,17,-43}, -{50,17,-42}, -{50,17,-41}, -{50,17,-40}, -{50,17,-39}, -{50,17,-38}, -{50,17,-37}, -{50,17,-36}, -{50,17,-35}, -{50,17,-34}, -{50,17,-33}, -{50,17,-32}, -{50,17,-31}, -{50,17,-30}, -{50,17,-29}, -{50,17,-28}, -{50,17,-27}, -{50,17,-26}, -{50,17,-25}, -{50,17,-24}, -{50,17,-23}, -{50,17,-22}, -{50,17,-21}, -{50,17,-20}, -{50,17,-19}, -{50,17,-18}, -{50,17,-17}, -{50,17,-16}, -{50,17,-15}, -{50,17,-14}, -{50,17,-13}, -{50,17,-12}, -{50,17,-11}, -{50,17,-10}, -{50,17,-9}, -{50,17,-8}, -{50,17,-7}, -{50,17,-6}, -{50,17,-5}, -{50,17,-4}, -{50,17,-3}, -{50,17,-2}, -{50,17,-1}, -{50,17,0}, -{50,17,1}, -{50,17,2}, -{50,17,3}, -{50,17,4}, -{50,17,5}, -{50,17,6}, -{50,17,7}, -{50,17,8}, -{50,17,9}, -{50,17,10}, -{50,17,11}, -{50,17,12}, -{50,17,13}, -{50,17,14}, -{50,17,15}, -{50,17,16}, -{50,17,17}, -{50,17,18}, -{50,17,19}, -{50,17,20}, -{50,17,21}, -{50,17,22}, -{50,17,23}, -{50,17,24}, -{50,17,25}, -{50,17,26}, -{50,17,27}, -{50,17,28}, -{50,17,29}, -{50,17,30}, -{50,17,31}, -{50,17,32}, -{50,17,33}, -{50,17,34}, -{50,17,35}, -{50,17,36}, -{50,17,37}, -{50,17,38}, -{50,17,39}, -{50,17,40}, -{50,17,41}, -{50,17,42}, -{50,17,43}, -{50,17,44}, -{50,17,45}, -{50,17,46}, -{50,17,47}, -{50,17,48}, -{50,17,49}, -{50,17,50}, -{50,17,51}, -{50,17,52}, -{50,17,53}, -{50,17,54}, -{50,17,55}, -{50,17,56}, -{50,17,57}, -{50,18,-66}, -{50,18,-65}, -{50,18,-64}, -{50,18,-63}, -{50,18,-62}, -{50,18,-61}, -{50,18,-60}, -{50,18,-59}, -{50,18,-58}, -{50,18,-57}, -{50,18,-56}, -{50,18,-55}, -{50,18,-54}, -{50,18,-53}, -{50,18,-52}, -{50,18,-51}, -{50,18,-50}, -{50,18,-49}, -{50,18,-48}, -{50,18,-47}, -{50,18,-46}, -{50,18,-45}, -{50,18,-44}, -{50,18,-43}, -{50,18,-42}, -{50,18,-41}, -{50,18,-40}, -{50,18,-39}, -{50,18,-38}, -{50,18,-37}, -{50,18,-36}, -{50,18,-35}, -{50,18,-34}, -{50,18,-33}, -{50,18,-32}, -{50,18,-31}, -{50,18,-30}, -{50,18,-29}, -{50,18,-28}, -{50,18,-27}, -{50,18,-26}, -{50,18,-25}, -{50,18,-24}, -{50,18,-23}, -{50,18,-22}, -{50,18,-21}, -{50,18,-20}, -{50,18,-19}, -{50,18,-18}, -{50,18,-17}, -{50,18,-16}, -{50,18,-15}, -{50,18,-14}, -{50,18,-13}, -{50,18,-12}, -{50,18,-11}, -{50,18,-10}, -{50,18,-9}, -{50,18,-8}, -{50,18,-7}, -{50,18,-6}, -{50,18,-5}, -{50,18,-4}, -{50,18,-3}, -{50,18,-2}, -{50,18,-1}, -{50,18,0}, -{50,18,1}, -{50,18,2}, -{50,18,3}, -{50,18,4}, -{50,18,5}, -{50,18,6}, -{50,18,7}, -{50,18,8}, -{50,18,9}, -{50,18,10}, -{50,18,11}, -{50,18,12}, -{50,18,13}, -{50,18,14}, -{50,18,15}, -{50,18,16}, -{50,18,17}, -{50,18,18}, -{50,18,19}, -{50,18,20}, -{50,18,21}, -{50,18,22}, -{50,18,23}, -{50,18,24}, -{50,18,25}, -{50,18,26}, -{50,18,27}, -{50,18,28}, -{50,18,29}, -{50,18,30}, -{50,18,31}, -{50,18,32}, -{50,18,33}, -{50,18,34}, -{50,18,35}, -{50,18,36}, -{50,18,37}, -{50,18,38}, -{50,18,39}, -{50,18,40}, -{50,18,41}, -{50,18,42}, -{50,18,43}, -{50,18,44}, -{50,18,45}, -{50,18,46}, -{50,18,47}, -{50,18,48}, -{50,18,49}, -{50,18,50}, -{50,18,51}, -{50,18,52}, -{50,18,53}, -{50,18,54}, -{50,18,55}, -{50,18,56}, -{50,18,57}, -{50,19,-67}, -{50,19,-66}, -{50,19,-65}, -{50,19,-64}, -{50,19,-63}, -{50,19,-62}, -{50,19,-61}, -{50,19,-60}, -{50,19,-59}, -{50,19,-58}, -{50,19,-57}, -{50,19,-56}, -{50,19,-55}, -{50,19,-54}, -{50,19,-53}, -{50,19,-52}, -{50,19,-51}, -{50,19,-50}, -{50,19,-49}, -{50,19,-48}, -{50,19,-47}, -{50,19,-46}, -{50,19,-45}, -{50,19,-44}, -{50,19,-43}, -{50,19,-42}, -{50,19,-41}, -{50,19,-40}, -{50,19,-39}, -{50,19,-38}, -{50,19,-37}, -{50,19,-36}, -{50,19,-35}, -{50,19,-34}, -{50,19,-33}, -{50,19,-32}, -{50,19,-31}, -{50,19,-30}, -{50,19,-29}, -{50,19,-28}, -{50,19,-27}, -{50,19,-26}, -{50,19,-25}, -{50,19,-24}, -{50,19,-23}, -{50,19,-22}, -{50,19,-21}, -{50,19,-20}, -{50,19,-19}, -{50,19,-18}, -{50,19,-17}, -{50,19,-16}, -{50,19,-15}, -{50,19,-14}, -{50,19,-13}, -{50,19,-12}, -{50,19,-11}, -{50,19,-10}, -{50,19,-9}, -{50,19,-8}, -{50,19,-7}, -{50,19,-6}, -{50,19,-5}, -{50,19,-4}, -{50,19,-3}, -{50,19,-2}, -{50,19,-1}, -{50,19,0}, -{50,19,1}, -{50,19,2}, -{50,19,3}, -{50,19,4}, -{50,19,5}, -{50,19,6}, -{50,19,7}, -{50,19,8}, -{50,19,9}, -{50,19,10}, -{50,19,11}, -{50,19,12}, -{50,19,13}, -{50,19,14}, -{50,19,15}, -{50,19,16}, -{50,19,17}, -{50,19,18}, -{50,19,19}, -{50,19,20}, -{50,19,21}, -{50,19,22}, -{50,19,23}, -{50,19,24}, -{50,19,25}, -{50,19,26}, -{50,19,27}, -{50,19,28}, -{50,19,29}, -{50,19,30}, -{50,19,31}, -{50,19,32}, -{50,19,33}, -{50,19,34}, -{50,19,35}, -{50,19,36}, -{50,19,37}, -{50,19,38}, -{50,19,39}, -{50,19,40}, -{50,19,41}, -{50,19,42}, -{50,19,43}, -{50,19,44}, -{50,19,45}, -{50,19,46}, -{50,19,47}, -{50,19,48}, -{50,19,49}, -{50,19,50}, -{50,19,51}, -{50,19,52}, -{50,19,53}, -{50,19,54}, -{50,19,55}, -{50,19,56}, -{50,19,57}, -{50,20,-68}, -{50,20,-67}, -{50,20,-66}, -{50,20,-65}, -{50,20,-64}, -{50,20,-63}, -{50,20,-62}, -{50,20,-61}, -{50,20,-60}, -{50,20,-59}, -{50,20,-58}, -{50,20,-57}, -{50,20,-56}, -{50,20,-55}, -{50,20,-54}, -{50,20,-53}, -{50,20,-52}, -{50,20,-51}, -{50,20,-50}, -{50,20,-49}, -{50,20,-48}, -{50,20,-47}, -{50,20,-46}, -{50,20,-45}, -{50,20,-44}, -{50,20,-43}, -{50,20,-42}, -{50,20,-41}, -{50,20,-40}, -{50,20,-39}, -{50,20,-38}, -{50,20,-37}, -{50,20,-36}, -{50,20,-35}, -{50,20,-34}, -{50,20,-33}, -{50,20,-32}, -{50,20,-31}, -{50,20,-30}, -{50,20,-29}, -{50,20,-28}, -{50,20,-27}, -{50,20,-26}, -{50,20,-25}, -{50,20,-24}, -{50,20,-23}, -{50,20,-22}, -{50,20,-21}, -{50,20,-20}, -{50,20,-19}, -{50,20,-18}, -{50,20,-17}, -{50,20,-16}, -{50,20,-15}, -{50,20,-14}, -{50,20,-13}, -{50,20,-12}, -{50,20,-11}, -{50,20,-10}, -{50,20,-9}, -{50,20,-8}, -{50,20,-7}, -{50,20,-6}, -{50,20,-5}, -{50,20,-4}, -{50,20,-3}, -{50,20,-2}, -{50,20,-1}, -{50,20,0}, -{50,20,1}, -{50,20,2}, -{50,20,3}, -{50,20,4}, -{50,20,5}, -{50,20,6}, -{50,20,7}, -{50,20,8}, -{50,20,9}, -{50,20,10}, -{50,20,11}, -{50,20,12}, -{50,20,13}, -{50,20,14}, -{50,20,15}, -{50,20,16}, -{50,20,17}, -{50,20,18}, -{50,20,19}, -{50,20,20}, -{50,20,21}, -{50,20,22}, -{50,20,23}, -{50,20,24}, -{50,20,25}, -{50,20,26}, -{50,20,27}, -{50,20,28}, -{50,20,29}, -{50,20,30}, -{50,20,31}, -{50,20,32}, -{50,20,33}, -{50,20,34}, -{50,20,35}, -{50,20,36}, -{50,20,37}, -{50,20,38}, -{50,20,39}, -{50,20,40}, -{50,20,41}, -{50,20,42}, -{50,20,43}, -{50,20,44}, -{50,20,45}, -{50,20,46}, -{50,20,47}, -{50,20,48}, -{50,20,49}, -{50,20,50}, -{50,20,51}, -{50,20,52}, -{50,20,53}, -{50,20,54}, -{50,20,55}, -{50,20,56}, -{50,20,57}, -{50,21,-69}, -{50,21,-68}, -{50,21,-67}, -{50,21,-66}, -{50,21,-65}, -{50,21,-64}, -{50,21,-63}, -{50,21,-62}, -{50,21,-61}, -{50,21,-60}, -{50,21,-59}, -{50,21,-58}, -{50,21,-57}, -{50,21,-56}, -{50,21,-55}, -{50,21,-54}, -{50,21,-53}, -{50,21,-52}, -{50,21,-51}, -{50,21,-50}, -{50,21,-49}, -{50,21,-48}, -{50,21,-47}, -{50,21,-46}, -{50,21,-45}, -{50,21,-44}, -{50,21,-43}, -{50,21,-42}, -{50,21,-41}, -{50,21,-40}, -{50,21,-39}, -{50,21,-38}, -{50,21,-37}, -{50,21,-36}, -{50,21,-35}, -{50,21,-34}, -{50,21,-33}, -{50,21,-32}, -{50,21,-31}, -{50,21,-30}, -{50,21,-29}, -{50,21,-28}, -{50,21,-27}, -{50,21,-26}, -{50,21,-25}, -{50,21,-24}, -{50,21,-23}, -{50,21,-22}, -{50,21,-21}, -{50,21,-20}, -{50,21,-19}, -{50,21,-18}, -{50,21,-17}, -{50,21,-16}, -{50,21,-15}, -{50,21,-14}, -{50,21,-13}, -{50,21,-12}, -{50,21,-11}, -{50,21,-10}, -{50,21,-9}, -{50,21,-8}, -{50,21,-7}, -{50,21,-6}, -{50,21,-5}, -{50,21,-4}, -{50,21,-3}, -{50,21,-2}, -{50,21,-1}, -{50,21,0}, -{50,21,1}, -{50,21,2}, -{50,21,3}, -{50,21,4}, -{50,21,5}, -{50,21,6}, -{50,21,7}, -{50,21,8}, -{50,21,9}, -{50,21,10}, -{50,21,11}, -{50,21,12}, -{50,21,13}, -{50,21,14}, -{50,21,15}, -{50,21,16}, -{50,21,17}, -{50,21,18}, -{50,21,19}, -{50,21,20}, -{50,21,21}, -{50,21,22}, -{50,21,23}, -{50,21,24}, -{50,21,25}, -{50,21,26}, -{50,21,27}, -{50,21,28}, -{50,21,29}, -{50,21,30}, -{50,21,31}, -{50,21,32}, -{50,21,33}, -{50,21,34}, -{50,21,35}, -{50,21,36}, -{50,21,37}, -{50,21,38}, -{50,21,39}, -{50,21,40}, -{50,21,41}, -{50,21,42}, -{50,21,43}, -{50,21,44}, -{50,21,45}, -{50,21,46}, -{50,21,47}, -{50,21,48}, -{50,21,49}, -{50,21,50}, -{50,21,51}, -{50,21,52}, -{50,21,53}, -{50,21,54}, -{50,21,55}, -{50,21,56}, -{50,21,57}, -{50,22,-70}, -{50,22,-69}, -{50,22,-68}, -{50,22,-67}, -{50,22,-66}, -{50,22,-65}, -{50,22,-64}, -{50,22,-63}, -{50,22,-62}, -{50,22,-61}, -{50,22,-60}, -{50,22,-59}, -{50,22,-58}, -{50,22,-57}, -{50,22,-56}, -{50,22,-55}, -{50,22,-54}, -{50,22,-53}, -{50,22,-52}, -{50,22,-51}, -{50,22,-50}, -{50,22,-49}, -{50,22,-48}, -{50,22,-47}, -{50,22,-46}, -{50,22,-45}, -{50,22,-44}, -{50,22,-43}, -{50,22,-42}, -{50,22,-41}, -{50,22,-40}, -{50,22,-39}, -{50,22,-38}, -{50,22,-37}, -{50,22,-36}, -{50,22,-35}, -{50,22,-34}, -{50,22,-33}, -{50,22,-32}, -{50,22,-31}, -{50,22,-30}, -{50,22,-29}, -{50,22,-28}, -{50,22,-27}, -{50,22,-26}, -{50,22,-25}, -{50,22,-24}, -{50,22,-23}, -{50,22,-22}, -{50,22,-21}, -{50,22,-20}, -{50,22,-19}, -{50,22,-18}, -{50,22,-17}, -{50,22,-16}, -{50,22,-15}, -{50,22,-14}, -{50,22,-13}, -{50,22,-12}, -{50,22,-11}, -{50,22,-10}, -{50,22,-9}, -{50,22,-8}, -{50,22,-7}, -{50,22,-6}, -{50,22,-5}, -{50,22,-4}, -{50,22,-3}, -{50,22,-2}, -{50,22,-1}, -{50,22,0}, -{50,22,1}, -{50,22,2}, -{50,22,3}, -{50,22,4}, -{50,22,5}, -{50,22,6}, -{50,22,7}, -{50,22,8}, -{50,22,9}, -{50,22,10}, -{50,22,11}, -{50,22,12}, -{50,22,13}, -{50,22,14}, -{50,22,15}, -{50,22,16}, -{50,22,17}, -{50,22,18}, -{50,22,19}, -{50,22,20}, -{50,22,21}, -{50,22,22}, -{50,22,23}, -{50,22,24}, -{50,22,25}, -{50,22,26}, -{50,22,27}, -{50,22,28}, -{50,22,29}, -{50,22,30}, -{50,22,31}, -{50,22,32}, -{50,22,33}, -{50,22,34}, -{50,22,35}, -{50,22,36}, -{50,22,37}, -{50,22,38}, -{50,22,39}, -{50,22,40}, -{50,22,41}, -{50,22,42}, -{50,22,43}, -{50,22,44}, -{50,22,45}, -{50,22,46}, -{50,22,47}, -{50,22,48}, -{50,22,49}, -{50,22,50}, -{50,22,51}, -{50,22,52}, -{50,22,53}, -{50,22,54}, -{50,22,55}, -{50,22,56}, -{50,22,57}, -{50,23,-71}, -{50,23,-70}, -{50,23,-69}, -{50,23,-68}, -{50,23,-67}, -{50,23,-66}, -{50,23,-65}, -{50,23,-64}, -{50,23,-63}, -{50,23,-62}, -{50,23,-61}, -{50,23,-60}, -{50,23,-59}, -{50,23,-58}, -{50,23,-57}, -{50,23,-56}, -{50,23,-55}, -{50,23,-54}, -{50,23,-53}, -{50,23,-52}, -{50,23,-51}, -{50,23,-50}, -{50,23,-49}, -{50,23,-48}, -{50,23,-47}, -{50,23,-46}, -{50,23,-45}, -{50,23,-44}, -{50,23,-43}, -{50,23,-42}, -{50,23,-41}, -{50,23,-40}, -{50,23,-39}, -{50,23,-38}, -{50,23,-37}, -{50,23,-36}, -{50,23,-35}, -{50,23,-34}, -{50,23,-33}, -{50,23,-32}, -{50,23,-31}, -{50,23,-30}, -{50,23,-29}, -{50,23,-28}, -{50,23,-27}, -{50,23,-26}, -{50,23,-25}, -{50,23,-24}, -{50,23,-23}, -{50,23,-22}, -{50,23,-21}, -{50,23,-20}, -{50,23,-19}, -{50,23,-18}, -{50,23,-17}, -{50,23,-16}, -{50,23,-15}, -{50,23,-14}, -{50,23,-13}, -{50,23,-12}, -{50,23,-11}, -{50,23,-10}, -{50,23,-9}, -{50,23,-8}, -{50,23,-7}, -{50,23,-6}, -{50,23,-5}, -{50,23,-4}, -{50,23,-3}, -{50,23,-2}, -{50,23,-1}, -{50,23,0}, -{50,23,1}, -{50,23,2}, -{50,23,3}, -{50,23,4}, -{50,23,5}, -{50,23,6}, -{50,23,7}, -{50,23,8}, -{50,23,9}, -{50,23,10}, -{50,23,11}, -{50,23,12}, -{50,23,13}, -{50,23,14}, -{50,23,15}, -{50,23,16}, -{50,23,17}, -{50,23,18}, -{50,23,19}, -{50,23,20}, -{50,23,21}, -{50,23,22}, -{50,23,23}, -{50,23,24}, -{50,23,25}, -{50,23,26}, -{50,23,27}, -{50,23,28}, -{50,23,29}, -{50,23,30}, -{50,23,31}, -{50,23,32}, -{50,23,33}, -{50,23,34}, -{50,23,35}, -{50,23,36}, -{50,23,37}, -{50,23,38}, -{50,23,39}, -{50,23,40}, -{50,23,41}, -{50,23,42}, -{50,23,43}, -{50,23,44}, -{50,23,45}, -{50,23,46}, -{50,23,47}, -{50,23,48}, -{50,23,49}, -{50,23,50}, -{50,23,51}, -{50,23,52}, -{50,23,53}, -{50,23,54}, -{50,23,55}, -{50,23,56}, -{50,23,57}, -{50,24,-72}, -{50,24,-71}, -{50,24,-70}, -{50,24,-69}, -{50,24,-68}, -{50,24,-67}, -{50,24,-66}, -{50,24,-65}, -{50,24,-64}, -{50,24,-63}, -{50,24,-62}, -{50,24,-61}, -{50,24,-60}, -{50,24,-59}, -{50,24,-58}, -{50,24,-57}, -{50,24,-56}, -{50,24,-55}, -{50,24,-54}, -{50,24,-53}, -{50,24,-52}, -{50,24,-51}, -{50,24,-50}, -{50,24,-49}, -{50,24,-48}, -{50,24,-47}, -{50,24,-46}, -{50,24,-45}, -{50,24,-44}, -{50,24,-43}, -{50,24,-42}, -{50,24,-41}, -{50,24,-40}, -{50,24,-39}, -{50,24,-38}, -{50,24,-37}, -{50,24,-36}, -{50,24,-35}, -{50,24,-34}, -{50,24,-33}, -{50,24,-32}, -{50,24,-31}, -{50,24,-30}, -{50,24,-29}, -{50,24,-28}, -{50,24,-27}, -{50,24,-26}, -{50,24,-25}, -{50,24,-24}, -{50,24,-23}, -{50,24,-22}, -{50,24,-21}, -{50,24,-20}, -{50,24,-19}, -{50,24,-18}, -{50,24,-17}, -{50,24,-16}, -{50,24,-15}, -{50,24,-14}, -{50,24,-13}, -{50,24,-12}, -{50,24,-11}, -{50,24,-10}, -{50,24,-9}, -{50,24,-8}, -{50,24,-7}, -{50,24,-6}, -{50,24,-5}, -{50,24,-4}, -{50,24,-3}, -{50,24,-2}, -{50,24,-1}, -{50,24,0}, -{50,24,1}, -{50,24,2}, -{50,24,3}, -{50,24,4}, -{50,24,5}, -{50,24,6}, -{50,24,7}, -{50,24,8}, -{50,24,9}, -{50,24,10}, -{50,24,11}, -{50,24,12}, -{50,24,13}, -{50,24,14}, -{50,24,15}, -{50,24,16}, -{50,24,17}, -{50,24,18}, -{50,24,19}, -{50,24,20}, -{50,24,21}, -{50,24,22}, -{50,24,23}, -{50,24,24}, -{50,24,25}, -{50,24,26}, -{50,24,27}, -{50,24,28}, -{50,24,29}, -{50,24,30}, -{50,24,31}, -{50,24,32}, -{50,24,33}, -{50,24,34}, -{50,24,35}, -{50,24,36}, -{50,24,37}, -{50,24,38}, -{50,24,39}, -{50,24,40}, -{50,24,41}, -{50,24,42}, -{50,24,43}, -{50,24,44}, -{50,24,45}, -{50,24,46}, -{50,24,47}, -{50,24,48}, -{50,24,49}, -{50,24,50}, -{50,24,51}, -{50,24,52}, -{50,24,53}, -{50,24,54}, -{50,24,55}, -{50,24,56}, -{50,24,57}, -{50,24,58}, -{50,25,-73}, -{50,25,-72}, -{50,25,-71}, -{50,25,-70}, -{50,25,-69}, -{50,25,-68}, -{50,25,-67}, -{50,25,-66}, -{50,25,-65}, -{50,25,-64}, -{50,25,-63}, -{50,25,-62}, -{50,25,-61}, -{50,25,-60}, -{50,25,-59}, -{50,25,-58}, -{50,25,-57}, -{50,25,-56}, -{50,25,-55}, -{50,25,-54}, -{50,25,-53}, -{50,25,-52}, -{50,25,-51}, -{50,25,-50}, -{50,25,-49}, -{50,25,-48}, -{50,25,-47}, -{50,25,-46}, -{50,25,-45}, -{50,25,-44}, -{50,25,-43}, -{50,25,-42}, -{50,25,-41}, -{50,25,-40}, -{50,25,-39}, -{50,25,-38}, -{50,25,-37}, -{50,25,-36}, -{50,25,-35}, -{50,25,-34}, -{50,25,-33}, -{50,25,-32}, -{50,25,-31}, -{50,25,-30}, -{50,25,-29}, -{50,25,-28}, -{50,25,-27}, -{50,25,-26}, -{50,25,-25}, -{50,25,-24}, -{50,25,-23}, -{50,25,-22}, -{50,25,-21}, -{50,25,-20}, -{50,25,-19}, -{50,25,-18}, -{50,25,-17}, -{50,25,-16}, -{50,25,-15}, -{50,25,-14}, -{50,25,-13}, -{50,25,-12}, -{50,25,-11}, -{50,25,-10}, -{50,25,-9}, -{50,25,-8}, -{50,25,-7}, -{50,25,-6}, -{50,25,-5}, -{50,25,-4}, -{50,25,-3}, -{50,25,-2}, -{50,25,-1}, -{50,25,0}, -{50,25,1}, -{50,25,2}, -{50,25,3}, -{50,25,4}, -{50,25,5}, -{50,25,6}, -{50,25,7}, -{50,25,8}, -{50,25,9}, -{50,25,10}, -{50,25,11}, -{50,25,12}, -{50,25,13}, -{50,25,14}, -{50,25,15}, -{50,25,16}, -{50,25,17}, -{50,25,18}, -{50,25,19}, -{50,25,20}, -{50,25,21}, -{50,25,22}, -{50,25,23}, -{50,25,24}, -{50,25,25}, -{50,25,26}, -{50,25,27}, -{50,25,28}, -{50,25,29}, -{50,25,30}, -{50,25,31}, -{50,25,32}, -{50,25,33}, -{50,25,34}, -{50,25,35}, -{50,25,36}, -{50,25,37}, -{50,25,38}, -{50,25,39}, -{50,25,40}, -{50,25,41}, -{50,25,42}, -{50,25,43}, -{50,25,44}, -{50,25,45}, -{50,25,46}, -{50,25,47}, -{50,25,48}, -{50,25,49}, -{50,25,50}, -{50,25,51}, -{50,25,52}, -{50,25,53}, -{50,25,54}, -{50,25,55}, -{50,25,56}, -{50,25,57}, -{50,25,58}, -{50,26,-74}, -{50,26,-73}, -{50,26,-72}, -{50,26,-71}, -{50,26,-70}, -{50,26,-69}, -{50,26,-68}, -{50,26,-67}, -{50,26,-66}, -{50,26,-65}, -{50,26,-64}, -{50,26,-63}, -{50,26,-62}, -{50,26,-61}, -{50,26,-60}, -{50,26,-59}, -{50,26,-58}, -{50,26,-57}, -{50,26,-56}, -{50,26,-55}, -{50,26,-54}, -{50,26,-53}, -{50,26,-52}, -{50,26,-51}, -{50,26,-50}, -{50,26,-49}, -{50,26,-48}, -{50,26,-47}, -{50,26,-46}, -{50,26,-45}, -{50,26,-44}, -{50,26,-43}, -{50,26,-42}, -{50,26,-41}, -{50,26,-40}, -{50,26,-39}, -{50,26,-38}, -{50,26,-37}, -{50,26,-36}, -{50,26,-35}, -{50,26,-34}, -{50,26,-33}, -{50,26,-32}, -{50,26,-31}, -{50,26,-30}, -{50,26,-29}, -{50,26,-28}, -{50,26,-27}, -{50,26,-26}, -{50,26,-25}, -{50,26,-24}, -{50,26,-23}, -{50,26,-22}, -{50,26,-21}, -{50,26,-20}, -{50,26,-19}, -{50,26,-18}, -{50,26,-17}, -{50,26,-16}, -{50,26,-15}, -{50,26,-14}, -{50,26,-13}, -{50,26,-12}, -{50,26,-11}, -{50,26,-10}, -{50,26,-9}, -{50,26,-8}, -{50,26,-7}, -{50,26,-6}, -{50,26,-5}, -{50,26,-4}, -{50,26,-3}, -{50,26,-2}, -{50,26,-1}, -{50,26,0}, -{50,26,1}, -{50,26,2}, -{50,26,3}, -{50,26,4}, -{50,26,5}, -{50,26,6}, -{50,26,7}, -{50,26,8}, -{50,26,9}, -{50,26,10}, -{50,26,11}, -{50,26,12}, -{50,26,13}, -{50,26,14}, -{50,26,15}, -{50,26,16}, -{50,26,17}, -{50,26,18}, -{50,26,19}, -{50,26,20}, -{50,26,21}, -{50,26,22}, -{50,26,23}, -{50,26,24}, -{50,26,25}, -{50,26,26}, -{50,26,27}, -{50,26,28}, -{50,26,29}, -{50,26,30}, -{50,26,31}, -{50,26,32}, -{50,26,33}, -{50,26,34}, -{50,26,35}, -{50,26,36}, -{50,26,37}, -{50,26,38}, -{50,26,39}, -{50,26,40}, -{50,26,41}, -{50,26,42}, -{50,26,43}, -{50,26,44}, -{50,26,45}, -{50,26,46}, -{50,26,47}, -{50,26,48}, -{50,26,49}, -{50,26,50}, -{50,26,51}, -{50,26,52}, -{50,26,53}, -{50,26,54}, -{50,26,55}, -{50,26,56}, -{50,26,57}, -{50,26,58}, -{50,27,-75}, -{50,27,-74}, -{50,27,-73}, -{50,27,-72}, -{50,27,-71}, -{50,27,-70}, -{50,27,-69}, -{50,27,-68}, -{50,27,-67}, -{50,27,-66}, -{50,27,-65}, -{50,27,-64}, -{50,27,-63}, -{50,27,-62}, -{50,27,-61}, -{50,27,-60}, -{50,27,-59}, -{50,27,-58}, -{50,27,-57}, -{50,27,-56}, -{50,27,-55}, -{50,27,-54}, -{50,27,-53}, -{50,27,-52}, -{50,27,-51}, -{50,27,-50}, -{50,27,-49}, -{50,27,-48}, -{50,27,-47}, -{50,27,-46}, -{50,27,-45}, -{50,27,-44}, -{50,27,-43}, -{50,27,-42}, -{50,27,-41}, -{50,27,-40}, -{50,27,-39}, -{50,27,-38}, -{50,27,-37}, -{50,27,-36}, -{50,27,-35}, -{50,27,-34}, -{50,27,-33}, -{50,27,-32}, -{50,27,-31}, -{50,27,-30}, -{50,27,-29}, -{50,27,-28}, -{50,27,-27}, -{50,27,-26}, -{50,27,-25}, -{50,27,-24}, -{50,27,-23}, -{50,27,-22}, -{50,27,-21}, -{50,27,-20}, -{50,27,-19}, -{50,27,-18}, -{50,27,-17}, -{50,27,-16}, -{50,27,-15}, -{50,27,-14}, -{50,27,-13}, -{50,27,-12}, -{50,27,-11}, -{50,27,-10}, -{50,27,-9}, -{50,27,-8}, -{50,27,-7}, -{50,27,-6}, -{50,27,-5}, -{50,27,-4}, -{50,27,-3}, -{50,27,-2}, -{50,27,-1}, -{50,27,0}, -{50,27,1}, -{50,27,2}, -{50,27,3}, -{50,27,4}, -{50,27,5}, -{50,27,6}, -{50,27,7}, -{50,27,8}, -{50,27,9}, -{50,27,10}, -{50,27,11}, -{50,27,12}, -{50,27,13}, -{50,27,14}, -{50,27,15}, -{50,27,16}, -{50,27,17}, -{50,27,18}, -{50,27,19}, -{50,27,20}, -{50,27,21}, -{50,27,22}, -{50,27,23}, -{50,27,24}, -{50,27,25}, -{50,27,26}, -{50,27,27}, -{50,27,28}, -{50,27,29}, -{50,27,30}, -{50,27,31}, -{50,27,32}, -{50,27,33}, -{50,27,34}, -{50,27,35}, -{50,27,36}, -{50,27,37}, -{50,27,38}, -{50,27,39}, -{50,27,40}, -{50,27,41}, -{50,27,42}, -{50,27,43}, -{50,27,44}, -{50,27,45}, -{50,27,46}, -{50,27,47}, -{50,27,48}, -{50,27,49}, -{50,27,50}, -{50,27,51}, -{50,27,52}, -{50,27,53}, -{50,27,54}, -{50,27,55}, -{50,27,56}, -{50,27,57}, -{50,27,58}, -{50,28,-76}, -{50,28,-75}, -{50,28,-74}, -{50,28,-73}, -{50,28,-72}, -{50,28,-71}, -{50,28,-70}, -{50,28,-69}, -{50,28,-68}, -{50,28,-67}, -{50,28,-66}, -{50,28,-65}, -{50,28,-64}, -{50,28,-63}, -{50,28,-62}, -{50,28,-61}, -{50,28,-60}, -{50,28,-59}, -{50,28,-58}, -{50,28,-57}, -{50,28,-56}, -{50,28,-55}, -{50,28,-54}, -{50,28,-53}, -{50,28,-52}, -{50,28,-51}, -{50,28,-50}, -{50,28,-49}, -{50,28,-48}, -{50,28,-47}, -{50,28,-46}, -{50,28,-45}, -{50,28,-44}, -{50,28,-43}, -{50,28,-42}, -{50,28,-41}, -{50,28,-40}, -{50,28,-39}, -{50,28,-38}, -{50,28,-37}, -{50,28,-36}, -{50,28,-35}, -{50,28,-34}, -{50,28,-33}, -{50,28,-32}, -{50,28,-31}, -{50,28,-30}, -{50,28,-29}, -{50,28,-28}, -{50,28,-27}, -{50,28,-26}, -{50,28,-25}, -{50,28,-24}, -{50,28,-23}, -{50,28,-22}, -{50,28,-21}, -{50,28,-20}, -{50,28,-19}, -{50,28,-18}, -{50,28,-17}, -{50,28,-16}, -{50,28,-15}, -{50,28,-14}, -{50,28,-13}, -{50,28,-12}, -{50,28,-11}, -{50,28,-10}, -{50,28,-9}, -{50,28,-8}, -{50,28,-7}, -{50,28,-6}, -{50,28,-5}, -{50,28,-4}, -{50,28,-3}, -{50,28,-2}, -{50,28,-1}, -{50,28,0}, -{50,28,1}, -{50,28,2}, -{50,28,3}, -{50,28,4}, -{50,28,5}, -{50,28,6}, -{50,28,7}, -{50,28,8}, -{50,28,9}, -{50,28,10}, -{50,28,11}, -{50,28,12}, -{50,28,13}, -{50,28,14}, -{50,28,15}, -{50,28,16}, -{50,28,17}, -{50,28,18}, -{50,28,19}, -{50,28,20}, -{50,28,21}, -{50,28,22}, -{50,28,23}, -{50,28,24}, -{50,28,25}, -{50,28,26}, -{50,28,27}, -{50,28,28}, -{50,28,29}, -{50,28,30}, -{50,28,31}, -{50,28,32}, -{50,28,33}, -{50,28,34}, -{50,28,35}, -{50,28,36}, -{50,28,37}, -{50,28,38}, -{50,28,39}, -{50,28,40}, -{50,28,41}, -{50,28,42}, -{50,28,43}, -{50,28,44}, -{50,28,45}, -{50,28,46}, -{50,28,47}, -{50,28,48}, -{50,28,49}, -{50,28,50}, -{50,28,51}, -{50,28,52}, -{50,28,53}, -{50,28,54}, -{50,28,55}, -{50,28,56}, -{50,28,57}, -{50,28,58}, -{50,29,-77}, -{50,29,-76}, -{50,29,-75}, -{50,29,-74}, -{50,29,-73}, -{50,29,-72}, -{50,29,-71}, -{50,29,-70}, -{50,29,-69}, -{50,29,-68}, -{50,29,-67}, -{50,29,-66}, -{50,29,-65}, -{50,29,-64}, -{50,29,-63}, -{50,29,-62}, -{50,29,-61}, -{50,29,-60}, -{50,29,-59}, -{50,29,-58}, -{50,29,-57}, -{50,29,-56}, -{50,29,-55}, -{50,29,-54}, -{50,29,-53}, -{50,29,-52}, -{50,29,-51}, -{50,29,-50}, -{50,29,-49}, -{50,29,-48}, -{50,29,-47}, -{50,29,-46}, -{50,29,-45}, -{50,29,-44}, -{50,29,-43}, -{50,29,-42}, -{50,29,-41}, -{50,29,-40}, -{50,29,-39}, -{50,29,-38}, -{50,29,-37}, -{50,29,-36}, -{50,29,-35}, -{50,29,-34}, -{50,29,-33}, -{50,29,-32}, -{50,29,-31}, -{50,29,-30}, -{50,29,-29}, -{50,29,-28}, -{50,29,-27}, -{50,29,-26}, -{50,29,-25}, -{50,29,-24}, -{50,29,-23}, -{50,29,-22}, -{50,29,-21}, -{50,29,-20}, -{50,29,-19}, -{50,29,-18}, -{50,29,-17}, -{50,29,-16}, -{50,29,-15}, -{50,29,-14}, -{50,29,-13}, -{50,29,-12}, -{50,29,-11}, -{50,29,-10}, -{50,29,-9}, -{50,29,-8}, -{50,29,-7}, -{50,29,-6}, -{50,29,-5}, -{50,29,-4}, -{50,29,-3}, -{50,29,-2}, -{50,29,-1}, -{50,29,0}, -{50,29,1}, -{50,29,2}, -{50,29,3}, -{50,29,4}, -{50,29,5}, -{50,29,6}, -{50,29,7}, -{50,29,8}, -{50,29,9}, -{50,29,10}, -{50,29,11}, -{50,29,12}, -{50,29,13}, -{50,29,14}, -{50,29,15}, -{50,29,16}, -{50,29,17}, -{50,29,18}, -{50,29,19}, -{50,29,20}, -{50,29,21}, -{50,29,22}, -{50,29,23}, -{50,29,24}, -{50,29,25}, -{50,29,26}, -{50,29,27}, -{50,29,28}, -{50,29,29}, -{50,29,30}, -{50,29,31}, -{50,29,32}, -{50,29,33}, -{50,29,34}, -{50,29,35}, -{50,29,36}, -{50,29,37}, -{50,29,38}, -{50,29,39}, -{50,29,40}, -{50,29,41}, -{50,29,42}, -{50,29,43}, -{50,29,44}, -{50,29,45}, -{50,29,46}, -{50,29,47}, -{50,29,48}, -{50,29,49}, -{50,29,50}, -{50,29,51}, -{50,29,52}, -{50,29,53}, -{50,29,54}, -{50,29,55}, -{50,29,56}, -{50,29,57}, -{50,29,58}, -{50,30,-78}, -{50,30,-77}, -{50,30,-76}, -{50,30,-75}, -{50,30,-74}, -{50,30,-73}, -{50,30,-72}, -{50,30,-71}, -{50,30,-70}, -{50,30,-69}, -{50,30,-68}, -{50,30,-67}, -{50,30,-66}, -{50,30,-65}, -{50,30,-64}, -{50,30,-63}, -{50,30,-62}, -{50,30,-61}, -{50,30,-60}, -{50,30,-59}, -{50,30,-58}, -{50,30,-57}, -{50,30,-56}, -{50,30,-55}, -{50,30,-54}, -{50,30,-53}, -{50,30,-52}, -{50,30,-51}, -{50,30,-50}, -{50,30,-49}, -{50,30,-48}, -{50,30,-47}, -{50,30,-46}, -{50,30,-45}, -{50,30,-44}, -{50,30,-43}, -{50,30,-42}, -{50,30,-41}, -{50,30,-40}, -{50,30,-39}, -{50,30,-38}, -{50,30,-37}, -{50,30,-36}, -{50,30,-35}, -{50,30,-34}, -{50,30,-33}, -{50,30,-32}, -{50,30,-31}, -{50,30,-30}, -{50,30,-29}, -{50,30,-28}, -{50,30,-27}, -{50,30,-26}, -{50,30,-25}, -{50,30,-24}, -{50,30,-23}, -{50,30,-22}, -{50,30,-21}, -{50,30,-20}, -{50,30,-19}, -{50,30,-18}, -{50,30,-17}, -{50,30,-16}, -{50,30,-15}, -{50,30,-14}, -{50,30,-13}, -{50,30,-12}, -{50,30,-11}, -{50,30,-10}, -{50,30,-9}, -{50,30,-8}, -{50,30,-7}, -{50,30,-6}, -{50,30,-5}, -{50,30,-4}, -{50,30,-3}, -{50,30,-2}, -{50,30,-1}, -{50,30,0}, -{50,30,1}, -{50,30,2}, -{50,30,3}, -{50,30,4}, -{50,30,5}, -{50,30,6}, -{50,30,7}, -{50,30,8}, -{50,30,9}, -{50,30,10}, -{50,30,11}, -{50,30,12}, -{50,30,13}, -{50,30,14}, -{50,30,15}, -{50,30,16}, -{50,30,17}, -{50,30,18}, -{50,30,19}, -{50,30,20}, -{50,30,21}, -{50,30,22}, -{50,30,23}, -{50,30,24}, -{50,30,25}, -{50,30,26}, -{50,30,27}, -{50,30,28}, -{50,30,29}, -{50,30,30}, -{50,30,31}, -{50,30,32}, -{50,30,33}, -{50,30,34}, -{50,30,35}, -{50,30,36}, -{50,30,37}, -{50,30,38}, -{50,30,39}, -{50,30,40}, -{50,30,41}, -{50,30,42}, -{50,30,43}, -{50,30,44}, -{50,30,45}, -{50,30,46}, -{50,30,47}, -{50,30,48}, -{50,30,49}, -{50,30,50}, -{50,30,51}, -{50,30,52}, -{50,30,53}, -{50,30,54}, -{50,30,55}, -{50,30,56}, -{50,30,57}, -{50,30,58}, -{50,31,-78}, -{50,31,-77}, -{50,31,-76}, -{50,31,-75}, -{50,31,-74}, -{50,31,-73}, -{50,31,-72}, -{50,31,-71}, -{50,31,-70}, -{50,31,-69}, -{50,31,-68}, -{50,31,-67}, -{50,31,-66}, -{50,31,-65}, -{50,31,-64}, -{50,31,-63}, -{50,31,-62}, -{50,31,-61}, -{50,31,-60}, -{50,31,-59}, -{50,31,-58}, -{50,31,-57}, -{50,31,-56}, -{50,31,-55}, -{50,31,-54}, -{50,31,-53}, -{50,31,-52}, -{50,31,-51}, -{50,31,-50}, -{50,31,-49}, -{50,31,-48}, -{50,31,-47}, -{50,31,-46}, -{50,31,-45}, -{50,31,-44}, -{50,31,-43}, -{50,31,-42}, -{50,31,-41}, -{50,31,-40}, -{50,31,-39}, -{50,31,-38}, -{50,31,-37}, -{50,31,-36}, -{50,31,-35}, -{50,31,-34}, -{50,31,-33}, -{50,31,-32}, -{50,31,-31}, -{50,31,-30}, -{50,31,-29}, -{50,31,-28}, -{50,31,-27}, -{50,31,-26}, -{50,31,-25}, -{50,31,-24}, -{50,31,-23}, -{50,31,-22}, -{50,31,-21}, -{50,31,-20}, -{50,31,-19}, -{50,31,-18}, -{50,31,-17}, -{50,31,-16}, -{50,31,-15}, -{50,31,-14}, -{50,31,-13}, -{50,31,-12}, -{50,31,-11}, -{50,31,-10}, -{50,31,-9}, -{50,31,-8}, -{50,31,-7}, -{50,31,-6}, -{50,31,-5}, -{50,31,-4}, -{50,31,-3}, -{50,31,-2}, -{50,31,-1}, -{50,31,0}, -{50,31,1}, -{50,31,2}, -{50,31,3}, -{50,31,4}, -{50,31,5}, -{50,31,6}, -{50,31,7}, -{50,31,8}, -{50,31,9}, -{50,31,10}, -{50,31,11}, -{50,31,12}, -{50,31,13}, -{50,31,14}, -{50,31,15}, -{50,31,16}, -{50,31,17}, -{50,31,18}, -{50,31,19}, -{50,31,20}, -{50,31,21}, -{50,31,22}, -{50,31,23}, -{50,31,24}, -{50,31,25}, -{50,31,26}, -{50,31,27}, -{50,31,28}, -{50,31,29}, -{50,31,30}, -{50,31,31}, -{50,31,32}, -{50,31,33}, -{50,31,34}, -{50,31,35}, -{50,31,36}, -{50,31,37}, -{50,31,38}, -{50,31,39}, -{50,31,40}, -{50,31,41}, -{50,31,42}, -{50,31,43}, -{50,31,44}, -{50,31,45}, -{50,31,46}, -{50,31,47}, -{50,31,48}, -{50,31,49}, -{50,31,50}, -{50,31,51}, -{50,31,52}, -{50,31,53}, -{50,31,54}, -{50,31,55}, -{50,31,56}, -{50,31,57}, -{50,31,58}, -{50,32,-78}, -{50,32,-77}, -{50,32,-76}, -{50,32,-75}, -{50,32,-74}, -{50,32,-73}, -{50,32,-72}, -{50,32,-71}, -{50,32,-70}, -{50,32,-69}, -{50,32,-68}, -{50,32,-67}, -{50,32,-66}, -{50,32,-65}, -{50,32,-64}, -{50,32,-63}, -{50,32,-62}, -{50,32,-61}, -{50,32,-60}, -{50,32,-59}, -{50,32,-58}, -{50,32,-57}, -{50,32,-56}, -{50,32,-55}, -{50,32,-54}, -{50,32,-53}, -{50,32,-52}, -{50,32,-51}, -{50,32,-50}, -{50,32,-49}, -{50,32,-48}, -{50,32,-47}, -{50,32,-46}, -{50,32,-45}, -{50,32,-44}, -{50,32,-43}, -{50,32,-42}, -{50,32,-41}, -{50,32,-40}, -{50,32,-39}, -{50,32,-38}, -{50,32,-37}, -{50,32,-36}, -{50,32,-35}, -{50,32,-34}, -{50,32,-33}, -{50,32,-32}, -{50,32,-31}, -{50,32,-30}, -{50,32,-29}, -{50,32,-28}, -{50,32,-27}, -{50,32,-26}, -{50,32,-25}, -{50,32,-24}, -{50,32,-23}, -{50,32,-22}, -{50,32,-21}, -{50,32,-20}, -{50,32,-19}, -{50,32,-18}, -{50,32,-17}, -{50,32,-16}, -{50,32,-15}, -{50,32,-14}, -{50,32,-13}, -{50,32,-12}, -{50,32,-11}, -{50,32,-10}, -{50,32,-9}, -{50,32,-8}, -{50,32,-7}, -{50,32,-6}, -{50,32,-5}, -{50,32,-4}, -{50,32,-3}, -{50,32,-2}, -{50,32,-1}, -{50,32,0}, -{50,32,1}, -{50,32,2}, -{50,32,3}, -{50,32,4}, -{50,32,5}, -{50,32,6}, -{50,32,7}, -{50,32,8}, -{50,32,9}, -{50,32,10}, -{50,32,11}, -{50,32,12}, -{50,32,13}, -{50,32,14}, -{50,32,15}, -{50,32,16}, -{50,32,17}, -{50,32,18}, -{50,32,19}, -{50,32,20}, -{50,32,21}, -{50,32,22}, -{50,32,23}, -{50,32,24}, -{50,32,25}, -{50,32,26}, -{50,32,27}, -{50,32,28}, -{50,32,29}, -{50,32,30}, -{50,32,31}, -{50,32,32}, -{50,32,33}, -{50,32,34}, -{50,32,35}, -{50,32,36}, -{50,32,37}, -{50,32,38}, -{50,32,39}, -{50,32,40}, -{50,32,41}, -{50,32,42}, -{50,32,43}, -{50,32,44}, -{50,32,45}, -{50,32,46}, -{50,32,47}, -{50,32,48}, -{50,32,49}, -{50,32,50}, -{50,32,51}, -{50,32,52}, -{50,32,53}, -{50,32,54}, -{50,32,55}, -{50,32,56}, -{50,32,57}, -{50,32,58}, -{50,33,-78}, -{50,33,-77}, -{50,33,-76}, -{50,33,-75}, -{50,33,-74}, -{50,33,-73}, -{50,33,-72}, -{50,33,-71}, -{50,33,-70}, -{50,33,-69}, -{50,33,-68}, -{50,33,-67}, -{50,33,-66}, -{50,33,-65}, -{50,33,-64}, -{50,33,-63}, -{50,33,-62}, -{50,33,-61}, -{50,33,-60}, -{50,33,-59}, -{50,33,-58}, -{50,33,-57}, -{50,33,-56}, -{50,33,-55}, -{50,33,-54}, -{50,33,-53}, -{50,33,-52}, -{50,33,-51}, -{50,33,-50}, -{50,33,-49}, -{50,33,-48}, -{50,33,-47}, -{50,33,-46}, -{50,33,-45}, -{50,33,-44}, -{50,33,-43}, -{50,33,-42}, -{50,33,-41}, -{50,33,-40}, -{50,33,-39}, -{50,33,-38}, -{50,33,-37}, -{50,33,-36}, -{50,33,-35}, -{50,33,-34}, -{50,33,-33}, -{50,33,-32}, -{50,33,-31}, -{50,33,-30}, -{50,33,-29}, -{50,33,-28}, -{50,33,-27}, -{50,33,-26}, -{50,33,-25}, -{50,33,-24}, -{50,33,-23}, -{50,33,-22}, -{50,33,-21}, -{50,33,-20}, -{50,33,-19}, -{50,33,-18}, -{50,33,-17}, -{50,33,-16}, -{50,33,-15}, -{50,33,-14}, -{50,33,-13}, -{50,33,-12}, -{50,33,-11}, -{50,33,-10}, -{50,33,-9}, -{50,33,-8}, -{50,33,-7}, -{50,33,-6}, -{50,33,-5}, -{50,33,-4}, -{50,33,-3}, -{50,33,-2}, -{50,33,-1}, -{50,33,0}, -{50,33,1}, -{50,33,2}, -{50,33,3}, -{50,33,4}, -{50,33,5}, -{50,33,6}, -{50,33,7}, -{50,33,8}, -{50,33,9}, -{50,33,10}, -{50,33,11}, -{50,33,12}, -{50,33,13}, -{50,33,14}, -{50,33,15}, -{50,33,16}, -{50,33,17}, -{50,33,18}, -{50,33,19}, -{50,33,20}, -{50,33,21}, -{50,33,22}, -{50,33,23}, -{50,33,24}, -{50,33,25}, -{50,33,26}, -{50,33,27}, -{50,33,28}, -{50,33,29}, -{50,33,30}, -{50,33,31}, -{50,33,32}, -{50,33,33}, -{50,33,34}, -{50,33,35}, -{50,33,36}, -{50,33,37}, -{50,33,38}, -{50,33,39}, -{50,33,40}, -{50,33,41}, -{50,33,42}, -{50,33,43}, -{50,33,44}, -{50,33,45}, -{50,33,46}, -{50,33,47}, -{50,33,48}, -{50,33,49}, -{50,33,50}, -{50,33,51}, -{50,33,52}, -{50,33,53}, -{50,33,54}, -{50,33,55}, -{50,33,56}, -{50,33,57}, -{50,33,58}, -{50,34,-78}, -{50,34,-77}, -{50,34,-76}, -{50,34,-75}, -{50,34,-74}, -{50,34,-73}, -{50,34,-72}, -{50,34,-71}, -{50,34,-70}, -{50,34,-69}, -{50,34,-68}, -{50,34,-67}, -{50,34,-66}, -{50,34,-65}, -{50,34,-64}, -{50,34,-63}, -{50,34,-62}, -{50,34,-61}, -{50,34,-60}, -{50,34,-59}, -{50,34,-58}, -{50,34,-57}, -{50,34,-56}, -{50,34,-55}, -{50,34,-54}, -{50,34,-53}, -{50,34,-52}, -{50,34,-51}, -{50,34,-50}, -{50,34,-49}, -{50,34,-48}, -{50,34,-47}, -{50,34,-46}, -{50,34,-45}, -{50,34,-44}, -{50,34,-43}, -{50,34,-42}, -{50,34,-41}, -{50,34,-40}, -{50,34,-39}, -{50,34,-38}, -{50,34,-37}, -{50,34,-36}, -{50,34,-35}, -{50,34,-34}, -{50,34,-33}, -{50,34,-32}, -{50,34,-31}, -{50,34,-30}, -{50,34,-29}, -{50,34,-28}, -{50,34,-27}, -{50,34,-26}, -{50,34,-25}, -{50,34,-24}, -{50,34,-23}, -{50,34,-22}, -{50,34,-21}, -{50,34,-20}, -{50,34,-19}, -{50,34,-18}, -{50,34,-17}, -{50,34,-16}, -{50,34,-15}, -{50,34,-14}, -{50,34,-13}, -{50,34,-12}, -{50,34,-11}, -{50,34,-10}, -{50,34,-9}, -{50,34,-8}, -{50,34,-7}, -{50,34,-6}, -{50,34,-5}, -{50,34,-4}, -{50,34,-3}, -{50,34,-2}, -{50,34,-1}, -{50,34,0}, -{50,34,1}, -{50,34,2}, -{50,34,3}, -{50,34,4}, -{50,34,5}, -{50,34,6}, -{50,34,7}, -{50,34,8}, -{50,34,9}, -{50,34,10}, -{50,34,11}, -{50,34,12}, -{50,34,13}, -{50,34,14}, -{50,34,15}, -{50,34,16}, -{50,34,17}, -{50,34,18}, -{50,34,19}, -{50,34,20}, -{50,34,21}, -{50,34,22}, -{50,34,23}, -{50,34,24}, -{50,34,25}, -{50,34,26}, -{50,34,27}, -{50,34,28}, -{50,34,29}, -{50,34,30}, -{50,34,31}, -{50,34,32}, -{50,34,33}, -{50,34,34}, -{50,34,35}, -{50,34,36}, -{50,34,37}, -{50,34,38}, -{50,34,39}, -{50,34,40}, -{50,34,41}, -{50,34,42}, -{50,34,43}, -{50,34,44}, -{50,34,45}, -{50,34,46}, -{50,34,47}, -{50,34,48}, -{50,34,49}, -{50,34,50}, -{50,34,51}, -{50,34,52}, -{50,34,53}, -{50,34,54}, -{50,34,55}, -{50,34,56}, -{50,34,57}, -{50,34,58}, -{50,34,59}, -{50,35,-78}, -{50,35,-77}, -{50,35,-76}, -{50,35,-75}, -{50,35,-74}, -{50,35,-73}, -{50,35,-72}, -{50,35,-71}, -{50,35,-70}, -{50,35,-69}, -{50,35,-68}, -{50,35,-67}, -{50,35,-66}, -{50,35,-65}, -{50,35,-64}, -{50,35,-63}, -{50,35,-62}, -{50,35,-61}, -{50,35,-60}, -{50,35,-59}, -{50,35,-58}, -{50,35,-57}, -{50,35,-56}, -{50,35,-55}, -{50,35,-54}, -{50,35,-53}, -{50,35,-52}, -{50,35,-51}, -{50,35,-50}, -{50,35,-49}, -{50,35,-48}, -{50,35,-47}, -{50,35,-46}, -{50,35,-45}, -{50,35,-44}, -{50,35,-43}, -{50,35,-42}, -{50,35,-41}, -{50,35,-40}, -{50,35,-39}, -{50,35,-38}, -{50,35,-37}, -{50,35,-36}, -{50,35,-35}, -{50,35,-34}, -{50,35,-33}, -{50,35,-32}, -{50,35,-31}, -{50,35,-30}, -{50,35,-29}, -{50,35,-28}, -{50,35,-27}, -{50,35,-26}, -{50,35,-25}, -{50,35,-24}, -{50,35,-23}, -{50,35,-22}, -{50,35,-21}, -{50,35,-20}, -{50,35,-19}, -{50,35,-18}, -{50,35,-17}, -{50,35,-16}, -{50,35,-15}, -{50,35,-14}, -{50,35,-13}, -{50,35,-12}, -{50,35,-11}, -{50,35,-10}, -{50,35,-9}, -{50,35,-8}, -{50,35,-7}, -{50,35,-6}, -{50,35,-5}, -{50,35,-4}, -{50,35,-3}, -{50,35,-2}, -{50,35,-1}, -{50,35,0}, -{50,35,1}, -{50,35,2}, -{50,35,3}, -{50,35,4}, -{50,35,5}, -{50,35,6}, -{50,35,7}, -{50,35,8}, -{50,35,9}, -{50,35,10}, -{50,35,11}, -{50,35,12}, -{50,35,13}, -{50,35,14}, -{50,35,15}, -{50,35,16}, -{50,35,17}, -{50,35,18}, -{50,35,19}, -{50,35,20}, -{50,35,21}, -{50,35,22}, -{50,35,23}, -{50,35,24}, -{50,35,25}, -{50,35,26}, -{50,35,27}, -{50,35,28}, -{50,35,29}, -{50,35,30}, -{50,35,31}, -{50,35,32}, -{50,35,33}, -{50,35,34}, -{50,35,35}, -{50,35,36}, -{50,35,37}, -{50,35,38}, -{50,35,39}, -{50,35,40}, -{50,35,41}, -{50,35,42}, -{50,35,43}, -{50,35,44}, -{50,35,45}, -{50,35,46}, -{50,35,47}, -{50,35,48}, -{50,35,49}, -{50,35,50}, -{50,35,51}, -{50,35,52}, -{50,35,53}, -{50,35,54}, -{50,35,55}, -{50,35,56}, -{50,35,57}, -{50,35,58}, -{50,35,59}, -{50,36,-78}, -{50,36,-77}, -{50,36,-76}, -{50,36,-75}, -{50,36,-74}, -{50,36,-73}, -{50,36,-72}, -{50,36,-71}, -{50,36,-70}, -{50,36,-69}, -{50,36,-68}, -{50,36,-67}, -{50,36,-66}, -{50,36,-65}, -{50,36,-64}, -{50,36,-63}, -{50,36,-62}, -{50,36,-61}, -{50,36,-60}, -{50,36,-59}, -{50,36,-58}, -{50,36,-57}, -{50,36,-56}, -{50,36,-55}, -{50,36,-54}, -{50,36,-53}, -{50,36,-52}, -{50,36,-51}, -{50,36,-50}, -{50,36,-49}, -{50,36,-48}, -{50,36,-47}, -{50,36,-46}, -{50,36,-45}, -{50,36,-44}, -{50,36,-43}, -{50,36,-42}, -{50,36,-41}, -{50,36,-40}, -{50,36,-39}, -{50,36,-38}, -{50,36,-37}, -{50,36,-36}, -{50,36,-35}, -{50,36,-34}, -{50,36,-33}, -{50,36,-32}, -{50,36,-31}, -{50,36,-30}, -{50,36,-29}, -{50,36,-28}, -{50,36,-27}, -{50,36,-26}, -{50,36,-25}, -{50,36,-24}, -{50,36,-23}, -{50,36,-22}, -{50,36,-21}, -{50,36,-20}, -{50,36,-19}, -{50,36,-18}, -{50,36,-17}, -{50,36,-16}, -{50,36,-15}, -{50,36,-14}, -{50,36,-13}, -{50,36,-12}, -{50,36,-11}, -{50,36,-10}, -{50,36,-9}, -{50,36,-8}, -{50,36,-7}, -{50,36,-6}, -{50,36,-5}, -{50,36,-4}, -{50,36,-3}, -{50,36,-2}, -{50,36,-1}, -{50,36,0}, -{50,36,1}, -{50,36,2}, -{50,36,3}, -{50,36,4}, -{50,36,5}, -{50,36,6}, -{50,36,7}, -{50,36,8}, -{50,36,9}, -{50,36,10}, -{50,36,11}, -{50,36,12}, -{50,36,13}, -{50,36,14}, -{50,36,15}, -{50,36,16}, -{50,36,17}, -{50,36,18}, -{50,36,19}, -{50,36,20}, -{50,36,21}, -{50,36,22}, -{50,36,23}, -{50,36,24}, -{50,36,25}, -{50,36,26}, -{50,36,27}, -{50,36,28}, -{50,36,29}, -{50,36,30}, -{50,36,31}, -{50,36,32}, -{50,36,33}, -{50,36,34}, -{50,36,35}, -{50,36,36}, -{50,36,37}, -{50,36,38}, -{50,36,39}, -{50,36,40}, -{50,36,41}, -{50,36,42}, -{50,36,43}, -{50,36,44}, -{50,36,45}, -{50,36,46}, -{50,36,47}, -{50,36,48}, -{50,36,49}, -{50,36,50}, -{50,36,51}, -{50,36,52}, -{50,36,53}, -{50,36,54}, -{50,36,55}, -{50,36,56}, -{50,36,57}, -{50,36,58}, -{50,36,59}, -{50,37,-78}, -{50,37,-77}, -{50,37,-76}, -{50,37,-75}, -{50,37,-74}, -{50,37,-73}, -{50,37,-72}, -{50,37,-71}, -{50,37,-70}, -{50,37,-69}, -{50,37,-68}, -{50,37,-67}, -{50,37,-66}, -{50,37,-65}, -{50,37,-64}, -{50,37,-63}, -{50,37,-62}, -{50,37,-61}, -{50,37,-60}, -{50,37,-59}, -{50,37,-58}, -{50,37,-57}, -{50,37,-56}, -{50,37,-55}, -{50,37,-54}, -{50,37,-53}, -{50,37,-52}, -{50,37,-51}, -{50,37,-50}, -{50,37,-49}, -{50,37,-48}, -{50,37,-47}, -{50,37,-46}, -{50,37,-45}, -{50,37,-44}, -{50,37,-43}, -{50,37,-42}, -{50,37,-41}, -{50,37,-40}, -{50,37,-39}, -{50,37,-38}, -{50,37,-37}, -{50,37,-36}, -{50,37,-35}, -{50,37,-34}, -{50,37,-33}, -{50,37,-32}, -{50,37,-31}, -{50,37,-30}, -{50,37,-29}, -{50,37,-28}, -{50,37,-27}, -{50,37,-26}, -{50,37,-25}, -{50,37,-24}, -{50,37,-23}, -{50,37,-22}, -{50,37,-21}, -{50,37,-20}, -{50,37,-19}, -{50,37,-18}, -{50,37,-17}, -{50,37,-16}, -{50,37,-15}, -{50,37,-14}, -{50,37,-13}, -{50,37,-12}, -{50,37,-11}, -{50,37,-10}, -{50,37,-9}, -{50,37,-8}, -{50,37,-7}, -{50,37,-6}, -{50,37,-5}, -{50,37,-4}, -{50,37,-3}, -{50,37,-2}, -{50,37,-1}, -{50,37,0}, -{50,37,1}, -{50,37,2}, -{50,37,3}, -{50,37,4}, -{50,37,5}, -{50,37,6}, -{50,37,7}, -{50,37,8}, -{50,37,9}, -{50,37,10}, -{50,37,11}, -{50,37,12}, -{50,37,13}, -{50,37,14}, -{50,37,15}, -{50,37,16}, -{50,37,17}, -{50,37,18}, -{50,37,19}, -{50,37,20}, -{50,37,21}, -{50,37,22}, -{50,37,23}, -{50,37,24}, -{50,37,25}, -{50,37,26}, -{50,37,27}, -{50,37,28}, -{50,37,29}, -{50,37,30}, -{50,37,31}, -{50,37,32}, -{50,37,33}, -{50,37,34}, -{50,37,35}, -{50,37,36}, -{50,37,37}, -{50,37,38}, -{50,37,39}, -{50,37,40}, -{50,37,41}, -{50,37,42}, -{50,37,43}, -{50,37,44}, -{50,37,45}, -{50,37,46}, -{50,37,47}, -{50,37,48}, -{50,37,49}, -{50,37,50}, -{50,37,51}, -{50,37,52}, -{50,37,53}, -{50,37,54}, -{50,37,55}, -{50,37,56}, -{50,37,57}, -{50,37,58}, -{50,37,59}, -{50,38,-78}, -{50,38,-77}, -{50,38,-76}, -{50,38,-75}, -{50,38,-74}, -{50,38,-73}, -{50,38,-72}, -{50,38,-71}, -{50,38,-70}, -{50,38,-69}, -{50,38,-68}, -{50,38,-67}, -{50,38,-66}, -{50,38,-65}, -{50,38,-64}, -{50,38,-63}, -{50,38,-62}, -{50,38,-61}, -{50,38,-60}, -{50,38,-59}, -{50,38,-58}, -{50,38,-57}, -{50,38,-56}, -{50,38,-55}, -{50,38,-54}, -{50,38,-53}, -{50,38,-52}, -{50,38,-51}, -{50,38,-50}, -{50,38,-49}, -{50,38,-48}, -{50,38,-47}, -{50,38,-46}, -{50,38,-45}, -{50,38,-44}, -{50,38,-43}, -{50,38,-42}, -{50,38,-41}, -{50,38,-40}, -{50,38,-39}, -{50,38,-38}, -{50,38,-37}, -{50,38,-36}, -{50,38,-35}, -{50,38,-34}, -{50,38,-33}, -{50,38,-32}, -{50,38,-31}, -{50,38,-30}, -{50,38,-29}, -{50,38,-28}, -{50,38,-27}, -{50,38,-26}, -{50,38,-25}, -{50,38,-24}, -{50,38,-23}, -{50,38,-22}, -{50,38,-21}, -{50,38,-20}, -{50,38,-19}, -{50,38,-18}, -{50,38,-17}, -{50,38,-16}, -{50,38,-15}, -{50,38,-14}, -{50,38,-13}, -{50,38,-12}, -{50,38,-11}, -{50,38,-10}, -{50,38,-9}, -{50,38,-8}, -{50,38,-7}, -{50,38,-6}, -{50,38,-5}, -{50,38,-4}, -{50,38,-3}, -{50,38,-2}, -{50,38,-1}, -{50,38,0}, -{50,38,1}, -{50,38,2}, -{50,38,3}, -{50,38,4}, -{50,38,5}, -{50,38,6}, -{50,38,7}, -{50,38,8}, -{50,38,9}, -{50,38,10}, -{50,38,11}, -{50,38,12}, -{50,38,13}, -{50,38,14}, -{50,38,15}, -{50,38,16}, -{50,38,17}, -{50,38,18}, -{50,38,19}, -{50,38,20}, -{50,38,21}, -{50,38,22}, -{50,38,23}, -{50,38,24}, -{50,38,25}, -{50,38,26}, -{50,38,27}, -{50,38,28}, -{50,38,29}, -{50,38,30}, -{50,38,31}, -{50,38,32}, -{50,38,33}, -{50,38,34}, -{50,38,35}, -{50,38,36}, -{50,38,37}, -{50,38,38}, -{50,38,39}, -{50,38,40}, -{50,38,41}, -{50,38,42}, -{50,38,43}, -{50,38,44}, -{50,38,45}, -{50,38,46}, -{50,38,47}, -{50,38,48}, -{50,38,49}, -{50,38,50}, -{50,38,51}, -{50,38,52}, -{50,38,53}, -{50,38,54}, -{50,38,55}, -{50,38,56}, -{50,38,57}, -{50,38,58}, -{50,38,59}, -{50,39,-78}, -{50,39,-77}, -{50,39,-76}, -{50,39,-75}, -{50,39,-74}, -{50,39,-73}, -{50,39,-72}, -{50,39,-71}, -{50,39,-70}, -{50,39,-69}, -{50,39,-68}, -{50,39,-67}, -{50,39,-66}, -{50,39,-65}, -{50,39,-64}, -{50,39,-63}, -{50,39,-62}, -{50,39,-61}, -{50,39,-60}, -{50,39,-59}, -{50,39,-58}, -{50,39,-57}, -{50,39,-56}, -{50,39,-55}, -{50,39,-54}, -{50,39,-53}, -{50,39,-52}, -{50,39,-51}, -{50,39,-50}, -{50,39,-49}, -{50,39,-48}, -{50,39,-47}, -{50,39,-46}, -{50,39,-45}, -{50,39,-44}, -{50,39,-43}, -{50,39,-42}, -{50,39,-41}, -{50,39,-40}, -{50,39,-39}, -{50,39,-38}, -{50,39,-37}, -{50,39,-36}, -{50,39,-35}, -{50,39,-34}, -{50,39,-33}, -{50,39,-32}, -{50,39,-31}, -{50,39,-30}, -{50,39,-29}, -{50,39,-28}, -{50,39,-27}, -{50,39,-26}, -{50,39,-25}, -{50,39,-24}, -{50,39,-23}, -{50,39,-22}, -{50,39,-21}, -{50,39,-20}, -{50,39,-19}, -{50,39,-18}, -{50,39,-17}, -{50,39,-16}, -{50,39,-15}, -{50,39,-14}, -{50,39,-13}, -{50,39,-12}, -{50,39,-11}, -{50,39,-10}, -{50,39,-9}, -{50,39,-8}, -{50,39,-7}, -{50,39,-6}, -{50,39,-5}, -{50,39,-4}, -{50,39,-3}, -{50,39,-2}, -{50,39,-1}, -{50,39,0}, -{50,39,1}, -{50,39,2}, -{50,39,3}, -{50,39,4}, -{50,39,5}, -{50,39,6}, -{50,39,7}, -{50,39,8}, -{50,39,9}, -{50,39,10}, -{50,39,11}, -{50,39,12}, -{50,39,13}, -{50,39,14}, -{50,39,15}, -{50,39,16}, -{50,39,17}, -{50,39,18}, -{50,39,19}, -{50,39,20}, -{50,39,21}, -{50,39,22}, -{50,39,23}, -{50,39,24}, -{50,39,25}, -{50,39,26}, -{50,39,27}, -{50,39,28}, -{50,39,29}, -{50,39,30}, -{50,39,31}, -{50,39,32}, -{50,39,33}, -{50,39,34}, -{50,39,35}, -{50,39,36}, -{50,39,37}, -{50,39,38}, -{50,39,39}, -{50,39,40}, -{50,39,41}, -{50,39,42}, -{50,39,43}, -{50,39,44}, -{50,39,45}, -{50,39,46}, -{50,39,47}, -{50,39,48}, -{50,39,49}, -{50,39,50}, -{50,39,51}, -{50,39,52}, -{50,39,53}, -{50,39,54}, -{50,39,55}, -{50,39,56}, -{50,39,57}, -{50,39,58}, -{50,39,59}, -{50,40,-78}, -{50,40,-77}, -{50,40,-76}, -{50,40,-75}, -{50,40,-74}, -{50,40,-73}, -{50,40,-72}, -{50,40,-71}, -{50,40,-70}, -{50,40,-69}, -{50,40,-68}, -{50,40,-67}, -{50,40,-66}, -{50,40,-65}, -{50,40,-64}, -{50,40,-63}, -{50,40,-62}, -{50,40,-61}, -{50,40,-60}, -{50,40,-59}, -{50,40,-58}, -{50,40,-57}, -{50,40,-56}, -{50,40,-55}, -{50,40,-54}, -{50,40,-53}, -{50,40,-52}, -{50,40,-51}, -{50,40,-50}, -{50,40,-49}, -{50,40,-48}, -{50,40,-47}, -{50,40,-46}, -{50,40,-45}, -{50,40,-44}, -{50,40,-43}, -{50,40,-42}, -{50,40,-41}, -{50,40,-40}, -{50,40,-39}, -{50,40,-38}, -{50,40,-37}, -{50,40,-36}, -{50,40,-35}, -{50,40,-34}, -{50,40,-33}, -{50,40,-32}, -{50,40,-31}, -{50,40,-30}, -{50,40,-29}, -{50,40,-28}, -{50,40,-27}, -{50,40,-26}, -{50,40,-25}, -{50,40,-24}, -{50,40,-23}, -{50,40,-22}, -{50,40,-21}, -{50,40,-20}, -{50,40,-19}, -{50,40,-18}, -{50,40,-17}, -{50,40,-16}, -{50,40,-15}, -{50,40,-14}, -{50,40,-13}, -{50,40,-12}, -{50,40,-11}, -{50,40,-10}, -{50,40,-9}, -{50,40,-8}, -{50,40,-7}, -{50,40,-6}, -{50,40,-5}, -{50,40,-4}, -{50,40,-3}, -{50,40,-2}, -{50,40,-1}, -{50,40,0}, -{50,40,1}, -{50,40,2}, -{50,40,3}, -{50,40,4}, -{50,40,5}, -{50,40,6}, -{50,40,7}, -{50,40,8}, -{50,40,9}, -{50,40,10}, -{50,40,11}, -{50,40,12}, -{50,40,13}, -{50,40,14}, -{50,40,15}, -{50,40,16}, -{50,40,17}, -{50,40,18}, -{50,40,19}, -{50,40,20}, -{50,40,21}, -{50,40,22}, -{50,40,23}, -{50,40,24}, -{50,40,25}, -{50,40,26}, -{50,40,27}, -{50,40,28}, -{50,40,29}, -{50,40,30}, -{50,40,31}, -{50,40,32}, -{50,40,33}, -{50,40,34}, -{50,40,35}, -{50,40,36}, -{50,40,37}, -{50,40,38}, -{50,40,39}, -{50,40,40}, -{50,40,41}, -{50,40,42}, -{50,40,43}, -{50,40,44}, -{50,40,45}, -{50,40,46}, -{50,40,47}, -{50,40,48}, -{50,40,49}, -{50,40,50}, -{50,40,51}, -{50,40,52}, -{50,40,53}, -{50,40,54}, -{50,40,55}, -{50,40,56}, -{50,40,57}, -{50,40,58}, -{50,40,59}, -{50,41,-78}, -{50,41,-77}, -{50,41,-76}, -{50,41,-75}, -{50,41,-74}, -{50,41,-73}, -{50,41,-72}, -{50,41,-71}, -{50,41,-70}, -{50,41,-69}, -{50,41,-68}, -{50,41,-67}, -{50,41,-66}, -{50,41,-65}, -{50,41,-64}, -{50,41,-63}, -{50,41,-62}, -{50,41,-61}, -{50,41,-60}, -{50,41,-59}, -{50,41,-58}, -{50,41,-57}, -{50,41,-56}, -{50,41,-55}, -{50,41,-54}, -{50,41,-53}, -{50,41,-52}, -{50,41,-51}, -{50,41,-50}, -{50,41,-49}, -{50,41,-48}, -{50,41,-47}, -{50,41,-46}, -{50,41,-45}, -{50,41,-44}, -{50,41,-43}, -{50,41,-42}, -{50,41,-41}, -{50,41,-40}, -{50,41,-39}, -{50,41,-38}, -{50,41,-37}, -{50,41,-36}, -{50,41,-35}, -{50,41,-34}, -{50,41,-33}, -{50,41,-32}, -{50,41,-31}, -{50,41,-30}, -{50,41,-29}, -{50,41,-28}, -{50,41,-27}, -{50,41,-26}, -{50,41,-25}, -{50,41,-24}, -{50,41,-23}, -{50,41,-22}, -{50,41,-21}, -{50,41,-20}, -{50,41,-19}, -{50,41,-18}, -{50,41,-17}, -{50,41,-16}, -{50,41,-15}, -{50,41,-14}, -{50,41,-13}, -{50,41,-12}, -{50,41,-11}, -{50,41,-10}, -{50,41,-9}, -{50,41,-8}, -{50,41,-7}, -{50,41,-6}, -{50,41,-5}, -{50,41,-4}, -{50,41,-3}, -{50,41,-2}, -{50,41,-1}, -{50,41,0}, -{50,41,1}, -{50,41,2}, -{50,41,3}, -{50,41,4}, -{50,41,5}, -{50,41,6}, -{50,41,7}, -{50,41,8}, -{50,41,9}, -{50,41,10}, -{50,41,11}, -{50,41,12}, -{50,41,13}, -{50,41,14}, -{50,41,15}, -{50,41,16}, -{50,41,17}, -{50,41,18}, -{50,41,19}, -{50,41,20}, -{50,41,21}, -{50,41,22}, -{50,41,23}, -{50,41,24}, -{50,41,25}, -{50,41,26}, -{50,41,27}, -{50,41,28}, -{50,41,29}, -{50,41,30}, -{50,41,31}, -{50,41,32}, -{50,41,33}, -{50,41,34}, -{50,41,35}, -{50,41,36}, -{50,41,37}, -{50,41,38}, -{50,41,39}, -{50,41,40}, -{50,41,41}, -{50,41,42}, -{50,41,43}, -{50,41,44}, -{50,41,45}, -{50,41,46}, -{50,41,47}, -{50,41,48}, -{50,41,49}, -{50,41,50}, -{50,41,51}, -{50,41,52}, -{50,41,53}, -{50,41,54}, -{50,41,55}, -{50,41,56}, -{50,41,57}, -{50,41,58}, -{50,41,59}, -{50,42,-78}, -{50,42,-77}, -{50,42,-76}, -{50,42,-75}, -{50,42,-74}, -{50,42,-73}, -{50,42,-72}, -{50,42,-71}, -{50,42,-70}, -{50,42,-69}, -{50,42,-68}, -{50,42,-67}, -{50,42,-66}, -{50,42,-65}, -{50,42,-64}, -{50,42,-63}, -{50,42,-62}, -{50,42,-61}, -{50,42,-60}, -{50,42,-59}, -{50,42,-58}, -{50,42,-57}, -{50,42,-56}, -{50,42,-55}, -{50,42,-54}, -{50,42,-53}, -{50,42,-52}, -{50,42,-51}, -{50,42,-50}, -{50,42,-49}, -{50,42,-48}, -{50,42,-47}, -{50,42,-46}, -{50,42,-45}, -{50,42,-44}, -{50,42,-43}, -{50,42,-42}, -{50,42,-41}, -{50,42,-40}, -{50,42,-39}, -{50,42,-38}, -{50,42,-37}, -{50,42,-36}, -{50,42,-35}, -{50,42,-34}, -{50,42,-33}, -{50,42,-32}, -{50,42,-31}, -{50,42,-30}, -{50,42,-29}, -{50,42,-28}, -{50,42,-27}, -{50,42,-26}, -{50,42,-25}, -{50,42,-24}, -{50,42,-23}, -{50,42,-22}, -{50,42,-21}, -{50,42,-20}, -{50,42,-19}, -{50,42,-18}, -{50,42,-17}, -{50,42,-16}, -{50,42,-15}, -{50,42,-14}, -{50,42,-13}, -{50,42,-12}, -{50,42,-11}, -{50,42,-10}, -{50,42,-9}, -{50,42,-8}, -{50,42,-7}, -{50,42,-6}, -{50,42,-5}, -{50,42,-4}, -{50,42,-3}, -{50,42,-2}, -{50,42,-1}, -{50,42,0}, -{50,42,1}, -{50,42,2}, -{50,42,3}, -{50,42,4}, -{50,42,5}, -{50,42,6}, -{50,42,7}, -{50,42,8}, -{50,42,9}, -{50,42,10}, -{50,42,11}, -{50,42,12}, -{50,42,13}, -{50,42,14}, -{50,42,15}, -{50,42,16}, -{50,42,17}, -{50,42,18}, -{50,42,19}, -{50,42,20}, -{50,42,21}, -{50,42,22}, -{50,42,23}, -{50,42,24}, -{50,42,25}, -{50,42,26}, -{50,42,27}, -{50,42,28}, -{50,42,29}, -{50,42,30}, -{50,42,31}, -{50,42,32}, -{50,42,33}, -{50,42,34}, -{50,42,35}, -{50,42,36}, -{50,42,37}, -{50,42,38}, -{50,42,39}, -{50,42,40}, -{50,42,41}, -{50,42,42}, -{50,42,43}, -{50,42,44}, -{50,42,45}, -{50,42,46}, -{50,42,47}, -{50,42,48}, -{50,42,49}, -{50,42,50}, -{50,42,51}, -{50,42,52}, -{50,42,53}, -{50,42,54}, -{50,42,55}, -{50,42,56}, -{50,42,57}, -{50,42,58}, -{50,42,59}, -{50,43,-78}, -{50,43,-77}, -{50,43,-76}, -{50,43,-75}, -{50,43,-74}, -{50,43,-73}, -{50,43,-72}, -{50,43,-71}, -{50,43,-70}, -{50,43,-69}, -{50,43,-68}, -{50,43,-67}, -{50,43,-66}, -{50,43,-65}, -{50,43,-64}, -{50,43,-63}, -{50,43,-62}, -{50,43,-61}, -{50,43,-60}, -{50,43,-59}, -{50,43,-58}, -{50,43,-57}, -{50,43,-56}, -{50,43,-55}, -{50,43,-54}, -{50,43,-53}, -{50,43,-52}, -{50,43,-51}, -{50,43,-50}, -{50,43,-49}, -{50,43,-48}, -{50,43,-47}, -{50,43,-46}, -{50,43,-45}, -{50,43,-44}, -{50,43,-43}, -{50,43,-42}, -{50,43,-41}, -{50,43,-40}, -{50,43,-39}, -{50,43,-38}, -{50,43,-37}, -{50,43,-36}, -{50,43,-35}, -{50,43,-34}, -{50,43,-33}, -{50,43,-32}, -{50,43,-31}, -{50,43,-30}, -{50,43,-29}, -{50,43,-28}, -{50,43,-27}, -{50,43,-26}, -{50,43,-25}, -{50,43,-24}, -{50,43,-23}, -{50,43,-22}, -{50,43,-21}, -{50,43,-20}, -{50,43,-19}, -{50,43,-18}, -{50,43,-17}, -{50,43,-16}, -{50,43,-15}, -{50,43,-14}, -{50,43,-13}, -{50,43,-12}, -{50,43,-11}, -{50,43,-10}, -{50,43,-9}, -{50,43,-8}, -{50,43,-7}, -{50,43,-6}, -{50,43,-5}, -{50,43,-4}, -{50,43,-3}, -{50,43,-2}, -{50,43,-1}, -{50,43,0}, -{50,43,1}, -{50,43,2}, -{50,43,3}, -{50,43,4}, -{50,43,5}, -{50,43,6}, -{50,43,7}, -{50,43,8}, -{50,43,9}, -{50,43,10}, -{50,43,11}, -{50,43,12}, -{50,43,13}, -{50,43,14}, -{50,43,15}, -{50,43,16}, -{50,43,17}, -{50,43,18}, -{50,43,19}, -{50,43,20}, -{50,43,21}, -{50,43,22}, -{50,43,23}, -{50,43,24}, -{50,43,25}, -{50,43,26}, -{50,43,27}, -{50,43,28}, -{50,43,29}, -{50,43,30}, -{50,43,31}, -{50,43,32}, -{50,43,33}, -{50,43,34}, -{50,43,35}, -{50,43,36}, -{50,43,37}, -{50,43,38}, -{50,43,39}, -{50,43,40}, -{50,43,41}, -{50,43,42}, -{50,43,43}, -{50,43,44}, -{50,43,45}, -{50,43,46}, -{50,43,47}, -{50,43,48}, -{50,43,49}, -{50,43,50}, -{50,43,51}, -{50,43,52}, -{50,43,53}, -{50,43,54}, -{50,43,55}, -{50,43,56}, -{50,43,57}, -{50,43,58}, -{50,43,59}, -{50,44,-78}, -{50,44,-77}, -{50,44,-76}, -{50,44,-75}, -{50,44,-74}, -{50,44,-73}, -{50,44,-72}, -{50,44,-71}, -{50,44,-70}, -{50,44,-69}, -{50,44,-68}, -{50,44,-67}, -{50,44,-66}, -{50,44,-65}, -{50,44,-64}, -{50,44,-63}, -{50,44,-62}, -{50,44,-61}, -{50,44,-60}, -{50,44,-59}, -{50,44,-58}, -{50,44,-57}, -{50,44,-56}, -{50,44,-55}, -{50,44,-54}, -{50,44,-53}, -{50,44,-52}, -{50,44,-51}, -{50,44,-50}, -{50,44,-49}, -{50,44,-48}, -{50,44,-47}, -{50,44,-46}, -{50,44,-45}, -{50,44,-44}, -{50,44,-43}, -{50,44,-42}, -{50,44,-41}, -{50,44,-40}, -{50,44,-39}, -{50,44,-38}, -{50,44,-37}, -{50,44,-36}, -{50,44,-35}, -{50,44,-34}, -{50,44,-33}, -{50,44,-32}, -{50,44,-31}, -{50,44,-30}, -{50,44,-29}, -{50,44,-28}, -{50,44,-27}, -{50,44,-26}, -{50,44,-25}, -{50,44,-24}, -{50,44,-23}, -{50,44,-22}, -{50,44,-21}, -{50,44,-20}, -{50,44,-19}, -{50,44,-18}, -{50,44,-17}, -{50,44,-16}, -{50,44,-15}, -{50,44,-14}, -{50,44,-13}, -{50,44,-12}, -{50,44,-11}, -{50,44,-10}, -{50,44,-9}, -{50,44,-8}, -{50,44,-7}, -{50,44,-6}, -{50,44,-5}, -{50,44,-4}, -{50,44,-3}, -{50,44,-2}, -{50,44,-1}, -{50,44,0}, -{50,44,1}, -{50,44,2}, -{50,44,3}, -{50,44,4}, -{50,44,5}, -{50,44,6}, -{50,44,7}, -{50,44,8}, -{50,44,9}, -{50,44,10}, -{50,44,11}, -{50,44,12}, -{50,44,13}, -{50,44,14}, -{50,44,15}, -{50,44,16}, -{50,44,17}, -{50,44,18}, -{50,44,19}, -{50,44,20}, -{50,44,21}, -{50,44,22}, -{50,44,23}, -{50,44,24}, -{50,44,25}, -{50,44,26}, -{50,44,27}, -{50,44,28}, -{50,44,29}, -{50,44,30}, -{50,44,31}, -{50,44,32}, -{50,44,33}, -{50,44,34}, -{50,44,35}, -{50,44,36}, -{50,44,37}, -{50,44,38}, -{50,44,39}, -{50,44,40}, -{50,44,41}, -{50,44,42}, -{50,44,43}, -{50,44,44}, -{50,44,45}, -{50,44,46}, -{50,44,47}, -{50,44,48}, -{50,44,49}, -{50,44,50}, -{50,44,51}, -{50,44,52}, -{50,44,53}, -{50,44,54}, -{50,44,55}, -{50,44,56}, -{50,44,57}, -{50,44,58}, -{50,44,59}, -{50,44,60}, -{50,45,-78}, -{50,45,-77}, -{50,45,-76}, -{50,45,-75}, -{50,45,-74}, -{50,45,-73}, -{50,45,-72}, -{50,45,-71}, -{50,45,-70}, -{50,45,-69}, -{50,45,-68}, -{50,45,-67}, -{50,45,-66}, -{50,45,-65}, -{50,45,-64}, -{50,45,-63}, -{50,45,-62}, -{50,45,-61}, -{50,45,-60}, -{50,45,-59}, -{50,45,-58}, -{50,45,-57}, -{50,45,-56}, -{50,45,-55}, -{50,45,-54}, -{50,45,-53}, -{50,45,-52}, -{50,45,-51}, -{50,45,-50}, -{50,45,-49}, -{50,45,-48}, -{50,45,-47}, -{50,45,-46}, -{50,45,-45}, -{50,45,-44}, -{50,45,-43}, -{50,45,-42}, -{50,45,-41}, -{50,45,-40}, -{50,45,-39}, -{50,45,-38}, -{50,45,-37}, -{50,45,-36}, -{50,45,-35}, -{50,45,-34}, -{50,45,-33}, -{50,45,-32}, -{50,45,-31}, -{50,45,-30}, -{50,45,-29}, -{50,45,-28}, -{50,45,-27}, -{50,45,-26}, -{50,45,-25}, -{50,45,-24}, -{50,45,-23}, -{50,45,-22}, -{50,45,-21}, -{50,45,-20}, -{50,45,-19}, -{50,45,-18}, -{50,45,-17}, -{50,45,-16}, -{50,45,-15}, -{50,45,-14}, -{50,45,-13}, -{50,45,-12}, -{50,45,-11}, -{50,45,-10}, -{50,45,-9}, -{50,45,-8}, -{50,45,-7}, -{50,45,-6}, -{50,45,-5}, -{50,45,-4}, -{50,45,-3}, -{50,45,-2}, -{50,45,-1}, -{50,45,0}, -{50,45,1}, -{50,45,2}, -{50,45,3}, -{50,45,4}, -{50,45,5}, -{50,45,6}, -{50,45,7}, -{50,45,8}, -{50,45,9}, -{50,45,10}, -{50,45,11}, -{50,45,12}, -{50,45,13}, -{50,45,14}, -{50,45,15}, -{50,45,16}, -{50,45,17}, -{50,45,18}, -{50,45,19}, -{50,45,20}, -{50,45,21}, -{50,45,22}, -{50,45,23}, -{50,45,24}, -{50,45,25}, -{50,45,26}, -{50,45,27}, -{50,45,28}, -{50,45,29}, -{50,45,30}, -{50,45,31}, -{50,45,32}, -{50,45,33}, -{50,45,34}, -{50,45,35}, -{50,45,36}, -{50,45,37}, -{50,45,38}, -{50,45,39}, -{50,45,40}, -{50,45,41}, -{50,45,42}, -{50,45,43}, -{50,45,44}, -{50,45,45}, -{50,45,46}, -{50,45,47}, -{50,45,48}, -{50,45,49}, -{50,45,50}, -{50,45,51}, -{50,45,52}, -{50,45,53}, -{50,45,54}, -{50,45,55}, -{50,45,56}, -{50,45,57}, -{50,45,58}, -{50,45,59}, -{50,45,60}, -{50,46,-78}, -{50,46,-77}, -{50,46,-76}, -{50,46,-75}, -{50,46,-74}, -{50,46,-73}, -{50,46,-72}, -{50,46,-71}, -{50,46,-70}, -{50,46,-69}, -{50,46,-68}, -{50,46,-67}, -{50,46,-66}, -{50,46,-65}, -{50,46,-64}, -{50,46,-63}, -{50,46,-62}, -{50,46,-61}, -{50,46,-60}, -{50,46,-59}, -{50,46,-58}, -{50,46,-57}, -{50,46,-56}, -{50,46,-55}, -{50,46,-54}, -{50,46,-53}, -{50,46,-52}, -{50,46,-51}, -{50,46,-50}, -{50,46,-49}, -{50,46,-48}, -{50,46,-47}, -{50,46,-46}, -{50,46,-45}, -{50,46,-44}, -{50,46,-43}, -{50,46,-42}, -{50,46,-41}, -{50,46,-40}, -{50,46,-39}, -{50,46,-38}, -{50,46,-37}, -{50,46,-36}, -{50,46,-35}, -{50,46,-34}, -{50,46,-33}, -{50,46,-32}, -{50,46,-31}, -{50,46,-30}, -{50,46,-29}, -{50,46,-28}, -{50,46,-27}, -{50,46,-26}, -{50,46,-25}, -{50,46,-24}, -{50,46,-23}, -{50,46,-22}, -{50,46,-21}, -{50,46,-20}, -{50,46,-19}, -{50,46,-18}, -{50,46,-17}, -{50,46,-16}, -{50,46,-15}, -{50,46,-14}, -{50,46,-13}, -{50,46,-12}, -{50,46,-11}, -{50,46,-10}, -{50,46,-9}, -{50,46,-8}, -{50,46,-7}, -{50,46,-6}, -{50,46,-5}, -{50,46,-4}, -{50,46,-3}, -{50,46,-2}, -{50,46,-1}, -{50,46,0}, -{50,46,1}, -{50,46,2}, -{50,46,3}, -{50,46,4}, -{50,46,5}, -{50,46,6}, -{50,46,7}, -{50,46,8}, -{50,46,9}, -{50,46,10}, -{50,46,11}, -{50,46,12}, -{50,46,13}, -{50,46,14}, -{50,46,15}, -{50,46,16}, -{50,46,17}, -{50,46,18}, -{50,46,19}, -{50,46,20}, -{50,46,21}, -{50,46,22}, -{50,46,23}, -{50,46,24}, -{50,46,25}, -{50,46,26}, -{50,46,27}, -{50,46,28}, -{50,46,29}, -{50,46,30}, -{50,46,31}, -{50,46,32}, -{50,46,33}, -{50,46,34}, -{50,46,35}, -{50,46,36}, -{50,46,37}, -{50,46,38}, -{50,46,39}, -{50,46,40}, -{50,46,41}, -{50,46,42}, -{50,46,43}, -{50,46,44}, -{50,46,45}, -{50,46,46}, -{50,46,47}, -{50,46,48}, -{50,46,49}, -{50,46,50}, -{50,46,51}, -{50,46,52}, -{50,46,53}, -{50,46,54}, -{50,46,55}, -{50,46,56}, -{50,46,57}, -{50,46,58}, -{50,46,59}, -{50,46,60}, -{50,47,-78}, -{50,47,-77}, -{50,47,-76}, -{50,47,-75}, -{50,47,-74}, -{50,47,-73}, -{50,47,-72}, -{50,47,-71}, -{50,47,-70}, -{50,47,-69}, -{50,47,-68}, -{50,47,-67}, -{50,47,-66}, -{50,47,-65}, -{50,47,-64}, -{50,47,-63}, -{50,47,-62}, -{50,47,-61}, -{50,47,-60}, -{50,47,-59}, -{50,47,-58}, -{50,47,-57}, -{50,47,-56}, -{50,47,-55}, -{50,47,-54}, -{50,47,-53}, -{50,47,-52}, -{50,47,-51}, -{50,47,-50}, -{50,47,-49}, -{50,47,-48}, -{50,47,-47}, -{50,47,-46}, -{50,47,-45}, -{50,47,-44}, -{50,47,-43}, -{50,47,-42}, -{50,47,-41}, -{50,47,-40}, -{50,47,-39}, -{50,47,-38}, -{50,47,-37}, -{50,47,-36}, -{50,47,-35}, -{50,47,-34}, -{50,47,-33}, -{50,47,-32}, -{50,47,-31}, -{50,47,-30}, -{50,47,-29}, -{50,47,-28}, -{50,47,-27}, -{50,47,-26}, -{50,47,-25}, -{50,47,-24}, -{50,47,-23}, -{50,47,-22}, -{50,47,-21}, -{50,47,-20}, -{50,47,-19}, -{50,47,-18}, -{50,47,-17}, -{50,47,-16}, -{50,47,-15}, -{50,47,-14}, -{50,47,-13}, -{50,47,-12}, -{50,47,-11}, -{50,47,-10}, -{50,47,-9}, -{50,47,-8}, -{50,47,-7}, -{50,47,-6}, -{50,47,-5}, -{50,47,-4}, -{50,47,-3}, -{50,47,-2}, -{50,47,-1}, -{50,47,0}, -{50,47,1}, -{50,47,2}, -{50,47,3}, -{50,47,4}, -{50,47,5}, -{50,47,6}, -{50,47,7}, -{50,47,8}, -{50,47,9}, -{50,47,10}, -{50,47,11}, -{50,47,12}, -{50,47,13}, -{50,47,14}, -{50,47,15}, -{50,47,16}, -{50,47,17}, -{50,47,18}, -{50,47,19}, -{50,47,20}, -{50,47,21}, -{50,47,22}, -{50,47,23}, -{50,47,24}, -{50,47,25}, -{50,47,26}, -{50,47,27}, -{50,47,28}, -{50,47,29}, -{50,47,30}, -{50,47,31}, -{50,47,32}, -{50,47,33}, -{50,47,34}, -{50,47,35}, -{50,47,36}, -{50,47,37}, -{50,47,38}, -{50,47,39}, -{50,47,40}, -{50,47,41}, -{50,47,42}, -{50,47,43}, -{50,47,44}, -{50,47,45}, -{50,47,46}, -{50,47,47}, -{50,47,48}, -{50,47,49}, -{50,47,50}, -{50,47,51}, -{50,47,52}, -{50,47,53}, -{50,47,54}, -{50,47,55}, -{50,47,56}, -{50,47,57}, -{50,47,58}, -{50,47,59}, -{50,47,60}, -{50,48,-78}, -{50,48,-77}, -{50,48,-76}, -{50,48,-75}, -{50,48,-74}, -{50,48,-73}, -{50,48,-72}, -{50,48,-71}, -{50,48,-70}, -{50,48,-69}, -{50,48,-68}, -{50,48,-67}, -{50,48,-66}, -{50,48,-65}, -{50,48,-64}, -{50,48,-63}, -{50,48,-62}, -{50,48,-61}, -{50,48,-60}, -{50,48,-59}, -{50,48,-58}, -{50,48,-57}, -{50,48,-56}, -{50,48,-55}, -{50,48,-54}, -{50,48,-53}, -{50,48,-52}, -{50,48,-51}, -{50,48,-50}, -{50,48,-49}, -{50,48,-48}, -{50,48,-47}, -{50,48,-46}, -{50,48,-45}, -{50,48,-44}, -{50,48,-43}, -{50,48,-42}, -{50,48,-41}, -{50,48,-40}, -{50,48,-39}, -{50,48,-38}, -{50,48,-37}, -{50,48,-36}, -{50,48,-35}, -{50,48,-34}, -{50,48,-33}, -{50,48,-32}, -{50,48,-31}, -{50,48,-30}, -{50,48,-29}, -{50,48,-28}, -{50,48,-27}, -{50,48,-26}, -{50,48,-25}, -{50,48,-24}, -{50,48,-23}, -{50,48,-22}, -{50,48,-21}, -{50,48,-20}, -{50,48,-19}, -{50,48,-18}, -{50,48,-17}, -{50,48,-16}, -{50,48,-15}, -{50,48,-14}, -{50,48,-13}, -{50,48,-12}, -{50,48,-11}, -{50,48,-10}, -{50,48,-9}, -{50,48,-8}, -{50,48,-7}, -{50,48,-6}, -{50,48,-5}, -{50,48,-4}, -{50,48,-3}, -{50,48,-2}, -{50,48,-1}, -{50,48,0}, -{50,48,1}, -{50,48,2}, -{50,48,3}, -{50,48,4}, -{50,48,5}, -{50,48,6}, -{50,48,7}, -{50,48,8}, -{50,48,9}, -{50,48,10}, -{50,48,11}, -{50,48,12}, -{50,48,13}, -{50,48,14}, -{50,48,15}, -{50,48,16}, -{50,48,17}, -{50,48,18}, -{50,48,19}, -{50,48,20}, -{50,48,21}, -{50,48,22}, -{50,48,23}, -{50,48,24}, -{50,48,25}, -{50,48,26}, -{50,48,27}, -{50,48,28}, -{50,48,29}, -{50,48,30}, -{50,48,31}, -{50,48,32}, -{50,48,33}, -{50,48,34}, -{50,48,35}, -{50,48,36}, -{50,48,37}, -{50,48,38}, -{50,48,39}, -{50,48,40}, -{50,48,41}, -{50,48,42}, -{50,48,43}, -{50,48,44}, -{50,48,45}, -{50,48,46}, -{50,48,47}, -{50,48,48}, -{50,48,49}, -{50,48,50}, -{50,48,51}, -{50,48,52}, -{50,48,53}, -{50,48,54}, -{50,48,55}, -{50,48,56}, -{50,48,57}, -{50,48,58}, -{50,48,59}, -{50,48,60}, -{50,49,-78}, -{50,49,-77}, -{50,49,-76}, -{50,49,-75}, -{50,49,-74}, -{50,49,-73}, -{50,49,-72}, -{50,49,-71}, -{50,49,-70}, -{50,49,-69}, -{50,49,-68}, -{50,49,-67}, -{50,49,-66}, -{50,49,-65}, -{50,49,-64}, -{50,49,-63}, -{50,49,-62}, -{50,49,-61}, -{50,49,-60}, -{50,49,-59}, -{50,49,-58}, -{50,49,-57}, -{50,49,-56}, -{50,49,-55}, -{50,49,-54}, -{50,49,-53}, -{50,49,-52}, -{50,49,-51}, -{50,49,-50}, -{50,49,-49}, -{50,49,-48}, -{50,49,-47}, -{50,49,-46}, -{50,49,-45}, -{50,49,-44}, -{50,49,-43}, -{50,49,-42}, -{50,49,-41}, -{50,49,-40}, -{50,49,-39}, -{50,49,-38}, -{50,49,-37}, -{50,49,-36}, -{50,49,-35}, -{50,49,-34}, -{50,49,-33}, -{50,49,-32}, -{50,49,-31}, -{50,49,-30}, -{50,49,-29}, -{50,49,-28}, -{50,49,-27}, -{50,49,-26}, -{50,49,-25}, -{50,49,-24}, -{50,49,-23}, -{50,49,-22}, -{50,49,-21}, -{50,49,-20}, -{50,49,-19}, -{50,49,-18}, -{50,49,-17}, -{50,49,-16}, -{50,49,-15}, -{50,49,-14}, -{50,49,-13}, -{50,49,-12}, -{50,49,-11}, -{50,49,-10}, -{50,49,-9}, -{50,49,-8}, -{50,49,-7}, -{50,49,-6}, -{50,49,-5}, -{50,49,-4}, -{50,49,-3}, -{50,49,-2}, -{50,49,-1}, -{50,49,0}, -{50,49,1}, -{50,49,2}, -{50,49,3}, -{50,49,4}, -{50,49,5}, -{50,49,6}, -{50,49,7}, -{50,49,8}, -{50,49,9}, -{50,49,10}, -{50,49,11}, -{50,49,12}, -{50,49,13}, -{50,49,14}, -{50,49,15}, -{50,49,16}, -{50,49,17}, -{50,49,18}, -{50,49,19}, -{50,49,20}, -{50,49,21}, -{50,49,22}, -{50,49,23}, -{50,49,24}, -{50,49,25}, -{50,49,26}, -{50,49,27}, -{50,49,28}, -{50,49,29}, -{50,49,30}, -{50,49,31}, -{50,49,32}, -{50,49,33}, -{50,49,34}, -{50,49,35}, -{50,49,36}, -{50,49,37}, -{50,49,38}, -{50,49,39}, -{50,49,40}, -{50,49,41}, -{50,49,42}, -{50,49,43}, -{50,49,44}, -{50,49,45}, -{50,49,46}, -{50,49,47}, -{50,49,48}, -{50,49,49}, -{50,49,50}, -{50,49,51}, -{50,49,52}, -{50,49,53}, -{50,49,54}, -{50,49,55}, -{50,49,56}, -{50,49,57}, -{50,49,58}, -{50,49,59}, -{50,49,60}, -{50,50,-78}, -{50,50,-77}, -{50,50,-76}, -{50,50,-75}, -{50,50,-74}, -{50,50,-73}, -{50,50,-72}, -{50,50,-71}, -{50,50,-70}, -{50,50,-69}, -{50,50,-68}, -{50,50,-67}, -{50,50,-66}, -{50,50,-65}, -{50,50,-64}, -{50,50,-63}, -{50,50,-62}, -{50,50,-61}, -{50,50,-60}, -{50,50,-59}, -{50,50,-58}, -{50,50,-57}, -{50,50,-56}, -{50,50,-55}, -{50,50,-54}, -{50,50,-53}, -{50,50,-52}, -{50,50,-51}, -{50,50,-50}, -{50,50,-49}, -{50,50,-48}, -{50,50,-47}, -{50,50,-46}, -{50,50,-45}, -{50,50,-44}, -{50,50,-43}, -{50,50,-42}, -{50,50,-41}, -{50,50,-40}, -{50,50,-39}, -{50,50,-38}, -{50,50,-37}, -{50,50,-36}, -{50,50,-35}, -{50,50,-34}, -{50,50,-33}, -{50,50,-32}, -{50,50,-31}, -{50,50,-30}, -{50,50,-29}, -{50,50,-28}, -{50,50,-27}, -{50,50,-26}, -{50,50,-25}, -{50,50,-24}, -{50,50,-23}, -{50,50,-22}, -{50,50,-21}, -{50,50,-20}, -{50,50,-19}, -{50,50,-18}, -{50,50,-17}, -{50,50,-16}, -{50,50,-15}, -{50,50,-14}, -{50,50,-13}, -{50,50,-12}, -{50,50,-11}, -{50,50,-10}, -{50,50,-9}, -{50,50,-8}, -{50,50,-7}, -{50,50,-6}, -{50,50,-5}, -{50,50,-4}, -{50,50,-3}, -{50,50,-2}, -{50,50,-1}, -{50,50,0}, -{50,50,1}, -{50,50,2}, -{50,50,3}, -{50,50,4}, -{50,50,5}, -{50,50,6}, -{50,50,7}, -{50,50,8}, -{50,50,9}, -{50,50,10}, -{50,50,11}, -{50,50,12}, -{50,50,13}, -{50,50,14}, -{50,50,15}, -{50,50,16}, -{50,50,17}, -{50,50,18}, -{50,50,19}, -{50,50,20}, -{50,50,21}, -{50,50,22}, -{50,50,23}, -{50,50,24}, -{50,50,25}, -{50,50,26}, -{50,50,27}, -{50,50,28}, -{50,50,29}, -{50,50,30}, -{50,50,31}, -{50,50,32}, -{50,50,33}, -{50,50,34}, -{50,50,35}, -{50,50,36}, -{50,50,37}, -{50,50,38}, -{50,50,39}, -{50,50,40}, -{50,50,41}, -{50,50,42}, -{50,50,43}, -{50,50,44}, -{50,50,45}, -{50,50,46}, -{50,50,47}, -{50,50,48}, -{50,50,49}, -{50,50,50}, -{50,50,51}, -{50,50,52}, -{50,50,53}, -{50,50,54}, -{50,50,55}, -{50,50,56}, -{50,50,57}, -{50,50,58}, -{50,50,59}, -{50,50,60}, -{50,51,-78}, -{50,51,-77}, -{50,51,-76}, -{50,51,-75}, -{50,51,-74}, -{50,51,-73}, -{50,51,-72}, -{50,51,-71}, -{50,51,-70}, -{50,51,-69}, -{50,51,-68}, -{50,51,-67}, -{50,51,-66}, -{50,51,-65}, -{50,51,-64}, -{50,51,-63}, -{50,51,-62}, -{50,51,-61}, -{50,51,-60}, -{50,51,-59}, -{50,51,-58}, -{50,51,-57}, -{50,51,-56}, -{50,51,-55}, -{50,51,-54}, -{50,51,-53}, -{50,51,-52}, -{50,51,-51}, -{50,51,-50}, -{50,51,-49}, -{50,51,-48}, -{50,51,-47}, -{50,51,-46}, -{50,51,-45}, -{50,51,-44}, -{50,51,-43}, -{50,51,-42}, -{50,51,-41}, -{50,51,-40}, -{50,51,-39}, -{50,51,-38}, -{50,51,-37}, -{50,51,-36}, -{50,51,-35}, -{50,51,-34}, -{50,51,-33}, -{50,51,-32}, -{50,51,-31}, -{50,51,-30}, -{50,51,-29}, -{50,51,-28}, -{50,51,-27}, -{50,51,-26}, -{50,51,-25}, -{50,51,-24}, -{50,51,-23}, -{50,51,-22}, -{50,51,-21}, -{50,51,-20}, -{50,51,-19}, -{50,51,-18}, -{50,51,-17}, -{50,51,-16}, -{50,51,-15}, -{50,51,-14}, -{50,51,-13}, -{50,51,-12}, -{50,51,-11}, -{50,51,-10}, -{50,51,-9}, -{50,51,-8}, -{50,51,-7}, -{50,51,-6}, -{50,51,-5}, -{50,51,-4}, -{50,51,-3}, -{50,51,-2}, -{50,51,-1}, -{50,51,0}, -{50,51,1}, -{50,51,2}, -{50,51,3}, -{50,51,4}, -{50,51,5}, -{50,51,6}, -{50,51,7}, -{50,51,8}, -{50,51,9}, -{50,51,10}, -{50,51,11}, -{50,51,12}, -{50,51,13}, -{50,51,14}, -{50,51,15}, -{50,51,16}, -{50,51,17}, -{50,51,18}, -{50,51,19}, -{50,51,20}, -{50,51,21}, -{50,51,22}, -{50,51,23}, -{50,51,24}, -{50,51,25}, -{50,51,26}, -{50,51,27}, -{50,51,28}, -{50,51,29}, -{50,51,30}, -{50,51,31}, -{50,51,32}, -{50,51,33}, -{50,51,34}, -{50,51,35}, -{50,51,36}, -{50,51,37}, -{50,51,38}, -{50,51,39}, -{50,51,40}, -{50,51,41}, -{50,51,42}, -{50,51,43}, -{50,51,44}, -{50,51,45}, -{50,51,46}, -{50,51,47}, -{50,51,48}, -{50,51,49}, -{50,51,50}, -{50,51,51}, -{50,51,52}, -{50,51,53}, -{50,51,54}, -{50,51,55}, -{50,51,56}, -{50,51,57}, -{50,51,58}, -{50,51,59}, -{50,51,60}, -{50,52,-78}, -{50,52,-77}, -{50,52,-76}, -{50,52,-75}, -{50,52,-74}, -{50,52,-73}, -{50,52,-72}, -{50,52,-71}, -{50,52,-70}, -{50,52,-69}, -{50,52,-68}, -{50,52,-67}, -{50,52,-66}, -{50,52,-65}, -{50,52,-64}, -{50,52,-63}, -{50,52,-62}, -{50,52,-61}, -{50,52,-60}, -{50,52,-59}, -{50,52,-58}, -{50,52,-57}, -{50,52,-56}, -{50,52,-55}, -{50,52,-54}, -{50,52,-53}, -{50,52,-52}, -{50,52,-51}, -{50,52,-50}, -{50,52,-49}, -{50,52,-48}, -{50,52,-47}, -{50,52,-46}, -{50,52,-45}, -{50,52,-44}, -{50,52,-43}, -{50,52,-42}, -{50,52,-41}, -{50,52,-40}, -{50,52,-39}, -{50,52,-38}, -{50,52,-37}, -{50,52,-36}, -{50,52,-35}, -{50,52,-34}, -{50,52,-33}, -{50,52,-32}, -{50,52,-31}, -{50,52,-30}, -{50,52,-29}, -{50,52,-28}, -{50,52,-27}, -{50,52,-26}, -{50,52,-25}, -{50,52,-24}, -{50,52,-23}, -{50,52,-22}, -{50,52,-21}, -{50,52,-20}, -{50,52,-19}, -{50,52,-18}, -{50,52,-17}, -{50,52,-16}, -{50,52,-15}, -{50,52,-14}, -{50,52,-13}, -{50,52,-12}, -{50,52,-11}, -{50,52,-10}, -{50,52,-9}, -{50,52,-8}, -{50,52,-7}, -{50,52,-6}, -{50,52,-5}, -{50,52,-4}, -{50,52,-3}, -{50,52,-2}, -{50,52,-1}, -{50,52,0}, -{50,52,1}, -{50,52,2}, -{50,52,3}, -{50,52,4}, -{50,52,5}, -{50,52,6}, -{50,52,7}, -{50,52,8}, -{50,52,9}, -{50,52,10}, -{50,52,11}, -{50,52,12}, -{50,52,13}, -{50,52,14}, -{50,52,15}, -{50,52,16}, -{50,52,17}, -{50,52,18}, -{50,52,19}, -{50,52,20}, -{50,52,21}, -{50,52,22}, -{50,52,23}, -{50,52,24}, -{50,52,25}, -{50,52,26}, -{50,52,27}, -{50,52,28}, -{50,52,29}, -{50,52,30}, -{50,52,31}, -{50,52,32}, -{50,52,33}, -{50,52,34}, -{50,52,35}, -{50,52,36}, -{50,52,37}, -{50,52,38}, -{50,52,39}, -{50,52,40}, -{50,52,41}, -{50,52,42}, -{50,52,43}, -{50,52,44}, -{50,52,45}, -{50,52,46}, -{50,52,47}, -{50,52,48}, -{50,52,49}, -{50,52,50}, -{50,52,51}, -{50,52,52}, -{50,52,53}, -{50,52,54}, -{50,52,55}, -{50,52,56}, -{50,52,57}, -{50,52,58}, -{50,52,59}, -{50,52,60}, -{50,53,-78}, -{50,53,-77}, -{50,53,-76}, -{50,53,-75}, -{50,53,-74}, -{50,53,-73}, -{50,53,-72}, -{50,53,-71}, -{50,53,-70}, -{50,53,-69}, -{50,53,-68}, -{50,53,-67}, -{50,53,-66}, -{50,53,-65}, -{50,53,-64}, -{50,53,-63}, -{50,53,-62}, -{50,53,-61}, -{50,53,-60}, -{50,53,-59}, -{50,53,-58}, -{50,53,-57}, -{50,53,-56}, -{50,53,-55}, -{50,53,-54}, -{50,53,-53}, -{50,53,-52}, -{50,53,-51}, -{50,53,-50}, -{50,53,-49}, -{50,53,-48}, -{50,53,-47}, -{50,53,-46}, -{50,53,-45}, -{50,53,-44}, -{50,53,-43}, -{50,53,-42}, -{50,53,-41}, -{50,53,-40}, -{50,53,-39}, -{50,53,-38}, -{50,53,-37}, -{50,53,-36}, -{50,53,-35}, -{50,53,-34}, -{50,53,-33}, -{50,53,-32}, -{50,53,-31}, -{50,53,-30}, -{50,53,-29}, -{50,53,-28}, -{50,53,-27}, -{50,53,-26}, -{50,53,-25}, -{50,53,-24}, -{50,53,-23}, -{50,53,-22}, -{50,53,-21}, -{50,53,-20}, -{50,53,-19}, -{50,53,-18}, -{50,53,-17}, -{50,53,-16}, -{50,53,-15}, -{50,53,-14}, -{50,53,-13}, -{50,53,-12}, -{50,53,-11}, -{50,53,-10}, -{50,53,-9}, -{50,53,-8}, -{50,53,-7}, -{50,53,-6}, -{50,53,-5}, -{50,53,-4}, -{50,53,-3}, -{50,53,-2}, -{50,53,-1}, -{50,53,0}, -{50,53,1}, -{50,53,2}, -{50,53,3}, -{50,53,4}, -{50,53,5}, -{50,53,6}, -{50,53,7}, -{50,53,8}, -{50,53,9}, -{50,53,10}, -{50,53,11}, -{50,53,12}, -{50,53,13}, -{50,53,14}, -{50,53,15}, -{50,53,16}, -{50,53,17}, -{50,53,18}, -{50,53,19}, -{50,53,20}, -{50,53,21}, -{50,53,22}, -{50,53,23}, -{50,53,24}, -{50,53,25}, -{50,53,26}, -{50,53,27}, -{50,53,28}, -{50,53,29}, -{50,53,30}, -{50,53,31}, -{50,53,32}, -{50,53,33}, -{50,53,34}, -{50,53,35}, -{50,53,36}, -{50,53,37}, -{50,53,38}, -{50,53,39}, -{50,53,40}, -{50,53,41}, -{50,53,42}, -{50,53,43}, -{50,53,44}, -{50,53,45}, -{50,53,46}, -{50,53,47}, -{50,53,48}, -{50,53,49}, -{50,53,50}, -{50,53,51}, -{50,53,52}, -{50,53,53}, -{50,53,54}, -{50,53,55}, -{50,53,56}, -{50,53,57}, -{50,53,58}, -{50,53,59}, -{50,53,60}, -{50,53,61}, -{50,54,-78}, -{50,54,-77}, -{50,54,-76}, -{50,54,-75}, -{50,54,-74}, -{50,54,-73}, -{50,54,-72}, -{50,54,-71}, -{50,54,-70}, -{50,54,-69}, -{50,54,-68}, -{50,54,-67}, -{50,54,-66}, -{50,54,-65}, -{50,54,-64}, -{50,54,-63}, -{50,54,-62}, -{50,54,-61}, -{50,54,-60}, -{50,54,-59}, -{50,54,-58}, -{50,54,-57}, -{50,54,-56}, -{50,54,-55}, -{50,54,-54}, -{50,54,-53}, -{50,54,-52}, -{50,54,-51}, -{50,54,-50}, -{50,54,-49}, -{50,54,-48}, -{50,54,-47}, -{50,54,-46}, -{50,54,-45}, -{50,54,-44}, -{50,54,-43}, -{50,54,-42}, -{50,54,-41}, -{50,54,-40}, -{50,54,-39}, -{50,54,-38}, -{50,54,-37}, -{50,54,-36}, -{50,54,-35}, -{50,54,-34}, -{50,54,-33}, -{50,54,-32}, -{50,54,-31}, -{50,54,-30}, -{50,54,-29}, -{50,54,-28}, -{50,54,-27}, -{50,54,-26}, -{50,54,-25}, -{50,54,-24}, -{50,54,-23}, -{50,54,-22}, -{50,54,-21}, -{50,54,-20}, -{50,54,-19}, -{50,54,-18}, -{50,54,-17}, -{50,54,-16}, -{50,54,-15}, -{50,54,-14}, -{50,54,-13}, -{50,54,-12}, -{50,54,-11}, -{50,54,-10}, -{50,54,-9}, -{50,54,-8}, -{50,54,-7}, -{50,54,-6}, -{50,54,-5}, -{50,54,-4}, -{50,54,-3}, -{50,54,-2}, -{50,54,-1}, -{50,54,0}, -{50,54,1}, -{50,54,2}, -{50,54,3}, -{50,54,4}, -{50,54,5}, -{50,54,6}, -{50,54,7}, -{50,54,8}, -{50,54,9}, -{50,54,10}, -{50,54,11}, -{50,54,12}, -{50,54,13}, -{50,54,14}, -{50,54,15}, -{50,54,16}, -{50,54,17}, -{50,54,18}, -{50,54,19}, -{50,54,20}, -{50,54,21}, -{50,54,22}, -{50,54,23}, -{50,54,24}, -{50,54,25}, -{50,54,26}, -{50,54,27}, -{50,54,28}, -{50,54,29}, -{50,54,30}, -{50,54,31}, -{50,54,32}, -{50,54,33}, -{50,54,34}, -{50,54,35}, -{50,54,36}, -{50,54,37}, -{50,54,38}, -{50,54,39}, -{50,54,40}, -{50,54,41}, -{50,54,42}, -{50,54,43}, -{50,54,44}, -{50,54,45}, -{50,54,46}, -{50,54,47}, -{50,54,48}, -{50,54,49}, -{50,54,50}, -{50,54,51}, -{50,54,52}, -{50,54,53}, -{50,54,54}, -{50,54,55}, -{50,54,56}, -{50,54,57}, -{50,54,58}, -{50,54,59}, -{50,54,60}, -{50,54,61}, -{50,55,-78}, -{50,55,-77}, -{50,55,-76}, -{50,55,-75}, -{50,55,-74}, -{50,55,-73}, -{50,55,-72}, -{50,55,-71}, -{50,55,-70}, -{50,55,-69}, -{50,55,-68}, -{50,55,-67}, -{50,55,-66}, -{50,55,-65}, -{50,55,-64}, -{50,55,-63}, -{50,55,-62}, -{50,55,-61}, -{50,55,-60}, -{50,55,-59}, -{50,55,-58}, -{50,55,-57}, -{50,55,-56}, -{50,55,-55}, -{50,55,-54}, -{50,55,-53}, -{50,55,-52}, -{50,55,-51}, -{50,55,-50}, -{50,55,-49}, -{50,55,-48}, -{50,55,-47}, -{50,55,-46}, -{50,55,-45}, -{50,55,-44}, -{50,55,-43}, -{50,55,-42}, -{50,55,-41}, -{50,55,-40}, -{50,55,-39}, -{50,55,-38}, -{50,55,-37}, -{50,55,-36}, -{50,55,-35}, -{50,55,-34}, -{50,55,-33}, -{50,55,-32}, -{50,55,-31}, -{50,55,-30}, -{50,55,-29}, -{50,55,-28}, -{50,55,-27}, -{50,55,-26}, -{50,55,-25}, -{50,55,-24}, -{50,55,-23}, -{50,55,-22}, -{50,55,-21}, -{50,55,-20}, -{50,55,-19}, -{50,55,-18}, -{50,55,-17}, -{50,55,-16}, -{50,55,-15}, -{50,55,-14}, -{50,55,-13}, -{50,55,-12}, -{50,55,-11}, -{50,55,-10}, -{50,55,-9}, -{50,55,-8}, -{50,55,-7}, -{50,55,-6}, -{50,55,-5}, -{50,55,-4}, -{50,55,-3}, -{50,55,-2}, -{50,55,-1}, -{50,55,0}, -{50,55,1}, -{50,55,2}, -{50,55,3}, -{50,55,4}, -{50,55,5}, -{50,55,6}, -{50,55,7}, -{50,55,8}, -{50,55,9}, -{50,55,10}, -{50,55,11}, -{50,55,12}, -{50,55,13}, -{50,55,14}, -{50,55,15}, -{50,55,16}, -{50,55,17}, -{50,55,18}, -{50,55,19}, -{50,55,20}, -{50,55,21}, -{50,55,22}, -{50,55,23}, -{50,55,24}, -{50,55,25}, -{50,55,26}, -{50,55,27}, -{50,55,28}, -{50,55,29}, -{50,55,30}, -{50,55,31}, -{50,55,32}, -{50,55,33}, -{50,55,34}, -{50,55,35}, -{50,55,36}, -{50,55,37}, -{50,55,38}, -{50,55,39}, -{50,55,40}, -{50,55,41}, -{50,55,42}, -{50,55,43}, -{50,55,44}, -{50,55,45}, -{50,55,46}, -{50,55,47}, -{50,55,48}, -{50,55,49}, -{50,55,50}, -{50,55,51}, -{50,55,52}, -{50,55,53}, -{50,55,54}, -{50,55,55}, -{50,55,56}, -{50,55,57}, -{50,55,58}, -{50,55,59}, -{50,55,60}, -{50,55,61}, -{50,56,-78}, -{50,56,-77}, -{50,56,-76}, -{50,56,-75}, -{50,56,-74}, -{50,56,-73}, -{50,56,-72}, -{50,56,-71}, -{50,56,-70}, -{50,56,-69}, -{50,56,-68}, -{50,56,-67}, -{50,56,-66}, -{50,56,-65}, -{50,56,-64}, -{50,56,-63}, -{50,56,-62}, -{50,56,-61}, -{50,56,-60}, -{50,56,-59}, -{50,56,-58}, -{50,56,-57}, -{50,56,-56}, -{50,56,-55}, -{50,56,-54}, -{50,56,-53}, -{50,56,-52}, -{50,56,-51}, -{50,56,-50}, -{50,56,-49}, -{50,56,-48}, -{50,56,-47}, -{50,56,-46}, -{50,56,-45}, -{50,56,-44}, -{50,56,-43}, -{50,56,-42}, -{50,56,-41}, -{50,56,-40}, -{50,56,-39}, -{50,56,-38}, -{50,56,-37}, -{50,56,-36}, -{50,56,-35}, -{50,56,-34}, -{50,56,-33}, -{50,56,-32}, -{50,56,-31}, -{50,56,-30}, -{50,56,-29}, -{50,56,-28}, -{50,56,-27}, -{50,56,-26}, -{50,56,-25}, -{50,56,-24}, -{50,56,-23}, -{50,56,-22}, -{50,56,-21}, -{50,56,-20}, -{50,56,-19}, -{50,56,-18}, -{50,56,-17}, -{50,56,-16}, -{50,56,-15}, -{50,56,-14}, -{50,56,-13}, -{50,56,-12}, -{50,56,-11}, -{50,56,-10}, -{50,56,-9}, -{50,56,-8}, -{50,56,-7}, -{50,56,-6}, -{50,56,-5}, -{50,56,-4}, -{50,56,-3}, -{50,56,-2}, -{50,56,-1}, -{50,56,0}, -{50,56,1}, -{50,56,2}, -{50,56,3}, -{50,56,4}, -{50,56,5}, -{50,56,6}, -{50,56,7}, -{50,56,8}, -{50,56,9}, -{50,56,10}, -{50,56,11}, -{50,56,12}, -{50,56,13}, -{50,56,14}, -{50,56,15}, -{50,56,16}, -{50,56,17}, -{50,56,18}, -{50,56,19}, -{50,56,20}, -{50,56,21}, -{50,56,22}, -{50,56,23}, -{50,56,24}, -{50,56,25}, -{50,56,26}, -{50,56,27}, -{50,56,28}, -{50,56,29}, -{50,56,30}, -{50,56,31}, -{50,56,32}, -{50,56,33}, -{50,56,34}, -{50,56,35}, -{50,56,36}, -{50,56,37}, -{50,56,38}, -{50,56,39}, -{50,56,40}, -{50,56,41}, -{50,56,42}, -{50,56,43}, -{50,56,44}, -{50,56,45}, -{50,56,46}, -{50,56,47}, -{50,56,48}, -{50,56,49}, -{50,56,50}, -{50,56,51}, -{50,56,52}, -{50,56,53}, -{50,56,54}, -{50,56,55}, -{50,56,56}, -{50,56,57}, -{50,56,58}, -{50,56,59}, -{50,56,60}, -{50,56,61}, -{50,57,-78}, -{50,57,-77}, -{50,57,-76}, -{50,57,-75}, -{50,57,-74}, -{50,57,-73}, -{50,57,-72}, -{50,57,-71}, -{50,57,-70}, -{50,57,-69}, -{50,57,-68}, -{50,57,-67}, -{50,57,-66}, -{50,57,-65}, -{50,57,-64}, -{50,57,-63}, -{50,57,-62}, -{50,57,-61}, -{50,57,-60}, -{50,57,-59}, -{50,57,-58}, -{50,57,-57}, -{50,57,-56}, -{50,57,-55}, -{50,57,-54}, -{50,57,-53}, -{50,57,-52}, -{50,57,-51}, -{50,57,-50}, -{50,57,-49}, -{50,57,-48}, -{50,57,-47}, -{50,57,-46}, -{50,57,-45}, -{50,57,-44}, -{50,57,-43}, -{50,57,-42}, -{50,57,-41}, -{50,57,-40}, -{50,57,-39}, -{50,57,-38}, -{50,57,-37}, -{50,57,-36}, -{50,57,-35}, -{50,57,-34}, -{50,57,-33}, -{50,57,-32}, -{50,57,-31}, -{50,57,-30}, -{50,57,-29}, -{50,57,-28}, -{50,57,-27}, -{50,57,-26}, -{50,57,-25}, -{50,57,-24}, -{50,57,-23}, -{50,57,-22}, -{50,57,-21}, -{50,57,-20}, -{50,57,-19}, -{50,57,-18}, -{50,57,-17}, -{50,57,-16}, -{50,57,-15}, -{50,57,-14}, -{50,57,-13}, -{50,57,-12}, -{50,57,-11}, -{50,57,-10}, -{50,57,-9}, -{50,57,-8}, -{50,57,-7}, -{50,57,-6}, -{50,57,-5}, -{50,57,-4}, -{50,57,-3}, -{50,57,-2}, -{50,57,-1}, -{50,57,0}, -{50,57,1}, -{50,57,2}, -{50,57,3}, -{50,57,4}, -{50,57,5}, -{50,57,6}, -{50,57,7}, -{50,57,8}, -{50,57,9}, -{50,57,10}, -{50,57,11}, -{50,57,12}, -{50,57,13}, -{50,57,14}, -{50,57,15}, -{50,57,16}, -{50,57,17}, -{50,57,18}, -{50,57,19}, -{50,57,20}, -{50,57,21}, -{50,57,22}, -{50,57,23}, -{50,57,24}, -{50,57,25}, -{50,57,26}, -{50,57,27}, -{50,57,28}, -{50,57,29}, -{50,57,30}, -{50,57,31}, -{50,57,32}, -{50,57,33}, -{50,57,34}, -{50,57,35}, -{50,57,36}, -{50,57,37}, -{50,57,38}, -{50,57,39}, -{50,57,40}, -{50,57,41}, -{50,57,42}, -{50,57,43}, -{50,57,44}, -{50,57,45}, -{50,57,46}, -{50,57,47}, -{50,57,48}, -{50,57,49}, -{50,57,50}, -{50,57,51}, -{50,57,52}, -{50,57,53}, -{50,57,54}, -{50,57,55}, -{50,57,56}, -{50,57,57}, -{50,57,58}, -{50,57,59}, -{50,57,60}, -{50,57,61}, -{50,58,-78}, -{50,58,-77}, -{50,58,-76}, -{50,58,-75}, -{50,58,-74}, -{50,58,-73}, -{50,58,-72}, -{50,58,-71}, -{50,58,-70}, -{50,58,-69}, -{50,58,-68}, -{50,58,-67}, -{50,58,-66}, -{50,58,-65}, -{50,58,-64}, -{50,58,-63}, -{50,58,-62}, -{50,58,-61}, -{50,58,-60}, -{50,58,-59}, -{50,58,-58}, -{50,58,-57}, -{50,58,-56}, -{50,58,-55}, -{50,58,-54}, -{50,58,-53}, -{50,58,-52}, -{50,58,-51}, -{50,58,-50}, -{50,58,-49}, -{50,58,-48}, -{50,58,-47}, -{50,58,-46}, -{50,58,-45}, -{50,58,-44}, -{50,58,-43}, -{50,58,-42}, -{50,58,-41}, -{50,58,-40}, -{50,58,-39}, -{50,58,-38}, -{50,58,-37}, -{50,58,-36}, -{50,58,-35}, -{50,58,-34}, -{50,58,-33}, -{50,58,-32}, -{50,58,-31}, -{50,58,-30}, -{50,58,-29}, -{50,58,-28}, -{50,58,-27}, -{50,58,-26}, -{50,58,-25}, -{50,58,-24}, -{50,58,-23}, -{50,58,-22}, -{50,58,-21}, -{50,58,-20}, -{50,58,-19}, -{50,58,-18}, -{50,58,-17}, -{50,58,-16}, -{50,58,-15}, -{50,58,-14}, -{50,58,-13}, -{50,58,-12}, -{50,58,-11}, -{50,58,-10}, -{50,58,-9}, -{50,58,-8}, -{50,58,-7}, -{50,58,-6}, -{50,58,-5}, -{50,58,-4}, -{50,58,-3}, -{50,58,-2}, -{50,58,-1}, -{50,58,0}, -{50,58,1}, -{50,58,2}, -{50,58,3}, -{50,58,4}, -{50,58,5}, -{50,58,6}, -{50,58,7}, -{50,58,8}, -{50,58,9}, -{50,58,10}, -{50,58,11}, -{50,58,12}, -{50,58,13}, -{50,58,14}, -{50,58,15}, -{50,58,16}, -{50,58,17}, -{50,58,18}, -{50,58,19}, -{50,58,20}, -{50,58,21}, -{50,58,22}, -{50,58,23}, -{50,58,24}, -{50,58,25}, -{50,58,26}, -{50,58,27}, -{50,58,28}, -{50,58,29}, -{50,58,30}, -{50,58,31}, -{50,58,32}, -{50,58,33}, -{50,58,34}, -{50,58,35}, -{50,58,36}, -{50,58,37}, -{50,58,38}, -{50,58,39}, -{50,58,40}, -{50,58,41}, -{50,58,42}, -{50,58,43}, -{50,58,44}, -{50,58,45}, -{50,58,46}, -{50,58,47}, -{50,58,48}, -{50,58,49}, -{50,58,50}, -{50,58,51}, -{50,58,52}, -{50,58,53}, -{50,58,54}, -{50,58,55}, -{50,58,56}, -{50,58,57}, -{50,58,58}, -{50,58,59}, -{50,58,60}, -{50,58,61}, -{50,59,-78}, -{50,59,-77}, -{50,59,-76}, -{50,59,-75}, -{50,59,-74}, -{50,59,-73}, -{50,59,-72}, -{50,59,-71}, -{50,59,-70}, -{50,59,-69}, -{50,59,-68}, -{50,59,-67}, -{50,59,-66}, -{50,59,-65}, -{50,59,-64}, -{50,59,-63}, -{50,59,-62}, -{50,59,-61}, -{50,59,-60}, -{50,59,-59}, -{50,59,-58}, -{50,59,-57}, -{50,59,-56}, -{50,59,-55}, -{50,59,-54}, -{50,59,-53}, -{50,59,-52}, -{50,59,-51}, -{50,59,-50}, -{50,59,-49}, -{50,59,-48}, -{50,59,-47}, -{50,59,-46}, -{50,59,-45}, -{50,59,-44}, -{50,59,-43}, -{50,59,-42}, -{50,59,-41}, -{50,59,-40}, -{50,59,-39}, -{50,59,-38}, -{50,59,-37}, -{50,59,-36}, -{50,59,-35}, -{50,59,-34}, -{50,59,-33}, -{50,59,-32}, -{50,59,-31}, -{50,59,-30}, -{50,59,-29}, -{50,59,-28}, -{50,59,-27}, -{50,59,-26}, -{50,59,-25}, -{50,59,-24}, -{50,59,-23}, -{50,59,-22}, -{50,59,-21}, -{50,59,-20}, -{50,59,-19}, -{50,59,-18}, -{50,59,-17}, -{50,59,-16}, -{50,59,-15}, -{50,59,-14}, -{50,59,-13}, -{50,59,-12}, -{50,59,-11}, -{50,59,-10}, -{50,59,-9}, -{50,59,-8}, -{50,59,-7}, -{50,59,-6}, -{50,59,-5}, -{50,59,-4}, -{50,59,-3}, -{50,59,-2}, -{50,59,-1}, -{50,59,0}, -{50,59,1}, -{50,59,2}, -{50,59,3}, -{50,59,4}, -{50,59,5}, -{50,59,6}, -{50,59,7}, -{50,59,8}, -{50,59,9}, -{50,59,10}, -{50,59,11}, -{50,59,12}, -{50,59,13}, -{50,59,14}, -{50,59,15}, -{50,59,16}, -{50,59,17}, -{50,59,18}, -{50,59,19}, -{50,59,20}, -{50,59,21}, -{50,59,22}, -{50,59,23}, -{50,59,24}, -{50,59,25}, -{50,59,26}, -{50,59,27}, -{50,59,28}, -{50,59,29}, -{50,59,30}, -{50,59,31}, -{50,59,32}, -{50,59,33}, -{50,59,34}, -{50,59,35}, -{50,59,36}, -{50,59,37}, -{50,59,38}, -{50,59,39}, -{50,59,40}, -{50,59,41}, -{50,59,42}, -{50,59,43}, -{50,59,44}, -{50,59,45}, -{50,59,46}, -{50,59,47}, -{50,59,48}, -{50,59,49}, -{50,59,50}, -{50,59,51}, -{50,59,52}, -{50,59,53}, -{50,59,54}, -{50,59,55}, -{50,59,56}, -{50,59,57}, -{50,59,58}, -{50,59,59}, -{50,59,60}, -{50,59,61}, -{50,60,-78}, -{50,60,-77}, -{50,60,-76}, -{50,60,-75}, -{50,60,-74}, -{50,60,-73}, -{50,60,-72}, -{50,60,-71}, -{50,60,-70}, -{50,60,-69}, -{50,60,-68}, -{50,60,-67}, -{50,60,-66}, -{50,60,-65}, -{50,60,-64}, -{50,60,-63}, -{50,60,-62}, -{50,60,-61}, -{50,60,-60}, -{50,60,-59}, -{50,60,-58}, -{50,60,-57}, -{50,60,-56}, -{50,60,-55}, -{50,60,-54}, -{50,60,-53}, -{50,60,-52}, -{50,60,-51}, -{50,60,-50}, -{50,60,-49}, -{50,60,-48}, -{50,60,-47}, -{50,60,-46}, -{50,60,-45}, -{50,60,-44}, -{50,60,-43}, -{50,60,-42}, -{50,60,-41}, -{50,60,-40}, -{50,60,-39}, -{50,60,-38}, -{50,60,-37}, -{50,60,-36}, -{50,60,-35}, -{50,60,-34}, -{50,60,-33}, -{50,60,-32}, -{50,60,-31}, -{50,60,-30}, -{50,60,-29}, -{50,60,-28}, -{50,60,-27}, -{50,60,-26}, -{50,60,-25}, -{50,60,-24}, -{50,60,-23}, -{50,60,-22}, -{50,60,-21}, -{50,60,-20}, -{50,60,-19}, -{50,60,-18}, -{50,60,-17}, -{50,60,-16}, -{50,60,-15}, -{50,60,-14}, -{50,60,-13}, -{50,60,-12}, -{50,60,-11}, -{50,60,-10}, -{50,60,-9}, -{50,60,-8}, -{50,60,-7}, -{50,60,-6}, -{50,60,-5}, -{50,60,-4}, -{50,60,-3}, -{50,60,-2}, -{50,60,-1}, -{50,60,0}, -{50,60,1}, -{50,60,2}, -{50,60,3}, -{50,60,4}, -{50,60,5}, -{50,60,6}, -{50,60,7}, -{50,60,8}, -{50,60,9}, -{50,60,10}, -{50,60,11}, -{50,60,12}, -{50,60,13}, -{50,60,14}, -{50,60,15}, -{50,60,16}, -{50,60,17}, -{50,60,18}, -{50,60,19}, -{50,60,20}, -{50,60,21}, -{50,60,22}, -{50,60,23}, -{50,60,24}, -{50,60,25}, -{50,60,26}, -{50,60,27}, -{50,60,28}, -{50,60,29}, -{50,60,30}, -{50,60,31}, -{50,60,32}, -{50,60,33}, -{50,60,34}, -{50,60,35}, -{50,60,36}, -{50,60,37}, -{50,60,38}, -{50,60,39}, -{50,60,40}, -{50,60,41}, -{50,60,42}, -{50,60,43}, -{50,60,44}, -{50,60,45}, -{50,60,46}, -{50,60,47}, -{50,60,48}, -{50,60,49}, -{50,60,50}, -{50,60,51}, -{50,60,52}, -{50,60,53}, -{50,60,54}, -{50,60,55}, -{50,60,56}, -{50,60,57}, -{50,60,58}, -{50,60,59}, -{50,60,60}, -{50,60,61}, -{50,61,-78}, -{50,61,-77}, -{50,61,-76}, -{50,61,-75}, -{50,61,-74}, -{50,61,-73}, -{50,61,-72}, -{50,61,-71}, -{50,61,-70}, -{50,61,-69}, -{50,61,-68}, -{50,61,-67}, -{50,61,-66}, -{50,61,-65}, -{50,61,-64}, -{50,61,-63}, -{50,61,-62}, -{50,61,-61}, -{50,61,-60}, -{50,61,-59}, -{50,61,-58}, -{50,61,-57}, -{50,61,-56}, -{50,61,-55}, -{50,61,-54}, -{50,61,-53}, -{50,61,-52}, -{50,61,-51}, -{50,61,-50}, -{50,61,-49}, -{50,61,-48}, -{50,61,-47}, -{50,61,-46}, -{50,61,-45}, -{50,61,-44}, -{50,61,-43}, -{50,61,-42}, -{50,61,-41}, -{50,61,-40}, -{50,61,-39}, -{50,61,-38}, -{50,61,-37}, -{50,61,-36}, -{50,61,-35}, -{50,61,-34}, -{50,61,-33}, -{50,61,-32}, -{50,61,-31}, -{50,61,-30}, -{50,61,-29}, -{50,61,-28}, -{50,61,-27}, -{50,61,-26}, -{50,61,-25}, -{50,61,-24}, -{50,61,-23}, -{50,61,-22}, -{50,61,-21}, -{50,61,-20}, -{50,61,-19}, -{50,61,-18}, -{50,61,-17}, -{50,61,-16}, -{50,61,-15}, -{50,61,-14}, -{50,61,-13}, -{50,61,-12}, -{50,61,-11}, -{50,61,-10}, -{50,61,-9}, -{50,61,-8}, -{50,61,-7}, -{50,61,-6}, -{50,61,-5}, -{50,61,-4}, -{50,61,-3}, -{50,61,-2}, -{50,61,-1}, -{50,61,0}, -{50,61,1}, -{50,61,2}, -{50,61,3}, -{50,61,4}, -{50,61,5}, -{50,61,6}, -{50,61,7}, -{50,61,8}, -{50,61,9}, -{50,61,10}, -{50,61,11}, -{50,61,12}, -{50,61,13}, -{50,61,14}, -{50,61,15}, -{50,61,16}, -{50,61,17}, -{50,61,18}, -{50,61,19}, -{50,61,20}, -{50,61,21}, -{50,61,22}, -{50,61,23}, -{50,61,24}, -{50,61,25}, -{50,61,26}, -{50,61,27}, -{50,61,28}, -{50,61,29}, -{50,61,30}, -{50,61,31}, -{50,61,32}, -{50,61,33}, -{50,61,34}, -{50,61,35}, -{50,61,36}, -{50,61,37}, -{50,61,38}, -{50,61,39}, -{50,61,40}, -{50,61,41}, -{50,61,42}, -{50,61,43}, -{50,61,44}, -{50,61,45}, -{50,61,46}, -{50,61,47}, -{50,61,48}, -{50,61,49}, -{50,61,50}, -{50,61,51}, -{50,61,52}, -{50,61,53}, -{50,61,54}, -{50,61,55}, -{50,61,56}, -{50,61,57}, -{50,61,58}, -{50,61,59}, -{50,61,60}, -{50,61,61}, -{50,61,62}, -{50,62,-78}, -{50,62,-77}, -{50,62,-76}, -{50,62,-75}, -{50,62,-74}, -{50,62,-73}, -{50,62,-72}, -{50,62,-71}, -{50,62,-70}, -{50,62,-69}, -{50,62,-68}, -{50,62,-67}, -{50,62,-66}, -{50,62,-65}, -{50,62,-64}, -{50,62,-63}, -{50,62,-62}, -{50,62,-61}, -{50,62,-60}, -{50,62,-59}, -{50,62,-58}, -{50,62,-57}, -{50,62,-56}, -{50,62,-55}, -{50,62,-54}, -{50,62,-53}, -{50,62,-52}, -{50,62,-51}, -{50,62,-50}, -{50,62,-49}, -{50,62,-48}, -{50,62,-47}, -{50,62,-46}, -{50,62,-45}, -{50,62,-44}, -{50,62,-43}, -{50,62,-42}, -{50,62,-41}, -{50,62,-40}, -{50,62,-39}, -{50,62,-38}, -{50,62,-37}, -{50,62,-36}, -{50,62,-35}, -{50,62,-34}, -{50,62,-33}, -{50,62,-32}, -{50,62,-31}, -{50,62,-30}, -{50,62,-29}, -{50,62,-28}, -{50,62,-27}, -{50,62,-26}, -{50,62,-25}, -{50,62,-24}, -{50,62,-23}, -{50,62,-22}, -{50,62,-21}, -{50,62,-20}, -{50,62,-19}, -{50,62,-18}, -{50,62,-17}, -{50,62,-16}, -{50,62,-15}, -{50,62,-14}, -{50,62,-13}, -{50,62,-12}, -{50,62,-11}, -{50,62,-10}, -{50,62,-9}, -{50,62,-8}, -{50,62,-7}, -{50,62,-6}, -{50,62,-5}, -{50,62,-4}, -{50,62,-3}, -{50,62,-2}, -{50,62,-1}, -{50,62,0}, -{50,62,1}, -{50,62,2}, -{50,62,3}, -{50,62,4}, -{50,62,5}, -{50,62,6}, -{50,62,7}, -{50,62,8}, -{50,62,9}, -{50,62,10}, -{50,62,11}, -{50,62,12}, -{50,62,13}, -{50,62,14}, -{50,62,15}, -{50,62,16}, -{50,62,17}, -{50,62,18}, -{50,62,19}, -{50,62,20}, -{50,62,21}, -{50,62,22}, -{50,62,23}, -{50,62,24}, -{50,62,25}, -{50,62,26}, -{50,62,27}, -{50,62,28}, -{50,62,29}, -{50,62,30}, -{50,62,31}, -{50,62,32}, -{50,62,33}, -{50,62,34}, -{50,62,35}, -{50,62,36}, -{50,62,37}, -{50,62,38}, -{50,62,39}, -{50,62,40}, -{50,62,41}, -{50,62,42}, -{50,62,43}, -{50,62,44}, -{50,62,45}, -{50,62,46}, -{50,62,47}, -{50,62,48}, -{50,62,49}, -{50,62,50}, -{50,62,51}, -{50,62,52}, -{50,62,53}, -{50,62,54}, -{50,62,55}, -{50,62,56}, -{50,62,57}, -{50,62,58}, -{50,62,59}, -{50,62,60}, -{50,62,61}, -{50,62,62}, -{50,63,-78}, -{50,63,-77}, -{50,63,-76}, -{50,63,-75}, -{50,63,-74}, -{50,63,-73}, -{50,63,-72}, -{50,63,-71}, -{50,63,-70}, -{50,63,-69}, -{50,63,-68}, -{50,63,-67}, -{50,63,-66}, -{50,63,-65}, -{50,63,-64}, -{50,63,-63}, -{50,63,-62}, -{50,63,-61}, -{50,63,-60}, -{50,63,-59}, -{50,63,-58}, -{50,63,-57}, -{50,63,-56}, -{50,63,-55}, -{50,63,-54}, -{50,63,-53}, -{50,63,-52}, -{50,63,-51}, -{50,63,-50}, -{50,63,-49}, -{50,63,-48}, -{50,63,-47}, -{50,63,-46}, -{50,63,-45}, -{50,63,-44}, -{50,63,-43}, -{50,63,-42}, -{50,63,-41}, -{50,63,-40}, -{50,63,-39}, -{50,63,-38}, -{50,63,-37}, -{50,63,-36}, -{50,63,-35}, -{50,63,-34}, -{50,63,-33}, -{50,63,-32}, -{50,63,-31}, -{50,63,-30}, -{50,63,-29}, -{50,63,-28}, -{50,63,-27}, -{50,63,-26}, -{50,63,-25}, -{50,63,-24}, -{50,63,-23}, -{50,63,-22}, -{50,63,-21}, -{50,63,-20}, -{50,63,-19}, -{50,63,-18}, -{50,63,-17}, -{50,63,-16}, -{50,63,-15}, -{50,63,-14}, -{50,63,-13}, -{50,63,-12}, -{50,63,-11}, -{50,63,-10}, -{50,63,-9}, -{50,63,-8}, -{50,63,-7}, -{50,63,-6}, -{50,63,-5}, -{50,63,-4}, -{50,63,-3}, -{50,63,-2}, -{50,63,-1}, -{50,63,0}, -{50,63,1}, -{50,63,2}, -{50,63,3}, -{50,63,4}, -{50,63,5}, -{50,63,6}, -{50,63,7}, -{50,63,8}, -{50,63,9}, -{50,63,10}, -{50,63,11}, -{50,63,12}, -{50,63,13}, -{50,63,14}, -{50,63,15}, -{50,63,16}, -{50,63,17}, -{50,63,18}, -{50,63,19}, -{50,63,20}, -{50,63,21}, -{50,63,22}, -{50,63,23}, -{50,63,24}, -{50,63,25}, -{50,63,26}, -{50,63,27}, -{50,63,28}, -{50,63,29}, -{50,63,30}, -{50,63,31}, -{50,63,32}, -{50,63,33}, -{50,63,34}, -{50,63,35}, -{50,63,36}, -{50,63,37}, -{50,63,38}, -{50,63,39}, -{50,63,40}, -{50,63,41}, -{50,63,42}, -{50,63,43}, -{50,63,44}, -{50,63,45}, -{50,63,46}, -{50,63,47}, -{50,63,48}, -{50,63,49}, -{50,63,50}, -{50,63,51}, -{50,63,52}, -{50,63,53}, -{50,63,54}, -{50,63,55}, -{50,63,56}, -{50,63,57}, -{50,63,58}, -{50,63,59}, -{50,63,60}, -{50,63,61}, -{50,63,62}, -{50,64,-78}, -{50,64,-77}, -{50,64,-76}, -{50,64,-75}, -{50,64,-74}, -{50,64,-73}, -{50,64,-72}, -{50,64,-71}, -{50,64,-70}, -{50,64,-69}, -{50,64,-68}, -{50,64,-67}, -{50,64,-66}, -{50,64,-65}, -{50,64,-64}, -{50,64,-63}, -{50,64,-62}, -{50,64,-61}, -{50,64,-60}, -{50,64,-59}, -{50,64,-58}, -{50,64,-57}, -{50,64,-56}, -{50,64,-55}, -{50,64,-54}, -{50,64,-53}, -{50,64,-52}, -{50,64,-51}, -{50,64,-50}, -{50,64,-49}, -{50,64,-48}, -{50,64,-47}, -{50,64,-46}, -{50,64,-45}, -{50,64,-44}, -{50,64,-43}, -{50,64,-42}, -{50,64,-41}, -{50,64,-40}, -{50,64,-39}, -{50,64,-38}, -{50,64,-37}, -{50,64,-36}, -{50,64,-35}, -{50,64,-34}, -{50,64,-33}, -{50,64,-32}, -{50,64,-31}, -{50,64,-30}, -{50,64,-29}, -{50,64,-28}, -{50,64,-27}, -{50,64,-26}, -{50,64,-25}, -{50,64,-24}, -{50,64,-23}, -{50,64,-22}, -{50,64,-21}, -{50,64,-20}, -{50,64,-19}, -{50,64,-18}, -{50,64,-17}, -{50,64,-16}, -{50,64,-15}, -{50,64,-14}, -{50,64,-13}, -{50,64,-12}, -{50,64,-11}, -{50,64,-10}, -{50,64,-9}, -{50,64,-8}, -{50,64,-7}, -{50,64,-6}, -{50,64,-5}, -{50,64,-4}, -{50,64,-3}, -{50,64,-2}, -{50,64,-1}, -{50,64,0}, -{50,64,1}, -{50,64,2}, -{50,64,3}, -{50,64,4}, -{50,64,5}, -{50,64,6}, -{50,64,7}, -{50,64,8}, -{50,64,9}, -{50,64,10}, -{50,64,11}, -{50,64,12}, -{50,64,13}, -{50,64,14}, -{50,64,15}, -{50,64,16}, -{50,64,17}, -{50,64,18}, -{50,64,19}, -{50,64,20}, -{50,64,21}, -{50,64,22}, -{50,64,23}, -{50,64,24}, -{50,64,25}, -{50,64,26}, -{50,64,27}, -{50,64,28}, -{50,64,29}, -{50,64,30}, -{50,64,31}, -{50,64,32}, -{50,64,33}, -{50,64,34}, -{50,64,35}, -{50,64,36}, -{50,64,37}, -{50,64,38}, -{50,64,39}, -{50,64,40}, -{50,64,41}, -{50,64,42}, -{50,64,43}, -{50,64,44}, -{50,64,45}, -{50,64,46}, -{50,64,47}, -{50,64,48}, -{50,64,49}, -{50,64,50}, -{50,64,51}, -{50,64,52}, -{50,64,53}, -{50,64,54}, -{50,64,55}, -{50,64,56}, -{50,64,57}, -{50,64,58}, -{50,64,59}, -{50,64,60}, -{50,64,61}, -{50,64,62}, -{50,65,-78}, -{50,65,-77}, -{50,65,-76}, -{50,65,-75}, -{50,65,-74}, -{50,65,-73}, -{50,65,-72}, -{50,65,-71}, -{50,65,-70}, -{50,65,-69}, -{50,65,-68}, -{50,65,-67}, -{50,65,-66}, -{50,65,-65}, -{50,65,-64}, -{50,65,-63}, -{50,65,-62}, -{50,65,-61}, -{50,65,-60}, -{50,65,-59}, -{50,65,-58}, -{50,65,-57}, -{50,65,-56}, -{50,65,-55}, -{50,65,-54}, -{50,65,-53}, -{50,65,-52}, -{50,65,-51}, -{50,65,-50}, -{50,65,-49}, -{50,65,-48}, -{50,65,-47}, -{50,65,-46}, -{50,65,-45}, -{50,65,-44}, -{50,65,-43}, -{50,65,-42}, -{50,65,-41}, -{50,65,-40}, -{50,65,-39}, -{50,65,-38}, -{50,65,-37}, -{50,65,-36}, -{50,65,-35}, -{50,65,-34}, -{50,65,-33}, -{50,65,-32}, -{50,65,-31}, -{50,65,-30}, -{50,65,-29}, -{50,65,-28}, -{50,65,-27}, -{50,65,-26}, -{50,65,-25}, -{50,65,-24}, -{50,65,-23}, -{50,65,-22}, -{50,65,-21}, -{50,65,-20}, -{50,65,-19}, -{50,65,-18}, -{50,65,-17}, -{50,65,-16}, -{50,65,-15}, -{50,65,-14}, -{50,65,-13}, -{50,65,-12}, -{50,65,-11}, -{50,65,-10}, -{50,65,-9}, -{50,65,-8}, -{50,65,-7}, -{50,65,-6}, -{50,65,-5}, -{50,65,-4}, -{50,65,-3}, -{50,65,-2}, -{50,65,-1}, -{50,65,0}, -{50,65,1}, -{50,65,2}, -{50,65,3}, -{50,65,4}, -{50,65,5}, -{50,65,6}, -{50,65,7}, -{50,65,8}, -{50,65,9}, -{50,65,10}, -{50,65,11}, -{50,65,12}, -{50,65,13}, -{50,65,14}, -{50,65,15}, -{50,65,16}, -{50,65,17}, -{50,65,18}, -{50,65,19}, -{50,65,20}, -{50,65,21}, -{50,65,22}, -{50,65,23}, -{50,65,24}, -{50,65,25}, -{50,65,26}, -{50,65,27}, -{50,65,28}, -{50,65,29}, -{50,65,30}, -{50,65,31}, -{50,65,32}, -{50,65,33}, -{50,65,34}, -{50,65,35}, -{50,65,36}, -{50,65,37}, -{50,65,38}, -{50,65,39}, -{50,65,40}, -{50,65,41}, -{50,65,42}, -{50,65,43}, -{50,65,44}, -{50,65,45}, -{50,65,46}, -{50,65,47}, -{50,65,48}, -{50,65,49}, -{50,65,50}, -{50,65,51}, -{50,65,52}, -{50,65,53}, -{50,65,54}, -{50,65,55}, -{50,65,56}, -{50,65,57}, -{50,65,58}, -{50,65,59}, -{50,65,60}, -{50,65,61}, -{50,65,62}, -{50,66,-78}, -{50,66,-77}, -{50,66,-76}, -{50,66,-75}, -{50,66,-74}, -{50,66,-73}, -{50,66,-72}, -{50,66,-71}, -{50,66,-70}, -{50,66,-69}, -{50,66,-68}, -{50,66,-67}, -{50,66,-66}, -{50,66,-65}, -{50,66,-64}, -{50,66,-63}, -{50,66,-62}, -{50,66,-61}, -{50,66,-60}, -{50,66,-59}, -{50,66,-58}, -{50,66,-57}, -{50,66,-56}, -{50,66,-55}, -{50,66,-54}, -{50,66,-53}, -{50,66,-52}, -{50,66,-51}, -{50,66,-50}, -{50,66,-49}, -{50,66,-48}, -{50,66,-47}, -{50,66,-46}, -{50,66,-45}, -{50,66,-44}, -{50,66,-43}, -{50,66,-42}, -{50,66,-41}, -{50,66,-40}, -{50,66,-39}, -{50,66,-38}, -{50,66,-37}, -{50,66,-36}, -{50,66,-35}, -{50,66,-34}, -{50,66,-33}, -{50,66,-32}, -{50,66,-31}, -{50,66,-30}, -{50,66,-29}, -{50,66,-28}, -{50,66,-27}, -{50,66,-26}, -{50,66,-25}, -{50,66,-24}, -{50,66,-23}, -{50,66,-22}, -{50,66,-21}, -{50,66,-20}, -{50,66,-19}, -{50,66,-18}, -{50,66,-17}, -{50,66,-16}, -{50,66,-15}, -{50,66,-14}, -{50,66,-13}, -{50,66,-12}, -{50,66,-11}, -{50,66,-10}, -{50,66,-9}, -{50,66,-8}, -{50,66,-7}, -{50,66,-6}, -{50,66,-5}, -{50,66,-4}, -{50,66,-3}, -{50,66,-2}, -{50,66,-1}, -{50,66,0}, -{50,66,1}, -{50,66,2}, -{50,66,3}, -{50,66,4}, -{50,66,5}, -{50,66,6}, -{50,66,7}, -{50,66,8}, -{50,66,9}, -{50,66,10}, -{50,66,11}, -{50,66,12}, -{50,66,13}, -{50,66,14}, -{50,66,15}, -{50,66,16}, -{50,66,17}, -{50,66,18}, -{50,66,19}, -{50,66,20}, -{50,66,21}, -{50,66,22}, -{50,66,23}, -{50,66,24}, -{50,66,25}, -{50,66,26}, -{50,66,27}, -{50,66,28}, -{50,66,29}, -{50,66,30}, -{50,66,31}, -{50,66,32}, -{50,66,33}, -{50,66,34}, -{50,66,35}, -{50,66,36}, -{50,66,37}, -{50,66,38}, -{50,66,39}, -{50,66,40}, -{50,66,41}, -{50,66,42}, -{50,66,43}, -{50,66,44}, -{50,66,45}, -{50,66,46}, -{50,66,47}, -{50,66,48}, -{50,66,49}, -{50,66,50}, -{50,66,51}, -{50,66,52}, -{50,66,53}, -{50,66,54}, -{50,66,55}, -{50,66,56}, -{50,66,57}, -{50,66,58}, -{50,66,59}, -{50,66,60}, -{50,66,61}, -{50,66,62}, -{50,67,-78}, -{50,67,-77}, -{50,67,-76}, -{50,67,-75}, -{50,67,-74}, -{50,67,-73}, -{50,67,-72}, -{50,67,-71}, -{50,67,-70}, -{50,67,-69}, -{50,67,-68}, -{50,67,-67}, -{50,67,-66}, -{50,67,-65}, -{50,67,-64}, -{50,67,-63}, -{50,67,-62}, -{50,67,-61}, -{50,67,-60}, -{50,67,-59}, -{50,67,-58}, -{50,67,-57}, -{50,67,-56}, -{50,67,-55}, -{50,67,-54}, -{50,67,-53}, -{50,67,-52}, -{50,67,-51}, -{50,67,-50}, -{50,67,-49}, -{50,67,-48}, -{50,67,-47}, -{50,67,-46}, -{50,67,-45}, -{50,67,-44}, -{50,67,-43}, -{50,67,-42}, -{50,67,-41}, -{50,67,-40}, -{50,67,-39}, -{50,67,-38}, -{50,67,-37}, -{50,67,-36}, -{50,67,-35}, -{50,67,-34}, -{50,67,-33}, -{50,67,-32}, -{50,67,-31}, -{50,67,-30}, -{50,67,-29}, -{50,67,-28}, -{50,67,-27}, -{50,67,-26}, -{50,67,-25}, -{50,67,-24}, -{50,67,-23}, -{50,67,-22}, -{50,67,-21}, -{50,67,-20}, -{50,67,-19}, -{50,67,-18}, -{50,67,-17}, -{50,67,-16}, -{50,67,-15}, -{50,67,-14}, -{50,67,-13}, -{50,67,-12}, -{50,67,-11}, -{50,67,-10}, -{50,67,-9}, -{50,67,-8}, -{50,67,-7}, -{50,67,-6}, -{50,67,-5}, -{50,67,-4}, -{50,67,-3}, -{50,67,-2}, -{50,67,-1}, -{50,67,0}, -{50,67,1}, -{50,67,2}, -{50,67,3}, -{50,67,4}, -{50,67,5}, -{50,67,6}, -{50,67,7}, -{50,67,8}, -{50,67,9}, -{50,67,10}, -{50,67,11}, -{50,67,12}, -{50,67,13}, -{50,67,14}, -{50,67,15}, -{50,67,16}, -{50,67,17}, -{50,67,18}, -{50,67,19}, -{50,67,20}, -{50,67,21}, -{50,67,22}, -{50,67,23}, -{50,67,24}, -{50,67,25}, -{50,67,26}, -{50,67,27}, -{50,67,28}, -{50,67,29}, -{50,67,30}, -{50,67,31}, -{50,67,32}, -{50,67,33}, -{50,67,34}, -{50,67,35}, -{50,67,36}, -{50,67,37}, -{50,67,38}, -{50,67,39}, -{50,67,40}, -{50,67,41}, -{50,67,42}, -{50,67,43}, -{50,67,44}, -{50,67,45}, -{50,67,46}, -{50,67,47}, -{50,67,48}, -{50,67,49}, -{50,67,50}, -{50,67,51}, -{50,67,52}, -{50,67,53}, -{50,67,54}, -{50,67,55}, -{50,67,56}, -{50,67,57}, -{50,67,58}, -{50,67,59}, -{50,67,60}, -{50,67,61}, -{50,67,62}, -{50,68,-78}, -{50,68,-77}, -{50,68,-76}, -{50,68,-75}, -{50,68,-74}, -{50,68,-73}, -{50,68,-72}, -{50,68,-71}, -{50,68,-70}, -{50,68,-69}, -{50,68,-68}, -{50,68,-67}, -{50,68,-66}, -{50,68,-65}, -{50,68,-64}, -{50,68,-63}, -{50,68,-62}, -{50,68,-61}, -{50,68,-60}, -{50,68,-59}, -{50,68,-58}, -{50,68,-57}, -{50,68,-56}, -{50,68,-55}, -{50,68,-54}, -{50,68,-53}, -{50,68,-52}, -{50,68,-51}, -{50,68,-50}, -{50,68,-49}, -{50,68,-48}, -{50,68,-47}, -{50,68,-46}, -{50,68,-45}, -{50,68,-44}, -{50,68,-43}, -{50,68,-42}, -{50,68,-41}, -{50,68,-40}, -{50,68,-39}, -{50,68,-38}, -{50,68,-37}, -{50,68,-36}, -{50,68,-35}, -{50,68,-34}, -{50,68,-33}, -{50,68,-32}, -{50,68,-31}, -{50,68,-30}, -{50,68,-29}, -{50,68,-28}, -{50,68,-27}, -{50,68,-26}, -{50,68,-25}, -{50,68,-24}, -{50,68,-23}, -{50,68,-22}, -{50,68,-21}, -{50,68,-20}, -{50,68,-19}, -{50,68,-18}, -{50,68,-17}, -{50,68,-16}, -{50,68,-15}, -{50,68,-14}, -{50,68,-13}, -{50,68,-12}, -{50,68,-11}, -{50,68,-10}, -{50,68,-9}, -{50,68,-8}, -{50,68,-7}, -{50,68,-6}, -{50,68,-5}, -{50,68,-4}, -{50,68,-3}, -{50,68,-2}, -{50,68,-1}, -{50,68,0}, -{50,68,1}, -{50,68,2}, -{50,68,3}, -{50,68,4}, -{50,68,5}, -{50,68,6}, -{50,68,7}, -{50,68,8}, -{50,68,9}, -{50,68,10}, -{50,68,11}, -{50,68,12}, -{50,68,13}, -{50,68,14}, -{50,68,15}, -{50,68,16}, -{50,68,17}, -{50,68,18}, -{50,68,19}, -{50,68,20}, -{50,68,21}, -{50,68,22}, -{50,68,23}, -{50,68,24}, -{50,68,25}, -{50,68,26}, -{50,68,27}, -{50,68,28}, -{50,68,29}, -{50,68,30}, -{50,68,31}, -{50,68,32}, -{50,68,33}, -{50,68,34}, -{50,68,35}, -{50,68,36}, -{50,68,37}, -{50,68,38}, -{50,68,39}, -{50,68,40}, -{50,68,41}, -{50,68,42}, -{50,68,43}, -{50,68,44}, -{50,68,45}, -{50,68,46}, -{50,68,47}, -{50,68,48}, -{50,68,49}, -{50,68,50}, -{50,68,51}, -{50,68,52}, -{50,68,53}, -{50,68,54}, -{50,68,55}, -{50,68,56}, -{50,68,57}, -{50,68,58}, -{50,68,59}, -{50,68,60}, -{50,68,61}, -{50,68,62}, -{50,68,63}, -{50,69,-78}, -{50,69,-77}, -{50,69,-76}, -{50,69,-75}, -{50,69,-74}, -{50,69,-73}, -{50,69,-72}, -{50,69,-71}, -{50,69,-70}, -{50,69,-69}, -{50,69,-68}, -{50,69,-67}, -{50,69,-66}, -{50,69,-65}, -{50,69,-64}, -{50,69,-63}, -{50,69,-62}, -{50,69,-61}, -{50,69,-60}, -{50,69,-59}, -{50,69,-58}, -{50,69,-57}, -{50,69,-56}, -{50,69,-55}, -{50,69,-54}, -{50,69,-53}, -{50,69,-52}, -{50,69,-51}, -{50,69,-50}, -{50,69,-49}, -{50,69,-48}, -{50,69,-47}, -{50,69,-46}, -{50,69,-45}, -{50,69,-44}, -{50,69,-43}, -{50,69,-42}, -{50,69,-41}, -{50,69,-40}, -{50,69,-39}, -{50,69,-38}, -{50,69,-37}, -{50,69,-36}, -{50,69,-35}, -{50,69,-34}, -{50,69,-33}, -{50,69,-32}, -{50,69,-31}, -{50,69,-30}, -{50,69,-29}, -{50,69,-28}, -{50,69,-27}, -{50,69,-26}, -{50,69,-25}, -{50,69,-24}, -{50,69,-23}, -{50,69,-22}, -{50,69,-21}, -{50,69,-20}, -{50,69,-19}, -{50,69,-18}, -{50,69,-17}, -{50,69,-16}, -{50,69,-15}, -{50,69,-14}, -{50,69,-13}, -{50,69,-12}, -{50,69,-11}, -{50,69,-10}, -{50,69,-9}, -{50,69,-8}, -{50,69,-7}, -{50,69,-6}, -{50,69,-5}, -{50,69,-4}, -{50,69,-3}, -{50,69,-2}, -{50,69,-1}, -{50,69,0}, -{50,69,1}, -{50,69,2}, -{50,69,3}, -{50,69,4}, -{50,69,5}, -{50,69,6}, -{50,69,7}, -{50,69,8}, -{50,69,9}, -{50,69,10}, -{50,69,11}, -{50,69,12}, -{50,69,13}, -{50,69,14}, -{50,69,15}, -{50,69,16}, -{50,69,17}, -{50,69,18}, -{50,69,19}, -{50,69,20}, -{50,69,21}, -{50,69,22}, -{50,69,23}, -{50,69,24}, -{50,69,25}, -{50,69,26}, -{50,69,27}, -{50,69,28}, -{50,69,29}, -{50,69,30}, -{50,69,31}, -{50,69,32}, -{50,69,33}, -{50,69,34}, -{50,69,35}, -{50,69,36}, -{50,69,37}, -{50,69,38}, -{50,69,39}, -{50,69,40}, -{50,69,41}, -{50,69,42}, -{50,69,43}, -{50,69,44}, -{50,69,45}, -{50,69,46}, -{50,69,47}, -{50,69,48}, -{50,69,49}, -{50,69,50}, -{50,69,51}, -{50,69,52}, -{50,69,53}, -{50,69,54}, -{50,69,55}, -{50,69,56}, -{50,69,57}, -{50,69,58}, -{50,69,59}, -{50,69,60}, -{50,69,61}, -{50,69,62}, -{50,69,63}, -{50,70,-78}, -{50,70,-77}, -{50,70,-76}, -{50,70,-75}, -{50,70,-74}, -{50,70,-73}, -{50,70,-72}, -{50,70,-71}, -{50,70,-70}, -{50,70,-69}, -{50,70,-68}, -{50,70,-67}, -{50,70,-66}, -{50,70,-65}, -{50,70,-64}, -{50,70,-63}, -{50,70,-62}, -{50,70,-61}, -{50,70,-60}, -{50,70,-59}, -{50,70,-58}, -{50,70,-57}, -{50,70,-56}, -{50,70,-55}, -{50,70,-54}, -{50,70,-53}, -{50,70,-52}, -{50,70,-51}, -{50,70,-50}, -{50,70,-49}, -{50,70,-48}, -{50,70,-47}, -{50,70,-46}, -{50,70,-45}, -{50,70,-44}, -{50,70,-43}, -{50,70,-42}, -{50,70,-41}, -{50,70,-40}, -{50,70,-39}, -{50,70,-38}, -{50,70,-37}, -{50,70,-36}, -{50,70,-35}, -{50,70,-34}, -{50,70,-33}, -{50,70,-32}, -{50,70,-31}, -{50,70,-30}, -{50,70,-29}, -{50,70,-28}, -{50,70,-27}, -{50,70,-26}, -{50,70,-25}, -{50,70,-24}, -{50,70,-23}, -{50,70,-22}, -{50,70,-21}, -{50,70,-20}, -{50,70,-19}, -{50,70,-18}, -{50,70,-17}, -{50,70,-16}, -{50,70,-15}, -{50,70,-14}, -{50,70,-13}, -{50,70,-12}, -{50,70,-11}, -{50,70,-10}, -{50,70,-9}, -{50,70,-8}, -{50,70,-7}, -{50,70,-6}, -{50,70,-5}, -{50,70,-4}, -{50,70,-3}, -{50,70,-2}, -{50,70,-1}, -{50,70,0}, -{50,70,1}, -{50,70,2}, -{50,70,3}, -{50,70,4}, -{50,70,5}, -{50,70,6}, -{50,70,7}, -{50,70,8}, -{50,70,9}, -{50,70,10}, -{50,70,11}, -{50,70,12}, -{50,70,13}, -{50,70,14}, -{50,70,15}, -{50,70,16}, -{50,70,17}, -{50,70,18}, -{50,70,19}, -{50,70,20}, -{50,70,21}, -{50,70,22}, -{50,70,23}, -{50,70,24}, -{50,70,25}, -{50,70,26}, -{50,70,27}, -{50,70,28}, -{50,70,29}, -{50,70,30}, -{50,70,31}, -{50,70,32}, -{50,70,33}, -{50,70,34}, -{50,70,35}, -{50,70,36}, -{50,70,37}, -{50,70,38}, -{50,70,39}, -{50,70,40}, -{50,70,41}, -{50,70,42}, -{50,70,43}, -{50,70,44}, -{50,70,45}, -{50,70,46}, -{50,70,47}, -{50,70,48}, -{50,70,49}, -{50,70,50}, -{50,70,51}, -{50,70,52}, -{50,70,53}, -{50,70,54}, -{50,70,55}, -{50,70,56}, -{50,70,57}, -{50,70,58}, -{50,70,59}, -{50,70,60}, -{50,70,61}, -{50,70,62}, -{50,70,63}, -{50,71,-78}, -{50,71,-77}, -{50,71,-76}, -{50,71,-75}, -{50,71,-74}, -{50,71,-73}, -{50,71,-72}, -{50,71,-71}, -{50,71,-70}, -{50,71,-69}, -{50,71,-68}, -{50,71,-67}, -{50,71,-66}, -{50,71,-65}, -{50,71,-64}, -{50,71,-63}, -{50,71,-62}, -{50,71,-61}, -{50,71,-60}, -{50,71,-59}, -{50,71,-58}, -{50,71,-57}, -{50,71,-56}, -{50,71,-55}, -{50,71,-54}, -{50,71,-53}, -{50,71,-52}, -{50,71,-51}, -{50,71,-50}, -{50,71,-49}, -{50,71,-48}, -{50,71,-47}, -{50,71,-46}, -{50,71,-45}, -{50,71,-44}, -{50,71,-43}, -{50,71,-42}, -{50,71,-41}, -{50,71,-40}, -{50,71,-39}, -{50,71,-38}, -{50,71,-37}, -{50,71,-36}, -{50,71,-35}, -{50,71,-34}, -{50,71,-33}, -{50,71,-32}, -{50,71,-31}, -{50,71,-30}, -{50,71,-29}, -{50,71,-28}, -{50,71,-27}, -{50,71,-26}, -{50,71,-25}, -{50,71,-24}, -{50,71,-23}, -{50,71,-22}, -{50,71,-21}, -{50,71,-20}, -{50,71,-19}, -{50,71,-18}, -{50,71,-17}, -{50,71,-16}, -{50,71,-15}, -{50,71,-14}, -{50,71,-13}, -{50,71,-12}, -{50,71,-11}, -{50,71,-10}, -{50,71,-9}, -{50,71,-8}, -{50,71,-7}, -{50,71,-6}, -{50,71,-5}, -{50,71,-4}, -{50,71,-3}, -{50,71,-2}, -{50,71,-1}, -{50,71,0}, -{50,71,1}, -{50,71,2}, -{50,71,3}, -{50,71,4}, -{50,71,5}, -{50,71,6}, -{50,71,7}, -{50,71,8}, -{50,71,9}, -{50,71,10}, -{50,71,11}, -{50,71,12}, -{50,71,13}, -{50,71,14}, -{50,71,15}, -{50,71,16}, -{50,71,17}, -{50,71,18}, -{50,71,19}, -{50,71,20}, -{50,71,21}, -{50,71,22}, -{50,71,23}, -{50,71,24}, -{50,71,25}, -{50,71,26}, -{50,71,27}, -{50,71,28}, -{50,71,29}, -{50,71,30}, -{50,71,31}, -{50,71,32}, -{50,71,33}, -{50,71,34}, -{50,71,35}, -{50,71,36}, -{50,71,37}, -{50,71,38}, -{50,71,39}, -{50,71,40}, -{50,71,41}, -{50,71,42}, -{50,71,43}, -{50,71,44}, -{50,71,45}, -{50,71,46}, -{50,71,47}, -{50,71,48}, -{50,71,49}, -{50,71,50}, -{50,71,51}, -{50,71,52}, -{50,71,53}, -{50,71,54}, -{50,71,55}, -{50,71,56}, -{50,71,57}, -{50,71,58}, -{50,71,59}, -{50,71,60}, -{50,71,61}, -{50,71,62}, -{50,71,63}, -{50,72,-78}, -{50,72,-77}, -{50,72,-76}, -{50,72,-75}, -{50,72,-74}, -{50,72,-73}, -{50,72,-72}, -{50,72,-71}, -{50,72,-70}, -{50,72,-69}, -{50,72,-68}, -{50,72,-67}, -{50,72,-66}, -{50,72,-65}, -{50,72,-64}, -{50,72,-63}, -{50,72,-62}, -{50,72,-61}, -{50,72,-60}, -{50,72,-59}, -{50,72,-58}, -{50,72,-57}, -{50,72,-56}, -{50,72,-55}, -{50,72,-54}, -{50,72,-53}, -{50,72,-52}, -{50,72,-51}, -{50,72,-50}, -{50,72,-49}, -{50,72,-48}, -{50,72,-47}, -{50,72,-46}, -{50,72,-45}, -{50,72,-44}, -{50,72,-43}, -{50,72,-42}, -{50,72,-41}, -{50,72,-40}, -{50,72,-39}, -{50,72,-38}, -{50,72,-37}, -{50,72,-36}, -{50,72,-35}, -{50,72,-34}, -{50,72,-33}, -{50,72,-32}, -{50,72,-31}, -{50,72,-30}, -{50,72,-29}, -{50,72,-28}, -{50,72,-27}, -{50,72,-26}, -{50,72,-25}, -{50,72,-24}, -{50,72,-23}, -{50,72,-22}, -{50,72,-21}, -{50,72,-20}, -{50,72,-19}, -{50,72,-18}, -{50,72,-17}, -{50,72,-16}, -{50,72,-15}, -{50,72,-14}, -{50,72,-13}, -{50,72,-12}, -{50,72,-11}, -{50,72,-10}, -{50,72,-9}, -{50,72,-8}, -{50,72,-7}, -{50,72,-6}, -{50,72,-5}, -{50,72,-4}, -{50,72,-3}, -{50,72,-2}, -{50,72,-1}, -{50,72,0}, -{50,72,1}, -{50,72,2}, -{50,72,3}, -{50,72,4}, -{50,72,5}, -{50,72,6}, -{50,72,7}, -{50,72,8}, -{50,72,9}, -{50,72,10}, -{50,72,11}, -{50,72,12}, -{50,72,13}, -{50,72,14}, -{50,72,15}, -{50,72,16}, -{50,72,17}, -{50,72,18}, -{50,72,19}, -{50,72,20}, -{50,72,21}, -{50,72,22}, -{50,72,23}, -{50,72,24}, -{50,72,25}, -{50,72,26}, -{50,72,27}, -{50,72,28}, -{50,72,29}, -{50,72,30}, -{50,72,31}, -{50,72,32}, -{50,72,33}, -{50,72,34}, -{50,72,35}, -{50,72,36}, -{50,72,37}, -{50,72,38}, -{50,72,39}, -{50,72,40}, -{50,72,41}, -{50,72,42}, -{50,72,43}, -{50,72,44}, -{50,72,45}, -{50,72,46}, -{50,72,47}, -{50,72,48}, -{50,72,49}, -{50,72,50}, -{50,72,51}, -{50,72,52}, -{50,72,53}, -{50,72,54}, -{50,72,55}, -{50,72,56}, -{50,72,57}, -{50,72,58}, -{50,72,59}, -{50,72,60}, -{50,72,61}, -{50,72,62}, -{50,72,63}, -{50,73,-78}, -{50,73,-77}, -{50,73,-76}, -{50,73,-75}, -{50,73,-74}, -{50,73,-73}, -{50,73,-72}, -{50,73,-71}, -{50,73,-70}, -{50,73,-69}, -{50,73,-68}, -{50,73,-67}, -{50,73,-66}, -{50,73,-65}, -{50,73,-64}, -{50,73,-63}, -{50,73,-62}, -{50,73,-61}, -{50,73,-60}, -{50,73,-59}, -{50,73,-58}, -{50,73,-57}, -{50,73,-56}, -{50,73,-55}, -{50,73,-54}, -{50,73,-53}, -{50,73,-52}, -{50,73,-51}, -{50,73,-50}, -{50,73,-49}, -{50,73,-48}, -{50,73,-47}, -{50,73,-46}, -{50,73,-45}, -{50,73,-44}, -{50,73,-43}, -{50,73,-42}, -{50,73,-41}, -{50,73,-40}, -{50,73,-39}, -{50,73,-38}, -{50,73,-37}, -{50,73,-36}, -{50,73,-35}, -{50,73,-34}, -{50,73,-33}, -{50,73,-32}, -{50,73,-31}, -{50,73,-30}, -{50,73,-29}, -{50,73,-28}, -{50,73,-27}, -{50,73,-26}, -{50,73,-25}, -{50,73,-24}, -{50,73,-23}, -{50,73,-22}, -{50,73,-21}, -{50,73,-20}, -{50,73,-19}, -{50,73,-18}, -{50,73,-17}, -{50,73,-16}, -{50,73,-15}, -{50,73,-14}, -{50,73,-13}, -{50,73,-12}, -{50,73,-11}, -{50,73,-10}, -{50,73,-9}, -{50,73,-8}, -{50,73,-7}, -{50,73,-6}, -{50,73,-5}, -{50,73,-4}, -{50,73,-3}, -{50,73,-2}, -{50,73,-1}, -{50,73,0}, -{50,73,1}, -{50,73,2}, -{50,73,3}, -{50,73,4}, -{50,73,5}, -{50,73,6}, -{50,73,7}, -{50,73,8}, -{50,73,9}, -{50,73,10}, -{50,73,11}, -{50,73,12}, -{50,73,13}, -{50,73,14}, -{50,73,15}, -{50,73,16}, -{50,73,17}, -{50,73,18}, -{50,73,19}, -{50,73,20}, -{50,73,21}, -{50,73,22}, -{50,73,23}, -{50,73,24}, -{50,73,25}, -{50,73,26}, -{50,73,27}, -{50,73,28}, -{50,73,29}, -{50,73,30}, -{50,73,31}, -{50,73,32}, -{50,73,33}, -{50,73,34}, -{50,73,35}, -{50,73,36}, -{50,73,37}, -{50,73,38}, -{50,73,39}, -{50,73,40}, -{50,73,41}, -{50,73,42}, -{50,73,43}, -{50,73,44}, -{50,73,45}, -{50,73,46}, -{50,73,47}, -{50,73,48}, -{50,73,49}, -{50,73,50}, -{50,73,51}, -{50,73,52}, -{50,73,53}, -{50,73,54}, -{50,73,55}, -{50,73,56}, -{50,73,57}, -{50,73,58}, -{50,73,59}, -{50,73,60}, -{50,73,61}, -{50,73,62}, -{50,73,63}, -{50,74,-78}, -{50,74,-77}, -{50,74,-76}, -{50,74,-75}, -{50,74,-74}, -{50,74,-73}, -{50,74,-72}, -{50,74,-71}, -{50,74,-70}, -{50,74,-69}, -{50,74,-68}, -{50,74,-67}, -{50,74,-66}, -{50,74,-65}, -{50,74,-64}, -{50,74,-63}, -{50,74,-62}, -{50,74,-61}, -{50,74,-60}, -{50,74,-59}, -{50,74,-58}, -{50,74,-57}, -{50,74,-56}, -{50,74,-55}, -{50,74,-54}, -{50,74,-53}, -{50,74,-52}, -{50,74,-51}, -{50,74,-50}, -{50,74,-49}, -{50,74,-48}, -{50,74,-47}, -{50,74,-46}, -{50,74,-45}, -{50,74,-44}, -{50,74,-43}, -{50,74,-42}, -{50,74,-41}, -{50,74,-40}, -{50,74,-39}, -{50,74,-38}, -{50,74,-37}, -{50,74,-36}, -{50,74,-35}, -{50,74,-34}, -{50,74,-33}, -{50,74,-32}, -{50,74,-31}, -{50,74,-30}, -{50,74,-29}, -{50,74,-28}, -{50,74,-27}, -{50,74,-26}, -{50,74,-25}, -{50,74,-24}, -{50,74,-23}, -{50,74,-22}, -{50,74,-21}, -{50,74,-20}, -{50,74,-19}, -{50,74,-18}, -{50,74,-17}, -{50,74,-16}, -{50,74,-15}, -{50,74,-14}, -{50,74,-13}, -{50,74,-12}, -{50,74,-11}, -{50,74,-10}, -{50,74,-9}, -{50,74,-8}, -{50,74,-7}, -{50,74,-6}, -{50,74,-5}, -{50,74,-4}, -{50,74,-3}, -{50,74,-2}, -{50,74,-1}, -{50,74,0}, -{50,74,1}, -{50,74,2}, -{50,74,3}, -{50,74,4}, -{50,74,5}, -{50,74,6}, -{50,74,7}, -{50,74,8}, -{50,74,9}, -{50,74,10}, -{50,74,11}, -{50,74,12}, -{50,74,13}, -{50,74,14}, -{50,74,15}, -{50,74,16}, -{50,74,17}, -{50,74,18}, -{50,74,19}, -{50,74,20}, -{50,74,21}, -{50,74,22}, -{50,74,23}, -{50,74,24}, -{50,74,25}, -{50,74,26}, -{50,74,27}, -{50,74,28}, -{50,74,29}, -{50,74,30}, -{50,74,31}, -{50,74,32}, -{50,74,33}, -{50,74,34}, -{50,74,35}, -{50,74,36}, -{50,74,37}, -{50,74,38}, -{50,74,39}, -{50,74,40}, -{50,74,41}, -{50,74,42}, -{50,74,43}, -{50,74,44}, -{50,74,45}, -{50,74,46}, -{50,74,47}, -{50,74,48}, -{50,74,49}, -{50,74,50}, -{50,74,51}, -{50,74,52}, -{50,74,53}, -{50,74,54}, -{50,74,55}, -{50,74,56}, -{50,74,57}, -{50,74,58}, -{50,74,59}, -{50,74,60}, -{50,74,61}, -{50,74,62}, -{50,74,63}, -{50,75,-78}, -{50,75,-77}, -{50,75,-76}, -{50,75,-75}, -{50,75,-74}, -{50,75,-73}, -{50,75,-72}, -{50,75,-71}, -{50,75,-70}, -{50,75,-69}, -{50,75,-68}, -{50,75,-67}, -{50,75,-66}, -{50,75,-65}, -{50,75,-64}, -{50,75,-63}, -{50,75,-62}, -{50,75,-61}, -{50,75,-60}, -{50,75,-59}, -{50,75,-58}, -{50,75,-57}, -{50,75,-56}, -{50,75,-55}, -{50,75,-54}, -{50,75,-53}, -{50,75,-52}, -{50,75,-51}, -{50,75,-50}, -{50,75,-49}, -{50,75,-48}, -{50,75,-47}, -{50,75,-46}, -{50,75,-45}, -{50,75,-44}, -{50,75,-43}, -{50,75,-42}, -{50,75,-41}, -{50,75,-40}, -{50,75,-39}, -{50,75,-38}, -{50,75,-37}, -{50,75,-36}, -{50,75,-35}, -{50,75,-34}, -{50,75,-33}, -{50,75,-32}, -{50,75,-31}, -{50,75,-30}, -{50,75,-29}, -{50,75,-28}, -{50,75,-27}, -{50,75,-26}, -{50,75,-25}, -{50,75,-24}, -{50,75,-23}, -{50,75,-22}, -{50,75,-21}, -{50,75,-20}, -{50,75,-19}, -{50,75,-18}, -{50,75,-17}, -{50,75,-16}, -{50,75,-15}, -{50,75,-14}, -{50,75,-13}, -{50,75,-12}, -{50,75,-11}, -{50,75,-10}, -{50,75,-9}, -{50,75,-8}, -{50,75,-7}, -{50,75,-6}, -{50,75,-5}, -{50,75,-4}, -{50,75,-3}, -{50,75,-2}, -{50,75,-1}, -{50,75,0}, -{50,75,1}, -{50,75,2}, -{50,75,3}, -{50,75,4}, -{50,75,5}, -{50,75,6}, -{50,75,7}, -{50,75,8}, -{50,75,9}, -{50,75,10}, -{50,75,11}, -{50,75,12}, -{50,75,13}, -{50,75,14}, -{50,75,15}, -{50,75,16}, -{50,75,17}, -{50,75,18}, -{50,75,19}, -{50,75,20}, -{50,75,21}, -{50,75,22}, -{50,75,23}, -{50,75,24}, -{50,75,25}, -{50,75,26}, -{50,75,27}, -{50,75,28}, -{50,75,29}, -{50,75,30}, -{50,75,31}, -{50,75,32}, -{50,75,33}, -{50,75,34}, -{50,75,35}, -{50,75,36}, -{50,75,37}, -{50,75,38}, -{50,75,39}, -{50,75,40}, -{50,75,41}, -{50,75,42}, -{50,75,43}, -{50,75,44}, -{50,75,45}, -{50,75,46}, -{50,75,47}, -{50,75,48}, -{50,75,49}, -{50,75,50}, -{50,75,51}, -{50,75,52}, -{50,75,53}, -{50,75,54}, -{50,75,55}, -{50,75,56}, -{50,75,57}, -{50,75,58}, -{50,75,59}, -{50,75,60}, -{50,75,61}, -{50,75,62}, -{50,75,63}, -{50,75,64}, -{50,76,-78}, -{50,76,-77}, -{50,76,-76}, -{50,76,-75}, -{50,76,-74}, -{50,76,-73}, -{50,76,-72}, -{50,76,-71}, -{50,76,-70}, -{50,76,-69}, -{50,76,-68}, -{50,76,-67}, -{50,76,-66}, -{50,76,-65}, -{50,76,-64}, -{50,76,-63}, -{50,76,-62}, -{50,76,-61}, -{50,76,-60}, -{50,76,-59}, -{50,76,-58}, -{50,76,-57}, -{50,76,-56}, -{50,76,-55}, -{50,76,-54}, -{50,76,-53}, -{50,76,-52}, -{50,76,-51}, -{50,76,-50}, -{50,76,-49}, -{50,76,-48}, -{50,76,-47}, -{50,76,-46}, -{50,76,-45}, -{50,76,-44}, -{50,76,-43}, -{50,76,-42}, -{50,76,-41}, -{50,76,-40}, -{50,76,-39}, -{50,76,-38}, -{50,76,-37}, -{50,76,-36}, -{50,76,-35}, -{50,76,-34}, -{50,76,-33}, -{50,76,-32}, -{50,76,-31}, -{50,76,-30}, -{50,76,-29}, -{50,76,-28}, -{50,76,-27}, -{50,76,-26}, -{50,76,-25}, -{50,76,-24}, -{50,76,-23}, -{50,76,-22}, -{50,76,-21}, -{50,76,-20}, -{50,76,-19}, -{50,76,-18}, -{50,76,-17}, -{50,76,-16}, -{50,76,-15}, -{50,76,-14}, -{50,76,-13}, -{50,76,-12}, -{50,76,-11}, -{50,76,-10}, -{50,76,-9}, -{50,76,-8}, -{50,76,-7}, -{50,76,-6}, -{50,76,-5}, -{50,76,-4}, -{50,76,-3}, -{50,76,-2}, -{50,76,-1}, -{50,76,0}, -{50,76,1}, -{50,76,2}, -{50,76,3}, -{50,76,4}, -{50,76,5}, -{50,76,6}, -{50,76,7}, -{50,76,8}, -{50,76,9}, -{50,76,10}, -{50,76,11}, -{50,76,12}, -{50,76,13}, -{50,76,14}, -{50,76,15}, -{50,76,16}, -{50,76,17}, -{50,76,18}, -{50,76,19}, -{50,76,20}, -{50,76,21}, -{50,76,22}, -{50,76,23}, -{50,76,24}, -{50,76,25}, -{50,76,26}, -{50,76,27}, -{50,76,28}, -{50,76,29}, -{50,76,30}, -{50,76,31}, -{50,76,32}, -{50,76,33}, -{50,76,34}, -{50,76,35}, -{50,76,36}, -{50,76,37}, -{50,76,38}, -{50,76,39}, -{50,76,40}, -{50,76,41}, -{50,76,42}, -{50,76,43}, -{50,76,44}, -{50,76,45}, -{50,76,46}, -{50,76,47}, -{50,76,48}, -{50,76,49}, -{50,76,50}, -{50,76,51}, -{50,76,52}, -{50,76,53}, -{50,76,54}, -{50,76,55}, -{50,76,56}, -{50,76,57}, -{50,76,58}, -{50,76,59}, -{50,76,60}, -{50,76,61}, -{50,76,62}, -{50,76,63}, -{50,76,64}, -{50,77,-78}, -{50,77,-77}, -{50,77,-76}, -{50,77,-75}, -{50,77,-74}, -{50,77,-73}, -{50,77,-72}, -{50,77,-71}, -{50,77,-70}, -{50,77,-69}, -{50,77,-68}, -{50,77,-67}, -{50,77,-66}, -{50,77,-65}, -{50,77,-64}, -{50,77,-63}, -{50,77,-62}, -{50,77,-61}, -{50,77,-60}, -{50,77,-59}, -{50,77,-58}, -{50,77,-57}, -{50,77,-56}, -{50,77,-55}, -{50,77,-54}, -{50,77,-53}, -{50,77,-52}, -{50,77,-51}, -{50,77,-50}, -{50,77,-49}, -{50,77,-48}, -{50,77,-47}, -{50,77,-46}, -{50,77,-45}, -{50,77,-44}, -{50,77,-43}, -{50,77,-42}, -{50,77,-41}, -{50,77,-40}, -{50,77,-39}, -{50,77,-38}, -{50,77,-37}, -{50,77,-36}, -{50,77,-35}, -{50,77,-34}, -{50,77,-33}, -{50,77,-32}, -{50,77,-31}, -{50,77,-30}, -{50,77,-29}, -{50,77,-28}, -{50,77,-27}, -{50,77,-26}, -{50,77,-25}, -{50,77,-24}, -{50,77,-23}, -{50,77,-22}, -{50,77,-21}, -{50,77,-20}, -{50,77,-19}, -{50,77,-18}, -{50,77,-17}, -{50,77,-16}, -{50,77,-15}, -{50,77,-14}, -{50,77,-13}, -{50,77,-12}, -{50,77,-11}, -{50,77,-10}, -{50,77,-9}, -{50,77,-8}, -{50,77,-7}, -{50,77,-6}, -{50,77,-5}, -{50,77,-4}, -{50,77,-3}, -{50,77,-2}, -{50,77,-1}, -{50,77,0}, -{50,77,1}, -{50,77,2}, -{50,77,3}, -{50,77,4}, -{50,77,5}, -{50,77,6}, -{50,77,7}, -{50,77,8}, -{50,77,9}, -{50,77,10}, -{50,77,11}, -{50,77,12}, -{50,77,13}, -{50,77,14}, -{50,77,15}, -{50,77,16}, -{50,77,17}, -{50,77,18}, -{50,77,19}, -{50,77,20}, -{50,77,21}, -{50,77,22}, -{50,77,23}, -{50,77,24}, -{50,77,25}, -{50,77,26}, -{50,77,27}, -{50,77,28}, -{50,77,29}, -{50,77,30}, -{50,77,31}, -{50,77,32}, -{50,77,33}, -{50,77,34}, -{50,77,35}, -{50,77,36}, -{50,77,37}, -{50,77,38}, -{50,77,39}, -{50,77,40}, -{50,77,41}, -{50,77,42}, -{50,78,-78}, -{50,78,-77}, -{50,78,-76}, -{50,78,-75}, -{50,78,-74}, -{50,78,-73}, -{50,78,-72}, -{50,78,-71}, -{50,78,-70}, -{50,78,-69}, -{50,78,-68}, -{50,78,-67}, -{50,78,-66}, -{50,78,-65}, -{50,78,-64}, -{50,78,-63}, -{50,78,-62}, -{50,78,-61}, -{50,78,-60}, -{50,78,-59}, -{50,78,-58}, -{50,78,-57}, -{50,78,-56}, -{50,78,-55}, -{50,78,-54}, -{50,78,-53}, -{50,78,-52}, -{50,78,-51}, -{50,78,-50}, -{50,78,-49}, -{50,78,-48}, -{50,78,-47}, -{50,78,-46}, -{50,78,-45}, -{50,78,-44}, -{50,78,-43}, -{50,78,-42}, -{50,78,-41}, -{50,78,-40}, -{50,78,-39}, -{50,78,-38}, -{50,78,-37}, -{50,78,-36}, -{50,78,-35}, -{50,78,-34}, -{50,78,-33}, -{50,78,-32}, -{50,78,-31}, -{50,78,-30}, -{50,78,-29}, -{50,78,-28}, -{50,78,-27}, -{50,78,-26}, -{50,78,-25}, -{50,78,-24}, -{50,78,-23}, -{50,78,-22}, -{50,78,-21}, -{50,78,-20}, -{50,78,-19}, -{50,78,-18}, -{50,78,-17}, -{50,78,-16}, -{50,78,-15}, -{50,78,-14}, -{50,78,-13}, -{50,78,-12}, -{50,78,-11}, -{50,78,-10}, -{50,78,-9}, -{50,78,-8}, -{50,78,-7}, -{50,78,-6}, -{50,78,-5}, -{50,78,-4}, -{50,78,-3}, -{50,78,-2}, -{50,78,-1}, -{50,78,0}, -{50,78,1}, -{50,78,2}, -{50,78,3}, -{50,78,4}, -{50,78,5}, -{50,78,6}, -{50,78,7}, -{50,78,8}, -{50,78,9}, -{50,78,10}, -{50,78,11}, -{50,78,12}, -{50,78,13}, -{50,78,14}, -{50,78,15}, -{50,78,16}, -{50,78,17}, -{50,78,18}, -{50,79,-78}, -{50,79,-77}, -{50,79,-76}, -{50,79,-75}, -{50,79,-74}, -{50,79,-73}, -{50,79,-72}, -{50,79,-71}, -{50,79,-70}, -{50,79,-69}, -{50,79,-68}, -{50,79,-67}, -{50,79,-66}, -{50,79,-65}, -{50,79,-64}, -{50,79,-63}, -{50,79,-62}, -{50,79,-61}, -{50,79,-60}, -{50,79,-59}, -{50,79,-58}, -{50,79,-57}, -{50,79,-56}, -{50,79,-55}, -{50,79,-54}, -{50,79,-53}, -{50,79,-52}, -{50,79,-51}, -{50,79,-50}, -{50,79,-49}, -{50,79,-48}, -{50,79,-47}, -{50,79,-46}, -{50,79,-45}, -{50,79,-44}, -{50,79,-43}, -{50,79,-42}, -{50,79,-41}, -{50,79,-40}, -{50,79,-39}, -{50,79,-38}, -{50,79,-37}, -{50,79,-36}, -{50,79,-35}, -{50,79,-34}, -{50,79,-33}, -{50,79,-32}, -{50,79,-31}, -{50,79,-30}, -{50,79,-29}, -{50,79,-28}, -{50,79,-27}, -{50,79,-26}, -{50,79,-25}, -{50,79,-24}, -{50,79,-23}, -{50,79,-22}, -{50,79,-21}, -{50,79,-20}, -{50,79,-19}, -{50,79,-18}, -{50,79,-17}, -{50,79,-16}, -{50,79,-15}, -{50,79,-14}, -{50,79,-13}, -{50,79,-12}, -{50,79,-11}, -{50,79,-10}, -{50,79,-9}, -{50,79,-8}, -{50,79,-7}, -{50,79,-6}, -{50,79,-5}, -{50,79,-4}, -{50,79,-3}, -{50,79,-2}, -{50,79,-1}, -{50,79,0}, -{50,79,1}, -{50,79,2}, -{50,80,-78}, -{50,80,-77}, -{50,80,-76}, -{50,80,-75}, -{50,80,-74}, -{50,80,-73}, -{50,80,-72}, -{50,80,-71}, -{50,80,-70}, -{50,80,-69}, -{50,80,-68}, -{50,80,-67}, -{50,80,-66}, -{50,80,-65}, -{50,80,-64}, -{50,80,-63}, -{50,80,-62}, -{50,80,-61}, -{50,80,-60}, -{50,80,-59}, -{50,80,-58}, -{50,80,-57}, -{50,80,-56}, -{50,80,-55}, -{50,80,-54}, -{50,80,-53}, -{50,80,-52}, -{50,80,-51}, -{50,80,-50}, -{50,80,-49}, -{50,80,-48}, -{50,80,-47}, -{50,80,-46}, -{50,80,-45}, -{50,80,-44}, -{50,80,-43}, -{50,80,-42}, -{50,80,-41}, -{50,80,-40}, -{50,80,-39}, -{50,80,-38}, -{50,80,-37}, -{50,80,-36}, -{50,80,-35}, -{50,80,-34}, -{50,80,-33}, -{50,80,-32}, -{50,80,-31}, -{50,80,-30}, -{50,80,-29}, -{50,80,-28}, -{50,80,-27}, -{50,80,-26}, -{50,80,-25}, -{50,80,-24}, -{50,80,-23}, -{50,80,-22}, -{50,80,-21}, -{50,80,-20}, -{50,80,-19}, -{50,80,-18}, -{50,80,-17}, -{50,80,-16}, -{50,80,-15}, -{50,80,-14}, -{50,80,-13}, -{50,80,-12}, -{50,80,-11}, -{50,81,-78}, -{50,81,-77}, -{50,81,-76}, -{50,81,-75}, -{50,81,-74}, -{50,81,-73}, -{50,81,-72}, -{50,81,-71}, -{50,81,-70}, -{50,81,-69}, -{50,81,-68}, -{50,81,-67}, -{50,81,-66}, -{50,81,-65}, -{50,81,-64}, -{50,81,-63}, -{50,81,-62}, -{50,81,-61}, -{50,81,-60}, -{50,81,-59}, -{50,81,-58}, -{50,81,-57}, -{50,81,-56}, -{50,81,-55}, -{50,81,-54}, -{50,81,-53}, -{50,81,-52}, -{50,81,-51}, -{50,81,-50}, -{50,81,-49}, -{50,81,-48}, -{50,81,-47}, -{50,81,-46}, -{50,81,-45}, -{50,81,-44}, -{50,81,-43}, -{50,81,-42}, -{50,81,-41}, -{50,81,-40}, -{50,81,-39}, -{50,81,-38}, -{50,81,-37}, -{50,81,-36}, -{50,81,-35}, -{50,81,-34}, -{50,81,-33}, -{50,81,-32}, -{50,81,-31}, -{50,81,-30}, -{50,81,-29}, -{50,81,-28}, -{50,81,-27}, -{50,81,-26}, -{50,81,-25}, -{50,81,-24}, -{50,81,-23}, -{50,81,-22}, -{50,81,-21}, -{50,82,-78}, -{50,82,-77}, -{50,82,-76}, -{50,82,-75}, -{50,82,-74}, -{50,82,-73}, -{50,82,-72}, -{50,82,-71}, -{50,82,-70}, -{50,82,-69}, -{50,82,-68}, -{50,82,-67}, -{50,82,-66}, -{50,82,-65}, -{50,82,-64}, -{50,82,-63}, -{50,82,-62}, -{50,82,-61}, -{50,82,-60}, -{50,82,-59}, -{50,82,-58}, -{50,82,-57}, -{50,82,-56}, -{50,82,-55}, -{50,82,-54}, -{50,82,-53}, -{50,82,-52}, -{50,82,-51}, -{50,82,-50}, -{50,82,-49}, -{50,82,-48}, -{50,82,-47}, -{50,82,-46}, -{50,82,-45}, -{50,82,-44}, -{50,82,-43}, -{50,82,-42}, -{50,82,-41}, -{50,82,-40}, -{50,82,-39}, -{50,82,-38}, -{50,82,-37}, -{50,82,-36}, -{50,82,-35}, -{50,82,-34}, -{50,82,-33}, -{50,82,-32}, -{50,82,-31}, -{50,82,-30}, -{50,83,-78}, -{50,83,-77}, -{50,83,-76}, -{50,83,-75}, -{50,83,-74}, -{50,83,-73}, -{50,83,-72}, -{50,83,-71}, -{50,83,-70}, -{50,83,-69}, -{50,83,-68}, -{50,83,-67}, -{50,83,-66}, -{50,83,-65}, -{50,83,-64}, -{50,83,-63}, -{50,83,-62}, -{50,83,-61}, -{50,83,-60}, -{50,83,-59}, -{50,83,-58}, -{50,83,-57}, -{50,83,-56}, -{50,83,-55}, -{50,83,-54}, -{50,83,-53}, -{50,83,-52}, -{50,83,-51}, -{50,83,-50}, -{50,83,-49}, -{50,83,-48}, -{50,83,-47}, -{50,83,-46}, -{50,83,-45}, -{50,83,-44}, -{50,83,-43}, -{50,83,-42}, -{50,83,-41}, -{50,83,-40}, -{50,83,-39}, -{50,83,-38}, -{50,84,-78}, -{50,84,-77}, -{50,84,-76}, -{50,84,-75}, -{50,84,-74}, -{50,84,-73}, -{50,84,-72}, -{50,84,-71}, -{50,84,-70}, -{50,84,-69}, -{50,84,-68}, -{50,84,-67}, -{50,84,-66}, -{50,84,-65}, -{50,84,-64}, -{50,84,-63}, -{50,84,-62}, -{50,84,-61}, -{50,84,-60}, -{50,84,-59}, -{50,84,-58}, -{50,84,-57}, -{50,84,-56}, -{50,84,-55}, -{50,84,-54}, -{50,84,-53}, -{50,84,-52}, -{50,84,-51}, -{50,84,-50}, -{50,84,-49}, -{50,84,-48}, -{50,84,-47}, -{50,84,-46}, -{50,85,-78}, -{50,85,-77}, -{50,85,-76}, -{50,85,-75}, -{50,85,-74}, -{50,85,-73}, -{50,85,-72}, -{50,85,-71}, -{50,85,-70}, -{50,85,-69}, -{50,85,-68}, -{50,85,-67}, -{50,85,-66}, -{50,85,-65}, -{50,85,-64}, -{50,85,-63}, -{50,85,-62}, -{50,85,-61}, -{50,85,-60}, -{50,85,-59}, -{50,85,-58}, -{50,85,-57}, -{50,85,-56}, -{50,85,-55}, -{50,85,-54}, -{50,85,-53}, -{50,85,-52}, -{50,86,-78}, -{50,86,-77}, -{50,86,-76}, -{50,86,-75}, -{50,86,-74}, -{50,86,-73}, -{50,86,-72}, -{50,86,-71}, -{50,86,-70}, -{50,86,-69}, -{50,86,-68}, -{50,86,-67}, -{50,86,-66}, -{50,86,-65}, -{50,86,-64}, -{50,86,-63}, -{50,86,-62}, -{50,86,-61}, -{50,86,-60}, -{50,86,-59}, -{50,87,-78}, -{50,87,-77}, -{50,87,-76}, -{50,87,-75}, -{50,87,-74}, -{50,87,-73}, -{50,87,-72}, -{50,87,-71}, -{50,87,-70}, -{50,87,-69}, -{50,87,-68}, -{50,87,-67}, -{50,87,-66}, -{50,87,-65}, -{50,88,-78}, -{50,88,-77}, -{50,88,-76}, -{50,88,-75}, -{50,88,-74}, -{50,88,-73}, -{50,88,-72}, -{50,88,-71}, -{50,88,-70}, -{50,89,-78}, -{50,89,-77}, -{50,89,-76}, -{50,89,-75}, -{51,-55,50}, -{51,-55,51}, -{51,-55,52}, -{51,-55,53}, -{51,-54,46}, -{51,-54,47}, -{51,-54,48}, -{51,-54,49}, -{51,-54,50}, -{51,-54,51}, -{51,-54,52}, -{51,-54,53}, -{51,-53,42}, -{51,-53,43}, -{51,-53,44}, -{51,-53,45}, -{51,-53,46}, -{51,-53,47}, -{51,-53,48}, -{51,-53,49}, -{51,-53,50}, -{51,-53,51}, -{51,-53,52}, -{51,-53,53}, -{51,-53,54}, -{51,-52,38}, -{51,-52,39}, -{51,-52,40}, -{51,-52,41}, -{51,-52,42}, -{51,-52,43}, -{51,-52,44}, -{51,-52,45}, -{51,-52,46}, -{51,-52,47}, -{51,-52,48}, -{51,-52,49}, -{51,-52,50}, -{51,-52,51}, -{51,-52,52}, -{51,-52,53}, -{51,-52,54}, -{51,-51,35}, -{51,-51,36}, -{51,-51,37}, -{51,-51,38}, -{51,-51,39}, -{51,-51,40}, -{51,-51,41}, -{51,-51,42}, -{51,-51,43}, -{51,-51,44}, -{51,-51,45}, -{51,-51,46}, -{51,-51,47}, -{51,-51,48}, -{51,-51,49}, -{51,-51,50}, -{51,-51,51}, -{51,-51,52}, -{51,-51,53}, -{51,-51,54}, -{51,-50,32}, -{51,-50,33}, -{51,-50,34}, -{51,-50,35}, -{51,-50,36}, -{51,-50,37}, -{51,-50,38}, -{51,-50,39}, -{51,-50,40}, -{51,-50,41}, -{51,-50,42}, -{51,-50,43}, -{51,-50,44}, -{51,-50,45}, -{51,-50,46}, -{51,-50,47}, -{51,-50,48}, -{51,-50,49}, -{51,-50,50}, -{51,-50,51}, -{51,-50,52}, -{51,-50,53}, -{51,-50,54}, -{51,-49,29}, -{51,-49,30}, -{51,-49,31}, -{51,-49,32}, -{51,-49,33}, -{51,-49,34}, -{51,-49,35}, -{51,-49,36}, -{51,-49,37}, -{51,-49,38}, -{51,-49,39}, -{51,-49,40}, -{51,-49,41}, -{51,-49,42}, -{51,-49,43}, -{51,-49,44}, -{51,-49,45}, -{51,-49,46}, -{51,-49,47}, -{51,-49,48}, -{51,-49,49}, -{51,-49,50}, -{51,-49,51}, -{51,-49,52}, -{51,-49,53}, -{51,-49,54}, -{51,-48,27}, -{51,-48,28}, -{51,-48,29}, -{51,-48,30}, -{51,-48,31}, -{51,-48,32}, -{51,-48,33}, -{51,-48,34}, -{51,-48,35}, -{51,-48,36}, -{51,-48,37}, -{51,-48,38}, -{51,-48,39}, -{51,-48,40}, -{51,-48,41}, -{51,-48,42}, -{51,-48,43}, -{51,-48,44}, -{51,-48,45}, -{51,-48,46}, -{51,-48,47}, -{51,-48,48}, -{51,-48,49}, -{51,-48,50}, -{51,-48,51}, -{51,-48,52}, -{51,-48,53}, -{51,-48,54}, -{51,-47,24}, -{51,-47,25}, -{51,-47,26}, -{51,-47,27}, -{51,-47,28}, -{51,-47,29}, -{51,-47,30}, -{51,-47,31}, -{51,-47,32}, -{51,-47,33}, -{51,-47,34}, -{51,-47,35}, -{51,-47,36}, -{51,-47,37}, -{51,-47,38}, -{51,-47,39}, -{51,-47,40}, -{51,-47,41}, -{51,-47,42}, -{51,-47,43}, -{51,-47,44}, -{51,-47,45}, -{51,-47,46}, -{51,-47,47}, -{51,-47,48}, -{51,-47,49}, -{51,-47,50}, -{51,-47,51}, -{51,-47,52}, -{51,-47,53}, -{51,-47,54}, -{51,-46,22}, -{51,-46,23}, -{51,-46,24}, -{51,-46,25}, -{51,-46,26}, -{51,-46,27}, -{51,-46,28}, -{51,-46,29}, -{51,-46,30}, -{51,-46,31}, -{51,-46,32}, -{51,-46,33}, -{51,-46,34}, -{51,-46,35}, -{51,-46,36}, -{51,-46,37}, -{51,-46,38}, -{51,-46,39}, -{51,-46,40}, -{51,-46,41}, -{51,-46,42}, -{51,-46,43}, -{51,-46,44}, -{51,-46,45}, -{51,-46,46}, -{51,-46,47}, -{51,-46,48}, -{51,-46,49}, -{51,-46,50}, -{51,-46,51}, -{51,-46,52}, -{51,-46,53}, -{51,-46,54}, -{51,-45,19}, -{51,-45,20}, -{51,-45,21}, -{51,-45,22}, -{51,-45,23}, -{51,-45,24}, -{51,-45,25}, -{51,-45,26}, -{51,-45,27}, -{51,-45,28}, -{51,-45,29}, -{51,-45,30}, -{51,-45,31}, -{51,-45,32}, -{51,-45,33}, -{51,-45,34}, -{51,-45,35}, -{51,-45,36}, -{51,-45,37}, -{51,-45,38}, -{51,-45,39}, -{51,-45,40}, -{51,-45,41}, -{51,-45,42}, -{51,-45,43}, -{51,-45,44}, -{51,-45,45}, -{51,-45,46}, -{51,-45,47}, -{51,-45,48}, -{51,-45,49}, -{51,-45,50}, -{51,-45,51}, -{51,-45,52}, -{51,-45,53}, -{51,-45,54}, -{51,-44,17}, -{51,-44,18}, -{51,-44,19}, -{51,-44,20}, -{51,-44,21}, -{51,-44,22}, -{51,-44,23}, -{51,-44,24}, -{51,-44,25}, -{51,-44,26}, -{51,-44,27}, -{51,-44,28}, -{51,-44,29}, -{51,-44,30}, -{51,-44,31}, -{51,-44,32}, -{51,-44,33}, -{51,-44,34}, -{51,-44,35}, -{51,-44,36}, -{51,-44,37}, -{51,-44,38}, -{51,-44,39}, -{51,-44,40}, -{51,-44,41}, -{51,-44,42}, -{51,-44,43}, -{51,-44,44}, -{51,-44,45}, -{51,-44,46}, -{51,-44,47}, -{51,-44,48}, -{51,-44,49}, -{51,-44,50}, -{51,-44,51}, -{51,-44,52}, -{51,-44,53}, -{51,-44,54}, -{51,-43,15}, -{51,-43,16}, -{51,-43,17}, -{51,-43,18}, -{51,-43,19}, -{51,-43,20}, -{51,-43,21}, -{51,-43,22}, -{51,-43,23}, -{51,-43,24}, -{51,-43,25}, -{51,-43,26}, -{51,-43,27}, -{51,-43,28}, -{51,-43,29}, -{51,-43,30}, -{51,-43,31}, -{51,-43,32}, -{51,-43,33}, -{51,-43,34}, -{51,-43,35}, -{51,-43,36}, -{51,-43,37}, -{51,-43,38}, -{51,-43,39}, -{51,-43,40}, -{51,-43,41}, -{51,-43,42}, -{51,-43,43}, -{51,-43,44}, -{51,-43,45}, -{51,-43,46}, -{51,-43,47}, -{51,-43,48}, -{51,-43,49}, -{51,-43,50}, -{51,-43,51}, -{51,-43,52}, -{51,-43,53}, -{51,-43,54}, -{51,-42,13}, -{51,-42,14}, -{51,-42,15}, -{51,-42,16}, -{51,-42,17}, -{51,-42,18}, -{51,-42,19}, -{51,-42,20}, -{51,-42,21}, -{51,-42,22}, -{51,-42,23}, -{51,-42,24}, -{51,-42,25}, -{51,-42,26}, -{51,-42,27}, -{51,-42,28}, -{51,-42,29}, -{51,-42,30}, -{51,-42,31}, -{51,-42,32}, -{51,-42,33}, -{51,-42,34}, -{51,-42,35}, -{51,-42,36}, -{51,-42,37}, -{51,-42,38}, -{51,-42,39}, -{51,-42,40}, -{51,-42,41}, -{51,-42,42}, -{51,-42,43}, -{51,-42,44}, -{51,-42,45}, -{51,-42,46}, -{51,-42,47}, -{51,-42,48}, -{51,-42,49}, -{51,-42,50}, -{51,-42,51}, -{51,-42,52}, -{51,-42,53}, -{51,-42,54}, -{51,-41,11}, -{51,-41,12}, -{51,-41,13}, -{51,-41,14}, -{51,-41,15}, -{51,-41,16}, -{51,-41,17}, -{51,-41,18}, -{51,-41,19}, -{51,-41,20}, -{51,-41,21}, -{51,-41,22}, -{51,-41,23}, -{51,-41,24}, -{51,-41,25}, -{51,-41,26}, -{51,-41,27}, -{51,-41,28}, -{51,-41,29}, -{51,-41,30}, -{51,-41,31}, -{51,-41,32}, -{51,-41,33}, -{51,-41,34}, -{51,-41,35}, -{51,-41,36}, -{51,-41,37}, -{51,-41,38}, -{51,-41,39}, -{51,-41,40}, -{51,-41,41}, -{51,-41,42}, -{51,-41,43}, -{51,-41,44}, -{51,-41,45}, -{51,-41,46}, -{51,-41,47}, -{51,-41,48}, -{51,-41,49}, -{51,-41,50}, -{51,-41,51}, -{51,-41,52}, -{51,-41,53}, -{51,-41,54}, -{51,-40,9}, -{51,-40,10}, -{51,-40,11}, -{51,-40,12}, -{51,-40,13}, -{51,-40,14}, -{51,-40,15}, -{51,-40,16}, -{51,-40,17}, -{51,-40,18}, -{51,-40,19}, -{51,-40,20}, -{51,-40,21}, -{51,-40,22}, -{51,-40,23}, -{51,-40,24}, -{51,-40,25}, -{51,-40,26}, -{51,-40,27}, -{51,-40,28}, -{51,-40,29}, -{51,-40,30}, -{51,-40,31}, -{51,-40,32}, -{51,-40,33}, -{51,-40,34}, -{51,-40,35}, -{51,-40,36}, -{51,-40,37}, -{51,-40,38}, -{51,-40,39}, -{51,-40,40}, -{51,-40,41}, -{51,-40,42}, -{51,-40,43}, -{51,-40,44}, -{51,-40,45}, -{51,-40,46}, -{51,-40,47}, -{51,-40,48}, -{51,-40,49}, -{51,-40,50}, -{51,-40,51}, -{51,-40,52}, -{51,-40,53}, -{51,-40,54}, -{51,-39,7}, -{51,-39,8}, -{51,-39,9}, -{51,-39,10}, -{51,-39,11}, -{51,-39,12}, -{51,-39,13}, -{51,-39,14}, -{51,-39,15}, -{51,-39,16}, -{51,-39,17}, -{51,-39,18}, -{51,-39,19}, -{51,-39,20}, -{51,-39,21}, -{51,-39,22}, -{51,-39,23}, -{51,-39,24}, -{51,-39,25}, -{51,-39,26}, -{51,-39,27}, -{51,-39,28}, -{51,-39,29}, -{51,-39,30}, -{51,-39,31}, -{51,-39,32}, -{51,-39,33}, -{51,-39,34}, -{51,-39,35}, -{51,-39,36}, -{51,-39,37}, -{51,-39,38}, -{51,-39,39}, -{51,-39,40}, -{51,-39,41}, -{51,-39,42}, -{51,-39,43}, -{51,-39,44}, -{51,-39,45}, -{51,-39,46}, -{51,-39,47}, -{51,-39,48}, -{51,-39,49}, -{51,-39,50}, -{51,-39,51}, -{51,-39,52}, -{51,-39,53}, -{51,-39,54}, -{51,-38,5}, -{51,-38,6}, -{51,-38,7}, -{51,-38,8}, -{51,-38,9}, -{51,-38,10}, -{51,-38,11}, -{51,-38,12}, -{51,-38,13}, -{51,-38,14}, -{51,-38,15}, -{51,-38,16}, -{51,-38,17}, -{51,-38,18}, -{51,-38,19}, -{51,-38,20}, -{51,-38,21}, -{51,-38,22}, -{51,-38,23}, -{51,-38,24}, -{51,-38,25}, -{51,-38,26}, -{51,-38,27}, -{51,-38,28}, -{51,-38,29}, -{51,-38,30}, -{51,-38,31}, -{51,-38,32}, -{51,-38,33}, -{51,-38,34}, -{51,-38,35}, -{51,-38,36}, -{51,-38,37}, -{51,-38,38}, -{51,-38,39}, -{51,-38,40}, -{51,-38,41}, -{51,-38,42}, -{51,-38,43}, -{51,-38,44}, -{51,-38,45}, -{51,-38,46}, -{51,-38,47}, -{51,-38,48}, -{51,-38,49}, -{51,-38,50}, -{51,-38,51}, -{51,-38,52}, -{51,-38,53}, -{51,-38,54}, -{51,-37,3}, -{51,-37,4}, -{51,-37,5}, -{51,-37,6}, -{51,-37,7}, -{51,-37,8}, -{51,-37,9}, -{51,-37,10}, -{51,-37,11}, -{51,-37,12}, -{51,-37,13}, -{51,-37,14}, -{51,-37,15}, -{51,-37,16}, -{51,-37,17}, -{51,-37,18}, -{51,-37,19}, -{51,-37,20}, -{51,-37,21}, -{51,-37,22}, -{51,-37,23}, -{51,-37,24}, -{51,-37,25}, -{51,-37,26}, -{51,-37,27}, -{51,-37,28}, -{51,-37,29}, -{51,-37,30}, -{51,-37,31}, -{51,-37,32}, -{51,-37,33}, -{51,-37,34}, -{51,-37,35}, -{51,-37,36}, -{51,-37,37}, -{51,-37,38}, -{51,-37,39}, -{51,-37,40}, -{51,-37,41}, -{51,-37,42}, -{51,-37,43}, -{51,-37,44}, -{51,-37,45}, -{51,-37,46}, -{51,-37,47}, -{51,-37,48}, -{51,-37,49}, -{51,-37,50}, -{51,-37,51}, -{51,-37,52}, -{51,-37,53}, -{51,-37,54}, -{51,-36,1}, -{51,-36,2}, -{51,-36,3}, -{51,-36,4}, -{51,-36,5}, -{51,-36,6}, -{51,-36,7}, -{51,-36,8}, -{51,-36,9}, -{51,-36,10}, -{51,-36,11}, -{51,-36,12}, -{51,-36,13}, -{51,-36,14}, -{51,-36,15}, -{51,-36,16}, -{51,-36,17}, -{51,-36,18}, -{51,-36,19}, -{51,-36,20}, -{51,-36,21}, -{51,-36,22}, -{51,-36,23}, -{51,-36,24}, -{51,-36,25}, -{51,-36,26}, -{51,-36,27}, -{51,-36,28}, -{51,-36,29}, -{51,-36,30}, -{51,-36,31}, -{51,-36,32}, -{51,-36,33}, -{51,-36,34}, -{51,-36,35}, -{51,-36,36}, -{51,-36,37}, -{51,-36,38}, -{51,-36,39}, -{51,-36,40}, -{51,-36,41}, -{51,-36,42}, -{51,-36,43}, -{51,-36,44}, -{51,-36,45}, -{51,-36,46}, -{51,-36,47}, -{51,-36,48}, -{51,-36,49}, -{51,-36,50}, -{51,-36,51}, -{51,-36,52}, -{51,-36,53}, -{51,-36,54}, -{51,-35,-1}, -{51,-35,0}, -{51,-35,1}, -{51,-35,2}, -{51,-35,3}, -{51,-35,4}, -{51,-35,5}, -{51,-35,6}, -{51,-35,7}, -{51,-35,8}, -{51,-35,9}, -{51,-35,10}, -{51,-35,11}, -{51,-35,12}, -{51,-35,13}, -{51,-35,14}, -{51,-35,15}, -{51,-35,16}, -{51,-35,17}, -{51,-35,18}, -{51,-35,19}, -{51,-35,20}, -{51,-35,21}, -{51,-35,22}, -{51,-35,23}, -{51,-35,24}, -{51,-35,25}, -{51,-35,26}, -{51,-35,27}, -{51,-35,28}, -{51,-35,29}, -{51,-35,30}, -{51,-35,31}, -{51,-35,32}, -{51,-35,33}, -{51,-35,34}, -{51,-35,35}, -{51,-35,36}, -{51,-35,37}, -{51,-35,38}, -{51,-35,39}, -{51,-35,40}, -{51,-35,41}, -{51,-35,42}, -{51,-35,43}, -{51,-35,44}, -{51,-35,45}, -{51,-35,46}, -{51,-35,47}, -{51,-35,48}, -{51,-35,49}, -{51,-35,50}, -{51,-35,51}, -{51,-35,52}, -{51,-35,53}, -{51,-35,54}, -{51,-34,-2}, -{51,-34,-1}, -{51,-34,0}, -{51,-34,1}, -{51,-34,2}, -{51,-34,3}, -{51,-34,4}, -{51,-34,5}, -{51,-34,6}, -{51,-34,7}, -{51,-34,8}, -{51,-34,9}, -{51,-34,10}, -{51,-34,11}, -{51,-34,12}, -{51,-34,13}, -{51,-34,14}, -{51,-34,15}, -{51,-34,16}, -{51,-34,17}, -{51,-34,18}, -{51,-34,19}, -{51,-34,20}, -{51,-34,21}, -{51,-34,22}, -{51,-34,23}, -{51,-34,24}, -{51,-34,25}, -{51,-34,26}, -{51,-34,27}, -{51,-34,28}, -{51,-34,29}, -{51,-34,30}, -{51,-34,31}, -{51,-34,32}, -{51,-34,33}, -{51,-34,34}, -{51,-34,35}, -{51,-34,36}, -{51,-34,37}, -{51,-34,38}, -{51,-34,39}, -{51,-34,40}, -{51,-34,41}, -{51,-34,42}, -{51,-34,43}, -{51,-34,44}, -{51,-34,45}, -{51,-34,46}, -{51,-34,47}, -{51,-34,48}, -{51,-34,49}, -{51,-34,50}, -{51,-34,51}, -{51,-34,52}, -{51,-34,53}, -{51,-34,54}, -{51,-33,-4}, -{51,-33,-3}, -{51,-33,-2}, -{51,-33,-1}, -{51,-33,0}, -{51,-33,1}, -{51,-33,2}, -{51,-33,3}, -{51,-33,4}, -{51,-33,5}, -{51,-33,6}, -{51,-33,7}, -{51,-33,8}, -{51,-33,9}, -{51,-33,10}, -{51,-33,11}, -{51,-33,12}, -{51,-33,13}, -{51,-33,14}, -{51,-33,15}, -{51,-33,16}, -{51,-33,17}, -{51,-33,18}, -{51,-33,19}, -{51,-33,20}, -{51,-33,21}, -{51,-33,22}, -{51,-33,23}, -{51,-33,24}, -{51,-33,25}, -{51,-33,26}, -{51,-33,27}, -{51,-33,28}, -{51,-33,29}, -{51,-33,30}, -{51,-33,31}, -{51,-33,32}, -{51,-33,33}, -{51,-33,34}, -{51,-33,35}, -{51,-33,36}, -{51,-33,37}, -{51,-33,38}, -{51,-33,39}, -{51,-33,40}, -{51,-33,41}, -{51,-33,42}, -{51,-33,43}, -{51,-33,44}, -{51,-33,45}, -{51,-33,46}, -{51,-33,47}, -{51,-33,48}, -{51,-33,49}, -{51,-33,50}, -{51,-33,51}, -{51,-33,52}, -{51,-33,53}, -{51,-33,54}, -{51,-32,-6}, -{51,-32,-5}, -{51,-32,-4}, -{51,-32,-3}, -{51,-32,-2}, -{51,-32,-1}, -{51,-32,0}, -{51,-32,1}, -{51,-32,2}, -{51,-32,3}, -{51,-32,4}, -{51,-32,5}, -{51,-32,6}, -{51,-32,7}, -{51,-32,8}, -{51,-32,9}, -{51,-32,10}, -{51,-32,11}, -{51,-32,12}, -{51,-32,13}, -{51,-32,14}, -{51,-32,15}, -{51,-32,16}, -{51,-32,17}, -{51,-32,18}, -{51,-32,19}, -{51,-32,20}, -{51,-32,21}, -{51,-32,22}, -{51,-32,23}, -{51,-32,24}, -{51,-32,25}, -{51,-32,26}, -{51,-32,27}, -{51,-32,28}, -{51,-32,29}, -{51,-32,30}, -{51,-32,31}, -{51,-32,32}, -{51,-32,33}, -{51,-32,34}, -{51,-32,35}, -{51,-32,36}, -{51,-32,37}, -{51,-32,38}, -{51,-32,39}, -{51,-32,40}, -{51,-32,41}, -{51,-32,42}, -{51,-32,43}, -{51,-32,44}, -{51,-32,45}, -{51,-32,46}, -{51,-32,47}, -{51,-32,48}, -{51,-32,49}, -{51,-32,50}, -{51,-32,51}, -{51,-32,52}, -{51,-32,53}, -{51,-32,54}, -{51,-32,55}, -{51,-31,-7}, -{51,-31,-6}, -{51,-31,-5}, -{51,-31,-4}, -{51,-31,-3}, -{51,-31,-2}, -{51,-31,-1}, -{51,-31,0}, -{51,-31,1}, -{51,-31,2}, -{51,-31,3}, -{51,-31,4}, -{51,-31,5}, -{51,-31,6}, -{51,-31,7}, -{51,-31,8}, -{51,-31,9}, -{51,-31,10}, -{51,-31,11}, -{51,-31,12}, -{51,-31,13}, -{51,-31,14}, -{51,-31,15}, -{51,-31,16}, -{51,-31,17}, -{51,-31,18}, -{51,-31,19}, -{51,-31,20}, -{51,-31,21}, -{51,-31,22}, -{51,-31,23}, -{51,-31,24}, -{51,-31,25}, -{51,-31,26}, -{51,-31,27}, -{51,-31,28}, -{51,-31,29}, -{51,-31,30}, -{51,-31,31}, -{51,-31,32}, -{51,-31,33}, -{51,-31,34}, -{51,-31,35}, -{51,-31,36}, -{51,-31,37}, -{51,-31,38}, -{51,-31,39}, -{51,-31,40}, -{51,-31,41}, -{51,-31,42}, -{51,-31,43}, -{51,-31,44}, -{51,-31,45}, -{51,-31,46}, -{51,-31,47}, -{51,-31,48}, -{51,-31,49}, -{51,-31,50}, -{51,-31,51}, -{51,-31,52}, -{51,-31,53}, -{51,-31,54}, -{51,-31,55}, -{51,-30,-9}, -{51,-30,-8}, -{51,-30,-7}, -{51,-30,-6}, -{51,-30,-5}, -{51,-30,-4}, -{51,-30,-3}, -{51,-30,-2}, -{51,-30,-1}, -{51,-30,0}, -{51,-30,1}, -{51,-30,2}, -{51,-30,3}, -{51,-30,4}, -{51,-30,5}, -{51,-30,6}, -{51,-30,7}, -{51,-30,8}, -{51,-30,9}, -{51,-30,10}, -{51,-30,11}, -{51,-30,12}, -{51,-30,13}, -{51,-30,14}, -{51,-30,15}, -{51,-30,16}, -{51,-30,17}, -{51,-30,18}, -{51,-30,19}, -{51,-30,20}, -{51,-30,21}, -{51,-30,22}, -{51,-30,23}, -{51,-30,24}, -{51,-30,25}, -{51,-30,26}, -{51,-30,27}, -{51,-30,28}, -{51,-30,29}, -{51,-30,30}, -{51,-30,31}, -{51,-30,32}, -{51,-30,33}, -{51,-30,34}, -{51,-30,35}, -{51,-30,36}, -{51,-30,37}, -{51,-30,38}, -{51,-30,39}, -{51,-30,40}, -{51,-30,41}, -{51,-30,42}, -{51,-30,43}, -{51,-30,44}, -{51,-30,45}, -{51,-30,46}, -{51,-30,47}, -{51,-30,48}, -{51,-30,49}, -{51,-30,50}, -{51,-30,51}, -{51,-30,52}, -{51,-30,53}, -{51,-30,54}, -{51,-30,55}, -{51,-29,-10}, -{51,-29,-9}, -{51,-29,-8}, -{51,-29,-7}, -{51,-29,-6}, -{51,-29,-5}, -{51,-29,-4}, -{51,-29,-3}, -{51,-29,-2}, -{51,-29,-1}, -{51,-29,0}, -{51,-29,1}, -{51,-29,2}, -{51,-29,3}, -{51,-29,4}, -{51,-29,5}, -{51,-29,6}, -{51,-29,7}, -{51,-29,8}, -{51,-29,9}, -{51,-29,10}, -{51,-29,11}, -{51,-29,12}, -{51,-29,13}, -{51,-29,14}, -{51,-29,15}, -{51,-29,16}, -{51,-29,17}, -{51,-29,18}, -{51,-29,19}, -{51,-29,20}, -{51,-29,21}, -{51,-29,22}, -{51,-29,23}, -{51,-29,24}, -{51,-29,25}, -{51,-29,26}, -{51,-29,27}, -{51,-29,28}, -{51,-29,29}, -{51,-29,30}, -{51,-29,31}, -{51,-29,32}, -{51,-29,33}, -{51,-29,34}, -{51,-29,35}, -{51,-29,36}, -{51,-29,37}, -{51,-29,38}, -{51,-29,39}, -{51,-29,40}, -{51,-29,41}, -{51,-29,42}, -{51,-29,43}, -{51,-29,44}, -{51,-29,45}, -{51,-29,46}, -{51,-29,47}, -{51,-29,48}, -{51,-29,49}, -{51,-29,50}, -{51,-29,51}, -{51,-29,52}, -{51,-29,53}, -{51,-29,54}, -{51,-29,55}, -{51,-28,-12}, -{51,-28,-11}, -{51,-28,-10}, -{51,-28,-9}, -{51,-28,-8}, -{51,-28,-7}, -{51,-28,-6}, -{51,-28,-5}, -{51,-28,-4}, -{51,-28,-3}, -{51,-28,-2}, -{51,-28,-1}, -{51,-28,0}, -{51,-28,1}, -{51,-28,2}, -{51,-28,3}, -{51,-28,4}, -{51,-28,5}, -{51,-28,6}, -{51,-28,7}, -{51,-28,8}, -{51,-28,9}, -{51,-28,10}, -{51,-28,11}, -{51,-28,12}, -{51,-28,13}, -{51,-28,14}, -{51,-28,15}, -{51,-28,16}, -{51,-28,17}, -{51,-28,18}, -{51,-28,19}, -{51,-28,20}, -{51,-28,21}, -{51,-28,22}, -{51,-28,23}, -{51,-28,24}, -{51,-28,25}, -{51,-28,26}, -{51,-28,27}, -{51,-28,28}, -{51,-28,29}, -{51,-28,30}, -{51,-28,31}, -{51,-28,32}, -{51,-28,33}, -{51,-28,34}, -{51,-28,35}, -{51,-28,36}, -{51,-28,37}, -{51,-28,38}, -{51,-28,39}, -{51,-28,40}, -{51,-28,41}, -{51,-28,42}, -{51,-28,43}, -{51,-28,44}, -{51,-28,45}, -{51,-28,46}, -{51,-28,47}, -{51,-28,48}, -{51,-28,49}, -{51,-28,50}, -{51,-28,51}, -{51,-28,52}, -{51,-28,53}, -{51,-28,54}, -{51,-28,55}, -{51,-27,-13}, -{51,-27,-12}, -{51,-27,-11}, -{51,-27,-10}, -{51,-27,-9}, -{51,-27,-8}, -{51,-27,-7}, -{51,-27,-6}, -{51,-27,-5}, -{51,-27,-4}, -{51,-27,-3}, -{51,-27,-2}, -{51,-27,-1}, -{51,-27,0}, -{51,-27,1}, -{51,-27,2}, -{51,-27,3}, -{51,-27,4}, -{51,-27,5}, -{51,-27,6}, -{51,-27,7}, -{51,-27,8}, -{51,-27,9}, -{51,-27,10}, -{51,-27,11}, -{51,-27,12}, -{51,-27,13}, -{51,-27,14}, -{51,-27,15}, -{51,-27,16}, -{51,-27,17}, -{51,-27,18}, -{51,-27,19}, -{51,-27,20}, -{51,-27,21}, -{51,-27,22}, -{51,-27,23}, -{51,-27,24}, -{51,-27,25}, -{51,-27,26}, -{51,-27,27}, -{51,-27,28}, -{51,-27,29}, -{51,-27,30}, -{51,-27,31}, -{51,-27,32}, -{51,-27,33}, -{51,-27,34}, -{51,-27,35}, -{51,-27,36}, -{51,-27,37}, -{51,-27,38}, -{51,-27,39}, -{51,-27,40}, -{51,-27,41}, -{51,-27,42}, -{51,-27,43}, -{51,-27,44}, -{51,-27,45}, -{51,-27,46}, -{51,-27,47}, -{51,-27,48}, -{51,-27,49}, -{51,-27,50}, -{51,-27,51}, -{51,-27,52}, -{51,-27,53}, -{51,-27,54}, -{51,-27,55}, -{51,-26,-15}, -{51,-26,-14}, -{51,-26,-13}, -{51,-26,-12}, -{51,-26,-11}, -{51,-26,-10}, -{51,-26,-9}, -{51,-26,-8}, -{51,-26,-7}, -{51,-26,-6}, -{51,-26,-5}, -{51,-26,-4}, -{51,-26,-3}, -{51,-26,-2}, -{51,-26,-1}, -{51,-26,0}, -{51,-26,1}, -{51,-26,2}, -{51,-26,3}, -{51,-26,4}, -{51,-26,5}, -{51,-26,6}, -{51,-26,7}, -{51,-26,8}, -{51,-26,9}, -{51,-26,10}, -{51,-26,11}, -{51,-26,12}, -{51,-26,13}, -{51,-26,14}, -{51,-26,15}, -{51,-26,16}, -{51,-26,17}, -{51,-26,18}, -{51,-26,19}, -{51,-26,20}, -{51,-26,21}, -{51,-26,22}, -{51,-26,23}, -{51,-26,24}, -{51,-26,25}, -{51,-26,26}, -{51,-26,27}, -{51,-26,28}, -{51,-26,29}, -{51,-26,30}, -{51,-26,31}, -{51,-26,32}, -{51,-26,33}, -{51,-26,34}, -{51,-26,35}, -{51,-26,36}, -{51,-26,37}, -{51,-26,38}, -{51,-26,39}, -{51,-26,40}, -{51,-26,41}, -{51,-26,42}, -{51,-26,43}, -{51,-26,44}, -{51,-26,45}, -{51,-26,46}, -{51,-26,47}, -{51,-26,48}, -{51,-26,49}, -{51,-26,50}, -{51,-26,51}, -{51,-26,52}, -{51,-26,53}, -{51,-26,54}, -{51,-26,55}, -{51,-25,-16}, -{51,-25,-15}, -{51,-25,-14}, -{51,-25,-13}, -{51,-25,-12}, -{51,-25,-11}, -{51,-25,-10}, -{51,-25,-9}, -{51,-25,-8}, -{51,-25,-7}, -{51,-25,-6}, -{51,-25,-5}, -{51,-25,-4}, -{51,-25,-3}, -{51,-25,-2}, -{51,-25,-1}, -{51,-25,0}, -{51,-25,1}, -{51,-25,2}, -{51,-25,3}, -{51,-25,4}, -{51,-25,5}, -{51,-25,6}, -{51,-25,7}, -{51,-25,8}, -{51,-25,9}, -{51,-25,10}, -{51,-25,11}, -{51,-25,12}, -{51,-25,13}, -{51,-25,14}, -{51,-25,15}, -{51,-25,16}, -{51,-25,17}, -{51,-25,18}, -{51,-25,19}, -{51,-25,20}, -{51,-25,21}, -{51,-25,22}, -{51,-25,23}, -{51,-25,24}, -{51,-25,25}, -{51,-25,26}, -{51,-25,27}, -{51,-25,28}, -{51,-25,29}, -{51,-25,30}, -{51,-25,31}, -{51,-25,32}, -{51,-25,33}, -{51,-25,34}, -{51,-25,35}, -{51,-25,36}, -{51,-25,37}, -{51,-25,38}, -{51,-25,39}, -{51,-25,40}, -{51,-25,41}, -{51,-25,42}, -{51,-25,43}, -{51,-25,44}, -{51,-25,45}, -{51,-25,46}, -{51,-25,47}, -{51,-25,48}, -{51,-25,49}, -{51,-25,50}, -{51,-25,51}, -{51,-25,52}, -{51,-25,53}, -{51,-25,54}, -{51,-25,55}, -{51,-24,-18}, -{51,-24,-17}, -{51,-24,-16}, -{51,-24,-15}, -{51,-24,-14}, -{51,-24,-13}, -{51,-24,-12}, -{51,-24,-11}, -{51,-24,-10}, -{51,-24,-9}, -{51,-24,-8}, -{51,-24,-7}, -{51,-24,-6}, -{51,-24,-5}, -{51,-24,-4}, -{51,-24,-3}, -{51,-24,-2}, -{51,-24,-1}, -{51,-24,0}, -{51,-24,1}, -{51,-24,2}, -{51,-24,3}, -{51,-24,4}, -{51,-24,5}, -{51,-24,6}, -{51,-24,7}, -{51,-24,8}, -{51,-24,9}, -{51,-24,10}, -{51,-24,11}, -{51,-24,12}, -{51,-24,13}, -{51,-24,14}, -{51,-24,15}, -{51,-24,16}, -{51,-24,17}, -{51,-24,18}, -{51,-24,19}, -{51,-24,20}, -{51,-24,21}, -{51,-24,22}, -{51,-24,23}, -{51,-24,24}, -{51,-24,25}, -{51,-24,26}, -{51,-24,27}, -{51,-24,28}, -{51,-24,29}, -{51,-24,30}, -{51,-24,31}, -{51,-24,32}, -{51,-24,33}, -{51,-24,34}, -{51,-24,35}, -{51,-24,36}, -{51,-24,37}, -{51,-24,38}, -{51,-24,39}, -{51,-24,40}, -{51,-24,41}, -{51,-24,42}, -{51,-24,43}, -{51,-24,44}, -{51,-24,45}, -{51,-24,46}, -{51,-24,47}, -{51,-24,48}, -{51,-24,49}, -{51,-24,50}, -{51,-24,51}, -{51,-24,52}, -{51,-24,53}, -{51,-24,54}, -{51,-24,55}, -{51,-23,-19}, -{51,-23,-18}, -{51,-23,-17}, -{51,-23,-16}, -{51,-23,-15}, -{51,-23,-14}, -{51,-23,-13}, -{51,-23,-12}, -{51,-23,-11}, -{51,-23,-10}, -{51,-23,-9}, -{51,-23,-8}, -{51,-23,-7}, -{51,-23,-6}, -{51,-23,-5}, -{51,-23,-4}, -{51,-23,-3}, -{51,-23,-2}, -{51,-23,-1}, -{51,-23,0}, -{51,-23,1}, -{51,-23,2}, -{51,-23,3}, -{51,-23,4}, -{51,-23,5}, -{51,-23,6}, -{51,-23,7}, -{51,-23,8}, -{51,-23,9}, -{51,-23,10}, -{51,-23,11}, -{51,-23,12}, -{51,-23,13}, -{51,-23,14}, -{51,-23,15}, -{51,-23,16}, -{51,-23,17}, -{51,-23,18}, -{51,-23,19}, -{51,-23,20}, -{51,-23,21}, -{51,-23,22}, -{51,-23,23}, -{51,-23,24}, -{51,-23,25}, -{51,-23,26}, -{51,-23,27}, -{51,-23,28}, -{51,-23,29}, -{51,-23,30}, -{51,-23,31}, -{51,-23,32}, -{51,-23,33}, -{51,-23,34}, -{51,-23,35}, -{51,-23,36}, -{51,-23,37}, -{51,-23,38}, -{51,-23,39}, -{51,-23,40}, -{51,-23,41}, -{51,-23,42}, -{51,-23,43}, -{51,-23,44}, -{51,-23,45}, -{51,-23,46}, -{51,-23,47}, -{51,-23,48}, -{51,-23,49}, -{51,-23,50}, -{51,-23,51}, -{51,-23,52}, -{51,-23,53}, -{51,-23,54}, -{51,-23,55}, -{51,-22,-21}, -{51,-22,-20}, -{51,-22,-19}, -{51,-22,-18}, -{51,-22,-17}, -{51,-22,-16}, -{51,-22,-15}, -{51,-22,-14}, -{51,-22,-13}, -{51,-22,-12}, -{51,-22,-11}, -{51,-22,-10}, -{51,-22,-9}, -{51,-22,-8}, -{51,-22,-7}, -{51,-22,-6}, -{51,-22,-5}, -{51,-22,-4}, -{51,-22,-3}, -{51,-22,-2}, -{51,-22,-1}, -{51,-22,0}, -{51,-22,1}, -{51,-22,2}, -{51,-22,3}, -{51,-22,4}, -{51,-22,5}, -{51,-22,6}, -{51,-22,7}, -{51,-22,8}, -{51,-22,9}, -{51,-22,10}, -{51,-22,11}, -{51,-22,12}, -{51,-22,13}, -{51,-22,14}, -{51,-22,15}, -{51,-22,16}, -{51,-22,17}, -{51,-22,18}, -{51,-22,19}, -{51,-22,20}, -{51,-22,21}, -{51,-22,22}, -{51,-22,23}, -{51,-22,24}, -{51,-22,25}, -{51,-22,26}, -{51,-22,27}, -{51,-22,28}, -{51,-22,29}, -{51,-22,30}, -{51,-22,31}, -{51,-22,32}, -{51,-22,33}, -{51,-22,34}, -{51,-22,35}, -{51,-22,36}, -{51,-22,37}, -{51,-22,38}, -{51,-22,39}, -{51,-22,40}, -{51,-22,41}, -{51,-22,42}, -{51,-22,43}, -{51,-22,44}, -{51,-22,45}, -{51,-22,46}, -{51,-22,47}, -{51,-22,48}, -{51,-22,49}, -{51,-22,50}, -{51,-22,51}, -{51,-22,52}, -{51,-22,53}, -{51,-22,54}, -{51,-22,55}, -{51,-21,-22}, -{51,-21,-21}, -{51,-21,-20}, -{51,-21,-19}, -{51,-21,-18}, -{51,-21,-17}, -{51,-21,-16}, -{51,-21,-15}, -{51,-21,-14}, -{51,-21,-13}, -{51,-21,-12}, -{51,-21,-11}, -{51,-21,-10}, -{51,-21,-9}, -{51,-21,-8}, -{51,-21,-7}, -{51,-21,-6}, -{51,-21,-5}, -{51,-21,-4}, -{51,-21,-3}, -{51,-21,-2}, -{51,-21,-1}, -{51,-21,0}, -{51,-21,1}, -{51,-21,2}, -{51,-21,3}, -{51,-21,4}, -{51,-21,5}, -{51,-21,6}, -{51,-21,7}, -{51,-21,8}, -{51,-21,9}, -{51,-21,10}, -{51,-21,11}, -{51,-21,12}, -{51,-21,13}, -{51,-21,14}, -{51,-21,15}, -{51,-21,16}, -{51,-21,17}, -{51,-21,18}, -{51,-21,19}, -{51,-21,20}, -{51,-21,21}, -{51,-21,22}, -{51,-21,23}, -{51,-21,24}, -{51,-21,25}, -{51,-21,26}, -{51,-21,27}, -{51,-21,28}, -{51,-21,29}, -{51,-21,30}, -{51,-21,31}, -{51,-21,32}, -{51,-21,33}, -{51,-21,34}, -{51,-21,35}, -{51,-21,36}, -{51,-21,37}, -{51,-21,38}, -{51,-21,39}, -{51,-21,40}, -{51,-21,41}, -{51,-21,42}, -{51,-21,43}, -{51,-21,44}, -{51,-21,45}, -{51,-21,46}, -{51,-21,47}, -{51,-21,48}, -{51,-21,49}, -{51,-21,50}, -{51,-21,51}, -{51,-21,52}, -{51,-21,53}, -{51,-21,54}, -{51,-21,55}, -{51,-20,-23}, -{51,-20,-22}, -{51,-20,-21}, -{51,-20,-20}, -{51,-20,-19}, -{51,-20,-18}, -{51,-20,-17}, -{51,-20,-16}, -{51,-20,-15}, -{51,-20,-14}, -{51,-20,-13}, -{51,-20,-12}, -{51,-20,-11}, -{51,-20,-10}, -{51,-20,-9}, -{51,-20,-8}, -{51,-20,-7}, -{51,-20,-6}, -{51,-20,-5}, -{51,-20,-4}, -{51,-20,-3}, -{51,-20,-2}, -{51,-20,-1}, -{51,-20,0}, -{51,-20,1}, -{51,-20,2}, -{51,-20,3}, -{51,-20,4}, -{51,-20,5}, -{51,-20,6}, -{51,-20,7}, -{51,-20,8}, -{51,-20,9}, -{51,-20,10}, -{51,-20,11}, -{51,-20,12}, -{51,-20,13}, -{51,-20,14}, -{51,-20,15}, -{51,-20,16}, -{51,-20,17}, -{51,-20,18}, -{51,-20,19}, -{51,-20,20}, -{51,-20,21}, -{51,-20,22}, -{51,-20,23}, -{51,-20,24}, -{51,-20,25}, -{51,-20,26}, -{51,-20,27}, -{51,-20,28}, -{51,-20,29}, -{51,-20,30}, -{51,-20,31}, -{51,-20,32}, -{51,-20,33}, -{51,-20,34}, -{51,-20,35}, -{51,-20,36}, -{51,-20,37}, -{51,-20,38}, -{51,-20,39}, -{51,-20,40}, -{51,-20,41}, -{51,-20,42}, -{51,-20,43}, -{51,-20,44}, -{51,-20,45}, -{51,-20,46}, -{51,-20,47}, -{51,-20,48}, -{51,-20,49}, -{51,-20,50}, -{51,-20,51}, -{51,-20,52}, -{51,-20,53}, -{51,-20,54}, -{51,-20,55}, -{51,-19,-25}, -{51,-19,-24}, -{51,-19,-23}, -{51,-19,-22}, -{51,-19,-21}, -{51,-19,-20}, -{51,-19,-19}, -{51,-19,-18}, -{51,-19,-17}, -{51,-19,-16}, -{51,-19,-15}, -{51,-19,-14}, -{51,-19,-13}, -{51,-19,-12}, -{51,-19,-11}, -{51,-19,-10}, -{51,-19,-9}, -{51,-19,-8}, -{51,-19,-7}, -{51,-19,-6}, -{51,-19,-5}, -{51,-19,-4}, -{51,-19,-3}, -{51,-19,-2}, -{51,-19,-1}, -{51,-19,0}, -{51,-19,1}, -{51,-19,2}, -{51,-19,3}, -{51,-19,4}, -{51,-19,5}, -{51,-19,6}, -{51,-19,7}, -{51,-19,8}, -{51,-19,9}, -{51,-19,10}, -{51,-19,11}, -{51,-19,12}, -{51,-19,13}, -{51,-19,14}, -{51,-19,15}, -{51,-19,16}, -{51,-19,17}, -{51,-19,18}, -{51,-19,19}, -{51,-19,20}, -{51,-19,21}, -{51,-19,22}, -{51,-19,23}, -{51,-19,24}, -{51,-19,25}, -{51,-19,26}, -{51,-19,27}, -{51,-19,28}, -{51,-19,29}, -{51,-19,30}, -{51,-19,31}, -{51,-19,32}, -{51,-19,33}, -{51,-19,34}, -{51,-19,35}, -{51,-19,36}, -{51,-19,37}, -{51,-19,38}, -{51,-19,39}, -{51,-19,40}, -{51,-19,41}, -{51,-19,42}, -{51,-19,43}, -{51,-19,44}, -{51,-19,45}, -{51,-19,46}, -{51,-19,47}, -{51,-19,48}, -{51,-19,49}, -{51,-19,50}, -{51,-19,51}, -{51,-19,52}, -{51,-19,53}, -{51,-19,54}, -{51,-19,55}, -{51,-18,-26}, -{51,-18,-25}, -{51,-18,-24}, -{51,-18,-23}, -{51,-18,-22}, -{51,-18,-21}, -{51,-18,-20}, -{51,-18,-19}, -{51,-18,-18}, -{51,-18,-17}, -{51,-18,-16}, -{51,-18,-15}, -{51,-18,-14}, -{51,-18,-13}, -{51,-18,-12}, -{51,-18,-11}, -{51,-18,-10}, -{51,-18,-9}, -{51,-18,-8}, -{51,-18,-7}, -{51,-18,-6}, -{51,-18,-5}, -{51,-18,-4}, -{51,-18,-3}, -{51,-18,-2}, -{51,-18,-1}, -{51,-18,0}, -{51,-18,1}, -{51,-18,2}, -{51,-18,3}, -{51,-18,4}, -{51,-18,5}, -{51,-18,6}, -{51,-18,7}, -{51,-18,8}, -{51,-18,9}, -{51,-18,10}, -{51,-18,11}, -{51,-18,12}, -{51,-18,13}, -{51,-18,14}, -{51,-18,15}, -{51,-18,16}, -{51,-18,17}, -{51,-18,18}, -{51,-18,19}, -{51,-18,20}, -{51,-18,21}, -{51,-18,22}, -{51,-18,23}, -{51,-18,24}, -{51,-18,25}, -{51,-18,26}, -{51,-18,27}, -{51,-18,28}, -{51,-18,29}, -{51,-18,30}, -{51,-18,31}, -{51,-18,32}, -{51,-18,33}, -{51,-18,34}, -{51,-18,35}, -{51,-18,36}, -{51,-18,37}, -{51,-18,38}, -{51,-18,39}, -{51,-18,40}, -{51,-18,41}, -{51,-18,42}, -{51,-18,43}, -{51,-18,44}, -{51,-18,45}, -{51,-18,46}, -{51,-18,47}, -{51,-18,48}, -{51,-18,49}, -{51,-18,50}, -{51,-18,51}, -{51,-18,52}, -{51,-18,53}, -{51,-18,54}, -{51,-18,55}, -{51,-17,-27}, -{51,-17,-26}, -{51,-17,-25}, -{51,-17,-24}, -{51,-17,-23}, -{51,-17,-22}, -{51,-17,-21}, -{51,-17,-20}, -{51,-17,-19}, -{51,-17,-18}, -{51,-17,-17}, -{51,-17,-16}, -{51,-17,-15}, -{51,-17,-14}, -{51,-17,-13}, -{51,-17,-12}, -{51,-17,-11}, -{51,-17,-10}, -{51,-17,-9}, -{51,-17,-8}, -{51,-17,-7}, -{51,-17,-6}, -{51,-17,-5}, -{51,-17,-4}, -{51,-17,-3}, -{51,-17,-2}, -{51,-17,-1}, -{51,-17,0}, -{51,-17,1}, -{51,-17,2}, -{51,-17,3}, -{51,-17,4}, -{51,-17,5}, -{51,-17,6}, -{51,-17,7}, -{51,-17,8}, -{51,-17,9}, -{51,-17,10}, -{51,-17,11}, -{51,-17,12}, -{51,-17,13}, -{51,-17,14}, -{51,-17,15}, -{51,-17,16}, -{51,-17,17}, -{51,-17,18}, -{51,-17,19}, -{51,-17,20}, -{51,-17,21}, -{51,-17,22}, -{51,-17,23}, -{51,-17,24}, -{51,-17,25}, -{51,-17,26}, -{51,-17,27}, -{51,-17,28}, -{51,-17,29}, -{51,-17,30}, -{51,-17,31}, -{51,-17,32}, -{51,-17,33}, -{51,-17,34}, -{51,-17,35}, -{51,-17,36}, -{51,-17,37}, -{51,-17,38}, -{51,-17,39}, -{51,-17,40}, -{51,-17,41}, -{51,-17,42}, -{51,-17,43}, -{51,-17,44}, -{51,-17,45}, -{51,-17,46}, -{51,-17,47}, -{51,-17,48}, -{51,-17,49}, -{51,-17,50}, -{51,-17,51}, -{51,-17,52}, -{51,-17,53}, -{51,-17,54}, -{51,-17,55}, -{51,-16,-29}, -{51,-16,-28}, -{51,-16,-27}, -{51,-16,-26}, -{51,-16,-25}, -{51,-16,-24}, -{51,-16,-23}, -{51,-16,-22}, -{51,-16,-21}, -{51,-16,-20}, -{51,-16,-19}, -{51,-16,-18}, -{51,-16,-17}, -{51,-16,-16}, -{51,-16,-15}, -{51,-16,-14}, -{51,-16,-13}, -{51,-16,-12}, -{51,-16,-11}, -{51,-16,-10}, -{51,-16,-9}, -{51,-16,-8}, -{51,-16,-7}, -{51,-16,-6}, -{51,-16,-5}, -{51,-16,-4}, -{51,-16,-3}, -{51,-16,-2}, -{51,-16,-1}, -{51,-16,0}, -{51,-16,1}, -{51,-16,2}, -{51,-16,3}, -{51,-16,4}, -{51,-16,5}, -{51,-16,6}, -{51,-16,7}, -{51,-16,8}, -{51,-16,9}, -{51,-16,10}, -{51,-16,11}, -{51,-16,12}, -{51,-16,13}, -{51,-16,14}, -{51,-16,15}, -{51,-16,16}, -{51,-16,17}, -{51,-16,18}, -{51,-16,19}, -{51,-16,20}, -{51,-16,21}, -{51,-16,22}, -{51,-16,23}, -{51,-16,24}, -{51,-16,25}, -{51,-16,26}, -{51,-16,27}, -{51,-16,28}, -{51,-16,29}, -{51,-16,30}, -{51,-16,31}, -{51,-16,32}, -{51,-16,33}, -{51,-16,34}, -{51,-16,35}, -{51,-16,36}, -{51,-16,37}, -{51,-16,38}, -{51,-16,39}, -{51,-16,40}, -{51,-16,41}, -{51,-16,42}, -{51,-16,43}, -{51,-16,44}, -{51,-16,45}, -{51,-16,46}, -{51,-16,47}, -{51,-16,48}, -{51,-16,49}, -{51,-16,50}, -{51,-16,51}, -{51,-16,52}, -{51,-16,53}, -{51,-16,54}, -{51,-16,55}, -{51,-15,-30}, -{51,-15,-29}, -{51,-15,-28}, -{51,-15,-27}, -{51,-15,-26}, -{51,-15,-25}, -{51,-15,-24}, -{51,-15,-23}, -{51,-15,-22}, -{51,-15,-21}, -{51,-15,-20}, -{51,-15,-19}, -{51,-15,-18}, -{51,-15,-17}, -{51,-15,-16}, -{51,-15,-15}, -{51,-15,-14}, -{51,-15,-13}, -{51,-15,-12}, -{51,-15,-11}, -{51,-15,-10}, -{51,-15,-9}, -{51,-15,-8}, -{51,-15,-7}, -{51,-15,-6}, -{51,-15,-5}, -{51,-15,-4}, -{51,-15,-3}, -{51,-15,-2}, -{51,-15,-1}, -{51,-15,0}, -{51,-15,1}, -{51,-15,2}, -{51,-15,3}, -{51,-15,4}, -{51,-15,5}, -{51,-15,6}, -{51,-15,7}, -{51,-15,8}, -{51,-15,9}, -{51,-15,10}, -{51,-15,11}, -{51,-15,12}, -{51,-15,13}, -{51,-15,14}, -{51,-15,15}, -{51,-15,16}, -{51,-15,17}, -{51,-15,18}, -{51,-15,19}, -{51,-15,20}, -{51,-15,21}, -{51,-15,22}, -{51,-15,23}, -{51,-15,24}, -{51,-15,25}, -{51,-15,26}, -{51,-15,27}, -{51,-15,28}, -{51,-15,29}, -{51,-15,30}, -{51,-15,31}, -{51,-15,32}, -{51,-15,33}, -{51,-15,34}, -{51,-15,35}, -{51,-15,36}, -{51,-15,37}, -{51,-15,38}, -{51,-15,39}, -{51,-15,40}, -{51,-15,41}, -{51,-15,42}, -{51,-15,43}, -{51,-15,44}, -{51,-15,45}, -{51,-15,46}, -{51,-15,47}, -{51,-15,48}, -{51,-15,49}, -{51,-15,50}, -{51,-15,51}, -{51,-15,52}, -{51,-15,53}, -{51,-15,54}, -{51,-15,55}, -{51,-14,-31}, -{51,-14,-30}, -{51,-14,-29}, -{51,-14,-28}, -{51,-14,-27}, -{51,-14,-26}, -{51,-14,-25}, -{51,-14,-24}, -{51,-14,-23}, -{51,-14,-22}, -{51,-14,-21}, -{51,-14,-20}, -{51,-14,-19}, -{51,-14,-18}, -{51,-14,-17}, -{51,-14,-16}, -{51,-14,-15}, -{51,-14,-14}, -{51,-14,-13}, -{51,-14,-12}, -{51,-14,-11}, -{51,-14,-10}, -{51,-14,-9}, -{51,-14,-8}, -{51,-14,-7}, -{51,-14,-6}, -{51,-14,-5}, -{51,-14,-4}, -{51,-14,-3}, -{51,-14,-2}, -{51,-14,-1}, -{51,-14,0}, -{51,-14,1}, -{51,-14,2}, -{51,-14,3}, -{51,-14,4}, -{51,-14,5}, -{51,-14,6}, -{51,-14,7}, -{51,-14,8}, -{51,-14,9}, -{51,-14,10}, -{51,-14,11}, -{51,-14,12}, -{51,-14,13}, -{51,-14,14}, -{51,-14,15}, -{51,-14,16}, -{51,-14,17}, -{51,-14,18}, -{51,-14,19}, -{51,-14,20}, -{51,-14,21}, -{51,-14,22}, -{51,-14,23}, -{51,-14,24}, -{51,-14,25}, -{51,-14,26}, -{51,-14,27}, -{51,-14,28}, -{51,-14,29}, -{51,-14,30}, -{51,-14,31}, -{51,-14,32}, -{51,-14,33}, -{51,-14,34}, -{51,-14,35}, -{51,-14,36}, -{51,-14,37}, -{51,-14,38}, -{51,-14,39}, -{51,-14,40}, -{51,-14,41}, -{51,-14,42}, -{51,-14,43}, -{51,-14,44}, -{51,-14,45}, -{51,-14,46}, -{51,-14,47}, -{51,-14,48}, -{51,-14,49}, -{51,-14,50}, -{51,-14,51}, -{51,-14,52}, -{51,-14,53}, -{51,-14,54}, -{51,-14,55}, -{51,-14,56}, -{51,-13,-32}, -{51,-13,-31}, -{51,-13,-30}, -{51,-13,-29}, -{51,-13,-28}, -{51,-13,-27}, -{51,-13,-26}, -{51,-13,-25}, -{51,-13,-24}, -{51,-13,-23}, -{51,-13,-22}, -{51,-13,-21}, -{51,-13,-20}, -{51,-13,-19}, -{51,-13,-18}, -{51,-13,-17}, -{51,-13,-16}, -{51,-13,-15}, -{51,-13,-14}, -{51,-13,-13}, -{51,-13,-12}, -{51,-13,-11}, -{51,-13,-10}, -{51,-13,-9}, -{51,-13,-8}, -{51,-13,-7}, -{51,-13,-6}, -{51,-13,-5}, -{51,-13,-4}, -{51,-13,-3}, -{51,-13,-2}, -{51,-13,-1}, -{51,-13,0}, -{51,-13,1}, -{51,-13,2}, -{51,-13,3}, -{51,-13,4}, -{51,-13,5}, -{51,-13,6}, -{51,-13,7}, -{51,-13,8}, -{51,-13,9}, -{51,-13,10}, -{51,-13,11}, -{51,-13,12}, -{51,-13,13}, -{51,-13,14}, -{51,-13,15}, -{51,-13,16}, -{51,-13,17}, -{51,-13,18}, -{51,-13,19}, -{51,-13,20}, -{51,-13,21}, -{51,-13,22}, -{51,-13,23}, -{51,-13,24}, -{51,-13,25}, -{51,-13,26}, -{51,-13,27}, -{51,-13,28}, -{51,-13,29}, -{51,-13,30}, -{51,-13,31}, -{51,-13,32}, -{51,-13,33}, -{51,-13,34}, -{51,-13,35}, -{51,-13,36}, -{51,-13,37}, -{51,-13,38}, -{51,-13,39}, -{51,-13,40}, -{51,-13,41}, -{51,-13,42}, -{51,-13,43}, -{51,-13,44}, -{51,-13,45}, -{51,-13,46}, -{51,-13,47}, -{51,-13,48}, -{51,-13,49}, -{51,-13,50}, -{51,-13,51}, -{51,-13,52}, -{51,-13,53}, -{51,-13,54}, -{51,-13,55}, -{51,-13,56}, -{51,-12,-34}, -{51,-12,-33}, -{51,-12,-32}, -{51,-12,-31}, -{51,-12,-30}, -{51,-12,-29}, -{51,-12,-28}, -{51,-12,-27}, -{51,-12,-26}, -{51,-12,-25}, -{51,-12,-24}, -{51,-12,-23}, -{51,-12,-22}, -{51,-12,-21}, -{51,-12,-20}, -{51,-12,-19}, -{51,-12,-18}, -{51,-12,-17}, -{51,-12,-16}, -{51,-12,-15}, -{51,-12,-14}, -{51,-12,-13}, -{51,-12,-12}, -{51,-12,-11}, -{51,-12,-10}, -{51,-12,-9}, -{51,-12,-8}, -{51,-12,-7}, -{51,-12,-6}, -{51,-12,-5}, -{51,-12,-4}, -{51,-12,-3}, -{51,-12,-2}, -{51,-12,-1}, -{51,-12,0}, -{51,-12,1}, -{51,-12,2}, -{51,-12,3}, -{51,-12,4}, -{51,-12,5}, -{51,-12,6}, -{51,-12,7}, -{51,-12,8}, -{51,-12,9}, -{51,-12,10}, -{51,-12,11}, -{51,-12,12}, -{51,-12,13}, -{51,-12,14}, -{51,-12,15}, -{51,-12,16}, -{51,-12,17}, -{51,-12,18}, -{51,-12,19}, -{51,-12,20}, -{51,-12,21}, -{51,-12,22}, -{51,-12,23}, -{51,-12,24}, -{51,-12,25}, -{51,-12,26}, -{51,-12,27}, -{51,-12,28}, -{51,-12,29}, -{51,-12,30}, -{51,-12,31}, -{51,-12,32}, -{51,-12,33}, -{51,-12,34}, -{51,-12,35}, -{51,-12,36}, -{51,-12,37}, -{51,-12,38}, -{51,-12,39}, -{51,-12,40}, -{51,-12,41}, -{51,-12,42}, -{51,-12,43}, -{51,-12,44}, -{51,-12,45}, -{51,-12,46}, -{51,-12,47}, -{51,-12,48}, -{51,-12,49}, -{51,-12,50}, -{51,-12,51}, -{51,-12,52}, -{51,-12,53}, -{51,-12,54}, -{51,-12,55}, -{51,-12,56}, -{51,-11,-35}, -{51,-11,-34}, -{51,-11,-33}, -{51,-11,-32}, -{51,-11,-31}, -{51,-11,-30}, -{51,-11,-29}, -{51,-11,-28}, -{51,-11,-27}, -{51,-11,-26}, -{51,-11,-25}, -{51,-11,-24}, -{51,-11,-23}, -{51,-11,-22}, -{51,-11,-21}, -{51,-11,-20}, -{51,-11,-19}, -{51,-11,-18}, -{51,-11,-17}, -{51,-11,-16}, -{51,-11,-15}, -{51,-11,-14}, -{51,-11,-13}, -{51,-11,-12}, -{51,-11,-11}, -{51,-11,-10}, -{51,-11,-9}, -{51,-11,-8}, -{51,-11,-7}, -{51,-11,-6}, -{51,-11,-5}, -{51,-11,-4}, -{51,-11,-3}, -{51,-11,-2}, -{51,-11,-1}, -{51,-11,0}, -{51,-11,1}, -{51,-11,2}, -{51,-11,3}, -{51,-11,4}, -{51,-11,5}, -{51,-11,6}, -{51,-11,7}, -{51,-11,8}, -{51,-11,9}, -{51,-11,10}, -{51,-11,11}, -{51,-11,12}, -{51,-11,13}, -{51,-11,14}, -{51,-11,15}, -{51,-11,16}, -{51,-11,17}, -{51,-11,18}, -{51,-11,19}, -{51,-11,20}, -{51,-11,21}, -{51,-11,22}, -{51,-11,23}, -{51,-11,24}, -{51,-11,25}, -{51,-11,26}, -{51,-11,27}, -{51,-11,28}, -{51,-11,29}, -{51,-11,30}, -{51,-11,31}, -{51,-11,32}, -{51,-11,33}, -{51,-11,34}, -{51,-11,35}, -{51,-11,36}, -{51,-11,37}, -{51,-11,38}, -{51,-11,39}, -{51,-11,40}, -{51,-11,41}, -{51,-11,42}, -{51,-11,43}, -{51,-11,44}, -{51,-11,45}, -{51,-11,46}, -{51,-11,47}, -{51,-11,48}, -{51,-11,49}, -{51,-11,50}, -{51,-11,51}, -{51,-11,52}, -{51,-11,53}, -{51,-11,54}, -{51,-11,55}, -{51,-11,56}, -{51,-10,-36}, -{51,-10,-35}, -{51,-10,-34}, -{51,-10,-33}, -{51,-10,-32}, -{51,-10,-31}, -{51,-10,-30}, -{51,-10,-29}, -{51,-10,-28}, -{51,-10,-27}, -{51,-10,-26}, -{51,-10,-25}, -{51,-10,-24}, -{51,-10,-23}, -{51,-10,-22}, -{51,-10,-21}, -{51,-10,-20}, -{51,-10,-19}, -{51,-10,-18}, -{51,-10,-17}, -{51,-10,-16}, -{51,-10,-15}, -{51,-10,-14}, -{51,-10,-13}, -{51,-10,-12}, -{51,-10,-11}, -{51,-10,-10}, -{51,-10,-9}, -{51,-10,-8}, -{51,-10,-7}, -{51,-10,-6}, -{51,-10,-5}, -{51,-10,-4}, -{51,-10,-3}, -{51,-10,-2}, -{51,-10,-1}, -{51,-10,0}, -{51,-10,1}, -{51,-10,2}, -{51,-10,3}, -{51,-10,4}, -{51,-10,5}, -{51,-10,6}, -{51,-10,7}, -{51,-10,8}, -{51,-10,9}, -{51,-10,10}, -{51,-10,11}, -{51,-10,12}, -{51,-10,13}, -{51,-10,14}, -{51,-10,15}, -{51,-10,16}, -{51,-10,17}, -{51,-10,18}, -{51,-10,19}, -{51,-10,20}, -{51,-10,21}, -{51,-10,22}, -{51,-10,23}, -{51,-10,24}, -{51,-10,25}, -{51,-10,26}, -{51,-10,27}, -{51,-10,28}, -{51,-10,29}, -{51,-10,30}, -{51,-10,31}, -{51,-10,32}, -{51,-10,33}, -{51,-10,34}, -{51,-10,35}, -{51,-10,36}, -{51,-10,37}, -{51,-10,38}, -{51,-10,39}, -{51,-10,40}, -{51,-10,41}, -{51,-10,42}, -{51,-10,43}, -{51,-10,44}, -{51,-10,45}, -{51,-10,46}, -{51,-10,47}, -{51,-10,48}, -{51,-10,49}, -{51,-10,50}, -{51,-10,51}, -{51,-10,52}, -{51,-10,53}, -{51,-10,54}, -{51,-10,55}, -{51,-10,56}, -{51,-9,-37}, -{51,-9,-36}, -{51,-9,-35}, -{51,-9,-34}, -{51,-9,-33}, -{51,-9,-32}, -{51,-9,-31}, -{51,-9,-30}, -{51,-9,-29}, -{51,-9,-28}, -{51,-9,-27}, -{51,-9,-26}, -{51,-9,-25}, -{51,-9,-24}, -{51,-9,-23}, -{51,-9,-22}, -{51,-9,-21}, -{51,-9,-20}, -{51,-9,-19}, -{51,-9,-18}, -{51,-9,-17}, -{51,-9,-16}, -{51,-9,-15}, -{51,-9,-14}, -{51,-9,-13}, -{51,-9,-12}, -{51,-9,-11}, -{51,-9,-10}, -{51,-9,-9}, -{51,-9,-8}, -{51,-9,-7}, -{51,-9,-6}, -{51,-9,-5}, -{51,-9,-4}, -{51,-9,-3}, -{51,-9,-2}, -{51,-9,-1}, -{51,-9,0}, -{51,-9,1}, -{51,-9,2}, -{51,-9,3}, -{51,-9,4}, -{51,-9,5}, -{51,-9,6}, -{51,-9,7}, -{51,-9,8}, -{51,-9,9}, -{51,-9,10}, -{51,-9,11}, -{51,-9,12}, -{51,-9,13}, -{51,-9,14}, -{51,-9,15}, -{51,-9,16}, -{51,-9,17}, -{51,-9,18}, -{51,-9,19}, -{51,-9,20}, -{51,-9,21}, -{51,-9,22}, -{51,-9,23}, -{51,-9,24}, -{51,-9,25}, -{51,-9,26}, -{51,-9,27}, -{51,-9,28}, -{51,-9,29}, -{51,-9,30}, -{51,-9,31}, -{51,-9,32}, -{51,-9,33}, -{51,-9,34}, -{51,-9,35}, -{51,-9,36}, -{51,-9,37}, -{51,-9,38}, -{51,-9,39}, -{51,-9,40}, -{51,-9,41}, -{51,-9,42}, -{51,-9,43}, -{51,-9,44}, -{51,-9,45}, -{51,-9,46}, -{51,-9,47}, -{51,-9,48}, -{51,-9,49}, -{51,-9,50}, -{51,-9,51}, -{51,-9,52}, -{51,-9,53}, -{51,-9,54}, -{51,-9,55}, -{51,-9,56}, -{51,-8,-39}, -{51,-8,-38}, -{51,-8,-37}, -{51,-8,-36}, -{51,-8,-35}, -{51,-8,-34}, -{51,-8,-33}, -{51,-8,-32}, -{51,-8,-31}, -{51,-8,-30}, -{51,-8,-29}, -{51,-8,-28}, -{51,-8,-27}, -{51,-8,-26}, -{51,-8,-25}, -{51,-8,-24}, -{51,-8,-23}, -{51,-8,-22}, -{51,-8,-21}, -{51,-8,-20}, -{51,-8,-19}, -{51,-8,-18}, -{51,-8,-17}, -{51,-8,-16}, -{51,-8,-15}, -{51,-8,-14}, -{51,-8,-13}, -{51,-8,-12}, -{51,-8,-11}, -{51,-8,-10}, -{51,-8,-9}, -{51,-8,-8}, -{51,-8,-7}, -{51,-8,-6}, -{51,-8,-5}, -{51,-8,-4}, -{51,-8,-3}, -{51,-8,-2}, -{51,-8,-1}, -{51,-8,0}, -{51,-8,1}, -{51,-8,2}, -{51,-8,3}, -{51,-8,4}, -{51,-8,5}, -{51,-8,6}, -{51,-8,7}, -{51,-8,8}, -{51,-8,9}, -{51,-8,10}, -{51,-8,11}, -{51,-8,12}, -{51,-8,13}, -{51,-8,14}, -{51,-8,15}, -{51,-8,16}, -{51,-8,17}, -{51,-8,18}, -{51,-8,19}, -{51,-8,20}, -{51,-8,21}, -{51,-8,22}, -{51,-8,23}, -{51,-8,24}, -{51,-8,25}, -{51,-8,26}, -{51,-8,27}, -{51,-8,28}, -{51,-8,29}, -{51,-8,30}, -{51,-8,31}, -{51,-8,32}, -{51,-8,33}, -{51,-8,34}, -{51,-8,35}, -{51,-8,36}, -{51,-8,37}, -{51,-8,38}, -{51,-8,39}, -{51,-8,40}, -{51,-8,41}, -{51,-8,42}, -{51,-8,43}, -{51,-8,44}, -{51,-8,45}, -{51,-8,46}, -{51,-8,47}, -{51,-8,48}, -{51,-8,49}, -{51,-8,50}, -{51,-8,51}, -{51,-8,52}, -{51,-8,53}, -{51,-8,54}, -{51,-8,55}, -{51,-8,56}, -{51,-7,-40}, -{51,-7,-39}, -{51,-7,-38}, -{51,-7,-37}, -{51,-7,-36}, -{51,-7,-35}, -{51,-7,-34}, -{51,-7,-33}, -{51,-7,-32}, -{51,-7,-31}, -{51,-7,-30}, -{51,-7,-29}, -{51,-7,-28}, -{51,-7,-27}, -{51,-7,-26}, -{51,-7,-25}, -{51,-7,-24}, -{51,-7,-23}, -{51,-7,-22}, -{51,-7,-21}, -{51,-7,-20}, -{51,-7,-19}, -{51,-7,-18}, -{51,-7,-17}, -{51,-7,-16}, -{51,-7,-15}, -{51,-7,-14}, -{51,-7,-13}, -{51,-7,-12}, -{51,-7,-11}, -{51,-7,-10}, -{51,-7,-9}, -{51,-7,-8}, -{51,-7,-7}, -{51,-7,-6}, -{51,-7,-5}, -{51,-7,-4}, -{51,-7,-3}, -{51,-7,-2}, -{51,-7,-1}, -{51,-7,0}, -{51,-7,1}, -{51,-7,2}, -{51,-7,3}, -{51,-7,4}, -{51,-7,5}, -{51,-7,6}, -{51,-7,7}, -{51,-7,8}, -{51,-7,9}, -{51,-7,10}, -{51,-7,11}, -{51,-7,12}, -{51,-7,13}, -{51,-7,14}, -{51,-7,15}, -{51,-7,16}, -{51,-7,17}, -{51,-7,18}, -{51,-7,19}, -{51,-7,20}, -{51,-7,21}, -{51,-7,22}, -{51,-7,23}, -{51,-7,24}, -{51,-7,25}, -{51,-7,26}, -{51,-7,27}, -{51,-7,28}, -{51,-7,29}, -{51,-7,30}, -{51,-7,31}, -{51,-7,32}, -{51,-7,33}, -{51,-7,34}, -{51,-7,35}, -{51,-7,36}, -{51,-7,37}, -{51,-7,38}, -{51,-7,39}, -{51,-7,40}, -{51,-7,41}, -{51,-7,42}, -{51,-7,43}, -{51,-7,44}, -{51,-7,45}, -{51,-7,46}, -{51,-7,47}, -{51,-7,48}, -{51,-7,49}, -{51,-7,50}, -{51,-7,51}, -{51,-7,52}, -{51,-7,53}, -{51,-7,54}, -{51,-7,55}, -{51,-7,56}, -{51,-6,-41}, -{51,-6,-40}, -{51,-6,-39}, -{51,-6,-38}, -{51,-6,-37}, -{51,-6,-36}, -{51,-6,-35}, -{51,-6,-34}, -{51,-6,-33}, -{51,-6,-32}, -{51,-6,-31}, -{51,-6,-30}, -{51,-6,-29}, -{51,-6,-28}, -{51,-6,-27}, -{51,-6,-26}, -{51,-6,-25}, -{51,-6,-24}, -{51,-6,-23}, -{51,-6,-22}, -{51,-6,-21}, -{51,-6,-20}, -{51,-6,-19}, -{51,-6,-18}, -{51,-6,-17}, -{51,-6,-16}, -{51,-6,-15}, -{51,-6,-14}, -{51,-6,-13}, -{51,-6,-12}, -{51,-6,-11}, -{51,-6,-10}, -{51,-6,-9}, -{51,-6,-8}, -{51,-6,-7}, -{51,-6,-6}, -{51,-6,-5}, -{51,-6,-4}, -{51,-6,-3}, -{51,-6,-2}, -{51,-6,-1}, -{51,-6,0}, -{51,-6,1}, -{51,-6,2}, -{51,-6,3}, -{51,-6,4}, -{51,-6,5}, -{51,-6,6}, -{51,-6,7}, -{51,-6,8}, -{51,-6,9}, -{51,-6,10}, -{51,-6,11}, -{51,-6,12}, -{51,-6,13}, -{51,-6,14}, -{51,-6,15}, -{51,-6,16}, -{51,-6,17}, -{51,-6,18}, -{51,-6,19}, -{51,-6,20}, -{51,-6,21}, -{51,-6,22}, -{51,-6,23}, -{51,-6,24}, -{51,-6,25}, -{51,-6,26}, -{51,-6,27}, -{51,-6,28}, -{51,-6,29}, -{51,-6,30}, -{51,-6,31}, -{51,-6,32}, -{51,-6,33}, -{51,-6,34}, -{51,-6,35}, -{51,-6,36}, -{51,-6,37}, -{51,-6,38}, -{51,-6,39}, -{51,-6,40}, -{51,-6,41}, -{51,-6,42}, -{51,-6,43}, -{51,-6,44}, -{51,-6,45}, -{51,-6,46}, -{51,-6,47}, -{51,-6,48}, -{51,-6,49}, -{51,-6,50}, -{51,-6,51}, -{51,-6,52}, -{51,-6,53}, -{51,-6,54}, -{51,-6,55}, -{51,-6,56}, -{51,-5,-42}, -{51,-5,-41}, -{51,-5,-40}, -{51,-5,-39}, -{51,-5,-38}, -{51,-5,-37}, -{51,-5,-36}, -{51,-5,-35}, -{51,-5,-34}, -{51,-5,-33}, -{51,-5,-32}, -{51,-5,-31}, -{51,-5,-30}, -{51,-5,-29}, -{51,-5,-28}, -{51,-5,-27}, -{51,-5,-26}, -{51,-5,-25}, -{51,-5,-24}, -{51,-5,-23}, -{51,-5,-22}, -{51,-5,-21}, -{51,-5,-20}, -{51,-5,-19}, -{51,-5,-18}, -{51,-5,-17}, -{51,-5,-16}, -{51,-5,-15}, -{51,-5,-14}, -{51,-5,-13}, -{51,-5,-12}, -{51,-5,-11}, -{51,-5,-10}, -{51,-5,-9}, -{51,-5,-8}, -{51,-5,-7}, -{51,-5,-6}, -{51,-5,-5}, -{51,-5,-4}, -{51,-5,-3}, -{51,-5,-2}, -{51,-5,-1}, -{51,-5,0}, -{51,-5,1}, -{51,-5,2}, -{51,-5,3}, -{51,-5,4}, -{51,-5,5}, -{51,-5,6}, -{51,-5,7}, -{51,-5,8}, -{51,-5,9}, -{51,-5,10}, -{51,-5,11}, -{51,-5,12}, -{51,-5,13}, -{51,-5,14}, -{51,-5,15}, -{51,-5,16}, -{51,-5,17}, -{51,-5,18}, -{51,-5,19}, -{51,-5,20}, -{51,-5,21}, -{51,-5,22}, -{51,-5,23}, -{51,-5,24}, -{51,-5,25}, -{51,-5,26}, -{51,-5,27}, -{51,-5,28}, -{51,-5,29}, -{51,-5,30}, -{51,-5,31}, -{51,-5,32}, -{51,-5,33}, -{51,-5,34}, -{51,-5,35}, -{51,-5,36}, -{51,-5,37}, -{51,-5,38}, -{51,-5,39}, -{51,-5,40}, -{51,-5,41}, -{51,-5,42}, -{51,-5,43}, -{51,-5,44}, -{51,-5,45}, -{51,-5,46}, -{51,-5,47}, -{51,-5,48}, -{51,-5,49}, -{51,-5,50}, -{51,-5,51}, -{51,-5,52}, -{51,-5,53}, -{51,-5,54}, -{51,-5,55}, -{51,-5,56}, -{51,-4,-43}, -{51,-4,-42}, -{51,-4,-41}, -{51,-4,-40}, -{51,-4,-39}, -{51,-4,-38}, -{51,-4,-37}, -{51,-4,-36}, -{51,-4,-35}, -{51,-4,-34}, -{51,-4,-33}, -{51,-4,-32}, -{51,-4,-31}, -{51,-4,-30}, -{51,-4,-29}, -{51,-4,-28}, -{51,-4,-27}, -{51,-4,-26}, -{51,-4,-25}, -{51,-4,-24}, -{51,-4,-23}, -{51,-4,-22}, -{51,-4,-21}, -{51,-4,-20}, -{51,-4,-19}, -{51,-4,-18}, -{51,-4,-17}, -{51,-4,-16}, -{51,-4,-15}, -{51,-4,-14}, -{51,-4,-13}, -{51,-4,-12}, -{51,-4,-11}, -{51,-4,-10}, -{51,-4,-9}, -{51,-4,-8}, -{51,-4,-7}, -{51,-4,-6}, -{51,-4,-5}, -{51,-4,-4}, -{51,-4,-3}, -{51,-4,-2}, -{51,-4,-1}, -{51,-4,0}, -{51,-4,1}, -{51,-4,2}, -{51,-4,3}, -{51,-4,4}, -{51,-4,5}, -{51,-4,6}, -{51,-4,7}, -{51,-4,8}, -{51,-4,9}, -{51,-4,10}, -{51,-4,11}, -{51,-4,12}, -{51,-4,13}, -{51,-4,14}, -{51,-4,15}, -{51,-4,16}, -{51,-4,17}, -{51,-4,18}, -{51,-4,19}, -{51,-4,20}, -{51,-4,21}, -{51,-4,22}, -{51,-4,23}, -{51,-4,24}, -{51,-4,25}, -{51,-4,26}, -{51,-4,27}, -{51,-4,28}, -{51,-4,29}, -{51,-4,30}, -{51,-4,31}, -{51,-4,32}, -{51,-4,33}, -{51,-4,34}, -{51,-4,35}, -{51,-4,36}, -{51,-4,37}, -{51,-4,38}, -{51,-4,39}, -{51,-4,40}, -{51,-4,41}, -{51,-4,42}, -{51,-4,43}, -{51,-4,44}, -{51,-4,45}, -{51,-4,46}, -{51,-4,47}, -{51,-4,48}, -{51,-4,49}, -{51,-4,50}, -{51,-4,51}, -{51,-4,52}, -{51,-4,53}, -{51,-4,54}, -{51,-4,55}, -{51,-4,56}, -{51,-3,-44}, -{51,-3,-43}, -{51,-3,-42}, -{51,-3,-41}, -{51,-3,-40}, -{51,-3,-39}, -{51,-3,-38}, -{51,-3,-37}, -{51,-3,-36}, -{51,-3,-35}, -{51,-3,-34}, -{51,-3,-33}, -{51,-3,-32}, -{51,-3,-31}, -{51,-3,-30}, -{51,-3,-29}, -{51,-3,-28}, -{51,-3,-27}, -{51,-3,-26}, -{51,-3,-25}, -{51,-3,-24}, -{51,-3,-23}, -{51,-3,-22}, -{51,-3,-21}, -{51,-3,-20}, -{51,-3,-19}, -{51,-3,-18}, -{51,-3,-17}, -{51,-3,-16}, -{51,-3,-15}, -{51,-3,-14}, -{51,-3,-13}, -{51,-3,-12}, -{51,-3,-11}, -{51,-3,-10}, -{51,-3,-9}, -{51,-3,-8}, -{51,-3,-7}, -{51,-3,-6}, -{51,-3,-5}, -{51,-3,-4}, -{51,-3,-3}, -{51,-3,-2}, -{51,-3,-1}, -{51,-3,0}, -{51,-3,1}, -{51,-3,2}, -{51,-3,3}, -{51,-3,4}, -{51,-3,5}, -{51,-3,6}, -{51,-3,7}, -{51,-3,8}, -{51,-3,9}, -{51,-3,10}, -{51,-3,11}, -{51,-3,12}, -{51,-3,13}, -{51,-3,14}, -{51,-3,15}, -{51,-3,16}, -{51,-3,17}, -{51,-3,18}, -{51,-3,19}, -{51,-3,20}, -{51,-3,21}, -{51,-3,22}, -{51,-3,23}, -{51,-3,24}, -{51,-3,25}, -{51,-3,26}, -{51,-3,27}, -{51,-3,28}, -{51,-3,29}, -{51,-3,30}, -{51,-3,31}, -{51,-3,32}, -{51,-3,33}, -{51,-3,34}, -{51,-3,35}, -{51,-3,36}, -{51,-3,37}, -{51,-3,38}, -{51,-3,39}, -{51,-3,40}, -{51,-3,41}, -{51,-3,42}, -{51,-3,43}, -{51,-3,44}, -{51,-3,45}, -{51,-3,46}, -{51,-3,47}, -{51,-3,48}, -{51,-3,49}, -{51,-3,50}, -{51,-3,51}, -{51,-3,52}, -{51,-3,53}, -{51,-3,54}, -{51,-3,55}, -{51,-3,56}, -{51,-2,-46}, -{51,-2,-45}, -{51,-2,-44}, -{51,-2,-43}, -{51,-2,-42}, -{51,-2,-41}, -{51,-2,-40}, -{51,-2,-39}, -{51,-2,-38}, -{51,-2,-37}, -{51,-2,-36}, -{51,-2,-35}, -{51,-2,-34}, -{51,-2,-33}, -{51,-2,-32}, -{51,-2,-31}, -{51,-2,-30}, -{51,-2,-29}, -{51,-2,-28}, -{51,-2,-27}, -{51,-2,-26}, -{51,-2,-25}, -{51,-2,-24}, -{51,-2,-23}, -{51,-2,-22}, -{51,-2,-21}, -{51,-2,-20}, -{51,-2,-19}, -{51,-2,-18}, -{51,-2,-17}, -{51,-2,-16}, -{51,-2,-15}, -{51,-2,-14}, -{51,-2,-13}, -{51,-2,-12}, -{51,-2,-11}, -{51,-2,-10}, -{51,-2,-9}, -{51,-2,-8}, -{51,-2,-7}, -{51,-2,-6}, -{51,-2,-5}, -{51,-2,-4}, -{51,-2,-3}, -{51,-2,-2}, -{51,-2,-1}, -{51,-2,0}, -{51,-2,1}, -{51,-2,2}, -{51,-2,3}, -{51,-2,4}, -{51,-2,5}, -{51,-2,6}, -{51,-2,7}, -{51,-2,8}, -{51,-2,9}, -{51,-2,10}, -{51,-2,11}, -{51,-2,12}, -{51,-2,13}, -{51,-2,14}, -{51,-2,15}, -{51,-2,16}, -{51,-2,17}, -{51,-2,18}, -{51,-2,19}, -{51,-2,20}, -{51,-2,21}, -{51,-2,22}, -{51,-2,23}, -{51,-2,24}, -{51,-2,25}, -{51,-2,26}, -{51,-2,27}, -{51,-2,28}, -{51,-2,29}, -{51,-2,30}, -{51,-2,31}, -{51,-2,32}, -{51,-2,33}, -{51,-2,34}, -{51,-2,35}, -{51,-2,36}, -{51,-2,37}, -{51,-2,38}, -{51,-2,39}, -{51,-2,40}, -{51,-2,41}, -{51,-2,42}, -{51,-2,43}, -{51,-2,44}, -{51,-2,45}, -{51,-2,46}, -{51,-2,47}, -{51,-2,48}, -{51,-2,49}, -{51,-2,50}, -{51,-2,51}, -{51,-2,52}, -{51,-2,53}, -{51,-2,54}, -{51,-2,55}, -{51,-2,56}, -{51,-1,-47}, -{51,-1,-46}, -{51,-1,-45}, -{51,-1,-44}, -{51,-1,-43}, -{51,-1,-42}, -{51,-1,-41}, -{51,-1,-40}, -{51,-1,-39}, -{51,-1,-38}, -{51,-1,-37}, -{51,-1,-36}, -{51,-1,-35}, -{51,-1,-34}, -{51,-1,-33}, -{51,-1,-32}, -{51,-1,-31}, -{51,-1,-30}, -{51,-1,-29}, -{51,-1,-28}, -{51,-1,-27}, -{51,-1,-26}, -{51,-1,-25}, -{51,-1,-24}, -{51,-1,-23}, -{51,-1,-22}, -{51,-1,-21}, -{51,-1,-20}, -{51,-1,-19}, -{51,-1,-18}, -{51,-1,-17}, -{51,-1,-16}, -{51,-1,-15}, -{51,-1,-14}, -{51,-1,-13}, -{51,-1,-12}, -{51,-1,-11}, -{51,-1,-10}, -{51,-1,-9}, -{51,-1,-8}, -{51,-1,-7}, -{51,-1,-6}, -{51,-1,-5}, -{51,-1,-4}, -{51,-1,-3}, -{51,-1,-2}, -{51,-1,-1}, -{51,-1,0}, -{51,-1,1}, -{51,-1,2}, -{51,-1,3}, -{51,-1,4}, -{51,-1,5}, -{51,-1,6}, -{51,-1,7}, -{51,-1,8}, -{51,-1,9}, -{51,-1,10}, -{51,-1,11}, -{51,-1,12}, -{51,-1,13}, -{51,-1,14}, -{51,-1,15}, -{51,-1,16}, -{51,-1,17}, -{51,-1,18}, -{51,-1,19}, -{51,-1,20}, -{51,-1,21}, -{51,-1,22}, -{51,-1,23}, -{51,-1,24}, -{51,-1,25}, -{51,-1,26}, -{51,-1,27}, -{51,-1,28}, -{51,-1,29}, -{51,-1,30}, -{51,-1,31}, -{51,-1,32}, -{51,-1,33}, -{51,-1,34}, -{51,-1,35}, -{51,-1,36}, -{51,-1,37}, -{51,-1,38}, -{51,-1,39}, -{51,-1,40}, -{51,-1,41}, -{51,-1,42}, -{51,-1,43}, -{51,-1,44}, -{51,-1,45}, -{51,-1,46}, -{51,-1,47}, -{51,-1,48}, -{51,-1,49}, -{51,-1,50}, -{51,-1,51}, -{51,-1,52}, -{51,-1,53}, -{51,-1,54}, -{51,-1,55}, -{51,-1,56}, -{51,0,-48}, -{51,0,-47}, -{51,0,-46}, -{51,0,-45}, -{51,0,-44}, -{51,0,-43}, -{51,0,-42}, -{51,0,-41}, -{51,0,-40}, -{51,0,-39}, -{51,0,-38}, -{51,0,-37}, -{51,0,-36}, -{51,0,-35}, -{51,0,-34}, -{51,0,-33}, -{51,0,-32}, -{51,0,-31}, -{51,0,-30}, -{51,0,-29}, -{51,0,-28}, -{51,0,-27}, -{51,0,-26}, -{51,0,-25}, -{51,0,-24}, -{51,0,-23}, -{51,0,-22}, -{51,0,-21}, -{51,0,-20}, -{51,0,-19}, -{51,0,-18}, -{51,0,-17}, -{51,0,-16}, -{51,0,-15}, -{51,0,-14}, -{51,0,-13}, -{51,0,-12}, -{51,0,-11}, -{51,0,-10}, -{51,0,-9}, -{51,0,-8}, -{51,0,-7}, -{51,0,-6}, -{51,0,-5}, -{51,0,-4}, -{51,0,-3}, -{51,0,-2}, -{51,0,-1}, -{51,0,0}, -{51,0,1}, -{51,0,2}, -{51,0,3}, -{51,0,4}, -{51,0,5}, -{51,0,6}, -{51,0,7}, -{51,0,8}, -{51,0,9}, -{51,0,10}, -{51,0,11}, -{51,0,12}, -{51,0,13}, -{51,0,14}, -{51,0,15}, -{51,0,16}, -{51,0,17}, -{51,0,18}, -{51,0,19}, -{51,0,20}, -{51,0,21}, -{51,0,22}, -{51,0,23}, -{51,0,24}, -{51,0,25}, -{51,0,26}, -{51,0,27}, -{51,0,28}, -{51,0,29}, -{51,0,30}, -{51,0,31}, -{51,0,32}, -{51,0,33}, -{51,0,34}, -{51,0,35}, -{51,0,36}, -{51,0,37}, -{51,0,38}, -{51,0,39}, -{51,0,40}, -{51,0,41}, -{51,0,42}, -{51,0,43}, -{51,0,44}, -{51,0,45}, -{51,0,46}, -{51,0,47}, -{51,0,48}, -{51,0,49}, -{51,0,50}, -{51,0,51}, -{51,0,52}, -{51,0,53}, -{51,0,54}, -{51,0,55}, -{51,0,56}, -{51,1,-49}, -{51,1,-48}, -{51,1,-47}, -{51,1,-46}, -{51,1,-45}, -{51,1,-44}, -{51,1,-43}, -{51,1,-42}, -{51,1,-41}, -{51,1,-40}, -{51,1,-39}, -{51,1,-38}, -{51,1,-37}, -{51,1,-36}, -{51,1,-35}, -{51,1,-34}, -{51,1,-33}, -{51,1,-32}, -{51,1,-31}, -{51,1,-30}, -{51,1,-29}, -{51,1,-28}, -{51,1,-27}, -{51,1,-26}, -{51,1,-25}, -{51,1,-24}, -{51,1,-23}, -{51,1,-22}, -{51,1,-21}, -{51,1,-20}, -{51,1,-19}, -{51,1,-18}, -{51,1,-17}, -{51,1,-16}, -{51,1,-15}, -{51,1,-14}, -{51,1,-13}, -{51,1,-12}, -{51,1,-11}, -{51,1,-10}, -{51,1,-9}, -{51,1,-8}, -{51,1,-7}, -{51,1,-6}, -{51,1,-5}, -{51,1,-4}, -{51,1,-3}, -{51,1,-2}, -{51,1,-1}, -{51,1,0}, -{51,1,1}, -{51,1,2}, -{51,1,3}, -{51,1,4}, -{51,1,5}, -{51,1,6}, -{51,1,7}, -{51,1,8}, -{51,1,9}, -{51,1,10}, -{51,1,11}, -{51,1,12}, -{51,1,13}, -{51,1,14}, -{51,1,15}, -{51,1,16}, -{51,1,17}, -{51,1,18}, -{51,1,19}, -{51,1,20}, -{51,1,21}, -{51,1,22}, -{51,1,23}, -{51,1,24}, -{51,1,25}, -{51,1,26}, -{51,1,27}, -{51,1,28}, -{51,1,29}, -{51,1,30}, -{51,1,31}, -{51,1,32}, -{51,1,33}, -{51,1,34}, -{51,1,35}, -{51,1,36}, -{51,1,37}, -{51,1,38}, -{51,1,39}, -{51,1,40}, -{51,1,41}, -{51,1,42}, -{51,1,43}, -{51,1,44}, -{51,1,45}, -{51,1,46}, -{51,1,47}, -{51,1,48}, -{51,1,49}, -{51,1,50}, -{51,1,51}, -{51,1,52}, -{51,1,53}, -{51,1,54}, -{51,1,55}, -{51,1,56}, -{51,1,57}, -{51,2,-50}, -{51,2,-49}, -{51,2,-48}, -{51,2,-47}, -{51,2,-46}, -{51,2,-45}, -{51,2,-44}, -{51,2,-43}, -{51,2,-42}, -{51,2,-41}, -{51,2,-40}, -{51,2,-39}, -{51,2,-38}, -{51,2,-37}, -{51,2,-36}, -{51,2,-35}, -{51,2,-34}, -{51,2,-33}, -{51,2,-32}, -{51,2,-31}, -{51,2,-30}, -{51,2,-29}, -{51,2,-28}, -{51,2,-27}, -{51,2,-26}, -{51,2,-25}, -{51,2,-24}, -{51,2,-23}, -{51,2,-22}, -{51,2,-21}, -{51,2,-20}, -{51,2,-19}, -{51,2,-18}, -{51,2,-17}, -{51,2,-16}, -{51,2,-15}, -{51,2,-14}, -{51,2,-13}, -{51,2,-12}, -{51,2,-11}, -{51,2,-10}, -{51,2,-9}, -{51,2,-8}, -{51,2,-7}, -{51,2,-6}, -{51,2,-5}, -{51,2,-4}, -{51,2,-3}, -{51,2,-2}, -{51,2,-1}, -{51,2,0}, -{51,2,1}, -{51,2,2}, -{51,2,3}, -{51,2,4}, -{51,2,5}, -{51,2,6}, -{51,2,7}, -{51,2,8}, -{51,2,9}, -{51,2,10}, -{51,2,11}, -{51,2,12}, -{51,2,13}, -{51,2,14}, -{51,2,15}, -{51,2,16}, -{51,2,17}, -{51,2,18}, -{51,2,19}, -{51,2,20}, -{51,2,21}, -{51,2,22}, -{51,2,23}, -{51,2,24}, -{51,2,25}, -{51,2,26}, -{51,2,27}, -{51,2,28}, -{51,2,29}, -{51,2,30}, -{51,2,31}, -{51,2,32}, -{51,2,33}, -{51,2,34}, -{51,2,35}, -{51,2,36}, -{51,2,37}, -{51,2,38}, -{51,2,39}, -{51,2,40}, -{51,2,41}, -{51,2,42}, -{51,2,43}, -{51,2,44}, -{51,2,45}, -{51,2,46}, -{51,2,47}, -{51,2,48}, -{51,2,49}, -{51,2,50}, -{51,2,51}, -{51,2,52}, -{51,2,53}, -{51,2,54}, -{51,2,55}, -{51,2,56}, -{51,2,57}, -{51,3,-51}, -{51,3,-50}, -{51,3,-49}, -{51,3,-48}, -{51,3,-47}, -{51,3,-46}, -{51,3,-45}, -{51,3,-44}, -{51,3,-43}, -{51,3,-42}, -{51,3,-41}, -{51,3,-40}, -{51,3,-39}, -{51,3,-38}, -{51,3,-37}, -{51,3,-36}, -{51,3,-35}, -{51,3,-34}, -{51,3,-33}, -{51,3,-32}, -{51,3,-31}, -{51,3,-30}, -{51,3,-29}, -{51,3,-28}, -{51,3,-27}, -{51,3,-26}, -{51,3,-25}, -{51,3,-24}, -{51,3,-23}, -{51,3,-22}, -{51,3,-21}, -{51,3,-20}, -{51,3,-19}, -{51,3,-18}, -{51,3,-17}, -{51,3,-16}, -{51,3,-15}, -{51,3,-14}, -{51,3,-13}, -{51,3,-12}, -{51,3,-11}, -{51,3,-10}, -{51,3,-9}, -{51,3,-8}, -{51,3,-7}, -{51,3,-6}, -{51,3,-5}, -{51,3,-4}, -{51,3,-3}, -{51,3,-2}, -{51,3,-1}, -{51,3,0}, -{51,3,1}, -{51,3,2}, -{51,3,3}, -{51,3,4}, -{51,3,5}, -{51,3,6}, -{51,3,7}, -{51,3,8}, -{51,3,9}, -{51,3,10}, -{51,3,11}, -{51,3,12}, -{51,3,13}, -{51,3,14}, -{51,3,15}, -{51,3,16}, -{51,3,17}, -{51,3,18}, -{51,3,19}, -{51,3,20}, -{51,3,21}, -{51,3,22}, -{51,3,23}, -{51,3,24}, -{51,3,25}, -{51,3,26}, -{51,3,27}, -{51,3,28}, -{51,3,29}, -{51,3,30}, -{51,3,31}, -{51,3,32}, -{51,3,33}, -{51,3,34}, -{51,3,35}, -{51,3,36}, -{51,3,37}, -{51,3,38}, -{51,3,39}, -{51,3,40}, -{51,3,41}, -{51,3,42}, -{51,3,43}, -{51,3,44}, -{51,3,45}, -{51,3,46}, -{51,3,47}, -{51,3,48}, -{51,3,49}, -{51,3,50}, -{51,3,51}, -{51,3,52}, -{51,3,53}, -{51,3,54}, -{51,3,55}, -{51,3,56}, -{51,3,57}, -{51,4,-52}, -{51,4,-51}, -{51,4,-50}, -{51,4,-49}, -{51,4,-48}, -{51,4,-47}, -{51,4,-46}, -{51,4,-45}, -{51,4,-44}, -{51,4,-43}, -{51,4,-42}, -{51,4,-41}, -{51,4,-40}, -{51,4,-39}, -{51,4,-38}, -{51,4,-37}, -{51,4,-36}, -{51,4,-35}, -{51,4,-34}, -{51,4,-33}, -{51,4,-32}, -{51,4,-31}, -{51,4,-30}, -{51,4,-29}, -{51,4,-28}, -{51,4,-27}, -{51,4,-26}, -{51,4,-25}, -{51,4,-24}, -{51,4,-23}, -{51,4,-22}, -{51,4,-21}, -{51,4,-20}, -{51,4,-19}, -{51,4,-18}, -{51,4,-17}, -{51,4,-16}, -{51,4,-15}, -{51,4,-14}, -{51,4,-13}, -{51,4,-12}, -{51,4,-11}, -{51,4,-10}, -{51,4,-9}, -{51,4,-8}, -{51,4,-7}, -{51,4,-6}, -{51,4,-5}, -{51,4,-4}, -{51,4,-3}, -{51,4,-2}, -{51,4,-1}, -{51,4,0}, -{51,4,1}, -{51,4,2}, -{51,4,3}, -{51,4,4}, -{51,4,5}, -{51,4,6}, -{51,4,7}, -{51,4,8}, -{51,4,9}, -{51,4,10}, -{51,4,11}, -{51,4,12}, -{51,4,13}, -{51,4,14}, -{51,4,15}, -{51,4,16}, -{51,4,17}, -{51,4,18}, -{51,4,19}, -{51,4,20}, -{51,4,21}, -{51,4,22}, -{51,4,23}, -{51,4,24}, -{51,4,25}, -{51,4,26}, -{51,4,27}, -{51,4,28}, -{51,4,29}, -{51,4,30}, -{51,4,31}, -{51,4,32}, -{51,4,33}, -{51,4,34}, -{51,4,35}, -{51,4,36}, -{51,4,37}, -{51,4,38}, -{51,4,39}, -{51,4,40}, -{51,4,41}, -{51,4,42}, -{51,4,43}, -{51,4,44}, -{51,4,45}, -{51,4,46}, -{51,4,47}, -{51,4,48}, -{51,4,49}, -{51,4,50}, -{51,4,51}, -{51,4,52}, -{51,4,53}, -{51,4,54}, -{51,4,55}, -{51,4,56}, -{51,4,57}, -{51,5,-53}, -{51,5,-52}, -{51,5,-51}, -{51,5,-50}, -{51,5,-49}, -{51,5,-48}, -{51,5,-47}, -{51,5,-46}, -{51,5,-45}, -{51,5,-44}, -{51,5,-43}, -{51,5,-42}, -{51,5,-41}, -{51,5,-40}, -{51,5,-39}, -{51,5,-38}, -{51,5,-37}, -{51,5,-36}, -{51,5,-35}, -{51,5,-34}, -{51,5,-33}, -{51,5,-32}, -{51,5,-31}, -{51,5,-30}, -{51,5,-29}, -{51,5,-28}, -{51,5,-27}, -{51,5,-26}, -{51,5,-25}, -{51,5,-24}, -{51,5,-23}, -{51,5,-22}, -{51,5,-21}, -{51,5,-20}, -{51,5,-19}, -{51,5,-18}, -{51,5,-17}, -{51,5,-16}, -{51,5,-15}, -{51,5,-14}, -{51,5,-13}, -{51,5,-12}, -{51,5,-11}, -{51,5,-10}, -{51,5,-9}, -{51,5,-8}, -{51,5,-7}, -{51,5,-6}, -{51,5,-5}, -{51,5,-4}, -{51,5,-3}, -{51,5,-2}, -{51,5,-1}, -{51,5,0}, -{51,5,1}, -{51,5,2}, -{51,5,3}, -{51,5,4}, -{51,5,5}, -{51,5,6}, -{51,5,7}, -{51,5,8}, -{51,5,9}, -{51,5,10}, -{51,5,11}, -{51,5,12}, -{51,5,13}, -{51,5,14}, -{51,5,15}, -{51,5,16}, -{51,5,17}, -{51,5,18}, -{51,5,19}, -{51,5,20}, -{51,5,21}, -{51,5,22}, -{51,5,23}, -{51,5,24}, -{51,5,25}, -{51,5,26}, -{51,5,27}, -{51,5,28}, -{51,5,29}, -{51,5,30}, -{51,5,31}, -{51,5,32}, -{51,5,33}, -{51,5,34}, -{51,5,35}, -{51,5,36}, -{51,5,37}, -{51,5,38}, -{51,5,39}, -{51,5,40}, -{51,5,41}, -{51,5,42}, -{51,5,43}, -{51,5,44}, -{51,5,45}, -{51,5,46}, -{51,5,47}, -{51,5,48}, -{51,5,49}, -{51,5,50}, -{51,5,51}, -{51,5,52}, -{51,5,53}, -{51,5,54}, -{51,5,55}, -{51,5,56}, -{51,5,57}, -{51,6,-54}, -{51,6,-53}, -{51,6,-52}, -{51,6,-51}, -{51,6,-50}, -{51,6,-49}, -{51,6,-48}, -{51,6,-47}, -{51,6,-46}, -{51,6,-45}, -{51,6,-44}, -{51,6,-43}, -{51,6,-42}, -{51,6,-41}, -{51,6,-40}, -{51,6,-39}, -{51,6,-38}, -{51,6,-37}, -{51,6,-36}, -{51,6,-35}, -{51,6,-34}, -{51,6,-33}, -{51,6,-32}, -{51,6,-31}, -{51,6,-30}, -{51,6,-29}, -{51,6,-28}, -{51,6,-27}, -{51,6,-26}, -{51,6,-25}, -{51,6,-24}, -{51,6,-23}, -{51,6,-22}, -{51,6,-21}, -{51,6,-20}, -{51,6,-19}, -{51,6,-18}, -{51,6,-17}, -{51,6,-16}, -{51,6,-15}, -{51,6,-14}, -{51,6,-13}, -{51,6,-12}, -{51,6,-11}, -{51,6,-10}, -{51,6,-9}, -{51,6,-8}, -{51,6,-7}, -{51,6,-6}, -{51,6,-5}, -{51,6,-4}, -{51,6,-3}, -{51,6,-2}, -{51,6,-1}, -{51,6,0}, -{51,6,1}, -{51,6,2}, -{51,6,3}, -{51,6,4}, -{51,6,5}, -{51,6,6}, -{51,6,7}, -{51,6,8}, -{51,6,9}, -{51,6,10}, -{51,6,11}, -{51,6,12}, -{51,6,13}, -{51,6,14}, -{51,6,15}, -{51,6,16}, -{51,6,17}, -{51,6,18}, -{51,6,19}, -{51,6,20}, -{51,6,21}, -{51,6,22}, -{51,6,23}, -{51,6,24}, -{51,6,25}, -{51,6,26}, -{51,6,27}, -{51,6,28}, -{51,6,29}, -{51,6,30}, -{51,6,31}, -{51,6,32}, -{51,6,33}, -{51,6,34}, -{51,6,35}, -{51,6,36}, -{51,6,37}, -{51,6,38}, -{51,6,39}, -{51,6,40}, -{51,6,41}, -{51,6,42}, -{51,6,43}, -{51,6,44}, -{51,6,45}, -{51,6,46}, -{51,6,47}, -{51,6,48}, -{51,6,49}, -{51,6,50}, -{51,6,51}, -{51,6,52}, -{51,6,53}, -{51,6,54}, -{51,6,55}, -{51,6,56}, -{51,6,57}, -{51,7,-56}, -{51,7,-55}, -{51,7,-54}, -{51,7,-53}, -{51,7,-52}, -{51,7,-51}, -{51,7,-50}, -{51,7,-49}, -{51,7,-48}, -{51,7,-47}, -{51,7,-46}, -{51,7,-45}, -{51,7,-44}, -{51,7,-43}, -{51,7,-42}, -{51,7,-41}, -{51,7,-40}, -{51,7,-39}, -{51,7,-38}, -{51,7,-37}, -{51,7,-36}, -{51,7,-35}, -{51,7,-34}, -{51,7,-33}, -{51,7,-32}, -{51,7,-31}, -{51,7,-30}, -{51,7,-29}, -{51,7,-28}, -{51,7,-27}, -{51,7,-26}, -{51,7,-25}, -{51,7,-24}, -{51,7,-23}, -{51,7,-22}, -{51,7,-21}, -{51,7,-20}, -{51,7,-19}, -{51,7,-18}, -{51,7,-17}, -{51,7,-16}, -{51,7,-15}, -{51,7,-14}, -{51,7,-13}, -{51,7,-12}, -{51,7,-11}, -{51,7,-10}, -{51,7,-9}, -{51,7,-8}, -{51,7,-7}, -{51,7,-6}, -{51,7,-5}, -{51,7,-4}, -{51,7,-3}, -{51,7,-2}, -{51,7,-1}, -{51,7,0}, -{51,7,1}, -{51,7,2}, -{51,7,3}, -{51,7,4}, -{51,7,5}, -{51,7,6}, -{51,7,7}, -{51,7,8}, -{51,7,9}, -{51,7,10}, -{51,7,11}, -{51,7,12}, -{51,7,13}, -{51,7,14}, -{51,7,15}, -{51,7,16}, -{51,7,17}, -{51,7,18}, -{51,7,19}, -{51,7,20}, -{51,7,21}, -{51,7,22}, -{51,7,23}, -{51,7,24}, -{51,7,25}, -{51,7,26}, -{51,7,27}, -{51,7,28}, -{51,7,29}, -{51,7,30}, -{51,7,31}, -{51,7,32}, -{51,7,33}, -{51,7,34}, -{51,7,35}, -{51,7,36}, -{51,7,37}, -{51,7,38}, -{51,7,39}, -{51,7,40}, -{51,7,41}, -{51,7,42}, -{51,7,43}, -{51,7,44}, -{51,7,45}, -{51,7,46}, -{51,7,47}, -{51,7,48}, -{51,7,49}, -{51,7,50}, -{51,7,51}, -{51,7,52}, -{51,7,53}, -{51,7,54}, -{51,7,55}, -{51,7,56}, -{51,7,57}, -{51,8,-57}, -{51,8,-56}, -{51,8,-55}, -{51,8,-54}, -{51,8,-53}, -{51,8,-52}, -{51,8,-51}, -{51,8,-50}, -{51,8,-49}, -{51,8,-48}, -{51,8,-47}, -{51,8,-46}, -{51,8,-45}, -{51,8,-44}, -{51,8,-43}, -{51,8,-42}, -{51,8,-41}, -{51,8,-40}, -{51,8,-39}, -{51,8,-38}, -{51,8,-37}, -{51,8,-36}, -{51,8,-35}, -{51,8,-34}, -{51,8,-33}, -{51,8,-32}, -{51,8,-31}, -{51,8,-30}, -{51,8,-29}, -{51,8,-28}, -{51,8,-27}, -{51,8,-26}, -{51,8,-25}, -{51,8,-24}, -{51,8,-23}, -{51,8,-22}, -{51,8,-21}, -{51,8,-20}, -{51,8,-19}, -{51,8,-18}, -{51,8,-17}, -{51,8,-16}, -{51,8,-15}, -{51,8,-14}, -{51,8,-13}, -{51,8,-12}, -{51,8,-11}, -{51,8,-10}, -{51,8,-9}, -{51,8,-8}, -{51,8,-7}, -{51,8,-6}, -{51,8,-5}, -{51,8,-4}, -{51,8,-3}, -{51,8,-2}, -{51,8,-1}, -{51,8,0}, -{51,8,1}, -{51,8,2}, -{51,8,3}, -{51,8,4}, -{51,8,5}, -{51,8,6}, -{51,8,7}, -{51,8,8}, -{51,8,9}, -{51,8,10}, -{51,8,11}, -{51,8,12}, -{51,8,13}, -{51,8,14}, -{51,8,15}, -{51,8,16}, -{51,8,17}, -{51,8,18}, -{51,8,19}, -{51,8,20}, -{51,8,21}, -{51,8,22}, -{51,8,23}, -{51,8,24}, -{51,8,25}, -{51,8,26}, -{51,8,27}, -{51,8,28}, -{51,8,29}, -{51,8,30}, -{51,8,31}, -{51,8,32}, -{51,8,33}, -{51,8,34}, -{51,8,35}, -{51,8,36}, -{51,8,37}, -{51,8,38}, -{51,8,39}, -{51,8,40}, -{51,8,41}, -{51,8,42}, -{51,8,43}, -{51,8,44}, -{51,8,45}, -{51,8,46}, -{51,8,47}, -{51,8,48}, -{51,8,49}, -{51,8,50}, -{51,8,51}, -{51,8,52}, -{51,8,53}, -{51,8,54}, -{51,8,55}, -{51,8,56}, -{51,8,57}, -{51,9,-58}, -{51,9,-57}, -{51,9,-56}, -{51,9,-55}, -{51,9,-54}, -{51,9,-53}, -{51,9,-52}, -{51,9,-51}, -{51,9,-50}, -{51,9,-49}, -{51,9,-48}, -{51,9,-47}, -{51,9,-46}, -{51,9,-45}, -{51,9,-44}, -{51,9,-43}, -{51,9,-42}, -{51,9,-41}, -{51,9,-40}, -{51,9,-39}, -{51,9,-38}, -{51,9,-37}, -{51,9,-36}, -{51,9,-35}, -{51,9,-34}, -{51,9,-33}, -{51,9,-32}, -{51,9,-31}, -{51,9,-30}, -{51,9,-29}, -{51,9,-28}, -{51,9,-27}, -{51,9,-26}, -{51,9,-25}, -{51,9,-24}, -{51,9,-23}, -{51,9,-22}, -{51,9,-21}, -{51,9,-20}, -{51,9,-19}, -{51,9,-18}, -{51,9,-17}, -{51,9,-16}, -{51,9,-15}, -{51,9,-14}, -{51,9,-13}, -{51,9,-12}, -{51,9,-11}, -{51,9,-10}, -{51,9,-9}, -{51,9,-8}, -{51,9,-7}, -{51,9,-6}, -{51,9,-5}, -{51,9,-4}, -{51,9,-3}, -{51,9,-2}, -{51,9,-1}, -{51,9,0}, -{51,9,1}, -{51,9,2}, -{51,9,3}, -{51,9,4}, -{51,9,5}, -{51,9,6}, -{51,9,7}, -{51,9,8}, -{51,9,9}, -{51,9,10}, -{51,9,11}, -{51,9,12}, -{51,9,13}, -{51,9,14}, -{51,9,15}, -{51,9,16}, -{51,9,17}, -{51,9,18}, -{51,9,19}, -{51,9,20}, -{51,9,21}, -{51,9,22}, -{51,9,23}, -{51,9,24}, -{51,9,25}, -{51,9,26}, -{51,9,27}, -{51,9,28}, -{51,9,29}, -{51,9,30}, -{51,9,31}, -{51,9,32}, -{51,9,33}, -{51,9,34}, -{51,9,35}, -{51,9,36}, -{51,9,37}, -{51,9,38}, -{51,9,39}, -{51,9,40}, -{51,9,41}, -{51,9,42}, -{51,9,43}, -{51,9,44}, -{51,9,45}, -{51,9,46}, -{51,9,47}, -{51,9,48}, -{51,9,49}, -{51,9,50}, -{51,9,51}, -{51,9,52}, -{51,9,53}, -{51,9,54}, -{51,9,55}, -{51,9,56}, -{51,9,57}, -{51,10,-59}, -{51,10,-58}, -{51,10,-57}, -{51,10,-56}, -{51,10,-55}, -{51,10,-54}, -{51,10,-53}, -{51,10,-52}, -{51,10,-51}, -{51,10,-50}, -{51,10,-49}, -{51,10,-48}, -{51,10,-47}, -{51,10,-46}, -{51,10,-45}, -{51,10,-44}, -{51,10,-43}, -{51,10,-42}, -{51,10,-41}, -{51,10,-40}, -{51,10,-39}, -{51,10,-38}, -{51,10,-37}, -{51,10,-36}, -{51,10,-35}, -{51,10,-34}, -{51,10,-33}, -{51,10,-32}, -{51,10,-31}, -{51,10,-30}, -{51,10,-29}, -{51,10,-28}, -{51,10,-27}, -{51,10,-26}, -{51,10,-25}, -{51,10,-24}, -{51,10,-23}, -{51,10,-22}, -{51,10,-21}, -{51,10,-20}, -{51,10,-19}, -{51,10,-18}, -{51,10,-17}, -{51,10,-16}, -{51,10,-15}, -{51,10,-14}, -{51,10,-13}, -{51,10,-12}, -{51,10,-11}, -{51,10,-10}, -{51,10,-9}, -{51,10,-8}, -{51,10,-7}, -{51,10,-6}, -{51,10,-5}, -{51,10,-4}, -{51,10,-3}, -{51,10,-2}, -{51,10,-1}, -{51,10,0}, -{51,10,1}, -{51,10,2}, -{51,10,3}, -{51,10,4}, -{51,10,5}, -{51,10,6}, -{51,10,7}, -{51,10,8}, -{51,10,9}, -{51,10,10}, -{51,10,11}, -{51,10,12}, -{51,10,13}, -{51,10,14}, -{51,10,15}, -{51,10,16}, -{51,10,17}, -{51,10,18}, -{51,10,19}, -{51,10,20}, -{51,10,21}, -{51,10,22}, -{51,10,23}, -{51,10,24}, -{51,10,25}, -{51,10,26}, -{51,10,27}, -{51,10,28}, -{51,10,29}, -{51,10,30}, -{51,10,31}, -{51,10,32}, -{51,10,33}, -{51,10,34}, -{51,10,35}, -{51,10,36}, -{51,10,37}, -{51,10,38}, -{51,10,39}, -{51,10,40}, -{51,10,41}, -{51,10,42}, -{51,10,43}, -{51,10,44}, -{51,10,45}, -{51,10,46}, -{51,10,47}, -{51,10,48}, -{51,10,49}, -{51,10,50}, -{51,10,51}, -{51,10,52}, -{51,10,53}, -{51,10,54}, -{51,10,55}, -{51,10,56}, -{51,10,57}, -{51,11,-60}, -{51,11,-59}, -{51,11,-58}, -{51,11,-57}, -{51,11,-56}, -{51,11,-55}, -{51,11,-54}, -{51,11,-53}, -{51,11,-52}, -{51,11,-51}, -{51,11,-50}, -{51,11,-49}, -{51,11,-48}, -{51,11,-47}, -{51,11,-46}, -{51,11,-45}, -{51,11,-44}, -{51,11,-43}, -{51,11,-42}, -{51,11,-41}, -{51,11,-40}, -{51,11,-39}, -{51,11,-38}, -{51,11,-37}, -{51,11,-36}, -{51,11,-35}, -{51,11,-34}, -{51,11,-33}, -{51,11,-32}, -{51,11,-31}, -{51,11,-30}, -{51,11,-29}, -{51,11,-28}, -{51,11,-27}, -{51,11,-26}, -{51,11,-25}, -{51,11,-24}, -{51,11,-23}, -{51,11,-22}, -{51,11,-21}, -{51,11,-20}, -{51,11,-19}, -{51,11,-18}, -{51,11,-17}, -{51,11,-16}, -{51,11,-15}, -{51,11,-14}, -{51,11,-13}, -{51,11,-12}, -{51,11,-11}, -{51,11,-10}, -{51,11,-9}, -{51,11,-8}, -{51,11,-7}, -{51,11,-6}, -{51,11,-5}, -{51,11,-4}, -{51,11,-3}, -{51,11,-2}, -{51,11,-1}, -{51,11,0}, -{51,11,1}, -{51,11,2}, -{51,11,3}, -{51,11,4}, -{51,11,5}, -{51,11,6}, -{51,11,7}, -{51,11,8}, -{51,11,9}, -{51,11,10}, -{51,11,11}, -{51,11,12}, -{51,11,13}, -{51,11,14}, -{51,11,15}, -{51,11,16}, -{51,11,17}, -{51,11,18}, -{51,11,19}, -{51,11,20}, -{51,11,21}, -{51,11,22}, -{51,11,23}, -{51,11,24}, -{51,11,25}, -{51,11,26}, -{51,11,27}, -{51,11,28}, -{51,11,29}, -{51,11,30}, -{51,11,31}, -{51,11,32}, -{51,11,33}, -{51,11,34}, -{51,11,35}, -{51,11,36}, -{51,11,37}, -{51,11,38}, -{51,11,39}, -{51,11,40}, -{51,11,41}, -{51,11,42}, -{51,11,43}, -{51,11,44}, -{51,11,45}, -{51,11,46}, -{51,11,47}, -{51,11,48}, -{51,11,49}, -{51,11,50}, -{51,11,51}, -{51,11,52}, -{51,11,53}, -{51,11,54}, -{51,11,55}, -{51,11,56}, -{51,11,57}, -{51,12,-61}, -{51,12,-60}, -{51,12,-59}, -{51,12,-58}, -{51,12,-57}, -{51,12,-56}, -{51,12,-55}, -{51,12,-54}, -{51,12,-53}, -{51,12,-52}, -{51,12,-51}, -{51,12,-50}, -{51,12,-49}, -{51,12,-48}, -{51,12,-47}, -{51,12,-46}, -{51,12,-45}, -{51,12,-44}, -{51,12,-43}, -{51,12,-42}, -{51,12,-41}, -{51,12,-40}, -{51,12,-39}, -{51,12,-38}, -{51,12,-37}, -{51,12,-36}, -{51,12,-35}, -{51,12,-34}, -{51,12,-33}, -{51,12,-32}, -{51,12,-31}, -{51,12,-30}, -{51,12,-29}, -{51,12,-28}, -{51,12,-27}, -{51,12,-26}, -{51,12,-25}, -{51,12,-24}, -{51,12,-23}, -{51,12,-22}, -{51,12,-21}, -{51,12,-20}, -{51,12,-19}, -{51,12,-18}, -{51,12,-17}, -{51,12,-16}, -{51,12,-15}, -{51,12,-14}, -{51,12,-13}, -{51,12,-12}, -{51,12,-11}, -{51,12,-10}, -{51,12,-9}, -{51,12,-8}, -{51,12,-7}, -{51,12,-6}, -{51,12,-5}, -{51,12,-4}, -{51,12,-3}, -{51,12,-2}, -{51,12,-1}, -{51,12,0}, -{51,12,1}, -{51,12,2}, -{51,12,3}, -{51,12,4}, -{51,12,5}, -{51,12,6}, -{51,12,7}, -{51,12,8}, -{51,12,9}, -{51,12,10}, -{51,12,11}, -{51,12,12}, -{51,12,13}, -{51,12,14}, -{51,12,15}, -{51,12,16}, -{51,12,17}, -{51,12,18}, -{51,12,19}, -{51,12,20}, -{51,12,21}, -{51,12,22}, -{51,12,23}, -{51,12,24}, -{51,12,25}, -{51,12,26}, -{51,12,27}, -{51,12,28}, -{51,12,29}, -{51,12,30}, -{51,12,31}, -{51,12,32}, -{51,12,33}, -{51,12,34}, -{51,12,35}, -{51,12,36}, -{51,12,37}, -{51,12,38}, -{51,12,39}, -{51,12,40}, -{51,12,41}, -{51,12,42}, -{51,12,43}, -{51,12,44}, -{51,12,45}, -{51,12,46}, -{51,12,47}, -{51,12,48}, -{51,12,49}, -{51,12,50}, -{51,12,51}, -{51,12,52}, -{51,12,53}, -{51,12,54}, -{51,12,55}, -{51,12,56}, -{51,12,57}, -{51,13,-62}, -{51,13,-61}, -{51,13,-60}, -{51,13,-59}, -{51,13,-58}, -{51,13,-57}, -{51,13,-56}, -{51,13,-55}, -{51,13,-54}, -{51,13,-53}, -{51,13,-52}, -{51,13,-51}, -{51,13,-50}, -{51,13,-49}, -{51,13,-48}, -{51,13,-47}, -{51,13,-46}, -{51,13,-45}, -{51,13,-44}, -{51,13,-43}, -{51,13,-42}, -{51,13,-41}, -{51,13,-40}, -{51,13,-39}, -{51,13,-38}, -{51,13,-37}, -{51,13,-36}, -{51,13,-35}, -{51,13,-34}, -{51,13,-33}, -{51,13,-32}, -{51,13,-31}, -{51,13,-30}, -{51,13,-29}, -{51,13,-28}, -{51,13,-27}, -{51,13,-26}, -{51,13,-25}, -{51,13,-24}, -{51,13,-23}, -{51,13,-22}, -{51,13,-21}, -{51,13,-20}, -{51,13,-19}, -{51,13,-18}, -{51,13,-17}, -{51,13,-16}, -{51,13,-15}, -{51,13,-14}, -{51,13,-13}, -{51,13,-12}, -{51,13,-11}, -{51,13,-10}, -{51,13,-9}, -{51,13,-8}, -{51,13,-7}, -{51,13,-6}, -{51,13,-5}, -{51,13,-4}, -{51,13,-3}, -{51,13,-2}, -{51,13,-1}, -{51,13,0}, -{51,13,1}, -{51,13,2}, -{51,13,3}, -{51,13,4}, -{51,13,5}, -{51,13,6}, -{51,13,7}, -{51,13,8}, -{51,13,9}, -{51,13,10}, -{51,13,11}, -{51,13,12}, -{51,13,13}, -{51,13,14}, -{51,13,15}, -{51,13,16}, -{51,13,17}, -{51,13,18}, -{51,13,19}, -{51,13,20}, -{51,13,21}, -{51,13,22}, -{51,13,23}, -{51,13,24}, -{51,13,25}, -{51,13,26}, -{51,13,27}, -{51,13,28}, -{51,13,29}, -{51,13,30}, -{51,13,31}, -{51,13,32}, -{51,13,33}, -{51,13,34}, -{51,13,35}, -{51,13,36}, -{51,13,37}, -{51,13,38}, -{51,13,39}, -{51,13,40}, -{51,13,41}, -{51,13,42}, -{51,13,43}, -{51,13,44}, -{51,13,45}, -{51,13,46}, -{51,13,47}, -{51,13,48}, -{51,13,49}, -{51,13,50}, -{51,13,51}, -{51,13,52}, -{51,13,53}, -{51,13,54}, -{51,13,55}, -{51,13,56}, -{51,13,57}, -{51,14,-63}, -{51,14,-62}, -{51,14,-61}, -{51,14,-60}, -{51,14,-59}, -{51,14,-58}, -{51,14,-57}, -{51,14,-56}, -{51,14,-55}, -{51,14,-54}, -{51,14,-53}, -{51,14,-52}, -{51,14,-51}, -{51,14,-50}, -{51,14,-49}, -{51,14,-48}, -{51,14,-47}, -{51,14,-46}, -{51,14,-45}, -{51,14,-44}, -{51,14,-43}, -{51,14,-42}, -{51,14,-41}, -{51,14,-40}, -{51,14,-39}, -{51,14,-38}, -{51,14,-37}, -{51,14,-36}, -{51,14,-35}, -{51,14,-34}, -{51,14,-33}, -{51,14,-32}, -{51,14,-31}, -{51,14,-30}, -{51,14,-29}, -{51,14,-28}, -{51,14,-27}, -{51,14,-26}, -{51,14,-25}, -{51,14,-24}, -{51,14,-23}, -{51,14,-22}, -{51,14,-21}, -{51,14,-20}, -{51,14,-19}, -{51,14,-18}, -{51,14,-17}, -{51,14,-16}, -{51,14,-15}, -{51,14,-14}, -{51,14,-13}, -{51,14,-12}, -{51,14,-11}, -{51,14,-10}, -{51,14,-9}, -{51,14,-8}, -{51,14,-7}, -{51,14,-6}, -{51,14,-5}, -{51,14,-4}, -{51,14,-3}, -{51,14,-2}, -{51,14,-1}, -{51,14,0}, -{51,14,1}, -{51,14,2}, -{51,14,3}, -{51,14,4}, -{51,14,5}, -{51,14,6}, -{51,14,7}, -{51,14,8}, -{51,14,9}, -{51,14,10}, -{51,14,11}, -{51,14,12}, -{51,14,13}, -{51,14,14}, -{51,14,15}, -{51,14,16}, -{51,14,17}, -{51,14,18}, -{51,14,19}, -{51,14,20}, -{51,14,21}, -{51,14,22}, -{51,14,23}, -{51,14,24}, -{51,14,25}, -{51,14,26}, -{51,14,27}, -{51,14,28}, -{51,14,29}, -{51,14,30}, -{51,14,31}, -{51,14,32}, -{51,14,33}, -{51,14,34}, -{51,14,35}, -{51,14,36}, -{51,14,37}, -{51,14,38}, -{51,14,39}, -{51,14,40}, -{51,14,41}, -{51,14,42}, -{51,14,43}, -{51,14,44}, -{51,14,45}, -{51,14,46}, -{51,14,47}, -{51,14,48}, -{51,14,49}, -{51,14,50}, -{51,14,51}, -{51,14,52}, -{51,14,53}, -{51,14,54}, -{51,14,55}, -{51,14,56}, -{51,14,57}, -{51,14,58}, -{51,15,-64}, -{51,15,-63}, -{51,15,-62}, -{51,15,-61}, -{51,15,-60}, -{51,15,-59}, -{51,15,-58}, -{51,15,-57}, -{51,15,-56}, -{51,15,-55}, -{51,15,-54}, -{51,15,-53}, -{51,15,-52}, -{51,15,-51}, -{51,15,-50}, -{51,15,-49}, -{51,15,-48}, -{51,15,-47}, -{51,15,-46}, -{51,15,-45}, -{51,15,-44}, -{51,15,-43}, -{51,15,-42}, -{51,15,-41}, -{51,15,-40}, -{51,15,-39}, -{51,15,-38}, -{51,15,-37}, -{51,15,-36}, -{51,15,-35}, -{51,15,-34}, -{51,15,-33}, -{51,15,-32}, -{51,15,-31}, -{51,15,-30}, -{51,15,-29}, -{51,15,-28}, -{51,15,-27}, -{51,15,-26}, -{51,15,-25}, -{51,15,-24}, -{51,15,-23}, -{51,15,-22}, -{51,15,-21}, -{51,15,-20}, -{51,15,-19}, -{51,15,-18}, -{51,15,-17}, -{51,15,-16}, -{51,15,-15}, -{51,15,-14}, -{51,15,-13}, -{51,15,-12}, -{51,15,-11}, -{51,15,-10}, -{51,15,-9}, -{51,15,-8}, -{51,15,-7}, -{51,15,-6}, -{51,15,-5}, -{51,15,-4}, -{51,15,-3}, -{51,15,-2}, -{51,15,-1}, -{51,15,0}, -{51,15,1}, -{51,15,2}, -{51,15,3}, -{51,15,4}, -{51,15,5}, -{51,15,6}, -{51,15,7}, -{51,15,8}, -{51,15,9}, -{51,15,10}, -{51,15,11}, -{51,15,12}, -{51,15,13}, -{51,15,14}, -{51,15,15}, -{51,15,16}, -{51,15,17}, -{51,15,18}, -{51,15,19}, -{51,15,20}, -{51,15,21}, -{51,15,22}, -{51,15,23}, -{51,15,24}, -{51,15,25}, -{51,15,26}, -{51,15,27}, -{51,15,28}, -{51,15,29}, -{51,15,30}, -{51,15,31}, -{51,15,32}, -{51,15,33}, -{51,15,34}, -{51,15,35}, -{51,15,36}, -{51,15,37}, -{51,15,38}, -{51,15,39}, -{51,15,40}, -{51,15,41}, -{51,15,42}, -{51,15,43}, -{51,15,44}, -{51,15,45}, -{51,15,46}, -{51,15,47}, -{51,15,48}, -{51,15,49}, -{51,15,50}, -{51,15,51}, -{51,15,52}, -{51,15,53}, -{51,15,54}, -{51,15,55}, -{51,15,56}, -{51,15,57}, -{51,15,58}, -{51,16,-65}, -{51,16,-64}, -{51,16,-63}, -{51,16,-62}, -{51,16,-61}, -{51,16,-60}, -{51,16,-59}, -{51,16,-58}, -{51,16,-57}, -{51,16,-56}, -{51,16,-55}, -{51,16,-54}, -{51,16,-53}, -{51,16,-52}, -{51,16,-51}, -{51,16,-50}, -{51,16,-49}, -{51,16,-48}, -{51,16,-47}, -{51,16,-46}, -{51,16,-45}, -{51,16,-44}, -{51,16,-43}, -{51,16,-42}, -{51,16,-41}, -{51,16,-40}, -{51,16,-39}, -{51,16,-38}, -{51,16,-37}, -{51,16,-36}, -{51,16,-35}, -{51,16,-34}, -{51,16,-33}, -{51,16,-32}, -{51,16,-31}, -{51,16,-30}, -{51,16,-29}, -{51,16,-28}, -{51,16,-27}, -{51,16,-26}, -{51,16,-25}, -{51,16,-24}, -{51,16,-23}, -{51,16,-22}, -{51,16,-21}, -{51,16,-20}, -{51,16,-19}, -{51,16,-18}, -{51,16,-17}, -{51,16,-16}, -{51,16,-15}, -{51,16,-14}, -{51,16,-13}, -{51,16,-12}, -{51,16,-11}, -{51,16,-10}, -{51,16,-9}, -{51,16,-8}, -{51,16,-7}, -{51,16,-6}, -{51,16,-5}, -{51,16,-4}, -{51,16,-3}, -{51,16,-2}, -{51,16,-1}, -{51,16,0}, -{51,16,1}, -{51,16,2}, -{51,16,3}, -{51,16,4}, -{51,16,5}, -{51,16,6}, -{51,16,7}, -{51,16,8}, -{51,16,9}, -{51,16,10}, -{51,16,11}, -{51,16,12}, -{51,16,13}, -{51,16,14}, -{51,16,15}, -{51,16,16}, -{51,16,17}, -{51,16,18}, -{51,16,19}, -{51,16,20}, -{51,16,21}, -{51,16,22}, -{51,16,23}, -{51,16,24}, -{51,16,25}, -{51,16,26}, -{51,16,27}, -{51,16,28}, -{51,16,29}, -{51,16,30}, -{51,16,31}, -{51,16,32}, -{51,16,33}, -{51,16,34}, -{51,16,35}, -{51,16,36}, -{51,16,37}, -{51,16,38}, -{51,16,39}, -{51,16,40}, -{51,16,41}, -{51,16,42}, -{51,16,43}, -{51,16,44}, -{51,16,45}, -{51,16,46}, -{51,16,47}, -{51,16,48}, -{51,16,49}, -{51,16,50}, -{51,16,51}, -{51,16,52}, -{51,16,53}, -{51,16,54}, -{51,16,55}, -{51,16,56}, -{51,16,57}, -{51,16,58}, -{51,17,-66}, -{51,17,-65}, -{51,17,-64}, -{51,17,-63}, -{51,17,-62}, -{51,17,-61}, -{51,17,-60}, -{51,17,-59}, -{51,17,-58}, -{51,17,-57}, -{51,17,-56}, -{51,17,-55}, -{51,17,-54}, -{51,17,-53}, -{51,17,-52}, -{51,17,-51}, -{51,17,-50}, -{51,17,-49}, -{51,17,-48}, -{51,17,-47}, -{51,17,-46}, -{51,17,-45}, -{51,17,-44}, -{51,17,-43}, -{51,17,-42}, -{51,17,-41}, -{51,17,-40}, -{51,17,-39}, -{51,17,-38}, -{51,17,-37}, -{51,17,-36}, -{51,17,-35}, -{51,17,-34}, -{51,17,-33}, -{51,17,-32}, -{51,17,-31}, -{51,17,-30}, -{51,17,-29}, -{51,17,-28}, -{51,17,-27}, -{51,17,-26}, -{51,17,-25}, -{51,17,-24}, -{51,17,-23}, -{51,17,-22}, -{51,17,-21}, -{51,17,-20}, -{51,17,-19}, -{51,17,-18}, -{51,17,-17}, -{51,17,-16}, -{51,17,-15}, -{51,17,-14}, -{51,17,-13}, -{51,17,-12}, -{51,17,-11}, -{51,17,-10}, -{51,17,-9}, -{51,17,-8}, -{51,17,-7}, -{51,17,-6}, -{51,17,-5}, -{51,17,-4}, -{51,17,-3}, -{51,17,-2}, -{51,17,-1}, -{51,17,0}, -{51,17,1}, -{51,17,2}, -{51,17,3}, -{51,17,4}, -{51,17,5}, -{51,17,6}, -{51,17,7}, -{51,17,8}, -{51,17,9}, -{51,17,10}, -{51,17,11}, -{51,17,12}, -{51,17,13}, -{51,17,14}, -{51,17,15}, -{51,17,16}, -{51,17,17}, -{51,17,18}, -{51,17,19}, -{51,17,20}, -{51,17,21}, -{51,17,22}, -{51,17,23}, -{51,17,24}, -{51,17,25}, -{51,17,26}, -{51,17,27}, -{51,17,28}, -{51,17,29}, -{51,17,30}, -{51,17,31}, -{51,17,32}, -{51,17,33}, -{51,17,34}, -{51,17,35}, -{51,17,36}, -{51,17,37}, -{51,17,38}, -{51,17,39}, -{51,17,40}, -{51,17,41}, -{51,17,42}, -{51,17,43}, -{51,17,44}, -{51,17,45}, -{51,17,46}, -{51,17,47}, -{51,17,48}, -{51,17,49}, -{51,17,50}, -{51,17,51}, -{51,17,52}, -{51,17,53}, -{51,17,54}, -{51,17,55}, -{51,17,56}, -{51,17,57}, -{51,17,58}, -{51,18,-67}, -{51,18,-66}, -{51,18,-65}, -{51,18,-64}, -{51,18,-63}, -{51,18,-62}, -{51,18,-61}, -{51,18,-60}, -{51,18,-59}, -{51,18,-58}, -{51,18,-57}, -{51,18,-56}, -{51,18,-55}, -{51,18,-54}, -{51,18,-53}, -{51,18,-52}, -{51,18,-51}, -{51,18,-50}, -{51,18,-49}, -{51,18,-48}, -{51,18,-47}, -{51,18,-46}, -{51,18,-45}, -{51,18,-44}, -{51,18,-43}, -{51,18,-42}, -{51,18,-41}, -{51,18,-40}, -{51,18,-39}, -{51,18,-38}, -{51,18,-37}, -{51,18,-36}, -{51,18,-35}, -{51,18,-34}, -{51,18,-33}, -{51,18,-32}, -{51,18,-31}, -{51,18,-30}, -{51,18,-29}, -{51,18,-28}, -{51,18,-27}, -{51,18,-26}, -{51,18,-25}, -{51,18,-24}, -{51,18,-23}, -{51,18,-22}, -{51,18,-21}, -{51,18,-20}, -{51,18,-19}, -{51,18,-18}, -{51,18,-17}, -{51,18,-16}, -{51,18,-15}, -{51,18,-14}, -{51,18,-13}, -{51,18,-12}, -{51,18,-11}, -{51,18,-10}, -{51,18,-9}, -{51,18,-8}, -{51,18,-7}, -{51,18,-6}, -{51,18,-5}, -{51,18,-4}, -{51,18,-3}, -{51,18,-2}, -{51,18,-1}, -{51,18,0}, -{51,18,1}, -{51,18,2}, -{51,18,3}, -{51,18,4}, -{51,18,5}, -{51,18,6}, -{51,18,7}, -{51,18,8}, -{51,18,9}, -{51,18,10}, -{51,18,11}, -{51,18,12}, -{51,18,13}, -{51,18,14}, -{51,18,15}, -{51,18,16}, -{51,18,17}, -{51,18,18}, -{51,18,19}, -{51,18,20}, -{51,18,21}, -{51,18,22}, -{51,18,23}, -{51,18,24}, -{51,18,25}, -{51,18,26}, -{51,18,27}, -{51,18,28}, -{51,18,29}, -{51,18,30}, -{51,18,31}, -{51,18,32}, -{51,18,33}, -{51,18,34}, -{51,18,35}, -{51,18,36}, -{51,18,37}, -{51,18,38}, -{51,18,39}, -{51,18,40}, -{51,18,41}, -{51,18,42}, -{51,18,43}, -{51,18,44}, -{51,18,45}, -{51,18,46}, -{51,18,47}, -{51,18,48}, -{51,18,49}, -{51,18,50}, -{51,18,51}, -{51,18,52}, -{51,18,53}, -{51,18,54}, -{51,18,55}, -{51,18,56}, -{51,18,57}, -{51,18,58}, -{51,19,-68}, -{51,19,-67}, -{51,19,-66}, -{51,19,-65}, -{51,19,-64}, -{51,19,-63}, -{51,19,-62}, -{51,19,-61}, -{51,19,-60}, -{51,19,-59}, -{51,19,-58}, -{51,19,-57}, -{51,19,-56}, -{51,19,-55}, -{51,19,-54}, -{51,19,-53}, -{51,19,-52}, -{51,19,-51}, -{51,19,-50}, -{51,19,-49}, -{51,19,-48}, -{51,19,-47}, -{51,19,-46}, -{51,19,-45}, -{51,19,-44}, -{51,19,-43}, -{51,19,-42}, -{51,19,-41}, -{51,19,-40}, -{51,19,-39}, -{51,19,-38}, -{51,19,-37}, -{51,19,-36}, -{51,19,-35}, -{51,19,-34}, -{51,19,-33}, -{51,19,-32}, -{51,19,-31}, -{51,19,-30}, -{51,19,-29}, -{51,19,-28}, -{51,19,-27}, -{51,19,-26}, -{51,19,-25}, -{51,19,-24}, -{51,19,-23}, -{51,19,-22}, -{51,19,-21}, -{51,19,-20}, -{51,19,-19}, -{51,19,-18}, -{51,19,-17}, -{51,19,-16}, -{51,19,-15}, -{51,19,-14}, -{51,19,-13}, -{51,19,-12}, -{51,19,-11}, -{51,19,-10}, -{51,19,-9}, -{51,19,-8}, -{51,19,-7}, -{51,19,-6}, -{51,19,-5}, -{51,19,-4}, -{51,19,-3}, -{51,19,-2}, -{51,19,-1}, -{51,19,0}, -{51,19,1}, -{51,19,2}, -{51,19,3}, -{51,19,4}, -{51,19,5}, -{51,19,6}, -{51,19,7}, -{51,19,8}, -{51,19,9}, -{51,19,10}, -{51,19,11}, -{51,19,12}, -{51,19,13}, -{51,19,14}, -{51,19,15}, -{51,19,16}, -{51,19,17}, -{51,19,18}, -{51,19,19}, -{51,19,20}, -{51,19,21}, -{51,19,22}, -{51,19,23}, -{51,19,24}, -{51,19,25}, -{51,19,26}, -{51,19,27}, -{51,19,28}, -{51,19,29}, -{51,19,30}, -{51,19,31}, -{51,19,32}, -{51,19,33}, -{51,19,34}, -{51,19,35}, -{51,19,36}, -{51,19,37}, -{51,19,38}, -{51,19,39}, -{51,19,40}, -{51,19,41}, -{51,19,42}, -{51,19,43}, -{51,19,44}, -{51,19,45}, -{51,19,46}, -{51,19,47}, -{51,19,48}, -{51,19,49}, -{51,19,50}, -{51,19,51}, -{51,19,52}, -{51,19,53}, -{51,19,54}, -{51,19,55}, -{51,19,56}, -{51,19,57}, -{51,19,58}, -{51,20,-69}, -{51,20,-68}, -{51,20,-67}, -{51,20,-66}, -{51,20,-65}, -{51,20,-64}, -{51,20,-63}, -{51,20,-62}, -{51,20,-61}, -{51,20,-60}, -{51,20,-59}, -{51,20,-58}, -{51,20,-57}, -{51,20,-56}, -{51,20,-55}, -{51,20,-54}, -{51,20,-53}, -{51,20,-52}, -{51,20,-51}, -{51,20,-50}, -{51,20,-49}, -{51,20,-48}, -{51,20,-47}, -{51,20,-46}, -{51,20,-45}, -{51,20,-44}, -{51,20,-43}, -{51,20,-42}, -{51,20,-41}, -{51,20,-40}, -{51,20,-39}, -{51,20,-38}, -{51,20,-37}, -{51,20,-36}, -{51,20,-35}, -{51,20,-34}, -{51,20,-33}, -{51,20,-32}, -{51,20,-31}, -{51,20,-30}, -{51,20,-29}, -{51,20,-28}, -{51,20,-27}, -{51,20,-26}, -{51,20,-25}, -{51,20,-24}, -{51,20,-23}, -{51,20,-22}, -{51,20,-21}, -{51,20,-20}, -{51,20,-19}, -{51,20,-18}, -{51,20,-17}, -{51,20,-16}, -{51,20,-15}, -{51,20,-14}, -{51,20,-13}, -{51,20,-12}, -{51,20,-11}, -{51,20,-10}, -{51,20,-9}, -{51,20,-8}, -{51,20,-7}, -{51,20,-6}, -{51,20,-5}, -{51,20,-4}, -{51,20,-3}, -{51,20,-2}, -{51,20,-1}, -{51,20,0}, -{51,20,1}, -{51,20,2}, -{51,20,3}, -{51,20,4}, -{51,20,5}, -{51,20,6}, -{51,20,7}, -{51,20,8}, -{51,20,9}, -{51,20,10}, -{51,20,11}, -{51,20,12}, -{51,20,13}, -{51,20,14}, -{51,20,15}, -{51,20,16}, -{51,20,17}, -{51,20,18}, -{51,20,19}, -{51,20,20}, -{51,20,21}, -{51,20,22}, -{51,20,23}, -{51,20,24}, -{51,20,25}, -{51,20,26}, -{51,20,27}, -{51,20,28}, -{51,20,29}, -{51,20,30}, -{51,20,31}, -{51,20,32}, -{51,20,33}, -{51,20,34}, -{51,20,35}, -{51,20,36}, -{51,20,37}, -{51,20,38}, -{51,20,39}, -{51,20,40}, -{51,20,41}, -{51,20,42}, -{51,20,43}, -{51,20,44}, -{51,20,45}, -{51,20,46}, -{51,20,47}, -{51,20,48}, -{51,20,49}, -{51,20,50}, -{51,20,51}, -{51,20,52}, -{51,20,53}, -{51,20,54}, -{51,20,55}, -{51,20,56}, -{51,20,57}, -{51,20,58}, -{51,21,-70}, -{51,21,-69}, -{51,21,-68}, -{51,21,-67}, -{51,21,-66}, -{51,21,-65}, -{51,21,-64}, -{51,21,-63}, -{51,21,-62}, -{51,21,-61}, -{51,21,-60}, -{51,21,-59}, -{51,21,-58}, -{51,21,-57}, -{51,21,-56}, -{51,21,-55}, -{51,21,-54}, -{51,21,-53}, -{51,21,-52}, -{51,21,-51}, -{51,21,-50}, -{51,21,-49}, -{51,21,-48}, -{51,21,-47}, -{51,21,-46}, -{51,21,-45}, -{51,21,-44}, -{51,21,-43}, -{51,21,-42}, -{51,21,-41}, -{51,21,-40}, -{51,21,-39}, -{51,21,-38}, -{51,21,-37}, -{51,21,-36}, -{51,21,-35}, -{51,21,-34}, -{51,21,-33}, -{51,21,-32}, -{51,21,-31}, -{51,21,-30}, -{51,21,-29}, -{51,21,-28}, -{51,21,-27}, -{51,21,-26}, -{51,21,-25}, -{51,21,-24}, -{51,21,-23}, -{51,21,-22}, -{51,21,-21}, -{51,21,-20}, -{51,21,-19}, -{51,21,-18}, -{51,21,-17}, -{51,21,-16}, -{51,21,-15}, -{51,21,-14}, -{51,21,-13}, -{51,21,-12}, -{51,21,-11}, -{51,21,-10}, -{51,21,-9}, -{51,21,-8}, -{51,21,-7}, -{51,21,-6}, -{51,21,-5}, -{51,21,-4}, -{51,21,-3}, -{51,21,-2}, -{51,21,-1}, -{51,21,0}, -{51,21,1}, -{51,21,2}, -{51,21,3}, -{51,21,4}, -{51,21,5}, -{51,21,6}, -{51,21,7}, -{51,21,8}, -{51,21,9}, -{51,21,10}, -{51,21,11}, -{51,21,12}, -{51,21,13}, -{51,21,14}, -{51,21,15}, -{51,21,16}, -{51,21,17}, -{51,21,18}, -{51,21,19}, -{51,21,20}, -{51,21,21}, -{51,21,22}, -{51,21,23}, -{51,21,24}, -{51,21,25}, -{51,21,26}, -{51,21,27}, -{51,21,28}, -{51,21,29}, -{51,21,30}, -{51,21,31}, -{51,21,32}, -{51,21,33}, -{51,21,34}, -{51,21,35}, -{51,21,36}, -{51,21,37}, -{51,21,38}, -{51,21,39}, -{51,21,40}, -{51,21,41}, -{51,21,42}, -{51,21,43}, -{51,21,44}, -{51,21,45}, -{51,21,46}, -{51,21,47}, -{51,21,48}, -{51,21,49}, -{51,21,50}, -{51,21,51}, -{51,21,52}, -{51,21,53}, -{51,21,54}, -{51,21,55}, -{51,21,56}, -{51,21,57}, -{51,21,58}, -{51,22,-71}, -{51,22,-70}, -{51,22,-69}, -{51,22,-68}, -{51,22,-67}, -{51,22,-66}, -{51,22,-65}, -{51,22,-64}, -{51,22,-63}, -{51,22,-62}, -{51,22,-61}, -{51,22,-60}, -{51,22,-59}, -{51,22,-58}, -{51,22,-57}, -{51,22,-56}, -{51,22,-55}, -{51,22,-54}, -{51,22,-53}, -{51,22,-52}, -{51,22,-51}, -{51,22,-50}, -{51,22,-49}, -{51,22,-48}, -{51,22,-47}, -{51,22,-46}, -{51,22,-45}, -{51,22,-44}, -{51,22,-43}, -{51,22,-42}, -{51,22,-41}, -{51,22,-40}, -{51,22,-39}, -{51,22,-38}, -{51,22,-37}, -{51,22,-36}, -{51,22,-35}, -{51,22,-34}, -{51,22,-33}, -{51,22,-32}, -{51,22,-31}, -{51,22,-30}, -{51,22,-29}, -{51,22,-28}, -{51,22,-27}, -{51,22,-26}, -{51,22,-25}, -{51,22,-24}, -{51,22,-23}, -{51,22,-22}, -{51,22,-21}, -{51,22,-20}, -{51,22,-19}, -{51,22,-18}, -{51,22,-17}, -{51,22,-16}, -{51,22,-15}, -{51,22,-14}, -{51,22,-13}, -{51,22,-12}, -{51,22,-11}, -{51,22,-10}, -{51,22,-9}, -{51,22,-8}, -{51,22,-7}, -{51,22,-6}, -{51,22,-5}, -{51,22,-4}, -{51,22,-3}, -{51,22,-2}, -{51,22,-1}, -{51,22,0}, -{51,22,1}, -{51,22,2}, -{51,22,3}, -{51,22,4}, -{51,22,5}, -{51,22,6}, -{51,22,7}, -{51,22,8}, -{51,22,9}, -{51,22,10}, -{51,22,11}, -{51,22,12}, -{51,22,13}, -{51,22,14}, -{51,22,15}, -{51,22,16}, -{51,22,17}, -{51,22,18}, -{51,22,19}, -{51,22,20}, -{51,22,21}, -{51,22,22}, -{51,22,23}, -{51,22,24}, -{51,22,25}, -{51,22,26}, -{51,22,27}, -{51,22,28}, -{51,22,29}, -{51,22,30}, -{51,22,31}, -{51,22,32}, -{51,22,33}, -{51,22,34}, -{51,22,35}, -{51,22,36}, -{51,22,37}, -{51,22,38}, -{51,22,39}, -{51,22,40}, -{51,22,41}, -{51,22,42}, -{51,22,43}, -{51,22,44}, -{51,22,45}, -{51,22,46}, -{51,22,47}, -{51,22,48}, -{51,22,49}, -{51,22,50}, -{51,22,51}, -{51,22,52}, -{51,22,53}, -{51,22,54}, -{51,22,55}, -{51,22,56}, -{51,22,57}, -{51,22,58}, -{51,23,-72}, -{51,23,-71}, -{51,23,-70}, -{51,23,-69}, -{51,23,-68}, -{51,23,-67}, -{51,23,-66}, -{51,23,-65}, -{51,23,-64}, -{51,23,-63}, -{51,23,-62}, -{51,23,-61}, -{51,23,-60}, -{51,23,-59}, -{51,23,-58}, -{51,23,-57}, -{51,23,-56}, -{51,23,-55}, -{51,23,-54}, -{51,23,-53}, -{51,23,-52}, -{51,23,-51}, -{51,23,-50}, -{51,23,-49}, -{51,23,-48}, -{51,23,-47}, -{51,23,-46}, -{51,23,-45}, -{51,23,-44}, -{51,23,-43}, -{51,23,-42}, -{51,23,-41}, -{51,23,-40}, -{51,23,-39}, -{51,23,-38}, -{51,23,-37}, -{51,23,-36}, -{51,23,-35}, -{51,23,-34}, -{51,23,-33}, -{51,23,-32}, -{51,23,-31}, -{51,23,-30}, -{51,23,-29}, -{51,23,-28}, -{51,23,-27}, -{51,23,-26}, -{51,23,-25}, -{51,23,-24}, -{51,23,-23}, -{51,23,-22}, -{51,23,-21}, -{51,23,-20}, -{51,23,-19}, -{51,23,-18}, -{51,23,-17}, -{51,23,-16}, -{51,23,-15}, -{51,23,-14}, -{51,23,-13}, -{51,23,-12}, -{51,23,-11}, -{51,23,-10}, -{51,23,-9}, -{51,23,-8}, -{51,23,-7}, -{51,23,-6}, -{51,23,-5}, -{51,23,-4}, -{51,23,-3}, -{51,23,-2}, -{51,23,-1}, -{51,23,0}, -{51,23,1}, -{51,23,2}, -{51,23,3}, -{51,23,4}, -{51,23,5}, -{51,23,6}, -{51,23,7}, -{51,23,8}, -{51,23,9}, -{51,23,10}, -{51,23,11}, -{51,23,12}, -{51,23,13}, -{51,23,14}, -{51,23,15}, -{51,23,16}, -{51,23,17}, -{51,23,18}, -{51,23,19}, -{51,23,20}, -{51,23,21}, -{51,23,22}, -{51,23,23}, -{51,23,24}, -{51,23,25}, -{51,23,26}, -{51,23,27}, -{51,23,28}, -{51,23,29}, -{51,23,30}, -{51,23,31}, -{51,23,32}, -{51,23,33}, -{51,23,34}, -{51,23,35}, -{51,23,36}, -{51,23,37}, -{51,23,38}, -{51,23,39}, -{51,23,40}, -{51,23,41}, -{51,23,42}, -{51,23,43}, -{51,23,44}, -{51,23,45}, -{51,23,46}, -{51,23,47}, -{51,23,48}, -{51,23,49}, -{51,23,50}, -{51,23,51}, -{51,23,52}, -{51,23,53}, -{51,23,54}, -{51,23,55}, -{51,23,56}, -{51,23,57}, -{51,23,58}, -{51,24,-73}, -{51,24,-72}, -{51,24,-71}, -{51,24,-70}, -{51,24,-69}, -{51,24,-68}, -{51,24,-67}, -{51,24,-66}, -{51,24,-65}, -{51,24,-64}, -{51,24,-63}, -{51,24,-62}, -{51,24,-61}, -{51,24,-60}, -{51,24,-59}, -{51,24,-58}, -{51,24,-57}, -{51,24,-56}, -{51,24,-55}, -{51,24,-54}, -{51,24,-53}, -{51,24,-52}, -{51,24,-51}, -{51,24,-50}, -{51,24,-49}, -{51,24,-48}, -{51,24,-47}, -{51,24,-46}, -{51,24,-45}, -{51,24,-44}, -{51,24,-43}, -{51,24,-42}, -{51,24,-41}, -{51,24,-40}, -{51,24,-39}, -{51,24,-38}, -{51,24,-37}, -{51,24,-36}, -{51,24,-35}, -{51,24,-34}, -{51,24,-33}, -{51,24,-32}, -{51,24,-31}, -{51,24,-30}, -{51,24,-29}, -{51,24,-28}, -{51,24,-27}, -{51,24,-26}, -{51,24,-25}, -{51,24,-24}, -{51,24,-23}, -{51,24,-22}, -{51,24,-21}, -{51,24,-20}, -{51,24,-19}, -{51,24,-18}, -{51,24,-17}, -{51,24,-16}, -{51,24,-15}, -{51,24,-14}, -{51,24,-13}, -{51,24,-12}, -{51,24,-11}, -{51,24,-10}, -{51,24,-9}, -{51,24,-8}, -{51,24,-7}, -{51,24,-6}, -{51,24,-5}, -{51,24,-4}, -{51,24,-3}, -{51,24,-2}, -{51,24,-1}, -{51,24,0}, -{51,24,1}, -{51,24,2}, -{51,24,3}, -{51,24,4}, -{51,24,5}, -{51,24,6}, -{51,24,7}, -{51,24,8}, -{51,24,9}, -{51,24,10}, -{51,24,11}, -{51,24,12}, -{51,24,13}, -{51,24,14}, -{51,24,15}, -{51,24,16}, -{51,24,17}, -{51,24,18}, -{51,24,19}, -{51,24,20}, -{51,24,21}, -{51,24,22}, -{51,24,23}, -{51,24,24}, -{51,24,25}, -{51,24,26}, -{51,24,27}, -{51,24,28}, -{51,24,29}, -{51,24,30}, -{51,24,31}, -{51,24,32}, -{51,24,33}, -{51,24,34}, -{51,24,35}, -{51,24,36}, -{51,24,37}, -{51,24,38}, -{51,24,39}, -{51,24,40}, -{51,24,41}, -{51,24,42}, -{51,24,43}, -{51,24,44}, -{51,24,45}, -{51,24,46}, -{51,24,47}, -{51,24,48}, -{51,24,49}, -{51,24,50}, -{51,24,51}, -{51,24,52}, -{51,24,53}, -{51,24,54}, -{51,24,55}, -{51,24,56}, -{51,24,57}, -{51,24,58}, -{51,25,-74}, -{51,25,-73}, -{51,25,-72}, -{51,25,-71}, -{51,25,-70}, -{51,25,-69}, -{51,25,-68}, -{51,25,-67}, -{51,25,-66}, -{51,25,-65}, -{51,25,-64}, -{51,25,-63}, -{51,25,-62}, -{51,25,-61}, -{51,25,-60}, -{51,25,-59}, -{51,25,-58}, -{51,25,-57}, -{51,25,-56}, -{51,25,-55}, -{51,25,-54}, -{51,25,-53}, -{51,25,-52}, -{51,25,-51}, -{51,25,-50}, -{51,25,-49}, -{51,25,-48}, -{51,25,-47}, -{51,25,-46}, -{51,25,-45}, -{51,25,-44}, -{51,25,-43}, -{51,25,-42}, -{51,25,-41}, -{51,25,-40}, -{51,25,-39}, -{51,25,-38}, -{51,25,-37}, -{51,25,-36}, -{51,25,-35}, -{51,25,-34}, -{51,25,-33}, -{51,25,-32}, -{51,25,-31}, -{51,25,-30}, -{51,25,-29}, -{51,25,-28}, -{51,25,-27}, -{51,25,-26}, -{51,25,-25}, -{51,25,-24}, -{51,25,-23}, -{51,25,-22}, -{51,25,-21}, -{51,25,-20}, -{51,25,-19}, -{51,25,-18}, -{51,25,-17}, -{51,25,-16}, -{51,25,-15}, -{51,25,-14}, -{51,25,-13}, -{51,25,-12}, -{51,25,-11}, -{51,25,-10}, -{51,25,-9}, -{51,25,-8}, -{51,25,-7}, -{51,25,-6}, -{51,25,-5}, -{51,25,-4}, -{51,25,-3}, -{51,25,-2}, -{51,25,-1}, -{51,25,0}, -{51,25,1}, -{51,25,2}, -{51,25,3}, -{51,25,4}, -{51,25,5}, -{51,25,6}, -{51,25,7}, -{51,25,8}, -{51,25,9}, -{51,25,10}, -{51,25,11}, -{51,25,12}, -{51,25,13}, -{51,25,14}, -{51,25,15}, -{51,25,16}, -{51,25,17}, -{51,25,18}, -{51,25,19}, -{51,25,20}, -{51,25,21}, -{51,25,22}, -{51,25,23}, -{51,25,24}, -{51,25,25}, -{51,25,26}, -{51,25,27}, -{51,25,28}, -{51,25,29}, -{51,25,30}, -{51,25,31}, -{51,25,32}, -{51,25,33}, -{51,25,34}, -{51,25,35}, -{51,25,36}, -{51,25,37}, -{51,25,38}, -{51,25,39}, -{51,25,40}, -{51,25,41}, -{51,25,42}, -{51,25,43}, -{51,25,44}, -{51,25,45}, -{51,25,46}, -{51,25,47}, -{51,25,48}, -{51,25,49}, -{51,25,50}, -{51,25,51}, -{51,25,52}, -{51,25,53}, -{51,25,54}, -{51,25,55}, -{51,25,56}, -{51,25,57}, -{51,25,58}, -{51,25,59}, -{51,26,-75}, -{51,26,-74}, -{51,26,-73}, -{51,26,-72}, -{51,26,-71}, -{51,26,-70}, -{51,26,-69}, -{51,26,-68}, -{51,26,-67}, -{51,26,-66}, -{51,26,-65}, -{51,26,-64}, -{51,26,-63}, -{51,26,-62}, -{51,26,-61}, -{51,26,-60}, -{51,26,-59}, -{51,26,-58}, -{51,26,-57}, -{51,26,-56}, -{51,26,-55}, -{51,26,-54}, -{51,26,-53}, -{51,26,-52}, -{51,26,-51}, -{51,26,-50}, -{51,26,-49}, -{51,26,-48}, -{51,26,-47}, -{51,26,-46}, -{51,26,-45}, -{51,26,-44}, -{51,26,-43}, -{51,26,-42}, -{51,26,-41}, -{51,26,-40}, -{51,26,-39}, -{51,26,-38}, -{51,26,-37}, -{51,26,-36}, -{51,26,-35}, -{51,26,-34}, -{51,26,-33}, -{51,26,-32}, -{51,26,-31}, -{51,26,-30}, -{51,26,-29}, -{51,26,-28}, -{51,26,-27}, -{51,26,-26}, -{51,26,-25}, -{51,26,-24}, -{51,26,-23}, -{51,26,-22}, -{51,26,-21}, -{51,26,-20}, -{51,26,-19}, -{51,26,-18}, -{51,26,-17}, -{51,26,-16}, -{51,26,-15}, -{51,26,-14}, -{51,26,-13}, -{51,26,-12}, -{51,26,-11}, -{51,26,-10}, -{51,26,-9}, -{51,26,-8}, -{51,26,-7}, -{51,26,-6}, -{51,26,-5}, -{51,26,-4}, -{51,26,-3}, -{51,26,-2}, -{51,26,-1}, -{51,26,0}, -{51,26,1}, -{51,26,2}, -{51,26,3}, -{51,26,4}, -{51,26,5}, -{51,26,6}, -{51,26,7}, -{51,26,8}, -{51,26,9}, -{51,26,10}, -{51,26,11}, -{51,26,12}, -{51,26,13}, -{51,26,14}, -{51,26,15}, -{51,26,16}, -{51,26,17}, -{51,26,18}, -{51,26,19}, -{51,26,20}, -{51,26,21}, -{51,26,22}, -{51,26,23}, -{51,26,24}, -{51,26,25}, -{51,26,26}, -{51,26,27}, -{51,26,28}, -{51,26,29}, -{51,26,30}, -{51,26,31}, -{51,26,32}, -{51,26,33}, -{51,26,34}, -{51,26,35}, -{51,26,36}, -{51,26,37}, -{51,26,38}, -{51,26,39}, -{51,26,40}, -{51,26,41}, -{51,26,42}, -{51,26,43}, -{51,26,44}, -{51,26,45}, -{51,26,46}, -{51,26,47}, -{51,26,48}, -{51,26,49}, -{51,26,50}, -{51,26,51}, -{51,26,52}, -{51,26,53}, -{51,26,54}, -{51,26,55}, -{51,26,56}, -{51,26,57}, -{51,26,58}, -{51,26,59}, -{51,27,-76}, -{51,27,-75}, -{51,27,-74}, -{51,27,-73}, -{51,27,-72}, -{51,27,-71}, -{51,27,-70}, -{51,27,-69}, -{51,27,-68}, -{51,27,-67}, -{51,27,-66}, -{51,27,-65}, -{51,27,-64}, -{51,27,-63}, -{51,27,-62}, -{51,27,-61}, -{51,27,-60}, -{51,27,-59}, -{51,27,-58}, -{51,27,-57}, -{51,27,-56}, -{51,27,-55}, -{51,27,-54}, -{51,27,-53}, -{51,27,-52}, -{51,27,-51}, -{51,27,-50}, -{51,27,-49}, -{51,27,-48}, -{51,27,-47}, -{51,27,-46}, -{51,27,-45}, -{51,27,-44}, -{51,27,-43}, -{51,27,-42}, -{51,27,-41}, -{51,27,-40}, -{51,27,-39}, -{51,27,-38}, -{51,27,-37}, -{51,27,-36}, -{51,27,-35}, -{51,27,-34}, -{51,27,-33}, -{51,27,-32}, -{51,27,-31}, -{51,27,-30}, -{51,27,-29}, -{51,27,-28}, -{51,27,-27}, -{51,27,-26}, -{51,27,-25}, -{51,27,-24}, -{51,27,-23}, -{51,27,-22}, -{51,27,-21}, -{51,27,-20}, -{51,27,-19}, -{51,27,-18}, -{51,27,-17}, -{51,27,-16}, -{51,27,-15}, -{51,27,-14}, -{51,27,-13}, -{51,27,-12}, -{51,27,-11}, -{51,27,-10}, -{51,27,-9}, -{51,27,-8}, -{51,27,-7}, -{51,27,-6}, -{51,27,-5}, -{51,27,-4}, -{51,27,-3}, -{51,27,-2}, -{51,27,-1}, -{51,27,0}, -{51,27,1}, -{51,27,2}, -{51,27,3}, -{51,27,4}, -{51,27,5}, -{51,27,6}, -{51,27,7}, -{51,27,8}, -{51,27,9}, -{51,27,10}, -{51,27,11}, -{51,27,12}, -{51,27,13}, -{51,27,14}, -{51,27,15}, -{51,27,16}, -{51,27,17}, -{51,27,18}, -{51,27,19}, -{51,27,20}, -{51,27,21}, -{51,27,22}, -{51,27,23}, -{51,27,24}, -{51,27,25}, -{51,27,26}, -{51,27,27}, -{51,27,28}, -{51,27,29}, -{51,27,30}, -{51,27,31}, -{51,27,32}, -{51,27,33}, -{51,27,34}, -{51,27,35}, -{51,27,36}, -{51,27,37}, -{51,27,38}, -{51,27,39}, -{51,27,40}, -{51,27,41}, -{51,27,42}, -{51,27,43}, -{51,27,44}, -{51,27,45}, -{51,27,46}, -{51,27,47}, -{51,27,48}, -{51,27,49}, -{51,27,50}, -{51,27,51}, -{51,27,52}, -{51,27,53}, -{51,27,54}, -{51,27,55}, -{51,27,56}, -{51,27,57}, -{51,27,58}, -{51,27,59}, -{51,28,-77}, -{51,28,-76}, -{51,28,-75}, -{51,28,-74}, -{51,28,-73}, -{51,28,-72}, -{51,28,-71}, -{51,28,-70}, -{51,28,-69}, -{51,28,-68}, -{51,28,-67}, -{51,28,-66}, -{51,28,-65}, -{51,28,-64}, -{51,28,-63}, -{51,28,-62}, -{51,28,-61}, -{51,28,-60}, -{51,28,-59}, -{51,28,-58}, -{51,28,-57}, -{51,28,-56}, -{51,28,-55}, -{51,28,-54}, -{51,28,-53}, -{51,28,-52}, -{51,28,-51}, -{51,28,-50}, -{51,28,-49}, -{51,28,-48}, -{51,28,-47}, -{51,28,-46}, -{51,28,-45}, -{51,28,-44}, -{51,28,-43}, -{51,28,-42}, -{51,28,-41}, -{51,28,-40}, -{51,28,-39}, -{51,28,-38}, -{51,28,-37}, -{51,28,-36}, -{51,28,-35}, -{51,28,-34}, -{51,28,-33}, -{51,28,-32}, -{51,28,-31}, -{51,28,-30}, -{51,28,-29}, -{51,28,-28}, -{51,28,-27}, -{51,28,-26}, -{51,28,-25}, -{51,28,-24}, -{51,28,-23}, -{51,28,-22}, -{51,28,-21}, -{51,28,-20}, -{51,28,-19}, -{51,28,-18}, -{51,28,-17}, -{51,28,-16}, -{51,28,-15}, -{51,28,-14}, -{51,28,-13}, -{51,28,-12}, -{51,28,-11}, -{51,28,-10}, -{51,28,-9}, -{51,28,-8}, -{51,28,-7}, -{51,28,-6}, -{51,28,-5}, -{51,28,-4}, -{51,28,-3}, -{51,28,-2}, -{51,28,-1}, -{51,28,0}, -{51,28,1}, -{51,28,2}, -{51,28,3}, -{51,28,4}, -{51,28,5}, -{51,28,6}, -{51,28,7}, -{51,28,8}, -{51,28,9}, -{51,28,10}, -{51,28,11}, -{51,28,12}, -{51,28,13}, -{51,28,14}, -{51,28,15}, -{51,28,16}, -{51,28,17}, -{51,28,18}, -{51,28,19}, -{51,28,20}, -{51,28,21}, -{51,28,22}, -{51,28,23}, -{51,28,24}, -{51,28,25}, -{51,28,26}, -{51,28,27}, -{51,28,28}, -{51,28,29}, -{51,28,30}, -{51,28,31}, -{51,28,32}, -{51,28,33}, -{51,28,34}, -{51,28,35}, -{51,28,36}, -{51,28,37}, -{51,28,38}, -{51,28,39}, -{51,28,40}, -{51,28,41}, -{51,28,42}, -{51,28,43}, -{51,28,44}, -{51,28,45}, -{51,28,46}, -{51,28,47}, -{51,28,48}, -{51,28,49}, -{51,28,50}, -{51,28,51}, -{51,28,52}, -{51,28,53}, -{51,28,54}, -{51,28,55}, -{51,28,56}, -{51,28,57}, -{51,28,58}, -{51,28,59}, -{51,29,-77}, -{51,29,-76}, -{51,29,-75}, -{51,29,-74}, -{51,29,-73}, -{51,29,-72}, -{51,29,-71}, -{51,29,-70}, -{51,29,-69}, -{51,29,-68}, -{51,29,-67}, -{51,29,-66}, -{51,29,-65}, -{51,29,-64}, -{51,29,-63}, -{51,29,-62}, -{51,29,-61}, -{51,29,-60}, -{51,29,-59}, -{51,29,-58}, -{51,29,-57}, -{51,29,-56}, -{51,29,-55}, -{51,29,-54}, -{51,29,-53}, -{51,29,-52}, -{51,29,-51}, -{51,29,-50}, -{51,29,-49}, -{51,29,-48}, -{51,29,-47}, -{51,29,-46}, -{51,29,-45}, -{51,29,-44}, -{51,29,-43}, -{51,29,-42}, -{51,29,-41}, -{51,29,-40}, -{51,29,-39}, -{51,29,-38}, -{51,29,-37}, -{51,29,-36}, -{51,29,-35}, -{51,29,-34}, -{51,29,-33}, -{51,29,-32}, -{51,29,-31}, -{51,29,-30}, -{51,29,-29}, -{51,29,-28}, -{51,29,-27}, -{51,29,-26}, -{51,29,-25}, -{51,29,-24}, -{51,29,-23}, -{51,29,-22}, -{51,29,-21}, -{51,29,-20}, -{51,29,-19}, -{51,29,-18}, -{51,29,-17}, -{51,29,-16}, -{51,29,-15}, -{51,29,-14}, -{51,29,-13}, -{51,29,-12}, -{51,29,-11}, -{51,29,-10}, -{51,29,-9}, -{51,29,-8}, -{51,29,-7}, -{51,29,-6}, -{51,29,-5}, -{51,29,-4}, -{51,29,-3}, -{51,29,-2}, -{51,29,-1}, -{51,29,0}, -{51,29,1}, -{51,29,2}, -{51,29,3}, -{51,29,4}, -{51,29,5}, -{51,29,6}, -{51,29,7}, -{51,29,8}, -{51,29,9}, -{51,29,10}, -{51,29,11}, -{51,29,12}, -{51,29,13}, -{51,29,14}, -{51,29,15}, -{51,29,16}, -{51,29,17}, -{51,29,18}, -{51,29,19}, -{51,29,20}, -{51,29,21}, -{51,29,22}, -{51,29,23}, -{51,29,24}, -{51,29,25}, -{51,29,26}, -{51,29,27}, -{51,29,28}, -{51,29,29}, -{51,29,30}, -{51,29,31}, -{51,29,32}, -{51,29,33}, -{51,29,34}, -{51,29,35}, -{51,29,36}, -{51,29,37}, -{51,29,38}, -{51,29,39}, -{51,29,40}, -{51,29,41}, -{51,29,42}, -{51,29,43}, -{51,29,44}, -{51,29,45}, -{51,29,46}, -{51,29,47}, -{51,29,48}, -{51,29,49}, -{51,29,50}, -{51,29,51}, -{51,29,52}, -{51,29,53}, -{51,29,54}, -{51,29,55}, -{51,29,56}, -{51,29,57}, -{51,29,58}, -{51,29,59}, -{51,30,-77}, -{51,30,-76}, -{51,30,-75}, -{51,30,-74}, -{51,30,-73}, -{51,30,-72}, -{51,30,-71}, -{51,30,-70}, -{51,30,-69}, -{51,30,-68}, -{51,30,-67}, -{51,30,-66}, -{51,30,-65}, -{51,30,-64}, -{51,30,-63}, -{51,30,-62}, -{51,30,-61}, -{51,30,-60}, -{51,30,-59}, -{51,30,-58}, -{51,30,-57}, -{51,30,-56}, -{51,30,-55}, -{51,30,-54}, -{51,30,-53}, -{51,30,-52}, -{51,30,-51}, -{51,30,-50}, -{51,30,-49}, -{51,30,-48}, -{51,30,-47}, -{51,30,-46}, -{51,30,-45}, -{51,30,-44}, -{51,30,-43}, -{51,30,-42}, -{51,30,-41}, -{51,30,-40}, -{51,30,-39}, -{51,30,-38}, -{51,30,-37}, -{51,30,-36}, -{51,30,-35}, -{51,30,-34}, -{51,30,-33}, -{51,30,-32}, -{51,30,-31}, -{51,30,-30}, -{51,30,-29}, -{51,30,-28}, -{51,30,-27}, -{51,30,-26}, -{51,30,-25}, -{51,30,-24}, -{51,30,-23}, -{51,30,-22}, -{51,30,-21}, -{51,30,-20}, -{51,30,-19}, -{51,30,-18}, -{51,30,-17}, -{51,30,-16}, -{51,30,-15}, -{51,30,-14}, -{51,30,-13}, -{51,30,-12}, -{51,30,-11}, -{51,30,-10}, -{51,30,-9}, -{51,30,-8}, -{51,30,-7}, -{51,30,-6}, -{51,30,-5}, -{51,30,-4}, -{51,30,-3}, -{51,30,-2}, -{51,30,-1}, -{51,30,0}, -{51,30,1}, -{51,30,2}, -{51,30,3}, -{51,30,4}, -{51,30,5}, -{51,30,6}, -{51,30,7}, -{51,30,8}, -{51,30,9}, -{51,30,10}, -{51,30,11}, -{51,30,12}, -{51,30,13}, -{51,30,14}, -{51,30,15}, -{51,30,16}, -{51,30,17}, -{51,30,18}, -{51,30,19}, -{51,30,20}, -{51,30,21}, -{51,30,22}, -{51,30,23}, -{51,30,24}, -{51,30,25}, -{51,30,26}, -{51,30,27}, -{51,30,28}, -{51,30,29}, -{51,30,30}, -{51,30,31}, -{51,30,32}, -{51,30,33}, -{51,30,34}, -{51,30,35}, -{51,30,36}, -{51,30,37}, -{51,30,38}, -{51,30,39}, -{51,30,40}, -{51,30,41}, -{51,30,42}, -{51,30,43}, -{51,30,44}, -{51,30,45}, -{51,30,46}, -{51,30,47}, -{51,30,48}, -{51,30,49}, -{51,30,50}, -{51,30,51}, -{51,30,52}, -{51,30,53}, -{51,30,54}, -{51,30,55}, -{51,30,56}, -{51,30,57}, -{51,30,58}, -{51,30,59}, -{51,31,-77}, -{51,31,-76}, -{51,31,-75}, -{51,31,-74}, -{51,31,-73}, -{51,31,-72}, -{51,31,-71}, -{51,31,-70}, -{51,31,-69}, -{51,31,-68}, -{51,31,-67}, -{51,31,-66}, -{51,31,-65}, -{51,31,-64}, -{51,31,-63}, -{51,31,-62}, -{51,31,-61}, -{51,31,-60}, -{51,31,-59}, -{51,31,-58}, -{51,31,-57}, -{51,31,-56}, -{51,31,-55}, -{51,31,-54}, -{51,31,-53}, -{51,31,-52}, -{51,31,-51}, -{51,31,-50}, -{51,31,-49}, -{51,31,-48}, -{51,31,-47}, -{51,31,-46}, -{51,31,-45}, -{51,31,-44}, -{51,31,-43}, -{51,31,-42}, -{51,31,-41}, -{51,31,-40}, -{51,31,-39}, -{51,31,-38}, -{51,31,-37}, -{51,31,-36}, -{51,31,-35}, -{51,31,-34}, -{51,31,-33}, -{51,31,-32}, -{51,31,-31}, -{51,31,-30}, -{51,31,-29}, -{51,31,-28}, -{51,31,-27}, -{51,31,-26}, -{51,31,-25}, -{51,31,-24}, -{51,31,-23}, -{51,31,-22}, -{51,31,-21}, -{51,31,-20}, -{51,31,-19}, -{51,31,-18}, -{51,31,-17}, -{51,31,-16}, -{51,31,-15}, -{51,31,-14}, -{51,31,-13}, -{51,31,-12}, -{51,31,-11}, -{51,31,-10}, -{51,31,-9}, -{51,31,-8}, -{51,31,-7}, -{51,31,-6}, -{51,31,-5}, -{51,31,-4}, -{51,31,-3}, -{51,31,-2}, -{51,31,-1}, -{51,31,0}, -{51,31,1}, -{51,31,2}, -{51,31,3}, -{51,31,4}, -{51,31,5}, -{51,31,6}, -{51,31,7}, -{51,31,8}, -{51,31,9}, -{51,31,10}, -{51,31,11}, -{51,31,12}, -{51,31,13}, -{51,31,14}, -{51,31,15}, -{51,31,16}, -{51,31,17}, -{51,31,18}, -{51,31,19}, -{51,31,20}, -{51,31,21}, -{51,31,22}, -{51,31,23}, -{51,31,24}, -{51,31,25}, -{51,31,26}, -{51,31,27}, -{51,31,28}, -{51,31,29}, -{51,31,30}, -{51,31,31}, -{51,31,32}, -{51,31,33}, -{51,31,34}, -{51,31,35}, -{51,31,36}, -{51,31,37}, -{51,31,38}, -{51,31,39}, -{51,31,40}, -{51,31,41}, -{51,31,42}, -{51,31,43}, -{51,31,44}, -{51,31,45}, -{51,31,46}, -{51,31,47}, -{51,31,48}, -{51,31,49}, -{51,31,50}, -{51,31,51}, -{51,31,52}, -{51,31,53}, -{51,31,54}, -{51,31,55}, -{51,31,56}, -{51,31,57}, -{51,31,58}, -{51,31,59}, -{51,32,-77}, -{51,32,-76}, -{51,32,-75}, -{51,32,-74}, -{51,32,-73}, -{51,32,-72}, -{51,32,-71}, -{51,32,-70}, -{51,32,-69}, -{51,32,-68}, -{51,32,-67}, -{51,32,-66}, -{51,32,-65}, -{51,32,-64}, -{51,32,-63}, -{51,32,-62}, -{51,32,-61}, -{51,32,-60}, -{51,32,-59}, -{51,32,-58}, -{51,32,-57}, -{51,32,-56}, -{51,32,-55}, -{51,32,-54}, -{51,32,-53}, -{51,32,-52}, -{51,32,-51}, -{51,32,-50}, -{51,32,-49}, -{51,32,-48}, -{51,32,-47}, -{51,32,-46}, -{51,32,-45}, -{51,32,-44}, -{51,32,-43}, -{51,32,-42}, -{51,32,-41}, -{51,32,-40}, -{51,32,-39}, -{51,32,-38}, -{51,32,-37}, -{51,32,-36}, -{51,32,-35}, -{51,32,-34}, -{51,32,-33}, -{51,32,-32}, -{51,32,-31}, -{51,32,-30}, -{51,32,-29}, -{51,32,-28}, -{51,32,-27}, -{51,32,-26}, -{51,32,-25}, -{51,32,-24}, -{51,32,-23}, -{51,32,-22}, -{51,32,-21}, -{51,32,-20}, -{51,32,-19}, -{51,32,-18}, -{51,32,-17}, -{51,32,-16}, -{51,32,-15}, -{51,32,-14}, -{51,32,-13}, -{51,32,-12}, -{51,32,-11}, -{51,32,-10}, -{51,32,-9}, -{51,32,-8}, -{51,32,-7}, -{51,32,-6}, -{51,32,-5}, -{51,32,-4}, -{51,32,-3}, -{51,32,-2}, -{51,32,-1}, -{51,32,0}, -{51,32,1}, -{51,32,2}, -{51,32,3}, -{51,32,4}, -{51,32,5}, -{51,32,6}, -{51,32,7}, -{51,32,8}, -{51,32,9}, -{51,32,10}, -{51,32,11}, -{51,32,12}, -{51,32,13}, -{51,32,14}, -{51,32,15}, -{51,32,16}, -{51,32,17}, -{51,32,18}, -{51,32,19}, -{51,32,20}, -{51,32,21}, -{51,32,22}, -{51,32,23}, -{51,32,24}, -{51,32,25}, -{51,32,26}, -{51,32,27}, -{51,32,28}, -{51,32,29}, -{51,32,30}, -{51,32,31}, -{51,32,32}, -{51,32,33}, -{51,32,34}, -{51,32,35}, -{51,32,36}, -{51,32,37}, -{51,32,38}, -{51,32,39}, -{51,32,40}, -{51,32,41}, -{51,32,42}, -{51,32,43}, -{51,32,44}, -{51,32,45}, -{51,32,46}, -{51,32,47}, -{51,32,48}, -{51,32,49}, -{51,32,50}, -{51,32,51}, -{51,32,52}, -{51,32,53}, -{51,32,54}, -{51,32,55}, -{51,32,56}, -{51,32,57}, -{51,32,58}, -{51,32,59}, -{51,33,-77}, -{51,33,-76}, -{51,33,-75}, -{51,33,-74}, -{51,33,-73}, -{51,33,-72}, -{51,33,-71}, -{51,33,-70}, -{51,33,-69}, -{51,33,-68}, -{51,33,-67}, -{51,33,-66}, -{51,33,-65}, -{51,33,-64}, -{51,33,-63}, -{51,33,-62}, -{51,33,-61}, -{51,33,-60}, -{51,33,-59}, -{51,33,-58}, -{51,33,-57}, -{51,33,-56}, -{51,33,-55}, -{51,33,-54}, -{51,33,-53}, -{51,33,-52}, -{51,33,-51}, -{51,33,-50}, -{51,33,-49}, -{51,33,-48}, -{51,33,-47}, -{51,33,-46}, -{51,33,-45}, -{51,33,-44}, -{51,33,-43}, -{51,33,-42}, -{51,33,-41}, -{51,33,-40}, -{51,33,-39}, -{51,33,-38}, -{51,33,-37}, -{51,33,-36}, -{51,33,-35}, -{51,33,-34}, -{51,33,-33}, -{51,33,-32}, -{51,33,-31}, -{51,33,-30}, -{51,33,-29}, -{51,33,-28}, -{51,33,-27}, -{51,33,-26}, -{51,33,-25}, -{51,33,-24}, -{51,33,-23}, -{51,33,-22}, -{51,33,-21}, -{51,33,-20}, -{51,33,-19}, -{51,33,-18}, -{51,33,-17}, -{51,33,-16}, -{51,33,-15}, -{51,33,-14}, -{51,33,-13}, -{51,33,-12}, -{51,33,-11}, -{51,33,-10}, -{51,33,-9}, -{51,33,-8}, -{51,33,-7}, -{51,33,-6}, -{51,33,-5}, -{51,33,-4}, -{51,33,-3}, -{51,33,-2}, -{51,33,-1}, -{51,33,0}, -{51,33,1}, -{51,33,2}, -{51,33,3}, -{51,33,4}, -{51,33,5}, -{51,33,6}, -{51,33,7}, -{51,33,8}, -{51,33,9}, -{51,33,10}, -{51,33,11}, -{51,33,12}, -{51,33,13}, -{51,33,14}, -{51,33,15}, -{51,33,16}, -{51,33,17}, -{51,33,18}, -{51,33,19}, -{51,33,20}, -{51,33,21}, -{51,33,22}, -{51,33,23}, -{51,33,24}, -{51,33,25}, -{51,33,26}, -{51,33,27}, -{51,33,28}, -{51,33,29}, -{51,33,30}, -{51,33,31}, -{51,33,32}, -{51,33,33}, -{51,33,34}, -{51,33,35}, -{51,33,36}, -{51,33,37}, -{51,33,38}, -{51,33,39}, -{51,33,40}, -{51,33,41}, -{51,33,42}, -{51,33,43}, -{51,33,44}, -{51,33,45}, -{51,33,46}, -{51,33,47}, -{51,33,48}, -{51,33,49}, -{51,33,50}, -{51,33,51}, -{51,33,52}, -{51,33,53}, -{51,33,54}, -{51,33,55}, -{51,33,56}, -{51,33,57}, -{51,33,58}, -{51,33,59}, -{51,34,-77}, -{51,34,-76}, -{51,34,-75}, -{51,34,-74}, -{51,34,-73}, -{51,34,-72}, -{51,34,-71}, -{51,34,-70}, -{51,34,-69}, -{51,34,-68}, -{51,34,-67}, -{51,34,-66}, -{51,34,-65}, -{51,34,-64}, -{51,34,-63}, -{51,34,-62}, -{51,34,-61}, -{51,34,-60}, -{51,34,-59}, -{51,34,-58}, -{51,34,-57}, -{51,34,-56}, -{51,34,-55}, -{51,34,-54}, -{51,34,-53}, -{51,34,-52}, -{51,34,-51}, -{51,34,-50}, -{51,34,-49}, -{51,34,-48}, -{51,34,-47}, -{51,34,-46}, -{51,34,-45}, -{51,34,-44}, -{51,34,-43}, -{51,34,-42}, -{51,34,-41}, -{51,34,-40}, -{51,34,-39}, -{51,34,-38}, -{51,34,-37}, -{51,34,-36}, -{51,34,-35}, -{51,34,-34}, -{51,34,-33}, -{51,34,-32}, -{51,34,-31}, -{51,34,-30}, -{51,34,-29}, -{51,34,-28}, -{51,34,-27}, -{51,34,-26}, -{51,34,-25}, -{51,34,-24}, -{51,34,-23}, -{51,34,-22}, -{51,34,-21}, -{51,34,-20}, -{51,34,-19}, -{51,34,-18}, -{51,34,-17}, -{51,34,-16}, -{51,34,-15}, -{51,34,-14}, -{51,34,-13}, -{51,34,-12}, -{51,34,-11}, -{51,34,-10}, -{51,34,-9}, -{51,34,-8}, -{51,34,-7}, -{51,34,-6}, -{51,34,-5}, -{51,34,-4}, -{51,34,-3}, -{51,34,-2}, -{51,34,-1}, -{51,34,0}, -{51,34,1}, -{51,34,2}, -{51,34,3}, -{51,34,4}, -{51,34,5}, -{51,34,6}, -{51,34,7}, -{51,34,8}, -{51,34,9}, -{51,34,10}, -{51,34,11}, -{51,34,12}, -{51,34,13}, -{51,34,14}, -{51,34,15}, -{51,34,16}, -{51,34,17}, -{51,34,18}, -{51,34,19}, -{51,34,20}, -{51,34,21}, -{51,34,22}, -{51,34,23}, -{51,34,24}, -{51,34,25}, -{51,34,26}, -{51,34,27}, -{51,34,28}, -{51,34,29}, -{51,34,30}, -{51,34,31}, -{51,34,32}, -{51,34,33}, -{51,34,34}, -{51,34,35}, -{51,34,36}, -{51,34,37}, -{51,34,38}, -{51,34,39}, -{51,34,40}, -{51,34,41}, -{51,34,42}, -{51,34,43}, -{51,34,44}, -{51,34,45}, -{51,34,46}, -{51,34,47}, -{51,34,48}, -{51,34,49}, -{51,34,50}, -{51,34,51}, -{51,34,52}, -{51,34,53}, -{51,34,54}, -{51,34,55}, -{51,34,56}, -{51,34,57}, -{51,34,58}, -{51,34,59}, -{51,35,-77}, -{51,35,-76}, -{51,35,-75}, -{51,35,-74}, -{51,35,-73}, -{51,35,-72}, -{51,35,-71}, -{51,35,-70}, -{51,35,-69}, -{51,35,-68}, -{51,35,-67}, -{51,35,-66}, -{51,35,-65}, -{51,35,-64}, -{51,35,-63}, -{51,35,-62}, -{51,35,-61}, -{51,35,-60}, -{51,35,-59}, -{51,35,-58}, -{51,35,-57}, -{51,35,-56}, -{51,35,-55}, -{51,35,-54}, -{51,35,-53}, -{51,35,-52}, -{51,35,-51}, -{51,35,-50}, -{51,35,-49}, -{51,35,-48}, -{51,35,-47}, -{51,35,-46}, -{51,35,-45}, -{51,35,-44}, -{51,35,-43}, -{51,35,-42}, -{51,35,-41}, -{51,35,-40}, -{51,35,-39}, -{51,35,-38}, -{51,35,-37}, -{51,35,-36}, -{51,35,-35}, -{51,35,-34}, -{51,35,-33}, -{51,35,-32}, -{51,35,-31}, -{51,35,-30}, -{51,35,-29}, -{51,35,-28}, -{51,35,-27}, -{51,35,-26}, -{51,35,-25}, -{51,35,-24}, -{51,35,-23}, -{51,35,-22}, -{51,35,-21}, -{51,35,-20}, -{51,35,-19}, -{51,35,-18}, -{51,35,-17}, -{51,35,-16}, -{51,35,-15}, -{51,35,-14}, -{51,35,-13}, -{51,35,-12}, -{51,35,-11}, -{51,35,-10}, -{51,35,-9}, -{51,35,-8}, -{51,35,-7}, -{51,35,-6}, -{51,35,-5}, -{51,35,-4}, -{51,35,-3}, -{51,35,-2}, -{51,35,-1}, -{51,35,0}, -{51,35,1}, -{51,35,2}, -{51,35,3}, -{51,35,4}, -{51,35,5}, -{51,35,6}, -{51,35,7}, -{51,35,8}, -{51,35,9}, -{51,35,10}, -{51,35,11}, -{51,35,12}, -{51,35,13}, -{51,35,14}, -{51,35,15}, -{51,35,16}, -{51,35,17}, -{51,35,18}, -{51,35,19}, -{51,35,20}, -{51,35,21}, -{51,35,22}, -{51,35,23}, -{51,35,24}, -{51,35,25}, -{51,35,26}, -{51,35,27}, -{51,35,28}, -{51,35,29}, -{51,35,30}, -{51,35,31}, -{51,35,32}, -{51,35,33}, -{51,35,34}, -{51,35,35}, -{51,35,36}, -{51,35,37}, -{51,35,38}, -{51,35,39}, -{51,35,40}, -{51,35,41}, -{51,35,42}, -{51,35,43}, -{51,35,44}, -{51,35,45}, -{51,35,46}, -{51,35,47}, -{51,35,48}, -{51,35,49}, -{51,35,50}, -{51,35,51}, -{51,35,52}, -{51,35,53}, -{51,35,54}, -{51,35,55}, -{51,35,56}, -{51,35,57}, -{51,35,58}, -{51,35,59}, -{51,36,-77}, -{51,36,-76}, -{51,36,-75}, -{51,36,-74}, -{51,36,-73}, -{51,36,-72}, -{51,36,-71}, -{51,36,-70}, -{51,36,-69}, -{51,36,-68}, -{51,36,-67}, -{51,36,-66}, -{51,36,-65}, -{51,36,-64}, -{51,36,-63}, -{51,36,-62}, -{51,36,-61}, -{51,36,-60}, -{51,36,-59}, -{51,36,-58}, -{51,36,-57}, -{51,36,-56}, -{51,36,-55}, -{51,36,-54}, -{51,36,-53}, -{51,36,-52}, -{51,36,-51}, -{51,36,-50}, -{51,36,-49}, -{51,36,-48}, -{51,36,-47}, -{51,36,-46}, -{51,36,-45}, -{51,36,-44}, -{51,36,-43}, -{51,36,-42}, -{51,36,-41}, -{51,36,-40}, -{51,36,-39}, -{51,36,-38}, -{51,36,-37}, -{51,36,-36}, -{51,36,-35}, -{51,36,-34}, -{51,36,-33}, -{51,36,-32}, -{51,36,-31}, -{51,36,-30}, -{51,36,-29}, -{51,36,-28}, -{51,36,-27}, -{51,36,-26}, -{51,36,-25}, -{51,36,-24}, -{51,36,-23}, -{51,36,-22}, -{51,36,-21}, -{51,36,-20}, -{51,36,-19}, -{51,36,-18}, -{51,36,-17}, -{51,36,-16}, -{51,36,-15}, -{51,36,-14}, -{51,36,-13}, -{51,36,-12}, -{51,36,-11}, -{51,36,-10}, -{51,36,-9}, -{51,36,-8}, -{51,36,-7}, -{51,36,-6}, -{51,36,-5}, -{51,36,-4}, -{51,36,-3}, -{51,36,-2}, -{51,36,-1}, -{51,36,0}, -{51,36,1}, -{51,36,2}, -{51,36,3}, -{51,36,4}, -{51,36,5}, -{51,36,6}, -{51,36,7}, -{51,36,8}, -{51,36,9}, -{51,36,10}, -{51,36,11}, -{51,36,12}, -{51,36,13}, -{51,36,14}, -{51,36,15}, -{51,36,16}, -{51,36,17}, -{51,36,18}, -{51,36,19}, -{51,36,20}, -{51,36,21}, -{51,36,22}, -{51,36,23}, -{51,36,24}, -{51,36,25}, -{51,36,26}, -{51,36,27}, -{51,36,28}, -{51,36,29}, -{51,36,30}, -{51,36,31}, -{51,36,32}, -{51,36,33}, -{51,36,34}, -{51,36,35}, -{51,36,36}, -{51,36,37}, -{51,36,38}, -{51,36,39}, -{51,36,40}, -{51,36,41}, -{51,36,42}, -{51,36,43}, -{51,36,44}, -{51,36,45}, -{51,36,46}, -{51,36,47}, -{51,36,48}, -{51,36,49}, -{51,36,50}, -{51,36,51}, -{51,36,52}, -{51,36,53}, -{51,36,54}, -{51,36,55}, -{51,36,56}, -{51,36,57}, -{51,36,58}, -{51,36,59}, -{51,36,60}, -{51,37,-77}, -{51,37,-76}, -{51,37,-75}, -{51,37,-74}, -{51,37,-73}, -{51,37,-72}, -{51,37,-71}, -{51,37,-70}, -{51,37,-69}, -{51,37,-68}, -{51,37,-67}, -{51,37,-66}, -{51,37,-65}, -{51,37,-64}, -{51,37,-63}, -{51,37,-62}, -{51,37,-61}, -{51,37,-60}, -{51,37,-59}, -{51,37,-58}, -{51,37,-57}, -{51,37,-56}, -{51,37,-55}, -{51,37,-54}, -{51,37,-53}, -{51,37,-52}, -{51,37,-51}, -{51,37,-50}, -{51,37,-49}, -{51,37,-48}, -{51,37,-47}, -{51,37,-46}, -{51,37,-45}, -{51,37,-44}, -{51,37,-43}, -{51,37,-42}, -{51,37,-41}, -{51,37,-40}, -{51,37,-39}, -{51,37,-38}, -{51,37,-37}, -{51,37,-36}, -{51,37,-35}, -{51,37,-34}, -{51,37,-33}, -{51,37,-32}, -{51,37,-31}, -{51,37,-30}, -{51,37,-29}, -{51,37,-28}, -{51,37,-27}, -{51,37,-26}, -{51,37,-25}, -{51,37,-24}, -{51,37,-23}, -{51,37,-22}, -{51,37,-21}, -{51,37,-20}, -{51,37,-19}, -{51,37,-18}, -{51,37,-17}, -{51,37,-16}, -{51,37,-15}, -{51,37,-14}, -{51,37,-13}, -{51,37,-12}, -{51,37,-11}, -{51,37,-10}, -{51,37,-9}, -{51,37,-8}, -{51,37,-7}, -{51,37,-6}, -{51,37,-5}, -{51,37,-4}, -{51,37,-3}, -{51,37,-2}, -{51,37,-1}, -{51,37,0}, -{51,37,1}, -{51,37,2}, -{51,37,3}, -{51,37,4}, -{51,37,5}, -{51,37,6}, -{51,37,7}, -{51,37,8}, -{51,37,9}, -{51,37,10}, -{51,37,11}, -{51,37,12}, -{51,37,13}, -{51,37,14}, -{51,37,15}, -{51,37,16}, -{51,37,17}, -{51,37,18}, -{51,37,19}, -{51,37,20}, -{51,37,21}, -{51,37,22}, -{51,37,23}, -{51,37,24}, -{51,37,25}, -{51,37,26}, -{51,37,27}, -{51,37,28}, -{51,37,29}, -{51,37,30}, -{51,37,31}, -{51,37,32}, -{51,37,33}, -{51,37,34}, -{51,37,35}, -{51,37,36}, -{51,37,37}, -{51,37,38}, -{51,37,39}, -{51,37,40}, -{51,37,41}, -{51,37,42}, -{51,37,43}, -{51,37,44}, -{51,37,45}, -{51,37,46}, -{51,37,47}, -{51,37,48}, -{51,37,49}, -{51,37,50}, -{51,37,51}, -{51,37,52}, -{51,37,53}, -{51,37,54}, -{51,37,55}, -{51,37,56}, -{51,37,57}, -{51,37,58}, -{51,37,59}, -{51,37,60}, -{51,38,-77}, -{51,38,-76}, -{51,38,-75}, -{51,38,-74}, -{51,38,-73}, -{51,38,-72}, -{51,38,-71}, -{51,38,-70}, -{51,38,-69}, -{51,38,-68}, -{51,38,-67}, -{51,38,-66}, -{51,38,-65}, -{51,38,-64}, -{51,38,-63}, -{51,38,-62}, -{51,38,-61}, -{51,38,-60}, -{51,38,-59}, -{51,38,-58}, -{51,38,-57}, -{51,38,-56}, -{51,38,-55}, -{51,38,-54}, -{51,38,-53}, -{51,38,-52}, -{51,38,-51}, -{51,38,-50}, -{51,38,-49}, -{51,38,-48}, -{51,38,-47}, -{51,38,-46}, -{51,38,-45}, -{51,38,-44}, -{51,38,-43}, -{51,38,-42}, -{51,38,-41}, -{51,38,-40}, -{51,38,-39}, -{51,38,-38}, -{51,38,-37}, -{51,38,-36}, -{51,38,-35}, -{51,38,-34}, -{51,38,-33}, -{51,38,-32}, -{51,38,-31}, -{51,38,-30}, -{51,38,-29}, -{51,38,-28}, -{51,38,-27}, -{51,38,-26}, -{51,38,-25}, -{51,38,-24}, -{51,38,-23}, -{51,38,-22}, -{51,38,-21}, -{51,38,-20}, -{51,38,-19}, -{51,38,-18}, -{51,38,-17}, -{51,38,-16}, -{51,38,-15}, -{51,38,-14}, -{51,38,-13}, -{51,38,-12}, -{51,38,-11}, -{51,38,-10}, -{51,38,-9}, -{51,38,-8}, -{51,38,-7}, -{51,38,-6}, -{51,38,-5}, -{51,38,-4}, -{51,38,-3}, -{51,38,-2}, -{51,38,-1}, -{51,38,0}, -{51,38,1}, -{51,38,2}, -{51,38,3}, -{51,38,4}, -{51,38,5}, -{51,38,6}, -{51,38,7}, -{51,38,8}, -{51,38,9}, -{51,38,10}, -{51,38,11}, -{51,38,12}, -{51,38,13}, -{51,38,14}, -{51,38,15}, -{51,38,16}, -{51,38,17}, -{51,38,18}, -{51,38,19}, -{51,38,20}, -{51,38,21}, -{51,38,22}, -{51,38,23}, -{51,38,24}, -{51,38,25}, -{51,38,26}, -{51,38,27}, -{51,38,28}, -{51,38,29}, -{51,38,30}, -{51,38,31}, -{51,38,32}, -{51,38,33}, -{51,38,34}, -{51,38,35}, -{51,38,36}, -{51,38,37}, -{51,38,38}, -{51,38,39}, -{51,38,40}, -{51,38,41}, -{51,38,42}, -{51,38,43}, -{51,38,44}, -{51,38,45}, -{51,38,46}, -{51,38,47}, -{51,38,48}, -{51,38,49}, -{51,38,50}, -{51,38,51}, -{51,38,52}, -{51,38,53}, -{51,38,54}, -{51,38,55}, -{51,38,56}, -{51,38,57}, -{51,38,58}, -{51,38,59}, -{51,38,60}, -{51,39,-77}, -{51,39,-76}, -{51,39,-75}, -{51,39,-74}, -{51,39,-73}, -{51,39,-72}, -{51,39,-71}, -{51,39,-70}, -{51,39,-69}, -{51,39,-68}, -{51,39,-67}, -{51,39,-66}, -{51,39,-65}, -{51,39,-64}, -{51,39,-63}, -{51,39,-62}, -{51,39,-61}, -{51,39,-60}, -{51,39,-59}, -{51,39,-58}, -{51,39,-57}, -{51,39,-56}, -{51,39,-55}, -{51,39,-54}, -{51,39,-53}, -{51,39,-52}, -{51,39,-51}, -{51,39,-50}, -{51,39,-49}, -{51,39,-48}, -{51,39,-47}, -{51,39,-46}, -{51,39,-45}, -{51,39,-44}, -{51,39,-43}, -{51,39,-42}, -{51,39,-41}, -{51,39,-40}, -{51,39,-39}, -{51,39,-38}, -{51,39,-37}, -{51,39,-36}, -{51,39,-35}, -{51,39,-34}, -{51,39,-33}, -{51,39,-32}, -{51,39,-31}, -{51,39,-30}, -{51,39,-29}, -{51,39,-28}, -{51,39,-27}, -{51,39,-26}, -{51,39,-25}, -{51,39,-24}, -{51,39,-23}, -{51,39,-22}, -{51,39,-21}, -{51,39,-20}, -{51,39,-19}, -{51,39,-18}, -{51,39,-17}, -{51,39,-16}, -{51,39,-15}, -{51,39,-14}, -{51,39,-13}, -{51,39,-12}, -{51,39,-11}, -{51,39,-10}, -{51,39,-9}, -{51,39,-8}, -{51,39,-7}, -{51,39,-6}, -{51,39,-5}, -{51,39,-4}, -{51,39,-3}, -{51,39,-2}, -{51,39,-1}, -{51,39,0}, -{51,39,1}, -{51,39,2}, -{51,39,3}, -{51,39,4}, -{51,39,5}, -{51,39,6}, -{51,39,7}, -{51,39,8}, -{51,39,9}, -{51,39,10}, -{51,39,11}, -{51,39,12}, -{51,39,13}, -{51,39,14}, -{51,39,15}, -{51,39,16}, -{51,39,17}, -{51,39,18}, -{51,39,19}, -{51,39,20}, -{51,39,21}, -{51,39,22}, -{51,39,23}, -{51,39,24}, -{51,39,25}, -{51,39,26}, -{51,39,27}, -{51,39,28}, -{51,39,29}, -{51,39,30}, -{51,39,31}, -{51,39,32}, -{51,39,33}, -{51,39,34}, -{51,39,35}, -{51,39,36}, -{51,39,37}, -{51,39,38}, -{51,39,39}, -{51,39,40}, -{51,39,41}, -{51,39,42}, -{51,39,43}, -{51,39,44}, -{51,39,45}, -{51,39,46}, -{51,39,47}, -{51,39,48}, -{51,39,49}, -{51,39,50}, -{51,39,51}, -{51,39,52}, -{51,39,53}, -{51,39,54}, -{51,39,55}, -{51,39,56}, -{51,39,57}, -{51,39,58}, -{51,39,59}, -{51,39,60}, -{51,40,-76}, -{51,40,-75}, -{51,40,-74}, -{51,40,-73}, -{51,40,-72}, -{51,40,-71}, -{51,40,-70}, -{51,40,-69}, -{51,40,-68}, -{51,40,-67}, -{51,40,-66}, -{51,40,-65}, -{51,40,-64}, -{51,40,-63}, -{51,40,-62}, -{51,40,-61}, -{51,40,-60}, -{51,40,-59}, -{51,40,-58}, -{51,40,-57}, -{51,40,-56}, -{51,40,-55}, -{51,40,-54}, -{51,40,-53}, -{51,40,-52}, -{51,40,-51}, -{51,40,-50}, -{51,40,-49}, -{51,40,-48}, -{51,40,-47}, -{51,40,-46}, -{51,40,-45}, -{51,40,-44}, -{51,40,-43}, -{51,40,-42}, -{51,40,-41}, -{51,40,-40}, -{51,40,-39}, -{51,40,-38}, -{51,40,-37}, -{51,40,-36}, -{51,40,-35}, -{51,40,-34}, -{51,40,-33}, -{51,40,-32}, -{51,40,-31}, -{51,40,-30}, -{51,40,-29}, -{51,40,-28}, -{51,40,-27}, -{51,40,-26}, -{51,40,-25}, -{51,40,-24}, -{51,40,-23}, -{51,40,-22}, -{51,40,-21}, -{51,40,-20}, -{51,40,-19}, -{51,40,-18}, -{51,40,-17}, -{51,40,-16}, -{51,40,-15}, -{51,40,-14}, -{51,40,-13}, -{51,40,-12}, -{51,40,-11}, -{51,40,-10}, -{51,40,-9}, -{51,40,-8}, -{51,40,-7}, -{51,40,-6}, -{51,40,-5}, -{51,40,-4}, -{51,40,-3}, -{51,40,-2}, -{51,40,-1}, -{51,40,0}, -{51,40,1}, -{51,40,2}, -{51,40,3}, -{51,40,4}, -{51,40,5}, -{51,40,6}, -{51,40,7}, -{51,40,8}, -{51,40,9}, -{51,40,10}, -{51,40,11}, -{51,40,12}, -{51,40,13}, -{51,40,14}, -{51,40,15}, -{51,40,16}, -{51,40,17}, -{51,40,18}, -{51,40,19}, -{51,40,20}, -{51,40,21}, -{51,40,22}, -{51,40,23}, -{51,40,24}, -{51,40,25}, -{51,40,26}, -{51,40,27}, -{51,40,28}, -{51,40,29}, -{51,40,30}, -{51,40,31}, -{51,40,32}, -{51,40,33}, -{51,40,34}, -{51,40,35}, -{51,40,36}, -{51,40,37}, -{51,40,38}, -{51,40,39}, -{51,40,40}, -{51,40,41}, -{51,40,42}, -{51,40,43}, -{51,40,44}, -{51,40,45}, -{51,40,46}, -{51,40,47}, -{51,40,48}, -{51,40,49}, -{51,40,50}, -{51,40,51}, -{51,40,52}, -{51,40,53}, -{51,40,54}, -{51,40,55}, -{51,40,56}, -{51,40,57}, -{51,40,58}, -{51,40,59}, -{51,40,60}, -{51,41,-76}, -{51,41,-75}, -{51,41,-74}, -{51,41,-73}, -{51,41,-72}, -{51,41,-71}, -{51,41,-70}, -{51,41,-69}, -{51,41,-68}, -{51,41,-67}, -{51,41,-66}, -{51,41,-65}, -{51,41,-64}, -{51,41,-63}, -{51,41,-62}, -{51,41,-61}, -{51,41,-60}, -{51,41,-59}, -{51,41,-58}, -{51,41,-57}, -{51,41,-56}, -{51,41,-55}, -{51,41,-54}, -{51,41,-53}, -{51,41,-52}, -{51,41,-51}, -{51,41,-50}, -{51,41,-49}, -{51,41,-48}, -{51,41,-47}, -{51,41,-46}, -{51,41,-45}, -{51,41,-44}, -{51,41,-43}, -{51,41,-42}, -{51,41,-41}, -{51,41,-40}, -{51,41,-39}, -{51,41,-38}, -{51,41,-37}, -{51,41,-36}, -{51,41,-35}, -{51,41,-34}, -{51,41,-33}, -{51,41,-32}, -{51,41,-31}, -{51,41,-30}, -{51,41,-29}, -{51,41,-28}, -{51,41,-27}, -{51,41,-26}, -{51,41,-25}, -{51,41,-24}, -{51,41,-23}, -{51,41,-22}, -{51,41,-21}, -{51,41,-20}, -{51,41,-19}, -{51,41,-18}, -{51,41,-17}, -{51,41,-16}, -{51,41,-15}, -{51,41,-14}, -{51,41,-13}, -{51,41,-12}, -{51,41,-11}, -{51,41,-10}, -{51,41,-9}, -{51,41,-8}, -{51,41,-7}, -{51,41,-6}, -{51,41,-5}, -{51,41,-4}, -{51,41,-3}, -{51,41,-2}, -{51,41,-1}, -{51,41,0}, -{51,41,1}, -{51,41,2}, -{51,41,3}, -{51,41,4}, -{51,41,5}, -{51,41,6}, -{51,41,7}, -{51,41,8}, -{51,41,9}, -{51,41,10}, -{51,41,11}, -{51,41,12}, -{51,41,13}, -{51,41,14}, -{51,41,15}, -{51,41,16}, -{51,41,17}, -{51,41,18}, -{51,41,19}, -{51,41,20}, -{51,41,21}, -{51,41,22}, -{51,41,23}, -{51,41,24}, -{51,41,25}, -{51,41,26}, -{51,41,27}, -{51,41,28}, -{51,41,29}, -{51,41,30}, -{51,41,31}, -{51,41,32}, -{51,41,33}, -{51,41,34}, -{51,41,35}, -{51,41,36}, -{51,41,37}, -{51,41,38}, -{51,41,39}, -{51,41,40}, -{51,41,41}, -{51,41,42}, -{51,41,43}, -{51,41,44}, -{51,41,45}, -{51,41,46}, -{51,41,47}, -{51,41,48}, -{51,41,49}, -{51,41,50}, -{51,41,51}, -{51,41,52}, -{51,41,53}, -{51,41,54}, -{51,41,55}, -{51,41,56}, -{51,41,57}, -{51,41,58}, -{51,41,59}, -{51,41,60}, -{51,42,-76}, -{51,42,-75}, -{51,42,-74}, -{51,42,-73}, -{51,42,-72}, -{51,42,-71}, -{51,42,-70}, -{51,42,-69}, -{51,42,-68}, -{51,42,-67}, -{51,42,-66}, -{51,42,-65}, -{51,42,-64}, -{51,42,-63}, -{51,42,-62}, -{51,42,-61}, -{51,42,-60}, -{51,42,-59}, -{51,42,-58}, -{51,42,-57}, -{51,42,-56}, -{51,42,-55}, -{51,42,-54}, -{51,42,-53}, -{51,42,-52}, -{51,42,-51}, -{51,42,-50}, -{51,42,-49}, -{51,42,-48}, -{51,42,-47}, -{51,42,-46}, -{51,42,-45}, -{51,42,-44}, -{51,42,-43}, -{51,42,-42}, -{51,42,-41}, -{51,42,-40}, -{51,42,-39}, -{51,42,-38}, -{51,42,-37}, -{51,42,-36}, -{51,42,-35}, -{51,42,-34}, -{51,42,-33}, -{51,42,-32}, -{51,42,-31}, -{51,42,-30}, -{51,42,-29}, -{51,42,-28}, -{51,42,-27}, -{51,42,-26}, -{51,42,-25}, -{51,42,-24}, -{51,42,-23}, -{51,42,-22}, -{51,42,-21}, -{51,42,-20}, -{51,42,-19}, -{51,42,-18}, -{51,42,-17}, -{51,42,-16}, -{51,42,-15}, -{51,42,-14}, -{51,42,-13}, -{51,42,-12}, -{51,42,-11}, -{51,42,-10}, -{51,42,-9}, -{51,42,-8}, -{51,42,-7}, -{51,42,-6}, -{51,42,-5}, -{51,42,-4}, -{51,42,-3}, -{51,42,-2}, -{51,42,-1}, -{51,42,0}, -{51,42,1}, -{51,42,2}, -{51,42,3}, -{51,42,4}, -{51,42,5}, -{51,42,6}, -{51,42,7}, -{51,42,8}, -{51,42,9}, -{51,42,10}, -{51,42,11}, -{51,42,12}, -{51,42,13}, -{51,42,14}, -{51,42,15}, -{51,42,16}, -{51,42,17}, -{51,42,18}, -{51,42,19}, -{51,42,20}, -{51,42,21}, -{51,42,22}, -{51,42,23}, -{51,42,24}, -{51,42,25}, -{51,42,26}, -{51,42,27}, -{51,42,28}, -{51,42,29}, -{51,42,30}, -{51,42,31}, -{51,42,32}, -{51,42,33}, -{51,42,34}, -{51,42,35}, -{51,42,36}, -{51,42,37}, -{51,42,38}, -{51,42,39}, -{51,42,40}, -{51,42,41}, -{51,42,42}, -{51,42,43}, -{51,42,44}, -{51,42,45}, -{51,42,46}, -{51,42,47}, -{51,42,48}, -{51,42,49}, -{51,42,50}, -{51,42,51}, -{51,42,52}, -{51,42,53}, -{51,42,54}, -{51,42,55}, -{51,42,56}, -{51,42,57}, -{51,42,58}, -{51,42,59}, -{51,42,60}, -{51,43,-76}, -{51,43,-75}, -{51,43,-74}, -{51,43,-73}, -{51,43,-72}, -{51,43,-71}, -{51,43,-70}, -{51,43,-69}, -{51,43,-68}, -{51,43,-67}, -{51,43,-66}, -{51,43,-65}, -{51,43,-64}, -{51,43,-63}, -{51,43,-62}, -{51,43,-61}, -{51,43,-60}, -{51,43,-59}, -{51,43,-58}, -{51,43,-57}, -{51,43,-56}, -{51,43,-55}, -{51,43,-54}, -{51,43,-53}, -{51,43,-52}, -{51,43,-51}, -{51,43,-50}, -{51,43,-49}, -{51,43,-48}, -{51,43,-47}, -{51,43,-46}, -{51,43,-45}, -{51,43,-44}, -{51,43,-43}, -{51,43,-42}, -{51,43,-41}, -{51,43,-40}, -{51,43,-39}, -{51,43,-38}, -{51,43,-37}, -{51,43,-36}, -{51,43,-35}, -{51,43,-34}, -{51,43,-33}, -{51,43,-32}, -{51,43,-31}, -{51,43,-30}, -{51,43,-29}, -{51,43,-28}, -{51,43,-27}, -{51,43,-26}, -{51,43,-25}, -{51,43,-24}, -{51,43,-23}, -{51,43,-22}, -{51,43,-21}, -{51,43,-20}, -{51,43,-19}, -{51,43,-18}, -{51,43,-17}, -{51,43,-16}, -{51,43,-15}, -{51,43,-14}, -{51,43,-13}, -{51,43,-12}, -{51,43,-11}, -{51,43,-10}, -{51,43,-9}, -{51,43,-8}, -{51,43,-7}, -{51,43,-6}, -{51,43,-5}, -{51,43,-4}, -{51,43,-3}, -{51,43,-2}, -{51,43,-1}, -{51,43,0}, -{51,43,1}, -{51,43,2}, -{51,43,3}, -{51,43,4}, -{51,43,5}, -{51,43,6}, -{51,43,7}, -{51,43,8}, -{51,43,9}, -{51,43,10}, -{51,43,11}, -{51,43,12}, -{51,43,13}, -{51,43,14}, -{51,43,15}, -{51,43,16}, -{51,43,17}, -{51,43,18}, -{51,43,19}, -{51,43,20}, -{51,43,21}, -{51,43,22}, -{51,43,23}, -{51,43,24}, -{51,43,25}, -{51,43,26}, -{51,43,27}, -{51,43,28}, -{51,43,29}, -{51,43,30}, -{51,43,31}, -{51,43,32}, -{51,43,33}, -{51,43,34}, -{51,43,35}, -{51,43,36}, -{51,43,37}, -{51,43,38}, -{51,43,39}, -{51,43,40}, -{51,43,41}, -{51,43,42}, -{51,43,43}, -{51,43,44}, -{51,43,45}, -{51,43,46}, -{51,43,47}, -{51,43,48}, -{51,43,49}, -{51,43,50}, -{51,43,51}, -{51,43,52}, -{51,43,53}, -{51,43,54}, -{51,43,55}, -{51,43,56}, -{51,43,57}, -{51,43,58}, -{51,43,59}, -{51,43,60}, -{51,44,-76}, -{51,44,-75}, -{51,44,-74}, -{51,44,-73}, -{51,44,-72}, -{51,44,-71}, -{51,44,-70}, -{51,44,-69}, -{51,44,-68}, -{51,44,-67}, -{51,44,-66}, -{51,44,-65}, -{51,44,-64}, -{51,44,-63}, -{51,44,-62}, -{51,44,-61}, -{51,44,-60}, -{51,44,-59}, -{51,44,-58}, -{51,44,-57}, -{51,44,-56}, -{51,44,-55}, -{51,44,-54}, -{51,44,-53}, -{51,44,-52}, -{51,44,-51}, -{51,44,-50}, -{51,44,-49}, -{51,44,-48}, -{51,44,-47}, -{51,44,-46}, -{51,44,-45}, -{51,44,-44}, -{51,44,-43}, -{51,44,-42}, -{51,44,-41}, -{51,44,-40}, -{51,44,-39}, -{51,44,-38}, -{51,44,-37}, -{51,44,-36}, -{51,44,-35}, -{51,44,-34}, -{51,44,-33}, -{51,44,-32}, -{51,44,-31}, -{51,44,-30}, -{51,44,-29}, -{51,44,-28}, -{51,44,-27}, -{51,44,-26}, -{51,44,-25}, -{51,44,-24}, -{51,44,-23}, -{51,44,-22}, -{51,44,-21}, -{51,44,-20}, -{51,44,-19}, -{51,44,-18}, -{51,44,-17}, -{51,44,-16}, -{51,44,-15}, -{51,44,-14}, -{51,44,-13}, -{51,44,-12}, -{51,44,-11}, -{51,44,-10}, -{51,44,-9}, -{51,44,-8}, -{51,44,-7}, -{51,44,-6}, -{51,44,-5}, -{51,44,-4}, -{51,44,-3}, -{51,44,-2}, -{51,44,-1}, -{51,44,0}, -{51,44,1}, -{51,44,2}, -{51,44,3}, -{51,44,4}, -{51,44,5}, -{51,44,6}, -{51,44,7}, -{51,44,8}, -{51,44,9}, -{51,44,10}, -{51,44,11}, -{51,44,12}, -{51,44,13}, -{51,44,14}, -{51,44,15}, -{51,44,16}, -{51,44,17}, -{51,44,18}, -{51,44,19}, -{51,44,20}, -{51,44,21}, -{51,44,22}, -{51,44,23}, -{51,44,24}, -{51,44,25}, -{51,44,26}, -{51,44,27}, -{51,44,28}, -{51,44,29}, -{51,44,30}, -{51,44,31}, -{51,44,32}, -{51,44,33}, -{51,44,34}, -{51,44,35}, -{51,44,36}, -{51,44,37}, -{51,44,38}, -{51,44,39}, -{51,44,40}, -{51,44,41}, -{51,44,42}, -{51,44,43}, -{51,44,44}, -{51,44,45}, -{51,44,46}, -{51,44,47}, -{51,44,48}, -{51,44,49}, -{51,44,50}, -{51,44,51}, -{51,44,52}, -{51,44,53}, -{51,44,54}, -{51,44,55}, -{51,44,56}, -{51,44,57}, -{51,44,58}, -{51,44,59}, -{51,44,60}, -{51,45,-76}, -{51,45,-75}, -{51,45,-74}, -{51,45,-73}, -{51,45,-72}, -{51,45,-71}, -{51,45,-70}, -{51,45,-69}, -{51,45,-68}, -{51,45,-67}, -{51,45,-66}, -{51,45,-65}, -{51,45,-64}, -{51,45,-63}, -{51,45,-62}, -{51,45,-61}, -{51,45,-60}, -{51,45,-59}, -{51,45,-58}, -{51,45,-57}, -{51,45,-56}, -{51,45,-55}, -{51,45,-54}, -{51,45,-53}, -{51,45,-52}, -{51,45,-51}, -{51,45,-50}, -{51,45,-49}, -{51,45,-48}, -{51,45,-47}, -{51,45,-46}, -{51,45,-45}, -{51,45,-44}, -{51,45,-43}, -{51,45,-42}, -{51,45,-41}, -{51,45,-40}, -{51,45,-39}, -{51,45,-38}, -{51,45,-37}, -{51,45,-36}, -{51,45,-35}, -{51,45,-34}, -{51,45,-33}, -{51,45,-32}, -{51,45,-31}, -{51,45,-30}, -{51,45,-29}, -{51,45,-28}, -{51,45,-27}, -{51,45,-26}, -{51,45,-25}, -{51,45,-24}, -{51,45,-23}, -{51,45,-22}, -{51,45,-21}, -{51,45,-20}, -{51,45,-19}, -{51,45,-18}, -{51,45,-17}, -{51,45,-16}, -{51,45,-15}, -{51,45,-14}, -{51,45,-13}, -{51,45,-12}, -{51,45,-11}, -{51,45,-10}, -{51,45,-9}, -{51,45,-8}, -{51,45,-7}, -{51,45,-6}, -{51,45,-5}, -{51,45,-4}, -{51,45,-3}, -{51,45,-2}, -{51,45,-1}, -{51,45,0}, -{51,45,1}, -{51,45,2}, -{51,45,3}, -{51,45,4}, -{51,45,5}, -{51,45,6}, -{51,45,7}, -{51,45,8}, -{51,45,9}, -{51,45,10}, -{51,45,11}, -{51,45,12}, -{51,45,13}, -{51,45,14}, -{51,45,15}, -{51,45,16}, -{51,45,17}, -{51,45,18}, -{51,45,19}, -{51,45,20}, -{51,45,21}, -{51,45,22}, -{51,45,23}, -{51,45,24}, -{51,45,25}, -{51,45,26}, -{51,45,27}, -{51,45,28}, -{51,45,29}, -{51,45,30}, -{51,45,31}, -{51,45,32}, -{51,45,33}, -{51,45,34}, -{51,45,35}, -{51,45,36}, -{51,45,37}, -{51,45,38}, -{51,45,39}, -{51,45,40}, -{51,45,41}, -{51,45,42}, -{51,45,43}, -{51,45,44}, -{51,45,45}, -{51,45,46}, -{51,45,47}, -{51,45,48}, -{51,45,49}, -{51,45,50}, -{51,45,51}, -{51,45,52}, -{51,45,53}, -{51,45,54}, -{51,45,55}, -{51,45,56}, -{51,45,57}, -{51,45,58}, -{51,45,59}, -{51,45,60}, -{51,45,61}, -{51,46,-76}, -{51,46,-75}, -{51,46,-74}, -{51,46,-73}, -{51,46,-72}, -{51,46,-71}, -{51,46,-70}, -{51,46,-69}, -{51,46,-68}, -{51,46,-67}, -{51,46,-66}, -{51,46,-65}, -{51,46,-64}, -{51,46,-63}, -{51,46,-62}, -{51,46,-61}, -{51,46,-60}, -{51,46,-59}, -{51,46,-58}, -{51,46,-57}, -{51,46,-56}, -{51,46,-55}, -{51,46,-54}, -{51,46,-53}, -{51,46,-52}, -{51,46,-51}, -{51,46,-50}, -{51,46,-49}, -{51,46,-48}, -{51,46,-47}, -{51,46,-46}, -{51,46,-45}, -{51,46,-44}, -{51,46,-43}, -{51,46,-42}, -{51,46,-41}, -{51,46,-40}, -{51,46,-39}, -{51,46,-38}, -{51,46,-37}, -{51,46,-36}, -{51,46,-35}, -{51,46,-34}, -{51,46,-33}, -{51,46,-32}, -{51,46,-31}, -{51,46,-30}, -{51,46,-29}, -{51,46,-28}, -{51,46,-27}, -{51,46,-26}, -{51,46,-25}, -{51,46,-24}, -{51,46,-23}, -{51,46,-22}, -{51,46,-21}, -{51,46,-20}, -{51,46,-19}, -{51,46,-18}, -{51,46,-17}, -{51,46,-16}, -{51,46,-15}, -{51,46,-14}, -{51,46,-13}, -{51,46,-12}, -{51,46,-11}, -{51,46,-10}, -{51,46,-9}, -{51,46,-8}, -{51,46,-7}, -{51,46,-6}, -{51,46,-5}, -{51,46,-4}, -{51,46,-3}, -{51,46,-2}, -{51,46,-1}, -{51,46,0}, -{51,46,1}, -{51,46,2}, -{51,46,3}, -{51,46,4}, -{51,46,5}, -{51,46,6}, -{51,46,7}, -{51,46,8}, -{51,46,9}, -{51,46,10}, -{51,46,11}, -{51,46,12}, -{51,46,13}, -{51,46,14}, -{51,46,15}, -{51,46,16}, -{51,46,17}, -{51,46,18}, -{51,46,19}, -{51,46,20}, -{51,46,21}, -{51,46,22}, -{51,46,23}, -{51,46,24}, -{51,46,25}, -{51,46,26}, -{51,46,27}, -{51,46,28}, -{51,46,29}, -{51,46,30}, -{51,46,31}, -{51,46,32}, -{51,46,33}, -{51,46,34}, -{51,46,35}, -{51,46,36}, -{51,46,37}, -{51,46,38}, -{51,46,39}, -{51,46,40}, -{51,46,41}, -{51,46,42}, -{51,46,43}, -{51,46,44}, -{51,46,45}, -{51,46,46}, -{51,46,47}, -{51,46,48}, -{51,46,49}, -{51,46,50}, -{51,46,51}, -{51,46,52}, -{51,46,53}, -{51,46,54}, -{51,46,55}, -{51,46,56}, -{51,46,57}, -{51,46,58}, -{51,46,59}, -{51,46,60}, -{51,46,61}, -{51,47,-76}, -{51,47,-75}, -{51,47,-74}, -{51,47,-73}, -{51,47,-72}, -{51,47,-71}, -{51,47,-70}, -{51,47,-69}, -{51,47,-68}, -{51,47,-67}, -{51,47,-66}, -{51,47,-65}, -{51,47,-64}, -{51,47,-63}, -{51,47,-62}, -{51,47,-61}, -{51,47,-60}, -{51,47,-59}, -{51,47,-58}, -{51,47,-57}, -{51,47,-56}, -{51,47,-55}, -{51,47,-54}, -{51,47,-53}, -{51,47,-52}, -{51,47,-51}, -{51,47,-50}, -{51,47,-49}, -{51,47,-48}, -{51,47,-47}, -{51,47,-46}, -{51,47,-45}, -{51,47,-44}, -{51,47,-43}, -{51,47,-42}, -{51,47,-41}, -{51,47,-40}, -{51,47,-39}, -{51,47,-38}, -{51,47,-37}, -{51,47,-36}, -{51,47,-35}, -{51,47,-34}, -{51,47,-33}, -{51,47,-32}, -{51,47,-31}, -{51,47,-30}, -{51,47,-29}, -{51,47,-28}, -{51,47,-27}, -{51,47,-26}, -{51,47,-25}, -{51,47,-24}, -{51,47,-23}, -{51,47,-22}, -{51,47,-21}, -{51,47,-20}, -{51,47,-19}, -{51,47,-18}, -{51,47,-17}, -{51,47,-16}, -{51,47,-15}, -{51,47,-14}, -{51,47,-13}, -{51,47,-12}, -{51,47,-11}, -{51,47,-10}, -{51,47,-9}, -{51,47,-8}, -{51,47,-7}, -{51,47,-6}, -{51,47,-5}, -{51,47,-4}, -{51,47,-3}, -{51,47,-2}, -{51,47,-1}, -{51,47,0}, -{51,47,1}, -{51,47,2}, -{51,47,3}, -{51,47,4}, -{51,47,5}, -{51,47,6}, -{51,47,7}, -{51,47,8}, -{51,47,9}, -{51,47,10}, -{51,47,11}, -{51,47,12}, -{51,47,13}, -{51,47,14}, -{51,47,15}, -{51,47,16}, -{51,47,17}, -{51,47,18}, -{51,47,19}, -{51,47,20}, -{51,47,21}, -{51,47,22}, -{51,47,23}, -{51,47,24}, -{51,47,25}, -{51,47,26}, -{51,47,27}, -{51,47,28}, -{51,47,29}, -{51,47,30}, -{51,47,31}, -{51,47,32}, -{51,47,33}, -{51,47,34}, -{51,47,35}, -{51,47,36}, -{51,47,37}, -{51,47,38}, -{51,47,39}, -{51,47,40}, -{51,47,41}, -{51,47,42}, -{51,47,43}, -{51,47,44}, -{51,47,45}, -{51,47,46}, -{51,47,47}, -{51,47,48}, -{51,47,49}, -{51,47,50}, -{51,47,51}, -{51,47,52}, -{51,47,53}, -{51,47,54}, -{51,47,55}, -{51,47,56}, -{51,47,57}, -{51,47,58}, -{51,47,59}, -{51,47,60}, -{51,47,61}, -{51,48,-76}, -{51,48,-75}, -{51,48,-74}, -{51,48,-73}, -{51,48,-72}, -{51,48,-71}, -{51,48,-70}, -{51,48,-69}, -{51,48,-68}, -{51,48,-67}, -{51,48,-66}, -{51,48,-65}, -{51,48,-64}, -{51,48,-63}, -{51,48,-62}, -{51,48,-61}, -{51,48,-60}, -{51,48,-59}, -{51,48,-58}, -{51,48,-57}, -{51,48,-56}, -{51,48,-55}, -{51,48,-54}, -{51,48,-53}, -{51,48,-52}, -{51,48,-51}, -{51,48,-50}, -{51,48,-49}, -{51,48,-48}, -{51,48,-47}, -{51,48,-46}, -{51,48,-45}, -{51,48,-44}, -{51,48,-43}, -{51,48,-42}, -{51,48,-41}, -{51,48,-40}, -{51,48,-39}, -{51,48,-38}, -{51,48,-37}, -{51,48,-36}, -{51,48,-35}, -{51,48,-34}, -{51,48,-33}, -{51,48,-32}, -{51,48,-31}, -{51,48,-30}, -{51,48,-29}, -{51,48,-28}, -{51,48,-27}, -{51,48,-26}, -{51,48,-25}, -{51,48,-24}, -{51,48,-23}, -{51,48,-22}, -{51,48,-21}, -{51,48,-20}, -{51,48,-19}, -{51,48,-18}, -{51,48,-17}, -{51,48,-16}, -{51,48,-15}, -{51,48,-14}, -{51,48,-13}, -{51,48,-12}, -{51,48,-11}, -{51,48,-10}, -{51,48,-9}, -{51,48,-8}, -{51,48,-7}, -{51,48,-6}, -{51,48,-5}, -{51,48,-4}, -{51,48,-3}, -{51,48,-2}, -{51,48,-1}, -{51,48,0}, -{51,48,1}, -{51,48,2}, -{51,48,3}, -{51,48,4}, -{51,48,5}, -{51,48,6}, -{51,48,7}, -{51,48,8}, -{51,48,9}, -{51,48,10}, -{51,48,11}, -{51,48,12}, -{51,48,13}, -{51,48,14}, -{51,48,15}, -{51,48,16}, -{51,48,17}, -{51,48,18}, -{51,48,19}, -{51,48,20}, -{51,48,21}, -{51,48,22}, -{51,48,23}, -{51,48,24}, -{51,48,25}, -{51,48,26}, -{51,48,27}, -{51,48,28}, -{51,48,29}, -{51,48,30}, -{51,48,31}, -{51,48,32}, -{51,48,33}, -{51,48,34}, -{51,48,35}, -{51,48,36}, -{51,48,37}, -{51,48,38}, -{51,48,39}, -{51,48,40}, -{51,48,41}, -{51,48,42}, -{51,48,43}, -{51,48,44}, -{51,48,45}, -{51,48,46}, -{51,48,47}, -{51,48,48}, -{51,48,49}, -{51,48,50}, -{51,48,51}, -{51,48,52}, -{51,48,53}, -{51,48,54}, -{51,48,55}, -{51,48,56}, -{51,48,57}, -{51,48,58}, -{51,48,59}, -{51,48,60}, -{51,48,61}, -{51,49,-76}, -{51,49,-75}, -{51,49,-74}, -{51,49,-73}, -{51,49,-72}, -{51,49,-71}, -{51,49,-70}, -{51,49,-69}, -{51,49,-68}, -{51,49,-67}, -{51,49,-66}, -{51,49,-65}, -{51,49,-64}, -{51,49,-63}, -{51,49,-62}, -{51,49,-61}, -{51,49,-60}, -{51,49,-59}, -{51,49,-58}, -{51,49,-57}, -{51,49,-56}, -{51,49,-55}, -{51,49,-54}, -{51,49,-53}, -{51,49,-52}, -{51,49,-51}, -{51,49,-50}, -{51,49,-49}, -{51,49,-48}, -{51,49,-47}, -{51,49,-46}, -{51,49,-45}, -{51,49,-44}, -{51,49,-43}, -{51,49,-42}, -{51,49,-41}, -{51,49,-40}, -{51,49,-39}, -{51,49,-38}, -{51,49,-37}, -{51,49,-36}, -{51,49,-35}, -{51,49,-34}, -{51,49,-33}, -{51,49,-32}, -{51,49,-31}, -{51,49,-30}, -{51,49,-29}, -{51,49,-28}, -{51,49,-27}, -{51,49,-26}, -{51,49,-25}, -{51,49,-24}, -{51,49,-23}, -{51,49,-22}, -{51,49,-21}, -{51,49,-20}, -{51,49,-19}, -{51,49,-18}, -{51,49,-17}, -{51,49,-16}, -{51,49,-15}, -{51,49,-14}, -{51,49,-13}, -{51,49,-12}, -{51,49,-11}, -{51,49,-10}, -{51,49,-9}, -{51,49,-8}, -{51,49,-7}, -{51,49,-6}, -{51,49,-5}, -{51,49,-4}, -{51,49,-3}, -{51,49,-2}, -{51,49,-1}, -{51,49,0}, -{51,49,1}, -{51,49,2}, -{51,49,3}, -{51,49,4}, -{51,49,5}, -{51,49,6}, -{51,49,7}, -{51,49,8}, -{51,49,9}, -{51,49,10}, -{51,49,11}, -{51,49,12}, -{51,49,13}, -{51,49,14}, -{51,49,15}, -{51,49,16}, -{51,49,17}, -{51,49,18}, -{51,49,19}, -{51,49,20}, -{51,49,21}, -{51,49,22}, -{51,49,23}, -{51,49,24}, -{51,49,25}, -{51,49,26}, -{51,49,27}, -{51,49,28}, -{51,49,29}, -{51,49,30}, -{51,49,31}, -{51,49,32}, -{51,49,33}, -{51,49,34}, -{51,49,35}, -{51,49,36}, -{51,49,37}, -{51,49,38}, -{51,49,39}, -{51,49,40}, -{51,49,41}, -{51,49,42}, -{51,49,43}, -{51,49,44}, -{51,49,45}, -{51,49,46}, -{51,49,47}, -{51,49,48}, -{51,49,49}, -{51,49,50}, -{51,49,51}, -{51,49,52}, -{51,49,53}, -{51,49,54}, -{51,49,55}, -{51,49,56}, -{51,49,57}, -{51,49,58}, -{51,49,59}, -{51,49,60}, -{51,49,61}, -{51,50,-76}, -{51,50,-75}, -{51,50,-74}, -{51,50,-73}, -{51,50,-72}, -{51,50,-71}, -{51,50,-70}, -{51,50,-69}, -{51,50,-68}, -{51,50,-67}, -{51,50,-66}, -{51,50,-65}, -{51,50,-64}, -{51,50,-63}, -{51,50,-62}, -{51,50,-61}, -{51,50,-60}, -{51,50,-59}, -{51,50,-58}, -{51,50,-57}, -{51,50,-56}, -{51,50,-55}, -{51,50,-54}, -{51,50,-53}, -{51,50,-52}, -{51,50,-51}, -{51,50,-50}, -{51,50,-49}, -{51,50,-48}, -{51,50,-47}, -{51,50,-46}, -{51,50,-45}, -{51,50,-44}, -{51,50,-43}, -{51,50,-42}, -{51,50,-41}, -{51,50,-40}, -{51,50,-39}, -{51,50,-38}, -{51,50,-37}, -{51,50,-36}, -{51,50,-35}, -{51,50,-34}, -{51,50,-33}, -{51,50,-32}, -{51,50,-31}, -{51,50,-30}, -{51,50,-29}, -{51,50,-28}, -{51,50,-27}, -{51,50,-26}, -{51,50,-25}, -{51,50,-24}, -{51,50,-23}, -{51,50,-22}, -{51,50,-21}, -{51,50,-20}, -{51,50,-19}, -{51,50,-18}, -{51,50,-17}, -{51,50,-16}, -{51,50,-15}, -{51,50,-14}, -{51,50,-13}, -{51,50,-12}, -{51,50,-11}, -{51,50,-10}, -{51,50,-9}, -{51,50,-8}, -{51,50,-7}, -{51,50,-6}, -{51,50,-5}, -{51,50,-4}, -{51,50,-3}, -{51,50,-2}, -{51,50,-1}, -{51,50,0}, -{51,50,1}, -{51,50,2}, -{51,50,3}, -{51,50,4}, -{51,50,5}, -{51,50,6}, -{51,50,7}, -{51,50,8}, -{51,50,9}, -{51,50,10}, -{51,50,11}, -{51,50,12}, -{51,50,13}, -{51,50,14}, -{51,50,15}, -{51,50,16}, -{51,50,17}, -{51,50,18}, -{51,50,19}, -{51,50,20}, -{51,50,21}, -{51,50,22}, -{51,50,23}, -{51,50,24}, -{51,50,25}, -{51,50,26}, -{51,50,27}, -{51,50,28}, -{51,50,29}, -{51,50,30}, -{51,50,31}, -{51,50,32}, -{51,50,33}, -{51,50,34}, -{51,50,35}, -{51,50,36}, -{51,50,37}, -{51,50,38}, -{51,50,39}, -{51,50,40}, -{51,50,41}, -{51,50,42}, -{51,50,43}, -{51,50,44}, -{51,50,45}, -{51,50,46}, -{51,50,47}, -{51,50,48}, -{51,50,49}, -{51,50,50}, -{51,50,51}, -{51,50,52}, -{51,50,53}, -{51,50,54}, -{51,50,55}, -{51,50,56}, -{51,50,57}, -{51,50,58}, -{51,50,59}, -{51,50,60}, -{51,50,61}, -{51,51,-76}, -{51,51,-75}, -{51,51,-74}, -{51,51,-73}, -{51,51,-72}, -{51,51,-71}, -{51,51,-70}, -{51,51,-69}, -{51,51,-68}, -{51,51,-67}, -{51,51,-66}, -{51,51,-65}, -{51,51,-64}, -{51,51,-63}, -{51,51,-62}, -{51,51,-61}, -{51,51,-60}, -{51,51,-59}, -{51,51,-58}, -{51,51,-57}, -{51,51,-56}, -{51,51,-55}, -{51,51,-54}, -{51,51,-53}, -{51,51,-52}, -{51,51,-51}, -{51,51,-50}, -{51,51,-49}, -{51,51,-48}, -{51,51,-47}, -{51,51,-46}, -{51,51,-45}, -{51,51,-44}, -{51,51,-43}, -{51,51,-42}, -{51,51,-41}, -{51,51,-40}, -{51,51,-39}, -{51,51,-38}, -{51,51,-37}, -{51,51,-36}, -{51,51,-35}, -{51,51,-34}, -{51,51,-33}, -{51,51,-32}, -{51,51,-31}, -{51,51,-30}, -{51,51,-29}, -{51,51,-28}, -{51,51,-27}, -{51,51,-26}, -{51,51,-25}, -{51,51,-24}, -{51,51,-23}, -{51,51,-22}, -{51,51,-21}, -{51,51,-20}, -{51,51,-19}, -{51,51,-18}, -{51,51,-17}, -{51,51,-16}, -{51,51,-15}, -{51,51,-14}, -{51,51,-13}, -{51,51,-12}, -{51,51,-11}, -{51,51,-10}, -{51,51,-9}, -{51,51,-8}, -{51,51,-7}, -{51,51,-6}, -{51,51,-5}, -{51,51,-4}, -{51,51,-3}, -{51,51,-2}, -{51,51,-1}, -{51,51,0}, -{51,51,1}, -{51,51,2}, -{51,51,3}, -{51,51,4}, -{51,51,5}, -{51,51,6}, -{51,51,7}, -{51,51,8}, -{51,51,9}, -{51,51,10}, -{51,51,11}, -{51,51,12}, -{51,51,13}, -{51,51,14}, -{51,51,15}, -{51,51,16}, -{51,51,17}, -{51,51,18}, -{51,51,19}, -{51,51,20}, -{51,51,21}, -{51,51,22}, -{51,51,23}, -{51,51,24}, -{51,51,25}, -{51,51,26}, -{51,51,27}, -{51,51,28}, -{51,51,29}, -{51,51,30}, -{51,51,31}, -{51,51,32}, -{51,51,33}, -{51,51,34}, -{51,51,35}, -{51,51,36}, -{51,51,37}, -{51,51,38}, -{51,51,39}, -{51,51,40}, -{51,51,41}, -{51,51,42}, -{51,51,43}, -{51,51,44}, -{51,51,45}, -{51,51,46}, -{51,51,47}, -{51,51,48}, -{51,51,49}, -{51,51,50}, -{51,51,51}, -{51,51,52}, -{51,51,53}, -{51,51,54}, -{51,51,55}, -{51,51,56}, -{51,51,57}, -{51,51,58}, -{51,51,59}, -{51,51,60}, -{51,51,61}, -{51,52,-76}, -{51,52,-75}, -{51,52,-74}, -{51,52,-73}, -{51,52,-72}, -{51,52,-71}, -{51,52,-70}, -{51,52,-69}, -{51,52,-68}, -{51,52,-67}, -{51,52,-66}, -{51,52,-65}, -{51,52,-64}, -{51,52,-63}, -{51,52,-62}, -{51,52,-61}, -{51,52,-60}, -{51,52,-59}, -{51,52,-58}, -{51,52,-57}, -{51,52,-56}, -{51,52,-55}, -{51,52,-54}, -{51,52,-53}, -{51,52,-52}, -{51,52,-51}, -{51,52,-50}, -{51,52,-49}, -{51,52,-48}, -{51,52,-47}, -{51,52,-46}, -{51,52,-45}, -{51,52,-44}, -{51,52,-43}, -{51,52,-42}, -{51,52,-41}, -{51,52,-40}, -{51,52,-39}, -{51,52,-38}, -{51,52,-37}, -{51,52,-36}, -{51,52,-35}, -{51,52,-34}, -{51,52,-33}, -{51,52,-32}, -{51,52,-31}, -{51,52,-30}, -{51,52,-29}, -{51,52,-28}, -{51,52,-27}, -{51,52,-26}, -{51,52,-25}, -{51,52,-24}, -{51,52,-23}, -{51,52,-22}, -{51,52,-21}, -{51,52,-20}, -{51,52,-19}, -{51,52,-18}, -{51,52,-17}, -{51,52,-16}, -{51,52,-15}, -{51,52,-14}, -{51,52,-13}, -{51,52,-12}, -{51,52,-11}, -{51,52,-10}, -{51,52,-9}, -{51,52,-8}, -{51,52,-7}, -{51,52,-6}, -{51,52,-5}, -{51,52,-4}, -{51,52,-3}, -{51,52,-2}, -{51,52,-1}, -{51,52,0}, -{51,52,1}, -{51,52,2}, -{51,52,3}, -{51,52,4}, -{51,52,5}, -{51,52,6}, -{51,52,7}, -{51,52,8}, -{51,52,9}, -{51,52,10}, -{51,52,11}, -{51,52,12}, -{51,52,13}, -{51,52,14}, -{51,52,15}, -{51,52,16}, -{51,52,17}, -{51,52,18}, -{51,52,19}, -{51,52,20}, -{51,52,21}, -{51,52,22}, -{51,52,23}, -{51,52,24}, -{51,52,25}, -{51,52,26}, -{51,52,27}, -{51,52,28}, -{51,52,29}, -{51,52,30}, -{51,52,31}, -{51,52,32}, -{51,52,33}, -{51,52,34}, -{51,52,35}, -{51,52,36}, -{51,52,37}, -{51,52,38}, -{51,52,39}, -{51,52,40}, -{51,52,41}, -{51,52,42}, -{51,52,43}, -{51,52,44}, -{51,52,45}, -{51,52,46}, -{51,52,47}, -{51,52,48}, -{51,52,49}, -{51,52,50}, -{51,52,51}, -{51,52,52}, -{51,52,53}, -{51,52,54}, -{51,52,55}, -{51,52,56}, -{51,52,57}, -{51,52,58}, -{51,52,59}, -{51,52,60}, -{51,52,61}, -{51,53,-76}, -{51,53,-75}, -{51,53,-74}, -{51,53,-73}, -{51,53,-72}, -{51,53,-71}, -{51,53,-70}, -{51,53,-69}, -{51,53,-68}, -{51,53,-67}, -{51,53,-66}, -{51,53,-65}, -{51,53,-64}, -{51,53,-63}, -{51,53,-62}, -{51,53,-61}, -{51,53,-60}, -{51,53,-59}, -{51,53,-58}, -{51,53,-57}, -{51,53,-56}, -{51,53,-55}, -{51,53,-54}, -{51,53,-53}, -{51,53,-52}, -{51,53,-51}, -{51,53,-50}, -{51,53,-49}, -{51,53,-48}, -{51,53,-47}, -{51,53,-46}, -{51,53,-45}, -{51,53,-44}, -{51,53,-43}, -{51,53,-42}, -{51,53,-41}, -{51,53,-40}, -{51,53,-39}, -{51,53,-38}, -{51,53,-37}, -{51,53,-36}, -{51,53,-35}, -{51,53,-34}, -{51,53,-33}, -{51,53,-32}, -{51,53,-31}, -{51,53,-30}, -{51,53,-29}, -{51,53,-28}, -{51,53,-27}, -{51,53,-26}, -{51,53,-25}, -{51,53,-24}, -{51,53,-23}, -{51,53,-22}, -{51,53,-21}, -{51,53,-20}, -{51,53,-19}, -{51,53,-18}, -{51,53,-17}, -{51,53,-16}, -{51,53,-15}, -{51,53,-14}, -{51,53,-13}, -{51,53,-12}, -{51,53,-11}, -{51,53,-10}, -{51,53,-9}, -{51,53,-8}, -{51,53,-7}, -{51,53,-6}, -{51,53,-5}, -{51,53,-4}, -{51,53,-3}, -{51,53,-2}, -{51,53,-1}, -{51,53,0}, -{51,53,1}, -{51,53,2}, -{51,53,3}, -{51,53,4}, -{51,53,5}, -{51,53,6}, -{51,53,7}, -{51,53,8}, -{51,53,9}, -{51,53,10}, -{51,53,11}, -{51,53,12}, -{51,53,13}, -{51,53,14}, -{51,53,15}, -{51,53,16}, -{51,53,17}, -{51,53,18}, -{51,53,19}, -{51,53,20}, -{51,53,21}, -{51,53,22}, -{51,53,23}, -{51,53,24}, -{51,53,25}, -{51,53,26}, -{51,53,27}, -{51,53,28}, -{51,53,29}, -{51,53,30}, -{51,53,31}, -{51,53,32}, -{51,53,33}, -{51,53,34}, -{51,53,35}, -{51,53,36}, -{51,53,37}, -{51,53,38}, -{51,53,39}, -{51,53,40}, -{51,53,41}, -{51,53,42}, -{51,53,43}, -{51,53,44}, -{51,53,45}, -{51,53,46}, -{51,53,47}, -{51,53,48}, -{51,53,49}, -{51,53,50}, -{51,53,51}, -{51,53,52}, -{51,53,53}, -{51,53,54}, -{51,53,55}, -{51,53,56}, -{51,53,57}, -{51,53,58}, -{51,53,59}, -{51,53,60}, -{51,53,61}, -{51,54,-76}, -{51,54,-75}, -{51,54,-74}, -{51,54,-73}, -{51,54,-72}, -{51,54,-71}, -{51,54,-70}, -{51,54,-69}, -{51,54,-68}, -{51,54,-67}, -{51,54,-66}, -{51,54,-65}, -{51,54,-64}, -{51,54,-63}, -{51,54,-62}, -{51,54,-61}, -{51,54,-60}, -{51,54,-59}, -{51,54,-58}, -{51,54,-57}, -{51,54,-56}, -{51,54,-55}, -{51,54,-54}, -{51,54,-53}, -{51,54,-52}, -{51,54,-51}, -{51,54,-50}, -{51,54,-49}, -{51,54,-48}, -{51,54,-47}, -{51,54,-46}, -{51,54,-45}, -{51,54,-44}, -{51,54,-43}, -{51,54,-42}, -{51,54,-41}, -{51,54,-40}, -{51,54,-39}, -{51,54,-38}, -{51,54,-37}, -{51,54,-36}, -{51,54,-35}, -{51,54,-34}, -{51,54,-33}, -{51,54,-32}, -{51,54,-31}, -{51,54,-30}, -{51,54,-29}, -{51,54,-28}, -{51,54,-27}, -{51,54,-26}, -{51,54,-25}, -{51,54,-24}, -{51,54,-23}, -{51,54,-22}, -{51,54,-21}, -{51,54,-20}, -{51,54,-19}, -{51,54,-18}, -{51,54,-17}, -{51,54,-16}, -{51,54,-15}, -{51,54,-14}, -{51,54,-13}, -{51,54,-12}, -{51,54,-11}, -{51,54,-10}, -{51,54,-9}, -{51,54,-8}, -{51,54,-7}, -{51,54,-6}, -{51,54,-5}, -{51,54,-4}, -{51,54,-3}, -{51,54,-2}, -{51,54,-1}, -{51,54,0}, -{51,54,1}, -{51,54,2}, -{51,54,3}, -{51,54,4}, -{51,54,5}, -{51,54,6}, -{51,54,7}, -{51,54,8}, -{51,54,9}, -{51,54,10}, -{51,54,11}, -{51,54,12}, -{51,54,13}, -{51,54,14}, -{51,54,15}, -{51,54,16}, -{51,54,17}, -{51,54,18}, -{51,54,19}, -{51,54,20}, -{51,54,21}, -{51,54,22}, -{51,54,23}, -{51,54,24}, -{51,54,25}, -{51,54,26}, -{51,54,27}, -{51,54,28}, -{51,54,29}, -{51,54,30}, -{51,54,31}, -{51,54,32}, -{51,54,33}, -{51,54,34}, -{51,54,35}, -{51,54,36}, -{51,54,37}, -{51,54,38}, -{51,54,39}, -{51,54,40}, -{51,54,41}, -{51,54,42}, -{51,54,43}, -{51,54,44}, -{51,54,45}, -{51,54,46}, -{51,54,47}, -{51,54,48}, -{51,54,49}, -{51,54,50}, -{51,54,51}, -{51,54,52}, -{51,54,53}, -{51,54,54}, -{51,54,55}, -{51,54,56}, -{51,54,57}, -{51,54,58}, -{51,54,59}, -{51,54,60}, -{51,54,61}, -{51,54,62}, -{51,55,-76}, -{51,55,-75}, -{51,55,-74}, -{51,55,-73}, -{51,55,-72}, -{51,55,-71}, -{51,55,-70}, -{51,55,-69}, -{51,55,-68}, -{51,55,-67}, -{51,55,-66}, -{51,55,-65}, -{51,55,-64}, -{51,55,-63}, -{51,55,-62}, -{51,55,-61}, -{51,55,-60}, -{51,55,-59}, -{51,55,-58}, -{51,55,-57}, -{51,55,-56}, -{51,55,-55}, -{51,55,-54}, -{51,55,-53}, -{51,55,-52}, -{51,55,-51}, -{51,55,-50}, -{51,55,-49}, -{51,55,-48}, -{51,55,-47}, -{51,55,-46}, -{51,55,-45}, -{51,55,-44}, -{51,55,-43}, -{51,55,-42}, -{51,55,-41}, -{51,55,-40}, -{51,55,-39}, -{51,55,-38}, -{51,55,-37}, -{51,55,-36}, -{51,55,-35}, -{51,55,-34}, -{51,55,-33}, -{51,55,-32}, -{51,55,-31}, -{51,55,-30}, -{51,55,-29}, -{51,55,-28}, -{51,55,-27}, -{51,55,-26}, -{51,55,-25}, -{51,55,-24}, -{51,55,-23}, -{51,55,-22}, -{51,55,-21}, -{51,55,-20}, -{51,55,-19}, -{51,55,-18}, -{51,55,-17}, -{51,55,-16}, -{51,55,-15}, -{51,55,-14}, -{51,55,-13}, -{51,55,-12}, -{51,55,-11}, -{51,55,-10}, -{51,55,-9}, -{51,55,-8}, -{51,55,-7}, -{51,55,-6}, -{51,55,-5}, -{51,55,-4}, -{51,55,-3}, -{51,55,-2}, -{51,55,-1}, -{51,55,0}, -{51,55,1}, -{51,55,2}, -{51,55,3}, -{51,55,4}, -{51,55,5}, -{51,55,6}, -{51,55,7}, -{51,55,8}, -{51,55,9}, -{51,55,10}, -{51,55,11}, -{51,55,12}, -{51,55,13}, -{51,55,14}, -{51,55,15}, -{51,55,16}, -{51,55,17}, -{51,55,18}, -{51,55,19}, -{51,55,20}, -{51,55,21}, -{51,55,22}, -{51,55,23}, -{51,55,24}, -{51,55,25}, -{51,55,26}, -{51,55,27}, -{51,55,28}, -{51,55,29}, -{51,55,30}, -{51,55,31}, -{51,55,32}, -{51,55,33}, -{51,55,34}, -{51,55,35}, -{51,55,36}, -{51,55,37}, -{51,55,38}, -{51,55,39}, -{51,55,40}, -{51,55,41}, -{51,55,42}, -{51,55,43}, -{51,55,44}, -{51,55,45}, -{51,55,46}, -{51,55,47}, -{51,55,48}, -{51,55,49}, -{51,55,50}, -{51,55,51}, -{51,55,52}, -{51,55,53}, -{51,55,54}, -{51,55,55}, -{51,55,56}, -{51,55,57}, -{51,55,58}, -{51,55,59}, -{51,55,60}, -{51,55,61}, -{51,55,62}, -{51,56,-76}, -{51,56,-75}, -{51,56,-74}, -{51,56,-73}, -{51,56,-72}, -{51,56,-71}, -{51,56,-70}, -{51,56,-69}, -{51,56,-68}, -{51,56,-67}, -{51,56,-66}, -{51,56,-65}, -{51,56,-64}, -{51,56,-63}, -{51,56,-62}, -{51,56,-61}, -{51,56,-60}, -{51,56,-59}, -{51,56,-58}, -{51,56,-57}, -{51,56,-56}, -{51,56,-55}, -{51,56,-54}, -{51,56,-53}, -{51,56,-52}, -{51,56,-51}, -{51,56,-50}, -{51,56,-49}, -{51,56,-48}, -{51,56,-47}, -{51,56,-46}, -{51,56,-45}, -{51,56,-44}, -{51,56,-43}, -{51,56,-42}, -{51,56,-41}, -{51,56,-40}, -{51,56,-39}, -{51,56,-38}, -{51,56,-37}, -{51,56,-36}, -{51,56,-35}, -{51,56,-34}, -{51,56,-33}, -{51,56,-32}, -{51,56,-31}, -{51,56,-30}, -{51,56,-29}, -{51,56,-28}, -{51,56,-27}, -{51,56,-26}, -{51,56,-25}, -{51,56,-24}, -{51,56,-23}, -{51,56,-22}, -{51,56,-21}, -{51,56,-20}, -{51,56,-19}, -{51,56,-18}, -{51,56,-17}, -{51,56,-16}, -{51,56,-15}, -{51,56,-14}, -{51,56,-13}, -{51,56,-12}, -{51,56,-11}, -{51,56,-10}, -{51,56,-9}, -{51,56,-8}, -{51,56,-7}, -{51,56,-6}, -{51,56,-5}, -{51,56,-4}, -{51,56,-3}, -{51,56,-2}, -{51,56,-1}, -{51,56,0}, -{51,56,1}, -{51,56,2}, -{51,56,3}, -{51,56,4}, -{51,56,5}, -{51,56,6}, -{51,56,7}, -{51,56,8}, -{51,56,9}, -{51,56,10}, -{51,56,11}, -{51,56,12}, -{51,56,13}, -{51,56,14}, -{51,56,15}, -{51,56,16}, -{51,56,17}, -{51,56,18}, -{51,56,19}, -{51,56,20}, -{51,56,21}, -{51,56,22}, -{51,56,23}, -{51,56,24}, -{51,56,25}, -{51,56,26}, -{51,56,27}, -{51,56,28}, -{51,56,29}, -{51,56,30}, -{51,56,31}, -{51,56,32}, -{51,56,33}, -{51,56,34}, -{51,56,35}, -{51,56,36}, -{51,56,37}, -{51,56,38}, -{51,56,39}, -{51,56,40}, -{51,56,41}, -{51,56,42}, -{51,56,43}, -{51,56,44}, -{51,56,45}, -{51,56,46}, -{51,56,47}, -{51,56,48}, -{51,56,49}, -{51,56,50}, -{51,56,51}, -{51,56,52}, -{51,56,53}, -{51,56,54}, -{51,56,55}, -{51,56,56}, -{51,56,57}, -{51,56,58}, -{51,56,59}, -{51,56,60}, -{51,56,61}, -{51,56,62}, -{51,57,-76}, -{51,57,-75}, -{51,57,-74}, -{51,57,-73}, -{51,57,-72}, -{51,57,-71}, -{51,57,-70}, -{51,57,-69}, -{51,57,-68}, -{51,57,-67}, -{51,57,-66}, -{51,57,-65}, -{51,57,-64}, -{51,57,-63}, -{51,57,-62}, -{51,57,-61}, -{51,57,-60}, -{51,57,-59}, -{51,57,-58}, -{51,57,-57}, -{51,57,-56}, -{51,57,-55}, -{51,57,-54}, -{51,57,-53}, -{51,57,-52}, -{51,57,-51}, -{51,57,-50}, -{51,57,-49}, -{51,57,-48}, -{51,57,-47}, -{51,57,-46}, -{51,57,-45}, -{51,57,-44}, -{51,57,-43}, -{51,57,-42}, -{51,57,-41}, -{51,57,-40}, -{51,57,-39}, -{51,57,-38}, -{51,57,-37}, -{51,57,-36}, -{51,57,-35}, -{51,57,-34}, -{51,57,-33}, -{51,57,-32}, -{51,57,-31}, -{51,57,-30}, -{51,57,-29}, -{51,57,-28}, -{51,57,-27}, -{51,57,-26}, -{51,57,-25}, -{51,57,-24}, -{51,57,-23}, -{51,57,-22}, -{51,57,-21}, -{51,57,-20}, -{51,57,-19}, -{51,57,-18}, -{51,57,-17}, -{51,57,-16}, -{51,57,-15}, -{51,57,-14}, -{51,57,-13}, -{51,57,-12}, -{51,57,-11}, -{51,57,-10}, -{51,57,-9}, -{51,57,-8}, -{51,57,-7}, -{51,57,-6}, -{51,57,-5}, -{51,57,-4}, -{51,57,-3}, -{51,57,-2}, -{51,57,-1}, -{51,57,0}, -{51,57,1}, -{51,57,2}, -{51,57,3}, -{51,57,4}, -{51,57,5}, -{51,57,6}, -{51,57,7}, -{51,57,8}, -{51,57,9}, -{51,57,10}, -{51,57,11}, -{51,57,12}, -{51,57,13}, -{51,57,14}, -{51,57,15}, -{51,57,16}, -{51,57,17}, -{51,57,18}, -{51,57,19}, -{51,57,20}, -{51,57,21}, -{51,57,22}, -{51,57,23}, -{51,57,24}, -{51,57,25}, -{51,57,26}, -{51,57,27}, -{51,57,28}, -{51,57,29}, -{51,57,30}, -{51,57,31}, -{51,57,32}, -{51,57,33}, -{51,57,34}, -{51,57,35}, -{51,57,36}, -{51,57,37}, -{51,57,38}, -{51,57,39}, -{51,57,40}, -{51,57,41}, -{51,57,42}, -{51,57,43}, -{51,57,44}, -{51,57,45}, -{51,57,46}, -{51,57,47}, -{51,57,48}, -{51,57,49}, -{51,57,50}, -{51,57,51}, -{51,57,52}, -{51,57,53}, -{51,57,54}, -{51,57,55}, -{51,57,56}, -{51,57,57}, -{51,57,58}, -{51,57,59}, -{51,57,60}, -{51,57,61}, -{51,57,62}, -{51,58,-76}, -{51,58,-75}, -{51,58,-74}, -{51,58,-73}, -{51,58,-72}, -{51,58,-71}, -{51,58,-70}, -{51,58,-69}, -{51,58,-68}, -{51,58,-67}, -{51,58,-66}, -{51,58,-65}, -{51,58,-64}, -{51,58,-63}, -{51,58,-62}, -{51,58,-61}, -{51,58,-60}, -{51,58,-59}, -{51,58,-58}, -{51,58,-57}, -{51,58,-56}, -{51,58,-55}, -{51,58,-54}, -{51,58,-53}, -{51,58,-52}, -{51,58,-51}, -{51,58,-50}, -{51,58,-49}, -{51,58,-48}, -{51,58,-47}, -{51,58,-46}, -{51,58,-45}, -{51,58,-44}, -{51,58,-43}, -{51,58,-42}, -{51,58,-41}, -{51,58,-40}, -{51,58,-39}, -{51,58,-38}, -{51,58,-37}, -{51,58,-36}, -{51,58,-35}, -{51,58,-34}, -{51,58,-33}, -{51,58,-32}, -{51,58,-31}, -{51,58,-30}, -{51,58,-29}, -{51,58,-28}, -{51,58,-27}, -{51,58,-26}, -{51,58,-25}, -{51,58,-24}, -{51,58,-23}, -{51,58,-22}, -{51,58,-21}, -{51,58,-20}, -{51,58,-19}, -{51,58,-18}, -{51,58,-17}, -{51,58,-16}, -{51,58,-15}, -{51,58,-14}, -{51,58,-13}, -{51,58,-12}, -{51,58,-11}, -{51,58,-10}, -{51,58,-9}, -{51,58,-8}, -{51,58,-7}, -{51,58,-6}, -{51,58,-5}, -{51,58,-4}, -{51,58,-3}, -{51,58,-2}, -{51,58,-1}, -{51,58,0}, -{51,58,1}, -{51,58,2}, -{51,58,3}, -{51,58,4}, -{51,58,5}, -{51,58,6}, -{51,58,7}, -{51,58,8}, -{51,58,9}, -{51,58,10}, -{51,58,11}, -{51,58,12}, -{51,58,13}, -{51,58,14}, -{51,58,15}, -{51,58,16}, -{51,58,17}, -{51,58,18}, -{51,58,19}, -{51,58,20}, -{51,58,21}, -{51,58,22}, -{51,58,23}, -{51,58,24}, -{51,58,25}, -{51,58,26}, -{51,58,27}, -{51,58,28}, -{51,58,29}, -{51,58,30}, -{51,58,31}, -{51,58,32}, -{51,58,33}, -{51,58,34}, -{51,58,35}, -{51,58,36}, -{51,58,37}, -{51,58,38}, -{51,58,39}, -{51,58,40}, -{51,58,41}, -{51,58,42}, -{51,58,43}, -{51,58,44}, -{51,58,45}, -{51,58,46}, -{51,58,47}, -{51,58,48}, -{51,58,49}, -{51,58,50}, -{51,58,51}, -{51,58,52}, -{51,58,53}, -{51,58,54}, -{51,58,55}, -{51,58,56}, -{51,58,57}, -{51,58,58}, -{51,58,59}, -{51,58,60}, -{51,58,61}, -{51,58,62}, -{51,59,-76}, -{51,59,-75}, -{51,59,-74}, -{51,59,-73}, -{51,59,-72}, -{51,59,-71}, -{51,59,-70}, -{51,59,-69}, -{51,59,-68}, -{51,59,-67}, -{51,59,-66}, -{51,59,-65}, -{51,59,-64}, -{51,59,-63}, -{51,59,-62}, -{51,59,-61}, -{51,59,-60}, -{51,59,-59}, -{51,59,-58}, -{51,59,-57}, -{51,59,-56}, -{51,59,-55}, -{51,59,-54}, -{51,59,-53}, -{51,59,-52}, -{51,59,-51}, -{51,59,-50}, -{51,59,-49}, -{51,59,-48}, -{51,59,-47}, -{51,59,-46}, -{51,59,-45}, -{51,59,-44}, -{51,59,-43}, -{51,59,-42}, -{51,59,-41}, -{51,59,-40}, -{51,59,-39}, -{51,59,-38}, -{51,59,-37}, -{51,59,-36}, -{51,59,-35}, -{51,59,-34}, -{51,59,-33}, -{51,59,-32}, -{51,59,-31}, -{51,59,-30}, -{51,59,-29}, -{51,59,-28}, -{51,59,-27}, -{51,59,-26}, -{51,59,-25}, -{51,59,-24}, -{51,59,-23}, -{51,59,-22}, -{51,59,-21}, -{51,59,-20}, -{51,59,-19}, -{51,59,-18}, -{51,59,-17}, -{51,59,-16}, -{51,59,-15}, -{51,59,-14}, -{51,59,-13}, -{51,59,-12}, -{51,59,-11}, -{51,59,-10}, -{51,59,-9}, -{51,59,-8}, -{51,59,-7}, -{51,59,-6}, -{51,59,-5}, -{51,59,-4}, -{51,59,-3}, -{51,59,-2}, -{51,59,-1}, -{51,59,0}, -{51,59,1}, -{51,59,2}, -{51,59,3}, -{51,59,4}, -{51,59,5}, -{51,59,6}, -{51,59,7}, -{51,59,8}, -{51,59,9}, -{51,59,10}, -{51,59,11}, -{51,59,12}, -{51,59,13}, -{51,59,14}, -{51,59,15}, -{51,59,16}, -{51,59,17}, -{51,59,18}, -{51,59,19}, -{51,59,20}, -{51,59,21}, -{51,59,22}, -{51,59,23}, -{51,59,24}, -{51,59,25}, -{51,59,26}, -{51,59,27}, -{51,59,28}, -{51,59,29}, -{51,59,30}, -{51,59,31}, -{51,59,32}, -{51,59,33}, -{51,59,34}, -{51,59,35}, -{51,59,36}, -{51,59,37}, -{51,59,38}, -{51,59,39}, -{51,59,40}, -{51,59,41}, -{51,59,42}, -{51,59,43}, -{51,59,44}, -{51,59,45}, -{51,59,46}, -{51,59,47}, -{51,59,48}, -{51,59,49}, -{51,59,50}, -{51,59,51}, -{51,59,52}, -{51,59,53}, -{51,59,54}, -{51,59,55}, -{51,59,56}, -{51,59,57}, -{51,59,58}, -{51,59,59}, -{51,59,60}, -{51,59,61}, -{51,59,62}, -{51,60,-76}, -{51,60,-75}, -{51,60,-74}, -{51,60,-73}, -{51,60,-72}, -{51,60,-71}, -{51,60,-70}, -{51,60,-69}, -{51,60,-68}, -{51,60,-67}, -{51,60,-66}, -{51,60,-65}, -{51,60,-64}, -{51,60,-63}, -{51,60,-62}, -{51,60,-61}, -{51,60,-60}, -{51,60,-59}, -{51,60,-58}, -{51,60,-57}, -{51,60,-56}, -{51,60,-55}, -{51,60,-54}, -{51,60,-53}, -{51,60,-52}, -{51,60,-51}, -{51,60,-50}, -{51,60,-49}, -{51,60,-48}, -{51,60,-47}, -{51,60,-46}, -{51,60,-45}, -{51,60,-44}, -{51,60,-43}, -{51,60,-42}, -{51,60,-41}, -{51,60,-40}, -{51,60,-39}, -{51,60,-38}, -{51,60,-37}, -{51,60,-36}, -{51,60,-35}, -{51,60,-34}, -{51,60,-33}, -{51,60,-32}, -{51,60,-31}, -{51,60,-30}, -{51,60,-29}, -{51,60,-28}, -{51,60,-27}, -{51,60,-26}, -{51,60,-25}, -{51,60,-24}, -{51,60,-23}, -{51,60,-22}, -{51,60,-21}, -{51,60,-20}, -{51,60,-19}, -{51,60,-18}, -{51,60,-17}, -{51,60,-16}, -{51,60,-15}, -{51,60,-14}, -{51,60,-13}, -{51,60,-12}, -{51,60,-11}, -{51,60,-10}, -{51,60,-9}, -{51,60,-8}, -{51,60,-7}, -{51,60,-6}, -{51,60,-5}, -{51,60,-4}, -{51,60,-3}, -{51,60,-2}, -{51,60,-1}, -{51,60,0}, -{51,60,1}, -{51,60,2}, -{51,60,3}, -{51,60,4}, -{51,60,5}, -{51,60,6}, -{51,60,7}, -{51,60,8}, -{51,60,9}, -{51,60,10}, -{51,60,11}, -{51,60,12}, -{51,60,13}, -{51,60,14}, -{51,60,15}, -{51,60,16}, -{51,60,17}, -{51,60,18}, -{51,60,19}, -{51,60,20}, -{51,60,21}, -{51,60,22}, -{51,60,23}, -{51,60,24}, -{51,60,25}, -{51,60,26}, -{51,60,27}, -{51,60,28}, -{51,60,29}, -{51,60,30}, -{51,60,31}, -{51,60,32}, -{51,60,33}, -{51,60,34}, -{51,60,35}, -{51,60,36}, -{51,60,37}, -{51,60,38}, -{51,60,39}, -{51,60,40}, -{51,60,41}, -{51,60,42}, -{51,60,43}, -{51,60,44}, -{51,60,45}, -{51,60,46}, -{51,60,47}, -{51,60,48}, -{51,60,49}, -{51,60,50}, -{51,60,51}, -{51,60,52}, -{51,60,53}, -{51,60,54}, -{51,60,55}, -{51,60,56}, -{51,60,57}, -{51,60,58}, -{51,60,59}, -{51,60,60}, -{51,60,61}, -{51,60,62}, -{51,61,-76}, -{51,61,-75}, -{51,61,-74}, -{51,61,-73}, -{51,61,-72}, -{51,61,-71}, -{51,61,-70}, -{51,61,-69}, -{51,61,-68}, -{51,61,-67}, -{51,61,-66}, -{51,61,-65}, -{51,61,-64}, -{51,61,-63}, -{51,61,-62}, -{51,61,-61}, -{51,61,-60}, -{51,61,-59}, -{51,61,-58}, -{51,61,-57}, -{51,61,-56}, -{51,61,-55}, -{51,61,-54}, -{51,61,-53}, -{51,61,-52}, -{51,61,-51}, -{51,61,-50}, -{51,61,-49}, -{51,61,-48}, -{51,61,-47}, -{51,61,-46}, -{51,61,-45}, -{51,61,-44}, -{51,61,-43}, -{51,61,-42}, -{51,61,-41}, -{51,61,-40}, -{51,61,-39}, -{51,61,-38}, -{51,61,-37}, -{51,61,-36}, -{51,61,-35}, -{51,61,-34}, -{51,61,-33}, -{51,61,-32}, -{51,61,-31}, -{51,61,-30}, -{51,61,-29}, -{51,61,-28}, -{51,61,-27}, -{51,61,-26}, -{51,61,-25}, -{51,61,-24}, -{51,61,-23}, -{51,61,-22}, -{51,61,-21}, -{51,61,-20}, -{51,61,-19}, -{51,61,-18}, -{51,61,-17}, -{51,61,-16}, -{51,61,-15}, -{51,61,-14}, -{51,61,-13}, -{51,61,-12}, -{51,61,-11}, -{51,61,-10}, -{51,61,-9}, -{51,61,-8}, -{51,61,-7}, -{51,61,-6}, -{51,61,-5}, -{51,61,-4}, -{51,61,-3}, -{51,61,-2}, -{51,61,-1}, -{51,61,0}, -{51,61,1}, -{51,61,2}, -{51,61,3}, -{51,61,4}, -{51,61,5}, -{51,61,6}, -{51,61,7}, -{51,61,8}, -{51,61,9}, -{51,61,10}, -{51,61,11}, -{51,61,12}, -{51,61,13}, -{51,61,14}, -{51,61,15}, -{51,61,16}, -{51,61,17}, -{51,61,18}, -{51,61,19}, -{51,61,20}, -{51,61,21}, -{51,61,22}, -{51,61,23}, -{51,61,24}, -{51,61,25}, -{51,61,26}, -{51,61,27}, -{51,61,28}, -{51,61,29}, -{51,61,30}, -{51,61,31}, -{51,61,32}, -{51,61,33}, -{51,61,34}, -{51,61,35}, -{51,61,36}, -{51,61,37}, -{51,61,38}, -{51,61,39}, -{51,61,40}, -{51,61,41}, -{51,61,42}, -{51,61,43}, -{51,61,44}, -{51,61,45}, -{51,61,46}, -{51,61,47}, -{51,61,48}, -{51,61,49}, -{51,61,50}, -{51,61,51}, -{51,61,52}, -{51,61,53}, -{51,61,54}, -{51,61,55}, -{51,61,56}, -{51,61,57}, -{51,61,58}, -{51,61,59}, -{51,61,60}, -{51,61,61}, -{51,61,62}, -{51,62,-76}, -{51,62,-75}, -{51,62,-74}, -{51,62,-73}, -{51,62,-72}, -{51,62,-71}, -{51,62,-70}, -{51,62,-69}, -{51,62,-68}, -{51,62,-67}, -{51,62,-66}, -{51,62,-65}, -{51,62,-64}, -{51,62,-63}, -{51,62,-62}, -{51,62,-61}, -{51,62,-60}, -{51,62,-59}, -{51,62,-58}, -{51,62,-57}, -{51,62,-56}, -{51,62,-55}, -{51,62,-54}, -{51,62,-53}, -{51,62,-52}, -{51,62,-51}, -{51,62,-50}, -{51,62,-49}, -{51,62,-48}, -{51,62,-47}, -{51,62,-46}, -{51,62,-45}, -{51,62,-44}, -{51,62,-43}, -{51,62,-42}, -{51,62,-41}, -{51,62,-40}, -{51,62,-39}, -{51,62,-38}, -{51,62,-37}, -{51,62,-36}, -{51,62,-35}, -{51,62,-34}, -{51,62,-33}, -{51,62,-32}, -{51,62,-31}, -{51,62,-30}, -{51,62,-29}, -{51,62,-28}, -{51,62,-27}, -{51,62,-26}, -{51,62,-25}, -{51,62,-24}, -{51,62,-23}, -{51,62,-22}, -{51,62,-21}, -{51,62,-20}, -{51,62,-19}, -{51,62,-18}, -{51,62,-17}, -{51,62,-16}, -{51,62,-15}, -{51,62,-14}, -{51,62,-13}, -{51,62,-12}, -{51,62,-11}, -{51,62,-10}, -{51,62,-9}, -{51,62,-8}, -{51,62,-7}, -{51,62,-6}, -{51,62,-5}, -{51,62,-4}, -{51,62,-3}, -{51,62,-2}, -{51,62,-1}, -{51,62,0}, -{51,62,1}, -{51,62,2}, -{51,62,3}, -{51,62,4}, -{51,62,5}, -{51,62,6}, -{51,62,7}, -{51,62,8}, -{51,62,9}, -{51,62,10}, -{51,62,11}, -{51,62,12}, -{51,62,13}, -{51,62,14}, -{51,62,15}, -{51,62,16}, -{51,62,17}, -{51,62,18}, -{51,62,19}, -{51,62,20}, -{51,62,21}, -{51,62,22}, -{51,62,23}, -{51,62,24}, -{51,62,25}, -{51,62,26}, -{51,62,27}, -{51,62,28}, -{51,62,29}, -{51,62,30}, -{51,62,31}, -{51,62,32}, -{51,62,33}, -{51,62,34}, -{51,62,35}, -{51,62,36}, -{51,62,37}, -{51,62,38}, -{51,62,39}, -{51,62,40}, -{51,62,41}, -{51,62,42}, -{51,62,43}, -{51,62,44}, -{51,62,45}, -{51,62,46}, -{51,62,47}, -{51,62,48}, -{51,62,49}, -{51,62,50}, -{51,62,51}, -{51,62,52}, -{51,62,53}, -{51,62,54}, -{51,62,55}, -{51,62,56}, -{51,62,57}, -{51,62,58}, -{51,62,59}, -{51,62,60}, -{51,62,61}, -{51,62,62}, -{51,62,63}, -{51,63,-76}, -{51,63,-75}, -{51,63,-74}, -{51,63,-73}, -{51,63,-72}, -{51,63,-71}, -{51,63,-70}, -{51,63,-69}, -{51,63,-68}, -{51,63,-67}, -{51,63,-66}, -{51,63,-65}, -{51,63,-64}, -{51,63,-63}, -{51,63,-62}, -{51,63,-61}, -{51,63,-60}, -{51,63,-59}, -{51,63,-58}, -{51,63,-57}, -{51,63,-56}, -{51,63,-55}, -{51,63,-54}, -{51,63,-53}, -{51,63,-52}, -{51,63,-51}, -{51,63,-50}, -{51,63,-49}, -{51,63,-48}, -{51,63,-47}, -{51,63,-46}, -{51,63,-45}, -{51,63,-44}, -{51,63,-43}, -{51,63,-42}, -{51,63,-41}, -{51,63,-40}, -{51,63,-39}, -{51,63,-38}, -{51,63,-37}, -{51,63,-36}, -{51,63,-35}, -{51,63,-34}, -{51,63,-33}, -{51,63,-32}, -{51,63,-31}, -{51,63,-30}, -{51,63,-29}, -{51,63,-28}, -{51,63,-27}, -{51,63,-26}, -{51,63,-25}, -{51,63,-24}, -{51,63,-23}, -{51,63,-22}, -{51,63,-21}, -{51,63,-20}, -{51,63,-19}, -{51,63,-18}, -{51,63,-17}, -{51,63,-16}, -{51,63,-15}, -{51,63,-14}, -{51,63,-13}, -{51,63,-12}, -{51,63,-11}, -{51,63,-10}, -{51,63,-9}, -{51,63,-8}, -{51,63,-7}, -{51,63,-6}, -{51,63,-5}, -{51,63,-4}, -{51,63,-3}, -{51,63,-2}, -{51,63,-1}, -{51,63,0}, -{51,63,1}, -{51,63,2}, -{51,63,3}, -{51,63,4}, -{51,63,5}, -{51,63,6}, -{51,63,7}, -{51,63,8}, -{51,63,9}, -{51,63,10}, -{51,63,11}, -{51,63,12}, -{51,63,13}, -{51,63,14}, -{51,63,15}, -{51,63,16}, -{51,63,17}, -{51,63,18}, -{51,63,19}, -{51,63,20}, -{51,63,21}, -{51,63,22}, -{51,63,23}, -{51,63,24}, -{51,63,25}, -{51,63,26}, -{51,63,27}, -{51,63,28}, -{51,63,29}, -{51,63,30}, -{51,63,31}, -{51,63,32}, -{51,63,33}, -{51,63,34}, -{51,63,35}, -{51,63,36}, -{51,63,37}, -{51,63,38}, -{51,63,39}, -{51,63,40}, -{51,63,41}, -{51,63,42}, -{51,63,43}, -{51,63,44}, -{51,63,45}, -{51,63,46}, -{51,63,47}, -{51,63,48}, -{51,63,49}, -{51,63,50}, -{51,63,51}, -{51,63,52}, -{51,63,53}, -{51,63,54}, -{51,63,55}, -{51,63,56}, -{51,63,57}, -{51,63,58}, -{51,63,59}, -{51,63,60}, -{51,63,61}, -{51,63,62}, -{51,63,63}, -{51,64,-76}, -{51,64,-75}, -{51,64,-74}, -{51,64,-73}, -{51,64,-72}, -{51,64,-71}, -{51,64,-70}, -{51,64,-69}, -{51,64,-68}, -{51,64,-67}, -{51,64,-66}, -{51,64,-65}, -{51,64,-64}, -{51,64,-63}, -{51,64,-62}, -{51,64,-61}, -{51,64,-60}, -{51,64,-59}, -{51,64,-58}, -{51,64,-57}, -{51,64,-56}, -{51,64,-55}, -{51,64,-54}, -{51,64,-53}, -{51,64,-52}, -{51,64,-51}, -{51,64,-50}, -{51,64,-49}, -{51,64,-48}, -{51,64,-47}, -{51,64,-46}, -{51,64,-45}, -{51,64,-44}, -{51,64,-43}, -{51,64,-42}, -{51,64,-41}, -{51,64,-40}, -{51,64,-39}, -{51,64,-38}, -{51,64,-37}, -{51,64,-36}, -{51,64,-35}, -{51,64,-34}, -{51,64,-33}, -{51,64,-32}, -{51,64,-31}, -{51,64,-30}, -{51,64,-29}, -{51,64,-28}, -{51,64,-27}, -{51,64,-26}, -{51,64,-25}, -{51,64,-24}, -{51,64,-23}, -{51,64,-22}, -{51,64,-21}, -{51,64,-20}, -{51,64,-19}, -{51,64,-18}, -{51,64,-17}, -{51,64,-16}, -{51,64,-15}, -{51,64,-14}, -{51,64,-13}, -{51,64,-12}, -{51,64,-11}, -{51,64,-10}, -{51,64,-9}, -{51,64,-8}, -{51,64,-7}, -{51,64,-6}, -{51,64,-5}, -{51,64,-4}, -{51,64,-3}, -{51,64,-2}, -{51,64,-1}, -{51,64,0}, -{51,64,1}, -{51,64,2}, -{51,64,3}, -{51,64,4}, -{51,64,5}, -{51,64,6}, -{51,64,7}, -{51,64,8}, -{51,64,9}, -{51,64,10}, -{51,64,11}, -{51,64,12}, -{51,64,13}, -{51,64,14}, -{51,64,15}, -{51,64,16}, -{51,64,17}, -{51,64,18}, -{51,64,19}, -{51,64,20}, -{51,64,21}, -{51,64,22}, -{51,64,23}, -{51,64,24}, -{51,64,25}, -{51,64,26}, -{51,64,27}, -{51,64,28}, -{51,64,29}, -{51,64,30}, -{51,64,31}, -{51,64,32}, -{51,64,33}, -{51,64,34}, -{51,64,35}, -{51,64,36}, -{51,64,37}, -{51,64,38}, -{51,64,39}, -{51,64,40}, -{51,64,41}, -{51,64,42}, -{51,64,43}, -{51,64,44}, -{51,64,45}, -{51,64,46}, -{51,64,47}, -{51,64,48}, -{51,64,49}, -{51,64,50}, -{51,64,51}, -{51,64,52}, -{51,64,53}, -{51,64,54}, -{51,64,55}, -{51,64,56}, -{51,64,57}, -{51,64,58}, -{51,64,59}, -{51,64,60}, -{51,64,61}, -{51,64,62}, -{51,64,63}, -{51,65,-76}, -{51,65,-75}, -{51,65,-74}, -{51,65,-73}, -{51,65,-72}, -{51,65,-71}, -{51,65,-70}, -{51,65,-69}, -{51,65,-68}, -{51,65,-67}, -{51,65,-66}, -{51,65,-65}, -{51,65,-64}, -{51,65,-63}, -{51,65,-62}, -{51,65,-61}, -{51,65,-60}, -{51,65,-59}, -{51,65,-58}, -{51,65,-57}, -{51,65,-56}, -{51,65,-55}, -{51,65,-54}, -{51,65,-53}, -{51,65,-52}, -{51,65,-51}, -{51,65,-50}, -{51,65,-49}, -{51,65,-48}, -{51,65,-47}, -{51,65,-46}, -{51,65,-45}, -{51,65,-44}, -{51,65,-43}, -{51,65,-42}, -{51,65,-41}, -{51,65,-40}, -{51,65,-39}, -{51,65,-38}, -{51,65,-37}, -{51,65,-36}, -{51,65,-35}, -{51,65,-34}, -{51,65,-33}, -{51,65,-32}, -{51,65,-31}, -{51,65,-30}, -{51,65,-29}, -{51,65,-28}, -{51,65,-27}, -{51,65,-26}, -{51,65,-25}, -{51,65,-24}, -{51,65,-23}, -{51,65,-22}, -{51,65,-21}, -{51,65,-20}, -{51,65,-19}, -{51,65,-18}, -{51,65,-17}, -{51,65,-16}, -{51,65,-15}, -{51,65,-14}, -{51,65,-13}, -{51,65,-12}, -{51,65,-11}, -{51,65,-10}, -{51,65,-9}, -{51,65,-8}, -{51,65,-7}, -{51,65,-6}, -{51,65,-5}, -{51,65,-4}, -{51,65,-3}, -{51,65,-2}, -{51,65,-1}, -{51,65,0}, -{51,65,1}, -{51,65,2}, -{51,65,3}, -{51,65,4}, -{51,65,5}, -{51,65,6}, -{51,65,7}, -{51,65,8}, -{51,65,9}, -{51,65,10}, -{51,65,11}, -{51,65,12}, -{51,65,13}, -{51,65,14}, -{51,65,15}, -{51,65,16}, -{51,65,17}, -{51,65,18}, -{51,65,19}, -{51,65,20}, -{51,65,21}, -{51,65,22}, -{51,65,23}, -{51,65,24}, -{51,65,25}, -{51,65,26}, -{51,65,27}, -{51,65,28}, -{51,65,29}, -{51,65,30}, -{51,65,31}, -{51,65,32}, -{51,65,33}, -{51,65,34}, -{51,65,35}, -{51,65,36}, -{51,65,37}, -{51,65,38}, -{51,65,39}, -{51,65,40}, -{51,65,41}, -{51,65,42}, -{51,65,43}, -{51,65,44}, -{51,65,45}, -{51,65,46}, -{51,65,47}, -{51,65,48}, -{51,65,49}, -{51,65,50}, -{51,65,51}, -{51,65,52}, -{51,65,53}, -{51,65,54}, -{51,65,55}, -{51,65,56}, -{51,65,57}, -{51,65,58}, -{51,65,59}, -{51,65,60}, -{51,65,61}, -{51,65,62}, -{51,65,63}, -{51,66,-76}, -{51,66,-75}, -{51,66,-74}, -{51,66,-73}, -{51,66,-72}, -{51,66,-71}, -{51,66,-70}, -{51,66,-69}, -{51,66,-68}, -{51,66,-67}, -{51,66,-66}, -{51,66,-65}, -{51,66,-64}, -{51,66,-63}, -{51,66,-62}, -{51,66,-61}, -{51,66,-60}, -{51,66,-59}, -{51,66,-58}, -{51,66,-57}, -{51,66,-56}, -{51,66,-55}, -{51,66,-54}, -{51,66,-53}, -{51,66,-52}, -{51,66,-51}, -{51,66,-50}, -{51,66,-49}, -{51,66,-48}, -{51,66,-47}, -{51,66,-46}, -{51,66,-45}, -{51,66,-44}, -{51,66,-43}, -{51,66,-42}, -{51,66,-41}, -{51,66,-40}, -{51,66,-39}, -{51,66,-38}, -{51,66,-37}, -{51,66,-36}, -{51,66,-35}, -{51,66,-34}, -{51,66,-33}, -{51,66,-32}, -{51,66,-31}, -{51,66,-30}, -{51,66,-29}, -{51,66,-28}, -{51,66,-27}, -{51,66,-26}, -{51,66,-25}, -{51,66,-24}, -{51,66,-23}, -{51,66,-22}, -{51,66,-21}, -{51,66,-20}, -{51,66,-19}, -{51,66,-18}, -{51,66,-17}, -{51,66,-16}, -{51,66,-15}, -{51,66,-14}, -{51,66,-13}, -{51,66,-12}, -{51,66,-11}, -{51,66,-10}, -{51,66,-9}, -{51,66,-8}, -{51,66,-7}, -{51,66,-6}, -{51,66,-5}, -{51,66,-4}, -{51,66,-3}, -{51,66,-2}, -{51,66,-1}, -{51,66,0}, -{51,66,1}, -{51,66,2}, -{51,66,3}, -{51,66,4}, -{51,66,5}, -{51,66,6}, -{51,66,7}, -{51,66,8}, -{51,66,9}, -{51,66,10}, -{51,66,11}, -{51,66,12}, -{51,66,13}, -{51,66,14}, -{51,66,15}, -{51,66,16}, -{51,66,17}, -{51,66,18}, -{51,66,19}, -{51,66,20}, -{51,66,21}, -{51,66,22}, -{51,66,23}, -{51,66,24}, -{51,66,25}, -{51,66,26}, -{51,66,27}, -{51,66,28}, -{51,66,29}, -{51,66,30}, -{51,66,31}, -{51,66,32}, -{51,66,33}, -{51,66,34}, -{51,66,35}, -{51,66,36}, -{51,66,37}, -{51,66,38}, -{51,66,39}, -{51,66,40}, -{51,66,41}, -{51,66,42}, -{51,66,43}, -{51,66,44}, -{51,66,45}, -{51,66,46}, -{51,66,47}, -{51,66,48}, -{51,66,49}, -{51,66,50}, -{51,66,51}, -{51,66,52}, -{51,66,53}, -{51,66,54}, -{51,66,55}, -{51,66,56}, -{51,66,57}, -{51,66,58}, -{51,66,59}, -{51,66,60}, -{51,66,61}, -{51,66,62}, -{51,66,63}, -{51,67,-76}, -{51,67,-75}, -{51,67,-74}, -{51,67,-73}, -{51,67,-72}, -{51,67,-71}, -{51,67,-70}, -{51,67,-69}, -{51,67,-68}, -{51,67,-67}, -{51,67,-66}, -{51,67,-65}, -{51,67,-64}, -{51,67,-63}, -{51,67,-62}, -{51,67,-61}, -{51,67,-60}, -{51,67,-59}, -{51,67,-58}, -{51,67,-57}, -{51,67,-56}, -{51,67,-55}, -{51,67,-54}, -{51,67,-53}, -{51,67,-52}, -{51,67,-51}, -{51,67,-50}, -{51,67,-49}, -{51,67,-48}, -{51,67,-47}, -{51,67,-46}, -{51,67,-45}, -{51,67,-44}, -{51,67,-43}, -{51,67,-42}, -{51,67,-41}, -{51,67,-40}, -{51,67,-39}, -{51,67,-38}, -{51,67,-37}, -{51,67,-36}, -{51,67,-35}, -{51,67,-34}, -{51,67,-33}, -{51,67,-32}, -{51,67,-31}, -{51,67,-30}, -{51,67,-29}, -{51,67,-28}, -{51,67,-27}, -{51,67,-26}, -{51,67,-25}, -{51,67,-24}, -{51,67,-23}, -{51,67,-22}, -{51,67,-21}, -{51,67,-20}, -{51,67,-19}, -{51,67,-18}, -{51,67,-17}, -{51,67,-16}, -{51,67,-15}, -{51,67,-14}, -{51,67,-13}, -{51,67,-12}, -{51,67,-11}, -{51,67,-10}, -{51,67,-9}, -{51,67,-8}, -{51,67,-7}, -{51,67,-6}, -{51,67,-5}, -{51,67,-4}, -{51,67,-3}, -{51,67,-2}, -{51,67,-1}, -{51,67,0}, -{51,67,1}, -{51,67,2}, -{51,67,3}, -{51,67,4}, -{51,67,5}, -{51,67,6}, -{51,67,7}, -{51,67,8}, -{51,67,9}, -{51,67,10}, -{51,67,11}, -{51,67,12}, -{51,67,13}, -{51,67,14}, -{51,67,15}, -{51,67,16}, -{51,67,17}, -{51,67,18}, -{51,67,19}, -{51,67,20}, -{51,67,21}, -{51,67,22}, -{51,67,23}, -{51,67,24}, -{51,67,25}, -{51,67,26}, -{51,67,27}, -{51,67,28}, -{51,67,29}, -{51,67,30}, -{51,67,31}, -{51,67,32}, -{51,67,33}, -{51,67,34}, -{51,67,35}, -{51,67,36}, -{51,67,37}, -{51,67,38}, -{51,67,39}, -{51,67,40}, -{51,67,41}, -{51,67,42}, -{51,67,43}, -{51,67,44}, -{51,67,45}, -{51,67,46}, -{51,67,47}, -{51,67,48}, -{51,67,49}, -{51,67,50}, -{51,67,51}, -{51,67,52}, -{51,67,53}, -{51,67,54}, -{51,67,55}, -{51,67,56}, -{51,67,57}, -{51,67,58}, -{51,67,59}, -{51,67,60}, -{51,67,61}, -{51,67,62}, -{51,67,63}, -{51,68,-76}, -{51,68,-75}, -{51,68,-74}, -{51,68,-73}, -{51,68,-72}, -{51,68,-71}, -{51,68,-70}, -{51,68,-69}, -{51,68,-68}, -{51,68,-67}, -{51,68,-66}, -{51,68,-65}, -{51,68,-64}, -{51,68,-63}, -{51,68,-62}, -{51,68,-61}, -{51,68,-60}, -{51,68,-59}, -{51,68,-58}, -{51,68,-57}, -{51,68,-56}, -{51,68,-55}, -{51,68,-54}, -{51,68,-53}, -{51,68,-52}, -{51,68,-51}, -{51,68,-50}, -{51,68,-49}, -{51,68,-48}, -{51,68,-47}, -{51,68,-46}, -{51,68,-45}, -{51,68,-44}, -{51,68,-43}, -{51,68,-42}, -{51,68,-41}, -{51,68,-40}, -{51,68,-39}, -{51,68,-38}, -{51,68,-37}, -{51,68,-36}, -{51,68,-35}, -{51,68,-34}, -{51,68,-33}, -{51,68,-32}, -{51,68,-31}, -{51,68,-30}, -{51,68,-29}, -{51,68,-28}, -{51,68,-27}, -{51,68,-26}, -{51,68,-25}, -{51,68,-24}, -{51,68,-23}, -{51,68,-22}, -{51,68,-21}, -{51,68,-20}, -{51,68,-19}, -{51,68,-18}, -{51,68,-17}, -{51,68,-16}, -{51,68,-15}, -{51,68,-14}, -{51,68,-13}, -{51,68,-12}, -{51,68,-11}, -{51,68,-10}, -{51,68,-9}, -{51,68,-8}, -{51,68,-7}, -{51,68,-6}, -{51,68,-5}, -{51,68,-4}, -{51,68,-3}, -{51,68,-2}, -{51,68,-1}, -{51,68,0}, -{51,68,1}, -{51,68,2}, -{51,68,3}, -{51,68,4}, -{51,68,5}, -{51,68,6}, -{51,68,7}, -{51,68,8}, -{51,68,9}, -{51,68,10}, -{51,68,11}, -{51,68,12}, -{51,68,13}, -{51,68,14}, -{51,68,15}, -{51,68,16}, -{51,68,17}, -{51,68,18}, -{51,68,19}, -{51,68,20}, -{51,68,21}, -{51,68,22}, -{51,68,23}, -{51,68,24}, -{51,68,25}, -{51,68,26}, -{51,68,27}, -{51,68,28}, -{51,68,29}, -{51,68,30}, -{51,68,31}, -{51,68,32}, -{51,68,33}, -{51,68,34}, -{51,68,35}, -{51,68,36}, -{51,68,37}, -{51,68,38}, -{51,68,39}, -{51,68,40}, -{51,68,41}, -{51,68,42}, -{51,68,43}, -{51,68,44}, -{51,68,45}, -{51,68,46}, -{51,68,47}, -{51,68,48}, -{51,68,49}, -{51,68,50}, -{51,68,51}, -{51,68,52}, -{51,68,53}, -{51,68,54}, -{51,68,55}, -{51,68,56}, -{51,68,57}, -{51,68,58}, -{51,68,59}, -{51,68,60}, -{51,68,61}, -{51,68,62}, -{51,68,63}, -{51,69,-76}, -{51,69,-75}, -{51,69,-74}, -{51,69,-73}, -{51,69,-72}, -{51,69,-71}, -{51,69,-70}, -{51,69,-69}, -{51,69,-68}, -{51,69,-67}, -{51,69,-66}, -{51,69,-65}, -{51,69,-64}, -{51,69,-63}, -{51,69,-62}, -{51,69,-61}, -{51,69,-60}, -{51,69,-59}, -{51,69,-58}, -{51,69,-57}, -{51,69,-56}, -{51,69,-55}, -{51,69,-54}, -{51,69,-53}, -{51,69,-52}, -{51,69,-51}, -{51,69,-50}, -{51,69,-49}, -{51,69,-48}, -{51,69,-47}, -{51,69,-46}, -{51,69,-45}, -{51,69,-44}, -{51,69,-43}, -{51,69,-42}, -{51,69,-41}, -{51,69,-40}, -{51,69,-39}, -{51,69,-38}, -{51,69,-37}, -{51,69,-36}, -{51,69,-35}, -{51,69,-34}, -{51,69,-33}, -{51,69,-32}, -{51,69,-31}, -{51,69,-30}, -{51,69,-29}, -{51,69,-28}, -{51,69,-27}, -{51,69,-26}, -{51,69,-25}, -{51,69,-24}, -{51,69,-23}, -{51,69,-22}, -{51,69,-21}, -{51,69,-20}, -{51,69,-19}, -{51,69,-18}, -{51,69,-17}, -{51,69,-16}, -{51,69,-15}, -{51,69,-14}, -{51,69,-13}, -{51,69,-12}, -{51,69,-11}, -{51,69,-10}, -{51,69,-9}, -{51,69,-8}, -{51,69,-7}, -{51,69,-6}, -{51,69,-5}, -{51,69,-4}, -{51,69,-3}, -{51,69,-2}, -{51,69,-1}, -{51,69,0}, -{51,69,1}, -{51,69,2}, -{51,69,3}, -{51,69,4}, -{51,69,5}, -{51,69,6}, -{51,69,7}, -{51,69,8}, -{51,69,9}, -{51,69,10}, -{51,69,11}, -{51,69,12}, -{51,69,13}, -{51,69,14}, -{51,69,15}, -{51,69,16}, -{51,69,17}, -{51,69,18}, -{51,69,19}, -{51,69,20}, -{51,69,21}, -{51,69,22}, -{51,69,23}, -{51,69,24}, -{51,69,25}, -{51,69,26}, -{51,69,27}, -{51,69,28}, -{51,69,29}, -{51,69,30}, -{51,69,31}, -{51,69,32}, -{51,69,33}, -{51,69,34}, -{51,69,35}, -{51,69,36}, -{51,69,37}, -{51,69,38}, -{51,69,39}, -{51,69,40}, -{51,69,41}, -{51,69,42}, -{51,69,43}, -{51,69,44}, -{51,69,45}, -{51,69,46}, -{51,69,47}, -{51,69,48}, -{51,69,49}, -{51,69,50}, -{51,69,51}, -{51,69,52}, -{51,69,53}, -{51,69,54}, -{51,69,55}, -{51,69,56}, -{51,69,57}, -{51,69,58}, -{51,69,59}, -{51,69,60}, -{51,69,61}, -{51,69,62}, -{51,69,63}, -{51,70,-76}, -{51,70,-75}, -{51,70,-74}, -{51,70,-73}, -{51,70,-72}, -{51,70,-71}, -{51,70,-70}, -{51,70,-69}, -{51,70,-68}, -{51,70,-67}, -{51,70,-66}, -{51,70,-65}, -{51,70,-64}, -{51,70,-63}, -{51,70,-62}, -{51,70,-61}, -{51,70,-60}, -{51,70,-59}, -{51,70,-58}, -{51,70,-57}, -{51,70,-56}, -{51,70,-55}, -{51,70,-54}, -{51,70,-53}, -{51,70,-52}, -{51,70,-51}, -{51,70,-50}, -{51,70,-49}, -{51,70,-48}, -{51,70,-47}, -{51,70,-46}, -{51,70,-45}, -{51,70,-44}, -{51,70,-43}, -{51,70,-42}, -{51,70,-41}, -{51,70,-40}, -{51,70,-39}, -{51,70,-38}, -{51,70,-37}, -{51,70,-36}, -{51,70,-35}, -{51,70,-34}, -{51,70,-33}, -{51,70,-32}, -{51,70,-31}, -{51,70,-30}, -{51,70,-29}, -{51,70,-28}, -{51,70,-27}, -{51,70,-26}, -{51,70,-25}, -{51,70,-24}, -{51,70,-23}, -{51,70,-22}, -{51,70,-21}, -{51,70,-20}, -{51,70,-19}, -{51,70,-18}, -{51,70,-17}, -{51,70,-16}, -{51,70,-15}, -{51,70,-14}, -{51,70,-13}, -{51,70,-12}, -{51,70,-11}, -{51,70,-10}, -{51,70,-9}, -{51,70,-8}, -{51,70,-7}, -{51,70,-6}, -{51,70,-5}, -{51,70,-4}, -{51,70,-3}, -{51,70,-2}, -{51,70,-1}, -{51,70,0}, -{51,70,1}, -{51,70,2}, -{51,70,3}, -{51,70,4}, -{51,70,5}, -{51,70,6}, -{51,70,7}, -{51,70,8}, -{51,70,9}, -{51,70,10}, -{51,70,11}, -{51,70,12}, -{51,70,13}, -{51,70,14}, -{51,70,15}, -{51,70,16}, -{51,70,17}, -{51,70,18}, -{51,70,19}, -{51,70,20}, -{51,70,21}, -{51,70,22}, -{51,70,23}, -{51,70,24}, -{51,70,25}, -{51,70,26}, -{51,70,27}, -{51,70,28}, -{51,70,29}, -{51,70,30}, -{51,70,31}, -{51,70,32}, -{51,70,33}, -{51,70,34}, -{51,70,35}, -{51,70,36}, -{51,70,37}, -{51,70,38}, -{51,70,39}, -{51,70,40}, -{51,70,41}, -{51,70,42}, -{51,70,43}, -{51,70,44}, -{51,70,45}, -{51,70,46}, -{51,70,47}, -{51,70,48}, -{51,70,49}, -{51,70,50}, -{51,70,51}, -{51,70,52}, -{51,70,53}, -{51,70,54}, -{51,70,55}, -{51,70,56}, -{51,70,57}, -{51,70,58}, -{51,70,59}, -{51,70,60}, -{51,70,61}, -{51,70,62}, -{51,70,63}, -{51,70,64}, -{51,71,-76}, -{51,71,-75}, -{51,71,-74}, -{51,71,-73}, -{51,71,-72}, -{51,71,-71}, -{51,71,-70}, -{51,71,-69}, -{51,71,-68}, -{51,71,-67}, -{51,71,-66}, -{51,71,-65}, -{51,71,-64}, -{51,71,-63}, -{51,71,-62}, -{51,71,-61}, -{51,71,-60}, -{51,71,-59}, -{51,71,-58}, -{51,71,-57}, -{51,71,-56}, -{51,71,-55}, -{51,71,-54}, -{51,71,-53}, -{51,71,-52}, -{51,71,-51}, -{51,71,-50}, -{51,71,-49}, -{51,71,-48}, -{51,71,-47}, -{51,71,-46}, -{51,71,-45}, -{51,71,-44}, -{51,71,-43}, -{51,71,-42}, -{51,71,-41}, -{51,71,-40}, -{51,71,-39}, -{51,71,-38}, -{51,71,-37}, -{51,71,-36}, -{51,71,-35}, -{51,71,-34}, -{51,71,-33}, -{51,71,-32}, -{51,71,-31}, -{51,71,-30}, -{51,71,-29}, -{51,71,-28}, -{51,71,-27}, -{51,71,-26}, -{51,71,-25}, -{51,71,-24}, -{51,71,-23}, -{51,71,-22}, -{51,71,-21}, -{51,71,-20}, -{51,71,-19}, -{51,71,-18}, -{51,71,-17}, -{51,71,-16}, -{51,71,-15}, -{51,71,-14}, -{51,71,-13}, -{51,71,-12}, -{51,71,-11}, -{51,71,-10}, -{51,71,-9}, -{51,71,-8}, -{51,71,-7}, -{51,71,-6}, -{51,71,-5}, -{51,71,-4}, -{51,71,-3}, -{51,71,-2}, -{51,71,-1}, -{51,71,0}, -{51,71,1}, -{51,71,2}, -{51,71,3}, -{51,71,4}, -{51,71,5}, -{51,71,6}, -{51,71,7}, -{51,71,8}, -{51,71,9}, -{51,71,10}, -{51,71,11}, -{51,71,12}, -{51,71,13}, -{51,71,14}, -{51,71,15}, -{51,71,16}, -{51,71,17}, -{51,71,18}, -{51,71,19}, -{51,71,20}, -{51,71,21}, -{51,71,22}, -{51,71,23}, -{51,71,24}, -{51,71,25}, -{51,71,26}, -{51,71,27}, -{51,71,28}, -{51,71,29}, -{51,71,30}, -{51,71,31}, -{51,71,32}, -{51,71,33}, -{51,71,34}, -{51,71,35}, -{51,71,36}, -{51,71,37}, -{51,71,38}, -{51,71,39}, -{51,71,40}, -{51,71,41}, -{51,71,42}, -{51,71,43}, -{51,71,44}, -{51,71,45}, -{51,71,46}, -{51,71,47}, -{51,71,48}, -{51,71,49}, -{51,71,50}, -{51,71,51}, -{51,71,52}, -{51,71,53}, -{51,71,54}, -{51,71,55}, -{51,71,56}, -{51,71,57}, -{51,71,58}, -{51,71,59}, -{51,71,60}, -{51,71,61}, -{51,71,62}, -{51,71,63}, -{51,71,64}, -{51,72,-76}, -{51,72,-75}, -{51,72,-74}, -{51,72,-73}, -{51,72,-72}, -{51,72,-71}, -{51,72,-70}, -{51,72,-69}, -{51,72,-68}, -{51,72,-67}, -{51,72,-66}, -{51,72,-65}, -{51,72,-64}, -{51,72,-63}, -{51,72,-62}, -{51,72,-61}, -{51,72,-60}, -{51,72,-59}, -{51,72,-58}, -{51,72,-57}, -{51,72,-56}, -{51,72,-55}, -{51,72,-54}, -{51,72,-53}, -{51,72,-52}, -{51,72,-51}, -{51,72,-50}, -{51,72,-49}, -{51,72,-48}, -{51,72,-47}, -{51,72,-46}, -{51,72,-45}, -{51,72,-44}, -{51,72,-43}, -{51,72,-42}, -{51,72,-41}, -{51,72,-40}, -{51,72,-39}, -{51,72,-38}, -{51,72,-37}, -{51,72,-36}, -{51,72,-35}, -{51,72,-34}, -{51,72,-33}, -{51,72,-32}, -{51,72,-31}, -{51,72,-30}, -{51,72,-29}, -{51,72,-28}, -{51,72,-27}, -{51,72,-26}, -{51,72,-25}, -{51,72,-24}, -{51,72,-23}, -{51,72,-22}, -{51,72,-21}, -{51,72,-20}, -{51,72,-19}, -{51,72,-18}, -{51,72,-17}, -{51,72,-16}, -{51,72,-15}, -{51,72,-14}, -{51,72,-13}, -{51,72,-12}, -{51,72,-11}, -{51,72,-10}, -{51,72,-9}, -{51,72,-8}, -{51,72,-7}, -{51,72,-6}, -{51,72,-5}, -{51,72,-4}, -{51,72,-3}, -{51,72,-2}, -{51,72,-1}, -{51,72,0}, -{51,72,1}, -{51,72,2}, -{51,72,3}, -{51,72,4}, -{51,72,5}, -{51,72,6}, -{51,72,7}, -{51,72,8}, -{51,72,9}, -{51,72,10}, -{51,72,11}, -{51,72,12}, -{51,72,13}, -{51,72,14}, -{51,72,15}, -{51,72,16}, -{51,72,17}, -{51,72,18}, -{51,72,19}, -{51,72,20}, -{51,72,21}, -{51,72,22}, -{51,72,23}, -{51,72,24}, -{51,72,25}, -{51,72,26}, -{51,72,27}, -{51,72,28}, -{51,72,29}, -{51,72,30}, -{51,72,31}, -{51,72,32}, -{51,72,33}, -{51,72,34}, -{51,72,35}, -{51,72,36}, -{51,72,37}, -{51,72,38}, -{51,72,39}, -{51,72,40}, -{51,72,41}, -{51,72,42}, -{51,72,43}, -{51,72,44}, -{51,72,45}, -{51,72,46}, -{51,72,47}, -{51,72,48}, -{51,72,49}, -{51,72,50}, -{51,72,51}, -{51,72,52}, -{51,72,53}, -{51,72,54}, -{51,72,55}, -{51,72,56}, -{51,72,57}, -{51,72,58}, -{51,72,59}, -{51,72,60}, -{51,72,61}, -{51,72,62}, -{51,72,63}, -{51,72,64}, -{51,73,-76}, -{51,73,-75}, -{51,73,-74}, -{51,73,-73}, -{51,73,-72}, -{51,73,-71}, -{51,73,-70}, -{51,73,-69}, -{51,73,-68}, -{51,73,-67}, -{51,73,-66}, -{51,73,-65}, -{51,73,-64}, -{51,73,-63}, -{51,73,-62}, -{51,73,-61}, -{51,73,-60}, -{51,73,-59}, -{51,73,-58}, -{51,73,-57}, -{51,73,-56}, -{51,73,-55}, -{51,73,-54}, -{51,73,-53}, -{51,73,-52}, -{51,73,-51}, -{51,73,-50}, -{51,73,-49}, -{51,73,-48}, -{51,73,-47}, -{51,73,-46}, -{51,73,-45}, -{51,73,-44}, -{51,73,-43}, -{51,73,-42}, -{51,73,-41}, -{51,73,-40}, -{51,73,-39}, -{51,73,-38}, -{51,73,-37}, -{51,73,-36}, -{51,73,-35}, -{51,73,-34}, -{51,73,-33}, -{51,73,-32}, -{51,73,-31}, -{51,73,-30}, -{51,73,-29}, -{51,73,-28}, -{51,73,-27}, -{51,73,-26}, -{51,73,-25}, -{51,73,-24}, -{51,73,-23}, -{51,73,-22}, -{51,73,-21}, -{51,73,-20}, -{51,73,-19}, -{51,73,-18}, -{51,73,-17}, -{51,73,-16}, -{51,73,-15}, -{51,73,-14}, -{51,73,-13}, -{51,73,-12}, -{51,73,-11}, -{51,73,-10}, -{51,73,-9}, -{51,73,-8}, -{51,73,-7}, -{51,73,-6}, -{51,73,-5}, -{51,73,-4}, -{51,73,-3}, -{51,73,-2}, -{51,73,-1}, -{51,73,0}, -{51,73,1}, -{51,73,2}, -{51,73,3}, -{51,73,4}, -{51,73,5}, -{51,73,6}, -{51,73,7}, -{51,73,8}, -{51,73,9}, -{51,73,10}, -{51,73,11}, -{51,73,12}, -{51,73,13}, -{51,73,14}, -{51,73,15}, -{51,73,16}, -{51,73,17}, -{51,73,18}, -{51,73,19}, -{51,73,20}, -{51,73,21}, -{51,73,22}, -{51,73,23}, -{51,73,24}, -{51,73,25}, -{51,73,26}, -{51,73,27}, -{51,73,28}, -{51,73,29}, -{51,73,30}, -{51,73,31}, -{51,73,32}, -{51,73,33}, -{51,73,34}, -{51,73,35}, -{51,73,36}, -{51,73,37}, -{51,73,38}, -{51,73,39}, -{51,73,40}, -{51,73,41}, -{51,73,42}, -{51,73,43}, -{51,73,44}, -{51,73,45}, -{51,73,46}, -{51,73,47}, -{51,73,48}, -{51,73,49}, -{51,73,50}, -{51,73,51}, -{51,73,52}, -{51,73,53}, -{51,73,54}, -{51,73,55}, -{51,73,56}, -{51,73,57}, -{51,73,58}, -{51,73,59}, -{51,73,60}, -{51,73,61}, -{51,73,62}, -{51,73,63}, -{51,73,64}, -{51,74,-76}, -{51,74,-75}, -{51,74,-74}, -{51,74,-73}, -{51,74,-72}, -{51,74,-71}, -{51,74,-70}, -{51,74,-69}, -{51,74,-68}, -{51,74,-67}, -{51,74,-66}, -{51,74,-65}, -{51,74,-64}, -{51,74,-63}, -{51,74,-62}, -{51,74,-61}, -{51,74,-60}, -{51,74,-59}, -{51,74,-58}, -{51,74,-57}, -{51,74,-56}, -{51,74,-55}, -{51,74,-54}, -{51,74,-53}, -{51,74,-52}, -{51,74,-51}, -{51,74,-50}, -{51,74,-49}, -{51,74,-48}, -{51,74,-47}, -{51,74,-46}, -{51,74,-45}, -{51,74,-44}, -{51,74,-43}, -{51,74,-42}, -{51,74,-41}, -{51,74,-40}, -{51,74,-39}, -{51,74,-38}, -{51,74,-37}, -{51,74,-36}, -{51,74,-35}, -{51,74,-34}, -{51,74,-33}, -{51,74,-32}, -{51,74,-31}, -{51,74,-30}, -{51,74,-29}, -{51,74,-28}, -{51,74,-27}, -{51,74,-26}, -{51,74,-25}, -{51,74,-24}, -{51,74,-23}, -{51,74,-22}, -{51,74,-21}, -{51,74,-20}, -{51,74,-19}, -{51,74,-18}, -{51,74,-17}, -{51,74,-16}, -{51,74,-15}, -{51,74,-14}, -{51,74,-13}, -{51,74,-12}, -{51,74,-11}, -{51,74,-10}, -{51,74,-9}, -{51,74,-8}, -{51,74,-7}, -{51,74,-6}, -{51,74,-5}, -{51,74,-4}, -{51,74,-3}, -{51,74,-2}, -{51,74,-1}, -{51,74,0}, -{51,74,1}, -{51,74,2}, -{51,74,3}, -{51,74,4}, -{51,74,5}, -{51,74,6}, -{51,74,7}, -{51,74,8}, -{51,74,9}, -{51,74,10}, -{51,74,11}, -{51,74,12}, -{51,74,13}, -{51,74,14}, -{51,74,15}, -{51,74,16}, -{51,74,17}, -{51,74,18}, -{51,74,19}, -{51,74,20}, -{51,74,21}, -{51,74,22}, -{51,74,23}, -{51,74,24}, -{51,74,25}, -{51,74,26}, -{51,74,27}, -{51,74,28}, -{51,74,29}, -{51,74,30}, -{51,74,31}, -{51,74,32}, -{51,74,33}, -{51,74,34}, -{51,74,35}, -{51,74,36}, -{51,74,37}, -{51,74,38}, -{51,74,39}, -{51,74,40}, -{51,74,41}, -{51,74,42}, -{51,74,43}, -{51,74,44}, -{51,74,45}, -{51,74,46}, -{51,74,47}, -{51,74,48}, -{51,74,49}, -{51,74,50}, -{51,74,51}, -{51,74,52}, -{51,74,53}, -{51,74,54}, -{51,74,55}, -{51,74,56}, -{51,74,57}, -{51,74,58}, -{51,74,59}, -{51,74,60}, -{51,74,61}, -{51,74,62}, -{51,74,63}, -{51,74,64}, -{51,75,-76}, -{51,75,-75}, -{51,75,-74}, -{51,75,-73}, -{51,75,-72}, -{51,75,-71}, -{51,75,-70}, -{51,75,-69}, -{51,75,-68}, -{51,75,-67}, -{51,75,-66}, -{51,75,-65}, -{51,75,-64}, -{51,75,-63}, -{51,75,-62}, -{51,75,-61}, -{51,75,-60}, -{51,75,-59}, -{51,75,-58}, -{51,75,-57}, -{51,75,-56}, -{51,75,-55}, -{51,75,-54}, -{51,75,-53}, -{51,75,-52}, -{51,75,-51}, -{51,75,-50}, -{51,75,-49}, -{51,75,-48}, -{51,75,-47}, -{51,75,-46}, -{51,75,-45}, -{51,75,-44}, -{51,75,-43}, -{51,75,-42}, -{51,75,-41}, -{51,75,-40}, -{51,75,-39}, -{51,75,-38}, -{51,75,-37}, -{51,75,-36}, -{51,75,-35}, -{51,75,-34}, -{51,75,-33}, -{51,75,-32}, -{51,75,-31}, -{51,75,-30}, -{51,75,-29}, -{51,75,-28}, -{51,75,-27}, -{51,75,-26}, -{51,75,-25}, -{51,75,-24}, -{51,75,-23}, -{51,75,-22}, -{51,75,-21}, -{51,75,-20}, -{51,75,-19}, -{51,75,-18}, -{51,75,-17}, -{51,75,-16}, -{51,75,-15}, -{51,75,-14}, -{51,75,-13}, -{51,75,-12}, -{51,75,-11}, -{51,75,-10}, -{51,75,-9}, -{51,75,-8}, -{51,75,-7}, -{51,75,-6}, -{51,75,-5}, -{51,75,-4}, -{51,75,-3}, -{51,75,-2}, -{51,75,-1}, -{51,75,0}, -{51,75,1}, -{51,75,2}, -{51,75,3}, -{51,75,4}, -{51,75,5}, -{51,75,6}, -{51,75,7}, -{51,75,8}, -{51,75,9}, -{51,75,10}, -{51,75,11}, -{51,75,12}, -{51,75,13}, -{51,75,14}, -{51,75,15}, -{51,75,16}, -{51,75,17}, -{51,75,18}, -{51,75,19}, -{51,75,20}, -{51,75,21}, -{51,75,22}, -{51,75,23}, -{51,75,24}, -{51,75,25}, -{51,75,26}, -{51,75,27}, -{51,75,28}, -{51,75,29}, -{51,75,30}, -{51,75,31}, -{51,75,32}, -{51,75,33}, -{51,75,34}, -{51,75,35}, -{51,75,36}, -{51,75,37}, -{51,75,38}, -{51,75,39}, -{51,75,40}, -{51,75,41}, -{51,75,42}, -{51,75,43}, -{51,75,44}, -{51,75,45}, -{51,75,46}, -{51,75,47}, -{51,75,48}, -{51,75,49}, -{51,75,50}, -{51,75,51}, -{51,75,52}, -{51,75,53}, -{51,75,54}, -{51,75,55}, -{51,75,56}, -{51,75,57}, -{51,75,58}, -{51,75,59}, -{51,75,60}, -{51,75,61}, -{51,75,62}, -{51,75,63}, -{51,75,64}, -{51,76,-76}, -{51,76,-75}, -{51,76,-74}, -{51,76,-73}, -{51,76,-72}, -{51,76,-71}, -{51,76,-70}, -{51,76,-69}, -{51,76,-68}, -{51,76,-67}, -{51,76,-66}, -{51,76,-65}, -{51,76,-64}, -{51,76,-63}, -{51,76,-62}, -{51,76,-61}, -{51,76,-60}, -{51,76,-59}, -{51,76,-58}, -{51,76,-57}, -{51,76,-56}, -{51,76,-55}, -{51,76,-54}, -{51,76,-53}, -{51,76,-52}, -{51,76,-51}, -{51,76,-50}, -{51,76,-49}, -{51,76,-48}, -{51,76,-47}, -{51,76,-46}, -{51,76,-45}, -{51,76,-44}, -{51,76,-43}, -{51,76,-42}, -{51,76,-41}, -{51,76,-40}, -{51,76,-39}, -{51,76,-38}, -{51,76,-37}, -{51,76,-36}, -{51,76,-35}, -{51,76,-34}, -{51,76,-33}, -{51,76,-32}, -{51,76,-31}, -{51,76,-30}, -{51,76,-29}, -{51,76,-28}, -{51,76,-27}, -{51,76,-26}, -{51,76,-25}, -{51,76,-24}, -{51,76,-23}, -{51,76,-22}, -{51,76,-21}, -{51,76,-20}, -{51,76,-19}, -{51,76,-18}, -{51,76,-17}, -{51,76,-16}, -{51,76,-15}, -{51,76,-14}, -{51,76,-13}, -{51,76,-12}, -{51,76,-11}, -{51,76,-10}, -{51,76,-9}, -{51,76,-8}, -{51,76,-7}, -{51,76,-6}, -{51,76,-5}, -{51,76,-4}, -{51,76,-3}, -{51,76,-2}, -{51,76,-1}, -{51,76,0}, -{51,76,1}, -{51,76,2}, -{51,76,3}, -{51,76,4}, -{51,76,5}, -{51,76,6}, -{51,76,7}, -{51,76,8}, -{51,76,9}, -{51,76,10}, -{51,76,11}, -{51,76,12}, -{51,76,13}, -{51,76,14}, -{51,76,15}, -{51,76,16}, -{51,76,17}, -{51,76,18}, -{51,76,19}, -{51,76,20}, -{51,76,21}, -{51,76,22}, -{51,76,23}, -{51,76,24}, -{51,76,25}, -{51,76,26}, -{51,76,27}, -{51,76,28}, -{51,76,29}, -{51,76,30}, -{51,76,31}, -{51,76,32}, -{51,76,33}, -{51,76,34}, -{51,76,35}, -{51,76,36}, -{51,76,37}, -{51,76,38}, -{51,76,39}, -{51,76,40}, -{51,76,41}, -{51,76,42}, -{51,76,43}, -{51,76,44}, -{51,76,45}, -{51,76,46}, -{51,76,47}, -{51,76,48}, -{51,76,49}, -{51,76,50}, -{51,76,51}, -{51,76,52}, -{51,76,53}, -{51,76,54}, -{51,76,55}, -{51,76,56}, -{51,76,57}, -{51,76,58}, -{51,76,59}, -{51,76,60}, -{51,76,61}, -{51,76,62}, -{51,76,63}, -{51,76,64}, -{51,76,65}, -{51,77,-76}, -{51,77,-75}, -{51,77,-74}, -{51,77,-73}, -{51,77,-72}, -{51,77,-71}, -{51,77,-70}, -{51,77,-69}, -{51,77,-68}, -{51,77,-67}, -{51,77,-66}, -{51,77,-65}, -{51,77,-64}, -{51,77,-63}, -{51,77,-62}, -{51,77,-61}, -{51,77,-60}, -{51,77,-59}, -{51,77,-58}, -{51,77,-57}, -{51,77,-56}, -{51,77,-55}, -{51,77,-54}, -{51,77,-53}, -{51,77,-52}, -{51,77,-51}, -{51,77,-50}, -{51,77,-49}, -{51,77,-48}, -{51,77,-47}, -{51,77,-46}, -{51,77,-45}, -{51,77,-44}, -{51,77,-43}, -{51,77,-42}, -{51,77,-41}, -{51,77,-40}, -{51,77,-39}, -{51,77,-38}, -{51,77,-37}, -{51,77,-36}, -{51,77,-35}, -{51,77,-34}, -{51,77,-33}, -{51,77,-32}, -{51,77,-31}, -{51,77,-30}, -{51,77,-29}, -{51,77,-28}, -{51,77,-27}, -{51,77,-26}, -{51,77,-25}, -{51,77,-24}, -{51,77,-23}, -{51,77,-22}, -{51,77,-21}, -{51,77,-20}, -{51,77,-19}, -{51,77,-18}, -{51,77,-17}, -{51,77,-16}, -{51,77,-15}, -{51,77,-14}, -{51,77,-13}, -{51,77,-12}, -{51,77,-11}, -{51,77,-10}, -{51,77,-9}, -{51,77,-8}, -{51,77,-7}, -{51,77,-6}, -{51,77,-5}, -{51,77,-4}, -{51,77,-3}, -{51,77,-2}, -{51,77,-1}, -{51,77,0}, -{51,77,1}, -{51,77,2}, -{51,77,3}, -{51,77,4}, -{51,77,5}, -{51,77,6}, -{51,77,7}, -{51,77,8}, -{51,77,9}, -{51,77,10}, -{51,77,11}, -{51,77,12}, -{51,77,13}, -{51,77,14}, -{51,77,15}, -{51,77,16}, -{51,77,17}, -{51,77,18}, -{51,77,19}, -{51,77,20}, -{51,77,21}, -{51,77,22}, -{51,77,23}, -{51,77,24}, -{51,77,25}, -{51,77,26}, -{51,77,27}, -{51,77,28}, -{51,77,29}, -{51,77,30}, -{51,77,31}, -{51,77,32}, -{51,77,33}, -{51,77,34}, -{51,77,35}, -{51,77,36}, -{51,77,37}, -{51,77,38}, -{51,77,39}, -{51,77,40}, -{51,77,41}, -{51,77,42}, -{51,77,43}, -{51,77,44}, -{51,77,45}, -{51,77,46}, -{51,77,47}, -{51,77,48}, -{51,77,49}, -{51,77,50}, -{51,77,51}, -{51,77,52}, -{51,77,53}, -{51,77,54}, -{51,77,55}, -{51,77,56}, -{51,77,57}, -{51,77,58}, -{51,77,59}, -{51,77,60}, -{51,77,61}, -{51,77,62}, -{51,77,63}, -{51,77,64}, -{51,77,65}, -{51,78,-76}, -{51,78,-75}, -{51,78,-74}, -{51,78,-73}, -{51,78,-72}, -{51,78,-71}, -{51,78,-70}, -{51,78,-69}, -{51,78,-68}, -{51,78,-67}, -{51,78,-66}, -{51,78,-65}, -{51,78,-64}, -{51,78,-63}, -{51,78,-62}, -{51,78,-61}, -{51,78,-60}, -{51,78,-59}, -{51,78,-58}, -{51,78,-57}, -{51,78,-56}, -{51,78,-55}, -{51,78,-54}, -{51,78,-53}, -{51,78,-52}, -{51,78,-51}, -{51,78,-50}, -{51,78,-49}, -{51,78,-48}, -{51,78,-47}, -{51,78,-46}, -{51,78,-45}, -{51,78,-44}, -{51,78,-43}, -{51,78,-42}, -{51,78,-41}, -{51,78,-40}, -{51,78,-39}, -{51,78,-38}, -{51,78,-37}, -{51,78,-36}, -{51,78,-35}, -{51,78,-34}, -{51,78,-33}, -{51,78,-32}, -{51,78,-31}, -{51,78,-30}, -{51,78,-29}, -{51,78,-28}, -{51,78,-27}, -{51,78,-26}, -{51,78,-25}, -{51,78,-24}, -{51,78,-23}, -{51,78,-22}, -{51,78,-21}, -{51,78,-20}, -{51,78,-19}, -{51,78,-18}, -{51,78,-17}, -{51,78,-16}, -{51,78,-15}, -{51,78,-14}, -{51,78,-13}, -{51,78,-12}, -{51,78,-11}, -{51,78,-10}, -{51,78,-9}, -{51,78,-8}, -{51,78,-7}, -{51,78,-6}, -{51,78,-5}, -{51,78,-4}, -{51,78,-3}, -{51,78,-2}, -{51,78,-1}, -{51,78,0}, -{51,78,1}, -{51,78,2}, -{51,78,3}, -{51,78,4}, -{51,78,5}, -{51,78,6}, -{51,78,7}, -{51,78,8}, -{51,78,9}, -{51,78,10}, -{51,78,11}, -{51,78,12}, -{51,78,13}, -{51,78,14}, -{51,78,15}, -{51,78,16}, -{51,78,17}, -{51,78,18}, -{51,78,19}, -{51,78,20}, -{51,78,21}, -{51,78,22}, -{51,78,23}, -{51,78,24}, -{51,78,25}, -{51,78,26}, -{51,78,27}, -{51,78,28}, -{51,78,29}, -{51,78,30}, -{51,78,31}, -{51,78,32}, -{51,78,33}, -{51,78,34}, -{51,78,35}, -{51,78,36}, -{51,78,37}, -{51,78,38}, -{51,78,39}, -{51,78,40}, -{51,78,41}, -{51,78,42}, -{51,78,43}, -{51,78,44}, -{51,78,45}, -{51,78,46}, -{51,78,47}, -{51,78,48}, -{51,78,49}, -{51,79,-76}, -{51,79,-75}, -{51,79,-74}, -{51,79,-73}, -{51,79,-72}, -{51,79,-71}, -{51,79,-70}, -{51,79,-69}, -{51,79,-68}, -{51,79,-67}, -{51,79,-66}, -{51,79,-65}, -{51,79,-64}, -{51,79,-63}, -{51,79,-62}, -{51,79,-61}, -{51,79,-60}, -{51,79,-59}, -{51,79,-58}, -{51,79,-57}, -{51,79,-56}, -{51,79,-55}, -{51,79,-54}, -{51,79,-53}, -{51,79,-52}, -{51,79,-51}, -{51,79,-50}, -{51,79,-49}, -{51,79,-48}, -{51,79,-47}, -{51,79,-46}, -{51,79,-45}, -{51,79,-44}, -{51,79,-43}, -{51,79,-42}, -{51,79,-41}, -{51,79,-40}, -{51,79,-39}, -{51,79,-38}, -{51,79,-37}, -{51,79,-36}, -{51,79,-35}, -{51,79,-34}, -{51,79,-33}, -{51,79,-32}, -{51,79,-31}, -{51,79,-30}, -{51,79,-29}, -{51,79,-28}, -{51,79,-27}, -{51,79,-26}, -{51,79,-25}, -{51,79,-24}, -{51,79,-23}, -{51,79,-22}, -{51,79,-21}, -{51,79,-20}, -{51,79,-19}, -{51,79,-18}, -{51,79,-17}, -{51,79,-16}, -{51,79,-15}, -{51,79,-14}, -{51,79,-13}, -{51,79,-12}, -{51,79,-11}, -{51,79,-10}, -{51,79,-9}, -{51,79,-8}, -{51,79,-7}, -{51,79,-6}, -{51,79,-5}, -{51,79,-4}, -{51,79,-3}, -{51,79,-2}, -{51,79,-1}, -{51,79,0}, -{51,79,1}, -{51,79,2}, -{51,79,3}, -{51,79,4}, -{51,79,5}, -{51,79,6}, -{51,79,7}, -{51,79,8}, -{51,79,9}, -{51,79,10}, -{51,79,11}, -{51,79,12}, -{51,79,13}, -{51,79,14}, -{51,79,15}, -{51,79,16}, -{51,79,17}, -{51,79,18}, -{51,79,19}, -{51,79,20}, -{51,79,21}, -{51,80,-76}, -{51,80,-75}, -{51,80,-74}, -{51,80,-73}, -{51,80,-72}, -{51,80,-71}, -{51,80,-70}, -{51,80,-69}, -{51,80,-68}, -{51,80,-67}, -{51,80,-66}, -{51,80,-65}, -{51,80,-64}, -{51,80,-63}, -{51,80,-62}, -{51,80,-61}, -{51,80,-60}, -{51,80,-59}, -{51,80,-58}, -{51,80,-57}, -{51,80,-56}, -{51,80,-55}, -{51,80,-54}, -{51,80,-53}, -{51,80,-52}, -{51,80,-51}, -{51,80,-50}, -{51,80,-49}, -{51,80,-48}, -{51,80,-47}, -{51,80,-46}, -{51,80,-45}, -{51,80,-44}, -{51,80,-43}, -{51,80,-42}, -{51,80,-41}, -{51,80,-40}, -{51,80,-39}, -{51,80,-38}, -{51,80,-37}, -{51,80,-36}, -{51,80,-35}, -{51,80,-34}, -{51,80,-33}, -{51,80,-32}, -{51,80,-31}, -{51,80,-30}, -{51,80,-29}, -{51,80,-28}, -{51,80,-27}, -{51,80,-26}, -{51,80,-25}, -{51,80,-24}, -{51,80,-23}, -{51,80,-22}, -{51,80,-21}, -{51,80,-20}, -{51,80,-19}, -{51,80,-18}, -{51,80,-17}, -{51,80,-16}, -{51,80,-15}, -{51,80,-14}, -{51,80,-13}, -{51,80,-12}, -{51,80,-11}, -{51,80,-10}, -{51,80,-9}, -{51,80,-8}, -{51,80,-7}, -{51,80,-6}, -{51,80,-5}, -{51,80,-4}, -{51,80,-3}, -{51,80,-2}, -{51,80,-1}, -{51,80,0}, -{51,80,1}, -{51,80,2}, -{51,80,3}, -{51,80,4}, -{51,81,-76}, -{51,81,-75}, -{51,81,-74}, -{51,81,-73}, -{51,81,-72}, -{51,81,-71}, -{51,81,-70}, -{51,81,-69}, -{51,81,-68}, -{51,81,-67}, -{51,81,-66}, -{51,81,-65}, -{51,81,-64}, -{51,81,-63}, -{51,81,-62}, -{51,81,-61}, -{51,81,-60}, -{51,81,-59}, -{51,81,-58}, -{51,81,-57}, -{51,81,-56}, -{51,81,-55}, -{51,81,-54}, -{51,81,-53}, -{51,81,-52}, -{51,81,-51}, -{51,81,-50}, -{51,81,-49}, -{51,81,-48}, -{51,81,-47}, -{51,81,-46}, -{51,81,-45}, -{51,81,-44}, -{51,81,-43}, -{51,81,-42}, -{51,81,-41}, -{51,81,-40}, -{51,81,-39}, -{51,81,-38}, -{51,81,-37}, -{51,81,-36}, -{51,81,-35}, -{51,81,-34}, -{51,81,-33}, -{51,81,-32}, -{51,81,-31}, -{51,81,-30}, -{51,81,-29}, -{51,81,-28}, -{51,81,-27}, -{51,81,-26}, -{51,81,-25}, -{51,81,-24}, -{51,81,-23}, -{51,81,-22}, -{51,81,-21}, -{51,81,-20}, -{51,81,-19}, -{51,81,-18}, -{51,81,-17}, -{51,81,-16}, -{51,81,-15}, -{51,81,-14}, -{51,81,-13}, -{51,81,-12}, -{51,81,-11}, -{51,81,-10}, -{51,81,-9}, -{51,82,-76}, -{51,82,-75}, -{51,82,-74}, -{51,82,-73}, -{51,82,-72}, -{51,82,-71}, -{51,82,-70}, -{51,82,-69}, -{51,82,-68}, -{51,82,-67}, -{51,82,-66}, -{51,82,-65}, -{51,82,-64}, -{51,82,-63}, -{51,82,-62}, -{51,82,-61}, -{51,82,-60}, -{51,82,-59}, -{51,82,-58}, -{51,82,-57}, -{51,82,-56}, -{51,82,-55}, -{51,82,-54}, -{51,82,-53}, -{51,82,-52}, -{51,82,-51}, -{51,82,-50}, -{51,82,-49}, -{51,82,-48}, -{51,82,-47}, -{51,82,-46}, -{51,82,-45}, -{51,82,-44}, -{51,82,-43}, -{51,82,-42}, -{51,82,-41}, -{51,82,-40}, -{51,82,-39}, -{51,82,-38}, -{51,82,-37}, -{51,82,-36}, -{51,82,-35}, -{51,82,-34}, -{51,82,-33}, -{51,82,-32}, -{51,82,-31}, -{51,82,-30}, -{51,82,-29}, -{51,82,-28}, -{51,82,-27}, -{51,82,-26}, -{51,82,-25}, -{51,82,-24}, -{51,82,-23}, -{51,82,-22}, -{51,82,-21}, -{51,82,-20}, -{51,82,-19}, -{51,83,-76}, -{51,83,-75}, -{51,83,-74}, -{51,83,-73}, -{51,83,-72}, -{51,83,-71}, -{51,83,-70}, -{51,83,-69}, -{51,83,-68}, -{51,83,-67}, -{51,83,-66}, -{51,83,-65}, -{51,83,-64}, -{51,83,-63}, -{51,83,-62}, -{51,83,-61}, -{51,83,-60}, -{51,83,-59}, -{51,83,-58}, -{51,83,-57}, -{51,83,-56}, -{51,83,-55}, -{51,83,-54}, -{51,83,-53}, -{51,83,-52}, -{51,83,-51}, -{51,83,-50}, -{51,83,-49}, -{51,83,-48}, -{51,83,-47}, -{51,83,-46}, -{51,83,-45}, -{51,83,-44}, -{51,83,-43}, -{51,83,-42}, -{51,83,-41}, -{51,83,-40}, -{51,83,-39}, -{51,83,-38}, -{51,83,-37}, -{51,83,-36}, -{51,83,-35}, -{51,83,-34}, -{51,83,-33}, -{51,83,-32}, -{51,83,-31}, -{51,83,-30}, -{51,83,-29}, -{51,84,-76}, -{51,84,-75}, -{51,84,-74}, -{51,84,-73}, -{51,84,-72}, -{51,84,-71}, -{51,84,-70}, -{51,84,-69}, -{51,84,-68}, -{51,84,-67}, -{51,84,-66}, -{51,84,-65}, -{51,84,-64}, -{51,84,-63}, -{51,84,-62}, -{51,84,-61}, -{51,84,-60}, -{51,84,-59}, -{51,84,-58}, -{51,84,-57}, -{51,84,-56}, -{51,84,-55}, -{51,84,-54}, -{51,84,-53}, -{51,84,-52}, -{51,84,-51}, -{51,84,-50}, -{51,84,-49}, -{51,84,-48}, -{51,84,-47}, -{51,84,-46}, -{51,84,-45}, -{51,84,-44}, -{51,84,-43}, -{51,84,-42}, -{51,84,-41}, -{51,84,-40}, -{51,84,-39}, -{51,84,-38}, -{51,84,-37}, -{51,85,-76}, -{51,85,-75}, -{51,85,-74}, -{51,85,-73}, -{51,85,-72}, -{51,85,-71}, -{51,85,-70}, -{51,85,-69}, -{51,85,-68}, -{51,85,-67}, -{51,85,-66}, -{51,85,-65}, -{51,85,-64}, -{51,85,-63}, -{51,85,-62}, -{51,85,-61}, -{51,85,-60}, -{51,85,-59}, -{51,85,-58}, -{51,85,-57}, -{51,85,-56}, -{51,85,-55}, -{51,85,-54}, -{51,85,-53}, -{51,85,-52}, -{51,85,-51}, -{51,85,-50}, -{51,85,-49}, -{51,85,-48}, -{51,85,-47}, -{51,85,-46}, -{51,85,-45}, -{51,85,-44}, -{51,86,-76}, -{51,86,-75}, -{51,86,-74}, -{51,86,-73}, -{51,86,-72}, -{51,86,-71}, -{51,86,-70}, -{51,86,-69}, -{51,86,-68}, -{51,86,-67}, -{51,86,-66}, -{51,86,-65}, -{51,86,-64}, -{51,86,-63}, -{51,86,-62}, -{51,86,-61}, -{51,86,-60}, -{51,86,-59}, -{51,86,-58}, -{51,86,-57}, -{51,86,-56}, -{51,86,-55}, -{51,86,-54}, -{51,86,-53}, -{51,86,-52}, -{51,86,-51}, -{51,87,-76}, -{51,87,-75}, -{51,87,-74}, -{51,87,-73}, -{51,87,-72}, -{51,87,-71}, -{51,87,-70}, -{51,87,-69}, -{51,87,-68}, -{51,87,-67}, -{51,87,-66}, -{51,87,-65}, -{51,87,-64}, -{51,87,-63}, -{51,87,-62}, -{51,87,-61}, -{51,87,-60}, -{51,87,-59}, -{51,87,-58}, -{51,88,-76}, -{51,88,-75}, -{51,88,-74}, -{51,88,-73}, -{51,88,-72}, -{51,88,-71}, -{51,88,-70}, -{51,88,-69}, -{51,88,-68}, -{51,88,-67}, -{51,88,-66}, -{51,88,-65}, -{51,88,-64}, -{51,89,-76}, -{51,89,-75}, -{51,89,-74}, -{51,89,-73}, -{51,89,-72}, -{51,89,-71}, -{51,89,-70}, -{51,89,-69}, -{51,90,-76}, -{51,90,-75}, -{52,-56,52}, -{52,-56,53}, -{52,-56,54}, -{52,-55,47}, -{52,-55,48}, -{52,-55,49}, -{52,-55,50}, -{52,-55,51}, -{52,-55,52}, -{52,-55,53}, -{52,-55,54}, -{52,-54,43}, -{52,-54,44}, -{52,-54,45}, -{52,-54,46}, -{52,-54,47}, -{52,-54,48}, -{52,-54,49}, -{52,-54,50}, -{52,-54,51}, -{52,-54,52}, -{52,-54,53}, -{52,-54,54}, -{52,-53,40}, -{52,-53,41}, -{52,-53,42}, -{52,-53,43}, -{52,-53,44}, -{52,-53,45}, -{52,-53,46}, -{52,-53,47}, -{52,-53,48}, -{52,-53,49}, -{52,-53,50}, -{52,-53,51}, -{52,-53,52}, -{52,-53,53}, -{52,-53,54}, -{52,-52,36}, -{52,-52,37}, -{52,-52,38}, -{52,-52,39}, -{52,-52,40}, -{52,-52,41}, -{52,-52,42}, -{52,-52,43}, -{52,-52,44}, -{52,-52,45}, -{52,-52,46}, -{52,-52,47}, -{52,-52,48}, -{52,-52,49}, -{52,-52,50}, -{52,-52,51}, -{52,-52,52}, -{52,-52,53}, -{52,-52,54}, -{52,-51,33}, -{52,-51,34}, -{52,-51,35}, -{52,-51,36}, -{52,-51,37}, -{52,-51,38}, -{52,-51,39}, -{52,-51,40}, -{52,-51,41}, -{52,-51,42}, -{52,-51,43}, -{52,-51,44}, -{52,-51,45}, -{52,-51,46}, -{52,-51,47}, -{52,-51,48}, -{52,-51,49}, -{52,-51,50}, -{52,-51,51}, -{52,-51,52}, -{52,-51,53}, -{52,-51,54}, -{52,-50,30}, -{52,-50,31}, -{52,-50,32}, -{52,-50,33}, -{52,-50,34}, -{52,-50,35}, -{52,-50,36}, -{52,-50,37}, -{52,-50,38}, -{52,-50,39}, -{52,-50,40}, -{52,-50,41}, -{52,-50,42}, -{52,-50,43}, -{52,-50,44}, -{52,-50,45}, -{52,-50,46}, -{52,-50,47}, -{52,-50,48}, -{52,-50,49}, -{52,-50,50}, -{52,-50,51}, -{52,-50,52}, -{52,-50,53}, -{52,-50,54}, -{52,-49,28}, -{52,-49,29}, -{52,-49,30}, -{52,-49,31}, -{52,-49,32}, -{52,-49,33}, -{52,-49,34}, -{52,-49,35}, -{52,-49,36}, -{52,-49,37}, -{52,-49,38}, -{52,-49,39}, -{52,-49,40}, -{52,-49,41}, -{52,-49,42}, -{52,-49,43}, -{52,-49,44}, -{52,-49,45}, -{52,-49,46}, -{52,-49,47}, -{52,-49,48}, -{52,-49,49}, -{52,-49,50}, -{52,-49,51}, -{52,-49,52}, -{52,-49,53}, -{52,-49,54}, -{52,-49,55}, -{52,-48,25}, -{52,-48,26}, -{52,-48,27}, -{52,-48,28}, -{52,-48,29}, -{52,-48,30}, -{52,-48,31}, -{52,-48,32}, -{52,-48,33}, -{52,-48,34}, -{52,-48,35}, -{52,-48,36}, -{52,-48,37}, -{52,-48,38}, -{52,-48,39}, -{52,-48,40}, -{52,-48,41}, -{52,-48,42}, -{52,-48,43}, -{52,-48,44}, -{52,-48,45}, -{52,-48,46}, -{52,-48,47}, -{52,-48,48}, -{52,-48,49}, -{52,-48,50}, -{52,-48,51}, -{52,-48,52}, -{52,-48,53}, -{52,-48,54}, -{52,-48,55}, -{52,-47,23}, -{52,-47,24}, -{52,-47,25}, -{52,-47,26}, -{52,-47,27}, -{52,-47,28}, -{52,-47,29}, -{52,-47,30}, -{52,-47,31}, -{52,-47,32}, -{52,-47,33}, -{52,-47,34}, -{52,-47,35}, -{52,-47,36}, -{52,-47,37}, -{52,-47,38}, -{52,-47,39}, -{52,-47,40}, -{52,-47,41}, -{52,-47,42}, -{52,-47,43}, -{52,-47,44}, -{52,-47,45}, -{52,-47,46}, -{52,-47,47}, -{52,-47,48}, -{52,-47,49}, -{52,-47,50}, -{52,-47,51}, -{52,-47,52}, -{52,-47,53}, -{52,-47,54}, -{52,-47,55}, -{52,-46,20}, -{52,-46,21}, -{52,-46,22}, -{52,-46,23}, -{52,-46,24}, -{52,-46,25}, -{52,-46,26}, -{52,-46,27}, -{52,-46,28}, -{52,-46,29}, -{52,-46,30}, -{52,-46,31}, -{52,-46,32}, -{52,-46,33}, -{52,-46,34}, -{52,-46,35}, -{52,-46,36}, -{52,-46,37}, -{52,-46,38}, -{52,-46,39}, -{52,-46,40}, -{52,-46,41}, -{52,-46,42}, -{52,-46,43}, -{52,-46,44}, -{52,-46,45}, -{52,-46,46}, -{52,-46,47}, -{52,-46,48}, -{52,-46,49}, -{52,-46,50}, -{52,-46,51}, -{52,-46,52}, -{52,-46,53}, -{52,-46,54}, -{52,-46,55}, -{52,-45,18}, -{52,-45,19}, -{52,-45,20}, -{52,-45,21}, -{52,-45,22}, -{52,-45,23}, -{52,-45,24}, -{52,-45,25}, -{52,-45,26}, -{52,-45,27}, -{52,-45,28}, -{52,-45,29}, -{52,-45,30}, -{52,-45,31}, -{52,-45,32}, -{52,-45,33}, -{52,-45,34}, -{52,-45,35}, -{52,-45,36}, -{52,-45,37}, -{52,-45,38}, -{52,-45,39}, -{52,-45,40}, -{52,-45,41}, -{52,-45,42}, -{52,-45,43}, -{52,-45,44}, -{52,-45,45}, -{52,-45,46}, -{52,-45,47}, -{52,-45,48}, -{52,-45,49}, -{52,-45,50}, -{52,-45,51}, -{52,-45,52}, -{52,-45,53}, -{52,-45,54}, -{52,-45,55}, -{52,-44,16}, -{52,-44,17}, -{52,-44,18}, -{52,-44,19}, -{52,-44,20}, -{52,-44,21}, -{52,-44,22}, -{52,-44,23}, -{52,-44,24}, -{52,-44,25}, -{52,-44,26}, -{52,-44,27}, -{52,-44,28}, -{52,-44,29}, -{52,-44,30}, -{52,-44,31}, -{52,-44,32}, -{52,-44,33}, -{52,-44,34}, -{52,-44,35}, -{52,-44,36}, -{52,-44,37}, -{52,-44,38}, -{52,-44,39}, -{52,-44,40}, -{52,-44,41}, -{52,-44,42}, -{52,-44,43}, -{52,-44,44}, -{52,-44,45}, -{52,-44,46}, -{52,-44,47}, -{52,-44,48}, -{52,-44,49}, -{52,-44,50}, -{52,-44,51}, -{52,-44,52}, -{52,-44,53}, -{52,-44,54}, -{52,-44,55}, -{52,-43,14}, -{52,-43,15}, -{52,-43,16}, -{52,-43,17}, -{52,-43,18}, -{52,-43,19}, -{52,-43,20}, -{52,-43,21}, -{52,-43,22}, -{52,-43,23}, -{52,-43,24}, -{52,-43,25}, -{52,-43,26}, -{52,-43,27}, -{52,-43,28}, -{52,-43,29}, -{52,-43,30}, -{52,-43,31}, -{52,-43,32}, -{52,-43,33}, -{52,-43,34}, -{52,-43,35}, -{52,-43,36}, -{52,-43,37}, -{52,-43,38}, -{52,-43,39}, -{52,-43,40}, -{52,-43,41}, -{52,-43,42}, -{52,-43,43}, -{52,-43,44}, -{52,-43,45}, -{52,-43,46}, -{52,-43,47}, -{52,-43,48}, -{52,-43,49}, -{52,-43,50}, -{52,-43,51}, -{52,-43,52}, -{52,-43,53}, -{52,-43,54}, -{52,-43,55}, -{52,-42,12}, -{52,-42,13}, -{52,-42,14}, -{52,-42,15}, -{52,-42,16}, -{52,-42,17}, -{52,-42,18}, -{52,-42,19}, -{52,-42,20}, -{52,-42,21}, -{52,-42,22}, -{52,-42,23}, -{52,-42,24}, -{52,-42,25}, -{52,-42,26}, -{52,-42,27}, -{52,-42,28}, -{52,-42,29}, -{52,-42,30}, -{52,-42,31}, -{52,-42,32}, -{52,-42,33}, -{52,-42,34}, -{52,-42,35}, -{52,-42,36}, -{52,-42,37}, -{52,-42,38}, -{52,-42,39}, -{52,-42,40}, -{52,-42,41}, -{52,-42,42}, -{52,-42,43}, -{52,-42,44}, -{52,-42,45}, -{52,-42,46}, -{52,-42,47}, -{52,-42,48}, -{52,-42,49}, -{52,-42,50}, -{52,-42,51}, -{52,-42,52}, -{52,-42,53}, -{52,-42,54}, -{52,-42,55}, -{52,-41,10}, -{52,-41,11}, -{52,-41,12}, -{52,-41,13}, -{52,-41,14}, -{52,-41,15}, -{52,-41,16}, -{52,-41,17}, -{52,-41,18}, -{52,-41,19}, -{52,-41,20}, -{52,-41,21}, -{52,-41,22}, -{52,-41,23}, -{52,-41,24}, -{52,-41,25}, -{52,-41,26}, -{52,-41,27}, -{52,-41,28}, -{52,-41,29}, -{52,-41,30}, -{52,-41,31}, -{52,-41,32}, -{52,-41,33}, -{52,-41,34}, -{52,-41,35}, -{52,-41,36}, -{52,-41,37}, -{52,-41,38}, -{52,-41,39}, -{52,-41,40}, -{52,-41,41}, -{52,-41,42}, -{52,-41,43}, -{52,-41,44}, -{52,-41,45}, -{52,-41,46}, -{52,-41,47}, -{52,-41,48}, -{52,-41,49}, -{52,-41,50}, -{52,-41,51}, -{52,-41,52}, -{52,-41,53}, -{52,-41,54}, -{52,-41,55}, -{52,-40,8}, -{52,-40,9}, -{52,-40,10}, -{52,-40,11}, -{52,-40,12}, -{52,-40,13}, -{52,-40,14}, -{52,-40,15}, -{52,-40,16}, -{52,-40,17}, -{52,-40,18}, -{52,-40,19}, -{52,-40,20}, -{52,-40,21}, -{52,-40,22}, -{52,-40,23}, -{52,-40,24}, -{52,-40,25}, -{52,-40,26}, -{52,-40,27}, -{52,-40,28}, -{52,-40,29}, -{52,-40,30}, -{52,-40,31}, -{52,-40,32}, -{52,-40,33}, -{52,-40,34}, -{52,-40,35}, -{52,-40,36}, -{52,-40,37}, -{52,-40,38}, -{52,-40,39}, -{52,-40,40}, -{52,-40,41}, -{52,-40,42}, -{52,-40,43}, -{52,-40,44}, -{52,-40,45}, -{52,-40,46}, -{52,-40,47}, -{52,-40,48}, -{52,-40,49}, -{52,-40,50}, -{52,-40,51}, -{52,-40,52}, -{52,-40,53}, -{52,-40,54}, -{52,-40,55}, -{52,-39,6}, -{52,-39,7}, -{52,-39,8}, -{52,-39,9}, -{52,-39,10}, -{52,-39,11}, -{52,-39,12}, -{52,-39,13}, -{52,-39,14}, -{52,-39,15}, -{52,-39,16}, -{52,-39,17}, -{52,-39,18}, -{52,-39,19}, -{52,-39,20}, -{52,-39,21}, -{52,-39,22}, -{52,-39,23}, -{52,-39,24}, -{52,-39,25}, -{52,-39,26}, -{52,-39,27}, -{52,-39,28}, -{52,-39,29}, -{52,-39,30}, -{52,-39,31}, -{52,-39,32}, -{52,-39,33}, -{52,-39,34}, -{52,-39,35}, -{52,-39,36}, -{52,-39,37}, -{52,-39,38}, -{52,-39,39}, -{52,-39,40}, -{52,-39,41}, -{52,-39,42}, -{52,-39,43}, -{52,-39,44}, -{52,-39,45}, -{52,-39,46}, -{52,-39,47}, -{52,-39,48}, -{52,-39,49}, -{52,-39,50}, -{52,-39,51}, -{52,-39,52}, -{52,-39,53}, -{52,-39,54}, -{52,-39,55}, -{52,-38,4}, -{52,-38,5}, -{52,-38,6}, -{52,-38,7}, -{52,-38,8}, -{52,-38,9}, -{52,-38,10}, -{52,-38,11}, -{52,-38,12}, -{52,-38,13}, -{52,-38,14}, -{52,-38,15}, -{52,-38,16}, -{52,-38,17}, -{52,-38,18}, -{52,-38,19}, -{52,-38,20}, -{52,-38,21}, -{52,-38,22}, -{52,-38,23}, -{52,-38,24}, -{52,-38,25}, -{52,-38,26}, -{52,-38,27}, -{52,-38,28}, -{52,-38,29}, -{52,-38,30}, -{52,-38,31}, -{52,-38,32}, -{52,-38,33}, -{52,-38,34}, -{52,-38,35}, -{52,-38,36}, -{52,-38,37}, -{52,-38,38}, -{52,-38,39}, -{52,-38,40}, -{52,-38,41}, -{52,-38,42}, -{52,-38,43}, -{52,-38,44}, -{52,-38,45}, -{52,-38,46}, -{52,-38,47}, -{52,-38,48}, -{52,-38,49}, -{52,-38,50}, -{52,-38,51}, -{52,-38,52}, -{52,-38,53}, -{52,-38,54}, -{52,-38,55}, -{52,-37,2}, -{52,-37,3}, -{52,-37,4}, -{52,-37,5}, -{52,-37,6}, -{52,-37,7}, -{52,-37,8}, -{52,-37,9}, -{52,-37,10}, -{52,-37,11}, -{52,-37,12}, -{52,-37,13}, -{52,-37,14}, -{52,-37,15}, -{52,-37,16}, -{52,-37,17}, -{52,-37,18}, -{52,-37,19}, -{52,-37,20}, -{52,-37,21}, -{52,-37,22}, -{52,-37,23}, -{52,-37,24}, -{52,-37,25}, -{52,-37,26}, -{52,-37,27}, -{52,-37,28}, -{52,-37,29}, -{52,-37,30}, -{52,-37,31}, -{52,-37,32}, -{52,-37,33}, -{52,-37,34}, -{52,-37,35}, -{52,-37,36}, -{52,-37,37}, -{52,-37,38}, -{52,-37,39}, -{52,-37,40}, -{52,-37,41}, -{52,-37,42}, -{52,-37,43}, -{52,-37,44}, -{52,-37,45}, -{52,-37,46}, -{52,-37,47}, -{52,-37,48}, -{52,-37,49}, -{52,-37,50}, -{52,-37,51}, -{52,-37,52}, -{52,-37,53}, -{52,-37,54}, -{52,-37,55}, -{52,-36,0}, -{52,-36,1}, -{52,-36,2}, -{52,-36,3}, -{52,-36,4}, -{52,-36,5}, -{52,-36,6}, -{52,-36,7}, -{52,-36,8}, -{52,-36,9}, -{52,-36,10}, -{52,-36,11}, -{52,-36,12}, -{52,-36,13}, -{52,-36,14}, -{52,-36,15}, -{52,-36,16}, -{52,-36,17}, -{52,-36,18}, -{52,-36,19}, -{52,-36,20}, -{52,-36,21}, -{52,-36,22}, -{52,-36,23}, -{52,-36,24}, -{52,-36,25}, -{52,-36,26}, -{52,-36,27}, -{52,-36,28}, -{52,-36,29}, -{52,-36,30}, -{52,-36,31}, -{52,-36,32}, -{52,-36,33}, -{52,-36,34}, -{52,-36,35}, -{52,-36,36}, -{52,-36,37}, -{52,-36,38}, -{52,-36,39}, -{52,-36,40}, -{52,-36,41}, -{52,-36,42}, -{52,-36,43}, -{52,-36,44}, -{52,-36,45}, -{52,-36,46}, -{52,-36,47}, -{52,-36,48}, -{52,-36,49}, -{52,-36,50}, -{52,-36,51}, -{52,-36,52}, -{52,-36,53}, -{52,-36,54}, -{52,-36,55}, -{52,-35,-1}, -{52,-35,0}, -{52,-35,1}, -{52,-35,2}, -{52,-35,3}, -{52,-35,4}, -{52,-35,5}, -{52,-35,6}, -{52,-35,7}, -{52,-35,8}, -{52,-35,9}, -{52,-35,10}, -{52,-35,11}, -{52,-35,12}, -{52,-35,13}, -{52,-35,14}, -{52,-35,15}, -{52,-35,16}, -{52,-35,17}, -{52,-35,18}, -{52,-35,19}, -{52,-35,20}, -{52,-35,21}, -{52,-35,22}, -{52,-35,23}, -{52,-35,24}, -{52,-35,25}, -{52,-35,26}, -{52,-35,27}, -{52,-35,28}, -{52,-35,29}, -{52,-35,30}, -{52,-35,31}, -{52,-35,32}, -{52,-35,33}, -{52,-35,34}, -{52,-35,35}, -{52,-35,36}, -{52,-35,37}, -{52,-35,38}, -{52,-35,39}, -{52,-35,40}, -{52,-35,41}, -{52,-35,42}, -{52,-35,43}, -{52,-35,44}, -{52,-35,45}, -{52,-35,46}, -{52,-35,47}, -{52,-35,48}, -{52,-35,49}, -{52,-35,50}, -{52,-35,51}, -{52,-35,52}, -{52,-35,53}, -{52,-35,54}, -{52,-35,55}, -{52,-34,-3}, -{52,-34,-2}, -{52,-34,-1}, -{52,-34,0}, -{52,-34,1}, -{52,-34,2}, -{52,-34,3}, -{52,-34,4}, -{52,-34,5}, -{52,-34,6}, -{52,-34,7}, -{52,-34,8}, -{52,-34,9}, -{52,-34,10}, -{52,-34,11}, -{52,-34,12}, -{52,-34,13}, -{52,-34,14}, -{52,-34,15}, -{52,-34,16}, -{52,-34,17}, -{52,-34,18}, -{52,-34,19}, -{52,-34,20}, -{52,-34,21}, -{52,-34,22}, -{52,-34,23}, -{52,-34,24}, -{52,-34,25}, -{52,-34,26}, -{52,-34,27}, -{52,-34,28}, -{52,-34,29}, -{52,-34,30}, -{52,-34,31}, -{52,-34,32}, -{52,-34,33}, -{52,-34,34}, -{52,-34,35}, -{52,-34,36}, -{52,-34,37}, -{52,-34,38}, -{52,-34,39}, -{52,-34,40}, -{52,-34,41}, -{52,-34,42}, -{52,-34,43}, -{52,-34,44}, -{52,-34,45}, -{52,-34,46}, -{52,-34,47}, -{52,-34,48}, -{52,-34,49}, -{52,-34,50}, -{52,-34,51}, -{52,-34,52}, -{52,-34,53}, -{52,-34,54}, -{52,-34,55}, -{52,-33,-5}, -{52,-33,-4}, -{52,-33,-3}, -{52,-33,-2}, -{52,-33,-1}, -{52,-33,0}, -{52,-33,1}, -{52,-33,2}, -{52,-33,3}, -{52,-33,4}, -{52,-33,5}, -{52,-33,6}, -{52,-33,7}, -{52,-33,8}, -{52,-33,9}, -{52,-33,10}, -{52,-33,11}, -{52,-33,12}, -{52,-33,13}, -{52,-33,14}, -{52,-33,15}, -{52,-33,16}, -{52,-33,17}, -{52,-33,18}, -{52,-33,19}, -{52,-33,20}, -{52,-33,21}, -{52,-33,22}, -{52,-33,23}, -{52,-33,24}, -{52,-33,25}, -{52,-33,26}, -{52,-33,27}, -{52,-33,28}, -{52,-33,29}, -{52,-33,30}, -{52,-33,31}, -{52,-33,32}, -{52,-33,33}, -{52,-33,34}, -{52,-33,35}, -{52,-33,36}, -{52,-33,37}, -{52,-33,38}, -{52,-33,39}, -{52,-33,40}, -{52,-33,41}, -{52,-33,42}, -{52,-33,43}, -{52,-33,44}, -{52,-33,45}, -{52,-33,46}, -{52,-33,47}, -{52,-33,48}, -{52,-33,49}, -{52,-33,50}, -{52,-33,51}, -{52,-33,52}, -{52,-33,53}, -{52,-33,54}, -{52,-33,55}, -{52,-32,-6}, -{52,-32,-5}, -{52,-32,-4}, -{52,-32,-3}, -{52,-32,-2}, -{52,-32,-1}, -{52,-32,0}, -{52,-32,1}, -{52,-32,2}, -{52,-32,3}, -{52,-32,4}, -{52,-32,5}, -{52,-32,6}, -{52,-32,7}, -{52,-32,8}, -{52,-32,9}, -{52,-32,10}, -{52,-32,11}, -{52,-32,12}, -{52,-32,13}, -{52,-32,14}, -{52,-32,15}, -{52,-32,16}, -{52,-32,17}, -{52,-32,18}, -{52,-32,19}, -{52,-32,20}, -{52,-32,21}, -{52,-32,22}, -{52,-32,23}, -{52,-32,24}, -{52,-32,25}, -{52,-32,26}, -{52,-32,27}, -{52,-32,28}, -{52,-32,29}, -{52,-32,30}, -{52,-32,31}, -{52,-32,32}, -{52,-32,33}, -{52,-32,34}, -{52,-32,35}, -{52,-32,36}, -{52,-32,37}, -{52,-32,38}, -{52,-32,39}, -{52,-32,40}, -{52,-32,41}, -{52,-32,42}, -{52,-32,43}, -{52,-32,44}, -{52,-32,45}, -{52,-32,46}, -{52,-32,47}, -{52,-32,48}, -{52,-32,49}, -{52,-32,50}, -{52,-32,51}, -{52,-32,52}, -{52,-32,53}, -{52,-32,54}, -{52,-32,55}, -{52,-31,-8}, -{52,-31,-7}, -{52,-31,-6}, -{52,-31,-5}, -{52,-31,-4}, -{52,-31,-3}, -{52,-31,-2}, -{52,-31,-1}, -{52,-31,0}, -{52,-31,1}, -{52,-31,2}, -{52,-31,3}, -{52,-31,4}, -{52,-31,5}, -{52,-31,6}, -{52,-31,7}, -{52,-31,8}, -{52,-31,9}, -{52,-31,10}, -{52,-31,11}, -{52,-31,12}, -{52,-31,13}, -{52,-31,14}, -{52,-31,15}, -{52,-31,16}, -{52,-31,17}, -{52,-31,18}, -{52,-31,19}, -{52,-31,20}, -{52,-31,21}, -{52,-31,22}, -{52,-31,23}, -{52,-31,24}, -{52,-31,25}, -{52,-31,26}, -{52,-31,27}, -{52,-31,28}, -{52,-31,29}, -{52,-31,30}, -{52,-31,31}, -{52,-31,32}, -{52,-31,33}, -{52,-31,34}, -{52,-31,35}, -{52,-31,36}, -{52,-31,37}, -{52,-31,38}, -{52,-31,39}, -{52,-31,40}, -{52,-31,41}, -{52,-31,42}, -{52,-31,43}, -{52,-31,44}, -{52,-31,45}, -{52,-31,46}, -{52,-31,47}, -{52,-31,48}, -{52,-31,49}, -{52,-31,50}, -{52,-31,51}, -{52,-31,52}, -{52,-31,53}, -{52,-31,54}, -{52,-31,55}, -{52,-30,-10}, -{52,-30,-9}, -{52,-30,-8}, -{52,-30,-7}, -{52,-30,-6}, -{52,-30,-5}, -{52,-30,-4}, -{52,-30,-3}, -{52,-30,-2}, -{52,-30,-1}, -{52,-30,0}, -{52,-30,1}, -{52,-30,2}, -{52,-30,3}, -{52,-30,4}, -{52,-30,5}, -{52,-30,6}, -{52,-30,7}, -{52,-30,8}, -{52,-30,9}, -{52,-30,10}, -{52,-30,11}, -{52,-30,12}, -{52,-30,13}, -{52,-30,14}, -{52,-30,15}, -{52,-30,16}, -{52,-30,17}, -{52,-30,18}, -{52,-30,19}, -{52,-30,20}, -{52,-30,21}, -{52,-30,22}, -{52,-30,23}, -{52,-30,24}, -{52,-30,25}, -{52,-30,26}, -{52,-30,27}, -{52,-30,28}, -{52,-30,29}, -{52,-30,30}, -{52,-30,31}, -{52,-30,32}, -{52,-30,33}, -{52,-30,34}, -{52,-30,35}, -{52,-30,36}, -{52,-30,37}, -{52,-30,38}, -{52,-30,39}, -{52,-30,40}, -{52,-30,41}, -{52,-30,42}, -{52,-30,43}, -{52,-30,44}, -{52,-30,45}, -{52,-30,46}, -{52,-30,47}, -{52,-30,48}, -{52,-30,49}, -{52,-30,50}, -{52,-30,51}, -{52,-30,52}, -{52,-30,53}, -{52,-30,54}, -{52,-30,55}, -{52,-29,-11}, -{52,-29,-10}, -{52,-29,-9}, -{52,-29,-8}, -{52,-29,-7}, -{52,-29,-6}, -{52,-29,-5}, -{52,-29,-4}, -{52,-29,-3}, -{52,-29,-2}, -{52,-29,-1}, -{52,-29,0}, -{52,-29,1}, -{52,-29,2}, -{52,-29,3}, -{52,-29,4}, -{52,-29,5}, -{52,-29,6}, -{52,-29,7}, -{52,-29,8}, -{52,-29,9}, -{52,-29,10}, -{52,-29,11}, -{52,-29,12}, -{52,-29,13}, -{52,-29,14}, -{52,-29,15}, -{52,-29,16}, -{52,-29,17}, -{52,-29,18}, -{52,-29,19}, -{52,-29,20}, -{52,-29,21}, -{52,-29,22}, -{52,-29,23}, -{52,-29,24}, -{52,-29,25}, -{52,-29,26}, -{52,-29,27}, -{52,-29,28}, -{52,-29,29}, -{52,-29,30}, -{52,-29,31}, -{52,-29,32}, -{52,-29,33}, -{52,-29,34}, -{52,-29,35}, -{52,-29,36}, -{52,-29,37}, -{52,-29,38}, -{52,-29,39}, -{52,-29,40}, -{52,-29,41}, -{52,-29,42}, -{52,-29,43}, -{52,-29,44}, -{52,-29,45}, -{52,-29,46}, -{52,-29,47}, -{52,-29,48}, -{52,-29,49}, -{52,-29,50}, -{52,-29,51}, -{52,-29,52}, -{52,-29,53}, -{52,-29,54}, -{52,-29,55}, -{52,-29,56}, -{52,-28,-13}, -{52,-28,-12}, -{52,-28,-11}, -{52,-28,-10}, -{52,-28,-9}, -{52,-28,-8}, -{52,-28,-7}, -{52,-28,-6}, -{52,-28,-5}, -{52,-28,-4}, -{52,-28,-3}, -{52,-28,-2}, -{52,-28,-1}, -{52,-28,0}, -{52,-28,1}, -{52,-28,2}, -{52,-28,3}, -{52,-28,4}, -{52,-28,5}, -{52,-28,6}, -{52,-28,7}, -{52,-28,8}, -{52,-28,9}, -{52,-28,10}, -{52,-28,11}, -{52,-28,12}, -{52,-28,13}, -{52,-28,14}, -{52,-28,15}, -{52,-28,16}, -{52,-28,17}, -{52,-28,18}, -{52,-28,19}, -{52,-28,20}, -{52,-28,21}, -{52,-28,22}, -{52,-28,23}, -{52,-28,24}, -{52,-28,25}, -{52,-28,26}, -{52,-28,27}, -{52,-28,28}, -{52,-28,29}, -{52,-28,30}, -{52,-28,31}, -{52,-28,32}, -{52,-28,33}, -{52,-28,34}, -{52,-28,35}, -{52,-28,36}, -{52,-28,37}, -{52,-28,38}, -{52,-28,39}, -{52,-28,40}, -{52,-28,41}, -{52,-28,42}, -{52,-28,43}, -{52,-28,44}, -{52,-28,45}, -{52,-28,46}, -{52,-28,47}, -{52,-28,48}, -{52,-28,49}, -{52,-28,50}, -{52,-28,51}, -{52,-28,52}, -{52,-28,53}, -{52,-28,54}, -{52,-28,55}, -{52,-28,56}, -{52,-27,-14}, -{52,-27,-13}, -{52,-27,-12}, -{52,-27,-11}, -{52,-27,-10}, -{52,-27,-9}, -{52,-27,-8}, -{52,-27,-7}, -{52,-27,-6}, -{52,-27,-5}, -{52,-27,-4}, -{52,-27,-3}, -{52,-27,-2}, -{52,-27,-1}, -{52,-27,0}, -{52,-27,1}, -{52,-27,2}, -{52,-27,3}, -{52,-27,4}, -{52,-27,5}, -{52,-27,6}, -{52,-27,7}, -{52,-27,8}, -{52,-27,9}, -{52,-27,10}, -{52,-27,11}, -{52,-27,12}, -{52,-27,13}, -{52,-27,14}, -{52,-27,15}, -{52,-27,16}, -{52,-27,17}, -{52,-27,18}, -{52,-27,19}, -{52,-27,20}, -{52,-27,21}, -{52,-27,22}, -{52,-27,23}, -{52,-27,24}, -{52,-27,25}, -{52,-27,26}, -{52,-27,27}, -{52,-27,28}, -{52,-27,29}, -{52,-27,30}, -{52,-27,31}, -{52,-27,32}, -{52,-27,33}, -{52,-27,34}, -{52,-27,35}, -{52,-27,36}, -{52,-27,37}, -{52,-27,38}, -{52,-27,39}, -{52,-27,40}, -{52,-27,41}, -{52,-27,42}, -{52,-27,43}, -{52,-27,44}, -{52,-27,45}, -{52,-27,46}, -{52,-27,47}, -{52,-27,48}, -{52,-27,49}, -{52,-27,50}, -{52,-27,51}, -{52,-27,52}, -{52,-27,53}, -{52,-27,54}, -{52,-27,55}, -{52,-27,56}, -{52,-26,-16}, -{52,-26,-15}, -{52,-26,-14}, -{52,-26,-13}, -{52,-26,-12}, -{52,-26,-11}, -{52,-26,-10}, -{52,-26,-9}, -{52,-26,-8}, -{52,-26,-7}, -{52,-26,-6}, -{52,-26,-5}, -{52,-26,-4}, -{52,-26,-3}, -{52,-26,-2}, -{52,-26,-1}, -{52,-26,0}, -{52,-26,1}, -{52,-26,2}, -{52,-26,3}, -{52,-26,4}, -{52,-26,5}, -{52,-26,6}, -{52,-26,7}, -{52,-26,8}, -{52,-26,9}, -{52,-26,10}, -{52,-26,11}, -{52,-26,12}, -{52,-26,13}, -{52,-26,14}, -{52,-26,15}, -{52,-26,16}, -{52,-26,17}, -{52,-26,18}, -{52,-26,19}, -{52,-26,20}, -{52,-26,21}, -{52,-26,22}, -{52,-26,23}, -{52,-26,24}, -{52,-26,25}, -{52,-26,26}, -{52,-26,27}, -{52,-26,28}, -{52,-26,29}, -{52,-26,30}, -{52,-26,31}, -{52,-26,32}, -{52,-26,33}, -{52,-26,34}, -{52,-26,35}, -{52,-26,36}, -{52,-26,37}, -{52,-26,38}, -{52,-26,39}, -{52,-26,40}, -{52,-26,41}, -{52,-26,42}, -{52,-26,43}, -{52,-26,44}, -{52,-26,45}, -{52,-26,46}, -{52,-26,47}, -{52,-26,48}, -{52,-26,49}, -{52,-26,50}, -{52,-26,51}, -{52,-26,52}, -{52,-26,53}, -{52,-26,54}, -{52,-26,55}, -{52,-26,56}, -{52,-25,-17}, -{52,-25,-16}, -{52,-25,-15}, -{52,-25,-14}, -{52,-25,-13}, -{52,-25,-12}, -{52,-25,-11}, -{52,-25,-10}, -{52,-25,-9}, -{52,-25,-8}, -{52,-25,-7}, -{52,-25,-6}, -{52,-25,-5}, -{52,-25,-4}, -{52,-25,-3}, -{52,-25,-2}, -{52,-25,-1}, -{52,-25,0}, -{52,-25,1}, -{52,-25,2}, -{52,-25,3}, -{52,-25,4}, -{52,-25,5}, -{52,-25,6}, -{52,-25,7}, -{52,-25,8}, -{52,-25,9}, -{52,-25,10}, -{52,-25,11}, -{52,-25,12}, -{52,-25,13}, -{52,-25,14}, -{52,-25,15}, -{52,-25,16}, -{52,-25,17}, -{52,-25,18}, -{52,-25,19}, -{52,-25,20}, -{52,-25,21}, -{52,-25,22}, -{52,-25,23}, -{52,-25,24}, -{52,-25,25}, -{52,-25,26}, -{52,-25,27}, -{52,-25,28}, -{52,-25,29}, -{52,-25,30}, -{52,-25,31}, -{52,-25,32}, -{52,-25,33}, -{52,-25,34}, -{52,-25,35}, -{52,-25,36}, -{52,-25,37}, -{52,-25,38}, -{52,-25,39}, -{52,-25,40}, -{52,-25,41}, -{52,-25,42}, -{52,-25,43}, -{52,-25,44}, -{52,-25,45}, -{52,-25,46}, -{52,-25,47}, -{52,-25,48}, -{52,-25,49}, -{52,-25,50}, -{52,-25,51}, -{52,-25,52}, -{52,-25,53}, -{52,-25,54}, -{52,-25,55}, -{52,-25,56}, -{52,-24,-18}, -{52,-24,-17}, -{52,-24,-16}, -{52,-24,-15}, -{52,-24,-14}, -{52,-24,-13}, -{52,-24,-12}, -{52,-24,-11}, -{52,-24,-10}, -{52,-24,-9}, -{52,-24,-8}, -{52,-24,-7}, -{52,-24,-6}, -{52,-24,-5}, -{52,-24,-4}, -{52,-24,-3}, -{52,-24,-2}, -{52,-24,-1}, -{52,-24,0}, -{52,-24,1}, -{52,-24,2}, -{52,-24,3}, -{52,-24,4}, -{52,-24,5}, -{52,-24,6}, -{52,-24,7}, -{52,-24,8}, -{52,-24,9}, -{52,-24,10}, -{52,-24,11}, -{52,-24,12}, -{52,-24,13}, -{52,-24,14}, -{52,-24,15}, -{52,-24,16}, -{52,-24,17}, -{52,-24,18}, -{52,-24,19}, -{52,-24,20}, -{52,-24,21}, -{52,-24,22}, -{52,-24,23}, -{52,-24,24}, -{52,-24,25}, -{52,-24,26}, -{52,-24,27}, -{52,-24,28}, -{52,-24,29}, -{52,-24,30}, -{52,-24,31}, -{52,-24,32}, -{52,-24,33}, -{52,-24,34}, -{52,-24,35}, -{52,-24,36}, -{52,-24,37}, -{52,-24,38}, -{52,-24,39}, -{52,-24,40}, -{52,-24,41}, -{52,-24,42}, -{52,-24,43}, -{52,-24,44}, -{52,-24,45}, -{52,-24,46}, -{52,-24,47}, -{52,-24,48}, -{52,-24,49}, -{52,-24,50}, -{52,-24,51}, -{52,-24,52}, -{52,-24,53}, -{52,-24,54}, -{52,-24,55}, -{52,-24,56}, -{52,-23,-20}, -{52,-23,-19}, -{52,-23,-18}, -{52,-23,-17}, -{52,-23,-16}, -{52,-23,-15}, -{52,-23,-14}, -{52,-23,-13}, -{52,-23,-12}, -{52,-23,-11}, -{52,-23,-10}, -{52,-23,-9}, -{52,-23,-8}, -{52,-23,-7}, -{52,-23,-6}, -{52,-23,-5}, -{52,-23,-4}, -{52,-23,-3}, -{52,-23,-2}, -{52,-23,-1}, -{52,-23,0}, -{52,-23,1}, -{52,-23,2}, -{52,-23,3}, -{52,-23,4}, -{52,-23,5}, -{52,-23,6}, -{52,-23,7}, -{52,-23,8}, -{52,-23,9}, -{52,-23,10}, -{52,-23,11}, -{52,-23,12}, -{52,-23,13}, -{52,-23,14}, -{52,-23,15}, -{52,-23,16}, -{52,-23,17}, -{52,-23,18}, -{52,-23,19}, -{52,-23,20}, -{52,-23,21}, -{52,-23,22}, -{52,-23,23}, -{52,-23,24}, -{52,-23,25}, -{52,-23,26}, -{52,-23,27}, -{52,-23,28}, -{52,-23,29}, -{52,-23,30}, -{52,-23,31}, -{52,-23,32}, -{52,-23,33}, -{52,-23,34}, -{52,-23,35}, -{52,-23,36}, -{52,-23,37}, -{52,-23,38}, -{52,-23,39}, -{52,-23,40}, -{52,-23,41}, -{52,-23,42}, -{52,-23,43}, -{52,-23,44}, -{52,-23,45}, -{52,-23,46}, -{52,-23,47}, -{52,-23,48}, -{52,-23,49}, -{52,-23,50}, -{52,-23,51}, -{52,-23,52}, -{52,-23,53}, -{52,-23,54}, -{52,-23,55}, -{52,-23,56}, -{52,-22,-21}, -{52,-22,-20}, -{52,-22,-19}, -{52,-22,-18}, -{52,-22,-17}, -{52,-22,-16}, -{52,-22,-15}, -{52,-22,-14}, -{52,-22,-13}, -{52,-22,-12}, -{52,-22,-11}, -{52,-22,-10}, -{52,-22,-9}, -{52,-22,-8}, -{52,-22,-7}, -{52,-22,-6}, -{52,-22,-5}, -{52,-22,-4}, -{52,-22,-3}, -{52,-22,-2}, -{52,-22,-1}, -{52,-22,0}, -{52,-22,1}, -{52,-22,2}, -{52,-22,3}, -{52,-22,4}, -{52,-22,5}, -{52,-22,6}, -{52,-22,7}, -{52,-22,8}, -{52,-22,9}, -{52,-22,10}, -{52,-22,11}, -{52,-22,12}, -{52,-22,13}, -{52,-22,14}, -{52,-22,15}, -{52,-22,16}, -{52,-22,17}, -{52,-22,18}, -{52,-22,19}, -{52,-22,20}, -{52,-22,21}, -{52,-22,22}, -{52,-22,23}, -{52,-22,24}, -{52,-22,25}, -{52,-22,26}, -{52,-22,27}, -{52,-22,28}, -{52,-22,29}, -{52,-22,30}, -{52,-22,31}, -{52,-22,32}, -{52,-22,33}, -{52,-22,34}, -{52,-22,35}, -{52,-22,36}, -{52,-22,37}, -{52,-22,38}, -{52,-22,39}, -{52,-22,40}, -{52,-22,41}, -{52,-22,42}, -{52,-22,43}, -{52,-22,44}, -{52,-22,45}, -{52,-22,46}, -{52,-22,47}, -{52,-22,48}, -{52,-22,49}, -{52,-22,50}, -{52,-22,51}, -{52,-22,52}, -{52,-22,53}, -{52,-22,54}, -{52,-22,55}, -{52,-22,56}, -{52,-21,-23}, -{52,-21,-22}, -{52,-21,-21}, -{52,-21,-20}, -{52,-21,-19}, -{52,-21,-18}, -{52,-21,-17}, -{52,-21,-16}, -{52,-21,-15}, -{52,-21,-14}, -{52,-21,-13}, -{52,-21,-12}, -{52,-21,-11}, -{52,-21,-10}, -{52,-21,-9}, -{52,-21,-8}, -{52,-21,-7}, -{52,-21,-6}, -{52,-21,-5}, -{52,-21,-4}, -{52,-21,-3}, -{52,-21,-2}, -{52,-21,-1}, -{52,-21,0}, -{52,-21,1}, -{52,-21,2}, -{52,-21,3}, -{52,-21,4}, -{52,-21,5}, -{52,-21,6}, -{52,-21,7}, -{52,-21,8}, -{52,-21,9}, -{52,-21,10}, -{52,-21,11}, -{52,-21,12}, -{52,-21,13}, -{52,-21,14}, -{52,-21,15}, -{52,-21,16}, -{52,-21,17}, -{52,-21,18}, -{52,-21,19}, -{52,-21,20}, -{52,-21,21}, -{52,-21,22}, -{52,-21,23}, -{52,-21,24}, -{52,-21,25}, -{52,-21,26}, -{52,-21,27}, -{52,-21,28}, -{52,-21,29}, -{52,-21,30}, -{52,-21,31}, -{52,-21,32}, -{52,-21,33}, -{52,-21,34}, -{52,-21,35}, -{52,-21,36}, -{52,-21,37}, -{52,-21,38}, -{52,-21,39}, -{52,-21,40}, -{52,-21,41}, -{52,-21,42}, -{52,-21,43}, -{52,-21,44}, -{52,-21,45}, -{52,-21,46}, -{52,-21,47}, -{52,-21,48}, -{52,-21,49}, -{52,-21,50}, -{52,-21,51}, -{52,-21,52}, -{52,-21,53}, -{52,-21,54}, -{52,-21,55}, -{52,-21,56}, -{52,-20,-24}, -{52,-20,-23}, -{52,-20,-22}, -{52,-20,-21}, -{52,-20,-20}, -{52,-20,-19}, -{52,-20,-18}, -{52,-20,-17}, -{52,-20,-16}, -{52,-20,-15}, -{52,-20,-14}, -{52,-20,-13}, -{52,-20,-12}, -{52,-20,-11}, -{52,-20,-10}, -{52,-20,-9}, -{52,-20,-8}, -{52,-20,-7}, -{52,-20,-6}, -{52,-20,-5}, -{52,-20,-4}, -{52,-20,-3}, -{52,-20,-2}, -{52,-20,-1}, -{52,-20,0}, -{52,-20,1}, -{52,-20,2}, -{52,-20,3}, -{52,-20,4}, -{52,-20,5}, -{52,-20,6}, -{52,-20,7}, -{52,-20,8}, -{52,-20,9}, -{52,-20,10}, -{52,-20,11}, -{52,-20,12}, -{52,-20,13}, -{52,-20,14}, -{52,-20,15}, -{52,-20,16}, -{52,-20,17}, -{52,-20,18}, -{52,-20,19}, -{52,-20,20}, -{52,-20,21}, -{52,-20,22}, -{52,-20,23}, -{52,-20,24}, -{52,-20,25}, -{52,-20,26}, -{52,-20,27}, -{52,-20,28}, -{52,-20,29}, -{52,-20,30}, -{52,-20,31}, -{52,-20,32}, -{52,-20,33}, -{52,-20,34}, -{52,-20,35}, -{52,-20,36}, -{52,-20,37}, -{52,-20,38}, -{52,-20,39}, -{52,-20,40}, -{52,-20,41}, -{52,-20,42}, -{52,-20,43}, -{52,-20,44}, -{52,-20,45}, -{52,-20,46}, -{52,-20,47}, -{52,-20,48}, -{52,-20,49}, -{52,-20,50}, -{52,-20,51}, -{52,-20,52}, -{52,-20,53}, -{52,-20,54}, -{52,-20,55}, -{52,-20,56}, -{52,-19,-25}, -{52,-19,-24}, -{52,-19,-23}, -{52,-19,-22}, -{52,-19,-21}, -{52,-19,-20}, -{52,-19,-19}, -{52,-19,-18}, -{52,-19,-17}, -{52,-19,-16}, -{52,-19,-15}, -{52,-19,-14}, -{52,-19,-13}, -{52,-19,-12}, -{52,-19,-11}, -{52,-19,-10}, -{52,-19,-9}, -{52,-19,-8}, -{52,-19,-7}, -{52,-19,-6}, -{52,-19,-5}, -{52,-19,-4}, -{52,-19,-3}, -{52,-19,-2}, -{52,-19,-1}, -{52,-19,0}, -{52,-19,1}, -{52,-19,2}, -{52,-19,3}, -{52,-19,4}, -{52,-19,5}, -{52,-19,6}, -{52,-19,7}, -{52,-19,8}, -{52,-19,9}, -{52,-19,10}, -{52,-19,11}, -{52,-19,12}, -{52,-19,13}, -{52,-19,14}, -{52,-19,15}, -{52,-19,16}, -{52,-19,17}, -{52,-19,18}, -{52,-19,19}, -{52,-19,20}, -{52,-19,21}, -{52,-19,22}, -{52,-19,23}, -{52,-19,24}, -{52,-19,25}, -{52,-19,26}, -{52,-19,27}, -{52,-19,28}, -{52,-19,29}, -{52,-19,30}, -{52,-19,31}, -{52,-19,32}, -{52,-19,33}, -{52,-19,34}, -{52,-19,35}, -{52,-19,36}, -{52,-19,37}, -{52,-19,38}, -{52,-19,39}, -{52,-19,40}, -{52,-19,41}, -{52,-19,42}, -{52,-19,43}, -{52,-19,44}, -{52,-19,45}, -{52,-19,46}, -{52,-19,47}, -{52,-19,48}, -{52,-19,49}, -{52,-19,50}, -{52,-19,51}, -{52,-19,52}, -{52,-19,53}, -{52,-19,54}, -{52,-19,55}, -{52,-19,56}, -{52,-18,-27}, -{52,-18,-26}, -{52,-18,-25}, -{52,-18,-24}, -{52,-18,-23}, -{52,-18,-22}, -{52,-18,-21}, -{52,-18,-20}, -{52,-18,-19}, -{52,-18,-18}, -{52,-18,-17}, -{52,-18,-16}, -{52,-18,-15}, -{52,-18,-14}, -{52,-18,-13}, -{52,-18,-12}, -{52,-18,-11}, -{52,-18,-10}, -{52,-18,-9}, -{52,-18,-8}, -{52,-18,-7}, -{52,-18,-6}, -{52,-18,-5}, -{52,-18,-4}, -{52,-18,-3}, -{52,-18,-2}, -{52,-18,-1}, -{52,-18,0}, -{52,-18,1}, -{52,-18,2}, -{52,-18,3}, -{52,-18,4}, -{52,-18,5}, -{52,-18,6}, -{52,-18,7}, -{52,-18,8}, -{52,-18,9}, -{52,-18,10}, -{52,-18,11}, -{52,-18,12}, -{52,-18,13}, -{52,-18,14}, -{52,-18,15}, -{52,-18,16}, -{52,-18,17}, -{52,-18,18}, -{52,-18,19}, -{52,-18,20}, -{52,-18,21}, -{52,-18,22}, -{52,-18,23}, -{52,-18,24}, -{52,-18,25}, -{52,-18,26}, -{52,-18,27}, -{52,-18,28}, -{52,-18,29}, -{52,-18,30}, -{52,-18,31}, -{52,-18,32}, -{52,-18,33}, -{52,-18,34}, -{52,-18,35}, -{52,-18,36}, -{52,-18,37}, -{52,-18,38}, -{52,-18,39}, -{52,-18,40}, -{52,-18,41}, -{52,-18,42}, -{52,-18,43}, -{52,-18,44}, -{52,-18,45}, -{52,-18,46}, -{52,-18,47}, -{52,-18,48}, -{52,-18,49}, -{52,-18,50}, -{52,-18,51}, -{52,-18,52}, -{52,-18,53}, -{52,-18,54}, -{52,-18,55}, -{52,-18,56}, -{52,-17,-28}, -{52,-17,-27}, -{52,-17,-26}, -{52,-17,-25}, -{52,-17,-24}, -{52,-17,-23}, -{52,-17,-22}, -{52,-17,-21}, -{52,-17,-20}, -{52,-17,-19}, -{52,-17,-18}, -{52,-17,-17}, -{52,-17,-16}, -{52,-17,-15}, -{52,-17,-14}, -{52,-17,-13}, -{52,-17,-12}, -{52,-17,-11}, -{52,-17,-10}, -{52,-17,-9}, -{52,-17,-8}, -{52,-17,-7}, -{52,-17,-6}, -{52,-17,-5}, -{52,-17,-4}, -{52,-17,-3}, -{52,-17,-2}, -{52,-17,-1}, -{52,-17,0}, -{52,-17,1}, -{52,-17,2}, -{52,-17,3}, -{52,-17,4}, -{52,-17,5}, -{52,-17,6}, -{52,-17,7}, -{52,-17,8}, -{52,-17,9}, -{52,-17,10}, -{52,-17,11}, -{52,-17,12}, -{52,-17,13}, -{52,-17,14}, -{52,-17,15}, -{52,-17,16}, -{52,-17,17}, -{52,-17,18}, -{52,-17,19}, -{52,-17,20}, -{52,-17,21}, -{52,-17,22}, -{52,-17,23}, -{52,-17,24}, -{52,-17,25}, -{52,-17,26}, -{52,-17,27}, -{52,-17,28}, -{52,-17,29}, -{52,-17,30}, -{52,-17,31}, -{52,-17,32}, -{52,-17,33}, -{52,-17,34}, -{52,-17,35}, -{52,-17,36}, -{52,-17,37}, -{52,-17,38}, -{52,-17,39}, -{52,-17,40}, -{52,-17,41}, -{52,-17,42}, -{52,-17,43}, -{52,-17,44}, -{52,-17,45}, -{52,-17,46}, -{52,-17,47}, -{52,-17,48}, -{52,-17,49}, -{52,-17,50}, -{52,-17,51}, -{52,-17,52}, -{52,-17,53}, -{52,-17,54}, -{52,-17,55}, -{52,-17,56}, -{52,-16,-29}, -{52,-16,-28}, -{52,-16,-27}, -{52,-16,-26}, -{52,-16,-25}, -{52,-16,-24}, -{52,-16,-23}, -{52,-16,-22}, -{52,-16,-21}, -{52,-16,-20}, -{52,-16,-19}, -{52,-16,-18}, -{52,-16,-17}, -{52,-16,-16}, -{52,-16,-15}, -{52,-16,-14}, -{52,-16,-13}, -{52,-16,-12}, -{52,-16,-11}, -{52,-16,-10}, -{52,-16,-9}, -{52,-16,-8}, -{52,-16,-7}, -{52,-16,-6}, -{52,-16,-5}, -{52,-16,-4}, -{52,-16,-3}, -{52,-16,-2}, -{52,-16,-1}, -{52,-16,0}, -{52,-16,1}, -{52,-16,2}, -{52,-16,3}, -{52,-16,4}, -{52,-16,5}, -{52,-16,6}, -{52,-16,7}, -{52,-16,8}, -{52,-16,9}, -{52,-16,10}, -{52,-16,11}, -{52,-16,12}, -{52,-16,13}, -{52,-16,14}, -{52,-16,15}, -{52,-16,16}, -{52,-16,17}, -{52,-16,18}, -{52,-16,19}, -{52,-16,20}, -{52,-16,21}, -{52,-16,22}, -{52,-16,23}, -{52,-16,24}, -{52,-16,25}, -{52,-16,26}, -{52,-16,27}, -{52,-16,28}, -{52,-16,29}, -{52,-16,30}, -{52,-16,31}, -{52,-16,32}, -{52,-16,33}, -{52,-16,34}, -{52,-16,35}, -{52,-16,36}, -{52,-16,37}, -{52,-16,38}, -{52,-16,39}, -{52,-16,40}, -{52,-16,41}, -{52,-16,42}, -{52,-16,43}, -{52,-16,44}, -{52,-16,45}, -{52,-16,46}, -{52,-16,47}, -{52,-16,48}, -{52,-16,49}, -{52,-16,50}, -{52,-16,51}, -{52,-16,52}, -{52,-16,53}, -{52,-16,54}, -{52,-16,55}, -{52,-16,56}, -{52,-15,-31}, -{52,-15,-30}, -{52,-15,-29}, -{52,-15,-28}, -{52,-15,-27}, -{52,-15,-26}, -{52,-15,-25}, -{52,-15,-24}, -{52,-15,-23}, -{52,-15,-22}, -{52,-15,-21}, -{52,-15,-20}, -{52,-15,-19}, -{52,-15,-18}, -{52,-15,-17}, -{52,-15,-16}, -{52,-15,-15}, -{52,-15,-14}, -{52,-15,-13}, -{52,-15,-12}, -{52,-15,-11}, -{52,-15,-10}, -{52,-15,-9}, -{52,-15,-8}, -{52,-15,-7}, -{52,-15,-6}, -{52,-15,-5}, -{52,-15,-4}, -{52,-15,-3}, -{52,-15,-2}, -{52,-15,-1}, -{52,-15,0}, -{52,-15,1}, -{52,-15,2}, -{52,-15,3}, -{52,-15,4}, -{52,-15,5}, -{52,-15,6}, -{52,-15,7}, -{52,-15,8}, -{52,-15,9}, -{52,-15,10}, -{52,-15,11}, -{52,-15,12}, -{52,-15,13}, -{52,-15,14}, -{52,-15,15}, -{52,-15,16}, -{52,-15,17}, -{52,-15,18}, -{52,-15,19}, -{52,-15,20}, -{52,-15,21}, -{52,-15,22}, -{52,-15,23}, -{52,-15,24}, -{52,-15,25}, -{52,-15,26}, -{52,-15,27}, -{52,-15,28}, -{52,-15,29}, -{52,-15,30}, -{52,-15,31}, -{52,-15,32}, -{52,-15,33}, -{52,-15,34}, -{52,-15,35}, -{52,-15,36}, -{52,-15,37}, -{52,-15,38}, -{52,-15,39}, -{52,-15,40}, -{52,-15,41}, -{52,-15,42}, -{52,-15,43}, -{52,-15,44}, -{52,-15,45}, -{52,-15,46}, -{52,-15,47}, -{52,-15,48}, -{52,-15,49}, -{52,-15,50}, -{52,-15,51}, -{52,-15,52}, -{52,-15,53}, -{52,-15,54}, -{52,-15,55}, -{52,-15,56}, -{52,-14,-32}, -{52,-14,-31}, -{52,-14,-30}, -{52,-14,-29}, -{52,-14,-28}, -{52,-14,-27}, -{52,-14,-26}, -{52,-14,-25}, -{52,-14,-24}, -{52,-14,-23}, -{52,-14,-22}, -{52,-14,-21}, -{52,-14,-20}, -{52,-14,-19}, -{52,-14,-18}, -{52,-14,-17}, -{52,-14,-16}, -{52,-14,-15}, -{52,-14,-14}, -{52,-14,-13}, -{52,-14,-12}, -{52,-14,-11}, -{52,-14,-10}, -{52,-14,-9}, -{52,-14,-8}, -{52,-14,-7}, -{52,-14,-6}, -{52,-14,-5}, -{52,-14,-4}, -{52,-14,-3}, -{52,-14,-2}, -{52,-14,-1}, -{52,-14,0}, -{52,-14,1}, -{52,-14,2}, -{52,-14,3}, -{52,-14,4}, -{52,-14,5}, -{52,-14,6}, -{52,-14,7}, -{52,-14,8}, -{52,-14,9}, -{52,-14,10}, -{52,-14,11}, -{52,-14,12}, -{52,-14,13}, -{52,-14,14}, -{52,-14,15}, -{52,-14,16}, -{52,-14,17}, -{52,-14,18}, -{52,-14,19}, -{52,-14,20}, -{52,-14,21}, -{52,-14,22}, -{52,-14,23}, -{52,-14,24}, -{52,-14,25}, -{52,-14,26}, -{52,-14,27}, -{52,-14,28}, -{52,-14,29}, -{52,-14,30}, -{52,-14,31}, -{52,-14,32}, -{52,-14,33}, -{52,-14,34}, -{52,-14,35}, -{52,-14,36}, -{52,-14,37}, -{52,-14,38}, -{52,-14,39}, -{52,-14,40}, -{52,-14,41}, -{52,-14,42}, -{52,-14,43}, -{52,-14,44}, -{52,-14,45}, -{52,-14,46}, -{52,-14,47}, -{52,-14,48}, -{52,-14,49}, -{52,-14,50}, -{52,-14,51}, -{52,-14,52}, -{52,-14,53}, -{52,-14,54}, -{52,-14,55}, -{52,-14,56}, -{52,-13,-33}, -{52,-13,-32}, -{52,-13,-31}, -{52,-13,-30}, -{52,-13,-29}, -{52,-13,-28}, -{52,-13,-27}, -{52,-13,-26}, -{52,-13,-25}, -{52,-13,-24}, -{52,-13,-23}, -{52,-13,-22}, -{52,-13,-21}, -{52,-13,-20}, -{52,-13,-19}, -{52,-13,-18}, -{52,-13,-17}, -{52,-13,-16}, -{52,-13,-15}, -{52,-13,-14}, -{52,-13,-13}, -{52,-13,-12}, -{52,-13,-11}, -{52,-13,-10}, -{52,-13,-9}, -{52,-13,-8}, -{52,-13,-7}, -{52,-13,-6}, -{52,-13,-5}, -{52,-13,-4}, -{52,-13,-3}, -{52,-13,-2}, -{52,-13,-1}, -{52,-13,0}, -{52,-13,1}, -{52,-13,2}, -{52,-13,3}, -{52,-13,4}, -{52,-13,5}, -{52,-13,6}, -{52,-13,7}, -{52,-13,8}, -{52,-13,9}, -{52,-13,10}, -{52,-13,11}, -{52,-13,12}, -{52,-13,13}, -{52,-13,14}, -{52,-13,15}, -{52,-13,16}, -{52,-13,17}, -{52,-13,18}, -{52,-13,19}, -{52,-13,20}, -{52,-13,21}, -{52,-13,22}, -{52,-13,23}, -{52,-13,24}, -{52,-13,25}, -{52,-13,26}, -{52,-13,27}, -{52,-13,28}, -{52,-13,29}, -{52,-13,30}, -{52,-13,31}, -{52,-13,32}, -{52,-13,33}, -{52,-13,34}, -{52,-13,35}, -{52,-13,36}, -{52,-13,37}, -{52,-13,38}, -{52,-13,39}, -{52,-13,40}, -{52,-13,41}, -{52,-13,42}, -{52,-13,43}, -{52,-13,44}, -{52,-13,45}, -{52,-13,46}, -{52,-13,47}, -{52,-13,48}, -{52,-13,49}, -{52,-13,50}, -{52,-13,51}, -{52,-13,52}, -{52,-13,53}, -{52,-13,54}, -{52,-13,55}, -{52,-13,56}, -{52,-12,-34}, -{52,-12,-33}, -{52,-12,-32}, -{52,-12,-31}, -{52,-12,-30}, -{52,-12,-29}, -{52,-12,-28}, -{52,-12,-27}, -{52,-12,-26}, -{52,-12,-25}, -{52,-12,-24}, -{52,-12,-23}, -{52,-12,-22}, -{52,-12,-21}, -{52,-12,-20}, -{52,-12,-19}, -{52,-12,-18}, -{52,-12,-17}, -{52,-12,-16}, -{52,-12,-15}, -{52,-12,-14}, -{52,-12,-13}, -{52,-12,-12}, -{52,-12,-11}, -{52,-12,-10}, -{52,-12,-9}, -{52,-12,-8}, -{52,-12,-7}, -{52,-12,-6}, -{52,-12,-5}, -{52,-12,-4}, -{52,-12,-3}, -{52,-12,-2}, -{52,-12,-1}, -{52,-12,0}, -{52,-12,1}, -{52,-12,2}, -{52,-12,3}, -{52,-12,4}, -{52,-12,5}, -{52,-12,6}, -{52,-12,7}, -{52,-12,8}, -{52,-12,9}, -{52,-12,10}, -{52,-12,11}, -{52,-12,12}, -{52,-12,13}, -{52,-12,14}, -{52,-12,15}, -{52,-12,16}, -{52,-12,17}, -{52,-12,18}, -{52,-12,19}, -{52,-12,20}, -{52,-12,21}, -{52,-12,22}, -{52,-12,23}, -{52,-12,24}, -{52,-12,25}, -{52,-12,26}, -{52,-12,27}, -{52,-12,28}, -{52,-12,29}, -{52,-12,30}, -{52,-12,31}, -{52,-12,32}, -{52,-12,33}, -{52,-12,34}, -{52,-12,35}, -{52,-12,36}, -{52,-12,37}, -{52,-12,38}, -{52,-12,39}, -{52,-12,40}, -{52,-12,41}, -{52,-12,42}, -{52,-12,43}, -{52,-12,44}, -{52,-12,45}, -{52,-12,46}, -{52,-12,47}, -{52,-12,48}, -{52,-12,49}, -{52,-12,50}, -{52,-12,51}, -{52,-12,52}, -{52,-12,53}, -{52,-12,54}, -{52,-12,55}, -{52,-12,56}, -{52,-12,57}, -{52,-11,-36}, -{52,-11,-35}, -{52,-11,-34}, -{52,-11,-33}, -{52,-11,-32}, -{52,-11,-31}, -{52,-11,-30}, -{52,-11,-29}, -{52,-11,-28}, -{52,-11,-27}, -{52,-11,-26}, -{52,-11,-25}, -{52,-11,-24}, -{52,-11,-23}, -{52,-11,-22}, -{52,-11,-21}, -{52,-11,-20}, -{52,-11,-19}, -{52,-11,-18}, -{52,-11,-17}, -{52,-11,-16}, -{52,-11,-15}, -{52,-11,-14}, -{52,-11,-13}, -{52,-11,-12}, -{52,-11,-11}, -{52,-11,-10}, -{52,-11,-9}, -{52,-11,-8}, -{52,-11,-7}, -{52,-11,-6}, -{52,-11,-5}, -{52,-11,-4}, -{52,-11,-3}, -{52,-11,-2}, -{52,-11,-1}, -{52,-11,0}, -{52,-11,1}, -{52,-11,2}, -{52,-11,3}, -{52,-11,4}, -{52,-11,5}, -{52,-11,6}, -{52,-11,7}, -{52,-11,8}, -{52,-11,9}, -{52,-11,10}, -{52,-11,11}, -{52,-11,12}, -{52,-11,13}, -{52,-11,14}, -{52,-11,15}, -{52,-11,16}, -{52,-11,17}, -{52,-11,18}, -{52,-11,19}, -{52,-11,20}, -{52,-11,21}, -{52,-11,22}, -{52,-11,23}, -{52,-11,24}, -{52,-11,25}, -{52,-11,26}, -{52,-11,27}, -{52,-11,28}, -{52,-11,29}, -{52,-11,30}, -{52,-11,31}, -{52,-11,32}, -{52,-11,33}, -{52,-11,34}, -{52,-11,35}, -{52,-11,36}, -{52,-11,37}, -{52,-11,38}, -{52,-11,39}, -{52,-11,40}, -{52,-11,41}, -{52,-11,42}, -{52,-11,43}, -{52,-11,44}, -{52,-11,45}, -{52,-11,46}, -{52,-11,47}, -{52,-11,48}, -{52,-11,49}, -{52,-11,50}, -{52,-11,51}, -{52,-11,52}, -{52,-11,53}, -{52,-11,54}, -{52,-11,55}, -{52,-11,56}, -{52,-11,57}, -{52,-10,-37}, -{52,-10,-36}, -{52,-10,-35}, -{52,-10,-34}, -{52,-10,-33}, -{52,-10,-32}, -{52,-10,-31}, -{52,-10,-30}, -{52,-10,-29}, -{52,-10,-28}, -{52,-10,-27}, -{52,-10,-26}, -{52,-10,-25}, -{52,-10,-24}, -{52,-10,-23}, -{52,-10,-22}, -{52,-10,-21}, -{52,-10,-20}, -{52,-10,-19}, -{52,-10,-18}, -{52,-10,-17}, -{52,-10,-16}, -{52,-10,-15}, -{52,-10,-14}, -{52,-10,-13}, -{52,-10,-12}, -{52,-10,-11}, -{52,-10,-10}, -{52,-10,-9}, -{52,-10,-8}, -{52,-10,-7}, -{52,-10,-6}, -{52,-10,-5}, -{52,-10,-4}, -{52,-10,-3}, -{52,-10,-2}, -{52,-10,-1}, -{52,-10,0}, -{52,-10,1}, -{52,-10,2}, -{52,-10,3}, -{52,-10,4}, -{52,-10,5}, -{52,-10,6}, -{52,-10,7}, -{52,-10,8}, -{52,-10,9}, -{52,-10,10}, -{52,-10,11}, -{52,-10,12}, -{52,-10,13}, -{52,-10,14}, -{52,-10,15}, -{52,-10,16}, -{52,-10,17}, -{52,-10,18}, -{52,-10,19}, -{52,-10,20}, -{52,-10,21}, -{52,-10,22}, -{52,-10,23}, -{52,-10,24}, -{52,-10,25}, -{52,-10,26}, -{52,-10,27}, -{52,-10,28}, -{52,-10,29}, -{52,-10,30}, -{52,-10,31}, -{52,-10,32}, -{52,-10,33}, -{52,-10,34}, -{52,-10,35}, -{52,-10,36}, -{52,-10,37}, -{52,-10,38}, -{52,-10,39}, -{52,-10,40}, -{52,-10,41}, -{52,-10,42}, -{52,-10,43}, -{52,-10,44}, -{52,-10,45}, -{52,-10,46}, -{52,-10,47}, -{52,-10,48}, -{52,-10,49}, -{52,-10,50}, -{52,-10,51}, -{52,-10,52}, -{52,-10,53}, -{52,-10,54}, -{52,-10,55}, -{52,-10,56}, -{52,-10,57}, -{52,-9,-38}, -{52,-9,-37}, -{52,-9,-36}, -{52,-9,-35}, -{52,-9,-34}, -{52,-9,-33}, -{52,-9,-32}, -{52,-9,-31}, -{52,-9,-30}, -{52,-9,-29}, -{52,-9,-28}, -{52,-9,-27}, -{52,-9,-26}, -{52,-9,-25}, -{52,-9,-24}, -{52,-9,-23}, -{52,-9,-22}, -{52,-9,-21}, -{52,-9,-20}, -{52,-9,-19}, -{52,-9,-18}, -{52,-9,-17}, -{52,-9,-16}, -{52,-9,-15}, -{52,-9,-14}, -{52,-9,-13}, -{52,-9,-12}, -{52,-9,-11}, -{52,-9,-10}, -{52,-9,-9}, -{52,-9,-8}, -{52,-9,-7}, -{52,-9,-6}, -{52,-9,-5}, -{52,-9,-4}, -{52,-9,-3}, -{52,-9,-2}, -{52,-9,-1}, -{52,-9,0}, -{52,-9,1}, -{52,-9,2}, -{52,-9,3}, -{52,-9,4}, -{52,-9,5}, -{52,-9,6}, -{52,-9,7}, -{52,-9,8}, -{52,-9,9}, -{52,-9,10}, -{52,-9,11}, -{52,-9,12}, -{52,-9,13}, -{52,-9,14}, -{52,-9,15}, -{52,-9,16}, -{52,-9,17}, -{52,-9,18}, -{52,-9,19}, -{52,-9,20}, -{52,-9,21}, -{52,-9,22}, -{52,-9,23}, -{52,-9,24}, -{52,-9,25}, -{52,-9,26}, -{52,-9,27}, -{52,-9,28}, -{52,-9,29}, -{52,-9,30}, -{52,-9,31}, -{52,-9,32}, -{52,-9,33}, -{52,-9,34}, -{52,-9,35}, -{52,-9,36}, -{52,-9,37}, -{52,-9,38}, -{52,-9,39}, -{52,-9,40}, -{52,-9,41}, -{52,-9,42}, -{52,-9,43}, -{52,-9,44}, -{52,-9,45}, -{52,-9,46}, -{52,-9,47}, -{52,-9,48}, -{52,-9,49}, -{52,-9,50}, -{52,-9,51}, -{52,-9,52}, -{52,-9,53}, -{52,-9,54}, -{52,-9,55}, -{52,-9,56}, -{52,-9,57}, -{52,-8,-39}, -{52,-8,-38}, -{52,-8,-37}, -{52,-8,-36}, -{52,-8,-35}, -{52,-8,-34}, -{52,-8,-33}, -{52,-8,-32}, -{52,-8,-31}, -{52,-8,-30}, -{52,-8,-29}, -{52,-8,-28}, -{52,-8,-27}, -{52,-8,-26}, -{52,-8,-25}, -{52,-8,-24}, -{52,-8,-23}, -{52,-8,-22}, -{52,-8,-21}, -{52,-8,-20}, -{52,-8,-19}, -{52,-8,-18}, -{52,-8,-17}, -{52,-8,-16}, -{52,-8,-15}, -{52,-8,-14}, -{52,-8,-13}, -{52,-8,-12}, -{52,-8,-11}, -{52,-8,-10}, -{52,-8,-9}, -{52,-8,-8}, -{52,-8,-7}, -{52,-8,-6}, -{52,-8,-5}, -{52,-8,-4}, -{52,-8,-3}, -{52,-8,-2}, -{52,-8,-1}, -{52,-8,0}, -{52,-8,1}, -{52,-8,2}, -{52,-8,3}, -{52,-8,4}, -{52,-8,5}, -{52,-8,6}, -{52,-8,7}, -{52,-8,8}, -{52,-8,9}, -{52,-8,10}, -{52,-8,11}, -{52,-8,12}, -{52,-8,13}, -{52,-8,14}, -{52,-8,15}, -{52,-8,16}, -{52,-8,17}, -{52,-8,18}, -{52,-8,19}, -{52,-8,20}, -{52,-8,21}, -{52,-8,22}, -{52,-8,23}, -{52,-8,24}, -{52,-8,25}, -{52,-8,26}, -{52,-8,27}, -{52,-8,28}, -{52,-8,29}, -{52,-8,30}, -{52,-8,31}, -{52,-8,32}, -{52,-8,33}, -{52,-8,34}, -{52,-8,35}, -{52,-8,36}, -{52,-8,37}, -{52,-8,38}, -{52,-8,39}, -{52,-8,40}, -{52,-8,41}, -{52,-8,42}, -{52,-8,43}, -{52,-8,44}, -{52,-8,45}, -{52,-8,46}, -{52,-8,47}, -{52,-8,48}, -{52,-8,49}, -{52,-8,50}, -{52,-8,51}, -{52,-8,52}, -{52,-8,53}, -{52,-8,54}, -{52,-8,55}, -{52,-8,56}, -{52,-8,57}, -{52,-7,-40}, -{52,-7,-39}, -{52,-7,-38}, -{52,-7,-37}, -{52,-7,-36}, -{52,-7,-35}, -{52,-7,-34}, -{52,-7,-33}, -{52,-7,-32}, -{52,-7,-31}, -{52,-7,-30}, -{52,-7,-29}, -{52,-7,-28}, -{52,-7,-27}, -{52,-7,-26}, -{52,-7,-25}, -{52,-7,-24}, -{52,-7,-23}, -{52,-7,-22}, -{52,-7,-21}, -{52,-7,-20}, -{52,-7,-19}, -{52,-7,-18}, -{52,-7,-17}, -{52,-7,-16}, -{52,-7,-15}, -{52,-7,-14}, -{52,-7,-13}, -{52,-7,-12}, -{52,-7,-11}, -{52,-7,-10}, -{52,-7,-9}, -{52,-7,-8}, -{52,-7,-7}, -{52,-7,-6}, -{52,-7,-5}, -{52,-7,-4}, -{52,-7,-3}, -{52,-7,-2}, -{52,-7,-1}, -{52,-7,0}, -{52,-7,1}, -{52,-7,2}, -{52,-7,3}, -{52,-7,4}, -{52,-7,5}, -{52,-7,6}, -{52,-7,7}, -{52,-7,8}, -{52,-7,9}, -{52,-7,10}, -{52,-7,11}, -{52,-7,12}, -{52,-7,13}, -{52,-7,14}, -{52,-7,15}, -{52,-7,16}, -{52,-7,17}, -{52,-7,18}, -{52,-7,19}, -{52,-7,20}, -{52,-7,21}, -{52,-7,22}, -{52,-7,23}, -{52,-7,24}, -{52,-7,25}, -{52,-7,26}, -{52,-7,27}, -{52,-7,28}, -{52,-7,29}, -{52,-7,30}, -{52,-7,31}, -{52,-7,32}, -{52,-7,33}, -{52,-7,34}, -{52,-7,35}, -{52,-7,36}, -{52,-7,37}, -{52,-7,38}, -{52,-7,39}, -{52,-7,40}, -{52,-7,41}, -{52,-7,42}, -{52,-7,43}, -{52,-7,44}, -{52,-7,45}, -{52,-7,46}, -{52,-7,47}, -{52,-7,48}, -{52,-7,49}, -{52,-7,50}, -{52,-7,51}, -{52,-7,52}, -{52,-7,53}, -{52,-7,54}, -{52,-7,55}, -{52,-7,56}, -{52,-7,57}, -{52,-6,-42}, -{52,-6,-41}, -{52,-6,-40}, -{52,-6,-39}, -{52,-6,-38}, -{52,-6,-37}, -{52,-6,-36}, -{52,-6,-35}, -{52,-6,-34}, -{52,-6,-33}, -{52,-6,-32}, -{52,-6,-31}, -{52,-6,-30}, -{52,-6,-29}, -{52,-6,-28}, -{52,-6,-27}, -{52,-6,-26}, -{52,-6,-25}, -{52,-6,-24}, -{52,-6,-23}, -{52,-6,-22}, -{52,-6,-21}, -{52,-6,-20}, -{52,-6,-19}, -{52,-6,-18}, -{52,-6,-17}, -{52,-6,-16}, -{52,-6,-15}, -{52,-6,-14}, -{52,-6,-13}, -{52,-6,-12}, -{52,-6,-11}, -{52,-6,-10}, -{52,-6,-9}, -{52,-6,-8}, -{52,-6,-7}, -{52,-6,-6}, -{52,-6,-5}, -{52,-6,-4}, -{52,-6,-3}, -{52,-6,-2}, -{52,-6,-1}, -{52,-6,0}, -{52,-6,1}, -{52,-6,2}, -{52,-6,3}, -{52,-6,4}, -{52,-6,5}, -{52,-6,6}, -{52,-6,7}, -{52,-6,8}, -{52,-6,9}, -{52,-6,10}, -{52,-6,11}, -{52,-6,12}, -{52,-6,13}, -{52,-6,14}, -{52,-6,15}, -{52,-6,16}, -{52,-6,17}, -{52,-6,18}, -{52,-6,19}, -{52,-6,20}, -{52,-6,21}, -{52,-6,22}, -{52,-6,23}, -{52,-6,24}, -{52,-6,25}, -{52,-6,26}, -{52,-6,27}, -{52,-6,28}, -{52,-6,29}, -{52,-6,30}, -{52,-6,31}, -{52,-6,32}, -{52,-6,33}, -{52,-6,34}, -{52,-6,35}, -{52,-6,36}, -{52,-6,37}, -{52,-6,38}, -{52,-6,39}, -{52,-6,40}, -{52,-6,41}, -{52,-6,42}, -{52,-6,43}, -{52,-6,44}, -{52,-6,45}, -{52,-6,46}, -{52,-6,47}, -{52,-6,48}, -{52,-6,49}, -{52,-6,50}, -{52,-6,51}, -{52,-6,52}, -{52,-6,53}, -{52,-6,54}, -{52,-6,55}, -{52,-6,56}, -{52,-6,57}, -{52,-5,-43}, -{52,-5,-42}, -{52,-5,-41}, -{52,-5,-40}, -{52,-5,-39}, -{52,-5,-38}, -{52,-5,-37}, -{52,-5,-36}, -{52,-5,-35}, -{52,-5,-34}, -{52,-5,-33}, -{52,-5,-32}, -{52,-5,-31}, -{52,-5,-30}, -{52,-5,-29}, -{52,-5,-28}, -{52,-5,-27}, -{52,-5,-26}, -{52,-5,-25}, -{52,-5,-24}, -{52,-5,-23}, -{52,-5,-22}, -{52,-5,-21}, -{52,-5,-20}, -{52,-5,-19}, -{52,-5,-18}, -{52,-5,-17}, -{52,-5,-16}, -{52,-5,-15}, -{52,-5,-14}, -{52,-5,-13}, -{52,-5,-12}, -{52,-5,-11}, -{52,-5,-10}, -{52,-5,-9}, -{52,-5,-8}, -{52,-5,-7}, -{52,-5,-6}, -{52,-5,-5}, -{52,-5,-4}, -{52,-5,-3}, -{52,-5,-2}, -{52,-5,-1}, -{52,-5,0}, -{52,-5,1}, -{52,-5,2}, -{52,-5,3}, -{52,-5,4}, -{52,-5,5}, -{52,-5,6}, -{52,-5,7}, -{52,-5,8}, -{52,-5,9}, -{52,-5,10}, -{52,-5,11}, -{52,-5,12}, -{52,-5,13}, -{52,-5,14}, -{52,-5,15}, -{52,-5,16}, -{52,-5,17}, -{52,-5,18}, -{52,-5,19}, -{52,-5,20}, -{52,-5,21}, -{52,-5,22}, -{52,-5,23}, -{52,-5,24}, -{52,-5,25}, -{52,-5,26}, -{52,-5,27}, -{52,-5,28}, -{52,-5,29}, -{52,-5,30}, -{52,-5,31}, -{52,-5,32}, -{52,-5,33}, -{52,-5,34}, -{52,-5,35}, -{52,-5,36}, -{52,-5,37}, -{52,-5,38}, -{52,-5,39}, -{52,-5,40}, -{52,-5,41}, -{52,-5,42}, -{52,-5,43}, -{52,-5,44}, -{52,-5,45}, -{52,-5,46}, -{52,-5,47}, -{52,-5,48}, -{52,-5,49}, -{52,-5,50}, -{52,-5,51}, -{52,-5,52}, -{52,-5,53}, -{52,-5,54}, -{52,-5,55}, -{52,-5,56}, -{52,-5,57}, -{52,-4,-44}, -{52,-4,-43}, -{52,-4,-42}, -{52,-4,-41}, -{52,-4,-40}, -{52,-4,-39}, -{52,-4,-38}, -{52,-4,-37}, -{52,-4,-36}, -{52,-4,-35}, -{52,-4,-34}, -{52,-4,-33}, -{52,-4,-32}, -{52,-4,-31}, -{52,-4,-30}, -{52,-4,-29}, -{52,-4,-28}, -{52,-4,-27}, -{52,-4,-26}, -{52,-4,-25}, -{52,-4,-24}, -{52,-4,-23}, -{52,-4,-22}, -{52,-4,-21}, -{52,-4,-20}, -{52,-4,-19}, -{52,-4,-18}, -{52,-4,-17}, -{52,-4,-16}, -{52,-4,-15}, -{52,-4,-14}, -{52,-4,-13}, -{52,-4,-12}, -{52,-4,-11}, -{52,-4,-10}, -{52,-4,-9}, -{52,-4,-8}, -{52,-4,-7}, -{52,-4,-6}, -{52,-4,-5}, -{52,-4,-4}, -{52,-4,-3}, -{52,-4,-2}, -{52,-4,-1}, -{52,-4,0}, -{52,-4,1}, -{52,-4,2}, -{52,-4,3}, -{52,-4,4}, -{52,-4,5}, -{52,-4,6}, -{52,-4,7}, -{52,-4,8}, -{52,-4,9}, -{52,-4,10}, -{52,-4,11}, -{52,-4,12}, -{52,-4,13}, -{52,-4,14}, -{52,-4,15}, -{52,-4,16}, -{52,-4,17}, -{52,-4,18}, -{52,-4,19}, -{52,-4,20}, -{52,-4,21}, -{52,-4,22}, -{52,-4,23}, -{52,-4,24}, -{52,-4,25}, -{52,-4,26}, -{52,-4,27}, -{52,-4,28}, -{52,-4,29}, -{52,-4,30}, -{52,-4,31}, -{52,-4,32}, -{52,-4,33}, -{52,-4,34}, -{52,-4,35}, -{52,-4,36}, -{52,-4,37}, -{52,-4,38}, -{52,-4,39}, -{52,-4,40}, -{52,-4,41}, -{52,-4,42}, -{52,-4,43}, -{52,-4,44}, -{52,-4,45}, -{52,-4,46}, -{52,-4,47}, -{52,-4,48}, -{52,-4,49}, -{52,-4,50}, -{52,-4,51}, -{52,-4,52}, -{52,-4,53}, -{52,-4,54}, -{52,-4,55}, -{52,-4,56}, -{52,-4,57}, -{52,-3,-45}, -{52,-3,-44}, -{52,-3,-43}, -{52,-3,-42}, -{52,-3,-41}, -{52,-3,-40}, -{52,-3,-39}, -{52,-3,-38}, -{52,-3,-37}, -{52,-3,-36}, -{52,-3,-35}, -{52,-3,-34}, -{52,-3,-33}, -{52,-3,-32}, -{52,-3,-31}, -{52,-3,-30}, -{52,-3,-29}, -{52,-3,-28}, -{52,-3,-27}, -{52,-3,-26}, -{52,-3,-25}, -{52,-3,-24}, -{52,-3,-23}, -{52,-3,-22}, -{52,-3,-21}, -{52,-3,-20}, -{52,-3,-19}, -{52,-3,-18}, -{52,-3,-17}, -{52,-3,-16}, -{52,-3,-15}, -{52,-3,-14}, -{52,-3,-13}, -{52,-3,-12}, -{52,-3,-11}, -{52,-3,-10}, -{52,-3,-9}, -{52,-3,-8}, -{52,-3,-7}, -{52,-3,-6}, -{52,-3,-5}, -{52,-3,-4}, -{52,-3,-3}, -{52,-3,-2}, -{52,-3,-1}, -{52,-3,0}, -{52,-3,1}, -{52,-3,2}, -{52,-3,3}, -{52,-3,4}, -{52,-3,5}, -{52,-3,6}, -{52,-3,7}, -{52,-3,8}, -{52,-3,9}, -{52,-3,10}, -{52,-3,11}, -{52,-3,12}, -{52,-3,13}, -{52,-3,14}, -{52,-3,15}, -{52,-3,16}, -{52,-3,17}, -{52,-3,18}, -{52,-3,19}, -{52,-3,20}, -{52,-3,21}, -{52,-3,22}, -{52,-3,23}, -{52,-3,24}, -{52,-3,25}, -{52,-3,26}, -{52,-3,27}, -{52,-3,28}, -{52,-3,29}, -{52,-3,30}, -{52,-3,31}, -{52,-3,32}, -{52,-3,33}, -{52,-3,34}, -{52,-3,35}, -{52,-3,36}, -{52,-3,37}, -{52,-3,38}, -{52,-3,39}, -{52,-3,40}, -{52,-3,41}, -{52,-3,42}, -{52,-3,43}, -{52,-3,44}, -{52,-3,45}, -{52,-3,46}, -{52,-3,47}, -{52,-3,48}, -{52,-3,49}, -{52,-3,50}, -{52,-3,51}, -{52,-3,52}, -{52,-3,53}, -{52,-3,54}, -{52,-3,55}, -{52,-3,56}, -{52,-3,57}, -{52,-2,-46}, -{52,-2,-45}, -{52,-2,-44}, -{52,-2,-43}, -{52,-2,-42}, -{52,-2,-41}, -{52,-2,-40}, -{52,-2,-39}, -{52,-2,-38}, -{52,-2,-37}, -{52,-2,-36}, -{52,-2,-35}, -{52,-2,-34}, -{52,-2,-33}, -{52,-2,-32}, -{52,-2,-31}, -{52,-2,-30}, -{52,-2,-29}, -{52,-2,-28}, -{52,-2,-27}, -{52,-2,-26}, -{52,-2,-25}, -{52,-2,-24}, -{52,-2,-23}, -{52,-2,-22}, -{52,-2,-21}, -{52,-2,-20}, -{52,-2,-19}, -{52,-2,-18}, -{52,-2,-17}, -{52,-2,-16}, -{52,-2,-15}, -{52,-2,-14}, -{52,-2,-13}, -{52,-2,-12}, -{52,-2,-11}, -{52,-2,-10}, -{52,-2,-9}, -{52,-2,-8}, -{52,-2,-7}, -{52,-2,-6}, -{52,-2,-5}, -{52,-2,-4}, -{52,-2,-3}, -{52,-2,-2}, -{52,-2,-1}, -{52,-2,0}, -{52,-2,1}, -{52,-2,2}, -{52,-2,3}, -{52,-2,4}, -{52,-2,5}, -{52,-2,6}, -{52,-2,7}, -{52,-2,8}, -{52,-2,9}, -{52,-2,10}, -{52,-2,11}, -{52,-2,12}, -{52,-2,13}, -{52,-2,14}, -{52,-2,15}, -{52,-2,16}, -{52,-2,17}, -{52,-2,18}, -{52,-2,19}, -{52,-2,20}, -{52,-2,21}, -{52,-2,22}, -{52,-2,23}, -{52,-2,24}, -{52,-2,25}, -{52,-2,26}, -{52,-2,27}, -{52,-2,28}, -{52,-2,29}, -{52,-2,30}, -{52,-2,31}, -{52,-2,32}, -{52,-2,33}, -{52,-2,34}, -{52,-2,35}, -{52,-2,36}, -{52,-2,37}, -{52,-2,38}, -{52,-2,39}, -{52,-2,40}, -{52,-2,41}, -{52,-2,42}, -{52,-2,43}, -{52,-2,44}, -{52,-2,45}, -{52,-2,46}, -{52,-2,47}, -{52,-2,48}, -{52,-2,49}, -{52,-2,50}, -{52,-2,51}, -{52,-2,52}, -{52,-2,53}, -{52,-2,54}, -{52,-2,55}, -{52,-2,56}, -{52,-2,57}, -{52,-1,-47}, -{52,-1,-46}, -{52,-1,-45}, -{52,-1,-44}, -{52,-1,-43}, -{52,-1,-42}, -{52,-1,-41}, -{52,-1,-40}, -{52,-1,-39}, -{52,-1,-38}, -{52,-1,-37}, -{52,-1,-36}, -{52,-1,-35}, -{52,-1,-34}, -{52,-1,-33}, -{52,-1,-32}, -{52,-1,-31}, -{52,-1,-30}, -{52,-1,-29}, -{52,-1,-28}, -{52,-1,-27}, -{52,-1,-26}, -{52,-1,-25}, -{52,-1,-24}, -{52,-1,-23}, -{52,-1,-22}, -{52,-1,-21}, -{52,-1,-20}, -{52,-1,-19}, -{52,-1,-18}, -{52,-1,-17}, -{52,-1,-16}, -{52,-1,-15}, -{52,-1,-14}, -{52,-1,-13}, -{52,-1,-12}, -{52,-1,-11}, -{52,-1,-10}, -{52,-1,-9}, -{52,-1,-8}, -{52,-1,-7}, -{52,-1,-6}, -{52,-1,-5}, -{52,-1,-4}, -{52,-1,-3}, -{52,-1,-2}, -{52,-1,-1}, -{52,-1,0}, -{52,-1,1}, -{52,-1,2}, -{52,-1,3}, -{52,-1,4}, -{52,-1,5}, -{52,-1,6}, -{52,-1,7}, -{52,-1,8}, -{52,-1,9}, -{52,-1,10}, -{52,-1,11}, -{52,-1,12}, -{52,-1,13}, -{52,-1,14}, -{52,-1,15}, -{52,-1,16}, -{52,-1,17}, -{52,-1,18}, -{52,-1,19}, -{52,-1,20}, -{52,-1,21}, -{52,-1,22}, -{52,-1,23}, -{52,-1,24}, -{52,-1,25}, -{52,-1,26}, -{52,-1,27}, -{52,-1,28}, -{52,-1,29}, -{52,-1,30}, -{52,-1,31}, -{52,-1,32}, -{52,-1,33}, -{52,-1,34}, -{52,-1,35}, -{52,-1,36}, -{52,-1,37}, -{52,-1,38}, -{52,-1,39}, -{52,-1,40}, -{52,-1,41}, -{52,-1,42}, -{52,-1,43}, -{52,-1,44}, -{52,-1,45}, -{52,-1,46}, -{52,-1,47}, -{52,-1,48}, -{52,-1,49}, -{52,-1,50}, -{52,-1,51}, -{52,-1,52}, -{52,-1,53}, -{52,-1,54}, -{52,-1,55}, -{52,-1,56}, -{52,-1,57}, -{52,0,-49}, -{52,0,-48}, -{52,0,-47}, -{52,0,-46}, -{52,0,-45}, -{52,0,-44}, -{52,0,-43}, -{52,0,-42}, -{52,0,-41}, -{52,0,-40}, -{52,0,-39}, -{52,0,-38}, -{52,0,-37}, -{52,0,-36}, -{52,0,-35}, -{52,0,-34}, -{52,0,-33}, -{52,0,-32}, -{52,0,-31}, -{52,0,-30}, -{52,0,-29}, -{52,0,-28}, -{52,0,-27}, -{52,0,-26}, -{52,0,-25}, -{52,0,-24}, -{52,0,-23}, -{52,0,-22}, -{52,0,-21}, -{52,0,-20}, -{52,0,-19}, -{52,0,-18}, -{52,0,-17}, -{52,0,-16}, -{52,0,-15}, -{52,0,-14}, -{52,0,-13}, -{52,0,-12}, -{52,0,-11}, -{52,0,-10}, -{52,0,-9}, -{52,0,-8}, -{52,0,-7}, -{52,0,-6}, -{52,0,-5}, -{52,0,-4}, -{52,0,-3}, -{52,0,-2}, -{52,0,-1}, -{52,0,0}, -{52,0,1}, -{52,0,2}, -{52,0,3}, -{52,0,4}, -{52,0,5}, -{52,0,6}, -{52,0,7}, -{52,0,8}, -{52,0,9}, -{52,0,10}, -{52,0,11}, -{52,0,12}, -{52,0,13}, -{52,0,14}, -{52,0,15}, -{52,0,16}, -{52,0,17}, -{52,0,18}, -{52,0,19}, -{52,0,20}, -{52,0,21}, -{52,0,22}, -{52,0,23}, -{52,0,24}, -{52,0,25}, -{52,0,26}, -{52,0,27}, -{52,0,28}, -{52,0,29}, -{52,0,30}, -{52,0,31}, -{52,0,32}, -{52,0,33}, -{52,0,34}, -{52,0,35}, -{52,0,36}, -{52,0,37}, -{52,0,38}, -{52,0,39}, -{52,0,40}, -{52,0,41}, -{52,0,42}, -{52,0,43}, -{52,0,44}, -{52,0,45}, -{52,0,46}, -{52,0,47}, -{52,0,48}, -{52,0,49}, -{52,0,50}, -{52,0,51}, -{52,0,52}, -{52,0,53}, -{52,0,54}, -{52,0,55}, -{52,0,56}, -{52,0,57}, -{52,1,-50}, -{52,1,-49}, -{52,1,-48}, -{52,1,-47}, -{52,1,-46}, -{52,1,-45}, -{52,1,-44}, -{52,1,-43}, -{52,1,-42}, -{52,1,-41}, -{52,1,-40}, -{52,1,-39}, -{52,1,-38}, -{52,1,-37}, -{52,1,-36}, -{52,1,-35}, -{52,1,-34}, -{52,1,-33}, -{52,1,-32}, -{52,1,-31}, -{52,1,-30}, -{52,1,-29}, -{52,1,-28}, -{52,1,-27}, -{52,1,-26}, -{52,1,-25}, -{52,1,-24}, -{52,1,-23}, -{52,1,-22}, -{52,1,-21}, -{52,1,-20}, -{52,1,-19}, -{52,1,-18}, -{52,1,-17}, -{52,1,-16}, -{52,1,-15}, -{52,1,-14}, -{52,1,-13}, -{52,1,-12}, -{52,1,-11}, -{52,1,-10}, -{52,1,-9}, -{52,1,-8}, -{52,1,-7}, -{52,1,-6}, -{52,1,-5}, -{52,1,-4}, -{52,1,-3}, -{52,1,-2}, -{52,1,-1}, -{52,1,0}, -{52,1,1}, -{52,1,2}, -{52,1,3}, -{52,1,4}, -{52,1,5}, -{52,1,6}, -{52,1,7}, -{52,1,8}, -{52,1,9}, -{52,1,10}, -{52,1,11}, -{52,1,12}, -{52,1,13}, -{52,1,14}, -{52,1,15}, -{52,1,16}, -{52,1,17}, -{52,1,18}, -{52,1,19}, -{52,1,20}, -{52,1,21}, -{52,1,22}, -{52,1,23}, -{52,1,24}, -{52,1,25}, -{52,1,26}, -{52,1,27}, -{52,1,28}, -{52,1,29}, -{52,1,30}, -{52,1,31}, -{52,1,32}, -{52,1,33}, -{52,1,34}, -{52,1,35}, -{52,1,36}, -{52,1,37}, -{52,1,38}, -{52,1,39}, -{52,1,40}, -{52,1,41}, -{52,1,42}, -{52,1,43}, -{52,1,44}, -{52,1,45}, -{52,1,46}, -{52,1,47}, -{52,1,48}, -{52,1,49}, -{52,1,50}, -{52,1,51}, -{52,1,52}, -{52,1,53}, -{52,1,54}, -{52,1,55}, -{52,1,56}, -{52,1,57}, -{52,2,-51}, -{52,2,-50}, -{52,2,-49}, -{52,2,-48}, -{52,2,-47}, -{52,2,-46}, -{52,2,-45}, -{52,2,-44}, -{52,2,-43}, -{52,2,-42}, -{52,2,-41}, -{52,2,-40}, -{52,2,-39}, -{52,2,-38}, -{52,2,-37}, -{52,2,-36}, -{52,2,-35}, -{52,2,-34}, -{52,2,-33}, -{52,2,-32}, -{52,2,-31}, -{52,2,-30}, -{52,2,-29}, -{52,2,-28}, -{52,2,-27}, -{52,2,-26}, -{52,2,-25}, -{52,2,-24}, -{52,2,-23}, -{52,2,-22}, -{52,2,-21}, -{52,2,-20}, -{52,2,-19}, -{52,2,-18}, -{52,2,-17}, -{52,2,-16}, -{52,2,-15}, -{52,2,-14}, -{52,2,-13}, -{52,2,-12}, -{52,2,-11}, -{52,2,-10}, -{52,2,-9}, -{52,2,-8}, -{52,2,-7}, -{52,2,-6}, -{52,2,-5}, -{52,2,-4}, -{52,2,-3}, -{52,2,-2}, -{52,2,-1}, -{52,2,0}, -{52,2,1}, -{52,2,2}, -{52,2,3}, -{52,2,4}, -{52,2,5}, -{52,2,6}, -{52,2,7}, -{52,2,8}, -{52,2,9}, -{52,2,10}, -{52,2,11}, -{52,2,12}, -{52,2,13}, -{52,2,14}, -{52,2,15}, -{52,2,16}, -{52,2,17}, -{52,2,18}, -{52,2,19}, -{52,2,20}, -{52,2,21}, -{52,2,22}, -{52,2,23}, -{52,2,24}, -{52,2,25}, -{52,2,26}, -{52,2,27}, -{52,2,28}, -{52,2,29}, -{52,2,30}, -{52,2,31}, -{52,2,32}, -{52,2,33}, -{52,2,34}, -{52,2,35}, -{52,2,36}, -{52,2,37}, -{52,2,38}, -{52,2,39}, -{52,2,40}, -{52,2,41}, -{52,2,42}, -{52,2,43}, -{52,2,44}, -{52,2,45}, -{52,2,46}, -{52,2,47}, -{52,2,48}, -{52,2,49}, -{52,2,50}, -{52,2,51}, -{52,2,52}, -{52,2,53}, -{52,2,54}, -{52,2,55}, -{52,2,56}, -{52,2,57}, -{52,3,-52}, -{52,3,-51}, -{52,3,-50}, -{52,3,-49}, -{52,3,-48}, -{52,3,-47}, -{52,3,-46}, -{52,3,-45}, -{52,3,-44}, -{52,3,-43}, -{52,3,-42}, -{52,3,-41}, -{52,3,-40}, -{52,3,-39}, -{52,3,-38}, -{52,3,-37}, -{52,3,-36}, -{52,3,-35}, -{52,3,-34}, -{52,3,-33}, -{52,3,-32}, -{52,3,-31}, -{52,3,-30}, -{52,3,-29}, -{52,3,-28}, -{52,3,-27}, -{52,3,-26}, -{52,3,-25}, -{52,3,-24}, -{52,3,-23}, -{52,3,-22}, -{52,3,-21}, -{52,3,-20}, -{52,3,-19}, -{52,3,-18}, -{52,3,-17}, -{52,3,-16}, -{52,3,-15}, -{52,3,-14}, -{52,3,-13}, -{52,3,-12}, -{52,3,-11}, -{52,3,-10}, -{52,3,-9}, -{52,3,-8}, -{52,3,-7}, -{52,3,-6}, -{52,3,-5}, -{52,3,-4}, -{52,3,-3}, -{52,3,-2}, -{52,3,-1}, -{52,3,0}, -{52,3,1}, -{52,3,2}, -{52,3,3}, -{52,3,4}, -{52,3,5}, -{52,3,6}, -{52,3,7}, -{52,3,8}, -{52,3,9}, -{52,3,10}, -{52,3,11}, -{52,3,12}, -{52,3,13}, -{52,3,14}, -{52,3,15}, -{52,3,16}, -{52,3,17}, -{52,3,18}, -{52,3,19}, -{52,3,20}, -{52,3,21}, -{52,3,22}, -{52,3,23}, -{52,3,24}, -{52,3,25}, -{52,3,26}, -{52,3,27}, -{52,3,28}, -{52,3,29}, -{52,3,30}, -{52,3,31}, -{52,3,32}, -{52,3,33}, -{52,3,34}, -{52,3,35}, -{52,3,36}, -{52,3,37}, -{52,3,38}, -{52,3,39}, -{52,3,40}, -{52,3,41}, -{52,3,42}, -{52,3,43}, -{52,3,44}, -{52,3,45}, -{52,3,46}, -{52,3,47}, -{52,3,48}, -{52,3,49}, -{52,3,50}, -{52,3,51}, -{52,3,52}, -{52,3,53}, -{52,3,54}, -{52,3,55}, -{52,3,56}, -{52,3,57}, -{52,3,58}, -{52,4,-53}, -{52,4,-52}, -{52,4,-51}, -{52,4,-50}, -{52,4,-49}, -{52,4,-48}, -{52,4,-47}, -{52,4,-46}, -{52,4,-45}, -{52,4,-44}, -{52,4,-43}, -{52,4,-42}, -{52,4,-41}, -{52,4,-40}, -{52,4,-39}, -{52,4,-38}, -{52,4,-37}, -{52,4,-36}, -{52,4,-35}, -{52,4,-34}, -{52,4,-33}, -{52,4,-32}, -{52,4,-31}, -{52,4,-30}, -{52,4,-29}, -{52,4,-28}, -{52,4,-27}, -{52,4,-26}, -{52,4,-25}, -{52,4,-24}, -{52,4,-23}, -{52,4,-22}, -{52,4,-21}, -{52,4,-20}, -{52,4,-19}, -{52,4,-18}, -{52,4,-17}, -{52,4,-16}, -{52,4,-15}, -{52,4,-14}, -{52,4,-13}, -{52,4,-12}, -{52,4,-11}, -{52,4,-10}, -{52,4,-9}, -{52,4,-8}, -{52,4,-7}, -{52,4,-6}, -{52,4,-5}, -{52,4,-4}, -{52,4,-3}, -{52,4,-2}, -{52,4,-1}, -{52,4,0}, -{52,4,1}, -{52,4,2}, -{52,4,3}, -{52,4,4}, -{52,4,5}, -{52,4,6}, -{52,4,7}, -{52,4,8}, -{52,4,9}, -{52,4,10}, -{52,4,11}, -{52,4,12}, -{52,4,13}, -{52,4,14}, -{52,4,15}, -{52,4,16}, -{52,4,17}, -{52,4,18}, -{52,4,19}, -{52,4,20}, -{52,4,21}, -{52,4,22}, -{52,4,23}, -{52,4,24}, -{52,4,25}, -{52,4,26}, -{52,4,27}, -{52,4,28}, -{52,4,29}, -{52,4,30}, -{52,4,31}, -{52,4,32}, -{52,4,33}, -{52,4,34}, -{52,4,35}, -{52,4,36}, -{52,4,37}, -{52,4,38}, -{52,4,39}, -{52,4,40}, -{52,4,41}, -{52,4,42}, -{52,4,43}, -{52,4,44}, -{52,4,45}, -{52,4,46}, -{52,4,47}, -{52,4,48}, -{52,4,49}, -{52,4,50}, -{52,4,51}, -{52,4,52}, -{52,4,53}, -{52,4,54}, -{52,4,55}, -{52,4,56}, -{52,4,57}, -{52,4,58}, -{52,5,-54}, -{52,5,-53}, -{52,5,-52}, -{52,5,-51}, -{52,5,-50}, -{52,5,-49}, -{52,5,-48}, -{52,5,-47}, -{52,5,-46}, -{52,5,-45}, -{52,5,-44}, -{52,5,-43}, -{52,5,-42}, -{52,5,-41}, -{52,5,-40}, -{52,5,-39}, -{52,5,-38}, -{52,5,-37}, -{52,5,-36}, -{52,5,-35}, -{52,5,-34}, -{52,5,-33}, -{52,5,-32}, -{52,5,-31}, -{52,5,-30}, -{52,5,-29}, -{52,5,-28}, -{52,5,-27}, -{52,5,-26}, -{52,5,-25}, -{52,5,-24}, -{52,5,-23}, -{52,5,-22}, -{52,5,-21}, -{52,5,-20}, -{52,5,-19}, -{52,5,-18}, -{52,5,-17}, -{52,5,-16}, -{52,5,-15}, -{52,5,-14}, -{52,5,-13}, -{52,5,-12}, -{52,5,-11}, -{52,5,-10}, -{52,5,-9}, -{52,5,-8}, -{52,5,-7}, -{52,5,-6}, -{52,5,-5}, -{52,5,-4}, -{52,5,-3}, -{52,5,-2}, -{52,5,-1}, -{52,5,0}, -{52,5,1}, -{52,5,2}, -{52,5,3}, -{52,5,4}, -{52,5,5}, -{52,5,6}, -{52,5,7}, -{52,5,8}, -{52,5,9}, -{52,5,10}, -{52,5,11}, -{52,5,12}, -{52,5,13}, -{52,5,14}, -{52,5,15}, -{52,5,16}, -{52,5,17}, -{52,5,18}, -{52,5,19}, -{52,5,20}, -{52,5,21}, -{52,5,22}, -{52,5,23}, -{52,5,24}, -{52,5,25}, -{52,5,26}, -{52,5,27}, -{52,5,28}, -{52,5,29}, -{52,5,30}, -{52,5,31}, -{52,5,32}, -{52,5,33}, -{52,5,34}, -{52,5,35}, -{52,5,36}, -{52,5,37}, -{52,5,38}, -{52,5,39}, -{52,5,40}, -{52,5,41}, -{52,5,42}, -{52,5,43}, -{52,5,44}, -{52,5,45}, -{52,5,46}, -{52,5,47}, -{52,5,48}, -{52,5,49}, -{52,5,50}, -{52,5,51}, -{52,5,52}, -{52,5,53}, -{52,5,54}, -{52,5,55}, -{52,5,56}, -{52,5,57}, -{52,5,58}, -{52,6,-55}, -{52,6,-54}, -{52,6,-53}, -{52,6,-52}, -{52,6,-51}, -{52,6,-50}, -{52,6,-49}, -{52,6,-48}, -{52,6,-47}, -{52,6,-46}, -{52,6,-45}, -{52,6,-44}, -{52,6,-43}, -{52,6,-42}, -{52,6,-41}, -{52,6,-40}, -{52,6,-39}, -{52,6,-38}, -{52,6,-37}, -{52,6,-36}, -{52,6,-35}, -{52,6,-34}, -{52,6,-33}, -{52,6,-32}, -{52,6,-31}, -{52,6,-30}, -{52,6,-29}, -{52,6,-28}, -{52,6,-27}, -{52,6,-26}, -{52,6,-25}, -{52,6,-24}, -{52,6,-23}, -{52,6,-22}, -{52,6,-21}, -{52,6,-20}, -{52,6,-19}, -{52,6,-18}, -{52,6,-17}, -{52,6,-16}, -{52,6,-15}, -{52,6,-14}, -{52,6,-13}, -{52,6,-12}, -{52,6,-11}, -{52,6,-10}, -{52,6,-9}, -{52,6,-8}, -{52,6,-7}, -{52,6,-6}, -{52,6,-5}, -{52,6,-4}, -{52,6,-3}, -{52,6,-2}, -{52,6,-1}, -{52,6,0}, -{52,6,1}, -{52,6,2}, -{52,6,3}, -{52,6,4}, -{52,6,5}, -{52,6,6}, -{52,6,7}, -{52,6,8}, -{52,6,9}, -{52,6,10}, -{52,6,11}, -{52,6,12}, -{52,6,13}, -{52,6,14}, -{52,6,15}, -{52,6,16}, -{52,6,17}, -{52,6,18}, -{52,6,19}, -{52,6,20}, -{52,6,21}, -{52,6,22}, -{52,6,23}, -{52,6,24}, -{52,6,25}, -{52,6,26}, -{52,6,27}, -{52,6,28}, -{52,6,29}, -{52,6,30}, -{52,6,31}, -{52,6,32}, -{52,6,33}, -{52,6,34}, -{52,6,35}, -{52,6,36}, -{52,6,37}, -{52,6,38}, -{52,6,39}, -{52,6,40}, -{52,6,41}, -{52,6,42}, -{52,6,43}, -{52,6,44}, -{52,6,45}, -{52,6,46}, -{52,6,47}, -{52,6,48}, -{52,6,49}, -{52,6,50}, -{52,6,51}, -{52,6,52}, -{52,6,53}, -{52,6,54}, -{52,6,55}, -{52,6,56}, -{52,6,57}, -{52,6,58}, -{52,7,-56}, -{52,7,-55}, -{52,7,-54}, -{52,7,-53}, -{52,7,-52}, -{52,7,-51}, -{52,7,-50}, -{52,7,-49}, -{52,7,-48}, -{52,7,-47}, -{52,7,-46}, -{52,7,-45}, -{52,7,-44}, -{52,7,-43}, -{52,7,-42}, -{52,7,-41}, -{52,7,-40}, -{52,7,-39}, -{52,7,-38}, -{52,7,-37}, -{52,7,-36}, -{52,7,-35}, -{52,7,-34}, -{52,7,-33}, -{52,7,-32}, -{52,7,-31}, -{52,7,-30}, -{52,7,-29}, -{52,7,-28}, -{52,7,-27}, -{52,7,-26}, -{52,7,-25}, -{52,7,-24}, -{52,7,-23}, -{52,7,-22}, -{52,7,-21}, -{52,7,-20}, -{52,7,-19}, -{52,7,-18}, -{52,7,-17}, -{52,7,-16}, -{52,7,-15}, -{52,7,-14}, -{52,7,-13}, -{52,7,-12}, -{52,7,-11}, -{52,7,-10}, -{52,7,-9}, -{52,7,-8}, -{52,7,-7}, -{52,7,-6}, -{52,7,-5}, -{52,7,-4}, -{52,7,-3}, -{52,7,-2}, -{52,7,-1}, -{52,7,0}, -{52,7,1}, -{52,7,2}, -{52,7,3}, -{52,7,4}, -{52,7,5}, -{52,7,6}, -{52,7,7}, -{52,7,8}, -{52,7,9}, -{52,7,10}, -{52,7,11}, -{52,7,12}, -{52,7,13}, -{52,7,14}, -{52,7,15}, -{52,7,16}, -{52,7,17}, -{52,7,18}, -{52,7,19}, -{52,7,20}, -{52,7,21}, -{52,7,22}, -{52,7,23}, -{52,7,24}, -{52,7,25}, -{52,7,26}, -{52,7,27}, -{52,7,28}, -{52,7,29}, -{52,7,30}, -{52,7,31}, -{52,7,32}, -{52,7,33}, -{52,7,34}, -{52,7,35}, -{52,7,36}, -{52,7,37}, -{52,7,38}, -{52,7,39}, -{52,7,40}, -{52,7,41}, -{52,7,42}, -{52,7,43}, -{52,7,44}, -{52,7,45}, -{52,7,46}, -{52,7,47}, -{52,7,48}, -{52,7,49}, -{52,7,50}, -{52,7,51}, -{52,7,52}, -{52,7,53}, -{52,7,54}, -{52,7,55}, -{52,7,56}, -{52,7,57}, -{52,7,58}, -{52,8,-57}, -{52,8,-56}, -{52,8,-55}, -{52,8,-54}, -{52,8,-53}, -{52,8,-52}, -{52,8,-51}, -{52,8,-50}, -{52,8,-49}, -{52,8,-48}, -{52,8,-47}, -{52,8,-46}, -{52,8,-45}, -{52,8,-44}, -{52,8,-43}, -{52,8,-42}, -{52,8,-41}, -{52,8,-40}, -{52,8,-39}, -{52,8,-38}, -{52,8,-37}, -{52,8,-36}, -{52,8,-35}, -{52,8,-34}, -{52,8,-33}, -{52,8,-32}, -{52,8,-31}, -{52,8,-30}, -{52,8,-29}, -{52,8,-28}, -{52,8,-27}, -{52,8,-26}, -{52,8,-25}, -{52,8,-24}, -{52,8,-23}, -{52,8,-22}, -{52,8,-21}, -{52,8,-20}, -{52,8,-19}, -{52,8,-18}, -{52,8,-17}, -{52,8,-16}, -{52,8,-15}, -{52,8,-14}, -{52,8,-13}, -{52,8,-12}, -{52,8,-11}, -{52,8,-10}, -{52,8,-9}, -{52,8,-8}, -{52,8,-7}, -{52,8,-6}, -{52,8,-5}, -{52,8,-4}, -{52,8,-3}, -{52,8,-2}, -{52,8,-1}, -{52,8,0}, -{52,8,1}, -{52,8,2}, -{52,8,3}, -{52,8,4}, -{52,8,5}, -{52,8,6}, -{52,8,7}, -{52,8,8}, -{52,8,9}, -{52,8,10}, -{52,8,11}, -{52,8,12}, -{52,8,13}, -{52,8,14}, -{52,8,15}, -{52,8,16}, -{52,8,17}, -{52,8,18}, -{52,8,19}, -{52,8,20}, -{52,8,21}, -{52,8,22}, -{52,8,23}, -{52,8,24}, -{52,8,25}, -{52,8,26}, -{52,8,27}, -{52,8,28}, -{52,8,29}, -{52,8,30}, -{52,8,31}, -{52,8,32}, -{52,8,33}, -{52,8,34}, -{52,8,35}, -{52,8,36}, -{52,8,37}, -{52,8,38}, -{52,8,39}, -{52,8,40}, -{52,8,41}, -{52,8,42}, -{52,8,43}, -{52,8,44}, -{52,8,45}, -{52,8,46}, -{52,8,47}, -{52,8,48}, -{52,8,49}, -{52,8,50}, -{52,8,51}, -{52,8,52}, -{52,8,53}, -{52,8,54}, -{52,8,55}, -{52,8,56}, -{52,8,57}, -{52,8,58}, -{52,9,-58}, -{52,9,-57}, -{52,9,-56}, -{52,9,-55}, -{52,9,-54}, -{52,9,-53}, -{52,9,-52}, -{52,9,-51}, -{52,9,-50}, -{52,9,-49}, -{52,9,-48}, -{52,9,-47}, -{52,9,-46}, -{52,9,-45}, -{52,9,-44}, -{52,9,-43}, -{52,9,-42}, -{52,9,-41}, -{52,9,-40}, -{52,9,-39}, -{52,9,-38}, -{52,9,-37}, -{52,9,-36}, -{52,9,-35}, -{52,9,-34}, -{52,9,-33}, -{52,9,-32}, -{52,9,-31}, -{52,9,-30}, -{52,9,-29}, -{52,9,-28}, -{52,9,-27}, -{52,9,-26}, -{52,9,-25}, -{52,9,-24}, -{52,9,-23}, -{52,9,-22}, -{52,9,-21}, -{52,9,-20}, -{52,9,-19}, -{52,9,-18}, -{52,9,-17}, -{52,9,-16}, -{52,9,-15}, -{52,9,-14}, -{52,9,-13}, -{52,9,-12}, -{52,9,-11}, -{52,9,-10}, -{52,9,-9}, -{52,9,-8}, -{52,9,-7}, -{52,9,-6}, -{52,9,-5}, -{52,9,-4}, -{52,9,-3}, -{52,9,-2}, -{52,9,-1}, -{52,9,0}, -{52,9,1}, -{52,9,2}, -{52,9,3}, -{52,9,4}, -{52,9,5}, -{52,9,6}, -{52,9,7}, -{52,9,8}, -{52,9,9}, -{52,9,10}, -{52,9,11}, -{52,9,12}, -{52,9,13}, -{52,9,14}, -{52,9,15}, -{52,9,16}, -{52,9,17}, -{52,9,18}, -{52,9,19}, -{52,9,20}, -{52,9,21}, -{52,9,22}, -{52,9,23}, -{52,9,24}, -{52,9,25}, -{52,9,26}, -{52,9,27}, -{52,9,28}, -{52,9,29}, -{52,9,30}, -{52,9,31}, -{52,9,32}, -{52,9,33}, -{52,9,34}, -{52,9,35}, -{52,9,36}, -{52,9,37}, -{52,9,38}, -{52,9,39}, -{52,9,40}, -{52,9,41}, -{52,9,42}, -{52,9,43}, -{52,9,44}, -{52,9,45}, -{52,9,46}, -{52,9,47}, -{52,9,48}, -{52,9,49}, -{52,9,50}, -{52,9,51}, -{52,9,52}, -{52,9,53}, -{52,9,54}, -{52,9,55}, -{52,9,56}, -{52,9,57}, -{52,9,58}, -{52,10,-59}, -{52,10,-58}, -{52,10,-57}, -{52,10,-56}, -{52,10,-55}, -{52,10,-54}, -{52,10,-53}, -{52,10,-52}, -{52,10,-51}, -{52,10,-50}, -{52,10,-49}, -{52,10,-48}, -{52,10,-47}, -{52,10,-46}, -{52,10,-45}, -{52,10,-44}, -{52,10,-43}, -{52,10,-42}, -{52,10,-41}, -{52,10,-40}, -{52,10,-39}, -{52,10,-38}, -{52,10,-37}, -{52,10,-36}, -{52,10,-35}, -{52,10,-34}, -{52,10,-33}, -{52,10,-32}, -{52,10,-31}, -{52,10,-30}, -{52,10,-29}, -{52,10,-28}, -{52,10,-27}, -{52,10,-26}, -{52,10,-25}, -{52,10,-24}, -{52,10,-23}, -{52,10,-22}, -{52,10,-21}, -{52,10,-20}, -{52,10,-19}, -{52,10,-18}, -{52,10,-17}, -{52,10,-16}, -{52,10,-15}, -{52,10,-14}, -{52,10,-13}, -{52,10,-12}, -{52,10,-11}, -{52,10,-10}, -{52,10,-9}, -{52,10,-8}, -{52,10,-7}, -{52,10,-6}, -{52,10,-5}, -{52,10,-4}, -{52,10,-3}, -{52,10,-2}, -{52,10,-1}, -{52,10,0}, -{52,10,1}, -{52,10,2}, -{52,10,3}, -{52,10,4}, -{52,10,5}, -{52,10,6}, -{52,10,7}, -{52,10,8}, -{52,10,9}, -{52,10,10}, -{52,10,11}, -{52,10,12}, -{52,10,13}, -{52,10,14}, -{52,10,15}, -{52,10,16}, -{52,10,17}, -{52,10,18}, -{52,10,19}, -{52,10,20}, -{52,10,21}, -{52,10,22}, -{52,10,23}, -{52,10,24}, -{52,10,25}, -{52,10,26}, -{52,10,27}, -{52,10,28}, -{52,10,29}, -{52,10,30}, -{52,10,31}, -{52,10,32}, -{52,10,33}, -{52,10,34}, -{52,10,35}, -{52,10,36}, -{52,10,37}, -{52,10,38}, -{52,10,39}, -{52,10,40}, -{52,10,41}, -{52,10,42}, -{52,10,43}, -{52,10,44}, -{52,10,45}, -{52,10,46}, -{52,10,47}, -{52,10,48}, -{52,10,49}, -{52,10,50}, -{52,10,51}, -{52,10,52}, -{52,10,53}, -{52,10,54}, -{52,10,55}, -{52,10,56}, -{52,10,57}, -{52,10,58}, -{52,11,-61}, -{52,11,-60}, -{52,11,-59}, -{52,11,-58}, -{52,11,-57}, -{52,11,-56}, -{52,11,-55}, -{52,11,-54}, -{52,11,-53}, -{52,11,-52}, -{52,11,-51}, -{52,11,-50}, -{52,11,-49}, -{52,11,-48}, -{52,11,-47}, -{52,11,-46}, -{52,11,-45}, -{52,11,-44}, -{52,11,-43}, -{52,11,-42}, -{52,11,-41}, -{52,11,-40}, -{52,11,-39}, -{52,11,-38}, -{52,11,-37}, -{52,11,-36}, -{52,11,-35}, -{52,11,-34}, -{52,11,-33}, -{52,11,-32}, -{52,11,-31}, -{52,11,-30}, -{52,11,-29}, -{52,11,-28}, -{52,11,-27}, -{52,11,-26}, -{52,11,-25}, -{52,11,-24}, -{52,11,-23}, -{52,11,-22}, -{52,11,-21}, -{52,11,-20}, -{52,11,-19}, -{52,11,-18}, -{52,11,-17}, -{52,11,-16}, -{52,11,-15}, -{52,11,-14}, -{52,11,-13}, -{52,11,-12}, -{52,11,-11}, -{52,11,-10}, -{52,11,-9}, -{52,11,-8}, -{52,11,-7}, -{52,11,-6}, -{52,11,-5}, -{52,11,-4}, -{52,11,-3}, -{52,11,-2}, -{52,11,-1}, -{52,11,0}, -{52,11,1}, -{52,11,2}, -{52,11,3}, -{52,11,4}, -{52,11,5}, -{52,11,6}, -{52,11,7}, -{52,11,8}, -{52,11,9}, -{52,11,10}, -{52,11,11}, -{52,11,12}, -{52,11,13}, -{52,11,14}, -{52,11,15}, -{52,11,16}, -{52,11,17}, -{52,11,18}, -{52,11,19}, -{52,11,20}, -{52,11,21}, -{52,11,22}, -{52,11,23}, -{52,11,24}, -{52,11,25}, -{52,11,26}, -{52,11,27}, -{52,11,28}, -{52,11,29}, -{52,11,30}, -{52,11,31}, -{52,11,32}, -{52,11,33}, -{52,11,34}, -{52,11,35}, -{52,11,36}, -{52,11,37}, -{52,11,38}, -{52,11,39}, -{52,11,40}, -{52,11,41}, -{52,11,42}, -{52,11,43}, -{52,11,44}, -{52,11,45}, -{52,11,46}, -{52,11,47}, -{52,11,48}, -{52,11,49}, -{52,11,50}, -{52,11,51}, -{52,11,52}, -{52,11,53}, -{52,11,54}, -{52,11,55}, -{52,11,56}, -{52,11,57}, -{52,11,58}, -{52,12,-62}, -{52,12,-61}, -{52,12,-60}, -{52,12,-59}, -{52,12,-58}, -{52,12,-57}, -{52,12,-56}, -{52,12,-55}, -{52,12,-54}, -{52,12,-53}, -{52,12,-52}, -{52,12,-51}, -{52,12,-50}, -{52,12,-49}, -{52,12,-48}, -{52,12,-47}, -{52,12,-46}, -{52,12,-45}, -{52,12,-44}, -{52,12,-43}, -{52,12,-42}, -{52,12,-41}, -{52,12,-40}, -{52,12,-39}, -{52,12,-38}, -{52,12,-37}, -{52,12,-36}, -{52,12,-35}, -{52,12,-34}, -{52,12,-33}, -{52,12,-32}, -{52,12,-31}, -{52,12,-30}, -{52,12,-29}, -{52,12,-28}, -{52,12,-27}, -{52,12,-26}, -{52,12,-25}, -{52,12,-24}, -{52,12,-23}, -{52,12,-22}, -{52,12,-21}, -{52,12,-20}, -{52,12,-19}, -{52,12,-18}, -{52,12,-17}, -{52,12,-16}, -{52,12,-15}, -{52,12,-14}, -{52,12,-13}, -{52,12,-12}, -{52,12,-11}, -{52,12,-10}, -{52,12,-9}, -{52,12,-8}, -{52,12,-7}, -{52,12,-6}, -{52,12,-5}, -{52,12,-4}, -{52,12,-3}, -{52,12,-2}, -{52,12,-1}, -{52,12,0}, -{52,12,1}, -{52,12,2}, -{52,12,3}, -{52,12,4}, -{52,12,5}, -{52,12,6}, -{52,12,7}, -{52,12,8}, -{52,12,9}, -{52,12,10}, -{52,12,11}, -{52,12,12}, -{52,12,13}, -{52,12,14}, -{52,12,15}, -{52,12,16}, -{52,12,17}, -{52,12,18}, -{52,12,19}, -{52,12,20}, -{52,12,21}, -{52,12,22}, -{52,12,23}, -{52,12,24}, -{52,12,25}, -{52,12,26}, -{52,12,27}, -{52,12,28}, -{52,12,29}, -{52,12,30}, -{52,12,31}, -{52,12,32}, -{52,12,33}, -{52,12,34}, -{52,12,35}, -{52,12,36}, -{52,12,37}, -{52,12,38}, -{52,12,39}, -{52,12,40}, -{52,12,41}, -{52,12,42}, -{52,12,43}, -{52,12,44}, -{52,12,45}, -{52,12,46}, -{52,12,47}, -{52,12,48}, -{52,12,49}, -{52,12,50}, -{52,12,51}, -{52,12,52}, -{52,12,53}, -{52,12,54}, -{52,12,55}, -{52,12,56}, -{52,12,57}, -{52,12,58}, -{52,13,-63}, -{52,13,-62}, -{52,13,-61}, -{52,13,-60}, -{52,13,-59}, -{52,13,-58}, -{52,13,-57}, -{52,13,-56}, -{52,13,-55}, -{52,13,-54}, -{52,13,-53}, -{52,13,-52}, -{52,13,-51}, -{52,13,-50}, -{52,13,-49}, -{52,13,-48}, -{52,13,-47}, -{52,13,-46}, -{52,13,-45}, -{52,13,-44}, -{52,13,-43}, -{52,13,-42}, -{52,13,-41}, -{52,13,-40}, -{52,13,-39}, -{52,13,-38}, -{52,13,-37}, -{52,13,-36}, -{52,13,-35}, -{52,13,-34}, -{52,13,-33}, -{52,13,-32}, -{52,13,-31}, -{52,13,-30}, -{52,13,-29}, -{52,13,-28}, -{52,13,-27}, -{52,13,-26}, -{52,13,-25}, -{52,13,-24}, -{52,13,-23}, -{52,13,-22}, -{52,13,-21}, -{52,13,-20}, -{52,13,-19}, -{52,13,-18}, -{52,13,-17}, -{52,13,-16}, -{52,13,-15}, -{52,13,-14}, -{52,13,-13}, -{52,13,-12}, -{52,13,-11}, -{52,13,-10}, -{52,13,-9}, -{52,13,-8}, -{52,13,-7}, -{52,13,-6}, -{52,13,-5}, -{52,13,-4}, -{52,13,-3}, -{52,13,-2}, -{52,13,-1}, -{52,13,0}, -{52,13,1}, -{52,13,2}, -{52,13,3}, -{52,13,4}, -{52,13,5}, -{52,13,6}, -{52,13,7}, -{52,13,8}, -{52,13,9}, -{52,13,10}, -{52,13,11}, -{52,13,12}, -{52,13,13}, -{52,13,14}, -{52,13,15}, -{52,13,16}, -{52,13,17}, -{52,13,18}, -{52,13,19}, -{52,13,20}, -{52,13,21}, -{52,13,22}, -{52,13,23}, -{52,13,24}, -{52,13,25}, -{52,13,26}, -{52,13,27}, -{52,13,28}, -{52,13,29}, -{52,13,30}, -{52,13,31}, -{52,13,32}, -{52,13,33}, -{52,13,34}, -{52,13,35}, -{52,13,36}, -{52,13,37}, -{52,13,38}, -{52,13,39}, -{52,13,40}, -{52,13,41}, -{52,13,42}, -{52,13,43}, -{52,13,44}, -{52,13,45}, -{52,13,46}, -{52,13,47}, -{52,13,48}, -{52,13,49}, -{52,13,50}, -{52,13,51}, -{52,13,52}, -{52,13,53}, -{52,13,54}, -{52,13,55}, -{52,13,56}, -{52,13,57}, -{52,13,58}, -{52,14,-64}, -{52,14,-63}, -{52,14,-62}, -{52,14,-61}, -{52,14,-60}, -{52,14,-59}, -{52,14,-58}, -{52,14,-57}, -{52,14,-56}, -{52,14,-55}, -{52,14,-54}, -{52,14,-53}, -{52,14,-52}, -{52,14,-51}, -{52,14,-50}, -{52,14,-49}, -{52,14,-48}, -{52,14,-47}, -{52,14,-46}, -{52,14,-45}, -{52,14,-44}, -{52,14,-43}, -{52,14,-42}, -{52,14,-41}, -{52,14,-40}, -{52,14,-39}, -{52,14,-38}, -{52,14,-37}, -{52,14,-36}, -{52,14,-35}, -{52,14,-34}, -{52,14,-33}, -{52,14,-32}, -{52,14,-31}, -{52,14,-30}, -{52,14,-29}, -{52,14,-28}, -{52,14,-27}, -{52,14,-26}, -{52,14,-25}, -{52,14,-24}, -{52,14,-23}, -{52,14,-22}, -{52,14,-21}, -{52,14,-20}, -{52,14,-19}, -{52,14,-18}, -{52,14,-17}, -{52,14,-16}, -{52,14,-15}, -{52,14,-14}, -{52,14,-13}, -{52,14,-12}, -{52,14,-11}, -{52,14,-10}, -{52,14,-9}, -{52,14,-8}, -{52,14,-7}, -{52,14,-6}, -{52,14,-5}, -{52,14,-4}, -{52,14,-3}, -{52,14,-2}, -{52,14,-1}, -{52,14,0}, -{52,14,1}, -{52,14,2}, -{52,14,3}, -{52,14,4}, -{52,14,5}, -{52,14,6}, -{52,14,7}, -{52,14,8}, -{52,14,9}, -{52,14,10}, -{52,14,11}, -{52,14,12}, -{52,14,13}, -{52,14,14}, -{52,14,15}, -{52,14,16}, -{52,14,17}, -{52,14,18}, -{52,14,19}, -{52,14,20}, -{52,14,21}, -{52,14,22}, -{52,14,23}, -{52,14,24}, -{52,14,25}, -{52,14,26}, -{52,14,27}, -{52,14,28}, -{52,14,29}, -{52,14,30}, -{52,14,31}, -{52,14,32}, -{52,14,33}, -{52,14,34}, -{52,14,35}, -{52,14,36}, -{52,14,37}, -{52,14,38}, -{52,14,39}, -{52,14,40}, -{52,14,41}, -{52,14,42}, -{52,14,43}, -{52,14,44}, -{52,14,45}, -{52,14,46}, -{52,14,47}, -{52,14,48}, -{52,14,49}, -{52,14,50}, -{52,14,51}, -{52,14,52}, -{52,14,53}, -{52,14,54}, -{52,14,55}, -{52,14,56}, -{52,14,57}, -{52,14,58}, -{52,15,-65}, -{52,15,-64}, -{52,15,-63}, -{52,15,-62}, -{52,15,-61}, -{52,15,-60}, -{52,15,-59}, -{52,15,-58}, -{52,15,-57}, -{52,15,-56}, -{52,15,-55}, -{52,15,-54}, -{52,15,-53}, -{52,15,-52}, -{52,15,-51}, -{52,15,-50}, -{52,15,-49}, -{52,15,-48}, -{52,15,-47}, -{52,15,-46}, -{52,15,-45}, -{52,15,-44}, -{52,15,-43}, -{52,15,-42}, -{52,15,-41}, -{52,15,-40}, -{52,15,-39}, -{52,15,-38}, -{52,15,-37}, -{52,15,-36}, -{52,15,-35}, -{52,15,-34}, -{52,15,-33}, -{52,15,-32}, -{52,15,-31}, -{52,15,-30}, -{52,15,-29}, -{52,15,-28}, -{52,15,-27}, -{52,15,-26}, -{52,15,-25}, -{52,15,-24}, -{52,15,-23}, -{52,15,-22}, -{52,15,-21}, -{52,15,-20}, -{52,15,-19}, -{52,15,-18}, -{52,15,-17}, -{52,15,-16}, -{52,15,-15}, -{52,15,-14}, -{52,15,-13}, -{52,15,-12}, -{52,15,-11}, -{52,15,-10}, -{52,15,-9}, -{52,15,-8}, -{52,15,-7}, -{52,15,-6}, -{52,15,-5}, -{52,15,-4}, -{52,15,-3}, -{52,15,-2}, -{52,15,-1}, -{52,15,0}, -{52,15,1}, -{52,15,2}, -{52,15,3}, -{52,15,4}, -{52,15,5}, -{52,15,6}, -{52,15,7}, -{52,15,8}, -{52,15,9}, -{52,15,10}, -{52,15,11}, -{52,15,12}, -{52,15,13}, -{52,15,14}, -{52,15,15}, -{52,15,16}, -{52,15,17}, -{52,15,18}, -{52,15,19}, -{52,15,20}, -{52,15,21}, -{52,15,22}, -{52,15,23}, -{52,15,24}, -{52,15,25}, -{52,15,26}, -{52,15,27}, -{52,15,28}, -{52,15,29}, -{52,15,30}, -{52,15,31}, -{52,15,32}, -{52,15,33}, -{52,15,34}, -{52,15,35}, -{52,15,36}, -{52,15,37}, -{52,15,38}, -{52,15,39}, -{52,15,40}, -{52,15,41}, -{52,15,42}, -{52,15,43}, -{52,15,44}, -{52,15,45}, -{52,15,46}, -{52,15,47}, -{52,15,48}, -{52,15,49}, -{52,15,50}, -{52,15,51}, -{52,15,52}, -{52,15,53}, -{52,15,54}, -{52,15,55}, -{52,15,56}, -{52,15,57}, -{52,15,58}, -{52,16,-66}, -{52,16,-65}, -{52,16,-64}, -{52,16,-63}, -{52,16,-62}, -{52,16,-61}, -{52,16,-60}, -{52,16,-59}, -{52,16,-58}, -{52,16,-57}, -{52,16,-56}, -{52,16,-55}, -{52,16,-54}, -{52,16,-53}, -{52,16,-52}, -{52,16,-51}, -{52,16,-50}, -{52,16,-49}, -{52,16,-48}, -{52,16,-47}, -{52,16,-46}, -{52,16,-45}, -{52,16,-44}, -{52,16,-43}, -{52,16,-42}, -{52,16,-41}, -{52,16,-40}, -{52,16,-39}, -{52,16,-38}, -{52,16,-37}, -{52,16,-36}, -{52,16,-35}, -{52,16,-34}, -{52,16,-33}, -{52,16,-32}, -{52,16,-31}, -{52,16,-30}, -{52,16,-29}, -{52,16,-28}, -{52,16,-27}, -{52,16,-26}, -{52,16,-25}, -{52,16,-24}, -{52,16,-23}, -{52,16,-22}, -{52,16,-21}, -{52,16,-20}, -{52,16,-19}, -{52,16,-18}, -{52,16,-17}, -{52,16,-16}, -{52,16,-15}, -{52,16,-14}, -{52,16,-13}, -{52,16,-12}, -{52,16,-11}, -{52,16,-10}, -{52,16,-9}, -{52,16,-8}, -{52,16,-7}, -{52,16,-6}, -{52,16,-5}, -{52,16,-4}, -{52,16,-3}, -{52,16,-2}, -{52,16,-1}, -{52,16,0}, -{52,16,1}, -{52,16,2}, -{52,16,3}, -{52,16,4}, -{52,16,5}, -{52,16,6}, -{52,16,7}, -{52,16,8}, -{52,16,9}, -{52,16,10}, -{52,16,11}, -{52,16,12}, -{52,16,13}, -{52,16,14}, -{52,16,15}, -{52,16,16}, -{52,16,17}, -{52,16,18}, -{52,16,19}, -{52,16,20}, -{52,16,21}, -{52,16,22}, -{52,16,23}, -{52,16,24}, -{52,16,25}, -{52,16,26}, -{52,16,27}, -{52,16,28}, -{52,16,29}, -{52,16,30}, -{52,16,31}, -{52,16,32}, -{52,16,33}, -{52,16,34}, -{52,16,35}, -{52,16,36}, -{52,16,37}, -{52,16,38}, -{52,16,39}, -{52,16,40}, -{52,16,41}, -{52,16,42}, -{52,16,43}, -{52,16,44}, -{52,16,45}, -{52,16,46}, -{52,16,47}, -{52,16,48}, -{52,16,49}, -{52,16,50}, -{52,16,51}, -{52,16,52}, -{52,16,53}, -{52,16,54}, -{52,16,55}, -{52,16,56}, -{52,16,57}, -{52,16,58}, -{52,16,59}, -{52,17,-67}, -{52,17,-66}, -{52,17,-65}, -{52,17,-64}, -{52,17,-63}, -{52,17,-62}, -{52,17,-61}, -{52,17,-60}, -{52,17,-59}, -{52,17,-58}, -{52,17,-57}, -{52,17,-56}, -{52,17,-55}, -{52,17,-54}, -{52,17,-53}, -{52,17,-52}, -{52,17,-51}, -{52,17,-50}, -{52,17,-49}, -{52,17,-48}, -{52,17,-47}, -{52,17,-46}, -{52,17,-45}, -{52,17,-44}, -{52,17,-43}, -{52,17,-42}, -{52,17,-41}, -{52,17,-40}, -{52,17,-39}, -{52,17,-38}, -{52,17,-37}, -{52,17,-36}, -{52,17,-35}, -{52,17,-34}, -{52,17,-33}, -{52,17,-32}, -{52,17,-31}, -{52,17,-30}, -{52,17,-29}, -{52,17,-28}, -{52,17,-27}, -{52,17,-26}, -{52,17,-25}, -{52,17,-24}, -{52,17,-23}, -{52,17,-22}, -{52,17,-21}, -{52,17,-20}, -{52,17,-19}, -{52,17,-18}, -{52,17,-17}, -{52,17,-16}, -{52,17,-15}, -{52,17,-14}, -{52,17,-13}, -{52,17,-12}, -{52,17,-11}, -{52,17,-10}, -{52,17,-9}, -{52,17,-8}, -{52,17,-7}, -{52,17,-6}, -{52,17,-5}, -{52,17,-4}, -{52,17,-3}, -{52,17,-2}, -{52,17,-1}, -{52,17,0}, -{52,17,1}, -{52,17,2}, -{52,17,3}, -{52,17,4}, -{52,17,5}, -{52,17,6}, -{52,17,7}, -{52,17,8}, -{52,17,9}, -{52,17,10}, -{52,17,11}, -{52,17,12}, -{52,17,13}, -{52,17,14}, -{52,17,15}, -{52,17,16}, -{52,17,17}, -{52,17,18}, -{52,17,19}, -{52,17,20}, -{52,17,21}, -{52,17,22}, -{52,17,23}, -{52,17,24}, -{52,17,25}, -{52,17,26}, -{52,17,27}, -{52,17,28}, -{52,17,29}, -{52,17,30}, -{52,17,31}, -{52,17,32}, -{52,17,33}, -{52,17,34}, -{52,17,35}, -{52,17,36}, -{52,17,37}, -{52,17,38}, -{52,17,39}, -{52,17,40}, -{52,17,41}, -{52,17,42}, -{52,17,43}, -{52,17,44}, -{52,17,45}, -{52,17,46}, -{52,17,47}, -{52,17,48}, -{52,17,49}, -{52,17,50}, -{52,17,51}, -{52,17,52}, -{52,17,53}, -{52,17,54}, -{52,17,55}, -{52,17,56}, -{52,17,57}, -{52,17,58}, -{52,17,59}, -{52,18,-68}, -{52,18,-67}, -{52,18,-66}, -{52,18,-65}, -{52,18,-64}, -{52,18,-63}, -{52,18,-62}, -{52,18,-61}, -{52,18,-60}, -{52,18,-59}, -{52,18,-58}, -{52,18,-57}, -{52,18,-56}, -{52,18,-55}, -{52,18,-54}, -{52,18,-53}, -{52,18,-52}, -{52,18,-51}, -{52,18,-50}, -{52,18,-49}, -{52,18,-48}, -{52,18,-47}, -{52,18,-46}, -{52,18,-45}, -{52,18,-44}, -{52,18,-43}, -{52,18,-42}, -{52,18,-41}, -{52,18,-40}, -{52,18,-39}, -{52,18,-38}, -{52,18,-37}, -{52,18,-36}, -{52,18,-35}, -{52,18,-34}, -{52,18,-33}, -{52,18,-32}, -{52,18,-31}, -{52,18,-30}, -{52,18,-29}, -{52,18,-28}, -{52,18,-27}, -{52,18,-26}, -{52,18,-25}, -{52,18,-24}, -{52,18,-23}, -{52,18,-22}, -{52,18,-21}, -{52,18,-20}, -{52,18,-19}, -{52,18,-18}, -{52,18,-17}, -{52,18,-16}, -{52,18,-15}, -{52,18,-14}, -{52,18,-13}, -{52,18,-12}, -{52,18,-11}, -{52,18,-10}, -{52,18,-9}, -{52,18,-8}, -{52,18,-7}, -{52,18,-6}, -{52,18,-5}, -{52,18,-4}, -{52,18,-3}, -{52,18,-2}, -{52,18,-1}, -{52,18,0}, -{52,18,1}, -{52,18,2}, -{52,18,3}, -{52,18,4}, -{52,18,5}, -{52,18,6}, -{52,18,7}, -{52,18,8}, -{52,18,9}, -{52,18,10}, -{52,18,11}, -{52,18,12}, -{52,18,13}, -{52,18,14}, -{52,18,15}, -{52,18,16}, -{52,18,17}, -{52,18,18}, -{52,18,19}, -{52,18,20}, -{52,18,21}, -{52,18,22}, -{52,18,23}, -{52,18,24}, -{52,18,25}, -{52,18,26}, -{52,18,27}, -{52,18,28}, -{52,18,29}, -{52,18,30}, -{52,18,31}, -{52,18,32}, -{52,18,33}, -{52,18,34}, -{52,18,35}, -{52,18,36}, -{52,18,37}, -{52,18,38}, -{52,18,39}, -{52,18,40}, -{52,18,41}, -{52,18,42}, -{52,18,43}, -{52,18,44}, -{52,18,45}, -{52,18,46}, -{52,18,47}, -{52,18,48}, -{52,18,49}, -{52,18,50}, -{52,18,51}, -{52,18,52}, -{52,18,53}, -{52,18,54}, -{52,18,55}, -{52,18,56}, -{52,18,57}, -{52,18,58}, -{52,18,59}, -{52,19,-69}, -{52,19,-68}, -{52,19,-67}, -{52,19,-66}, -{52,19,-65}, -{52,19,-64}, -{52,19,-63}, -{52,19,-62}, -{52,19,-61}, -{52,19,-60}, -{52,19,-59}, -{52,19,-58}, -{52,19,-57}, -{52,19,-56}, -{52,19,-55}, -{52,19,-54}, -{52,19,-53}, -{52,19,-52}, -{52,19,-51}, -{52,19,-50}, -{52,19,-49}, -{52,19,-48}, -{52,19,-47}, -{52,19,-46}, -{52,19,-45}, -{52,19,-44}, -{52,19,-43}, -{52,19,-42}, -{52,19,-41}, -{52,19,-40}, -{52,19,-39}, -{52,19,-38}, -{52,19,-37}, -{52,19,-36}, -{52,19,-35}, -{52,19,-34}, -{52,19,-33}, -{52,19,-32}, -{52,19,-31}, -{52,19,-30}, -{52,19,-29}, -{52,19,-28}, -{52,19,-27}, -{52,19,-26}, -{52,19,-25}, -{52,19,-24}, -{52,19,-23}, -{52,19,-22}, -{52,19,-21}, -{52,19,-20}, -{52,19,-19}, -{52,19,-18}, -{52,19,-17}, -{52,19,-16}, -{52,19,-15}, -{52,19,-14}, -{52,19,-13}, -{52,19,-12}, -{52,19,-11}, -{52,19,-10}, -{52,19,-9}, -{52,19,-8}, -{52,19,-7}, -{52,19,-6}, -{52,19,-5}, -{52,19,-4}, -{52,19,-3}, -{52,19,-2}, -{52,19,-1}, -{52,19,0}, -{52,19,1}, -{52,19,2}, -{52,19,3}, -{52,19,4}, -{52,19,5}, -{52,19,6}, -{52,19,7}, -{52,19,8}, -{52,19,9}, -{52,19,10}, -{52,19,11}, -{52,19,12}, -{52,19,13}, -{52,19,14}, -{52,19,15}, -{52,19,16}, -{52,19,17}, -{52,19,18}, -{52,19,19}, -{52,19,20}, -{52,19,21}, -{52,19,22}, -{52,19,23}, -{52,19,24}, -{52,19,25}, -{52,19,26}, -{52,19,27}, -{52,19,28}, -{52,19,29}, -{52,19,30}, -{52,19,31}, -{52,19,32}, -{52,19,33}, -{52,19,34}, -{52,19,35}, -{52,19,36}, -{52,19,37}, -{52,19,38}, -{52,19,39}, -{52,19,40}, -{52,19,41}, -{52,19,42}, -{52,19,43}, -{52,19,44}, -{52,19,45}, -{52,19,46}, -{52,19,47}, -{52,19,48}, -{52,19,49}, -{52,19,50}, -{52,19,51}, -{52,19,52}, -{52,19,53}, -{52,19,54}, -{52,19,55}, -{52,19,56}, -{52,19,57}, -{52,19,58}, -{52,19,59}, -{52,20,-70}, -{52,20,-69}, -{52,20,-68}, -{52,20,-67}, -{52,20,-66}, -{52,20,-65}, -{52,20,-64}, -{52,20,-63}, -{52,20,-62}, -{52,20,-61}, -{52,20,-60}, -{52,20,-59}, -{52,20,-58}, -{52,20,-57}, -{52,20,-56}, -{52,20,-55}, -{52,20,-54}, -{52,20,-53}, -{52,20,-52}, -{52,20,-51}, -{52,20,-50}, -{52,20,-49}, -{52,20,-48}, -{52,20,-47}, -{52,20,-46}, -{52,20,-45}, -{52,20,-44}, -{52,20,-43}, -{52,20,-42}, -{52,20,-41}, -{52,20,-40}, -{52,20,-39}, -{52,20,-38}, -{52,20,-37}, -{52,20,-36}, -{52,20,-35}, -{52,20,-34}, -{52,20,-33}, -{52,20,-32}, -{52,20,-31}, -{52,20,-30}, -{52,20,-29}, -{52,20,-28}, -{52,20,-27}, -{52,20,-26}, -{52,20,-25}, -{52,20,-24}, -{52,20,-23}, -{52,20,-22}, -{52,20,-21}, -{52,20,-20}, -{52,20,-19}, -{52,20,-18}, -{52,20,-17}, -{52,20,-16}, -{52,20,-15}, -{52,20,-14}, -{52,20,-13}, -{52,20,-12}, -{52,20,-11}, -{52,20,-10}, -{52,20,-9}, -{52,20,-8}, -{52,20,-7}, -{52,20,-6}, -{52,20,-5}, -{52,20,-4}, -{52,20,-3}, -{52,20,-2}, -{52,20,-1}, -{52,20,0}, -{52,20,1}, -{52,20,2}, -{52,20,3}, -{52,20,4}, -{52,20,5}, -{52,20,6}, -{52,20,7}, -{52,20,8}, -{52,20,9}, -{52,20,10}, -{52,20,11}, -{52,20,12}, -{52,20,13}, -{52,20,14}, -{52,20,15}, -{52,20,16}, -{52,20,17}, -{52,20,18}, -{52,20,19}, -{52,20,20}, -{52,20,21}, -{52,20,22}, -{52,20,23}, -{52,20,24}, -{52,20,25}, -{52,20,26}, -{52,20,27}, -{52,20,28}, -{52,20,29}, -{52,20,30}, -{52,20,31}, -{52,20,32}, -{52,20,33}, -{52,20,34}, -{52,20,35}, -{52,20,36}, -{52,20,37}, -{52,20,38}, -{52,20,39}, -{52,20,40}, -{52,20,41}, -{52,20,42}, -{52,20,43}, -{52,20,44}, -{52,20,45}, -{52,20,46}, -{52,20,47}, -{52,20,48}, -{52,20,49}, -{52,20,50}, -{52,20,51}, -{52,20,52}, -{52,20,53}, -{52,20,54}, -{52,20,55}, -{52,20,56}, -{52,20,57}, -{52,20,58}, -{52,20,59}, -{52,21,-71}, -{52,21,-70}, -{52,21,-69}, -{52,21,-68}, -{52,21,-67}, -{52,21,-66}, -{52,21,-65}, -{52,21,-64}, -{52,21,-63}, -{52,21,-62}, -{52,21,-61}, -{52,21,-60}, -{52,21,-59}, -{52,21,-58}, -{52,21,-57}, -{52,21,-56}, -{52,21,-55}, -{52,21,-54}, -{52,21,-53}, -{52,21,-52}, -{52,21,-51}, -{52,21,-50}, -{52,21,-49}, -{52,21,-48}, -{52,21,-47}, -{52,21,-46}, -{52,21,-45}, -{52,21,-44}, -{52,21,-43}, -{52,21,-42}, -{52,21,-41}, -{52,21,-40}, -{52,21,-39}, -{52,21,-38}, -{52,21,-37}, -{52,21,-36}, -{52,21,-35}, -{52,21,-34}, -{52,21,-33}, -{52,21,-32}, -{52,21,-31}, -{52,21,-30}, -{52,21,-29}, -{52,21,-28}, -{52,21,-27}, -{52,21,-26}, -{52,21,-25}, -{52,21,-24}, -{52,21,-23}, -{52,21,-22}, -{52,21,-21}, -{52,21,-20}, -{52,21,-19}, -{52,21,-18}, -{52,21,-17}, -{52,21,-16}, -{52,21,-15}, -{52,21,-14}, -{52,21,-13}, -{52,21,-12}, -{52,21,-11}, -{52,21,-10}, -{52,21,-9}, -{52,21,-8}, -{52,21,-7}, -{52,21,-6}, -{52,21,-5}, -{52,21,-4}, -{52,21,-3}, -{52,21,-2}, -{52,21,-1}, -{52,21,0}, -{52,21,1}, -{52,21,2}, -{52,21,3}, -{52,21,4}, -{52,21,5}, -{52,21,6}, -{52,21,7}, -{52,21,8}, -{52,21,9}, -{52,21,10}, -{52,21,11}, -{52,21,12}, -{52,21,13}, -{52,21,14}, -{52,21,15}, -{52,21,16}, -{52,21,17}, -{52,21,18}, -{52,21,19}, -{52,21,20}, -{52,21,21}, -{52,21,22}, -{52,21,23}, -{52,21,24}, -{52,21,25}, -{52,21,26}, -{52,21,27}, -{52,21,28}, -{52,21,29}, -{52,21,30}, -{52,21,31}, -{52,21,32}, -{52,21,33}, -{52,21,34}, -{52,21,35}, -{52,21,36}, -{52,21,37}, -{52,21,38}, -{52,21,39}, -{52,21,40}, -{52,21,41}, -{52,21,42}, -{52,21,43}, -{52,21,44}, -{52,21,45}, -{52,21,46}, -{52,21,47}, -{52,21,48}, -{52,21,49}, -{52,21,50}, -{52,21,51}, -{52,21,52}, -{52,21,53}, -{52,21,54}, -{52,21,55}, -{52,21,56}, -{52,21,57}, -{52,21,58}, -{52,21,59}, -{52,22,-72}, -{52,22,-71}, -{52,22,-70}, -{52,22,-69}, -{52,22,-68}, -{52,22,-67}, -{52,22,-66}, -{52,22,-65}, -{52,22,-64}, -{52,22,-63}, -{52,22,-62}, -{52,22,-61}, -{52,22,-60}, -{52,22,-59}, -{52,22,-58}, -{52,22,-57}, -{52,22,-56}, -{52,22,-55}, -{52,22,-54}, -{52,22,-53}, -{52,22,-52}, -{52,22,-51}, -{52,22,-50}, -{52,22,-49}, -{52,22,-48}, -{52,22,-47}, -{52,22,-46}, -{52,22,-45}, -{52,22,-44}, -{52,22,-43}, -{52,22,-42}, -{52,22,-41}, -{52,22,-40}, -{52,22,-39}, -{52,22,-38}, -{52,22,-37}, -{52,22,-36}, -{52,22,-35}, -{52,22,-34}, -{52,22,-33}, -{52,22,-32}, -{52,22,-31}, -{52,22,-30}, -{52,22,-29}, -{52,22,-28}, -{52,22,-27}, -{52,22,-26}, -{52,22,-25}, -{52,22,-24}, -{52,22,-23}, -{52,22,-22}, -{52,22,-21}, -{52,22,-20}, -{52,22,-19}, -{52,22,-18}, -{52,22,-17}, -{52,22,-16}, -{52,22,-15}, -{52,22,-14}, -{52,22,-13}, -{52,22,-12}, -{52,22,-11}, -{52,22,-10}, -{52,22,-9}, -{52,22,-8}, -{52,22,-7}, -{52,22,-6}, -{52,22,-5}, -{52,22,-4}, -{52,22,-3}, -{52,22,-2}, -{52,22,-1}, -{52,22,0}, -{52,22,1}, -{52,22,2}, -{52,22,3}, -{52,22,4}, -{52,22,5}, -{52,22,6}, -{52,22,7}, -{52,22,8}, -{52,22,9}, -{52,22,10}, -{52,22,11}, -{52,22,12}, -{52,22,13}, -{52,22,14}, -{52,22,15}, -{52,22,16}, -{52,22,17}, -{52,22,18}, -{52,22,19}, -{52,22,20}, -{52,22,21}, -{52,22,22}, -{52,22,23}, -{52,22,24}, -{52,22,25}, -{52,22,26}, -{52,22,27}, -{52,22,28}, -{52,22,29}, -{52,22,30}, -{52,22,31}, -{52,22,32}, -{52,22,33}, -{52,22,34}, -{52,22,35}, -{52,22,36}, -{52,22,37}, -{52,22,38}, -{52,22,39}, -{52,22,40}, -{52,22,41}, -{52,22,42}, -{52,22,43}, -{52,22,44}, -{52,22,45}, -{52,22,46}, -{52,22,47}, -{52,22,48}, -{52,22,49}, -{52,22,50}, -{52,22,51}, -{52,22,52}, -{52,22,53}, -{52,22,54}, -{52,22,55}, -{52,22,56}, -{52,22,57}, -{52,22,58}, -{52,22,59}, -{52,23,-73}, -{52,23,-72}, -{52,23,-71}, -{52,23,-70}, -{52,23,-69}, -{52,23,-68}, -{52,23,-67}, -{52,23,-66}, -{52,23,-65}, -{52,23,-64}, -{52,23,-63}, -{52,23,-62}, -{52,23,-61}, -{52,23,-60}, -{52,23,-59}, -{52,23,-58}, -{52,23,-57}, -{52,23,-56}, -{52,23,-55}, -{52,23,-54}, -{52,23,-53}, -{52,23,-52}, -{52,23,-51}, -{52,23,-50}, -{52,23,-49}, -{52,23,-48}, -{52,23,-47}, -{52,23,-46}, -{52,23,-45}, -{52,23,-44}, -{52,23,-43}, -{52,23,-42}, -{52,23,-41}, -{52,23,-40}, -{52,23,-39}, -{52,23,-38}, -{52,23,-37}, -{52,23,-36}, -{52,23,-35}, -{52,23,-34}, -{52,23,-33}, -{52,23,-32}, -{52,23,-31}, -{52,23,-30}, -{52,23,-29}, -{52,23,-28}, -{52,23,-27}, -{52,23,-26}, -{52,23,-25}, -{52,23,-24}, -{52,23,-23}, -{52,23,-22}, -{52,23,-21}, -{52,23,-20}, -{52,23,-19}, -{52,23,-18}, -{52,23,-17}, -{52,23,-16}, -{52,23,-15}, -{52,23,-14}, -{52,23,-13}, -{52,23,-12}, -{52,23,-11}, -{52,23,-10}, -{52,23,-9}, -{52,23,-8}, -{52,23,-7}, -{52,23,-6}, -{52,23,-5}, -{52,23,-4}, -{52,23,-3}, -{52,23,-2}, -{52,23,-1}, -{52,23,0}, -{52,23,1}, -{52,23,2}, -{52,23,3}, -{52,23,4}, -{52,23,5}, -{52,23,6}, -{52,23,7}, -{52,23,8}, -{52,23,9}, -{52,23,10}, -{52,23,11}, -{52,23,12}, -{52,23,13}, -{52,23,14}, -{52,23,15}, -{52,23,16}, -{52,23,17}, -{52,23,18}, -{52,23,19}, -{52,23,20}, -{52,23,21}, -{52,23,22}, -{52,23,23}, -{52,23,24}, -{52,23,25}, -{52,23,26}, -{52,23,27}, -{52,23,28}, -{52,23,29}, -{52,23,30}, -{52,23,31}, -{52,23,32}, -{52,23,33}, -{52,23,34}, -{52,23,35}, -{52,23,36}, -{52,23,37}, -{52,23,38}, -{52,23,39}, -{52,23,40}, -{52,23,41}, -{52,23,42}, -{52,23,43}, -{52,23,44}, -{52,23,45}, -{52,23,46}, -{52,23,47}, -{52,23,48}, -{52,23,49}, -{52,23,50}, -{52,23,51}, -{52,23,52}, -{52,23,53}, -{52,23,54}, -{52,23,55}, -{52,23,56}, -{52,23,57}, -{52,23,58}, -{52,23,59}, -{52,24,-74}, -{52,24,-73}, -{52,24,-72}, -{52,24,-71}, -{52,24,-70}, -{52,24,-69}, -{52,24,-68}, -{52,24,-67}, -{52,24,-66}, -{52,24,-65}, -{52,24,-64}, -{52,24,-63}, -{52,24,-62}, -{52,24,-61}, -{52,24,-60}, -{52,24,-59}, -{52,24,-58}, -{52,24,-57}, -{52,24,-56}, -{52,24,-55}, -{52,24,-54}, -{52,24,-53}, -{52,24,-52}, -{52,24,-51}, -{52,24,-50}, -{52,24,-49}, -{52,24,-48}, -{52,24,-47}, -{52,24,-46}, -{52,24,-45}, -{52,24,-44}, -{52,24,-43}, -{52,24,-42}, -{52,24,-41}, -{52,24,-40}, -{52,24,-39}, -{52,24,-38}, -{52,24,-37}, -{52,24,-36}, -{52,24,-35}, -{52,24,-34}, -{52,24,-33}, -{52,24,-32}, -{52,24,-31}, -{52,24,-30}, -{52,24,-29}, -{52,24,-28}, -{52,24,-27}, -{52,24,-26}, -{52,24,-25}, -{52,24,-24}, -{52,24,-23}, -{52,24,-22}, -{52,24,-21}, -{52,24,-20}, -{52,24,-19}, -{52,24,-18}, -{52,24,-17}, -{52,24,-16}, -{52,24,-15}, -{52,24,-14}, -{52,24,-13}, -{52,24,-12}, -{52,24,-11}, -{52,24,-10}, -{52,24,-9}, -{52,24,-8}, -{52,24,-7}, -{52,24,-6}, -{52,24,-5}, -{52,24,-4}, -{52,24,-3}, -{52,24,-2}, -{52,24,-1}, -{52,24,0}, -{52,24,1}, -{52,24,2}, -{52,24,3}, -{52,24,4}, -{52,24,5}, -{52,24,6}, -{52,24,7}, -{52,24,8}, -{52,24,9}, -{52,24,10}, -{52,24,11}, -{52,24,12}, -{52,24,13}, -{52,24,14}, -{52,24,15}, -{52,24,16}, -{52,24,17}, -{52,24,18}, -{52,24,19}, -{52,24,20}, -{52,24,21}, -{52,24,22}, -{52,24,23}, -{52,24,24}, -{52,24,25}, -{52,24,26}, -{52,24,27}, -{52,24,28}, -{52,24,29}, -{52,24,30}, -{52,24,31}, -{52,24,32}, -{52,24,33}, -{52,24,34}, -{52,24,35}, -{52,24,36}, -{52,24,37}, -{52,24,38}, -{52,24,39}, -{52,24,40}, -{52,24,41}, -{52,24,42}, -{52,24,43}, -{52,24,44}, -{52,24,45}, -{52,24,46}, -{52,24,47}, -{52,24,48}, -{52,24,49}, -{52,24,50}, -{52,24,51}, -{52,24,52}, -{52,24,53}, -{52,24,54}, -{52,24,55}, -{52,24,56}, -{52,24,57}, -{52,24,58}, -{52,24,59}, -{52,25,-75}, -{52,25,-74}, -{52,25,-73}, -{52,25,-72}, -{52,25,-71}, -{52,25,-70}, -{52,25,-69}, -{52,25,-68}, -{52,25,-67}, -{52,25,-66}, -{52,25,-65}, -{52,25,-64}, -{52,25,-63}, -{52,25,-62}, -{52,25,-61}, -{52,25,-60}, -{52,25,-59}, -{52,25,-58}, -{52,25,-57}, -{52,25,-56}, -{52,25,-55}, -{52,25,-54}, -{52,25,-53}, -{52,25,-52}, -{52,25,-51}, -{52,25,-50}, -{52,25,-49}, -{52,25,-48}, -{52,25,-47}, -{52,25,-46}, -{52,25,-45}, -{52,25,-44}, -{52,25,-43}, -{52,25,-42}, -{52,25,-41}, -{52,25,-40}, -{52,25,-39}, -{52,25,-38}, -{52,25,-37}, -{52,25,-36}, -{52,25,-35}, -{52,25,-34}, -{52,25,-33}, -{52,25,-32}, -{52,25,-31}, -{52,25,-30}, -{52,25,-29}, -{52,25,-28}, -{52,25,-27}, -{52,25,-26}, -{52,25,-25}, -{52,25,-24}, -{52,25,-23}, -{52,25,-22}, -{52,25,-21}, -{52,25,-20}, -{52,25,-19}, -{52,25,-18}, -{52,25,-17}, -{52,25,-16}, -{52,25,-15}, -{52,25,-14}, -{52,25,-13}, -{52,25,-12}, -{52,25,-11}, -{52,25,-10}, -{52,25,-9}, -{52,25,-8}, -{52,25,-7}, -{52,25,-6}, -{52,25,-5}, -{52,25,-4}, -{52,25,-3}, -{52,25,-2}, -{52,25,-1}, -{52,25,0}, -{52,25,1}, -{52,25,2}, -{52,25,3}, -{52,25,4}, -{52,25,5}, -{52,25,6}, -{52,25,7}, -{52,25,8}, -{52,25,9}, -{52,25,10}, -{52,25,11}, -{52,25,12}, -{52,25,13}, -{52,25,14}, -{52,25,15}, -{52,25,16}, -{52,25,17}, -{52,25,18}, -{52,25,19}, -{52,25,20}, -{52,25,21}, -{52,25,22}, -{52,25,23}, -{52,25,24}, -{52,25,25}, -{52,25,26}, -{52,25,27}, -{52,25,28}, -{52,25,29}, -{52,25,30}, -{52,25,31}, -{52,25,32}, -{52,25,33}, -{52,25,34}, -{52,25,35}, -{52,25,36}, -{52,25,37}, -{52,25,38}, -{52,25,39}, -{52,25,40}, -{52,25,41}, -{52,25,42}, -{52,25,43}, -{52,25,44}, -{52,25,45}, -{52,25,46}, -{52,25,47}, -{52,25,48}, -{52,25,49}, -{52,25,50}, -{52,25,51}, -{52,25,52}, -{52,25,53}, -{52,25,54}, -{52,25,55}, -{52,25,56}, -{52,25,57}, -{52,25,58}, -{52,25,59}, -{52,26,-75}, -{52,26,-74}, -{52,26,-73}, -{52,26,-72}, -{52,26,-71}, -{52,26,-70}, -{52,26,-69}, -{52,26,-68}, -{52,26,-67}, -{52,26,-66}, -{52,26,-65}, -{52,26,-64}, -{52,26,-63}, -{52,26,-62}, -{52,26,-61}, -{52,26,-60}, -{52,26,-59}, -{52,26,-58}, -{52,26,-57}, -{52,26,-56}, -{52,26,-55}, -{52,26,-54}, -{52,26,-53}, -{52,26,-52}, -{52,26,-51}, -{52,26,-50}, -{52,26,-49}, -{52,26,-48}, -{52,26,-47}, -{52,26,-46}, -{52,26,-45}, -{52,26,-44}, -{52,26,-43}, -{52,26,-42}, -{52,26,-41}, -{52,26,-40}, -{52,26,-39}, -{52,26,-38}, -{52,26,-37}, -{52,26,-36}, -{52,26,-35}, -{52,26,-34}, -{52,26,-33}, -{52,26,-32}, -{52,26,-31}, -{52,26,-30}, -{52,26,-29}, -{52,26,-28}, -{52,26,-27}, -{52,26,-26}, -{52,26,-25}, -{52,26,-24}, -{52,26,-23}, -{52,26,-22}, -{52,26,-21}, -{52,26,-20}, -{52,26,-19}, -{52,26,-18}, -{52,26,-17}, -{52,26,-16}, -{52,26,-15}, -{52,26,-14}, -{52,26,-13}, -{52,26,-12}, -{52,26,-11}, -{52,26,-10}, -{52,26,-9}, -{52,26,-8}, -{52,26,-7}, -{52,26,-6}, -{52,26,-5}, -{52,26,-4}, -{52,26,-3}, -{52,26,-2}, -{52,26,-1}, -{52,26,0}, -{52,26,1}, -{52,26,2}, -{52,26,3}, -{52,26,4}, -{52,26,5}, -{52,26,6}, -{52,26,7}, -{52,26,8}, -{52,26,9}, -{52,26,10}, -{52,26,11}, -{52,26,12}, -{52,26,13}, -{52,26,14}, -{52,26,15}, -{52,26,16}, -{52,26,17}, -{52,26,18}, -{52,26,19}, -{52,26,20}, -{52,26,21}, -{52,26,22}, -{52,26,23}, -{52,26,24}, -{52,26,25}, -{52,26,26}, -{52,26,27}, -{52,26,28}, -{52,26,29}, -{52,26,30}, -{52,26,31}, -{52,26,32}, -{52,26,33}, -{52,26,34}, -{52,26,35}, -{52,26,36}, -{52,26,37}, -{52,26,38}, -{52,26,39}, -{52,26,40}, -{52,26,41}, -{52,26,42}, -{52,26,43}, -{52,26,44}, -{52,26,45}, -{52,26,46}, -{52,26,47}, -{52,26,48}, -{52,26,49}, -{52,26,50}, -{52,26,51}, -{52,26,52}, -{52,26,53}, -{52,26,54}, -{52,26,55}, -{52,26,56}, -{52,26,57}, -{52,26,58}, -{52,26,59}, -{52,27,-75}, -{52,27,-74}, -{52,27,-73}, -{52,27,-72}, -{52,27,-71}, -{52,27,-70}, -{52,27,-69}, -{52,27,-68}, -{52,27,-67}, -{52,27,-66}, -{52,27,-65}, -{52,27,-64}, -{52,27,-63}, -{52,27,-62}, -{52,27,-61}, -{52,27,-60}, -{52,27,-59}, -{52,27,-58}, -{52,27,-57}, -{52,27,-56}, -{52,27,-55}, -{52,27,-54}, -{52,27,-53}, -{52,27,-52}, -{52,27,-51}, -{52,27,-50}, -{52,27,-49}, -{52,27,-48}, -{52,27,-47}, -{52,27,-46}, -{52,27,-45}, -{52,27,-44}, -{52,27,-43}, -{52,27,-42}, -{52,27,-41}, -{52,27,-40}, -{52,27,-39}, -{52,27,-38}, -{52,27,-37}, -{52,27,-36}, -{52,27,-35}, -{52,27,-34}, -{52,27,-33}, -{52,27,-32}, -{52,27,-31}, -{52,27,-30}, -{52,27,-29}, -{52,27,-28}, -{52,27,-27}, -{52,27,-26}, -{52,27,-25}, -{52,27,-24}, -{52,27,-23}, -{52,27,-22}, -{52,27,-21}, -{52,27,-20}, -{52,27,-19}, -{52,27,-18}, -{52,27,-17}, -{52,27,-16}, -{52,27,-15}, -{52,27,-14}, -{52,27,-13}, -{52,27,-12}, -{52,27,-11}, -{52,27,-10}, -{52,27,-9}, -{52,27,-8}, -{52,27,-7}, -{52,27,-6}, -{52,27,-5}, -{52,27,-4}, -{52,27,-3}, -{52,27,-2}, -{52,27,-1}, -{52,27,0}, -{52,27,1}, -{52,27,2}, -{52,27,3}, -{52,27,4}, -{52,27,5}, -{52,27,6}, -{52,27,7}, -{52,27,8}, -{52,27,9}, -{52,27,10}, -{52,27,11}, -{52,27,12}, -{52,27,13}, -{52,27,14}, -{52,27,15}, -{52,27,16}, -{52,27,17}, -{52,27,18}, -{52,27,19}, -{52,27,20}, -{52,27,21}, -{52,27,22}, -{52,27,23}, -{52,27,24}, -{52,27,25}, -{52,27,26}, -{52,27,27}, -{52,27,28}, -{52,27,29}, -{52,27,30}, -{52,27,31}, -{52,27,32}, -{52,27,33}, -{52,27,34}, -{52,27,35}, -{52,27,36}, -{52,27,37}, -{52,27,38}, -{52,27,39}, -{52,27,40}, -{52,27,41}, -{52,27,42}, -{52,27,43}, -{52,27,44}, -{52,27,45}, -{52,27,46}, -{52,27,47}, -{52,27,48}, -{52,27,49}, -{52,27,50}, -{52,27,51}, -{52,27,52}, -{52,27,53}, -{52,27,54}, -{52,27,55}, -{52,27,56}, -{52,27,57}, -{52,27,58}, -{52,27,59}, -{52,27,60}, -{52,28,-75}, -{52,28,-74}, -{52,28,-73}, -{52,28,-72}, -{52,28,-71}, -{52,28,-70}, -{52,28,-69}, -{52,28,-68}, -{52,28,-67}, -{52,28,-66}, -{52,28,-65}, -{52,28,-64}, -{52,28,-63}, -{52,28,-62}, -{52,28,-61}, -{52,28,-60}, -{52,28,-59}, -{52,28,-58}, -{52,28,-57}, -{52,28,-56}, -{52,28,-55}, -{52,28,-54}, -{52,28,-53}, -{52,28,-52}, -{52,28,-51}, -{52,28,-50}, -{52,28,-49}, -{52,28,-48}, -{52,28,-47}, -{52,28,-46}, -{52,28,-45}, -{52,28,-44}, -{52,28,-43}, -{52,28,-42}, -{52,28,-41}, -{52,28,-40}, -{52,28,-39}, -{52,28,-38}, -{52,28,-37}, -{52,28,-36}, -{52,28,-35}, -{52,28,-34}, -{52,28,-33}, -{52,28,-32}, -{52,28,-31}, -{52,28,-30}, -{52,28,-29}, -{52,28,-28}, -{52,28,-27}, -{52,28,-26}, -{52,28,-25}, -{52,28,-24}, -{52,28,-23}, -{52,28,-22}, -{52,28,-21}, -{52,28,-20}, -{52,28,-19}, -{52,28,-18}, -{52,28,-17}, -{52,28,-16}, -{52,28,-15}, -{52,28,-14}, -{52,28,-13}, -{52,28,-12}, -{52,28,-11}, -{52,28,-10}, -{52,28,-9}, -{52,28,-8}, -{52,28,-7}, -{52,28,-6}, -{52,28,-5}, -{52,28,-4}, -{52,28,-3}, -{52,28,-2}, -{52,28,-1}, -{52,28,0}, -{52,28,1}, -{52,28,2}, -{52,28,3}, -{52,28,4}, -{52,28,5}, -{52,28,6}, -{52,28,7}, -{52,28,8}, -{52,28,9}, -{52,28,10}, -{52,28,11}, -{52,28,12}, -{52,28,13}, -{52,28,14}, -{52,28,15}, -{52,28,16}, -{52,28,17}, -{52,28,18}, -{52,28,19}, -{52,28,20}, -{52,28,21}, -{52,28,22}, -{52,28,23}, -{52,28,24}, -{52,28,25}, -{52,28,26}, -{52,28,27}, -{52,28,28}, -{52,28,29}, -{52,28,30}, -{52,28,31}, -{52,28,32}, -{52,28,33}, -{52,28,34}, -{52,28,35}, -{52,28,36}, -{52,28,37}, -{52,28,38}, -{52,28,39}, -{52,28,40}, -{52,28,41}, -{52,28,42}, -{52,28,43}, -{52,28,44}, -{52,28,45}, -{52,28,46}, -{52,28,47}, -{52,28,48}, -{52,28,49}, -{52,28,50}, -{52,28,51}, -{52,28,52}, -{52,28,53}, -{52,28,54}, -{52,28,55}, -{52,28,56}, -{52,28,57}, -{52,28,58}, -{52,28,59}, -{52,28,60}, -{52,29,-75}, -{52,29,-74}, -{52,29,-73}, -{52,29,-72}, -{52,29,-71}, -{52,29,-70}, -{52,29,-69}, -{52,29,-68}, -{52,29,-67}, -{52,29,-66}, -{52,29,-65}, -{52,29,-64}, -{52,29,-63}, -{52,29,-62}, -{52,29,-61}, -{52,29,-60}, -{52,29,-59}, -{52,29,-58}, -{52,29,-57}, -{52,29,-56}, -{52,29,-55}, -{52,29,-54}, -{52,29,-53}, -{52,29,-52}, -{52,29,-51}, -{52,29,-50}, -{52,29,-49}, -{52,29,-48}, -{52,29,-47}, -{52,29,-46}, -{52,29,-45}, -{52,29,-44}, -{52,29,-43}, -{52,29,-42}, -{52,29,-41}, -{52,29,-40}, -{52,29,-39}, -{52,29,-38}, -{52,29,-37}, -{52,29,-36}, -{52,29,-35}, -{52,29,-34}, -{52,29,-33}, -{52,29,-32}, -{52,29,-31}, -{52,29,-30}, -{52,29,-29}, -{52,29,-28}, -{52,29,-27}, -{52,29,-26}, -{52,29,-25}, -{52,29,-24}, -{52,29,-23}, -{52,29,-22}, -{52,29,-21}, -{52,29,-20}, -{52,29,-19}, -{52,29,-18}, -{52,29,-17}, -{52,29,-16}, -{52,29,-15}, -{52,29,-14}, -{52,29,-13}, -{52,29,-12}, -{52,29,-11}, -{52,29,-10}, -{52,29,-9}, -{52,29,-8}, -{52,29,-7}, -{52,29,-6}, -{52,29,-5}, -{52,29,-4}, -{52,29,-3}, -{52,29,-2}, -{52,29,-1}, -{52,29,0}, -{52,29,1}, -{52,29,2}, -{52,29,3}, -{52,29,4}, -{52,29,5}, -{52,29,6}, -{52,29,7}, -{52,29,8}, -{52,29,9}, -{52,29,10}, -{52,29,11}, -{52,29,12}, -{52,29,13}, -{52,29,14}, -{52,29,15}, -{52,29,16}, -{52,29,17}, -{52,29,18}, -{52,29,19}, -{52,29,20}, -{52,29,21}, -{52,29,22}, -{52,29,23}, -{52,29,24}, -{52,29,25}, -{52,29,26}, -{52,29,27}, -{52,29,28}, -{52,29,29}, -{52,29,30}, -{52,29,31}, -{52,29,32}, -{52,29,33}, -{52,29,34}, -{52,29,35}, -{52,29,36}, -{52,29,37}, -{52,29,38}, -{52,29,39}, -{52,29,40}, -{52,29,41}, -{52,29,42}, -{52,29,43}, -{52,29,44}, -{52,29,45}, -{52,29,46}, -{52,29,47}, -{52,29,48}, -{52,29,49}, -{52,29,50}, -{52,29,51}, -{52,29,52}, -{52,29,53}, -{52,29,54}, -{52,29,55}, -{52,29,56}, -{52,29,57}, -{52,29,58}, -{52,29,59}, -{52,29,60}, -{52,30,-75}, -{52,30,-74}, -{52,30,-73}, -{52,30,-72}, -{52,30,-71}, -{52,30,-70}, -{52,30,-69}, -{52,30,-68}, -{52,30,-67}, -{52,30,-66}, -{52,30,-65}, -{52,30,-64}, -{52,30,-63}, -{52,30,-62}, -{52,30,-61}, -{52,30,-60}, -{52,30,-59}, -{52,30,-58}, -{52,30,-57}, -{52,30,-56}, -{52,30,-55}, -{52,30,-54}, -{52,30,-53}, -{52,30,-52}, -{52,30,-51}, -{52,30,-50}, -{52,30,-49}, -{52,30,-48}, -{52,30,-47}, -{52,30,-46}, -{52,30,-45}, -{52,30,-44}, -{52,30,-43}, -{52,30,-42}, -{52,30,-41}, -{52,30,-40}, -{52,30,-39}, -{52,30,-38}, -{52,30,-37}, -{52,30,-36}, -{52,30,-35}, -{52,30,-34}, -{52,30,-33}, -{52,30,-32}, -{52,30,-31}, -{52,30,-30}, -{52,30,-29}, -{52,30,-28}, -{52,30,-27}, -{52,30,-26}, -{52,30,-25}, -{52,30,-24}, -{52,30,-23}, -{52,30,-22}, -{52,30,-21}, -{52,30,-20}, -{52,30,-19}, -{52,30,-18}, -{52,30,-17}, -{52,30,-16}, -{52,30,-15}, -{52,30,-14}, -{52,30,-13}, -{52,30,-12}, -{52,30,-11}, -{52,30,-10}, -{52,30,-9}, -{52,30,-8}, -{52,30,-7}, -{52,30,-6}, -{52,30,-5}, -{52,30,-4}, -{52,30,-3}, -{52,30,-2}, -{52,30,-1}, -{52,30,0}, -{52,30,1}, -{52,30,2}, -{52,30,3}, -{52,30,4}, -{52,30,5}, -{52,30,6}, -{52,30,7}, -{52,30,8}, -{52,30,9}, -{52,30,10}, -{52,30,11}, -{52,30,12}, -{52,30,13}, -{52,30,14}, -{52,30,15}, -{52,30,16}, -{52,30,17}, -{52,30,18}, -{52,30,19}, -{52,30,20}, -{52,30,21}, -{52,30,22}, -{52,30,23}, -{52,30,24}, -{52,30,25}, -{52,30,26}, -{52,30,27}, -{52,30,28}, -{52,30,29}, -{52,30,30}, -{52,30,31}, -{52,30,32}, -{52,30,33}, -{52,30,34}, -{52,30,35}, -{52,30,36}, -{52,30,37}, -{52,30,38}, -{52,30,39}, -{52,30,40}, -{52,30,41}, -{52,30,42}, -{52,30,43}, -{52,30,44}, -{52,30,45}, -{52,30,46}, -{52,30,47}, -{52,30,48}, -{52,30,49}, -{52,30,50}, -{52,30,51}, -{52,30,52}, -{52,30,53}, -{52,30,54}, -{52,30,55}, -{52,30,56}, -{52,30,57}, -{52,30,58}, -{52,30,59}, -{52,30,60}, -{52,31,-75}, -{52,31,-74}, -{52,31,-73}, -{52,31,-72}, -{52,31,-71}, -{52,31,-70}, -{52,31,-69}, -{52,31,-68}, -{52,31,-67}, -{52,31,-66}, -{52,31,-65}, -{52,31,-64}, -{52,31,-63}, -{52,31,-62}, -{52,31,-61}, -{52,31,-60}, -{52,31,-59}, -{52,31,-58}, -{52,31,-57}, -{52,31,-56}, -{52,31,-55}, -{52,31,-54}, -{52,31,-53}, -{52,31,-52}, -{52,31,-51}, -{52,31,-50}, -{52,31,-49}, -{52,31,-48}, -{52,31,-47}, -{52,31,-46}, -{52,31,-45}, -{52,31,-44}, -{52,31,-43}, -{52,31,-42}, -{52,31,-41}, -{52,31,-40}, -{52,31,-39}, -{52,31,-38}, -{52,31,-37}, -{52,31,-36}, -{52,31,-35}, -{52,31,-34}, -{52,31,-33}, -{52,31,-32}, -{52,31,-31}, -{52,31,-30}, -{52,31,-29}, -{52,31,-28}, -{52,31,-27}, -{52,31,-26}, -{52,31,-25}, -{52,31,-24}, -{52,31,-23}, -{52,31,-22}, -{52,31,-21}, -{52,31,-20}, -{52,31,-19}, -{52,31,-18}, -{52,31,-17}, -{52,31,-16}, -{52,31,-15}, -{52,31,-14}, -{52,31,-13}, -{52,31,-12}, -{52,31,-11}, -{52,31,-10}, -{52,31,-9}, -{52,31,-8}, -{52,31,-7}, -{52,31,-6}, -{52,31,-5}, -{52,31,-4}, -{52,31,-3}, -{52,31,-2}, -{52,31,-1}, -{52,31,0}, -{52,31,1}, -{52,31,2}, -{52,31,3}, -{52,31,4}, -{52,31,5}, -{52,31,6}, -{52,31,7}, -{52,31,8}, -{52,31,9}, -{52,31,10}, -{52,31,11}, -{52,31,12}, -{52,31,13}, -{52,31,14}, -{52,31,15}, -{52,31,16}, -{52,31,17}, -{52,31,18}, -{52,31,19}, -{52,31,20}, -{52,31,21}, -{52,31,22}, -{52,31,23}, -{52,31,24}, -{52,31,25}, -{52,31,26}, -{52,31,27}, -{52,31,28}, -{52,31,29}, -{52,31,30}, -{52,31,31}, -{52,31,32}, -{52,31,33}, -{52,31,34}, -{52,31,35}, -{52,31,36}, -{52,31,37}, -{52,31,38}, -{52,31,39}, -{52,31,40}, -{52,31,41}, -{52,31,42}, -{52,31,43}, -{52,31,44}, -{52,31,45}, -{52,31,46}, -{52,31,47}, -{52,31,48}, -{52,31,49}, -{52,31,50}, -{52,31,51}, -{52,31,52}, -{52,31,53}, -{52,31,54}, -{52,31,55}, -{52,31,56}, -{52,31,57}, -{52,31,58}, -{52,31,59}, -{52,31,60}, -{52,32,-75}, -{52,32,-74}, -{52,32,-73}, -{52,32,-72}, -{52,32,-71}, -{52,32,-70}, -{52,32,-69}, -{52,32,-68}, -{52,32,-67}, -{52,32,-66}, -{52,32,-65}, -{52,32,-64}, -{52,32,-63}, -{52,32,-62}, -{52,32,-61}, -{52,32,-60}, -{52,32,-59}, -{52,32,-58}, -{52,32,-57}, -{52,32,-56}, -{52,32,-55}, -{52,32,-54}, -{52,32,-53}, -{52,32,-52}, -{52,32,-51}, -{52,32,-50}, -{52,32,-49}, -{52,32,-48}, -{52,32,-47}, -{52,32,-46}, -{52,32,-45}, -{52,32,-44}, -{52,32,-43}, -{52,32,-42}, -{52,32,-41}, -{52,32,-40}, -{52,32,-39}, -{52,32,-38}, -{52,32,-37}, -{52,32,-36}, -{52,32,-35}, -{52,32,-34}, -{52,32,-33}, -{52,32,-32}, -{52,32,-31}, -{52,32,-30}, -{52,32,-29}, -{52,32,-28}, -{52,32,-27}, -{52,32,-26}, -{52,32,-25}, -{52,32,-24}, -{52,32,-23}, -{52,32,-22}, -{52,32,-21}, -{52,32,-20}, -{52,32,-19}, -{52,32,-18}, -{52,32,-17}, -{52,32,-16}, -{52,32,-15}, -{52,32,-14}, -{52,32,-13}, -{52,32,-12}, -{52,32,-11}, -{52,32,-10}, -{52,32,-9}, -{52,32,-8}, -{52,32,-7}, -{52,32,-6}, -{52,32,-5}, -{52,32,-4}, -{52,32,-3}, -{52,32,-2}, -{52,32,-1}, -{52,32,0}, -{52,32,1}, -{52,32,2}, -{52,32,3}, -{52,32,4}, -{52,32,5}, -{52,32,6}, -{52,32,7}, -{52,32,8}, -{52,32,9}, -{52,32,10}, -{52,32,11}, -{52,32,12}, -{52,32,13}, -{52,32,14}, -{52,32,15}, -{52,32,16}, -{52,32,17}, -{52,32,18}, -{52,32,19}, -{52,32,20}, -{52,32,21}, -{52,32,22}, -{52,32,23}, -{52,32,24}, -{52,32,25}, -{52,32,26}, -{52,32,27}, -{52,32,28}, -{52,32,29}, -{52,32,30}, -{52,32,31}, -{52,32,32}, -{52,32,33}, -{52,32,34}, -{52,32,35}, -{52,32,36}, -{52,32,37}, -{52,32,38}, -{52,32,39}, -{52,32,40}, -{52,32,41}, -{52,32,42}, -{52,32,43}, -{52,32,44}, -{52,32,45}, -{52,32,46}, -{52,32,47}, -{52,32,48}, -{52,32,49}, -{52,32,50}, -{52,32,51}, -{52,32,52}, -{52,32,53}, -{52,32,54}, -{52,32,55}, -{52,32,56}, -{52,32,57}, -{52,32,58}, -{52,32,59}, -{52,32,60}, -{52,33,-75}, -{52,33,-74}, -{52,33,-73}, -{52,33,-72}, -{52,33,-71}, -{52,33,-70}, -{52,33,-69}, -{52,33,-68}, -{52,33,-67}, -{52,33,-66}, -{52,33,-65}, -{52,33,-64}, -{52,33,-63}, -{52,33,-62}, -{52,33,-61}, -{52,33,-60}, -{52,33,-59}, -{52,33,-58}, -{52,33,-57}, -{52,33,-56}, -{52,33,-55}, -{52,33,-54}, -{52,33,-53}, -{52,33,-52}, -{52,33,-51}, -{52,33,-50}, -{52,33,-49}, -{52,33,-48}, -{52,33,-47}, -{52,33,-46}, -{52,33,-45}, -{52,33,-44}, -{52,33,-43}, -{52,33,-42}, -{52,33,-41}, -{52,33,-40}, -{52,33,-39}, -{52,33,-38}, -{52,33,-37}, -{52,33,-36}, -{52,33,-35}, -{52,33,-34}, -{52,33,-33}, -{52,33,-32}, -{52,33,-31}, -{52,33,-30}, -{52,33,-29}, -{52,33,-28}, -{52,33,-27}, -{52,33,-26}, -{52,33,-25}, -{52,33,-24}, -{52,33,-23}, -{52,33,-22}, -{52,33,-21}, -{52,33,-20}, -{52,33,-19}, -{52,33,-18}, -{52,33,-17}, -{52,33,-16}, -{52,33,-15}, -{52,33,-14}, -{52,33,-13}, -{52,33,-12}, -{52,33,-11}, -{52,33,-10}, -{52,33,-9}, -{52,33,-8}, -{52,33,-7}, -{52,33,-6}, -{52,33,-5}, -{52,33,-4}, -{52,33,-3}, -{52,33,-2}, -{52,33,-1}, -{52,33,0}, -{52,33,1}, -{52,33,2}, -{52,33,3}, -{52,33,4}, -{52,33,5}, -{52,33,6}, -{52,33,7}, -{52,33,8}, -{52,33,9}, -{52,33,10}, -{52,33,11}, -{52,33,12}, -{52,33,13}, -{52,33,14}, -{52,33,15}, -{52,33,16}, -{52,33,17}, -{52,33,18}, -{52,33,19}, -{52,33,20}, -{52,33,21}, -{52,33,22}, -{52,33,23}, -{52,33,24}, -{52,33,25}, -{52,33,26}, -{52,33,27}, -{52,33,28}, -{52,33,29}, -{52,33,30}, -{52,33,31}, -{52,33,32}, -{52,33,33}, -{52,33,34}, -{52,33,35}, -{52,33,36}, -{52,33,37}, -{52,33,38}, -{52,33,39}, -{52,33,40}, -{52,33,41}, -{52,33,42}, -{52,33,43}, -{52,33,44}, -{52,33,45}, -{52,33,46}, -{52,33,47}, -{52,33,48}, -{52,33,49}, -{52,33,50}, -{52,33,51}, -{52,33,52}, -{52,33,53}, -{52,33,54}, -{52,33,55}, -{52,33,56}, -{52,33,57}, -{52,33,58}, -{52,33,59}, -{52,33,60}, -{52,34,-75}, -{52,34,-74}, -{52,34,-73}, -{52,34,-72}, -{52,34,-71}, -{52,34,-70}, -{52,34,-69}, -{52,34,-68}, -{52,34,-67}, -{52,34,-66}, -{52,34,-65}, -{52,34,-64}, -{52,34,-63}, -{52,34,-62}, -{52,34,-61}, -{52,34,-60}, -{52,34,-59}, -{52,34,-58}, -{52,34,-57}, -{52,34,-56}, -{52,34,-55}, -{52,34,-54}, -{52,34,-53}, -{52,34,-52}, -{52,34,-51}, -{52,34,-50}, -{52,34,-49}, -{52,34,-48}, -{52,34,-47}, -{52,34,-46}, -{52,34,-45}, -{52,34,-44}, -{52,34,-43}, -{52,34,-42}, -{52,34,-41}, -{52,34,-40}, -{52,34,-39}, -{52,34,-38}, -{52,34,-37}, -{52,34,-36}, -{52,34,-35}, -{52,34,-34}, -{52,34,-33}, -{52,34,-32}, -{52,34,-31}, -{52,34,-30}, -{52,34,-29}, -{52,34,-28}, -{52,34,-27}, -{52,34,-26}, -{52,34,-25}, -{52,34,-24}, -{52,34,-23}, -{52,34,-22}, -{52,34,-21}, -{52,34,-20}, -{52,34,-19}, -{52,34,-18}, -{52,34,-17}, -{52,34,-16}, -{52,34,-15}, -{52,34,-14}, -{52,34,-13}, -{52,34,-12}, -{52,34,-11}, -{52,34,-10}, -{52,34,-9}, -{52,34,-8}, -{52,34,-7}, -{52,34,-6}, -{52,34,-5}, -{52,34,-4}, -{52,34,-3}, -{52,34,-2}, -{52,34,-1}, -{52,34,0}, -{52,34,1}, -{52,34,2}, -{52,34,3}, -{52,34,4}, -{52,34,5}, -{52,34,6}, -{52,34,7}, -{52,34,8}, -{52,34,9}, -{52,34,10}, -{52,34,11}, -{52,34,12}, -{52,34,13}, -{52,34,14}, -{52,34,15}, -{52,34,16}, -{52,34,17}, -{52,34,18}, -{52,34,19}, -{52,34,20}, -{52,34,21}, -{52,34,22}, -{52,34,23}, -{52,34,24}, -{52,34,25}, -{52,34,26}, -{52,34,27}, -{52,34,28}, -{52,34,29}, -{52,34,30}, -{52,34,31}, -{52,34,32}, -{52,34,33}, -{52,34,34}, -{52,34,35}, -{52,34,36}, -{52,34,37}, -{52,34,38}, -{52,34,39}, -{52,34,40}, -{52,34,41}, -{52,34,42}, -{52,34,43}, -{52,34,44}, -{52,34,45}, -{52,34,46}, -{52,34,47}, -{52,34,48}, -{52,34,49}, -{52,34,50}, -{52,34,51}, -{52,34,52}, -{52,34,53}, -{52,34,54}, -{52,34,55}, -{52,34,56}, -{52,34,57}, -{52,34,58}, -{52,34,59}, -{52,34,60}, -{52,35,-75}, -{52,35,-74}, -{52,35,-73}, -{52,35,-72}, -{52,35,-71}, -{52,35,-70}, -{52,35,-69}, -{52,35,-68}, -{52,35,-67}, -{52,35,-66}, -{52,35,-65}, -{52,35,-64}, -{52,35,-63}, -{52,35,-62}, -{52,35,-61}, -{52,35,-60}, -{52,35,-59}, -{52,35,-58}, -{52,35,-57}, -{52,35,-56}, -{52,35,-55}, -{52,35,-54}, -{52,35,-53}, -{52,35,-52}, -{52,35,-51}, -{52,35,-50}, -{52,35,-49}, -{52,35,-48}, -{52,35,-47}, -{52,35,-46}, -{52,35,-45}, -{52,35,-44}, -{52,35,-43}, -{52,35,-42}, -{52,35,-41}, -{52,35,-40}, -{52,35,-39}, -{52,35,-38}, -{52,35,-37}, -{52,35,-36}, -{52,35,-35}, -{52,35,-34}, -{52,35,-33}, -{52,35,-32}, -{52,35,-31}, -{52,35,-30}, -{52,35,-29}, -{52,35,-28}, -{52,35,-27}, -{52,35,-26}, -{52,35,-25}, -{52,35,-24}, -{52,35,-23}, -{52,35,-22}, -{52,35,-21}, -{52,35,-20}, -{52,35,-19}, -{52,35,-18}, -{52,35,-17}, -{52,35,-16}, -{52,35,-15}, -{52,35,-14}, -{52,35,-13}, -{52,35,-12}, -{52,35,-11}, -{52,35,-10}, -{52,35,-9}, -{52,35,-8}, -{52,35,-7}, -{52,35,-6}, -{52,35,-5}, -{52,35,-4}, -{52,35,-3}, -{52,35,-2}, -{52,35,-1}, -{52,35,0}, -{52,35,1}, -{52,35,2}, -{52,35,3}, -{52,35,4}, -{52,35,5}, -{52,35,6}, -{52,35,7}, -{52,35,8}, -{52,35,9}, -{52,35,10}, -{52,35,11}, -{52,35,12}, -{52,35,13}, -{52,35,14}, -{52,35,15}, -{52,35,16}, -{52,35,17}, -{52,35,18}, -{52,35,19}, -{52,35,20}, -{52,35,21}, -{52,35,22}, -{52,35,23}, -{52,35,24}, -{52,35,25}, -{52,35,26}, -{52,35,27}, -{52,35,28}, -{52,35,29}, -{52,35,30}, -{52,35,31}, -{52,35,32}, -{52,35,33}, -{52,35,34}, -{52,35,35}, -{52,35,36}, -{52,35,37}, -{52,35,38}, -{52,35,39}, -{52,35,40}, -{52,35,41}, -{52,35,42}, -{52,35,43}, -{52,35,44}, -{52,35,45}, -{52,35,46}, -{52,35,47}, -{52,35,48}, -{52,35,49}, -{52,35,50}, -{52,35,51}, -{52,35,52}, -{52,35,53}, -{52,35,54}, -{52,35,55}, -{52,35,56}, -{52,35,57}, -{52,35,58}, -{52,35,59}, -{52,35,60}, -{52,36,-75}, -{52,36,-74}, -{52,36,-73}, -{52,36,-72}, -{52,36,-71}, -{52,36,-70}, -{52,36,-69}, -{52,36,-68}, -{52,36,-67}, -{52,36,-66}, -{52,36,-65}, -{52,36,-64}, -{52,36,-63}, -{52,36,-62}, -{52,36,-61}, -{52,36,-60}, -{52,36,-59}, -{52,36,-58}, -{52,36,-57}, -{52,36,-56}, -{52,36,-55}, -{52,36,-54}, -{52,36,-53}, -{52,36,-52}, -{52,36,-51}, -{52,36,-50}, -{52,36,-49}, -{52,36,-48}, -{52,36,-47}, -{52,36,-46}, -{52,36,-45}, -{52,36,-44}, -{52,36,-43}, -{52,36,-42}, -{52,36,-41}, -{52,36,-40}, -{52,36,-39}, -{52,36,-38}, -{52,36,-37}, -{52,36,-36}, -{52,36,-35}, -{52,36,-34}, -{52,36,-33}, -{52,36,-32}, -{52,36,-31}, -{52,36,-30}, -{52,36,-29}, -{52,36,-28}, -{52,36,-27}, -{52,36,-26}, -{52,36,-25}, -{52,36,-24}, -{52,36,-23}, -{52,36,-22}, -{52,36,-21}, -{52,36,-20}, -{52,36,-19}, -{52,36,-18}, -{52,36,-17}, -{52,36,-16}, -{52,36,-15}, -{52,36,-14}, -{52,36,-13}, -{52,36,-12}, -{52,36,-11}, -{52,36,-10}, -{52,36,-9}, -{52,36,-8}, -{52,36,-7}, -{52,36,-6}, -{52,36,-5}, -{52,36,-4}, -{52,36,-3}, -{52,36,-2}, -{52,36,-1}, -{52,36,0}, -{52,36,1}, -{52,36,2}, -{52,36,3}, -{52,36,4}, -{52,36,5}, -{52,36,6}, -{52,36,7}, -{52,36,8}, -{52,36,9}, -{52,36,10}, -{52,36,11}, -{52,36,12}, -{52,36,13}, -{52,36,14}, -{52,36,15}, -{52,36,16}, -{52,36,17}, -{52,36,18}, -{52,36,19}, -{52,36,20}, -{52,36,21}, -{52,36,22}, -{52,36,23}, -{52,36,24}, -{52,36,25}, -{52,36,26}, -{52,36,27}, -{52,36,28}, -{52,36,29}, -{52,36,30}, -{52,36,31}, -{52,36,32}, -{52,36,33}, -{52,36,34}, -{52,36,35}, -{52,36,36}, -{52,36,37}, -{52,36,38}, -{52,36,39}, -{52,36,40}, -{52,36,41}, -{52,36,42}, -{52,36,43}, -{52,36,44}, -{52,36,45}, -{52,36,46}, -{52,36,47}, -{52,36,48}, -{52,36,49}, -{52,36,50}, -{52,36,51}, -{52,36,52}, -{52,36,53}, -{52,36,54}, -{52,36,55}, -{52,36,56}, -{52,36,57}, -{52,36,58}, -{52,36,59}, -{52,36,60}, -{52,37,-75}, -{52,37,-74}, -{52,37,-73}, -{52,37,-72}, -{52,37,-71}, -{52,37,-70}, -{52,37,-69}, -{52,37,-68}, -{52,37,-67}, -{52,37,-66}, -{52,37,-65}, -{52,37,-64}, -{52,37,-63}, -{52,37,-62}, -{52,37,-61}, -{52,37,-60}, -{52,37,-59}, -{52,37,-58}, -{52,37,-57}, -{52,37,-56}, -{52,37,-55}, -{52,37,-54}, -{52,37,-53}, -{52,37,-52}, -{52,37,-51}, -{52,37,-50}, -{52,37,-49}, -{52,37,-48}, -{52,37,-47}, -{52,37,-46}, -{52,37,-45}, -{52,37,-44}, -{52,37,-43}, -{52,37,-42}, -{52,37,-41}, -{52,37,-40}, -{52,37,-39}, -{52,37,-38}, -{52,37,-37}, -{52,37,-36}, -{52,37,-35}, -{52,37,-34}, -{52,37,-33}, -{52,37,-32}, -{52,37,-31}, -{52,37,-30}, -{52,37,-29}, -{52,37,-28}, -{52,37,-27}, -{52,37,-26}, -{52,37,-25}, -{52,37,-24}, -{52,37,-23}, -{52,37,-22}, -{52,37,-21}, -{52,37,-20}, -{52,37,-19}, -{52,37,-18}, -{52,37,-17}, -{52,37,-16}, -{52,37,-15}, -{52,37,-14}, -{52,37,-13}, -{52,37,-12}, -{52,37,-11}, -{52,37,-10}, -{52,37,-9}, -{52,37,-8}, -{52,37,-7}, -{52,37,-6}, -{52,37,-5}, -{52,37,-4}, -{52,37,-3}, -{52,37,-2}, -{52,37,-1}, -{52,37,0}, -{52,37,1}, -{52,37,2}, -{52,37,3}, -{52,37,4}, -{52,37,5}, -{52,37,6}, -{52,37,7}, -{52,37,8}, -{52,37,9}, -{52,37,10}, -{52,37,11}, -{52,37,12}, -{52,37,13}, -{52,37,14}, -{52,37,15}, -{52,37,16}, -{52,37,17}, -{52,37,18}, -{52,37,19}, -{52,37,20}, -{52,37,21}, -{52,37,22}, -{52,37,23}, -{52,37,24}, -{52,37,25}, -{52,37,26}, -{52,37,27}, -{52,37,28}, -{52,37,29}, -{52,37,30}, -{52,37,31}, -{52,37,32}, -{52,37,33}, -{52,37,34}, -{52,37,35}, -{52,37,36}, -{52,37,37}, -{52,37,38}, -{52,37,39}, -{52,37,40}, -{52,37,41}, -{52,37,42}, -{52,37,43}, -{52,37,44}, -{52,37,45}, -{52,37,46}, -{52,37,47}, -{52,37,48}, -{52,37,49}, -{52,37,50}, -{52,37,51}, -{52,37,52}, -{52,37,53}, -{52,37,54}, -{52,37,55}, -{52,37,56}, -{52,37,57}, -{52,37,58}, -{52,37,59}, -{52,37,60}, -{52,38,-75}, -{52,38,-74}, -{52,38,-73}, -{52,38,-72}, -{52,38,-71}, -{52,38,-70}, -{52,38,-69}, -{52,38,-68}, -{52,38,-67}, -{52,38,-66}, -{52,38,-65}, -{52,38,-64}, -{52,38,-63}, -{52,38,-62}, -{52,38,-61}, -{52,38,-60}, -{52,38,-59}, -{52,38,-58}, -{52,38,-57}, -{52,38,-56}, -{52,38,-55}, -{52,38,-54}, -{52,38,-53}, -{52,38,-52}, -{52,38,-51}, -{52,38,-50}, -{52,38,-49}, -{52,38,-48}, -{52,38,-47}, -{52,38,-46}, -{52,38,-45}, -{52,38,-44}, -{52,38,-43}, -{52,38,-42}, -{52,38,-41}, -{52,38,-40}, -{52,38,-39}, -{52,38,-38}, -{52,38,-37}, -{52,38,-36}, -{52,38,-35}, -{52,38,-34}, -{52,38,-33}, -{52,38,-32}, -{52,38,-31}, -{52,38,-30}, -{52,38,-29}, -{52,38,-28}, -{52,38,-27}, -{52,38,-26}, -{52,38,-25}, -{52,38,-24}, -{52,38,-23}, -{52,38,-22}, -{52,38,-21}, -{52,38,-20}, -{52,38,-19}, -{52,38,-18}, -{52,38,-17}, -{52,38,-16}, -{52,38,-15}, -{52,38,-14}, -{52,38,-13}, -{52,38,-12}, -{52,38,-11}, -{52,38,-10}, -{52,38,-9}, -{52,38,-8}, -{52,38,-7}, -{52,38,-6}, -{52,38,-5}, -{52,38,-4}, -{52,38,-3}, -{52,38,-2}, -{52,38,-1}, -{52,38,0}, -{52,38,1}, -{52,38,2}, -{52,38,3}, -{52,38,4}, -{52,38,5}, -{52,38,6}, -{52,38,7}, -{52,38,8}, -{52,38,9}, -{52,38,10}, -{52,38,11}, -{52,38,12}, -{52,38,13}, -{52,38,14}, -{52,38,15}, -{52,38,16}, -{52,38,17}, -{52,38,18}, -{52,38,19}, -{52,38,20}, -{52,38,21}, -{52,38,22}, -{52,38,23}, -{52,38,24}, -{52,38,25}, -{52,38,26}, -{52,38,27}, -{52,38,28}, -{52,38,29}, -{52,38,30}, -{52,38,31}, -{52,38,32}, -{52,38,33}, -{52,38,34}, -{52,38,35}, -{52,38,36}, -{52,38,37}, -{52,38,38}, -{52,38,39}, -{52,38,40}, -{52,38,41}, -{52,38,42}, -{52,38,43}, -{52,38,44}, -{52,38,45}, -{52,38,46}, -{52,38,47}, -{52,38,48}, -{52,38,49}, -{52,38,50}, -{52,38,51}, -{52,38,52}, -{52,38,53}, -{52,38,54}, -{52,38,55}, -{52,38,56}, -{52,38,57}, -{52,38,58}, -{52,38,59}, -{52,38,60}, -{52,38,61}, -{52,39,-75}, -{52,39,-74}, -{52,39,-73}, -{52,39,-72}, -{52,39,-71}, -{52,39,-70}, -{52,39,-69}, -{52,39,-68}, -{52,39,-67}, -{52,39,-66}, -{52,39,-65}, -{52,39,-64}, -{52,39,-63}, -{52,39,-62}, -{52,39,-61}, -{52,39,-60}, -{52,39,-59}, -{52,39,-58}, -{52,39,-57}, -{52,39,-56}, -{52,39,-55}, -{52,39,-54}, -{52,39,-53}, -{52,39,-52}, -{52,39,-51}, -{52,39,-50}, -{52,39,-49}, -{52,39,-48}, -{52,39,-47}, -{52,39,-46}, -{52,39,-45}, -{52,39,-44}, -{52,39,-43}, -{52,39,-42}, -{52,39,-41}, -{52,39,-40}, -{52,39,-39}, -{52,39,-38}, -{52,39,-37}, -{52,39,-36}, -{52,39,-35}, -{52,39,-34}, -{52,39,-33}, -{52,39,-32}, -{52,39,-31}, -{52,39,-30}, -{52,39,-29}, -{52,39,-28}, -{52,39,-27}, -{52,39,-26}, -{52,39,-25}, -{52,39,-24}, -{52,39,-23}, -{52,39,-22}, -{52,39,-21}, -{52,39,-20}, -{52,39,-19}, -{52,39,-18}, -{52,39,-17}, -{52,39,-16}, -{52,39,-15}, -{52,39,-14}, -{52,39,-13}, -{52,39,-12}, -{52,39,-11}, -{52,39,-10}, -{52,39,-9}, -{52,39,-8}, -{52,39,-7}, -{52,39,-6}, -{52,39,-5}, -{52,39,-4}, -{52,39,-3}, -{52,39,-2}, -{52,39,-1}, -{52,39,0}, -{52,39,1}, -{52,39,2}, -{52,39,3}, -{52,39,4}, -{52,39,5}, -{52,39,6}, -{52,39,7}, -{52,39,8}, -{52,39,9}, -{52,39,10}, -{52,39,11}, -{52,39,12}, -{52,39,13}, -{52,39,14}, -{52,39,15}, -{52,39,16}, -{52,39,17}, -{52,39,18}, -{52,39,19}, -{52,39,20}, -{52,39,21}, -{52,39,22}, -{52,39,23}, -{52,39,24}, -{52,39,25}, -{52,39,26}, -{52,39,27}, -{52,39,28}, -{52,39,29}, -{52,39,30}, -{52,39,31}, -{52,39,32}, -{52,39,33}, -{52,39,34}, -{52,39,35}, -{52,39,36}, -{52,39,37}, -{52,39,38}, -{52,39,39}, -{52,39,40}, -{52,39,41}, -{52,39,42}, -{52,39,43}, -{52,39,44}, -{52,39,45}, -{52,39,46}, -{52,39,47}, -{52,39,48}, -{52,39,49}, -{52,39,50}, -{52,39,51}, -{52,39,52}, -{52,39,53}, -{52,39,54}, -{52,39,55}, -{52,39,56}, -{52,39,57}, -{52,39,58}, -{52,39,59}, -{52,39,60}, -{52,39,61}, -{52,40,-75}, -{52,40,-74}, -{52,40,-73}, -{52,40,-72}, -{52,40,-71}, -{52,40,-70}, -{52,40,-69}, -{52,40,-68}, -{52,40,-67}, -{52,40,-66}, -{52,40,-65}, -{52,40,-64}, -{52,40,-63}, -{52,40,-62}, -{52,40,-61}, -{52,40,-60}, -{52,40,-59}, -{52,40,-58}, -{52,40,-57}, -{52,40,-56}, -{52,40,-55}, -{52,40,-54}, -{52,40,-53}, -{52,40,-52}, -{52,40,-51}, -{52,40,-50}, -{52,40,-49}, -{52,40,-48}, -{52,40,-47}, -{52,40,-46}, -{52,40,-45}, -{52,40,-44}, -{52,40,-43}, -{52,40,-42}, -{52,40,-41}, -{52,40,-40}, -{52,40,-39}, -{52,40,-38}, -{52,40,-37}, -{52,40,-36}, -{52,40,-35}, -{52,40,-34}, -{52,40,-33}, -{52,40,-32}, -{52,40,-31}, -{52,40,-30}, -{52,40,-29}, -{52,40,-28}, -{52,40,-27}, -{52,40,-26}, -{52,40,-25}, -{52,40,-24}, -{52,40,-23}, -{52,40,-22}, -{52,40,-21}, -{52,40,-20}, -{52,40,-19}, -{52,40,-18}, -{52,40,-17}, -{52,40,-16}, -{52,40,-15}, -{52,40,-14}, -{52,40,-13}, -{52,40,-12}, -{52,40,-11}, -{52,40,-10}, -{52,40,-9}, -{52,40,-8}, -{52,40,-7}, -{52,40,-6}, -{52,40,-5}, -{52,40,-4}, -{52,40,-3}, -{52,40,-2}, -{52,40,-1}, -{52,40,0}, -{52,40,1}, -{52,40,2}, -{52,40,3}, -{52,40,4}, -{52,40,5}, -{52,40,6}, -{52,40,7}, -{52,40,8}, -{52,40,9}, -{52,40,10}, -{52,40,11}, -{52,40,12}, -{52,40,13}, -{52,40,14}, -{52,40,15}, -{52,40,16}, -{52,40,17}, -{52,40,18}, -{52,40,19}, -{52,40,20}, -{52,40,21}, -{52,40,22}, -{52,40,23}, -{52,40,24}, -{52,40,25}, -{52,40,26}, -{52,40,27}, -{52,40,28}, -{52,40,29}, -{52,40,30}, -{52,40,31}, -{52,40,32}, -{52,40,33}, -{52,40,34}, -{52,40,35}, -{52,40,36}, -{52,40,37}, -{52,40,38}, -{52,40,39}, -{52,40,40}, -{52,40,41}, -{52,40,42}, -{52,40,43}, -{52,40,44}, -{52,40,45}, -{52,40,46}, -{52,40,47}, -{52,40,48}, -{52,40,49}, -{52,40,50}, -{52,40,51}, -{52,40,52}, -{52,40,53}, -{52,40,54}, -{52,40,55}, -{52,40,56}, -{52,40,57}, -{52,40,58}, -{52,40,59}, -{52,40,60}, -{52,40,61}, -{52,41,-75}, -{52,41,-74}, -{52,41,-73}, -{52,41,-72}, -{52,41,-71}, -{52,41,-70}, -{52,41,-69}, -{52,41,-68}, -{52,41,-67}, -{52,41,-66}, -{52,41,-65}, -{52,41,-64}, -{52,41,-63}, -{52,41,-62}, -{52,41,-61}, -{52,41,-60}, -{52,41,-59}, -{52,41,-58}, -{52,41,-57}, -{52,41,-56}, -{52,41,-55}, -{52,41,-54}, -{52,41,-53}, -{52,41,-52}, -{52,41,-51}, -{52,41,-50}, -{52,41,-49}, -{52,41,-48}, -{52,41,-47}, -{52,41,-46}, -{52,41,-45}, -{52,41,-44}, -{52,41,-43}, -{52,41,-42}, -{52,41,-41}, -{52,41,-40}, -{52,41,-39}, -{52,41,-38}, -{52,41,-37}, -{52,41,-36}, -{52,41,-35}, -{52,41,-34}, -{52,41,-33}, -{52,41,-32}, -{52,41,-31}, -{52,41,-30}, -{52,41,-29}, -{52,41,-28}, -{52,41,-27}, -{52,41,-26}, -{52,41,-25}, -{52,41,-24}, -{52,41,-23}, -{52,41,-22}, -{52,41,-21}, -{52,41,-20}, -{52,41,-19}, -{52,41,-18}, -{52,41,-17}, -{52,41,-16}, -{52,41,-15}, -{52,41,-14}, -{52,41,-13}, -{52,41,-12}, -{52,41,-11}, -{52,41,-10}, -{52,41,-9}, -{52,41,-8}, -{52,41,-7}, -{52,41,-6}, -{52,41,-5}, -{52,41,-4}, -{52,41,-3}, -{52,41,-2}, -{52,41,-1}, -{52,41,0}, -{52,41,1}, -{52,41,2}, -{52,41,3}, -{52,41,4}, -{52,41,5}, -{52,41,6}, -{52,41,7}, -{52,41,8}, -{52,41,9}, -{52,41,10}, -{52,41,11}, -{52,41,12}, -{52,41,13}, -{52,41,14}, -{52,41,15}, -{52,41,16}, -{52,41,17}, -{52,41,18}, -{52,41,19}, -{52,41,20}, -{52,41,21}, -{52,41,22}, -{52,41,23}, -{52,41,24}, -{52,41,25}, -{52,41,26}, -{52,41,27}, -{52,41,28}, -{52,41,29}, -{52,41,30}, -{52,41,31}, -{52,41,32}, -{52,41,33}, -{52,41,34}, -{52,41,35}, -{52,41,36}, -{52,41,37}, -{52,41,38}, -{52,41,39}, -{52,41,40}, -{52,41,41}, -{52,41,42}, -{52,41,43}, -{52,41,44}, -{52,41,45}, -{52,41,46}, -{52,41,47}, -{52,41,48}, -{52,41,49}, -{52,41,50}, -{52,41,51}, -{52,41,52}, -{52,41,53}, -{52,41,54}, -{52,41,55}, -{52,41,56}, -{52,41,57}, -{52,41,58}, -{52,41,59}, -{52,41,60}, -{52,41,61}, -{52,42,-75}, -{52,42,-74}, -{52,42,-73}, -{52,42,-72}, -{52,42,-71}, -{52,42,-70}, -{52,42,-69}, -{52,42,-68}, -{52,42,-67}, -{52,42,-66}, -{52,42,-65}, -{52,42,-64}, -{52,42,-63}, -{52,42,-62}, -{52,42,-61}, -{52,42,-60}, -{52,42,-59}, -{52,42,-58}, -{52,42,-57}, -{52,42,-56}, -{52,42,-55}, -{52,42,-54}, -{52,42,-53}, -{52,42,-52}, -{52,42,-51}, -{52,42,-50}, -{52,42,-49}, -{52,42,-48}, -{52,42,-47}, -{52,42,-46}, -{52,42,-45}, -{52,42,-44}, -{52,42,-43}, -{52,42,-42}, -{52,42,-41}, -{52,42,-40}, -{52,42,-39}, -{52,42,-38}, -{52,42,-37}, -{52,42,-36}, -{52,42,-35}, -{52,42,-34}, -{52,42,-33}, -{52,42,-32}, -{52,42,-31}, -{52,42,-30}, -{52,42,-29}, -{52,42,-28}, -{52,42,-27}, -{52,42,-26}, -{52,42,-25}, -{52,42,-24}, -{52,42,-23}, -{52,42,-22}, -{52,42,-21}, -{52,42,-20}, -{52,42,-19}, -{52,42,-18}, -{52,42,-17}, -{52,42,-16}, -{52,42,-15}, -{52,42,-14}, -{52,42,-13}, -{52,42,-12}, -{52,42,-11}, -{52,42,-10}, -{52,42,-9}, -{52,42,-8}, -{52,42,-7}, -{52,42,-6}, -{52,42,-5}, -{52,42,-4}, -{52,42,-3}, -{52,42,-2}, -{52,42,-1}, -{52,42,0}, -{52,42,1}, -{52,42,2}, -{52,42,3}, -{52,42,4}, -{52,42,5}, -{52,42,6}, -{52,42,7}, -{52,42,8}, -{52,42,9}, -{52,42,10}, -{52,42,11}, -{52,42,12}, -{52,42,13}, -{52,42,14}, -{52,42,15}, -{52,42,16}, -{52,42,17}, -{52,42,18}, -{52,42,19}, -{52,42,20}, -{52,42,21}, -{52,42,22}, -{52,42,23}, -{52,42,24}, -{52,42,25}, -{52,42,26}, -{52,42,27}, -{52,42,28}, -{52,42,29}, -{52,42,30}, -{52,42,31}, -{52,42,32}, -{52,42,33}, -{52,42,34}, -{52,42,35}, -{52,42,36}, -{52,42,37}, -{52,42,38}, -{52,42,39}, -{52,42,40}, -{52,42,41}, -{52,42,42}, -{52,42,43}, -{52,42,44}, -{52,42,45}, -{52,42,46}, -{52,42,47}, -{52,42,48}, -{52,42,49}, -{52,42,50}, -{52,42,51}, -{52,42,52}, -{52,42,53}, -{52,42,54}, -{52,42,55}, -{52,42,56}, -{52,42,57}, -{52,42,58}, -{52,42,59}, -{52,42,60}, -{52,42,61}, -{52,43,-75}, -{52,43,-74}, -{52,43,-73}, -{52,43,-72}, -{52,43,-71}, -{52,43,-70}, -{52,43,-69}, -{52,43,-68}, -{52,43,-67}, -{52,43,-66}, -{52,43,-65}, -{52,43,-64}, -{52,43,-63}, -{52,43,-62}, -{52,43,-61}, -{52,43,-60}, -{52,43,-59}, -{52,43,-58}, -{52,43,-57}, -{52,43,-56}, -{52,43,-55}, -{52,43,-54}, -{52,43,-53}, -{52,43,-52}, -{52,43,-51}, -{52,43,-50}, -{52,43,-49}, -{52,43,-48}, -{52,43,-47}, -{52,43,-46}, -{52,43,-45}, -{52,43,-44}, -{52,43,-43}, -{52,43,-42}, -{52,43,-41}, -{52,43,-40}, -{52,43,-39}, -{52,43,-38}, -{52,43,-37}, -{52,43,-36}, -{52,43,-35}, -{52,43,-34}, -{52,43,-33}, -{52,43,-32}, -{52,43,-31}, -{52,43,-30}, -{52,43,-29}, -{52,43,-28}, -{52,43,-27}, -{52,43,-26}, -{52,43,-25}, -{52,43,-24}, -{52,43,-23}, -{52,43,-22}, -{52,43,-21}, -{52,43,-20}, -{52,43,-19}, -{52,43,-18}, -{52,43,-17}, -{52,43,-16}, -{52,43,-15}, -{52,43,-14}, -{52,43,-13}, -{52,43,-12}, -{52,43,-11}, -{52,43,-10}, -{52,43,-9}, -{52,43,-8}, -{52,43,-7}, -{52,43,-6}, -{52,43,-5}, -{52,43,-4}, -{52,43,-3}, -{52,43,-2}, -{52,43,-1}, -{52,43,0}, -{52,43,1}, -{52,43,2}, -{52,43,3}, -{52,43,4}, -{52,43,5}, -{52,43,6}, -{52,43,7}, -{52,43,8}, -{52,43,9}, -{52,43,10}, -{52,43,11}, -{52,43,12}, -{52,43,13}, -{52,43,14}, -{52,43,15}, -{52,43,16}, -{52,43,17}, -{52,43,18}, -{52,43,19}, -{52,43,20}, -{52,43,21}, -{52,43,22}, -{52,43,23}, -{52,43,24}, -{52,43,25}, -{52,43,26}, -{52,43,27}, -{52,43,28}, -{52,43,29}, -{52,43,30}, -{52,43,31}, -{52,43,32}, -{52,43,33}, -{52,43,34}, -{52,43,35}, -{52,43,36}, -{52,43,37}, -{52,43,38}, -{52,43,39}, -{52,43,40}, -{52,43,41}, -{52,43,42}, -{52,43,43}, -{52,43,44}, -{52,43,45}, -{52,43,46}, -{52,43,47}, -{52,43,48}, -{52,43,49}, -{52,43,50}, -{52,43,51}, -{52,43,52}, -{52,43,53}, -{52,43,54}, -{52,43,55}, -{52,43,56}, -{52,43,57}, -{52,43,58}, -{52,43,59}, -{52,43,60}, -{52,43,61}, -{52,44,-75}, -{52,44,-74}, -{52,44,-73}, -{52,44,-72}, -{52,44,-71}, -{52,44,-70}, -{52,44,-69}, -{52,44,-68}, -{52,44,-67}, -{52,44,-66}, -{52,44,-65}, -{52,44,-64}, -{52,44,-63}, -{52,44,-62}, -{52,44,-61}, -{52,44,-60}, -{52,44,-59}, -{52,44,-58}, -{52,44,-57}, -{52,44,-56}, -{52,44,-55}, -{52,44,-54}, -{52,44,-53}, -{52,44,-52}, -{52,44,-51}, -{52,44,-50}, -{52,44,-49}, -{52,44,-48}, -{52,44,-47}, -{52,44,-46}, -{52,44,-45}, -{52,44,-44}, -{52,44,-43}, -{52,44,-42}, -{52,44,-41}, -{52,44,-40}, -{52,44,-39}, -{52,44,-38}, -{52,44,-37}, -{52,44,-36}, -{52,44,-35}, -{52,44,-34}, -{52,44,-33}, -{52,44,-32}, -{52,44,-31}, -{52,44,-30}, -{52,44,-29}, -{52,44,-28}, -{52,44,-27}, -{52,44,-26}, -{52,44,-25}, -{52,44,-24}, -{52,44,-23}, -{52,44,-22}, -{52,44,-21}, -{52,44,-20}, -{52,44,-19}, -{52,44,-18}, -{52,44,-17}, -{52,44,-16}, -{52,44,-15}, -{52,44,-14}, -{52,44,-13}, -{52,44,-12}, -{52,44,-11}, -{52,44,-10}, -{52,44,-9}, -{52,44,-8}, -{52,44,-7}, -{52,44,-6}, -{52,44,-5}, -{52,44,-4}, -{52,44,-3}, -{52,44,-2}, -{52,44,-1}, -{52,44,0}, -{52,44,1}, -{52,44,2}, -{52,44,3}, -{52,44,4}, -{52,44,5}, -{52,44,6}, -{52,44,7}, -{52,44,8}, -{52,44,9}, -{52,44,10}, -{52,44,11}, -{52,44,12}, -{52,44,13}, -{52,44,14}, -{52,44,15}, -{52,44,16}, -{52,44,17}, -{52,44,18}, -{52,44,19}, -{52,44,20}, -{52,44,21}, -{52,44,22}, -{52,44,23}, -{52,44,24}, -{52,44,25}, -{52,44,26}, -{52,44,27}, -{52,44,28}, -{52,44,29}, -{52,44,30}, -{52,44,31}, -{52,44,32}, -{52,44,33}, -{52,44,34}, -{52,44,35}, -{52,44,36}, -{52,44,37}, -{52,44,38}, -{52,44,39}, -{52,44,40}, -{52,44,41}, -{52,44,42}, -{52,44,43}, -{52,44,44}, -{52,44,45}, -{52,44,46}, -{52,44,47}, -{52,44,48}, -{52,44,49}, -{52,44,50}, -{52,44,51}, -{52,44,52}, -{52,44,53}, -{52,44,54}, -{52,44,55}, -{52,44,56}, -{52,44,57}, -{52,44,58}, -{52,44,59}, -{52,44,60}, -{52,44,61}, -{52,45,-75}, -{52,45,-74}, -{52,45,-73}, -{52,45,-72}, -{52,45,-71}, -{52,45,-70}, -{52,45,-69}, -{52,45,-68}, -{52,45,-67}, -{52,45,-66}, -{52,45,-65}, -{52,45,-64}, -{52,45,-63}, -{52,45,-62}, -{52,45,-61}, -{52,45,-60}, -{52,45,-59}, -{52,45,-58}, -{52,45,-57}, -{52,45,-56}, -{52,45,-55}, -{52,45,-54}, -{52,45,-53}, -{52,45,-52}, -{52,45,-51}, -{52,45,-50}, -{52,45,-49}, -{52,45,-48}, -{52,45,-47}, -{52,45,-46}, -{52,45,-45}, -{52,45,-44}, -{52,45,-43}, -{52,45,-42}, -{52,45,-41}, -{52,45,-40}, -{52,45,-39}, -{52,45,-38}, -{52,45,-37}, -{52,45,-36}, -{52,45,-35}, -{52,45,-34}, -{52,45,-33}, -{52,45,-32}, -{52,45,-31}, -{52,45,-30}, -{52,45,-29}, -{52,45,-28}, -{52,45,-27}, -{52,45,-26}, -{52,45,-25}, -{52,45,-24}, -{52,45,-23}, -{52,45,-22}, -{52,45,-21}, -{52,45,-20}, -{52,45,-19}, -{52,45,-18}, -{52,45,-17}, -{52,45,-16}, -{52,45,-15}, -{52,45,-14}, -{52,45,-13}, -{52,45,-12}, -{52,45,-11}, -{52,45,-10}, -{52,45,-9}, -{52,45,-8}, -{52,45,-7}, -{52,45,-6}, -{52,45,-5}, -{52,45,-4}, -{52,45,-3}, -{52,45,-2}, -{52,45,-1}, -{52,45,0}, -{52,45,1}, -{52,45,2}, -{52,45,3}, -{52,45,4}, -{52,45,5}, -{52,45,6}, -{52,45,7}, -{52,45,8}, -{52,45,9}, -{52,45,10}, -{52,45,11}, -{52,45,12}, -{52,45,13}, -{52,45,14}, -{52,45,15}, -{52,45,16}, -{52,45,17}, -{52,45,18}, -{52,45,19}, -{52,45,20}, -{52,45,21}, -{52,45,22}, -{52,45,23}, -{52,45,24}, -{52,45,25}, -{52,45,26}, -{52,45,27}, -{52,45,28}, -{52,45,29}, -{52,45,30}, -{52,45,31}, -{52,45,32}, -{52,45,33}, -{52,45,34}, -{52,45,35}, -{52,45,36}, -{52,45,37}, -{52,45,38}, -{52,45,39}, -{52,45,40}, -{52,45,41}, -{52,45,42}, -{52,45,43}, -{52,45,44}, -{52,45,45}, -{52,45,46}, -{52,45,47}, -{52,45,48}, -{52,45,49}, -{52,45,50}, -{52,45,51}, -{52,45,52}, -{52,45,53}, -{52,45,54}, -{52,45,55}, -{52,45,56}, -{52,45,57}, -{52,45,58}, -{52,45,59}, -{52,45,60}, -{52,45,61}, -{52,46,-75}, -{52,46,-74}, -{52,46,-73}, -{52,46,-72}, -{52,46,-71}, -{52,46,-70}, -{52,46,-69}, -{52,46,-68}, -{52,46,-67}, -{52,46,-66}, -{52,46,-65}, -{52,46,-64}, -{52,46,-63}, -{52,46,-62}, -{52,46,-61}, -{52,46,-60}, -{52,46,-59}, -{52,46,-58}, -{52,46,-57}, -{52,46,-56}, -{52,46,-55}, -{52,46,-54}, -{52,46,-53}, -{52,46,-52}, -{52,46,-51}, -{52,46,-50}, -{52,46,-49}, -{52,46,-48}, -{52,46,-47}, -{52,46,-46}, -{52,46,-45}, -{52,46,-44}, -{52,46,-43}, -{52,46,-42}, -{52,46,-41}, -{52,46,-40}, -{52,46,-39}, -{52,46,-38}, -{52,46,-37}, -{52,46,-36}, -{52,46,-35}, -{52,46,-34}, -{52,46,-33}, -{52,46,-32}, -{52,46,-31}, -{52,46,-30}, -{52,46,-29}, -{52,46,-28}, -{52,46,-27}, -{52,46,-26}, -{52,46,-25}, -{52,46,-24}, -{52,46,-23}, -{52,46,-22}, -{52,46,-21}, -{52,46,-20}, -{52,46,-19}, -{52,46,-18}, -{52,46,-17}, -{52,46,-16}, -{52,46,-15}, -{52,46,-14}, -{52,46,-13}, -{52,46,-12}, -{52,46,-11}, -{52,46,-10}, -{52,46,-9}, -{52,46,-8}, -{52,46,-7}, -{52,46,-6}, -{52,46,-5}, -{52,46,-4}, -{52,46,-3}, -{52,46,-2}, -{52,46,-1}, -{52,46,0}, -{52,46,1}, -{52,46,2}, -{52,46,3}, -{52,46,4}, -{52,46,5}, -{52,46,6}, -{52,46,7}, -{52,46,8}, -{52,46,9}, -{52,46,10}, -{52,46,11}, -{52,46,12}, -{52,46,13}, -{52,46,14}, -{52,46,15}, -{52,46,16}, -{52,46,17}, -{52,46,18}, -{52,46,19}, -{52,46,20}, -{52,46,21}, -{52,46,22}, -{52,46,23}, -{52,46,24}, -{52,46,25}, -{52,46,26}, -{52,46,27}, -{52,46,28}, -{52,46,29}, -{52,46,30}, -{52,46,31}, -{52,46,32}, -{52,46,33}, -{52,46,34}, -{52,46,35}, -{52,46,36}, -{52,46,37}, -{52,46,38}, -{52,46,39}, -{52,46,40}, -{52,46,41}, -{52,46,42}, -{52,46,43}, -{52,46,44}, -{52,46,45}, -{52,46,46}, -{52,46,47}, -{52,46,48}, -{52,46,49}, -{52,46,50}, -{52,46,51}, -{52,46,52}, -{52,46,53}, -{52,46,54}, -{52,46,55}, -{52,46,56}, -{52,46,57}, -{52,46,58}, -{52,46,59}, -{52,46,60}, -{52,46,61}, -{52,47,-75}, -{52,47,-74}, -{52,47,-73}, -{52,47,-72}, -{52,47,-71}, -{52,47,-70}, -{52,47,-69}, -{52,47,-68}, -{52,47,-67}, -{52,47,-66}, -{52,47,-65}, -{52,47,-64}, -{52,47,-63}, -{52,47,-62}, -{52,47,-61}, -{52,47,-60}, -{52,47,-59}, -{52,47,-58}, -{52,47,-57}, -{52,47,-56}, -{52,47,-55}, -{52,47,-54}, -{52,47,-53}, -{52,47,-52}, -{52,47,-51}, -{52,47,-50}, -{52,47,-49}, -{52,47,-48}, -{52,47,-47}, -{52,47,-46}, -{52,47,-45}, -{52,47,-44}, -{52,47,-43}, -{52,47,-42}, -{52,47,-41}, -{52,47,-40}, -{52,47,-39}, -{52,47,-38}, -{52,47,-37}, -{52,47,-36}, -{52,47,-35}, -{52,47,-34}, -{52,47,-33}, -{52,47,-32}, -{52,47,-31}, -{52,47,-30}, -{52,47,-29}, -{52,47,-28}, -{52,47,-27}, -{52,47,-26}, -{52,47,-25}, -{52,47,-24}, -{52,47,-23}, -{52,47,-22}, -{52,47,-21}, -{52,47,-20}, -{52,47,-19}, -{52,47,-18}, -{52,47,-17}, -{52,47,-16}, -{52,47,-15}, -{52,47,-14}, -{52,47,-13}, -{52,47,-12}, -{52,47,-11}, -{52,47,-10}, -{52,47,-9}, -{52,47,-8}, -{52,47,-7}, -{52,47,-6}, -{52,47,-5}, -{52,47,-4}, -{52,47,-3}, -{52,47,-2}, -{52,47,-1}, -{52,47,0}, -{52,47,1}, -{52,47,2}, -{52,47,3}, -{52,47,4}, -{52,47,5}, -{52,47,6}, -{52,47,7}, -{52,47,8}, -{52,47,9}, -{52,47,10}, -{52,47,11}, -{52,47,12}, -{52,47,13}, -{52,47,14}, -{52,47,15}, -{52,47,16}, -{52,47,17}, -{52,47,18}, -{52,47,19}, -{52,47,20}, -{52,47,21}, -{52,47,22}, -{52,47,23}, -{52,47,24}, -{52,47,25}, -{52,47,26}, -{52,47,27}, -{52,47,28}, -{52,47,29}, -{52,47,30}, -{52,47,31}, -{52,47,32}, -{52,47,33}, -{52,47,34}, -{52,47,35}, -{52,47,36}, -{52,47,37}, -{52,47,38}, -{52,47,39}, -{52,47,40}, -{52,47,41}, -{52,47,42}, -{52,47,43}, -{52,47,44}, -{52,47,45}, -{52,47,46}, -{52,47,47}, -{52,47,48}, -{52,47,49}, -{52,47,50}, -{52,47,51}, -{52,47,52}, -{52,47,53}, -{52,47,54}, -{52,47,55}, -{52,47,56}, -{52,47,57}, -{52,47,58}, -{52,47,59}, -{52,47,60}, -{52,47,61}, -{52,47,62}, -{52,48,-75}, -{52,48,-74}, -{52,48,-73}, -{52,48,-72}, -{52,48,-71}, -{52,48,-70}, -{52,48,-69}, -{52,48,-68}, -{52,48,-67}, -{52,48,-66}, -{52,48,-65}, -{52,48,-64}, -{52,48,-63}, -{52,48,-62}, -{52,48,-61}, -{52,48,-60}, -{52,48,-59}, -{52,48,-58}, -{52,48,-57}, -{52,48,-56}, -{52,48,-55}, -{52,48,-54}, -{52,48,-53}, -{52,48,-52}, -{52,48,-51}, -{52,48,-50}, -{52,48,-49}, -{52,48,-48}, -{52,48,-47}, -{52,48,-46}, -{52,48,-45}, -{52,48,-44}, -{52,48,-43}, -{52,48,-42}, -{52,48,-41}, -{52,48,-40}, -{52,48,-39}, -{52,48,-38}, -{52,48,-37}, -{52,48,-36}, -{52,48,-35}, -{52,48,-34}, -{52,48,-33}, -{52,48,-32}, -{52,48,-31}, -{52,48,-30}, -{52,48,-29}, -{52,48,-28}, -{52,48,-27}, -{52,48,-26}, -{52,48,-25}, -{52,48,-24}, -{52,48,-23}, -{52,48,-22}, -{52,48,-21}, -{52,48,-20}, -{52,48,-19}, -{52,48,-18}, -{52,48,-17}, -{52,48,-16}, -{52,48,-15}, -{52,48,-14}, -{52,48,-13}, -{52,48,-12}, -{52,48,-11}, -{52,48,-10}, -{52,48,-9}, -{52,48,-8}, -{52,48,-7}, -{52,48,-6}, -{52,48,-5}, -{52,48,-4}, -{52,48,-3}, -{52,48,-2}, -{52,48,-1}, -{52,48,0}, -{52,48,1}, -{52,48,2}, -{52,48,3}, -{52,48,4}, -{52,48,5}, -{52,48,6}, -{52,48,7}, -{52,48,8}, -{52,48,9}, -{52,48,10}, -{52,48,11}, -{52,48,12}, -{52,48,13}, -{52,48,14}, -{52,48,15}, -{52,48,16}, -{52,48,17}, -{52,48,18}, -{52,48,19}, -{52,48,20}, -{52,48,21}, -{52,48,22}, -{52,48,23}, -{52,48,24}, -{52,48,25}, -{52,48,26}, -{52,48,27}, -{52,48,28}, -{52,48,29}, -{52,48,30}, -{52,48,31}, -{52,48,32}, -{52,48,33}, -{52,48,34}, -{52,48,35}, -{52,48,36}, -{52,48,37}, -{52,48,38}, -{52,48,39}, -{52,48,40}, -{52,48,41}, -{52,48,42}, -{52,48,43}, -{52,48,44}, -{52,48,45}, -{52,48,46}, -{52,48,47}, -{52,48,48}, -{52,48,49}, -{52,48,50}, -{52,48,51}, -{52,48,52}, -{52,48,53}, -{52,48,54}, -{52,48,55}, -{52,48,56}, -{52,48,57}, -{52,48,58}, -{52,48,59}, -{52,48,60}, -{52,48,61}, -{52,48,62}, -{52,49,-75}, -{52,49,-74}, -{52,49,-73}, -{52,49,-72}, -{52,49,-71}, -{52,49,-70}, -{52,49,-69}, -{52,49,-68}, -{52,49,-67}, -{52,49,-66}, -{52,49,-65}, -{52,49,-64}, -{52,49,-63}, -{52,49,-62}, -{52,49,-61}, -{52,49,-60}, -{52,49,-59}, -{52,49,-58}, -{52,49,-57}, -{52,49,-56}, -{52,49,-55}, -{52,49,-54}, -{52,49,-53}, -{52,49,-52}, -{52,49,-51}, -{52,49,-50}, -{52,49,-49}, -{52,49,-48}, -{52,49,-47}, -{52,49,-46}, -{52,49,-45}, -{52,49,-44}, -{52,49,-43}, -{52,49,-42}, -{52,49,-41}, -{52,49,-40}, -{52,49,-39}, -{52,49,-38}, -{52,49,-37}, -{52,49,-36}, -{52,49,-35}, -{52,49,-34}, -{52,49,-33}, -{52,49,-32}, -{52,49,-31}, -{52,49,-30}, -{52,49,-29}, -{52,49,-28}, -{52,49,-27}, -{52,49,-26}, -{52,49,-25}, -{52,49,-24}, -{52,49,-23}, -{52,49,-22}, -{52,49,-21}, -{52,49,-20}, -{52,49,-19}, -{52,49,-18}, -{52,49,-17}, -{52,49,-16}, -{52,49,-15}, -{52,49,-14}, -{52,49,-13}, -{52,49,-12}, -{52,49,-11}, -{52,49,-10}, -{52,49,-9}, -{52,49,-8}, -{52,49,-7}, -{52,49,-6}, -{52,49,-5}, -{52,49,-4}, -{52,49,-3}, -{52,49,-2}, -{52,49,-1}, -{52,49,0}, -{52,49,1}, -{52,49,2}, -{52,49,3}, -{52,49,4}, -{52,49,5}, -{52,49,6}, -{52,49,7}, -{52,49,8}, -{52,49,9}, -{52,49,10}, -{52,49,11}, -{52,49,12}, -{52,49,13}, -{52,49,14}, -{52,49,15}, -{52,49,16}, -{52,49,17}, -{52,49,18}, -{52,49,19}, -{52,49,20}, -{52,49,21}, -{52,49,22}, -{52,49,23}, -{52,49,24}, -{52,49,25}, -{52,49,26}, -{52,49,27}, -{52,49,28}, -{52,49,29}, -{52,49,30}, -{52,49,31}, -{52,49,32}, -{52,49,33}, -{52,49,34}, -{52,49,35}, -{52,49,36}, -{52,49,37}, -{52,49,38}, -{52,49,39}, -{52,49,40}, -{52,49,41}, -{52,49,42}, -{52,49,43}, -{52,49,44}, -{52,49,45}, -{52,49,46}, -{52,49,47}, -{52,49,48}, -{52,49,49}, -{52,49,50}, -{52,49,51}, -{52,49,52}, -{52,49,53}, -{52,49,54}, -{52,49,55}, -{52,49,56}, -{52,49,57}, -{52,49,58}, -{52,49,59}, -{52,49,60}, -{52,49,61}, -{52,49,62}, -{52,50,-75}, -{52,50,-74}, -{52,50,-73}, -{52,50,-72}, -{52,50,-71}, -{52,50,-70}, -{52,50,-69}, -{52,50,-68}, -{52,50,-67}, -{52,50,-66}, -{52,50,-65}, -{52,50,-64}, -{52,50,-63}, -{52,50,-62}, -{52,50,-61}, -{52,50,-60}, -{52,50,-59}, -{52,50,-58}, -{52,50,-57}, -{52,50,-56}, -{52,50,-55}, -{52,50,-54}, -{52,50,-53}, -{52,50,-52}, -{52,50,-51}, -{52,50,-50}, -{52,50,-49}, -{52,50,-48}, -{52,50,-47}, -{52,50,-46}, -{52,50,-45}, -{52,50,-44}, -{52,50,-43}, -{52,50,-42}, -{52,50,-41}, -{52,50,-40}, -{52,50,-39}, -{52,50,-38}, -{52,50,-37}, -{52,50,-36}, -{52,50,-35}, -{52,50,-34}, -{52,50,-33}, -{52,50,-32}, -{52,50,-31}, -{52,50,-30}, -{52,50,-29}, -{52,50,-28}, -{52,50,-27}, -{52,50,-26}, -{52,50,-25}, -{52,50,-24}, -{52,50,-23}, -{52,50,-22}, -{52,50,-21}, -{52,50,-20}, -{52,50,-19}, -{52,50,-18}, -{52,50,-17}, -{52,50,-16}, -{52,50,-15}, -{52,50,-14}, -{52,50,-13}, -{52,50,-12}, -{52,50,-11}, -{52,50,-10}, -{52,50,-9}, -{52,50,-8}, -{52,50,-7}, -{52,50,-6}, -{52,50,-5}, -{52,50,-4}, -{52,50,-3}, -{52,50,-2}, -{52,50,-1}, -{52,50,0}, -{52,50,1}, -{52,50,2}, -{52,50,3}, -{52,50,4}, -{52,50,5}, -{52,50,6}, -{52,50,7}, -{52,50,8}, -{52,50,9}, -{52,50,10}, -{52,50,11}, -{52,50,12}, -{52,50,13}, -{52,50,14}, -{52,50,15}, -{52,50,16}, -{52,50,17}, -{52,50,18}, -{52,50,19}, -{52,50,20}, -{52,50,21}, -{52,50,22}, -{52,50,23}, -{52,50,24}, -{52,50,25}, -{52,50,26}, -{52,50,27}, -{52,50,28}, -{52,50,29}, -{52,50,30}, -{52,50,31}, -{52,50,32}, -{52,50,33}, -{52,50,34}, -{52,50,35}, -{52,50,36}, -{52,50,37}, -{52,50,38}, -{52,50,39}, -{52,50,40}, -{52,50,41}, -{52,50,42}, -{52,50,43}, -{52,50,44}, -{52,50,45}, -{52,50,46}, -{52,50,47}, -{52,50,48}, -{52,50,49}, -{52,50,50}, -{52,50,51}, -{52,50,52}, -{52,50,53}, -{52,50,54}, -{52,50,55}, -{52,50,56}, -{52,50,57}, -{52,50,58}, -{52,50,59}, -{52,50,60}, -{52,50,61}, -{52,50,62}, -{52,51,-75}, -{52,51,-74}, -{52,51,-73}, -{52,51,-72}, -{52,51,-71}, -{52,51,-70}, -{52,51,-69}, -{52,51,-68}, -{52,51,-67}, -{52,51,-66}, -{52,51,-65}, -{52,51,-64}, -{52,51,-63}, -{52,51,-62}, -{52,51,-61}, -{52,51,-60}, -{52,51,-59}, -{52,51,-58}, -{52,51,-57}, -{52,51,-56}, -{52,51,-55}, -{52,51,-54}, -{52,51,-53}, -{52,51,-52}, -{52,51,-51}, -{52,51,-50}, -{52,51,-49}, -{52,51,-48}, -{52,51,-47}, -{52,51,-46}, -{52,51,-45}, -{52,51,-44}, -{52,51,-43}, -{52,51,-42}, -{52,51,-41}, -{52,51,-40}, -{52,51,-39}, -{52,51,-38}, -{52,51,-37}, -{52,51,-36}, -{52,51,-35}, -{52,51,-34}, -{52,51,-33}, -{52,51,-32}, -{52,51,-31}, -{52,51,-30}, -{52,51,-29}, -{52,51,-28}, -{52,51,-27}, -{52,51,-26}, -{52,51,-25}, -{52,51,-24}, -{52,51,-23}, -{52,51,-22}, -{52,51,-21}, -{52,51,-20}, -{52,51,-19}, -{52,51,-18}, -{52,51,-17}, -{52,51,-16}, -{52,51,-15}, -{52,51,-14}, -{52,51,-13}, -{52,51,-12}, -{52,51,-11}, -{52,51,-10}, -{52,51,-9}, -{52,51,-8}, -{52,51,-7}, -{52,51,-6}, -{52,51,-5}, -{52,51,-4}, -{52,51,-3}, -{52,51,-2}, -{52,51,-1}, -{52,51,0}, -{52,51,1}, -{52,51,2}, -{52,51,3}, -{52,51,4}, -{52,51,5}, -{52,51,6}, -{52,51,7}, -{52,51,8}, -{52,51,9}, -{52,51,10}, -{52,51,11}, -{52,51,12}, -{52,51,13}, -{52,51,14}, -{52,51,15}, -{52,51,16}, -{52,51,17}, -{52,51,18}, -{52,51,19}, -{52,51,20}, -{52,51,21}, -{52,51,22}, -{52,51,23}, -{52,51,24}, -{52,51,25}, -{52,51,26}, -{52,51,27}, -{52,51,28}, -{52,51,29}, -{52,51,30}, -{52,51,31}, -{52,51,32}, -{52,51,33}, -{52,51,34}, -{52,51,35}, -{52,51,36}, -{52,51,37}, -{52,51,38}, -{52,51,39}, -{52,51,40}, -{52,51,41}, -{52,51,42}, -{52,51,43}, -{52,51,44}, -{52,51,45}, -{52,51,46}, -{52,51,47}, -{52,51,48}, -{52,51,49}, -{52,51,50}, -{52,51,51}, -{52,51,52}, -{52,51,53}, -{52,51,54}, -{52,51,55}, -{52,51,56}, -{52,51,57}, -{52,51,58}, -{52,51,59}, -{52,51,60}, -{52,51,61}, -{52,51,62}, -{52,52,-75}, -{52,52,-74}, -{52,52,-73}, -{52,52,-72}, -{52,52,-71}, -{52,52,-70}, -{52,52,-69}, -{52,52,-68}, -{52,52,-67}, -{52,52,-66}, -{52,52,-65}, -{52,52,-64}, -{52,52,-63}, -{52,52,-62}, -{52,52,-61}, -{52,52,-60}, -{52,52,-59}, -{52,52,-58}, -{52,52,-57}, -{52,52,-56}, -{52,52,-55}, -{52,52,-54}, -{52,52,-53}, -{52,52,-52}, -{52,52,-51}, -{52,52,-50}, -{52,52,-49}, -{52,52,-48}, -{52,52,-47}, -{52,52,-46}, -{52,52,-45}, -{52,52,-44}, -{52,52,-43}, -{52,52,-42}, -{52,52,-41}, -{52,52,-40}, -{52,52,-39}, -{52,52,-38}, -{52,52,-37}, -{52,52,-36}, -{52,52,-35}, -{52,52,-34}, -{52,52,-33}, -{52,52,-32}, -{52,52,-31}, -{52,52,-30}, -{52,52,-29}, -{52,52,-28}, -{52,52,-27}, -{52,52,-26}, -{52,52,-25}, -{52,52,-24}, -{52,52,-23}, -{52,52,-22}, -{52,52,-21}, -{52,52,-20}, -{52,52,-19}, -{52,52,-18}, -{52,52,-17}, -{52,52,-16}, -{52,52,-15}, -{52,52,-14}, -{52,52,-13}, -{52,52,-12}, -{52,52,-11}, -{52,52,-10}, -{52,52,-9}, -{52,52,-8}, -{52,52,-7}, -{52,52,-6}, -{52,52,-5}, -{52,52,-4}, -{52,52,-3}, -{52,52,-2}, -{52,52,-1}, -{52,52,0}, -{52,52,1}, -{52,52,2}, -{52,52,3}, -{52,52,4}, -{52,52,5}, -{52,52,6}, -{52,52,7}, -{52,52,8}, -{52,52,9}, -{52,52,10}, -{52,52,11}, -{52,52,12}, -{52,52,13}, -{52,52,14}, -{52,52,15}, -{52,52,16}, -{52,52,17}, -{52,52,18}, -{52,52,19}, -{52,52,20}, -{52,52,21}, -{52,52,22}, -{52,52,23}, -{52,52,24}, -{52,52,25}, -{52,52,26}, -{52,52,27}, -{52,52,28}, -{52,52,29}, -{52,52,30}, -{52,52,31}, -{52,52,32}, -{52,52,33}, -{52,52,34}, -{52,52,35}, -{52,52,36}, -{52,52,37}, -{52,52,38}, -{52,52,39}, -{52,52,40}, -{52,52,41}, -{52,52,42}, -{52,52,43}, -{52,52,44}, -{52,52,45}, -{52,52,46}, -{52,52,47}, -{52,52,48}, -{52,52,49}, -{52,52,50}, -{52,52,51}, -{52,52,52}, -{52,52,53}, -{52,52,54}, -{52,52,55}, -{52,52,56}, -{52,52,57}, -{52,52,58}, -{52,52,59}, -{52,52,60}, -{52,52,61}, -{52,52,62}, -{52,53,-75}, -{52,53,-74}, -{52,53,-73}, -{52,53,-72}, -{52,53,-71}, -{52,53,-70}, -{52,53,-69}, -{52,53,-68}, -{52,53,-67}, -{52,53,-66}, -{52,53,-65}, -{52,53,-64}, -{52,53,-63}, -{52,53,-62}, -{52,53,-61}, -{52,53,-60}, -{52,53,-59}, -{52,53,-58}, -{52,53,-57}, -{52,53,-56}, -{52,53,-55}, -{52,53,-54}, -{52,53,-53}, -{52,53,-52}, -{52,53,-51}, -{52,53,-50}, -{52,53,-49}, -{52,53,-48}, -{52,53,-47}, -{52,53,-46}, -{52,53,-45}, -{52,53,-44}, -{52,53,-43}, -{52,53,-42}, -{52,53,-41}, -{52,53,-40}, -{52,53,-39}, -{52,53,-38}, -{52,53,-37}, -{52,53,-36}, -{52,53,-35}, -{52,53,-34}, -{52,53,-33}, -{52,53,-32}, -{52,53,-31}, -{52,53,-30}, -{52,53,-29}, -{52,53,-28}, -{52,53,-27}, -{52,53,-26}, -{52,53,-25}, -{52,53,-24}, -{52,53,-23}, -{52,53,-22}, -{52,53,-21}, -{52,53,-20}, -{52,53,-19}, -{52,53,-18}, -{52,53,-17}, -{52,53,-16}, -{52,53,-15}, -{52,53,-14}, -{52,53,-13}, -{52,53,-12}, -{52,53,-11}, -{52,53,-10}, -{52,53,-9}, -{52,53,-8}, -{52,53,-7}, -{52,53,-6}, -{52,53,-5}, -{52,53,-4}, -{52,53,-3}, -{52,53,-2}, -{52,53,-1}, -{52,53,0}, -{52,53,1}, -{52,53,2}, -{52,53,3}, -{52,53,4}, -{52,53,5}, -{52,53,6}, -{52,53,7}, -{52,53,8}, -{52,53,9}, -{52,53,10}, -{52,53,11}, -{52,53,12}, -{52,53,13}, -{52,53,14}, -{52,53,15}, -{52,53,16}, -{52,53,17}, -{52,53,18}, -{52,53,19}, -{52,53,20}, -{52,53,21}, -{52,53,22}, -{52,53,23}, -{52,53,24}, -{52,53,25}, -{52,53,26}, -{52,53,27}, -{52,53,28}, -{52,53,29}, -{52,53,30}, -{52,53,31}, -{52,53,32}, -{52,53,33}, -{52,53,34}, -{52,53,35}, -{52,53,36}, -{52,53,37}, -{52,53,38}, -{52,53,39}, -{52,53,40}, -{52,53,41}, -{52,53,42}, -{52,53,43}, -{52,53,44}, -{52,53,45}, -{52,53,46}, -{52,53,47}, -{52,53,48}, -{52,53,49}, -{52,53,50}, -{52,53,51}, -{52,53,52}, -{52,53,53}, -{52,53,54}, -{52,53,55}, -{52,53,56}, -{52,53,57}, -{52,53,58}, -{52,53,59}, -{52,53,60}, -{52,53,61}, -{52,53,62}, -{52,54,-75}, -{52,54,-74}, -{52,54,-73}, -{52,54,-72}, -{52,54,-71}, -{52,54,-70}, -{52,54,-69}, -{52,54,-68}, -{52,54,-67}, -{52,54,-66}, -{52,54,-65}, -{52,54,-64}, -{52,54,-63}, -{52,54,-62}, -{52,54,-61}, -{52,54,-60}, -{52,54,-59}, -{52,54,-58}, -{52,54,-57}, -{52,54,-56}, -{52,54,-55}, -{52,54,-54}, -{52,54,-53}, -{52,54,-52}, -{52,54,-51}, -{52,54,-50}, -{52,54,-49}, -{52,54,-48}, -{52,54,-47}, -{52,54,-46}, -{52,54,-45}, -{52,54,-44}, -{52,54,-43}, -{52,54,-42}, -{52,54,-41}, -{52,54,-40}, -{52,54,-39}, -{52,54,-38}, -{52,54,-37}, -{52,54,-36}, -{52,54,-35}, -{52,54,-34}, -{52,54,-33}, -{52,54,-32}, -{52,54,-31}, -{52,54,-30}, -{52,54,-29}, -{52,54,-28}, -{52,54,-27}, -{52,54,-26}, -{52,54,-25}, -{52,54,-24}, -{52,54,-23}, -{52,54,-22}, -{52,54,-21}, -{52,54,-20}, -{52,54,-19}, -{52,54,-18}, -{52,54,-17}, -{52,54,-16}, -{52,54,-15}, -{52,54,-14}, -{52,54,-13}, -{52,54,-12}, -{52,54,-11}, -{52,54,-10}, -{52,54,-9}, -{52,54,-8}, -{52,54,-7}, -{52,54,-6}, -{52,54,-5}, -{52,54,-4}, -{52,54,-3}, -{52,54,-2}, -{52,54,-1}, -{52,54,0}, -{52,54,1}, -{52,54,2}, -{52,54,3}, -{52,54,4}, -{52,54,5}, -{52,54,6}, -{52,54,7}, -{52,54,8}, -{52,54,9}, -{52,54,10}, -{52,54,11}, -{52,54,12}, -{52,54,13}, -{52,54,14}, -{52,54,15}, -{52,54,16}, -{52,54,17}, -{52,54,18}, -{52,54,19}, -{52,54,20}, -{52,54,21}, -{52,54,22}, -{52,54,23}, -{52,54,24}, -{52,54,25}, -{52,54,26}, -{52,54,27}, -{52,54,28}, -{52,54,29}, -{52,54,30}, -{52,54,31}, -{52,54,32}, -{52,54,33}, -{52,54,34}, -{52,54,35}, -{52,54,36}, -{52,54,37}, -{52,54,38}, -{52,54,39}, -{52,54,40}, -{52,54,41}, -{52,54,42}, -{52,54,43}, -{52,54,44}, -{52,54,45}, -{52,54,46}, -{52,54,47}, -{52,54,48}, -{52,54,49}, -{52,54,50}, -{52,54,51}, -{52,54,52}, -{52,54,53}, -{52,54,54}, -{52,54,55}, -{52,54,56}, -{52,54,57}, -{52,54,58}, -{52,54,59}, -{52,54,60}, -{52,54,61}, -{52,54,62}, -{52,55,-75}, -{52,55,-74}, -{52,55,-73}, -{52,55,-72}, -{52,55,-71}, -{52,55,-70}, -{52,55,-69}, -{52,55,-68}, -{52,55,-67}, -{52,55,-66}, -{52,55,-65}, -{52,55,-64}, -{52,55,-63}, -{52,55,-62}, -{52,55,-61}, -{52,55,-60}, -{52,55,-59}, -{52,55,-58}, -{52,55,-57}, -{52,55,-56}, -{52,55,-55}, -{52,55,-54}, -{52,55,-53}, -{52,55,-52}, -{52,55,-51}, -{52,55,-50}, -{52,55,-49}, -{52,55,-48}, -{52,55,-47}, -{52,55,-46}, -{52,55,-45}, -{52,55,-44}, -{52,55,-43}, -{52,55,-42}, -{52,55,-41}, -{52,55,-40}, -{52,55,-39}, -{52,55,-38}, -{52,55,-37}, -{52,55,-36}, -{52,55,-35}, -{52,55,-34}, -{52,55,-33}, -{52,55,-32}, -{52,55,-31}, -{52,55,-30}, -{52,55,-29}, -{52,55,-28}, -{52,55,-27}, -{52,55,-26}, -{52,55,-25}, -{52,55,-24}, -{52,55,-23}, -{52,55,-22}, -{52,55,-21}, -{52,55,-20}, -{52,55,-19}, -{52,55,-18}, -{52,55,-17}, -{52,55,-16}, -{52,55,-15}, -{52,55,-14}, -{52,55,-13}, -{52,55,-12}, -{52,55,-11}, -{52,55,-10}, -{52,55,-9}, -{52,55,-8}, -{52,55,-7}, -{52,55,-6}, -{52,55,-5}, -{52,55,-4}, -{52,55,-3}, -{52,55,-2}, -{52,55,-1}, -{52,55,0}, -{52,55,1}, -{52,55,2}, -{52,55,3}, -{52,55,4}, -{52,55,5}, -{52,55,6}, -{52,55,7}, -{52,55,8}, -{52,55,9}, -{52,55,10}, -{52,55,11}, -{52,55,12}, -{52,55,13}, -{52,55,14}, -{52,55,15}, -{52,55,16}, -{52,55,17}, -{52,55,18}, -{52,55,19}, -{52,55,20}, -{52,55,21}, -{52,55,22}, -{52,55,23}, -{52,55,24}, -{52,55,25}, -{52,55,26}, -{52,55,27}, -{52,55,28}, -{52,55,29}, -{52,55,30}, -{52,55,31}, -{52,55,32}, -{52,55,33}, -{52,55,34}, -{52,55,35}, -{52,55,36}, -{52,55,37}, -{52,55,38}, -{52,55,39}, -{52,55,40}, -{52,55,41}, -{52,55,42}, -{52,55,43}, -{52,55,44}, -{52,55,45}, -{52,55,46}, -{52,55,47}, -{52,55,48}, -{52,55,49}, -{52,55,50}, -{52,55,51}, -{52,55,52}, -{52,55,53}, -{52,55,54}, -{52,55,55}, -{52,55,56}, -{52,55,57}, -{52,55,58}, -{52,55,59}, -{52,55,60}, -{52,55,61}, -{52,55,62}, -{52,56,-75}, -{52,56,-74}, -{52,56,-73}, -{52,56,-72}, -{52,56,-71}, -{52,56,-70}, -{52,56,-69}, -{52,56,-68}, -{52,56,-67}, -{52,56,-66}, -{52,56,-65}, -{52,56,-64}, -{52,56,-63}, -{52,56,-62}, -{52,56,-61}, -{52,56,-60}, -{52,56,-59}, -{52,56,-58}, -{52,56,-57}, -{52,56,-56}, -{52,56,-55}, -{52,56,-54}, -{52,56,-53}, -{52,56,-52}, -{52,56,-51}, -{52,56,-50}, -{52,56,-49}, -{52,56,-48}, -{52,56,-47}, -{52,56,-46}, -{52,56,-45}, -{52,56,-44}, -{52,56,-43}, -{52,56,-42}, -{52,56,-41}, -{52,56,-40}, -{52,56,-39}, -{52,56,-38}, -{52,56,-37}, -{52,56,-36}, -{52,56,-35}, -{52,56,-34}, -{52,56,-33}, -{52,56,-32}, -{52,56,-31}, -{52,56,-30}, -{52,56,-29}, -{52,56,-28}, -{52,56,-27}, -{52,56,-26}, -{52,56,-25}, -{52,56,-24}, -{52,56,-23}, -{52,56,-22}, -{52,56,-21}, -{52,56,-20}, -{52,56,-19}, -{52,56,-18}, -{52,56,-17}, -{52,56,-16}, -{52,56,-15}, -{52,56,-14}, -{52,56,-13}, -{52,56,-12}, -{52,56,-11}, -{52,56,-10}, -{52,56,-9}, -{52,56,-8}, -{52,56,-7}, -{52,56,-6}, -{52,56,-5}, -{52,56,-4}, -{52,56,-3}, -{52,56,-2}, -{52,56,-1}, -{52,56,0}, -{52,56,1}, -{52,56,2}, -{52,56,3}, -{52,56,4}, -{52,56,5}, -{52,56,6}, -{52,56,7}, -{52,56,8}, -{52,56,9}, -{52,56,10}, -{52,56,11}, -{52,56,12}, -{52,56,13}, -{52,56,14}, -{52,56,15}, -{52,56,16}, -{52,56,17}, -{52,56,18}, -{52,56,19}, -{52,56,20}, -{52,56,21}, -{52,56,22}, -{52,56,23}, -{52,56,24}, -{52,56,25}, -{52,56,26}, -{52,56,27}, -{52,56,28}, -{52,56,29}, -{52,56,30}, -{52,56,31}, -{52,56,32}, -{52,56,33}, -{52,56,34}, -{52,56,35}, -{52,56,36}, -{52,56,37}, -{52,56,38}, -{52,56,39}, -{52,56,40}, -{52,56,41}, -{52,56,42}, -{52,56,43}, -{52,56,44}, -{52,56,45}, -{52,56,46}, -{52,56,47}, -{52,56,48}, -{52,56,49}, -{52,56,50}, -{52,56,51}, -{52,56,52}, -{52,56,53}, -{52,56,54}, -{52,56,55}, -{52,56,56}, -{52,56,57}, -{52,56,58}, -{52,56,59}, -{52,56,60}, -{52,56,61}, -{52,56,62}, -{52,56,63}, -{52,57,-75}, -{52,57,-74}, -{52,57,-73}, -{52,57,-72}, -{52,57,-71}, -{52,57,-70}, -{52,57,-69}, -{52,57,-68}, -{52,57,-67}, -{52,57,-66}, -{52,57,-65}, -{52,57,-64}, -{52,57,-63}, -{52,57,-62}, -{52,57,-61}, -{52,57,-60}, -{52,57,-59}, -{52,57,-58}, -{52,57,-57}, -{52,57,-56}, -{52,57,-55}, -{52,57,-54}, -{52,57,-53}, -{52,57,-52}, -{52,57,-51}, -{52,57,-50}, -{52,57,-49}, -{52,57,-48}, -{52,57,-47}, -{52,57,-46}, -{52,57,-45}, -{52,57,-44}, -{52,57,-43}, -{52,57,-42}, -{52,57,-41}, -{52,57,-40}, -{52,57,-39}, -{52,57,-38}, -{52,57,-37}, -{52,57,-36}, -{52,57,-35}, -{52,57,-34}, -{52,57,-33}, -{52,57,-32}, -{52,57,-31}, -{52,57,-30}, -{52,57,-29}, -{52,57,-28}, -{52,57,-27}, -{52,57,-26}, -{52,57,-25}, -{52,57,-24}, -{52,57,-23}, -{52,57,-22}, -{52,57,-21}, -{52,57,-20}, -{52,57,-19}, -{52,57,-18}, -{52,57,-17}, -{52,57,-16}, -{52,57,-15}, -{52,57,-14}, -{52,57,-13}, -{52,57,-12}, -{52,57,-11}, -{52,57,-10}, -{52,57,-9}, -{52,57,-8}, -{52,57,-7}, -{52,57,-6}, -{52,57,-5}, -{52,57,-4}, -{52,57,-3}, -{52,57,-2}, -{52,57,-1}, -{52,57,0}, -{52,57,1}, -{52,57,2}, -{52,57,3}, -{52,57,4}, -{52,57,5}, -{52,57,6}, -{52,57,7}, -{52,57,8}, -{52,57,9}, -{52,57,10}, -{52,57,11}, -{52,57,12}, -{52,57,13}, -{52,57,14}, -{52,57,15}, -{52,57,16}, -{52,57,17}, -{52,57,18}, -{52,57,19}, -{52,57,20}, -{52,57,21}, -{52,57,22}, -{52,57,23}, -{52,57,24}, -{52,57,25}, -{52,57,26}, -{52,57,27}, -{52,57,28}, -{52,57,29}, -{52,57,30}, -{52,57,31}, -{52,57,32}, -{52,57,33}, -{52,57,34}, -{52,57,35}, -{52,57,36}, -{52,57,37}, -{52,57,38}, -{52,57,39}, -{52,57,40}, -{52,57,41}, -{52,57,42}, -{52,57,43}, -{52,57,44}, -{52,57,45}, -{52,57,46}, -{52,57,47}, -{52,57,48}, -{52,57,49}, -{52,57,50}, -{52,57,51}, -{52,57,52}, -{52,57,53}, -{52,57,54}, -{52,57,55}, -{52,57,56}, -{52,57,57}, -{52,57,58}, -{52,57,59}, -{52,57,60}, -{52,57,61}, -{52,57,62}, -{52,57,63}, -{52,58,-75}, -{52,58,-74}, -{52,58,-73}, -{52,58,-72}, -{52,58,-71}, -{52,58,-70}, -{52,58,-69}, -{52,58,-68}, -{52,58,-67}, -{52,58,-66}, -{52,58,-65}, -{52,58,-64}, -{52,58,-63}, -{52,58,-62}, -{52,58,-61}, -{52,58,-60}, -{52,58,-59}, -{52,58,-58}, -{52,58,-57}, -{52,58,-56}, -{52,58,-55}, -{52,58,-54}, -{52,58,-53}, -{52,58,-52}, -{52,58,-51}, -{52,58,-50}, -{52,58,-49}, -{52,58,-48}, -{52,58,-47}, -{52,58,-46}, -{52,58,-45}, -{52,58,-44}, -{52,58,-43}, -{52,58,-42}, -{52,58,-41}, -{52,58,-40}, -{52,58,-39}, -{52,58,-38}, -{52,58,-37}, -{52,58,-36}, -{52,58,-35}, -{52,58,-34}, -{52,58,-33}, -{52,58,-32}, -{52,58,-31}, -{52,58,-30}, -{52,58,-29}, -{52,58,-28}, -{52,58,-27}, -{52,58,-26}, -{52,58,-25}, -{52,58,-24}, -{52,58,-23}, -{52,58,-22}, -{52,58,-21}, -{52,58,-20}, -{52,58,-19}, -{52,58,-18}, -{52,58,-17}, -{52,58,-16}, -{52,58,-15}, -{52,58,-14}, -{52,58,-13}, -{52,58,-12}, -{52,58,-11}, -{52,58,-10}, -{52,58,-9}, -{52,58,-8}, -{52,58,-7}, -{52,58,-6}, -{52,58,-5}, -{52,58,-4}, -{52,58,-3}, -{52,58,-2}, -{52,58,-1}, -{52,58,0}, -{52,58,1}, -{52,58,2}, -{52,58,3}, -{52,58,4}, -{52,58,5}, -{52,58,6}, -{52,58,7}, -{52,58,8}, -{52,58,9}, -{52,58,10}, -{52,58,11}, -{52,58,12}, -{52,58,13}, -{52,58,14}, -{52,58,15}, -{52,58,16}, -{52,58,17}, -{52,58,18}, -{52,58,19}, -{52,58,20}, -{52,58,21}, -{52,58,22}, -{52,58,23}, -{52,58,24}, -{52,58,25}, -{52,58,26}, -{52,58,27}, -{52,58,28}, -{52,58,29}, -{52,58,30}, -{52,58,31}, -{52,58,32}, -{52,58,33}, -{52,58,34}, -{52,58,35}, -{52,58,36}, -{52,58,37}, -{52,58,38}, -{52,58,39}, -{52,58,40}, -{52,58,41}, -{52,58,42}, -{52,58,43}, -{52,58,44}, -{52,58,45}, -{52,58,46}, -{52,58,47}, -{52,58,48}, -{52,58,49}, -{52,58,50}, -{52,58,51}, -{52,58,52}, -{52,58,53}, -{52,58,54}, -{52,58,55}, -{52,58,56}, -{52,58,57}, -{52,58,58}, -{52,58,59}, -{52,58,60}, -{52,58,61}, -{52,58,62}, -{52,58,63}, -{52,59,-75}, -{52,59,-74}, -{52,59,-73}, -{52,59,-72}, -{52,59,-71}, -{52,59,-70}, -{52,59,-69}, -{52,59,-68}, -{52,59,-67}, -{52,59,-66}, -{52,59,-65}, -{52,59,-64}, -{52,59,-63}, -{52,59,-62}, -{52,59,-61}, -{52,59,-60}, -{52,59,-59}, -{52,59,-58}, -{52,59,-57}, -{52,59,-56}, -{52,59,-55}, -{52,59,-54}, -{52,59,-53}, -{52,59,-52}, -{52,59,-51}, -{52,59,-50}, -{52,59,-49}, -{52,59,-48}, -{52,59,-47}, -{52,59,-46}, -{52,59,-45}, -{52,59,-44}, -{52,59,-43}, -{52,59,-42}, -{52,59,-41}, -{52,59,-40}, -{52,59,-39}, -{52,59,-38}, -{52,59,-37}, -{52,59,-36}, -{52,59,-35}, -{52,59,-34}, -{52,59,-33}, -{52,59,-32}, -{52,59,-31}, -{52,59,-30}, -{52,59,-29}, -{52,59,-28}, -{52,59,-27}, -{52,59,-26}, -{52,59,-25}, -{52,59,-24}, -{52,59,-23}, -{52,59,-22}, -{52,59,-21}, -{52,59,-20}, -{52,59,-19}, -{52,59,-18}, -{52,59,-17}, -{52,59,-16}, -{52,59,-15}, -{52,59,-14}, -{52,59,-13}, -{52,59,-12}, -{52,59,-11}, -{52,59,-10}, -{52,59,-9}, -{52,59,-8}, -{52,59,-7}, -{52,59,-6}, -{52,59,-5}, -{52,59,-4}, -{52,59,-3}, -{52,59,-2}, -{52,59,-1}, -{52,59,0}, -{52,59,1}, -{52,59,2}, -{52,59,3}, -{52,59,4}, -{52,59,5}, -{52,59,6}, -{52,59,7}, -{52,59,8}, -{52,59,9}, -{52,59,10}, -{52,59,11}, -{52,59,12}, -{52,59,13}, -{52,59,14}, -{52,59,15}, -{52,59,16}, -{52,59,17}, -{52,59,18}, -{52,59,19}, -{52,59,20}, -{52,59,21}, -{52,59,22}, -{52,59,23}, -{52,59,24}, -{52,59,25}, -{52,59,26}, -{52,59,27}, -{52,59,28}, -{52,59,29}, -{52,59,30}, -{52,59,31}, -{52,59,32}, -{52,59,33}, -{52,59,34}, -{52,59,35}, -{52,59,36}, -{52,59,37}, -{52,59,38}, -{52,59,39}, -{52,59,40}, -{52,59,41}, -{52,59,42}, -{52,59,43}, -{52,59,44}, -{52,59,45}, -{52,59,46}, -{52,59,47}, -{52,59,48}, -{52,59,49}, -{52,59,50}, -{52,59,51}, -{52,59,52}, -{52,59,53}, -{52,59,54}, -{52,59,55}, -{52,59,56}, -{52,59,57}, -{52,59,58}, -{52,59,59}, -{52,59,60}, -{52,59,61}, -{52,59,62}, -{52,59,63}, -{52,60,-75}, -{52,60,-74}, -{52,60,-73}, -{52,60,-72}, -{52,60,-71}, -{52,60,-70}, -{52,60,-69}, -{52,60,-68}, -{52,60,-67}, -{52,60,-66}, -{52,60,-65}, -{52,60,-64}, -{52,60,-63}, -{52,60,-62}, -{52,60,-61}, -{52,60,-60}, -{52,60,-59}, -{52,60,-58}, -{52,60,-57}, -{52,60,-56}, -{52,60,-55}, -{52,60,-54}, -{52,60,-53}, -{52,60,-52}, -{52,60,-51}, -{52,60,-50}, -{52,60,-49}, -{52,60,-48}, -{52,60,-47}, -{52,60,-46}, -{52,60,-45}, -{52,60,-44}, -{52,60,-43}, -{52,60,-42}, -{52,60,-41}, -{52,60,-40}, -{52,60,-39}, -{52,60,-38}, -{52,60,-37}, -{52,60,-36}, -{52,60,-35}, -{52,60,-34}, -{52,60,-33}, -{52,60,-32}, -{52,60,-31}, -{52,60,-30}, -{52,60,-29}, -{52,60,-28}, -{52,60,-27}, -{52,60,-26}, -{52,60,-25}, -{52,60,-24}, -{52,60,-23}, -{52,60,-22}, -{52,60,-21}, -{52,60,-20}, -{52,60,-19}, -{52,60,-18}, -{52,60,-17}, -{52,60,-16}, -{52,60,-15}, -{52,60,-14}, -{52,60,-13}, -{52,60,-12}, -{52,60,-11}, -{52,60,-10}, -{52,60,-9}, -{52,60,-8}, -{52,60,-7}, -{52,60,-6}, -{52,60,-5}, -{52,60,-4}, -{52,60,-3}, -{52,60,-2}, -{52,60,-1}, -{52,60,0}, -{52,60,1}, -{52,60,2}, -{52,60,3}, -{52,60,4}, -{52,60,5}, -{52,60,6}, -{52,60,7}, -{52,60,8}, -{52,60,9}, -{52,60,10}, -{52,60,11}, -{52,60,12}, -{52,60,13}, -{52,60,14}, -{52,60,15}, -{52,60,16}, -{52,60,17}, -{52,60,18}, -{52,60,19}, -{52,60,20}, -{52,60,21}, -{52,60,22}, -{52,60,23}, -{52,60,24}, -{52,60,25}, -{52,60,26}, -{52,60,27}, -{52,60,28}, -{52,60,29}, -{52,60,30}, -{52,60,31}, -{52,60,32}, -{52,60,33}, -{52,60,34}, -{52,60,35}, -{52,60,36}, -{52,60,37}, -{52,60,38}, -{52,60,39}, -{52,60,40}, -{52,60,41}, -{52,60,42}, -{52,60,43}, -{52,60,44}, -{52,60,45}, -{52,60,46}, -{52,60,47}, -{52,60,48}, -{52,60,49}, -{52,60,50}, -{52,60,51}, -{52,60,52}, -{52,60,53}, -{52,60,54}, -{52,60,55}, -{52,60,56}, -{52,60,57}, -{52,60,58}, -{52,60,59}, -{52,60,60}, -{52,60,61}, -{52,60,62}, -{52,60,63}, -{52,61,-75}, -{52,61,-74}, -{52,61,-73}, -{52,61,-72}, -{52,61,-71}, -{52,61,-70}, -{52,61,-69}, -{52,61,-68}, -{52,61,-67}, -{52,61,-66}, -{52,61,-65}, -{52,61,-64}, -{52,61,-63}, -{52,61,-62}, -{52,61,-61}, -{52,61,-60}, -{52,61,-59}, -{52,61,-58}, -{52,61,-57}, -{52,61,-56}, -{52,61,-55}, -{52,61,-54}, -{52,61,-53}, -{52,61,-52}, -{52,61,-51}, -{52,61,-50}, -{52,61,-49}, -{52,61,-48}, -{52,61,-47}, -{52,61,-46}, -{52,61,-45}, -{52,61,-44}, -{52,61,-43}, -{52,61,-42}, -{52,61,-41}, -{52,61,-40}, -{52,61,-39}, -{52,61,-38}, -{52,61,-37}, -{52,61,-36}, -{52,61,-35}, -{52,61,-34}, -{52,61,-33}, -{52,61,-32}, -{52,61,-31}, -{52,61,-30}, -{52,61,-29}, -{52,61,-28}, -{52,61,-27}, -{52,61,-26}, -{52,61,-25}, -{52,61,-24}, -{52,61,-23}, -{52,61,-22}, -{52,61,-21}, -{52,61,-20}, -{52,61,-19}, -{52,61,-18}, -{52,61,-17}, -{52,61,-16}, -{52,61,-15}, -{52,61,-14}, -{52,61,-13}, -{52,61,-12}, -{52,61,-11}, -{52,61,-10}, -{52,61,-9}, -{52,61,-8}, -{52,61,-7}, -{52,61,-6}, -{52,61,-5}, -{52,61,-4}, -{52,61,-3}, -{52,61,-2}, -{52,61,-1}, -{52,61,0}, -{52,61,1}, -{52,61,2}, -{52,61,3}, -{52,61,4}, -{52,61,5}, -{52,61,6}, -{52,61,7}, -{52,61,8}, -{52,61,9}, -{52,61,10}, -{52,61,11}, -{52,61,12}, -{52,61,13}, -{52,61,14}, -{52,61,15}, -{52,61,16}, -{52,61,17}, -{52,61,18}, -{52,61,19}, -{52,61,20}, -{52,61,21}, -{52,61,22}, -{52,61,23}, -{52,61,24}, -{52,61,25}, -{52,61,26}, -{52,61,27}, -{52,61,28}, -{52,61,29}, -{52,61,30}, -{52,61,31}, -{52,61,32}, -{52,61,33}, -{52,61,34}, -{52,61,35}, -{52,61,36}, -{52,61,37}, -{52,61,38}, -{52,61,39}, -{52,61,40}, -{52,61,41}, -{52,61,42}, -{52,61,43}, -{52,61,44}, -{52,61,45}, -{52,61,46}, -{52,61,47}, -{52,61,48}, -{52,61,49}, -{52,61,50}, -{52,61,51}, -{52,61,52}, -{52,61,53}, -{52,61,54}, -{52,61,55}, -{52,61,56}, -{52,61,57}, -{52,61,58}, -{52,61,59}, -{52,61,60}, -{52,61,61}, -{52,61,62}, -{52,61,63}, -{52,62,-75}, -{52,62,-74}, -{52,62,-73}, -{52,62,-72}, -{52,62,-71}, -{52,62,-70}, -{52,62,-69}, -{52,62,-68}, -{52,62,-67}, -{52,62,-66}, -{52,62,-65}, -{52,62,-64}, -{52,62,-63}, -{52,62,-62}, -{52,62,-61}, -{52,62,-60}, -{52,62,-59}, -{52,62,-58}, -{52,62,-57}, -{52,62,-56}, -{52,62,-55}, -{52,62,-54}, -{52,62,-53}, -{52,62,-52}, -{52,62,-51}, -{52,62,-50}, -{52,62,-49}, -{52,62,-48}, -{52,62,-47}, -{52,62,-46}, -{52,62,-45}, -{52,62,-44}, -{52,62,-43}, -{52,62,-42}, -{52,62,-41}, -{52,62,-40}, -{52,62,-39}, -{52,62,-38}, -{52,62,-37}, -{52,62,-36}, -{52,62,-35}, -{52,62,-34}, -{52,62,-33}, -{52,62,-32}, -{52,62,-31}, -{52,62,-30}, -{52,62,-29}, -{52,62,-28}, -{52,62,-27}, -{52,62,-26}, -{52,62,-25}, -{52,62,-24}, -{52,62,-23}, -{52,62,-22}, -{52,62,-21}, -{52,62,-20}, -{52,62,-19}, -{52,62,-18}, -{52,62,-17}, -{52,62,-16}, -{52,62,-15}, -{52,62,-14}, -{52,62,-13}, -{52,62,-12}, -{52,62,-11}, -{52,62,-10}, -{52,62,-9}, -{52,62,-8}, -{52,62,-7}, -{52,62,-6}, -{52,62,-5}, -{52,62,-4}, -{52,62,-3}, -{52,62,-2}, -{52,62,-1}, -{52,62,0}, -{52,62,1}, -{52,62,2}, -{52,62,3}, -{52,62,4}, -{52,62,5}, -{52,62,6}, -{52,62,7}, -{52,62,8}, -{52,62,9}, -{52,62,10}, -{52,62,11}, -{52,62,12}, -{52,62,13}, -{52,62,14}, -{52,62,15}, -{52,62,16}, -{52,62,17}, -{52,62,18}, -{52,62,19}, -{52,62,20}, -{52,62,21}, -{52,62,22}, -{52,62,23}, -{52,62,24}, -{52,62,25}, -{52,62,26}, -{52,62,27}, -{52,62,28}, -{52,62,29}, -{52,62,30}, -{52,62,31}, -{52,62,32}, -{52,62,33}, -{52,62,34}, -{52,62,35}, -{52,62,36}, -{52,62,37}, -{52,62,38}, -{52,62,39}, -{52,62,40}, -{52,62,41}, -{52,62,42}, -{52,62,43}, -{52,62,44}, -{52,62,45}, -{52,62,46}, -{52,62,47}, -{52,62,48}, -{52,62,49}, -{52,62,50}, -{52,62,51}, -{52,62,52}, -{52,62,53}, -{52,62,54}, -{52,62,55}, -{52,62,56}, -{52,62,57}, -{52,62,58}, -{52,62,59}, -{52,62,60}, -{52,62,61}, -{52,62,62}, -{52,62,63}, -{52,63,-75}, -{52,63,-74}, -{52,63,-73}, -{52,63,-72}, -{52,63,-71}, -{52,63,-70}, -{52,63,-69}, -{52,63,-68}, -{52,63,-67}, -{52,63,-66}, -{52,63,-65}, -{52,63,-64}, -{52,63,-63}, -{52,63,-62}, -{52,63,-61}, -{52,63,-60}, -{52,63,-59}, -{52,63,-58}, -{52,63,-57}, -{52,63,-56}, -{52,63,-55}, -{52,63,-54}, -{52,63,-53}, -{52,63,-52}, -{52,63,-51}, -{52,63,-50}, -{52,63,-49}, -{52,63,-48}, -{52,63,-47}, -{52,63,-46}, -{52,63,-45}, -{52,63,-44}, -{52,63,-43}, -{52,63,-42}, -{52,63,-41}, -{52,63,-40}, -{52,63,-39}, -{52,63,-38}, -{52,63,-37}, -{52,63,-36}, -{52,63,-35}, -{52,63,-34}, -{52,63,-33}, -{52,63,-32}, -{52,63,-31}, -{52,63,-30}, -{52,63,-29}, -{52,63,-28}, -{52,63,-27}, -{52,63,-26}, -{52,63,-25}, -{52,63,-24}, -{52,63,-23}, -{52,63,-22}, -{52,63,-21}, -{52,63,-20}, -{52,63,-19}, -{52,63,-18}, -{52,63,-17}, -{52,63,-16}, -{52,63,-15}, -{52,63,-14}, -{52,63,-13}, -{52,63,-12}, -{52,63,-11}, -{52,63,-10}, -{52,63,-9}, -{52,63,-8}, -{52,63,-7}, -{52,63,-6}, -{52,63,-5}, -{52,63,-4}, -{52,63,-3}, -{52,63,-2}, -{52,63,-1}, -{52,63,0}, -{52,63,1}, -{52,63,2}, -{52,63,3}, -{52,63,4}, -{52,63,5}, -{52,63,6}, -{52,63,7}, -{52,63,8}, -{52,63,9}, -{52,63,10}, -{52,63,11}, -{52,63,12}, -{52,63,13}, -{52,63,14}, -{52,63,15}, -{52,63,16}, -{52,63,17}, -{52,63,18}, -{52,63,19}, -{52,63,20}, -{52,63,21}, -{52,63,22}, -{52,63,23}, -{52,63,24}, -{52,63,25}, -{52,63,26}, -{52,63,27}, -{52,63,28}, -{52,63,29}, -{52,63,30}, -{52,63,31}, -{52,63,32}, -{52,63,33}, -{52,63,34}, -{52,63,35}, -{52,63,36}, -{52,63,37}, -{52,63,38}, -{52,63,39}, -{52,63,40}, -{52,63,41}, -{52,63,42}, -{52,63,43}, -{52,63,44}, -{52,63,45}, -{52,63,46}, -{52,63,47}, -{52,63,48}, -{52,63,49}, -{52,63,50}, -{52,63,51}, -{52,63,52}, -{52,63,53}, -{52,63,54}, -{52,63,55}, -{52,63,56}, -{52,63,57}, -{52,63,58}, -{52,63,59}, -{52,63,60}, -{52,63,61}, -{52,63,62}, -{52,63,63}, -{52,64,-75}, -{52,64,-74}, -{52,64,-73}, -{52,64,-72}, -{52,64,-71}, -{52,64,-70}, -{52,64,-69}, -{52,64,-68}, -{52,64,-67}, -{52,64,-66}, -{52,64,-65}, -{52,64,-64}, -{52,64,-63}, -{52,64,-62}, -{52,64,-61}, -{52,64,-60}, -{52,64,-59}, -{52,64,-58}, -{52,64,-57}, -{52,64,-56}, -{52,64,-55}, -{52,64,-54}, -{52,64,-53}, -{52,64,-52}, -{52,64,-51}, -{52,64,-50}, -{52,64,-49}, -{52,64,-48}, -{52,64,-47}, -{52,64,-46}, -{52,64,-45}, -{52,64,-44}, -{52,64,-43}, -{52,64,-42}, -{52,64,-41}, -{52,64,-40}, -{52,64,-39}, -{52,64,-38}, -{52,64,-37}, -{52,64,-36}, -{52,64,-35}, -{52,64,-34}, -{52,64,-33}, -{52,64,-32}, -{52,64,-31}, -{52,64,-30}, -{52,64,-29}, -{52,64,-28}, -{52,64,-27}, -{52,64,-26}, -{52,64,-25}, -{52,64,-24}, -{52,64,-23}, -{52,64,-22}, -{52,64,-21}, -{52,64,-20}, -{52,64,-19}, -{52,64,-18}, -{52,64,-17}, -{52,64,-16}, -{52,64,-15}, -{52,64,-14}, -{52,64,-13}, -{52,64,-12}, -{52,64,-11}, -{52,64,-10}, -{52,64,-9}, -{52,64,-8}, -{52,64,-7}, -{52,64,-6}, -{52,64,-5}, -{52,64,-4}, -{52,64,-3}, -{52,64,-2}, -{52,64,-1}, -{52,64,0}, -{52,64,1}, -{52,64,2}, -{52,64,3}, -{52,64,4}, -{52,64,5}, -{52,64,6}, -{52,64,7}, -{52,64,8}, -{52,64,9}, -{52,64,10}, -{52,64,11}, -{52,64,12}, -{52,64,13}, -{52,64,14}, -{52,64,15}, -{52,64,16}, -{52,64,17}, -{52,64,18}, -{52,64,19}, -{52,64,20}, -{52,64,21}, -{52,64,22}, -{52,64,23}, -{52,64,24}, -{52,64,25}, -{52,64,26}, -{52,64,27}, -{52,64,28}, -{52,64,29}, -{52,64,30}, -{52,64,31}, -{52,64,32}, -{52,64,33}, -{52,64,34}, -{52,64,35}, -{52,64,36}, -{52,64,37}, -{52,64,38}, -{52,64,39}, -{52,64,40}, -{52,64,41}, -{52,64,42}, -{52,64,43}, -{52,64,44}, -{52,64,45}, -{52,64,46}, -{52,64,47}, -{52,64,48}, -{52,64,49}, -{52,64,50}, -{52,64,51}, -{52,64,52}, -{52,64,53}, -{52,64,54}, -{52,64,55}, -{52,64,56}, -{52,64,57}, -{52,64,58}, -{52,64,59}, -{52,64,60}, -{52,64,61}, -{52,64,62}, -{52,64,63}, -{52,64,64}, -{52,65,-75}, -{52,65,-74}, -{52,65,-73}, -{52,65,-72}, -{52,65,-71}, -{52,65,-70}, -{52,65,-69}, -{52,65,-68}, -{52,65,-67}, -{52,65,-66}, -{52,65,-65}, -{52,65,-64}, -{52,65,-63}, -{52,65,-62}, -{52,65,-61}, -{52,65,-60}, -{52,65,-59}, -{52,65,-58}, -{52,65,-57}, -{52,65,-56}, -{52,65,-55}, -{52,65,-54}, -{52,65,-53}, -{52,65,-52}, -{52,65,-51}, -{52,65,-50}, -{52,65,-49}, -{52,65,-48}, -{52,65,-47}, -{52,65,-46}, -{52,65,-45}, -{52,65,-44}, -{52,65,-43}, -{52,65,-42}, -{52,65,-41}, -{52,65,-40}, -{52,65,-39}, -{52,65,-38}, -{52,65,-37}, -{52,65,-36}, -{52,65,-35}, -{52,65,-34}, -{52,65,-33}, -{52,65,-32}, -{52,65,-31}, -{52,65,-30}, -{52,65,-29}, -{52,65,-28}, -{52,65,-27}, -{52,65,-26}, -{52,65,-25}, -{52,65,-24}, -{52,65,-23}, -{52,65,-22}, -{52,65,-21}, -{52,65,-20}, -{52,65,-19}, -{52,65,-18}, -{52,65,-17}, -{52,65,-16}, -{52,65,-15}, -{52,65,-14}, -{52,65,-13}, -{52,65,-12}, -{52,65,-11}, -{52,65,-10}, -{52,65,-9}, -{52,65,-8}, -{52,65,-7}, -{52,65,-6}, -{52,65,-5}, -{52,65,-4}, -{52,65,-3}, -{52,65,-2}, -{52,65,-1}, -{52,65,0}, -{52,65,1}, -{52,65,2}, -{52,65,3}, -{52,65,4}, -{52,65,5}, -{52,65,6}, -{52,65,7}, -{52,65,8}, -{52,65,9}, -{52,65,10}, -{52,65,11}, -{52,65,12}, -{52,65,13}, -{52,65,14}, -{52,65,15}, -{52,65,16}, -{52,65,17}, -{52,65,18}, -{52,65,19}, -{52,65,20}, -{52,65,21}, -{52,65,22}, -{52,65,23}, -{52,65,24}, -{52,65,25}, -{52,65,26}, -{52,65,27}, -{52,65,28}, -{52,65,29}, -{52,65,30}, -{52,65,31}, -{52,65,32}, -{52,65,33}, -{52,65,34}, -{52,65,35}, -{52,65,36}, -{52,65,37}, -{52,65,38}, -{52,65,39}, -{52,65,40}, -{52,65,41}, -{52,65,42}, -{52,65,43}, -{52,65,44}, -{52,65,45}, -{52,65,46}, -{52,65,47}, -{52,65,48}, -{52,65,49}, -{52,65,50}, -{52,65,51}, -{52,65,52}, -{52,65,53}, -{52,65,54}, -{52,65,55}, -{52,65,56}, -{52,65,57}, -{52,65,58}, -{52,65,59}, -{52,65,60}, -{52,65,61}, -{52,65,62}, -{52,65,63}, -{52,65,64}, -{52,66,-75}, -{52,66,-74}, -{52,66,-73}, -{52,66,-72}, -{52,66,-71}, -{52,66,-70}, -{52,66,-69}, -{52,66,-68}, -{52,66,-67}, -{52,66,-66}, -{52,66,-65}, -{52,66,-64}, -{52,66,-63}, -{52,66,-62}, -{52,66,-61}, -{52,66,-60}, -{52,66,-59}, -{52,66,-58}, -{52,66,-57}, -{52,66,-56}, -{52,66,-55}, -{52,66,-54}, -{52,66,-53}, -{52,66,-52}, -{52,66,-51}, -{52,66,-50}, -{52,66,-49}, -{52,66,-48}, -{52,66,-47}, -{52,66,-46}, -{52,66,-45}, -{52,66,-44}, -{52,66,-43}, -{52,66,-42}, -{52,66,-41}, -{52,66,-40}, -{52,66,-39}, -{52,66,-38}, -{52,66,-37}, -{52,66,-36}, -{52,66,-35}, -{52,66,-34}, -{52,66,-33}, -{52,66,-32}, -{52,66,-31}, -{52,66,-30}, -{52,66,-29}, -{52,66,-28}, -{52,66,-27}, -{52,66,-26}, -{52,66,-25}, -{52,66,-24}, -{52,66,-23}, -{52,66,-22}, -{52,66,-21}, -{52,66,-20}, -{52,66,-19}, -{52,66,-18}, -{52,66,-17}, -{52,66,-16}, -{52,66,-15}, -{52,66,-14}, -{52,66,-13}, -{52,66,-12}, -{52,66,-11}, -{52,66,-10}, -{52,66,-9}, -{52,66,-8}, -{52,66,-7}, -{52,66,-6}, -{52,66,-5}, -{52,66,-4}, -{52,66,-3}, -{52,66,-2}, -{52,66,-1}, -{52,66,0}, -{52,66,1}, -{52,66,2}, -{52,66,3}, -{52,66,4}, -{52,66,5}, -{52,66,6}, -{52,66,7}, -{52,66,8}, -{52,66,9}, -{52,66,10}, -{52,66,11}, -{52,66,12}, -{52,66,13}, -{52,66,14}, -{52,66,15}, -{52,66,16}, -{52,66,17}, -{52,66,18}, -{52,66,19}, -{52,66,20}, -{52,66,21}, -{52,66,22}, -{52,66,23}, -{52,66,24}, -{52,66,25}, -{52,66,26}, -{52,66,27}, -{52,66,28}, -{52,66,29}, -{52,66,30}, -{52,66,31}, -{52,66,32}, -{52,66,33}, -{52,66,34}, -{52,66,35}, -{52,66,36}, -{52,66,37}, -{52,66,38}, -{52,66,39}, -{52,66,40}, -{52,66,41}, -{52,66,42}, -{52,66,43}, -{52,66,44}, -{52,66,45}, -{52,66,46}, -{52,66,47}, -{52,66,48}, -{52,66,49}, -{52,66,50}, -{52,66,51}, -{52,66,52}, -{52,66,53}, -{52,66,54}, -{52,66,55}, -{52,66,56}, -{52,66,57}, -{52,66,58}, -{52,66,59}, -{52,66,60}, -{52,66,61}, -{52,66,62}, -{52,66,63}, -{52,66,64}, -{52,67,-75}, -{52,67,-74}, -{52,67,-73}, -{52,67,-72}, -{52,67,-71}, -{52,67,-70}, -{52,67,-69}, -{52,67,-68}, -{52,67,-67}, -{52,67,-66}, -{52,67,-65}, -{52,67,-64}, -{52,67,-63}, -{52,67,-62}, -{52,67,-61}, -{52,67,-60}, -{52,67,-59}, -{52,67,-58}, -{52,67,-57}, -{52,67,-56}, -{52,67,-55}, -{52,67,-54}, -{52,67,-53}, -{52,67,-52}, -{52,67,-51}, -{52,67,-50}, -{52,67,-49}, -{52,67,-48}, -{52,67,-47}, -{52,67,-46}, -{52,67,-45}, -{52,67,-44}, -{52,67,-43}, -{52,67,-42}, -{52,67,-41}, -{52,67,-40}, -{52,67,-39}, -{52,67,-38}, -{52,67,-37}, -{52,67,-36}, -{52,67,-35}, -{52,67,-34}, -{52,67,-33}, -{52,67,-32}, -{52,67,-31}, -{52,67,-30}, -{52,67,-29}, -{52,67,-28}, -{52,67,-27}, -{52,67,-26}, -{52,67,-25}, -{52,67,-24}, -{52,67,-23}, -{52,67,-22}, -{52,67,-21}, -{52,67,-20}, -{52,67,-19}, -{52,67,-18}, -{52,67,-17}, -{52,67,-16}, -{52,67,-15}, -{52,67,-14}, -{52,67,-13}, -{52,67,-12}, -{52,67,-11}, -{52,67,-10}, -{52,67,-9}, -{52,67,-8}, -{52,67,-7}, -{52,67,-6}, -{52,67,-5}, -{52,67,-4}, -{52,67,-3}, -{52,67,-2}, -{52,67,-1}, -{52,67,0}, -{52,67,1}, -{52,67,2}, -{52,67,3}, -{52,67,4}, -{52,67,5}, -{52,67,6}, -{52,67,7}, -{52,67,8}, -{52,67,9}, -{52,67,10}, -{52,67,11}, -{52,67,12}, -{52,67,13}, -{52,67,14}, -{52,67,15}, -{52,67,16}, -{52,67,17}, -{52,67,18}, -{52,67,19}, -{52,67,20}, -{52,67,21}, -{52,67,22}, -{52,67,23}, -{52,67,24}, -{52,67,25}, -{52,67,26}, -{52,67,27}, -{52,67,28}, -{52,67,29}, -{52,67,30}, -{52,67,31}, -{52,67,32}, -{52,67,33}, -{52,67,34}, -{52,67,35}, -{52,67,36}, -{52,67,37}, -{52,67,38}, -{52,67,39}, -{52,67,40}, -{52,67,41}, -{52,67,42}, -{52,67,43}, -{52,67,44}, -{52,67,45}, -{52,67,46}, -{52,67,47}, -{52,67,48}, -{52,67,49}, -{52,67,50}, -{52,67,51}, -{52,67,52}, -{52,67,53}, -{52,67,54}, -{52,67,55}, -{52,67,56}, -{52,67,57}, -{52,67,58}, -{52,67,59}, -{52,67,60}, -{52,67,61}, -{52,67,62}, -{52,67,63}, -{52,67,64}, -{52,68,-75}, -{52,68,-74}, -{52,68,-73}, -{52,68,-72}, -{52,68,-71}, -{52,68,-70}, -{52,68,-69}, -{52,68,-68}, -{52,68,-67}, -{52,68,-66}, -{52,68,-65}, -{52,68,-64}, -{52,68,-63}, -{52,68,-62}, -{52,68,-61}, -{52,68,-60}, -{52,68,-59}, -{52,68,-58}, -{52,68,-57}, -{52,68,-56}, -{52,68,-55}, -{52,68,-54}, -{52,68,-53}, -{52,68,-52}, -{52,68,-51}, -{52,68,-50}, -{52,68,-49}, -{52,68,-48}, -{52,68,-47}, -{52,68,-46}, -{52,68,-45}, -{52,68,-44}, -{52,68,-43}, -{52,68,-42}, -{52,68,-41}, -{52,68,-40}, -{52,68,-39}, -{52,68,-38}, -{52,68,-37}, -{52,68,-36}, -{52,68,-35}, -{52,68,-34}, -{52,68,-33}, -{52,68,-32}, -{52,68,-31}, -{52,68,-30}, -{52,68,-29}, -{52,68,-28}, -{52,68,-27}, -{52,68,-26}, -{52,68,-25}, -{52,68,-24}, -{52,68,-23}, -{52,68,-22}, -{52,68,-21}, -{52,68,-20}, -{52,68,-19}, -{52,68,-18}, -{52,68,-17}, -{52,68,-16}, -{52,68,-15}, -{52,68,-14}, -{52,68,-13}, -{52,68,-12}, -{52,68,-11}, -{52,68,-10}, -{52,68,-9}, -{52,68,-8}, -{52,68,-7}, -{52,68,-6}, -{52,68,-5}, -{52,68,-4}, -{52,68,-3}, -{52,68,-2}, -{52,68,-1}, -{52,68,0}, -{52,68,1}, -{52,68,2}, -{52,68,3}, -{52,68,4}, -{52,68,5}, -{52,68,6}, -{52,68,7}, -{52,68,8}, -{52,68,9}, -{52,68,10}, -{52,68,11}, -{52,68,12}, -{52,68,13}, -{52,68,14}, -{52,68,15}, -{52,68,16}, -{52,68,17}, -{52,68,18}, -{52,68,19}, -{52,68,20}, -{52,68,21}, -{52,68,22}, -{52,68,23}, -{52,68,24}, -{52,68,25}, -{52,68,26}, -{52,68,27}, -{52,68,28}, -{52,68,29}, -{52,68,30}, -{52,68,31}, -{52,68,32}, -{52,68,33}, -{52,68,34}, -{52,68,35}, -{52,68,36}, -{52,68,37}, -{52,68,38}, -{52,68,39}, -{52,68,40}, -{52,68,41}, -{52,68,42}, -{52,68,43}, -{52,68,44}, -{52,68,45}, -{52,68,46}, -{52,68,47}, -{52,68,48}, -{52,68,49}, -{52,68,50}, -{52,68,51}, -{52,68,52}, -{52,68,53}, -{52,68,54}, -{52,68,55}, -{52,68,56}, -{52,68,57}, -{52,68,58}, -{52,68,59}, -{52,68,60}, -{52,68,61}, -{52,68,62}, -{52,68,63}, -{52,68,64}, -{52,69,-75}, -{52,69,-74}, -{52,69,-73}, -{52,69,-72}, -{52,69,-71}, -{52,69,-70}, -{52,69,-69}, -{52,69,-68}, -{52,69,-67}, -{52,69,-66}, -{52,69,-65}, -{52,69,-64}, -{52,69,-63}, -{52,69,-62}, -{52,69,-61}, -{52,69,-60}, -{52,69,-59}, -{52,69,-58}, -{52,69,-57}, -{52,69,-56}, -{52,69,-55}, -{52,69,-54}, -{52,69,-53}, -{52,69,-52}, -{52,69,-51}, -{52,69,-50}, -{52,69,-49}, -{52,69,-48}, -{52,69,-47}, -{52,69,-46}, -{52,69,-45}, -{52,69,-44}, -{52,69,-43}, -{52,69,-42}, -{52,69,-41}, -{52,69,-40}, -{52,69,-39}, -{52,69,-38}, -{52,69,-37}, -{52,69,-36}, -{52,69,-35}, -{52,69,-34}, -{52,69,-33}, -{52,69,-32}, -{52,69,-31}, -{52,69,-30}, -{52,69,-29}, -{52,69,-28}, -{52,69,-27}, -{52,69,-26}, -{52,69,-25}, -{52,69,-24}, -{52,69,-23}, -{52,69,-22}, -{52,69,-21}, -{52,69,-20}, -{52,69,-19}, -{52,69,-18}, -{52,69,-17}, -{52,69,-16}, -{52,69,-15}, -{52,69,-14}, -{52,69,-13}, -{52,69,-12}, -{52,69,-11}, -{52,69,-10}, -{52,69,-9}, -{52,69,-8}, -{52,69,-7}, -{52,69,-6}, -{52,69,-5}, -{52,69,-4}, -{52,69,-3}, -{52,69,-2}, -{52,69,-1}, -{52,69,0}, -{52,69,1}, -{52,69,2}, -{52,69,3}, -{52,69,4}, -{52,69,5}, -{52,69,6}, -{52,69,7}, -{52,69,8}, -{52,69,9}, -{52,69,10}, -{52,69,11}, -{52,69,12}, -{52,69,13}, -{52,69,14}, -{52,69,15}, -{52,69,16}, -{52,69,17}, -{52,69,18}, -{52,69,19}, -{52,69,20}, -{52,69,21}, -{52,69,22}, -{52,69,23}, -{52,69,24}, -{52,69,25}, -{52,69,26}, -{52,69,27}, -{52,69,28}, -{52,69,29}, -{52,69,30}, -{52,69,31}, -{52,69,32}, -{52,69,33}, -{52,69,34}, -{52,69,35}, -{52,69,36}, -{52,69,37}, -{52,69,38}, -{52,69,39}, -{52,69,40}, -{52,69,41}, -{52,69,42}, -{52,69,43}, -{52,69,44}, -{52,69,45}, -{52,69,46}, -{52,69,47}, -{52,69,48}, -{52,69,49}, -{52,69,50}, -{52,69,51}, -{52,69,52}, -{52,69,53}, -{52,69,54}, -{52,69,55}, -{52,69,56}, -{52,69,57}, -{52,69,58}, -{52,69,59}, -{52,69,60}, -{52,69,61}, -{52,69,62}, -{52,69,63}, -{52,69,64}, -{52,70,-75}, -{52,70,-74}, -{52,70,-73}, -{52,70,-72}, -{52,70,-71}, -{52,70,-70}, -{52,70,-69}, -{52,70,-68}, -{52,70,-67}, -{52,70,-66}, -{52,70,-65}, -{52,70,-64}, -{52,70,-63}, -{52,70,-62}, -{52,70,-61}, -{52,70,-60}, -{52,70,-59}, -{52,70,-58}, -{52,70,-57}, -{52,70,-56}, -{52,70,-55}, -{52,70,-54}, -{52,70,-53}, -{52,70,-52}, -{52,70,-51}, -{52,70,-50}, -{52,70,-49}, -{52,70,-48}, -{52,70,-47}, -{52,70,-46}, -{52,70,-45}, -{52,70,-44}, -{52,70,-43}, -{52,70,-42}, -{52,70,-41}, -{52,70,-40}, -{52,70,-39}, -{52,70,-38}, -{52,70,-37}, -{52,70,-36}, -{52,70,-35}, -{52,70,-34}, -{52,70,-33}, -{52,70,-32}, -{52,70,-31}, -{52,70,-30}, -{52,70,-29}, -{52,70,-28}, -{52,70,-27}, -{52,70,-26}, -{52,70,-25}, -{52,70,-24}, -{52,70,-23}, -{52,70,-22}, -{52,70,-21}, -{52,70,-20}, -{52,70,-19}, -{52,70,-18}, -{52,70,-17}, -{52,70,-16}, -{52,70,-15}, -{52,70,-14}, -{52,70,-13}, -{52,70,-12}, -{52,70,-11}, -{52,70,-10}, -{52,70,-9}, -{52,70,-8}, -{52,70,-7}, -{52,70,-6}, -{52,70,-5}, -{52,70,-4}, -{52,70,-3}, -{52,70,-2}, -{52,70,-1}, -{52,70,0}, -{52,70,1}, -{52,70,2}, -{52,70,3}, -{52,70,4}, -{52,70,5}, -{52,70,6}, -{52,70,7}, -{52,70,8}, -{52,70,9}, -{52,70,10}, -{52,70,11}, -{52,70,12}, -{52,70,13}, -{52,70,14}, -{52,70,15}, -{52,70,16}, -{52,70,17}, -{52,70,18}, -{52,70,19}, -{52,70,20}, -{52,70,21}, -{52,70,22}, -{52,70,23}, -{52,70,24}, -{52,70,25}, -{52,70,26}, -{52,70,27}, -{52,70,28}, -{52,70,29}, -{52,70,30}, -{52,70,31}, -{52,70,32}, -{52,70,33}, -{52,70,34}, -{52,70,35}, -{52,70,36}, -{52,70,37}, -{52,70,38}, -{52,70,39}, -{52,70,40}, -{52,70,41}, -{52,70,42}, -{52,70,43}, -{52,70,44}, -{52,70,45}, -{52,70,46}, -{52,70,47}, -{52,70,48}, -{52,70,49}, -{52,70,50}, -{52,70,51}, -{52,70,52}, -{52,70,53}, -{52,70,54}, -{52,70,55}, -{52,70,56}, -{52,70,57}, -{52,70,58}, -{52,70,59}, -{52,70,60}, -{52,70,61}, -{52,70,62}, -{52,70,63}, -{52,70,64}, -{52,71,-75}, -{52,71,-74}, -{52,71,-73}, -{52,71,-72}, -{52,71,-71}, -{52,71,-70}, -{52,71,-69}, -{52,71,-68}, -{52,71,-67}, -{52,71,-66}, -{52,71,-65}, -{52,71,-64}, -{52,71,-63}, -{52,71,-62}, -{52,71,-61}, -{52,71,-60}, -{52,71,-59}, -{52,71,-58}, -{52,71,-57}, -{52,71,-56}, -{52,71,-55}, -{52,71,-54}, -{52,71,-53}, -{52,71,-52}, -{52,71,-51}, -{52,71,-50}, -{52,71,-49}, -{52,71,-48}, -{52,71,-47}, -{52,71,-46}, -{52,71,-45}, -{52,71,-44}, -{52,71,-43}, -{52,71,-42}, -{52,71,-41}, -{52,71,-40}, -{52,71,-39}, -{52,71,-38}, -{52,71,-37}, -{52,71,-36}, -{52,71,-35}, -{52,71,-34}, -{52,71,-33}, -{52,71,-32}, -{52,71,-31}, -{52,71,-30}, -{52,71,-29}, -{52,71,-28}, -{52,71,-27}, -{52,71,-26}, -{52,71,-25}, -{52,71,-24}, -{52,71,-23}, -{52,71,-22}, -{52,71,-21}, -{52,71,-20}, -{52,71,-19}, -{52,71,-18}, -{52,71,-17}, -{52,71,-16}, -{52,71,-15}, -{52,71,-14}, -{52,71,-13}, -{52,71,-12}, -{52,71,-11}, -{52,71,-10}, -{52,71,-9}, -{52,71,-8}, -{52,71,-7}, -{52,71,-6}, -{52,71,-5}, -{52,71,-4}, -{52,71,-3}, -{52,71,-2}, -{52,71,-1}, -{52,71,0}, -{52,71,1}, -{52,71,2}, -{52,71,3}, -{52,71,4}, -{52,71,5}, -{52,71,6}, -{52,71,7}, -{52,71,8}, -{52,71,9}, -{52,71,10}, -{52,71,11}, -{52,71,12}, -{52,71,13}, -{52,71,14}, -{52,71,15}, -{52,71,16}, -{52,71,17}, -{52,71,18}, -{52,71,19}, -{52,71,20}, -{52,71,21}, -{52,71,22}, -{52,71,23}, -{52,71,24}, -{52,71,25}, -{52,71,26}, -{52,71,27}, -{52,71,28}, -{52,71,29}, -{52,71,30}, -{52,71,31}, -{52,71,32}, -{52,71,33}, -{52,71,34}, -{52,71,35}, -{52,71,36}, -{52,71,37}, -{52,71,38}, -{52,71,39}, -{52,71,40}, -{52,71,41}, -{52,71,42}, -{52,71,43}, -{52,71,44}, -{52,71,45}, -{52,71,46}, -{52,71,47}, -{52,71,48}, -{52,71,49}, -{52,71,50}, -{52,71,51}, -{52,71,52}, -{52,71,53}, -{52,71,54}, -{52,71,55}, -{52,71,56}, -{52,71,57}, -{52,71,58}, -{52,71,59}, -{52,71,60}, -{52,71,61}, -{52,71,62}, -{52,71,63}, -{52,71,64}, -{52,71,65}, -{52,72,-75}, -{52,72,-74}, -{52,72,-73}, -{52,72,-72}, -{52,72,-71}, -{52,72,-70}, -{52,72,-69}, -{52,72,-68}, -{52,72,-67}, -{52,72,-66}, -{52,72,-65}, -{52,72,-64}, -{52,72,-63}, -{52,72,-62}, -{52,72,-61}, -{52,72,-60}, -{52,72,-59}, -{52,72,-58}, -{52,72,-57}, -{52,72,-56}, -{52,72,-55}, -{52,72,-54}, -{52,72,-53}, -{52,72,-52}, -{52,72,-51}, -{52,72,-50}, -{52,72,-49}, -{52,72,-48}, -{52,72,-47}, -{52,72,-46}, -{52,72,-45}, -{52,72,-44}, -{52,72,-43}, -{52,72,-42}, -{52,72,-41}, -{52,72,-40}, -{52,72,-39}, -{52,72,-38}, -{52,72,-37}, -{52,72,-36}, -{52,72,-35}, -{52,72,-34}, -{52,72,-33}, -{52,72,-32}, -{52,72,-31}, -{52,72,-30}, -{52,72,-29}, -{52,72,-28}, -{52,72,-27}, -{52,72,-26}, -{52,72,-25}, -{52,72,-24}, -{52,72,-23}, -{52,72,-22}, -{52,72,-21}, -{52,72,-20}, -{52,72,-19}, -{52,72,-18}, -{52,72,-17}, -{52,72,-16}, -{52,72,-15}, -{52,72,-14}, -{52,72,-13}, -{52,72,-12}, -{52,72,-11}, -{52,72,-10}, -{52,72,-9}, -{52,72,-8}, -{52,72,-7}, -{52,72,-6}, -{52,72,-5}, -{52,72,-4}, -{52,72,-3}, -{52,72,-2}, -{52,72,-1}, -{52,72,0}, -{52,72,1}, -{52,72,2}, -{52,72,3}, -{52,72,4}, -{52,72,5}, -{52,72,6}, -{52,72,7}, -{52,72,8}, -{52,72,9}, -{52,72,10}, -{52,72,11}, -{52,72,12}, -{52,72,13}, -{52,72,14}, -{52,72,15}, -{52,72,16}, -{52,72,17}, -{52,72,18}, -{52,72,19}, -{52,72,20}, -{52,72,21}, -{52,72,22}, -{52,72,23}, -{52,72,24}, -{52,72,25}, -{52,72,26}, -{52,72,27}, -{52,72,28}, -{52,72,29}, -{52,72,30}, -{52,72,31}, -{52,72,32}, -{52,72,33}, -{52,72,34}, -{52,72,35}, -{52,72,36}, -{52,72,37}, -{52,72,38}, -{52,72,39}, -{52,72,40}, -{52,72,41}, -{52,72,42}, -{52,72,43}, -{52,72,44}, -{52,72,45}, -{52,72,46}, -{52,72,47}, -{52,72,48}, -{52,72,49}, -{52,72,50}, -{52,72,51}, -{52,72,52}, -{52,72,53}, -{52,72,54}, -{52,72,55}, -{52,72,56}, -{52,72,57}, -{52,72,58}, -{52,72,59}, -{52,72,60}, -{52,72,61}, -{52,72,62}, -{52,72,63}, -{52,72,64}, -{52,72,65}, -{52,73,-75}, -{52,73,-74}, -{52,73,-73}, -{52,73,-72}, -{52,73,-71}, -{52,73,-70}, -{52,73,-69}, -{52,73,-68}, -{52,73,-67}, -{52,73,-66}, -{52,73,-65}, -{52,73,-64}, -{52,73,-63}, -{52,73,-62}, -{52,73,-61}, -{52,73,-60}, -{52,73,-59}, -{52,73,-58}, -{52,73,-57}, -{52,73,-56}, -{52,73,-55}, -{52,73,-54}, -{52,73,-53}, -{52,73,-52}, -{52,73,-51}, -{52,73,-50}, -{52,73,-49}, -{52,73,-48}, -{52,73,-47}, -{52,73,-46}, -{52,73,-45}, -{52,73,-44}, -{52,73,-43}, -{52,73,-42}, -{52,73,-41}, -{52,73,-40}, -{52,73,-39}, -{52,73,-38}, -{52,73,-37}, -{52,73,-36}, -{52,73,-35}, -{52,73,-34}, -{52,73,-33}, -{52,73,-32}, -{52,73,-31}, -{52,73,-30}, -{52,73,-29}, -{52,73,-28}, -{52,73,-27}, -{52,73,-26}, -{52,73,-25}, -{52,73,-24}, -{52,73,-23}, -{52,73,-22}, -{52,73,-21}, -{52,73,-20}, -{52,73,-19}, -{52,73,-18}, -{52,73,-17}, -{52,73,-16}, -{52,73,-15}, -{52,73,-14}, -{52,73,-13}, -{52,73,-12}, -{52,73,-11}, -{52,73,-10}, -{52,73,-9}, -{52,73,-8}, -{52,73,-7}, -{52,73,-6}, -{52,73,-5}, -{52,73,-4}, -{52,73,-3}, -{52,73,-2}, -{52,73,-1}, -{52,73,0}, -{52,73,1}, -{52,73,2}, -{52,73,3}, -{52,73,4}, -{52,73,5}, -{52,73,6}, -{52,73,7}, -{52,73,8}, -{52,73,9}, -{52,73,10}, -{52,73,11}, -{52,73,12}, -{52,73,13}, -{52,73,14}, -{52,73,15}, -{52,73,16}, -{52,73,17}, -{52,73,18}, -{52,73,19}, -{52,73,20}, -{52,73,21}, -{52,73,22}, -{52,73,23}, -{52,73,24}, -{52,73,25}, -{52,73,26}, -{52,73,27}, -{52,73,28}, -{52,73,29}, -{52,73,30}, -{52,73,31}, -{52,73,32}, -{52,73,33}, -{52,73,34}, -{52,73,35}, -{52,73,36}, -{52,73,37}, -{52,73,38}, -{52,73,39}, -{52,73,40}, -{52,73,41}, -{52,73,42}, -{52,73,43}, -{52,73,44}, -{52,73,45}, -{52,73,46}, -{52,73,47}, -{52,73,48}, -{52,73,49}, -{52,73,50}, -{52,73,51}, -{52,73,52}, -{52,73,53}, -{52,73,54}, -{52,73,55}, -{52,73,56}, -{52,73,57}, -{52,73,58}, -{52,73,59}, -{52,73,60}, -{52,73,61}, -{52,73,62}, -{52,73,63}, -{52,73,64}, -{52,73,65}, -{52,74,-75}, -{52,74,-74}, -{52,74,-73}, -{52,74,-72}, -{52,74,-71}, -{52,74,-70}, -{52,74,-69}, -{52,74,-68}, -{52,74,-67}, -{52,74,-66}, -{52,74,-65}, -{52,74,-64}, -{52,74,-63}, -{52,74,-62}, -{52,74,-61}, -{52,74,-60}, -{52,74,-59}, -{52,74,-58}, -{52,74,-57}, -{52,74,-56}, -{52,74,-55}, -{52,74,-54}, -{52,74,-53}, -{52,74,-52}, -{52,74,-51}, -{52,74,-50}, -{52,74,-49}, -{52,74,-48}, -{52,74,-47}, -{52,74,-46}, -{52,74,-45}, -{52,74,-44}, -{52,74,-43}, -{52,74,-42}, -{52,74,-41}, -{52,74,-40}, -{52,74,-39}, -{52,74,-38}, -{52,74,-37}, -{52,74,-36}, -{52,74,-35}, -{52,74,-34}, -{52,74,-33}, -{52,74,-32}, -{52,74,-31}, -{52,74,-30}, -{52,74,-29}, -{52,74,-28}, -{52,74,-27}, -{52,74,-26}, -{52,74,-25}, -{52,74,-24}, -{52,74,-23}, -{52,74,-22}, -{52,74,-21}, -{52,74,-20}, -{52,74,-19}, -{52,74,-18}, -{52,74,-17}, -{52,74,-16}, -{52,74,-15}, -{52,74,-14}, -{52,74,-13}, -{52,74,-12}, -{52,74,-11}, -{52,74,-10}, -{52,74,-9}, -{52,74,-8}, -{52,74,-7}, -{52,74,-6}, -{52,74,-5}, -{52,74,-4}, -{52,74,-3}, -{52,74,-2}, -{52,74,-1}, -{52,74,0}, -{52,74,1}, -{52,74,2}, -{52,74,3}, -{52,74,4}, -{52,74,5}, -{52,74,6}, -{52,74,7}, -{52,74,8}, -{52,74,9}, -{52,74,10}, -{52,74,11}, -{52,74,12}, -{52,74,13}, -{52,74,14}, -{52,74,15}, -{52,74,16}, -{52,74,17}, -{52,74,18}, -{52,74,19}, -{52,74,20}, -{52,74,21}, -{52,74,22}, -{52,74,23}, -{52,74,24}, -{52,74,25}, -{52,74,26}, -{52,74,27}, -{52,74,28}, -{52,74,29}, -{52,74,30}, -{52,74,31}, -{52,74,32}, -{52,74,33}, -{52,74,34}, -{52,74,35}, -{52,74,36}, -{52,74,37}, -{52,74,38}, -{52,74,39}, -{52,74,40}, -{52,74,41}, -{52,74,42}, -{52,74,43}, -{52,74,44}, -{52,74,45}, -{52,74,46}, -{52,74,47}, -{52,74,48}, -{52,74,49}, -{52,74,50}, -{52,74,51}, -{52,74,52}, -{52,74,53}, -{52,74,54}, -{52,74,55}, -{52,74,56}, -{52,74,57}, -{52,74,58}, -{52,74,59}, -{52,74,60}, -{52,74,61}, -{52,74,62}, -{52,74,63}, -{52,74,64}, -{52,74,65}, -{52,75,-75}, -{52,75,-74}, -{52,75,-73}, -{52,75,-72}, -{52,75,-71}, -{52,75,-70}, -{52,75,-69}, -{52,75,-68}, -{52,75,-67}, -{52,75,-66}, -{52,75,-65}, -{52,75,-64}, -{52,75,-63}, -{52,75,-62}, -{52,75,-61}, -{52,75,-60}, -{52,75,-59}, -{52,75,-58}, -{52,75,-57}, -{52,75,-56}, -{52,75,-55}, -{52,75,-54}, -{52,75,-53}, -{52,75,-52}, -{52,75,-51}, -{52,75,-50}, -{52,75,-49}, -{52,75,-48}, -{52,75,-47}, -{52,75,-46}, -{52,75,-45}, -{52,75,-44}, -{52,75,-43}, -{52,75,-42}, -{52,75,-41}, -{52,75,-40}, -{52,75,-39}, -{52,75,-38}, -{52,75,-37}, -{52,75,-36}, -{52,75,-35}, -{52,75,-34}, -{52,75,-33}, -{52,75,-32}, -{52,75,-31}, -{52,75,-30}, -{52,75,-29}, -{52,75,-28}, -{52,75,-27}, -{52,75,-26}, -{52,75,-25}, -{52,75,-24}, -{52,75,-23}, -{52,75,-22}, -{52,75,-21}, -{52,75,-20}, -{52,75,-19}, -{52,75,-18}, -{52,75,-17}, -{52,75,-16}, -{52,75,-15}, -{52,75,-14}, -{52,75,-13}, -{52,75,-12}, -{52,75,-11}, -{52,75,-10}, -{52,75,-9}, -{52,75,-8}, -{52,75,-7}, -{52,75,-6}, -{52,75,-5}, -{52,75,-4}, -{52,75,-3}, -{52,75,-2}, -{52,75,-1}, -{52,75,0}, -{52,75,1}, -{52,75,2}, -{52,75,3}, -{52,75,4}, -{52,75,5}, -{52,75,6}, -{52,75,7}, -{52,75,8}, -{52,75,9}, -{52,75,10}, -{52,75,11}, -{52,75,12}, -{52,75,13}, -{52,75,14}, -{52,75,15}, -{52,75,16}, -{52,75,17}, -{52,75,18}, -{52,75,19}, -{52,75,20}, -{52,75,21}, -{52,75,22}, -{52,75,23}, -{52,75,24}, -{52,75,25}, -{52,75,26}, -{52,75,27}, -{52,75,28}, -{52,75,29}, -{52,75,30}, -{52,75,31}, -{52,75,32}, -{52,75,33}, -{52,75,34}, -{52,75,35}, -{52,75,36}, -{52,75,37}, -{52,75,38}, -{52,75,39}, -{52,75,40}, -{52,75,41}, -{52,75,42}, -{52,75,43}, -{52,75,44}, -{52,75,45}, -{52,75,46}, -{52,75,47}, -{52,75,48}, -{52,75,49}, -{52,75,50}, -{52,75,51}, -{52,75,52}, -{52,75,53}, -{52,75,54}, -{52,75,55}, -{52,75,56}, -{52,75,57}, -{52,75,58}, -{52,75,59}, -{52,75,60}, -{52,75,61}, -{52,75,62}, -{52,75,63}, -{52,75,64}, -{52,75,65}, -{52,76,-75}, -{52,76,-74}, -{52,76,-73}, -{52,76,-72}, -{52,76,-71}, -{52,76,-70}, -{52,76,-69}, -{52,76,-68}, -{52,76,-67}, -{52,76,-66}, -{52,76,-65}, -{52,76,-64}, -{52,76,-63}, -{52,76,-62}, -{52,76,-61}, -{52,76,-60}, -{52,76,-59}, -{52,76,-58}, -{52,76,-57}, -{52,76,-56}, -{52,76,-55}, -{52,76,-54}, -{52,76,-53}, -{52,76,-52}, -{52,76,-51}, -{52,76,-50}, -{52,76,-49}, -{52,76,-48}, -{52,76,-47}, -{52,76,-46}, -{52,76,-45}, -{52,76,-44}, -{52,76,-43}, -{52,76,-42}, -{52,76,-41}, -{52,76,-40}, -{52,76,-39}, -{52,76,-38}, -{52,76,-37}, -{52,76,-36}, -{52,76,-35}, -{52,76,-34}, -{52,76,-33}, -{52,76,-32}, -{52,76,-31}, -{52,76,-30}, -{52,76,-29}, -{52,76,-28}, -{52,76,-27}, -{52,76,-26}, -{52,76,-25}, -{52,76,-24}, -{52,76,-23}, -{52,76,-22}, -{52,76,-21}, -{52,76,-20}, -{52,76,-19}, -{52,76,-18}, -{52,76,-17}, -{52,76,-16}, -{52,76,-15}, -{52,76,-14}, -{52,76,-13}, -{52,76,-12}, -{52,76,-11}, -{52,76,-10}, -{52,76,-9}, -{52,76,-8}, -{52,76,-7}, -{52,76,-6}, -{52,76,-5}, -{52,76,-4}, -{52,76,-3}, -{52,76,-2}, -{52,76,-1}, -{52,76,0}, -{52,76,1}, -{52,76,2}, -{52,76,3}, -{52,76,4}, -{52,76,5}, -{52,76,6}, -{52,76,7}, -{52,76,8}, -{52,76,9}, -{52,76,10}, -{52,76,11}, -{52,76,12}, -{52,76,13}, -{52,76,14}, -{52,76,15}, -{52,76,16}, -{52,76,17}, -{52,76,18}, -{52,76,19}, -{52,76,20}, -{52,76,21}, -{52,76,22}, -{52,76,23}, -{52,76,24}, -{52,76,25}, -{52,76,26}, -{52,76,27}, -{52,76,28}, -{52,76,29}, -{52,76,30}, -{52,76,31}, -{52,76,32}, -{52,76,33}, -{52,76,34}, -{52,76,35}, -{52,76,36}, -{52,76,37}, -{52,76,38}, -{52,76,39}, -{52,76,40}, -{52,76,41}, -{52,76,42}, -{52,76,43}, -{52,76,44}, -{52,76,45}, -{52,76,46}, -{52,76,47}, -{52,76,48}, -{52,76,49}, -{52,76,50}, -{52,76,51}, -{52,76,52}, -{52,76,53}, -{52,76,54}, -{52,76,55}, -{52,76,56}, -{52,76,57}, -{52,76,58}, -{52,76,59}, -{52,76,60}, -{52,76,61}, -{52,76,62}, -{52,76,63}, -{52,76,64}, -{52,76,65}, -{52,77,-75}, -{52,77,-74}, -{52,77,-73}, -{52,77,-72}, -{52,77,-71}, -{52,77,-70}, -{52,77,-69}, -{52,77,-68}, -{52,77,-67}, -{52,77,-66}, -{52,77,-65}, -{52,77,-64}, -{52,77,-63}, -{52,77,-62}, -{52,77,-61}, -{52,77,-60}, -{52,77,-59}, -{52,77,-58}, -{52,77,-57}, -{52,77,-56}, -{52,77,-55}, -{52,77,-54}, -{52,77,-53}, -{52,77,-52}, -{52,77,-51}, -{52,77,-50}, -{52,77,-49}, -{52,77,-48}, -{52,77,-47}, -{52,77,-46}, -{52,77,-45}, -{52,77,-44}, -{52,77,-43}, -{52,77,-42}, -{52,77,-41}, -{52,77,-40}, -{52,77,-39}, -{52,77,-38}, -{52,77,-37}, -{52,77,-36}, -{52,77,-35}, -{52,77,-34}, -{52,77,-33}, -{52,77,-32}, -{52,77,-31}, -{52,77,-30}, -{52,77,-29}, -{52,77,-28}, -{52,77,-27}, -{52,77,-26}, -{52,77,-25}, -{52,77,-24}, -{52,77,-23}, -{52,77,-22}, -{52,77,-21}, -{52,77,-20}, -{52,77,-19}, -{52,77,-18}, -{52,77,-17}, -{52,77,-16}, -{52,77,-15}, -{52,77,-14}, -{52,77,-13}, -{52,77,-12}, -{52,77,-11}, -{52,77,-10}, -{52,77,-9}, -{52,77,-8}, -{52,77,-7}, -{52,77,-6}, -{52,77,-5}, -{52,77,-4}, -{52,77,-3}, -{52,77,-2}, -{52,77,-1}, -{52,77,0}, -{52,77,1}, -{52,77,2}, -{52,77,3}, -{52,77,4}, -{52,77,5}, -{52,77,6}, -{52,77,7}, -{52,77,8}, -{52,77,9}, -{52,77,10}, -{52,77,11}, -{52,77,12}, -{52,77,13}, -{52,77,14}, -{52,77,15}, -{52,77,16}, -{52,77,17}, -{52,77,18}, -{52,77,19}, -{52,77,20}, -{52,77,21}, -{52,77,22}, -{52,77,23}, -{52,77,24}, -{52,77,25}, -{52,77,26}, -{52,77,27}, -{52,77,28}, -{52,77,29}, -{52,77,30}, -{52,77,31}, -{52,77,32}, -{52,77,33}, -{52,77,34}, -{52,77,35}, -{52,77,36}, -{52,77,37}, -{52,77,38}, -{52,77,39}, -{52,77,40}, -{52,77,41}, -{52,77,42}, -{52,77,43}, -{52,77,44}, -{52,77,45}, -{52,77,46}, -{52,77,47}, -{52,77,48}, -{52,77,49}, -{52,77,50}, -{52,77,51}, -{52,77,52}, -{52,77,53}, -{52,77,54}, -{52,77,55}, -{52,77,56}, -{52,77,57}, -{52,77,58}, -{52,77,59}, -{52,77,60}, -{52,77,61}, -{52,77,62}, -{52,77,63}, -{52,77,64}, -{52,77,65}, -{52,78,-74}, -{52,78,-73}, -{52,78,-72}, -{52,78,-71}, -{52,78,-70}, -{52,78,-69}, -{52,78,-68}, -{52,78,-67}, -{52,78,-66}, -{52,78,-65}, -{52,78,-64}, -{52,78,-63}, -{52,78,-62}, -{52,78,-61}, -{52,78,-60}, -{52,78,-59}, -{52,78,-58}, -{52,78,-57}, -{52,78,-56}, -{52,78,-55}, -{52,78,-54}, -{52,78,-53}, -{52,78,-52}, -{52,78,-51}, -{52,78,-50}, -{52,78,-49}, -{52,78,-48}, -{52,78,-47}, -{52,78,-46}, -{52,78,-45}, -{52,78,-44}, -{52,78,-43}, -{52,78,-42}, -{52,78,-41}, -{52,78,-40}, -{52,78,-39}, -{52,78,-38}, -{52,78,-37}, -{52,78,-36}, -{52,78,-35}, -{52,78,-34}, -{52,78,-33}, -{52,78,-32}, -{52,78,-31}, -{52,78,-30}, -{52,78,-29}, -{52,78,-28}, -{52,78,-27}, -{52,78,-26}, -{52,78,-25}, -{52,78,-24}, -{52,78,-23}, -{52,78,-22}, -{52,78,-21}, -{52,78,-20}, -{52,78,-19}, -{52,78,-18}, -{52,78,-17}, -{52,78,-16}, -{52,78,-15}, -{52,78,-14}, -{52,78,-13}, -{52,78,-12}, -{52,78,-11}, -{52,78,-10}, -{52,78,-9}, -{52,78,-8}, -{52,78,-7}, -{52,78,-6}, -{52,78,-5}, -{52,78,-4}, -{52,78,-3}, -{52,78,-2}, -{52,78,-1}, -{52,78,0}, -{52,78,1}, -{52,78,2}, -{52,78,3}, -{52,78,4}, -{52,78,5}, -{52,78,6}, -{52,78,7}, -{52,78,8}, -{52,78,9}, -{52,78,10}, -{52,78,11}, -{52,78,12}, -{52,78,13}, -{52,78,14}, -{52,78,15}, -{52,78,16}, -{52,78,17}, -{52,78,18}, -{52,78,19}, -{52,78,20}, -{52,78,21}, -{52,78,22}, -{52,78,23}, -{52,78,24}, -{52,78,25}, -{52,78,26}, -{52,78,27}, -{52,78,28}, -{52,78,29}, -{52,78,30}, -{52,78,31}, -{52,78,32}, -{52,78,33}, -{52,78,34}, -{52,78,35}, -{52,78,36}, -{52,78,37}, -{52,78,38}, -{52,78,39}, -{52,78,40}, -{52,78,41}, -{52,78,42}, -{52,78,43}, -{52,78,44}, -{52,78,45}, -{52,78,46}, -{52,78,47}, -{52,78,48}, -{52,78,49}, -{52,78,50}, -{52,78,51}, -{52,78,52}, -{52,78,53}, -{52,78,54}, -{52,78,55}, -{52,78,56}, -{52,78,57}, -{52,78,58}, -{52,78,59}, -{52,78,60}, -{52,78,61}, -{52,78,62}, -{52,78,63}, -{52,78,64}, -{52,78,65}, -{52,78,66}, -{52,79,-74}, -{52,79,-73}, -{52,79,-72}, -{52,79,-71}, -{52,79,-70}, -{52,79,-69}, -{52,79,-68}, -{52,79,-67}, -{52,79,-66}, -{52,79,-65}, -{52,79,-64}, -{52,79,-63}, -{52,79,-62}, -{52,79,-61}, -{52,79,-60}, -{52,79,-59}, -{52,79,-58}, -{52,79,-57}, -{52,79,-56}, -{52,79,-55}, -{52,79,-54}, -{52,79,-53}, -{52,79,-52}, -{52,79,-51}, -{52,79,-50}, -{52,79,-49}, -{52,79,-48}, -{52,79,-47}, -{52,79,-46}, -{52,79,-45}, -{52,79,-44}, -{52,79,-43}, -{52,79,-42}, -{52,79,-41}, -{52,79,-40}, -{52,79,-39}, -{52,79,-38}, -{52,79,-37}, -{52,79,-36}, -{52,79,-35}, -{52,79,-34}, -{52,79,-33}, -{52,79,-32}, -{52,79,-31}, -{52,79,-30}, -{52,79,-29}, -{52,79,-28}, -{52,79,-27}, -{52,79,-26}, -{52,79,-25}, -{52,79,-24}, -{52,79,-23}, -{52,79,-22}, -{52,79,-21}, -{52,79,-20}, -{52,79,-19}, -{52,79,-18}, -{52,79,-17}, -{52,79,-16}, -{52,79,-15}, -{52,79,-14}, -{52,79,-13}, -{52,79,-12}, -{52,79,-11}, -{52,79,-10}, -{52,79,-9}, -{52,79,-8}, -{52,79,-7}, -{52,79,-6}, -{52,79,-5}, -{52,79,-4}, -{52,79,-3}, -{52,79,-2}, -{52,79,-1}, -{52,79,0}, -{52,79,1}, -{52,79,2}, -{52,79,3}, -{52,79,4}, -{52,79,5}, -{52,79,6}, -{52,79,7}, -{52,79,8}, -{52,79,9}, -{52,79,10}, -{52,79,11}, -{52,79,12}, -{52,79,13}, -{52,79,14}, -{52,79,15}, -{52,79,16}, -{52,79,17}, -{52,79,18}, -{52,79,19}, -{52,79,20}, -{52,79,21}, -{52,79,22}, -{52,79,23}, -{52,79,24}, -{52,79,25}, -{52,79,26}, -{52,79,27}, -{52,79,28}, -{52,79,29}, -{52,79,30}, -{52,79,31}, -{52,79,32}, -{52,79,33}, -{52,79,34}, -{52,79,35}, -{52,79,36}, -{52,79,37}, -{52,79,38}, -{52,79,39}, -{52,79,40}, -{52,79,41}, -{52,79,42}, -{52,79,43}, -{52,79,44}, -{52,79,45}, -{52,79,46}, -{52,79,47}, -{52,79,48}, -{52,79,49}, -{52,79,50}, -{52,79,51}, -{52,79,52}, -{52,79,53}, -{52,79,54}, -{52,79,55}, -{52,79,56}, -{52,79,57}, -{52,80,-74}, -{52,80,-73}, -{52,80,-72}, -{52,80,-71}, -{52,80,-70}, -{52,80,-69}, -{52,80,-68}, -{52,80,-67}, -{52,80,-66}, -{52,80,-65}, -{52,80,-64}, -{52,80,-63}, -{52,80,-62}, -{52,80,-61}, -{52,80,-60}, -{52,80,-59}, -{52,80,-58}, -{52,80,-57}, -{52,80,-56}, -{52,80,-55}, -{52,80,-54}, -{52,80,-53}, -{52,80,-52}, -{52,80,-51}, -{52,80,-50}, -{52,80,-49}, -{52,80,-48}, -{52,80,-47}, -{52,80,-46}, -{52,80,-45}, -{52,80,-44}, -{52,80,-43}, -{52,80,-42}, -{52,80,-41}, -{52,80,-40}, -{52,80,-39}, -{52,80,-38}, -{52,80,-37}, -{52,80,-36}, -{52,80,-35}, -{52,80,-34}, -{52,80,-33}, -{52,80,-32}, -{52,80,-31}, -{52,80,-30}, -{52,80,-29}, -{52,80,-28}, -{52,80,-27}, -{52,80,-26}, -{52,80,-25}, -{52,80,-24}, -{52,80,-23}, -{52,80,-22}, -{52,80,-21}, -{52,80,-20}, -{52,80,-19}, -{52,80,-18}, -{52,80,-17}, -{52,80,-16}, -{52,80,-15}, -{52,80,-14}, -{52,80,-13}, -{52,80,-12}, -{52,80,-11}, -{52,80,-10}, -{52,80,-9}, -{52,80,-8}, -{52,80,-7}, -{52,80,-6}, -{52,80,-5}, -{52,80,-4}, -{52,80,-3}, -{52,80,-2}, -{52,80,-1}, -{52,80,0}, -{52,80,1}, -{52,80,2}, -{52,80,3}, -{52,80,4}, -{52,80,5}, -{52,80,6}, -{52,80,7}, -{52,80,8}, -{52,80,9}, -{52,80,10}, -{52,80,11}, -{52,80,12}, -{52,80,13}, -{52,80,14}, -{52,80,15}, -{52,80,16}, -{52,80,17}, -{52,80,18}, -{52,80,19}, -{52,80,20}, -{52,80,21}, -{52,80,22}, -{52,80,23}, -{52,80,24}, -{52,80,25}, -{52,81,-74}, -{52,81,-73}, -{52,81,-72}, -{52,81,-71}, -{52,81,-70}, -{52,81,-69}, -{52,81,-68}, -{52,81,-67}, -{52,81,-66}, -{52,81,-65}, -{52,81,-64}, -{52,81,-63}, -{52,81,-62}, -{52,81,-61}, -{52,81,-60}, -{52,81,-59}, -{52,81,-58}, -{52,81,-57}, -{52,81,-56}, -{52,81,-55}, -{52,81,-54}, -{52,81,-53}, -{52,81,-52}, -{52,81,-51}, -{52,81,-50}, -{52,81,-49}, -{52,81,-48}, -{52,81,-47}, -{52,81,-46}, -{52,81,-45}, -{52,81,-44}, -{52,81,-43}, -{52,81,-42}, -{52,81,-41}, -{52,81,-40}, -{52,81,-39}, -{52,81,-38}, -{52,81,-37}, -{52,81,-36}, -{52,81,-35}, -{52,81,-34}, -{52,81,-33}, -{52,81,-32}, -{52,81,-31}, -{52,81,-30}, -{52,81,-29}, -{52,81,-28}, -{52,81,-27}, -{52,81,-26}, -{52,81,-25}, -{52,81,-24}, -{52,81,-23}, -{52,81,-22}, -{52,81,-21}, -{52,81,-20}, -{52,81,-19}, -{52,81,-18}, -{52,81,-17}, -{52,81,-16}, -{52,81,-15}, -{52,81,-14}, -{52,81,-13}, -{52,81,-12}, -{52,81,-11}, -{52,81,-10}, -{52,81,-9}, -{52,81,-8}, -{52,81,-7}, -{52,81,-6}, -{52,81,-5}, -{52,81,-4}, -{52,81,-3}, -{52,81,-2}, -{52,81,-1}, -{52,81,0}, -{52,81,1}, -{52,81,2}, -{52,81,3}, -{52,81,4}, -{52,81,5}, -{52,81,6}, -{52,81,7}, -{52,82,-74}, -{52,82,-73}, -{52,82,-72}, -{52,82,-71}, -{52,82,-70}, -{52,82,-69}, -{52,82,-68}, -{52,82,-67}, -{52,82,-66}, -{52,82,-65}, -{52,82,-64}, -{52,82,-63}, -{52,82,-62}, -{52,82,-61}, -{52,82,-60}, -{52,82,-59}, -{52,82,-58}, -{52,82,-57}, -{52,82,-56}, -{52,82,-55}, -{52,82,-54}, -{52,82,-53}, -{52,82,-52}, -{52,82,-51}, -{52,82,-50}, -{52,82,-49}, -{52,82,-48}, -{52,82,-47}, -{52,82,-46}, -{52,82,-45}, -{52,82,-44}, -{52,82,-43}, -{52,82,-42}, -{52,82,-41}, -{52,82,-40}, -{52,82,-39}, -{52,82,-38}, -{52,82,-37}, -{52,82,-36}, -{52,82,-35}, -{52,82,-34}, -{52,82,-33}, -{52,82,-32}, -{52,82,-31}, -{52,82,-30}, -{52,82,-29}, -{52,82,-28}, -{52,82,-27}, -{52,82,-26}, -{52,82,-25}, -{52,82,-24}, -{52,82,-23}, -{52,82,-22}, -{52,82,-21}, -{52,82,-20}, -{52,82,-19}, -{52,82,-18}, -{52,82,-17}, -{52,82,-16}, -{52,82,-15}, -{52,82,-14}, -{52,82,-13}, -{52,82,-12}, -{52,82,-11}, -{52,82,-10}, -{52,82,-9}, -{52,82,-8}, -{52,82,-7}, -{52,82,-6}, -{52,83,-74}, -{52,83,-73}, -{52,83,-72}, -{52,83,-71}, -{52,83,-70}, -{52,83,-69}, -{52,83,-68}, -{52,83,-67}, -{52,83,-66}, -{52,83,-65}, -{52,83,-64}, -{52,83,-63}, -{52,83,-62}, -{52,83,-61}, -{52,83,-60}, -{52,83,-59}, -{52,83,-58}, -{52,83,-57}, -{52,83,-56}, -{52,83,-55}, -{52,83,-54}, -{52,83,-53}, -{52,83,-52}, -{52,83,-51}, -{52,83,-50}, -{52,83,-49}, -{52,83,-48}, -{52,83,-47}, -{52,83,-46}, -{52,83,-45}, -{52,83,-44}, -{52,83,-43}, -{52,83,-42}, -{52,83,-41}, -{52,83,-40}, -{52,83,-39}, -{52,83,-38}, -{52,83,-37}, -{52,83,-36}, -{52,83,-35}, -{52,83,-34}, -{52,83,-33}, -{52,83,-32}, -{52,83,-31}, -{52,83,-30}, -{52,83,-29}, -{52,83,-28}, -{52,83,-27}, -{52,83,-26}, -{52,83,-25}, -{52,83,-24}, -{52,83,-23}, -{52,83,-22}, -{52,83,-21}, -{52,83,-20}, -{52,83,-19}, -{52,83,-18}, -{52,83,-17}, -{52,84,-74}, -{52,84,-73}, -{52,84,-72}, -{52,84,-71}, -{52,84,-70}, -{52,84,-69}, -{52,84,-68}, -{52,84,-67}, -{52,84,-66}, -{52,84,-65}, -{52,84,-64}, -{52,84,-63}, -{52,84,-62}, -{52,84,-61}, -{52,84,-60}, -{52,84,-59}, -{52,84,-58}, -{52,84,-57}, -{52,84,-56}, -{52,84,-55}, -{52,84,-54}, -{52,84,-53}, -{52,84,-52}, -{52,84,-51}, -{52,84,-50}, -{52,84,-49}, -{52,84,-48}, -{52,84,-47}, -{52,84,-46}, -{52,84,-45}, -{52,84,-44}, -{52,84,-43}, -{52,84,-42}, -{52,84,-41}, -{52,84,-40}, -{52,84,-39}, -{52,84,-38}, -{52,84,-37}, -{52,84,-36}, -{52,84,-35}, -{52,84,-34}, -{52,84,-33}, -{52,84,-32}, -{52,84,-31}, -{52,84,-30}, -{52,84,-29}, -{52,84,-28}, -{52,84,-27}, -{52,85,-74}, -{52,85,-73}, -{52,85,-72}, -{52,85,-71}, -{52,85,-70}, -{52,85,-69}, -{52,85,-68}, -{52,85,-67}, -{52,85,-66}, -{52,85,-65}, -{52,85,-64}, -{52,85,-63}, -{52,85,-62}, -{52,85,-61}, -{52,85,-60}, -{52,85,-59}, -{52,85,-58}, -{52,85,-57}, -{52,85,-56}, -{52,85,-55}, -{52,85,-54}, -{52,85,-53}, -{52,85,-52}, -{52,85,-51}, -{52,85,-50}, -{52,85,-49}, -{52,85,-48}, -{52,85,-47}, -{52,85,-46}, -{52,85,-45}, -{52,85,-44}, -{52,85,-43}, -{52,85,-42}, -{52,85,-41}, -{52,85,-40}, -{52,85,-39}, -{52,85,-38}, -{52,85,-37}, -{52,85,-36}, -{52,85,-35}, -{52,86,-74}, -{52,86,-73}, -{52,86,-72}, -{52,86,-71}, -{52,86,-70}, -{52,86,-69}, -{52,86,-68}, -{52,86,-67}, -{52,86,-66}, -{52,86,-65}, -{52,86,-64}, -{52,86,-63}, -{52,86,-62}, -{52,86,-61}, -{52,86,-60}, -{52,86,-59}, -{52,86,-58}, -{52,86,-57}, -{52,86,-56}, -{52,86,-55}, -{52,86,-54}, -{52,86,-53}, -{52,86,-52}, -{52,86,-51}, -{52,86,-50}, -{52,86,-49}, -{52,86,-48}, -{52,86,-47}, -{52,86,-46}, -{52,86,-45}, -{52,86,-44}, -{52,86,-43}, -{52,87,-74}, -{52,87,-73}, -{52,87,-72}, -{52,87,-71}, -{52,87,-70}, -{52,87,-69}, -{52,87,-68}, -{52,87,-67}, -{52,87,-66}, -{52,87,-65}, -{52,87,-64}, -{52,87,-63}, -{52,87,-62}, -{52,87,-61}, -{52,87,-60}, -{52,87,-59}, -{52,87,-58}, -{52,87,-57}, -{52,87,-56}, -{52,87,-55}, -{52,87,-54}, -{52,87,-53}, -{52,87,-52}, -{52,87,-51}, -{52,87,-50}, -{52,88,-74}, -{52,88,-73}, -{52,88,-72}, -{52,88,-71}, -{52,88,-70}, -{52,88,-69}, -{52,88,-68}, -{52,88,-67}, -{52,88,-66}, -{52,88,-65}, -{52,88,-64}, -{52,88,-63}, -{52,88,-62}, -{52,88,-61}, -{52,88,-60}, -{52,88,-59}, -{52,88,-58}, -{52,88,-57}, -{52,89,-74}, -{52,89,-73}, -{52,89,-72}, -{52,89,-71}, -{52,89,-70}, -{52,89,-69}, -{52,89,-68}, -{52,89,-67}, -{52,89,-66}, -{52,89,-65}, -{52,89,-64}, -{52,89,-63}, -{52,90,-74}, -{52,90,-73}, -{52,90,-72}, -{52,90,-71}, -{52,90,-70}, -{52,90,-69}, -{52,91,-74}, -{53,-57,53}, -{53,-57,54}, -{53,-57,55}, -{53,-56,49}, -{53,-56,50}, -{53,-56,51}, -{53,-56,52}, -{53,-56,53}, -{53,-56,54}, -{53,-56,55}, -{53,-55,45}, -{53,-55,46}, -{53,-55,47}, -{53,-55,48}, -{53,-55,49}, -{53,-55,50}, -{53,-55,51}, -{53,-55,52}, -{53,-55,53}, -{53,-55,54}, -{53,-55,55}, -{53,-54,41}, -{53,-54,42}, -{53,-54,43}, -{53,-54,44}, -{53,-54,45}, -{53,-54,46}, -{53,-54,47}, -{53,-54,48}, -{53,-54,49}, -{53,-54,50}, -{53,-54,51}, -{53,-54,52}, -{53,-54,53}, -{53,-54,54}, -{53,-54,55}, -{53,-53,38}, -{53,-53,39}, -{53,-53,40}, -{53,-53,41}, -{53,-53,42}, -{53,-53,43}, -{53,-53,44}, -{53,-53,45}, -{53,-53,46}, -{53,-53,47}, -{53,-53,48}, -{53,-53,49}, -{53,-53,50}, -{53,-53,51}, -{53,-53,52}, -{53,-53,53}, -{53,-53,54}, -{53,-53,55}, -{53,-52,35}, -{53,-52,36}, -{53,-52,37}, -{53,-52,38}, -{53,-52,39}, -{53,-52,40}, -{53,-52,41}, -{53,-52,42}, -{53,-52,43}, -{53,-52,44}, -{53,-52,45}, -{53,-52,46}, -{53,-52,47}, -{53,-52,48}, -{53,-52,49}, -{53,-52,50}, -{53,-52,51}, -{53,-52,52}, -{53,-52,53}, -{53,-52,54}, -{53,-52,55}, -{53,-51,32}, -{53,-51,33}, -{53,-51,34}, -{53,-51,35}, -{53,-51,36}, -{53,-51,37}, -{53,-51,38}, -{53,-51,39}, -{53,-51,40}, -{53,-51,41}, -{53,-51,42}, -{53,-51,43}, -{53,-51,44}, -{53,-51,45}, -{53,-51,46}, -{53,-51,47}, -{53,-51,48}, -{53,-51,49}, -{53,-51,50}, -{53,-51,51}, -{53,-51,52}, -{53,-51,53}, -{53,-51,54}, -{53,-51,55}, -{53,-50,29}, -{53,-50,30}, -{53,-50,31}, -{53,-50,32}, -{53,-50,33}, -{53,-50,34}, -{53,-50,35}, -{53,-50,36}, -{53,-50,37}, -{53,-50,38}, -{53,-50,39}, -{53,-50,40}, -{53,-50,41}, -{53,-50,42}, -{53,-50,43}, -{53,-50,44}, -{53,-50,45}, -{53,-50,46}, -{53,-50,47}, -{53,-50,48}, -{53,-50,49}, -{53,-50,50}, -{53,-50,51}, -{53,-50,52}, -{53,-50,53}, -{53,-50,54}, -{53,-50,55}, -{53,-49,26}, -{53,-49,27}, -{53,-49,28}, -{53,-49,29}, -{53,-49,30}, -{53,-49,31}, -{53,-49,32}, -{53,-49,33}, -{53,-49,34}, -{53,-49,35}, -{53,-49,36}, -{53,-49,37}, -{53,-49,38}, -{53,-49,39}, -{53,-49,40}, -{53,-49,41}, -{53,-49,42}, -{53,-49,43}, -{53,-49,44}, -{53,-49,45}, -{53,-49,46}, -{53,-49,47}, -{53,-49,48}, -{53,-49,49}, -{53,-49,50}, -{53,-49,51}, -{53,-49,52}, -{53,-49,53}, -{53,-49,54}, -{53,-49,55}, -{53,-48,24}, -{53,-48,25}, -{53,-48,26}, -{53,-48,27}, -{53,-48,28}, -{53,-48,29}, -{53,-48,30}, -{53,-48,31}, -{53,-48,32}, -{53,-48,33}, -{53,-48,34}, -{53,-48,35}, -{53,-48,36}, -{53,-48,37}, -{53,-48,38}, -{53,-48,39}, -{53,-48,40}, -{53,-48,41}, -{53,-48,42}, -{53,-48,43}, -{53,-48,44}, -{53,-48,45}, -{53,-48,46}, -{53,-48,47}, -{53,-48,48}, -{53,-48,49}, -{53,-48,50}, -{53,-48,51}, -{53,-48,52}, -{53,-48,53}, -{53,-48,54}, -{53,-48,55}, -{53,-47,21}, -{53,-47,22}, -{53,-47,23}, -{53,-47,24}, -{53,-47,25}, -{53,-47,26}, -{53,-47,27}, -{53,-47,28}, -{53,-47,29}, -{53,-47,30}, -{53,-47,31}, -{53,-47,32}, -{53,-47,33}, -{53,-47,34}, -{53,-47,35}, -{53,-47,36}, -{53,-47,37}, -{53,-47,38}, -{53,-47,39}, -{53,-47,40}, -{53,-47,41}, -{53,-47,42}, -{53,-47,43}, -{53,-47,44}, -{53,-47,45}, -{53,-47,46}, -{53,-47,47}, -{53,-47,48}, -{53,-47,49}, -{53,-47,50}, -{53,-47,51}, -{53,-47,52}, -{53,-47,53}, -{53,-47,54}, -{53,-47,55}, -{53,-46,19}, -{53,-46,20}, -{53,-46,21}, -{53,-46,22}, -{53,-46,23}, -{53,-46,24}, -{53,-46,25}, -{53,-46,26}, -{53,-46,27}, -{53,-46,28}, -{53,-46,29}, -{53,-46,30}, -{53,-46,31}, -{53,-46,32}, -{53,-46,33}, -{53,-46,34}, -{53,-46,35}, -{53,-46,36}, -{53,-46,37}, -{53,-46,38}, -{53,-46,39}, -{53,-46,40}, -{53,-46,41}, -{53,-46,42}, -{53,-46,43}, -{53,-46,44}, -{53,-46,45}, -{53,-46,46}, -{53,-46,47}, -{53,-46,48}, -{53,-46,49}, -{53,-46,50}, -{53,-46,51}, -{53,-46,52}, -{53,-46,53}, -{53,-46,54}, -{53,-46,55}, -{53,-46,56}, -{53,-45,17}, -{53,-45,18}, -{53,-45,19}, -{53,-45,20}, -{53,-45,21}, -{53,-45,22}, -{53,-45,23}, -{53,-45,24}, -{53,-45,25}, -{53,-45,26}, -{53,-45,27}, -{53,-45,28}, -{53,-45,29}, -{53,-45,30}, -{53,-45,31}, -{53,-45,32}, -{53,-45,33}, -{53,-45,34}, -{53,-45,35}, -{53,-45,36}, -{53,-45,37}, -{53,-45,38}, -{53,-45,39}, -{53,-45,40}, -{53,-45,41}, -{53,-45,42}, -{53,-45,43}, -{53,-45,44}, -{53,-45,45}, -{53,-45,46}, -{53,-45,47}, -{53,-45,48}, -{53,-45,49}, -{53,-45,50}, -{53,-45,51}, -{53,-45,52}, -{53,-45,53}, -{53,-45,54}, -{53,-45,55}, -{53,-45,56}, -{53,-44,15}, -{53,-44,16}, -{53,-44,17}, -{53,-44,18}, -{53,-44,19}, -{53,-44,20}, -{53,-44,21}, -{53,-44,22}, -{53,-44,23}, -{53,-44,24}, -{53,-44,25}, -{53,-44,26}, -{53,-44,27}, -{53,-44,28}, -{53,-44,29}, -{53,-44,30}, -{53,-44,31}, -{53,-44,32}, -{53,-44,33}, -{53,-44,34}, -{53,-44,35}, -{53,-44,36}, -{53,-44,37}, -{53,-44,38}, -{53,-44,39}, -{53,-44,40}, -{53,-44,41}, -{53,-44,42}, -{53,-44,43}, -{53,-44,44}, -{53,-44,45}, -{53,-44,46}, -{53,-44,47}, -{53,-44,48}, -{53,-44,49}, -{53,-44,50}, -{53,-44,51}, -{53,-44,52}, -{53,-44,53}, -{53,-44,54}, -{53,-44,55}, -{53,-44,56}, -{53,-43,12}, -{53,-43,13}, -{53,-43,14}, -{53,-43,15}, -{53,-43,16}, -{53,-43,17}, -{53,-43,18}, -{53,-43,19}, -{53,-43,20}, -{53,-43,21}, -{53,-43,22}, -{53,-43,23}, -{53,-43,24}, -{53,-43,25}, -{53,-43,26}, -{53,-43,27}, -{53,-43,28}, -{53,-43,29}, -{53,-43,30}, -{53,-43,31}, -{53,-43,32}, -{53,-43,33}, -{53,-43,34}, -{53,-43,35}, -{53,-43,36}, -{53,-43,37}, -{53,-43,38}, -{53,-43,39}, -{53,-43,40}, -{53,-43,41}, -{53,-43,42}, -{53,-43,43}, -{53,-43,44}, -{53,-43,45}, -{53,-43,46}, -{53,-43,47}, -{53,-43,48}, -{53,-43,49}, -{53,-43,50}, -{53,-43,51}, -{53,-43,52}, -{53,-43,53}, -{53,-43,54}, -{53,-43,55}, -{53,-43,56}, -{53,-42,10}, -{53,-42,11}, -{53,-42,12}, -{53,-42,13}, -{53,-42,14}, -{53,-42,15}, -{53,-42,16}, -{53,-42,17}, -{53,-42,18}, -{53,-42,19}, -{53,-42,20}, -{53,-42,21}, -{53,-42,22}, -{53,-42,23}, -{53,-42,24}, -{53,-42,25}, -{53,-42,26}, -{53,-42,27}, -{53,-42,28}, -{53,-42,29}, -{53,-42,30}, -{53,-42,31}, -{53,-42,32}, -{53,-42,33}, -{53,-42,34}, -{53,-42,35}, -{53,-42,36}, -{53,-42,37}, -{53,-42,38}, -{53,-42,39}, -{53,-42,40}, -{53,-42,41}, -{53,-42,42}, -{53,-42,43}, -{53,-42,44}, -{53,-42,45}, -{53,-42,46}, -{53,-42,47}, -{53,-42,48}, -{53,-42,49}, -{53,-42,50}, -{53,-42,51}, -{53,-42,52}, -{53,-42,53}, -{53,-42,54}, -{53,-42,55}, -{53,-42,56}, -{53,-41,8}, -{53,-41,9}, -{53,-41,10}, -{53,-41,11}, -{53,-41,12}, -{53,-41,13}, -{53,-41,14}, -{53,-41,15}, -{53,-41,16}, -{53,-41,17}, -{53,-41,18}, -{53,-41,19}, -{53,-41,20}, -{53,-41,21}, -{53,-41,22}, -{53,-41,23}, -{53,-41,24}, -{53,-41,25}, -{53,-41,26}, -{53,-41,27}, -{53,-41,28}, -{53,-41,29}, -{53,-41,30}, -{53,-41,31}, -{53,-41,32}, -{53,-41,33}, -{53,-41,34}, -{53,-41,35}, -{53,-41,36}, -{53,-41,37}, -{53,-41,38}, -{53,-41,39}, -{53,-41,40}, -{53,-41,41}, -{53,-41,42}, -{53,-41,43}, -{53,-41,44}, -{53,-41,45}, -{53,-41,46}, -{53,-41,47}, -{53,-41,48}, -{53,-41,49}, -{53,-41,50}, -{53,-41,51}, -{53,-41,52}, -{53,-41,53}, -{53,-41,54}, -{53,-41,55}, -{53,-41,56}, -{53,-40,7}, -{53,-40,8}, -{53,-40,9}, -{53,-40,10}, -{53,-40,11}, -{53,-40,12}, -{53,-40,13}, -{53,-40,14}, -{53,-40,15}, -{53,-40,16}, -{53,-40,17}, -{53,-40,18}, -{53,-40,19}, -{53,-40,20}, -{53,-40,21}, -{53,-40,22}, -{53,-40,23}, -{53,-40,24}, -{53,-40,25}, -{53,-40,26}, -{53,-40,27}, -{53,-40,28}, -{53,-40,29}, -{53,-40,30}, -{53,-40,31}, -{53,-40,32}, -{53,-40,33}, -{53,-40,34}, -{53,-40,35}, -{53,-40,36}, -{53,-40,37}, -{53,-40,38}, -{53,-40,39}, -{53,-40,40}, -{53,-40,41}, -{53,-40,42}, -{53,-40,43}, -{53,-40,44}, -{53,-40,45}, -{53,-40,46}, -{53,-40,47}, -{53,-40,48}, -{53,-40,49}, -{53,-40,50}, -{53,-40,51}, -{53,-40,52}, -{53,-40,53}, -{53,-40,54}, -{53,-40,55}, -{53,-40,56}, -{53,-39,5}, -{53,-39,6}, -{53,-39,7}, -{53,-39,8}, -{53,-39,9}, -{53,-39,10}, -{53,-39,11}, -{53,-39,12}, -{53,-39,13}, -{53,-39,14}, -{53,-39,15}, -{53,-39,16}, -{53,-39,17}, -{53,-39,18}, -{53,-39,19}, -{53,-39,20}, -{53,-39,21}, -{53,-39,22}, -{53,-39,23}, -{53,-39,24}, -{53,-39,25}, -{53,-39,26}, -{53,-39,27}, -{53,-39,28}, -{53,-39,29}, -{53,-39,30}, -{53,-39,31}, -{53,-39,32}, -{53,-39,33}, -{53,-39,34}, -{53,-39,35}, -{53,-39,36}, -{53,-39,37}, -{53,-39,38}, -{53,-39,39}, -{53,-39,40}, -{53,-39,41}, -{53,-39,42}, -{53,-39,43}, -{53,-39,44}, -{53,-39,45}, -{53,-39,46}, -{53,-39,47}, -{53,-39,48}, -{53,-39,49}, -{53,-39,50}, -{53,-39,51}, -{53,-39,52}, -{53,-39,53}, -{53,-39,54}, -{53,-39,55}, -{53,-39,56}, -{53,-38,3}, -{53,-38,4}, -{53,-38,5}, -{53,-38,6}, -{53,-38,7}, -{53,-38,8}, -{53,-38,9}, -{53,-38,10}, -{53,-38,11}, -{53,-38,12}, -{53,-38,13}, -{53,-38,14}, -{53,-38,15}, -{53,-38,16}, -{53,-38,17}, -{53,-38,18}, -{53,-38,19}, -{53,-38,20}, -{53,-38,21}, -{53,-38,22}, -{53,-38,23}, -{53,-38,24}, -{53,-38,25}, -{53,-38,26}, -{53,-38,27}, -{53,-38,28}, -{53,-38,29}, -{53,-38,30}, -{53,-38,31}, -{53,-38,32}, -{53,-38,33}, -{53,-38,34}, -{53,-38,35}, -{53,-38,36}, -{53,-38,37}, -{53,-38,38}, -{53,-38,39}, -{53,-38,40}, -{53,-38,41}, -{53,-38,42}, -{53,-38,43}, -{53,-38,44}, -{53,-38,45}, -{53,-38,46}, -{53,-38,47}, -{53,-38,48}, -{53,-38,49}, -{53,-38,50}, -{53,-38,51}, -{53,-38,52}, -{53,-38,53}, -{53,-38,54}, -{53,-38,55}, -{53,-38,56}, -{53,-37,1}, -{53,-37,2}, -{53,-37,3}, -{53,-37,4}, -{53,-37,5}, -{53,-37,6}, -{53,-37,7}, -{53,-37,8}, -{53,-37,9}, -{53,-37,10}, -{53,-37,11}, -{53,-37,12}, -{53,-37,13}, -{53,-37,14}, -{53,-37,15}, -{53,-37,16}, -{53,-37,17}, -{53,-37,18}, -{53,-37,19}, -{53,-37,20}, -{53,-37,21}, -{53,-37,22}, -{53,-37,23}, -{53,-37,24}, -{53,-37,25}, -{53,-37,26}, -{53,-37,27}, -{53,-37,28}, -{53,-37,29}, -{53,-37,30}, -{53,-37,31}, -{53,-37,32}, -{53,-37,33}, -{53,-37,34}, -{53,-37,35}, -{53,-37,36}, -{53,-37,37}, -{53,-37,38}, -{53,-37,39}, -{53,-37,40}, -{53,-37,41}, -{53,-37,42}, -{53,-37,43}, -{53,-37,44}, -{53,-37,45}, -{53,-37,46}, -{53,-37,47}, -{53,-37,48}, -{53,-37,49}, -{53,-37,50}, -{53,-37,51}, -{53,-37,52}, -{53,-37,53}, -{53,-37,54}, -{53,-37,55}, -{53,-37,56}, -{53,-36,-1}, -{53,-36,0}, -{53,-36,1}, -{53,-36,2}, -{53,-36,3}, -{53,-36,4}, -{53,-36,5}, -{53,-36,6}, -{53,-36,7}, -{53,-36,8}, -{53,-36,9}, -{53,-36,10}, -{53,-36,11}, -{53,-36,12}, -{53,-36,13}, -{53,-36,14}, -{53,-36,15}, -{53,-36,16}, -{53,-36,17}, -{53,-36,18}, -{53,-36,19}, -{53,-36,20}, -{53,-36,21}, -{53,-36,22}, -{53,-36,23}, -{53,-36,24}, -{53,-36,25}, -{53,-36,26}, -{53,-36,27}, -{53,-36,28}, -{53,-36,29}, -{53,-36,30}, -{53,-36,31}, -{53,-36,32}, -{53,-36,33}, -{53,-36,34}, -{53,-36,35}, -{53,-36,36}, -{53,-36,37}, -{53,-36,38}, -{53,-36,39}, -{53,-36,40}, -{53,-36,41}, -{53,-36,42}, -{53,-36,43}, -{53,-36,44}, -{53,-36,45}, -{53,-36,46}, -{53,-36,47}, -{53,-36,48}, -{53,-36,49}, -{53,-36,50}, -{53,-36,51}, -{53,-36,52}, -{53,-36,53}, -{53,-36,54}, -{53,-36,55}, -{53,-36,56}, -{53,-35,-2}, -{53,-35,-1}, -{53,-35,0}, -{53,-35,1}, -{53,-35,2}, -{53,-35,3}, -{53,-35,4}, -{53,-35,5}, -{53,-35,6}, -{53,-35,7}, -{53,-35,8}, -{53,-35,9}, -{53,-35,10}, -{53,-35,11}, -{53,-35,12}, -{53,-35,13}, -{53,-35,14}, -{53,-35,15}, -{53,-35,16}, -{53,-35,17}, -{53,-35,18}, -{53,-35,19}, -{53,-35,20}, -{53,-35,21}, -{53,-35,22}, -{53,-35,23}, -{53,-35,24}, -{53,-35,25}, -{53,-35,26}, -{53,-35,27}, -{53,-35,28}, -{53,-35,29}, -{53,-35,30}, -{53,-35,31}, -{53,-35,32}, -{53,-35,33}, -{53,-35,34}, -{53,-35,35}, -{53,-35,36}, -{53,-35,37}, -{53,-35,38}, -{53,-35,39}, -{53,-35,40}, -{53,-35,41}, -{53,-35,42}, -{53,-35,43}, -{53,-35,44}, -{53,-35,45}, -{53,-35,46}, -{53,-35,47}, -{53,-35,48}, -{53,-35,49}, -{53,-35,50}, -{53,-35,51}, -{53,-35,52}, -{53,-35,53}, -{53,-35,54}, -{53,-35,55}, -{53,-35,56}, -{53,-34,-4}, -{53,-34,-3}, -{53,-34,-2}, -{53,-34,-1}, -{53,-34,0}, -{53,-34,1}, -{53,-34,2}, -{53,-34,3}, -{53,-34,4}, -{53,-34,5}, -{53,-34,6}, -{53,-34,7}, -{53,-34,8}, -{53,-34,9}, -{53,-34,10}, -{53,-34,11}, -{53,-34,12}, -{53,-34,13}, -{53,-34,14}, -{53,-34,15}, -{53,-34,16}, -{53,-34,17}, -{53,-34,18}, -{53,-34,19}, -{53,-34,20}, -{53,-34,21}, -{53,-34,22}, -{53,-34,23}, -{53,-34,24}, -{53,-34,25}, -{53,-34,26}, -{53,-34,27}, -{53,-34,28}, -{53,-34,29}, -{53,-34,30}, -{53,-34,31}, -{53,-34,32}, -{53,-34,33}, -{53,-34,34}, -{53,-34,35}, -{53,-34,36}, -{53,-34,37}, -{53,-34,38}, -{53,-34,39}, -{53,-34,40}, -{53,-34,41}, -{53,-34,42}, -{53,-34,43}, -{53,-34,44}, -{53,-34,45}, -{53,-34,46}, -{53,-34,47}, -{53,-34,48}, -{53,-34,49}, -{53,-34,50}, -{53,-34,51}, -{53,-34,52}, -{53,-34,53}, -{53,-34,54}, -{53,-34,55}, -{53,-34,56}, -{53,-33,-6}, -{53,-33,-5}, -{53,-33,-4}, -{53,-33,-3}, -{53,-33,-2}, -{53,-33,-1}, -{53,-33,0}, -{53,-33,1}, -{53,-33,2}, -{53,-33,3}, -{53,-33,4}, -{53,-33,5}, -{53,-33,6}, -{53,-33,7}, -{53,-33,8}, -{53,-33,9}, -{53,-33,10}, -{53,-33,11}, -{53,-33,12}, -{53,-33,13}, -{53,-33,14}, -{53,-33,15}, -{53,-33,16}, -{53,-33,17}, -{53,-33,18}, -{53,-33,19}, -{53,-33,20}, -{53,-33,21}, -{53,-33,22}, -{53,-33,23}, -{53,-33,24}, -{53,-33,25}, -{53,-33,26}, -{53,-33,27}, -{53,-33,28}, -{53,-33,29}, -{53,-33,30}, -{53,-33,31}, -{53,-33,32}, -{53,-33,33}, -{53,-33,34}, -{53,-33,35}, -{53,-33,36}, -{53,-33,37}, -{53,-33,38}, -{53,-33,39}, -{53,-33,40}, -{53,-33,41}, -{53,-33,42}, -{53,-33,43}, -{53,-33,44}, -{53,-33,45}, -{53,-33,46}, -{53,-33,47}, -{53,-33,48}, -{53,-33,49}, -{53,-33,50}, -{53,-33,51}, -{53,-33,52}, -{53,-33,53}, -{53,-33,54}, -{53,-33,55}, -{53,-33,56}, -{53,-32,-7}, -{53,-32,-6}, -{53,-32,-5}, -{53,-32,-4}, -{53,-32,-3}, -{53,-32,-2}, -{53,-32,-1}, -{53,-32,0}, -{53,-32,1}, -{53,-32,2}, -{53,-32,3}, -{53,-32,4}, -{53,-32,5}, -{53,-32,6}, -{53,-32,7}, -{53,-32,8}, -{53,-32,9}, -{53,-32,10}, -{53,-32,11}, -{53,-32,12}, -{53,-32,13}, -{53,-32,14}, -{53,-32,15}, -{53,-32,16}, -{53,-32,17}, -{53,-32,18}, -{53,-32,19}, -{53,-32,20}, -{53,-32,21}, -{53,-32,22}, -{53,-32,23}, -{53,-32,24}, -{53,-32,25}, -{53,-32,26}, -{53,-32,27}, -{53,-32,28}, -{53,-32,29}, -{53,-32,30}, -{53,-32,31}, -{53,-32,32}, -{53,-32,33}, -{53,-32,34}, -{53,-32,35}, -{53,-32,36}, -{53,-32,37}, -{53,-32,38}, -{53,-32,39}, -{53,-32,40}, -{53,-32,41}, -{53,-32,42}, -{53,-32,43}, -{53,-32,44}, -{53,-32,45}, -{53,-32,46}, -{53,-32,47}, -{53,-32,48}, -{53,-32,49}, -{53,-32,50}, -{53,-32,51}, -{53,-32,52}, -{53,-32,53}, -{53,-32,54}, -{53,-32,55}, -{53,-32,56}, -{53,-31,-9}, -{53,-31,-8}, -{53,-31,-7}, -{53,-31,-6}, -{53,-31,-5}, -{53,-31,-4}, -{53,-31,-3}, -{53,-31,-2}, -{53,-31,-1}, -{53,-31,0}, -{53,-31,1}, -{53,-31,2}, -{53,-31,3}, -{53,-31,4}, -{53,-31,5}, -{53,-31,6}, -{53,-31,7}, -{53,-31,8}, -{53,-31,9}, -{53,-31,10}, -{53,-31,11}, -{53,-31,12}, -{53,-31,13}, -{53,-31,14}, -{53,-31,15}, -{53,-31,16}, -{53,-31,17}, -{53,-31,18}, -{53,-31,19}, -{53,-31,20}, -{53,-31,21}, -{53,-31,22}, -{53,-31,23}, -{53,-31,24}, -{53,-31,25}, -{53,-31,26}, -{53,-31,27}, -{53,-31,28}, -{53,-31,29}, -{53,-31,30}, -{53,-31,31}, -{53,-31,32}, -{53,-31,33}, -{53,-31,34}, -{53,-31,35}, -{53,-31,36}, -{53,-31,37}, -{53,-31,38}, -{53,-31,39}, -{53,-31,40}, -{53,-31,41}, -{53,-31,42}, -{53,-31,43}, -{53,-31,44}, -{53,-31,45}, -{53,-31,46}, -{53,-31,47}, -{53,-31,48}, -{53,-31,49}, -{53,-31,50}, -{53,-31,51}, -{53,-31,52}, -{53,-31,53}, -{53,-31,54}, -{53,-31,55}, -{53,-31,56}, -{53,-30,-10}, -{53,-30,-9}, -{53,-30,-8}, -{53,-30,-7}, -{53,-30,-6}, -{53,-30,-5}, -{53,-30,-4}, -{53,-30,-3}, -{53,-30,-2}, -{53,-30,-1}, -{53,-30,0}, -{53,-30,1}, -{53,-30,2}, -{53,-30,3}, -{53,-30,4}, -{53,-30,5}, -{53,-30,6}, -{53,-30,7}, -{53,-30,8}, -{53,-30,9}, -{53,-30,10}, -{53,-30,11}, -{53,-30,12}, -{53,-30,13}, -{53,-30,14}, -{53,-30,15}, -{53,-30,16}, -{53,-30,17}, -{53,-30,18}, -{53,-30,19}, -{53,-30,20}, -{53,-30,21}, -{53,-30,22}, -{53,-30,23}, -{53,-30,24}, -{53,-30,25}, -{53,-30,26}, -{53,-30,27}, -{53,-30,28}, -{53,-30,29}, -{53,-30,30}, -{53,-30,31}, -{53,-30,32}, -{53,-30,33}, -{53,-30,34}, -{53,-30,35}, -{53,-30,36}, -{53,-30,37}, -{53,-30,38}, -{53,-30,39}, -{53,-30,40}, -{53,-30,41}, -{53,-30,42}, -{53,-30,43}, -{53,-30,44}, -{53,-30,45}, -{53,-30,46}, -{53,-30,47}, -{53,-30,48}, -{53,-30,49}, -{53,-30,50}, -{53,-30,51}, -{53,-30,52}, -{53,-30,53}, -{53,-30,54}, -{53,-30,55}, -{53,-30,56}, -{53,-29,-12}, -{53,-29,-11}, -{53,-29,-10}, -{53,-29,-9}, -{53,-29,-8}, -{53,-29,-7}, -{53,-29,-6}, -{53,-29,-5}, -{53,-29,-4}, -{53,-29,-3}, -{53,-29,-2}, -{53,-29,-1}, -{53,-29,0}, -{53,-29,1}, -{53,-29,2}, -{53,-29,3}, -{53,-29,4}, -{53,-29,5}, -{53,-29,6}, -{53,-29,7}, -{53,-29,8}, -{53,-29,9}, -{53,-29,10}, -{53,-29,11}, -{53,-29,12}, -{53,-29,13}, -{53,-29,14}, -{53,-29,15}, -{53,-29,16}, -{53,-29,17}, -{53,-29,18}, -{53,-29,19}, -{53,-29,20}, -{53,-29,21}, -{53,-29,22}, -{53,-29,23}, -{53,-29,24}, -{53,-29,25}, -{53,-29,26}, -{53,-29,27}, -{53,-29,28}, -{53,-29,29}, -{53,-29,30}, -{53,-29,31}, -{53,-29,32}, -{53,-29,33}, -{53,-29,34}, -{53,-29,35}, -{53,-29,36}, -{53,-29,37}, -{53,-29,38}, -{53,-29,39}, -{53,-29,40}, -{53,-29,41}, -{53,-29,42}, -{53,-29,43}, -{53,-29,44}, -{53,-29,45}, -{53,-29,46}, -{53,-29,47}, -{53,-29,48}, -{53,-29,49}, -{53,-29,50}, -{53,-29,51}, -{53,-29,52}, -{53,-29,53}, -{53,-29,54}, -{53,-29,55}, -{53,-29,56}, -{53,-28,-13}, -{53,-28,-12}, -{53,-28,-11}, -{53,-28,-10}, -{53,-28,-9}, -{53,-28,-8}, -{53,-28,-7}, -{53,-28,-6}, -{53,-28,-5}, -{53,-28,-4}, -{53,-28,-3}, -{53,-28,-2}, -{53,-28,-1}, -{53,-28,0}, -{53,-28,1}, -{53,-28,2}, -{53,-28,3}, -{53,-28,4}, -{53,-28,5}, -{53,-28,6}, -{53,-28,7}, -{53,-28,8}, -{53,-28,9}, -{53,-28,10}, -{53,-28,11}, -{53,-28,12}, -{53,-28,13}, -{53,-28,14}, -{53,-28,15}, -{53,-28,16}, -{53,-28,17}, -{53,-28,18}, -{53,-28,19}, -{53,-28,20}, -{53,-28,21}, -{53,-28,22}, -{53,-28,23}, -{53,-28,24}, -{53,-28,25}, -{53,-28,26}, -{53,-28,27}, -{53,-28,28}, -{53,-28,29}, -{53,-28,30}, -{53,-28,31}, -{53,-28,32}, -{53,-28,33}, -{53,-28,34}, -{53,-28,35}, -{53,-28,36}, -{53,-28,37}, -{53,-28,38}, -{53,-28,39}, -{53,-28,40}, -{53,-28,41}, -{53,-28,42}, -{53,-28,43}, -{53,-28,44}, -{53,-28,45}, -{53,-28,46}, -{53,-28,47}, -{53,-28,48}, -{53,-28,49}, -{53,-28,50}, -{53,-28,51}, -{53,-28,52}, -{53,-28,53}, -{53,-28,54}, -{53,-28,55}, -{53,-28,56}, -{53,-27,-15}, -{53,-27,-14}, -{53,-27,-13}, -{53,-27,-12}, -{53,-27,-11}, -{53,-27,-10}, -{53,-27,-9}, -{53,-27,-8}, -{53,-27,-7}, -{53,-27,-6}, -{53,-27,-5}, -{53,-27,-4}, -{53,-27,-3}, -{53,-27,-2}, -{53,-27,-1}, -{53,-27,0}, -{53,-27,1}, -{53,-27,2}, -{53,-27,3}, -{53,-27,4}, -{53,-27,5}, -{53,-27,6}, -{53,-27,7}, -{53,-27,8}, -{53,-27,9}, -{53,-27,10}, -{53,-27,11}, -{53,-27,12}, -{53,-27,13}, -{53,-27,14}, -{53,-27,15}, -{53,-27,16}, -{53,-27,17}, -{53,-27,18}, -{53,-27,19}, -{53,-27,20}, -{53,-27,21}, -{53,-27,22}, -{53,-27,23}, -{53,-27,24}, -{53,-27,25}, -{53,-27,26}, -{53,-27,27}, -{53,-27,28}, -{53,-27,29}, -{53,-27,30}, -{53,-27,31}, -{53,-27,32}, -{53,-27,33}, -{53,-27,34}, -{53,-27,35}, -{53,-27,36}, -{53,-27,37}, -{53,-27,38}, -{53,-27,39}, -{53,-27,40}, -{53,-27,41}, -{53,-27,42}, -{53,-27,43}, -{53,-27,44}, -{53,-27,45}, -{53,-27,46}, -{53,-27,47}, -{53,-27,48}, -{53,-27,49}, -{53,-27,50}, -{53,-27,51}, -{53,-27,52}, -{53,-27,53}, -{53,-27,54}, -{53,-27,55}, -{53,-27,56}, -{53,-26,-16}, -{53,-26,-15}, -{53,-26,-14}, -{53,-26,-13}, -{53,-26,-12}, -{53,-26,-11}, -{53,-26,-10}, -{53,-26,-9}, -{53,-26,-8}, -{53,-26,-7}, -{53,-26,-6}, -{53,-26,-5}, -{53,-26,-4}, -{53,-26,-3}, -{53,-26,-2}, -{53,-26,-1}, -{53,-26,0}, -{53,-26,1}, -{53,-26,2}, -{53,-26,3}, -{53,-26,4}, -{53,-26,5}, -{53,-26,6}, -{53,-26,7}, -{53,-26,8}, -{53,-26,9}, -{53,-26,10}, -{53,-26,11}, -{53,-26,12}, -{53,-26,13}, -{53,-26,14}, -{53,-26,15}, -{53,-26,16}, -{53,-26,17}, -{53,-26,18}, -{53,-26,19}, -{53,-26,20}, -{53,-26,21}, -{53,-26,22}, -{53,-26,23}, -{53,-26,24}, -{53,-26,25}, -{53,-26,26}, -{53,-26,27}, -{53,-26,28}, -{53,-26,29}, -{53,-26,30}, -{53,-26,31}, -{53,-26,32}, -{53,-26,33}, -{53,-26,34}, -{53,-26,35}, -{53,-26,36}, -{53,-26,37}, -{53,-26,38}, -{53,-26,39}, -{53,-26,40}, -{53,-26,41}, -{53,-26,42}, -{53,-26,43}, -{53,-26,44}, -{53,-26,45}, -{53,-26,46}, -{53,-26,47}, -{53,-26,48}, -{53,-26,49}, -{53,-26,50}, -{53,-26,51}, -{53,-26,52}, -{53,-26,53}, -{53,-26,54}, -{53,-26,55}, -{53,-26,56}, -{53,-26,57}, -{53,-25,-18}, -{53,-25,-17}, -{53,-25,-16}, -{53,-25,-15}, -{53,-25,-14}, -{53,-25,-13}, -{53,-25,-12}, -{53,-25,-11}, -{53,-25,-10}, -{53,-25,-9}, -{53,-25,-8}, -{53,-25,-7}, -{53,-25,-6}, -{53,-25,-5}, -{53,-25,-4}, -{53,-25,-3}, -{53,-25,-2}, -{53,-25,-1}, -{53,-25,0}, -{53,-25,1}, -{53,-25,2}, -{53,-25,3}, -{53,-25,4}, -{53,-25,5}, -{53,-25,6}, -{53,-25,7}, -{53,-25,8}, -{53,-25,9}, -{53,-25,10}, -{53,-25,11}, -{53,-25,12}, -{53,-25,13}, -{53,-25,14}, -{53,-25,15}, -{53,-25,16}, -{53,-25,17}, -{53,-25,18}, -{53,-25,19}, -{53,-25,20}, -{53,-25,21}, -{53,-25,22}, -{53,-25,23}, -{53,-25,24}, -{53,-25,25}, -{53,-25,26}, -{53,-25,27}, -{53,-25,28}, -{53,-25,29}, -{53,-25,30}, -{53,-25,31}, -{53,-25,32}, -{53,-25,33}, -{53,-25,34}, -{53,-25,35}, -{53,-25,36}, -{53,-25,37}, -{53,-25,38}, -{53,-25,39}, -{53,-25,40}, -{53,-25,41}, -{53,-25,42}, -{53,-25,43}, -{53,-25,44}, -{53,-25,45}, -{53,-25,46}, -{53,-25,47}, -{53,-25,48}, -{53,-25,49}, -{53,-25,50}, -{53,-25,51}, -{53,-25,52}, -{53,-25,53}, -{53,-25,54}, -{53,-25,55}, -{53,-25,56}, -{53,-25,57}, -{53,-24,-19}, -{53,-24,-18}, -{53,-24,-17}, -{53,-24,-16}, -{53,-24,-15}, -{53,-24,-14}, -{53,-24,-13}, -{53,-24,-12}, -{53,-24,-11}, -{53,-24,-10}, -{53,-24,-9}, -{53,-24,-8}, -{53,-24,-7}, -{53,-24,-6}, -{53,-24,-5}, -{53,-24,-4}, -{53,-24,-3}, -{53,-24,-2}, -{53,-24,-1}, -{53,-24,0}, -{53,-24,1}, -{53,-24,2}, -{53,-24,3}, -{53,-24,4}, -{53,-24,5}, -{53,-24,6}, -{53,-24,7}, -{53,-24,8}, -{53,-24,9}, -{53,-24,10}, -{53,-24,11}, -{53,-24,12}, -{53,-24,13}, -{53,-24,14}, -{53,-24,15}, -{53,-24,16}, -{53,-24,17}, -{53,-24,18}, -{53,-24,19}, -{53,-24,20}, -{53,-24,21}, -{53,-24,22}, -{53,-24,23}, -{53,-24,24}, -{53,-24,25}, -{53,-24,26}, -{53,-24,27}, -{53,-24,28}, -{53,-24,29}, -{53,-24,30}, -{53,-24,31}, -{53,-24,32}, -{53,-24,33}, -{53,-24,34}, -{53,-24,35}, -{53,-24,36}, -{53,-24,37}, -{53,-24,38}, -{53,-24,39}, -{53,-24,40}, -{53,-24,41}, -{53,-24,42}, -{53,-24,43}, -{53,-24,44}, -{53,-24,45}, -{53,-24,46}, -{53,-24,47}, -{53,-24,48}, -{53,-24,49}, -{53,-24,50}, -{53,-24,51}, -{53,-24,52}, -{53,-24,53}, -{53,-24,54}, -{53,-24,55}, -{53,-24,56}, -{53,-24,57}, -{53,-23,-21}, -{53,-23,-20}, -{53,-23,-19}, -{53,-23,-18}, -{53,-23,-17}, -{53,-23,-16}, -{53,-23,-15}, -{53,-23,-14}, -{53,-23,-13}, -{53,-23,-12}, -{53,-23,-11}, -{53,-23,-10}, -{53,-23,-9}, -{53,-23,-8}, -{53,-23,-7}, -{53,-23,-6}, -{53,-23,-5}, -{53,-23,-4}, -{53,-23,-3}, -{53,-23,-2}, -{53,-23,-1}, -{53,-23,0}, -{53,-23,1}, -{53,-23,2}, -{53,-23,3}, -{53,-23,4}, -{53,-23,5}, -{53,-23,6}, -{53,-23,7}, -{53,-23,8}, -{53,-23,9}, -{53,-23,10}, -{53,-23,11}, -{53,-23,12}, -{53,-23,13}, -{53,-23,14}, -{53,-23,15}, -{53,-23,16}, -{53,-23,17}, -{53,-23,18}, -{53,-23,19}, -{53,-23,20}, -{53,-23,21}, -{53,-23,22}, -{53,-23,23}, -{53,-23,24}, -{53,-23,25}, -{53,-23,26}, -{53,-23,27}, -{53,-23,28}, -{53,-23,29}, -{53,-23,30}, -{53,-23,31}, -{53,-23,32}, -{53,-23,33}, -{53,-23,34}, -{53,-23,35}, -{53,-23,36}, -{53,-23,37}, -{53,-23,38}, -{53,-23,39}, -{53,-23,40}, -{53,-23,41}, -{53,-23,42}, -{53,-23,43}, -{53,-23,44}, -{53,-23,45}, -{53,-23,46}, -{53,-23,47}, -{53,-23,48}, -{53,-23,49}, -{53,-23,50}, -{53,-23,51}, -{53,-23,52}, -{53,-23,53}, -{53,-23,54}, -{53,-23,55}, -{53,-23,56}, -{53,-23,57}, -{53,-22,-22}, -{53,-22,-21}, -{53,-22,-20}, -{53,-22,-19}, -{53,-22,-18}, -{53,-22,-17}, -{53,-22,-16}, -{53,-22,-15}, -{53,-22,-14}, -{53,-22,-13}, -{53,-22,-12}, -{53,-22,-11}, -{53,-22,-10}, -{53,-22,-9}, -{53,-22,-8}, -{53,-22,-7}, -{53,-22,-6}, -{53,-22,-5}, -{53,-22,-4}, -{53,-22,-3}, -{53,-22,-2}, -{53,-22,-1}, -{53,-22,0}, -{53,-22,1}, -{53,-22,2}, -{53,-22,3}, -{53,-22,4}, -{53,-22,5}, -{53,-22,6}, -{53,-22,7}, -{53,-22,8}, -{53,-22,9}, -{53,-22,10}, -{53,-22,11}, -{53,-22,12}, -{53,-22,13}, -{53,-22,14}, -{53,-22,15}, -{53,-22,16}, -{53,-22,17}, -{53,-22,18}, -{53,-22,19}, -{53,-22,20}, -{53,-22,21}, -{53,-22,22}, -{53,-22,23}, -{53,-22,24}, -{53,-22,25}, -{53,-22,26}, -{53,-22,27}, -{53,-22,28}, -{53,-22,29}, -{53,-22,30}, -{53,-22,31}, -{53,-22,32}, -{53,-22,33}, -{53,-22,34}, -{53,-22,35}, -{53,-22,36}, -{53,-22,37}, -{53,-22,38}, -{53,-22,39}, -{53,-22,40}, -{53,-22,41}, -{53,-22,42}, -{53,-22,43}, -{53,-22,44}, -{53,-22,45}, -{53,-22,46}, -{53,-22,47}, -{53,-22,48}, -{53,-22,49}, -{53,-22,50}, -{53,-22,51}, -{53,-22,52}, -{53,-22,53}, -{53,-22,54}, -{53,-22,55}, -{53,-22,56}, -{53,-22,57}, -{53,-21,-23}, -{53,-21,-22}, -{53,-21,-21}, -{53,-21,-20}, -{53,-21,-19}, -{53,-21,-18}, -{53,-21,-17}, -{53,-21,-16}, -{53,-21,-15}, -{53,-21,-14}, -{53,-21,-13}, -{53,-21,-12}, -{53,-21,-11}, -{53,-21,-10}, -{53,-21,-9}, -{53,-21,-8}, -{53,-21,-7}, -{53,-21,-6}, -{53,-21,-5}, -{53,-21,-4}, -{53,-21,-3}, -{53,-21,-2}, -{53,-21,-1}, -{53,-21,0}, -{53,-21,1}, -{53,-21,2}, -{53,-21,3}, -{53,-21,4}, -{53,-21,5}, -{53,-21,6}, -{53,-21,7}, -{53,-21,8}, -{53,-21,9}, -{53,-21,10}, -{53,-21,11}, -{53,-21,12}, -{53,-21,13}, -{53,-21,14}, -{53,-21,15}, -{53,-21,16}, -{53,-21,17}, -{53,-21,18}, -{53,-21,19}, -{53,-21,20}, -{53,-21,21}, -{53,-21,22}, -{53,-21,23}, -{53,-21,24}, -{53,-21,25}, -{53,-21,26}, -{53,-21,27}, -{53,-21,28}, -{53,-21,29}, -{53,-21,30}, -{53,-21,31}, -{53,-21,32}, -{53,-21,33}, -{53,-21,34}, -{53,-21,35}, -{53,-21,36}, -{53,-21,37}, -{53,-21,38}, -{53,-21,39}, -{53,-21,40}, -{53,-21,41}, -{53,-21,42}, -{53,-21,43}, -{53,-21,44}, -{53,-21,45}, -{53,-21,46}, -{53,-21,47}, -{53,-21,48}, -{53,-21,49}, -{53,-21,50}, -{53,-21,51}, -{53,-21,52}, -{53,-21,53}, -{53,-21,54}, -{53,-21,55}, -{53,-21,56}, -{53,-21,57}, -{53,-20,-25}, -{53,-20,-24}, -{53,-20,-23}, -{53,-20,-22}, -{53,-20,-21}, -{53,-20,-20}, -{53,-20,-19}, -{53,-20,-18}, -{53,-20,-17}, -{53,-20,-16}, -{53,-20,-15}, -{53,-20,-14}, -{53,-20,-13}, -{53,-20,-12}, -{53,-20,-11}, -{53,-20,-10}, -{53,-20,-9}, -{53,-20,-8}, -{53,-20,-7}, -{53,-20,-6}, -{53,-20,-5}, -{53,-20,-4}, -{53,-20,-3}, -{53,-20,-2}, -{53,-20,-1}, -{53,-20,0}, -{53,-20,1}, -{53,-20,2}, -{53,-20,3}, -{53,-20,4}, -{53,-20,5}, -{53,-20,6}, -{53,-20,7}, -{53,-20,8}, -{53,-20,9}, -{53,-20,10}, -{53,-20,11}, -{53,-20,12}, -{53,-20,13}, -{53,-20,14}, -{53,-20,15}, -{53,-20,16}, -{53,-20,17}, -{53,-20,18}, -{53,-20,19}, -{53,-20,20}, -{53,-20,21}, -{53,-20,22}, -{53,-20,23}, -{53,-20,24}, -{53,-20,25}, -{53,-20,26}, -{53,-20,27}, -{53,-20,28}, -{53,-20,29}, -{53,-20,30}, -{53,-20,31}, -{53,-20,32}, -{53,-20,33}, -{53,-20,34}, -{53,-20,35}, -{53,-20,36}, -{53,-20,37}, -{53,-20,38}, -{53,-20,39}, -{53,-20,40}, -{53,-20,41}, -{53,-20,42}, -{53,-20,43}, -{53,-20,44}, -{53,-20,45}, -{53,-20,46}, -{53,-20,47}, -{53,-20,48}, -{53,-20,49}, -{53,-20,50}, -{53,-20,51}, -{53,-20,52}, -{53,-20,53}, -{53,-20,54}, -{53,-20,55}, -{53,-20,56}, -{53,-20,57}, -{53,-19,-26}, -{53,-19,-25}, -{53,-19,-24}, -{53,-19,-23}, -{53,-19,-22}, -{53,-19,-21}, -{53,-19,-20}, -{53,-19,-19}, -{53,-19,-18}, -{53,-19,-17}, -{53,-19,-16}, -{53,-19,-15}, -{53,-19,-14}, -{53,-19,-13}, -{53,-19,-12}, -{53,-19,-11}, -{53,-19,-10}, -{53,-19,-9}, -{53,-19,-8}, -{53,-19,-7}, -{53,-19,-6}, -{53,-19,-5}, -{53,-19,-4}, -{53,-19,-3}, -{53,-19,-2}, -{53,-19,-1}, -{53,-19,0}, -{53,-19,1}, -{53,-19,2}, -{53,-19,3}, -{53,-19,4}, -{53,-19,5}, -{53,-19,6}, -{53,-19,7}, -{53,-19,8}, -{53,-19,9}, -{53,-19,10}, -{53,-19,11}, -{53,-19,12}, -{53,-19,13}, -{53,-19,14}, -{53,-19,15}, -{53,-19,16}, -{53,-19,17}, -{53,-19,18}, -{53,-19,19}, -{53,-19,20}, -{53,-19,21}, -{53,-19,22}, -{53,-19,23}, -{53,-19,24}, -{53,-19,25}, -{53,-19,26}, -{53,-19,27}, -{53,-19,28}, -{53,-19,29}, -{53,-19,30}, -{53,-19,31}, -{53,-19,32}, -{53,-19,33}, -{53,-19,34}, -{53,-19,35}, -{53,-19,36}, -{53,-19,37}, -{53,-19,38}, -{53,-19,39}, -{53,-19,40}, -{53,-19,41}, -{53,-19,42}, -{53,-19,43}, -{53,-19,44}, -{53,-19,45}, -{53,-19,46}, -{53,-19,47}, -{53,-19,48}, -{53,-19,49}, -{53,-19,50}, -{53,-19,51}, -{53,-19,52}, -{53,-19,53}, -{53,-19,54}, -{53,-19,55}, -{53,-19,56}, -{53,-19,57}, -{53,-18,-27}, -{53,-18,-26}, -{53,-18,-25}, -{53,-18,-24}, -{53,-18,-23}, -{53,-18,-22}, -{53,-18,-21}, -{53,-18,-20}, -{53,-18,-19}, -{53,-18,-18}, -{53,-18,-17}, -{53,-18,-16}, -{53,-18,-15}, -{53,-18,-14}, -{53,-18,-13}, -{53,-18,-12}, -{53,-18,-11}, -{53,-18,-10}, -{53,-18,-9}, -{53,-18,-8}, -{53,-18,-7}, -{53,-18,-6}, -{53,-18,-5}, -{53,-18,-4}, -{53,-18,-3}, -{53,-18,-2}, -{53,-18,-1}, -{53,-18,0}, -{53,-18,1}, -{53,-18,2}, -{53,-18,3}, -{53,-18,4}, -{53,-18,5}, -{53,-18,6}, -{53,-18,7}, -{53,-18,8}, -{53,-18,9}, -{53,-18,10}, -{53,-18,11}, -{53,-18,12}, -{53,-18,13}, -{53,-18,14}, -{53,-18,15}, -{53,-18,16}, -{53,-18,17}, -{53,-18,18}, -{53,-18,19}, -{53,-18,20}, -{53,-18,21}, -{53,-18,22}, -{53,-18,23}, -{53,-18,24}, -{53,-18,25}, -{53,-18,26}, -{53,-18,27}, -{53,-18,28}, -{53,-18,29}, -{53,-18,30}, -{53,-18,31}, -{53,-18,32}, -{53,-18,33}, -{53,-18,34}, -{53,-18,35}, -{53,-18,36}, -{53,-18,37}, -{53,-18,38}, -{53,-18,39}, -{53,-18,40}, -{53,-18,41}, -{53,-18,42}, -{53,-18,43}, -{53,-18,44}, -{53,-18,45}, -{53,-18,46}, -{53,-18,47}, -{53,-18,48}, -{53,-18,49}, -{53,-18,50}, -{53,-18,51}, -{53,-18,52}, -{53,-18,53}, -{53,-18,54}, -{53,-18,55}, -{53,-18,56}, -{53,-18,57}, -{53,-17,-29}, -{53,-17,-28}, -{53,-17,-27}, -{53,-17,-26}, -{53,-17,-25}, -{53,-17,-24}, -{53,-17,-23}, -{53,-17,-22}, -{53,-17,-21}, -{53,-17,-20}, -{53,-17,-19}, -{53,-17,-18}, -{53,-17,-17}, -{53,-17,-16}, -{53,-17,-15}, -{53,-17,-14}, -{53,-17,-13}, -{53,-17,-12}, -{53,-17,-11}, -{53,-17,-10}, -{53,-17,-9}, -{53,-17,-8}, -{53,-17,-7}, -{53,-17,-6}, -{53,-17,-5}, -{53,-17,-4}, -{53,-17,-3}, -{53,-17,-2}, -{53,-17,-1}, -{53,-17,0}, -{53,-17,1}, -{53,-17,2}, -{53,-17,3}, -{53,-17,4}, -{53,-17,5}, -{53,-17,6}, -{53,-17,7}, -{53,-17,8}, -{53,-17,9}, -{53,-17,10}, -{53,-17,11}, -{53,-17,12}, -{53,-17,13}, -{53,-17,14}, -{53,-17,15}, -{53,-17,16}, -{53,-17,17}, -{53,-17,18}, -{53,-17,19}, -{53,-17,20}, -{53,-17,21}, -{53,-17,22}, -{53,-17,23}, -{53,-17,24}, -{53,-17,25}, -{53,-17,26}, -{53,-17,27}, -{53,-17,28}, -{53,-17,29}, -{53,-17,30}, -{53,-17,31}, -{53,-17,32}, -{53,-17,33}, -{53,-17,34}, -{53,-17,35}, -{53,-17,36}, -{53,-17,37}, -{53,-17,38}, -{53,-17,39}, -{53,-17,40}, -{53,-17,41}, -{53,-17,42}, -{53,-17,43}, -{53,-17,44}, -{53,-17,45}, -{53,-17,46}, -{53,-17,47}, -{53,-17,48}, -{53,-17,49}, -{53,-17,50}, -{53,-17,51}, -{53,-17,52}, -{53,-17,53}, -{53,-17,54}, -{53,-17,55}, -{53,-17,56}, -{53,-17,57}, -{53,-16,-30}, -{53,-16,-29}, -{53,-16,-28}, -{53,-16,-27}, -{53,-16,-26}, -{53,-16,-25}, -{53,-16,-24}, -{53,-16,-23}, -{53,-16,-22}, -{53,-16,-21}, -{53,-16,-20}, -{53,-16,-19}, -{53,-16,-18}, -{53,-16,-17}, -{53,-16,-16}, -{53,-16,-15}, -{53,-16,-14}, -{53,-16,-13}, -{53,-16,-12}, -{53,-16,-11}, -{53,-16,-10}, -{53,-16,-9}, -{53,-16,-8}, -{53,-16,-7}, -{53,-16,-6}, -{53,-16,-5}, -{53,-16,-4}, -{53,-16,-3}, -{53,-16,-2}, -{53,-16,-1}, -{53,-16,0}, -{53,-16,1}, -{53,-16,2}, -{53,-16,3}, -{53,-16,4}, -{53,-16,5}, -{53,-16,6}, -{53,-16,7}, -{53,-16,8}, -{53,-16,9}, -{53,-16,10}, -{53,-16,11}, -{53,-16,12}, -{53,-16,13}, -{53,-16,14}, -{53,-16,15}, -{53,-16,16}, -{53,-16,17}, -{53,-16,18}, -{53,-16,19}, -{53,-16,20}, -{53,-16,21}, -{53,-16,22}, -{53,-16,23}, -{53,-16,24}, -{53,-16,25}, -{53,-16,26}, -{53,-16,27}, -{53,-16,28}, -{53,-16,29}, -{53,-16,30}, -{53,-16,31}, -{53,-16,32}, -{53,-16,33}, -{53,-16,34}, -{53,-16,35}, -{53,-16,36}, -{53,-16,37}, -{53,-16,38}, -{53,-16,39}, -{53,-16,40}, -{53,-16,41}, -{53,-16,42}, -{53,-16,43}, -{53,-16,44}, -{53,-16,45}, -{53,-16,46}, -{53,-16,47}, -{53,-16,48}, -{53,-16,49}, -{53,-16,50}, -{53,-16,51}, -{53,-16,52}, -{53,-16,53}, -{53,-16,54}, -{53,-16,55}, -{53,-16,56}, -{53,-16,57}, -{53,-15,-31}, -{53,-15,-30}, -{53,-15,-29}, -{53,-15,-28}, -{53,-15,-27}, -{53,-15,-26}, -{53,-15,-25}, -{53,-15,-24}, -{53,-15,-23}, -{53,-15,-22}, -{53,-15,-21}, -{53,-15,-20}, -{53,-15,-19}, -{53,-15,-18}, -{53,-15,-17}, -{53,-15,-16}, -{53,-15,-15}, -{53,-15,-14}, -{53,-15,-13}, -{53,-15,-12}, -{53,-15,-11}, -{53,-15,-10}, -{53,-15,-9}, -{53,-15,-8}, -{53,-15,-7}, -{53,-15,-6}, -{53,-15,-5}, -{53,-15,-4}, -{53,-15,-3}, -{53,-15,-2}, -{53,-15,-1}, -{53,-15,0}, -{53,-15,1}, -{53,-15,2}, -{53,-15,3}, -{53,-15,4}, -{53,-15,5}, -{53,-15,6}, -{53,-15,7}, -{53,-15,8}, -{53,-15,9}, -{53,-15,10}, -{53,-15,11}, -{53,-15,12}, -{53,-15,13}, -{53,-15,14}, -{53,-15,15}, -{53,-15,16}, -{53,-15,17}, -{53,-15,18}, -{53,-15,19}, -{53,-15,20}, -{53,-15,21}, -{53,-15,22}, -{53,-15,23}, -{53,-15,24}, -{53,-15,25}, -{53,-15,26}, -{53,-15,27}, -{53,-15,28}, -{53,-15,29}, -{53,-15,30}, -{53,-15,31}, -{53,-15,32}, -{53,-15,33}, -{53,-15,34}, -{53,-15,35}, -{53,-15,36}, -{53,-15,37}, -{53,-15,38}, -{53,-15,39}, -{53,-15,40}, -{53,-15,41}, -{53,-15,42}, -{53,-15,43}, -{53,-15,44}, -{53,-15,45}, -{53,-15,46}, -{53,-15,47}, -{53,-15,48}, -{53,-15,49}, -{53,-15,50}, -{53,-15,51}, -{53,-15,52}, -{53,-15,53}, -{53,-15,54}, -{53,-15,55}, -{53,-15,56}, -{53,-15,57}, -{53,-14,-33}, -{53,-14,-32}, -{53,-14,-31}, -{53,-14,-30}, -{53,-14,-29}, -{53,-14,-28}, -{53,-14,-27}, -{53,-14,-26}, -{53,-14,-25}, -{53,-14,-24}, -{53,-14,-23}, -{53,-14,-22}, -{53,-14,-21}, -{53,-14,-20}, -{53,-14,-19}, -{53,-14,-18}, -{53,-14,-17}, -{53,-14,-16}, -{53,-14,-15}, -{53,-14,-14}, -{53,-14,-13}, -{53,-14,-12}, -{53,-14,-11}, -{53,-14,-10}, -{53,-14,-9}, -{53,-14,-8}, -{53,-14,-7}, -{53,-14,-6}, -{53,-14,-5}, -{53,-14,-4}, -{53,-14,-3}, -{53,-14,-2}, -{53,-14,-1}, -{53,-14,0}, -{53,-14,1}, -{53,-14,2}, -{53,-14,3}, -{53,-14,4}, -{53,-14,5}, -{53,-14,6}, -{53,-14,7}, -{53,-14,8}, -{53,-14,9}, -{53,-14,10}, -{53,-14,11}, -{53,-14,12}, -{53,-14,13}, -{53,-14,14}, -{53,-14,15}, -{53,-14,16}, -{53,-14,17}, -{53,-14,18}, -{53,-14,19}, -{53,-14,20}, -{53,-14,21}, -{53,-14,22}, -{53,-14,23}, -{53,-14,24}, -{53,-14,25}, -{53,-14,26}, -{53,-14,27}, -{53,-14,28}, -{53,-14,29}, -{53,-14,30}, -{53,-14,31}, -{53,-14,32}, -{53,-14,33}, -{53,-14,34}, -{53,-14,35}, -{53,-14,36}, -{53,-14,37}, -{53,-14,38}, -{53,-14,39}, -{53,-14,40}, -{53,-14,41}, -{53,-14,42}, -{53,-14,43}, -{53,-14,44}, -{53,-14,45}, -{53,-14,46}, -{53,-14,47}, -{53,-14,48}, -{53,-14,49}, -{53,-14,50}, -{53,-14,51}, -{53,-14,52}, -{53,-14,53}, -{53,-14,54}, -{53,-14,55}, -{53,-14,56}, -{53,-14,57}, -{53,-13,-34}, -{53,-13,-33}, -{53,-13,-32}, -{53,-13,-31}, -{53,-13,-30}, -{53,-13,-29}, -{53,-13,-28}, -{53,-13,-27}, -{53,-13,-26}, -{53,-13,-25}, -{53,-13,-24}, -{53,-13,-23}, -{53,-13,-22}, -{53,-13,-21}, -{53,-13,-20}, -{53,-13,-19}, -{53,-13,-18}, -{53,-13,-17}, -{53,-13,-16}, -{53,-13,-15}, -{53,-13,-14}, -{53,-13,-13}, -{53,-13,-12}, -{53,-13,-11}, -{53,-13,-10}, -{53,-13,-9}, -{53,-13,-8}, -{53,-13,-7}, -{53,-13,-6}, -{53,-13,-5}, -{53,-13,-4}, -{53,-13,-3}, -{53,-13,-2}, -{53,-13,-1}, -{53,-13,0}, -{53,-13,1}, -{53,-13,2}, -{53,-13,3}, -{53,-13,4}, -{53,-13,5}, -{53,-13,6}, -{53,-13,7}, -{53,-13,8}, -{53,-13,9}, -{53,-13,10}, -{53,-13,11}, -{53,-13,12}, -{53,-13,13}, -{53,-13,14}, -{53,-13,15}, -{53,-13,16}, -{53,-13,17}, -{53,-13,18}, -{53,-13,19}, -{53,-13,20}, -{53,-13,21}, -{53,-13,22}, -{53,-13,23}, -{53,-13,24}, -{53,-13,25}, -{53,-13,26}, -{53,-13,27}, -{53,-13,28}, -{53,-13,29}, -{53,-13,30}, -{53,-13,31}, -{53,-13,32}, -{53,-13,33}, -{53,-13,34}, -{53,-13,35}, -{53,-13,36}, -{53,-13,37}, -{53,-13,38}, -{53,-13,39}, -{53,-13,40}, -{53,-13,41}, -{53,-13,42}, -{53,-13,43}, -{53,-13,44}, -{53,-13,45}, -{53,-13,46}, -{53,-13,47}, -{53,-13,48}, -{53,-13,49}, -{53,-13,50}, -{53,-13,51}, -{53,-13,52}, -{53,-13,53}, -{53,-13,54}, -{53,-13,55}, -{53,-13,56}, -{53,-13,57}, -{53,-12,-35}, -{53,-12,-34}, -{53,-12,-33}, -{53,-12,-32}, -{53,-12,-31}, -{53,-12,-30}, -{53,-12,-29}, -{53,-12,-28}, -{53,-12,-27}, -{53,-12,-26}, -{53,-12,-25}, -{53,-12,-24}, -{53,-12,-23}, -{53,-12,-22}, -{53,-12,-21}, -{53,-12,-20}, -{53,-12,-19}, -{53,-12,-18}, -{53,-12,-17}, -{53,-12,-16}, -{53,-12,-15}, -{53,-12,-14}, -{53,-12,-13}, -{53,-12,-12}, -{53,-12,-11}, -{53,-12,-10}, -{53,-12,-9}, -{53,-12,-8}, -{53,-12,-7}, -{53,-12,-6}, -{53,-12,-5}, -{53,-12,-4}, -{53,-12,-3}, -{53,-12,-2}, -{53,-12,-1}, -{53,-12,0}, -{53,-12,1}, -{53,-12,2}, -{53,-12,3}, -{53,-12,4}, -{53,-12,5}, -{53,-12,6}, -{53,-12,7}, -{53,-12,8}, -{53,-12,9}, -{53,-12,10}, -{53,-12,11}, -{53,-12,12}, -{53,-12,13}, -{53,-12,14}, -{53,-12,15}, -{53,-12,16}, -{53,-12,17}, -{53,-12,18}, -{53,-12,19}, -{53,-12,20}, -{53,-12,21}, -{53,-12,22}, -{53,-12,23}, -{53,-12,24}, -{53,-12,25}, -{53,-12,26}, -{53,-12,27}, -{53,-12,28}, -{53,-12,29}, -{53,-12,30}, -{53,-12,31}, -{53,-12,32}, -{53,-12,33}, -{53,-12,34}, -{53,-12,35}, -{53,-12,36}, -{53,-12,37}, -{53,-12,38}, -{53,-12,39}, -{53,-12,40}, -{53,-12,41}, -{53,-12,42}, -{53,-12,43}, -{53,-12,44}, -{53,-12,45}, -{53,-12,46}, -{53,-12,47}, -{53,-12,48}, -{53,-12,49}, -{53,-12,50}, -{53,-12,51}, -{53,-12,52}, -{53,-12,53}, -{53,-12,54}, -{53,-12,55}, -{53,-12,56}, -{53,-12,57}, -{53,-11,-36}, -{53,-11,-35}, -{53,-11,-34}, -{53,-11,-33}, -{53,-11,-32}, -{53,-11,-31}, -{53,-11,-30}, -{53,-11,-29}, -{53,-11,-28}, -{53,-11,-27}, -{53,-11,-26}, -{53,-11,-25}, -{53,-11,-24}, -{53,-11,-23}, -{53,-11,-22}, -{53,-11,-21}, -{53,-11,-20}, -{53,-11,-19}, -{53,-11,-18}, -{53,-11,-17}, -{53,-11,-16}, -{53,-11,-15}, -{53,-11,-14}, -{53,-11,-13}, -{53,-11,-12}, -{53,-11,-11}, -{53,-11,-10}, -{53,-11,-9}, -{53,-11,-8}, -{53,-11,-7}, -{53,-11,-6}, -{53,-11,-5}, -{53,-11,-4}, -{53,-11,-3}, -{53,-11,-2}, -{53,-11,-1}, -{53,-11,0}, -{53,-11,1}, -{53,-11,2}, -{53,-11,3}, -{53,-11,4}, -{53,-11,5}, -{53,-11,6}, -{53,-11,7}, -{53,-11,8}, -{53,-11,9}, -{53,-11,10}, -{53,-11,11}, -{53,-11,12}, -{53,-11,13}, -{53,-11,14}, -{53,-11,15}, -{53,-11,16}, -{53,-11,17}, -{53,-11,18}, -{53,-11,19}, -{53,-11,20}, -{53,-11,21}, -{53,-11,22}, -{53,-11,23}, -{53,-11,24}, -{53,-11,25}, -{53,-11,26}, -{53,-11,27}, -{53,-11,28}, -{53,-11,29}, -{53,-11,30}, -{53,-11,31}, -{53,-11,32}, -{53,-11,33}, -{53,-11,34}, -{53,-11,35}, -{53,-11,36}, -{53,-11,37}, -{53,-11,38}, -{53,-11,39}, -{53,-11,40}, -{53,-11,41}, -{53,-11,42}, -{53,-11,43}, -{53,-11,44}, -{53,-11,45}, -{53,-11,46}, -{53,-11,47}, -{53,-11,48}, -{53,-11,49}, -{53,-11,50}, -{53,-11,51}, -{53,-11,52}, -{53,-11,53}, -{53,-11,54}, -{53,-11,55}, -{53,-11,56}, -{53,-11,57}, -{53,-10,-38}, -{53,-10,-37}, -{53,-10,-36}, -{53,-10,-35}, -{53,-10,-34}, -{53,-10,-33}, -{53,-10,-32}, -{53,-10,-31}, -{53,-10,-30}, -{53,-10,-29}, -{53,-10,-28}, -{53,-10,-27}, -{53,-10,-26}, -{53,-10,-25}, -{53,-10,-24}, -{53,-10,-23}, -{53,-10,-22}, -{53,-10,-21}, -{53,-10,-20}, -{53,-10,-19}, -{53,-10,-18}, -{53,-10,-17}, -{53,-10,-16}, -{53,-10,-15}, -{53,-10,-14}, -{53,-10,-13}, -{53,-10,-12}, -{53,-10,-11}, -{53,-10,-10}, -{53,-10,-9}, -{53,-10,-8}, -{53,-10,-7}, -{53,-10,-6}, -{53,-10,-5}, -{53,-10,-4}, -{53,-10,-3}, -{53,-10,-2}, -{53,-10,-1}, -{53,-10,0}, -{53,-10,1}, -{53,-10,2}, -{53,-10,3}, -{53,-10,4}, -{53,-10,5}, -{53,-10,6}, -{53,-10,7}, -{53,-10,8}, -{53,-10,9}, -{53,-10,10}, -{53,-10,11}, -{53,-10,12}, -{53,-10,13}, -{53,-10,14}, -{53,-10,15}, -{53,-10,16}, -{53,-10,17}, -{53,-10,18}, -{53,-10,19}, -{53,-10,20}, -{53,-10,21}, -{53,-10,22}, -{53,-10,23}, -{53,-10,24}, -{53,-10,25}, -{53,-10,26}, -{53,-10,27}, -{53,-10,28}, -{53,-10,29}, -{53,-10,30}, -{53,-10,31}, -{53,-10,32}, -{53,-10,33}, -{53,-10,34}, -{53,-10,35}, -{53,-10,36}, -{53,-10,37}, -{53,-10,38}, -{53,-10,39}, -{53,-10,40}, -{53,-10,41}, -{53,-10,42}, -{53,-10,43}, -{53,-10,44}, -{53,-10,45}, -{53,-10,46}, -{53,-10,47}, -{53,-10,48}, -{53,-10,49}, -{53,-10,50}, -{53,-10,51}, -{53,-10,52}, -{53,-10,53}, -{53,-10,54}, -{53,-10,55}, -{53,-10,56}, -{53,-10,57}, -{53,-10,58}, -{53,-9,-39}, -{53,-9,-38}, -{53,-9,-37}, -{53,-9,-36}, -{53,-9,-35}, -{53,-9,-34}, -{53,-9,-33}, -{53,-9,-32}, -{53,-9,-31}, -{53,-9,-30}, -{53,-9,-29}, -{53,-9,-28}, -{53,-9,-27}, -{53,-9,-26}, -{53,-9,-25}, -{53,-9,-24}, -{53,-9,-23}, -{53,-9,-22}, -{53,-9,-21}, -{53,-9,-20}, -{53,-9,-19}, -{53,-9,-18}, -{53,-9,-17}, -{53,-9,-16}, -{53,-9,-15}, -{53,-9,-14}, -{53,-9,-13}, -{53,-9,-12}, -{53,-9,-11}, -{53,-9,-10}, -{53,-9,-9}, -{53,-9,-8}, -{53,-9,-7}, -{53,-9,-6}, -{53,-9,-5}, -{53,-9,-4}, -{53,-9,-3}, -{53,-9,-2}, -{53,-9,-1}, -{53,-9,0}, -{53,-9,1}, -{53,-9,2}, -{53,-9,3}, -{53,-9,4}, -{53,-9,5}, -{53,-9,6}, -{53,-9,7}, -{53,-9,8}, -{53,-9,9}, -{53,-9,10}, -{53,-9,11}, -{53,-9,12}, -{53,-9,13}, -{53,-9,14}, -{53,-9,15}, -{53,-9,16}, -{53,-9,17}, -{53,-9,18}, -{53,-9,19}, -{53,-9,20}, -{53,-9,21}, -{53,-9,22}, -{53,-9,23}, -{53,-9,24}, -{53,-9,25}, -{53,-9,26}, -{53,-9,27}, -{53,-9,28}, -{53,-9,29}, -{53,-9,30}, -{53,-9,31}, -{53,-9,32}, -{53,-9,33}, -{53,-9,34}, -{53,-9,35}, -{53,-9,36}, -{53,-9,37}, -{53,-9,38}, -{53,-9,39}, -{53,-9,40}, -{53,-9,41}, -{53,-9,42}, -{53,-9,43}, -{53,-9,44}, -{53,-9,45}, -{53,-9,46}, -{53,-9,47}, -{53,-9,48}, -{53,-9,49}, -{53,-9,50}, -{53,-9,51}, -{53,-9,52}, -{53,-9,53}, -{53,-9,54}, -{53,-9,55}, -{53,-9,56}, -{53,-9,57}, -{53,-9,58}, -{53,-8,-40}, -{53,-8,-39}, -{53,-8,-38}, -{53,-8,-37}, -{53,-8,-36}, -{53,-8,-35}, -{53,-8,-34}, -{53,-8,-33}, -{53,-8,-32}, -{53,-8,-31}, -{53,-8,-30}, -{53,-8,-29}, -{53,-8,-28}, -{53,-8,-27}, -{53,-8,-26}, -{53,-8,-25}, -{53,-8,-24}, -{53,-8,-23}, -{53,-8,-22}, -{53,-8,-21}, -{53,-8,-20}, -{53,-8,-19}, -{53,-8,-18}, -{53,-8,-17}, -{53,-8,-16}, -{53,-8,-15}, -{53,-8,-14}, -{53,-8,-13}, -{53,-8,-12}, -{53,-8,-11}, -{53,-8,-10}, -{53,-8,-9}, -{53,-8,-8}, -{53,-8,-7}, -{53,-8,-6}, -{53,-8,-5}, -{53,-8,-4}, -{53,-8,-3}, -{53,-8,-2}, -{53,-8,-1}, -{53,-8,0}, -{53,-8,1}, -{53,-8,2}, -{53,-8,3}, -{53,-8,4}, -{53,-8,5}, -{53,-8,6}, -{53,-8,7}, -{53,-8,8}, -{53,-8,9}, -{53,-8,10}, -{53,-8,11}, -{53,-8,12}, -{53,-8,13}, -{53,-8,14}, -{53,-8,15}, -{53,-8,16}, -{53,-8,17}, -{53,-8,18}, -{53,-8,19}, -{53,-8,20}, -{53,-8,21}, -{53,-8,22}, -{53,-8,23}, -{53,-8,24}, -{53,-8,25}, -{53,-8,26}, -{53,-8,27}, -{53,-8,28}, -{53,-8,29}, -{53,-8,30}, -{53,-8,31}, -{53,-8,32}, -{53,-8,33}, -{53,-8,34}, -{53,-8,35}, -{53,-8,36}, -{53,-8,37}, -{53,-8,38}, -{53,-8,39}, -{53,-8,40}, -{53,-8,41}, -{53,-8,42}, -{53,-8,43}, -{53,-8,44}, -{53,-8,45}, -{53,-8,46}, -{53,-8,47}, -{53,-8,48}, -{53,-8,49}, -{53,-8,50}, -{53,-8,51}, -{53,-8,52}, -{53,-8,53}, -{53,-8,54}, -{53,-8,55}, -{53,-8,56}, -{53,-8,57}, -{53,-8,58}, -{53,-7,-41}, -{53,-7,-40}, -{53,-7,-39}, -{53,-7,-38}, -{53,-7,-37}, -{53,-7,-36}, -{53,-7,-35}, -{53,-7,-34}, -{53,-7,-33}, -{53,-7,-32}, -{53,-7,-31}, -{53,-7,-30}, -{53,-7,-29}, -{53,-7,-28}, -{53,-7,-27}, -{53,-7,-26}, -{53,-7,-25}, -{53,-7,-24}, -{53,-7,-23}, -{53,-7,-22}, -{53,-7,-21}, -{53,-7,-20}, -{53,-7,-19}, -{53,-7,-18}, -{53,-7,-17}, -{53,-7,-16}, -{53,-7,-15}, -{53,-7,-14}, -{53,-7,-13}, -{53,-7,-12}, -{53,-7,-11}, -{53,-7,-10}, -{53,-7,-9}, -{53,-7,-8}, -{53,-7,-7}, -{53,-7,-6}, -{53,-7,-5}, -{53,-7,-4}, -{53,-7,-3}, -{53,-7,-2}, -{53,-7,-1}, -{53,-7,0}, -{53,-7,1}, -{53,-7,2}, -{53,-7,3}, -{53,-7,4}, -{53,-7,5}, -{53,-7,6}, -{53,-7,7}, -{53,-7,8}, -{53,-7,9}, -{53,-7,10}, -{53,-7,11}, -{53,-7,12}, -{53,-7,13}, -{53,-7,14}, -{53,-7,15}, -{53,-7,16}, -{53,-7,17}, -{53,-7,18}, -{53,-7,19}, -{53,-7,20}, -{53,-7,21}, -{53,-7,22}, -{53,-7,23}, -{53,-7,24}, -{53,-7,25}, -{53,-7,26}, -{53,-7,27}, -{53,-7,28}, -{53,-7,29}, -{53,-7,30}, -{53,-7,31}, -{53,-7,32}, -{53,-7,33}, -{53,-7,34}, -{53,-7,35}, -{53,-7,36}, -{53,-7,37}, -{53,-7,38}, -{53,-7,39}, -{53,-7,40}, -{53,-7,41}, -{53,-7,42}, -{53,-7,43}, -{53,-7,44}, -{53,-7,45}, -{53,-7,46}, -{53,-7,47}, -{53,-7,48}, -{53,-7,49}, -{53,-7,50}, -{53,-7,51}, -{53,-7,52}, -{53,-7,53}, -{53,-7,54}, -{53,-7,55}, -{53,-7,56}, -{53,-7,57}, -{53,-7,58}, -{53,-6,-42}, -{53,-6,-41}, -{53,-6,-40}, -{53,-6,-39}, -{53,-6,-38}, -{53,-6,-37}, -{53,-6,-36}, -{53,-6,-35}, -{53,-6,-34}, -{53,-6,-33}, -{53,-6,-32}, -{53,-6,-31}, -{53,-6,-30}, -{53,-6,-29}, -{53,-6,-28}, -{53,-6,-27}, -{53,-6,-26}, -{53,-6,-25}, -{53,-6,-24}, -{53,-6,-23}, -{53,-6,-22}, -{53,-6,-21}, -{53,-6,-20}, -{53,-6,-19}, -{53,-6,-18}, -{53,-6,-17}, -{53,-6,-16}, -{53,-6,-15}, -{53,-6,-14}, -{53,-6,-13}, -{53,-6,-12}, -{53,-6,-11}, -{53,-6,-10}, -{53,-6,-9}, -{53,-6,-8}, -{53,-6,-7}, -{53,-6,-6}, -{53,-6,-5}, -{53,-6,-4}, -{53,-6,-3}, -{53,-6,-2}, -{53,-6,-1}, -{53,-6,0}, -{53,-6,1}, -{53,-6,2}, -{53,-6,3}, -{53,-6,4}, -{53,-6,5}, -{53,-6,6}, -{53,-6,7}, -{53,-6,8}, -{53,-6,9}, -{53,-6,10}, -{53,-6,11}, -{53,-6,12}, -{53,-6,13}, -{53,-6,14}, -{53,-6,15}, -{53,-6,16}, -{53,-6,17}, -{53,-6,18}, -{53,-6,19}, -{53,-6,20}, -{53,-6,21}, -{53,-6,22}, -{53,-6,23}, -{53,-6,24}, -{53,-6,25}, -{53,-6,26}, -{53,-6,27}, -{53,-6,28}, -{53,-6,29}, -{53,-6,30}, -{53,-6,31}, -{53,-6,32}, -{53,-6,33}, -{53,-6,34}, -{53,-6,35}, -{53,-6,36}, -{53,-6,37}, -{53,-6,38}, -{53,-6,39}, -{53,-6,40}, -{53,-6,41}, -{53,-6,42}, -{53,-6,43}, -{53,-6,44}, -{53,-6,45}, -{53,-6,46}, -{53,-6,47}, -{53,-6,48}, -{53,-6,49}, -{53,-6,50}, -{53,-6,51}, -{53,-6,52}, -{53,-6,53}, -{53,-6,54}, -{53,-6,55}, -{53,-6,56}, -{53,-6,57}, -{53,-6,58}, -{53,-5,-44}, -{53,-5,-43}, -{53,-5,-42}, -{53,-5,-41}, -{53,-5,-40}, -{53,-5,-39}, -{53,-5,-38}, -{53,-5,-37}, -{53,-5,-36}, -{53,-5,-35}, -{53,-5,-34}, -{53,-5,-33}, -{53,-5,-32}, -{53,-5,-31}, -{53,-5,-30}, -{53,-5,-29}, -{53,-5,-28}, -{53,-5,-27}, -{53,-5,-26}, -{53,-5,-25}, -{53,-5,-24}, -{53,-5,-23}, -{53,-5,-22}, -{53,-5,-21}, -{53,-5,-20}, -{53,-5,-19}, -{53,-5,-18}, -{53,-5,-17}, -{53,-5,-16}, -{53,-5,-15}, -{53,-5,-14}, -{53,-5,-13}, -{53,-5,-12}, -{53,-5,-11}, -{53,-5,-10}, -{53,-5,-9}, -{53,-5,-8}, -{53,-5,-7}, -{53,-5,-6}, -{53,-5,-5}, -{53,-5,-4}, -{53,-5,-3}, -{53,-5,-2}, -{53,-5,-1}, -{53,-5,0}, -{53,-5,1}, -{53,-5,2}, -{53,-5,3}, -{53,-5,4}, -{53,-5,5}, -{53,-5,6}, -{53,-5,7}, -{53,-5,8}, -{53,-5,9}, -{53,-5,10}, -{53,-5,11}, -{53,-5,12}, -{53,-5,13}, -{53,-5,14}, -{53,-5,15}, -{53,-5,16}, -{53,-5,17}, -{53,-5,18}, -{53,-5,19}, -{53,-5,20}, -{53,-5,21}, -{53,-5,22}, -{53,-5,23}, -{53,-5,24}, -{53,-5,25}, -{53,-5,26}, -{53,-5,27}, -{53,-5,28}, -{53,-5,29}, -{53,-5,30}, -{53,-5,31}, -{53,-5,32}, -{53,-5,33}, -{53,-5,34}, -{53,-5,35}, -{53,-5,36}, -{53,-5,37}, -{53,-5,38}, -{53,-5,39}, -{53,-5,40}, -{53,-5,41}, -{53,-5,42}, -{53,-5,43}, -{53,-5,44}, -{53,-5,45}, -{53,-5,46}, -{53,-5,47}, -{53,-5,48}, -{53,-5,49}, -{53,-5,50}, -{53,-5,51}, -{53,-5,52}, -{53,-5,53}, -{53,-5,54}, -{53,-5,55}, -{53,-5,56}, -{53,-5,57}, -{53,-5,58}, -{53,-4,-45}, -{53,-4,-44}, -{53,-4,-43}, -{53,-4,-42}, -{53,-4,-41}, -{53,-4,-40}, -{53,-4,-39}, -{53,-4,-38}, -{53,-4,-37}, -{53,-4,-36}, -{53,-4,-35}, -{53,-4,-34}, -{53,-4,-33}, -{53,-4,-32}, -{53,-4,-31}, -{53,-4,-30}, -{53,-4,-29}, -{53,-4,-28}, -{53,-4,-27}, -{53,-4,-26}, -{53,-4,-25}, -{53,-4,-24}, -{53,-4,-23}, -{53,-4,-22}, -{53,-4,-21}, -{53,-4,-20}, -{53,-4,-19}, -{53,-4,-18}, -{53,-4,-17}, -{53,-4,-16}, -{53,-4,-15}, -{53,-4,-14}, -{53,-4,-13}, -{53,-4,-12}, -{53,-4,-11}, -{53,-4,-10}, -{53,-4,-9}, -{53,-4,-8}, -{53,-4,-7}, -{53,-4,-6}, -{53,-4,-5}, -{53,-4,-4}, -{53,-4,-3}, -{53,-4,-2}, -{53,-4,-1}, -{53,-4,0}, -{53,-4,1}, -{53,-4,2}, -{53,-4,3}, -{53,-4,4}, -{53,-4,5}, -{53,-4,6}, -{53,-4,7}, -{53,-4,8}, -{53,-4,9}, -{53,-4,10}, -{53,-4,11}, -{53,-4,12}, -{53,-4,13}, -{53,-4,14}, -{53,-4,15}, -{53,-4,16}, -{53,-4,17}, -{53,-4,18}, -{53,-4,19}, -{53,-4,20}, -{53,-4,21}, -{53,-4,22}, -{53,-4,23}, -{53,-4,24}, -{53,-4,25}, -{53,-4,26}, -{53,-4,27}, -{53,-4,28}, -{53,-4,29}, -{53,-4,30}, -{53,-4,31}, -{53,-4,32}, -{53,-4,33}, -{53,-4,34}, -{53,-4,35}, -{53,-4,36}, -{53,-4,37}, -{53,-4,38}, -{53,-4,39}, -{53,-4,40}, -{53,-4,41}, -{53,-4,42}, -{53,-4,43}, -{53,-4,44}, -{53,-4,45}, -{53,-4,46}, -{53,-4,47}, -{53,-4,48}, -{53,-4,49}, -{53,-4,50}, -{53,-4,51}, -{53,-4,52}, -{53,-4,53}, -{53,-4,54}, -{53,-4,55}, -{53,-4,56}, -{53,-4,57}, -{53,-4,58}, -{53,-3,-46}, -{53,-3,-45}, -{53,-3,-44}, -{53,-3,-43}, -{53,-3,-42}, -{53,-3,-41}, -{53,-3,-40}, -{53,-3,-39}, -{53,-3,-38}, -{53,-3,-37}, -{53,-3,-36}, -{53,-3,-35}, -{53,-3,-34}, -{53,-3,-33}, -{53,-3,-32}, -{53,-3,-31}, -{53,-3,-30}, -{53,-3,-29}, -{53,-3,-28}, -{53,-3,-27}, -{53,-3,-26}, -{53,-3,-25}, -{53,-3,-24}, -{53,-3,-23}, -{53,-3,-22}, -{53,-3,-21}, -{53,-3,-20}, -{53,-3,-19}, -{53,-3,-18}, -{53,-3,-17}, -{53,-3,-16}, -{53,-3,-15}, -{53,-3,-14}, -{53,-3,-13}, -{53,-3,-12}, -{53,-3,-11}, -{53,-3,-10}, -{53,-3,-9}, -{53,-3,-8}, -{53,-3,-7}, -{53,-3,-6}, -{53,-3,-5}, -{53,-3,-4}, -{53,-3,-3}, -{53,-3,-2}, -{53,-3,-1}, -{53,-3,0}, -{53,-3,1}, -{53,-3,2}, -{53,-3,3}, -{53,-3,4}, -{53,-3,5}, -{53,-3,6}, -{53,-3,7}, -{53,-3,8}, -{53,-3,9}, -{53,-3,10}, -{53,-3,11}, -{53,-3,12}, -{53,-3,13}, -{53,-3,14}, -{53,-3,15}, -{53,-3,16}, -{53,-3,17}, -{53,-3,18}, -{53,-3,19}, -{53,-3,20}, -{53,-3,21}, -{53,-3,22}, -{53,-3,23}, -{53,-3,24}, -{53,-3,25}, -{53,-3,26}, -{53,-3,27}, -{53,-3,28}, -{53,-3,29}, -{53,-3,30}, -{53,-3,31}, -{53,-3,32}, -{53,-3,33}, -{53,-3,34}, -{53,-3,35}, -{53,-3,36}, -{53,-3,37}, -{53,-3,38}, -{53,-3,39}, -{53,-3,40}, -{53,-3,41}, -{53,-3,42}, -{53,-3,43}, -{53,-3,44}, -{53,-3,45}, -{53,-3,46}, -{53,-3,47}, -{53,-3,48}, -{53,-3,49}, -{53,-3,50}, -{53,-3,51}, -{53,-3,52}, -{53,-3,53}, -{53,-3,54}, -{53,-3,55}, -{53,-3,56}, -{53,-3,57}, -{53,-3,58}, -{53,-2,-47}, -{53,-2,-46}, -{53,-2,-45}, -{53,-2,-44}, -{53,-2,-43}, -{53,-2,-42}, -{53,-2,-41}, -{53,-2,-40}, -{53,-2,-39}, -{53,-2,-38}, -{53,-2,-37}, -{53,-2,-36}, -{53,-2,-35}, -{53,-2,-34}, -{53,-2,-33}, -{53,-2,-32}, -{53,-2,-31}, -{53,-2,-30}, -{53,-2,-29}, -{53,-2,-28}, -{53,-2,-27}, -{53,-2,-26}, -{53,-2,-25}, -{53,-2,-24}, -{53,-2,-23}, -{53,-2,-22}, -{53,-2,-21}, -{53,-2,-20}, -{53,-2,-19}, -{53,-2,-18}, -{53,-2,-17}, -{53,-2,-16}, -{53,-2,-15}, -{53,-2,-14}, -{53,-2,-13}, -{53,-2,-12}, -{53,-2,-11}, -{53,-2,-10}, -{53,-2,-9}, -{53,-2,-8}, -{53,-2,-7}, -{53,-2,-6}, -{53,-2,-5}, -{53,-2,-4}, -{53,-2,-3}, -{53,-2,-2}, -{53,-2,-1}, -{53,-2,0}, -{53,-2,1}, -{53,-2,2}, -{53,-2,3}, -{53,-2,4}, -{53,-2,5}, -{53,-2,6}, -{53,-2,7}, -{53,-2,8}, -{53,-2,9}, -{53,-2,10}, -{53,-2,11}, -{53,-2,12}, -{53,-2,13}, -{53,-2,14}, -{53,-2,15}, -{53,-2,16}, -{53,-2,17}, -{53,-2,18}, -{53,-2,19}, -{53,-2,20}, -{53,-2,21}, -{53,-2,22}, -{53,-2,23}, -{53,-2,24}, -{53,-2,25}, -{53,-2,26}, -{53,-2,27}, -{53,-2,28}, -{53,-2,29}, -{53,-2,30}, -{53,-2,31}, -{53,-2,32}, -{53,-2,33}, -{53,-2,34}, -{53,-2,35}, -{53,-2,36}, -{53,-2,37}, -{53,-2,38}, -{53,-2,39}, -{53,-2,40}, -{53,-2,41}, -{53,-2,42}, -{53,-2,43}, -{53,-2,44}, -{53,-2,45}, -{53,-2,46}, -{53,-2,47}, -{53,-2,48}, -{53,-2,49}, -{53,-2,50}, -{53,-2,51}, -{53,-2,52}, -{53,-2,53}, -{53,-2,54}, -{53,-2,55}, -{53,-2,56}, -{53,-2,57}, -{53,-2,58}, -{53,-1,-48}, -{53,-1,-47}, -{53,-1,-46}, -{53,-1,-45}, -{53,-1,-44}, -{53,-1,-43}, -{53,-1,-42}, -{53,-1,-41}, -{53,-1,-40}, -{53,-1,-39}, -{53,-1,-38}, -{53,-1,-37}, -{53,-1,-36}, -{53,-1,-35}, -{53,-1,-34}, -{53,-1,-33}, -{53,-1,-32}, -{53,-1,-31}, -{53,-1,-30}, -{53,-1,-29}, -{53,-1,-28}, -{53,-1,-27}, -{53,-1,-26}, -{53,-1,-25}, -{53,-1,-24}, -{53,-1,-23}, -{53,-1,-22}, -{53,-1,-21}, -{53,-1,-20}, -{53,-1,-19}, -{53,-1,-18}, -{53,-1,-17}, -{53,-1,-16}, -{53,-1,-15}, -{53,-1,-14}, -{53,-1,-13}, -{53,-1,-12}, -{53,-1,-11}, -{53,-1,-10}, -{53,-1,-9}, -{53,-1,-8}, -{53,-1,-7}, -{53,-1,-6}, -{53,-1,-5}, -{53,-1,-4}, -{53,-1,-3}, -{53,-1,-2}, -{53,-1,-1}, -{53,-1,0}, -{53,-1,1}, -{53,-1,2}, -{53,-1,3}, -{53,-1,4}, -{53,-1,5}, -{53,-1,6}, -{53,-1,7}, -{53,-1,8}, -{53,-1,9}, -{53,-1,10}, -{53,-1,11}, -{53,-1,12}, -{53,-1,13}, -{53,-1,14}, -{53,-1,15}, -{53,-1,16}, -{53,-1,17}, -{53,-1,18}, -{53,-1,19}, -{53,-1,20}, -{53,-1,21}, -{53,-1,22}, -{53,-1,23}, -{53,-1,24}, -{53,-1,25}, -{53,-1,26}, -{53,-1,27}, -{53,-1,28}, -{53,-1,29}, -{53,-1,30}, -{53,-1,31}, -{53,-1,32}, -{53,-1,33}, -{53,-1,34}, -{53,-1,35}, -{53,-1,36}, -{53,-1,37}, -{53,-1,38}, -{53,-1,39}, -{53,-1,40}, -{53,-1,41}, -{53,-1,42}, -{53,-1,43}, -{53,-1,44}, -{53,-1,45}, -{53,-1,46}, -{53,-1,47}, -{53,-1,48}, -{53,-1,49}, -{53,-1,50}, -{53,-1,51}, -{53,-1,52}, -{53,-1,53}, -{53,-1,54}, -{53,-1,55}, -{53,-1,56}, -{53,-1,57}, -{53,-1,58}, -{53,0,-49}, -{53,0,-48}, -{53,0,-47}, -{53,0,-46}, -{53,0,-45}, -{53,0,-44}, -{53,0,-43}, -{53,0,-42}, -{53,0,-41}, -{53,0,-40}, -{53,0,-39}, -{53,0,-38}, -{53,0,-37}, -{53,0,-36}, -{53,0,-35}, -{53,0,-34}, -{53,0,-33}, -{53,0,-32}, -{53,0,-31}, -{53,0,-30}, -{53,0,-29}, -{53,0,-28}, -{53,0,-27}, -{53,0,-26}, -{53,0,-25}, -{53,0,-24}, -{53,0,-23}, -{53,0,-22}, -{53,0,-21}, -{53,0,-20}, -{53,0,-19}, -{53,0,-18}, -{53,0,-17}, -{53,0,-16}, -{53,0,-15}, -{53,0,-14}, -{53,0,-13}, -{53,0,-12}, -{53,0,-11}, -{53,0,-10}, -{53,0,-9}, -{53,0,-8}, -{53,0,-7}, -{53,0,-6}, -{53,0,-5}, -{53,0,-4}, -{53,0,-3}, -{53,0,-2}, -{53,0,-1}, -{53,0,0}, -{53,0,1}, -{53,0,2}, -{53,0,3}, -{53,0,4}, -{53,0,5}, -{53,0,6}, -{53,0,7}, -{53,0,8}, -{53,0,9}, -{53,0,10}, -{53,0,11}, -{53,0,12}, -{53,0,13}, -{53,0,14}, -{53,0,15}, -{53,0,16}, -{53,0,17}, -{53,0,18}, -{53,0,19}, -{53,0,20}, -{53,0,21}, -{53,0,22}, -{53,0,23}, -{53,0,24}, -{53,0,25}, -{53,0,26}, -{53,0,27}, -{53,0,28}, -{53,0,29}, -{53,0,30}, -{53,0,31}, -{53,0,32}, -{53,0,33}, -{53,0,34}, -{53,0,35}, -{53,0,36}, -{53,0,37}, -{53,0,38}, -{53,0,39}, -{53,0,40}, -{53,0,41}, -{53,0,42}, -{53,0,43}, -{53,0,44}, -{53,0,45}, -{53,0,46}, -{53,0,47}, -{53,0,48}, -{53,0,49}, -{53,0,50}, -{53,0,51}, -{53,0,52}, -{53,0,53}, -{53,0,54}, -{53,0,55}, -{53,0,56}, -{53,0,57}, -{53,0,58}, -{53,1,-50}, -{53,1,-49}, -{53,1,-48}, -{53,1,-47}, -{53,1,-46}, -{53,1,-45}, -{53,1,-44}, -{53,1,-43}, -{53,1,-42}, -{53,1,-41}, -{53,1,-40}, -{53,1,-39}, -{53,1,-38}, -{53,1,-37}, -{53,1,-36}, -{53,1,-35}, -{53,1,-34}, -{53,1,-33}, -{53,1,-32}, -{53,1,-31}, -{53,1,-30}, -{53,1,-29}, -{53,1,-28}, -{53,1,-27}, -{53,1,-26}, -{53,1,-25}, -{53,1,-24}, -{53,1,-23}, -{53,1,-22}, -{53,1,-21}, -{53,1,-20}, -{53,1,-19}, -{53,1,-18}, -{53,1,-17}, -{53,1,-16}, -{53,1,-15}, -{53,1,-14}, -{53,1,-13}, -{53,1,-12}, -{53,1,-11}, -{53,1,-10}, -{53,1,-9}, -{53,1,-8}, -{53,1,-7}, -{53,1,-6}, -{53,1,-5}, -{53,1,-4}, -{53,1,-3}, -{53,1,-2}, -{53,1,-1}, -{53,1,0}, -{53,1,1}, -{53,1,2}, -{53,1,3}, -{53,1,4}, -{53,1,5}, -{53,1,6}, -{53,1,7}, -{53,1,8}, -{53,1,9}, -{53,1,10}, -{53,1,11}, -{53,1,12}, -{53,1,13}, -{53,1,14}, -{53,1,15}, -{53,1,16}, -{53,1,17}, -{53,1,18}, -{53,1,19}, -{53,1,20}, -{53,1,21}, -{53,1,22}, -{53,1,23}, -{53,1,24}, -{53,1,25}, -{53,1,26}, -{53,1,27}, -{53,1,28}, -{53,1,29}, -{53,1,30}, -{53,1,31}, -{53,1,32}, -{53,1,33}, -{53,1,34}, -{53,1,35}, -{53,1,36}, -{53,1,37}, -{53,1,38}, -{53,1,39}, -{53,1,40}, -{53,1,41}, -{53,1,42}, -{53,1,43}, -{53,1,44}, -{53,1,45}, -{53,1,46}, -{53,1,47}, -{53,1,48}, -{53,1,49}, -{53,1,50}, -{53,1,51}, -{53,1,52}, -{53,1,53}, -{53,1,54}, -{53,1,55}, -{53,1,56}, -{53,1,57}, -{53,1,58}, -{53,2,-51}, -{53,2,-50}, -{53,2,-49}, -{53,2,-48}, -{53,2,-47}, -{53,2,-46}, -{53,2,-45}, -{53,2,-44}, -{53,2,-43}, -{53,2,-42}, -{53,2,-41}, -{53,2,-40}, -{53,2,-39}, -{53,2,-38}, -{53,2,-37}, -{53,2,-36}, -{53,2,-35}, -{53,2,-34}, -{53,2,-33}, -{53,2,-32}, -{53,2,-31}, -{53,2,-30}, -{53,2,-29}, -{53,2,-28}, -{53,2,-27}, -{53,2,-26}, -{53,2,-25}, -{53,2,-24}, -{53,2,-23}, -{53,2,-22}, -{53,2,-21}, -{53,2,-20}, -{53,2,-19}, -{53,2,-18}, -{53,2,-17}, -{53,2,-16}, -{53,2,-15}, -{53,2,-14}, -{53,2,-13}, -{53,2,-12}, -{53,2,-11}, -{53,2,-10}, -{53,2,-9}, -{53,2,-8}, -{53,2,-7}, -{53,2,-6}, -{53,2,-5}, -{53,2,-4}, -{53,2,-3}, -{53,2,-2}, -{53,2,-1}, -{53,2,0}, -{53,2,1}, -{53,2,2}, -{53,2,3}, -{53,2,4}, -{53,2,5}, -{53,2,6}, -{53,2,7}, -{53,2,8}, -{53,2,9}, -{53,2,10}, -{53,2,11}, -{53,2,12}, -{53,2,13}, -{53,2,14}, -{53,2,15}, -{53,2,16}, -{53,2,17}, -{53,2,18}, -{53,2,19}, -{53,2,20}, -{53,2,21}, -{53,2,22}, -{53,2,23}, -{53,2,24}, -{53,2,25}, -{53,2,26}, -{53,2,27}, -{53,2,28}, -{53,2,29}, -{53,2,30}, -{53,2,31}, -{53,2,32}, -{53,2,33}, -{53,2,34}, -{53,2,35}, -{53,2,36}, -{53,2,37}, -{53,2,38}, -{53,2,39}, -{53,2,40}, -{53,2,41}, -{53,2,42}, -{53,2,43}, -{53,2,44}, -{53,2,45}, -{53,2,46}, -{53,2,47}, -{53,2,48}, -{53,2,49}, -{53,2,50}, -{53,2,51}, -{53,2,52}, -{53,2,53}, -{53,2,54}, -{53,2,55}, -{53,2,56}, -{53,2,57}, -{53,2,58}, -{53,3,-53}, -{53,3,-52}, -{53,3,-51}, -{53,3,-50}, -{53,3,-49}, -{53,3,-48}, -{53,3,-47}, -{53,3,-46}, -{53,3,-45}, -{53,3,-44}, -{53,3,-43}, -{53,3,-42}, -{53,3,-41}, -{53,3,-40}, -{53,3,-39}, -{53,3,-38}, -{53,3,-37}, -{53,3,-36}, -{53,3,-35}, -{53,3,-34}, -{53,3,-33}, -{53,3,-32}, -{53,3,-31}, -{53,3,-30}, -{53,3,-29}, -{53,3,-28}, -{53,3,-27}, -{53,3,-26}, -{53,3,-25}, -{53,3,-24}, -{53,3,-23}, -{53,3,-22}, -{53,3,-21}, -{53,3,-20}, -{53,3,-19}, -{53,3,-18}, -{53,3,-17}, -{53,3,-16}, -{53,3,-15}, -{53,3,-14}, -{53,3,-13}, -{53,3,-12}, -{53,3,-11}, -{53,3,-10}, -{53,3,-9}, -{53,3,-8}, -{53,3,-7}, -{53,3,-6}, -{53,3,-5}, -{53,3,-4}, -{53,3,-3}, -{53,3,-2}, -{53,3,-1}, -{53,3,0}, -{53,3,1}, -{53,3,2}, -{53,3,3}, -{53,3,4}, -{53,3,5}, -{53,3,6}, -{53,3,7}, -{53,3,8}, -{53,3,9}, -{53,3,10}, -{53,3,11}, -{53,3,12}, -{53,3,13}, -{53,3,14}, -{53,3,15}, -{53,3,16}, -{53,3,17}, -{53,3,18}, -{53,3,19}, -{53,3,20}, -{53,3,21}, -{53,3,22}, -{53,3,23}, -{53,3,24}, -{53,3,25}, -{53,3,26}, -{53,3,27}, -{53,3,28}, -{53,3,29}, -{53,3,30}, -{53,3,31}, -{53,3,32}, -{53,3,33}, -{53,3,34}, -{53,3,35}, -{53,3,36}, -{53,3,37}, -{53,3,38}, -{53,3,39}, -{53,3,40}, -{53,3,41}, -{53,3,42}, -{53,3,43}, -{53,3,44}, -{53,3,45}, -{53,3,46}, -{53,3,47}, -{53,3,48}, -{53,3,49}, -{53,3,50}, -{53,3,51}, -{53,3,52}, -{53,3,53}, -{53,3,54}, -{53,3,55}, -{53,3,56}, -{53,3,57}, -{53,3,58}, -{53,4,-54}, -{53,4,-53}, -{53,4,-52}, -{53,4,-51}, -{53,4,-50}, -{53,4,-49}, -{53,4,-48}, -{53,4,-47}, -{53,4,-46}, -{53,4,-45}, -{53,4,-44}, -{53,4,-43}, -{53,4,-42}, -{53,4,-41}, -{53,4,-40}, -{53,4,-39}, -{53,4,-38}, -{53,4,-37}, -{53,4,-36}, -{53,4,-35}, -{53,4,-34}, -{53,4,-33}, -{53,4,-32}, -{53,4,-31}, -{53,4,-30}, -{53,4,-29}, -{53,4,-28}, -{53,4,-27}, -{53,4,-26}, -{53,4,-25}, -{53,4,-24}, -{53,4,-23}, -{53,4,-22}, -{53,4,-21}, -{53,4,-20}, -{53,4,-19}, -{53,4,-18}, -{53,4,-17}, -{53,4,-16}, -{53,4,-15}, -{53,4,-14}, -{53,4,-13}, -{53,4,-12}, -{53,4,-11}, -{53,4,-10}, -{53,4,-9}, -{53,4,-8}, -{53,4,-7}, -{53,4,-6}, -{53,4,-5}, -{53,4,-4}, -{53,4,-3}, -{53,4,-2}, -{53,4,-1}, -{53,4,0}, -{53,4,1}, -{53,4,2}, -{53,4,3}, -{53,4,4}, -{53,4,5}, -{53,4,6}, -{53,4,7}, -{53,4,8}, -{53,4,9}, -{53,4,10}, -{53,4,11}, -{53,4,12}, -{53,4,13}, -{53,4,14}, -{53,4,15}, -{53,4,16}, -{53,4,17}, -{53,4,18}, -{53,4,19}, -{53,4,20}, -{53,4,21}, -{53,4,22}, -{53,4,23}, -{53,4,24}, -{53,4,25}, -{53,4,26}, -{53,4,27}, -{53,4,28}, -{53,4,29}, -{53,4,30}, -{53,4,31}, -{53,4,32}, -{53,4,33}, -{53,4,34}, -{53,4,35}, -{53,4,36}, -{53,4,37}, -{53,4,38}, -{53,4,39}, -{53,4,40}, -{53,4,41}, -{53,4,42}, -{53,4,43}, -{53,4,44}, -{53,4,45}, -{53,4,46}, -{53,4,47}, -{53,4,48}, -{53,4,49}, -{53,4,50}, -{53,4,51}, -{53,4,52}, -{53,4,53}, -{53,4,54}, -{53,4,55}, -{53,4,56}, -{53,4,57}, -{53,4,58}, -{53,5,-55}, -{53,5,-54}, -{53,5,-53}, -{53,5,-52}, -{53,5,-51}, -{53,5,-50}, -{53,5,-49}, -{53,5,-48}, -{53,5,-47}, -{53,5,-46}, -{53,5,-45}, -{53,5,-44}, -{53,5,-43}, -{53,5,-42}, -{53,5,-41}, -{53,5,-40}, -{53,5,-39}, -{53,5,-38}, -{53,5,-37}, -{53,5,-36}, -{53,5,-35}, -{53,5,-34}, -{53,5,-33}, -{53,5,-32}, -{53,5,-31}, -{53,5,-30}, -{53,5,-29}, -{53,5,-28}, -{53,5,-27}, -{53,5,-26}, -{53,5,-25}, -{53,5,-24}, -{53,5,-23}, -{53,5,-22}, -{53,5,-21}, -{53,5,-20}, -{53,5,-19}, -{53,5,-18}, -{53,5,-17}, -{53,5,-16}, -{53,5,-15}, -{53,5,-14}, -{53,5,-13}, -{53,5,-12}, -{53,5,-11}, -{53,5,-10}, -{53,5,-9}, -{53,5,-8}, -{53,5,-7}, -{53,5,-6}, -{53,5,-5}, -{53,5,-4}, -{53,5,-3}, -{53,5,-2}, -{53,5,-1}, -{53,5,0}, -{53,5,1}, -{53,5,2}, -{53,5,3}, -{53,5,4}, -{53,5,5}, -{53,5,6}, -{53,5,7}, -{53,5,8}, -{53,5,9}, -{53,5,10}, -{53,5,11}, -{53,5,12}, -{53,5,13}, -{53,5,14}, -{53,5,15}, -{53,5,16}, -{53,5,17}, -{53,5,18}, -{53,5,19}, -{53,5,20}, -{53,5,21}, -{53,5,22}, -{53,5,23}, -{53,5,24}, -{53,5,25}, -{53,5,26}, -{53,5,27}, -{53,5,28}, -{53,5,29}, -{53,5,30}, -{53,5,31}, -{53,5,32}, -{53,5,33}, -{53,5,34}, -{53,5,35}, -{53,5,36}, -{53,5,37}, -{53,5,38}, -{53,5,39}, -{53,5,40}, -{53,5,41}, -{53,5,42}, -{53,5,43}, -{53,5,44}, -{53,5,45}, -{53,5,46}, -{53,5,47}, -{53,5,48}, -{53,5,49}, -{53,5,50}, -{53,5,51}, -{53,5,52}, -{53,5,53}, -{53,5,54}, -{53,5,55}, -{53,5,56}, -{53,5,57}, -{53,5,58}, -{53,5,59}, -{53,6,-56}, -{53,6,-55}, -{53,6,-54}, -{53,6,-53}, -{53,6,-52}, -{53,6,-51}, -{53,6,-50}, -{53,6,-49}, -{53,6,-48}, -{53,6,-47}, -{53,6,-46}, -{53,6,-45}, -{53,6,-44}, -{53,6,-43}, -{53,6,-42}, -{53,6,-41}, -{53,6,-40}, -{53,6,-39}, -{53,6,-38}, -{53,6,-37}, -{53,6,-36}, -{53,6,-35}, -{53,6,-34}, -{53,6,-33}, -{53,6,-32}, -{53,6,-31}, -{53,6,-30}, -{53,6,-29}, -{53,6,-28}, -{53,6,-27}, -{53,6,-26}, -{53,6,-25}, -{53,6,-24}, -{53,6,-23}, -{53,6,-22}, -{53,6,-21}, -{53,6,-20}, -{53,6,-19}, -{53,6,-18}, -{53,6,-17}, -{53,6,-16}, -{53,6,-15}, -{53,6,-14}, -{53,6,-13}, -{53,6,-12}, -{53,6,-11}, -{53,6,-10}, -{53,6,-9}, -{53,6,-8}, -{53,6,-7}, -{53,6,-6}, -{53,6,-5}, -{53,6,-4}, -{53,6,-3}, -{53,6,-2}, -{53,6,-1}, -{53,6,0}, -{53,6,1}, -{53,6,2}, -{53,6,3}, -{53,6,4}, -{53,6,5}, -{53,6,6}, -{53,6,7}, -{53,6,8}, -{53,6,9}, -{53,6,10}, -{53,6,11}, -{53,6,12}, -{53,6,13}, -{53,6,14}, -{53,6,15}, -{53,6,16}, -{53,6,17}, -{53,6,18}, -{53,6,19}, -{53,6,20}, -{53,6,21}, -{53,6,22}, -{53,6,23}, -{53,6,24}, -{53,6,25}, -{53,6,26}, -{53,6,27}, -{53,6,28}, -{53,6,29}, -{53,6,30}, -{53,6,31}, -{53,6,32}, -{53,6,33}, -{53,6,34}, -{53,6,35}, -{53,6,36}, -{53,6,37}, -{53,6,38}, -{53,6,39}, -{53,6,40}, -{53,6,41}, -{53,6,42}, -{53,6,43}, -{53,6,44}, -{53,6,45}, -{53,6,46}, -{53,6,47}, -{53,6,48}, -{53,6,49}, -{53,6,50}, -{53,6,51}, -{53,6,52}, -{53,6,53}, -{53,6,54}, -{53,6,55}, -{53,6,56}, -{53,6,57}, -{53,6,58}, -{53,6,59}, -{53,7,-57}, -{53,7,-56}, -{53,7,-55}, -{53,7,-54}, -{53,7,-53}, -{53,7,-52}, -{53,7,-51}, -{53,7,-50}, -{53,7,-49}, -{53,7,-48}, -{53,7,-47}, -{53,7,-46}, -{53,7,-45}, -{53,7,-44}, -{53,7,-43}, -{53,7,-42}, -{53,7,-41}, -{53,7,-40}, -{53,7,-39}, -{53,7,-38}, -{53,7,-37}, -{53,7,-36}, -{53,7,-35}, -{53,7,-34}, -{53,7,-33}, -{53,7,-32}, -{53,7,-31}, -{53,7,-30}, -{53,7,-29}, -{53,7,-28}, -{53,7,-27}, -{53,7,-26}, -{53,7,-25}, -{53,7,-24}, -{53,7,-23}, -{53,7,-22}, -{53,7,-21}, -{53,7,-20}, -{53,7,-19}, -{53,7,-18}, -{53,7,-17}, -{53,7,-16}, -{53,7,-15}, -{53,7,-14}, -{53,7,-13}, -{53,7,-12}, -{53,7,-11}, -{53,7,-10}, -{53,7,-9}, -{53,7,-8}, -{53,7,-7}, -{53,7,-6}, -{53,7,-5}, -{53,7,-4}, -{53,7,-3}, -{53,7,-2}, -{53,7,-1}, -{53,7,0}, -{53,7,1}, -{53,7,2}, -{53,7,3}, -{53,7,4}, -{53,7,5}, -{53,7,6}, -{53,7,7}, -{53,7,8}, -{53,7,9}, -{53,7,10}, -{53,7,11}, -{53,7,12}, -{53,7,13}, -{53,7,14}, -{53,7,15}, -{53,7,16}, -{53,7,17}, -{53,7,18}, -{53,7,19}, -{53,7,20}, -{53,7,21}, -{53,7,22}, -{53,7,23}, -{53,7,24}, -{53,7,25}, -{53,7,26}, -{53,7,27}, -{53,7,28}, -{53,7,29}, -{53,7,30}, -{53,7,31}, -{53,7,32}, -{53,7,33}, -{53,7,34}, -{53,7,35}, -{53,7,36}, -{53,7,37}, -{53,7,38}, -{53,7,39}, -{53,7,40}, -{53,7,41}, -{53,7,42}, -{53,7,43}, -{53,7,44}, -{53,7,45}, -{53,7,46}, -{53,7,47}, -{53,7,48}, -{53,7,49}, -{53,7,50}, -{53,7,51}, -{53,7,52}, -{53,7,53}, -{53,7,54}, -{53,7,55}, -{53,7,56}, -{53,7,57}, -{53,7,58}, -{53,7,59}, -{53,8,-58}, -{53,8,-57}, -{53,8,-56}, -{53,8,-55}, -{53,8,-54}, -{53,8,-53}, -{53,8,-52}, -{53,8,-51}, -{53,8,-50}, -{53,8,-49}, -{53,8,-48}, -{53,8,-47}, -{53,8,-46}, -{53,8,-45}, -{53,8,-44}, -{53,8,-43}, -{53,8,-42}, -{53,8,-41}, -{53,8,-40}, -{53,8,-39}, -{53,8,-38}, -{53,8,-37}, -{53,8,-36}, -{53,8,-35}, -{53,8,-34}, -{53,8,-33}, -{53,8,-32}, -{53,8,-31}, -{53,8,-30}, -{53,8,-29}, -{53,8,-28}, -{53,8,-27}, -{53,8,-26}, -{53,8,-25}, -{53,8,-24}, -{53,8,-23}, -{53,8,-22}, -{53,8,-21}, -{53,8,-20}, -{53,8,-19}, -{53,8,-18}, -{53,8,-17}, -{53,8,-16}, -{53,8,-15}, -{53,8,-14}, -{53,8,-13}, -{53,8,-12}, -{53,8,-11}, -{53,8,-10}, -{53,8,-9}, -{53,8,-8}, -{53,8,-7}, -{53,8,-6}, -{53,8,-5}, -{53,8,-4}, -{53,8,-3}, -{53,8,-2}, -{53,8,-1}, -{53,8,0}, -{53,8,1}, -{53,8,2}, -{53,8,3}, -{53,8,4}, -{53,8,5}, -{53,8,6}, -{53,8,7}, -{53,8,8}, -{53,8,9}, -{53,8,10}, -{53,8,11}, -{53,8,12}, -{53,8,13}, -{53,8,14}, -{53,8,15}, -{53,8,16}, -{53,8,17}, -{53,8,18}, -{53,8,19}, -{53,8,20}, -{53,8,21}, -{53,8,22}, -{53,8,23}, -{53,8,24}, -{53,8,25}, -{53,8,26}, -{53,8,27}, -{53,8,28}, -{53,8,29}, -{53,8,30}, -{53,8,31}, -{53,8,32}, -{53,8,33}, -{53,8,34}, -{53,8,35}, -{53,8,36}, -{53,8,37}, -{53,8,38}, -{53,8,39}, -{53,8,40}, -{53,8,41}, -{53,8,42}, -{53,8,43}, -{53,8,44}, -{53,8,45}, -{53,8,46}, -{53,8,47}, -{53,8,48}, -{53,8,49}, -{53,8,50}, -{53,8,51}, -{53,8,52}, -{53,8,53}, -{53,8,54}, -{53,8,55}, -{53,8,56}, -{53,8,57}, -{53,8,58}, -{53,8,59}, -{53,9,-59}, -{53,9,-58}, -{53,9,-57}, -{53,9,-56}, -{53,9,-55}, -{53,9,-54}, -{53,9,-53}, -{53,9,-52}, -{53,9,-51}, -{53,9,-50}, -{53,9,-49}, -{53,9,-48}, -{53,9,-47}, -{53,9,-46}, -{53,9,-45}, -{53,9,-44}, -{53,9,-43}, -{53,9,-42}, -{53,9,-41}, -{53,9,-40}, -{53,9,-39}, -{53,9,-38}, -{53,9,-37}, -{53,9,-36}, -{53,9,-35}, -{53,9,-34}, -{53,9,-33}, -{53,9,-32}, -{53,9,-31}, -{53,9,-30}, -{53,9,-29}, -{53,9,-28}, -{53,9,-27}, -{53,9,-26}, -{53,9,-25}, -{53,9,-24}, -{53,9,-23}, -{53,9,-22}, -{53,9,-21}, -{53,9,-20}, -{53,9,-19}, -{53,9,-18}, -{53,9,-17}, -{53,9,-16}, -{53,9,-15}, -{53,9,-14}, -{53,9,-13}, -{53,9,-12}, -{53,9,-11}, -{53,9,-10}, -{53,9,-9}, -{53,9,-8}, -{53,9,-7}, -{53,9,-6}, -{53,9,-5}, -{53,9,-4}, -{53,9,-3}, -{53,9,-2}, -{53,9,-1}, -{53,9,0}, -{53,9,1}, -{53,9,2}, -{53,9,3}, -{53,9,4}, -{53,9,5}, -{53,9,6}, -{53,9,7}, -{53,9,8}, -{53,9,9}, -{53,9,10}, -{53,9,11}, -{53,9,12}, -{53,9,13}, -{53,9,14}, -{53,9,15}, -{53,9,16}, -{53,9,17}, -{53,9,18}, -{53,9,19}, -{53,9,20}, -{53,9,21}, -{53,9,22}, -{53,9,23}, -{53,9,24}, -{53,9,25}, -{53,9,26}, -{53,9,27}, -{53,9,28}, -{53,9,29}, -{53,9,30}, -{53,9,31}, -{53,9,32}, -{53,9,33}, -{53,9,34}, -{53,9,35}, -{53,9,36}, -{53,9,37}, -{53,9,38}, -{53,9,39}, -{53,9,40}, -{53,9,41}, -{53,9,42}, -{53,9,43}, -{53,9,44}, -{53,9,45}, -{53,9,46}, -{53,9,47}, -{53,9,48}, -{53,9,49}, -{53,9,50}, -{53,9,51}, -{53,9,52}, -{53,9,53}, -{53,9,54}, -{53,9,55}, -{53,9,56}, -{53,9,57}, -{53,9,58}, -{53,9,59}, -{53,10,-60}, -{53,10,-59}, -{53,10,-58}, -{53,10,-57}, -{53,10,-56}, -{53,10,-55}, -{53,10,-54}, -{53,10,-53}, -{53,10,-52}, -{53,10,-51}, -{53,10,-50}, -{53,10,-49}, -{53,10,-48}, -{53,10,-47}, -{53,10,-46}, -{53,10,-45}, -{53,10,-44}, -{53,10,-43}, -{53,10,-42}, -{53,10,-41}, -{53,10,-40}, -{53,10,-39}, -{53,10,-38}, -{53,10,-37}, -{53,10,-36}, -{53,10,-35}, -{53,10,-34}, -{53,10,-33}, -{53,10,-32}, -{53,10,-31}, -{53,10,-30}, -{53,10,-29}, -{53,10,-28}, -{53,10,-27}, -{53,10,-26}, -{53,10,-25}, -{53,10,-24}, -{53,10,-23}, -{53,10,-22}, -{53,10,-21}, -{53,10,-20}, -{53,10,-19}, -{53,10,-18}, -{53,10,-17}, -{53,10,-16}, -{53,10,-15}, -{53,10,-14}, -{53,10,-13}, -{53,10,-12}, -{53,10,-11}, -{53,10,-10}, -{53,10,-9}, -{53,10,-8}, -{53,10,-7}, -{53,10,-6}, -{53,10,-5}, -{53,10,-4}, -{53,10,-3}, -{53,10,-2}, -{53,10,-1}, -{53,10,0}, -{53,10,1}, -{53,10,2}, -{53,10,3}, -{53,10,4}, -{53,10,5}, -{53,10,6}, -{53,10,7}, -{53,10,8}, -{53,10,9}, -{53,10,10}, -{53,10,11}, -{53,10,12}, -{53,10,13}, -{53,10,14}, -{53,10,15}, -{53,10,16}, -{53,10,17}, -{53,10,18}, -{53,10,19}, -{53,10,20}, -{53,10,21}, -{53,10,22}, -{53,10,23}, -{53,10,24}, -{53,10,25}, -{53,10,26}, -{53,10,27}, -{53,10,28}, -{53,10,29}, -{53,10,30}, -{53,10,31}, -{53,10,32}, -{53,10,33}, -{53,10,34}, -{53,10,35}, -{53,10,36}, -{53,10,37}, -{53,10,38}, -{53,10,39}, -{53,10,40}, -{53,10,41}, -{53,10,42}, -{53,10,43}, -{53,10,44}, -{53,10,45}, -{53,10,46}, -{53,10,47}, -{53,10,48}, -{53,10,49}, -{53,10,50}, -{53,10,51}, -{53,10,52}, -{53,10,53}, -{53,10,54}, -{53,10,55}, -{53,10,56}, -{53,10,57}, -{53,10,58}, -{53,10,59}, -{53,11,-61}, -{53,11,-60}, -{53,11,-59}, -{53,11,-58}, -{53,11,-57}, -{53,11,-56}, -{53,11,-55}, -{53,11,-54}, -{53,11,-53}, -{53,11,-52}, -{53,11,-51}, -{53,11,-50}, -{53,11,-49}, -{53,11,-48}, -{53,11,-47}, -{53,11,-46}, -{53,11,-45}, -{53,11,-44}, -{53,11,-43}, -{53,11,-42}, -{53,11,-41}, -{53,11,-40}, -{53,11,-39}, -{53,11,-38}, -{53,11,-37}, -{53,11,-36}, -{53,11,-35}, -{53,11,-34}, -{53,11,-33}, -{53,11,-32}, -{53,11,-31}, -{53,11,-30}, -{53,11,-29}, -{53,11,-28}, -{53,11,-27}, -{53,11,-26}, -{53,11,-25}, -{53,11,-24}, -{53,11,-23}, -{53,11,-22}, -{53,11,-21}, -{53,11,-20}, -{53,11,-19}, -{53,11,-18}, -{53,11,-17}, -{53,11,-16}, -{53,11,-15}, -{53,11,-14}, -{53,11,-13}, -{53,11,-12}, -{53,11,-11}, -{53,11,-10}, -{53,11,-9}, -{53,11,-8}, -{53,11,-7}, -{53,11,-6}, -{53,11,-5}, -{53,11,-4}, -{53,11,-3}, -{53,11,-2}, -{53,11,-1}, -{53,11,0}, -{53,11,1}, -{53,11,2}, -{53,11,3}, -{53,11,4}, -{53,11,5}, -{53,11,6}, -{53,11,7}, -{53,11,8}, -{53,11,9}, -{53,11,10}, -{53,11,11}, -{53,11,12}, -{53,11,13}, -{53,11,14}, -{53,11,15}, -{53,11,16}, -{53,11,17}, -{53,11,18}, -{53,11,19}, -{53,11,20}, -{53,11,21}, -{53,11,22}, -{53,11,23}, -{53,11,24}, -{53,11,25}, -{53,11,26}, -{53,11,27}, -{53,11,28}, -{53,11,29}, -{53,11,30}, -{53,11,31}, -{53,11,32}, -{53,11,33}, -{53,11,34}, -{53,11,35}, -{53,11,36}, -{53,11,37}, -{53,11,38}, -{53,11,39}, -{53,11,40}, -{53,11,41}, -{53,11,42}, -{53,11,43}, -{53,11,44}, -{53,11,45}, -{53,11,46}, -{53,11,47}, -{53,11,48}, -{53,11,49}, -{53,11,50}, -{53,11,51}, -{53,11,52}, -{53,11,53}, -{53,11,54}, -{53,11,55}, -{53,11,56}, -{53,11,57}, -{53,11,58}, -{53,11,59}, -{53,12,-62}, -{53,12,-61}, -{53,12,-60}, -{53,12,-59}, -{53,12,-58}, -{53,12,-57}, -{53,12,-56}, -{53,12,-55}, -{53,12,-54}, -{53,12,-53}, -{53,12,-52}, -{53,12,-51}, -{53,12,-50}, -{53,12,-49}, -{53,12,-48}, -{53,12,-47}, -{53,12,-46}, -{53,12,-45}, -{53,12,-44}, -{53,12,-43}, -{53,12,-42}, -{53,12,-41}, -{53,12,-40}, -{53,12,-39}, -{53,12,-38}, -{53,12,-37}, -{53,12,-36}, -{53,12,-35}, -{53,12,-34}, -{53,12,-33}, -{53,12,-32}, -{53,12,-31}, -{53,12,-30}, -{53,12,-29}, -{53,12,-28}, -{53,12,-27}, -{53,12,-26}, -{53,12,-25}, -{53,12,-24}, -{53,12,-23}, -{53,12,-22}, -{53,12,-21}, -{53,12,-20}, -{53,12,-19}, -{53,12,-18}, -{53,12,-17}, -{53,12,-16}, -{53,12,-15}, -{53,12,-14}, -{53,12,-13}, -{53,12,-12}, -{53,12,-11}, -{53,12,-10}, -{53,12,-9}, -{53,12,-8}, -{53,12,-7}, -{53,12,-6}, -{53,12,-5}, -{53,12,-4}, -{53,12,-3}, -{53,12,-2}, -{53,12,-1}, -{53,12,0}, -{53,12,1}, -{53,12,2}, -{53,12,3}, -{53,12,4}, -{53,12,5}, -{53,12,6}, -{53,12,7}, -{53,12,8}, -{53,12,9}, -{53,12,10}, -{53,12,11}, -{53,12,12}, -{53,12,13}, -{53,12,14}, -{53,12,15}, -{53,12,16}, -{53,12,17}, -{53,12,18}, -{53,12,19}, -{53,12,20}, -{53,12,21}, -{53,12,22}, -{53,12,23}, -{53,12,24}, -{53,12,25}, -{53,12,26}, -{53,12,27}, -{53,12,28}, -{53,12,29}, -{53,12,30}, -{53,12,31}, -{53,12,32}, -{53,12,33}, -{53,12,34}, -{53,12,35}, -{53,12,36}, -{53,12,37}, -{53,12,38}, -{53,12,39}, -{53,12,40}, -{53,12,41}, -{53,12,42}, -{53,12,43}, -{53,12,44}, -{53,12,45}, -{53,12,46}, -{53,12,47}, -{53,12,48}, -{53,12,49}, -{53,12,50}, -{53,12,51}, -{53,12,52}, -{53,12,53}, -{53,12,54}, -{53,12,55}, -{53,12,56}, -{53,12,57}, -{53,12,58}, -{53,12,59}, -{53,13,-63}, -{53,13,-62}, -{53,13,-61}, -{53,13,-60}, -{53,13,-59}, -{53,13,-58}, -{53,13,-57}, -{53,13,-56}, -{53,13,-55}, -{53,13,-54}, -{53,13,-53}, -{53,13,-52}, -{53,13,-51}, -{53,13,-50}, -{53,13,-49}, -{53,13,-48}, -{53,13,-47}, -{53,13,-46}, -{53,13,-45}, -{53,13,-44}, -{53,13,-43}, -{53,13,-42}, -{53,13,-41}, -{53,13,-40}, -{53,13,-39}, -{53,13,-38}, -{53,13,-37}, -{53,13,-36}, -{53,13,-35}, -{53,13,-34}, -{53,13,-33}, -{53,13,-32}, -{53,13,-31}, -{53,13,-30}, -{53,13,-29}, -{53,13,-28}, -{53,13,-27}, -{53,13,-26}, -{53,13,-25}, -{53,13,-24}, -{53,13,-23}, -{53,13,-22}, -{53,13,-21}, -{53,13,-20}, -{53,13,-19}, -{53,13,-18}, -{53,13,-17}, -{53,13,-16}, -{53,13,-15}, -{53,13,-14}, -{53,13,-13}, -{53,13,-12}, -{53,13,-11}, -{53,13,-10}, -{53,13,-9}, -{53,13,-8}, -{53,13,-7}, -{53,13,-6}, -{53,13,-5}, -{53,13,-4}, -{53,13,-3}, -{53,13,-2}, -{53,13,-1}, -{53,13,0}, -{53,13,1}, -{53,13,2}, -{53,13,3}, -{53,13,4}, -{53,13,5}, -{53,13,6}, -{53,13,7}, -{53,13,8}, -{53,13,9}, -{53,13,10}, -{53,13,11}, -{53,13,12}, -{53,13,13}, -{53,13,14}, -{53,13,15}, -{53,13,16}, -{53,13,17}, -{53,13,18}, -{53,13,19}, -{53,13,20}, -{53,13,21}, -{53,13,22}, -{53,13,23}, -{53,13,24}, -{53,13,25}, -{53,13,26}, -{53,13,27}, -{53,13,28}, -{53,13,29}, -{53,13,30}, -{53,13,31}, -{53,13,32}, -{53,13,33}, -{53,13,34}, -{53,13,35}, -{53,13,36}, -{53,13,37}, -{53,13,38}, -{53,13,39}, -{53,13,40}, -{53,13,41}, -{53,13,42}, -{53,13,43}, -{53,13,44}, -{53,13,45}, -{53,13,46}, -{53,13,47}, -{53,13,48}, -{53,13,49}, -{53,13,50}, -{53,13,51}, -{53,13,52}, -{53,13,53}, -{53,13,54}, -{53,13,55}, -{53,13,56}, -{53,13,57}, -{53,13,58}, -{53,13,59}, -{53,14,-64}, -{53,14,-63}, -{53,14,-62}, -{53,14,-61}, -{53,14,-60}, -{53,14,-59}, -{53,14,-58}, -{53,14,-57}, -{53,14,-56}, -{53,14,-55}, -{53,14,-54}, -{53,14,-53}, -{53,14,-52}, -{53,14,-51}, -{53,14,-50}, -{53,14,-49}, -{53,14,-48}, -{53,14,-47}, -{53,14,-46}, -{53,14,-45}, -{53,14,-44}, -{53,14,-43}, -{53,14,-42}, -{53,14,-41}, -{53,14,-40}, -{53,14,-39}, -{53,14,-38}, -{53,14,-37}, -{53,14,-36}, -{53,14,-35}, -{53,14,-34}, -{53,14,-33}, -{53,14,-32}, -{53,14,-31}, -{53,14,-30}, -{53,14,-29}, -{53,14,-28}, -{53,14,-27}, -{53,14,-26}, -{53,14,-25}, -{53,14,-24}, -{53,14,-23}, -{53,14,-22}, -{53,14,-21}, -{53,14,-20}, -{53,14,-19}, -{53,14,-18}, -{53,14,-17}, -{53,14,-16}, -{53,14,-15}, -{53,14,-14}, -{53,14,-13}, -{53,14,-12}, -{53,14,-11}, -{53,14,-10}, -{53,14,-9}, -{53,14,-8}, -{53,14,-7}, -{53,14,-6}, -{53,14,-5}, -{53,14,-4}, -{53,14,-3}, -{53,14,-2}, -{53,14,-1}, -{53,14,0}, -{53,14,1}, -{53,14,2}, -{53,14,3}, -{53,14,4}, -{53,14,5}, -{53,14,6}, -{53,14,7}, -{53,14,8}, -{53,14,9}, -{53,14,10}, -{53,14,11}, -{53,14,12}, -{53,14,13}, -{53,14,14}, -{53,14,15}, -{53,14,16}, -{53,14,17}, -{53,14,18}, -{53,14,19}, -{53,14,20}, -{53,14,21}, -{53,14,22}, -{53,14,23}, -{53,14,24}, -{53,14,25}, -{53,14,26}, -{53,14,27}, -{53,14,28}, -{53,14,29}, -{53,14,30}, -{53,14,31}, -{53,14,32}, -{53,14,33}, -{53,14,34}, -{53,14,35}, -{53,14,36}, -{53,14,37}, -{53,14,38}, -{53,14,39}, -{53,14,40}, -{53,14,41}, -{53,14,42}, -{53,14,43}, -{53,14,44}, -{53,14,45}, -{53,14,46}, -{53,14,47}, -{53,14,48}, -{53,14,49}, -{53,14,50}, -{53,14,51}, -{53,14,52}, -{53,14,53}, -{53,14,54}, -{53,14,55}, -{53,14,56}, -{53,14,57}, -{53,14,58}, -{53,14,59}, -{53,15,-65}, -{53,15,-64}, -{53,15,-63}, -{53,15,-62}, -{53,15,-61}, -{53,15,-60}, -{53,15,-59}, -{53,15,-58}, -{53,15,-57}, -{53,15,-56}, -{53,15,-55}, -{53,15,-54}, -{53,15,-53}, -{53,15,-52}, -{53,15,-51}, -{53,15,-50}, -{53,15,-49}, -{53,15,-48}, -{53,15,-47}, -{53,15,-46}, -{53,15,-45}, -{53,15,-44}, -{53,15,-43}, -{53,15,-42}, -{53,15,-41}, -{53,15,-40}, -{53,15,-39}, -{53,15,-38}, -{53,15,-37}, -{53,15,-36}, -{53,15,-35}, -{53,15,-34}, -{53,15,-33}, -{53,15,-32}, -{53,15,-31}, -{53,15,-30}, -{53,15,-29}, -{53,15,-28}, -{53,15,-27}, -{53,15,-26}, -{53,15,-25}, -{53,15,-24}, -{53,15,-23}, -{53,15,-22}, -{53,15,-21}, -{53,15,-20}, -{53,15,-19}, -{53,15,-18}, -{53,15,-17}, -{53,15,-16}, -{53,15,-15}, -{53,15,-14}, -{53,15,-13}, -{53,15,-12}, -{53,15,-11}, -{53,15,-10}, -{53,15,-9}, -{53,15,-8}, -{53,15,-7}, -{53,15,-6}, -{53,15,-5}, -{53,15,-4}, -{53,15,-3}, -{53,15,-2}, -{53,15,-1}, -{53,15,0}, -{53,15,1}, -{53,15,2}, -{53,15,3}, -{53,15,4}, -{53,15,5}, -{53,15,6}, -{53,15,7}, -{53,15,8}, -{53,15,9}, -{53,15,10}, -{53,15,11}, -{53,15,12}, -{53,15,13}, -{53,15,14}, -{53,15,15}, -{53,15,16}, -{53,15,17}, -{53,15,18}, -{53,15,19}, -{53,15,20}, -{53,15,21}, -{53,15,22}, -{53,15,23}, -{53,15,24}, -{53,15,25}, -{53,15,26}, -{53,15,27}, -{53,15,28}, -{53,15,29}, -{53,15,30}, -{53,15,31}, -{53,15,32}, -{53,15,33}, -{53,15,34}, -{53,15,35}, -{53,15,36}, -{53,15,37}, -{53,15,38}, -{53,15,39}, -{53,15,40}, -{53,15,41}, -{53,15,42}, -{53,15,43}, -{53,15,44}, -{53,15,45}, -{53,15,46}, -{53,15,47}, -{53,15,48}, -{53,15,49}, -{53,15,50}, -{53,15,51}, -{53,15,52}, -{53,15,53}, -{53,15,54}, -{53,15,55}, -{53,15,56}, -{53,15,57}, -{53,15,58}, -{53,15,59}, -{53,16,-66}, -{53,16,-65}, -{53,16,-64}, -{53,16,-63}, -{53,16,-62}, -{53,16,-61}, -{53,16,-60}, -{53,16,-59}, -{53,16,-58}, -{53,16,-57}, -{53,16,-56}, -{53,16,-55}, -{53,16,-54}, -{53,16,-53}, -{53,16,-52}, -{53,16,-51}, -{53,16,-50}, -{53,16,-49}, -{53,16,-48}, -{53,16,-47}, -{53,16,-46}, -{53,16,-45}, -{53,16,-44}, -{53,16,-43}, -{53,16,-42}, -{53,16,-41}, -{53,16,-40}, -{53,16,-39}, -{53,16,-38}, -{53,16,-37}, -{53,16,-36}, -{53,16,-35}, -{53,16,-34}, -{53,16,-33}, -{53,16,-32}, -{53,16,-31}, -{53,16,-30}, -{53,16,-29}, -{53,16,-28}, -{53,16,-27}, -{53,16,-26}, -{53,16,-25}, -{53,16,-24}, -{53,16,-23}, -{53,16,-22}, -{53,16,-21}, -{53,16,-20}, -{53,16,-19}, -{53,16,-18}, -{53,16,-17}, -{53,16,-16}, -{53,16,-15}, -{53,16,-14}, -{53,16,-13}, -{53,16,-12}, -{53,16,-11}, -{53,16,-10}, -{53,16,-9}, -{53,16,-8}, -{53,16,-7}, -{53,16,-6}, -{53,16,-5}, -{53,16,-4}, -{53,16,-3}, -{53,16,-2}, -{53,16,-1}, -{53,16,0}, -{53,16,1}, -{53,16,2}, -{53,16,3}, -{53,16,4}, -{53,16,5}, -{53,16,6}, -{53,16,7}, -{53,16,8}, -{53,16,9}, -{53,16,10}, -{53,16,11}, -{53,16,12}, -{53,16,13}, -{53,16,14}, -{53,16,15}, -{53,16,16}, -{53,16,17}, -{53,16,18}, -{53,16,19}, -{53,16,20}, -{53,16,21}, -{53,16,22}, -{53,16,23}, -{53,16,24}, -{53,16,25}, -{53,16,26}, -{53,16,27}, -{53,16,28}, -{53,16,29}, -{53,16,30}, -{53,16,31}, -{53,16,32}, -{53,16,33}, -{53,16,34}, -{53,16,35}, -{53,16,36}, -{53,16,37}, -{53,16,38}, -{53,16,39}, -{53,16,40}, -{53,16,41}, -{53,16,42}, -{53,16,43}, -{53,16,44}, -{53,16,45}, -{53,16,46}, -{53,16,47}, -{53,16,48}, -{53,16,49}, -{53,16,50}, -{53,16,51}, -{53,16,52}, -{53,16,53}, -{53,16,54}, -{53,16,55}, -{53,16,56}, -{53,16,57}, -{53,16,58}, -{53,16,59}, -{53,17,-68}, -{53,17,-67}, -{53,17,-66}, -{53,17,-65}, -{53,17,-64}, -{53,17,-63}, -{53,17,-62}, -{53,17,-61}, -{53,17,-60}, -{53,17,-59}, -{53,17,-58}, -{53,17,-57}, -{53,17,-56}, -{53,17,-55}, -{53,17,-54}, -{53,17,-53}, -{53,17,-52}, -{53,17,-51}, -{53,17,-50}, -{53,17,-49}, -{53,17,-48}, -{53,17,-47}, -{53,17,-46}, -{53,17,-45}, -{53,17,-44}, -{53,17,-43}, -{53,17,-42}, -{53,17,-41}, -{53,17,-40}, -{53,17,-39}, -{53,17,-38}, -{53,17,-37}, -{53,17,-36}, -{53,17,-35}, -{53,17,-34}, -{53,17,-33}, -{53,17,-32}, -{53,17,-31}, -{53,17,-30}, -{53,17,-29}, -{53,17,-28}, -{53,17,-27}, -{53,17,-26}, -{53,17,-25}, -{53,17,-24}, -{53,17,-23}, -{53,17,-22}, -{53,17,-21}, -{53,17,-20}, -{53,17,-19}, -{53,17,-18}, -{53,17,-17}, -{53,17,-16}, -{53,17,-15}, -{53,17,-14}, -{53,17,-13}, -{53,17,-12}, -{53,17,-11}, -{53,17,-10}, -{53,17,-9}, -{53,17,-8}, -{53,17,-7}, -{53,17,-6}, -{53,17,-5}, -{53,17,-4}, -{53,17,-3}, -{53,17,-2}, -{53,17,-1}, -{53,17,0}, -{53,17,1}, -{53,17,2}, -{53,17,3}, -{53,17,4}, -{53,17,5}, -{53,17,6}, -{53,17,7}, -{53,17,8}, -{53,17,9}, -{53,17,10}, -{53,17,11}, -{53,17,12}, -{53,17,13}, -{53,17,14}, -{53,17,15}, -{53,17,16}, -{53,17,17}, -{53,17,18}, -{53,17,19}, -{53,17,20}, -{53,17,21}, -{53,17,22}, -{53,17,23}, -{53,17,24}, -{53,17,25}, -{53,17,26}, -{53,17,27}, -{53,17,28}, -{53,17,29}, -{53,17,30}, -{53,17,31}, -{53,17,32}, -{53,17,33}, -{53,17,34}, -{53,17,35}, -{53,17,36}, -{53,17,37}, -{53,17,38}, -{53,17,39}, -{53,17,40}, -{53,17,41}, -{53,17,42}, -{53,17,43}, -{53,17,44}, -{53,17,45}, -{53,17,46}, -{53,17,47}, -{53,17,48}, -{53,17,49}, -{53,17,50}, -{53,17,51}, -{53,17,52}, -{53,17,53}, -{53,17,54}, -{53,17,55}, -{53,17,56}, -{53,17,57}, -{53,17,58}, -{53,17,59}, -{53,17,60}, -{53,18,-69}, -{53,18,-68}, -{53,18,-67}, -{53,18,-66}, -{53,18,-65}, -{53,18,-64}, -{53,18,-63}, -{53,18,-62}, -{53,18,-61}, -{53,18,-60}, -{53,18,-59}, -{53,18,-58}, -{53,18,-57}, -{53,18,-56}, -{53,18,-55}, -{53,18,-54}, -{53,18,-53}, -{53,18,-52}, -{53,18,-51}, -{53,18,-50}, -{53,18,-49}, -{53,18,-48}, -{53,18,-47}, -{53,18,-46}, -{53,18,-45}, -{53,18,-44}, -{53,18,-43}, -{53,18,-42}, -{53,18,-41}, -{53,18,-40}, -{53,18,-39}, -{53,18,-38}, -{53,18,-37}, -{53,18,-36}, -{53,18,-35}, -{53,18,-34}, -{53,18,-33}, -{53,18,-32}, -{53,18,-31}, -{53,18,-30}, -{53,18,-29}, -{53,18,-28}, -{53,18,-27}, -{53,18,-26}, -{53,18,-25}, -{53,18,-24}, -{53,18,-23}, -{53,18,-22}, -{53,18,-21}, -{53,18,-20}, -{53,18,-19}, -{53,18,-18}, -{53,18,-17}, -{53,18,-16}, -{53,18,-15}, -{53,18,-14}, -{53,18,-13}, -{53,18,-12}, -{53,18,-11}, -{53,18,-10}, -{53,18,-9}, -{53,18,-8}, -{53,18,-7}, -{53,18,-6}, -{53,18,-5}, -{53,18,-4}, -{53,18,-3}, -{53,18,-2}, -{53,18,-1}, -{53,18,0}, -{53,18,1}, -{53,18,2}, -{53,18,3}, -{53,18,4}, -{53,18,5}, -{53,18,6}, -{53,18,7}, -{53,18,8}, -{53,18,9}, -{53,18,10}, -{53,18,11}, -{53,18,12}, -{53,18,13}, -{53,18,14}, -{53,18,15}, -{53,18,16}, -{53,18,17}, -{53,18,18}, -{53,18,19}, -{53,18,20}, -{53,18,21}, -{53,18,22}, -{53,18,23}, -{53,18,24}, -{53,18,25}, -{53,18,26}, -{53,18,27}, -{53,18,28}, -{53,18,29}, -{53,18,30}, -{53,18,31}, -{53,18,32}, -{53,18,33}, -{53,18,34}, -{53,18,35}, -{53,18,36}, -{53,18,37}, -{53,18,38}, -{53,18,39}, -{53,18,40}, -{53,18,41}, -{53,18,42}, -{53,18,43}, -{53,18,44}, -{53,18,45}, -{53,18,46}, -{53,18,47}, -{53,18,48}, -{53,18,49}, -{53,18,50}, -{53,18,51}, -{53,18,52}, -{53,18,53}, -{53,18,54}, -{53,18,55}, -{53,18,56}, -{53,18,57}, -{53,18,58}, -{53,18,59}, -{53,18,60}, -{53,19,-70}, -{53,19,-69}, -{53,19,-68}, -{53,19,-67}, -{53,19,-66}, -{53,19,-65}, -{53,19,-64}, -{53,19,-63}, -{53,19,-62}, -{53,19,-61}, -{53,19,-60}, -{53,19,-59}, -{53,19,-58}, -{53,19,-57}, -{53,19,-56}, -{53,19,-55}, -{53,19,-54}, -{53,19,-53}, -{53,19,-52}, -{53,19,-51}, -{53,19,-50}, -{53,19,-49}, -{53,19,-48}, -{53,19,-47}, -{53,19,-46}, -{53,19,-45}, -{53,19,-44}, -{53,19,-43}, -{53,19,-42}, -{53,19,-41}, -{53,19,-40}, -{53,19,-39}, -{53,19,-38}, -{53,19,-37}, -{53,19,-36}, -{53,19,-35}, -{53,19,-34}, -{53,19,-33}, -{53,19,-32}, -{53,19,-31}, -{53,19,-30}, -{53,19,-29}, -{53,19,-28}, -{53,19,-27}, -{53,19,-26}, -{53,19,-25}, -{53,19,-24}, -{53,19,-23}, -{53,19,-22}, -{53,19,-21}, -{53,19,-20}, -{53,19,-19}, -{53,19,-18}, -{53,19,-17}, -{53,19,-16}, -{53,19,-15}, -{53,19,-14}, -{53,19,-13}, -{53,19,-12}, -{53,19,-11}, -{53,19,-10}, -{53,19,-9}, -{53,19,-8}, -{53,19,-7}, -{53,19,-6}, -{53,19,-5}, -{53,19,-4}, -{53,19,-3}, -{53,19,-2}, -{53,19,-1}, -{53,19,0}, -{53,19,1}, -{53,19,2}, -{53,19,3}, -{53,19,4}, -{53,19,5}, -{53,19,6}, -{53,19,7}, -{53,19,8}, -{53,19,9}, -{53,19,10}, -{53,19,11}, -{53,19,12}, -{53,19,13}, -{53,19,14}, -{53,19,15}, -{53,19,16}, -{53,19,17}, -{53,19,18}, -{53,19,19}, -{53,19,20}, -{53,19,21}, -{53,19,22}, -{53,19,23}, -{53,19,24}, -{53,19,25}, -{53,19,26}, -{53,19,27}, -{53,19,28}, -{53,19,29}, -{53,19,30}, -{53,19,31}, -{53,19,32}, -{53,19,33}, -{53,19,34}, -{53,19,35}, -{53,19,36}, -{53,19,37}, -{53,19,38}, -{53,19,39}, -{53,19,40}, -{53,19,41}, -{53,19,42}, -{53,19,43}, -{53,19,44}, -{53,19,45}, -{53,19,46}, -{53,19,47}, -{53,19,48}, -{53,19,49}, -{53,19,50}, -{53,19,51}, -{53,19,52}, -{53,19,53}, -{53,19,54}, -{53,19,55}, -{53,19,56}, -{53,19,57}, -{53,19,58}, -{53,19,59}, -{53,19,60}, -{53,20,-71}, -{53,20,-70}, -{53,20,-69}, -{53,20,-68}, -{53,20,-67}, -{53,20,-66}, -{53,20,-65}, -{53,20,-64}, -{53,20,-63}, -{53,20,-62}, -{53,20,-61}, -{53,20,-60}, -{53,20,-59}, -{53,20,-58}, -{53,20,-57}, -{53,20,-56}, -{53,20,-55}, -{53,20,-54}, -{53,20,-53}, -{53,20,-52}, -{53,20,-51}, -{53,20,-50}, -{53,20,-49}, -{53,20,-48}, -{53,20,-47}, -{53,20,-46}, -{53,20,-45}, -{53,20,-44}, -{53,20,-43}, -{53,20,-42}, -{53,20,-41}, -{53,20,-40}, -{53,20,-39}, -{53,20,-38}, -{53,20,-37}, -{53,20,-36}, -{53,20,-35}, -{53,20,-34}, -{53,20,-33}, -{53,20,-32}, -{53,20,-31}, -{53,20,-30}, -{53,20,-29}, -{53,20,-28}, -{53,20,-27}, -{53,20,-26}, -{53,20,-25}, -{53,20,-24}, -{53,20,-23}, -{53,20,-22}, -{53,20,-21}, -{53,20,-20}, -{53,20,-19}, -{53,20,-18}, -{53,20,-17}, -{53,20,-16}, -{53,20,-15}, -{53,20,-14}, -{53,20,-13}, -{53,20,-12}, -{53,20,-11}, -{53,20,-10}, -{53,20,-9}, -{53,20,-8}, -{53,20,-7}, -{53,20,-6}, -{53,20,-5}, -{53,20,-4}, -{53,20,-3}, -{53,20,-2}, -{53,20,-1}, -{53,20,0}, -{53,20,1}, -{53,20,2}, -{53,20,3}, -{53,20,4}, -{53,20,5}, -{53,20,6}, -{53,20,7}, -{53,20,8}, -{53,20,9}, -{53,20,10}, -{53,20,11}, -{53,20,12}, -{53,20,13}, -{53,20,14}, -{53,20,15}, -{53,20,16}, -{53,20,17}, -{53,20,18}, -{53,20,19}, -{53,20,20}, -{53,20,21}, -{53,20,22}, -{53,20,23}, -{53,20,24}, -{53,20,25}, -{53,20,26}, -{53,20,27}, -{53,20,28}, -{53,20,29}, -{53,20,30}, -{53,20,31}, -{53,20,32}, -{53,20,33}, -{53,20,34}, -{53,20,35}, -{53,20,36}, -{53,20,37}, -{53,20,38}, -{53,20,39}, -{53,20,40}, -{53,20,41}, -{53,20,42}, -{53,20,43}, -{53,20,44}, -{53,20,45}, -{53,20,46}, -{53,20,47}, -{53,20,48}, -{53,20,49}, -{53,20,50}, -{53,20,51}, -{53,20,52}, -{53,20,53}, -{53,20,54}, -{53,20,55}, -{53,20,56}, -{53,20,57}, -{53,20,58}, -{53,20,59}, -{53,20,60}, -{53,21,-72}, -{53,21,-71}, -{53,21,-70}, -{53,21,-69}, -{53,21,-68}, -{53,21,-67}, -{53,21,-66}, -{53,21,-65}, -{53,21,-64}, -{53,21,-63}, -{53,21,-62}, -{53,21,-61}, -{53,21,-60}, -{53,21,-59}, -{53,21,-58}, -{53,21,-57}, -{53,21,-56}, -{53,21,-55}, -{53,21,-54}, -{53,21,-53}, -{53,21,-52}, -{53,21,-51}, -{53,21,-50}, -{53,21,-49}, -{53,21,-48}, -{53,21,-47}, -{53,21,-46}, -{53,21,-45}, -{53,21,-44}, -{53,21,-43}, -{53,21,-42}, -{53,21,-41}, -{53,21,-40}, -{53,21,-39}, -{53,21,-38}, -{53,21,-37}, -{53,21,-36}, -{53,21,-35}, -{53,21,-34}, -{53,21,-33}, -{53,21,-32}, -{53,21,-31}, -{53,21,-30}, -{53,21,-29}, -{53,21,-28}, -{53,21,-27}, -{53,21,-26}, -{53,21,-25}, -{53,21,-24}, -{53,21,-23}, -{53,21,-22}, -{53,21,-21}, -{53,21,-20}, -{53,21,-19}, -{53,21,-18}, -{53,21,-17}, -{53,21,-16}, -{53,21,-15}, -{53,21,-14}, -{53,21,-13}, -{53,21,-12}, -{53,21,-11}, -{53,21,-10}, -{53,21,-9}, -{53,21,-8}, -{53,21,-7}, -{53,21,-6}, -{53,21,-5}, -{53,21,-4}, -{53,21,-3}, -{53,21,-2}, -{53,21,-1}, -{53,21,0}, -{53,21,1}, -{53,21,2}, -{53,21,3}, -{53,21,4}, -{53,21,5}, -{53,21,6}, -{53,21,7}, -{53,21,8}, -{53,21,9}, -{53,21,10}, -{53,21,11}, -{53,21,12}, -{53,21,13}, -{53,21,14}, -{53,21,15}, -{53,21,16}, -{53,21,17}, -{53,21,18}, -{53,21,19}, -{53,21,20}, -{53,21,21}, -{53,21,22}, -{53,21,23}, -{53,21,24}, -{53,21,25}, -{53,21,26}, -{53,21,27}, -{53,21,28}, -{53,21,29}, -{53,21,30}, -{53,21,31}, -{53,21,32}, -{53,21,33}, -{53,21,34}, -{53,21,35}, -{53,21,36}, -{53,21,37}, -{53,21,38}, -{53,21,39}, -{53,21,40}, -{53,21,41}, -{53,21,42}, -{53,21,43}, -{53,21,44}, -{53,21,45}, -{53,21,46}, -{53,21,47}, -{53,21,48}, -{53,21,49}, -{53,21,50}, -{53,21,51}, -{53,21,52}, -{53,21,53}, -{53,21,54}, -{53,21,55}, -{53,21,56}, -{53,21,57}, -{53,21,58}, -{53,21,59}, -{53,21,60}, -{53,22,-73}, -{53,22,-72}, -{53,22,-71}, -{53,22,-70}, -{53,22,-69}, -{53,22,-68}, -{53,22,-67}, -{53,22,-66}, -{53,22,-65}, -{53,22,-64}, -{53,22,-63}, -{53,22,-62}, -{53,22,-61}, -{53,22,-60}, -{53,22,-59}, -{53,22,-58}, -{53,22,-57}, -{53,22,-56}, -{53,22,-55}, -{53,22,-54}, -{53,22,-53}, -{53,22,-52}, -{53,22,-51}, -{53,22,-50}, -{53,22,-49}, -{53,22,-48}, -{53,22,-47}, -{53,22,-46}, -{53,22,-45}, -{53,22,-44}, -{53,22,-43}, -{53,22,-42}, -{53,22,-41}, -{53,22,-40}, -{53,22,-39}, -{53,22,-38}, -{53,22,-37}, -{53,22,-36}, -{53,22,-35}, -{53,22,-34}, -{53,22,-33}, -{53,22,-32}, -{53,22,-31}, -{53,22,-30}, -{53,22,-29}, -{53,22,-28}, -{53,22,-27}, -{53,22,-26}, -{53,22,-25}, -{53,22,-24}, -{53,22,-23}, -{53,22,-22}, -{53,22,-21}, -{53,22,-20}, -{53,22,-19}, -{53,22,-18}, -{53,22,-17}, -{53,22,-16}, -{53,22,-15}, -{53,22,-14}, -{53,22,-13}, -{53,22,-12}, -{53,22,-11}, -{53,22,-10}, -{53,22,-9}, -{53,22,-8}, -{53,22,-7}, -{53,22,-6}, -{53,22,-5}, -{53,22,-4}, -{53,22,-3}, -{53,22,-2}, -{53,22,-1}, -{53,22,0}, -{53,22,1}, -{53,22,2}, -{53,22,3}, -{53,22,4}, -{53,22,5}, -{53,22,6}, -{53,22,7}, -{53,22,8}, -{53,22,9}, -{53,22,10}, -{53,22,11}, -{53,22,12}, -{53,22,13}, -{53,22,14}, -{53,22,15}, -{53,22,16}, -{53,22,17}, -{53,22,18}, -{53,22,19}, -{53,22,20}, -{53,22,21}, -{53,22,22}, -{53,22,23}, -{53,22,24}, -{53,22,25}, -{53,22,26}, -{53,22,27}, -{53,22,28}, -{53,22,29}, -{53,22,30}, -{53,22,31}, -{53,22,32}, -{53,22,33}, -{53,22,34}, -{53,22,35}, -{53,22,36}, -{53,22,37}, -{53,22,38}, -{53,22,39}, -{53,22,40}, -{53,22,41}, -{53,22,42}, -{53,22,43}, -{53,22,44}, -{53,22,45}, -{53,22,46}, -{53,22,47}, -{53,22,48}, -{53,22,49}, -{53,22,50}, -{53,22,51}, -{53,22,52}, -{53,22,53}, -{53,22,54}, -{53,22,55}, -{53,22,56}, -{53,22,57}, -{53,22,58}, -{53,22,59}, -{53,22,60}, -{53,23,-73}, -{53,23,-72}, -{53,23,-71}, -{53,23,-70}, -{53,23,-69}, -{53,23,-68}, -{53,23,-67}, -{53,23,-66}, -{53,23,-65}, -{53,23,-64}, -{53,23,-63}, -{53,23,-62}, -{53,23,-61}, -{53,23,-60}, -{53,23,-59}, -{53,23,-58}, -{53,23,-57}, -{53,23,-56}, -{53,23,-55}, -{53,23,-54}, -{53,23,-53}, -{53,23,-52}, -{53,23,-51}, -{53,23,-50}, -{53,23,-49}, -{53,23,-48}, -{53,23,-47}, -{53,23,-46}, -{53,23,-45}, -{53,23,-44}, -{53,23,-43}, -{53,23,-42}, -{53,23,-41}, -{53,23,-40}, -{53,23,-39}, -{53,23,-38}, -{53,23,-37}, -{53,23,-36}, -{53,23,-35}, -{53,23,-34}, -{53,23,-33}, -{53,23,-32}, -{53,23,-31}, -{53,23,-30}, -{53,23,-29}, -{53,23,-28}, -{53,23,-27}, -{53,23,-26}, -{53,23,-25}, -{53,23,-24}, -{53,23,-23}, -{53,23,-22}, -{53,23,-21}, -{53,23,-20}, -{53,23,-19}, -{53,23,-18}, -{53,23,-17}, -{53,23,-16}, -{53,23,-15}, -{53,23,-14}, -{53,23,-13}, -{53,23,-12}, -{53,23,-11}, -{53,23,-10}, -{53,23,-9}, -{53,23,-8}, -{53,23,-7}, -{53,23,-6}, -{53,23,-5}, -{53,23,-4}, -{53,23,-3}, -{53,23,-2}, -{53,23,-1}, -{53,23,0}, -{53,23,1}, -{53,23,2}, -{53,23,3}, -{53,23,4}, -{53,23,5}, -{53,23,6}, -{53,23,7}, -{53,23,8}, -{53,23,9}, -{53,23,10}, -{53,23,11}, -{53,23,12}, -{53,23,13}, -{53,23,14}, -{53,23,15}, -{53,23,16}, -{53,23,17}, -{53,23,18}, -{53,23,19}, -{53,23,20}, -{53,23,21}, -{53,23,22}, -{53,23,23}, -{53,23,24}, -{53,23,25}, -{53,23,26}, -{53,23,27}, -{53,23,28}, -{53,23,29}, -{53,23,30}, -{53,23,31}, -{53,23,32}, -{53,23,33}, -{53,23,34}, -{53,23,35}, -{53,23,36}, -{53,23,37}, -{53,23,38}, -{53,23,39}, -{53,23,40}, -{53,23,41}, -{53,23,42}, -{53,23,43}, -{53,23,44}, -{53,23,45}, -{53,23,46}, -{53,23,47}, -{53,23,48}, -{53,23,49}, -{53,23,50}, -{53,23,51}, -{53,23,52}, -{53,23,53}, -{53,23,54}, -{53,23,55}, -{53,23,56}, -{53,23,57}, -{53,23,58}, -{53,23,59}, -{53,23,60}, -{53,24,-73}, -{53,24,-72}, -{53,24,-71}, -{53,24,-70}, -{53,24,-69}, -{53,24,-68}, -{53,24,-67}, -{53,24,-66}, -{53,24,-65}, -{53,24,-64}, -{53,24,-63}, -{53,24,-62}, -{53,24,-61}, -{53,24,-60}, -{53,24,-59}, -{53,24,-58}, -{53,24,-57}, -{53,24,-56}, -{53,24,-55}, -{53,24,-54}, -{53,24,-53}, -{53,24,-52}, -{53,24,-51}, -{53,24,-50}, -{53,24,-49}, -{53,24,-48}, -{53,24,-47}, -{53,24,-46}, -{53,24,-45}, -{53,24,-44}, -{53,24,-43}, -{53,24,-42}, -{53,24,-41}, -{53,24,-40}, -{53,24,-39}, -{53,24,-38}, -{53,24,-37}, -{53,24,-36}, -{53,24,-35}, -{53,24,-34}, -{53,24,-33}, -{53,24,-32}, -{53,24,-31}, -{53,24,-30}, -{53,24,-29}, -{53,24,-28}, -{53,24,-27}, -{53,24,-26}, -{53,24,-25}, -{53,24,-24}, -{53,24,-23}, -{53,24,-22}, -{53,24,-21}, -{53,24,-20}, -{53,24,-19}, -{53,24,-18}, -{53,24,-17}, -{53,24,-16}, -{53,24,-15}, -{53,24,-14}, -{53,24,-13}, -{53,24,-12}, -{53,24,-11}, -{53,24,-10}, -{53,24,-9}, -{53,24,-8}, -{53,24,-7}, -{53,24,-6}, -{53,24,-5}, -{53,24,-4}, -{53,24,-3}, -{53,24,-2}, -{53,24,-1}, -{53,24,0}, -{53,24,1}, -{53,24,2}, -{53,24,3}, -{53,24,4}, -{53,24,5}, -{53,24,6}, -{53,24,7}, -{53,24,8}, -{53,24,9}, -{53,24,10}, -{53,24,11}, -{53,24,12}, -{53,24,13}, -{53,24,14}, -{53,24,15}, -{53,24,16}, -{53,24,17}, -{53,24,18}, -{53,24,19}, -{53,24,20}, -{53,24,21}, -{53,24,22}, -{53,24,23}, -{53,24,24}, -{53,24,25}, -{53,24,26}, -{53,24,27}, -{53,24,28}, -{53,24,29}, -{53,24,30}, -{53,24,31}, -{53,24,32}, -{53,24,33}, -{53,24,34}, -{53,24,35}, -{53,24,36}, -{53,24,37}, -{53,24,38}, -{53,24,39}, -{53,24,40}, -{53,24,41}, -{53,24,42}, -{53,24,43}, -{53,24,44}, -{53,24,45}, -{53,24,46}, -{53,24,47}, -{53,24,48}, -{53,24,49}, -{53,24,50}, -{53,24,51}, -{53,24,52}, -{53,24,53}, -{53,24,54}, -{53,24,55}, -{53,24,56}, -{53,24,57}, -{53,24,58}, -{53,24,59}, -{53,24,60}, -{53,25,-73}, -{53,25,-72}, -{53,25,-71}, -{53,25,-70}, -{53,25,-69}, -{53,25,-68}, -{53,25,-67}, -{53,25,-66}, -{53,25,-65}, -{53,25,-64}, -{53,25,-63}, -{53,25,-62}, -{53,25,-61}, -{53,25,-60}, -{53,25,-59}, -{53,25,-58}, -{53,25,-57}, -{53,25,-56}, -{53,25,-55}, -{53,25,-54}, -{53,25,-53}, -{53,25,-52}, -{53,25,-51}, -{53,25,-50}, -{53,25,-49}, -{53,25,-48}, -{53,25,-47}, -{53,25,-46}, -{53,25,-45}, -{53,25,-44}, -{53,25,-43}, -{53,25,-42}, -{53,25,-41}, -{53,25,-40}, -{53,25,-39}, -{53,25,-38}, -{53,25,-37}, -{53,25,-36}, -{53,25,-35}, -{53,25,-34}, -{53,25,-33}, -{53,25,-32}, -{53,25,-31}, -{53,25,-30}, -{53,25,-29}, -{53,25,-28}, -{53,25,-27}, -{53,25,-26}, -{53,25,-25}, -{53,25,-24}, -{53,25,-23}, -{53,25,-22}, -{53,25,-21}, -{53,25,-20}, -{53,25,-19}, -{53,25,-18}, -{53,25,-17}, -{53,25,-16}, -{53,25,-15}, -{53,25,-14}, -{53,25,-13}, -{53,25,-12}, -{53,25,-11}, -{53,25,-10}, -{53,25,-9}, -{53,25,-8}, -{53,25,-7}, -{53,25,-6}, -{53,25,-5}, -{53,25,-4}, -{53,25,-3}, -{53,25,-2}, -{53,25,-1}, -{53,25,0}, -{53,25,1}, -{53,25,2}, -{53,25,3}, -{53,25,4}, -{53,25,5}, -{53,25,6}, -{53,25,7}, -{53,25,8}, -{53,25,9}, -{53,25,10}, -{53,25,11}, -{53,25,12}, -{53,25,13}, -{53,25,14}, -{53,25,15}, -{53,25,16}, -{53,25,17}, -{53,25,18}, -{53,25,19}, -{53,25,20}, -{53,25,21}, -{53,25,22}, -{53,25,23}, -{53,25,24}, -{53,25,25}, -{53,25,26}, -{53,25,27}, -{53,25,28}, -{53,25,29}, -{53,25,30}, -{53,25,31}, -{53,25,32}, -{53,25,33}, -{53,25,34}, -{53,25,35}, -{53,25,36}, -{53,25,37}, -{53,25,38}, -{53,25,39}, -{53,25,40}, -{53,25,41}, -{53,25,42}, -{53,25,43}, -{53,25,44}, -{53,25,45}, -{53,25,46}, -{53,25,47}, -{53,25,48}, -{53,25,49}, -{53,25,50}, -{53,25,51}, -{53,25,52}, -{53,25,53}, -{53,25,54}, -{53,25,55}, -{53,25,56}, -{53,25,57}, -{53,25,58}, -{53,25,59}, -{53,25,60}, -{53,26,-73}, -{53,26,-72}, -{53,26,-71}, -{53,26,-70}, -{53,26,-69}, -{53,26,-68}, -{53,26,-67}, -{53,26,-66}, -{53,26,-65}, -{53,26,-64}, -{53,26,-63}, -{53,26,-62}, -{53,26,-61}, -{53,26,-60}, -{53,26,-59}, -{53,26,-58}, -{53,26,-57}, -{53,26,-56}, -{53,26,-55}, -{53,26,-54}, -{53,26,-53}, -{53,26,-52}, -{53,26,-51}, -{53,26,-50}, -{53,26,-49}, -{53,26,-48}, -{53,26,-47}, -{53,26,-46}, -{53,26,-45}, -{53,26,-44}, -{53,26,-43}, -{53,26,-42}, -{53,26,-41}, -{53,26,-40}, -{53,26,-39}, -{53,26,-38}, -{53,26,-37}, -{53,26,-36}, -{53,26,-35}, -{53,26,-34}, -{53,26,-33}, -{53,26,-32}, -{53,26,-31}, -{53,26,-30}, -{53,26,-29}, -{53,26,-28}, -{53,26,-27}, -{53,26,-26}, -{53,26,-25}, -{53,26,-24}, -{53,26,-23}, -{53,26,-22}, -{53,26,-21}, -{53,26,-20}, -{53,26,-19}, -{53,26,-18}, -{53,26,-17}, -{53,26,-16}, -{53,26,-15}, -{53,26,-14}, -{53,26,-13}, -{53,26,-12}, -{53,26,-11}, -{53,26,-10}, -{53,26,-9}, -{53,26,-8}, -{53,26,-7}, -{53,26,-6}, -{53,26,-5}, -{53,26,-4}, -{53,26,-3}, -{53,26,-2}, -{53,26,-1}, -{53,26,0}, -{53,26,1}, -{53,26,2}, -{53,26,3}, -{53,26,4}, -{53,26,5}, -{53,26,6}, -{53,26,7}, -{53,26,8}, -{53,26,9}, -{53,26,10}, -{53,26,11}, -{53,26,12}, -{53,26,13}, -{53,26,14}, -{53,26,15}, -{53,26,16}, -{53,26,17}, -{53,26,18}, -{53,26,19}, -{53,26,20}, -{53,26,21}, -{53,26,22}, -{53,26,23}, -{53,26,24}, -{53,26,25}, -{53,26,26}, -{53,26,27}, -{53,26,28}, -{53,26,29}, -{53,26,30}, -{53,26,31}, -{53,26,32}, -{53,26,33}, -{53,26,34}, -{53,26,35}, -{53,26,36}, -{53,26,37}, -{53,26,38}, -{53,26,39}, -{53,26,40}, -{53,26,41}, -{53,26,42}, -{53,26,43}, -{53,26,44}, -{53,26,45}, -{53,26,46}, -{53,26,47}, -{53,26,48}, -{53,26,49}, -{53,26,50}, -{53,26,51}, -{53,26,52}, -{53,26,53}, -{53,26,54}, -{53,26,55}, -{53,26,56}, -{53,26,57}, -{53,26,58}, -{53,26,59}, -{53,26,60}, -{53,27,-73}, -{53,27,-72}, -{53,27,-71}, -{53,27,-70}, -{53,27,-69}, -{53,27,-68}, -{53,27,-67}, -{53,27,-66}, -{53,27,-65}, -{53,27,-64}, -{53,27,-63}, -{53,27,-62}, -{53,27,-61}, -{53,27,-60}, -{53,27,-59}, -{53,27,-58}, -{53,27,-57}, -{53,27,-56}, -{53,27,-55}, -{53,27,-54}, -{53,27,-53}, -{53,27,-52}, -{53,27,-51}, -{53,27,-50}, -{53,27,-49}, -{53,27,-48}, -{53,27,-47}, -{53,27,-46}, -{53,27,-45}, -{53,27,-44}, -{53,27,-43}, -{53,27,-42}, -{53,27,-41}, -{53,27,-40}, -{53,27,-39}, -{53,27,-38}, -{53,27,-37}, -{53,27,-36}, -{53,27,-35}, -{53,27,-34}, -{53,27,-33}, -{53,27,-32}, -{53,27,-31}, -{53,27,-30}, -{53,27,-29}, -{53,27,-28}, -{53,27,-27}, -{53,27,-26}, -{53,27,-25}, -{53,27,-24}, -{53,27,-23}, -{53,27,-22}, -{53,27,-21}, -{53,27,-20}, -{53,27,-19}, -{53,27,-18}, -{53,27,-17}, -{53,27,-16}, -{53,27,-15}, -{53,27,-14}, -{53,27,-13}, -{53,27,-12}, -{53,27,-11}, -{53,27,-10}, -{53,27,-9}, -{53,27,-8}, -{53,27,-7}, -{53,27,-6}, -{53,27,-5}, -{53,27,-4}, -{53,27,-3}, -{53,27,-2}, -{53,27,-1}, -{53,27,0}, -{53,27,1}, -{53,27,2}, -{53,27,3}, -{53,27,4}, -{53,27,5}, -{53,27,6}, -{53,27,7}, -{53,27,8}, -{53,27,9}, -{53,27,10}, -{53,27,11}, -{53,27,12}, -{53,27,13}, -{53,27,14}, -{53,27,15}, -{53,27,16}, -{53,27,17}, -{53,27,18}, -{53,27,19}, -{53,27,20}, -{53,27,21}, -{53,27,22}, -{53,27,23}, -{53,27,24}, -{53,27,25}, -{53,27,26}, -{53,27,27}, -{53,27,28}, -{53,27,29}, -{53,27,30}, -{53,27,31}, -{53,27,32}, -{53,27,33}, -{53,27,34}, -{53,27,35}, -{53,27,36}, -{53,27,37}, -{53,27,38}, -{53,27,39}, -{53,27,40}, -{53,27,41}, -{53,27,42}, -{53,27,43}, -{53,27,44}, -{53,27,45}, -{53,27,46}, -{53,27,47}, -{53,27,48}, -{53,27,49}, -{53,27,50}, -{53,27,51}, -{53,27,52}, -{53,27,53}, -{53,27,54}, -{53,27,55}, -{53,27,56}, -{53,27,57}, -{53,27,58}, -{53,27,59}, -{53,27,60}, -{53,28,-73}, -{53,28,-72}, -{53,28,-71}, -{53,28,-70}, -{53,28,-69}, -{53,28,-68}, -{53,28,-67}, -{53,28,-66}, -{53,28,-65}, -{53,28,-64}, -{53,28,-63}, -{53,28,-62}, -{53,28,-61}, -{53,28,-60}, -{53,28,-59}, -{53,28,-58}, -{53,28,-57}, -{53,28,-56}, -{53,28,-55}, -{53,28,-54}, -{53,28,-53}, -{53,28,-52}, -{53,28,-51}, -{53,28,-50}, -{53,28,-49}, -{53,28,-48}, -{53,28,-47}, -{53,28,-46}, -{53,28,-45}, -{53,28,-44}, -{53,28,-43}, -{53,28,-42}, -{53,28,-41}, -{53,28,-40}, -{53,28,-39}, -{53,28,-38}, -{53,28,-37}, -{53,28,-36}, -{53,28,-35}, -{53,28,-34}, -{53,28,-33}, -{53,28,-32}, -{53,28,-31}, -{53,28,-30}, -{53,28,-29}, -{53,28,-28}, -{53,28,-27}, -{53,28,-26}, -{53,28,-25}, -{53,28,-24}, -{53,28,-23}, -{53,28,-22}, -{53,28,-21}, -{53,28,-20}, -{53,28,-19}, -{53,28,-18}, -{53,28,-17}, -{53,28,-16}, -{53,28,-15}, -{53,28,-14}, -{53,28,-13}, -{53,28,-12}, -{53,28,-11}, -{53,28,-10}, -{53,28,-9}, -{53,28,-8}, -{53,28,-7}, -{53,28,-6}, -{53,28,-5}, -{53,28,-4}, -{53,28,-3}, -{53,28,-2}, -{53,28,-1}, -{53,28,0}, -{53,28,1}, -{53,28,2}, -{53,28,3}, -{53,28,4}, -{53,28,5}, -{53,28,6}, -{53,28,7}, -{53,28,8}, -{53,28,9}, -{53,28,10}, -{53,28,11}, -{53,28,12}, -{53,28,13}, -{53,28,14}, -{53,28,15}, -{53,28,16}, -{53,28,17}, -{53,28,18}, -{53,28,19}, -{53,28,20}, -{53,28,21}, -{53,28,22}, -{53,28,23}, -{53,28,24}, -{53,28,25}, -{53,28,26}, -{53,28,27}, -{53,28,28}, -{53,28,29}, -{53,28,30}, -{53,28,31}, -{53,28,32}, -{53,28,33}, -{53,28,34}, -{53,28,35}, -{53,28,36}, -{53,28,37}, -{53,28,38}, -{53,28,39}, -{53,28,40}, -{53,28,41}, -{53,28,42}, -{53,28,43}, -{53,28,44}, -{53,28,45}, -{53,28,46}, -{53,28,47}, -{53,28,48}, -{53,28,49}, -{53,28,50}, -{53,28,51}, -{53,28,52}, -{53,28,53}, -{53,28,54}, -{53,28,55}, -{53,28,56}, -{53,28,57}, -{53,28,58}, -{53,28,59}, -{53,28,60}, -{53,29,-73}, -{53,29,-72}, -{53,29,-71}, -{53,29,-70}, -{53,29,-69}, -{53,29,-68}, -{53,29,-67}, -{53,29,-66}, -{53,29,-65}, -{53,29,-64}, -{53,29,-63}, -{53,29,-62}, -{53,29,-61}, -{53,29,-60}, -{53,29,-59}, -{53,29,-58}, -{53,29,-57}, -{53,29,-56}, -{53,29,-55}, -{53,29,-54}, -{53,29,-53}, -{53,29,-52}, -{53,29,-51}, -{53,29,-50}, -{53,29,-49}, -{53,29,-48}, -{53,29,-47}, -{53,29,-46}, -{53,29,-45}, -{53,29,-44}, -{53,29,-43}, -{53,29,-42}, -{53,29,-41}, -{53,29,-40}, -{53,29,-39}, -{53,29,-38}, -{53,29,-37}, -{53,29,-36}, -{53,29,-35}, -{53,29,-34}, -{53,29,-33}, -{53,29,-32}, -{53,29,-31}, -{53,29,-30}, -{53,29,-29}, -{53,29,-28}, -{53,29,-27}, -{53,29,-26}, -{53,29,-25}, -{53,29,-24}, -{53,29,-23}, -{53,29,-22}, -{53,29,-21}, -{53,29,-20}, -{53,29,-19}, -{53,29,-18}, -{53,29,-17}, -{53,29,-16}, -{53,29,-15}, -{53,29,-14}, -{53,29,-13}, -{53,29,-12}, -{53,29,-11}, -{53,29,-10}, -{53,29,-9}, -{53,29,-8}, -{53,29,-7}, -{53,29,-6}, -{53,29,-5}, -{53,29,-4}, -{53,29,-3}, -{53,29,-2}, -{53,29,-1}, -{53,29,0}, -{53,29,1}, -{53,29,2}, -{53,29,3}, -{53,29,4}, -{53,29,5}, -{53,29,6}, -{53,29,7}, -{53,29,8}, -{53,29,9}, -{53,29,10}, -{53,29,11}, -{53,29,12}, -{53,29,13}, -{53,29,14}, -{53,29,15}, -{53,29,16}, -{53,29,17}, -{53,29,18}, -{53,29,19}, -{53,29,20}, -{53,29,21}, -{53,29,22}, -{53,29,23}, -{53,29,24}, -{53,29,25}, -{53,29,26}, -{53,29,27}, -{53,29,28}, -{53,29,29}, -{53,29,30}, -{53,29,31}, -{53,29,32}, -{53,29,33}, -{53,29,34}, -{53,29,35}, -{53,29,36}, -{53,29,37}, -{53,29,38}, -{53,29,39}, -{53,29,40}, -{53,29,41}, -{53,29,42}, -{53,29,43}, -{53,29,44}, -{53,29,45}, -{53,29,46}, -{53,29,47}, -{53,29,48}, -{53,29,49}, -{53,29,50}, -{53,29,51}, -{53,29,52}, -{53,29,53}, -{53,29,54}, -{53,29,55}, -{53,29,56}, -{53,29,57}, -{53,29,58}, -{53,29,59}, -{53,29,60}, -{53,29,61}, -{53,30,-73}, -{53,30,-72}, -{53,30,-71}, -{53,30,-70}, -{53,30,-69}, -{53,30,-68}, -{53,30,-67}, -{53,30,-66}, -{53,30,-65}, -{53,30,-64}, -{53,30,-63}, -{53,30,-62}, -{53,30,-61}, -{53,30,-60}, -{53,30,-59}, -{53,30,-58}, -{53,30,-57}, -{53,30,-56}, -{53,30,-55}, -{53,30,-54}, -{53,30,-53}, -{53,30,-52}, -{53,30,-51}, -{53,30,-50}, -{53,30,-49}, -{53,30,-48}, -{53,30,-47}, -{53,30,-46}, -{53,30,-45}, -{53,30,-44}, -{53,30,-43}, -{53,30,-42}, -{53,30,-41}, -{53,30,-40}, -{53,30,-39}, -{53,30,-38}, -{53,30,-37}, -{53,30,-36}, -{53,30,-35}, -{53,30,-34}, -{53,30,-33}, -{53,30,-32}, -{53,30,-31}, -{53,30,-30}, -{53,30,-29}, -{53,30,-28}, -{53,30,-27}, -{53,30,-26}, -{53,30,-25}, -{53,30,-24}, -{53,30,-23}, -{53,30,-22}, -{53,30,-21}, -{53,30,-20}, -{53,30,-19}, -{53,30,-18}, -{53,30,-17}, -{53,30,-16}, -{53,30,-15}, -{53,30,-14}, -{53,30,-13}, -{53,30,-12}, -{53,30,-11}, -{53,30,-10}, -{53,30,-9}, -{53,30,-8}, -{53,30,-7}, -{53,30,-6}, -{53,30,-5}, -{53,30,-4}, -{53,30,-3}, -{53,30,-2}, -{53,30,-1}, -{53,30,0}, -{53,30,1}, -{53,30,2}, -{53,30,3}, -{53,30,4}, -{53,30,5}, -{53,30,6}, -{53,30,7}, -{53,30,8}, -{53,30,9}, -{53,30,10}, -{53,30,11}, -{53,30,12}, -{53,30,13}, -{53,30,14}, -{53,30,15}, -{53,30,16}, -{53,30,17}, -{53,30,18}, -{53,30,19}, -{53,30,20}, -{53,30,21}, -{53,30,22}, -{53,30,23}, -{53,30,24}, -{53,30,25}, -{53,30,26}, -{53,30,27}, -{53,30,28}, -{53,30,29}, -{53,30,30}, -{53,30,31}, -{53,30,32}, -{53,30,33}, -{53,30,34}, -{53,30,35}, -{53,30,36}, -{53,30,37}, -{53,30,38}, -{53,30,39}, -{53,30,40}, -{53,30,41}, -{53,30,42}, -{53,30,43}, -{53,30,44}, -{53,30,45}, -{53,30,46}, -{53,30,47}, -{53,30,48}, -{53,30,49}, -{53,30,50}, -{53,30,51}, -{53,30,52}, -{53,30,53}, -{53,30,54}, -{53,30,55}, -{53,30,56}, -{53,30,57}, -{53,30,58}, -{53,30,59}, -{53,30,60}, -{53,30,61}, -{53,31,-73}, -{53,31,-72}, -{53,31,-71}, -{53,31,-70}, -{53,31,-69}, -{53,31,-68}, -{53,31,-67}, -{53,31,-66}, -{53,31,-65}, -{53,31,-64}, -{53,31,-63}, -{53,31,-62}, -{53,31,-61}, -{53,31,-60}, -{53,31,-59}, -{53,31,-58}, -{53,31,-57}, -{53,31,-56}, -{53,31,-55}, -{53,31,-54}, -{53,31,-53}, -{53,31,-52}, -{53,31,-51}, -{53,31,-50}, -{53,31,-49}, -{53,31,-48}, -{53,31,-47}, -{53,31,-46}, -{53,31,-45}, -{53,31,-44}, -{53,31,-43}, -{53,31,-42}, -{53,31,-41}, -{53,31,-40}, -{53,31,-39}, -{53,31,-38}, -{53,31,-37}, -{53,31,-36}, -{53,31,-35}, -{53,31,-34}, -{53,31,-33}, -{53,31,-32}, -{53,31,-31}, -{53,31,-30}, -{53,31,-29}, -{53,31,-28}, -{53,31,-27}, -{53,31,-26}, -{53,31,-25}, -{53,31,-24}, -{53,31,-23}, -{53,31,-22}, -{53,31,-21}, -{53,31,-20}, -{53,31,-19}, -{53,31,-18}, -{53,31,-17}, -{53,31,-16}, -{53,31,-15}, -{53,31,-14}, -{53,31,-13}, -{53,31,-12}, -{53,31,-11}, -{53,31,-10}, -{53,31,-9}, -{53,31,-8}, -{53,31,-7}, -{53,31,-6}, -{53,31,-5}, -{53,31,-4}, -{53,31,-3}, -{53,31,-2}, -{53,31,-1}, -{53,31,0}, -{53,31,1}, -{53,31,2}, -{53,31,3}, -{53,31,4}, -{53,31,5}, -{53,31,6}, -{53,31,7}, -{53,31,8}, -{53,31,9}, -{53,31,10}, -{53,31,11}, -{53,31,12}, -{53,31,13}, -{53,31,14}, -{53,31,15}, -{53,31,16}, -{53,31,17}, -{53,31,18}, -{53,31,19}, -{53,31,20}, -{53,31,21}, -{53,31,22}, -{53,31,23}, -{53,31,24}, -{53,31,25}, -{53,31,26}, -{53,31,27}, -{53,31,28}, -{53,31,29}, -{53,31,30}, -{53,31,31}, -{53,31,32}, -{53,31,33}, -{53,31,34}, -{53,31,35}, -{53,31,36}, -{53,31,37}, -{53,31,38}, -{53,31,39}, -{53,31,40}, -{53,31,41}, -{53,31,42}, -{53,31,43}, -{53,31,44}, -{53,31,45}, -{53,31,46}, -{53,31,47}, -{53,31,48}, -{53,31,49}, -{53,31,50}, -{53,31,51}, -{53,31,52}, -{53,31,53}, -{53,31,54}, -{53,31,55}, -{53,31,56}, -{53,31,57}, -{53,31,58}, -{53,31,59}, -{53,31,60}, -{53,31,61}, -{53,32,-73}, -{53,32,-72}, -{53,32,-71}, -{53,32,-70}, -{53,32,-69}, -{53,32,-68}, -{53,32,-67}, -{53,32,-66}, -{53,32,-65}, -{53,32,-64}, -{53,32,-63}, -{53,32,-62}, -{53,32,-61}, -{53,32,-60}, -{53,32,-59}, -{53,32,-58}, -{53,32,-57}, -{53,32,-56}, -{53,32,-55}, -{53,32,-54}, -{53,32,-53}, -{53,32,-52}, -{53,32,-51}, -{53,32,-50}, -{53,32,-49}, -{53,32,-48}, -{53,32,-47}, -{53,32,-46}, -{53,32,-45}, -{53,32,-44}, -{53,32,-43}, -{53,32,-42}, -{53,32,-41}, -{53,32,-40}, -{53,32,-39}, -{53,32,-38}, -{53,32,-37}, -{53,32,-36}, -{53,32,-35}, -{53,32,-34}, -{53,32,-33}, -{53,32,-32}, -{53,32,-31}, -{53,32,-30}, -{53,32,-29}, -{53,32,-28}, -{53,32,-27}, -{53,32,-26}, -{53,32,-25}, -{53,32,-24}, -{53,32,-23}, -{53,32,-22}, -{53,32,-21}, -{53,32,-20}, -{53,32,-19}, -{53,32,-18}, -{53,32,-17}, -{53,32,-16}, -{53,32,-15}, -{53,32,-14}, -{53,32,-13}, -{53,32,-12}, -{53,32,-11}, -{53,32,-10}, -{53,32,-9}, -{53,32,-8}, -{53,32,-7}, -{53,32,-6}, -{53,32,-5}, -{53,32,-4}, -{53,32,-3}, -{53,32,-2}, -{53,32,-1}, -{53,32,0}, -{53,32,1}, -{53,32,2}, -{53,32,3}, -{53,32,4}, -{53,32,5}, -{53,32,6}, -{53,32,7}, -{53,32,8}, -{53,32,9}, -{53,32,10}, -{53,32,11}, -{53,32,12}, -{53,32,13}, -{53,32,14}, -{53,32,15}, -{53,32,16}, -{53,32,17}, -{53,32,18}, -{53,32,19}, -{53,32,20}, -{53,32,21}, -{53,32,22}, -{53,32,23}, -{53,32,24}, -{53,32,25}, -{53,32,26}, -{53,32,27}, -{53,32,28}, -{53,32,29}, -{53,32,30}, -{53,32,31}, -{53,32,32}, -{53,32,33}, -{53,32,34}, -{53,32,35}, -{53,32,36}, -{53,32,37}, -{53,32,38}, -{53,32,39}, -{53,32,40}, -{53,32,41}, -{53,32,42}, -{53,32,43}, -{53,32,44}, -{53,32,45}, -{53,32,46}, -{53,32,47}, -{53,32,48}, -{53,32,49}, -{53,32,50}, -{53,32,51}, -{53,32,52}, -{53,32,53}, -{53,32,54}, -{53,32,55}, -{53,32,56}, -{53,32,57}, -{53,32,58}, -{53,32,59}, -{53,32,60}, -{53,32,61}, -{53,33,-73}, -{53,33,-72}, -{53,33,-71}, -{53,33,-70}, -{53,33,-69}, -{53,33,-68}, -{53,33,-67}, -{53,33,-66}, -{53,33,-65}, -{53,33,-64}, -{53,33,-63}, -{53,33,-62}, -{53,33,-61}, -{53,33,-60}, -{53,33,-59}, -{53,33,-58}, -{53,33,-57}, -{53,33,-56}, -{53,33,-55}, -{53,33,-54}, -{53,33,-53}, -{53,33,-52}, -{53,33,-51}, -{53,33,-50}, -{53,33,-49}, -{53,33,-48}, -{53,33,-47}, -{53,33,-46}, -{53,33,-45}, -{53,33,-44}, -{53,33,-43}, -{53,33,-42}, -{53,33,-41}, -{53,33,-40}, -{53,33,-39}, -{53,33,-38}, -{53,33,-37}, -{53,33,-36}, -{53,33,-35}, -{53,33,-34}, -{53,33,-33}, -{53,33,-32}, -{53,33,-31}, -{53,33,-30}, -{53,33,-29}, -{53,33,-28}, -{53,33,-27}, -{53,33,-26}, -{53,33,-25}, -{53,33,-24}, -{53,33,-23}, -{53,33,-22}, -{53,33,-21}, -{53,33,-20}, -{53,33,-19}, -{53,33,-18}, -{53,33,-17}, -{53,33,-16}, -{53,33,-15}, -{53,33,-14}, -{53,33,-13}, -{53,33,-12}, -{53,33,-11}, -{53,33,-10}, -{53,33,-9}, -{53,33,-8}, -{53,33,-7}, -{53,33,-6}, -{53,33,-5}, -{53,33,-4}, -{53,33,-3}, -{53,33,-2}, -{53,33,-1}, -{53,33,0}, -{53,33,1}, -{53,33,2}, -{53,33,3}, -{53,33,4}, -{53,33,5}, -{53,33,6}, -{53,33,7}, -{53,33,8}, -{53,33,9}, -{53,33,10}, -{53,33,11}, -{53,33,12}, -{53,33,13}, -{53,33,14}, -{53,33,15}, -{53,33,16}, -{53,33,17}, -{53,33,18}, -{53,33,19}, -{53,33,20}, -{53,33,21}, -{53,33,22}, -{53,33,23}, -{53,33,24}, -{53,33,25}, -{53,33,26}, -{53,33,27}, -{53,33,28}, -{53,33,29}, -{53,33,30}, -{53,33,31}, -{53,33,32}, -{53,33,33}, -{53,33,34}, -{53,33,35}, -{53,33,36}, -{53,33,37}, -{53,33,38}, -{53,33,39}, -{53,33,40}, -{53,33,41}, -{53,33,42}, -{53,33,43}, -{53,33,44}, -{53,33,45}, -{53,33,46}, -{53,33,47}, -{53,33,48}, -{53,33,49}, -{53,33,50}, -{53,33,51}, -{53,33,52}, -{53,33,53}, -{53,33,54}, -{53,33,55}, -{53,33,56}, -{53,33,57}, -{53,33,58}, -{53,33,59}, -{53,33,60}, -{53,33,61}, -{53,34,-73}, -{53,34,-72}, -{53,34,-71}, -{53,34,-70}, -{53,34,-69}, -{53,34,-68}, -{53,34,-67}, -{53,34,-66}, -{53,34,-65}, -{53,34,-64}, -{53,34,-63}, -{53,34,-62}, -{53,34,-61}, -{53,34,-60}, -{53,34,-59}, -{53,34,-58}, -{53,34,-57}, -{53,34,-56}, -{53,34,-55}, -{53,34,-54}, -{53,34,-53}, -{53,34,-52}, -{53,34,-51}, -{53,34,-50}, -{53,34,-49}, -{53,34,-48}, -{53,34,-47}, -{53,34,-46}, -{53,34,-45}, -{53,34,-44}, -{53,34,-43}, -{53,34,-42}, -{53,34,-41}, -{53,34,-40}, -{53,34,-39}, -{53,34,-38}, -{53,34,-37}, -{53,34,-36}, -{53,34,-35}, -{53,34,-34}, -{53,34,-33}, -{53,34,-32}, -{53,34,-31}, -{53,34,-30}, -{53,34,-29}, -{53,34,-28}, -{53,34,-27}, -{53,34,-26}, -{53,34,-25}, -{53,34,-24}, -{53,34,-23}, -{53,34,-22}, -{53,34,-21}, -{53,34,-20}, -{53,34,-19}, -{53,34,-18}, -{53,34,-17}, -{53,34,-16}, -{53,34,-15}, -{53,34,-14}, -{53,34,-13}, -{53,34,-12}, -{53,34,-11}, -{53,34,-10}, -{53,34,-9}, -{53,34,-8}, -{53,34,-7}, -{53,34,-6}, -{53,34,-5}, -{53,34,-4}, -{53,34,-3}, -{53,34,-2}, -{53,34,-1}, -{53,34,0}, -{53,34,1}, -{53,34,2}, -{53,34,3}, -{53,34,4}, -{53,34,5}, -{53,34,6}, -{53,34,7}, -{53,34,8}, -{53,34,9}, -{53,34,10}, -{53,34,11}, -{53,34,12}, -{53,34,13}, -{53,34,14}, -{53,34,15}, -{53,34,16}, -{53,34,17}, -{53,34,18}, -{53,34,19}, -{53,34,20}, -{53,34,21}, -{53,34,22}, -{53,34,23}, -{53,34,24}, -{53,34,25}, -{53,34,26}, -{53,34,27}, -{53,34,28}, -{53,34,29}, -{53,34,30}, -{53,34,31}, -{53,34,32}, -{53,34,33}, -{53,34,34}, -{53,34,35}, -{53,34,36}, -{53,34,37}, -{53,34,38}, -{53,34,39}, -{53,34,40}, -{53,34,41}, -{53,34,42}, -{53,34,43}, -{53,34,44}, -{53,34,45}, -{53,34,46}, -{53,34,47}, -{53,34,48}, -{53,34,49}, -{53,34,50}, -{53,34,51}, -{53,34,52}, -{53,34,53}, -{53,34,54}, -{53,34,55}, -{53,34,56}, -{53,34,57}, -{53,34,58}, -{53,34,59}, -{53,34,60}, -{53,34,61}, -{53,35,-73}, -{53,35,-72}, -{53,35,-71}, -{53,35,-70}, -{53,35,-69}, -{53,35,-68}, -{53,35,-67}, -{53,35,-66}, -{53,35,-65}, -{53,35,-64}, -{53,35,-63}, -{53,35,-62}, -{53,35,-61}, -{53,35,-60}, -{53,35,-59}, -{53,35,-58}, -{53,35,-57}, -{53,35,-56}, -{53,35,-55}, -{53,35,-54}, -{53,35,-53}, -{53,35,-52}, -{53,35,-51}, -{53,35,-50}, -{53,35,-49}, -{53,35,-48}, -{53,35,-47}, -{53,35,-46}, -{53,35,-45}, -{53,35,-44}, -{53,35,-43}, -{53,35,-42}, -{53,35,-41}, -{53,35,-40}, -{53,35,-39}, -{53,35,-38}, -{53,35,-37}, -{53,35,-36}, -{53,35,-35}, -{53,35,-34}, -{53,35,-33}, -{53,35,-32}, -{53,35,-31}, -{53,35,-30}, -{53,35,-29}, -{53,35,-28}, -{53,35,-27}, -{53,35,-26}, -{53,35,-25}, -{53,35,-24}, -{53,35,-23}, -{53,35,-22}, -{53,35,-21}, -{53,35,-20}, -{53,35,-19}, -{53,35,-18}, -{53,35,-17}, -{53,35,-16}, -{53,35,-15}, -{53,35,-14}, -{53,35,-13}, -{53,35,-12}, -{53,35,-11}, -{53,35,-10}, -{53,35,-9}, -{53,35,-8}, -{53,35,-7}, -{53,35,-6}, -{53,35,-5}, -{53,35,-4}, -{53,35,-3}, -{53,35,-2}, -{53,35,-1}, -{53,35,0}, -{53,35,1}, -{53,35,2}, -{53,35,3}, -{53,35,4}, -{53,35,5}, -{53,35,6}, -{53,35,7}, -{53,35,8}, -{53,35,9}, -{53,35,10}, -{53,35,11}, -{53,35,12}, -{53,35,13}, -{53,35,14}, -{53,35,15}, -{53,35,16}, -{53,35,17}, -{53,35,18}, -{53,35,19}, -{53,35,20}, -{53,35,21}, -{53,35,22}, -{53,35,23}, -{53,35,24}, -{53,35,25}, -{53,35,26}, -{53,35,27}, -{53,35,28}, -{53,35,29}, -{53,35,30}, -{53,35,31}, -{53,35,32}, -{53,35,33}, -{53,35,34}, -{53,35,35}, -{53,35,36}, -{53,35,37}, -{53,35,38}, -{53,35,39}, -{53,35,40}, -{53,35,41}, -{53,35,42}, -{53,35,43}, -{53,35,44}, -{53,35,45}, -{53,35,46}, -{53,35,47}, -{53,35,48}, -{53,35,49}, -{53,35,50}, -{53,35,51}, -{53,35,52}, -{53,35,53}, -{53,35,54}, -{53,35,55}, -{53,35,56}, -{53,35,57}, -{53,35,58}, -{53,35,59}, -{53,35,60}, -{53,35,61}, -{53,36,-73}, -{53,36,-72}, -{53,36,-71}, -{53,36,-70}, -{53,36,-69}, -{53,36,-68}, -{53,36,-67}, -{53,36,-66}, -{53,36,-65}, -{53,36,-64}, -{53,36,-63}, -{53,36,-62}, -{53,36,-61}, -{53,36,-60}, -{53,36,-59}, -{53,36,-58}, -{53,36,-57}, -{53,36,-56}, -{53,36,-55}, -{53,36,-54}, -{53,36,-53}, -{53,36,-52}, -{53,36,-51}, -{53,36,-50}, -{53,36,-49}, -{53,36,-48}, -{53,36,-47}, -{53,36,-46}, -{53,36,-45}, -{53,36,-44}, -{53,36,-43}, -{53,36,-42}, -{53,36,-41}, -{53,36,-40}, -{53,36,-39}, -{53,36,-38}, -{53,36,-37}, -{53,36,-36}, -{53,36,-35}, -{53,36,-34}, -{53,36,-33}, -{53,36,-32}, -{53,36,-31}, -{53,36,-30}, -{53,36,-29}, -{53,36,-28}, -{53,36,-27}, -{53,36,-26}, -{53,36,-25}, -{53,36,-24}, -{53,36,-23}, -{53,36,-22}, -{53,36,-21}, -{53,36,-20}, -{53,36,-19}, -{53,36,-18}, -{53,36,-17}, -{53,36,-16}, -{53,36,-15}, -{53,36,-14}, -{53,36,-13}, -{53,36,-12}, -{53,36,-11}, -{53,36,-10}, -{53,36,-9}, -{53,36,-8}, -{53,36,-7}, -{53,36,-6}, -{53,36,-5}, -{53,36,-4}, -{53,36,-3}, -{53,36,-2}, -{53,36,-1}, -{53,36,0}, -{53,36,1}, -{53,36,2}, -{53,36,3}, -{53,36,4}, -{53,36,5}, -{53,36,6}, -{53,36,7}, -{53,36,8}, -{53,36,9}, -{53,36,10}, -{53,36,11}, -{53,36,12}, -{53,36,13}, -{53,36,14}, -{53,36,15}, -{53,36,16}, -{53,36,17}, -{53,36,18}, -{53,36,19}, -{53,36,20}, -{53,36,21}, -{53,36,22}, -{53,36,23}, -{53,36,24}, -{53,36,25}, -{53,36,26}, -{53,36,27}, -{53,36,28}, -{53,36,29}, -{53,36,30}, -{53,36,31}, -{53,36,32}, -{53,36,33}, -{53,36,34}, -{53,36,35}, -{53,36,36}, -{53,36,37}, -{53,36,38}, -{53,36,39}, -{53,36,40}, -{53,36,41}, -{53,36,42}, -{53,36,43}, -{53,36,44}, -{53,36,45}, -{53,36,46}, -{53,36,47}, -{53,36,48}, -{53,36,49}, -{53,36,50}, -{53,36,51}, -{53,36,52}, -{53,36,53}, -{53,36,54}, -{53,36,55}, -{53,36,56}, -{53,36,57}, -{53,36,58}, -{53,36,59}, -{53,36,60}, -{53,36,61}, -{53,37,-73}, -{53,37,-72}, -{53,37,-71}, -{53,37,-70}, -{53,37,-69}, -{53,37,-68}, -{53,37,-67}, -{53,37,-66}, -{53,37,-65}, -{53,37,-64}, -{53,37,-63}, -{53,37,-62}, -{53,37,-61}, -{53,37,-60}, -{53,37,-59}, -{53,37,-58}, -{53,37,-57}, -{53,37,-56}, -{53,37,-55}, -{53,37,-54}, -{53,37,-53}, -{53,37,-52}, -{53,37,-51}, -{53,37,-50}, -{53,37,-49}, -{53,37,-48}, -{53,37,-47}, -{53,37,-46}, -{53,37,-45}, -{53,37,-44}, -{53,37,-43}, -{53,37,-42}, -{53,37,-41}, -{53,37,-40}, -{53,37,-39}, -{53,37,-38}, -{53,37,-37}, -{53,37,-36}, -{53,37,-35}, -{53,37,-34}, -{53,37,-33}, -{53,37,-32}, -{53,37,-31}, -{53,37,-30}, -{53,37,-29}, -{53,37,-28}, -{53,37,-27}, -{53,37,-26}, -{53,37,-25}, -{53,37,-24}, -{53,37,-23}, -{53,37,-22}, -{53,37,-21}, -{53,37,-20}, -{53,37,-19}, -{53,37,-18}, -{53,37,-17}, -{53,37,-16}, -{53,37,-15}, -{53,37,-14}, -{53,37,-13}, -{53,37,-12}, -{53,37,-11}, -{53,37,-10}, -{53,37,-9}, -{53,37,-8}, -{53,37,-7}, -{53,37,-6}, -{53,37,-5}, -{53,37,-4}, -{53,37,-3}, -{53,37,-2}, -{53,37,-1}, -{53,37,0}, -{53,37,1}, -{53,37,2}, -{53,37,3}, -{53,37,4}, -{53,37,5}, -{53,37,6}, -{53,37,7}, -{53,37,8}, -{53,37,9}, -{53,37,10}, -{53,37,11}, -{53,37,12}, -{53,37,13}, -{53,37,14}, -{53,37,15}, -{53,37,16}, -{53,37,17}, -{53,37,18}, -{53,37,19}, -{53,37,20}, -{53,37,21}, -{53,37,22}, -{53,37,23}, -{53,37,24}, -{53,37,25}, -{53,37,26}, -{53,37,27}, -{53,37,28}, -{53,37,29}, -{53,37,30}, -{53,37,31}, -{53,37,32}, -{53,37,33}, -{53,37,34}, -{53,37,35}, -{53,37,36}, -{53,37,37}, -{53,37,38}, -{53,37,39}, -{53,37,40}, -{53,37,41}, -{53,37,42}, -{53,37,43}, -{53,37,44}, -{53,37,45}, -{53,37,46}, -{53,37,47}, -{53,37,48}, -{53,37,49}, -{53,37,50}, -{53,37,51}, -{53,37,52}, -{53,37,53}, -{53,37,54}, -{53,37,55}, -{53,37,56}, -{53,37,57}, -{53,37,58}, -{53,37,59}, -{53,37,60}, -{53,37,61}, -{53,38,-73}, -{53,38,-72}, -{53,38,-71}, -{53,38,-70}, -{53,38,-69}, -{53,38,-68}, -{53,38,-67}, -{53,38,-66}, -{53,38,-65}, -{53,38,-64}, -{53,38,-63}, -{53,38,-62}, -{53,38,-61}, -{53,38,-60}, -{53,38,-59}, -{53,38,-58}, -{53,38,-57}, -{53,38,-56}, -{53,38,-55}, -{53,38,-54}, -{53,38,-53}, -{53,38,-52}, -{53,38,-51}, -{53,38,-50}, -{53,38,-49}, -{53,38,-48}, -{53,38,-47}, -{53,38,-46}, -{53,38,-45}, -{53,38,-44}, -{53,38,-43}, -{53,38,-42}, -{53,38,-41}, -{53,38,-40}, -{53,38,-39}, -{53,38,-38}, -{53,38,-37}, -{53,38,-36}, -{53,38,-35}, -{53,38,-34}, -{53,38,-33}, -{53,38,-32}, -{53,38,-31}, -{53,38,-30}, -{53,38,-29}, -{53,38,-28}, -{53,38,-27}, -{53,38,-26}, -{53,38,-25}, -{53,38,-24}, -{53,38,-23}, -{53,38,-22}, -{53,38,-21}, -{53,38,-20}, -{53,38,-19}, -{53,38,-18}, -{53,38,-17}, -{53,38,-16}, -{53,38,-15}, -{53,38,-14}, -{53,38,-13}, -{53,38,-12}, -{53,38,-11}, -{53,38,-10}, -{53,38,-9}, -{53,38,-8}, -{53,38,-7}, -{53,38,-6}, -{53,38,-5}, -{53,38,-4}, -{53,38,-3}, -{53,38,-2}, -{53,38,-1}, -{53,38,0}, -{53,38,1}, -{53,38,2}, -{53,38,3}, -{53,38,4}, -{53,38,5}, -{53,38,6}, -{53,38,7}, -{53,38,8}, -{53,38,9}, -{53,38,10}, -{53,38,11}, -{53,38,12}, -{53,38,13}, -{53,38,14}, -{53,38,15}, -{53,38,16}, -{53,38,17}, -{53,38,18}, -{53,38,19}, -{53,38,20}, -{53,38,21}, -{53,38,22}, -{53,38,23}, -{53,38,24}, -{53,38,25}, -{53,38,26}, -{53,38,27}, -{53,38,28}, -{53,38,29}, -{53,38,30}, -{53,38,31}, -{53,38,32}, -{53,38,33}, -{53,38,34}, -{53,38,35}, -{53,38,36}, -{53,38,37}, -{53,38,38}, -{53,38,39}, -{53,38,40}, -{53,38,41}, -{53,38,42}, -{53,38,43}, -{53,38,44}, -{53,38,45}, -{53,38,46}, -{53,38,47}, -{53,38,48}, -{53,38,49}, -{53,38,50}, -{53,38,51}, -{53,38,52}, -{53,38,53}, -{53,38,54}, -{53,38,55}, -{53,38,56}, -{53,38,57}, -{53,38,58}, -{53,38,59}, -{53,38,60}, -{53,38,61}, -{53,39,-73}, -{53,39,-72}, -{53,39,-71}, -{53,39,-70}, -{53,39,-69}, -{53,39,-68}, -{53,39,-67}, -{53,39,-66}, -{53,39,-65}, -{53,39,-64}, -{53,39,-63}, -{53,39,-62}, -{53,39,-61}, -{53,39,-60}, -{53,39,-59}, -{53,39,-58}, -{53,39,-57}, -{53,39,-56}, -{53,39,-55}, -{53,39,-54}, -{53,39,-53}, -{53,39,-52}, -{53,39,-51}, -{53,39,-50}, -{53,39,-49}, -{53,39,-48}, -{53,39,-47}, -{53,39,-46}, -{53,39,-45}, -{53,39,-44}, -{53,39,-43}, -{53,39,-42}, -{53,39,-41}, -{53,39,-40}, -{53,39,-39}, -{53,39,-38}, -{53,39,-37}, -{53,39,-36}, -{53,39,-35}, -{53,39,-34}, -{53,39,-33}, -{53,39,-32}, -{53,39,-31}, -{53,39,-30}, -{53,39,-29}, -{53,39,-28}, -{53,39,-27}, -{53,39,-26}, -{53,39,-25}, -{53,39,-24}, -{53,39,-23}, -{53,39,-22}, -{53,39,-21}, -{53,39,-20}, -{53,39,-19}, -{53,39,-18}, -{53,39,-17}, -{53,39,-16}, -{53,39,-15}, -{53,39,-14}, -{53,39,-13}, -{53,39,-12}, -{53,39,-11}, -{53,39,-10}, -{53,39,-9}, -{53,39,-8}, -{53,39,-7}, -{53,39,-6}, -{53,39,-5}, -{53,39,-4}, -{53,39,-3}, -{53,39,-2}, -{53,39,-1}, -{53,39,0}, -{53,39,1}, -{53,39,2}, -{53,39,3}, -{53,39,4}, -{53,39,5}, -{53,39,6}, -{53,39,7}, -{53,39,8}, -{53,39,9}, -{53,39,10}, -{53,39,11}, -{53,39,12}, -{53,39,13}, -{53,39,14}, -{53,39,15}, -{53,39,16}, -{53,39,17}, -{53,39,18}, -{53,39,19}, -{53,39,20}, -{53,39,21}, -{53,39,22}, -{53,39,23}, -{53,39,24}, -{53,39,25}, -{53,39,26}, -{53,39,27}, -{53,39,28}, -{53,39,29}, -{53,39,30}, -{53,39,31}, -{53,39,32}, -{53,39,33}, -{53,39,34}, -{53,39,35}, -{53,39,36}, -{53,39,37}, -{53,39,38}, -{53,39,39}, -{53,39,40}, -{53,39,41}, -{53,39,42}, -{53,39,43}, -{53,39,44}, -{53,39,45}, -{53,39,46}, -{53,39,47}, -{53,39,48}, -{53,39,49}, -{53,39,50}, -{53,39,51}, -{53,39,52}, -{53,39,53}, -{53,39,54}, -{53,39,55}, -{53,39,56}, -{53,39,57}, -{53,39,58}, -{53,39,59}, -{53,39,60}, -{53,39,61}, -{53,39,62}, -{53,40,-73}, -{53,40,-72}, -{53,40,-71}, -{53,40,-70}, -{53,40,-69}, -{53,40,-68}, -{53,40,-67}, -{53,40,-66}, -{53,40,-65}, -{53,40,-64}, -{53,40,-63}, -{53,40,-62}, -{53,40,-61}, -{53,40,-60}, -{53,40,-59}, -{53,40,-58}, -{53,40,-57}, -{53,40,-56}, -{53,40,-55}, -{53,40,-54}, -{53,40,-53}, -{53,40,-52}, -{53,40,-51}, -{53,40,-50}, -{53,40,-49}, -{53,40,-48}, -{53,40,-47}, -{53,40,-46}, -{53,40,-45}, -{53,40,-44}, -{53,40,-43}, -{53,40,-42}, -{53,40,-41}, -{53,40,-40}, -{53,40,-39}, -{53,40,-38}, -{53,40,-37}, -{53,40,-36}, -{53,40,-35}, -{53,40,-34}, -{53,40,-33}, -{53,40,-32}, -{53,40,-31}, -{53,40,-30}, -{53,40,-29}, -{53,40,-28}, -{53,40,-27}, -{53,40,-26}, -{53,40,-25}, -{53,40,-24}, -{53,40,-23}, -{53,40,-22}, -{53,40,-21}, -{53,40,-20}, -{53,40,-19}, -{53,40,-18}, -{53,40,-17}, -{53,40,-16}, -{53,40,-15}, -{53,40,-14}, -{53,40,-13}, -{53,40,-12}, -{53,40,-11}, -{53,40,-10}, -{53,40,-9}, -{53,40,-8}, -{53,40,-7}, -{53,40,-6}, -{53,40,-5}, -{53,40,-4}, -{53,40,-3}, -{53,40,-2}, -{53,40,-1}, -{53,40,0}, -{53,40,1}, -{53,40,2}, -{53,40,3}, -{53,40,4}, -{53,40,5}, -{53,40,6}, -{53,40,7}, -{53,40,8}, -{53,40,9}, -{53,40,10}, -{53,40,11}, -{53,40,12}, -{53,40,13}, -{53,40,14}, -{53,40,15}, -{53,40,16}, -{53,40,17}, -{53,40,18}, -{53,40,19}, -{53,40,20}, -{53,40,21}, -{53,40,22}, -{53,40,23}, -{53,40,24}, -{53,40,25}, -{53,40,26}, -{53,40,27}, -{53,40,28}, -{53,40,29}, -{53,40,30}, -{53,40,31}, -{53,40,32}, -{53,40,33}, -{53,40,34}, -{53,40,35}, -{53,40,36}, -{53,40,37}, -{53,40,38}, -{53,40,39}, -{53,40,40}, -{53,40,41}, -{53,40,42}, -{53,40,43}, -{53,40,44}, -{53,40,45}, -{53,40,46}, -{53,40,47}, -{53,40,48}, -{53,40,49}, -{53,40,50}, -{53,40,51}, -{53,40,52}, -{53,40,53}, -{53,40,54}, -{53,40,55}, -{53,40,56}, -{53,40,57}, -{53,40,58}, -{53,40,59}, -{53,40,60}, -{53,40,61}, -{53,40,62}, -{53,41,-73}, -{53,41,-72}, -{53,41,-71}, -{53,41,-70}, -{53,41,-69}, -{53,41,-68}, -{53,41,-67}, -{53,41,-66}, -{53,41,-65}, -{53,41,-64}, -{53,41,-63}, -{53,41,-62}, -{53,41,-61}, -{53,41,-60}, -{53,41,-59}, -{53,41,-58}, -{53,41,-57}, -{53,41,-56}, -{53,41,-55}, -{53,41,-54}, -{53,41,-53}, -{53,41,-52}, -{53,41,-51}, -{53,41,-50}, -{53,41,-49}, -{53,41,-48}, -{53,41,-47}, -{53,41,-46}, -{53,41,-45}, -{53,41,-44}, -{53,41,-43}, -{53,41,-42}, -{53,41,-41}, -{53,41,-40}, -{53,41,-39}, -{53,41,-38}, -{53,41,-37}, -{53,41,-36}, -{53,41,-35}, -{53,41,-34}, -{53,41,-33}, -{53,41,-32}, -{53,41,-31}, -{53,41,-30}, -{53,41,-29}, -{53,41,-28}, -{53,41,-27}, -{53,41,-26}, -{53,41,-25}, -{53,41,-24}, -{53,41,-23}, -{53,41,-22}, -{53,41,-21}, -{53,41,-20}, -{53,41,-19}, -{53,41,-18}, -{53,41,-17}, -{53,41,-16}, -{53,41,-15}, -{53,41,-14}, -{53,41,-13}, -{53,41,-12}, -{53,41,-11}, -{53,41,-10}, -{53,41,-9}, -{53,41,-8}, -{53,41,-7}, -{53,41,-6}, -{53,41,-5}, -{53,41,-4}, -{53,41,-3}, -{53,41,-2}, -{53,41,-1}, -{53,41,0}, -{53,41,1}, -{53,41,2}, -{53,41,3}, -{53,41,4}, -{53,41,5}, -{53,41,6}, -{53,41,7}, -{53,41,8}, -{53,41,9}, -{53,41,10}, -{53,41,11}, -{53,41,12}, -{53,41,13}, -{53,41,14}, -{53,41,15}, -{53,41,16}, -{53,41,17}, -{53,41,18}, -{53,41,19}, -{53,41,20}, -{53,41,21}, -{53,41,22}, -{53,41,23}, -{53,41,24}, -{53,41,25}, -{53,41,26}, -{53,41,27}, -{53,41,28}, -{53,41,29}, -{53,41,30}, -{53,41,31}, -{53,41,32}, -{53,41,33}, -{53,41,34}, -{53,41,35}, -{53,41,36}, -{53,41,37}, -{53,41,38}, -{53,41,39}, -{53,41,40}, -{53,41,41}, -{53,41,42}, -{53,41,43}, -{53,41,44}, -{53,41,45}, -{53,41,46}, -{53,41,47}, -{53,41,48}, -{53,41,49}, -{53,41,50}, -{53,41,51}, -{53,41,52}, -{53,41,53}, -{53,41,54}, -{53,41,55}, -{53,41,56}, -{53,41,57}, -{53,41,58}, -{53,41,59}, -{53,41,60}, -{53,41,61}, -{53,41,62}, -{53,42,-73}, -{53,42,-72}, -{53,42,-71}, -{53,42,-70}, -{53,42,-69}, -{53,42,-68}, -{53,42,-67}, -{53,42,-66}, -{53,42,-65}, -{53,42,-64}, -{53,42,-63}, -{53,42,-62}, -{53,42,-61}, -{53,42,-60}, -{53,42,-59}, -{53,42,-58}, -{53,42,-57}, -{53,42,-56}, -{53,42,-55}, -{53,42,-54}, -{53,42,-53}, -{53,42,-52}, -{53,42,-51}, -{53,42,-50}, -{53,42,-49}, -{53,42,-48}, -{53,42,-47}, -{53,42,-46}, -{53,42,-45}, -{53,42,-44}, -{53,42,-43}, -{53,42,-42}, -{53,42,-41}, -{53,42,-40}, -{53,42,-39}, -{53,42,-38}, -{53,42,-37}, -{53,42,-36}, -{53,42,-35}, -{53,42,-34}, -{53,42,-33}, -{53,42,-32}, -{53,42,-31}, -{53,42,-30}, -{53,42,-29}, -{53,42,-28}, -{53,42,-27}, -{53,42,-26}, -{53,42,-25}, -{53,42,-24}, -{53,42,-23}, -{53,42,-22}, -{53,42,-21}, -{53,42,-20}, -{53,42,-19}, -{53,42,-18}, -{53,42,-17}, -{53,42,-16}, -{53,42,-15}, -{53,42,-14}, -{53,42,-13}, -{53,42,-12}, -{53,42,-11}, -{53,42,-10}, -{53,42,-9}, -{53,42,-8}, -{53,42,-7}, -{53,42,-6}, -{53,42,-5}, -{53,42,-4}, -{53,42,-3}, -{53,42,-2}, -{53,42,-1}, -{53,42,0}, -{53,42,1}, -{53,42,2}, -{53,42,3}, -{53,42,4}, -{53,42,5}, -{53,42,6}, -{53,42,7}, -{53,42,8}, -{53,42,9}, -{53,42,10}, -{53,42,11}, -{53,42,12}, -{53,42,13}, -{53,42,14}, -{53,42,15}, -{53,42,16}, -{53,42,17}, -{53,42,18}, -{53,42,19}, -{53,42,20}, -{53,42,21}, -{53,42,22}, -{53,42,23}, -{53,42,24}, -{53,42,25}, -{53,42,26}, -{53,42,27}, -{53,42,28}, -{53,42,29}, -{53,42,30}, -{53,42,31}, -{53,42,32}, -{53,42,33}, -{53,42,34}, -{53,42,35}, -{53,42,36}, -{53,42,37}, -{53,42,38}, -{53,42,39}, -{53,42,40}, -{53,42,41}, -{53,42,42}, -{53,42,43}, -{53,42,44}, -{53,42,45}, -{53,42,46}, -{53,42,47}, -{53,42,48}, -{53,42,49}, -{53,42,50}, -{53,42,51}, -{53,42,52}, -{53,42,53}, -{53,42,54}, -{53,42,55}, -{53,42,56}, -{53,42,57}, -{53,42,58}, -{53,42,59}, -{53,42,60}, -{53,42,61}, -{53,42,62}, -{53,43,-73}, -{53,43,-72}, -{53,43,-71}, -{53,43,-70}, -{53,43,-69}, -{53,43,-68}, -{53,43,-67}, -{53,43,-66}, -{53,43,-65}, -{53,43,-64}, -{53,43,-63}, -{53,43,-62}, -{53,43,-61}, -{53,43,-60}, -{53,43,-59}, -{53,43,-58}, -{53,43,-57}, -{53,43,-56}, -{53,43,-55}, -{53,43,-54}, -{53,43,-53}, -{53,43,-52}, -{53,43,-51}, -{53,43,-50}, -{53,43,-49}, -{53,43,-48}, -{53,43,-47}, -{53,43,-46}, -{53,43,-45}, -{53,43,-44}, -{53,43,-43}, -{53,43,-42}, -{53,43,-41}, -{53,43,-40}, -{53,43,-39}, -{53,43,-38}, -{53,43,-37}, -{53,43,-36}, -{53,43,-35}, -{53,43,-34}, -{53,43,-33}, -{53,43,-32}, -{53,43,-31}, -{53,43,-30}, -{53,43,-29}, -{53,43,-28}, -{53,43,-27}, -{53,43,-26}, -{53,43,-25}, -{53,43,-24}, -{53,43,-23}, -{53,43,-22}, -{53,43,-21}, -{53,43,-20}, -{53,43,-19}, -{53,43,-18}, -{53,43,-17}, -{53,43,-16}, -{53,43,-15}, -{53,43,-14}, -{53,43,-13}, -{53,43,-12}, -{53,43,-11}, -{53,43,-10}, -{53,43,-9}, -{53,43,-8}, -{53,43,-7}, -{53,43,-6}, -{53,43,-5}, -{53,43,-4}, -{53,43,-3}, -{53,43,-2}, -{53,43,-1}, -{53,43,0}, -{53,43,1}, -{53,43,2}, -{53,43,3}, -{53,43,4}, -{53,43,5}, -{53,43,6}, -{53,43,7}, -{53,43,8}, -{53,43,9}, -{53,43,10}, -{53,43,11}, -{53,43,12}, -{53,43,13}, -{53,43,14}, -{53,43,15}, -{53,43,16}, -{53,43,17}, -{53,43,18}, -{53,43,19}, -{53,43,20}, -{53,43,21}, -{53,43,22}, -{53,43,23}, -{53,43,24}, -{53,43,25}, -{53,43,26}, -{53,43,27}, -{53,43,28}, -{53,43,29}, -{53,43,30}, -{53,43,31}, -{53,43,32}, -{53,43,33}, -{53,43,34}, -{53,43,35}, -{53,43,36}, -{53,43,37}, -{53,43,38}, -{53,43,39}, -{53,43,40}, -{53,43,41}, -{53,43,42}, -{53,43,43}, -{53,43,44}, -{53,43,45}, -{53,43,46}, -{53,43,47}, -{53,43,48}, -{53,43,49}, -{53,43,50}, -{53,43,51}, -{53,43,52}, -{53,43,53}, -{53,43,54}, -{53,43,55}, -{53,43,56}, -{53,43,57}, -{53,43,58}, -{53,43,59}, -{53,43,60}, -{53,43,61}, -{53,43,62}, -{53,44,-73}, -{53,44,-72}, -{53,44,-71}, -{53,44,-70}, -{53,44,-69}, -{53,44,-68}, -{53,44,-67}, -{53,44,-66}, -{53,44,-65}, -{53,44,-64}, -{53,44,-63}, -{53,44,-62}, -{53,44,-61}, -{53,44,-60}, -{53,44,-59}, -{53,44,-58}, -{53,44,-57}, -{53,44,-56}, -{53,44,-55}, -{53,44,-54}, -{53,44,-53}, -{53,44,-52}, -{53,44,-51}, -{53,44,-50}, -{53,44,-49}, -{53,44,-48}, -{53,44,-47}, -{53,44,-46}, -{53,44,-45}, -{53,44,-44}, -{53,44,-43}, -{53,44,-42}, -{53,44,-41}, -{53,44,-40}, -{53,44,-39}, -{53,44,-38}, -{53,44,-37}, -{53,44,-36}, -{53,44,-35}, -{53,44,-34}, -{53,44,-33}, -{53,44,-32}, -{53,44,-31}, -{53,44,-30}, -{53,44,-29}, -{53,44,-28}, -{53,44,-27}, -{53,44,-26}, -{53,44,-25}, -{53,44,-24}, -{53,44,-23}, -{53,44,-22}, -{53,44,-21}, -{53,44,-20}, -{53,44,-19}, -{53,44,-18}, -{53,44,-17}, -{53,44,-16}, -{53,44,-15}, -{53,44,-14}, -{53,44,-13}, -{53,44,-12}, -{53,44,-11}, -{53,44,-10}, -{53,44,-9}, -{53,44,-8}, -{53,44,-7}, -{53,44,-6}, -{53,44,-5}, -{53,44,-4}, -{53,44,-3}, -{53,44,-2}, -{53,44,-1}, -{53,44,0}, -{53,44,1}, -{53,44,2}, -{53,44,3}, -{53,44,4}, -{53,44,5}, -{53,44,6}, -{53,44,7}, -{53,44,8}, -{53,44,9}, -{53,44,10}, -{53,44,11}, -{53,44,12}, -{53,44,13}, -{53,44,14}, -{53,44,15}, -{53,44,16}, -{53,44,17}, -{53,44,18}, -{53,44,19}, -{53,44,20}, -{53,44,21}, -{53,44,22}, -{53,44,23}, -{53,44,24}, -{53,44,25}, -{53,44,26}, -{53,44,27}, -{53,44,28}, -{53,44,29}, -{53,44,30}, -{53,44,31}, -{53,44,32}, -{53,44,33}, -{53,44,34}, -{53,44,35}, -{53,44,36}, -{53,44,37}, -{53,44,38}, -{53,44,39}, -{53,44,40}, -{53,44,41}, -{53,44,42}, -{53,44,43}, -{53,44,44}, -{53,44,45}, -{53,44,46}, -{53,44,47}, -{53,44,48}, -{53,44,49}, -{53,44,50}, -{53,44,51}, -{53,44,52}, -{53,44,53}, -{53,44,54}, -{53,44,55}, -{53,44,56}, -{53,44,57}, -{53,44,58}, -{53,44,59}, -{53,44,60}, -{53,44,61}, -{53,44,62}, -{53,45,-73}, -{53,45,-72}, -{53,45,-71}, -{53,45,-70}, -{53,45,-69}, -{53,45,-68}, -{53,45,-67}, -{53,45,-66}, -{53,45,-65}, -{53,45,-64}, -{53,45,-63}, -{53,45,-62}, -{53,45,-61}, -{53,45,-60}, -{53,45,-59}, -{53,45,-58}, -{53,45,-57}, -{53,45,-56}, -{53,45,-55}, -{53,45,-54}, -{53,45,-53}, -{53,45,-52}, -{53,45,-51}, -{53,45,-50}, -{53,45,-49}, -{53,45,-48}, -{53,45,-47}, -{53,45,-46}, -{53,45,-45}, -{53,45,-44}, -{53,45,-43}, -{53,45,-42}, -{53,45,-41}, -{53,45,-40}, -{53,45,-39}, -{53,45,-38}, -{53,45,-37}, -{53,45,-36}, -{53,45,-35}, -{53,45,-34}, -{53,45,-33}, -{53,45,-32}, -{53,45,-31}, -{53,45,-30}, -{53,45,-29}, -{53,45,-28}, -{53,45,-27}, -{53,45,-26}, -{53,45,-25}, -{53,45,-24}, -{53,45,-23}, -{53,45,-22}, -{53,45,-21}, -{53,45,-20}, -{53,45,-19}, -{53,45,-18}, -{53,45,-17}, -{53,45,-16}, -{53,45,-15}, -{53,45,-14}, -{53,45,-13}, -{53,45,-12}, -{53,45,-11}, -{53,45,-10}, -{53,45,-9}, -{53,45,-8}, -{53,45,-7}, -{53,45,-6}, -{53,45,-5}, -{53,45,-4}, -{53,45,-3}, -{53,45,-2}, -{53,45,-1}, -{53,45,0}, -{53,45,1}, -{53,45,2}, -{53,45,3}, -{53,45,4}, -{53,45,5}, -{53,45,6}, -{53,45,7}, -{53,45,8}, -{53,45,9}, -{53,45,10}, -{53,45,11}, -{53,45,12}, -{53,45,13}, -{53,45,14}, -{53,45,15}, -{53,45,16}, -{53,45,17}, -{53,45,18}, -{53,45,19}, -{53,45,20}, -{53,45,21}, -{53,45,22}, -{53,45,23}, -{53,45,24}, -{53,45,25}, -{53,45,26}, -{53,45,27}, -{53,45,28}, -{53,45,29}, -{53,45,30}, -{53,45,31}, -{53,45,32}, -{53,45,33}, -{53,45,34}, -{53,45,35}, -{53,45,36}, -{53,45,37}, -{53,45,38}, -{53,45,39}, -{53,45,40}, -{53,45,41}, -{53,45,42}, -{53,45,43}, -{53,45,44}, -{53,45,45}, -{53,45,46}, -{53,45,47}, -{53,45,48}, -{53,45,49}, -{53,45,50}, -{53,45,51}, -{53,45,52}, -{53,45,53}, -{53,45,54}, -{53,45,55}, -{53,45,56}, -{53,45,57}, -{53,45,58}, -{53,45,59}, -{53,45,60}, -{53,45,61}, -{53,45,62}, -{53,46,-73}, -{53,46,-72}, -{53,46,-71}, -{53,46,-70}, -{53,46,-69}, -{53,46,-68}, -{53,46,-67}, -{53,46,-66}, -{53,46,-65}, -{53,46,-64}, -{53,46,-63}, -{53,46,-62}, -{53,46,-61}, -{53,46,-60}, -{53,46,-59}, -{53,46,-58}, -{53,46,-57}, -{53,46,-56}, -{53,46,-55}, -{53,46,-54}, -{53,46,-53}, -{53,46,-52}, -{53,46,-51}, -{53,46,-50}, -{53,46,-49}, -{53,46,-48}, -{53,46,-47}, -{53,46,-46}, -{53,46,-45}, -{53,46,-44}, -{53,46,-43}, -{53,46,-42}, -{53,46,-41}, -{53,46,-40}, -{53,46,-39}, -{53,46,-38}, -{53,46,-37}, -{53,46,-36}, -{53,46,-35}, -{53,46,-34}, -{53,46,-33}, -{53,46,-32}, -{53,46,-31}, -{53,46,-30}, -{53,46,-29}, -{53,46,-28}, -{53,46,-27}, -{53,46,-26}, -{53,46,-25}, -{53,46,-24}, -{53,46,-23}, -{53,46,-22}, -{53,46,-21}, -{53,46,-20}, -{53,46,-19}, -{53,46,-18}, -{53,46,-17}, -{53,46,-16}, -{53,46,-15}, -{53,46,-14}, -{53,46,-13}, -{53,46,-12}, -{53,46,-11}, -{53,46,-10}, -{53,46,-9}, -{53,46,-8}, -{53,46,-7}, -{53,46,-6}, -{53,46,-5}, -{53,46,-4}, -{53,46,-3}, -{53,46,-2}, -{53,46,-1}, -{53,46,0}, -{53,46,1}, -{53,46,2}, -{53,46,3}, -{53,46,4}, -{53,46,5}, -{53,46,6}, -{53,46,7}, -{53,46,8}, -{53,46,9}, -{53,46,10}, -{53,46,11}, -{53,46,12}, -{53,46,13}, -{53,46,14}, -{53,46,15}, -{53,46,16}, -{53,46,17}, -{53,46,18}, -{53,46,19}, -{53,46,20}, -{53,46,21}, -{53,46,22}, -{53,46,23}, -{53,46,24}, -{53,46,25}, -{53,46,26}, -{53,46,27}, -{53,46,28}, -{53,46,29}, -{53,46,30}, -{53,46,31}, -{53,46,32}, -{53,46,33}, -{53,46,34}, -{53,46,35}, -{53,46,36}, -{53,46,37}, -{53,46,38}, -{53,46,39}, -{53,46,40}, -{53,46,41}, -{53,46,42}, -{53,46,43}, -{53,46,44}, -{53,46,45}, -{53,46,46}, -{53,46,47}, -{53,46,48}, -{53,46,49}, -{53,46,50}, -{53,46,51}, -{53,46,52}, -{53,46,53}, -{53,46,54}, -{53,46,55}, -{53,46,56}, -{53,46,57}, -{53,46,58}, -{53,46,59}, -{53,46,60}, -{53,46,61}, -{53,46,62}, -{53,47,-73}, -{53,47,-72}, -{53,47,-71}, -{53,47,-70}, -{53,47,-69}, -{53,47,-68}, -{53,47,-67}, -{53,47,-66}, -{53,47,-65}, -{53,47,-64}, -{53,47,-63}, -{53,47,-62}, -{53,47,-61}, -{53,47,-60}, -{53,47,-59}, -{53,47,-58}, -{53,47,-57}, -{53,47,-56}, -{53,47,-55}, -{53,47,-54}, -{53,47,-53}, -{53,47,-52}, -{53,47,-51}, -{53,47,-50}, -{53,47,-49}, -{53,47,-48}, -{53,47,-47}, -{53,47,-46}, -{53,47,-45}, -{53,47,-44}, -{53,47,-43}, -{53,47,-42}, -{53,47,-41}, -{53,47,-40}, -{53,47,-39}, -{53,47,-38}, -{53,47,-37}, -{53,47,-36}, -{53,47,-35}, -{53,47,-34}, -{53,47,-33}, -{53,47,-32}, -{53,47,-31}, -{53,47,-30}, -{53,47,-29}, -{53,47,-28}, -{53,47,-27}, -{53,47,-26}, -{53,47,-25}, -{53,47,-24}, -{53,47,-23}, -{53,47,-22}, -{53,47,-21}, -{53,47,-20}, -{53,47,-19}, -{53,47,-18}, -{53,47,-17}, -{53,47,-16}, -{53,47,-15}, -{53,47,-14}, -{53,47,-13}, -{53,47,-12}, -{53,47,-11}, -{53,47,-10}, -{53,47,-9}, -{53,47,-8}, -{53,47,-7}, -{53,47,-6}, -{53,47,-5}, -{53,47,-4}, -{53,47,-3}, -{53,47,-2}, -{53,47,-1}, -{53,47,0}, -{53,47,1}, -{53,47,2}, -{53,47,3}, -{53,47,4}, -{53,47,5}, -{53,47,6}, -{53,47,7}, -{53,47,8}, -{53,47,9}, -{53,47,10}, -{53,47,11}, -{53,47,12}, -{53,47,13}, -{53,47,14}, -{53,47,15}, -{53,47,16}, -{53,47,17}, -{53,47,18}, -{53,47,19}, -{53,47,20}, -{53,47,21}, -{53,47,22}, -{53,47,23}, -{53,47,24}, -{53,47,25}, -{53,47,26}, -{53,47,27}, -{53,47,28}, -{53,47,29}, -{53,47,30}, -{53,47,31}, -{53,47,32}, -{53,47,33}, -{53,47,34}, -{53,47,35}, -{53,47,36}, -{53,47,37}, -{53,47,38}, -{53,47,39}, -{53,47,40}, -{53,47,41}, -{53,47,42}, -{53,47,43}, -{53,47,44}, -{53,47,45}, -{53,47,46}, -{53,47,47}, -{53,47,48}, -{53,47,49}, -{53,47,50}, -{53,47,51}, -{53,47,52}, -{53,47,53}, -{53,47,54}, -{53,47,55}, -{53,47,56}, -{53,47,57}, -{53,47,58}, -{53,47,59}, -{53,47,60}, -{53,47,61}, -{53,47,62}, -{53,48,-73}, -{53,48,-72}, -{53,48,-71}, -{53,48,-70}, -{53,48,-69}, -{53,48,-68}, -{53,48,-67}, -{53,48,-66}, -{53,48,-65}, -{53,48,-64}, -{53,48,-63}, -{53,48,-62}, -{53,48,-61}, -{53,48,-60}, -{53,48,-59}, -{53,48,-58}, -{53,48,-57}, -{53,48,-56}, -{53,48,-55}, -{53,48,-54}, -{53,48,-53}, -{53,48,-52}, -{53,48,-51}, -{53,48,-50}, -{53,48,-49}, -{53,48,-48}, -{53,48,-47}, -{53,48,-46}, -{53,48,-45}, -{53,48,-44}, -{53,48,-43}, -{53,48,-42}, -{53,48,-41}, -{53,48,-40}, -{53,48,-39}, -{53,48,-38}, -{53,48,-37}, -{53,48,-36}, -{53,48,-35}, -{53,48,-34}, -{53,48,-33}, -{53,48,-32}, -{53,48,-31}, -{53,48,-30}, -{53,48,-29}, -{53,48,-28}, -{53,48,-27}, -{53,48,-26}, -{53,48,-25}, -{53,48,-24}, -{53,48,-23}, -{53,48,-22}, -{53,48,-21}, -{53,48,-20}, -{53,48,-19}, -{53,48,-18}, -{53,48,-17}, -{53,48,-16}, -{53,48,-15}, -{53,48,-14}, -{53,48,-13}, -{53,48,-12}, -{53,48,-11}, -{53,48,-10}, -{53,48,-9}, -{53,48,-8}, -{53,48,-7}, -{53,48,-6}, -{53,48,-5}, -{53,48,-4}, -{53,48,-3}, -{53,48,-2}, -{53,48,-1}, -{53,48,0}, -{53,48,1}, -{53,48,2}, -{53,48,3}, -{53,48,4}, -{53,48,5}, -{53,48,6}, -{53,48,7}, -{53,48,8}, -{53,48,9}, -{53,48,10}, -{53,48,11}, -{53,48,12}, -{53,48,13}, -{53,48,14}, -{53,48,15}, -{53,48,16}, -{53,48,17}, -{53,48,18}, -{53,48,19}, -{53,48,20}, -{53,48,21}, -{53,48,22}, -{53,48,23}, -{53,48,24}, -{53,48,25}, -{53,48,26}, -{53,48,27}, -{53,48,28}, -{53,48,29}, -{53,48,30}, -{53,48,31}, -{53,48,32}, -{53,48,33}, -{53,48,34}, -{53,48,35}, -{53,48,36}, -{53,48,37}, -{53,48,38}, -{53,48,39}, -{53,48,40}, -{53,48,41}, -{53,48,42}, -{53,48,43}, -{53,48,44}, -{53,48,45}, -{53,48,46}, -{53,48,47}, -{53,48,48}, -{53,48,49}, -{53,48,50}, -{53,48,51}, -{53,48,52}, -{53,48,53}, -{53,48,54}, -{53,48,55}, -{53,48,56}, -{53,48,57}, -{53,48,58}, -{53,48,59}, -{53,48,60}, -{53,48,61}, -{53,48,62}, -{53,48,63}, -{53,49,-73}, -{53,49,-72}, -{53,49,-71}, -{53,49,-70}, -{53,49,-69}, -{53,49,-68}, -{53,49,-67}, -{53,49,-66}, -{53,49,-65}, -{53,49,-64}, -{53,49,-63}, -{53,49,-62}, -{53,49,-61}, -{53,49,-60}, -{53,49,-59}, -{53,49,-58}, -{53,49,-57}, -{53,49,-56}, -{53,49,-55}, -{53,49,-54}, -{53,49,-53}, -{53,49,-52}, -{53,49,-51}, -{53,49,-50}, -{53,49,-49}, -{53,49,-48}, -{53,49,-47}, -{53,49,-46}, -{53,49,-45}, -{53,49,-44}, -{53,49,-43}, -{53,49,-42}, -{53,49,-41}, -{53,49,-40}, -{53,49,-39}, -{53,49,-38}, -{53,49,-37}, -{53,49,-36}, -{53,49,-35}, -{53,49,-34}, -{53,49,-33}, -{53,49,-32}, -{53,49,-31}, -{53,49,-30}, -{53,49,-29}, -{53,49,-28}, -{53,49,-27}, -{53,49,-26}, -{53,49,-25}, -{53,49,-24}, -{53,49,-23}, -{53,49,-22}, -{53,49,-21}, -{53,49,-20}, -{53,49,-19}, -{53,49,-18}, -{53,49,-17}, -{53,49,-16}, -{53,49,-15}, -{53,49,-14}, -{53,49,-13}, -{53,49,-12}, -{53,49,-11}, -{53,49,-10}, -{53,49,-9}, -{53,49,-8}, -{53,49,-7}, -{53,49,-6}, -{53,49,-5}, -{53,49,-4}, -{53,49,-3}, -{53,49,-2}, -{53,49,-1}, -{53,49,0}, -{53,49,1}, -{53,49,2}, -{53,49,3}, -{53,49,4}, -{53,49,5}, -{53,49,6}, -{53,49,7}, -{53,49,8}, -{53,49,9}, -{53,49,10}, -{53,49,11}, -{53,49,12}, -{53,49,13}, -{53,49,14}, -{53,49,15}, -{53,49,16}, -{53,49,17}, -{53,49,18}, -{53,49,19}, -{53,49,20}, -{53,49,21}, -{53,49,22}, -{53,49,23}, -{53,49,24}, -{53,49,25}, -{53,49,26}, -{53,49,27}, -{53,49,28}, -{53,49,29}, -{53,49,30}, -{53,49,31}, -{53,49,32}, -{53,49,33}, -{53,49,34}, -{53,49,35}, -{53,49,36}, -{53,49,37}, -{53,49,38}, -{53,49,39}, -{53,49,40}, -{53,49,41}, -{53,49,42}, -{53,49,43}, -{53,49,44}, -{53,49,45}, -{53,49,46}, -{53,49,47}, -{53,49,48}, -{53,49,49}, -{53,49,50}, -{53,49,51}, -{53,49,52}, -{53,49,53}, -{53,49,54}, -{53,49,55}, -{53,49,56}, -{53,49,57}, -{53,49,58}, -{53,49,59}, -{53,49,60}, -{53,49,61}, -{53,49,62}, -{53,49,63}, -{53,50,-73}, -{53,50,-72}, -{53,50,-71}, -{53,50,-70}, -{53,50,-69}, -{53,50,-68}, -{53,50,-67}, -{53,50,-66}, -{53,50,-65}, -{53,50,-64}, -{53,50,-63}, -{53,50,-62}, -{53,50,-61}, -{53,50,-60}, -{53,50,-59}, -{53,50,-58}, -{53,50,-57}, -{53,50,-56}, -{53,50,-55}, -{53,50,-54}, -{53,50,-53}, -{53,50,-52}, -{53,50,-51}, -{53,50,-50}, -{53,50,-49}, -{53,50,-48}, -{53,50,-47}, -{53,50,-46}, -{53,50,-45}, -{53,50,-44}, -{53,50,-43}, -{53,50,-42}, -{53,50,-41}, -{53,50,-40}, -{53,50,-39}, -{53,50,-38}, -{53,50,-37}, -{53,50,-36}, -{53,50,-35}, -{53,50,-34}, -{53,50,-33}, -{53,50,-32}, -{53,50,-31}, -{53,50,-30}, -{53,50,-29}, -{53,50,-28}, -{53,50,-27}, -{53,50,-26}, -{53,50,-25}, -{53,50,-24}, -{53,50,-23}, -{53,50,-22}, -{53,50,-21}, -{53,50,-20}, -{53,50,-19}, -{53,50,-18}, -{53,50,-17}, -{53,50,-16}, -{53,50,-15}, -{53,50,-14}, -{53,50,-13}, -{53,50,-12}, -{53,50,-11}, -{53,50,-10}, -{53,50,-9}, -{53,50,-8}, -{53,50,-7}, -{53,50,-6}, -{53,50,-5}, -{53,50,-4}, -{53,50,-3}, -{53,50,-2}, -{53,50,-1}, -{53,50,0}, -{53,50,1}, -{53,50,2}, -{53,50,3}, -{53,50,4}, -{53,50,5}, -{53,50,6}, -{53,50,7}, -{53,50,8}, -{53,50,9}, -{53,50,10}, -{53,50,11}, -{53,50,12}, -{53,50,13}, -{53,50,14}, -{53,50,15}, -{53,50,16}, -{53,50,17}, -{53,50,18}, -{53,50,19}, -{53,50,20}, -{53,50,21}, -{53,50,22}, -{53,50,23}, -{53,50,24}, -{53,50,25}, -{53,50,26}, -{53,50,27}, -{53,50,28}, -{53,50,29}, -{53,50,30}, -{53,50,31}, -{53,50,32}, -{53,50,33}, -{53,50,34}, -{53,50,35}, -{53,50,36}, -{53,50,37}, -{53,50,38}, -{53,50,39}, -{53,50,40}, -{53,50,41}, -{53,50,42}, -{53,50,43}, -{53,50,44}, -{53,50,45}, -{53,50,46}, -{53,50,47}, -{53,50,48}, -{53,50,49}, -{53,50,50}, -{53,50,51}, -{53,50,52}, -{53,50,53}, -{53,50,54}, -{53,50,55}, -{53,50,56}, -{53,50,57}, -{53,50,58}, -{53,50,59}, -{53,50,60}, -{53,50,61}, -{53,50,62}, -{53,50,63}, -{53,51,-73}, -{53,51,-72}, -{53,51,-71}, -{53,51,-70}, -{53,51,-69}, -{53,51,-68}, -{53,51,-67}, -{53,51,-66}, -{53,51,-65}, -{53,51,-64}, -{53,51,-63}, -{53,51,-62}, -{53,51,-61}, -{53,51,-60}, -{53,51,-59}, -{53,51,-58}, -{53,51,-57}, -{53,51,-56}, -{53,51,-55}, -{53,51,-54}, -{53,51,-53}, -{53,51,-52}, -{53,51,-51}, -{53,51,-50}, -{53,51,-49}, -{53,51,-48}, -{53,51,-47}, -{53,51,-46}, -{53,51,-45}, -{53,51,-44}, -{53,51,-43}, -{53,51,-42}, -{53,51,-41}, -{53,51,-40}, -{53,51,-39}, -{53,51,-38}, -{53,51,-37}, -{53,51,-36}, -{53,51,-35}, -{53,51,-34}, -{53,51,-33}, -{53,51,-32}, -{53,51,-31}, -{53,51,-30}, -{53,51,-29}, -{53,51,-28}, -{53,51,-27}, -{53,51,-26}, -{53,51,-25}, -{53,51,-24}, -{53,51,-23}, -{53,51,-22}, -{53,51,-21}, -{53,51,-20}, -{53,51,-19}, -{53,51,-18}, -{53,51,-17}, -{53,51,-16}, -{53,51,-15}, -{53,51,-14}, -{53,51,-13}, -{53,51,-12}, -{53,51,-11}, -{53,51,-10}, -{53,51,-9}, -{53,51,-8}, -{53,51,-7}, -{53,51,-6}, -{53,51,-5}, -{53,51,-4}, -{53,51,-3}, -{53,51,-2}, -{53,51,-1}, -{53,51,0}, -{53,51,1}, -{53,51,2}, -{53,51,3}, -{53,51,4}, -{53,51,5}, -{53,51,6}, -{53,51,7}, -{53,51,8}, -{53,51,9}, -{53,51,10}, -{53,51,11}, -{53,51,12}, -{53,51,13}, -{53,51,14}, -{53,51,15}, -{53,51,16}, -{53,51,17}, -{53,51,18}, -{53,51,19}, -{53,51,20}, -{53,51,21}, -{53,51,22}, -{53,51,23}, -{53,51,24}, -{53,51,25}, -{53,51,26}, -{53,51,27}, -{53,51,28}, -{53,51,29}, -{53,51,30}, -{53,51,31}, -{53,51,32}, -{53,51,33}, -{53,51,34}, -{53,51,35}, -{53,51,36}, -{53,51,37}, -{53,51,38}, -{53,51,39}, -{53,51,40}, -{53,51,41}, -{53,51,42}, -{53,51,43}, -{53,51,44}, -{53,51,45}, -{53,51,46}, -{53,51,47}, -{53,51,48}, -{53,51,49}, -{53,51,50}, -{53,51,51}, -{53,51,52}, -{53,51,53}, -{53,51,54}, -{53,51,55}, -{53,51,56}, -{53,51,57}, -{53,51,58}, -{53,51,59}, -{53,51,60}, -{53,51,61}, -{53,51,62}, -{53,51,63}, -{53,52,-73}, -{53,52,-72}, -{53,52,-71}, -{53,52,-70}, -{53,52,-69}, -{53,52,-68}, -{53,52,-67}, -{53,52,-66}, -{53,52,-65}, -{53,52,-64}, -{53,52,-63}, -{53,52,-62}, -{53,52,-61}, -{53,52,-60}, -{53,52,-59}, -{53,52,-58}, -{53,52,-57}, -{53,52,-56}, -{53,52,-55}, -{53,52,-54}, -{53,52,-53}, -{53,52,-52}, -{53,52,-51}, -{53,52,-50}, -{53,52,-49}, -{53,52,-48}, -{53,52,-47}, -{53,52,-46}, -{53,52,-45}, -{53,52,-44}, -{53,52,-43}, -{53,52,-42}, -{53,52,-41}, -{53,52,-40}, -{53,52,-39}, -{53,52,-38}, -{53,52,-37}, -{53,52,-36}, -{53,52,-35}, -{53,52,-34}, -{53,52,-33}, -{53,52,-32}, -{53,52,-31}, -{53,52,-30}, -{53,52,-29}, -{53,52,-28}, -{53,52,-27}, -{53,52,-26}, -{53,52,-25}, -{53,52,-24}, -{53,52,-23}, -{53,52,-22}, -{53,52,-21}, -{53,52,-20}, -{53,52,-19}, -{53,52,-18}, -{53,52,-17}, -{53,52,-16}, -{53,52,-15}, -{53,52,-14}, -{53,52,-13}, -{53,52,-12}, -{53,52,-11}, -{53,52,-10}, -{53,52,-9}, -{53,52,-8}, -{53,52,-7}, -{53,52,-6}, -{53,52,-5}, -{53,52,-4}, -{53,52,-3}, -{53,52,-2}, -{53,52,-1}, -{53,52,0}, -{53,52,1}, -{53,52,2}, -{53,52,3}, -{53,52,4}, -{53,52,5}, -{53,52,6}, -{53,52,7}, -{53,52,8}, -{53,52,9}, -{53,52,10}, -{53,52,11}, -{53,52,12}, -{53,52,13}, -{53,52,14}, -{53,52,15}, -{53,52,16}, -{53,52,17}, -{53,52,18}, -{53,52,19}, -{53,52,20}, -{53,52,21}, -{53,52,22}, -{53,52,23}, -{53,52,24}, -{53,52,25}, -{53,52,26}, -{53,52,27}, -{53,52,28}, -{53,52,29}, -{53,52,30}, -{53,52,31}, -{53,52,32}, -{53,52,33}, -{53,52,34}, -{53,52,35}, -{53,52,36}, -{53,52,37}, -{53,52,38}, -{53,52,39}, -{53,52,40}, -{53,52,41}, -{53,52,42}, -{53,52,43}, -{53,52,44}, -{53,52,45}, -{53,52,46}, -{53,52,47}, -{53,52,48}, -{53,52,49}, -{53,52,50}, -{53,52,51}, -{53,52,52}, -{53,52,53}, -{53,52,54}, -{53,52,55}, -{53,52,56}, -{53,52,57}, -{53,52,58}, -{53,52,59}, -{53,52,60}, -{53,52,61}, -{53,52,62}, -{53,52,63}, -{53,53,-73}, -{53,53,-72}, -{53,53,-71}, -{53,53,-70}, -{53,53,-69}, -{53,53,-68}, -{53,53,-67}, -{53,53,-66}, -{53,53,-65}, -{53,53,-64}, -{53,53,-63}, -{53,53,-62}, -{53,53,-61}, -{53,53,-60}, -{53,53,-59}, -{53,53,-58}, -{53,53,-57}, -{53,53,-56}, -{53,53,-55}, -{53,53,-54}, -{53,53,-53}, -{53,53,-52}, -{53,53,-51}, -{53,53,-50}, -{53,53,-49}, -{53,53,-48}, -{53,53,-47}, -{53,53,-46}, -{53,53,-45}, -{53,53,-44}, -{53,53,-43}, -{53,53,-42}, -{53,53,-41}, -{53,53,-40}, -{53,53,-39}, -{53,53,-38}, -{53,53,-37}, -{53,53,-36}, -{53,53,-35}, -{53,53,-34}, -{53,53,-33}, -{53,53,-32}, -{53,53,-31}, -{53,53,-30}, -{53,53,-29}, -{53,53,-28}, -{53,53,-27}, -{53,53,-26}, -{53,53,-25}, -{53,53,-24}, -{53,53,-23}, -{53,53,-22}, -{53,53,-21}, -{53,53,-20}, -{53,53,-19}, -{53,53,-18}, -{53,53,-17}, -{53,53,-16}, -{53,53,-15}, -{53,53,-14}, -{53,53,-13}, -{53,53,-12}, -{53,53,-11}, -{53,53,-10}, -{53,53,-9}, -{53,53,-8}, -{53,53,-7}, -{53,53,-6}, -{53,53,-5}, -{53,53,-4}, -{53,53,-3}, -{53,53,-2}, -{53,53,-1}, -{53,53,0}, -{53,53,1}, -{53,53,2}, -{53,53,3}, -{53,53,4}, -{53,53,5}, -{53,53,6}, -{53,53,7}, -{53,53,8}, -{53,53,9}, -{53,53,10}, -{53,53,11}, -{53,53,12}, -{53,53,13}, -{53,53,14}, -{53,53,15}, -{53,53,16}, -{53,53,17}, -{53,53,18}, -{53,53,19}, -{53,53,20}, -{53,53,21}, -{53,53,22}, -{53,53,23}, -{53,53,24}, -{53,53,25}, -{53,53,26}, -{53,53,27}, -{53,53,28}, -{53,53,29}, -{53,53,30}, -{53,53,31}, -{53,53,32}, -{53,53,33}, -{53,53,34}, -{53,53,35}, -{53,53,36}, -{53,53,37}, -{53,53,38}, -{53,53,39}, -{53,53,40}, -{53,53,41}, -{53,53,42}, -{53,53,43}, -{53,53,44}, -{53,53,45}, -{53,53,46}, -{53,53,47}, -{53,53,48}, -{53,53,49}, -{53,53,50}, -{53,53,51}, -{53,53,52}, -{53,53,53}, -{53,53,54}, -{53,53,55}, -{53,53,56}, -{53,53,57}, -{53,53,58}, -{53,53,59}, -{53,53,60}, -{53,53,61}, -{53,53,62}, -{53,53,63}, -{53,54,-73}, -{53,54,-72}, -{53,54,-71}, -{53,54,-70}, -{53,54,-69}, -{53,54,-68}, -{53,54,-67}, -{53,54,-66}, -{53,54,-65}, -{53,54,-64}, -{53,54,-63}, -{53,54,-62}, -{53,54,-61}, -{53,54,-60}, -{53,54,-59}, -{53,54,-58}, -{53,54,-57}, -{53,54,-56}, -{53,54,-55}, -{53,54,-54}, -{53,54,-53}, -{53,54,-52}, -{53,54,-51}, -{53,54,-50}, -{53,54,-49}, -{53,54,-48}, -{53,54,-47}, -{53,54,-46}, -{53,54,-45}, -{53,54,-44}, -{53,54,-43}, -{53,54,-42}, -{53,54,-41}, -{53,54,-40}, -{53,54,-39}, -{53,54,-38}, -{53,54,-37}, -{53,54,-36}, -{53,54,-35}, -{53,54,-34}, -{53,54,-33}, -{53,54,-32}, -{53,54,-31}, -{53,54,-30}, -{53,54,-29}, -{53,54,-28}, -{53,54,-27}, -{53,54,-26}, -{53,54,-25}, -{53,54,-24}, -{53,54,-23}, -{53,54,-22}, -{53,54,-21}, -{53,54,-20}, -{53,54,-19}, -{53,54,-18}, -{53,54,-17}, -{53,54,-16}, -{53,54,-15}, -{53,54,-14}, -{53,54,-13}, -{53,54,-12}, -{53,54,-11}, -{53,54,-10}, -{53,54,-9}, -{53,54,-8}, -{53,54,-7}, -{53,54,-6}, -{53,54,-5}, -{53,54,-4}, -{53,54,-3}, -{53,54,-2}, -{53,54,-1}, -{53,54,0}, -{53,54,1}, -{53,54,2}, -{53,54,3}, -{53,54,4}, -{53,54,5}, -{53,54,6}, -{53,54,7}, -{53,54,8}, -{53,54,9}, -{53,54,10}, -{53,54,11}, -{53,54,12}, -{53,54,13}, -{53,54,14}, -{53,54,15}, -{53,54,16}, -{53,54,17}, -{53,54,18}, -{53,54,19}, -{53,54,20}, -{53,54,21}, -{53,54,22}, -{53,54,23}, -{53,54,24}, -{53,54,25}, -{53,54,26}, -{53,54,27}, -{53,54,28}, -{53,54,29}, -{53,54,30}, -{53,54,31}, -{53,54,32}, -{53,54,33}, -{53,54,34}, -{53,54,35}, -{53,54,36}, -{53,54,37}, -{53,54,38}, -{53,54,39}, -{53,54,40}, -{53,54,41}, -{53,54,42}, -{53,54,43}, -{53,54,44}, -{53,54,45}, -{53,54,46}, -{53,54,47}, -{53,54,48}, -{53,54,49}, -{53,54,50}, -{53,54,51}, -{53,54,52}, -{53,54,53}, -{53,54,54}, -{53,54,55}, -{53,54,56}, -{53,54,57}, -{53,54,58}, -{53,54,59}, -{53,54,60}, -{53,54,61}, -{53,54,62}, -{53,54,63}, -{53,55,-73}, -{53,55,-72}, -{53,55,-71}, -{53,55,-70}, -{53,55,-69}, -{53,55,-68}, -{53,55,-67}, -{53,55,-66}, -{53,55,-65}, -{53,55,-64}, -{53,55,-63}, -{53,55,-62}, -{53,55,-61}, -{53,55,-60}, -{53,55,-59}, -{53,55,-58}, -{53,55,-57}, -{53,55,-56}, -{53,55,-55}, -{53,55,-54}, -{53,55,-53}, -{53,55,-52}, -{53,55,-51}, -{53,55,-50}, -{53,55,-49}, -{53,55,-48}, -{53,55,-47}, -{53,55,-46}, -{53,55,-45}, -{53,55,-44}, -{53,55,-43}, -{53,55,-42}, -{53,55,-41}, -{53,55,-40}, -{53,55,-39}, -{53,55,-38}, -{53,55,-37}, -{53,55,-36}, -{53,55,-35}, -{53,55,-34}, -{53,55,-33}, -{53,55,-32}, -{53,55,-31}, -{53,55,-30}, -{53,55,-29}, -{53,55,-28}, -{53,55,-27}, -{53,55,-26}, -{53,55,-25}, -{53,55,-24}, -{53,55,-23}, -{53,55,-22}, -{53,55,-21}, -{53,55,-20}, -{53,55,-19}, -{53,55,-18}, -{53,55,-17}, -{53,55,-16}, -{53,55,-15}, -{53,55,-14}, -{53,55,-13}, -{53,55,-12}, -{53,55,-11}, -{53,55,-10}, -{53,55,-9}, -{53,55,-8}, -{53,55,-7}, -{53,55,-6}, -{53,55,-5}, -{53,55,-4}, -{53,55,-3}, -{53,55,-2}, -{53,55,-1}, -{53,55,0}, -{53,55,1}, -{53,55,2}, -{53,55,3}, -{53,55,4}, -{53,55,5}, -{53,55,6}, -{53,55,7}, -{53,55,8}, -{53,55,9}, -{53,55,10}, -{53,55,11}, -{53,55,12}, -{53,55,13}, -{53,55,14}, -{53,55,15}, -{53,55,16}, -{53,55,17}, -{53,55,18}, -{53,55,19}, -{53,55,20}, -{53,55,21}, -{53,55,22}, -{53,55,23}, -{53,55,24}, -{53,55,25}, -{53,55,26}, -{53,55,27}, -{53,55,28}, -{53,55,29}, -{53,55,30}, -{53,55,31}, -{53,55,32}, -{53,55,33}, -{53,55,34}, -{53,55,35}, -{53,55,36}, -{53,55,37}, -{53,55,38}, -{53,55,39}, -{53,55,40}, -{53,55,41}, -{53,55,42}, -{53,55,43}, -{53,55,44}, -{53,55,45}, -{53,55,46}, -{53,55,47}, -{53,55,48}, -{53,55,49}, -{53,55,50}, -{53,55,51}, -{53,55,52}, -{53,55,53}, -{53,55,54}, -{53,55,55}, -{53,55,56}, -{53,55,57}, -{53,55,58}, -{53,55,59}, -{53,55,60}, -{53,55,61}, -{53,55,62}, -{53,55,63}, -{53,56,-73}, -{53,56,-72}, -{53,56,-71}, -{53,56,-70}, -{53,56,-69}, -{53,56,-68}, -{53,56,-67}, -{53,56,-66}, -{53,56,-65}, -{53,56,-64}, -{53,56,-63}, -{53,56,-62}, -{53,56,-61}, -{53,56,-60}, -{53,56,-59}, -{53,56,-58}, -{53,56,-57}, -{53,56,-56}, -{53,56,-55}, -{53,56,-54}, -{53,56,-53}, -{53,56,-52}, -{53,56,-51}, -{53,56,-50}, -{53,56,-49}, -{53,56,-48}, -{53,56,-47}, -{53,56,-46}, -{53,56,-45}, -{53,56,-44}, -{53,56,-43}, -{53,56,-42}, -{53,56,-41}, -{53,56,-40}, -{53,56,-39}, -{53,56,-38}, -{53,56,-37}, -{53,56,-36}, -{53,56,-35}, -{53,56,-34}, -{53,56,-33}, -{53,56,-32}, -{53,56,-31}, -{53,56,-30}, -{53,56,-29}, -{53,56,-28}, -{53,56,-27}, -{53,56,-26}, -{53,56,-25}, -{53,56,-24}, -{53,56,-23}, -{53,56,-22}, -{53,56,-21}, -{53,56,-20}, -{53,56,-19}, -{53,56,-18}, -{53,56,-17}, -{53,56,-16}, -{53,56,-15}, -{53,56,-14}, -{53,56,-13}, -{53,56,-12}, -{53,56,-11}, -{53,56,-10}, -{53,56,-9}, -{53,56,-8}, -{53,56,-7}, -{53,56,-6}, -{53,56,-5}, -{53,56,-4}, -{53,56,-3}, -{53,56,-2}, -{53,56,-1}, -{53,56,0}, -{53,56,1}, -{53,56,2}, -{53,56,3}, -{53,56,4}, -{53,56,5}, -{53,56,6}, -{53,56,7}, -{53,56,8}, -{53,56,9}, -{53,56,10}, -{53,56,11}, -{53,56,12}, -{53,56,13}, -{53,56,14}, -{53,56,15}, -{53,56,16}, -{53,56,17}, -{53,56,18}, -{53,56,19}, -{53,56,20}, -{53,56,21}, -{53,56,22}, -{53,56,23}, -{53,56,24}, -{53,56,25}, -{53,56,26}, -{53,56,27}, -{53,56,28}, -{53,56,29}, -{53,56,30}, -{53,56,31}, -{53,56,32}, -{53,56,33}, -{53,56,34}, -{53,56,35}, -{53,56,36}, -{53,56,37}, -{53,56,38}, -{53,56,39}, -{53,56,40}, -{53,56,41}, -{53,56,42}, -{53,56,43}, -{53,56,44}, -{53,56,45}, -{53,56,46}, -{53,56,47}, -{53,56,48}, -{53,56,49}, -{53,56,50}, -{53,56,51}, -{53,56,52}, -{53,56,53}, -{53,56,54}, -{53,56,55}, -{53,56,56}, -{53,56,57}, -{53,56,58}, -{53,56,59}, -{53,56,60}, -{53,56,61}, -{53,56,62}, -{53,56,63}, -{53,57,-73}, -{53,57,-72}, -{53,57,-71}, -{53,57,-70}, -{53,57,-69}, -{53,57,-68}, -{53,57,-67}, -{53,57,-66}, -{53,57,-65}, -{53,57,-64}, -{53,57,-63}, -{53,57,-62}, -{53,57,-61}, -{53,57,-60}, -{53,57,-59}, -{53,57,-58}, -{53,57,-57}, -{53,57,-56}, -{53,57,-55}, -{53,57,-54}, -{53,57,-53}, -{53,57,-52}, -{53,57,-51}, -{53,57,-50}, -{53,57,-49}, -{53,57,-48}, -{53,57,-47}, -{53,57,-46}, -{53,57,-45}, -{53,57,-44}, -{53,57,-43}, -{53,57,-42}, -{53,57,-41}, -{53,57,-40}, -{53,57,-39}, -{53,57,-38}, -{53,57,-37}, -{53,57,-36}, -{53,57,-35}, -{53,57,-34}, -{53,57,-33}, -{53,57,-32}, -{53,57,-31}, -{53,57,-30}, -{53,57,-29}, -{53,57,-28}, -{53,57,-27}, -{53,57,-26}, -{53,57,-25}, -{53,57,-24}, -{53,57,-23}, -{53,57,-22}, -{53,57,-21}, -{53,57,-20}, -{53,57,-19}, -{53,57,-18}, -{53,57,-17}, -{53,57,-16}, -{53,57,-15}, -{53,57,-14}, -{53,57,-13}, -{53,57,-12}, -{53,57,-11}, -{53,57,-10}, -{53,57,-9}, -{53,57,-8}, -{53,57,-7}, -{53,57,-6}, -{53,57,-5}, -{53,57,-4}, -{53,57,-3}, -{53,57,-2}, -{53,57,-1}, -{53,57,0}, -{53,57,1}, -{53,57,2}, -{53,57,3}, -{53,57,4}, -{53,57,5}, -{53,57,6}, -{53,57,7}, -{53,57,8}, -{53,57,9}, -{53,57,10}, -{53,57,11}, -{53,57,12}, -{53,57,13}, -{53,57,14}, -{53,57,15}, -{53,57,16}, -{53,57,17}, -{53,57,18}, -{53,57,19}, -{53,57,20}, -{53,57,21}, -{53,57,22}, -{53,57,23}, -{53,57,24}, -{53,57,25}, -{53,57,26}, -{53,57,27}, -{53,57,28}, -{53,57,29}, -{53,57,30}, -{53,57,31}, -{53,57,32}, -{53,57,33}, -{53,57,34}, -{53,57,35}, -{53,57,36}, -{53,57,37}, -{53,57,38}, -{53,57,39}, -{53,57,40}, -{53,57,41}, -{53,57,42}, -{53,57,43}, -{53,57,44}, -{53,57,45}, -{53,57,46}, -{53,57,47}, -{53,57,48}, -{53,57,49}, -{53,57,50}, -{53,57,51}, -{53,57,52}, -{53,57,53}, -{53,57,54}, -{53,57,55}, -{53,57,56}, -{53,57,57}, -{53,57,58}, -{53,57,59}, -{53,57,60}, -{53,57,61}, -{53,57,62}, -{53,57,63}, -{53,57,64}, -{53,58,-73}, -{53,58,-72}, -{53,58,-71}, -{53,58,-70}, -{53,58,-69}, -{53,58,-68}, -{53,58,-67}, -{53,58,-66}, -{53,58,-65}, -{53,58,-64}, -{53,58,-63}, -{53,58,-62}, -{53,58,-61}, -{53,58,-60}, -{53,58,-59}, -{53,58,-58}, -{53,58,-57}, -{53,58,-56}, -{53,58,-55}, -{53,58,-54}, -{53,58,-53}, -{53,58,-52}, -{53,58,-51}, -{53,58,-50}, -{53,58,-49}, -{53,58,-48}, -{53,58,-47}, -{53,58,-46}, -{53,58,-45}, -{53,58,-44}, -{53,58,-43}, -{53,58,-42}, -{53,58,-41}, -{53,58,-40}, -{53,58,-39}, -{53,58,-38}, -{53,58,-37}, -{53,58,-36}, -{53,58,-35}, -{53,58,-34}, -{53,58,-33}, -{53,58,-32}, -{53,58,-31}, -{53,58,-30}, -{53,58,-29}, -{53,58,-28}, -{53,58,-27}, -{53,58,-26}, -{53,58,-25}, -{53,58,-24}, -{53,58,-23}, -{53,58,-22}, -{53,58,-21}, -{53,58,-20}, -{53,58,-19}, -{53,58,-18}, -{53,58,-17}, -{53,58,-16}, -{53,58,-15}, -{53,58,-14}, -{53,58,-13}, -{53,58,-12}, -{53,58,-11}, -{53,58,-10}, -{53,58,-9}, -{53,58,-8}, -{53,58,-7}, -{53,58,-6}, -{53,58,-5}, -{53,58,-4}, -{53,58,-3}, -{53,58,-2}, -{53,58,-1}, -{53,58,0}, -{53,58,1}, -{53,58,2}, -{53,58,3}, -{53,58,4}, -{53,58,5}, -{53,58,6}, -{53,58,7}, -{53,58,8}, -{53,58,9}, -{53,58,10}, -{53,58,11}, -{53,58,12}, -{53,58,13}, -{53,58,14}, -{53,58,15}, -{53,58,16}, -{53,58,17}, -{53,58,18}, -{53,58,19}, -{53,58,20}, -{53,58,21}, -{53,58,22}, -{53,58,23}, -{53,58,24}, -{53,58,25}, -{53,58,26}, -{53,58,27}, -{53,58,28}, -{53,58,29}, -{53,58,30}, -{53,58,31}, -{53,58,32}, -{53,58,33}, -{53,58,34}, -{53,58,35}, -{53,58,36}, -{53,58,37}, -{53,58,38}, -{53,58,39}, -{53,58,40}, -{53,58,41}, -{53,58,42}, -{53,58,43}, -{53,58,44}, -{53,58,45}, -{53,58,46}, -{53,58,47}, -{53,58,48}, -{53,58,49}, -{53,58,50}, -{53,58,51}, -{53,58,52}, -{53,58,53}, -{53,58,54}, -{53,58,55}, -{53,58,56}, -{53,58,57}, -{53,58,58}, -{53,58,59}, -{53,58,60}, -{53,58,61}, -{53,58,62}, -{53,58,63}, -{53,58,64}, -{53,59,-73}, -{53,59,-72}, -{53,59,-71}, -{53,59,-70}, -{53,59,-69}, -{53,59,-68}, -{53,59,-67}, -{53,59,-66}, -{53,59,-65}, -{53,59,-64}, -{53,59,-63}, -{53,59,-62}, -{53,59,-61}, -{53,59,-60}, -{53,59,-59}, -{53,59,-58}, -{53,59,-57}, -{53,59,-56}, -{53,59,-55}, -{53,59,-54}, -{53,59,-53}, -{53,59,-52}, -{53,59,-51}, -{53,59,-50}, -{53,59,-49}, -{53,59,-48}, -{53,59,-47}, -{53,59,-46}, -{53,59,-45}, -{53,59,-44}, -{53,59,-43}, -{53,59,-42}, -{53,59,-41}, -{53,59,-40}, -{53,59,-39}, -{53,59,-38}, -{53,59,-37}, -{53,59,-36}, -{53,59,-35}, -{53,59,-34}, -{53,59,-33}, -{53,59,-32}, -{53,59,-31}, -{53,59,-30}, -{53,59,-29}, -{53,59,-28}, -{53,59,-27}, -{53,59,-26}, -{53,59,-25}, -{53,59,-24}, -{53,59,-23}, -{53,59,-22}, -{53,59,-21}, -{53,59,-20}, -{53,59,-19}, -{53,59,-18}, -{53,59,-17}, -{53,59,-16}, -{53,59,-15}, -{53,59,-14}, -{53,59,-13}, -{53,59,-12}, -{53,59,-11}, -{53,59,-10}, -{53,59,-9}, -{53,59,-8}, -{53,59,-7}, -{53,59,-6}, -{53,59,-5}, -{53,59,-4}, -{53,59,-3}, -{53,59,-2}, -{53,59,-1}, -{53,59,0}, -{53,59,1}, -{53,59,2}, -{53,59,3}, -{53,59,4}, -{53,59,5}, -{53,59,6}, -{53,59,7}, -{53,59,8}, -{53,59,9}, -{53,59,10}, -{53,59,11}, -{53,59,12}, -{53,59,13}, -{53,59,14}, -{53,59,15}, -{53,59,16}, -{53,59,17}, -{53,59,18}, -{53,59,19}, -{53,59,20}, -{53,59,21}, -{53,59,22}, -{53,59,23}, -{53,59,24}, -{53,59,25}, -{53,59,26}, -{53,59,27}, -{53,59,28}, -{53,59,29}, -{53,59,30}, -{53,59,31}, -{53,59,32}, -{53,59,33}, -{53,59,34}, -{53,59,35}, -{53,59,36}, -{53,59,37}, -{53,59,38}, -{53,59,39}, -{53,59,40}, -{53,59,41}, -{53,59,42}, -{53,59,43}, -{53,59,44}, -{53,59,45}, -{53,59,46}, -{53,59,47}, -{53,59,48}, -{53,59,49}, -{53,59,50}, -{53,59,51}, -{53,59,52}, -{53,59,53}, -{53,59,54}, -{53,59,55}, -{53,59,56}, -{53,59,57}, -{53,59,58}, -{53,59,59}, -{53,59,60}, -{53,59,61}, -{53,59,62}, -{53,59,63}, -{53,59,64}, -{53,60,-73}, -{53,60,-72}, -{53,60,-71}, -{53,60,-70}, -{53,60,-69}, -{53,60,-68}, -{53,60,-67}, -{53,60,-66}, -{53,60,-65}, -{53,60,-64}, -{53,60,-63}, -{53,60,-62}, -{53,60,-61}, -{53,60,-60}, -{53,60,-59}, -{53,60,-58}, -{53,60,-57}, -{53,60,-56}, -{53,60,-55}, -{53,60,-54}, -{53,60,-53}, -{53,60,-52}, -{53,60,-51}, -{53,60,-50}, -{53,60,-49}, -{53,60,-48}, -{53,60,-47}, -{53,60,-46}, -{53,60,-45}, -{53,60,-44}, -{53,60,-43}, -{53,60,-42}, -{53,60,-41}, -{53,60,-40}, -{53,60,-39}, -{53,60,-38}, -{53,60,-37}, -{53,60,-36}, -{53,60,-35}, -{53,60,-34}, -{53,60,-33}, -{53,60,-32}, -{53,60,-31}, -{53,60,-30}, -{53,60,-29}, -{53,60,-28}, -{53,60,-27}, -{53,60,-26}, -{53,60,-25}, -{53,60,-24}, -{53,60,-23}, -{53,60,-22}, -{53,60,-21}, -{53,60,-20}, -{53,60,-19}, -{53,60,-18}, -{53,60,-17}, -{53,60,-16}, -{53,60,-15}, -{53,60,-14}, -{53,60,-13}, -{53,60,-12}, -{53,60,-11}, -{53,60,-10}, -{53,60,-9}, -{53,60,-8}, -{53,60,-7}, -{53,60,-6}, -{53,60,-5}, -{53,60,-4}, -{53,60,-3}, -{53,60,-2}, -{53,60,-1}, -{53,60,0}, -{53,60,1}, -{53,60,2}, -{53,60,3}, -{53,60,4}, -{53,60,5}, -{53,60,6}, -{53,60,7}, -{53,60,8}, -{53,60,9}, -{53,60,10}, -{53,60,11}, -{53,60,12}, -{53,60,13}, -{53,60,14}, -{53,60,15}, -{53,60,16}, -{53,60,17}, -{53,60,18}, -{53,60,19}, -{53,60,20}, -{53,60,21}, -{53,60,22}, -{53,60,23}, -{53,60,24}, -{53,60,25}, -{53,60,26}, -{53,60,27}, -{53,60,28}, -{53,60,29}, -{53,60,30}, -{53,60,31}, -{53,60,32}, -{53,60,33}, -{53,60,34}, -{53,60,35}, -{53,60,36}, -{53,60,37}, -{53,60,38}, -{53,60,39}, -{53,60,40}, -{53,60,41}, -{53,60,42}, -{53,60,43}, -{53,60,44}, -{53,60,45}, -{53,60,46}, -{53,60,47}, -{53,60,48}, -{53,60,49}, -{53,60,50}, -{53,60,51}, -{53,60,52}, -{53,60,53}, -{53,60,54}, -{53,60,55}, -{53,60,56}, -{53,60,57}, -{53,60,58}, -{53,60,59}, -{53,60,60}, -{53,60,61}, -{53,60,62}, -{53,60,63}, -{53,60,64}, -{53,61,-73}, -{53,61,-72}, -{53,61,-71}, -{53,61,-70}, -{53,61,-69}, -{53,61,-68}, -{53,61,-67}, -{53,61,-66}, -{53,61,-65}, -{53,61,-64}, -{53,61,-63}, -{53,61,-62}, -{53,61,-61}, -{53,61,-60}, -{53,61,-59}, -{53,61,-58}, -{53,61,-57}, -{53,61,-56}, -{53,61,-55}, -{53,61,-54}, -{53,61,-53}, -{53,61,-52}, -{53,61,-51}, -{53,61,-50}, -{53,61,-49}, -{53,61,-48}, -{53,61,-47}, -{53,61,-46}, -{53,61,-45}, -{53,61,-44}, -{53,61,-43}, -{53,61,-42}, -{53,61,-41}, -{53,61,-40}, -{53,61,-39}, -{53,61,-38}, -{53,61,-37}, -{53,61,-36}, -{53,61,-35}, -{53,61,-34}, -{53,61,-33}, -{53,61,-32}, -{53,61,-31}, -{53,61,-30}, -{53,61,-29}, -{53,61,-28}, -{53,61,-27}, -{53,61,-26}, -{53,61,-25}, -{53,61,-24}, -{53,61,-23}, -{53,61,-22}, -{53,61,-21}, -{53,61,-20}, -{53,61,-19}, -{53,61,-18}, -{53,61,-17}, -{53,61,-16}, -{53,61,-15}, -{53,61,-14}, -{53,61,-13}, -{53,61,-12}, -{53,61,-11}, -{53,61,-10}, -{53,61,-9}, -{53,61,-8}, -{53,61,-7}, -{53,61,-6}, -{53,61,-5}, -{53,61,-4}, -{53,61,-3}, -{53,61,-2}, -{53,61,-1}, -{53,61,0}, -{53,61,1}, -{53,61,2}, -{53,61,3}, -{53,61,4}, -{53,61,5}, -{53,61,6}, -{53,61,7}, -{53,61,8}, -{53,61,9}, -{53,61,10}, -{53,61,11}, -{53,61,12}, -{53,61,13}, -{53,61,14}, -{53,61,15}, -{53,61,16}, -{53,61,17}, -{53,61,18}, -{53,61,19}, -{53,61,20}, -{53,61,21}, -{53,61,22}, -{53,61,23}, -{53,61,24}, -{53,61,25}, -{53,61,26}, -{53,61,27}, -{53,61,28}, -{53,61,29}, -{53,61,30}, -{53,61,31}, -{53,61,32}, -{53,61,33}, -{53,61,34}, -{53,61,35}, -{53,61,36}, -{53,61,37}, -{53,61,38}, -{53,61,39}, -{53,61,40}, -{53,61,41}, -{53,61,42}, -{53,61,43}, -{53,61,44}, -{53,61,45}, -{53,61,46}, -{53,61,47}, -{53,61,48}, -{53,61,49}, -{53,61,50}, -{53,61,51}, -{53,61,52}, -{53,61,53}, -{53,61,54}, -{53,61,55}, -{53,61,56}, -{53,61,57}, -{53,61,58}, -{53,61,59}, -{53,61,60}, -{53,61,61}, -{53,61,62}, -{53,61,63}, -{53,61,64}, -{53,62,-73}, -{53,62,-72}, -{53,62,-71}, -{53,62,-70}, -{53,62,-69}, -{53,62,-68}, -{53,62,-67}, -{53,62,-66}, -{53,62,-65}, -{53,62,-64}, -{53,62,-63}, -{53,62,-62}, -{53,62,-61}, -{53,62,-60}, -{53,62,-59}, -{53,62,-58}, -{53,62,-57}, -{53,62,-56}, -{53,62,-55}, -{53,62,-54}, -{53,62,-53}, -{53,62,-52}, -{53,62,-51}, -{53,62,-50}, -{53,62,-49}, -{53,62,-48}, -{53,62,-47}, -{53,62,-46}, -{53,62,-45}, -{53,62,-44}, -{53,62,-43}, -{53,62,-42}, -{53,62,-41}, -{53,62,-40}, -{53,62,-39}, -{53,62,-38}, -{53,62,-37}, -{53,62,-36}, -{53,62,-35}, -{53,62,-34}, -{53,62,-33}, -{53,62,-32}, -{53,62,-31}, -{53,62,-30}, -{53,62,-29}, -{53,62,-28}, -{53,62,-27}, -{53,62,-26}, -{53,62,-25}, -{53,62,-24}, -{53,62,-23}, -{53,62,-22}, -{53,62,-21}, -{53,62,-20}, -{53,62,-19}, -{53,62,-18}, -{53,62,-17}, -{53,62,-16}, -{53,62,-15}, -{53,62,-14}, -{53,62,-13}, -{53,62,-12}, -{53,62,-11}, -{53,62,-10}, -{53,62,-9}, -{53,62,-8}, -{53,62,-7}, -{53,62,-6}, -{53,62,-5}, -{53,62,-4}, -{53,62,-3}, -{53,62,-2}, -{53,62,-1}, -{53,62,0}, -{53,62,1}, -{53,62,2}, -{53,62,3}, -{53,62,4}, -{53,62,5}, -{53,62,6}, -{53,62,7}, -{53,62,8}, -{53,62,9}, -{53,62,10}, -{53,62,11}, -{53,62,12}, -{53,62,13}, -{53,62,14}, -{53,62,15}, -{53,62,16}, -{53,62,17}, -{53,62,18}, -{53,62,19}, -{53,62,20}, -{53,62,21}, -{53,62,22}, -{53,62,23}, -{53,62,24}, -{53,62,25}, -{53,62,26}, -{53,62,27}, -{53,62,28}, -{53,62,29}, -{53,62,30}, -{53,62,31}, -{53,62,32}, -{53,62,33}, -{53,62,34}, -{53,62,35}, -{53,62,36}, -{53,62,37}, -{53,62,38}, -{53,62,39}, -{53,62,40}, -{53,62,41}, -{53,62,42}, -{53,62,43}, -{53,62,44}, -{53,62,45}, -{53,62,46}, -{53,62,47}, -{53,62,48}, -{53,62,49}, -{53,62,50}, -{53,62,51}, -{53,62,52}, -{53,62,53}, -{53,62,54}, -{53,62,55}, -{53,62,56}, -{53,62,57}, -{53,62,58}, -{53,62,59}, -{53,62,60}, -{53,62,61}, -{53,62,62}, -{53,62,63}, -{53,62,64}, -{53,63,-73}, -{53,63,-72}, -{53,63,-71}, -{53,63,-70}, -{53,63,-69}, -{53,63,-68}, -{53,63,-67}, -{53,63,-66}, -{53,63,-65}, -{53,63,-64}, -{53,63,-63}, -{53,63,-62}, -{53,63,-61}, -{53,63,-60}, -{53,63,-59}, -{53,63,-58}, -{53,63,-57}, -{53,63,-56}, -{53,63,-55}, -{53,63,-54}, -{53,63,-53}, -{53,63,-52}, -{53,63,-51}, -{53,63,-50}, -{53,63,-49}, -{53,63,-48}, -{53,63,-47}, -{53,63,-46}, -{53,63,-45}, -{53,63,-44}, -{53,63,-43}, -{53,63,-42}, -{53,63,-41}, -{53,63,-40}, -{53,63,-39}, -{53,63,-38}, -{53,63,-37}, -{53,63,-36}, -{53,63,-35}, -{53,63,-34}, -{53,63,-33}, -{53,63,-32}, -{53,63,-31}, -{53,63,-30}, -{53,63,-29}, -{53,63,-28}, -{53,63,-27}, -{53,63,-26}, -{53,63,-25}, -{53,63,-24}, -{53,63,-23}, -{53,63,-22}, -{53,63,-21}, -{53,63,-20}, -{53,63,-19}, -{53,63,-18}, -{53,63,-17}, -{53,63,-16}, -{53,63,-15}, -{53,63,-14}, -{53,63,-13}, -{53,63,-12}, -{53,63,-11}, -{53,63,-10}, -{53,63,-9}, -{53,63,-8}, -{53,63,-7}, -{53,63,-6}, -{53,63,-5}, -{53,63,-4}, -{53,63,-3}, -{53,63,-2}, -{53,63,-1}, -{53,63,0}, -{53,63,1}, -{53,63,2}, -{53,63,3}, -{53,63,4}, -{53,63,5}, -{53,63,6}, -{53,63,7}, -{53,63,8}, -{53,63,9}, -{53,63,10}, -{53,63,11}, -{53,63,12}, -{53,63,13}, -{53,63,14}, -{53,63,15}, -{53,63,16}, -{53,63,17}, -{53,63,18}, -{53,63,19}, -{53,63,20}, -{53,63,21}, -{53,63,22}, -{53,63,23}, -{53,63,24}, -{53,63,25}, -{53,63,26}, -{53,63,27}, -{53,63,28}, -{53,63,29}, -{53,63,30}, -{53,63,31}, -{53,63,32}, -{53,63,33}, -{53,63,34}, -{53,63,35}, -{53,63,36}, -{53,63,37}, -{53,63,38}, -{53,63,39}, -{53,63,40}, -{53,63,41}, -{53,63,42}, -{53,63,43}, -{53,63,44}, -{53,63,45}, -{53,63,46}, -{53,63,47}, -{53,63,48}, -{53,63,49}, -{53,63,50}, -{53,63,51}, -{53,63,52}, -{53,63,53}, -{53,63,54}, -{53,63,55}, -{53,63,56}, -{53,63,57}, -{53,63,58}, -{53,63,59}, -{53,63,60}, -{53,63,61}, -{53,63,62}, -{53,63,63}, -{53,63,64}, -{53,64,-73}, -{53,64,-72}, -{53,64,-71}, -{53,64,-70}, -{53,64,-69}, -{53,64,-68}, -{53,64,-67}, -{53,64,-66}, -{53,64,-65}, -{53,64,-64}, -{53,64,-63}, -{53,64,-62}, -{53,64,-61}, -{53,64,-60}, -{53,64,-59}, -{53,64,-58}, -{53,64,-57}, -{53,64,-56}, -{53,64,-55}, -{53,64,-54}, -{53,64,-53}, -{53,64,-52}, -{53,64,-51}, -{53,64,-50}, -{53,64,-49}, -{53,64,-48}, -{53,64,-47}, -{53,64,-46}, -{53,64,-45}, -{53,64,-44}, -{53,64,-43}, -{53,64,-42}, -{53,64,-41}, -{53,64,-40}, -{53,64,-39}, -{53,64,-38}, -{53,64,-37}, -{53,64,-36}, -{53,64,-35}, -{53,64,-34}, -{53,64,-33}, -{53,64,-32}, -{53,64,-31}, -{53,64,-30}, -{53,64,-29}, -{53,64,-28}, -{53,64,-27}, -{53,64,-26}, -{53,64,-25}, -{53,64,-24}, -{53,64,-23}, -{53,64,-22}, -{53,64,-21}, -{53,64,-20}, -{53,64,-19}, -{53,64,-18}, -{53,64,-17}, -{53,64,-16}, -{53,64,-15}, -{53,64,-14}, -{53,64,-13}, -{53,64,-12}, -{53,64,-11}, -{53,64,-10}, -{53,64,-9}, -{53,64,-8}, -{53,64,-7}, -{53,64,-6}, -{53,64,-5}, -{53,64,-4}, -{53,64,-3}, -{53,64,-2}, -{53,64,-1}, -{53,64,0}, -{53,64,1}, -{53,64,2}, -{53,64,3}, -{53,64,4}, -{53,64,5}, -{53,64,6}, -{53,64,7}, -{53,64,8}, -{53,64,9}, -{53,64,10}, -{53,64,11}, -{53,64,12}, -{53,64,13}, -{53,64,14}, -{53,64,15}, -{53,64,16}, -{53,64,17}, -{53,64,18}, -{53,64,19}, -{53,64,20}, -{53,64,21}, -{53,64,22}, -{53,64,23}, -{53,64,24}, -{53,64,25}, -{53,64,26}, -{53,64,27}, -{53,64,28}, -{53,64,29}, -{53,64,30}, -{53,64,31}, -{53,64,32}, -{53,64,33}, -{53,64,34}, -{53,64,35}, -{53,64,36}, -{53,64,37}, -{53,64,38}, -{53,64,39}, -{53,64,40}, -{53,64,41}, -{53,64,42}, -{53,64,43}, -{53,64,44}, -{53,64,45}, -{53,64,46}, -{53,64,47}, -{53,64,48}, -{53,64,49}, -{53,64,50}, -{53,64,51}, -{53,64,52}, -{53,64,53}, -{53,64,54}, -{53,64,55}, -{53,64,56}, -{53,64,57}, -{53,64,58}, -{53,64,59}, -{53,64,60}, -{53,64,61}, -{53,64,62}, -{53,64,63}, -{53,64,64}, -{53,65,-73}, -{53,65,-72}, -{53,65,-71}, -{53,65,-70}, -{53,65,-69}, -{53,65,-68}, -{53,65,-67}, -{53,65,-66}, -{53,65,-65}, -{53,65,-64}, -{53,65,-63}, -{53,65,-62}, -{53,65,-61}, -{53,65,-60}, -{53,65,-59}, -{53,65,-58}, -{53,65,-57}, -{53,65,-56}, -{53,65,-55}, -{53,65,-54}, -{53,65,-53}, -{53,65,-52}, -{53,65,-51}, -{53,65,-50}, -{53,65,-49}, -{53,65,-48}, -{53,65,-47}, -{53,65,-46}, -{53,65,-45}, -{53,65,-44}, -{53,65,-43}, -{53,65,-42}, -{53,65,-41}, -{53,65,-40}, -{53,65,-39}, -{53,65,-38}, -{53,65,-37}, -{53,65,-36}, -{53,65,-35}, -{53,65,-34}, -{53,65,-33}, -{53,65,-32}, -{53,65,-31}, -{53,65,-30}, -{53,65,-29}, -{53,65,-28}, -{53,65,-27}, -{53,65,-26}, -{53,65,-25}, -{53,65,-24}, -{53,65,-23}, -{53,65,-22}, -{53,65,-21}, -{53,65,-20}, -{53,65,-19}, -{53,65,-18}, -{53,65,-17}, -{53,65,-16}, -{53,65,-15}, -{53,65,-14}, -{53,65,-13}, -{53,65,-12}, -{53,65,-11}, -{53,65,-10}, -{53,65,-9}, -{53,65,-8}, -{53,65,-7}, -{53,65,-6}, -{53,65,-5}, -{53,65,-4}, -{53,65,-3}, -{53,65,-2}, -{53,65,-1}, -{53,65,0}, -{53,65,1}, -{53,65,2}, -{53,65,3}, -{53,65,4}, -{53,65,5}, -{53,65,6}, -{53,65,7}, -{53,65,8}, -{53,65,9}, -{53,65,10}, -{53,65,11}, -{53,65,12}, -{53,65,13}, -{53,65,14}, -{53,65,15}, -{53,65,16}, -{53,65,17}, -{53,65,18}, -{53,65,19}, -{53,65,20}, -{53,65,21}, -{53,65,22}, -{53,65,23}, -{53,65,24}, -{53,65,25}, -{53,65,26}, -{53,65,27}, -{53,65,28}, -{53,65,29}, -{53,65,30}, -{53,65,31}, -{53,65,32}, -{53,65,33}, -{53,65,34}, -{53,65,35}, -{53,65,36}, -{53,65,37}, -{53,65,38}, -{53,65,39}, -{53,65,40}, -{53,65,41}, -{53,65,42}, -{53,65,43}, -{53,65,44}, -{53,65,45}, -{53,65,46}, -{53,65,47}, -{53,65,48}, -{53,65,49}, -{53,65,50}, -{53,65,51}, -{53,65,52}, -{53,65,53}, -{53,65,54}, -{53,65,55}, -{53,65,56}, -{53,65,57}, -{53,65,58}, -{53,65,59}, -{53,65,60}, -{53,65,61}, -{53,65,62}, -{53,65,63}, -{53,65,64}, -{53,65,65}, -{53,66,-73}, -{53,66,-72}, -{53,66,-71}, -{53,66,-70}, -{53,66,-69}, -{53,66,-68}, -{53,66,-67}, -{53,66,-66}, -{53,66,-65}, -{53,66,-64}, -{53,66,-63}, -{53,66,-62}, -{53,66,-61}, -{53,66,-60}, -{53,66,-59}, -{53,66,-58}, -{53,66,-57}, -{53,66,-56}, -{53,66,-55}, -{53,66,-54}, -{53,66,-53}, -{53,66,-52}, -{53,66,-51}, -{53,66,-50}, -{53,66,-49}, -{53,66,-48}, -{53,66,-47}, -{53,66,-46}, -{53,66,-45}, -{53,66,-44}, -{53,66,-43}, -{53,66,-42}, -{53,66,-41}, -{53,66,-40}, -{53,66,-39}, -{53,66,-38}, -{53,66,-37}, -{53,66,-36}, -{53,66,-35}, -{53,66,-34}, -{53,66,-33}, -{53,66,-32}, -{53,66,-31}, -{53,66,-30}, -{53,66,-29}, -{53,66,-28}, -{53,66,-27}, -{53,66,-26}, -{53,66,-25}, -{53,66,-24}, -{53,66,-23}, -{53,66,-22}, -{53,66,-21}, -{53,66,-20}, -{53,66,-19}, -{53,66,-18}, -{53,66,-17}, -{53,66,-16}, -{53,66,-15}, -{53,66,-14}, -{53,66,-13}, -{53,66,-12}, -{53,66,-11}, -{53,66,-10}, -{53,66,-9}, -{53,66,-8}, -{53,66,-7}, -{53,66,-6}, -{53,66,-5}, -{53,66,-4}, -{53,66,-3}, -{53,66,-2}, -{53,66,-1}, -{53,66,0}, -{53,66,1}, -{53,66,2}, -{53,66,3}, -{53,66,4}, -{53,66,5}, -{53,66,6}, -{53,66,7}, -{53,66,8}, -{53,66,9}, -{53,66,10}, -{53,66,11}, -{53,66,12}, -{53,66,13}, -{53,66,14}, -{53,66,15}, -{53,66,16}, -{53,66,17}, -{53,66,18}, -{53,66,19}, -{53,66,20}, -{53,66,21}, -{53,66,22}, -{53,66,23}, -{53,66,24}, -{53,66,25}, -{53,66,26}, -{53,66,27}, -{53,66,28}, -{53,66,29}, -{53,66,30}, -{53,66,31}, -{53,66,32}, -{53,66,33}, -{53,66,34}, -{53,66,35}, -{53,66,36}, -{53,66,37}, -{53,66,38}, -{53,66,39}, -{53,66,40}, -{53,66,41}, -{53,66,42}, -{53,66,43}, -{53,66,44}, -{53,66,45}, -{53,66,46}, -{53,66,47}, -{53,66,48}, -{53,66,49}, -{53,66,50}, -{53,66,51}, -{53,66,52}, -{53,66,53}, -{53,66,54}, -{53,66,55}, -{53,66,56}, -{53,66,57}, -{53,66,58}, -{53,66,59}, -{53,66,60}, -{53,66,61}, -{53,66,62}, -{53,66,63}, -{53,66,64}, -{53,66,65}, -{53,67,-73}, -{53,67,-72}, -{53,67,-71}, -{53,67,-70}, -{53,67,-69}, -{53,67,-68}, -{53,67,-67}, -{53,67,-66}, -{53,67,-65}, -{53,67,-64}, -{53,67,-63}, -{53,67,-62}, -{53,67,-61}, -{53,67,-60}, -{53,67,-59}, -{53,67,-58}, -{53,67,-57}, -{53,67,-56}, -{53,67,-55}, -{53,67,-54}, -{53,67,-53}, -{53,67,-52}, -{53,67,-51}, -{53,67,-50}, -{53,67,-49}, -{53,67,-48}, -{53,67,-47}, -{53,67,-46}, -{53,67,-45}, -{53,67,-44}, -{53,67,-43}, -{53,67,-42}, -{53,67,-41}, -{53,67,-40}, -{53,67,-39}, -{53,67,-38}, -{53,67,-37}, -{53,67,-36}, -{53,67,-35}, -{53,67,-34}, -{53,67,-33}, -{53,67,-32}, -{53,67,-31}, -{53,67,-30}, -{53,67,-29}, -{53,67,-28}, -{53,67,-27}, -{53,67,-26}, -{53,67,-25}, -{53,67,-24}, -{53,67,-23}, -{53,67,-22}, -{53,67,-21}, -{53,67,-20}, -{53,67,-19}, -{53,67,-18}, -{53,67,-17}, -{53,67,-16}, -{53,67,-15}, -{53,67,-14}, -{53,67,-13}, -{53,67,-12}, -{53,67,-11}, -{53,67,-10}, -{53,67,-9}, -{53,67,-8}, -{53,67,-7}, -{53,67,-6}, -{53,67,-5}, -{53,67,-4}, -{53,67,-3}, -{53,67,-2}, -{53,67,-1}, -{53,67,0}, -{53,67,1}, -{53,67,2}, -{53,67,3}, -{53,67,4}, -{53,67,5}, -{53,67,6}, -{53,67,7}, -{53,67,8}, -{53,67,9}, -{53,67,10}, -{53,67,11}, -{53,67,12}, -{53,67,13}, -{53,67,14}, -{53,67,15}, -{53,67,16}, -{53,67,17}, -{53,67,18}, -{53,67,19}, -{53,67,20}, -{53,67,21}, -{53,67,22}, -{53,67,23}, -{53,67,24}, -{53,67,25}, -{53,67,26}, -{53,67,27}, -{53,67,28}, -{53,67,29}, -{53,67,30}, -{53,67,31}, -{53,67,32}, -{53,67,33}, -{53,67,34}, -{53,67,35}, -{53,67,36}, -{53,67,37}, -{53,67,38}, -{53,67,39}, -{53,67,40}, -{53,67,41}, -{53,67,42}, -{53,67,43}, -{53,67,44}, -{53,67,45}, -{53,67,46}, -{53,67,47}, -{53,67,48}, -{53,67,49}, -{53,67,50}, -{53,67,51}, -{53,67,52}, -{53,67,53}, -{53,67,54}, -{53,67,55}, -{53,67,56}, -{53,67,57}, -{53,67,58}, -{53,67,59}, -{53,67,60}, -{53,67,61}, -{53,67,62}, -{53,67,63}, -{53,67,64}, -{53,67,65}, -{53,68,-73}, -{53,68,-72}, -{53,68,-71}, -{53,68,-70}, -{53,68,-69}, -{53,68,-68}, -{53,68,-67}, -{53,68,-66}, -{53,68,-65}, -{53,68,-64}, -{53,68,-63}, -{53,68,-62}, -{53,68,-61}, -{53,68,-60}, -{53,68,-59}, -{53,68,-58}, -{53,68,-57}, -{53,68,-56}, -{53,68,-55}, -{53,68,-54}, -{53,68,-53}, -{53,68,-52}, -{53,68,-51}, -{53,68,-50}, -{53,68,-49}, -{53,68,-48}, -{53,68,-47}, -{53,68,-46}, -{53,68,-45}, -{53,68,-44}, -{53,68,-43}, -{53,68,-42}, -{53,68,-41}, -{53,68,-40}, -{53,68,-39}, -{53,68,-38}, -{53,68,-37}, -{53,68,-36}, -{53,68,-35}, -{53,68,-34}, -{53,68,-33}, -{53,68,-32}, -{53,68,-31}, -{53,68,-30}, -{53,68,-29}, -{53,68,-28}, -{53,68,-27}, -{53,68,-26}, -{53,68,-25}, -{53,68,-24}, -{53,68,-23}, -{53,68,-22}, -{53,68,-21}, -{53,68,-20}, -{53,68,-19}, -{53,68,-18}, -{53,68,-17}, -{53,68,-16}, -{53,68,-15}, -{53,68,-14}, -{53,68,-13}, -{53,68,-12}, -{53,68,-11}, -{53,68,-10}, -{53,68,-9}, -{53,68,-8}, -{53,68,-7}, -{53,68,-6}, -{53,68,-5}, -{53,68,-4}, -{53,68,-3}, -{53,68,-2}, -{53,68,-1}, -{53,68,0}, -{53,68,1}, -{53,68,2}, -{53,68,3}, -{53,68,4}, -{53,68,5}, -{53,68,6}, -{53,68,7}, -{53,68,8}, -{53,68,9}, -{53,68,10}, -{53,68,11}, -{53,68,12}, -{53,68,13}, -{53,68,14}, -{53,68,15}, -{53,68,16}, -{53,68,17}, -{53,68,18}, -{53,68,19}, -{53,68,20}, -{53,68,21}, -{53,68,22}, -{53,68,23}, -{53,68,24}, -{53,68,25}, -{53,68,26}, -{53,68,27}, -{53,68,28}, -{53,68,29}, -{53,68,30}, -{53,68,31}, -{53,68,32}, -{53,68,33}, -{53,68,34}, -{53,68,35}, -{53,68,36}, -{53,68,37}, -{53,68,38}, -{53,68,39}, -{53,68,40}, -{53,68,41}, -{53,68,42}, -{53,68,43}, -{53,68,44}, -{53,68,45}, -{53,68,46}, -{53,68,47}, -{53,68,48}, -{53,68,49}, -{53,68,50}, -{53,68,51}, -{53,68,52}, -{53,68,53}, -{53,68,54}, -{53,68,55}, -{53,68,56}, -{53,68,57}, -{53,68,58}, -{53,68,59}, -{53,68,60}, -{53,68,61}, -{53,68,62}, -{53,68,63}, -{53,68,64}, -{53,68,65}, -{53,69,-73}, -{53,69,-72}, -{53,69,-71}, -{53,69,-70}, -{53,69,-69}, -{53,69,-68}, -{53,69,-67}, -{53,69,-66}, -{53,69,-65}, -{53,69,-64}, -{53,69,-63}, -{53,69,-62}, -{53,69,-61}, -{53,69,-60}, -{53,69,-59}, -{53,69,-58}, -{53,69,-57}, -{53,69,-56}, -{53,69,-55}, -{53,69,-54}, -{53,69,-53}, -{53,69,-52}, -{53,69,-51}, -{53,69,-50}, -{53,69,-49}, -{53,69,-48}, -{53,69,-47}, -{53,69,-46}, -{53,69,-45}, -{53,69,-44}, -{53,69,-43}, -{53,69,-42}, -{53,69,-41}, -{53,69,-40}, -{53,69,-39}, -{53,69,-38}, -{53,69,-37}, -{53,69,-36}, -{53,69,-35}, -{53,69,-34}, -{53,69,-33}, -{53,69,-32}, -{53,69,-31}, -{53,69,-30}, -{53,69,-29}, -{53,69,-28}, -{53,69,-27}, -{53,69,-26}, -{53,69,-25}, -{53,69,-24}, -{53,69,-23}, -{53,69,-22}, -{53,69,-21}, -{53,69,-20}, -{53,69,-19}, -{53,69,-18}, -{53,69,-17}, -{53,69,-16}, -{53,69,-15}, -{53,69,-14}, -{53,69,-13}, -{53,69,-12}, -{53,69,-11}, -{53,69,-10}, -{53,69,-9}, -{53,69,-8}, -{53,69,-7}, -{53,69,-6}, -{53,69,-5}, -{53,69,-4}, -{53,69,-3}, -{53,69,-2}, -{53,69,-1}, -{53,69,0}, -{53,69,1}, -{53,69,2}, -{53,69,3}, -{53,69,4}, -{53,69,5}, -{53,69,6}, -{53,69,7}, -{53,69,8}, -{53,69,9}, -{53,69,10}, -{53,69,11}, -{53,69,12}, -{53,69,13}, -{53,69,14}, -{53,69,15}, -{53,69,16}, -{53,69,17}, -{53,69,18}, -{53,69,19}, -{53,69,20}, -{53,69,21}, -{53,69,22}, -{53,69,23}, -{53,69,24}, -{53,69,25}, -{53,69,26}, -{53,69,27}, -{53,69,28}, -{53,69,29}, -{53,69,30}, -{53,69,31}, -{53,69,32}, -{53,69,33}, -{53,69,34}, -{53,69,35}, -{53,69,36}, -{53,69,37}, -{53,69,38}, -{53,69,39}, -{53,69,40}, -{53,69,41}, -{53,69,42}, -{53,69,43}, -{53,69,44}, -{53,69,45}, -{53,69,46}, -{53,69,47}, -{53,69,48}, -{53,69,49}, -{53,69,50}, -{53,69,51}, -{53,69,52}, -{53,69,53}, -{53,69,54}, -{53,69,55}, -{53,69,56}, -{53,69,57}, -{53,69,58}, -{53,69,59}, -{53,69,60}, -{53,69,61}, -{53,69,62}, -{53,69,63}, -{53,69,64}, -{53,69,65}, -{53,70,-73}, -{53,70,-72}, -{53,70,-71}, -{53,70,-70}, -{53,70,-69}, -{53,70,-68}, -{53,70,-67}, -{53,70,-66}, -{53,70,-65}, -{53,70,-64}, -{53,70,-63}, -{53,70,-62}, -{53,70,-61}, -{53,70,-60}, -{53,70,-59}, -{53,70,-58}, -{53,70,-57}, -{53,70,-56}, -{53,70,-55}, -{53,70,-54}, -{53,70,-53}, -{53,70,-52}, -{53,70,-51}, -{53,70,-50}, -{53,70,-49}, -{53,70,-48}, -{53,70,-47}, -{53,70,-46}, -{53,70,-45}, -{53,70,-44}, -{53,70,-43}, -{53,70,-42}, -{53,70,-41}, -{53,70,-40}, -{53,70,-39}, -{53,70,-38}, -{53,70,-37}, -{53,70,-36}, -{53,70,-35}, -{53,70,-34}, -{53,70,-33}, -{53,70,-32}, -{53,70,-31}, -{53,70,-30}, -{53,70,-29}, -{53,70,-28}, -{53,70,-27}, -{53,70,-26}, -{53,70,-25}, -{53,70,-24}, -{53,70,-23}, -{53,70,-22}, -{53,70,-21}, -{53,70,-20}, -{53,70,-19}, -{53,70,-18}, -{53,70,-17}, -{53,70,-16}, -{53,70,-15}, -{53,70,-14}, -{53,70,-13}, -{53,70,-12}, -{53,70,-11}, -{53,70,-10}, -{53,70,-9}, -{53,70,-8}, -{53,70,-7}, -{53,70,-6}, -{53,70,-5}, -{53,70,-4}, -{53,70,-3}, -{53,70,-2}, -{53,70,-1}, -{53,70,0}, -{53,70,1}, -{53,70,2}, -{53,70,3}, -{53,70,4}, -{53,70,5}, -{53,70,6}, -{53,70,7}, -{53,70,8}, -{53,70,9}, -{53,70,10}, -{53,70,11}, -{53,70,12}, -{53,70,13}, -{53,70,14}, -{53,70,15}, -{53,70,16}, -{53,70,17}, -{53,70,18}, -{53,70,19}, -{53,70,20}, -{53,70,21}, -{53,70,22}, -{53,70,23}, -{53,70,24}, -{53,70,25}, -{53,70,26}, -{53,70,27}, -{53,70,28}, -{53,70,29}, -{53,70,30}, -{53,70,31}, -{53,70,32}, -{53,70,33}, -{53,70,34}, -{53,70,35}, -{53,70,36}, -{53,70,37}, -{53,70,38}, -{53,70,39}, -{53,70,40}, -{53,70,41}, -{53,70,42}, -{53,70,43}, -{53,70,44}, -{53,70,45}, -{53,70,46}, -{53,70,47}, -{53,70,48}, -{53,70,49}, -{53,70,50}, -{53,70,51}, -{53,70,52}, -{53,70,53}, -{53,70,54}, -{53,70,55}, -{53,70,56}, -{53,70,57}, -{53,70,58}, -{53,70,59}, -{53,70,60}, -{53,70,61}, -{53,70,62}, -{53,70,63}, -{53,70,64}, -{53,70,65}, -{53,71,-73}, -{53,71,-72}, -{53,71,-71}, -{53,71,-70}, -{53,71,-69}, -{53,71,-68}, -{53,71,-67}, -{53,71,-66}, -{53,71,-65}, -{53,71,-64}, -{53,71,-63}, -{53,71,-62}, -{53,71,-61}, -{53,71,-60}, -{53,71,-59}, -{53,71,-58}, -{53,71,-57}, -{53,71,-56}, -{53,71,-55}, -{53,71,-54}, -{53,71,-53}, -{53,71,-52}, -{53,71,-51}, -{53,71,-50}, -{53,71,-49}, -{53,71,-48}, -{53,71,-47}, -{53,71,-46}, -{53,71,-45}, -{53,71,-44}, -{53,71,-43}, -{53,71,-42}, -{53,71,-41}, -{53,71,-40}, -{53,71,-39}, -{53,71,-38}, -{53,71,-37}, -{53,71,-36}, -{53,71,-35}, -{53,71,-34}, -{53,71,-33}, -{53,71,-32}, -{53,71,-31}, -{53,71,-30}, -{53,71,-29}, -{53,71,-28}, -{53,71,-27}, -{53,71,-26}, -{53,71,-25}, -{53,71,-24}, -{53,71,-23}, -{53,71,-22}, -{53,71,-21}, -{53,71,-20}, -{53,71,-19}, -{53,71,-18}, -{53,71,-17}, -{53,71,-16}, -{53,71,-15}, -{53,71,-14}, -{53,71,-13}, -{53,71,-12}, -{53,71,-11}, -{53,71,-10}, -{53,71,-9}, -{53,71,-8}, -{53,71,-7}, -{53,71,-6}, -{53,71,-5}, -{53,71,-4}, -{53,71,-3}, -{53,71,-2}, -{53,71,-1}, -{53,71,0}, -{53,71,1}, -{53,71,2}, -{53,71,3}, -{53,71,4}, -{53,71,5}, -{53,71,6}, -{53,71,7}, -{53,71,8}, -{53,71,9}, -{53,71,10}, -{53,71,11}, -{53,71,12}, -{53,71,13}, -{53,71,14}, -{53,71,15}, -{53,71,16}, -{53,71,17}, -{53,71,18}, -{53,71,19}, -{53,71,20}, -{53,71,21}, -{53,71,22}, -{53,71,23}, -{53,71,24}, -{53,71,25}, -{53,71,26}, -{53,71,27}, -{53,71,28}, -{53,71,29}, -{53,71,30}, -{53,71,31}, -{53,71,32}, -{53,71,33}, -{53,71,34}, -{53,71,35}, -{53,71,36}, -{53,71,37}, -{53,71,38}, -{53,71,39}, -{53,71,40}, -{53,71,41}, -{53,71,42}, -{53,71,43}, -{53,71,44}, -{53,71,45}, -{53,71,46}, -{53,71,47}, -{53,71,48}, -{53,71,49}, -{53,71,50}, -{53,71,51}, -{53,71,52}, -{53,71,53}, -{53,71,54}, -{53,71,55}, -{53,71,56}, -{53,71,57}, -{53,71,58}, -{53,71,59}, -{53,71,60}, -{53,71,61}, -{53,71,62}, -{53,71,63}, -{53,71,64}, -{53,71,65}, -{53,72,-73}, -{53,72,-72}, -{53,72,-71}, -{53,72,-70}, -{53,72,-69}, -{53,72,-68}, -{53,72,-67}, -{53,72,-66}, -{53,72,-65}, -{53,72,-64}, -{53,72,-63}, -{53,72,-62}, -{53,72,-61}, -{53,72,-60}, -{53,72,-59}, -{53,72,-58}, -{53,72,-57}, -{53,72,-56}, -{53,72,-55}, -{53,72,-54}, -{53,72,-53}, -{53,72,-52}, -{53,72,-51}, -{53,72,-50}, -{53,72,-49}, -{53,72,-48}, -{53,72,-47}, -{53,72,-46}, -{53,72,-45}, -{53,72,-44}, -{53,72,-43}, -{53,72,-42}, -{53,72,-41}, -{53,72,-40}, -{53,72,-39}, -{53,72,-38}, -{53,72,-37}, -{53,72,-36}, -{53,72,-35}, -{53,72,-34}, -{53,72,-33}, -{53,72,-32}, -{53,72,-31}, -{53,72,-30}, -{53,72,-29}, -{53,72,-28}, -{53,72,-27}, -{53,72,-26}, -{53,72,-25}, -{53,72,-24}, -{53,72,-23}, -{53,72,-22}, -{53,72,-21}, -{53,72,-20}, -{53,72,-19}, -{53,72,-18}, -{53,72,-17}, -{53,72,-16}, -{53,72,-15}, -{53,72,-14}, -{53,72,-13}, -{53,72,-12}, -{53,72,-11}, -{53,72,-10}, -{53,72,-9}, -{53,72,-8}, -{53,72,-7}, -{53,72,-6}, -{53,72,-5}, -{53,72,-4}, -{53,72,-3}, -{53,72,-2}, -{53,72,-1}, -{53,72,0}, -{53,72,1}, -{53,72,2}, -{53,72,3}, -{53,72,4}, -{53,72,5}, -{53,72,6}, -{53,72,7}, -{53,72,8}, -{53,72,9}, -{53,72,10}, -{53,72,11}, -{53,72,12}, -{53,72,13}, -{53,72,14}, -{53,72,15}, -{53,72,16}, -{53,72,17}, -{53,72,18}, -{53,72,19}, -{53,72,20}, -{53,72,21}, -{53,72,22}, -{53,72,23}, -{53,72,24}, -{53,72,25}, -{53,72,26}, -{53,72,27}, -{53,72,28}, -{53,72,29}, -{53,72,30}, -{53,72,31}, -{53,72,32}, -{53,72,33}, -{53,72,34}, -{53,72,35}, -{53,72,36}, -{53,72,37}, -{53,72,38}, -{53,72,39}, -{53,72,40}, -{53,72,41}, -{53,72,42}, -{53,72,43}, -{53,72,44}, -{53,72,45}, -{53,72,46}, -{53,72,47}, -{53,72,48}, -{53,72,49}, -{53,72,50}, -{53,72,51}, -{53,72,52}, -{53,72,53}, -{53,72,54}, -{53,72,55}, -{53,72,56}, -{53,72,57}, -{53,72,58}, -{53,72,59}, -{53,72,60}, -{53,72,61}, -{53,72,62}, -{53,72,63}, -{53,72,64}, -{53,72,65}, -{53,72,66}, -{53,73,-73}, -{53,73,-72}, -{53,73,-71}, -{53,73,-70}, -{53,73,-69}, -{53,73,-68}, -{53,73,-67}, -{53,73,-66}, -{53,73,-65}, -{53,73,-64}, -{53,73,-63}, -{53,73,-62}, -{53,73,-61}, -{53,73,-60}, -{53,73,-59}, -{53,73,-58}, -{53,73,-57}, -{53,73,-56}, -{53,73,-55}, -{53,73,-54}, -{53,73,-53}, -{53,73,-52}, -{53,73,-51}, -{53,73,-50}, -{53,73,-49}, -{53,73,-48}, -{53,73,-47}, -{53,73,-46}, -{53,73,-45}, -{53,73,-44}, -{53,73,-43}, -{53,73,-42}, -{53,73,-41}, -{53,73,-40}, -{53,73,-39}, -{53,73,-38}, -{53,73,-37}, -{53,73,-36}, -{53,73,-35}, -{53,73,-34}, -{53,73,-33}, -{53,73,-32}, -{53,73,-31}, -{53,73,-30}, -{53,73,-29}, -{53,73,-28}, -{53,73,-27}, -{53,73,-26}, -{53,73,-25}, -{53,73,-24}, -{53,73,-23}, -{53,73,-22}, -{53,73,-21}, -{53,73,-20}, -{53,73,-19}, -{53,73,-18}, -{53,73,-17}, -{53,73,-16}, -{53,73,-15}, -{53,73,-14}, -{53,73,-13}, -{53,73,-12}, -{53,73,-11}, -{53,73,-10}, -{53,73,-9}, -{53,73,-8}, -{53,73,-7}, -{53,73,-6}, -{53,73,-5}, -{53,73,-4}, -{53,73,-3}, -{53,73,-2}, -{53,73,-1}, -{53,73,0}, -{53,73,1}, -{53,73,2}, -{53,73,3}, -{53,73,4}, -{53,73,5}, -{53,73,6}, -{53,73,7}, -{53,73,8}, -{53,73,9}, -{53,73,10}, -{53,73,11}, -{53,73,12}, -{53,73,13}, -{53,73,14}, -{53,73,15}, -{53,73,16}, -{53,73,17}, -{53,73,18}, -{53,73,19}, -{53,73,20}, -{53,73,21}, -{53,73,22}, -{53,73,23}, -{53,73,24}, -{53,73,25}, -{53,73,26}, -{53,73,27}, -{53,73,28}, -{53,73,29}, -{53,73,30}, -{53,73,31}, -{53,73,32}, -{53,73,33}, -{53,73,34}, -{53,73,35}, -{53,73,36}, -{53,73,37}, -{53,73,38}, -{53,73,39}, -{53,73,40}, -{53,73,41}, -{53,73,42}, -{53,73,43}, -{53,73,44}, -{53,73,45}, -{53,73,46}, -{53,73,47}, -{53,73,48}, -{53,73,49}, -{53,73,50}, -{53,73,51}, -{53,73,52}, -{53,73,53}, -{53,73,54}, -{53,73,55}, -{53,73,56}, -{53,73,57}, -{53,73,58}, -{53,73,59}, -{53,73,60}, -{53,73,61}, -{53,73,62}, -{53,73,63}, -{53,73,64}, -{53,73,65}, -{53,73,66}, -{53,74,-73}, -{53,74,-72}, -{53,74,-71}, -{53,74,-70}, -{53,74,-69}, -{53,74,-68}, -{53,74,-67}, -{53,74,-66}, -{53,74,-65}, -{53,74,-64}, -{53,74,-63}, -{53,74,-62}, -{53,74,-61}, -{53,74,-60}, -{53,74,-59}, -{53,74,-58}, -{53,74,-57}, -{53,74,-56}, -{53,74,-55}, -{53,74,-54}, -{53,74,-53}, -{53,74,-52}, -{53,74,-51}, -{53,74,-50}, -{53,74,-49}, -{53,74,-48}, -{53,74,-47}, -{53,74,-46}, -{53,74,-45}, -{53,74,-44}, -{53,74,-43}, -{53,74,-42}, -{53,74,-41}, -{53,74,-40}, -{53,74,-39}, -{53,74,-38}, -{53,74,-37}, -{53,74,-36}, -{53,74,-35}, -{53,74,-34}, -{53,74,-33}, -{53,74,-32}, -{53,74,-31}, -{53,74,-30}, -{53,74,-29}, -{53,74,-28}, -{53,74,-27}, -{53,74,-26}, -{53,74,-25}, -{53,74,-24}, -{53,74,-23}, -{53,74,-22}, -{53,74,-21}, -{53,74,-20}, -{53,74,-19}, -{53,74,-18}, -{53,74,-17}, -{53,74,-16}, -{53,74,-15}, -{53,74,-14}, -{53,74,-13}, -{53,74,-12}, -{53,74,-11}, -{53,74,-10}, -{53,74,-9}, -{53,74,-8}, -{53,74,-7}, -{53,74,-6}, -{53,74,-5}, -{53,74,-4}, -{53,74,-3}, -{53,74,-2}, -{53,74,-1}, -{53,74,0}, -{53,74,1}, -{53,74,2}, -{53,74,3}, -{53,74,4}, -{53,74,5}, -{53,74,6}, -{53,74,7}, -{53,74,8}, -{53,74,9}, -{53,74,10}, -{53,74,11}, -{53,74,12}, -{53,74,13}, -{53,74,14}, -{53,74,15}, -{53,74,16}, -{53,74,17}, -{53,74,18}, -{53,74,19}, -{53,74,20}, -{53,74,21}, -{53,74,22}, -{53,74,23}, -{53,74,24}, -{53,74,25}, -{53,74,26}, -{53,74,27}, -{53,74,28}, -{53,74,29}, -{53,74,30}, -{53,74,31}, -{53,74,32}, -{53,74,33}, -{53,74,34}, -{53,74,35}, -{53,74,36}, -{53,74,37}, -{53,74,38}, -{53,74,39}, -{53,74,40}, -{53,74,41}, -{53,74,42}, -{53,74,43}, -{53,74,44}, -{53,74,45}, -{53,74,46}, -{53,74,47}, -{53,74,48}, -{53,74,49}, -{53,74,50}, -{53,74,51}, -{53,74,52}, -{53,74,53}, -{53,74,54}, -{53,74,55}, -{53,74,56}, -{53,74,57}, -{53,74,58}, -{53,74,59}, -{53,74,60}, -{53,74,61}, -{53,74,62}, -{53,74,63}, -{53,74,64}, -{53,74,65}, -{53,74,66}, -{53,75,-73}, -{53,75,-72}, -{53,75,-71}, -{53,75,-70}, -{53,75,-69}, -{53,75,-68}, -{53,75,-67}, -{53,75,-66}, -{53,75,-65}, -{53,75,-64}, -{53,75,-63}, -{53,75,-62}, -{53,75,-61}, -{53,75,-60}, -{53,75,-59}, -{53,75,-58}, -{53,75,-57}, -{53,75,-56}, -{53,75,-55}, -{53,75,-54}, -{53,75,-53}, -{53,75,-52}, -{53,75,-51}, -{53,75,-50}, -{53,75,-49}, -{53,75,-48}, -{53,75,-47}, -{53,75,-46}, -{53,75,-45}, -{53,75,-44}, -{53,75,-43}, -{53,75,-42}, -{53,75,-41}, -{53,75,-40}, -{53,75,-39}, -{53,75,-38}, -{53,75,-37}, -{53,75,-36}, -{53,75,-35}, -{53,75,-34}, -{53,75,-33}, -{53,75,-32}, -{53,75,-31}, -{53,75,-30}, -{53,75,-29}, -{53,75,-28}, -{53,75,-27}, -{53,75,-26}, -{53,75,-25}, -{53,75,-24}, -{53,75,-23}, -{53,75,-22}, -{53,75,-21}, -{53,75,-20}, -{53,75,-19}, -{53,75,-18}, -{53,75,-17}, -{53,75,-16}, -{53,75,-15}, -{53,75,-14}, -{53,75,-13}, -{53,75,-12}, -{53,75,-11}, -{53,75,-10}, -{53,75,-9}, -{53,75,-8}, -{53,75,-7}, -{53,75,-6}, -{53,75,-5}, -{53,75,-4}, -{53,75,-3}, -{53,75,-2}, -{53,75,-1}, -{53,75,0}, -{53,75,1}, -{53,75,2}, -{53,75,3}, -{53,75,4}, -{53,75,5}, -{53,75,6}, -{53,75,7}, -{53,75,8}, -{53,75,9}, -{53,75,10}, -{53,75,11}, -{53,75,12}, -{53,75,13}, -{53,75,14}, -{53,75,15}, -{53,75,16}, -{53,75,17}, -{53,75,18}, -{53,75,19}, -{53,75,20}, -{53,75,21}, -{53,75,22}, -{53,75,23}, -{53,75,24}, -{53,75,25}, -{53,75,26}, -{53,75,27}, -{53,75,28}, -{53,75,29}, -{53,75,30}, -{53,75,31}, -{53,75,32}, -{53,75,33}, -{53,75,34}, -{53,75,35}, -{53,75,36}, -{53,75,37}, -{53,75,38}, -{53,75,39}, -{53,75,40}, -{53,75,41}, -{53,75,42}, -{53,75,43}, -{53,75,44}, -{53,75,45}, -{53,75,46}, -{53,75,47}, -{53,75,48}, -{53,75,49}, -{53,75,50}, -{53,75,51}, -{53,75,52}, -{53,75,53}, -{53,75,54}, -{53,75,55}, -{53,75,56}, -{53,75,57}, -{53,75,58}, -{53,75,59}, -{53,75,60}, -{53,75,61}, -{53,75,62}, -{53,75,63}, -{53,75,64}, -{53,75,65}, -{53,75,66}, -{53,76,-73}, -{53,76,-72}, -{53,76,-71}, -{53,76,-70}, -{53,76,-69}, -{53,76,-68}, -{53,76,-67}, -{53,76,-66}, -{53,76,-65}, -{53,76,-64}, -{53,76,-63}, -{53,76,-62}, -{53,76,-61}, -{53,76,-60}, -{53,76,-59}, -{53,76,-58}, -{53,76,-57}, -{53,76,-56}, -{53,76,-55}, -{53,76,-54}, -{53,76,-53}, -{53,76,-52}, -{53,76,-51}, -{53,76,-50}, -{53,76,-49}, -{53,76,-48}, -{53,76,-47}, -{53,76,-46}, -{53,76,-45}, -{53,76,-44}, -{53,76,-43}, -{53,76,-42}, -{53,76,-41}, -{53,76,-40}, -{53,76,-39}, -{53,76,-38}, -{53,76,-37}, -{53,76,-36}, -{53,76,-35}, -{53,76,-34}, -{53,76,-33}, -{53,76,-32}, -{53,76,-31}, -{53,76,-30}, -{53,76,-29}, -{53,76,-28}, -{53,76,-27}, -{53,76,-26}, -{53,76,-25}, -{53,76,-24}, -{53,76,-23}, -{53,76,-22}, -{53,76,-21}, -{53,76,-20}, -{53,76,-19}, -{53,76,-18}, -{53,76,-17}, -{53,76,-16}, -{53,76,-15}, -{53,76,-14}, -{53,76,-13}, -{53,76,-12}, -{53,76,-11}, -{53,76,-10}, -{53,76,-9}, -{53,76,-8}, -{53,76,-7}, -{53,76,-6}, -{53,76,-5}, -{53,76,-4}, -{53,76,-3}, -{53,76,-2}, -{53,76,-1}, -{53,76,0}, -{53,76,1}, -{53,76,2}, -{53,76,3}, -{53,76,4}, -{53,76,5}, -{53,76,6}, -{53,76,7}, -{53,76,8}, -{53,76,9}, -{53,76,10}, -{53,76,11}, -{53,76,12}, -{53,76,13}, -{53,76,14}, -{53,76,15}, -{53,76,16}, -{53,76,17}, -{53,76,18}, -{53,76,19}, -{53,76,20}, -{53,76,21}, -{53,76,22}, -{53,76,23}, -{53,76,24}, -{53,76,25}, -{53,76,26}, -{53,76,27}, -{53,76,28}, -{53,76,29}, -{53,76,30}, -{53,76,31}, -{53,76,32}, -{53,76,33}, -{53,76,34}, -{53,76,35}, -{53,76,36}, -{53,76,37}, -{53,76,38}, -{53,76,39}, -{53,76,40}, -{53,76,41}, -{53,76,42}, -{53,76,43}, -{53,76,44}, -{53,76,45}, -{53,76,46}, -{53,76,47}, -{53,76,48}, -{53,76,49}, -{53,76,50}, -{53,76,51}, -{53,76,52}, -{53,76,53}, -{53,76,54}, -{53,76,55}, -{53,76,56}, -{53,76,57}, -{53,76,58}, -{53,76,59}, -{53,76,60}, -{53,76,61}, -{53,76,62}, -{53,76,63}, -{53,76,64}, -{53,76,65}, -{53,76,66}, -{53,77,-73}, -{53,77,-72}, -{53,77,-71}, -{53,77,-70}, -{53,77,-69}, -{53,77,-68}, -{53,77,-67}, -{53,77,-66}, -{53,77,-65}, -{53,77,-64}, -{53,77,-63}, -{53,77,-62}, -{53,77,-61}, -{53,77,-60}, -{53,77,-59}, -{53,77,-58}, -{53,77,-57}, -{53,77,-56}, -{53,77,-55}, -{53,77,-54}, -{53,77,-53}, -{53,77,-52}, -{53,77,-51}, -{53,77,-50}, -{53,77,-49}, -{53,77,-48}, -{53,77,-47}, -{53,77,-46}, -{53,77,-45}, -{53,77,-44}, -{53,77,-43}, -{53,77,-42}, -{53,77,-41}, -{53,77,-40}, -{53,77,-39}, -{53,77,-38}, -{53,77,-37}, -{53,77,-36}, -{53,77,-35}, -{53,77,-34}, -{53,77,-33}, -{53,77,-32}, -{53,77,-31}, -{53,77,-30}, -{53,77,-29}, -{53,77,-28}, -{53,77,-27}, -{53,77,-26}, -{53,77,-25}, -{53,77,-24}, -{53,77,-23}, -{53,77,-22}, -{53,77,-21}, -{53,77,-20}, -{53,77,-19}, -{53,77,-18}, -{53,77,-17}, -{53,77,-16}, -{53,77,-15}, -{53,77,-14}, -{53,77,-13}, -{53,77,-12}, -{53,77,-11}, -{53,77,-10}, -{53,77,-9}, -{53,77,-8}, -{53,77,-7}, -{53,77,-6}, -{53,77,-5}, -{53,77,-4}, -{53,77,-3}, -{53,77,-2}, -{53,77,-1}, -{53,77,0}, -{53,77,1}, -{53,77,2}, -{53,77,3}, -{53,77,4}, -{53,77,5}, -{53,77,6}, -{53,77,7}, -{53,77,8}, -{53,77,9}, -{53,77,10}, -{53,77,11}, -{53,77,12}, -{53,77,13}, -{53,77,14}, -{53,77,15}, -{53,77,16}, -{53,77,17}, -{53,77,18}, -{53,77,19}, -{53,77,20}, -{53,77,21}, -{53,77,22}, -{53,77,23}, -{53,77,24}, -{53,77,25}, -{53,77,26}, -{53,77,27}, -{53,77,28}, -{53,77,29}, -{53,77,30}, -{53,77,31}, -{53,77,32}, -{53,77,33}, -{53,77,34}, -{53,77,35}, -{53,77,36}, -{53,77,37}, -{53,77,38}, -{53,77,39}, -{53,77,40}, -{53,77,41}, -{53,77,42}, -{53,77,43}, -{53,77,44}, -{53,77,45}, -{53,77,46}, -{53,77,47}, -{53,77,48}, -{53,77,49}, -{53,77,50}, -{53,77,51}, -{53,77,52}, -{53,77,53}, -{53,77,54}, -{53,77,55}, -{53,77,56}, -{53,77,57}, -{53,77,58}, -{53,77,59}, -{53,77,60}, -{53,77,61}, -{53,77,62}, -{53,77,63}, -{53,77,64}, -{53,77,65}, -{53,77,66}, -{53,78,-73}, -{53,78,-72}, -{53,78,-71}, -{53,78,-70}, -{53,78,-69}, -{53,78,-68}, -{53,78,-67}, -{53,78,-66}, -{53,78,-65}, -{53,78,-64}, -{53,78,-63}, -{53,78,-62}, -{53,78,-61}, -{53,78,-60}, -{53,78,-59}, -{53,78,-58}, -{53,78,-57}, -{53,78,-56}, -{53,78,-55}, -{53,78,-54}, -{53,78,-53}, -{53,78,-52}, -{53,78,-51}, -{53,78,-50}, -{53,78,-49}, -{53,78,-48}, -{53,78,-47}, -{53,78,-46}, -{53,78,-45}, -{53,78,-44}, -{53,78,-43}, -{53,78,-42}, -{53,78,-41}, -{53,78,-40}, -{53,78,-39}, -{53,78,-38}, -{53,78,-37}, -{53,78,-36}, -{53,78,-35}, -{53,78,-34}, -{53,78,-33}, -{53,78,-32}, -{53,78,-31}, -{53,78,-30}, -{53,78,-29}, -{53,78,-28}, -{53,78,-27}, -{53,78,-26}, -{53,78,-25}, -{53,78,-24}, -{53,78,-23}, -{53,78,-22}, -{53,78,-21}, -{53,78,-20}, -{53,78,-19}, -{53,78,-18}, -{53,78,-17}, -{53,78,-16}, -{53,78,-15}, -{53,78,-14}, -{53,78,-13}, -{53,78,-12}, -{53,78,-11}, -{53,78,-10}, -{53,78,-9}, -{53,78,-8}, -{53,78,-7}, -{53,78,-6}, -{53,78,-5}, -{53,78,-4}, -{53,78,-3}, -{53,78,-2}, -{53,78,-1}, -{53,78,0}, -{53,78,1}, -{53,78,2}, -{53,78,3}, -{53,78,4}, -{53,78,5}, -{53,78,6}, -{53,78,7}, -{53,78,8}, -{53,78,9}, -{53,78,10}, -{53,78,11}, -{53,78,12}, -{53,78,13}, -{53,78,14}, -{53,78,15}, -{53,78,16}, -{53,78,17}, -{53,78,18}, -{53,78,19}, -{53,78,20}, -{53,78,21}, -{53,78,22}, -{53,78,23}, -{53,78,24}, -{53,78,25}, -{53,78,26}, -{53,78,27}, -{53,78,28}, -{53,78,29}, -{53,78,30}, -{53,78,31}, -{53,78,32}, -{53,78,33}, -{53,78,34}, -{53,78,35}, -{53,78,36}, -{53,78,37}, -{53,78,38}, -{53,78,39}, -{53,78,40}, -{53,78,41}, -{53,78,42}, -{53,78,43}, -{53,78,44}, -{53,78,45}, -{53,78,46}, -{53,78,47}, -{53,78,48}, -{53,78,49}, -{53,78,50}, -{53,78,51}, -{53,78,52}, -{53,78,53}, -{53,78,54}, -{53,78,55}, -{53,78,56}, -{53,78,57}, -{53,78,58}, -{53,78,59}, -{53,78,60}, -{53,78,61}, -{53,78,62}, -{53,78,63}, -{53,78,64}, -{53,78,65}, -{53,78,66}, -{53,79,-73}, -{53,79,-72}, -{53,79,-71}, -{53,79,-70}, -{53,79,-69}, -{53,79,-68}, -{53,79,-67}, -{53,79,-66}, -{53,79,-65}, -{53,79,-64}, -{53,79,-63}, -{53,79,-62}, -{53,79,-61}, -{53,79,-60}, -{53,79,-59}, -{53,79,-58}, -{53,79,-57}, -{53,79,-56}, -{53,79,-55}, -{53,79,-54}, -{53,79,-53}, -{53,79,-52}, -{53,79,-51}, -{53,79,-50}, -{53,79,-49}, -{53,79,-48}, -{53,79,-47}, -{53,79,-46}, -{53,79,-45}, -{53,79,-44}, -{53,79,-43}, -{53,79,-42}, -{53,79,-41}, -{53,79,-40}, -{53,79,-39}, -{53,79,-38}, -{53,79,-37}, -{53,79,-36}, -{53,79,-35}, -{53,79,-34}, -{53,79,-33}, -{53,79,-32}, -{53,79,-31}, -{53,79,-30}, -{53,79,-29}, -{53,79,-28}, -{53,79,-27}, -{53,79,-26}, -{53,79,-25}, -{53,79,-24}, -{53,79,-23}, -{53,79,-22}, -{53,79,-21}, -{53,79,-20}, -{53,79,-19}, -{53,79,-18}, -{53,79,-17}, -{53,79,-16}, -{53,79,-15}, -{53,79,-14}, -{53,79,-13}, -{53,79,-12}, -{53,79,-11}, -{53,79,-10}, -{53,79,-9}, -{53,79,-8}, -{53,79,-7}, -{53,79,-6}, -{53,79,-5}, -{53,79,-4}, -{53,79,-3}, -{53,79,-2}, -{53,79,-1}, -{53,79,0}, -{53,79,1}, -{53,79,2}, -{53,79,3}, -{53,79,4}, -{53,79,5}, -{53,79,6}, -{53,79,7}, -{53,79,8}, -{53,79,9}, -{53,79,10}, -{53,79,11}, -{53,79,12}, -{53,79,13}, -{53,79,14}, -{53,79,15}, -{53,79,16}, -{53,79,17}, -{53,79,18}, -{53,79,19}, -{53,79,20}, -{53,79,21}, -{53,79,22}, -{53,79,23}, -{53,79,24}, -{53,79,25}, -{53,79,26}, -{53,79,27}, -{53,79,28}, -{53,79,29}, -{53,79,30}, -{53,79,31}, -{53,79,32}, -{53,79,33}, -{53,79,34}, -{53,79,35}, -{53,79,36}, -{53,79,37}, -{53,79,38}, -{53,79,39}, -{53,79,40}, -{53,79,41}, -{53,79,42}, -{53,79,43}, -{53,79,44}, -{53,79,45}, -{53,79,46}, -{53,79,47}, -{53,79,48}, -{53,79,49}, -{53,79,50}, -{53,79,51}, -{53,79,52}, -{53,79,53}, -{53,79,54}, -{53,79,55}, -{53,79,56}, -{53,79,57}, -{53,79,58}, -{53,79,59}, -{53,79,60}, -{53,79,61}, -{53,79,62}, -{53,79,63}, -{53,79,64}, -{53,79,65}, -{53,79,66}, -{53,79,67}, -{53,80,-73}, -{53,80,-72}, -{53,80,-71}, -{53,80,-70}, -{53,80,-69}, -{53,80,-68}, -{53,80,-67}, -{53,80,-66}, -{53,80,-65}, -{53,80,-64}, -{53,80,-63}, -{53,80,-62}, -{53,80,-61}, -{53,80,-60}, -{53,80,-59}, -{53,80,-58}, -{53,80,-57}, -{53,80,-56}, -{53,80,-55}, -{53,80,-54}, -{53,80,-53}, -{53,80,-52}, -{53,80,-51}, -{53,80,-50}, -{53,80,-49}, -{53,80,-48}, -{53,80,-47}, -{53,80,-46}, -{53,80,-45}, -{53,80,-44}, -{53,80,-43}, -{53,80,-42}, -{53,80,-41}, -{53,80,-40}, -{53,80,-39}, -{53,80,-38}, -{53,80,-37}, -{53,80,-36}, -{53,80,-35}, -{53,80,-34}, -{53,80,-33}, -{53,80,-32}, -{53,80,-31}, -{53,80,-30}, -{53,80,-29}, -{53,80,-28}, -{53,80,-27}, -{53,80,-26}, -{53,80,-25}, -{53,80,-24}, -{53,80,-23}, -{53,80,-22}, -{53,80,-21}, -{53,80,-20}, -{53,80,-19}, -{53,80,-18}, -{53,80,-17}, -{53,80,-16}, -{53,80,-15}, -{53,80,-14}, -{53,80,-13}, -{53,80,-12}, -{53,80,-11}, -{53,80,-10}, -{53,80,-9}, -{53,80,-8}, -{53,80,-7}, -{53,80,-6}, -{53,80,-5}, -{53,80,-4}, -{53,80,-3}, -{53,80,-2}, -{53,80,-1}, -{53,80,0}, -{53,80,1}, -{53,80,2}, -{53,80,3}, -{53,80,4}, -{53,80,5}, -{53,80,6}, -{53,80,7}, -{53,80,8}, -{53,80,9}, -{53,80,10}, -{53,80,11}, -{53,80,12}, -{53,80,13}, -{53,80,14}, -{53,80,15}, -{53,80,16}, -{53,80,17}, -{53,80,18}, -{53,80,19}, -{53,80,20}, -{53,80,21}, -{53,80,22}, -{53,80,23}, -{53,80,24}, -{53,80,25}, -{53,80,26}, -{53,80,27}, -{53,80,28}, -{53,80,29}, -{53,80,30}, -{53,80,31}, -{53,80,32}, -{53,80,33}, -{53,80,34}, -{53,80,35}, -{53,80,36}, -{53,80,37}, -{53,80,38}, -{53,80,39}, -{53,80,40}, -{53,80,41}, -{53,80,42}, -{53,80,43}, -{53,80,44}, -{53,80,45}, -{53,80,46}, -{53,80,47}, -{53,80,48}, -{53,80,49}, -{53,80,50}, -{53,80,51}, -{53,80,52}, -{53,80,53}, -{53,80,54}, -{53,80,55}, -{53,80,56}, -{53,80,57}, -{53,80,58}, -{53,80,59}, -{53,80,60}, -{53,80,61}, -{53,80,62}, -{53,80,63}, -{53,80,64}, -{53,80,65}, -{53,80,66}, -{53,80,67}, -{53,81,-73}, -{53,81,-72}, -{53,81,-71}, -{53,81,-70}, -{53,81,-69}, -{53,81,-68}, -{53,81,-67}, -{53,81,-66}, -{53,81,-65}, -{53,81,-64}, -{53,81,-63}, -{53,81,-62}, -{53,81,-61}, -{53,81,-60}, -{53,81,-59}, -{53,81,-58}, -{53,81,-57}, -{53,81,-56}, -{53,81,-55}, -{53,81,-54}, -{53,81,-53}, -{53,81,-52}, -{53,81,-51}, -{53,81,-50}, -{53,81,-49}, -{53,81,-48}, -{53,81,-47}, -{53,81,-46}, -{53,81,-45}, -{53,81,-44}, -{53,81,-43}, -{53,81,-42}, -{53,81,-41}, -{53,81,-40}, -{53,81,-39}, -{53,81,-38}, -{53,81,-37}, -{53,81,-36}, -{53,81,-35}, -{53,81,-34}, -{53,81,-33}, -{53,81,-32}, -{53,81,-31}, -{53,81,-30}, -{53,81,-29}, -{53,81,-28}, -{53,81,-27}, -{53,81,-26}, -{53,81,-25}, -{53,81,-24}, -{53,81,-23}, -{53,81,-22}, -{53,81,-21}, -{53,81,-20}, -{53,81,-19}, -{53,81,-18}, -{53,81,-17}, -{53,81,-16}, -{53,81,-15}, -{53,81,-14}, -{53,81,-13}, -{53,81,-12}, -{53,81,-11}, -{53,81,-10}, -{53,81,-9}, -{53,81,-8}, -{53,81,-7}, -{53,81,-6}, -{53,81,-5}, -{53,81,-4}, -{53,81,-3}, -{53,81,-2}, -{53,81,-1}, -{53,81,0}, -{53,81,1}, -{53,81,2}, -{53,81,3}, -{53,81,4}, -{53,81,5}, -{53,81,6}, -{53,81,7}, -{53,81,8}, -{53,81,9}, -{53,81,10}, -{53,81,11}, -{53,81,12}, -{53,81,13}, -{53,81,14}, -{53,81,15}, -{53,81,16}, -{53,81,17}, -{53,81,18}, -{53,81,19}, -{53,81,20}, -{53,81,21}, -{53,81,22}, -{53,81,23}, -{53,81,24}, -{53,81,25}, -{53,81,26}, -{53,81,27}, -{53,81,28}, -{53,81,29}, -{53,81,30}, -{53,82,-73}, -{53,82,-72}, -{53,82,-71}, -{53,82,-70}, -{53,82,-69}, -{53,82,-68}, -{53,82,-67}, -{53,82,-66}, -{53,82,-65}, -{53,82,-64}, -{53,82,-63}, -{53,82,-62}, -{53,82,-61}, -{53,82,-60}, -{53,82,-59}, -{53,82,-58}, -{53,82,-57}, -{53,82,-56}, -{53,82,-55}, -{53,82,-54}, -{53,82,-53}, -{53,82,-52}, -{53,82,-51}, -{53,82,-50}, -{53,82,-49}, -{53,82,-48}, -{53,82,-47}, -{53,82,-46}, -{53,82,-45}, -{53,82,-44}, -{53,82,-43}, -{53,82,-42}, -{53,82,-41}, -{53,82,-40}, -{53,82,-39}, -{53,82,-38}, -{53,82,-37}, -{53,82,-36}, -{53,82,-35}, -{53,82,-34}, -{53,82,-33}, -{53,82,-32}, -{53,82,-31}, -{53,82,-30}, -{53,82,-29}, -{53,82,-28}, -{53,82,-27}, -{53,82,-26}, -{53,82,-25}, -{53,82,-24}, -{53,82,-23}, -{53,82,-22}, -{53,82,-21}, -{53,82,-20}, -{53,82,-19}, -{53,82,-18}, -{53,82,-17}, -{53,82,-16}, -{53,82,-15}, -{53,82,-14}, -{53,82,-13}, -{53,82,-12}, -{53,82,-11}, -{53,82,-10}, -{53,82,-9}, -{53,82,-8}, -{53,82,-7}, -{53,82,-6}, -{53,82,-5}, -{53,82,-4}, -{53,82,-3}, -{53,82,-2}, -{53,82,-1}, -{53,82,0}, -{53,82,1}, -{53,82,2}, -{53,82,3}, -{53,82,4}, -{53,82,5}, -{53,82,6}, -{53,82,7}, -{53,82,8}, -{53,82,9}, -{53,82,10}, -{53,83,-73}, -{53,83,-72}, -{53,83,-71}, -{53,83,-70}, -{53,83,-69}, -{53,83,-68}, -{53,83,-67}, -{53,83,-66}, -{53,83,-65}, -{53,83,-64}, -{53,83,-63}, -{53,83,-62}, -{53,83,-61}, -{53,83,-60}, -{53,83,-59}, -{53,83,-58}, -{53,83,-57}, -{53,83,-56}, -{53,83,-55}, -{53,83,-54}, -{53,83,-53}, -{53,83,-52}, -{53,83,-51}, -{53,83,-50}, -{53,83,-49}, -{53,83,-48}, -{53,83,-47}, -{53,83,-46}, -{53,83,-45}, -{53,83,-44}, -{53,83,-43}, -{53,83,-42}, -{53,83,-41}, -{53,83,-40}, -{53,83,-39}, -{53,83,-38}, -{53,83,-37}, -{53,83,-36}, -{53,83,-35}, -{53,83,-34}, -{53,83,-33}, -{53,83,-32}, -{53,83,-31}, -{53,83,-30}, -{53,83,-29}, -{53,83,-28}, -{53,83,-27}, -{53,83,-26}, -{53,83,-25}, -{53,83,-24}, -{53,83,-23}, -{53,83,-22}, -{53,83,-21}, -{53,83,-20}, -{53,83,-19}, -{53,83,-18}, -{53,83,-17}, -{53,83,-16}, -{53,83,-15}, -{53,83,-14}, -{53,83,-13}, -{53,83,-12}, -{53,83,-11}, -{53,83,-10}, -{53,83,-9}, -{53,83,-8}, -{53,83,-7}, -{53,83,-6}, -{53,83,-5}, -{53,83,-4}, -{53,84,-73}, -{53,84,-72}, -{53,84,-71}, -{53,84,-70}, -{53,84,-69}, -{53,84,-68}, -{53,84,-67}, -{53,84,-66}, -{53,84,-65}, -{53,84,-64}, -{53,84,-63}, -{53,84,-62}, -{53,84,-61}, -{53,84,-60}, -{53,84,-59}, -{53,84,-58}, -{53,84,-57}, -{53,84,-56}, -{53,84,-55}, -{53,84,-54}, -{53,84,-53}, -{53,84,-52}, -{53,84,-51}, -{53,84,-50}, -{53,84,-49}, -{53,84,-48}, -{53,84,-47}, -{53,84,-46}, -{53,84,-45}, -{53,84,-44}, -{53,84,-43}, -{53,84,-42}, -{53,84,-41}, -{53,84,-40}, -{53,84,-39}, -{53,84,-38}, -{53,84,-37}, -{53,84,-36}, -{53,84,-35}, -{53,84,-34}, -{53,84,-33}, -{53,84,-32}, -{53,84,-31}, -{53,84,-30}, -{53,84,-29}, -{53,84,-28}, -{53,84,-27}, -{53,84,-26}, -{53,84,-25}, -{53,84,-24}, -{53,84,-23}, -{53,84,-22}, -{53,84,-21}, -{53,84,-20}, -{53,84,-19}, -{53,84,-18}, -{53,84,-17}, -{53,84,-16}, -{53,84,-15}, -{53,85,-73}, -{53,85,-72}, -{53,85,-71}, -{53,85,-70}, -{53,85,-69}, -{53,85,-68}, -{53,85,-67}, -{53,85,-66}, -{53,85,-65}, -{53,85,-64}, -{53,85,-63}, -{53,85,-62}, -{53,85,-61}, -{53,85,-60}, -{53,85,-59}, -{53,85,-58}, -{53,85,-57}, -{53,85,-56}, -{53,85,-55}, -{53,85,-54}, -{53,85,-53}, -{53,85,-52}, -{53,85,-51}, -{53,85,-50}, -{53,85,-49}, -{53,85,-48}, -{53,85,-47}, -{53,85,-46}, -{53,85,-45}, -{53,85,-44}, -{53,85,-43}, -{53,85,-42}, -{53,85,-41}, -{53,85,-40}, -{53,85,-39}, -{53,85,-38}, -{53,85,-37}, -{53,85,-36}, -{53,85,-35}, -{53,85,-34}, -{53,85,-33}, -{53,85,-32}, -{53,85,-31}, -{53,85,-30}, -{53,85,-29}, -{53,85,-28}, -{53,85,-27}, -{53,85,-26}, -{53,85,-25}, -{53,86,-73}, -{53,86,-72}, -{53,86,-71}, -{53,86,-70}, -{53,86,-69}, -{53,86,-68}, -{53,86,-67}, -{53,86,-66}, -{53,86,-65}, -{53,86,-64}, -{53,86,-63}, -{53,86,-62}, -{53,86,-61}, -{53,86,-60}, -{53,86,-59}, -{53,86,-58}, -{53,86,-57}, -{53,86,-56}, -{53,86,-55}, -{53,86,-54}, -{53,86,-53}, -{53,86,-52}, -{53,86,-51}, -{53,86,-50}, -{53,86,-49}, -{53,86,-48}, -{53,86,-47}, -{53,86,-46}, -{53,86,-45}, -{53,86,-44}, -{53,86,-43}, -{53,86,-42}, -{53,86,-41}, -{53,86,-40}, -{53,86,-39}, -{53,86,-38}, -{53,86,-37}, -{53,86,-36}, -{53,86,-35}, -{53,86,-34}, -{53,87,-73}, -{53,87,-72}, -{53,87,-71}, -{53,87,-70}, -{53,87,-69}, -{53,87,-68}, -{53,87,-67}, -{53,87,-66}, -{53,87,-65}, -{53,87,-64}, -{53,87,-63}, -{53,87,-62}, -{53,87,-61}, -{53,87,-60}, -{53,87,-59}, -{53,87,-58}, -{53,87,-57}, -{53,87,-56}, -{53,87,-55}, -{53,87,-54}, -{53,87,-53}, -{53,87,-52}, -{53,87,-51}, -{53,87,-50}, -{53,87,-49}, -{53,87,-48}, -{53,87,-47}, -{53,87,-46}, -{53,87,-45}, -{53,87,-44}, -{53,87,-43}, -{53,87,-42}, -{53,88,-73}, -{53,88,-72}, -{53,88,-71}, -{53,88,-70}, -{53,88,-69}, -{53,88,-68}, -{53,88,-67}, -{53,88,-66}, -{53,88,-65}, -{53,88,-64}, -{53,88,-63}, -{53,88,-62}, -{53,88,-61}, -{53,88,-60}, -{53,88,-59}, -{53,88,-58}, -{53,88,-57}, -{53,88,-56}, -{53,88,-55}, -{53,88,-54}, -{53,88,-53}, -{53,88,-52}, -{53,88,-51}, -{53,88,-50}, -{53,88,-49}, -{53,89,-73}, -{53,89,-72}, -{53,89,-71}, -{53,89,-70}, -{53,89,-69}, -{53,89,-68}, -{53,89,-67}, -{53,89,-66}, -{53,89,-65}, -{53,89,-64}, -{53,89,-63}, -{53,89,-62}, -{53,89,-61}, -{53,89,-60}, -{53,89,-59}, -{53,89,-58}, -{53,89,-57}, -{53,89,-56}, -{53,90,-73}, -{53,90,-72}, -{53,90,-71}, -{53,90,-70}, -{53,90,-69}, -{53,90,-68}, -{53,90,-67}, -{53,90,-66}, -{53,90,-65}, -{53,90,-64}, -{53,90,-63}, -{53,90,-62}, -{53,91,-73}, -{53,91,-72}, -{53,91,-71}, -{53,91,-70}, -{53,91,-69}, -{53,91,-68}, -{53,92,-73}, -{54,-58,55}, -{54,-58,56}, -{54,-57,50}, -{54,-57,51}, -{54,-57,52}, -{54,-57,53}, -{54,-57,54}, -{54,-57,55}, -{54,-57,56}, -{54,-56,46}, -{54,-56,47}, -{54,-56,48}, -{54,-56,49}, -{54,-56,50}, -{54,-56,51}, -{54,-56,52}, -{54,-56,53}, -{54,-56,54}, -{54,-56,55}, -{54,-56,56}, -{54,-55,42}, -{54,-55,43}, -{54,-55,44}, -{54,-55,45}, -{54,-55,46}, -{54,-55,47}, -{54,-55,48}, -{54,-55,49}, -{54,-55,50}, -{54,-55,51}, -{54,-55,52}, -{54,-55,53}, -{54,-55,54}, -{54,-55,55}, -{54,-55,56}, -{54,-54,39}, -{54,-54,40}, -{54,-54,41}, -{54,-54,42}, -{54,-54,43}, -{54,-54,44}, -{54,-54,45}, -{54,-54,46}, -{54,-54,47}, -{54,-54,48}, -{54,-54,49}, -{54,-54,50}, -{54,-54,51}, -{54,-54,52}, -{54,-54,53}, -{54,-54,54}, -{54,-54,55}, -{54,-54,56}, -{54,-53,36}, -{54,-53,37}, -{54,-53,38}, -{54,-53,39}, -{54,-53,40}, -{54,-53,41}, -{54,-53,42}, -{54,-53,43}, -{54,-53,44}, -{54,-53,45}, -{54,-53,46}, -{54,-53,47}, -{54,-53,48}, -{54,-53,49}, -{54,-53,50}, -{54,-53,51}, -{54,-53,52}, -{54,-53,53}, -{54,-53,54}, -{54,-53,55}, -{54,-53,56}, -{54,-52,33}, -{54,-52,34}, -{54,-52,35}, -{54,-52,36}, -{54,-52,37}, -{54,-52,38}, -{54,-52,39}, -{54,-52,40}, -{54,-52,41}, -{54,-52,42}, -{54,-52,43}, -{54,-52,44}, -{54,-52,45}, -{54,-52,46}, -{54,-52,47}, -{54,-52,48}, -{54,-52,49}, -{54,-52,50}, -{54,-52,51}, -{54,-52,52}, -{54,-52,53}, -{54,-52,54}, -{54,-52,55}, -{54,-52,56}, -{54,-51,30}, -{54,-51,31}, -{54,-51,32}, -{54,-51,33}, -{54,-51,34}, -{54,-51,35}, -{54,-51,36}, -{54,-51,37}, -{54,-51,38}, -{54,-51,39}, -{54,-51,40}, -{54,-51,41}, -{54,-51,42}, -{54,-51,43}, -{54,-51,44}, -{54,-51,45}, -{54,-51,46}, -{54,-51,47}, -{54,-51,48}, -{54,-51,49}, -{54,-51,50}, -{54,-51,51}, -{54,-51,52}, -{54,-51,53}, -{54,-51,54}, -{54,-51,55}, -{54,-51,56}, -{54,-50,27}, -{54,-50,28}, -{54,-50,29}, -{54,-50,30}, -{54,-50,31}, -{54,-50,32}, -{54,-50,33}, -{54,-50,34}, -{54,-50,35}, -{54,-50,36}, -{54,-50,37}, -{54,-50,38}, -{54,-50,39}, -{54,-50,40}, -{54,-50,41}, -{54,-50,42}, -{54,-50,43}, -{54,-50,44}, -{54,-50,45}, -{54,-50,46}, -{54,-50,47}, -{54,-50,48}, -{54,-50,49}, -{54,-50,50}, -{54,-50,51}, -{54,-50,52}, -{54,-50,53}, -{54,-50,54}, -{54,-50,55}, -{54,-50,56}, -{54,-49,25}, -{54,-49,26}, -{54,-49,27}, -{54,-49,28}, -{54,-49,29}, -{54,-49,30}, -{54,-49,31}, -{54,-49,32}, -{54,-49,33}, -{54,-49,34}, -{54,-49,35}, -{54,-49,36}, -{54,-49,37}, -{54,-49,38}, -{54,-49,39}, -{54,-49,40}, -{54,-49,41}, -{54,-49,42}, -{54,-49,43}, -{54,-49,44}, -{54,-49,45}, -{54,-49,46}, -{54,-49,47}, -{54,-49,48}, -{54,-49,49}, -{54,-49,50}, -{54,-49,51}, -{54,-49,52}, -{54,-49,53}, -{54,-49,54}, -{54,-49,55}, -{54,-49,56}, -{54,-48,22}, -{54,-48,23}, -{54,-48,24}, -{54,-48,25}, -{54,-48,26}, -{54,-48,27}, -{54,-48,28}, -{54,-48,29}, -{54,-48,30}, -{54,-48,31}, -{54,-48,32}, -{54,-48,33}, -{54,-48,34}, -{54,-48,35}, -{54,-48,36}, -{54,-48,37}, -{54,-48,38}, -{54,-48,39}, -{54,-48,40}, -{54,-48,41}, -{54,-48,42}, -{54,-48,43}, -{54,-48,44}, -{54,-48,45}, -{54,-48,46}, -{54,-48,47}, -{54,-48,48}, -{54,-48,49}, -{54,-48,50}, -{54,-48,51}, -{54,-48,52}, -{54,-48,53}, -{54,-48,54}, -{54,-48,55}, -{54,-48,56}, -{54,-47,20}, -{54,-47,21}, -{54,-47,22}, -{54,-47,23}, -{54,-47,24}, -{54,-47,25}, -{54,-47,26}, -{54,-47,27}, -{54,-47,28}, -{54,-47,29}, -{54,-47,30}, -{54,-47,31}, -{54,-47,32}, -{54,-47,33}, -{54,-47,34}, -{54,-47,35}, -{54,-47,36}, -{54,-47,37}, -{54,-47,38}, -{54,-47,39}, -{54,-47,40}, -{54,-47,41}, -{54,-47,42}, -{54,-47,43}, -{54,-47,44}, -{54,-47,45}, -{54,-47,46}, -{54,-47,47}, -{54,-47,48}, -{54,-47,49}, -{54,-47,50}, -{54,-47,51}, -{54,-47,52}, -{54,-47,53}, -{54,-47,54}, -{54,-47,55}, -{54,-47,56}, -{54,-46,18}, -{54,-46,19}, -{54,-46,20}, -{54,-46,21}, -{54,-46,22}, -{54,-46,23}, -{54,-46,24}, -{54,-46,25}, -{54,-46,26}, -{54,-46,27}, -{54,-46,28}, -{54,-46,29}, -{54,-46,30}, -{54,-46,31}, -{54,-46,32}, -{54,-46,33}, -{54,-46,34}, -{54,-46,35}, -{54,-46,36}, -{54,-46,37}, -{54,-46,38}, -{54,-46,39}, -{54,-46,40}, -{54,-46,41}, -{54,-46,42}, -{54,-46,43}, -{54,-46,44}, -{54,-46,45}, -{54,-46,46}, -{54,-46,47}, -{54,-46,48}, -{54,-46,49}, -{54,-46,50}, -{54,-46,51}, -{54,-46,52}, -{54,-46,53}, -{54,-46,54}, -{54,-46,55}, -{54,-46,56}, -{54,-45,16}, -{54,-45,17}, -{54,-45,18}, -{54,-45,19}, -{54,-45,20}, -{54,-45,21}, -{54,-45,22}, -{54,-45,23}, -{54,-45,24}, -{54,-45,25}, -{54,-45,26}, -{54,-45,27}, -{54,-45,28}, -{54,-45,29}, -{54,-45,30}, -{54,-45,31}, -{54,-45,32}, -{54,-45,33}, -{54,-45,34}, -{54,-45,35}, -{54,-45,36}, -{54,-45,37}, -{54,-45,38}, -{54,-45,39}, -{54,-45,40}, -{54,-45,41}, -{54,-45,42}, -{54,-45,43}, -{54,-45,44}, -{54,-45,45}, -{54,-45,46}, -{54,-45,47}, -{54,-45,48}, -{54,-45,49}, -{54,-45,50}, -{54,-45,51}, -{54,-45,52}, -{54,-45,53}, -{54,-45,54}, -{54,-45,55}, -{54,-45,56}, -{54,-44,13}, -{54,-44,14}, -{54,-44,15}, -{54,-44,16}, -{54,-44,17}, -{54,-44,18}, -{54,-44,19}, -{54,-44,20}, -{54,-44,21}, -{54,-44,22}, -{54,-44,23}, -{54,-44,24}, -{54,-44,25}, -{54,-44,26}, -{54,-44,27}, -{54,-44,28}, -{54,-44,29}, -{54,-44,30}, -{54,-44,31}, -{54,-44,32}, -{54,-44,33}, -{54,-44,34}, -{54,-44,35}, -{54,-44,36}, -{54,-44,37}, -{54,-44,38}, -{54,-44,39}, -{54,-44,40}, -{54,-44,41}, -{54,-44,42}, -{54,-44,43}, -{54,-44,44}, -{54,-44,45}, -{54,-44,46}, -{54,-44,47}, -{54,-44,48}, -{54,-44,49}, -{54,-44,50}, -{54,-44,51}, -{54,-44,52}, -{54,-44,53}, -{54,-44,54}, -{54,-44,55}, -{54,-44,56}, -{54,-43,11}, -{54,-43,12}, -{54,-43,13}, -{54,-43,14}, -{54,-43,15}, -{54,-43,16}, -{54,-43,17}, -{54,-43,18}, -{54,-43,19}, -{54,-43,20}, -{54,-43,21}, -{54,-43,22}, -{54,-43,23}, -{54,-43,24}, -{54,-43,25}, -{54,-43,26}, -{54,-43,27}, -{54,-43,28}, -{54,-43,29}, -{54,-43,30}, -{54,-43,31}, -{54,-43,32}, -{54,-43,33}, -{54,-43,34}, -{54,-43,35}, -{54,-43,36}, -{54,-43,37}, -{54,-43,38}, -{54,-43,39}, -{54,-43,40}, -{54,-43,41}, -{54,-43,42}, -{54,-43,43}, -{54,-43,44}, -{54,-43,45}, -{54,-43,46}, -{54,-43,47}, -{54,-43,48}, -{54,-43,49}, -{54,-43,50}, -{54,-43,51}, -{54,-43,52}, -{54,-43,53}, -{54,-43,54}, -{54,-43,55}, -{54,-43,56}, -{54,-42,9}, -{54,-42,10}, -{54,-42,11}, -{54,-42,12}, -{54,-42,13}, -{54,-42,14}, -{54,-42,15}, -{54,-42,16}, -{54,-42,17}, -{54,-42,18}, -{54,-42,19}, -{54,-42,20}, -{54,-42,21}, -{54,-42,22}, -{54,-42,23}, -{54,-42,24}, -{54,-42,25}, -{54,-42,26}, -{54,-42,27}, -{54,-42,28}, -{54,-42,29}, -{54,-42,30}, -{54,-42,31}, -{54,-42,32}, -{54,-42,33}, -{54,-42,34}, -{54,-42,35}, -{54,-42,36}, -{54,-42,37}, -{54,-42,38}, -{54,-42,39}, -{54,-42,40}, -{54,-42,41}, -{54,-42,42}, -{54,-42,43}, -{54,-42,44}, -{54,-42,45}, -{54,-42,46}, -{54,-42,47}, -{54,-42,48}, -{54,-42,49}, -{54,-42,50}, -{54,-42,51}, -{54,-42,52}, -{54,-42,53}, -{54,-42,54}, -{54,-42,55}, -{54,-42,56}, -{54,-42,57}, -{54,-41,7}, -{54,-41,8}, -{54,-41,9}, -{54,-41,10}, -{54,-41,11}, -{54,-41,12}, -{54,-41,13}, -{54,-41,14}, -{54,-41,15}, -{54,-41,16}, -{54,-41,17}, -{54,-41,18}, -{54,-41,19}, -{54,-41,20}, -{54,-41,21}, -{54,-41,22}, -{54,-41,23}, -{54,-41,24}, -{54,-41,25}, -{54,-41,26}, -{54,-41,27}, -{54,-41,28}, -{54,-41,29}, -{54,-41,30}, -{54,-41,31}, -{54,-41,32}, -{54,-41,33}, -{54,-41,34}, -{54,-41,35}, -{54,-41,36}, -{54,-41,37}, -{54,-41,38}, -{54,-41,39}, -{54,-41,40}, -{54,-41,41}, -{54,-41,42}, -{54,-41,43}, -{54,-41,44}, -{54,-41,45}, -{54,-41,46}, -{54,-41,47}, -{54,-41,48}, -{54,-41,49}, -{54,-41,50}, -{54,-41,51}, -{54,-41,52}, -{54,-41,53}, -{54,-41,54}, -{54,-41,55}, -{54,-41,56}, -{54,-41,57}, -{54,-40,6}, -{54,-40,7}, -{54,-40,8}, -{54,-40,9}, -{54,-40,10}, -{54,-40,11}, -{54,-40,12}, -{54,-40,13}, -{54,-40,14}, -{54,-40,15}, -{54,-40,16}, -{54,-40,17}, -{54,-40,18}, -{54,-40,19}, -{54,-40,20}, -{54,-40,21}, -{54,-40,22}, -{54,-40,23}, -{54,-40,24}, -{54,-40,25}, -{54,-40,26}, -{54,-40,27}, -{54,-40,28}, -{54,-40,29}, -{54,-40,30}, -{54,-40,31}, -{54,-40,32}, -{54,-40,33}, -{54,-40,34}, -{54,-40,35}, -{54,-40,36}, -{54,-40,37}, -{54,-40,38}, -{54,-40,39}, -{54,-40,40}, -{54,-40,41}, -{54,-40,42}, -{54,-40,43}, -{54,-40,44}, -{54,-40,45}, -{54,-40,46}, -{54,-40,47}, -{54,-40,48}, -{54,-40,49}, -{54,-40,50}, -{54,-40,51}, -{54,-40,52}, -{54,-40,53}, -{54,-40,54}, -{54,-40,55}, -{54,-40,56}, -{54,-40,57}, -{54,-39,4}, -{54,-39,5}, -{54,-39,6}, -{54,-39,7}, -{54,-39,8}, -{54,-39,9}, -{54,-39,10}, -{54,-39,11}, -{54,-39,12}, -{54,-39,13}, -{54,-39,14}, -{54,-39,15}, -{54,-39,16}, -{54,-39,17}, -{54,-39,18}, -{54,-39,19}, -{54,-39,20}, -{54,-39,21}, -{54,-39,22}, -{54,-39,23}, -{54,-39,24}, -{54,-39,25}, -{54,-39,26}, -{54,-39,27}, -{54,-39,28}, -{54,-39,29}, -{54,-39,30}, -{54,-39,31}, -{54,-39,32}, -{54,-39,33}, -{54,-39,34}, -{54,-39,35}, -{54,-39,36}, -{54,-39,37}, -{54,-39,38}, -{54,-39,39}, -{54,-39,40}, -{54,-39,41}, -{54,-39,42}, -{54,-39,43}, -{54,-39,44}, -{54,-39,45}, -{54,-39,46}, -{54,-39,47}, -{54,-39,48}, -{54,-39,49}, -{54,-39,50}, -{54,-39,51}, -{54,-39,52}, -{54,-39,53}, -{54,-39,54}, -{54,-39,55}, -{54,-39,56}, -{54,-39,57}, -{54,-38,2}, -{54,-38,3}, -{54,-38,4}, -{54,-38,5}, -{54,-38,6}, -{54,-38,7}, -{54,-38,8}, -{54,-38,9}, -{54,-38,10}, -{54,-38,11}, -{54,-38,12}, -{54,-38,13}, -{54,-38,14}, -{54,-38,15}, -{54,-38,16}, -{54,-38,17}, -{54,-38,18}, -{54,-38,19}, -{54,-38,20}, -{54,-38,21}, -{54,-38,22}, -{54,-38,23}, -{54,-38,24}, -{54,-38,25}, -{54,-38,26}, -{54,-38,27}, -{54,-38,28}, -{54,-38,29}, -{54,-38,30}, -{54,-38,31}, -{54,-38,32}, -{54,-38,33}, -{54,-38,34}, -{54,-38,35}, -{54,-38,36}, -{54,-38,37}, -{54,-38,38}, -{54,-38,39}, -{54,-38,40}, -{54,-38,41}, -{54,-38,42}, -{54,-38,43}, -{54,-38,44}, -{54,-38,45}, -{54,-38,46}, -{54,-38,47}, -{54,-38,48}, -{54,-38,49}, -{54,-38,50}, -{54,-38,51}, -{54,-38,52}, -{54,-38,53}, -{54,-38,54}, -{54,-38,55}, -{54,-38,56}, -{54,-38,57}, -{54,-37,0}, -{54,-37,1}, -{54,-37,2}, -{54,-37,3}, -{54,-37,4}, -{54,-37,5}, -{54,-37,6}, -{54,-37,7}, -{54,-37,8}, -{54,-37,9}, -{54,-37,10}, -{54,-37,11}, -{54,-37,12}, -{54,-37,13}, -{54,-37,14}, -{54,-37,15}, -{54,-37,16}, -{54,-37,17}, -{54,-37,18}, -{54,-37,19}, -{54,-37,20}, -{54,-37,21}, -{54,-37,22}, -{54,-37,23}, -{54,-37,24}, -{54,-37,25}, -{54,-37,26}, -{54,-37,27}, -{54,-37,28}, -{54,-37,29}, -{54,-37,30}, -{54,-37,31}, -{54,-37,32}, -{54,-37,33}, -{54,-37,34}, -{54,-37,35}, -{54,-37,36}, -{54,-37,37}, -{54,-37,38}, -{54,-37,39}, -{54,-37,40}, -{54,-37,41}, -{54,-37,42}, -{54,-37,43}, -{54,-37,44}, -{54,-37,45}, -{54,-37,46}, -{54,-37,47}, -{54,-37,48}, -{54,-37,49}, -{54,-37,50}, -{54,-37,51}, -{54,-37,52}, -{54,-37,53}, -{54,-37,54}, -{54,-37,55}, -{54,-37,56}, -{54,-37,57}, -{54,-36,-2}, -{54,-36,-1}, -{54,-36,0}, -{54,-36,1}, -{54,-36,2}, -{54,-36,3}, -{54,-36,4}, -{54,-36,5}, -{54,-36,6}, -{54,-36,7}, -{54,-36,8}, -{54,-36,9}, -{54,-36,10}, -{54,-36,11}, -{54,-36,12}, -{54,-36,13}, -{54,-36,14}, -{54,-36,15}, -{54,-36,16}, -{54,-36,17}, -{54,-36,18}, -{54,-36,19}, -{54,-36,20}, -{54,-36,21}, -{54,-36,22}, -{54,-36,23}, -{54,-36,24}, -{54,-36,25}, -{54,-36,26}, -{54,-36,27}, -{54,-36,28}, -{54,-36,29}, -{54,-36,30}, -{54,-36,31}, -{54,-36,32}, -{54,-36,33}, -{54,-36,34}, -{54,-36,35}, -{54,-36,36}, -{54,-36,37}, -{54,-36,38}, -{54,-36,39}, -{54,-36,40}, -{54,-36,41}, -{54,-36,42}, -{54,-36,43}, -{54,-36,44}, -{54,-36,45}, -{54,-36,46}, -{54,-36,47}, -{54,-36,48}, -{54,-36,49}, -{54,-36,50}, -{54,-36,51}, -{54,-36,52}, -{54,-36,53}, -{54,-36,54}, -{54,-36,55}, -{54,-36,56}, -{54,-36,57}, -{54,-35,-3}, -{54,-35,-2}, -{54,-35,-1}, -{54,-35,0}, -{54,-35,1}, -{54,-35,2}, -{54,-35,3}, -{54,-35,4}, -{54,-35,5}, -{54,-35,6}, -{54,-35,7}, -{54,-35,8}, -{54,-35,9}, -{54,-35,10}, -{54,-35,11}, -{54,-35,12}, -{54,-35,13}, -{54,-35,14}, -{54,-35,15}, -{54,-35,16}, -{54,-35,17}, -{54,-35,18}, -{54,-35,19}, -{54,-35,20}, -{54,-35,21}, -{54,-35,22}, -{54,-35,23}, -{54,-35,24}, -{54,-35,25}, -{54,-35,26}, -{54,-35,27}, -{54,-35,28}, -{54,-35,29}, -{54,-35,30}, -{54,-35,31}, -{54,-35,32}, -{54,-35,33}, -{54,-35,34}, -{54,-35,35}, -{54,-35,36}, -{54,-35,37}, -{54,-35,38}, -{54,-35,39}, -{54,-35,40}, -{54,-35,41}, -{54,-35,42}, -{54,-35,43}, -{54,-35,44}, -{54,-35,45}, -{54,-35,46}, -{54,-35,47}, -{54,-35,48}, -{54,-35,49}, -{54,-35,50}, -{54,-35,51}, -{54,-35,52}, -{54,-35,53}, -{54,-35,54}, -{54,-35,55}, -{54,-35,56}, -{54,-35,57}, -{54,-34,-5}, -{54,-34,-4}, -{54,-34,-3}, -{54,-34,-2}, -{54,-34,-1}, -{54,-34,0}, -{54,-34,1}, -{54,-34,2}, -{54,-34,3}, -{54,-34,4}, -{54,-34,5}, -{54,-34,6}, -{54,-34,7}, -{54,-34,8}, -{54,-34,9}, -{54,-34,10}, -{54,-34,11}, -{54,-34,12}, -{54,-34,13}, -{54,-34,14}, -{54,-34,15}, -{54,-34,16}, -{54,-34,17}, -{54,-34,18}, -{54,-34,19}, -{54,-34,20}, -{54,-34,21}, -{54,-34,22}, -{54,-34,23}, -{54,-34,24}, -{54,-34,25}, -{54,-34,26}, -{54,-34,27}, -{54,-34,28}, -{54,-34,29}, -{54,-34,30}, -{54,-34,31}, -{54,-34,32}, -{54,-34,33}, -{54,-34,34}, -{54,-34,35}, -{54,-34,36}, -{54,-34,37}, -{54,-34,38}, -{54,-34,39}, -{54,-34,40}, -{54,-34,41}, -{54,-34,42}, -{54,-34,43}, -{54,-34,44}, -{54,-34,45}, -{54,-34,46}, -{54,-34,47}, -{54,-34,48}, -{54,-34,49}, -{54,-34,50}, -{54,-34,51}, -{54,-34,52}, -{54,-34,53}, -{54,-34,54}, -{54,-34,55}, -{54,-34,56}, -{54,-34,57}, -{54,-33,-7}, -{54,-33,-6}, -{54,-33,-5}, -{54,-33,-4}, -{54,-33,-3}, -{54,-33,-2}, -{54,-33,-1}, -{54,-33,0}, -{54,-33,1}, -{54,-33,2}, -{54,-33,3}, -{54,-33,4}, -{54,-33,5}, -{54,-33,6}, -{54,-33,7}, -{54,-33,8}, -{54,-33,9}, -{54,-33,10}, -{54,-33,11}, -{54,-33,12}, -{54,-33,13}, -{54,-33,14}, -{54,-33,15}, -{54,-33,16}, -{54,-33,17}, -{54,-33,18}, -{54,-33,19}, -{54,-33,20}, -{54,-33,21}, -{54,-33,22}, -{54,-33,23}, -{54,-33,24}, -{54,-33,25}, -{54,-33,26}, -{54,-33,27}, -{54,-33,28}, -{54,-33,29}, -{54,-33,30}, -{54,-33,31}, -{54,-33,32}, -{54,-33,33}, -{54,-33,34}, -{54,-33,35}, -{54,-33,36}, -{54,-33,37}, -{54,-33,38}, -{54,-33,39}, -{54,-33,40}, -{54,-33,41}, -{54,-33,42}, -{54,-33,43}, -{54,-33,44}, -{54,-33,45}, -{54,-33,46}, -{54,-33,47}, -{54,-33,48}, -{54,-33,49}, -{54,-33,50}, -{54,-33,51}, -{54,-33,52}, -{54,-33,53}, -{54,-33,54}, -{54,-33,55}, -{54,-33,56}, -{54,-33,57}, -{54,-32,-8}, -{54,-32,-7}, -{54,-32,-6}, -{54,-32,-5}, -{54,-32,-4}, -{54,-32,-3}, -{54,-32,-2}, -{54,-32,-1}, -{54,-32,0}, -{54,-32,1}, -{54,-32,2}, -{54,-32,3}, -{54,-32,4}, -{54,-32,5}, -{54,-32,6}, -{54,-32,7}, -{54,-32,8}, -{54,-32,9}, -{54,-32,10}, -{54,-32,11}, -{54,-32,12}, -{54,-32,13}, -{54,-32,14}, -{54,-32,15}, -{54,-32,16}, -{54,-32,17}, -{54,-32,18}, -{54,-32,19}, -{54,-32,20}, -{54,-32,21}, -{54,-32,22}, -{54,-32,23}, -{54,-32,24}, -{54,-32,25}, -{54,-32,26}, -{54,-32,27}, -{54,-32,28}, -{54,-32,29}, -{54,-32,30}, -{54,-32,31}, -{54,-32,32}, -{54,-32,33}, -{54,-32,34}, -{54,-32,35}, -{54,-32,36}, -{54,-32,37}, -{54,-32,38}, -{54,-32,39}, -{54,-32,40}, -{54,-32,41}, -{54,-32,42}, -{54,-32,43}, -{54,-32,44}, -{54,-32,45}, -{54,-32,46}, -{54,-32,47}, -{54,-32,48}, -{54,-32,49}, -{54,-32,50}, -{54,-32,51}, -{54,-32,52}, -{54,-32,53}, -{54,-32,54}, -{54,-32,55}, -{54,-32,56}, -{54,-32,57}, -{54,-31,-10}, -{54,-31,-9}, -{54,-31,-8}, -{54,-31,-7}, -{54,-31,-6}, -{54,-31,-5}, -{54,-31,-4}, -{54,-31,-3}, -{54,-31,-2}, -{54,-31,-1}, -{54,-31,0}, -{54,-31,1}, -{54,-31,2}, -{54,-31,3}, -{54,-31,4}, -{54,-31,5}, -{54,-31,6}, -{54,-31,7}, -{54,-31,8}, -{54,-31,9}, -{54,-31,10}, -{54,-31,11}, -{54,-31,12}, -{54,-31,13}, -{54,-31,14}, -{54,-31,15}, -{54,-31,16}, -{54,-31,17}, -{54,-31,18}, -{54,-31,19}, -{54,-31,20}, -{54,-31,21}, -{54,-31,22}, -{54,-31,23}, -{54,-31,24}, -{54,-31,25}, -{54,-31,26}, -{54,-31,27}, -{54,-31,28}, -{54,-31,29}, -{54,-31,30}, -{54,-31,31}, -{54,-31,32}, -{54,-31,33}, -{54,-31,34}, -{54,-31,35}, -{54,-31,36}, -{54,-31,37}, -{54,-31,38}, -{54,-31,39}, -{54,-31,40}, -{54,-31,41}, -{54,-31,42}, -{54,-31,43}, -{54,-31,44}, -{54,-31,45}, -{54,-31,46}, -{54,-31,47}, -{54,-31,48}, -{54,-31,49}, -{54,-31,50}, -{54,-31,51}, -{54,-31,52}, -{54,-31,53}, -{54,-31,54}, -{54,-31,55}, -{54,-31,56}, -{54,-31,57}, -{54,-30,-11}, -{54,-30,-10}, -{54,-30,-9}, -{54,-30,-8}, -{54,-30,-7}, -{54,-30,-6}, -{54,-30,-5}, -{54,-30,-4}, -{54,-30,-3}, -{54,-30,-2}, -{54,-30,-1}, -{54,-30,0}, -{54,-30,1}, -{54,-30,2}, -{54,-30,3}, -{54,-30,4}, -{54,-30,5}, -{54,-30,6}, -{54,-30,7}, -{54,-30,8}, -{54,-30,9}, -{54,-30,10}, -{54,-30,11}, -{54,-30,12}, -{54,-30,13}, -{54,-30,14}, -{54,-30,15}, -{54,-30,16}, -{54,-30,17}, -{54,-30,18}, -{54,-30,19}, -{54,-30,20}, -{54,-30,21}, -{54,-30,22}, -{54,-30,23}, -{54,-30,24}, -{54,-30,25}, -{54,-30,26}, -{54,-30,27}, -{54,-30,28}, -{54,-30,29}, -{54,-30,30}, -{54,-30,31}, -{54,-30,32}, -{54,-30,33}, -{54,-30,34}, -{54,-30,35}, -{54,-30,36}, -{54,-30,37}, -{54,-30,38}, -{54,-30,39}, -{54,-30,40}, -{54,-30,41}, -{54,-30,42}, -{54,-30,43}, -{54,-30,44}, -{54,-30,45}, -{54,-30,46}, -{54,-30,47}, -{54,-30,48}, -{54,-30,49}, -{54,-30,50}, -{54,-30,51}, -{54,-30,52}, -{54,-30,53}, -{54,-30,54}, -{54,-30,55}, -{54,-30,56}, -{54,-30,57}, -{54,-29,-13}, -{54,-29,-12}, -{54,-29,-11}, -{54,-29,-10}, -{54,-29,-9}, -{54,-29,-8}, -{54,-29,-7}, -{54,-29,-6}, -{54,-29,-5}, -{54,-29,-4}, -{54,-29,-3}, -{54,-29,-2}, -{54,-29,-1}, -{54,-29,0}, -{54,-29,1}, -{54,-29,2}, -{54,-29,3}, -{54,-29,4}, -{54,-29,5}, -{54,-29,6}, -{54,-29,7}, -{54,-29,8}, -{54,-29,9}, -{54,-29,10}, -{54,-29,11}, -{54,-29,12}, -{54,-29,13}, -{54,-29,14}, -{54,-29,15}, -{54,-29,16}, -{54,-29,17}, -{54,-29,18}, -{54,-29,19}, -{54,-29,20}, -{54,-29,21}, -{54,-29,22}, -{54,-29,23}, -{54,-29,24}, -{54,-29,25}, -{54,-29,26}, -{54,-29,27}, -{54,-29,28}, -{54,-29,29}, -{54,-29,30}, -{54,-29,31}, -{54,-29,32}, -{54,-29,33}, -{54,-29,34}, -{54,-29,35}, -{54,-29,36}, -{54,-29,37}, -{54,-29,38}, -{54,-29,39}, -{54,-29,40}, -{54,-29,41}, -{54,-29,42}, -{54,-29,43}, -{54,-29,44}, -{54,-29,45}, -{54,-29,46}, -{54,-29,47}, -{54,-29,48}, -{54,-29,49}, -{54,-29,50}, -{54,-29,51}, -{54,-29,52}, -{54,-29,53}, -{54,-29,54}, -{54,-29,55}, -{54,-29,56}, -{54,-29,57}, -{54,-28,-14}, -{54,-28,-13}, -{54,-28,-12}, -{54,-28,-11}, -{54,-28,-10}, -{54,-28,-9}, -{54,-28,-8}, -{54,-28,-7}, -{54,-28,-6}, -{54,-28,-5}, -{54,-28,-4}, -{54,-28,-3}, -{54,-28,-2}, -{54,-28,-1}, -{54,-28,0}, -{54,-28,1}, -{54,-28,2}, -{54,-28,3}, -{54,-28,4}, -{54,-28,5}, -{54,-28,6}, -{54,-28,7}, -{54,-28,8}, -{54,-28,9}, -{54,-28,10}, -{54,-28,11}, -{54,-28,12}, -{54,-28,13}, -{54,-28,14}, -{54,-28,15}, -{54,-28,16}, -{54,-28,17}, -{54,-28,18}, -{54,-28,19}, -{54,-28,20}, -{54,-28,21}, -{54,-28,22}, -{54,-28,23}, -{54,-28,24}, -{54,-28,25}, -{54,-28,26}, -{54,-28,27}, -{54,-28,28}, -{54,-28,29}, -{54,-28,30}, -{54,-28,31}, -{54,-28,32}, -{54,-28,33}, -{54,-28,34}, -{54,-28,35}, -{54,-28,36}, -{54,-28,37}, -{54,-28,38}, -{54,-28,39}, -{54,-28,40}, -{54,-28,41}, -{54,-28,42}, -{54,-28,43}, -{54,-28,44}, -{54,-28,45}, -{54,-28,46}, -{54,-28,47}, -{54,-28,48}, -{54,-28,49}, -{54,-28,50}, -{54,-28,51}, -{54,-28,52}, -{54,-28,53}, -{54,-28,54}, -{54,-28,55}, -{54,-28,56}, -{54,-28,57}, -{54,-27,-16}, -{54,-27,-15}, -{54,-27,-14}, -{54,-27,-13}, -{54,-27,-12}, -{54,-27,-11}, -{54,-27,-10}, -{54,-27,-9}, -{54,-27,-8}, -{54,-27,-7}, -{54,-27,-6}, -{54,-27,-5}, -{54,-27,-4}, -{54,-27,-3}, -{54,-27,-2}, -{54,-27,-1}, -{54,-27,0}, -{54,-27,1}, -{54,-27,2}, -{54,-27,3}, -{54,-27,4}, -{54,-27,5}, -{54,-27,6}, -{54,-27,7}, -{54,-27,8}, -{54,-27,9}, -{54,-27,10}, -{54,-27,11}, -{54,-27,12}, -{54,-27,13}, -{54,-27,14}, -{54,-27,15}, -{54,-27,16}, -{54,-27,17}, -{54,-27,18}, -{54,-27,19}, -{54,-27,20}, -{54,-27,21}, -{54,-27,22}, -{54,-27,23}, -{54,-27,24}, -{54,-27,25}, -{54,-27,26}, -{54,-27,27}, -{54,-27,28}, -{54,-27,29}, -{54,-27,30}, -{54,-27,31}, -{54,-27,32}, -{54,-27,33}, -{54,-27,34}, -{54,-27,35}, -{54,-27,36}, -{54,-27,37}, -{54,-27,38}, -{54,-27,39}, -{54,-27,40}, -{54,-27,41}, -{54,-27,42}, -{54,-27,43}, -{54,-27,44}, -{54,-27,45}, -{54,-27,46}, -{54,-27,47}, -{54,-27,48}, -{54,-27,49}, -{54,-27,50}, -{54,-27,51}, -{54,-27,52}, -{54,-27,53}, -{54,-27,54}, -{54,-27,55}, -{54,-27,56}, -{54,-27,57}, -{54,-26,-17}, -{54,-26,-16}, -{54,-26,-15}, -{54,-26,-14}, -{54,-26,-13}, -{54,-26,-12}, -{54,-26,-11}, -{54,-26,-10}, -{54,-26,-9}, -{54,-26,-8}, -{54,-26,-7}, -{54,-26,-6}, -{54,-26,-5}, -{54,-26,-4}, -{54,-26,-3}, -{54,-26,-2}, -{54,-26,-1}, -{54,-26,0}, -{54,-26,1}, -{54,-26,2}, -{54,-26,3}, -{54,-26,4}, -{54,-26,5}, -{54,-26,6}, -{54,-26,7}, -{54,-26,8}, -{54,-26,9}, -{54,-26,10}, -{54,-26,11}, -{54,-26,12}, -{54,-26,13}, -{54,-26,14}, -{54,-26,15}, -{54,-26,16}, -{54,-26,17}, -{54,-26,18}, -{54,-26,19}, -{54,-26,20}, -{54,-26,21}, -{54,-26,22}, -{54,-26,23}, -{54,-26,24}, -{54,-26,25}, -{54,-26,26}, -{54,-26,27}, -{54,-26,28}, -{54,-26,29}, -{54,-26,30}, -{54,-26,31}, -{54,-26,32}, -{54,-26,33}, -{54,-26,34}, -{54,-26,35}, -{54,-26,36}, -{54,-26,37}, -{54,-26,38}, -{54,-26,39}, -{54,-26,40}, -{54,-26,41}, -{54,-26,42}, -{54,-26,43}, -{54,-26,44}, -{54,-26,45}, -{54,-26,46}, -{54,-26,47}, -{54,-26,48}, -{54,-26,49}, -{54,-26,50}, -{54,-26,51}, -{54,-26,52}, -{54,-26,53}, -{54,-26,54}, -{54,-26,55}, -{54,-26,56}, -{54,-26,57}, -{54,-25,-19}, -{54,-25,-18}, -{54,-25,-17}, -{54,-25,-16}, -{54,-25,-15}, -{54,-25,-14}, -{54,-25,-13}, -{54,-25,-12}, -{54,-25,-11}, -{54,-25,-10}, -{54,-25,-9}, -{54,-25,-8}, -{54,-25,-7}, -{54,-25,-6}, -{54,-25,-5}, -{54,-25,-4}, -{54,-25,-3}, -{54,-25,-2}, -{54,-25,-1}, -{54,-25,0}, -{54,-25,1}, -{54,-25,2}, -{54,-25,3}, -{54,-25,4}, -{54,-25,5}, -{54,-25,6}, -{54,-25,7}, -{54,-25,8}, -{54,-25,9}, -{54,-25,10}, -{54,-25,11}, -{54,-25,12}, -{54,-25,13}, -{54,-25,14}, -{54,-25,15}, -{54,-25,16}, -{54,-25,17}, -{54,-25,18}, -{54,-25,19}, -{54,-25,20}, -{54,-25,21}, -{54,-25,22}, -{54,-25,23}, -{54,-25,24}, -{54,-25,25}, -{54,-25,26}, -{54,-25,27}, -{54,-25,28}, -{54,-25,29}, -{54,-25,30}, -{54,-25,31}, -{54,-25,32}, -{54,-25,33}, -{54,-25,34}, -{54,-25,35}, -{54,-25,36}, -{54,-25,37}, -{54,-25,38}, -{54,-25,39}, -{54,-25,40}, -{54,-25,41}, -{54,-25,42}, -{54,-25,43}, -{54,-25,44}, -{54,-25,45}, -{54,-25,46}, -{54,-25,47}, -{54,-25,48}, -{54,-25,49}, -{54,-25,50}, -{54,-25,51}, -{54,-25,52}, -{54,-25,53}, -{54,-25,54}, -{54,-25,55}, -{54,-25,56}, -{54,-25,57}, -{54,-24,-20}, -{54,-24,-19}, -{54,-24,-18}, -{54,-24,-17}, -{54,-24,-16}, -{54,-24,-15}, -{54,-24,-14}, -{54,-24,-13}, -{54,-24,-12}, -{54,-24,-11}, -{54,-24,-10}, -{54,-24,-9}, -{54,-24,-8}, -{54,-24,-7}, -{54,-24,-6}, -{54,-24,-5}, -{54,-24,-4}, -{54,-24,-3}, -{54,-24,-2}, -{54,-24,-1}, -{54,-24,0}, -{54,-24,1}, -{54,-24,2}, -{54,-24,3}, -{54,-24,4}, -{54,-24,5}, -{54,-24,6}, -{54,-24,7}, -{54,-24,8}, -{54,-24,9}, -{54,-24,10}, -{54,-24,11}, -{54,-24,12}, -{54,-24,13}, -{54,-24,14}, -{54,-24,15}, -{54,-24,16}, -{54,-24,17}, -{54,-24,18}, -{54,-24,19}, -{54,-24,20}, -{54,-24,21}, -{54,-24,22}, -{54,-24,23}, -{54,-24,24}, -{54,-24,25}, -{54,-24,26}, -{54,-24,27}, -{54,-24,28}, -{54,-24,29}, -{54,-24,30}, -{54,-24,31}, -{54,-24,32}, -{54,-24,33}, -{54,-24,34}, -{54,-24,35}, -{54,-24,36}, -{54,-24,37}, -{54,-24,38}, -{54,-24,39}, -{54,-24,40}, -{54,-24,41}, -{54,-24,42}, -{54,-24,43}, -{54,-24,44}, -{54,-24,45}, -{54,-24,46}, -{54,-24,47}, -{54,-24,48}, -{54,-24,49}, -{54,-24,50}, -{54,-24,51}, -{54,-24,52}, -{54,-24,53}, -{54,-24,54}, -{54,-24,55}, -{54,-24,56}, -{54,-24,57}, -{54,-23,-21}, -{54,-23,-20}, -{54,-23,-19}, -{54,-23,-18}, -{54,-23,-17}, -{54,-23,-16}, -{54,-23,-15}, -{54,-23,-14}, -{54,-23,-13}, -{54,-23,-12}, -{54,-23,-11}, -{54,-23,-10}, -{54,-23,-9}, -{54,-23,-8}, -{54,-23,-7}, -{54,-23,-6}, -{54,-23,-5}, -{54,-23,-4}, -{54,-23,-3}, -{54,-23,-2}, -{54,-23,-1}, -{54,-23,0}, -{54,-23,1}, -{54,-23,2}, -{54,-23,3}, -{54,-23,4}, -{54,-23,5}, -{54,-23,6}, -{54,-23,7}, -{54,-23,8}, -{54,-23,9}, -{54,-23,10}, -{54,-23,11}, -{54,-23,12}, -{54,-23,13}, -{54,-23,14}, -{54,-23,15}, -{54,-23,16}, -{54,-23,17}, -{54,-23,18}, -{54,-23,19}, -{54,-23,20}, -{54,-23,21}, -{54,-23,22}, -{54,-23,23}, -{54,-23,24}, -{54,-23,25}, -{54,-23,26}, -{54,-23,27}, -{54,-23,28}, -{54,-23,29}, -{54,-23,30}, -{54,-23,31}, -{54,-23,32}, -{54,-23,33}, -{54,-23,34}, -{54,-23,35}, -{54,-23,36}, -{54,-23,37}, -{54,-23,38}, -{54,-23,39}, -{54,-23,40}, -{54,-23,41}, -{54,-23,42}, -{54,-23,43}, -{54,-23,44}, -{54,-23,45}, -{54,-23,46}, -{54,-23,47}, -{54,-23,48}, -{54,-23,49}, -{54,-23,50}, -{54,-23,51}, -{54,-23,52}, -{54,-23,53}, -{54,-23,54}, -{54,-23,55}, -{54,-23,56}, -{54,-23,57}, -{54,-23,58}, -{54,-22,-23}, -{54,-22,-22}, -{54,-22,-21}, -{54,-22,-20}, -{54,-22,-19}, -{54,-22,-18}, -{54,-22,-17}, -{54,-22,-16}, -{54,-22,-15}, -{54,-22,-14}, -{54,-22,-13}, -{54,-22,-12}, -{54,-22,-11}, -{54,-22,-10}, -{54,-22,-9}, -{54,-22,-8}, -{54,-22,-7}, -{54,-22,-6}, -{54,-22,-5}, -{54,-22,-4}, -{54,-22,-3}, -{54,-22,-2}, -{54,-22,-1}, -{54,-22,0}, -{54,-22,1}, -{54,-22,2}, -{54,-22,3}, -{54,-22,4}, -{54,-22,5}, -{54,-22,6}, -{54,-22,7}, -{54,-22,8}, -{54,-22,9}, -{54,-22,10}, -{54,-22,11}, -{54,-22,12}, -{54,-22,13}, -{54,-22,14}, -{54,-22,15}, -{54,-22,16}, -{54,-22,17}, -{54,-22,18}, -{54,-22,19}, -{54,-22,20}, -{54,-22,21}, -{54,-22,22}, -{54,-22,23}, -{54,-22,24}, -{54,-22,25}, -{54,-22,26}, -{54,-22,27}, -{54,-22,28}, -{54,-22,29}, -{54,-22,30}, -{54,-22,31}, -{54,-22,32}, -{54,-22,33}, -{54,-22,34}, -{54,-22,35}, -{54,-22,36}, -{54,-22,37}, -{54,-22,38}, -{54,-22,39}, -{54,-22,40}, -{54,-22,41}, -{54,-22,42}, -{54,-22,43}, -{54,-22,44}, -{54,-22,45}, -{54,-22,46}, -{54,-22,47}, -{54,-22,48}, -{54,-22,49}, -{54,-22,50}, -{54,-22,51}, -{54,-22,52}, -{54,-22,53}, -{54,-22,54}, -{54,-22,55}, -{54,-22,56}, -{54,-22,57}, -{54,-22,58}, -{54,-21,-24}, -{54,-21,-23}, -{54,-21,-22}, -{54,-21,-21}, -{54,-21,-20}, -{54,-21,-19}, -{54,-21,-18}, -{54,-21,-17}, -{54,-21,-16}, -{54,-21,-15}, -{54,-21,-14}, -{54,-21,-13}, -{54,-21,-12}, -{54,-21,-11}, -{54,-21,-10}, -{54,-21,-9}, -{54,-21,-8}, -{54,-21,-7}, -{54,-21,-6}, -{54,-21,-5}, -{54,-21,-4}, -{54,-21,-3}, -{54,-21,-2}, -{54,-21,-1}, -{54,-21,0}, -{54,-21,1}, -{54,-21,2}, -{54,-21,3}, -{54,-21,4}, -{54,-21,5}, -{54,-21,6}, -{54,-21,7}, -{54,-21,8}, -{54,-21,9}, -{54,-21,10}, -{54,-21,11}, -{54,-21,12}, -{54,-21,13}, -{54,-21,14}, -{54,-21,15}, -{54,-21,16}, -{54,-21,17}, -{54,-21,18}, -{54,-21,19}, -{54,-21,20}, -{54,-21,21}, -{54,-21,22}, -{54,-21,23}, -{54,-21,24}, -{54,-21,25}, -{54,-21,26}, -{54,-21,27}, -{54,-21,28}, -{54,-21,29}, -{54,-21,30}, -{54,-21,31}, -{54,-21,32}, -{54,-21,33}, -{54,-21,34}, -{54,-21,35}, -{54,-21,36}, -{54,-21,37}, -{54,-21,38}, -{54,-21,39}, -{54,-21,40}, -{54,-21,41}, -{54,-21,42}, -{54,-21,43}, -{54,-21,44}, -{54,-21,45}, -{54,-21,46}, -{54,-21,47}, -{54,-21,48}, -{54,-21,49}, -{54,-21,50}, -{54,-21,51}, -{54,-21,52}, -{54,-21,53}, -{54,-21,54}, -{54,-21,55}, -{54,-21,56}, -{54,-21,57}, -{54,-21,58}, -{54,-20,-26}, -{54,-20,-25}, -{54,-20,-24}, -{54,-20,-23}, -{54,-20,-22}, -{54,-20,-21}, -{54,-20,-20}, -{54,-20,-19}, -{54,-20,-18}, -{54,-20,-17}, -{54,-20,-16}, -{54,-20,-15}, -{54,-20,-14}, -{54,-20,-13}, -{54,-20,-12}, -{54,-20,-11}, -{54,-20,-10}, -{54,-20,-9}, -{54,-20,-8}, -{54,-20,-7}, -{54,-20,-6}, -{54,-20,-5}, -{54,-20,-4}, -{54,-20,-3}, -{54,-20,-2}, -{54,-20,-1}, -{54,-20,0}, -{54,-20,1}, -{54,-20,2}, -{54,-20,3}, -{54,-20,4}, -{54,-20,5}, -{54,-20,6}, -{54,-20,7}, -{54,-20,8}, -{54,-20,9}, -{54,-20,10}, -{54,-20,11}, -{54,-20,12}, -{54,-20,13}, -{54,-20,14}, -{54,-20,15}, -{54,-20,16}, -{54,-20,17}, -{54,-20,18}, -{54,-20,19}, -{54,-20,20}, -{54,-20,21}, -{54,-20,22}, -{54,-20,23}, -{54,-20,24}, -{54,-20,25}, -{54,-20,26}, -{54,-20,27}, -{54,-20,28}, -{54,-20,29}, -{54,-20,30}, -{54,-20,31}, -{54,-20,32}, -{54,-20,33}, -{54,-20,34}, -{54,-20,35}, -{54,-20,36}, -{54,-20,37}, -{54,-20,38}, -{54,-20,39}, -{54,-20,40}, -{54,-20,41}, -{54,-20,42}, -{54,-20,43}, -{54,-20,44}, -{54,-20,45}, -{54,-20,46}, -{54,-20,47}, -{54,-20,48}, -{54,-20,49}, -{54,-20,50}, -{54,-20,51}, -{54,-20,52}, -{54,-20,53}, -{54,-20,54}, -{54,-20,55}, -{54,-20,56}, -{54,-20,57}, -{54,-20,58}, -{54,-19,-27}, -{54,-19,-26}, -{54,-19,-25}, -{54,-19,-24}, -{54,-19,-23}, -{54,-19,-22}, -{54,-19,-21}, -{54,-19,-20}, -{54,-19,-19}, -{54,-19,-18}, -{54,-19,-17}, -{54,-19,-16}, -{54,-19,-15}, -{54,-19,-14}, -{54,-19,-13}, -{54,-19,-12}, -{54,-19,-11}, -{54,-19,-10}, -{54,-19,-9}, -{54,-19,-8}, -{54,-19,-7}, -{54,-19,-6}, -{54,-19,-5}, -{54,-19,-4}, -{54,-19,-3}, -{54,-19,-2}, -{54,-19,-1}, -{54,-19,0}, -{54,-19,1}, -{54,-19,2}, -{54,-19,3}, -{54,-19,4}, -{54,-19,5}, -{54,-19,6}, -{54,-19,7}, -{54,-19,8}, -{54,-19,9}, -{54,-19,10}, -{54,-19,11}, -{54,-19,12}, -{54,-19,13}, -{54,-19,14}, -{54,-19,15}, -{54,-19,16}, -{54,-19,17}, -{54,-19,18}, -{54,-19,19}, -{54,-19,20}, -{54,-19,21}, -{54,-19,22}, -{54,-19,23}, -{54,-19,24}, -{54,-19,25}, -{54,-19,26}, -{54,-19,27}, -{54,-19,28}, -{54,-19,29}, -{54,-19,30}, -{54,-19,31}, -{54,-19,32}, -{54,-19,33}, -{54,-19,34}, -{54,-19,35}, -{54,-19,36}, -{54,-19,37}, -{54,-19,38}, -{54,-19,39}, -{54,-19,40}, -{54,-19,41}, -{54,-19,42}, -{54,-19,43}, -{54,-19,44}, -{54,-19,45}, -{54,-19,46}, -{54,-19,47}, -{54,-19,48}, -{54,-19,49}, -{54,-19,50}, -{54,-19,51}, -{54,-19,52}, -{54,-19,53}, -{54,-19,54}, -{54,-19,55}, -{54,-19,56}, -{54,-19,57}, -{54,-19,58}, -{54,-18,-28}, -{54,-18,-27}, -{54,-18,-26}, -{54,-18,-25}, -{54,-18,-24}, -{54,-18,-23}, -{54,-18,-22}, -{54,-18,-21}, -{54,-18,-20}, -{54,-18,-19}, -{54,-18,-18}, -{54,-18,-17}, -{54,-18,-16}, -{54,-18,-15}, -{54,-18,-14}, -{54,-18,-13}, -{54,-18,-12}, -{54,-18,-11}, -{54,-18,-10}, -{54,-18,-9}, -{54,-18,-8}, -{54,-18,-7}, -{54,-18,-6}, -{54,-18,-5}, -{54,-18,-4}, -{54,-18,-3}, -{54,-18,-2}, -{54,-18,-1}, -{54,-18,0}, -{54,-18,1}, -{54,-18,2}, -{54,-18,3}, -{54,-18,4}, -{54,-18,5}, -{54,-18,6}, -{54,-18,7}, -{54,-18,8}, -{54,-18,9}, -{54,-18,10}, -{54,-18,11}, -{54,-18,12}, -{54,-18,13}, -{54,-18,14}, -{54,-18,15}, -{54,-18,16}, -{54,-18,17}, -{54,-18,18}, -{54,-18,19}, -{54,-18,20}, -{54,-18,21}, -{54,-18,22}, -{54,-18,23}, -{54,-18,24}, -{54,-18,25}, -{54,-18,26}, -{54,-18,27}, -{54,-18,28}, -{54,-18,29}, -{54,-18,30}, -{54,-18,31}, -{54,-18,32}, -{54,-18,33}, -{54,-18,34}, -{54,-18,35}, -{54,-18,36}, -{54,-18,37}, -{54,-18,38}, -{54,-18,39}, -{54,-18,40}, -{54,-18,41}, -{54,-18,42}, -{54,-18,43}, -{54,-18,44}, -{54,-18,45}, -{54,-18,46}, -{54,-18,47}, -{54,-18,48}, -{54,-18,49}, -{54,-18,50}, -{54,-18,51}, -{54,-18,52}, -{54,-18,53}, -{54,-18,54}, -{54,-18,55}, -{54,-18,56}, -{54,-18,57}, -{54,-18,58}, -{54,-17,-29}, -{54,-17,-28}, -{54,-17,-27}, -{54,-17,-26}, -{54,-17,-25}, -{54,-17,-24}, -{54,-17,-23}, -{54,-17,-22}, -{54,-17,-21}, -{54,-17,-20}, -{54,-17,-19}, -{54,-17,-18}, -{54,-17,-17}, -{54,-17,-16}, -{54,-17,-15}, -{54,-17,-14}, -{54,-17,-13}, -{54,-17,-12}, -{54,-17,-11}, -{54,-17,-10}, -{54,-17,-9}, -{54,-17,-8}, -{54,-17,-7}, -{54,-17,-6}, -{54,-17,-5}, -{54,-17,-4}, -{54,-17,-3}, -{54,-17,-2}, -{54,-17,-1}, -{54,-17,0}, -{54,-17,1}, -{54,-17,2}, -{54,-17,3}, -{54,-17,4}, -{54,-17,5}, -{54,-17,6}, -{54,-17,7}, -{54,-17,8}, -{54,-17,9}, -{54,-17,10}, -{54,-17,11}, -{54,-17,12}, -{54,-17,13}, -{54,-17,14}, -{54,-17,15}, -{54,-17,16}, -{54,-17,17}, -{54,-17,18}, -{54,-17,19}, -{54,-17,20}, -{54,-17,21}, -{54,-17,22}, -{54,-17,23}, -{54,-17,24}, -{54,-17,25}, -{54,-17,26}, -{54,-17,27}, -{54,-17,28}, -{54,-17,29}, -{54,-17,30}, -{54,-17,31}, -{54,-17,32}, -{54,-17,33}, -{54,-17,34}, -{54,-17,35}, -{54,-17,36}, -{54,-17,37}, -{54,-17,38}, -{54,-17,39}, -{54,-17,40}, -{54,-17,41}, -{54,-17,42}, -{54,-17,43}, -{54,-17,44}, -{54,-17,45}, -{54,-17,46}, -{54,-17,47}, -{54,-17,48}, -{54,-17,49}, -{54,-17,50}, -{54,-17,51}, -{54,-17,52}, -{54,-17,53}, -{54,-17,54}, -{54,-17,55}, -{54,-17,56}, -{54,-17,57}, -{54,-17,58}, -{54,-16,-31}, -{54,-16,-30}, -{54,-16,-29}, -{54,-16,-28}, -{54,-16,-27}, -{54,-16,-26}, -{54,-16,-25}, -{54,-16,-24}, -{54,-16,-23}, -{54,-16,-22}, -{54,-16,-21}, -{54,-16,-20}, -{54,-16,-19}, -{54,-16,-18}, -{54,-16,-17}, -{54,-16,-16}, -{54,-16,-15}, -{54,-16,-14}, -{54,-16,-13}, -{54,-16,-12}, -{54,-16,-11}, -{54,-16,-10}, -{54,-16,-9}, -{54,-16,-8}, -{54,-16,-7}, -{54,-16,-6}, -{54,-16,-5}, -{54,-16,-4}, -{54,-16,-3}, -{54,-16,-2}, -{54,-16,-1}, -{54,-16,0}, -{54,-16,1}, -{54,-16,2}, -{54,-16,3}, -{54,-16,4}, -{54,-16,5}, -{54,-16,6}, -{54,-16,7}, -{54,-16,8}, -{54,-16,9}, -{54,-16,10}, -{54,-16,11}, -{54,-16,12}, -{54,-16,13}, -{54,-16,14}, -{54,-16,15}, -{54,-16,16}, -{54,-16,17}, -{54,-16,18}, -{54,-16,19}, -{54,-16,20}, -{54,-16,21}, -{54,-16,22}, -{54,-16,23}, -{54,-16,24}, -{54,-16,25}, -{54,-16,26}, -{54,-16,27}, -{54,-16,28}, -{54,-16,29}, -{54,-16,30}, -{54,-16,31}, -{54,-16,32}, -{54,-16,33}, -{54,-16,34}, -{54,-16,35}, -{54,-16,36}, -{54,-16,37}, -{54,-16,38}, -{54,-16,39}, -{54,-16,40}, -{54,-16,41}, -{54,-16,42}, -{54,-16,43}, -{54,-16,44}, -{54,-16,45}, -{54,-16,46}, -{54,-16,47}, -{54,-16,48}, -{54,-16,49}, -{54,-16,50}, -{54,-16,51}, -{54,-16,52}, -{54,-16,53}, -{54,-16,54}, -{54,-16,55}, -{54,-16,56}, -{54,-16,57}, -{54,-16,58}, -{54,-15,-32}, -{54,-15,-31}, -{54,-15,-30}, -{54,-15,-29}, -{54,-15,-28}, -{54,-15,-27}, -{54,-15,-26}, -{54,-15,-25}, -{54,-15,-24}, -{54,-15,-23}, -{54,-15,-22}, -{54,-15,-21}, -{54,-15,-20}, -{54,-15,-19}, -{54,-15,-18}, -{54,-15,-17}, -{54,-15,-16}, -{54,-15,-15}, -{54,-15,-14}, -{54,-15,-13}, -{54,-15,-12}, -{54,-15,-11}, -{54,-15,-10}, -{54,-15,-9}, -{54,-15,-8}, -{54,-15,-7}, -{54,-15,-6}, -{54,-15,-5}, -{54,-15,-4}, -{54,-15,-3}, -{54,-15,-2}, -{54,-15,-1}, -{54,-15,0}, -{54,-15,1}, -{54,-15,2}, -{54,-15,3}, -{54,-15,4}, -{54,-15,5}, -{54,-15,6}, -{54,-15,7}, -{54,-15,8}, -{54,-15,9}, -{54,-15,10}, -{54,-15,11}, -{54,-15,12}, -{54,-15,13}, -{54,-15,14}, -{54,-15,15}, -{54,-15,16}, -{54,-15,17}, -{54,-15,18}, -{54,-15,19}, -{54,-15,20}, -{54,-15,21}, -{54,-15,22}, -{54,-15,23}, -{54,-15,24}, -{54,-15,25}, -{54,-15,26}, -{54,-15,27}, -{54,-15,28}, -{54,-15,29}, -{54,-15,30}, -{54,-15,31}, -{54,-15,32}, -{54,-15,33}, -{54,-15,34}, -{54,-15,35}, -{54,-15,36}, -{54,-15,37}, -{54,-15,38}, -{54,-15,39}, -{54,-15,40}, -{54,-15,41}, -{54,-15,42}, -{54,-15,43}, -{54,-15,44}, -{54,-15,45}, -{54,-15,46}, -{54,-15,47}, -{54,-15,48}, -{54,-15,49}, -{54,-15,50}, -{54,-15,51}, -{54,-15,52}, -{54,-15,53}, -{54,-15,54}, -{54,-15,55}, -{54,-15,56}, -{54,-15,57}, -{54,-15,58}, -{54,-14,-33}, -{54,-14,-32}, -{54,-14,-31}, -{54,-14,-30}, -{54,-14,-29}, -{54,-14,-28}, -{54,-14,-27}, -{54,-14,-26}, -{54,-14,-25}, -{54,-14,-24}, -{54,-14,-23}, -{54,-14,-22}, -{54,-14,-21}, -{54,-14,-20}, -{54,-14,-19}, -{54,-14,-18}, -{54,-14,-17}, -{54,-14,-16}, -{54,-14,-15}, -{54,-14,-14}, -{54,-14,-13}, -{54,-14,-12}, -{54,-14,-11}, -{54,-14,-10}, -{54,-14,-9}, -{54,-14,-8}, -{54,-14,-7}, -{54,-14,-6}, -{54,-14,-5}, -{54,-14,-4}, -{54,-14,-3}, -{54,-14,-2}, -{54,-14,-1}, -{54,-14,0}, -{54,-14,1}, -{54,-14,2}, -{54,-14,3}, -{54,-14,4}, -{54,-14,5}, -{54,-14,6}, -{54,-14,7}, -{54,-14,8}, -{54,-14,9}, -{54,-14,10}, -{54,-14,11}, -{54,-14,12}, -{54,-14,13}, -{54,-14,14}, -{54,-14,15}, -{54,-14,16}, -{54,-14,17}, -{54,-14,18}, -{54,-14,19}, -{54,-14,20}, -{54,-14,21}, -{54,-14,22}, -{54,-14,23}, -{54,-14,24}, -{54,-14,25}, -{54,-14,26}, -{54,-14,27}, -{54,-14,28}, -{54,-14,29}, -{54,-14,30}, -{54,-14,31}, -{54,-14,32}, -{54,-14,33}, -{54,-14,34}, -{54,-14,35}, -{54,-14,36}, -{54,-14,37}, -{54,-14,38}, -{54,-14,39}, -{54,-14,40}, -{54,-14,41}, -{54,-14,42}, -{54,-14,43}, -{54,-14,44}, -{54,-14,45}, -{54,-14,46}, -{54,-14,47}, -{54,-14,48}, -{54,-14,49}, -{54,-14,50}, -{54,-14,51}, -{54,-14,52}, -{54,-14,53}, -{54,-14,54}, -{54,-14,55}, -{54,-14,56}, -{54,-14,57}, -{54,-14,58}, -{54,-13,-35}, -{54,-13,-34}, -{54,-13,-33}, -{54,-13,-32}, -{54,-13,-31}, -{54,-13,-30}, -{54,-13,-29}, -{54,-13,-28}, -{54,-13,-27}, -{54,-13,-26}, -{54,-13,-25}, -{54,-13,-24}, -{54,-13,-23}, -{54,-13,-22}, -{54,-13,-21}, -{54,-13,-20}, -{54,-13,-19}, -{54,-13,-18}, -{54,-13,-17}, -{54,-13,-16}, -{54,-13,-15}, -{54,-13,-14}, -{54,-13,-13}, -{54,-13,-12}, -{54,-13,-11}, -{54,-13,-10}, -{54,-13,-9}, -{54,-13,-8}, -{54,-13,-7}, -{54,-13,-6}, -{54,-13,-5}, -{54,-13,-4}, -{54,-13,-3}, -{54,-13,-2}, -{54,-13,-1}, -{54,-13,0}, -{54,-13,1}, -{54,-13,2}, -{54,-13,3}, -{54,-13,4}, -{54,-13,5}, -{54,-13,6}, -{54,-13,7}, -{54,-13,8}, -{54,-13,9}, -{54,-13,10}, -{54,-13,11}, -{54,-13,12}, -{54,-13,13}, -{54,-13,14}, -{54,-13,15}, -{54,-13,16}, -{54,-13,17}, -{54,-13,18}, -{54,-13,19}, -{54,-13,20}, -{54,-13,21}, -{54,-13,22}, -{54,-13,23}, -{54,-13,24}, -{54,-13,25}, -{54,-13,26}, -{54,-13,27}, -{54,-13,28}, -{54,-13,29}, -{54,-13,30}, -{54,-13,31}, -{54,-13,32}, -{54,-13,33}, -{54,-13,34}, -{54,-13,35}, -{54,-13,36}, -{54,-13,37}, -{54,-13,38}, -{54,-13,39}, -{54,-13,40}, -{54,-13,41}, -{54,-13,42}, -{54,-13,43}, -{54,-13,44}, -{54,-13,45}, -{54,-13,46}, -{54,-13,47}, -{54,-13,48}, -{54,-13,49}, -{54,-13,50}, -{54,-13,51}, -{54,-13,52}, -{54,-13,53}, -{54,-13,54}, -{54,-13,55}, -{54,-13,56}, -{54,-13,57}, -{54,-13,58}, -{54,-12,-36}, -{54,-12,-35}, -{54,-12,-34}, -{54,-12,-33}, -{54,-12,-32}, -{54,-12,-31}, -{54,-12,-30}, -{54,-12,-29}, -{54,-12,-28}, -{54,-12,-27}, -{54,-12,-26}, -{54,-12,-25}, -{54,-12,-24}, -{54,-12,-23}, -{54,-12,-22}, -{54,-12,-21}, -{54,-12,-20}, -{54,-12,-19}, -{54,-12,-18}, -{54,-12,-17}, -{54,-12,-16}, -{54,-12,-15}, -{54,-12,-14}, -{54,-12,-13}, -{54,-12,-12}, -{54,-12,-11}, -{54,-12,-10}, -{54,-12,-9}, -{54,-12,-8}, -{54,-12,-7}, -{54,-12,-6}, -{54,-12,-5}, -{54,-12,-4}, -{54,-12,-3}, -{54,-12,-2}, -{54,-12,-1}, -{54,-12,0}, -{54,-12,1}, -{54,-12,2}, -{54,-12,3}, -{54,-12,4}, -{54,-12,5}, -{54,-12,6}, -{54,-12,7}, -{54,-12,8}, -{54,-12,9}, -{54,-12,10}, -{54,-12,11}, -{54,-12,12}, -{54,-12,13}, -{54,-12,14}, -{54,-12,15}, -{54,-12,16}, -{54,-12,17}, -{54,-12,18}, -{54,-12,19}, -{54,-12,20}, -{54,-12,21}, -{54,-12,22}, -{54,-12,23}, -{54,-12,24}, -{54,-12,25}, -{54,-12,26}, -{54,-12,27}, -{54,-12,28}, -{54,-12,29}, -{54,-12,30}, -{54,-12,31}, -{54,-12,32}, -{54,-12,33}, -{54,-12,34}, -{54,-12,35}, -{54,-12,36}, -{54,-12,37}, -{54,-12,38}, -{54,-12,39}, -{54,-12,40}, -{54,-12,41}, -{54,-12,42}, -{54,-12,43}, -{54,-12,44}, -{54,-12,45}, -{54,-12,46}, -{54,-12,47}, -{54,-12,48}, -{54,-12,49}, -{54,-12,50}, -{54,-12,51}, -{54,-12,52}, -{54,-12,53}, -{54,-12,54}, -{54,-12,55}, -{54,-12,56}, -{54,-12,57}, -{54,-12,58}, -{54,-11,-37}, -{54,-11,-36}, -{54,-11,-35}, -{54,-11,-34}, -{54,-11,-33}, -{54,-11,-32}, -{54,-11,-31}, -{54,-11,-30}, -{54,-11,-29}, -{54,-11,-28}, -{54,-11,-27}, -{54,-11,-26}, -{54,-11,-25}, -{54,-11,-24}, -{54,-11,-23}, -{54,-11,-22}, -{54,-11,-21}, -{54,-11,-20}, -{54,-11,-19}, -{54,-11,-18}, -{54,-11,-17}, -{54,-11,-16}, -{54,-11,-15}, -{54,-11,-14}, -{54,-11,-13}, -{54,-11,-12}, -{54,-11,-11}, -{54,-11,-10}, -{54,-11,-9}, -{54,-11,-8}, -{54,-11,-7}, -{54,-11,-6}, -{54,-11,-5}, -{54,-11,-4}, -{54,-11,-3}, -{54,-11,-2}, -{54,-11,-1}, -{54,-11,0}, -{54,-11,1}, -{54,-11,2}, -{54,-11,3}, -{54,-11,4}, -{54,-11,5}, -{54,-11,6}, -{54,-11,7}, -{54,-11,8}, -{54,-11,9}, -{54,-11,10}, -{54,-11,11}, -{54,-11,12}, -{54,-11,13}, -{54,-11,14}, -{54,-11,15}, -{54,-11,16}, -{54,-11,17}, -{54,-11,18}, -{54,-11,19}, -{54,-11,20}, -{54,-11,21}, -{54,-11,22}, -{54,-11,23}, -{54,-11,24}, -{54,-11,25}, -{54,-11,26}, -{54,-11,27}, -{54,-11,28}, -{54,-11,29}, -{54,-11,30}, -{54,-11,31}, -{54,-11,32}, -{54,-11,33}, -{54,-11,34}, -{54,-11,35}, -{54,-11,36}, -{54,-11,37}, -{54,-11,38}, -{54,-11,39}, -{54,-11,40}, -{54,-11,41}, -{54,-11,42}, -{54,-11,43}, -{54,-11,44}, -{54,-11,45}, -{54,-11,46}, -{54,-11,47}, -{54,-11,48}, -{54,-11,49}, -{54,-11,50}, -{54,-11,51}, -{54,-11,52}, -{54,-11,53}, -{54,-11,54}, -{54,-11,55}, -{54,-11,56}, -{54,-11,57}, -{54,-11,58}, -{54,-10,-38}, -{54,-10,-37}, -{54,-10,-36}, -{54,-10,-35}, -{54,-10,-34}, -{54,-10,-33}, -{54,-10,-32}, -{54,-10,-31}, -{54,-10,-30}, -{54,-10,-29}, -{54,-10,-28}, -{54,-10,-27}, -{54,-10,-26}, -{54,-10,-25}, -{54,-10,-24}, -{54,-10,-23}, -{54,-10,-22}, -{54,-10,-21}, -{54,-10,-20}, -{54,-10,-19}, -{54,-10,-18}, -{54,-10,-17}, -{54,-10,-16}, -{54,-10,-15}, -{54,-10,-14}, -{54,-10,-13}, -{54,-10,-12}, -{54,-10,-11}, -{54,-10,-10}, -{54,-10,-9}, -{54,-10,-8}, -{54,-10,-7}, -{54,-10,-6}, -{54,-10,-5}, -{54,-10,-4}, -{54,-10,-3}, -{54,-10,-2}, -{54,-10,-1}, -{54,-10,0}, -{54,-10,1}, -{54,-10,2}, -{54,-10,3}, -{54,-10,4}, -{54,-10,5}, -{54,-10,6}, -{54,-10,7}, -{54,-10,8}, -{54,-10,9}, -{54,-10,10}, -{54,-10,11}, -{54,-10,12}, -{54,-10,13}, -{54,-10,14}, -{54,-10,15}, -{54,-10,16}, -{54,-10,17}, -{54,-10,18}, -{54,-10,19}, -{54,-10,20}, -{54,-10,21}, -{54,-10,22}, -{54,-10,23}, -{54,-10,24}, -{54,-10,25}, -{54,-10,26}, -{54,-10,27}, -{54,-10,28}, -{54,-10,29}, -{54,-10,30}, -{54,-10,31}, -{54,-10,32}, -{54,-10,33}, -{54,-10,34}, -{54,-10,35}, -{54,-10,36}, -{54,-10,37}, -{54,-10,38}, -{54,-10,39}, -{54,-10,40}, -{54,-10,41}, -{54,-10,42}, -{54,-10,43}, -{54,-10,44}, -{54,-10,45}, -{54,-10,46}, -{54,-10,47}, -{54,-10,48}, -{54,-10,49}, -{54,-10,50}, -{54,-10,51}, -{54,-10,52}, -{54,-10,53}, -{54,-10,54}, -{54,-10,55}, -{54,-10,56}, -{54,-10,57}, -{54,-10,58}, -{54,-9,-39}, -{54,-9,-38}, -{54,-9,-37}, -{54,-9,-36}, -{54,-9,-35}, -{54,-9,-34}, -{54,-9,-33}, -{54,-9,-32}, -{54,-9,-31}, -{54,-9,-30}, -{54,-9,-29}, -{54,-9,-28}, -{54,-9,-27}, -{54,-9,-26}, -{54,-9,-25}, -{54,-9,-24}, -{54,-9,-23}, -{54,-9,-22}, -{54,-9,-21}, -{54,-9,-20}, -{54,-9,-19}, -{54,-9,-18}, -{54,-9,-17}, -{54,-9,-16}, -{54,-9,-15}, -{54,-9,-14}, -{54,-9,-13}, -{54,-9,-12}, -{54,-9,-11}, -{54,-9,-10}, -{54,-9,-9}, -{54,-9,-8}, -{54,-9,-7}, -{54,-9,-6}, -{54,-9,-5}, -{54,-9,-4}, -{54,-9,-3}, -{54,-9,-2}, -{54,-9,-1}, -{54,-9,0}, -{54,-9,1}, -{54,-9,2}, -{54,-9,3}, -{54,-9,4}, -{54,-9,5}, -{54,-9,6}, -{54,-9,7}, -{54,-9,8}, -{54,-9,9}, -{54,-9,10}, -{54,-9,11}, -{54,-9,12}, -{54,-9,13}, -{54,-9,14}, -{54,-9,15}, -{54,-9,16}, -{54,-9,17}, -{54,-9,18}, -{54,-9,19}, -{54,-9,20}, -{54,-9,21}, -{54,-9,22}, -{54,-9,23}, -{54,-9,24}, -{54,-9,25}, -{54,-9,26}, -{54,-9,27}, -{54,-9,28}, -{54,-9,29}, -{54,-9,30}, -{54,-9,31}, -{54,-9,32}, -{54,-9,33}, -{54,-9,34}, -{54,-9,35}, -{54,-9,36}, -{54,-9,37}, -{54,-9,38}, -{54,-9,39}, -{54,-9,40}, -{54,-9,41}, -{54,-9,42}, -{54,-9,43}, -{54,-9,44}, -{54,-9,45}, -{54,-9,46}, -{54,-9,47}, -{54,-9,48}, -{54,-9,49}, -{54,-9,50}, -{54,-9,51}, -{54,-9,52}, -{54,-9,53}, -{54,-9,54}, -{54,-9,55}, -{54,-9,56}, -{54,-9,57}, -{54,-9,58}, -{54,-8,-41}, -{54,-8,-40}, -{54,-8,-39}, -{54,-8,-38}, -{54,-8,-37}, -{54,-8,-36}, -{54,-8,-35}, -{54,-8,-34}, -{54,-8,-33}, -{54,-8,-32}, -{54,-8,-31}, -{54,-8,-30}, -{54,-8,-29}, -{54,-8,-28}, -{54,-8,-27}, -{54,-8,-26}, -{54,-8,-25}, -{54,-8,-24}, -{54,-8,-23}, -{54,-8,-22}, -{54,-8,-21}, -{54,-8,-20}, -{54,-8,-19}, -{54,-8,-18}, -{54,-8,-17}, -{54,-8,-16}, -{54,-8,-15}, -{54,-8,-14}, -{54,-8,-13}, -{54,-8,-12}, -{54,-8,-11}, -{54,-8,-10}, -{54,-8,-9}, -{54,-8,-8}, -{54,-8,-7}, -{54,-8,-6}, -{54,-8,-5}, -{54,-8,-4}, -{54,-8,-3}, -{54,-8,-2}, -{54,-8,-1}, -{54,-8,0}, -{54,-8,1}, -{54,-8,2}, -{54,-8,3}, -{54,-8,4}, -{54,-8,5}, -{54,-8,6}, -{54,-8,7}, -{54,-8,8}, -{54,-8,9}, -{54,-8,10}, -{54,-8,11}, -{54,-8,12}, -{54,-8,13}, -{54,-8,14}, -{54,-8,15}, -{54,-8,16}, -{54,-8,17}, -{54,-8,18}, -{54,-8,19}, -{54,-8,20}, -{54,-8,21}, -{54,-8,22}, -{54,-8,23}, -{54,-8,24}, -{54,-8,25}, -{54,-8,26}, -{54,-8,27}, -{54,-8,28}, -{54,-8,29}, -{54,-8,30}, -{54,-8,31}, -{54,-8,32}, -{54,-8,33}, -{54,-8,34}, -{54,-8,35}, -{54,-8,36}, -{54,-8,37}, -{54,-8,38}, -{54,-8,39}, -{54,-8,40}, -{54,-8,41}, -{54,-8,42}, -{54,-8,43}, -{54,-8,44}, -{54,-8,45}, -{54,-8,46}, -{54,-8,47}, -{54,-8,48}, -{54,-8,49}, -{54,-8,50}, -{54,-8,51}, -{54,-8,52}, -{54,-8,53}, -{54,-8,54}, -{54,-8,55}, -{54,-8,56}, -{54,-8,57}, -{54,-8,58}, -{54,-7,-42}, -{54,-7,-41}, -{54,-7,-40}, -{54,-7,-39}, -{54,-7,-38}, -{54,-7,-37}, -{54,-7,-36}, -{54,-7,-35}, -{54,-7,-34}, -{54,-7,-33}, -{54,-7,-32}, -{54,-7,-31}, -{54,-7,-30}, -{54,-7,-29}, -{54,-7,-28}, -{54,-7,-27}, -{54,-7,-26}, -{54,-7,-25}, -{54,-7,-24}, -{54,-7,-23}, -{54,-7,-22}, -{54,-7,-21}, -{54,-7,-20}, -{54,-7,-19}, -{54,-7,-18}, -{54,-7,-17}, -{54,-7,-16}, -{54,-7,-15}, -{54,-7,-14}, -{54,-7,-13}, -{54,-7,-12}, -{54,-7,-11}, -{54,-7,-10}, -{54,-7,-9}, -{54,-7,-8}, -{54,-7,-7}, -{54,-7,-6}, -{54,-7,-5}, -{54,-7,-4}, -{54,-7,-3}, -{54,-7,-2}, -{54,-7,-1}, -{54,-7,0}, -{54,-7,1}, -{54,-7,2}, -{54,-7,3}, -{54,-7,4}, -{54,-7,5}, -{54,-7,6}, -{54,-7,7}, -{54,-7,8}, -{54,-7,9}, -{54,-7,10}, -{54,-7,11}, -{54,-7,12}, -{54,-7,13}, -{54,-7,14}, -{54,-7,15}, -{54,-7,16}, -{54,-7,17}, -{54,-7,18}, -{54,-7,19}, -{54,-7,20}, -{54,-7,21}, -{54,-7,22}, -{54,-7,23}, -{54,-7,24}, -{54,-7,25}, -{54,-7,26}, -{54,-7,27}, -{54,-7,28}, -{54,-7,29}, -{54,-7,30}, -{54,-7,31}, -{54,-7,32}, -{54,-7,33}, -{54,-7,34}, -{54,-7,35}, -{54,-7,36}, -{54,-7,37}, -{54,-7,38}, -{54,-7,39}, -{54,-7,40}, -{54,-7,41}, -{54,-7,42}, -{54,-7,43}, -{54,-7,44}, -{54,-7,45}, -{54,-7,46}, -{54,-7,47}, -{54,-7,48}, -{54,-7,49}, -{54,-7,50}, -{54,-7,51}, -{54,-7,52}, -{54,-7,53}, -{54,-7,54}, -{54,-7,55}, -{54,-7,56}, -{54,-7,57}, -{54,-7,58}, -{54,-7,59}, -{54,-6,-43}, -{54,-6,-42}, -{54,-6,-41}, -{54,-6,-40}, -{54,-6,-39}, -{54,-6,-38}, -{54,-6,-37}, -{54,-6,-36}, -{54,-6,-35}, -{54,-6,-34}, -{54,-6,-33}, -{54,-6,-32}, -{54,-6,-31}, -{54,-6,-30}, -{54,-6,-29}, -{54,-6,-28}, -{54,-6,-27}, -{54,-6,-26}, -{54,-6,-25}, -{54,-6,-24}, -{54,-6,-23}, -{54,-6,-22}, -{54,-6,-21}, -{54,-6,-20}, -{54,-6,-19}, -{54,-6,-18}, -{54,-6,-17}, -{54,-6,-16}, -{54,-6,-15}, -{54,-6,-14}, -{54,-6,-13}, -{54,-6,-12}, -{54,-6,-11}, -{54,-6,-10}, -{54,-6,-9}, -{54,-6,-8}, -{54,-6,-7}, -{54,-6,-6}, -{54,-6,-5}, -{54,-6,-4}, -{54,-6,-3}, -{54,-6,-2}, -{54,-6,-1}, -{54,-6,0}, -{54,-6,1}, -{54,-6,2}, -{54,-6,3}, -{54,-6,4}, -{54,-6,5}, -{54,-6,6}, -{54,-6,7}, -{54,-6,8}, -{54,-6,9}, -{54,-6,10}, -{54,-6,11}, -{54,-6,12}, -{54,-6,13}, -{54,-6,14}, -{54,-6,15}, -{54,-6,16}, -{54,-6,17}, -{54,-6,18}, -{54,-6,19}, -{54,-6,20}, -{54,-6,21}, -{54,-6,22}, -{54,-6,23}, -{54,-6,24}, -{54,-6,25}, -{54,-6,26}, -{54,-6,27}, -{54,-6,28}, -{54,-6,29}, -{54,-6,30}, -{54,-6,31}, -{54,-6,32}, -{54,-6,33}, -{54,-6,34}, -{54,-6,35}, -{54,-6,36}, -{54,-6,37}, -{54,-6,38}, -{54,-6,39}, -{54,-6,40}, -{54,-6,41}, -{54,-6,42}, -{54,-6,43}, -{54,-6,44}, -{54,-6,45}, -{54,-6,46}, -{54,-6,47}, -{54,-6,48}, -{54,-6,49}, -{54,-6,50}, -{54,-6,51}, -{54,-6,52}, -{54,-6,53}, -{54,-6,54}, -{54,-6,55}, -{54,-6,56}, -{54,-6,57}, -{54,-6,58}, -{54,-6,59}, -{54,-5,-44}, -{54,-5,-43}, -{54,-5,-42}, -{54,-5,-41}, -{54,-5,-40}, -{54,-5,-39}, -{54,-5,-38}, -{54,-5,-37}, -{54,-5,-36}, -{54,-5,-35}, -{54,-5,-34}, -{54,-5,-33}, -{54,-5,-32}, -{54,-5,-31}, -{54,-5,-30}, -{54,-5,-29}, -{54,-5,-28}, -{54,-5,-27}, -{54,-5,-26}, -{54,-5,-25}, -{54,-5,-24}, -{54,-5,-23}, -{54,-5,-22}, -{54,-5,-21}, -{54,-5,-20}, -{54,-5,-19}, -{54,-5,-18}, -{54,-5,-17}, -{54,-5,-16}, -{54,-5,-15}, -{54,-5,-14}, -{54,-5,-13}, -{54,-5,-12}, -{54,-5,-11}, -{54,-5,-10}, -{54,-5,-9}, -{54,-5,-8}, -{54,-5,-7}, -{54,-5,-6}, -{54,-5,-5}, -{54,-5,-4}, -{54,-5,-3}, -{54,-5,-2}, -{54,-5,-1}, -{54,-5,0}, -{54,-5,1}, -{54,-5,2}, -{54,-5,3}, -{54,-5,4}, -{54,-5,5}, -{54,-5,6}, -{54,-5,7}, -{54,-5,8}, -{54,-5,9}, -{54,-5,10}, -{54,-5,11}, -{54,-5,12}, -{54,-5,13}, -{54,-5,14}, -{54,-5,15}, -{54,-5,16}, -{54,-5,17}, -{54,-5,18}, -{54,-5,19}, -{54,-5,20}, -{54,-5,21}, -{54,-5,22}, -{54,-5,23}, -{54,-5,24}, -{54,-5,25}, -{54,-5,26}, -{54,-5,27}, -{54,-5,28}, -{54,-5,29}, -{54,-5,30}, -{54,-5,31}, -{54,-5,32}, -{54,-5,33}, -{54,-5,34}, -{54,-5,35}, -{54,-5,36}, -{54,-5,37}, -{54,-5,38}, -{54,-5,39}, -{54,-5,40}, -{54,-5,41}, -{54,-5,42}, -{54,-5,43}, -{54,-5,44}, -{54,-5,45}, -{54,-5,46}, -{54,-5,47}, -{54,-5,48}, -{54,-5,49}, -{54,-5,50}, -{54,-5,51}, -{54,-5,52}, -{54,-5,53}, -{54,-5,54}, -{54,-5,55}, -{54,-5,56}, -{54,-5,57}, -{54,-5,58}, -{54,-5,59}, -{54,-4,-45}, -{54,-4,-44}, -{54,-4,-43}, -{54,-4,-42}, -{54,-4,-41}, -{54,-4,-40}, -{54,-4,-39}, -{54,-4,-38}, -{54,-4,-37}, -{54,-4,-36}, -{54,-4,-35}, -{54,-4,-34}, -{54,-4,-33}, -{54,-4,-32}, -{54,-4,-31}, -{54,-4,-30}, -{54,-4,-29}, -{54,-4,-28}, -{54,-4,-27}, -{54,-4,-26}, -{54,-4,-25}, -{54,-4,-24}, -{54,-4,-23}, -{54,-4,-22}, -{54,-4,-21}, -{54,-4,-20}, -{54,-4,-19}, -{54,-4,-18}, -{54,-4,-17}, -{54,-4,-16}, -{54,-4,-15}, -{54,-4,-14}, -{54,-4,-13}, -{54,-4,-12}, -{54,-4,-11}, -{54,-4,-10}, -{54,-4,-9}, -{54,-4,-8}, -{54,-4,-7}, -{54,-4,-6}, -{54,-4,-5}, -{54,-4,-4}, -{54,-4,-3}, -{54,-4,-2}, -{54,-4,-1}, -{54,-4,0}, -{54,-4,1}, -{54,-4,2}, -{54,-4,3}, -{54,-4,4}, -{54,-4,5}, -{54,-4,6}, -{54,-4,7}, -{54,-4,8}, -{54,-4,9}, -{54,-4,10}, -{54,-4,11}, -{54,-4,12}, -{54,-4,13}, -{54,-4,14}, -{54,-4,15}, -{54,-4,16}, -{54,-4,17}, -{54,-4,18}, -{54,-4,19}, -{54,-4,20}, -{54,-4,21}, -{54,-4,22}, -{54,-4,23}, -{54,-4,24}, -{54,-4,25}, -{54,-4,26}, -{54,-4,27}, -{54,-4,28}, -{54,-4,29}, -{54,-4,30}, -{54,-4,31}, -{54,-4,32}, -{54,-4,33}, -{54,-4,34}, -{54,-4,35}, -{54,-4,36}, -{54,-4,37}, -{54,-4,38}, -{54,-4,39}, -{54,-4,40}, -{54,-4,41}, -{54,-4,42}, -{54,-4,43}, -{54,-4,44}, -{54,-4,45}, -{54,-4,46}, -{54,-4,47}, -{54,-4,48}, -{54,-4,49}, -{54,-4,50}, -{54,-4,51}, -{54,-4,52}, -{54,-4,53}, -{54,-4,54}, -{54,-4,55}, -{54,-4,56}, -{54,-4,57}, -{54,-4,58}, -{54,-4,59}, -{54,-3,-47}, -{54,-3,-46}, -{54,-3,-45}, -{54,-3,-44}, -{54,-3,-43}, -{54,-3,-42}, -{54,-3,-41}, -{54,-3,-40}, -{54,-3,-39}, -{54,-3,-38}, -{54,-3,-37}, -{54,-3,-36}, -{54,-3,-35}, -{54,-3,-34}, -{54,-3,-33}, -{54,-3,-32}, -{54,-3,-31}, -{54,-3,-30}, -{54,-3,-29}, -{54,-3,-28}, -{54,-3,-27}, -{54,-3,-26}, -{54,-3,-25}, -{54,-3,-24}, -{54,-3,-23}, -{54,-3,-22}, -{54,-3,-21}, -{54,-3,-20}, -{54,-3,-19}, -{54,-3,-18}, -{54,-3,-17}, -{54,-3,-16}, -{54,-3,-15}, -{54,-3,-14}, -{54,-3,-13}, -{54,-3,-12}, -{54,-3,-11}, -{54,-3,-10}, -{54,-3,-9}, -{54,-3,-8}, -{54,-3,-7}, -{54,-3,-6}, -{54,-3,-5}, -{54,-3,-4}, -{54,-3,-3}, -{54,-3,-2}, -{54,-3,-1}, -{54,-3,0}, -{54,-3,1}, -{54,-3,2}, -{54,-3,3}, -{54,-3,4}, -{54,-3,5}, -{54,-3,6}, -{54,-3,7}, -{54,-3,8}, -{54,-3,9}, -{54,-3,10}, -{54,-3,11}, -{54,-3,12}, -{54,-3,13}, -{54,-3,14}, -{54,-3,15}, -{54,-3,16}, -{54,-3,17}, -{54,-3,18}, -{54,-3,19}, -{54,-3,20}, -{54,-3,21}, -{54,-3,22}, -{54,-3,23}, -{54,-3,24}, -{54,-3,25}, -{54,-3,26}, -{54,-3,27}, -{54,-3,28}, -{54,-3,29}, -{54,-3,30}, -{54,-3,31}, -{54,-3,32}, -{54,-3,33}, -{54,-3,34}, -{54,-3,35}, -{54,-3,36}, -{54,-3,37}, -{54,-3,38}, -{54,-3,39}, -{54,-3,40}, -{54,-3,41}, -{54,-3,42}, -{54,-3,43}, -{54,-3,44}, -{54,-3,45}, -{54,-3,46}, -{54,-3,47}, -{54,-3,48}, -{54,-3,49}, -{54,-3,50}, -{54,-3,51}, -{54,-3,52}, -{54,-3,53}, -{54,-3,54}, -{54,-3,55}, -{54,-3,56}, -{54,-3,57}, -{54,-3,58}, -{54,-3,59}, -{54,-2,-48}, -{54,-2,-47}, -{54,-2,-46}, -{54,-2,-45}, -{54,-2,-44}, -{54,-2,-43}, -{54,-2,-42}, -{54,-2,-41}, -{54,-2,-40}, -{54,-2,-39}, -{54,-2,-38}, -{54,-2,-37}, -{54,-2,-36}, -{54,-2,-35}, -{54,-2,-34}, -{54,-2,-33}, -{54,-2,-32}, -{54,-2,-31}, -{54,-2,-30}, -{54,-2,-29}, -{54,-2,-28}, -{54,-2,-27}, -{54,-2,-26}, -{54,-2,-25}, -{54,-2,-24}, -{54,-2,-23}, -{54,-2,-22}, -{54,-2,-21}, -{54,-2,-20}, -{54,-2,-19}, -{54,-2,-18}, -{54,-2,-17}, -{54,-2,-16}, -{54,-2,-15}, -{54,-2,-14}, -{54,-2,-13}, -{54,-2,-12}, -{54,-2,-11}, -{54,-2,-10}, -{54,-2,-9}, -{54,-2,-8}, -{54,-2,-7}, -{54,-2,-6}, -{54,-2,-5}, -{54,-2,-4}, -{54,-2,-3}, -{54,-2,-2}, -{54,-2,-1}, -{54,-2,0}, -{54,-2,1}, -{54,-2,2}, -{54,-2,3}, -{54,-2,4}, -{54,-2,5}, -{54,-2,6}, -{54,-2,7}, -{54,-2,8}, -{54,-2,9}, -{54,-2,10}, -{54,-2,11}, -{54,-2,12}, -{54,-2,13}, -{54,-2,14}, -{54,-2,15}, -{54,-2,16}, -{54,-2,17}, -{54,-2,18}, -{54,-2,19}, -{54,-2,20}, -{54,-2,21}, -{54,-2,22}, -{54,-2,23}, -{54,-2,24}, -{54,-2,25}, -{54,-2,26}, -{54,-2,27}, -{54,-2,28}, -{54,-2,29}, -{54,-2,30}, -{54,-2,31}, -{54,-2,32}, -{54,-2,33}, -{54,-2,34}, -{54,-2,35}, -{54,-2,36}, -{54,-2,37}, -{54,-2,38}, -{54,-2,39}, -{54,-2,40}, -{54,-2,41}, -{54,-2,42}, -{54,-2,43}, -{54,-2,44}, -{54,-2,45}, -{54,-2,46}, -{54,-2,47}, -{54,-2,48}, -{54,-2,49}, -{54,-2,50}, -{54,-2,51}, -{54,-2,52}, -{54,-2,53}, -{54,-2,54}, -{54,-2,55}, -{54,-2,56}, -{54,-2,57}, -{54,-2,58}, -{54,-2,59}, -{54,-1,-49}, -{54,-1,-48}, -{54,-1,-47}, -{54,-1,-46}, -{54,-1,-45}, -{54,-1,-44}, -{54,-1,-43}, -{54,-1,-42}, -{54,-1,-41}, -{54,-1,-40}, -{54,-1,-39}, -{54,-1,-38}, -{54,-1,-37}, -{54,-1,-36}, -{54,-1,-35}, -{54,-1,-34}, -{54,-1,-33}, -{54,-1,-32}, -{54,-1,-31}, -{54,-1,-30}, -{54,-1,-29}, -{54,-1,-28}, -{54,-1,-27}, -{54,-1,-26}, -{54,-1,-25}, -{54,-1,-24}, -{54,-1,-23}, -{54,-1,-22}, -{54,-1,-21}, -{54,-1,-20}, -{54,-1,-19}, -{54,-1,-18}, -{54,-1,-17}, -{54,-1,-16}, -{54,-1,-15}, -{54,-1,-14}, -{54,-1,-13}, -{54,-1,-12}, -{54,-1,-11}, -{54,-1,-10}, -{54,-1,-9}, -{54,-1,-8}, -{54,-1,-7}, -{54,-1,-6}, -{54,-1,-5}, -{54,-1,-4}, -{54,-1,-3}, -{54,-1,-2}, -{54,-1,-1}, -{54,-1,0}, -{54,-1,1}, -{54,-1,2}, -{54,-1,3}, -{54,-1,4}, -{54,-1,5}, -{54,-1,6}, -{54,-1,7}, -{54,-1,8}, -{54,-1,9}, -{54,-1,10}, -{54,-1,11}, -{54,-1,12}, -{54,-1,13}, -{54,-1,14}, -{54,-1,15}, -{54,-1,16}, -{54,-1,17}, -{54,-1,18}, -{54,-1,19}, -{54,-1,20}, -{54,-1,21}, -{54,-1,22}, -{54,-1,23}, -{54,-1,24}, -{54,-1,25}, -{54,-1,26}, -{54,-1,27}, -{54,-1,28}, -{54,-1,29}, -{54,-1,30}, -{54,-1,31}, -{54,-1,32}, -{54,-1,33}, -{54,-1,34}, -{54,-1,35}, -{54,-1,36}, -{54,-1,37}, -{54,-1,38}, -{54,-1,39}, -{54,-1,40}, -{54,-1,41}, -{54,-1,42}, -{54,-1,43}, -{54,-1,44}, -{54,-1,45}, -{54,-1,46}, -{54,-1,47}, -{54,-1,48}, -{54,-1,49}, -{54,-1,50}, -{54,-1,51}, -{54,-1,52}, -{54,-1,53}, -{54,-1,54}, -{54,-1,55}, -{54,-1,56}, -{54,-1,57}, -{54,-1,58}, -{54,-1,59}, -{54,0,-50}, -{54,0,-49}, -{54,0,-48}, -{54,0,-47}, -{54,0,-46}, -{54,0,-45}, -{54,0,-44}, -{54,0,-43}, -{54,0,-42}, -{54,0,-41}, -{54,0,-40}, -{54,0,-39}, -{54,0,-38}, -{54,0,-37}, -{54,0,-36}, -{54,0,-35}, -{54,0,-34}, -{54,0,-33}, -{54,0,-32}, -{54,0,-31}, -{54,0,-30}, -{54,0,-29}, -{54,0,-28}, -{54,0,-27}, -{54,0,-26}, -{54,0,-25}, -{54,0,-24}, -{54,0,-23}, -{54,0,-22}, -{54,0,-21}, -{54,0,-20}, -{54,0,-19}, -{54,0,-18}, -{54,0,-17}, -{54,0,-16}, -{54,0,-15}, -{54,0,-14}, -{54,0,-13}, -{54,0,-12}, -{54,0,-11}, -{54,0,-10}, -{54,0,-9}, -{54,0,-8}, -{54,0,-7}, -{54,0,-6}, -{54,0,-5}, -{54,0,-4}, -{54,0,-3}, -{54,0,-2}, -{54,0,-1}, -{54,0,0}, -{54,0,1}, -{54,0,2}, -{54,0,3}, -{54,0,4}, -{54,0,5}, -{54,0,6}, -{54,0,7}, -{54,0,8}, -{54,0,9}, -{54,0,10}, -{54,0,11}, -{54,0,12}, -{54,0,13}, -{54,0,14}, -{54,0,15}, -{54,0,16}, -{54,0,17}, -{54,0,18}, -{54,0,19}, -{54,0,20}, -{54,0,21}, -{54,0,22}, -{54,0,23}, -{54,0,24}, -{54,0,25}, -{54,0,26}, -{54,0,27}, -{54,0,28}, -{54,0,29}, -{54,0,30}, -{54,0,31}, -{54,0,32}, -{54,0,33}, -{54,0,34}, -{54,0,35}, -{54,0,36}, -{54,0,37}, -{54,0,38}, -{54,0,39}, -{54,0,40}, -{54,0,41}, -{54,0,42}, -{54,0,43}, -{54,0,44}, -{54,0,45}, -{54,0,46}, -{54,0,47}, -{54,0,48}, -{54,0,49}, -{54,0,50}, -{54,0,51}, -{54,0,52}, -{54,0,53}, -{54,0,54}, -{54,0,55}, -{54,0,56}, -{54,0,57}, -{54,0,58}, -{54,0,59}, -{54,1,-51}, -{54,1,-50}, -{54,1,-49}, -{54,1,-48}, -{54,1,-47}, -{54,1,-46}, -{54,1,-45}, -{54,1,-44}, -{54,1,-43}, -{54,1,-42}, -{54,1,-41}, -{54,1,-40}, -{54,1,-39}, -{54,1,-38}, -{54,1,-37}, -{54,1,-36}, -{54,1,-35}, -{54,1,-34}, -{54,1,-33}, -{54,1,-32}, -{54,1,-31}, -{54,1,-30}, -{54,1,-29}, -{54,1,-28}, -{54,1,-27}, -{54,1,-26}, -{54,1,-25}, -{54,1,-24}, -{54,1,-23}, -{54,1,-22}, -{54,1,-21}, -{54,1,-20}, -{54,1,-19}, -{54,1,-18}, -{54,1,-17}, -{54,1,-16}, -{54,1,-15}, -{54,1,-14}, -{54,1,-13}, -{54,1,-12}, -{54,1,-11}, -{54,1,-10}, -{54,1,-9}, -{54,1,-8}, -{54,1,-7}, -{54,1,-6}, -{54,1,-5}, -{54,1,-4}, -{54,1,-3}, -{54,1,-2}, -{54,1,-1}, -{54,1,0}, -{54,1,1}, -{54,1,2}, -{54,1,3}, -{54,1,4}, -{54,1,5}, -{54,1,6}, -{54,1,7}, -{54,1,8}, -{54,1,9}, -{54,1,10}, -{54,1,11}, -{54,1,12}, -{54,1,13}, -{54,1,14}, -{54,1,15}, -{54,1,16}, -{54,1,17}, -{54,1,18}, -{54,1,19}, -{54,1,20}, -{54,1,21}, -{54,1,22}, -{54,1,23}, -{54,1,24}, -{54,1,25}, -{54,1,26}, -{54,1,27}, -{54,1,28}, -{54,1,29}, -{54,1,30}, -{54,1,31}, -{54,1,32}, -{54,1,33}, -{54,1,34}, -{54,1,35}, -{54,1,36}, -{54,1,37}, -{54,1,38}, -{54,1,39}, -{54,1,40}, -{54,1,41}, -{54,1,42}, -{54,1,43}, -{54,1,44}, -{54,1,45}, -{54,1,46}, -{54,1,47}, -{54,1,48}, -{54,1,49}, -{54,1,50}, -{54,1,51}, -{54,1,52}, -{54,1,53}, -{54,1,54}, -{54,1,55}, -{54,1,56}, -{54,1,57}, -{54,1,58}, -{54,1,59}, -{54,2,-52}, -{54,2,-51}, -{54,2,-50}, -{54,2,-49}, -{54,2,-48}, -{54,2,-47}, -{54,2,-46}, -{54,2,-45}, -{54,2,-44}, -{54,2,-43}, -{54,2,-42}, -{54,2,-41}, -{54,2,-40}, -{54,2,-39}, -{54,2,-38}, -{54,2,-37}, -{54,2,-36}, -{54,2,-35}, -{54,2,-34}, -{54,2,-33}, -{54,2,-32}, -{54,2,-31}, -{54,2,-30}, -{54,2,-29}, -{54,2,-28}, -{54,2,-27}, -{54,2,-26}, -{54,2,-25}, -{54,2,-24}, -{54,2,-23}, -{54,2,-22}, -{54,2,-21}, -{54,2,-20}, -{54,2,-19}, -{54,2,-18}, -{54,2,-17}, -{54,2,-16}, -{54,2,-15}, -{54,2,-14}, -{54,2,-13}, -{54,2,-12}, -{54,2,-11}, -{54,2,-10}, -{54,2,-9}, -{54,2,-8}, -{54,2,-7}, -{54,2,-6}, -{54,2,-5}, -{54,2,-4}, -{54,2,-3}, -{54,2,-2}, -{54,2,-1}, -{54,2,0}, -{54,2,1}, -{54,2,2}, -{54,2,3}, -{54,2,4}, -{54,2,5}, -{54,2,6}, -{54,2,7}, -{54,2,8}, -{54,2,9}, -{54,2,10}, -{54,2,11}, -{54,2,12}, -{54,2,13}, -{54,2,14}, -{54,2,15}, -{54,2,16}, -{54,2,17}, -{54,2,18}, -{54,2,19}, -{54,2,20}, -{54,2,21}, -{54,2,22}, -{54,2,23}, -{54,2,24}, -{54,2,25}, -{54,2,26}, -{54,2,27}, -{54,2,28}, -{54,2,29}, -{54,2,30}, -{54,2,31}, -{54,2,32}, -{54,2,33}, -{54,2,34}, -{54,2,35}, -{54,2,36}, -{54,2,37}, -{54,2,38}, -{54,2,39}, -{54,2,40}, -{54,2,41}, -{54,2,42}, -{54,2,43}, -{54,2,44}, -{54,2,45}, -{54,2,46}, -{54,2,47}, -{54,2,48}, -{54,2,49}, -{54,2,50}, -{54,2,51}, -{54,2,52}, -{54,2,53}, -{54,2,54}, -{54,2,55}, -{54,2,56}, -{54,2,57}, -{54,2,58}, -{54,2,59}, -{54,3,-53}, -{54,3,-52}, -{54,3,-51}, -{54,3,-50}, -{54,3,-49}, -{54,3,-48}, -{54,3,-47}, -{54,3,-46}, -{54,3,-45}, -{54,3,-44}, -{54,3,-43}, -{54,3,-42}, -{54,3,-41}, -{54,3,-40}, -{54,3,-39}, -{54,3,-38}, -{54,3,-37}, -{54,3,-36}, -{54,3,-35}, -{54,3,-34}, -{54,3,-33}, -{54,3,-32}, -{54,3,-31}, -{54,3,-30}, -{54,3,-29}, -{54,3,-28}, -{54,3,-27}, -{54,3,-26}, -{54,3,-25}, -{54,3,-24}, -{54,3,-23}, -{54,3,-22}, -{54,3,-21}, -{54,3,-20}, -{54,3,-19}, -{54,3,-18}, -{54,3,-17}, -{54,3,-16}, -{54,3,-15}, -{54,3,-14}, -{54,3,-13}, -{54,3,-12}, -{54,3,-11}, -{54,3,-10}, -{54,3,-9}, -{54,3,-8}, -{54,3,-7}, -{54,3,-6}, -{54,3,-5}, -{54,3,-4}, -{54,3,-3}, -{54,3,-2}, -{54,3,-1}, -{54,3,0}, -{54,3,1}, -{54,3,2}, -{54,3,3}, -{54,3,4}, -{54,3,5}, -{54,3,6}, -{54,3,7}, -{54,3,8}, -{54,3,9}, -{54,3,10}, -{54,3,11}, -{54,3,12}, -{54,3,13}, -{54,3,14}, -{54,3,15}, -{54,3,16}, -{54,3,17}, -{54,3,18}, -{54,3,19}, -{54,3,20}, -{54,3,21}, -{54,3,22}, -{54,3,23}, -{54,3,24}, -{54,3,25}, -{54,3,26}, -{54,3,27}, -{54,3,28}, -{54,3,29}, -{54,3,30}, -{54,3,31}, -{54,3,32}, -{54,3,33}, -{54,3,34}, -{54,3,35}, -{54,3,36}, -{54,3,37}, -{54,3,38}, -{54,3,39}, -{54,3,40}, -{54,3,41}, -{54,3,42}, -{54,3,43}, -{54,3,44}, -{54,3,45}, -{54,3,46}, -{54,3,47}, -{54,3,48}, -{54,3,49}, -{54,3,50}, -{54,3,51}, -{54,3,52}, -{54,3,53}, -{54,3,54}, -{54,3,55}, -{54,3,56}, -{54,3,57}, -{54,3,58}, -{54,3,59}, -{54,4,-54}, -{54,4,-53}, -{54,4,-52}, -{54,4,-51}, -{54,4,-50}, -{54,4,-49}, -{54,4,-48}, -{54,4,-47}, -{54,4,-46}, -{54,4,-45}, -{54,4,-44}, -{54,4,-43}, -{54,4,-42}, -{54,4,-41}, -{54,4,-40}, -{54,4,-39}, -{54,4,-38}, -{54,4,-37}, -{54,4,-36}, -{54,4,-35}, -{54,4,-34}, -{54,4,-33}, -{54,4,-32}, -{54,4,-31}, -{54,4,-30}, -{54,4,-29}, -{54,4,-28}, -{54,4,-27}, -{54,4,-26}, -{54,4,-25}, -{54,4,-24}, -{54,4,-23}, -{54,4,-22}, -{54,4,-21}, -{54,4,-20}, -{54,4,-19}, -{54,4,-18}, -{54,4,-17}, -{54,4,-16}, -{54,4,-15}, -{54,4,-14}, -{54,4,-13}, -{54,4,-12}, -{54,4,-11}, -{54,4,-10}, -{54,4,-9}, -{54,4,-8}, -{54,4,-7}, -{54,4,-6}, -{54,4,-5}, -{54,4,-4}, -{54,4,-3}, -{54,4,-2}, -{54,4,-1}, -{54,4,0}, -{54,4,1}, -{54,4,2}, -{54,4,3}, -{54,4,4}, -{54,4,5}, -{54,4,6}, -{54,4,7}, -{54,4,8}, -{54,4,9}, -{54,4,10}, -{54,4,11}, -{54,4,12}, -{54,4,13}, -{54,4,14}, -{54,4,15}, -{54,4,16}, -{54,4,17}, -{54,4,18}, -{54,4,19}, -{54,4,20}, -{54,4,21}, -{54,4,22}, -{54,4,23}, -{54,4,24}, -{54,4,25}, -{54,4,26}, -{54,4,27}, -{54,4,28}, -{54,4,29}, -{54,4,30}, -{54,4,31}, -{54,4,32}, -{54,4,33}, -{54,4,34}, -{54,4,35}, -{54,4,36}, -{54,4,37}, -{54,4,38}, -{54,4,39}, -{54,4,40}, -{54,4,41}, -{54,4,42}, -{54,4,43}, -{54,4,44}, -{54,4,45}, -{54,4,46}, -{54,4,47}, -{54,4,48}, -{54,4,49}, -{54,4,50}, -{54,4,51}, -{54,4,52}, -{54,4,53}, -{54,4,54}, -{54,4,55}, -{54,4,56}, -{54,4,57}, -{54,4,58}, -{54,4,59}, -{54,5,-56}, -{54,5,-55}, -{54,5,-54}, -{54,5,-53}, -{54,5,-52}, -{54,5,-51}, -{54,5,-50}, -{54,5,-49}, -{54,5,-48}, -{54,5,-47}, -{54,5,-46}, -{54,5,-45}, -{54,5,-44}, -{54,5,-43}, -{54,5,-42}, -{54,5,-41}, -{54,5,-40}, -{54,5,-39}, -{54,5,-38}, -{54,5,-37}, -{54,5,-36}, -{54,5,-35}, -{54,5,-34}, -{54,5,-33}, -{54,5,-32}, -{54,5,-31}, -{54,5,-30}, -{54,5,-29}, -{54,5,-28}, -{54,5,-27}, -{54,5,-26}, -{54,5,-25}, -{54,5,-24}, -{54,5,-23}, -{54,5,-22}, -{54,5,-21}, -{54,5,-20}, -{54,5,-19}, -{54,5,-18}, -{54,5,-17}, -{54,5,-16}, -{54,5,-15}, -{54,5,-14}, -{54,5,-13}, -{54,5,-12}, -{54,5,-11}, -{54,5,-10}, -{54,5,-9}, -{54,5,-8}, -{54,5,-7}, -{54,5,-6}, -{54,5,-5}, -{54,5,-4}, -{54,5,-3}, -{54,5,-2}, -{54,5,-1}, -{54,5,0}, -{54,5,1}, -{54,5,2}, -{54,5,3}, -{54,5,4}, -{54,5,5}, -{54,5,6}, -{54,5,7}, -{54,5,8}, -{54,5,9}, -{54,5,10}, -{54,5,11}, -{54,5,12}, -{54,5,13}, -{54,5,14}, -{54,5,15}, -{54,5,16}, -{54,5,17}, -{54,5,18}, -{54,5,19}, -{54,5,20}, -{54,5,21}, -{54,5,22}, -{54,5,23}, -{54,5,24}, -{54,5,25}, -{54,5,26}, -{54,5,27}, -{54,5,28}, -{54,5,29}, -{54,5,30}, -{54,5,31}, -{54,5,32}, -{54,5,33}, -{54,5,34}, -{54,5,35}, -{54,5,36}, -{54,5,37}, -{54,5,38}, -{54,5,39}, -{54,5,40}, -{54,5,41}, -{54,5,42}, -{54,5,43}, -{54,5,44}, -{54,5,45}, -{54,5,46}, -{54,5,47}, -{54,5,48}, -{54,5,49}, -{54,5,50}, -{54,5,51}, -{54,5,52}, -{54,5,53}, -{54,5,54}, -{54,5,55}, -{54,5,56}, -{54,5,57}, -{54,5,58}, -{54,5,59}, -{54,6,-57}, -{54,6,-56}, -{54,6,-55}, -{54,6,-54}, -{54,6,-53}, -{54,6,-52}, -{54,6,-51}, -{54,6,-50}, -{54,6,-49}, -{54,6,-48}, -{54,6,-47}, -{54,6,-46}, -{54,6,-45}, -{54,6,-44}, -{54,6,-43}, -{54,6,-42}, -{54,6,-41}, -{54,6,-40}, -{54,6,-39}, -{54,6,-38}, -{54,6,-37}, -{54,6,-36}, -{54,6,-35}, -{54,6,-34}, -{54,6,-33}, -{54,6,-32}, -{54,6,-31}, -{54,6,-30}, -{54,6,-29}, -{54,6,-28}, -{54,6,-27}, -{54,6,-26}, -{54,6,-25}, -{54,6,-24}, -{54,6,-23}, -{54,6,-22}, -{54,6,-21}, -{54,6,-20}, -{54,6,-19}, -{54,6,-18}, -{54,6,-17}, -{54,6,-16}, -{54,6,-15}, -{54,6,-14}, -{54,6,-13}, -{54,6,-12}, -{54,6,-11}, -{54,6,-10}, -{54,6,-9}, -{54,6,-8}, -{54,6,-7}, -{54,6,-6}, -{54,6,-5}, -{54,6,-4}, -{54,6,-3}, -{54,6,-2}, -{54,6,-1}, -{54,6,0}, -{54,6,1}, -{54,6,2}, -{54,6,3}, -{54,6,4}, -{54,6,5}, -{54,6,6}, -{54,6,7}, -{54,6,8}, -{54,6,9}, -{54,6,10}, -{54,6,11}, -{54,6,12}, -{54,6,13}, -{54,6,14}, -{54,6,15}, -{54,6,16}, -{54,6,17}, -{54,6,18}, -{54,6,19}, -{54,6,20}, -{54,6,21}, -{54,6,22}, -{54,6,23}, -{54,6,24}, -{54,6,25}, -{54,6,26}, -{54,6,27}, -{54,6,28}, -{54,6,29}, -{54,6,30}, -{54,6,31}, -{54,6,32}, -{54,6,33}, -{54,6,34}, -{54,6,35}, -{54,6,36}, -{54,6,37}, -{54,6,38}, -{54,6,39}, -{54,6,40}, -{54,6,41}, -{54,6,42}, -{54,6,43}, -{54,6,44}, -{54,6,45}, -{54,6,46}, -{54,6,47}, -{54,6,48}, -{54,6,49}, -{54,6,50}, -{54,6,51}, -{54,6,52}, -{54,6,53}, -{54,6,54}, -{54,6,55}, -{54,6,56}, -{54,6,57}, -{54,6,58}, -{54,6,59}, -{54,7,-58}, -{54,7,-57}, -{54,7,-56}, -{54,7,-55}, -{54,7,-54}, -{54,7,-53}, -{54,7,-52}, -{54,7,-51}, -{54,7,-50}, -{54,7,-49}, -{54,7,-48}, -{54,7,-47}, -{54,7,-46}, -{54,7,-45}, -{54,7,-44}, -{54,7,-43}, -{54,7,-42}, -{54,7,-41}, -{54,7,-40}, -{54,7,-39}, -{54,7,-38}, -{54,7,-37}, -{54,7,-36}, -{54,7,-35}, -{54,7,-34}, -{54,7,-33}, -{54,7,-32}, -{54,7,-31}, -{54,7,-30}, -{54,7,-29}, -{54,7,-28}, -{54,7,-27}, -{54,7,-26}, -{54,7,-25}, -{54,7,-24}, -{54,7,-23}, -{54,7,-22}, -{54,7,-21}, -{54,7,-20}, -{54,7,-19}, -{54,7,-18}, -{54,7,-17}, -{54,7,-16}, -{54,7,-15}, -{54,7,-14}, -{54,7,-13}, -{54,7,-12}, -{54,7,-11}, -{54,7,-10}, -{54,7,-9}, -{54,7,-8}, -{54,7,-7}, -{54,7,-6}, -{54,7,-5}, -{54,7,-4}, -{54,7,-3}, -{54,7,-2}, -{54,7,-1}, -{54,7,0}, -{54,7,1}, -{54,7,2}, -{54,7,3}, -{54,7,4}, -{54,7,5}, -{54,7,6}, -{54,7,7}, -{54,7,8}, -{54,7,9}, -{54,7,10}, -{54,7,11}, -{54,7,12}, -{54,7,13}, -{54,7,14}, -{54,7,15}, -{54,7,16}, -{54,7,17}, -{54,7,18}, -{54,7,19}, -{54,7,20}, -{54,7,21}, -{54,7,22}, -{54,7,23}, -{54,7,24}, -{54,7,25}, -{54,7,26}, -{54,7,27}, -{54,7,28}, -{54,7,29}, -{54,7,30}, -{54,7,31}, -{54,7,32}, -{54,7,33}, -{54,7,34}, -{54,7,35}, -{54,7,36}, -{54,7,37}, -{54,7,38}, -{54,7,39}, -{54,7,40}, -{54,7,41}, -{54,7,42}, -{54,7,43}, -{54,7,44}, -{54,7,45}, -{54,7,46}, -{54,7,47}, -{54,7,48}, -{54,7,49}, -{54,7,50}, -{54,7,51}, -{54,7,52}, -{54,7,53}, -{54,7,54}, -{54,7,55}, -{54,7,56}, -{54,7,57}, -{54,7,58}, -{54,7,59}, -{54,7,60}, -{54,8,-59}, -{54,8,-58}, -{54,8,-57}, -{54,8,-56}, -{54,8,-55}, -{54,8,-54}, -{54,8,-53}, -{54,8,-52}, -{54,8,-51}, -{54,8,-50}, -{54,8,-49}, -{54,8,-48}, -{54,8,-47}, -{54,8,-46}, -{54,8,-45}, -{54,8,-44}, -{54,8,-43}, -{54,8,-42}, -{54,8,-41}, -{54,8,-40}, -{54,8,-39}, -{54,8,-38}, -{54,8,-37}, -{54,8,-36}, -{54,8,-35}, -{54,8,-34}, -{54,8,-33}, -{54,8,-32}, -{54,8,-31}, -{54,8,-30}, -{54,8,-29}, -{54,8,-28}, -{54,8,-27}, -{54,8,-26}, -{54,8,-25}, -{54,8,-24}, -{54,8,-23}, -{54,8,-22}, -{54,8,-21}, -{54,8,-20}, -{54,8,-19}, -{54,8,-18}, -{54,8,-17}, -{54,8,-16}, -{54,8,-15}, -{54,8,-14}, -{54,8,-13}, -{54,8,-12}, -{54,8,-11}, -{54,8,-10}, -{54,8,-9}, -{54,8,-8}, -{54,8,-7}, -{54,8,-6}, -{54,8,-5}, -{54,8,-4}, -{54,8,-3}, -{54,8,-2}, -{54,8,-1}, -{54,8,0}, -{54,8,1}, -{54,8,2}, -{54,8,3}, -{54,8,4}, -{54,8,5}, -{54,8,6}, -{54,8,7}, -{54,8,8}, -{54,8,9}, -{54,8,10}, -{54,8,11}, -{54,8,12}, -{54,8,13}, -{54,8,14}, -{54,8,15}, -{54,8,16}, -{54,8,17}, -{54,8,18}, -{54,8,19}, -{54,8,20}, -{54,8,21}, -{54,8,22}, -{54,8,23}, -{54,8,24}, -{54,8,25}, -{54,8,26}, -{54,8,27}, -{54,8,28}, -{54,8,29}, -{54,8,30}, -{54,8,31}, -{54,8,32}, -{54,8,33}, -{54,8,34}, -{54,8,35}, -{54,8,36}, -{54,8,37}, -{54,8,38}, -{54,8,39}, -{54,8,40}, -{54,8,41}, -{54,8,42}, -{54,8,43}, -{54,8,44}, -{54,8,45}, -{54,8,46}, -{54,8,47}, -{54,8,48}, -{54,8,49}, -{54,8,50}, -{54,8,51}, -{54,8,52}, -{54,8,53}, -{54,8,54}, -{54,8,55}, -{54,8,56}, -{54,8,57}, -{54,8,58}, -{54,8,59}, -{54,8,60}, -{54,9,-60}, -{54,9,-59}, -{54,9,-58}, -{54,9,-57}, -{54,9,-56}, -{54,9,-55}, -{54,9,-54}, -{54,9,-53}, -{54,9,-52}, -{54,9,-51}, -{54,9,-50}, -{54,9,-49}, -{54,9,-48}, -{54,9,-47}, -{54,9,-46}, -{54,9,-45}, -{54,9,-44}, -{54,9,-43}, -{54,9,-42}, -{54,9,-41}, -{54,9,-40}, -{54,9,-39}, -{54,9,-38}, -{54,9,-37}, -{54,9,-36}, -{54,9,-35}, -{54,9,-34}, -{54,9,-33}, -{54,9,-32}, -{54,9,-31}, -{54,9,-30}, -{54,9,-29}, -{54,9,-28}, -{54,9,-27}, -{54,9,-26}, -{54,9,-25}, -{54,9,-24}, -{54,9,-23}, -{54,9,-22}, -{54,9,-21}, -{54,9,-20}, -{54,9,-19}, -{54,9,-18}, -{54,9,-17}, -{54,9,-16}, -{54,9,-15}, -{54,9,-14}, -{54,9,-13}, -{54,9,-12}, -{54,9,-11}, -{54,9,-10}, -{54,9,-9}, -{54,9,-8}, -{54,9,-7}, -{54,9,-6}, -{54,9,-5}, -{54,9,-4}, -{54,9,-3}, -{54,9,-2}, -{54,9,-1}, -{54,9,0}, -{54,9,1}, -{54,9,2}, -{54,9,3}, -{54,9,4}, -{54,9,5}, -{54,9,6}, -{54,9,7}, -{54,9,8}, -{54,9,9}, -{54,9,10}, -{54,9,11}, -{54,9,12}, -{54,9,13}, -{54,9,14}, -{54,9,15}, -{54,9,16}, -{54,9,17}, -{54,9,18}, -{54,9,19}, -{54,9,20}, -{54,9,21}, -{54,9,22}, -{54,9,23}, -{54,9,24}, -{54,9,25}, -{54,9,26}, -{54,9,27}, -{54,9,28}, -{54,9,29}, -{54,9,30}, -{54,9,31}, -{54,9,32}, -{54,9,33}, -{54,9,34}, -{54,9,35}, -{54,9,36}, -{54,9,37}, -{54,9,38}, -{54,9,39}, -{54,9,40}, -{54,9,41}, -{54,9,42}, -{54,9,43}, -{54,9,44}, -{54,9,45}, -{54,9,46}, -{54,9,47}, -{54,9,48}, -{54,9,49}, -{54,9,50}, -{54,9,51}, -{54,9,52}, -{54,9,53}, -{54,9,54}, -{54,9,55}, -{54,9,56}, -{54,9,57}, -{54,9,58}, -{54,9,59}, -{54,9,60}, -{54,10,-61}, -{54,10,-60}, -{54,10,-59}, -{54,10,-58}, -{54,10,-57}, -{54,10,-56}, -{54,10,-55}, -{54,10,-54}, -{54,10,-53}, -{54,10,-52}, -{54,10,-51}, -{54,10,-50}, -{54,10,-49}, -{54,10,-48}, -{54,10,-47}, -{54,10,-46}, -{54,10,-45}, -{54,10,-44}, -{54,10,-43}, -{54,10,-42}, -{54,10,-41}, -{54,10,-40}, -{54,10,-39}, -{54,10,-38}, -{54,10,-37}, -{54,10,-36}, -{54,10,-35}, -{54,10,-34}, -{54,10,-33}, -{54,10,-32}, -{54,10,-31}, -{54,10,-30}, -{54,10,-29}, -{54,10,-28}, -{54,10,-27}, -{54,10,-26}, -{54,10,-25}, -{54,10,-24}, -{54,10,-23}, -{54,10,-22}, -{54,10,-21}, -{54,10,-20}, -{54,10,-19}, -{54,10,-18}, -{54,10,-17}, -{54,10,-16}, -{54,10,-15}, -{54,10,-14}, -{54,10,-13}, -{54,10,-12}, -{54,10,-11}, -{54,10,-10}, -{54,10,-9}, -{54,10,-8}, -{54,10,-7}, -{54,10,-6}, -{54,10,-5}, -{54,10,-4}, -{54,10,-3}, -{54,10,-2}, -{54,10,-1}, -{54,10,0}, -{54,10,1}, -{54,10,2}, -{54,10,3}, -{54,10,4}, -{54,10,5}, -{54,10,6}, -{54,10,7}, -{54,10,8}, -{54,10,9}, -{54,10,10}, -{54,10,11}, -{54,10,12}, -{54,10,13}, -{54,10,14}, -{54,10,15}, -{54,10,16}, -{54,10,17}, -{54,10,18}, -{54,10,19}, -{54,10,20}, -{54,10,21}, -{54,10,22}, -{54,10,23}, -{54,10,24}, -{54,10,25}, -{54,10,26}, -{54,10,27}, -{54,10,28}, -{54,10,29}, -{54,10,30}, -{54,10,31}, -{54,10,32}, -{54,10,33}, -{54,10,34}, -{54,10,35}, -{54,10,36}, -{54,10,37}, -{54,10,38}, -{54,10,39}, -{54,10,40}, -{54,10,41}, -{54,10,42}, -{54,10,43}, -{54,10,44}, -{54,10,45}, -{54,10,46}, -{54,10,47}, -{54,10,48}, -{54,10,49}, -{54,10,50}, -{54,10,51}, -{54,10,52}, -{54,10,53}, -{54,10,54}, -{54,10,55}, -{54,10,56}, -{54,10,57}, -{54,10,58}, -{54,10,59}, -{54,10,60}, -{54,11,-62}, -{54,11,-61}, -{54,11,-60}, -{54,11,-59}, -{54,11,-58}, -{54,11,-57}, -{54,11,-56}, -{54,11,-55}, -{54,11,-54}, -{54,11,-53}, -{54,11,-52}, -{54,11,-51}, -{54,11,-50}, -{54,11,-49}, -{54,11,-48}, -{54,11,-47}, -{54,11,-46}, -{54,11,-45}, -{54,11,-44}, -{54,11,-43}, -{54,11,-42}, -{54,11,-41}, -{54,11,-40}, -{54,11,-39}, -{54,11,-38}, -{54,11,-37}, -{54,11,-36}, -{54,11,-35}, -{54,11,-34}, -{54,11,-33}, -{54,11,-32}, -{54,11,-31}, -{54,11,-30}, -{54,11,-29}, -{54,11,-28}, -{54,11,-27}, -{54,11,-26}, -{54,11,-25}, -{54,11,-24}, -{54,11,-23}, -{54,11,-22}, -{54,11,-21}, -{54,11,-20}, -{54,11,-19}, -{54,11,-18}, -{54,11,-17}, -{54,11,-16}, -{54,11,-15}, -{54,11,-14}, -{54,11,-13}, -{54,11,-12}, -{54,11,-11}, -{54,11,-10}, -{54,11,-9}, -{54,11,-8}, -{54,11,-7}, -{54,11,-6}, -{54,11,-5}, -{54,11,-4}, -{54,11,-3}, -{54,11,-2}, -{54,11,-1}, -{54,11,0}, -{54,11,1}, -{54,11,2}, -{54,11,3}, -{54,11,4}, -{54,11,5}, -{54,11,6}, -{54,11,7}, -{54,11,8}, -{54,11,9}, -{54,11,10}, -{54,11,11}, -{54,11,12}, -{54,11,13}, -{54,11,14}, -{54,11,15}, -{54,11,16}, -{54,11,17}, -{54,11,18}, -{54,11,19}, -{54,11,20}, -{54,11,21}, -{54,11,22}, -{54,11,23}, -{54,11,24}, -{54,11,25}, -{54,11,26}, -{54,11,27}, -{54,11,28}, -{54,11,29}, -{54,11,30}, -{54,11,31}, -{54,11,32}, -{54,11,33}, -{54,11,34}, -{54,11,35}, -{54,11,36}, -{54,11,37}, -{54,11,38}, -{54,11,39}, -{54,11,40}, -{54,11,41}, -{54,11,42}, -{54,11,43}, -{54,11,44}, -{54,11,45}, -{54,11,46}, -{54,11,47}, -{54,11,48}, -{54,11,49}, -{54,11,50}, -{54,11,51}, -{54,11,52}, -{54,11,53}, -{54,11,54}, -{54,11,55}, -{54,11,56}, -{54,11,57}, -{54,11,58}, -{54,11,59}, -{54,11,60}, -{54,12,-63}, -{54,12,-62}, -{54,12,-61}, -{54,12,-60}, -{54,12,-59}, -{54,12,-58}, -{54,12,-57}, -{54,12,-56}, -{54,12,-55}, -{54,12,-54}, -{54,12,-53}, -{54,12,-52}, -{54,12,-51}, -{54,12,-50}, -{54,12,-49}, -{54,12,-48}, -{54,12,-47}, -{54,12,-46}, -{54,12,-45}, -{54,12,-44}, -{54,12,-43}, -{54,12,-42}, -{54,12,-41}, -{54,12,-40}, -{54,12,-39}, -{54,12,-38}, -{54,12,-37}, -{54,12,-36}, -{54,12,-35}, -{54,12,-34}, -{54,12,-33}, -{54,12,-32}, -{54,12,-31}, -{54,12,-30}, -{54,12,-29}, -{54,12,-28}, -{54,12,-27}, -{54,12,-26}, -{54,12,-25}, -{54,12,-24}, -{54,12,-23}, -{54,12,-22}, -{54,12,-21}, -{54,12,-20}, -{54,12,-19}, -{54,12,-18}, -{54,12,-17}, -{54,12,-16}, -{54,12,-15}, -{54,12,-14}, -{54,12,-13}, -{54,12,-12}, -{54,12,-11}, -{54,12,-10}, -{54,12,-9}, -{54,12,-8}, -{54,12,-7}, -{54,12,-6}, -{54,12,-5}, -{54,12,-4}, -{54,12,-3}, -{54,12,-2}, -{54,12,-1}, -{54,12,0}, -{54,12,1}, -{54,12,2}, -{54,12,3}, -{54,12,4}, -{54,12,5}, -{54,12,6}, -{54,12,7}, -{54,12,8}, -{54,12,9}, -{54,12,10}, -{54,12,11}, -{54,12,12}, -{54,12,13}, -{54,12,14}, -{54,12,15}, -{54,12,16}, -{54,12,17}, -{54,12,18}, -{54,12,19}, -{54,12,20}, -{54,12,21}, -{54,12,22}, -{54,12,23}, -{54,12,24}, -{54,12,25}, -{54,12,26}, -{54,12,27}, -{54,12,28}, -{54,12,29}, -{54,12,30}, -{54,12,31}, -{54,12,32}, -{54,12,33}, -{54,12,34}, -{54,12,35}, -{54,12,36}, -{54,12,37}, -{54,12,38}, -{54,12,39}, -{54,12,40}, -{54,12,41}, -{54,12,42}, -{54,12,43}, -{54,12,44}, -{54,12,45}, -{54,12,46}, -{54,12,47}, -{54,12,48}, -{54,12,49}, -{54,12,50}, -{54,12,51}, -{54,12,52}, -{54,12,53}, -{54,12,54}, -{54,12,55}, -{54,12,56}, -{54,12,57}, -{54,12,58}, -{54,12,59}, -{54,12,60}, -{54,13,-64}, -{54,13,-63}, -{54,13,-62}, -{54,13,-61}, -{54,13,-60}, -{54,13,-59}, -{54,13,-58}, -{54,13,-57}, -{54,13,-56}, -{54,13,-55}, -{54,13,-54}, -{54,13,-53}, -{54,13,-52}, -{54,13,-51}, -{54,13,-50}, -{54,13,-49}, -{54,13,-48}, -{54,13,-47}, -{54,13,-46}, -{54,13,-45}, -{54,13,-44}, -{54,13,-43}, -{54,13,-42}, -{54,13,-41}, -{54,13,-40}, -{54,13,-39}, -{54,13,-38}, -{54,13,-37}, -{54,13,-36}, -{54,13,-35}, -{54,13,-34}, -{54,13,-33}, -{54,13,-32}, -{54,13,-31}, -{54,13,-30}, -{54,13,-29}, -{54,13,-28}, -{54,13,-27}, -{54,13,-26}, -{54,13,-25}, -{54,13,-24}, -{54,13,-23}, -{54,13,-22}, -{54,13,-21}, -{54,13,-20}, -{54,13,-19}, -{54,13,-18}, -{54,13,-17}, -{54,13,-16}, -{54,13,-15}, -{54,13,-14}, -{54,13,-13}, -{54,13,-12}, -{54,13,-11}, -{54,13,-10}, -{54,13,-9}, -{54,13,-8}, -{54,13,-7}, -{54,13,-6}, -{54,13,-5}, -{54,13,-4}, -{54,13,-3}, -{54,13,-2}, -{54,13,-1}, -{54,13,0}, -{54,13,1}, -{54,13,2}, -{54,13,3}, -{54,13,4}, -{54,13,5}, -{54,13,6}, -{54,13,7}, -{54,13,8}, -{54,13,9}, -{54,13,10}, -{54,13,11}, -{54,13,12}, -{54,13,13}, -{54,13,14}, -{54,13,15}, -{54,13,16}, -{54,13,17}, -{54,13,18}, -{54,13,19}, -{54,13,20}, -{54,13,21}, -{54,13,22}, -{54,13,23}, -{54,13,24}, -{54,13,25}, -{54,13,26}, -{54,13,27}, -{54,13,28}, -{54,13,29}, -{54,13,30}, -{54,13,31}, -{54,13,32}, -{54,13,33}, -{54,13,34}, -{54,13,35}, -{54,13,36}, -{54,13,37}, -{54,13,38}, -{54,13,39}, -{54,13,40}, -{54,13,41}, -{54,13,42}, -{54,13,43}, -{54,13,44}, -{54,13,45}, -{54,13,46}, -{54,13,47}, -{54,13,48}, -{54,13,49}, -{54,13,50}, -{54,13,51}, -{54,13,52}, -{54,13,53}, -{54,13,54}, -{54,13,55}, -{54,13,56}, -{54,13,57}, -{54,13,58}, -{54,13,59}, -{54,13,60}, -{54,14,-65}, -{54,14,-64}, -{54,14,-63}, -{54,14,-62}, -{54,14,-61}, -{54,14,-60}, -{54,14,-59}, -{54,14,-58}, -{54,14,-57}, -{54,14,-56}, -{54,14,-55}, -{54,14,-54}, -{54,14,-53}, -{54,14,-52}, -{54,14,-51}, -{54,14,-50}, -{54,14,-49}, -{54,14,-48}, -{54,14,-47}, -{54,14,-46}, -{54,14,-45}, -{54,14,-44}, -{54,14,-43}, -{54,14,-42}, -{54,14,-41}, -{54,14,-40}, -{54,14,-39}, -{54,14,-38}, -{54,14,-37}, -{54,14,-36}, -{54,14,-35}, -{54,14,-34}, -{54,14,-33}, -{54,14,-32}, -{54,14,-31}, -{54,14,-30}, -{54,14,-29}, -{54,14,-28}, -{54,14,-27}, -{54,14,-26}, -{54,14,-25}, -{54,14,-24}, -{54,14,-23}, -{54,14,-22}, -{54,14,-21}, -{54,14,-20}, -{54,14,-19}, -{54,14,-18}, -{54,14,-17}, -{54,14,-16}, -{54,14,-15}, -{54,14,-14}, -{54,14,-13}, -{54,14,-12}, -{54,14,-11}, -{54,14,-10}, -{54,14,-9}, -{54,14,-8}, -{54,14,-7}, -{54,14,-6}, -{54,14,-5}, -{54,14,-4}, -{54,14,-3}, -{54,14,-2}, -{54,14,-1}, -{54,14,0}, -{54,14,1}, -{54,14,2}, -{54,14,3}, -{54,14,4}, -{54,14,5}, -{54,14,6}, -{54,14,7}, -{54,14,8}, -{54,14,9}, -{54,14,10}, -{54,14,11}, -{54,14,12}, -{54,14,13}, -{54,14,14}, -{54,14,15}, -{54,14,16}, -{54,14,17}, -{54,14,18}, -{54,14,19}, -{54,14,20}, -{54,14,21}, -{54,14,22}, -{54,14,23}, -{54,14,24}, -{54,14,25}, -{54,14,26}, -{54,14,27}, -{54,14,28}, -{54,14,29}, -{54,14,30}, -{54,14,31}, -{54,14,32}, -{54,14,33}, -{54,14,34}, -{54,14,35}, -{54,14,36}, -{54,14,37}, -{54,14,38}, -{54,14,39}, -{54,14,40}, -{54,14,41}, -{54,14,42}, -{54,14,43}, -{54,14,44}, -{54,14,45}, -{54,14,46}, -{54,14,47}, -{54,14,48}, -{54,14,49}, -{54,14,50}, -{54,14,51}, -{54,14,52}, -{54,14,53}, -{54,14,54}, -{54,14,55}, -{54,14,56}, -{54,14,57}, -{54,14,58}, -{54,14,59}, -{54,14,60}, -{54,15,-66}, -{54,15,-65}, -{54,15,-64}, -{54,15,-63}, -{54,15,-62}, -{54,15,-61}, -{54,15,-60}, -{54,15,-59}, -{54,15,-58}, -{54,15,-57}, -{54,15,-56}, -{54,15,-55}, -{54,15,-54}, -{54,15,-53}, -{54,15,-52}, -{54,15,-51}, -{54,15,-50}, -{54,15,-49}, -{54,15,-48}, -{54,15,-47}, -{54,15,-46}, -{54,15,-45}, -{54,15,-44}, -{54,15,-43}, -{54,15,-42}, -{54,15,-41}, -{54,15,-40}, -{54,15,-39}, -{54,15,-38}, -{54,15,-37}, -{54,15,-36}, -{54,15,-35}, -{54,15,-34}, -{54,15,-33}, -{54,15,-32}, -{54,15,-31}, -{54,15,-30}, -{54,15,-29}, -{54,15,-28}, -{54,15,-27}, -{54,15,-26}, -{54,15,-25}, -{54,15,-24}, -{54,15,-23}, -{54,15,-22}, -{54,15,-21}, -{54,15,-20}, -{54,15,-19}, -{54,15,-18}, -{54,15,-17}, -{54,15,-16}, -{54,15,-15}, -{54,15,-14}, -{54,15,-13}, -{54,15,-12}, -{54,15,-11}, -{54,15,-10}, -{54,15,-9}, -{54,15,-8}, -{54,15,-7}, -{54,15,-6}, -{54,15,-5}, -{54,15,-4}, -{54,15,-3}, -{54,15,-2}, -{54,15,-1}, -{54,15,0}, -{54,15,1}, -{54,15,2}, -{54,15,3}, -{54,15,4}, -{54,15,5}, -{54,15,6}, -{54,15,7}, -{54,15,8}, -{54,15,9}, -{54,15,10}, -{54,15,11}, -{54,15,12}, -{54,15,13}, -{54,15,14}, -{54,15,15}, -{54,15,16}, -{54,15,17}, -{54,15,18}, -{54,15,19}, -{54,15,20}, -{54,15,21}, -{54,15,22}, -{54,15,23}, -{54,15,24}, -{54,15,25}, -{54,15,26}, -{54,15,27}, -{54,15,28}, -{54,15,29}, -{54,15,30}, -{54,15,31}, -{54,15,32}, -{54,15,33}, -{54,15,34}, -{54,15,35}, -{54,15,36}, -{54,15,37}, -{54,15,38}, -{54,15,39}, -{54,15,40}, -{54,15,41}, -{54,15,42}, -{54,15,43}, -{54,15,44}, -{54,15,45}, -{54,15,46}, -{54,15,47}, -{54,15,48}, -{54,15,49}, -{54,15,50}, -{54,15,51}, -{54,15,52}, -{54,15,53}, -{54,15,54}, -{54,15,55}, -{54,15,56}, -{54,15,57}, -{54,15,58}, -{54,15,59}, -{54,15,60}, -{54,16,-67}, -{54,16,-66}, -{54,16,-65}, -{54,16,-64}, -{54,16,-63}, -{54,16,-62}, -{54,16,-61}, -{54,16,-60}, -{54,16,-59}, -{54,16,-58}, -{54,16,-57}, -{54,16,-56}, -{54,16,-55}, -{54,16,-54}, -{54,16,-53}, -{54,16,-52}, -{54,16,-51}, -{54,16,-50}, -{54,16,-49}, -{54,16,-48}, -{54,16,-47}, -{54,16,-46}, -{54,16,-45}, -{54,16,-44}, -{54,16,-43}, -{54,16,-42}, -{54,16,-41}, -{54,16,-40}, -{54,16,-39}, -{54,16,-38}, -{54,16,-37}, -{54,16,-36}, -{54,16,-35}, -{54,16,-34}, -{54,16,-33}, -{54,16,-32}, -{54,16,-31}, -{54,16,-30}, -{54,16,-29}, -{54,16,-28}, -{54,16,-27}, -{54,16,-26}, -{54,16,-25}, -{54,16,-24}, -{54,16,-23}, -{54,16,-22}, -{54,16,-21}, -{54,16,-20}, -{54,16,-19}, -{54,16,-18}, -{54,16,-17}, -{54,16,-16}, -{54,16,-15}, -{54,16,-14}, -{54,16,-13}, -{54,16,-12}, -{54,16,-11}, -{54,16,-10}, -{54,16,-9}, -{54,16,-8}, -{54,16,-7}, -{54,16,-6}, -{54,16,-5}, -{54,16,-4}, -{54,16,-3}, -{54,16,-2}, -{54,16,-1}, -{54,16,0}, -{54,16,1}, -{54,16,2}, -{54,16,3}, -{54,16,4}, -{54,16,5}, -{54,16,6}, -{54,16,7}, -{54,16,8}, -{54,16,9}, -{54,16,10}, -{54,16,11}, -{54,16,12}, -{54,16,13}, -{54,16,14}, -{54,16,15}, -{54,16,16}, -{54,16,17}, -{54,16,18}, -{54,16,19}, -{54,16,20}, -{54,16,21}, -{54,16,22}, -{54,16,23}, -{54,16,24}, -{54,16,25}, -{54,16,26}, -{54,16,27}, -{54,16,28}, -{54,16,29}, -{54,16,30}, -{54,16,31}, -{54,16,32}, -{54,16,33}, -{54,16,34}, -{54,16,35}, -{54,16,36}, -{54,16,37}, -{54,16,38}, -{54,16,39}, -{54,16,40}, -{54,16,41}, -{54,16,42}, -{54,16,43}, -{54,16,44}, -{54,16,45}, -{54,16,46}, -{54,16,47}, -{54,16,48}, -{54,16,49}, -{54,16,50}, -{54,16,51}, -{54,16,52}, -{54,16,53}, -{54,16,54}, -{54,16,55}, -{54,16,56}, -{54,16,57}, -{54,16,58}, -{54,16,59}, -{54,16,60}, -{54,17,-68}, -{54,17,-67}, -{54,17,-66}, -{54,17,-65}, -{54,17,-64}, -{54,17,-63}, -{54,17,-62}, -{54,17,-61}, -{54,17,-60}, -{54,17,-59}, -{54,17,-58}, -{54,17,-57}, -{54,17,-56}, -{54,17,-55}, -{54,17,-54}, -{54,17,-53}, -{54,17,-52}, -{54,17,-51}, -{54,17,-50}, -{54,17,-49}, -{54,17,-48}, -{54,17,-47}, -{54,17,-46}, -{54,17,-45}, -{54,17,-44}, -{54,17,-43}, -{54,17,-42}, -{54,17,-41}, -{54,17,-40}, -{54,17,-39}, -{54,17,-38}, -{54,17,-37}, -{54,17,-36}, -{54,17,-35}, -{54,17,-34}, -{54,17,-33}, -{54,17,-32}, -{54,17,-31}, -{54,17,-30}, -{54,17,-29}, -{54,17,-28}, -{54,17,-27}, -{54,17,-26}, -{54,17,-25}, -{54,17,-24}, -{54,17,-23}, -{54,17,-22}, -{54,17,-21}, -{54,17,-20}, -{54,17,-19}, -{54,17,-18}, -{54,17,-17}, -{54,17,-16}, -{54,17,-15}, -{54,17,-14}, -{54,17,-13}, -{54,17,-12}, -{54,17,-11}, -{54,17,-10}, -{54,17,-9}, -{54,17,-8}, -{54,17,-7}, -{54,17,-6}, -{54,17,-5}, -{54,17,-4}, -{54,17,-3}, -{54,17,-2}, -{54,17,-1}, -{54,17,0}, -{54,17,1}, -{54,17,2}, -{54,17,3}, -{54,17,4}, -{54,17,5}, -{54,17,6}, -{54,17,7}, -{54,17,8}, -{54,17,9}, -{54,17,10}, -{54,17,11}, -{54,17,12}, -{54,17,13}, -{54,17,14}, -{54,17,15}, -{54,17,16}, -{54,17,17}, -{54,17,18}, -{54,17,19}, -{54,17,20}, -{54,17,21}, -{54,17,22}, -{54,17,23}, -{54,17,24}, -{54,17,25}, -{54,17,26}, -{54,17,27}, -{54,17,28}, -{54,17,29}, -{54,17,30}, -{54,17,31}, -{54,17,32}, -{54,17,33}, -{54,17,34}, -{54,17,35}, -{54,17,36}, -{54,17,37}, -{54,17,38}, -{54,17,39}, -{54,17,40}, -{54,17,41}, -{54,17,42}, -{54,17,43}, -{54,17,44}, -{54,17,45}, -{54,17,46}, -{54,17,47}, -{54,17,48}, -{54,17,49}, -{54,17,50}, -{54,17,51}, -{54,17,52}, -{54,17,53}, -{54,17,54}, -{54,17,55}, -{54,17,56}, -{54,17,57}, -{54,17,58}, -{54,17,59}, -{54,17,60}, -{54,18,-69}, -{54,18,-68}, -{54,18,-67}, -{54,18,-66}, -{54,18,-65}, -{54,18,-64}, -{54,18,-63}, -{54,18,-62}, -{54,18,-61}, -{54,18,-60}, -{54,18,-59}, -{54,18,-58}, -{54,18,-57}, -{54,18,-56}, -{54,18,-55}, -{54,18,-54}, -{54,18,-53}, -{54,18,-52}, -{54,18,-51}, -{54,18,-50}, -{54,18,-49}, -{54,18,-48}, -{54,18,-47}, -{54,18,-46}, -{54,18,-45}, -{54,18,-44}, -{54,18,-43}, -{54,18,-42}, -{54,18,-41}, -{54,18,-40}, -{54,18,-39}, -{54,18,-38}, -{54,18,-37}, -{54,18,-36}, -{54,18,-35}, -{54,18,-34}, -{54,18,-33}, -{54,18,-32}, -{54,18,-31}, -{54,18,-30}, -{54,18,-29}, -{54,18,-28}, -{54,18,-27}, -{54,18,-26}, -{54,18,-25}, -{54,18,-24}, -{54,18,-23}, -{54,18,-22}, -{54,18,-21}, -{54,18,-20}, -{54,18,-19}, -{54,18,-18}, -{54,18,-17}, -{54,18,-16}, -{54,18,-15}, -{54,18,-14}, -{54,18,-13}, -{54,18,-12}, -{54,18,-11}, -{54,18,-10}, -{54,18,-9}, -{54,18,-8}, -{54,18,-7}, -{54,18,-6}, -{54,18,-5}, -{54,18,-4}, -{54,18,-3}, -{54,18,-2}, -{54,18,-1}, -{54,18,0}, -{54,18,1}, -{54,18,2}, -{54,18,3}, -{54,18,4}, -{54,18,5}, -{54,18,6}, -{54,18,7}, -{54,18,8}, -{54,18,9}, -{54,18,10}, -{54,18,11}, -{54,18,12}, -{54,18,13}, -{54,18,14}, -{54,18,15}, -{54,18,16}, -{54,18,17}, -{54,18,18}, -{54,18,19}, -{54,18,20}, -{54,18,21}, -{54,18,22}, -{54,18,23}, -{54,18,24}, -{54,18,25}, -{54,18,26}, -{54,18,27}, -{54,18,28}, -{54,18,29}, -{54,18,30}, -{54,18,31}, -{54,18,32}, -{54,18,33}, -{54,18,34}, -{54,18,35}, -{54,18,36}, -{54,18,37}, -{54,18,38}, -{54,18,39}, -{54,18,40}, -{54,18,41}, -{54,18,42}, -{54,18,43}, -{54,18,44}, -{54,18,45}, -{54,18,46}, -{54,18,47}, -{54,18,48}, -{54,18,49}, -{54,18,50}, -{54,18,51}, -{54,18,52}, -{54,18,53}, -{54,18,54}, -{54,18,55}, -{54,18,56}, -{54,18,57}, -{54,18,58}, -{54,18,59}, -{54,18,60}, -{54,19,-70}, -{54,19,-69}, -{54,19,-68}, -{54,19,-67}, -{54,19,-66}, -{54,19,-65}, -{54,19,-64}, -{54,19,-63}, -{54,19,-62}, -{54,19,-61}, -{54,19,-60}, -{54,19,-59}, -{54,19,-58}, -{54,19,-57}, -{54,19,-56}, -{54,19,-55}, -{54,19,-54}, -{54,19,-53}, -{54,19,-52}, -{54,19,-51}, -{54,19,-50}, -{54,19,-49}, -{54,19,-48}, -{54,19,-47}, -{54,19,-46}, -{54,19,-45}, -{54,19,-44}, -{54,19,-43}, -{54,19,-42}, -{54,19,-41}, -{54,19,-40}, -{54,19,-39}, -{54,19,-38}, -{54,19,-37}, -{54,19,-36}, -{54,19,-35}, -{54,19,-34}, -{54,19,-33}, -{54,19,-32}, -{54,19,-31}, -{54,19,-30}, -{54,19,-29}, -{54,19,-28}, -{54,19,-27}, -{54,19,-26}, -{54,19,-25}, -{54,19,-24}, -{54,19,-23}, -{54,19,-22}, -{54,19,-21}, -{54,19,-20}, -{54,19,-19}, -{54,19,-18}, -{54,19,-17}, -{54,19,-16}, -{54,19,-15}, -{54,19,-14}, -{54,19,-13}, -{54,19,-12}, -{54,19,-11}, -{54,19,-10}, -{54,19,-9}, -{54,19,-8}, -{54,19,-7}, -{54,19,-6}, -{54,19,-5}, -{54,19,-4}, -{54,19,-3}, -{54,19,-2}, -{54,19,-1}, -{54,19,0}, -{54,19,1}, -{54,19,2}, -{54,19,3}, -{54,19,4}, -{54,19,5}, -{54,19,6}, -{54,19,7}, -{54,19,8}, -{54,19,9}, -{54,19,10}, -{54,19,11}, -{54,19,12}, -{54,19,13}, -{54,19,14}, -{54,19,15}, -{54,19,16}, -{54,19,17}, -{54,19,18}, -{54,19,19}, -{54,19,20}, -{54,19,21}, -{54,19,22}, -{54,19,23}, -{54,19,24}, -{54,19,25}, -{54,19,26}, -{54,19,27}, -{54,19,28}, -{54,19,29}, -{54,19,30}, -{54,19,31}, -{54,19,32}, -{54,19,33}, -{54,19,34}, -{54,19,35}, -{54,19,36}, -{54,19,37}, -{54,19,38}, -{54,19,39}, -{54,19,40}, -{54,19,41}, -{54,19,42}, -{54,19,43}, -{54,19,44}, -{54,19,45}, -{54,19,46}, -{54,19,47}, -{54,19,48}, -{54,19,49}, -{54,19,50}, -{54,19,51}, -{54,19,52}, -{54,19,53}, -{54,19,54}, -{54,19,55}, -{54,19,56}, -{54,19,57}, -{54,19,58}, -{54,19,59}, -{54,19,60}, -{54,19,61}, -{54,20,-71}, -{54,20,-70}, -{54,20,-69}, -{54,20,-68}, -{54,20,-67}, -{54,20,-66}, -{54,20,-65}, -{54,20,-64}, -{54,20,-63}, -{54,20,-62}, -{54,20,-61}, -{54,20,-60}, -{54,20,-59}, -{54,20,-58}, -{54,20,-57}, -{54,20,-56}, -{54,20,-55}, -{54,20,-54}, -{54,20,-53}, -{54,20,-52}, -{54,20,-51}, -{54,20,-50}, -{54,20,-49}, -{54,20,-48}, -{54,20,-47}, -{54,20,-46}, -{54,20,-45}, -{54,20,-44}, -{54,20,-43}, -{54,20,-42}, -{54,20,-41}, -{54,20,-40}, -{54,20,-39}, -{54,20,-38}, -{54,20,-37}, -{54,20,-36}, -{54,20,-35}, -{54,20,-34}, -{54,20,-33}, -{54,20,-32}, -{54,20,-31}, -{54,20,-30}, -{54,20,-29}, -{54,20,-28}, -{54,20,-27}, -{54,20,-26}, -{54,20,-25}, -{54,20,-24}, -{54,20,-23}, -{54,20,-22}, -{54,20,-21}, -{54,20,-20}, -{54,20,-19}, -{54,20,-18}, -{54,20,-17}, -{54,20,-16}, -{54,20,-15}, -{54,20,-14}, -{54,20,-13}, -{54,20,-12}, -{54,20,-11}, -{54,20,-10}, -{54,20,-9}, -{54,20,-8}, -{54,20,-7}, -{54,20,-6}, -{54,20,-5}, -{54,20,-4}, -{54,20,-3}, -{54,20,-2}, -{54,20,-1}, -{54,20,0}, -{54,20,1}, -{54,20,2}, -{54,20,3}, -{54,20,4}, -{54,20,5}, -{54,20,6}, -{54,20,7}, -{54,20,8}, -{54,20,9}, -{54,20,10}, -{54,20,11}, -{54,20,12}, -{54,20,13}, -{54,20,14}, -{54,20,15}, -{54,20,16}, -{54,20,17}, -{54,20,18}, -{54,20,19}, -{54,20,20}, -{54,20,21}, -{54,20,22}, -{54,20,23}, -{54,20,24}, -{54,20,25}, -{54,20,26}, -{54,20,27}, -{54,20,28}, -{54,20,29}, -{54,20,30}, -{54,20,31}, -{54,20,32}, -{54,20,33}, -{54,20,34}, -{54,20,35}, -{54,20,36}, -{54,20,37}, -{54,20,38}, -{54,20,39}, -{54,20,40}, -{54,20,41}, -{54,20,42}, -{54,20,43}, -{54,20,44}, -{54,20,45}, -{54,20,46}, -{54,20,47}, -{54,20,48}, -{54,20,49}, -{54,20,50}, -{54,20,51}, -{54,20,52}, -{54,20,53}, -{54,20,54}, -{54,20,55}, -{54,20,56}, -{54,20,57}, -{54,20,58}, -{54,20,59}, -{54,20,60}, -{54,20,61}, -{54,21,-72}, -{54,21,-71}, -{54,21,-70}, -{54,21,-69}, -{54,21,-68}, -{54,21,-67}, -{54,21,-66}, -{54,21,-65}, -{54,21,-64}, -{54,21,-63}, -{54,21,-62}, -{54,21,-61}, -{54,21,-60}, -{54,21,-59}, -{54,21,-58}, -{54,21,-57}, -{54,21,-56}, -{54,21,-55}, -{54,21,-54}, -{54,21,-53}, -{54,21,-52}, -{54,21,-51}, -{54,21,-50}, -{54,21,-49}, -{54,21,-48}, -{54,21,-47}, -{54,21,-46}, -{54,21,-45}, -{54,21,-44}, -{54,21,-43}, -{54,21,-42}, -{54,21,-41}, -{54,21,-40}, -{54,21,-39}, -{54,21,-38}, -{54,21,-37}, -{54,21,-36}, -{54,21,-35}, -{54,21,-34}, -{54,21,-33}, -{54,21,-32}, -{54,21,-31}, -{54,21,-30}, -{54,21,-29}, -{54,21,-28}, -{54,21,-27}, -{54,21,-26}, -{54,21,-25}, -{54,21,-24}, -{54,21,-23}, -{54,21,-22}, -{54,21,-21}, -{54,21,-20}, -{54,21,-19}, -{54,21,-18}, -{54,21,-17}, -{54,21,-16}, -{54,21,-15}, -{54,21,-14}, -{54,21,-13}, -{54,21,-12}, -{54,21,-11}, -{54,21,-10}, -{54,21,-9}, -{54,21,-8}, -{54,21,-7}, -{54,21,-6}, -{54,21,-5}, -{54,21,-4}, -{54,21,-3}, -{54,21,-2}, -{54,21,-1}, -{54,21,0}, -{54,21,1}, -{54,21,2}, -{54,21,3}, -{54,21,4}, -{54,21,5}, -{54,21,6}, -{54,21,7}, -{54,21,8}, -{54,21,9}, -{54,21,10}, -{54,21,11}, -{54,21,12}, -{54,21,13}, -{54,21,14}, -{54,21,15}, -{54,21,16}, -{54,21,17}, -{54,21,18}, -{54,21,19}, -{54,21,20}, -{54,21,21}, -{54,21,22}, -{54,21,23}, -{54,21,24}, -{54,21,25}, -{54,21,26}, -{54,21,27}, -{54,21,28}, -{54,21,29}, -{54,21,30}, -{54,21,31}, -{54,21,32}, -{54,21,33}, -{54,21,34}, -{54,21,35}, -{54,21,36}, -{54,21,37}, -{54,21,38}, -{54,21,39}, -{54,21,40}, -{54,21,41}, -{54,21,42}, -{54,21,43}, -{54,21,44}, -{54,21,45}, -{54,21,46}, -{54,21,47}, -{54,21,48}, -{54,21,49}, -{54,21,50}, -{54,21,51}, -{54,21,52}, -{54,21,53}, -{54,21,54}, -{54,21,55}, -{54,21,56}, -{54,21,57}, -{54,21,58}, -{54,21,59}, -{54,21,60}, -{54,21,61}, -{54,22,-72}, -{54,22,-71}, -{54,22,-70}, -{54,22,-69}, -{54,22,-68}, -{54,22,-67}, -{54,22,-66}, -{54,22,-65}, -{54,22,-64}, -{54,22,-63}, -{54,22,-62}, -{54,22,-61}, -{54,22,-60}, -{54,22,-59}, -{54,22,-58}, -{54,22,-57}, -{54,22,-56}, -{54,22,-55}, -{54,22,-54}, -{54,22,-53}, -{54,22,-52}, -{54,22,-51}, -{54,22,-50}, -{54,22,-49}, -{54,22,-48}, -{54,22,-47}, -{54,22,-46}, -{54,22,-45}, -{54,22,-44}, -{54,22,-43}, -{54,22,-42}, -{54,22,-41}, -{54,22,-40}, -{54,22,-39}, -{54,22,-38}, -{54,22,-37}, -{54,22,-36}, -{54,22,-35}, -{54,22,-34}, -{54,22,-33}, -{54,22,-32}, -{54,22,-31}, -{54,22,-30}, -{54,22,-29}, -{54,22,-28}, -{54,22,-27}, -{54,22,-26}, -{54,22,-25}, -{54,22,-24}, -{54,22,-23}, -{54,22,-22}, -{54,22,-21}, -{54,22,-20}, -{54,22,-19}, -{54,22,-18}, -{54,22,-17}, -{54,22,-16}, -{54,22,-15}, -{54,22,-14}, -{54,22,-13}, -{54,22,-12}, -{54,22,-11}, -{54,22,-10}, -{54,22,-9}, -{54,22,-8}, -{54,22,-7}, -{54,22,-6}, -{54,22,-5}, -{54,22,-4}, -{54,22,-3}, -{54,22,-2}, -{54,22,-1}, -{54,22,0}, -{54,22,1}, -{54,22,2}, -{54,22,3}, -{54,22,4}, -{54,22,5}, -{54,22,6}, -{54,22,7}, -{54,22,8}, -{54,22,9}, -{54,22,10}, -{54,22,11}, -{54,22,12}, -{54,22,13}, -{54,22,14}, -{54,22,15}, -{54,22,16}, -{54,22,17}, -{54,22,18}, -{54,22,19}, -{54,22,20}, -{54,22,21}, -{54,22,22}, -{54,22,23}, -{54,22,24}, -{54,22,25}, -{54,22,26}, -{54,22,27}, -{54,22,28}, -{54,22,29}, -{54,22,30}, -{54,22,31}, -{54,22,32}, -{54,22,33}, -{54,22,34}, -{54,22,35}, -{54,22,36}, -{54,22,37}, -{54,22,38}, -{54,22,39}, -{54,22,40}, -{54,22,41}, -{54,22,42}, -{54,22,43}, -{54,22,44}, -{54,22,45}, -{54,22,46}, -{54,22,47}, -{54,22,48}, -{54,22,49}, -{54,22,50}, -{54,22,51}, -{54,22,52}, -{54,22,53}, -{54,22,54}, -{54,22,55}, -{54,22,56}, -{54,22,57}, -{54,22,58}, -{54,22,59}, -{54,22,60}, -{54,22,61}, -{54,23,-72}, -{54,23,-71}, -{54,23,-70}, -{54,23,-69}, -{54,23,-68}, -{54,23,-67}, -{54,23,-66}, -{54,23,-65}, -{54,23,-64}, -{54,23,-63}, -{54,23,-62}, -{54,23,-61}, -{54,23,-60}, -{54,23,-59}, -{54,23,-58}, -{54,23,-57}, -{54,23,-56}, -{54,23,-55}, -{54,23,-54}, -{54,23,-53}, -{54,23,-52}, -{54,23,-51}, -{54,23,-50}, -{54,23,-49}, -{54,23,-48}, -{54,23,-47}, -{54,23,-46}, -{54,23,-45}, -{54,23,-44}, -{54,23,-43}, -{54,23,-42}, -{54,23,-41}, -{54,23,-40}, -{54,23,-39}, -{54,23,-38}, -{54,23,-37}, -{54,23,-36}, -{54,23,-35}, -{54,23,-34}, -{54,23,-33}, -{54,23,-32}, -{54,23,-31}, -{54,23,-30}, -{54,23,-29}, -{54,23,-28}, -{54,23,-27}, -{54,23,-26}, -{54,23,-25}, -{54,23,-24}, -{54,23,-23}, -{54,23,-22}, -{54,23,-21}, -{54,23,-20}, -{54,23,-19}, -{54,23,-18}, -{54,23,-17}, -{54,23,-16}, -{54,23,-15}, -{54,23,-14}, -{54,23,-13}, -{54,23,-12}, -{54,23,-11}, -{54,23,-10}, -{54,23,-9}, -{54,23,-8}, -{54,23,-7}, -{54,23,-6}, -{54,23,-5}, -{54,23,-4}, -{54,23,-3}, -{54,23,-2}, -{54,23,-1}, -{54,23,0}, -{54,23,1}, -{54,23,2}, -{54,23,3}, -{54,23,4}, -{54,23,5}, -{54,23,6}, -{54,23,7}, -{54,23,8}, -{54,23,9}, -{54,23,10}, -{54,23,11}, -{54,23,12}, -{54,23,13}, -{54,23,14}, -{54,23,15}, -{54,23,16}, -{54,23,17}, -{54,23,18}, -{54,23,19}, -{54,23,20}, -{54,23,21}, -{54,23,22}, -{54,23,23}, -{54,23,24}, -{54,23,25}, -{54,23,26}, -{54,23,27}, -{54,23,28}, -{54,23,29}, -{54,23,30}, -{54,23,31}, -{54,23,32}, -{54,23,33}, -{54,23,34}, -{54,23,35}, -{54,23,36}, -{54,23,37}, -{54,23,38}, -{54,23,39}, -{54,23,40}, -{54,23,41}, -{54,23,42}, -{54,23,43}, -{54,23,44}, -{54,23,45}, -{54,23,46}, -{54,23,47}, -{54,23,48}, -{54,23,49}, -{54,23,50}, -{54,23,51}, -{54,23,52}, -{54,23,53}, -{54,23,54}, -{54,23,55}, -{54,23,56}, -{54,23,57}, -{54,23,58}, -{54,23,59}, -{54,23,60}, -{54,23,61}, -{54,24,-72}, -{54,24,-71}, -{54,24,-70}, -{54,24,-69}, -{54,24,-68}, -{54,24,-67}, -{54,24,-66}, -{54,24,-65}, -{54,24,-64}, -{54,24,-63}, -{54,24,-62}, -{54,24,-61}, -{54,24,-60}, -{54,24,-59}, -{54,24,-58}, -{54,24,-57}, -{54,24,-56}, -{54,24,-55}, -{54,24,-54}, -{54,24,-53}, -{54,24,-52}, -{54,24,-51}, -{54,24,-50}, -{54,24,-49}, -{54,24,-48}, -{54,24,-47}, -{54,24,-46}, -{54,24,-45}, -{54,24,-44}, -{54,24,-43}, -{54,24,-42}, -{54,24,-41}, -{54,24,-40}, -{54,24,-39}, -{54,24,-38}, -{54,24,-37}, -{54,24,-36}, -{54,24,-35}, -{54,24,-34}, -{54,24,-33}, -{54,24,-32}, -{54,24,-31}, -{54,24,-30}, -{54,24,-29}, -{54,24,-28}, -{54,24,-27}, -{54,24,-26}, -{54,24,-25}, -{54,24,-24}, -{54,24,-23}, -{54,24,-22}, -{54,24,-21}, -{54,24,-20}, -{54,24,-19}, -{54,24,-18}, -{54,24,-17}, -{54,24,-16}, -{54,24,-15}, -{54,24,-14}, -{54,24,-13}, -{54,24,-12}, -{54,24,-11}, -{54,24,-10}, -{54,24,-9}, -{54,24,-8}, -{54,24,-7}, -{54,24,-6}, -{54,24,-5}, -{54,24,-4}, -{54,24,-3}, -{54,24,-2}, -{54,24,-1}, -{54,24,0}, -{54,24,1}, -{54,24,2}, -{54,24,3}, -{54,24,4}, -{54,24,5}, -{54,24,6}, -{54,24,7}, -{54,24,8}, -{54,24,9}, -{54,24,10}, -{54,24,11}, -{54,24,12}, -{54,24,13}, -{54,24,14}, -{54,24,15}, -{54,24,16}, -{54,24,17}, -{54,24,18}, -{54,24,19}, -{54,24,20}, -{54,24,21}, -{54,24,22}, -{54,24,23}, -{54,24,24}, -{54,24,25}, -{54,24,26}, -{54,24,27}, -{54,24,28}, -{54,24,29}, -{54,24,30}, -{54,24,31}, -{54,24,32}, -{54,24,33}, -{54,24,34}, -{54,24,35}, -{54,24,36}, -{54,24,37}, -{54,24,38}, -{54,24,39}, -{54,24,40}, -{54,24,41}, -{54,24,42}, -{54,24,43}, -{54,24,44}, -{54,24,45}, -{54,24,46}, -{54,24,47}, -{54,24,48}, -{54,24,49}, -{54,24,50}, -{54,24,51}, -{54,24,52}, -{54,24,53}, -{54,24,54}, -{54,24,55}, -{54,24,56}, -{54,24,57}, -{54,24,58}, -{54,24,59}, -{54,24,60}, -{54,24,61}, -{54,25,-72}, -{54,25,-71}, -{54,25,-70}, -{54,25,-69}, -{54,25,-68}, -{54,25,-67}, -{54,25,-66}, -{54,25,-65}, -{54,25,-64}, -{54,25,-63}, -{54,25,-62}, -{54,25,-61}, -{54,25,-60}, -{54,25,-59}, -{54,25,-58}, -{54,25,-57}, -{54,25,-56}, -{54,25,-55}, -{54,25,-54}, -{54,25,-53}, -{54,25,-52}, -{54,25,-51}, -{54,25,-50}, -{54,25,-49}, -{54,25,-48}, -{54,25,-47}, -{54,25,-46}, -{54,25,-45}, -{54,25,-44}, -{54,25,-43}, -{54,25,-42}, -{54,25,-41}, -{54,25,-40}, -{54,25,-39}, -{54,25,-38}, -{54,25,-37}, -{54,25,-36}, -{54,25,-35}, -{54,25,-34}, -{54,25,-33}, -{54,25,-32}, -{54,25,-31}, -{54,25,-30}, -{54,25,-29}, -{54,25,-28}, -{54,25,-27}, -{54,25,-26}, -{54,25,-25}, -{54,25,-24}, -{54,25,-23}, -{54,25,-22}, -{54,25,-21}, -{54,25,-20}, -{54,25,-19}, -{54,25,-18}, -{54,25,-17}, -{54,25,-16}, -{54,25,-15}, -{54,25,-14}, -{54,25,-13}, -{54,25,-12}, -{54,25,-11}, -{54,25,-10}, -{54,25,-9}, -{54,25,-8}, -{54,25,-7}, -{54,25,-6}, -{54,25,-5}, -{54,25,-4}, -{54,25,-3}, -{54,25,-2}, -{54,25,-1}, -{54,25,0}, -{54,25,1}, -{54,25,2}, -{54,25,3}, -{54,25,4}, -{54,25,5}, -{54,25,6}, -{54,25,7}, -{54,25,8}, -{54,25,9}, -{54,25,10}, -{54,25,11}, -{54,25,12}, -{54,25,13}, -{54,25,14}, -{54,25,15}, -{54,25,16}, -{54,25,17}, -{54,25,18}, -{54,25,19}, -{54,25,20}, -{54,25,21}, -{54,25,22}, -{54,25,23}, -{54,25,24}, -{54,25,25}, -{54,25,26}, -{54,25,27}, -{54,25,28}, -{54,25,29}, -{54,25,30}, -{54,25,31}, -{54,25,32}, -{54,25,33}, -{54,25,34}, -{54,25,35}, -{54,25,36}, -{54,25,37}, -{54,25,38}, -{54,25,39}, -{54,25,40}, -{54,25,41}, -{54,25,42}, -{54,25,43}, -{54,25,44}, -{54,25,45}, -{54,25,46}, -{54,25,47}, -{54,25,48}, -{54,25,49}, -{54,25,50}, -{54,25,51}, -{54,25,52}, -{54,25,53}, -{54,25,54}, -{54,25,55}, -{54,25,56}, -{54,25,57}, -{54,25,58}, -{54,25,59}, -{54,25,60}, -{54,25,61}, -{54,26,-72}, -{54,26,-71}, -{54,26,-70}, -{54,26,-69}, -{54,26,-68}, -{54,26,-67}, -{54,26,-66}, -{54,26,-65}, -{54,26,-64}, -{54,26,-63}, -{54,26,-62}, -{54,26,-61}, -{54,26,-60}, -{54,26,-59}, -{54,26,-58}, -{54,26,-57}, -{54,26,-56}, -{54,26,-55}, -{54,26,-54}, -{54,26,-53}, -{54,26,-52}, -{54,26,-51}, -{54,26,-50}, -{54,26,-49}, -{54,26,-48}, -{54,26,-47}, -{54,26,-46}, -{54,26,-45}, -{54,26,-44}, -{54,26,-43}, -{54,26,-42}, -{54,26,-41}, -{54,26,-40}, -{54,26,-39}, -{54,26,-38}, -{54,26,-37}, -{54,26,-36}, -{54,26,-35}, -{54,26,-34}, -{54,26,-33}, -{54,26,-32}, -{54,26,-31}, -{54,26,-30}, -{54,26,-29}, -{54,26,-28}, -{54,26,-27}, -{54,26,-26}, -{54,26,-25}, -{54,26,-24}, -{54,26,-23}, -{54,26,-22}, -{54,26,-21}, -{54,26,-20}, -{54,26,-19}, -{54,26,-18}, -{54,26,-17}, -{54,26,-16}, -{54,26,-15}, -{54,26,-14}, -{54,26,-13}, -{54,26,-12}, -{54,26,-11}, -{54,26,-10}, -{54,26,-9}, -{54,26,-8}, -{54,26,-7}, -{54,26,-6}, -{54,26,-5}, -{54,26,-4}, -{54,26,-3}, -{54,26,-2}, -{54,26,-1}, -{54,26,0}, -{54,26,1}, -{54,26,2}, -{54,26,3}, -{54,26,4}, -{54,26,5}, -{54,26,6}, -{54,26,7}, -{54,26,8}, -{54,26,9}, -{54,26,10}, -{54,26,11}, -{54,26,12}, -{54,26,13}, -{54,26,14}, -{54,26,15}, -{54,26,16}, -{54,26,17}, -{54,26,18}, -{54,26,19}, -{54,26,20}, -{54,26,21}, -{54,26,22}, -{54,26,23}, -{54,26,24}, -{54,26,25}, -{54,26,26}, -{54,26,27}, -{54,26,28}, -{54,26,29}, -{54,26,30}, -{54,26,31}, -{54,26,32}, -{54,26,33}, -{54,26,34}, -{54,26,35}, -{54,26,36}, -{54,26,37}, -{54,26,38}, -{54,26,39}, -{54,26,40}, -{54,26,41}, -{54,26,42}, -{54,26,43}, -{54,26,44}, -{54,26,45}, -{54,26,46}, -{54,26,47}, -{54,26,48}, -{54,26,49}, -{54,26,50}, -{54,26,51}, -{54,26,52}, -{54,26,53}, -{54,26,54}, -{54,26,55}, -{54,26,56}, -{54,26,57}, -{54,26,58}, -{54,26,59}, -{54,26,60}, -{54,26,61}, -{54,27,-72}, -{54,27,-71}, -{54,27,-70}, -{54,27,-69}, -{54,27,-68}, -{54,27,-67}, -{54,27,-66}, -{54,27,-65}, -{54,27,-64}, -{54,27,-63}, -{54,27,-62}, -{54,27,-61}, -{54,27,-60}, -{54,27,-59}, -{54,27,-58}, -{54,27,-57}, -{54,27,-56}, -{54,27,-55}, -{54,27,-54}, -{54,27,-53}, -{54,27,-52}, -{54,27,-51}, -{54,27,-50}, -{54,27,-49}, -{54,27,-48}, -{54,27,-47}, -{54,27,-46}, -{54,27,-45}, -{54,27,-44}, -{54,27,-43}, -{54,27,-42}, -{54,27,-41}, -{54,27,-40}, -{54,27,-39}, -{54,27,-38}, -{54,27,-37}, -{54,27,-36}, -{54,27,-35}, -{54,27,-34}, -{54,27,-33}, -{54,27,-32}, -{54,27,-31}, -{54,27,-30}, -{54,27,-29}, -{54,27,-28}, -{54,27,-27}, -{54,27,-26}, -{54,27,-25}, -{54,27,-24}, -{54,27,-23}, -{54,27,-22}, -{54,27,-21}, -{54,27,-20}, -{54,27,-19}, -{54,27,-18}, -{54,27,-17}, -{54,27,-16}, -{54,27,-15}, -{54,27,-14}, -{54,27,-13}, -{54,27,-12}, -{54,27,-11}, -{54,27,-10}, -{54,27,-9}, -{54,27,-8}, -{54,27,-7}, -{54,27,-6}, -{54,27,-5}, -{54,27,-4}, -{54,27,-3}, -{54,27,-2}, -{54,27,-1}, -{54,27,0}, -{54,27,1}, -{54,27,2}, -{54,27,3}, -{54,27,4}, -{54,27,5}, -{54,27,6}, -{54,27,7}, -{54,27,8}, -{54,27,9}, -{54,27,10}, -{54,27,11}, -{54,27,12}, -{54,27,13}, -{54,27,14}, -{54,27,15}, -{54,27,16}, -{54,27,17}, -{54,27,18}, -{54,27,19}, -{54,27,20}, -{54,27,21}, -{54,27,22}, -{54,27,23}, -{54,27,24}, -{54,27,25}, -{54,27,26}, -{54,27,27}, -{54,27,28}, -{54,27,29}, -{54,27,30}, -{54,27,31}, -{54,27,32}, -{54,27,33}, -{54,27,34}, -{54,27,35}, -{54,27,36}, -{54,27,37}, -{54,27,38}, -{54,27,39}, -{54,27,40}, -{54,27,41}, -{54,27,42}, -{54,27,43}, -{54,27,44}, -{54,27,45}, -{54,27,46}, -{54,27,47}, -{54,27,48}, -{54,27,49}, -{54,27,50}, -{54,27,51}, -{54,27,52}, -{54,27,53}, -{54,27,54}, -{54,27,55}, -{54,27,56}, -{54,27,57}, -{54,27,58}, -{54,27,59}, -{54,27,60}, -{54,27,61}, -{54,28,-72}, -{54,28,-71}, -{54,28,-70}, -{54,28,-69}, -{54,28,-68}, -{54,28,-67}, -{54,28,-66}, -{54,28,-65}, -{54,28,-64}, -{54,28,-63}, -{54,28,-62}, -{54,28,-61}, -{54,28,-60}, -{54,28,-59}, -{54,28,-58}, -{54,28,-57}, -{54,28,-56}, -{54,28,-55}, -{54,28,-54}, -{54,28,-53}, -{54,28,-52}, -{54,28,-51}, -{54,28,-50}, -{54,28,-49}, -{54,28,-48}, -{54,28,-47}, -{54,28,-46}, -{54,28,-45}, -{54,28,-44}, -{54,28,-43}, -{54,28,-42}, -{54,28,-41}, -{54,28,-40}, -{54,28,-39}, -{54,28,-38}, -{54,28,-37}, -{54,28,-36}, -{54,28,-35}, -{54,28,-34}, -{54,28,-33}, -{54,28,-32}, -{54,28,-31}, -{54,28,-30}, -{54,28,-29}, -{54,28,-28}, -{54,28,-27}, -{54,28,-26}, -{54,28,-25}, -{54,28,-24}, -{54,28,-23}, -{54,28,-22}, -{54,28,-21}, -{54,28,-20}, -{54,28,-19}, -{54,28,-18}, -{54,28,-17}, -{54,28,-16}, -{54,28,-15}, -{54,28,-14}, -{54,28,-13}, -{54,28,-12}, -{54,28,-11}, -{54,28,-10}, -{54,28,-9}, -{54,28,-8}, -{54,28,-7}, -{54,28,-6}, -{54,28,-5}, -{54,28,-4}, -{54,28,-3}, -{54,28,-2}, -{54,28,-1}, -{54,28,0}, -{54,28,1}, -{54,28,2}, -{54,28,3}, -{54,28,4}, -{54,28,5}, -{54,28,6}, -{54,28,7}, -{54,28,8}, -{54,28,9}, -{54,28,10}, -{54,28,11}, -{54,28,12}, -{54,28,13}, -{54,28,14}, -{54,28,15}, -{54,28,16}, -{54,28,17}, -{54,28,18}, -{54,28,19}, -{54,28,20}, -{54,28,21}, -{54,28,22}, -{54,28,23}, -{54,28,24}, -{54,28,25}, -{54,28,26}, -{54,28,27}, -{54,28,28}, -{54,28,29}, -{54,28,30}, -{54,28,31}, -{54,28,32}, -{54,28,33}, -{54,28,34}, -{54,28,35}, -{54,28,36}, -{54,28,37}, -{54,28,38}, -{54,28,39}, -{54,28,40}, -{54,28,41}, -{54,28,42}, -{54,28,43}, -{54,28,44}, -{54,28,45}, -{54,28,46}, -{54,28,47}, -{54,28,48}, -{54,28,49}, -{54,28,50}, -{54,28,51}, -{54,28,52}, -{54,28,53}, -{54,28,54}, -{54,28,55}, -{54,28,56}, -{54,28,57}, -{54,28,58}, -{54,28,59}, -{54,28,60}, -{54,28,61}, -{54,29,-72}, -{54,29,-71}, -{54,29,-70}, -{54,29,-69}, -{54,29,-68}, -{54,29,-67}, -{54,29,-66}, -{54,29,-65}, -{54,29,-64}, -{54,29,-63}, -{54,29,-62}, -{54,29,-61}, -{54,29,-60}, -{54,29,-59}, -{54,29,-58}, -{54,29,-57}, -{54,29,-56}, -{54,29,-55}, -{54,29,-54}, -{54,29,-53}, -{54,29,-52}, -{54,29,-51}, -{54,29,-50}, -{54,29,-49}, -{54,29,-48}, -{54,29,-47}, -{54,29,-46}, -{54,29,-45}, -{54,29,-44}, -{54,29,-43}, -{54,29,-42}, -{54,29,-41}, -{54,29,-40}, -{54,29,-39}, -{54,29,-38}, -{54,29,-37}, -{54,29,-36}, -{54,29,-35}, -{54,29,-34}, -{54,29,-33}, -{54,29,-32}, -{54,29,-31}, -{54,29,-30}, -{54,29,-29}, -{54,29,-28}, -{54,29,-27}, -{54,29,-26}, -{54,29,-25}, -{54,29,-24}, -{54,29,-23}, -{54,29,-22}, -{54,29,-21}, -{54,29,-20}, -{54,29,-19}, -{54,29,-18}, -{54,29,-17}, -{54,29,-16}, -{54,29,-15}, -{54,29,-14}, -{54,29,-13}, -{54,29,-12}, -{54,29,-11}, -{54,29,-10}, -{54,29,-9}, -{54,29,-8}, -{54,29,-7}, -{54,29,-6}, -{54,29,-5}, -{54,29,-4}, -{54,29,-3}, -{54,29,-2}, -{54,29,-1}, -{54,29,0}, -{54,29,1}, -{54,29,2}, -{54,29,3}, -{54,29,4}, -{54,29,5}, -{54,29,6}, -{54,29,7}, -{54,29,8}, -{54,29,9}, -{54,29,10}, -{54,29,11}, -{54,29,12}, -{54,29,13}, -{54,29,14}, -{54,29,15}, -{54,29,16}, -{54,29,17}, -{54,29,18}, -{54,29,19}, -{54,29,20}, -{54,29,21}, -{54,29,22}, -{54,29,23}, -{54,29,24}, -{54,29,25}, -{54,29,26}, -{54,29,27}, -{54,29,28}, -{54,29,29}, -{54,29,30}, -{54,29,31}, -{54,29,32}, -{54,29,33}, -{54,29,34}, -{54,29,35}, -{54,29,36}, -{54,29,37}, -{54,29,38}, -{54,29,39}, -{54,29,40}, -{54,29,41}, -{54,29,42}, -{54,29,43}, -{54,29,44}, -{54,29,45}, -{54,29,46}, -{54,29,47}, -{54,29,48}, -{54,29,49}, -{54,29,50}, -{54,29,51}, -{54,29,52}, -{54,29,53}, -{54,29,54}, -{54,29,55}, -{54,29,56}, -{54,29,57}, -{54,29,58}, -{54,29,59}, -{54,29,60}, -{54,29,61}, -{54,30,-72}, -{54,30,-71}, -{54,30,-70}, -{54,30,-69}, -{54,30,-68}, -{54,30,-67}, -{54,30,-66}, -{54,30,-65}, -{54,30,-64}, -{54,30,-63}, -{54,30,-62}, -{54,30,-61}, -{54,30,-60}, -{54,30,-59}, -{54,30,-58}, -{54,30,-57}, -{54,30,-56}, -{54,30,-55}, -{54,30,-54}, -{54,30,-53}, -{54,30,-52}, -{54,30,-51}, -{54,30,-50}, -{54,30,-49}, -{54,30,-48}, -{54,30,-47}, -{54,30,-46}, -{54,30,-45}, -{54,30,-44}, -{54,30,-43}, -{54,30,-42}, -{54,30,-41}, -{54,30,-40}, -{54,30,-39}, -{54,30,-38}, -{54,30,-37}, -{54,30,-36}, -{54,30,-35}, -{54,30,-34}, -{54,30,-33}, -{54,30,-32}, -{54,30,-31}, -{54,30,-30}, -{54,30,-29}, -{54,30,-28}, -{54,30,-27}, -{54,30,-26}, -{54,30,-25}, -{54,30,-24}, -{54,30,-23}, -{54,30,-22}, -{54,30,-21}, -{54,30,-20}, -{54,30,-19}, -{54,30,-18}, -{54,30,-17}, -{54,30,-16}, -{54,30,-15}, -{54,30,-14}, -{54,30,-13}, -{54,30,-12}, -{54,30,-11}, -{54,30,-10}, -{54,30,-9}, -{54,30,-8}, -{54,30,-7}, -{54,30,-6}, -{54,30,-5}, -{54,30,-4}, -{54,30,-3}, -{54,30,-2}, -{54,30,-1}, -{54,30,0}, -{54,30,1}, -{54,30,2}, -{54,30,3}, -{54,30,4}, -{54,30,5}, -{54,30,6}, -{54,30,7}, -{54,30,8}, -{54,30,9}, -{54,30,10}, -{54,30,11}, -{54,30,12}, -{54,30,13}, -{54,30,14}, -{54,30,15}, -{54,30,16}, -{54,30,17}, -{54,30,18}, -{54,30,19}, -{54,30,20}, -{54,30,21}, -{54,30,22}, -{54,30,23}, -{54,30,24}, -{54,30,25}, -{54,30,26}, -{54,30,27}, -{54,30,28}, -{54,30,29}, -{54,30,30}, -{54,30,31}, -{54,30,32}, -{54,30,33}, -{54,30,34}, -{54,30,35}, -{54,30,36}, -{54,30,37}, -{54,30,38}, -{54,30,39}, -{54,30,40}, -{54,30,41}, -{54,30,42}, -{54,30,43}, -{54,30,44}, -{54,30,45}, -{54,30,46}, -{54,30,47}, -{54,30,48}, -{54,30,49}, -{54,30,50}, -{54,30,51}, -{54,30,52}, -{54,30,53}, -{54,30,54}, -{54,30,55}, -{54,30,56}, -{54,30,57}, -{54,30,58}, -{54,30,59}, -{54,30,60}, -{54,30,61}, -{54,31,-72}, -{54,31,-71}, -{54,31,-70}, -{54,31,-69}, -{54,31,-68}, -{54,31,-67}, -{54,31,-66}, -{54,31,-65}, -{54,31,-64}, -{54,31,-63}, -{54,31,-62}, -{54,31,-61}, -{54,31,-60}, -{54,31,-59}, -{54,31,-58}, -{54,31,-57}, -{54,31,-56}, -{54,31,-55}, -{54,31,-54}, -{54,31,-53}, -{54,31,-52}, -{54,31,-51}, -{54,31,-50}, -{54,31,-49}, -{54,31,-48}, -{54,31,-47}, -{54,31,-46}, -{54,31,-45}, -{54,31,-44}, -{54,31,-43}, -{54,31,-42}, -{54,31,-41}, -{54,31,-40}, -{54,31,-39}, -{54,31,-38}, -{54,31,-37}, -{54,31,-36}, -{54,31,-35}, -{54,31,-34}, -{54,31,-33}, -{54,31,-32}, -{54,31,-31}, -{54,31,-30}, -{54,31,-29}, -{54,31,-28}, -{54,31,-27}, -{54,31,-26}, -{54,31,-25}, -{54,31,-24}, -{54,31,-23}, -{54,31,-22}, -{54,31,-21}, -{54,31,-20}, -{54,31,-19}, -{54,31,-18}, -{54,31,-17}, -{54,31,-16}, -{54,31,-15}, -{54,31,-14}, -{54,31,-13}, -{54,31,-12}, -{54,31,-11}, -{54,31,-10}, -{54,31,-9}, -{54,31,-8}, -{54,31,-7}, -{54,31,-6}, -{54,31,-5}, -{54,31,-4}, -{54,31,-3}, -{54,31,-2}, -{54,31,-1}, -{54,31,0}, -{54,31,1}, -{54,31,2}, -{54,31,3}, -{54,31,4}, -{54,31,5}, -{54,31,6}, -{54,31,7}, -{54,31,8}, -{54,31,9}, -{54,31,10}, -{54,31,11}, -{54,31,12}, -{54,31,13}, -{54,31,14}, -{54,31,15}, -{54,31,16}, -{54,31,17}, -{54,31,18}, -{54,31,19}, -{54,31,20}, -{54,31,21}, -{54,31,22}, -{54,31,23}, -{54,31,24}, -{54,31,25}, -{54,31,26}, -{54,31,27}, -{54,31,28}, -{54,31,29}, -{54,31,30}, -{54,31,31}, -{54,31,32}, -{54,31,33}, -{54,31,34}, -{54,31,35}, -{54,31,36}, -{54,31,37}, -{54,31,38}, -{54,31,39}, -{54,31,40}, -{54,31,41}, -{54,31,42}, -{54,31,43}, -{54,31,44}, -{54,31,45}, -{54,31,46}, -{54,31,47}, -{54,31,48}, -{54,31,49}, -{54,31,50}, -{54,31,51}, -{54,31,52}, -{54,31,53}, -{54,31,54}, -{54,31,55}, -{54,31,56}, -{54,31,57}, -{54,31,58}, -{54,31,59}, -{54,31,60}, -{54,31,61}, -{54,31,62}, -{54,32,-72}, -{54,32,-71}, -{54,32,-70}, -{54,32,-69}, -{54,32,-68}, -{54,32,-67}, -{54,32,-66}, -{54,32,-65}, -{54,32,-64}, -{54,32,-63}, -{54,32,-62}, -{54,32,-61}, -{54,32,-60}, -{54,32,-59}, -{54,32,-58}, -{54,32,-57}, -{54,32,-56}, -{54,32,-55}, -{54,32,-54}, -{54,32,-53}, -{54,32,-52}, -{54,32,-51}, -{54,32,-50}, -{54,32,-49}, -{54,32,-48}, -{54,32,-47}, -{54,32,-46}, -{54,32,-45}, -{54,32,-44}, -{54,32,-43}, -{54,32,-42}, -{54,32,-41}, -{54,32,-40}, -{54,32,-39}, -{54,32,-38}, -{54,32,-37}, -{54,32,-36}, -{54,32,-35}, -{54,32,-34}, -{54,32,-33}, -{54,32,-32}, -{54,32,-31}, -{54,32,-30}, -{54,32,-29}, -{54,32,-28}, -{54,32,-27}, -{54,32,-26}, -{54,32,-25}, -{54,32,-24}, -{54,32,-23}, -{54,32,-22}, -{54,32,-21}, -{54,32,-20}, -{54,32,-19}, -{54,32,-18}, -{54,32,-17}, -{54,32,-16}, -{54,32,-15}, -{54,32,-14}, -{54,32,-13}, -{54,32,-12}, -{54,32,-11}, -{54,32,-10}, -{54,32,-9}, -{54,32,-8}, -{54,32,-7}, -{54,32,-6}, -{54,32,-5}, -{54,32,-4}, -{54,32,-3}, -{54,32,-2}, -{54,32,-1}, -{54,32,0}, -{54,32,1}, -{54,32,2}, -{54,32,3}, -{54,32,4}, -{54,32,5}, -{54,32,6}, -{54,32,7}, -{54,32,8}, -{54,32,9}, -{54,32,10}, -{54,32,11}, -{54,32,12}, -{54,32,13}, -{54,32,14}, -{54,32,15}, -{54,32,16}, -{54,32,17}, -{54,32,18}, -{54,32,19}, -{54,32,20}, -{54,32,21}, -{54,32,22}, -{54,32,23}, -{54,32,24}, -{54,32,25}, -{54,32,26}, -{54,32,27}, -{54,32,28}, -{54,32,29}, -{54,32,30}, -{54,32,31}, -{54,32,32}, -{54,32,33}, -{54,32,34}, -{54,32,35}, -{54,32,36}, -{54,32,37}, -{54,32,38}, -{54,32,39}, -{54,32,40}, -{54,32,41}, -{54,32,42}, -{54,32,43}, -{54,32,44}, -{54,32,45}, -{54,32,46}, -{54,32,47}, -{54,32,48}, -{54,32,49}, -{54,32,50}, -{54,32,51}, -{54,32,52}, -{54,32,53}, -{54,32,54}, -{54,32,55}, -{54,32,56}, -{54,32,57}, -{54,32,58}, -{54,32,59}, -{54,32,60}, -{54,32,61}, -{54,32,62}, -{54,33,-72}, -{54,33,-71}, -{54,33,-70}, -{54,33,-69}, -{54,33,-68}, -{54,33,-67}, -{54,33,-66}, -{54,33,-65}, -{54,33,-64}, -{54,33,-63}, -{54,33,-62}, -{54,33,-61}, -{54,33,-60}, -{54,33,-59}, -{54,33,-58}, -{54,33,-57}, -{54,33,-56}, -{54,33,-55}, -{54,33,-54}, -{54,33,-53}, -{54,33,-52}, -{54,33,-51}, -{54,33,-50}, -{54,33,-49}, -{54,33,-48}, -{54,33,-47}, -{54,33,-46}, -{54,33,-45}, -{54,33,-44}, -{54,33,-43}, -{54,33,-42}, -{54,33,-41}, -{54,33,-40}, -{54,33,-39}, -{54,33,-38}, -{54,33,-37}, -{54,33,-36}, -{54,33,-35}, -{54,33,-34}, -{54,33,-33}, -{54,33,-32}, -{54,33,-31}, -{54,33,-30}, -{54,33,-29}, -{54,33,-28}, -{54,33,-27}, -{54,33,-26}, -{54,33,-25}, -{54,33,-24}, -{54,33,-23}, -{54,33,-22}, -{54,33,-21}, -{54,33,-20}, -{54,33,-19}, -{54,33,-18}, -{54,33,-17}, -{54,33,-16}, -{54,33,-15}, -{54,33,-14}, -{54,33,-13}, -{54,33,-12}, -{54,33,-11}, -{54,33,-10}, -{54,33,-9}, -{54,33,-8}, -{54,33,-7}, -{54,33,-6}, -{54,33,-5}, -{54,33,-4}, -{54,33,-3}, -{54,33,-2}, -{54,33,-1}, -{54,33,0}, -{54,33,1}, -{54,33,2}, -{54,33,3}, -{54,33,4}, -{54,33,5}, -{54,33,6}, -{54,33,7}, -{54,33,8}, -{54,33,9}, -{54,33,10}, -{54,33,11}, -{54,33,12}, -{54,33,13}, -{54,33,14}, -{54,33,15}, -{54,33,16}, -{54,33,17}, -{54,33,18}, -{54,33,19}, -{54,33,20}, -{54,33,21}, -{54,33,22}, -{54,33,23}, -{54,33,24}, -{54,33,25}, -{54,33,26}, -{54,33,27}, -{54,33,28}, -{54,33,29}, -{54,33,30}, -{54,33,31}, -{54,33,32}, -{54,33,33}, -{54,33,34}, -{54,33,35}, -{54,33,36}, -{54,33,37}, -{54,33,38}, -{54,33,39}, -{54,33,40}, -{54,33,41}, -{54,33,42}, -{54,33,43}, -{54,33,44}, -{54,33,45}, -{54,33,46}, -{54,33,47}, -{54,33,48}, -{54,33,49}, -{54,33,50}, -{54,33,51}, -{54,33,52}, -{54,33,53}, -{54,33,54}, -{54,33,55}, -{54,33,56}, -{54,33,57}, -{54,33,58}, -{54,33,59}, -{54,33,60}, -{54,33,61}, -{54,33,62}, -{54,34,-72}, -{54,34,-71}, -{54,34,-70}, -{54,34,-69}, -{54,34,-68}, -{54,34,-67}, -{54,34,-66}, -{54,34,-65}, -{54,34,-64}, -{54,34,-63}, -{54,34,-62}, -{54,34,-61}, -{54,34,-60}, -{54,34,-59}, -{54,34,-58}, -{54,34,-57}, -{54,34,-56}, -{54,34,-55}, -{54,34,-54}, -{54,34,-53}, -{54,34,-52}, -{54,34,-51}, -{54,34,-50}, -{54,34,-49}, -{54,34,-48}, -{54,34,-47}, -{54,34,-46}, -{54,34,-45}, -{54,34,-44}, -{54,34,-43}, -{54,34,-42}, -{54,34,-41}, -{54,34,-40}, -{54,34,-39}, -{54,34,-38}, -{54,34,-37}, -{54,34,-36}, -{54,34,-35}, -{54,34,-34}, -{54,34,-33}, -{54,34,-32}, -{54,34,-31}, -{54,34,-30}, -{54,34,-29}, -{54,34,-28}, -{54,34,-27}, -{54,34,-26}, -{54,34,-25}, -{54,34,-24}, -{54,34,-23}, -{54,34,-22}, -{54,34,-21}, -{54,34,-20}, -{54,34,-19}, -{54,34,-18}, -{54,34,-17}, -{54,34,-16}, -{54,34,-15}, -{54,34,-14}, -{54,34,-13}, -{54,34,-12}, -{54,34,-11}, -{54,34,-10}, -{54,34,-9}, -{54,34,-8}, -{54,34,-7}, -{54,34,-6}, -{54,34,-5}, -{54,34,-4}, -{54,34,-3}, -{54,34,-2}, -{54,34,-1}, -{54,34,0}, -{54,34,1}, -{54,34,2}, -{54,34,3}, -{54,34,4}, -{54,34,5}, -{54,34,6}, -{54,34,7}, -{54,34,8}, -{54,34,9}, -{54,34,10}, -{54,34,11}, -{54,34,12}, -{54,34,13}, -{54,34,14}, -{54,34,15}, -{54,34,16}, -{54,34,17}, -{54,34,18}, -{54,34,19}, -{54,34,20}, -{54,34,21}, -{54,34,22}, -{54,34,23}, -{54,34,24}, -{54,34,25}, -{54,34,26}, -{54,34,27}, -{54,34,28}, -{54,34,29}, -{54,34,30}, -{54,34,31}, -{54,34,32}, -{54,34,33}, -{54,34,34}, -{54,34,35}, -{54,34,36}, -{54,34,37}, -{54,34,38}, -{54,34,39}, -{54,34,40}, -{54,34,41}, -{54,34,42}, -{54,34,43}, -{54,34,44}, -{54,34,45}, -{54,34,46}, -{54,34,47}, -{54,34,48}, -{54,34,49}, -{54,34,50}, -{54,34,51}, -{54,34,52}, -{54,34,53}, -{54,34,54}, -{54,34,55}, -{54,34,56}, -{54,34,57}, -{54,34,58}, -{54,34,59}, -{54,34,60}, -{54,34,61}, -{54,34,62}, -{54,35,-72}, -{54,35,-71}, -{54,35,-70}, -{54,35,-69}, -{54,35,-68}, -{54,35,-67}, -{54,35,-66}, -{54,35,-65}, -{54,35,-64}, -{54,35,-63}, -{54,35,-62}, -{54,35,-61}, -{54,35,-60}, -{54,35,-59}, -{54,35,-58}, -{54,35,-57}, -{54,35,-56}, -{54,35,-55}, -{54,35,-54}, -{54,35,-53}, -{54,35,-52}, -{54,35,-51}, -{54,35,-50}, -{54,35,-49}, -{54,35,-48}, -{54,35,-47}, -{54,35,-46}, -{54,35,-45}, -{54,35,-44}, -{54,35,-43}, -{54,35,-42}, -{54,35,-41}, -{54,35,-40}, -{54,35,-39}, -{54,35,-38}, -{54,35,-37}, -{54,35,-36}, -{54,35,-35}, -{54,35,-34}, -{54,35,-33}, -{54,35,-32}, -{54,35,-31}, -{54,35,-30}, -{54,35,-29}, -{54,35,-28}, -{54,35,-27}, -{54,35,-26}, -{54,35,-25}, -{54,35,-24}, -{54,35,-23}, -{54,35,-22}, -{54,35,-21}, -{54,35,-20}, -{54,35,-19}, -{54,35,-18}, -{54,35,-17}, -{54,35,-16}, -{54,35,-15}, -{54,35,-14}, -{54,35,-13}, -{54,35,-12}, -{54,35,-11}, -{54,35,-10}, -{54,35,-9}, -{54,35,-8}, -{54,35,-7}, -{54,35,-6}, -{54,35,-5}, -{54,35,-4}, -{54,35,-3}, -{54,35,-2}, -{54,35,-1}, -{54,35,0}, -{54,35,1}, -{54,35,2}, -{54,35,3}, -{54,35,4}, -{54,35,5}, -{54,35,6}, -{54,35,7}, -{54,35,8}, -{54,35,9}, -{54,35,10}, -{54,35,11}, -{54,35,12}, -{54,35,13}, -{54,35,14}, -{54,35,15}, -{54,35,16}, -{54,35,17}, -{54,35,18}, -{54,35,19}, -{54,35,20}, -{54,35,21}, -{54,35,22}, -{54,35,23}, -{54,35,24}, -{54,35,25}, -{54,35,26}, -{54,35,27}, -{54,35,28}, -{54,35,29}, -{54,35,30}, -{54,35,31}, -{54,35,32}, -{54,35,33}, -{54,35,34}, -{54,35,35}, -{54,35,36}, -{54,35,37}, -{54,35,38}, -{54,35,39}, -{54,35,40}, -{54,35,41}, -{54,35,42}, -{54,35,43}, -{54,35,44}, -{54,35,45}, -{54,35,46}, -{54,35,47}, -{54,35,48}, -{54,35,49}, -{54,35,50}, -{54,35,51}, -{54,35,52}, -{54,35,53}, -{54,35,54}, -{54,35,55}, -{54,35,56}, -{54,35,57}, -{54,35,58}, -{54,35,59}, -{54,35,60}, -{54,35,61}, -{54,35,62}, -{54,36,-72}, -{54,36,-71}, -{54,36,-70}, -{54,36,-69}, -{54,36,-68}, -{54,36,-67}, -{54,36,-66}, -{54,36,-65}, -{54,36,-64}, -{54,36,-63}, -{54,36,-62}, -{54,36,-61}, -{54,36,-60}, -{54,36,-59}, -{54,36,-58}, -{54,36,-57}, -{54,36,-56}, -{54,36,-55}, -{54,36,-54}, -{54,36,-53}, -{54,36,-52}, -{54,36,-51}, -{54,36,-50}, -{54,36,-49}, -{54,36,-48}, -{54,36,-47}, -{54,36,-46}, -{54,36,-45}, -{54,36,-44}, -{54,36,-43}, -{54,36,-42}, -{54,36,-41}, -{54,36,-40}, -{54,36,-39}, -{54,36,-38}, -{54,36,-37}, -{54,36,-36}, -{54,36,-35}, -{54,36,-34}, -{54,36,-33}, -{54,36,-32}, -{54,36,-31}, -{54,36,-30}, -{54,36,-29}, -{54,36,-28}, -{54,36,-27}, -{54,36,-26}, -{54,36,-25}, -{54,36,-24}, -{54,36,-23}, -{54,36,-22}, -{54,36,-21}, -{54,36,-20}, -{54,36,-19}, -{54,36,-18}, -{54,36,-17}, -{54,36,-16}, -{54,36,-15}, -{54,36,-14}, -{54,36,-13}, -{54,36,-12}, -{54,36,-11}, -{54,36,-10}, -{54,36,-9}, -{54,36,-8}, -{54,36,-7}, -{54,36,-6}, -{54,36,-5}, -{54,36,-4}, -{54,36,-3}, -{54,36,-2}, -{54,36,-1}, -{54,36,0}, -{54,36,1}, -{54,36,2}, -{54,36,3}, -{54,36,4}, -{54,36,5}, -{54,36,6}, -{54,36,7}, -{54,36,8}, -{54,36,9}, -{54,36,10}, -{54,36,11}, -{54,36,12}, -{54,36,13}, -{54,36,14}, -{54,36,15}, -{54,36,16}, -{54,36,17}, -{54,36,18}, -{54,36,19}, -{54,36,20}, -{54,36,21}, -{54,36,22}, -{54,36,23}, -{54,36,24}, -{54,36,25}, -{54,36,26}, -{54,36,27}, -{54,36,28}, -{54,36,29}, -{54,36,30}, -{54,36,31}, -{54,36,32}, -{54,36,33}, -{54,36,34}, -{54,36,35}, -{54,36,36}, -{54,36,37}, -{54,36,38}, -{54,36,39}, -{54,36,40}, -{54,36,41}, -{54,36,42}, -{54,36,43}, -{54,36,44}, -{54,36,45}, -{54,36,46}, -{54,36,47}, -{54,36,48}, -{54,36,49}, -{54,36,50}, -{54,36,51}, -{54,36,52}, -{54,36,53}, -{54,36,54}, -{54,36,55}, -{54,36,56}, -{54,36,57}, -{54,36,58}, -{54,36,59}, -{54,36,60}, -{54,36,61}, -{54,36,62}, -{54,37,-72}, -{54,37,-71}, -{54,37,-70}, -{54,37,-69}, -{54,37,-68}, -{54,37,-67}, -{54,37,-66}, -{54,37,-65}, -{54,37,-64}, -{54,37,-63}, -{54,37,-62}, -{54,37,-61}, -{54,37,-60}, -{54,37,-59}, -{54,37,-58}, -{54,37,-57}, -{54,37,-56}, -{54,37,-55}, -{54,37,-54}, -{54,37,-53}, -{54,37,-52}, -{54,37,-51}, -{54,37,-50}, -{54,37,-49}, -{54,37,-48}, -{54,37,-47}, -{54,37,-46}, -{54,37,-45}, -{54,37,-44}, -{54,37,-43}, -{54,37,-42}, -{54,37,-41}, -{54,37,-40}, -{54,37,-39}, -{54,37,-38}, -{54,37,-37}, -{54,37,-36}, -{54,37,-35}, -{54,37,-34}, -{54,37,-33}, -{54,37,-32}, -{54,37,-31}, -{54,37,-30}, -{54,37,-29}, -{54,37,-28}, -{54,37,-27}, -{54,37,-26}, -{54,37,-25}, -{54,37,-24}, -{54,37,-23}, -{54,37,-22}, -{54,37,-21}, -{54,37,-20}, -{54,37,-19}, -{54,37,-18}, -{54,37,-17}, -{54,37,-16}, -{54,37,-15}, -{54,37,-14}, -{54,37,-13}, -{54,37,-12}, -{54,37,-11}, -{54,37,-10}, -{54,37,-9}, -{54,37,-8}, -{54,37,-7}, -{54,37,-6}, -{54,37,-5}, -{54,37,-4}, -{54,37,-3}, -{54,37,-2}, -{54,37,-1}, -{54,37,0}, -{54,37,1}, -{54,37,2}, -{54,37,3}, -{54,37,4}, -{54,37,5}, -{54,37,6}, -{54,37,7}, -{54,37,8}, -{54,37,9}, -{54,37,10}, -{54,37,11}, -{54,37,12}, -{54,37,13}, -{54,37,14}, -{54,37,15}, -{54,37,16}, -{54,37,17}, -{54,37,18}, -{54,37,19}, -{54,37,20}, -{54,37,21}, -{54,37,22}, -{54,37,23}, -{54,37,24}, -{54,37,25}, -{54,37,26}, -{54,37,27}, -{54,37,28}, -{54,37,29}, -{54,37,30}, -{54,37,31}, -{54,37,32}, -{54,37,33}, -{54,37,34}, -{54,37,35}, -{54,37,36}, -{54,37,37}, -{54,37,38}, -{54,37,39}, -{54,37,40}, -{54,37,41}, -{54,37,42}, -{54,37,43}, -{54,37,44}, -{54,37,45}, -{54,37,46}, -{54,37,47}, -{54,37,48}, -{54,37,49}, -{54,37,50}, -{54,37,51}, -{54,37,52}, -{54,37,53}, -{54,37,54}, -{54,37,55}, -{54,37,56}, -{54,37,57}, -{54,37,58}, -{54,37,59}, -{54,37,60}, -{54,37,61}, -{54,37,62}, -{54,38,-72}, -{54,38,-71}, -{54,38,-70}, -{54,38,-69}, -{54,38,-68}, -{54,38,-67}, -{54,38,-66}, -{54,38,-65}, -{54,38,-64}, -{54,38,-63}, -{54,38,-62}, -{54,38,-61}, -{54,38,-60}, -{54,38,-59}, -{54,38,-58}, -{54,38,-57}, -{54,38,-56}, -{54,38,-55}, -{54,38,-54}, -{54,38,-53}, -{54,38,-52}, -{54,38,-51}, -{54,38,-50}, -{54,38,-49}, -{54,38,-48}, -{54,38,-47}, -{54,38,-46}, -{54,38,-45}, -{54,38,-44}, -{54,38,-43}, -{54,38,-42}, -{54,38,-41}, -{54,38,-40}, -{54,38,-39}, -{54,38,-38}, -{54,38,-37}, -{54,38,-36}, -{54,38,-35}, -{54,38,-34}, -{54,38,-33}, -{54,38,-32}, -{54,38,-31}, -{54,38,-30}, -{54,38,-29}, -{54,38,-28}, -{54,38,-27}, -{54,38,-26}, -{54,38,-25}, -{54,38,-24}, -{54,38,-23}, -{54,38,-22}, -{54,38,-21}, -{54,38,-20}, -{54,38,-19}, -{54,38,-18}, -{54,38,-17}, -{54,38,-16}, -{54,38,-15}, -{54,38,-14}, -{54,38,-13}, -{54,38,-12}, -{54,38,-11}, -{54,38,-10}, -{54,38,-9}, -{54,38,-8}, -{54,38,-7}, -{54,38,-6}, -{54,38,-5}, -{54,38,-4}, -{54,38,-3}, -{54,38,-2}, -{54,38,-1}, -{54,38,0}, -{54,38,1}, -{54,38,2}, -{54,38,3}, -{54,38,4}, -{54,38,5}, -{54,38,6}, -{54,38,7}, -{54,38,8}, -{54,38,9}, -{54,38,10}, -{54,38,11}, -{54,38,12}, -{54,38,13}, -{54,38,14}, -{54,38,15}, -{54,38,16}, -{54,38,17}, -{54,38,18}, -{54,38,19}, -{54,38,20}, -{54,38,21}, -{54,38,22}, -{54,38,23}, -{54,38,24}, -{54,38,25}, -{54,38,26}, -{54,38,27}, -{54,38,28}, -{54,38,29}, -{54,38,30}, -{54,38,31}, -{54,38,32}, -{54,38,33}, -{54,38,34}, -{54,38,35}, -{54,38,36}, -{54,38,37}, -{54,38,38}, -{54,38,39}, -{54,38,40}, -{54,38,41}, -{54,38,42}, -{54,38,43}, -{54,38,44}, -{54,38,45}, -{54,38,46}, -{54,38,47}, -{54,38,48}, -{54,38,49}, -{54,38,50}, -{54,38,51}, -{54,38,52}, -{54,38,53}, -{54,38,54}, -{54,38,55}, -{54,38,56}, -{54,38,57}, -{54,38,58}, -{54,38,59}, -{54,38,60}, -{54,38,61}, -{54,38,62}, -{54,39,-72}, -{54,39,-71}, -{54,39,-70}, -{54,39,-69}, -{54,39,-68}, -{54,39,-67}, -{54,39,-66}, -{54,39,-65}, -{54,39,-64}, -{54,39,-63}, -{54,39,-62}, -{54,39,-61}, -{54,39,-60}, -{54,39,-59}, -{54,39,-58}, -{54,39,-57}, -{54,39,-56}, -{54,39,-55}, -{54,39,-54}, -{54,39,-53}, -{54,39,-52}, -{54,39,-51}, -{54,39,-50}, -{54,39,-49}, -{54,39,-48}, -{54,39,-47}, -{54,39,-46}, -{54,39,-45}, -{54,39,-44}, -{54,39,-43}, -{54,39,-42}, -{54,39,-41}, -{54,39,-40}, -{54,39,-39}, -{54,39,-38}, -{54,39,-37}, -{54,39,-36}, -{54,39,-35}, -{54,39,-34}, -{54,39,-33}, -{54,39,-32}, -{54,39,-31}, -{54,39,-30}, -{54,39,-29}, -{54,39,-28}, -{54,39,-27}, -{54,39,-26}, -{54,39,-25}, -{54,39,-24}, -{54,39,-23}, -{54,39,-22}, -{54,39,-21}, -{54,39,-20}, -{54,39,-19}, -{54,39,-18}, -{54,39,-17}, -{54,39,-16}, -{54,39,-15}, -{54,39,-14}, -{54,39,-13}, -{54,39,-12}, -{54,39,-11}, -{54,39,-10}, -{54,39,-9}, -{54,39,-8}, -{54,39,-7}, -{54,39,-6}, -{54,39,-5}, -{54,39,-4}, -{54,39,-3}, -{54,39,-2}, -{54,39,-1}, -{54,39,0}, -{54,39,1}, -{54,39,2}, -{54,39,3}, -{54,39,4}, -{54,39,5}, -{54,39,6}, -{54,39,7}, -{54,39,8}, -{54,39,9}, -{54,39,10}, -{54,39,11}, -{54,39,12}, -{54,39,13}, -{54,39,14}, -{54,39,15}, -{54,39,16}, -{54,39,17}, -{54,39,18}, -{54,39,19}, -{54,39,20}, -{54,39,21}, -{54,39,22}, -{54,39,23}, -{54,39,24}, -{54,39,25}, -{54,39,26}, -{54,39,27}, -{54,39,28}, -{54,39,29}, -{54,39,30}, -{54,39,31}, -{54,39,32}, -{54,39,33}, -{54,39,34}, -{54,39,35}, -{54,39,36}, -{54,39,37}, -{54,39,38}, -{54,39,39}, -{54,39,40}, -{54,39,41}, -{54,39,42}, -{54,39,43}, -{54,39,44}, -{54,39,45}, -{54,39,46}, -{54,39,47}, -{54,39,48}, -{54,39,49}, -{54,39,50}, -{54,39,51}, -{54,39,52}, -{54,39,53}, -{54,39,54}, -{54,39,55}, -{54,39,56}, -{54,39,57}, -{54,39,58}, -{54,39,59}, -{54,39,60}, -{54,39,61}, -{54,39,62}, -{54,40,-72}, -{54,40,-71}, -{54,40,-70}, -{54,40,-69}, -{54,40,-68}, -{54,40,-67}, -{54,40,-66}, -{54,40,-65}, -{54,40,-64}, -{54,40,-63}, -{54,40,-62}, -{54,40,-61}, -{54,40,-60}, -{54,40,-59}, -{54,40,-58}, -{54,40,-57}, -{54,40,-56}, -{54,40,-55}, -{54,40,-54}, -{54,40,-53}, -{54,40,-52}, -{54,40,-51}, -{54,40,-50}, -{54,40,-49}, -{54,40,-48}, -{54,40,-47}, -{54,40,-46}, -{54,40,-45}, -{54,40,-44}, -{54,40,-43}, -{54,40,-42}, -{54,40,-41}, -{54,40,-40}, -{54,40,-39}, -{54,40,-38}, -{54,40,-37}, -{54,40,-36}, -{54,40,-35}, -{54,40,-34}, -{54,40,-33}, -{54,40,-32}, -{54,40,-31}, -{54,40,-30}, -{54,40,-29}, -{54,40,-28}, -{54,40,-27}, -{54,40,-26}, -{54,40,-25}, -{54,40,-24}, -{54,40,-23}, -{54,40,-22}, -{54,40,-21}, -{54,40,-20}, -{54,40,-19}, -{54,40,-18}, -{54,40,-17}, -{54,40,-16}, -{54,40,-15}, -{54,40,-14}, -{54,40,-13}, -{54,40,-12}, -{54,40,-11}, -{54,40,-10}, -{54,40,-9}, -{54,40,-8}, -{54,40,-7}, -{54,40,-6}, -{54,40,-5}, -{54,40,-4}, -{54,40,-3}, -{54,40,-2}, -{54,40,-1}, -{54,40,0}, -{54,40,1}, -{54,40,2}, -{54,40,3}, -{54,40,4}, -{54,40,5}, -{54,40,6}, -{54,40,7}, -{54,40,8}, -{54,40,9}, -{54,40,10}, -{54,40,11}, -{54,40,12}, -{54,40,13}, -{54,40,14}, -{54,40,15}, -{54,40,16}, -{54,40,17}, -{54,40,18}, -{54,40,19}, -{54,40,20}, -{54,40,21}, -{54,40,22}, -{54,40,23}, -{54,40,24}, -{54,40,25}, -{54,40,26}, -{54,40,27}, -{54,40,28}, -{54,40,29}, -{54,40,30}, -{54,40,31}, -{54,40,32}, -{54,40,33}, -{54,40,34}, -{54,40,35}, -{54,40,36}, -{54,40,37}, -{54,40,38}, -{54,40,39}, -{54,40,40}, -{54,40,41}, -{54,40,42}, -{54,40,43}, -{54,40,44}, -{54,40,45}, -{54,40,46}, -{54,40,47}, -{54,40,48}, -{54,40,49}, -{54,40,50}, -{54,40,51}, -{54,40,52}, -{54,40,53}, -{54,40,54}, -{54,40,55}, -{54,40,56}, -{54,40,57}, -{54,40,58}, -{54,40,59}, -{54,40,60}, -{54,40,61}, -{54,40,62}, -{54,41,-72}, -{54,41,-71}, -{54,41,-70}, -{54,41,-69}, -{54,41,-68}, -{54,41,-67}, -{54,41,-66}, -{54,41,-65}, -{54,41,-64}, -{54,41,-63}, -{54,41,-62}, -{54,41,-61}, -{54,41,-60}, -{54,41,-59}, -{54,41,-58}, -{54,41,-57}, -{54,41,-56}, -{54,41,-55}, -{54,41,-54}, -{54,41,-53}, -{54,41,-52}, -{54,41,-51}, -{54,41,-50}, -{54,41,-49}, -{54,41,-48}, -{54,41,-47}, -{54,41,-46}, -{54,41,-45}, -{54,41,-44}, -{54,41,-43}, -{54,41,-42}, -{54,41,-41}, -{54,41,-40}, -{54,41,-39}, -{54,41,-38}, -{54,41,-37}, -{54,41,-36}, -{54,41,-35}, -{54,41,-34}, -{54,41,-33}, -{54,41,-32}, -{54,41,-31}, -{54,41,-30}, -{54,41,-29}, -{54,41,-28}, -{54,41,-27}, -{54,41,-26}, -{54,41,-25}, -{54,41,-24}, -{54,41,-23}, -{54,41,-22}, -{54,41,-21}, -{54,41,-20}, -{54,41,-19}, -{54,41,-18}, -{54,41,-17}, -{54,41,-16}, -{54,41,-15}, -{54,41,-14}, -{54,41,-13}, -{54,41,-12}, -{54,41,-11}, -{54,41,-10}, -{54,41,-9}, -{54,41,-8}, -{54,41,-7}, -{54,41,-6}, -{54,41,-5}, -{54,41,-4}, -{54,41,-3}, -{54,41,-2}, -{54,41,-1}, -{54,41,0}, -{54,41,1}, -{54,41,2}, -{54,41,3}, -{54,41,4}, -{54,41,5}, -{54,41,6}, -{54,41,7}, -{54,41,8}, -{54,41,9}, -{54,41,10}, -{54,41,11}, -{54,41,12}, -{54,41,13}, -{54,41,14}, -{54,41,15}, -{54,41,16}, -{54,41,17}, -{54,41,18}, -{54,41,19}, -{54,41,20}, -{54,41,21}, -{54,41,22}, -{54,41,23}, -{54,41,24}, -{54,41,25}, -{54,41,26}, -{54,41,27}, -{54,41,28}, -{54,41,29}, -{54,41,30}, -{54,41,31}, -{54,41,32}, -{54,41,33}, -{54,41,34}, -{54,41,35}, -{54,41,36}, -{54,41,37}, -{54,41,38}, -{54,41,39}, -{54,41,40}, -{54,41,41}, -{54,41,42}, -{54,41,43}, -{54,41,44}, -{54,41,45}, -{54,41,46}, -{54,41,47}, -{54,41,48}, -{54,41,49}, -{54,41,50}, -{54,41,51}, -{54,41,52}, -{54,41,53}, -{54,41,54}, -{54,41,55}, -{54,41,56}, -{54,41,57}, -{54,41,58}, -{54,41,59}, -{54,41,60}, -{54,41,61}, -{54,41,62}, -{54,41,63}, -{54,42,-72}, -{54,42,-71}, -{54,42,-70}, -{54,42,-69}, -{54,42,-68}, -{54,42,-67}, -{54,42,-66}, -{54,42,-65}, -{54,42,-64}, -{54,42,-63}, -{54,42,-62}, -{54,42,-61}, -{54,42,-60}, -{54,42,-59}, -{54,42,-58}, -{54,42,-57}, -{54,42,-56}, -{54,42,-55}, -{54,42,-54}, -{54,42,-53}, -{54,42,-52}, -{54,42,-51}, -{54,42,-50}, -{54,42,-49}, -{54,42,-48}, -{54,42,-47}, -{54,42,-46}, -{54,42,-45}, -{54,42,-44}, -{54,42,-43}, -{54,42,-42}, -{54,42,-41}, -{54,42,-40}, -{54,42,-39}, -{54,42,-38}, -{54,42,-37}, -{54,42,-36}, -{54,42,-35}, -{54,42,-34}, -{54,42,-33}, -{54,42,-32}, -{54,42,-31}, -{54,42,-30}, -{54,42,-29}, -{54,42,-28}, -{54,42,-27}, -{54,42,-26}, -{54,42,-25}, -{54,42,-24}, -{54,42,-23}, -{54,42,-22}, -{54,42,-21}, -{54,42,-20}, -{54,42,-19}, -{54,42,-18}, -{54,42,-17}, -{54,42,-16}, -{54,42,-15}, -{54,42,-14}, -{54,42,-13}, -{54,42,-12}, -{54,42,-11}, -{54,42,-10}, -{54,42,-9}, -{54,42,-8}, -{54,42,-7}, -{54,42,-6}, -{54,42,-5}, -{54,42,-4}, -{54,42,-3}, -{54,42,-2}, -{54,42,-1}, -{54,42,0}, -{54,42,1}, -{54,42,2}, -{54,42,3}, -{54,42,4}, -{54,42,5}, -{54,42,6}, -{54,42,7}, -{54,42,8}, -{54,42,9}, -{54,42,10}, -{54,42,11}, -{54,42,12}, -{54,42,13}, -{54,42,14}, -{54,42,15}, -{54,42,16}, -{54,42,17}, -{54,42,18}, -{54,42,19}, -{54,42,20}, -{54,42,21}, -{54,42,22}, -{54,42,23}, -{54,42,24}, -{54,42,25}, -{54,42,26}, -{54,42,27}, -{54,42,28}, -{54,42,29}, -{54,42,30}, -{54,42,31}, -{54,42,32}, -{54,42,33}, -{54,42,34}, -{54,42,35}, -{54,42,36}, -{54,42,37}, -{54,42,38}, -{54,42,39}, -{54,42,40}, -{54,42,41}, -{54,42,42}, -{54,42,43}, -{54,42,44}, -{54,42,45}, -{54,42,46}, -{54,42,47}, -{54,42,48}, -{54,42,49}, -{54,42,50}, -{54,42,51}, -{54,42,52}, -{54,42,53}, -{54,42,54}, -{54,42,55}, -{54,42,56}, -{54,42,57}, -{54,42,58}, -{54,42,59}, -{54,42,60}, -{54,42,61}, -{54,42,62}, -{54,42,63}, -{54,43,-72}, -{54,43,-71}, -{54,43,-70}, -{54,43,-69}, -{54,43,-68}, -{54,43,-67}, -{54,43,-66}, -{54,43,-65}, -{54,43,-64}, -{54,43,-63}, -{54,43,-62}, -{54,43,-61}, -{54,43,-60}, -{54,43,-59}, -{54,43,-58}, -{54,43,-57}, -{54,43,-56}, -{54,43,-55}, -{54,43,-54}, -{54,43,-53}, -{54,43,-52}, -{54,43,-51}, -{54,43,-50}, -{54,43,-49}, -{54,43,-48}, -{54,43,-47}, -{54,43,-46}, -{54,43,-45}, -{54,43,-44}, -{54,43,-43}, -{54,43,-42}, -{54,43,-41}, -{54,43,-40}, -{54,43,-39}, -{54,43,-38}, -{54,43,-37}, -{54,43,-36}, -{54,43,-35}, -{54,43,-34}, -{54,43,-33}, -{54,43,-32}, -{54,43,-31}, -{54,43,-30}, -{54,43,-29}, -{54,43,-28}, -{54,43,-27}, -{54,43,-26}, -{54,43,-25}, -{54,43,-24}, -{54,43,-23}, -{54,43,-22}, -{54,43,-21}, -{54,43,-20}, -{54,43,-19}, -{54,43,-18}, -{54,43,-17}, -{54,43,-16}, -{54,43,-15}, -{54,43,-14}, -{54,43,-13}, -{54,43,-12}, -{54,43,-11}, -{54,43,-10}, -{54,43,-9}, -{54,43,-8}, -{54,43,-7}, -{54,43,-6}, -{54,43,-5}, -{54,43,-4}, -{54,43,-3}, -{54,43,-2}, -{54,43,-1}, -{54,43,0}, -{54,43,1}, -{54,43,2}, -{54,43,3}, -{54,43,4}, -{54,43,5}, -{54,43,6}, -{54,43,7}, -{54,43,8}, -{54,43,9}, -{54,43,10}, -{54,43,11}, -{54,43,12}, -{54,43,13}, -{54,43,14}, -{54,43,15}, -{54,43,16}, -{54,43,17}, -{54,43,18}, -{54,43,19}, -{54,43,20}, -{54,43,21}, -{54,43,22}, -{54,43,23}, -{54,43,24}, -{54,43,25}, -{54,43,26}, -{54,43,27}, -{54,43,28}, -{54,43,29}, -{54,43,30}, -{54,43,31}, -{54,43,32}, -{54,43,33}, -{54,43,34}, -{54,43,35}, -{54,43,36}, -{54,43,37}, -{54,43,38}, -{54,43,39}, -{54,43,40}, -{54,43,41}, -{54,43,42}, -{54,43,43}, -{54,43,44}, -{54,43,45}, -{54,43,46}, -{54,43,47}, -{54,43,48}, -{54,43,49}, -{54,43,50}, -{54,43,51}, -{54,43,52}, -{54,43,53}, -{54,43,54}, -{54,43,55}, -{54,43,56}, -{54,43,57}, -{54,43,58}, -{54,43,59}, -{54,43,60}, -{54,43,61}, -{54,43,62}, -{54,43,63}, -{54,44,-72}, -{54,44,-71}, -{54,44,-70}, -{54,44,-69}, -{54,44,-68}, -{54,44,-67}, -{54,44,-66}, -{54,44,-65}, -{54,44,-64}, -{54,44,-63}, -{54,44,-62}, -{54,44,-61}, -{54,44,-60}, -{54,44,-59}, -{54,44,-58}, -{54,44,-57}, -{54,44,-56}, -{54,44,-55}, -{54,44,-54}, -{54,44,-53}, -{54,44,-52}, -{54,44,-51}, -{54,44,-50}, -{54,44,-49}, -{54,44,-48}, -{54,44,-47}, -{54,44,-46}, -{54,44,-45}, -{54,44,-44}, -{54,44,-43}, -{54,44,-42}, -{54,44,-41}, -{54,44,-40}, -{54,44,-39}, -{54,44,-38}, -{54,44,-37}, -{54,44,-36}, -{54,44,-35}, -{54,44,-34}, -{54,44,-33}, -{54,44,-32}, -{54,44,-31}, -{54,44,-30}, -{54,44,-29}, -{54,44,-28}, -{54,44,-27}, -{54,44,-26}, -{54,44,-25}, -{54,44,-24}, -{54,44,-23}, -{54,44,-22}, -{54,44,-21}, -{54,44,-20}, -{54,44,-19}, -{54,44,-18}, -{54,44,-17}, -{54,44,-16}, -{54,44,-15}, -{54,44,-14}, -{54,44,-13}, -{54,44,-12}, -{54,44,-11}, -{54,44,-10}, -{54,44,-9}, -{54,44,-8}, -{54,44,-7}, -{54,44,-6}, -{54,44,-5}, -{54,44,-4}, -{54,44,-3}, -{54,44,-2}, -{54,44,-1}, -{54,44,0}, -{54,44,1}, -{54,44,2}, -{54,44,3}, -{54,44,4}, -{54,44,5}, -{54,44,6}, -{54,44,7}, -{54,44,8}, -{54,44,9}, -{54,44,10}, -{54,44,11}, -{54,44,12}, -{54,44,13}, -{54,44,14}, -{54,44,15}, -{54,44,16}, -{54,44,17}, -{54,44,18}, -{54,44,19}, -{54,44,20}, -{54,44,21}, -{54,44,22}, -{54,44,23}, -{54,44,24}, -{54,44,25}, -{54,44,26}, -{54,44,27}, -{54,44,28}, -{54,44,29}, -{54,44,30}, -{54,44,31}, -{54,44,32}, -{54,44,33}, -{54,44,34}, -{54,44,35}, -{54,44,36}, -{54,44,37}, -{54,44,38}, -{54,44,39}, -{54,44,40}, -{54,44,41}, -{54,44,42}, -{54,44,43}, -{54,44,44}, -{54,44,45}, -{54,44,46}, -{54,44,47}, -{54,44,48}, -{54,44,49}, -{54,44,50}, -{54,44,51}, -{54,44,52}, -{54,44,53}, -{54,44,54}, -{54,44,55}, -{54,44,56}, -{54,44,57}, -{54,44,58}, -{54,44,59}, -{54,44,60}, -{54,44,61}, -{54,44,62}, -{54,44,63}, -{54,45,-72}, -{54,45,-71}, -{54,45,-70}, -{54,45,-69}, -{54,45,-68}, -{54,45,-67}, -{54,45,-66}, -{54,45,-65}, -{54,45,-64}, -{54,45,-63}, -{54,45,-62}, -{54,45,-61}, -{54,45,-60}, -{54,45,-59}, -{54,45,-58}, -{54,45,-57}, -{54,45,-56}, -{54,45,-55}, -{54,45,-54}, -{54,45,-53}, -{54,45,-52}, -{54,45,-51}, -{54,45,-50}, -{54,45,-49}, -{54,45,-48}, -{54,45,-47}, -{54,45,-46}, -{54,45,-45}, -{54,45,-44}, -{54,45,-43}, -{54,45,-42}, -{54,45,-41}, -{54,45,-40}, -{54,45,-39}, -{54,45,-38}, -{54,45,-37}, -{54,45,-36}, -{54,45,-35}, -{54,45,-34}, -{54,45,-33}, -{54,45,-32}, -{54,45,-31}, -{54,45,-30}, -{54,45,-29}, -{54,45,-28}, -{54,45,-27}, -{54,45,-26}, -{54,45,-25}, -{54,45,-24}, -{54,45,-23}, -{54,45,-22}, -{54,45,-21}, -{54,45,-20}, -{54,45,-19}, -{54,45,-18}, -{54,45,-17}, -{54,45,-16}, -{54,45,-15}, -{54,45,-14}, -{54,45,-13}, -{54,45,-12}, -{54,45,-11}, -{54,45,-10}, -{54,45,-9}, -{54,45,-8}, -{54,45,-7}, -{54,45,-6}, -{54,45,-5}, -{54,45,-4}, -{54,45,-3}, -{54,45,-2}, -{54,45,-1}, -{54,45,0}, -{54,45,1}, -{54,45,2}, -{54,45,3}, -{54,45,4}, -{54,45,5}, -{54,45,6}, -{54,45,7}, -{54,45,8}, -{54,45,9}, -{54,45,10}, -{54,45,11}, -{54,45,12}, -{54,45,13}, -{54,45,14}, -{54,45,15}, -{54,45,16}, -{54,45,17}, -{54,45,18}, -{54,45,19}, -{54,45,20}, -{54,45,21}, -{54,45,22}, -{54,45,23}, -{54,45,24}, -{54,45,25}, -{54,45,26}, -{54,45,27}, -{54,45,28}, -{54,45,29}, -{54,45,30}, -{54,45,31}, -{54,45,32}, -{54,45,33}, -{54,45,34}, -{54,45,35}, -{54,45,36}, -{54,45,37}, -{54,45,38}, -{54,45,39}, -{54,45,40}, -{54,45,41}, -{54,45,42}, -{54,45,43}, -{54,45,44}, -{54,45,45}, -{54,45,46}, -{54,45,47}, -{54,45,48}, -{54,45,49}, -{54,45,50}, -{54,45,51}, -{54,45,52}, -{54,45,53}, -{54,45,54}, -{54,45,55}, -{54,45,56}, -{54,45,57}, -{54,45,58}, -{54,45,59}, -{54,45,60}, -{54,45,61}, -{54,45,62}, -{54,45,63}, -{54,46,-72}, -{54,46,-71}, -{54,46,-70}, -{54,46,-69}, -{54,46,-68}, -{54,46,-67}, -{54,46,-66}, -{54,46,-65}, -{54,46,-64}, -{54,46,-63}, -{54,46,-62}, -{54,46,-61}, -{54,46,-60}, -{54,46,-59}, -{54,46,-58}, -{54,46,-57}, -{54,46,-56}, -{54,46,-55}, -{54,46,-54}, -{54,46,-53}, -{54,46,-52}, -{54,46,-51}, -{54,46,-50}, -{54,46,-49}, -{54,46,-48}, -{54,46,-47}, -{54,46,-46}, -{54,46,-45}, -{54,46,-44}, -{54,46,-43}, -{54,46,-42}, -{54,46,-41}, -{54,46,-40}, -{54,46,-39}, -{54,46,-38}, -{54,46,-37}, -{54,46,-36}, -{54,46,-35}, -{54,46,-34}, -{54,46,-33}, -{54,46,-32}, -{54,46,-31}, -{54,46,-30}, -{54,46,-29}, -{54,46,-28}, -{54,46,-27}, -{54,46,-26}, -{54,46,-25}, -{54,46,-24}, -{54,46,-23}, -{54,46,-22}, -{54,46,-21}, -{54,46,-20}, -{54,46,-19}, -{54,46,-18}, -{54,46,-17}, -{54,46,-16}, -{54,46,-15}, -{54,46,-14}, -{54,46,-13}, -{54,46,-12}, -{54,46,-11}, -{54,46,-10}, -{54,46,-9}, -{54,46,-8}, -{54,46,-7}, -{54,46,-6}, -{54,46,-5}, -{54,46,-4}, -{54,46,-3}, -{54,46,-2}, -{54,46,-1}, -{54,46,0}, -{54,46,1}, -{54,46,2}, -{54,46,3}, -{54,46,4}, -{54,46,5}, -{54,46,6}, -{54,46,7}, -{54,46,8}, -{54,46,9}, -{54,46,10}, -{54,46,11}, -{54,46,12}, -{54,46,13}, -{54,46,14}, -{54,46,15}, -{54,46,16}, -{54,46,17}, -{54,46,18}, -{54,46,19}, -{54,46,20}, -{54,46,21}, -{54,46,22}, -{54,46,23}, -{54,46,24}, -{54,46,25}, -{54,46,26}, -{54,46,27}, -{54,46,28}, -{54,46,29}, -{54,46,30}, -{54,46,31}, -{54,46,32}, -{54,46,33}, -{54,46,34}, -{54,46,35}, -{54,46,36}, -{54,46,37}, -{54,46,38}, -{54,46,39}, -{54,46,40}, -{54,46,41}, -{54,46,42}, -{54,46,43}, -{54,46,44}, -{54,46,45}, -{54,46,46}, -{54,46,47}, -{54,46,48}, -{54,46,49}, -{54,46,50}, -{54,46,51}, -{54,46,52}, -{54,46,53}, -{54,46,54}, -{54,46,55}, -{54,46,56}, -{54,46,57}, -{54,46,58}, -{54,46,59}, -{54,46,60}, -{54,46,61}, -{54,46,62}, -{54,46,63}, -{54,47,-71}, -{54,47,-70}, -{54,47,-69}, -{54,47,-68}, -{54,47,-67}, -{54,47,-66}, -{54,47,-65}, -{54,47,-64}, -{54,47,-63}, -{54,47,-62}, -{54,47,-61}, -{54,47,-60}, -{54,47,-59}, -{54,47,-58}, -{54,47,-57}, -{54,47,-56}, -{54,47,-55}, -{54,47,-54}, -{54,47,-53}, -{54,47,-52}, -{54,47,-51}, -{54,47,-50}, -{54,47,-49}, -{54,47,-48}, -{54,47,-47}, -{54,47,-46}, -{54,47,-45}, -{54,47,-44}, -{54,47,-43}, -{54,47,-42}, -{54,47,-41}, -{54,47,-40}, -{54,47,-39}, -{54,47,-38}, -{54,47,-37}, -{54,47,-36}, -{54,47,-35}, -{54,47,-34}, -{54,47,-33}, -{54,47,-32}, -{54,47,-31}, -{54,47,-30}, -{54,47,-29}, -{54,47,-28}, -{54,47,-27}, -{54,47,-26}, -{54,47,-25}, -{54,47,-24}, -{54,47,-23}, -{54,47,-22}, -{54,47,-21}, -{54,47,-20}, -{54,47,-19}, -{54,47,-18}, -{54,47,-17}, -{54,47,-16}, -{54,47,-15}, -{54,47,-14}, -{54,47,-13}, -{54,47,-12}, -{54,47,-11}, -{54,47,-10}, -{54,47,-9}, -{54,47,-8}, -{54,47,-7}, -{54,47,-6}, -{54,47,-5}, -{54,47,-4}, -{54,47,-3}, -{54,47,-2}, -{54,47,-1}, -{54,47,0}, -{54,47,1}, -{54,47,2}, -{54,47,3}, -{54,47,4}, -{54,47,5}, -{54,47,6}, -{54,47,7}, -{54,47,8}, -{54,47,9}, -{54,47,10}, -{54,47,11}, -{54,47,12}, -{54,47,13}, -{54,47,14}, -{54,47,15}, -{54,47,16}, -{54,47,17}, -{54,47,18}, -{54,47,19}, -{54,47,20}, -{54,47,21}, -{54,47,22}, -{54,47,23}, -{54,47,24}, -{54,47,25}, -{54,47,26}, -{54,47,27}, -{54,47,28}, -{54,47,29}, -{54,47,30}, -{54,47,31}, -{54,47,32}, -{54,47,33}, -{54,47,34}, -{54,47,35}, -{54,47,36}, -{54,47,37}, -{54,47,38}, -{54,47,39}, -{54,47,40}, -{54,47,41}, -{54,47,42}, -{54,47,43}, -{54,47,44}, -{54,47,45}, -{54,47,46}, -{54,47,47}, -{54,47,48}, -{54,47,49}, -{54,47,50}, -{54,47,51}, -{54,47,52}, -{54,47,53}, -{54,47,54}, -{54,47,55}, -{54,47,56}, -{54,47,57}, -{54,47,58}, -{54,47,59}, -{54,47,60}, -{54,47,61}, -{54,47,62}, -{54,47,63}, -{54,48,-71}, -{54,48,-70}, -{54,48,-69}, -{54,48,-68}, -{54,48,-67}, -{54,48,-66}, -{54,48,-65}, -{54,48,-64}, -{54,48,-63}, -{54,48,-62}, -{54,48,-61}, -{54,48,-60}, -{54,48,-59}, -{54,48,-58}, -{54,48,-57}, -{54,48,-56}, -{54,48,-55}, -{54,48,-54}, -{54,48,-53}, -{54,48,-52}, -{54,48,-51}, -{54,48,-50}, -{54,48,-49}, -{54,48,-48}, -{54,48,-47}, -{54,48,-46}, -{54,48,-45}, -{54,48,-44}, -{54,48,-43}, -{54,48,-42}, -{54,48,-41}, -{54,48,-40}, -{54,48,-39}, -{54,48,-38}, -{54,48,-37}, -{54,48,-36}, -{54,48,-35}, -{54,48,-34}, -{54,48,-33}, -{54,48,-32}, -{54,48,-31}, -{54,48,-30}, -{54,48,-29}, -{54,48,-28}, -{54,48,-27}, -{54,48,-26}, -{54,48,-25}, -{54,48,-24}, -{54,48,-23}, -{54,48,-22}, -{54,48,-21}, -{54,48,-20}, -{54,48,-19}, -{54,48,-18}, -{54,48,-17}, -{54,48,-16}, -{54,48,-15}, -{54,48,-14}, -{54,48,-13}, -{54,48,-12}, -{54,48,-11}, -{54,48,-10}, -{54,48,-9}, -{54,48,-8}, -{54,48,-7}, -{54,48,-6}, -{54,48,-5}, -{54,48,-4}, -{54,48,-3}, -{54,48,-2}, -{54,48,-1}, -{54,48,0}, -{54,48,1}, -{54,48,2}, -{54,48,3}, -{54,48,4}, -{54,48,5}, -{54,48,6}, -{54,48,7}, -{54,48,8}, -{54,48,9}, -{54,48,10}, -{54,48,11}, -{54,48,12}, -{54,48,13}, -{54,48,14}, -{54,48,15}, -{54,48,16}, -{54,48,17}, -{54,48,18}, -{54,48,19}, -{54,48,20}, -{54,48,21}, -{54,48,22}, -{54,48,23}, -{54,48,24}, -{54,48,25}, -{54,48,26}, -{54,48,27}, -{54,48,28}, -{54,48,29}, -{54,48,30}, -{54,48,31}, -{54,48,32}, -{54,48,33}, -{54,48,34}, -{54,48,35}, -{54,48,36}, -{54,48,37}, -{54,48,38}, -{54,48,39}, -{54,48,40}, -{54,48,41}, -{54,48,42}, -{54,48,43}, -{54,48,44}, -{54,48,45}, -{54,48,46}, -{54,48,47}, -{54,48,48}, -{54,48,49}, -{54,48,50}, -{54,48,51}, -{54,48,52}, -{54,48,53}, -{54,48,54}, -{54,48,55}, -{54,48,56}, -{54,48,57}, -{54,48,58}, -{54,48,59}, -{54,48,60}, -{54,48,61}, -{54,48,62}, -{54,48,63}, -{54,49,-71}, -{54,49,-70}, -{54,49,-69}, -{54,49,-68}, -{54,49,-67}, -{54,49,-66}, -{54,49,-65}, -{54,49,-64}, -{54,49,-63}, -{54,49,-62}, -{54,49,-61}, -{54,49,-60}, -{54,49,-59}, -{54,49,-58}, -{54,49,-57}, -{54,49,-56}, -{54,49,-55}, -{54,49,-54}, -{54,49,-53}, -{54,49,-52}, -{54,49,-51}, -{54,49,-50}, -{54,49,-49}, -{54,49,-48}, -{54,49,-47}, -{54,49,-46}, -{54,49,-45}, -{54,49,-44}, -{54,49,-43}, -{54,49,-42}, -{54,49,-41}, -{54,49,-40}, -{54,49,-39}, -{54,49,-38}, -{54,49,-37}, -{54,49,-36}, -{54,49,-35}, -{54,49,-34}, -{54,49,-33}, -{54,49,-32}, -{54,49,-31}, -{54,49,-30}, -{54,49,-29}, -{54,49,-28}, -{54,49,-27}, -{54,49,-26}, -{54,49,-25}, -{54,49,-24}, -{54,49,-23}, -{54,49,-22}, -{54,49,-21}, -{54,49,-20}, -{54,49,-19}, -{54,49,-18}, -{54,49,-17}, -{54,49,-16}, -{54,49,-15}, -{54,49,-14}, -{54,49,-13}, -{54,49,-12}, -{54,49,-11}, -{54,49,-10}, -{54,49,-9}, -{54,49,-8}, -{54,49,-7}, -{54,49,-6}, -{54,49,-5}, -{54,49,-4}, -{54,49,-3}, -{54,49,-2}, -{54,49,-1}, -{54,49,0}, -{54,49,1}, -{54,49,2}, -{54,49,3}, -{54,49,4}, -{54,49,5}, -{54,49,6}, -{54,49,7}, -{54,49,8}, -{54,49,9}, -{54,49,10}, -{54,49,11}, -{54,49,12}, -{54,49,13}, -{54,49,14}, -{54,49,15}, -{54,49,16}, -{54,49,17}, -{54,49,18}, -{54,49,19}, -{54,49,20}, -{54,49,21}, -{54,49,22}, -{54,49,23}, -{54,49,24}, -{54,49,25}, -{54,49,26}, -{54,49,27}, -{54,49,28}, -{54,49,29}, -{54,49,30}, -{54,49,31}, -{54,49,32}, -{54,49,33}, -{54,49,34}, -{54,49,35}, -{54,49,36}, -{54,49,37}, -{54,49,38}, -{54,49,39}, -{54,49,40}, -{54,49,41}, -{54,49,42}, -{54,49,43}, -{54,49,44}, -{54,49,45}, -{54,49,46}, -{54,49,47}, -{54,49,48}, -{54,49,49}, -{54,49,50}, -{54,49,51}, -{54,49,52}, -{54,49,53}, -{54,49,54}, -{54,49,55}, -{54,49,56}, -{54,49,57}, -{54,49,58}, -{54,49,59}, -{54,49,60}, -{54,49,61}, -{54,49,62}, -{54,49,63}, -{54,50,-71}, -{54,50,-70}, -{54,50,-69}, -{54,50,-68}, -{54,50,-67}, -{54,50,-66}, -{54,50,-65}, -{54,50,-64}, -{54,50,-63}, -{54,50,-62}, -{54,50,-61}, -{54,50,-60}, -{54,50,-59}, -{54,50,-58}, -{54,50,-57}, -{54,50,-56}, -{54,50,-55}, -{54,50,-54}, -{54,50,-53}, -{54,50,-52}, -{54,50,-51}, -{54,50,-50}, -{54,50,-49}, -{54,50,-48}, -{54,50,-47}, -{54,50,-46}, -{54,50,-45}, -{54,50,-44}, -{54,50,-43}, -{54,50,-42}, -{54,50,-41}, -{54,50,-40}, -{54,50,-39}, -{54,50,-38}, -{54,50,-37}, -{54,50,-36}, -{54,50,-35}, -{54,50,-34}, -{54,50,-33}, -{54,50,-32}, -{54,50,-31}, -{54,50,-30}, -{54,50,-29}, -{54,50,-28}, -{54,50,-27}, -{54,50,-26}, -{54,50,-25}, -{54,50,-24}, -{54,50,-23}, -{54,50,-22}, -{54,50,-21}, -{54,50,-20}, -{54,50,-19}, -{54,50,-18}, -{54,50,-17}, -{54,50,-16}, -{54,50,-15}, -{54,50,-14}, -{54,50,-13}, -{54,50,-12}, -{54,50,-11}, -{54,50,-10}, -{54,50,-9}, -{54,50,-8}, -{54,50,-7}, -{54,50,-6}, -{54,50,-5}, -{54,50,-4}, -{54,50,-3}, -{54,50,-2}, -{54,50,-1}, -{54,50,0}, -{54,50,1}, -{54,50,2}, -{54,50,3}, -{54,50,4}, -{54,50,5}, -{54,50,6}, -{54,50,7}, -{54,50,8}, -{54,50,9}, -{54,50,10}, -{54,50,11}, -{54,50,12}, -{54,50,13}, -{54,50,14}, -{54,50,15}, -{54,50,16}, -{54,50,17}, -{54,50,18}, -{54,50,19}, -{54,50,20}, -{54,50,21}, -{54,50,22}, -{54,50,23}, -{54,50,24}, -{54,50,25}, -{54,50,26}, -{54,50,27}, -{54,50,28}, -{54,50,29}, -{54,50,30}, -{54,50,31}, -{54,50,32}, -{54,50,33}, -{54,50,34}, -{54,50,35}, -{54,50,36}, -{54,50,37}, -{54,50,38}, -{54,50,39}, -{54,50,40}, -{54,50,41}, -{54,50,42}, -{54,50,43}, -{54,50,44}, -{54,50,45}, -{54,50,46}, -{54,50,47}, -{54,50,48}, -{54,50,49}, -{54,50,50}, -{54,50,51}, -{54,50,52}, -{54,50,53}, -{54,50,54}, -{54,50,55}, -{54,50,56}, -{54,50,57}, -{54,50,58}, -{54,50,59}, -{54,50,60}, -{54,50,61}, -{54,50,62}, -{54,50,63}, -{54,50,64}, -{54,51,-71}, -{54,51,-70}, -{54,51,-69}, -{54,51,-68}, -{54,51,-67}, -{54,51,-66}, -{54,51,-65}, -{54,51,-64}, -{54,51,-63}, -{54,51,-62}, -{54,51,-61}, -{54,51,-60}, -{54,51,-59}, -{54,51,-58}, -{54,51,-57}, -{54,51,-56}, -{54,51,-55}, -{54,51,-54}, -{54,51,-53}, -{54,51,-52}, -{54,51,-51}, -{54,51,-50}, -{54,51,-49}, -{54,51,-48}, -{54,51,-47}, -{54,51,-46}, -{54,51,-45}, -{54,51,-44}, -{54,51,-43}, -{54,51,-42}, -{54,51,-41}, -{54,51,-40}, -{54,51,-39}, -{54,51,-38}, -{54,51,-37}, -{54,51,-36}, -{54,51,-35}, -{54,51,-34}, -{54,51,-33}, -{54,51,-32}, -{54,51,-31}, -{54,51,-30}, -{54,51,-29}, -{54,51,-28}, -{54,51,-27}, -{54,51,-26}, -{54,51,-25}, -{54,51,-24}, -{54,51,-23}, -{54,51,-22}, -{54,51,-21}, -{54,51,-20}, -{54,51,-19}, -{54,51,-18}, -{54,51,-17}, -{54,51,-16}, -{54,51,-15}, -{54,51,-14}, -{54,51,-13}, -{54,51,-12}, -{54,51,-11}, -{54,51,-10}, -{54,51,-9}, -{54,51,-8}, -{54,51,-7}, -{54,51,-6}, -{54,51,-5}, -{54,51,-4}, -{54,51,-3}, -{54,51,-2}, -{54,51,-1}, -{54,51,0}, -{54,51,1}, -{54,51,2}, -{54,51,3}, -{54,51,4}, -{54,51,5}, -{54,51,6}, -{54,51,7}, -{54,51,8}, -{54,51,9}, -{54,51,10}, -{54,51,11}, -{54,51,12}, -{54,51,13}, -{54,51,14}, -{54,51,15}, -{54,51,16}, -{54,51,17}, -{54,51,18}, -{54,51,19}, -{54,51,20}, -{54,51,21}, -{54,51,22}, -{54,51,23}, -{54,51,24}, -{54,51,25}, -{54,51,26}, -{54,51,27}, -{54,51,28}, -{54,51,29}, -{54,51,30}, -{54,51,31}, -{54,51,32}, -{54,51,33}, -{54,51,34}, -{54,51,35}, -{54,51,36}, -{54,51,37}, -{54,51,38}, -{54,51,39}, -{54,51,40}, -{54,51,41}, -{54,51,42}, -{54,51,43}, -{54,51,44}, -{54,51,45}, -{54,51,46}, -{54,51,47}, -{54,51,48}, -{54,51,49}, -{54,51,50}, -{54,51,51}, -{54,51,52}, -{54,51,53}, -{54,51,54}, -{54,51,55}, -{54,51,56}, -{54,51,57}, -{54,51,58}, -{54,51,59}, -{54,51,60}, -{54,51,61}, -{54,51,62}, -{54,51,63}, -{54,51,64}, -{54,52,-71}, -{54,52,-70}, -{54,52,-69}, -{54,52,-68}, -{54,52,-67}, -{54,52,-66}, -{54,52,-65}, -{54,52,-64}, -{54,52,-63}, -{54,52,-62}, -{54,52,-61}, -{54,52,-60}, -{54,52,-59}, -{54,52,-58}, -{54,52,-57}, -{54,52,-56}, -{54,52,-55}, -{54,52,-54}, -{54,52,-53}, -{54,52,-52}, -{54,52,-51}, -{54,52,-50}, -{54,52,-49}, -{54,52,-48}, -{54,52,-47}, -{54,52,-46}, -{54,52,-45}, -{54,52,-44}, -{54,52,-43}, -{54,52,-42}, -{54,52,-41}, -{54,52,-40}, -{54,52,-39}, -{54,52,-38}, -{54,52,-37}, -{54,52,-36}, -{54,52,-35}, -{54,52,-34}, -{54,52,-33}, -{54,52,-32}, -{54,52,-31}, -{54,52,-30}, -{54,52,-29}, -{54,52,-28}, -{54,52,-27}, -{54,52,-26}, -{54,52,-25}, -{54,52,-24}, -{54,52,-23}, -{54,52,-22}, -{54,52,-21}, -{54,52,-20}, -{54,52,-19}, -{54,52,-18}, -{54,52,-17}, -{54,52,-16}, -{54,52,-15}, -{54,52,-14}, -{54,52,-13}, -{54,52,-12}, -{54,52,-11}, -{54,52,-10}, -{54,52,-9}, -{54,52,-8}, -{54,52,-7}, -{54,52,-6}, -{54,52,-5}, -{54,52,-4}, -{54,52,-3}, -{54,52,-2}, -{54,52,-1}, -{54,52,0}, -{54,52,1}, -{54,52,2}, -{54,52,3}, -{54,52,4}, -{54,52,5}, -{54,52,6}, -{54,52,7}, -{54,52,8}, -{54,52,9}, -{54,52,10}, -{54,52,11}, -{54,52,12}, -{54,52,13}, -{54,52,14}, -{54,52,15}, -{54,52,16}, -{54,52,17}, -{54,52,18}, -{54,52,19}, -{54,52,20}, -{54,52,21}, -{54,52,22}, -{54,52,23}, -{54,52,24}, -{54,52,25}, -{54,52,26}, -{54,52,27}, -{54,52,28}, -{54,52,29}, -{54,52,30}, -{54,52,31}, -{54,52,32}, -{54,52,33}, -{54,52,34}, -{54,52,35}, -{54,52,36}, -{54,52,37}, -{54,52,38}, -{54,52,39}, -{54,52,40}, -{54,52,41}, -{54,52,42}, -{54,52,43}, -{54,52,44}, -{54,52,45}, -{54,52,46}, -{54,52,47}, -{54,52,48}, -{54,52,49}, -{54,52,50}, -{54,52,51}, -{54,52,52}, -{54,52,53}, -{54,52,54}, -{54,52,55}, -{54,52,56}, -{54,52,57}, -{54,52,58}, -{54,52,59}, -{54,52,60}, -{54,52,61}, -{54,52,62}, -{54,52,63}, -{54,52,64}, -{54,53,-71}, -{54,53,-70}, -{54,53,-69}, -{54,53,-68}, -{54,53,-67}, -{54,53,-66}, -{54,53,-65}, -{54,53,-64}, -{54,53,-63}, -{54,53,-62}, -{54,53,-61}, -{54,53,-60}, -{54,53,-59}, -{54,53,-58}, -{54,53,-57}, -{54,53,-56}, -{54,53,-55}, -{54,53,-54}, -{54,53,-53}, -{54,53,-52}, -{54,53,-51}, -{54,53,-50}, -{54,53,-49}, -{54,53,-48}, -{54,53,-47}, -{54,53,-46}, -{54,53,-45}, -{54,53,-44}, -{54,53,-43}, -{54,53,-42}, -{54,53,-41}, -{54,53,-40}, -{54,53,-39}, -{54,53,-38}, -{54,53,-37}, -{54,53,-36}, -{54,53,-35}, -{54,53,-34}, -{54,53,-33}, -{54,53,-32}, -{54,53,-31}, -{54,53,-30}, -{54,53,-29}, -{54,53,-28}, -{54,53,-27}, -{54,53,-26}, -{54,53,-25}, -{54,53,-24}, -{54,53,-23}, -{54,53,-22}, -{54,53,-21}, -{54,53,-20}, -{54,53,-19}, -{54,53,-18}, -{54,53,-17}, -{54,53,-16}, -{54,53,-15}, -{54,53,-14}, -{54,53,-13}, -{54,53,-12}, -{54,53,-11}, -{54,53,-10}, -{54,53,-9}, -{54,53,-8}, -{54,53,-7}, -{54,53,-6}, -{54,53,-5}, -{54,53,-4}, -{54,53,-3}, -{54,53,-2}, -{54,53,-1}, -{54,53,0}, -{54,53,1}, -{54,53,2}, -{54,53,3}, -{54,53,4}, -{54,53,5}, -{54,53,6}, -{54,53,7}, -{54,53,8}, -{54,53,9}, -{54,53,10}, -{54,53,11}, -{54,53,12}, -{54,53,13}, -{54,53,14}, -{54,53,15}, -{54,53,16}, -{54,53,17}, -{54,53,18}, -{54,53,19}, -{54,53,20}, -{54,53,21}, -{54,53,22}, -{54,53,23}, -{54,53,24}, -{54,53,25}, -{54,53,26}, -{54,53,27}, -{54,53,28}, -{54,53,29}, -{54,53,30}, -{54,53,31}, -{54,53,32}, -{54,53,33}, -{54,53,34}, -{54,53,35}, -{54,53,36}, -{54,53,37}, -{54,53,38}, -{54,53,39}, -{54,53,40}, -{54,53,41}, -{54,53,42}, -{54,53,43}, -{54,53,44}, -{54,53,45}, -{54,53,46}, -{54,53,47}, -{54,53,48}, -{54,53,49}, -{54,53,50}, -{54,53,51}, -{54,53,52}, -{54,53,53}, -{54,53,54}, -{54,53,55}, -{54,53,56}, -{54,53,57}, -{54,53,58}, -{54,53,59}, -{54,53,60}, -{54,53,61}, -{54,53,62}, -{54,53,63}, -{54,53,64}, -{54,54,-71}, -{54,54,-70}, -{54,54,-69}, -{54,54,-68}, -{54,54,-67}, -{54,54,-66}, -{54,54,-65}, -{54,54,-64}, -{54,54,-63}, -{54,54,-62}, -{54,54,-61}, -{54,54,-60}, -{54,54,-59}, -{54,54,-58}, -{54,54,-57}, -{54,54,-56}, -{54,54,-55}, -{54,54,-54}, -{54,54,-53}, -{54,54,-52}, -{54,54,-51}, -{54,54,-50}, -{54,54,-49}, -{54,54,-48}, -{54,54,-47}, -{54,54,-46}, -{54,54,-45}, -{54,54,-44}, -{54,54,-43}, -{54,54,-42}, -{54,54,-41}, -{54,54,-40}, -{54,54,-39}, -{54,54,-38}, -{54,54,-37}, -{54,54,-36}, -{54,54,-35}, -{54,54,-34}, -{54,54,-33}, -{54,54,-32}, -{54,54,-31}, -{54,54,-30}, -{54,54,-29}, -{54,54,-28}, -{54,54,-27}, -{54,54,-26}, -{54,54,-25}, -{54,54,-24}, -{54,54,-23}, -{54,54,-22}, -{54,54,-21}, -{54,54,-20}, -{54,54,-19}, -{54,54,-18}, -{54,54,-17}, -{54,54,-16}, -{54,54,-15}, -{54,54,-14}, -{54,54,-13}, -{54,54,-12}, -{54,54,-11}, -{54,54,-10}, -{54,54,-9}, -{54,54,-8}, -{54,54,-7}, -{54,54,-6}, -{54,54,-5}, -{54,54,-4}, -{54,54,-3}, -{54,54,-2}, -{54,54,-1}, -{54,54,0}, -{54,54,1}, -{54,54,2}, -{54,54,3}, -{54,54,4}, -{54,54,5}, -{54,54,6}, -{54,54,7}, -{54,54,8}, -{54,54,9}, -{54,54,10}, -{54,54,11}, -{54,54,12}, -{54,54,13}, -{54,54,14}, -{54,54,15}, -{54,54,16}, -{54,54,17}, -{54,54,18}, -{54,54,19}, -{54,54,20}, -{54,54,21}, -{54,54,22}, -{54,54,23}, -{54,54,24}, -{54,54,25}, -{54,54,26}, -{54,54,27}, -{54,54,28}, -{54,54,29}, -{54,54,30}, -{54,54,31}, -{54,54,32}, -{54,54,33}, -{54,54,34}, -{54,54,35}, -{54,54,36}, -{54,54,37}, -{54,54,38}, -{54,54,39}, -{54,54,40}, -{54,54,41}, -{54,54,42}, -{54,54,43}, -{54,54,44}, -{54,54,45}, -{54,54,46}, -{54,54,47}, -{54,54,48}, -{54,54,49}, -{54,54,50}, -{54,54,51}, -{54,54,52}, -{54,54,53}, -{54,54,54}, -{54,54,55}, -{54,54,56}, -{54,54,57}, -{54,54,58}, -{54,54,59}, -{54,54,60}, -{54,54,61}, -{54,54,62}, -{54,54,63}, -{54,54,64}, -{54,55,-71}, -{54,55,-70}, -{54,55,-69}, -{54,55,-68}, -{54,55,-67}, -{54,55,-66}, -{54,55,-65}, -{54,55,-64}, -{54,55,-63}, -{54,55,-62}, -{54,55,-61}, -{54,55,-60}, -{54,55,-59}, -{54,55,-58}, -{54,55,-57}, -{54,55,-56}, -{54,55,-55}, -{54,55,-54}, -{54,55,-53}, -{54,55,-52}, -{54,55,-51}, -{54,55,-50}, -{54,55,-49}, -{54,55,-48}, -{54,55,-47}, -{54,55,-46}, -{54,55,-45}, -{54,55,-44}, -{54,55,-43}, -{54,55,-42}, -{54,55,-41}, -{54,55,-40}, -{54,55,-39}, -{54,55,-38}, -{54,55,-37}, -{54,55,-36}, -{54,55,-35}, -{54,55,-34}, -{54,55,-33}, -{54,55,-32}, -{54,55,-31}, -{54,55,-30}, -{54,55,-29}, -{54,55,-28}, -{54,55,-27}, -{54,55,-26}, -{54,55,-25}, -{54,55,-24}, -{54,55,-23}, -{54,55,-22}, -{54,55,-21}, -{54,55,-20}, -{54,55,-19}, -{54,55,-18}, -{54,55,-17}, -{54,55,-16}, -{54,55,-15}, -{54,55,-14}, -{54,55,-13}, -{54,55,-12}, -{54,55,-11}, -{54,55,-10}, -{54,55,-9}, -{54,55,-8}, -{54,55,-7}, -{54,55,-6}, -{54,55,-5}, -{54,55,-4}, -{54,55,-3}, -{54,55,-2}, -{54,55,-1}, -{54,55,0}, -{54,55,1}, -{54,55,2}, -{54,55,3}, -{54,55,4}, -{54,55,5}, -{54,55,6}, -{54,55,7}, -{54,55,8}, -{54,55,9}, -{54,55,10}, -{54,55,11}, -{54,55,12}, -{54,55,13}, -{54,55,14}, -{54,55,15}, -{54,55,16}, -{54,55,17}, -{54,55,18}, -{54,55,19}, -{54,55,20}, -{54,55,21}, -{54,55,22}, -{54,55,23}, -{54,55,24}, -{54,55,25}, -{54,55,26}, -{54,55,27}, -{54,55,28}, -{54,55,29}, -{54,55,30}, -{54,55,31}, -{54,55,32}, -{54,55,33}, -{54,55,34}, -{54,55,35}, -{54,55,36}, -{54,55,37}, -{54,55,38}, -{54,55,39}, -{54,55,40}, -{54,55,41}, -{54,55,42}, -{54,55,43}, -{54,55,44}, -{54,55,45}, -{54,55,46}, -{54,55,47}, -{54,55,48}, -{54,55,49}, -{54,55,50}, -{54,55,51}, -{54,55,52}, -{54,55,53}, -{54,55,54}, -{54,55,55}, -{54,55,56}, -{54,55,57}, -{54,55,58}, -{54,55,59}, -{54,55,60}, -{54,55,61}, -{54,55,62}, -{54,55,63}, -{54,55,64}, -{54,56,-71}, -{54,56,-70}, -{54,56,-69}, -{54,56,-68}, -{54,56,-67}, -{54,56,-66}, -{54,56,-65}, -{54,56,-64}, -{54,56,-63}, -{54,56,-62}, -{54,56,-61}, -{54,56,-60}, -{54,56,-59}, -{54,56,-58}, -{54,56,-57}, -{54,56,-56}, -{54,56,-55}, -{54,56,-54}, -{54,56,-53}, -{54,56,-52}, -{54,56,-51}, -{54,56,-50}, -{54,56,-49}, -{54,56,-48}, -{54,56,-47}, -{54,56,-46}, -{54,56,-45}, -{54,56,-44}, -{54,56,-43}, -{54,56,-42}, -{54,56,-41}, -{54,56,-40}, -{54,56,-39}, -{54,56,-38}, -{54,56,-37}, -{54,56,-36}, -{54,56,-35}, -{54,56,-34}, -{54,56,-33}, -{54,56,-32}, -{54,56,-31}, -{54,56,-30}, -{54,56,-29}, -{54,56,-28}, -{54,56,-27}, -{54,56,-26}, -{54,56,-25}, -{54,56,-24}, -{54,56,-23}, -{54,56,-22}, -{54,56,-21}, -{54,56,-20}, -{54,56,-19}, -{54,56,-18}, -{54,56,-17}, -{54,56,-16}, -{54,56,-15}, -{54,56,-14}, -{54,56,-13}, -{54,56,-12}, -{54,56,-11}, -{54,56,-10}, -{54,56,-9}, -{54,56,-8}, -{54,56,-7}, -{54,56,-6}, -{54,56,-5}, -{54,56,-4}, -{54,56,-3}, -{54,56,-2}, -{54,56,-1}, -{54,56,0}, -{54,56,1}, -{54,56,2}, -{54,56,3}, -{54,56,4}, -{54,56,5}, -{54,56,6}, -{54,56,7}, -{54,56,8}, -{54,56,9}, -{54,56,10}, -{54,56,11}, -{54,56,12}, -{54,56,13}, -{54,56,14}, -{54,56,15}, -{54,56,16}, -{54,56,17}, -{54,56,18}, -{54,56,19}, -{54,56,20}, -{54,56,21}, -{54,56,22}, -{54,56,23}, -{54,56,24}, -{54,56,25}, -{54,56,26}, -{54,56,27}, -{54,56,28}, -{54,56,29}, -{54,56,30}, -{54,56,31}, -{54,56,32}, -{54,56,33}, -{54,56,34}, -{54,56,35}, -{54,56,36}, -{54,56,37}, -{54,56,38}, -{54,56,39}, -{54,56,40}, -{54,56,41}, -{54,56,42}, -{54,56,43}, -{54,56,44}, -{54,56,45}, -{54,56,46}, -{54,56,47}, -{54,56,48}, -{54,56,49}, -{54,56,50}, -{54,56,51}, -{54,56,52}, -{54,56,53}, -{54,56,54}, -{54,56,55}, -{54,56,56}, -{54,56,57}, -{54,56,58}, -{54,56,59}, -{54,56,60}, -{54,56,61}, -{54,56,62}, -{54,56,63}, -{54,56,64}, -{54,57,-71}, -{54,57,-70}, -{54,57,-69}, -{54,57,-68}, -{54,57,-67}, -{54,57,-66}, -{54,57,-65}, -{54,57,-64}, -{54,57,-63}, -{54,57,-62}, -{54,57,-61}, -{54,57,-60}, -{54,57,-59}, -{54,57,-58}, -{54,57,-57}, -{54,57,-56}, -{54,57,-55}, -{54,57,-54}, -{54,57,-53}, -{54,57,-52}, -{54,57,-51}, -{54,57,-50}, -{54,57,-49}, -{54,57,-48}, -{54,57,-47}, -{54,57,-46}, -{54,57,-45}, -{54,57,-44}, -{54,57,-43}, -{54,57,-42}, -{54,57,-41}, -{54,57,-40}, -{54,57,-39}, -{54,57,-38}, -{54,57,-37}, -{54,57,-36}, -{54,57,-35}, -{54,57,-34}, -{54,57,-33}, -{54,57,-32}, -{54,57,-31}, -{54,57,-30}, -{54,57,-29}, -{54,57,-28}, -{54,57,-27}, -{54,57,-26}, -{54,57,-25}, -{54,57,-24}, -{54,57,-23}, -{54,57,-22}, -{54,57,-21}, -{54,57,-20}, -{54,57,-19}, -{54,57,-18}, -{54,57,-17}, -{54,57,-16}, -{54,57,-15}, -{54,57,-14}, -{54,57,-13}, -{54,57,-12}, -{54,57,-11}, -{54,57,-10}, -{54,57,-9}, -{54,57,-8}, -{54,57,-7}, -{54,57,-6}, -{54,57,-5}, -{54,57,-4}, -{54,57,-3}, -{54,57,-2}, -{54,57,-1}, -{54,57,0}, -{54,57,1}, -{54,57,2}, -{54,57,3}, -{54,57,4}, -{54,57,5}, -{54,57,6}, -{54,57,7}, -{54,57,8}, -{54,57,9}, -{54,57,10}, -{54,57,11}, -{54,57,12}, -{54,57,13}, -{54,57,14}, -{54,57,15}, -{54,57,16}, -{54,57,17}, -{54,57,18}, -{54,57,19}, -{54,57,20}, -{54,57,21}, -{54,57,22}, -{54,57,23}, -{54,57,24}, -{54,57,25}, -{54,57,26}, -{54,57,27}, -{54,57,28}, -{54,57,29}, -{54,57,30}, -{54,57,31}, -{54,57,32}, -{54,57,33}, -{54,57,34}, -{54,57,35}, -{54,57,36}, -{54,57,37}, -{54,57,38}, -{54,57,39}, -{54,57,40}, -{54,57,41}, -{54,57,42}, -{54,57,43}, -{54,57,44}, -{54,57,45}, -{54,57,46}, -{54,57,47}, -{54,57,48}, -{54,57,49}, -{54,57,50}, -{54,57,51}, -{54,57,52}, -{54,57,53}, -{54,57,54}, -{54,57,55}, -{54,57,56}, -{54,57,57}, -{54,57,58}, -{54,57,59}, -{54,57,60}, -{54,57,61}, -{54,57,62}, -{54,57,63}, -{54,57,64}, -{54,58,-71}, -{54,58,-70}, -{54,58,-69}, -{54,58,-68}, -{54,58,-67}, -{54,58,-66}, -{54,58,-65}, -{54,58,-64}, -{54,58,-63}, -{54,58,-62}, -{54,58,-61}, -{54,58,-60}, -{54,58,-59}, -{54,58,-58}, -{54,58,-57}, -{54,58,-56}, -{54,58,-55}, -{54,58,-54}, -{54,58,-53}, -{54,58,-52}, -{54,58,-51}, -{54,58,-50}, -{54,58,-49}, -{54,58,-48}, -{54,58,-47}, -{54,58,-46}, -{54,58,-45}, -{54,58,-44}, -{54,58,-43}, -{54,58,-42}, -{54,58,-41}, -{54,58,-40}, -{54,58,-39}, -{54,58,-38}, -{54,58,-37}, -{54,58,-36}, -{54,58,-35}, -{54,58,-34}, -{54,58,-33}, -{54,58,-32}, -{54,58,-31}, -{54,58,-30}, -{54,58,-29}, -{54,58,-28}, -{54,58,-27}, -{54,58,-26}, -{54,58,-25}, -{54,58,-24}, -{54,58,-23}, -{54,58,-22}, -{54,58,-21}, -{54,58,-20}, -{54,58,-19}, -{54,58,-18}, -{54,58,-17}, -{54,58,-16}, -{54,58,-15}, -{54,58,-14}, -{54,58,-13}, -{54,58,-12}, -{54,58,-11}, -{54,58,-10}, -{54,58,-9}, -{54,58,-8}, -{54,58,-7}, -{54,58,-6}, -{54,58,-5}, -{54,58,-4}, -{54,58,-3}, -{54,58,-2}, -{54,58,-1}, -{54,58,0}, -{54,58,1}, -{54,58,2}, -{54,58,3}, -{54,58,4}, -{54,58,5}, -{54,58,6}, -{54,58,7}, -{54,58,8}, -{54,58,9}, -{54,58,10}, -{54,58,11}, -{54,58,12}, -{54,58,13}, -{54,58,14}, -{54,58,15}, -{54,58,16}, -{54,58,17}, -{54,58,18}, -{54,58,19}, -{54,58,20}, -{54,58,21}, -{54,58,22}, -{54,58,23}, -{54,58,24}, -{54,58,25}, -{54,58,26}, -{54,58,27}, -{54,58,28}, -{54,58,29}, -{54,58,30}, -{54,58,31}, -{54,58,32}, -{54,58,33}, -{54,58,34}, -{54,58,35}, -{54,58,36}, -{54,58,37}, -{54,58,38}, -{54,58,39}, -{54,58,40}, -{54,58,41}, -{54,58,42}, -{54,58,43}, -{54,58,44}, -{54,58,45}, -{54,58,46}, -{54,58,47}, -{54,58,48}, -{54,58,49}, -{54,58,50}, -{54,58,51}, -{54,58,52}, -{54,58,53}, -{54,58,54}, -{54,58,55}, -{54,58,56}, -{54,58,57}, -{54,58,58}, -{54,58,59}, -{54,58,60}, -{54,58,61}, -{54,58,62}, -{54,58,63}, -{54,58,64}, -{54,59,-71}, -{54,59,-70}, -{54,59,-69}, -{54,59,-68}, -{54,59,-67}, -{54,59,-66}, -{54,59,-65}, -{54,59,-64}, -{54,59,-63}, -{54,59,-62}, -{54,59,-61}, -{54,59,-60}, -{54,59,-59}, -{54,59,-58}, -{54,59,-57}, -{54,59,-56}, -{54,59,-55}, -{54,59,-54}, -{54,59,-53}, -{54,59,-52}, -{54,59,-51}, -{54,59,-50}, -{54,59,-49}, -{54,59,-48}, -{54,59,-47}, -{54,59,-46}, -{54,59,-45}, -{54,59,-44}, -{54,59,-43}, -{54,59,-42}, -{54,59,-41}, -{54,59,-40}, -{54,59,-39}, -{54,59,-38}, -{54,59,-37}, -{54,59,-36}, -{54,59,-35}, -{54,59,-34}, -{54,59,-33}, -{54,59,-32}, -{54,59,-31}, -{54,59,-30}, -{54,59,-29}, -{54,59,-28}, -{54,59,-27}, -{54,59,-26}, -{54,59,-25}, -{54,59,-24}, -{54,59,-23}, -{54,59,-22}, -{54,59,-21}, -{54,59,-20}, -{54,59,-19}, -{54,59,-18}, -{54,59,-17}, -{54,59,-16}, -{54,59,-15}, -{54,59,-14}, -{54,59,-13}, -{54,59,-12}, -{54,59,-11}, -{54,59,-10}, -{54,59,-9}, -{54,59,-8}, -{54,59,-7}, -{54,59,-6}, -{54,59,-5}, -{54,59,-4}, -{54,59,-3}, -{54,59,-2}, -{54,59,-1}, -{54,59,0}, -{54,59,1}, -{54,59,2}, -{54,59,3}, -{54,59,4}, -{54,59,5}, -{54,59,6}, -{54,59,7}, -{54,59,8}, -{54,59,9}, -{54,59,10}, -{54,59,11}, -{54,59,12}, -{54,59,13}, -{54,59,14}, -{54,59,15}, -{54,59,16}, -{54,59,17}, -{54,59,18}, -{54,59,19}, -{54,59,20}, -{54,59,21}, -{54,59,22}, -{54,59,23}, -{54,59,24}, -{54,59,25}, -{54,59,26}, -{54,59,27}, -{54,59,28}, -{54,59,29}, -{54,59,30}, -{54,59,31}, -{54,59,32}, -{54,59,33}, -{54,59,34}, -{54,59,35}, -{54,59,36}, -{54,59,37}, -{54,59,38}, -{54,59,39}, -{54,59,40}, -{54,59,41}, -{54,59,42}, -{54,59,43}, -{54,59,44}, -{54,59,45}, -{54,59,46}, -{54,59,47}, -{54,59,48}, -{54,59,49}, -{54,59,50}, -{54,59,51}, -{54,59,52}, -{54,59,53}, -{54,59,54}, -{54,59,55}, -{54,59,56}, -{54,59,57}, -{54,59,58}, -{54,59,59}, -{54,59,60}, -{54,59,61}, -{54,59,62}, -{54,59,63}, -{54,59,64}, -{54,59,65}, -{54,60,-71}, -{54,60,-70}, -{54,60,-69}, -{54,60,-68}, -{54,60,-67}, -{54,60,-66}, -{54,60,-65}, -{54,60,-64}, -{54,60,-63}, -{54,60,-62}, -{54,60,-61}, -{54,60,-60}, -{54,60,-59}, -{54,60,-58}, -{54,60,-57}, -{54,60,-56}, -{54,60,-55}, -{54,60,-54}, -{54,60,-53}, -{54,60,-52}, -{54,60,-51}, -{54,60,-50}, -{54,60,-49}, -{54,60,-48}, -{54,60,-47}, -{54,60,-46}, -{54,60,-45}, -{54,60,-44}, -{54,60,-43}, -{54,60,-42}, -{54,60,-41}, -{54,60,-40}, -{54,60,-39}, -{54,60,-38}, -{54,60,-37}, -{54,60,-36}, -{54,60,-35}, -{54,60,-34}, -{54,60,-33}, -{54,60,-32}, -{54,60,-31}, -{54,60,-30}, -{54,60,-29}, -{54,60,-28}, -{54,60,-27}, -{54,60,-26}, -{54,60,-25}, -{54,60,-24}, -{54,60,-23}, -{54,60,-22}, -{54,60,-21}, -{54,60,-20}, -{54,60,-19}, -{54,60,-18}, -{54,60,-17}, -{54,60,-16}, -{54,60,-15}, -{54,60,-14}, -{54,60,-13}, -{54,60,-12}, -{54,60,-11}, -{54,60,-10}, -{54,60,-9}, -{54,60,-8}, -{54,60,-7}, -{54,60,-6}, -{54,60,-5}, -{54,60,-4}, -{54,60,-3}, -{54,60,-2}, -{54,60,-1}, -{54,60,0}, -{54,60,1}, -{54,60,2}, -{54,60,3}, -{54,60,4}, -{54,60,5}, -{54,60,6}, -{54,60,7}, -{54,60,8}, -{54,60,9}, -{54,60,10}, -{54,60,11}, -{54,60,12}, -{54,60,13}, -{54,60,14}, -{54,60,15}, -{54,60,16}, -{54,60,17}, -{54,60,18}, -{54,60,19}, -{54,60,20}, -{54,60,21}, -{54,60,22}, -{54,60,23}, -{54,60,24}, -{54,60,25}, -{54,60,26}, -{54,60,27}, -{54,60,28}, -{54,60,29}, -{54,60,30}, -{54,60,31}, -{54,60,32}, -{54,60,33}, -{54,60,34}, -{54,60,35}, -{54,60,36}, -{54,60,37}, -{54,60,38}, -{54,60,39}, -{54,60,40}, -{54,60,41}, -{54,60,42}, -{54,60,43}, -{54,60,44}, -{54,60,45}, -{54,60,46}, -{54,60,47}, -{54,60,48}, -{54,60,49}, -{54,60,50}, -{54,60,51}, -{54,60,52}, -{54,60,53}, -{54,60,54}, -{54,60,55}, -{54,60,56}, -{54,60,57}, -{54,60,58}, -{54,60,59}, -{54,60,60}, -{54,60,61}, -{54,60,62}, -{54,60,63}, -{54,60,64}, -{54,60,65}, -{54,61,-71}, -{54,61,-70}, -{54,61,-69}, -{54,61,-68}, -{54,61,-67}, -{54,61,-66}, -{54,61,-65}, -{54,61,-64}, -{54,61,-63}, -{54,61,-62}, -{54,61,-61}, -{54,61,-60}, -{54,61,-59}, -{54,61,-58}, -{54,61,-57}, -{54,61,-56}, -{54,61,-55}, -{54,61,-54}, -{54,61,-53}, -{54,61,-52}, -{54,61,-51}, -{54,61,-50}, -{54,61,-49}, -{54,61,-48}, -{54,61,-47}, -{54,61,-46}, -{54,61,-45}, -{54,61,-44}, -{54,61,-43}, -{54,61,-42}, -{54,61,-41}, -{54,61,-40}, -{54,61,-39}, -{54,61,-38}, -{54,61,-37}, -{54,61,-36}, -{54,61,-35}, -{54,61,-34}, -{54,61,-33}, -{54,61,-32}, -{54,61,-31}, -{54,61,-30}, -{54,61,-29}, -{54,61,-28}, -{54,61,-27}, -{54,61,-26}, -{54,61,-25}, -{54,61,-24}, -{54,61,-23}, -{54,61,-22}, -{54,61,-21}, -{54,61,-20}, -{54,61,-19}, -{54,61,-18}, -{54,61,-17}, -{54,61,-16}, -{54,61,-15}, -{54,61,-14}, -{54,61,-13}, -{54,61,-12}, -{54,61,-11}, -{54,61,-10}, -{54,61,-9}, -{54,61,-8}, -{54,61,-7}, -{54,61,-6}, -{54,61,-5}, -{54,61,-4}, -{54,61,-3}, -{54,61,-2}, -{54,61,-1}, -{54,61,0}, -{54,61,1}, -{54,61,2}, -{54,61,3}, -{54,61,4}, -{54,61,5}, -{54,61,6}, -{54,61,7}, -{54,61,8}, -{54,61,9}, -{54,61,10}, -{54,61,11}, -{54,61,12}, -{54,61,13}, -{54,61,14}, -{54,61,15}, -{54,61,16}, -{54,61,17}, -{54,61,18}, -{54,61,19}, -{54,61,20}, -{54,61,21}, -{54,61,22}, -{54,61,23}, -{54,61,24}, -{54,61,25}, -{54,61,26}, -{54,61,27}, -{54,61,28}, -{54,61,29}, -{54,61,30}, -{54,61,31}, -{54,61,32}, -{54,61,33}, -{54,61,34}, -{54,61,35}, -{54,61,36}, -{54,61,37}, -{54,61,38}, -{54,61,39}, -{54,61,40}, -{54,61,41}, -{54,61,42}, -{54,61,43}, -{54,61,44}, -{54,61,45}, -{54,61,46}, -{54,61,47}, -{54,61,48}, -{54,61,49}, -{54,61,50}, -{54,61,51}, -{54,61,52}, -{54,61,53}, -{54,61,54}, -{54,61,55}, -{54,61,56}, -{54,61,57}, -{54,61,58}, -{54,61,59}, -{54,61,60}, -{54,61,61}, -{54,61,62}, -{54,61,63}, -{54,61,64}, -{54,61,65}, -{54,62,-71}, -{54,62,-70}, -{54,62,-69}, -{54,62,-68}, -{54,62,-67}, -{54,62,-66}, -{54,62,-65}, -{54,62,-64}, -{54,62,-63}, -{54,62,-62}, -{54,62,-61}, -{54,62,-60}, -{54,62,-59}, -{54,62,-58}, -{54,62,-57}, -{54,62,-56}, -{54,62,-55}, -{54,62,-54}, -{54,62,-53}, -{54,62,-52}, -{54,62,-51}, -{54,62,-50}, -{54,62,-49}, -{54,62,-48}, -{54,62,-47}, -{54,62,-46}, -{54,62,-45}, -{54,62,-44}, -{54,62,-43}, -{54,62,-42}, -{54,62,-41}, -{54,62,-40}, -{54,62,-39}, -{54,62,-38}, -{54,62,-37}, -{54,62,-36}, -{54,62,-35}, -{54,62,-34}, -{54,62,-33}, -{54,62,-32}, -{54,62,-31}, -{54,62,-30}, -{54,62,-29}, -{54,62,-28}, -{54,62,-27}, -{54,62,-26}, -{54,62,-25}, -{54,62,-24}, -{54,62,-23}, -{54,62,-22}, -{54,62,-21}, -{54,62,-20}, -{54,62,-19}, -{54,62,-18}, -{54,62,-17}, -{54,62,-16}, -{54,62,-15}, -{54,62,-14}, -{54,62,-13}, -{54,62,-12}, -{54,62,-11}, -{54,62,-10}, -{54,62,-9}, -{54,62,-8}, -{54,62,-7}, -{54,62,-6}, -{54,62,-5}, -{54,62,-4}, -{54,62,-3}, -{54,62,-2}, -{54,62,-1}, -{54,62,0}, -{54,62,1}, -{54,62,2}, -{54,62,3}, -{54,62,4}, -{54,62,5}, -{54,62,6}, -{54,62,7}, -{54,62,8}, -{54,62,9}, -{54,62,10}, -{54,62,11}, -{54,62,12}, -{54,62,13}, -{54,62,14}, -{54,62,15}, -{54,62,16}, -{54,62,17}, -{54,62,18}, -{54,62,19}, -{54,62,20}, -{54,62,21}, -{54,62,22}, -{54,62,23}, -{54,62,24}, -{54,62,25}, -{54,62,26}, -{54,62,27}, -{54,62,28}, -{54,62,29}, -{54,62,30}, -{54,62,31}, -{54,62,32}, -{54,62,33}, -{54,62,34}, -{54,62,35}, -{54,62,36}, -{54,62,37}, -{54,62,38}, -{54,62,39}, -{54,62,40}, -{54,62,41}, -{54,62,42}, -{54,62,43}, -{54,62,44}, -{54,62,45}, -{54,62,46}, -{54,62,47}, -{54,62,48}, -{54,62,49}, -{54,62,50}, -{54,62,51}, -{54,62,52}, -{54,62,53}, -{54,62,54}, -{54,62,55}, -{54,62,56}, -{54,62,57}, -{54,62,58}, -{54,62,59}, -{54,62,60}, -{54,62,61}, -{54,62,62}, -{54,62,63}, -{54,62,64}, -{54,62,65}, -{54,63,-71}, -{54,63,-70}, -{54,63,-69}, -{54,63,-68}, -{54,63,-67}, -{54,63,-66}, -{54,63,-65}, -{54,63,-64}, -{54,63,-63}, -{54,63,-62}, -{54,63,-61}, -{54,63,-60}, -{54,63,-59}, -{54,63,-58}, -{54,63,-57}, -{54,63,-56}, -{54,63,-55}, -{54,63,-54}, -{54,63,-53}, -{54,63,-52}, -{54,63,-51}, -{54,63,-50}, -{54,63,-49}, -{54,63,-48}, -{54,63,-47}, -{54,63,-46}, -{54,63,-45}, -{54,63,-44}, -{54,63,-43}, -{54,63,-42}, -{54,63,-41}, -{54,63,-40}, -{54,63,-39}, -{54,63,-38}, -{54,63,-37}, -{54,63,-36}, -{54,63,-35}, -{54,63,-34}, -{54,63,-33}, -{54,63,-32}, -{54,63,-31}, -{54,63,-30}, -{54,63,-29}, -{54,63,-28}, -{54,63,-27}, -{54,63,-26}, -{54,63,-25}, -{54,63,-24}, -{54,63,-23}, -{54,63,-22}, -{54,63,-21}, -{54,63,-20}, -{54,63,-19}, -{54,63,-18}, -{54,63,-17}, -{54,63,-16}, -{54,63,-15}, -{54,63,-14}, -{54,63,-13}, -{54,63,-12}, -{54,63,-11}, -{54,63,-10}, -{54,63,-9}, -{54,63,-8}, -{54,63,-7}, -{54,63,-6}, -{54,63,-5}, -{54,63,-4}, -{54,63,-3}, -{54,63,-2}, -{54,63,-1}, -{54,63,0}, -{54,63,1}, -{54,63,2}, -{54,63,3}, -{54,63,4}, -{54,63,5}, -{54,63,6}, -{54,63,7}, -{54,63,8}, -{54,63,9}, -{54,63,10}, -{54,63,11}, -{54,63,12}, -{54,63,13}, -{54,63,14}, -{54,63,15}, -{54,63,16}, -{54,63,17}, -{54,63,18}, -{54,63,19}, -{54,63,20}, -{54,63,21}, -{54,63,22}, -{54,63,23}, -{54,63,24}, -{54,63,25}, -{54,63,26}, -{54,63,27}, -{54,63,28}, -{54,63,29}, -{54,63,30}, -{54,63,31}, -{54,63,32}, -{54,63,33}, -{54,63,34}, -{54,63,35}, -{54,63,36}, -{54,63,37}, -{54,63,38}, -{54,63,39}, -{54,63,40}, -{54,63,41}, -{54,63,42}, -{54,63,43}, -{54,63,44}, -{54,63,45}, -{54,63,46}, -{54,63,47}, -{54,63,48}, -{54,63,49}, -{54,63,50}, -{54,63,51}, -{54,63,52}, -{54,63,53}, -{54,63,54}, -{54,63,55}, -{54,63,56}, -{54,63,57}, -{54,63,58}, -{54,63,59}, -{54,63,60}, -{54,63,61}, -{54,63,62}, -{54,63,63}, -{54,63,64}, -{54,63,65}, -{54,64,-71}, -{54,64,-70}, -{54,64,-69}, -{54,64,-68}, -{54,64,-67}, -{54,64,-66}, -{54,64,-65}, -{54,64,-64}, -{54,64,-63}, -{54,64,-62}, -{54,64,-61}, -{54,64,-60}, -{54,64,-59}, -{54,64,-58}, -{54,64,-57}, -{54,64,-56}, -{54,64,-55}, -{54,64,-54}, -{54,64,-53}, -{54,64,-52}, -{54,64,-51}, -{54,64,-50}, -{54,64,-49}, -{54,64,-48}, -{54,64,-47}, -{54,64,-46}, -{54,64,-45}, -{54,64,-44}, -{54,64,-43}, -{54,64,-42}, -{54,64,-41}, -{54,64,-40}, -{54,64,-39}, -{54,64,-38}, -{54,64,-37}, -{54,64,-36}, -{54,64,-35}, -{54,64,-34}, -{54,64,-33}, -{54,64,-32}, -{54,64,-31}, -{54,64,-30}, -{54,64,-29}, -{54,64,-28}, -{54,64,-27}, -{54,64,-26}, -{54,64,-25}, -{54,64,-24}, -{54,64,-23}, -{54,64,-22}, -{54,64,-21}, -{54,64,-20}, -{54,64,-19}, -{54,64,-18}, -{54,64,-17}, -{54,64,-16}, -{54,64,-15}, -{54,64,-14}, -{54,64,-13}, -{54,64,-12}, -{54,64,-11}, -{54,64,-10}, -{54,64,-9}, -{54,64,-8}, -{54,64,-7}, -{54,64,-6}, -{54,64,-5}, -{54,64,-4}, -{54,64,-3}, -{54,64,-2}, -{54,64,-1}, -{54,64,0}, -{54,64,1}, -{54,64,2}, -{54,64,3}, -{54,64,4}, -{54,64,5}, -{54,64,6}, -{54,64,7}, -{54,64,8}, -{54,64,9}, -{54,64,10}, -{54,64,11}, -{54,64,12}, -{54,64,13}, -{54,64,14}, -{54,64,15}, -{54,64,16}, -{54,64,17}, -{54,64,18}, -{54,64,19}, -{54,64,20}, -{54,64,21}, -{54,64,22}, -{54,64,23}, -{54,64,24}, -{54,64,25}, -{54,64,26}, -{54,64,27}, -{54,64,28}, -{54,64,29}, -{54,64,30}, -{54,64,31}, -{54,64,32}, -{54,64,33}, -{54,64,34}, -{54,64,35}, -{54,64,36}, -{54,64,37}, -{54,64,38}, -{54,64,39}, -{54,64,40}, -{54,64,41}, -{54,64,42}, -{54,64,43}, -{54,64,44}, -{54,64,45}, -{54,64,46}, -{54,64,47}, -{54,64,48}, -{54,64,49}, -{54,64,50}, -{54,64,51}, -{54,64,52}, -{54,64,53}, -{54,64,54}, -{54,64,55}, -{54,64,56}, -{54,64,57}, -{54,64,58}, -{54,64,59}, -{54,64,60}, -{54,64,61}, -{54,64,62}, -{54,64,63}, -{54,64,64}, -{54,64,65}, -{54,65,-71}, -{54,65,-70}, -{54,65,-69}, -{54,65,-68}, -{54,65,-67}, -{54,65,-66}, -{54,65,-65}, -{54,65,-64}, -{54,65,-63}, -{54,65,-62}, -{54,65,-61}, -{54,65,-60}, -{54,65,-59}, -{54,65,-58}, -{54,65,-57}, -{54,65,-56}, -{54,65,-55}, -{54,65,-54}, -{54,65,-53}, -{54,65,-52}, -{54,65,-51}, -{54,65,-50}, -{54,65,-49}, -{54,65,-48}, -{54,65,-47}, -{54,65,-46}, -{54,65,-45}, -{54,65,-44}, -{54,65,-43}, -{54,65,-42}, -{54,65,-41}, -{54,65,-40}, -{54,65,-39}, -{54,65,-38}, -{54,65,-37}, -{54,65,-36}, -{54,65,-35}, -{54,65,-34}, -{54,65,-33}, -{54,65,-32}, -{54,65,-31}, -{54,65,-30}, -{54,65,-29}, -{54,65,-28}, -{54,65,-27}, -{54,65,-26}, -{54,65,-25}, -{54,65,-24}, -{54,65,-23}, -{54,65,-22}, -{54,65,-21}, -{54,65,-20}, -{54,65,-19}, -{54,65,-18}, -{54,65,-17}, -{54,65,-16}, -{54,65,-15}, -{54,65,-14}, -{54,65,-13}, -{54,65,-12}, -{54,65,-11}, -{54,65,-10}, -{54,65,-9}, -{54,65,-8}, -{54,65,-7}, -{54,65,-6}, -{54,65,-5}, -{54,65,-4}, -{54,65,-3}, -{54,65,-2}, -{54,65,-1}, -{54,65,0}, -{54,65,1}, -{54,65,2}, -{54,65,3}, -{54,65,4}, -{54,65,5}, -{54,65,6}, -{54,65,7}, -{54,65,8}, -{54,65,9}, -{54,65,10}, -{54,65,11}, -{54,65,12}, -{54,65,13}, -{54,65,14}, -{54,65,15}, -{54,65,16}, -{54,65,17}, -{54,65,18}, -{54,65,19}, -{54,65,20}, -{54,65,21}, -{54,65,22}, -{54,65,23}, -{54,65,24}, -{54,65,25}, -{54,65,26}, -{54,65,27}, -{54,65,28}, -{54,65,29}, -{54,65,30}, -{54,65,31}, -{54,65,32}, -{54,65,33}, -{54,65,34}, -{54,65,35}, -{54,65,36}, -{54,65,37}, -{54,65,38}, -{54,65,39}, -{54,65,40}, -{54,65,41}, -{54,65,42}, -{54,65,43}, -{54,65,44}, -{54,65,45}, -{54,65,46}, -{54,65,47}, -{54,65,48}, -{54,65,49}, -{54,65,50}, -{54,65,51}, -{54,65,52}, -{54,65,53}, -{54,65,54}, -{54,65,55}, -{54,65,56}, -{54,65,57}, -{54,65,58}, -{54,65,59}, -{54,65,60}, -{54,65,61}, -{54,65,62}, -{54,65,63}, -{54,65,64}, -{54,65,65}, -{54,66,-71}, -{54,66,-70}, -{54,66,-69}, -{54,66,-68}, -{54,66,-67}, -{54,66,-66}, -{54,66,-65}, -{54,66,-64}, -{54,66,-63}, -{54,66,-62}, -{54,66,-61}, -{54,66,-60}, -{54,66,-59}, -{54,66,-58}, -{54,66,-57}, -{54,66,-56}, -{54,66,-55}, -{54,66,-54}, -{54,66,-53}, -{54,66,-52}, -{54,66,-51}, -{54,66,-50}, -{54,66,-49}, -{54,66,-48}, -{54,66,-47}, -{54,66,-46}, -{54,66,-45}, -{54,66,-44}, -{54,66,-43}, -{54,66,-42}, -{54,66,-41}, -{54,66,-40}, -{54,66,-39}, -{54,66,-38}, -{54,66,-37}, -{54,66,-36}, -{54,66,-35}, -{54,66,-34}, -{54,66,-33}, -{54,66,-32}, -{54,66,-31}, -{54,66,-30}, -{54,66,-29}, -{54,66,-28}, -{54,66,-27}, -{54,66,-26}, -{54,66,-25}, -{54,66,-24}, -{54,66,-23}, -{54,66,-22}, -{54,66,-21}, -{54,66,-20}, -{54,66,-19}, -{54,66,-18}, -{54,66,-17}, -{54,66,-16}, -{54,66,-15}, -{54,66,-14}, -{54,66,-13}, -{54,66,-12}, -{54,66,-11}, -{54,66,-10}, -{54,66,-9}, -{54,66,-8}, -{54,66,-7}, -{54,66,-6}, -{54,66,-5}, -{54,66,-4}, -{54,66,-3}, -{54,66,-2}, -{54,66,-1}, -{54,66,0}, -{54,66,1}, -{54,66,2}, -{54,66,3}, -{54,66,4}, -{54,66,5}, -{54,66,6}, -{54,66,7}, -{54,66,8}, -{54,66,9}, -{54,66,10}, -{54,66,11}, -{54,66,12}, -{54,66,13}, -{54,66,14}, -{54,66,15}, -{54,66,16}, -{54,66,17}, -{54,66,18}, -{54,66,19}, -{54,66,20}, -{54,66,21}, -{54,66,22}, -{54,66,23}, -{54,66,24}, -{54,66,25}, -{54,66,26}, -{54,66,27}, -{54,66,28}, -{54,66,29}, -{54,66,30}, -{54,66,31}, -{54,66,32}, -{54,66,33}, -{54,66,34}, -{54,66,35}, -{54,66,36}, -{54,66,37}, -{54,66,38}, -{54,66,39}, -{54,66,40}, -{54,66,41}, -{54,66,42}, -{54,66,43}, -{54,66,44}, -{54,66,45}, -{54,66,46}, -{54,66,47}, -{54,66,48}, -{54,66,49}, -{54,66,50}, -{54,66,51}, -{54,66,52}, -{54,66,53}, -{54,66,54}, -{54,66,55}, -{54,66,56}, -{54,66,57}, -{54,66,58}, -{54,66,59}, -{54,66,60}, -{54,66,61}, -{54,66,62}, -{54,66,63}, -{54,66,64}, -{54,66,65}, -{54,66,66}, -{54,67,-71}, -{54,67,-70}, -{54,67,-69}, -{54,67,-68}, -{54,67,-67}, -{54,67,-66}, -{54,67,-65}, -{54,67,-64}, -{54,67,-63}, -{54,67,-62}, -{54,67,-61}, -{54,67,-60}, -{54,67,-59}, -{54,67,-58}, -{54,67,-57}, -{54,67,-56}, -{54,67,-55}, -{54,67,-54}, -{54,67,-53}, -{54,67,-52}, -{54,67,-51}, -{54,67,-50}, -{54,67,-49}, -{54,67,-48}, -{54,67,-47}, -{54,67,-46}, -{54,67,-45}, -{54,67,-44}, -{54,67,-43}, -{54,67,-42}, -{54,67,-41}, -{54,67,-40}, -{54,67,-39}, -{54,67,-38}, -{54,67,-37}, -{54,67,-36}, -{54,67,-35}, -{54,67,-34}, -{54,67,-33}, -{54,67,-32}, -{54,67,-31}, -{54,67,-30}, -{54,67,-29}, -{54,67,-28}, -{54,67,-27}, -{54,67,-26}, -{54,67,-25}, -{54,67,-24}, -{54,67,-23}, -{54,67,-22}, -{54,67,-21}, -{54,67,-20}, -{54,67,-19}, -{54,67,-18}, -{54,67,-17}, -{54,67,-16}, -{54,67,-15}, -{54,67,-14}, -{54,67,-13}, -{54,67,-12}, -{54,67,-11}, -{54,67,-10}, -{54,67,-9}, -{54,67,-8}, -{54,67,-7}, -{54,67,-6}, -{54,67,-5}, -{54,67,-4}, -{54,67,-3}, -{54,67,-2}, -{54,67,-1}, -{54,67,0}, -{54,67,1}, -{54,67,2}, -{54,67,3}, -{54,67,4}, -{54,67,5}, -{54,67,6}, -{54,67,7}, -{54,67,8}, -{54,67,9}, -{54,67,10}, -{54,67,11}, -{54,67,12}, -{54,67,13}, -{54,67,14}, -{54,67,15}, -{54,67,16}, -{54,67,17}, -{54,67,18}, -{54,67,19}, -{54,67,20}, -{54,67,21}, -{54,67,22}, -{54,67,23}, -{54,67,24}, -{54,67,25}, -{54,67,26}, -{54,67,27}, -{54,67,28}, -{54,67,29}, -{54,67,30}, -{54,67,31}, -{54,67,32}, -{54,67,33}, -{54,67,34}, -{54,67,35}, -{54,67,36}, -{54,67,37}, -{54,67,38}, -{54,67,39}, -{54,67,40}, -{54,67,41}, -{54,67,42}, -{54,67,43}, -{54,67,44}, -{54,67,45}, -{54,67,46}, -{54,67,47}, -{54,67,48}, -{54,67,49}, -{54,67,50}, -{54,67,51}, -{54,67,52}, -{54,67,53}, -{54,67,54}, -{54,67,55}, -{54,67,56}, -{54,67,57}, -{54,67,58}, -{54,67,59}, -{54,67,60}, -{54,67,61}, -{54,67,62}, -{54,67,63}, -{54,67,64}, -{54,67,65}, -{54,67,66}, -{54,68,-71}, -{54,68,-70}, -{54,68,-69}, -{54,68,-68}, -{54,68,-67}, -{54,68,-66}, -{54,68,-65}, -{54,68,-64}, -{54,68,-63}, -{54,68,-62}, -{54,68,-61}, -{54,68,-60}, -{54,68,-59}, -{54,68,-58}, -{54,68,-57}, -{54,68,-56}, -{54,68,-55}, -{54,68,-54}, -{54,68,-53}, -{54,68,-52}, -{54,68,-51}, -{54,68,-50}, -{54,68,-49}, -{54,68,-48}, -{54,68,-47}, -{54,68,-46}, -{54,68,-45}, -{54,68,-44}, -{54,68,-43}, -{54,68,-42}, -{54,68,-41}, -{54,68,-40}, -{54,68,-39}, -{54,68,-38}, -{54,68,-37}, -{54,68,-36}, -{54,68,-35}, -{54,68,-34}, -{54,68,-33}, -{54,68,-32}, -{54,68,-31}, -{54,68,-30}, -{54,68,-29}, -{54,68,-28}, -{54,68,-27}, -{54,68,-26}, -{54,68,-25}, -{54,68,-24}, -{54,68,-23}, -{54,68,-22}, -{54,68,-21}, -{54,68,-20}, -{54,68,-19}, -{54,68,-18}, -{54,68,-17}, -{54,68,-16}, -{54,68,-15}, -{54,68,-14}, -{54,68,-13}, -{54,68,-12}, -{54,68,-11}, -{54,68,-10}, -{54,68,-9}, -{54,68,-8}, -{54,68,-7}, -{54,68,-6}, -{54,68,-5}, -{54,68,-4}, -{54,68,-3}, -{54,68,-2}, -{54,68,-1}, -{54,68,0}, -{54,68,1}, -{54,68,2}, -{54,68,3}, -{54,68,4}, -{54,68,5}, -{54,68,6}, -{54,68,7}, -{54,68,8}, -{54,68,9}, -{54,68,10}, -{54,68,11}, -{54,68,12}, -{54,68,13}, -{54,68,14}, -{54,68,15}, -{54,68,16}, -{54,68,17}, -{54,68,18}, -{54,68,19}, -{54,68,20}, -{54,68,21}, -{54,68,22}, -{54,68,23}, -{54,68,24}, -{54,68,25}, -{54,68,26}, -{54,68,27}, -{54,68,28}, -{54,68,29}, -{54,68,30}, -{54,68,31}, -{54,68,32}, -{54,68,33}, -{54,68,34}, -{54,68,35}, -{54,68,36}, -{54,68,37}, -{54,68,38}, -{54,68,39}, -{54,68,40}, -{54,68,41}, -{54,68,42}, -{54,68,43}, -{54,68,44}, -{54,68,45}, -{54,68,46}, -{54,68,47}, -{54,68,48}, -{54,68,49}, -{54,68,50}, -{54,68,51}, -{54,68,52}, -{54,68,53}, -{54,68,54}, -{54,68,55}, -{54,68,56}, -{54,68,57}, -{54,68,58}, -{54,68,59}, -{54,68,60}, -{54,68,61}, -{54,68,62}, -{54,68,63}, -{54,68,64}, -{54,68,65}, -{54,68,66}, -{54,69,-71}, -{54,69,-70}, -{54,69,-69}, -{54,69,-68}, -{54,69,-67}, -{54,69,-66}, -{54,69,-65}, -{54,69,-64}, -{54,69,-63}, -{54,69,-62}, -{54,69,-61}, -{54,69,-60}, -{54,69,-59}, -{54,69,-58}, -{54,69,-57}, -{54,69,-56}, -{54,69,-55}, -{54,69,-54}, -{54,69,-53}, -{54,69,-52}, -{54,69,-51}, -{54,69,-50}, -{54,69,-49}, -{54,69,-48}, -{54,69,-47}, -{54,69,-46}, -{54,69,-45}, -{54,69,-44}, -{54,69,-43}, -{54,69,-42}, -{54,69,-41}, -{54,69,-40}, -{54,69,-39}, -{54,69,-38}, -{54,69,-37}, -{54,69,-36}, -{54,69,-35}, -{54,69,-34}, -{54,69,-33}, -{54,69,-32}, -{54,69,-31}, -{54,69,-30}, -{54,69,-29}, -{54,69,-28}, -{54,69,-27}, -{54,69,-26}, -{54,69,-25}, -{54,69,-24}, -{54,69,-23}, -{54,69,-22}, -{54,69,-21}, -{54,69,-20}, -{54,69,-19}, -{54,69,-18}, -{54,69,-17}, -{54,69,-16}, -{54,69,-15}, -{54,69,-14}, -{54,69,-13}, -{54,69,-12}, -{54,69,-11}, -{54,69,-10}, -{54,69,-9}, -{54,69,-8}, -{54,69,-7}, -{54,69,-6}, -{54,69,-5}, -{54,69,-4}, -{54,69,-3}, -{54,69,-2}, -{54,69,-1}, -{54,69,0}, -{54,69,1}, -{54,69,2}, -{54,69,3}, -{54,69,4}, -{54,69,5}, -{54,69,6}, -{54,69,7}, -{54,69,8}, -{54,69,9}, -{54,69,10}, -{54,69,11}, -{54,69,12}, -{54,69,13}, -{54,69,14}, -{54,69,15}, -{54,69,16}, -{54,69,17}, -{54,69,18}, -{54,69,19}, -{54,69,20}, -{54,69,21}, -{54,69,22}, -{54,69,23}, -{54,69,24}, -{54,69,25}, -{54,69,26}, -{54,69,27}, -{54,69,28}, -{54,69,29}, -{54,69,30}, -{54,69,31}, -{54,69,32}, -{54,69,33}, -{54,69,34}, -{54,69,35}, -{54,69,36}, -{54,69,37}, -{54,69,38}, -{54,69,39}, -{54,69,40}, -{54,69,41}, -{54,69,42}, -{54,69,43}, -{54,69,44}, -{54,69,45}, -{54,69,46}, -{54,69,47}, -{54,69,48}, -{54,69,49}, -{54,69,50}, -{54,69,51}, -{54,69,52}, -{54,69,53}, -{54,69,54}, -{54,69,55}, -{54,69,56}, -{54,69,57}, -{54,69,58}, -{54,69,59}, -{54,69,60}, -{54,69,61}, -{54,69,62}, -{54,69,63}, -{54,69,64}, -{54,69,65}, -{54,69,66}, -{54,70,-71}, -{54,70,-70}, -{54,70,-69}, -{54,70,-68}, -{54,70,-67}, -{54,70,-66}, -{54,70,-65}, -{54,70,-64}, -{54,70,-63}, -{54,70,-62}, -{54,70,-61}, -{54,70,-60}, -{54,70,-59}, -{54,70,-58}, -{54,70,-57}, -{54,70,-56}, -{54,70,-55}, -{54,70,-54}, -{54,70,-53}, -{54,70,-52}, -{54,70,-51}, -{54,70,-50}, -{54,70,-49}, -{54,70,-48}, -{54,70,-47}, -{54,70,-46}, -{54,70,-45}, -{54,70,-44}, -{54,70,-43}, -{54,70,-42}, -{54,70,-41}, -{54,70,-40}, -{54,70,-39}, -{54,70,-38}, -{54,70,-37}, -{54,70,-36}, -{54,70,-35}, -{54,70,-34}, -{54,70,-33}, -{54,70,-32}, -{54,70,-31}, -{54,70,-30}, -{54,70,-29}, -{54,70,-28}, -{54,70,-27}, -{54,70,-26}, -{54,70,-25}, -{54,70,-24}, -{54,70,-23}, -{54,70,-22}, -{54,70,-21}, -{54,70,-20}, -{54,70,-19}, -{54,70,-18}, -{54,70,-17}, -{54,70,-16}, -{54,70,-15}, -{54,70,-14}, -{54,70,-13}, -{54,70,-12}, -{54,70,-11}, -{54,70,-10}, -{54,70,-9}, -{54,70,-8}, -{54,70,-7}, -{54,70,-6}, -{54,70,-5}, -{54,70,-4}, -{54,70,-3}, -{54,70,-2}, -{54,70,-1}, -{54,70,0}, -{54,70,1}, -{54,70,2}, -{54,70,3}, -{54,70,4}, -{54,70,5}, -{54,70,6}, -{54,70,7}, -{54,70,8}, -{54,70,9}, -{54,70,10}, -{54,70,11}, -{54,70,12}, -{54,70,13}, -{54,70,14}, -{54,70,15}, -{54,70,16}, -{54,70,17}, -{54,70,18}, -{54,70,19}, -{54,70,20}, -{54,70,21}, -{54,70,22}, -{54,70,23}, -{54,70,24}, -{54,70,25}, -{54,70,26}, -{54,70,27}, -{54,70,28}, -{54,70,29}, -{54,70,30}, -{54,70,31}, -{54,70,32}, -{54,70,33}, -{54,70,34}, -{54,70,35}, -{54,70,36}, -{54,70,37}, -{54,70,38}, -{54,70,39}, -{54,70,40}, -{54,70,41}, -{54,70,42}, -{54,70,43}, -{54,70,44}, -{54,70,45}, -{54,70,46}, -{54,70,47}, -{54,70,48}, -{54,70,49}, -{54,70,50}, -{54,70,51}, -{54,70,52}, -{54,70,53}, -{54,70,54}, -{54,70,55}, -{54,70,56}, -{54,70,57}, -{54,70,58}, -{54,70,59}, -{54,70,60}, -{54,70,61}, -{54,70,62}, -{54,70,63}, -{54,70,64}, -{54,70,65}, -{54,70,66}, -{54,71,-71}, -{54,71,-70}, -{54,71,-69}, -{54,71,-68}, -{54,71,-67}, -{54,71,-66}, -{54,71,-65}, -{54,71,-64}, -{54,71,-63}, -{54,71,-62}, -{54,71,-61}, -{54,71,-60}, -{54,71,-59}, -{54,71,-58}, -{54,71,-57}, -{54,71,-56}, -{54,71,-55}, -{54,71,-54}, -{54,71,-53}, -{54,71,-52}, -{54,71,-51}, -{54,71,-50}, -{54,71,-49}, -{54,71,-48}, -{54,71,-47}, -{54,71,-46}, -{54,71,-45}, -{54,71,-44}, -{54,71,-43}, -{54,71,-42}, -{54,71,-41}, -{54,71,-40}, -{54,71,-39}, -{54,71,-38}, -{54,71,-37}, -{54,71,-36}, -{54,71,-35}, -{54,71,-34}, -{54,71,-33}, -{54,71,-32}, -{54,71,-31}, -{54,71,-30}, -{54,71,-29}, -{54,71,-28}, -{54,71,-27}, -{54,71,-26}, -{54,71,-25}, -{54,71,-24}, -{54,71,-23}, -{54,71,-22}, -{54,71,-21}, -{54,71,-20}, -{54,71,-19}, -{54,71,-18}, -{54,71,-17}, -{54,71,-16}, -{54,71,-15}, -{54,71,-14}, -{54,71,-13}, -{54,71,-12}, -{54,71,-11}, -{54,71,-10}, -{54,71,-9}, -{54,71,-8}, -{54,71,-7}, -{54,71,-6}, -{54,71,-5}, -{54,71,-4}, -{54,71,-3}, -{54,71,-2}, -{54,71,-1}, -{54,71,0}, -{54,71,1}, -{54,71,2}, -{54,71,3}, -{54,71,4}, -{54,71,5}, -{54,71,6}, -{54,71,7}, -{54,71,8}, -{54,71,9}, -{54,71,10}, -{54,71,11}, -{54,71,12}, -{54,71,13}, -{54,71,14}, -{54,71,15}, -{54,71,16}, -{54,71,17}, -{54,71,18}, -{54,71,19}, -{54,71,20}, -{54,71,21}, -{54,71,22}, -{54,71,23}, -{54,71,24}, -{54,71,25}, -{54,71,26}, -{54,71,27}, -{54,71,28}, -{54,71,29}, -{54,71,30}, -{54,71,31}, -{54,71,32}, -{54,71,33}, -{54,71,34}, -{54,71,35}, -{54,71,36}, -{54,71,37}, -{54,71,38}, -{54,71,39}, -{54,71,40}, -{54,71,41}, -{54,71,42}, -{54,71,43}, -{54,71,44}, -{54,71,45}, -{54,71,46}, -{54,71,47}, -{54,71,48}, -{54,71,49}, -{54,71,50}, -{54,71,51}, -{54,71,52}, -{54,71,53}, -{54,71,54}, -{54,71,55}, -{54,71,56}, -{54,71,57}, -{54,71,58}, -{54,71,59}, -{54,71,60}, -{54,71,61}, -{54,71,62}, -{54,71,63}, -{54,71,64}, -{54,71,65}, -{54,71,66}, -{54,72,-71}, -{54,72,-70}, -{54,72,-69}, -{54,72,-68}, -{54,72,-67}, -{54,72,-66}, -{54,72,-65}, -{54,72,-64}, -{54,72,-63}, -{54,72,-62}, -{54,72,-61}, -{54,72,-60}, -{54,72,-59}, -{54,72,-58}, -{54,72,-57}, -{54,72,-56}, -{54,72,-55}, -{54,72,-54}, -{54,72,-53}, -{54,72,-52}, -{54,72,-51}, -{54,72,-50}, -{54,72,-49}, -{54,72,-48}, -{54,72,-47}, -{54,72,-46}, -{54,72,-45}, -{54,72,-44}, -{54,72,-43}, -{54,72,-42}, -{54,72,-41}, -{54,72,-40}, -{54,72,-39}, -{54,72,-38}, -{54,72,-37}, -{54,72,-36}, -{54,72,-35}, -{54,72,-34}, -{54,72,-33}, -{54,72,-32}, -{54,72,-31}, -{54,72,-30}, -{54,72,-29}, -{54,72,-28}, -{54,72,-27}, -{54,72,-26}, -{54,72,-25}, -{54,72,-24}, -{54,72,-23}, -{54,72,-22}, -{54,72,-21}, -{54,72,-20}, -{54,72,-19}, -{54,72,-18}, -{54,72,-17}, -{54,72,-16}, -{54,72,-15}, -{54,72,-14}, -{54,72,-13}, -{54,72,-12}, -{54,72,-11}, -{54,72,-10}, -{54,72,-9}, -{54,72,-8}, -{54,72,-7}, -{54,72,-6}, -{54,72,-5}, -{54,72,-4}, -{54,72,-3}, -{54,72,-2}, -{54,72,-1}, -{54,72,0}, -{54,72,1}, -{54,72,2}, -{54,72,3}, -{54,72,4}, -{54,72,5}, -{54,72,6}, -{54,72,7}, -{54,72,8}, -{54,72,9}, -{54,72,10}, -{54,72,11}, -{54,72,12}, -{54,72,13}, -{54,72,14}, -{54,72,15}, -{54,72,16}, -{54,72,17}, -{54,72,18}, -{54,72,19}, -{54,72,20}, -{54,72,21}, -{54,72,22}, -{54,72,23}, -{54,72,24}, -{54,72,25}, -{54,72,26}, -{54,72,27}, -{54,72,28}, -{54,72,29}, -{54,72,30}, -{54,72,31}, -{54,72,32}, -{54,72,33}, -{54,72,34}, -{54,72,35}, -{54,72,36}, -{54,72,37}, -{54,72,38}, -{54,72,39}, -{54,72,40}, -{54,72,41}, -{54,72,42}, -{54,72,43}, -{54,72,44}, -{54,72,45}, -{54,72,46}, -{54,72,47}, -{54,72,48}, -{54,72,49}, -{54,72,50}, -{54,72,51}, -{54,72,52}, -{54,72,53}, -{54,72,54}, -{54,72,55}, -{54,72,56}, -{54,72,57}, -{54,72,58}, -{54,72,59}, -{54,72,60}, -{54,72,61}, -{54,72,62}, -{54,72,63}, -{54,72,64}, -{54,72,65}, -{54,72,66}, -{54,73,-71}, -{54,73,-70}, -{54,73,-69}, -{54,73,-68}, -{54,73,-67}, -{54,73,-66}, -{54,73,-65}, -{54,73,-64}, -{54,73,-63}, -{54,73,-62}, -{54,73,-61}, -{54,73,-60}, -{54,73,-59}, -{54,73,-58}, -{54,73,-57}, -{54,73,-56}, -{54,73,-55}, -{54,73,-54}, -{54,73,-53}, -{54,73,-52}, -{54,73,-51}, -{54,73,-50}, -{54,73,-49}, -{54,73,-48}, -{54,73,-47}, -{54,73,-46}, -{54,73,-45}, -{54,73,-44}, -{54,73,-43}, -{54,73,-42}, -{54,73,-41}, -{54,73,-40}, -{54,73,-39}, -{54,73,-38}, -{54,73,-37}, -{54,73,-36}, -{54,73,-35}, -{54,73,-34}, -{54,73,-33}, -{54,73,-32}, -{54,73,-31}, -{54,73,-30}, -{54,73,-29}, -{54,73,-28}, -{54,73,-27}, -{54,73,-26}, -{54,73,-25}, -{54,73,-24}, -{54,73,-23}, -{54,73,-22}, -{54,73,-21}, -{54,73,-20}, -{54,73,-19}, -{54,73,-18}, -{54,73,-17}, -{54,73,-16}, -{54,73,-15}, -{54,73,-14}, -{54,73,-13}, -{54,73,-12}, -{54,73,-11}, -{54,73,-10}, -{54,73,-9}, -{54,73,-8}, -{54,73,-7}, -{54,73,-6}, -{54,73,-5}, -{54,73,-4}, -{54,73,-3}, -{54,73,-2}, -{54,73,-1}, -{54,73,0}, -{54,73,1}, -{54,73,2}, -{54,73,3}, -{54,73,4}, -{54,73,5}, -{54,73,6}, -{54,73,7}, -{54,73,8}, -{54,73,9}, -{54,73,10}, -{54,73,11}, -{54,73,12}, -{54,73,13}, -{54,73,14}, -{54,73,15}, -{54,73,16}, -{54,73,17}, -{54,73,18}, -{54,73,19}, -{54,73,20}, -{54,73,21}, -{54,73,22}, -{54,73,23}, -{54,73,24}, -{54,73,25}, -{54,73,26}, -{54,73,27}, -{54,73,28}, -{54,73,29}, -{54,73,30}, -{54,73,31}, -{54,73,32}, -{54,73,33}, -{54,73,34}, -{54,73,35}, -{54,73,36}, -{54,73,37}, -{54,73,38}, -{54,73,39}, -{54,73,40}, -{54,73,41}, -{54,73,42}, -{54,73,43}, -{54,73,44}, -{54,73,45}, -{54,73,46}, -{54,73,47}, -{54,73,48}, -{54,73,49}, -{54,73,50}, -{54,73,51}, -{54,73,52}, -{54,73,53}, -{54,73,54}, -{54,73,55}, -{54,73,56}, -{54,73,57}, -{54,73,58}, -{54,73,59}, -{54,73,60}, -{54,73,61}, -{54,73,62}, -{54,73,63}, -{54,73,64}, -{54,73,65}, -{54,73,66}, -{54,74,-71}, -{54,74,-70}, -{54,74,-69}, -{54,74,-68}, -{54,74,-67}, -{54,74,-66}, -{54,74,-65}, -{54,74,-64}, -{54,74,-63}, -{54,74,-62}, -{54,74,-61}, -{54,74,-60}, -{54,74,-59}, -{54,74,-58}, -{54,74,-57}, -{54,74,-56}, -{54,74,-55}, -{54,74,-54}, -{54,74,-53}, -{54,74,-52}, -{54,74,-51}, -{54,74,-50}, -{54,74,-49}, -{54,74,-48}, -{54,74,-47}, -{54,74,-46}, -{54,74,-45}, -{54,74,-44}, -{54,74,-43}, -{54,74,-42}, -{54,74,-41}, -{54,74,-40}, -{54,74,-39}, -{54,74,-38}, -{54,74,-37}, -{54,74,-36}, -{54,74,-35}, -{54,74,-34}, -{54,74,-33}, -{54,74,-32}, -{54,74,-31}, -{54,74,-30}, -{54,74,-29}, -{54,74,-28}, -{54,74,-27}, -{54,74,-26}, -{54,74,-25}, -{54,74,-24}, -{54,74,-23}, -{54,74,-22}, -{54,74,-21}, -{54,74,-20}, -{54,74,-19}, -{54,74,-18}, -{54,74,-17}, -{54,74,-16}, -{54,74,-15}, -{54,74,-14}, -{54,74,-13}, -{54,74,-12}, -{54,74,-11}, -{54,74,-10}, -{54,74,-9}, -{54,74,-8}, -{54,74,-7}, -{54,74,-6}, -{54,74,-5}, -{54,74,-4}, -{54,74,-3}, -{54,74,-2}, -{54,74,-1}, -{54,74,0}, -{54,74,1}, -{54,74,2}, -{54,74,3}, -{54,74,4}, -{54,74,5}, -{54,74,6}, -{54,74,7}, -{54,74,8}, -{54,74,9}, -{54,74,10}, -{54,74,11}, -{54,74,12}, -{54,74,13}, -{54,74,14}, -{54,74,15}, -{54,74,16}, -{54,74,17}, -{54,74,18}, -{54,74,19}, -{54,74,20}, -{54,74,21}, -{54,74,22}, -{54,74,23}, -{54,74,24}, -{54,74,25}, -{54,74,26}, -{54,74,27}, -{54,74,28}, -{54,74,29}, -{54,74,30}, -{54,74,31}, -{54,74,32}, -{54,74,33}, -{54,74,34}, -{54,74,35}, -{54,74,36}, -{54,74,37}, -{54,74,38}, -{54,74,39}, -{54,74,40}, -{54,74,41}, -{54,74,42}, -{54,74,43}, -{54,74,44}, -{54,74,45}, -{54,74,46}, -{54,74,47}, -{54,74,48}, -{54,74,49}, -{54,74,50}, -{54,74,51}, -{54,74,52}, -{54,74,53}, -{54,74,54}, -{54,74,55}, -{54,74,56}, -{54,74,57}, -{54,74,58}, -{54,74,59}, -{54,74,60}, -{54,74,61}, -{54,74,62}, -{54,74,63}, -{54,74,64}, -{54,74,65}, -{54,74,66}, -{54,74,67}, -{54,75,-71}, -{54,75,-70}, -{54,75,-69}, -{54,75,-68}, -{54,75,-67}, -{54,75,-66}, -{54,75,-65}, -{54,75,-64}, -{54,75,-63}, -{54,75,-62}, -{54,75,-61}, -{54,75,-60}, -{54,75,-59}, -{54,75,-58}, -{54,75,-57}, -{54,75,-56}, -{54,75,-55}, -{54,75,-54}, -{54,75,-53}, -{54,75,-52}, -{54,75,-51}, -{54,75,-50}, -{54,75,-49}, -{54,75,-48}, -{54,75,-47}, -{54,75,-46}, -{54,75,-45}, -{54,75,-44}, -{54,75,-43}, -{54,75,-42}, -{54,75,-41}, -{54,75,-40}, -{54,75,-39}, -{54,75,-38}, -{54,75,-37}, -{54,75,-36}, -{54,75,-35}, -{54,75,-34}, -{54,75,-33}, -{54,75,-32}, -{54,75,-31}, -{54,75,-30}, -{54,75,-29}, -{54,75,-28}, -{54,75,-27}, -{54,75,-26}, -{54,75,-25}, -{54,75,-24}, -{54,75,-23}, -{54,75,-22}, -{54,75,-21}, -{54,75,-20}, -{54,75,-19}, -{54,75,-18}, -{54,75,-17}, -{54,75,-16}, -{54,75,-15}, -{54,75,-14}, -{54,75,-13}, -{54,75,-12}, -{54,75,-11}, -{54,75,-10}, -{54,75,-9}, -{54,75,-8}, -{54,75,-7}, -{54,75,-6}, -{54,75,-5}, -{54,75,-4}, -{54,75,-3}, -{54,75,-2}, -{54,75,-1}, -{54,75,0}, -{54,75,1}, -{54,75,2}, -{54,75,3}, -{54,75,4}, -{54,75,5}, -{54,75,6}, -{54,75,7}, -{54,75,8}, -{54,75,9}, -{54,75,10}, -{54,75,11}, -{54,75,12}, -{54,75,13}, -{54,75,14}, -{54,75,15}, -{54,75,16}, -{54,75,17}, -{54,75,18}, -{54,75,19}, -{54,75,20}, -{54,75,21}, -{54,75,22}, -{54,75,23}, -{54,75,24}, -{54,75,25}, -{54,75,26}, -{54,75,27}, -{54,75,28}, -{54,75,29}, -{54,75,30}, -{54,75,31}, -{54,75,32}, -{54,75,33}, -{54,75,34}, -{54,75,35}, -{54,75,36}, -{54,75,37}, -{54,75,38}, -{54,75,39}, -{54,75,40}, -{54,75,41}, -{54,75,42}, -{54,75,43}, -{54,75,44}, -{54,75,45}, -{54,75,46}, -{54,75,47}, -{54,75,48}, -{54,75,49}, -{54,75,50}, -{54,75,51}, -{54,75,52}, -{54,75,53}, -{54,75,54}, -{54,75,55}, -{54,75,56}, -{54,75,57}, -{54,75,58}, -{54,75,59}, -{54,75,60}, -{54,75,61}, -{54,75,62}, -{54,75,63}, -{54,75,64}, -{54,75,65}, -{54,75,66}, -{54,75,67}, -{54,76,-71}, -{54,76,-70}, -{54,76,-69}, -{54,76,-68}, -{54,76,-67}, -{54,76,-66}, -{54,76,-65}, -{54,76,-64}, -{54,76,-63}, -{54,76,-62}, -{54,76,-61}, -{54,76,-60}, -{54,76,-59}, -{54,76,-58}, -{54,76,-57}, -{54,76,-56}, -{54,76,-55}, -{54,76,-54}, -{54,76,-53}, -{54,76,-52}, -{54,76,-51}, -{54,76,-50}, -{54,76,-49}, -{54,76,-48}, -{54,76,-47}, -{54,76,-46}, -{54,76,-45}, -{54,76,-44}, -{54,76,-43}, -{54,76,-42}, -{54,76,-41}, -{54,76,-40}, -{54,76,-39}, -{54,76,-38}, -{54,76,-37}, -{54,76,-36}, -{54,76,-35}, -{54,76,-34}, -{54,76,-33}, -{54,76,-32}, -{54,76,-31}, -{54,76,-30}, -{54,76,-29}, -{54,76,-28}, -{54,76,-27}, -{54,76,-26}, -{54,76,-25}, -{54,76,-24}, -{54,76,-23}, -{54,76,-22}, -{54,76,-21}, -{54,76,-20}, -{54,76,-19}, -{54,76,-18}, -{54,76,-17}, -{54,76,-16}, -{54,76,-15}, -{54,76,-14}, -{54,76,-13}, -{54,76,-12}, -{54,76,-11}, -{54,76,-10}, -{54,76,-9}, -{54,76,-8}, -{54,76,-7}, -{54,76,-6}, -{54,76,-5}, -{54,76,-4}, -{54,76,-3}, -{54,76,-2}, -{54,76,-1}, -{54,76,0}, -{54,76,1}, -{54,76,2}, -{54,76,3}, -{54,76,4}, -{54,76,5}, -{54,76,6}, -{54,76,7}, -{54,76,8}, -{54,76,9}, -{54,76,10}, -{54,76,11}, -{54,76,12}, -{54,76,13}, -{54,76,14}, -{54,76,15}, -{54,76,16}, -{54,76,17}, -{54,76,18}, -{54,76,19}, -{54,76,20}, -{54,76,21}, -{54,76,22}, -{54,76,23}, -{54,76,24}, -{54,76,25}, -{54,76,26}, -{54,76,27}, -{54,76,28}, -{54,76,29}, -{54,76,30}, -{54,76,31}, -{54,76,32}, -{54,76,33}, -{54,76,34}, -{54,76,35}, -{54,76,36}, -{54,76,37}, -{54,76,38}, -{54,76,39}, -{54,76,40}, -{54,76,41}, -{54,76,42}, -{54,76,43}, -{54,76,44}, -{54,76,45}, -{54,76,46}, -{54,76,47}, -{54,76,48}, -{54,76,49}, -{54,76,50}, -{54,76,51}, -{54,76,52}, -{54,76,53}, -{54,76,54}, -{54,76,55}, -{54,76,56}, -{54,76,57}, -{54,76,58}, -{54,76,59}, -{54,76,60}, -{54,76,61}, -{54,76,62}, -{54,76,63}, -{54,76,64}, -{54,76,65}, -{54,76,66}, -{54,76,67}, -{54,77,-71}, -{54,77,-70}, -{54,77,-69}, -{54,77,-68}, -{54,77,-67}, -{54,77,-66}, -{54,77,-65}, -{54,77,-64}, -{54,77,-63}, -{54,77,-62}, -{54,77,-61}, -{54,77,-60}, -{54,77,-59}, -{54,77,-58}, -{54,77,-57}, -{54,77,-56}, -{54,77,-55}, -{54,77,-54}, -{54,77,-53}, -{54,77,-52}, -{54,77,-51}, -{54,77,-50}, -{54,77,-49}, -{54,77,-48}, -{54,77,-47}, -{54,77,-46}, -{54,77,-45}, -{54,77,-44}, -{54,77,-43}, -{54,77,-42}, -{54,77,-41}, -{54,77,-40}, -{54,77,-39}, -{54,77,-38}, -{54,77,-37}, -{54,77,-36}, -{54,77,-35}, -{54,77,-34}, -{54,77,-33}, -{54,77,-32}, -{54,77,-31}, -{54,77,-30}, -{54,77,-29}, -{54,77,-28}, -{54,77,-27}, -{54,77,-26}, -{54,77,-25}, -{54,77,-24}, -{54,77,-23}, -{54,77,-22}, -{54,77,-21}, -{54,77,-20}, -{54,77,-19}, -{54,77,-18}, -{54,77,-17}, -{54,77,-16}, -{54,77,-15}, -{54,77,-14}, -{54,77,-13}, -{54,77,-12}, -{54,77,-11}, -{54,77,-10}, -{54,77,-9}, -{54,77,-8}, -{54,77,-7}, -{54,77,-6}, -{54,77,-5}, -{54,77,-4}, -{54,77,-3}, -{54,77,-2}, -{54,77,-1}, -{54,77,0}, -{54,77,1}, -{54,77,2}, -{54,77,3}, -{54,77,4}, -{54,77,5}, -{54,77,6}, -{54,77,7}, -{54,77,8}, -{54,77,9}, -{54,77,10}, -{54,77,11}, -{54,77,12}, -{54,77,13}, -{54,77,14}, -{54,77,15}, -{54,77,16}, -{54,77,17}, -{54,77,18}, -{54,77,19}, -{54,77,20}, -{54,77,21}, -{54,77,22}, -{54,77,23}, -{54,77,24}, -{54,77,25}, -{54,77,26}, -{54,77,27}, -{54,77,28}, -{54,77,29}, -{54,77,30}, -{54,77,31}, -{54,77,32}, -{54,77,33}, -{54,77,34}, -{54,77,35}, -{54,77,36}, -{54,77,37}, -{54,77,38}, -{54,77,39}, -{54,77,40}, -{54,77,41}, -{54,77,42}, -{54,77,43}, -{54,77,44}, -{54,77,45}, -{54,77,46}, -{54,77,47}, -{54,77,48}, -{54,77,49}, -{54,77,50}, -{54,77,51}, -{54,77,52}, -{54,77,53}, -{54,77,54}, -{54,77,55}, -{54,77,56}, -{54,77,57}, -{54,77,58}, -{54,77,59}, -{54,77,60}, -{54,77,61}, -{54,77,62}, -{54,77,63}, -{54,77,64}, -{54,77,65}, -{54,77,66}, -{54,77,67}, -{54,78,-71}, -{54,78,-70}, -{54,78,-69}, -{54,78,-68}, -{54,78,-67}, -{54,78,-66}, -{54,78,-65}, -{54,78,-64}, -{54,78,-63}, -{54,78,-62}, -{54,78,-61}, -{54,78,-60}, -{54,78,-59}, -{54,78,-58}, -{54,78,-57}, -{54,78,-56}, -{54,78,-55}, -{54,78,-54}, -{54,78,-53}, -{54,78,-52}, -{54,78,-51}, -{54,78,-50}, -{54,78,-49}, -{54,78,-48}, -{54,78,-47}, -{54,78,-46}, -{54,78,-45}, -{54,78,-44}, -{54,78,-43}, -{54,78,-42}, -{54,78,-41}, -{54,78,-40}, -{54,78,-39}, -{54,78,-38}, -{54,78,-37}, -{54,78,-36}, -{54,78,-35}, -{54,78,-34}, -{54,78,-33}, -{54,78,-32}, -{54,78,-31}, -{54,78,-30}, -{54,78,-29}, -{54,78,-28}, -{54,78,-27}, -{54,78,-26}, -{54,78,-25}, -{54,78,-24}, -{54,78,-23}, -{54,78,-22}, -{54,78,-21}, -{54,78,-20}, -{54,78,-19}, -{54,78,-18}, -{54,78,-17}, -{54,78,-16}, -{54,78,-15}, -{54,78,-14}, -{54,78,-13}, -{54,78,-12}, -{54,78,-11}, -{54,78,-10}, -{54,78,-9}, -{54,78,-8}, -{54,78,-7}, -{54,78,-6}, -{54,78,-5}, -{54,78,-4}, -{54,78,-3}, -{54,78,-2}, -{54,78,-1}, -{54,78,0}, -{54,78,1}, -{54,78,2}, -{54,78,3}, -{54,78,4}, -{54,78,5}, -{54,78,6}, -{54,78,7}, -{54,78,8}, -{54,78,9}, -{54,78,10}, -{54,78,11}, -{54,78,12}, -{54,78,13}, -{54,78,14}, -{54,78,15}, -{54,78,16}, -{54,78,17}, -{54,78,18}, -{54,78,19}, -{54,78,20}, -{54,78,21}, -{54,78,22}, -{54,78,23}, -{54,78,24}, -{54,78,25}, -{54,78,26}, -{54,78,27}, -{54,78,28}, -{54,78,29}, -{54,78,30}, -{54,78,31}, -{54,78,32}, -{54,78,33}, -{54,78,34}, -{54,78,35}, -{54,78,36}, -{54,78,37}, -{54,78,38}, -{54,78,39}, -{54,78,40}, -{54,78,41}, -{54,78,42}, -{54,78,43}, -{54,78,44}, -{54,78,45}, -{54,78,46}, -{54,78,47}, -{54,78,48}, -{54,78,49}, -{54,78,50}, -{54,78,51}, -{54,78,52}, -{54,78,53}, -{54,78,54}, -{54,78,55}, -{54,78,56}, -{54,78,57}, -{54,78,58}, -{54,78,59}, -{54,78,60}, -{54,78,61}, -{54,78,62}, -{54,78,63}, -{54,78,64}, -{54,78,65}, -{54,78,66}, -{54,78,67}, -{54,79,-71}, -{54,79,-70}, -{54,79,-69}, -{54,79,-68}, -{54,79,-67}, -{54,79,-66}, -{54,79,-65}, -{54,79,-64}, -{54,79,-63}, -{54,79,-62}, -{54,79,-61}, -{54,79,-60}, -{54,79,-59}, -{54,79,-58}, -{54,79,-57}, -{54,79,-56}, -{54,79,-55}, -{54,79,-54}, -{54,79,-53}, -{54,79,-52}, -{54,79,-51}, -{54,79,-50}, -{54,79,-49}, -{54,79,-48}, -{54,79,-47}, -{54,79,-46}, -{54,79,-45}, -{54,79,-44}, -{54,79,-43}, -{54,79,-42}, -{54,79,-41}, -{54,79,-40}, -{54,79,-39}, -{54,79,-38}, -{54,79,-37}, -{54,79,-36}, -{54,79,-35}, -{54,79,-34}, -{54,79,-33}, -{54,79,-32}, -{54,79,-31}, -{54,79,-30}, -{54,79,-29}, -{54,79,-28}, -{54,79,-27}, -{54,79,-26}, -{54,79,-25}, -{54,79,-24}, -{54,79,-23}, -{54,79,-22}, -{54,79,-21}, -{54,79,-20}, -{54,79,-19}, -{54,79,-18}, -{54,79,-17}, -{54,79,-16}, -{54,79,-15}, -{54,79,-14}, -{54,79,-13}, -{54,79,-12}, -{54,79,-11}, -{54,79,-10}, -{54,79,-9}, -{54,79,-8}, -{54,79,-7}, -{54,79,-6}, -{54,79,-5}, -{54,79,-4}, -{54,79,-3}, -{54,79,-2}, -{54,79,-1}, -{54,79,0}, -{54,79,1}, -{54,79,2}, -{54,79,3}, -{54,79,4}, -{54,79,5}, -{54,79,6}, -{54,79,7}, -{54,79,8}, -{54,79,9}, -{54,79,10}, -{54,79,11}, -{54,79,12}, -{54,79,13}, -{54,79,14}, -{54,79,15}, -{54,79,16}, -{54,79,17}, -{54,79,18}, -{54,79,19}, -{54,79,20}, -{54,79,21}, -{54,79,22}, -{54,79,23}, -{54,79,24}, -{54,79,25}, -{54,79,26}, -{54,79,27}, -{54,79,28}, -{54,79,29}, -{54,79,30}, -{54,79,31}, -{54,79,32}, -{54,79,33}, -{54,79,34}, -{54,79,35}, -{54,79,36}, -{54,79,37}, -{54,79,38}, -{54,79,39}, -{54,79,40}, -{54,79,41}, -{54,79,42}, -{54,79,43}, -{54,79,44}, -{54,79,45}, -{54,79,46}, -{54,79,47}, -{54,79,48}, -{54,79,49}, -{54,79,50}, -{54,79,51}, -{54,79,52}, -{54,79,53}, -{54,79,54}, -{54,80,-71}, -{54,80,-70}, -{54,80,-69}, -{54,80,-68}, -{54,80,-67}, -{54,80,-66}, -{54,80,-65}, -{54,80,-64}, -{54,80,-63}, -{54,80,-62}, -{54,80,-61}, -{54,80,-60}, -{54,80,-59}, -{54,80,-58}, -{54,80,-57}, -{54,80,-56}, -{54,80,-55}, -{54,80,-54}, -{54,80,-53}, -{54,80,-52}, -{54,80,-51}, -{54,80,-50}, -{54,80,-49}, -{54,80,-48}, -{54,80,-47}, -{54,80,-46}, -{54,80,-45}, -{54,80,-44}, -{54,80,-43}, -{54,80,-42}, -{54,80,-41}, -{54,80,-40}, -{54,80,-39}, -{54,80,-38}, -{54,80,-37}, -{54,80,-36}, -{54,80,-35}, -{54,80,-34}, -{54,80,-33}, -{54,80,-32}, -{54,80,-31}, -{54,80,-30}, -{54,80,-29}, -{54,80,-28}, -{54,80,-27}, -{54,80,-26}, -{54,80,-25}, -{54,80,-24}, -{54,80,-23}, -{54,80,-22}, -{54,80,-21}, -{54,80,-20}, -{54,80,-19}, -{54,80,-18}, -{54,80,-17}, -{54,80,-16}, -{54,80,-15}, -{54,80,-14}, -{54,80,-13}, -{54,80,-12}, -{54,80,-11}, -{54,80,-10}, -{54,80,-9}, -{54,80,-8}, -{54,80,-7}, -{54,80,-6}, -{54,80,-5}, -{54,80,-4}, -{54,80,-3}, -{54,80,-2}, -{54,80,-1}, -{54,80,0}, -{54,80,1}, -{54,80,2}, -{54,80,3}, -{54,80,4}, -{54,80,5}, -{54,80,6}, -{54,80,7}, -{54,80,8}, -{54,80,9}, -{54,80,10}, -{54,80,11}, -{54,80,12}, -{54,80,13}, -{54,80,14}, -{54,80,15}, -{54,80,16}, -{54,80,17}, -{54,80,18}, -{54,80,19}, -{54,80,20}, -{54,80,21}, -{54,80,22}, -{54,80,23}, -{54,80,24}, -{54,80,25}, -{54,80,26}, -{54,80,27}, -{54,80,28}, -{54,80,29}, -{54,80,30}, -{54,80,31}, -{54,80,32}, -{54,80,33}, -{54,80,34}, -{54,80,35}, -{54,80,36}, -{54,80,37}, -{54,80,38}, -{54,80,39}, -{54,80,40}, -{54,80,41}, -{54,80,42}, -{54,80,43}, -{54,80,44}, -{54,81,-71}, -{54,81,-70}, -{54,81,-69}, -{54,81,-68}, -{54,81,-67}, -{54,81,-66}, -{54,81,-65}, -{54,81,-64}, -{54,81,-63}, -{54,81,-62}, -{54,81,-61}, -{54,81,-60}, -{54,81,-59}, -{54,81,-58}, -{54,81,-57}, -{54,81,-56}, -{54,81,-55}, -{54,81,-54}, -{54,81,-53}, -{54,81,-52}, -{54,81,-51}, -{54,81,-50}, -{54,81,-49}, -{54,81,-48}, -{54,81,-47}, -{54,81,-46}, -{54,81,-45}, -{54,81,-44}, -{54,81,-43}, -{54,81,-42}, -{54,81,-41}, -{54,81,-40}, -{54,81,-39}, -{54,81,-38}, -{54,81,-37}, -{54,81,-36}, -{54,81,-35}, -{54,81,-34}, -{54,81,-33}, -{54,81,-32}, -{54,81,-31}, -{54,81,-30}, -{54,81,-29}, -{54,81,-28}, -{54,81,-27}, -{54,81,-26}, -{54,81,-25}, -{54,81,-24}, -{54,81,-23}, -{54,81,-22}, -{54,81,-21}, -{54,81,-20}, -{54,81,-19}, -{54,81,-18}, -{54,81,-17}, -{54,81,-16}, -{54,81,-15}, -{54,81,-14}, -{54,81,-13}, -{54,81,-12}, -{54,81,-11}, -{54,81,-10}, -{54,81,-9}, -{54,81,-8}, -{54,81,-7}, -{54,81,-6}, -{54,81,-5}, -{54,81,-4}, -{54,81,-3}, -{54,81,-2}, -{54,81,-1}, -{54,81,0}, -{54,81,1}, -{54,81,2}, -{54,81,3}, -{54,81,4}, -{54,81,5}, -{54,81,6}, -{54,81,7}, -{54,81,8}, -{54,81,9}, -{54,81,10}, -{54,81,11}, -{54,81,12}, -{54,81,13}, -{54,81,14}, -{54,81,15}, -{54,81,16}, -{54,81,17}, -{54,81,18}, -{54,81,19}, -{54,81,20}, -{54,81,21}, -{54,81,22}, -{54,81,23}, -{54,81,24}, -{54,81,25}, -{54,81,26}, -{54,81,27}, -{54,81,28}, -{54,81,29}, -{54,81,30}, -{54,81,31}, -{54,81,32}, -{54,81,33}, -{54,81,34}, -{54,81,35}, -{54,81,36}, -{54,82,-71}, -{54,82,-70}, -{54,82,-69}, -{54,82,-68}, -{54,82,-67}, -{54,82,-66}, -{54,82,-65}, -{54,82,-64}, -{54,82,-63}, -{54,82,-62}, -{54,82,-61}, -{54,82,-60}, -{54,82,-59}, -{54,82,-58}, -{54,82,-57}, -{54,82,-56}, -{54,82,-55}, -{54,82,-54}, -{54,82,-53}, -{54,82,-52}, -{54,82,-51}, -{54,82,-50}, -{54,82,-49}, -{54,82,-48}, -{54,82,-47}, -{54,82,-46}, -{54,82,-45}, -{54,82,-44}, -{54,82,-43}, -{54,82,-42}, -{54,82,-41}, -{54,82,-40}, -{54,82,-39}, -{54,82,-38}, -{54,82,-37}, -{54,82,-36}, -{54,82,-35}, -{54,82,-34}, -{54,82,-33}, -{54,82,-32}, -{54,82,-31}, -{54,82,-30}, -{54,82,-29}, -{54,82,-28}, -{54,82,-27}, -{54,82,-26}, -{54,82,-25}, -{54,82,-24}, -{54,82,-23}, -{54,82,-22}, -{54,82,-21}, -{54,82,-20}, -{54,82,-19}, -{54,82,-18}, -{54,82,-17}, -{54,82,-16}, -{54,82,-15}, -{54,82,-14}, -{54,82,-13}, -{54,82,-12}, -{54,82,-11}, -{54,82,-10}, -{54,82,-9}, -{54,82,-8}, -{54,82,-7}, -{54,82,-6}, -{54,82,-5}, -{54,82,-4}, -{54,82,-3}, -{54,82,-2}, -{54,82,-1}, -{54,82,0}, -{54,82,1}, -{54,82,2}, -{54,82,3}, -{54,82,4}, -{54,82,5}, -{54,82,6}, -{54,82,7}, -{54,82,8}, -{54,82,9}, -{54,82,10}, -{54,82,11}, -{54,82,12}, -{54,82,13}, -{54,82,14}, -{54,82,15}, -{54,82,16}, -{54,82,17}, -{54,82,18}, -{54,82,19}, -{54,82,20}, -{54,82,21}, -{54,82,22}, -{54,82,23}, -{54,82,24}, -{54,82,25}, -{54,82,26}, -{54,82,27}, -{54,82,28}, -{54,82,29}, -{54,83,-71}, -{54,83,-70}, -{54,83,-69}, -{54,83,-68}, -{54,83,-67}, -{54,83,-66}, -{54,83,-65}, -{54,83,-64}, -{54,83,-63}, -{54,83,-62}, -{54,83,-61}, -{54,83,-60}, -{54,83,-59}, -{54,83,-58}, -{54,83,-57}, -{54,83,-56}, -{54,83,-55}, -{54,83,-54}, -{54,83,-53}, -{54,83,-52}, -{54,83,-51}, -{54,83,-50}, -{54,83,-49}, -{54,83,-48}, -{54,83,-47}, -{54,83,-46}, -{54,83,-45}, -{54,83,-44}, -{54,83,-43}, -{54,83,-42}, -{54,83,-41}, -{54,83,-40}, -{54,83,-39}, -{54,83,-38}, -{54,83,-37}, -{54,83,-36}, -{54,83,-35}, -{54,83,-34}, -{54,83,-33}, -{54,83,-32}, -{54,83,-31}, -{54,83,-30}, -{54,83,-29}, -{54,83,-28}, -{54,83,-27}, -{54,83,-26}, -{54,83,-25}, -{54,83,-24}, -{54,83,-23}, -{54,83,-22}, -{54,83,-21}, -{54,83,-20}, -{54,83,-19}, -{54,83,-18}, -{54,83,-17}, -{54,83,-16}, -{54,83,-15}, -{54,83,-14}, -{54,83,-13}, -{54,83,-12}, -{54,83,-11}, -{54,83,-10}, -{54,83,-9}, -{54,83,-8}, -{54,83,-7}, -{54,83,-6}, -{54,83,-5}, -{54,83,-4}, -{54,83,-3}, -{54,83,-2}, -{54,83,-1}, -{54,83,0}, -{54,83,1}, -{54,83,2}, -{54,83,3}, -{54,83,4}, -{54,83,5}, -{54,83,6}, -{54,83,7}, -{54,83,8}, -{54,83,9}, -{54,83,10}, -{54,83,11}, -{54,83,12}, -{54,83,13}, -{54,83,14}, -{54,84,-71}, -{54,84,-70}, -{54,84,-69}, -{54,84,-68}, -{54,84,-67}, -{54,84,-66}, -{54,84,-65}, -{54,84,-64}, -{54,84,-63}, -{54,84,-62}, -{54,84,-61}, -{54,84,-60}, -{54,84,-59}, -{54,84,-58}, -{54,84,-57}, -{54,84,-56}, -{54,84,-55}, -{54,84,-54}, -{54,84,-53}, -{54,84,-52}, -{54,84,-51}, -{54,84,-50}, -{54,84,-49}, -{54,84,-48}, -{54,84,-47}, -{54,84,-46}, -{54,84,-45}, -{54,84,-44}, -{54,84,-43}, -{54,84,-42}, -{54,84,-41}, -{54,84,-40}, -{54,84,-39}, -{54,84,-38}, -{54,84,-37}, -{54,84,-36}, -{54,84,-35}, -{54,84,-34}, -{54,84,-33}, -{54,84,-32}, -{54,84,-31}, -{54,84,-30}, -{54,84,-29}, -{54,84,-28}, -{54,84,-27}, -{54,84,-26}, -{54,84,-25}, -{54,84,-24}, -{54,84,-23}, -{54,84,-22}, -{54,84,-21}, -{54,84,-20}, -{54,84,-19}, -{54,84,-18}, -{54,84,-17}, -{54,84,-16}, -{54,84,-15}, -{54,84,-14}, -{54,84,-13}, -{54,84,-12}, -{54,84,-11}, -{54,84,-10}, -{54,84,-9}, -{54,84,-8}, -{54,84,-7}, -{54,84,-6}, -{54,84,-5}, -{54,84,-4}, -{54,84,-3}, -{54,84,-2}, -{54,84,-1}, -{54,85,-71}, -{54,85,-70}, -{54,85,-69}, -{54,85,-68}, -{54,85,-67}, -{54,85,-66}, -{54,85,-65}, -{54,85,-64}, -{54,85,-63}, -{54,85,-62}, -{54,85,-61}, -{54,85,-60}, -{54,85,-59}, -{54,85,-58}, -{54,85,-57}, -{54,85,-56}, -{54,85,-55}, -{54,85,-54}, -{54,85,-53}, -{54,85,-52}, -{54,85,-51}, -{54,85,-50}, -{54,85,-49}, -{54,85,-48}, -{54,85,-47}, -{54,85,-46}, -{54,85,-45}, -{54,85,-44}, -{54,85,-43}, -{54,85,-42}, -{54,85,-41}, -{54,85,-40}, -{54,85,-39}, -{54,85,-38}, -{54,85,-37}, -{54,85,-36}, -{54,85,-35}, -{54,85,-34}, -{54,85,-33}, -{54,85,-32}, -{54,85,-31}, -{54,85,-30}, -{54,85,-29}, -{54,85,-28}, -{54,85,-27}, -{54,85,-26}, -{54,85,-25}, -{54,85,-24}, -{54,85,-23}, -{54,85,-22}, -{54,85,-21}, -{54,85,-20}, -{54,85,-19}, -{54,85,-18}, -{54,85,-17}, -{54,85,-16}, -{54,85,-15}, -{54,85,-14}, -{54,85,-13}, -{54,86,-71}, -{54,86,-70}, -{54,86,-69}, -{54,86,-68}, -{54,86,-67}, -{54,86,-66}, -{54,86,-65}, -{54,86,-64}, -{54,86,-63}, -{54,86,-62}, -{54,86,-61}, -{54,86,-60}, -{54,86,-59}, -{54,86,-58}, -{54,86,-57}, -{54,86,-56}, -{54,86,-55}, -{54,86,-54}, -{54,86,-53}, -{54,86,-52}, -{54,86,-51}, -{54,86,-50}, -{54,86,-49}, -{54,86,-48}, -{54,86,-47}, -{54,86,-46}, -{54,86,-45}, -{54,86,-44}, -{54,86,-43}, -{54,86,-42}, -{54,86,-41}, -{54,86,-40}, -{54,86,-39}, -{54,86,-38}, -{54,86,-37}, -{54,86,-36}, -{54,86,-35}, -{54,86,-34}, -{54,86,-33}, -{54,86,-32}, -{54,86,-31}, -{54,86,-30}, -{54,86,-29}, -{54,86,-28}, -{54,86,-27}, -{54,86,-26}, -{54,86,-25}, -{54,86,-24}, -{54,86,-23}, -{54,87,-71}, -{54,87,-70}, -{54,87,-69}, -{54,87,-68}, -{54,87,-67}, -{54,87,-66}, -{54,87,-65}, -{54,87,-64}, -{54,87,-63}, -{54,87,-62}, -{54,87,-61}, -{54,87,-60}, -{54,87,-59}, -{54,87,-58}, -{54,87,-57}, -{54,87,-56}, -{54,87,-55}, -{54,87,-54}, -{54,87,-53}, -{54,87,-52}, -{54,87,-51}, -{54,87,-50}, -{54,87,-49}, -{54,87,-48}, -{54,87,-47}, -{54,87,-46}, -{54,87,-45}, -{54,87,-44}, -{54,87,-43}, -{54,87,-42}, -{54,87,-41}, -{54,87,-40}, -{54,87,-39}, -{54,87,-38}, -{54,87,-37}, -{54,87,-36}, -{54,87,-35}, -{54,87,-34}, -{54,87,-33}, -{54,87,-32}, -{54,88,-71}, -{54,88,-70}, -{54,88,-69}, -{54,88,-68}, -{54,88,-67}, -{54,88,-66}, -{54,88,-65}, -{54,88,-64}, -{54,88,-63}, -{54,88,-62}, -{54,88,-61}, -{54,88,-60}, -{54,88,-59}, -{54,88,-58}, -{54,88,-57}, -{54,88,-56}, -{54,88,-55}, -{54,88,-54}, -{54,88,-53}, -{54,88,-52}, -{54,88,-51}, -{54,88,-50}, -{54,88,-49}, -{54,88,-48}, -{54,88,-47}, -{54,88,-46}, -{54,88,-45}, -{54,88,-44}, -{54,88,-43}, -{54,88,-42}, -{54,88,-41}, -{54,88,-40}, -{54,89,-71}, -{54,89,-70}, -{54,89,-69}, -{54,89,-68}, -{54,89,-67}, -{54,89,-66}, -{54,89,-65}, -{54,89,-64}, -{54,89,-63}, -{54,89,-62}, -{54,89,-61}, -{54,89,-60}, -{54,89,-59}, -{54,89,-58}, -{54,89,-57}, -{54,89,-56}, -{54,89,-55}, -{54,89,-54}, -{54,89,-53}, -{54,89,-52}, -{54,89,-51}, -{54,89,-50}, -{54,89,-49}, -{54,89,-48}, -{54,90,-71}, -{54,90,-70}, -{54,90,-69}, -{54,90,-68}, -{54,90,-67}, -{54,90,-66}, -{54,90,-65}, -{54,90,-64}, -{54,90,-63}, -{54,90,-62}, -{54,90,-61}, -{54,90,-60}, -{54,90,-59}, -{54,90,-58}, -{54,90,-57}, -{54,90,-56}, -{54,90,-55}, -{54,91,-71}, -{54,91,-70}, -{54,91,-69}, -{54,91,-68}, -{54,91,-67}, -{54,91,-66}, -{54,91,-65}, -{54,91,-64}, -{54,91,-63}, -{54,91,-62}, -{54,91,-61}, -{54,92,-71}, -{54,92,-70}, -{54,92,-69}, -{54,92,-68}, -{54,92,-67}, -{55,-59,57}, -{55,-58,52}, -{55,-58,53}, -{55,-58,54}, -{55,-58,55}, -{55,-58,56}, -{55,-58,57}, -{55,-57,48}, -{55,-57,49}, -{55,-57,50}, -{55,-57,51}, -{55,-57,52}, -{55,-57,53}, -{55,-57,54}, -{55,-57,55}, -{55,-57,56}, -{55,-57,57}, -{55,-56,44}, -{55,-56,45}, -{55,-56,46}, -{55,-56,47}, -{55,-56,48}, -{55,-56,49}, -{55,-56,50}, -{55,-56,51}, -{55,-56,52}, -{55,-56,53}, -{55,-56,54}, -{55,-56,55}, -{55,-56,56}, -{55,-56,57}, -{55,-55,40}, -{55,-55,41}, -{55,-55,42}, -{55,-55,43}, -{55,-55,44}, -{55,-55,45}, -{55,-55,46}, -{55,-55,47}, -{55,-55,48}, -{55,-55,49}, -{55,-55,50}, -{55,-55,51}, -{55,-55,52}, -{55,-55,53}, -{55,-55,54}, -{55,-55,55}, -{55,-55,56}, -{55,-55,57}, -{55,-54,37}, -{55,-54,38}, -{55,-54,39}, -{55,-54,40}, -{55,-54,41}, -{55,-54,42}, -{55,-54,43}, -{55,-54,44}, -{55,-54,45}, -{55,-54,46}, -{55,-54,47}, -{55,-54,48}, -{55,-54,49}, -{55,-54,50}, -{55,-54,51}, -{55,-54,52}, -{55,-54,53}, -{55,-54,54}, -{55,-54,55}, -{55,-54,56}, -{55,-54,57}, -{55,-53,34}, -{55,-53,35}, -{55,-53,36}, -{55,-53,37}, -{55,-53,38}, -{55,-53,39}, -{55,-53,40}, -{55,-53,41}, -{55,-53,42}, -{55,-53,43}, -{55,-53,44}, -{55,-53,45}, -{55,-53,46}, -{55,-53,47}, -{55,-53,48}, -{55,-53,49}, -{55,-53,50}, -{55,-53,51}, -{55,-53,52}, -{55,-53,53}, -{55,-53,54}, -{55,-53,55}, -{55,-53,56}, -{55,-53,57}, -{55,-52,31}, -{55,-52,32}, -{55,-52,33}, -{55,-52,34}, -{55,-52,35}, -{55,-52,36}, -{55,-52,37}, -{55,-52,38}, -{55,-52,39}, -{55,-52,40}, -{55,-52,41}, -{55,-52,42}, -{55,-52,43}, -{55,-52,44}, -{55,-52,45}, -{55,-52,46}, -{55,-52,47}, -{55,-52,48}, -{55,-52,49}, -{55,-52,50}, -{55,-52,51}, -{55,-52,52}, -{55,-52,53}, -{55,-52,54}, -{55,-52,55}, -{55,-52,56}, -{55,-52,57}, -{55,-51,29}, -{55,-51,30}, -{55,-51,31}, -{55,-51,32}, -{55,-51,33}, -{55,-51,34}, -{55,-51,35}, -{55,-51,36}, -{55,-51,37}, -{55,-51,38}, -{55,-51,39}, -{55,-51,40}, -{55,-51,41}, -{55,-51,42}, -{55,-51,43}, -{55,-51,44}, -{55,-51,45}, -{55,-51,46}, -{55,-51,47}, -{55,-51,48}, -{55,-51,49}, -{55,-51,50}, -{55,-51,51}, -{55,-51,52}, -{55,-51,53}, -{55,-51,54}, -{55,-51,55}, -{55,-51,56}, -{55,-51,57}, -{55,-50,26}, -{55,-50,27}, -{55,-50,28}, -{55,-50,29}, -{55,-50,30}, -{55,-50,31}, -{55,-50,32}, -{55,-50,33}, -{55,-50,34}, -{55,-50,35}, -{55,-50,36}, -{55,-50,37}, -{55,-50,38}, -{55,-50,39}, -{55,-50,40}, -{55,-50,41}, -{55,-50,42}, -{55,-50,43}, -{55,-50,44}, -{55,-50,45}, -{55,-50,46}, -{55,-50,47}, -{55,-50,48}, -{55,-50,49}, -{55,-50,50}, -{55,-50,51}, -{55,-50,52}, -{55,-50,53}, -{55,-50,54}, -{55,-50,55}, -{55,-50,56}, -{55,-50,57}, -{55,-49,23}, -{55,-49,24}, -{55,-49,25}, -{55,-49,26}, -{55,-49,27}, -{55,-49,28}, -{55,-49,29}, -{55,-49,30}, -{55,-49,31}, -{55,-49,32}, -{55,-49,33}, -{55,-49,34}, -{55,-49,35}, -{55,-49,36}, -{55,-49,37}, -{55,-49,38}, -{55,-49,39}, -{55,-49,40}, -{55,-49,41}, -{55,-49,42}, -{55,-49,43}, -{55,-49,44}, -{55,-49,45}, -{55,-49,46}, -{55,-49,47}, -{55,-49,48}, -{55,-49,49}, -{55,-49,50}, -{55,-49,51}, -{55,-49,52}, -{55,-49,53}, -{55,-49,54}, -{55,-49,55}, -{55,-49,56}, -{55,-49,57}, -{55,-48,21}, -{55,-48,22}, -{55,-48,23}, -{55,-48,24}, -{55,-48,25}, -{55,-48,26}, -{55,-48,27}, -{55,-48,28}, -{55,-48,29}, -{55,-48,30}, -{55,-48,31}, -{55,-48,32}, -{55,-48,33}, -{55,-48,34}, -{55,-48,35}, -{55,-48,36}, -{55,-48,37}, -{55,-48,38}, -{55,-48,39}, -{55,-48,40}, -{55,-48,41}, -{55,-48,42}, -{55,-48,43}, -{55,-48,44}, -{55,-48,45}, -{55,-48,46}, -{55,-48,47}, -{55,-48,48}, -{55,-48,49}, -{55,-48,50}, -{55,-48,51}, -{55,-48,52}, -{55,-48,53}, -{55,-48,54}, -{55,-48,55}, -{55,-48,56}, -{55,-48,57}, -{55,-47,19}, -{55,-47,20}, -{55,-47,21}, -{55,-47,22}, -{55,-47,23}, -{55,-47,24}, -{55,-47,25}, -{55,-47,26}, -{55,-47,27}, -{55,-47,28}, -{55,-47,29}, -{55,-47,30}, -{55,-47,31}, -{55,-47,32}, -{55,-47,33}, -{55,-47,34}, -{55,-47,35}, -{55,-47,36}, -{55,-47,37}, -{55,-47,38}, -{55,-47,39}, -{55,-47,40}, -{55,-47,41}, -{55,-47,42}, -{55,-47,43}, -{55,-47,44}, -{55,-47,45}, -{55,-47,46}, -{55,-47,47}, -{55,-47,48}, -{55,-47,49}, -{55,-47,50}, -{55,-47,51}, -{55,-47,52}, -{55,-47,53}, -{55,-47,54}, -{55,-47,55}, -{55,-47,56}, -{55,-47,57}, -{55,-46,17}, -{55,-46,18}, -{55,-46,19}, -{55,-46,20}, -{55,-46,21}, -{55,-46,22}, -{55,-46,23}, -{55,-46,24}, -{55,-46,25}, -{55,-46,26}, -{55,-46,27}, -{55,-46,28}, -{55,-46,29}, -{55,-46,30}, -{55,-46,31}, -{55,-46,32}, -{55,-46,33}, -{55,-46,34}, -{55,-46,35}, -{55,-46,36}, -{55,-46,37}, -{55,-46,38}, -{55,-46,39}, -{55,-46,40}, -{55,-46,41}, -{55,-46,42}, -{55,-46,43}, -{55,-46,44}, -{55,-46,45}, -{55,-46,46}, -{55,-46,47}, -{55,-46,48}, -{55,-46,49}, -{55,-46,50}, -{55,-46,51}, -{55,-46,52}, -{55,-46,53}, -{55,-46,54}, -{55,-46,55}, -{55,-46,56}, -{55,-46,57}, -{55,-45,14}, -{55,-45,15}, -{55,-45,16}, -{55,-45,17}, -{55,-45,18}, -{55,-45,19}, -{55,-45,20}, -{55,-45,21}, -{55,-45,22}, -{55,-45,23}, -{55,-45,24}, -{55,-45,25}, -{55,-45,26}, -{55,-45,27}, -{55,-45,28}, -{55,-45,29}, -{55,-45,30}, -{55,-45,31}, -{55,-45,32}, -{55,-45,33}, -{55,-45,34}, -{55,-45,35}, -{55,-45,36}, -{55,-45,37}, -{55,-45,38}, -{55,-45,39}, -{55,-45,40}, -{55,-45,41}, -{55,-45,42}, -{55,-45,43}, -{55,-45,44}, -{55,-45,45}, -{55,-45,46}, -{55,-45,47}, -{55,-45,48}, -{55,-45,49}, -{55,-45,50}, -{55,-45,51}, -{55,-45,52}, -{55,-45,53}, -{55,-45,54}, -{55,-45,55}, -{55,-45,56}, -{55,-45,57}, -{55,-44,12}, -{55,-44,13}, -{55,-44,14}, -{55,-44,15}, -{55,-44,16}, -{55,-44,17}, -{55,-44,18}, -{55,-44,19}, -{55,-44,20}, -{55,-44,21}, -{55,-44,22}, -{55,-44,23}, -{55,-44,24}, -{55,-44,25}, -{55,-44,26}, -{55,-44,27}, -{55,-44,28}, -{55,-44,29}, -{55,-44,30}, -{55,-44,31}, -{55,-44,32}, -{55,-44,33}, -{55,-44,34}, -{55,-44,35}, -{55,-44,36}, -{55,-44,37}, -{55,-44,38}, -{55,-44,39}, -{55,-44,40}, -{55,-44,41}, -{55,-44,42}, -{55,-44,43}, -{55,-44,44}, -{55,-44,45}, -{55,-44,46}, -{55,-44,47}, -{55,-44,48}, -{55,-44,49}, -{55,-44,50}, -{55,-44,51}, -{55,-44,52}, -{55,-44,53}, -{55,-44,54}, -{55,-44,55}, -{55,-44,56}, -{55,-44,57}, -{55,-43,10}, -{55,-43,11}, -{55,-43,12}, -{55,-43,13}, -{55,-43,14}, -{55,-43,15}, -{55,-43,16}, -{55,-43,17}, -{55,-43,18}, -{55,-43,19}, -{55,-43,20}, -{55,-43,21}, -{55,-43,22}, -{55,-43,23}, -{55,-43,24}, -{55,-43,25}, -{55,-43,26}, -{55,-43,27}, -{55,-43,28}, -{55,-43,29}, -{55,-43,30}, -{55,-43,31}, -{55,-43,32}, -{55,-43,33}, -{55,-43,34}, -{55,-43,35}, -{55,-43,36}, -{55,-43,37}, -{55,-43,38}, -{55,-43,39}, -{55,-43,40}, -{55,-43,41}, -{55,-43,42}, -{55,-43,43}, -{55,-43,44}, -{55,-43,45}, -{55,-43,46}, -{55,-43,47}, -{55,-43,48}, -{55,-43,49}, -{55,-43,50}, -{55,-43,51}, -{55,-43,52}, -{55,-43,53}, -{55,-43,54}, -{55,-43,55}, -{55,-43,56}, -{55,-43,57}, -{55,-42,8}, -{55,-42,9}, -{55,-42,10}, -{55,-42,11}, -{55,-42,12}, -{55,-42,13}, -{55,-42,14}, -{55,-42,15}, -{55,-42,16}, -{55,-42,17}, -{55,-42,18}, -{55,-42,19}, -{55,-42,20}, -{55,-42,21}, -{55,-42,22}, -{55,-42,23}, -{55,-42,24}, -{55,-42,25}, -{55,-42,26}, -{55,-42,27}, -{55,-42,28}, -{55,-42,29}, -{55,-42,30}, -{55,-42,31}, -{55,-42,32}, -{55,-42,33}, -{55,-42,34}, -{55,-42,35}, -{55,-42,36}, -{55,-42,37}, -{55,-42,38}, -{55,-42,39}, -{55,-42,40}, -{55,-42,41}, -{55,-42,42}, -{55,-42,43}, -{55,-42,44}, -{55,-42,45}, -{55,-42,46}, -{55,-42,47}, -{55,-42,48}, -{55,-42,49}, -{55,-42,50}, -{55,-42,51}, -{55,-42,52}, -{55,-42,53}, -{55,-42,54}, -{55,-42,55}, -{55,-42,56}, -{55,-42,57}, -{55,-41,6}, -{55,-41,7}, -{55,-41,8}, -{55,-41,9}, -{55,-41,10}, -{55,-41,11}, -{55,-41,12}, -{55,-41,13}, -{55,-41,14}, -{55,-41,15}, -{55,-41,16}, -{55,-41,17}, -{55,-41,18}, -{55,-41,19}, -{55,-41,20}, -{55,-41,21}, -{55,-41,22}, -{55,-41,23}, -{55,-41,24}, -{55,-41,25}, -{55,-41,26}, -{55,-41,27}, -{55,-41,28}, -{55,-41,29}, -{55,-41,30}, -{55,-41,31}, -{55,-41,32}, -{55,-41,33}, -{55,-41,34}, -{55,-41,35}, -{55,-41,36}, -{55,-41,37}, -{55,-41,38}, -{55,-41,39}, -{55,-41,40}, -{55,-41,41}, -{55,-41,42}, -{55,-41,43}, -{55,-41,44}, -{55,-41,45}, -{55,-41,46}, -{55,-41,47}, -{55,-41,48}, -{55,-41,49}, -{55,-41,50}, -{55,-41,51}, -{55,-41,52}, -{55,-41,53}, -{55,-41,54}, -{55,-41,55}, -{55,-41,56}, -{55,-41,57}, -{55,-40,5}, -{55,-40,6}, -{55,-40,7}, -{55,-40,8}, -{55,-40,9}, -{55,-40,10}, -{55,-40,11}, -{55,-40,12}, -{55,-40,13}, -{55,-40,14}, -{55,-40,15}, -{55,-40,16}, -{55,-40,17}, -{55,-40,18}, -{55,-40,19}, -{55,-40,20}, -{55,-40,21}, -{55,-40,22}, -{55,-40,23}, -{55,-40,24}, -{55,-40,25}, -{55,-40,26}, -{55,-40,27}, -{55,-40,28}, -{55,-40,29}, -{55,-40,30}, -{55,-40,31}, -{55,-40,32}, -{55,-40,33}, -{55,-40,34}, -{55,-40,35}, -{55,-40,36}, -{55,-40,37}, -{55,-40,38}, -{55,-40,39}, -{55,-40,40}, -{55,-40,41}, -{55,-40,42}, -{55,-40,43}, -{55,-40,44}, -{55,-40,45}, -{55,-40,46}, -{55,-40,47}, -{55,-40,48}, -{55,-40,49}, -{55,-40,50}, -{55,-40,51}, -{55,-40,52}, -{55,-40,53}, -{55,-40,54}, -{55,-40,55}, -{55,-40,56}, -{55,-40,57}, -{55,-39,3}, -{55,-39,4}, -{55,-39,5}, -{55,-39,6}, -{55,-39,7}, -{55,-39,8}, -{55,-39,9}, -{55,-39,10}, -{55,-39,11}, -{55,-39,12}, -{55,-39,13}, -{55,-39,14}, -{55,-39,15}, -{55,-39,16}, -{55,-39,17}, -{55,-39,18}, -{55,-39,19}, -{55,-39,20}, -{55,-39,21}, -{55,-39,22}, -{55,-39,23}, -{55,-39,24}, -{55,-39,25}, -{55,-39,26}, -{55,-39,27}, -{55,-39,28}, -{55,-39,29}, -{55,-39,30}, -{55,-39,31}, -{55,-39,32}, -{55,-39,33}, -{55,-39,34}, -{55,-39,35}, -{55,-39,36}, -{55,-39,37}, -{55,-39,38}, -{55,-39,39}, -{55,-39,40}, -{55,-39,41}, -{55,-39,42}, -{55,-39,43}, -{55,-39,44}, -{55,-39,45}, -{55,-39,46}, -{55,-39,47}, -{55,-39,48}, -{55,-39,49}, -{55,-39,50}, -{55,-39,51}, -{55,-39,52}, -{55,-39,53}, -{55,-39,54}, -{55,-39,55}, -{55,-39,56}, -{55,-39,57}, -{55,-39,58}, -{55,-38,1}, -{55,-38,2}, -{55,-38,3}, -{55,-38,4}, -{55,-38,5}, -{55,-38,6}, -{55,-38,7}, -{55,-38,8}, -{55,-38,9}, -{55,-38,10}, -{55,-38,11}, -{55,-38,12}, -{55,-38,13}, -{55,-38,14}, -{55,-38,15}, -{55,-38,16}, -{55,-38,17}, -{55,-38,18}, -{55,-38,19}, -{55,-38,20}, -{55,-38,21}, -{55,-38,22}, -{55,-38,23}, -{55,-38,24}, -{55,-38,25}, -{55,-38,26}, -{55,-38,27}, -{55,-38,28}, -{55,-38,29}, -{55,-38,30}, -{55,-38,31}, -{55,-38,32}, -{55,-38,33}, -{55,-38,34}, -{55,-38,35}, -{55,-38,36}, -{55,-38,37}, -{55,-38,38}, -{55,-38,39}, -{55,-38,40}, -{55,-38,41}, -{55,-38,42}, -{55,-38,43}, -{55,-38,44}, -{55,-38,45}, -{55,-38,46}, -{55,-38,47}, -{55,-38,48}, -{55,-38,49}, -{55,-38,50}, -{55,-38,51}, -{55,-38,52}, -{55,-38,53}, -{55,-38,54}, -{55,-38,55}, -{55,-38,56}, -{55,-38,57}, -{55,-38,58}, -{55,-37,-1}, -{55,-37,0}, -{55,-37,1}, -{55,-37,2}, -{55,-37,3}, -{55,-37,4}, -{55,-37,5}, -{55,-37,6}, -{55,-37,7}, -{55,-37,8}, -{55,-37,9}, -{55,-37,10}, -{55,-37,11}, -{55,-37,12}, -{55,-37,13}, -{55,-37,14}, -{55,-37,15}, -{55,-37,16}, -{55,-37,17}, -{55,-37,18}, -{55,-37,19}, -{55,-37,20}, -{55,-37,21}, -{55,-37,22}, -{55,-37,23}, -{55,-37,24}, -{55,-37,25}, -{55,-37,26}, -{55,-37,27}, -{55,-37,28}, -{55,-37,29}, -{55,-37,30}, -{55,-37,31}, -{55,-37,32}, -{55,-37,33}, -{55,-37,34}, -{55,-37,35}, -{55,-37,36}, -{55,-37,37}, -{55,-37,38}, -{55,-37,39}, -{55,-37,40}, -{55,-37,41}, -{55,-37,42}, -{55,-37,43}, -{55,-37,44}, -{55,-37,45}, -{55,-37,46}, -{55,-37,47}, -{55,-37,48}, -{55,-37,49}, -{55,-37,50}, -{55,-37,51}, -{55,-37,52}, -{55,-37,53}, -{55,-37,54}, -{55,-37,55}, -{55,-37,56}, -{55,-37,57}, -{55,-37,58}, -{55,-36,-2}, -{55,-36,-1}, -{55,-36,0}, -{55,-36,1}, -{55,-36,2}, -{55,-36,3}, -{55,-36,4}, -{55,-36,5}, -{55,-36,6}, -{55,-36,7}, -{55,-36,8}, -{55,-36,9}, -{55,-36,10}, -{55,-36,11}, -{55,-36,12}, -{55,-36,13}, -{55,-36,14}, -{55,-36,15}, -{55,-36,16}, -{55,-36,17}, -{55,-36,18}, -{55,-36,19}, -{55,-36,20}, -{55,-36,21}, -{55,-36,22}, -{55,-36,23}, -{55,-36,24}, -{55,-36,25}, -{55,-36,26}, -{55,-36,27}, -{55,-36,28}, -{55,-36,29}, -{55,-36,30}, -{55,-36,31}, -{55,-36,32}, -{55,-36,33}, -{55,-36,34}, -{55,-36,35}, -{55,-36,36}, -{55,-36,37}, -{55,-36,38}, -{55,-36,39}, -{55,-36,40}, -{55,-36,41}, -{55,-36,42}, -{55,-36,43}, -{55,-36,44}, -{55,-36,45}, -{55,-36,46}, -{55,-36,47}, -{55,-36,48}, -{55,-36,49}, -{55,-36,50}, -{55,-36,51}, -{55,-36,52}, -{55,-36,53}, -{55,-36,54}, -{55,-36,55}, -{55,-36,56}, -{55,-36,57}, -{55,-36,58}, -{55,-35,-4}, -{55,-35,-3}, -{55,-35,-2}, -{55,-35,-1}, -{55,-35,0}, -{55,-35,1}, -{55,-35,2}, -{55,-35,3}, -{55,-35,4}, -{55,-35,5}, -{55,-35,6}, -{55,-35,7}, -{55,-35,8}, -{55,-35,9}, -{55,-35,10}, -{55,-35,11}, -{55,-35,12}, -{55,-35,13}, -{55,-35,14}, -{55,-35,15}, -{55,-35,16}, -{55,-35,17}, -{55,-35,18}, -{55,-35,19}, -{55,-35,20}, -{55,-35,21}, -{55,-35,22}, -{55,-35,23}, -{55,-35,24}, -{55,-35,25}, -{55,-35,26}, -{55,-35,27}, -{55,-35,28}, -{55,-35,29}, -{55,-35,30}, -{55,-35,31}, -{55,-35,32}, -{55,-35,33}, -{55,-35,34}, -{55,-35,35}, -{55,-35,36}, -{55,-35,37}, -{55,-35,38}, -{55,-35,39}, -{55,-35,40}, -{55,-35,41}, -{55,-35,42}, -{55,-35,43}, -{55,-35,44}, -{55,-35,45}, -{55,-35,46}, -{55,-35,47}, -{55,-35,48}, -{55,-35,49}, -{55,-35,50}, -{55,-35,51}, -{55,-35,52}, -{55,-35,53}, -{55,-35,54}, -{55,-35,55}, -{55,-35,56}, -{55,-35,57}, -{55,-35,58}, -{55,-34,-6}, -{55,-34,-5}, -{55,-34,-4}, -{55,-34,-3}, -{55,-34,-2}, -{55,-34,-1}, -{55,-34,0}, -{55,-34,1}, -{55,-34,2}, -{55,-34,3}, -{55,-34,4}, -{55,-34,5}, -{55,-34,6}, -{55,-34,7}, -{55,-34,8}, -{55,-34,9}, -{55,-34,10}, -{55,-34,11}, -{55,-34,12}, -{55,-34,13}, -{55,-34,14}, -{55,-34,15}, -{55,-34,16}, -{55,-34,17}, -{55,-34,18}, -{55,-34,19}, -{55,-34,20}, -{55,-34,21}, -{55,-34,22}, -{55,-34,23}, -{55,-34,24}, -{55,-34,25}, -{55,-34,26}, -{55,-34,27}, -{55,-34,28}, -{55,-34,29}, -{55,-34,30}, -{55,-34,31}, -{55,-34,32}, -{55,-34,33}, -{55,-34,34}, -{55,-34,35}, -{55,-34,36}, -{55,-34,37}, -{55,-34,38}, -{55,-34,39}, -{55,-34,40}, -{55,-34,41}, -{55,-34,42}, -{55,-34,43}, -{55,-34,44}, -{55,-34,45}, -{55,-34,46}, -{55,-34,47}, -{55,-34,48}, -{55,-34,49}, -{55,-34,50}, -{55,-34,51}, -{55,-34,52}, -{55,-34,53}, -{55,-34,54}, -{55,-34,55}, -{55,-34,56}, -{55,-34,57}, -{55,-34,58}, -{55,-33,-7}, -{55,-33,-6}, -{55,-33,-5}, -{55,-33,-4}, -{55,-33,-3}, -{55,-33,-2}, -{55,-33,-1}, -{55,-33,0}, -{55,-33,1}, -{55,-33,2}, -{55,-33,3}, -{55,-33,4}, -{55,-33,5}, -{55,-33,6}, -{55,-33,7}, -{55,-33,8}, -{55,-33,9}, -{55,-33,10}, -{55,-33,11}, -{55,-33,12}, -{55,-33,13}, -{55,-33,14}, -{55,-33,15}, -{55,-33,16}, -{55,-33,17}, -{55,-33,18}, -{55,-33,19}, -{55,-33,20}, -{55,-33,21}, -{55,-33,22}, -{55,-33,23}, -{55,-33,24}, -{55,-33,25}, -{55,-33,26}, -{55,-33,27}, -{55,-33,28}, -{55,-33,29}, -{55,-33,30}, -{55,-33,31}, -{55,-33,32}, -{55,-33,33}, -{55,-33,34}, -{55,-33,35}, -{55,-33,36}, -{55,-33,37}, -{55,-33,38}, -{55,-33,39}, -{55,-33,40}, -{55,-33,41}, -{55,-33,42}, -{55,-33,43}, -{55,-33,44}, -{55,-33,45}, -{55,-33,46}, -{55,-33,47}, -{55,-33,48}, -{55,-33,49}, -{55,-33,50}, -{55,-33,51}, -{55,-33,52}, -{55,-33,53}, -{55,-33,54}, -{55,-33,55}, -{55,-33,56}, -{55,-33,57}, -{55,-33,58}, -{55,-32,-9}, -{55,-32,-8}, -{55,-32,-7}, -{55,-32,-6}, -{55,-32,-5}, -{55,-32,-4}, -{55,-32,-3}, -{55,-32,-2}, -{55,-32,-1}, -{55,-32,0}, -{55,-32,1}, -{55,-32,2}, -{55,-32,3}, -{55,-32,4}, -{55,-32,5}, -{55,-32,6}, -{55,-32,7}, -{55,-32,8}, -{55,-32,9}, -{55,-32,10}, -{55,-32,11}, -{55,-32,12}, -{55,-32,13}, -{55,-32,14}, -{55,-32,15}, -{55,-32,16}, -{55,-32,17}, -{55,-32,18}, -{55,-32,19}, -{55,-32,20}, -{55,-32,21}, -{55,-32,22}, -{55,-32,23}, -{55,-32,24}, -{55,-32,25}, -{55,-32,26}, -{55,-32,27}, -{55,-32,28}, -{55,-32,29}, -{55,-32,30}, -{55,-32,31}, -{55,-32,32}, -{55,-32,33}, -{55,-32,34}, -{55,-32,35}, -{55,-32,36}, -{55,-32,37}, -{55,-32,38}, -{55,-32,39}, -{55,-32,40}, -{55,-32,41}, -{55,-32,42}, -{55,-32,43}, -{55,-32,44}, -{55,-32,45}, -{55,-32,46}, -{55,-32,47}, -{55,-32,48}, -{55,-32,49}, -{55,-32,50}, -{55,-32,51}, -{55,-32,52}, -{55,-32,53}, -{55,-32,54}, -{55,-32,55}, -{55,-32,56}, -{55,-32,57}, -{55,-32,58}, -{55,-31,-11}, -{55,-31,-10}, -{55,-31,-9}, -{55,-31,-8}, -{55,-31,-7}, -{55,-31,-6}, -{55,-31,-5}, -{55,-31,-4}, -{55,-31,-3}, -{55,-31,-2}, -{55,-31,-1}, -{55,-31,0}, -{55,-31,1}, -{55,-31,2}, -{55,-31,3}, -{55,-31,4}, -{55,-31,5}, -{55,-31,6}, -{55,-31,7}, -{55,-31,8}, -{55,-31,9}, -{55,-31,10}, -{55,-31,11}, -{55,-31,12}, -{55,-31,13}, -{55,-31,14}, -{55,-31,15}, -{55,-31,16}, -{55,-31,17}, -{55,-31,18}, -{55,-31,19}, -{55,-31,20}, -{55,-31,21}, -{55,-31,22}, -{55,-31,23}, -{55,-31,24}, -{55,-31,25}, -{55,-31,26}, -{55,-31,27}, -{55,-31,28}, -{55,-31,29}, -{55,-31,30}, -{55,-31,31}, -{55,-31,32}, -{55,-31,33}, -{55,-31,34}, -{55,-31,35}, -{55,-31,36}, -{55,-31,37}, -{55,-31,38}, -{55,-31,39}, -{55,-31,40}, -{55,-31,41}, -{55,-31,42}, -{55,-31,43}, -{55,-31,44}, -{55,-31,45}, -{55,-31,46}, -{55,-31,47}, -{55,-31,48}, -{55,-31,49}, -{55,-31,50}, -{55,-31,51}, -{55,-31,52}, -{55,-31,53}, -{55,-31,54}, -{55,-31,55}, -{55,-31,56}, -{55,-31,57}, -{55,-31,58}, -{55,-30,-12}, -{55,-30,-11}, -{55,-30,-10}, -{55,-30,-9}, -{55,-30,-8}, -{55,-30,-7}, -{55,-30,-6}, -{55,-30,-5}, -{55,-30,-4}, -{55,-30,-3}, -{55,-30,-2}, -{55,-30,-1}, -{55,-30,0}, -{55,-30,1}, -{55,-30,2}, -{55,-30,3}, -{55,-30,4}, -{55,-30,5}, -{55,-30,6}, -{55,-30,7}, -{55,-30,8}, -{55,-30,9}, -{55,-30,10}, -{55,-30,11}, -{55,-30,12}, -{55,-30,13}, -{55,-30,14}, -{55,-30,15}, -{55,-30,16}, -{55,-30,17}, -{55,-30,18}, -{55,-30,19}, -{55,-30,20}, -{55,-30,21}, -{55,-30,22}, -{55,-30,23}, -{55,-30,24}, -{55,-30,25}, -{55,-30,26}, -{55,-30,27}, -{55,-30,28}, -{55,-30,29}, -{55,-30,30}, -{55,-30,31}, -{55,-30,32}, -{55,-30,33}, -{55,-30,34}, -{55,-30,35}, -{55,-30,36}, -{55,-30,37}, -{55,-30,38}, -{55,-30,39}, -{55,-30,40}, -{55,-30,41}, -{55,-30,42}, -{55,-30,43}, -{55,-30,44}, -{55,-30,45}, -{55,-30,46}, -{55,-30,47}, -{55,-30,48}, -{55,-30,49}, -{55,-30,50}, -{55,-30,51}, -{55,-30,52}, -{55,-30,53}, -{55,-30,54}, -{55,-30,55}, -{55,-30,56}, -{55,-30,57}, -{55,-30,58}, -{55,-29,-14}, -{55,-29,-13}, -{55,-29,-12}, -{55,-29,-11}, -{55,-29,-10}, -{55,-29,-9}, -{55,-29,-8}, -{55,-29,-7}, -{55,-29,-6}, -{55,-29,-5}, -{55,-29,-4}, -{55,-29,-3}, -{55,-29,-2}, -{55,-29,-1}, -{55,-29,0}, -{55,-29,1}, -{55,-29,2}, -{55,-29,3}, -{55,-29,4}, -{55,-29,5}, -{55,-29,6}, -{55,-29,7}, -{55,-29,8}, -{55,-29,9}, -{55,-29,10}, -{55,-29,11}, -{55,-29,12}, -{55,-29,13}, -{55,-29,14}, -{55,-29,15}, -{55,-29,16}, -{55,-29,17}, -{55,-29,18}, -{55,-29,19}, -{55,-29,20}, -{55,-29,21}, -{55,-29,22}, -{55,-29,23}, -{55,-29,24}, -{55,-29,25}, -{55,-29,26}, -{55,-29,27}, -{55,-29,28}, -{55,-29,29}, -{55,-29,30}, -{55,-29,31}, -{55,-29,32}, -{55,-29,33}, -{55,-29,34}, -{55,-29,35}, -{55,-29,36}, -{55,-29,37}, -{55,-29,38}, -{55,-29,39}, -{55,-29,40}, -{55,-29,41}, -{55,-29,42}, -{55,-29,43}, -{55,-29,44}, -{55,-29,45}, -{55,-29,46}, -{55,-29,47}, -{55,-29,48}, -{55,-29,49}, -{55,-29,50}, -{55,-29,51}, -{55,-29,52}, -{55,-29,53}, -{55,-29,54}, -{55,-29,55}, -{55,-29,56}, -{55,-29,57}, -{55,-29,58}, -{55,-28,-15}, -{55,-28,-14}, -{55,-28,-13}, -{55,-28,-12}, -{55,-28,-11}, -{55,-28,-10}, -{55,-28,-9}, -{55,-28,-8}, -{55,-28,-7}, -{55,-28,-6}, -{55,-28,-5}, -{55,-28,-4}, -{55,-28,-3}, -{55,-28,-2}, -{55,-28,-1}, -{55,-28,0}, -{55,-28,1}, -{55,-28,2}, -{55,-28,3}, -{55,-28,4}, -{55,-28,5}, -{55,-28,6}, -{55,-28,7}, -{55,-28,8}, -{55,-28,9}, -{55,-28,10}, -{55,-28,11}, -{55,-28,12}, -{55,-28,13}, -{55,-28,14}, -{55,-28,15}, -{55,-28,16}, -{55,-28,17}, -{55,-28,18}, -{55,-28,19}, -{55,-28,20}, -{55,-28,21}, -{55,-28,22}, -{55,-28,23}, -{55,-28,24}, -{55,-28,25}, -{55,-28,26}, -{55,-28,27}, -{55,-28,28}, -{55,-28,29}, -{55,-28,30}, -{55,-28,31}, -{55,-28,32}, -{55,-28,33}, -{55,-28,34}, -{55,-28,35}, -{55,-28,36}, -{55,-28,37}, -{55,-28,38}, -{55,-28,39}, -{55,-28,40}, -{55,-28,41}, -{55,-28,42}, -{55,-28,43}, -{55,-28,44}, -{55,-28,45}, -{55,-28,46}, -{55,-28,47}, -{55,-28,48}, -{55,-28,49}, -{55,-28,50}, -{55,-28,51}, -{55,-28,52}, -{55,-28,53}, -{55,-28,54}, -{55,-28,55}, -{55,-28,56}, -{55,-28,57}, -{55,-28,58}, -{55,-27,-16}, -{55,-27,-15}, -{55,-27,-14}, -{55,-27,-13}, -{55,-27,-12}, -{55,-27,-11}, -{55,-27,-10}, -{55,-27,-9}, -{55,-27,-8}, -{55,-27,-7}, -{55,-27,-6}, -{55,-27,-5}, -{55,-27,-4}, -{55,-27,-3}, -{55,-27,-2}, -{55,-27,-1}, -{55,-27,0}, -{55,-27,1}, -{55,-27,2}, -{55,-27,3}, -{55,-27,4}, -{55,-27,5}, -{55,-27,6}, -{55,-27,7}, -{55,-27,8}, -{55,-27,9}, -{55,-27,10}, -{55,-27,11}, -{55,-27,12}, -{55,-27,13}, -{55,-27,14}, -{55,-27,15}, -{55,-27,16}, -{55,-27,17}, -{55,-27,18}, -{55,-27,19}, -{55,-27,20}, -{55,-27,21}, -{55,-27,22}, -{55,-27,23}, -{55,-27,24}, -{55,-27,25}, -{55,-27,26}, -{55,-27,27}, -{55,-27,28}, -{55,-27,29}, -{55,-27,30}, -{55,-27,31}, -{55,-27,32}, -{55,-27,33}, -{55,-27,34}, -{55,-27,35}, -{55,-27,36}, -{55,-27,37}, -{55,-27,38}, -{55,-27,39}, -{55,-27,40}, -{55,-27,41}, -{55,-27,42}, -{55,-27,43}, -{55,-27,44}, -{55,-27,45}, -{55,-27,46}, -{55,-27,47}, -{55,-27,48}, -{55,-27,49}, -{55,-27,50}, -{55,-27,51}, -{55,-27,52}, -{55,-27,53}, -{55,-27,54}, -{55,-27,55}, -{55,-27,56}, -{55,-27,57}, -{55,-27,58}, -{55,-26,-18}, -{55,-26,-17}, -{55,-26,-16}, -{55,-26,-15}, -{55,-26,-14}, -{55,-26,-13}, -{55,-26,-12}, -{55,-26,-11}, -{55,-26,-10}, -{55,-26,-9}, -{55,-26,-8}, -{55,-26,-7}, -{55,-26,-6}, -{55,-26,-5}, -{55,-26,-4}, -{55,-26,-3}, -{55,-26,-2}, -{55,-26,-1}, -{55,-26,0}, -{55,-26,1}, -{55,-26,2}, -{55,-26,3}, -{55,-26,4}, -{55,-26,5}, -{55,-26,6}, -{55,-26,7}, -{55,-26,8}, -{55,-26,9}, -{55,-26,10}, -{55,-26,11}, -{55,-26,12}, -{55,-26,13}, -{55,-26,14}, -{55,-26,15}, -{55,-26,16}, -{55,-26,17}, -{55,-26,18}, -{55,-26,19}, -{55,-26,20}, -{55,-26,21}, -{55,-26,22}, -{55,-26,23}, -{55,-26,24}, -{55,-26,25}, -{55,-26,26}, -{55,-26,27}, -{55,-26,28}, -{55,-26,29}, -{55,-26,30}, -{55,-26,31}, -{55,-26,32}, -{55,-26,33}, -{55,-26,34}, -{55,-26,35}, -{55,-26,36}, -{55,-26,37}, -{55,-26,38}, -{55,-26,39}, -{55,-26,40}, -{55,-26,41}, -{55,-26,42}, -{55,-26,43}, -{55,-26,44}, -{55,-26,45}, -{55,-26,46}, -{55,-26,47}, -{55,-26,48}, -{55,-26,49}, -{55,-26,50}, -{55,-26,51}, -{55,-26,52}, -{55,-26,53}, -{55,-26,54}, -{55,-26,55}, -{55,-26,56}, -{55,-26,57}, -{55,-26,58}, -{55,-25,-19}, -{55,-25,-18}, -{55,-25,-17}, -{55,-25,-16}, -{55,-25,-15}, -{55,-25,-14}, -{55,-25,-13}, -{55,-25,-12}, -{55,-25,-11}, -{55,-25,-10}, -{55,-25,-9}, -{55,-25,-8}, -{55,-25,-7}, -{55,-25,-6}, -{55,-25,-5}, -{55,-25,-4}, -{55,-25,-3}, -{55,-25,-2}, -{55,-25,-1}, -{55,-25,0}, -{55,-25,1}, -{55,-25,2}, -{55,-25,3}, -{55,-25,4}, -{55,-25,5}, -{55,-25,6}, -{55,-25,7}, -{55,-25,8}, -{55,-25,9}, -{55,-25,10}, -{55,-25,11}, -{55,-25,12}, -{55,-25,13}, -{55,-25,14}, -{55,-25,15}, -{55,-25,16}, -{55,-25,17}, -{55,-25,18}, -{55,-25,19}, -{55,-25,20}, -{55,-25,21}, -{55,-25,22}, -{55,-25,23}, -{55,-25,24}, -{55,-25,25}, -{55,-25,26}, -{55,-25,27}, -{55,-25,28}, -{55,-25,29}, -{55,-25,30}, -{55,-25,31}, -{55,-25,32}, -{55,-25,33}, -{55,-25,34}, -{55,-25,35}, -{55,-25,36}, -{55,-25,37}, -{55,-25,38}, -{55,-25,39}, -{55,-25,40}, -{55,-25,41}, -{55,-25,42}, -{55,-25,43}, -{55,-25,44}, -{55,-25,45}, -{55,-25,46}, -{55,-25,47}, -{55,-25,48}, -{55,-25,49}, -{55,-25,50}, -{55,-25,51}, -{55,-25,52}, -{55,-25,53}, -{55,-25,54}, -{55,-25,55}, -{55,-25,56}, -{55,-25,57}, -{55,-25,58}, -{55,-24,-21}, -{55,-24,-20}, -{55,-24,-19}, -{55,-24,-18}, -{55,-24,-17}, -{55,-24,-16}, -{55,-24,-15}, -{55,-24,-14}, -{55,-24,-13}, -{55,-24,-12}, -{55,-24,-11}, -{55,-24,-10}, -{55,-24,-9}, -{55,-24,-8}, -{55,-24,-7}, -{55,-24,-6}, -{55,-24,-5}, -{55,-24,-4}, -{55,-24,-3}, -{55,-24,-2}, -{55,-24,-1}, -{55,-24,0}, -{55,-24,1}, -{55,-24,2}, -{55,-24,3}, -{55,-24,4}, -{55,-24,5}, -{55,-24,6}, -{55,-24,7}, -{55,-24,8}, -{55,-24,9}, -{55,-24,10}, -{55,-24,11}, -{55,-24,12}, -{55,-24,13}, -{55,-24,14}, -{55,-24,15}, -{55,-24,16}, -{55,-24,17}, -{55,-24,18}, -{55,-24,19}, -{55,-24,20}, -{55,-24,21}, -{55,-24,22}, -{55,-24,23}, -{55,-24,24}, -{55,-24,25}, -{55,-24,26}, -{55,-24,27}, -{55,-24,28}, -{55,-24,29}, -{55,-24,30}, -{55,-24,31}, -{55,-24,32}, -{55,-24,33}, -{55,-24,34}, -{55,-24,35}, -{55,-24,36}, -{55,-24,37}, -{55,-24,38}, -{55,-24,39}, -{55,-24,40}, -{55,-24,41}, -{55,-24,42}, -{55,-24,43}, -{55,-24,44}, -{55,-24,45}, -{55,-24,46}, -{55,-24,47}, -{55,-24,48}, -{55,-24,49}, -{55,-24,50}, -{55,-24,51}, -{55,-24,52}, -{55,-24,53}, -{55,-24,54}, -{55,-24,55}, -{55,-24,56}, -{55,-24,57}, -{55,-24,58}, -{55,-23,-22}, -{55,-23,-21}, -{55,-23,-20}, -{55,-23,-19}, -{55,-23,-18}, -{55,-23,-17}, -{55,-23,-16}, -{55,-23,-15}, -{55,-23,-14}, -{55,-23,-13}, -{55,-23,-12}, -{55,-23,-11}, -{55,-23,-10}, -{55,-23,-9}, -{55,-23,-8}, -{55,-23,-7}, -{55,-23,-6}, -{55,-23,-5}, -{55,-23,-4}, -{55,-23,-3}, -{55,-23,-2}, -{55,-23,-1}, -{55,-23,0}, -{55,-23,1}, -{55,-23,2}, -{55,-23,3}, -{55,-23,4}, -{55,-23,5}, -{55,-23,6}, -{55,-23,7}, -{55,-23,8}, -{55,-23,9}, -{55,-23,10}, -{55,-23,11}, -{55,-23,12}, -{55,-23,13}, -{55,-23,14}, -{55,-23,15}, -{55,-23,16}, -{55,-23,17}, -{55,-23,18}, -{55,-23,19}, -{55,-23,20}, -{55,-23,21}, -{55,-23,22}, -{55,-23,23}, -{55,-23,24}, -{55,-23,25}, -{55,-23,26}, -{55,-23,27}, -{55,-23,28}, -{55,-23,29}, -{55,-23,30}, -{55,-23,31}, -{55,-23,32}, -{55,-23,33}, -{55,-23,34}, -{55,-23,35}, -{55,-23,36}, -{55,-23,37}, -{55,-23,38}, -{55,-23,39}, -{55,-23,40}, -{55,-23,41}, -{55,-23,42}, -{55,-23,43}, -{55,-23,44}, -{55,-23,45}, -{55,-23,46}, -{55,-23,47}, -{55,-23,48}, -{55,-23,49}, -{55,-23,50}, -{55,-23,51}, -{55,-23,52}, -{55,-23,53}, -{55,-23,54}, -{55,-23,55}, -{55,-23,56}, -{55,-23,57}, -{55,-23,58}, -{55,-22,-24}, -{55,-22,-23}, -{55,-22,-22}, -{55,-22,-21}, -{55,-22,-20}, -{55,-22,-19}, -{55,-22,-18}, -{55,-22,-17}, -{55,-22,-16}, -{55,-22,-15}, -{55,-22,-14}, -{55,-22,-13}, -{55,-22,-12}, -{55,-22,-11}, -{55,-22,-10}, -{55,-22,-9}, -{55,-22,-8}, -{55,-22,-7}, -{55,-22,-6}, -{55,-22,-5}, -{55,-22,-4}, -{55,-22,-3}, -{55,-22,-2}, -{55,-22,-1}, -{55,-22,0}, -{55,-22,1}, -{55,-22,2}, -{55,-22,3}, -{55,-22,4}, -{55,-22,5}, -{55,-22,6}, -{55,-22,7}, -{55,-22,8}, -{55,-22,9}, -{55,-22,10}, -{55,-22,11}, -{55,-22,12}, -{55,-22,13}, -{55,-22,14}, -{55,-22,15}, -{55,-22,16}, -{55,-22,17}, -{55,-22,18}, -{55,-22,19}, -{55,-22,20}, -{55,-22,21}, -{55,-22,22}, -{55,-22,23}, -{55,-22,24}, -{55,-22,25}, -{55,-22,26}, -{55,-22,27}, -{55,-22,28}, -{55,-22,29}, -{55,-22,30}, -{55,-22,31}, -{55,-22,32}, -{55,-22,33}, -{55,-22,34}, -{55,-22,35}, -{55,-22,36}, -{55,-22,37}, -{55,-22,38}, -{55,-22,39}, -{55,-22,40}, -{55,-22,41}, -{55,-22,42}, -{55,-22,43}, -{55,-22,44}, -{55,-22,45}, -{55,-22,46}, -{55,-22,47}, -{55,-22,48}, -{55,-22,49}, -{55,-22,50}, -{55,-22,51}, -{55,-22,52}, -{55,-22,53}, -{55,-22,54}, -{55,-22,55}, -{55,-22,56}, -{55,-22,57}, -{55,-22,58}, -{55,-21,-25}, -{55,-21,-24}, -{55,-21,-23}, -{55,-21,-22}, -{55,-21,-21}, -{55,-21,-20}, -{55,-21,-19}, -{55,-21,-18}, -{55,-21,-17}, -{55,-21,-16}, -{55,-21,-15}, -{55,-21,-14}, -{55,-21,-13}, -{55,-21,-12}, -{55,-21,-11}, -{55,-21,-10}, -{55,-21,-9}, -{55,-21,-8}, -{55,-21,-7}, -{55,-21,-6}, -{55,-21,-5}, -{55,-21,-4}, -{55,-21,-3}, -{55,-21,-2}, -{55,-21,-1}, -{55,-21,0}, -{55,-21,1}, -{55,-21,2}, -{55,-21,3}, -{55,-21,4}, -{55,-21,5}, -{55,-21,6}, -{55,-21,7}, -{55,-21,8}, -{55,-21,9}, -{55,-21,10}, -{55,-21,11}, -{55,-21,12}, -{55,-21,13}, -{55,-21,14}, -{55,-21,15}, -{55,-21,16}, -{55,-21,17}, -{55,-21,18}, -{55,-21,19}, -{55,-21,20}, -{55,-21,21}, -{55,-21,22}, -{55,-21,23}, -{55,-21,24}, -{55,-21,25}, -{55,-21,26}, -{55,-21,27}, -{55,-21,28}, -{55,-21,29}, -{55,-21,30}, -{55,-21,31}, -{55,-21,32}, -{55,-21,33}, -{55,-21,34}, -{55,-21,35}, -{55,-21,36}, -{55,-21,37}, -{55,-21,38}, -{55,-21,39}, -{55,-21,40}, -{55,-21,41}, -{55,-21,42}, -{55,-21,43}, -{55,-21,44}, -{55,-21,45}, -{55,-21,46}, -{55,-21,47}, -{55,-21,48}, -{55,-21,49}, -{55,-21,50}, -{55,-21,51}, -{55,-21,52}, -{55,-21,53}, -{55,-21,54}, -{55,-21,55}, -{55,-21,56}, -{55,-21,57}, -{55,-21,58}, -{55,-21,59}, -{55,-20,-26}, -{55,-20,-25}, -{55,-20,-24}, -{55,-20,-23}, -{55,-20,-22}, -{55,-20,-21}, -{55,-20,-20}, -{55,-20,-19}, -{55,-20,-18}, -{55,-20,-17}, -{55,-20,-16}, -{55,-20,-15}, -{55,-20,-14}, -{55,-20,-13}, -{55,-20,-12}, -{55,-20,-11}, -{55,-20,-10}, -{55,-20,-9}, -{55,-20,-8}, -{55,-20,-7}, -{55,-20,-6}, -{55,-20,-5}, -{55,-20,-4}, -{55,-20,-3}, -{55,-20,-2}, -{55,-20,-1}, -{55,-20,0}, -{55,-20,1}, -{55,-20,2}, -{55,-20,3}, -{55,-20,4}, -{55,-20,5}, -{55,-20,6}, -{55,-20,7}, -{55,-20,8}, -{55,-20,9}, -{55,-20,10}, -{55,-20,11}, -{55,-20,12}, -{55,-20,13}, -{55,-20,14}, -{55,-20,15}, -{55,-20,16}, -{55,-20,17}, -{55,-20,18}, -{55,-20,19}, -{55,-20,20}, -{55,-20,21}, -{55,-20,22}, -{55,-20,23}, -{55,-20,24}, -{55,-20,25}, -{55,-20,26}, -{55,-20,27}, -{55,-20,28}, -{55,-20,29}, -{55,-20,30}, -{55,-20,31}, -{55,-20,32}, -{55,-20,33}, -{55,-20,34}, -{55,-20,35}, -{55,-20,36}, -{55,-20,37}, -{55,-20,38}, -{55,-20,39}, -{55,-20,40}, -{55,-20,41}, -{55,-20,42}, -{55,-20,43}, -{55,-20,44}, -{55,-20,45}, -{55,-20,46}, -{55,-20,47}, -{55,-20,48}, -{55,-20,49}, -{55,-20,50}, -{55,-20,51}, -{55,-20,52}, -{55,-20,53}, -{55,-20,54}, -{55,-20,55}, -{55,-20,56}, -{55,-20,57}, -{55,-20,58}, -{55,-20,59}, -{55,-19,-28}, -{55,-19,-27}, -{55,-19,-26}, -{55,-19,-25}, -{55,-19,-24}, -{55,-19,-23}, -{55,-19,-22}, -{55,-19,-21}, -{55,-19,-20}, -{55,-19,-19}, -{55,-19,-18}, -{55,-19,-17}, -{55,-19,-16}, -{55,-19,-15}, -{55,-19,-14}, -{55,-19,-13}, -{55,-19,-12}, -{55,-19,-11}, -{55,-19,-10}, -{55,-19,-9}, -{55,-19,-8}, -{55,-19,-7}, -{55,-19,-6}, -{55,-19,-5}, -{55,-19,-4}, -{55,-19,-3}, -{55,-19,-2}, -{55,-19,-1}, -{55,-19,0}, -{55,-19,1}, -{55,-19,2}, -{55,-19,3}, -{55,-19,4}, -{55,-19,5}, -{55,-19,6}, -{55,-19,7}, -{55,-19,8}, -{55,-19,9}, -{55,-19,10}, -{55,-19,11}, -{55,-19,12}, -{55,-19,13}, -{55,-19,14}, -{55,-19,15}, -{55,-19,16}, -{55,-19,17}, -{55,-19,18}, -{55,-19,19}, -{55,-19,20}, -{55,-19,21}, -{55,-19,22}, -{55,-19,23}, -{55,-19,24}, -{55,-19,25}, -{55,-19,26}, -{55,-19,27}, -{55,-19,28}, -{55,-19,29}, -{55,-19,30}, -{55,-19,31}, -{55,-19,32}, -{55,-19,33}, -{55,-19,34}, -{55,-19,35}, -{55,-19,36}, -{55,-19,37}, -{55,-19,38}, -{55,-19,39}, -{55,-19,40}, -{55,-19,41}, -{55,-19,42}, -{55,-19,43}, -{55,-19,44}, -{55,-19,45}, -{55,-19,46}, -{55,-19,47}, -{55,-19,48}, -{55,-19,49}, -{55,-19,50}, -{55,-19,51}, -{55,-19,52}, -{55,-19,53}, -{55,-19,54}, -{55,-19,55}, -{55,-19,56}, -{55,-19,57}, -{55,-19,58}, -{55,-19,59}, -{55,-18,-29}, -{55,-18,-28}, -{55,-18,-27}, -{55,-18,-26}, -{55,-18,-25}, -{55,-18,-24}, -{55,-18,-23}, -{55,-18,-22}, -{55,-18,-21}, -{55,-18,-20}, -{55,-18,-19}, -{55,-18,-18}, -{55,-18,-17}, -{55,-18,-16}, -{55,-18,-15}, -{55,-18,-14}, -{55,-18,-13}, -{55,-18,-12}, -{55,-18,-11}, -{55,-18,-10}, -{55,-18,-9}, -{55,-18,-8}, -{55,-18,-7}, -{55,-18,-6}, -{55,-18,-5}, -{55,-18,-4}, -{55,-18,-3}, -{55,-18,-2}, -{55,-18,-1}, -{55,-18,0}, -{55,-18,1}, -{55,-18,2}, -{55,-18,3}, -{55,-18,4}, -{55,-18,5}, -{55,-18,6}, -{55,-18,7}, -{55,-18,8}, -{55,-18,9}, -{55,-18,10}, -{55,-18,11}, -{55,-18,12}, -{55,-18,13}, -{55,-18,14}, -{55,-18,15}, -{55,-18,16}, -{55,-18,17}, -{55,-18,18}, -{55,-18,19}, -{55,-18,20}, -{55,-18,21}, -{55,-18,22}, -{55,-18,23}, -{55,-18,24}, -{55,-18,25}, -{55,-18,26}, -{55,-18,27}, -{55,-18,28}, -{55,-18,29}, -{55,-18,30}, -{55,-18,31}, -{55,-18,32}, -{55,-18,33}, -{55,-18,34}, -{55,-18,35}, -{55,-18,36}, -{55,-18,37}, -{55,-18,38}, -{55,-18,39}, -{55,-18,40}, -{55,-18,41}, -{55,-18,42}, -{55,-18,43}, -{55,-18,44}, -{55,-18,45}, -{55,-18,46}, -{55,-18,47}, -{55,-18,48}, -{55,-18,49}, -{55,-18,50}, -{55,-18,51}, -{55,-18,52}, -{55,-18,53}, -{55,-18,54}, -{55,-18,55}, -{55,-18,56}, -{55,-18,57}, -{55,-18,58}, -{55,-18,59}, -{55,-17,-30}, -{55,-17,-29}, -{55,-17,-28}, -{55,-17,-27}, -{55,-17,-26}, -{55,-17,-25}, -{55,-17,-24}, -{55,-17,-23}, -{55,-17,-22}, -{55,-17,-21}, -{55,-17,-20}, -{55,-17,-19}, -{55,-17,-18}, -{55,-17,-17}, -{55,-17,-16}, -{55,-17,-15}, -{55,-17,-14}, -{55,-17,-13}, -{55,-17,-12}, -{55,-17,-11}, -{55,-17,-10}, -{55,-17,-9}, -{55,-17,-8}, -{55,-17,-7}, -{55,-17,-6}, -{55,-17,-5}, -{55,-17,-4}, -{55,-17,-3}, -{55,-17,-2}, -{55,-17,-1}, -{55,-17,0}, -{55,-17,1}, -{55,-17,2}, -{55,-17,3}, -{55,-17,4}, -{55,-17,5}, -{55,-17,6}, -{55,-17,7}, -{55,-17,8}, -{55,-17,9}, -{55,-17,10}, -{55,-17,11}, -{55,-17,12}, -{55,-17,13}, -{55,-17,14}, -{55,-17,15}, -{55,-17,16}, -{55,-17,17}, -{55,-17,18}, -{55,-17,19}, -{55,-17,20}, -{55,-17,21}, -{55,-17,22}, -{55,-17,23}, -{55,-17,24}, -{55,-17,25}, -{55,-17,26}, -{55,-17,27}, -{55,-17,28}, -{55,-17,29}, -{55,-17,30}, -{55,-17,31}, -{55,-17,32}, -{55,-17,33}, -{55,-17,34}, -{55,-17,35}, -{55,-17,36}, -{55,-17,37}, -{55,-17,38}, -{55,-17,39}, -{55,-17,40}, -{55,-17,41}, -{55,-17,42}, -{55,-17,43}, -{55,-17,44}, -{55,-17,45}, -{55,-17,46}, -{55,-17,47}, -{55,-17,48}, -{55,-17,49}, -{55,-17,50}, -{55,-17,51}, -{55,-17,52}, -{55,-17,53}, -{55,-17,54}, -{55,-17,55}, -{55,-17,56}, -{55,-17,57}, -{55,-17,58}, -{55,-17,59}, -{55,-16,-31}, -{55,-16,-30}, -{55,-16,-29}, -{55,-16,-28}, -{55,-16,-27}, -{55,-16,-26}, -{55,-16,-25}, -{55,-16,-24}, -{55,-16,-23}, -{55,-16,-22}, -{55,-16,-21}, -{55,-16,-20}, -{55,-16,-19}, -{55,-16,-18}, -{55,-16,-17}, -{55,-16,-16}, -{55,-16,-15}, -{55,-16,-14}, -{55,-16,-13}, -{55,-16,-12}, -{55,-16,-11}, -{55,-16,-10}, -{55,-16,-9}, -{55,-16,-8}, -{55,-16,-7}, -{55,-16,-6}, -{55,-16,-5}, -{55,-16,-4}, -{55,-16,-3}, -{55,-16,-2}, -{55,-16,-1}, -{55,-16,0}, -{55,-16,1}, -{55,-16,2}, -{55,-16,3}, -{55,-16,4}, -{55,-16,5}, -{55,-16,6}, -{55,-16,7}, -{55,-16,8}, -{55,-16,9}, -{55,-16,10}, -{55,-16,11}, -{55,-16,12}, -{55,-16,13}, -{55,-16,14}, -{55,-16,15}, -{55,-16,16}, -{55,-16,17}, -{55,-16,18}, -{55,-16,19}, -{55,-16,20}, -{55,-16,21}, -{55,-16,22}, -{55,-16,23}, -{55,-16,24}, -{55,-16,25}, -{55,-16,26}, -{55,-16,27}, -{55,-16,28}, -{55,-16,29}, -{55,-16,30}, -{55,-16,31}, -{55,-16,32}, -{55,-16,33}, -{55,-16,34}, -{55,-16,35}, -{55,-16,36}, -{55,-16,37}, -{55,-16,38}, -{55,-16,39}, -{55,-16,40}, -{55,-16,41}, -{55,-16,42}, -{55,-16,43}, -{55,-16,44}, -{55,-16,45}, -{55,-16,46}, -{55,-16,47}, -{55,-16,48}, -{55,-16,49}, -{55,-16,50}, -{55,-16,51}, -{55,-16,52}, -{55,-16,53}, -{55,-16,54}, -{55,-16,55}, -{55,-16,56}, -{55,-16,57}, -{55,-16,58}, -{55,-16,59}, -{55,-15,-33}, -{55,-15,-32}, -{55,-15,-31}, -{55,-15,-30}, -{55,-15,-29}, -{55,-15,-28}, -{55,-15,-27}, -{55,-15,-26}, -{55,-15,-25}, -{55,-15,-24}, -{55,-15,-23}, -{55,-15,-22}, -{55,-15,-21}, -{55,-15,-20}, -{55,-15,-19}, -{55,-15,-18}, -{55,-15,-17}, -{55,-15,-16}, -{55,-15,-15}, -{55,-15,-14}, -{55,-15,-13}, -{55,-15,-12}, -{55,-15,-11}, -{55,-15,-10}, -{55,-15,-9}, -{55,-15,-8}, -{55,-15,-7}, -{55,-15,-6}, -{55,-15,-5}, -{55,-15,-4}, -{55,-15,-3}, -{55,-15,-2}, -{55,-15,-1}, -{55,-15,0}, -{55,-15,1}, -{55,-15,2}, -{55,-15,3}, -{55,-15,4}, -{55,-15,5}, -{55,-15,6}, -{55,-15,7}, -{55,-15,8}, -{55,-15,9}, -{55,-15,10}, -{55,-15,11}, -{55,-15,12}, -{55,-15,13}, -{55,-15,14}, -{55,-15,15}, -{55,-15,16}, -{55,-15,17}, -{55,-15,18}, -{55,-15,19}, -{55,-15,20}, -{55,-15,21}, -{55,-15,22}, -{55,-15,23}, -{55,-15,24}, -{55,-15,25}, -{55,-15,26}, -{55,-15,27}, -{55,-15,28}, -{55,-15,29}, -{55,-15,30}, -{55,-15,31}, -{55,-15,32}, -{55,-15,33}, -{55,-15,34}, -{55,-15,35}, -{55,-15,36}, -{55,-15,37}, -{55,-15,38}, -{55,-15,39}, -{55,-15,40}, -{55,-15,41}, -{55,-15,42}, -{55,-15,43}, -{55,-15,44}, -{55,-15,45}, -{55,-15,46}, -{55,-15,47}, -{55,-15,48}, -{55,-15,49}, -{55,-15,50}, -{55,-15,51}, -{55,-15,52}, -{55,-15,53}, -{55,-15,54}, -{55,-15,55}, -{55,-15,56}, -{55,-15,57}, -{55,-15,58}, -{55,-15,59}, -{55,-14,-34}, -{55,-14,-33}, -{55,-14,-32}, -{55,-14,-31}, -{55,-14,-30}, -{55,-14,-29}, -{55,-14,-28}, -{55,-14,-27}, -{55,-14,-26}, -{55,-14,-25}, -{55,-14,-24}, -{55,-14,-23}, -{55,-14,-22}, -{55,-14,-21}, -{55,-14,-20}, -{55,-14,-19}, -{55,-14,-18}, -{55,-14,-17}, -{55,-14,-16}, -{55,-14,-15}, -{55,-14,-14}, -{55,-14,-13}, -{55,-14,-12}, -{55,-14,-11}, -{55,-14,-10}, -{55,-14,-9}, -{55,-14,-8}, -{55,-14,-7}, -{55,-14,-6}, -{55,-14,-5}, -{55,-14,-4}, -{55,-14,-3}, -{55,-14,-2}, -{55,-14,-1}, -{55,-14,0}, -{55,-14,1}, -{55,-14,2}, -{55,-14,3}, -{55,-14,4}, -{55,-14,5}, -{55,-14,6}, -{55,-14,7}, -{55,-14,8}, -{55,-14,9}, -{55,-14,10}, -{55,-14,11}, -{55,-14,12}, -{55,-14,13}, -{55,-14,14}, -{55,-14,15}, -{55,-14,16}, -{55,-14,17}, -{55,-14,18}, -{55,-14,19}, -{55,-14,20}, -{55,-14,21}, -{55,-14,22}, -{55,-14,23}, -{55,-14,24}, -{55,-14,25}, -{55,-14,26}, -{55,-14,27}, -{55,-14,28}, -{55,-14,29}, -{55,-14,30}, -{55,-14,31}, -{55,-14,32}, -{55,-14,33}, -{55,-14,34}, -{55,-14,35}, -{55,-14,36}, -{55,-14,37}, -{55,-14,38}, -{55,-14,39}, -{55,-14,40}, -{55,-14,41}, -{55,-14,42}, -{55,-14,43}, -{55,-14,44}, -{55,-14,45}, -{55,-14,46}, -{55,-14,47}, -{55,-14,48}, -{55,-14,49}, -{55,-14,50}, -{55,-14,51}, -{55,-14,52}, -{55,-14,53}, -{55,-14,54}, -{55,-14,55}, -{55,-14,56}, -{55,-14,57}, -{55,-14,58}, -{55,-14,59}, -{55,-13,-35}, -{55,-13,-34}, -{55,-13,-33}, -{55,-13,-32}, -{55,-13,-31}, -{55,-13,-30}, -{55,-13,-29}, -{55,-13,-28}, -{55,-13,-27}, -{55,-13,-26}, -{55,-13,-25}, -{55,-13,-24}, -{55,-13,-23}, -{55,-13,-22}, -{55,-13,-21}, -{55,-13,-20}, -{55,-13,-19}, -{55,-13,-18}, -{55,-13,-17}, -{55,-13,-16}, -{55,-13,-15}, -{55,-13,-14}, -{55,-13,-13}, -{55,-13,-12}, -{55,-13,-11}, -{55,-13,-10}, -{55,-13,-9}, -{55,-13,-8}, -{55,-13,-7}, -{55,-13,-6}, -{55,-13,-5}, -{55,-13,-4}, -{55,-13,-3}, -{55,-13,-2}, -{55,-13,-1}, -{55,-13,0}, -{55,-13,1}, -{55,-13,2}, -{55,-13,3}, -{55,-13,4}, -{55,-13,5}, -{55,-13,6}, -{55,-13,7}, -{55,-13,8}, -{55,-13,9}, -{55,-13,10}, -{55,-13,11}, -{55,-13,12}, -{55,-13,13}, -{55,-13,14}, -{55,-13,15}, -{55,-13,16}, -{55,-13,17}, -{55,-13,18}, -{55,-13,19}, -{55,-13,20}, -{55,-13,21}, -{55,-13,22}, -{55,-13,23}, -{55,-13,24}, -{55,-13,25}, -{55,-13,26}, -{55,-13,27}, -{55,-13,28}, -{55,-13,29}, -{55,-13,30}, -{55,-13,31}, -{55,-13,32}, -{55,-13,33}, -{55,-13,34}, -{55,-13,35}, -{55,-13,36}, -{55,-13,37}, -{55,-13,38}, -{55,-13,39}, -{55,-13,40}, -{55,-13,41}, -{55,-13,42}, -{55,-13,43}, -{55,-13,44}, -{55,-13,45}, -{55,-13,46}, -{55,-13,47}, -{55,-13,48}, -{55,-13,49}, -{55,-13,50}, -{55,-13,51}, -{55,-13,52}, -{55,-13,53}, -{55,-13,54}, -{55,-13,55}, -{55,-13,56}, -{55,-13,57}, -{55,-13,58}, -{55,-13,59}, -{55,-12,-37}, -{55,-12,-36}, -{55,-12,-35}, -{55,-12,-34}, -{55,-12,-33}, -{55,-12,-32}, -{55,-12,-31}, -{55,-12,-30}, -{55,-12,-29}, -{55,-12,-28}, -{55,-12,-27}, -{55,-12,-26}, -{55,-12,-25}, -{55,-12,-24}, -{55,-12,-23}, -{55,-12,-22}, -{55,-12,-21}, -{55,-12,-20}, -{55,-12,-19}, -{55,-12,-18}, -{55,-12,-17}, -{55,-12,-16}, -{55,-12,-15}, -{55,-12,-14}, -{55,-12,-13}, -{55,-12,-12}, -{55,-12,-11}, -{55,-12,-10}, -{55,-12,-9}, -{55,-12,-8}, -{55,-12,-7}, -{55,-12,-6}, -{55,-12,-5}, -{55,-12,-4}, -{55,-12,-3}, -{55,-12,-2}, -{55,-12,-1}, -{55,-12,0}, -{55,-12,1}, -{55,-12,2}, -{55,-12,3}, -{55,-12,4}, -{55,-12,5}, -{55,-12,6}, -{55,-12,7}, -{55,-12,8}, -{55,-12,9}, -{55,-12,10}, -{55,-12,11}, -{55,-12,12}, -{55,-12,13}, -{55,-12,14}, -{55,-12,15}, -{55,-12,16}, -{55,-12,17}, -{55,-12,18}, -{55,-12,19}, -{55,-12,20}, -{55,-12,21}, -{55,-12,22}, -{55,-12,23}, -{55,-12,24}, -{55,-12,25}, -{55,-12,26}, -{55,-12,27}, -{55,-12,28}, -{55,-12,29}, -{55,-12,30}, -{55,-12,31}, -{55,-12,32}, -{55,-12,33}, -{55,-12,34}, -{55,-12,35}, -{55,-12,36}, -{55,-12,37}, -{55,-12,38}, -{55,-12,39}, -{55,-12,40}, -{55,-12,41}, -{55,-12,42}, -{55,-12,43}, -{55,-12,44}, -{55,-12,45}, -{55,-12,46}, -{55,-12,47}, -{55,-12,48}, -{55,-12,49}, -{55,-12,50}, -{55,-12,51}, -{55,-12,52}, -{55,-12,53}, -{55,-12,54}, -{55,-12,55}, -{55,-12,56}, -{55,-12,57}, -{55,-12,58}, -{55,-12,59}, -{55,-11,-38}, -{55,-11,-37}, -{55,-11,-36}, -{55,-11,-35}, -{55,-11,-34}, -{55,-11,-33}, -{55,-11,-32}, -{55,-11,-31}, -{55,-11,-30}, -{55,-11,-29}, -{55,-11,-28}, -{55,-11,-27}, -{55,-11,-26}, -{55,-11,-25}, -{55,-11,-24}, -{55,-11,-23}, -{55,-11,-22}, -{55,-11,-21}, -{55,-11,-20}, -{55,-11,-19}, -{55,-11,-18}, -{55,-11,-17}, -{55,-11,-16}, -{55,-11,-15}, -{55,-11,-14}, -{55,-11,-13}, -{55,-11,-12}, -{55,-11,-11}, -{55,-11,-10}, -{55,-11,-9}, -{55,-11,-8}, -{55,-11,-7}, -{55,-11,-6}, -{55,-11,-5}, -{55,-11,-4}, -{55,-11,-3}, -{55,-11,-2}, -{55,-11,-1}, -{55,-11,0}, -{55,-11,1}, -{55,-11,2}, -{55,-11,3}, -{55,-11,4}, -{55,-11,5}, -{55,-11,6}, -{55,-11,7}, -{55,-11,8}, -{55,-11,9}, -{55,-11,10}, -{55,-11,11}, -{55,-11,12}, -{55,-11,13}, -{55,-11,14}, -{55,-11,15}, -{55,-11,16}, -{55,-11,17}, -{55,-11,18}, -{55,-11,19}, -{55,-11,20}, -{55,-11,21}, -{55,-11,22}, -{55,-11,23}, -{55,-11,24}, -{55,-11,25}, -{55,-11,26}, -{55,-11,27}, -{55,-11,28}, -{55,-11,29}, -{55,-11,30}, -{55,-11,31}, -{55,-11,32}, -{55,-11,33}, -{55,-11,34}, -{55,-11,35}, -{55,-11,36}, -{55,-11,37}, -{55,-11,38}, -{55,-11,39}, -{55,-11,40}, -{55,-11,41}, -{55,-11,42}, -{55,-11,43}, -{55,-11,44}, -{55,-11,45}, -{55,-11,46}, -{55,-11,47}, -{55,-11,48}, -{55,-11,49}, -{55,-11,50}, -{55,-11,51}, -{55,-11,52}, -{55,-11,53}, -{55,-11,54}, -{55,-11,55}, -{55,-11,56}, -{55,-11,57}, -{55,-11,58}, -{55,-11,59}, -{55,-10,-39}, -{55,-10,-38}, -{55,-10,-37}, -{55,-10,-36}, -{55,-10,-35}, -{55,-10,-34}, -{55,-10,-33}, -{55,-10,-32}, -{55,-10,-31}, -{55,-10,-30}, -{55,-10,-29}, -{55,-10,-28}, -{55,-10,-27}, -{55,-10,-26}, -{55,-10,-25}, -{55,-10,-24}, -{55,-10,-23}, -{55,-10,-22}, -{55,-10,-21}, -{55,-10,-20}, -{55,-10,-19}, -{55,-10,-18}, -{55,-10,-17}, -{55,-10,-16}, -{55,-10,-15}, -{55,-10,-14}, -{55,-10,-13}, -{55,-10,-12}, -{55,-10,-11}, -{55,-10,-10}, -{55,-10,-9}, -{55,-10,-8}, -{55,-10,-7}, -{55,-10,-6}, -{55,-10,-5}, -{55,-10,-4}, -{55,-10,-3}, -{55,-10,-2}, -{55,-10,-1}, -{55,-10,0}, -{55,-10,1}, -{55,-10,2}, -{55,-10,3}, -{55,-10,4}, -{55,-10,5}, -{55,-10,6}, -{55,-10,7}, -{55,-10,8}, -{55,-10,9}, -{55,-10,10}, -{55,-10,11}, -{55,-10,12}, -{55,-10,13}, -{55,-10,14}, -{55,-10,15}, -{55,-10,16}, -{55,-10,17}, -{55,-10,18}, -{55,-10,19}, -{55,-10,20}, -{55,-10,21}, -{55,-10,22}, -{55,-10,23}, -{55,-10,24}, -{55,-10,25}, -{55,-10,26}, -{55,-10,27}, -{55,-10,28}, -{55,-10,29}, -{55,-10,30}, -{55,-10,31}, -{55,-10,32}, -{55,-10,33}, -{55,-10,34}, -{55,-10,35}, -{55,-10,36}, -{55,-10,37}, -{55,-10,38}, -{55,-10,39}, -{55,-10,40}, -{55,-10,41}, -{55,-10,42}, -{55,-10,43}, -{55,-10,44}, -{55,-10,45}, -{55,-10,46}, -{55,-10,47}, -{55,-10,48}, -{55,-10,49}, -{55,-10,50}, -{55,-10,51}, -{55,-10,52}, -{55,-10,53}, -{55,-10,54}, -{55,-10,55}, -{55,-10,56}, -{55,-10,57}, -{55,-10,58}, -{55,-10,59}, -{55,-9,-40}, -{55,-9,-39}, -{55,-9,-38}, -{55,-9,-37}, -{55,-9,-36}, -{55,-9,-35}, -{55,-9,-34}, -{55,-9,-33}, -{55,-9,-32}, -{55,-9,-31}, -{55,-9,-30}, -{55,-9,-29}, -{55,-9,-28}, -{55,-9,-27}, -{55,-9,-26}, -{55,-9,-25}, -{55,-9,-24}, -{55,-9,-23}, -{55,-9,-22}, -{55,-9,-21}, -{55,-9,-20}, -{55,-9,-19}, -{55,-9,-18}, -{55,-9,-17}, -{55,-9,-16}, -{55,-9,-15}, -{55,-9,-14}, -{55,-9,-13}, -{55,-9,-12}, -{55,-9,-11}, -{55,-9,-10}, -{55,-9,-9}, -{55,-9,-8}, -{55,-9,-7}, -{55,-9,-6}, -{55,-9,-5}, -{55,-9,-4}, -{55,-9,-3}, -{55,-9,-2}, -{55,-9,-1}, -{55,-9,0}, -{55,-9,1}, -{55,-9,2}, -{55,-9,3}, -{55,-9,4}, -{55,-9,5}, -{55,-9,6}, -{55,-9,7}, -{55,-9,8}, -{55,-9,9}, -{55,-9,10}, -{55,-9,11}, -{55,-9,12}, -{55,-9,13}, -{55,-9,14}, -{55,-9,15}, -{55,-9,16}, -{55,-9,17}, -{55,-9,18}, -{55,-9,19}, -{55,-9,20}, -{55,-9,21}, -{55,-9,22}, -{55,-9,23}, -{55,-9,24}, -{55,-9,25}, -{55,-9,26}, -{55,-9,27}, -{55,-9,28}, -{55,-9,29}, -{55,-9,30}, -{55,-9,31}, -{55,-9,32}, -{55,-9,33}, -{55,-9,34}, -{55,-9,35}, -{55,-9,36}, -{55,-9,37}, -{55,-9,38}, -{55,-9,39}, -{55,-9,40}, -{55,-9,41}, -{55,-9,42}, -{55,-9,43}, -{55,-9,44}, -{55,-9,45}, -{55,-9,46}, -{55,-9,47}, -{55,-9,48}, -{55,-9,49}, -{55,-9,50}, -{55,-9,51}, -{55,-9,52}, -{55,-9,53}, -{55,-9,54}, -{55,-9,55}, -{55,-9,56}, -{55,-9,57}, -{55,-9,58}, -{55,-9,59}, -{55,-8,-41}, -{55,-8,-40}, -{55,-8,-39}, -{55,-8,-38}, -{55,-8,-37}, -{55,-8,-36}, -{55,-8,-35}, -{55,-8,-34}, -{55,-8,-33}, -{55,-8,-32}, -{55,-8,-31}, -{55,-8,-30}, -{55,-8,-29}, -{55,-8,-28}, -{55,-8,-27}, -{55,-8,-26}, -{55,-8,-25}, -{55,-8,-24}, -{55,-8,-23}, -{55,-8,-22}, -{55,-8,-21}, -{55,-8,-20}, -{55,-8,-19}, -{55,-8,-18}, -{55,-8,-17}, -{55,-8,-16}, -{55,-8,-15}, -{55,-8,-14}, -{55,-8,-13}, -{55,-8,-12}, -{55,-8,-11}, -{55,-8,-10}, -{55,-8,-9}, -{55,-8,-8}, -{55,-8,-7}, -{55,-8,-6}, -{55,-8,-5}, -{55,-8,-4}, -{55,-8,-3}, -{55,-8,-2}, -{55,-8,-1}, -{55,-8,0}, -{55,-8,1}, -{55,-8,2}, -{55,-8,3}, -{55,-8,4}, -{55,-8,5}, -{55,-8,6}, -{55,-8,7}, -{55,-8,8}, -{55,-8,9}, -{55,-8,10}, -{55,-8,11}, -{55,-8,12}, -{55,-8,13}, -{55,-8,14}, -{55,-8,15}, -{55,-8,16}, -{55,-8,17}, -{55,-8,18}, -{55,-8,19}, -{55,-8,20}, -{55,-8,21}, -{55,-8,22}, -{55,-8,23}, -{55,-8,24}, -{55,-8,25}, -{55,-8,26}, -{55,-8,27}, -{55,-8,28}, -{55,-8,29}, -{55,-8,30}, -{55,-8,31}, -{55,-8,32}, -{55,-8,33}, -{55,-8,34}, -{55,-8,35}, -{55,-8,36}, -{55,-8,37}, -{55,-8,38}, -{55,-8,39}, -{55,-8,40}, -{55,-8,41}, -{55,-8,42}, -{55,-8,43}, -{55,-8,44}, -{55,-8,45}, -{55,-8,46}, -{55,-8,47}, -{55,-8,48}, -{55,-8,49}, -{55,-8,50}, -{55,-8,51}, -{55,-8,52}, -{55,-8,53}, -{55,-8,54}, -{55,-8,55}, -{55,-8,56}, -{55,-8,57}, -{55,-8,58}, -{55,-8,59}, -{55,-7,-43}, -{55,-7,-42}, -{55,-7,-41}, -{55,-7,-40}, -{55,-7,-39}, -{55,-7,-38}, -{55,-7,-37}, -{55,-7,-36}, -{55,-7,-35}, -{55,-7,-34}, -{55,-7,-33}, -{55,-7,-32}, -{55,-7,-31}, -{55,-7,-30}, -{55,-7,-29}, -{55,-7,-28}, -{55,-7,-27}, -{55,-7,-26}, -{55,-7,-25}, -{55,-7,-24}, -{55,-7,-23}, -{55,-7,-22}, -{55,-7,-21}, -{55,-7,-20}, -{55,-7,-19}, -{55,-7,-18}, -{55,-7,-17}, -{55,-7,-16}, -{55,-7,-15}, -{55,-7,-14}, -{55,-7,-13}, -{55,-7,-12}, -{55,-7,-11}, -{55,-7,-10}, -{55,-7,-9}, -{55,-7,-8}, -{55,-7,-7}, -{55,-7,-6}, -{55,-7,-5}, -{55,-7,-4}, -{55,-7,-3}, -{55,-7,-2}, -{55,-7,-1}, -{55,-7,0}, -{55,-7,1}, -{55,-7,2}, -{55,-7,3}, -{55,-7,4}, -{55,-7,5}, -{55,-7,6}, -{55,-7,7}, -{55,-7,8}, -{55,-7,9}, -{55,-7,10}, -{55,-7,11}, -{55,-7,12}, -{55,-7,13}, -{55,-7,14}, -{55,-7,15}, -{55,-7,16}, -{55,-7,17}, -{55,-7,18}, -{55,-7,19}, -{55,-7,20}, -{55,-7,21}, -{55,-7,22}, -{55,-7,23}, -{55,-7,24}, -{55,-7,25}, -{55,-7,26}, -{55,-7,27}, -{55,-7,28}, -{55,-7,29}, -{55,-7,30}, -{55,-7,31}, -{55,-7,32}, -{55,-7,33}, -{55,-7,34}, -{55,-7,35}, -{55,-7,36}, -{55,-7,37}, -{55,-7,38}, -{55,-7,39}, -{55,-7,40}, -{55,-7,41}, -{55,-7,42}, -{55,-7,43}, -{55,-7,44}, -{55,-7,45}, -{55,-7,46}, -{55,-7,47}, -{55,-7,48}, -{55,-7,49}, -{55,-7,50}, -{55,-7,51}, -{55,-7,52}, -{55,-7,53}, -{55,-7,54}, -{55,-7,55}, -{55,-7,56}, -{55,-7,57}, -{55,-7,58}, -{55,-7,59}, -{55,-6,-44}, -{55,-6,-43}, -{55,-6,-42}, -{55,-6,-41}, -{55,-6,-40}, -{55,-6,-39}, -{55,-6,-38}, -{55,-6,-37}, -{55,-6,-36}, -{55,-6,-35}, -{55,-6,-34}, -{55,-6,-33}, -{55,-6,-32}, -{55,-6,-31}, -{55,-6,-30}, -{55,-6,-29}, -{55,-6,-28}, -{55,-6,-27}, -{55,-6,-26}, -{55,-6,-25}, -{55,-6,-24}, -{55,-6,-23}, -{55,-6,-22}, -{55,-6,-21}, -{55,-6,-20}, -{55,-6,-19}, -{55,-6,-18}, -{55,-6,-17}, -{55,-6,-16}, -{55,-6,-15}, -{55,-6,-14}, -{55,-6,-13}, -{55,-6,-12}, -{55,-6,-11}, -{55,-6,-10}, -{55,-6,-9}, -{55,-6,-8}, -{55,-6,-7}, -{55,-6,-6}, -{55,-6,-5}, -{55,-6,-4}, -{55,-6,-3}, -{55,-6,-2}, -{55,-6,-1}, -{55,-6,0}, -{55,-6,1}, -{55,-6,2}, -{55,-6,3}, -{55,-6,4}, -{55,-6,5}, -{55,-6,6}, -{55,-6,7}, -{55,-6,8}, -{55,-6,9}, -{55,-6,10}, -{55,-6,11}, -{55,-6,12}, -{55,-6,13}, -{55,-6,14}, -{55,-6,15}, -{55,-6,16}, -{55,-6,17}, -{55,-6,18}, -{55,-6,19}, -{55,-6,20}, -{55,-6,21}, -{55,-6,22}, -{55,-6,23}, -{55,-6,24}, -{55,-6,25}, -{55,-6,26}, -{55,-6,27}, -{55,-6,28}, -{55,-6,29}, -{55,-6,30}, -{55,-6,31}, -{55,-6,32}, -{55,-6,33}, -{55,-6,34}, -{55,-6,35}, -{55,-6,36}, -{55,-6,37}, -{55,-6,38}, -{55,-6,39}, -{55,-6,40}, -{55,-6,41}, -{55,-6,42}, -{55,-6,43}, -{55,-6,44}, -{55,-6,45}, -{55,-6,46}, -{55,-6,47}, -{55,-6,48}, -{55,-6,49}, -{55,-6,50}, -{55,-6,51}, -{55,-6,52}, -{55,-6,53}, -{55,-6,54}, -{55,-6,55}, -{55,-6,56}, -{55,-6,57}, -{55,-6,58}, -{55,-6,59}, -{55,-5,-45}, -{55,-5,-44}, -{55,-5,-43}, -{55,-5,-42}, -{55,-5,-41}, -{55,-5,-40}, -{55,-5,-39}, -{55,-5,-38}, -{55,-5,-37}, -{55,-5,-36}, -{55,-5,-35}, -{55,-5,-34}, -{55,-5,-33}, -{55,-5,-32}, -{55,-5,-31}, -{55,-5,-30}, -{55,-5,-29}, -{55,-5,-28}, -{55,-5,-27}, -{55,-5,-26}, -{55,-5,-25}, -{55,-5,-24}, -{55,-5,-23}, -{55,-5,-22}, -{55,-5,-21}, -{55,-5,-20}, -{55,-5,-19}, -{55,-5,-18}, -{55,-5,-17}, -{55,-5,-16}, -{55,-5,-15}, -{55,-5,-14}, -{55,-5,-13}, -{55,-5,-12}, -{55,-5,-11}, -{55,-5,-10}, -{55,-5,-9}, -{55,-5,-8}, -{55,-5,-7}, -{55,-5,-6}, -{55,-5,-5}, -{55,-5,-4}, -{55,-5,-3}, -{55,-5,-2}, -{55,-5,-1}, -{55,-5,0}, -{55,-5,1}, -{55,-5,2}, -{55,-5,3}, -{55,-5,4}, -{55,-5,5}, -{55,-5,6}, -{55,-5,7}, -{55,-5,8}, -{55,-5,9}, -{55,-5,10}, -{55,-5,11}, -{55,-5,12}, -{55,-5,13}, -{55,-5,14}, -{55,-5,15}, -{55,-5,16}, -{55,-5,17}, -{55,-5,18}, -{55,-5,19}, -{55,-5,20}, -{55,-5,21}, -{55,-5,22}, -{55,-5,23}, -{55,-5,24}, -{55,-5,25}, -{55,-5,26}, -{55,-5,27}, -{55,-5,28}, -{55,-5,29}, -{55,-5,30}, -{55,-5,31}, -{55,-5,32}, -{55,-5,33}, -{55,-5,34}, -{55,-5,35}, -{55,-5,36}, -{55,-5,37}, -{55,-5,38}, -{55,-5,39}, -{55,-5,40}, -{55,-5,41}, -{55,-5,42}, -{55,-5,43}, -{55,-5,44}, -{55,-5,45}, -{55,-5,46}, -{55,-5,47}, -{55,-5,48}, -{55,-5,49}, -{55,-5,50}, -{55,-5,51}, -{55,-5,52}, -{55,-5,53}, -{55,-5,54}, -{55,-5,55}, -{55,-5,56}, -{55,-5,57}, -{55,-5,58}, -{55,-5,59}, -{55,-5,60}, -{55,-4,-46}, -{55,-4,-45}, -{55,-4,-44}, -{55,-4,-43}, -{55,-4,-42}, -{55,-4,-41}, -{55,-4,-40}, -{55,-4,-39}, -{55,-4,-38}, -{55,-4,-37}, -{55,-4,-36}, -{55,-4,-35}, -{55,-4,-34}, -{55,-4,-33}, -{55,-4,-32}, -{55,-4,-31}, -{55,-4,-30}, -{55,-4,-29}, -{55,-4,-28}, -{55,-4,-27}, -{55,-4,-26}, -{55,-4,-25}, -{55,-4,-24}, -{55,-4,-23}, -{55,-4,-22}, -{55,-4,-21}, -{55,-4,-20}, -{55,-4,-19}, -{55,-4,-18}, -{55,-4,-17}, -{55,-4,-16}, -{55,-4,-15}, -{55,-4,-14}, -{55,-4,-13}, -{55,-4,-12}, -{55,-4,-11}, -{55,-4,-10}, -{55,-4,-9}, -{55,-4,-8}, -{55,-4,-7}, -{55,-4,-6}, -{55,-4,-5}, -{55,-4,-4}, -{55,-4,-3}, -{55,-4,-2}, -{55,-4,-1}, -{55,-4,0}, -{55,-4,1}, -{55,-4,2}, -{55,-4,3}, -{55,-4,4}, -{55,-4,5}, -{55,-4,6}, -{55,-4,7}, -{55,-4,8}, -{55,-4,9}, -{55,-4,10}, -{55,-4,11}, -{55,-4,12}, -{55,-4,13}, -{55,-4,14}, -{55,-4,15}, -{55,-4,16}, -{55,-4,17}, -{55,-4,18}, -{55,-4,19}, -{55,-4,20}, -{55,-4,21}, -{55,-4,22}, -{55,-4,23}, -{55,-4,24}, -{55,-4,25}, -{55,-4,26}, -{55,-4,27}, -{55,-4,28}, -{55,-4,29}, -{55,-4,30}, -{55,-4,31}, -{55,-4,32}, -{55,-4,33}, -{55,-4,34}, -{55,-4,35}, -{55,-4,36}, -{55,-4,37}, -{55,-4,38}, -{55,-4,39}, -{55,-4,40}, -{55,-4,41}, -{55,-4,42}, -{55,-4,43}, -{55,-4,44}, -{55,-4,45}, -{55,-4,46}, -{55,-4,47}, -{55,-4,48}, -{55,-4,49}, -{55,-4,50}, -{55,-4,51}, -{55,-4,52}, -{55,-4,53}, -{55,-4,54}, -{55,-4,55}, -{55,-4,56}, -{55,-4,57}, -{55,-4,58}, -{55,-4,59}, -{55,-4,60}, -{55,-3,-47}, -{55,-3,-46}, -{55,-3,-45}, -{55,-3,-44}, -{55,-3,-43}, -{55,-3,-42}, -{55,-3,-41}, -{55,-3,-40}, -{55,-3,-39}, -{55,-3,-38}, -{55,-3,-37}, -{55,-3,-36}, -{55,-3,-35}, -{55,-3,-34}, -{55,-3,-33}, -{55,-3,-32}, -{55,-3,-31}, -{55,-3,-30}, -{55,-3,-29}, -{55,-3,-28}, -{55,-3,-27}, -{55,-3,-26}, -{55,-3,-25}, -{55,-3,-24}, -{55,-3,-23}, -{55,-3,-22}, -{55,-3,-21}, -{55,-3,-20}, -{55,-3,-19}, -{55,-3,-18}, -{55,-3,-17}, -{55,-3,-16}, -{55,-3,-15}, -{55,-3,-14}, -{55,-3,-13}, -{55,-3,-12}, -{55,-3,-11}, -{55,-3,-10}, -{55,-3,-9}, -{55,-3,-8}, -{55,-3,-7}, -{55,-3,-6}, -{55,-3,-5}, -{55,-3,-4}, -{55,-3,-3}, -{55,-3,-2}, -{55,-3,-1}, -{55,-3,0}, -{55,-3,1}, -{55,-3,2}, -{55,-3,3}, -{55,-3,4}, -{55,-3,5}, -{55,-3,6}, -{55,-3,7}, -{55,-3,8}, -{55,-3,9}, -{55,-3,10}, -{55,-3,11}, -{55,-3,12}, -{55,-3,13}, -{55,-3,14}, -{55,-3,15}, -{55,-3,16}, -{55,-3,17}, -{55,-3,18}, -{55,-3,19}, -{55,-3,20}, -{55,-3,21}, -{55,-3,22}, -{55,-3,23}, -{55,-3,24}, -{55,-3,25}, -{55,-3,26}, -{55,-3,27}, -{55,-3,28}, -{55,-3,29}, -{55,-3,30}, -{55,-3,31}, -{55,-3,32}, -{55,-3,33}, -{55,-3,34}, -{55,-3,35}, -{55,-3,36}, -{55,-3,37}, -{55,-3,38}, -{55,-3,39}, -{55,-3,40}, -{55,-3,41}, -{55,-3,42}, -{55,-3,43}, -{55,-3,44}, -{55,-3,45}, -{55,-3,46}, -{55,-3,47}, -{55,-3,48}, -{55,-3,49}, -{55,-3,50}, -{55,-3,51}, -{55,-3,52}, -{55,-3,53}, -{55,-3,54}, -{55,-3,55}, -{55,-3,56}, -{55,-3,57}, -{55,-3,58}, -{55,-3,59}, -{55,-3,60}, -{55,-2,-48}, -{55,-2,-47}, -{55,-2,-46}, -{55,-2,-45}, -{55,-2,-44}, -{55,-2,-43}, -{55,-2,-42}, -{55,-2,-41}, -{55,-2,-40}, -{55,-2,-39}, -{55,-2,-38}, -{55,-2,-37}, -{55,-2,-36}, -{55,-2,-35}, -{55,-2,-34}, -{55,-2,-33}, -{55,-2,-32}, -{55,-2,-31}, -{55,-2,-30}, -{55,-2,-29}, -{55,-2,-28}, -{55,-2,-27}, -{55,-2,-26}, -{55,-2,-25}, -{55,-2,-24}, -{55,-2,-23}, -{55,-2,-22}, -{55,-2,-21}, -{55,-2,-20}, -{55,-2,-19}, -{55,-2,-18}, -{55,-2,-17}, -{55,-2,-16}, -{55,-2,-15}, -{55,-2,-14}, -{55,-2,-13}, -{55,-2,-12}, -{55,-2,-11}, -{55,-2,-10}, -{55,-2,-9}, -{55,-2,-8}, -{55,-2,-7}, -{55,-2,-6}, -{55,-2,-5}, -{55,-2,-4}, -{55,-2,-3}, -{55,-2,-2}, -{55,-2,-1}, -{55,-2,0}, -{55,-2,1}, -{55,-2,2}, -{55,-2,3}, -{55,-2,4}, -{55,-2,5}, -{55,-2,6}, -{55,-2,7}, -{55,-2,8}, -{55,-2,9}, -{55,-2,10}, -{55,-2,11}, -{55,-2,12}, -{55,-2,13}, -{55,-2,14}, -{55,-2,15}, -{55,-2,16}, -{55,-2,17}, -{55,-2,18}, -{55,-2,19}, -{55,-2,20}, -{55,-2,21}, -{55,-2,22}, -{55,-2,23}, -{55,-2,24}, -{55,-2,25}, -{55,-2,26}, -{55,-2,27}, -{55,-2,28}, -{55,-2,29}, -{55,-2,30}, -{55,-2,31}, -{55,-2,32}, -{55,-2,33}, -{55,-2,34}, -{55,-2,35}, -{55,-2,36}, -{55,-2,37}, -{55,-2,38}, -{55,-2,39}, -{55,-2,40}, -{55,-2,41}, -{55,-2,42}, -{55,-2,43}, -{55,-2,44}, -{55,-2,45}, -{55,-2,46}, -{55,-2,47}, -{55,-2,48}, -{55,-2,49}, -{55,-2,50}, -{55,-2,51}, -{55,-2,52}, -{55,-2,53}, -{55,-2,54}, -{55,-2,55}, -{55,-2,56}, -{55,-2,57}, -{55,-2,58}, -{55,-2,59}, -{55,-2,60}, -{55,-1,-50}, -{55,-1,-49}, -{55,-1,-48}, -{55,-1,-47}, -{55,-1,-46}, -{55,-1,-45}, -{55,-1,-44}, -{55,-1,-43}, -{55,-1,-42}, -{55,-1,-41}, -{55,-1,-40}, -{55,-1,-39}, -{55,-1,-38}, -{55,-1,-37}, -{55,-1,-36}, -{55,-1,-35}, -{55,-1,-34}, -{55,-1,-33}, -{55,-1,-32}, -{55,-1,-31}, -{55,-1,-30}, -{55,-1,-29}, -{55,-1,-28}, -{55,-1,-27}, -{55,-1,-26}, -{55,-1,-25}, -{55,-1,-24}, -{55,-1,-23}, -{55,-1,-22}, -{55,-1,-21}, -{55,-1,-20}, -{55,-1,-19}, -{55,-1,-18}, -{55,-1,-17}, -{55,-1,-16}, -{55,-1,-15}, -{55,-1,-14}, -{55,-1,-13}, -{55,-1,-12}, -{55,-1,-11}, -{55,-1,-10}, -{55,-1,-9}, -{55,-1,-8}, -{55,-1,-7}, -{55,-1,-6}, -{55,-1,-5}, -{55,-1,-4}, -{55,-1,-3}, -{55,-1,-2}, -{55,-1,-1}, -{55,-1,0}, -{55,-1,1}, -{55,-1,2}, -{55,-1,3}, -{55,-1,4}, -{55,-1,5}, -{55,-1,6}, -{55,-1,7}, -{55,-1,8}, -{55,-1,9}, -{55,-1,10}, -{55,-1,11}, -{55,-1,12}, -{55,-1,13}, -{55,-1,14}, -{55,-1,15}, -{55,-1,16}, -{55,-1,17}, -{55,-1,18}, -{55,-1,19}, -{55,-1,20}, -{55,-1,21}, -{55,-1,22}, -{55,-1,23}, -{55,-1,24}, -{55,-1,25}, -{55,-1,26}, -{55,-1,27}, -{55,-1,28}, -{55,-1,29}, -{55,-1,30}, -{55,-1,31}, -{55,-1,32}, -{55,-1,33}, -{55,-1,34}, -{55,-1,35}, -{55,-1,36}, -{55,-1,37}, -{55,-1,38}, -{55,-1,39}, -{55,-1,40}, -{55,-1,41}, -{55,-1,42}, -{55,-1,43}, -{55,-1,44}, -{55,-1,45}, -{55,-1,46}, -{55,-1,47}, -{55,-1,48}, -{55,-1,49}, -{55,-1,50}, -{55,-1,51}, -{55,-1,52}, -{55,-1,53}, -{55,-1,54}, -{55,-1,55}, -{55,-1,56}, -{55,-1,57}, -{55,-1,58}, -{55,-1,59}, -{55,-1,60}, -{55,0,-51}, -{55,0,-50}, -{55,0,-49}, -{55,0,-48}, -{55,0,-47}, -{55,0,-46}, -{55,0,-45}, -{55,0,-44}, -{55,0,-43}, -{55,0,-42}, -{55,0,-41}, -{55,0,-40}, -{55,0,-39}, -{55,0,-38}, -{55,0,-37}, -{55,0,-36}, -{55,0,-35}, -{55,0,-34}, -{55,0,-33}, -{55,0,-32}, -{55,0,-31}, -{55,0,-30}, -{55,0,-29}, -{55,0,-28}, -{55,0,-27}, -{55,0,-26}, -{55,0,-25}, -{55,0,-24}, -{55,0,-23}, -{55,0,-22}, -{55,0,-21}, -{55,0,-20}, -{55,0,-19}, -{55,0,-18}, -{55,0,-17}, -{55,0,-16}, -{55,0,-15}, -{55,0,-14}, -{55,0,-13}, -{55,0,-12}, -{55,0,-11}, -{55,0,-10}, -{55,0,-9}, -{55,0,-8}, -{55,0,-7}, -{55,0,-6}, -{55,0,-5}, -{55,0,-4}, -{55,0,-3}, -{55,0,-2}, -{55,0,-1}, -{55,0,0}, -{55,0,1}, -{55,0,2}, -{55,0,3}, -{55,0,4}, -{55,0,5}, -{55,0,6}, -{55,0,7}, -{55,0,8}, -{55,0,9}, -{55,0,10}, -{55,0,11}, -{55,0,12}, -{55,0,13}, -{55,0,14}, -{55,0,15}, -{55,0,16}, -{55,0,17}, -{55,0,18}, -{55,0,19}, -{55,0,20}, -{55,0,21}, -{55,0,22}, -{55,0,23}, -{55,0,24}, -{55,0,25}, -{55,0,26}, -{55,0,27}, -{55,0,28}, -{55,0,29}, -{55,0,30}, -{55,0,31}, -{55,0,32}, -{55,0,33}, -{55,0,34}, -{55,0,35}, -{55,0,36}, -{55,0,37}, -{55,0,38}, -{55,0,39}, -{55,0,40}, -{55,0,41}, -{55,0,42}, -{55,0,43}, -{55,0,44}, -{55,0,45}, -{55,0,46}, -{55,0,47}, -{55,0,48}, -{55,0,49}, -{55,0,50}, -{55,0,51}, -{55,0,52}, -{55,0,53}, -{55,0,54}, -{55,0,55}, -{55,0,56}, -{55,0,57}, -{55,0,58}, -{55,0,59}, -{55,0,60}, -{55,1,-52}, -{55,1,-51}, -{55,1,-50}, -{55,1,-49}, -{55,1,-48}, -{55,1,-47}, -{55,1,-46}, -{55,1,-45}, -{55,1,-44}, -{55,1,-43}, -{55,1,-42}, -{55,1,-41}, -{55,1,-40}, -{55,1,-39}, -{55,1,-38}, -{55,1,-37}, -{55,1,-36}, -{55,1,-35}, -{55,1,-34}, -{55,1,-33}, -{55,1,-32}, -{55,1,-31}, -{55,1,-30}, -{55,1,-29}, -{55,1,-28}, -{55,1,-27}, -{55,1,-26}, -{55,1,-25}, -{55,1,-24}, -{55,1,-23}, -{55,1,-22}, -{55,1,-21}, -{55,1,-20}, -{55,1,-19}, -{55,1,-18}, -{55,1,-17}, -{55,1,-16}, -{55,1,-15}, -{55,1,-14}, -{55,1,-13}, -{55,1,-12}, -{55,1,-11}, -{55,1,-10}, -{55,1,-9}, -{55,1,-8}, -{55,1,-7}, -{55,1,-6}, -{55,1,-5}, -{55,1,-4}, -{55,1,-3}, -{55,1,-2}, -{55,1,-1}, -{55,1,0}, -{55,1,1}, -{55,1,2}, -{55,1,3}, -{55,1,4}, -{55,1,5}, -{55,1,6}, -{55,1,7}, -{55,1,8}, -{55,1,9}, -{55,1,10}, -{55,1,11}, -{55,1,12}, -{55,1,13}, -{55,1,14}, -{55,1,15}, -{55,1,16}, -{55,1,17}, -{55,1,18}, -{55,1,19}, -{55,1,20}, -{55,1,21}, -{55,1,22}, -{55,1,23}, -{55,1,24}, -{55,1,25}, -{55,1,26}, -{55,1,27}, -{55,1,28}, -{55,1,29}, -{55,1,30}, -{55,1,31}, -{55,1,32}, -{55,1,33}, -{55,1,34}, -{55,1,35}, -{55,1,36}, -{55,1,37}, -{55,1,38}, -{55,1,39}, -{55,1,40}, -{55,1,41}, -{55,1,42}, -{55,1,43}, -{55,1,44}, -{55,1,45}, -{55,1,46}, -{55,1,47}, -{55,1,48}, -{55,1,49}, -{55,1,50}, -{55,1,51}, -{55,1,52}, -{55,1,53}, -{55,1,54}, -{55,1,55}, -{55,1,56}, -{55,1,57}, -{55,1,58}, -{55,1,59}, -{55,1,60}, -{55,2,-53}, -{55,2,-52}, -{55,2,-51}, -{55,2,-50}, -{55,2,-49}, -{55,2,-48}, -{55,2,-47}, -{55,2,-46}, -{55,2,-45}, -{55,2,-44}, -{55,2,-43}, -{55,2,-42}, -{55,2,-41}, -{55,2,-40}, -{55,2,-39}, -{55,2,-38}, -{55,2,-37}, -{55,2,-36}, -{55,2,-35}, -{55,2,-34}, -{55,2,-33}, -{55,2,-32}, -{55,2,-31}, -{55,2,-30}, -{55,2,-29}, -{55,2,-28}, -{55,2,-27}, -{55,2,-26}, -{55,2,-25}, -{55,2,-24}, -{55,2,-23}, -{55,2,-22}, -{55,2,-21}, -{55,2,-20}, -{55,2,-19}, -{55,2,-18}, -{55,2,-17}, -{55,2,-16}, -{55,2,-15}, -{55,2,-14}, -{55,2,-13}, -{55,2,-12}, -{55,2,-11}, -{55,2,-10}, -{55,2,-9}, -{55,2,-8}, -{55,2,-7}, -{55,2,-6}, -{55,2,-5}, -{55,2,-4}, -{55,2,-3}, -{55,2,-2}, -{55,2,-1}, -{55,2,0}, -{55,2,1}, -{55,2,2}, -{55,2,3}, -{55,2,4}, -{55,2,5}, -{55,2,6}, -{55,2,7}, -{55,2,8}, -{55,2,9}, -{55,2,10}, -{55,2,11}, -{55,2,12}, -{55,2,13}, -{55,2,14}, -{55,2,15}, -{55,2,16}, -{55,2,17}, -{55,2,18}, -{55,2,19}, -{55,2,20}, -{55,2,21}, -{55,2,22}, -{55,2,23}, -{55,2,24}, -{55,2,25}, -{55,2,26}, -{55,2,27}, -{55,2,28}, -{55,2,29}, -{55,2,30}, -{55,2,31}, -{55,2,32}, -{55,2,33}, -{55,2,34}, -{55,2,35}, -{55,2,36}, -{55,2,37}, -{55,2,38}, -{55,2,39}, -{55,2,40}, -{55,2,41}, -{55,2,42}, -{55,2,43}, -{55,2,44}, -{55,2,45}, -{55,2,46}, -{55,2,47}, -{55,2,48}, -{55,2,49}, -{55,2,50}, -{55,2,51}, -{55,2,52}, -{55,2,53}, -{55,2,54}, -{55,2,55}, -{55,2,56}, -{55,2,57}, -{55,2,58}, -{55,2,59}, -{55,2,60}, -{55,3,-54}, -{55,3,-53}, -{55,3,-52}, -{55,3,-51}, -{55,3,-50}, -{55,3,-49}, -{55,3,-48}, -{55,3,-47}, -{55,3,-46}, -{55,3,-45}, -{55,3,-44}, -{55,3,-43}, -{55,3,-42}, -{55,3,-41}, -{55,3,-40}, -{55,3,-39}, -{55,3,-38}, -{55,3,-37}, -{55,3,-36}, -{55,3,-35}, -{55,3,-34}, -{55,3,-33}, -{55,3,-32}, -{55,3,-31}, -{55,3,-30}, -{55,3,-29}, -{55,3,-28}, -{55,3,-27}, -{55,3,-26}, -{55,3,-25}, -{55,3,-24}, -{55,3,-23}, -{55,3,-22}, -{55,3,-21}, -{55,3,-20}, -{55,3,-19}, -{55,3,-18}, -{55,3,-17}, -{55,3,-16}, -{55,3,-15}, -{55,3,-14}, -{55,3,-13}, -{55,3,-12}, -{55,3,-11}, -{55,3,-10}, -{55,3,-9}, -{55,3,-8}, -{55,3,-7}, -{55,3,-6}, -{55,3,-5}, -{55,3,-4}, -{55,3,-3}, -{55,3,-2}, -{55,3,-1}, -{55,3,0}, -{55,3,1}, -{55,3,2}, -{55,3,3}, -{55,3,4}, -{55,3,5}, -{55,3,6}, -{55,3,7}, -{55,3,8}, -{55,3,9}, -{55,3,10}, -{55,3,11}, -{55,3,12}, -{55,3,13}, -{55,3,14}, -{55,3,15}, -{55,3,16}, -{55,3,17}, -{55,3,18}, -{55,3,19}, -{55,3,20}, -{55,3,21}, -{55,3,22}, -{55,3,23}, -{55,3,24}, -{55,3,25}, -{55,3,26}, -{55,3,27}, -{55,3,28}, -{55,3,29}, -{55,3,30}, -{55,3,31}, -{55,3,32}, -{55,3,33}, -{55,3,34}, -{55,3,35}, -{55,3,36}, -{55,3,37}, -{55,3,38}, -{55,3,39}, -{55,3,40}, -{55,3,41}, -{55,3,42}, -{55,3,43}, -{55,3,44}, -{55,3,45}, -{55,3,46}, -{55,3,47}, -{55,3,48}, -{55,3,49}, -{55,3,50}, -{55,3,51}, -{55,3,52}, -{55,3,53}, -{55,3,54}, -{55,3,55}, -{55,3,56}, -{55,3,57}, -{55,3,58}, -{55,3,59}, -{55,3,60}, -{55,4,-55}, -{55,4,-54}, -{55,4,-53}, -{55,4,-52}, -{55,4,-51}, -{55,4,-50}, -{55,4,-49}, -{55,4,-48}, -{55,4,-47}, -{55,4,-46}, -{55,4,-45}, -{55,4,-44}, -{55,4,-43}, -{55,4,-42}, -{55,4,-41}, -{55,4,-40}, -{55,4,-39}, -{55,4,-38}, -{55,4,-37}, -{55,4,-36}, -{55,4,-35}, -{55,4,-34}, -{55,4,-33}, -{55,4,-32}, -{55,4,-31}, -{55,4,-30}, -{55,4,-29}, -{55,4,-28}, -{55,4,-27}, -{55,4,-26}, -{55,4,-25}, -{55,4,-24}, -{55,4,-23}, -{55,4,-22}, -{55,4,-21}, -{55,4,-20}, -{55,4,-19}, -{55,4,-18}, -{55,4,-17}, -{55,4,-16}, -{55,4,-15}, -{55,4,-14}, -{55,4,-13}, -{55,4,-12}, -{55,4,-11}, -{55,4,-10}, -{55,4,-9}, -{55,4,-8}, -{55,4,-7}, -{55,4,-6}, -{55,4,-5}, -{55,4,-4}, -{55,4,-3}, -{55,4,-2}, -{55,4,-1}, -{55,4,0}, -{55,4,1}, -{55,4,2}, -{55,4,3}, -{55,4,4}, -{55,4,5}, -{55,4,6}, -{55,4,7}, -{55,4,8}, -{55,4,9}, -{55,4,10}, -{55,4,11}, -{55,4,12}, -{55,4,13}, -{55,4,14}, -{55,4,15}, -{55,4,16}, -{55,4,17}, -{55,4,18}, -{55,4,19}, -{55,4,20}, -{55,4,21}, -{55,4,22}, -{55,4,23}, -{55,4,24}, -{55,4,25}, -{55,4,26}, -{55,4,27}, -{55,4,28}, -{55,4,29}, -{55,4,30}, -{55,4,31}, -{55,4,32}, -{55,4,33}, -{55,4,34}, -{55,4,35}, -{55,4,36}, -{55,4,37}, -{55,4,38}, -{55,4,39}, -{55,4,40}, -{55,4,41}, -{55,4,42}, -{55,4,43}, -{55,4,44}, -{55,4,45}, -{55,4,46}, -{55,4,47}, -{55,4,48}, -{55,4,49}, -{55,4,50}, -{55,4,51}, -{55,4,52}, -{55,4,53}, -{55,4,54}, -{55,4,55}, -{55,4,56}, -{55,4,57}, -{55,4,58}, -{55,4,59}, -{55,4,60}, -{55,5,-56}, -{55,5,-55}, -{55,5,-54}, -{55,5,-53}, -{55,5,-52}, -{55,5,-51}, -{55,5,-50}, -{55,5,-49}, -{55,5,-48}, -{55,5,-47}, -{55,5,-46}, -{55,5,-45}, -{55,5,-44}, -{55,5,-43}, -{55,5,-42}, -{55,5,-41}, -{55,5,-40}, -{55,5,-39}, -{55,5,-38}, -{55,5,-37}, -{55,5,-36}, -{55,5,-35}, -{55,5,-34}, -{55,5,-33}, -{55,5,-32}, -{55,5,-31}, -{55,5,-30}, -{55,5,-29}, -{55,5,-28}, -{55,5,-27}, -{55,5,-26}, -{55,5,-25}, -{55,5,-24}, -{55,5,-23}, -{55,5,-22}, -{55,5,-21}, -{55,5,-20}, -{55,5,-19}, -{55,5,-18}, -{55,5,-17}, -{55,5,-16}, -{55,5,-15}, -{55,5,-14}, -{55,5,-13}, -{55,5,-12}, -{55,5,-11}, -{55,5,-10}, -{55,5,-9}, -{55,5,-8}, -{55,5,-7}, -{55,5,-6}, -{55,5,-5}, -{55,5,-4}, -{55,5,-3}, -{55,5,-2}, -{55,5,-1}, -{55,5,0}, -{55,5,1}, -{55,5,2}, -{55,5,3}, -{55,5,4}, -{55,5,5}, -{55,5,6}, -{55,5,7}, -{55,5,8}, -{55,5,9}, -{55,5,10}, -{55,5,11}, -{55,5,12}, -{55,5,13}, -{55,5,14}, -{55,5,15}, -{55,5,16}, -{55,5,17}, -{55,5,18}, -{55,5,19}, -{55,5,20}, -{55,5,21}, -{55,5,22}, -{55,5,23}, -{55,5,24}, -{55,5,25}, -{55,5,26}, -{55,5,27}, -{55,5,28}, -{55,5,29}, -{55,5,30}, -{55,5,31}, -{55,5,32}, -{55,5,33}, -{55,5,34}, -{55,5,35}, -{55,5,36}, -{55,5,37}, -{55,5,38}, -{55,5,39}, -{55,5,40}, -{55,5,41}, -{55,5,42}, -{55,5,43}, -{55,5,44}, -{55,5,45}, -{55,5,46}, -{55,5,47}, -{55,5,48}, -{55,5,49}, -{55,5,50}, -{55,5,51}, -{55,5,52}, -{55,5,53}, -{55,5,54}, -{55,5,55}, -{55,5,56}, -{55,5,57}, -{55,5,58}, -{55,5,59}, -{55,5,60}, -{55,6,-57}, -{55,6,-56}, -{55,6,-55}, -{55,6,-54}, -{55,6,-53}, -{55,6,-52}, -{55,6,-51}, -{55,6,-50}, -{55,6,-49}, -{55,6,-48}, -{55,6,-47}, -{55,6,-46}, -{55,6,-45}, -{55,6,-44}, -{55,6,-43}, -{55,6,-42}, -{55,6,-41}, -{55,6,-40}, -{55,6,-39}, -{55,6,-38}, -{55,6,-37}, -{55,6,-36}, -{55,6,-35}, -{55,6,-34}, -{55,6,-33}, -{55,6,-32}, -{55,6,-31}, -{55,6,-30}, -{55,6,-29}, -{55,6,-28}, -{55,6,-27}, -{55,6,-26}, -{55,6,-25}, -{55,6,-24}, -{55,6,-23}, -{55,6,-22}, -{55,6,-21}, -{55,6,-20}, -{55,6,-19}, -{55,6,-18}, -{55,6,-17}, -{55,6,-16}, -{55,6,-15}, -{55,6,-14}, -{55,6,-13}, -{55,6,-12}, -{55,6,-11}, -{55,6,-10}, -{55,6,-9}, -{55,6,-8}, -{55,6,-7}, -{55,6,-6}, -{55,6,-5}, -{55,6,-4}, -{55,6,-3}, -{55,6,-2}, -{55,6,-1}, -{55,6,0}, -{55,6,1}, -{55,6,2}, -{55,6,3}, -{55,6,4}, -{55,6,5}, -{55,6,6}, -{55,6,7}, -{55,6,8}, -{55,6,9}, -{55,6,10}, -{55,6,11}, -{55,6,12}, -{55,6,13}, -{55,6,14}, -{55,6,15}, -{55,6,16}, -{55,6,17}, -{55,6,18}, -{55,6,19}, -{55,6,20}, -{55,6,21}, -{55,6,22}, -{55,6,23}, -{55,6,24}, -{55,6,25}, -{55,6,26}, -{55,6,27}, -{55,6,28}, -{55,6,29}, -{55,6,30}, -{55,6,31}, -{55,6,32}, -{55,6,33}, -{55,6,34}, -{55,6,35}, -{55,6,36}, -{55,6,37}, -{55,6,38}, -{55,6,39}, -{55,6,40}, -{55,6,41}, -{55,6,42}, -{55,6,43}, -{55,6,44}, -{55,6,45}, -{55,6,46}, -{55,6,47}, -{55,6,48}, -{55,6,49}, -{55,6,50}, -{55,6,51}, -{55,6,52}, -{55,6,53}, -{55,6,54}, -{55,6,55}, -{55,6,56}, -{55,6,57}, -{55,6,58}, -{55,6,59}, -{55,6,60}, -{55,7,-58}, -{55,7,-57}, -{55,7,-56}, -{55,7,-55}, -{55,7,-54}, -{55,7,-53}, -{55,7,-52}, -{55,7,-51}, -{55,7,-50}, -{55,7,-49}, -{55,7,-48}, -{55,7,-47}, -{55,7,-46}, -{55,7,-45}, -{55,7,-44}, -{55,7,-43}, -{55,7,-42}, -{55,7,-41}, -{55,7,-40}, -{55,7,-39}, -{55,7,-38}, -{55,7,-37}, -{55,7,-36}, -{55,7,-35}, -{55,7,-34}, -{55,7,-33}, -{55,7,-32}, -{55,7,-31}, -{55,7,-30}, -{55,7,-29}, -{55,7,-28}, -{55,7,-27}, -{55,7,-26}, -{55,7,-25}, -{55,7,-24}, -{55,7,-23}, -{55,7,-22}, -{55,7,-21}, -{55,7,-20}, -{55,7,-19}, -{55,7,-18}, -{55,7,-17}, -{55,7,-16}, -{55,7,-15}, -{55,7,-14}, -{55,7,-13}, -{55,7,-12}, -{55,7,-11}, -{55,7,-10}, -{55,7,-9}, -{55,7,-8}, -{55,7,-7}, -{55,7,-6}, -{55,7,-5}, -{55,7,-4}, -{55,7,-3}, -{55,7,-2}, -{55,7,-1}, -{55,7,0}, -{55,7,1}, -{55,7,2}, -{55,7,3}, -{55,7,4}, -{55,7,5}, -{55,7,6}, -{55,7,7}, -{55,7,8}, -{55,7,9}, -{55,7,10}, -{55,7,11}, -{55,7,12}, -{55,7,13}, -{55,7,14}, -{55,7,15}, -{55,7,16}, -{55,7,17}, -{55,7,18}, -{55,7,19}, -{55,7,20}, -{55,7,21}, -{55,7,22}, -{55,7,23}, -{55,7,24}, -{55,7,25}, -{55,7,26}, -{55,7,27}, -{55,7,28}, -{55,7,29}, -{55,7,30}, -{55,7,31}, -{55,7,32}, -{55,7,33}, -{55,7,34}, -{55,7,35}, -{55,7,36}, -{55,7,37}, -{55,7,38}, -{55,7,39}, -{55,7,40}, -{55,7,41}, -{55,7,42}, -{55,7,43}, -{55,7,44}, -{55,7,45}, -{55,7,46}, -{55,7,47}, -{55,7,48}, -{55,7,49}, -{55,7,50}, -{55,7,51}, -{55,7,52}, -{55,7,53}, -{55,7,54}, -{55,7,55}, -{55,7,56}, -{55,7,57}, -{55,7,58}, -{55,7,59}, -{55,7,60}, -{55,8,-60}, -{55,8,-59}, -{55,8,-58}, -{55,8,-57}, -{55,8,-56}, -{55,8,-55}, -{55,8,-54}, -{55,8,-53}, -{55,8,-52}, -{55,8,-51}, -{55,8,-50}, -{55,8,-49}, -{55,8,-48}, -{55,8,-47}, -{55,8,-46}, -{55,8,-45}, -{55,8,-44}, -{55,8,-43}, -{55,8,-42}, -{55,8,-41}, -{55,8,-40}, -{55,8,-39}, -{55,8,-38}, -{55,8,-37}, -{55,8,-36}, -{55,8,-35}, -{55,8,-34}, -{55,8,-33}, -{55,8,-32}, -{55,8,-31}, -{55,8,-30}, -{55,8,-29}, -{55,8,-28}, -{55,8,-27}, -{55,8,-26}, -{55,8,-25}, -{55,8,-24}, -{55,8,-23}, -{55,8,-22}, -{55,8,-21}, -{55,8,-20}, -{55,8,-19}, -{55,8,-18}, -{55,8,-17}, -{55,8,-16}, -{55,8,-15}, -{55,8,-14}, -{55,8,-13}, -{55,8,-12}, -{55,8,-11}, -{55,8,-10}, -{55,8,-9}, -{55,8,-8}, -{55,8,-7}, -{55,8,-6}, -{55,8,-5}, -{55,8,-4}, -{55,8,-3}, -{55,8,-2}, -{55,8,-1}, -{55,8,0}, -{55,8,1}, -{55,8,2}, -{55,8,3}, -{55,8,4}, -{55,8,5}, -{55,8,6}, -{55,8,7}, -{55,8,8}, -{55,8,9}, -{55,8,10}, -{55,8,11}, -{55,8,12}, -{55,8,13}, -{55,8,14}, -{55,8,15}, -{55,8,16}, -{55,8,17}, -{55,8,18}, -{55,8,19}, -{55,8,20}, -{55,8,21}, -{55,8,22}, -{55,8,23}, -{55,8,24}, -{55,8,25}, -{55,8,26}, -{55,8,27}, -{55,8,28}, -{55,8,29}, -{55,8,30}, -{55,8,31}, -{55,8,32}, -{55,8,33}, -{55,8,34}, -{55,8,35}, -{55,8,36}, -{55,8,37}, -{55,8,38}, -{55,8,39}, -{55,8,40}, -{55,8,41}, -{55,8,42}, -{55,8,43}, -{55,8,44}, -{55,8,45}, -{55,8,46}, -{55,8,47}, -{55,8,48}, -{55,8,49}, -{55,8,50}, -{55,8,51}, -{55,8,52}, -{55,8,53}, -{55,8,54}, -{55,8,55}, -{55,8,56}, -{55,8,57}, -{55,8,58}, -{55,8,59}, -{55,8,60}, -{55,9,-61}, -{55,9,-60}, -{55,9,-59}, -{55,9,-58}, -{55,9,-57}, -{55,9,-56}, -{55,9,-55}, -{55,9,-54}, -{55,9,-53}, -{55,9,-52}, -{55,9,-51}, -{55,9,-50}, -{55,9,-49}, -{55,9,-48}, -{55,9,-47}, -{55,9,-46}, -{55,9,-45}, -{55,9,-44}, -{55,9,-43}, -{55,9,-42}, -{55,9,-41}, -{55,9,-40}, -{55,9,-39}, -{55,9,-38}, -{55,9,-37}, -{55,9,-36}, -{55,9,-35}, -{55,9,-34}, -{55,9,-33}, -{55,9,-32}, -{55,9,-31}, -{55,9,-30}, -{55,9,-29}, -{55,9,-28}, -{55,9,-27}, -{55,9,-26}, -{55,9,-25}, -{55,9,-24}, -{55,9,-23}, -{55,9,-22}, -{55,9,-21}, -{55,9,-20}, -{55,9,-19}, -{55,9,-18}, -{55,9,-17}, -{55,9,-16}, -{55,9,-15}, -{55,9,-14}, -{55,9,-13}, -{55,9,-12}, -{55,9,-11}, -{55,9,-10}, -{55,9,-9}, -{55,9,-8}, -{55,9,-7}, -{55,9,-6}, -{55,9,-5}, -{55,9,-4}, -{55,9,-3}, -{55,9,-2}, -{55,9,-1}, -{55,9,0}, -{55,9,1}, -{55,9,2}, -{55,9,3}, -{55,9,4}, -{55,9,5}, -{55,9,6}, -{55,9,7}, -{55,9,8}, -{55,9,9}, -{55,9,10}, -{55,9,11}, -{55,9,12}, -{55,9,13}, -{55,9,14}, -{55,9,15}, -{55,9,16}, -{55,9,17}, -{55,9,18}, -{55,9,19}, -{55,9,20}, -{55,9,21}, -{55,9,22}, -{55,9,23}, -{55,9,24}, -{55,9,25}, -{55,9,26}, -{55,9,27}, -{55,9,28}, -{55,9,29}, -{55,9,30}, -{55,9,31}, -{55,9,32}, -{55,9,33}, -{55,9,34}, -{55,9,35}, -{55,9,36}, -{55,9,37}, -{55,9,38}, -{55,9,39}, -{55,9,40}, -{55,9,41}, -{55,9,42}, -{55,9,43}, -{55,9,44}, -{55,9,45}, -{55,9,46}, -{55,9,47}, -{55,9,48}, -{55,9,49}, -{55,9,50}, -{55,9,51}, -{55,9,52}, -{55,9,53}, -{55,9,54}, -{55,9,55}, -{55,9,56}, -{55,9,57}, -{55,9,58}, -{55,9,59}, -{55,9,60}, -{55,9,61}, -{55,10,-62}, -{55,10,-61}, -{55,10,-60}, -{55,10,-59}, -{55,10,-58}, -{55,10,-57}, -{55,10,-56}, -{55,10,-55}, -{55,10,-54}, -{55,10,-53}, -{55,10,-52}, -{55,10,-51}, -{55,10,-50}, -{55,10,-49}, -{55,10,-48}, -{55,10,-47}, -{55,10,-46}, -{55,10,-45}, -{55,10,-44}, -{55,10,-43}, -{55,10,-42}, -{55,10,-41}, -{55,10,-40}, -{55,10,-39}, -{55,10,-38}, -{55,10,-37}, -{55,10,-36}, -{55,10,-35}, -{55,10,-34}, -{55,10,-33}, -{55,10,-32}, -{55,10,-31}, -{55,10,-30}, -{55,10,-29}, -{55,10,-28}, -{55,10,-27}, -{55,10,-26}, -{55,10,-25}, -{55,10,-24}, -{55,10,-23}, -{55,10,-22}, -{55,10,-21}, -{55,10,-20}, -{55,10,-19}, -{55,10,-18}, -{55,10,-17}, -{55,10,-16}, -{55,10,-15}, -{55,10,-14}, -{55,10,-13}, -{55,10,-12}, -{55,10,-11}, -{55,10,-10}, -{55,10,-9}, -{55,10,-8}, -{55,10,-7}, -{55,10,-6}, -{55,10,-5}, -{55,10,-4}, -{55,10,-3}, -{55,10,-2}, -{55,10,-1}, -{55,10,0}, -{55,10,1}, -{55,10,2}, -{55,10,3}, -{55,10,4}, -{55,10,5}, -{55,10,6}, -{55,10,7}, -{55,10,8}, -{55,10,9}, -{55,10,10}, -{55,10,11}, -{55,10,12}, -{55,10,13}, -{55,10,14}, -{55,10,15}, -{55,10,16}, -{55,10,17}, -{55,10,18}, -{55,10,19}, -{55,10,20}, -{55,10,21}, -{55,10,22}, -{55,10,23}, -{55,10,24}, -{55,10,25}, -{55,10,26}, -{55,10,27}, -{55,10,28}, -{55,10,29}, -{55,10,30}, -{55,10,31}, -{55,10,32}, -{55,10,33}, -{55,10,34}, -{55,10,35}, -{55,10,36}, -{55,10,37}, -{55,10,38}, -{55,10,39}, -{55,10,40}, -{55,10,41}, -{55,10,42}, -{55,10,43}, -{55,10,44}, -{55,10,45}, -{55,10,46}, -{55,10,47}, -{55,10,48}, -{55,10,49}, -{55,10,50}, -{55,10,51}, -{55,10,52}, -{55,10,53}, -{55,10,54}, -{55,10,55}, -{55,10,56}, -{55,10,57}, -{55,10,58}, -{55,10,59}, -{55,10,60}, -{55,10,61}, -{55,11,-63}, -{55,11,-62}, -{55,11,-61}, -{55,11,-60}, -{55,11,-59}, -{55,11,-58}, -{55,11,-57}, -{55,11,-56}, -{55,11,-55}, -{55,11,-54}, -{55,11,-53}, -{55,11,-52}, -{55,11,-51}, -{55,11,-50}, -{55,11,-49}, -{55,11,-48}, -{55,11,-47}, -{55,11,-46}, -{55,11,-45}, -{55,11,-44}, -{55,11,-43}, -{55,11,-42}, -{55,11,-41}, -{55,11,-40}, -{55,11,-39}, -{55,11,-38}, -{55,11,-37}, -{55,11,-36}, -{55,11,-35}, -{55,11,-34}, -{55,11,-33}, -{55,11,-32}, -{55,11,-31}, -{55,11,-30}, -{55,11,-29}, -{55,11,-28}, -{55,11,-27}, -{55,11,-26}, -{55,11,-25}, -{55,11,-24}, -{55,11,-23}, -{55,11,-22}, -{55,11,-21}, -{55,11,-20}, -{55,11,-19}, -{55,11,-18}, -{55,11,-17}, -{55,11,-16}, -{55,11,-15}, -{55,11,-14}, -{55,11,-13}, -{55,11,-12}, -{55,11,-11}, -{55,11,-10}, -{55,11,-9}, -{55,11,-8}, -{55,11,-7}, -{55,11,-6}, -{55,11,-5}, -{55,11,-4}, -{55,11,-3}, -{55,11,-2}, -{55,11,-1}, -{55,11,0}, -{55,11,1}, -{55,11,2}, -{55,11,3}, -{55,11,4}, -{55,11,5}, -{55,11,6}, -{55,11,7}, -{55,11,8}, -{55,11,9}, -{55,11,10}, -{55,11,11}, -{55,11,12}, -{55,11,13}, -{55,11,14}, -{55,11,15}, -{55,11,16}, -{55,11,17}, -{55,11,18}, -{55,11,19}, -{55,11,20}, -{55,11,21}, -{55,11,22}, -{55,11,23}, -{55,11,24}, -{55,11,25}, -{55,11,26}, -{55,11,27}, -{55,11,28}, -{55,11,29}, -{55,11,30}, -{55,11,31}, -{55,11,32}, -{55,11,33}, -{55,11,34}, -{55,11,35}, -{55,11,36}, -{55,11,37}, -{55,11,38}, -{55,11,39}, -{55,11,40}, -{55,11,41}, -{55,11,42}, -{55,11,43}, -{55,11,44}, -{55,11,45}, -{55,11,46}, -{55,11,47}, -{55,11,48}, -{55,11,49}, -{55,11,50}, -{55,11,51}, -{55,11,52}, -{55,11,53}, -{55,11,54}, -{55,11,55}, -{55,11,56}, -{55,11,57}, -{55,11,58}, -{55,11,59}, -{55,11,60}, -{55,11,61}, -{55,12,-64}, -{55,12,-63}, -{55,12,-62}, -{55,12,-61}, -{55,12,-60}, -{55,12,-59}, -{55,12,-58}, -{55,12,-57}, -{55,12,-56}, -{55,12,-55}, -{55,12,-54}, -{55,12,-53}, -{55,12,-52}, -{55,12,-51}, -{55,12,-50}, -{55,12,-49}, -{55,12,-48}, -{55,12,-47}, -{55,12,-46}, -{55,12,-45}, -{55,12,-44}, -{55,12,-43}, -{55,12,-42}, -{55,12,-41}, -{55,12,-40}, -{55,12,-39}, -{55,12,-38}, -{55,12,-37}, -{55,12,-36}, -{55,12,-35}, -{55,12,-34}, -{55,12,-33}, -{55,12,-32}, -{55,12,-31}, -{55,12,-30}, -{55,12,-29}, -{55,12,-28}, -{55,12,-27}, -{55,12,-26}, -{55,12,-25}, -{55,12,-24}, -{55,12,-23}, -{55,12,-22}, -{55,12,-21}, -{55,12,-20}, -{55,12,-19}, -{55,12,-18}, -{55,12,-17}, -{55,12,-16}, -{55,12,-15}, -{55,12,-14}, -{55,12,-13}, -{55,12,-12}, -{55,12,-11}, -{55,12,-10}, -{55,12,-9}, -{55,12,-8}, -{55,12,-7}, -{55,12,-6}, -{55,12,-5}, -{55,12,-4}, -{55,12,-3}, -{55,12,-2}, -{55,12,-1}, -{55,12,0}, -{55,12,1}, -{55,12,2}, -{55,12,3}, -{55,12,4}, -{55,12,5}, -{55,12,6}, -{55,12,7}, -{55,12,8}, -{55,12,9}, -{55,12,10}, -{55,12,11}, -{55,12,12}, -{55,12,13}, -{55,12,14}, -{55,12,15}, -{55,12,16}, -{55,12,17}, -{55,12,18}, -{55,12,19}, -{55,12,20}, -{55,12,21}, -{55,12,22}, -{55,12,23}, -{55,12,24}, -{55,12,25}, -{55,12,26}, -{55,12,27}, -{55,12,28}, -{55,12,29}, -{55,12,30}, -{55,12,31}, -{55,12,32}, -{55,12,33}, -{55,12,34}, -{55,12,35}, -{55,12,36}, -{55,12,37}, -{55,12,38}, -{55,12,39}, -{55,12,40}, -{55,12,41}, -{55,12,42}, -{55,12,43}, -{55,12,44}, -{55,12,45}, -{55,12,46}, -{55,12,47}, -{55,12,48}, -{55,12,49}, -{55,12,50}, -{55,12,51}, -{55,12,52}, -{55,12,53}, -{55,12,54}, -{55,12,55}, -{55,12,56}, -{55,12,57}, -{55,12,58}, -{55,12,59}, -{55,12,60}, -{55,12,61}, -{55,13,-65}, -{55,13,-64}, -{55,13,-63}, -{55,13,-62}, -{55,13,-61}, -{55,13,-60}, -{55,13,-59}, -{55,13,-58}, -{55,13,-57}, -{55,13,-56}, -{55,13,-55}, -{55,13,-54}, -{55,13,-53}, -{55,13,-52}, -{55,13,-51}, -{55,13,-50}, -{55,13,-49}, -{55,13,-48}, -{55,13,-47}, -{55,13,-46}, -{55,13,-45}, -{55,13,-44}, -{55,13,-43}, -{55,13,-42}, -{55,13,-41}, -{55,13,-40}, -{55,13,-39}, -{55,13,-38}, -{55,13,-37}, -{55,13,-36}, -{55,13,-35}, -{55,13,-34}, -{55,13,-33}, -{55,13,-32}, -{55,13,-31}, -{55,13,-30}, -{55,13,-29}, -{55,13,-28}, -{55,13,-27}, -{55,13,-26}, -{55,13,-25}, -{55,13,-24}, -{55,13,-23}, -{55,13,-22}, -{55,13,-21}, -{55,13,-20}, -{55,13,-19}, -{55,13,-18}, -{55,13,-17}, -{55,13,-16}, -{55,13,-15}, -{55,13,-14}, -{55,13,-13}, -{55,13,-12}, -{55,13,-11}, -{55,13,-10}, -{55,13,-9}, -{55,13,-8}, -{55,13,-7}, -{55,13,-6}, -{55,13,-5}, -{55,13,-4}, -{55,13,-3}, -{55,13,-2}, -{55,13,-1}, -{55,13,0}, -{55,13,1}, -{55,13,2}, -{55,13,3}, -{55,13,4}, -{55,13,5}, -{55,13,6}, -{55,13,7}, -{55,13,8}, -{55,13,9}, -{55,13,10}, -{55,13,11}, -{55,13,12}, -{55,13,13}, -{55,13,14}, -{55,13,15}, -{55,13,16}, -{55,13,17}, -{55,13,18}, -{55,13,19}, -{55,13,20}, -{55,13,21}, -{55,13,22}, -{55,13,23}, -{55,13,24}, -{55,13,25}, -{55,13,26}, -{55,13,27}, -{55,13,28}, -{55,13,29}, -{55,13,30}, -{55,13,31}, -{55,13,32}, -{55,13,33}, -{55,13,34}, -{55,13,35}, -{55,13,36}, -{55,13,37}, -{55,13,38}, -{55,13,39}, -{55,13,40}, -{55,13,41}, -{55,13,42}, -{55,13,43}, -{55,13,44}, -{55,13,45}, -{55,13,46}, -{55,13,47}, -{55,13,48}, -{55,13,49}, -{55,13,50}, -{55,13,51}, -{55,13,52}, -{55,13,53}, -{55,13,54}, -{55,13,55}, -{55,13,56}, -{55,13,57}, -{55,13,58}, -{55,13,59}, -{55,13,60}, -{55,13,61}, -{55,14,-66}, -{55,14,-65}, -{55,14,-64}, -{55,14,-63}, -{55,14,-62}, -{55,14,-61}, -{55,14,-60}, -{55,14,-59}, -{55,14,-58}, -{55,14,-57}, -{55,14,-56}, -{55,14,-55}, -{55,14,-54}, -{55,14,-53}, -{55,14,-52}, -{55,14,-51}, -{55,14,-50}, -{55,14,-49}, -{55,14,-48}, -{55,14,-47}, -{55,14,-46}, -{55,14,-45}, -{55,14,-44}, -{55,14,-43}, -{55,14,-42}, -{55,14,-41}, -{55,14,-40}, -{55,14,-39}, -{55,14,-38}, -{55,14,-37}, -{55,14,-36}, -{55,14,-35}, -{55,14,-34}, -{55,14,-33}, -{55,14,-32}, -{55,14,-31}, -{55,14,-30}, -{55,14,-29}, -{55,14,-28}, -{55,14,-27}, -{55,14,-26}, -{55,14,-25}, -{55,14,-24}, -{55,14,-23}, -{55,14,-22}, -{55,14,-21}, -{55,14,-20}, -{55,14,-19}, -{55,14,-18}, -{55,14,-17}, -{55,14,-16}, -{55,14,-15}, -{55,14,-14}, -{55,14,-13}, -{55,14,-12}, -{55,14,-11}, -{55,14,-10}, -{55,14,-9}, -{55,14,-8}, -{55,14,-7}, -{55,14,-6}, -{55,14,-5}, -{55,14,-4}, -{55,14,-3}, -{55,14,-2}, -{55,14,-1}, -{55,14,0}, -{55,14,1}, -{55,14,2}, -{55,14,3}, -{55,14,4}, -{55,14,5}, -{55,14,6}, -{55,14,7}, -{55,14,8}, -{55,14,9}, -{55,14,10}, -{55,14,11}, -{55,14,12}, -{55,14,13}, -{55,14,14}, -{55,14,15}, -{55,14,16}, -{55,14,17}, -{55,14,18}, -{55,14,19}, -{55,14,20}, -{55,14,21}, -{55,14,22}, -{55,14,23}, -{55,14,24}, -{55,14,25}, -{55,14,26}, -{55,14,27}, -{55,14,28}, -{55,14,29}, -{55,14,30}, -{55,14,31}, -{55,14,32}, -{55,14,33}, -{55,14,34}, -{55,14,35}, -{55,14,36}, -{55,14,37}, -{55,14,38}, -{55,14,39}, -{55,14,40}, -{55,14,41}, -{55,14,42}, -{55,14,43}, -{55,14,44}, -{55,14,45}, -{55,14,46}, -{55,14,47}, -{55,14,48}, -{55,14,49}, -{55,14,50}, -{55,14,51}, -{55,14,52}, -{55,14,53}, -{55,14,54}, -{55,14,55}, -{55,14,56}, -{55,14,57}, -{55,14,58}, -{55,14,59}, -{55,14,60}, -{55,14,61}, -{55,15,-67}, -{55,15,-66}, -{55,15,-65}, -{55,15,-64}, -{55,15,-63}, -{55,15,-62}, -{55,15,-61}, -{55,15,-60}, -{55,15,-59}, -{55,15,-58}, -{55,15,-57}, -{55,15,-56}, -{55,15,-55}, -{55,15,-54}, -{55,15,-53}, -{55,15,-52}, -{55,15,-51}, -{55,15,-50}, -{55,15,-49}, -{55,15,-48}, -{55,15,-47}, -{55,15,-46}, -{55,15,-45}, -{55,15,-44}, -{55,15,-43}, -{55,15,-42}, -{55,15,-41}, -{55,15,-40}, -{55,15,-39}, -{55,15,-38}, -{55,15,-37}, -{55,15,-36}, -{55,15,-35}, -{55,15,-34}, -{55,15,-33}, -{55,15,-32}, -{55,15,-31}, -{55,15,-30}, -{55,15,-29}, -{55,15,-28}, -{55,15,-27}, -{55,15,-26}, -{55,15,-25}, -{55,15,-24}, -{55,15,-23}, -{55,15,-22}, -{55,15,-21}, -{55,15,-20}, -{55,15,-19}, -{55,15,-18}, -{55,15,-17}, -{55,15,-16}, -{55,15,-15}, -{55,15,-14}, -{55,15,-13}, -{55,15,-12}, -{55,15,-11}, -{55,15,-10}, -{55,15,-9}, -{55,15,-8}, -{55,15,-7}, -{55,15,-6}, -{55,15,-5}, -{55,15,-4}, -{55,15,-3}, -{55,15,-2}, -{55,15,-1}, -{55,15,0}, -{55,15,1}, -{55,15,2}, -{55,15,3}, -{55,15,4}, -{55,15,5}, -{55,15,6}, -{55,15,7}, -{55,15,8}, -{55,15,9}, -{55,15,10}, -{55,15,11}, -{55,15,12}, -{55,15,13}, -{55,15,14}, -{55,15,15}, -{55,15,16}, -{55,15,17}, -{55,15,18}, -{55,15,19}, -{55,15,20}, -{55,15,21}, -{55,15,22}, -{55,15,23}, -{55,15,24}, -{55,15,25}, -{55,15,26}, -{55,15,27}, -{55,15,28}, -{55,15,29}, -{55,15,30}, -{55,15,31}, -{55,15,32}, -{55,15,33}, -{55,15,34}, -{55,15,35}, -{55,15,36}, -{55,15,37}, -{55,15,38}, -{55,15,39}, -{55,15,40}, -{55,15,41}, -{55,15,42}, -{55,15,43}, -{55,15,44}, -{55,15,45}, -{55,15,46}, -{55,15,47}, -{55,15,48}, -{55,15,49}, -{55,15,50}, -{55,15,51}, -{55,15,52}, -{55,15,53}, -{55,15,54}, -{55,15,55}, -{55,15,56}, -{55,15,57}, -{55,15,58}, -{55,15,59}, -{55,15,60}, -{55,15,61}, -{55,16,-68}, -{55,16,-67}, -{55,16,-66}, -{55,16,-65}, -{55,16,-64}, -{55,16,-63}, -{55,16,-62}, -{55,16,-61}, -{55,16,-60}, -{55,16,-59}, -{55,16,-58}, -{55,16,-57}, -{55,16,-56}, -{55,16,-55}, -{55,16,-54}, -{55,16,-53}, -{55,16,-52}, -{55,16,-51}, -{55,16,-50}, -{55,16,-49}, -{55,16,-48}, -{55,16,-47}, -{55,16,-46}, -{55,16,-45}, -{55,16,-44}, -{55,16,-43}, -{55,16,-42}, -{55,16,-41}, -{55,16,-40}, -{55,16,-39}, -{55,16,-38}, -{55,16,-37}, -{55,16,-36}, -{55,16,-35}, -{55,16,-34}, -{55,16,-33}, -{55,16,-32}, -{55,16,-31}, -{55,16,-30}, -{55,16,-29}, -{55,16,-28}, -{55,16,-27}, -{55,16,-26}, -{55,16,-25}, -{55,16,-24}, -{55,16,-23}, -{55,16,-22}, -{55,16,-21}, -{55,16,-20}, -{55,16,-19}, -{55,16,-18}, -{55,16,-17}, -{55,16,-16}, -{55,16,-15}, -{55,16,-14}, -{55,16,-13}, -{55,16,-12}, -{55,16,-11}, -{55,16,-10}, -{55,16,-9}, -{55,16,-8}, -{55,16,-7}, -{55,16,-6}, -{55,16,-5}, -{55,16,-4}, -{55,16,-3}, -{55,16,-2}, -{55,16,-1}, -{55,16,0}, -{55,16,1}, -{55,16,2}, -{55,16,3}, -{55,16,4}, -{55,16,5}, -{55,16,6}, -{55,16,7}, -{55,16,8}, -{55,16,9}, -{55,16,10}, -{55,16,11}, -{55,16,12}, -{55,16,13}, -{55,16,14}, -{55,16,15}, -{55,16,16}, -{55,16,17}, -{55,16,18}, -{55,16,19}, -{55,16,20}, -{55,16,21}, -{55,16,22}, -{55,16,23}, -{55,16,24}, -{55,16,25}, -{55,16,26}, -{55,16,27}, -{55,16,28}, -{55,16,29}, -{55,16,30}, -{55,16,31}, -{55,16,32}, -{55,16,33}, -{55,16,34}, -{55,16,35}, -{55,16,36}, -{55,16,37}, -{55,16,38}, -{55,16,39}, -{55,16,40}, -{55,16,41}, -{55,16,42}, -{55,16,43}, -{55,16,44}, -{55,16,45}, -{55,16,46}, -{55,16,47}, -{55,16,48}, -{55,16,49}, -{55,16,50}, -{55,16,51}, -{55,16,52}, -{55,16,53}, -{55,16,54}, -{55,16,55}, -{55,16,56}, -{55,16,57}, -{55,16,58}, -{55,16,59}, -{55,16,60}, -{55,16,61}, -{55,17,-69}, -{55,17,-68}, -{55,17,-67}, -{55,17,-66}, -{55,17,-65}, -{55,17,-64}, -{55,17,-63}, -{55,17,-62}, -{55,17,-61}, -{55,17,-60}, -{55,17,-59}, -{55,17,-58}, -{55,17,-57}, -{55,17,-56}, -{55,17,-55}, -{55,17,-54}, -{55,17,-53}, -{55,17,-52}, -{55,17,-51}, -{55,17,-50}, -{55,17,-49}, -{55,17,-48}, -{55,17,-47}, -{55,17,-46}, -{55,17,-45}, -{55,17,-44}, -{55,17,-43}, -{55,17,-42}, -{55,17,-41}, -{55,17,-40}, -{55,17,-39}, -{55,17,-38}, -{55,17,-37}, -{55,17,-36}, -{55,17,-35}, -{55,17,-34}, -{55,17,-33}, -{55,17,-32}, -{55,17,-31}, -{55,17,-30}, -{55,17,-29}, -{55,17,-28}, -{55,17,-27}, -{55,17,-26}, -{55,17,-25}, -{55,17,-24}, -{55,17,-23}, -{55,17,-22}, -{55,17,-21}, -{55,17,-20}, -{55,17,-19}, -{55,17,-18}, -{55,17,-17}, -{55,17,-16}, -{55,17,-15}, -{55,17,-14}, -{55,17,-13}, -{55,17,-12}, -{55,17,-11}, -{55,17,-10}, -{55,17,-9}, -{55,17,-8}, -{55,17,-7}, -{55,17,-6}, -{55,17,-5}, -{55,17,-4}, -{55,17,-3}, -{55,17,-2}, -{55,17,-1}, -{55,17,0}, -{55,17,1}, -{55,17,2}, -{55,17,3}, -{55,17,4}, -{55,17,5}, -{55,17,6}, -{55,17,7}, -{55,17,8}, -{55,17,9}, -{55,17,10}, -{55,17,11}, -{55,17,12}, -{55,17,13}, -{55,17,14}, -{55,17,15}, -{55,17,16}, -{55,17,17}, -{55,17,18}, -{55,17,19}, -{55,17,20}, -{55,17,21}, -{55,17,22}, -{55,17,23}, -{55,17,24}, -{55,17,25}, -{55,17,26}, -{55,17,27}, -{55,17,28}, -{55,17,29}, -{55,17,30}, -{55,17,31}, -{55,17,32}, -{55,17,33}, -{55,17,34}, -{55,17,35}, -{55,17,36}, -{55,17,37}, -{55,17,38}, -{55,17,39}, -{55,17,40}, -{55,17,41}, -{55,17,42}, -{55,17,43}, -{55,17,44}, -{55,17,45}, -{55,17,46}, -{55,17,47}, -{55,17,48}, -{55,17,49}, -{55,17,50}, -{55,17,51}, -{55,17,52}, -{55,17,53}, -{55,17,54}, -{55,17,55}, -{55,17,56}, -{55,17,57}, -{55,17,58}, -{55,17,59}, -{55,17,60}, -{55,17,61}, -{55,18,-70}, -{55,18,-69}, -{55,18,-68}, -{55,18,-67}, -{55,18,-66}, -{55,18,-65}, -{55,18,-64}, -{55,18,-63}, -{55,18,-62}, -{55,18,-61}, -{55,18,-60}, -{55,18,-59}, -{55,18,-58}, -{55,18,-57}, -{55,18,-56}, -{55,18,-55}, -{55,18,-54}, -{55,18,-53}, -{55,18,-52}, -{55,18,-51}, -{55,18,-50}, -{55,18,-49}, -{55,18,-48}, -{55,18,-47}, -{55,18,-46}, -{55,18,-45}, -{55,18,-44}, -{55,18,-43}, -{55,18,-42}, -{55,18,-41}, -{55,18,-40}, -{55,18,-39}, -{55,18,-38}, -{55,18,-37}, -{55,18,-36}, -{55,18,-35}, -{55,18,-34}, -{55,18,-33}, -{55,18,-32}, -{55,18,-31}, -{55,18,-30}, -{55,18,-29}, -{55,18,-28}, -{55,18,-27}, -{55,18,-26}, -{55,18,-25}, -{55,18,-24}, -{55,18,-23}, -{55,18,-22}, -{55,18,-21}, -{55,18,-20}, -{55,18,-19}, -{55,18,-18}, -{55,18,-17}, -{55,18,-16}, -{55,18,-15}, -{55,18,-14}, -{55,18,-13}, -{55,18,-12}, -{55,18,-11}, -{55,18,-10}, -{55,18,-9}, -{55,18,-8}, -{55,18,-7}, -{55,18,-6}, -{55,18,-5}, -{55,18,-4}, -{55,18,-3}, -{55,18,-2}, -{55,18,-1}, -{55,18,0}, -{55,18,1}, -{55,18,2}, -{55,18,3}, -{55,18,4}, -{55,18,5}, -{55,18,6}, -{55,18,7}, -{55,18,8}, -{55,18,9}, -{55,18,10}, -{55,18,11}, -{55,18,12}, -{55,18,13}, -{55,18,14}, -{55,18,15}, -{55,18,16}, -{55,18,17}, -{55,18,18}, -{55,18,19}, -{55,18,20}, -{55,18,21}, -{55,18,22}, -{55,18,23}, -{55,18,24}, -{55,18,25}, -{55,18,26}, -{55,18,27}, -{55,18,28}, -{55,18,29}, -{55,18,30}, -{55,18,31}, -{55,18,32}, -{55,18,33}, -{55,18,34}, -{55,18,35}, -{55,18,36}, -{55,18,37}, -{55,18,38}, -{55,18,39}, -{55,18,40}, -{55,18,41}, -{55,18,42}, -{55,18,43}, -{55,18,44}, -{55,18,45}, -{55,18,46}, -{55,18,47}, -{55,18,48}, -{55,18,49}, -{55,18,50}, -{55,18,51}, -{55,18,52}, -{55,18,53}, -{55,18,54}, -{55,18,55}, -{55,18,56}, -{55,18,57}, -{55,18,58}, -{55,18,59}, -{55,18,60}, -{55,18,61}, -{55,19,-70}, -{55,19,-69}, -{55,19,-68}, -{55,19,-67}, -{55,19,-66}, -{55,19,-65}, -{55,19,-64}, -{55,19,-63}, -{55,19,-62}, -{55,19,-61}, -{55,19,-60}, -{55,19,-59}, -{55,19,-58}, -{55,19,-57}, -{55,19,-56}, -{55,19,-55}, -{55,19,-54}, -{55,19,-53}, -{55,19,-52}, -{55,19,-51}, -{55,19,-50}, -{55,19,-49}, -{55,19,-48}, -{55,19,-47}, -{55,19,-46}, -{55,19,-45}, -{55,19,-44}, -{55,19,-43}, -{55,19,-42}, -{55,19,-41}, -{55,19,-40}, -{55,19,-39}, -{55,19,-38}, -{55,19,-37}, -{55,19,-36}, -{55,19,-35}, -{55,19,-34}, -{55,19,-33}, -{55,19,-32}, -{55,19,-31}, -{55,19,-30}, -{55,19,-29}, -{55,19,-28}, -{55,19,-27}, -{55,19,-26}, -{55,19,-25}, -{55,19,-24}, -{55,19,-23}, -{55,19,-22}, -{55,19,-21}, -{55,19,-20}, -{55,19,-19}, -{55,19,-18}, -{55,19,-17}, -{55,19,-16}, -{55,19,-15}, -{55,19,-14}, -{55,19,-13}, -{55,19,-12}, -{55,19,-11}, -{55,19,-10}, -{55,19,-9}, -{55,19,-8}, -{55,19,-7}, -{55,19,-6}, -{55,19,-5}, -{55,19,-4}, -{55,19,-3}, -{55,19,-2}, -{55,19,-1}, -{55,19,0}, -{55,19,1}, -{55,19,2}, -{55,19,3}, -{55,19,4}, -{55,19,5}, -{55,19,6}, -{55,19,7}, -{55,19,8}, -{55,19,9}, -{55,19,10}, -{55,19,11}, -{55,19,12}, -{55,19,13}, -{55,19,14}, -{55,19,15}, -{55,19,16}, -{55,19,17}, -{55,19,18}, -{55,19,19}, -{55,19,20}, -{55,19,21}, -{55,19,22}, -{55,19,23}, -{55,19,24}, -{55,19,25}, -{55,19,26}, -{55,19,27}, -{55,19,28}, -{55,19,29}, -{55,19,30}, -{55,19,31}, -{55,19,32}, -{55,19,33}, -{55,19,34}, -{55,19,35}, -{55,19,36}, -{55,19,37}, -{55,19,38}, -{55,19,39}, -{55,19,40}, -{55,19,41}, -{55,19,42}, -{55,19,43}, -{55,19,44}, -{55,19,45}, -{55,19,46}, -{55,19,47}, -{55,19,48}, -{55,19,49}, -{55,19,50}, -{55,19,51}, -{55,19,52}, -{55,19,53}, -{55,19,54}, -{55,19,55}, -{55,19,56}, -{55,19,57}, -{55,19,58}, -{55,19,59}, -{55,19,60}, -{55,19,61}, -{55,20,-70}, -{55,20,-69}, -{55,20,-68}, -{55,20,-67}, -{55,20,-66}, -{55,20,-65}, -{55,20,-64}, -{55,20,-63}, -{55,20,-62}, -{55,20,-61}, -{55,20,-60}, -{55,20,-59}, -{55,20,-58}, -{55,20,-57}, -{55,20,-56}, -{55,20,-55}, -{55,20,-54}, -{55,20,-53}, -{55,20,-52}, -{55,20,-51}, -{55,20,-50}, -{55,20,-49}, -{55,20,-48}, -{55,20,-47}, -{55,20,-46}, -{55,20,-45}, -{55,20,-44}, -{55,20,-43}, -{55,20,-42}, -{55,20,-41}, -{55,20,-40}, -{55,20,-39}, -{55,20,-38}, -{55,20,-37}, -{55,20,-36}, -{55,20,-35}, -{55,20,-34}, -{55,20,-33}, -{55,20,-32}, -{55,20,-31}, -{55,20,-30}, -{55,20,-29}, -{55,20,-28}, -{55,20,-27}, -{55,20,-26}, -{55,20,-25}, -{55,20,-24}, -{55,20,-23}, -{55,20,-22}, -{55,20,-21}, -{55,20,-20}, -{55,20,-19}, -{55,20,-18}, -{55,20,-17}, -{55,20,-16}, -{55,20,-15}, -{55,20,-14}, -{55,20,-13}, -{55,20,-12}, -{55,20,-11}, -{55,20,-10}, -{55,20,-9}, -{55,20,-8}, -{55,20,-7}, -{55,20,-6}, -{55,20,-5}, -{55,20,-4}, -{55,20,-3}, -{55,20,-2}, -{55,20,-1}, -{55,20,0}, -{55,20,1}, -{55,20,2}, -{55,20,3}, -{55,20,4}, -{55,20,5}, -{55,20,6}, -{55,20,7}, -{55,20,8}, -{55,20,9}, -{55,20,10}, -{55,20,11}, -{55,20,12}, -{55,20,13}, -{55,20,14}, -{55,20,15}, -{55,20,16}, -{55,20,17}, -{55,20,18}, -{55,20,19}, -{55,20,20}, -{55,20,21}, -{55,20,22}, -{55,20,23}, -{55,20,24}, -{55,20,25}, -{55,20,26}, -{55,20,27}, -{55,20,28}, -{55,20,29}, -{55,20,30}, -{55,20,31}, -{55,20,32}, -{55,20,33}, -{55,20,34}, -{55,20,35}, -{55,20,36}, -{55,20,37}, -{55,20,38}, -{55,20,39}, -{55,20,40}, -{55,20,41}, -{55,20,42}, -{55,20,43}, -{55,20,44}, -{55,20,45}, -{55,20,46}, -{55,20,47}, -{55,20,48}, -{55,20,49}, -{55,20,50}, -{55,20,51}, -{55,20,52}, -{55,20,53}, -{55,20,54}, -{55,20,55}, -{55,20,56}, -{55,20,57}, -{55,20,58}, -{55,20,59}, -{55,20,60}, -{55,20,61}, -{55,21,-70}, -{55,21,-69}, -{55,21,-68}, -{55,21,-67}, -{55,21,-66}, -{55,21,-65}, -{55,21,-64}, -{55,21,-63}, -{55,21,-62}, -{55,21,-61}, -{55,21,-60}, -{55,21,-59}, -{55,21,-58}, -{55,21,-57}, -{55,21,-56}, -{55,21,-55}, -{55,21,-54}, -{55,21,-53}, -{55,21,-52}, -{55,21,-51}, -{55,21,-50}, -{55,21,-49}, -{55,21,-48}, -{55,21,-47}, -{55,21,-46}, -{55,21,-45}, -{55,21,-44}, -{55,21,-43}, -{55,21,-42}, -{55,21,-41}, -{55,21,-40}, -{55,21,-39}, -{55,21,-38}, -{55,21,-37}, -{55,21,-36}, -{55,21,-35}, -{55,21,-34}, -{55,21,-33}, -{55,21,-32}, -{55,21,-31}, -{55,21,-30}, -{55,21,-29}, -{55,21,-28}, -{55,21,-27}, -{55,21,-26}, -{55,21,-25}, -{55,21,-24}, -{55,21,-23}, -{55,21,-22}, -{55,21,-21}, -{55,21,-20}, -{55,21,-19}, -{55,21,-18}, -{55,21,-17}, -{55,21,-16}, -{55,21,-15}, -{55,21,-14}, -{55,21,-13}, -{55,21,-12}, -{55,21,-11}, -{55,21,-10}, -{55,21,-9}, -{55,21,-8}, -{55,21,-7}, -{55,21,-6}, -{55,21,-5}, -{55,21,-4}, -{55,21,-3}, -{55,21,-2}, -{55,21,-1}, -{55,21,0}, -{55,21,1}, -{55,21,2}, -{55,21,3}, -{55,21,4}, -{55,21,5}, -{55,21,6}, -{55,21,7}, -{55,21,8}, -{55,21,9}, -{55,21,10}, -{55,21,11}, -{55,21,12}, -{55,21,13}, -{55,21,14}, -{55,21,15}, -{55,21,16}, -{55,21,17}, -{55,21,18}, -{55,21,19}, -{55,21,20}, -{55,21,21}, -{55,21,22}, -{55,21,23}, -{55,21,24}, -{55,21,25}, -{55,21,26}, -{55,21,27}, -{55,21,28}, -{55,21,29}, -{55,21,30}, -{55,21,31}, -{55,21,32}, -{55,21,33}, -{55,21,34}, -{55,21,35}, -{55,21,36}, -{55,21,37}, -{55,21,38}, -{55,21,39}, -{55,21,40}, -{55,21,41}, -{55,21,42}, -{55,21,43}, -{55,21,44}, -{55,21,45}, -{55,21,46}, -{55,21,47}, -{55,21,48}, -{55,21,49}, -{55,21,50}, -{55,21,51}, -{55,21,52}, -{55,21,53}, -{55,21,54}, -{55,21,55}, -{55,21,56}, -{55,21,57}, -{55,21,58}, -{55,21,59}, -{55,21,60}, -{55,21,61}, -{55,21,62}, -{55,22,-70}, -{55,22,-69}, -{55,22,-68}, -{55,22,-67}, -{55,22,-66}, -{55,22,-65}, -{55,22,-64}, -{55,22,-63}, -{55,22,-62}, -{55,22,-61}, -{55,22,-60}, -{55,22,-59}, -{55,22,-58}, -{55,22,-57}, -{55,22,-56}, -{55,22,-55}, -{55,22,-54}, -{55,22,-53}, -{55,22,-52}, -{55,22,-51}, -{55,22,-50}, -{55,22,-49}, -{55,22,-48}, -{55,22,-47}, -{55,22,-46}, -{55,22,-45}, -{55,22,-44}, -{55,22,-43}, -{55,22,-42}, -{55,22,-41}, -{55,22,-40}, -{55,22,-39}, -{55,22,-38}, -{55,22,-37}, -{55,22,-36}, -{55,22,-35}, -{55,22,-34}, -{55,22,-33}, -{55,22,-32}, -{55,22,-31}, -{55,22,-30}, -{55,22,-29}, -{55,22,-28}, -{55,22,-27}, -{55,22,-26}, -{55,22,-25}, -{55,22,-24}, -{55,22,-23}, -{55,22,-22}, -{55,22,-21}, -{55,22,-20}, -{55,22,-19}, -{55,22,-18}, -{55,22,-17}, -{55,22,-16}, -{55,22,-15}, -{55,22,-14}, -{55,22,-13}, -{55,22,-12}, -{55,22,-11}, -{55,22,-10}, -{55,22,-9}, -{55,22,-8}, -{55,22,-7}, -{55,22,-6}, -{55,22,-5}, -{55,22,-4}, -{55,22,-3}, -{55,22,-2}, -{55,22,-1}, -{55,22,0}, -{55,22,1}, -{55,22,2}, -{55,22,3}, -{55,22,4}, -{55,22,5}, -{55,22,6}, -{55,22,7}, -{55,22,8}, -{55,22,9}, -{55,22,10}, -{55,22,11}, -{55,22,12}, -{55,22,13}, -{55,22,14}, -{55,22,15}, -{55,22,16}, -{55,22,17}, -{55,22,18}, -{55,22,19}, -{55,22,20}, -{55,22,21}, -{55,22,22}, -{55,22,23}, -{55,22,24}, -{55,22,25}, -{55,22,26}, -{55,22,27}, -{55,22,28}, -{55,22,29}, -{55,22,30}, -{55,22,31}, -{55,22,32}, -{55,22,33}, -{55,22,34}, -{55,22,35}, -{55,22,36}, -{55,22,37}, -{55,22,38}, -{55,22,39}, -{55,22,40}, -{55,22,41}, -{55,22,42}, -{55,22,43}, -{55,22,44}, -{55,22,45}, -{55,22,46}, -{55,22,47}, -{55,22,48}, -{55,22,49}, -{55,22,50}, -{55,22,51}, -{55,22,52}, -{55,22,53}, -{55,22,54}, -{55,22,55}, -{55,22,56}, -{55,22,57}, -{55,22,58}, -{55,22,59}, -{55,22,60}, -{55,22,61}, -{55,22,62}, -{55,23,-70}, -{55,23,-69}, -{55,23,-68}, -{55,23,-67}, -{55,23,-66}, -{55,23,-65}, -{55,23,-64}, -{55,23,-63}, -{55,23,-62}, -{55,23,-61}, -{55,23,-60}, -{55,23,-59}, -{55,23,-58}, -{55,23,-57}, -{55,23,-56}, -{55,23,-55}, -{55,23,-54}, -{55,23,-53}, -{55,23,-52}, -{55,23,-51}, -{55,23,-50}, -{55,23,-49}, -{55,23,-48}, -{55,23,-47}, -{55,23,-46}, -{55,23,-45}, -{55,23,-44}, -{55,23,-43}, -{55,23,-42}, -{55,23,-41}, -{55,23,-40}, -{55,23,-39}, -{55,23,-38}, -{55,23,-37}, -{55,23,-36}, -{55,23,-35}, -{55,23,-34}, -{55,23,-33}, -{55,23,-32}, -{55,23,-31}, -{55,23,-30}, -{55,23,-29}, -{55,23,-28}, -{55,23,-27}, -{55,23,-26}, -{55,23,-25}, -{55,23,-24}, -{55,23,-23}, -{55,23,-22}, -{55,23,-21}, -{55,23,-20}, -{55,23,-19}, -{55,23,-18}, -{55,23,-17}, -{55,23,-16}, -{55,23,-15}, -{55,23,-14}, -{55,23,-13}, -{55,23,-12}, -{55,23,-11}, -{55,23,-10}, -{55,23,-9}, -{55,23,-8}, -{55,23,-7}, -{55,23,-6}, -{55,23,-5}, -{55,23,-4}, -{55,23,-3}, -{55,23,-2}, -{55,23,-1}, -{55,23,0}, -{55,23,1}, -{55,23,2}, -{55,23,3}, -{55,23,4}, -{55,23,5}, -{55,23,6}, -{55,23,7}, -{55,23,8}, -{55,23,9}, -{55,23,10}, -{55,23,11}, -{55,23,12}, -{55,23,13}, -{55,23,14}, -{55,23,15}, -{55,23,16}, -{55,23,17}, -{55,23,18}, -{55,23,19}, -{55,23,20}, -{55,23,21}, -{55,23,22}, -{55,23,23}, -{55,23,24}, -{55,23,25}, -{55,23,26}, -{55,23,27}, -{55,23,28}, -{55,23,29}, -{55,23,30}, -{55,23,31}, -{55,23,32}, -{55,23,33}, -{55,23,34}, -{55,23,35}, -{55,23,36}, -{55,23,37}, -{55,23,38}, -{55,23,39}, -{55,23,40}, -{55,23,41}, -{55,23,42}, -{55,23,43}, -{55,23,44}, -{55,23,45}, -{55,23,46}, -{55,23,47}, -{55,23,48}, -{55,23,49}, -{55,23,50}, -{55,23,51}, -{55,23,52}, -{55,23,53}, -{55,23,54}, -{55,23,55}, -{55,23,56}, -{55,23,57}, -{55,23,58}, -{55,23,59}, -{55,23,60}, -{55,23,61}, -{55,23,62}, -{55,24,-70}, -{55,24,-69}, -{55,24,-68}, -{55,24,-67}, -{55,24,-66}, -{55,24,-65}, -{55,24,-64}, -{55,24,-63}, -{55,24,-62}, -{55,24,-61}, -{55,24,-60}, -{55,24,-59}, -{55,24,-58}, -{55,24,-57}, -{55,24,-56}, -{55,24,-55}, -{55,24,-54}, -{55,24,-53}, -{55,24,-52}, -{55,24,-51}, -{55,24,-50}, -{55,24,-49}, -{55,24,-48}, -{55,24,-47}, -{55,24,-46}, -{55,24,-45}, -{55,24,-44}, -{55,24,-43}, -{55,24,-42}, -{55,24,-41}, -{55,24,-40}, -{55,24,-39}, -{55,24,-38}, -{55,24,-37}, -{55,24,-36}, -{55,24,-35}, -{55,24,-34}, -{55,24,-33}, -{55,24,-32}, -{55,24,-31}, -{55,24,-30}, -{55,24,-29}, -{55,24,-28}, -{55,24,-27}, -{55,24,-26}, -{55,24,-25}, -{55,24,-24}, -{55,24,-23}, -{55,24,-22}, -{55,24,-21}, -{55,24,-20}, -{55,24,-19}, -{55,24,-18}, -{55,24,-17}, -{55,24,-16}, -{55,24,-15}, -{55,24,-14}, -{55,24,-13}, -{55,24,-12}, -{55,24,-11}, -{55,24,-10}, -{55,24,-9}, -{55,24,-8}, -{55,24,-7}, -{55,24,-6}, -{55,24,-5}, -{55,24,-4}, -{55,24,-3}, -{55,24,-2}, -{55,24,-1}, -{55,24,0}, -{55,24,1}, -{55,24,2}, -{55,24,3}, -{55,24,4}, -{55,24,5}, -{55,24,6}, -{55,24,7}, -{55,24,8}, -{55,24,9}, -{55,24,10}, -{55,24,11}, -{55,24,12}, -{55,24,13}, -{55,24,14}, -{55,24,15}, -{55,24,16}, -{55,24,17}, -{55,24,18}, -{55,24,19}, -{55,24,20}, -{55,24,21}, -{55,24,22}, -{55,24,23}, -{55,24,24}, -{55,24,25}, -{55,24,26}, -{55,24,27}, -{55,24,28}, -{55,24,29}, -{55,24,30}, -{55,24,31}, -{55,24,32}, -{55,24,33}, -{55,24,34}, -{55,24,35}, -{55,24,36}, -{55,24,37}, -{55,24,38}, -{55,24,39}, -{55,24,40}, -{55,24,41}, -{55,24,42}, -{55,24,43}, -{55,24,44}, -{55,24,45}, -{55,24,46}, -{55,24,47}, -{55,24,48}, -{55,24,49}, -{55,24,50}, -{55,24,51}, -{55,24,52}, -{55,24,53}, -{55,24,54}, -{55,24,55}, -{55,24,56}, -{55,24,57}, -{55,24,58}, -{55,24,59}, -{55,24,60}, -{55,24,61}, -{55,24,62}, -{55,25,-70}, -{55,25,-69}, -{55,25,-68}, -{55,25,-67}, -{55,25,-66}, -{55,25,-65}, -{55,25,-64}, -{55,25,-63}, -{55,25,-62}, -{55,25,-61}, -{55,25,-60}, -{55,25,-59}, -{55,25,-58}, -{55,25,-57}, -{55,25,-56}, -{55,25,-55}, -{55,25,-54}, -{55,25,-53}, -{55,25,-52}, -{55,25,-51}, -{55,25,-50}, -{55,25,-49}, -{55,25,-48}, -{55,25,-47}, -{55,25,-46}, -{55,25,-45}, -{55,25,-44}, -{55,25,-43}, -{55,25,-42}, -{55,25,-41}, -{55,25,-40}, -{55,25,-39}, -{55,25,-38}, -{55,25,-37}, -{55,25,-36}, -{55,25,-35}, -{55,25,-34}, -{55,25,-33}, -{55,25,-32}, -{55,25,-31}, -{55,25,-30}, -{55,25,-29}, -{55,25,-28}, -{55,25,-27}, -{55,25,-26}, -{55,25,-25}, -{55,25,-24}, -{55,25,-23}, -{55,25,-22}, -{55,25,-21}, -{55,25,-20}, -{55,25,-19}, -{55,25,-18}, -{55,25,-17}, -{55,25,-16}, -{55,25,-15}, -{55,25,-14}, -{55,25,-13}, -{55,25,-12}, -{55,25,-11}, -{55,25,-10}, -{55,25,-9}, -{55,25,-8}, -{55,25,-7}, -{55,25,-6}, -{55,25,-5}, -{55,25,-4}, -{55,25,-3}, -{55,25,-2}, -{55,25,-1}, -{55,25,0}, -{55,25,1}, -{55,25,2}, -{55,25,3}, -{55,25,4}, -{55,25,5}, -{55,25,6}, -{55,25,7}, -{55,25,8}, -{55,25,9}, -{55,25,10}, -{55,25,11}, -{55,25,12}, -{55,25,13}, -{55,25,14}, -{55,25,15}, -{55,25,16}, -{55,25,17}, -{55,25,18}, -{55,25,19}, -{55,25,20}, -{55,25,21}, -{55,25,22}, -{55,25,23}, -{55,25,24}, -{55,25,25}, -{55,25,26}, -{55,25,27}, -{55,25,28}, -{55,25,29}, -{55,25,30}, -{55,25,31}, -{55,25,32}, -{55,25,33}, -{55,25,34}, -{55,25,35}, -{55,25,36}, -{55,25,37}, -{55,25,38}, -{55,25,39}, -{55,25,40}, -{55,25,41}, -{55,25,42}, -{55,25,43}, -{55,25,44}, -{55,25,45}, -{55,25,46}, -{55,25,47}, -{55,25,48}, -{55,25,49}, -{55,25,50}, -{55,25,51}, -{55,25,52}, -{55,25,53}, -{55,25,54}, -{55,25,55}, -{55,25,56}, -{55,25,57}, -{55,25,58}, -{55,25,59}, -{55,25,60}, -{55,25,61}, -{55,25,62}, -{55,26,-70}, -{55,26,-69}, -{55,26,-68}, -{55,26,-67}, -{55,26,-66}, -{55,26,-65}, -{55,26,-64}, -{55,26,-63}, -{55,26,-62}, -{55,26,-61}, -{55,26,-60}, -{55,26,-59}, -{55,26,-58}, -{55,26,-57}, -{55,26,-56}, -{55,26,-55}, -{55,26,-54}, -{55,26,-53}, -{55,26,-52}, -{55,26,-51}, -{55,26,-50}, -{55,26,-49}, -{55,26,-48}, -{55,26,-47}, -{55,26,-46}, -{55,26,-45}, -{55,26,-44}, -{55,26,-43}, -{55,26,-42}, -{55,26,-41}, -{55,26,-40}, -{55,26,-39}, -{55,26,-38}, -{55,26,-37}, -{55,26,-36}, -{55,26,-35}, -{55,26,-34}, -{55,26,-33}, -{55,26,-32}, -{55,26,-31}, -{55,26,-30}, -{55,26,-29}, -{55,26,-28}, -{55,26,-27}, -{55,26,-26}, -{55,26,-25}, -{55,26,-24}, -{55,26,-23}, -{55,26,-22}, -{55,26,-21}, -{55,26,-20}, -{55,26,-19}, -{55,26,-18}, -{55,26,-17}, -{55,26,-16}, -{55,26,-15}, -{55,26,-14}, -{55,26,-13}, -{55,26,-12}, -{55,26,-11}, -{55,26,-10}, -{55,26,-9}, -{55,26,-8}, -{55,26,-7}, -{55,26,-6}, -{55,26,-5}, -{55,26,-4}, -{55,26,-3}, -{55,26,-2}, -{55,26,-1}, -{55,26,0}, -{55,26,1}, -{55,26,2}, -{55,26,3}, -{55,26,4}, -{55,26,5}, -{55,26,6}, -{55,26,7}, -{55,26,8}, -{55,26,9}, -{55,26,10}, -{55,26,11}, -{55,26,12}, -{55,26,13}, -{55,26,14}, -{55,26,15}, -{55,26,16}, -{55,26,17}, -{55,26,18}, -{55,26,19}, -{55,26,20}, -{55,26,21}, -{55,26,22}, -{55,26,23}, -{55,26,24}, -{55,26,25}, -{55,26,26}, -{55,26,27}, -{55,26,28}, -{55,26,29}, -{55,26,30}, -{55,26,31}, -{55,26,32}, -{55,26,33}, -{55,26,34}, -{55,26,35}, -{55,26,36}, -{55,26,37}, -{55,26,38}, -{55,26,39}, -{55,26,40}, -{55,26,41}, -{55,26,42}, -{55,26,43}, -{55,26,44}, -{55,26,45}, -{55,26,46}, -{55,26,47}, -{55,26,48}, -{55,26,49}, -{55,26,50}, -{55,26,51}, -{55,26,52}, -{55,26,53}, -{55,26,54}, -{55,26,55}, -{55,26,56}, -{55,26,57}, -{55,26,58}, -{55,26,59}, -{55,26,60}, -{55,26,61}, -{55,26,62}, -{55,27,-70}, -{55,27,-69}, -{55,27,-68}, -{55,27,-67}, -{55,27,-66}, -{55,27,-65}, -{55,27,-64}, -{55,27,-63}, -{55,27,-62}, -{55,27,-61}, -{55,27,-60}, -{55,27,-59}, -{55,27,-58}, -{55,27,-57}, -{55,27,-56}, -{55,27,-55}, -{55,27,-54}, -{55,27,-53}, -{55,27,-52}, -{55,27,-51}, -{55,27,-50}, -{55,27,-49}, -{55,27,-48}, -{55,27,-47}, -{55,27,-46}, -{55,27,-45}, -{55,27,-44}, -{55,27,-43}, -{55,27,-42}, -{55,27,-41}, -{55,27,-40}, -{55,27,-39}, -{55,27,-38}, -{55,27,-37}, -{55,27,-36}, -{55,27,-35}, -{55,27,-34}, -{55,27,-33}, -{55,27,-32}, -{55,27,-31}, -{55,27,-30}, -{55,27,-29}, -{55,27,-28}, -{55,27,-27}, -{55,27,-26}, -{55,27,-25}, -{55,27,-24}, -{55,27,-23}, -{55,27,-22}, -{55,27,-21}, -{55,27,-20}, -{55,27,-19}, -{55,27,-18}, -{55,27,-17}, -{55,27,-16}, -{55,27,-15}, -{55,27,-14}, -{55,27,-13}, -{55,27,-12}, -{55,27,-11}, -{55,27,-10}, -{55,27,-9}, -{55,27,-8}, -{55,27,-7}, -{55,27,-6}, -{55,27,-5}, -{55,27,-4}, -{55,27,-3}, -{55,27,-2}, -{55,27,-1}, -{55,27,0}, -{55,27,1}, -{55,27,2}, -{55,27,3}, -{55,27,4}, -{55,27,5}, -{55,27,6}, -{55,27,7}, -{55,27,8}, -{55,27,9}, -{55,27,10}, -{55,27,11}, -{55,27,12}, -{55,27,13}, -{55,27,14}, -{55,27,15}, -{55,27,16}, -{55,27,17}, -{55,27,18}, -{55,27,19}, -{55,27,20}, -{55,27,21}, -{55,27,22}, -{55,27,23}, -{55,27,24}, -{55,27,25}, -{55,27,26}, -{55,27,27}, -{55,27,28}, -{55,27,29}, -{55,27,30}, -{55,27,31}, -{55,27,32}, -{55,27,33}, -{55,27,34}, -{55,27,35}, -{55,27,36}, -{55,27,37}, -{55,27,38}, -{55,27,39}, -{55,27,40}, -{55,27,41}, -{55,27,42}, -{55,27,43}, -{55,27,44}, -{55,27,45}, -{55,27,46}, -{55,27,47}, -{55,27,48}, -{55,27,49}, -{55,27,50}, -{55,27,51}, -{55,27,52}, -{55,27,53}, -{55,27,54}, -{55,27,55}, -{55,27,56}, -{55,27,57}, -{55,27,58}, -{55,27,59}, -{55,27,60}, -{55,27,61}, -{55,27,62}, -{55,28,-70}, -{55,28,-69}, -{55,28,-68}, -{55,28,-67}, -{55,28,-66}, -{55,28,-65}, -{55,28,-64}, -{55,28,-63}, -{55,28,-62}, -{55,28,-61}, -{55,28,-60}, -{55,28,-59}, -{55,28,-58}, -{55,28,-57}, -{55,28,-56}, -{55,28,-55}, -{55,28,-54}, -{55,28,-53}, -{55,28,-52}, -{55,28,-51}, -{55,28,-50}, -{55,28,-49}, -{55,28,-48}, -{55,28,-47}, -{55,28,-46}, -{55,28,-45}, -{55,28,-44}, -{55,28,-43}, -{55,28,-42}, -{55,28,-41}, -{55,28,-40}, -{55,28,-39}, -{55,28,-38}, -{55,28,-37}, -{55,28,-36}, -{55,28,-35}, -{55,28,-34}, -{55,28,-33}, -{55,28,-32}, -{55,28,-31}, -{55,28,-30}, -{55,28,-29}, -{55,28,-28}, -{55,28,-27}, -{55,28,-26}, -{55,28,-25}, -{55,28,-24}, -{55,28,-23}, -{55,28,-22}, -{55,28,-21}, -{55,28,-20}, -{55,28,-19}, -{55,28,-18}, -{55,28,-17}, -{55,28,-16}, -{55,28,-15}, -{55,28,-14}, -{55,28,-13}, -{55,28,-12}, -{55,28,-11}, -{55,28,-10}, -{55,28,-9}, -{55,28,-8}, -{55,28,-7}, -{55,28,-6}, -{55,28,-5}, -{55,28,-4}, -{55,28,-3}, -{55,28,-2}, -{55,28,-1}, -{55,28,0}, -{55,28,1}, -{55,28,2}, -{55,28,3}, -{55,28,4}, -{55,28,5}, -{55,28,6}, -{55,28,7}, -{55,28,8}, -{55,28,9}, -{55,28,10}, -{55,28,11}, -{55,28,12}, -{55,28,13}, -{55,28,14}, -{55,28,15}, -{55,28,16}, -{55,28,17}, -{55,28,18}, -{55,28,19}, -{55,28,20}, -{55,28,21}, -{55,28,22}, -{55,28,23}, -{55,28,24}, -{55,28,25}, -{55,28,26}, -{55,28,27}, -{55,28,28}, -{55,28,29}, -{55,28,30}, -{55,28,31}, -{55,28,32}, -{55,28,33}, -{55,28,34}, -{55,28,35}, -{55,28,36}, -{55,28,37}, -{55,28,38}, -{55,28,39}, -{55,28,40}, -{55,28,41}, -{55,28,42}, -{55,28,43}, -{55,28,44}, -{55,28,45}, -{55,28,46}, -{55,28,47}, -{55,28,48}, -{55,28,49}, -{55,28,50}, -{55,28,51}, -{55,28,52}, -{55,28,53}, -{55,28,54}, -{55,28,55}, -{55,28,56}, -{55,28,57}, -{55,28,58}, -{55,28,59}, -{55,28,60}, -{55,28,61}, -{55,28,62}, -{55,29,-70}, -{55,29,-69}, -{55,29,-68}, -{55,29,-67}, -{55,29,-66}, -{55,29,-65}, -{55,29,-64}, -{55,29,-63}, -{55,29,-62}, -{55,29,-61}, -{55,29,-60}, -{55,29,-59}, -{55,29,-58}, -{55,29,-57}, -{55,29,-56}, -{55,29,-55}, -{55,29,-54}, -{55,29,-53}, -{55,29,-52}, -{55,29,-51}, -{55,29,-50}, -{55,29,-49}, -{55,29,-48}, -{55,29,-47}, -{55,29,-46}, -{55,29,-45}, -{55,29,-44}, -{55,29,-43}, -{55,29,-42}, -{55,29,-41}, -{55,29,-40}, -{55,29,-39}, -{55,29,-38}, -{55,29,-37}, -{55,29,-36}, -{55,29,-35}, -{55,29,-34}, -{55,29,-33}, -{55,29,-32}, -{55,29,-31}, -{55,29,-30}, -{55,29,-29}, -{55,29,-28}, -{55,29,-27}, -{55,29,-26}, -{55,29,-25}, -{55,29,-24}, -{55,29,-23}, -{55,29,-22}, -{55,29,-21}, -{55,29,-20}, -{55,29,-19}, -{55,29,-18}, -{55,29,-17}, -{55,29,-16}, -{55,29,-15}, -{55,29,-14}, -{55,29,-13}, -{55,29,-12}, -{55,29,-11}, -{55,29,-10}, -{55,29,-9}, -{55,29,-8}, -{55,29,-7}, -{55,29,-6}, -{55,29,-5}, -{55,29,-4}, -{55,29,-3}, -{55,29,-2}, -{55,29,-1}, -{55,29,0}, -{55,29,1}, -{55,29,2}, -{55,29,3}, -{55,29,4}, -{55,29,5}, -{55,29,6}, -{55,29,7}, -{55,29,8}, -{55,29,9}, -{55,29,10}, -{55,29,11}, -{55,29,12}, -{55,29,13}, -{55,29,14}, -{55,29,15}, -{55,29,16}, -{55,29,17}, -{55,29,18}, -{55,29,19}, -{55,29,20}, -{55,29,21}, -{55,29,22}, -{55,29,23}, -{55,29,24}, -{55,29,25}, -{55,29,26}, -{55,29,27}, -{55,29,28}, -{55,29,29}, -{55,29,30}, -{55,29,31}, -{55,29,32}, -{55,29,33}, -{55,29,34}, -{55,29,35}, -{55,29,36}, -{55,29,37}, -{55,29,38}, -{55,29,39}, -{55,29,40}, -{55,29,41}, -{55,29,42}, -{55,29,43}, -{55,29,44}, -{55,29,45}, -{55,29,46}, -{55,29,47}, -{55,29,48}, -{55,29,49}, -{55,29,50}, -{55,29,51}, -{55,29,52}, -{55,29,53}, -{55,29,54}, -{55,29,55}, -{55,29,56}, -{55,29,57}, -{55,29,58}, -{55,29,59}, -{55,29,60}, -{55,29,61}, -{55,29,62}, -{55,30,-70}, -{55,30,-69}, -{55,30,-68}, -{55,30,-67}, -{55,30,-66}, -{55,30,-65}, -{55,30,-64}, -{55,30,-63}, -{55,30,-62}, -{55,30,-61}, -{55,30,-60}, -{55,30,-59}, -{55,30,-58}, -{55,30,-57}, -{55,30,-56}, -{55,30,-55}, -{55,30,-54}, -{55,30,-53}, -{55,30,-52}, -{55,30,-51}, -{55,30,-50}, -{55,30,-49}, -{55,30,-48}, -{55,30,-47}, -{55,30,-46}, -{55,30,-45}, -{55,30,-44}, -{55,30,-43}, -{55,30,-42}, -{55,30,-41}, -{55,30,-40}, -{55,30,-39}, -{55,30,-38}, -{55,30,-37}, -{55,30,-36}, -{55,30,-35}, -{55,30,-34}, -{55,30,-33}, -{55,30,-32}, -{55,30,-31}, -{55,30,-30}, -{55,30,-29}, -{55,30,-28}, -{55,30,-27}, -{55,30,-26}, -{55,30,-25}, -{55,30,-24}, -{55,30,-23}, -{55,30,-22}, -{55,30,-21}, -{55,30,-20}, -{55,30,-19}, -{55,30,-18}, -{55,30,-17}, -{55,30,-16}, -{55,30,-15}, -{55,30,-14}, -{55,30,-13}, -{55,30,-12}, -{55,30,-11}, -{55,30,-10}, -{55,30,-9}, -{55,30,-8}, -{55,30,-7}, -{55,30,-6}, -{55,30,-5}, -{55,30,-4}, -{55,30,-3}, -{55,30,-2}, -{55,30,-1}, -{55,30,0}, -{55,30,1}, -{55,30,2}, -{55,30,3}, -{55,30,4}, -{55,30,5}, -{55,30,6}, -{55,30,7}, -{55,30,8}, -{55,30,9}, -{55,30,10}, -{55,30,11}, -{55,30,12}, -{55,30,13}, -{55,30,14}, -{55,30,15}, -{55,30,16}, -{55,30,17}, -{55,30,18}, -{55,30,19}, -{55,30,20}, -{55,30,21}, -{55,30,22}, -{55,30,23}, -{55,30,24}, -{55,30,25}, -{55,30,26}, -{55,30,27}, -{55,30,28}, -{55,30,29}, -{55,30,30}, -{55,30,31}, -{55,30,32}, -{55,30,33}, -{55,30,34}, -{55,30,35}, -{55,30,36}, -{55,30,37}, -{55,30,38}, -{55,30,39}, -{55,30,40}, -{55,30,41}, -{55,30,42}, -{55,30,43}, -{55,30,44}, -{55,30,45}, -{55,30,46}, -{55,30,47}, -{55,30,48}, -{55,30,49}, -{55,30,50}, -{55,30,51}, -{55,30,52}, -{55,30,53}, -{55,30,54}, -{55,30,55}, -{55,30,56}, -{55,30,57}, -{55,30,58}, -{55,30,59}, -{55,30,60}, -{55,30,61}, -{55,30,62}, -{55,31,-70}, -{55,31,-69}, -{55,31,-68}, -{55,31,-67}, -{55,31,-66}, -{55,31,-65}, -{55,31,-64}, -{55,31,-63}, -{55,31,-62}, -{55,31,-61}, -{55,31,-60}, -{55,31,-59}, -{55,31,-58}, -{55,31,-57}, -{55,31,-56}, -{55,31,-55}, -{55,31,-54}, -{55,31,-53}, -{55,31,-52}, -{55,31,-51}, -{55,31,-50}, -{55,31,-49}, -{55,31,-48}, -{55,31,-47}, -{55,31,-46}, -{55,31,-45}, -{55,31,-44}, -{55,31,-43}, -{55,31,-42}, -{55,31,-41}, -{55,31,-40}, -{55,31,-39}, -{55,31,-38}, -{55,31,-37}, -{55,31,-36}, -{55,31,-35}, -{55,31,-34}, -{55,31,-33}, -{55,31,-32}, -{55,31,-31}, -{55,31,-30}, -{55,31,-29}, -{55,31,-28}, -{55,31,-27}, -{55,31,-26}, -{55,31,-25}, -{55,31,-24}, -{55,31,-23}, -{55,31,-22}, -{55,31,-21}, -{55,31,-20}, -{55,31,-19}, -{55,31,-18}, -{55,31,-17}, -{55,31,-16}, -{55,31,-15}, -{55,31,-14}, -{55,31,-13}, -{55,31,-12}, -{55,31,-11}, -{55,31,-10}, -{55,31,-9}, -{55,31,-8}, -{55,31,-7}, -{55,31,-6}, -{55,31,-5}, -{55,31,-4}, -{55,31,-3}, -{55,31,-2}, -{55,31,-1}, -{55,31,0}, -{55,31,1}, -{55,31,2}, -{55,31,3}, -{55,31,4}, -{55,31,5}, -{55,31,6}, -{55,31,7}, -{55,31,8}, -{55,31,9}, -{55,31,10}, -{55,31,11}, -{55,31,12}, -{55,31,13}, -{55,31,14}, -{55,31,15}, -{55,31,16}, -{55,31,17}, -{55,31,18}, -{55,31,19}, -{55,31,20}, -{55,31,21}, -{55,31,22}, -{55,31,23}, -{55,31,24}, -{55,31,25}, -{55,31,26}, -{55,31,27}, -{55,31,28}, -{55,31,29}, -{55,31,30}, -{55,31,31}, -{55,31,32}, -{55,31,33}, -{55,31,34}, -{55,31,35}, -{55,31,36}, -{55,31,37}, -{55,31,38}, -{55,31,39}, -{55,31,40}, -{55,31,41}, -{55,31,42}, -{55,31,43}, -{55,31,44}, -{55,31,45}, -{55,31,46}, -{55,31,47}, -{55,31,48}, -{55,31,49}, -{55,31,50}, -{55,31,51}, -{55,31,52}, -{55,31,53}, -{55,31,54}, -{55,31,55}, -{55,31,56}, -{55,31,57}, -{55,31,58}, -{55,31,59}, -{55,31,60}, -{55,31,61}, -{55,31,62}, -{55,32,-70}, -{55,32,-69}, -{55,32,-68}, -{55,32,-67}, -{55,32,-66}, -{55,32,-65}, -{55,32,-64}, -{55,32,-63}, -{55,32,-62}, -{55,32,-61}, -{55,32,-60}, -{55,32,-59}, -{55,32,-58}, -{55,32,-57}, -{55,32,-56}, -{55,32,-55}, -{55,32,-54}, -{55,32,-53}, -{55,32,-52}, -{55,32,-51}, -{55,32,-50}, -{55,32,-49}, -{55,32,-48}, -{55,32,-47}, -{55,32,-46}, -{55,32,-45}, -{55,32,-44}, -{55,32,-43}, -{55,32,-42}, -{55,32,-41}, -{55,32,-40}, -{55,32,-39}, -{55,32,-38}, -{55,32,-37}, -{55,32,-36}, -{55,32,-35}, -{55,32,-34}, -{55,32,-33}, -{55,32,-32}, -{55,32,-31}, -{55,32,-30}, -{55,32,-29}, -{55,32,-28}, -{55,32,-27}, -{55,32,-26}, -{55,32,-25}, -{55,32,-24}, -{55,32,-23}, -{55,32,-22}, -{55,32,-21}, -{55,32,-20}, -{55,32,-19}, -{55,32,-18}, -{55,32,-17}, -{55,32,-16}, -{55,32,-15}, -{55,32,-14}, -{55,32,-13}, -{55,32,-12}, -{55,32,-11}, -{55,32,-10}, -{55,32,-9}, -{55,32,-8}, -{55,32,-7}, -{55,32,-6}, -{55,32,-5}, -{55,32,-4}, -{55,32,-3}, -{55,32,-2}, -{55,32,-1}, -{55,32,0}, -{55,32,1}, -{55,32,2}, -{55,32,3}, -{55,32,4}, -{55,32,5}, -{55,32,6}, -{55,32,7}, -{55,32,8}, -{55,32,9}, -{55,32,10}, -{55,32,11}, -{55,32,12}, -{55,32,13}, -{55,32,14}, -{55,32,15}, -{55,32,16}, -{55,32,17}, -{55,32,18}, -{55,32,19}, -{55,32,20}, -{55,32,21}, -{55,32,22}, -{55,32,23}, -{55,32,24}, -{55,32,25}, -{55,32,26}, -{55,32,27}, -{55,32,28}, -{55,32,29}, -{55,32,30}, -{55,32,31}, -{55,32,32}, -{55,32,33}, -{55,32,34}, -{55,32,35}, -{55,32,36}, -{55,32,37}, -{55,32,38}, -{55,32,39}, -{55,32,40}, -{55,32,41}, -{55,32,42}, -{55,32,43}, -{55,32,44}, -{55,32,45}, -{55,32,46}, -{55,32,47}, -{55,32,48}, -{55,32,49}, -{55,32,50}, -{55,32,51}, -{55,32,52}, -{55,32,53}, -{55,32,54}, -{55,32,55}, -{55,32,56}, -{55,32,57}, -{55,32,58}, -{55,32,59}, -{55,32,60}, -{55,32,61}, -{55,32,62}, -{55,32,63}, -{55,33,-70}, -{55,33,-69}, -{55,33,-68}, -{55,33,-67}, -{55,33,-66}, -{55,33,-65}, -{55,33,-64}, -{55,33,-63}, -{55,33,-62}, -{55,33,-61}, -{55,33,-60}, -{55,33,-59}, -{55,33,-58}, -{55,33,-57}, -{55,33,-56}, -{55,33,-55}, -{55,33,-54}, -{55,33,-53}, -{55,33,-52}, -{55,33,-51}, -{55,33,-50}, -{55,33,-49}, -{55,33,-48}, -{55,33,-47}, -{55,33,-46}, -{55,33,-45}, -{55,33,-44}, -{55,33,-43}, -{55,33,-42}, -{55,33,-41}, -{55,33,-40}, -{55,33,-39}, -{55,33,-38}, -{55,33,-37}, -{55,33,-36}, -{55,33,-35}, -{55,33,-34}, -{55,33,-33}, -{55,33,-32}, -{55,33,-31}, -{55,33,-30}, -{55,33,-29}, -{55,33,-28}, -{55,33,-27}, -{55,33,-26}, -{55,33,-25}, -{55,33,-24}, -{55,33,-23}, -{55,33,-22}, -{55,33,-21}, -{55,33,-20}, -{55,33,-19}, -{55,33,-18}, -{55,33,-17}, -{55,33,-16}, -{55,33,-15}, -{55,33,-14}, -{55,33,-13}, -{55,33,-12}, -{55,33,-11}, -{55,33,-10}, -{55,33,-9}, -{55,33,-8}, -{55,33,-7}, -{55,33,-6}, -{55,33,-5}, -{55,33,-4}, -{55,33,-3}, -{55,33,-2}, -{55,33,-1}, -{55,33,0}, -{55,33,1}, -{55,33,2}, -{55,33,3}, -{55,33,4}, -{55,33,5}, -{55,33,6}, -{55,33,7}, -{55,33,8}, -{55,33,9}, -{55,33,10}, -{55,33,11}, -{55,33,12}, -{55,33,13}, -{55,33,14}, -{55,33,15}, -{55,33,16}, -{55,33,17}, -{55,33,18}, -{55,33,19}, -{55,33,20}, -{55,33,21}, -{55,33,22}, -{55,33,23}, -{55,33,24}, -{55,33,25}, -{55,33,26}, -{55,33,27}, -{55,33,28}, -{55,33,29}, -{55,33,30}, -{55,33,31}, -{55,33,32}, -{55,33,33}, -{55,33,34}, -{55,33,35}, -{55,33,36}, -{55,33,37}, -{55,33,38}, -{55,33,39}, -{55,33,40}, -{55,33,41}, -{55,33,42}, -{55,33,43}, -{55,33,44}, -{55,33,45}, -{55,33,46}, -{55,33,47}, -{55,33,48}, -{55,33,49}, -{55,33,50}, -{55,33,51}, -{55,33,52}, -{55,33,53}, -{55,33,54}, -{55,33,55}, -{55,33,56}, -{55,33,57}, -{55,33,58}, -{55,33,59}, -{55,33,60}, -{55,33,61}, -{55,33,62}, -{55,33,63}, -{55,34,-70}, -{55,34,-69}, -{55,34,-68}, -{55,34,-67}, -{55,34,-66}, -{55,34,-65}, -{55,34,-64}, -{55,34,-63}, -{55,34,-62}, -{55,34,-61}, -{55,34,-60}, -{55,34,-59}, -{55,34,-58}, -{55,34,-57}, -{55,34,-56}, -{55,34,-55}, -{55,34,-54}, -{55,34,-53}, -{55,34,-52}, -{55,34,-51}, -{55,34,-50}, -{55,34,-49}, -{55,34,-48}, -{55,34,-47}, -{55,34,-46}, -{55,34,-45}, -{55,34,-44}, -{55,34,-43}, -{55,34,-42}, -{55,34,-41}, -{55,34,-40}, -{55,34,-39}, -{55,34,-38}, -{55,34,-37}, -{55,34,-36}, -{55,34,-35}, -{55,34,-34}, -{55,34,-33}, -{55,34,-32}, -{55,34,-31}, -{55,34,-30}, -{55,34,-29}, -{55,34,-28}, -{55,34,-27}, -{55,34,-26}, -{55,34,-25}, -{55,34,-24}, -{55,34,-23}, -{55,34,-22}, -{55,34,-21}, -{55,34,-20}, -{55,34,-19}, -{55,34,-18}, -{55,34,-17}, -{55,34,-16}, -{55,34,-15}, -{55,34,-14}, -{55,34,-13}, -{55,34,-12}, -{55,34,-11}, -{55,34,-10}, -{55,34,-9}, -{55,34,-8}, -{55,34,-7}, -{55,34,-6}, -{55,34,-5}, -{55,34,-4}, -{55,34,-3}, -{55,34,-2}, -{55,34,-1}, -{55,34,0}, -{55,34,1}, -{55,34,2}, -{55,34,3}, -{55,34,4}, -{55,34,5}, -{55,34,6}, -{55,34,7}, -{55,34,8}, -{55,34,9}, -{55,34,10}, -{55,34,11}, -{55,34,12}, -{55,34,13}, -{55,34,14}, -{55,34,15}, -{55,34,16}, -{55,34,17}, -{55,34,18}, -{55,34,19}, -{55,34,20}, -{55,34,21}, -{55,34,22}, -{55,34,23}, -{55,34,24}, -{55,34,25}, -{55,34,26}, -{55,34,27}, -{55,34,28}, -{55,34,29}, -{55,34,30}, -{55,34,31}, -{55,34,32}, -{55,34,33}, -{55,34,34}, -{55,34,35}, -{55,34,36}, -{55,34,37}, -{55,34,38}, -{55,34,39}, -{55,34,40}, -{55,34,41}, -{55,34,42}, -{55,34,43}, -{55,34,44}, -{55,34,45}, -{55,34,46}, -{55,34,47}, -{55,34,48}, -{55,34,49}, -{55,34,50}, -{55,34,51}, -{55,34,52}, -{55,34,53}, -{55,34,54}, -{55,34,55}, -{55,34,56}, -{55,34,57}, -{55,34,58}, -{55,34,59}, -{55,34,60}, -{55,34,61}, -{55,34,62}, -{55,34,63}, -{55,35,-70}, -{55,35,-69}, -{55,35,-68}, -{55,35,-67}, -{55,35,-66}, -{55,35,-65}, -{55,35,-64}, -{55,35,-63}, -{55,35,-62}, -{55,35,-61}, -{55,35,-60}, -{55,35,-59}, -{55,35,-58}, -{55,35,-57}, -{55,35,-56}, -{55,35,-55}, -{55,35,-54}, -{55,35,-53}, -{55,35,-52}, -{55,35,-51}, -{55,35,-50}, -{55,35,-49}, -{55,35,-48}, -{55,35,-47}, -{55,35,-46}, -{55,35,-45}, -{55,35,-44}, -{55,35,-43}, -{55,35,-42}, -{55,35,-41}, -{55,35,-40}, -{55,35,-39}, -{55,35,-38}, -{55,35,-37}, -{55,35,-36}, -{55,35,-35}, -{55,35,-34}, -{55,35,-33}, -{55,35,-32}, -{55,35,-31}, -{55,35,-30}, -{55,35,-29}, -{55,35,-28}, -{55,35,-27}, -{55,35,-26}, -{55,35,-25}, -{55,35,-24}, -{55,35,-23}, -{55,35,-22}, -{55,35,-21}, -{55,35,-20}, -{55,35,-19}, -{55,35,-18}, -{55,35,-17}, -{55,35,-16}, -{55,35,-15}, -{55,35,-14}, -{55,35,-13}, -{55,35,-12}, -{55,35,-11}, -{55,35,-10}, -{55,35,-9}, -{55,35,-8}, -{55,35,-7}, -{55,35,-6}, -{55,35,-5}, -{55,35,-4}, -{55,35,-3}, -{55,35,-2}, -{55,35,-1}, -{55,35,0}, -{55,35,1}, -{55,35,2}, -{55,35,3}, -{55,35,4}, -{55,35,5}, -{55,35,6}, -{55,35,7}, -{55,35,8}, -{55,35,9}, -{55,35,10}, -{55,35,11}, -{55,35,12}, -{55,35,13}, -{55,35,14}, -{55,35,15}, -{55,35,16}, -{55,35,17}, -{55,35,18}, -{55,35,19}, -{55,35,20}, -{55,35,21}, -{55,35,22}, -{55,35,23}, -{55,35,24}, -{55,35,25}, -{55,35,26}, -{55,35,27}, -{55,35,28}, -{55,35,29}, -{55,35,30}, -{55,35,31}, -{55,35,32}, -{55,35,33}, -{55,35,34}, -{55,35,35}, -{55,35,36}, -{55,35,37}, -{55,35,38}, -{55,35,39}, -{55,35,40}, -{55,35,41}, -{55,35,42}, -{55,35,43}, -{55,35,44}, -{55,35,45}, -{55,35,46}, -{55,35,47}, -{55,35,48}, -{55,35,49}, -{55,35,50}, -{55,35,51}, -{55,35,52}, -{55,35,53}, -{55,35,54}, -{55,35,55}, -{55,35,56}, -{55,35,57}, -{55,35,58}, -{55,35,59}, -{55,35,60}, -{55,35,61}, -{55,35,62}, -{55,35,63}, -{55,36,-70}, -{55,36,-69}, -{55,36,-68}, -{55,36,-67}, -{55,36,-66}, -{55,36,-65}, -{55,36,-64}, -{55,36,-63}, -{55,36,-62}, -{55,36,-61}, -{55,36,-60}, -{55,36,-59}, -{55,36,-58}, -{55,36,-57}, -{55,36,-56}, -{55,36,-55}, -{55,36,-54}, -{55,36,-53}, -{55,36,-52}, -{55,36,-51}, -{55,36,-50}, -{55,36,-49}, -{55,36,-48}, -{55,36,-47}, -{55,36,-46}, -{55,36,-45}, -{55,36,-44}, -{55,36,-43}, -{55,36,-42}, -{55,36,-41}, -{55,36,-40}, -{55,36,-39}, -{55,36,-38}, -{55,36,-37}, -{55,36,-36}, -{55,36,-35}, -{55,36,-34}, -{55,36,-33}, -{55,36,-32}, -{55,36,-31}, -{55,36,-30}, -{55,36,-29}, -{55,36,-28}, -{55,36,-27}, -{55,36,-26}, -{55,36,-25}, -{55,36,-24}, -{55,36,-23}, -{55,36,-22}, -{55,36,-21}, -{55,36,-20}, -{55,36,-19}, -{55,36,-18}, -{55,36,-17}, -{55,36,-16}, -{55,36,-15}, -{55,36,-14}, -{55,36,-13}, -{55,36,-12}, -{55,36,-11}, -{55,36,-10}, -{55,36,-9}, -{55,36,-8}, -{55,36,-7}, -{55,36,-6}, -{55,36,-5}, -{55,36,-4}, -{55,36,-3}, -{55,36,-2}, -{55,36,-1}, -{55,36,0}, -{55,36,1}, -{55,36,2}, -{55,36,3}, -{55,36,4}, -{55,36,5}, -{55,36,6}, -{55,36,7}, -{55,36,8}, -{55,36,9}, -{55,36,10}, -{55,36,11}, -{55,36,12}, -{55,36,13}, -{55,36,14}, -{55,36,15}, -{55,36,16}, -{55,36,17}, -{55,36,18}, -{55,36,19}, -{55,36,20}, -{55,36,21}, -{55,36,22}, -{55,36,23}, -{55,36,24}, -{55,36,25}, -{55,36,26}, -{55,36,27}, -{55,36,28}, -{55,36,29}, -{55,36,30}, -{55,36,31}, -{55,36,32}, -{55,36,33}, -{55,36,34}, -{55,36,35}, -{55,36,36}, -{55,36,37}, -{55,36,38}, -{55,36,39}, -{55,36,40}, -{55,36,41}, -{55,36,42}, -{55,36,43}, -{55,36,44}, -{55,36,45}, -{55,36,46}, -{55,36,47}, -{55,36,48}, -{55,36,49}, -{55,36,50}, -{55,36,51}, -{55,36,52}, -{55,36,53}, -{55,36,54}, -{55,36,55}, -{55,36,56}, -{55,36,57}, -{55,36,58}, -{55,36,59}, -{55,36,60}, -{55,36,61}, -{55,36,62}, -{55,36,63}, -{55,37,-70}, -{55,37,-69}, -{55,37,-68}, -{55,37,-67}, -{55,37,-66}, -{55,37,-65}, -{55,37,-64}, -{55,37,-63}, -{55,37,-62}, -{55,37,-61}, -{55,37,-60}, -{55,37,-59}, -{55,37,-58}, -{55,37,-57}, -{55,37,-56}, -{55,37,-55}, -{55,37,-54}, -{55,37,-53}, -{55,37,-52}, -{55,37,-51}, -{55,37,-50}, -{55,37,-49}, -{55,37,-48}, -{55,37,-47}, -{55,37,-46}, -{55,37,-45}, -{55,37,-44}, -{55,37,-43}, -{55,37,-42}, -{55,37,-41}, -{55,37,-40}, -{55,37,-39}, -{55,37,-38}, -{55,37,-37}, -{55,37,-36}, -{55,37,-35}, -{55,37,-34}, -{55,37,-33}, -{55,37,-32}, -{55,37,-31}, -{55,37,-30}, -{55,37,-29}, -{55,37,-28}, -{55,37,-27}, -{55,37,-26}, -{55,37,-25}, -{55,37,-24}, -{55,37,-23}, -{55,37,-22}, -{55,37,-21}, -{55,37,-20}, -{55,37,-19}, -{55,37,-18}, -{55,37,-17}, -{55,37,-16}, -{55,37,-15}, -{55,37,-14}, -{55,37,-13}, -{55,37,-12}, -{55,37,-11}, -{55,37,-10}, -{55,37,-9}, -{55,37,-8}, -{55,37,-7}, -{55,37,-6}, -{55,37,-5}, -{55,37,-4}, -{55,37,-3}, -{55,37,-2}, -{55,37,-1}, -{55,37,0}, -{55,37,1}, -{55,37,2}, -{55,37,3}, -{55,37,4}, -{55,37,5}, -{55,37,6}, -{55,37,7}, -{55,37,8}, -{55,37,9}, -{55,37,10}, -{55,37,11}, -{55,37,12}, -{55,37,13}, -{55,37,14}, -{55,37,15}, -{55,37,16}, -{55,37,17}, -{55,37,18}, -{55,37,19}, -{55,37,20}, -{55,37,21}, -{55,37,22}, -{55,37,23}, -{55,37,24}, -{55,37,25}, -{55,37,26}, -{55,37,27}, -{55,37,28}, -{55,37,29}, -{55,37,30}, -{55,37,31}, -{55,37,32}, -{55,37,33}, -{55,37,34}, -{55,37,35}, -{55,37,36}, -{55,37,37}, -{55,37,38}, -{55,37,39}, -{55,37,40}, -{55,37,41}, -{55,37,42}, -{55,37,43}, -{55,37,44}, -{55,37,45}, -{55,37,46}, -{55,37,47}, -{55,37,48}, -{55,37,49}, -{55,37,50}, -{55,37,51}, -{55,37,52}, -{55,37,53}, -{55,37,54}, -{55,37,55}, -{55,37,56}, -{55,37,57}, -{55,37,58}, -{55,37,59}, -{55,37,60}, -{55,37,61}, -{55,37,62}, -{55,37,63}, -{55,38,-70}, -{55,38,-69}, -{55,38,-68}, -{55,38,-67}, -{55,38,-66}, -{55,38,-65}, -{55,38,-64}, -{55,38,-63}, -{55,38,-62}, -{55,38,-61}, -{55,38,-60}, -{55,38,-59}, -{55,38,-58}, -{55,38,-57}, -{55,38,-56}, -{55,38,-55}, -{55,38,-54}, -{55,38,-53}, -{55,38,-52}, -{55,38,-51}, -{55,38,-50}, -{55,38,-49}, -{55,38,-48}, -{55,38,-47}, -{55,38,-46}, -{55,38,-45}, -{55,38,-44}, -{55,38,-43}, -{55,38,-42}, -{55,38,-41}, -{55,38,-40}, -{55,38,-39}, -{55,38,-38}, -{55,38,-37}, -{55,38,-36}, -{55,38,-35}, -{55,38,-34}, -{55,38,-33}, -{55,38,-32}, -{55,38,-31}, -{55,38,-30}, -{55,38,-29}, -{55,38,-28}, -{55,38,-27}, -{55,38,-26}, -{55,38,-25}, -{55,38,-24}, -{55,38,-23}, -{55,38,-22}, -{55,38,-21}, -{55,38,-20}, -{55,38,-19}, -{55,38,-18}, -{55,38,-17}, -{55,38,-16}, -{55,38,-15}, -{55,38,-14}, -{55,38,-13}, -{55,38,-12}, -{55,38,-11}, -{55,38,-10}, -{55,38,-9}, -{55,38,-8}, -{55,38,-7}, -{55,38,-6}, -{55,38,-5}, -{55,38,-4}, -{55,38,-3}, -{55,38,-2}, -{55,38,-1}, -{55,38,0}, -{55,38,1}, -{55,38,2}, -{55,38,3}, -{55,38,4}, -{55,38,5}, -{55,38,6}, -{55,38,7}, -{55,38,8}, -{55,38,9}, -{55,38,10}, -{55,38,11}, -{55,38,12}, -{55,38,13}, -{55,38,14}, -{55,38,15}, -{55,38,16}, -{55,38,17}, -{55,38,18}, -{55,38,19}, -{55,38,20}, -{55,38,21}, -{55,38,22}, -{55,38,23}, -{55,38,24}, -{55,38,25}, -{55,38,26}, -{55,38,27}, -{55,38,28}, -{55,38,29}, -{55,38,30}, -{55,38,31}, -{55,38,32}, -{55,38,33}, -{55,38,34}, -{55,38,35}, -{55,38,36}, -{55,38,37}, -{55,38,38}, -{55,38,39}, -{55,38,40}, -{55,38,41}, -{55,38,42}, -{55,38,43}, -{55,38,44}, -{55,38,45}, -{55,38,46}, -{55,38,47}, -{55,38,48}, -{55,38,49}, -{55,38,50}, -{55,38,51}, -{55,38,52}, -{55,38,53}, -{55,38,54}, -{55,38,55}, -{55,38,56}, -{55,38,57}, -{55,38,58}, -{55,38,59}, -{55,38,60}, -{55,38,61}, -{55,38,62}, -{55,38,63}, -{55,39,-70}, -{55,39,-69}, -{55,39,-68}, -{55,39,-67}, -{55,39,-66}, -{55,39,-65}, -{55,39,-64}, -{55,39,-63}, -{55,39,-62}, -{55,39,-61}, -{55,39,-60}, -{55,39,-59}, -{55,39,-58}, -{55,39,-57}, -{55,39,-56}, -{55,39,-55}, -{55,39,-54}, -{55,39,-53}, -{55,39,-52}, -{55,39,-51}, -{55,39,-50}, -{55,39,-49}, -{55,39,-48}, -{55,39,-47}, -{55,39,-46}, -{55,39,-45}, -{55,39,-44}, -{55,39,-43}, -{55,39,-42}, -{55,39,-41}, -{55,39,-40}, -{55,39,-39}, -{55,39,-38}, -{55,39,-37}, -{55,39,-36}, -{55,39,-35}, -{55,39,-34}, -{55,39,-33}, -{55,39,-32}, -{55,39,-31}, -{55,39,-30}, -{55,39,-29}, -{55,39,-28}, -{55,39,-27}, -{55,39,-26}, -{55,39,-25}, -{55,39,-24}, -{55,39,-23}, -{55,39,-22}, -{55,39,-21}, -{55,39,-20}, -{55,39,-19}, -{55,39,-18}, -{55,39,-17}, -{55,39,-16}, -{55,39,-15}, -{55,39,-14}, -{55,39,-13}, -{55,39,-12}, -{55,39,-11}, -{55,39,-10}, -{55,39,-9}, -{55,39,-8}, -{55,39,-7}, -{55,39,-6}, -{55,39,-5}, -{55,39,-4}, -{55,39,-3}, -{55,39,-2}, -{55,39,-1}, -{55,39,0}, -{55,39,1}, -{55,39,2}, -{55,39,3}, -{55,39,4}, -{55,39,5}, -{55,39,6}, -{55,39,7}, -{55,39,8}, -{55,39,9}, -{55,39,10}, -{55,39,11}, -{55,39,12}, -{55,39,13}, -{55,39,14}, -{55,39,15}, -{55,39,16}, -{55,39,17}, -{55,39,18}, -{55,39,19}, -{55,39,20}, -{55,39,21}, -{55,39,22}, -{55,39,23}, -{55,39,24}, -{55,39,25}, -{55,39,26}, -{55,39,27}, -{55,39,28}, -{55,39,29}, -{55,39,30}, -{55,39,31}, -{55,39,32}, -{55,39,33}, -{55,39,34}, -{55,39,35}, -{55,39,36}, -{55,39,37}, -{55,39,38}, -{55,39,39}, -{55,39,40}, -{55,39,41}, -{55,39,42}, -{55,39,43}, -{55,39,44}, -{55,39,45}, -{55,39,46}, -{55,39,47}, -{55,39,48}, -{55,39,49}, -{55,39,50}, -{55,39,51}, -{55,39,52}, -{55,39,53}, -{55,39,54}, -{55,39,55}, -{55,39,56}, -{55,39,57}, -{55,39,58}, -{55,39,59}, -{55,39,60}, -{55,39,61}, -{55,39,62}, -{55,39,63}, -{55,40,-70}, -{55,40,-69}, -{55,40,-68}, -{55,40,-67}, -{55,40,-66}, -{55,40,-65}, -{55,40,-64}, -{55,40,-63}, -{55,40,-62}, -{55,40,-61}, -{55,40,-60}, -{55,40,-59}, -{55,40,-58}, -{55,40,-57}, -{55,40,-56}, -{55,40,-55}, -{55,40,-54}, -{55,40,-53}, -{55,40,-52}, -{55,40,-51}, -{55,40,-50}, -{55,40,-49}, -{55,40,-48}, -{55,40,-47}, -{55,40,-46}, -{55,40,-45}, -{55,40,-44}, -{55,40,-43}, -{55,40,-42}, -{55,40,-41}, -{55,40,-40}, -{55,40,-39}, -{55,40,-38}, -{55,40,-37}, -{55,40,-36}, -{55,40,-35}, -{55,40,-34}, -{55,40,-33}, -{55,40,-32}, -{55,40,-31}, -{55,40,-30}, -{55,40,-29}, -{55,40,-28}, -{55,40,-27}, -{55,40,-26}, -{55,40,-25}, -{55,40,-24}, -{55,40,-23}, -{55,40,-22}, -{55,40,-21}, -{55,40,-20}, -{55,40,-19}, -{55,40,-18}, -{55,40,-17}, -{55,40,-16}, -{55,40,-15}, -{55,40,-14}, -{55,40,-13}, -{55,40,-12}, -{55,40,-11}, -{55,40,-10}, -{55,40,-9}, -{55,40,-8}, -{55,40,-7}, -{55,40,-6}, -{55,40,-5}, -{55,40,-4}, -{55,40,-3}, -{55,40,-2}, -{55,40,-1}, -{55,40,0}, -{55,40,1}, -{55,40,2}, -{55,40,3}, -{55,40,4}, -{55,40,5}, -{55,40,6}, -{55,40,7}, -{55,40,8}, -{55,40,9}, -{55,40,10}, -{55,40,11}, -{55,40,12}, -{55,40,13}, -{55,40,14}, -{55,40,15}, -{55,40,16}, -{55,40,17}, -{55,40,18}, -{55,40,19}, -{55,40,20}, -{55,40,21}, -{55,40,22}, -{55,40,23}, -{55,40,24}, -{55,40,25}, -{55,40,26}, -{55,40,27}, -{55,40,28}, -{55,40,29}, -{55,40,30}, -{55,40,31}, -{55,40,32}, -{55,40,33}, -{55,40,34}, -{55,40,35}, -{55,40,36}, -{55,40,37}, -{55,40,38}, -{55,40,39}, -{55,40,40}, -{55,40,41}, -{55,40,42}, -{55,40,43}, -{55,40,44}, -{55,40,45}, -{55,40,46}, -{55,40,47}, -{55,40,48}, -{55,40,49}, -{55,40,50}, -{55,40,51}, -{55,40,52}, -{55,40,53}, -{55,40,54}, -{55,40,55}, -{55,40,56}, -{55,40,57}, -{55,40,58}, -{55,40,59}, -{55,40,60}, -{55,40,61}, -{55,40,62}, -{55,40,63}, -{55,41,-70}, -{55,41,-69}, -{55,41,-68}, -{55,41,-67}, -{55,41,-66}, -{55,41,-65}, -{55,41,-64}, -{55,41,-63}, -{55,41,-62}, -{55,41,-61}, -{55,41,-60}, -{55,41,-59}, -{55,41,-58}, -{55,41,-57}, -{55,41,-56}, -{55,41,-55}, -{55,41,-54}, -{55,41,-53}, -{55,41,-52}, -{55,41,-51}, -{55,41,-50}, -{55,41,-49}, -{55,41,-48}, -{55,41,-47}, -{55,41,-46}, -{55,41,-45}, -{55,41,-44}, -{55,41,-43}, -{55,41,-42}, -{55,41,-41}, -{55,41,-40}, -{55,41,-39}, -{55,41,-38}, -{55,41,-37}, -{55,41,-36}, -{55,41,-35}, -{55,41,-34}, -{55,41,-33}, -{55,41,-32}, -{55,41,-31}, -{55,41,-30}, -{55,41,-29}, -{55,41,-28}, -{55,41,-27}, -{55,41,-26}, -{55,41,-25}, -{55,41,-24}, -{55,41,-23}, -{55,41,-22}, -{55,41,-21}, -{55,41,-20}, -{55,41,-19}, -{55,41,-18}, -{55,41,-17}, -{55,41,-16}, -{55,41,-15}, -{55,41,-14}, -{55,41,-13}, -{55,41,-12}, -{55,41,-11}, -{55,41,-10}, -{55,41,-9}, -{55,41,-8}, -{55,41,-7}, -{55,41,-6}, -{55,41,-5}, -{55,41,-4}, -{55,41,-3}, -{55,41,-2}, -{55,41,-1}, -{55,41,0}, -{55,41,1}, -{55,41,2}, -{55,41,3}, -{55,41,4}, -{55,41,5}, -{55,41,6}, -{55,41,7}, -{55,41,8}, -{55,41,9}, -{55,41,10}, -{55,41,11}, -{55,41,12}, -{55,41,13}, -{55,41,14}, -{55,41,15}, -{55,41,16}, -{55,41,17}, -{55,41,18}, -{55,41,19}, -{55,41,20}, -{55,41,21}, -{55,41,22}, -{55,41,23}, -{55,41,24}, -{55,41,25}, -{55,41,26}, -{55,41,27}, -{55,41,28}, -{55,41,29}, -{55,41,30}, -{55,41,31}, -{55,41,32}, -{55,41,33}, -{55,41,34}, -{55,41,35}, -{55,41,36}, -{55,41,37}, -{55,41,38}, -{55,41,39}, -{55,41,40}, -{55,41,41}, -{55,41,42}, -{55,41,43}, -{55,41,44}, -{55,41,45}, -{55,41,46}, -{55,41,47}, -{55,41,48}, -{55,41,49}, -{55,41,50}, -{55,41,51}, -{55,41,52}, -{55,41,53}, -{55,41,54}, -{55,41,55}, -{55,41,56}, -{55,41,57}, -{55,41,58}, -{55,41,59}, -{55,41,60}, -{55,41,61}, -{55,41,62}, -{55,41,63}, -{55,42,-70}, -{55,42,-69}, -{55,42,-68}, -{55,42,-67}, -{55,42,-66}, -{55,42,-65}, -{55,42,-64}, -{55,42,-63}, -{55,42,-62}, -{55,42,-61}, -{55,42,-60}, -{55,42,-59}, -{55,42,-58}, -{55,42,-57}, -{55,42,-56}, -{55,42,-55}, -{55,42,-54}, -{55,42,-53}, -{55,42,-52}, -{55,42,-51}, -{55,42,-50}, -{55,42,-49}, -{55,42,-48}, -{55,42,-47}, -{55,42,-46}, -{55,42,-45}, -{55,42,-44}, -{55,42,-43}, -{55,42,-42}, -{55,42,-41}, -{55,42,-40}, -{55,42,-39}, -{55,42,-38}, -{55,42,-37}, -{55,42,-36}, -{55,42,-35}, -{55,42,-34}, -{55,42,-33}, -{55,42,-32}, -{55,42,-31}, -{55,42,-30}, -{55,42,-29}, -{55,42,-28}, -{55,42,-27}, -{55,42,-26}, -{55,42,-25}, -{55,42,-24}, -{55,42,-23}, -{55,42,-22}, -{55,42,-21}, -{55,42,-20}, -{55,42,-19}, -{55,42,-18}, -{55,42,-17}, -{55,42,-16}, -{55,42,-15}, -{55,42,-14}, -{55,42,-13}, -{55,42,-12}, -{55,42,-11}, -{55,42,-10}, -{55,42,-9}, -{55,42,-8}, -{55,42,-7}, -{55,42,-6}, -{55,42,-5}, -{55,42,-4}, -{55,42,-3}, -{55,42,-2}, -{55,42,-1}, -{55,42,0}, -{55,42,1}, -{55,42,2}, -{55,42,3}, -{55,42,4}, -{55,42,5}, -{55,42,6}, -{55,42,7}, -{55,42,8}, -{55,42,9}, -{55,42,10}, -{55,42,11}, -{55,42,12}, -{55,42,13}, -{55,42,14}, -{55,42,15}, -{55,42,16}, -{55,42,17}, -{55,42,18}, -{55,42,19}, -{55,42,20}, -{55,42,21}, -{55,42,22}, -{55,42,23}, -{55,42,24}, -{55,42,25}, -{55,42,26}, -{55,42,27}, -{55,42,28}, -{55,42,29}, -{55,42,30}, -{55,42,31}, -{55,42,32}, -{55,42,33}, -{55,42,34}, -{55,42,35}, -{55,42,36}, -{55,42,37}, -{55,42,38}, -{55,42,39}, -{55,42,40}, -{55,42,41}, -{55,42,42}, -{55,42,43}, -{55,42,44}, -{55,42,45}, -{55,42,46}, -{55,42,47}, -{55,42,48}, -{55,42,49}, -{55,42,50}, -{55,42,51}, -{55,42,52}, -{55,42,53}, -{55,42,54}, -{55,42,55}, -{55,42,56}, -{55,42,57}, -{55,42,58}, -{55,42,59}, -{55,42,60}, -{55,42,61}, -{55,42,62}, -{55,42,63}, -{55,42,64}, -{55,43,-70}, -{55,43,-69}, -{55,43,-68}, -{55,43,-67}, -{55,43,-66}, -{55,43,-65}, -{55,43,-64}, -{55,43,-63}, -{55,43,-62}, -{55,43,-61}, -{55,43,-60}, -{55,43,-59}, -{55,43,-58}, -{55,43,-57}, -{55,43,-56}, -{55,43,-55}, -{55,43,-54}, -{55,43,-53}, -{55,43,-52}, -{55,43,-51}, -{55,43,-50}, -{55,43,-49}, -{55,43,-48}, -{55,43,-47}, -{55,43,-46}, -{55,43,-45}, -{55,43,-44}, -{55,43,-43}, -{55,43,-42}, -{55,43,-41}, -{55,43,-40}, -{55,43,-39}, -{55,43,-38}, -{55,43,-37}, -{55,43,-36}, -{55,43,-35}, -{55,43,-34}, -{55,43,-33}, -{55,43,-32}, -{55,43,-31}, -{55,43,-30}, -{55,43,-29}, -{55,43,-28}, -{55,43,-27}, -{55,43,-26}, -{55,43,-25}, -{55,43,-24}, -{55,43,-23}, -{55,43,-22}, -{55,43,-21}, -{55,43,-20}, -{55,43,-19}, -{55,43,-18}, -{55,43,-17}, -{55,43,-16}, -{55,43,-15}, -{55,43,-14}, -{55,43,-13}, -{55,43,-12}, -{55,43,-11}, -{55,43,-10}, -{55,43,-9}, -{55,43,-8}, -{55,43,-7}, -{55,43,-6}, -{55,43,-5}, -{55,43,-4}, -{55,43,-3}, -{55,43,-2}, -{55,43,-1}, -{55,43,0}, -{55,43,1}, -{55,43,2}, -{55,43,3}, -{55,43,4}, -{55,43,5}, -{55,43,6}, -{55,43,7}, -{55,43,8}, -{55,43,9}, -{55,43,10}, -{55,43,11}, -{55,43,12}, -{55,43,13}, -{55,43,14}, -{55,43,15}, -{55,43,16}, -{55,43,17}, -{55,43,18}, -{55,43,19}, -{55,43,20}, -{55,43,21}, -{55,43,22}, -{55,43,23}, -{55,43,24}, -{55,43,25}, -{55,43,26}, -{55,43,27}, -{55,43,28}, -{55,43,29}, -{55,43,30}, -{55,43,31}, -{55,43,32}, -{55,43,33}, -{55,43,34}, -{55,43,35}, -{55,43,36}, -{55,43,37}, -{55,43,38}, -{55,43,39}, -{55,43,40}, -{55,43,41}, -{55,43,42}, -{55,43,43}, -{55,43,44}, -{55,43,45}, -{55,43,46}, -{55,43,47}, -{55,43,48}, -{55,43,49}, -{55,43,50}, -{55,43,51}, -{55,43,52}, -{55,43,53}, -{55,43,54}, -{55,43,55}, -{55,43,56}, -{55,43,57}, -{55,43,58}, -{55,43,59}, -{55,43,60}, -{55,43,61}, -{55,43,62}, -{55,43,63}, -{55,43,64}, -{55,44,-70}, -{55,44,-69}, -{55,44,-68}, -{55,44,-67}, -{55,44,-66}, -{55,44,-65}, -{55,44,-64}, -{55,44,-63}, -{55,44,-62}, -{55,44,-61}, -{55,44,-60}, -{55,44,-59}, -{55,44,-58}, -{55,44,-57}, -{55,44,-56}, -{55,44,-55}, -{55,44,-54}, -{55,44,-53}, -{55,44,-52}, -{55,44,-51}, -{55,44,-50}, -{55,44,-49}, -{55,44,-48}, -{55,44,-47}, -{55,44,-46}, -{55,44,-45}, -{55,44,-44}, -{55,44,-43}, -{55,44,-42}, -{55,44,-41}, -{55,44,-40}, -{55,44,-39}, -{55,44,-38}, -{55,44,-37}, -{55,44,-36}, -{55,44,-35}, -{55,44,-34}, -{55,44,-33}, -{55,44,-32}, -{55,44,-31}, -{55,44,-30}, -{55,44,-29}, -{55,44,-28}, -{55,44,-27}, -{55,44,-26}, -{55,44,-25}, -{55,44,-24}, -{55,44,-23}, -{55,44,-22}, -{55,44,-21}, -{55,44,-20}, -{55,44,-19}, -{55,44,-18}, -{55,44,-17}, -{55,44,-16}, -{55,44,-15}, -{55,44,-14}, -{55,44,-13}, -{55,44,-12}, -{55,44,-11}, -{55,44,-10}, -{55,44,-9}, -{55,44,-8}, -{55,44,-7}, -{55,44,-6}, -{55,44,-5}, -{55,44,-4}, -{55,44,-3}, -{55,44,-2}, -{55,44,-1}, -{55,44,0}, -{55,44,1}, -{55,44,2}, -{55,44,3}, -{55,44,4}, -{55,44,5}, -{55,44,6}, -{55,44,7}, -{55,44,8}, -{55,44,9}, -{55,44,10}, -{55,44,11}, -{55,44,12}, -{55,44,13}, -{55,44,14}, -{55,44,15}, -{55,44,16}, -{55,44,17}, -{55,44,18}, -{55,44,19}, -{55,44,20}, -{55,44,21}, -{55,44,22}, -{55,44,23}, -{55,44,24}, -{55,44,25}, -{55,44,26}, -{55,44,27}, -{55,44,28}, -{55,44,29}, -{55,44,30}, -{55,44,31}, -{55,44,32}, -{55,44,33}, -{55,44,34}, -{55,44,35}, -{55,44,36}, -{55,44,37}, -{55,44,38}, -{55,44,39}, -{55,44,40}, -{55,44,41}, -{55,44,42}, -{55,44,43}, -{55,44,44}, -{55,44,45}, -{55,44,46}, -{55,44,47}, -{55,44,48}, -{55,44,49}, -{55,44,50}, -{55,44,51}, -{55,44,52}, -{55,44,53}, -{55,44,54}, -{55,44,55}, -{55,44,56}, -{55,44,57}, -{55,44,58}, -{55,44,59}, -{55,44,60}, -{55,44,61}, -{55,44,62}, -{55,44,63}, -{55,44,64}, -{55,45,-70}, -{55,45,-69}, -{55,45,-68}, -{55,45,-67}, -{55,45,-66}, -{55,45,-65}, -{55,45,-64}, -{55,45,-63}, -{55,45,-62}, -{55,45,-61}, -{55,45,-60}, -{55,45,-59}, -{55,45,-58}, -{55,45,-57}, -{55,45,-56}, -{55,45,-55}, -{55,45,-54}, -{55,45,-53}, -{55,45,-52}, -{55,45,-51}, -{55,45,-50}, -{55,45,-49}, -{55,45,-48}, -{55,45,-47}, -{55,45,-46}, -{55,45,-45}, -{55,45,-44}, -{55,45,-43}, -{55,45,-42}, -{55,45,-41}, -{55,45,-40}, -{55,45,-39}, -{55,45,-38}, -{55,45,-37}, -{55,45,-36}, -{55,45,-35}, -{55,45,-34}, -{55,45,-33}, -{55,45,-32}, -{55,45,-31}, -{55,45,-30}, -{55,45,-29}, -{55,45,-28}, -{55,45,-27}, -{55,45,-26}, -{55,45,-25}, -{55,45,-24}, -{55,45,-23}, -{55,45,-22}, -{55,45,-21}, -{55,45,-20}, -{55,45,-19}, -{55,45,-18}, -{55,45,-17}, -{55,45,-16}, -{55,45,-15}, -{55,45,-14}, -{55,45,-13}, -{55,45,-12}, -{55,45,-11}, -{55,45,-10}, -{55,45,-9}, -{55,45,-8}, -{55,45,-7}, -{55,45,-6}, -{55,45,-5}, -{55,45,-4}, -{55,45,-3}, -{55,45,-2}, -{55,45,-1}, -{55,45,0}, -{55,45,1}, -{55,45,2}, -{55,45,3}, -{55,45,4}, -{55,45,5}, -{55,45,6}, -{55,45,7}, -{55,45,8}, -{55,45,9}, -{55,45,10}, -{55,45,11}, -{55,45,12}, -{55,45,13}, -{55,45,14}, -{55,45,15}, -{55,45,16}, -{55,45,17}, -{55,45,18}, -{55,45,19}, -{55,45,20}, -{55,45,21}, -{55,45,22}, -{55,45,23}, -{55,45,24}, -{55,45,25}, -{55,45,26}, -{55,45,27}, -{55,45,28}, -{55,45,29}, -{55,45,30}, -{55,45,31}, -{55,45,32}, -{55,45,33}, -{55,45,34}, -{55,45,35}, -{55,45,36}, -{55,45,37}, -{55,45,38}, -{55,45,39}, -{55,45,40}, -{55,45,41}, -{55,45,42}, -{55,45,43}, -{55,45,44}, -{55,45,45}, -{55,45,46}, -{55,45,47}, -{55,45,48}, -{55,45,49}, -{55,45,50}, -{55,45,51}, -{55,45,52}, -{55,45,53}, -{55,45,54}, -{55,45,55}, -{55,45,56}, -{55,45,57}, -{55,45,58}, -{55,45,59}, -{55,45,60}, -{55,45,61}, -{55,45,62}, -{55,45,63}, -{55,45,64}, -{55,46,-70}, -{55,46,-69}, -{55,46,-68}, -{55,46,-67}, -{55,46,-66}, -{55,46,-65}, -{55,46,-64}, -{55,46,-63}, -{55,46,-62}, -{55,46,-61}, -{55,46,-60}, -{55,46,-59}, -{55,46,-58}, -{55,46,-57}, -{55,46,-56}, -{55,46,-55}, -{55,46,-54}, -{55,46,-53}, -{55,46,-52}, -{55,46,-51}, -{55,46,-50}, -{55,46,-49}, -{55,46,-48}, -{55,46,-47}, -{55,46,-46}, -{55,46,-45}, -{55,46,-44}, -{55,46,-43}, -{55,46,-42}, -{55,46,-41}, -{55,46,-40}, -{55,46,-39}, -{55,46,-38}, -{55,46,-37}, -{55,46,-36}, -{55,46,-35}, -{55,46,-34}, -{55,46,-33}, -{55,46,-32}, -{55,46,-31}, -{55,46,-30}, -{55,46,-29}, -{55,46,-28}, -{55,46,-27}, -{55,46,-26}, -{55,46,-25}, -{55,46,-24}, -{55,46,-23}, -{55,46,-22}, -{55,46,-21}, -{55,46,-20}, -{55,46,-19}, -{55,46,-18}, -{55,46,-17}, -{55,46,-16}, -{55,46,-15}, -{55,46,-14}, -{55,46,-13}, -{55,46,-12}, -{55,46,-11}, -{55,46,-10}, -{55,46,-9}, -{55,46,-8}, -{55,46,-7}, -{55,46,-6}, -{55,46,-5}, -{55,46,-4}, -{55,46,-3}, -{55,46,-2}, -{55,46,-1}, -{55,46,0}, -{55,46,1}, -{55,46,2}, -{55,46,3}, -{55,46,4}, -{55,46,5}, -{55,46,6}, -{55,46,7}, -{55,46,8}, -{55,46,9}, -{55,46,10}, -{55,46,11}, -{55,46,12}, -{55,46,13}, -{55,46,14}, -{55,46,15}, -{55,46,16}, -{55,46,17}, -{55,46,18}, -{55,46,19}, -{55,46,20}, -{55,46,21}, -{55,46,22}, -{55,46,23}, -{55,46,24}, -{55,46,25}, -{55,46,26}, -{55,46,27}, -{55,46,28}, -{55,46,29}, -{55,46,30}, -{55,46,31}, -{55,46,32}, -{55,46,33}, -{55,46,34}, -{55,46,35}, -{55,46,36}, -{55,46,37}, -{55,46,38}, -{55,46,39}, -{55,46,40}, -{55,46,41}, -{55,46,42}, -{55,46,43}, -{55,46,44}, -{55,46,45}, -{55,46,46}, -{55,46,47}, -{55,46,48}, -{55,46,49}, -{55,46,50}, -{55,46,51}, -{55,46,52}, -{55,46,53}, -{55,46,54}, -{55,46,55}, -{55,46,56}, -{55,46,57}, -{55,46,58}, -{55,46,59}, -{55,46,60}, -{55,46,61}, -{55,46,62}, -{55,46,63}, -{55,46,64}, -{55,47,-70}, -{55,47,-69}, -{55,47,-68}, -{55,47,-67}, -{55,47,-66}, -{55,47,-65}, -{55,47,-64}, -{55,47,-63}, -{55,47,-62}, -{55,47,-61}, -{55,47,-60}, -{55,47,-59}, -{55,47,-58}, -{55,47,-57}, -{55,47,-56}, -{55,47,-55}, -{55,47,-54}, -{55,47,-53}, -{55,47,-52}, -{55,47,-51}, -{55,47,-50}, -{55,47,-49}, -{55,47,-48}, -{55,47,-47}, -{55,47,-46}, -{55,47,-45}, -{55,47,-44}, -{55,47,-43}, -{55,47,-42}, -{55,47,-41}, -{55,47,-40}, -{55,47,-39}, -{55,47,-38}, -{55,47,-37}, -{55,47,-36}, -{55,47,-35}, -{55,47,-34}, -{55,47,-33}, -{55,47,-32}, -{55,47,-31}, -{55,47,-30}, -{55,47,-29}, -{55,47,-28}, -{55,47,-27}, -{55,47,-26}, -{55,47,-25}, -{55,47,-24}, -{55,47,-23}, -{55,47,-22}, -{55,47,-21}, -{55,47,-20}, -{55,47,-19}, -{55,47,-18}, -{55,47,-17}, -{55,47,-16}, -{55,47,-15}, -{55,47,-14}, -{55,47,-13}, -{55,47,-12}, -{55,47,-11}, -{55,47,-10}, -{55,47,-9}, -{55,47,-8}, -{55,47,-7}, -{55,47,-6}, -{55,47,-5}, -{55,47,-4}, -{55,47,-3}, -{55,47,-2}, -{55,47,-1}, -{55,47,0}, -{55,47,1}, -{55,47,2}, -{55,47,3}, -{55,47,4}, -{55,47,5}, -{55,47,6}, -{55,47,7}, -{55,47,8}, -{55,47,9}, -{55,47,10}, -{55,47,11}, -{55,47,12}, -{55,47,13}, -{55,47,14}, -{55,47,15}, -{55,47,16}, -{55,47,17}, -{55,47,18}, -{55,47,19}, -{55,47,20}, -{55,47,21}, -{55,47,22}, -{55,47,23}, -{55,47,24}, -{55,47,25}, -{55,47,26}, -{55,47,27}, -{55,47,28}, -{55,47,29}, -{55,47,30}, -{55,47,31}, -{55,47,32}, -{55,47,33}, -{55,47,34}, -{55,47,35}, -{55,47,36}, -{55,47,37}, -{55,47,38}, -{55,47,39}, -{55,47,40}, -{55,47,41}, -{55,47,42}, -{55,47,43}, -{55,47,44}, -{55,47,45}, -{55,47,46}, -{55,47,47}, -{55,47,48}, -{55,47,49}, -{55,47,50}, -{55,47,51}, -{55,47,52}, -{55,47,53}, -{55,47,54}, -{55,47,55}, -{55,47,56}, -{55,47,57}, -{55,47,58}, -{55,47,59}, -{55,47,60}, -{55,47,61}, -{55,47,62}, -{55,47,63}, -{55,47,64}, -{55,48,-70}, -{55,48,-69}, -{55,48,-68}, -{55,48,-67}, -{55,48,-66}, -{55,48,-65}, -{55,48,-64}, -{55,48,-63}, -{55,48,-62}, -{55,48,-61}, -{55,48,-60}, -{55,48,-59}, -{55,48,-58}, -{55,48,-57}, -{55,48,-56}, -{55,48,-55}, -{55,48,-54}, -{55,48,-53}, -{55,48,-52}, -{55,48,-51}, -{55,48,-50}, -{55,48,-49}, -{55,48,-48}, -{55,48,-47}, -{55,48,-46}, -{55,48,-45}, -{55,48,-44}, -{55,48,-43}, -{55,48,-42}, -{55,48,-41}, -{55,48,-40}, -{55,48,-39}, -{55,48,-38}, -{55,48,-37}, -{55,48,-36}, -{55,48,-35}, -{55,48,-34}, -{55,48,-33}, -{55,48,-32}, -{55,48,-31}, -{55,48,-30}, -{55,48,-29}, -{55,48,-28}, -{55,48,-27}, -{55,48,-26}, -{55,48,-25}, -{55,48,-24}, -{55,48,-23}, -{55,48,-22}, -{55,48,-21}, -{55,48,-20}, -{55,48,-19}, -{55,48,-18}, -{55,48,-17}, -{55,48,-16}, -{55,48,-15}, -{55,48,-14}, -{55,48,-13}, -{55,48,-12}, -{55,48,-11}, -{55,48,-10}, -{55,48,-9}, -{55,48,-8}, -{55,48,-7}, -{55,48,-6}, -{55,48,-5}, -{55,48,-4}, -{55,48,-3}, -{55,48,-2}, -{55,48,-1}, -{55,48,0}, -{55,48,1}, -{55,48,2}, -{55,48,3}, -{55,48,4}, -{55,48,5}, -{55,48,6}, -{55,48,7}, -{55,48,8}, -{55,48,9}, -{55,48,10}, -{55,48,11}, -{55,48,12}, -{55,48,13}, -{55,48,14}, -{55,48,15}, -{55,48,16}, -{55,48,17}, -{55,48,18}, -{55,48,19}, -{55,48,20}, -{55,48,21}, -{55,48,22}, -{55,48,23}, -{55,48,24}, -{55,48,25}, -{55,48,26}, -{55,48,27}, -{55,48,28}, -{55,48,29}, -{55,48,30}, -{55,48,31}, -{55,48,32}, -{55,48,33}, -{55,48,34}, -{55,48,35}, -{55,48,36}, -{55,48,37}, -{55,48,38}, -{55,48,39}, -{55,48,40}, -{55,48,41}, -{55,48,42}, -{55,48,43}, -{55,48,44}, -{55,48,45}, -{55,48,46}, -{55,48,47}, -{55,48,48}, -{55,48,49}, -{55,48,50}, -{55,48,51}, -{55,48,52}, -{55,48,53}, -{55,48,54}, -{55,48,55}, -{55,48,56}, -{55,48,57}, -{55,48,58}, -{55,48,59}, -{55,48,60}, -{55,48,61}, -{55,48,62}, -{55,48,63}, -{55,48,64}, -{55,49,-70}, -{55,49,-69}, -{55,49,-68}, -{55,49,-67}, -{55,49,-66}, -{55,49,-65}, -{55,49,-64}, -{55,49,-63}, -{55,49,-62}, -{55,49,-61}, -{55,49,-60}, -{55,49,-59}, -{55,49,-58}, -{55,49,-57}, -{55,49,-56}, -{55,49,-55}, -{55,49,-54}, -{55,49,-53}, -{55,49,-52}, -{55,49,-51}, -{55,49,-50}, -{55,49,-49}, -{55,49,-48}, -{55,49,-47}, -{55,49,-46}, -{55,49,-45}, -{55,49,-44}, -{55,49,-43}, -{55,49,-42}, -{55,49,-41}, -{55,49,-40}, -{55,49,-39}, -{55,49,-38}, -{55,49,-37}, -{55,49,-36}, -{55,49,-35}, -{55,49,-34}, -{55,49,-33}, -{55,49,-32}, -{55,49,-31}, -{55,49,-30}, -{55,49,-29}, -{55,49,-28}, -{55,49,-27}, -{55,49,-26}, -{55,49,-25}, -{55,49,-24}, -{55,49,-23}, -{55,49,-22}, -{55,49,-21}, -{55,49,-20}, -{55,49,-19}, -{55,49,-18}, -{55,49,-17}, -{55,49,-16}, -{55,49,-15}, -{55,49,-14}, -{55,49,-13}, -{55,49,-12}, -{55,49,-11}, -{55,49,-10}, -{55,49,-9}, -{55,49,-8}, -{55,49,-7}, -{55,49,-6}, -{55,49,-5}, -{55,49,-4}, -{55,49,-3}, -{55,49,-2}, -{55,49,-1}, -{55,49,0}, -{55,49,1}, -{55,49,2}, -{55,49,3}, -{55,49,4}, -{55,49,5}, -{55,49,6}, -{55,49,7}, -{55,49,8}, -{55,49,9}, -{55,49,10}, -{55,49,11}, -{55,49,12}, -{55,49,13}, -{55,49,14}, -{55,49,15}, -{55,49,16}, -{55,49,17}, -{55,49,18}, -{55,49,19}, -{55,49,20}, -{55,49,21}, -{55,49,22}, -{55,49,23}, -{55,49,24}, -{55,49,25}, -{55,49,26}, -{55,49,27}, -{55,49,28}, -{55,49,29}, -{55,49,30}, -{55,49,31}, -{55,49,32}, -{55,49,33}, -{55,49,34}, -{55,49,35}, -{55,49,36}, -{55,49,37}, -{55,49,38}, -{55,49,39}, -{55,49,40}, -{55,49,41}, -{55,49,42}, -{55,49,43}, -{55,49,44}, -{55,49,45}, -{55,49,46}, -{55,49,47}, -{55,49,48}, -{55,49,49}, -{55,49,50}, -{55,49,51}, -{55,49,52}, -{55,49,53}, -{55,49,54}, -{55,49,55}, -{55,49,56}, -{55,49,57}, -{55,49,58}, -{55,49,59}, -{55,49,60}, -{55,49,61}, -{55,49,62}, -{55,49,63}, -{55,49,64}, -{55,50,-70}, -{55,50,-69}, -{55,50,-68}, -{55,50,-67}, -{55,50,-66}, -{55,50,-65}, -{55,50,-64}, -{55,50,-63}, -{55,50,-62}, -{55,50,-61}, -{55,50,-60}, -{55,50,-59}, -{55,50,-58}, -{55,50,-57}, -{55,50,-56}, -{55,50,-55}, -{55,50,-54}, -{55,50,-53}, -{55,50,-52}, -{55,50,-51}, -{55,50,-50}, -{55,50,-49}, -{55,50,-48}, -{55,50,-47}, -{55,50,-46}, -{55,50,-45}, -{55,50,-44}, -{55,50,-43}, -{55,50,-42}, -{55,50,-41}, -{55,50,-40}, -{55,50,-39}, -{55,50,-38}, -{55,50,-37}, -{55,50,-36}, -{55,50,-35}, -{55,50,-34}, -{55,50,-33}, -{55,50,-32}, -{55,50,-31}, -{55,50,-30}, -{55,50,-29}, -{55,50,-28}, -{55,50,-27}, -{55,50,-26}, -{55,50,-25}, -{55,50,-24}, -{55,50,-23}, -{55,50,-22}, -{55,50,-21}, -{55,50,-20}, -{55,50,-19}, -{55,50,-18}, -{55,50,-17}, -{55,50,-16}, -{55,50,-15}, -{55,50,-14}, -{55,50,-13}, -{55,50,-12}, -{55,50,-11}, -{55,50,-10}, -{55,50,-9}, -{55,50,-8}, -{55,50,-7}, -{55,50,-6}, -{55,50,-5}, -{55,50,-4}, -{55,50,-3}, -{55,50,-2}, -{55,50,-1}, -{55,50,0}, -{55,50,1}, -{55,50,2}, -{55,50,3}, -{55,50,4}, -{55,50,5}, -{55,50,6}, -{55,50,7}, -{55,50,8}, -{55,50,9}, -{55,50,10}, -{55,50,11}, -{55,50,12}, -{55,50,13}, -{55,50,14}, -{55,50,15}, -{55,50,16}, -{55,50,17}, -{55,50,18}, -{55,50,19}, -{55,50,20}, -{55,50,21}, -{55,50,22}, -{55,50,23}, -{55,50,24}, -{55,50,25}, -{55,50,26}, -{55,50,27}, -{55,50,28}, -{55,50,29}, -{55,50,30}, -{55,50,31}, -{55,50,32}, -{55,50,33}, -{55,50,34}, -{55,50,35}, -{55,50,36}, -{55,50,37}, -{55,50,38}, -{55,50,39}, -{55,50,40}, -{55,50,41}, -{55,50,42}, -{55,50,43}, -{55,50,44}, -{55,50,45}, -{55,50,46}, -{55,50,47}, -{55,50,48}, -{55,50,49}, -{55,50,50}, -{55,50,51}, -{55,50,52}, -{55,50,53}, -{55,50,54}, -{55,50,55}, -{55,50,56}, -{55,50,57}, -{55,50,58}, -{55,50,59}, -{55,50,60}, -{55,50,61}, -{55,50,62}, -{55,50,63}, -{55,50,64}, -{55,51,-70}, -{55,51,-69}, -{55,51,-68}, -{55,51,-67}, -{55,51,-66}, -{55,51,-65}, -{55,51,-64}, -{55,51,-63}, -{55,51,-62}, -{55,51,-61}, -{55,51,-60}, -{55,51,-59}, -{55,51,-58}, -{55,51,-57}, -{55,51,-56}, -{55,51,-55}, -{55,51,-54}, -{55,51,-53}, -{55,51,-52}, -{55,51,-51}, -{55,51,-50}, -{55,51,-49}, -{55,51,-48}, -{55,51,-47}, -{55,51,-46}, -{55,51,-45}, -{55,51,-44}, -{55,51,-43}, -{55,51,-42}, -{55,51,-41}, -{55,51,-40}, -{55,51,-39}, -{55,51,-38}, -{55,51,-37}, -{55,51,-36}, -{55,51,-35}, -{55,51,-34}, -{55,51,-33}, -{55,51,-32}, -{55,51,-31}, -{55,51,-30}, -{55,51,-29}, -{55,51,-28}, -{55,51,-27}, -{55,51,-26}, -{55,51,-25}, -{55,51,-24}, -{55,51,-23}, -{55,51,-22}, -{55,51,-21}, -{55,51,-20}, -{55,51,-19}, -{55,51,-18}, -{55,51,-17}, -{55,51,-16}, -{55,51,-15}, -{55,51,-14}, -{55,51,-13}, -{55,51,-12}, -{55,51,-11}, -{55,51,-10}, -{55,51,-9}, -{55,51,-8}, -{55,51,-7}, -{55,51,-6}, -{55,51,-5}, -{55,51,-4}, -{55,51,-3}, -{55,51,-2}, -{55,51,-1}, -{55,51,0}, -{55,51,1}, -{55,51,2}, -{55,51,3}, -{55,51,4}, -{55,51,5}, -{55,51,6}, -{55,51,7}, -{55,51,8}, -{55,51,9}, -{55,51,10}, -{55,51,11}, -{55,51,12}, -{55,51,13}, -{55,51,14}, -{55,51,15}, -{55,51,16}, -{55,51,17}, -{55,51,18}, -{55,51,19}, -{55,51,20}, -{55,51,21}, -{55,51,22}, -{55,51,23}, -{55,51,24}, -{55,51,25}, -{55,51,26}, -{55,51,27}, -{55,51,28}, -{55,51,29}, -{55,51,30}, -{55,51,31}, -{55,51,32}, -{55,51,33}, -{55,51,34}, -{55,51,35}, -{55,51,36}, -{55,51,37}, -{55,51,38}, -{55,51,39}, -{55,51,40}, -{55,51,41}, -{55,51,42}, -{55,51,43}, -{55,51,44}, -{55,51,45}, -{55,51,46}, -{55,51,47}, -{55,51,48}, -{55,51,49}, -{55,51,50}, -{55,51,51}, -{55,51,52}, -{55,51,53}, -{55,51,54}, -{55,51,55}, -{55,51,56}, -{55,51,57}, -{55,51,58}, -{55,51,59}, -{55,51,60}, -{55,51,61}, -{55,51,62}, -{55,51,63}, -{55,51,64}, -{55,51,65}, -{55,52,-70}, -{55,52,-69}, -{55,52,-68}, -{55,52,-67}, -{55,52,-66}, -{55,52,-65}, -{55,52,-64}, -{55,52,-63}, -{55,52,-62}, -{55,52,-61}, -{55,52,-60}, -{55,52,-59}, -{55,52,-58}, -{55,52,-57}, -{55,52,-56}, -{55,52,-55}, -{55,52,-54}, -{55,52,-53}, -{55,52,-52}, -{55,52,-51}, -{55,52,-50}, -{55,52,-49}, -{55,52,-48}, -{55,52,-47}, -{55,52,-46}, -{55,52,-45}, -{55,52,-44}, -{55,52,-43}, -{55,52,-42}, -{55,52,-41}, -{55,52,-40}, -{55,52,-39}, -{55,52,-38}, -{55,52,-37}, -{55,52,-36}, -{55,52,-35}, -{55,52,-34}, -{55,52,-33}, -{55,52,-32}, -{55,52,-31}, -{55,52,-30}, -{55,52,-29}, -{55,52,-28}, -{55,52,-27}, -{55,52,-26}, -{55,52,-25}, -{55,52,-24}, -{55,52,-23}, -{55,52,-22}, -{55,52,-21}, -{55,52,-20}, -{55,52,-19}, -{55,52,-18}, -{55,52,-17}, -{55,52,-16}, -{55,52,-15}, -{55,52,-14}, -{55,52,-13}, -{55,52,-12}, -{55,52,-11}, -{55,52,-10}, -{55,52,-9}, -{55,52,-8}, -{55,52,-7}, -{55,52,-6}, -{55,52,-5}, -{55,52,-4}, -{55,52,-3}, -{55,52,-2}, -{55,52,-1}, -{55,52,0}, -{55,52,1}, -{55,52,2}, -{55,52,3}, -{55,52,4}, -{55,52,5}, -{55,52,6}, -{55,52,7}, -{55,52,8}, -{55,52,9}, -{55,52,10}, -{55,52,11}, -{55,52,12}, -{55,52,13}, -{55,52,14}, -{55,52,15}, -{55,52,16}, -{55,52,17}, -{55,52,18}, -{55,52,19}, -{55,52,20}, -{55,52,21}, -{55,52,22}, -{55,52,23}, -{55,52,24}, -{55,52,25}, -{55,52,26}, -{55,52,27}, -{55,52,28}, -{55,52,29}, -{55,52,30}, -{55,52,31}, -{55,52,32}, -{55,52,33}, -{55,52,34}, -{55,52,35}, -{55,52,36}, -{55,52,37}, -{55,52,38}, -{55,52,39}, -{55,52,40}, -{55,52,41}, -{55,52,42}, -{55,52,43}, -{55,52,44}, -{55,52,45}, -{55,52,46}, -{55,52,47}, -{55,52,48}, -{55,52,49}, -{55,52,50}, -{55,52,51}, -{55,52,52}, -{55,52,53}, -{55,52,54}, -{55,52,55}, -{55,52,56}, -{55,52,57}, -{55,52,58}, -{55,52,59}, -{55,52,60}, -{55,52,61}, -{55,52,62}, -{55,52,63}, -{55,52,64}, -{55,52,65}, -{55,53,-70}, -{55,53,-69}, -{55,53,-68}, -{55,53,-67}, -{55,53,-66}, -{55,53,-65}, -{55,53,-64}, -{55,53,-63}, -{55,53,-62}, -{55,53,-61}, -{55,53,-60}, -{55,53,-59}, -{55,53,-58}, -{55,53,-57}, -{55,53,-56}, -{55,53,-55}, -{55,53,-54}, -{55,53,-53}, -{55,53,-52}, -{55,53,-51}, -{55,53,-50}, -{55,53,-49}, -{55,53,-48}, -{55,53,-47}, -{55,53,-46}, -{55,53,-45}, -{55,53,-44}, -{55,53,-43}, -{55,53,-42}, -{55,53,-41}, -{55,53,-40}, -{55,53,-39}, -{55,53,-38}, -{55,53,-37}, -{55,53,-36}, -{55,53,-35}, -{55,53,-34}, -{55,53,-33}, -{55,53,-32}, -{55,53,-31}, -{55,53,-30}, -{55,53,-29}, -{55,53,-28}, -{55,53,-27}, -{55,53,-26}, -{55,53,-25}, -{55,53,-24}, -{55,53,-23}, -{55,53,-22}, -{55,53,-21}, -{55,53,-20}, -{55,53,-19}, -{55,53,-18}, -{55,53,-17}, -{55,53,-16}, -{55,53,-15}, -{55,53,-14}, -{55,53,-13}, -{55,53,-12}, -{55,53,-11}, -{55,53,-10}, -{55,53,-9}, -{55,53,-8}, -{55,53,-7}, -{55,53,-6}, -{55,53,-5}, -{55,53,-4}, -{55,53,-3}, -{55,53,-2}, -{55,53,-1}, -{55,53,0}, -{55,53,1}, -{55,53,2}, -{55,53,3}, -{55,53,4}, -{55,53,5}, -{55,53,6}, -{55,53,7}, -{55,53,8}, -{55,53,9}, -{55,53,10}, -{55,53,11}, -{55,53,12}, -{55,53,13}, -{55,53,14}, -{55,53,15}, -{55,53,16}, -{55,53,17}, -{55,53,18}, -{55,53,19}, -{55,53,20}, -{55,53,21}, -{55,53,22}, -{55,53,23}, -{55,53,24}, -{55,53,25}, -{55,53,26}, -{55,53,27}, -{55,53,28}, -{55,53,29}, -{55,53,30}, -{55,53,31}, -{55,53,32}, -{55,53,33}, -{55,53,34}, -{55,53,35}, -{55,53,36}, -{55,53,37}, -{55,53,38}, -{55,53,39}, -{55,53,40}, -{55,53,41}, -{55,53,42}, -{55,53,43}, -{55,53,44}, -{55,53,45}, -{55,53,46}, -{55,53,47}, -{55,53,48}, -{55,53,49}, -{55,53,50}, -{55,53,51}, -{55,53,52}, -{55,53,53}, -{55,53,54}, -{55,53,55}, -{55,53,56}, -{55,53,57}, -{55,53,58}, -{55,53,59}, -{55,53,60}, -{55,53,61}, -{55,53,62}, -{55,53,63}, -{55,53,64}, -{55,53,65}, -{55,54,-70}, -{55,54,-69}, -{55,54,-68}, -{55,54,-67}, -{55,54,-66}, -{55,54,-65}, -{55,54,-64}, -{55,54,-63}, -{55,54,-62}, -{55,54,-61}, -{55,54,-60}, -{55,54,-59}, -{55,54,-58}, -{55,54,-57}, -{55,54,-56}, -{55,54,-55}, -{55,54,-54}, -{55,54,-53}, -{55,54,-52}, -{55,54,-51}, -{55,54,-50}, -{55,54,-49}, -{55,54,-48}, -{55,54,-47}, -{55,54,-46}, -{55,54,-45}, -{55,54,-44}, -{55,54,-43}, -{55,54,-42}, -{55,54,-41}, -{55,54,-40}, -{55,54,-39}, -{55,54,-38}, -{55,54,-37}, -{55,54,-36}, -{55,54,-35}, -{55,54,-34}, -{55,54,-33}, -{55,54,-32}, -{55,54,-31}, -{55,54,-30}, -{55,54,-29}, -{55,54,-28}, -{55,54,-27}, -{55,54,-26}, -{55,54,-25}, -{55,54,-24}, -{55,54,-23}, -{55,54,-22}, -{55,54,-21}, -{55,54,-20}, -{55,54,-19}, -{55,54,-18}, -{55,54,-17}, -{55,54,-16}, -{55,54,-15}, -{55,54,-14}, -{55,54,-13}, -{55,54,-12}, -{55,54,-11}, -{55,54,-10}, -{55,54,-9}, -{55,54,-8}, -{55,54,-7}, -{55,54,-6}, -{55,54,-5}, -{55,54,-4}, -{55,54,-3}, -{55,54,-2}, -{55,54,-1}, -{55,54,0}, -{55,54,1}, -{55,54,2}, -{55,54,3}, -{55,54,4}, -{55,54,5}, -{55,54,6}, -{55,54,7}, -{55,54,8}, -{55,54,9}, -{55,54,10}, -{55,54,11}, -{55,54,12}, -{55,54,13}, -{55,54,14}, -{55,54,15}, -{55,54,16}, -{55,54,17}, -{55,54,18}, -{55,54,19}, -{55,54,20}, -{55,54,21}, -{55,54,22}, -{55,54,23}, -{55,54,24}, -{55,54,25}, -{55,54,26}, -{55,54,27}, -{55,54,28}, -{55,54,29}, -{55,54,30}, -{55,54,31}, -{55,54,32}, -{55,54,33}, -{55,54,34}, -{55,54,35}, -{55,54,36}, -{55,54,37}, -{55,54,38}, -{55,54,39}, -{55,54,40}, -{55,54,41}, -{55,54,42}, -{55,54,43}, -{55,54,44}, -{55,54,45}, -{55,54,46}, -{55,54,47}, -{55,54,48}, -{55,54,49}, -{55,54,50}, -{55,54,51}, -{55,54,52}, -{55,54,53}, -{55,54,54}, -{55,54,55}, -{55,54,56}, -{55,54,57}, -{55,54,58}, -{55,54,59}, -{55,54,60}, -{55,54,61}, -{55,54,62}, -{55,54,63}, -{55,54,64}, -{55,54,65}, -{55,55,-70}, -{55,55,-69}, -{55,55,-68}, -{55,55,-67}, -{55,55,-66}, -{55,55,-65}, -{55,55,-64}, -{55,55,-63}, -{55,55,-62}, -{55,55,-61}, -{55,55,-60}, -{55,55,-59}, -{55,55,-58}, -{55,55,-57}, -{55,55,-56}, -{55,55,-55}, -{55,55,-54}, -{55,55,-53}, -{55,55,-52}, -{55,55,-51}, -{55,55,-50}, -{55,55,-49}, -{55,55,-48}, -{55,55,-47}, -{55,55,-46}, -{55,55,-45}, -{55,55,-44}, -{55,55,-43}, -{55,55,-42}, -{55,55,-41}, -{55,55,-40}, -{55,55,-39}, -{55,55,-38}, -{55,55,-37}, -{55,55,-36}, -{55,55,-35}, -{55,55,-34}, -{55,55,-33}, -{55,55,-32}, -{55,55,-31}, -{55,55,-30}, -{55,55,-29}, -{55,55,-28}, -{55,55,-27}, -{55,55,-26}, -{55,55,-25}, -{55,55,-24}, -{55,55,-23}, -{55,55,-22}, -{55,55,-21}, -{55,55,-20}, -{55,55,-19}, -{55,55,-18}, -{55,55,-17}, -{55,55,-16}, -{55,55,-15}, -{55,55,-14}, -{55,55,-13}, -{55,55,-12}, -{55,55,-11}, -{55,55,-10}, -{55,55,-9}, -{55,55,-8}, -{55,55,-7}, -{55,55,-6}, -{55,55,-5}, -{55,55,-4}, -{55,55,-3}, -{55,55,-2}, -{55,55,-1}, -{55,55,0}, -{55,55,1}, -{55,55,2}, -{55,55,3}, -{55,55,4}, -{55,55,5}, -{55,55,6}, -{55,55,7}, -{55,55,8}, -{55,55,9}, -{55,55,10}, -{55,55,11}, -{55,55,12}, -{55,55,13}, -{55,55,14}, -{55,55,15}, -{55,55,16}, -{55,55,17}, -{55,55,18}, -{55,55,19}, -{55,55,20}, -{55,55,21}, -{55,55,22}, -{55,55,23}, -{55,55,24}, -{55,55,25}, -{55,55,26}, -{55,55,27}, -{55,55,28}, -{55,55,29}, -{55,55,30}, -{55,55,31}, -{55,55,32}, -{55,55,33}, -{55,55,34}, -{55,55,35}, -{55,55,36}, -{55,55,37}, -{55,55,38}, -{55,55,39}, -{55,55,40}, -{55,55,41}, -{55,55,42}, -{55,55,43}, -{55,55,44}, -{55,55,45}, -{55,55,46}, -{55,55,47}, -{55,55,48}, -{55,55,49}, -{55,55,50}, -{55,55,51}, -{55,55,52}, -{55,55,53}, -{55,55,54}, -{55,55,55}, -{55,55,56}, -{55,55,57}, -{55,55,58}, -{55,55,59}, -{55,55,60}, -{55,55,61}, -{55,55,62}, -{55,55,63}, -{55,55,64}, -{55,55,65}, -{55,56,-70}, -{55,56,-69}, -{55,56,-68}, -{55,56,-67}, -{55,56,-66}, -{55,56,-65}, -{55,56,-64}, -{55,56,-63}, -{55,56,-62}, -{55,56,-61}, -{55,56,-60}, -{55,56,-59}, -{55,56,-58}, -{55,56,-57}, -{55,56,-56}, -{55,56,-55}, -{55,56,-54}, -{55,56,-53}, -{55,56,-52}, -{55,56,-51}, -{55,56,-50}, -{55,56,-49}, -{55,56,-48}, -{55,56,-47}, -{55,56,-46}, -{55,56,-45}, -{55,56,-44}, -{55,56,-43}, -{55,56,-42}, -{55,56,-41}, -{55,56,-40}, -{55,56,-39}, -{55,56,-38}, -{55,56,-37}, -{55,56,-36}, -{55,56,-35}, -{55,56,-34}, -{55,56,-33}, -{55,56,-32}, -{55,56,-31}, -{55,56,-30}, -{55,56,-29}, -{55,56,-28}, -{55,56,-27}, -{55,56,-26}, -{55,56,-25}, -{55,56,-24}, -{55,56,-23}, -{55,56,-22}, -{55,56,-21}, -{55,56,-20}, -{55,56,-19}, -{55,56,-18}, -{55,56,-17}, -{55,56,-16}, -{55,56,-15}, -{55,56,-14}, -{55,56,-13}, -{55,56,-12}, -{55,56,-11}, -{55,56,-10}, -{55,56,-9}, -{55,56,-8}, -{55,56,-7}, -{55,56,-6}, -{55,56,-5}, -{55,56,-4}, -{55,56,-3}, -{55,56,-2}, -{55,56,-1}, -{55,56,0}, -{55,56,1}, -{55,56,2}, -{55,56,3}, -{55,56,4}, -{55,56,5}, -{55,56,6}, -{55,56,7}, -{55,56,8}, -{55,56,9}, -{55,56,10}, -{55,56,11}, -{55,56,12}, -{55,56,13}, -{55,56,14}, -{55,56,15}, -{55,56,16}, -{55,56,17}, -{55,56,18}, -{55,56,19}, -{55,56,20}, -{55,56,21}, -{55,56,22}, -{55,56,23}, -{55,56,24}, -{55,56,25}, -{55,56,26}, -{55,56,27}, -{55,56,28}, -{55,56,29}, -{55,56,30}, -{55,56,31}, -{55,56,32}, -{55,56,33}, -{55,56,34}, -{55,56,35}, -{55,56,36}, -{55,56,37}, -{55,56,38}, -{55,56,39}, -{55,56,40}, -{55,56,41}, -{55,56,42}, -{55,56,43}, -{55,56,44}, -{55,56,45}, -{55,56,46}, -{55,56,47}, -{55,56,48}, -{55,56,49}, -{55,56,50}, -{55,56,51}, -{55,56,52}, -{55,56,53}, -{55,56,54}, -{55,56,55}, -{55,56,56}, -{55,56,57}, -{55,56,58}, -{55,56,59}, -{55,56,60}, -{55,56,61}, -{55,56,62}, -{55,56,63}, -{55,56,64}, -{55,56,65}, -{55,57,-70}, -{55,57,-69}, -{55,57,-68}, -{55,57,-67}, -{55,57,-66}, -{55,57,-65}, -{55,57,-64}, -{55,57,-63}, -{55,57,-62}, -{55,57,-61}, -{55,57,-60}, -{55,57,-59}, -{55,57,-58}, -{55,57,-57}, -{55,57,-56}, -{55,57,-55}, -{55,57,-54}, -{55,57,-53}, -{55,57,-52}, -{55,57,-51}, -{55,57,-50}, -{55,57,-49}, -{55,57,-48}, -{55,57,-47}, -{55,57,-46}, -{55,57,-45}, -{55,57,-44}, -{55,57,-43}, -{55,57,-42}, -{55,57,-41}, -{55,57,-40}, -{55,57,-39}, -{55,57,-38}, -{55,57,-37}, -{55,57,-36}, -{55,57,-35}, -{55,57,-34}, -{55,57,-33}, -{55,57,-32}, -{55,57,-31}, -{55,57,-30}, -{55,57,-29}, -{55,57,-28}, -{55,57,-27}, -{55,57,-26}, -{55,57,-25}, -{55,57,-24}, -{55,57,-23}, -{55,57,-22}, -{55,57,-21}, -{55,57,-20}, -{55,57,-19}, -{55,57,-18}, -{55,57,-17}, -{55,57,-16}, -{55,57,-15}, -{55,57,-14}, -{55,57,-13}, -{55,57,-12}, -{55,57,-11}, -{55,57,-10}, -{55,57,-9}, -{55,57,-8}, -{55,57,-7}, -{55,57,-6}, -{55,57,-5}, -{55,57,-4}, -{55,57,-3}, -{55,57,-2}, -{55,57,-1}, -{55,57,0}, -{55,57,1}, -{55,57,2}, -{55,57,3}, -{55,57,4}, -{55,57,5}, -{55,57,6}, -{55,57,7}, -{55,57,8}, -{55,57,9}, -{55,57,10}, -{55,57,11}, -{55,57,12}, -{55,57,13}, -{55,57,14}, -{55,57,15}, -{55,57,16}, -{55,57,17}, -{55,57,18}, -{55,57,19}, -{55,57,20}, -{55,57,21}, -{55,57,22}, -{55,57,23}, -{55,57,24}, -{55,57,25}, -{55,57,26}, -{55,57,27}, -{55,57,28}, -{55,57,29}, -{55,57,30}, -{55,57,31}, -{55,57,32}, -{55,57,33}, -{55,57,34}, -{55,57,35}, -{55,57,36}, -{55,57,37}, -{55,57,38}, -{55,57,39}, -{55,57,40}, -{55,57,41}, -{55,57,42}, -{55,57,43}, -{55,57,44}, -{55,57,45}, -{55,57,46}, -{55,57,47}, -{55,57,48}, -{55,57,49}, -{55,57,50}, -{55,57,51}, -{55,57,52}, -{55,57,53}, -{55,57,54}, -{55,57,55}, -{55,57,56}, -{55,57,57}, -{55,57,58}, -{55,57,59}, -{55,57,60}, -{55,57,61}, -{55,57,62}, -{55,57,63}, -{55,57,64}, -{55,57,65}, -{55,58,-70}, -{55,58,-69}, -{55,58,-68}, -{55,58,-67}, -{55,58,-66}, -{55,58,-65}, -{55,58,-64}, -{55,58,-63}, -{55,58,-62}, -{55,58,-61}, -{55,58,-60}, -{55,58,-59}, -{55,58,-58}, -{55,58,-57}, -{55,58,-56}, -{55,58,-55}, -{55,58,-54}, -{55,58,-53}, -{55,58,-52}, -{55,58,-51}, -{55,58,-50}, -{55,58,-49}, -{55,58,-48}, -{55,58,-47}, -{55,58,-46}, -{55,58,-45}, -{55,58,-44}, -{55,58,-43}, -{55,58,-42}, -{55,58,-41}, -{55,58,-40}, -{55,58,-39}, -{55,58,-38}, -{55,58,-37}, -{55,58,-36}, -{55,58,-35}, -{55,58,-34}, -{55,58,-33}, -{55,58,-32}, -{55,58,-31}, -{55,58,-30}, -{55,58,-29}, -{55,58,-28}, -{55,58,-27}, -{55,58,-26}, -{55,58,-25}, -{55,58,-24}, -{55,58,-23}, -{55,58,-22}, -{55,58,-21}, -{55,58,-20}, -{55,58,-19}, -{55,58,-18}, -{55,58,-17}, -{55,58,-16}, -{55,58,-15}, -{55,58,-14}, -{55,58,-13}, -{55,58,-12}, -{55,58,-11}, -{55,58,-10}, -{55,58,-9}, -{55,58,-8}, -{55,58,-7}, -{55,58,-6}, -{55,58,-5}, -{55,58,-4}, -{55,58,-3}, -{55,58,-2}, -{55,58,-1}, -{55,58,0}, -{55,58,1}, -{55,58,2}, -{55,58,3}, -{55,58,4}, -{55,58,5}, -{55,58,6}, -{55,58,7}, -{55,58,8}, -{55,58,9}, -{55,58,10}, -{55,58,11}, -{55,58,12}, -{55,58,13}, -{55,58,14}, -{55,58,15}, -{55,58,16}, -{55,58,17}, -{55,58,18}, -{55,58,19}, -{55,58,20}, -{55,58,21}, -{55,58,22}, -{55,58,23}, -{55,58,24}, -{55,58,25}, -{55,58,26}, -{55,58,27}, -{55,58,28}, -{55,58,29}, -{55,58,30}, -{55,58,31}, -{55,58,32}, -{55,58,33}, -{55,58,34}, -{55,58,35}, -{55,58,36}, -{55,58,37}, -{55,58,38}, -{55,58,39}, -{55,58,40}, -{55,58,41}, -{55,58,42}, -{55,58,43}, -{55,58,44}, -{55,58,45}, -{55,58,46}, -{55,58,47}, -{55,58,48}, -{55,58,49}, -{55,58,50}, -{55,58,51}, -{55,58,52}, -{55,58,53}, -{55,58,54}, -{55,58,55}, -{55,58,56}, -{55,58,57}, -{55,58,58}, -{55,58,59}, -{55,58,60}, -{55,58,61}, -{55,58,62}, -{55,58,63}, -{55,58,64}, -{55,58,65}, -{55,59,-70}, -{55,59,-69}, -{55,59,-68}, -{55,59,-67}, -{55,59,-66}, -{55,59,-65}, -{55,59,-64}, -{55,59,-63}, -{55,59,-62}, -{55,59,-61}, -{55,59,-60}, -{55,59,-59}, -{55,59,-58}, -{55,59,-57}, -{55,59,-56}, -{55,59,-55}, -{55,59,-54}, -{55,59,-53}, -{55,59,-52}, -{55,59,-51}, -{55,59,-50}, -{55,59,-49}, -{55,59,-48}, -{55,59,-47}, -{55,59,-46}, -{55,59,-45}, -{55,59,-44}, -{55,59,-43}, -{55,59,-42}, -{55,59,-41}, -{55,59,-40}, -{55,59,-39}, -{55,59,-38}, -{55,59,-37}, -{55,59,-36}, -{55,59,-35}, -{55,59,-34}, -{55,59,-33}, -{55,59,-32}, -{55,59,-31}, -{55,59,-30}, -{55,59,-29}, -{55,59,-28}, -{55,59,-27}, -{55,59,-26}, -{55,59,-25}, -{55,59,-24}, -{55,59,-23}, -{55,59,-22}, -{55,59,-21}, -{55,59,-20}, -{55,59,-19}, -{55,59,-18}, -{55,59,-17}, -{55,59,-16}, -{55,59,-15}, -{55,59,-14}, -{55,59,-13}, -{55,59,-12}, -{55,59,-11}, -{55,59,-10}, -{55,59,-9}, -{55,59,-8}, -{55,59,-7}, -{55,59,-6}, -{55,59,-5}, -{55,59,-4}, -{55,59,-3}, -{55,59,-2}, -{55,59,-1}, -{55,59,0}, -{55,59,1}, -{55,59,2}, -{55,59,3}, -{55,59,4}, -{55,59,5}, -{55,59,6}, -{55,59,7}, -{55,59,8}, -{55,59,9}, -{55,59,10}, -{55,59,11}, -{55,59,12}, -{55,59,13}, -{55,59,14}, -{55,59,15}, -{55,59,16}, -{55,59,17}, -{55,59,18}, -{55,59,19}, -{55,59,20}, -{55,59,21}, -{55,59,22}, -{55,59,23}, -{55,59,24}, -{55,59,25}, -{55,59,26}, -{55,59,27}, -{55,59,28}, -{55,59,29}, -{55,59,30}, -{55,59,31}, -{55,59,32}, -{55,59,33}, -{55,59,34}, -{55,59,35}, -{55,59,36}, -{55,59,37}, -{55,59,38}, -{55,59,39}, -{55,59,40}, -{55,59,41}, -{55,59,42}, -{55,59,43}, -{55,59,44}, -{55,59,45}, -{55,59,46}, -{55,59,47}, -{55,59,48}, -{55,59,49}, -{55,59,50}, -{55,59,51}, -{55,59,52}, -{55,59,53}, -{55,59,54}, -{55,59,55}, -{55,59,56}, -{55,59,57}, -{55,59,58}, -{55,59,59}, -{55,59,60}, -{55,59,61}, -{55,59,62}, -{55,59,63}, -{55,59,64}, -{55,59,65}, -{55,60,-70}, -{55,60,-69}, -{55,60,-68}, -{55,60,-67}, -{55,60,-66}, -{55,60,-65}, -{55,60,-64}, -{55,60,-63}, -{55,60,-62}, -{55,60,-61}, -{55,60,-60}, -{55,60,-59}, -{55,60,-58}, -{55,60,-57}, -{55,60,-56}, -{55,60,-55}, -{55,60,-54}, -{55,60,-53}, -{55,60,-52}, -{55,60,-51}, -{55,60,-50}, -{55,60,-49}, -{55,60,-48}, -{55,60,-47}, -{55,60,-46}, -{55,60,-45}, -{55,60,-44}, -{55,60,-43}, -{55,60,-42}, -{55,60,-41}, -{55,60,-40}, -{55,60,-39}, -{55,60,-38}, -{55,60,-37}, -{55,60,-36}, -{55,60,-35}, -{55,60,-34}, -{55,60,-33}, -{55,60,-32}, -{55,60,-31}, -{55,60,-30}, -{55,60,-29}, -{55,60,-28}, -{55,60,-27}, -{55,60,-26}, -{55,60,-25}, -{55,60,-24}, -{55,60,-23}, -{55,60,-22}, -{55,60,-21}, -{55,60,-20}, -{55,60,-19}, -{55,60,-18}, -{55,60,-17}, -{55,60,-16}, -{55,60,-15}, -{55,60,-14}, -{55,60,-13}, -{55,60,-12}, -{55,60,-11}, -{55,60,-10}, -{55,60,-9}, -{55,60,-8}, -{55,60,-7}, -{55,60,-6}, -{55,60,-5}, -{55,60,-4}, -{55,60,-3}, -{55,60,-2}, -{55,60,-1}, -{55,60,0}, -{55,60,1}, -{55,60,2}, -{55,60,3}, -{55,60,4}, -{55,60,5}, -{55,60,6}, -{55,60,7}, -{55,60,8}, -{55,60,9}, -{55,60,10}, -{55,60,11}, -{55,60,12}, -{55,60,13}, -{55,60,14}, -{55,60,15}, -{55,60,16}, -{55,60,17}, -{55,60,18}, -{55,60,19}, -{55,60,20}, -{55,60,21}, -{55,60,22}, -{55,60,23}, -{55,60,24}, -{55,60,25}, -{55,60,26}, -{55,60,27}, -{55,60,28}, -{55,60,29}, -{55,60,30}, -{55,60,31}, -{55,60,32}, -{55,60,33}, -{55,60,34}, -{55,60,35}, -{55,60,36}, -{55,60,37}, -{55,60,38}, -{55,60,39}, -{55,60,40}, -{55,60,41}, -{55,60,42}, -{55,60,43}, -{55,60,44}, -{55,60,45}, -{55,60,46}, -{55,60,47}, -{55,60,48}, -{55,60,49}, -{55,60,50}, -{55,60,51}, -{55,60,52}, -{55,60,53}, -{55,60,54}, -{55,60,55}, -{55,60,56}, -{55,60,57}, -{55,60,58}, -{55,60,59}, -{55,60,60}, -{55,60,61}, -{55,60,62}, -{55,60,63}, -{55,60,64}, -{55,60,65}, -{55,60,66}, -{55,61,-70}, -{55,61,-69}, -{55,61,-68}, -{55,61,-67}, -{55,61,-66}, -{55,61,-65}, -{55,61,-64}, -{55,61,-63}, -{55,61,-62}, -{55,61,-61}, -{55,61,-60}, -{55,61,-59}, -{55,61,-58}, -{55,61,-57}, -{55,61,-56}, -{55,61,-55}, -{55,61,-54}, -{55,61,-53}, -{55,61,-52}, -{55,61,-51}, -{55,61,-50}, -{55,61,-49}, -{55,61,-48}, -{55,61,-47}, -{55,61,-46}, -{55,61,-45}, -{55,61,-44}, -{55,61,-43}, -{55,61,-42}, -{55,61,-41}, -{55,61,-40}, -{55,61,-39}, -{55,61,-38}, -{55,61,-37}, -{55,61,-36}, -{55,61,-35}, -{55,61,-34}, -{55,61,-33}, -{55,61,-32}, -{55,61,-31}, -{55,61,-30}, -{55,61,-29}, -{55,61,-28}, -{55,61,-27}, -{55,61,-26}, -{55,61,-25}, -{55,61,-24}, -{55,61,-23}, -{55,61,-22}, -{55,61,-21}, -{55,61,-20}, -{55,61,-19}, -{55,61,-18}, -{55,61,-17}, -{55,61,-16}, -{55,61,-15}, -{55,61,-14}, -{55,61,-13}, -{55,61,-12}, -{55,61,-11}, -{55,61,-10}, -{55,61,-9}, -{55,61,-8}, -{55,61,-7}, -{55,61,-6}, -{55,61,-5}, -{55,61,-4}, -{55,61,-3}, -{55,61,-2}, -{55,61,-1}, -{55,61,0}, -{55,61,1}, -{55,61,2}, -{55,61,3}, -{55,61,4}, -{55,61,5}, -{55,61,6}, -{55,61,7}, -{55,61,8}, -{55,61,9}, -{55,61,10}, -{55,61,11}, -{55,61,12}, -{55,61,13}, -{55,61,14}, -{55,61,15}, -{55,61,16}, -{55,61,17}, -{55,61,18}, -{55,61,19}, -{55,61,20}, -{55,61,21}, -{55,61,22}, -{55,61,23}, -{55,61,24}, -{55,61,25}, -{55,61,26}, -{55,61,27}, -{55,61,28}, -{55,61,29}, -{55,61,30}, -{55,61,31}, -{55,61,32}, -{55,61,33}, -{55,61,34}, -{55,61,35}, -{55,61,36}, -{55,61,37}, -{55,61,38}, -{55,61,39}, -{55,61,40}, -{55,61,41}, -{55,61,42}, -{55,61,43}, -{55,61,44}, -{55,61,45}, -{55,61,46}, -{55,61,47}, -{55,61,48}, -{55,61,49}, -{55,61,50}, -{55,61,51}, -{55,61,52}, -{55,61,53}, -{55,61,54}, -{55,61,55}, -{55,61,56}, -{55,61,57}, -{55,61,58}, -{55,61,59}, -{55,61,60}, -{55,61,61}, -{55,61,62}, -{55,61,63}, -{55,61,64}, -{55,61,65}, -{55,61,66}, -{55,62,-70}, -{55,62,-69}, -{55,62,-68}, -{55,62,-67}, -{55,62,-66}, -{55,62,-65}, -{55,62,-64}, -{55,62,-63}, -{55,62,-62}, -{55,62,-61}, -{55,62,-60}, -{55,62,-59}, -{55,62,-58}, -{55,62,-57}, -{55,62,-56}, -{55,62,-55}, -{55,62,-54}, -{55,62,-53}, -{55,62,-52}, -{55,62,-51}, -{55,62,-50}, -{55,62,-49}, -{55,62,-48}, -{55,62,-47}, -{55,62,-46}, -{55,62,-45}, -{55,62,-44}, -{55,62,-43}, -{55,62,-42}, -{55,62,-41}, -{55,62,-40}, -{55,62,-39}, -{55,62,-38}, -{55,62,-37}, -{55,62,-36}, -{55,62,-35}, -{55,62,-34}, -{55,62,-33}, -{55,62,-32}, -{55,62,-31}, -{55,62,-30}, -{55,62,-29}, -{55,62,-28}, -{55,62,-27}, -{55,62,-26}, -{55,62,-25}, -{55,62,-24}, -{55,62,-23}, -{55,62,-22}, -{55,62,-21}, -{55,62,-20}, -{55,62,-19}, -{55,62,-18}, -{55,62,-17}, -{55,62,-16}, -{55,62,-15}, -{55,62,-14}, -{55,62,-13}, -{55,62,-12}, -{55,62,-11}, -{55,62,-10}, -{55,62,-9}, -{55,62,-8}, -{55,62,-7}, -{55,62,-6}, -{55,62,-5}, -{55,62,-4}, -{55,62,-3}, -{55,62,-2}, -{55,62,-1}, -{55,62,0}, -{55,62,1}, -{55,62,2}, -{55,62,3}, -{55,62,4}, -{55,62,5}, -{55,62,6}, -{55,62,7}, -{55,62,8}, -{55,62,9}, -{55,62,10}, -{55,62,11}, -{55,62,12}, -{55,62,13}, -{55,62,14}, -{55,62,15}, -{55,62,16}, -{55,62,17}, -{55,62,18}, -{55,62,19}, -{55,62,20}, -{55,62,21}, -{55,62,22}, -{55,62,23}, -{55,62,24}, -{55,62,25}, -{55,62,26}, -{55,62,27}, -{55,62,28}, -{55,62,29}, -{55,62,30}, -{55,62,31}, -{55,62,32}, -{55,62,33}, -{55,62,34}, -{55,62,35}, -{55,62,36}, -{55,62,37}, -{55,62,38}, -{55,62,39}, -{55,62,40}, -{55,62,41}, -{55,62,42}, -{55,62,43}, -{55,62,44}, -{55,62,45}, -{55,62,46}, -{55,62,47}, -{55,62,48}, -{55,62,49}, -{55,62,50}, -{55,62,51}, -{55,62,52}, -{55,62,53}, -{55,62,54}, -{55,62,55}, -{55,62,56}, -{55,62,57}, -{55,62,58}, -{55,62,59}, -{55,62,60}, -{55,62,61}, -{55,62,62}, -{55,62,63}, -{55,62,64}, -{55,62,65}, -{55,62,66}, -{55,63,-70}, -{55,63,-69}, -{55,63,-68}, -{55,63,-67}, -{55,63,-66}, -{55,63,-65}, -{55,63,-64}, -{55,63,-63}, -{55,63,-62}, -{55,63,-61}, -{55,63,-60}, -{55,63,-59}, -{55,63,-58}, -{55,63,-57}, -{55,63,-56}, -{55,63,-55}, -{55,63,-54}, -{55,63,-53}, -{55,63,-52}, -{55,63,-51}, -{55,63,-50}, -{55,63,-49}, -{55,63,-48}, -{55,63,-47}, -{55,63,-46}, -{55,63,-45}, -{55,63,-44}, -{55,63,-43}, -{55,63,-42}, -{55,63,-41}, -{55,63,-40}, -{55,63,-39}, -{55,63,-38}, -{55,63,-37}, -{55,63,-36}, -{55,63,-35}, -{55,63,-34}, -{55,63,-33}, -{55,63,-32}, -{55,63,-31}, -{55,63,-30}, -{55,63,-29}, -{55,63,-28}, -{55,63,-27}, -{55,63,-26}, -{55,63,-25}, -{55,63,-24}, -{55,63,-23}, -{55,63,-22}, -{55,63,-21}, -{55,63,-20}, -{55,63,-19}, -{55,63,-18}, -{55,63,-17}, -{55,63,-16}, -{55,63,-15}, -{55,63,-14}, -{55,63,-13}, -{55,63,-12}, -{55,63,-11}, -{55,63,-10}, -{55,63,-9}, -{55,63,-8}, -{55,63,-7}, -{55,63,-6}, -{55,63,-5}, -{55,63,-4}, -{55,63,-3}, -{55,63,-2}, -{55,63,-1}, -{55,63,0}, -{55,63,1}, -{55,63,2}, -{55,63,3}, -{55,63,4}, -{55,63,5}, -{55,63,6}, -{55,63,7}, -{55,63,8}, -{55,63,9}, -{55,63,10}, -{55,63,11}, -{55,63,12}, -{55,63,13}, -{55,63,14}, -{55,63,15}, -{55,63,16}, -{55,63,17}, -{55,63,18}, -{55,63,19}, -{55,63,20}, -{55,63,21}, -{55,63,22}, -{55,63,23}, -{55,63,24}, -{55,63,25}, -{55,63,26}, -{55,63,27}, -{55,63,28}, -{55,63,29}, -{55,63,30}, -{55,63,31}, -{55,63,32}, -{55,63,33}, -{55,63,34}, -{55,63,35}, -{55,63,36}, -{55,63,37}, -{55,63,38}, -{55,63,39}, -{55,63,40}, -{55,63,41}, -{55,63,42}, -{55,63,43}, -{55,63,44}, -{55,63,45}, -{55,63,46}, -{55,63,47}, -{55,63,48}, -{55,63,49}, -{55,63,50}, -{55,63,51}, -{55,63,52}, -{55,63,53}, -{55,63,54}, -{55,63,55}, -{55,63,56}, -{55,63,57}, -{55,63,58}, -{55,63,59}, -{55,63,60}, -{55,63,61}, -{55,63,62}, -{55,63,63}, -{55,63,64}, -{55,63,65}, -{55,63,66}, -{55,64,-70}, -{55,64,-69}, -{55,64,-68}, -{55,64,-67}, -{55,64,-66}, -{55,64,-65}, -{55,64,-64}, -{55,64,-63}, -{55,64,-62}, -{55,64,-61}, -{55,64,-60}, -{55,64,-59}, -{55,64,-58}, -{55,64,-57}, -{55,64,-56}, -{55,64,-55}, -{55,64,-54}, -{55,64,-53}, -{55,64,-52}, -{55,64,-51}, -{55,64,-50}, -{55,64,-49}, -{55,64,-48}, -{55,64,-47}, -{55,64,-46}, -{55,64,-45}, -{55,64,-44}, -{55,64,-43}, -{55,64,-42}, -{55,64,-41}, -{55,64,-40}, -{55,64,-39}, -{55,64,-38}, -{55,64,-37}, -{55,64,-36}, -{55,64,-35}, -{55,64,-34}, -{55,64,-33}, -{55,64,-32}, -{55,64,-31}, -{55,64,-30}, -{55,64,-29}, -{55,64,-28}, -{55,64,-27}, -{55,64,-26}, -{55,64,-25}, -{55,64,-24}, -{55,64,-23}, -{55,64,-22}, -{55,64,-21}, -{55,64,-20}, -{55,64,-19}, -{55,64,-18}, -{55,64,-17}, -{55,64,-16}, -{55,64,-15}, -{55,64,-14}, -{55,64,-13}, -{55,64,-12}, -{55,64,-11}, -{55,64,-10}, -{55,64,-9}, -{55,64,-8}, -{55,64,-7}, -{55,64,-6}, -{55,64,-5}, -{55,64,-4}, -{55,64,-3}, -{55,64,-2}, -{55,64,-1}, -{55,64,0}, -{55,64,1}, -{55,64,2}, -{55,64,3}, -{55,64,4}, -{55,64,5}, -{55,64,6}, -{55,64,7}, -{55,64,8}, -{55,64,9}, -{55,64,10}, -{55,64,11}, -{55,64,12}, -{55,64,13}, -{55,64,14}, -{55,64,15}, -{55,64,16}, -{55,64,17}, -{55,64,18}, -{55,64,19}, -{55,64,20}, -{55,64,21}, -{55,64,22}, -{55,64,23}, -{55,64,24}, -{55,64,25}, -{55,64,26}, -{55,64,27}, -{55,64,28}, -{55,64,29}, -{55,64,30}, -{55,64,31}, -{55,64,32}, -{55,64,33}, -{55,64,34}, -{55,64,35}, -{55,64,36}, -{55,64,37}, -{55,64,38}, -{55,64,39}, -{55,64,40}, -{55,64,41}, -{55,64,42}, -{55,64,43}, -{55,64,44}, -{55,64,45}, -{55,64,46}, -{55,64,47}, -{55,64,48}, -{55,64,49}, -{55,64,50}, -{55,64,51}, -{55,64,52}, -{55,64,53}, -{55,64,54}, -{55,64,55}, -{55,64,56}, -{55,64,57}, -{55,64,58}, -{55,64,59}, -{55,64,60}, -{55,64,61}, -{55,64,62}, -{55,64,63}, -{55,64,64}, -{55,64,65}, -{55,64,66}, -{55,65,-70}, -{55,65,-69}, -{55,65,-68}, -{55,65,-67}, -{55,65,-66}, -{55,65,-65}, -{55,65,-64}, -{55,65,-63}, -{55,65,-62}, -{55,65,-61}, -{55,65,-60}, -{55,65,-59}, -{55,65,-58}, -{55,65,-57}, -{55,65,-56}, -{55,65,-55}, -{55,65,-54}, -{55,65,-53}, -{55,65,-52}, -{55,65,-51}, -{55,65,-50}, -{55,65,-49}, -{55,65,-48}, -{55,65,-47}, -{55,65,-46}, -{55,65,-45}, -{55,65,-44}, -{55,65,-43}, -{55,65,-42}, -{55,65,-41}, -{55,65,-40}, -{55,65,-39}, -{55,65,-38}, -{55,65,-37}, -{55,65,-36}, -{55,65,-35}, -{55,65,-34}, -{55,65,-33}, -{55,65,-32}, -{55,65,-31}, -{55,65,-30}, -{55,65,-29}, -{55,65,-28}, -{55,65,-27}, -{55,65,-26}, -{55,65,-25}, -{55,65,-24}, -{55,65,-23}, -{55,65,-22}, -{55,65,-21}, -{55,65,-20}, -{55,65,-19}, -{55,65,-18}, -{55,65,-17}, -{55,65,-16}, -{55,65,-15}, -{55,65,-14}, -{55,65,-13}, -{55,65,-12}, -{55,65,-11}, -{55,65,-10}, -{55,65,-9}, -{55,65,-8}, -{55,65,-7}, -{55,65,-6}, -{55,65,-5}, -{55,65,-4}, -{55,65,-3}, -{55,65,-2}, -{55,65,-1}, -{55,65,0}, -{55,65,1}, -{55,65,2}, -{55,65,3}, -{55,65,4}, -{55,65,5}, -{55,65,6}, -{55,65,7}, -{55,65,8}, -{55,65,9}, -{55,65,10}, -{55,65,11}, -{55,65,12}, -{55,65,13}, -{55,65,14}, -{55,65,15}, -{55,65,16}, -{55,65,17}, -{55,65,18}, -{55,65,19}, -{55,65,20}, -{55,65,21}, -{55,65,22}, -{55,65,23}, -{55,65,24}, -{55,65,25}, -{55,65,26}, -{55,65,27}, -{55,65,28}, -{55,65,29}, -{55,65,30}, -{55,65,31}, -{55,65,32}, -{55,65,33}, -{55,65,34}, -{55,65,35}, -{55,65,36}, -{55,65,37}, -{55,65,38}, -{55,65,39}, -{55,65,40}, -{55,65,41}, -{55,65,42}, -{55,65,43}, -{55,65,44}, -{55,65,45}, -{55,65,46}, -{55,65,47}, -{55,65,48}, -{55,65,49}, -{55,65,50}, -{55,65,51}, -{55,65,52}, -{55,65,53}, -{55,65,54}, -{55,65,55}, -{55,65,56}, -{55,65,57}, -{55,65,58}, -{55,65,59}, -{55,65,60}, -{55,65,61}, -{55,65,62}, -{55,65,63}, -{55,65,64}, -{55,65,65}, -{55,65,66}, -{55,66,-70}, -{55,66,-69}, -{55,66,-68}, -{55,66,-67}, -{55,66,-66}, -{55,66,-65}, -{55,66,-64}, -{55,66,-63}, -{55,66,-62}, -{55,66,-61}, -{55,66,-60}, -{55,66,-59}, -{55,66,-58}, -{55,66,-57}, -{55,66,-56}, -{55,66,-55}, -{55,66,-54}, -{55,66,-53}, -{55,66,-52}, -{55,66,-51}, -{55,66,-50}, -{55,66,-49}, -{55,66,-48}, -{55,66,-47}, -{55,66,-46}, -{55,66,-45}, -{55,66,-44}, -{55,66,-43}, -{55,66,-42}, -{55,66,-41}, -{55,66,-40}, -{55,66,-39}, -{55,66,-38}, -{55,66,-37}, -{55,66,-36}, -{55,66,-35}, -{55,66,-34}, -{55,66,-33}, -{55,66,-32}, -{55,66,-31}, -{55,66,-30}, -{55,66,-29}, -{55,66,-28}, -{55,66,-27}, -{55,66,-26}, -{55,66,-25}, -{55,66,-24}, -{55,66,-23}, -{55,66,-22}, -{55,66,-21}, -{55,66,-20}, -{55,66,-19}, -{55,66,-18}, -{55,66,-17}, -{55,66,-16}, -{55,66,-15}, -{55,66,-14}, -{55,66,-13}, -{55,66,-12}, -{55,66,-11}, -{55,66,-10}, -{55,66,-9}, -{55,66,-8}, -{55,66,-7}, -{55,66,-6}, -{55,66,-5}, -{55,66,-4}, -{55,66,-3}, -{55,66,-2}, -{55,66,-1}, -{55,66,0}, -{55,66,1}, -{55,66,2}, -{55,66,3}, -{55,66,4}, -{55,66,5}, -{55,66,6}, -{55,66,7}, -{55,66,8}, -{55,66,9}, -{55,66,10}, -{55,66,11}, -{55,66,12}, -{55,66,13}, -{55,66,14}, -{55,66,15}, -{55,66,16}, -{55,66,17}, -{55,66,18}, -{55,66,19}, -{55,66,20}, -{55,66,21}, -{55,66,22}, -{55,66,23}, -{55,66,24}, -{55,66,25}, -{55,66,26}, -{55,66,27}, -{55,66,28}, -{55,66,29}, -{55,66,30}, -{55,66,31}, -{55,66,32}, -{55,66,33}, -{55,66,34}, -{55,66,35}, -{55,66,36}, -{55,66,37}, -{55,66,38}, -{55,66,39}, -{55,66,40}, -{55,66,41}, -{55,66,42}, -{55,66,43}, -{55,66,44}, -{55,66,45}, -{55,66,46}, -{55,66,47}, -{55,66,48}, -{55,66,49}, -{55,66,50}, -{55,66,51}, -{55,66,52}, -{55,66,53}, -{55,66,54}, -{55,66,55}, -{55,66,56}, -{55,66,57}, -{55,66,58}, -{55,66,59}, -{55,66,60}, -{55,66,61}, -{55,66,62}, -{55,66,63}, -{55,66,64}, -{55,66,65}, -{55,66,66}, -{55,67,-70}, -{55,67,-69}, -{55,67,-68}, -{55,67,-67}, -{55,67,-66}, -{55,67,-65}, -{55,67,-64}, -{55,67,-63}, -{55,67,-62}, -{55,67,-61}, -{55,67,-60}, -{55,67,-59}, -{55,67,-58}, -{55,67,-57}, -{55,67,-56}, -{55,67,-55}, -{55,67,-54}, -{55,67,-53}, -{55,67,-52}, -{55,67,-51}, -{55,67,-50}, -{55,67,-49}, -{55,67,-48}, -{55,67,-47}, -{55,67,-46}, -{55,67,-45}, -{55,67,-44}, -{55,67,-43}, -{55,67,-42}, -{55,67,-41}, -{55,67,-40}, -{55,67,-39}, -{55,67,-38}, -{55,67,-37}, -{55,67,-36}, -{55,67,-35}, -{55,67,-34}, -{55,67,-33}, -{55,67,-32}, -{55,67,-31}, -{55,67,-30}, -{55,67,-29}, -{55,67,-28}, -{55,67,-27}, -{55,67,-26}, -{55,67,-25}, -{55,67,-24}, -{55,67,-23}, -{55,67,-22}, -{55,67,-21}, -{55,67,-20}, -{55,67,-19}, -{55,67,-18}, -{55,67,-17}, -{55,67,-16}, -{55,67,-15}, -{55,67,-14}, -{55,67,-13}, -{55,67,-12}, -{55,67,-11}, -{55,67,-10}, -{55,67,-9}, -{55,67,-8}, -{55,67,-7}, -{55,67,-6}, -{55,67,-5}, -{55,67,-4}, -{55,67,-3}, -{55,67,-2}, -{55,67,-1}, -{55,67,0}, -{55,67,1}, -{55,67,2}, -{55,67,3}, -{55,67,4}, -{55,67,5}, -{55,67,6}, -{55,67,7}, -{55,67,8}, -{55,67,9}, -{55,67,10}, -{55,67,11}, -{55,67,12}, -{55,67,13}, -{55,67,14}, -{55,67,15}, -{55,67,16}, -{55,67,17}, -{55,67,18}, -{55,67,19}, -{55,67,20}, -{55,67,21}, -{55,67,22}, -{55,67,23}, -{55,67,24}, -{55,67,25}, -{55,67,26}, -{55,67,27}, -{55,67,28}, -{55,67,29}, -{55,67,30}, -{55,67,31}, -{55,67,32}, -{55,67,33}, -{55,67,34}, -{55,67,35}, -{55,67,36}, -{55,67,37}, -{55,67,38}, -{55,67,39}, -{55,67,40}, -{55,67,41}, -{55,67,42}, -{55,67,43}, -{55,67,44}, -{55,67,45}, -{55,67,46}, -{55,67,47}, -{55,67,48}, -{55,67,49}, -{55,67,50}, -{55,67,51}, -{55,67,52}, -{55,67,53}, -{55,67,54}, -{55,67,55}, -{55,67,56}, -{55,67,57}, -{55,67,58}, -{55,67,59}, -{55,67,60}, -{55,67,61}, -{55,67,62}, -{55,67,63}, -{55,67,64}, -{55,67,65}, -{55,67,66}, -{55,68,-70}, -{55,68,-69}, -{55,68,-68}, -{55,68,-67}, -{55,68,-66}, -{55,68,-65}, -{55,68,-64}, -{55,68,-63}, -{55,68,-62}, -{55,68,-61}, -{55,68,-60}, -{55,68,-59}, -{55,68,-58}, -{55,68,-57}, -{55,68,-56}, -{55,68,-55}, -{55,68,-54}, -{55,68,-53}, -{55,68,-52}, -{55,68,-51}, -{55,68,-50}, -{55,68,-49}, -{55,68,-48}, -{55,68,-47}, -{55,68,-46}, -{55,68,-45}, -{55,68,-44}, -{55,68,-43}, -{55,68,-42}, -{55,68,-41}, -{55,68,-40}, -{55,68,-39}, -{55,68,-38}, -{55,68,-37}, -{55,68,-36}, -{55,68,-35}, -{55,68,-34}, -{55,68,-33}, -{55,68,-32}, -{55,68,-31}, -{55,68,-30}, -{55,68,-29}, -{55,68,-28}, -{55,68,-27}, -{55,68,-26}, -{55,68,-25}, -{55,68,-24}, -{55,68,-23}, -{55,68,-22}, -{55,68,-21}, -{55,68,-20}, -{55,68,-19}, -{55,68,-18}, -{55,68,-17}, -{55,68,-16}, -{55,68,-15}, -{55,68,-14}, -{55,68,-13}, -{55,68,-12}, -{55,68,-11}, -{55,68,-10}, -{55,68,-9}, -{55,68,-8}, -{55,68,-7}, -{55,68,-6}, -{55,68,-5}, -{55,68,-4}, -{55,68,-3}, -{55,68,-2}, -{55,68,-1}, -{55,68,0}, -{55,68,1}, -{55,68,2}, -{55,68,3}, -{55,68,4}, -{55,68,5}, -{55,68,6}, -{55,68,7}, -{55,68,8}, -{55,68,9}, -{55,68,10}, -{55,68,11}, -{55,68,12}, -{55,68,13}, -{55,68,14}, -{55,68,15}, -{55,68,16}, -{55,68,17}, -{55,68,18}, -{55,68,19}, -{55,68,20}, -{55,68,21}, -{55,68,22}, -{55,68,23}, -{55,68,24}, -{55,68,25}, -{55,68,26}, -{55,68,27}, -{55,68,28}, -{55,68,29}, -{55,68,30}, -{55,68,31}, -{55,68,32}, -{55,68,33}, -{55,68,34}, -{55,68,35}, -{55,68,36}, -{55,68,37}, -{55,68,38}, -{55,68,39}, -{55,68,40}, -{55,68,41}, -{55,68,42}, -{55,68,43}, -{55,68,44}, -{55,68,45}, -{55,68,46}, -{55,68,47}, -{55,68,48}, -{55,68,49}, -{55,68,50}, -{55,68,51}, -{55,68,52}, -{55,68,53}, -{55,68,54}, -{55,68,55}, -{55,68,56}, -{55,68,57}, -{55,68,58}, -{55,68,59}, -{55,68,60}, -{55,68,61}, -{55,68,62}, -{55,68,63}, -{55,68,64}, -{55,68,65}, -{55,68,66}, -{55,68,67}, -{55,69,-70}, -{55,69,-69}, -{55,69,-68}, -{55,69,-67}, -{55,69,-66}, -{55,69,-65}, -{55,69,-64}, -{55,69,-63}, -{55,69,-62}, -{55,69,-61}, -{55,69,-60}, -{55,69,-59}, -{55,69,-58}, -{55,69,-57}, -{55,69,-56}, -{55,69,-55}, -{55,69,-54}, -{55,69,-53}, -{55,69,-52}, -{55,69,-51}, -{55,69,-50}, -{55,69,-49}, -{55,69,-48}, -{55,69,-47}, -{55,69,-46}, -{55,69,-45}, -{55,69,-44}, -{55,69,-43}, -{55,69,-42}, -{55,69,-41}, -{55,69,-40}, -{55,69,-39}, -{55,69,-38}, -{55,69,-37}, -{55,69,-36}, -{55,69,-35}, -{55,69,-34}, -{55,69,-33}, -{55,69,-32}, -{55,69,-31}, -{55,69,-30}, -{55,69,-29}, -{55,69,-28}, -{55,69,-27}, -{55,69,-26}, -{55,69,-25}, -{55,69,-24}, -{55,69,-23}, -{55,69,-22}, -{55,69,-21}, -{55,69,-20}, -{55,69,-19}, -{55,69,-18}, -{55,69,-17}, -{55,69,-16}, -{55,69,-15}, -{55,69,-14}, -{55,69,-13}, -{55,69,-12}, -{55,69,-11}, -{55,69,-10}, -{55,69,-9}, -{55,69,-8}, -{55,69,-7}, -{55,69,-6}, -{55,69,-5}, -{55,69,-4}, -{55,69,-3}, -{55,69,-2}, -{55,69,-1}, -{55,69,0}, -{55,69,1}, -{55,69,2}, -{55,69,3}, -{55,69,4}, -{55,69,5}, -{55,69,6}, -{55,69,7}, -{55,69,8}, -{55,69,9}, -{55,69,10}, -{55,69,11}, -{55,69,12}, -{55,69,13}, -{55,69,14}, -{55,69,15}, -{55,69,16}, -{55,69,17}, -{55,69,18}, -{55,69,19}, -{55,69,20}, -{55,69,21}, -{55,69,22}, -{55,69,23}, -{55,69,24}, -{55,69,25}, -{55,69,26}, -{55,69,27}, -{55,69,28}, -{55,69,29}, -{55,69,30}, -{55,69,31}, -{55,69,32}, -{55,69,33}, -{55,69,34}, -{55,69,35}, -{55,69,36}, -{55,69,37}, -{55,69,38}, -{55,69,39}, -{55,69,40}, -{55,69,41}, -{55,69,42}, -{55,69,43}, -{55,69,44}, -{55,69,45}, -{55,69,46}, -{55,69,47}, -{55,69,48}, -{55,69,49}, -{55,69,50}, -{55,69,51}, -{55,69,52}, -{55,69,53}, -{55,69,54}, -{55,69,55}, -{55,69,56}, -{55,69,57}, -{55,69,58}, -{55,69,59}, -{55,69,60}, -{55,69,61}, -{55,69,62}, -{55,69,63}, -{55,69,64}, -{55,69,65}, -{55,69,66}, -{55,69,67}, -{55,70,-70}, -{55,70,-69}, -{55,70,-68}, -{55,70,-67}, -{55,70,-66}, -{55,70,-65}, -{55,70,-64}, -{55,70,-63}, -{55,70,-62}, -{55,70,-61}, -{55,70,-60}, -{55,70,-59}, -{55,70,-58}, -{55,70,-57}, -{55,70,-56}, -{55,70,-55}, -{55,70,-54}, -{55,70,-53}, -{55,70,-52}, -{55,70,-51}, -{55,70,-50}, -{55,70,-49}, -{55,70,-48}, -{55,70,-47}, -{55,70,-46}, -{55,70,-45}, -{55,70,-44}, -{55,70,-43}, -{55,70,-42}, -{55,70,-41}, -{55,70,-40}, -{55,70,-39}, -{55,70,-38}, -{55,70,-37}, -{55,70,-36}, -{55,70,-35}, -{55,70,-34}, -{55,70,-33}, -{55,70,-32}, -{55,70,-31}, -{55,70,-30}, -{55,70,-29}, -{55,70,-28}, -{55,70,-27}, -{55,70,-26}, -{55,70,-25}, -{55,70,-24}, -{55,70,-23}, -{55,70,-22}, -{55,70,-21}, -{55,70,-20}, -{55,70,-19}, -{55,70,-18}, -{55,70,-17}, -{55,70,-16}, -{55,70,-15}, -{55,70,-14}, -{55,70,-13}, -{55,70,-12}, -{55,70,-11}, -{55,70,-10}, -{55,70,-9}, -{55,70,-8}, -{55,70,-7}, -{55,70,-6}, -{55,70,-5}, -{55,70,-4}, -{55,70,-3}, -{55,70,-2}, -{55,70,-1}, -{55,70,0}, -{55,70,1}, -{55,70,2}, -{55,70,3}, -{55,70,4}, -{55,70,5}, -{55,70,6}, -{55,70,7}, -{55,70,8}, -{55,70,9}, -{55,70,10}, -{55,70,11}, -{55,70,12}, -{55,70,13}, -{55,70,14}, -{55,70,15}, -{55,70,16}, -{55,70,17}, -{55,70,18}, -{55,70,19}, -{55,70,20}, -{55,70,21}, -{55,70,22}, -{55,70,23}, -{55,70,24}, -{55,70,25}, -{55,70,26}, -{55,70,27}, -{55,70,28}, -{55,70,29}, -{55,70,30}, -{55,70,31}, -{55,70,32}, -{55,70,33}, -{55,70,34}, -{55,70,35}, -{55,70,36}, -{55,70,37}, -{55,70,38}, -{55,70,39}, -{55,70,40}, -{55,70,41}, -{55,70,42}, -{55,70,43}, -{55,70,44}, -{55,70,45}, -{55,70,46}, -{55,70,47}, -{55,70,48}, -{55,70,49}, -{55,70,50}, -{55,70,51}, -{55,70,52}, -{55,70,53}, -{55,70,54}, -{55,70,55}, -{55,70,56}, -{55,70,57}, -{55,70,58}, -{55,70,59}, -{55,70,60}, -{55,70,61}, -{55,70,62}, -{55,70,63}, -{55,70,64}, -{55,70,65}, -{55,70,66}, -{55,70,67}, -{55,71,-70}, -{55,71,-69}, -{55,71,-68}, -{55,71,-67}, -{55,71,-66}, -{55,71,-65}, -{55,71,-64}, -{55,71,-63}, -{55,71,-62}, -{55,71,-61}, -{55,71,-60}, -{55,71,-59}, -{55,71,-58}, -{55,71,-57}, -{55,71,-56}, -{55,71,-55}, -{55,71,-54}, -{55,71,-53}, -{55,71,-52}, -{55,71,-51}, -{55,71,-50}, -{55,71,-49}, -{55,71,-48}, -{55,71,-47}, -{55,71,-46}, -{55,71,-45}, -{55,71,-44}, -{55,71,-43}, -{55,71,-42}, -{55,71,-41}, -{55,71,-40}, -{55,71,-39}, -{55,71,-38}, -{55,71,-37}, -{55,71,-36}, -{55,71,-35}, -{55,71,-34}, -{55,71,-33}, -{55,71,-32}, -{55,71,-31}, -{55,71,-30}, -{55,71,-29}, -{55,71,-28}, -{55,71,-27}, -{55,71,-26}, -{55,71,-25}, -{55,71,-24}, -{55,71,-23}, -{55,71,-22}, -{55,71,-21}, -{55,71,-20}, -{55,71,-19}, -{55,71,-18}, -{55,71,-17}, -{55,71,-16}, -{55,71,-15}, -{55,71,-14}, -{55,71,-13}, -{55,71,-12}, -{55,71,-11}, -{55,71,-10}, -{55,71,-9}, -{55,71,-8}, -{55,71,-7}, -{55,71,-6}, -{55,71,-5}, -{55,71,-4}, -{55,71,-3}, -{55,71,-2}, -{55,71,-1}, -{55,71,0}, -{55,71,1}, -{55,71,2}, -{55,71,3}, -{55,71,4}, -{55,71,5}, -{55,71,6}, -{55,71,7}, -{55,71,8}, -{55,71,9}, -{55,71,10}, -{55,71,11}, -{55,71,12}, -{55,71,13}, -{55,71,14}, -{55,71,15}, -{55,71,16}, -{55,71,17}, -{55,71,18}, -{55,71,19}, -{55,71,20}, -{55,71,21}, -{55,71,22}, -{55,71,23}, -{55,71,24}, -{55,71,25}, -{55,71,26}, -{55,71,27}, -{55,71,28}, -{55,71,29}, -{55,71,30}, -{55,71,31}, -{55,71,32}, -{55,71,33}, -{55,71,34}, -{55,71,35}, -{55,71,36}, -{55,71,37}, -{55,71,38}, -{55,71,39}, -{55,71,40}, -{55,71,41}, -{55,71,42}, -{55,71,43}, -{55,71,44}, -{55,71,45}, -{55,71,46}, -{55,71,47}, -{55,71,48}, -{55,71,49}, -{55,71,50}, -{55,71,51}, -{55,71,52}, -{55,71,53}, -{55,71,54}, -{55,71,55}, -{55,71,56}, -{55,71,57}, -{55,71,58}, -{55,71,59}, -{55,71,60}, -{55,71,61}, -{55,71,62}, -{55,71,63}, -{55,71,64}, -{55,71,65}, -{55,71,66}, -{55,71,67}, -{55,72,-70}, -{55,72,-69}, -{55,72,-68}, -{55,72,-67}, -{55,72,-66}, -{55,72,-65}, -{55,72,-64}, -{55,72,-63}, -{55,72,-62}, -{55,72,-61}, -{55,72,-60}, -{55,72,-59}, -{55,72,-58}, -{55,72,-57}, -{55,72,-56}, -{55,72,-55}, -{55,72,-54}, -{55,72,-53}, -{55,72,-52}, -{55,72,-51}, -{55,72,-50}, -{55,72,-49}, -{55,72,-48}, -{55,72,-47}, -{55,72,-46}, -{55,72,-45}, -{55,72,-44}, -{55,72,-43}, -{55,72,-42}, -{55,72,-41}, -{55,72,-40}, -{55,72,-39}, -{55,72,-38}, -{55,72,-37}, -{55,72,-36}, -{55,72,-35}, -{55,72,-34}, -{55,72,-33}, -{55,72,-32}, -{55,72,-31}, -{55,72,-30}, -{55,72,-29}, -{55,72,-28}, -{55,72,-27}, -{55,72,-26}, -{55,72,-25}, -{55,72,-24}, -{55,72,-23}, -{55,72,-22}, -{55,72,-21}, -{55,72,-20}, -{55,72,-19}, -{55,72,-18}, -{55,72,-17}, -{55,72,-16}, -{55,72,-15}, -{55,72,-14}, -{55,72,-13}, -{55,72,-12}, -{55,72,-11}, -{55,72,-10}, -{55,72,-9}, -{55,72,-8}, -{55,72,-7}, -{55,72,-6}, -{55,72,-5}, -{55,72,-4}, -{55,72,-3}, -{55,72,-2}, -{55,72,-1}, -{55,72,0}, -{55,72,1}, -{55,72,2}, -{55,72,3}, -{55,72,4}, -{55,72,5}, -{55,72,6}, -{55,72,7}, -{55,72,8}, -{55,72,9}, -{55,72,10}, -{55,72,11}, -{55,72,12}, -{55,72,13}, -{55,72,14}, -{55,72,15}, -{55,72,16}, -{55,72,17}, -{55,72,18}, -{55,72,19}, -{55,72,20}, -{55,72,21}, -{55,72,22}, -{55,72,23}, -{55,72,24}, -{55,72,25}, -{55,72,26}, -{55,72,27}, -{55,72,28}, -{55,72,29}, -{55,72,30}, -{55,72,31}, -{55,72,32}, -{55,72,33}, -{55,72,34}, -{55,72,35}, -{55,72,36}, -{55,72,37}, -{55,72,38}, -{55,72,39}, -{55,72,40}, -{55,72,41}, -{55,72,42}, -{55,72,43}, -{55,72,44}, -{55,72,45}, -{55,72,46}, -{55,72,47}, -{55,72,48}, -{55,72,49}, -{55,72,50}, -{55,72,51}, -{55,72,52}, -{55,72,53}, -{55,72,54}, -{55,72,55}, -{55,72,56}, -{55,72,57}, -{55,72,58}, -{55,72,59}, -{55,72,60}, -{55,72,61}, -{55,72,62}, -{55,72,63}, -{55,72,64}, -{55,72,65}, -{55,72,66}, -{55,72,67}, -{55,73,-70}, -{55,73,-69}, -{55,73,-68}, -{55,73,-67}, -{55,73,-66}, -{55,73,-65}, -{55,73,-64}, -{55,73,-63}, -{55,73,-62}, -{55,73,-61}, -{55,73,-60}, -{55,73,-59}, -{55,73,-58}, -{55,73,-57}, -{55,73,-56}, -{55,73,-55}, -{55,73,-54}, -{55,73,-53}, -{55,73,-52}, -{55,73,-51}, -{55,73,-50}, -{55,73,-49}, -{55,73,-48}, -{55,73,-47}, -{55,73,-46}, -{55,73,-45}, -{55,73,-44}, -{55,73,-43}, -{55,73,-42}, -{55,73,-41}, -{55,73,-40}, -{55,73,-39}, -{55,73,-38}, -{55,73,-37}, -{55,73,-36}, -{55,73,-35}, -{55,73,-34}, -{55,73,-33}, -{55,73,-32}, -{55,73,-31}, -{55,73,-30}, -{55,73,-29}, -{55,73,-28}, -{55,73,-27}, -{55,73,-26}, -{55,73,-25}, -{55,73,-24}, -{55,73,-23}, -{55,73,-22}, -{55,73,-21}, -{55,73,-20}, -{55,73,-19}, -{55,73,-18}, -{55,73,-17}, -{55,73,-16}, -{55,73,-15}, -{55,73,-14}, -{55,73,-13}, -{55,73,-12}, -{55,73,-11}, -{55,73,-10}, -{55,73,-9}, -{55,73,-8}, -{55,73,-7}, -{55,73,-6}, -{55,73,-5}, -{55,73,-4}, -{55,73,-3}, -{55,73,-2}, -{55,73,-1}, -{55,73,0}, -{55,73,1}, -{55,73,2}, -{55,73,3}, -{55,73,4}, -{55,73,5}, -{55,73,6}, -{55,73,7}, -{55,73,8}, -{55,73,9}, -{55,73,10}, -{55,73,11}, -{55,73,12}, -{55,73,13}, -{55,73,14}, -{55,73,15}, -{55,73,16}, -{55,73,17}, -{55,73,18}, -{55,73,19}, -{55,73,20}, -{55,73,21}, -{55,73,22}, -{55,73,23}, -{55,73,24}, -{55,73,25}, -{55,73,26}, -{55,73,27}, -{55,73,28}, -{55,73,29}, -{55,73,30}, -{55,73,31}, -{55,73,32}, -{55,73,33}, -{55,73,34}, -{55,73,35}, -{55,73,36}, -{55,73,37}, -{55,73,38}, -{55,73,39}, -{55,73,40}, -{55,73,41}, -{55,73,42}, -{55,73,43}, -{55,73,44}, -{55,73,45}, -{55,73,46}, -{55,73,47}, -{55,73,48}, -{55,73,49}, -{55,73,50}, -{55,73,51}, -{55,73,52}, -{55,73,53}, -{55,73,54}, -{55,73,55}, -{55,73,56}, -{55,73,57}, -{55,73,58}, -{55,73,59}, -{55,73,60}, -{55,73,61}, -{55,73,62}, -{55,73,63}, -{55,73,64}, -{55,73,65}, -{55,73,66}, -{55,73,67}, -{55,74,-70}, -{55,74,-69}, -{55,74,-68}, -{55,74,-67}, -{55,74,-66}, -{55,74,-65}, -{55,74,-64}, -{55,74,-63}, -{55,74,-62}, -{55,74,-61}, -{55,74,-60}, -{55,74,-59}, -{55,74,-58}, -{55,74,-57}, -{55,74,-56}, -{55,74,-55}, -{55,74,-54}, -{55,74,-53}, -{55,74,-52}, -{55,74,-51}, -{55,74,-50}, -{55,74,-49}, -{55,74,-48}, -{55,74,-47}, -{55,74,-46}, -{55,74,-45}, -{55,74,-44}, -{55,74,-43}, -{55,74,-42}, -{55,74,-41}, -{55,74,-40}, -{55,74,-39}, -{55,74,-38}, -{55,74,-37}, -{55,74,-36}, -{55,74,-35}, -{55,74,-34}, -{55,74,-33}, -{55,74,-32}, -{55,74,-31}, -{55,74,-30}, -{55,74,-29}, -{55,74,-28}, -{55,74,-27}, -{55,74,-26}, -{55,74,-25}, -{55,74,-24}, -{55,74,-23}, -{55,74,-22}, -{55,74,-21}, -{55,74,-20}, -{55,74,-19}, -{55,74,-18}, -{55,74,-17}, -{55,74,-16}, -{55,74,-15}, -{55,74,-14}, -{55,74,-13}, -{55,74,-12}, -{55,74,-11}, -{55,74,-10}, -{55,74,-9}, -{55,74,-8}, -{55,74,-7}, -{55,74,-6}, -{55,74,-5}, -{55,74,-4}, -{55,74,-3}, -{55,74,-2}, -{55,74,-1}, -{55,74,0}, -{55,74,1}, -{55,74,2}, -{55,74,3}, -{55,74,4}, -{55,74,5}, -{55,74,6}, -{55,74,7}, -{55,74,8}, -{55,74,9}, -{55,74,10}, -{55,74,11}, -{55,74,12}, -{55,74,13}, -{55,74,14}, -{55,74,15}, -{55,74,16}, -{55,74,17}, -{55,74,18}, -{55,74,19}, -{55,74,20}, -{55,74,21}, -{55,74,22}, -{55,74,23}, -{55,74,24}, -{55,74,25}, -{55,74,26}, -{55,74,27}, -{55,74,28}, -{55,74,29}, -{55,74,30}, -{55,74,31}, -{55,74,32}, -{55,74,33}, -{55,74,34}, -{55,74,35}, -{55,74,36}, -{55,74,37}, -{55,74,38}, -{55,74,39}, -{55,74,40}, -{55,74,41}, -{55,74,42}, -{55,74,43}, -{55,74,44}, -{55,74,45}, -{55,74,46}, -{55,74,47}, -{55,74,48}, -{55,74,49}, -{55,74,50}, -{55,74,51}, -{55,74,52}, -{55,74,53}, -{55,74,54}, -{55,74,55}, -{55,74,56}, -{55,74,57}, -{55,74,58}, -{55,74,59}, -{55,74,60}, -{55,74,61}, -{55,74,62}, -{55,74,63}, -{55,74,64}, -{55,74,65}, -{55,74,66}, -{55,74,67}, -{55,75,-70}, -{55,75,-69}, -{55,75,-68}, -{55,75,-67}, -{55,75,-66}, -{55,75,-65}, -{55,75,-64}, -{55,75,-63}, -{55,75,-62}, -{55,75,-61}, -{55,75,-60}, -{55,75,-59}, -{55,75,-58}, -{55,75,-57}, -{55,75,-56}, -{55,75,-55}, -{55,75,-54}, -{55,75,-53}, -{55,75,-52}, -{55,75,-51}, -{55,75,-50}, -{55,75,-49}, -{55,75,-48}, -{55,75,-47}, -{55,75,-46}, -{55,75,-45}, -{55,75,-44}, -{55,75,-43}, -{55,75,-42}, -{55,75,-41}, -{55,75,-40}, -{55,75,-39}, -{55,75,-38}, -{55,75,-37}, -{55,75,-36}, -{55,75,-35}, -{55,75,-34}, -{55,75,-33}, -{55,75,-32}, -{55,75,-31}, -{55,75,-30}, -{55,75,-29}, -{55,75,-28}, -{55,75,-27}, -{55,75,-26}, -{55,75,-25}, -{55,75,-24}, -{55,75,-23}, -{55,75,-22}, -{55,75,-21}, -{55,75,-20}, -{55,75,-19}, -{55,75,-18}, -{55,75,-17}, -{55,75,-16}, -{55,75,-15}, -{55,75,-14}, -{55,75,-13}, -{55,75,-12}, -{55,75,-11}, -{55,75,-10}, -{55,75,-9}, -{55,75,-8}, -{55,75,-7}, -{55,75,-6}, -{55,75,-5}, -{55,75,-4}, -{55,75,-3}, -{55,75,-2}, -{55,75,-1}, -{55,75,0}, -{55,75,1}, -{55,75,2}, -{55,75,3}, -{55,75,4}, -{55,75,5}, -{55,75,6}, -{55,75,7}, -{55,75,8}, -{55,75,9}, -{55,75,10}, -{55,75,11}, -{55,75,12}, -{55,75,13}, -{55,75,14}, -{55,75,15}, -{55,75,16}, -{55,75,17}, -{55,75,18}, -{55,75,19}, -{55,75,20}, -{55,75,21}, -{55,75,22}, -{55,75,23}, -{55,75,24}, -{55,75,25}, -{55,75,26}, -{55,75,27}, -{55,75,28}, -{55,75,29}, -{55,75,30}, -{55,75,31}, -{55,75,32}, -{55,75,33}, -{55,75,34}, -{55,75,35}, -{55,75,36}, -{55,75,37}, -{55,75,38}, -{55,75,39}, -{55,75,40}, -{55,75,41}, -{55,75,42}, -{55,75,43}, -{55,75,44}, -{55,75,45}, -{55,75,46}, -{55,75,47}, -{55,75,48}, -{55,75,49}, -{55,75,50}, -{55,75,51}, -{55,75,52}, -{55,75,53}, -{55,75,54}, -{55,75,55}, -{55,75,56}, -{55,75,57}, -{55,75,58}, -{55,75,59}, -{55,75,60}, -{55,75,61}, -{55,75,62}, -{55,75,63}, -{55,75,64}, -{55,75,65}, -{55,75,66}, -{55,75,67}, -{55,75,68}, -{55,76,-70}, -{55,76,-69}, -{55,76,-68}, -{55,76,-67}, -{55,76,-66}, -{55,76,-65}, -{55,76,-64}, -{55,76,-63}, -{55,76,-62}, -{55,76,-61}, -{55,76,-60}, -{55,76,-59}, -{55,76,-58}, -{55,76,-57}, -{55,76,-56}, -{55,76,-55}, -{55,76,-54}, -{55,76,-53}, -{55,76,-52}, -{55,76,-51}, -{55,76,-50}, -{55,76,-49}, -{55,76,-48}, -{55,76,-47}, -{55,76,-46}, -{55,76,-45}, -{55,76,-44}, -{55,76,-43}, -{55,76,-42}, -{55,76,-41}, -{55,76,-40}, -{55,76,-39}, -{55,76,-38}, -{55,76,-37}, -{55,76,-36}, -{55,76,-35}, -{55,76,-34}, -{55,76,-33}, -{55,76,-32}, -{55,76,-31}, -{55,76,-30}, -{55,76,-29}, -{55,76,-28}, -{55,76,-27}, -{55,76,-26}, -{55,76,-25}, -{55,76,-24}, -{55,76,-23}, -{55,76,-22}, -{55,76,-21}, -{55,76,-20}, -{55,76,-19}, -{55,76,-18}, -{55,76,-17}, -{55,76,-16}, -{55,76,-15}, -{55,76,-14}, -{55,76,-13}, -{55,76,-12}, -{55,76,-11}, -{55,76,-10}, -{55,76,-9}, -{55,76,-8}, -{55,76,-7}, -{55,76,-6}, -{55,76,-5}, -{55,76,-4}, -{55,76,-3}, -{55,76,-2}, -{55,76,-1}, -{55,76,0}, -{55,76,1}, -{55,76,2}, -{55,76,3}, -{55,76,4}, -{55,76,5}, -{55,76,6}, -{55,76,7}, -{55,76,8}, -{55,76,9}, -{55,76,10}, -{55,76,11}, -{55,76,12}, -{55,76,13}, -{55,76,14}, -{55,76,15}, -{55,76,16}, -{55,76,17}, -{55,76,18}, -{55,76,19}, -{55,76,20}, -{55,76,21}, -{55,76,22}, -{55,76,23}, -{55,76,24}, -{55,76,25}, -{55,76,26}, -{55,76,27}, -{55,76,28}, -{55,76,29}, -{55,76,30}, -{55,76,31}, -{55,76,32}, -{55,76,33}, -{55,76,34}, -{55,76,35}, -{55,76,36}, -{55,76,37}, -{55,76,38}, -{55,76,39}, -{55,76,40}, -{55,76,41}, -{55,76,42}, -{55,76,43}, -{55,76,44}, -{55,76,45}, -{55,76,46}, -{55,76,47}, -{55,76,48}, -{55,76,49}, -{55,76,50}, -{55,76,51}, -{55,76,52}, -{55,76,53}, -{55,76,54}, -{55,76,55}, -{55,76,56}, -{55,76,57}, -{55,77,-70}, -{55,77,-69}, -{55,77,-68}, -{55,77,-67}, -{55,77,-66}, -{55,77,-65}, -{55,77,-64}, -{55,77,-63}, -{55,77,-62}, -{55,77,-61}, -{55,77,-60}, -{55,77,-59}, -{55,77,-58}, -{55,77,-57}, -{55,77,-56}, -{55,77,-55}, -{55,77,-54}, -{55,77,-53}, -{55,77,-52}, -{55,77,-51}, -{55,77,-50}, -{55,77,-49}, -{55,77,-48}, -{55,77,-47}, -{55,77,-46}, -{55,77,-45}, -{55,77,-44}, -{55,77,-43}, -{55,77,-42}, -{55,77,-41}, -{55,77,-40}, -{55,77,-39}, -{55,77,-38}, -{55,77,-37}, -{55,77,-36}, -{55,77,-35}, -{55,77,-34}, -{55,77,-33}, -{55,77,-32}, -{55,77,-31}, -{55,77,-30}, -{55,77,-29}, -{55,77,-28}, -{55,77,-27}, -{55,77,-26}, -{55,77,-25}, -{55,77,-24}, -{55,77,-23}, -{55,77,-22}, -{55,77,-21}, -{55,77,-20}, -{55,77,-19}, -{55,77,-18}, -{55,77,-17}, -{55,77,-16}, -{55,77,-15}, -{55,77,-14}, -{55,77,-13}, -{55,77,-12}, -{55,77,-11}, -{55,77,-10}, -{55,77,-9}, -{55,77,-8}, -{55,77,-7}, -{55,77,-6}, -{55,77,-5}, -{55,77,-4}, -{55,77,-3}, -{55,77,-2}, -{55,77,-1}, -{55,77,0}, -{55,77,1}, -{55,77,2}, -{55,77,3}, -{55,77,4}, -{55,77,5}, -{55,77,6}, -{55,77,7}, -{55,77,8}, -{55,77,9}, -{55,77,10}, -{55,77,11}, -{55,77,12}, -{55,77,13}, -{55,77,14}, -{55,77,15}, -{55,77,16}, -{55,77,17}, -{55,77,18}, -{55,77,19}, -{55,77,20}, -{55,77,21}, -{55,77,22}, -{55,77,23}, -{55,77,24}, -{55,77,25}, -{55,77,26}, -{55,77,27}, -{55,77,28}, -{55,77,29}, -{55,77,30}, -{55,77,31}, -{55,77,32}, -{55,77,33}, -{55,77,34}, -{55,77,35}, -{55,77,36}, -{55,77,37}, -{55,77,38}, -{55,77,39}, -{55,77,40}, -{55,77,41}, -{55,77,42}, -{55,77,43}, -{55,77,44}, -{55,77,45}, -{55,77,46}, -{55,78,-70}, -{55,78,-69}, -{55,78,-68}, -{55,78,-67}, -{55,78,-66}, -{55,78,-65}, -{55,78,-64}, -{55,78,-63}, -{55,78,-62}, -{55,78,-61}, -{55,78,-60}, -{55,78,-59}, -{55,78,-58}, -{55,78,-57}, -{55,78,-56}, -{55,78,-55}, -{55,78,-54}, -{55,78,-53}, -{55,78,-52}, -{55,78,-51}, -{55,78,-50}, -{55,78,-49}, -{55,78,-48}, -{55,78,-47}, -{55,78,-46}, -{55,78,-45}, -{55,78,-44}, -{55,78,-43}, -{55,78,-42}, -{55,78,-41}, -{55,78,-40}, -{55,78,-39}, -{55,78,-38}, -{55,78,-37}, -{55,78,-36}, -{55,78,-35}, -{55,78,-34}, -{55,78,-33}, -{55,78,-32}, -{55,78,-31}, -{55,78,-30}, -{55,78,-29}, -{55,78,-28}, -{55,78,-27}, -{55,78,-26}, -{55,78,-25}, -{55,78,-24}, -{55,78,-23}, -{55,78,-22}, -{55,78,-21}, -{55,78,-20}, -{55,78,-19}, -{55,78,-18}, -{55,78,-17}, -{55,78,-16}, -{55,78,-15}, -{55,78,-14}, -{55,78,-13}, -{55,78,-12}, -{55,78,-11}, -{55,78,-10}, -{55,78,-9}, -{55,78,-8}, -{55,78,-7}, -{55,78,-6}, -{55,78,-5}, -{55,78,-4}, -{55,78,-3}, -{55,78,-2}, -{55,78,-1}, -{55,78,0}, -{55,78,1}, -{55,78,2}, -{55,78,3}, -{55,78,4}, -{55,78,5}, -{55,78,6}, -{55,78,7}, -{55,78,8}, -{55,78,9}, -{55,78,10}, -{55,78,11}, -{55,78,12}, -{55,78,13}, -{55,78,14}, -{55,78,15}, -{55,78,16}, -{55,78,17}, -{55,78,18}, -{55,78,19}, -{55,78,20}, -{55,78,21}, -{55,78,22}, -{55,78,23}, -{55,78,24}, -{55,78,25}, -{55,78,26}, -{55,78,27}, -{55,78,28}, -{55,78,29}, -{55,78,30}, -{55,78,31}, -{55,78,32}, -{55,78,33}, -{55,78,34}, -{55,78,35}, -{55,78,36}, -{55,78,37}, -{55,78,38}, -{55,79,-70}, -{55,79,-69}, -{55,79,-68}, -{55,79,-67}, -{55,79,-66}, -{55,79,-65}, -{55,79,-64}, -{55,79,-63}, -{55,79,-62}, -{55,79,-61}, -{55,79,-60}, -{55,79,-59}, -{55,79,-58}, -{55,79,-57}, -{55,79,-56}, -{55,79,-55}, -{55,79,-54}, -{55,79,-53}, -{55,79,-52}, -{55,79,-51}, -{55,79,-50}, -{55,79,-49}, -{55,79,-48}, -{55,79,-47}, -{55,79,-46}, -{55,79,-45}, -{55,79,-44}, -{55,79,-43}, -{55,79,-42}, -{55,79,-41}, -{55,79,-40}, -{55,79,-39}, -{55,79,-38}, -{55,79,-37}, -{55,79,-36}, -{55,79,-35}, -{55,79,-34}, -{55,79,-33}, -{55,79,-32}, -{55,79,-31}, -{55,79,-30}, -{55,79,-29}, -{55,79,-28}, -{55,79,-27}, -{55,79,-26}, -{55,79,-25}, -{55,79,-24}, -{55,79,-23}, -{55,79,-22}, -{55,79,-21}, -{55,79,-20}, -{55,79,-19}, -{55,79,-18}, -{55,79,-17}, -{55,79,-16}, -{55,79,-15}, -{55,79,-14}, -{55,79,-13}, -{55,79,-12}, -{55,79,-11}, -{55,79,-10}, -{55,79,-9}, -{55,79,-8}, -{55,79,-7}, -{55,79,-6}, -{55,79,-5}, -{55,79,-4}, -{55,79,-3}, -{55,79,-2}, -{55,79,-1}, -{55,79,0}, -{55,79,1}, -{55,79,2}, -{55,79,3}, -{55,79,4}, -{55,79,5}, -{55,79,6}, -{55,79,7}, -{55,79,8}, -{55,79,9}, -{55,79,10}, -{55,79,11}, -{55,79,12}, -{55,79,13}, -{55,79,14}, -{55,79,15}, -{55,79,16}, -{55,79,17}, -{55,79,18}, -{55,79,19}, -{55,79,20}, -{55,79,21}, -{55,79,22}, -{55,79,23}, -{55,79,24}, -{55,79,25}, -{55,79,26}, -{55,79,27}, -{55,79,28}, -{55,79,29}, -{55,79,30}, -{55,79,31}, -{55,80,-70}, -{55,80,-69}, -{55,80,-68}, -{55,80,-67}, -{55,80,-66}, -{55,80,-65}, -{55,80,-64}, -{55,80,-63}, -{55,80,-62}, -{55,80,-61}, -{55,80,-60}, -{55,80,-59}, -{55,80,-58}, -{55,80,-57}, -{55,80,-56}, -{55,80,-55}, -{55,80,-54}, -{55,80,-53}, -{55,80,-52}, -{55,80,-51}, -{55,80,-50}, -{55,80,-49}, -{55,80,-48}, -{55,80,-47}, -{55,80,-46}, -{55,80,-45}, -{55,80,-44}, -{55,80,-43}, -{55,80,-42}, -{55,80,-41}, -{55,80,-40}, -{55,80,-39}, -{55,80,-38}, -{55,80,-37}, -{55,80,-36}, -{55,80,-35}, -{55,80,-34}, -{55,80,-33}, -{55,80,-32}, -{55,80,-31}, -{55,80,-30}, -{55,80,-29}, -{55,80,-28}, -{55,80,-27}, -{55,80,-26}, -{55,80,-25}, -{55,80,-24}, -{55,80,-23}, -{55,80,-22}, -{55,80,-21}, -{55,80,-20}, -{55,80,-19}, -{55,80,-18}, -{55,80,-17}, -{55,80,-16}, -{55,80,-15}, -{55,80,-14}, -{55,80,-13}, -{55,80,-12}, -{55,80,-11}, -{55,80,-10}, -{55,80,-9}, -{55,80,-8}, -{55,80,-7}, -{55,80,-6}, -{55,80,-5}, -{55,80,-4}, -{55,80,-3}, -{55,80,-2}, -{55,80,-1}, -{55,80,0}, -{55,80,1}, -{55,80,2}, -{55,80,3}, -{55,80,4}, -{55,80,5}, -{55,80,6}, -{55,80,7}, -{55,80,8}, -{55,80,9}, -{55,80,10}, -{55,80,11}, -{55,80,12}, -{55,80,13}, -{55,80,14}, -{55,80,15}, -{55,80,16}, -{55,80,17}, -{55,80,18}, -{55,80,19}, -{55,80,20}, -{55,80,21}, -{55,80,22}, -{55,80,23}, -{55,80,24}, -{55,80,25}, -{55,81,-69}, -{55,81,-68}, -{55,81,-67}, -{55,81,-66}, -{55,81,-65}, -{55,81,-64}, -{55,81,-63}, -{55,81,-62}, -{55,81,-61}, -{55,81,-60}, -{55,81,-59}, -{55,81,-58}, -{55,81,-57}, -{55,81,-56}, -{55,81,-55}, -{55,81,-54}, -{55,81,-53}, -{55,81,-52}, -{55,81,-51}, -{55,81,-50}, -{55,81,-49}, -{55,81,-48}, -{55,81,-47}, -{55,81,-46}, -{55,81,-45}, -{55,81,-44}, -{55,81,-43}, -{55,81,-42}, -{55,81,-41}, -{55,81,-40}, -{55,81,-39}, -{55,81,-38}, -{55,81,-37}, -{55,81,-36}, -{55,81,-35}, -{55,81,-34}, -{55,81,-33}, -{55,81,-32}, -{55,81,-31}, -{55,81,-30}, -{55,81,-29}, -{55,81,-28}, -{55,81,-27}, -{55,81,-26}, -{55,81,-25}, -{55,81,-24}, -{55,81,-23}, -{55,81,-22}, -{55,81,-21}, -{55,81,-20}, -{55,81,-19}, -{55,81,-18}, -{55,81,-17}, -{55,81,-16}, -{55,81,-15}, -{55,81,-14}, -{55,81,-13}, -{55,81,-12}, -{55,81,-11}, -{55,81,-10}, -{55,81,-9}, -{55,81,-8}, -{55,81,-7}, -{55,81,-6}, -{55,81,-5}, -{55,81,-4}, -{55,81,-3}, -{55,81,-2}, -{55,81,-1}, -{55,81,0}, -{55,81,1}, -{55,81,2}, -{55,81,3}, -{55,81,4}, -{55,81,5}, -{55,81,6}, -{55,81,7}, -{55,81,8}, -{55,81,9}, -{55,81,10}, -{55,81,11}, -{55,81,12}, -{55,81,13}, -{55,81,14}, -{55,81,15}, -{55,81,16}, -{55,81,17}, -{55,81,18}, -{55,81,19}, -{55,82,-69}, -{55,82,-68}, -{55,82,-67}, -{55,82,-66}, -{55,82,-65}, -{55,82,-64}, -{55,82,-63}, -{55,82,-62}, -{55,82,-61}, -{55,82,-60}, -{55,82,-59}, -{55,82,-58}, -{55,82,-57}, -{55,82,-56}, -{55,82,-55}, -{55,82,-54}, -{55,82,-53}, -{55,82,-52}, -{55,82,-51}, -{55,82,-50}, -{55,82,-49}, -{55,82,-48}, -{55,82,-47}, -{55,82,-46}, -{55,82,-45}, -{55,82,-44}, -{55,82,-43}, -{55,82,-42}, -{55,82,-41}, -{55,82,-40}, -{55,82,-39}, -{55,82,-38}, -{55,82,-37}, -{55,82,-36}, -{55,82,-35}, -{55,82,-34}, -{55,82,-33}, -{55,82,-32}, -{55,82,-31}, -{55,82,-30}, -{55,82,-29}, -{55,82,-28}, -{55,82,-27}, -{55,82,-26}, -{55,82,-25}, -{55,82,-24}, -{55,82,-23}, -{55,82,-22}, -{55,82,-21}, -{55,82,-20}, -{55,82,-19}, -{55,82,-18}, -{55,82,-17}, -{55,82,-16}, -{55,82,-15}, -{55,82,-14}, -{55,82,-13}, -{55,82,-12}, -{55,82,-11}, -{55,82,-10}, -{55,82,-9}, -{55,82,-8}, -{55,82,-7}, -{55,82,-6}, -{55,82,-5}, -{55,82,-4}, -{55,82,-3}, -{55,82,-2}, -{55,82,-1}, -{55,82,0}, -{55,82,1}, -{55,82,2}, -{55,82,3}, -{55,82,4}, -{55,82,5}, -{55,82,6}, -{55,82,7}, -{55,82,8}, -{55,82,9}, -{55,82,10}, -{55,82,11}, -{55,82,12}, -{55,82,13}, -{55,82,14}, -{55,83,-69}, -{55,83,-68}, -{55,83,-67}, -{55,83,-66}, -{55,83,-65}, -{55,83,-64}, -{55,83,-63}, -{55,83,-62}, -{55,83,-61}, -{55,83,-60}, -{55,83,-59}, -{55,83,-58}, -{55,83,-57}, -{55,83,-56}, -{55,83,-55}, -{55,83,-54}, -{55,83,-53}, -{55,83,-52}, -{55,83,-51}, -{55,83,-50}, -{55,83,-49}, -{55,83,-48}, -{55,83,-47}, -{55,83,-46}, -{55,83,-45}, -{55,83,-44}, -{55,83,-43}, -{55,83,-42}, -{55,83,-41}, -{55,83,-40}, -{55,83,-39}, -{55,83,-38}, -{55,83,-37}, -{55,83,-36}, -{55,83,-35}, -{55,83,-34}, -{55,83,-33}, -{55,83,-32}, -{55,83,-31}, -{55,83,-30}, -{55,83,-29}, -{55,83,-28}, -{55,83,-27}, -{55,83,-26}, -{55,83,-25}, -{55,83,-24}, -{55,83,-23}, -{55,83,-22}, -{55,83,-21}, -{55,83,-20}, -{55,83,-19}, -{55,83,-18}, -{55,83,-17}, -{55,83,-16}, -{55,83,-15}, -{55,83,-14}, -{55,83,-13}, -{55,83,-12}, -{55,83,-11}, -{55,83,-10}, -{55,83,-9}, -{55,83,-8}, -{55,83,-7}, -{55,83,-6}, -{55,83,-5}, -{55,83,-4}, -{55,83,-3}, -{55,83,-2}, -{55,83,-1}, -{55,83,0}, -{55,83,1}, -{55,83,2}, -{55,83,3}, -{55,83,4}, -{55,83,5}, -{55,83,6}, -{55,83,7}, -{55,83,8}, -{55,83,9}, -{55,83,10}, -{55,84,-69}, -{55,84,-68}, -{55,84,-67}, -{55,84,-66}, -{55,84,-65}, -{55,84,-64}, -{55,84,-63}, -{55,84,-62}, -{55,84,-61}, -{55,84,-60}, -{55,84,-59}, -{55,84,-58}, -{55,84,-57}, -{55,84,-56}, -{55,84,-55}, -{55,84,-54}, -{55,84,-53}, -{55,84,-52}, -{55,84,-51}, -{55,84,-50}, -{55,84,-49}, -{55,84,-48}, -{55,84,-47}, -{55,84,-46}, -{55,84,-45}, -{55,84,-44}, -{55,84,-43}, -{55,84,-42}, -{55,84,-41}, -{55,84,-40}, -{55,84,-39}, -{55,84,-38}, -{55,84,-37}, -{55,84,-36}, -{55,84,-35}, -{55,84,-34}, -{55,84,-33}, -{55,84,-32}, -{55,84,-31}, -{55,84,-30}, -{55,84,-29}, -{55,84,-28}, -{55,84,-27}, -{55,84,-26}, -{55,84,-25}, -{55,84,-24}, -{55,84,-23}, -{55,84,-22}, -{55,84,-21}, -{55,84,-20}, -{55,84,-19}, -{55,84,-18}, -{55,84,-17}, -{55,84,-16}, -{55,84,-15}, -{55,84,-14}, -{55,84,-13}, -{55,84,-12}, -{55,84,-11}, -{55,84,-10}, -{55,84,-9}, -{55,84,-8}, -{55,84,-7}, -{55,84,-6}, -{55,84,-5}, -{55,84,-4}, -{55,84,-3}, -{55,84,-2}, -{55,84,-1}, -{55,84,0}, -{55,84,1}, -{55,84,2}, -{55,84,3}, -{55,84,4}, -{55,84,5}, -{55,85,-69}, -{55,85,-68}, -{55,85,-67}, -{55,85,-66}, -{55,85,-65}, -{55,85,-64}, -{55,85,-63}, -{55,85,-62}, -{55,85,-61}, -{55,85,-60}, -{55,85,-59}, -{55,85,-58}, -{55,85,-57}, -{55,85,-56}, -{55,85,-55}, -{55,85,-54}, -{55,85,-53}, -{55,85,-52}, -{55,85,-51}, -{55,85,-50}, -{55,85,-49}, -{55,85,-48}, -{55,85,-47}, -{55,85,-46}, -{55,85,-45}, -{55,85,-44}, -{55,85,-43}, -{55,85,-42}, -{55,85,-41}, -{55,85,-40}, -{55,85,-39}, -{55,85,-38}, -{55,85,-37}, -{55,85,-36}, -{55,85,-35}, -{55,85,-34}, -{55,85,-33}, -{55,85,-32}, -{55,85,-31}, -{55,85,-30}, -{55,85,-29}, -{55,85,-28}, -{55,85,-27}, -{55,85,-26}, -{55,85,-25}, -{55,85,-24}, -{55,85,-23}, -{55,85,-22}, -{55,85,-21}, -{55,85,-20}, -{55,85,-19}, -{55,85,-18}, -{55,85,-17}, -{55,85,-16}, -{55,85,-15}, -{55,85,-14}, -{55,85,-13}, -{55,85,-12}, -{55,85,-11}, -{55,85,-10}, -{55,85,-9}, -{55,85,-8}, -{55,85,-7}, -{55,85,-6}, -{55,85,-5}, -{55,85,-4}, -{55,85,-3}, -{55,85,-2}, -{55,85,-1}, -{55,85,0}, -{55,85,1}, -{55,86,-69}, -{55,86,-68}, -{55,86,-67}, -{55,86,-66}, -{55,86,-65}, -{55,86,-64}, -{55,86,-63}, -{55,86,-62}, -{55,86,-61}, -{55,86,-60}, -{55,86,-59}, -{55,86,-58}, -{55,86,-57}, -{55,86,-56}, -{55,86,-55}, -{55,86,-54}, -{55,86,-53}, -{55,86,-52}, -{55,86,-51}, -{55,86,-50}, -{55,86,-49}, -{55,86,-48}, -{55,86,-47}, -{55,86,-46}, -{55,86,-45}, -{55,86,-44}, -{55,86,-43}, -{55,86,-42}, -{55,86,-41}, -{55,86,-40}, -{55,86,-39}, -{55,86,-38}, -{55,86,-37}, -{55,86,-36}, -{55,86,-35}, -{55,86,-34}, -{55,86,-33}, -{55,86,-32}, -{55,86,-31}, -{55,86,-30}, -{55,86,-29}, -{55,86,-28}, -{55,86,-27}, -{55,86,-26}, -{55,86,-25}, -{55,86,-24}, -{55,86,-23}, -{55,86,-22}, -{55,86,-21}, -{55,86,-20}, -{55,86,-19}, -{55,86,-18}, -{55,86,-17}, -{55,86,-16}, -{55,86,-15}, -{55,86,-14}, -{55,86,-13}, -{55,86,-12}, -{55,86,-11}, -{55,87,-69}, -{55,87,-68}, -{55,87,-67}, -{55,87,-66}, -{55,87,-65}, -{55,87,-64}, -{55,87,-63}, -{55,87,-62}, -{55,87,-61}, -{55,87,-60}, -{55,87,-59}, -{55,87,-58}, -{55,87,-57}, -{55,87,-56}, -{55,87,-55}, -{55,87,-54}, -{55,87,-53}, -{55,87,-52}, -{55,87,-51}, -{55,87,-50}, -{55,87,-49}, -{55,87,-48}, -{55,87,-47}, -{55,87,-46}, -{55,87,-45}, -{55,87,-44}, -{55,87,-43}, -{55,87,-42}, -{55,87,-41}, -{55,87,-40}, -{55,87,-39}, -{55,87,-38}, -{55,87,-37}, -{55,87,-36}, -{55,87,-35}, -{55,87,-34}, -{55,87,-33}, -{55,87,-32}, -{55,87,-31}, -{55,87,-30}, -{55,87,-29}, -{55,87,-28}, -{55,87,-27}, -{55,87,-26}, -{55,87,-25}, -{55,87,-24}, -{55,87,-23}, -{55,87,-22}, -{55,88,-69}, -{55,88,-68}, -{55,88,-67}, -{55,88,-66}, -{55,88,-65}, -{55,88,-64}, -{55,88,-63}, -{55,88,-62}, -{55,88,-61}, -{55,88,-60}, -{55,88,-59}, -{55,88,-58}, -{55,88,-57}, -{55,88,-56}, -{55,88,-55}, -{55,88,-54}, -{55,88,-53}, -{55,88,-52}, -{55,88,-51}, -{55,88,-50}, -{55,88,-49}, -{55,88,-48}, -{55,88,-47}, -{55,88,-46}, -{55,88,-45}, -{55,88,-44}, -{55,88,-43}, -{55,88,-42}, -{55,88,-41}, -{55,88,-40}, -{55,88,-39}, -{55,88,-38}, -{55,88,-37}, -{55,88,-36}, -{55,88,-35}, -{55,88,-34}, -{55,88,-33}, -{55,88,-32}, -{55,88,-31}, -{55,89,-69}, -{55,89,-68}, -{55,89,-67}, -{55,89,-66}, -{55,89,-65}, -{55,89,-64}, -{55,89,-63}, -{55,89,-62}, -{55,89,-61}, -{55,89,-60}, -{55,89,-59}, -{55,89,-58}, -{55,89,-57}, -{55,89,-56}, -{55,89,-55}, -{55,89,-54}, -{55,89,-53}, -{55,89,-52}, -{55,89,-51}, -{55,89,-50}, -{55,89,-49}, -{55,89,-48}, -{55,89,-47}, -{55,89,-46}, -{55,89,-45}, -{55,89,-44}, -{55,89,-43}, -{55,89,-42}, -{55,89,-41}, -{55,89,-40}, -{55,89,-39}, -{55,90,-69}, -{55,90,-68}, -{55,90,-67}, -{55,90,-66}, -{55,90,-65}, -{55,90,-64}, -{55,90,-63}, -{55,90,-62}, -{55,90,-61}, -{55,90,-60}, -{55,90,-59}, -{55,90,-58}, -{55,90,-57}, -{55,90,-56}, -{55,90,-55}, -{55,90,-54}, -{55,90,-53}, -{55,90,-52}, -{55,90,-51}, -{55,90,-50}, -{55,90,-49}, -{55,90,-48}, -{55,90,-47}, -{55,91,-69}, -{55,91,-68}, -{55,91,-67}, -{55,91,-66}, -{55,91,-65}, -{55,91,-64}, -{55,91,-63}, -{55,91,-62}, -{55,91,-61}, -{55,91,-60}, -{55,91,-59}, -{55,91,-58}, -{55,91,-57}, -{55,91,-56}, -{55,91,-55}, -{55,91,-54}, -{55,92,-69}, -{55,92,-68}, -{55,92,-67}, -{55,92,-66}, -{55,92,-65}, -{55,92,-64}, -{55,92,-63}, -{55,92,-62}, -{55,92,-61}, -{55,92,-60}, -{55,93,-69}, -{55,93,-68}, -{55,93,-67}, -{55,93,-66}, -{56,-59,53}, -{56,-59,54}, -{56,-59,55}, -{56,-59,56}, -{56,-59,57}, -{56,-58,49}, -{56,-58,50}, -{56,-58,51}, -{56,-58,52}, -{56,-58,53}, -{56,-58,54}, -{56,-58,55}, -{56,-58,56}, -{56,-58,57}, -{56,-57,45}, -{56,-57,46}, -{56,-57,47}, -{56,-57,48}, -{56,-57,49}, -{56,-57,50}, -{56,-57,51}, -{56,-57,52}, -{56,-57,53}, -{56,-57,54}, -{56,-57,55}, -{56,-57,56}, -{56,-57,57}, -{56,-57,58}, -{56,-56,42}, -{56,-56,43}, -{56,-56,44}, -{56,-56,45}, -{56,-56,46}, -{56,-56,47}, -{56,-56,48}, -{56,-56,49}, -{56,-56,50}, -{56,-56,51}, -{56,-56,52}, -{56,-56,53}, -{56,-56,54}, -{56,-56,55}, -{56,-56,56}, -{56,-56,57}, -{56,-56,58}, -{56,-55,38}, -{56,-55,39}, -{56,-55,40}, -{56,-55,41}, -{56,-55,42}, -{56,-55,43}, -{56,-55,44}, -{56,-55,45}, -{56,-55,46}, -{56,-55,47}, -{56,-55,48}, -{56,-55,49}, -{56,-55,50}, -{56,-55,51}, -{56,-55,52}, -{56,-55,53}, -{56,-55,54}, -{56,-55,55}, -{56,-55,56}, -{56,-55,57}, -{56,-55,58}, -{56,-54,35}, -{56,-54,36}, -{56,-54,37}, -{56,-54,38}, -{56,-54,39}, -{56,-54,40}, -{56,-54,41}, -{56,-54,42}, -{56,-54,43}, -{56,-54,44}, -{56,-54,45}, -{56,-54,46}, -{56,-54,47}, -{56,-54,48}, -{56,-54,49}, -{56,-54,50}, -{56,-54,51}, -{56,-54,52}, -{56,-54,53}, -{56,-54,54}, -{56,-54,55}, -{56,-54,56}, -{56,-54,57}, -{56,-54,58}, -{56,-53,32}, -{56,-53,33}, -{56,-53,34}, -{56,-53,35}, -{56,-53,36}, -{56,-53,37}, -{56,-53,38}, -{56,-53,39}, -{56,-53,40}, -{56,-53,41}, -{56,-53,42}, -{56,-53,43}, -{56,-53,44}, -{56,-53,45}, -{56,-53,46}, -{56,-53,47}, -{56,-53,48}, -{56,-53,49}, -{56,-53,50}, -{56,-53,51}, -{56,-53,52}, -{56,-53,53}, -{56,-53,54}, -{56,-53,55}, -{56,-53,56}, -{56,-53,57}, -{56,-53,58}, -{56,-52,30}, -{56,-52,31}, -{56,-52,32}, -{56,-52,33}, -{56,-52,34}, -{56,-52,35}, -{56,-52,36}, -{56,-52,37}, -{56,-52,38}, -{56,-52,39}, -{56,-52,40}, -{56,-52,41}, -{56,-52,42}, -{56,-52,43}, -{56,-52,44}, -{56,-52,45}, -{56,-52,46}, -{56,-52,47}, -{56,-52,48}, -{56,-52,49}, -{56,-52,50}, -{56,-52,51}, -{56,-52,52}, -{56,-52,53}, -{56,-52,54}, -{56,-52,55}, -{56,-52,56}, -{56,-52,57}, -{56,-52,58}, -{56,-51,27}, -{56,-51,28}, -{56,-51,29}, -{56,-51,30}, -{56,-51,31}, -{56,-51,32}, -{56,-51,33}, -{56,-51,34}, -{56,-51,35}, -{56,-51,36}, -{56,-51,37}, -{56,-51,38}, -{56,-51,39}, -{56,-51,40}, -{56,-51,41}, -{56,-51,42}, -{56,-51,43}, -{56,-51,44}, -{56,-51,45}, -{56,-51,46}, -{56,-51,47}, -{56,-51,48}, -{56,-51,49}, -{56,-51,50}, -{56,-51,51}, -{56,-51,52}, -{56,-51,53}, -{56,-51,54}, -{56,-51,55}, -{56,-51,56}, -{56,-51,57}, -{56,-51,58}, -{56,-50,25}, -{56,-50,26}, -{56,-50,27}, -{56,-50,28}, -{56,-50,29}, -{56,-50,30}, -{56,-50,31}, -{56,-50,32}, -{56,-50,33}, -{56,-50,34}, -{56,-50,35}, -{56,-50,36}, -{56,-50,37}, -{56,-50,38}, -{56,-50,39}, -{56,-50,40}, -{56,-50,41}, -{56,-50,42}, -{56,-50,43}, -{56,-50,44}, -{56,-50,45}, -{56,-50,46}, -{56,-50,47}, -{56,-50,48}, -{56,-50,49}, -{56,-50,50}, -{56,-50,51}, -{56,-50,52}, -{56,-50,53}, -{56,-50,54}, -{56,-50,55}, -{56,-50,56}, -{56,-50,57}, -{56,-50,58}, -{56,-49,22}, -{56,-49,23}, -{56,-49,24}, -{56,-49,25}, -{56,-49,26}, -{56,-49,27}, -{56,-49,28}, -{56,-49,29}, -{56,-49,30}, -{56,-49,31}, -{56,-49,32}, -{56,-49,33}, -{56,-49,34}, -{56,-49,35}, -{56,-49,36}, -{56,-49,37}, -{56,-49,38}, -{56,-49,39}, -{56,-49,40}, -{56,-49,41}, -{56,-49,42}, -{56,-49,43}, -{56,-49,44}, -{56,-49,45}, -{56,-49,46}, -{56,-49,47}, -{56,-49,48}, -{56,-49,49}, -{56,-49,50}, -{56,-49,51}, -{56,-49,52}, -{56,-49,53}, -{56,-49,54}, -{56,-49,55}, -{56,-49,56}, -{56,-49,57}, -{56,-49,58}, -{56,-48,20}, -{56,-48,21}, -{56,-48,22}, -{56,-48,23}, -{56,-48,24}, -{56,-48,25}, -{56,-48,26}, -{56,-48,27}, -{56,-48,28}, -{56,-48,29}, -{56,-48,30}, -{56,-48,31}, -{56,-48,32}, -{56,-48,33}, -{56,-48,34}, -{56,-48,35}, -{56,-48,36}, -{56,-48,37}, -{56,-48,38}, -{56,-48,39}, -{56,-48,40}, -{56,-48,41}, -{56,-48,42}, -{56,-48,43}, -{56,-48,44}, -{56,-48,45}, -{56,-48,46}, -{56,-48,47}, -{56,-48,48}, -{56,-48,49}, -{56,-48,50}, -{56,-48,51}, -{56,-48,52}, -{56,-48,53}, -{56,-48,54}, -{56,-48,55}, -{56,-48,56}, -{56,-48,57}, -{56,-48,58}, -{56,-47,18}, -{56,-47,19}, -{56,-47,20}, -{56,-47,21}, -{56,-47,22}, -{56,-47,23}, -{56,-47,24}, -{56,-47,25}, -{56,-47,26}, -{56,-47,27}, -{56,-47,28}, -{56,-47,29}, -{56,-47,30}, -{56,-47,31}, -{56,-47,32}, -{56,-47,33}, -{56,-47,34}, -{56,-47,35}, -{56,-47,36}, -{56,-47,37}, -{56,-47,38}, -{56,-47,39}, -{56,-47,40}, -{56,-47,41}, -{56,-47,42}, -{56,-47,43}, -{56,-47,44}, -{56,-47,45}, -{56,-47,46}, -{56,-47,47}, -{56,-47,48}, -{56,-47,49}, -{56,-47,50}, -{56,-47,51}, -{56,-47,52}, -{56,-47,53}, -{56,-47,54}, -{56,-47,55}, -{56,-47,56}, -{56,-47,57}, -{56,-47,58}, -{56,-46,15}, -{56,-46,16}, -{56,-46,17}, -{56,-46,18}, -{56,-46,19}, -{56,-46,20}, -{56,-46,21}, -{56,-46,22}, -{56,-46,23}, -{56,-46,24}, -{56,-46,25}, -{56,-46,26}, -{56,-46,27}, -{56,-46,28}, -{56,-46,29}, -{56,-46,30}, -{56,-46,31}, -{56,-46,32}, -{56,-46,33}, -{56,-46,34}, -{56,-46,35}, -{56,-46,36}, -{56,-46,37}, -{56,-46,38}, -{56,-46,39}, -{56,-46,40}, -{56,-46,41}, -{56,-46,42}, -{56,-46,43}, -{56,-46,44}, -{56,-46,45}, -{56,-46,46}, -{56,-46,47}, -{56,-46,48}, -{56,-46,49}, -{56,-46,50}, -{56,-46,51}, -{56,-46,52}, -{56,-46,53}, -{56,-46,54}, -{56,-46,55}, -{56,-46,56}, -{56,-46,57}, -{56,-46,58}, -{56,-45,13}, -{56,-45,14}, -{56,-45,15}, -{56,-45,16}, -{56,-45,17}, -{56,-45,18}, -{56,-45,19}, -{56,-45,20}, -{56,-45,21}, -{56,-45,22}, -{56,-45,23}, -{56,-45,24}, -{56,-45,25}, -{56,-45,26}, -{56,-45,27}, -{56,-45,28}, -{56,-45,29}, -{56,-45,30}, -{56,-45,31}, -{56,-45,32}, -{56,-45,33}, -{56,-45,34}, -{56,-45,35}, -{56,-45,36}, -{56,-45,37}, -{56,-45,38}, -{56,-45,39}, -{56,-45,40}, -{56,-45,41}, -{56,-45,42}, -{56,-45,43}, -{56,-45,44}, -{56,-45,45}, -{56,-45,46}, -{56,-45,47}, -{56,-45,48}, -{56,-45,49}, -{56,-45,50}, -{56,-45,51}, -{56,-45,52}, -{56,-45,53}, -{56,-45,54}, -{56,-45,55}, -{56,-45,56}, -{56,-45,57}, -{56,-45,58}, -{56,-44,11}, -{56,-44,12}, -{56,-44,13}, -{56,-44,14}, -{56,-44,15}, -{56,-44,16}, -{56,-44,17}, -{56,-44,18}, -{56,-44,19}, -{56,-44,20}, -{56,-44,21}, -{56,-44,22}, -{56,-44,23}, -{56,-44,24}, -{56,-44,25}, -{56,-44,26}, -{56,-44,27}, -{56,-44,28}, -{56,-44,29}, -{56,-44,30}, -{56,-44,31}, -{56,-44,32}, -{56,-44,33}, -{56,-44,34}, -{56,-44,35}, -{56,-44,36}, -{56,-44,37}, -{56,-44,38}, -{56,-44,39}, -{56,-44,40}, -{56,-44,41}, -{56,-44,42}, -{56,-44,43}, -{56,-44,44}, -{56,-44,45}, -{56,-44,46}, -{56,-44,47}, -{56,-44,48}, -{56,-44,49}, -{56,-44,50}, -{56,-44,51}, -{56,-44,52}, -{56,-44,53}, -{56,-44,54}, -{56,-44,55}, -{56,-44,56}, -{56,-44,57}, -{56,-44,58}, -{56,-43,9}, -{56,-43,10}, -{56,-43,11}, -{56,-43,12}, -{56,-43,13}, -{56,-43,14}, -{56,-43,15}, -{56,-43,16}, -{56,-43,17}, -{56,-43,18}, -{56,-43,19}, -{56,-43,20}, -{56,-43,21}, -{56,-43,22}, -{56,-43,23}, -{56,-43,24}, -{56,-43,25}, -{56,-43,26}, -{56,-43,27}, -{56,-43,28}, -{56,-43,29}, -{56,-43,30}, -{56,-43,31}, -{56,-43,32}, -{56,-43,33}, -{56,-43,34}, -{56,-43,35}, -{56,-43,36}, -{56,-43,37}, -{56,-43,38}, -{56,-43,39}, -{56,-43,40}, -{56,-43,41}, -{56,-43,42}, -{56,-43,43}, -{56,-43,44}, -{56,-43,45}, -{56,-43,46}, -{56,-43,47}, -{56,-43,48}, -{56,-43,49}, -{56,-43,50}, -{56,-43,51}, -{56,-43,52}, -{56,-43,53}, -{56,-43,54}, -{56,-43,55}, -{56,-43,56}, -{56,-43,57}, -{56,-43,58}, -{56,-42,7}, -{56,-42,8}, -{56,-42,9}, -{56,-42,10}, -{56,-42,11}, -{56,-42,12}, -{56,-42,13}, -{56,-42,14}, -{56,-42,15}, -{56,-42,16}, -{56,-42,17}, -{56,-42,18}, -{56,-42,19}, -{56,-42,20}, -{56,-42,21}, -{56,-42,22}, -{56,-42,23}, -{56,-42,24}, -{56,-42,25}, -{56,-42,26}, -{56,-42,27}, -{56,-42,28}, -{56,-42,29}, -{56,-42,30}, -{56,-42,31}, -{56,-42,32}, -{56,-42,33}, -{56,-42,34}, -{56,-42,35}, -{56,-42,36}, -{56,-42,37}, -{56,-42,38}, -{56,-42,39}, -{56,-42,40}, -{56,-42,41}, -{56,-42,42}, -{56,-42,43}, -{56,-42,44}, -{56,-42,45}, -{56,-42,46}, -{56,-42,47}, -{56,-42,48}, -{56,-42,49}, -{56,-42,50}, -{56,-42,51}, -{56,-42,52}, -{56,-42,53}, -{56,-42,54}, -{56,-42,55}, -{56,-42,56}, -{56,-42,57}, -{56,-42,58}, -{56,-41,5}, -{56,-41,6}, -{56,-41,7}, -{56,-41,8}, -{56,-41,9}, -{56,-41,10}, -{56,-41,11}, -{56,-41,12}, -{56,-41,13}, -{56,-41,14}, -{56,-41,15}, -{56,-41,16}, -{56,-41,17}, -{56,-41,18}, -{56,-41,19}, -{56,-41,20}, -{56,-41,21}, -{56,-41,22}, -{56,-41,23}, -{56,-41,24}, -{56,-41,25}, -{56,-41,26}, -{56,-41,27}, -{56,-41,28}, -{56,-41,29}, -{56,-41,30}, -{56,-41,31}, -{56,-41,32}, -{56,-41,33}, -{56,-41,34}, -{56,-41,35}, -{56,-41,36}, -{56,-41,37}, -{56,-41,38}, -{56,-41,39}, -{56,-41,40}, -{56,-41,41}, -{56,-41,42}, -{56,-41,43}, -{56,-41,44}, -{56,-41,45}, -{56,-41,46}, -{56,-41,47}, -{56,-41,48}, -{56,-41,49}, -{56,-41,50}, -{56,-41,51}, -{56,-41,52}, -{56,-41,53}, -{56,-41,54}, -{56,-41,55}, -{56,-41,56}, -{56,-41,57}, -{56,-41,58}, -{56,-40,4}, -{56,-40,5}, -{56,-40,6}, -{56,-40,7}, -{56,-40,8}, -{56,-40,9}, -{56,-40,10}, -{56,-40,11}, -{56,-40,12}, -{56,-40,13}, -{56,-40,14}, -{56,-40,15}, -{56,-40,16}, -{56,-40,17}, -{56,-40,18}, -{56,-40,19}, -{56,-40,20}, -{56,-40,21}, -{56,-40,22}, -{56,-40,23}, -{56,-40,24}, -{56,-40,25}, -{56,-40,26}, -{56,-40,27}, -{56,-40,28}, -{56,-40,29}, -{56,-40,30}, -{56,-40,31}, -{56,-40,32}, -{56,-40,33}, -{56,-40,34}, -{56,-40,35}, -{56,-40,36}, -{56,-40,37}, -{56,-40,38}, -{56,-40,39}, -{56,-40,40}, -{56,-40,41}, -{56,-40,42}, -{56,-40,43}, -{56,-40,44}, -{56,-40,45}, -{56,-40,46}, -{56,-40,47}, -{56,-40,48}, -{56,-40,49}, -{56,-40,50}, -{56,-40,51}, -{56,-40,52}, -{56,-40,53}, -{56,-40,54}, -{56,-40,55}, -{56,-40,56}, -{56,-40,57}, -{56,-40,58}, -{56,-39,2}, -{56,-39,3}, -{56,-39,4}, -{56,-39,5}, -{56,-39,6}, -{56,-39,7}, -{56,-39,8}, -{56,-39,9}, -{56,-39,10}, -{56,-39,11}, -{56,-39,12}, -{56,-39,13}, -{56,-39,14}, -{56,-39,15}, -{56,-39,16}, -{56,-39,17}, -{56,-39,18}, -{56,-39,19}, -{56,-39,20}, -{56,-39,21}, -{56,-39,22}, -{56,-39,23}, -{56,-39,24}, -{56,-39,25}, -{56,-39,26}, -{56,-39,27}, -{56,-39,28}, -{56,-39,29}, -{56,-39,30}, -{56,-39,31}, -{56,-39,32}, -{56,-39,33}, -{56,-39,34}, -{56,-39,35}, -{56,-39,36}, -{56,-39,37}, -{56,-39,38}, -{56,-39,39}, -{56,-39,40}, -{56,-39,41}, -{56,-39,42}, -{56,-39,43}, -{56,-39,44}, -{56,-39,45}, -{56,-39,46}, -{56,-39,47}, -{56,-39,48}, -{56,-39,49}, -{56,-39,50}, -{56,-39,51}, -{56,-39,52}, -{56,-39,53}, -{56,-39,54}, -{56,-39,55}, -{56,-39,56}, -{56,-39,57}, -{56,-39,58}, -{56,-38,0}, -{56,-38,1}, -{56,-38,2}, -{56,-38,3}, -{56,-38,4}, -{56,-38,5}, -{56,-38,6}, -{56,-38,7}, -{56,-38,8}, -{56,-38,9}, -{56,-38,10}, -{56,-38,11}, -{56,-38,12}, -{56,-38,13}, -{56,-38,14}, -{56,-38,15}, -{56,-38,16}, -{56,-38,17}, -{56,-38,18}, -{56,-38,19}, -{56,-38,20}, -{56,-38,21}, -{56,-38,22}, -{56,-38,23}, -{56,-38,24}, -{56,-38,25}, -{56,-38,26}, -{56,-38,27}, -{56,-38,28}, -{56,-38,29}, -{56,-38,30}, -{56,-38,31}, -{56,-38,32}, -{56,-38,33}, -{56,-38,34}, -{56,-38,35}, -{56,-38,36}, -{56,-38,37}, -{56,-38,38}, -{56,-38,39}, -{56,-38,40}, -{56,-38,41}, -{56,-38,42}, -{56,-38,43}, -{56,-38,44}, -{56,-38,45}, -{56,-38,46}, -{56,-38,47}, -{56,-38,48}, -{56,-38,49}, -{56,-38,50}, -{56,-38,51}, -{56,-38,52}, -{56,-38,53}, -{56,-38,54}, -{56,-38,55}, -{56,-38,56}, -{56,-38,57}, -{56,-38,58}, -{56,-37,-2}, -{56,-37,-1}, -{56,-37,0}, -{56,-37,1}, -{56,-37,2}, -{56,-37,3}, -{56,-37,4}, -{56,-37,5}, -{56,-37,6}, -{56,-37,7}, -{56,-37,8}, -{56,-37,9}, -{56,-37,10}, -{56,-37,11}, -{56,-37,12}, -{56,-37,13}, -{56,-37,14}, -{56,-37,15}, -{56,-37,16}, -{56,-37,17}, -{56,-37,18}, -{56,-37,19}, -{56,-37,20}, -{56,-37,21}, -{56,-37,22}, -{56,-37,23}, -{56,-37,24}, -{56,-37,25}, -{56,-37,26}, -{56,-37,27}, -{56,-37,28}, -{56,-37,29}, -{56,-37,30}, -{56,-37,31}, -{56,-37,32}, -{56,-37,33}, -{56,-37,34}, -{56,-37,35}, -{56,-37,36}, -{56,-37,37}, -{56,-37,38}, -{56,-37,39}, -{56,-37,40}, -{56,-37,41}, -{56,-37,42}, -{56,-37,43}, -{56,-37,44}, -{56,-37,45}, -{56,-37,46}, -{56,-37,47}, -{56,-37,48}, -{56,-37,49}, -{56,-37,50}, -{56,-37,51}, -{56,-37,52}, -{56,-37,53}, -{56,-37,54}, -{56,-37,55}, -{56,-37,56}, -{56,-37,57}, -{56,-37,58}, -{56,-36,-3}, -{56,-36,-2}, -{56,-36,-1}, -{56,-36,0}, -{56,-36,1}, -{56,-36,2}, -{56,-36,3}, -{56,-36,4}, -{56,-36,5}, -{56,-36,6}, -{56,-36,7}, -{56,-36,8}, -{56,-36,9}, -{56,-36,10}, -{56,-36,11}, -{56,-36,12}, -{56,-36,13}, -{56,-36,14}, -{56,-36,15}, -{56,-36,16}, -{56,-36,17}, -{56,-36,18}, -{56,-36,19}, -{56,-36,20}, -{56,-36,21}, -{56,-36,22}, -{56,-36,23}, -{56,-36,24}, -{56,-36,25}, -{56,-36,26}, -{56,-36,27}, -{56,-36,28}, -{56,-36,29}, -{56,-36,30}, -{56,-36,31}, -{56,-36,32}, -{56,-36,33}, -{56,-36,34}, -{56,-36,35}, -{56,-36,36}, -{56,-36,37}, -{56,-36,38}, -{56,-36,39}, -{56,-36,40}, -{56,-36,41}, -{56,-36,42}, -{56,-36,43}, -{56,-36,44}, -{56,-36,45}, -{56,-36,46}, -{56,-36,47}, -{56,-36,48}, -{56,-36,49}, -{56,-36,50}, -{56,-36,51}, -{56,-36,52}, -{56,-36,53}, -{56,-36,54}, -{56,-36,55}, -{56,-36,56}, -{56,-36,57}, -{56,-36,58}, -{56,-36,59}, -{56,-35,-5}, -{56,-35,-4}, -{56,-35,-3}, -{56,-35,-2}, -{56,-35,-1}, -{56,-35,0}, -{56,-35,1}, -{56,-35,2}, -{56,-35,3}, -{56,-35,4}, -{56,-35,5}, -{56,-35,6}, -{56,-35,7}, -{56,-35,8}, -{56,-35,9}, -{56,-35,10}, -{56,-35,11}, -{56,-35,12}, -{56,-35,13}, -{56,-35,14}, -{56,-35,15}, -{56,-35,16}, -{56,-35,17}, -{56,-35,18}, -{56,-35,19}, -{56,-35,20}, -{56,-35,21}, -{56,-35,22}, -{56,-35,23}, -{56,-35,24}, -{56,-35,25}, -{56,-35,26}, -{56,-35,27}, -{56,-35,28}, -{56,-35,29}, -{56,-35,30}, -{56,-35,31}, -{56,-35,32}, -{56,-35,33}, -{56,-35,34}, -{56,-35,35}, -{56,-35,36}, -{56,-35,37}, -{56,-35,38}, -{56,-35,39}, -{56,-35,40}, -{56,-35,41}, -{56,-35,42}, -{56,-35,43}, -{56,-35,44}, -{56,-35,45}, -{56,-35,46}, -{56,-35,47}, -{56,-35,48}, -{56,-35,49}, -{56,-35,50}, -{56,-35,51}, -{56,-35,52}, -{56,-35,53}, -{56,-35,54}, -{56,-35,55}, -{56,-35,56}, -{56,-35,57}, -{56,-35,58}, -{56,-35,59}, -{56,-34,-7}, -{56,-34,-6}, -{56,-34,-5}, -{56,-34,-4}, -{56,-34,-3}, -{56,-34,-2}, -{56,-34,-1}, -{56,-34,0}, -{56,-34,1}, -{56,-34,2}, -{56,-34,3}, -{56,-34,4}, -{56,-34,5}, -{56,-34,6}, -{56,-34,7}, -{56,-34,8}, -{56,-34,9}, -{56,-34,10}, -{56,-34,11}, -{56,-34,12}, -{56,-34,13}, -{56,-34,14}, -{56,-34,15}, -{56,-34,16}, -{56,-34,17}, -{56,-34,18}, -{56,-34,19}, -{56,-34,20}, -{56,-34,21}, -{56,-34,22}, -{56,-34,23}, -{56,-34,24}, -{56,-34,25}, -{56,-34,26}, -{56,-34,27}, -{56,-34,28}, -{56,-34,29}, -{56,-34,30}, -{56,-34,31}, -{56,-34,32}, -{56,-34,33}, -{56,-34,34}, -{56,-34,35}, -{56,-34,36}, -{56,-34,37}, -{56,-34,38}, -{56,-34,39}, -{56,-34,40}, -{56,-34,41}, -{56,-34,42}, -{56,-34,43}, -{56,-34,44}, -{56,-34,45}, -{56,-34,46}, -{56,-34,47}, -{56,-34,48}, -{56,-34,49}, -{56,-34,50}, -{56,-34,51}, -{56,-34,52}, -{56,-34,53}, -{56,-34,54}, -{56,-34,55}, -{56,-34,56}, -{56,-34,57}, -{56,-34,58}, -{56,-34,59}, -{56,-33,-8}, -{56,-33,-7}, -{56,-33,-6}, -{56,-33,-5}, -{56,-33,-4}, -{56,-33,-3}, -{56,-33,-2}, -{56,-33,-1}, -{56,-33,0}, -{56,-33,1}, -{56,-33,2}, -{56,-33,3}, -{56,-33,4}, -{56,-33,5}, -{56,-33,6}, -{56,-33,7}, -{56,-33,8}, -{56,-33,9}, -{56,-33,10}, -{56,-33,11}, -{56,-33,12}, -{56,-33,13}, -{56,-33,14}, -{56,-33,15}, -{56,-33,16}, -{56,-33,17}, -{56,-33,18}, -{56,-33,19}, -{56,-33,20}, -{56,-33,21}, -{56,-33,22}, -{56,-33,23}, -{56,-33,24}, -{56,-33,25}, -{56,-33,26}, -{56,-33,27}, -{56,-33,28}, -{56,-33,29}, -{56,-33,30}, -{56,-33,31}, -{56,-33,32}, -{56,-33,33}, -{56,-33,34}, -{56,-33,35}, -{56,-33,36}, -{56,-33,37}, -{56,-33,38}, -{56,-33,39}, -{56,-33,40}, -{56,-33,41}, -{56,-33,42}, -{56,-33,43}, -{56,-33,44}, -{56,-33,45}, -{56,-33,46}, -{56,-33,47}, -{56,-33,48}, -{56,-33,49}, -{56,-33,50}, -{56,-33,51}, -{56,-33,52}, -{56,-33,53}, -{56,-33,54}, -{56,-33,55}, -{56,-33,56}, -{56,-33,57}, -{56,-33,58}, -{56,-33,59}, -{56,-32,-10}, -{56,-32,-9}, -{56,-32,-8}, -{56,-32,-7}, -{56,-32,-6}, -{56,-32,-5}, -{56,-32,-4}, -{56,-32,-3}, -{56,-32,-2}, -{56,-32,-1}, -{56,-32,0}, -{56,-32,1}, -{56,-32,2}, -{56,-32,3}, -{56,-32,4}, -{56,-32,5}, -{56,-32,6}, -{56,-32,7}, -{56,-32,8}, -{56,-32,9}, -{56,-32,10}, -{56,-32,11}, -{56,-32,12}, -{56,-32,13}, -{56,-32,14}, -{56,-32,15}, -{56,-32,16}, -{56,-32,17}, -{56,-32,18}, -{56,-32,19}, -{56,-32,20}, -{56,-32,21}, -{56,-32,22}, -{56,-32,23}, -{56,-32,24}, -{56,-32,25}, -{56,-32,26}, -{56,-32,27}, -{56,-32,28}, -{56,-32,29}, -{56,-32,30}, -{56,-32,31}, -{56,-32,32}, -{56,-32,33}, -{56,-32,34}, -{56,-32,35}, -{56,-32,36}, -{56,-32,37}, -{56,-32,38}, -{56,-32,39}, -{56,-32,40}, -{56,-32,41}, -{56,-32,42}, -{56,-32,43}, -{56,-32,44}, -{56,-32,45}, -{56,-32,46}, -{56,-32,47}, -{56,-32,48}, -{56,-32,49}, -{56,-32,50}, -{56,-32,51}, -{56,-32,52}, -{56,-32,53}, -{56,-32,54}, -{56,-32,55}, -{56,-32,56}, -{56,-32,57}, -{56,-32,58}, -{56,-32,59}, -{56,-31,-11}, -{56,-31,-10}, -{56,-31,-9}, -{56,-31,-8}, -{56,-31,-7}, -{56,-31,-6}, -{56,-31,-5}, -{56,-31,-4}, -{56,-31,-3}, -{56,-31,-2}, -{56,-31,-1}, -{56,-31,0}, -{56,-31,1}, -{56,-31,2}, -{56,-31,3}, -{56,-31,4}, -{56,-31,5}, -{56,-31,6}, -{56,-31,7}, -{56,-31,8}, -{56,-31,9}, -{56,-31,10}, -{56,-31,11}, -{56,-31,12}, -{56,-31,13}, -{56,-31,14}, -{56,-31,15}, -{56,-31,16}, -{56,-31,17}, -{56,-31,18}, -{56,-31,19}, -{56,-31,20}, -{56,-31,21}, -{56,-31,22}, -{56,-31,23}, -{56,-31,24}, -{56,-31,25}, -{56,-31,26}, -{56,-31,27}, -{56,-31,28}, -{56,-31,29}, -{56,-31,30}, -{56,-31,31}, -{56,-31,32}, -{56,-31,33}, -{56,-31,34}, -{56,-31,35}, -{56,-31,36}, -{56,-31,37}, -{56,-31,38}, -{56,-31,39}, -{56,-31,40}, -{56,-31,41}, -{56,-31,42}, -{56,-31,43}, -{56,-31,44}, -{56,-31,45}, -{56,-31,46}, -{56,-31,47}, -{56,-31,48}, -{56,-31,49}, -{56,-31,50}, -{56,-31,51}, -{56,-31,52}, -{56,-31,53}, -{56,-31,54}, -{56,-31,55}, -{56,-31,56}, -{56,-31,57}, -{56,-31,58}, -{56,-31,59}, -{56,-30,-13}, -{56,-30,-12}, -{56,-30,-11}, -{56,-30,-10}, -{56,-30,-9}, -{56,-30,-8}, -{56,-30,-7}, -{56,-30,-6}, -{56,-30,-5}, -{56,-30,-4}, -{56,-30,-3}, -{56,-30,-2}, -{56,-30,-1}, -{56,-30,0}, -{56,-30,1}, -{56,-30,2}, -{56,-30,3}, -{56,-30,4}, -{56,-30,5}, -{56,-30,6}, -{56,-30,7}, -{56,-30,8}, -{56,-30,9}, -{56,-30,10}, -{56,-30,11}, -{56,-30,12}, -{56,-30,13}, -{56,-30,14}, -{56,-30,15}, -{56,-30,16}, -{56,-30,17}, -{56,-30,18}, -{56,-30,19}, -{56,-30,20}, -{56,-30,21}, -{56,-30,22}, -{56,-30,23}, -{56,-30,24}, -{56,-30,25}, -{56,-30,26}, -{56,-30,27}, -{56,-30,28}, -{56,-30,29}, -{56,-30,30}, -{56,-30,31}, -{56,-30,32}, -{56,-30,33}, -{56,-30,34}, -{56,-30,35}, -{56,-30,36}, -{56,-30,37}, -{56,-30,38}, -{56,-30,39}, -{56,-30,40}, -{56,-30,41}, -{56,-30,42}, -{56,-30,43}, -{56,-30,44}, -{56,-30,45}, -{56,-30,46}, -{56,-30,47}, -{56,-30,48}, -{56,-30,49}, -{56,-30,50}, -{56,-30,51}, -{56,-30,52}, -{56,-30,53}, -{56,-30,54}, -{56,-30,55}, -{56,-30,56}, -{56,-30,57}, -{56,-30,58}, -{56,-30,59}, -{56,-29,-14}, -{56,-29,-13}, -{56,-29,-12}, -{56,-29,-11}, -{56,-29,-10}, -{56,-29,-9}, -{56,-29,-8}, -{56,-29,-7}, -{56,-29,-6}, -{56,-29,-5}, -{56,-29,-4}, -{56,-29,-3}, -{56,-29,-2}, -{56,-29,-1}, -{56,-29,0}, -{56,-29,1}, -{56,-29,2}, -{56,-29,3}, -{56,-29,4}, -{56,-29,5}, -{56,-29,6}, -{56,-29,7}, -{56,-29,8}, -{56,-29,9}, -{56,-29,10}, -{56,-29,11}, -{56,-29,12}, -{56,-29,13}, -{56,-29,14}, -{56,-29,15}, -{56,-29,16}, -{56,-29,17}, -{56,-29,18}, -{56,-29,19}, -{56,-29,20}, -{56,-29,21}, -{56,-29,22}, -{56,-29,23}, -{56,-29,24}, -{56,-29,25}, -{56,-29,26}, -{56,-29,27}, -{56,-29,28}, -{56,-29,29}, -{56,-29,30}, -{56,-29,31}, -{56,-29,32}, -{56,-29,33}, -{56,-29,34}, -{56,-29,35}, -{56,-29,36}, -{56,-29,37}, -{56,-29,38}, -{56,-29,39}, -{56,-29,40}, -{56,-29,41}, -{56,-29,42}, -{56,-29,43}, -{56,-29,44}, -{56,-29,45}, -{56,-29,46}, -{56,-29,47}, -{56,-29,48}, -{56,-29,49}, -{56,-29,50}, -{56,-29,51}, -{56,-29,52}, -{56,-29,53}, -{56,-29,54}, -{56,-29,55}, -{56,-29,56}, -{56,-29,57}, -{56,-29,58}, -{56,-29,59}, -{56,-28,-16}, -{56,-28,-15}, -{56,-28,-14}, -{56,-28,-13}, -{56,-28,-12}, -{56,-28,-11}, -{56,-28,-10}, -{56,-28,-9}, -{56,-28,-8}, -{56,-28,-7}, -{56,-28,-6}, -{56,-28,-5}, -{56,-28,-4}, -{56,-28,-3}, -{56,-28,-2}, -{56,-28,-1}, -{56,-28,0}, -{56,-28,1}, -{56,-28,2}, -{56,-28,3}, -{56,-28,4}, -{56,-28,5}, -{56,-28,6}, -{56,-28,7}, -{56,-28,8}, -{56,-28,9}, -{56,-28,10}, -{56,-28,11}, -{56,-28,12}, -{56,-28,13}, -{56,-28,14}, -{56,-28,15}, -{56,-28,16}, -{56,-28,17}, -{56,-28,18}, -{56,-28,19}, -{56,-28,20}, -{56,-28,21}, -{56,-28,22}, -{56,-28,23}, -{56,-28,24}, -{56,-28,25}, -{56,-28,26}, -{56,-28,27}, -{56,-28,28}, -{56,-28,29}, -{56,-28,30}, -{56,-28,31}, -{56,-28,32}, -{56,-28,33}, -{56,-28,34}, -{56,-28,35}, -{56,-28,36}, -{56,-28,37}, -{56,-28,38}, -{56,-28,39}, -{56,-28,40}, -{56,-28,41}, -{56,-28,42}, -{56,-28,43}, -{56,-28,44}, -{56,-28,45}, -{56,-28,46}, -{56,-28,47}, -{56,-28,48}, -{56,-28,49}, -{56,-28,50}, -{56,-28,51}, -{56,-28,52}, -{56,-28,53}, -{56,-28,54}, -{56,-28,55}, -{56,-28,56}, -{56,-28,57}, -{56,-28,58}, -{56,-28,59}, -{56,-27,-17}, -{56,-27,-16}, -{56,-27,-15}, -{56,-27,-14}, -{56,-27,-13}, -{56,-27,-12}, -{56,-27,-11}, -{56,-27,-10}, -{56,-27,-9}, -{56,-27,-8}, -{56,-27,-7}, -{56,-27,-6}, -{56,-27,-5}, -{56,-27,-4}, -{56,-27,-3}, -{56,-27,-2}, -{56,-27,-1}, -{56,-27,0}, -{56,-27,1}, -{56,-27,2}, -{56,-27,3}, -{56,-27,4}, -{56,-27,5}, -{56,-27,6}, -{56,-27,7}, -{56,-27,8}, -{56,-27,9}, -{56,-27,10}, -{56,-27,11}, -{56,-27,12}, -{56,-27,13}, -{56,-27,14}, -{56,-27,15}, -{56,-27,16}, -{56,-27,17}, -{56,-27,18}, -{56,-27,19}, -{56,-27,20}, -{56,-27,21}, -{56,-27,22}, -{56,-27,23}, -{56,-27,24}, -{56,-27,25}, -{56,-27,26}, -{56,-27,27}, -{56,-27,28}, -{56,-27,29}, -{56,-27,30}, -{56,-27,31}, -{56,-27,32}, -{56,-27,33}, -{56,-27,34}, -{56,-27,35}, -{56,-27,36}, -{56,-27,37}, -{56,-27,38}, -{56,-27,39}, -{56,-27,40}, -{56,-27,41}, -{56,-27,42}, -{56,-27,43}, -{56,-27,44}, -{56,-27,45}, -{56,-27,46}, -{56,-27,47}, -{56,-27,48}, -{56,-27,49}, -{56,-27,50}, -{56,-27,51}, -{56,-27,52}, -{56,-27,53}, -{56,-27,54}, -{56,-27,55}, -{56,-27,56}, -{56,-27,57}, -{56,-27,58}, -{56,-27,59}, -{56,-26,-19}, -{56,-26,-18}, -{56,-26,-17}, -{56,-26,-16}, -{56,-26,-15}, -{56,-26,-14}, -{56,-26,-13}, -{56,-26,-12}, -{56,-26,-11}, -{56,-26,-10}, -{56,-26,-9}, -{56,-26,-8}, -{56,-26,-7}, -{56,-26,-6}, -{56,-26,-5}, -{56,-26,-4}, -{56,-26,-3}, -{56,-26,-2}, -{56,-26,-1}, -{56,-26,0}, -{56,-26,1}, -{56,-26,2}, -{56,-26,3}, -{56,-26,4}, -{56,-26,5}, -{56,-26,6}, -{56,-26,7}, -{56,-26,8}, -{56,-26,9}, -{56,-26,10}, -{56,-26,11}, -{56,-26,12}, -{56,-26,13}, -{56,-26,14}, -{56,-26,15}, -{56,-26,16}, -{56,-26,17}, -{56,-26,18}, -{56,-26,19}, -{56,-26,20}, -{56,-26,21}, -{56,-26,22}, -{56,-26,23}, -{56,-26,24}, -{56,-26,25}, -{56,-26,26}, -{56,-26,27}, -{56,-26,28}, -{56,-26,29}, -{56,-26,30}, -{56,-26,31}, -{56,-26,32}, -{56,-26,33}, -{56,-26,34}, -{56,-26,35}, -{56,-26,36}, -{56,-26,37}, -{56,-26,38}, -{56,-26,39}, -{56,-26,40}, -{56,-26,41}, -{56,-26,42}, -{56,-26,43}, -{56,-26,44}, -{56,-26,45}, -{56,-26,46}, -{56,-26,47}, -{56,-26,48}, -{56,-26,49}, -{56,-26,50}, -{56,-26,51}, -{56,-26,52}, -{56,-26,53}, -{56,-26,54}, -{56,-26,55}, -{56,-26,56}, -{56,-26,57}, -{56,-26,58}, -{56,-26,59}, -{56,-25,-20}, -{56,-25,-19}, -{56,-25,-18}, -{56,-25,-17}, -{56,-25,-16}, -{56,-25,-15}, -{56,-25,-14}, -{56,-25,-13}, -{56,-25,-12}, -{56,-25,-11}, -{56,-25,-10}, -{56,-25,-9}, -{56,-25,-8}, -{56,-25,-7}, -{56,-25,-6}, -{56,-25,-5}, -{56,-25,-4}, -{56,-25,-3}, -{56,-25,-2}, -{56,-25,-1}, -{56,-25,0}, -{56,-25,1}, -{56,-25,2}, -{56,-25,3}, -{56,-25,4}, -{56,-25,5}, -{56,-25,6}, -{56,-25,7}, -{56,-25,8}, -{56,-25,9}, -{56,-25,10}, -{56,-25,11}, -{56,-25,12}, -{56,-25,13}, -{56,-25,14}, -{56,-25,15}, -{56,-25,16}, -{56,-25,17}, -{56,-25,18}, -{56,-25,19}, -{56,-25,20}, -{56,-25,21}, -{56,-25,22}, -{56,-25,23}, -{56,-25,24}, -{56,-25,25}, -{56,-25,26}, -{56,-25,27}, -{56,-25,28}, -{56,-25,29}, -{56,-25,30}, -{56,-25,31}, -{56,-25,32}, -{56,-25,33}, -{56,-25,34}, -{56,-25,35}, -{56,-25,36}, -{56,-25,37}, -{56,-25,38}, -{56,-25,39}, -{56,-25,40}, -{56,-25,41}, -{56,-25,42}, -{56,-25,43}, -{56,-25,44}, -{56,-25,45}, -{56,-25,46}, -{56,-25,47}, -{56,-25,48}, -{56,-25,49}, -{56,-25,50}, -{56,-25,51}, -{56,-25,52}, -{56,-25,53}, -{56,-25,54}, -{56,-25,55}, -{56,-25,56}, -{56,-25,57}, -{56,-25,58}, -{56,-25,59}, -{56,-24,-22}, -{56,-24,-21}, -{56,-24,-20}, -{56,-24,-19}, -{56,-24,-18}, -{56,-24,-17}, -{56,-24,-16}, -{56,-24,-15}, -{56,-24,-14}, -{56,-24,-13}, -{56,-24,-12}, -{56,-24,-11}, -{56,-24,-10}, -{56,-24,-9}, -{56,-24,-8}, -{56,-24,-7}, -{56,-24,-6}, -{56,-24,-5}, -{56,-24,-4}, -{56,-24,-3}, -{56,-24,-2}, -{56,-24,-1}, -{56,-24,0}, -{56,-24,1}, -{56,-24,2}, -{56,-24,3}, -{56,-24,4}, -{56,-24,5}, -{56,-24,6}, -{56,-24,7}, -{56,-24,8}, -{56,-24,9}, -{56,-24,10}, -{56,-24,11}, -{56,-24,12}, -{56,-24,13}, -{56,-24,14}, -{56,-24,15}, -{56,-24,16}, -{56,-24,17}, -{56,-24,18}, -{56,-24,19}, -{56,-24,20}, -{56,-24,21}, -{56,-24,22}, -{56,-24,23}, -{56,-24,24}, -{56,-24,25}, -{56,-24,26}, -{56,-24,27}, -{56,-24,28}, -{56,-24,29}, -{56,-24,30}, -{56,-24,31}, -{56,-24,32}, -{56,-24,33}, -{56,-24,34}, -{56,-24,35}, -{56,-24,36}, -{56,-24,37}, -{56,-24,38}, -{56,-24,39}, -{56,-24,40}, -{56,-24,41}, -{56,-24,42}, -{56,-24,43}, -{56,-24,44}, -{56,-24,45}, -{56,-24,46}, -{56,-24,47}, -{56,-24,48}, -{56,-24,49}, -{56,-24,50}, -{56,-24,51}, -{56,-24,52}, -{56,-24,53}, -{56,-24,54}, -{56,-24,55}, -{56,-24,56}, -{56,-24,57}, -{56,-24,58}, -{56,-24,59}, -{56,-23,-23}, -{56,-23,-22}, -{56,-23,-21}, -{56,-23,-20}, -{56,-23,-19}, -{56,-23,-18}, -{56,-23,-17}, -{56,-23,-16}, -{56,-23,-15}, -{56,-23,-14}, -{56,-23,-13}, -{56,-23,-12}, -{56,-23,-11}, -{56,-23,-10}, -{56,-23,-9}, -{56,-23,-8}, -{56,-23,-7}, -{56,-23,-6}, -{56,-23,-5}, -{56,-23,-4}, -{56,-23,-3}, -{56,-23,-2}, -{56,-23,-1}, -{56,-23,0}, -{56,-23,1}, -{56,-23,2}, -{56,-23,3}, -{56,-23,4}, -{56,-23,5}, -{56,-23,6}, -{56,-23,7}, -{56,-23,8}, -{56,-23,9}, -{56,-23,10}, -{56,-23,11}, -{56,-23,12}, -{56,-23,13}, -{56,-23,14}, -{56,-23,15}, -{56,-23,16}, -{56,-23,17}, -{56,-23,18}, -{56,-23,19}, -{56,-23,20}, -{56,-23,21}, -{56,-23,22}, -{56,-23,23}, -{56,-23,24}, -{56,-23,25}, -{56,-23,26}, -{56,-23,27}, -{56,-23,28}, -{56,-23,29}, -{56,-23,30}, -{56,-23,31}, -{56,-23,32}, -{56,-23,33}, -{56,-23,34}, -{56,-23,35}, -{56,-23,36}, -{56,-23,37}, -{56,-23,38}, -{56,-23,39}, -{56,-23,40}, -{56,-23,41}, -{56,-23,42}, -{56,-23,43}, -{56,-23,44}, -{56,-23,45}, -{56,-23,46}, -{56,-23,47}, -{56,-23,48}, -{56,-23,49}, -{56,-23,50}, -{56,-23,51}, -{56,-23,52}, -{56,-23,53}, -{56,-23,54}, -{56,-23,55}, -{56,-23,56}, -{56,-23,57}, -{56,-23,58}, -{56,-23,59}, -{56,-22,-24}, -{56,-22,-23}, -{56,-22,-22}, -{56,-22,-21}, -{56,-22,-20}, -{56,-22,-19}, -{56,-22,-18}, -{56,-22,-17}, -{56,-22,-16}, -{56,-22,-15}, -{56,-22,-14}, -{56,-22,-13}, -{56,-22,-12}, -{56,-22,-11}, -{56,-22,-10}, -{56,-22,-9}, -{56,-22,-8}, -{56,-22,-7}, -{56,-22,-6}, -{56,-22,-5}, -{56,-22,-4}, -{56,-22,-3}, -{56,-22,-2}, -{56,-22,-1}, -{56,-22,0}, -{56,-22,1}, -{56,-22,2}, -{56,-22,3}, -{56,-22,4}, -{56,-22,5}, -{56,-22,6}, -{56,-22,7}, -{56,-22,8}, -{56,-22,9}, -{56,-22,10}, -{56,-22,11}, -{56,-22,12}, -{56,-22,13}, -{56,-22,14}, -{56,-22,15}, -{56,-22,16}, -{56,-22,17}, -{56,-22,18}, -{56,-22,19}, -{56,-22,20}, -{56,-22,21}, -{56,-22,22}, -{56,-22,23}, -{56,-22,24}, -{56,-22,25}, -{56,-22,26}, -{56,-22,27}, -{56,-22,28}, -{56,-22,29}, -{56,-22,30}, -{56,-22,31}, -{56,-22,32}, -{56,-22,33}, -{56,-22,34}, -{56,-22,35}, -{56,-22,36}, -{56,-22,37}, -{56,-22,38}, -{56,-22,39}, -{56,-22,40}, -{56,-22,41}, -{56,-22,42}, -{56,-22,43}, -{56,-22,44}, -{56,-22,45}, -{56,-22,46}, -{56,-22,47}, -{56,-22,48}, -{56,-22,49}, -{56,-22,50}, -{56,-22,51}, -{56,-22,52}, -{56,-22,53}, -{56,-22,54}, -{56,-22,55}, -{56,-22,56}, -{56,-22,57}, -{56,-22,58}, -{56,-22,59}, -{56,-21,-26}, -{56,-21,-25}, -{56,-21,-24}, -{56,-21,-23}, -{56,-21,-22}, -{56,-21,-21}, -{56,-21,-20}, -{56,-21,-19}, -{56,-21,-18}, -{56,-21,-17}, -{56,-21,-16}, -{56,-21,-15}, -{56,-21,-14}, -{56,-21,-13}, -{56,-21,-12}, -{56,-21,-11}, -{56,-21,-10}, -{56,-21,-9}, -{56,-21,-8}, -{56,-21,-7}, -{56,-21,-6}, -{56,-21,-5}, -{56,-21,-4}, -{56,-21,-3}, -{56,-21,-2}, -{56,-21,-1}, -{56,-21,0}, -{56,-21,1}, -{56,-21,2}, -{56,-21,3}, -{56,-21,4}, -{56,-21,5}, -{56,-21,6}, -{56,-21,7}, -{56,-21,8}, -{56,-21,9}, -{56,-21,10}, -{56,-21,11}, -{56,-21,12}, -{56,-21,13}, -{56,-21,14}, -{56,-21,15}, -{56,-21,16}, -{56,-21,17}, -{56,-21,18}, -{56,-21,19}, -{56,-21,20}, -{56,-21,21}, -{56,-21,22}, -{56,-21,23}, -{56,-21,24}, -{56,-21,25}, -{56,-21,26}, -{56,-21,27}, -{56,-21,28}, -{56,-21,29}, -{56,-21,30}, -{56,-21,31}, -{56,-21,32}, -{56,-21,33}, -{56,-21,34}, -{56,-21,35}, -{56,-21,36}, -{56,-21,37}, -{56,-21,38}, -{56,-21,39}, -{56,-21,40}, -{56,-21,41}, -{56,-21,42}, -{56,-21,43}, -{56,-21,44}, -{56,-21,45}, -{56,-21,46}, -{56,-21,47}, -{56,-21,48}, -{56,-21,49}, -{56,-21,50}, -{56,-21,51}, -{56,-21,52}, -{56,-21,53}, -{56,-21,54}, -{56,-21,55}, -{56,-21,56}, -{56,-21,57}, -{56,-21,58}, -{56,-21,59}, -{56,-20,-27}, -{56,-20,-26}, -{56,-20,-25}, -{56,-20,-24}, -{56,-20,-23}, -{56,-20,-22}, -{56,-20,-21}, -{56,-20,-20}, -{56,-20,-19}, -{56,-20,-18}, -{56,-20,-17}, -{56,-20,-16}, -{56,-20,-15}, -{56,-20,-14}, -{56,-20,-13}, -{56,-20,-12}, -{56,-20,-11}, -{56,-20,-10}, -{56,-20,-9}, -{56,-20,-8}, -{56,-20,-7}, -{56,-20,-6}, -{56,-20,-5}, -{56,-20,-4}, -{56,-20,-3}, -{56,-20,-2}, -{56,-20,-1}, -{56,-20,0}, -{56,-20,1}, -{56,-20,2}, -{56,-20,3}, -{56,-20,4}, -{56,-20,5}, -{56,-20,6}, -{56,-20,7}, -{56,-20,8}, -{56,-20,9}, -{56,-20,10}, -{56,-20,11}, -{56,-20,12}, -{56,-20,13}, -{56,-20,14}, -{56,-20,15}, -{56,-20,16}, -{56,-20,17}, -{56,-20,18}, -{56,-20,19}, -{56,-20,20}, -{56,-20,21}, -{56,-20,22}, -{56,-20,23}, -{56,-20,24}, -{56,-20,25}, -{56,-20,26}, -{56,-20,27}, -{56,-20,28}, -{56,-20,29}, -{56,-20,30}, -{56,-20,31}, -{56,-20,32}, -{56,-20,33}, -{56,-20,34}, -{56,-20,35}, -{56,-20,36}, -{56,-20,37}, -{56,-20,38}, -{56,-20,39}, -{56,-20,40}, -{56,-20,41}, -{56,-20,42}, -{56,-20,43}, -{56,-20,44}, -{56,-20,45}, -{56,-20,46}, -{56,-20,47}, -{56,-20,48}, -{56,-20,49}, -{56,-20,50}, -{56,-20,51}, -{56,-20,52}, -{56,-20,53}, -{56,-20,54}, -{56,-20,55}, -{56,-20,56}, -{56,-20,57}, -{56,-20,58}, -{56,-20,59}, -{56,-19,-28}, -{56,-19,-27}, -{56,-19,-26}, -{56,-19,-25}, -{56,-19,-24}, -{56,-19,-23}, -{56,-19,-22}, -{56,-19,-21}, -{56,-19,-20}, -{56,-19,-19}, -{56,-19,-18}, -{56,-19,-17}, -{56,-19,-16}, -{56,-19,-15}, -{56,-19,-14}, -{56,-19,-13}, -{56,-19,-12}, -{56,-19,-11}, -{56,-19,-10}, -{56,-19,-9}, -{56,-19,-8}, -{56,-19,-7}, -{56,-19,-6}, -{56,-19,-5}, -{56,-19,-4}, -{56,-19,-3}, -{56,-19,-2}, -{56,-19,-1}, -{56,-19,0}, -{56,-19,1}, -{56,-19,2}, -{56,-19,3}, -{56,-19,4}, -{56,-19,5}, -{56,-19,6}, -{56,-19,7}, -{56,-19,8}, -{56,-19,9}, -{56,-19,10}, -{56,-19,11}, -{56,-19,12}, -{56,-19,13}, -{56,-19,14}, -{56,-19,15}, -{56,-19,16}, -{56,-19,17}, -{56,-19,18}, -{56,-19,19}, -{56,-19,20}, -{56,-19,21}, -{56,-19,22}, -{56,-19,23}, -{56,-19,24}, -{56,-19,25}, -{56,-19,26}, -{56,-19,27}, -{56,-19,28}, -{56,-19,29}, -{56,-19,30}, -{56,-19,31}, -{56,-19,32}, -{56,-19,33}, -{56,-19,34}, -{56,-19,35}, -{56,-19,36}, -{56,-19,37}, -{56,-19,38}, -{56,-19,39}, -{56,-19,40}, -{56,-19,41}, -{56,-19,42}, -{56,-19,43}, -{56,-19,44}, -{56,-19,45}, -{56,-19,46}, -{56,-19,47}, -{56,-19,48}, -{56,-19,49}, -{56,-19,50}, -{56,-19,51}, -{56,-19,52}, -{56,-19,53}, -{56,-19,54}, -{56,-19,55}, -{56,-19,56}, -{56,-19,57}, -{56,-19,58}, -{56,-19,59}, -{56,-18,-30}, -{56,-18,-29}, -{56,-18,-28}, -{56,-18,-27}, -{56,-18,-26}, -{56,-18,-25}, -{56,-18,-24}, -{56,-18,-23}, -{56,-18,-22}, -{56,-18,-21}, -{56,-18,-20}, -{56,-18,-19}, -{56,-18,-18}, -{56,-18,-17}, -{56,-18,-16}, -{56,-18,-15}, -{56,-18,-14}, -{56,-18,-13}, -{56,-18,-12}, -{56,-18,-11}, -{56,-18,-10}, -{56,-18,-9}, -{56,-18,-8}, -{56,-18,-7}, -{56,-18,-6}, -{56,-18,-5}, -{56,-18,-4}, -{56,-18,-3}, -{56,-18,-2}, -{56,-18,-1}, -{56,-18,0}, -{56,-18,1}, -{56,-18,2}, -{56,-18,3}, -{56,-18,4}, -{56,-18,5}, -{56,-18,6}, -{56,-18,7}, -{56,-18,8}, -{56,-18,9}, -{56,-18,10}, -{56,-18,11}, -{56,-18,12}, -{56,-18,13}, -{56,-18,14}, -{56,-18,15}, -{56,-18,16}, -{56,-18,17}, -{56,-18,18}, -{56,-18,19}, -{56,-18,20}, -{56,-18,21}, -{56,-18,22}, -{56,-18,23}, -{56,-18,24}, -{56,-18,25}, -{56,-18,26}, -{56,-18,27}, -{56,-18,28}, -{56,-18,29}, -{56,-18,30}, -{56,-18,31}, -{56,-18,32}, -{56,-18,33}, -{56,-18,34}, -{56,-18,35}, -{56,-18,36}, -{56,-18,37}, -{56,-18,38}, -{56,-18,39}, -{56,-18,40}, -{56,-18,41}, -{56,-18,42}, -{56,-18,43}, -{56,-18,44}, -{56,-18,45}, -{56,-18,46}, -{56,-18,47}, -{56,-18,48}, -{56,-18,49}, -{56,-18,50}, -{56,-18,51}, -{56,-18,52}, -{56,-18,53}, -{56,-18,54}, -{56,-18,55}, -{56,-18,56}, -{56,-18,57}, -{56,-18,58}, -{56,-18,59}, -{56,-18,60}, -{56,-17,-31}, -{56,-17,-30}, -{56,-17,-29}, -{56,-17,-28}, -{56,-17,-27}, -{56,-17,-26}, -{56,-17,-25}, -{56,-17,-24}, -{56,-17,-23}, -{56,-17,-22}, -{56,-17,-21}, -{56,-17,-20}, -{56,-17,-19}, -{56,-17,-18}, -{56,-17,-17}, -{56,-17,-16}, -{56,-17,-15}, -{56,-17,-14}, -{56,-17,-13}, -{56,-17,-12}, -{56,-17,-11}, -{56,-17,-10}, -{56,-17,-9}, -{56,-17,-8}, -{56,-17,-7}, -{56,-17,-6}, -{56,-17,-5}, -{56,-17,-4}, -{56,-17,-3}, -{56,-17,-2}, -{56,-17,-1}, -{56,-17,0}, -{56,-17,1}, -{56,-17,2}, -{56,-17,3}, -{56,-17,4}, -{56,-17,5}, -{56,-17,6}, -{56,-17,7}, -{56,-17,8}, -{56,-17,9}, -{56,-17,10}, -{56,-17,11}, -{56,-17,12}, -{56,-17,13}, -{56,-17,14}, -{56,-17,15}, -{56,-17,16}, -{56,-17,17}, -{56,-17,18}, -{56,-17,19}, -{56,-17,20}, -{56,-17,21}, -{56,-17,22}, -{56,-17,23}, -{56,-17,24}, -{56,-17,25}, -{56,-17,26}, -{56,-17,27}, -{56,-17,28}, -{56,-17,29}, -{56,-17,30}, -{56,-17,31}, -{56,-17,32}, -{56,-17,33}, -{56,-17,34}, -{56,-17,35}, -{56,-17,36}, -{56,-17,37}, -{56,-17,38}, -{56,-17,39}, -{56,-17,40}, -{56,-17,41}, -{56,-17,42}, -{56,-17,43}, -{56,-17,44}, -{56,-17,45}, -{56,-17,46}, -{56,-17,47}, -{56,-17,48}, -{56,-17,49}, -{56,-17,50}, -{56,-17,51}, -{56,-17,52}, -{56,-17,53}, -{56,-17,54}, -{56,-17,55}, -{56,-17,56}, -{56,-17,57}, -{56,-17,58}, -{56,-17,59}, -{56,-17,60}, -{56,-16,-32}, -{56,-16,-31}, -{56,-16,-30}, -{56,-16,-29}, -{56,-16,-28}, -{56,-16,-27}, -{56,-16,-26}, -{56,-16,-25}, -{56,-16,-24}, -{56,-16,-23}, -{56,-16,-22}, -{56,-16,-21}, -{56,-16,-20}, -{56,-16,-19}, -{56,-16,-18}, -{56,-16,-17}, -{56,-16,-16}, -{56,-16,-15}, -{56,-16,-14}, -{56,-16,-13}, -{56,-16,-12}, -{56,-16,-11}, -{56,-16,-10}, -{56,-16,-9}, -{56,-16,-8}, -{56,-16,-7}, -{56,-16,-6}, -{56,-16,-5}, -{56,-16,-4}, -{56,-16,-3}, -{56,-16,-2}, -{56,-16,-1}, -{56,-16,0}, -{56,-16,1}, -{56,-16,2}, -{56,-16,3}, -{56,-16,4}, -{56,-16,5}, -{56,-16,6}, -{56,-16,7}, -{56,-16,8}, -{56,-16,9}, -{56,-16,10}, -{56,-16,11}, -{56,-16,12}, -{56,-16,13}, -{56,-16,14}, -{56,-16,15}, -{56,-16,16}, -{56,-16,17}, -{56,-16,18}, -{56,-16,19}, -{56,-16,20}, -{56,-16,21}, -{56,-16,22}, -{56,-16,23}, -{56,-16,24}, -{56,-16,25}, -{56,-16,26}, -{56,-16,27}, -{56,-16,28}, -{56,-16,29}, -{56,-16,30}, -{56,-16,31}, -{56,-16,32}, -{56,-16,33}, -{56,-16,34}, -{56,-16,35}, -{56,-16,36}, -{56,-16,37}, -{56,-16,38}, -{56,-16,39}, -{56,-16,40}, -{56,-16,41}, -{56,-16,42}, -{56,-16,43}, -{56,-16,44}, -{56,-16,45}, -{56,-16,46}, -{56,-16,47}, -{56,-16,48}, -{56,-16,49}, -{56,-16,50}, -{56,-16,51}, -{56,-16,52}, -{56,-16,53}, -{56,-16,54}, -{56,-16,55}, -{56,-16,56}, -{56,-16,57}, -{56,-16,58}, -{56,-16,59}, -{56,-16,60}, -{56,-15,-34}, -{56,-15,-33}, -{56,-15,-32}, -{56,-15,-31}, -{56,-15,-30}, -{56,-15,-29}, -{56,-15,-28}, -{56,-15,-27}, -{56,-15,-26}, -{56,-15,-25}, -{56,-15,-24}, -{56,-15,-23}, -{56,-15,-22}, -{56,-15,-21}, -{56,-15,-20}, -{56,-15,-19}, -{56,-15,-18}, -{56,-15,-17}, -{56,-15,-16}, -{56,-15,-15}, -{56,-15,-14}, -{56,-15,-13}, -{56,-15,-12}, -{56,-15,-11}, -{56,-15,-10}, -{56,-15,-9}, -{56,-15,-8}, -{56,-15,-7}, -{56,-15,-6}, -{56,-15,-5}, -{56,-15,-4}, -{56,-15,-3}, -{56,-15,-2}, -{56,-15,-1}, -{56,-15,0}, -{56,-15,1}, -{56,-15,2}, -{56,-15,3}, -{56,-15,4}, -{56,-15,5}, -{56,-15,6}, -{56,-15,7}, -{56,-15,8}, -{56,-15,9}, -{56,-15,10}, -{56,-15,11}, -{56,-15,12}, -{56,-15,13}, -{56,-15,14}, -{56,-15,15}, -{56,-15,16}, -{56,-15,17}, -{56,-15,18}, -{56,-15,19}, -{56,-15,20}, -{56,-15,21}, -{56,-15,22}, -{56,-15,23}, -{56,-15,24}, -{56,-15,25}, -{56,-15,26}, -{56,-15,27}, -{56,-15,28}, -{56,-15,29}, -{56,-15,30}, -{56,-15,31}, -{56,-15,32}, -{56,-15,33}, -{56,-15,34}, -{56,-15,35}, -{56,-15,36}, -{56,-15,37}, -{56,-15,38}, -{56,-15,39}, -{56,-15,40}, -{56,-15,41}, -{56,-15,42}, -{56,-15,43}, -{56,-15,44}, -{56,-15,45}, -{56,-15,46}, -{56,-15,47}, -{56,-15,48}, -{56,-15,49}, -{56,-15,50}, -{56,-15,51}, -{56,-15,52}, -{56,-15,53}, -{56,-15,54}, -{56,-15,55}, -{56,-15,56}, -{56,-15,57}, -{56,-15,58}, -{56,-15,59}, -{56,-15,60}, -{56,-14,-35}, -{56,-14,-34}, -{56,-14,-33}, -{56,-14,-32}, -{56,-14,-31}, -{56,-14,-30}, -{56,-14,-29}, -{56,-14,-28}, -{56,-14,-27}, -{56,-14,-26}, -{56,-14,-25}, -{56,-14,-24}, -{56,-14,-23}, -{56,-14,-22}, -{56,-14,-21}, -{56,-14,-20}, -{56,-14,-19}, -{56,-14,-18}, -{56,-14,-17}, -{56,-14,-16}, -{56,-14,-15}, -{56,-14,-14}, -{56,-14,-13}, -{56,-14,-12}, -{56,-14,-11}, -{56,-14,-10}, -{56,-14,-9}, -{56,-14,-8}, -{56,-14,-7}, -{56,-14,-6}, -{56,-14,-5}, -{56,-14,-4}, -{56,-14,-3}, -{56,-14,-2}, -{56,-14,-1}, -{56,-14,0}, -{56,-14,1}, -{56,-14,2}, -{56,-14,3}, -{56,-14,4}, -{56,-14,5}, -{56,-14,6}, -{56,-14,7}, -{56,-14,8}, -{56,-14,9}, -{56,-14,10}, -{56,-14,11}, -{56,-14,12}, -{56,-14,13}, -{56,-14,14}, -{56,-14,15}, -{56,-14,16}, -{56,-14,17}, -{56,-14,18}, -{56,-14,19}, -{56,-14,20}, -{56,-14,21}, -{56,-14,22}, -{56,-14,23}, -{56,-14,24}, -{56,-14,25}, -{56,-14,26}, -{56,-14,27}, -{56,-14,28}, -{56,-14,29}, -{56,-14,30}, -{56,-14,31}, -{56,-14,32}, -{56,-14,33}, -{56,-14,34}, -{56,-14,35}, -{56,-14,36}, -{56,-14,37}, -{56,-14,38}, -{56,-14,39}, -{56,-14,40}, -{56,-14,41}, -{56,-14,42}, -{56,-14,43}, -{56,-14,44}, -{56,-14,45}, -{56,-14,46}, -{56,-14,47}, -{56,-14,48}, -{56,-14,49}, -{56,-14,50}, -{56,-14,51}, -{56,-14,52}, -{56,-14,53}, -{56,-14,54}, -{56,-14,55}, -{56,-14,56}, -{56,-14,57}, -{56,-14,58}, -{56,-14,59}, -{56,-14,60}, -{56,-13,-36}, -{56,-13,-35}, -{56,-13,-34}, -{56,-13,-33}, -{56,-13,-32}, -{56,-13,-31}, -{56,-13,-30}, -{56,-13,-29}, -{56,-13,-28}, -{56,-13,-27}, -{56,-13,-26}, -{56,-13,-25}, -{56,-13,-24}, -{56,-13,-23}, -{56,-13,-22}, -{56,-13,-21}, -{56,-13,-20}, -{56,-13,-19}, -{56,-13,-18}, -{56,-13,-17}, -{56,-13,-16}, -{56,-13,-15}, -{56,-13,-14}, -{56,-13,-13}, -{56,-13,-12}, -{56,-13,-11}, -{56,-13,-10}, -{56,-13,-9}, -{56,-13,-8}, -{56,-13,-7}, -{56,-13,-6}, -{56,-13,-5}, -{56,-13,-4}, -{56,-13,-3}, -{56,-13,-2}, -{56,-13,-1}, -{56,-13,0}, -{56,-13,1}, -{56,-13,2}, -{56,-13,3}, -{56,-13,4}, -{56,-13,5}, -{56,-13,6}, -{56,-13,7}, -{56,-13,8}, -{56,-13,9}, -{56,-13,10}, -{56,-13,11}, -{56,-13,12}, -{56,-13,13}, -{56,-13,14}, -{56,-13,15}, -{56,-13,16}, -{56,-13,17}, -{56,-13,18}, -{56,-13,19}, -{56,-13,20}, -{56,-13,21}, -{56,-13,22}, -{56,-13,23}, -{56,-13,24}, -{56,-13,25}, -{56,-13,26}, -{56,-13,27}, -{56,-13,28}, -{56,-13,29}, -{56,-13,30}, -{56,-13,31}, -{56,-13,32}, -{56,-13,33}, -{56,-13,34}, -{56,-13,35}, -{56,-13,36}, -{56,-13,37}, -{56,-13,38}, -{56,-13,39}, -{56,-13,40}, -{56,-13,41}, -{56,-13,42}, -{56,-13,43}, -{56,-13,44}, -{56,-13,45}, -{56,-13,46}, -{56,-13,47}, -{56,-13,48}, -{56,-13,49}, -{56,-13,50}, -{56,-13,51}, -{56,-13,52}, -{56,-13,53}, -{56,-13,54}, -{56,-13,55}, -{56,-13,56}, -{56,-13,57}, -{56,-13,58}, -{56,-13,59}, -{56,-13,60}, -{56,-12,-37}, -{56,-12,-36}, -{56,-12,-35}, -{56,-12,-34}, -{56,-12,-33}, -{56,-12,-32}, -{56,-12,-31}, -{56,-12,-30}, -{56,-12,-29}, -{56,-12,-28}, -{56,-12,-27}, -{56,-12,-26}, -{56,-12,-25}, -{56,-12,-24}, -{56,-12,-23}, -{56,-12,-22}, -{56,-12,-21}, -{56,-12,-20}, -{56,-12,-19}, -{56,-12,-18}, -{56,-12,-17}, -{56,-12,-16}, -{56,-12,-15}, -{56,-12,-14}, -{56,-12,-13}, -{56,-12,-12}, -{56,-12,-11}, -{56,-12,-10}, -{56,-12,-9}, -{56,-12,-8}, -{56,-12,-7}, -{56,-12,-6}, -{56,-12,-5}, -{56,-12,-4}, -{56,-12,-3}, -{56,-12,-2}, -{56,-12,-1}, -{56,-12,0}, -{56,-12,1}, -{56,-12,2}, -{56,-12,3}, -{56,-12,4}, -{56,-12,5}, -{56,-12,6}, -{56,-12,7}, -{56,-12,8}, -{56,-12,9}, -{56,-12,10}, -{56,-12,11}, -{56,-12,12}, -{56,-12,13}, -{56,-12,14}, -{56,-12,15}, -{56,-12,16}, -{56,-12,17}, -{56,-12,18}, -{56,-12,19}, -{56,-12,20}, -{56,-12,21}, -{56,-12,22}, -{56,-12,23}, -{56,-12,24}, -{56,-12,25}, -{56,-12,26}, -{56,-12,27}, -{56,-12,28}, -{56,-12,29}, -{56,-12,30}, -{56,-12,31}, -{56,-12,32}, -{56,-12,33}, -{56,-12,34}, -{56,-12,35}, -{56,-12,36}, -{56,-12,37}, -{56,-12,38}, -{56,-12,39}, -{56,-12,40}, -{56,-12,41}, -{56,-12,42}, -{56,-12,43}, -{56,-12,44}, -{56,-12,45}, -{56,-12,46}, -{56,-12,47}, -{56,-12,48}, -{56,-12,49}, -{56,-12,50}, -{56,-12,51}, -{56,-12,52}, -{56,-12,53}, -{56,-12,54}, -{56,-12,55}, -{56,-12,56}, -{56,-12,57}, -{56,-12,58}, -{56,-12,59}, -{56,-12,60}, -{56,-11,-38}, -{56,-11,-37}, -{56,-11,-36}, -{56,-11,-35}, -{56,-11,-34}, -{56,-11,-33}, -{56,-11,-32}, -{56,-11,-31}, -{56,-11,-30}, -{56,-11,-29}, -{56,-11,-28}, -{56,-11,-27}, -{56,-11,-26}, -{56,-11,-25}, -{56,-11,-24}, -{56,-11,-23}, -{56,-11,-22}, -{56,-11,-21}, -{56,-11,-20}, -{56,-11,-19}, -{56,-11,-18}, -{56,-11,-17}, -{56,-11,-16}, -{56,-11,-15}, -{56,-11,-14}, -{56,-11,-13}, -{56,-11,-12}, -{56,-11,-11}, -{56,-11,-10}, -{56,-11,-9}, -{56,-11,-8}, -{56,-11,-7}, -{56,-11,-6}, -{56,-11,-5}, -{56,-11,-4}, -{56,-11,-3}, -{56,-11,-2}, -{56,-11,-1}, -{56,-11,0}, -{56,-11,1}, -{56,-11,2}, -{56,-11,3}, -{56,-11,4}, -{56,-11,5}, -{56,-11,6}, -{56,-11,7}, -{56,-11,8}, -{56,-11,9}, -{56,-11,10}, -{56,-11,11}, -{56,-11,12}, -{56,-11,13}, -{56,-11,14}, -{56,-11,15}, -{56,-11,16}, -{56,-11,17}, -{56,-11,18}, -{56,-11,19}, -{56,-11,20}, -{56,-11,21}, -{56,-11,22}, -{56,-11,23}, -{56,-11,24}, -{56,-11,25}, -{56,-11,26}, -{56,-11,27}, -{56,-11,28}, -{56,-11,29}, -{56,-11,30}, -{56,-11,31}, -{56,-11,32}, -{56,-11,33}, -{56,-11,34}, -{56,-11,35}, -{56,-11,36}, -{56,-11,37}, -{56,-11,38}, -{56,-11,39}, -{56,-11,40}, -{56,-11,41}, -{56,-11,42}, -{56,-11,43}, -{56,-11,44}, -{56,-11,45}, -{56,-11,46}, -{56,-11,47}, -{56,-11,48}, -{56,-11,49}, -{56,-11,50}, -{56,-11,51}, -{56,-11,52}, -{56,-11,53}, -{56,-11,54}, -{56,-11,55}, -{56,-11,56}, -{56,-11,57}, -{56,-11,58}, -{56,-11,59}, -{56,-11,60}, -{56,-10,-40}, -{56,-10,-39}, -{56,-10,-38}, -{56,-10,-37}, -{56,-10,-36}, -{56,-10,-35}, -{56,-10,-34}, -{56,-10,-33}, -{56,-10,-32}, -{56,-10,-31}, -{56,-10,-30}, -{56,-10,-29}, -{56,-10,-28}, -{56,-10,-27}, -{56,-10,-26}, -{56,-10,-25}, -{56,-10,-24}, -{56,-10,-23}, -{56,-10,-22}, -{56,-10,-21}, -{56,-10,-20}, -{56,-10,-19}, -{56,-10,-18}, -{56,-10,-17}, -{56,-10,-16}, -{56,-10,-15}, -{56,-10,-14}, -{56,-10,-13}, -{56,-10,-12}, -{56,-10,-11}, -{56,-10,-10}, -{56,-10,-9}, -{56,-10,-8}, -{56,-10,-7}, -{56,-10,-6}, -{56,-10,-5}, -{56,-10,-4}, -{56,-10,-3}, -{56,-10,-2}, -{56,-10,-1}, -{56,-10,0}, -{56,-10,1}, -{56,-10,2}, -{56,-10,3}, -{56,-10,4}, -{56,-10,5}, -{56,-10,6}, -{56,-10,7}, -{56,-10,8}, -{56,-10,9}, -{56,-10,10}, -{56,-10,11}, -{56,-10,12}, -{56,-10,13}, -{56,-10,14}, -{56,-10,15}, -{56,-10,16}, -{56,-10,17}, -{56,-10,18}, -{56,-10,19}, -{56,-10,20}, -{56,-10,21}, -{56,-10,22}, -{56,-10,23}, -{56,-10,24}, -{56,-10,25}, -{56,-10,26}, -{56,-10,27}, -{56,-10,28}, -{56,-10,29}, -{56,-10,30}, -{56,-10,31}, -{56,-10,32}, -{56,-10,33}, -{56,-10,34}, -{56,-10,35}, -{56,-10,36}, -{56,-10,37}, -{56,-10,38}, -{56,-10,39}, -{56,-10,40}, -{56,-10,41}, -{56,-10,42}, -{56,-10,43}, -{56,-10,44}, -{56,-10,45}, -{56,-10,46}, -{56,-10,47}, -{56,-10,48}, -{56,-10,49}, -{56,-10,50}, -{56,-10,51}, -{56,-10,52}, -{56,-10,53}, -{56,-10,54}, -{56,-10,55}, -{56,-10,56}, -{56,-10,57}, -{56,-10,58}, -{56,-10,59}, -{56,-10,60}, -{56,-9,-41}, -{56,-9,-40}, -{56,-9,-39}, -{56,-9,-38}, -{56,-9,-37}, -{56,-9,-36}, -{56,-9,-35}, -{56,-9,-34}, -{56,-9,-33}, -{56,-9,-32}, -{56,-9,-31}, -{56,-9,-30}, -{56,-9,-29}, -{56,-9,-28}, -{56,-9,-27}, -{56,-9,-26}, -{56,-9,-25}, -{56,-9,-24}, -{56,-9,-23}, -{56,-9,-22}, -{56,-9,-21}, -{56,-9,-20}, -{56,-9,-19}, -{56,-9,-18}, -{56,-9,-17}, -{56,-9,-16}, -{56,-9,-15}, -{56,-9,-14}, -{56,-9,-13}, -{56,-9,-12}, -{56,-9,-11}, -{56,-9,-10}, -{56,-9,-9}, -{56,-9,-8}, -{56,-9,-7}, -{56,-9,-6}, -{56,-9,-5}, -{56,-9,-4}, -{56,-9,-3}, -{56,-9,-2}, -{56,-9,-1}, -{56,-9,0}, -{56,-9,1}, -{56,-9,2}, -{56,-9,3}, -{56,-9,4}, -{56,-9,5}, -{56,-9,6}, -{56,-9,7}, -{56,-9,8}, -{56,-9,9}, -{56,-9,10}, -{56,-9,11}, -{56,-9,12}, -{56,-9,13}, -{56,-9,14}, -{56,-9,15}, -{56,-9,16}, -{56,-9,17}, -{56,-9,18}, -{56,-9,19}, -{56,-9,20}, -{56,-9,21}, -{56,-9,22}, -{56,-9,23}, -{56,-9,24}, -{56,-9,25}, -{56,-9,26}, -{56,-9,27}, -{56,-9,28}, -{56,-9,29}, -{56,-9,30}, -{56,-9,31}, -{56,-9,32}, -{56,-9,33}, -{56,-9,34}, -{56,-9,35}, -{56,-9,36}, -{56,-9,37}, -{56,-9,38}, -{56,-9,39}, -{56,-9,40}, -{56,-9,41}, -{56,-9,42}, -{56,-9,43}, -{56,-9,44}, -{56,-9,45}, -{56,-9,46}, -{56,-9,47}, -{56,-9,48}, -{56,-9,49}, -{56,-9,50}, -{56,-9,51}, -{56,-9,52}, -{56,-9,53}, -{56,-9,54}, -{56,-9,55}, -{56,-9,56}, -{56,-9,57}, -{56,-9,58}, -{56,-9,59}, -{56,-9,60}, -{56,-8,-42}, -{56,-8,-41}, -{56,-8,-40}, -{56,-8,-39}, -{56,-8,-38}, -{56,-8,-37}, -{56,-8,-36}, -{56,-8,-35}, -{56,-8,-34}, -{56,-8,-33}, -{56,-8,-32}, -{56,-8,-31}, -{56,-8,-30}, -{56,-8,-29}, -{56,-8,-28}, -{56,-8,-27}, -{56,-8,-26}, -{56,-8,-25}, -{56,-8,-24}, -{56,-8,-23}, -{56,-8,-22}, -{56,-8,-21}, -{56,-8,-20}, -{56,-8,-19}, -{56,-8,-18}, -{56,-8,-17}, -{56,-8,-16}, -{56,-8,-15}, -{56,-8,-14}, -{56,-8,-13}, -{56,-8,-12}, -{56,-8,-11}, -{56,-8,-10}, -{56,-8,-9}, -{56,-8,-8}, -{56,-8,-7}, -{56,-8,-6}, -{56,-8,-5}, -{56,-8,-4}, -{56,-8,-3}, -{56,-8,-2}, -{56,-8,-1}, -{56,-8,0}, -{56,-8,1}, -{56,-8,2}, -{56,-8,3}, -{56,-8,4}, -{56,-8,5}, -{56,-8,6}, -{56,-8,7}, -{56,-8,8}, -{56,-8,9}, -{56,-8,10}, -{56,-8,11}, -{56,-8,12}, -{56,-8,13}, -{56,-8,14}, -{56,-8,15}, -{56,-8,16}, -{56,-8,17}, -{56,-8,18}, -{56,-8,19}, -{56,-8,20}, -{56,-8,21}, -{56,-8,22}, -{56,-8,23}, -{56,-8,24}, -{56,-8,25}, -{56,-8,26}, -{56,-8,27}, -{56,-8,28}, -{56,-8,29}, -{56,-8,30}, -{56,-8,31}, -{56,-8,32}, -{56,-8,33}, -{56,-8,34}, -{56,-8,35}, -{56,-8,36}, -{56,-8,37}, -{56,-8,38}, -{56,-8,39}, -{56,-8,40}, -{56,-8,41}, -{56,-8,42}, -{56,-8,43}, -{56,-8,44}, -{56,-8,45}, -{56,-8,46}, -{56,-8,47}, -{56,-8,48}, -{56,-8,49}, -{56,-8,50}, -{56,-8,51}, -{56,-8,52}, -{56,-8,53}, -{56,-8,54}, -{56,-8,55}, -{56,-8,56}, -{56,-8,57}, -{56,-8,58}, -{56,-8,59}, -{56,-8,60}, -{56,-7,-43}, -{56,-7,-42}, -{56,-7,-41}, -{56,-7,-40}, -{56,-7,-39}, -{56,-7,-38}, -{56,-7,-37}, -{56,-7,-36}, -{56,-7,-35}, -{56,-7,-34}, -{56,-7,-33}, -{56,-7,-32}, -{56,-7,-31}, -{56,-7,-30}, -{56,-7,-29}, -{56,-7,-28}, -{56,-7,-27}, -{56,-7,-26}, -{56,-7,-25}, -{56,-7,-24}, -{56,-7,-23}, -{56,-7,-22}, -{56,-7,-21}, -{56,-7,-20}, -{56,-7,-19}, -{56,-7,-18}, -{56,-7,-17}, -{56,-7,-16}, -{56,-7,-15}, -{56,-7,-14}, -{56,-7,-13}, -{56,-7,-12}, -{56,-7,-11}, -{56,-7,-10}, -{56,-7,-9}, -{56,-7,-8}, -{56,-7,-7}, -{56,-7,-6}, -{56,-7,-5}, -{56,-7,-4}, -{56,-7,-3}, -{56,-7,-2}, -{56,-7,-1}, -{56,-7,0}, -{56,-7,1}, -{56,-7,2}, -{56,-7,3}, -{56,-7,4}, -{56,-7,5}, -{56,-7,6}, -{56,-7,7}, -{56,-7,8}, -{56,-7,9}, -{56,-7,10}, -{56,-7,11}, -{56,-7,12}, -{56,-7,13}, -{56,-7,14}, -{56,-7,15}, -{56,-7,16}, -{56,-7,17}, -{56,-7,18}, -{56,-7,19}, -{56,-7,20}, -{56,-7,21}, -{56,-7,22}, -{56,-7,23}, -{56,-7,24}, -{56,-7,25}, -{56,-7,26}, -{56,-7,27}, -{56,-7,28}, -{56,-7,29}, -{56,-7,30}, -{56,-7,31}, -{56,-7,32}, -{56,-7,33}, -{56,-7,34}, -{56,-7,35}, -{56,-7,36}, -{56,-7,37}, -{56,-7,38}, -{56,-7,39}, -{56,-7,40}, -{56,-7,41}, -{56,-7,42}, -{56,-7,43}, -{56,-7,44}, -{56,-7,45}, -{56,-7,46}, -{56,-7,47}, -{56,-7,48}, -{56,-7,49}, -{56,-7,50}, -{56,-7,51}, -{56,-7,52}, -{56,-7,53}, -{56,-7,54}, -{56,-7,55}, -{56,-7,56}, -{56,-7,57}, -{56,-7,58}, -{56,-7,59}, -{56,-7,60}, -{56,-6,-44}, -{56,-6,-43}, -{56,-6,-42}, -{56,-6,-41}, -{56,-6,-40}, -{56,-6,-39}, -{56,-6,-38}, -{56,-6,-37}, -{56,-6,-36}, -{56,-6,-35}, -{56,-6,-34}, -{56,-6,-33}, -{56,-6,-32}, -{56,-6,-31}, -{56,-6,-30}, -{56,-6,-29}, -{56,-6,-28}, -{56,-6,-27}, -{56,-6,-26}, -{56,-6,-25}, -{56,-6,-24}, -{56,-6,-23}, -{56,-6,-22}, -{56,-6,-21}, -{56,-6,-20}, -{56,-6,-19}, -{56,-6,-18}, -{56,-6,-17}, -{56,-6,-16}, -{56,-6,-15}, -{56,-6,-14}, -{56,-6,-13}, -{56,-6,-12}, -{56,-6,-11}, -{56,-6,-10}, -{56,-6,-9}, -{56,-6,-8}, -{56,-6,-7}, -{56,-6,-6}, -{56,-6,-5}, -{56,-6,-4}, -{56,-6,-3}, -{56,-6,-2}, -{56,-6,-1}, -{56,-6,0}, -{56,-6,1}, -{56,-6,2}, -{56,-6,3}, -{56,-6,4}, -{56,-6,5}, -{56,-6,6}, -{56,-6,7}, -{56,-6,8}, -{56,-6,9}, -{56,-6,10}, -{56,-6,11}, -{56,-6,12}, -{56,-6,13}, -{56,-6,14}, -{56,-6,15}, -{56,-6,16}, -{56,-6,17}, -{56,-6,18}, -{56,-6,19}, -{56,-6,20}, -{56,-6,21}, -{56,-6,22}, -{56,-6,23}, -{56,-6,24}, -{56,-6,25}, -{56,-6,26}, -{56,-6,27}, -{56,-6,28}, -{56,-6,29}, -{56,-6,30}, -{56,-6,31}, -{56,-6,32}, -{56,-6,33}, -{56,-6,34}, -{56,-6,35}, -{56,-6,36}, -{56,-6,37}, -{56,-6,38}, -{56,-6,39}, -{56,-6,40}, -{56,-6,41}, -{56,-6,42}, -{56,-6,43}, -{56,-6,44}, -{56,-6,45}, -{56,-6,46}, -{56,-6,47}, -{56,-6,48}, -{56,-6,49}, -{56,-6,50}, -{56,-6,51}, -{56,-6,52}, -{56,-6,53}, -{56,-6,54}, -{56,-6,55}, -{56,-6,56}, -{56,-6,57}, -{56,-6,58}, -{56,-6,59}, -{56,-6,60}, -{56,-5,-46}, -{56,-5,-45}, -{56,-5,-44}, -{56,-5,-43}, -{56,-5,-42}, -{56,-5,-41}, -{56,-5,-40}, -{56,-5,-39}, -{56,-5,-38}, -{56,-5,-37}, -{56,-5,-36}, -{56,-5,-35}, -{56,-5,-34}, -{56,-5,-33}, -{56,-5,-32}, -{56,-5,-31}, -{56,-5,-30}, -{56,-5,-29}, -{56,-5,-28}, -{56,-5,-27}, -{56,-5,-26}, -{56,-5,-25}, -{56,-5,-24}, -{56,-5,-23}, -{56,-5,-22}, -{56,-5,-21}, -{56,-5,-20}, -{56,-5,-19}, -{56,-5,-18}, -{56,-5,-17}, -{56,-5,-16}, -{56,-5,-15}, -{56,-5,-14}, -{56,-5,-13}, -{56,-5,-12}, -{56,-5,-11}, -{56,-5,-10}, -{56,-5,-9}, -{56,-5,-8}, -{56,-5,-7}, -{56,-5,-6}, -{56,-5,-5}, -{56,-5,-4}, -{56,-5,-3}, -{56,-5,-2}, -{56,-5,-1}, -{56,-5,0}, -{56,-5,1}, -{56,-5,2}, -{56,-5,3}, -{56,-5,4}, -{56,-5,5}, -{56,-5,6}, -{56,-5,7}, -{56,-5,8}, -{56,-5,9}, -{56,-5,10}, -{56,-5,11}, -{56,-5,12}, -{56,-5,13}, -{56,-5,14}, -{56,-5,15}, -{56,-5,16}, -{56,-5,17}, -{56,-5,18}, -{56,-5,19}, -{56,-5,20}, -{56,-5,21}, -{56,-5,22}, -{56,-5,23}, -{56,-5,24}, -{56,-5,25}, -{56,-5,26}, -{56,-5,27}, -{56,-5,28}, -{56,-5,29}, -{56,-5,30}, -{56,-5,31}, -{56,-5,32}, -{56,-5,33}, -{56,-5,34}, -{56,-5,35}, -{56,-5,36}, -{56,-5,37}, -{56,-5,38}, -{56,-5,39}, -{56,-5,40}, -{56,-5,41}, -{56,-5,42}, -{56,-5,43}, -{56,-5,44}, -{56,-5,45}, -{56,-5,46}, -{56,-5,47}, -{56,-5,48}, -{56,-5,49}, -{56,-5,50}, -{56,-5,51}, -{56,-5,52}, -{56,-5,53}, -{56,-5,54}, -{56,-5,55}, -{56,-5,56}, -{56,-5,57}, -{56,-5,58}, -{56,-5,59}, -{56,-5,60}, -{56,-4,-47}, -{56,-4,-46}, -{56,-4,-45}, -{56,-4,-44}, -{56,-4,-43}, -{56,-4,-42}, -{56,-4,-41}, -{56,-4,-40}, -{56,-4,-39}, -{56,-4,-38}, -{56,-4,-37}, -{56,-4,-36}, -{56,-4,-35}, -{56,-4,-34}, -{56,-4,-33}, -{56,-4,-32}, -{56,-4,-31}, -{56,-4,-30}, -{56,-4,-29}, -{56,-4,-28}, -{56,-4,-27}, -{56,-4,-26}, -{56,-4,-25}, -{56,-4,-24}, -{56,-4,-23}, -{56,-4,-22}, -{56,-4,-21}, -{56,-4,-20}, -{56,-4,-19}, -{56,-4,-18}, -{56,-4,-17}, -{56,-4,-16}, -{56,-4,-15}, -{56,-4,-14}, -{56,-4,-13}, -{56,-4,-12}, -{56,-4,-11}, -{56,-4,-10}, -{56,-4,-9}, -{56,-4,-8}, -{56,-4,-7}, -{56,-4,-6}, -{56,-4,-5}, -{56,-4,-4}, -{56,-4,-3}, -{56,-4,-2}, -{56,-4,-1}, -{56,-4,0}, -{56,-4,1}, -{56,-4,2}, -{56,-4,3}, -{56,-4,4}, -{56,-4,5}, -{56,-4,6}, -{56,-4,7}, -{56,-4,8}, -{56,-4,9}, -{56,-4,10}, -{56,-4,11}, -{56,-4,12}, -{56,-4,13}, -{56,-4,14}, -{56,-4,15}, -{56,-4,16}, -{56,-4,17}, -{56,-4,18}, -{56,-4,19}, -{56,-4,20}, -{56,-4,21}, -{56,-4,22}, -{56,-4,23}, -{56,-4,24}, -{56,-4,25}, -{56,-4,26}, -{56,-4,27}, -{56,-4,28}, -{56,-4,29}, -{56,-4,30}, -{56,-4,31}, -{56,-4,32}, -{56,-4,33}, -{56,-4,34}, -{56,-4,35}, -{56,-4,36}, -{56,-4,37}, -{56,-4,38}, -{56,-4,39}, -{56,-4,40}, -{56,-4,41}, -{56,-4,42}, -{56,-4,43}, -{56,-4,44}, -{56,-4,45}, -{56,-4,46}, -{56,-4,47}, -{56,-4,48}, -{56,-4,49}, -{56,-4,50}, -{56,-4,51}, -{56,-4,52}, -{56,-4,53}, -{56,-4,54}, -{56,-4,55}, -{56,-4,56}, -{56,-4,57}, -{56,-4,58}, -{56,-4,59}, -{56,-4,60}, -{56,-3,-48}, -{56,-3,-47}, -{56,-3,-46}, -{56,-3,-45}, -{56,-3,-44}, -{56,-3,-43}, -{56,-3,-42}, -{56,-3,-41}, -{56,-3,-40}, -{56,-3,-39}, -{56,-3,-38}, -{56,-3,-37}, -{56,-3,-36}, -{56,-3,-35}, -{56,-3,-34}, -{56,-3,-33}, -{56,-3,-32}, -{56,-3,-31}, -{56,-3,-30}, -{56,-3,-29}, -{56,-3,-28}, -{56,-3,-27}, -{56,-3,-26}, -{56,-3,-25}, -{56,-3,-24}, -{56,-3,-23}, -{56,-3,-22}, -{56,-3,-21}, -{56,-3,-20}, -{56,-3,-19}, -{56,-3,-18}, -{56,-3,-17}, -{56,-3,-16}, -{56,-3,-15}, -{56,-3,-14}, -{56,-3,-13}, -{56,-3,-12}, -{56,-3,-11}, -{56,-3,-10}, -{56,-3,-9}, -{56,-3,-8}, -{56,-3,-7}, -{56,-3,-6}, -{56,-3,-5}, -{56,-3,-4}, -{56,-3,-3}, -{56,-3,-2}, -{56,-3,-1}, -{56,-3,0}, -{56,-3,1}, -{56,-3,2}, -{56,-3,3}, -{56,-3,4}, -{56,-3,5}, -{56,-3,6}, -{56,-3,7}, -{56,-3,8}, -{56,-3,9}, -{56,-3,10}, -{56,-3,11}, -{56,-3,12}, -{56,-3,13}, -{56,-3,14}, -{56,-3,15}, -{56,-3,16}, -{56,-3,17}, -{56,-3,18}, -{56,-3,19}, -{56,-3,20}, -{56,-3,21}, -{56,-3,22}, -{56,-3,23}, -{56,-3,24}, -{56,-3,25}, -{56,-3,26}, -{56,-3,27}, -{56,-3,28}, -{56,-3,29}, -{56,-3,30}, -{56,-3,31}, -{56,-3,32}, -{56,-3,33}, -{56,-3,34}, -{56,-3,35}, -{56,-3,36}, -{56,-3,37}, -{56,-3,38}, -{56,-3,39}, -{56,-3,40}, -{56,-3,41}, -{56,-3,42}, -{56,-3,43}, -{56,-3,44}, -{56,-3,45}, -{56,-3,46}, -{56,-3,47}, -{56,-3,48}, -{56,-3,49}, -{56,-3,50}, -{56,-3,51}, -{56,-3,52}, -{56,-3,53}, -{56,-3,54}, -{56,-3,55}, -{56,-3,56}, -{56,-3,57}, -{56,-3,58}, -{56,-3,59}, -{56,-3,60}, -{56,-3,61}, -{56,-2,-49}, -{56,-2,-48}, -{56,-2,-47}, -{56,-2,-46}, -{56,-2,-45}, -{56,-2,-44}, -{56,-2,-43}, -{56,-2,-42}, -{56,-2,-41}, -{56,-2,-40}, -{56,-2,-39}, -{56,-2,-38}, -{56,-2,-37}, -{56,-2,-36}, -{56,-2,-35}, -{56,-2,-34}, -{56,-2,-33}, -{56,-2,-32}, -{56,-2,-31}, -{56,-2,-30}, -{56,-2,-29}, -{56,-2,-28}, -{56,-2,-27}, -{56,-2,-26}, -{56,-2,-25}, -{56,-2,-24}, -{56,-2,-23}, -{56,-2,-22}, -{56,-2,-21}, -{56,-2,-20}, -{56,-2,-19}, -{56,-2,-18}, -{56,-2,-17}, -{56,-2,-16}, -{56,-2,-15}, -{56,-2,-14}, -{56,-2,-13}, -{56,-2,-12}, -{56,-2,-11}, -{56,-2,-10}, -{56,-2,-9}, -{56,-2,-8}, -{56,-2,-7}, -{56,-2,-6}, -{56,-2,-5}, -{56,-2,-4}, -{56,-2,-3}, -{56,-2,-2}, -{56,-2,-1}, -{56,-2,0}, -{56,-2,1}, -{56,-2,2}, -{56,-2,3}, -{56,-2,4}, -{56,-2,5}, -{56,-2,6}, -{56,-2,7}, -{56,-2,8}, -{56,-2,9}, -{56,-2,10}, -{56,-2,11}, -{56,-2,12}, -{56,-2,13}, -{56,-2,14}, -{56,-2,15}, -{56,-2,16}, -{56,-2,17}, -{56,-2,18}, -{56,-2,19}, -{56,-2,20}, -{56,-2,21}, -{56,-2,22}, -{56,-2,23}, -{56,-2,24}, -{56,-2,25}, -{56,-2,26}, -{56,-2,27}, -{56,-2,28}, -{56,-2,29}, -{56,-2,30}, -{56,-2,31}, -{56,-2,32}, -{56,-2,33}, -{56,-2,34}, -{56,-2,35}, -{56,-2,36}, -{56,-2,37}, -{56,-2,38}, -{56,-2,39}, -{56,-2,40}, -{56,-2,41}, -{56,-2,42}, -{56,-2,43}, -{56,-2,44}, -{56,-2,45}, -{56,-2,46}, -{56,-2,47}, -{56,-2,48}, -{56,-2,49}, -{56,-2,50}, -{56,-2,51}, -{56,-2,52}, -{56,-2,53}, -{56,-2,54}, -{56,-2,55}, -{56,-2,56}, -{56,-2,57}, -{56,-2,58}, -{56,-2,59}, -{56,-2,60}, -{56,-2,61}, -{56,-1,-50}, -{56,-1,-49}, -{56,-1,-48}, -{56,-1,-47}, -{56,-1,-46}, -{56,-1,-45}, -{56,-1,-44}, -{56,-1,-43}, -{56,-1,-42}, -{56,-1,-41}, -{56,-1,-40}, -{56,-1,-39}, -{56,-1,-38}, -{56,-1,-37}, -{56,-1,-36}, -{56,-1,-35}, -{56,-1,-34}, -{56,-1,-33}, -{56,-1,-32}, -{56,-1,-31}, -{56,-1,-30}, -{56,-1,-29}, -{56,-1,-28}, -{56,-1,-27}, -{56,-1,-26}, -{56,-1,-25}, -{56,-1,-24}, -{56,-1,-23}, -{56,-1,-22}, -{56,-1,-21}, -{56,-1,-20}, -{56,-1,-19}, -{56,-1,-18}, -{56,-1,-17}, -{56,-1,-16}, -{56,-1,-15}, -{56,-1,-14}, -{56,-1,-13}, -{56,-1,-12}, -{56,-1,-11}, -{56,-1,-10}, -{56,-1,-9}, -{56,-1,-8}, -{56,-1,-7}, -{56,-1,-6}, -{56,-1,-5}, -{56,-1,-4}, -{56,-1,-3}, -{56,-1,-2}, -{56,-1,-1}, -{56,-1,0}, -{56,-1,1}, -{56,-1,2}, -{56,-1,3}, -{56,-1,4}, -{56,-1,5}, -{56,-1,6}, -{56,-1,7}, -{56,-1,8}, -{56,-1,9}, -{56,-1,10}, -{56,-1,11}, -{56,-1,12}, -{56,-1,13}, -{56,-1,14}, -{56,-1,15}, -{56,-1,16}, -{56,-1,17}, -{56,-1,18}, -{56,-1,19}, -{56,-1,20}, -{56,-1,21}, -{56,-1,22}, -{56,-1,23}, -{56,-1,24}, -{56,-1,25}, -{56,-1,26}, -{56,-1,27}, -{56,-1,28}, -{56,-1,29}, -{56,-1,30}, -{56,-1,31}, -{56,-1,32}, -{56,-1,33}, -{56,-1,34}, -{56,-1,35}, -{56,-1,36}, -{56,-1,37}, -{56,-1,38}, -{56,-1,39}, -{56,-1,40}, -{56,-1,41}, -{56,-1,42}, -{56,-1,43}, -{56,-1,44}, -{56,-1,45}, -{56,-1,46}, -{56,-1,47}, -{56,-1,48}, -{56,-1,49}, -{56,-1,50}, -{56,-1,51}, -{56,-1,52}, -{56,-1,53}, -{56,-1,54}, -{56,-1,55}, -{56,-1,56}, -{56,-1,57}, -{56,-1,58}, -{56,-1,59}, -{56,-1,60}, -{56,-1,61}, -{56,0,-51}, -{56,0,-50}, -{56,0,-49}, -{56,0,-48}, -{56,0,-47}, -{56,0,-46}, -{56,0,-45}, -{56,0,-44}, -{56,0,-43}, -{56,0,-42}, -{56,0,-41}, -{56,0,-40}, -{56,0,-39}, -{56,0,-38}, -{56,0,-37}, -{56,0,-36}, -{56,0,-35}, -{56,0,-34}, -{56,0,-33}, -{56,0,-32}, -{56,0,-31}, -{56,0,-30}, -{56,0,-29}, -{56,0,-28}, -{56,0,-27}, -{56,0,-26}, -{56,0,-25}, -{56,0,-24}, -{56,0,-23}, -{56,0,-22}, -{56,0,-21}, -{56,0,-20}, -{56,0,-19}, -{56,0,-18}, -{56,0,-17}, -{56,0,-16}, -{56,0,-15}, -{56,0,-14}, -{56,0,-13}, -{56,0,-12}, -{56,0,-11}, -{56,0,-10}, -{56,0,-9}, -{56,0,-8}, -{56,0,-7}, -{56,0,-6}, -{56,0,-5}, -{56,0,-4}, -{56,0,-3}, -{56,0,-2}, -{56,0,-1}, -{56,0,0}, -{56,0,1}, -{56,0,2}, -{56,0,3}, -{56,0,4}, -{56,0,5}, -{56,0,6}, -{56,0,7}, -{56,0,8}, -{56,0,9}, -{56,0,10}, -{56,0,11}, -{56,0,12}, -{56,0,13}, -{56,0,14}, -{56,0,15}, -{56,0,16}, -{56,0,17}, -{56,0,18}, -{56,0,19}, -{56,0,20}, -{56,0,21}, -{56,0,22}, -{56,0,23}, -{56,0,24}, -{56,0,25}, -{56,0,26}, -{56,0,27}, -{56,0,28}, -{56,0,29}, -{56,0,30}, -{56,0,31}, -{56,0,32}, -{56,0,33}, -{56,0,34}, -{56,0,35}, -{56,0,36}, -{56,0,37}, -{56,0,38}, -{56,0,39}, -{56,0,40}, -{56,0,41}, -{56,0,42}, -{56,0,43}, -{56,0,44}, -{56,0,45}, -{56,0,46}, -{56,0,47}, -{56,0,48}, -{56,0,49}, -{56,0,50}, -{56,0,51}, -{56,0,52}, -{56,0,53}, -{56,0,54}, -{56,0,55}, -{56,0,56}, -{56,0,57}, -{56,0,58}, -{56,0,59}, -{56,0,60}, -{56,0,61}, -{56,1,-53}, -{56,1,-52}, -{56,1,-51}, -{56,1,-50}, -{56,1,-49}, -{56,1,-48}, -{56,1,-47}, -{56,1,-46}, -{56,1,-45}, -{56,1,-44}, -{56,1,-43}, -{56,1,-42}, -{56,1,-41}, -{56,1,-40}, -{56,1,-39}, -{56,1,-38}, -{56,1,-37}, -{56,1,-36}, -{56,1,-35}, -{56,1,-34}, -{56,1,-33}, -{56,1,-32}, -{56,1,-31}, -{56,1,-30}, -{56,1,-29}, -{56,1,-28}, -{56,1,-27}, -{56,1,-26}, -{56,1,-25}, -{56,1,-24}, -{56,1,-23}, -{56,1,-22}, -{56,1,-21}, -{56,1,-20}, -{56,1,-19}, -{56,1,-18}, -{56,1,-17}, -{56,1,-16}, -{56,1,-15}, -{56,1,-14}, -{56,1,-13}, -{56,1,-12}, -{56,1,-11}, -{56,1,-10}, -{56,1,-9}, -{56,1,-8}, -{56,1,-7}, -{56,1,-6}, -{56,1,-5}, -{56,1,-4}, -{56,1,-3}, -{56,1,-2}, -{56,1,-1}, -{56,1,0}, -{56,1,1}, -{56,1,2}, -{56,1,3}, -{56,1,4}, -{56,1,5}, -{56,1,6}, -{56,1,7}, -{56,1,8}, -{56,1,9}, -{56,1,10}, -{56,1,11}, -{56,1,12}, -{56,1,13}, -{56,1,14}, -{56,1,15}, -{56,1,16}, -{56,1,17}, -{56,1,18}, -{56,1,19}, -{56,1,20}, -{56,1,21}, -{56,1,22}, -{56,1,23}, -{56,1,24}, -{56,1,25}, -{56,1,26}, -{56,1,27}, -{56,1,28}, -{56,1,29}, -{56,1,30}, -{56,1,31}, -{56,1,32}, -{56,1,33}, -{56,1,34}, -{56,1,35}, -{56,1,36}, -{56,1,37}, -{56,1,38}, -{56,1,39}, -{56,1,40}, -{56,1,41}, -{56,1,42}, -{56,1,43}, -{56,1,44}, -{56,1,45}, -{56,1,46}, -{56,1,47}, -{56,1,48}, -{56,1,49}, -{56,1,50}, -{56,1,51}, -{56,1,52}, -{56,1,53}, -{56,1,54}, -{56,1,55}, -{56,1,56}, -{56,1,57}, -{56,1,58}, -{56,1,59}, -{56,1,60}, -{56,1,61}, -{56,2,-54}, -{56,2,-53}, -{56,2,-52}, -{56,2,-51}, -{56,2,-50}, -{56,2,-49}, -{56,2,-48}, -{56,2,-47}, -{56,2,-46}, -{56,2,-45}, -{56,2,-44}, -{56,2,-43}, -{56,2,-42}, -{56,2,-41}, -{56,2,-40}, -{56,2,-39}, -{56,2,-38}, -{56,2,-37}, -{56,2,-36}, -{56,2,-35}, -{56,2,-34}, -{56,2,-33}, -{56,2,-32}, -{56,2,-31}, -{56,2,-30}, -{56,2,-29}, -{56,2,-28}, -{56,2,-27}, -{56,2,-26}, -{56,2,-25}, -{56,2,-24}, -{56,2,-23}, -{56,2,-22}, -{56,2,-21}, -{56,2,-20}, -{56,2,-19}, -{56,2,-18}, -{56,2,-17}, -{56,2,-16}, -{56,2,-15}, -{56,2,-14}, -{56,2,-13}, -{56,2,-12}, -{56,2,-11}, -{56,2,-10}, -{56,2,-9}, -{56,2,-8}, -{56,2,-7}, -{56,2,-6}, -{56,2,-5}, -{56,2,-4}, -{56,2,-3}, -{56,2,-2}, -{56,2,-1}, -{56,2,0}, -{56,2,1}, -{56,2,2}, -{56,2,3}, -{56,2,4}, -{56,2,5}, -{56,2,6}, -{56,2,7}, -{56,2,8}, -{56,2,9}, -{56,2,10}, -{56,2,11}, -{56,2,12}, -{56,2,13}, -{56,2,14}, -{56,2,15}, -{56,2,16}, -{56,2,17}, -{56,2,18}, -{56,2,19}, -{56,2,20}, -{56,2,21}, -{56,2,22}, -{56,2,23}, -{56,2,24}, -{56,2,25}, -{56,2,26}, -{56,2,27}, -{56,2,28}, -{56,2,29}, -{56,2,30}, -{56,2,31}, -{56,2,32}, -{56,2,33}, -{56,2,34}, -{56,2,35}, -{56,2,36}, -{56,2,37}, -{56,2,38}, -{56,2,39}, -{56,2,40}, -{56,2,41}, -{56,2,42}, -{56,2,43}, -{56,2,44}, -{56,2,45}, -{56,2,46}, -{56,2,47}, -{56,2,48}, -{56,2,49}, -{56,2,50}, -{56,2,51}, -{56,2,52}, -{56,2,53}, -{56,2,54}, -{56,2,55}, -{56,2,56}, -{56,2,57}, -{56,2,58}, -{56,2,59}, -{56,2,60}, -{56,2,61}, -{56,3,-55}, -{56,3,-54}, -{56,3,-53}, -{56,3,-52}, -{56,3,-51}, -{56,3,-50}, -{56,3,-49}, -{56,3,-48}, -{56,3,-47}, -{56,3,-46}, -{56,3,-45}, -{56,3,-44}, -{56,3,-43}, -{56,3,-42}, -{56,3,-41}, -{56,3,-40}, -{56,3,-39}, -{56,3,-38}, -{56,3,-37}, -{56,3,-36}, -{56,3,-35}, -{56,3,-34}, -{56,3,-33}, -{56,3,-32}, -{56,3,-31}, -{56,3,-30}, -{56,3,-29}, -{56,3,-28}, -{56,3,-27}, -{56,3,-26}, -{56,3,-25}, -{56,3,-24}, -{56,3,-23}, -{56,3,-22}, -{56,3,-21}, -{56,3,-20}, -{56,3,-19}, -{56,3,-18}, -{56,3,-17}, -{56,3,-16}, -{56,3,-15}, -{56,3,-14}, -{56,3,-13}, -{56,3,-12}, -{56,3,-11}, -{56,3,-10}, -{56,3,-9}, -{56,3,-8}, -{56,3,-7}, -{56,3,-6}, -{56,3,-5}, -{56,3,-4}, -{56,3,-3}, -{56,3,-2}, -{56,3,-1}, -{56,3,0}, -{56,3,1}, -{56,3,2}, -{56,3,3}, -{56,3,4}, -{56,3,5}, -{56,3,6}, -{56,3,7}, -{56,3,8}, -{56,3,9}, -{56,3,10}, -{56,3,11}, -{56,3,12}, -{56,3,13}, -{56,3,14}, -{56,3,15}, -{56,3,16}, -{56,3,17}, -{56,3,18}, -{56,3,19}, -{56,3,20}, -{56,3,21}, -{56,3,22}, -{56,3,23}, -{56,3,24}, -{56,3,25}, -{56,3,26}, -{56,3,27}, -{56,3,28}, -{56,3,29}, -{56,3,30}, -{56,3,31}, -{56,3,32}, -{56,3,33}, -{56,3,34}, -{56,3,35}, -{56,3,36}, -{56,3,37}, -{56,3,38}, -{56,3,39}, -{56,3,40}, -{56,3,41}, -{56,3,42}, -{56,3,43}, -{56,3,44}, -{56,3,45}, -{56,3,46}, -{56,3,47}, -{56,3,48}, -{56,3,49}, -{56,3,50}, -{56,3,51}, -{56,3,52}, -{56,3,53}, -{56,3,54}, -{56,3,55}, -{56,3,56}, -{56,3,57}, -{56,3,58}, -{56,3,59}, -{56,3,60}, -{56,3,61}, -{56,4,-56}, -{56,4,-55}, -{56,4,-54}, -{56,4,-53}, -{56,4,-52}, -{56,4,-51}, -{56,4,-50}, -{56,4,-49}, -{56,4,-48}, -{56,4,-47}, -{56,4,-46}, -{56,4,-45}, -{56,4,-44}, -{56,4,-43}, -{56,4,-42}, -{56,4,-41}, -{56,4,-40}, -{56,4,-39}, -{56,4,-38}, -{56,4,-37}, -{56,4,-36}, -{56,4,-35}, -{56,4,-34}, -{56,4,-33}, -{56,4,-32}, -{56,4,-31}, -{56,4,-30}, -{56,4,-29}, -{56,4,-28}, -{56,4,-27}, -{56,4,-26}, -{56,4,-25}, -{56,4,-24}, -{56,4,-23}, -{56,4,-22}, -{56,4,-21}, -{56,4,-20}, -{56,4,-19}, -{56,4,-18}, -{56,4,-17}, -{56,4,-16}, -{56,4,-15}, -{56,4,-14}, -{56,4,-13}, -{56,4,-12}, -{56,4,-11}, -{56,4,-10}, -{56,4,-9}, -{56,4,-8}, -{56,4,-7}, -{56,4,-6}, -{56,4,-5}, -{56,4,-4}, -{56,4,-3}, -{56,4,-2}, -{56,4,-1}, -{56,4,0}, -{56,4,1}, -{56,4,2}, -{56,4,3}, -{56,4,4}, -{56,4,5}, -{56,4,6}, -{56,4,7}, -{56,4,8}, -{56,4,9}, -{56,4,10}, -{56,4,11}, -{56,4,12}, -{56,4,13}, -{56,4,14}, -{56,4,15}, -{56,4,16}, -{56,4,17}, -{56,4,18}, -{56,4,19}, -{56,4,20}, -{56,4,21}, -{56,4,22}, -{56,4,23}, -{56,4,24}, -{56,4,25}, -{56,4,26}, -{56,4,27}, -{56,4,28}, -{56,4,29}, -{56,4,30}, -{56,4,31}, -{56,4,32}, -{56,4,33}, -{56,4,34}, -{56,4,35}, -{56,4,36}, -{56,4,37}, -{56,4,38}, -{56,4,39}, -{56,4,40}, -{56,4,41}, -{56,4,42}, -{56,4,43}, -{56,4,44}, -{56,4,45}, -{56,4,46}, -{56,4,47}, -{56,4,48}, -{56,4,49}, -{56,4,50}, -{56,4,51}, -{56,4,52}, -{56,4,53}, -{56,4,54}, -{56,4,55}, -{56,4,56}, -{56,4,57}, -{56,4,58}, -{56,4,59}, -{56,4,60}, -{56,4,61}, -{56,5,-57}, -{56,5,-56}, -{56,5,-55}, -{56,5,-54}, -{56,5,-53}, -{56,5,-52}, -{56,5,-51}, -{56,5,-50}, -{56,5,-49}, -{56,5,-48}, -{56,5,-47}, -{56,5,-46}, -{56,5,-45}, -{56,5,-44}, -{56,5,-43}, -{56,5,-42}, -{56,5,-41}, -{56,5,-40}, -{56,5,-39}, -{56,5,-38}, -{56,5,-37}, -{56,5,-36}, -{56,5,-35}, -{56,5,-34}, -{56,5,-33}, -{56,5,-32}, -{56,5,-31}, -{56,5,-30}, -{56,5,-29}, -{56,5,-28}, -{56,5,-27}, -{56,5,-26}, -{56,5,-25}, -{56,5,-24}, -{56,5,-23}, -{56,5,-22}, -{56,5,-21}, -{56,5,-20}, -{56,5,-19}, -{56,5,-18}, -{56,5,-17}, -{56,5,-16}, -{56,5,-15}, -{56,5,-14}, -{56,5,-13}, -{56,5,-12}, -{56,5,-11}, -{56,5,-10}, -{56,5,-9}, -{56,5,-8}, -{56,5,-7}, -{56,5,-6}, -{56,5,-5}, -{56,5,-4}, -{56,5,-3}, -{56,5,-2}, -{56,5,-1}, -{56,5,0}, -{56,5,1}, -{56,5,2}, -{56,5,3}, -{56,5,4}, -{56,5,5}, -{56,5,6}, -{56,5,7}, -{56,5,8}, -{56,5,9}, -{56,5,10}, -{56,5,11}, -{56,5,12}, -{56,5,13}, -{56,5,14}, -{56,5,15}, -{56,5,16}, -{56,5,17}, -{56,5,18}, -{56,5,19}, -{56,5,20}, -{56,5,21}, -{56,5,22}, -{56,5,23}, -{56,5,24}, -{56,5,25}, -{56,5,26}, -{56,5,27}, -{56,5,28}, -{56,5,29}, -{56,5,30}, -{56,5,31}, -{56,5,32}, -{56,5,33}, -{56,5,34}, -{56,5,35}, -{56,5,36}, -{56,5,37}, -{56,5,38}, -{56,5,39}, -{56,5,40}, -{56,5,41}, -{56,5,42}, -{56,5,43}, -{56,5,44}, -{56,5,45}, -{56,5,46}, -{56,5,47}, -{56,5,48}, -{56,5,49}, -{56,5,50}, -{56,5,51}, -{56,5,52}, -{56,5,53}, -{56,5,54}, -{56,5,55}, -{56,5,56}, -{56,5,57}, -{56,5,58}, -{56,5,59}, -{56,5,60}, -{56,5,61}, -{56,6,-58}, -{56,6,-57}, -{56,6,-56}, -{56,6,-55}, -{56,6,-54}, -{56,6,-53}, -{56,6,-52}, -{56,6,-51}, -{56,6,-50}, -{56,6,-49}, -{56,6,-48}, -{56,6,-47}, -{56,6,-46}, -{56,6,-45}, -{56,6,-44}, -{56,6,-43}, -{56,6,-42}, -{56,6,-41}, -{56,6,-40}, -{56,6,-39}, -{56,6,-38}, -{56,6,-37}, -{56,6,-36}, -{56,6,-35}, -{56,6,-34}, -{56,6,-33}, -{56,6,-32}, -{56,6,-31}, -{56,6,-30}, -{56,6,-29}, -{56,6,-28}, -{56,6,-27}, -{56,6,-26}, -{56,6,-25}, -{56,6,-24}, -{56,6,-23}, -{56,6,-22}, -{56,6,-21}, -{56,6,-20}, -{56,6,-19}, -{56,6,-18}, -{56,6,-17}, -{56,6,-16}, -{56,6,-15}, -{56,6,-14}, -{56,6,-13}, -{56,6,-12}, -{56,6,-11}, -{56,6,-10}, -{56,6,-9}, -{56,6,-8}, -{56,6,-7}, -{56,6,-6}, -{56,6,-5}, -{56,6,-4}, -{56,6,-3}, -{56,6,-2}, -{56,6,-1}, -{56,6,0}, -{56,6,1}, -{56,6,2}, -{56,6,3}, -{56,6,4}, -{56,6,5}, -{56,6,6}, -{56,6,7}, -{56,6,8}, -{56,6,9}, -{56,6,10}, -{56,6,11}, -{56,6,12}, -{56,6,13}, -{56,6,14}, -{56,6,15}, -{56,6,16}, -{56,6,17}, -{56,6,18}, -{56,6,19}, -{56,6,20}, -{56,6,21}, -{56,6,22}, -{56,6,23}, -{56,6,24}, -{56,6,25}, -{56,6,26}, -{56,6,27}, -{56,6,28}, -{56,6,29}, -{56,6,30}, -{56,6,31}, -{56,6,32}, -{56,6,33}, -{56,6,34}, -{56,6,35}, -{56,6,36}, -{56,6,37}, -{56,6,38}, -{56,6,39}, -{56,6,40}, -{56,6,41}, -{56,6,42}, -{56,6,43}, -{56,6,44}, -{56,6,45}, -{56,6,46}, -{56,6,47}, -{56,6,48}, -{56,6,49}, -{56,6,50}, -{56,6,51}, -{56,6,52}, -{56,6,53}, -{56,6,54}, -{56,6,55}, -{56,6,56}, -{56,6,57}, -{56,6,58}, -{56,6,59}, -{56,6,60}, -{56,6,61}, -{56,7,-59}, -{56,7,-58}, -{56,7,-57}, -{56,7,-56}, -{56,7,-55}, -{56,7,-54}, -{56,7,-53}, -{56,7,-52}, -{56,7,-51}, -{56,7,-50}, -{56,7,-49}, -{56,7,-48}, -{56,7,-47}, -{56,7,-46}, -{56,7,-45}, -{56,7,-44}, -{56,7,-43}, -{56,7,-42}, -{56,7,-41}, -{56,7,-40}, -{56,7,-39}, -{56,7,-38}, -{56,7,-37}, -{56,7,-36}, -{56,7,-35}, -{56,7,-34}, -{56,7,-33}, -{56,7,-32}, -{56,7,-31}, -{56,7,-30}, -{56,7,-29}, -{56,7,-28}, -{56,7,-27}, -{56,7,-26}, -{56,7,-25}, -{56,7,-24}, -{56,7,-23}, -{56,7,-22}, -{56,7,-21}, -{56,7,-20}, -{56,7,-19}, -{56,7,-18}, -{56,7,-17}, -{56,7,-16}, -{56,7,-15}, -{56,7,-14}, -{56,7,-13}, -{56,7,-12}, -{56,7,-11}, -{56,7,-10}, -{56,7,-9}, -{56,7,-8}, -{56,7,-7}, -{56,7,-6}, -{56,7,-5}, -{56,7,-4}, -{56,7,-3}, -{56,7,-2}, -{56,7,-1}, -{56,7,0}, -{56,7,1}, -{56,7,2}, -{56,7,3}, -{56,7,4}, -{56,7,5}, -{56,7,6}, -{56,7,7}, -{56,7,8}, -{56,7,9}, -{56,7,10}, -{56,7,11}, -{56,7,12}, -{56,7,13}, -{56,7,14}, -{56,7,15}, -{56,7,16}, -{56,7,17}, -{56,7,18}, -{56,7,19}, -{56,7,20}, -{56,7,21}, -{56,7,22}, -{56,7,23}, -{56,7,24}, -{56,7,25}, -{56,7,26}, -{56,7,27}, -{56,7,28}, -{56,7,29}, -{56,7,30}, -{56,7,31}, -{56,7,32}, -{56,7,33}, -{56,7,34}, -{56,7,35}, -{56,7,36}, -{56,7,37}, -{56,7,38}, -{56,7,39}, -{56,7,40}, -{56,7,41}, -{56,7,42}, -{56,7,43}, -{56,7,44}, -{56,7,45}, -{56,7,46}, -{56,7,47}, -{56,7,48}, -{56,7,49}, -{56,7,50}, -{56,7,51}, -{56,7,52}, -{56,7,53}, -{56,7,54}, -{56,7,55}, -{56,7,56}, -{56,7,57}, -{56,7,58}, -{56,7,59}, -{56,7,60}, -{56,7,61}, -{56,8,-60}, -{56,8,-59}, -{56,8,-58}, -{56,8,-57}, -{56,8,-56}, -{56,8,-55}, -{56,8,-54}, -{56,8,-53}, -{56,8,-52}, -{56,8,-51}, -{56,8,-50}, -{56,8,-49}, -{56,8,-48}, -{56,8,-47}, -{56,8,-46}, -{56,8,-45}, -{56,8,-44}, -{56,8,-43}, -{56,8,-42}, -{56,8,-41}, -{56,8,-40}, -{56,8,-39}, -{56,8,-38}, -{56,8,-37}, -{56,8,-36}, -{56,8,-35}, -{56,8,-34}, -{56,8,-33}, -{56,8,-32}, -{56,8,-31}, -{56,8,-30}, -{56,8,-29}, -{56,8,-28}, -{56,8,-27}, -{56,8,-26}, -{56,8,-25}, -{56,8,-24}, -{56,8,-23}, -{56,8,-22}, -{56,8,-21}, -{56,8,-20}, -{56,8,-19}, -{56,8,-18}, -{56,8,-17}, -{56,8,-16}, -{56,8,-15}, -{56,8,-14}, -{56,8,-13}, -{56,8,-12}, -{56,8,-11}, -{56,8,-10}, -{56,8,-9}, -{56,8,-8}, -{56,8,-7}, -{56,8,-6}, -{56,8,-5}, -{56,8,-4}, -{56,8,-3}, -{56,8,-2}, -{56,8,-1}, -{56,8,0}, -{56,8,1}, -{56,8,2}, -{56,8,3}, -{56,8,4}, -{56,8,5}, -{56,8,6}, -{56,8,7}, -{56,8,8}, -{56,8,9}, -{56,8,10}, -{56,8,11}, -{56,8,12}, -{56,8,13}, -{56,8,14}, -{56,8,15}, -{56,8,16}, -{56,8,17}, -{56,8,18}, -{56,8,19}, -{56,8,20}, -{56,8,21}, -{56,8,22}, -{56,8,23}, -{56,8,24}, -{56,8,25}, -{56,8,26}, -{56,8,27}, -{56,8,28}, -{56,8,29}, -{56,8,30}, -{56,8,31}, -{56,8,32}, -{56,8,33}, -{56,8,34}, -{56,8,35}, -{56,8,36}, -{56,8,37}, -{56,8,38}, -{56,8,39}, -{56,8,40}, -{56,8,41}, -{56,8,42}, -{56,8,43}, -{56,8,44}, -{56,8,45}, -{56,8,46}, -{56,8,47}, -{56,8,48}, -{56,8,49}, -{56,8,50}, -{56,8,51}, -{56,8,52}, -{56,8,53}, -{56,8,54}, -{56,8,55}, -{56,8,56}, -{56,8,57}, -{56,8,58}, -{56,8,59}, -{56,8,60}, -{56,8,61}, -{56,9,-61}, -{56,9,-60}, -{56,9,-59}, -{56,9,-58}, -{56,9,-57}, -{56,9,-56}, -{56,9,-55}, -{56,9,-54}, -{56,9,-53}, -{56,9,-52}, -{56,9,-51}, -{56,9,-50}, -{56,9,-49}, -{56,9,-48}, -{56,9,-47}, -{56,9,-46}, -{56,9,-45}, -{56,9,-44}, -{56,9,-43}, -{56,9,-42}, -{56,9,-41}, -{56,9,-40}, -{56,9,-39}, -{56,9,-38}, -{56,9,-37}, -{56,9,-36}, -{56,9,-35}, -{56,9,-34}, -{56,9,-33}, -{56,9,-32}, -{56,9,-31}, -{56,9,-30}, -{56,9,-29}, -{56,9,-28}, -{56,9,-27}, -{56,9,-26}, -{56,9,-25}, -{56,9,-24}, -{56,9,-23}, -{56,9,-22}, -{56,9,-21}, -{56,9,-20}, -{56,9,-19}, -{56,9,-18}, -{56,9,-17}, -{56,9,-16}, -{56,9,-15}, -{56,9,-14}, -{56,9,-13}, -{56,9,-12}, -{56,9,-11}, -{56,9,-10}, -{56,9,-9}, -{56,9,-8}, -{56,9,-7}, -{56,9,-6}, -{56,9,-5}, -{56,9,-4}, -{56,9,-3}, -{56,9,-2}, -{56,9,-1}, -{56,9,0}, -{56,9,1}, -{56,9,2}, -{56,9,3}, -{56,9,4}, -{56,9,5}, -{56,9,6}, -{56,9,7}, -{56,9,8}, -{56,9,9}, -{56,9,10}, -{56,9,11}, -{56,9,12}, -{56,9,13}, -{56,9,14}, -{56,9,15}, -{56,9,16}, -{56,9,17}, -{56,9,18}, -{56,9,19}, -{56,9,20}, -{56,9,21}, -{56,9,22}, -{56,9,23}, -{56,9,24}, -{56,9,25}, -{56,9,26}, -{56,9,27}, -{56,9,28}, -{56,9,29}, -{56,9,30}, -{56,9,31}, -{56,9,32}, -{56,9,33}, -{56,9,34}, -{56,9,35}, -{56,9,36}, -{56,9,37}, -{56,9,38}, -{56,9,39}, -{56,9,40}, -{56,9,41}, -{56,9,42}, -{56,9,43}, -{56,9,44}, -{56,9,45}, -{56,9,46}, -{56,9,47}, -{56,9,48}, -{56,9,49}, -{56,9,50}, -{56,9,51}, -{56,9,52}, -{56,9,53}, -{56,9,54}, -{56,9,55}, -{56,9,56}, -{56,9,57}, -{56,9,58}, -{56,9,59}, -{56,9,60}, -{56,9,61}, -{56,10,-62}, -{56,10,-61}, -{56,10,-60}, -{56,10,-59}, -{56,10,-58}, -{56,10,-57}, -{56,10,-56}, -{56,10,-55}, -{56,10,-54}, -{56,10,-53}, -{56,10,-52}, -{56,10,-51}, -{56,10,-50}, -{56,10,-49}, -{56,10,-48}, -{56,10,-47}, -{56,10,-46}, -{56,10,-45}, -{56,10,-44}, -{56,10,-43}, -{56,10,-42}, -{56,10,-41}, -{56,10,-40}, -{56,10,-39}, -{56,10,-38}, -{56,10,-37}, -{56,10,-36}, -{56,10,-35}, -{56,10,-34}, -{56,10,-33}, -{56,10,-32}, -{56,10,-31}, -{56,10,-30}, -{56,10,-29}, -{56,10,-28}, -{56,10,-27}, -{56,10,-26}, -{56,10,-25}, -{56,10,-24}, -{56,10,-23}, -{56,10,-22}, -{56,10,-21}, -{56,10,-20}, -{56,10,-19}, -{56,10,-18}, -{56,10,-17}, -{56,10,-16}, -{56,10,-15}, -{56,10,-14}, -{56,10,-13}, -{56,10,-12}, -{56,10,-11}, -{56,10,-10}, -{56,10,-9}, -{56,10,-8}, -{56,10,-7}, -{56,10,-6}, -{56,10,-5}, -{56,10,-4}, -{56,10,-3}, -{56,10,-2}, -{56,10,-1}, -{56,10,0}, -{56,10,1}, -{56,10,2}, -{56,10,3}, -{56,10,4}, -{56,10,5}, -{56,10,6}, -{56,10,7}, -{56,10,8}, -{56,10,9}, -{56,10,10}, -{56,10,11}, -{56,10,12}, -{56,10,13}, -{56,10,14}, -{56,10,15}, -{56,10,16}, -{56,10,17}, -{56,10,18}, -{56,10,19}, -{56,10,20}, -{56,10,21}, -{56,10,22}, -{56,10,23}, -{56,10,24}, -{56,10,25}, -{56,10,26}, -{56,10,27}, -{56,10,28}, -{56,10,29}, -{56,10,30}, -{56,10,31}, -{56,10,32}, -{56,10,33}, -{56,10,34}, -{56,10,35}, -{56,10,36}, -{56,10,37}, -{56,10,38}, -{56,10,39}, -{56,10,40}, -{56,10,41}, -{56,10,42}, -{56,10,43}, -{56,10,44}, -{56,10,45}, -{56,10,46}, -{56,10,47}, -{56,10,48}, -{56,10,49}, -{56,10,50}, -{56,10,51}, -{56,10,52}, -{56,10,53}, -{56,10,54}, -{56,10,55}, -{56,10,56}, -{56,10,57}, -{56,10,58}, -{56,10,59}, -{56,10,60}, -{56,10,61}, -{56,11,-63}, -{56,11,-62}, -{56,11,-61}, -{56,11,-60}, -{56,11,-59}, -{56,11,-58}, -{56,11,-57}, -{56,11,-56}, -{56,11,-55}, -{56,11,-54}, -{56,11,-53}, -{56,11,-52}, -{56,11,-51}, -{56,11,-50}, -{56,11,-49}, -{56,11,-48}, -{56,11,-47}, -{56,11,-46}, -{56,11,-45}, -{56,11,-44}, -{56,11,-43}, -{56,11,-42}, -{56,11,-41}, -{56,11,-40}, -{56,11,-39}, -{56,11,-38}, -{56,11,-37}, -{56,11,-36}, -{56,11,-35}, -{56,11,-34}, -{56,11,-33}, -{56,11,-32}, -{56,11,-31}, -{56,11,-30}, -{56,11,-29}, -{56,11,-28}, -{56,11,-27}, -{56,11,-26}, -{56,11,-25}, -{56,11,-24}, -{56,11,-23}, -{56,11,-22}, -{56,11,-21}, -{56,11,-20}, -{56,11,-19}, -{56,11,-18}, -{56,11,-17}, -{56,11,-16}, -{56,11,-15}, -{56,11,-14}, -{56,11,-13}, -{56,11,-12}, -{56,11,-11}, -{56,11,-10}, -{56,11,-9}, -{56,11,-8}, -{56,11,-7}, -{56,11,-6}, -{56,11,-5}, -{56,11,-4}, -{56,11,-3}, -{56,11,-2}, -{56,11,-1}, -{56,11,0}, -{56,11,1}, -{56,11,2}, -{56,11,3}, -{56,11,4}, -{56,11,5}, -{56,11,6}, -{56,11,7}, -{56,11,8}, -{56,11,9}, -{56,11,10}, -{56,11,11}, -{56,11,12}, -{56,11,13}, -{56,11,14}, -{56,11,15}, -{56,11,16}, -{56,11,17}, -{56,11,18}, -{56,11,19}, -{56,11,20}, -{56,11,21}, -{56,11,22}, -{56,11,23}, -{56,11,24}, -{56,11,25}, -{56,11,26}, -{56,11,27}, -{56,11,28}, -{56,11,29}, -{56,11,30}, -{56,11,31}, -{56,11,32}, -{56,11,33}, -{56,11,34}, -{56,11,35}, -{56,11,36}, -{56,11,37}, -{56,11,38}, -{56,11,39}, -{56,11,40}, -{56,11,41}, -{56,11,42}, -{56,11,43}, -{56,11,44}, -{56,11,45}, -{56,11,46}, -{56,11,47}, -{56,11,48}, -{56,11,49}, -{56,11,50}, -{56,11,51}, -{56,11,52}, -{56,11,53}, -{56,11,54}, -{56,11,55}, -{56,11,56}, -{56,11,57}, -{56,11,58}, -{56,11,59}, -{56,11,60}, -{56,11,61}, -{56,11,62}, -{56,12,-64}, -{56,12,-63}, -{56,12,-62}, -{56,12,-61}, -{56,12,-60}, -{56,12,-59}, -{56,12,-58}, -{56,12,-57}, -{56,12,-56}, -{56,12,-55}, -{56,12,-54}, -{56,12,-53}, -{56,12,-52}, -{56,12,-51}, -{56,12,-50}, -{56,12,-49}, -{56,12,-48}, -{56,12,-47}, -{56,12,-46}, -{56,12,-45}, -{56,12,-44}, -{56,12,-43}, -{56,12,-42}, -{56,12,-41}, -{56,12,-40}, -{56,12,-39}, -{56,12,-38}, -{56,12,-37}, -{56,12,-36}, -{56,12,-35}, -{56,12,-34}, -{56,12,-33}, -{56,12,-32}, -{56,12,-31}, -{56,12,-30}, -{56,12,-29}, -{56,12,-28}, -{56,12,-27}, -{56,12,-26}, -{56,12,-25}, -{56,12,-24}, -{56,12,-23}, -{56,12,-22}, -{56,12,-21}, -{56,12,-20}, -{56,12,-19}, -{56,12,-18}, -{56,12,-17}, -{56,12,-16}, -{56,12,-15}, -{56,12,-14}, -{56,12,-13}, -{56,12,-12}, -{56,12,-11}, -{56,12,-10}, -{56,12,-9}, -{56,12,-8}, -{56,12,-7}, -{56,12,-6}, -{56,12,-5}, -{56,12,-4}, -{56,12,-3}, -{56,12,-2}, -{56,12,-1}, -{56,12,0}, -{56,12,1}, -{56,12,2}, -{56,12,3}, -{56,12,4}, -{56,12,5}, -{56,12,6}, -{56,12,7}, -{56,12,8}, -{56,12,9}, -{56,12,10}, -{56,12,11}, -{56,12,12}, -{56,12,13}, -{56,12,14}, -{56,12,15}, -{56,12,16}, -{56,12,17}, -{56,12,18}, -{56,12,19}, -{56,12,20}, -{56,12,21}, -{56,12,22}, -{56,12,23}, -{56,12,24}, -{56,12,25}, -{56,12,26}, -{56,12,27}, -{56,12,28}, -{56,12,29}, -{56,12,30}, -{56,12,31}, -{56,12,32}, -{56,12,33}, -{56,12,34}, -{56,12,35}, -{56,12,36}, -{56,12,37}, -{56,12,38}, -{56,12,39}, -{56,12,40}, -{56,12,41}, -{56,12,42}, -{56,12,43}, -{56,12,44}, -{56,12,45}, -{56,12,46}, -{56,12,47}, -{56,12,48}, -{56,12,49}, -{56,12,50}, -{56,12,51}, -{56,12,52}, -{56,12,53}, -{56,12,54}, -{56,12,55}, -{56,12,56}, -{56,12,57}, -{56,12,58}, -{56,12,59}, -{56,12,60}, -{56,12,61}, -{56,12,62}, -{56,13,-66}, -{56,13,-65}, -{56,13,-64}, -{56,13,-63}, -{56,13,-62}, -{56,13,-61}, -{56,13,-60}, -{56,13,-59}, -{56,13,-58}, -{56,13,-57}, -{56,13,-56}, -{56,13,-55}, -{56,13,-54}, -{56,13,-53}, -{56,13,-52}, -{56,13,-51}, -{56,13,-50}, -{56,13,-49}, -{56,13,-48}, -{56,13,-47}, -{56,13,-46}, -{56,13,-45}, -{56,13,-44}, -{56,13,-43}, -{56,13,-42}, -{56,13,-41}, -{56,13,-40}, -{56,13,-39}, -{56,13,-38}, -{56,13,-37}, -{56,13,-36}, -{56,13,-35}, -{56,13,-34}, -{56,13,-33}, -{56,13,-32}, -{56,13,-31}, -{56,13,-30}, -{56,13,-29}, -{56,13,-28}, -{56,13,-27}, -{56,13,-26}, -{56,13,-25}, -{56,13,-24}, -{56,13,-23}, -{56,13,-22}, -{56,13,-21}, -{56,13,-20}, -{56,13,-19}, -{56,13,-18}, -{56,13,-17}, -{56,13,-16}, -{56,13,-15}, -{56,13,-14}, -{56,13,-13}, -{56,13,-12}, -{56,13,-11}, -{56,13,-10}, -{56,13,-9}, -{56,13,-8}, -{56,13,-7}, -{56,13,-6}, -{56,13,-5}, -{56,13,-4}, -{56,13,-3}, -{56,13,-2}, -{56,13,-1}, -{56,13,0}, -{56,13,1}, -{56,13,2}, -{56,13,3}, -{56,13,4}, -{56,13,5}, -{56,13,6}, -{56,13,7}, -{56,13,8}, -{56,13,9}, -{56,13,10}, -{56,13,11}, -{56,13,12}, -{56,13,13}, -{56,13,14}, -{56,13,15}, -{56,13,16}, -{56,13,17}, -{56,13,18}, -{56,13,19}, -{56,13,20}, -{56,13,21}, -{56,13,22}, -{56,13,23}, -{56,13,24}, -{56,13,25}, -{56,13,26}, -{56,13,27}, -{56,13,28}, -{56,13,29}, -{56,13,30}, -{56,13,31}, -{56,13,32}, -{56,13,33}, -{56,13,34}, -{56,13,35}, -{56,13,36}, -{56,13,37}, -{56,13,38}, -{56,13,39}, -{56,13,40}, -{56,13,41}, -{56,13,42}, -{56,13,43}, -{56,13,44}, -{56,13,45}, -{56,13,46}, -{56,13,47}, -{56,13,48}, -{56,13,49}, -{56,13,50}, -{56,13,51}, -{56,13,52}, -{56,13,53}, -{56,13,54}, -{56,13,55}, -{56,13,56}, -{56,13,57}, -{56,13,58}, -{56,13,59}, -{56,13,60}, -{56,13,61}, -{56,13,62}, -{56,14,-67}, -{56,14,-66}, -{56,14,-65}, -{56,14,-64}, -{56,14,-63}, -{56,14,-62}, -{56,14,-61}, -{56,14,-60}, -{56,14,-59}, -{56,14,-58}, -{56,14,-57}, -{56,14,-56}, -{56,14,-55}, -{56,14,-54}, -{56,14,-53}, -{56,14,-52}, -{56,14,-51}, -{56,14,-50}, -{56,14,-49}, -{56,14,-48}, -{56,14,-47}, -{56,14,-46}, -{56,14,-45}, -{56,14,-44}, -{56,14,-43}, -{56,14,-42}, -{56,14,-41}, -{56,14,-40}, -{56,14,-39}, -{56,14,-38}, -{56,14,-37}, -{56,14,-36}, -{56,14,-35}, -{56,14,-34}, -{56,14,-33}, -{56,14,-32}, -{56,14,-31}, -{56,14,-30}, -{56,14,-29}, -{56,14,-28}, -{56,14,-27}, -{56,14,-26}, -{56,14,-25}, -{56,14,-24}, -{56,14,-23}, -{56,14,-22}, -{56,14,-21}, -{56,14,-20}, -{56,14,-19}, -{56,14,-18}, -{56,14,-17}, -{56,14,-16}, -{56,14,-15}, -{56,14,-14}, -{56,14,-13}, -{56,14,-12}, -{56,14,-11}, -{56,14,-10}, -{56,14,-9}, -{56,14,-8}, -{56,14,-7}, -{56,14,-6}, -{56,14,-5}, -{56,14,-4}, -{56,14,-3}, -{56,14,-2}, -{56,14,-1}, -{56,14,0}, -{56,14,1}, -{56,14,2}, -{56,14,3}, -{56,14,4}, -{56,14,5}, -{56,14,6}, -{56,14,7}, -{56,14,8}, -{56,14,9}, -{56,14,10}, -{56,14,11}, -{56,14,12}, -{56,14,13}, -{56,14,14}, -{56,14,15}, -{56,14,16}, -{56,14,17}, -{56,14,18}, -{56,14,19}, -{56,14,20}, -{56,14,21}, -{56,14,22}, -{56,14,23}, -{56,14,24}, -{56,14,25}, -{56,14,26}, -{56,14,27}, -{56,14,28}, -{56,14,29}, -{56,14,30}, -{56,14,31}, -{56,14,32}, -{56,14,33}, -{56,14,34}, -{56,14,35}, -{56,14,36}, -{56,14,37}, -{56,14,38}, -{56,14,39}, -{56,14,40}, -{56,14,41}, -{56,14,42}, -{56,14,43}, -{56,14,44}, -{56,14,45}, -{56,14,46}, -{56,14,47}, -{56,14,48}, -{56,14,49}, -{56,14,50}, -{56,14,51}, -{56,14,52}, -{56,14,53}, -{56,14,54}, -{56,14,55}, -{56,14,56}, -{56,14,57}, -{56,14,58}, -{56,14,59}, -{56,14,60}, -{56,14,61}, -{56,14,62}, -{56,15,-68}, -{56,15,-67}, -{56,15,-66}, -{56,15,-65}, -{56,15,-64}, -{56,15,-63}, -{56,15,-62}, -{56,15,-61}, -{56,15,-60}, -{56,15,-59}, -{56,15,-58}, -{56,15,-57}, -{56,15,-56}, -{56,15,-55}, -{56,15,-54}, -{56,15,-53}, -{56,15,-52}, -{56,15,-51}, -{56,15,-50}, -{56,15,-49}, -{56,15,-48}, -{56,15,-47}, -{56,15,-46}, -{56,15,-45}, -{56,15,-44}, -{56,15,-43}, -{56,15,-42}, -{56,15,-41}, -{56,15,-40}, -{56,15,-39}, -{56,15,-38}, -{56,15,-37}, -{56,15,-36}, -{56,15,-35}, -{56,15,-34}, -{56,15,-33}, -{56,15,-32}, -{56,15,-31}, -{56,15,-30}, -{56,15,-29}, -{56,15,-28}, -{56,15,-27}, -{56,15,-26}, -{56,15,-25}, -{56,15,-24}, -{56,15,-23}, -{56,15,-22}, -{56,15,-21}, -{56,15,-20}, -{56,15,-19}, -{56,15,-18}, -{56,15,-17}, -{56,15,-16}, -{56,15,-15}, -{56,15,-14}, -{56,15,-13}, -{56,15,-12}, -{56,15,-11}, -{56,15,-10}, -{56,15,-9}, -{56,15,-8}, -{56,15,-7}, -{56,15,-6}, -{56,15,-5}, -{56,15,-4}, -{56,15,-3}, -{56,15,-2}, -{56,15,-1}, -{56,15,0}, -{56,15,1}, -{56,15,2}, -{56,15,3}, -{56,15,4}, -{56,15,5}, -{56,15,6}, -{56,15,7}, -{56,15,8}, -{56,15,9}, -{56,15,10}, -{56,15,11}, -{56,15,12}, -{56,15,13}, -{56,15,14}, -{56,15,15}, -{56,15,16}, -{56,15,17}, -{56,15,18}, -{56,15,19}, -{56,15,20}, -{56,15,21}, -{56,15,22}, -{56,15,23}, -{56,15,24}, -{56,15,25}, -{56,15,26}, -{56,15,27}, -{56,15,28}, -{56,15,29}, -{56,15,30}, -{56,15,31}, -{56,15,32}, -{56,15,33}, -{56,15,34}, -{56,15,35}, -{56,15,36}, -{56,15,37}, -{56,15,38}, -{56,15,39}, -{56,15,40}, -{56,15,41}, -{56,15,42}, -{56,15,43}, -{56,15,44}, -{56,15,45}, -{56,15,46}, -{56,15,47}, -{56,15,48}, -{56,15,49}, -{56,15,50}, -{56,15,51}, -{56,15,52}, -{56,15,53}, -{56,15,54}, -{56,15,55}, -{56,15,56}, -{56,15,57}, -{56,15,58}, -{56,15,59}, -{56,15,60}, -{56,15,61}, -{56,15,62}, -{56,16,-68}, -{56,16,-67}, -{56,16,-66}, -{56,16,-65}, -{56,16,-64}, -{56,16,-63}, -{56,16,-62}, -{56,16,-61}, -{56,16,-60}, -{56,16,-59}, -{56,16,-58}, -{56,16,-57}, -{56,16,-56}, -{56,16,-55}, -{56,16,-54}, -{56,16,-53}, -{56,16,-52}, -{56,16,-51}, -{56,16,-50}, -{56,16,-49}, -{56,16,-48}, -{56,16,-47}, -{56,16,-46}, -{56,16,-45}, -{56,16,-44}, -{56,16,-43}, -{56,16,-42}, -{56,16,-41}, -{56,16,-40}, -{56,16,-39}, -{56,16,-38}, -{56,16,-37}, -{56,16,-36}, -{56,16,-35}, -{56,16,-34}, -{56,16,-33}, -{56,16,-32}, -{56,16,-31}, -{56,16,-30}, -{56,16,-29}, -{56,16,-28}, -{56,16,-27}, -{56,16,-26}, -{56,16,-25}, -{56,16,-24}, -{56,16,-23}, -{56,16,-22}, -{56,16,-21}, -{56,16,-20}, -{56,16,-19}, -{56,16,-18}, -{56,16,-17}, -{56,16,-16}, -{56,16,-15}, -{56,16,-14}, -{56,16,-13}, -{56,16,-12}, -{56,16,-11}, -{56,16,-10}, -{56,16,-9}, -{56,16,-8}, -{56,16,-7}, -{56,16,-6}, -{56,16,-5}, -{56,16,-4}, -{56,16,-3}, -{56,16,-2}, -{56,16,-1}, -{56,16,0}, -{56,16,1}, -{56,16,2}, -{56,16,3}, -{56,16,4}, -{56,16,5}, -{56,16,6}, -{56,16,7}, -{56,16,8}, -{56,16,9}, -{56,16,10}, -{56,16,11}, -{56,16,12}, -{56,16,13}, -{56,16,14}, -{56,16,15}, -{56,16,16}, -{56,16,17}, -{56,16,18}, -{56,16,19}, -{56,16,20}, -{56,16,21}, -{56,16,22}, -{56,16,23}, -{56,16,24}, -{56,16,25}, -{56,16,26}, -{56,16,27}, -{56,16,28}, -{56,16,29}, -{56,16,30}, -{56,16,31}, -{56,16,32}, -{56,16,33}, -{56,16,34}, -{56,16,35}, -{56,16,36}, -{56,16,37}, -{56,16,38}, -{56,16,39}, -{56,16,40}, -{56,16,41}, -{56,16,42}, -{56,16,43}, -{56,16,44}, -{56,16,45}, -{56,16,46}, -{56,16,47}, -{56,16,48}, -{56,16,49}, -{56,16,50}, -{56,16,51}, -{56,16,52}, -{56,16,53}, -{56,16,54}, -{56,16,55}, -{56,16,56}, -{56,16,57}, -{56,16,58}, -{56,16,59}, -{56,16,60}, -{56,16,61}, -{56,16,62}, -{56,17,-68}, -{56,17,-67}, -{56,17,-66}, -{56,17,-65}, -{56,17,-64}, -{56,17,-63}, -{56,17,-62}, -{56,17,-61}, -{56,17,-60}, -{56,17,-59}, -{56,17,-58}, -{56,17,-57}, -{56,17,-56}, -{56,17,-55}, -{56,17,-54}, -{56,17,-53}, -{56,17,-52}, -{56,17,-51}, -{56,17,-50}, -{56,17,-49}, -{56,17,-48}, -{56,17,-47}, -{56,17,-46}, -{56,17,-45}, -{56,17,-44}, -{56,17,-43}, -{56,17,-42}, -{56,17,-41}, -{56,17,-40}, -{56,17,-39}, -{56,17,-38}, -{56,17,-37}, -{56,17,-36}, -{56,17,-35}, -{56,17,-34}, -{56,17,-33}, -{56,17,-32}, -{56,17,-31}, -{56,17,-30}, -{56,17,-29}, -{56,17,-28}, -{56,17,-27}, -{56,17,-26}, -{56,17,-25}, -{56,17,-24}, -{56,17,-23}, -{56,17,-22}, -{56,17,-21}, -{56,17,-20}, -{56,17,-19}, -{56,17,-18}, -{56,17,-17}, -{56,17,-16}, -{56,17,-15}, -{56,17,-14}, -{56,17,-13}, -{56,17,-12}, -{56,17,-11}, -{56,17,-10}, -{56,17,-9}, -{56,17,-8}, -{56,17,-7}, -{56,17,-6}, -{56,17,-5}, -{56,17,-4}, -{56,17,-3}, -{56,17,-2}, -{56,17,-1}, -{56,17,0}, -{56,17,1}, -{56,17,2}, -{56,17,3}, -{56,17,4}, -{56,17,5}, -{56,17,6}, -{56,17,7}, -{56,17,8}, -{56,17,9}, -{56,17,10}, -{56,17,11}, -{56,17,12}, -{56,17,13}, -{56,17,14}, -{56,17,15}, -{56,17,16}, -{56,17,17}, -{56,17,18}, -{56,17,19}, -{56,17,20}, -{56,17,21}, -{56,17,22}, -{56,17,23}, -{56,17,24}, -{56,17,25}, -{56,17,26}, -{56,17,27}, -{56,17,28}, -{56,17,29}, -{56,17,30}, -{56,17,31}, -{56,17,32}, -{56,17,33}, -{56,17,34}, -{56,17,35}, -{56,17,36}, -{56,17,37}, -{56,17,38}, -{56,17,39}, -{56,17,40}, -{56,17,41}, -{56,17,42}, -{56,17,43}, -{56,17,44}, -{56,17,45}, -{56,17,46}, -{56,17,47}, -{56,17,48}, -{56,17,49}, -{56,17,50}, -{56,17,51}, -{56,17,52}, -{56,17,53}, -{56,17,54}, -{56,17,55}, -{56,17,56}, -{56,17,57}, -{56,17,58}, -{56,17,59}, -{56,17,60}, -{56,17,61}, -{56,17,62}, -{56,18,-68}, -{56,18,-67}, -{56,18,-66}, -{56,18,-65}, -{56,18,-64}, -{56,18,-63}, -{56,18,-62}, -{56,18,-61}, -{56,18,-60}, -{56,18,-59}, -{56,18,-58}, -{56,18,-57}, -{56,18,-56}, -{56,18,-55}, -{56,18,-54}, -{56,18,-53}, -{56,18,-52}, -{56,18,-51}, -{56,18,-50}, -{56,18,-49}, -{56,18,-48}, -{56,18,-47}, -{56,18,-46}, -{56,18,-45}, -{56,18,-44}, -{56,18,-43}, -{56,18,-42}, -{56,18,-41}, -{56,18,-40}, -{56,18,-39}, -{56,18,-38}, -{56,18,-37}, -{56,18,-36}, -{56,18,-35}, -{56,18,-34}, -{56,18,-33}, -{56,18,-32}, -{56,18,-31}, -{56,18,-30}, -{56,18,-29}, -{56,18,-28}, -{56,18,-27}, -{56,18,-26}, -{56,18,-25}, -{56,18,-24}, -{56,18,-23}, -{56,18,-22}, -{56,18,-21}, -{56,18,-20}, -{56,18,-19}, -{56,18,-18}, -{56,18,-17}, -{56,18,-16}, -{56,18,-15}, -{56,18,-14}, -{56,18,-13}, -{56,18,-12}, -{56,18,-11}, -{56,18,-10}, -{56,18,-9}, -{56,18,-8}, -{56,18,-7}, -{56,18,-6}, -{56,18,-5}, -{56,18,-4}, -{56,18,-3}, -{56,18,-2}, -{56,18,-1}, -{56,18,0}, -{56,18,1}, -{56,18,2}, -{56,18,3}, -{56,18,4}, -{56,18,5}, -{56,18,6}, -{56,18,7}, -{56,18,8}, -{56,18,9}, -{56,18,10}, -{56,18,11}, -{56,18,12}, -{56,18,13}, -{56,18,14}, -{56,18,15}, -{56,18,16}, -{56,18,17}, -{56,18,18}, -{56,18,19}, -{56,18,20}, -{56,18,21}, -{56,18,22}, -{56,18,23}, -{56,18,24}, -{56,18,25}, -{56,18,26}, -{56,18,27}, -{56,18,28}, -{56,18,29}, -{56,18,30}, -{56,18,31}, -{56,18,32}, -{56,18,33}, -{56,18,34}, -{56,18,35}, -{56,18,36}, -{56,18,37}, -{56,18,38}, -{56,18,39}, -{56,18,40}, -{56,18,41}, -{56,18,42}, -{56,18,43}, -{56,18,44}, -{56,18,45}, -{56,18,46}, -{56,18,47}, -{56,18,48}, -{56,18,49}, -{56,18,50}, -{56,18,51}, -{56,18,52}, -{56,18,53}, -{56,18,54}, -{56,18,55}, -{56,18,56}, -{56,18,57}, -{56,18,58}, -{56,18,59}, -{56,18,60}, -{56,18,61}, -{56,18,62}, -{56,19,-68}, -{56,19,-67}, -{56,19,-66}, -{56,19,-65}, -{56,19,-64}, -{56,19,-63}, -{56,19,-62}, -{56,19,-61}, -{56,19,-60}, -{56,19,-59}, -{56,19,-58}, -{56,19,-57}, -{56,19,-56}, -{56,19,-55}, -{56,19,-54}, -{56,19,-53}, -{56,19,-52}, -{56,19,-51}, -{56,19,-50}, -{56,19,-49}, -{56,19,-48}, -{56,19,-47}, -{56,19,-46}, -{56,19,-45}, -{56,19,-44}, -{56,19,-43}, -{56,19,-42}, -{56,19,-41}, -{56,19,-40}, -{56,19,-39}, -{56,19,-38}, -{56,19,-37}, -{56,19,-36}, -{56,19,-35}, -{56,19,-34}, -{56,19,-33}, -{56,19,-32}, -{56,19,-31}, -{56,19,-30}, -{56,19,-29}, -{56,19,-28}, -{56,19,-27}, -{56,19,-26}, -{56,19,-25}, -{56,19,-24}, -{56,19,-23}, -{56,19,-22}, -{56,19,-21}, -{56,19,-20}, -{56,19,-19}, -{56,19,-18}, -{56,19,-17}, -{56,19,-16}, -{56,19,-15}, -{56,19,-14}, -{56,19,-13}, -{56,19,-12}, -{56,19,-11}, -{56,19,-10}, -{56,19,-9}, -{56,19,-8}, -{56,19,-7}, -{56,19,-6}, -{56,19,-5}, -{56,19,-4}, -{56,19,-3}, -{56,19,-2}, -{56,19,-1}, -{56,19,0}, -{56,19,1}, -{56,19,2}, -{56,19,3}, -{56,19,4}, -{56,19,5}, -{56,19,6}, -{56,19,7}, -{56,19,8}, -{56,19,9}, -{56,19,10}, -{56,19,11}, -{56,19,12}, -{56,19,13}, -{56,19,14}, -{56,19,15}, -{56,19,16}, -{56,19,17}, -{56,19,18}, -{56,19,19}, -{56,19,20}, -{56,19,21}, -{56,19,22}, -{56,19,23}, -{56,19,24}, -{56,19,25}, -{56,19,26}, -{56,19,27}, -{56,19,28}, -{56,19,29}, -{56,19,30}, -{56,19,31}, -{56,19,32}, -{56,19,33}, -{56,19,34}, -{56,19,35}, -{56,19,36}, -{56,19,37}, -{56,19,38}, -{56,19,39}, -{56,19,40}, -{56,19,41}, -{56,19,42}, -{56,19,43}, -{56,19,44}, -{56,19,45}, -{56,19,46}, -{56,19,47}, -{56,19,48}, -{56,19,49}, -{56,19,50}, -{56,19,51}, -{56,19,52}, -{56,19,53}, -{56,19,54}, -{56,19,55}, -{56,19,56}, -{56,19,57}, -{56,19,58}, -{56,19,59}, -{56,19,60}, -{56,19,61}, -{56,19,62}, -{56,20,-68}, -{56,20,-67}, -{56,20,-66}, -{56,20,-65}, -{56,20,-64}, -{56,20,-63}, -{56,20,-62}, -{56,20,-61}, -{56,20,-60}, -{56,20,-59}, -{56,20,-58}, -{56,20,-57}, -{56,20,-56}, -{56,20,-55}, -{56,20,-54}, -{56,20,-53}, -{56,20,-52}, -{56,20,-51}, -{56,20,-50}, -{56,20,-49}, -{56,20,-48}, -{56,20,-47}, -{56,20,-46}, -{56,20,-45}, -{56,20,-44}, -{56,20,-43}, -{56,20,-42}, -{56,20,-41}, -{56,20,-40}, -{56,20,-39}, -{56,20,-38}, -{56,20,-37}, -{56,20,-36}, -{56,20,-35}, -{56,20,-34}, -{56,20,-33}, -{56,20,-32}, -{56,20,-31}, -{56,20,-30}, -{56,20,-29}, -{56,20,-28}, -{56,20,-27}, -{56,20,-26}, -{56,20,-25}, -{56,20,-24}, -{56,20,-23}, -{56,20,-22}, -{56,20,-21}, -{56,20,-20}, -{56,20,-19}, -{56,20,-18}, -{56,20,-17}, -{56,20,-16}, -{56,20,-15}, -{56,20,-14}, -{56,20,-13}, -{56,20,-12}, -{56,20,-11}, -{56,20,-10}, -{56,20,-9}, -{56,20,-8}, -{56,20,-7}, -{56,20,-6}, -{56,20,-5}, -{56,20,-4}, -{56,20,-3}, -{56,20,-2}, -{56,20,-1}, -{56,20,0}, -{56,20,1}, -{56,20,2}, -{56,20,3}, -{56,20,4}, -{56,20,5}, -{56,20,6}, -{56,20,7}, -{56,20,8}, -{56,20,9}, -{56,20,10}, -{56,20,11}, -{56,20,12}, -{56,20,13}, -{56,20,14}, -{56,20,15}, -{56,20,16}, -{56,20,17}, -{56,20,18}, -{56,20,19}, -{56,20,20}, -{56,20,21}, -{56,20,22}, -{56,20,23}, -{56,20,24}, -{56,20,25}, -{56,20,26}, -{56,20,27}, -{56,20,28}, -{56,20,29}, -{56,20,30}, -{56,20,31}, -{56,20,32}, -{56,20,33}, -{56,20,34}, -{56,20,35}, -{56,20,36}, -{56,20,37}, -{56,20,38}, -{56,20,39}, -{56,20,40}, -{56,20,41}, -{56,20,42}, -{56,20,43}, -{56,20,44}, -{56,20,45}, -{56,20,46}, -{56,20,47}, -{56,20,48}, -{56,20,49}, -{56,20,50}, -{56,20,51}, -{56,20,52}, -{56,20,53}, -{56,20,54}, -{56,20,55}, -{56,20,56}, -{56,20,57}, -{56,20,58}, -{56,20,59}, -{56,20,60}, -{56,20,61}, -{56,20,62}, -{56,21,-68}, -{56,21,-67}, -{56,21,-66}, -{56,21,-65}, -{56,21,-64}, -{56,21,-63}, -{56,21,-62}, -{56,21,-61}, -{56,21,-60}, -{56,21,-59}, -{56,21,-58}, -{56,21,-57}, -{56,21,-56}, -{56,21,-55}, -{56,21,-54}, -{56,21,-53}, -{56,21,-52}, -{56,21,-51}, -{56,21,-50}, -{56,21,-49}, -{56,21,-48}, -{56,21,-47}, -{56,21,-46}, -{56,21,-45}, -{56,21,-44}, -{56,21,-43}, -{56,21,-42}, -{56,21,-41}, -{56,21,-40}, -{56,21,-39}, -{56,21,-38}, -{56,21,-37}, -{56,21,-36}, -{56,21,-35}, -{56,21,-34}, -{56,21,-33}, -{56,21,-32}, -{56,21,-31}, -{56,21,-30}, -{56,21,-29}, -{56,21,-28}, -{56,21,-27}, -{56,21,-26}, -{56,21,-25}, -{56,21,-24}, -{56,21,-23}, -{56,21,-22}, -{56,21,-21}, -{56,21,-20}, -{56,21,-19}, -{56,21,-18}, -{56,21,-17}, -{56,21,-16}, -{56,21,-15}, -{56,21,-14}, -{56,21,-13}, -{56,21,-12}, -{56,21,-11}, -{56,21,-10}, -{56,21,-9}, -{56,21,-8}, -{56,21,-7}, -{56,21,-6}, -{56,21,-5}, -{56,21,-4}, -{56,21,-3}, -{56,21,-2}, -{56,21,-1}, -{56,21,0}, -{56,21,1}, -{56,21,2}, -{56,21,3}, -{56,21,4}, -{56,21,5}, -{56,21,6}, -{56,21,7}, -{56,21,8}, -{56,21,9}, -{56,21,10}, -{56,21,11}, -{56,21,12}, -{56,21,13}, -{56,21,14}, -{56,21,15}, -{56,21,16}, -{56,21,17}, -{56,21,18}, -{56,21,19}, -{56,21,20}, -{56,21,21}, -{56,21,22}, -{56,21,23}, -{56,21,24}, -{56,21,25}, -{56,21,26}, -{56,21,27}, -{56,21,28}, -{56,21,29}, -{56,21,30}, -{56,21,31}, -{56,21,32}, -{56,21,33}, -{56,21,34}, -{56,21,35}, -{56,21,36}, -{56,21,37}, -{56,21,38}, -{56,21,39}, -{56,21,40}, -{56,21,41}, -{56,21,42}, -{56,21,43}, -{56,21,44}, -{56,21,45}, -{56,21,46}, -{56,21,47}, -{56,21,48}, -{56,21,49}, -{56,21,50}, -{56,21,51}, -{56,21,52}, -{56,21,53}, -{56,21,54}, -{56,21,55}, -{56,21,56}, -{56,21,57}, -{56,21,58}, -{56,21,59}, -{56,21,60}, -{56,21,61}, -{56,21,62}, -{56,22,-68}, -{56,22,-67}, -{56,22,-66}, -{56,22,-65}, -{56,22,-64}, -{56,22,-63}, -{56,22,-62}, -{56,22,-61}, -{56,22,-60}, -{56,22,-59}, -{56,22,-58}, -{56,22,-57}, -{56,22,-56}, -{56,22,-55}, -{56,22,-54}, -{56,22,-53}, -{56,22,-52}, -{56,22,-51}, -{56,22,-50}, -{56,22,-49}, -{56,22,-48}, -{56,22,-47}, -{56,22,-46}, -{56,22,-45}, -{56,22,-44}, -{56,22,-43}, -{56,22,-42}, -{56,22,-41}, -{56,22,-40}, -{56,22,-39}, -{56,22,-38}, -{56,22,-37}, -{56,22,-36}, -{56,22,-35}, -{56,22,-34}, -{56,22,-33}, -{56,22,-32}, -{56,22,-31}, -{56,22,-30}, -{56,22,-29}, -{56,22,-28}, -{56,22,-27}, -{56,22,-26}, -{56,22,-25}, -{56,22,-24}, -{56,22,-23}, -{56,22,-22}, -{56,22,-21}, -{56,22,-20}, -{56,22,-19}, -{56,22,-18}, -{56,22,-17}, -{56,22,-16}, -{56,22,-15}, -{56,22,-14}, -{56,22,-13}, -{56,22,-12}, -{56,22,-11}, -{56,22,-10}, -{56,22,-9}, -{56,22,-8}, -{56,22,-7}, -{56,22,-6}, -{56,22,-5}, -{56,22,-4}, -{56,22,-3}, -{56,22,-2}, -{56,22,-1}, -{56,22,0}, -{56,22,1}, -{56,22,2}, -{56,22,3}, -{56,22,4}, -{56,22,5}, -{56,22,6}, -{56,22,7}, -{56,22,8}, -{56,22,9}, -{56,22,10}, -{56,22,11}, -{56,22,12}, -{56,22,13}, -{56,22,14}, -{56,22,15}, -{56,22,16}, -{56,22,17}, -{56,22,18}, -{56,22,19}, -{56,22,20}, -{56,22,21}, -{56,22,22}, -{56,22,23}, -{56,22,24}, -{56,22,25}, -{56,22,26}, -{56,22,27}, -{56,22,28}, -{56,22,29}, -{56,22,30}, -{56,22,31}, -{56,22,32}, -{56,22,33}, -{56,22,34}, -{56,22,35}, -{56,22,36}, -{56,22,37}, -{56,22,38}, -{56,22,39}, -{56,22,40}, -{56,22,41}, -{56,22,42}, -{56,22,43}, -{56,22,44}, -{56,22,45}, -{56,22,46}, -{56,22,47}, -{56,22,48}, -{56,22,49}, -{56,22,50}, -{56,22,51}, -{56,22,52}, -{56,22,53}, -{56,22,54}, -{56,22,55}, -{56,22,56}, -{56,22,57}, -{56,22,58}, -{56,22,59}, -{56,22,60}, -{56,22,61}, -{56,22,62}, -{56,23,-68}, -{56,23,-67}, -{56,23,-66}, -{56,23,-65}, -{56,23,-64}, -{56,23,-63}, -{56,23,-62}, -{56,23,-61}, -{56,23,-60}, -{56,23,-59}, -{56,23,-58}, -{56,23,-57}, -{56,23,-56}, -{56,23,-55}, -{56,23,-54}, -{56,23,-53}, -{56,23,-52}, -{56,23,-51}, -{56,23,-50}, -{56,23,-49}, -{56,23,-48}, -{56,23,-47}, -{56,23,-46}, -{56,23,-45}, -{56,23,-44}, -{56,23,-43}, -{56,23,-42}, -{56,23,-41}, -{56,23,-40}, -{56,23,-39}, -{56,23,-38}, -{56,23,-37}, -{56,23,-36}, -{56,23,-35}, -{56,23,-34}, -{56,23,-33}, -{56,23,-32}, -{56,23,-31}, -{56,23,-30}, -{56,23,-29}, -{56,23,-28}, -{56,23,-27}, -{56,23,-26}, -{56,23,-25}, -{56,23,-24}, -{56,23,-23}, -{56,23,-22}, -{56,23,-21}, -{56,23,-20}, -{56,23,-19}, -{56,23,-18}, -{56,23,-17}, -{56,23,-16}, -{56,23,-15}, -{56,23,-14}, -{56,23,-13}, -{56,23,-12}, -{56,23,-11}, -{56,23,-10}, -{56,23,-9}, -{56,23,-8}, -{56,23,-7}, -{56,23,-6}, -{56,23,-5}, -{56,23,-4}, -{56,23,-3}, -{56,23,-2}, -{56,23,-1}, -{56,23,0}, -{56,23,1}, -{56,23,2}, -{56,23,3}, -{56,23,4}, -{56,23,5}, -{56,23,6}, -{56,23,7}, -{56,23,8}, -{56,23,9}, -{56,23,10}, -{56,23,11}, -{56,23,12}, -{56,23,13}, -{56,23,14}, -{56,23,15}, -{56,23,16}, -{56,23,17}, -{56,23,18}, -{56,23,19}, -{56,23,20}, -{56,23,21}, -{56,23,22}, -{56,23,23}, -{56,23,24}, -{56,23,25}, -{56,23,26}, -{56,23,27}, -{56,23,28}, -{56,23,29}, -{56,23,30}, -{56,23,31}, -{56,23,32}, -{56,23,33}, -{56,23,34}, -{56,23,35}, -{56,23,36}, -{56,23,37}, -{56,23,38}, -{56,23,39}, -{56,23,40}, -{56,23,41}, -{56,23,42}, -{56,23,43}, -{56,23,44}, -{56,23,45}, -{56,23,46}, -{56,23,47}, -{56,23,48}, -{56,23,49}, -{56,23,50}, -{56,23,51}, -{56,23,52}, -{56,23,53}, -{56,23,54}, -{56,23,55}, -{56,23,56}, -{56,23,57}, -{56,23,58}, -{56,23,59}, -{56,23,60}, -{56,23,61}, -{56,23,62}, -{56,23,63}, -{56,24,-68}, -{56,24,-67}, -{56,24,-66}, -{56,24,-65}, -{56,24,-64}, -{56,24,-63}, -{56,24,-62}, -{56,24,-61}, -{56,24,-60}, -{56,24,-59}, -{56,24,-58}, -{56,24,-57}, -{56,24,-56}, -{56,24,-55}, -{56,24,-54}, -{56,24,-53}, -{56,24,-52}, -{56,24,-51}, -{56,24,-50}, -{56,24,-49}, -{56,24,-48}, -{56,24,-47}, -{56,24,-46}, -{56,24,-45}, -{56,24,-44}, -{56,24,-43}, -{56,24,-42}, -{56,24,-41}, -{56,24,-40}, -{56,24,-39}, -{56,24,-38}, -{56,24,-37}, -{56,24,-36}, -{56,24,-35}, -{56,24,-34}, -{56,24,-33}, -{56,24,-32}, -{56,24,-31}, -{56,24,-30}, -{56,24,-29}, -{56,24,-28}, -{56,24,-27}, -{56,24,-26}, -{56,24,-25}, -{56,24,-24}, -{56,24,-23}, -{56,24,-22}, -{56,24,-21}, -{56,24,-20}, -{56,24,-19}, -{56,24,-18}, -{56,24,-17}, -{56,24,-16}, -{56,24,-15}, -{56,24,-14}, -{56,24,-13}, -{56,24,-12}, -{56,24,-11}, -{56,24,-10}, -{56,24,-9}, -{56,24,-8}, -{56,24,-7}, -{56,24,-6}, -{56,24,-5}, -{56,24,-4}, -{56,24,-3}, -{56,24,-2}, -{56,24,-1}, -{56,24,0}, -{56,24,1}, -{56,24,2}, -{56,24,3}, -{56,24,4}, -{56,24,5}, -{56,24,6}, -{56,24,7}, -{56,24,8}, -{56,24,9}, -{56,24,10}, -{56,24,11}, -{56,24,12}, -{56,24,13}, -{56,24,14}, -{56,24,15}, -{56,24,16}, -{56,24,17}, -{56,24,18}, -{56,24,19}, -{56,24,20}, -{56,24,21}, -{56,24,22}, -{56,24,23}, -{56,24,24}, -{56,24,25}, -{56,24,26}, -{56,24,27}, -{56,24,28}, -{56,24,29}, -{56,24,30}, -{56,24,31}, -{56,24,32}, -{56,24,33}, -{56,24,34}, -{56,24,35}, -{56,24,36}, -{56,24,37}, -{56,24,38}, -{56,24,39}, -{56,24,40}, -{56,24,41}, -{56,24,42}, -{56,24,43}, -{56,24,44}, -{56,24,45}, -{56,24,46}, -{56,24,47}, -{56,24,48}, -{56,24,49}, -{56,24,50}, -{56,24,51}, -{56,24,52}, -{56,24,53}, -{56,24,54}, -{56,24,55}, -{56,24,56}, -{56,24,57}, -{56,24,58}, -{56,24,59}, -{56,24,60}, -{56,24,61}, -{56,24,62}, -{56,24,63}, -{56,25,-68}, -{56,25,-67}, -{56,25,-66}, -{56,25,-65}, -{56,25,-64}, -{56,25,-63}, -{56,25,-62}, -{56,25,-61}, -{56,25,-60}, -{56,25,-59}, -{56,25,-58}, -{56,25,-57}, -{56,25,-56}, -{56,25,-55}, -{56,25,-54}, -{56,25,-53}, -{56,25,-52}, -{56,25,-51}, -{56,25,-50}, -{56,25,-49}, -{56,25,-48}, -{56,25,-47}, -{56,25,-46}, -{56,25,-45}, -{56,25,-44}, -{56,25,-43}, -{56,25,-42}, -{56,25,-41}, -{56,25,-40}, -{56,25,-39}, -{56,25,-38}, -{56,25,-37}, -{56,25,-36}, -{56,25,-35}, -{56,25,-34}, -{56,25,-33}, -{56,25,-32}, -{56,25,-31}, -{56,25,-30}, -{56,25,-29}, -{56,25,-28}, -{56,25,-27}, -{56,25,-26}, -{56,25,-25}, -{56,25,-24}, -{56,25,-23}, -{56,25,-22}, -{56,25,-21}, -{56,25,-20}, -{56,25,-19}, -{56,25,-18}, -{56,25,-17}, -{56,25,-16}, -{56,25,-15}, -{56,25,-14}, -{56,25,-13}, -{56,25,-12}, -{56,25,-11}, -{56,25,-10}, -{56,25,-9}, -{56,25,-8}, -{56,25,-7}, -{56,25,-6}, -{56,25,-5}, -{56,25,-4}, -{56,25,-3}, -{56,25,-2}, -{56,25,-1}, -{56,25,0}, -{56,25,1}, -{56,25,2}, -{56,25,3}, -{56,25,4}, -{56,25,5}, -{56,25,6}, -{56,25,7}, -{56,25,8}, -{56,25,9}, -{56,25,10}, -{56,25,11}, -{56,25,12}, -{56,25,13}, -{56,25,14}, -{56,25,15}, -{56,25,16}, -{56,25,17}, -{56,25,18}, -{56,25,19}, -{56,25,20}, -{56,25,21}, -{56,25,22}, -{56,25,23}, -{56,25,24}, -{56,25,25}, -{56,25,26}, -{56,25,27}, -{56,25,28}, -{56,25,29}, -{56,25,30}, -{56,25,31}, -{56,25,32}, -{56,25,33}, -{56,25,34}, -{56,25,35}, -{56,25,36}, -{56,25,37}, -{56,25,38}, -{56,25,39}, -{56,25,40}, -{56,25,41}, -{56,25,42}, -{56,25,43}, -{56,25,44}, -{56,25,45}, -{56,25,46}, -{56,25,47}, -{56,25,48}, -{56,25,49}, -{56,25,50}, -{56,25,51}, -{56,25,52}, -{56,25,53}, -{56,25,54}, -{56,25,55}, -{56,25,56}, -{56,25,57}, -{56,25,58}, -{56,25,59}, -{56,25,60}, -{56,25,61}, -{56,25,62}, -{56,25,63}, -{56,26,-68}, -{56,26,-67}, -{56,26,-66}, -{56,26,-65}, -{56,26,-64}, -{56,26,-63}, -{56,26,-62}, -{56,26,-61}, -{56,26,-60}, -{56,26,-59}, -{56,26,-58}, -{56,26,-57}, -{56,26,-56}, -{56,26,-55}, -{56,26,-54}, -{56,26,-53}, -{56,26,-52}, -{56,26,-51}, -{56,26,-50}, -{56,26,-49}, -{56,26,-48}, -{56,26,-47}, -{56,26,-46}, -{56,26,-45}, -{56,26,-44}, -{56,26,-43}, -{56,26,-42}, -{56,26,-41}, -{56,26,-40}, -{56,26,-39}, -{56,26,-38}, -{56,26,-37}, -{56,26,-36}, -{56,26,-35}, -{56,26,-34}, -{56,26,-33}, -{56,26,-32}, -{56,26,-31}, -{56,26,-30}, -{56,26,-29}, -{56,26,-28}, -{56,26,-27}, -{56,26,-26}, -{56,26,-25}, -{56,26,-24}, -{56,26,-23}, -{56,26,-22}, -{56,26,-21}, -{56,26,-20}, -{56,26,-19}, -{56,26,-18}, -{56,26,-17}, -{56,26,-16}, -{56,26,-15}, -{56,26,-14}, -{56,26,-13}, -{56,26,-12}, -{56,26,-11}, -{56,26,-10}, -{56,26,-9}, -{56,26,-8}, -{56,26,-7}, -{56,26,-6}, -{56,26,-5}, -{56,26,-4}, -{56,26,-3}, -{56,26,-2}, -{56,26,-1}, -{56,26,0}, -{56,26,1}, -{56,26,2}, -{56,26,3}, -{56,26,4}, -{56,26,5}, -{56,26,6}, -{56,26,7}, -{56,26,8}, -{56,26,9}, -{56,26,10}, -{56,26,11}, -{56,26,12}, -{56,26,13}, -{56,26,14}, -{56,26,15}, -{56,26,16}, -{56,26,17}, -{56,26,18}, -{56,26,19}, -{56,26,20}, -{56,26,21}, -{56,26,22}, -{56,26,23}, -{56,26,24}, -{56,26,25}, -{56,26,26}, -{56,26,27}, -{56,26,28}, -{56,26,29}, -{56,26,30}, -{56,26,31}, -{56,26,32}, -{56,26,33}, -{56,26,34}, -{56,26,35}, -{56,26,36}, -{56,26,37}, -{56,26,38}, -{56,26,39}, -{56,26,40}, -{56,26,41}, -{56,26,42}, -{56,26,43}, -{56,26,44}, -{56,26,45}, -{56,26,46}, -{56,26,47}, -{56,26,48}, -{56,26,49}, -{56,26,50}, -{56,26,51}, -{56,26,52}, -{56,26,53}, -{56,26,54}, -{56,26,55}, -{56,26,56}, -{56,26,57}, -{56,26,58}, -{56,26,59}, -{56,26,60}, -{56,26,61}, -{56,26,62}, -{56,26,63}, -{56,27,-68}, -{56,27,-67}, -{56,27,-66}, -{56,27,-65}, -{56,27,-64}, -{56,27,-63}, -{56,27,-62}, -{56,27,-61}, -{56,27,-60}, -{56,27,-59}, -{56,27,-58}, -{56,27,-57}, -{56,27,-56}, -{56,27,-55}, -{56,27,-54}, -{56,27,-53}, -{56,27,-52}, -{56,27,-51}, -{56,27,-50}, -{56,27,-49}, -{56,27,-48}, -{56,27,-47}, -{56,27,-46}, -{56,27,-45}, -{56,27,-44}, -{56,27,-43}, -{56,27,-42}, -{56,27,-41}, -{56,27,-40}, -{56,27,-39}, -{56,27,-38}, -{56,27,-37}, -{56,27,-36}, -{56,27,-35}, -{56,27,-34}, -{56,27,-33}, -{56,27,-32}, -{56,27,-31}, -{56,27,-30}, -{56,27,-29}, -{56,27,-28}, -{56,27,-27}, -{56,27,-26}, -{56,27,-25}, -{56,27,-24}, -{56,27,-23}, -{56,27,-22}, -{56,27,-21}, -{56,27,-20}, -{56,27,-19}, -{56,27,-18}, -{56,27,-17}, -{56,27,-16}, -{56,27,-15}, -{56,27,-14}, -{56,27,-13}, -{56,27,-12}, -{56,27,-11}, -{56,27,-10}, -{56,27,-9}, -{56,27,-8}, -{56,27,-7}, -{56,27,-6}, -{56,27,-5}, -{56,27,-4}, -{56,27,-3}, -{56,27,-2}, -{56,27,-1}, -{56,27,0}, -{56,27,1}, -{56,27,2}, -{56,27,3}, -{56,27,4}, -{56,27,5}, -{56,27,6}, -{56,27,7}, -{56,27,8}, -{56,27,9}, -{56,27,10}, -{56,27,11}, -{56,27,12}, -{56,27,13}, -{56,27,14}, -{56,27,15}, -{56,27,16}, -{56,27,17}, -{56,27,18}, -{56,27,19}, -{56,27,20}, -{56,27,21}, -{56,27,22}, -{56,27,23}, -{56,27,24}, -{56,27,25}, -{56,27,26}, -{56,27,27}, -{56,27,28}, -{56,27,29}, -{56,27,30}, -{56,27,31}, -{56,27,32}, -{56,27,33}, -{56,27,34}, -{56,27,35}, -{56,27,36}, -{56,27,37}, -{56,27,38}, -{56,27,39}, -{56,27,40}, -{56,27,41}, -{56,27,42}, -{56,27,43}, -{56,27,44}, -{56,27,45}, -{56,27,46}, -{56,27,47}, -{56,27,48}, -{56,27,49}, -{56,27,50}, -{56,27,51}, -{56,27,52}, -{56,27,53}, -{56,27,54}, -{56,27,55}, -{56,27,56}, -{56,27,57}, -{56,27,58}, -{56,27,59}, -{56,27,60}, -{56,27,61}, -{56,27,62}, -{56,27,63}, -{56,28,-68}, -{56,28,-67}, -{56,28,-66}, -{56,28,-65}, -{56,28,-64}, -{56,28,-63}, -{56,28,-62}, -{56,28,-61}, -{56,28,-60}, -{56,28,-59}, -{56,28,-58}, -{56,28,-57}, -{56,28,-56}, -{56,28,-55}, -{56,28,-54}, -{56,28,-53}, -{56,28,-52}, -{56,28,-51}, -{56,28,-50}, -{56,28,-49}, -{56,28,-48}, -{56,28,-47}, -{56,28,-46}, -{56,28,-45}, -{56,28,-44}, -{56,28,-43}, -{56,28,-42}, -{56,28,-41}, -{56,28,-40}, -{56,28,-39}, -{56,28,-38}, -{56,28,-37}, -{56,28,-36}, -{56,28,-35}, -{56,28,-34}, -{56,28,-33}, -{56,28,-32}, -{56,28,-31}, -{56,28,-30}, -{56,28,-29}, -{56,28,-28}, -{56,28,-27}, -{56,28,-26}, -{56,28,-25}, -{56,28,-24}, -{56,28,-23}, -{56,28,-22}, -{56,28,-21}, -{56,28,-20}, -{56,28,-19}, -{56,28,-18}, -{56,28,-17}, -{56,28,-16}, -{56,28,-15}, -{56,28,-14}, -{56,28,-13}, -{56,28,-12}, -{56,28,-11}, -{56,28,-10}, -{56,28,-9}, -{56,28,-8}, -{56,28,-7}, -{56,28,-6}, -{56,28,-5}, -{56,28,-4}, -{56,28,-3}, -{56,28,-2}, -{56,28,-1}, -{56,28,0}, -{56,28,1}, -{56,28,2}, -{56,28,3}, -{56,28,4}, -{56,28,5}, -{56,28,6}, -{56,28,7}, -{56,28,8}, -{56,28,9}, -{56,28,10}, -{56,28,11}, -{56,28,12}, -{56,28,13}, -{56,28,14}, -{56,28,15}, -{56,28,16}, -{56,28,17}, -{56,28,18}, -{56,28,19}, -{56,28,20}, -{56,28,21}, -{56,28,22}, -{56,28,23}, -{56,28,24}, -{56,28,25}, -{56,28,26}, -{56,28,27}, -{56,28,28}, -{56,28,29}, -{56,28,30}, -{56,28,31}, -{56,28,32}, -{56,28,33}, -{56,28,34}, -{56,28,35}, -{56,28,36}, -{56,28,37}, -{56,28,38}, -{56,28,39}, -{56,28,40}, -{56,28,41}, -{56,28,42}, -{56,28,43}, -{56,28,44}, -{56,28,45}, -{56,28,46}, -{56,28,47}, -{56,28,48}, -{56,28,49}, -{56,28,50}, -{56,28,51}, -{56,28,52}, -{56,28,53}, -{56,28,54}, -{56,28,55}, -{56,28,56}, -{56,28,57}, -{56,28,58}, -{56,28,59}, -{56,28,60}, -{56,28,61}, -{56,28,62}, -{56,28,63}, -{56,29,-68}, -{56,29,-67}, -{56,29,-66}, -{56,29,-65}, -{56,29,-64}, -{56,29,-63}, -{56,29,-62}, -{56,29,-61}, -{56,29,-60}, -{56,29,-59}, -{56,29,-58}, -{56,29,-57}, -{56,29,-56}, -{56,29,-55}, -{56,29,-54}, -{56,29,-53}, -{56,29,-52}, -{56,29,-51}, -{56,29,-50}, -{56,29,-49}, -{56,29,-48}, -{56,29,-47}, -{56,29,-46}, -{56,29,-45}, -{56,29,-44}, -{56,29,-43}, -{56,29,-42}, -{56,29,-41}, -{56,29,-40}, -{56,29,-39}, -{56,29,-38}, -{56,29,-37}, -{56,29,-36}, -{56,29,-35}, -{56,29,-34}, -{56,29,-33}, -{56,29,-32}, -{56,29,-31}, -{56,29,-30}, -{56,29,-29}, -{56,29,-28}, -{56,29,-27}, -{56,29,-26}, -{56,29,-25}, -{56,29,-24}, -{56,29,-23}, -{56,29,-22}, -{56,29,-21}, -{56,29,-20}, -{56,29,-19}, -{56,29,-18}, -{56,29,-17}, -{56,29,-16}, -{56,29,-15}, -{56,29,-14}, -{56,29,-13}, -{56,29,-12}, -{56,29,-11}, -{56,29,-10}, -{56,29,-9}, -{56,29,-8}, -{56,29,-7}, -{56,29,-6}, -{56,29,-5}, -{56,29,-4}, -{56,29,-3}, -{56,29,-2}, -{56,29,-1}, -{56,29,0}, -{56,29,1}, -{56,29,2}, -{56,29,3}, -{56,29,4}, -{56,29,5}, -{56,29,6}, -{56,29,7}, -{56,29,8}, -{56,29,9}, -{56,29,10}, -{56,29,11}, -{56,29,12}, -{56,29,13}, -{56,29,14}, -{56,29,15}, -{56,29,16}, -{56,29,17}, -{56,29,18}, -{56,29,19}, -{56,29,20}, -{56,29,21}, -{56,29,22}, -{56,29,23}, -{56,29,24}, -{56,29,25}, -{56,29,26}, -{56,29,27}, -{56,29,28}, -{56,29,29}, -{56,29,30}, -{56,29,31}, -{56,29,32}, -{56,29,33}, -{56,29,34}, -{56,29,35}, -{56,29,36}, -{56,29,37}, -{56,29,38}, -{56,29,39}, -{56,29,40}, -{56,29,41}, -{56,29,42}, -{56,29,43}, -{56,29,44}, -{56,29,45}, -{56,29,46}, -{56,29,47}, -{56,29,48}, -{56,29,49}, -{56,29,50}, -{56,29,51}, -{56,29,52}, -{56,29,53}, -{56,29,54}, -{56,29,55}, -{56,29,56}, -{56,29,57}, -{56,29,58}, -{56,29,59}, -{56,29,60}, -{56,29,61}, -{56,29,62}, -{56,29,63}, -{56,30,-68}, -{56,30,-67}, -{56,30,-66}, -{56,30,-65}, -{56,30,-64}, -{56,30,-63}, -{56,30,-62}, -{56,30,-61}, -{56,30,-60}, -{56,30,-59}, -{56,30,-58}, -{56,30,-57}, -{56,30,-56}, -{56,30,-55}, -{56,30,-54}, -{56,30,-53}, -{56,30,-52}, -{56,30,-51}, -{56,30,-50}, -{56,30,-49}, -{56,30,-48}, -{56,30,-47}, -{56,30,-46}, -{56,30,-45}, -{56,30,-44}, -{56,30,-43}, -{56,30,-42}, -{56,30,-41}, -{56,30,-40}, -{56,30,-39}, -{56,30,-38}, -{56,30,-37}, -{56,30,-36}, -{56,30,-35}, -{56,30,-34}, -{56,30,-33}, -{56,30,-32}, -{56,30,-31}, -{56,30,-30}, -{56,30,-29}, -{56,30,-28}, -{56,30,-27}, -{56,30,-26}, -{56,30,-25}, -{56,30,-24}, -{56,30,-23}, -{56,30,-22}, -{56,30,-21}, -{56,30,-20}, -{56,30,-19}, -{56,30,-18}, -{56,30,-17}, -{56,30,-16}, -{56,30,-15}, -{56,30,-14}, -{56,30,-13}, -{56,30,-12}, -{56,30,-11}, -{56,30,-10}, -{56,30,-9}, -{56,30,-8}, -{56,30,-7}, -{56,30,-6}, -{56,30,-5}, -{56,30,-4}, -{56,30,-3}, -{56,30,-2}, -{56,30,-1}, -{56,30,0}, -{56,30,1}, -{56,30,2}, -{56,30,3}, -{56,30,4}, -{56,30,5}, -{56,30,6}, -{56,30,7}, -{56,30,8}, -{56,30,9}, -{56,30,10}, -{56,30,11}, -{56,30,12}, -{56,30,13}, -{56,30,14}, -{56,30,15}, -{56,30,16}, -{56,30,17}, -{56,30,18}, -{56,30,19}, -{56,30,20}, -{56,30,21}, -{56,30,22}, -{56,30,23}, -{56,30,24}, -{56,30,25}, -{56,30,26}, -{56,30,27}, -{56,30,28}, -{56,30,29}, -{56,30,30}, -{56,30,31}, -{56,30,32}, -{56,30,33}, -{56,30,34}, -{56,30,35}, -{56,30,36}, -{56,30,37}, -{56,30,38}, -{56,30,39}, -{56,30,40}, -{56,30,41}, -{56,30,42}, -{56,30,43}, -{56,30,44}, -{56,30,45}, -{56,30,46}, -{56,30,47}, -{56,30,48}, -{56,30,49}, -{56,30,50}, -{56,30,51}, -{56,30,52}, -{56,30,53}, -{56,30,54}, -{56,30,55}, -{56,30,56}, -{56,30,57}, -{56,30,58}, -{56,30,59}, -{56,30,60}, -{56,30,61}, -{56,30,62}, -{56,30,63}, -{56,31,-68}, -{56,31,-67}, -{56,31,-66}, -{56,31,-65}, -{56,31,-64}, -{56,31,-63}, -{56,31,-62}, -{56,31,-61}, -{56,31,-60}, -{56,31,-59}, -{56,31,-58}, -{56,31,-57}, -{56,31,-56}, -{56,31,-55}, -{56,31,-54}, -{56,31,-53}, -{56,31,-52}, -{56,31,-51}, -{56,31,-50}, -{56,31,-49}, -{56,31,-48}, -{56,31,-47}, -{56,31,-46}, -{56,31,-45}, -{56,31,-44}, -{56,31,-43}, -{56,31,-42}, -{56,31,-41}, -{56,31,-40}, -{56,31,-39}, -{56,31,-38}, -{56,31,-37}, -{56,31,-36}, -{56,31,-35}, -{56,31,-34}, -{56,31,-33}, -{56,31,-32}, -{56,31,-31}, -{56,31,-30}, -{56,31,-29}, -{56,31,-28}, -{56,31,-27}, -{56,31,-26}, -{56,31,-25}, -{56,31,-24}, -{56,31,-23}, -{56,31,-22}, -{56,31,-21}, -{56,31,-20}, -{56,31,-19}, -{56,31,-18}, -{56,31,-17}, -{56,31,-16}, -{56,31,-15}, -{56,31,-14}, -{56,31,-13}, -{56,31,-12}, -{56,31,-11}, -{56,31,-10}, -{56,31,-9}, -{56,31,-8}, -{56,31,-7}, -{56,31,-6}, -{56,31,-5}, -{56,31,-4}, -{56,31,-3}, -{56,31,-2}, -{56,31,-1}, -{56,31,0}, -{56,31,1}, -{56,31,2}, -{56,31,3}, -{56,31,4}, -{56,31,5}, -{56,31,6}, -{56,31,7}, -{56,31,8}, -{56,31,9}, -{56,31,10}, -{56,31,11}, -{56,31,12}, -{56,31,13}, -{56,31,14}, -{56,31,15}, -{56,31,16}, -{56,31,17}, -{56,31,18}, -{56,31,19}, -{56,31,20}, -{56,31,21}, -{56,31,22}, -{56,31,23}, -{56,31,24}, -{56,31,25}, -{56,31,26}, -{56,31,27}, -{56,31,28}, -{56,31,29}, -{56,31,30}, -{56,31,31}, -{56,31,32}, -{56,31,33}, -{56,31,34}, -{56,31,35}, -{56,31,36}, -{56,31,37}, -{56,31,38}, -{56,31,39}, -{56,31,40}, -{56,31,41}, -{56,31,42}, -{56,31,43}, -{56,31,44}, -{56,31,45}, -{56,31,46}, -{56,31,47}, -{56,31,48}, -{56,31,49}, -{56,31,50}, -{56,31,51}, -{56,31,52}, -{56,31,53}, -{56,31,54}, -{56,31,55}, -{56,31,56}, -{56,31,57}, -{56,31,58}, -{56,31,59}, -{56,31,60}, -{56,31,61}, -{56,31,62}, -{56,31,63}, -{56,32,-68}, -{56,32,-67}, -{56,32,-66}, -{56,32,-65}, -{56,32,-64}, -{56,32,-63}, -{56,32,-62}, -{56,32,-61}, -{56,32,-60}, -{56,32,-59}, -{56,32,-58}, -{56,32,-57}, -{56,32,-56}, -{56,32,-55}, -{56,32,-54}, -{56,32,-53}, -{56,32,-52}, -{56,32,-51}, -{56,32,-50}, -{56,32,-49}, -{56,32,-48}, -{56,32,-47}, -{56,32,-46}, -{56,32,-45}, -{56,32,-44}, -{56,32,-43}, -{56,32,-42}, -{56,32,-41}, -{56,32,-40}, -{56,32,-39}, -{56,32,-38}, -{56,32,-37}, -{56,32,-36}, -{56,32,-35}, -{56,32,-34}, -{56,32,-33}, -{56,32,-32}, -{56,32,-31}, -{56,32,-30}, -{56,32,-29}, -{56,32,-28}, -{56,32,-27}, -{56,32,-26}, -{56,32,-25}, -{56,32,-24}, -{56,32,-23}, -{56,32,-22}, -{56,32,-21}, -{56,32,-20}, -{56,32,-19}, -{56,32,-18}, -{56,32,-17}, -{56,32,-16}, -{56,32,-15}, -{56,32,-14}, -{56,32,-13}, -{56,32,-12}, -{56,32,-11}, -{56,32,-10}, -{56,32,-9}, -{56,32,-8}, -{56,32,-7}, -{56,32,-6}, -{56,32,-5}, -{56,32,-4}, -{56,32,-3}, -{56,32,-2}, -{56,32,-1}, -{56,32,0}, -{56,32,1}, -{56,32,2}, -{56,32,3}, -{56,32,4}, -{56,32,5}, -{56,32,6}, -{56,32,7}, -{56,32,8}, -{56,32,9}, -{56,32,10}, -{56,32,11}, -{56,32,12}, -{56,32,13}, -{56,32,14}, -{56,32,15}, -{56,32,16}, -{56,32,17}, -{56,32,18}, -{56,32,19}, -{56,32,20}, -{56,32,21}, -{56,32,22}, -{56,32,23}, -{56,32,24}, -{56,32,25}, -{56,32,26}, -{56,32,27}, -{56,32,28}, -{56,32,29}, -{56,32,30}, -{56,32,31}, -{56,32,32}, -{56,32,33}, -{56,32,34}, -{56,32,35}, -{56,32,36}, -{56,32,37}, -{56,32,38}, -{56,32,39}, -{56,32,40}, -{56,32,41}, -{56,32,42}, -{56,32,43}, -{56,32,44}, -{56,32,45}, -{56,32,46}, -{56,32,47}, -{56,32,48}, -{56,32,49}, -{56,32,50}, -{56,32,51}, -{56,32,52}, -{56,32,53}, -{56,32,54}, -{56,32,55}, -{56,32,56}, -{56,32,57}, -{56,32,58}, -{56,32,59}, -{56,32,60}, -{56,32,61}, -{56,32,62}, -{56,32,63}, -{56,33,-68}, -{56,33,-67}, -{56,33,-66}, -{56,33,-65}, -{56,33,-64}, -{56,33,-63}, -{56,33,-62}, -{56,33,-61}, -{56,33,-60}, -{56,33,-59}, -{56,33,-58}, -{56,33,-57}, -{56,33,-56}, -{56,33,-55}, -{56,33,-54}, -{56,33,-53}, -{56,33,-52}, -{56,33,-51}, -{56,33,-50}, -{56,33,-49}, -{56,33,-48}, -{56,33,-47}, -{56,33,-46}, -{56,33,-45}, -{56,33,-44}, -{56,33,-43}, -{56,33,-42}, -{56,33,-41}, -{56,33,-40}, -{56,33,-39}, -{56,33,-38}, -{56,33,-37}, -{56,33,-36}, -{56,33,-35}, -{56,33,-34}, -{56,33,-33}, -{56,33,-32}, -{56,33,-31}, -{56,33,-30}, -{56,33,-29}, -{56,33,-28}, -{56,33,-27}, -{56,33,-26}, -{56,33,-25}, -{56,33,-24}, -{56,33,-23}, -{56,33,-22}, -{56,33,-21}, -{56,33,-20}, -{56,33,-19}, -{56,33,-18}, -{56,33,-17}, -{56,33,-16}, -{56,33,-15}, -{56,33,-14}, -{56,33,-13}, -{56,33,-12}, -{56,33,-11}, -{56,33,-10}, -{56,33,-9}, -{56,33,-8}, -{56,33,-7}, -{56,33,-6}, -{56,33,-5}, -{56,33,-4}, -{56,33,-3}, -{56,33,-2}, -{56,33,-1}, -{56,33,0}, -{56,33,1}, -{56,33,2}, -{56,33,3}, -{56,33,4}, -{56,33,5}, -{56,33,6}, -{56,33,7}, -{56,33,8}, -{56,33,9}, -{56,33,10}, -{56,33,11}, -{56,33,12}, -{56,33,13}, -{56,33,14}, -{56,33,15}, -{56,33,16}, -{56,33,17}, -{56,33,18}, -{56,33,19}, -{56,33,20}, -{56,33,21}, -{56,33,22}, -{56,33,23}, -{56,33,24}, -{56,33,25}, -{56,33,26}, -{56,33,27}, -{56,33,28}, -{56,33,29}, -{56,33,30}, -{56,33,31}, -{56,33,32}, -{56,33,33}, -{56,33,34}, -{56,33,35}, -{56,33,36}, -{56,33,37}, -{56,33,38}, -{56,33,39}, -{56,33,40}, -{56,33,41}, -{56,33,42}, -{56,33,43}, -{56,33,44}, -{56,33,45}, -{56,33,46}, -{56,33,47}, -{56,33,48}, -{56,33,49}, -{56,33,50}, -{56,33,51}, -{56,33,52}, -{56,33,53}, -{56,33,54}, -{56,33,55}, -{56,33,56}, -{56,33,57}, -{56,33,58}, -{56,33,59}, -{56,33,60}, -{56,33,61}, -{56,33,62}, -{56,33,63}, -{56,34,-68}, -{56,34,-67}, -{56,34,-66}, -{56,34,-65}, -{56,34,-64}, -{56,34,-63}, -{56,34,-62}, -{56,34,-61}, -{56,34,-60}, -{56,34,-59}, -{56,34,-58}, -{56,34,-57}, -{56,34,-56}, -{56,34,-55}, -{56,34,-54}, -{56,34,-53}, -{56,34,-52}, -{56,34,-51}, -{56,34,-50}, -{56,34,-49}, -{56,34,-48}, -{56,34,-47}, -{56,34,-46}, -{56,34,-45}, -{56,34,-44}, -{56,34,-43}, -{56,34,-42}, -{56,34,-41}, -{56,34,-40}, -{56,34,-39}, -{56,34,-38}, -{56,34,-37}, -{56,34,-36}, -{56,34,-35}, -{56,34,-34}, -{56,34,-33}, -{56,34,-32}, -{56,34,-31}, -{56,34,-30}, -{56,34,-29}, -{56,34,-28}, -{56,34,-27}, -{56,34,-26}, -{56,34,-25}, -{56,34,-24}, -{56,34,-23}, -{56,34,-22}, -{56,34,-21}, -{56,34,-20}, -{56,34,-19}, -{56,34,-18}, -{56,34,-17}, -{56,34,-16}, -{56,34,-15}, -{56,34,-14}, -{56,34,-13}, -{56,34,-12}, -{56,34,-11}, -{56,34,-10}, -{56,34,-9}, -{56,34,-8}, -{56,34,-7}, -{56,34,-6}, -{56,34,-5}, -{56,34,-4}, -{56,34,-3}, -{56,34,-2}, -{56,34,-1}, -{56,34,0}, -{56,34,1}, -{56,34,2}, -{56,34,3}, -{56,34,4}, -{56,34,5}, -{56,34,6}, -{56,34,7}, -{56,34,8}, -{56,34,9}, -{56,34,10}, -{56,34,11}, -{56,34,12}, -{56,34,13}, -{56,34,14}, -{56,34,15}, -{56,34,16}, -{56,34,17}, -{56,34,18}, -{56,34,19}, -{56,34,20}, -{56,34,21}, -{56,34,22}, -{56,34,23}, -{56,34,24}, -{56,34,25}, -{56,34,26}, -{56,34,27}, -{56,34,28}, -{56,34,29}, -{56,34,30}, -{56,34,31}, -{56,34,32}, -{56,34,33}, -{56,34,34}, -{56,34,35}, -{56,34,36}, -{56,34,37}, -{56,34,38}, -{56,34,39}, -{56,34,40}, -{56,34,41}, -{56,34,42}, -{56,34,43}, -{56,34,44}, -{56,34,45}, -{56,34,46}, -{56,34,47}, -{56,34,48}, -{56,34,49}, -{56,34,50}, -{56,34,51}, -{56,34,52}, -{56,34,53}, -{56,34,54}, -{56,34,55}, -{56,34,56}, -{56,34,57}, -{56,34,58}, -{56,34,59}, -{56,34,60}, -{56,34,61}, -{56,34,62}, -{56,34,63}, -{56,34,64}, -{56,35,-68}, -{56,35,-67}, -{56,35,-66}, -{56,35,-65}, -{56,35,-64}, -{56,35,-63}, -{56,35,-62}, -{56,35,-61}, -{56,35,-60}, -{56,35,-59}, -{56,35,-58}, -{56,35,-57}, -{56,35,-56}, -{56,35,-55}, -{56,35,-54}, -{56,35,-53}, -{56,35,-52}, -{56,35,-51}, -{56,35,-50}, -{56,35,-49}, -{56,35,-48}, -{56,35,-47}, -{56,35,-46}, -{56,35,-45}, -{56,35,-44}, -{56,35,-43}, -{56,35,-42}, -{56,35,-41}, -{56,35,-40}, -{56,35,-39}, -{56,35,-38}, -{56,35,-37}, -{56,35,-36}, -{56,35,-35}, -{56,35,-34}, -{56,35,-33}, -{56,35,-32}, -{56,35,-31}, -{56,35,-30}, -{56,35,-29}, -{56,35,-28}, -{56,35,-27}, -{56,35,-26}, -{56,35,-25}, -{56,35,-24}, -{56,35,-23}, -{56,35,-22}, -{56,35,-21}, -{56,35,-20}, -{56,35,-19}, -{56,35,-18}, -{56,35,-17}, -{56,35,-16}, -{56,35,-15}, -{56,35,-14}, -{56,35,-13}, -{56,35,-12}, -{56,35,-11}, -{56,35,-10}, -{56,35,-9}, -{56,35,-8}, -{56,35,-7}, -{56,35,-6}, -{56,35,-5}, -{56,35,-4}, -{56,35,-3}, -{56,35,-2}, -{56,35,-1}, -{56,35,0}, -{56,35,1}, -{56,35,2}, -{56,35,3}, -{56,35,4}, -{56,35,5}, -{56,35,6}, -{56,35,7}, -{56,35,8}, -{56,35,9}, -{56,35,10}, -{56,35,11}, -{56,35,12}, -{56,35,13}, -{56,35,14}, -{56,35,15}, -{56,35,16}, -{56,35,17}, -{56,35,18}, -{56,35,19}, -{56,35,20}, -{56,35,21}, -{56,35,22}, -{56,35,23}, -{56,35,24}, -{56,35,25}, -{56,35,26}, -{56,35,27}, -{56,35,28}, -{56,35,29}, -{56,35,30}, -{56,35,31}, -{56,35,32}, -{56,35,33}, -{56,35,34}, -{56,35,35}, -{56,35,36}, -{56,35,37}, -{56,35,38}, -{56,35,39}, -{56,35,40}, -{56,35,41}, -{56,35,42}, -{56,35,43}, -{56,35,44}, -{56,35,45}, -{56,35,46}, -{56,35,47}, -{56,35,48}, -{56,35,49}, -{56,35,50}, -{56,35,51}, -{56,35,52}, -{56,35,53}, -{56,35,54}, -{56,35,55}, -{56,35,56}, -{56,35,57}, -{56,35,58}, -{56,35,59}, -{56,35,60}, -{56,35,61}, -{56,35,62}, -{56,35,63}, -{56,35,64}, -{56,36,-68}, -{56,36,-67}, -{56,36,-66}, -{56,36,-65}, -{56,36,-64}, -{56,36,-63}, -{56,36,-62}, -{56,36,-61}, -{56,36,-60}, -{56,36,-59}, -{56,36,-58}, -{56,36,-57}, -{56,36,-56}, -{56,36,-55}, -{56,36,-54}, -{56,36,-53}, -{56,36,-52}, -{56,36,-51}, -{56,36,-50}, -{56,36,-49}, -{56,36,-48}, -{56,36,-47}, -{56,36,-46}, -{56,36,-45}, -{56,36,-44}, -{56,36,-43}, -{56,36,-42}, -{56,36,-41}, -{56,36,-40}, -{56,36,-39}, -{56,36,-38}, -{56,36,-37}, -{56,36,-36}, -{56,36,-35}, -{56,36,-34}, -{56,36,-33}, -{56,36,-32}, -{56,36,-31}, -{56,36,-30}, -{56,36,-29}, -{56,36,-28}, -{56,36,-27}, -{56,36,-26}, -{56,36,-25}, -{56,36,-24}, -{56,36,-23}, -{56,36,-22}, -{56,36,-21}, -{56,36,-20}, -{56,36,-19}, -{56,36,-18}, -{56,36,-17}, -{56,36,-16}, -{56,36,-15}, -{56,36,-14}, -{56,36,-13}, -{56,36,-12}, -{56,36,-11}, -{56,36,-10}, -{56,36,-9}, -{56,36,-8}, -{56,36,-7}, -{56,36,-6}, -{56,36,-5}, -{56,36,-4}, -{56,36,-3}, -{56,36,-2}, -{56,36,-1}, -{56,36,0}, -{56,36,1}, -{56,36,2}, -{56,36,3}, -{56,36,4}, -{56,36,5}, -{56,36,6}, -{56,36,7}, -{56,36,8}, -{56,36,9}, -{56,36,10}, -{56,36,11}, -{56,36,12}, -{56,36,13}, -{56,36,14}, -{56,36,15}, -{56,36,16}, -{56,36,17}, -{56,36,18}, -{56,36,19}, -{56,36,20}, -{56,36,21}, -{56,36,22}, -{56,36,23}, -{56,36,24}, -{56,36,25}, -{56,36,26}, -{56,36,27}, -{56,36,28}, -{56,36,29}, -{56,36,30}, -{56,36,31}, -{56,36,32}, -{56,36,33}, -{56,36,34}, -{56,36,35}, -{56,36,36}, -{56,36,37}, -{56,36,38}, -{56,36,39}, -{56,36,40}, -{56,36,41}, -{56,36,42}, -{56,36,43}, -{56,36,44}, -{56,36,45}, -{56,36,46}, -{56,36,47}, -{56,36,48}, -{56,36,49}, -{56,36,50}, -{56,36,51}, -{56,36,52}, -{56,36,53}, -{56,36,54}, -{56,36,55}, -{56,36,56}, -{56,36,57}, -{56,36,58}, -{56,36,59}, -{56,36,60}, -{56,36,61}, -{56,36,62}, -{56,36,63}, -{56,36,64}, -{56,37,-68}, -{56,37,-67}, -{56,37,-66}, -{56,37,-65}, -{56,37,-64}, -{56,37,-63}, -{56,37,-62}, -{56,37,-61}, -{56,37,-60}, -{56,37,-59}, -{56,37,-58}, -{56,37,-57}, -{56,37,-56}, -{56,37,-55}, -{56,37,-54}, -{56,37,-53}, -{56,37,-52}, -{56,37,-51}, -{56,37,-50}, -{56,37,-49}, -{56,37,-48}, -{56,37,-47}, -{56,37,-46}, -{56,37,-45}, -{56,37,-44}, -{56,37,-43}, -{56,37,-42}, -{56,37,-41}, -{56,37,-40}, -{56,37,-39}, -{56,37,-38}, -{56,37,-37}, -{56,37,-36}, -{56,37,-35}, -{56,37,-34}, -{56,37,-33}, -{56,37,-32}, -{56,37,-31}, -{56,37,-30}, -{56,37,-29}, -{56,37,-28}, -{56,37,-27}, -{56,37,-26}, -{56,37,-25}, -{56,37,-24}, -{56,37,-23}, -{56,37,-22}, -{56,37,-21}, -{56,37,-20}, -{56,37,-19}, -{56,37,-18}, -{56,37,-17}, -{56,37,-16}, -{56,37,-15}, -{56,37,-14}, -{56,37,-13}, -{56,37,-12}, -{56,37,-11}, -{56,37,-10}, -{56,37,-9}, -{56,37,-8}, -{56,37,-7}, -{56,37,-6}, -{56,37,-5}, -{56,37,-4}, -{56,37,-3}, -{56,37,-2}, -{56,37,-1}, -{56,37,0}, -{56,37,1}, -{56,37,2}, -{56,37,3}, -{56,37,4}, -{56,37,5}, -{56,37,6}, -{56,37,7}, -{56,37,8}, -{56,37,9}, -{56,37,10}, -{56,37,11}, -{56,37,12}, -{56,37,13}, -{56,37,14}, -{56,37,15}, -{56,37,16}, -{56,37,17}, -{56,37,18}, -{56,37,19}, -{56,37,20}, -{56,37,21}, -{56,37,22}, -{56,37,23}, -{56,37,24}, -{56,37,25}, -{56,37,26}, -{56,37,27}, -{56,37,28}, -{56,37,29}, -{56,37,30}, -{56,37,31}, -{56,37,32}, -{56,37,33}, -{56,37,34}, -{56,37,35}, -{56,37,36}, -{56,37,37}, -{56,37,38}, -{56,37,39}, -{56,37,40}, -{56,37,41}, -{56,37,42}, -{56,37,43}, -{56,37,44}, -{56,37,45}, -{56,37,46}, -{56,37,47}, -{56,37,48}, -{56,37,49}, -{56,37,50}, -{56,37,51}, -{56,37,52}, -{56,37,53}, -{56,37,54}, -{56,37,55}, -{56,37,56}, -{56,37,57}, -{56,37,58}, -{56,37,59}, -{56,37,60}, -{56,37,61}, -{56,37,62}, -{56,37,63}, -{56,37,64}, -{56,38,-68}, -{56,38,-67}, -{56,38,-66}, -{56,38,-65}, -{56,38,-64}, -{56,38,-63}, -{56,38,-62}, -{56,38,-61}, -{56,38,-60}, -{56,38,-59}, -{56,38,-58}, -{56,38,-57}, -{56,38,-56}, -{56,38,-55}, -{56,38,-54}, -{56,38,-53}, -{56,38,-52}, -{56,38,-51}, -{56,38,-50}, -{56,38,-49}, -{56,38,-48}, -{56,38,-47}, -{56,38,-46}, -{56,38,-45}, -{56,38,-44}, -{56,38,-43}, -{56,38,-42}, -{56,38,-41}, -{56,38,-40}, -{56,38,-39}, -{56,38,-38}, -{56,38,-37}, -{56,38,-36}, -{56,38,-35}, -{56,38,-34}, -{56,38,-33}, -{56,38,-32}, -{56,38,-31}, -{56,38,-30}, -{56,38,-29}, -{56,38,-28}, -{56,38,-27}, -{56,38,-26}, -{56,38,-25}, -{56,38,-24}, -{56,38,-23}, -{56,38,-22}, -{56,38,-21}, -{56,38,-20}, -{56,38,-19}, -{56,38,-18}, -{56,38,-17}, -{56,38,-16}, -{56,38,-15}, -{56,38,-14}, -{56,38,-13}, -{56,38,-12}, -{56,38,-11}, -{56,38,-10}, -{56,38,-9}, -{56,38,-8}, -{56,38,-7}, -{56,38,-6}, -{56,38,-5}, -{56,38,-4}, -{56,38,-3}, -{56,38,-2}, -{56,38,-1}, -{56,38,0}, -{56,38,1}, -{56,38,2}, -{56,38,3}, -{56,38,4}, -{56,38,5}, -{56,38,6}, -{56,38,7}, -{56,38,8}, -{56,38,9}, -{56,38,10}, -{56,38,11}, -{56,38,12}, -{56,38,13}, -{56,38,14}, -{56,38,15}, -{56,38,16}, -{56,38,17}, -{56,38,18}, -{56,38,19}, -{56,38,20}, -{56,38,21}, -{56,38,22}, -{56,38,23}, -{56,38,24}, -{56,38,25}, -{56,38,26}, -{56,38,27}, -{56,38,28}, -{56,38,29}, -{56,38,30}, -{56,38,31}, -{56,38,32}, -{56,38,33}, -{56,38,34}, -{56,38,35}, -{56,38,36}, -{56,38,37}, -{56,38,38}, -{56,38,39}, -{56,38,40}, -{56,38,41}, -{56,38,42}, -{56,38,43}, -{56,38,44}, -{56,38,45}, -{56,38,46}, -{56,38,47}, -{56,38,48}, -{56,38,49}, -{56,38,50}, -{56,38,51}, -{56,38,52}, -{56,38,53}, -{56,38,54}, -{56,38,55}, -{56,38,56}, -{56,38,57}, -{56,38,58}, -{56,38,59}, -{56,38,60}, -{56,38,61}, -{56,38,62}, -{56,38,63}, -{56,38,64}, -{56,39,-68}, -{56,39,-67}, -{56,39,-66}, -{56,39,-65}, -{56,39,-64}, -{56,39,-63}, -{56,39,-62}, -{56,39,-61}, -{56,39,-60}, -{56,39,-59}, -{56,39,-58}, -{56,39,-57}, -{56,39,-56}, -{56,39,-55}, -{56,39,-54}, -{56,39,-53}, -{56,39,-52}, -{56,39,-51}, -{56,39,-50}, -{56,39,-49}, -{56,39,-48}, -{56,39,-47}, -{56,39,-46}, -{56,39,-45}, -{56,39,-44}, -{56,39,-43}, -{56,39,-42}, -{56,39,-41}, -{56,39,-40}, -{56,39,-39}, -{56,39,-38}, -{56,39,-37}, -{56,39,-36}, -{56,39,-35}, -{56,39,-34}, -{56,39,-33}, -{56,39,-32}, -{56,39,-31}, -{56,39,-30}, -{56,39,-29}, -{56,39,-28}, -{56,39,-27}, -{56,39,-26}, -{56,39,-25}, -{56,39,-24}, -{56,39,-23}, -{56,39,-22}, -{56,39,-21}, -{56,39,-20}, -{56,39,-19}, -{56,39,-18}, -{56,39,-17}, -{56,39,-16}, -{56,39,-15}, -{56,39,-14}, -{56,39,-13}, -{56,39,-12}, -{56,39,-11}, -{56,39,-10}, -{56,39,-9}, -{56,39,-8}, -{56,39,-7}, -{56,39,-6}, -{56,39,-5}, -{56,39,-4}, -{56,39,-3}, -{56,39,-2}, -{56,39,-1}, -{56,39,0}, -{56,39,1}, -{56,39,2}, -{56,39,3}, -{56,39,4}, -{56,39,5}, -{56,39,6}, -{56,39,7}, -{56,39,8}, -{56,39,9}, -{56,39,10}, -{56,39,11}, -{56,39,12}, -{56,39,13}, -{56,39,14}, -{56,39,15}, -{56,39,16}, -{56,39,17}, -{56,39,18}, -{56,39,19}, -{56,39,20}, -{56,39,21}, -{56,39,22}, -{56,39,23}, -{56,39,24}, -{56,39,25}, -{56,39,26}, -{56,39,27}, -{56,39,28}, -{56,39,29}, -{56,39,30}, -{56,39,31}, -{56,39,32}, -{56,39,33}, -{56,39,34}, -{56,39,35}, -{56,39,36}, -{56,39,37}, -{56,39,38}, -{56,39,39}, -{56,39,40}, -{56,39,41}, -{56,39,42}, -{56,39,43}, -{56,39,44}, -{56,39,45}, -{56,39,46}, -{56,39,47}, -{56,39,48}, -{56,39,49}, -{56,39,50}, -{56,39,51}, -{56,39,52}, -{56,39,53}, -{56,39,54}, -{56,39,55}, -{56,39,56}, -{56,39,57}, -{56,39,58}, -{56,39,59}, -{56,39,60}, -{56,39,61}, -{56,39,62}, -{56,39,63}, -{56,39,64}, -{56,40,-68}, -{56,40,-67}, -{56,40,-66}, -{56,40,-65}, -{56,40,-64}, -{56,40,-63}, -{56,40,-62}, -{56,40,-61}, -{56,40,-60}, -{56,40,-59}, -{56,40,-58}, -{56,40,-57}, -{56,40,-56}, -{56,40,-55}, -{56,40,-54}, -{56,40,-53}, -{56,40,-52}, -{56,40,-51}, -{56,40,-50}, -{56,40,-49}, -{56,40,-48}, -{56,40,-47}, -{56,40,-46}, -{56,40,-45}, -{56,40,-44}, -{56,40,-43}, -{56,40,-42}, -{56,40,-41}, -{56,40,-40}, -{56,40,-39}, -{56,40,-38}, -{56,40,-37}, -{56,40,-36}, -{56,40,-35}, -{56,40,-34}, -{56,40,-33}, -{56,40,-32}, -{56,40,-31}, -{56,40,-30}, -{56,40,-29}, -{56,40,-28}, -{56,40,-27}, -{56,40,-26}, -{56,40,-25}, -{56,40,-24}, -{56,40,-23}, -{56,40,-22}, -{56,40,-21}, -{56,40,-20}, -{56,40,-19}, -{56,40,-18}, -{56,40,-17}, -{56,40,-16}, -{56,40,-15}, -{56,40,-14}, -{56,40,-13}, -{56,40,-12}, -{56,40,-11}, -{56,40,-10}, -{56,40,-9}, -{56,40,-8}, -{56,40,-7}, -{56,40,-6}, -{56,40,-5}, -{56,40,-4}, -{56,40,-3}, -{56,40,-2}, -{56,40,-1}, -{56,40,0}, -{56,40,1}, -{56,40,2}, -{56,40,3}, -{56,40,4}, -{56,40,5}, -{56,40,6}, -{56,40,7}, -{56,40,8}, -{56,40,9}, -{56,40,10}, -{56,40,11}, -{56,40,12}, -{56,40,13}, -{56,40,14}, -{56,40,15}, -{56,40,16}, -{56,40,17}, -{56,40,18}, -{56,40,19}, -{56,40,20}, -{56,40,21}, -{56,40,22}, -{56,40,23}, -{56,40,24}, -{56,40,25}, -{56,40,26}, -{56,40,27}, -{56,40,28}, -{56,40,29}, -{56,40,30}, -{56,40,31}, -{56,40,32}, -{56,40,33}, -{56,40,34}, -{56,40,35}, -{56,40,36}, -{56,40,37}, -{56,40,38}, -{56,40,39}, -{56,40,40}, -{56,40,41}, -{56,40,42}, -{56,40,43}, -{56,40,44}, -{56,40,45}, -{56,40,46}, -{56,40,47}, -{56,40,48}, -{56,40,49}, -{56,40,50}, -{56,40,51}, -{56,40,52}, -{56,40,53}, -{56,40,54}, -{56,40,55}, -{56,40,56}, -{56,40,57}, -{56,40,58}, -{56,40,59}, -{56,40,60}, -{56,40,61}, -{56,40,62}, -{56,40,63}, -{56,40,64}, -{56,41,-68}, -{56,41,-67}, -{56,41,-66}, -{56,41,-65}, -{56,41,-64}, -{56,41,-63}, -{56,41,-62}, -{56,41,-61}, -{56,41,-60}, -{56,41,-59}, -{56,41,-58}, -{56,41,-57}, -{56,41,-56}, -{56,41,-55}, -{56,41,-54}, -{56,41,-53}, -{56,41,-52}, -{56,41,-51}, -{56,41,-50}, -{56,41,-49}, -{56,41,-48}, -{56,41,-47}, -{56,41,-46}, -{56,41,-45}, -{56,41,-44}, -{56,41,-43}, -{56,41,-42}, -{56,41,-41}, -{56,41,-40}, -{56,41,-39}, -{56,41,-38}, -{56,41,-37}, -{56,41,-36}, -{56,41,-35}, -{56,41,-34}, -{56,41,-33}, -{56,41,-32}, -{56,41,-31}, -{56,41,-30}, -{56,41,-29}, -{56,41,-28}, -{56,41,-27}, -{56,41,-26}, -{56,41,-25}, -{56,41,-24}, -{56,41,-23}, -{56,41,-22}, -{56,41,-21}, -{56,41,-20}, -{56,41,-19}, -{56,41,-18}, -{56,41,-17}, -{56,41,-16}, -{56,41,-15}, -{56,41,-14}, -{56,41,-13}, -{56,41,-12}, -{56,41,-11}, -{56,41,-10}, -{56,41,-9}, -{56,41,-8}, -{56,41,-7}, -{56,41,-6}, -{56,41,-5}, -{56,41,-4}, -{56,41,-3}, -{56,41,-2}, -{56,41,-1}, -{56,41,0}, -{56,41,1}, -{56,41,2}, -{56,41,3}, -{56,41,4}, -{56,41,5}, -{56,41,6}, -{56,41,7}, -{56,41,8}, -{56,41,9}, -{56,41,10}, -{56,41,11}, -{56,41,12}, -{56,41,13}, -{56,41,14}, -{56,41,15}, -{56,41,16}, -{56,41,17}, -{56,41,18}, -{56,41,19}, -{56,41,20}, -{56,41,21}, -{56,41,22}, -{56,41,23}, -{56,41,24}, -{56,41,25}, -{56,41,26}, -{56,41,27}, -{56,41,28}, -{56,41,29}, -{56,41,30}, -{56,41,31}, -{56,41,32}, -{56,41,33}, -{56,41,34}, -{56,41,35}, -{56,41,36}, -{56,41,37}, -{56,41,38}, -{56,41,39}, -{56,41,40}, -{56,41,41}, -{56,41,42}, -{56,41,43}, -{56,41,44}, -{56,41,45}, -{56,41,46}, -{56,41,47}, -{56,41,48}, -{56,41,49}, -{56,41,50}, -{56,41,51}, -{56,41,52}, -{56,41,53}, -{56,41,54}, -{56,41,55}, -{56,41,56}, -{56,41,57}, -{56,41,58}, -{56,41,59}, -{56,41,60}, -{56,41,61}, -{56,41,62}, -{56,41,63}, -{56,41,64}, -{56,42,-68}, -{56,42,-67}, -{56,42,-66}, -{56,42,-65}, -{56,42,-64}, -{56,42,-63}, -{56,42,-62}, -{56,42,-61}, -{56,42,-60}, -{56,42,-59}, -{56,42,-58}, -{56,42,-57}, -{56,42,-56}, -{56,42,-55}, -{56,42,-54}, -{56,42,-53}, -{56,42,-52}, -{56,42,-51}, -{56,42,-50}, -{56,42,-49}, -{56,42,-48}, -{56,42,-47}, -{56,42,-46}, -{56,42,-45}, -{56,42,-44}, -{56,42,-43}, -{56,42,-42}, -{56,42,-41}, -{56,42,-40}, -{56,42,-39}, -{56,42,-38}, -{56,42,-37}, -{56,42,-36}, -{56,42,-35}, -{56,42,-34}, -{56,42,-33}, -{56,42,-32}, -{56,42,-31}, -{56,42,-30}, -{56,42,-29}, -{56,42,-28}, -{56,42,-27}, -{56,42,-26}, -{56,42,-25}, -{56,42,-24}, -{56,42,-23}, -{56,42,-22}, -{56,42,-21}, -{56,42,-20}, -{56,42,-19}, -{56,42,-18}, -{56,42,-17}, -{56,42,-16}, -{56,42,-15}, -{56,42,-14}, -{56,42,-13}, -{56,42,-12}, -{56,42,-11}, -{56,42,-10}, -{56,42,-9}, -{56,42,-8}, -{56,42,-7}, -{56,42,-6}, -{56,42,-5}, -{56,42,-4}, -{56,42,-3}, -{56,42,-2}, -{56,42,-1}, -{56,42,0}, -{56,42,1}, -{56,42,2}, -{56,42,3}, -{56,42,4}, -{56,42,5}, -{56,42,6}, -{56,42,7}, -{56,42,8}, -{56,42,9}, -{56,42,10}, -{56,42,11}, -{56,42,12}, -{56,42,13}, -{56,42,14}, -{56,42,15}, -{56,42,16}, -{56,42,17}, -{56,42,18}, -{56,42,19}, -{56,42,20}, -{56,42,21}, -{56,42,22}, -{56,42,23}, -{56,42,24}, -{56,42,25}, -{56,42,26}, -{56,42,27}, -{56,42,28}, -{56,42,29}, -{56,42,30}, -{56,42,31}, -{56,42,32}, -{56,42,33}, -{56,42,34}, -{56,42,35}, -{56,42,36}, -{56,42,37}, -{56,42,38}, -{56,42,39}, -{56,42,40}, -{56,42,41}, -{56,42,42}, -{56,42,43}, -{56,42,44}, -{56,42,45}, -{56,42,46}, -{56,42,47}, -{56,42,48}, -{56,42,49}, -{56,42,50}, -{56,42,51}, -{56,42,52}, -{56,42,53}, -{56,42,54}, -{56,42,55}, -{56,42,56}, -{56,42,57}, -{56,42,58}, -{56,42,59}, -{56,42,60}, -{56,42,61}, -{56,42,62}, -{56,42,63}, -{56,42,64}, -{56,43,-68}, -{56,43,-67}, -{56,43,-66}, -{56,43,-65}, -{56,43,-64}, -{56,43,-63}, -{56,43,-62}, -{56,43,-61}, -{56,43,-60}, -{56,43,-59}, -{56,43,-58}, -{56,43,-57}, -{56,43,-56}, -{56,43,-55}, -{56,43,-54}, -{56,43,-53}, -{56,43,-52}, -{56,43,-51}, -{56,43,-50}, -{56,43,-49}, -{56,43,-48}, -{56,43,-47}, -{56,43,-46}, -{56,43,-45}, -{56,43,-44}, -{56,43,-43}, -{56,43,-42}, -{56,43,-41}, -{56,43,-40}, -{56,43,-39}, -{56,43,-38}, -{56,43,-37}, -{56,43,-36}, -{56,43,-35}, -{56,43,-34}, -{56,43,-33}, -{56,43,-32}, -{56,43,-31}, -{56,43,-30}, -{56,43,-29}, -{56,43,-28}, -{56,43,-27}, -{56,43,-26}, -{56,43,-25}, -{56,43,-24}, -{56,43,-23}, -{56,43,-22}, -{56,43,-21}, -{56,43,-20}, -{56,43,-19}, -{56,43,-18}, -{56,43,-17}, -{56,43,-16}, -{56,43,-15}, -{56,43,-14}, -{56,43,-13}, -{56,43,-12}, -{56,43,-11}, -{56,43,-10}, -{56,43,-9}, -{56,43,-8}, -{56,43,-7}, -{56,43,-6}, -{56,43,-5}, -{56,43,-4}, -{56,43,-3}, -{56,43,-2}, -{56,43,-1}, -{56,43,0}, -{56,43,1}, -{56,43,2}, -{56,43,3}, -{56,43,4}, -{56,43,5}, -{56,43,6}, -{56,43,7}, -{56,43,8}, -{56,43,9}, -{56,43,10}, -{56,43,11}, -{56,43,12}, -{56,43,13}, -{56,43,14}, -{56,43,15}, -{56,43,16}, -{56,43,17}, -{56,43,18}, -{56,43,19}, -{56,43,20}, -{56,43,21}, -{56,43,22}, -{56,43,23}, -{56,43,24}, -{56,43,25}, -{56,43,26}, -{56,43,27}, -{56,43,28}, -{56,43,29}, -{56,43,30}, -{56,43,31}, -{56,43,32}, -{56,43,33}, -{56,43,34}, -{56,43,35}, -{56,43,36}, -{56,43,37}, -{56,43,38}, -{56,43,39}, -{56,43,40}, -{56,43,41}, -{56,43,42}, -{56,43,43}, -{56,43,44}, -{56,43,45}, -{56,43,46}, -{56,43,47}, -{56,43,48}, -{56,43,49}, -{56,43,50}, -{56,43,51}, -{56,43,52}, -{56,43,53}, -{56,43,54}, -{56,43,55}, -{56,43,56}, -{56,43,57}, -{56,43,58}, -{56,43,59}, -{56,43,60}, -{56,43,61}, -{56,43,62}, -{56,43,63}, -{56,43,64}, -{56,44,-68}, -{56,44,-67}, -{56,44,-66}, -{56,44,-65}, -{56,44,-64}, -{56,44,-63}, -{56,44,-62}, -{56,44,-61}, -{56,44,-60}, -{56,44,-59}, -{56,44,-58}, -{56,44,-57}, -{56,44,-56}, -{56,44,-55}, -{56,44,-54}, -{56,44,-53}, -{56,44,-52}, -{56,44,-51}, -{56,44,-50}, -{56,44,-49}, -{56,44,-48}, -{56,44,-47}, -{56,44,-46}, -{56,44,-45}, -{56,44,-44}, -{56,44,-43}, -{56,44,-42}, -{56,44,-41}, -{56,44,-40}, -{56,44,-39}, -{56,44,-38}, -{56,44,-37}, -{56,44,-36}, -{56,44,-35}, -{56,44,-34}, -{56,44,-33}, -{56,44,-32}, -{56,44,-31}, -{56,44,-30}, -{56,44,-29}, -{56,44,-28}, -{56,44,-27}, -{56,44,-26}, -{56,44,-25}, -{56,44,-24}, -{56,44,-23}, -{56,44,-22}, -{56,44,-21}, -{56,44,-20}, -{56,44,-19}, -{56,44,-18}, -{56,44,-17}, -{56,44,-16}, -{56,44,-15}, -{56,44,-14}, -{56,44,-13}, -{56,44,-12}, -{56,44,-11}, -{56,44,-10}, -{56,44,-9}, -{56,44,-8}, -{56,44,-7}, -{56,44,-6}, -{56,44,-5}, -{56,44,-4}, -{56,44,-3}, -{56,44,-2}, -{56,44,-1}, -{56,44,0}, -{56,44,1}, -{56,44,2}, -{56,44,3}, -{56,44,4}, -{56,44,5}, -{56,44,6}, -{56,44,7}, -{56,44,8}, -{56,44,9}, -{56,44,10}, -{56,44,11}, -{56,44,12}, -{56,44,13}, -{56,44,14}, -{56,44,15}, -{56,44,16}, -{56,44,17}, -{56,44,18}, -{56,44,19}, -{56,44,20}, -{56,44,21}, -{56,44,22}, -{56,44,23}, -{56,44,24}, -{56,44,25}, -{56,44,26}, -{56,44,27}, -{56,44,28}, -{56,44,29}, -{56,44,30}, -{56,44,31}, -{56,44,32}, -{56,44,33}, -{56,44,34}, -{56,44,35}, -{56,44,36}, -{56,44,37}, -{56,44,38}, -{56,44,39}, -{56,44,40}, -{56,44,41}, -{56,44,42}, -{56,44,43}, -{56,44,44}, -{56,44,45}, -{56,44,46}, -{56,44,47}, -{56,44,48}, -{56,44,49}, -{56,44,50}, -{56,44,51}, -{56,44,52}, -{56,44,53}, -{56,44,54}, -{56,44,55}, -{56,44,56}, -{56,44,57}, -{56,44,58}, -{56,44,59}, -{56,44,60}, -{56,44,61}, -{56,44,62}, -{56,44,63}, -{56,44,64}, -{56,44,65}, -{56,45,-68}, -{56,45,-67}, -{56,45,-66}, -{56,45,-65}, -{56,45,-64}, -{56,45,-63}, -{56,45,-62}, -{56,45,-61}, -{56,45,-60}, -{56,45,-59}, -{56,45,-58}, -{56,45,-57}, -{56,45,-56}, -{56,45,-55}, -{56,45,-54}, -{56,45,-53}, -{56,45,-52}, -{56,45,-51}, -{56,45,-50}, -{56,45,-49}, -{56,45,-48}, -{56,45,-47}, -{56,45,-46}, -{56,45,-45}, -{56,45,-44}, -{56,45,-43}, -{56,45,-42}, -{56,45,-41}, -{56,45,-40}, -{56,45,-39}, -{56,45,-38}, -{56,45,-37}, -{56,45,-36}, -{56,45,-35}, -{56,45,-34}, -{56,45,-33}, -{56,45,-32}, -{56,45,-31}, -{56,45,-30}, -{56,45,-29}, -{56,45,-28}, -{56,45,-27}, -{56,45,-26}, -{56,45,-25}, -{56,45,-24}, -{56,45,-23}, -{56,45,-22}, -{56,45,-21}, -{56,45,-20}, -{56,45,-19}, -{56,45,-18}, -{56,45,-17}, -{56,45,-16}, -{56,45,-15}, -{56,45,-14}, -{56,45,-13}, -{56,45,-12}, -{56,45,-11}, -{56,45,-10}, -{56,45,-9}, -{56,45,-8}, -{56,45,-7}, -{56,45,-6}, -{56,45,-5}, -{56,45,-4}, -{56,45,-3}, -{56,45,-2}, -{56,45,-1}, -{56,45,0}, -{56,45,1}, -{56,45,2}, -{56,45,3}, -{56,45,4}, -{56,45,5}, -{56,45,6}, -{56,45,7}, -{56,45,8}, -{56,45,9}, -{56,45,10}, -{56,45,11}, -{56,45,12}, -{56,45,13}, -{56,45,14}, -{56,45,15}, -{56,45,16}, -{56,45,17}, -{56,45,18}, -{56,45,19}, -{56,45,20}, -{56,45,21}, -{56,45,22}, -{56,45,23}, -{56,45,24}, -{56,45,25}, -{56,45,26}, -{56,45,27}, -{56,45,28}, -{56,45,29}, -{56,45,30}, -{56,45,31}, -{56,45,32}, -{56,45,33}, -{56,45,34}, -{56,45,35}, -{56,45,36}, -{56,45,37}, -{56,45,38}, -{56,45,39}, -{56,45,40}, -{56,45,41}, -{56,45,42}, -{56,45,43}, -{56,45,44}, -{56,45,45}, -{56,45,46}, -{56,45,47}, -{56,45,48}, -{56,45,49}, -{56,45,50}, -{56,45,51}, -{56,45,52}, -{56,45,53}, -{56,45,54}, -{56,45,55}, -{56,45,56}, -{56,45,57}, -{56,45,58}, -{56,45,59}, -{56,45,60}, -{56,45,61}, -{56,45,62}, -{56,45,63}, -{56,45,64}, -{56,45,65}, -{56,46,-68}, -{56,46,-67}, -{56,46,-66}, -{56,46,-65}, -{56,46,-64}, -{56,46,-63}, -{56,46,-62}, -{56,46,-61}, -{56,46,-60}, -{56,46,-59}, -{56,46,-58}, -{56,46,-57}, -{56,46,-56}, -{56,46,-55}, -{56,46,-54}, -{56,46,-53}, -{56,46,-52}, -{56,46,-51}, -{56,46,-50}, -{56,46,-49}, -{56,46,-48}, -{56,46,-47}, -{56,46,-46}, -{56,46,-45}, -{56,46,-44}, -{56,46,-43}, -{56,46,-42}, -{56,46,-41}, -{56,46,-40}, -{56,46,-39}, -{56,46,-38}, -{56,46,-37}, -{56,46,-36}, -{56,46,-35}, -{56,46,-34}, -{56,46,-33}, -{56,46,-32}, -{56,46,-31}, -{56,46,-30}, -{56,46,-29}, -{56,46,-28}, -{56,46,-27}, -{56,46,-26}, -{56,46,-25}, -{56,46,-24}, -{56,46,-23}, -{56,46,-22}, -{56,46,-21}, -{56,46,-20}, -{56,46,-19}, -{56,46,-18}, -{56,46,-17}, -{56,46,-16}, -{56,46,-15}, -{56,46,-14}, -{56,46,-13}, -{56,46,-12}, -{56,46,-11}, -{56,46,-10}, -{56,46,-9}, -{56,46,-8}, -{56,46,-7}, -{56,46,-6}, -{56,46,-5}, -{56,46,-4}, -{56,46,-3}, -{56,46,-2}, -{56,46,-1}, -{56,46,0}, -{56,46,1}, -{56,46,2}, -{56,46,3}, -{56,46,4}, -{56,46,5}, -{56,46,6}, -{56,46,7}, -{56,46,8}, -{56,46,9}, -{56,46,10}, -{56,46,11}, -{56,46,12}, -{56,46,13}, -{56,46,14}, -{56,46,15}, -{56,46,16}, -{56,46,17}, -{56,46,18}, -{56,46,19}, -{56,46,20}, -{56,46,21}, -{56,46,22}, -{56,46,23}, -{56,46,24}, -{56,46,25}, -{56,46,26}, -{56,46,27}, -{56,46,28}, -{56,46,29}, -{56,46,30}, -{56,46,31}, -{56,46,32}, -{56,46,33}, -{56,46,34}, -{56,46,35}, -{56,46,36}, -{56,46,37}, -{56,46,38}, -{56,46,39}, -{56,46,40}, -{56,46,41}, -{56,46,42}, -{56,46,43}, -{56,46,44}, -{56,46,45}, -{56,46,46}, -{56,46,47}, -{56,46,48}, -{56,46,49}, -{56,46,50}, -{56,46,51}, -{56,46,52}, -{56,46,53}, -{56,46,54}, -{56,46,55}, -{56,46,56}, -{56,46,57}, -{56,46,58}, -{56,46,59}, -{56,46,60}, -{56,46,61}, -{56,46,62}, -{56,46,63}, -{56,46,64}, -{56,46,65}, -{56,47,-68}, -{56,47,-67}, -{56,47,-66}, -{56,47,-65}, -{56,47,-64}, -{56,47,-63}, -{56,47,-62}, -{56,47,-61}, -{56,47,-60}, -{56,47,-59}, -{56,47,-58}, -{56,47,-57}, -{56,47,-56}, -{56,47,-55}, -{56,47,-54}, -{56,47,-53}, -{56,47,-52}, -{56,47,-51}, -{56,47,-50}, -{56,47,-49}, -{56,47,-48}, -{56,47,-47}, -{56,47,-46}, -{56,47,-45}, -{56,47,-44}, -{56,47,-43}, -{56,47,-42}, -{56,47,-41}, -{56,47,-40}, -{56,47,-39}, -{56,47,-38}, -{56,47,-37}, -{56,47,-36}, -{56,47,-35}, -{56,47,-34}, -{56,47,-33}, -{56,47,-32}, -{56,47,-31}, -{56,47,-30}, -{56,47,-29}, -{56,47,-28}, -{56,47,-27}, -{56,47,-26}, -{56,47,-25}, -{56,47,-24}, -{56,47,-23}, -{56,47,-22}, -{56,47,-21}, -{56,47,-20}, -{56,47,-19}, -{56,47,-18}, -{56,47,-17}, -{56,47,-16}, -{56,47,-15}, -{56,47,-14}, -{56,47,-13}, -{56,47,-12}, -{56,47,-11}, -{56,47,-10}, -{56,47,-9}, -{56,47,-8}, -{56,47,-7}, -{56,47,-6}, -{56,47,-5}, -{56,47,-4}, -{56,47,-3}, -{56,47,-2}, -{56,47,-1}, -{56,47,0}, -{56,47,1}, -{56,47,2}, -{56,47,3}, -{56,47,4}, -{56,47,5}, -{56,47,6}, -{56,47,7}, -{56,47,8}, -{56,47,9}, -{56,47,10}, -{56,47,11}, -{56,47,12}, -{56,47,13}, -{56,47,14}, -{56,47,15}, -{56,47,16}, -{56,47,17}, -{56,47,18}, -{56,47,19}, -{56,47,20}, -{56,47,21}, -{56,47,22}, -{56,47,23}, -{56,47,24}, -{56,47,25}, -{56,47,26}, -{56,47,27}, -{56,47,28}, -{56,47,29}, -{56,47,30}, -{56,47,31}, -{56,47,32}, -{56,47,33}, -{56,47,34}, -{56,47,35}, -{56,47,36}, -{56,47,37}, -{56,47,38}, -{56,47,39}, -{56,47,40}, -{56,47,41}, -{56,47,42}, -{56,47,43}, -{56,47,44}, -{56,47,45}, -{56,47,46}, -{56,47,47}, -{56,47,48}, -{56,47,49}, -{56,47,50}, -{56,47,51}, -{56,47,52}, -{56,47,53}, -{56,47,54}, -{56,47,55}, -{56,47,56}, -{56,47,57}, -{56,47,58}, -{56,47,59}, -{56,47,60}, -{56,47,61}, -{56,47,62}, -{56,47,63}, -{56,47,64}, -{56,47,65}, -{56,48,-68}, -{56,48,-67}, -{56,48,-66}, -{56,48,-65}, -{56,48,-64}, -{56,48,-63}, -{56,48,-62}, -{56,48,-61}, -{56,48,-60}, -{56,48,-59}, -{56,48,-58}, -{56,48,-57}, -{56,48,-56}, -{56,48,-55}, -{56,48,-54}, -{56,48,-53}, -{56,48,-52}, -{56,48,-51}, -{56,48,-50}, -{56,48,-49}, -{56,48,-48}, -{56,48,-47}, -{56,48,-46}, -{56,48,-45}, -{56,48,-44}, -{56,48,-43}, -{56,48,-42}, -{56,48,-41}, -{56,48,-40}, -{56,48,-39}, -{56,48,-38}, -{56,48,-37}, -{56,48,-36}, -{56,48,-35}, -{56,48,-34}, -{56,48,-33}, -{56,48,-32}, -{56,48,-31}, -{56,48,-30}, -{56,48,-29}, -{56,48,-28}, -{56,48,-27}, -{56,48,-26}, -{56,48,-25}, -{56,48,-24}, -{56,48,-23}, -{56,48,-22}, -{56,48,-21}, -{56,48,-20}, -{56,48,-19}, -{56,48,-18}, -{56,48,-17}, -{56,48,-16}, -{56,48,-15}, -{56,48,-14}, -{56,48,-13}, -{56,48,-12}, -{56,48,-11}, -{56,48,-10}, -{56,48,-9}, -{56,48,-8}, -{56,48,-7}, -{56,48,-6}, -{56,48,-5}, -{56,48,-4}, -{56,48,-3}, -{56,48,-2}, -{56,48,-1}, -{56,48,0}, -{56,48,1}, -{56,48,2}, -{56,48,3}, -{56,48,4}, -{56,48,5}, -{56,48,6}, -{56,48,7}, -{56,48,8}, -{56,48,9}, -{56,48,10}, -{56,48,11}, -{56,48,12}, -{56,48,13}, -{56,48,14}, -{56,48,15}, -{56,48,16}, -{56,48,17}, -{56,48,18}, -{56,48,19}, -{56,48,20}, -{56,48,21}, -{56,48,22}, -{56,48,23}, -{56,48,24}, -{56,48,25}, -{56,48,26}, -{56,48,27}, -{56,48,28}, -{56,48,29}, -{56,48,30}, -{56,48,31}, -{56,48,32}, -{56,48,33}, -{56,48,34}, -{56,48,35}, -{56,48,36}, -{56,48,37}, -{56,48,38}, -{56,48,39}, -{56,48,40}, -{56,48,41}, -{56,48,42}, -{56,48,43}, -{56,48,44}, -{56,48,45}, -{56,48,46}, -{56,48,47}, -{56,48,48}, -{56,48,49}, -{56,48,50}, -{56,48,51}, -{56,48,52}, -{56,48,53}, -{56,48,54}, -{56,48,55}, -{56,48,56}, -{56,48,57}, -{56,48,58}, -{56,48,59}, -{56,48,60}, -{56,48,61}, -{56,48,62}, -{56,48,63}, -{56,48,64}, -{56,48,65}, -{56,49,-68}, -{56,49,-67}, -{56,49,-66}, -{56,49,-65}, -{56,49,-64}, -{56,49,-63}, -{56,49,-62}, -{56,49,-61}, -{56,49,-60}, -{56,49,-59}, -{56,49,-58}, -{56,49,-57}, -{56,49,-56}, -{56,49,-55}, -{56,49,-54}, -{56,49,-53}, -{56,49,-52}, -{56,49,-51}, -{56,49,-50}, -{56,49,-49}, -{56,49,-48}, -{56,49,-47}, -{56,49,-46}, -{56,49,-45}, -{56,49,-44}, -{56,49,-43}, -{56,49,-42}, -{56,49,-41}, -{56,49,-40}, -{56,49,-39}, -{56,49,-38}, -{56,49,-37}, -{56,49,-36}, -{56,49,-35}, -{56,49,-34}, -{56,49,-33}, -{56,49,-32}, -{56,49,-31}, -{56,49,-30}, -{56,49,-29}, -{56,49,-28}, -{56,49,-27}, -{56,49,-26}, -{56,49,-25}, -{56,49,-24}, -{56,49,-23}, -{56,49,-22}, -{56,49,-21}, -{56,49,-20}, -{56,49,-19}, -{56,49,-18}, -{56,49,-17}, -{56,49,-16}, -{56,49,-15}, -{56,49,-14}, -{56,49,-13}, -{56,49,-12}, -{56,49,-11}, -{56,49,-10}, -{56,49,-9}, -{56,49,-8}, -{56,49,-7}, -{56,49,-6}, -{56,49,-5}, -{56,49,-4}, -{56,49,-3}, -{56,49,-2}, -{56,49,-1}, -{56,49,0}, -{56,49,1}, -{56,49,2}, -{56,49,3}, -{56,49,4}, -{56,49,5}, -{56,49,6}, -{56,49,7}, -{56,49,8}, -{56,49,9}, -{56,49,10}, -{56,49,11}, -{56,49,12}, -{56,49,13}, -{56,49,14}, -{56,49,15}, -{56,49,16}, -{56,49,17}, -{56,49,18}, -{56,49,19}, -{56,49,20}, -{56,49,21}, -{56,49,22}, -{56,49,23}, -{56,49,24}, -{56,49,25}, -{56,49,26}, -{56,49,27}, -{56,49,28}, -{56,49,29}, -{56,49,30}, -{56,49,31}, -{56,49,32}, -{56,49,33}, -{56,49,34}, -{56,49,35}, -{56,49,36}, -{56,49,37}, -{56,49,38}, -{56,49,39}, -{56,49,40}, -{56,49,41}, -{56,49,42}, -{56,49,43}, -{56,49,44}, -{56,49,45}, -{56,49,46}, -{56,49,47}, -{56,49,48}, -{56,49,49}, -{56,49,50}, -{56,49,51}, -{56,49,52}, -{56,49,53}, -{56,49,54}, -{56,49,55}, -{56,49,56}, -{56,49,57}, -{56,49,58}, -{56,49,59}, -{56,49,60}, -{56,49,61}, -{56,49,62}, -{56,49,63}, -{56,49,64}, -{56,49,65}, -{56,50,-68}, -{56,50,-67}, -{56,50,-66}, -{56,50,-65}, -{56,50,-64}, -{56,50,-63}, -{56,50,-62}, -{56,50,-61}, -{56,50,-60}, -{56,50,-59}, -{56,50,-58}, -{56,50,-57}, -{56,50,-56}, -{56,50,-55}, -{56,50,-54}, -{56,50,-53}, -{56,50,-52}, -{56,50,-51}, -{56,50,-50}, -{56,50,-49}, -{56,50,-48}, -{56,50,-47}, -{56,50,-46}, -{56,50,-45}, -{56,50,-44}, -{56,50,-43}, -{56,50,-42}, -{56,50,-41}, -{56,50,-40}, -{56,50,-39}, -{56,50,-38}, -{56,50,-37}, -{56,50,-36}, -{56,50,-35}, -{56,50,-34}, -{56,50,-33}, -{56,50,-32}, -{56,50,-31}, -{56,50,-30}, -{56,50,-29}, -{56,50,-28}, -{56,50,-27}, -{56,50,-26}, -{56,50,-25}, -{56,50,-24}, -{56,50,-23}, -{56,50,-22}, -{56,50,-21}, -{56,50,-20}, -{56,50,-19}, -{56,50,-18}, -{56,50,-17}, -{56,50,-16}, -{56,50,-15}, -{56,50,-14}, -{56,50,-13}, -{56,50,-12}, -{56,50,-11}, -{56,50,-10}, -{56,50,-9}, -{56,50,-8}, -{56,50,-7}, -{56,50,-6}, -{56,50,-5}, -{56,50,-4}, -{56,50,-3}, -{56,50,-2}, -{56,50,-1}, -{56,50,0}, -{56,50,1}, -{56,50,2}, -{56,50,3}, -{56,50,4}, -{56,50,5}, -{56,50,6}, -{56,50,7}, -{56,50,8}, -{56,50,9}, -{56,50,10}, -{56,50,11}, -{56,50,12}, -{56,50,13}, -{56,50,14}, -{56,50,15}, -{56,50,16}, -{56,50,17}, -{56,50,18}, -{56,50,19}, -{56,50,20}, -{56,50,21}, -{56,50,22}, -{56,50,23}, -{56,50,24}, -{56,50,25}, -{56,50,26}, -{56,50,27}, -{56,50,28}, -{56,50,29}, -{56,50,30}, -{56,50,31}, -{56,50,32}, -{56,50,33}, -{56,50,34}, -{56,50,35}, -{56,50,36}, -{56,50,37}, -{56,50,38}, -{56,50,39}, -{56,50,40}, -{56,50,41}, -{56,50,42}, -{56,50,43}, -{56,50,44}, -{56,50,45}, -{56,50,46}, -{56,50,47}, -{56,50,48}, -{56,50,49}, -{56,50,50}, -{56,50,51}, -{56,50,52}, -{56,50,53}, -{56,50,54}, -{56,50,55}, -{56,50,56}, -{56,50,57}, -{56,50,58}, -{56,50,59}, -{56,50,60}, -{56,50,61}, -{56,50,62}, -{56,50,63}, -{56,50,64}, -{56,50,65}, -{56,51,-68}, -{56,51,-67}, -{56,51,-66}, -{56,51,-65}, -{56,51,-64}, -{56,51,-63}, -{56,51,-62}, -{56,51,-61}, -{56,51,-60}, -{56,51,-59}, -{56,51,-58}, -{56,51,-57}, -{56,51,-56}, -{56,51,-55}, -{56,51,-54}, -{56,51,-53}, -{56,51,-52}, -{56,51,-51}, -{56,51,-50}, -{56,51,-49}, -{56,51,-48}, -{56,51,-47}, -{56,51,-46}, -{56,51,-45}, -{56,51,-44}, -{56,51,-43}, -{56,51,-42}, -{56,51,-41}, -{56,51,-40}, -{56,51,-39}, -{56,51,-38}, -{56,51,-37}, -{56,51,-36}, -{56,51,-35}, -{56,51,-34}, -{56,51,-33}, -{56,51,-32}, -{56,51,-31}, -{56,51,-30}, -{56,51,-29}, -{56,51,-28}, -{56,51,-27}, -{56,51,-26}, -{56,51,-25}, -{56,51,-24}, -{56,51,-23}, -{56,51,-22}, -{56,51,-21}, -{56,51,-20}, -{56,51,-19}, -{56,51,-18}, -{56,51,-17}, -{56,51,-16}, -{56,51,-15}, -{56,51,-14}, -{56,51,-13}, -{56,51,-12}, -{56,51,-11}, -{56,51,-10}, -{56,51,-9}, -{56,51,-8}, -{56,51,-7}, -{56,51,-6}, -{56,51,-5}, -{56,51,-4}, -{56,51,-3}, -{56,51,-2}, -{56,51,-1}, -{56,51,0}, -{56,51,1}, -{56,51,2}, -{56,51,3}, -{56,51,4}, -{56,51,5}, -{56,51,6}, -{56,51,7}, -{56,51,8}, -{56,51,9}, -{56,51,10}, -{56,51,11}, -{56,51,12}, -{56,51,13}, -{56,51,14}, -{56,51,15}, -{56,51,16}, -{56,51,17}, -{56,51,18}, -{56,51,19}, -{56,51,20}, -{56,51,21}, -{56,51,22}, -{56,51,23}, -{56,51,24}, -{56,51,25}, -{56,51,26}, -{56,51,27}, -{56,51,28}, -{56,51,29}, -{56,51,30}, -{56,51,31}, -{56,51,32}, -{56,51,33}, -{56,51,34}, -{56,51,35}, -{56,51,36}, -{56,51,37}, -{56,51,38}, -{56,51,39}, -{56,51,40}, -{56,51,41}, -{56,51,42}, -{56,51,43}, -{56,51,44}, -{56,51,45}, -{56,51,46}, -{56,51,47}, -{56,51,48}, -{56,51,49}, -{56,51,50}, -{56,51,51}, -{56,51,52}, -{56,51,53}, -{56,51,54}, -{56,51,55}, -{56,51,56}, -{56,51,57}, -{56,51,58}, -{56,51,59}, -{56,51,60}, -{56,51,61}, -{56,51,62}, -{56,51,63}, -{56,51,64}, -{56,51,65}, -{56,52,-68}, -{56,52,-67}, -{56,52,-66}, -{56,52,-65}, -{56,52,-64}, -{56,52,-63}, -{56,52,-62}, -{56,52,-61}, -{56,52,-60}, -{56,52,-59}, -{56,52,-58}, -{56,52,-57}, -{56,52,-56}, -{56,52,-55}, -{56,52,-54}, -{56,52,-53}, -{56,52,-52}, -{56,52,-51}, -{56,52,-50}, -{56,52,-49}, -{56,52,-48}, -{56,52,-47}, -{56,52,-46}, -{56,52,-45}, -{56,52,-44}, -{56,52,-43}, -{56,52,-42}, -{56,52,-41}, -{56,52,-40}, -{56,52,-39}, -{56,52,-38}, -{56,52,-37}, -{56,52,-36}, -{56,52,-35}, -{56,52,-34}, -{56,52,-33}, -{56,52,-32}, -{56,52,-31}, -{56,52,-30}, -{56,52,-29}, -{56,52,-28}, -{56,52,-27}, -{56,52,-26}, -{56,52,-25}, -{56,52,-24}, -{56,52,-23}, -{56,52,-22}, -{56,52,-21}, -{56,52,-20}, -{56,52,-19}, -{56,52,-18}, -{56,52,-17}, -{56,52,-16}, -{56,52,-15}, -{56,52,-14}, -{56,52,-13}, -{56,52,-12}, -{56,52,-11}, -{56,52,-10}, -{56,52,-9}, -{56,52,-8}, -{56,52,-7}, -{56,52,-6}, -{56,52,-5}, -{56,52,-4}, -{56,52,-3}, -{56,52,-2}, -{56,52,-1}, -{56,52,0}, -{56,52,1}, -{56,52,2}, -{56,52,3}, -{56,52,4}, -{56,52,5}, -{56,52,6}, -{56,52,7}, -{56,52,8}, -{56,52,9}, -{56,52,10}, -{56,52,11}, -{56,52,12}, -{56,52,13}, -{56,52,14}, -{56,52,15}, -{56,52,16}, -{56,52,17}, -{56,52,18}, -{56,52,19}, -{56,52,20}, -{56,52,21}, -{56,52,22}, -{56,52,23}, -{56,52,24}, -{56,52,25}, -{56,52,26}, -{56,52,27}, -{56,52,28}, -{56,52,29}, -{56,52,30}, -{56,52,31}, -{56,52,32}, -{56,52,33}, -{56,52,34}, -{56,52,35}, -{56,52,36}, -{56,52,37}, -{56,52,38}, -{56,52,39}, -{56,52,40}, -{56,52,41}, -{56,52,42}, -{56,52,43}, -{56,52,44}, -{56,52,45}, -{56,52,46}, -{56,52,47}, -{56,52,48}, -{56,52,49}, -{56,52,50}, -{56,52,51}, -{56,52,52}, -{56,52,53}, -{56,52,54}, -{56,52,55}, -{56,52,56}, -{56,52,57}, -{56,52,58}, -{56,52,59}, -{56,52,60}, -{56,52,61}, -{56,52,62}, -{56,52,63}, -{56,52,64}, -{56,52,65}, -{56,53,-68}, -{56,53,-67}, -{56,53,-66}, -{56,53,-65}, -{56,53,-64}, -{56,53,-63}, -{56,53,-62}, -{56,53,-61}, -{56,53,-60}, -{56,53,-59}, -{56,53,-58}, -{56,53,-57}, -{56,53,-56}, -{56,53,-55}, -{56,53,-54}, -{56,53,-53}, -{56,53,-52}, -{56,53,-51}, -{56,53,-50}, -{56,53,-49}, -{56,53,-48}, -{56,53,-47}, -{56,53,-46}, -{56,53,-45}, -{56,53,-44}, -{56,53,-43}, -{56,53,-42}, -{56,53,-41}, -{56,53,-40}, -{56,53,-39}, -{56,53,-38}, -{56,53,-37}, -{56,53,-36}, -{56,53,-35}, -{56,53,-34}, -{56,53,-33}, -{56,53,-32}, -{56,53,-31}, -{56,53,-30}, -{56,53,-29}, -{56,53,-28}, -{56,53,-27}, -{56,53,-26}, -{56,53,-25}, -{56,53,-24}, -{56,53,-23}, -{56,53,-22}, -{56,53,-21}, -{56,53,-20}, -{56,53,-19}, -{56,53,-18}, -{56,53,-17}, -{56,53,-16}, -{56,53,-15}, -{56,53,-14}, -{56,53,-13}, -{56,53,-12}, -{56,53,-11}, -{56,53,-10}, -{56,53,-9}, -{56,53,-8}, -{56,53,-7}, -{56,53,-6}, -{56,53,-5}, -{56,53,-4}, -{56,53,-3}, -{56,53,-2}, -{56,53,-1}, -{56,53,0}, -{56,53,1}, -{56,53,2}, -{56,53,3}, -{56,53,4}, -{56,53,5}, -{56,53,6}, -{56,53,7}, -{56,53,8}, -{56,53,9}, -{56,53,10}, -{56,53,11}, -{56,53,12}, -{56,53,13}, -{56,53,14}, -{56,53,15}, -{56,53,16}, -{56,53,17}, -{56,53,18}, -{56,53,19}, -{56,53,20}, -{56,53,21}, -{56,53,22}, -{56,53,23}, -{56,53,24}, -{56,53,25}, -{56,53,26}, -{56,53,27}, -{56,53,28}, -{56,53,29}, -{56,53,30}, -{56,53,31}, -{56,53,32}, -{56,53,33}, -{56,53,34}, -{56,53,35}, -{56,53,36}, -{56,53,37}, -{56,53,38}, -{56,53,39}, -{56,53,40}, -{56,53,41}, -{56,53,42}, -{56,53,43}, -{56,53,44}, -{56,53,45}, -{56,53,46}, -{56,53,47}, -{56,53,48}, -{56,53,49}, -{56,53,50}, -{56,53,51}, -{56,53,52}, -{56,53,53}, -{56,53,54}, -{56,53,55}, -{56,53,56}, -{56,53,57}, -{56,53,58}, -{56,53,59}, -{56,53,60}, -{56,53,61}, -{56,53,62}, -{56,53,63}, -{56,53,64}, -{56,53,65}, -{56,53,66}, -{56,54,-68}, -{56,54,-67}, -{56,54,-66}, -{56,54,-65}, -{56,54,-64}, -{56,54,-63}, -{56,54,-62}, -{56,54,-61}, -{56,54,-60}, -{56,54,-59}, -{56,54,-58}, -{56,54,-57}, -{56,54,-56}, -{56,54,-55}, -{56,54,-54}, -{56,54,-53}, -{56,54,-52}, -{56,54,-51}, -{56,54,-50}, -{56,54,-49}, -{56,54,-48}, -{56,54,-47}, -{56,54,-46}, -{56,54,-45}, -{56,54,-44}, -{56,54,-43}, -{56,54,-42}, -{56,54,-41}, -{56,54,-40}, -{56,54,-39}, -{56,54,-38}, -{56,54,-37}, -{56,54,-36}, -{56,54,-35}, -{56,54,-34}, -{56,54,-33}, -{56,54,-32}, -{56,54,-31}, -{56,54,-30}, -{56,54,-29}, -{56,54,-28}, -{56,54,-27}, -{56,54,-26}, -{56,54,-25}, -{56,54,-24}, -{56,54,-23}, -{56,54,-22}, -{56,54,-21}, -{56,54,-20}, -{56,54,-19}, -{56,54,-18}, -{56,54,-17}, -{56,54,-16}, -{56,54,-15}, -{56,54,-14}, -{56,54,-13}, -{56,54,-12}, -{56,54,-11}, -{56,54,-10}, -{56,54,-9}, -{56,54,-8}, -{56,54,-7}, -{56,54,-6}, -{56,54,-5}, -{56,54,-4}, -{56,54,-3}, -{56,54,-2}, -{56,54,-1}, -{56,54,0}, -{56,54,1}, -{56,54,2}, -{56,54,3}, -{56,54,4}, -{56,54,5}, -{56,54,6}, -{56,54,7}, -{56,54,8}, -{56,54,9}, -{56,54,10}, -{56,54,11}, -{56,54,12}, -{56,54,13}, -{56,54,14}, -{56,54,15}, -{56,54,16}, -{56,54,17}, -{56,54,18}, -{56,54,19}, -{56,54,20}, -{56,54,21}, -{56,54,22}, -{56,54,23}, -{56,54,24}, -{56,54,25}, -{56,54,26}, -{56,54,27}, -{56,54,28}, -{56,54,29}, -{56,54,30}, -{56,54,31}, -{56,54,32}, -{56,54,33}, -{56,54,34}, -{56,54,35}, -{56,54,36}, -{56,54,37}, -{56,54,38}, -{56,54,39}, -{56,54,40}, -{56,54,41}, -{56,54,42}, -{56,54,43}, -{56,54,44}, -{56,54,45}, -{56,54,46}, -{56,54,47}, -{56,54,48}, -{56,54,49}, -{56,54,50}, -{56,54,51}, -{56,54,52}, -{56,54,53}, -{56,54,54}, -{56,54,55}, -{56,54,56}, -{56,54,57}, -{56,54,58}, -{56,54,59}, -{56,54,60}, -{56,54,61}, -{56,54,62}, -{56,54,63}, -{56,54,64}, -{56,54,65}, -{56,54,66}, -{56,55,-68}, -{56,55,-67}, -{56,55,-66}, -{56,55,-65}, -{56,55,-64}, -{56,55,-63}, -{56,55,-62}, -{56,55,-61}, -{56,55,-60}, -{56,55,-59}, -{56,55,-58}, -{56,55,-57}, -{56,55,-56}, -{56,55,-55}, -{56,55,-54}, -{56,55,-53}, -{56,55,-52}, -{56,55,-51}, -{56,55,-50}, -{56,55,-49}, -{56,55,-48}, -{56,55,-47}, -{56,55,-46}, -{56,55,-45}, -{56,55,-44}, -{56,55,-43}, -{56,55,-42}, -{56,55,-41}, -{56,55,-40}, -{56,55,-39}, -{56,55,-38}, -{56,55,-37}, -{56,55,-36}, -{56,55,-35}, -{56,55,-34}, -{56,55,-33}, -{56,55,-32}, -{56,55,-31}, -{56,55,-30}, -{56,55,-29}, -{56,55,-28}, -{56,55,-27}, -{56,55,-26}, -{56,55,-25}, -{56,55,-24}, -{56,55,-23}, -{56,55,-22}, -{56,55,-21}, -{56,55,-20}, -{56,55,-19}, -{56,55,-18}, -{56,55,-17}, -{56,55,-16}, -{56,55,-15}, -{56,55,-14}, -{56,55,-13}, -{56,55,-12}, -{56,55,-11}, -{56,55,-10}, -{56,55,-9}, -{56,55,-8}, -{56,55,-7}, -{56,55,-6}, -{56,55,-5}, -{56,55,-4}, -{56,55,-3}, -{56,55,-2}, -{56,55,-1}, -{56,55,0}, -{56,55,1}, -{56,55,2}, -{56,55,3}, -{56,55,4}, -{56,55,5}, -{56,55,6}, -{56,55,7}, -{56,55,8}, -{56,55,9}, -{56,55,10}, -{56,55,11}, -{56,55,12}, -{56,55,13}, -{56,55,14}, -{56,55,15}, -{56,55,16}, -{56,55,17}, -{56,55,18}, -{56,55,19}, -{56,55,20}, -{56,55,21}, -{56,55,22}, -{56,55,23}, -{56,55,24}, -{56,55,25}, -{56,55,26}, -{56,55,27}, -{56,55,28}, -{56,55,29}, -{56,55,30}, -{56,55,31}, -{56,55,32}, -{56,55,33}, -{56,55,34}, -{56,55,35}, -{56,55,36}, -{56,55,37}, -{56,55,38}, -{56,55,39}, -{56,55,40}, -{56,55,41}, -{56,55,42}, -{56,55,43}, -{56,55,44}, -{56,55,45}, -{56,55,46}, -{56,55,47}, -{56,55,48}, -{56,55,49}, -{56,55,50}, -{56,55,51}, -{56,55,52}, -{56,55,53}, -{56,55,54}, -{56,55,55}, -{56,55,56}, -{56,55,57}, -{56,55,58}, -{56,55,59}, -{56,55,60}, -{56,55,61}, -{56,55,62}, -{56,55,63}, -{56,55,64}, -{56,55,65}, -{56,55,66}, -{56,56,-68}, -{56,56,-67}, -{56,56,-66}, -{56,56,-65}, -{56,56,-64}, -{56,56,-63}, -{56,56,-62}, -{56,56,-61}, -{56,56,-60}, -{56,56,-59}, -{56,56,-58}, -{56,56,-57}, -{56,56,-56}, -{56,56,-55}, -{56,56,-54}, -{56,56,-53}, -{56,56,-52}, -{56,56,-51}, -{56,56,-50}, -{56,56,-49}, -{56,56,-48}, -{56,56,-47}, -{56,56,-46}, -{56,56,-45}, -{56,56,-44}, -{56,56,-43}, -{56,56,-42}, -{56,56,-41}, -{56,56,-40}, -{56,56,-39}, -{56,56,-38}, -{56,56,-37}, -{56,56,-36}, -{56,56,-35}, -{56,56,-34}, -{56,56,-33}, -{56,56,-32}, -{56,56,-31}, -{56,56,-30}, -{56,56,-29}, -{56,56,-28}, -{56,56,-27}, -{56,56,-26}, -{56,56,-25}, -{56,56,-24}, -{56,56,-23}, -{56,56,-22}, -{56,56,-21}, -{56,56,-20}, -{56,56,-19}, -{56,56,-18}, -{56,56,-17}, -{56,56,-16}, -{56,56,-15}, -{56,56,-14}, -{56,56,-13}, -{56,56,-12}, -{56,56,-11}, -{56,56,-10}, -{56,56,-9}, -{56,56,-8}, -{56,56,-7}, -{56,56,-6}, -{56,56,-5}, -{56,56,-4}, -{56,56,-3}, -{56,56,-2}, -{56,56,-1}, -{56,56,0}, -{56,56,1}, -{56,56,2}, -{56,56,3}, -{56,56,4}, -{56,56,5}, -{56,56,6}, -{56,56,7}, -{56,56,8}, -{56,56,9}, -{56,56,10}, -{56,56,11}, -{56,56,12}, -{56,56,13}, -{56,56,14}, -{56,56,15}, -{56,56,16}, -{56,56,17}, -{56,56,18}, -{56,56,19}, -{56,56,20}, -{56,56,21}, -{56,56,22}, -{56,56,23}, -{56,56,24}, -{56,56,25}, -{56,56,26}, -{56,56,27}, -{56,56,28}, -{56,56,29}, -{56,56,30}, -{56,56,31}, -{56,56,32}, -{56,56,33}, -{56,56,34}, -{56,56,35}, -{56,56,36}, -{56,56,37}, -{56,56,38}, -{56,56,39}, -{56,56,40}, -{56,56,41}, -{56,56,42}, -{56,56,43}, -{56,56,44}, -{56,56,45}, -{56,56,46}, -{56,56,47}, -{56,56,48}, -{56,56,49}, -{56,56,50}, -{56,56,51}, -{56,56,52}, -{56,56,53}, -{56,56,54}, -{56,56,55}, -{56,56,56}, -{56,56,57}, -{56,56,58}, -{56,56,59}, -{56,56,60}, -{56,56,61}, -{56,56,62}, -{56,56,63}, -{56,56,64}, -{56,56,65}, -{56,56,66}, -{56,57,-68}, -{56,57,-67}, -{56,57,-66}, -{56,57,-65}, -{56,57,-64}, -{56,57,-63}, -{56,57,-62}, -{56,57,-61}, -{56,57,-60}, -{56,57,-59}, -{56,57,-58}, -{56,57,-57}, -{56,57,-56}, -{56,57,-55}, -{56,57,-54}, -{56,57,-53}, -{56,57,-52}, -{56,57,-51}, -{56,57,-50}, -{56,57,-49}, -{56,57,-48}, -{56,57,-47}, -{56,57,-46}, -{56,57,-45}, -{56,57,-44}, -{56,57,-43}, -{56,57,-42}, -{56,57,-41}, -{56,57,-40}, -{56,57,-39}, -{56,57,-38}, -{56,57,-37}, -{56,57,-36}, -{56,57,-35}, -{56,57,-34}, -{56,57,-33}, -{56,57,-32}, -{56,57,-31}, -{56,57,-30}, -{56,57,-29}, -{56,57,-28}, -{56,57,-27}, -{56,57,-26}, -{56,57,-25}, -{56,57,-24}, -{56,57,-23}, -{56,57,-22}, -{56,57,-21}, -{56,57,-20}, -{56,57,-19}, -{56,57,-18}, -{56,57,-17}, -{56,57,-16}, -{56,57,-15}, -{56,57,-14}, -{56,57,-13}, -{56,57,-12}, -{56,57,-11}, -{56,57,-10}, -{56,57,-9}, -{56,57,-8}, -{56,57,-7}, -{56,57,-6}, -{56,57,-5}, -{56,57,-4}, -{56,57,-3}, -{56,57,-2}, -{56,57,-1}, -{56,57,0}, -{56,57,1}, -{56,57,2}, -{56,57,3}, -{56,57,4}, -{56,57,5}, -{56,57,6}, -{56,57,7}, -{56,57,8}, -{56,57,9}, -{56,57,10}, -{56,57,11}, -{56,57,12}, -{56,57,13}, -{56,57,14}, -{56,57,15}, -{56,57,16}, -{56,57,17}, -{56,57,18}, -{56,57,19}, -{56,57,20}, -{56,57,21}, -{56,57,22}, -{56,57,23}, -{56,57,24}, -{56,57,25}, -{56,57,26}, -{56,57,27}, -{56,57,28}, -{56,57,29}, -{56,57,30}, -{56,57,31}, -{56,57,32}, -{56,57,33}, -{56,57,34}, -{56,57,35}, -{56,57,36}, -{56,57,37}, -{56,57,38}, -{56,57,39}, -{56,57,40}, -{56,57,41}, -{56,57,42}, -{56,57,43}, -{56,57,44}, -{56,57,45}, -{56,57,46}, -{56,57,47}, -{56,57,48}, -{56,57,49}, -{56,57,50}, -{56,57,51}, -{56,57,52}, -{56,57,53}, -{56,57,54}, -{56,57,55}, -{56,57,56}, -{56,57,57}, -{56,57,58}, -{56,57,59}, -{56,57,60}, -{56,57,61}, -{56,57,62}, -{56,57,63}, -{56,57,64}, -{56,57,65}, -{56,57,66}, -{56,58,-68}, -{56,58,-67}, -{56,58,-66}, -{56,58,-65}, -{56,58,-64}, -{56,58,-63}, -{56,58,-62}, -{56,58,-61}, -{56,58,-60}, -{56,58,-59}, -{56,58,-58}, -{56,58,-57}, -{56,58,-56}, -{56,58,-55}, -{56,58,-54}, -{56,58,-53}, -{56,58,-52}, -{56,58,-51}, -{56,58,-50}, -{56,58,-49}, -{56,58,-48}, -{56,58,-47}, -{56,58,-46}, -{56,58,-45}, -{56,58,-44}, -{56,58,-43}, -{56,58,-42}, -{56,58,-41}, -{56,58,-40}, -{56,58,-39}, -{56,58,-38}, -{56,58,-37}, -{56,58,-36}, -{56,58,-35}, -{56,58,-34}, -{56,58,-33}, -{56,58,-32}, -{56,58,-31}, -{56,58,-30}, -{56,58,-29}, -{56,58,-28}, -{56,58,-27}, -{56,58,-26}, -{56,58,-25}, -{56,58,-24}, -{56,58,-23}, -{56,58,-22}, -{56,58,-21}, -{56,58,-20}, -{56,58,-19}, -{56,58,-18}, -{56,58,-17}, -{56,58,-16}, -{56,58,-15}, -{56,58,-14}, -{56,58,-13}, -{56,58,-12}, -{56,58,-11}, -{56,58,-10}, -{56,58,-9}, -{56,58,-8}, -{56,58,-7}, -{56,58,-6}, -{56,58,-5}, -{56,58,-4}, -{56,58,-3}, -{56,58,-2}, -{56,58,-1}, -{56,58,0}, -{56,58,1}, -{56,58,2}, -{56,58,3}, -{56,58,4}, -{56,58,5}, -{56,58,6}, -{56,58,7}, -{56,58,8}, -{56,58,9}, -{56,58,10}, -{56,58,11}, -{56,58,12}, -{56,58,13}, -{56,58,14}, -{56,58,15}, -{56,58,16}, -{56,58,17}, -{56,58,18}, -{56,58,19}, -{56,58,20}, -{56,58,21}, -{56,58,22}, -{56,58,23}, -{56,58,24}, -{56,58,25}, -{56,58,26}, -{56,58,27}, -{56,58,28}, -{56,58,29}, -{56,58,30}, -{56,58,31}, -{56,58,32}, -{56,58,33}, -{56,58,34}, -{56,58,35}, -{56,58,36}, -{56,58,37}, -{56,58,38}, -{56,58,39}, -{56,58,40}, -{56,58,41}, -{56,58,42}, -{56,58,43}, -{56,58,44}, -{56,58,45}, -{56,58,46}, -{56,58,47}, -{56,58,48}, -{56,58,49}, -{56,58,50}, -{56,58,51}, -{56,58,52}, -{56,58,53}, -{56,58,54}, -{56,58,55}, -{56,58,56}, -{56,58,57}, -{56,58,58}, -{56,58,59}, -{56,58,60}, -{56,58,61}, -{56,58,62}, -{56,58,63}, -{56,58,64}, -{56,58,65}, -{56,58,66}, -{56,59,-68}, -{56,59,-67}, -{56,59,-66}, -{56,59,-65}, -{56,59,-64}, -{56,59,-63}, -{56,59,-62}, -{56,59,-61}, -{56,59,-60}, -{56,59,-59}, -{56,59,-58}, -{56,59,-57}, -{56,59,-56}, -{56,59,-55}, -{56,59,-54}, -{56,59,-53}, -{56,59,-52}, -{56,59,-51}, -{56,59,-50}, -{56,59,-49}, -{56,59,-48}, -{56,59,-47}, -{56,59,-46}, -{56,59,-45}, -{56,59,-44}, -{56,59,-43}, -{56,59,-42}, -{56,59,-41}, -{56,59,-40}, -{56,59,-39}, -{56,59,-38}, -{56,59,-37}, -{56,59,-36}, -{56,59,-35}, -{56,59,-34}, -{56,59,-33}, -{56,59,-32}, -{56,59,-31}, -{56,59,-30}, -{56,59,-29}, -{56,59,-28}, -{56,59,-27}, -{56,59,-26}, -{56,59,-25}, -{56,59,-24}, -{56,59,-23}, -{56,59,-22}, -{56,59,-21}, -{56,59,-20}, -{56,59,-19}, -{56,59,-18}, -{56,59,-17}, -{56,59,-16}, -{56,59,-15}, -{56,59,-14}, -{56,59,-13}, -{56,59,-12}, -{56,59,-11}, -{56,59,-10}, -{56,59,-9}, -{56,59,-8}, -{56,59,-7}, -{56,59,-6}, -{56,59,-5}, -{56,59,-4}, -{56,59,-3}, -{56,59,-2}, -{56,59,-1}, -{56,59,0}, -{56,59,1}, -{56,59,2}, -{56,59,3}, -{56,59,4}, -{56,59,5}, -{56,59,6}, -{56,59,7}, -{56,59,8}, -{56,59,9}, -{56,59,10}, -{56,59,11}, -{56,59,12}, -{56,59,13}, -{56,59,14}, -{56,59,15}, -{56,59,16}, -{56,59,17}, -{56,59,18}, -{56,59,19}, -{56,59,20}, -{56,59,21}, -{56,59,22}, -{56,59,23}, -{56,59,24}, -{56,59,25}, -{56,59,26}, -{56,59,27}, -{56,59,28}, -{56,59,29}, -{56,59,30}, -{56,59,31}, -{56,59,32}, -{56,59,33}, -{56,59,34}, -{56,59,35}, -{56,59,36}, -{56,59,37}, -{56,59,38}, -{56,59,39}, -{56,59,40}, -{56,59,41}, -{56,59,42}, -{56,59,43}, -{56,59,44}, -{56,59,45}, -{56,59,46}, -{56,59,47}, -{56,59,48}, -{56,59,49}, -{56,59,50}, -{56,59,51}, -{56,59,52}, -{56,59,53}, -{56,59,54}, -{56,59,55}, -{56,59,56}, -{56,59,57}, -{56,59,58}, -{56,59,59}, -{56,59,60}, -{56,59,61}, -{56,59,62}, -{56,59,63}, -{56,59,64}, -{56,59,65}, -{56,59,66}, -{56,60,-68}, -{56,60,-67}, -{56,60,-66}, -{56,60,-65}, -{56,60,-64}, -{56,60,-63}, -{56,60,-62}, -{56,60,-61}, -{56,60,-60}, -{56,60,-59}, -{56,60,-58}, -{56,60,-57}, -{56,60,-56}, -{56,60,-55}, -{56,60,-54}, -{56,60,-53}, -{56,60,-52}, -{56,60,-51}, -{56,60,-50}, -{56,60,-49}, -{56,60,-48}, -{56,60,-47}, -{56,60,-46}, -{56,60,-45}, -{56,60,-44}, -{56,60,-43}, -{56,60,-42}, -{56,60,-41}, -{56,60,-40}, -{56,60,-39}, -{56,60,-38}, -{56,60,-37}, -{56,60,-36}, -{56,60,-35}, -{56,60,-34}, -{56,60,-33}, -{56,60,-32}, -{56,60,-31}, -{56,60,-30}, -{56,60,-29}, -{56,60,-28}, -{56,60,-27}, -{56,60,-26}, -{56,60,-25}, -{56,60,-24}, -{56,60,-23}, -{56,60,-22}, -{56,60,-21}, -{56,60,-20}, -{56,60,-19}, -{56,60,-18}, -{56,60,-17}, -{56,60,-16}, -{56,60,-15}, -{56,60,-14}, -{56,60,-13}, -{56,60,-12}, -{56,60,-11}, -{56,60,-10}, -{56,60,-9}, -{56,60,-8}, -{56,60,-7}, -{56,60,-6}, -{56,60,-5}, -{56,60,-4}, -{56,60,-3}, -{56,60,-2}, -{56,60,-1}, -{56,60,0}, -{56,60,1}, -{56,60,2}, -{56,60,3}, -{56,60,4}, -{56,60,5}, -{56,60,6}, -{56,60,7}, -{56,60,8}, -{56,60,9}, -{56,60,10}, -{56,60,11}, -{56,60,12}, -{56,60,13}, -{56,60,14}, -{56,60,15}, -{56,60,16}, -{56,60,17}, -{56,60,18}, -{56,60,19}, -{56,60,20}, -{56,60,21}, -{56,60,22}, -{56,60,23}, -{56,60,24}, -{56,60,25}, -{56,60,26}, -{56,60,27}, -{56,60,28}, -{56,60,29}, -{56,60,30}, -{56,60,31}, -{56,60,32}, -{56,60,33}, -{56,60,34}, -{56,60,35}, -{56,60,36}, -{56,60,37}, -{56,60,38}, -{56,60,39}, -{56,60,40}, -{56,60,41}, -{56,60,42}, -{56,60,43}, -{56,60,44}, -{56,60,45}, -{56,60,46}, -{56,60,47}, -{56,60,48}, -{56,60,49}, -{56,60,50}, -{56,60,51}, -{56,60,52}, -{56,60,53}, -{56,60,54}, -{56,60,55}, -{56,60,56}, -{56,60,57}, -{56,60,58}, -{56,60,59}, -{56,60,60}, -{56,60,61}, -{56,60,62}, -{56,60,63}, -{56,60,64}, -{56,60,65}, -{56,60,66}, -{56,61,-68}, -{56,61,-67}, -{56,61,-66}, -{56,61,-65}, -{56,61,-64}, -{56,61,-63}, -{56,61,-62}, -{56,61,-61}, -{56,61,-60}, -{56,61,-59}, -{56,61,-58}, -{56,61,-57}, -{56,61,-56}, -{56,61,-55}, -{56,61,-54}, -{56,61,-53}, -{56,61,-52}, -{56,61,-51}, -{56,61,-50}, -{56,61,-49}, -{56,61,-48}, -{56,61,-47}, -{56,61,-46}, -{56,61,-45}, -{56,61,-44}, -{56,61,-43}, -{56,61,-42}, -{56,61,-41}, -{56,61,-40}, -{56,61,-39}, -{56,61,-38}, -{56,61,-37}, -{56,61,-36}, -{56,61,-35}, -{56,61,-34}, -{56,61,-33}, -{56,61,-32}, -{56,61,-31}, -{56,61,-30}, -{56,61,-29}, -{56,61,-28}, -{56,61,-27}, -{56,61,-26}, -{56,61,-25}, -{56,61,-24}, -{56,61,-23}, -{56,61,-22}, -{56,61,-21}, -{56,61,-20}, -{56,61,-19}, -{56,61,-18}, -{56,61,-17}, -{56,61,-16}, -{56,61,-15}, -{56,61,-14}, -{56,61,-13}, -{56,61,-12}, -{56,61,-11}, -{56,61,-10}, -{56,61,-9}, -{56,61,-8}, -{56,61,-7}, -{56,61,-6}, -{56,61,-5}, -{56,61,-4}, -{56,61,-3}, -{56,61,-2}, -{56,61,-1}, -{56,61,0}, -{56,61,1}, -{56,61,2}, -{56,61,3}, -{56,61,4}, -{56,61,5}, -{56,61,6}, -{56,61,7}, -{56,61,8}, -{56,61,9}, -{56,61,10}, -{56,61,11}, -{56,61,12}, -{56,61,13}, -{56,61,14}, -{56,61,15}, -{56,61,16}, -{56,61,17}, -{56,61,18}, -{56,61,19}, -{56,61,20}, -{56,61,21}, -{56,61,22}, -{56,61,23}, -{56,61,24}, -{56,61,25}, -{56,61,26}, -{56,61,27}, -{56,61,28}, -{56,61,29}, -{56,61,30}, -{56,61,31}, -{56,61,32}, -{56,61,33}, -{56,61,34}, -{56,61,35}, -{56,61,36}, -{56,61,37}, -{56,61,38}, -{56,61,39}, -{56,61,40}, -{56,61,41}, -{56,61,42}, -{56,61,43}, -{56,61,44}, -{56,61,45}, -{56,61,46}, -{56,61,47}, -{56,61,48}, -{56,61,49}, -{56,61,50}, -{56,61,51}, -{56,61,52}, -{56,61,53}, -{56,61,54}, -{56,61,55}, -{56,61,56}, -{56,61,57}, -{56,61,58}, -{56,61,59}, -{56,61,60}, -{56,61,61}, -{56,61,62}, -{56,61,63}, -{56,61,64}, -{56,61,65}, -{56,61,66}, -{56,61,67}, -{56,62,-68}, -{56,62,-67}, -{56,62,-66}, -{56,62,-65}, -{56,62,-64}, -{56,62,-63}, -{56,62,-62}, -{56,62,-61}, -{56,62,-60}, -{56,62,-59}, -{56,62,-58}, -{56,62,-57}, -{56,62,-56}, -{56,62,-55}, -{56,62,-54}, -{56,62,-53}, -{56,62,-52}, -{56,62,-51}, -{56,62,-50}, -{56,62,-49}, -{56,62,-48}, -{56,62,-47}, -{56,62,-46}, -{56,62,-45}, -{56,62,-44}, -{56,62,-43}, -{56,62,-42}, -{56,62,-41}, -{56,62,-40}, -{56,62,-39}, -{56,62,-38}, -{56,62,-37}, -{56,62,-36}, -{56,62,-35}, -{56,62,-34}, -{56,62,-33}, -{56,62,-32}, -{56,62,-31}, -{56,62,-30}, -{56,62,-29}, -{56,62,-28}, -{56,62,-27}, -{56,62,-26}, -{56,62,-25}, -{56,62,-24}, -{56,62,-23}, -{56,62,-22}, -{56,62,-21}, -{56,62,-20}, -{56,62,-19}, -{56,62,-18}, -{56,62,-17}, -{56,62,-16}, -{56,62,-15}, -{56,62,-14}, -{56,62,-13}, -{56,62,-12}, -{56,62,-11}, -{56,62,-10}, -{56,62,-9}, -{56,62,-8}, -{56,62,-7}, -{56,62,-6}, -{56,62,-5}, -{56,62,-4}, -{56,62,-3}, -{56,62,-2}, -{56,62,-1}, -{56,62,0}, -{56,62,1}, -{56,62,2}, -{56,62,3}, -{56,62,4}, -{56,62,5}, -{56,62,6}, -{56,62,7}, -{56,62,8}, -{56,62,9}, -{56,62,10}, -{56,62,11}, -{56,62,12}, -{56,62,13}, -{56,62,14}, -{56,62,15}, -{56,62,16}, -{56,62,17}, -{56,62,18}, -{56,62,19}, -{56,62,20}, -{56,62,21}, -{56,62,22}, -{56,62,23}, -{56,62,24}, -{56,62,25}, -{56,62,26}, -{56,62,27}, -{56,62,28}, -{56,62,29}, -{56,62,30}, -{56,62,31}, -{56,62,32}, -{56,62,33}, -{56,62,34}, -{56,62,35}, -{56,62,36}, -{56,62,37}, -{56,62,38}, -{56,62,39}, -{56,62,40}, -{56,62,41}, -{56,62,42}, -{56,62,43}, -{56,62,44}, -{56,62,45}, -{56,62,46}, -{56,62,47}, -{56,62,48}, -{56,62,49}, -{56,62,50}, -{56,62,51}, -{56,62,52}, -{56,62,53}, -{56,62,54}, -{56,62,55}, -{56,62,56}, -{56,62,57}, -{56,62,58}, -{56,62,59}, -{56,62,60}, -{56,62,61}, -{56,62,62}, -{56,62,63}, -{56,62,64}, -{56,62,65}, -{56,62,66}, -{56,62,67}, -{56,63,-68}, -{56,63,-67}, -{56,63,-66}, -{56,63,-65}, -{56,63,-64}, -{56,63,-63}, -{56,63,-62}, -{56,63,-61}, -{56,63,-60}, -{56,63,-59}, -{56,63,-58}, -{56,63,-57}, -{56,63,-56}, -{56,63,-55}, -{56,63,-54}, -{56,63,-53}, -{56,63,-52}, -{56,63,-51}, -{56,63,-50}, -{56,63,-49}, -{56,63,-48}, -{56,63,-47}, -{56,63,-46}, -{56,63,-45}, -{56,63,-44}, -{56,63,-43}, -{56,63,-42}, -{56,63,-41}, -{56,63,-40}, -{56,63,-39}, -{56,63,-38}, -{56,63,-37}, -{56,63,-36}, -{56,63,-35}, -{56,63,-34}, -{56,63,-33}, -{56,63,-32}, -{56,63,-31}, -{56,63,-30}, -{56,63,-29}, -{56,63,-28}, -{56,63,-27}, -{56,63,-26}, -{56,63,-25}, -{56,63,-24}, -{56,63,-23}, -{56,63,-22}, -{56,63,-21}, -{56,63,-20}, -{56,63,-19}, -{56,63,-18}, -{56,63,-17}, -{56,63,-16}, -{56,63,-15}, -{56,63,-14}, -{56,63,-13}, -{56,63,-12}, -{56,63,-11}, -{56,63,-10}, -{56,63,-9}, -{56,63,-8}, -{56,63,-7}, -{56,63,-6}, -{56,63,-5}, -{56,63,-4}, -{56,63,-3}, -{56,63,-2}, -{56,63,-1}, -{56,63,0}, -{56,63,1}, -{56,63,2}, -{56,63,3}, -{56,63,4}, -{56,63,5}, -{56,63,6}, -{56,63,7}, -{56,63,8}, -{56,63,9}, -{56,63,10}, -{56,63,11}, -{56,63,12}, -{56,63,13}, -{56,63,14}, -{56,63,15}, -{56,63,16}, -{56,63,17}, -{56,63,18}, -{56,63,19}, -{56,63,20}, -{56,63,21}, -{56,63,22}, -{56,63,23}, -{56,63,24}, -{56,63,25}, -{56,63,26}, -{56,63,27}, -{56,63,28}, -{56,63,29}, -{56,63,30}, -{56,63,31}, -{56,63,32}, -{56,63,33}, -{56,63,34}, -{56,63,35}, -{56,63,36}, -{56,63,37}, -{56,63,38}, -{56,63,39}, -{56,63,40}, -{56,63,41}, -{56,63,42}, -{56,63,43}, -{56,63,44}, -{56,63,45}, -{56,63,46}, -{56,63,47}, -{56,63,48}, -{56,63,49}, -{56,63,50}, -{56,63,51}, -{56,63,52}, -{56,63,53}, -{56,63,54}, -{56,63,55}, -{56,63,56}, -{56,63,57}, -{56,63,58}, -{56,63,59}, -{56,63,60}, -{56,63,61}, -{56,63,62}, -{56,63,63}, -{56,63,64}, -{56,63,65}, -{56,63,66}, -{56,63,67}, -{56,64,-68}, -{56,64,-67}, -{56,64,-66}, -{56,64,-65}, -{56,64,-64}, -{56,64,-63}, -{56,64,-62}, -{56,64,-61}, -{56,64,-60}, -{56,64,-59}, -{56,64,-58}, -{56,64,-57}, -{56,64,-56}, -{56,64,-55}, -{56,64,-54}, -{56,64,-53}, -{56,64,-52}, -{56,64,-51}, -{56,64,-50}, -{56,64,-49}, -{56,64,-48}, -{56,64,-47}, -{56,64,-46}, -{56,64,-45}, -{56,64,-44}, -{56,64,-43}, -{56,64,-42}, -{56,64,-41}, -{56,64,-40}, -{56,64,-39}, -{56,64,-38}, -{56,64,-37}, -{56,64,-36}, -{56,64,-35}, -{56,64,-34}, -{56,64,-33}, -{56,64,-32}, -{56,64,-31}, -{56,64,-30}, -{56,64,-29}, -{56,64,-28}, -{56,64,-27}, -{56,64,-26}, -{56,64,-25}, -{56,64,-24}, -{56,64,-23}, -{56,64,-22}, -{56,64,-21}, -{56,64,-20}, -{56,64,-19}, -{56,64,-18}, -{56,64,-17}, -{56,64,-16}, -{56,64,-15}, -{56,64,-14}, -{56,64,-13}, -{56,64,-12}, -{56,64,-11}, -{56,64,-10}, -{56,64,-9}, -{56,64,-8}, -{56,64,-7}, -{56,64,-6}, -{56,64,-5}, -{56,64,-4}, -{56,64,-3}, -{56,64,-2}, -{56,64,-1}, -{56,64,0}, -{56,64,1}, -{56,64,2}, -{56,64,3}, -{56,64,4}, -{56,64,5}, -{56,64,6}, -{56,64,7}, -{56,64,8}, -{56,64,9}, -{56,64,10}, -{56,64,11}, -{56,64,12}, -{56,64,13}, -{56,64,14}, -{56,64,15}, -{56,64,16}, -{56,64,17}, -{56,64,18}, -{56,64,19}, -{56,64,20}, -{56,64,21}, -{56,64,22}, -{56,64,23}, -{56,64,24}, -{56,64,25}, -{56,64,26}, -{56,64,27}, -{56,64,28}, -{56,64,29}, -{56,64,30}, -{56,64,31}, -{56,64,32}, -{56,64,33}, -{56,64,34}, -{56,64,35}, -{56,64,36}, -{56,64,37}, -{56,64,38}, -{56,64,39}, -{56,64,40}, -{56,64,41}, -{56,64,42}, -{56,64,43}, -{56,64,44}, -{56,64,45}, -{56,64,46}, -{56,64,47}, -{56,64,48}, -{56,64,49}, -{56,64,50}, -{56,64,51}, -{56,64,52}, -{56,64,53}, -{56,64,54}, -{56,64,55}, -{56,64,56}, -{56,64,57}, -{56,64,58}, -{56,64,59}, -{56,64,60}, -{56,64,61}, -{56,64,62}, -{56,64,63}, -{56,64,64}, -{56,64,65}, -{56,64,66}, -{56,64,67}, -{56,65,-68}, -{56,65,-67}, -{56,65,-66}, -{56,65,-65}, -{56,65,-64}, -{56,65,-63}, -{56,65,-62}, -{56,65,-61}, -{56,65,-60}, -{56,65,-59}, -{56,65,-58}, -{56,65,-57}, -{56,65,-56}, -{56,65,-55}, -{56,65,-54}, -{56,65,-53}, -{56,65,-52}, -{56,65,-51}, -{56,65,-50}, -{56,65,-49}, -{56,65,-48}, -{56,65,-47}, -{56,65,-46}, -{56,65,-45}, -{56,65,-44}, -{56,65,-43}, -{56,65,-42}, -{56,65,-41}, -{56,65,-40}, -{56,65,-39}, -{56,65,-38}, -{56,65,-37}, -{56,65,-36}, -{56,65,-35}, -{56,65,-34}, -{56,65,-33}, -{56,65,-32}, -{56,65,-31}, -{56,65,-30}, -{56,65,-29}, -{56,65,-28}, -{56,65,-27}, -{56,65,-26}, -{56,65,-25}, -{56,65,-24}, -{56,65,-23}, -{56,65,-22}, -{56,65,-21}, -{56,65,-20}, -{56,65,-19}, -{56,65,-18}, -{56,65,-17}, -{56,65,-16}, -{56,65,-15}, -{56,65,-14}, -{56,65,-13}, -{56,65,-12}, -{56,65,-11}, -{56,65,-10}, -{56,65,-9}, -{56,65,-8}, -{56,65,-7}, -{56,65,-6}, -{56,65,-5}, -{56,65,-4}, -{56,65,-3}, -{56,65,-2}, -{56,65,-1}, -{56,65,0}, -{56,65,1}, -{56,65,2}, -{56,65,3}, -{56,65,4}, -{56,65,5}, -{56,65,6}, -{56,65,7}, -{56,65,8}, -{56,65,9}, -{56,65,10}, -{56,65,11}, -{56,65,12}, -{56,65,13}, -{56,65,14}, -{56,65,15}, -{56,65,16}, -{56,65,17}, -{56,65,18}, -{56,65,19}, -{56,65,20}, -{56,65,21}, -{56,65,22}, -{56,65,23}, -{56,65,24}, -{56,65,25}, -{56,65,26}, -{56,65,27}, -{56,65,28}, -{56,65,29}, -{56,65,30}, -{56,65,31}, -{56,65,32}, -{56,65,33}, -{56,65,34}, -{56,65,35}, -{56,65,36}, -{56,65,37}, -{56,65,38}, -{56,65,39}, -{56,65,40}, -{56,65,41}, -{56,65,42}, -{56,65,43}, -{56,65,44}, -{56,65,45}, -{56,65,46}, -{56,65,47}, -{56,65,48}, -{56,65,49}, -{56,65,50}, -{56,65,51}, -{56,65,52}, -{56,65,53}, -{56,65,54}, -{56,65,55}, -{56,65,56}, -{56,65,57}, -{56,65,58}, -{56,65,59}, -{56,65,60}, -{56,65,61}, -{56,65,62}, -{56,65,63}, -{56,65,64}, -{56,65,65}, -{56,65,66}, -{56,65,67}, -{56,66,-68}, -{56,66,-67}, -{56,66,-66}, -{56,66,-65}, -{56,66,-64}, -{56,66,-63}, -{56,66,-62}, -{56,66,-61}, -{56,66,-60}, -{56,66,-59}, -{56,66,-58}, -{56,66,-57}, -{56,66,-56}, -{56,66,-55}, -{56,66,-54}, -{56,66,-53}, -{56,66,-52}, -{56,66,-51}, -{56,66,-50}, -{56,66,-49}, -{56,66,-48}, -{56,66,-47}, -{56,66,-46}, -{56,66,-45}, -{56,66,-44}, -{56,66,-43}, -{56,66,-42}, -{56,66,-41}, -{56,66,-40}, -{56,66,-39}, -{56,66,-38}, -{56,66,-37}, -{56,66,-36}, -{56,66,-35}, -{56,66,-34}, -{56,66,-33}, -{56,66,-32}, -{56,66,-31}, -{56,66,-30}, -{56,66,-29}, -{56,66,-28}, -{56,66,-27}, -{56,66,-26}, -{56,66,-25}, -{56,66,-24}, -{56,66,-23}, -{56,66,-22}, -{56,66,-21}, -{56,66,-20}, -{56,66,-19}, -{56,66,-18}, -{56,66,-17}, -{56,66,-16}, -{56,66,-15}, -{56,66,-14}, -{56,66,-13}, -{56,66,-12}, -{56,66,-11}, -{56,66,-10}, -{56,66,-9}, -{56,66,-8}, -{56,66,-7}, -{56,66,-6}, -{56,66,-5}, -{56,66,-4}, -{56,66,-3}, -{56,66,-2}, -{56,66,-1}, -{56,66,0}, -{56,66,1}, -{56,66,2}, -{56,66,3}, -{56,66,4}, -{56,66,5}, -{56,66,6}, -{56,66,7}, -{56,66,8}, -{56,66,9}, -{56,66,10}, -{56,66,11}, -{56,66,12}, -{56,66,13}, -{56,66,14}, -{56,66,15}, -{56,66,16}, -{56,66,17}, -{56,66,18}, -{56,66,19}, -{56,66,20}, -{56,66,21}, -{56,66,22}, -{56,66,23}, -{56,66,24}, -{56,66,25}, -{56,66,26}, -{56,66,27}, -{56,66,28}, -{56,66,29}, -{56,66,30}, -{56,66,31}, -{56,66,32}, -{56,66,33}, -{56,66,34}, -{56,66,35}, -{56,66,36}, -{56,66,37}, -{56,66,38}, -{56,66,39}, -{56,66,40}, -{56,66,41}, -{56,66,42}, -{56,66,43}, -{56,66,44}, -{56,66,45}, -{56,66,46}, -{56,66,47}, -{56,66,48}, -{56,66,49}, -{56,66,50}, -{56,66,51}, -{56,66,52}, -{56,66,53}, -{56,66,54}, -{56,66,55}, -{56,66,56}, -{56,66,57}, -{56,66,58}, -{56,66,59}, -{56,66,60}, -{56,66,61}, -{56,66,62}, -{56,66,63}, -{56,66,64}, -{56,66,65}, -{56,66,66}, -{56,66,67}, -{56,67,-68}, -{56,67,-67}, -{56,67,-66}, -{56,67,-65}, -{56,67,-64}, -{56,67,-63}, -{56,67,-62}, -{56,67,-61}, -{56,67,-60}, -{56,67,-59}, -{56,67,-58}, -{56,67,-57}, -{56,67,-56}, -{56,67,-55}, -{56,67,-54}, -{56,67,-53}, -{56,67,-52}, -{56,67,-51}, -{56,67,-50}, -{56,67,-49}, -{56,67,-48}, -{56,67,-47}, -{56,67,-46}, -{56,67,-45}, -{56,67,-44}, -{56,67,-43}, -{56,67,-42}, -{56,67,-41}, -{56,67,-40}, -{56,67,-39}, -{56,67,-38}, -{56,67,-37}, -{56,67,-36}, -{56,67,-35}, -{56,67,-34}, -{56,67,-33}, -{56,67,-32}, -{56,67,-31}, -{56,67,-30}, -{56,67,-29}, -{56,67,-28}, -{56,67,-27}, -{56,67,-26}, -{56,67,-25}, -{56,67,-24}, -{56,67,-23}, -{56,67,-22}, -{56,67,-21}, -{56,67,-20}, -{56,67,-19}, -{56,67,-18}, -{56,67,-17}, -{56,67,-16}, -{56,67,-15}, -{56,67,-14}, -{56,67,-13}, -{56,67,-12}, -{56,67,-11}, -{56,67,-10}, -{56,67,-9}, -{56,67,-8}, -{56,67,-7}, -{56,67,-6}, -{56,67,-5}, -{56,67,-4}, -{56,67,-3}, -{56,67,-2}, -{56,67,-1}, -{56,67,0}, -{56,67,1}, -{56,67,2}, -{56,67,3}, -{56,67,4}, -{56,67,5}, -{56,67,6}, -{56,67,7}, -{56,67,8}, -{56,67,9}, -{56,67,10}, -{56,67,11}, -{56,67,12}, -{56,67,13}, -{56,67,14}, -{56,67,15}, -{56,67,16}, -{56,67,17}, -{56,67,18}, -{56,67,19}, -{56,67,20}, -{56,67,21}, -{56,67,22}, -{56,67,23}, -{56,67,24}, -{56,67,25}, -{56,67,26}, -{56,67,27}, -{56,67,28}, -{56,67,29}, -{56,67,30}, -{56,67,31}, -{56,67,32}, -{56,67,33}, -{56,67,34}, -{56,67,35}, -{56,67,36}, -{56,67,37}, -{56,67,38}, -{56,67,39}, -{56,67,40}, -{56,67,41}, -{56,67,42}, -{56,67,43}, -{56,67,44}, -{56,67,45}, -{56,67,46}, -{56,67,47}, -{56,67,48}, -{56,67,49}, -{56,67,50}, -{56,67,51}, -{56,67,52}, -{56,67,53}, -{56,67,54}, -{56,67,55}, -{56,67,56}, -{56,67,57}, -{56,67,58}, -{56,67,59}, -{56,67,60}, -{56,67,61}, -{56,67,62}, -{56,67,63}, -{56,67,64}, -{56,67,65}, -{56,67,66}, -{56,67,67}, -{56,68,-68}, -{56,68,-67}, -{56,68,-66}, -{56,68,-65}, -{56,68,-64}, -{56,68,-63}, -{56,68,-62}, -{56,68,-61}, -{56,68,-60}, -{56,68,-59}, -{56,68,-58}, -{56,68,-57}, -{56,68,-56}, -{56,68,-55}, -{56,68,-54}, -{56,68,-53}, -{56,68,-52}, -{56,68,-51}, -{56,68,-50}, -{56,68,-49}, -{56,68,-48}, -{56,68,-47}, -{56,68,-46}, -{56,68,-45}, -{56,68,-44}, -{56,68,-43}, -{56,68,-42}, -{56,68,-41}, -{56,68,-40}, -{56,68,-39}, -{56,68,-38}, -{56,68,-37}, -{56,68,-36}, -{56,68,-35}, -{56,68,-34}, -{56,68,-33}, -{56,68,-32}, -{56,68,-31}, -{56,68,-30}, -{56,68,-29}, -{56,68,-28}, -{56,68,-27}, -{56,68,-26}, -{56,68,-25}, -{56,68,-24}, -{56,68,-23}, -{56,68,-22}, -{56,68,-21}, -{56,68,-20}, -{56,68,-19}, -{56,68,-18}, -{56,68,-17}, -{56,68,-16}, -{56,68,-15}, -{56,68,-14}, -{56,68,-13}, -{56,68,-12}, -{56,68,-11}, -{56,68,-10}, -{56,68,-9}, -{56,68,-8}, -{56,68,-7}, -{56,68,-6}, -{56,68,-5}, -{56,68,-4}, -{56,68,-3}, -{56,68,-2}, -{56,68,-1}, -{56,68,0}, -{56,68,1}, -{56,68,2}, -{56,68,3}, -{56,68,4}, -{56,68,5}, -{56,68,6}, -{56,68,7}, -{56,68,8}, -{56,68,9}, -{56,68,10}, -{56,68,11}, -{56,68,12}, -{56,68,13}, -{56,68,14}, -{56,68,15}, -{56,68,16}, -{56,68,17}, -{56,68,18}, -{56,68,19}, -{56,68,20}, -{56,68,21}, -{56,68,22}, -{56,68,23}, -{56,68,24}, -{56,68,25}, -{56,68,26}, -{56,68,27}, -{56,68,28}, -{56,68,29}, -{56,68,30}, -{56,68,31}, -{56,68,32}, -{56,68,33}, -{56,68,34}, -{56,68,35}, -{56,68,36}, -{56,68,37}, -{56,68,38}, -{56,68,39}, -{56,68,40}, -{56,68,41}, -{56,68,42}, -{56,68,43}, -{56,68,44}, -{56,68,45}, -{56,68,46}, -{56,68,47}, -{56,68,48}, -{56,68,49}, -{56,68,50}, -{56,68,51}, -{56,68,52}, -{56,68,53}, -{56,68,54}, -{56,68,55}, -{56,68,56}, -{56,68,57}, -{56,68,58}, -{56,68,59}, -{56,68,60}, -{56,68,61}, -{56,68,62}, -{56,68,63}, -{56,68,64}, -{56,68,65}, -{56,68,66}, -{56,68,67}, -{56,69,-68}, -{56,69,-67}, -{56,69,-66}, -{56,69,-65}, -{56,69,-64}, -{56,69,-63}, -{56,69,-62}, -{56,69,-61}, -{56,69,-60}, -{56,69,-59}, -{56,69,-58}, -{56,69,-57}, -{56,69,-56}, -{56,69,-55}, -{56,69,-54}, -{56,69,-53}, -{56,69,-52}, -{56,69,-51}, -{56,69,-50}, -{56,69,-49}, -{56,69,-48}, -{56,69,-47}, -{56,69,-46}, -{56,69,-45}, -{56,69,-44}, -{56,69,-43}, -{56,69,-42}, -{56,69,-41}, -{56,69,-40}, -{56,69,-39}, -{56,69,-38}, -{56,69,-37}, -{56,69,-36}, -{56,69,-35}, -{56,69,-34}, -{56,69,-33}, -{56,69,-32}, -{56,69,-31}, -{56,69,-30}, -{56,69,-29}, -{56,69,-28}, -{56,69,-27}, -{56,69,-26}, -{56,69,-25}, -{56,69,-24}, -{56,69,-23}, -{56,69,-22}, -{56,69,-21}, -{56,69,-20}, -{56,69,-19}, -{56,69,-18}, -{56,69,-17}, -{56,69,-16}, -{56,69,-15}, -{56,69,-14}, -{56,69,-13}, -{56,69,-12}, -{56,69,-11}, -{56,69,-10}, -{56,69,-9}, -{56,69,-8}, -{56,69,-7}, -{56,69,-6}, -{56,69,-5}, -{56,69,-4}, -{56,69,-3}, -{56,69,-2}, -{56,69,-1}, -{56,69,0}, -{56,69,1}, -{56,69,2}, -{56,69,3}, -{56,69,4}, -{56,69,5}, -{56,69,6}, -{56,69,7}, -{56,69,8}, -{56,69,9}, -{56,69,10}, -{56,69,11}, -{56,69,12}, -{56,69,13}, -{56,69,14}, -{56,69,15}, -{56,69,16}, -{56,69,17}, -{56,69,18}, -{56,69,19}, -{56,69,20}, -{56,69,21}, -{56,69,22}, -{56,69,23}, -{56,69,24}, -{56,69,25}, -{56,69,26}, -{56,69,27}, -{56,69,28}, -{56,69,29}, -{56,69,30}, -{56,69,31}, -{56,69,32}, -{56,69,33}, -{56,69,34}, -{56,69,35}, -{56,69,36}, -{56,69,37}, -{56,69,38}, -{56,69,39}, -{56,69,40}, -{56,69,41}, -{56,69,42}, -{56,69,43}, -{56,69,44}, -{56,69,45}, -{56,69,46}, -{56,69,47}, -{56,69,48}, -{56,69,49}, -{56,69,50}, -{56,69,51}, -{56,69,52}, -{56,69,53}, -{56,69,54}, -{56,69,55}, -{56,69,56}, -{56,69,57}, -{56,69,58}, -{56,69,59}, -{56,69,60}, -{56,69,61}, -{56,69,62}, -{56,69,63}, -{56,69,64}, -{56,69,65}, -{56,69,66}, -{56,69,67}, -{56,69,68}, -{56,70,-68}, -{56,70,-67}, -{56,70,-66}, -{56,70,-65}, -{56,70,-64}, -{56,70,-63}, -{56,70,-62}, -{56,70,-61}, -{56,70,-60}, -{56,70,-59}, -{56,70,-58}, -{56,70,-57}, -{56,70,-56}, -{56,70,-55}, -{56,70,-54}, -{56,70,-53}, -{56,70,-52}, -{56,70,-51}, -{56,70,-50}, -{56,70,-49}, -{56,70,-48}, -{56,70,-47}, -{56,70,-46}, -{56,70,-45}, -{56,70,-44}, -{56,70,-43}, -{56,70,-42}, -{56,70,-41}, -{56,70,-40}, -{56,70,-39}, -{56,70,-38}, -{56,70,-37}, -{56,70,-36}, -{56,70,-35}, -{56,70,-34}, -{56,70,-33}, -{56,70,-32}, -{56,70,-31}, -{56,70,-30}, -{56,70,-29}, -{56,70,-28}, -{56,70,-27}, -{56,70,-26}, -{56,70,-25}, -{56,70,-24}, -{56,70,-23}, -{56,70,-22}, -{56,70,-21}, -{56,70,-20}, -{56,70,-19}, -{56,70,-18}, -{56,70,-17}, -{56,70,-16}, -{56,70,-15}, -{56,70,-14}, -{56,70,-13}, -{56,70,-12}, -{56,70,-11}, -{56,70,-10}, -{56,70,-9}, -{56,70,-8}, -{56,70,-7}, -{56,70,-6}, -{56,70,-5}, -{56,70,-4}, -{56,70,-3}, -{56,70,-2}, -{56,70,-1}, -{56,70,0}, -{56,70,1}, -{56,70,2}, -{56,70,3}, -{56,70,4}, -{56,70,5}, -{56,70,6}, -{56,70,7}, -{56,70,8}, -{56,70,9}, -{56,70,10}, -{56,70,11}, -{56,70,12}, -{56,70,13}, -{56,70,14}, -{56,70,15}, -{56,70,16}, -{56,70,17}, -{56,70,18}, -{56,70,19}, -{56,70,20}, -{56,70,21}, -{56,70,22}, -{56,70,23}, -{56,70,24}, -{56,70,25}, -{56,70,26}, -{56,70,27}, -{56,70,28}, -{56,70,29}, -{56,70,30}, -{56,70,31}, -{56,70,32}, -{56,70,33}, -{56,70,34}, -{56,70,35}, -{56,70,36}, -{56,70,37}, -{56,70,38}, -{56,70,39}, -{56,70,40}, -{56,70,41}, -{56,70,42}, -{56,70,43}, -{56,70,44}, -{56,70,45}, -{56,70,46}, -{56,70,47}, -{56,70,48}, -{56,70,49}, -{56,70,50}, -{56,70,51}, -{56,70,52}, -{56,70,53}, -{56,70,54}, -{56,70,55}, -{56,70,56}, -{56,70,57}, -{56,70,58}, -{56,70,59}, -{56,70,60}, -{56,70,61}, -{56,70,62}, -{56,70,63}, -{56,70,64}, -{56,70,65}, -{56,70,66}, -{56,70,67}, -{56,70,68}, -{56,71,-68}, -{56,71,-67}, -{56,71,-66}, -{56,71,-65}, -{56,71,-64}, -{56,71,-63}, -{56,71,-62}, -{56,71,-61}, -{56,71,-60}, -{56,71,-59}, -{56,71,-58}, -{56,71,-57}, -{56,71,-56}, -{56,71,-55}, -{56,71,-54}, -{56,71,-53}, -{56,71,-52}, -{56,71,-51}, -{56,71,-50}, -{56,71,-49}, -{56,71,-48}, -{56,71,-47}, -{56,71,-46}, -{56,71,-45}, -{56,71,-44}, -{56,71,-43}, -{56,71,-42}, -{56,71,-41}, -{56,71,-40}, -{56,71,-39}, -{56,71,-38}, -{56,71,-37}, -{56,71,-36}, -{56,71,-35}, -{56,71,-34}, -{56,71,-33}, -{56,71,-32}, -{56,71,-31}, -{56,71,-30}, -{56,71,-29}, -{56,71,-28}, -{56,71,-27}, -{56,71,-26}, -{56,71,-25}, -{56,71,-24}, -{56,71,-23}, -{56,71,-22}, -{56,71,-21}, -{56,71,-20}, -{56,71,-19}, -{56,71,-18}, -{56,71,-17}, -{56,71,-16}, -{56,71,-15}, -{56,71,-14}, -{56,71,-13}, -{56,71,-12}, -{56,71,-11}, -{56,71,-10}, -{56,71,-9}, -{56,71,-8}, -{56,71,-7}, -{56,71,-6}, -{56,71,-5}, -{56,71,-4}, -{56,71,-3}, -{56,71,-2}, -{56,71,-1}, -{56,71,0}, -{56,71,1}, -{56,71,2}, -{56,71,3}, -{56,71,4}, -{56,71,5}, -{56,71,6}, -{56,71,7}, -{56,71,8}, -{56,71,9}, -{56,71,10}, -{56,71,11}, -{56,71,12}, -{56,71,13}, -{56,71,14}, -{56,71,15}, -{56,71,16}, -{56,71,17}, -{56,71,18}, -{56,71,19}, -{56,71,20}, -{56,71,21}, -{56,71,22}, -{56,71,23}, -{56,71,24}, -{56,71,25}, -{56,71,26}, -{56,71,27}, -{56,71,28}, -{56,71,29}, -{56,71,30}, -{56,71,31}, -{56,71,32}, -{56,71,33}, -{56,71,34}, -{56,71,35}, -{56,71,36}, -{56,71,37}, -{56,71,38}, -{56,71,39}, -{56,71,40}, -{56,71,41}, -{56,71,42}, -{56,71,43}, -{56,71,44}, -{56,71,45}, -{56,71,46}, -{56,71,47}, -{56,71,48}, -{56,71,49}, -{56,71,50}, -{56,71,51}, -{56,71,52}, -{56,71,53}, -{56,71,54}, -{56,71,55}, -{56,71,56}, -{56,71,57}, -{56,71,58}, -{56,71,59}, -{56,71,60}, -{56,71,61}, -{56,71,62}, -{56,71,63}, -{56,71,64}, -{56,71,65}, -{56,71,66}, -{56,71,67}, -{56,71,68}, -{56,72,-68}, -{56,72,-67}, -{56,72,-66}, -{56,72,-65}, -{56,72,-64}, -{56,72,-63}, -{56,72,-62}, -{56,72,-61}, -{56,72,-60}, -{56,72,-59}, -{56,72,-58}, -{56,72,-57}, -{56,72,-56}, -{56,72,-55}, -{56,72,-54}, -{56,72,-53}, -{56,72,-52}, -{56,72,-51}, -{56,72,-50}, -{56,72,-49}, -{56,72,-48}, -{56,72,-47}, -{56,72,-46}, -{56,72,-45}, -{56,72,-44}, -{56,72,-43}, -{56,72,-42}, -{56,72,-41}, -{56,72,-40}, -{56,72,-39}, -{56,72,-38}, -{56,72,-37}, -{56,72,-36}, -{56,72,-35}, -{56,72,-34}, -{56,72,-33}, -{56,72,-32}, -{56,72,-31}, -{56,72,-30}, -{56,72,-29}, -{56,72,-28}, -{56,72,-27}, -{56,72,-26}, -{56,72,-25}, -{56,72,-24}, -{56,72,-23}, -{56,72,-22}, -{56,72,-21}, -{56,72,-20}, -{56,72,-19}, -{56,72,-18}, -{56,72,-17}, -{56,72,-16}, -{56,72,-15}, -{56,72,-14}, -{56,72,-13}, -{56,72,-12}, -{56,72,-11}, -{56,72,-10}, -{56,72,-9}, -{56,72,-8}, -{56,72,-7}, -{56,72,-6}, -{56,72,-5}, -{56,72,-4}, -{56,72,-3}, -{56,72,-2}, -{56,72,-1}, -{56,72,0}, -{56,72,1}, -{56,72,2}, -{56,72,3}, -{56,72,4}, -{56,72,5}, -{56,72,6}, -{56,72,7}, -{56,72,8}, -{56,72,9}, -{56,72,10}, -{56,72,11}, -{56,72,12}, -{56,72,13}, -{56,72,14}, -{56,72,15}, -{56,72,16}, -{56,72,17}, -{56,72,18}, -{56,72,19}, -{56,72,20}, -{56,72,21}, -{56,72,22}, -{56,72,23}, -{56,72,24}, -{56,72,25}, -{56,72,26}, -{56,72,27}, -{56,72,28}, -{56,72,29}, -{56,72,30}, -{56,72,31}, -{56,72,32}, -{56,72,33}, -{56,72,34}, -{56,72,35}, -{56,72,36}, -{56,72,37}, -{56,72,38}, -{56,72,39}, -{56,72,40}, -{56,72,41}, -{56,72,42}, -{56,72,43}, -{56,72,44}, -{56,72,45}, -{56,72,46}, -{56,72,47}, -{56,72,48}, -{56,72,49}, -{56,72,50}, -{56,72,51}, -{56,72,52}, -{56,72,53}, -{56,72,54}, -{56,72,55}, -{56,72,56}, -{56,72,57}, -{56,72,58}, -{56,72,59}, -{56,72,60}, -{56,72,61}, -{56,72,62}, -{56,72,63}, -{56,72,64}, -{56,72,65}, -{56,72,66}, -{56,72,67}, -{56,72,68}, -{56,73,-68}, -{56,73,-67}, -{56,73,-66}, -{56,73,-65}, -{56,73,-64}, -{56,73,-63}, -{56,73,-62}, -{56,73,-61}, -{56,73,-60}, -{56,73,-59}, -{56,73,-58}, -{56,73,-57}, -{56,73,-56}, -{56,73,-55}, -{56,73,-54}, -{56,73,-53}, -{56,73,-52}, -{56,73,-51}, -{56,73,-50}, -{56,73,-49}, -{56,73,-48}, -{56,73,-47}, -{56,73,-46}, -{56,73,-45}, -{56,73,-44}, -{56,73,-43}, -{56,73,-42}, -{56,73,-41}, -{56,73,-40}, -{56,73,-39}, -{56,73,-38}, -{56,73,-37}, -{56,73,-36}, -{56,73,-35}, -{56,73,-34}, -{56,73,-33}, -{56,73,-32}, -{56,73,-31}, -{56,73,-30}, -{56,73,-29}, -{56,73,-28}, -{56,73,-27}, -{56,73,-26}, -{56,73,-25}, -{56,73,-24}, -{56,73,-23}, -{56,73,-22}, -{56,73,-21}, -{56,73,-20}, -{56,73,-19}, -{56,73,-18}, -{56,73,-17}, -{56,73,-16}, -{56,73,-15}, -{56,73,-14}, -{56,73,-13}, -{56,73,-12}, -{56,73,-11}, -{56,73,-10}, -{56,73,-9}, -{56,73,-8}, -{56,73,-7}, -{56,73,-6}, -{56,73,-5}, -{56,73,-4}, -{56,73,-3}, -{56,73,-2}, -{56,73,-1}, -{56,73,0}, -{56,73,1}, -{56,73,2}, -{56,73,3}, -{56,73,4}, -{56,73,5}, -{56,73,6}, -{56,73,7}, -{56,73,8}, -{56,73,9}, -{56,73,10}, -{56,73,11}, -{56,73,12}, -{56,73,13}, -{56,73,14}, -{56,73,15}, -{56,73,16}, -{56,73,17}, -{56,73,18}, -{56,73,19}, -{56,73,20}, -{56,73,21}, -{56,73,22}, -{56,73,23}, -{56,73,24}, -{56,73,25}, -{56,73,26}, -{56,73,27}, -{56,73,28}, -{56,73,29}, -{56,73,30}, -{56,73,31}, -{56,73,32}, -{56,73,33}, -{56,73,34}, -{56,73,35}, -{56,73,36}, -{56,73,37}, -{56,73,38}, -{56,73,39}, -{56,73,40}, -{56,73,41}, -{56,73,42}, -{56,73,43}, -{56,73,44}, -{56,73,45}, -{56,73,46}, -{56,73,47}, -{56,73,48}, -{56,73,49}, -{56,73,50}, -{56,73,51}, -{56,73,52}, -{56,73,53}, -{56,73,54}, -{56,73,55}, -{56,73,56}, -{56,73,57}, -{56,73,58}, -{56,73,59}, -{56,74,-68}, -{56,74,-67}, -{56,74,-66}, -{56,74,-65}, -{56,74,-64}, -{56,74,-63}, -{56,74,-62}, -{56,74,-61}, -{56,74,-60}, -{56,74,-59}, -{56,74,-58}, -{56,74,-57}, -{56,74,-56}, -{56,74,-55}, -{56,74,-54}, -{56,74,-53}, -{56,74,-52}, -{56,74,-51}, -{56,74,-50}, -{56,74,-49}, -{56,74,-48}, -{56,74,-47}, -{56,74,-46}, -{56,74,-45}, -{56,74,-44}, -{56,74,-43}, -{56,74,-42}, -{56,74,-41}, -{56,74,-40}, -{56,74,-39}, -{56,74,-38}, -{56,74,-37}, -{56,74,-36}, -{56,74,-35}, -{56,74,-34}, -{56,74,-33}, -{56,74,-32}, -{56,74,-31}, -{56,74,-30}, -{56,74,-29}, -{56,74,-28}, -{56,74,-27}, -{56,74,-26}, -{56,74,-25}, -{56,74,-24}, -{56,74,-23}, -{56,74,-22}, -{56,74,-21}, -{56,74,-20}, -{56,74,-19}, -{56,74,-18}, -{56,74,-17}, -{56,74,-16}, -{56,74,-15}, -{56,74,-14}, -{56,74,-13}, -{56,74,-12}, -{56,74,-11}, -{56,74,-10}, -{56,74,-9}, -{56,74,-8}, -{56,74,-7}, -{56,74,-6}, -{56,74,-5}, -{56,74,-4}, -{56,74,-3}, -{56,74,-2}, -{56,74,-1}, -{56,74,0}, -{56,74,1}, -{56,74,2}, -{56,74,3}, -{56,74,4}, -{56,74,5}, -{56,74,6}, -{56,74,7}, -{56,74,8}, -{56,74,9}, -{56,74,10}, -{56,74,11}, -{56,74,12}, -{56,74,13}, -{56,74,14}, -{56,74,15}, -{56,74,16}, -{56,74,17}, -{56,74,18}, -{56,74,19}, -{56,74,20}, -{56,74,21}, -{56,74,22}, -{56,74,23}, -{56,74,24}, -{56,74,25}, -{56,74,26}, -{56,74,27}, -{56,74,28}, -{56,74,29}, -{56,74,30}, -{56,74,31}, -{56,74,32}, -{56,74,33}, -{56,74,34}, -{56,74,35}, -{56,74,36}, -{56,74,37}, -{56,74,38}, -{56,74,39}, -{56,74,40}, -{56,74,41}, -{56,74,42}, -{56,74,43}, -{56,74,44}, -{56,74,45}, -{56,74,46}, -{56,74,47}, -{56,74,48}, -{56,75,-68}, -{56,75,-67}, -{56,75,-66}, -{56,75,-65}, -{56,75,-64}, -{56,75,-63}, -{56,75,-62}, -{56,75,-61}, -{56,75,-60}, -{56,75,-59}, -{56,75,-58}, -{56,75,-57}, -{56,75,-56}, -{56,75,-55}, -{56,75,-54}, -{56,75,-53}, -{56,75,-52}, -{56,75,-51}, -{56,75,-50}, -{56,75,-49}, -{56,75,-48}, -{56,75,-47}, -{56,75,-46}, -{56,75,-45}, -{56,75,-44}, -{56,75,-43}, -{56,75,-42}, -{56,75,-41}, -{56,75,-40}, -{56,75,-39}, -{56,75,-38}, -{56,75,-37}, -{56,75,-36}, -{56,75,-35}, -{56,75,-34}, -{56,75,-33}, -{56,75,-32}, -{56,75,-31}, -{56,75,-30}, -{56,75,-29}, -{56,75,-28}, -{56,75,-27}, -{56,75,-26}, -{56,75,-25}, -{56,75,-24}, -{56,75,-23}, -{56,75,-22}, -{56,75,-21}, -{56,75,-20}, -{56,75,-19}, -{56,75,-18}, -{56,75,-17}, -{56,75,-16}, -{56,75,-15}, -{56,75,-14}, -{56,75,-13}, -{56,75,-12}, -{56,75,-11}, -{56,75,-10}, -{56,75,-9}, -{56,75,-8}, -{56,75,-7}, -{56,75,-6}, -{56,75,-5}, -{56,75,-4}, -{56,75,-3}, -{56,75,-2}, -{56,75,-1}, -{56,75,0}, -{56,75,1}, -{56,75,2}, -{56,75,3}, -{56,75,4}, -{56,75,5}, -{56,75,6}, -{56,75,7}, -{56,75,8}, -{56,75,9}, -{56,75,10}, -{56,75,11}, -{56,75,12}, -{56,75,13}, -{56,75,14}, -{56,75,15}, -{56,75,16}, -{56,75,17}, -{56,75,18}, -{56,75,19}, -{56,75,20}, -{56,75,21}, -{56,75,22}, -{56,75,23}, -{56,75,24}, -{56,75,25}, -{56,75,26}, -{56,75,27}, -{56,75,28}, -{56,75,29}, -{56,75,30}, -{56,75,31}, -{56,75,32}, -{56,75,33}, -{56,75,34}, -{56,75,35}, -{56,75,36}, -{56,75,37}, -{56,75,38}, -{56,75,39}, -{56,75,40}, -{56,76,-68}, -{56,76,-67}, -{56,76,-66}, -{56,76,-65}, -{56,76,-64}, -{56,76,-63}, -{56,76,-62}, -{56,76,-61}, -{56,76,-60}, -{56,76,-59}, -{56,76,-58}, -{56,76,-57}, -{56,76,-56}, -{56,76,-55}, -{56,76,-54}, -{56,76,-53}, -{56,76,-52}, -{56,76,-51}, -{56,76,-50}, -{56,76,-49}, -{56,76,-48}, -{56,76,-47}, -{56,76,-46}, -{56,76,-45}, -{56,76,-44}, -{56,76,-43}, -{56,76,-42}, -{56,76,-41}, -{56,76,-40}, -{56,76,-39}, -{56,76,-38}, -{56,76,-37}, -{56,76,-36}, -{56,76,-35}, -{56,76,-34}, -{56,76,-33}, -{56,76,-32}, -{56,76,-31}, -{56,76,-30}, -{56,76,-29}, -{56,76,-28}, -{56,76,-27}, -{56,76,-26}, -{56,76,-25}, -{56,76,-24}, -{56,76,-23}, -{56,76,-22}, -{56,76,-21}, -{56,76,-20}, -{56,76,-19}, -{56,76,-18}, -{56,76,-17}, -{56,76,-16}, -{56,76,-15}, -{56,76,-14}, -{56,76,-13}, -{56,76,-12}, -{56,76,-11}, -{56,76,-10}, -{56,76,-9}, -{56,76,-8}, -{56,76,-7}, -{56,76,-6}, -{56,76,-5}, -{56,76,-4}, -{56,76,-3}, -{56,76,-2}, -{56,76,-1}, -{56,76,0}, -{56,76,1}, -{56,76,2}, -{56,76,3}, -{56,76,4}, -{56,76,5}, -{56,76,6}, -{56,76,7}, -{56,76,8}, -{56,76,9}, -{56,76,10}, -{56,76,11}, -{56,76,12}, -{56,76,13}, -{56,76,14}, -{56,76,15}, -{56,76,16}, -{56,76,17}, -{56,76,18}, -{56,76,19}, -{56,76,20}, -{56,76,21}, -{56,76,22}, -{56,76,23}, -{56,76,24}, -{56,76,25}, -{56,76,26}, -{56,76,27}, -{56,76,28}, -{56,76,29}, -{56,76,30}, -{56,76,31}, -{56,76,32}, -{56,76,33}, -{56,77,-68}, -{56,77,-67}, -{56,77,-66}, -{56,77,-65}, -{56,77,-64}, -{56,77,-63}, -{56,77,-62}, -{56,77,-61}, -{56,77,-60}, -{56,77,-59}, -{56,77,-58}, -{56,77,-57}, -{56,77,-56}, -{56,77,-55}, -{56,77,-54}, -{56,77,-53}, -{56,77,-52}, -{56,77,-51}, -{56,77,-50}, -{56,77,-49}, -{56,77,-48}, -{56,77,-47}, -{56,77,-46}, -{56,77,-45}, -{56,77,-44}, -{56,77,-43}, -{56,77,-42}, -{56,77,-41}, -{56,77,-40}, -{56,77,-39}, -{56,77,-38}, -{56,77,-37}, -{56,77,-36}, -{56,77,-35}, -{56,77,-34}, -{56,77,-33}, -{56,77,-32}, -{56,77,-31}, -{56,77,-30}, -{56,77,-29}, -{56,77,-28}, -{56,77,-27}, -{56,77,-26}, -{56,77,-25}, -{56,77,-24}, -{56,77,-23}, -{56,77,-22}, -{56,77,-21}, -{56,77,-20}, -{56,77,-19}, -{56,77,-18}, -{56,77,-17}, -{56,77,-16}, -{56,77,-15}, -{56,77,-14}, -{56,77,-13}, -{56,77,-12}, -{56,77,-11}, -{56,77,-10}, -{56,77,-9}, -{56,77,-8}, -{56,77,-7}, -{56,77,-6}, -{56,77,-5}, -{56,77,-4}, -{56,77,-3}, -{56,77,-2}, -{56,77,-1}, -{56,77,0}, -{56,77,1}, -{56,77,2}, -{56,77,3}, -{56,77,4}, -{56,77,5}, -{56,77,6}, -{56,77,7}, -{56,77,8}, -{56,77,9}, -{56,77,10}, -{56,77,11}, -{56,77,12}, -{56,77,13}, -{56,77,14}, -{56,77,15}, -{56,77,16}, -{56,77,17}, -{56,77,18}, -{56,77,19}, -{56,77,20}, -{56,77,21}, -{56,77,22}, -{56,77,23}, -{56,77,24}, -{56,77,25}, -{56,77,26}, -{56,77,27}, -{56,78,-68}, -{56,78,-67}, -{56,78,-66}, -{56,78,-65}, -{56,78,-64}, -{56,78,-63}, -{56,78,-62}, -{56,78,-61}, -{56,78,-60}, -{56,78,-59}, -{56,78,-58}, -{56,78,-57}, -{56,78,-56}, -{56,78,-55}, -{56,78,-54}, -{56,78,-53}, -{56,78,-52}, -{56,78,-51}, -{56,78,-50}, -{56,78,-49}, -{56,78,-48}, -{56,78,-47}, -{56,78,-46}, -{56,78,-45}, -{56,78,-44}, -{56,78,-43}, -{56,78,-42}, -{56,78,-41}, -{56,78,-40}, -{56,78,-39}, -{56,78,-38}, -{56,78,-37}, -{56,78,-36}, -{56,78,-35}, -{56,78,-34}, -{56,78,-33}, -{56,78,-32}, -{56,78,-31}, -{56,78,-30}, -{56,78,-29}, -{56,78,-28}, -{56,78,-27}, -{56,78,-26}, -{56,78,-25}, -{56,78,-24}, -{56,78,-23}, -{56,78,-22}, -{56,78,-21}, -{56,78,-20}, -{56,78,-19}, -{56,78,-18}, -{56,78,-17}, -{56,78,-16}, -{56,78,-15}, -{56,78,-14}, -{56,78,-13}, -{56,78,-12}, -{56,78,-11}, -{56,78,-10}, -{56,78,-9}, -{56,78,-8}, -{56,78,-7}, -{56,78,-6}, -{56,78,-5}, -{56,78,-4}, -{56,78,-3}, -{56,78,-2}, -{56,78,-1}, -{56,78,0}, -{56,78,1}, -{56,78,2}, -{56,78,3}, -{56,78,4}, -{56,78,5}, -{56,78,6}, -{56,78,7}, -{56,78,8}, -{56,78,9}, -{56,78,10}, -{56,78,11}, -{56,78,12}, -{56,78,13}, -{56,78,14}, -{56,78,15}, -{56,78,16}, -{56,78,17}, -{56,78,18}, -{56,78,19}, -{56,78,20}, -{56,78,21}, -{56,79,-68}, -{56,79,-67}, -{56,79,-66}, -{56,79,-65}, -{56,79,-64}, -{56,79,-63}, -{56,79,-62}, -{56,79,-61}, -{56,79,-60}, -{56,79,-59}, -{56,79,-58}, -{56,79,-57}, -{56,79,-56}, -{56,79,-55}, -{56,79,-54}, -{56,79,-53}, -{56,79,-52}, -{56,79,-51}, -{56,79,-50}, -{56,79,-49}, -{56,79,-48}, -{56,79,-47}, -{56,79,-46}, -{56,79,-45}, -{56,79,-44}, -{56,79,-43}, -{56,79,-42}, -{56,79,-41}, -{56,79,-40}, -{56,79,-39}, -{56,79,-38}, -{56,79,-37}, -{56,79,-36}, -{56,79,-35}, -{56,79,-34}, -{56,79,-33}, -{56,79,-32}, -{56,79,-31}, -{56,79,-30}, -{56,79,-29}, -{56,79,-28}, -{56,79,-27}, -{56,79,-26}, -{56,79,-25}, -{56,79,-24}, -{56,79,-23}, -{56,79,-22}, -{56,79,-21}, -{56,79,-20}, -{56,79,-19}, -{56,79,-18}, -{56,79,-17}, -{56,79,-16}, -{56,79,-15}, -{56,79,-14}, -{56,79,-13}, -{56,79,-12}, -{56,79,-11}, -{56,79,-10}, -{56,79,-9}, -{56,79,-8}, -{56,79,-7}, -{56,79,-6}, -{56,79,-5}, -{56,79,-4}, -{56,79,-3}, -{56,79,-2}, -{56,79,-1}, -{56,79,0}, -{56,79,1}, -{56,79,2}, -{56,79,3}, -{56,79,4}, -{56,79,5}, -{56,79,6}, -{56,79,7}, -{56,79,8}, -{56,79,9}, -{56,79,10}, -{56,79,11}, -{56,79,12}, -{56,79,13}, -{56,79,14}, -{56,79,15}, -{56,79,16}, -{56,80,-68}, -{56,80,-67}, -{56,80,-66}, -{56,80,-65}, -{56,80,-64}, -{56,80,-63}, -{56,80,-62}, -{56,80,-61}, -{56,80,-60}, -{56,80,-59}, -{56,80,-58}, -{56,80,-57}, -{56,80,-56}, -{56,80,-55}, -{56,80,-54}, -{56,80,-53}, -{56,80,-52}, -{56,80,-51}, -{56,80,-50}, -{56,80,-49}, -{56,80,-48}, -{56,80,-47}, -{56,80,-46}, -{56,80,-45}, -{56,80,-44}, -{56,80,-43}, -{56,80,-42}, -{56,80,-41}, -{56,80,-40}, -{56,80,-39}, -{56,80,-38}, -{56,80,-37}, -{56,80,-36}, -{56,80,-35}, -{56,80,-34}, -{56,80,-33}, -{56,80,-32}, -{56,80,-31}, -{56,80,-30}, -{56,80,-29}, -{56,80,-28}, -{56,80,-27}, -{56,80,-26}, -{56,80,-25}, -{56,80,-24}, -{56,80,-23}, -{56,80,-22}, -{56,80,-21}, -{56,80,-20}, -{56,80,-19}, -{56,80,-18}, -{56,80,-17}, -{56,80,-16}, -{56,80,-15}, -{56,80,-14}, -{56,80,-13}, -{56,80,-12}, -{56,80,-11}, -{56,80,-10}, -{56,80,-9}, -{56,80,-8}, -{56,80,-7}, -{56,80,-6}, -{56,80,-5}, -{56,80,-4}, -{56,80,-3}, -{56,80,-2}, -{56,80,-1}, -{56,80,0}, -{56,80,1}, -{56,80,2}, -{56,80,3}, -{56,80,4}, -{56,80,5}, -{56,80,6}, -{56,80,7}, -{56,80,8}, -{56,80,9}, -{56,80,10}, -{56,80,11}, -{56,80,12}, -{56,81,-68}, -{56,81,-67}, -{56,81,-66}, -{56,81,-65}, -{56,81,-64}, -{56,81,-63}, -{56,81,-62}, -{56,81,-61}, -{56,81,-60}, -{56,81,-59}, -{56,81,-58}, -{56,81,-57}, -{56,81,-56}, -{56,81,-55}, -{56,81,-54}, -{56,81,-53}, -{56,81,-52}, -{56,81,-51}, -{56,81,-50}, -{56,81,-49}, -{56,81,-48}, -{56,81,-47}, -{56,81,-46}, -{56,81,-45}, -{56,81,-44}, -{56,81,-43}, -{56,81,-42}, -{56,81,-41}, -{56,81,-40}, -{56,81,-39}, -{56,81,-38}, -{56,81,-37}, -{56,81,-36}, -{56,81,-35}, -{56,81,-34}, -{56,81,-33}, -{56,81,-32}, -{56,81,-31}, -{56,81,-30}, -{56,81,-29}, -{56,81,-28}, -{56,81,-27}, -{56,81,-26}, -{56,81,-25}, -{56,81,-24}, -{56,81,-23}, -{56,81,-22}, -{56,81,-21}, -{56,81,-20}, -{56,81,-19}, -{56,81,-18}, -{56,81,-17}, -{56,81,-16}, -{56,81,-15}, -{56,81,-14}, -{56,81,-13}, -{56,81,-12}, -{56,81,-11}, -{56,81,-10}, -{56,81,-9}, -{56,81,-8}, -{56,81,-7}, -{56,81,-6}, -{56,81,-5}, -{56,81,-4}, -{56,81,-3}, -{56,81,-2}, -{56,81,-1}, -{56,81,0}, -{56,81,1}, -{56,81,2}, -{56,81,3}, -{56,81,4}, -{56,81,5}, -{56,81,6}, -{56,81,7}, -{56,82,-68}, -{56,82,-67}, -{56,82,-66}, -{56,82,-65}, -{56,82,-64}, -{56,82,-63}, -{56,82,-62}, -{56,82,-61}, -{56,82,-60}, -{56,82,-59}, -{56,82,-58}, -{56,82,-57}, -{56,82,-56}, -{56,82,-55}, -{56,82,-54}, -{56,82,-53}, -{56,82,-52}, -{56,82,-51}, -{56,82,-50}, -{56,82,-49}, -{56,82,-48}, -{56,82,-47}, -{56,82,-46}, -{56,82,-45}, -{56,82,-44}, -{56,82,-43}, -{56,82,-42}, -{56,82,-41}, -{56,82,-40}, -{56,82,-39}, -{56,82,-38}, -{56,82,-37}, -{56,82,-36}, -{56,82,-35}, -{56,82,-34}, -{56,82,-33}, -{56,82,-32}, -{56,82,-31}, -{56,82,-30}, -{56,82,-29}, -{56,82,-28}, -{56,82,-27}, -{56,82,-26}, -{56,82,-25}, -{56,82,-24}, -{56,82,-23}, -{56,82,-22}, -{56,82,-21}, -{56,82,-20}, -{56,82,-19}, -{56,82,-18}, -{56,82,-17}, -{56,82,-16}, -{56,82,-15}, -{56,82,-14}, -{56,82,-13}, -{56,82,-12}, -{56,82,-11}, -{56,82,-10}, -{56,82,-9}, -{56,82,-8}, -{56,82,-7}, -{56,82,-6}, -{56,82,-5}, -{56,82,-4}, -{56,82,-3}, -{56,82,-2}, -{56,82,-1}, -{56,82,0}, -{56,82,1}, -{56,82,2}, -{56,82,3}, -{56,83,-68}, -{56,83,-67}, -{56,83,-66}, -{56,83,-65}, -{56,83,-64}, -{56,83,-63}, -{56,83,-62}, -{56,83,-61}, -{56,83,-60}, -{56,83,-59}, -{56,83,-58}, -{56,83,-57}, -{56,83,-56}, -{56,83,-55}, -{56,83,-54}, -{56,83,-53}, -{56,83,-52}, -{56,83,-51}, -{56,83,-50}, -{56,83,-49}, -{56,83,-48}, -{56,83,-47}, -{56,83,-46}, -{56,83,-45}, -{56,83,-44}, -{56,83,-43}, -{56,83,-42}, -{56,83,-41}, -{56,83,-40}, -{56,83,-39}, -{56,83,-38}, -{56,83,-37}, -{56,83,-36}, -{56,83,-35}, -{56,83,-34}, -{56,83,-33}, -{56,83,-32}, -{56,83,-31}, -{56,83,-30}, -{56,83,-29}, -{56,83,-28}, -{56,83,-27}, -{56,83,-26}, -{56,83,-25}, -{56,83,-24}, -{56,83,-23}, -{56,83,-22}, -{56,83,-21}, -{56,83,-20}, -{56,83,-19}, -{56,83,-18}, -{56,83,-17}, -{56,83,-16}, -{56,83,-15}, -{56,83,-14}, -{56,83,-13}, -{56,83,-12}, -{56,83,-11}, -{56,83,-10}, -{56,83,-9}, -{56,83,-8}, -{56,83,-7}, -{56,83,-6}, -{56,83,-5}, -{56,83,-4}, -{56,83,-3}, -{56,83,-2}, -{56,83,-1}, -{56,83,0}, -{56,84,-68}, -{56,84,-67}, -{56,84,-66}, -{56,84,-65}, -{56,84,-64}, -{56,84,-63}, -{56,84,-62}, -{56,84,-61}, -{56,84,-60}, -{56,84,-59}, -{56,84,-58}, -{56,84,-57}, -{56,84,-56}, -{56,84,-55}, -{56,84,-54}, -{56,84,-53}, -{56,84,-52}, -{56,84,-51}, -{56,84,-50}, -{56,84,-49}, -{56,84,-48}, -{56,84,-47}, -{56,84,-46}, -{56,84,-45}, -{56,84,-44}, -{56,84,-43}, -{56,84,-42}, -{56,84,-41}, -{56,84,-40}, -{56,84,-39}, -{56,84,-38}, -{56,84,-37}, -{56,84,-36}, -{56,84,-35}, -{56,84,-34}, -{56,84,-33}, -{56,84,-32}, -{56,84,-31}, -{56,84,-30}, -{56,84,-29}, -{56,84,-28}, -{56,84,-27}, -{56,84,-26}, -{56,84,-25}, -{56,84,-24}, -{56,84,-23}, -{56,84,-22}, -{56,84,-21}, -{56,84,-20}, -{56,84,-19}, -{56,84,-18}, -{56,84,-17}, -{56,84,-16}, -{56,84,-15}, -{56,84,-14}, -{56,84,-13}, -{56,84,-12}, -{56,84,-11}, -{56,84,-10}, -{56,84,-9}, -{56,84,-8}, -{56,84,-7}, -{56,84,-6}, -{56,84,-5}, -{56,84,-4}, -{56,85,-68}, -{56,85,-67}, -{56,85,-66}, -{56,85,-65}, -{56,85,-64}, -{56,85,-63}, -{56,85,-62}, -{56,85,-61}, -{56,85,-60}, -{56,85,-59}, -{56,85,-58}, -{56,85,-57}, -{56,85,-56}, -{56,85,-55}, -{56,85,-54}, -{56,85,-53}, -{56,85,-52}, -{56,85,-51}, -{56,85,-50}, -{56,85,-49}, -{56,85,-48}, -{56,85,-47}, -{56,85,-46}, -{56,85,-45}, -{56,85,-44}, -{56,85,-43}, -{56,85,-42}, -{56,85,-41}, -{56,85,-40}, -{56,85,-39}, -{56,85,-38}, -{56,85,-37}, -{56,85,-36}, -{56,85,-35}, -{56,85,-34}, -{56,85,-33}, -{56,85,-32}, -{56,85,-31}, -{56,85,-30}, -{56,85,-29}, -{56,85,-28}, -{56,85,-27}, -{56,85,-26}, -{56,85,-25}, -{56,85,-24}, -{56,85,-23}, -{56,85,-22}, -{56,85,-21}, -{56,85,-20}, -{56,85,-19}, -{56,85,-18}, -{56,85,-17}, -{56,85,-16}, -{56,85,-15}, -{56,85,-14}, -{56,85,-13}, -{56,85,-12}, -{56,85,-11}, -{56,85,-10}, -{56,85,-9}, -{56,85,-8}, -{56,85,-7}, -{56,86,-68}, -{56,86,-67}, -{56,86,-66}, -{56,86,-65}, -{56,86,-64}, -{56,86,-63}, -{56,86,-62}, -{56,86,-61}, -{56,86,-60}, -{56,86,-59}, -{56,86,-58}, -{56,86,-57}, -{56,86,-56}, -{56,86,-55}, -{56,86,-54}, -{56,86,-53}, -{56,86,-52}, -{56,86,-51}, -{56,86,-50}, -{56,86,-49}, -{56,86,-48}, -{56,86,-47}, -{56,86,-46}, -{56,86,-45}, -{56,86,-44}, -{56,86,-43}, -{56,86,-42}, -{56,86,-41}, -{56,86,-40}, -{56,86,-39}, -{56,86,-38}, -{56,86,-37}, -{56,86,-36}, -{56,86,-35}, -{56,86,-34}, -{56,86,-33}, -{56,86,-32}, -{56,86,-31}, -{56,86,-30}, -{56,86,-29}, -{56,86,-28}, -{56,86,-27}, -{56,86,-26}, -{56,86,-25}, -{56,86,-24}, -{56,86,-23}, -{56,86,-22}, -{56,86,-21}, -{56,86,-20}, -{56,86,-19}, -{56,86,-18}, -{56,86,-17}, -{56,86,-16}, -{56,86,-15}, -{56,86,-14}, -{56,86,-13}, -{56,86,-12}, -{56,86,-11}, -{56,87,-68}, -{56,87,-67}, -{56,87,-66}, -{56,87,-65}, -{56,87,-64}, -{56,87,-63}, -{56,87,-62}, -{56,87,-61}, -{56,87,-60}, -{56,87,-59}, -{56,87,-58}, -{56,87,-57}, -{56,87,-56}, -{56,87,-55}, -{56,87,-54}, -{56,87,-53}, -{56,87,-52}, -{56,87,-51}, -{56,87,-50}, -{56,87,-49}, -{56,87,-48}, -{56,87,-47}, -{56,87,-46}, -{56,87,-45}, -{56,87,-44}, -{56,87,-43}, -{56,87,-42}, -{56,87,-41}, -{56,87,-40}, -{56,87,-39}, -{56,87,-38}, -{56,87,-37}, -{56,87,-36}, -{56,87,-35}, -{56,87,-34}, -{56,87,-33}, -{56,87,-32}, -{56,87,-31}, -{56,87,-30}, -{56,87,-29}, -{56,87,-28}, -{56,87,-27}, -{56,87,-26}, -{56,87,-25}, -{56,87,-24}, -{56,87,-23}, -{56,87,-22}, -{56,87,-21}, -{56,87,-20}, -{56,87,-19}, -{56,87,-18}, -{56,87,-17}, -{56,87,-16}, -{56,87,-15}, -{56,87,-14}, -{56,88,-68}, -{56,88,-67}, -{56,88,-66}, -{56,88,-65}, -{56,88,-64}, -{56,88,-63}, -{56,88,-62}, -{56,88,-61}, -{56,88,-60}, -{56,88,-59}, -{56,88,-58}, -{56,88,-57}, -{56,88,-56}, -{56,88,-55}, -{56,88,-54}, -{56,88,-53}, -{56,88,-52}, -{56,88,-51}, -{56,88,-50}, -{56,88,-49}, -{56,88,-48}, -{56,88,-47}, -{56,88,-46}, -{56,88,-45}, -{56,88,-44}, -{56,88,-43}, -{56,88,-42}, -{56,88,-41}, -{56,88,-40}, -{56,88,-39}, -{56,88,-38}, -{56,88,-37}, -{56,88,-36}, -{56,88,-35}, -{56,88,-34}, -{56,88,-33}, -{56,88,-32}, -{56,88,-31}, -{56,88,-30}, -{56,88,-29}, -{56,88,-28}, -{56,88,-27}, -{56,88,-26}, -{56,88,-25}, -{56,88,-24}, -{56,88,-23}, -{56,88,-22}, -{56,88,-21}, -{56,88,-20}, -{56,89,-68}, -{56,89,-67}, -{56,89,-66}, -{56,89,-65}, -{56,89,-64}, -{56,89,-63}, -{56,89,-62}, -{56,89,-61}, -{56,89,-60}, -{56,89,-59}, -{56,89,-58}, -{56,89,-57}, -{56,89,-56}, -{56,89,-55}, -{56,89,-54}, -{56,89,-53}, -{56,89,-52}, -{56,89,-51}, -{56,89,-50}, -{56,89,-49}, -{56,89,-48}, -{56,89,-47}, -{56,89,-46}, -{56,89,-45}, -{56,89,-44}, -{56,89,-43}, -{56,89,-42}, -{56,89,-41}, -{56,89,-40}, -{56,89,-39}, -{56,89,-38}, -{56,89,-37}, -{56,89,-36}, -{56,89,-35}, -{56,89,-34}, -{56,89,-33}, -{56,89,-32}, -{56,89,-31}, -{56,89,-30}, -{56,89,-29}, -{56,90,-68}, -{56,90,-67}, -{56,90,-66}, -{56,90,-65}, -{56,90,-64}, -{56,90,-63}, -{56,90,-62}, -{56,90,-61}, -{56,90,-60}, -{56,90,-59}, -{56,90,-58}, -{56,90,-57}, -{56,90,-56}, -{56,90,-55}, -{56,90,-54}, -{56,90,-53}, -{56,90,-52}, -{56,90,-51}, -{56,90,-50}, -{56,90,-49}, -{56,90,-48}, -{56,90,-47}, -{56,90,-46}, -{56,90,-45}, -{56,90,-44}, -{56,90,-43}, -{56,90,-42}, -{56,90,-41}, -{56,90,-40}, -{56,90,-39}, -{56,90,-38}, -{56,91,-68}, -{56,91,-67}, -{56,91,-66}, -{56,91,-65}, -{56,91,-64}, -{56,91,-63}, -{56,91,-62}, -{56,91,-61}, -{56,91,-60}, -{56,91,-59}, -{56,91,-58}, -{56,91,-57}, -{56,91,-56}, -{56,91,-55}, -{56,91,-54}, -{56,91,-53}, -{56,91,-52}, -{56,91,-51}, -{56,91,-50}, -{56,91,-49}, -{56,91,-48}, -{56,91,-47}, -{56,91,-46}, -{56,91,-45}, -{56,92,-68}, -{56,92,-67}, -{56,92,-66}, -{56,92,-65}, -{56,92,-64}, -{56,92,-63}, -{56,92,-62}, -{56,92,-61}, -{56,92,-60}, -{56,92,-59}, -{56,92,-58}, -{56,92,-57}, -{56,92,-56}, -{56,92,-55}, -{56,92,-54}, -{56,92,-53}, -{56,92,-52}, -{56,93,-68}, -{56,93,-67}, -{56,93,-66}, -{56,93,-65}, -{56,93,-64}, -{56,93,-63}, -{56,93,-62}, -{56,93,-61}, -{56,93,-60}, -{56,93,-59}, -{56,94,-68}, -{56,94,-67}, -{56,94,-66}, -{56,94,-65}, -{57,-60,55}, -{57,-60,56}, -{57,-60,57}, -{57,-60,58}, -{57,-59,51}, -{57,-59,52}, -{57,-59,53}, -{57,-59,54}, -{57,-59,55}, -{57,-59,56}, -{57,-59,57}, -{57,-59,58}, -{57,-58,47}, -{57,-58,48}, -{57,-58,49}, -{57,-58,50}, -{57,-58,51}, -{57,-58,52}, -{57,-58,53}, -{57,-58,54}, -{57,-58,55}, -{57,-58,56}, -{57,-58,57}, -{57,-58,58}, -{57,-57,43}, -{57,-57,44}, -{57,-57,45}, -{57,-57,46}, -{57,-57,47}, -{57,-57,48}, -{57,-57,49}, -{57,-57,50}, -{57,-57,51}, -{57,-57,52}, -{57,-57,53}, -{57,-57,54}, -{57,-57,55}, -{57,-57,56}, -{57,-57,57}, -{57,-57,58}, -{57,-56,40}, -{57,-56,41}, -{57,-56,42}, -{57,-56,43}, -{57,-56,44}, -{57,-56,45}, -{57,-56,46}, -{57,-56,47}, -{57,-56,48}, -{57,-56,49}, -{57,-56,50}, -{57,-56,51}, -{57,-56,52}, -{57,-56,53}, -{57,-56,54}, -{57,-56,55}, -{57,-56,56}, -{57,-56,57}, -{57,-56,58}, -{57,-55,37}, -{57,-55,38}, -{57,-55,39}, -{57,-55,40}, -{57,-55,41}, -{57,-55,42}, -{57,-55,43}, -{57,-55,44}, -{57,-55,45}, -{57,-55,46}, -{57,-55,47}, -{57,-55,48}, -{57,-55,49}, -{57,-55,50}, -{57,-55,51}, -{57,-55,52}, -{57,-55,53}, -{57,-55,54}, -{57,-55,55}, -{57,-55,56}, -{57,-55,57}, -{57,-55,58}, -{57,-54,34}, -{57,-54,35}, -{57,-54,36}, -{57,-54,37}, -{57,-54,38}, -{57,-54,39}, -{57,-54,40}, -{57,-54,41}, -{57,-54,42}, -{57,-54,43}, -{57,-54,44}, -{57,-54,45}, -{57,-54,46}, -{57,-54,47}, -{57,-54,48}, -{57,-54,49}, -{57,-54,50}, -{57,-54,51}, -{57,-54,52}, -{57,-54,53}, -{57,-54,54}, -{57,-54,55}, -{57,-54,56}, -{57,-54,57}, -{57,-54,58}, -{57,-53,31}, -{57,-53,32}, -{57,-53,33}, -{57,-53,34}, -{57,-53,35}, -{57,-53,36}, -{57,-53,37}, -{57,-53,38}, -{57,-53,39}, -{57,-53,40}, -{57,-53,41}, -{57,-53,42}, -{57,-53,43}, -{57,-53,44}, -{57,-53,45}, -{57,-53,46}, -{57,-53,47}, -{57,-53,48}, -{57,-53,49}, -{57,-53,50}, -{57,-53,51}, -{57,-53,52}, -{57,-53,53}, -{57,-53,54}, -{57,-53,55}, -{57,-53,56}, -{57,-53,57}, -{57,-53,58}, -{57,-53,59}, -{57,-52,28}, -{57,-52,29}, -{57,-52,30}, -{57,-52,31}, -{57,-52,32}, -{57,-52,33}, -{57,-52,34}, -{57,-52,35}, -{57,-52,36}, -{57,-52,37}, -{57,-52,38}, -{57,-52,39}, -{57,-52,40}, -{57,-52,41}, -{57,-52,42}, -{57,-52,43}, -{57,-52,44}, -{57,-52,45}, -{57,-52,46}, -{57,-52,47}, -{57,-52,48}, -{57,-52,49}, -{57,-52,50}, -{57,-52,51}, -{57,-52,52}, -{57,-52,53}, -{57,-52,54}, -{57,-52,55}, -{57,-52,56}, -{57,-52,57}, -{57,-52,58}, -{57,-52,59}, -{57,-51,26}, -{57,-51,27}, -{57,-51,28}, -{57,-51,29}, -{57,-51,30}, -{57,-51,31}, -{57,-51,32}, -{57,-51,33}, -{57,-51,34}, -{57,-51,35}, -{57,-51,36}, -{57,-51,37}, -{57,-51,38}, -{57,-51,39}, -{57,-51,40}, -{57,-51,41}, -{57,-51,42}, -{57,-51,43}, -{57,-51,44}, -{57,-51,45}, -{57,-51,46}, -{57,-51,47}, -{57,-51,48}, -{57,-51,49}, -{57,-51,50}, -{57,-51,51}, -{57,-51,52}, -{57,-51,53}, -{57,-51,54}, -{57,-51,55}, -{57,-51,56}, -{57,-51,57}, -{57,-51,58}, -{57,-51,59}, -{57,-50,23}, -{57,-50,24}, -{57,-50,25}, -{57,-50,26}, -{57,-50,27}, -{57,-50,28}, -{57,-50,29}, -{57,-50,30}, -{57,-50,31}, -{57,-50,32}, -{57,-50,33}, -{57,-50,34}, -{57,-50,35}, -{57,-50,36}, -{57,-50,37}, -{57,-50,38}, -{57,-50,39}, -{57,-50,40}, -{57,-50,41}, -{57,-50,42}, -{57,-50,43}, -{57,-50,44}, -{57,-50,45}, -{57,-50,46}, -{57,-50,47}, -{57,-50,48}, -{57,-50,49}, -{57,-50,50}, -{57,-50,51}, -{57,-50,52}, -{57,-50,53}, -{57,-50,54}, -{57,-50,55}, -{57,-50,56}, -{57,-50,57}, -{57,-50,58}, -{57,-50,59}, -{57,-49,21}, -{57,-49,22}, -{57,-49,23}, -{57,-49,24}, -{57,-49,25}, -{57,-49,26}, -{57,-49,27}, -{57,-49,28}, -{57,-49,29}, -{57,-49,30}, -{57,-49,31}, -{57,-49,32}, -{57,-49,33}, -{57,-49,34}, -{57,-49,35}, -{57,-49,36}, -{57,-49,37}, -{57,-49,38}, -{57,-49,39}, -{57,-49,40}, -{57,-49,41}, -{57,-49,42}, -{57,-49,43}, -{57,-49,44}, -{57,-49,45}, -{57,-49,46}, -{57,-49,47}, -{57,-49,48}, -{57,-49,49}, -{57,-49,50}, -{57,-49,51}, -{57,-49,52}, -{57,-49,53}, -{57,-49,54}, -{57,-49,55}, -{57,-49,56}, -{57,-49,57}, -{57,-49,58}, -{57,-49,59}, -{57,-48,19}, -{57,-48,20}, -{57,-48,21}, -{57,-48,22}, -{57,-48,23}, -{57,-48,24}, -{57,-48,25}, -{57,-48,26}, -{57,-48,27}, -{57,-48,28}, -{57,-48,29}, -{57,-48,30}, -{57,-48,31}, -{57,-48,32}, -{57,-48,33}, -{57,-48,34}, -{57,-48,35}, -{57,-48,36}, -{57,-48,37}, -{57,-48,38}, -{57,-48,39}, -{57,-48,40}, -{57,-48,41}, -{57,-48,42}, -{57,-48,43}, -{57,-48,44}, -{57,-48,45}, -{57,-48,46}, -{57,-48,47}, -{57,-48,48}, -{57,-48,49}, -{57,-48,50}, -{57,-48,51}, -{57,-48,52}, -{57,-48,53}, -{57,-48,54}, -{57,-48,55}, -{57,-48,56}, -{57,-48,57}, -{57,-48,58}, -{57,-48,59}, -{57,-47,16}, -{57,-47,17}, -{57,-47,18}, -{57,-47,19}, -{57,-47,20}, -{57,-47,21}, -{57,-47,22}, -{57,-47,23}, -{57,-47,24}, -{57,-47,25}, -{57,-47,26}, -{57,-47,27}, -{57,-47,28}, -{57,-47,29}, -{57,-47,30}, -{57,-47,31}, -{57,-47,32}, -{57,-47,33}, -{57,-47,34}, -{57,-47,35}, -{57,-47,36}, -{57,-47,37}, -{57,-47,38}, -{57,-47,39}, -{57,-47,40}, -{57,-47,41}, -{57,-47,42}, -{57,-47,43}, -{57,-47,44}, -{57,-47,45}, -{57,-47,46}, -{57,-47,47}, -{57,-47,48}, -{57,-47,49}, -{57,-47,50}, -{57,-47,51}, -{57,-47,52}, -{57,-47,53}, -{57,-47,54}, -{57,-47,55}, -{57,-47,56}, -{57,-47,57}, -{57,-47,58}, -{57,-47,59}, -{57,-46,14}, -{57,-46,15}, -{57,-46,16}, -{57,-46,17}, -{57,-46,18}, -{57,-46,19}, -{57,-46,20}, -{57,-46,21}, -{57,-46,22}, -{57,-46,23}, -{57,-46,24}, -{57,-46,25}, -{57,-46,26}, -{57,-46,27}, -{57,-46,28}, -{57,-46,29}, -{57,-46,30}, -{57,-46,31}, -{57,-46,32}, -{57,-46,33}, -{57,-46,34}, -{57,-46,35}, -{57,-46,36}, -{57,-46,37}, -{57,-46,38}, -{57,-46,39}, -{57,-46,40}, -{57,-46,41}, -{57,-46,42}, -{57,-46,43}, -{57,-46,44}, -{57,-46,45}, -{57,-46,46}, -{57,-46,47}, -{57,-46,48}, -{57,-46,49}, -{57,-46,50}, -{57,-46,51}, -{57,-46,52}, -{57,-46,53}, -{57,-46,54}, -{57,-46,55}, -{57,-46,56}, -{57,-46,57}, -{57,-46,58}, -{57,-46,59}, -{57,-45,12}, -{57,-45,13}, -{57,-45,14}, -{57,-45,15}, -{57,-45,16}, -{57,-45,17}, -{57,-45,18}, -{57,-45,19}, -{57,-45,20}, -{57,-45,21}, -{57,-45,22}, -{57,-45,23}, -{57,-45,24}, -{57,-45,25}, -{57,-45,26}, -{57,-45,27}, -{57,-45,28}, -{57,-45,29}, -{57,-45,30}, -{57,-45,31}, -{57,-45,32}, -{57,-45,33}, -{57,-45,34}, -{57,-45,35}, -{57,-45,36}, -{57,-45,37}, -{57,-45,38}, -{57,-45,39}, -{57,-45,40}, -{57,-45,41}, -{57,-45,42}, -{57,-45,43}, -{57,-45,44}, -{57,-45,45}, -{57,-45,46}, -{57,-45,47}, -{57,-45,48}, -{57,-45,49}, -{57,-45,50}, -{57,-45,51}, -{57,-45,52}, -{57,-45,53}, -{57,-45,54}, -{57,-45,55}, -{57,-45,56}, -{57,-45,57}, -{57,-45,58}, -{57,-45,59}, -{57,-44,10}, -{57,-44,11}, -{57,-44,12}, -{57,-44,13}, -{57,-44,14}, -{57,-44,15}, -{57,-44,16}, -{57,-44,17}, -{57,-44,18}, -{57,-44,19}, -{57,-44,20}, -{57,-44,21}, -{57,-44,22}, -{57,-44,23}, -{57,-44,24}, -{57,-44,25}, -{57,-44,26}, -{57,-44,27}, -{57,-44,28}, -{57,-44,29}, -{57,-44,30}, -{57,-44,31}, -{57,-44,32}, -{57,-44,33}, -{57,-44,34}, -{57,-44,35}, -{57,-44,36}, -{57,-44,37}, -{57,-44,38}, -{57,-44,39}, -{57,-44,40}, -{57,-44,41}, -{57,-44,42}, -{57,-44,43}, -{57,-44,44}, -{57,-44,45}, -{57,-44,46}, -{57,-44,47}, -{57,-44,48}, -{57,-44,49}, -{57,-44,50}, -{57,-44,51}, -{57,-44,52}, -{57,-44,53}, -{57,-44,54}, -{57,-44,55}, -{57,-44,56}, -{57,-44,57}, -{57,-44,58}, -{57,-44,59}, -{57,-43,8}, -{57,-43,9}, -{57,-43,10}, -{57,-43,11}, -{57,-43,12}, -{57,-43,13}, -{57,-43,14}, -{57,-43,15}, -{57,-43,16}, -{57,-43,17}, -{57,-43,18}, -{57,-43,19}, -{57,-43,20}, -{57,-43,21}, -{57,-43,22}, -{57,-43,23}, -{57,-43,24}, -{57,-43,25}, -{57,-43,26}, -{57,-43,27}, -{57,-43,28}, -{57,-43,29}, -{57,-43,30}, -{57,-43,31}, -{57,-43,32}, -{57,-43,33}, -{57,-43,34}, -{57,-43,35}, -{57,-43,36}, -{57,-43,37}, -{57,-43,38}, -{57,-43,39}, -{57,-43,40}, -{57,-43,41}, -{57,-43,42}, -{57,-43,43}, -{57,-43,44}, -{57,-43,45}, -{57,-43,46}, -{57,-43,47}, -{57,-43,48}, -{57,-43,49}, -{57,-43,50}, -{57,-43,51}, -{57,-43,52}, -{57,-43,53}, -{57,-43,54}, -{57,-43,55}, -{57,-43,56}, -{57,-43,57}, -{57,-43,58}, -{57,-43,59}, -{57,-42,6}, -{57,-42,7}, -{57,-42,8}, -{57,-42,9}, -{57,-42,10}, -{57,-42,11}, -{57,-42,12}, -{57,-42,13}, -{57,-42,14}, -{57,-42,15}, -{57,-42,16}, -{57,-42,17}, -{57,-42,18}, -{57,-42,19}, -{57,-42,20}, -{57,-42,21}, -{57,-42,22}, -{57,-42,23}, -{57,-42,24}, -{57,-42,25}, -{57,-42,26}, -{57,-42,27}, -{57,-42,28}, -{57,-42,29}, -{57,-42,30}, -{57,-42,31}, -{57,-42,32}, -{57,-42,33}, -{57,-42,34}, -{57,-42,35}, -{57,-42,36}, -{57,-42,37}, -{57,-42,38}, -{57,-42,39}, -{57,-42,40}, -{57,-42,41}, -{57,-42,42}, -{57,-42,43}, -{57,-42,44}, -{57,-42,45}, -{57,-42,46}, -{57,-42,47}, -{57,-42,48}, -{57,-42,49}, -{57,-42,50}, -{57,-42,51}, -{57,-42,52}, -{57,-42,53}, -{57,-42,54}, -{57,-42,55}, -{57,-42,56}, -{57,-42,57}, -{57,-42,58}, -{57,-42,59}, -{57,-41,4}, -{57,-41,5}, -{57,-41,6}, -{57,-41,7}, -{57,-41,8}, -{57,-41,9}, -{57,-41,10}, -{57,-41,11}, -{57,-41,12}, -{57,-41,13}, -{57,-41,14}, -{57,-41,15}, -{57,-41,16}, -{57,-41,17}, -{57,-41,18}, -{57,-41,19}, -{57,-41,20}, -{57,-41,21}, -{57,-41,22}, -{57,-41,23}, -{57,-41,24}, -{57,-41,25}, -{57,-41,26}, -{57,-41,27}, -{57,-41,28}, -{57,-41,29}, -{57,-41,30}, -{57,-41,31}, -{57,-41,32}, -{57,-41,33}, -{57,-41,34}, -{57,-41,35}, -{57,-41,36}, -{57,-41,37}, -{57,-41,38}, -{57,-41,39}, -{57,-41,40}, -{57,-41,41}, -{57,-41,42}, -{57,-41,43}, -{57,-41,44}, -{57,-41,45}, -{57,-41,46}, -{57,-41,47}, -{57,-41,48}, -{57,-41,49}, -{57,-41,50}, -{57,-41,51}, -{57,-41,52}, -{57,-41,53}, -{57,-41,54}, -{57,-41,55}, -{57,-41,56}, -{57,-41,57}, -{57,-41,58}, -{57,-41,59}, -{57,-40,3}, -{57,-40,4}, -{57,-40,5}, -{57,-40,6}, -{57,-40,7}, -{57,-40,8}, -{57,-40,9}, -{57,-40,10}, -{57,-40,11}, -{57,-40,12}, -{57,-40,13}, -{57,-40,14}, -{57,-40,15}, -{57,-40,16}, -{57,-40,17}, -{57,-40,18}, -{57,-40,19}, -{57,-40,20}, -{57,-40,21}, -{57,-40,22}, -{57,-40,23}, -{57,-40,24}, -{57,-40,25}, -{57,-40,26}, -{57,-40,27}, -{57,-40,28}, -{57,-40,29}, -{57,-40,30}, -{57,-40,31}, -{57,-40,32}, -{57,-40,33}, -{57,-40,34}, -{57,-40,35}, -{57,-40,36}, -{57,-40,37}, -{57,-40,38}, -{57,-40,39}, -{57,-40,40}, -{57,-40,41}, -{57,-40,42}, -{57,-40,43}, -{57,-40,44}, -{57,-40,45}, -{57,-40,46}, -{57,-40,47}, -{57,-40,48}, -{57,-40,49}, -{57,-40,50}, -{57,-40,51}, -{57,-40,52}, -{57,-40,53}, -{57,-40,54}, -{57,-40,55}, -{57,-40,56}, -{57,-40,57}, -{57,-40,58}, -{57,-40,59}, -{57,-39,1}, -{57,-39,2}, -{57,-39,3}, -{57,-39,4}, -{57,-39,5}, -{57,-39,6}, -{57,-39,7}, -{57,-39,8}, -{57,-39,9}, -{57,-39,10}, -{57,-39,11}, -{57,-39,12}, -{57,-39,13}, -{57,-39,14}, -{57,-39,15}, -{57,-39,16}, -{57,-39,17}, -{57,-39,18}, -{57,-39,19}, -{57,-39,20}, -{57,-39,21}, -{57,-39,22}, -{57,-39,23}, -{57,-39,24}, -{57,-39,25}, -{57,-39,26}, -{57,-39,27}, -{57,-39,28}, -{57,-39,29}, -{57,-39,30}, -{57,-39,31}, -{57,-39,32}, -{57,-39,33}, -{57,-39,34}, -{57,-39,35}, -{57,-39,36}, -{57,-39,37}, -{57,-39,38}, -{57,-39,39}, -{57,-39,40}, -{57,-39,41}, -{57,-39,42}, -{57,-39,43}, -{57,-39,44}, -{57,-39,45}, -{57,-39,46}, -{57,-39,47}, -{57,-39,48}, -{57,-39,49}, -{57,-39,50}, -{57,-39,51}, -{57,-39,52}, -{57,-39,53}, -{57,-39,54}, -{57,-39,55}, -{57,-39,56}, -{57,-39,57}, -{57,-39,58}, -{57,-39,59}, -{57,-38,-1}, -{57,-38,0}, -{57,-38,1}, -{57,-38,2}, -{57,-38,3}, -{57,-38,4}, -{57,-38,5}, -{57,-38,6}, -{57,-38,7}, -{57,-38,8}, -{57,-38,9}, -{57,-38,10}, -{57,-38,11}, -{57,-38,12}, -{57,-38,13}, -{57,-38,14}, -{57,-38,15}, -{57,-38,16}, -{57,-38,17}, -{57,-38,18}, -{57,-38,19}, -{57,-38,20}, -{57,-38,21}, -{57,-38,22}, -{57,-38,23}, -{57,-38,24}, -{57,-38,25}, -{57,-38,26}, -{57,-38,27}, -{57,-38,28}, -{57,-38,29}, -{57,-38,30}, -{57,-38,31}, -{57,-38,32}, -{57,-38,33}, -{57,-38,34}, -{57,-38,35}, -{57,-38,36}, -{57,-38,37}, -{57,-38,38}, -{57,-38,39}, -{57,-38,40}, -{57,-38,41}, -{57,-38,42}, -{57,-38,43}, -{57,-38,44}, -{57,-38,45}, -{57,-38,46}, -{57,-38,47}, -{57,-38,48}, -{57,-38,49}, -{57,-38,50}, -{57,-38,51}, -{57,-38,52}, -{57,-38,53}, -{57,-38,54}, -{57,-38,55}, -{57,-38,56}, -{57,-38,57}, -{57,-38,58}, -{57,-38,59}, -{57,-37,-3}, -{57,-37,-2}, -{57,-37,-1}, -{57,-37,0}, -{57,-37,1}, -{57,-37,2}, -{57,-37,3}, -{57,-37,4}, -{57,-37,5}, -{57,-37,6}, -{57,-37,7}, -{57,-37,8}, -{57,-37,9}, -{57,-37,10}, -{57,-37,11}, -{57,-37,12}, -{57,-37,13}, -{57,-37,14}, -{57,-37,15}, -{57,-37,16}, -{57,-37,17}, -{57,-37,18}, -{57,-37,19}, -{57,-37,20}, -{57,-37,21}, -{57,-37,22}, -{57,-37,23}, -{57,-37,24}, -{57,-37,25}, -{57,-37,26}, -{57,-37,27}, -{57,-37,28}, -{57,-37,29}, -{57,-37,30}, -{57,-37,31}, -{57,-37,32}, -{57,-37,33}, -{57,-37,34}, -{57,-37,35}, -{57,-37,36}, -{57,-37,37}, -{57,-37,38}, -{57,-37,39}, -{57,-37,40}, -{57,-37,41}, -{57,-37,42}, -{57,-37,43}, -{57,-37,44}, -{57,-37,45}, -{57,-37,46}, -{57,-37,47}, -{57,-37,48}, -{57,-37,49}, -{57,-37,50}, -{57,-37,51}, -{57,-37,52}, -{57,-37,53}, -{57,-37,54}, -{57,-37,55}, -{57,-37,56}, -{57,-37,57}, -{57,-37,58}, -{57,-37,59}, -{57,-36,-4}, -{57,-36,-3}, -{57,-36,-2}, -{57,-36,-1}, -{57,-36,0}, -{57,-36,1}, -{57,-36,2}, -{57,-36,3}, -{57,-36,4}, -{57,-36,5}, -{57,-36,6}, -{57,-36,7}, -{57,-36,8}, -{57,-36,9}, -{57,-36,10}, -{57,-36,11}, -{57,-36,12}, -{57,-36,13}, -{57,-36,14}, -{57,-36,15}, -{57,-36,16}, -{57,-36,17}, -{57,-36,18}, -{57,-36,19}, -{57,-36,20}, -{57,-36,21}, -{57,-36,22}, -{57,-36,23}, -{57,-36,24}, -{57,-36,25}, -{57,-36,26}, -{57,-36,27}, -{57,-36,28}, -{57,-36,29}, -{57,-36,30}, -{57,-36,31}, -{57,-36,32}, -{57,-36,33}, -{57,-36,34}, -{57,-36,35}, -{57,-36,36}, -{57,-36,37}, -{57,-36,38}, -{57,-36,39}, -{57,-36,40}, -{57,-36,41}, -{57,-36,42}, -{57,-36,43}, -{57,-36,44}, -{57,-36,45}, -{57,-36,46}, -{57,-36,47}, -{57,-36,48}, -{57,-36,49}, -{57,-36,50}, -{57,-36,51}, -{57,-36,52}, -{57,-36,53}, -{57,-36,54}, -{57,-36,55}, -{57,-36,56}, -{57,-36,57}, -{57,-36,58}, -{57,-36,59}, -{57,-35,-6}, -{57,-35,-5}, -{57,-35,-4}, -{57,-35,-3}, -{57,-35,-2}, -{57,-35,-1}, -{57,-35,0}, -{57,-35,1}, -{57,-35,2}, -{57,-35,3}, -{57,-35,4}, -{57,-35,5}, -{57,-35,6}, -{57,-35,7}, -{57,-35,8}, -{57,-35,9}, -{57,-35,10}, -{57,-35,11}, -{57,-35,12}, -{57,-35,13}, -{57,-35,14}, -{57,-35,15}, -{57,-35,16}, -{57,-35,17}, -{57,-35,18}, -{57,-35,19}, -{57,-35,20}, -{57,-35,21}, -{57,-35,22}, -{57,-35,23}, -{57,-35,24}, -{57,-35,25}, -{57,-35,26}, -{57,-35,27}, -{57,-35,28}, -{57,-35,29}, -{57,-35,30}, -{57,-35,31}, -{57,-35,32}, -{57,-35,33}, -{57,-35,34}, -{57,-35,35}, -{57,-35,36}, -{57,-35,37}, -{57,-35,38}, -{57,-35,39}, -{57,-35,40}, -{57,-35,41}, -{57,-35,42}, -{57,-35,43}, -{57,-35,44}, -{57,-35,45}, -{57,-35,46}, -{57,-35,47}, -{57,-35,48}, -{57,-35,49}, -{57,-35,50}, -{57,-35,51}, -{57,-35,52}, -{57,-35,53}, -{57,-35,54}, -{57,-35,55}, -{57,-35,56}, -{57,-35,57}, -{57,-35,58}, -{57,-35,59}, -{57,-34,-7}, -{57,-34,-6}, -{57,-34,-5}, -{57,-34,-4}, -{57,-34,-3}, -{57,-34,-2}, -{57,-34,-1}, -{57,-34,0}, -{57,-34,1}, -{57,-34,2}, -{57,-34,3}, -{57,-34,4}, -{57,-34,5}, -{57,-34,6}, -{57,-34,7}, -{57,-34,8}, -{57,-34,9}, -{57,-34,10}, -{57,-34,11}, -{57,-34,12}, -{57,-34,13}, -{57,-34,14}, -{57,-34,15}, -{57,-34,16}, -{57,-34,17}, -{57,-34,18}, -{57,-34,19}, -{57,-34,20}, -{57,-34,21}, -{57,-34,22}, -{57,-34,23}, -{57,-34,24}, -{57,-34,25}, -{57,-34,26}, -{57,-34,27}, -{57,-34,28}, -{57,-34,29}, -{57,-34,30}, -{57,-34,31}, -{57,-34,32}, -{57,-34,33}, -{57,-34,34}, -{57,-34,35}, -{57,-34,36}, -{57,-34,37}, -{57,-34,38}, -{57,-34,39}, -{57,-34,40}, -{57,-34,41}, -{57,-34,42}, -{57,-34,43}, -{57,-34,44}, -{57,-34,45}, -{57,-34,46}, -{57,-34,47}, -{57,-34,48}, -{57,-34,49}, -{57,-34,50}, -{57,-34,51}, -{57,-34,52}, -{57,-34,53}, -{57,-34,54}, -{57,-34,55}, -{57,-34,56}, -{57,-34,57}, -{57,-34,58}, -{57,-34,59}, -{57,-33,-9}, -{57,-33,-8}, -{57,-33,-7}, -{57,-33,-6}, -{57,-33,-5}, -{57,-33,-4}, -{57,-33,-3}, -{57,-33,-2}, -{57,-33,-1}, -{57,-33,0}, -{57,-33,1}, -{57,-33,2}, -{57,-33,3}, -{57,-33,4}, -{57,-33,5}, -{57,-33,6}, -{57,-33,7}, -{57,-33,8}, -{57,-33,9}, -{57,-33,10}, -{57,-33,11}, -{57,-33,12}, -{57,-33,13}, -{57,-33,14}, -{57,-33,15}, -{57,-33,16}, -{57,-33,17}, -{57,-33,18}, -{57,-33,19}, -{57,-33,20}, -{57,-33,21}, -{57,-33,22}, -{57,-33,23}, -{57,-33,24}, -{57,-33,25}, -{57,-33,26}, -{57,-33,27}, -{57,-33,28}, -{57,-33,29}, -{57,-33,30}, -{57,-33,31}, -{57,-33,32}, -{57,-33,33}, -{57,-33,34}, -{57,-33,35}, -{57,-33,36}, -{57,-33,37}, -{57,-33,38}, -{57,-33,39}, -{57,-33,40}, -{57,-33,41}, -{57,-33,42}, -{57,-33,43}, -{57,-33,44}, -{57,-33,45}, -{57,-33,46}, -{57,-33,47}, -{57,-33,48}, -{57,-33,49}, -{57,-33,50}, -{57,-33,51}, -{57,-33,52}, -{57,-33,53}, -{57,-33,54}, -{57,-33,55}, -{57,-33,56}, -{57,-33,57}, -{57,-33,58}, -{57,-33,59}, -{57,-33,60}, -{57,-32,-11}, -{57,-32,-10}, -{57,-32,-9}, -{57,-32,-8}, -{57,-32,-7}, -{57,-32,-6}, -{57,-32,-5}, -{57,-32,-4}, -{57,-32,-3}, -{57,-32,-2}, -{57,-32,-1}, -{57,-32,0}, -{57,-32,1}, -{57,-32,2}, -{57,-32,3}, -{57,-32,4}, -{57,-32,5}, -{57,-32,6}, -{57,-32,7}, -{57,-32,8}, -{57,-32,9}, -{57,-32,10}, -{57,-32,11}, -{57,-32,12}, -{57,-32,13}, -{57,-32,14}, -{57,-32,15}, -{57,-32,16}, -{57,-32,17}, -{57,-32,18}, -{57,-32,19}, -{57,-32,20}, -{57,-32,21}, -{57,-32,22}, -{57,-32,23}, -{57,-32,24}, -{57,-32,25}, -{57,-32,26}, -{57,-32,27}, -{57,-32,28}, -{57,-32,29}, -{57,-32,30}, -{57,-32,31}, -{57,-32,32}, -{57,-32,33}, -{57,-32,34}, -{57,-32,35}, -{57,-32,36}, -{57,-32,37}, -{57,-32,38}, -{57,-32,39}, -{57,-32,40}, -{57,-32,41}, -{57,-32,42}, -{57,-32,43}, -{57,-32,44}, -{57,-32,45}, -{57,-32,46}, -{57,-32,47}, -{57,-32,48}, -{57,-32,49}, -{57,-32,50}, -{57,-32,51}, -{57,-32,52}, -{57,-32,53}, -{57,-32,54}, -{57,-32,55}, -{57,-32,56}, -{57,-32,57}, -{57,-32,58}, -{57,-32,59}, -{57,-32,60}, -{57,-31,-12}, -{57,-31,-11}, -{57,-31,-10}, -{57,-31,-9}, -{57,-31,-8}, -{57,-31,-7}, -{57,-31,-6}, -{57,-31,-5}, -{57,-31,-4}, -{57,-31,-3}, -{57,-31,-2}, -{57,-31,-1}, -{57,-31,0}, -{57,-31,1}, -{57,-31,2}, -{57,-31,3}, -{57,-31,4}, -{57,-31,5}, -{57,-31,6}, -{57,-31,7}, -{57,-31,8}, -{57,-31,9}, -{57,-31,10}, -{57,-31,11}, -{57,-31,12}, -{57,-31,13}, -{57,-31,14}, -{57,-31,15}, -{57,-31,16}, -{57,-31,17}, -{57,-31,18}, -{57,-31,19}, -{57,-31,20}, -{57,-31,21}, -{57,-31,22}, -{57,-31,23}, -{57,-31,24}, -{57,-31,25}, -{57,-31,26}, -{57,-31,27}, -{57,-31,28}, -{57,-31,29}, -{57,-31,30}, -{57,-31,31}, -{57,-31,32}, -{57,-31,33}, -{57,-31,34}, -{57,-31,35}, -{57,-31,36}, -{57,-31,37}, -{57,-31,38}, -{57,-31,39}, -{57,-31,40}, -{57,-31,41}, -{57,-31,42}, -{57,-31,43}, -{57,-31,44}, -{57,-31,45}, -{57,-31,46}, -{57,-31,47}, -{57,-31,48}, -{57,-31,49}, -{57,-31,50}, -{57,-31,51}, -{57,-31,52}, -{57,-31,53}, -{57,-31,54}, -{57,-31,55}, -{57,-31,56}, -{57,-31,57}, -{57,-31,58}, -{57,-31,59}, -{57,-31,60}, -{57,-30,-14}, -{57,-30,-13}, -{57,-30,-12}, -{57,-30,-11}, -{57,-30,-10}, -{57,-30,-9}, -{57,-30,-8}, -{57,-30,-7}, -{57,-30,-6}, -{57,-30,-5}, -{57,-30,-4}, -{57,-30,-3}, -{57,-30,-2}, -{57,-30,-1}, -{57,-30,0}, -{57,-30,1}, -{57,-30,2}, -{57,-30,3}, -{57,-30,4}, -{57,-30,5}, -{57,-30,6}, -{57,-30,7}, -{57,-30,8}, -{57,-30,9}, -{57,-30,10}, -{57,-30,11}, -{57,-30,12}, -{57,-30,13}, -{57,-30,14}, -{57,-30,15}, -{57,-30,16}, -{57,-30,17}, -{57,-30,18}, -{57,-30,19}, -{57,-30,20}, -{57,-30,21}, -{57,-30,22}, -{57,-30,23}, -{57,-30,24}, -{57,-30,25}, -{57,-30,26}, -{57,-30,27}, -{57,-30,28}, -{57,-30,29}, -{57,-30,30}, -{57,-30,31}, -{57,-30,32}, -{57,-30,33}, -{57,-30,34}, -{57,-30,35}, -{57,-30,36}, -{57,-30,37}, -{57,-30,38}, -{57,-30,39}, -{57,-30,40}, -{57,-30,41}, -{57,-30,42}, -{57,-30,43}, -{57,-30,44}, -{57,-30,45}, -{57,-30,46}, -{57,-30,47}, -{57,-30,48}, -{57,-30,49}, -{57,-30,50}, -{57,-30,51}, -{57,-30,52}, -{57,-30,53}, -{57,-30,54}, -{57,-30,55}, -{57,-30,56}, -{57,-30,57}, -{57,-30,58}, -{57,-30,59}, -{57,-30,60}, -{57,-29,-15}, -{57,-29,-14}, -{57,-29,-13}, -{57,-29,-12}, -{57,-29,-11}, -{57,-29,-10}, -{57,-29,-9}, -{57,-29,-8}, -{57,-29,-7}, -{57,-29,-6}, -{57,-29,-5}, -{57,-29,-4}, -{57,-29,-3}, -{57,-29,-2}, -{57,-29,-1}, -{57,-29,0}, -{57,-29,1}, -{57,-29,2}, -{57,-29,3}, -{57,-29,4}, -{57,-29,5}, -{57,-29,6}, -{57,-29,7}, -{57,-29,8}, -{57,-29,9}, -{57,-29,10}, -{57,-29,11}, -{57,-29,12}, -{57,-29,13}, -{57,-29,14}, -{57,-29,15}, -{57,-29,16}, -{57,-29,17}, -{57,-29,18}, -{57,-29,19}, -{57,-29,20}, -{57,-29,21}, -{57,-29,22}, -{57,-29,23}, -{57,-29,24}, -{57,-29,25}, -{57,-29,26}, -{57,-29,27}, -{57,-29,28}, -{57,-29,29}, -{57,-29,30}, -{57,-29,31}, -{57,-29,32}, -{57,-29,33}, -{57,-29,34}, -{57,-29,35}, -{57,-29,36}, -{57,-29,37}, -{57,-29,38}, -{57,-29,39}, -{57,-29,40}, -{57,-29,41}, -{57,-29,42}, -{57,-29,43}, -{57,-29,44}, -{57,-29,45}, -{57,-29,46}, -{57,-29,47}, -{57,-29,48}, -{57,-29,49}, -{57,-29,50}, -{57,-29,51}, -{57,-29,52}, -{57,-29,53}, -{57,-29,54}, -{57,-29,55}, -{57,-29,56}, -{57,-29,57}, -{57,-29,58}, -{57,-29,59}, -{57,-29,60}, -{57,-28,-17}, -{57,-28,-16}, -{57,-28,-15}, -{57,-28,-14}, -{57,-28,-13}, -{57,-28,-12}, -{57,-28,-11}, -{57,-28,-10}, -{57,-28,-9}, -{57,-28,-8}, -{57,-28,-7}, -{57,-28,-6}, -{57,-28,-5}, -{57,-28,-4}, -{57,-28,-3}, -{57,-28,-2}, -{57,-28,-1}, -{57,-28,0}, -{57,-28,1}, -{57,-28,2}, -{57,-28,3}, -{57,-28,4}, -{57,-28,5}, -{57,-28,6}, -{57,-28,7}, -{57,-28,8}, -{57,-28,9}, -{57,-28,10}, -{57,-28,11}, -{57,-28,12}, -{57,-28,13}, -{57,-28,14}, -{57,-28,15}, -{57,-28,16}, -{57,-28,17}, -{57,-28,18}, -{57,-28,19}, -{57,-28,20}, -{57,-28,21}, -{57,-28,22}, -{57,-28,23}, -{57,-28,24}, -{57,-28,25}, -{57,-28,26}, -{57,-28,27}, -{57,-28,28}, -{57,-28,29}, -{57,-28,30}, -{57,-28,31}, -{57,-28,32}, -{57,-28,33}, -{57,-28,34}, -{57,-28,35}, -{57,-28,36}, -{57,-28,37}, -{57,-28,38}, -{57,-28,39}, -{57,-28,40}, -{57,-28,41}, -{57,-28,42}, -{57,-28,43}, -{57,-28,44}, -{57,-28,45}, -{57,-28,46}, -{57,-28,47}, -{57,-28,48}, -{57,-28,49}, -{57,-28,50}, -{57,-28,51}, -{57,-28,52}, -{57,-28,53}, -{57,-28,54}, -{57,-28,55}, -{57,-28,56}, -{57,-28,57}, -{57,-28,58}, -{57,-28,59}, -{57,-28,60}, -{57,-27,-18}, -{57,-27,-17}, -{57,-27,-16}, -{57,-27,-15}, -{57,-27,-14}, -{57,-27,-13}, -{57,-27,-12}, -{57,-27,-11}, -{57,-27,-10}, -{57,-27,-9}, -{57,-27,-8}, -{57,-27,-7}, -{57,-27,-6}, -{57,-27,-5}, -{57,-27,-4}, -{57,-27,-3}, -{57,-27,-2}, -{57,-27,-1}, -{57,-27,0}, -{57,-27,1}, -{57,-27,2}, -{57,-27,3}, -{57,-27,4}, -{57,-27,5}, -{57,-27,6}, -{57,-27,7}, -{57,-27,8}, -{57,-27,9}, -{57,-27,10}, -{57,-27,11}, -{57,-27,12}, -{57,-27,13}, -{57,-27,14}, -{57,-27,15}, -{57,-27,16}, -{57,-27,17}, -{57,-27,18}, -{57,-27,19}, -{57,-27,20}, -{57,-27,21}, -{57,-27,22}, -{57,-27,23}, -{57,-27,24}, -{57,-27,25}, -{57,-27,26}, -{57,-27,27}, -{57,-27,28}, -{57,-27,29}, -{57,-27,30}, -{57,-27,31}, -{57,-27,32}, -{57,-27,33}, -{57,-27,34}, -{57,-27,35}, -{57,-27,36}, -{57,-27,37}, -{57,-27,38}, -{57,-27,39}, -{57,-27,40}, -{57,-27,41}, -{57,-27,42}, -{57,-27,43}, -{57,-27,44}, -{57,-27,45}, -{57,-27,46}, -{57,-27,47}, -{57,-27,48}, -{57,-27,49}, -{57,-27,50}, -{57,-27,51}, -{57,-27,52}, -{57,-27,53}, -{57,-27,54}, -{57,-27,55}, -{57,-27,56}, -{57,-27,57}, -{57,-27,58}, -{57,-27,59}, -{57,-27,60}, -{57,-26,-20}, -{57,-26,-19}, -{57,-26,-18}, -{57,-26,-17}, -{57,-26,-16}, -{57,-26,-15}, -{57,-26,-14}, -{57,-26,-13}, -{57,-26,-12}, -{57,-26,-11}, -{57,-26,-10}, -{57,-26,-9}, -{57,-26,-8}, -{57,-26,-7}, -{57,-26,-6}, -{57,-26,-5}, -{57,-26,-4}, -{57,-26,-3}, -{57,-26,-2}, -{57,-26,-1}, -{57,-26,0}, -{57,-26,1}, -{57,-26,2}, -{57,-26,3}, -{57,-26,4}, -{57,-26,5}, -{57,-26,6}, -{57,-26,7}, -{57,-26,8}, -{57,-26,9}, -{57,-26,10}, -{57,-26,11}, -{57,-26,12}, -{57,-26,13}, -{57,-26,14}, -{57,-26,15}, -{57,-26,16}, -{57,-26,17}, -{57,-26,18}, -{57,-26,19}, -{57,-26,20}, -{57,-26,21}, -{57,-26,22}, -{57,-26,23}, -{57,-26,24}, -{57,-26,25}, -{57,-26,26}, -{57,-26,27}, -{57,-26,28}, -{57,-26,29}, -{57,-26,30}, -{57,-26,31}, -{57,-26,32}, -{57,-26,33}, -{57,-26,34}, -{57,-26,35}, -{57,-26,36}, -{57,-26,37}, -{57,-26,38}, -{57,-26,39}, -{57,-26,40}, -{57,-26,41}, -{57,-26,42}, -{57,-26,43}, -{57,-26,44}, -{57,-26,45}, -{57,-26,46}, -{57,-26,47}, -{57,-26,48}, -{57,-26,49}, -{57,-26,50}, -{57,-26,51}, -{57,-26,52}, -{57,-26,53}, -{57,-26,54}, -{57,-26,55}, -{57,-26,56}, -{57,-26,57}, -{57,-26,58}, -{57,-26,59}, -{57,-26,60}, -{57,-25,-21}, -{57,-25,-20}, -{57,-25,-19}, -{57,-25,-18}, -{57,-25,-17}, -{57,-25,-16}, -{57,-25,-15}, -{57,-25,-14}, -{57,-25,-13}, -{57,-25,-12}, -{57,-25,-11}, -{57,-25,-10}, -{57,-25,-9}, -{57,-25,-8}, -{57,-25,-7}, -{57,-25,-6}, -{57,-25,-5}, -{57,-25,-4}, -{57,-25,-3}, -{57,-25,-2}, -{57,-25,-1}, -{57,-25,0}, -{57,-25,1}, -{57,-25,2}, -{57,-25,3}, -{57,-25,4}, -{57,-25,5}, -{57,-25,6}, -{57,-25,7}, -{57,-25,8}, -{57,-25,9}, -{57,-25,10}, -{57,-25,11}, -{57,-25,12}, -{57,-25,13}, -{57,-25,14}, -{57,-25,15}, -{57,-25,16}, -{57,-25,17}, -{57,-25,18}, -{57,-25,19}, -{57,-25,20}, -{57,-25,21}, -{57,-25,22}, -{57,-25,23}, -{57,-25,24}, -{57,-25,25}, -{57,-25,26}, -{57,-25,27}, -{57,-25,28}, -{57,-25,29}, -{57,-25,30}, -{57,-25,31}, -{57,-25,32}, -{57,-25,33}, -{57,-25,34}, -{57,-25,35}, -{57,-25,36}, -{57,-25,37}, -{57,-25,38}, -{57,-25,39}, -{57,-25,40}, -{57,-25,41}, -{57,-25,42}, -{57,-25,43}, -{57,-25,44}, -{57,-25,45}, -{57,-25,46}, -{57,-25,47}, -{57,-25,48}, -{57,-25,49}, -{57,-25,50}, -{57,-25,51}, -{57,-25,52}, -{57,-25,53}, -{57,-25,54}, -{57,-25,55}, -{57,-25,56}, -{57,-25,57}, -{57,-25,58}, -{57,-25,59}, -{57,-25,60}, -{57,-24,-22}, -{57,-24,-21}, -{57,-24,-20}, -{57,-24,-19}, -{57,-24,-18}, -{57,-24,-17}, -{57,-24,-16}, -{57,-24,-15}, -{57,-24,-14}, -{57,-24,-13}, -{57,-24,-12}, -{57,-24,-11}, -{57,-24,-10}, -{57,-24,-9}, -{57,-24,-8}, -{57,-24,-7}, -{57,-24,-6}, -{57,-24,-5}, -{57,-24,-4}, -{57,-24,-3}, -{57,-24,-2}, -{57,-24,-1}, -{57,-24,0}, -{57,-24,1}, -{57,-24,2}, -{57,-24,3}, -{57,-24,4}, -{57,-24,5}, -{57,-24,6}, -{57,-24,7}, -{57,-24,8}, -{57,-24,9}, -{57,-24,10}, -{57,-24,11}, -{57,-24,12}, -{57,-24,13}, -{57,-24,14}, -{57,-24,15}, -{57,-24,16}, -{57,-24,17}, -{57,-24,18}, -{57,-24,19}, -{57,-24,20}, -{57,-24,21}, -{57,-24,22}, -{57,-24,23}, -{57,-24,24}, -{57,-24,25}, -{57,-24,26}, -{57,-24,27}, -{57,-24,28}, -{57,-24,29}, -{57,-24,30}, -{57,-24,31}, -{57,-24,32}, -{57,-24,33}, -{57,-24,34}, -{57,-24,35}, -{57,-24,36}, -{57,-24,37}, -{57,-24,38}, -{57,-24,39}, -{57,-24,40}, -{57,-24,41}, -{57,-24,42}, -{57,-24,43}, -{57,-24,44}, -{57,-24,45}, -{57,-24,46}, -{57,-24,47}, -{57,-24,48}, -{57,-24,49}, -{57,-24,50}, -{57,-24,51}, -{57,-24,52}, -{57,-24,53}, -{57,-24,54}, -{57,-24,55}, -{57,-24,56}, -{57,-24,57}, -{57,-24,58}, -{57,-24,59}, -{57,-24,60}, -{57,-23,-24}, -{57,-23,-23}, -{57,-23,-22}, -{57,-23,-21}, -{57,-23,-20}, -{57,-23,-19}, -{57,-23,-18}, -{57,-23,-17}, -{57,-23,-16}, -{57,-23,-15}, -{57,-23,-14}, -{57,-23,-13}, -{57,-23,-12}, -{57,-23,-11}, -{57,-23,-10}, -{57,-23,-9}, -{57,-23,-8}, -{57,-23,-7}, -{57,-23,-6}, -{57,-23,-5}, -{57,-23,-4}, -{57,-23,-3}, -{57,-23,-2}, -{57,-23,-1}, -{57,-23,0}, -{57,-23,1}, -{57,-23,2}, -{57,-23,3}, -{57,-23,4}, -{57,-23,5}, -{57,-23,6}, -{57,-23,7}, -{57,-23,8}, -{57,-23,9}, -{57,-23,10}, -{57,-23,11}, -{57,-23,12}, -{57,-23,13}, -{57,-23,14}, -{57,-23,15}, -{57,-23,16}, -{57,-23,17}, -{57,-23,18}, -{57,-23,19}, -{57,-23,20}, -{57,-23,21}, -{57,-23,22}, -{57,-23,23}, -{57,-23,24}, -{57,-23,25}, -{57,-23,26}, -{57,-23,27}, -{57,-23,28}, -{57,-23,29}, -{57,-23,30}, -{57,-23,31}, -{57,-23,32}, -{57,-23,33}, -{57,-23,34}, -{57,-23,35}, -{57,-23,36}, -{57,-23,37}, -{57,-23,38}, -{57,-23,39}, -{57,-23,40}, -{57,-23,41}, -{57,-23,42}, -{57,-23,43}, -{57,-23,44}, -{57,-23,45}, -{57,-23,46}, -{57,-23,47}, -{57,-23,48}, -{57,-23,49}, -{57,-23,50}, -{57,-23,51}, -{57,-23,52}, -{57,-23,53}, -{57,-23,54}, -{57,-23,55}, -{57,-23,56}, -{57,-23,57}, -{57,-23,58}, -{57,-23,59}, -{57,-23,60}, -{57,-22,-25}, -{57,-22,-24}, -{57,-22,-23}, -{57,-22,-22}, -{57,-22,-21}, -{57,-22,-20}, -{57,-22,-19}, -{57,-22,-18}, -{57,-22,-17}, -{57,-22,-16}, -{57,-22,-15}, -{57,-22,-14}, -{57,-22,-13}, -{57,-22,-12}, -{57,-22,-11}, -{57,-22,-10}, -{57,-22,-9}, -{57,-22,-8}, -{57,-22,-7}, -{57,-22,-6}, -{57,-22,-5}, -{57,-22,-4}, -{57,-22,-3}, -{57,-22,-2}, -{57,-22,-1}, -{57,-22,0}, -{57,-22,1}, -{57,-22,2}, -{57,-22,3}, -{57,-22,4}, -{57,-22,5}, -{57,-22,6}, -{57,-22,7}, -{57,-22,8}, -{57,-22,9}, -{57,-22,10}, -{57,-22,11}, -{57,-22,12}, -{57,-22,13}, -{57,-22,14}, -{57,-22,15}, -{57,-22,16}, -{57,-22,17}, -{57,-22,18}, -{57,-22,19}, -{57,-22,20}, -{57,-22,21}, -{57,-22,22}, -{57,-22,23}, -{57,-22,24}, -{57,-22,25}, -{57,-22,26}, -{57,-22,27}, -{57,-22,28}, -{57,-22,29}, -{57,-22,30}, -{57,-22,31}, -{57,-22,32}, -{57,-22,33}, -{57,-22,34}, -{57,-22,35}, -{57,-22,36}, -{57,-22,37}, -{57,-22,38}, -{57,-22,39}, -{57,-22,40}, -{57,-22,41}, -{57,-22,42}, -{57,-22,43}, -{57,-22,44}, -{57,-22,45}, -{57,-22,46}, -{57,-22,47}, -{57,-22,48}, -{57,-22,49}, -{57,-22,50}, -{57,-22,51}, -{57,-22,52}, -{57,-22,53}, -{57,-22,54}, -{57,-22,55}, -{57,-22,56}, -{57,-22,57}, -{57,-22,58}, -{57,-22,59}, -{57,-22,60}, -{57,-21,-26}, -{57,-21,-25}, -{57,-21,-24}, -{57,-21,-23}, -{57,-21,-22}, -{57,-21,-21}, -{57,-21,-20}, -{57,-21,-19}, -{57,-21,-18}, -{57,-21,-17}, -{57,-21,-16}, -{57,-21,-15}, -{57,-21,-14}, -{57,-21,-13}, -{57,-21,-12}, -{57,-21,-11}, -{57,-21,-10}, -{57,-21,-9}, -{57,-21,-8}, -{57,-21,-7}, -{57,-21,-6}, -{57,-21,-5}, -{57,-21,-4}, -{57,-21,-3}, -{57,-21,-2}, -{57,-21,-1}, -{57,-21,0}, -{57,-21,1}, -{57,-21,2}, -{57,-21,3}, -{57,-21,4}, -{57,-21,5}, -{57,-21,6}, -{57,-21,7}, -{57,-21,8}, -{57,-21,9}, -{57,-21,10}, -{57,-21,11}, -{57,-21,12}, -{57,-21,13}, -{57,-21,14}, -{57,-21,15}, -{57,-21,16}, -{57,-21,17}, -{57,-21,18}, -{57,-21,19}, -{57,-21,20}, -{57,-21,21}, -{57,-21,22}, -{57,-21,23}, -{57,-21,24}, -{57,-21,25}, -{57,-21,26}, -{57,-21,27}, -{57,-21,28}, -{57,-21,29}, -{57,-21,30}, -{57,-21,31}, -{57,-21,32}, -{57,-21,33}, -{57,-21,34}, -{57,-21,35}, -{57,-21,36}, -{57,-21,37}, -{57,-21,38}, -{57,-21,39}, -{57,-21,40}, -{57,-21,41}, -{57,-21,42}, -{57,-21,43}, -{57,-21,44}, -{57,-21,45}, -{57,-21,46}, -{57,-21,47}, -{57,-21,48}, -{57,-21,49}, -{57,-21,50}, -{57,-21,51}, -{57,-21,52}, -{57,-21,53}, -{57,-21,54}, -{57,-21,55}, -{57,-21,56}, -{57,-21,57}, -{57,-21,58}, -{57,-21,59}, -{57,-21,60}, -{57,-20,-28}, -{57,-20,-27}, -{57,-20,-26}, -{57,-20,-25}, -{57,-20,-24}, -{57,-20,-23}, -{57,-20,-22}, -{57,-20,-21}, -{57,-20,-20}, -{57,-20,-19}, -{57,-20,-18}, -{57,-20,-17}, -{57,-20,-16}, -{57,-20,-15}, -{57,-20,-14}, -{57,-20,-13}, -{57,-20,-12}, -{57,-20,-11}, -{57,-20,-10}, -{57,-20,-9}, -{57,-20,-8}, -{57,-20,-7}, -{57,-20,-6}, -{57,-20,-5}, -{57,-20,-4}, -{57,-20,-3}, -{57,-20,-2}, -{57,-20,-1}, -{57,-20,0}, -{57,-20,1}, -{57,-20,2}, -{57,-20,3}, -{57,-20,4}, -{57,-20,5}, -{57,-20,6}, -{57,-20,7}, -{57,-20,8}, -{57,-20,9}, -{57,-20,10}, -{57,-20,11}, -{57,-20,12}, -{57,-20,13}, -{57,-20,14}, -{57,-20,15}, -{57,-20,16}, -{57,-20,17}, -{57,-20,18}, -{57,-20,19}, -{57,-20,20}, -{57,-20,21}, -{57,-20,22}, -{57,-20,23}, -{57,-20,24}, -{57,-20,25}, -{57,-20,26}, -{57,-20,27}, -{57,-20,28}, -{57,-20,29}, -{57,-20,30}, -{57,-20,31}, -{57,-20,32}, -{57,-20,33}, -{57,-20,34}, -{57,-20,35}, -{57,-20,36}, -{57,-20,37}, -{57,-20,38}, -{57,-20,39}, -{57,-20,40}, -{57,-20,41}, -{57,-20,42}, -{57,-20,43}, -{57,-20,44}, -{57,-20,45}, -{57,-20,46}, -{57,-20,47}, -{57,-20,48}, -{57,-20,49}, -{57,-20,50}, -{57,-20,51}, -{57,-20,52}, -{57,-20,53}, -{57,-20,54}, -{57,-20,55}, -{57,-20,56}, -{57,-20,57}, -{57,-20,58}, -{57,-20,59}, -{57,-20,60}, -{57,-19,-29}, -{57,-19,-28}, -{57,-19,-27}, -{57,-19,-26}, -{57,-19,-25}, -{57,-19,-24}, -{57,-19,-23}, -{57,-19,-22}, -{57,-19,-21}, -{57,-19,-20}, -{57,-19,-19}, -{57,-19,-18}, -{57,-19,-17}, -{57,-19,-16}, -{57,-19,-15}, -{57,-19,-14}, -{57,-19,-13}, -{57,-19,-12}, -{57,-19,-11}, -{57,-19,-10}, -{57,-19,-9}, -{57,-19,-8}, -{57,-19,-7}, -{57,-19,-6}, -{57,-19,-5}, -{57,-19,-4}, -{57,-19,-3}, -{57,-19,-2}, -{57,-19,-1}, -{57,-19,0}, -{57,-19,1}, -{57,-19,2}, -{57,-19,3}, -{57,-19,4}, -{57,-19,5}, -{57,-19,6}, -{57,-19,7}, -{57,-19,8}, -{57,-19,9}, -{57,-19,10}, -{57,-19,11}, -{57,-19,12}, -{57,-19,13}, -{57,-19,14}, -{57,-19,15}, -{57,-19,16}, -{57,-19,17}, -{57,-19,18}, -{57,-19,19}, -{57,-19,20}, -{57,-19,21}, -{57,-19,22}, -{57,-19,23}, -{57,-19,24}, -{57,-19,25}, -{57,-19,26}, -{57,-19,27}, -{57,-19,28}, -{57,-19,29}, -{57,-19,30}, -{57,-19,31}, -{57,-19,32}, -{57,-19,33}, -{57,-19,34}, -{57,-19,35}, -{57,-19,36}, -{57,-19,37}, -{57,-19,38}, -{57,-19,39}, -{57,-19,40}, -{57,-19,41}, -{57,-19,42}, -{57,-19,43}, -{57,-19,44}, -{57,-19,45}, -{57,-19,46}, -{57,-19,47}, -{57,-19,48}, -{57,-19,49}, -{57,-19,50}, -{57,-19,51}, -{57,-19,52}, -{57,-19,53}, -{57,-19,54}, -{57,-19,55}, -{57,-19,56}, -{57,-19,57}, -{57,-19,58}, -{57,-19,59}, -{57,-19,60}, -{57,-18,-30}, -{57,-18,-29}, -{57,-18,-28}, -{57,-18,-27}, -{57,-18,-26}, -{57,-18,-25}, -{57,-18,-24}, -{57,-18,-23}, -{57,-18,-22}, -{57,-18,-21}, -{57,-18,-20}, -{57,-18,-19}, -{57,-18,-18}, -{57,-18,-17}, -{57,-18,-16}, -{57,-18,-15}, -{57,-18,-14}, -{57,-18,-13}, -{57,-18,-12}, -{57,-18,-11}, -{57,-18,-10}, -{57,-18,-9}, -{57,-18,-8}, -{57,-18,-7}, -{57,-18,-6}, -{57,-18,-5}, -{57,-18,-4}, -{57,-18,-3}, -{57,-18,-2}, -{57,-18,-1}, -{57,-18,0}, -{57,-18,1}, -{57,-18,2}, -{57,-18,3}, -{57,-18,4}, -{57,-18,5}, -{57,-18,6}, -{57,-18,7}, -{57,-18,8}, -{57,-18,9}, -{57,-18,10}, -{57,-18,11}, -{57,-18,12}, -{57,-18,13}, -{57,-18,14}, -{57,-18,15}, -{57,-18,16}, -{57,-18,17}, -{57,-18,18}, -{57,-18,19}, -{57,-18,20}, -{57,-18,21}, -{57,-18,22}, -{57,-18,23}, -{57,-18,24}, -{57,-18,25}, -{57,-18,26}, -{57,-18,27}, -{57,-18,28}, -{57,-18,29}, -{57,-18,30}, -{57,-18,31}, -{57,-18,32}, -{57,-18,33}, -{57,-18,34}, -{57,-18,35}, -{57,-18,36}, -{57,-18,37}, -{57,-18,38}, -{57,-18,39}, -{57,-18,40}, -{57,-18,41}, -{57,-18,42}, -{57,-18,43}, -{57,-18,44}, -{57,-18,45}, -{57,-18,46}, -{57,-18,47}, -{57,-18,48}, -{57,-18,49}, -{57,-18,50}, -{57,-18,51}, -{57,-18,52}, -{57,-18,53}, -{57,-18,54}, -{57,-18,55}, -{57,-18,56}, -{57,-18,57}, -{57,-18,58}, -{57,-18,59}, -{57,-18,60}, -{57,-17,-32}, -{57,-17,-31}, -{57,-17,-30}, -{57,-17,-29}, -{57,-17,-28}, -{57,-17,-27}, -{57,-17,-26}, -{57,-17,-25}, -{57,-17,-24}, -{57,-17,-23}, -{57,-17,-22}, -{57,-17,-21}, -{57,-17,-20}, -{57,-17,-19}, -{57,-17,-18}, -{57,-17,-17}, -{57,-17,-16}, -{57,-17,-15}, -{57,-17,-14}, -{57,-17,-13}, -{57,-17,-12}, -{57,-17,-11}, -{57,-17,-10}, -{57,-17,-9}, -{57,-17,-8}, -{57,-17,-7}, -{57,-17,-6}, -{57,-17,-5}, -{57,-17,-4}, -{57,-17,-3}, -{57,-17,-2}, -{57,-17,-1}, -{57,-17,0}, -{57,-17,1}, -{57,-17,2}, -{57,-17,3}, -{57,-17,4}, -{57,-17,5}, -{57,-17,6}, -{57,-17,7}, -{57,-17,8}, -{57,-17,9}, -{57,-17,10}, -{57,-17,11}, -{57,-17,12}, -{57,-17,13}, -{57,-17,14}, -{57,-17,15}, -{57,-17,16}, -{57,-17,17}, -{57,-17,18}, -{57,-17,19}, -{57,-17,20}, -{57,-17,21}, -{57,-17,22}, -{57,-17,23}, -{57,-17,24}, -{57,-17,25}, -{57,-17,26}, -{57,-17,27}, -{57,-17,28}, -{57,-17,29}, -{57,-17,30}, -{57,-17,31}, -{57,-17,32}, -{57,-17,33}, -{57,-17,34}, -{57,-17,35}, -{57,-17,36}, -{57,-17,37}, -{57,-17,38}, -{57,-17,39}, -{57,-17,40}, -{57,-17,41}, -{57,-17,42}, -{57,-17,43}, -{57,-17,44}, -{57,-17,45}, -{57,-17,46}, -{57,-17,47}, -{57,-17,48}, -{57,-17,49}, -{57,-17,50}, -{57,-17,51}, -{57,-17,52}, -{57,-17,53}, -{57,-17,54}, -{57,-17,55}, -{57,-17,56}, -{57,-17,57}, -{57,-17,58}, -{57,-17,59}, -{57,-17,60}, -{57,-16,-33}, -{57,-16,-32}, -{57,-16,-31}, -{57,-16,-30}, -{57,-16,-29}, -{57,-16,-28}, -{57,-16,-27}, -{57,-16,-26}, -{57,-16,-25}, -{57,-16,-24}, -{57,-16,-23}, -{57,-16,-22}, -{57,-16,-21}, -{57,-16,-20}, -{57,-16,-19}, -{57,-16,-18}, -{57,-16,-17}, -{57,-16,-16}, -{57,-16,-15}, -{57,-16,-14}, -{57,-16,-13}, -{57,-16,-12}, -{57,-16,-11}, -{57,-16,-10}, -{57,-16,-9}, -{57,-16,-8}, -{57,-16,-7}, -{57,-16,-6}, -{57,-16,-5}, -{57,-16,-4}, -{57,-16,-3}, -{57,-16,-2}, -{57,-16,-1}, -{57,-16,0}, -{57,-16,1}, -{57,-16,2}, -{57,-16,3}, -{57,-16,4}, -{57,-16,5}, -{57,-16,6}, -{57,-16,7}, -{57,-16,8}, -{57,-16,9}, -{57,-16,10}, -{57,-16,11}, -{57,-16,12}, -{57,-16,13}, -{57,-16,14}, -{57,-16,15}, -{57,-16,16}, -{57,-16,17}, -{57,-16,18}, -{57,-16,19}, -{57,-16,20}, -{57,-16,21}, -{57,-16,22}, -{57,-16,23}, -{57,-16,24}, -{57,-16,25}, -{57,-16,26}, -{57,-16,27}, -{57,-16,28}, -{57,-16,29}, -{57,-16,30}, -{57,-16,31}, -{57,-16,32}, -{57,-16,33}, -{57,-16,34}, -{57,-16,35}, -{57,-16,36}, -{57,-16,37}, -{57,-16,38}, -{57,-16,39}, -{57,-16,40}, -{57,-16,41}, -{57,-16,42}, -{57,-16,43}, -{57,-16,44}, -{57,-16,45}, -{57,-16,46}, -{57,-16,47}, -{57,-16,48}, -{57,-16,49}, -{57,-16,50}, -{57,-16,51}, -{57,-16,52}, -{57,-16,53}, -{57,-16,54}, -{57,-16,55}, -{57,-16,56}, -{57,-16,57}, -{57,-16,58}, -{57,-16,59}, -{57,-16,60}, -{57,-16,61}, -{57,-15,-34}, -{57,-15,-33}, -{57,-15,-32}, -{57,-15,-31}, -{57,-15,-30}, -{57,-15,-29}, -{57,-15,-28}, -{57,-15,-27}, -{57,-15,-26}, -{57,-15,-25}, -{57,-15,-24}, -{57,-15,-23}, -{57,-15,-22}, -{57,-15,-21}, -{57,-15,-20}, -{57,-15,-19}, -{57,-15,-18}, -{57,-15,-17}, -{57,-15,-16}, -{57,-15,-15}, -{57,-15,-14}, -{57,-15,-13}, -{57,-15,-12}, -{57,-15,-11}, -{57,-15,-10}, -{57,-15,-9}, -{57,-15,-8}, -{57,-15,-7}, -{57,-15,-6}, -{57,-15,-5}, -{57,-15,-4}, -{57,-15,-3}, -{57,-15,-2}, -{57,-15,-1}, -{57,-15,0}, -{57,-15,1}, -{57,-15,2}, -{57,-15,3}, -{57,-15,4}, -{57,-15,5}, -{57,-15,6}, -{57,-15,7}, -{57,-15,8}, -{57,-15,9}, -{57,-15,10}, -{57,-15,11}, -{57,-15,12}, -{57,-15,13}, -{57,-15,14}, -{57,-15,15}, -{57,-15,16}, -{57,-15,17}, -{57,-15,18}, -{57,-15,19}, -{57,-15,20}, -{57,-15,21}, -{57,-15,22}, -{57,-15,23}, -{57,-15,24}, -{57,-15,25}, -{57,-15,26}, -{57,-15,27}, -{57,-15,28}, -{57,-15,29}, -{57,-15,30}, -{57,-15,31}, -{57,-15,32}, -{57,-15,33}, -{57,-15,34}, -{57,-15,35}, -{57,-15,36}, -{57,-15,37}, -{57,-15,38}, -{57,-15,39}, -{57,-15,40}, -{57,-15,41}, -{57,-15,42}, -{57,-15,43}, -{57,-15,44}, -{57,-15,45}, -{57,-15,46}, -{57,-15,47}, -{57,-15,48}, -{57,-15,49}, -{57,-15,50}, -{57,-15,51}, -{57,-15,52}, -{57,-15,53}, -{57,-15,54}, -{57,-15,55}, -{57,-15,56}, -{57,-15,57}, -{57,-15,58}, -{57,-15,59}, -{57,-15,60}, -{57,-15,61}, -{57,-14,-35}, -{57,-14,-34}, -{57,-14,-33}, -{57,-14,-32}, -{57,-14,-31}, -{57,-14,-30}, -{57,-14,-29}, -{57,-14,-28}, -{57,-14,-27}, -{57,-14,-26}, -{57,-14,-25}, -{57,-14,-24}, -{57,-14,-23}, -{57,-14,-22}, -{57,-14,-21}, -{57,-14,-20}, -{57,-14,-19}, -{57,-14,-18}, -{57,-14,-17}, -{57,-14,-16}, -{57,-14,-15}, -{57,-14,-14}, -{57,-14,-13}, -{57,-14,-12}, -{57,-14,-11}, -{57,-14,-10}, -{57,-14,-9}, -{57,-14,-8}, -{57,-14,-7}, -{57,-14,-6}, -{57,-14,-5}, -{57,-14,-4}, -{57,-14,-3}, -{57,-14,-2}, -{57,-14,-1}, -{57,-14,0}, -{57,-14,1}, -{57,-14,2}, -{57,-14,3}, -{57,-14,4}, -{57,-14,5}, -{57,-14,6}, -{57,-14,7}, -{57,-14,8}, -{57,-14,9}, -{57,-14,10}, -{57,-14,11}, -{57,-14,12}, -{57,-14,13}, -{57,-14,14}, -{57,-14,15}, -{57,-14,16}, -{57,-14,17}, -{57,-14,18}, -{57,-14,19}, -{57,-14,20}, -{57,-14,21}, -{57,-14,22}, -{57,-14,23}, -{57,-14,24}, -{57,-14,25}, -{57,-14,26}, -{57,-14,27}, -{57,-14,28}, -{57,-14,29}, -{57,-14,30}, -{57,-14,31}, -{57,-14,32}, -{57,-14,33}, -{57,-14,34}, -{57,-14,35}, -{57,-14,36}, -{57,-14,37}, -{57,-14,38}, -{57,-14,39}, -{57,-14,40}, -{57,-14,41}, -{57,-14,42}, -{57,-14,43}, -{57,-14,44}, -{57,-14,45}, -{57,-14,46}, -{57,-14,47}, -{57,-14,48}, -{57,-14,49}, -{57,-14,50}, -{57,-14,51}, -{57,-14,52}, -{57,-14,53}, -{57,-14,54}, -{57,-14,55}, -{57,-14,56}, -{57,-14,57}, -{57,-14,58}, -{57,-14,59}, -{57,-14,60}, -{57,-14,61}, -{57,-13,-37}, -{57,-13,-36}, -{57,-13,-35}, -{57,-13,-34}, -{57,-13,-33}, -{57,-13,-32}, -{57,-13,-31}, -{57,-13,-30}, -{57,-13,-29}, -{57,-13,-28}, -{57,-13,-27}, -{57,-13,-26}, -{57,-13,-25}, -{57,-13,-24}, -{57,-13,-23}, -{57,-13,-22}, -{57,-13,-21}, -{57,-13,-20}, -{57,-13,-19}, -{57,-13,-18}, -{57,-13,-17}, -{57,-13,-16}, -{57,-13,-15}, -{57,-13,-14}, -{57,-13,-13}, -{57,-13,-12}, -{57,-13,-11}, -{57,-13,-10}, -{57,-13,-9}, -{57,-13,-8}, -{57,-13,-7}, -{57,-13,-6}, -{57,-13,-5}, -{57,-13,-4}, -{57,-13,-3}, -{57,-13,-2}, -{57,-13,-1}, -{57,-13,0}, -{57,-13,1}, -{57,-13,2}, -{57,-13,3}, -{57,-13,4}, -{57,-13,5}, -{57,-13,6}, -{57,-13,7}, -{57,-13,8}, -{57,-13,9}, -{57,-13,10}, -{57,-13,11}, -{57,-13,12}, -{57,-13,13}, -{57,-13,14}, -{57,-13,15}, -{57,-13,16}, -{57,-13,17}, -{57,-13,18}, -{57,-13,19}, -{57,-13,20}, -{57,-13,21}, -{57,-13,22}, -{57,-13,23}, -{57,-13,24}, -{57,-13,25}, -{57,-13,26}, -{57,-13,27}, -{57,-13,28}, -{57,-13,29}, -{57,-13,30}, -{57,-13,31}, -{57,-13,32}, -{57,-13,33}, -{57,-13,34}, -{57,-13,35}, -{57,-13,36}, -{57,-13,37}, -{57,-13,38}, -{57,-13,39}, -{57,-13,40}, -{57,-13,41}, -{57,-13,42}, -{57,-13,43}, -{57,-13,44}, -{57,-13,45}, -{57,-13,46}, -{57,-13,47}, -{57,-13,48}, -{57,-13,49}, -{57,-13,50}, -{57,-13,51}, -{57,-13,52}, -{57,-13,53}, -{57,-13,54}, -{57,-13,55}, -{57,-13,56}, -{57,-13,57}, -{57,-13,58}, -{57,-13,59}, -{57,-13,60}, -{57,-13,61}, -{57,-12,-38}, -{57,-12,-37}, -{57,-12,-36}, -{57,-12,-35}, -{57,-12,-34}, -{57,-12,-33}, -{57,-12,-32}, -{57,-12,-31}, -{57,-12,-30}, -{57,-12,-29}, -{57,-12,-28}, -{57,-12,-27}, -{57,-12,-26}, -{57,-12,-25}, -{57,-12,-24}, -{57,-12,-23}, -{57,-12,-22}, -{57,-12,-21}, -{57,-12,-20}, -{57,-12,-19}, -{57,-12,-18}, -{57,-12,-17}, -{57,-12,-16}, -{57,-12,-15}, -{57,-12,-14}, -{57,-12,-13}, -{57,-12,-12}, -{57,-12,-11}, -{57,-12,-10}, -{57,-12,-9}, -{57,-12,-8}, -{57,-12,-7}, -{57,-12,-6}, -{57,-12,-5}, -{57,-12,-4}, -{57,-12,-3}, -{57,-12,-2}, -{57,-12,-1}, -{57,-12,0}, -{57,-12,1}, -{57,-12,2}, -{57,-12,3}, -{57,-12,4}, -{57,-12,5}, -{57,-12,6}, -{57,-12,7}, -{57,-12,8}, -{57,-12,9}, -{57,-12,10}, -{57,-12,11}, -{57,-12,12}, -{57,-12,13}, -{57,-12,14}, -{57,-12,15}, -{57,-12,16}, -{57,-12,17}, -{57,-12,18}, -{57,-12,19}, -{57,-12,20}, -{57,-12,21}, -{57,-12,22}, -{57,-12,23}, -{57,-12,24}, -{57,-12,25}, -{57,-12,26}, -{57,-12,27}, -{57,-12,28}, -{57,-12,29}, -{57,-12,30}, -{57,-12,31}, -{57,-12,32}, -{57,-12,33}, -{57,-12,34}, -{57,-12,35}, -{57,-12,36}, -{57,-12,37}, -{57,-12,38}, -{57,-12,39}, -{57,-12,40}, -{57,-12,41}, -{57,-12,42}, -{57,-12,43}, -{57,-12,44}, -{57,-12,45}, -{57,-12,46}, -{57,-12,47}, -{57,-12,48}, -{57,-12,49}, -{57,-12,50}, -{57,-12,51}, -{57,-12,52}, -{57,-12,53}, -{57,-12,54}, -{57,-12,55}, -{57,-12,56}, -{57,-12,57}, -{57,-12,58}, -{57,-12,59}, -{57,-12,60}, -{57,-12,61}, -{57,-11,-39}, -{57,-11,-38}, -{57,-11,-37}, -{57,-11,-36}, -{57,-11,-35}, -{57,-11,-34}, -{57,-11,-33}, -{57,-11,-32}, -{57,-11,-31}, -{57,-11,-30}, -{57,-11,-29}, -{57,-11,-28}, -{57,-11,-27}, -{57,-11,-26}, -{57,-11,-25}, -{57,-11,-24}, -{57,-11,-23}, -{57,-11,-22}, -{57,-11,-21}, -{57,-11,-20}, -{57,-11,-19}, -{57,-11,-18}, -{57,-11,-17}, -{57,-11,-16}, -{57,-11,-15}, -{57,-11,-14}, -{57,-11,-13}, -{57,-11,-12}, -{57,-11,-11}, -{57,-11,-10}, -{57,-11,-9}, -{57,-11,-8}, -{57,-11,-7}, -{57,-11,-6}, -{57,-11,-5}, -{57,-11,-4}, -{57,-11,-3}, -{57,-11,-2}, -{57,-11,-1}, -{57,-11,0}, -{57,-11,1}, -{57,-11,2}, -{57,-11,3}, -{57,-11,4}, -{57,-11,5}, -{57,-11,6}, -{57,-11,7}, -{57,-11,8}, -{57,-11,9}, -{57,-11,10}, -{57,-11,11}, -{57,-11,12}, -{57,-11,13}, -{57,-11,14}, -{57,-11,15}, -{57,-11,16}, -{57,-11,17}, -{57,-11,18}, -{57,-11,19}, -{57,-11,20}, -{57,-11,21}, -{57,-11,22}, -{57,-11,23}, -{57,-11,24}, -{57,-11,25}, -{57,-11,26}, -{57,-11,27}, -{57,-11,28}, -{57,-11,29}, -{57,-11,30}, -{57,-11,31}, -{57,-11,32}, -{57,-11,33}, -{57,-11,34}, -{57,-11,35}, -{57,-11,36}, -{57,-11,37}, -{57,-11,38}, -{57,-11,39}, -{57,-11,40}, -{57,-11,41}, -{57,-11,42}, -{57,-11,43}, -{57,-11,44}, -{57,-11,45}, -{57,-11,46}, -{57,-11,47}, -{57,-11,48}, -{57,-11,49}, -{57,-11,50}, -{57,-11,51}, -{57,-11,52}, -{57,-11,53}, -{57,-11,54}, -{57,-11,55}, -{57,-11,56}, -{57,-11,57}, -{57,-11,58}, -{57,-11,59}, -{57,-11,60}, -{57,-11,61}, -{57,-10,-40}, -{57,-10,-39}, -{57,-10,-38}, -{57,-10,-37}, -{57,-10,-36}, -{57,-10,-35}, -{57,-10,-34}, -{57,-10,-33}, -{57,-10,-32}, -{57,-10,-31}, -{57,-10,-30}, -{57,-10,-29}, -{57,-10,-28}, -{57,-10,-27}, -{57,-10,-26}, -{57,-10,-25}, -{57,-10,-24}, -{57,-10,-23}, -{57,-10,-22}, -{57,-10,-21}, -{57,-10,-20}, -{57,-10,-19}, -{57,-10,-18}, -{57,-10,-17}, -{57,-10,-16}, -{57,-10,-15}, -{57,-10,-14}, -{57,-10,-13}, -{57,-10,-12}, -{57,-10,-11}, -{57,-10,-10}, -{57,-10,-9}, -{57,-10,-8}, -{57,-10,-7}, -{57,-10,-6}, -{57,-10,-5}, -{57,-10,-4}, -{57,-10,-3}, -{57,-10,-2}, -{57,-10,-1}, -{57,-10,0}, -{57,-10,1}, -{57,-10,2}, -{57,-10,3}, -{57,-10,4}, -{57,-10,5}, -{57,-10,6}, -{57,-10,7}, -{57,-10,8}, -{57,-10,9}, -{57,-10,10}, -{57,-10,11}, -{57,-10,12}, -{57,-10,13}, -{57,-10,14}, -{57,-10,15}, -{57,-10,16}, -{57,-10,17}, -{57,-10,18}, -{57,-10,19}, -{57,-10,20}, -{57,-10,21}, -{57,-10,22}, -{57,-10,23}, -{57,-10,24}, -{57,-10,25}, -{57,-10,26}, -{57,-10,27}, -{57,-10,28}, -{57,-10,29}, -{57,-10,30}, -{57,-10,31}, -{57,-10,32}, -{57,-10,33}, -{57,-10,34}, -{57,-10,35}, -{57,-10,36}, -{57,-10,37}, -{57,-10,38}, -{57,-10,39}, -{57,-10,40}, -{57,-10,41}, -{57,-10,42}, -{57,-10,43}, -{57,-10,44}, -{57,-10,45}, -{57,-10,46}, -{57,-10,47}, -{57,-10,48}, -{57,-10,49}, -{57,-10,50}, -{57,-10,51}, -{57,-10,52}, -{57,-10,53}, -{57,-10,54}, -{57,-10,55}, -{57,-10,56}, -{57,-10,57}, -{57,-10,58}, -{57,-10,59}, -{57,-10,60}, -{57,-10,61}, -{57,-9,-42}, -{57,-9,-41}, -{57,-9,-40}, -{57,-9,-39}, -{57,-9,-38}, -{57,-9,-37}, -{57,-9,-36}, -{57,-9,-35}, -{57,-9,-34}, -{57,-9,-33}, -{57,-9,-32}, -{57,-9,-31}, -{57,-9,-30}, -{57,-9,-29}, -{57,-9,-28}, -{57,-9,-27}, -{57,-9,-26}, -{57,-9,-25}, -{57,-9,-24}, -{57,-9,-23}, -{57,-9,-22}, -{57,-9,-21}, -{57,-9,-20}, -{57,-9,-19}, -{57,-9,-18}, -{57,-9,-17}, -{57,-9,-16}, -{57,-9,-15}, -{57,-9,-14}, -{57,-9,-13}, -{57,-9,-12}, -{57,-9,-11}, -{57,-9,-10}, -{57,-9,-9}, -{57,-9,-8}, -{57,-9,-7}, -{57,-9,-6}, -{57,-9,-5}, -{57,-9,-4}, -{57,-9,-3}, -{57,-9,-2}, -{57,-9,-1}, -{57,-9,0}, -{57,-9,1}, -{57,-9,2}, -{57,-9,3}, -{57,-9,4}, -{57,-9,5}, -{57,-9,6}, -{57,-9,7}, -{57,-9,8}, -{57,-9,9}, -{57,-9,10}, -{57,-9,11}, -{57,-9,12}, -{57,-9,13}, -{57,-9,14}, -{57,-9,15}, -{57,-9,16}, -{57,-9,17}, -{57,-9,18}, -{57,-9,19}, -{57,-9,20}, -{57,-9,21}, -{57,-9,22}, -{57,-9,23}, -{57,-9,24}, -{57,-9,25}, -{57,-9,26}, -{57,-9,27}, -{57,-9,28}, -{57,-9,29}, -{57,-9,30}, -{57,-9,31}, -{57,-9,32}, -{57,-9,33}, -{57,-9,34}, -{57,-9,35}, -{57,-9,36}, -{57,-9,37}, -{57,-9,38}, -{57,-9,39}, -{57,-9,40}, -{57,-9,41}, -{57,-9,42}, -{57,-9,43}, -{57,-9,44}, -{57,-9,45}, -{57,-9,46}, -{57,-9,47}, -{57,-9,48}, -{57,-9,49}, -{57,-9,50}, -{57,-9,51}, -{57,-9,52}, -{57,-9,53}, -{57,-9,54}, -{57,-9,55}, -{57,-9,56}, -{57,-9,57}, -{57,-9,58}, -{57,-9,59}, -{57,-9,60}, -{57,-9,61}, -{57,-8,-43}, -{57,-8,-42}, -{57,-8,-41}, -{57,-8,-40}, -{57,-8,-39}, -{57,-8,-38}, -{57,-8,-37}, -{57,-8,-36}, -{57,-8,-35}, -{57,-8,-34}, -{57,-8,-33}, -{57,-8,-32}, -{57,-8,-31}, -{57,-8,-30}, -{57,-8,-29}, -{57,-8,-28}, -{57,-8,-27}, -{57,-8,-26}, -{57,-8,-25}, -{57,-8,-24}, -{57,-8,-23}, -{57,-8,-22}, -{57,-8,-21}, -{57,-8,-20}, -{57,-8,-19}, -{57,-8,-18}, -{57,-8,-17}, -{57,-8,-16}, -{57,-8,-15}, -{57,-8,-14}, -{57,-8,-13}, -{57,-8,-12}, -{57,-8,-11}, -{57,-8,-10}, -{57,-8,-9}, -{57,-8,-8}, -{57,-8,-7}, -{57,-8,-6}, -{57,-8,-5}, -{57,-8,-4}, -{57,-8,-3}, -{57,-8,-2}, -{57,-8,-1}, -{57,-8,0}, -{57,-8,1}, -{57,-8,2}, -{57,-8,3}, -{57,-8,4}, -{57,-8,5}, -{57,-8,6}, -{57,-8,7}, -{57,-8,8}, -{57,-8,9}, -{57,-8,10}, -{57,-8,11}, -{57,-8,12}, -{57,-8,13}, -{57,-8,14}, -{57,-8,15}, -{57,-8,16}, -{57,-8,17}, -{57,-8,18}, -{57,-8,19}, -{57,-8,20}, -{57,-8,21}, -{57,-8,22}, -{57,-8,23}, -{57,-8,24}, -{57,-8,25}, -{57,-8,26}, -{57,-8,27}, -{57,-8,28}, -{57,-8,29}, -{57,-8,30}, -{57,-8,31}, -{57,-8,32}, -{57,-8,33}, -{57,-8,34}, -{57,-8,35}, -{57,-8,36}, -{57,-8,37}, -{57,-8,38}, -{57,-8,39}, -{57,-8,40}, -{57,-8,41}, -{57,-8,42}, -{57,-8,43}, -{57,-8,44}, -{57,-8,45}, -{57,-8,46}, -{57,-8,47}, -{57,-8,48}, -{57,-8,49}, -{57,-8,50}, -{57,-8,51}, -{57,-8,52}, -{57,-8,53}, -{57,-8,54}, -{57,-8,55}, -{57,-8,56}, -{57,-8,57}, -{57,-8,58}, -{57,-8,59}, -{57,-8,60}, -{57,-8,61}, -{57,-7,-44}, -{57,-7,-43}, -{57,-7,-42}, -{57,-7,-41}, -{57,-7,-40}, -{57,-7,-39}, -{57,-7,-38}, -{57,-7,-37}, -{57,-7,-36}, -{57,-7,-35}, -{57,-7,-34}, -{57,-7,-33}, -{57,-7,-32}, -{57,-7,-31}, -{57,-7,-30}, -{57,-7,-29}, -{57,-7,-28}, -{57,-7,-27}, -{57,-7,-26}, -{57,-7,-25}, -{57,-7,-24}, -{57,-7,-23}, -{57,-7,-22}, -{57,-7,-21}, -{57,-7,-20}, -{57,-7,-19}, -{57,-7,-18}, -{57,-7,-17}, -{57,-7,-16}, -{57,-7,-15}, -{57,-7,-14}, -{57,-7,-13}, -{57,-7,-12}, -{57,-7,-11}, -{57,-7,-10}, -{57,-7,-9}, -{57,-7,-8}, -{57,-7,-7}, -{57,-7,-6}, -{57,-7,-5}, -{57,-7,-4}, -{57,-7,-3}, -{57,-7,-2}, -{57,-7,-1}, -{57,-7,0}, -{57,-7,1}, -{57,-7,2}, -{57,-7,3}, -{57,-7,4}, -{57,-7,5}, -{57,-7,6}, -{57,-7,7}, -{57,-7,8}, -{57,-7,9}, -{57,-7,10}, -{57,-7,11}, -{57,-7,12}, -{57,-7,13}, -{57,-7,14}, -{57,-7,15}, -{57,-7,16}, -{57,-7,17}, -{57,-7,18}, -{57,-7,19}, -{57,-7,20}, -{57,-7,21}, -{57,-7,22}, -{57,-7,23}, -{57,-7,24}, -{57,-7,25}, -{57,-7,26}, -{57,-7,27}, -{57,-7,28}, -{57,-7,29}, -{57,-7,30}, -{57,-7,31}, -{57,-7,32}, -{57,-7,33}, -{57,-7,34}, -{57,-7,35}, -{57,-7,36}, -{57,-7,37}, -{57,-7,38}, -{57,-7,39}, -{57,-7,40}, -{57,-7,41}, -{57,-7,42}, -{57,-7,43}, -{57,-7,44}, -{57,-7,45}, -{57,-7,46}, -{57,-7,47}, -{57,-7,48}, -{57,-7,49}, -{57,-7,50}, -{57,-7,51}, -{57,-7,52}, -{57,-7,53}, -{57,-7,54}, -{57,-7,55}, -{57,-7,56}, -{57,-7,57}, -{57,-7,58}, -{57,-7,59}, -{57,-7,60}, -{57,-7,61}, -{57,-6,-45}, -{57,-6,-44}, -{57,-6,-43}, -{57,-6,-42}, -{57,-6,-41}, -{57,-6,-40}, -{57,-6,-39}, -{57,-6,-38}, -{57,-6,-37}, -{57,-6,-36}, -{57,-6,-35}, -{57,-6,-34}, -{57,-6,-33}, -{57,-6,-32}, -{57,-6,-31}, -{57,-6,-30}, -{57,-6,-29}, -{57,-6,-28}, -{57,-6,-27}, -{57,-6,-26}, -{57,-6,-25}, -{57,-6,-24}, -{57,-6,-23}, -{57,-6,-22}, -{57,-6,-21}, -{57,-6,-20}, -{57,-6,-19}, -{57,-6,-18}, -{57,-6,-17}, -{57,-6,-16}, -{57,-6,-15}, -{57,-6,-14}, -{57,-6,-13}, -{57,-6,-12}, -{57,-6,-11}, -{57,-6,-10}, -{57,-6,-9}, -{57,-6,-8}, -{57,-6,-7}, -{57,-6,-6}, -{57,-6,-5}, -{57,-6,-4}, -{57,-6,-3}, -{57,-6,-2}, -{57,-6,-1}, -{57,-6,0}, -{57,-6,1}, -{57,-6,2}, -{57,-6,3}, -{57,-6,4}, -{57,-6,5}, -{57,-6,6}, -{57,-6,7}, -{57,-6,8}, -{57,-6,9}, -{57,-6,10}, -{57,-6,11}, -{57,-6,12}, -{57,-6,13}, -{57,-6,14}, -{57,-6,15}, -{57,-6,16}, -{57,-6,17}, -{57,-6,18}, -{57,-6,19}, -{57,-6,20}, -{57,-6,21}, -{57,-6,22}, -{57,-6,23}, -{57,-6,24}, -{57,-6,25}, -{57,-6,26}, -{57,-6,27}, -{57,-6,28}, -{57,-6,29}, -{57,-6,30}, -{57,-6,31}, -{57,-6,32}, -{57,-6,33}, -{57,-6,34}, -{57,-6,35}, -{57,-6,36}, -{57,-6,37}, -{57,-6,38}, -{57,-6,39}, -{57,-6,40}, -{57,-6,41}, -{57,-6,42}, -{57,-6,43}, -{57,-6,44}, -{57,-6,45}, -{57,-6,46}, -{57,-6,47}, -{57,-6,48}, -{57,-6,49}, -{57,-6,50}, -{57,-6,51}, -{57,-6,52}, -{57,-6,53}, -{57,-6,54}, -{57,-6,55}, -{57,-6,56}, -{57,-6,57}, -{57,-6,58}, -{57,-6,59}, -{57,-6,60}, -{57,-6,61}, -{57,-5,-46}, -{57,-5,-45}, -{57,-5,-44}, -{57,-5,-43}, -{57,-5,-42}, -{57,-5,-41}, -{57,-5,-40}, -{57,-5,-39}, -{57,-5,-38}, -{57,-5,-37}, -{57,-5,-36}, -{57,-5,-35}, -{57,-5,-34}, -{57,-5,-33}, -{57,-5,-32}, -{57,-5,-31}, -{57,-5,-30}, -{57,-5,-29}, -{57,-5,-28}, -{57,-5,-27}, -{57,-5,-26}, -{57,-5,-25}, -{57,-5,-24}, -{57,-5,-23}, -{57,-5,-22}, -{57,-5,-21}, -{57,-5,-20}, -{57,-5,-19}, -{57,-5,-18}, -{57,-5,-17}, -{57,-5,-16}, -{57,-5,-15}, -{57,-5,-14}, -{57,-5,-13}, -{57,-5,-12}, -{57,-5,-11}, -{57,-5,-10}, -{57,-5,-9}, -{57,-5,-8}, -{57,-5,-7}, -{57,-5,-6}, -{57,-5,-5}, -{57,-5,-4}, -{57,-5,-3}, -{57,-5,-2}, -{57,-5,-1}, -{57,-5,0}, -{57,-5,1}, -{57,-5,2}, -{57,-5,3}, -{57,-5,4}, -{57,-5,5}, -{57,-5,6}, -{57,-5,7}, -{57,-5,8}, -{57,-5,9}, -{57,-5,10}, -{57,-5,11}, -{57,-5,12}, -{57,-5,13}, -{57,-5,14}, -{57,-5,15}, -{57,-5,16}, -{57,-5,17}, -{57,-5,18}, -{57,-5,19}, -{57,-5,20}, -{57,-5,21}, -{57,-5,22}, -{57,-5,23}, -{57,-5,24}, -{57,-5,25}, -{57,-5,26}, -{57,-5,27}, -{57,-5,28}, -{57,-5,29}, -{57,-5,30}, -{57,-5,31}, -{57,-5,32}, -{57,-5,33}, -{57,-5,34}, -{57,-5,35}, -{57,-5,36}, -{57,-5,37}, -{57,-5,38}, -{57,-5,39}, -{57,-5,40}, -{57,-5,41}, -{57,-5,42}, -{57,-5,43}, -{57,-5,44}, -{57,-5,45}, -{57,-5,46}, -{57,-5,47}, -{57,-5,48}, -{57,-5,49}, -{57,-5,50}, -{57,-5,51}, -{57,-5,52}, -{57,-5,53}, -{57,-5,54}, -{57,-5,55}, -{57,-5,56}, -{57,-5,57}, -{57,-5,58}, -{57,-5,59}, -{57,-5,60}, -{57,-5,61}, -{57,-4,-48}, -{57,-4,-47}, -{57,-4,-46}, -{57,-4,-45}, -{57,-4,-44}, -{57,-4,-43}, -{57,-4,-42}, -{57,-4,-41}, -{57,-4,-40}, -{57,-4,-39}, -{57,-4,-38}, -{57,-4,-37}, -{57,-4,-36}, -{57,-4,-35}, -{57,-4,-34}, -{57,-4,-33}, -{57,-4,-32}, -{57,-4,-31}, -{57,-4,-30}, -{57,-4,-29}, -{57,-4,-28}, -{57,-4,-27}, -{57,-4,-26}, -{57,-4,-25}, -{57,-4,-24}, -{57,-4,-23}, -{57,-4,-22}, -{57,-4,-21}, -{57,-4,-20}, -{57,-4,-19}, -{57,-4,-18}, -{57,-4,-17}, -{57,-4,-16}, -{57,-4,-15}, -{57,-4,-14}, -{57,-4,-13}, -{57,-4,-12}, -{57,-4,-11}, -{57,-4,-10}, -{57,-4,-9}, -{57,-4,-8}, -{57,-4,-7}, -{57,-4,-6}, -{57,-4,-5}, -{57,-4,-4}, -{57,-4,-3}, -{57,-4,-2}, -{57,-4,-1}, -{57,-4,0}, -{57,-4,1}, -{57,-4,2}, -{57,-4,3}, -{57,-4,4}, -{57,-4,5}, -{57,-4,6}, -{57,-4,7}, -{57,-4,8}, -{57,-4,9}, -{57,-4,10}, -{57,-4,11}, -{57,-4,12}, -{57,-4,13}, -{57,-4,14}, -{57,-4,15}, -{57,-4,16}, -{57,-4,17}, -{57,-4,18}, -{57,-4,19}, -{57,-4,20}, -{57,-4,21}, -{57,-4,22}, -{57,-4,23}, -{57,-4,24}, -{57,-4,25}, -{57,-4,26}, -{57,-4,27}, -{57,-4,28}, -{57,-4,29}, -{57,-4,30}, -{57,-4,31}, -{57,-4,32}, -{57,-4,33}, -{57,-4,34}, -{57,-4,35}, -{57,-4,36}, -{57,-4,37}, -{57,-4,38}, -{57,-4,39}, -{57,-4,40}, -{57,-4,41}, -{57,-4,42}, -{57,-4,43}, -{57,-4,44}, -{57,-4,45}, -{57,-4,46}, -{57,-4,47}, -{57,-4,48}, -{57,-4,49}, -{57,-4,50}, -{57,-4,51}, -{57,-4,52}, -{57,-4,53}, -{57,-4,54}, -{57,-4,55}, -{57,-4,56}, -{57,-4,57}, -{57,-4,58}, -{57,-4,59}, -{57,-4,60}, -{57,-4,61}, -{57,-3,-49}, -{57,-3,-48}, -{57,-3,-47}, -{57,-3,-46}, -{57,-3,-45}, -{57,-3,-44}, -{57,-3,-43}, -{57,-3,-42}, -{57,-3,-41}, -{57,-3,-40}, -{57,-3,-39}, -{57,-3,-38}, -{57,-3,-37}, -{57,-3,-36}, -{57,-3,-35}, -{57,-3,-34}, -{57,-3,-33}, -{57,-3,-32}, -{57,-3,-31}, -{57,-3,-30}, -{57,-3,-29}, -{57,-3,-28}, -{57,-3,-27}, -{57,-3,-26}, -{57,-3,-25}, -{57,-3,-24}, -{57,-3,-23}, -{57,-3,-22}, -{57,-3,-21}, -{57,-3,-20}, -{57,-3,-19}, -{57,-3,-18}, -{57,-3,-17}, -{57,-3,-16}, -{57,-3,-15}, -{57,-3,-14}, -{57,-3,-13}, -{57,-3,-12}, -{57,-3,-11}, -{57,-3,-10}, -{57,-3,-9}, -{57,-3,-8}, -{57,-3,-7}, -{57,-3,-6}, -{57,-3,-5}, -{57,-3,-4}, -{57,-3,-3}, -{57,-3,-2}, -{57,-3,-1}, -{57,-3,0}, -{57,-3,1}, -{57,-3,2}, -{57,-3,3}, -{57,-3,4}, -{57,-3,5}, -{57,-3,6}, -{57,-3,7}, -{57,-3,8}, -{57,-3,9}, -{57,-3,10}, -{57,-3,11}, -{57,-3,12}, -{57,-3,13}, -{57,-3,14}, -{57,-3,15}, -{57,-3,16}, -{57,-3,17}, -{57,-3,18}, -{57,-3,19}, -{57,-3,20}, -{57,-3,21}, -{57,-3,22}, -{57,-3,23}, -{57,-3,24}, -{57,-3,25}, -{57,-3,26}, -{57,-3,27}, -{57,-3,28}, -{57,-3,29}, -{57,-3,30}, -{57,-3,31}, -{57,-3,32}, -{57,-3,33}, -{57,-3,34}, -{57,-3,35}, -{57,-3,36}, -{57,-3,37}, -{57,-3,38}, -{57,-3,39}, -{57,-3,40}, -{57,-3,41}, -{57,-3,42}, -{57,-3,43}, -{57,-3,44}, -{57,-3,45}, -{57,-3,46}, -{57,-3,47}, -{57,-3,48}, -{57,-3,49}, -{57,-3,50}, -{57,-3,51}, -{57,-3,52}, -{57,-3,53}, -{57,-3,54}, -{57,-3,55}, -{57,-3,56}, -{57,-3,57}, -{57,-3,58}, -{57,-3,59}, -{57,-3,60}, -{57,-3,61}, -{57,-2,-50}, -{57,-2,-49}, -{57,-2,-48}, -{57,-2,-47}, -{57,-2,-46}, -{57,-2,-45}, -{57,-2,-44}, -{57,-2,-43}, -{57,-2,-42}, -{57,-2,-41}, -{57,-2,-40}, -{57,-2,-39}, -{57,-2,-38}, -{57,-2,-37}, -{57,-2,-36}, -{57,-2,-35}, -{57,-2,-34}, -{57,-2,-33}, -{57,-2,-32}, -{57,-2,-31}, -{57,-2,-30}, -{57,-2,-29}, -{57,-2,-28}, -{57,-2,-27}, -{57,-2,-26}, -{57,-2,-25}, -{57,-2,-24}, -{57,-2,-23}, -{57,-2,-22}, -{57,-2,-21}, -{57,-2,-20}, -{57,-2,-19}, -{57,-2,-18}, -{57,-2,-17}, -{57,-2,-16}, -{57,-2,-15}, -{57,-2,-14}, -{57,-2,-13}, -{57,-2,-12}, -{57,-2,-11}, -{57,-2,-10}, -{57,-2,-9}, -{57,-2,-8}, -{57,-2,-7}, -{57,-2,-6}, -{57,-2,-5}, -{57,-2,-4}, -{57,-2,-3}, -{57,-2,-2}, -{57,-2,-1}, -{57,-2,0}, -{57,-2,1}, -{57,-2,2}, -{57,-2,3}, -{57,-2,4}, -{57,-2,5}, -{57,-2,6}, -{57,-2,7}, -{57,-2,8}, -{57,-2,9}, -{57,-2,10}, -{57,-2,11}, -{57,-2,12}, -{57,-2,13}, -{57,-2,14}, -{57,-2,15}, -{57,-2,16}, -{57,-2,17}, -{57,-2,18}, -{57,-2,19}, -{57,-2,20}, -{57,-2,21}, -{57,-2,22}, -{57,-2,23}, -{57,-2,24}, -{57,-2,25}, -{57,-2,26}, -{57,-2,27}, -{57,-2,28}, -{57,-2,29}, -{57,-2,30}, -{57,-2,31}, -{57,-2,32}, -{57,-2,33}, -{57,-2,34}, -{57,-2,35}, -{57,-2,36}, -{57,-2,37}, -{57,-2,38}, -{57,-2,39}, -{57,-2,40}, -{57,-2,41}, -{57,-2,42}, -{57,-2,43}, -{57,-2,44}, -{57,-2,45}, -{57,-2,46}, -{57,-2,47}, -{57,-2,48}, -{57,-2,49}, -{57,-2,50}, -{57,-2,51}, -{57,-2,52}, -{57,-2,53}, -{57,-2,54}, -{57,-2,55}, -{57,-2,56}, -{57,-2,57}, -{57,-2,58}, -{57,-2,59}, -{57,-2,60}, -{57,-2,61}, -{57,-1,-51}, -{57,-1,-50}, -{57,-1,-49}, -{57,-1,-48}, -{57,-1,-47}, -{57,-1,-46}, -{57,-1,-45}, -{57,-1,-44}, -{57,-1,-43}, -{57,-1,-42}, -{57,-1,-41}, -{57,-1,-40}, -{57,-1,-39}, -{57,-1,-38}, -{57,-1,-37}, -{57,-1,-36}, -{57,-1,-35}, -{57,-1,-34}, -{57,-1,-33}, -{57,-1,-32}, -{57,-1,-31}, -{57,-1,-30}, -{57,-1,-29}, -{57,-1,-28}, -{57,-1,-27}, -{57,-1,-26}, -{57,-1,-25}, -{57,-1,-24}, -{57,-1,-23}, -{57,-1,-22}, -{57,-1,-21}, -{57,-1,-20}, -{57,-1,-19}, -{57,-1,-18}, -{57,-1,-17}, -{57,-1,-16}, -{57,-1,-15}, -{57,-1,-14}, -{57,-1,-13}, -{57,-1,-12}, -{57,-1,-11}, -{57,-1,-10}, -{57,-1,-9}, -{57,-1,-8}, -{57,-1,-7}, -{57,-1,-6}, -{57,-1,-5}, -{57,-1,-4}, -{57,-1,-3}, -{57,-1,-2}, -{57,-1,-1}, -{57,-1,0}, -{57,-1,1}, -{57,-1,2}, -{57,-1,3}, -{57,-1,4}, -{57,-1,5}, -{57,-1,6}, -{57,-1,7}, -{57,-1,8}, -{57,-1,9}, -{57,-1,10}, -{57,-1,11}, -{57,-1,12}, -{57,-1,13}, -{57,-1,14}, -{57,-1,15}, -{57,-1,16}, -{57,-1,17}, -{57,-1,18}, -{57,-1,19}, -{57,-1,20}, -{57,-1,21}, -{57,-1,22}, -{57,-1,23}, -{57,-1,24}, -{57,-1,25}, -{57,-1,26}, -{57,-1,27}, -{57,-1,28}, -{57,-1,29}, -{57,-1,30}, -{57,-1,31}, -{57,-1,32}, -{57,-1,33}, -{57,-1,34}, -{57,-1,35}, -{57,-1,36}, -{57,-1,37}, -{57,-1,38}, -{57,-1,39}, -{57,-1,40}, -{57,-1,41}, -{57,-1,42}, -{57,-1,43}, -{57,-1,44}, -{57,-1,45}, -{57,-1,46}, -{57,-1,47}, -{57,-1,48}, -{57,-1,49}, -{57,-1,50}, -{57,-1,51}, -{57,-1,52}, -{57,-1,53}, -{57,-1,54}, -{57,-1,55}, -{57,-1,56}, -{57,-1,57}, -{57,-1,58}, -{57,-1,59}, -{57,-1,60}, -{57,-1,61}, -{57,-1,62}, -{57,0,-52}, -{57,0,-51}, -{57,0,-50}, -{57,0,-49}, -{57,0,-48}, -{57,0,-47}, -{57,0,-46}, -{57,0,-45}, -{57,0,-44}, -{57,0,-43}, -{57,0,-42}, -{57,0,-41}, -{57,0,-40}, -{57,0,-39}, -{57,0,-38}, -{57,0,-37}, -{57,0,-36}, -{57,0,-35}, -{57,0,-34}, -{57,0,-33}, -{57,0,-32}, -{57,0,-31}, -{57,0,-30}, -{57,0,-29}, -{57,0,-28}, -{57,0,-27}, -{57,0,-26}, -{57,0,-25}, -{57,0,-24}, -{57,0,-23}, -{57,0,-22}, -{57,0,-21}, -{57,0,-20}, -{57,0,-19}, -{57,0,-18}, -{57,0,-17}, -{57,0,-16}, -{57,0,-15}, -{57,0,-14}, -{57,0,-13}, -{57,0,-12}, -{57,0,-11}, -{57,0,-10}, -{57,0,-9}, -{57,0,-8}, -{57,0,-7}, -{57,0,-6}, -{57,0,-5}, -{57,0,-4}, -{57,0,-3}, -{57,0,-2}, -{57,0,-1}, -{57,0,0}, -{57,0,1}, -{57,0,2}, -{57,0,3}, -{57,0,4}, -{57,0,5}, -{57,0,6}, -{57,0,7}, -{57,0,8}, -{57,0,9}, -{57,0,10}, -{57,0,11}, -{57,0,12}, -{57,0,13}, -{57,0,14}, -{57,0,15}, -{57,0,16}, -{57,0,17}, -{57,0,18}, -{57,0,19}, -{57,0,20}, -{57,0,21}, -{57,0,22}, -{57,0,23}, -{57,0,24}, -{57,0,25}, -{57,0,26}, -{57,0,27}, -{57,0,28}, -{57,0,29}, -{57,0,30}, -{57,0,31}, -{57,0,32}, -{57,0,33}, -{57,0,34}, -{57,0,35}, -{57,0,36}, -{57,0,37}, -{57,0,38}, -{57,0,39}, -{57,0,40}, -{57,0,41}, -{57,0,42}, -{57,0,43}, -{57,0,44}, -{57,0,45}, -{57,0,46}, -{57,0,47}, -{57,0,48}, -{57,0,49}, -{57,0,50}, -{57,0,51}, -{57,0,52}, -{57,0,53}, -{57,0,54}, -{57,0,55}, -{57,0,56}, -{57,0,57}, -{57,0,58}, -{57,0,59}, -{57,0,60}, -{57,0,61}, -{57,0,62}, -{57,1,-53}, -{57,1,-52}, -{57,1,-51}, -{57,1,-50}, -{57,1,-49}, -{57,1,-48}, -{57,1,-47}, -{57,1,-46}, -{57,1,-45}, -{57,1,-44}, -{57,1,-43}, -{57,1,-42}, -{57,1,-41}, -{57,1,-40}, -{57,1,-39}, -{57,1,-38}, -{57,1,-37}, -{57,1,-36}, -{57,1,-35}, -{57,1,-34}, -{57,1,-33}, -{57,1,-32}, -{57,1,-31}, -{57,1,-30}, -{57,1,-29}, -{57,1,-28}, -{57,1,-27}, -{57,1,-26}, -{57,1,-25}, -{57,1,-24}, -{57,1,-23}, -{57,1,-22}, -{57,1,-21}, -{57,1,-20}, -{57,1,-19}, -{57,1,-18}, -{57,1,-17}, -{57,1,-16}, -{57,1,-15}, -{57,1,-14}, -{57,1,-13}, -{57,1,-12}, -{57,1,-11}, -{57,1,-10}, -{57,1,-9}, -{57,1,-8}, -{57,1,-7}, -{57,1,-6}, -{57,1,-5}, -{57,1,-4}, -{57,1,-3}, -{57,1,-2}, -{57,1,-1}, -{57,1,0}, -{57,1,1}, -{57,1,2}, -{57,1,3}, -{57,1,4}, -{57,1,5}, -{57,1,6}, -{57,1,7}, -{57,1,8}, -{57,1,9}, -{57,1,10}, -{57,1,11}, -{57,1,12}, -{57,1,13}, -{57,1,14}, -{57,1,15}, -{57,1,16}, -{57,1,17}, -{57,1,18}, -{57,1,19}, -{57,1,20}, -{57,1,21}, -{57,1,22}, -{57,1,23}, -{57,1,24}, -{57,1,25}, -{57,1,26}, -{57,1,27}, -{57,1,28}, -{57,1,29}, -{57,1,30}, -{57,1,31}, -{57,1,32}, -{57,1,33}, -{57,1,34}, -{57,1,35}, -{57,1,36}, -{57,1,37}, -{57,1,38}, -{57,1,39}, -{57,1,40}, -{57,1,41}, -{57,1,42}, -{57,1,43}, -{57,1,44}, -{57,1,45}, -{57,1,46}, -{57,1,47}, -{57,1,48}, -{57,1,49}, -{57,1,50}, -{57,1,51}, -{57,1,52}, -{57,1,53}, -{57,1,54}, -{57,1,55}, -{57,1,56}, -{57,1,57}, -{57,1,58}, -{57,1,59}, -{57,1,60}, -{57,1,61}, -{57,1,62}, -{57,2,-54}, -{57,2,-53}, -{57,2,-52}, -{57,2,-51}, -{57,2,-50}, -{57,2,-49}, -{57,2,-48}, -{57,2,-47}, -{57,2,-46}, -{57,2,-45}, -{57,2,-44}, -{57,2,-43}, -{57,2,-42}, -{57,2,-41}, -{57,2,-40}, -{57,2,-39}, -{57,2,-38}, -{57,2,-37}, -{57,2,-36}, -{57,2,-35}, -{57,2,-34}, -{57,2,-33}, -{57,2,-32}, -{57,2,-31}, -{57,2,-30}, -{57,2,-29}, -{57,2,-28}, -{57,2,-27}, -{57,2,-26}, -{57,2,-25}, -{57,2,-24}, -{57,2,-23}, -{57,2,-22}, -{57,2,-21}, -{57,2,-20}, -{57,2,-19}, -{57,2,-18}, -{57,2,-17}, -{57,2,-16}, -{57,2,-15}, -{57,2,-14}, -{57,2,-13}, -{57,2,-12}, -{57,2,-11}, -{57,2,-10}, -{57,2,-9}, -{57,2,-8}, -{57,2,-7}, -{57,2,-6}, -{57,2,-5}, -{57,2,-4}, -{57,2,-3}, -{57,2,-2}, -{57,2,-1}, -{57,2,0}, -{57,2,1}, -{57,2,2}, -{57,2,3}, -{57,2,4}, -{57,2,5}, -{57,2,6}, -{57,2,7}, -{57,2,8}, -{57,2,9}, -{57,2,10}, -{57,2,11}, -{57,2,12}, -{57,2,13}, -{57,2,14}, -{57,2,15}, -{57,2,16}, -{57,2,17}, -{57,2,18}, -{57,2,19}, -{57,2,20}, -{57,2,21}, -{57,2,22}, -{57,2,23}, -{57,2,24}, -{57,2,25}, -{57,2,26}, -{57,2,27}, -{57,2,28}, -{57,2,29}, -{57,2,30}, -{57,2,31}, -{57,2,32}, -{57,2,33}, -{57,2,34}, -{57,2,35}, -{57,2,36}, -{57,2,37}, -{57,2,38}, -{57,2,39}, -{57,2,40}, -{57,2,41}, -{57,2,42}, -{57,2,43}, -{57,2,44}, -{57,2,45}, -{57,2,46}, -{57,2,47}, -{57,2,48}, -{57,2,49}, -{57,2,50}, -{57,2,51}, -{57,2,52}, -{57,2,53}, -{57,2,54}, -{57,2,55}, -{57,2,56}, -{57,2,57}, -{57,2,58}, -{57,2,59}, -{57,2,60}, -{57,2,61}, -{57,2,62}, -{57,3,-55}, -{57,3,-54}, -{57,3,-53}, -{57,3,-52}, -{57,3,-51}, -{57,3,-50}, -{57,3,-49}, -{57,3,-48}, -{57,3,-47}, -{57,3,-46}, -{57,3,-45}, -{57,3,-44}, -{57,3,-43}, -{57,3,-42}, -{57,3,-41}, -{57,3,-40}, -{57,3,-39}, -{57,3,-38}, -{57,3,-37}, -{57,3,-36}, -{57,3,-35}, -{57,3,-34}, -{57,3,-33}, -{57,3,-32}, -{57,3,-31}, -{57,3,-30}, -{57,3,-29}, -{57,3,-28}, -{57,3,-27}, -{57,3,-26}, -{57,3,-25}, -{57,3,-24}, -{57,3,-23}, -{57,3,-22}, -{57,3,-21}, -{57,3,-20}, -{57,3,-19}, -{57,3,-18}, -{57,3,-17}, -{57,3,-16}, -{57,3,-15}, -{57,3,-14}, -{57,3,-13}, -{57,3,-12}, -{57,3,-11}, -{57,3,-10}, -{57,3,-9}, -{57,3,-8}, -{57,3,-7}, -{57,3,-6}, -{57,3,-5}, -{57,3,-4}, -{57,3,-3}, -{57,3,-2}, -{57,3,-1}, -{57,3,0}, -{57,3,1}, -{57,3,2}, -{57,3,3}, -{57,3,4}, -{57,3,5}, -{57,3,6}, -{57,3,7}, -{57,3,8}, -{57,3,9}, -{57,3,10}, -{57,3,11}, -{57,3,12}, -{57,3,13}, -{57,3,14}, -{57,3,15}, -{57,3,16}, -{57,3,17}, -{57,3,18}, -{57,3,19}, -{57,3,20}, -{57,3,21}, -{57,3,22}, -{57,3,23}, -{57,3,24}, -{57,3,25}, -{57,3,26}, -{57,3,27}, -{57,3,28}, -{57,3,29}, -{57,3,30}, -{57,3,31}, -{57,3,32}, -{57,3,33}, -{57,3,34}, -{57,3,35}, -{57,3,36}, -{57,3,37}, -{57,3,38}, -{57,3,39}, -{57,3,40}, -{57,3,41}, -{57,3,42}, -{57,3,43}, -{57,3,44}, -{57,3,45}, -{57,3,46}, -{57,3,47}, -{57,3,48}, -{57,3,49}, -{57,3,50}, -{57,3,51}, -{57,3,52}, -{57,3,53}, -{57,3,54}, -{57,3,55}, -{57,3,56}, -{57,3,57}, -{57,3,58}, -{57,3,59}, -{57,3,60}, -{57,3,61}, -{57,3,62}, -{57,4,-57}, -{57,4,-56}, -{57,4,-55}, -{57,4,-54}, -{57,4,-53}, -{57,4,-52}, -{57,4,-51}, -{57,4,-50}, -{57,4,-49}, -{57,4,-48}, -{57,4,-47}, -{57,4,-46}, -{57,4,-45}, -{57,4,-44}, -{57,4,-43}, -{57,4,-42}, -{57,4,-41}, -{57,4,-40}, -{57,4,-39}, -{57,4,-38}, -{57,4,-37}, -{57,4,-36}, -{57,4,-35}, -{57,4,-34}, -{57,4,-33}, -{57,4,-32}, -{57,4,-31}, -{57,4,-30}, -{57,4,-29}, -{57,4,-28}, -{57,4,-27}, -{57,4,-26}, -{57,4,-25}, -{57,4,-24}, -{57,4,-23}, -{57,4,-22}, -{57,4,-21}, -{57,4,-20}, -{57,4,-19}, -{57,4,-18}, -{57,4,-17}, -{57,4,-16}, -{57,4,-15}, -{57,4,-14}, -{57,4,-13}, -{57,4,-12}, -{57,4,-11}, -{57,4,-10}, -{57,4,-9}, -{57,4,-8}, -{57,4,-7}, -{57,4,-6}, -{57,4,-5}, -{57,4,-4}, -{57,4,-3}, -{57,4,-2}, -{57,4,-1}, -{57,4,0}, -{57,4,1}, -{57,4,2}, -{57,4,3}, -{57,4,4}, -{57,4,5}, -{57,4,6}, -{57,4,7}, -{57,4,8}, -{57,4,9}, -{57,4,10}, -{57,4,11}, -{57,4,12}, -{57,4,13}, -{57,4,14}, -{57,4,15}, -{57,4,16}, -{57,4,17}, -{57,4,18}, -{57,4,19}, -{57,4,20}, -{57,4,21}, -{57,4,22}, -{57,4,23}, -{57,4,24}, -{57,4,25}, -{57,4,26}, -{57,4,27}, -{57,4,28}, -{57,4,29}, -{57,4,30}, -{57,4,31}, -{57,4,32}, -{57,4,33}, -{57,4,34}, -{57,4,35}, -{57,4,36}, -{57,4,37}, -{57,4,38}, -{57,4,39}, -{57,4,40}, -{57,4,41}, -{57,4,42}, -{57,4,43}, -{57,4,44}, -{57,4,45}, -{57,4,46}, -{57,4,47}, -{57,4,48}, -{57,4,49}, -{57,4,50}, -{57,4,51}, -{57,4,52}, -{57,4,53}, -{57,4,54}, -{57,4,55}, -{57,4,56}, -{57,4,57}, -{57,4,58}, -{57,4,59}, -{57,4,60}, -{57,4,61}, -{57,4,62}, -{57,5,-58}, -{57,5,-57}, -{57,5,-56}, -{57,5,-55}, -{57,5,-54}, -{57,5,-53}, -{57,5,-52}, -{57,5,-51}, -{57,5,-50}, -{57,5,-49}, -{57,5,-48}, -{57,5,-47}, -{57,5,-46}, -{57,5,-45}, -{57,5,-44}, -{57,5,-43}, -{57,5,-42}, -{57,5,-41}, -{57,5,-40}, -{57,5,-39}, -{57,5,-38}, -{57,5,-37}, -{57,5,-36}, -{57,5,-35}, -{57,5,-34}, -{57,5,-33}, -{57,5,-32}, -{57,5,-31}, -{57,5,-30}, -{57,5,-29}, -{57,5,-28}, -{57,5,-27}, -{57,5,-26}, -{57,5,-25}, -{57,5,-24}, -{57,5,-23}, -{57,5,-22}, -{57,5,-21}, -{57,5,-20}, -{57,5,-19}, -{57,5,-18}, -{57,5,-17}, -{57,5,-16}, -{57,5,-15}, -{57,5,-14}, -{57,5,-13}, -{57,5,-12}, -{57,5,-11}, -{57,5,-10}, -{57,5,-9}, -{57,5,-8}, -{57,5,-7}, -{57,5,-6}, -{57,5,-5}, -{57,5,-4}, -{57,5,-3}, -{57,5,-2}, -{57,5,-1}, -{57,5,0}, -{57,5,1}, -{57,5,2}, -{57,5,3}, -{57,5,4}, -{57,5,5}, -{57,5,6}, -{57,5,7}, -{57,5,8}, -{57,5,9}, -{57,5,10}, -{57,5,11}, -{57,5,12}, -{57,5,13}, -{57,5,14}, -{57,5,15}, -{57,5,16}, -{57,5,17}, -{57,5,18}, -{57,5,19}, -{57,5,20}, -{57,5,21}, -{57,5,22}, -{57,5,23}, -{57,5,24}, -{57,5,25}, -{57,5,26}, -{57,5,27}, -{57,5,28}, -{57,5,29}, -{57,5,30}, -{57,5,31}, -{57,5,32}, -{57,5,33}, -{57,5,34}, -{57,5,35}, -{57,5,36}, -{57,5,37}, -{57,5,38}, -{57,5,39}, -{57,5,40}, -{57,5,41}, -{57,5,42}, -{57,5,43}, -{57,5,44}, -{57,5,45}, -{57,5,46}, -{57,5,47}, -{57,5,48}, -{57,5,49}, -{57,5,50}, -{57,5,51}, -{57,5,52}, -{57,5,53}, -{57,5,54}, -{57,5,55}, -{57,5,56}, -{57,5,57}, -{57,5,58}, -{57,5,59}, -{57,5,60}, -{57,5,61}, -{57,5,62}, -{57,6,-59}, -{57,6,-58}, -{57,6,-57}, -{57,6,-56}, -{57,6,-55}, -{57,6,-54}, -{57,6,-53}, -{57,6,-52}, -{57,6,-51}, -{57,6,-50}, -{57,6,-49}, -{57,6,-48}, -{57,6,-47}, -{57,6,-46}, -{57,6,-45}, -{57,6,-44}, -{57,6,-43}, -{57,6,-42}, -{57,6,-41}, -{57,6,-40}, -{57,6,-39}, -{57,6,-38}, -{57,6,-37}, -{57,6,-36}, -{57,6,-35}, -{57,6,-34}, -{57,6,-33}, -{57,6,-32}, -{57,6,-31}, -{57,6,-30}, -{57,6,-29}, -{57,6,-28}, -{57,6,-27}, -{57,6,-26}, -{57,6,-25}, -{57,6,-24}, -{57,6,-23}, -{57,6,-22}, -{57,6,-21}, -{57,6,-20}, -{57,6,-19}, -{57,6,-18}, -{57,6,-17}, -{57,6,-16}, -{57,6,-15}, -{57,6,-14}, -{57,6,-13}, -{57,6,-12}, -{57,6,-11}, -{57,6,-10}, -{57,6,-9}, -{57,6,-8}, -{57,6,-7}, -{57,6,-6}, -{57,6,-5}, -{57,6,-4}, -{57,6,-3}, -{57,6,-2}, -{57,6,-1}, -{57,6,0}, -{57,6,1}, -{57,6,2}, -{57,6,3}, -{57,6,4}, -{57,6,5}, -{57,6,6}, -{57,6,7}, -{57,6,8}, -{57,6,9}, -{57,6,10}, -{57,6,11}, -{57,6,12}, -{57,6,13}, -{57,6,14}, -{57,6,15}, -{57,6,16}, -{57,6,17}, -{57,6,18}, -{57,6,19}, -{57,6,20}, -{57,6,21}, -{57,6,22}, -{57,6,23}, -{57,6,24}, -{57,6,25}, -{57,6,26}, -{57,6,27}, -{57,6,28}, -{57,6,29}, -{57,6,30}, -{57,6,31}, -{57,6,32}, -{57,6,33}, -{57,6,34}, -{57,6,35}, -{57,6,36}, -{57,6,37}, -{57,6,38}, -{57,6,39}, -{57,6,40}, -{57,6,41}, -{57,6,42}, -{57,6,43}, -{57,6,44}, -{57,6,45}, -{57,6,46}, -{57,6,47}, -{57,6,48}, -{57,6,49}, -{57,6,50}, -{57,6,51}, -{57,6,52}, -{57,6,53}, -{57,6,54}, -{57,6,55}, -{57,6,56}, -{57,6,57}, -{57,6,58}, -{57,6,59}, -{57,6,60}, -{57,6,61}, -{57,6,62}, -{57,7,-60}, -{57,7,-59}, -{57,7,-58}, -{57,7,-57}, -{57,7,-56}, -{57,7,-55}, -{57,7,-54}, -{57,7,-53}, -{57,7,-52}, -{57,7,-51}, -{57,7,-50}, -{57,7,-49}, -{57,7,-48}, -{57,7,-47}, -{57,7,-46}, -{57,7,-45}, -{57,7,-44}, -{57,7,-43}, -{57,7,-42}, -{57,7,-41}, -{57,7,-40}, -{57,7,-39}, -{57,7,-38}, -{57,7,-37}, -{57,7,-36}, -{57,7,-35}, -{57,7,-34}, -{57,7,-33}, -{57,7,-32}, -{57,7,-31}, -{57,7,-30}, -{57,7,-29}, -{57,7,-28}, -{57,7,-27}, -{57,7,-26}, -{57,7,-25}, -{57,7,-24}, -{57,7,-23}, -{57,7,-22}, -{57,7,-21}, -{57,7,-20}, -{57,7,-19}, -{57,7,-18}, -{57,7,-17}, -{57,7,-16}, -{57,7,-15}, -{57,7,-14}, -{57,7,-13}, -{57,7,-12}, -{57,7,-11}, -{57,7,-10}, -{57,7,-9}, -{57,7,-8}, -{57,7,-7}, -{57,7,-6}, -{57,7,-5}, -{57,7,-4}, -{57,7,-3}, -{57,7,-2}, -{57,7,-1}, -{57,7,0}, -{57,7,1}, -{57,7,2}, -{57,7,3}, -{57,7,4}, -{57,7,5}, -{57,7,6}, -{57,7,7}, -{57,7,8}, -{57,7,9}, -{57,7,10}, -{57,7,11}, -{57,7,12}, -{57,7,13}, -{57,7,14}, -{57,7,15}, -{57,7,16}, -{57,7,17}, -{57,7,18}, -{57,7,19}, -{57,7,20}, -{57,7,21}, -{57,7,22}, -{57,7,23}, -{57,7,24}, -{57,7,25}, -{57,7,26}, -{57,7,27}, -{57,7,28}, -{57,7,29}, -{57,7,30}, -{57,7,31}, -{57,7,32}, -{57,7,33}, -{57,7,34}, -{57,7,35}, -{57,7,36}, -{57,7,37}, -{57,7,38}, -{57,7,39}, -{57,7,40}, -{57,7,41}, -{57,7,42}, -{57,7,43}, -{57,7,44}, -{57,7,45}, -{57,7,46}, -{57,7,47}, -{57,7,48}, -{57,7,49}, -{57,7,50}, -{57,7,51}, -{57,7,52}, -{57,7,53}, -{57,7,54}, -{57,7,55}, -{57,7,56}, -{57,7,57}, -{57,7,58}, -{57,7,59}, -{57,7,60}, -{57,7,61}, -{57,7,62}, -{57,8,-61}, -{57,8,-60}, -{57,8,-59}, -{57,8,-58}, -{57,8,-57}, -{57,8,-56}, -{57,8,-55}, -{57,8,-54}, -{57,8,-53}, -{57,8,-52}, -{57,8,-51}, -{57,8,-50}, -{57,8,-49}, -{57,8,-48}, -{57,8,-47}, -{57,8,-46}, -{57,8,-45}, -{57,8,-44}, -{57,8,-43}, -{57,8,-42}, -{57,8,-41}, -{57,8,-40}, -{57,8,-39}, -{57,8,-38}, -{57,8,-37}, -{57,8,-36}, -{57,8,-35}, -{57,8,-34}, -{57,8,-33}, -{57,8,-32}, -{57,8,-31}, -{57,8,-30}, -{57,8,-29}, -{57,8,-28}, -{57,8,-27}, -{57,8,-26}, -{57,8,-25}, -{57,8,-24}, -{57,8,-23}, -{57,8,-22}, -{57,8,-21}, -{57,8,-20}, -{57,8,-19}, -{57,8,-18}, -{57,8,-17}, -{57,8,-16}, -{57,8,-15}, -{57,8,-14}, -{57,8,-13}, -{57,8,-12}, -{57,8,-11}, -{57,8,-10}, -{57,8,-9}, -{57,8,-8}, -{57,8,-7}, -{57,8,-6}, -{57,8,-5}, -{57,8,-4}, -{57,8,-3}, -{57,8,-2}, -{57,8,-1}, -{57,8,0}, -{57,8,1}, -{57,8,2}, -{57,8,3}, -{57,8,4}, -{57,8,5}, -{57,8,6}, -{57,8,7}, -{57,8,8}, -{57,8,9}, -{57,8,10}, -{57,8,11}, -{57,8,12}, -{57,8,13}, -{57,8,14}, -{57,8,15}, -{57,8,16}, -{57,8,17}, -{57,8,18}, -{57,8,19}, -{57,8,20}, -{57,8,21}, -{57,8,22}, -{57,8,23}, -{57,8,24}, -{57,8,25}, -{57,8,26}, -{57,8,27}, -{57,8,28}, -{57,8,29}, -{57,8,30}, -{57,8,31}, -{57,8,32}, -{57,8,33}, -{57,8,34}, -{57,8,35}, -{57,8,36}, -{57,8,37}, -{57,8,38}, -{57,8,39}, -{57,8,40}, -{57,8,41}, -{57,8,42}, -{57,8,43}, -{57,8,44}, -{57,8,45}, -{57,8,46}, -{57,8,47}, -{57,8,48}, -{57,8,49}, -{57,8,50}, -{57,8,51}, -{57,8,52}, -{57,8,53}, -{57,8,54}, -{57,8,55}, -{57,8,56}, -{57,8,57}, -{57,8,58}, -{57,8,59}, -{57,8,60}, -{57,8,61}, -{57,8,62}, -{57,9,-62}, -{57,9,-61}, -{57,9,-60}, -{57,9,-59}, -{57,9,-58}, -{57,9,-57}, -{57,9,-56}, -{57,9,-55}, -{57,9,-54}, -{57,9,-53}, -{57,9,-52}, -{57,9,-51}, -{57,9,-50}, -{57,9,-49}, -{57,9,-48}, -{57,9,-47}, -{57,9,-46}, -{57,9,-45}, -{57,9,-44}, -{57,9,-43}, -{57,9,-42}, -{57,9,-41}, -{57,9,-40}, -{57,9,-39}, -{57,9,-38}, -{57,9,-37}, -{57,9,-36}, -{57,9,-35}, -{57,9,-34}, -{57,9,-33}, -{57,9,-32}, -{57,9,-31}, -{57,9,-30}, -{57,9,-29}, -{57,9,-28}, -{57,9,-27}, -{57,9,-26}, -{57,9,-25}, -{57,9,-24}, -{57,9,-23}, -{57,9,-22}, -{57,9,-21}, -{57,9,-20}, -{57,9,-19}, -{57,9,-18}, -{57,9,-17}, -{57,9,-16}, -{57,9,-15}, -{57,9,-14}, -{57,9,-13}, -{57,9,-12}, -{57,9,-11}, -{57,9,-10}, -{57,9,-9}, -{57,9,-8}, -{57,9,-7}, -{57,9,-6}, -{57,9,-5}, -{57,9,-4}, -{57,9,-3}, -{57,9,-2}, -{57,9,-1}, -{57,9,0}, -{57,9,1}, -{57,9,2}, -{57,9,3}, -{57,9,4}, -{57,9,5}, -{57,9,6}, -{57,9,7}, -{57,9,8}, -{57,9,9}, -{57,9,10}, -{57,9,11}, -{57,9,12}, -{57,9,13}, -{57,9,14}, -{57,9,15}, -{57,9,16}, -{57,9,17}, -{57,9,18}, -{57,9,19}, -{57,9,20}, -{57,9,21}, -{57,9,22}, -{57,9,23}, -{57,9,24}, -{57,9,25}, -{57,9,26}, -{57,9,27}, -{57,9,28}, -{57,9,29}, -{57,9,30}, -{57,9,31}, -{57,9,32}, -{57,9,33}, -{57,9,34}, -{57,9,35}, -{57,9,36}, -{57,9,37}, -{57,9,38}, -{57,9,39}, -{57,9,40}, -{57,9,41}, -{57,9,42}, -{57,9,43}, -{57,9,44}, -{57,9,45}, -{57,9,46}, -{57,9,47}, -{57,9,48}, -{57,9,49}, -{57,9,50}, -{57,9,51}, -{57,9,52}, -{57,9,53}, -{57,9,54}, -{57,9,55}, -{57,9,56}, -{57,9,57}, -{57,9,58}, -{57,9,59}, -{57,9,60}, -{57,9,61}, -{57,9,62}, -{57,10,-63}, -{57,10,-62}, -{57,10,-61}, -{57,10,-60}, -{57,10,-59}, -{57,10,-58}, -{57,10,-57}, -{57,10,-56}, -{57,10,-55}, -{57,10,-54}, -{57,10,-53}, -{57,10,-52}, -{57,10,-51}, -{57,10,-50}, -{57,10,-49}, -{57,10,-48}, -{57,10,-47}, -{57,10,-46}, -{57,10,-45}, -{57,10,-44}, -{57,10,-43}, -{57,10,-42}, -{57,10,-41}, -{57,10,-40}, -{57,10,-39}, -{57,10,-38}, -{57,10,-37}, -{57,10,-36}, -{57,10,-35}, -{57,10,-34}, -{57,10,-33}, -{57,10,-32}, -{57,10,-31}, -{57,10,-30}, -{57,10,-29}, -{57,10,-28}, -{57,10,-27}, -{57,10,-26}, -{57,10,-25}, -{57,10,-24}, -{57,10,-23}, -{57,10,-22}, -{57,10,-21}, -{57,10,-20}, -{57,10,-19}, -{57,10,-18}, -{57,10,-17}, -{57,10,-16}, -{57,10,-15}, -{57,10,-14}, -{57,10,-13}, -{57,10,-12}, -{57,10,-11}, -{57,10,-10}, -{57,10,-9}, -{57,10,-8}, -{57,10,-7}, -{57,10,-6}, -{57,10,-5}, -{57,10,-4}, -{57,10,-3}, -{57,10,-2}, -{57,10,-1}, -{57,10,0}, -{57,10,1}, -{57,10,2}, -{57,10,3}, -{57,10,4}, -{57,10,5}, -{57,10,6}, -{57,10,7}, -{57,10,8}, -{57,10,9}, -{57,10,10}, -{57,10,11}, -{57,10,12}, -{57,10,13}, -{57,10,14}, -{57,10,15}, -{57,10,16}, -{57,10,17}, -{57,10,18}, -{57,10,19}, -{57,10,20}, -{57,10,21}, -{57,10,22}, -{57,10,23}, -{57,10,24}, -{57,10,25}, -{57,10,26}, -{57,10,27}, -{57,10,28}, -{57,10,29}, -{57,10,30}, -{57,10,31}, -{57,10,32}, -{57,10,33}, -{57,10,34}, -{57,10,35}, -{57,10,36}, -{57,10,37}, -{57,10,38}, -{57,10,39}, -{57,10,40}, -{57,10,41}, -{57,10,42}, -{57,10,43}, -{57,10,44}, -{57,10,45}, -{57,10,46}, -{57,10,47}, -{57,10,48}, -{57,10,49}, -{57,10,50}, -{57,10,51}, -{57,10,52}, -{57,10,53}, -{57,10,54}, -{57,10,55}, -{57,10,56}, -{57,10,57}, -{57,10,58}, -{57,10,59}, -{57,10,60}, -{57,10,61}, -{57,10,62}, -{57,11,-64}, -{57,11,-63}, -{57,11,-62}, -{57,11,-61}, -{57,11,-60}, -{57,11,-59}, -{57,11,-58}, -{57,11,-57}, -{57,11,-56}, -{57,11,-55}, -{57,11,-54}, -{57,11,-53}, -{57,11,-52}, -{57,11,-51}, -{57,11,-50}, -{57,11,-49}, -{57,11,-48}, -{57,11,-47}, -{57,11,-46}, -{57,11,-45}, -{57,11,-44}, -{57,11,-43}, -{57,11,-42}, -{57,11,-41}, -{57,11,-40}, -{57,11,-39}, -{57,11,-38}, -{57,11,-37}, -{57,11,-36}, -{57,11,-35}, -{57,11,-34}, -{57,11,-33}, -{57,11,-32}, -{57,11,-31}, -{57,11,-30}, -{57,11,-29}, -{57,11,-28}, -{57,11,-27}, -{57,11,-26}, -{57,11,-25}, -{57,11,-24}, -{57,11,-23}, -{57,11,-22}, -{57,11,-21}, -{57,11,-20}, -{57,11,-19}, -{57,11,-18}, -{57,11,-17}, -{57,11,-16}, -{57,11,-15}, -{57,11,-14}, -{57,11,-13}, -{57,11,-12}, -{57,11,-11}, -{57,11,-10}, -{57,11,-9}, -{57,11,-8}, -{57,11,-7}, -{57,11,-6}, -{57,11,-5}, -{57,11,-4}, -{57,11,-3}, -{57,11,-2}, -{57,11,-1}, -{57,11,0}, -{57,11,1}, -{57,11,2}, -{57,11,3}, -{57,11,4}, -{57,11,5}, -{57,11,6}, -{57,11,7}, -{57,11,8}, -{57,11,9}, -{57,11,10}, -{57,11,11}, -{57,11,12}, -{57,11,13}, -{57,11,14}, -{57,11,15}, -{57,11,16}, -{57,11,17}, -{57,11,18}, -{57,11,19}, -{57,11,20}, -{57,11,21}, -{57,11,22}, -{57,11,23}, -{57,11,24}, -{57,11,25}, -{57,11,26}, -{57,11,27}, -{57,11,28}, -{57,11,29}, -{57,11,30}, -{57,11,31}, -{57,11,32}, -{57,11,33}, -{57,11,34}, -{57,11,35}, -{57,11,36}, -{57,11,37}, -{57,11,38}, -{57,11,39}, -{57,11,40}, -{57,11,41}, -{57,11,42}, -{57,11,43}, -{57,11,44}, -{57,11,45}, -{57,11,46}, -{57,11,47}, -{57,11,48}, -{57,11,49}, -{57,11,50}, -{57,11,51}, -{57,11,52}, -{57,11,53}, -{57,11,54}, -{57,11,55}, -{57,11,56}, -{57,11,57}, -{57,11,58}, -{57,11,59}, -{57,11,60}, -{57,11,61}, -{57,11,62}, -{57,12,-65}, -{57,12,-64}, -{57,12,-63}, -{57,12,-62}, -{57,12,-61}, -{57,12,-60}, -{57,12,-59}, -{57,12,-58}, -{57,12,-57}, -{57,12,-56}, -{57,12,-55}, -{57,12,-54}, -{57,12,-53}, -{57,12,-52}, -{57,12,-51}, -{57,12,-50}, -{57,12,-49}, -{57,12,-48}, -{57,12,-47}, -{57,12,-46}, -{57,12,-45}, -{57,12,-44}, -{57,12,-43}, -{57,12,-42}, -{57,12,-41}, -{57,12,-40}, -{57,12,-39}, -{57,12,-38}, -{57,12,-37}, -{57,12,-36}, -{57,12,-35}, -{57,12,-34}, -{57,12,-33}, -{57,12,-32}, -{57,12,-31}, -{57,12,-30}, -{57,12,-29}, -{57,12,-28}, -{57,12,-27}, -{57,12,-26}, -{57,12,-25}, -{57,12,-24}, -{57,12,-23}, -{57,12,-22}, -{57,12,-21}, -{57,12,-20}, -{57,12,-19}, -{57,12,-18}, -{57,12,-17}, -{57,12,-16}, -{57,12,-15}, -{57,12,-14}, -{57,12,-13}, -{57,12,-12}, -{57,12,-11}, -{57,12,-10}, -{57,12,-9}, -{57,12,-8}, -{57,12,-7}, -{57,12,-6}, -{57,12,-5}, -{57,12,-4}, -{57,12,-3}, -{57,12,-2}, -{57,12,-1}, -{57,12,0}, -{57,12,1}, -{57,12,2}, -{57,12,3}, -{57,12,4}, -{57,12,5}, -{57,12,6}, -{57,12,7}, -{57,12,8}, -{57,12,9}, -{57,12,10}, -{57,12,11}, -{57,12,12}, -{57,12,13}, -{57,12,14}, -{57,12,15}, -{57,12,16}, -{57,12,17}, -{57,12,18}, -{57,12,19}, -{57,12,20}, -{57,12,21}, -{57,12,22}, -{57,12,23}, -{57,12,24}, -{57,12,25}, -{57,12,26}, -{57,12,27}, -{57,12,28}, -{57,12,29}, -{57,12,30}, -{57,12,31}, -{57,12,32}, -{57,12,33}, -{57,12,34}, -{57,12,35}, -{57,12,36}, -{57,12,37}, -{57,12,38}, -{57,12,39}, -{57,12,40}, -{57,12,41}, -{57,12,42}, -{57,12,43}, -{57,12,44}, -{57,12,45}, -{57,12,46}, -{57,12,47}, -{57,12,48}, -{57,12,49}, -{57,12,50}, -{57,12,51}, -{57,12,52}, -{57,12,53}, -{57,12,54}, -{57,12,55}, -{57,12,56}, -{57,12,57}, -{57,12,58}, -{57,12,59}, -{57,12,60}, -{57,12,61}, -{57,12,62}, -{57,13,-66}, -{57,13,-65}, -{57,13,-64}, -{57,13,-63}, -{57,13,-62}, -{57,13,-61}, -{57,13,-60}, -{57,13,-59}, -{57,13,-58}, -{57,13,-57}, -{57,13,-56}, -{57,13,-55}, -{57,13,-54}, -{57,13,-53}, -{57,13,-52}, -{57,13,-51}, -{57,13,-50}, -{57,13,-49}, -{57,13,-48}, -{57,13,-47}, -{57,13,-46}, -{57,13,-45}, -{57,13,-44}, -{57,13,-43}, -{57,13,-42}, -{57,13,-41}, -{57,13,-40}, -{57,13,-39}, -{57,13,-38}, -{57,13,-37}, -{57,13,-36}, -{57,13,-35}, -{57,13,-34}, -{57,13,-33}, -{57,13,-32}, -{57,13,-31}, -{57,13,-30}, -{57,13,-29}, -{57,13,-28}, -{57,13,-27}, -{57,13,-26}, -{57,13,-25}, -{57,13,-24}, -{57,13,-23}, -{57,13,-22}, -{57,13,-21}, -{57,13,-20}, -{57,13,-19}, -{57,13,-18}, -{57,13,-17}, -{57,13,-16}, -{57,13,-15}, -{57,13,-14}, -{57,13,-13}, -{57,13,-12}, -{57,13,-11}, -{57,13,-10}, -{57,13,-9}, -{57,13,-8}, -{57,13,-7}, -{57,13,-6}, -{57,13,-5}, -{57,13,-4}, -{57,13,-3}, -{57,13,-2}, -{57,13,-1}, -{57,13,0}, -{57,13,1}, -{57,13,2}, -{57,13,3}, -{57,13,4}, -{57,13,5}, -{57,13,6}, -{57,13,7}, -{57,13,8}, -{57,13,9}, -{57,13,10}, -{57,13,11}, -{57,13,12}, -{57,13,13}, -{57,13,14}, -{57,13,15}, -{57,13,16}, -{57,13,17}, -{57,13,18}, -{57,13,19}, -{57,13,20}, -{57,13,21}, -{57,13,22}, -{57,13,23}, -{57,13,24}, -{57,13,25}, -{57,13,26}, -{57,13,27}, -{57,13,28}, -{57,13,29}, -{57,13,30}, -{57,13,31}, -{57,13,32}, -{57,13,33}, -{57,13,34}, -{57,13,35}, -{57,13,36}, -{57,13,37}, -{57,13,38}, -{57,13,39}, -{57,13,40}, -{57,13,41}, -{57,13,42}, -{57,13,43}, -{57,13,44}, -{57,13,45}, -{57,13,46}, -{57,13,47}, -{57,13,48}, -{57,13,49}, -{57,13,50}, -{57,13,51}, -{57,13,52}, -{57,13,53}, -{57,13,54}, -{57,13,55}, -{57,13,56}, -{57,13,57}, -{57,13,58}, -{57,13,59}, -{57,13,60}, -{57,13,61}, -{57,13,62}, -{57,13,63}, -{57,14,-67}, -{57,14,-66}, -{57,14,-65}, -{57,14,-64}, -{57,14,-63}, -{57,14,-62}, -{57,14,-61}, -{57,14,-60}, -{57,14,-59}, -{57,14,-58}, -{57,14,-57}, -{57,14,-56}, -{57,14,-55}, -{57,14,-54}, -{57,14,-53}, -{57,14,-52}, -{57,14,-51}, -{57,14,-50}, -{57,14,-49}, -{57,14,-48}, -{57,14,-47}, -{57,14,-46}, -{57,14,-45}, -{57,14,-44}, -{57,14,-43}, -{57,14,-42}, -{57,14,-41}, -{57,14,-40}, -{57,14,-39}, -{57,14,-38}, -{57,14,-37}, -{57,14,-36}, -{57,14,-35}, -{57,14,-34}, -{57,14,-33}, -{57,14,-32}, -{57,14,-31}, -{57,14,-30}, -{57,14,-29}, -{57,14,-28}, -{57,14,-27}, -{57,14,-26}, -{57,14,-25}, -{57,14,-24}, -{57,14,-23}, -{57,14,-22}, -{57,14,-21}, -{57,14,-20}, -{57,14,-19}, -{57,14,-18}, -{57,14,-17}, -{57,14,-16}, -{57,14,-15}, -{57,14,-14}, -{57,14,-13}, -{57,14,-12}, -{57,14,-11}, -{57,14,-10}, -{57,14,-9}, -{57,14,-8}, -{57,14,-7}, -{57,14,-6}, -{57,14,-5}, -{57,14,-4}, -{57,14,-3}, -{57,14,-2}, -{57,14,-1}, -{57,14,0}, -{57,14,1}, -{57,14,2}, -{57,14,3}, -{57,14,4}, -{57,14,5}, -{57,14,6}, -{57,14,7}, -{57,14,8}, -{57,14,9}, -{57,14,10}, -{57,14,11}, -{57,14,12}, -{57,14,13}, -{57,14,14}, -{57,14,15}, -{57,14,16}, -{57,14,17}, -{57,14,18}, -{57,14,19}, -{57,14,20}, -{57,14,21}, -{57,14,22}, -{57,14,23}, -{57,14,24}, -{57,14,25}, -{57,14,26}, -{57,14,27}, -{57,14,28}, -{57,14,29}, -{57,14,30}, -{57,14,31}, -{57,14,32}, -{57,14,33}, -{57,14,34}, -{57,14,35}, -{57,14,36}, -{57,14,37}, -{57,14,38}, -{57,14,39}, -{57,14,40}, -{57,14,41}, -{57,14,42}, -{57,14,43}, -{57,14,44}, -{57,14,45}, -{57,14,46}, -{57,14,47}, -{57,14,48}, -{57,14,49}, -{57,14,50}, -{57,14,51}, -{57,14,52}, -{57,14,53}, -{57,14,54}, -{57,14,55}, -{57,14,56}, -{57,14,57}, -{57,14,58}, -{57,14,59}, -{57,14,60}, -{57,14,61}, -{57,14,62}, -{57,14,63}, -{57,15,-67}, -{57,15,-66}, -{57,15,-65}, -{57,15,-64}, -{57,15,-63}, -{57,15,-62}, -{57,15,-61}, -{57,15,-60}, -{57,15,-59}, -{57,15,-58}, -{57,15,-57}, -{57,15,-56}, -{57,15,-55}, -{57,15,-54}, -{57,15,-53}, -{57,15,-52}, -{57,15,-51}, -{57,15,-50}, -{57,15,-49}, -{57,15,-48}, -{57,15,-47}, -{57,15,-46}, -{57,15,-45}, -{57,15,-44}, -{57,15,-43}, -{57,15,-42}, -{57,15,-41}, -{57,15,-40}, -{57,15,-39}, -{57,15,-38}, -{57,15,-37}, -{57,15,-36}, -{57,15,-35}, -{57,15,-34}, -{57,15,-33}, -{57,15,-32}, -{57,15,-31}, -{57,15,-30}, -{57,15,-29}, -{57,15,-28}, -{57,15,-27}, -{57,15,-26}, -{57,15,-25}, -{57,15,-24}, -{57,15,-23}, -{57,15,-22}, -{57,15,-21}, -{57,15,-20}, -{57,15,-19}, -{57,15,-18}, -{57,15,-17}, -{57,15,-16}, -{57,15,-15}, -{57,15,-14}, -{57,15,-13}, -{57,15,-12}, -{57,15,-11}, -{57,15,-10}, -{57,15,-9}, -{57,15,-8}, -{57,15,-7}, -{57,15,-6}, -{57,15,-5}, -{57,15,-4}, -{57,15,-3}, -{57,15,-2}, -{57,15,-1}, -{57,15,0}, -{57,15,1}, -{57,15,2}, -{57,15,3}, -{57,15,4}, -{57,15,5}, -{57,15,6}, -{57,15,7}, -{57,15,8}, -{57,15,9}, -{57,15,10}, -{57,15,11}, -{57,15,12}, -{57,15,13}, -{57,15,14}, -{57,15,15}, -{57,15,16}, -{57,15,17}, -{57,15,18}, -{57,15,19}, -{57,15,20}, -{57,15,21}, -{57,15,22}, -{57,15,23}, -{57,15,24}, -{57,15,25}, -{57,15,26}, -{57,15,27}, -{57,15,28}, -{57,15,29}, -{57,15,30}, -{57,15,31}, -{57,15,32}, -{57,15,33}, -{57,15,34}, -{57,15,35}, -{57,15,36}, -{57,15,37}, -{57,15,38}, -{57,15,39}, -{57,15,40}, -{57,15,41}, -{57,15,42}, -{57,15,43}, -{57,15,44}, -{57,15,45}, -{57,15,46}, -{57,15,47}, -{57,15,48}, -{57,15,49}, -{57,15,50}, -{57,15,51}, -{57,15,52}, -{57,15,53}, -{57,15,54}, -{57,15,55}, -{57,15,56}, -{57,15,57}, -{57,15,58}, -{57,15,59}, -{57,15,60}, -{57,15,61}, -{57,15,62}, -{57,15,63}, -{57,16,-67}, -{57,16,-66}, -{57,16,-65}, -{57,16,-64}, -{57,16,-63}, -{57,16,-62}, -{57,16,-61}, -{57,16,-60}, -{57,16,-59}, -{57,16,-58}, -{57,16,-57}, -{57,16,-56}, -{57,16,-55}, -{57,16,-54}, -{57,16,-53}, -{57,16,-52}, -{57,16,-51}, -{57,16,-50}, -{57,16,-49}, -{57,16,-48}, -{57,16,-47}, -{57,16,-46}, -{57,16,-45}, -{57,16,-44}, -{57,16,-43}, -{57,16,-42}, -{57,16,-41}, -{57,16,-40}, -{57,16,-39}, -{57,16,-38}, -{57,16,-37}, -{57,16,-36}, -{57,16,-35}, -{57,16,-34}, -{57,16,-33}, -{57,16,-32}, -{57,16,-31}, -{57,16,-30}, -{57,16,-29}, -{57,16,-28}, -{57,16,-27}, -{57,16,-26}, -{57,16,-25}, -{57,16,-24}, -{57,16,-23}, -{57,16,-22}, -{57,16,-21}, -{57,16,-20}, -{57,16,-19}, -{57,16,-18}, -{57,16,-17}, -{57,16,-16}, -{57,16,-15}, -{57,16,-14}, -{57,16,-13}, -{57,16,-12}, -{57,16,-11}, -{57,16,-10}, -{57,16,-9}, -{57,16,-8}, -{57,16,-7}, -{57,16,-6}, -{57,16,-5}, -{57,16,-4}, -{57,16,-3}, -{57,16,-2}, -{57,16,-1}, -{57,16,0}, -{57,16,1}, -{57,16,2}, -{57,16,3}, -{57,16,4}, -{57,16,5}, -{57,16,6}, -{57,16,7}, -{57,16,8}, -{57,16,9}, -{57,16,10}, -{57,16,11}, -{57,16,12}, -{57,16,13}, -{57,16,14}, -{57,16,15}, -{57,16,16}, -{57,16,17}, -{57,16,18}, -{57,16,19}, -{57,16,20}, -{57,16,21}, -{57,16,22}, -{57,16,23}, -{57,16,24}, -{57,16,25}, -{57,16,26}, -{57,16,27}, -{57,16,28}, -{57,16,29}, -{57,16,30}, -{57,16,31}, -{57,16,32}, -{57,16,33}, -{57,16,34}, -{57,16,35}, -{57,16,36}, -{57,16,37}, -{57,16,38}, -{57,16,39}, -{57,16,40}, -{57,16,41}, -{57,16,42}, -{57,16,43}, -{57,16,44}, -{57,16,45}, -{57,16,46}, -{57,16,47}, -{57,16,48}, -{57,16,49}, -{57,16,50}, -{57,16,51}, -{57,16,52}, -{57,16,53}, -{57,16,54}, -{57,16,55}, -{57,16,56}, -{57,16,57}, -{57,16,58}, -{57,16,59}, -{57,16,60}, -{57,16,61}, -{57,16,62}, -{57,16,63}, -{57,17,-67}, -{57,17,-66}, -{57,17,-65}, -{57,17,-64}, -{57,17,-63}, -{57,17,-62}, -{57,17,-61}, -{57,17,-60}, -{57,17,-59}, -{57,17,-58}, -{57,17,-57}, -{57,17,-56}, -{57,17,-55}, -{57,17,-54}, -{57,17,-53}, -{57,17,-52}, -{57,17,-51}, -{57,17,-50}, -{57,17,-49}, -{57,17,-48}, -{57,17,-47}, -{57,17,-46}, -{57,17,-45}, -{57,17,-44}, -{57,17,-43}, -{57,17,-42}, -{57,17,-41}, -{57,17,-40}, -{57,17,-39}, -{57,17,-38}, -{57,17,-37}, -{57,17,-36}, -{57,17,-35}, -{57,17,-34}, -{57,17,-33}, -{57,17,-32}, -{57,17,-31}, -{57,17,-30}, -{57,17,-29}, -{57,17,-28}, -{57,17,-27}, -{57,17,-26}, -{57,17,-25}, -{57,17,-24}, -{57,17,-23}, -{57,17,-22}, -{57,17,-21}, -{57,17,-20}, -{57,17,-19}, -{57,17,-18}, -{57,17,-17}, -{57,17,-16}, -{57,17,-15}, -{57,17,-14}, -{57,17,-13}, -{57,17,-12}, -{57,17,-11}, -{57,17,-10}, -{57,17,-9}, -{57,17,-8}, -{57,17,-7}, -{57,17,-6}, -{57,17,-5}, -{57,17,-4}, -{57,17,-3}, -{57,17,-2}, -{57,17,-1}, -{57,17,0}, -{57,17,1}, -{57,17,2}, -{57,17,3}, -{57,17,4}, -{57,17,5}, -{57,17,6}, -{57,17,7}, -{57,17,8}, -{57,17,9}, -{57,17,10}, -{57,17,11}, -{57,17,12}, -{57,17,13}, -{57,17,14}, -{57,17,15}, -{57,17,16}, -{57,17,17}, -{57,17,18}, -{57,17,19}, -{57,17,20}, -{57,17,21}, -{57,17,22}, -{57,17,23}, -{57,17,24}, -{57,17,25}, -{57,17,26}, -{57,17,27}, -{57,17,28}, -{57,17,29}, -{57,17,30}, -{57,17,31}, -{57,17,32}, -{57,17,33}, -{57,17,34}, -{57,17,35}, -{57,17,36}, -{57,17,37}, -{57,17,38}, -{57,17,39}, -{57,17,40}, -{57,17,41}, -{57,17,42}, -{57,17,43}, -{57,17,44}, -{57,17,45}, -{57,17,46}, -{57,17,47}, -{57,17,48}, -{57,17,49}, -{57,17,50}, -{57,17,51}, -{57,17,52}, -{57,17,53}, -{57,17,54}, -{57,17,55}, -{57,17,56}, -{57,17,57}, -{57,17,58}, -{57,17,59}, -{57,17,60}, -{57,17,61}, -{57,17,62}, -{57,17,63}, -{57,18,-67}, -{57,18,-66}, -{57,18,-65}, -{57,18,-64}, -{57,18,-63}, -{57,18,-62}, -{57,18,-61}, -{57,18,-60}, -{57,18,-59}, -{57,18,-58}, -{57,18,-57}, -{57,18,-56}, -{57,18,-55}, -{57,18,-54}, -{57,18,-53}, -{57,18,-52}, -{57,18,-51}, -{57,18,-50}, -{57,18,-49}, -{57,18,-48}, -{57,18,-47}, -{57,18,-46}, -{57,18,-45}, -{57,18,-44}, -{57,18,-43}, -{57,18,-42}, -{57,18,-41}, -{57,18,-40}, -{57,18,-39}, -{57,18,-38}, -{57,18,-37}, -{57,18,-36}, -{57,18,-35}, -{57,18,-34}, -{57,18,-33}, -{57,18,-32}, -{57,18,-31}, -{57,18,-30}, -{57,18,-29}, -{57,18,-28}, -{57,18,-27}, -{57,18,-26}, -{57,18,-25}, -{57,18,-24}, -{57,18,-23}, -{57,18,-22}, -{57,18,-21}, -{57,18,-20}, -{57,18,-19}, -{57,18,-18}, -{57,18,-17}, -{57,18,-16}, -{57,18,-15}, -{57,18,-14}, -{57,18,-13}, -{57,18,-12}, -{57,18,-11}, -{57,18,-10}, -{57,18,-9}, -{57,18,-8}, -{57,18,-7}, -{57,18,-6}, -{57,18,-5}, -{57,18,-4}, -{57,18,-3}, -{57,18,-2}, -{57,18,-1}, -{57,18,0}, -{57,18,1}, -{57,18,2}, -{57,18,3}, -{57,18,4}, -{57,18,5}, -{57,18,6}, -{57,18,7}, -{57,18,8}, -{57,18,9}, -{57,18,10}, -{57,18,11}, -{57,18,12}, -{57,18,13}, -{57,18,14}, -{57,18,15}, -{57,18,16}, -{57,18,17}, -{57,18,18}, -{57,18,19}, -{57,18,20}, -{57,18,21}, -{57,18,22}, -{57,18,23}, -{57,18,24}, -{57,18,25}, -{57,18,26}, -{57,18,27}, -{57,18,28}, -{57,18,29}, -{57,18,30}, -{57,18,31}, -{57,18,32}, -{57,18,33}, -{57,18,34}, -{57,18,35}, -{57,18,36}, -{57,18,37}, -{57,18,38}, -{57,18,39}, -{57,18,40}, -{57,18,41}, -{57,18,42}, -{57,18,43}, -{57,18,44}, -{57,18,45}, -{57,18,46}, -{57,18,47}, -{57,18,48}, -{57,18,49}, -{57,18,50}, -{57,18,51}, -{57,18,52}, -{57,18,53}, -{57,18,54}, -{57,18,55}, -{57,18,56}, -{57,18,57}, -{57,18,58}, -{57,18,59}, -{57,18,60}, -{57,18,61}, -{57,18,62}, -{57,18,63}, -{57,19,-67}, -{57,19,-66}, -{57,19,-65}, -{57,19,-64}, -{57,19,-63}, -{57,19,-62}, -{57,19,-61}, -{57,19,-60}, -{57,19,-59}, -{57,19,-58}, -{57,19,-57}, -{57,19,-56}, -{57,19,-55}, -{57,19,-54}, -{57,19,-53}, -{57,19,-52}, -{57,19,-51}, -{57,19,-50}, -{57,19,-49}, -{57,19,-48}, -{57,19,-47}, -{57,19,-46}, -{57,19,-45}, -{57,19,-44}, -{57,19,-43}, -{57,19,-42}, -{57,19,-41}, -{57,19,-40}, -{57,19,-39}, -{57,19,-38}, -{57,19,-37}, -{57,19,-36}, -{57,19,-35}, -{57,19,-34}, -{57,19,-33}, -{57,19,-32}, -{57,19,-31}, -{57,19,-30}, -{57,19,-29}, -{57,19,-28}, -{57,19,-27}, -{57,19,-26}, -{57,19,-25}, -{57,19,-24}, -{57,19,-23}, -{57,19,-22}, -{57,19,-21}, -{57,19,-20}, -{57,19,-19}, -{57,19,-18}, -{57,19,-17}, -{57,19,-16}, -{57,19,-15}, -{57,19,-14}, -{57,19,-13}, -{57,19,-12}, -{57,19,-11}, -{57,19,-10}, -{57,19,-9}, -{57,19,-8}, -{57,19,-7}, -{57,19,-6}, -{57,19,-5}, -{57,19,-4}, -{57,19,-3}, -{57,19,-2}, -{57,19,-1}, -{57,19,0}, -{57,19,1}, -{57,19,2}, -{57,19,3}, -{57,19,4}, -{57,19,5}, -{57,19,6}, -{57,19,7}, -{57,19,8}, -{57,19,9}, -{57,19,10}, -{57,19,11}, -{57,19,12}, -{57,19,13}, -{57,19,14}, -{57,19,15}, -{57,19,16}, -{57,19,17}, -{57,19,18}, -{57,19,19}, -{57,19,20}, -{57,19,21}, -{57,19,22}, -{57,19,23}, -{57,19,24}, -{57,19,25}, -{57,19,26}, -{57,19,27}, -{57,19,28}, -{57,19,29}, -{57,19,30}, -{57,19,31}, -{57,19,32}, -{57,19,33}, -{57,19,34}, -{57,19,35}, -{57,19,36}, -{57,19,37}, -{57,19,38}, -{57,19,39}, -{57,19,40}, -{57,19,41}, -{57,19,42}, -{57,19,43}, -{57,19,44}, -{57,19,45}, -{57,19,46}, -{57,19,47}, -{57,19,48}, -{57,19,49}, -{57,19,50}, -{57,19,51}, -{57,19,52}, -{57,19,53}, -{57,19,54}, -{57,19,55}, -{57,19,56}, -{57,19,57}, -{57,19,58}, -{57,19,59}, -{57,19,60}, -{57,19,61}, -{57,19,62}, -{57,19,63}, -{57,20,-67}, -{57,20,-66}, -{57,20,-65}, -{57,20,-64}, -{57,20,-63}, -{57,20,-62}, -{57,20,-61}, -{57,20,-60}, -{57,20,-59}, -{57,20,-58}, -{57,20,-57}, -{57,20,-56}, -{57,20,-55}, -{57,20,-54}, -{57,20,-53}, -{57,20,-52}, -{57,20,-51}, -{57,20,-50}, -{57,20,-49}, -{57,20,-48}, -{57,20,-47}, -{57,20,-46}, -{57,20,-45}, -{57,20,-44}, -{57,20,-43}, -{57,20,-42}, -{57,20,-41}, -{57,20,-40}, -{57,20,-39}, -{57,20,-38}, -{57,20,-37}, -{57,20,-36}, -{57,20,-35}, -{57,20,-34}, -{57,20,-33}, -{57,20,-32}, -{57,20,-31}, -{57,20,-30}, -{57,20,-29}, -{57,20,-28}, -{57,20,-27}, -{57,20,-26}, -{57,20,-25}, -{57,20,-24}, -{57,20,-23}, -{57,20,-22}, -{57,20,-21}, -{57,20,-20}, -{57,20,-19}, -{57,20,-18}, -{57,20,-17}, -{57,20,-16}, -{57,20,-15}, -{57,20,-14}, -{57,20,-13}, -{57,20,-12}, -{57,20,-11}, -{57,20,-10}, -{57,20,-9}, -{57,20,-8}, -{57,20,-7}, -{57,20,-6}, -{57,20,-5}, -{57,20,-4}, -{57,20,-3}, -{57,20,-2}, -{57,20,-1}, -{57,20,0}, -{57,20,1}, -{57,20,2}, -{57,20,3}, -{57,20,4}, -{57,20,5}, -{57,20,6}, -{57,20,7}, -{57,20,8}, -{57,20,9}, -{57,20,10}, -{57,20,11}, -{57,20,12}, -{57,20,13}, -{57,20,14}, -{57,20,15}, -{57,20,16}, -{57,20,17}, -{57,20,18}, -{57,20,19}, -{57,20,20}, -{57,20,21}, -{57,20,22}, -{57,20,23}, -{57,20,24}, -{57,20,25}, -{57,20,26}, -{57,20,27}, -{57,20,28}, -{57,20,29}, -{57,20,30}, -{57,20,31}, -{57,20,32}, -{57,20,33}, -{57,20,34}, -{57,20,35}, -{57,20,36}, -{57,20,37}, -{57,20,38}, -{57,20,39}, -{57,20,40}, -{57,20,41}, -{57,20,42}, -{57,20,43}, -{57,20,44}, -{57,20,45}, -{57,20,46}, -{57,20,47}, -{57,20,48}, -{57,20,49}, -{57,20,50}, -{57,20,51}, -{57,20,52}, -{57,20,53}, -{57,20,54}, -{57,20,55}, -{57,20,56}, -{57,20,57}, -{57,20,58}, -{57,20,59}, -{57,20,60}, -{57,20,61}, -{57,20,62}, -{57,20,63}, -{57,21,-67}, -{57,21,-66}, -{57,21,-65}, -{57,21,-64}, -{57,21,-63}, -{57,21,-62}, -{57,21,-61}, -{57,21,-60}, -{57,21,-59}, -{57,21,-58}, -{57,21,-57}, -{57,21,-56}, -{57,21,-55}, -{57,21,-54}, -{57,21,-53}, -{57,21,-52}, -{57,21,-51}, -{57,21,-50}, -{57,21,-49}, -{57,21,-48}, -{57,21,-47}, -{57,21,-46}, -{57,21,-45}, -{57,21,-44}, -{57,21,-43}, -{57,21,-42}, -{57,21,-41}, -{57,21,-40}, -{57,21,-39}, -{57,21,-38}, -{57,21,-37}, -{57,21,-36}, -{57,21,-35}, -{57,21,-34}, -{57,21,-33}, -{57,21,-32}, -{57,21,-31}, -{57,21,-30}, -{57,21,-29}, -{57,21,-28}, -{57,21,-27}, -{57,21,-26}, -{57,21,-25}, -{57,21,-24}, -{57,21,-23}, -{57,21,-22}, -{57,21,-21}, -{57,21,-20}, -{57,21,-19}, -{57,21,-18}, -{57,21,-17}, -{57,21,-16}, -{57,21,-15}, -{57,21,-14}, -{57,21,-13}, -{57,21,-12}, -{57,21,-11}, -{57,21,-10}, -{57,21,-9}, -{57,21,-8}, -{57,21,-7}, -{57,21,-6}, -{57,21,-5}, -{57,21,-4}, -{57,21,-3}, -{57,21,-2}, -{57,21,-1}, -{57,21,0}, -{57,21,1}, -{57,21,2}, -{57,21,3}, -{57,21,4}, -{57,21,5}, -{57,21,6}, -{57,21,7}, -{57,21,8}, -{57,21,9}, -{57,21,10}, -{57,21,11}, -{57,21,12}, -{57,21,13}, -{57,21,14}, -{57,21,15}, -{57,21,16}, -{57,21,17}, -{57,21,18}, -{57,21,19}, -{57,21,20}, -{57,21,21}, -{57,21,22}, -{57,21,23}, -{57,21,24}, -{57,21,25}, -{57,21,26}, -{57,21,27}, -{57,21,28}, -{57,21,29}, -{57,21,30}, -{57,21,31}, -{57,21,32}, -{57,21,33}, -{57,21,34}, -{57,21,35}, -{57,21,36}, -{57,21,37}, -{57,21,38}, -{57,21,39}, -{57,21,40}, -{57,21,41}, -{57,21,42}, -{57,21,43}, -{57,21,44}, -{57,21,45}, -{57,21,46}, -{57,21,47}, -{57,21,48}, -{57,21,49}, -{57,21,50}, -{57,21,51}, -{57,21,52}, -{57,21,53}, -{57,21,54}, -{57,21,55}, -{57,21,56}, -{57,21,57}, -{57,21,58}, -{57,21,59}, -{57,21,60}, -{57,21,61}, -{57,21,62}, -{57,21,63}, -{57,22,-67}, -{57,22,-66}, -{57,22,-65}, -{57,22,-64}, -{57,22,-63}, -{57,22,-62}, -{57,22,-61}, -{57,22,-60}, -{57,22,-59}, -{57,22,-58}, -{57,22,-57}, -{57,22,-56}, -{57,22,-55}, -{57,22,-54}, -{57,22,-53}, -{57,22,-52}, -{57,22,-51}, -{57,22,-50}, -{57,22,-49}, -{57,22,-48}, -{57,22,-47}, -{57,22,-46}, -{57,22,-45}, -{57,22,-44}, -{57,22,-43}, -{57,22,-42}, -{57,22,-41}, -{57,22,-40}, -{57,22,-39}, -{57,22,-38}, -{57,22,-37}, -{57,22,-36}, -{57,22,-35}, -{57,22,-34}, -{57,22,-33}, -{57,22,-32}, -{57,22,-31}, -{57,22,-30}, -{57,22,-29}, -{57,22,-28}, -{57,22,-27}, -{57,22,-26}, -{57,22,-25}, -{57,22,-24}, -{57,22,-23}, -{57,22,-22}, -{57,22,-21}, -{57,22,-20}, -{57,22,-19}, -{57,22,-18}, -{57,22,-17}, -{57,22,-16}, -{57,22,-15}, -{57,22,-14}, -{57,22,-13}, -{57,22,-12}, -{57,22,-11}, -{57,22,-10}, -{57,22,-9}, -{57,22,-8}, -{57,22,-7}, -{57,22,-6}, -{57,22,-5}, -{57,22,-4}, -{57,22,-3}, -{57,22,-2}, -{57,22,-1}, -{57,22,0}, -{57,22,1}, -{57,22,2}, -{57,22,3}, -{57,22,4}, -{57,22,5}, -{57,22,6}, -{57,22,7}, -{57,22,8}, -{57,22,9}, -{57,22,10}, -{57,22,11}, -{57,22,12}, -{57,22,13}, -{57,22,14}, -{57,22,15}, -{57,22,16}, -{57,22,17}, -{57,22,18}, -{57,22,19}, -{57,22,20}, -{57,22,21}, -{57,22,22}, -{57,22,23}, -{57,22,24}, -{57,22,25}, -{57,22,26}, -{57,22,27}, -{57,22,28}, -{57,22,29}, -{57,22,30}, -{57,22,31}, -{57,22,32}, -{57,22,33}, -{57,22,34}, -{57,22,35}, -{57,22,36}, -{57,22,37}, -{57,22,38}, -{57,22,39}, -{57,22,40}, -{57,22,41}, -{57,22,42}, -{57,22,43}, -{57,22,44}, -{57,22,45}, -{57,22,46}, -{57,22,47}, -{57,22,48}, -{57,22,49}, -{57,22,50}, -{57,22,51}, -{57,22,52}, -{57,22,53}, -{57,22,54}, -{57,22,55}, -{57,22,56}, -{57,22,57}, -{57,22,58}, -{57,22,59}, -{57,22,60}, -{57,22,61}, -{57,22,62}, -{57,22,63}, -{57,23,-67}, -{57,23,-66}, -{57,23,-65}, -{57,23,-64}, -{57,23,-63}, -{57,23,-62}, -{57,23,-61}, -{57,23,-60}, -{57,23,-59}, -{57,23,-58}, -{57,23,-57}, -{57,23,-56}, -{57,23,-55}, -{57,23,-54}, -{57,23,-53}, -{57,23,-52}, -{57,23,-51}, -{57,23,-50}, -{57,23,-49}, -{57,23,-48}, -{57,23,-47}, -{57,23,-46}, -{57,23,-45}, -{57,23,-44}, -{57,23,-43}, -{57,23,-42}, -{57,23,-41}, -{57,23,-40}, -{57,23,-39}, -{57,23,-38}, -{57,23,-37}, -{57,23,-36}, -{57,23,-35}, -{57,23,-34}, -{57,23,-33}, -{57,23,-32}, -{57,23,-31}, -{57,23,-30}, -{57,23,-29}, -{57,23,-28}, -{57,23,-27}, -{57,23,-26}, -{57,23,-25}, -{57,23,-24}, -{57,23,-23}, -{57,23,-22}, -{57,23,-21}, -{57,23,-20}, -{57,23,-19}, -{57,23,-18}, -{57,23,-17}, -{57,23,-16}, -{57,23,-15}, -{57,23,-14}, -{57,23,-13}, -{57,23,-12}, -{57,23,-11}, -{57,23,-10}, -{57,23,-9}, -{57,23,-8}, -{57,23,-7}, -{57,23,-6}, -{57,23,-5}, -{57,23,-4}, -{57,23,-3}, -{57,23,-2}, -{57,23,-1}, -{57,23,0}, -{57,23,1}, -{57,23,2}, -{57,23,3}, -{57,23,4}, -{57,23,5}, -{57,23,6}, -{57,23,7}, -{57,23,8}, -{57,23,9}, -{57,23,10}, -{57,23,11}, -{57,23,12}, -{57,23,13}, -{57,23,14}, -{57,23,15}, -{57,23,16}, -{57,23,17}, -{57,23,18}, -{57,23,19}, -{57,23,20}, -{57,23,21}, -{57,23,22}, -{57,23,23}, -{57,23,24}, -{57,23,25}, -{57,23,26}, -{57,23,27}, -{57,23,28}, -{57,23,29}, -{57,23,30}, -{57,23,31}, -{57,23,32}, -{57,23,33}, -{57,23,34}, -{57,23,35}, -{57,23,36}, -{57,23,37}, -{57,23,38}, -{57,23,39}, -{57,23,40}, -{57,23,41}, -{57,23,42}, -{57,23,43}, -{57,23,44}, -{57,23,45}, -{57,23,46}, -{57,23,47}, -{57,23,48}, -{57,23,49}, -{57,23,50}, -{57,23,51}, -{57,23,52}, -{57,23,53}, -{57,23,54}, -{57,23,55}, -{57,23,56}, -{57,23,57}, -{57,23,58}, -{57,23,59}, -{57,23,60}, -{57,23,61}, -{57,23,62}, -{57,23,63}, -{57,24,-67}, -{57,24,-66}, -{57,24,-65}, -{57,24,-64}, -{57,24,-63}, -{57,24,-62}, -{57,24,-61}, -{57,24,-60}, -{57,24,-59}, -{57,24,-58}, -{57,24,-57}, -{57,24,-56}, -{57,24,-55}, -{57,24,-54}, -{57,24,-53}, -{57,24,-52}, -{57,24,-51}, -{57,24,-50}, -{57,24,-49}, -{57,24,-48}, -{57,24,-47}, -{57,24,-46}, -{57,24,-45}, -{57,24,-44}, -{57,24,-43}, -{57,24,-42}, -{57,24,-41}, -{57,24,-40}, -{57,24,-39}, -{57,24,-38}, -{57,24,-37}, -{57,24,-36}, -{57,24,-35}, -{57,24,-34}, -{57,24,-33}, -{57,24,-32}, -{57,24,-31}, -{57,24,-30}, -{57,24,-29}, -{57,24,-28}, -{57,24,-27}, -{57,24,-26}, -{57,24,-25}, -{57,24,-24}, -{57,24,-23}, -{57,24,-22}, -{57,24,-21}, -{57,24,-20}, -{57,24,-19}, -{57,24,-18}, -{57,24,-17}, -{57,24,-16}, -{57,24,-15}, -{57,24,-14}, -{57,24,-13}, -{57,24,-12}, -{57,24,-11}, -{57,24,-10}, -{57,24,-9}, -{57,24,-8}, -{57,24,-7}, -{57,24,-6}, -{57,24,-5}, -{57,24,-4}, -{57,24,-3}, -{57,24,-2}, -{57,24,-1}, -{57,24,0}, -{57,24,1}, -{57,24,2}, -{57,24,3}, -{57,24,4}, -{57,24,5}, -{57,24,6}, -{57,24,7}, -{57,24,8}, -{57,24,9}, -{57,24,10}, -{57,24,11}, -{57,24,12}, -{57,24,13}, -{57,24,14}, -{57,24,15}, -{57,24,16}, -{57,24,17}, -{57,24,18}, -{57,24,19}, -{57,24,20}, -{57,24,21}, -{57,24,22}, -{57,24,23}, -{57,24,24}, -{57,24,25}, -{57,24,26}, -{57,24,27}, -{57,24,28}, -{57,24,29}, -{57,24,30}, -{57,24,31}, -{57,24,32}, -{57,24,33}, -{57,24,34}, -{57,24,35}, -{57,24,36}, -{57,24,37}, -{57,24,38}, -{57,24,39}, -{57,24,40}, -{57,24,41}, -{57,24,42}, -{57,24,43}, -{57,24,44}, -{57,24,45}, -{57,24,46}, -{57,24,47}, -{57,24,48}, -{57,24,49}, -{57,24,50}, -{57,24,51}, -{57,24,52}, -{57,24,53}, -{57,24,54}, -{57,24,55}, -{57,24,56}, -{57,24,57}, -{57,24,58}, -{57,24,59}, -{57,24,60}, -{57,24,61}, -{57,24,62}, -{57,24,63}, -{57,25,-67}, -{57,25,-66}, -{57,25,-65}, -{57,25,-64}, -{57,25,-63}, -{57,25,-62}, -{57,25,-61}, -{57,25,-60}, -{57,25,-59}, -{57,25,-58}, -{57,25,-57}, -{57,25,-56}, -{57,25,-55}, -{57,25,-54}, -{57,25,-53}, -{57,25,-52}, -{57,25,-51}, -{57,25,-50}, -{57,25,-49}, -{57,25,-48}, -{57,25,-47}, -{57,25,-46}, -{57,25,-45}, -{57,25,-44}, -{57,25,-43}, -{57,25,-42}, -{57,25,-41}, -{57,25,-40}, -{57,25,-39}, -{57,25,-38}, -{57,25,-37}, -{57,25,-36}, -{57,25,-35}, -{57,25,-34}, -{57,25,-33}, -{57,25,-32}, -{57,25,-31}, -{57,25,-30}, -{57,25,-29}, -{57,25,-28}, -{57,25,-27}, -{57,25,-26}, -{57,25,-25}, -{57,25,-24}, -{57,25,-23}, -{57,25,-22}, -{57,25,-21}, -{57,25,-20}, -{57,25,-19}, -{57,25,-18}, -{57,25,-17}, -{57,25,-16}, -{57,25,-15}, -{57,25,-14}, -{57,25,-13}, -{57,25,-12}, -{57,25,-11}, -{57,25,-10}, -{57,25,-9}, -{57,25,-8}, -{57,25,-7}, -{57,25,-6}, -{57,25,-5}, -{57,25,-4}, -{57,25,-3}, -{57,25,-2}, -{57,25,-1}, -{57,25,0}, -{57,25,1}, -{57,25,2}, -{57,25,3}, -{57,25,4}, -{57,25,5}, -{57,25,6}, -{57,25,7}, -{57,25,8}, -{57,25,9}, -{57,25,10}, -{57,25,11}, -{57,25,12}, -{57,25,13}, -{57,25,14}, -{57,25,15}, -{57,25,16}, -{57,25,17}, -{57,25,18}, -{57,25,19}, -{57,25,20}, -{57,25,21}, -{57,25,22}, -{57,25,23}, -{57,25,24}, -{57,25,25}, -{57,25,26}, -{57,25,27}, -{57,25,28}, -{57,25,29}, -{57,25,30}, -{57,25,31}, -{57,25,32}, -{57,25,33}, -{57,25,34}, -{57,25,35}, -{57,25,36}, -{57,25,37}, -{57,25,38}, -{57,25,39}, -{57,25,40}, -{57,25,41}, -{57,25,42}, -{57,25,43}, -{57,25,44}, -{57,25,45}, -{57,25,46}, -{57,25,47}, -{57,25,48}, -{57,25,49}, -{57,25,50}, -{57,25,51}, -{57,25,52}, -{57,25,53}, -{57,25,54}, -{57,25,55}, -{57,25,56}, -{57,25,57}, -{57,25,58}, -{57,25,59}, -{57,25,60}, -{57,25,61}, -{57,25,62}, -{57,25,63}, -{57,25,64}, -{57,26,-67}, -{57,26,-66}, -{57,26,-65}, -{57,26,-64}, -{57,26,-63}, -{57,26,-62}, -{57,26,-61}, -{57,26,-60}, -{57,26,-59}, -{57,26,-58}, -{57,26,-57}, -{57,26,-56}, -{57,26,-55}, -{57,26,-54}, -{57,26,-53}, -{57,26,-52}, -{57,26,-51}, -{57,26,-50}, -{57,26,-49}, -{57,26,-48}, -{57,26,-47}, -{57,26,-46}, -{57,26,-45}, -{57,26,-44}, -{57,26,-43}, -{57,26,-42}, -{57,26,-41}, -{57,26,-40}, -{57,26,-39}, -{57,26,-38}, -{57,26,-37}, -{57,26,-36}, -{57,26,-35}, -{57,26,-34}, -{57,26,-33}, -{57,26,-32}, -{57,26,-31}, -{57,26,-30}, -{57,26,-29}, -{57,26,-28}, -{57,26,-27}, -{57,26,-26}, -{57,26,-25}, -{57,26,-24}, -{57,26,-23}, -{57,26,-22}, -{57,26,-21}, -{57,26,-20}, -{57,26,-19}, -{57,26,-18}, -{57,26,-17}, -{57,26,-16}, -{57,26,-15}, -{57,26,-14}, -{57,26,-13}, -{57,26,-12}, -{57,26,-11}, -{57,26,-10}, -{57,26,-9}, -{57,26,-8}, -{57,26,-7}, -{57,26,-6}, -{57,26,-5}, -{57,26,-4}, -{57,26,-3}, -{57,26,-2}, -{57,26,-1}, -{57,26,0}, -{57,26,1}, -{57,26,2}, -{57,26,3}, -{57,26,4}, -{57,26,5}, -{57,26,6}, -{57,26,7}, -{57,26,8}, -{57,26,9}, -{57,26,10}, -{57,26,11}, -{57,26,12}, -{57,26,13}, -{57,26,14}, -{57,26,15}, -{57,26,16}, -{57,26,17}, -{57,26,18}, -{57,26,19}, -{57,26,20}, -{57,26,21}, -{57,26,22}, -{57,26,23}, -{57,26,24}, -{57,26,25}, -{57,26,26}, -{57,26,27}, -{57,26,28}, -{57,26,29}, -{57,26,30}, -{57,26,31}, -{57,26,32}, -{57,26,33}, -{57,26,34}, -{57,26,35}, -{57,26,36}, -{57,26,37}, -{57,26,38}, -{57,26,39}, -{57,26,40}, -{57,26,41}, -{57,26,42}, -{57,26,43}, -{57,26,44}, -{57,26,45}, -{57,26,46}, -{57,26,47}, -{57,26,48}, -{57,26,49}, -{57,26,50}, -{57,26,51}, -{57,26,52}, -{57,26,53}, -{57,26,54}, -{57,26,55}, -{57,26,56}, -{57,26,57}, -{57,26,58}, -{57,26,59}, -{57,26,60}, -{57,26,61}, -{57,26,62}, -{57,26,63}, -{57,26,64}, -{57,27,-67}, -{57,27,-66}, -{57,27,-65}, -{57,27,-64}, -{57,27,-63}, -{57,27,-62}, -{57,27,-61}, -{57,27,-60}, -{57,27,-59}, -{57,27,-58}, -{57,27,-57}, -{57,27,-56}, -{57,27,-55}, -{57,27,-54}, -{57,27,-53}, -{57,27,-52}, -{57,27,-51}, -{57,27,-50}, -{57,27,-49}, -{57,27,-48}, -{57,27,-47}, -{57,27,-46}, -{57,27,-45}, -{57,27,-44}, -{57,27,-43}, -{57,27,-42}, -{57,27,-41}, -{57,27,-40}, -{57,27,-39}, -{57,27,-38}, -{57,27,-37}, -{57,27,-36}, -{57,27,-35}, -{57,27,-34}, -{57,27,-33}, -{57,27,-32}, -{57,27,-31}, -{57,27,-30}, -{57,27,-29}, -{57,27,-28}, -{57,27,-27}, -{57,27,-26}, -{57,27,-25}, -{57,27,-24}, -{57,27,-23}, -{57,27,-22}, -{57,27,-21}, -{57,27,-20}, -{57,27,-19}, -{57,27,-18}, -{57,27,-17}, -{57,27,-16}, -{57,27,-15}, -{57,27,-14}, -{57,27,-13}, -{57,27,-12}, -{57,27,-11}, -{57,27,-10}, -{57,27,-9}, -{57,27,-8}, -{57,27,-7}, -{57,27,-6}, -{57,27,-5}, -{57,27,-4}, -{57,27,-3}, -{57,27,-2}, -{57,27,-1}, -{57,27,0}, -{57,27,1}, -{57,27,2}, -{57,27,3}, -{57,27,4}, -{57,27,5}, -{57,27,6}, -{57,27,7}, -{57,27,8}, -{57,27,9}, -{57,27,10}, -{57,27,11}, -{57,27,12}, -{57,27,13}, -{57,27,14}, -{57,27,15}, -{57,27,16}, -{57,27,17}, -{57,27,18}, -{57,27,19}, -{57,27,20}, -{57,27,21}, -{57,27,22}, -{57,27,23}, -{57,27,24}, -{57,27,25}, -{57,27,26}, -{57,27,27}, -{57,27,28}, -{57,27,29}, -{57,27,30}, -{57,27,31}, -{57,27,32}, -{57,27,33}, -{57,27,34}, -{57,27,35}, -{57,27,36}, -{57,27,37}, -{57,27,38}, -{57,27,39}, -{57,27,40}, -{57,27,41}, -{57,27,42}, -{57,27,43}, -{57,27,44}, -{57,27,45}, -{57,27,46}, -{57,27,47}, -{57,27,48}, -{57,27,49}, -{57,27,50}, -{57,27,51}, -{57,27,52}, -{57,27,53}, -{57,27,54}, -{57,27,55}, -{57,27,56}, -{57,27,57}, -{57,27,58}, -{57,27,59}, -{57,27,60}, -{57,27,61}, -{57,27,62}, -{57,27,63}, -{57,27,64}, -{57,28,-67}, -{57,28,-66}, -{57,28,-65}, -{57,28,-64}, -{57,28,-63}, -{57,28,-62}, -{57,28,-61}, -{57,28,-60}, -{57,28,-59}, -{57,28,-58}, -{57,28,-57}, -{57,28,-56}, -{57,28,-55}, -{57,28,-54}, -{57,28,-53}, -{57,28,-52}, -{57,28,-51}, -{57,28,-50}, -{57,28,-49}, -{57,28,-48}, -{57,28,-47}, -{57,28,-46}, -{57,28,-45}, -{57,28,-44}, -{57,28,-43}, -{57,28,-42}, -{57,28,-41}, -{57,28,-40}, -{57,28,-39}, -{57,28,-38}, -{57,28,-37}, -{57,28,-36}, -{57,28,-35}, -{57,28,-34}, -{57,28,-33}, -{57,28,-32}, -{57,28,-31}, -{57,28,-30}, -{57,28,-29}, -{57,28,-28}, -{57,28,-27}, -{57,28,-26}, -{57,28,-25}, -{57,28,-24}, -{57,28,-23}, -{57,28,-22}, -{57,28,-21}, -{57,28,-20}, -{57,28,-19}, -{57,28,-18}, -{57,28,-17}, -{57,28,-16}, -{57,28,-15}, -{57,28,-14}, -{57,28,-13}, -{57,28,-12}, -{57,28,-11}, -{57,28,-10}, -{57,28,-9}, -{57,28,-8}, -{57,28,-7}, -{57,28,-6}, -{57,28,-5}, -{57,28,-4}, -{57,28,-3}, -{57,28,-2}, -{57,28,-1}, -{57,28,0}, -{57,28,1}, -{57,28,2}, -{57,28,3}, -{57,28,4}, -{57,28,5}, -{57,28,6}, -{57,28,7}, -{57,28,8}, -{57,28,9}, -{57,28,10}, -{57,28,11}, -{57,28,12}, -{57,28,13}, -{57,28,14}, -{57,28,15}, -{57,28,16}, -{57,28,17}, -{57,28,18}, -{57,28,19}, -{57,28,20}, -{57,28,21}, -{57,28,22}, -{57,28,23}, -{57,28,24}, -{57,28,25}, -{57,28,26}, -{57,28,27}, -{57,28,28}, -{57,28,29}, -{57,28,30}, -{57,28,31}, -{57,28,32}, -{57,28,33}, -{57,28,34}, -{57,28,35}, -{57,28,36}, -{57,28,37}, -{57,28,38}, -{57,28,39}, -{57,28,40}, -{57,28,41}, -{57,28,42}, -{57,28,43}, -{57,28,44}, -{57,28,45}, -{57,28,46}, -{57,28,47}, -{57,28,48}, -{57,28,49}, -{57,28,50}, -{57,28,51}, -{57,28,52}, -{57,28,53}, -{57,28,54}, -{57,28,55}, -{57,28,56}, -{57,28,57}, -{57,28,58}, -{57,28,59}, -{57,28,60}, -{57,28,61}, -{57,28,62}, -{57,28,63}, -{57,28,64}, -{57,29,-67}, -{57,29,-66}, -{57,29,-65}, -{57,29,-64}, -{57,29,-63}, -{57,29,-62}, -{57,29,-61}, -{57,29,-60}, -{57,29,-59}, -{57,29,-58}, -{57,29,-57}, -{57,29,-56}, -{57,29,-55}, -{57,29,-54}, -{57,29,-53}, -{57,29,-52}, -{57,29,-51}, -{57,29,-50}, -{57,29,-49}, -{57,29,-48}, -{57,29,-47}, -{57,29,-46}, -{57,29,-45}, -{57,29,-44}, -{57,29,-43}, -{57,29,-42}, -{57,29,-41}, -{57,29,-40}, -{57,29,-39}, -{57,29,-38}, -{57,29,-37}, -{57,29,-36}, -{57,29,-35}, -{57,29,-34}, -{57,29,-33}, -{57,29,-32}, -{57,29,-31}, -{57,29,-30}, -{57,29,-29}, -{57,29,-28}, -{57,29,-27}, -{57,29,-26}, -{57,29,-25}, -{57,29,-24}, -{57,29,-23}, -{57,29,-22}, -{57,29,-21}, -{57,29,-20}, -{57,29,-19}, -{57,29,-18}, -{57,29,-17}, -{57,29,-16}, -{57,29,-15}, -{57,29,-14}, -{57,29,-13}, -{57,29,-12}, -{57,29,-11}, -{57,29,-10}, -{57,29,-9}, -{57,29,-8}, -{57,29,-7}, -{57,29,-6}, -{57,29,-5}, -{57,29,-4}, -{57,29,-3}, -{57,29,-2}, -{57,29,-1}, -{57,29,0}, -{57,29,1}, -{57,29,2}, -{57,29,3}, -{57,29,4}, -{57,29,5}, -{57,29,6}, -{57,29,7}, -{57,29,8}, -{57,29,9}, -{57,29,10}, -{57,29,11}, -{57,29,12}, -{57,29,13}, -{57,29,14}, -{57,29,15}, -{57,29,16}, -{57,29,17}, -{57,29,18}, -{57,29,19}, -{57,29,20}, -{57,29,21}, -{57,29,22}, -{57,29,23}, -{57,29,24}, -{57,29,25}, -{57,29,26}, -{57,29,27}, -{57,29,28}, -{57,29,29}, -{57,29,30}, -{57,29,31}, -{57,29,32}, -{57,29,33}, -{57,29,34}, -{57,29,35}, -{57,29,36}, -{57,29,37}, -{57,29,38}, -{57,29,39}, -{57,29,40}, -{57,29,41}, -{57,29,42}, -{57,29,43}, -{57,29,44}, -{57,29,45}, -{57,29,46}, -{57,29,47}, -{57,29,48}, -{57,29,49}, -{57,29,50}, -{57,29,51}, -{57,29,52}, -{57,29,53}, -{57,29,54}, -{57,29,55}, -{57,29,56}, -{57,29,57}, -{57,29,58}, -{57,29,59}, -{57,29,60}, -{57,29,61}, -{57,29,62}, -{57,29,63}, -{57,29,64}, -{57,30,-67}, -{57,30,-66}, -{57,30,-65}, -{57,30,-64}, -{57,30,-63}, -{57,30,-62}, -{57,30,-61}, -{57,30,-60}, -{57,30,-59}, -{57,30,-58}, -{57,30,-57}, -{57,30,-56}, -{57,30,-55}, -{57,30,-54}, -{57,30,-53}, -{57,30,-52}, -{57,30,-51}, -{57,30,-50}, -{57,30,-49}, -{57,30,-48}, -{57,30,-47}, -{57,30,-46}, -{57,30,-45}, -{57,30,-44}, -{57,30,-43}, -{57,30,-42}, -{57,30,-41}, -{57,30,-40}, -{57,30,-39}, -{57,30,-38}, -{57,30,-37}, -{57,30,-36}, -{57,30,-35}, -{57,30,-34}, -{57,30,-33}, -{57,30,-32}, -{57,30,-31}, -{57,30,-30}, -{57,30,-29}, -{57,30,-28}, -{57,30,-27}, -{57,30,-26}, -{57,30,-25}, -{57,30,-24}, -{57,30,-23}, -{57,30,-22}, -{57,30,-21}, -{57,30,-20}, -{57,30,-19}, -{57,30,-18}, -{57,30,-17}, -{57,30,-16}, -{57,30,-15}, -{57,30,-14}, -{57,30,-13}, -{57,30,-12}, -{57,30,-11}, -{57,30,-10}, -{57,30,-9}, -{57,30,-8}, -{57,30,-7}, -{57,30,-6}, -{57,30,-5}, -{57,30,-4}, -{57,30,-3}, -{57,30,-2}, -{57,30,-1}, -{57,30,0}, -{57,30,1}, -{57,30,2}, -{57,30,3}, -{57,30,4}, -{57,30,5}, -{57,30,6}, -{57,30,7}, -{57,30,8}, -{57,30,9}, -{57,30,10}, -{57,30,11}, -{57,30,12}, -{57,30,13}, -{57,30,14}, -{57,30,15}, -{57,30,16}, -{57,30,17}, -{57,30,18}, -{57,30,19}, -{57,30,20}, -{57,30,21}, -{57,30,22}, -{57,30,23}, -{57,30,24}, -{57,30,25}, -{57,30,26}, -{57,30,27}, -{57,30,28}, -{57,30,29}, -{57,30,30}, -{57,30,31}, -{57,30,32}, -{57,30,33}, -{57,30,34}, -{57,30,35}, -{57,30,36}, -{57,30,37}, -{57,30,38}, -{57,30,39}, -{57,30,40}, -{57,30,41}, -{57,30,42}, -{57,30,43}, -{57,30,44}, -{57,30,45}, -{57,30,46}, -{57,30,47}, -{57,30,48}, -{57,30,49}, -{57,30,50}, -{57,30,51}, -{57,30,52}, -{57,30,53}, -{57,30,54}, -{57,30,55}, -{57,30,56}, -{57,30,57}, -{57,30,58}, -{57,30,59}, -{57,30,60}, -{57,30,61}, -{57,30,62}, -{57,30,63}, -{57,30,64}, -{57,31,-67}, -{57,31,-66}, -{57,31,-65}, -{57,31,-64}, -{57,31,-63}, -{57,31,-62}, -{57,31,-61}, -{57,31,-60}, -{57,31,-59}, -{57,31,-58}, -{57,31,-57}, -{57,31,-56}, -{57,31,-55}, -{57,31,-54}, -{57,31,-53}, -{57,31,-52}, -{57,31,-51}, -{57,31,-50}, -{57,31,-49}, -{57,31,-48}, -{57,31,-47}, -{57,31,-46}, -{57,31,-45}, -{57,31,-44}, -{57,31,-43}, -{57,31,-42}, -{57,31,-41}, -{57,31,-40}, -{57,31,-39}, -{57,31,-38}, -{57,31,-37}, -{57,31,-36}, -{57,31,-35}, -{57,31,-34}, -{57,31,-33}, -{57,31,-32}, -{57,31,-31}, -{57,31,-30}, -{57,31,-29}, -{57,31,-28}, -{57,31,-27}, -{57,31,-26}, -{57,31,-25}, -{57,31,-24}, -{57,31,-23}, -{57,31,-22}, -{57,31,-21}, -{57,31,-20}, -{57,31,-19}, -{57,31,-18}, -{57,31,-17}, -{57,31,-16}, -{57,31,-15}, -{57,31,-14}, -{57,31,-13}, -{57,31,-12}, -{57,31,-11}, -{57,31,-10}, -{57,31,-9}, -{57,31,-8}, -{57,31,-7}, -{57,31,-6}, -{57,31,-5}, -{57,31,-4}, -{57,31,-3}, -{57,31,-2}, -{57,31,-1}, -{57,31,0}, -{57,31,1}, -{57,31,2}, -{57,31,3}, -{57,31,4}, -{57,31,5}, -{57,31,6}, -{57,31,7}, -{57,31,8}, -{57,31,9}, -{57,31,10}, -{57,31,11}, -{57,31,12}, -{57,31,13}, -{57,31,14}, -{57,31,15}, -{57,31,16}, -{57,31,17}, -{57,31,18}, -{57,31,19}, -{57,31,20}, -{57,31,21}, -{57,31,22}, -{57,31,23}, -{57,31,24}, -{57,31,25}, -{57,31,26}, -{57,31,27}, -{57,31,28}, -{57,31,29}, -{57,31,30}, -{57,31,31}, -{57,31,32}, -{57,31,33}, -{57,31,34}, -{57,31,35}, -{57,31,36}, -{57,31,37}, -{57,31,38}, -{57,31,39}, -{57,31,40}, -{57,31,41}, -{57,31,42}, -{57,31,43}, -{57,31,44}, -{57,31,45}, -{57,31,46}, -{57,31,47}, -{57,31,48}, -{57,31,49}, -{57,31,50}, -{57,31,51}, -{57,31,52}, -{57,31,53}, -{57,31,54}, -{57,31,55}, -{57,31,56}, -{57,31,57}, -{57,31,58}, -{57,31,59}, -{57,31,60}, -{57,31,61}, -{57,31,62}, -{57,31,63}, -{57,31,64}, -{57,32,-67}, -{57,32,-66}, -{57,32,-65}, -{57,32,-64}, -{57,32,-63}, -{57,32,-62}, -{57,32,-61}, -{57,32,-60}, -{57,32,-59}, -{57,32,-58}, -{57,32,-57}, -{57,32,-56}, -{57,32,-55}, -{57,32,-54}, -{57,32,-53}, -{57,32,-52}, -{57,32,-51}, -{57,32,-50}, -{57,32,-49}, -{57,32,-48}, -{57,32,-47}, -{57,32,-46}, -{57,32,-45}, -{57,32,-44}, -{57,32,-43}, -{57,32,-42}, -{57,32,-41}, -{57,32,-40}, -{57,32,-39}, -{57,32,-38}, -{57,32,-37}, -{57,32,-36}, -{57,32,-35}, -{57,32,-34}, -{57,32,-33}, -{57,32,-32}, -{57,32,-31}, -{57,32,-30}, -{57,32,-29}, -{57,32,-28}, -{57,32,-27}, -{57,32,-26}, -{57,32,-25}, -{57,32,-24}, -{57,32,-23}, -{57,32,-22}, -{57,32,-21}, -{57,32,-20}, -{57,32,-19}, -{57,32,-18}, -{57,32,-17}, -{57,32,-16}, -{57,32,-15}, -{57,32,-14}, -{57,32,-13}, -{57,32,-12}, -{57,32,-11}, -{57,32,-10}, -{57,32,-9}, -{57,32,-8}, -{57,32,-7}, -{57,32,-6}, -{57,32,-5}, -{57,32,-4}, -{57,32,-3}, -{57,32,-2}, -{57,32,-1}, -{57,32,0}, -{57,32,1}, -{57,32,2}, -{57,32,3}, -{57,32,4}, -{57,32,5}, -{57,32,6}, -{57,32,7}, -{57,32,8}, -{57,32,9}, -{57,32,10}, -{57,32,11}, -{57,32,12}, -{57,32,13}, -{57,32,14}, -{57,32,15}, -{57,32,16}, -{57,32,17}, -{57,32,18}, -{57,32,19}, -{57,32,20}, -{57,32,21}, -{57,32,22}, -{57,32,23}, -{57,32,24}, -{57,32,25}, -{57,32,26}, -{57,32,27}, -{57,32,28}, -{57,32,29}, -{57,32,30}, -{57,32,31}, -{57,32,32}, -{57,32,33}, -{57,32,34}, -{57,32,35}, -{57,32,36}, -{57,32,37}, -{57,32,38}, -{57,32,39}, -{57,32,40}, -{57,32,41}, -{57,32,42}, -{57,32,43}, -{57,32,44}, -{57,32,45}, -{57,32,46}, -{57,32,47}, -{57,32,48}, -{57,32,49}, -{57,32,50}, -{57,32,51}, -{57,32,52}, -{57,32,53}, -{57,32,54}, -{57,32,55}, -{57,32,56}, -{57,32,57}, -{57,32,58}, -{57,32,59}, -{57,32,60}, -{57,32,61}, -{57,32,62}, -{57,32,63}, -{57,32,64}, -{57,33,-67}, -{57,33,-66}, -{57,33,-65}, -{57,33,-64}, -{57,33,-63}, -{57,33,-62}, -{57,33,-61}, -{57,33,-60}, -{57,33,-59}, -{57,33,-58}, -{57,33,-57}, -{57,33,-56}, -{57,33,-55}, -{57,33,-54}, -{57,33,-53}, -{57,33,-52}, -{57,33,-51}, -{57,33,-50}, -{57,33,-49}, -{57,33,-48}, -{57,33,-47}, -{57,33,-46}, -{57,33,-45}, -{57,33,-44}, -{57,33,-43}, -{57,33,-42}, -{57,33,-41}, -{57,33,-40}, -{57,33,-39}, -{57,33,-38}, -{57,33,-37}, -{57,33,-36}, -{57,33,-35}, -{57,33,-34}, -{57,33,-33}, -{57,33,-32}, -{57,33,-31}, -{57,33,-30}, -{57,33,-29}, -{57,33,-28}, -{57,33,-27}, -{57,33,-26}, -{57,33,-25}, -{57,33,-24}, -{57,33,-23}, -{57,33,-22}, -{57,33,-21}, -{57,33,-20}, -{57,33,-19}, -{57,33,-18}, -{57,33,-17}, -{57,33,-16}, -{57,33,-15}, -{57,33,-14}, -{57,33,-13}, -{57,33,-12}, -{57,33,-11}, -{57,33,-10}, -{57,33,-9}, -{57,33,-8}, -{57,33,-7}, -{57,33,-6}, -{57,33,-5}, -{57,33,-4}, -{57,33,-3}, -{57,33,-2}, -{57,33,-1}, -{57,33,0}, -{57,33,1}, -{57,33,2}, -{57,33,3}, -{57,33,4}, -{57,33,5}, -{57,33,6}, -{57,33,7}, -{57,33,8}, -{57,33,9}, -{57,33,10}, -{57,33,11}, -{57,33,12}, -{57,33,13}, -{57,33,14}, -{57,33,15}, -{57,33,16}, -{57,33,17}, -{57,33,18}, -{57,33,19}, -{57,33,20}, -{57,33,21}, -{57,33,22}, -{57,33,23}, -{57,33,24}, -{57,33,25}, -{57,33,26}, -{57,33,27}, -{57,33,28}, -{57,33,29}, -{57,33,30}, -{57,33,31}, -{57,33,32}, -{57,33,33}, -{57,33,34}, -{57,33,35}, -{57,33,36}, -{57,33,37}, -{57,33,38}, -{57,33,39}, -{57,33,40}, -{57,33,41}, -{57,33,42}, -{57,33,43}, -{57,33,44}, -{57,33,45}, -{57,33,46}, -{57,33,47}, -{57,33,48}, -{57,33,49}, -{57,33,50}, -{57,33,51}, -{57,33,52}, -{57,33,53}, -{57,33,54}, -{57,33,55}, -{57,33,56}, -{57,33,57}, -{57,33,58}, -{57,33,59}, -{57,33,60}, -{57,33,61}, -{57,33,62}, -{57,33,63}, -{57,33,64}, -{57,34,-67}, -{57,34,-66}, -{57,34,-65}, -{57,34,-64}, -{57,34,-63}, -{57,34,-62}, -{57,34,-61}, -{57,34,-60}, -{57,34,-59}, -{57,34,-58}, -{57,34,-57}, -{57,34,-56}, -{57,34,-55}, -{57,34,-54}, -{57,34,-53}, -{57,34,-52}, -{57,34,-51}, -{57,34,-50}, -{57,34,-49}, -{57,34,-48}, -{57,34,-47}, -{57,34,-46}, -{57,34,-45}, -{57,34,-44}, -{57,34,-43}, -{57,34,-42}, -{57,34,-41}, -{57,34,-40}, -{57,34,-39}, -{57,34,-38}, -{57,34,-37}, -{57,34,-36}, -{57,34,-35}, -{57,34,-34}, -{57,34,-33}, -{57,34,-32}, -{57,34,-31}, -{57,34,-30}, -{57,34,-29}, -{57,34,-28}, -{57,34,-27}, -{57,34,-26}, -{57,34,-25}, -{57,34,-24}, -{57,34,-23}, -{57,34,-22}, -{57,34,-21}, -{57,34,-20}, -{57,34,-19}, -{57,34,-18}, -{57,34,-17}, -{57,34,-16}, -{57,34,-15}, -{57,34,-14}, -{57,34,-13}, -{57,34,-12}, -{57,34,-11}, -{57,34,-10}, -{57,34,-9}, -{57,34,-8}, -{57,34,-7}, -{57,34,-6}, -{57,34,-5}, -{57,34,-4}, -{57,34,-3}, -{57,34,-2}, -{57,34,-1}, -{57,34,0}, -{57,34,1}, -{57,34,2}, -{57,34,3}, -{57,34,4}, -{57,34,5}, -{57,34,6}, -{57,34,7}, -{57,34,8}, -{57,34,9}, -{57,34,10}, -{57,34,11}, -{57,34,12}, -{57,34,13}, -{57,34,14}, -{57,34,15}, -{57,34,16}, -{57,34,17}, -{57,34,18}, -{57,34,19}, -{57,34,20}, -{57,34,21}, -{57,34,22}, -{57,34,23}, -{57,34,24}, -{57,34,25}, -{57,34,26}, -{57,34,27}, -{57,34,28}, -{57,34,29}, -{57,34,30}, -{57,34,31}, -{57,34,32}, -{57,34,33}, -{57,34,34}, -{57,34,35}, -{57,34,36}, -{57,34,37}, -{57,34,38}, -{57,34,39}, -{57,34,40}, -{57,34,41}, -{57,34,42}, -{57,34,43}, -{57,34,44}, -{57,34,45}, -{57,34,46}, -{57,34,47}, -{57,34,48}, -{57,34,49}, -{57,34,50}, -{57,34,51}, -{57,34,52}, -{57,34,53}, -{57,34,54}, -{57,34,55}, -{57,34,56}, -{57,34,57}, -{57,34,58}, -{57,34,59}, -{57,34,60}, -{57,34,61}, -{57,34,62}, -{57,34,63}, -{57,34,64}, -{57,35,-67}, -{57,35,-66}, -{57,35,-65}, -{57,35,-64}, -{57,35,-63}, -{57,35,-62}, -{57,35,-61}, -{57,35,-60}, -{57,35,-59}, -{57,35,-58}, -{57,35,-57}, -{57,35,-56}, -{57,35,-55}, -{57,35,-54}, -{57,35,-53}, -{57,35,-52}, -{57,35,-51}, -{57,35,-50}, -{57,35,-49}, -{57,35,-48}, -{57,35,-47}, -{57,35,-46}, -{57,35,-45}, -{57,35,-44}, -{57,35,-43}, -{57,35,-42}, -{57,35,-41}, -{57,35,-40}, -{57,35,-39}, -{57,35,-38}, -{57,35,-37}, -{57,35,-36}, -{57,35,-35}, -{57,35,-34}, -{57,35,-33}, -{57,35,-32}, -{57,35,-31}, -{57,35,-30}, -{57,35,-29}, -{57,35,-28}, -{57,35,-27}, -{57,35,-26}, -{57,35,-25}, -{57,35,-24}, -{57,35,-23}, -{57,35,-22}, -{57,35,-21}, -{57,35,-20}, -{57,35,-19}, -{57,35,-18}, -{57,35,-17}, -{57,35,-16}, -{57,35,-15}, -{57,35,-14}, -{57,35,-13}, -{57,35,-12}, -{57,35,-11}, -{57,35,-10}, -{57,35,-9}, -{57,35,-8}, -{57,35,-7}, -{57,35,-6}, -{57,35,-5}, -{57,35,-4}, -{57,35,-3}, -{57,35,-2}, -{57,35,-1}, -{57,35,0}, -{57,35,1}, -{57,35,2}, -{57,35,3}, -{57,35,4}, -{57,35,5}, -{57,35,6}, -{57,35,7}, -{57,35,8}, -{57,35,9}, -{57,35,10}, -{57,35,11}, -{57,35,12}, -{57,35,13}, -{57,35,14}, -{57,35,15}, -{57,35,16}, -{57,35,17}, -{57,35,18}, -{57,35,19}, -{57,35,20}, -{57,35,21}, -{57,35,22}, -{57,35,23}, -{57,35,24}, -{57,35,25}, -{57,35,26}, -{57,35,27}, -{57,35,28}, -{57,35,29}, -{57,35,30}, -{57,35,31}, -{57,35,32}, -{57,35,33}, -{57,35,34}, -{57,35,35}, -{57,35,36}, -{57,35,37}, -{57,35,38}, -{57,35,39}, -{57,35,40}, -{57,35,41}, -{57,35,42}, -{57,35,43}, -{57,35,44}, -{57,35,45}, -{57,35,46}, -{57,35,47}, -{57,35,48}, -{57,35,49}, -{57,35,50}, -{57,35,51}, -{57,35,52}, -{57,35,53}, -{57,35,54}, -{57,35,55}, -{57,35,56}, -{57,35,57}, -{57,35,58}, -{57,35,59}, -{57,35,60}, -{57,35,61}, -{57,35,62}, -{57,35,63}, -{57,35,64}, -{57,35,65}, -{57,36,-67}, -{57,36,-66}, -{57,36,-65}, -{57,36,-64}, -{57,36,-63}, -{57,36,-62}, -{57,36,-61}, -{57,36,-60}, -{57,36,-59}, -{57,36,-58}, -{57,36,-57}, -{57,36,-56}, -{57,36,-55}, -{57,36,-54}, -{57,36,-53}, -{57,36,-52}, -{57,36,-51}, -{57,36,-50}, -{57,36,-49}, -{57,36,-48}, -{57,36,-47}, -{57,36,-46}, -{57,36,-45}, -{57,36,-44}, -{57,36,-43}, -{57,36,-42}, -{57,36,-41}, -{57,36,-40}, -{57,36,-39}, -{57,36,-38}, -{57,36,-37}, -{57,36,-36}, -{57,36,-35}, -{57,36,-34}, -{57,36,-33}, -{57,36,-32}, -{57,36,-31}, -{57,36,-30}, -{57,36,-29}, -{57,36,-28}, -{57,36,-27}, -{57,36,-26}, -{57,36,-25}, -{57,36,-24}, -{57,36,-23}, -{57,36,-22}, -{57,36,-21}, -{57,36,-20}, -{57,36,-19}, -{57,36,-18}, -{57,36,-17}, -{57,36,-16}, -{57,36,-15}, -{57,36,-14}, -{57,36,-13}, -{57,36,-12}, -{57,36,-11}, -{57,36,-10}, -{57,36,-9}, -{57,36,-8}, -{57,36,-7}, -{57,36,-6}, -{57,36,-5}, -{57,36,-4}, -{57,36,-3}, -{57,36,-2}, -{57,36,-1}, -{57,36,0}, -{57,36,1}, -{57,36,2}, -{57,36,3}, -{57,36,4}, -{57,36,5}, -{57,36,6}, -{57,36,7}, -{57,36,8}, -{57,36,9}, -{57,36,10}, -{57,36,11}, -{57,36,12}, -{57,36,13}, -{57,36,14}, -{57,36,15}, -{57,36,16}, -{57,36,17}, -{57,36,18}, -{57,36,19}, -{57,36,20}, -{57,36,21}, -{57,36,22}, -{57,36,23}, -{57,36,24}, -{57,36,25}, -{57,36,26}, -{57,36,27}, -{57,36,28}, -{57,36,29}, -{57,36,30}, -{57,36,31}, -{57,36,32}, -{57,36,33}, -{57,36,34}, -{57,36,35}, -{57,36,36}, -{57,36,37}, -{57,36,38}, -{57,36,39}, -{57,36,40}, -{57,36,41}, -{57,36,42}, -{57,36,43}, -{57,36,44}, -{57,36,45}, -{57,36,46}, -{57,36,47}, -{57,36,48}, -{57,36,49}, -{57,36,50}, -{57,36,51}, -{57,36,52}, -{57,36,53}, -{57,36,54}, -{57,36,55}, -{57,36,56}, -{57,36,57}, -{57,36,58}, -{57,36,59}, -{57,36,60}, -{57,36,61}, -{57,36,62}, -{57,36,63}, -{57,36,64}, -{57,36,65}, -{57,37,-67}, -{57,37,-66}, -{57,37,-65}, -{57,37,-64}, -{57,37,-63}, -{57,37,-62}, -{57,37,-61}, -{57,37,-60}, -{57,37,-59}, -{57,37,-58}, -{57,37,-57}, -{57,37,-56}, -{57,37,-55}, -{57,37,-54}, -{57,37,-53}, -{57,37,-52}, -{57,37,-51}, -{57,37,-50}, -{57,37,-49}, -{57,37,-48}, -{57,37,-47}, -{57,37,-46}, -{57,37,-45}, -{57,37,-44}, -{57,37,-43}, -{57,37,-42}, -{57,37,-41}, -{57,37,-40}, -{57,37,-39}, -{57,37,-38}, -{57,37,-37}, -{57,37,-36}, -{57,37,-35}, -{57,37,-34}, -{57,37,-33}, -{57,37,-32}, -{57,37,-31}, -{57,37,-30}, -{57,37,-29}, -{57,37,-28}, -{57,37,-27}, -{57,37,-26}, -{57,37,-25}, -{57,37,-24}, -{57,37,-23}, -{57,37,-22}, -{57,37,-21}, -{57,37,-20}, -{57,37,-19}, -{57,37,-18}, -{57,37,-17}, -{57,37,-16}, -{57,37,-15}, -{57,37,-14}, -{57,37,-13}, -{57,37,-12}, -{57,37,-11}, -{57,37,-10}, -{57,37,-9}, -{57,37,-8}, -{57,37,-7}, -{57,37,-6}, -{57,37,-5}, -{57,37,-4}, -{57,37,-3}, -{57,37,-2}, -{57,37,-1}, -{57,37,0}, -{57,37,1}, -{57,37,2}, -{57,37,3}, -{57,37,4}, -{57,37,5}, -{57,37,6}, -{57,37,7}, -{57,37,8}, -{57,37,9}, -{57,37,10}, -{57,37,11}, -{57,37,12}, -{57,37,13}, -{57,37,14}, -{57,37,15}, -{57,37,16}, -{57,37,17}, -{57,37,18}, -{57,37,19}, -{57,37,20}, -{57,37,21}, -{57,37,22}, -{57,37,23}, -{57,37,24}, -{57,37,25}, -{57,37,26}, -{57,37,27}, -{57,37,28}, -{57,37,29}, -{57,37,30}, -{57,37,31}, -{57,37,32}, -{57,37,33}, -{57,37,34}, -{57,37,35}, -{57,37,36}, -{57,37,37}, -{57,37,38}, -{57,37,39}, -{57,37,40}, -{57,37,41}, -{57,37,42}, -{57,37,43}, -{57,37,44}, -{57,37,45}, -{57,37,46}, -{57,37,47}, -{57,37,48}, -{57,37,49}, -{57,37,50}, -{57,37,51}, -{57,37,52}, -{57,37,53}, -{57,37,54}, -{57,37,55}, -{57,37,56}, -{57,37,57}, -{57,37,58}, -{57,37,59}, -{57,37,60}, -{57,37,61}, -{57,37,62}, -{57,37,63}, -{57,37,64}, -{57,37,65}, -{57,38,-67}, -{57,38,-66}, -{57,38,-65}, -{57,38,-64}, -{57,38,-63}, -{57,38,-62}, -{57,38,-61}, -{57,38,-60}, -{57,38,-59}, -{57,38,-58}, -{57,38,-57}, -{57,38,-56}, -{57,38,-55}, -{57,38,-54}, -{57,38,-53}, -{57,38,-52}, -{57,38,-51}, -{57,38,-50}, -{57,38,-49}, -{57,38,-48}, -{57,38,-47}, -{57,38,-46}, -{57,38,-45}, -{57,38,-44}, -{57,38,-43}, -{57,38,-42}, -{57,38,-41}, -{57,38,-40}, -{57,38,-39}, -{57,38,-38}, -{57,38,-37}, -{57,38,-36}, -{57,38,-35}, -{57,38,-34}, -{57,38,-33}, -{57,38,-32}, -{57,38,-31}, -{57,38,-30}, -{57,38,-29}, -{57,38,-28}, -{57,38,-27}, -{57,38,-26}, -{57,38,-25}, -{57,38,-24}, -{57,38,-23}, -{57,38,-22}, -{57,38,-21}, -{57,38,-20}, -{57,38,-19}, -{57,38,-18}, -{57,38,-17}, -{57,38,-16}, -{57,38,-15}, -{57,38,-14}, -{57,38,-13}, -{57,38,-12}, -{57,38,-11}, -{57,38,-10}, -{57,38,-9}, -{57,38,-8}, -{57,38,-7}, -{57,38,-6}, -{57,38,-5}, -{57,38,-4}, -{57,38,-3}, -{57,38,-2}, -{57,38,-1}, -{57,38,0}, -{57,38,1}, -{57,38,2}, -{57,38,3}, -{57,38,4}, -{57,38,5}, -{57,38,6}, -{57,38,7}, -{57,38,8}, -{57,38,9}, -{57,38,10}, -{57,38,11}, -{57,38,12}, -{57,38,13}, -{57,38,14}, -{57,38,15}, -{57,38,16}, -{57,38,17}, -{57,38,18}, -{57,38,19}, -{57,38,20}, -{57,38,21}, -{57,38,22}, -{57,38,23}, -{57,38,24}, -{57,38,25}, -{57,38,26}, -{57,38,27}, -{57,38,28}, -{57,38,29}, -{57,38,30}, -{57,38,31}, -{57,38,32}, -{57,38,33}, -{57,38,34}, -{57,38,35}, -{57,38,36}, -{57,38,37}, -{57,38,38}, -{57,38,39}, -{57,38,40}, -{57,38,41}, -{57,38,42}, -{57,38,43}, -{57,38,44}, -{57,38,45}, -{57,38,46}, -{57,38,47}, -{57,38,48}, -{57,38,49}, -{57,38,50}, -{57,38,51}, -{57,38,52}, -{57,38,53}, -{57,38,54}, -{57,38,55}, -{57,38,56}, -{57,38,57}, -{57,38,58}, -{57,38,59}, -{57,38,60}, -{57,38,61}, -{57,38,62}, -{57,38,63}, -{57,38,64}, -{57,38,65}, -{57,39,-67}, -{57,39,-66}, -{57,39,-65}, -{57,39,-64}, -{57,39,-63}, -{57,39,-62}, -{57,39,-61}, -{57,39,-60}, -{57,39,-59}, -{57,39,-58}, -{57,39,-57}, -{57,39,-56}, -{57,39,-55}, -{57,39,-54}, -{57,39,-53}, -{57,39,-52}, -{57,39,-51}, -{57,39,-50}, -{57,39,-49}, -{57,39,-48}, -{57,39,-47}, -{57,39,-46}, -{57,39,-45}, -{57,39,-44}, -{57,39,-43}, -{57,39,-42}, -{57,39,-41}, -{57,39,-40}, -{57,39,-39}, -{57,39,-38}, -{57,39,-37}, -{57,39,-36}, -{57,39,-35}, -{57,39,-34}, -{57,39,-33}, -{57,39,-32}, -{57,39,-31}, -{57,39,-30}, -{57,39,-29}, -{57,39,-28}, -{57,39,-27}, -{57,39,-26}, -{57,39,-25}, -{57,39,-24}, -{57,39,-23}, -{57,39,-22}, -{57,39,-21}, -{57,39,-20}, -{57,39,-19}, -{57,39,-18}, -{57,39,-17}, -{57,39,-16}, -{57,39,-15}, -{57,39,-14}, -{57,39,-13}, -{57,39,-12}, -{57,39,-11}, -{57,39,-10}, -{57,39,-9}, -{57,39,-8}, -{57,39,-7}, -{57,39,-6}, -{57,39,-5}, -{57,39,-4}, -{57,39,-3}, -{57,39,-2}, -{57,39,-1}, -{57,39,0}, -{57,39,1}, -{57,39,2}, -{57,39,3}, -{57,39,4}, -{57,39,5}, -{57,39,6}, -{57,39,7}, -{57,39,8}, -{57,39,9}, -{57,39,10}, -{57,39,11}, -{57,39,12}, -{57,39,13}, -{57,39,14}, -{57,39,15}, -{57,39,16}, -{57,39,17}, -{57,39,18}, -{57,39,19}, -{57,39,20}, -{57,39,21}, -{57,39,22}, -{57,39,23}, -{57,39,24}, -{57,39,25}, -{57,39,26}, -{57,39,27}, -{57,39,28}, -{57,39,29}, -{57,39,30}, -{57,39,31}, -{57,39,32}, -{57,39,33}, -{57,39,34}, -{57,39,35}, -{57,39,36}, -{57,39,37}, -{57,39,38}, -{57,39,39}, -{57,39,40}, -{57,39,41}, -{57,39,42}, -{57,39,43}, -{57,39,44}, -{57,39,45}, -{57,39,46}, -{57,39,47}, -{57,39,48}, -{57,39,49}, -{57,39,50}, -{57,39,51}, -{57,39,52}, -{57,39,53}, -{57,39,54}, -{57,39,55}, -{57,39,56}, -{57,39,57}, -{57,39,58}, -{57,39,59}, -{57,39,60}, -{57,39,61}, -{57,39,62}, -{57,39,63}, -{57,39,64}, -{57,39,65}, -{57,40,-67}, -{57,40,-66}, -{57,40,-65}, -{57,40,-64}, -{57,40,-63}, -{57,40,-62}, -{57,40,-61}, -{57,40,-60}, -{57,40,-59}, -{57,40,-58}, -{57,40,-57}, -{57,40,-56}, -{57,40,-55}, -{57,40,-54}, -{57,40,-53}, -{57,40,-52}, -{57,40,-51}, -{57,40,-50}, -{57,40,-49}, -{57,40,-48}, -{57,40,-47}, -{57,40,-46}, -{57,40,-45}, -{57,40,-44}, -{57,40,-43}, -{57,40,-42}, -{57,40,-41}, -{57,40,-40}, -{57,40,-39}, -{57,40,-38}, -{57,40,-37}, -{57,40,-36}, -{57,40,-35}, -{57,40,-34}, -{57,40,-33}, -{57,40,-32}, -{57,40,-31}, -{57,40,-30}, -{57,40,-29}, -{57,40,-28}, -{57,40,-27}, -{57,40,-26}, -{57,40,-25}, -{57,40,-24}, -{57,40,-23}, -{57,40,-22}, -{57,40,-21}, -{57,40,-20}, -{57,40,-19}, -{57,40,-18}, -{57,40,-17}, -{57,40,-16}, -{57,40,-15}, -{57,40,-14}, -{57,40,-13}, -{57,40,-12}, -{57,40,-11}, -{57,40,-10}, -{57,40,-9}, -{57,40,-8}, -{57,40,-7}, -{57,40,-6}, -{57,40,-5}, -{57,40,-4}, -{57,40,-3}, -{57,40,-2}, -{57,40,-1}, -{57,40,0}, -{57,40,1}, -{57,40,2}, -{57,40,3}, -{57,40,4}, -{57,40,5}, -{57,40,6}, -{57,40,7}, -{57,40,8}, -{57,40,9}, -{57,40,10}, -{57,40,11}, -{57,40,12}, -{57,40,13}, -{57,40,14}, -{57,40,15}, -{57,40,16}, -{57,40,17}, -{57,40,18}, -{57,40,19}, -{57,40,20}, -{57,40,21}, -{57,40,22}, -{57,40,23}, -{57,40,24}, -{57,40,25}, -{57,40,26}, -{57,40,27}, -{57,40,28}, -{57,40,29}, -{57,40,30}, -{57,40,31}, -{57,40,32}, -{57,40,33}, -{57,40,34}, -{57,40,35}, -{57,40,36}, -{57,40,37}, -{57,40,38}, -{57,40,39}, -{57,40,40}, -{57,40,41}, -{57,40,42}, -{57,40,43}, -{57,40,44}, -{57,40,45}, -{57,40,46}, -{57,40,47}, -{57,40,48}, -{57,40,49}, -{57,40,50}, -{57,40,51}, -{57,40,52}, -{57,40,53}, -{57,40,54}, -{57,40,55}, -{57,40,56}, -{57,40,57}, -{57,40,58}, -{57,40,59}, -{57,40,60}, -{57,40,61}, -{57,40,62}, -{57,40,63}, -{57,40,64}, -{57,40,65}, -{57,41,-67}, -{57,41,-66}, -{57,41,-65}, -{57,41,-64}, -{57,41,-63}, -{57,41,-62}, -{57,41,-61}, -{57,41,-60}, -{57,41,-59}, -{57,41,-58}, -{57,41,-57}, -{57,41,-56}, -{57,41,-55}, -{57,41,-54}, -{57,41,-53}, -{57,41,-52}, -{57,41,-51}, -{57,41,-50}, -{57,41,-49}, -{57,41,-48}, -{57,41,-47}, -{57,41,-46}, -{57,41,-45}, -{57,41,-44}, -{57,41,-43}, -{57,41,-42}, -{57,41,-41}, -{57,41,-40}, -{57,41,-39}, -{57,41,-38}, -{57,41,-37}, -{57,41,-36}, -{57,41,-35}, -{57,41,-34}, -{57,41,-33}, -{57,41,-32}, -{57,41,-31}, -{57,41,-30}, -{57,41,-29}, -{57,41,-28}, -{57,41,-27}, -{57,41,-26}, -{57,41,-25}, -{57,41,-24}, -{57,41,-23}, -{57,41,-22}, -{57,41,-21}, -{57,41,-20}, -{57,41,-19}, -{57,41,-18}, -{57,41,-17}, -{57,41,-16}, -{57,41,-15}, -{57,41,-14}, -{57,41,-13}, -{57,41,-12}, -{57,41,-11}, -{57,41,-10}, -{57,41,-9}, -{57,41,-8}, -{57,41,-7}, -{57,41,-6}, -{57,41,-5}, -{57,41,-4}, -{57,41,-3}, -{57,41,-2}, -{57,41,-1}, -{57,41,0}, -{57,41,1}, -{57,41,2}, -{57,41,3}, -{57,41,4}, -{57,41,5}, -{57,41,6}, -{57,41,7}, -{57,41,8}, -{57,41,9}, -{57,41,10}, -{57,41,11}, -{57,41,12}, -{57,41,13}, -{57,41,14}, -{57,41,15}, -{57,41,16}, -{57,41,17}, -{57,41,18}, -{57,41,19}, -{57,41,20}, -{57,41,21}, -{57,41,22}, -{57,41,23}, -{57,41,24}, -{57,41,25}, -{57,41,26}, -{57,41,27}, -{57,41,28}, -{57,41,29}, -{57,41,30}, -{57,41,31}, -{57,41,32}, -{57,41,33}, -{57,41,34}, -{57,41,35}, -{57,41,36}, -{57,41,37}, -{57,41,38}, -{57,41,39}, -{57,41,40}, -{57,41,41}, -{57,41,42}, -{57,41,43}, -{57,41,44}, -{57,41,45}, -{57,41,46}, -{57,41,47}, -{57,41,48}, -{57,41,49}, -{57,41,50}, -{57,41,51}, -{57,41,52}, -{57,41,53}, -{57,41,54}, -{57,41,55}, -{57,41,56}, -{57,41,57}, -{57,41,58}, -{57,41,59}, -{57,41,60}, -{57,41,61}, -{57,41,62}, -{57,41,63}, -{57,41,64}, -{57,41,65}, -{57,42,-67}, -{57,42,-66}, -{57,42,-65}, -{57,42,-64}, -{57,42,-63}, -{57,42,-62}, -{57,42,-61}, -{57,42,-60}, -{57,42,-59}, -{57,42,-58}, -{57,42,-57}, -{57,42,-56}, -{57,42,-55}, -{57,42,-54}, -{57,42,-53}, -{57,42,-52}, -{57,42,-51}, -{57,42,-50}, -{57,42,-49}, -{57,42,-48}, -{57,42,-47}, -{57,42,-46}, -{57,42,-45}, -{57,42,-44}, -{57,42,-43}, -{57,42,-42}, -{57,42,-41}, -{57,42,-40}, -{57,42,-39}, -{57,42,-38}, -{57,42,-37}, -{57,42,-36}, -{57,42,-35}, -{57,42,-34}, -{57,42,-33}, -{57,42,-32}, -{57,42,-31}, -{57,42,-30}, -{57,42,-29}, -{57,42,-28}, -{57,42,-27}, -{57,42,-26}, -{57,42,-25}, -{57,42,-24}, -{57,42,-23}, -{57,42,-22}, -{57,42,-21}, -{57,42,-20}, -{57,42,-19}, -{57,42,-18}, -{57,42,-17}, -{57,42,-16}, -{57,42,-15}, -{57,42,-14}, -{57,42,-13}, -{57,42,-12}, -{57,42,-11}, -{57,42,-10}, -{57,42,-9}, -{57,42,-8}, -{57,42,-7}, -{57,42,-6}, -{57,42,-5}, -{57,42,-4}, -{57,42,-3}, -{57,42,-2}, -{57,42,-1}, -{57,42,0}, -{57,42,1}, -{57,42,2}, -{57,42,3}, -{57,42,4}, -{57,42,5}, -{57,42,6}, -{57,42,7}, -{57,42,8}, -{57,42,9}, -{57,42,10}, -{57,42,11}, -{57,42,12}, -{57,42,13}, -{57,42,14}, -{57,42,15}, -{57,42,16}, -{57,42,17}, -{57,42,18}, -{57,42,19}, -{57,42,20}, -{57,42,21}, -{57,42,22}, -{57,42,23}, -{57,42,24}, -{57,42,25}, -{57,42,26}, -{57,42,27}, -{57,42,28}, -{57,42,29}, -{57,42,30}, -{57,42,31}, -{57,42,32}, -{57,42,33}, -{57,42,34}, -{57,42,35}, -{57,42,36}, -{57,42,37}, -{57,42,38}, -{57,42,39}, -{57,42,40}, -{57,42,41}, -{57,42,42}, -{57,42,43}, -{57,42,44}, -{57,42,45}, -{57,42,46}, -{57,42,47}, -{57,42,48}, -{57,42,49}, -{57,42,50}, -{57,42,51}, -{57,42,52}, -{57,42,53}, -{57,42,54}, -{57,42,55}, -{57,42,56}, -{57,42,57}, -{57,42,58}, -{57,42,59}, -{57,42,60}, -{57,42,61}, -{57,42,62}, -{57,42,63}, -{57,42,64}, -{57,42,65}, -{57,43,-67}, -{57,43,-66}, -{57,43,-65}, -{57,43,-64}, -{57,43,-63}, -{57,43,-62}, -{57,43,-61}, -{57,43,-60}, -{57,43,-59}, -{57,43,-58}, -{57,43,-57}, -{57,43,-56}, -{57,43,-55}, -{57,43,-54}, -{57,43,-53}, -{57,43,-52}, -{57,43,-51}, -{57,43,-50}, -{57,43,-49}, -{57,43,-48}, -{57,43,-47}, -{57,43,-46}, -{57,43,-45}, -{57,43,-44}, -{57,43,-43}, -{57,43,-42}, -{57,43,-41}, -{57,43,-40}, -{57,43,-39}, -{57,43,-38}, -{57,43,-37}, -{57,43,-36}, -{57,43,-35}, -{57,43,-34}, -{57,43,-33}, -{57,43,-32}, -{57,43,-31}, -{57,43,-30}, -{57,43,-29}, -{57,43,-28}, -{57,43,-27}, -{57,43,-26}, -{57,43,-25}, -{57,43,-24}, -{57,43,-23}, -{57,43,-22}, -{57,43,-21}, -{57,43,-20}, -{57,43,-19}, -{57,43,-18}, -{57,43,-17}, -{57,43,-16}, -{57,43,-15}, -{57,43,-14}, -{57,43,-13}, -{57,43,-12}, -{57,43,-11}, -{57,43,-10}, -{57,43,-9}, -{57,43,-8}, -{57,43,-7}, -{57,43,-6}, -{57,43,-5}, -{57,43,-4}, -{57,43,-3}, -{57,43,-2}, -{57,43,-1}, -{57,43,0}, -{57,43,1}, -{57,43,2}, -{57,43,3}, -{57,43,4}, -{57,43,5}, -{57,43,6}, -{57,43,7}, -{57,43,8}, -{57,43,9}, -{57,43,10}, -{57,43,11}, -{57,43,12}, -{57,43,13}, -{57,43,14}, -{57,43,15}, -{57,43,16}, -{57,43,17}, -{57,43,18}, -{57,43,19}, -{57,43,20}, -{57,43,21}, -{57,43,22}, -{57,43,23}, -{57,43,24}, -{57,43,25}, -{57,43,26}, -{57,43,27}, -{57,43,28}, -{57,43,29}, -{57,43,30}, -{57,43,31}, -{57,43,32}, -{57,43,33}, -{57,43,34}, -{57,43,35}, -{57,43,36}, -{57,43,37}, -{57,43,38}, -{57,43,39}, -{57,43,40}, -{57,43,41}, -{57,43,42}, -{57,43,43}, -{57,43,44}, -{57,43,45}, -{57,43,46}, -{57,43,47}, -{57,43,48}, -{57,43,49}, -{57,43,50}, -{57,43,51}, -{57,43,52}, -{57,43,53}, -{57,43,54}, -{57,43,55}, -{57,43,56}, -{57,43,57}, -{57,43,58}, -{57,43,59}, -{57,43,60}, -{57,43,61}, -{57,43,62}, -{57,43,63}, -{57,43,64}, -{57,43,65}, -{57,44,-67}, -{57,44,-66}, -{57,44,-65}, -{57,44,-64}, -{57,44,-63}, -{57,44,-62}, -{57,44,-61}, -{57,44,-60}, -{57,44,-59}, -{57,44,-58}, -{57,44,-57}, -{57,44,-56}, -{57,44,-55}, -{57,44,-54}, -{57,44,-53}, -{57,44,-52}, -{57,44,-51}, -{57,44,-50}, -{57,44,-49}, -{57,44,-48}, -{57,44,-47}, -{57,44,-46}, -{57,44,-45}, -{57,44,-44}, -{57,44,-43}, -{57,44,-42}, -{57,44,-41}, -{57,44,-40}, -{57,44,-39}, -{57,44,-38}, -{57,44,-37}, -{57,44,-36}, -{57,44,-35}, -{57,44,-34}, -{57,44,-33}, -{57,44,-32}, -{57,44,-31}, -{57,44,-30}, -{57,44,-29}, -{57,44,-28}, -{57,44,-27}, -{57,44,-26}, -{57,44,-25}, -{57,44,-24}, -{57,44,-23}, -{57,44,-22}, -{57,44,-21}, -{57,44,-20}, -{57,44,-19}, -{57,44,-18}, -{57,44,-17}, -{57,44,-16}, -{57,44,-15}, -{57,44,-14}, -{57,44,-13}, -{57,44,-12}, -{57,44,-11}, -{57,44,-10}, -{57,44,-9}, -{57,44,-8}, -{57,44,-7}, -{57,44,-6}, -{57,44,-5}, -{57,44,-4}, -{57,44,-3}, -{57,44,-2}, -{57,44,-1}, -{57,44,0}, -{57,44,1}, -{57,44,2}, -{57,44,3}, -{57,44,4}, -{57,44,5}, -{57,44,6}, -{57,44,7}, -{57,44,8}, -{57,44,9}, -{57,44,10}, -{57,44,11}, -{57,44,12}, -{57,44,13}, -{57,44,14}, -{57,44,15}, -{57,44,16}, -{57,44,17}, -{57,44,18}, -{57,44,19}, -{57,44,20}, -{57,44,21}, -{57,44,22}, -{57,44,23}, -{57,44,24}, -{57,44,25}, -{57,44,26}, -{57,44,27}, -{57,44,28}, -{57,44,29}, -{57,44,30}, -{57,44,31}, -{57,44,32}, -{57,44,33}, -{57,44,34}, -{57,44,35}, -{57,44,36}, -{57,44,37}, -{57,44,38}, -{57,44,39}, -{57,44,40}, -{57,44,41}, -{57,44,42}, -{57,44,43}, -{57,44,44}, -{57,44,45}, -{57,44,46}, -{57,44,47}, -{57,44,48}, -{57,44,49}, -{57,44,50}, -{57,44,51}, -{57,44,52}, -{57,44,53}, -{57,44,54}, -{57,44,55}, -{57,44,56}, -{57,44,57}, -{57,44,58}, -{57,44,59}, -{57,44,60}, -{57,44,61}, -{57,44,62}, -{57,44,63}, -{57,44,64}, -{57,44,65}, -{57,45,-67}, -{57,45,-66}, -{57,45,-65}, -{57,45,-64}, -{57,45,-63}, -{57,45,-62}, -{57,45,-61}, -{57,45,-60}, -{57,45,-59}, -{57,45,-58}, -{57,45,-57}, -{57,45,-56}, -{57,45,-55}, -{57,45,-54}, -{57,45,-53}, -{57,45,-52}, -{57,45,-51}, -{57,45,-50}, -{57,45,-49}, -{57,45,-48}, -{57,45,-47}, -{57,45,-46}, -{57,45,-45}, -{57,45,-44}, -{57,45,-43}, -{57,45,-42}, -{57,45,-41}, -{57,45,-40}, -{57,45,-39}, -{57,45,-38}, -{57,45,-37}, -{57,45,-36}, -{57,45,-35}, -{57,45,-34}, -{57,45,-33}, -{57,45,-32}, -{57,45,-31}, -{57,45,-30}, -{57,45,-29}, -{57,45,-28}, -{57,45,-27}, -{57,45,-26}, -{57,45,-25}, -{57,45,-24}, -{57,45,-23}, -{57,45,-22}, -{57,45,-21}, -{57,45,-20}, -{57,45,-19}, -{57,45,-18}, -{57,45,-17}, -{57,45,-16}, -{57,45,-15}, -{57,45,-14}, -{57,45,-13}, -{57,45,-12}, -{57,45,-11}, -{57,45,-10}, -{57,45,-9}, -{57,45,-8}, -{57,45,-7}, -{57,45,-6}, -{57,45,-5}, -{57,45,-4}, -{57,45,-3}, -{57,45,-2}, -{57,45,-1}, -{57,45,0}, -{57,45,1}, -{57,45,2}, -{57,45,3}, -{57,45,4}, -{57,45,5}, -{57,45,6}, -{57,45,7}, -{57,45,8}, -{57,45,9}, -{57,45,10}, -{57,45,11}, -{57,45,12}, -{57,45,13}, -{57,45,14}, -{57,45,15}, -{57,45,16}, -{57,45,17}, -{57,45,18}, -{57,45,19}, -{57,45,20}, -{57,45,21}, -{57,45,22}, -{57,45,23}, -{57,45,24}, -{57,45,25}, -{57,45,26}, -{57,45,27}, -{57,45,28}, -{57,45,29}, -{57,45,30}, -{57,45,31}, -{57,45,32}, -{57,45,33}, -{57,45,34}, -{57,45,35}, -{57,45,36}, -{57,45,37}, -{57,45,38}, -{57,45,39}, -{57,45,40}, -{57,45,41}, -{57,45,42}, -{57,45,43}, -{57,45,44}, -{57,45,45}, -{57,45,46}, -{57,45,47}, -{57,45,48}, -{57,45,49}, -{57,45,50}, -{57,45,51}, -{57,45,52}, -{57,45,53}, -{57,45,54}, -{57,45,55}, -{57,45,56}, -{57,45,57}, -{57,45,58}, -{57,45,59}, -{57,45,60}, -{57,45,61}, -{57,45,62}, -{57,45,63}, -{57,45,64}, -{57,45,65}, -{57,45,66}, -{57,46,-67}, -{57,46,-66}, -{57,46,-65}, -{57,46,-64}, -{57,46,-63}, -{57,46,-62}, -{57,46,-61}, -{57,46,-60}, -{57,46,-59}, -{57,46,-58}, -{57,46,-57}, -{57,46,-56}, -{57,46,-55}, -{57,46,-54}, -{57,46,-53}, -{57,46,-52}, -{57,46,-51}, -{57,46,-50}, -{57,46,-49}, -{57,46,-48}, -{57,46,-47}, -{57,46,-46}, -{57,46,-45}, -{57,46,-44}, -{57,46,-43}, -{57,46,-42}, -{57,46,-41}, -{57,46,-40}, -{57,46,-39}, -{57,46,-38}, -{57,46,-37}, -{57,46,-36}, -{57,46,-35}, -{57,46,-34}, -{57,46,-33}, -{57,46,-32}, -{57,46,-31}, -{57,46,-30}, -{57,46,-29}, -{57,46,-28}, -{57,46,-27}, -{57,46,-26}, -{57,46,-25}, -{57,46,-24}, -{57,46,-23}, -{57,46,-22}, -{57,46,-21}, -{57,46,-20}, -{57,46,-19}, -{57,46,-18}, -{57,46,-17}, -{57,46,-16}, -{57,46,-15}, -{57,46,-14}, -{57,46,-13}, -{57,46,-12}, -{57,46,-11}, -{57,46,-10}, -{57,46,-9}, -{57,46,-8}, -{57,46,-7}, -{57,46,-6}, -{57,46,-5}, -{57,46,-4}, -{57,46,-3}, -{57,46,-2}, -{57,46,-1}, -{57,46,0}, -{57,46,1}, -{57,46,2}, -{57,46,3}, -{57,46,4}, -{57,46,5}, -{57,46,6}, -{57,46,7}, -{57,46,8}, -{57,46,9}, -{57,46,10}, -{57,46,11}, -{57,46,12}, -{57,46,13}, -{57,46,14}, -{57,46,15}, -{57,46,16}, -{57,46,17}, -{57,46,18}, -{57,46,19}, -{57,46,20}, -{57,46,21}, -{57,46,22}, -{57,46,23}, -{57,46,24}, -{57,46,25}, -{57,46,26}, -{57,46,27}, -{57,46,28}, -{57,46,29}, -{57,46,30}, -{57,46,31}, -{57,46,32}, -{57,46,33}, -{57,46,34}, -{57,46,35}, -{57,46,36}, -{57,46,37}, -{57,46,38}, -{57,46,39}, -{57,46,40}, -{57,46,41}, -{57,46,42}, -{57,46,43}, -{57,46,44}, -{57,46,45}, -{57,46,46}, -{57,46,47}, -{57,46,48}, -{57,46,49}, -{57,46,50}, -{57,46,51}, -{57,46,52}, -{57,46,53}, -{57,46,54}, -{57,46,55}, -{57,46,56}, -{57,46,57}, -{57,46,58}, -{57,46,59}, -{57,46,60}, -{57,46,61}, -{57,46,62}, -{57,46,63}, -{57,46,64}, -{57,46,65}, -{57,46,66}, -{57,47,-67}, -{57,47,-66}, -{57,47,-65}, -{57,47,-64}, -{57,47,-63}, -{57,47,-62}, -{57,47,-61}, -{57,47,-60}, -{57,47,-59}, -{57,47,-58}, -{57,47,-57}, -{57,47,-56}, -{57,47,-55}, -{57,47,-54}, -{57,47,-53}, -{57,47,-52}, -{57,47,-51}, -{57,47,-50}, -{57,47,-49}, -{57,47,-48}, -{57,47,-47}, -{57,47,-46}, -{57,47,-45}, -{57,47,-44}, -{57,47,-43}, -{57,47,-42}, -{57,47,-41}, -{57,47,-40}, -{57,47,-39}, -{57,47,-38}, -{57,47,-37}, -{57,47,-36}, -{57,47,-35}, -{57,47,-34}, -{57,47,-33}, -{57,47,-32}, -{57,47,-31}, -{57,47,-30}, -{57,47,-29}, -{57,47,-28}, -{57,47,-27}, -{57,47,-26}, -{57,47,-25}, -{57,47,-24}, -{57,47,-23}, -{57,47,-22}, -{57,47,-21}, -{57,47,-20}, -{57,47,-19}, -{57,47,-18}, -{57,47,-17}, -{57,47,-16}, -{57,47,-15}, -{57,47,-14}, -{57,47,-13}, -{57,47,-12}, -{57,47,-11}, -{57,47,-10}, -{57,47,-9}, -{57,47,-8}, -{57,47,-7}, -{57,47,-6}, -{57,47,-5}, -{57,47,-4}, -{57,47,-3}, -{57,47,-2}, -{57,47,-1}, -{57,47,0}, -{57,47,1}, -{57,47,2}, -{57,47,3}, -{57,47,4}, -{57,47,5}, -{57,47,6}, -{57,47,7}, -{57,47,8}, -{57,47,9}, -{57,47,10}, -{57,47,11}, -{57,47,12}, -{57,47,13}, -{57,47,14}, -{57,47,15}, -{57,47,16}, -{57,47,17}, -{57,47,18}, -{57,47,19}, -{57,47,20}, -{57,47,21}, -{57,47,22}, -{57,47,23}, -{57,47,24}, -{57,47,25}, -{57,47,26}, -{57,47,27}, -{57,47,28}, -{57,47,29}, -{57,47,30}, -{57,47,31}, -{57,47,32}, -{57,47,33}, -{57,47,34}, -{57,47,35}, -{57,47,36}, -{57,47,37}, -{57,47,38}, -{57,47,39}, -{57,47,40}, -{57,47,41}, -{57,47,42}, -{57,47,43}, -{57,47,44}, -{57,47,45}, -{57,47,46}, -{57,47,47}, -{57,47,48}, -{57,47,49}, -{57,47,50}, -{57,47,51}, -{57,47,52}, -{57,47,53}, -{57,47,54}, -{57,47,55}, -{57,47,56}, -{57,47,57}, -{57,47,58}, -{57,47,59}, -{57,47,60}, -{57,47,61}, -{57,47,62}, -{57,47,63}, -{57,47,64}, -{57,47,65}, -{57,47,66}, -{57,48,-67}, -{57,48,-66}, -{57,48,-65}, -{57,48,-64}, -{57,48,-63}, -{57,48,-62}, -{57,48,-61}, -{57,48,-60}, -{57,48,-59}, -{57,48,-58}, -{57,48,-57}, -{57,48,-56}, -{57,48,-55}, -{57,48,-54}, -{57,48,-53}, -{57,48,-52}, -{57,48,-51}, -{57,48,-50}, -{57,48,-49}, -{57,48,-48}, -{57,48,-47}, -{57,48,-46}, -{57,48,-45}, -{57,48,-44}, -{57,48,-43}, -{57,48,-42}, -{57,48,-41}, -{57,48,-40}, -{57,48,-39}, -{57,48,-38}, -{57,48,-37}, -{57,48,-36}, -{57,48,-35}, -{57,48,-34}, -{57,48,-33}, -{57,48,-32}, -{57,48,-31}, -{57,48,-30}, -{57,48,-29}, -{57,48,-28}, -{57,48,-27}, -{57,48,-26}, -{57,48,-25}, -{57,48,-24}, -{57,48,-23}, -{57,48,-22}, -{57,48,-21}, -{57,48,-20}, -{57,48,-19}, -{57,48,-18}, -{57,48,-17}, -{57,48,-16}, -{57,48,-15}, -{57,48,-14}, -{57,48,-13}, -{57,48,-12}, -{57,48,-11}, -{57,48,-10}, -{57,48,-9}, -{57,48,-8}, -{57,48,-7}, -{57,48,-6}, -{57,48,-5}, -{57,48,-4}, -{57,48,-3}, -{57,48,-2}, -{57,48,-1}, -{57,48,0}, -{57,48,1}, -{57,48,2}, -{57,48,3}, -{57,48,4}, -{57,48,5}, -{57,48,6}, -{57,48,7}, -{57,48,8}, -{57,48,9}, -{57,48,10}, -{57,48,11}, -{57,48,12}, -{57,48,13}, -{57,48,14}, -{57,48,15}, -{57,48,16}, -{57,48,17}, -{57,48,18}, -{57,48,19}, -{57,48,20}, -{57,48,21}, -{57,48,22}, -{57,48,23}, -{57,48,24}, -{57,48,25}, -{57,48,26}, -{57,48,27}, -{57,48,28}, -{57,48,29}, -{57,48,30}, -{57,48,31}, -{57,48,32}, -{57,48,33}, -{57,48,34}, -{57,48,35}, -{57,48,36}, -{57,48,37}, -{57,48,38}, -{57,48,39}, -{57,48,40}, -{57,48,41}, -{57,48,42}, -{57,48,43}, -{57,48,44}, -{57,48,45}, -{57,48,46}, -{57,48,47}, -{57,48,48}, -{57,48,49}, -{57,48,50}, -{57,48,51}, -{57,48,52}, -{57,48,53}, -{57,48,54}, -{57,48,55}, -{57,48,56}, -{57,48,57}, -{57,48,58}, -{57,48,59}, -{57,48,60}, -{57,48,61}, -{57,48,62}, -{57,48,63}, -{57,48,64}, -{57,48,65}, -{57,48,66}, -{57,49,-67}, -{57,49,-66}, -{57,49,-65}, -{57,49,-64}, -{57,49,-63}, -{57,49,-62}, -{57,49,-61}, -{57,49,-60}, -{57,49,-59}, -{57,49,-58}, -{57,49,-57}, -{57,49,-56}, -{57,49,-55}, -{57,49,-54}, -{57,49,-53}, -{57,49,-52}, -{57,49,-51}, -{57,49,-50}, -{57,49,-49}, -{57,49,-48}, -{57,49,-47}, -{57,49,-46}, -{57,49,-45}, -{57,49,-44}, -{57,49,-43}, -{57,49,-42}, -{57,49,-41}, -{57,49,-40}, -{57,49,-39}, -{57,49,-38}, -{57,49,-37}, -{57,49,-36}, -{57,49,-35}, -{57,49,-34}, -{57,49,-33}, -{57,49,-32}, -{57,49,-31}, -{57,49,-30}, -{57,49,-29}, -{57,49,-28}, -{57,49,-27}, -{57,49,-26}, -{57,49,-25}, -{57,49,-24}, -{57,49,-23}, -{57,49,-22}, -{57,49,-21}, -{57,49,-20}, -{57,49,-19}, -{57,49,-18}, -{57,49,-17}, -{57,49,-16}, -{57,49,-15}, -{57,49,-14}, -{57,49,-13}, -{57,49,-12}, -{57,49,-11}, -{57,49,-10}, -{57,49,-9}, -{57,49,-8}, -{57,49,-7}, -{57,49,-6}, -{57,49,-5}, -{57,49,-4}, -{57,49,-3}, -{57,49,-2}, -{57,49,-1}, -{57,49,0}, -{57,49,1}, -{57,49,2}, -{57,49,3}, -{57,49,4}, -{57,49,5}, -{57,49,6}, -{57,49,7}, -{57,49,8}, -{57,49,9}, -{57,49,10}, -{57,49,11}, -{57,49,12}, -{57,49,13}, -{57,49,14}, -{57,49,15}, -{57,49,16}, -{57,49,17}, -{57,49,18}, -{57,49,19}, -{57,49,20}, -{57,49,21}, -{57,49,22}, -{57,49,23}, -{57,49,24}, -{57,49,25}, -{57,49,26}, -{57,49,27}, -{57,49,28}, -{57,49,29}, -{57,49,30}, -{57,49,31}, -{57,49,32}, -{57,49,33}, -{57,49,34}, -{57,49,35}, -{57,49,36}, -{57,49,37}, -{57,49,38}, -{57,49,39}, -{57,49,40}, -{57,49,41}, -{57,49,42}, -{57,49,43}, -{57,49,44}, -{57,49,45}, -{57,49,46}, -{57,49,47}, -{57,49,48}, -{57,49,49}, -{57,49,50}, -{57,49,51}, -{57,49,52}, -{57,49,53}, -{57,49,54}, -{57,49,55}, -{57,49,56}, -{57,49,57}, -{57,49,58}, -{57,49,59}, -{57,49,60}, -{57,49,61}, -{57,49,62}, -{57,49,63}, -{57,49,64}, -{57,49,65}, -{57,49,66}, -{57,50,-67}, -{57,50,-66}, -{57,50,-65}, -{57,50,-64}, -{57,50,-63}, -{57,50,-62}, -{57,50,-61}, -{57,50,-60}, -{57,50,-59}, -{57,50,-58}, -{57,50,-57}, -{57,50,-56}, -{57,50,-55}, -{57,50,-54}, -{57,50,-53}, -{57,50,-52}, -{57,50,-51}, -{57,50,-50}, -{57,50,-49}, -{57,50,-48}, -{57,50,-47}, -{57,50,-46}, -{57,50,-45}, -{57,50,-44}, -{57,50,-43}, -{57,50,-42}, -{57,50,-41}, -{57,50,-40}, -{57,50,-39}, -{57,50,-38}, -{57,50,-37}, -{57,50,-36}, -{57,50,-35}, -{57,50,-34}, -{57,50,-33}, -{57,50,-32}, -{57,50,-31}, -{57,50,-30}, -{57,50,-29}, -{57,50,-28}, -{57,50,-27}, -{57,50,-26}, -{57,50,-25}, -{57,50,-24}, -{57,50,-23}, -{57,50,-22}, -{57,50,-21}, -{57,50,-20}, -{57,50,-19}, -{57,50,-18}, -{57,50,-17}, -{57,50,-16}, -{57,50,-15}, -{57,50,-14}, -{57,50,-13}, -{57,50,-12}, -{57,50,-11}, -{57,50,-10}, -{57,50,-9}, -{57,50,-8}, -{57,50,-7}, -{57,50,-6}, -{57,50,-5}, -{57,50,-4}, -{57,50,-3}, -{57,50,-2}, -{57,50,-1}, -{57,50,0}, -{57,50,1}, -{57,50,2}, -{57,50,3}, -{57,50,4}, -{57,50,5}, -{57,50,6}, -{57,50,7}, -{57,50,8}, -{57,50,9}, -{57,50,10}, -{57,50,11}, -{57,50,12}, -{57,50,13}, -{57,50,14}, -{57,50,15}, -{57,50,16}, -{57,50,17}, -{57,50,18}, -{57,50,19}, -{57,50,20}, -{57,50,21}, -{57,50,22}, -{57,50,23}, -{57,50,24}, -{57,50,25}, -{57,50,26}, -{57,50,27}, -{57,50,28}, -{57,50,29}, -{57,50,30}, -{57,50,31}, -{57,50,32}, -{57,50,33}, -{57,50,34}, -{57,50,35}, -{57,50,36}, -{57,50,37}, -{57,50,38}, -{57,50,39}, -{57,50,40}, -{57,50,41}, -{57,50,42}, -{57,50,43}, -{57,50,44}, -{57,50,45}, -{57,50,46}, -{57,50,47}, -{57,50,48}, -{57,50,49}, -{57,50,50}, -{57,50,51}, -{57,50,52}, -{57,50,53}, -{57,50,54}, -{57,50,55}, -{57,50,56}, -{57,50,57}, -{57,50,58}, -{57,50,59}, -{57,50,60}, -{57,50,61}, -{57,50,62}, -{57,50,63}, -{57,50,64}, -{57,50,65}, -{57,50,66}, -{57,51,-67}, -{57,51,-66}, -{57,51,-65}, -{57,51,-64}, -{57,51,-63}, -{57,51,-62}, -{57,51,-61}, -{57,51,-60}, -{57,51,-59}, -{57,51,-58}, -{57,51,-57}, -{57,51,-56}, -{57,51,-55}, -{57,51,-54}, -{57,51,-53}, -{57,51,-52}, -{57,51,-51}, -{57,51,-50}, -{57,51,-49}, -{57,51,-48}, -{57,51,-47}, -{57,51,-46}, -{57,51,-45}, -{57,51,-44}, -{57,51,-43}, -{57,51,-42}, -{57,51,-41}, -{57,51,-40}, -{57,51,-39}, -{57,51,-38}, -{57,51,-37}, -{57,51,-36}, -{57,51,-35}, -{57,51,-34}, -{57,51,-33}, -{57,51,-32}, -{57,51,-31}, -{57,51,-30}, -{57,51,-29}, -{57,51,-28}, -{57,51,-27}, -{57,51,-26}, -{57,51,-25}, -{57,51,-24}, -{57,51,-23}, -{57,51,-22}, -{57,51,-21}, -{57,51,-20}, -{57,51,-19}, -{57,51,-18}, -{57,51,-17}, -{57,51,-16}, -{57,51,-15}, -{57,51,-14}, -{57,51,-13}, -{57,51,-12}, -{57,51,-11}, -{57,51,-10}, -{57,51,-9}, -{57,51,-8}, -{57,51,-7}, -{57,51,-6}, -{57,51,-5}, -{57,51,-4}, -{57,51,-3}, -{57,51,-2}, -{57,51,-1}, -{57,51,0}, -{57,51,1}, -{57,51,2}, -{57,51,3}, -{57,51,4}, -{57,51,5}, -{57,51,6}, -{57,51,7}, -{57,51,8}, -{57,51,9}, -{57,51,10}, -{57,51,11}, -{57,51,12}, -{57,51,13}, -{57,51,14}, -{57,51,15}, -{57,51,16}, -{57,51,17}, -{57,51,18}, -{57,51,19}, -{57,51,20}, -{57,51,21}, -{57,51,22}, -{57,51,23}, -{57,51,24}, -{57,51,25}, -{57,51,26}, -{57,51,27}, -{57,51,28}, -{57,51,29}, -{57,51,30}, -{57,51,31}, -{57,51,32}, -{57,51,33}, -{57,51,34}, -{57,51,35}, -{57,51,36}, -{57,51,37}, -{57,51,38}, -{57,51,39}, -{57,51,40}, -{57,51,41}, -{57,51,42}, -{57,51,43}, -{57,51,44}, -{57,51,45}, -{57,51,46}, -{57,51,47}, -{57,51,48}, -{57,51,49}, -{57,51,50}, -{57,51,51}, -{57,51,52}, -{57,51,53}, -{57,51,54}, -{57,51,55}, -{57,51,56}, -{57,51,57}, -{57,51,58}, -{57,51,59}, -{57,51,60}, -{57,51,61}, -{57,51,62}, -{57,51,63}, -{57,51,64}, -{57,51,65}, -{57,51,66}, -{57,52,-67}, -{57,52,-66}, -{57,52,-65}, -{57,52,-64}, -{57,52,-63}, -{57,52,-62}, -{57,52,-61}, -{57,52,-60}, -{57,52,-59}, -{57,52,-58}, -{57,52,-57}, -{57,52,-56}, -{57,52,-55}, -{57,52,-54}, -{57,52,-53}, -{57,52,-52}, -{57,52,-51}, -{57,52,-50}, -{57,52,-49}, -{57,52,-48}, -{57,52,-47}, -{57,52,-46}, -{57,52,-45}, -{57,52,-44}, -{57,52,-43}, -{57,52,-42}, -{57,52,-41}, -{57,52,-40}, -{57,52,-39}, -{57,52,-38}, -{57,52,-37}, -{57,52,-36}, -{57,52,-35}, -{57,52,-34}, -{57,52,-33}, -{57,52,-32}, -{57,52,-31}, -{57,52,-30}, -{57,52,-29}, -{57,52,-28}, -{57,52,-27}, -{57,52,-26}, -{57,52,-25}, -{57,52,-24}, -{57,52,-23}, -{57,52,-22}, -{57,52,-21}, -{57,52,-20}, -{57,52,-19}, -{57,52,-18}, -{57,52,-17}, -{57,52,-16}, -{57,52,-15}, -{57,52,-14}, -{57,52,-13}, -{57,52,-12}, -{57,52,-11}, -{57,52,-10}, -{57,52,-9}, -{57,52,-8}, -{57,52,-7}, -{57,52,-6}, -{57,52,-5}, -{57,52,-4}, -{57,52,-3}, -{57,52,-2}, -{57,52,-1}, -{57,52,0}, -{57,52,1}, -{57,52,2}, -{57,52,3}, -{57,52,4}, -{57,52,5}, -{57,52,6}, -{57,52,7}, -{57,52,8}, -{57,52,9}, -{57,52,10}, -{57,52,11}, -{57,52,12}, -{57,52,13}, -{57,52,14}, -{57,52,15}, -{57,52,16}, -{57,52,17}, -{57,52,18}, -{57,52,19}, -{57,52,20}, -{57,52,21}, -{57,52,22}, -{57,52,23}, -{57,52,24}, -{57,52,25}, -{57,52,26}, -{57,52,27}, -{57,52,28}, -{57,52,29}, -{57,52,30}, -{57,52,31}, -{57,52,32}, -{57,52,33}, -{57,52,34}, -{57,52,35}, -{57,52,36}, -{57,52,37}, -{57,52,38}, -{57,52,39}, -{57,52,40}, -{57,52,41}, -{57,52,42}, -{57,52,43}, -{57,52,44}, -{57,52,45}, -{57,52,46}, -{57,52,47}, -{57,52,48}, -{57,52,49}, -{57,52,50}, -{57,52,51}, -{57,52,52}, -{57,52,53}, -{57,52,54}, -{57,52,55}, -{57,52,56}, -{57,52,57}, -{57,52,58}, -{57,52,59}, -{57,52,60}, -{57,52,61}, -{57,52,62}, -{57,52,63}, -{57,52,64}, -{57,52,65}, -{57,52,66}, -{57,53,-67}, -{57,53,-66}, -{57,53,-65}, -{57,53,-64}, -{57,53,-63}, -{57,53,-62}, -{57,53,-61}, -{57,53,-60}, -{57,53,-59}, -{57,53,-58}, -{57,53,-57}, -{57,53,-56}, -{57,53,-55}, -{57,53,-54}, -{57,53,-53}, -{57,53,-52}, -{57,53,-51}, -{57,53,-50}, -{57,53,-49}, -{57,53,-48}, -{57,53,-47}, -{57,53,-46}, -{57,53,-45}, -{57,53,-44}, -{57,53,-43}, -{57,53,-42}, -{57,53,-41}, -{57,53,-40}, -{57,53,-39}, -{57,53,-38}, -{57,53,-37}, -{57,53,-36}, -{57,53,-35}, -{57,53,-34}, -{57,53,-33}, -{57,53,-32}, -{57,53,-31}, -{57,53,-30}, -{57,53,-29}, -{57,53,-28}, -{57,53,-27}, -{57,53,-26}, -{57,53,-25}, -{57,53,-24}, -{57,53,-23}, -{57,53,-22}, -{57,53,-21}, -{57,53,-20}, -{57,53,-19}, -{57,53,-18}, -{57,53,-17}, -{57,53,-16}, -{57,53,-15}, -{57,53,-14}, -{57,53,-13}, -{57,53,-12}, -{57,53,-11}, -{57,53,-10}, -{57,53,-9}, -{57,53,-8}, -{57,53,-7}, -{57,53,-6}, -{57,53,-5}, -{57,53,-4}, -{57,53,-3}, -{57,53,-2}, -{57,53,-1}, -{57,53,0}, -{57,53,1}, -{57,53,2}, -{57,53,3}, -{57,53,4}, -{57,53,5}, -{57,53,6}, -{57,53,7}, -{57,53,8}, -{57,53,9}, -{57,53,10}, -{57,53,11}, -{57,53,12}, -{57,53,13}, -{57,53,14}, -{57,53,15}, -{57,53,16}, -{57,53,17}, -{57,53,18}, -{57,53,19}, -{57,53,20}, -{57,53,21}, -{57,53,22}, -{57,53,23}, -{57,53,24}, -{57,53,25}, -{57,53,26}, -{57,53,27}, -{57,53,28}, -{57,53,29}, -{57,53,30}, -{57,53,31}, -{57,53,32}, -{57,53,33}, -{57,53,34}, -{57,53,35}, -{57,53,36}, -{57,53,37}, -{57,53,38}, -{57,53,39}, -{57,53,40}, -{57,53,41}, -{57,53,42}, -{57,53,43}, -{57,53,44}, -{57,53,45}, -{57,53,46}, -{57,53,47}, -{57,53,48}, -{57,53,49}, -{57,53,50}, -{57,53,51}, -{57,53,52}, -{57,53,53}, -{57,53,54}, -{57,53,55}, -{57,53,56}, -{57,53,57}, -{57,53,58}, -{57,53,59}, -{57,53,60}, -{57,53,61}, -{57,53,62}, -{57,53,63}, -{57,53,64}, -{57,53,65}, -{57,53,66}, -{57,54,-66}, -{57,54,-65}, -{57,54,-64}, -{57,54,-63}, -{57,54,-62}, -{57,54,-61}, -{57,54,-60}, -{57,54,-59}, -{57,54,-58}, -{57,54,-57}, -{57,54,-56}, -{57,54,-55}, -{57,54,-54}, -{57,54,-53}, -{57,54,-52}, -{57,54,-51}, -{57,54,-50}, -{57,54,-49}, -{57,54,-48}, -{57,54,-47}, -{57,54,-46}, -{57,54,-45}, -{57,54,-44}, -{57,54,-43}, -{57,54,-42}, -{57,54,-41}, -{57,54,-40}, -{57,54,-39}, -{57,54,-38}, -{57,54,-37}, -{57,54,-36}, -{57,54,-35}, -{57,54,-34}, -{57,54,-33}, -{57,54,-32}, -{57,54,-31}, -{57,54,-30}, -{57,54,-29}, -{57,54,-28}, -{57,54,-27}, -{57,54,-26}, -{57,54,-25}, -{57,54,-24}, -{57,54,-23}, -{57,54,-22}, -{57,54,-21}, -{57,54,-20}, -{57,54,-19}, -{57,54,-18}, -{57,54,-17}, -{57,54,-16}, -{57,54,-15}, -{57,54,-14}, -{57,54,-13}, -{57,54,-12}, -{57,54,-11}, -{57,54,-10}, -{57,54,-9}, -{57,54,-8}, -{57,54,-7}, -{57,54,-6}, -{57,54,-5}, -{57,54,-4}, -{57,54,-3}, -{57,54,-2}, -{57,54,-1}, -{57,54,0}, -{57,54,1}, -{57,54,2}, -{57,54,3}, -{57,54,4}, -{57,54,5}, -{57,54,6}, -{57,54,7}, -{57,54,8}, -{57,54,9}, -{57,54,10}, -{57,54,11}, -{57,54,12}, -{57,54,13}, -{57,54,14}, -{57,54,15}, -{57,54,16}, -{57,54,17}, -{57,54,18}, -{57,54,19}, -{57,54,20}, -{57,54,21}, -{57,54,22}, -{57,54,23}, -{57,54,24}, -{57,54,25}, -{57,54,26}, -{57,54,27}, -{57,54,28}, -{57,54,29}, -{57,54,30}, -{57,54,31}, -{57,54,32}, -{57,54,33}, -{57,54,34}, -{57,54,35}, -{57,54,36}, -{57,54,37}, -{57,54,38}, -{57,54,39}, -{57,54,40}, -{57,54,41}, -{57,54,42}, -{57,54,43}, -{57,54,44}, -{57,54,45}, -{57,54,46}, -{57,54,47}, -{57,54,48}, -{57,54,49}, -{57,54,50}, -{57,54,51}, -{57,54,52}, -{57,54,53}, -{57,54,54}, -{57,54,55}, -{57,54,56}, -{57,54,57}, -{57,54,58}, -{57,54,59}, -{57,54,60}, -{57,54,61}, -{57,54,62}, -{57,54,63}, -{57,54,64}, -{57,54,65}, -{57,54,66}, -{57,54,67}, -{57,55,-66}, -{57,55,-65}, -{57,55,-64}, -{57,55,-63}, -{57,55,-62}, -{57,55,-61}, -{57,55,-60}, -{57,55,-59}, -{57,55,-58}, -{57,55,-57}, -{57,55,-56}, -{57,55,-55}, -{57,55,-54}, -{57,55,-53}, -{57,55,-52}, -{57,55,-51}, -{57,55,-50}, -{57,55,-49}, -{57,55,-48}, -{57,55,-47}, -{57,55,-46}, -{57,55,-45}, -{57,55,-44}, -{57,55,-43}, -{57,55,-42}, -{57,55,-41}, -{57,55,-40}, -{57,55,-39}, -{57,55,-38}, -{57,55,-37}, -{57,55,-36}, -{57,55,-35}, -{57,55,-34}, -{57,55,-33}, -{57,55,-32}, -{57,55,-31}, -{57,55,-30}, -{57,55,-29}, -{57,55,-28}, -{57,55,-27}, -{57,55,-26}, -{57,55,-25}, -{57,55,-24}, -{57,55,-23}, -{57,55,-22}, -{57,55,-21}, -{57,55,-20}, -{57,55,-19}, -{57,55,-18}, -{57,55,-17}, -{57,55,-16}, -{57,55,-15}, -{57,55,-14}, -{57,55,-13}, -{57,55,-12}, -{57,55,-11}, -{57,55,-10}, -{57,55,-9}, -{57,55,-8}, -{57,55,-7}, -{57,55,-6}, -{57,55,-5}, -{57,55,-4}, -{57,55,-3}, -{57,55,-2}, -{57,55,-1}, -{57,55,0}, -{57,55,1}, -{57,55,2}, -{57,55,3}, -{57,55,4}, -{57,55,5}, -{57,55,6}, -{57,55,7}, -{57,55,8}, -{57,55,9}, -{57,55,10}, -{57,55,11}, -{57,55,12}, -{57,55,13}, -{57,55,14}, -{57,55,15}, -{57,55,16}, -{57,55,17}, -{57,55,18}, -{57,55,19}, -{57,55,20}, -{57,55,21}, -{57,55,22}, -{57,55,23}, -{57,55,24}, -{57,55,25}, -{57,55,26}, -{57,55,27}, -{57,55,28}, -{57,55,29}, -{57,55,30}, -{57,55,31}, -{57,55,32}, -{57,55,33}, -{57,55,34}, -{57,55,35}, -{57,55,36}, -{57,55,37}, -{57,55,38}, -{57,55,39}, -{57,55,40}, -{57,55,41}, -{57,55,42}, -{57,55,43}, -{57,55,44}, -{57,55,45}, -{57,55,46}, -{57,55,47}, -{57,55,48}, -{57,55,49}, -{57,55,50}, -{57,55,51}, -{57,55,52}, -{57,55,53}, -{57,55,54}, -{57,55,55}, -{57,55,56}, -{57,55,57}, -{57,55,58}, -{57,55,59}, -{57,55,60}, -{57,55,61}, -{57,55,62}, -{57,55,63}, -{57,55,64}, -{57,55,65}, -{57,55,66}, -{57,55,67}, -{57,56,-66}, -{57,56,-65}, -{57,56,-64}, -{57,56,-63}, -{57,56,-62}, -{57,56,-61}, -{57,56,-60}, -{57,56,-59}, -{57,56,-58}, -{57,56,-57}, -{57,56,-56}, -{57,56,-55}, -{57,56,-54}, -{57,56,-53}, -{57,56,-52}, -{57,56,-51}, -{57,56,-50}, -{57,56,-49}, -{57,56,-48}, -{57,56,-47}, -{57,56,-46}, -{57,56,-45}, -{57,56,-44}, -{57,56,-43}, -{57,56,-42}, -{57,56,-41}, -{57,56,-40}, -{57,56,-39}, -{57,56,-38}, -{57,56,-37}, -{57,56,-36}, -{57,56,-35}, -{57,56,-34}, -{57,56,-33}, -{57,56,-32}, -{57,56,-31}, -{57,56,-30}, -{57,56,-29}, -{57,56,-28}, -{57,56,-27}, -{57,56,-26}, -{57,56,-25}, -{57,56,-24}, -{57,56,-23}, -{57,56,-22}, -{57,56,-21}, -{57,56,-20}, -{57,56,-19}, -{57,56,-18}, -{57,56,-17}, -{57,56,-16}, -{57,56,-15}, -{57,56,-14}, -{57,56,-13}, -{57,56,-12}, -{57,56,-11}, -{57,56,-10}, -{57,56,-9}, -{57,56,-8}, -{57,56,-7}, -{57,56,-6}, -{57,56,-5}, -{57,56,-4}, -{57,56,-3}, -{57,56,-2}, -{57,56,-1}, -{57,56,0}, -{57,56,1}, -{57,56,2}, -{57,56,3}, -{57,56,4}, -{57,56,5}, -{57,56,6}, -{57,56,7}, -{57,56,8}, -{57,56,9}, -{57,56,10}, -{57,56,11}, -{57,56,12}, -{57,56,13}, -{57,56,14}, -{57,56,15}, -{57,56,16}, -{57,56,17}, -{57,56,18}, -{57,56,19}, -{57,56,20}, -{57,56,21}, -{57,56,22}, -{57,56,23}, -{57,56,24}, -{57,56,25}, -{57,56,26}, -{57,56,27}, -{57,56,28}, -{57,56,29}, -{57,56,30}, -{57,56,31}, -{57,56,32}, -{57,56,33}, -{57,56,34}, -{57,56,35}, -{57,56,36}, -{57,56,37}, -{57,56,38}, -{57,56,39}, -{57,56,40}, -{57,56,41}, -{57,56,42}, -{57,56,43}, -{57,56,44}, -{57,56,45}, -{57,56,46}, -{57,56,47}, -{57,56,48}, -{57,56,49}, -{57,56,50}, -{57,56,51}, -{57,56,52}, -{57,56,53}, -{57,56,54}, -{57,56,55}, -{57,56,56}, -{57,56,57}, -{57,56,58}, -{57,56,59}, -{57,56,60}, -{57,56,61}, -{57,56,62}, -{57,56,63}, -{57,56,64}, -{57,56,65}, -{57,56,66}, -{57,56,67}, -{57,57,-66}, -{57,57,-65}, -{57,57,-64}, -{57,57,-63}, -{57,57,-62}, -{57,57,-61}, -{57,57,-60}, -{57,57,-59}, -{57,57,-58}, -{57,57,-57}, -{57,57,-56}, -{57,57,-55}, -{57,57,-54}, -{57,57,-53}, -{57,57,-52}, -{57,57,-51}, -{57,57,-50}, -{57,57,-49}, -{57,57,-48}, -{57,57,-47}, -{57,57,-46}, -{57,57,-45}, -{57,57,-44}, -{57,57,-43}, -{57,57,-42}, -{57,57,-41}, -{57,57,-40}, -{57,57,-39}, -{57,57,-38}, -{57,57,-37}, -{57,57,-36}, -{57,57,-35}, -{57,57,-34}, -{57,57,-33}, -{57,57,-32}, -{57,57,-31}, -{57,57,-30}, -{57,57,-29}, -{57,57,-28}, -{57,57,-27}, -{57,57,-26}, -{57,57,-25}, -{57,57,-24}, -{57,57,-23}, -{57,57,-22}, -{57,57,-21}, -{57,57,-20}, -{57,57,-19}, -{57,57,-18}, -{57,57,-17}, -{57,57,-16}, -{57,57,-15}, -{57,57,-14}, -{57,57,-13}, -{57,57,-12}, -{57,57,-11}, -{57,57,-10}, -{57,57,-9}, -{57,57,-8}, -{57,57,-7}, -{57,57,-6}, -{57,57,-5}, -{57,57,-4}, -{57,57,-3}, -{57,57,-2}, -{57,57,-1}, -{57,57,0}, -{57,57,1}, -{57,57,2}, -{57,57,3}, -{57,57,4}, -{57,57,5}, -{57,57,6}, -{57,57,7}, -{57,57,8}, -{57,57,9}, -{57,57,10}, -{57,57,11}, -{57,57,12}, -{57,57,13}, -{57,57,14}, -{57,57,15}, -{57,57,16}, -{57,57,17}, -{57,57,18}, -{57,57,19}, -{57,57,20}, -{57,57,21}, -{57,57,22}, -{57,57,23}, -{57,57,24}, -{57,57,25}, -{57,57,26}, -{57,57,27}, -{57,57,28}, -{57,57,29}, -{57,57,30}, -{57,57,31}, -{57,57,32}, -{57,57,33}, -{57,57,34}, -{57,57,35}, -{57,57,36}, -{57,57,37}, -{57,57,38}, -{57,57,39}, -{57,57,40}, -{57,57,41}, -{57,57,42}, -{57,57,43}, -{57,57,44}, -{57,57,45}, -{57,57,46}, -{57,57,47}, -{57,57,48}, -{57,57,49}, -{57,57,50}, -{57,57,51}, -{57,57,52}, -{57,57,53}, -{57,57,54}, -{57,57,55}, -{57,57,56}, -{57,57,57}, -{57,57,58}, -{57,57,59}, -{57,57,60}, -{57,57,61}, -{57,57,62}, -{57,57,63}, -{57,57,64}, -{57,57,65}, -{57,57,66}, -{57,57,67}, -{57,58,-66}, -{57,58,-65}, -{57,58,-64}, -{57,58,-63}, -{57,58,-62}, -{57,58,-61}, -{57,58,-60}, -{57,58,-59}, -{57,58,-58}, -{57,58,-57}, -{57,58,-56}, -{57,58,-55}, -{57,58,-54}, -{57,58,-53}, -{57,58,-52}, -{57,58,-51}, -{57,58,-50}, -{57,58,-49}, -{57,58,-48}, -{57,58,-47}, -{57,58,-46}, -{57,58,-45}, -{57,58,-44}, -{57,58,-43}, -{57,58,-42}, -{57,58,-41}, -{57,58,-40}, -{57,58,-39}, -{57,58,-38}, -{57,58,-37}, -{57,58,-36}, -{57,58,-35}, -{57,58,-34}, -{57,58,-33}, -{57,58,-32}, -{57,58,-31}, -{57,58,-30}, -{57,58,-29}, -{57,58,-28}, -{57,58,-27}, -{57,58,-26}, -{57,58,-25}, -{57,58,-24}, -{57,58,-23}, -{57,58,-22}, -{57,58,-21}, -{57,58,-20}, -{57,58,-19}, -{57,58,-18}, -{57,58,-17}, -{57,58,-16}, -{57,58,-15}, -{57,58,-14}, -{57,58,-13}, -{57,58,-12}, -{57,58,-11}, -{57,58,-10}, -{57,58,-9}, -{57,58,-8}, -{57,58,-7}, -{57,58,-6}, -{57,58,-5}, -{57,58,-4}, -{57,58,-3}, -{57,58,-2}, -{57,58,-1}, -{57,58,0}, -{57,58,1}, -{57,58,2}, -{57,58,3}, -{57,58,4}, -{57,58,5}, -{57,58,6}, -{57,58,7}, -{57,58,8}, -{57,58,9}, -{57,58,10}, -{57,58,11}, -{57,58,12}, -{57,58,13}, -{57,58,14}, -{57,58,15}, -{57,58,16}, -{57,58,17}, -{57,58,18}, -{57,58,19}, -{57,58,20}, -{57,58,21}, -{57,58,22}, -{57,58,23}, -{57,58,24}, -{57,58,25}, -{57,58,26}, -{57,58,27}, -{57,58,28}, -{57,58,29}, -{57,58,30}, -{57,58,31}, -{57,58,32}, -{57,58,33}, -{57,58,34}, -{57,58,35}, -{57,58,36}, -{57,58,37}, -{57,58,38}, -{57,58,39}, -{57,58,40}, -{57,58,41}, -{57,58,42}, -{57,58,43}, -{57,58,44}, -{57,58,45}, -{57,58,46}, -{57,58,47}, -{57,58,48}, -{57,58,49}, -{57,58,50}, -{57,58,51}, -{57,58,52}, -{57,58,53}, -{57,58,54}, -{57,58,55}, -{57,58,56}, -{57,58,57}, -{57,58,58}, -{57,58,59}, -{57,58,60}, -{57,58,61}, -{57,58,62}, -{57,58,63}, -{57,58,64}, -{57,58,65}, -{57,58,66}, -{57,58,67}, -{57,59,-66}, -{57,59,-65}, -{57,59,-64}, -{57,59,-63}, -{57,59,-62}, -{57,59,-61}, -{57,59,-60}, -{57,59,-59}, -{57,59,-58}, -{57,59,-57}, -{57,59,-56}, -{57,59,-55}, -{57,59,-54}, -{57,59,-53}, -{57,59,-52}, -{57,59,-51}, -{57,59,-50}, -{57,59,-49}, -{57,59,-48}, -{57,59,-47}, -{57,59,-46}, -{57,59,-45}, -{57,59,-44}, -{57,59,-43}, -{57,59,-42}, -{57,59,-41}, -{57,59,-40}, -{57,59,-39}, -{57,59,-38}, -{57,59,-37}, -{57,59,-36}, -{57,59,-35}, -{57,59,-34}, -{57,59,-33}, -{57,59,-32}, -{57,59,-31}, -{57,59,-30}, -{57,59,-29}, -{57,59,-28}, -{57,59,-27}, -{57,59,-26}, -{57,59,-25}, -{57,59,-24}, -{57,59,-23}, -{57,59,-22}, -{57,59,-21}, -{57,59,-20}, -{57,59,-19}, -{57,59,-18}, -{57,59,-17}, -{57,59,-16}, -{57,59,-15}, -{57,59,-14}, -{57,59,-13}, -{57,59,-12}, -{57,59,-11}, -{57,59,-10}, -{57,59,-9}, -{57,59,-8}, -{57,59,-7}, -{57,59,-6}, -{57,59,-5}, -{57,59,-4}, -{57,59,-3}, -{57,59,-2}, -{57,59,-1}, -{57,59,0}, -{57,59,1}, -{57,59,2}, -{57,59,3}, -{57,59,4}, -{57,59,5}, -{57,59,6}, -{57,59,7}, -{57,59,8}, -{57,59,9}, -{57,59,10}, -{57,59,11}, -{57,59,12}, -{57,59,13}, -{57,59,14}, -{57,59,15}, -{57,59,16}, -{57,59,17}, -{57,59,18}, -{57,59,19}, -{57,59,20}, -{57,59,21}, -{57,59,22}, -{57,59,23}, -{57,59,24}, -{57,59,25}, -{57,59,26}, -{57,59,27}, -{57,59,28}, -{57,59,29}, -{57,59,30}, -{57,59,31}, -{57,59,32}, -{57,59,33}, -{57,59,34}, -{57,59,35}, -{57,59,36}, -{57,59,37}, -{57,59,38}, -{57,59,39}, -{57,59,40}, -{57,59,41}, -{57,59,42}, -{57,59,43}, -{57,59,44}, -{57,59,45}, -{57,59,46}, -{57,59,47}, -{57,59,48}, -{57,59,49}, -{57,59,50}, -{57,59,51}, -{57,59,52}, -{57,59,53}, -{57,59,54}, -{57,59,55}, -{57,59,56}, -{57,59,57}, -{57,59,58}, -{57,59,59}, -{57,59,60}, -{57,59,61}, -{57,59,62}, -{57,59,63}, -{57,59,64}, -{57,59,65}, -{57,59,66}, -{57,59,67}, -{57,60,-66}, -{57,60,-65}, -{57,60,-64}, -{57,60,-63}, -{57,60,-62}, -{57,60,-61}, -{57,60,-60}, -{57,60,-59}, -{57,60,-58}, -{57,60,-57}, -{57,60,-56}, -{57,60,-55}, -{57,60,-54}, -{57,60,-53}, -{57,60,-52}, -{57,60,-51}, -{57,60,-50}, -{57,60,-49}, -{57,60,-48}, -{57,60,-47}, -{57,60,-46}, -{57,60,-45}, -{57,60,-44}, -{57,60,-43}, -{57,60,-42}, -{57,60,-41}, -{57,60,-40}, -{57,60,-39}, -{57,60,-38}, -{57,60,-37}, -{57,60,-36}, -{57,60,-35}, -{57,60,-34}, -{57,60,-33}, -{57,60,-32}, -{57,60,-31}, -{57,60,-30}, -{57,60,-29}, -{57,60,-28}, -{57,60,-27}, -{57,60,-26}, -{57,60,-25}, -{57,60,-24}, -{57,60,-23}, -{57,60,-22}, -{57,60,-21}, -{57,60,-20}, -{57,60,-19}, -{57,60,-18}, -{57,60,-17}, -{57,60,-16}, -{57,60,-15}, -{57,60,-14}, -{57,60,-13}, -{57,60,-12}, -{57,60,-11}, -{57,60,-10}, -{57,60,-9}, -{57,60,-8}, -{57,60,-7}, -{57,60,-6}, -{57,60,-5}, -{57,60,-4}, -{57,60,-3}, -{57,60,-2}, -{57,60,-1}, -{57,60,0}, -{57,60,1}, -{57,60,2}, -{57,60,3}, -{57,60,4}, -{57,60,5}, -{57,60,6}, -{57,60,7}, -{57,60,8}, -{57,60,9}, -{57,60,10}, -{57,60,11}, -{57,60,12}, -{57,60,13}, -{57,60,14}, -{57,60,15}, -{57,60,16}, -{57,60,17}, -{57,60,18}, -{57,60,19}, -{57,60,20}, -{57,60,21}, -{57,60,22}, -{57,60,23}, -{57,60,24}, -{57,60,25}, -{57,60,26}, -{57,60,27}, -{57,60,28}, -{57,60,29}, -{57,60,30}, -{57,60,31}, -{57,60,32}, -{57,60,33}, -{57,60,34}, -{57,60,35}, -{57,60,36}, -{57,60,37}, -{57,60,38}, -{57,60,39}, -{57,60,40}, -{57,60,41}, -{57,60,42}, -{57,60,43}, -{57,60,44}, -{57,60,45}, -{57,60,46}, -{57,60,47}, -{57,60,48}, -{57,60,49}, -{57,60,50}, -{57,60,51}, -{57,60,52}, -{57,60,53}, -{57,60,54}, -{57,60,55}, -{57,60,56}, -{57,60,57}, -{57,60,58}, -{57,60,59}, -{57,60,60}, -{57,60,61}, -{57,60,62}, -{57,60,63}, -{57,60,64}, -{57,60,65}, -{57,60,66}, -{57,60,67}, -{57,61,-66}, -{57,61,-65}, -{57,61,-64}, -{57,61,-63}, -{57,61,-62}, -{57,61,-61}, -{57,61,-60}, -{57,61,-59}, -{57,61,-58}, -{57,61,-57}, -{57,61,-56}, -{57,61,-55}, -{57,61,-54}, -{57,61,-53}, -{57,61,-52}, -{57,61,-51}, -{57,61,-50}, -{57,61,-49}, -{57,61,-48}, -{57,61,-47}, -{57,61,-46}, -{57,61,-45}, -{57,61,-44}, -{57,61,-43}, -{57,61,-42}, -{57,61,-41}, -{57,61,-40}, -{57,61,-39}, -{57,61,-38}, -{57,61,-37}, -{57,61,-36}, -{57,61,-35}, -{57,61,-34}, -{57,61,-33}, -{57,61,-32}, -{57,61,-31}, -{57,61,-30}, -{57,61,-29}, -{57,61,-28}, -{57,61,-27}, -{57,61,-26}, -{57,61,-25}, -{57,61,-24}, -{57,61,-23}, -{57,61,-22}, -{57,61,-21}, -{57,61,-20}, -{57,61,-19}, -{57,61,-18}, -{57,61,-17}, -{57,61,-16}, -{57,61,-15}, -{57,61,-14}, -{57,61,-13}, -{57,61,-12}, -{57,61,-11}, -{57,61,-10}, -{57,61,-9}, -{57,61,-8}, -{57,61,-7}, -{57,61,-6}, -{57,61,-5}, -{57,61,-4}, -{57,61,-3}, -{57,61,-2}, -{57,61,-1}, -{57,61,0}, -{57,61,1}, -{57,61,2}, -{57,61,3}, -{57,61,4}, -{57,61,5}, -{57,61,6}, -{57,61,7}, -{57,61,8}, -{57,61,9}, -{57,61,10}, -{57,61,11}, -{57,61,12}, -{57,61,13}, -{57,61,14}, -{57,61,15}, -{57,61,16}, -{57,61,17}, -{57,61,18}, -{57,61,19}, -{57,61,20}, -{57,61,21}, -{57,61,22}, -{57,61,23}, -{57,61,24}, -{57,61,25}, -{57,61,26}, -{57,61,27}, -{57,61,28}, -{57,61,29}, -{57,61,30}, -{57,61,31}, -{57,61,32}, -{57,61,33}, -{57,61,34}, -{57,61,35}, -{57,61,36}, -{57,61,37}, -{57,61,38}, -{57,61,39}, -{57,61,40}, -{57,61,41}, -{57,61,42}, -{57,61,43}, -{57,61,44}, -{57,61,45}, -{57,61,46}, -{57,61,47}, -{57,61,48}, -{57,61,49}, -{57,61,50}, -{57,61,51}, -{57,61,52}, -{57,61,53}, -{57,61,54}, -{57,61,55}, -{57,61,56}, -{57,61,57}, -{57,61,58}, -{57,61,59}, -{57,61,60}, -{57,61,61}, -{57,61,62}, -{57,61,63}, -{57,61,64}, -{57,61,65}, -{57,61,66}, -{57,61,67}, -{57,62,-66}, -{57,62,-65}, -{57,62,-64}, -{57,62,-63}, -{57,62,-62}, -{57,62,-61}, -{57,62,-60}, -{57,62,-59}, -{57,62,-58}, -{57,62,-57}, -{57,62,-56}, -{57,62,-55}, -{57,62,-54}, -{57,62,-53}, -{57,62,-52}, -{57,62,-51}, -{57,62,-50}, -{57,62,-49}, -{57,62,-48}, -{57,62,-47}, -{57,62,-46}, -{57,62,-45}, -{57,62,-44}, -{57,62,-43}, -{57,62,-42}, -{57,62,-41}, -{57,62,-40}, -{57,62,-39}, -{57,62,-38}, -{57,62,-37}, -{57,62,-36}, -{57,62,-35}, -{57,62,-34}, -{57,62,-33}, -{57,62,-32}, -{57,62,-31}, -{57,62,-30}, -{57,62,-29}, -{57,62,-28}, -{57,62,-27}, -{57,62,-26}, -{57,62,-25}, -{57,62,-24}, -{57,62,-23}, -{57,62,-22}, -{57,62,-21}, -{57,62,-20}, -{57,62,-19}, -{57,62,-18}, -{57,62,-17}, -{57,62,-16}, -{57,62,-15}, -{57,62,-14}, -{57,62,-13}, -{57,62,-12}, -{57,62,-11}, -{57,62,-10}, -{57,62,-9}, -{57,62,-8}, -{57,62,-7}, -{57,62,-6}, -{57,62,-5}, -{57,62,-4}, -{57,62,-3}, -{57,62,-2}, -{57,62,-1}, -{57,62,0}, -{57,62,1}, -{57,62,2}, -{57,62,3}, -{57,62,4}, -{57,62,5}, -{57,62,6}, -{57,62,7}, -{57,62,8}, -{57,62,9}, -{57,62,10}, -{57,62,11}, -{57,62,12}, -{57,62,13}, -{57,62,14}, -{57,62,15}, -{57,62,16}, -{57,62,17}, -{57,62,18}, -{57,62,19}, -{57,62,20}, -{57,62,21}, -{57,62,22}, -{57,62,23}, -{57,62,24}, -{57,62,25}, -{57,62,26}, -{57,62,27}, -{57,62,28}, -{57,62,29}, -{57,62,30}, -{57,62,31}, -{57,62,32}, -{57,62,33}, -{57,62,34}, -{57,62,35}, -{57,62,36}, -{57,62,37}, -{57,62,38}, -{57,62,39}, -{57,62,40}, -{57,62,41}, -{57,62,42}, -{57,62,43}, -{57,62,44}, -{57,62,45}, -{57,62,46}, -{57,62,47}, -{57,62,48}, -{57,62,49}, -{57,62,50}, -{57,62,51}, -{57,62,52}, -{57,62,53}, -{57,62,54}, -{57,62,55}, -{57,62,56}, -{57,62,57}, -{57,62,58}, -{57,62,59}, -{57,62,60}, -{57,62,61}, -{57,62,62}, -{57,62,63}, -{57,62,64}, -{57,62,65}, -{57,62,66}, -{57,62,67}, -{57,63,-66}, -{57,63,-65}, -{57,63,-64}, -{57,63,-63}, -{57,63,-62}, -{57,63,-61}, -{57,63,-60}, -{57,63,-59}, -{57,63,-58}, -{57,63,-57}, -{57,63,-56}, -{57,63,-55}, -{57,63,-54}, -{57,63,-53}, -{57,63,-52}, -{57,63,-51}, -{57,63,-50}, -{57,63,-49}, -{57,63,-48}, -{57,63,-47}, -{57,63,-46}, -{57,63,-45}, -{57,63,-44}, -{57,63,-43}, -{57,63,-42}, -{57,63,-41}, -{57,63,-40}, -{57,63,-39}, -{57,63,-38}, -{57,63,-37}, -{57,63,-36}, -{57,63,-35}, -{57,63,-34}, -{57,63,-33}, -{57,63,-32}, -{57,63,-31}, -{57,63,-30}, -{57,63,-29}, -{57,63,-28}, -{57,63,-27}, -{57,63,-26}, -{57,63,-25}, -{57,63,-24}, -{57,63,-23}, -{57,63,-22}, -{57,63,-21}, -{57,63,-20}, -{57,63,-19}, -{57,63,-18}, -{57,63,-17}, -{57,63,-16}, -{57,63,-15}, -{57,63,-14}, -{57,63,-13}, -{57,63,-12}, -{57,63,-11}, -{57,63,-10}, -{57,63,-9}, -{57,63,-8}, -{57,63,-7}, -{57,63,-6}, -{57,63,-5}, -{57,63,-4}, -{57,63,-3}, -{57,63,-2}, -{57,63,-1}, -{57,63,0}, -{57,63,1}, -{57,63,2}, -{57,63,3}, -{57,63,4}, -{57,63,5}, -{57,63,6}, -{57,63,7}, -{57,63,8}, -{57,63,9}, -{57,63,10}, -{57,63,11}, -{57,63,12}, -{57,63,13}, -{57,63,14}, -{57,63,15}, -{57,63,16}, -{57,63,17}, -{57,63,18}, -{57,63,19}, -{57,63,20}, -{57,63,21}, -{57,63,22}, -{57,63,23}, -{57,63,24}, -{57,63,25}, -{57,63,26}, -{57,63,27}, -{57,63,28}, -{57,63,29}, -{57,63,30}, -{57,63,31}, -{57,63,32}, -{57,63,33}, -{57,63,34}, -{57,63,35}, -{57,63,36}, -{57,63,37}, -{57,63,38}, -{57,63,39}, -{57,63,40}, -{57,63,41}, -{57,63,42}, -{57,63,43}, -{57,63,44}, -{57,63,45}, -{57,63,46}, -{57,63,47}, -{57,63,48}, -{57,63,49}, -{57,63,50}, -{57,63,51}, -{57,63,52}, -{57,63,53}, -{57,63,54}, -{57,63,55}, -{57,63,56}, -{57,63,57}, -{57,63,58}, -{57,63,59}, -{57,63,60}, -{57,63,61}, -{57,63,62}, -{57,63,63}, -{57,63,64}, -{57,63,65}, -{57,63,66}, -{57,63,67}, -{57,63,68}, -{57,64,-66}, -{57,64,-65}, -{57,64,-64}, -{57,64,-63}, -{57,64,-62}, -{57,64,-61}, -{57,64,-60}, -{57,64,-59}, -{57,64,-58}, -{57,64,-57}, -{57,64,-56}, -{57,64,-55}, -{57,64,-54}, -{57,64,-53}, -{57,64,-52}, -{57,64,-51}, -{57,64,-50}, -{57,64,-49}, -{57,64,-48}, -{57,64,-47}, -{57,64,-46}, -{57,64,-45}, -{57,64,-44}, -{57,64,-43}, -{57,64,-42}, -{57,64,-41}, -{57,64,-40}, -{57,64,-39}, -{57,64,-38}, -{57,64,-37}, -{57,64,-36}, -{57,64,-35}, -{57,64,-34}, -{57,64,-33}, -{57,64,-32}, -{57,64,-31}, -{57,64,-30}, -{57,64,-29}, -{57,64,-28}, -{57,64,-27}, -{57,64,-26}, -{57,64,-25}, -{57,64,-24}, -{57,64,-23}, -{57,64,-22}, -{57,64,-21}, -{57,64,-20}, -{57,64,-19}, -{57,64,-18}, -{57,64,-17}, -{57,64,-16}, -{57,64,-15}, -{57,64,-14}, -{57,64,-13}, -{57,64,-12}, -{57,64,-11}, -{57,64,-10}, -{57,64,-9}, -{57,64,-8}, -{57,64,-7}, -{57,64,-6}, -{57,64,-5}, -{57,64,-4}, -{57,64,-3}, -{57,64,-2}, -{57,64,-1}, -{57,64,0}, -{57,64,1}, -{57,64,2}, -{57,64,3}, -{57,64,4}, -{57,64,5}, -{57,64,6}, -{57,64,7}, -{57,64,8}, -{57,64,9}, -{57,64,10}, -{57,64,11}, -{57,64,12}, -{57,64,13}, -{57,64,14}, -{57,64,15}, -{57,64,16}, -{57,64,17}, -{57,64,18}, -{57,64,19}, -{57,64,20}, -{57,64,21}, -{57,64,22}, -{57,64,23}, -{57,64,24}, -{57,64,25}, -{57,64,26}, -{57,64,27}, -{57,64,28}, -{57,64,29}, -{57,64,30}, -{57,64,31}, -{57,64,32}, -{57,64,33}, -{57,64,34}, -{57,64,35}, -{57,64,36}, -{57,64,37}, -{57,64,38}, -{57,64,39}, -{57,64,40}, -{57,64,41}, -{57,64,42}, -{57,64,43}, -{57,64,44}, -{57,64,45}, -{57,64,46}, -{57,64,47}, -{57,64,48}, -{57,64,49}, -{57,64,50}, -{57,64,51}, -{57,64,52}, -{57,64,53}, -{57,64,54}, -{57,64,55}, -{57,64,56}, -{57,64,57}, -{57,64,58}, -{57,64,59}, -{57,64,60}, -{57,64,61}, -{57,64,62}, -{57,64,63}, -{57,64,64}, -{57,64,65}, -{57,64,66}, -{57,64,67}, -{57,64,68}, -{57,65,-66}, -{57,65,-65}, -{57,65,-64}, -{57,65,-63}, -{57,65,-62}, -{57,65,-61}, -{57,65,-60}, -{57,65,-59}, -{57,65,-58}, -{57,65,-57}, -{57,65,-56}, -{57,65,-55}, -{57,65,-54}, -{57,65,-53}, -{57,65,-52}, -{57,65,-51}, -{57,65,-50}, -{57,65,-49}, -{57,65,-48}, -{57,65,-47}, -{57,65,-46}, -{57,65,-45}, -{57,65,-44}, -{57,65,-43}, -{57,65,-42}, -{57,65,-41}, -{57,65,-40}, -{57,65,-39}, -{57,65,-38}, -{57,65,-37}, -{57,65,-36}, -{57,65,-35}, -{57,65,-34}, -{57,65,-33}, -{57,65,-32}, -{57,65,-31}, -{57,65,-30}, -{57,65,-29}, -{57,65,-28}, -{57,65,-27}, -{57,65,-26}, -{57,65,-25}, -{57,65,-24}, -{57,65,-23}, -{57,65,-22}, -{57,65,-21}, -{57,65,-20}, -{57,65,-19}, -{57,65,-18}, -{57,65,-17}, -{57,65,-16}, -{57,65,-15}, -{57,65,-14}, -{57,65,-13}, -{57,65,-12}, -{57,65,-11}, -{57,65,-10}, -{57,65,-9}, -{57,65,-8}, -{57,65,-7}, -{57,65,-6}, -{57,65,-5}, -{57,65,-4}, -{57,65,-3}, -{57,65,-2}, -{57,65,-1}, -{57,65,0}, -{57,65,1}, -{57,65,2}, -{57,65,3}, -{57,65,4}, -{57,65,5}, -{57,65,6}, -{57,65,7}, -{57,65,8}, -{57,65,9}, -{57,65,10}, -{57,65,11}, -{57,65,12}, -{57,65,13}, -{57,65,14}, -{57,65,15}, -{57,65,16}, -{57,65,17}, -{57,65,18}, -{57,65,19}, -{57,65,20}, -{57,65,21}, -{57,65,22}, -{57,65,23}, -{57,65,24}, -{57,65,25}, -{57,65,26}, -{57,65,27}, -{57,65,28}, -{57,65,29}, -{57,65,30}, -{57,65,31}, -{57,65,32}, -{57,65,33}, -{57,65,34}, -{57,65,35}, -{57,65,36}, -{57,65,37}, -{57,65,38}, -{57,65,39}, -{57,65,40}, -{57,65,41}, -{57,65,42}, -{57,65,43}, -{57,65,44}, -{57,65,45}, -{57,65,46}, -{57,65,47}, -{57,65,48}, -{57,65,49}, -{57,65,50}, -{57,65,51}, -{57,65,52}, -{57,65,53}, -{57,65,54}, -{57,65,55}, -{57,65,56}, -{57,65,57}, -{57,65,58}, -{57,65,59}, -{57,65,60}, -{57,65,61}, -{57,65,62}, -{57,65,63}, -{57,65,64}, -{57,65,65}, -{57,65,66}, -{57,65,67}, -{57,65,68}, -{57,66,-66}, -{57,66,-65}, -{57,66,-64}, -{57,66,-63}, -{57,66,-62}, -{57,66,-61}, -{57,66,-60}, -{57,66,-59}, -{57,66,-58}, -{57,66,-57}, -{57,66,-56}, -{57,66,-55}, -{57,66,-54}, -{57,66,-53}, -{57,66,-52}, -{57,66,-51}, -{57,66,-50}, -{57,66,-49}, -{57,66,-48}, -{57,66,-47}, -{57,66,-46}, -{57,66,-45}, -{57,66,-44}, -{57,66,-43}, -{57,66,-42}, -{57,66,-41}, -{57,66,-40}, -{57,66,-39}, -{57,66,-38}, -{57,66,-37}, -{57,66,-36}, -{57,66,-35}, -{57,66,-34}, -{57,66,-33}, -{57,66,-32}, -{57,66,-31}, -{57,66,-30}, -{57,66,-29}, -{57,66,-28}, -{57,66,-27}, -{57,66,-26}, -{57,66,-25}, -{57,66,-24}, -{57,66,-23}, -{57,66,-22}, -{57,66,-21}, -{57,66,-20}, -{57,66,-19}, -{57,66,-18}, -{57,66,-17}, -{57,66,-16}, -{57,66,-15}, -{57,66,-14}, -{57,66,-13}, -{57,66,-12}, -{57,66,-11}, -{57,66,-10}, -{57,66,-9}, -{57,66,-8}, -{57,66,-7}, -{57,66,-6}, -{57,66,-5}, -{57,66,-4}, -{57,66,-3}, -{57,66,-2}, -{57,66,-1}, -{57,66,0}, -{57,66,1}, -{57,66,2}, -{57,66,3}, -{57,66,4}, -{57,66,5}, -{57,66,6}, -{57,66,7}, -{57,66,8}, -{57,66,9}, -{57,66,10}, -{57,66,11}, -{57,66,12}, -{57,66,13}, -{57,66,14}, -{57,66,15}, -{57,66,16}, -{57,66,17}, -{57,66,18}, -{57,66,19}, -{57,66,20}, -{57,66,21}, -{57,66,22}, -{57,66,23}, -{57,66,24}, -{57,66,25}, -{57,66,26}, -{57,66,27}, -{57,66,28}, -{57,66,29}, -{57,66,30}, -{57,66,31}, -{57,66,32}, -{57,66,33}, -{57,66,34}, -{57,66,35}, -{57,66,36}, -{57,66,37}, -{57,66,38}, -{57,66,39}, -{57,66,40}, -{57,66,41}, -{57,66,42}, -{57,66,43}, -{57,66,44}, -{57,66,45}, -{57,66,46}, -{57,66,47}, -{57,66,48}, -{57,66,49}, -{57,66,50}, -{57,66,51}, -{57,66,52}, -{57,66,53}, -{57,66,54}, -{57,66,55}, -{57,66,56}, -{57,66,57}, -{57,66,58}, -{57,66,59}, -{57,66,60}, -{57,66,61}, -{57,66,62}, -{57,66,63}, -{57,66,64}, -{57,66,65}, -{57,66,66}, -{57,66,67}, -{57,66,68}, -{57,67,-66}, -{57,67,-65}, -{57,67,-64}, -{57,67,-63}, -{57,67,-62}, -{57,67,-61}, -{57,67,-60}, -{57,67,-59}, -{57,67,-58}, -{57,67,-57}, -{57,67,-56}, -{57,67,-55}, -{57,67,-54}, -{57,67,-53}, -{57,67,-52}, -{57,67,-51}, -{57,67,-50}, -{57,67,-49}, -{57,67,-48}, -{57,67,-47}, -{57,67,-46}, -{57,67,-45}, -{57,67,-44}, -{57,67,-43}, -{57,67,-42}, -{57,67,-41}, -{57,67,-40}, -{57,67,-39}, -{57,67,-38}, -{57,67,-37}, -{57,67,-36}, -{57,67,-35}, -{57,67,-34}, -{57,67,-33}, -{57,67,-32}, -{57,67,-31}, -{57,67,-30}, -{57,67,-29}, -{57,67,-28}, -{57,67,-27}, -{57,67,-26}, -{57,67,-25}, -{57,67,-24}, -{57,67,-23}, -{57,67,-22}, -{57,67,-21}, -{57,67,-20}, -{57,67,-19}, -{57,67,-18}, -{57,67,-17}, -{57,67,-16}, -{57,67,-15}, -{57,67,-14}, -{57,67,-13}, -{57,67,-12}, -{57,67,-11}, -{57,67,-10}, -{57,67,-9}, -{57,67,-8}, -{57,67,-7}, -{57,67,-6}, -{57,67,-5}, -{57,67,-4}, -{57,67,-3}, -{57,67,-2}, -{57,67,-1}, -{57,67,0}, -{57,67,1}, -{57,67,2}, -{57,67,3}, -{57,67,4}, -{57,67,5}, -{57,67,6}, -{57,67,7}, -{57,67,8}, -{57,67,9}, -{57,67,10}, -{57,67,11}, -{57,67,12}, -{57,67,13}, -{57,67,14}, -{57,67,15}, -{57,67,16}, -{57,67,17}, -{57,67,18}, -{57,67,19}, -{57,67,20}, -{57,67,21}, -{57,67,22}, -{57,67,23}, -{57,67,24}, -{57,67,25}, -{57,67,26}, -{57,67,27}, -{57,67,28}, -{57,67,29}, -{57,67,30}, -{57,67,31}, -{57,67,32}, -{57,67,33}, -{57,67,34}, -{57,67,35}, -{57,67,36}, -{57,67,37}, -{57,67,38}, -{57,67,39}, -{57,67,40}, -{57,67,41}, -{57,67,42}, -{57,67,43}, -{57,67,44}, -{57,67,45}, -{57,67,46}, -{57,67,47}, -{57,67,48}, -{57,67,49}, -{57,67,50}, -{57,67,51}, -{57,67,52}, -{57,67,53}, -{57,67,54}, -{57,67,55}, -{57,67,56}, -{57,67,57}, -{57,67,58}, -{57,67,59}, -{57,67,60}, -{57,67,61}, -{57,67,62}, -{57,67,63}, -{57,67,64}, -{57,67,65}, -{57,67,66}, -{57,67,67}, -{57,67,68}, -{57,68,-66}, -{57,68,-65}, -{57,68,-64}, -{57,68,-63}, -{57,68,-62}, -{57,68,-61}, -{57,68,-60}, -{57,68,-59}, -{57,68,-58}, -{57,68,-57}, -{57,68,-56}, -{57,68,-55}, -{57,68,-54}, -{57,68,-53}, -{57,68,-52}, -{57,68,-51}, -{57,68,-50}, -{57,68,-49}, -{57,68,-48}, -{57,68,-47}, -{57,68,-46}, -{57,68,-45}, -{57,68,-44}, -{57,68,-43}, -{57,68,-42}, -{57,68,-41}, -{57,68,-40}, -{57,68,-39}, -{57,68,-38}, -{57,68,-37}, -{57,68,-36}, -{57,68,-35}, -{57,68,-34}, -{57,68,-33}, -{57,68,-32}, -{57,68,-31}, -{57,68,-30}, -{57,68,-29}, -{57,68,-28}, -{57,68,-27}, -{57,68,-26}, -{57,68,-25}, -{57,68,-24}, -{57,68,-23}, -{57,68,-22}, -{57,68,-21}, -{57,68,-20}, -{57,68,-19}, -{57,68,-18}, -{57,68,-17}, -{57,68,-16}, -{57,68,-15}, -{57,68,-14}, -{57,68,-13}, -{57,68,-12}, -{57,68,-11}, -{57,68,-10}, -{57,68,-9}, -{57,68,-8}, -{57,68,-7}, -{57,68,-6}, -{57,68,-5}, -{57,68,-4}, -{57,68,-3}, -{57,68,-2}, -{57,68,-1}, -{57,68,0}, -{57,68,1}, -{57,68,2}, -{57,68,3}, -{57,68,4}, -{57,68,5}, -{57,68,6}, -{57,68,7}, -{57,68,8}, -{57,68,9}, -{57,68,10}, -{57,68,11}, -{57,68,12}, -{57,68,13}, -{57,68,14}, -{57,68,15}, -{57,68,16}, -{57,68,17}, -{57,68,18}, -{57,68,19}, -{57,68,20}, -{57,68,21}, -{57,68,22}, -{57,68,23}, -{57,68,24}, -{57,68,25}, -{57,68,26}, -{57,68,27}, -{57,68,28}, -{57,68,29}, -{57,68,30}, -{57,68,31}, -{57,68,32}, -{57,68,33}, -{57,68,34}, -{57,68,35}, -{57,68,36}, -{57,68,37}, -{57,68,38}, -{57,68,39}, -{57,68,40}, -{57,68,41}, -{57,68,42}, -{57,68,43}, -{57,68,44}, -{57,68,45}, -{57,68,46}, -{57,68,47}, -{57,68,48}, -{57,68,49}, -{57,68,50}, -{57,68,51}, -{57,68,52}, -{57,68,53}, -{57,68,54}, -{57,68,55}, -{57,68,56}, -{57,68,57}, -{57,68,58}, -{57,68,59}, -{57,68,60}, -{57,68,61}, -{57,68,62}, -{57,68,63}, -{57,68,64}, -{57,68,65}, -{57,68,66}, -{57,68,67}, -{57,68,68}, -{57,69,-66}, -{57,69,-65}, -{57,69,-64}, -{57,69,-63}, -{57,69,-62}, -{57,69,-61}, -{57,69,-60}, -{57,69,-59}, -{57,69,-58}, -{57,69,-57}, -{57,69,-56}, -{57,69,-55}, -{57,69,-54}, -{57,69,-53}, -{57,69,-52}, -{57,69,-51}, -{57,69,-50}, -{57,69,-49}, -{57,69,-48}, -{57,69,-47}, -{57,69,-46}, -{57,69,-45}, -{57,69,-44}, -{57,69,-43}, -{57,69,-42}, -{57,69,-41}, -{57,69,-40}, -{57,69,-39}, -{57,69,-38}, -{57,69,-37}, -{57,69,-36}, -{57,69,-35}, -{57,69,-34}, -{57,69,-33}, -{57,69,-32}, -{57,69,-31}, -{57,69,-30}, -{57,69,-29}, -{57,69,-28}, -{57,69,-27}, -{57,69,-26}, -{57,69,-25}, -{57,69,-24}, -{57,69,-23}, -{57,69,-22}, -{57,69,-21}, -{57,69,-20}, -{57,69,-19}, -{57,69,-18}, -{57,69,-17}, -{57,69,-16}, -{57,69,-15}, -{57,69,-14}, -{57,69,-13}, -{57,69,-12}, -{57,69,-11}, -{57,69,-10}, -{57,69,-9}, -{57,69,-8}, -{57,69,-7}, -{57,69,-6}, -{57,69,-5}, -{57,69,-4}, -{57,69,-3}, -{57,69,-2}, -{57,69,-1}, -{57,69,0}, -{57,69,1}, -{57,69,2}, -{57,69,3}, -{57,69,4}, -{57,69,5}, -{57,69,6}, -{57,69,7}, -{57,69,8}, -{57,69,9}, -{57,69,10}, -{57,69,11}, -{57,69,12}, -{57,69,13}, -{57,69,14}, -{57,69,15}, -{57,69,16}, -{57,69,17}, -{57,69,18}, -{57,69,19}, -{57,69,20}, -{57,69,21}, -{57,69,22}, -{57,69,23}, -{57,69,24}, -{57,69,25}, -{57,69,26}, -{57,69,27}, -{57,69,28}, -{57,69,29}, -{57,69,30}, -{57,69,31}, -{57,69,32}, -{57,69,33}, -{57,69,34}, -{57,69,35}, -{57,69,36}, -{57,69,37}, -{57,69,38}, -{57,69,39}, -{57,69,40}, -{57,69,41}, -{57,69,42}, -{57,69,43}, -{57,69,44}, -{57,69,45}, -{57,69,46}, -{57,69,47}, -{57,69,48}, -{57,69,49}, -{57,69,50}, -{57,69,51}, -{57,69,52}, -{57,69,53}, -{57,69,54}, -{57,69,55}, -{57,69,56}, -{57,69,57}, -{57,69,58}, -{57,69,59}, -{57,69,60}, -{57,69,61}, -{57,69,62}, -{57,69,63}, -{57,69,64}, -{57,69,65}, -{57,69,66}, -{57,69,67}, -{57,69,68}, -{57,70,-66}, -{57,70,-65}, -{57,70,-64}, -{57,70,-63}, -{57,70,-62}, -{57,70,-61}, -{57,70,-60}, -{57,70,-59}, -{57,70,-58}, -{57,70,-57}, -{57,70,-56}, -{57,70,-55}, -{57,70,-54}, -{57,70,-53}, -{57,70,-52}, -{57,70,-51}, -{57,70,-50}, -{57,70,-49}, -{57,70,-48}, -{57,70,-47}, -{57,70,-46}, -{57,70,-45}, -{57,70,-44}, -{57,70,-43}, -{57,70,-42}, -{57,70,-41}, -{57,70,-40}, -{57,70,-39}, -{57,70,-38}, -{57,70,-37}, -{57,70,-36}, -{57,70,-35}, -{57,70,-34}, -{57,70,-33}, -{57,70,-32}, -{57,70,-31}, -{57,70,-30}, -{57,70,-29}, -{57,70,-28}, -{57,70,-27}, -{57,70,-26}, -{57,70,-25}, -{57,70,-24}, -{57,70,-23}, -{57,70,-22}, -{57,70,-21}, -{57,70,-20}, -{57,70,-19}, -{57,70,-18}, -{57,70,-17}, -{57,70,-16}, -{57,70,-15}, -{57,70,-14}, -{57,70,-13}, -{57,70,-12}, -{57,70,-11}, -{57,70,-10}, -{57,70,-9}, -{57,70,-8}, -{57,70,-7}, -{57,70,-6}, -{57,70,-5}, -{57,70,-4}, -{57,70,-3}, -{57,70,-2}, -{57,70,-1}, -{57,70,0}, -{57,70,1}, -{57,70,2}, -{57,70,3}, -{57,70,4}, -{57,70,5}, -{57,70,6}, -{57,70,7}, -{57,70,8}, -{57,70,9}, -{57,70,10}, -{57,70,11}, -{57,70,12}, -{57,70,13}, -{57,70,14}, -{57,70,15}, -{57,70,16}, -{57,70,17}, -{57,70,18}, -{57,70,19}, -{57,70,20}, -{57,70,21}, -{57,70,22}, -{57,70,23}, -{57,70,24}, -{57,70,25}, -{57,70,26}, -{57,70,27}, -{57,70,28}, -{57,70,29}, -{57,70,30}, -{57,70,31}, -{57,70,32}, -{57,70,33}, -{57,70,34}, -{57,70,35}, -{57,70,36}, -{57,70,37}, -{57,70,38}, -{57,70,39}, -{57,70,40}, -{57,70,41}, -{57,70,42}, -{57,70,43}, -{57,70,44}, -{57,70,45}, -{57,70,46}, -{57,70,47}, -{57,70,48}, -{57,70,49}, -{57,70,50}, -{57,70,51}, -{57,70,52}, -{57,70,53}, -{57,70,54}, -{57,70,55}, -{57,70,56}, -{57,70,57}, -{57,70,58}, -{57,70,59}, -{57,70,60}, -{57,70,61}, -{57,70,62}, -{57,70,63}, -{57,71,-66}, -{57,71,-65}, -{57,71,-64}, -{57,71,-63}, -{57,71,-62}, -{57,71,-61}, -{57,71,-60}, -{57,71,-59}, -{57,71,-58}, -{57,71,-57}, -{57,71,-56}, -{57,71,-55}, -{57,71,-54}, -{57,71,-53}, -{57,71,-52}, -{57,71,-51}, -{57,71,-50}, -{57,71,-49}, -{57,71,-48}, -{57,71,-47}, -{57,71,-46}, -{57,71,-45}, -{57,71,-44}, -{57,71,-43}, -{57,71,-42}, -{57,71,-41}, -{57,71,-40}, -{57,71,-39}, -{57,71,-38}, -{57,71,-37}, -{57,71,-36}, -{57,71,-35}, -{57,71,-34}, -{57,71,-33}, -{57,71,-32}, -{57,71,-31}, -{57,71,-30}, -{57,71,-29}, -{57,71,-28}, -{57,71,-27}, -{57,71,-26}, -{57,71,-25}, -{57,71,-24}, -{57,71,-23}, -{57,71,-22}, -{57,71,-21}, -{57,71,-20}, -{57,71,-19}, -{57,71,-18}, -{57,71,-17}, -{57,71,-16}, -{57,71,-15}, -{57,71,-14}, -{57,71,-13}, -{57,71,-12}, -{57,71,-11}, -{57,71,-10}, -{57,71,-9}, -{57,71,-8}, -{57,71,-7}, -{57,71,-6}, -{57,71,-5}, -{57,71,-4}, -{57,71,-3}, -{57,71,-2}, -{57,71,-1}, -{57,71,0}, -{57,71,1}, -{57,71,2}, -{57,71,3}, -{57,71,4}, -{57,71,5}, -{57,71,6}, -{57,71,7}, -{57,71,8}, -{57,71,9}, -{57,71,10}, -{57,71,11}, -{57,71,12}, -{57,71,13}, -{57,71,14}, -{57,71,15}, -{57,71,16}, -{57,71,17}, -{57,71,18}, -{57,71,19}, -{57,71,20}, -{57,71,21}, -{57,71,22}, -{57,71,23}, -{57,71,24}, -{57,71,25}, -{57,71,26}, -{57,71,27}, -{57,71,28}, -{57,71,29}, -{57,71,30}, -{57,71,31}, -{57,71,32}, -{57,71,33}, -{57,71,34}, -{57,71,35}, -{57,71,36}, -{57,71,37}, -{57,71,38}, -{57,71,39}, -{57,71,40}, -{57,71,41}, -{57,71,42}, -{57,71,43}, -{57,71,44}, -{57,71,45}, -{57,71,46}, -{57,71,47}, -{57,71,48}, -{57,71,49}, -{57,71,50}, -{57,71,51}, -{57,72,-66}, -{57,72,-65}, -{57,72,-64}, -{57,72,-63}, -{57,72,-62}, -{57,72,-61}, -{57,72,-60}, -{57,72,-59}, -{57,72,-58}, -{57,72,-57}, -{57,72,-56}, -{57,72,-55}, -{57,72,-54}, -{57,72,-53}, -{57,72,-52}, -{57,72,-51}, -{57,72,-50}, -{57,72,-49}, -{57,72,-48}, -{57,72,-47}, -{57,72,-46}, -{57,72,-45}, -{57,72,-44}, -{57,72,-43}, -{57,72,-42}, -{57,72,-41}, -{57,72,-40}, -{57,72,-39}, -{57,72,-38}, -{57,72,-37}, -{57,72,-36}, -{57,72,-35}, -{57,72,-34}, -{57,72,-33}, -{57,72,-32}, -{57,72,-31}, -{57,72,-30}, -{57,72,-29}, -{57,72,-28}, -{57,72,-27}, -{57,72,-26}, -{57,72,-25}, -{57,72,-24}, -{57,72,-23}, -{57,72,-22}, -{57,72,-21}, -{57,72,-20}, -{57,72,-19}, -{57,72,-18}, -{57,72,-17}, -{57,72,-16}, -{57,72,-15}, -{57,72,-14}, -{57,72,-13}, -{57,72,-12}, -{57,72,-11}, -{57,72,-10}, -{57,72,-9}, -{57,72,-8}, -{57,72,-7}, -{57,72,-6}, -{57,72,-5}, -{57,72,-4}, -{57,72,-3}, -{57,72,-2}, -{57,72,-1}, -{57,72,0}, -{57,72,1}, -{57,72,2}, -{57,72,3}, -{57,72,4}, -{57,72,5}, -{57,72,6}, -{57,72,7}, -{57,72,8}, -{57,72,9}, -{57,72,10}, -{57,72,11}, -{57,72,12}, -{57,72,13}, -{57,72,14}, -{57,72,15}, -{57,72,16}, -{57,72,17}, -{57,72,18}, -{57,72,19}, -{57,72,20}, -{57,72,21}, -{57,72,22}, -{57,72,23}, -{57,72,24}, -{57,72,25}, -{57,72,26}, -{57,72,27}, -{57,72,28}, -{57,72,29}, -{57,72,30}, -{57,72,31}, -{57,72,32}, -{57,72,33}, -{57,72,34}, -{57,72,35}, -{57,72,36}, -{57,72,37}, -{57,72,38}, -{57,72,39}, -{57,72,40}, -{57,72,41}, -{57,72,42}, -{57,73,-66}, -{57,73,-65}, -{57,73,-64}, -{57,73,-63}, -{57,73,-62}, -{57,73,-61}, -{57,73,-60}, -{57,73,-59}, -{57,73,-58}, -{57,73,-57}, -{57,73,-56}, -{57,73,-55}, -{57,73,-54}, -{57,73,-53}, -{57,73,-52}, -{57,73,-51}, -{57,73,-50}, -{57,73,-49}, -{57,73,-48}, -{57,73,-47}, -{57,73,-46}, -{57,73,-45}, -{57,73,-44}, -{57,73,-43}, -{57,73,-42}, -{57,73,-41}, -{57,73,-40}, -{57,73,-39}, -{57,73,-38}, -{57,73,-37}, -{57,73,-36}, -{57,73,-35}, -{57,73,-34}, -{57,73,-33}, -{57,73,-32}, -{57,73,-31}, -{57,73,-30}, -{57,73,-29}, -{57,73,-28}, -{57,73,-27}, -{57,73,-26}, -{57,73,-25}, -{57,73,-24}, -{57,73,-23}, -{57,73,-22}, -{57,73,-21}, -{57,73,-20}, -{57,73,-19}, -{57,73,-18}, -{57,73,-17}, -{57,73,-16}, -{57,73,-15}, -{57,73,-14}, -{57,73,-13}, -{57,73,-12}, -{57,73,-11}, -{57,73,-10}, -{57,73,-9}, -{57,73,-8}, -{57,73,-7}, -{57,73,-6}, -{57,73,-5}, -{57,73,-4}, -{57,73,-3}, -{57,73,-2}, -{57,73,-1}, -{57,73,0}, -{57,73,1}, -{57,73,2}, -{57,73,3}, -{57,73,4}, -{57,73,5}, -{57,73,6}, -{57,73,7}, -{57,73,8}, -{57,73,9}, -{57,73,10}, -{57,73,11}, -{57,73,12}, -{57,73,13}, -{57,73,14}, -{57,73,15}, -{57,73,16}, -{57,73,17}, -{57,73,18}, -{57,73,19}, -{57,73,20}, -{57,73,21}, -{57,73,22}, -{57,73,23}, -{57,73,24}, -{57,73,25}, -{57,73,26}, -{57,73,27}, -{57,73,28}, -{57,73,29}, -{57,73,30}, -{57,73,31}, -{57,73,32}, -{57,73,33}, -{57,73,34}, -{57,73,35}, -{57,74,-66}, -{57,74,-65}, -{57,74,-64}, -{57,74,-63}, -{57,74,-62}, -{57,74,-61}, -{57,74,-60}, -{57,74,-59}, -{57,74,-58}, -{57,74,-57}, -{57,74,-56}, -{57,74,-55}, -{57,74,-54}, -{57,74,-53}, -{57,74,-52}, -{57,74,-51}, -{57,74,-50}, -{57,74,-49}, -{57,74,-48}, -{57,74,-47}, -{57,74,-46}, -{57,74,-45}, -{57,74,-44}, -{57,74,-43}, -{57,74,-42}, -{57,74,-41}, -{57,74,-40}, -{57,74,-39}, -{57,74,-38}, -{57,74,-37}, -{57,74,-36}, -{57,74,-35}, -{57,74,-34}, -{57,74,-33}, -{57,74,-32}, -{57,74,-31}, -{57,74,-30}, -{57,74,-29}, -{57,74,-28}, -{57,74,-27}, -{57,74,-26}, -{57,74,-25}, -{57,74,-24}, -{57,74,-23}, -{57,74,-22}, -{57,74,-21}, -{57,74,-20}, -{57,74,-19}, -{57,74,-18}, -{57,74,-17}, -{57,74,-16}, -{57,74,-15}, -{57,74,-14}, -{57,74,-13}, -{57,74,-12}, -{57,74,-11}, -{57,74,-10}, -{57,74,-9}, -{57,74,-8}, -{57,74,-7}, -{57,74,-6}, -{57,74,-5}, -{57,74,-4}, -{57,74,-3}, -{57,74,-2}, -{57,74,-1}, -{57,74,0}, -{57,74,1}, -{57,74,2}, -{57,74,3}, -{57,74,4}, -{57,74,5}, -{57,74,6}, -{57,74,7}, -{57,74,8}, -{57,74,9}, -{57,74,10}, -{57,74,11}, -{57,74,12}, -{57,74,13}, -{57,74,14}, -{57,74,15}, -{57,74,16}, -{57,74,17}, -{57,74,18}, -{57,74,19}, -{57,74,20}, -{57,74,21}, -{57,74,22}, -{57,74,23}, -{57,74,24}, -{57,74,25}, -{57,74,26}, -{57,74,27}, -{57,74,28}, -{57,74,29}, -{57,75,-66}, -{57,75,-65}, -{57,75,-64}, -{57,75,-63}, -{57,75,-62}, -{57,75,-61}, -{57,75,-60}, -{57,75,-59}, -{57,75,-58}, -{57,75,-57}, -{57,75,-56}, -{57,75,-55}, -{57,75,-54}, -{57,75,-53}, -{57,75,-52}, -{57,75,-51}, -{57,75,-50}, -{57,75,-49}, -{57,75,-48}, -{57,75,-47}, -{57,75,-46}, -{57,75,-45}, -{57,75,-44}, -{57,75,-43}, -{57,75,-42}, -{57,75,-41}, -{57,75,-40}, -{57,75,-39}, -{57,75,-38}, -{57,75,-37}, -{57,75,-36}, -{57,75,-35}, -{57,75,-34}, -{57,75,-33}, -{57,75,-32}, -{57,75,-31}, -{57,75,-30}, -{57,75,-29}, -{57,75,-28}, -{57,75,-27}, -{57,75,-26}, -{57,75,-25}, -{57,75,-24}, -{57,75,-23}, -{57,75,-22}, -{57,75,-21}, -{57,75,-20}, -{57,75,-19}, -{57,75,-18}, -{57,75,-17}, -{57,75,-16}, -{57,75,-15}, -{57,75,-14}, -{57,75,-13}, -{57,75,-12}, -{57,75,-11}, -{57,75,-10}, -{57,75,-9}, -{57,75,-8}, -{57,75,-7}, -{57,75,-6}, -{57,75,-5}, -{57,75,-4}, -{57,75,-3}, -{57,75,-2}, -{57,75,-1}, -{57,75,0}, -{57,75,1}, -{57,75,2}, -{57,75,3}, -{57,75,4}, -{57,75,5}, -{57,75,6}, -{57,75,7}, -{57,75,8}, -{57,75,9}, -{57,75,10}, -{57,75,11}, -{57,75,12}, -{57,75,13}, -{57,75,14}, -{57,75,15}, -{57,75,16}, -{57,75,17}, -{57,75,18}, -{57,75,19}, -{57,75,20}, -{57,75,21}, -{57,75,22}, -{57,75,23}, -{57,76,-66}, -{57,76,-65}, -{57,76,-64}, -{57,76,-63}, -{57,76,-62}, -{57,76,-61}, -{57,76,-60}, -{57,76,-59}, -{57,76,-58}, -{57,76,-57}, -{57,76,-56}, -{57,76,-55}, -{57,76,-54}, -{57,76,-53}, -{57,76,-52}, -{57,76,-51}, -{57,76,-50}, -{57,76,-49}, -{57,76,-48}, -{57,76,-47}, -{57,76,-46}, -{57,76,-45}, -{57,76,-44}, -{57,76,-43}, -{57,76,-42}, -{57,76,-41}, -{57,76,-40}, -{57,76,-39}, -{57,76,-38}, -{57,76,-37}, -{57,76,-36}, -{57,76,-35}, -{57,76,-34}, -{57,76,-33}, -{57,76,-32}, -{57,76,-31}, -{57,76,-30}, -{57,76,-29}, -{57,76,-28}, -{57,76,-27}, -{57,76,-26}, -{57,76,-25}, -{57,76,-24}, -{57,76,-23}, -{57,76,-22}, -{57,76,-21}, -{57,76,-20}, -{57,76,-19}, -{57,76,-18}, -{57,76,-17}, -{57,76,-16}, -{57,76,-15}, -{57,76,-14}, -{57,76,-13}, -{57,76,-12}, -{57,76,-11}, -{57,76,-10}, -{57,76,-9}, -{57,76,-8}, -{57,76,-7}, -{57,76,-6}, -{57,76,-5}, -{57,76,-4}, -{57,76,-3}, -{57,76,-2}, -{57,76,-1}, -{57,76,0}, -{57,76,1}, -{57,76,2}, -{57,76,3}, -{57,76,4}, -{57,76,5}, -{57,76,6}, -{57,76,7}, -{57,76,8}, -{57,76,9}, -{57,76,10}, -{57,76,11}, -{57,76,12}, -{57,76,13}, -{57,76,14}, -{57,76,15}, -{57,76,16}, -{57,76,17}, -{57,76,18}, -{57,77,-66}, -{57,77,-65}, -{57,77,-64}, -{57,77,-63}, -{57,77,-62}, -{57,77,-61}, -{57,77,-60}, -{57,77,-59}, -{57,77,-58}, -{57,77,-57}, -{57,77,-56}, -{57,77,-55}, -{57,77,-54}, -{57,77,-53}, -{57,77,-52}, -{57,77,-51}, -{57,77,-50}, -{57,77,-49}, -{57,77,-48}, -{57,77,-47}, -{57,77,-46}, -{57,77,-45}, -{57,77,-44}, -{57,77,-43}, -{57,77,-42}, -{57,77,-41}, -{57,77,-40}, -{57,77,-39}, -{57,77,-38}, -{57,77,-37}, -{57,77,-36}, -{57,77,-35}, -{57,77,-34}, -{57,77,-33}, -{57,77,-32}, -{57,77,-31}, -{57,77,-30}, -{57,77,-29}, -{57,77,-28}, -{57,77,-27}, -{57,77,-26}, -{57,77,-25}, -{57,77,-24}, -{57,77,-23}, -{57,77,-22}, -{57,77,-21}, -{57,77,-20}, -{57,77,-19}, -{57,77,-18}, -{57,77,-17}, -{57,77,-16}, -{57,77,-15}, -{57,77,-14}, -{57,77,-13}, -{57,77,-12}, -{57,77,-11}, -{57,77,-10}, -{57,77,-9}, -{57,77,-8}, -{57,77,-7}, -{57,77,-6}, -{57,77,-5}, -{57,77,-4}, -{57,77,-3}, -{57,77,-2}, -{57,77,-1}, -{57,77,0}, -{57,77,1}, -{57,77,2}, -{57,77,3}, -{57,77,4}, -{57,77,5}, -{57,77,6}, -{57,77,7}, -{57,77,8}, -{57,77,9}, -{57,77,10}, -{57,77,11}, -{57,77,12}, -{57,77,13}, -{57,77,14}, -{57,78,-66}, -{57,78,-65}, -{57,78,-64}, -{57,78,-63}, -{57,78,-62}, -{57,78,-61}, -{57,78,-60}, -{57,78,-59}, -{57,78,-58}, -{57,78,-57}, -{57,78,-56}, -{57,78,-55}, -{57,78,-54}, -{57,78,-53}, -{57,78,-52}, -{57,78,-51}, -{57,78,-50}, -{57,78,-49}, -{57,78,-48}, -{57,78,-47}, -{57,78,-46}, -{57,78,-45}, -{57,78,-44}, -{57,78,-43}, -{57,78,-42}, -{57,78,-41}, -{57,78,-40}, -{57,78,-39}, -{57,78,-38}, -{57,78,-37}, -{57,78,-36}, -{57,78,-35}, -{57,78,-34}, -{57,78,-33}, -{57,78,-32}, -{57,78,-31}, -{57,78,-30}, -{57,78,-29}, -{57,78,-28}, -{57,78,-27}, -{57,78,-26}, -{57,78,-25}, -{57,78,-24}, -{57,78,-23}, -{57,78,-22}, -{57,78,-21}, -{57,78,-20}, -{57,78,-19}, -{57,78,-18}, -{57,78,-17}, -{57,78,-16}, -{57,78,-15}, -{57,78,-14}, -{57,78,-13}, -{57,78,-12}, -{57,78,-11}, -{57,78,-10}, -{57,78,-9}, -{57,78,-8}, -{57,78,-7}, -{57,78,-6}, -{57,78,-5}, -{57,78,-4}, -{57,78,-3}, -{57,78,-2}, -{57,78,-1}, -{57,78,0}, -{57,78,1}, -{57,78,2}, -{57,78,3}, -{57,78,4}, -{57,78,5}, -{57,78,6}, -{57,78,7}, -{57,78,8}, -{57,78,9}, -{57,79,-66}, -{57,79,-65}, -{57,79,-64}, -{57,79,-63}, -{57,79,-62}, -{57,79,-61}, -{57,79,-60}, -{57,79,-59}, -{57,79,-58}, -{57,79,-57}, -{57,79,-56}, -{57,79,-55}, -{57,79,-54}, -{57,79,-53}, -{57,79,-52}, -{57,79,-51}, -{57,79,-50}, -{57,79,-49}, -{57,79,-48}, -{57,79,-47}, -{57,79,-46}, -{57,79,-45}, -{57,79,-44}, -{57,79,-43}, -{57,79,-42}, -{57,79,-41}, -{57,79,-40}, -{57,79,-39}, -{57,79,-38}, -{57,79,-37}, -{57,79,-36}, -{57,79,-35}, -{57,79,-34}, -{57,79,-33}, -{57,79,-32}, -{57,79,-31}, -{57,79,-30}, -{57,79,-29}, -{57,79,-28}, -{57,79,-27}, -{57,79,-26}, -{57,79,-25}, -{57,79,-24}, -{57,79,-23}, -{57,79,-22}, -{57,79,-21}, -{57,79,-20}, -{57,79,-19}, -{57,79,-18}, -{57,79,-17}, -{57,79,-16}, -{57,79,-15}, -{57,79,-14}, -{57,79,-13}, -{57,79,-12}, -{57,79,-11}, -{57,79,-10}, -{57,79,-9}, -{57,79,-8}, -{57,79,-7}, -{57,79,-6}, -{57,79,-5}, -{57,79,-4}, -{57,79,-3}, -{57,79,-2}, -{57,79,-1}, -{57,79,0}, -{57,79,1}, -{57,79,2}, -{57,79,3}, -{57,79,4}, -{57,79,5}, -{57,80,-66}, -{57,80,-65}, -{57,80,-64}, -{57,80,-63}, -{57,80,-62}, -{57,80,-61}, -{57,80,-60}, -{57,80,-59}, -{57,80,-58}, -{57,80,-57}, -{57,80,-56}, -{57,80,-55}, -{57,80,-54}, -{57,80,-53}, -{57,80,-52}, -{57,80,-51}, -{57,80,-50}, -{57,80,-49}, -{57,80,-48}, -{57,80,-47}, -{57,80,-46}, -{57,80,-45}, -{57,80,-44}, -{57,80,-43}, -{57,80,-42}, -{57,80,-41}, -{57,80,-40}, -{57,80,-39}, -{57,80,-38}, -{57,80,-37}, -{57,80,-36}, -{57,80,-35}, -{57,80,-34}, -{57,80,-33}, -{57,80,-32}, -{57,80,-31}, -{57,80,-30}, -{57,80,-29}, -{57,80,-28}, -{57,80,-27}, -{57,80,-26}, -{57,80,-25}, -{57,80,-24}, -{57,80,-23}, -{57,80,-22}, -{57,80,-21}, -{57,80,-20}, -{57,80,-19}, -{57,80,-18}, -{57,80,-17}, -{57,80,-16}, -{57,80,-15}, -{57,80,-14}, -{57,80,-13}, -{57,80,-12}, -{57,80,-11}, -{57,80,-10}, -{57,80,-9}, -{57,80,-8}, -{57,80,-7}, -{57,80,-6}, -{57,80,-5}, -{57,80,-4}, -{57,80,-3}, -{57,80,-2}, -{57,80,-1}, -{57,80,0}, -{57,80,1}, -{57,81,-66}, -{57,81,-65}, -{57,81,-64}, -{57,81,-63}, -{57,81,-62}, -{57,81,-61}, -{57,81,-60}, -{57,81,-59}, -{57,81,-58}, -{57,81,-57}, -{57,81,-56}, -{57,81,-55}, -{57,81,-54}, -{57,81,-53}, -{57,81,-52}, -{57,81,-51}, -{57,81,-50}, -{57,81,-49}, -{57,81,-48}, -{57,81,-47}, -{57,81,-46}, -{57,81,-45}, -{57,81,-44}, -{57,81,-43}, -{57,81,-42}, -{57,81,-41}, -{57,81,-40}, -{57,81,-39}, -{57,81,-38}, -{57,81,-37}, -{57,81,-36}, -{57,81,-35}, -{57,81,-34}, -{57,81,-33}, -{57,81,-32}, -{57,81,-31}, -{57,81,-30}, -{57,81,-29}, -{57,81,-28}, -{57,81,-27}, -{57,81,-26}, -{57,81,-25}, -{57,81,-24}, -{57,81,-23}, -{57,81,-22}, -{57,81,-21}, -{57,81,-20}, -{57,81,-19}, -{57,81,-18}, -{57,81,-17}, -{57,81,-16}, -{57,81,-15}, -{57,81,-14}, -{57,81,-13}, -{57,81,-12}, -{57,81,-11}, -{57,81,-10}, -{57,81,-9}, -{57,81,-8}, -{57,81,-7}, -{57,81,-6}, -{57,81,-5}, -{57,81,-4}, -{57,81,-3}, -{57,81,-2}, -{57,82,-66}, -{57,82,-65}, -{57,82,-64}, -{57,82,-63}, -{57,82,-62}, -{57,82,-61}, -{57,82,-60}, -{57,82,-59}, -{57,82,-58}, -{57,82,-57}, -{57,82,-56}, -{57,82,-55}, -{57,82,-54}, -{57,82,-53}, -{57,82,-52}, -{57,82,-51}, -{57,82,-50}, -{57,82,-49}, -{57,82,-48}, -{57,82,-47}, -{57,82,-46}, -{57,82,-45}, -{57,82,-44}, -{57,82,-43}, -{57,82,-42}, -{57,82,-41}, -{57,82,-40}, -{57,82,-39}, -{57,82,-38}, -{57,82,-37}, -{57,82,-36}, -{57,82,-35}, -{57,82,-34}, -{57,82,-33}, -{57,82,-32}, -{57,82,-31}, -{57,82,-30}, -{57,82,-29}, -{57,82,-28}, -{57,82,-27}, -{57,82,-26}, -{57,82,-25}, -{57,82,-24}, -{57,82,-23}, -{57,82,-22}, -{57,82,-21}, -{57,82,-20}, -{57,82,-19}, -{57,82,-18}, -{57,82,-17}, -{57,82,-16}, -{57,82,-15}, -{57,82,-14}, -{57,82,-13}, -{57,82,-12}, -{57,82,-11}, -{57,82,-10}, -{57,82,-9}, -{57,82,-8}, -{57,82,-7}, -{57,82,-6}, -{57,83,-66}, -{57,83,-65}, -{57,83,-64}, -{57,83,-63}, -{57,83,-62}, -{57,83,-61}, -{57,83,-60}, -{57,83,-59}, -{57,83,-58}, -{57,83,-57}, -{57,83,-56}, -{57,83,-55}, -{57,83,-54}, -{57,83,-53}, -{57,83,-52}, -{57,83,-51}, -{57,83,-50}, -{57,83,-49}, -{57,83,-48}, -{57,83,-47}, -{57,83,-46}, -{57,83,-45}, -{57,83,-44}, -{57,83,-43}, -{57,83,-42}, -{57,83,-41}, -{57,83,-40}, -{57,83,-39}, -{57,83,-38}, -{57,83,-37}, -{57,83,-36}, -{57,83,-35}, -{57,83,-34}, -{57,83,-33}, -{57,83,-32}, -{57,83,-31}, -{57,83,-30}, -{57,83,-29}, -{57,83,-28}, -{57,83,-27}, -{57,83,-26}, -{57,83,-25}, -{57,83,-24}, -{57,83,-23}, -{57,83,-22}, -{57,83,-21}, -{57,83,-20}, -{57,83,-19}, -{57,83,-18}, -{57,83,-17}, -{57,83,-16}, -{57,83,-15}, -{57,83,-14}, -{57,83,-13}, -{57,83,-12}, -{57,83,-11}, -{57,83,-10}, -{57,83,-9}, -{57,84,-66}, -{57,84,-65}, -{57,84,-64}, -{57,84,-63}, -{57,84,-62}, -{57,84,-61}, -{57,84,-60}, -{57,84,-59}, -{57,84,-58}, -{57,84,-57}, -{57,84,-56}, -{57,84,-55}, -{57,84,-54}, -{57,84,-53}, -{57,84,-52}, -{57,84,-51}, -{57,84,-50}, -{57,84,-49}, -{57,84,-48}, -{57,84,-47}, -{57,84,-46}, -{57,84,-45}, -{57,84,-44}, -{57,84,-43}, -{57,84,-42}, -{57,84,-41}, -{57,84,-40}, -{57,84,-39}, -{57,84,-38}, -{57,84,-37}, -{57,84,-36}, -{57,84,-35}, -{57,84,-34}, -{57,84,-33}, -{57,84,-32}, -{57,84,-31}, -{57,84,-30}, -{57,84,-29}, -{57,84,-28}, -{57,84,-27}, -{57,84,-26}, -{57,84,-25}, -{57,84,-24}, -{57,84,-23}, -{57,84,-22}, -{57,84,-21}, -{57,84,-20}, -{57,84,-19}, -{57,84,-18}, -{57,84,-17}, -{57,84,-16}, -{57,84,-15}, -{57,84,-14}, -{57,84,-13}, -{57,84,-12}, -{57,85,-66}, -{57,85,-65}, -{57,85,-64}, -{57,85,-63}, -{57,85,-62}, -{57,85,-61}, -{57,85,-60}, -{57,85,-59}, -{57,85,-58}, -{57,85,-57}, -{57,85,-56}, -{57,85,-55}, -{57,85,-54}, -{57,85,-53}, -{57,85,-52}, -{57,85,-51}, -{57,85,-50}, -{57,85,-49}, -{57,85,-48}, -{57,85,-47}, -{57,85,-46}, -{57,85,-45}, -{57,85,-44}, -{57,85,-43}, -{57,85,-42}, -{57,85,-41}, -{57,85,-40}, -{57,85,-39}, -{57,85,-38}, -{57,85,-37}, -{57,85,-36}, -{57,85,-35}, -{57,85,-34}, -{57,85,-33}, -{57,85,-32}, -{57,85,-31}, -{57,85,-30}, -{57,85,-29}, -{57,85,-28}, -{57,85,-27}, -{57,85,-26}, -{57,85,-25}, -{57,85,-24}, -{57,85,-23}, -{57,85,-22}, -{57,85,-21}, -{57,85,-20}, -{57,85,-19}, -{57,85,-18}, -{57,85,-17}, -{57,85,-16}, -{57,85,-15}, -{57,86,-66}, -{57,86,-65}, -{57,86,-64}, -{57,86,-63}, -{57,86,-62}, -{57,86,-61}, -{57,86,-60}, -{57,86,-59}, -{57,86,-58}, -{57,86,-57}, -{57,86,-56}, -{57,86,-55}, -{57,86,-54}, -{57,86,-53}, -{57,86,-52}, -{57,86,-51}, -{57,86,-50}, -{57,86,-49}, -{57,86,-48}, -{57,86,-47}, -{57,86,-46}, -{57,86,-45}, -{57,86,-44}, -{57,86,-43}, -{57,86,-42}, -{57,86,-41}, -{57,86,-40}, -{57,86,-39}, -{57,86,-38}, -{57,86,-37}, -{57,86,-36}, -{57,86,-35}, -{57,86,-34}, -{57,86,-33}, -{57,86,-32}, -{57,86,-31}, -{57,86,-30}, -{57,86,-29}, -{57,86,-28}, -{57,86,-27}, -{57,86,-26}, -{57,86,-25}, -{57,86,-24}, -{57,86,-23}, -{57,86,-22}, -{57,86,-21}, -{57,86,-20}, -{57,86,-19}, -{57,86,-18}, -{57,87,-66}, -{57,87,-65}, -{57,87,-64}, -{57,87,-63}, -{57,87,-62}, -{57,87,-61}, -{57,87,-60}, -{57,87,-59}, -{57,87,-58}, -{57,87,-57}, -{57,87,-56}, -{57,87,-55}, -{57,87,-54}, -{57,87,-53}, -{57,87,-52}, -{57,87,-51}, -{57,87,-50}, -{57,87,-49}, -{57,87,-48}, -{57,87,-47}, -{57,87,-46}, -{57,87,-45}, -{57,87,-44}, -{57,87,-43}, -{57,87,-42}, -{57,87,-41}, -{57,87,-40}, -{57,87,-39}, -{57,87,-38}, -{57,87,-37}, -{57,87,-36}, -{57,87,-35}, -{57,87,-34}, -{57,87,-33}, -{57,87,-32}, -{57,87,-31}, -{57,87,-30}, -{57,87,-29}, -{57,87,-28}, -{57,87,-27}, -{57,87,-26}, -{57,87,-25}, -{57,87,-24}, -{57,87,-23}, -{57,87,-22}, -{57,87,-21}, -{57,88,-66}, -{57,88,-65}, -{57,88,-64}, -{57,88,-63}, -{57,88,-62}, -{57,88,-61}, -{57,88,-60}, -{57,88,-59}, -{57,88,-58}, -{57,88,-57}, -{57,88,-56}, -{57,88,-55}, -{57,88,-54}, -{57,88,-53}, -{57,88,-52}, -{57,88,-51}, -{57,88,-50}, -{57,88,-49}, -{57,88,-48}, -{57,88,-47}, -{57,88,-46}, -{57,88,-45}, -{57,88,-44}, -{57,88,-43}, -{57,88,-42}, -{57,88,-41}, -{57,88,-40}, -{57,88,-39}, -{57,88,-38}, -{57,88,-37}, -{57,88,-36}, -{57,88,-35}, -{57,88,-34}, -{57,88,-33}, -{57,88,-32}, -{57,88,-31}, -{57,88,-30}, -{57,88,-29}, -{57,88,-28}, -{57,88,-27}, -{57,88,-26}, -{57,88,-25}, -{57,88,-24}, -{57,88,-23}, -{57,89,-66}, -{57,89,-65}, -{57,89,-64}, -{57,89,-63}, -{57,89,-62}, -{57,89,-61}, -{57,89,-60}, -{57,89,-59}, -{57,89,-58}, -{57,89,-57}, -{57,89,-56}, -{57,89,-55}, -{57,89,-54}, -{57,89,-53}, -{57,89,-52}, -{57,89,-51}, -{57,89,-50}, -{57,89,-49}, -{57,89,-48}, -{57,89,-47}, -{57,89,-46}, -{57,89,-45}, -{57,89,-44}, -{57,89,-43}, -{57,89,-42}, -{57,89,-41}, -{57,89,-40}, -{57,89,-39}, -{57,89,-38}, -{57,89,-37}, -{57,89,-36}, -{57,89,-35}, -{57,89,-34}, -{57,89,-33}, -{57,89,-32}, -{57,89,-31}, -{57,89,-30}, -{57,89,-29}, -{57,89,-28}, -{57,89,-27}, -{57,89,-26}, -{57,90,-66}, -{57,90,-65}, -{57,90,-64}, -{57,90,-63}, -{57,90,-62}, -{57,90,-61}, -{57,90,-60}, -{57,90,-59}, -{57,90,-58}, -{57,90,-57}, -{57,90,-56}, -{57,90,-55}, -{57,90,-54}, -{57,90,-53}, -{57,90,-52}, -{57,90,-51}, -{57,90,-50}, -{57,90,-49}, -{57,90,-48}, -{57,90,-47}, -{57,90,-46}, -{57,90,-45}, -{57,90,-44}, -{57,90,-43}, -{57,90,-42}, -{57,90,-41}, -{57,90,-40}, -{57,90,-39}, -{57,90,-38}, -{57,90,-37}, -{57,90,-36}, -{57,90,-35}, -{57,90,-34}, -{57,90,-33}, -{57,90,-32}, -{57,90,-31}, -{57,90,-30}, -{57,90,-29}, -{57,90,-28}, -{57,91,-66}, -{57,91,-65}, -{57,91,-64}, -{57,91,-63}, -{57,91,-62}, -{57,91,-61}, -{57,91,-60}, -{57,91,-59}, -{57,91,-58}, -{57,91,-57}, -{57,91,-56}, -{57,91,-55}, -{57,91,-54}, -{57,91,-53}, -{57,91,-52}, -{57,91,-51}, -{57,91,-50}, -{57,91,-49}, -{57,91,-48}, -{57,91,-47}, -{57,91,-46}, -{57,91,-45}, -{57,91,-44}, -{57,91,-43}, -{57,91,-42}, -{57,91,-41}, -{57,91,-40}, -{57,91,-39}, -{57,91,-38}, -{57,91,-37}, -{57,91,-36}, -{57,92,-66}, -{57,92,-65}, -{57,92,-64}, -{57,92,-63}, -{57,92,-62}, -{57,92,-61}, -{57,92,-60}, -{57,92,-59}, -{57,92,-58}, -{57,92,-57}, -{57,92,-56}, -{57,92,-55}, -{57,92,-54}, -{57,92,-53}, -{57,92,-52}, -{57,92,-51}, -{57,92,-50}, -{57,92,-49}, -{57,92,-48}, -{57,92,-47}, -{57,92,-46}, -{57,92,-45}, -{57,92,-44}, -{57,93,-66}, -{57,93,-65}, -{57,93,-64}, -{57,93,-63}, -{57,93,-62}, -{57,93,-61}, -{57,93,-60}, -{57,93,-59}, -{57,93,-58}, -{57,93,-57}, -{57,93,-56}, -{57,93,-55}, -{57,93,-54}, -{57,93,-53}, -{57,93,-52}, -{57,93,-51}, -{57,94,-66}, -{57,94,-65}, -{57,94,-64}, -{57,94,-63}, -{57,94,-62}, -{57,94,-61}, -{57,94,-60}, -{57,94,-59}, -{57,94,-58}, -{57,95,-66}, -{57,95,-65}, -{57,95,-64}, -{58,-61,57}, -{58,-61,58}, -{58,-61,59}, -{58,-60,52}, -{58,-60,53}, -{58,-60,54}, -{58,-60,55}, -{58,-60,56}, -{58,-60,57}, -{58,-60,58}, -{58,-60,59}, -{58,-59,48}, -{58,-59,49}, -{58,-59,50}, -{58,-59,51}, -{58,-59,52}, -{58,-59,53}, -{58,-59,54}, -{58,-59,55}, -{58,-59,56}, -{58,-59,57}, -{58,-59,58}, -{58,-59,59}, -{58,-58,44}, -{58,-58,45}, -{58,-58,46}, -{58,-58,47}, -{58,-58,48}, -{58,-58,49}, -{58,-58,50}, -{58,-58,51}, -{58,-58,52}, -{58,-58,53}, -{58,-58,54}, -{58,-58,55}, -{58,-58,56}, -{58,-58,57}, -{58,-58,58}, -{58,-58,59}, -{58,-57,41}, -{58,-57,42}, -{58,-57,43}, -{58,-57,44}, -{58,-57,45}, -{58,-57,46}, -{58,-57,47}, -{58,-57,48}, -{58,-57,49}, -{58,-57,50}, -{58,-57,51}, -{58,-57,52}, -{58,-57,53}, -{58,-57,54}, -{58,-57,55}, -{58,-57,56}, -{58,-57,57}, -{58,-57,58}, -{58,-57,59}, -{58,-56,38}, -{58,-56,39}, -{58,-56,40}, -{58,-56,41}, -{58,-56,42}, -{58,-56,43}, -{58,-56,44}, -{58,-56,45}, -{58,-56,46}, -{58,-56,47}, -{58,-56,48}, -{58,-56,49}, -{58,-56,50}, -{58,-56,51}, -{58,-56,52}, -{58,-56,53}, -{58,-56,54}, -{58,-56,55}, -{58,-56,56}, -{58,-56,57}, -{58,-56,58}, -{58,-56,59}, -{58,-55,35}, -{58,-55,36}, -{58,-55,37}, -{58,-55,38}, -{58,-55,39}, -{58,-55,40}, -{58,-55,41}, -{58,-55,42}, -{58,-55,43}, -{58,-55,44}, -{58,-55,45}, -{58,-55,46}, -{58,-55,47}, -{58,-55,48}, -{58,-55,49}, -{58,-55,50}, -{58,-55,51}, -{58,-55,52}, -{58,-55,53}, -{58,-55,54}, -{58,-55,55}, -{58,-55,56}, -{58,-55,57}, -{58,-55,58}, -{58,-55,59}, -{58,-54,32}, -{58,-54,33}, -{58,-54,34}, -{58,-54,35}, -{58,-54,36}, -{58,-54,37}, -{58,-54,38}, -{58,-54,39}, -{58,-54,40}, -{58,-54,41}, -{58,-54,42}, -{58,-54,43}, -{58,-54,44}, -{58,-54,45}, -{58,-54,46}, -{58,-54,47}, -{58,-54,48}, -{58,-54,49}, -{58,-54,50}, -{58,-54,51}, -{58,-54,52}, -{58,-54,53}, -{58,-54,54}, -{58,-54,55}, -{58,-54,56}, -{58,-54,57}, -{58,-54,58}, -{58,-54,59}, -{58,-53,29}, -{58,-53,30}, -{58,-53,31}, -{58,-53,32}, -{58,-53,33}, -{58,-53,34}, -{58,-53,35}, -{58,-53,36}, -{58,-53,37}, -{58,-53,38}, -{58,-53,39}, -{58,-53,40}, -{58,-53,41}, -{58,-53,42}, -{58,-53,43}, -{58,-53,44}, -{58,-53,45}, -{58,-53,46}, -{58,-53,47}, -{58,-53,48}, -{58,-53,49}, -{58,-53,50}, -{58,-53,51}, -{58,-53,52}, -{58,-53,53}, -{58,-53,54}, -{58,-53,55}, -{58,-53,56}, -{58,-53,57}, -{58,-53,58}, -{58,-53,59}, -{58,-52,27}, -{58,-52,28}, -{58,-52,29}, -{58,-52,30}, -{58,-52,31}, -{58,-52,32}, -{58,-52,33}, -{58,-52,34}, -{58,-52,35}, -{58,-52,36}, -{58,-52,37}, -{58,-52,38}, -{58,-52,39}, -{58,-52,40}, -{58,-52,41}, -{58,-52,42}, -{58,-52,43}, -{58,-52,44}, -{58,-52,45}, -{58,-52,46}, -{58,-52,47}, -{58,-52,48}, -{58,-52,49}, -{58,-52,50}, -{58,-52,51}, -{58,-52,52}, -{58,-52,53}, -{58,-52,54}, -{58,-52,55}, -{58,-52,56}, -{58,-52,57}, -{58,-52,58}, -{58,-52,59}, -{58,-51,24}, -{58,-51,25}, -{58,-51,26}, -{58,-51,27}, -{58,-51,28}, -{58,-51,29}, -{58,-51,30}, -{58,-51,31}, -{58,-51,32}, -{58,-51,33}, -{58,-51,34}, -{58,-51,35}, -{58,-51,36}, -{58,-51,37}, -{58,-51,38}, -{58,-51,39}, -{58,-51,40}, -{58,-51,41}, -{58,-51,42}, -{58,-51,43}, -{58,-51,44}, -{58,-51,45}, -{58,-51,46}, -{58,-51,47}, -{58,-51,48}, -{58,-51,49}, -{58,-51,50}, -{58,-51,51}, -{58,-51,52}, -{58,-51,53}, -{58,-51,54}, -{58,-51,55}, -{58,-51,56}, -{58,-51,57}, -{58,-51,58}, -{58,-51,59}, -{58,-50,22}, -{58,-50,23}, -{58,-50,24}, -{58,-50,25}, -{58,-50,26}, -{58,-50,27}, -{58,-50,28}, -{58,-50,29}, -{58,-50,30}, -{58,-50,31}, -{58,-50,32}, -{58,-50,33}, -{58,-50,34}, -{58,-50,35}, -{58,-50,36}, -{58,-50,37}, -{58,-50,38}, -{58,-50,39}, -{58,-50,40}, -{58,-50,41}, -{58,-50,42}, -{58,-50,43}, -{58,-50,44}, -{58,-50,45}, -{58,-50,46}, -{58,-50,47}, -{58,-50,48}, -{58,-50,49}, -{58,-50,50}, -{58,-50,51}, -{58,-50,52}, -{58,-50,53}, -{58,-50,54}, -{58,-50,55}, -{58,-50,56}, -{58,-50,57}, -{58,-50,58}, -{58,-50,59}, -{58,-50,60}, -{58,-49,20}, -{58,-49,21}, -{58,-49,22}, -{58,-49,23}, -{58,-49,24}, -{58,-49,25}, -{58,-49,26}, -{58,-49,27}, -{58,-49,28}, -{58,-49,29}, -{58,-49,30}, -{58,-49,31}, -{58,-49,32}, -{58,-49,33}, -{58,-49,34}, -{58,-49,35}, -{58,-49,36}, -{58,-49,37}, -{58,-49,38}, -{58,-49,39}, -{58,-49,40}, -{58,-49,41}, -{58,-49,42}, -{58,-49,43}, -{58,-49,44}, -{58,-49,45}, -{58,-49,46}, -{58,-49,47}, -{58,-49,48}, -{58,-49,49}, -{58,-49,50}, -{58,-49,51}, -{58,-49,52}, -{58,-49,53}, -{58,-49,54}, -{58,-49,55}, -{58,-49,56}, -{58,-49,57}, -{58,-49,58}, -{58,-49,59}, -{58,-49,60}, -{58,-48,17}, -{58,-48,18}, -{58,-48,19}, -{58,-48,20}, -{58,-48,21}, -{58,-48,22}, -{58,-48,23}, -{58,-48,24}, -{58,-48,25}, -{58,-48,26}, -{58,-48,27}, -{58,-48,28}, -{58,-48,29}, -{58,-48,30}, -{58,-48,31}, -{58,-48,32}, -{58,-48,33}, -{58,-48,34}, -{58,-48,35}, -{58,-48,36}, -{58,-48,37}, -{58,-48,38}, -{58,-48,39}, -{58,-48,40}, -{58,-48,41}, -{58,-48,42}, -{58,-48,43}, -{58,-48,44}, -{58,-48,45}, -{58,-48,46}, -{58,-48,47}, -{58,-48,48}, -{58,-48,49}, -{58,-48,50}, -{58,-48,51}, -{58,-48,52}, -{58,-48,53}, -{58,-48,54}, -{58,-48,55}, -{58,-48,56}, -{58,-48,57}, -{58,-48,58}, -{58,-48,59}, -{58,-48,60}, -{58,-47,15}, -{58,-47,16}, -{58,-47,17}, -{58,-47,18}, -{58,-47,19}, -{58,-47,20}, -{58,-47,21}, -{58,-47,22}, -{58,-47,23}, -{58,-47,24}, -{58,-47,25}, -{58,-47,26}, -{58,-47,27}, -{58,-47,28}, -{58,-47,29}, -{58,-47,30}, -{58,-47,31}, -{58,-47,32}, -{58,-47,33}, -{58,-47,34}, -{58,-47,35}, -{58,-47,36}, -{58,-47,37}, -{58,-47,38}, -{58,-47,39}, -{58,-47,40}, -{58,-47,41}, -{58,-47,42}, -{58,-47,43}, -{58,-47,44}, -{58,-47,45}, -{58,-47,46}, -{58,-47,47}, -{58,-47,48}, -{58,-47,49}, -{58,-47,50}, -{58,-47,51}, -{58,-47,52}, -{58,-47,53}, -{58,-47,54}, -{58,-47,55}, -{58,-47,56}, -{58,-47,57}, -{58,-47,58}, -{58,-47,59}, -{58,-47,60}, -{58,-46,13}, -{58,-46,14}, -{58,-46,15}, -{58,-46,16}, -{58,-46,17}, -{58,-46,18}, -{58,-46,19}, -{58,-46,20}, -{58,-46,21}, -{58,-46,22}, -{58,-46,23}, -{58,-46,24}, -{58,-46,25}, -{58,-46,26}, -{58,-46,27}, -{58,-46,28}, -{58,-46,29}, -{58,-46,30}, -{58,-46,31}, -{58,-46,32}, -{58,-46,33}, -{58,-46,34}, -{58,-46,35}, -{58,-46,36}, -{58,-46,37}, -{58,-46,38}, -{58,-46,39}, -{58,-46,40}, -{58,-46,41}, -{58,-46,42}, -{58,-46,43}, -{58,-46,44}, -{58,-46,45}, -{58,-46,46}, -{58,-46,47}, -{58,-46,48}, -{58,-46,49}, -{58,-46,50}, -{58,-46,51}, -{58,-46,52}, -{58,-46,53}, -{58,-46,54}, -{58,-46,55}, -{58,-46,56}, -{58,-46,57}, -{58,-46,58}, -{58,-46,59}, -{58,-46,60}, -{58,-45,11}, -{58,-45,12}, -{58,-45,13}, -{58,-45,14}, -{58,-45,15}, -{58,-45,16}, -{58,-45,17}, -{58,-45,18}, -{58,-45,19}, -{58,-45,20}, -{58,-45,21}, -{58,-45,22}, -{58,-45,23}, -{58,-45,24}, -{58,-45,25}, -{58,-45,26}, -{58,-45,27}, -{58,-45,28}, -{58,-45,29}, -{58,-45,30}, -{58,-45,31}, -{58,-45,32}, -{58,-45,33}, -{58,-45,34}, -{58,-45,35}, -{58,-45,36}, -{58,-45,37}, -{58,-45,38}, -{58,-45,39}, -{58,-45,40}, -{58,-45,41}, -{58,-45,42}, -{58,-45,43}, -{58,-45,44}, -{58,-45,45}, -{58,-45,46}, -{58,-45,47}, -{58,-45,48}, -{58,-45,49}, -{58,-45,50}, -{58,-45,51}, -{58,-45,52}, -{58,-45,53}, -{58,-45,54}, -{58,-45,55}, -{58,-45,56}, -{58,-45,57}, -{58,-45,58}, -{58,-45,59}, -{58,-45,60}, -{58,-44,9}, -{58,-44,10}, -{58,-44,11}, -{58,-44,12}, -{58,-44,13}, -{58,-44,14}, -{58,-44,15}, -{58,-44,16}, -{58,-44,17}, -{58,-44,18}, -{58,-44,19}, -{58,-44,20}, -{58,-44,21}, -{58,-44,22}, -{58,-44,23}, -{58,-44,24}, -{58,-44,25}, -{58,-44,26}, -{58,-44,27}, -{58,-44,28}, -{58,-44,29}, -{58,-44,30}, -{58,-44,31}, -{58,-44,32}, -{58,-44,33}, -{58,-44,34}, -{58,-44,35}, -{58,-44,36}, -{58,-44,37}, -{58,-44,38}, -{58,-44,39}, -{58,-44,40}, -{58,-44,41}, -{58,-44,42}, -{58,-44,43}, -{58,-44,44}, -{58,-44,45}, -{58,-44,46}, -{58,-44,47}, -{58,-44,48}, -{58,-44,49}, -{58,-44,50}, -{58,-44,51}, -{58,-44,52}, -{58,-44,53}, -{58,-44,54}, -{58,-44,55}, -{58,-44,56}, -{58,-44,57}, -{58,-44,58}, -{58,-44,59}, -{58,-44,60}, -{58,-43,7}, -{58,-43,8}, -{58,-43,9}, -{58,-43,10}, -{58,-43,11}, -{58,-43,12}, -{58,-43,13}, -{58,-43,14}, -{58,-43,15}, -{58,-43,16}, -{58,-43,17}, -{58,-43,18}, -{58,-43,19}, -{58,-43,20}, -{58,-43,21}, -{58,-43,22}, -{58,-43,23}, -{58,-43,24}, -{58,-43,25}, -{58,-43,26}, -{58,-43,27}, -{58,-43,28}, -{58,-43,29}, -{58,-43,30}, -{58,-43,31}, -{58,-43,32}, -{58,-43,33}, -{58,-43,34}, -{58,-43,35}, -{58,-43,36}, -{58,-43,37}, -{58,-43,38}, -{58,-43,39}, -{58,-43,40}, -{58,-43,41}, -{58,-43,42}, -{58,-43,43}, -{58,-43,44}, -{58,-43,45}, -{58,-43,46}, -{58,-43,47}, -{58,-43,48}, -{58,-43,49}, -{58,-43,50}, -{58,-43,51}, -{58,-43,52}, -{58,-43,53}, -{58,-43,54}, -{58,-43,55}, -{58,-43,56}, -{58,-43,57}, -{58,-43,58}, -{58,-43,59}, -{58,-43,60}, -{58,-42,5}, -{58,-42,6}, -{58,-42,7}, -{58,-42,8}, -{58,-42,9}, -{58,-42,10}, -{58,-42,11}, -{58,-42,12}, -{58,-42,13}, -{58,-42,14}, -{58,-42,15}, -{58,-42,16}, -{58,-42,17}, -{58,-42,18}, -{58,-42,19}, -{58,-42,20}, -{58,-42,21}, -{58,-42,22}, -{58,-42,23}, -{58,-42,24}, -{58,-42,25}, -{58,-42,26}, -{58,-42,27}, -{58,-42,28}, -{58,-42,29}, -{58,-42,30}, -{58,-42,31}, -{58,-42,32}, -{58,-42,33}, -{58,-42,34}, -{58,-42,35}, -{58,-42,36}, -{58,-42,37}, -{58,-42,38}, -{58,-42,39}, -{58,-42,40}, -{58,-42,41}, -{58,-42,42}, -{58,-42,43}, -{58,-42,44}, -{58,-42,45}, -{58,-42,46}, -{58,-42,47}, -{58,-42,48}, -{58,-42,49}, -{58,-42,50}, -{58,-42,51}, -{58,-42,52}, -{58,-42,53}, -{58,-42,54}, -{58,-42,55}, -{58,-42,56}, -{58,-42,57}, -{58,-42,58}, -{58,-42,59}, -{58,-42,60}, -{58,-41,4}, -{58,-41,5}, -{58,-41,6}, -{58,-41,7}, -{58,-41,8}, -{58,-41,9}, -{58,-41,10}, -{58,-41,11}, -{58,-41,12}, -{58,-41,13}, -{58,-41,14}, -{58,-41,15}, -{58,-41,16}, -{58,-41,17}, -{58,-41,18}, -{58,-41,19}, -{58,-41,20}, -{58,-41,21}, -{58,-41,22}, -{58,-41,23}, -{58,-41,24}, -{58,-41,25}, -{58,-41,26}, -{58,-41,27}, -{58,-41,28}, -{58,-41,29}, -{58,-41,30}, -{58,-41,31}, -{58,-41,32}, -{58,-41,33}, -{58,-41,34}, -{58,-41,35}, -{58,-41,36}, -{58,-41,37}, -{58,-41,38}, -{58,-41,39}, -{58,-41,40}, -{58,-41,41}, -{58,-41,42}, -{58,-41,43}, -{58,-41,44}, -{58,-41,45}, -{58,-41,46}, -{58,-41,47}, -{58,-41,48}, -{58,-41,49}, -{58,-41,50}, -{58,-41,51}, -{58,-41,52}, -{58,-41,53}, -{58,-41,54}, -{58,-41,55}, -{58,-41,56}, -{58,-41,57}, -{58,-41,58}, -{58,-41,59}, -{58,-41,60}, -{58,-40,2}, -{58,-40,3}, -{58,-40,4}, -{58,-40,5}, -{58,-40,6}, -{58,-40,7}, -{58,-40,8}, -{58,-40,9}, -{58,-40,10}, -{58,-40,11}, -{58,-40,12}, -{58,-40,13}, -{58,-40,14}, -{58,-40,15}, -{58,-40,16}, -{58,-40,17}, -{58,-40,18}, -{58,-40,19}, -{58,-40,20}, -{58,-40,21}, -{58,-40,22}, -{58,-40,23}, -{58,-40,24}, -{58,-40,25}, -{58,-40,26}, -{58,-40,27}, -{58,-40,28}, -{58,-40,29}, -{58,-40,30}, -{58,-40,31}, -{58,-40,32}, -{58,-40,33}, -{58,-40,34}, -{58,-40,35}, -{58,-40,36}, -{58,-40,37}, -{58,-40,38}, -{58,-40,39}, -{58,-40,40}, -{58,-40,41}, -{58,-40,42}, -{58,-40,43}, -{58,-40,44}, -{58,-40,45}, -{58,-40,46}, -{58,-40,47}, -{58,-40,48}, -{58,-40,49}, -{58,-40,50}, -{58,-40,51}, -{58,-40,52}, -{58,-40,53}, -{58,-40,54}, -{58,-40,55}, -{58,-40,56}, -{58,-40,57}, -{58,-40,58}, -{58,-40,59}, -{58,-40,60}, -{58,-39,0}, -{58,-39,1}, -{58,-39,2}, -{58,-39,3}, -{58,-39,4}, -{58,-39,5}, -{58,-39,6}, -{58,-39,7}, -{58,-39,8}, -{58,-39,9}, -{58,-39,10}, -{58,-39,11}, -{58,-39,12}, -{58,-39,13}, -{58,-39,14}, -{58,-39,15}, -{58,-39,16}, -{58,-39,17}, -{58,-39,18}, -{58,-39,19}, -{58,-39,20}, -{58,-39,21}, -{58,-39,22}, -{58,-39,23}, -{58,-39,24}, -{58,-39,25}, -{58,-39,26}, -{58,-39,27}, -{58,-39,28}, -{58,-39,29}, -{58,-39,30}, -{58,-39,31}, -{58,-39,32}, -{58,-39,33}, -{58,-39,34}, -{58,-39,35}, -{58,-39,36}, -{58,-39,37}, -{58,-39,38}, -{58,-39,39}, -{58,-39,40}, -{58,-39,41}, -{58,-39,42}, -{58,-39,43}, -{58,-39,44}, -{58,-39,45}, -{58,-39,46}, -{58,-39,47}, -{58,-39,48}, -{58,-39,49}, -{58,-39,50}, -{58,-39,51}, -{58,-39,52}, -{58,-39,53}, -{58,-39,54}, -{58,-39,55}, -{58,-39,56}, -{58,-39,57}, -{58,-39,58}, -{58,-39,59}, -{58,-39,60}, -{58,-38,-2}, -{58,-38,-1}, -{58,-38,0}, -{58,-38,1}, -{58,-38,2}, -{58,-38,3}, -{58,-38,4}, -{58,-38,5}, -{58,-38,6}, -{58,-38,7}, -{58,-38,8}, -{58,-38,9}, -{58,-38,10}, -{58,-38,11}, -{58,-38,12}, -{58,-38,13}, -{58,-38,14}, -{58,-38,15}, -{58,-38,16}, -{58,-38,17}, -{58,-38,18}, -{58,-38,19}, -{58,-38,20}, -{58,-38,21}, -{58,-38,22}, -{58,-38,23}, -{58,-38,24}, -{58,-38,25}, -{58,-38,26}, -{58,-38,27}, -{58,-38,28}, -{58,-38,29}, -{58,-38,30}, -{58,-38,31}, -{58,-38,32}, -{58,-38,33}, -{58,-38,34}, -{58,-38,35}, -{58,-38,36}, -{58,-38,37}, -{58,-38,38}, -{58,-38,39}, -{58,-38,40}, -{58,-38,41}, -{58,-38,42}, -{58,-38,43}, -{58,-38,44}, -{58,-38,45}, -{58,-38,46}, -{58,-38,47}, -{58,-38,48}, -{58,-38,49}, -{58,-38,50}, -{58,-38,51}, -{58,-38,52}, -{58,-38,53}, -{58,-38,54}, -{58,-38,55}, -{58,-38,56}, -{58,-38,57}, -{58,-38,58}, -{58,-38,59}, -{58,-38,60}, -{58,-37,-3}, -{58,-37,-2}, -{58,-37,-1}, -{58,-37,0}, -{58,-37,1}, -{58,-37,2}, -{58,-37,3}, -{58,-37,4}, -{58,-37,5}, -{58,-37,6}, -{58,-37,7}, -{58,-37,8}, -{58,-37,9}, -{58,-37,10}, -{58,-37,11}, -{58,-37,12}, -{58,-37,13}, -{58,-37,14}, -{58,-37,15}, -{58,-37,16}, -{58,-37,17}, -{58,-37,18}, -{58,-37,19}, -{58,-37,20}, -{58,-37,21}, -{58,-37,22}, -{58,-37,23}, -{58,-37,24}, -{58,-37,25}, -{58,-37,26}, -{58,-37,27}, -{58,-37,28}, -{58,-37,29}, -{58,-37,30}, -{58,-37,31}, -{58,-37,32}, -{58,-37,33}, -{58,-37,34}, -{58,-37,35}, -{58,-37,36}, -{58,-37,37}, -{58,-37,38}, -{58,-37,39}, -{58,-37,40}, -{58,-37,41}, -{58,-37,42}, -{58,-37,43}, -{58,-37,44}, -{58,-37,45}, -{58,-37,46}, -{58,-37,47}, -{58,-37,48}, -{58,-37,49}, -{58,-37,50}, -{58,-37,51}, -{58,-37,52}, -{58,-37,53}, -{58,-37,54}, -{58,-37,55}, -{58,-37,56}, -{58,-37,57}, -{58,-37,58}, -{58,-37,59}, -{58,-37,60}, -{58,-36,-5}, -{58,-36,-4}, -{58,-36,-3}, -{58,-36,-2}, -{58,-36,-1}, -{58,-36,0}, -{58,-36,1}, -{58,-36,2}, -{58,-36,3}, -{58,-36,4}, -{58,-36,5}, -{58,-36,6}, -{58,-36,7}, -{58,-36,8}, -{58,-36,9}, -{58,-36,10}, -{58,-36,11}, -{58,-36,12}, -{58,-36,13}, -{58,-36,14}, -{58,-36,15}, -{58,-36,16}, -{58,-36,17}, -{58,-36,18}, -{58,-36,19}, -{58,-36,20}, -{58,-36,21}, -{58,-36,22}, -{58,-36,23}, -{58,-36,24}, -{58,-36,25}, -{58,-36,26}, -{58,-36,27}, -{58,-36,28}, -{58,-36,29}, -{58,-36,30}, -{58,-36,31}, -{58,-36,32}, -{58,-36,33}, -{58,-36,34}, -{58,-36,35}, -{58,-36,36}, -{58,-36,37}, -{58,-36,38}, -{58,-36,39}, -{58,-36,40}, -{58,-36,41}, -{58,-36,42}, -{58,-36,43}, -{58,-36,44}, -{58,-36,45}, -{58,-36,46}, -{58,-36,47}, -{58,-36,48}, -{58,-36,49}, -{58,-36,50}, -{58,-36,51}, -{58,-36,52}, -{58,-36,53}, -{58,-36,54}, -{58,-36,55}, -{58,-36,56}, -{58,-36,57}, -{58,-36,58}, -{58,-36,59}, -{58,-36,60}, -{58,-35,-7}, -{58,-35,-6}, -{58,-35,-5}, -{58,-35,-4}, -{58,-35,-3}, -{58,-35,-2}, -{58,-35,-1}, -{58,-35,0}, -{58,-35,1}, -{58,-35,2}, -{58,-35,3}, -{58,-35,4}, -{58,-35,5}, -{58,-35,6}, -{58,-35,7}, -{58,-35,8}, -{58,-35,9}, -{58,-35,10}, -{58,-35,11}, -{58,-35,12}, -{58,-35,13}, -{58,-35,14}, -{58,-35,15}, -{58,-35,16}, -{58,-35,17}, -{58,-35,18}, -{58,-35,19}, -{58,-35,20}, -{58,-35,21}, -{58,-35,22}, -{58,-35,23}, -{58,-35,24}, -{58,-35,25}, -{58,-35,26}, -{58,-35,27}, -{58,-35,28}, -{58,-35,29}, -{58,-35,30}, -{58,-35,31}, -{58,-35,32}, -{58,-35,33}, -{58,-35,34}, -{58,-35,35}, -{58,-35,36}, -{58,-35,37}, -{58,-35,38}, -{58,-35,39}, -{58,-35,40}, -{58,-35,41}, -{58,-35,42}, -{58,-35,43}, -{58,-35,44}, -{58,-35,45}, -{58,-35,46}, -{58,-35,47}, -{58,-35,48}, -{58,-35,49}, -{58,-35,50}, -{58,-35,51}, -{58,-35,52}, -{58,-35,53}, -{58,-35,54}, -{58,-35,55}, -{58,-35,56}, -{58,-35,57}, -{58,-35,58}, -{58,-35,59}, -{58,-35,60}, -{58,-34,-8}, -{58,-34,-7}, -{58,-34,-6}, -{58,-34,-5}, -{58,-34,-4}, -{58,-34,-3}, -{58,-34,-2}, -{58,-34,-1}, -{58,-34,0}, -{58,-34,1}, -{58,-34,2}, -{58,-34,3}, -{58,-34,4}, -{58,-34,5}, -{58,-34,6}, -{58,-34,7}, -{58,-34,8}, -{58,-34,9}, -{58,-34,10}, -{58,-34,11}, -{58,-34,12}, -{58,-34,13}, -{58,-34,14}, -{58,-34,15}, -{58,-34,16}, -{58,-34,17}, -{58,-34,18}, -{58,-34,19}, -{58,-34,20}, -{58,-34,21}, -{58,-34,22}, -{58,-34,23}, -{58,-34,24}, -{58,-34,25}, -{58,-34,26}, -{58,-34,27}, -{58,-34,28}, -{58,-34,29}, -{58,-34,30}, -{58,-34,31}, -{58,-34,32}, -{58,-34,33}, -{58,-34,34}, -{58,-34,35}, -{58,-34,36}, -{58,-34,37}, -{58,-34,38}, -{58,-34,39}, -{58,-34,40}, -{58,-34,41}, -{58,-34,42}, -{58,-34,43}, -{58,-34,44}, -{58,-34,45}, -{58,-34,46}, -{58,-34,47}, -{58,-34,48}, -{58,-34,49}, -{58,-34,50}, -{58,-34,51}, -{58,-34,52}, -{58,-34,53}, -{58,-34,54}, -{58,-34,55}, -{58,-34,56}, -{58,-34,57}, -{58,-34,58}, -{58,-34,59}, -{58,-34,60}, -{58,-33,-10}, -{58,-33,-9}, -{58,-33,-8}, -{58,-33,-7}, -{58,-33,-6}, -{58,-33,-5}, -{58,-33,-4}, -{58,-33,-3}, -{58,-33,-2}, -{58,-33,-1}, -{58,-33,0}, -{58,-33,1}, -{58,-33,2}, -{58,-33,3}, -{58,-33,4}, -{58,-33,5}, -{58,-33,6}, -{58,-33,7}, -{58,-33,8}, -{58,-33,9}, -{58,-33,10}, -{58,-33,11}, -{58,-33,12}, -{58,-33,13}, -{58,-33,14}, -{58,-33,15}, -{58,-33,16}, -{58,-33,17}, -{58,-33,18}, -{58,-33,19}, -{58,-33,20}, -{58,-33,21}, -{58,-33,22}, -{58,-33,23}, -{58,-33,24}, -{58,-33,25}, -{58,-33,26}, -{58,-33,27}, -{58,-33,28}, -{58,-33,29}, -{58,-33,30}, -{58,-33,31}, -{58,-33,32}, -{58,-33,33}, -{58,-33,34}, -{58,-33,35}, -{58,-33,36}, -{58,-33,37}, -{58,-33,38}, -{58,-33,39}, -{58,-33,40}, -{58,-33,41}, -{58,-33,42}, -{58,-33,43}, -{58,-33,44}, -{58,-33,45}, -{58,-33,46}, -{58,-33,47}, -{58,-33,48}, -{58,-33,49}, -{58,-33,50}, -{58,-33,51}, -{58,-33,52}, -{58,-33,53}, -{58,-33,54}, -{58,-33,55}, -{58,-33,56}, -{58,-33,57}, -{58,-33,58}, -{58,-33,59}, -{58,-33,60}, -{58,-32,-11}, -{58,-32,-10}, -{58,-32,-9}, -{58,-32,-8}, -{58,-32,-7}, -{58,-32,-6}, -{58,-32,-5}, -{58,-32,-4}, -{58,-32,-3}, -{58,-32,-2}, -{58,-32,-1}, -{58,-32,0}, -{58,-32,1}, -{58,-32,2}, -{58,-32,3}, -{58,-32,4}, -{58,-32,5}, -{58,-32,6}, -{58,-32,7}, -{58,-32,8}, -{58,-32,9}, -{58,-32,10}, -{58,-32,11}, -{58,-32,12}, -{58,-32,13}, -{58,-32,14}, -{58,-32,15}, -{58,-32,16}, -{58,-32,17}, -{58,-32,18}, -{58,-32,19}, -{58,-32,20}, -{58,-32,21}, -{58,-32,22}, -{58,-32,23}, -{58,-32,24}, -{58,-32,25}, -{58,-32,26}, -{58,-32,27}, -{58,-32,28}, -{58,-32,29}, -{58,-32,30}, -{58,-32,31}, -{58,-32,32}, -{58,-32,33}, -{58,-32,34}, -{58,-32,35}, -{58,-32,36}, -{58,-32,37}, -{58,-32,38}, -{58,-32,39}, -{58,-32,40}, -{58,-32,41}, -{58,-32,42}, -{58,-32,43}, -{58,-32,44}, -{58,-32,45}, -{58,-32,46}, -{58,-32,47}, -{58,-32,48}, -{58,-32,49}, -{58,-32,50}, -{58,-32,51}, -{58,-32,52}, -{58,-32,53}, -{58,-32,54}, -{58,-32,55}, -{58,-32,56}, -{58,-32,57}, -{58,-32,58}, -{58,-32,59}, -{58,-32,60}, -{58,-31,-13}, -{58,-31,-12}, -{58,-31,-11}, -{58,-31,-10}, -{58,-31,-9}, -{58,-31,-8}, -{58,-31,-7}, -{58,-31,-6}, -{58,-31,-5}, -{58,-31,-4}, -{58,-31,-3}, -{58,-31,-2}, -{58,-31,-1}, -{58,-31,0}, -{58,-31,1}, -{58,-31,2}, -{58,-31,3}, -{58,-31,4}, -{58,-31,5}, -{58,-31,6}, -{58,-31,7}, -{58,-31,8}, -{58,-31,9}, -{58,-31,10}, -{58,-31,11}, -{58,-31,12}, -{58,-31,13}, -{58,-31,14}, -{58,-31,15}, -{58,-31,16}, -{58,-31,17}, -{58,-31,18}, -{58,-31,19}, -{58,-31,20}, -{58,-31,21}, -{58,-31,22}, -{58,-31,23}, -{58,-31,24}, -{58,-31,25}, -{58,-31,26}, -{58,-31,27}, -{58,-31,28}, -{58,-31,29}, -{58,-31,30}, -{58,-31,31}, -{58,-31,32}, -{58,-31,33}, -{58,-31,34}, -{58,-31,35}, -{58,-31,36}, -{58,-31,37}, -{58,-31,38}, -{58,-31,39}, -{58,-31,40}, -{58,-31,41}, -{58,-31,42}, -{58,-31,43}, -{58,-31,44}, -{58,-31,45}, -{58,-31,46}, -{58,-31,47}, -{58,-31,48}, -{58,-31,49}, -{58,-31,50}, -{58,-31,51}, -{58,-31,52}, -{58,-31,53}, -{58,-31,54}, -{58,-31,55}, -{58,-31,56}, -{58,-31,57}, -{58,-31,58}, -{58,-31,59}, -{58,-31,60}, -{58,-30,-14}, -{58,-30,-13}, -{58,-30,-12}, -{58,-30,-11}, -{58,-30,-10}, -{58,-30,-9}, -{58,-30,-8}, -{58,-30,-7}, -{58,-30,-6}, -{58,-30,-5}, -{58,-30,-4}, -{58,-30,-3}, -{58,-30,-2}, -{58,-30,-1}, -{58,-30,0}, -{58,-30,1}, -{58,-30,2}, -{58,-30,3}, -{58,-30,4}, -{58,-30,5}, -{58,-30,6}, -{58,-30,7}, -{58,-30,8}, -{58,-30,9}, -{58,-30,10}, -{58,-30,11}, -{58,-30,12}, -{58,-30,13}, -{58,-30,14}, -{58,-30,15}, -{58,-30,16}, -{58,-30,17}, -{58,-30,18}, -{58,-30,19}, -{58,-30,20}, -{58,-30,21}, -{58,-30,22}, -{58,-30,23}, -{58,-30,24}, -{58,-30,25}, -{58,-30,26}, -{58,-30,27}, -{58,-30,28}, -{58,-30,29}, -{58,-30,30}, -{58,-30,31}, -{58,-30,32}, -{58,-30,33}, -{58,-30,34}, -{58,-30,35}, -{58,-30,36}, -{58,-30,37}, -{58,-30,38}, -{58,-30,39}, -{58,-30,40}, -{58,-30,41}, -{58,-30,42}, -{58,-30,43}, -{58,-30,44}, -{58,-30,45}, -{58,-30,46}, -{58,-30,47}, -{58,-30,48}, -{58,-30,49}, -{58,-30,50}, -{58,-30,51}, -{58,-30,52}, -{58,-30,53}, -{58,-30,54}, -{58,-30,55}, -{58,-30,56}, -{58,-30,57}, -{58,-30,58}, -{58,-30,59}, -{58,-30,60}, -{58,-30,61}, -{58,-29,-16}, -{58,-29,-15}, -{58,-29,-14}, -{58,-29,-13}, -{58,-29,-12}, -{58,-29,-11}, -{58,-29,-10}, -{58,-29,-9}, -{58,-29,-8}, -{58,-29,-7}, -{58,-29,-6}, -{58,-29,-5}, -{58,-29,-4}, -{58,-29,-3}, -{58,-29,-2}, -{58,-29,-1}, -{58,-29,0}, -{58,-29,1}, -{58,-29,2}, -{58,-29,3}, -{58,-29,4}, -{58,-29,5}, -{58,-29,6}, -{58,-29,7}, -{58,-29,8}, -{58,-29,9}, -{58,-29,10}, -{58,-29,11}, -{58,-29,12}, -{58,-29,13}, -{58,-29,14}, -{58,-29,15}, -{58,-29,16}, -{58,-29,17}, -{58,-29,18}, -{58,-29,19}, -{58,-29,20}, -{58,-29,21}, -{58,-29,22}, -{58,-29,23}, -{58,-29,24}, -{58,-29,25}, -{58,-29,26}, -{58,-29,27}, -{58,-29,28}, -{58,-29,29}, -{58,-29,30}, -{58,-29,31}, -{58,-29,32}, -{58,-29,33}, -{58,-29,34}, -{58,-29,35}, -{58,-29,36}, -{58,-29,37}, -{58,-29,38}, -{58,-29,39}, -{58,-29,40}, -{58,-29,41}, -{58,-29,42}, -{58,-29,43}, -{58,-29,44}, -{58,-29,45}, -{58,-29,46}, -{58,-29,47}, -{58,-29,48}, -{58,-29,49}, -{58,-29,50}, -{58,-29,51}, -{58,-29,52}, -{58,-29,53}, -{58,-29,54}, -{58,-29,55}, -{58,-29,56}, -{58,-29,57}, -{58,-29,58}, -{58,-29,59}, -{58,-29,60}, -{58,-29,61}, -{58,-28,-17}, -{58,-28,-16}, -{58,-28,-15}, -{58,-28,-14}, -{58,-28,-13}, -{58,-28,-12}, -{58,-28,-11}, -{58,-28,-10}, -{58,-28,-9}, -{58,-28,-8}, -{58,-28,-7}, -{58,-28,-6}, -{58,-28,-5}, -{58,-28,-4}, -{58,-28,-3}, -{58,-28,-2}, -{58,-28,-1}, -{58,-28,0}, -{58,-28,1}, -{58,-28,2}, -{58,-28,3}, -{58,-28,4}, -{58,-28,5}, -{58,-28,6}, -{58,-28,7}, -{58,-28,8}, -{58,-28,9}, -{58,-28,10}, -{58,-28,11}, -{58,-28,12}, -{58,-28,13}, -{58,-28,14}, -{58,-28,15}, -{58,-28,16}, -{58,-28,17}, -{58,-28,18}, -{58,-28,19}, -{58,-28,20}, -{58,-28,21}, -{58,-28,22}, -{58,-28,23}, -{58,-28,24}, -{58,-28,25}, -{58,-28,26}, -{58,-28,27}, -{58,-28,28}, -{58,-28,29}, -{58,-28,30}, -{58,-28,31}, -{58,-28,32}, -{58,-28,33}, -{58,-28,34}, -{58,-28,35}, -{58,-28,36}, -{58,-28,37}, -{58,-28,38}, -{58,-28,39}, -{58,-28,40}, -{58,-28,41}, -{58,-28,42}, -{58,-28,43}, -{58,-28,44}, -{58,-28,45}, -{58,-28,46}, -{58,-28,47}, -{58,-28,48}, -{58,-28,49}, -{58,-28,50}, -{58,-28,51}, -{58,-28,52}, -{58,-28,53}, -{58,-28,54}, -{58,-28,55}, -{58,-28,56}, -{58,-28,57}, -{58,-28,58}, -{58,-28,59}, -{58,-28,60}, -{58,-28,61}, -{58,-27,-19}, -{58,-27,-18}, -{58,-27,-17}, -{58,-27,-16}, -{58,-27,-15}, -{58,-27,-14}, -{58,-27,-13}, -{58,-27,-12}, -{58,-27,-11}, -{58,-27,-10}, -{58,-27,-9}, -{58,-27,-8}, -{58,-27,-7}, -{58,-27,-6}, -{58,-27,-5}, -{58,-27,-4}, -{58,-27,-3}, -{58,-27,-2}, -{58,-27,-1}, -{58,-27,0}, -{58,-27,1}, -{58,-27,2}, -{58,-27,3}, -{58,-27,4}, -{58,-27,5}, -{58,-27,6}, -{58,-27,7}, -{58,-27,8}, -{58,-27,9}, -{58,-27,10}, -{58,-27,11}, -{58,-27,12}, -{58,-27,13}, -{58,-27,14}, -{58,-27,15}, -{58,-27,16}, -{58,-27,17}, -{58,-27,18}, -{58,-27,19}, -{58,-27,20}, -{58,-27,21}, -{58,-27,22}, -{58,-27,23}, -{58,-27,24}, -{58,-27,25}, -{58,-27,26}, -{58,-27,27}, -{58,-27,28}, -{58,-27,29}, -{58,-27,30}, -{58,-27,31}, -{58,-27,32}, -{58,-27,33}, -{58,-27,34}, -{58,-27,35}, -{58,-27,36}, -{58,-27,37}, -{58,-27,38}, -{58,-27,39}, -{58,-27,40}, -{58,-27,41}, -{58,-27,42}, -{58,-27,43}, -{58,-27,44}, -{58,-27,45}, -{58,-27,46}, -{58,-27,47}, -{58,-27,48}, -{58,-27,49}, -{58,-27,50}, -{58,-27,51}, -{58,-27,52}, -{58,-27,53}, -{58,-27,54}, -{58,-27,55}, -{58,-27,56}, -{58,-27,57}, -{58,-27,58}, -{58,-27,59}, -{58,-27,60}, -{58,-27,61}, -{58,-26,-20}, -{58,-26,-19}, -{58,-26,-18}, -{58,-26,-17}, -{58,-26,-16}, -{58,-26,-15}, -{58,-26,-14}, -{58,-26,-13}, -{58,-26,-12}, -{58,-26,-11}, -{58,-26,-10}, -{58,-26,-9}, -{58,-26,-8}, -{58,-26,-7}, -{58,-26,-6}, -{58,-26,-5}, -{58,-26,-4}, -{58,-26,-3}, -{58,-26,-2}, -{58,-26,-1}, -{58,-26,0}, -{58,-26,1}, -{58,-26,2}, -{58,-26,3}, -{58,-26,4}, -{58,-26,5}, -{58,-26,6}, -{58,-26,7}, -{58,-26,8}, -{58,-26,9}, -{58,-26,10}, -{58,-26,11}, -{58,-26,12}, -{58,-26,13}, -{58,-26,14}, -{58,-26,15}, -{58,-26,16}, -{58,-26,17}, -{58,-26,18}, -{58,-26,19}, -{58,-26,20}, -{58,-26,21}, -{58,-26,22}, -{58,-26,23}, -{58,-26,24}, -{58,-26,25}, -{58,-26,26}, -{58,-26,27}, -{58,-26,28}, -{58,-26,29}, -{58,-26,30}, -{58,-26,31}, -{58,-26,32}, -{58,-26,33}, -{58,-26,34}, -{58,-26,35}, -{58,-26,36}, -{58,-26,37}, -{58,-26,38}, -{58,-26,39}, -{58,-26,40}, -{58,-26,41}, -{58,-26,42}, -{58,-26,43}, -{58,-26,44}, -{58,-26,45}, -{58,-26,46}, -{58,-26,47}, -{58,-26,48}, -{58,-26,49}, -{58,-26,50}, -{58,-26,51}, -{58,-26,52}, -{58,-26,53}, -{58,-26,54}, -{58,-26,55}, -{58,-26,56}, -{58,-26,57}, -{58,-26,58}, -{58,-26,59}, -{58,-26,60}, -{58,-26,61}, -{58,-25,-22}, -{58,-25,-21}, -{58,-25,-20}, -{58,-25,-19}, -{58,-25,-18}, -{58,-25,-17}, -{58,-25,-16}, -{58,-25,-15}, -{58,-25,-14}, -{58,-25,-13}, -{58,-25,-12}, -{58,-25,-11}, -{58,-25,-10}, -{58,-25,-9}, -{58,-25,-8}, -{58,-25,-7}, -{58,-25,-6}, -{58,-25,-5}, -{58,-25,-4}, -{58,-25,-3}, -{58,-25,-2}, -{58,-25,-1}, -{58,-25,0}, -{58,-25,1}, -{58,-25,2}, -{58,-25,3}, -{58,-25,4}, -{58,-25,5}, -{58,-25,6}, -{58,-25,7}, -{58,-25,8}, -{58,-25,9}, -{58,-25,10}, -{58,-25,11}, -{58,-25,12}, -{58,-25,13}, -{58,-25,14}, -{58,-25,15}, -{58,-25,16}, -{58,-25,17}, -{58,-25,18}, -{58,-25,19}, -{58,-25,20}, -{58,-25,21}, -{58,-25,22}, -{58,-25,23}, -{58,-25,24}, -{58,-25,25}, -{58,-25,26}, -{58,-25,27}, -{58,-25,28}, -{58,-25,29}, -{58,-25,30}, -{58,-25,31}, -{58,-25,32}, -{58,-25,33}, -{58,-25,34}, -{58,-25,35}, -{58,-25,36}, -{58,-25,37}, -{58,-25,38}, -{58,-25,39}, -{58,-25,40}, -{58,-25,41}, -{58,-25,42}, -{58,-25,43}, -{58,-25,44}, -{58,-25,45}, -{58,-25,46}, -{58,-25,47}, -{58,-25,48}, -{58,-25,49}, -{58,-25,50}, -{58,-25,51}, -{58,-25,52}, -{58,-25,53}, -{58,-25,54}, -{58,-25,55}, -{58,-25,56}, -{58,-25,57}, -{58,-25,58}, -{58,-25,59}, -{58,-25,60}, -{58,-25,61}, -{58,-24,-23}, -{58,-24,-22}, -{58,-24,-21}, -{58,-24,-20}, -{58,-24,-19}, -{58,-24,-18}, -{58,-24,-17}, -{58,-24,-16}, -{58,-24,-15}, -{58,-24,-14}, -{58,-24,-13}, -{58,-24,-12}, -{58,-24,-11}, -{58,-24,-10}, -{58,-24,-9}, -{58,-24,-8}, -{58,-24,-7}, -{58,-24,-6}, -{58,-24,-5}, -{58,-24,-4}, -{58,-24,-3}, -{58,-24,-2}, -{58,-24,-1}, -{58,-24,0}, -{58,-24,1}, -{58,-24,2}, -{58,-24,3}, -{58,-24,4}, -{58,-24,5}, -{58,-24,6}, -{58,-24,7}, -{58,-24,8}, -{58,-24,9}, -{58,-24,10}, -{58,-24,11}, -{58,-24,12}, -{58,-24,13}, -{58,-24,14}, -{58,-24,15}, -{58,-24,16}, -{58,-24,17}, -{58,-24,18}, -{58,-24,19}, -{58,-24,20}, -{58,-24,21}, -{58,-24,22}, -{58,-24,23}, -{58,-24,24}, -{58,-24,25}, -{58,-24,26}, -{58,-24,27}, -{58,-24,28}, -{58,-24,29}, -{58,-24,30}, -{58,-24,31}, -{58,-24,32}, -{58,-24,33}, -{58,-24,34}, -{58,-24,35}, -{58,-24,36}, -{58,-24,37}, -{58,-24,38}, -{58,-24,39}, -{58,-24,40}, -{58,-24,41}, -{58,-24,42}, -{58,-24,43}, -{58,-24,44}, -{58,-24,45}, -{58,-24,46}, -{58,-24,47}, -{58,-24,48}, -{58,-24,49}, -{58,-24,50}, -{58,-24,51}, -{58,-24,52}, -{58,-24,53}, -{58,-24,54}, -{58,-24,55}, -{58,-24,56}, -{58,-24,57}, -{58,-24,58}, -{58,-24,59}, -{58,-24,60}, -{58,-24,61}, -{58,-23,-24}, -{58,-23,-23}, -{58,-23,-22}, -{58,-23,-21}, -{58,-23,-20}, -{58,-23,-19}, -{58,-23,-18}, -{58,-23,-17}, -{58,-23,-16}, -{58,-23,-15}, -{58,-23,-14}, -{58,-23,-13}, -{58,-23,-12}, -{58,-23,-11}, -{58,-23,-10}, -{58,-23,-9}, -{58,-23,-8}, -{58,-23,-7}, -{58,-23,-6}, -{58,-23,-5}, -{58,-23,-4}, -{58,-23,-3}, -{58,-23,-2}, -{58,-23,-1}, -{58,-23,0}, -{58,-23,1}, -{58,-23,2}, -{58,-23,3}, -{58,-23,4}, -{58,-23,5}, -{58,-23,6}, -{58,-23,7}, -{58,-23,8}, -{58,-23,9}, -{58,-23,10}, -{58,-23,11}, -{58,-23,12}, -{58,-23,13}, -{58,-23,14}, -{58,-23,15}, -{58,-23,16}, -{58,-23,17}, -{58,-23,18}, -{58,-23,19}, -{58,-23,20}, -{58,-23,21}, -{58,-23,22}, -{58,-23,23}, -{58,-23,24}, -{58,-23,25}, -{58,-23,26}, -{58,-23,27}, -{58,-23,28}, -{58,-23,29}, -{58,-23,30}, -{58,-23,31}, -{58,-23,32}, -{58,-23,33}, -{58,-23,34}, -{58,-23,35}, -{58,-23,36}, -{58,-23,37}, -{58,-23,38}, -{58,-23,39}, -{58,-23,40}, -{58,-23,41}, -{58,-23,42}, -{58,-23,43}, -{58,-23,44}, -{58,-23,45}, -{58,-23,46}, -{58,-23,47}, -{58,-23,48}, -{58,-23,49}, -{58,-23,50}, -{58,-23,51}, -{58,-23,52}, -{58,-23,53}, -{58,-23,54}, -{58,-23,55}, -{58,-23,56}, -{58,-23,57}, -{58,-23,58}, -{58,-23,59}, -{58,-23,60}, -{58,-23,61}, -{58,-22,-26}, -{58,-22,-25}, -{58,-22,-24}, -{58,-22,-23}, -{58,-22,-22}, -{58,-22,-21}, -{58,-22,-20}, -{58,-22,-19}, -{58,-22,-18}, -{58,-22,-17}, -{58,-22,-16}, -{58,-22,-15}, -{58,-22,-14}, -{58,-22,-13}, -{58,-22,-12}, -{58,-22,-11}, -{58,-22,-10}, -{58,-22,-9}, -{58,-22,-8}, -{58,-22,-7}, -{58,-22,-6}, -{58,-22,-5}, -{58,-22,-4}, -{58,-22,-3}, -{58,-22,-2}, -{58,-22,-1}, -{58,-22,0}, -{58,-22,1}, -{58,-22,2}, -{58,-22,3}, -{58,-22,4}, -{58,-22,5}, -{58,-22,6}, -{58,-22,7}, -{58,-22,8}, -{58,-22,9}, -{58,-22,10}, -{58,-22,11}, -{58,-22,12}, -{58,-22,13}, -{58,-22,14}, -{58,-22,15}, -{58,-22,16}, -{58,-22,17}, -{58,-22,18}, -{58,-22,19}, -{58,-22,20}, -{58,-22,21}, -{58,-22,22}, -{58,-22,23}, -{58,-22,24}, -{58,-22,25}, -{58,-22,26}, -{58,-22,27}, -{58,-22,28}, -{58,-22,29}, -{58,-22,30}, -{58,-22,31}, -{58,-22,32}, -{58,-22,33}, -{58,-22,34}, -{58,-22,35}, -{58,-22,36}, -{58,-22,37}, -{58,-22,38}, -{58,-22,39}, -{58,-22,40}, -{58,-22,41}, -{58,-22,42}, -{58,-22,43}, -{58,-22,44}, -{58,-22,45}, -{58,-22,46}, -{58,-22,47}, -{58,-22,48}, -{58,-22,49}, -{58,-22,50}, -{58,-22,51}, -{58,-22,52}, -{58,-22,53}, -{58,-22,54}, -{58,-22,55}, -{58,-22,56}, -{58,-22,57}, -{58,-22,58}, -{58,-22,59}, -{58,-22,60}, -{58,-22,61}, -{58,-21,-27}, -{58,-21,-26}, -{58,-21,-25}, -{58,-21,-24}, -{58,-21,-23}, -{58,-21,-22}, -{58,-21,-21}, -{58,-21,-20}, -{58,-21,-19}, -{58,-21,-18}, -{58,-21,-17}, -{58,-21,-16}, -{58,-21,-15}, -{58,-21,-14}, -{58,-21,-13}, -{58,-21,-12}, -{58,-21,-11}, -{58,-21,-10}, -{58,-21,-9}, -{58,-21,-8}, -{58,-21,-7}, -{58,-21,-6}, -{58,-21,-5}, -{58,-21,-4}, -{58,-21,-3}, -{58,-21,-2}, -{58,-21,-1}, -{58,-21,0}, -{58,-21,1}, -{58,-21,2}, -{58,-21,3}, -{58,-21,4}, -{58,-21,5}, -{58,-21,6}, -{58,-21,7}, -{58,-21,8}, -{58,-21,9}, -{58,-21,10}, -{58,-21,11}, -{58,-21,12}, -{58,-21,13}, -{58,-21,14}, -{58,-21,15}, -{58,-21,16}, -{58,-21,17}, -{58,-21,18}, -{58,-21,19}, -{58,-21,20}, -{58,-21,21}, -{58,-21,22}, -{58,-21,23}, -{58,-21,24}, -{58,-21,25}, -{58,-21,26}, -{58,-21,27}, -{58,-21,28}, -{58,-21,29}, -{58,-21,30}, -{58,-21,31}, -{58,-21,32}, -{58,-21,33}, -{58,-21,34}, -{58,-21,35}, -{58,-21,36}, -{58,-21,37}, -{58,-21,38}, -{58,-21,39}, -{58,-21,40}, -{58,-21,41}, -{58,-21,42}, -{58,-21,43}, -{58,-21,44}, -{58,-21,45}, -{58,-21,46}, -{58,-21,47}, -{58,-21,48}, -{58,-21,49}, -{58,-21,50}, -{58,-21,51}, -{58,-21,52}, -{58,-21,53}, -{58,-21,54}, -{58,-21,55}, -{58,-21,56}, -{58,-21,57}, -{58,-21,58}, -{58,-21,59}, -{58,-21,60}, -{58,-21,61}, -{58,-20,-28}, -{58,-20,-27}, -{58,-20,-26}, -{58,-20,-25}, -{58,-20,-24}, -{58,-20,-23}, -{58,-20,-22}, -{58,-20,-21}, -{58,-20,-20}, -{58,-20,-19}, -{58,-20,-18}, -{58,-20,-17}, -{58,-20,-16}, -{58,-20,-15}, -{58,-20,-14}, -{58,-20,-13}, -{58,-20,-12}, -{58,-20,-11}, -{58,-20,-10}, -{58,-20,-9}, -{58,-20,-8}, -{58,-20,-7}, -{58,-20,-6}, -{58,-20,-5}, -{58,-20,-4}, -{58,-20,-3}, -{58,-20,-2}, -{58,-20,-1}, -{58,-20,0}, -{58,-20,1}, -{58,-20,2}, -{58,-20,3}, -{58,-20,4}, -{58,-20,5}, -{58,-20,6}, -{58,-20,7}, -{58,-20,8}, -{58,-20,9}, -{58,-20,10}, -{58,-20,11}, -{58,-20,12}, -{58,-20,13}, -{58,-20,14}, -{58,-20,15}, -{58,-20,16}, -{58,-20,17}, -{58,-20,18}, -{58,-20,19}, -{58,-20,20}, -{58,-20,21}, -{58,-20,22}, -{58,-20,23}, -{58,-20,24}, -{58,-20,25}, -{58,-20,26}, -{58,-20,27}, -{58,-20,28}, -{58,-20,29}, -{58,-20,30}, -{58,-20,31}, -{58,-20,32}, -{58,-20,33}, -{58,-20,34}, -{58,-20,35}, -{58,-20,36}, -{58,-20,37}, -{58,-20,38}, -{58,-20,39}, -{58,-20,40}, -{58,-20,41}, -{58,-20,42}, -{58,-20,43}, -{58,-20,44}, -{58,-20,45}, -{58,-20,46}, -{58,-20,47}, -{58,-20,48}, -{58,-20,49}, -{58,-20,50}, -{58,-20,51}, -{58,-20,52}, -{58,-20,53}, -{58,-20,54}, -{58,-20,55}, -{58,-20,56}, -{58,-20,57}, -{58,-20,58}, -{58,-20,59}, -{58,-20,60}, -{58,-20,61}, -{58,-19,-30}, -{58,-19,-29}, -{58,-19,-28}, -{58,-19,-27}, -{58,-19,-26}, -{58,-19,-25}, -{58,-19,-24}, -{58,-19,-23}, -{58,-19,-22}, -{58,-19,-21}, -{58,-19,-20}, -{58,-19,-19}, -{58,-19,-18}, -{58,-19,-17}, -{58,-19,-16}, -{58,-19,-15}, -{58,-19,-14}, -{58,-19,-13}, -{58,-19,-12}, -{58,-19,-11}, -{58,-19,-10}, -{58,-19,-9}, -{58,-19,-8}, -{58,-19,-7}, -{58,-19,-6}, -{58,-19,-5}, -{58,-19,-4}, -{58,-19,-3}, -{58,-19,-2}, -{58,-19,-1}, -{58,-19,0}, -{58,-19,1}, -{58,-19,2}, -{58,-19,3}, -{58,-19,4}, -{58,-19,5}, -{58,-19,6}, -{58,-19,7}, -{58,-19,8}, -{58,-19,9}, -{58,-19,10}, -{58,-19,11}, -{58,-19,12}, -{58,-19,13}, -{58,-19,14}, -{58,-19,15}, -{58,-19,16}, -{58,-19,17}, -{58,-19,18}, -{58,-19,19}, -{58,-19,20}, -{58,-19,21}, -{58,-19,22}, -{58,-19,23}, -{58,-19,24}, -{58,-19,25}, -{58,-19,26}, -{58,-19,27}, -{58,-19,28}, -{58,-19,29}, -{58,-19,30}, -{58,-19,31}, -{58,-19,32}, -{58,-19,33}, -{58,-19,34}, -{58,-19,35}, -{58,-19,36}, -{58,-19,37}, -{58,-19,38}, -{58,-19,39}, -{58,-19,40}, -{58,-19,41}, -{58,-19,42}, -{58,-19,43}, -{58,-19,44}, -{58,-19,45}, -{58,-19,46}, -{58,-19,47}, -{58,-19,48}, -{58,-19,49}, -{58,-19,50}, -{58,-19,51}, -{58,-19,52}, -{58,-19,53}, -{58,-19,54}, -{58,-19,55}, -{58,-19,56}, -{58,-19,57}, -{58,-19,58}, -{58,-19,59}, -{58,-19,60}, -{58,-19,61}, -{58,-18,-31}, -{58,-18,-30}, -{58,-18,-29}, -{58,-18,-28}, -{58,-18,-27}, -{58,-18,-26}, -{58,-18,-25}, -{58,-18,-24}, -{58,-18,-23}, -{58,-18,-22}, -{58,-18,-21}, -{58,-18,-20}, -{58,-18,-19}, -{58,-18,-18}, -{58,-18,-17}, -{58,-18,-16}, -{58,-18,-15}, -{58,-18,-14}, -{58,-18,-13}, -{58,-18,-12}, -{58,-18,-11}, -{58,-18,-10}, -{58,-18,-9}, -{58,-18,-8}, -{58,-18,-7}, -{58,-18,-6}, -{58,-18,-5}, -{58,-18,-4}, -{58,-18,-3}, -{58,-18,-2}, -{58,-18,-1}, -{58,-18,0}, -{58,-18,1}, -{58,-18,2}, -{58,-18,3}, -{58,-18,4}, -{58,-18,5}, -{58,-18,6}, -{58,-18,7}, -{58,-18,8}, -{58,-18,9}, -{58,-18,10}, -{58,-18,11}, -{58,-18,12}, -{58,-18,13}, -{58,-18,14}, -{58,-18,15}, -{58,-18,16}, -{58,-18,17}, -{58,-18,18}, -{58,-18,19}, -{58,-18,20}, -{58,-18,21}, -{58,-18,22}, -{58,-18,23}, -{58,-18,24}, -{58,-18,25}, -{58,-18,26}, -{58,-18,27}, -{58,-18,28}, -{58,-18,29}, -{58,-18,30}, -{58,-18,31}, -{58,-18,32}, -{58,-18,33}, -{58,-18,34}, -{58,-18,35}, -{58,-18,36}, -{58,-18,37}, -{58,-18,38}, -{58,-18,39}, -{58,-18,40}, -{58,-18,41}, -{58,-18,42}, -{58,-18,43}, -{58,-18,44}, -{58,-18,45}, -{58,-18,46}, -{58,-18,47}, -{58,-18,48}, -{58,-18,49}, -{58,-18,50}, -{58,-18,51}, -{58,-18,52}, -{58,-18,53}, -{58,-18,54}, -{58,-18,55}, -{58,-18,56}, -{58,-18,57}, -{58,-18,58}, -{58,-18,59}, -{58,-18,60}, -{58,-18,61}, -{58,-17,-32}, -{58,-17,-31}, -{58,-17,-30}, -{58,-17,-29}, -{58,-17,-28}, -{58,-17,-27}, -{58,-17,-26}, -{58,-17,-25}, -{58,-17,-24}, -{58,-17,-23}, -{58,-17,-22}, -{58,-17,-21}, -{58,-17,-20}, -{58,-17,-19}, -{58,-17,-18}, -{58,-17,-17}, -{58,-17,-16}, -{58,-17,-15}, -{58,-17,-14}, -{58,-17,-13}, -{58,-17,-12}, -{58,-17,-11}, -{58,-17,-10}, -{58,-17,-9}, -{58,-17,-8}, -{58,-17,-7}, -{58,-17,-6}, -{58,-17,-5}, -{58,-17,-4}, -{58,-17,-3}, -{58,-17,-2}, -{58,-17,-1}, -{58,-17,0}, -{58,-17,1}, -{58,-17,2}, -{58,-17,3}, -{58,-17,4}, -{58,-17,5}, -{58,-17,6}, -{58,-17,7}, -{58,-17,8}, -{58,-17,9}, -{58,-17,10}, -{58,-17,11}, -{58,-17,12}, -{58,-17,13}, -{58,-17,14}, -{58,-17,15}, -{58,-17,16}, -{58,-17,17}, -{58,-17,18}, -{58,-17,19}, -{58,-17,20}, -{58,-17,21}, -{58,-17,22}, -{58,-17,23}, -{58,-17,24}, -{58,-17,25}, -{58,-17,26}, -{58,-17,27}, -{58,-17,28}, -{58,-17,29}, -{58,-17,30}, -{58,-17,31}, -{58,-17,32}, -{58,-17,33}, -{58,-17,34}, -{58,-17,35}, -{58,-17,36}, -{58,-17,37}, -{58,-17,38}, -{58,-17,39}, -{58,-17,40}, -{58,-17,41}, -{58,-17,42}, -{58,-17,43}, -{58,-17,44}, -{58,-17,45}, -{58,-17,46}, -{58,-17,47}, -{58,-17,48}, -{58,-17,49}, -{58,-17,50}, -{58,-17,51}, -{58,-17,52}, -{58,-17,53}, -{58,-17,54}, -{58,-17,55}, -{58,-17,56}, -{58,-17,57}, -{58,-17,58}, -{58,-17,59}, -{58,-17,60}, -{58,-17,61}, -{58,-16,-34}, -{58,-16,-33}, -{58,-16,-32}, -{58,-16,-31}, -{58,-16,-30}, -{58,-16,-29}, -{58,-16,-28}, -{58,-16,-27}, -{58,-16,-26}, -{58,-16,-25}, -{58,-16,-24}, -{58,-16,-23}, -{58,-16,-22}, -{58,-16,-21}, -{58,-16,-20}, -{58,-16,-19}, -{58,-16,-18}, -{58,-16,-17}, -{58,-16,-16}, -{58,-16,-15}, -{58,-16,-14}, -{58,-16,-13}, -{58,-16,-12}, -{58,-16,-11}, -{58,-16,-10}, -{58,-16,-9}, -{58,-16,-8}, -{58,-16,-7}, -{58,-16,-6}, -{58,-16,-5}, -{58,-16,-4}, -{58,-16,-3}, -{58,-16,-2}, -{58,-16,-1}, -{58,-16,0}, -{58,-16,1}, -{58,-16,2}, -{58,-16,3}, -{58,-16,4}, -{58,-16,5}, -{58,-16,6}, -{58,-16,7}, -{58,-16,8}, -{58,-16,9}, -{58,-16,10}, -{58,-16,11}, -{58,-16,12}, -{58,-16,13}, -{58,-16,14}, -{58,-16,15}, -{58,-16,16}, -{58,-16,17}, -{58,-16,18}, -{58,-16,19}, -{58,-16,20}, -{58,-16,21}, -{58,-16,22}, -{58,-16,23}, -{58,-16,24}, -{58,-16,25}, -{58,-16,26}, -{58,-16,27}, -{58,-16,28}, -{58,-16,29}, -{58,-16,30}, -{58,-16,31}, -{58,-16,32}, -{58,-16,33}, -{58,-16,34}, -{58,-16,35}, -{58,-16,36}, -{58,-16,37}, -{58,-16,38}, -{58,-16,39}, -{58,-16,40}, -{58,-16,41}, -{58,-16,42}, -{58,-16,43}, -{58,-16,44}, -{58,-16,45}, -{58,-16,46}, -{58,-16,47}, -{58,-16,48}, -{58,-16,49}, -{58,-16,50}, -{58,-16,51}, -{58,-16,52}, -{58,-16,53}, -{58,-16,54}, -{58,-16,55}, -{58,-16,56}, -{58,-16,57}, -{58,-16,58}, -{58,-16,59}, -{58,-16,60}, -{58,-16,61}, -{58,-15,-35}, -{58,-15,-34}, -{58,-15,-33}, -{58,-15,-32}, -{58,-15,-31}, -{58,-15,-30}, -{58,-15,-29}, -{58,-15,-28}, -{58,-15,-27}, -{58,-15,-26}, -{58,-15,-25}, -{58,-15,-24}, -{58,-15,-23}, -{58,-15,-22}, -{58,-15,-21}, -{58,-15,-20}, -{58,-15,-19}, -{58,-15,-18}, -{58,-15,-17}, -{58,-15,-16}, -{58,-15,-15}, -{58,-15,-14}, -{58,-15,-13}, -{58,-15,-12}, -{58,-15,-11}, -{58,-15,-10}, -{58,-15,-9}, -{58,-15,-8}, -{58,-15,-7}, -{58,-15,-6}, -{58,-15,-5}, -{58,-15,-4}, -{58,-15,-3}, -{58,-15,-2}, -{58,-15,-1}, -{58,-15,0}, -{58,-15,1}, -{58,-15,2}, -{58,-15,3}, -{58,-15,4}, -{58,-15,5}, -{58,-15,6}, -{58,-15,7}, -{58,-15,8}, -{58,-15,9}, -{58,-15,10}, -{58,-15,11}, -{58,-15,12}, -{58,-15,13}, -{58,-15,14}, -{58,-15,15}, -{58,-15,16}, -{58,-15,17}, -{58,-15,18}, -{58,-15,19}, -{58,-15,20}, -{58,-15,21}, -{58,-15,22}, -{58,-15,23}, -{58,-15,24}, -{58,-15,25}, -{58,-15,26}, -{58,-15,27}, -{58,-15,28}, -{58,-15,29}, -{58,-15,30}, -{58,-15,31}, -{58,-15,32}, -{58,-15,33}, -{58,-15,34}, -{58,-15,35}, -{58,-15,36}, -{58,-15,37}, -{58,-15,38}, -{58,-15,39}, -{58,-15,40}, -{58,-15,41}, -{58,-15,42}, -{58,-15,43}, -{58,-15,44}, -{58,-15,45}, -{58,-15,46}, -{58,-15,47}, -{58,-15,48}, -{58,-15,49}, -{58,-15,50}, -{58,-15,51}, -{58,-15,52}, -{58,-15,53}, -{58,-15,54}, -{58,-15,55}, -{58,-15,56}, -{58,-15,57}, -{58,-15,58}, -{58,-15,59}, -{58,-15,60}, -{58,-15,61}, -{58,-14,-36}, -{58,-14,-35}, -{58,-14,-34}, -{58,-14,-33}, -{58,-14,-32}, -{58,-14,-31}, -{58,-14,-30}, -{58,-14,-29}, -{58,-14,-28}, -{58,-14,-27}, -{58,-14,-26}, -{58,-14,-25}, -{58,-14,-24}, -{58,-14,-23}, -{58,-14,-22}, -{58,-14,-21}, -{58,-14,-20}, -{58,-14,-19}, -{58,-14,-18}, -{58,-14,-17}, -{58,-14,-16}, -{58,-14,-15}, -{58,-14,-14}, -{58,-14,-13}, -{58,-14,-12}, -{58,-14,-11}, -{58,-14,-10}, -{58,-14,-9}, -{58,-14,-8}, -{58,-14,-7}, -{58,-14,-6}, -{58,-14,-5}, -{58,-14,-4}, -{58,-14,-3}, -{58,-14,-2}, -{58,-14,-1}, -{58,-14,0}, -{58,-14,1}, -{58,-14,2}, -{58,-14,3}, -{58,-14,4}, -{58,-14,5}, -{58,-14,6}, -{58,-14,7}, -{58,-14,8}, -{58,-14,9}, -{58,-14,10}, -{58,-14,11}, -{58,-14,12}, -{58,-14,13}, -{58,-14,14}, -{58,-14,15}, -{58,-14,16}, -{58,-14,17}, -{58,-14,18}, -{58,-14,19}, -{58,-14,20}, -{58,-14,21}, -{58,-14,22}, -{58,-14,23}, -{58,-14,24}, -{58,-14,25}, -{58,-14,26}, -{58,-14,27}, -{58,-14,28}, -{58,-14,29}, -{58,-14,30}, -{58,-14,31}, -{58,-14,32}, -{58,-14,33}, -{58,-14,34}, -{58,-14,35}, -{58,-14,36}, -{58,-14,37}, -{58,-14,38}, -{58,-14,39}, -{58,-14,40}, -{58,-14,41}, -{58,-14,42}, -{58,-14,43}, -{58,-14,44}, -{58,-14,45}, -{58,-14,46}, -{58,-14,47}, -{58,-14,48}, -{58,-14,49}, -{58,-14,50}, -{58,-14,51}, -{58,-14,52}, -{58,-14,53}, -{58,-14,54}, -{58,-14,55}, -{58,-14,56}, -{58,-14,57}, -{58,-14,58}, -{58,-14,59}, -{58,-14,60}, -{58,-14,61}, -{58,-13,-37}, -{58,-13,-36}, -{58,-13,-35}, -{58,-13,-34}, -{58,-13,-33}, -{58,-13,-32}, -{58,-13,-31}, -{58,-13,-30}, -{58,-13,-29}, -{58,-13,-28}, -{58,-13,-27}, -{58,-13,-26}, -{58,-13,-25}, -{58,-13,-24}, -{58,-13,-23}, -{58,-13,-22}, -{58,-13,-21}, -{58,-13,-20}, -{58,-13,-19}, -{58,-13,-18}, -{58,-13,-17}, -{58,-13,-16}, -{58,-13,-15}, -{58,-13,-14}, -{58,-13,-13}, -{58,-13,-12}, -{58,-13,-11}, -{58,-13,-10}, -{58,-13,-9}, -{58,-13,-8}, -{58,-13,-7}, -{58,-13,-6}, -{58,-13,-5}, -{58,-13,-4}, -{58,-13,-3}, -{58,-13,-2}, -{58,-13,-1}, -{58,-13,0}, -{58,-13,1}, -{58,-13,2}, -{58,-13,3}, -{58,-13,4}, -{58,-13,5}, -{58,-13,6}, -{58,-13,7}, -{58,-13,8}, -{58,-13,9}, -{58,-13,10}, -{58,-13,11}, -{58,-13,12}, -{58,-13,13}, -{58,-13,14}, -{58,-13,15}, -{58,-13,16}, -{58,-13,17}, -{58,-13,18}, -{58,-13,19}, -{58,-13,20}, -{58,-13,21}, -{58,-13,22}, -{58,-13,23}, -{58,-13,24}, -{58,-13,25}, -{58,-13,26}, -{58,-13,27}, -{58,-13,28}, -{58,-13,29}, -{58,-13,30}, -{58,-13,31}, -{58,-13,32}, -{58,-13,33}, -{58,-13,34}, -{58,-13,35}, -{58,-13,36}, -{58,-13,37}, -{58,-13,38}, -{58,-13,39}, -{58,-13,40}, -{58,-13,41}, -{58,-13,42}, -{58,-13,43}, -{58,-13,44}, -{58,-13,45}, -{58,-13,46}, -{58,-13,47}, -{58,-13,48}, -{58,-13,49}, -{58,-13,50}, -{58,-13,51}, -{58,-13,52}, -{58,-13,53}, -{58,-13,54}, -{58,-13,55}, -{58,-13,56}, -{58,-13,57}, -{58,-13,58}, -{58,-13,59}, -{58,-13,60}, -{58,-13,61}, -{58,-13,62}, -{58,-12,-39}, -{58,-12,-38}, -{58,-12,-37}, -{58,-12,-36}, -{58,-12,-35}, -{58,-12,-34}, -{58,-12,-33}, -{58,-12,-32}, -{58,-12,-31}, -{58,-12,-30}, -{58,-12,-29}, -{58,-12,-28}, -{58,-12,-27}, -{58,-12,-26}, -{58,-12,-25}, -{58,-12,-24}, -{58,-12,-23}, -{58,-12,-22}, -{58,-12,-21}, -{58,-12,-20}, -{58,-12,-19}, -{58,-12,-18}, -{58,-12,-17}, -{58,-12,-16}, -{58,-12,-15}, -{58,-12,-14}, -{58,-12,-13}, -{58,-12,-12}, -{58,-12,-11}, -{58,-12,-10}, -{58,-12,-9}, -{58,-12,-8}, -{58,-12,-7}, -{58,-12,-6}, -{58,-12,-5}, -{58,-12,-4}, -{58,-12,-3}, -{58,-12,-2}, -{58,-12,-1}, -{58,-12,0}, -{58,-12,1}, -{58,-12,2}, -{58,-12,3}, -{58,-12,4}, -{58,-12,5}, -{58,-12,6}, -{58,-12,7}, -{58,-12,8}, -{58,-12,9}, -{58,-12,10}, -{58,-12,11}, -{58,-12,12}, -{58,-12,13}, -{58,-12,14}, -{58,-12,15}, -{58,-12,16}, -{58,-12,17}, -{58,-12,18}, -{58,-12,19}, -{58,-12,20}, -{58,-12,21}, -{58,-12,22}, -{58,-12,23}, -{58,-12,24}, -{58,-12,25}, -{58,-12,26}, -{58,-12,27}, -{58,-12,28}, -{58,-12,29}, -{58,-12,30}, -{58,-12,31}, -{58,-12,32}, -{58,-12,33}, -{58,-12,34}, -{58,-12,35}, -{58,-12,36}, -{58,-12,37}, -{58,-12,38}, -{58,-12,39}, -{58,-12,40}, -{58,-12,41}, -{58,-12,42}, -{58,-12,43}, -{58,-12,44}, -{58,-12,45}, -{58,-12,46}, -{58,-12,47}, -{58,-12,48}, -{58,-12,49}, -{58,-12,50}, -{58,-12,51}, -{58,-12,52}, -{58,-12,53}, -{58,-12,54}, -{58,-12,55}, -{58,-12,56}, -{58,-12,57}, -{58,-12,58}, -{58,-12,59}, -{58,-12,60}, -{58,-12,61}, -{58,-12,62}, -{58,-11,-40}, -{58,-11,-39}, -{58,-11,-38}, -{58,-11,-37}, -{58,-11,-36}, -{58,-11,-35}, -{58,-11,-34}, -{58,-11,-33}, -{58,-11,-32}, -{58,-11,-31}, -{58,-11,-30}, -{58,-11,-29}, -{58,-11,-28}, -{58,-11,-27}, -{58,-11,-26}, -{58,-11,-25}, -{58,-11,-24}, -{58,-11,-23}, -{58,-11,-22}, -{58,-11,-21}, -{58,-11,-20}, -{58,-11,-19}, -{58,-11,-18}, -{58,-11,-17}, -{58,-11,-16}, -{58,-11,-15}, -{58,-11,-14}, -{58,-11,-13}, -{58,-11,-12}, -{58,-11,-11}, -{58,-11,-10}, -{58,-11,-9}, -{58,-11,-8}, -{58,-11,-7}, -{58,-11,-6}, -{58,-11,-5}, -{58,-11,-4}, -{58,-11,-3}, -{58,-11,-2}, -{58,-11,-1}, -{58,-11,0}, -{58,-11,1}, -{58,-11,2}, -{58,-11,3}, -{58,-11,4}, -{58,-11,5}, -{58,-11,6}, -{58,-11,7}, -{58,-11,8}, -{58,-11,9}, -{58,-11,10}, -{58,-11,11}, -{58,-11,12}, -{58,-11,13}, -{58,-11,14}, -{58,-11,15}, -{58,-11,16}, -{58,-11,17}, -{58,-11,18}, -{58,-11,19}, -{58,-11,20}, -{58,-11,21}, -{58,-11,22}, -{58,-11,23}, -{58,-11,24}, -{58,-11,25}, -{58,-11,26}, -{58,-11,27}, -{58,-11,28}, -{58,-11,29}, -{58,-11,30}, -{58,-11,31}, -{58,-11,32}, -{58,-11,33}, -{58,-11,34}, -{58,-11,35}, -{58,-11,36}, -{58,-11,37}, -{58,-11,38}, -{58,-11,39}, -{58,-11,40}, -{58,-11,41}, -{58,-11,42}, -{58,-11,43}, -{58,-11,44}, -{58,-11,45}, -{58,-11,46}, -{58,-11,47}, -{58,-11,48}, -{58,-11,49}, -{58,-11,50}, -{58,-11,51}, -{58,-11,52}, -{58,-11,53}, -{58,-11,54}, -{58,-11,55}, -{58,-11,56}, -{58,-11,57}, -{58,-11,58}, -{58,-11,59}, -{58,-11,60}, -{58,-11,61}, -{58,-11,62}, -{58,-10,-41}, -{58,-10,-40}, -{58,-10,-39}, -{58,-10,-38}, -{58,-10,-37}, -{58,-10,-36}, -{58,-10,-35}, -{58,-10,-34}, -{58,-10,-33}, -{58,-10,-32}, -{58,-10,-31}, -{58,-10,-30}, -{58,-10,-29}, -{58,-10,-28}, -{58,-10,-27}, -{58,-10,-26}, -{58,-10,-25}, -{58,-10,-24}, -{58,-10,-23}, -{58,-10,-22}, -{58,-10,-21}, -{58,-10,-20}, -{58,-10,-19}, -{58,-10,-18}, -{58,-10,-17}, -{58,-10,-16}, -{58,-10,-15}, -{58,-10,-14}, -{58,-10,-13}, -{58,-10,-12}, -{58,-10,-11}, -{58,-10,-10}, -{58,-10,-9}, -{58,-10,-8}, -{58,-10,-7}, -{58,-10,-6}, -{58,-10,-5}, -{58,-10,-4}, -{58,-10,-3}, -{58,-10,-2}, -{58,-10,-1}, -{58,-10,0}, -{58,-10,1}, -{58,-10,2}, -{58,-10,3}, -{58,-10,4}, -{58,-10,5}, -{58,-10,6}, -{58,-10,7}, -{58,-10,8}, -{58,-10,9}, -{58,-10,10}, -{58,-10,11}, -{58,-10,12}, -{58,-10,13}, -{58,-10,14}, -{58,-10,15}, -{58,-10,16}, -{58,-10,17}, -{58,-10,18}, -{58,-10,19}, -{58,-10,20}, -{58,-10,21}, -{58,-10,22}, -{58,-10,23}, -{58,-10,24}, -{58,-10,25}, -{58,-10,26}, -{58,-10,27}, -{58,-10,28}, -{58,-10,29}, -{58,-10,30}, -{58,-10,31}, -{58,-10,32}, -{58,-10,33}, -{58,-10,34}, -{58,-10,35}, -{58,-10,36}, -{58,-10,37}, -{58,-10,38}, -{58,-10,39}, -{58,-10,40}, -{58,-10,41}, -{58,-10,42}, -{58,-10,43}, -{58,-10,44}, -{58,-10,45}, -{58,-10,46}, -{58,-10,47}, -{58,-10,48}, -{58,-10,49}, -{58,-10,50}, -{58,-10,51}, -{58,-10,52}, -{58,-10,53}, -{58,-10,54}, -{58,-10,55}, -{58,-10,56}, -{58,-10,57}, -{58,-10,58}, -{58,-10,59}, -{58,-10,60}, -{58,-10,61}, -{58,-10,62}, -{58,-9,-42}, -{58,-9,-41}, -{58,-9,-40}, -{58,-9,-39}, -{58,-9,-38}, -{58,-9,-37}, -{58,-9,-36}, -{58,-9,-35}, -{58,-9,-34}, -{58,-9,-33}, -{58,-9,-32}, -{58,-9,-31}, -{58,-9,-30}, -{58,-9,-29}, -{58,-9,-28}, -{58,-9,-27}, -{58,-9,-26}, -{58,-9,-25}, -{58,-9,-24}, -{58,-9,-23}, -{58,-9,-22}, -{58,-9,-21}, -{58,-9,-20}, -{58,-9,-19}, -{58,-9,-18}, -{58,-9,-17}, -{58,-9,-16}, -{58,-9,-15}, -{58,-9,-14}, -{58,-9,-13}, -{58,-9,-12}, -{58,-9,-11}, -{58,-9,-10}, -{58,-9,-9}, -{58,-9,-8}, -{58,-9,-7}, -{58,-9,-6}, -{58,-9,-5}, -{58,-9,-4}, -{58,-9,-3}, -{58,-9,-2}, -{58,-9,-1}, -{58,-9,0}, -{58,-9,1}, -{58,-9,2}, -{58,-9,3}, -{58,-9,4}, -{58,-9,5}, -{58,-9,6}, -{58,-9,7}, -{58,-9,8}, -{58,-9,9}, -{58,-9,10}, -{58,-9,11}, -{58,-9,12}, -{58,-9,13}, -{58,-9,14}, -{58,-9,15}, -{58,-9,16}, -{58,-9,17}, -{58,-9,18}, -{58,-9,19}, -{58,-9,20}, -{58,-9,21}, -{58,-9,22}, -{58,-9,23}, -{58,-9,24}, -{58,-9,25}, -{58,-9,26}, -{58,-9,27}, -{58,-9,28}, -{58,-9,29}, -{58,-9,30}, -{58,-9,31}, -{58,-9,32}, -{58,-9,33}, -{58,-9,34}, -{58,-9,35}, -{58,-9,36}, -{58,-9,37}, -{58,-9,38}, -{58,-9,39}, -{58,-9,40}, -{58,-9,41}, -{58,-9,42}, -{58,-9,43}, -{58,-9,44}, -{58,-9,45}, -{58,-9,46}, -{58,-9,47}, -{58,-9,48}, -{58,-9,49}, -{58,-9,50}, -{58,-9,51}, -{58,-9,52}, -{58,-9,53}, -{58,-9,54}, -{58,-9,55}, -{58,-9,56}, -{58,-9,57}, -{58,-9,58}, -{58,-9,59}, -{58,-9,60}, -{58,-9,61}, -{58,-9,62}, -{58,-8,-44}, -{58,-8,-43}, -{58,-8,-42}, -{58,-8,-41}, -{58,-8,-40}, -{58,-8,-39}, -{58,-8,-38}, -{58,-8,-37}, -{58,-8,-36}, -{58,-8,-35}, -{58,-8,-34}, -{58,-8,-33}, -{58,-8,-32}, -{58,-8,-31}, -{58,-8,-30}, -{58,-8,-29}, -{58,-8,-28}, -{58,-8,-27}, -{58,-8,-26}, -{58,-8,-25}, -{58,-8,-24}, -{58,-8,-23}, -{58,-8,-22}, -{58,-8,-21}, -{58,-8,-20}, -{58,-8,-19}, -{58,-8,-18}, -{58,-8,-17}, -{58,-8,-16}, -{58,-8,-15}, -{58,-8,-14}, -{58,-8,-13}, -{58,-8,-12}, -{58,-8,-11}, -{58,-8,-10}, -{58,-8,-9}, -{58,-8,-8}, -{58,-8,-7}, -{58,-8,-6}, -{58,-8,-5}, -{58,-8,-4}, -{58,-8,-3}, -{58,-8,-2}, -{58,-8,-1}, -{58,-8,0}, -{58,-8,1}, -{58,-8,2}, -{58,-8,3}, -{58,-8,4}, -{58,-8,5}, -{58,-8,6}, -{58,-8,7}, -{58,-8,8}, -{58,-8,9}, -{58,-8,10}, -{58,-8,11}, -{58,-8,12}, -{58,-8,13}, -{58,-8,14}, -{58,-8,15}, -{58,-8,16}, -{58,-8,17}, -{58,-8,18}, -{58,-8,19}, -{58,-8,20}, -{58,-8,21}, -{58,-8,22}, -{58,-8,23}, -{58,-8,24}, -{58,-8,25}, -{58,-8,26}, -{58,-8,27}, -{58,-8,28}, -{58,-8,29}, -{58,-8,30}, -{58,-8,31}, -{58,-8,32}, -{58,-8,33}, -{58,-8,34}, -{58,-8,35}, -{58,-8,36}, -{58,-8,37}, -{58,-8,38}, -{58,-8,39}, -{58,-8,40}, -{58,-8,41}, -{58,-8,42}, -{58,-8,43}, -{58,-8,44}, -{58,-8,45}, -{58,-8,46}, -{58,-8,47}, -{58,-8,48}, -{58,-8,49}, -{58,-8,50}, -{58,-8,51}, -{58,-8,52}, -{58,-8,53}, -{58,-8,54}, -{58,-8,55}, -{58,-8,56}, -{58,-8,57}, -{58,-8,58}, -{58,-8,59}, -{58,-8,60}, -{58,-8,61}, -{58,-8,62}, -{58,-7,-45}, -{58,-7,-44}, -{58,-7,-43}, -{58,-7,-42}, -{58,-7,-41}, -{58,-7,-40}, -{58,-7,-39}, -{58,-7,-38}, -{58,-7,-37}, -{58,-7,-36}, -{58,-7,-35}, -{58,-7,-34}, -{58,-7,-33}, -{58,-7,-32}, -{58,-7,-31}, -{58,-7,-30}, -{58,-7,-29}, -{58,-7,-28}, -{58,-7,-27}, -{58,-7,-26}, -{58,-7,-25}, -{58,-7,-24}, -{58,-7,-23}, -{58,-7,-22}, -{58,-7,-21}, -{58,-7,-20}, -{58,-7,-19}, -{58,-7,-18}, -{58,-7,-17}, -{58,-7,-16}, -{58,-7,-15}, -{58,-7,-14}, -{58,-7,-13}, -{58,-7,-12}, -{58,-7,-11}, -{58,-7,-10}, -{58,-7,-9}, -{58,-7,-8}, -{58,-7,-7}, -{58,-7,-6}, -{58,-7,-5}, -{58,-7,-4}, -{58,-7,-3}, -{58,-7,-2}, -{58,-7,-1}, -{58,-7,0}, -{58,-7,1}, -{58,-7,2}, -{58,-7,3}, -{58,-7,4}, -{58,-7,5}, -{58,-7,6}, -{58,-7,7}, -{58,-7,8}, -{58,-7,9}, -{58,-7,10}, -{58,-7,11}, -{58,-7,12}, -{58,-7,13}, -{58,-7,14}, -{58,-7,15}, -{58,-7,16}, -{58,-7,17}, -{58,-7,18}, -{58,-7,19}, -{58,-7,20}, -{58,-7,21}, -{58,-7,22}, -{58,-7,23}, -{58,-7,24}, -{58,-7,25}, -{58,-7,26}, -{58,-7,27}, -{58,-7,28}, -{58,-7,29}, -{58,-7,30}, -{58,-7,31}, -{58,-7,32}, -{58,-7,33}, -{58,-7,34}, -{58,-7,35}, -{58,-7,36}, -{58,-7,37}, -{58,-7,38}, -{58,-7,39}, -{58,-7,40}, -{58,-7,41}, -{58,-7,42}, -{58,-7,43}, -{58,-7,44}, -{58,-7,45}, -{58,-7,46}, -{58,-7,47}, -{58,-7,48}, -{58,-7,49}, -{58,-7,50}, -{58,-7,51}, -{58,-7,52}, -{58,-7,53}, -{58,-7,54}, -{58,-7,55}, -{58,-7,56}, -{58,-7,57}, -{58,-7,58}, -{58,-7,59}, -{58,-7,60}, -{58,-7,61}, -{58,-7,62}, -{58,-6,-46}, -{58,-6,-45}, -{58,-6,-44}, -{58,-6,-43}, -{58,-6,-42}, -{58,-6,-41}, -{58,-6,-40}, -{58,-6,-39}, -{58,-6,-38}, -{58,-6,-37}, -{58,-6,-36}, -{58,-6,-35}, -{58,-6,-34}, -{58,-6,-33}, -{58,-6,-32}, -{58,-6,-31}, -{58,-6,-30}, -{58,-6,-29}, -{58,-6,-28}, -{58,-6,-27}, -{58,-6,-26}, -{58,-6,-25}, -{58,-6,-24}, -{58,-6,-23}, -{58,-6,-22}, -{58,-6,-21}, -{58,-6,-20}, -{58,-6,-19}, -{58,-6,-18}, -{58,-6,-17}, -{58,-6,-16}, -{58,-6,-15}, -{58,-6,-14}, -{58,-6,-13}, -{58,-6,-12}, -{58,-6,-11}, -{58,-6,-10}, -{58,-6,-9}, -{58,-6,-8}, -{58,-6,-7}, -{58,-6,-6}, -{58,-6,-5}, -{58,-6,-4}, -{58,-6,-3}, -{58,-6,-2}, -{58,-6,-1}, -{58,-6,0}, -{58,-6,1}, -{58,-6,2}, -{58,-6,3}, -{58,-6,4}, -{58,-6,5}, -{58,-6,6}, -{58,-6,7}, -{58,-6,8}, -{58,-6,9}, -{58,-6,10}, -{58,-6,11}, -{58,-6,12}, -{58,-6,13}, -{58,-6,14}, -{58,-6,15}, -{58,-6,16}, -{58,-6,17}, -{58,-6,18}, -{58,-6,19}, -{58,-6,20}, -{58,-6,21}, -{58,-6,22}, -{58,-6,23}, -{58,-6,24}, -{58,-6,25}, -{58,-6,26}, -{58,-6,27}, -{58,-6,28}, -{58,-6,29}, -{58,-6,30}, -{58,-6,31}, -{58,-6,32}, -{58,-6,33}, -{58,-6,34}, -{58,-6,35}, -{58,-6,36}, -{58,-6,37}, -{58,-6,38}, -{58,-6,39}, -{58,-6,40}, -{58,-6,41}, -{58,-6,42}, -{58,-6,43}, -{58,-6,44}, -{58,-6,45}, -{58,-6,46}, -{58,-6,47}, -{58,-6,48}, -{58,-6,49}, -{58,-6,50}, -{58,-6,51}, -{58,-6,52}, -{58,-6,53}, -{58,-6,54}, -{58,-6,55}, -{58,-6,56}, -{58,-6,57}, -{58,-6,58}, -{58,-6,59}, -{58,-6,60}, -{58,-6,61}, -{58,-6,62}, -{58,-5,-47}, -{58,-5,-46}, -{58,-5,-45}, -{58,-5,-44}, -{58,-5,-43}, -{58,-5,-42}, -{58,-5,-41}, -{58,-5,-40}, -{58,-5,-39}, -{58,-5,-38}, -{58,-5,-37}, -{58,-5,-36}, -{58,-5,-35}, -{58,-5,-34}, -{58,-5,-33}, -{58,-5,-32}, -{58,-5,-31}, -{58,-5,-30}, -{58,-5,-29}, -{58,-5,-28}, -{58,-5,-27}, -{58,-5,-26}, -{58,-5,-25}, -{58,-5,-24}, -{58,-5,-23}, -{58,-5,-22}, -{58,-5,-21}, -{58,-5,-20}, -{58,-5,-19}, -{58,-5,-18}, -{58,-5,-17}, -{58,-5,-16}, -{58,-5,-15}, -{58,-5,-14}, -{58,-5,-13}, -{58,-5,-12}, -{58,-5,-11}, -{58,-5,-10}, -{58,-5,-9}, -{58,-5,-8}, -{58,-5,-7}, -{58,-5,-6}, -{58,-5,-5}, -{58,-5,-4}, -{58,-5,-3}, -{58,-5,-2}, -{58,-5,-1}, -{58,-5,0}, -{58,-5,1}, -{58,-5,2}, -{58,-5,3}, -{58,-5,4}, -{58,-5,5}, -{58,-5,6}, -{58,-5,7}, -{58,-5,8}, -{58,-5,9}, -{58,-5,10}, -{58,-5,11}, -{58,-5,12}, -{58,-5,13}, -{58,-5,14}, -{58,-5,15}, -{58,-5,16}, -{58,-5,17}, -{58,-5,18}, -{58,-5,19}, -{58,-5,20}, -{58,-5,21}, -{58,-5,22}, -{58,-5,23}, -{58,-5,24}, -{58,-5,25}, -{58,-5,26}, -{58,-5,27}, -{58,-5,28}, -{58,-5,29}, -{58,-5,30}, -{58,-5,31}, -{58,-5,32}, -{58,-5,33}, -{58,-5,34}, -{58,-5,35}, -{58,-5,36}, -{58,-5,37}, -{58,-5,38}, -{58,-5,39}, -{58,-5,40}, -{58,-5,41}, -{58,-5,42}, -{58,-5,43}, -{58,-5,44}, -{58,-5,45}, -{58,-5,46}, -{58,-5,47}, -{58,-5,48}, -{58,-5,49}, -{58,-5,50}, -{58,-5,51}, -{58,-5,52}, -{58,-5,53}, -{58,-5,54}, -{58,-5,55}, -{58,-5,56}, -{58,-5,57}, -{58,-5,58}, -{58,-5,59}, -{58,-5,60}, -{58,-5,61}, -{58,-5,62}, -{58,-4,-48}, -{58,-4,-47}, -{58,-4,-46}, -{58,-4,-45}, -{58,-4,-44}, -{58,-4,-43}, -{58,-4,-42}, -{58,-4,-41}, -{58,-4,-40}, -{58,-4,-39}, -{58,-4,-38}, -{58,-4,-37}, -{58,-4,-36}, -{58,-4,-35}, -{58,-4,-34}, -{58,-4,-33}, -{58,-4,-32}, -{58,-4,-31}, -{58,-4,-30}, -{58,-4,-29}, -{58,-4,-28}, -{58,-4,-27}, -{58,-4,-26}, -{58,-4,-25}, -{58,-4,-24}, -{58,-4,-23}, -{58,-4,-22}, -{58,-4,-21}, -{58,-4,-20}, -{58,-4,-19}, -{58,-4,-18}, -{58,-4,-17}, -{58,-4,-16}, -{58,-4,-15}, -{58,-4,-14}, -{58,-4,-13}, -{58,-4,-12}, -{58,-4,-11}, -{58,-4,-10}, -{58,-4,-9}, -{58,-4,-8}, -{58,-4,-7}, -{58,-4,-6}, -{58,-4,-5}, -{58,-4,-4}, -{58,-4,-3}, -{58,-4,-2}, -{58,-4,-1}, -{58,-4,0}, -{58,-4,1}, -{58,-4,2}, -{58,-4,3}, -{58,-4,4}, -{58,-4,5}, -{58,-4,6}, -{58,-4,7}, -{58,-4,8}, -{58,-4,9}, -{58,-4,10}, -{58,-4,11}, -{58,-4,12}, -{58,-4,13}, -{58,-4,14}, -{58,-4,15}, -{58,-4,16}, -{58,-4,17}, -{58,-4,18}, -{58,-4,19}, -{58,-4,20}, -{58,-4,21}, -{58,-4,22}, -{58,-4,23}, -{58,-4,24}, -{58,-4,25}, -{58,-4,26}, -{58,-4,27}, -{58,-4,28}, -{58,-4,29}, -{58,-4,30}, -{58,-4,31}, -{58,-4,32}, -{58,-4,33}, -{58,-4,34}, -{58,-4,35}, -{58,-4,36}, -{58,-4,37}, -{58,-4,38}, -{58,-4,39}, -{58,-4,40}, -{58,-4,41}, -{58,-4,42}, -{58,-4,43}, -{58,-4,44}, -{58,-4,45}, -{58,-4,46}, -{58,-4,47}, -{58,-4,48}, -{58,-4,49}, -{58,-4,50}, -{58,-4,51}, -{58,-4,52}, -{58,-4,53}, -{58,-4,54}, -{58,-4,55}, -{58,-4,56}, -{58,-4,57}, -{58,-4,58}, -{58,-4,59}, -{58,-4,60}, -{58,-4,61}, -{58,-4,62}, -{58,-3,-49}, -{58,-3,-48}, -{58,-3,-47}, -{58,-3,-46}, -{58,-3,-45}, -{58,-3,-44}, -{58,-3,-43}, -{58,-3,-42}, -{58,-3,-41}, -{58,-3,-40}, -{58,-3,-39}, -{58,-3,-38}, -{58,-3,-37}, -{58,-3,-36}, -{58,-3,-35}, -{58,-3,-34}, -{58,-3,-33}, -{58,-3,-32}, -{58,-3,-31}, -{58,-3,-30}, -{58,-3,-29}, -{58,-3,-28}, -{58,-3,-27}, -{58,-3,-26}, -{58,-3,-25}, -{58,-3,-24}, -{58,-3,-23}, -{58,-3,-22}, -{58,-3,-21}, -{58,-3,-20}, -{58,-3,-19}, -{58,-3,-18}, -{58,-3,-17}, -{58,-3,-16}, -{58,-3,-15}, -{58,-3,-14}, -{58,-3,-13}, -{58,-3,-12}, -{58,-3,-11}, -{58,-3,-10}, -{58,-3,-9}, -{58,-3,-8}, -{58,-3,-7}, -{58,-3,-6}, -{58,-3,-5}, -{58,-3,-4}, -{58,-3,-3}, -{58,-3,-2}, -{58,-3,-1}, -{58,-3,0}, -{58,-3,1}, -{58,-3,2}, -{58,-3,3}, -{58,-3,4}, -{58,-3,5}, -{58,-3,6}, -{58,-3,7}, -{58,-3,8}, -{58,-3,9}, -{58,-3,10}, -{58,-3,11}, -{58,-3,12}, -{58,-3,13}, -{58,-3,14}, -{58,-3,15}, -{58,-3,16}, -{58,-3,17}, -{58,-3,18}, -{58,-3,19}, -{58,-3,20}, -{58,-3,21}, -{58,-3,22}, -{58,-3,23}, -{58,-3,24}, -{58,-3,25}, -{58,-3,26}, -{58,-3,27}, -{58,-3,28}, -{58,-3,29}, -{58,-3,30}, -{58,-3,31}, -{58,-3,32}, -{58,-3,33}, -{58,-3,34}, -{58,-3,35}, -{58,-3,36}, -{58,-3,37}, -{58,-3,38}, -{58,-3,39}, -{58,-3,40}, -{58,-3,41}, -{58,-3,42}, -{58,-3,43}, -{58,-3,44}, -{58,-3,45}, -{58,-3,46}, -{58,-3,47}, -{58,-3,48}, -{58,-3,49}, -{58,-3,50}, -{58,-3,51}, -{58,-3,52}, -{58,-3,53}, -{58,-3,54}, -{58,-3,55}, -{58,-3,56}, -{58,-3,57}, -{58,-3,58}, -{58,-3,59}, -{58,-3,60}, -{58,-3,61}, -{58,-3,62}, -{58,-2,-51}, -{58,-2,-50}, -{58,-2,-49}, -{58,-2,-48}, -{58,-2,-47}, -{58,-2,-46}, -{58,-2,-45}, -{58,-2,-44}, -{58,-2,-43}, -{58,-2,-42}, -{58,-2,-41}, -{58,-2,-40}, -{58,-2,-39}, -{58,-2,-38}, -{58,-2,-37}, -{58,-2,-36}, -{58,-2,-35}, -{58,-2,-34}, -{58,-2,-33}, -{58,-2,-32}, -{58,-2,-31}, -{58,-2,-30}, -{58,-2,-29}, -{58,-2,-28}, -{58,-2,-27}, -{58,-2,-26}, -{58,-2,-25}, -{58,-2,-24}, -{58,-2,-23}, -{58,-2,-22}, -{58,-2,-21}, -{58,-2,-20}, -{58,-2,-19}, -{58,-2,-18}, -{58,-2,-17}, -{58,-2,-16}, -{58,-2,-15}, -{58,-2,-14}, -{58,-2,-13}, -{58,-2,-12}, -{58,-2,-11}, -{58,-2,-10}, -{58,-2,-9}, -{58,-2,-8}, -{58,-2,-7}, -{58,-2,-6}, -{58,-2,-5}, -{58,-2,-4}, -{58,-2,-3}, -{58,-2,-2}, -{58,-2,-1}, -{58,-2,0}, -{58,-2,1}, -{58,-2,2}, -{58,-2,3}, -{58,-2,4}, -{58,-2,5}, -{58,-2,6}, -{58,-2,7}, -{58,-2,8}, -{58,-2,9}, -{58,-2,10}, -{58,-2,11}, -{58,-2,12}, -{58,-2,13}, -{58,-2,14}, -{58,-2,15}, -{58,-2,16}, -{58,-2,17}, -{58,-2,18}, -{58,-2,19}, -{58,-2,20}, -{58,-2,21}, -{58,-2,22}, -{58,-2,23}, -{58,-2,24}, -{58,-2,25}, -{58,-2,26}, -{58,-2,27}, -{58,-2,28}, -{58,-2,29}, -{58,-2,30}, -{58,-2,31}, -{58,-2,32}, -{58,-2,33}, -{58,-2,34}, -{58,-2,35}, -{58,-2,36}, -{58,-2,37}, -{58,-2,38}, -{58,-2,39}, -{58,-2,40}, -{58,-2,41}, -{58,-2,42}, -{58,-2,43}, -{58,-2,44}, -{58,-2,45}, -{58,-2,46}, -{58,-2,47}, -{58,-2,48}, -{58,-2,49}, -{58,-2,50}, -{58,-2,51}, -{58,-2,52}, -{58,-2,53}, -{58,-2,54}, -{58,-2,55}, -{58,-2,56}, -{58,-2,57}, -{58,-2,58}, -{58,-2,59}, -{58,-2,60}, -{58,-2,61}, -{58,-2,62}, -{58,-1,-52}, -{58,-1,-51}, -{58,-1,-50}, -{58,-1,-49}, -{58,-1,-48}, -{58,-1,-47}, -{58,-1,-46}, -{58,-1,-45}, -{58,-1,-44}, -{58,-1,-43}, -{58,-1,-42}, -{58,-1,-41}, -{58,-1,-40}, -{58,-1,-39}, -{58,-1,-38}, -{58,-1,-37}, -{58,-1,-36}, -{58,-1,-35}, -{58,-1,-34}, -{58,-1,-33}, -{58,-1,-32}, -{58,-1,-31}, -{58,-1,-30}, -{58,-1,-29}, -{58,-1,-28}, -{58,-1,-27}, -{58,-1,-26}, -{58,-1,-25}, -{58,-1,-24}, -{58,-1,-23}, -{58,-1,-22}, -{58,-1,-21}, -{58,-1,-20}, -{58,-1,-19}, -{58,-1,-18}, -{58,-1,-17}, -{58,-1,-16}, -{58,-1,-15}, -{58,-1,-14}, -{58,-1,-13}, -{58,-1,-12}, -{58,-1,-11}, -{58,-1,-10}, -{58,-1,-9}, -{58,-1,-8}, -{58,-1,-7}, -{58,-1,-6}, -{58,-1,-5}, -{58,-1,-4}, -{58,-1,-3}, -{58,-1,-2}, -{58,-1,-1}, -{58,-1,0}, -{58,-1,1}, -{58,-1,2}, -{58,-1,3}, -{58,-1,4}, -{58,-1,5}, -{58,-1,6}, -{58,-1,7}, -{58,-1,8}, -{58,-1,9}, -{58,-1,10}, -{58,-1,11}, -{58,-1,12}, -{58,-1,13}, -{58,-1,14}, -{58,-1,15}, -{58,-1,16}, -{58,-1,17}, -{58,-1,18}, -{58,-1,19}, -{58,-1,20}, -{58,-1,21}, -{58,-1,22}, -{58,-1,23}, -{58,-1,24}, -{58,-1,25}, -{58,-1,26}, -{58,-1,27}, -{58,-1,28}, -{58,-1,29}, -{58,-1,30}, -{58,-1,31}, -{58,-1,32}, -{58,-1,33}, -{58,-1,34}, -{58,-1,35}, -{58,-1,36}, -{58,-1,37}, -{58,-1,38}, -{58,-1,39}, -{58,-1,40}, -{58,-1,41}, -{58,-1,42}, -{58,-1,43}, -{58,-1,44}, -{58,-1,45}, -{58,-1,46}, -{58,-1,47}, -{58,-1,48}, -{58,-1,49}, -{58,-1,50}, -{58,-1,51}, -{58,-1,52}, -{58,-1,53}, -{58,-1,54}, -{58,-1,55}, -{58,-1,56}, -{58,-1,57}, -{58,-1,58}, -{58,-1,59}, -{58,-1,60}, -{58,-1,61}, -{58,-1,62}, -{58,0,-53}, -{58,0,-52}, -{58,0,-51}, -{58,0,-50}, -{58,0,-49}, -{58,0,-48}, -{58,0,-47}, -{58,0,-46}, -{58,0,-45}, -{58,0,-44}, -{58,0,-43}, -{58,0,-42}, -{58,0,-41}, -{58,0,-40}, -{58,0,-39}, -{58,0,-38}, -{58,0,-37}, -{58,0,-36}, -{58,0,-35}, -{58,0,-34}, -{58,0,-33}, -{58,0,-32}, -{58,0,-31}, -{58,0,-30}, -{58,0,-29}, -{58,0,-28}, -{58,0,-27}, -{58,0,-26}, -{58,0,-25}, -{58,0,-24}, -{58,0,-23}, -{58,0,-22}, -{58,0,-21}, -{58,0,-20}, -{58,0,-19}, -{58,0,-18}, -{58,0,-17}, -{58,0,-16}, -{58,0,-15}, -{58,0,-14}, -{58,0,-13}, -{58,0,-12}, -{58,0,-11}, -{58,0,-10}, -{58,0,-9}, -{58,0,-8}, -{58,0,-7}, -{58,0,-6}, -{58,0,-5}, -{58,0,-4}, -{58,0,-3}, -{58,0,-2}, -{58,0,-1}, -{58,0,0}, -{58,0,1}, -{58,0,2}, -{58,0,3}, -{58,0,4}, -{58,0,5}, -{58,0,6}, -{58,0,7}, -{58,0,8}, -{58,0,9}, -{58,0,10}, -{58,0,11}, -{58,0,12}, -{58,0,13}, -{58,0,14}, -{58,0,15}, -{58,0,16}, -{58,0,17}, -{58,0,18}, -{58,0,19}, -{58,0,20}, -{58,0,21}, -{58,0,22}, -{58,0,23}, -{58,0,24}, -{58,0,25}, -{58,0,26}, -{58,0,27}, -{58,0,28}, -{58,0,29}, -{58,0,30}, -{58,0,31}, -{58,0,32}, -{58,0,33}, -{58,0,34}, -{58,0,35}, -{58,0,36}, -{58,0,37}, -{58,0,38}, -{58,0,39}, -{58,0,40}, -{58,0,41}, -{58,0,42}, -{58,0,43}, -{58,0,44}, -{58,0,45}, -{58,0,46}, -{58,0,47}, -{58,0,48}, -{58,0,49}, -{58,0,50}, -{58,0,51}, -{58,0,52}, -{58,0,53}, -{58,0,54}, -{58,0,55}, -{58,0,56}, -{58,0,57}, -{58,0,58}, -{58,0,59}, -{58,0,60}, -{58,0,61}, -{58,0,62}, -{58,1,-54}, -{58,1,-53}, -{58,1,-52}, -{58,1,-51}, -{58,1,-50}, -{58,1,-49}, -{58,1,-48}, -{58,1,-47}, -{58,1,-46}, -{58,1,-45}, -{58,1,-44}, -{58,1,-43}, -{58,1,-42}, -{58,1,-41}, -{58,1,-40}, -{58,1,-39}, -{58,1,-38}, -{58,1,-37}, -{58,1,-36}, -{58,1,-35}, -{58,1,-34}, -{58,1,-33}, -{58,1,-32}, -{58,1,-31}, -{58,1,-30}, -{58,1,-29}, -{58,1,-28}, -{58,1,-27}, -{58,1,-26}, -{58,1,-25}, -{58,1,-24}, -{58,1,-23}, -{58,1,-22}, -{58,1,-21}, -{58,1,-20}, -{58,1,-19}, -{58,1,-18}, -{58,1,-17}, -{58,1,-16}, -{58,1,-15}, -{58,1,-14}, -{58,1,-13}, -{58,1,-12}, -{58,1,-11}, -{58,1,-10}, -{58,1,-9}, -{58,1,-8}, -{58,1,-7}, -{58,1,-6}, -{58,1,-5}, -{58,1,-4}, -{58,1,-3}, -{58,1,-2}, -{58,1,-1}, -{58,1,0}, -{58,1,1}, -{58,1,2}, -{58,1,3}, -{58,1,4}, -{58,1,5}, -{58,1,6}, -{58,1,7}, -{58,1,8}, -{58,1,9}, -{58,1,10}, -{58,1,11}, -{58,1,12}, -{58,1,13}, -{58,1,14}, -{58,1,15}, -{58,1,16}, -{58,1,17}, -{58,1,18}, -{58,1,19}, -{58,1,20}, -{58,1,21}, -{58,1,22}, -{58,1,23}, -{58,1,24}, -{58,1,25}, -{58,1,26}, -{58,1,27}, -{58,1,28}, -{58,1,29}, -{58,1,30}, -{58,1,31}, -{58,1,32}, -{58,1,33}, -{58,1,34}, -{58,1,35}, -{58,1,36}, -{58,1,37}, -{58,1,38}, -{58,1,39}, -{58,1,40}, -{58,1,41}, -{58,1,42}, -{58,1,43}, -{58,1,44}, -{58,1,45}, -{58,1,46}, -{58,1,47}, -{58,1,48}, -{58,1,49}, -{58,1,50}, -{58,1,51}, -{58,1,52}, -{58,1,53}, -{58,1,54}, -{58,1,55}, -{58,1,56}, -{58,1,57}, -{58,1,58}, -{58,1,59}, -{58,1,60}, -{58,1,61}, -{58,1,62}, -{58,1,63}, -{58,2,-55}, -{58,2,-54}, -{58,2,-53}, -{58,2,-52}, -{58,2,-51}, -{58,2,-50}, -{58,2,-49}, -{58,2,-48}, -{58,2,-47}, -{58,2,-46}, -{58,2,-45}, -{58,2,-44}, -{58,2,-43}, -{58,2,-42}, -{58,2,-41}, -{58,2,-40}, -{58,2,-39}, -{58,2,-38}, -{58,2,-37}, -{58,2,-36}, -{58,2,-35}, -{58,2,-34}, -{58,2,-33}, -{58,2,-32}, -{58,2,-31}, -{58,2,-30}, -{58,2,-29}, -{58,2,-28}, -{58,2,-27}, -{58,2,-26}, -{58,2,-25}, -{58,2,-24}, -{58,2,-23}, -{58,2,-22}, -{58,2,-21}, -{58,2,-20}, -{58,2,-19}, -{58,2,-18}, -{58,2,-17}, -{58,2,-16}, -{58,2,-15}, -{58,2,-14}, -{58,2,-13}, -{58,2,-12}, -{58,2,-11}, -{58,2,-10}, -{58,2,-9}, -{58,2,-8}, -{58,2,-7}, -{58,2,-6}, -{58,2,-5}, -{58,2,-4}, -{58,2,-3}, -{58,2,-2}, -{58,2,-1}, -{58,2,0}, -{58,2,1}, -{58,2,2}, -{58,2,3}, -{58,2,4}, -{58,2,5}, -{58,2,6}, -{58,2,7}, -{58,2,8}, -{58,2,9}, -{58,2,10}, -{58,2,11}, -{58,2,12}, -{58,2,13}, -{58,2,14}, -{58,2,15}, -{58,2,16}, -{58,2,17}, -{58,2,18}, -{58,2,19}, -{58,2,20}, -{58,2,21}, -{58,2,22}, -{58,2,23}, -{58,2,24}, -{58,2,25}, -{58,2,26}, -{58,2,27}, -{58,2,28}, -{58,2,29}, -{58,2,30}, -{58,2,31}, -{58,2,32}, -{58,2,33}, -{58,2,34}, -{58,2,35}, -{58,2,36}, -{58,2,37}, -{58,2,38}, -{58,2,39}, -{58,2,40}, -{58,2,41}, -{58,2,42}, -{58,2,43}, -{58,2,44}, -{58,2,45}, -{58,2,46}, -{58,2,47}, -{58,2,48}, -{58,2,49}, -{58,2,50}, -{58,2,51}, -{58,2,52}, -{58,2,53}, -{58,2,54}, -{58,2,55}, -{58,2,56}, -{58,2,57}, -{58,2,58}, -{58,2,59}, -{58,2,60}, -{58,2,61}, -{58,2,62}, -{58,2,63}, -{58,3,-56}, -{58,3,-55}, -{58,3,-54}, -{58,3,-53}, -{58,3,-52}, -{58,3,-51}, -{58,3,-50}, -{58,3,-49}, -{58,3,-48}, -{58,3,-47}, -{58,3,-46}, -{58,3,-45}, -{58,3,-44}, -{58,3,-43}, -{58,3,-42}, -{58,3,-41}, -{58,3,-40}, -{58,3,-39}, -{58,3,-38}, -{58,3,-37}, -{58,3,-36}, -{58,3,-35}, -{58,3,-34}, -{58,3,-33}, -{58,3,-32}, -{58,3,-31}, -{58,3,-30}, -{58,3,-29}, -{58,3,-28}, -{58,3,-27}, -{58,3,-26}, -{58,3,-25}, -{58,3,-24}, -{58,3,-23}, -{58,3,-22}, -{58,3,-21}, -{58,3,-20}, -{58,3,-19}, -{58,3,-18}, -{58,3,-17}, -{58,3,-16}, -{58,3,-15}, -{58,3,-14}, -{58,3,-13}, -{58,3,-12}, -{58,3,-11}, -{58,3,-10}, -{58,3,-9}, -{58,3,-8}, -{58,3,-7}, -{58,3,-6}, -{58,3,-5}, -{58,3,-4}, -{58,3,-3}, -{58,3,-2}, -{58,3,-1}, -{58,3,0}, -{58,3,1}, -{58,3,2}, -{58,3,3}, -{58,3,4}, -{58,3,5}, -{58,3,6}, -{58,3,7}, -{58,3,8}, -{58,3,9}, -{58,3,10}, -{58,3,11}, -{58,3,12}, -{58,3,13}, -{58,3,14}, -{58,3,15}, -{58,3,16}, -{58,3,17}, -{58,3,18}, -{58,3,19}, -{58,3,20}, -{58,3,21}, -{58,3,22}, -{58,3,23}, -{58,3,24}, -{58,3,25}, -{58,3,26}, -{58,3,27}, -{58,3,28}, -{58,3,29}, -{58,3,30}, -{58,3,31}, -{58,3,32}, -{58,3,33}, -{58,3,34}, -{58,3,35}, -{58,3,36}, -{58,3,37}, -{58,3,38}, -{58,3,39}, -{58,3,40}, -{58,3,41}, -{58,3,42}, -{58,3,43}, -{58,3,44}, -{58,3,45}, -{58,3,46}, -{58,3,47}, -{58,3,48}, -{58,3,49}, -{58,3,50}, -{58,3,51}, -{58,3,52}, -{58,3,53}, -{58,3,54}, -{58,3,55}, -{58,3,56}, -{58,3,57}, -{58,3,58}, -{58,3,59}, -{58,3,60}, -{58,3,61}, -{58,3,62}, -{58,3,63}, -{58,4,-57}, -{58,4,-56}, -{58,4,-55}, -{58,4,-54}, -{58,4,-53}, -{58,4,-52}, -{58,4,-51}, -{58,4,-50}, -{58,4,-49}, -{58,4,-48}, -{58,4,-47}, -{58,4,-46}, -{58,4,-45}, -{58,4,-44}, -{58,4,-43}, -{58,4,-42}, -{58,4,-41}, -{58,4,-40}, -{58,4,-39}, -{58,4,-38}, -{58,4,-37}, -{58,4,-36}, -{58,4,-35}, -{58,4,-34}, -{58,4,-33}, -{58,4,-32}, -{58,4,-31}, -{58,4,-30}, -{58,4,-29}, -{58,4,-28}, -{58,4,-27}, -{58,4,-26}, -{58,4,-25}, -{58,4,-24}, -{58,4,-23}, -{58,4,-22}, -{58,4,-21}, -{58,4,-20}, -{58,4,-19}, -{58,4,-18}, -{58,4,-17}, -{58,4,-16}, -{58,4,-15}, -{58,4,-14}, -{58,4,-13}, -{58,4,-12}, -{58,4,-11}, -{58,4,-10}, -{58,4,-9}, -{58,4,-8}, -{58,4,-7}, -{58,4,-6}, -{58,4,-5}, -{58,4,-4}, -{58,4,-3}, -{58,4,-2}, -{58,4,-1}, -{58,4,0}, -{58,4,1}, -{58,4,2}, -{58,4,3}, -{58,4,4}, -{58,4,5}, -{58,4,6}, -{58,4,7}, -{58,4,8}, -{58,4,9}, -{58,4,10}, -{58,4,11}, -{58,4,12}, -{58,4,13}, -{58,4,14}, -{58,4,15}, -{58,4,16}, -{58,4,17}, -{58,4,18}, -{58,4,19}, -{58,4,20}, -{58,4,21}, -{58,4,22}, -{58,4,23}, -{58,4,24}, -{58,4,25}, -{58,4,26}, -{58,4,27}, -{58,4,28}, -{58,4,29}, -{58,4,30}, -{58,4,31}, -{58,4,32}, -{58,4,33}, -{58,4,34}, -{58,4,35}, -{58,4,36}, -{58,4,37}, -{58,4,38}, -{58,4,39}, -{58,4,40}, -{58,4,41}, -{58,4,42}, -{58,4,43}, -{58,4,44}, -{58,4,45}, -{58,4,46}, -{58,4,47}, -{58,4,48}, -{58,4,49}, -{58,4,50}, -{58,4,51}, -{58,4,52}, -{58,4,53}, -{58,4,54}, -{58,4,55}, -{58,4,56}, -{58,4,57}, -{58,4,58}, -{58,4,59}, -{58,4,60}, -{58,4,61}, -{58,4,62}, -{58,4,63}, -{58,5,-58}, -{58,5,-57}, -{58,5,-56}, -{58,5,-55}, -{58,5,-54}, -{58,5,-53}, -{58,5,-52}, -{58,5,-51}, -{58,5,-50}, -{58,5,-49}, -{58,5,-48}, -{58,5,-47}, -{58,5,-46}, -{58,5,-45}, -{58,5,-44}, -{58,5,-43}, -{58,5,-42}, -{58,5,-41}, -{58,5,-40}, -{58,5,-39}, -{58,5,-38}, -{58,5,-37}, -{58,5,-36}, -{58,5,-35}, -{58,5,-34}, -{58,5,-33}, -{58,5,-32}, -{58,5,-31}, -{58,5,-30}, -{58,5,-29}, -{58,5,-28}, -{58,5,-27}, -{58,5,-26}, -{58,5,-25}, -{58,5,-24}, -{58,5,-23}, -{58,5,-22}, -{58,5,-21}, -{58,5,-20}, -{58,5,-19}, -{58,5,-18}, -{58,5,-17}, -{58,5,-16}, -{58,5,-15}, -{58,5,-14}, -{58,5,-13}, -{58,5,-12}, -{58,5,-11}, -{58,5,-10}, -{58,5,-9}, -{58,5,-8}, -{58,5,-7}, -{58,5,-6}, -{58,5,-5}, -{58,5,-4}, -{58,5,-3}, -{58,5,-2}, -{58,5,-1}, -{58,5,0}, -{58,5,1}, -{58,5,2}, -{58,5,3}, -{58,5,4}, -{58,5,5}, -{58,5,6}, -{58,5,7}, -{58,5,8}, -{58,5,9}, -{58,5,10}, -{58,5,11}, -{58,5,12}, -{58,5,13}, -{58,5,14}, -{58,5,15}, -{58,5,16}, -{58,5,17}, -{58,5,18}, -{58,5,19}, -{58,5,20}, -{58,5,21}, -{58,5,22}, -{58,5,23}, -{58,5,24}, -{58,5,25}, -{58,5,26}, -{58,5,27}, -{58,5,28}, -{58,5,29}, -{58,5,30}, -{58,5,31}, -{58,5,32}, -{58,5,33}, -{58,5,34}, -{58,5,35}, -{58,5,36}, -{58,5,37}, -{58,5,38}, -{58,5,39}, -{58,5,40}, -{58,5,41}, -{58,5,42}, -{58,5,43}, -{58,5,44}, -{58,5,45}, -{58,5,46}, -{58,5,47}, -{58,5,48}, -{58,5,49}, -{58,5,50}, -{58,5,51}, -{58,5,52}, -{58,5,53}, -{58,5,54}, -{58,5,55}, -{58,5,56}, -{58,5,57}, -{58,5,58}, -{58,5,59}, -{58,5,60}, -{58,5,61}, -{58,5,62}, -{58,5,63}, -{58,6,-60}, -{58,6,-59}, -{58,6,-58}, -{58,6,-57}, -{58,6,-56}, -{58,6,-55}, -{58,6,-54}, -{58,6,-53}, -{58,6,-52}, -{58,6,-51}, -{58,6,-50}, -{58,6,-49}, -{58,6,-48}, -{58,6,-47}, -{58,6,-46}, -{58,6,-45}, -{58,6,-44}, -{58,6,-43}, -{58,6,-42}, -{58,6,-41}, -{58,6,-40}, -{58,6,-39}, -{58,6,-38}, -{58,6,-37}, -{58,6,-36}, -{58,6,-35}, -{58,6,-34}, -{58,6,-33}, -{58,6,-32}, -{58,6,-31}, -{58,6,-30}, -{58,6,-29}, -{58,6,-28}, -{58,6,-27}, -{58,6,-26}, -{58,6,-25}, -{58,6,-24}, -{58,6,-23}, -{58,6,-22}, -{58,6,-21}, -{58,6,-20}, -{58,6,-19}, -{58,6,-18}, -{58,6,-17}, -{58,6,-16}, -{58,6,-15}, -{58,6,-14}, -{58,6,-13}, -{58,6,-12}, -{58,6,-11}, -{58,6,-10}, -{58,6,-9}, -{58,6,-8}, -{58,6,-7}, -{58,6,-6}, -{58,6,-5}, -{58,6,-4}, -{58,6,-3}, -{58,6,-2}, -{58,6,-1}, -{58,6,0}, -{58,6,1}, -{58,6,2}, -{58,6,3}, -{58,6,4}, -{58,6,5}, -{58,6,6}, -{58,6,7}, -{58,6,8}, -{58,6,9}, -{58,6,10}, -{58,6,11}, -{58,6,12}, -{58,6,13}, -{58,6,14}, -{58,6,15}, -{58,6,16}, -{58,6,17}, -{58,6,18}, -{58,6,19}, -{58,6,20}, -{58,6,21}, -{58,6,22}, -{58,6,23}, -{58,6,24}, -{58,6,25}, -{58,6,26}, -{58,6,27}, -{58,6,28}, -{58,6,29}, -{58,6,30}, -{58,6,31}, -{58,6,32}, -{58,6,33}, -{58,6,34}, -{58,6,35}, -{58,6,36}, -{58,6,37}, -{58,6,38}, -{58,6,39}, -{58,6,40}, -{58,6,41}, -{58,6,42}, -{58,6,43}, -{58,6,44}, -{58,6,45}, -{58,6,46}, -{58,6,47}, -{58,6,48}, -{58,6,49}, -{58,6,50}, -{58,6,51}, -{58,6,52}, -{58,6,53}, -{58,6,54}, -{58,6,55}, -{58,6,56}, -{58,6,57}, -{58,6,58}, -{58,6,59}, -{58,6,60}, -{58,6,61}, -{58,6,62}, -{58,6,63}, -{58,7,-61}, -{58,7,-60}, -{58,7,-59}, -{58,7,-58}, -{58,7,-57}, -{58,7,-56}, -{58,7,-55}, -{58,7,-54}, -{58,7,-53}, -{58,7,-52}, -{58,7,-51}, -{58,7,-50}, -{58,7,-49}, -{58,7,-48}, -{58,7,-47}, -{58,7,-46}, -{58,7,-45}, -{58,7,-44}, -{58,7,-43}, -{58,7,-42}, -{58,7,-41}, -{58,7,-40}, -{58,7,-39}, -{58,7,-38}, -{58,7,-37}, -{58,7,-36}, -{58,7,-35}, -{58,7,-34}, -{58,7,-33}, -{58,7,-32}, -{58,7,-31}, -{58,7,-30}, -{58,7,-29}, -{58,7,-28}, -{58,7,-27}, -{58,7,-26}, -{58,7,-25}, -{58,7,-24}, -{58,7,-23}, -{58,7,-22}, -{58,7,-21}, -{58,7,-20}, -{58,7,-19}, -{58,7,-18}, -{58,7,-17}, -{58,7,-16}, -{58,7,-15}, -{58,7,-14}, -{58,7,-13}, -{58,7,-12}, -{58,7,-11}, -{58,7,-10}, -{58,7,-9}, -{58,7,-8}, -{58,7,-7}, -{58,7,-6}, -{58,7,-5}, -{58,7,-4}, -{58,7,-3}, -{58,7,-2}, -{58,7,-1}, -{58,7,0}, -{58,7,1}, -{58,7,2}, -{58,7,3}, -{58,7,4}, -{58,7,5}, -{58,7,6}, -{58,7,7}, -{58,7,8}, -{58,7,9}, -{58,7,10}, -{58,7,11}, -{58,7,12}, -{58,7,13}, -{58,7,14}, -{58,7,15}, -{58,7,16}, -{58,7,17}, -{58,7,18}, -{58,7,19}, -{58,7,20}, -{58,7,21}, -{58,7,22}, -{58,7,23}, -{58,7,24}, -{58,7,25}, -{58,7,26}, -{58,7,27}, -{58,7,28}, -{58,7,29}, -{58,7,30}, -{58,7,31}, -{58,7,32}, -{58,7,33}, -{58,7,34}, -{58,7,35}, -{58,7,36}, -{58,7,37}, -{58,7,38}, -{58,7,39}, -{58,7,40}, -{58,7,41}, -{58,7,42}, -{58,7,43}, -{58,7,44}, -{58,7,45}, -{58,7,46}, -{58,7,47}, -{58,7,48}, -{58,7,49}, -{58,7,50}, -{58,7,51}, -{58,7,52}, -{58,7,53}, -{58,7,54}, -{58,7,55}, -{58,7,56}, -{58,7,57}, -{58,7,58}, -{58,7,59}, -{58,7,60}, -{58,7,61}, -{58,7,62}, -{58,7,63}, -{58,8,-62}, -{58,8,-61}, -{58,8,-60}, -{58,8,-59}, -{58,8,-58}, -{58,8,-57}, -{58,8,-56}, -{58,8,-55}, -{58,8,-54}, -{58,8,-53}, -{58,8,-52}, -{58,8,-51}, -{58,8,-50}, -{58,8,-49}, -{58,8,-48}, -{58,8,-47}, -{58,8,-46}, -{58,8,-45}, -{58,8,-44}, -{58,8,-43}, -{58,8,-42}, -{58,8,-41}, -{58,8,-40}, -{58,8,-39}, -{58,8,-38}, -{58,8,-37}, -{58,8,-36}, -{58,8,-35}, -{58,8,-34}, -{58,8,-33}, -{58,8,-32}, -{58,8,-31}, -{58,8,-30}, -{58,8,-29}, -{58,8,-28}, -{58,8,-27}, -{58,8,-26}, -{58,8,-25}, -{58,8,-24}, -{58,8,-23}, -{58,8,-22}, -{58,8,-21}, -{58,8,-20}, -{58,8,-19}, -{58,8,-18}, -{58,8,-17}, -{58,8,-16}, -{58,8,-15}, -{58,8,-14}, -{58,8,-13}, -{58,8,-12}, -{58,8,-11}, -{58,8,-10}, -{58,8,-9}, -{58,8,-8}, -{58,8,-7}, -{58,8,-6}, -{58,8,-5}, -{58,8,-4}, -{58,8,-3}, -{58,8,-2}, -{58,8,-1}, -{58,8,0}, -{58,8,1}, -{58,8,2}, -{58,8,3}, -{58,8,4}, -{58,8,5}, -{58,8,6}, -{58,8,7}, -{58,8,8}, -{58,8,9}, -{58,8,10}, -{58,8,11}, -{58,8,12}, -{58,8,13}, -{58,8,14}, -{58,8,15}, -{58,8,16}, -{58,8,17}, -{58,8,18}, -{58,8,19}, -{58,8,20}, -{58,8,21}, -{58,8,22}, -{58,8,23}, -{58,8,24}, -{58,8,25}, -{58,8,26}, -{58,8,27}, -{58,8,28}, -{58,8,29}, -{58,8,30}, -{58,8,31}, -{58,8,32}, -{58,8,33}, -{58,8,34}, -{58,8,35}, -{58,8,36}, -{58,8,37}, -{58,8,38}, -{58,8,39}, -{58,8,40}, -{58,8,41}, -{58,8,42}, -{58,8,43}, -{58,8,44}, -{58,8,45}, -{58,8,46}, -{58,8,47}, -{58,8,48}, -{58,8,49}, -{58,8,50}, -{58,8,51}, -{58,8,52}, -{58,8,53}, -{58,8,54}, -{58,8,55}, -{58,8,56}, -{58,8,57}, -{58,8,58}, -{58,8,59}, -{58,8,60}, -{58,8,61}, -{58,8,62}, -{58,8,63}, -{58,9,-63}, -{58,9,-62}, -{58,9,-61}, -{58,9,-60}, -{58,9,-59}, -{58,9,-58}, -{58,9,-57}, -{58,9,-56}, -{58,9,-55}, -{58,9,-54}, -{58,9,-53}, -{58,9,-52}, -{58,9,-51}, -{58,9,-50}, -{58,9,-49}, -{58,9,-48}, -{58,9,-47}, -{58,9,-46}, -{58,9,-45}, -{58,9,-44}, -{58,9,-43}, -{58,9,-42}, -{58,9,-41}, -{58,9,-40}, -{58,9,-39}, -{58,9,-38}, -{58,9,-37}, -{58,9,-36}, -{58,9,-35}, -{58,9,-34}, -{58,9,-33}, -{58,9,-32}, -{58,9,-31}, -{58,9,-30}, -{58,9,-29}, -{58,9,-28}, -{58,9,-27}, -{58,9,-26}, -{58,9,-25}, -{58,9,-24}, -{58,9,-23}, -{58,9,-22}, -{58,9,-21}, -{58,9,-20}, -{58,9,-19}, -{58,9,-18}, -{58,9,-17}, -{58,9,-16}, -{58,9,-15}, -{58,9,-14}, -{58,9,-13}, -{58,9,-12}, -{58,9,-11}, -{58,9,-10}, -{58,9,-9}, -{58,9,-8}, -{58,9,-7}, -{58,9,-6}, -{58,9,-5}, -{58,9,-4}, -{58,9,-3}, -{58,9,-2}, -{58,9,-1}, -{58,9,0}, -{58,9,1}, -{58,9,2}, -{58,9,3}, -{58,9,4}, -{58,9,5}, -{58,9,6}, -{58,9,7}, -{58,9,8}, -{58,9,9}, -{58,9,10}, -{58,9,11}, -{58,9,12}, -{58,9,13}, -{58,9,14}, -{58,9,15}, -{58,9,16}, -{58,9,17}, -{58,9,18}, -{58,9,19}, -{58,9,20}, -{58,9,21}, -{58,9,22}, -{58,9,23}, -{58,9,24}, -{58,9,25}, -{58,9,26}, -{58,9,27}, -{58,9,28}, -{58,9,29}, -{58,9,30}, -{58,9,31}, -{58,9,32}, -{58,9,33}, -{58,9,34}, -{58,9,35}, -{58,9,36}, -{58,9,37}, -{58,9,38}, -{58,9,39}, -{58,9,40}, -{58,9,41}, -{58,9,42}, -{58,9,43}, -{58,9,44}, -{58,9,45}, -{58,9,46}, -{58,9,47}, -{58,9,48}, -{58,9,49}, -{58,9,50}, -{58,9,51}, -{58,9,52}, -{58,9,53}, -{58,9,54}, -{58,9,55}, -{58,9,56}, -{58,9,57}, -{58,9,58}, -{58,9,59}, -{58,9,60}, -{58,9,61}, -{58,9,62}, -{58,9,63}, -{58,10,-64}, -{58,10,-63}, -{58,10,-62}, -{58,10,-61}, -{58,10,-60}, -{58,10,-59}, -{58,10,-58}, -{58,10,-57}, -{58,10,-56}, -{58,10,-55}, -{58,10,-54}, -{58,10,-53}, -{58,10,-52}, -{58,10,-51}, -{58,10,-50}, -{58,10,-49}, -{58,10,-48}, -{58,10,-47}, -{58,10,-46}, -{58,10,-45}, -{58,10,-44}, -{58,10,-43}, -{58,10,-42}, -{58,10,-41}, -{58,10,-40}, -{58,10,-39}, -{58,10,-38}, -{58,10,-37}, -{58,10,-36}, -{58,10,-35}, -{58,10,-34}, -{58,10,-33}, -{58,10,-32}, -{58,10,-31}, -{58,10,-30}, -{58,10,-29}, -{58,10,-28}, -{58,10,-27}, -{58,10,-26}, -{58,10,-25}, -{58,10,-24}, -{58,10,-23}, -{58,10,-22}, -{58,10,-21}, -{58,10,-20}, -{58,10,-19}, -{58,10,-18}, -{58,10,-17}, -{58,10,-16}, -{58,10,-15}, -{58,10,-14}, -{58,10,-13}, -{58,10,-12}, -{58,10,-11}, -{58,10,-10}, -{58,10,-9}, -{58,10,-8}, -{58,10,-7}, -{58,10,-6}, -{58,10,-5}, -{58,10,-4}, -{58,10,-3}, -{58,10,-2}, -{58,10,-1}, -{58,10,0}, -{58,10,1}, -{58,10,2}, -{58,10,3}, -{58,10,4}, -{58,10,5}, -{58,10,6}, -{58,10,7}, -{58,10,8}, -{58,10,9}, -{58,10,10}, -{58,10,11}, -{58,10,12}, -{58,10,13}, -{58,10,14}, -{58,10,15}, -{58,10,16}, -{58,10,17}, -{58,10,18}, -{58,10,19}, -{58,10,20}, -{58,10,21}, -{58,10,22}, -{58,10,23}, -{58,10,24}, -{58,10,25}, -{58,10,26}, -{58,10,27}, -{58,10,28}, -{58,10,29}, -{58,10,30}, -{58,10,31}, -{58,10,32}, -{58,10,33}, -{58,10,34}, -{58,10,35}, -{58,10,36}, -{58,10,37}, -{58,10,38}, -{58,10,39}, -{58,10,40}, -{58,10,41}, -{58,10,42}, -{58,10,43}, -{58,10,44}, -{58,10,45}, -{58,10,46}, -{58,10,47}, -{58,10,48}, -{58,10,49}, -{58,10,50}, -{58,10,51}, -{58,10,52}, -{58,10,53}, -{58,10,54}, -{58,10,55}, -{58,10,56}, -{58,10,57}, -{58,10,58}, -{58,10,59}, -{58,10,60}, -{58,10,61}, -{58,10,62}, -{58,10,63}, -{58,11,-65}, -{58,11,-64}, -{58,11,-63}, -{58,11,-62}, -{58,11,-61}, -{58,11,-60}, -{58,11,-59}, -{58,11,-58}, -{58,11,-57}, -{58,11,-56}, -{58,11,-55}, -{58,11,-54}, -{58,11,-53}, -{58,11,-52}, -{58,11,-51}, -{58,11,-50}, -{58,11,-49}, -{58,11,-48}, -{58,11,-47}, -{58,11,-46}, -{58,11,-45}, -{58,11,-44}, -{58,11,-43}, -{58,11,-42}, -{58,11,-41}, -{58,11,-40}, -{58,11,-39}, -{58,11,-38}, -{58,11,-37}, -{58,11,-36}, -{58,11,-35}, -{58,11,-34}, -{58,11,-33}, -{58,11,-32}, -{58,11,-31}, -{58,11,-30}, -{58,11,-29}, -{58,11,-28}, -{58,11,-27}, -{58,11,-26}, -{58,11,-25}, -{58,11,-24}, -{58,11,-23}, -{58,11,-22}, -{58,11,-21}, -{58,11,-20}, -{58,11,-19}, -{58,11,-18}, -{58,11,-17}, -{58,11,-16}, -{58,11,-15}, -{58,11,-14}, -{58,11,-13}, -{58,11,-12}, -{58,11,-11}, -{58,11,-10}, -{58,11,-9}, -{58,11,-8}, -{58,11,-7}, -{58,11,-6}, -{58,11,-5}, -{58,11,-4}, -{58,11,-3}, -{58,11,-2}, -{58,11,-1}, -{58,11,0}, -{58,11,1}, -{58,11,2}, -{58,11,3}, -{58,11,4}, -{58,11,5}, -{58,11,6}, -{58,11,7}, -{58,11,8}, -{58,11,9}, -{58,11,10}, -{58,11,11}, -{58,11,12}, -{58,11,13}, -{58,11,14}, -{58,11,15}, -{58,11,16}, -{58,11,17}, -{58,11,18}, -{58,11,19}, -{58,11,20}, -{58,11,21}, -{58,11,22}, -{58,11,23}, -{58,11,24}, -{58,11,25}, -{58,11,26}, -{58,11,27}, -{58,11,28}, -{58,11,29}, -{58,11,30}, -{58,11,31}, -{58,11,32}, -{58,11,33}, -{58,11,34}, -{58,11,35}, -{58,11,36}, -{58,11,37}, -{58,11,38}, -{58,11,39}, -{58,11,40}, -{58,11,41}, -{58,11,42}, -{58,11,43}, -{58,11,44}, -{58,11,45}, -{58,11,46}, -{58,11,47}, -{58,11,48}, -{58,11,49}, -{58,11,50}, -{58,11,51}, -{58,11,52}, -{58,11,53}, -{58,11,54}, -{58,11,55}, -{58,11,56}, -{58,11,57}, -{58,11,58}, -{58,11,59}, -{58,11,60}, -{58,11,61}, -{58,11,62}, -{58,11,63}, -{58,12,-65}, -{58,12,-64}, -{58,12,-63}, -{58,12,-62}, -{58,12,-61}, -{58,12,-60}, -{58,12,-59}, -{58,12,-58}, -{58,12,-57}, -{58,12,-56}, -{58,12,-55}, -{58,12,-54}, -{58,12,-53}, -{58,12,-52}, -{58,12,-51}, -{58,12,-50}, -{58,12,-49}, -{58,12,-48}, -{58,12,-47}, -{58,12,-46}, -{58,12,-45}, -{58,12,-44}, -{58,12,-43}, -{58,12,-42}, -{58,12,-41}, -{58,12,-40}, -{58,12,-39}, -{58,12,-38}, -{58,12,-37}, -{58,12,-36}, -{58,12,-35}, -{58,12,-34}, -{58,12,-33}, -{58,12,-32}, -{58,12,-31}, -{58,12,-30}, -{58,12,-29}, -{58,12,-28}, -{58,12,-27}, -{58,12,-26}, -{58,12,-25}, -{58,12,-24}, -{58,12,-23}, -{58,12,-22}, -{58,12,-21}, -{58,12,-20}, -{58,12,-19}, -{58,12,-18}, -{58,12,-17}, -{58,12,-16}, -{58,12,-15}, -{58,12,-14}, -{58,12,-13}, -{58,12,-12}, -{58,12,-11}, -{58,12,-10}, -{58,12,-9}, -{58,12,-8}, -{58,12,-7}, -{58,12,-6}, -{58,12,-5}, -{58,12,-4}, -{58,12,-3}, -{58,12,-2}, -{58,12,-1}, -{58,12,0}, -{58,12,1}, -{58,12,2}, -{58,12,3}, -{58,12,4}, -{58,12,5}, -{58,12,6}, -{58,12,7}, -{58,12,8}, -{58,12,9}, -{58,12,10}, -{58,12,11}, -{58,12,12}, -{58,12,13}, -{58,12,14}, -{58,12,15}, -{58,12,16}, -{58,12,17}, -{58,12,18}, -{58,12,19}, -{58,12,20}, -{58,12,21}, -{58,12,22}, -{58,12,23}, -{58,12,24}, -{58,12,25}, -{58,12,26}, -{58,12,27}, -{58,12,28}, -{58,12,29}, -{58,12,30}, -{58,12,31}, -{58,12,32}, -{58,12,33}, -{58,12,34}, -{58,12,35}, -{58,12,36}, -{58,12,37}, -{58,12,38}, -{58,12,39}, -{58,12,40}, -{58,12,41}, -{58,12,42}, -{58,12,43}, -{58,12,44}, -{58,12,45}, -{58,12,46}, -{58,12,47}, -{58,12,48}, -{58,12,49}, -{58,12,50}, -{58,12,51}, -{58,12,52}, -{58,12,53}, -{58,12,54}, -{58,12,55}, -{58,12,56}, -{58,12,57}, -{58,12,58}, -{58,12,59}, -{58,12,60}, -{58,12,61}, -{58,12,62}, -{58,12,63}, -{58,13,-65}, -{58,13,-64}, -{58,13,-63}, -{58,13,-62}, -{58,13,-61}, -{58,13,-60}, -{58,13,-59}, -{58,13,-58}, -{58,13,-57}, -{58,13,-56}, -{58,13,-55}, -{58,13,-54}, -{58,13,-53}, -{58,13,-52}, -{58,13,-51}, -{58,13,-50}, -{58,13,-49}, -{58,13,-48}, -{58,13,-47}, -{58,13,-46}, -{58,13,-45}, -{58,13,-44}, -{58,13,-43}, -{58,13,-42}, -{58,13,-41}, -{58,13,-40}, -{58,13,-39}, -{58,13,-38}, -{58,13,-37}, -{58,13,-36}, -{58,13,-35}, -{58,13,-34}, -{58,13,-33}, -{58,13,-32}, -{58,13,-31}, -{58,13,-30}, -{58,13,-29}, -{58,13,-28}, -{58,13,-27}, -{58,13,-26}, -{58,13,-25}, -{58,13,-24}, -{58,13,-23}, -{58,13,-22}, -{58,13,-21}, -{58,13,-20}, -{58,13,-19}, -{58,13,-18}, -{58,13,-17}, -{58,13,-16}, -{58,13,-15}, -{58,13,-14}, -{58,13,-13}, -{58,13,-12}, -{58,13,-11}, -{58,13,-10}, -{58,13,-9}, -{58,13,-8}, -{58,13,-7}, -{58,13,-6}, -{58,13,-5}, -{58,13,-4}, -{58,13,-3}, -{58,13,-2}, -{58,13,-1}, -{58,13,0}, -{58,13,1}, -{58,13,2}, -{58,13,3}, -{58,13,4}, -{58,13,5}, -{58,13,6}, -{58,13,7}, -{58,13,8}, -{58,13,9}, -{58,13,10}, -{58,13,11}, -{58,13,12}, -{58,13,13}, -{58,13,14}, -{58,13,15}, -{58,13,16}, -{58,13,17}, -{58,13,18}, -{58,13,19}, -{58,13,20}, -{58,13,21}, -{58,13,22}, -{58,13,23}, -{58,13,24}, -{58,13,25}, -{58,13,26}, -{58,13,27}, -{58,13,28}, -{58,13,29}, -{58,13,30}, -{58,13,31}, -{58,13,32}, -{58,13,33}, -{58,13,34}, -{58,13,35}, -{58,13,36}, -{58,13,37}, -{58,13,38}, -{58,13,39}, -{58,13,40}, -{58,13,41}, -{58,13,42}, -{58,13,43}, -{58,13,44}, -{58,13,45}, -{58,13,46}, -{58,13,47}, -{58,13,48}, -{58,13,49}, -{58,13,50}, -{58,13,51}, -{58,13,52}, -{58,13,53}, -{58,13,54}, -{58,13,55}, -{58,13,56}, -{58,13,57}, -{58,13,58}, -{58,13,59}, -{58,13,60}, -{58,13,61}, -{58,13,62}, -{58,13,63}, -{58,14,-65}, -{58,14,-64}, -{58,14,-63}, -{58,14,-62}, -{58,14,-61}, -{58,14,-60}, -{58,14,-59}, -{58,14,-58}, -{58,14,-57}, -{58,14,-56}, -{58,14,-55}, -{58,14,-54}, -{58,14,-53}, -{58,14,-52}, -{58,14,-51}, -{58,14,-50}, -{58,14,-49}, -{58,14,-48}, -{58,14,-47}, -{58,14,-46}, -{58,14,-45}, -{58,14,-44}, -{58,14,-43}, -{58,14,-42}, -{58,14,-41}, -{58,14,-40}, -{58,14,-39}, -{58,14,-38}, -{58,14,-37}, -{58,14,-36}, -{58,14,-35}, -{58,14,-34}, -{58,14,-33}, -{58,14,-32}, -{58,14,-31}, -{58,14,-30}, -{58,14,-29}, -{58,14,-28}, -{58,14,-27}, -{58,14,-26}, -{58,14,-25}, -{58,14,-24}, -{58,14,-23}, -{58,14,-22}, -{58,14,-21}, -{58,14,-20}, -{58,14,-19}, -{58,14,-18}, -{58,14,-17}, -{58,14,-16}, -{58,14,-15}, -{58,14,-14}, -{58,14,-13}, -{58,14,-12}, -{58,14,-11}, -{58,14,-10}, -{58,14,-9}, -{58,14,-8}, -{58,14,-7}, -{58,14,-6}, -{58,14,-5}, -{58,14,-4}, -{58,14,-3}, -{58,14,-2}, -{58,14,-1}, -{58,14,0}, -{58,14,1}, -{58,14,2}, -{58,14,3}, -{58,14,4}, -{58,14,5}, -{58,14,6}, -{58,14,7}, -{58,14,8}, -{58,14,9}, -{58,14,10}, -{58,14,11}, -{58,14,12}, -{58,14,13}, -{58,14,14}, -{58,14,15}, -{58,14,16}, -{58,14,17}, -{58,14,18}, -{58,14,19}, -{58,14,20}, -{58,14,21}, -{58,14,22}, -{58,14,23}, -{58,14,24}, -{58,14,25}, -{58,14,26}, -{58,14,27}, -{58,14,28}, -{58,14,29}, -{58,14,30}, -{58,14,31}, -{58,14,32}, -{58,14,33}, -{58,14,34}, -{58,14,35}, -{58,14,36}, -{58,14,37}, -{58,14,38}, -{58,14,39}, -{58,14,40}, -{58,14,41}, -{58,14,42}, -{58,14,43}, -{58,14,44}, -{58,14,45}, -{58,14,46}, -{58,14,47}, -{58,14,48}, -{58,14,49}, -{58,14,50}, -{58,14,51}, -{58,14,52}, -{58,14,53}, -{58,14,54}, -{58,14,55}, -{58,14,56}, -{58,14,57}, -{58,14,58}, -{58,14,59}, -{58,14,60}, -{58,14,61}, -{58,14,62}, -{58,14,63}, -{58,15,-65}, -{58,15,-64}, -{58,15,-63}, -{58,15,-62}, -{58,15,-61}, -{58,15,-60}, -{58,15,-59}, -{58,15,-58}, -{58,15,-57}, -{58,15,-56}, -{58,15,-55}, -{58,15,-54}, -{58,15,-53}, -{58,15,-52}, -{58,15,-51}, -{58,15,-50}, -{58,15,-49}, -{58,15,-48}, -{58,15,-47}, -{58,15,-46}, -{58,15,-45}, -{58,15,-44}, -{58,15,-43}, -{58,15,-42}, -{58,15,-41}, -{58,15,-40}, -{58,15,-39}, -{58,15,-38}, -{58,15,-37}, -{58,15,-36}, -{58,15,-35}, -{58,15,-34}, -{58,15,-33}, -{58,15,-32}, -{58,15,-31}, -{58,15,-30}, -{58,15,-29}, -{58,15,-28}, -{58,15,-27}, -{58,15,-26}, -{58,15,-25}, -{58,15,-24}, -{58,15,-23}, -{58,15,-22}, -{58,15,-21}, -{58,15,-20}, -{58,15,-19}, -{58,15,-18}, -{58,15,-17}, -{58,15,-16}, -{58,15,-15}, -{58,15,-14}, -{58,15,-13}, -{58,15,-12}, -{58,15,-11}, -{58,15,-10}, -{58,15,-9}, -{58,15,-8}, -{58,15,-7}, -{58,15,-6}, -{58,15,-5}, -{58,15,-4}, -{58,15,-3}, -{58,15,-2}, -{58,15,-1}, -{58,15,0}, -{58,15,1}, -{58,15,2}, -{58,15,3}, -{58,15,4}, -{58,15,5}, -{58,15,6}, -{58,15,7}, -{58,15,8}, -{58,15,9}, -{58,15,10}, -{58,15,11}, -{58,15,12}, -{58,15,13}, -{58,15,14}, -{58,15,15}, -{58,15,16}, -{58,15,17}, -{58,15,18}, -{58,15,19}, -{58,15,20}, -{58,15,21}, -{58,15,22}, -{58,15,23}, -{58,15,24}, -{58,15,25}, -{58,15,26}, -{58,15,27}, -{58,15,28}, -{58,15,29}, -{58,15,30}, -{58,15,31}, -{58,15,32}, -{58,15,33}, -{58,15,34}, -{58,15,35}, -{58,15,36}, -{58,15,37}, -{58,15,38}, -{58,15,39}, -{58,15,40}, -{58,15,41}, -{58,15,42}, -{58,15,43}, -{58,15,44}, -{58,15,45}, -{58,15,46}, -{58,15,47}, -{58,15,48}, -{58,15,49}, -{58,15,50}, -{58,15,51}, -{58,15,52}, -{58,15,53}, -{58,15,54}, -{58,15,55}, -{58,15,56}, -{58,15,57}, -{58,15,58}, -{58,15,59}, -{58,15,60}, -{58,15,61}, -{58,15,62}, -{58,15,63}, -{58,15,64}, -{58,16,-65}, -{58,16,-64}, -{58,16,-63}, -{58,16,-62}, -{58,16,-61}, -{58,16,-60}, -{58,16,-59}, -{58,16,-58}, -{58,16,-57}, -{58,16,-56}, -{58,16,-55}, -{58,16,-54}, -{58,16,-53}, -{58,16,-52}, -{58,16,-51}, -{58,16,-50}, -{58,16,-49}, -{58,16,-48}, -{58,16,-47}, -{58,16,-46}, -{58,16,-45}, -{58,16,-44}, -{58,16,-43}, -{58,16,-42}, -{58,16,-41}, -{58,16,-40}, -{58,16,-39}, -{58,16,-38}, -{58,16,-37}, -{58,16,-36}, -{58,16,-35}, -{58,16,-34}, -{58,16,-33}, -{58,16,-32}, -{58,16,-31}, -{58,16,-30}, -{58,16,-29}, -{58,16,-28}, -{58,16,-27}, -{58,16,-26}, -{58,16,-25}, -{58,16,-24}, -{58,16,-23}, -{58,16,-22}, -{58,16,-21}, -{58,16,-20}, -{58,16,-19}, -{58,16,-18}, -{58,16,-17}, -{58,16,-16}, -{58,16,-15}, -{58,16,-14}, -{58,16,-13}, -{58,16,-12}, -{58,16,-11}, -{58,16,-10}, -{58,16,-9}, -{58,16,-8}, -{58,16,-7}, -{58,16,-6}, -{58,16,-5}, -{58,16,-4}, -{58,16,-3}, -{58,16,-2}, -{58,16,-1}, -{58,16,0}, -{58,16,1}, -{58,16,2}, -{58,16,3}, -{58,16,4}, -{58,16,5}, -{58,16,6}, -{58,16,7}, -{58,16,8}, -{58,16,9}, -{58,16,10}, -{58,16,11}, -{58,16,12}, -{58,16,13}, -{58,16,14}, -{58,16,15}, -{58,16,16}, -{58,16,17}, -{58,16,18}, -{58,16,19}, -{58,16,20}, -{58,16,21}, -{58,16,22}, -{58,16,23}, -{58,16,24}, -{58,16,25}, -{58,16,26}, -{58,16,27}, -{58,16,28}, -{58,16,29}, -{58,16,30}, -{58,16,31}, -{58,16,32}, -{58,16,33}, -{58,16,34}, -{58,16,35}, -{58,16,36}, -{58,16,37}, -{58,16,38}, -{58,16,39}, -{58,16,40}, -{58,16,41}, -{58,16,42}, -{58,16,43}, -{58,16,44}, -{58,16,45}, -{58,16,46}, -{58,16,47}, -{58,16,48}, -{58,16,49}, -{58,16,50}, -{58,16,51}, -{58,16,52}, -{58,16,53}, -{58,16,54}, -{58,16,55}, -{58,16,56}, -{58,16,57}, -{58,16,58}, -{58,16,59}, -{58,16,60}, -{58,16,61}, -{58,16,62}, -{58,16,63}, -{58,16,64}, -{58,17,-65}, -{58,17,-64}, -{58,17,-63}, -{58,17,-62}, -{58,17,-61}, -{58,17,-60}, -{58,17,-59}, -{58,17,-58}, -{58,17,-57}, -{58,17,-56}, -{58,17,-55}, -{58,17,-54}, -{58,17,-53}, -{58,17,-52}, -{58,17,-51}, -{58,17,-50}, -{58,17,-49}, -{58,17,-48}, -{58,17,-47}, -{58,17,-46}, -{58,17,-45}, -{58,17,-44}, -{58,17,-43}, -{58,17,-42}, -{58,17,-41}, -{58,17,-40}, -{58,17,-39}, -{58,17,-38}, -{58,17,-37}, -{58,17,-36}, -{58,17,-35}, -{58,17,-34}, -{58,17,-33}, -{58,17,-32}, -{58,17,-31}, -{58,17,-30}, -{58,17,-29}, -{58,17,-28}, -{58,17,-27}, -{58,17,-26}, -{58,17,-25}, -{58,17,-24}, -{58,17,-23}, -{58,17,-22}, -{58,17,-21}, -{58,17,-20}, -{58,17,-19}, -{58,17,-18}, -{58,17,-17}, -{58,17,-16}, -{58,17,-15}, -{58,17,-14}, -{58,17,-13}, -{58,17,-12}, -{58,17,-11}, -{58,17,-10}, -{58,17,-9}, -{58,17,-8}, -{58,17,-7}, -{58,17,-6}, -{58,17,-5}, -{58,17,-4}, -{58,17,-3}, -{58,17,-2}, -{58,17,-1}, -{58,17,0}, -{58,17,1}, -{58,17,2}, -{58,17,3}, -{58,17,4}, -{58,17,5}, -{58,17,6}, -{58,17,7}, -{58,17,8}, -{58,17,9}, -{58,17,10}, -{58,17,11}, -{58,17,12}, -{58,17,13}, -{58,17,14}, -{58,17,15}, -{58,17,16}, -{58,17,17}, -{58,17,18}, -{58,17,19}, -{58,17,20}, -{58,17,21}, -{58,17,22}, -{58,17,23}, -{58,17,24}, -{58,17,25}, -{58,17,26}, -{58,17,27}, -{58,17,28}, -{58,17,29}, -{58,17,30}, -{58,17,31}, -{58,17,32}, -{58,17,33}, -{58,17,34}, -{58,17,35}, -{58,17,36}, -{58,17,37}, -{58,17,38}, -{58,17,39}, -{58,17,40}, -{58,17,41}, -{58,17,42}, -{58,17,43}, -{58,17,44}, -{58,17,45}, -{58,17,46}, -{58,17,47}, -{58,17,48}, -{58,17,49}, -{58,17,50}, -{58,17,51}, -{58,17,52}, -{58,17,53}, -{58,17,54}, -{58,17,55}, -{58,17,56}, -{58,17,57}, -{58,17,58}, -{58,17,59}, -{58,17,60}, -{58,17,61}, -{58,17,62}, -{58,17,63}, -{58,17,64}, -{58,18,-65}, -{58,18,-64}, -{58,18,-63}, -{58,18,-62}, -{58,18,-61}, -{58,18,-60}, -{58,18,-59}, -{58,18,-58}, -{58,18,-57}, -{58,18,-56}, -{58,18,-55}, -{58,18,-54}, -{58,18,-53}, -{58,18,-52}, -{58,18,-51}, -{58,18,-50}, -{58,18,-49}, -{58,18,-48}, -{58,18,-47}, -{58,18,-46}, -{58,18,-45}, -{58,18,-44}, -{58,18,-43}, -{58,18,-42}, -{58,18,-41}, -{58,18,-40}, -{58,18,-39}, -{58,18,-38}, -{58,18,-37}, -{58,18,-36}, -{58,18,-35}, -{58,18,-34}, -{58,18,-33}, -{58,18,-32}, -{58,18,-31}, -{58,18,-30}, -{58,18,-29}, -{58,18,-28}, -{58,18,-27}, -{58,18,-26}, -{58,18,-25}, -{58,18,-24}, -{58,18,-23}, -{58,18,-22}, -{58,18,-21}, -{58,18,-20}, -{58,18,-19}, -{58,18,-18}, -{58,18,-17}, -{58,18,-16}, -{58,18,-15}, -{58,18,-14}, -{58,18,-13}, -{58,18,-12}, -{58,18,-11}, -{58,18,-10}, -{58,18,-9}, -{58,18,-8}, -{58,18,-7}, -{58,18,-6}, -{58,18,-5}, -{58,18,-4}, -{58,18,-3}, -{58,18,-2}, -{58,18,-1}, -{58,18,0}, -{58,18,1}, -{58,18,2}, -{58,18,3}, -{58,18,4}, -{58,18,5}, -{58,18,6}, -{58,18,7}, -{58,18,8}, -{58,18,9}, -{58,18,10}, -{58,18,11}, -{58,18,12}, -{58,18,13}, -{58,18,14}, -{58,18,15}, -{58,18,16}, -{58,18,17}, -{58,18,18}, -{58,18,19}, -{58,18,20}, -{58,18,21}, -{58,18,22}, -{58,18,23}, -{58,18,24}, -{58,18,25}, -{58,18,26}, -{58,18,27}, -{58,18,28}, -{58,18,29}, -{58,18,30}, -{58,18,31}, -{58,18,32}, -{58,18,33}, -{58,18,34}, -{58,18,35}, -{58,18,36}, -{58,18,37}, -{58,18,38}, -{58,18,39}, -{58,18,40}, -{58,18,41}, -{58,18,42}, -{58,18,43}, -{58,18,44}, -{58,18,45}, -{58,18,46}, -{58,18,47}, -{58,18,48}, -{58,18,49}, -{58,18,50}, -{58,18,51}, -{58,18,52}, -{58,18,53}, -{58,18,54}, -{58,18,55}, -{58,18,56}, -{58,18,57}, -{58,18,58}, -{58,18,59}, -{58,18,60}, -{58,18,61}, -{58,18,62}, -{58,18,63}, -{58,18,64}, -{58,19,-65}, -{58,19,-64}, -{58,19,-63}, -{58,19,-62}, -{58,19,-61}, -{58,19,-60}, -{58,19,-59}, -{58,19,-58}, -{58,19,-57}, -{58,19,-56}, -{58,19,-55}, -{58,19,-54}, -{58,19,-53}, -{58,19,-52}, -{58,19,-51}, -{58,19,-50}, -{58,19,-49}, -{58,19,-48}, -{58,19,-47}, -{58,19,-46}, -{58,19,-45}, -{58,19,-44}, -{58,19,-43}, -{58,19,-42}, -{58,19,-41}, -{58,19,-40}, -{58,19,-39}, -{58,19,-38}, -{58,19,-37}, -{58,19,-36}, -{58,19,-35}, -{58,19,-34}, -{58,19,-33}, -{58,19,-32}, -{58,19,-31}, -{58,19,-30}, -{58,19,-29}, -{58,19,-28}, -{58,19,-27}, -{58,19,-26}, -{58,19,-25}, -{58,19,-24}, -{58,19,-23}, -{58,19,-22}, -{58,19,-21}, -{58,19,-20}, -{58,19,-19}, -{58,19,-18}, -{58,19,-17}, -{58,19,-16}, -{58,19,-15}, -{58,19,-14}, -{58,19,-13}, -{58,19,-12}, -{58,19,-11}, -{58,19,-10}, -{58,19,-9}, -{58,19,-8}, -{58,19,-7}, -{58,19,-6}, -{58,19,-5}, -{58,19,-4}, -{58,19,-3}, -{58,19,-2}, -{58,19,-1}, -{58,19,0}, -{58,19,1}, -{58,19,2}, -{58,19,3}, -{58,19,4}, -{58,19,5}, -{58,19,6}, -{58,19,7}, -{58,19,8}, -{58,19,9}, -{58,19,10}, -{58,19,11}, -{58,19,12}, -{58,19,13}, -{58,19,14}, -{58,19,15}, -{58,19,16}, -{58,19,17}, -{58,19,18}, -{58,19,19}, -{58,19,20}, -{58,19,21}, -{58,19,22}, -{58,19,23}, -{58,19,24}, -{58,19,25}, -{58,19,26}, -{58,19,27}, -{58,19,28}, -{58,19,29}, -{58,19,30}, -{58,19,31}, -{58,19,32}, -{58,19,33}, -{58,19,34}, -{58,19,35}, -{58,19,36}, -{58,19,37}, -{58,19,38}, -{58,19,39}, -{58,19,40}, -{58,19,41}, -{58,19,42}, -{58,19,43}, -{58,19,44}, -{58,19,45}, -{58,19,46}, -{58,19,47}, -{58,19,48}, -{58,19,49}, -{58,19,50}, -{58,19,51}, -{58,19,52}, -{58,19,53}, -{58,19,54}, -{58,19,55}, -{58,19,56}, -{58,19,57}, -{58,19,58}, -{58,19,59}, -{58,19,60}, -{58,19,61}, -{58,19,62}, -{58,19,63}, -{58,19,64}, -{58,20,-65}, -{58,20,-64}, -{58,20,-63}, -{58,20,-62}, -{58,20,-61}, -{58,20,-60}, -{58,20,-59}, -{58,20,-58}, -{58,20,-57}, -{58,20,-56}, -{58,20,-55}, -{58,20,-54}, -{58,20,-53}, -{58,20,-52}, -{58,20,-51}, -{58,20,-50}, -{58,20,-49}, -{58,20,-48}, -{58,20,-47}, -{58,20,-46}, -{58,20,-45}, -{58,20,-44}, -{58,20,-43}, -{58,20,-42}, -{58,20,-41}, -{58,20,-40}, -{58,20,-39}, -{58,20,-38}, -{58,20,-37}, -{58,20,-36}, -{58,20,-35}, -{58,20,-34}, -{58,20,-33}, -{58,20,-32}, -{58,20,-31}, -{58,20,-30}, -{58,20,-29}, -{58,20,-28}, -{58,20,-27}, -{58,20,-26}, -{58,20,-25}, -{58,20,-24}, -{58,20,-23}, -{58,20,-22}, -{58,20,-21}, -{58,20,-20}, -{58,20,-19}, -{58,20,-18}, -{58,20,-17}, -{58,20,-16}, -{58,20,-15}, -{58,20,-14}, -{58,20,-13}, -{58,20,-12}, -{58,20,-11}, -{58,20,-10}, -{58,20,-9}, -{58,20,-8}, -{58,20,-7}, -{58,20,-6}, -{58,20,-5}, -{58,20,-4}, -{58,20,-3}, -{58,20,-2}, -{58,20,-1}, -{58,20,0}, -{58,20,1}, -{58,20,2}, -{58,20,3}, -{58,20,4}, -{58,20,5}, -{58,20,6}, -{58,20,7}, -{58,20,8}, -{58,20,9}, -{58,20,10}, -{58,20,11}, -{58,20,12}, -{58,20,13}, -{58,20,14}, -{58,20,15}, -{58,20,16}, -{58,20,17}, -{58,20,18}, -{58,20,19}, -{58,20,20}, -{58,20,21}, -{58,20,22}, -{58,20,23}, -{58,20,24}, -{58,20,25}, -{58,20,26}, -{58,20,27}, -{58,20,28}, -{58,20,29}, -{58,20,30}, -{58,20,31}, -{58,20,32}, -{58,20,33}, -{58,20,34}, -{58,20,35}, -{58,20,36}, -{58,20,37}, -{58,20,38}, -{58,20,39}, -{58,20,40}, -{58,20,41}, -{58,20,42}, -{58,20,43}, -{58,20,44}, -{58,20,45}, -{58,20,46}, -{58,20,47}, -{58,20,48}, -{58,20,49}, -{58,20,50}, -{58,20,51}, -{58,20,52}, -{58,20,53}, -{58,20,54}, -{58,20,55}, -{58,20,56}, -{58,20,57}, -{58,20,58}, -{58,20,59}, -{58,20,60}, -{58,20,61}, -{58,20,62}, -{58,20,63}, -{58,20,64}, -{58,21,-65}, -{58,21,-64}, -{58,21,-63}, -{58,21,-62}, -{58,21,-61}, -{58,21,-60}, -{58,21,-59}, -{58,21,-58}, -{58,21,-57}, -{58,21,-56}, -{58,21,-55}, -{58,21,-54}, -{58,21,-53}, -{58,21,-52}, -{58,21,-51}, -{58,21,-50}, -{58,21,-49}, -{58,21,-48}, -{58,21,-47}, -{58,21,-46}, -{58,21,-45}, -{58,21,-44}, -{58,21,-43}, -{58,21,-42}, -{58,21,-41}, -{58,21,-40}, -{58,21,-39}, -{58,21,-38}, -{58,21,-37}, -{58,21,-36}, -{58,21,-35}, -{58,21,-34}, -{58,21,-33}, -{58,21,-32}, -{58,21,-31}, -{58,21,-30}, -{58,21,-29}, -{58,21,-28}, -{58,21,-27}, -{58,21,-26}, -{58,21,-25}, -{58,21,-24}, -{58,21,-23}, -{58,21,-22}, -{58,21,-21}, -{58,21,-20}, -{58,21,-19}, -{58,21,-18}, -{58,21,-17}, -{58,21,-16}, -{58,21,-15}, -{58,21,-14}, -{58,21,-13}, -{58,21,-12}, -{58,21,-11}, -{58,21,-10}, -{58,21,-9}, -{58,21,-8}, -{58,21,-7}, -{58,21,-6}, -{58,21,-5}, -{58,21,-4}, -{58,21,-3}, -{58,21,-2}, -{58,21,-1}, -{58,21,0}, -{58,21,1}, -{58,21,2}, -{58,21,3}, -{58,21,4}, -{58,21,5}, -{58,21,6}, -{58,21,7}, -{58,21,8}, -{58,21,9}, -{58,21,10}, -{58,21,11}, -{58,21,12}, -{58,21,13}, -{58,21,14}, -{58,21,15}, -{58,21,16}, -{58,21,17}, -{58,21,18}, -{58,21,19}, -{58,21,20}, -{58,21,21}, -{58,21,22}, -{58,21,23}, -{58,21,24}, -{58,21,25}, -{58,21,26}, -{58,21,27}, -{58,21,28}, -{58,21,29}, -{58,21,30}, -{58,21,31}, -{58,21,32}, -{58,21,33}, -{58,21,34}, -{58,21,35}, -{58,21,36}, -{58,21,37}, -{58,21,38}, -{58,21,39}, -{58,21,40}, -{58,21,41}, -{58,21,42}, -{58,21,43}, -{58,21,44}, -{58,21,45}, -{58,21,46}, -{58,21,47}, -{58,21,48}, -{58,21,49}, -{58,21,50}, -{58,21,51}, -{58,21,52}, -{58,21,53}, -{58,21,54}, -{58,21,55}, -{58,21,56}, -{58,21,57}, -{58,21,58}, -{58,21,59}, -{58,21,60}, -{58,21,61}, -{58,21,62}, -{58,21,63}, -{58,21,64}, -{58,22,-65}, -{58,22,-64}, -{58,22,-63}, -{58,22,-62}, -{58,22,-61}, -{58,22,-60}, -{58,22,-59}, -{58,22,-58}, -{58,22,-57}, -{58,22,-56}, -{58,22,-55}, -{58,22,-54}, -{58,22,-53}, -{58,22,-52}, -{58,22,-51}, -{58,22,-50}, -{58,22,-49}, -{58,22,-48}, -{58,22,-47}, -{58,22,-46}, -{58,22,-45}, -{58,22,-44}, -{58,22,-43}, -{58,22,-42}, -{58,22,-41}, -{58,22,-40}, -{58,22,-39}, -{58,22,-38}, -{58,22,-37}, -{58,22,-36}, -{58,22,-35}, -{58,22,-34}, -{58,22,-33}, -{58,22,-32}, -{58,22,-31}, -{58,22,-30}, -{58,22,-29}, -{58,22,-28}, -{58,22,-27}, -{58,22,-26}, -{58,22,-25}, -{58,22,-24}, -{58,22,-23}, -{58,22,-22}, -{58,22,-21}, -{58,22,-20}, -{58,22,-19}, -{58,22,-18}, -{58,22,-17}, -{58,22,-16}, -{58,22,-15}, -{58,22,-14}, -{58,22,-13}, -{58,22,-12}, -{58,22,-11}, -{58,22,-10}, -{58,22,-9}, -{58,22,-8}, -{58,22,-7}, -{58,22,-6}, -{58,22,-5}, -{58,22,-4}, -{58,22,-3}, -{58,22,-2}, -{58,22,-1}, -{58,22,0}, -{58,22,1}, -{58,22,2}, -{58,22,3}, -{58,22,4}, -{58,22,5}, -{58,22,6}, -{58,22,7}, -{58,22,8}, -{58,22,9}, -{58,22,10}, -{58,22,11}, -{58,22,12}, -{58,22,13}, -{58,22,14}, -{58,22,15}, -{58,22,16}, -{58,22,17}, -{58,22,18}, -{58,22,19}, -{58,22,20}, -{58,22,21}, -{58,22,22}, -{58,22,23}, -{58,22,24}, -{58,22,25}, -{58,22,26}, -{58,22,27}, -{58,22,28}, -{58,22,29}, -{58,22,30}, -{58,22,31}, -{58,22,32}, -{58,22,33}, -{58,22,34}, -{58,22,35}, -{58,22,36}, -{58,22,37}, -{58,22,38}, -{58,22,39}, -{58,22,40}, -{58,22,41}, -{58,22,42}, -{58,22,43}, -{58,22,44}, -{58,22,45}, -{58,22,46}, -{58,22,47}, -{58,22,48}, -{58,22,49}, -{58,22,50}, -{58,22,51}, -{58,22,52}, -{58,22,53}, -{58,22,54}, -{58,22,55}, -{58,22,56}, -{58,22,57}, -{58,22,58}, -{58,22,59}, -{58,22,60}, -{58,22,61}, -{58,22,62}, -{58,22,63}, -{58,22,64}, -{58,23,-65}, -{58,23,-64}, -{58,23,-63}, -{58,23,-62}, -{58,23,-61}, -{58,23,-60}, -{58,23,-59}, -{58,23,-58}, -{58,23,-57}, -{58,23,-56}, -{58,23,-55}, -{58,23,-54}, -{58,23,-53}, -{58,23,-52}, -{58,23,-51}, -{58,23,-50}, -{58,23,-49}, -{58,23,-48}, -{58,23,-47}, -{58,23,-46}, -{58,23,-45}, -{58,23,-44}, -{58,23,-43}, -{58,23,-42}, -{58,23,-41}, -{58,23,-40}, -{58,23,-39}, -{58,23,-38}, -{58,23,-37}, -{58,23,-36}, -{58,23,-35}, -{58,23,-34}, -{58,23,-33}, -{58,23,-32}, -{58,23,-31}, -{58,23,-30}, -{58,23,-29}, -{58,23,-28}, -{58,23,-27}, -{58,23,-26}, -{58,23,-25}, -{58,23,-24}, -{58,23,-23}, -{58,23,-22}, -{58,23,-21}, -{58,23,-20}, -{58,23,-19}, -{58,23,-18}, -{58,23,-17}, -{58,23,-16}, -{58,23,-15}, -{58,23,-14}, -{58,23,-13}, -{58,23,-12}, -{58,23,-11}, -{58,23,-10}, -{58,23,-9}, -{58,23,-8}, -{58,23,-7}, -{58,23,-6}, -{58,23,-5}, -{58,23,-4}, -{58,23,-3}, -{58,23,-2}, -{58,23,-1}, -{58,23,0}, -{58,23,1}, -{58,23,2}, -{58,23,3}, -{58,23,4}, -{58,23,5}, -{58,23,6}, -{58,23,7}, -{58,23,8}, -{58,23,9}, -{58,23,10}, -{58,23,11}, -{58,23,12}, -{58,23,13}, -{58,23,14}, -{58,23,15}, -{58,23,16}, -{58,23,17}, -{58,23,18}, -{58,23,19}, -{58,23,20}, -{58,23,21}, -{58,23,22}, -{58,23,23}, -{58,23,24}, -{58,23,25}, -{58,23,26}, -{58,23,27}, -{58,23,28}, -{58,23,29}, -{58,23,30}, -{58,23,31}, -{58,23,32}, -{58,23,33}, -{58,23,34}, -{58,23,35}, -{58,23,36}, -{58,23,37}, -{58,23,38}, -{58,23,39}, -{58,23,40}, -{58,23,41}, -{58,23,42}, -{58,23,43}, -{58,23,44}, -{58,23,45}, -{58,23,46}, -{58,23,47}, -{58,23,48}, -{58,23,49}, -{58,23,50}, -{58,23,51}, -{58,23,52}, -{58,23,53}, -{58,23,54}, -{58,23,55}, -{58,23,56}, -{58,23,57}, -{58,23,58}, -{58,23,59}, -{58,23,60}, -{58,23,61}, -{58,23,62}, -{58,23,63}, -{58,23,64}, -{58,24,-65}, -{58,24,-64}, -{58,24,-63}, -{58,24,-62}, -{58,24,-61}, -{58,24,-60}, -{58,24,-59}, -{58,24,-58}, -{58,24,-57}, -{58,24,-56}, -{58,24,-55}, -{58,24,-54}, -{58,24,-53}, -{58,24,-52}, -{58,24,-51}, -{58,24,-50}, -{58,24,-49}, -{58,24,-48}, -{58,24,-47}, -{58,24,-46}, -{58,24,-45}, -{58,24,-44}, -{58,24,-43}, -{58,24,-42}, -{58,24,-41}, -{58,24,-40}, -{58,24,-39}, -{58,24,-38}, -{58,24,-37}, -{58,24,-36}, -{58,24,-35}, -{58,24,-34}, -{58,24,-33}, -{58,24,-32}, -{58,24,-31}, -{58,24,-30}, -{58,24,-29}, -{58,24,-28}, -{58,24,-27}, -{58,24,-26}, -{58,24,-25}, -{58,24,-24}, -{58,24,-23}, -{58,24,-22}, -{58,24,-21}, -{58,24,-20}, -{58,24,-19}, -{58,24,-18}, -{58,24,-17}, -{58,24,-16}, -{58,24,-15}, -{58,24,-14}, -{58,24,-13}, -{58,24,-12}, -{58,24,-11}, -{58,24,-10}, -{58,24,-9}, -{58,24,-8}, -{58,24,-7}, -{58,24,-6}, -{58,24,-5}, -{58,24,-4}, -{58,24,-3}, -{58,24,-2}, -{58,24,-1}, -{58,24,0}, -{58,24,1}, -{58,24,2}, -{58,24,3}, -{58,24,4}, -{58,24,5}, -{58,24,6}, -{58,24,7}, -{58,24,8}, -{58,24,9}, -{58,24,10}, -{58,24,11}, -{58,24,12}, -{58,24,13}, -{58,24,14}, -{58,24,15}, -{58,24,16}, -{58,24,17}, -{58,24,18}, -{58,24,19}, -{58,24,20}, -{58,24,21}, -{58,24,22}, -{58,24,23}, -{58,24,24}, -{58,24,25}, -{58,24,26}, -{58,24,27}, -{58,24,28}, -{58,24,29}, -{58,24,30}, -{58,24,31}, -{58,24,32}, -{58,24,33}, -{58,24,34}, -{58,24,35}, -{58,24,36}, -{58,24,37}, -{58,24,38}, -{58,24,39}, -{58,24,40}, -{58,24,41}, -{58,24,42}, -{58,24,43}, -{58,24,44}, -{58,24,45}, -{58,24,46}, -{58,24,47}, -{58,24,48}, -{58,24,49}, -{58,24,50}, -{58,24,51}, -{58,24,52}, -{58,24,53}, -{58,24,54}, -{58,24,55}, -{58,24,56}, -{58,24,57}, -{58,24,58}, -{58,24,59}, -{58,24,60}, -{58,24,61}, -{58,24,62}, -{58,24,63}, -{58,24,64}, -{58,25,-65}, -{58,25,-64}, -{58,25,-63}, -{58,25,-62}, -{58,25,-61}, -{58,25,-60}, -{58,25,-59}, -{58,25,-58}, -{58,25,-57}, -{58,25,-56}, -{58,25,-55}, -{58,25,-54}, -{58,25,-53}, -{58,25,-52}, -{58,25,-51}, -{58,25,-50}, -{58,25,-49}, -{58,25,-48}, -{58,25,-47}, -{58,25,-46}, -{58,25,-45}, -{58,25,-44}, -{58,25,-43}, -{58,25,-42}, -{58,25,-41}, -{58,25,-40}, -{58,25,-39}, -{58,25,-38}, -{58,25,-37}, -{58,25,-36}, -{58,25,-35}, -{58,25,-34}, -{58,25,-33}, -{58,25,-32}, -{58,25,-31}, -{58,25,-30}, -{58,25,-29}, -{58,25,-28}, -{58,25,-27}, -{58,25,-26}, -{58,25,-25}, -{58,25,-24}, -{58,25,-23}, -{58,25,-22}, -{58,25,-21}, -{58,25,-20}, -{58,25,-19}, -{58,25,-18}, -{58,25,-17}, -{58,25,-16}, -{58,25,-15}, -{58,25,-14}, -{58,25,-13}, -{58,25,-12}, -{58,25,-11}, -{58,25,-10}, -{58,25,-9}, -{58,25,-8}, -{58,25,-7}, -{58,25,-6}, -{58,25,-5}, -{58,25,-4}, -{58,25,-3}, -{58,25,-2}, -{58,25,-1}, -{58,25,0}, -{58,25,1}, -{58,25,2}, -{58,25,3}, -{58,25,4}, -{58,25,5}, -{58,25,6}, -{58,25,7}, -{58,25,8}, -{58,25,9}, -{58,25,10}, -{58,25,11}, -{58,25,12}, -{58,25,13}, -{58,25,14}, -{58,25,15}, -{58,25,16}, -{58,25,17}, -{58,25,18}, -{58,25,19}, -{58,25,20}, -{58,25,21}, -{58,25,22}, -{58,25,23}, -{58,25,24}, -{58,25,25}, -{58,25,26}, -{58,25,27}, -{58,25,28}, -{58,25,29}, -{58,25,30}, -{58,25,31}, -{58,25,32}, -{58,25,33}, -{58,25,34}, -{58,25,35}, -{58,25,36}, -{58,25,37}, -{58,25,38}, -{58,25,39}, -{58,25,40}, -{58,25,41}, -{58,25,42}, -{58,25,43}, -{58,25,44}, -{58,25,45}, -{58,25,46}, -{58,25,47}, -{58,25,48}, -{58,25,49}, -{58,25,50}, -{58,25,51}, -{58,25,52}, -{58,25,53}, -{58,25,54}, -{58,25,55}, -{58,25,56}, -{58,25,57}, -{58,25,58}, -{58,25,59}, -{58,25,60}, -{58,25,61}, -{58,25,62}, -{58,25,63}, -{58,25,64}, -{58,26,-65}, -{58,26,-64}, -{58,26,-63}, -{58,26,-62}, -{58,26,-61}, -{58,26,-60}, -{58,26,-59}, -{58,26,-58}, -{58,26,-57}, -{58,26,-56}, -{58,26,-55}, -{58,26,-54}, -{58,26,-53}, -{58,26,-52}, -{58,26,-51}, -{58,26,-50}, -{58,26,-49}, -{58,26,-48}, -{58,26,-47}, -{58,26,-46}, -{58,26,-45}, -{58,26,-44}, -{58,26,-43}, -{58,26,-42}, -{58,26,-41}, -{58,26,-40}, -{58,26,-39}, -{58,26,-38}, -{58,26,-37}, -{58,26,-36}, -{58,26,-35}, -{58,26,-34}, -{58,26,-33}, -{58,26,-32}, -{58,26,-31}, -{58,26,-30}, -{58,26,-29}, -{58,26,-28}, -{58,26,-27}, -{58,26,-26}, -{58,26,-25}, -{58,26,-24}, -{58,26,-23}, -{58,26,-22}, -{58,26,-21}, -{58,26,-20}, -{58,26,-19}, -{58,26,-18}, -{58,26,-17}, -{58,26,-16}, -{58,26,-15}, -{58,26,-14}, -{58,26,-13}, -{58,26,-12}, -{58,26,-11}, -{58,26,-10}, -{58,26,-9}, -{58,26,-8}, -{58,26,-7}, -{58,26,-6}, -{58,26,-5}, -{58,26,-4}, -{58,26,-3}, -{58,26,-2}, -{58,26,-1}, -{58,26,0}, -{58,26,1}, -{58,26,2}, -{58,26,3}, -{58,26,4}, -{58,26,5}, -{58,26,6}, -{58,26,7}, -{58,26,8}, -{58,26,9}, -{58,26,10}, -{58,26,11}, -{58,26,12}, -{58,26,13}, -{58,26,14}, -{58,26,15}, -{58,26,16}, -{58,26,17}, -{58,26,18}, -{58,26,19}, -{58,26,20}, -{58,26,21}, -{58,26,22}, -{58,26,23}, -{58,26,24}, -{58,26,25}, -{58,26,26}, -{58,26,27}, -{58,26,28}, -{58,26,29}, -{58,26,30}, -{58,26,31}, -{58,26,32}, -{58,26,33}, -{58,26,34}, -{58,26,35}, -{58,26,36}, -{58,26,37}, -{58,26,38}, -{58,26,39}, -{58,26,40}, -{58,26,41}, -{58,26,42}, -{58,26,43}, -{58,26,44}, -{58,26,45}, -{58,26,46}, -{58,26,47}, -{58,26,48}, -{58,26,49}, -{58,26,50}, -{58,26,51}, -{58,26,52}, -{58,26,53}, -{58,26,54}, -{58,26,55}, -{58,26,56}, -{58,26,57}, -{58,26,58}, -{58,26,59}, -{58,26,60}, -{58,26,61}, -{58,26,62}, -{58,26,63}, -{58,26,64}, -{58,26,65}, -{58,27,-65}, -{58,27,-64}, -{58,27,-63}, -{58,27,-62}, -{58,27,-61}, -{58,27,-60}, -{58,27,-59}, -{58,27,-58}, -{58,27,-57}, -{58,27,-56}, -{58,27,-55}, -{58,27,-54}, -{58,27,-53}, -{58,27,-52}, -{58,27,-51}, -{58,27,-50}, -{58,27,-49}, -{58,27,-48}, -{58,27,-47}, -{58,27,-46}, -{58,27,-45}, -{58,27,-44}, -{58,27,-43}, -{58,27,-42}, -{58,27,-41}, -{58,27,-40}, -{58,27,-39}, -{58,27,-38}, -{58,27,-37}, -{58,27,-36}, -{58,27,-35}, -{58,27,-34}, -{58,27,-33}, -{58,27,-32}, -{58,27,-31}, -{58,27,-30}, -{58,27,-29}, -{58,27,-28}, -{58,27,-27}, -{58,27,-26}, -{58,27,-25}, -{58,27,-24}, -{58,27,-23}, -{58,27,-22}, -{58,27,-21}, -{58,27,-20}, -{58,27,-19}, -{58,27,-18}, -{58,27,-17}, -{58,27,-16}, -{58,27,-15}, -{58,27,-14}, -{58,27,-13}, -{58,27,-12}, -{58,27,-11}, -{58,27,-10}, -{58,27,-9}, -{58,27,-8}, -{58,27,-7}, -{58,27,-6}, -{58,27,-5}, -{58,27,-4}, -{58,27,-3}, -{58,27,-2}, -{58,27,-1}, -{58,27,0}, -{58,27,1}, -{58,27,2}, -{58,27,3}, -{58,27,4}, -{58,27,5}, -{58,27,6}, -{58,27,7}, -{58,27,8}, -{58,27,9}, -{58,27,10}, -{58,27,11}, -{58,27,12}, -{58,27,13}, -{58,27,14}, -{58,27,15}, -{58,27,16}, -{58,27,17}, -{58,27,18}, -{58,27,19}, -{58,27,20}, -{58,27,21}, -{58,27,22}, -{58,27,23}, -{58,27,24}, -{58,27,25}, -{58,27,26}, -{58,27,27}, -{58,27,28}, -{58,27,29}, -{58,27,30}, -{58,27,31}, -{58,27,32}, -{58,27,33}, -{58,27,34}, -{58,27,35}, -{58,27,36}, -{58,27,37}, -{58,27,38}, -{58,27,39}, -{58,27,40}, -{58,27,41}, -{58,27,42}, -{58,27,43}, -{58,27,44}, -{58,27,45}, -{58,27,46}, -{58,27,47}, -{58,27,48}, -{58,27,49}, -{58,27,50}, -{58,27,51}, -{58,27,52}, -{58,27,53}, -{58,27,54}, -{58,27,55}, -{58,27,56}, -{58,27,57}, -{58,27,58}, -{58,27,59}, -{58,27,60}, -{58,27,61}, -{58,27,62}, -{58,27,63}, -{58,27,64}, -{58,27,65}, -{58,28,-65}, -{58,28,-64}, -{58,28,-63}, -{58,28,-62}, -{58,28,-61}, -{58,28,-60}, -{58,28,-59}, -{58,28,-58}, -{58,28,-57}, -{58,28,-56}, -{58,28,-55}, -{58,28,-54}, -{58,28,-53}, -{58,28,-52}, -{58,28,-51}, -{58,28,-50}, -{58,28,-49}, -{58,28,-48}, -{58,28,-47}, -{58,28,-46}, -{58,28,-45}, -{58,28,-44}, -{58,28,-43}, -{58,28,-42}, -{58,28,-41}, -{58,28,-40}, -{58,28,-39}, -{58,28,-38}, -{58,28,-37}, -{58,28,-36}, -{58,28,-35}, -{58,28,-34}, -{58,28,-33}, -{58,28,-32}, -{58,28,-31}, -{58,28,-30}, -{58,28,-29}, -{58,28,-28}, -{58,28,-27}, -{58,28,-26}, -{58,28,-25}, -{58,28,-24}, -{58,28,-23}, -{58,28,-22}, -{58,28,-21}, -{58,28,-20}, -{58,28,-19}, -{58,28,-18}, -{58,28,-17}, -{58,28,-16}, -{58,28,-15}, -{58,28,-14}, -{58,28,-13}, -{58,28,-12}, -{58,28,-11}, -{58,28,-10}, -{58,28,-9}, -{58,28,-8}, -{58,28,-7}, -{58,28,-6}, -{58,28,-5}, -{58,28,-4}, -{58,28,-3}, -{58,28,-2}, -{58,28,-1}, -{58,28,0}, -{58,28,1}, -{58,28,2}, -{58,28,3}, -{58,28,4}, -{58,28,5}, -{58,28,6}, -{58,28,7}, -{58,28,8}, -{58,28,9}, -{58,28,10}, -{58,28,11}, -{58,28,12}, -{58,28,13}, -{58,28,14}, -{58,28,15}, -{58,28,16}, -{58,28,17}, -{58,28,18}, -{58,28,19}, -{58,28,20}, -{58,28,21}, -{58,28,22}, -{58,28,23}, -{58,28,24}, -{58,28,25}, -{58,28,26}, -{58,28,27}, -{58,28,28}, -{58,28,29}, -{58,28,30}, -{58,28,31}, -{58,28,32}, -{58,28,33}, -{58,28,34}, -{58,28,35}, -{58,28,36}, -{58,28,37}, -{58,28,38}, -{58,28,39}, -{58,28,40}, -{58,28,41}, -{58,28,42}, -{58,28,43}, -{58,28,44}, -{58,28,45}, -{58,28,46}, -{58,28,47}, -{58,28,48}, -{58,28,49}, -{58,28,50}, -{58,28,51}, -{58,28,52}, -{58,28,53}, -{58,28,54}, -{58,28,55}, -{58,28,56}, -{58,28,57}, -{58,28,58}, -{58,28,59}, -{58,28,60}, -{58,28,61}, -{58,28,62}, -{58,28,63}, -{58,28,64}, -{58,28,65}, -{58,29,-65}, -{58,29,-64}, -{58,29,-63}, -{58,29,-62}, -{58,29,-61}, -{58,29,-60}, -{58,29,-59}, -{58,29,-58}, -{58,29,-57}, -{58,29,-56}, -{58,29,-55}, -{58,29,-54}, -{58,29,-53}, -{58,29,-52}, -{58,29,-51}, -{58,29,-50}, -{58,29,-49}, -{58,29,-48}, -{58,29,-47}, -{58,29,-46}, -{58,29,-45}, -{58,29,-44}, -{58,29,-43}, -{58,29,-42}, -{58,29,-41}, -{58,29,-40}, -{58,29,-39}, -{58,29,-38}, -{58,29,-37}, -{58,29,-36}, -{58,29,-35}, -{58,29,-34}, -{58,29,-33}, -{58,29,-32}, -{58,29,-31}, -{58,29,-30}, -{58,29,-29}, -{58,29,-28}, -{58,29,-27}, -{58,29,-26}, -{58,29,-25}, -{58,29,-24}, -{58,29,-23}, -{58,29,-22}, -{58,29,-21}, -{58,29,-20}, -{58,29,-19}, -{58,29,-18}, -{58,29,-17}, -{58,29,-16}, -{58,29,-15}, -{58,29,-14}, -{58,29,-13}, -{58,29,-12}, -{58,29,-11}, -{58,29,-10}, -{58,29,-9}, -{58,29,-8}, -{58,29,-7}, -{58,29,-6}, -{58,29,-5}, -{58,29,-4}, -{58,29,-3}, -{58,29,-2}, -{58,29,-1}, -{58,29,0}, -{58,29,1}, -{58,29,2}, -{58,29,3}, -{58,29,4}, -{58,29,5}, -{58,29,6}, -{58,29,7}, -{58,29,8}, -{58,29,9}, -{58,29,10}, -{58,29,11}, -{58,29,12}, -{58,29,13}, -{58,29,14}, -{58,29,15}, -{58,29,16}, -{58,29,17}, -{58,29,18}, -{58,29,19}, -{58,29,20}, -{58,29,21}, -{58,29,22}, -{58,29,23}, -{58,29,24}, -{58,29,25}, -{58,29,26}, -{58,29,27}, -{58,29,28}, -{58,29,29}, -{58,29,30}, -{58,29,31}, -{58,29,32}, -{58,29,33}, -{58,29,34}, -{58,29,35}, -{58,29,36}, -{58,29,37}, -{58,29,38}, -{58,29,39}, -{58,29,40}, -{58,29,41}, -{58,29,42}, -{58,29,43}, -{58,29,44}, -{58,29,45}, -{58,29,46}, -{58,29,47}, -{58,29,48}, -{58,29,49}, -{58,29,50}, -{58,29,51}, -{58,29,52}, -{58,29,53}, -{58,29,54}, -{58,29,55}, -{58,29,56}, -{58,29,57}, -{58,29,58}, -{58,29,59}, -{58,29,60}, -{58,29,61}, -{58,29,62}, -{58,29,63}, -{58,29,64}, -{58,29,65}, -{58,30,-65}, -{58,30,-64}, -{58,30,-63}, -{58,30,-62}, -{58,30,-61}, -{58,30,-60}, -{58,30,-59}, -{58,30,-58}, -{58,30,-57}, -{58,30,-56}, -{58,30,-55}, -{58,30,-54}, -{58,30,-53}, -{58,30,-52}, -{58,30,-51}, -{58,30,-50}, -{58,30,-49}, -{58,30,-48}, -{58,30,-47}, -{58,30,-46}, -{58,30,-45}, -{58,30,-44}, -{58,30,-43}, -{58,30,-42}, -{58,30,-41}, -{58,30,-40}, -{58,30,-39}, -{58,30,-38}, -{58,30,-37}, -{58,30,-36}, -{58,30,-35}, -{58,30,-34}, -{58,30,-33}, -{58,30,-32}, -{58,30,-31}, -{58,30,-30}, -{58,30,-29}, -{58,30,-28}, -{58,30,-27}, -{58,30,-26}, -{58,30,-25}, -{58,30,-24}, -{58,30,-23}, -{58,30,-22}, -{58,30,-21}, -{58,30,-20}, -{58,30,-19}, -{58,30,-18}, -{58,30,-17}, -{58,30,-16}, -{58,30,-15}, -{58,30,-14}, -{58,30,-13}, -{58,30,-12}, -{58,30,-11}, -{58,30,-10}, -{58,30,-9}, -{58,30,-8}, -{58,30,-7}, -{58,30,-6}, -{58,30,-5}, -{58,30,-4}, -{58,30,-3}, -{58,30,-2}, -{58,30,-1}, -{58,30,0}, -{58,30,1}, -{58,30,2}, -{58,30,3}, -{58,30,4}, -{58,30,5}, -{58,30,6}, -{58,30,7}, -{58,30,8}, -{58,30,9}, -{58,30,10}, -{58,30,11}, -{58,30,12}, -{58,30,13}, -{58,30,14}, -{58,30,15}, -{58,30,16}, -{58,30,17}, -{58,30,18}, -{58,30,19}, -{58,30,20}, -{58,30,21}, -{58,30,22}, -{58,30,23}, -{58,30,24}, -{58,30,25}, -{58,30,26}, -{58,30,27}, -{58,30,28}, -{58,30,29}, -{58,30,30}, -{58,30,31}, -{58,30,32}, -{58,30,33}, -{58,30,34}, -{58,30,35}, -{58,30,36}, -{58,30,37}, -{58,30,38}, -{58,30,39}, -{58,30,40}, -{58,30,41}, -{58,30,42}, -{58,30,43}, -{58,30,44}, -{58,30,45}, -{58,30,46}, -{58,30,47}, -{58,30,48}, -{58,30,49}, -{58,30,50}, -{58,30,51}, -{58,30,52}, -{58,30,53}, -{58,30,54}, -{58,30,55}, -{58,30,56}, -{58,30,57}, -{58,30,58}, -{58,30,59}, -{58,30,60}, -{58,30,61}, -{58,30,62}, -{58,30,63}, -{58,30,64}, -{58,30,65}, -{58,31,-65}, -{58,31,-64}, -{58,31,-63}, -{58,31,-62}, -{58,31,-61}, -{58,31,-60}, -{58,31,-59}, -{58,31,-58}, -{58,31,-57}, -{58,31,-56}, -{58,31,-55}, -{58,31,-54}, -{58,31,-53}, -{58,31,-52}, -{58,31,-51}, -{58,31,-50}, -{58,31,-49}, -{58,31,-48}, -{58,31,-47}, -{58,31,-46}, -{58,31,-45}, -{58,31,-44}, -{58,31,-43}, -{58,31,-42}, -{58,31,-41}, -{58,31,-40}, -{58,31,-39}, -{58,31,-38}, -{58,31,-37}, -{58,31,-36}, -{58,31,-35}, -{58,31,-34}, -{58,31,-33}, -{58,31,-32}, -{58,31,-31}, -{58,31,-30}, -{58,31,-29}, -{58,31,-28}, -{58,31,-27}, -{58,31,-26}, -{58,31,-25}, -{58,31,-24}, -{58,31,-23}, -{58,31,-22}, -{58,31,-21}, -{58,31,-20}, -{58,31,-19}, -{58,31,-18}, -{58,31,-17}, -{58,31,-16}, -{58,31,-15}, -{58,31,-14}, -{58,31,-13}, -{58,31,-12}, -{58,31,-11}, -{58,31,-10}, -{58,31,-9}, -{58,31,-8}, -{58,31,-7}, -{58,31,-6}, -{58,31,-5}, -{58,31,-4}, -{58,31,-3}, -{58,31,-2}, -{58,31,-1}, -{58,31,0}, -{58,31,1}, -{58,31,2}, -{58,31,3}, -{58,31,4}, -{58,31,5}, -{58,31,6}, -{58,31,7}, -{58,31,8}, -{58,31,9}, -{58,31,10}, -{58,31,11}, -{58,31,12}, -{58,31,13}, -{58,31,14}, -{58,31,15}, -{58,31,16}, -{58,31,17}, -{58,31,18}, -{58,31,19}, -{58,31,20}, -{58,31,21}, -{58,31,22}, -{58,31,23}, -{58,31,24}, -{58,31,25}, -{58,31,26}, -{58,31,27}, -{58,31,28}, -{58,31,29}, -{58,31,30}, -{58,31,31}, -{58,31,32}, -{58,31,33}, -{58,31,34}, -{58,31,35}, -{58,31,36}, -{58,31,37}, -{58,31,38}, -{58,31,39}, -{58,31,40}, -{58,31,41}, -{58,31,42}, -{58,31,43}, -{58,31,44}, -{58,31,45}, -{58,31,46}, -{58,31,47}, -{58,31,48}, -{58,31,49}, -{58,31,50}, -{58,31,51}, -{58,31,52}, -{58,31,53}, -{58,31,54}, -{58,31,55}, -{58,31,56}, -{58,31,57}, -{58,31,58}, -{58,31,59}, -{58,31,60}, -{58,31,61}, -{58,31,62}, -{58,31,63}, -{58,31,64}, -{58,31,65}, -{58,32,-65}, -{58,32,-64}, -{58,32,-63}, -{58,32,-62}, -{58,32,-61}, -{58,32,-60}, -{58,32,-59}, -{58,32,-58}, -{58,32,-57}, -{58,32,-56}, -{58,32,-55}, -{58,32,-54}, -{58,32,-53}, -{58,32,-52}, -{58,32,-51}, -{58,32,-50}, -{58,32,-49}, -{58,32,-48}, -{58,32,-47}, -{58,32,-46}, -{58,32,-45}, -{58,32,-44}, -{58,32,-43}, -{58,32,-42}, -{58,32,-41}, -{58,32,-40}, -{58,32,-39}, -{58,32,-38}, -{58,32,-37}, -{58,32,-36}, -{58,32,-35}, -{58,32,-34}, -{58,32,-33}, -{58,32,-32}, -{58,32,-31}, -{58,32,-30}, -{58,32,-29}, -{58,32,-28}, -{58,32,-27}, -{58,32,-26}, -{58,32,-25}, -{58,32,-24}, -{58,32,-23}, -{58,32,-22}, -{58,32,-21}, -{58,32,-20}, -{58,32,-19}, -{58,32,-18}, -{58,32,-17}, -{58,32,-16}, -{58,32,-15}, -{58,32,-14}, -{58,32,-13}, -{58,32,-12}, -{58,32,-11}, -{58,32,-10}, -{58,32,-9}, -{58,32,-8}, -{58,32,-7}, -{58,32,-6}, -{58,32,-5}, -{58,32,-4}, -{58,32,-3}, -{58,32,-2}, -{58,32,-1}, -{58,32,0}, -{58,32,1}, -{58,32,2}, -{58,32,3}, -{58,32,4}, -{58,32,5}, -{58,32,6}, -{58,32,7}, -{58,32,8}, -{58,32,9}, -{58,32,10}, -{58,32,11}, -{58,32,12}, -{58,32,13}, -{58,32,14}, -{58,32,15}, -{58,32,16}, -{58,32,17}, -{58,32,18}, -{58,32,19}, -{58,32,20}, -{58,32,21}, -{58,32,22}, -{58,32,23}, -{58,32,24}, -{58,32,25}, -{58,32,26}, -{58,32,27}, -{58,32,28}, -{58,32,29}, -{58,32,30}, -{58,32,31}, -{58,32,32}, -{58,32,33}, -{58,32,34}, -{58,32,35}, -{58,32,36}, -{58,32,37}, -{58,32,38}, -{58,32,39}, -{58,32,40}, -{58,32,41}, -{58,32,42}, -{58,32,43}, -{58,32,44}, -{58,32,45}, -{58,32,46}, -{58,32,47}, -{58,32,48}, -{58,32,49}, -{58,32,50}, -{58,32,51}, -{58,32,52}, -{58,32,53}, -{58,32,54}, -{58,32,55}, -{58,32,56}, -{58,32,57}, -{58,32,58}, -{58,32,59}, -{58,32,60}, -{58,32,61}, -{58,32,62}, -{58,32,63}, -{58,32,64}, -{58,32,65}, -{58,33,-65}, -{58,33,-64}, -{58,33,-63}, -{58,33,-62}, -{58,33,-61}, -{58,33,-60}, -{58,33,-59}, -{58,33,-58}, -{58,33,-57}, -{58,33,-56}, -{58,33,-55}, -{58,33,-54}, -{58,33,-53}, -{58,33,-52}, -{58,33,-51}, -{58,33,-50}, -{58,33,-49}, -{58,33,-48}, -{58,33,-47}, -{58,33,-46}, -{58,33,-45}, -{58,33,-44}, -{58,33,-43}, -{58,33,-42}, -{58,33,-41}, -{58,33,-40}, -{58,33,-39}, -{58,33,-38}, -{58,33,-37}, -{58,33,-36}, -{58,33,-35}, -{58,33,-34}, -{58,33,-33}, -{58,33,-32}, -{58,33,-31}, -{58,33,-30}, -{58,33,-29}, -{58,33,-28}, -{58,33,-27}, -{58,33,-26}, -{58,33,-25}, -{58,33,-24}, -{58,33,-23}, -{58,33,-22}, -{58,33,-21}, -{58,33,-20}, -{58,33,-19}, -{58,33,-18}, -{58,33,-17}, -{58,33,-16}, -{58,33,-15}, -{58,33,-14}, -{58,33,-13}, -{58,33,-12}, -{58,33,-11}, -{58,33,-10}, -{58,33,-9}, -{58,33,-8}, -{58,33,-7}, -{58,33,-6}, -{58,33,-5}, -{58,33,-4}, -{58,33,-3}, -{58,33,-2}, -{58,33,-1}, -{58,33,0}, -{58,33,1}, -{58,33,2}, -{58,33,3}, -{58,33,4}, -{58,33,5}, -{58,33,6}, -{58,33,7}, -{58,33,8}, -{58,33,9}, -{58,33,10}, -{58,33,11}, -{58,33,12}, -{58,33,13}, -{58,33,14}, -{58,33,15}, -{58,33,16}, -{58,33,17}, -{58,33,18}, -{58,33,19}, -{58,33,20}, -{58,33,21}, -{58,33,22}, -{58,33,23}, -{58,33,24}, -{58,33,25}, -{58,33,26}, -{58,33,27}, -{58,33,28}, -{58,33,29}, -{58,33,30}, -{58,33,31}, -{58,33,32}, -{58,33,33}, -{58,33,34}, -{58,33,35}, -{58,33,36}, -{58,33,37}, -{58,33,38}, -{58,33,39}, -{58,33,40}, -{58,33,41}, -{58,33,42}, -{58,33,43}, -{58,33,44}, -{58,33,45}, -{58,33,46}, -{58,33,47}, -{58,33,48}, -{58,33,49}, -{58,33,50}, -{58,33,51}, -{58,33,52}, -{58,33,53}, -{58,33,54}, -{58,33,55}, -{58,33,56}, -{58,33,57}, -{58,33,58}, -{58,33,59}, -{58,33,60}, -{58,33,61}, -{58,33,62}, -{58,33,63}, -{58,33,64}, -{58,33,65}, -{58,34,-65}, -{58,34,-64}, -{58,34,-63}, -{58,34,-62}, -{58,34,-61}, -{58,34,-60}, -{58,34,-59}, -{58,34,-58}, -{58,34,-57}, -{58,34,-56}, -{58,34,-55}, -{58,34,-54}, -{58,34,-53}, -{58,34,-52}, -{58,34,-51}, -{58,34,-50}, -{58,34,-49}, -{58,34,-48}, -{58,34,-47}, -{58,34,-46}, -{58,34,-45}, -{58,34,-44}, -{58,34,-43}, -{58,34,-42}, -{58,34,-41}, -{58,34,-40}, -{58,34,-39}, -{58,34,-38}, -{58,34,-37}, -{58,34,-36}, -{58,34,-35}, -{58,34,-34}, -{58,34,-33}, -{58,34,-32}, -{58,34,-31}, -{58,34,-30}, -{58,34,-29}, -{58,34,-28}, -{58,34,-27}, -{58,34,-26}, -{58,34,-25}, -{58,34,-24}, -{58,34,-23}, -{58,34,-22}, -{58,34,-21}, -{58,34,-20}, -{58,34,-19}, -{58,34,-18}, -{58,34,-17}, -{58,34,-16}, -{58,34,-15}, -{58,34,-14}, -{58,34,-13}, -{58,34,-12}, -{58,34,-11}, -{58,34,-10}, -{58,34,-9}, -{58,34,-8}, -{58,34,-7}, -{58,34,-6}, -{58,34,-5}, -{58,34,-4}, -{58,34,-3}, -{58,34,-2}, -{58,34,-1}, -{58,34,0}, -{58,34,1}, -{58,34,2}, -{58,34,3}, -{58,34,4}, -{58,34,5}, -{58,34,6}, -{58,34,7}, -{58,34,8}, -{58,34,9}, -{58,34,10}, -{58,34,11}, -{58,34,12}, -{58,34,13}, -{58,34,14}, -{58,34,15}, -{58,34,16}, -{58,34,17}, -{58,34,18}, -{58,34,19}, -{58,34,20}, -{58,34,21}, -{58,34,22}, -{58,34,23}, -{58,34,24}, -{58,34,25}, -{58,34,26}, -{58,34,27}, -{58,34,28}, -{58,34,29}, -{58,34,30}, -{58,34,31}, -{58,34,32}, -{58,34,33}, -{58,34,34}, -{58,34,35}, -{58,34,36}, -{58,34,37}, -{58,34,38}, -{58,34,39}, -{58,34,40}, -{58,34,41}, -{58,34,42}, -{58,34,43}, -{58,34,44}, -{58,34,45}, -{58,34,46}, -{58,34,47}, -{58,34,48}, -{58,34,49}, -{58,34,50}, -{58,34,51}, -{58,34,52}, -{58,34,53}, -{58,34,54}, -{58,34,55}, -{58,34,56}, -{58,34,57}, -{58,34,58}, -{58,34,59}, -{58,34,60}, -{58,34,61}, -{58,34,62}, -{58,34,63}, -{58,34,64}, -{58,34,65}, -{58,35,-65}, -{58,35,-64}, -{58,35,-63}, -{58,35,-62}, -{58,35,-61}, -{58,35,-60}, -{58,35,-59}, -{58,35,-58}, -{58,35,-57}, -{58,35,-56}, -{58,35,-55}, -{58,35,-54}, -{58,35,-53}, -{58,35,-52}, -{58,35,-51}, -{58,35,-50}, -{58,35,-49}, -{58,35,-48}, -{58,35,-47}, -{58,35,-46}, -{58,35,-45}, -{58,35,-44}, -{58,35,-43}, -{58,35,-42}, -{58,35,-41}, -{58,35,-40}, -{58,35,-39}, -{58,35,-38}, -{58,35,-37}, -{58,35,-36}, -{58,35,-35}, -{58,35,-34}, -{58,35,-33}, -{58,35,-32}, -{58,35,-31}, -{58,35,-30}, -{58,35,-29}, -{58,35,-28}, -{58,35,-27}, -{58,35,-26}, -{58,35,-25}, -{58,35,-24}, -{58,35,-23}, -{58,35,-22}, -{58,35,-21}, -{58,35,-20}, -{58,35,-19}, -{58,35,-18}, -{58,35,-17}, -{58,35,-16}, -{58,35,-15}, -{58,35,-14}, -{58,35,-13}, -{58,35,-12}, -{58,35,-11}, -{58,35,-10}, -{58,35,-9}, -{58,35,-8}, -{58,35,-7}, -{58,35,-6}, -{58,35,-5}, -{58,35,-4}, -{58,35,-3}, -{58,35,-2}, -{58,35,-1}, -{58,35,0}, -{58,35,1}, -{58,35,2}, -{58,35,3}, -{58,35,4}, -{58,35,5}, -{58,35,6}, -{58,35,7}, -{58,35,8}, -{58,35,9}, -{58,35,10}, -{58,35,11}, -{58,35,12}, -{58,35,13}, -{58,35,14}, -{58,35,15}, -{58,35,16}, -{58,35,17}, -{58,35,18}, -{58,35,19}, -{58,35,20}, -{58,35,21}, -{58,35,22}, -{58,35,23}, -{58,35,24}, -{58,35,25}, -{58,35,26}, -{58,35,27}, -{58,35,28}, -{58,35,29}, -{58,35,30}, -{58,35,31}, -{58,35,32}, -{58,35,33}, -{58,35,34}, -{58,35,35}, -{58,35,36}, -{58,35,37}, -{58,35,38}, -{58,35,39}, -{58,35,40}, -{58,35,41}, -{58,35,42}, -{58,35,43}, -{58,35,44}, -{58,35,45}, -{58,35,46}, -{58,35,47}, -{58,35,48}, -{58,35,49}, -{58,35,50}, -{58,35,51}, -{58,35,52}, -{58,35,53}, -{58,35,54}, -{58,35,55}, -{58,35,56}, -{58,35,57}, -{58,35,58}, -{58,35,59}, -{58,35,60}, -{58,35,61}, -{58,35,62}, -{58,35,63}, -{58,35,64}, -{58,35,65}, -{58,36,-65}, -{58,36,-64}, -{58,36,-63}, -{58,36,-62}, -{58,36,-61}, -{58,36,-60}, -{58,36,-59}, -{58,36,-58}, -{58,36,-57}, -{58,36,-56}, -{58,36,-55}, -{58,36,-54}, -{58,36,-53}, -{58,36,-52}, -{58,36,-51}, -{58,36,-50}, -{58,36,-49}, -{58,36,-48}, -{58,36,-47}, -{58,36,-46}, -{58,36,-45}, -{58,36,-44}, -{58,36,-43}, -{58,36,-42}, -{58,36,-41}, -{58,36,-40}, -{58,36,-39}, -{58,36,-38}, -{58,36,-37}, -{58,36,-36}, -{58,36,-35}, -{58,36,-34}, -{58,36,-33}, -{58,36,-32}, -{58,36,-31}, -{58,36,-30}, -{58,36,-29}, -{58,36,-28}, -{58,36,-27}, -{58,36,-26}, -{58,36,-25}, -{58,36,-24}, -{58,36,-23}, -{58,36,-22}, -{58,36,-21}, -{58,36,-20}, -{58,36,-19}, -{58,36,-18}, -{58,36,-17}, -{58,36,-16}, -{58,36,-15}, -{58,36,-14}, -{58,36,-13}, -{58,36,-12}, -{58,36,-11}, -{58,36,-10}, -{58,36,-9}, -{58,36,-8}, -{58,36,-7}, -{58,36,-6}, -{58,36,-5}, -{58,36,-4}, -{58,36,-3}, -{58,36,-2}, -{58,36,-1}, -{58,36,0}, -{58,36,1}, -{58,36,2}, -{58,36,3}, -{58,36,4}, -{58,36,5}, -{58,36,6}, -{58,36,7}, -{58,36,8}, -{58,36,9}, -{58,36,10}, -{58,36,11}, -{58,36,12}, -{58,36,13}, -{58,36,14}, -{58,36,15}, -{58,36,16}, -{58,36,17}, -{58,36,18}, -{58,36,19}, -{58,36,20}, -{58,36,21}, -{58,36,22}, -{58,36,23}, -{58,36,24}, -{58,36,25}, -{58,36,26}, -{58,36,27}, -{58,36,28}, -{58,36,29}, -{58,36,30}, -{58,36,31}, -{58,36,32}, -{58,36,33}, -{58,36,34}, -{58,36,35}, -{58,36,36}, -{58,36,37}, -{58,36,38}, -{58,36,39}, -{58,36,40}, -{58,36,41}, -{58,36,42}, -{58,36,43}, -{58,36,44}, -{58,36,45}, -{58,36,46}, -{58,36,47}, -{58,36,48}, -{58,36,49}, -{58,36,50}, -{58,36,51}, -{58,36,52}, -{58,36,53}, -{58,36,54}, -{58,36,55}, -{58,36,56}, -{58,36,57}, -{58,36,58}, -{58,36,59}, -{58,36,60}, -{58,36,61}, -{58,36,62}, -{58,36,63}, -{58,36,64}, -{58,36,65}, -{58,37,-65}, -{58,37,-64}, -{58,37,-63}, -{58,37,-62}, -{58,37,-61}, -{58,37,-60}, -{58,37,-59}, -{58,37,-58}, -{58,37,-57}, -{58,37,-56}, -{58,37,-55}, -{58,37,-54}, -{58,37,-53}, -{58,37,-52}, -{58,37,-51}, -{58,37,-50}, -{58,37,-49}, -{58,37,-48}, -{58,37,-47}, -{58,37,-46}, -{58,37,-45}, -{58,37,-44}, -{58,37,-43}, -{58,37,-42}, -{58,37,-41}, -{58,37,-40}, -{58,37,-39}, -{58,37,-38}, -{58,37,-37}, -{58,37,-36}, -{58,37,-35}, -{58,37,-34}, -{58,37,-33}, -{58,37,-32}, -{58,37,-31}, -{58,37,-30}, -{58,37,-29}, -{58,37,-28}, -{58,37,-27}, -{58,37,-26}, -{58,37,-25}, -{58,37,-24}, -{58,37,-23}, -{58,37,-22}, -{58,37,-21}, -{58,37,-20}, -{58,37,-19}, -{58,37,-18}, -{58,37,-17}, -{58,37,-16}, -{58,37,-15}, -{58,37,-14}, -{58,37,-13}, -{58,37,-12}, -{58,37,-11}, -{58,37,-10}, -{58,37,-9}, -{58,37,-8}, -{58,37,-7}, -{58,37,-6}, -{58,37,-5}, -{58,37,-4}, -{58,37,-3}, -{58,37,-2}, -{58,37,-1}, -{58,37,0}, -{58,37,1}, -{58,37,2}, -{58,37,3}, -{58,37,4}, -{58,37,5}, -{58,37,6}, -{58,37,7}, -{58,37,8}, -{58,37,9}, -{58,37,10}, -{58,37,11}, -{58,37,12}, -{58,37,13}, -{58,37,14}, -{58,37,15}, -{58,37,16}, -{58,37,17}, -{58,37,18}, -{58,37,19}, -{58,37,20}, -{58,37,21}, -{58,37,22}, -{58,37,23}, -{58,37,24}, -{58,37,25}, -{58,37,26}, -{58,37,27}, -{58,37,28}, -{58,37,29}, -{58,37,30}, -{58,37,31}, -{58,37,32}, -{58,37,33}, -{58,37,34}, -{58,37,35}, -{58,37,36}, -{58,37,37}, -{58,37,38}, -{58,37,39}, -{58,37,40}, -{58,37,41}, -{58,37,42}, -{58,37,43}, -{58,37,44}, -{58,37,45}, -{58,37,46}, -{58,37,47}, -{58,37,48}, -{58,37,49}, -{58,37,50}, -{58,37,51}, -{58,37,52}, -{58,37,53}, -{58,37,54}, -{58,37,55}, -{58,37,56}, -{58,37,57}, -{58,37,58}, -{58,37,59}, -{58,37,60}, -{58,37,61}, -{58,37,62}, -{58,37,63}, -{58,37,64}, -{58,37,65}, -{58,37,66}, -{58,38,-65}, -{58,38,-64}, -{58,38,-63}, -{58,38,-62}, -{58,38,-61}, -{58,38,-60}, -{58,38,-59}, -{58,38,-58}, -{58,38,-57}, -{58,38,-56}, -{58,38,-55}, -{58,38,-54}, -{58,38,-53}, -{58,38,-52}, -{58,38,-51}, -{58,38,-50}, -{58,38,-49}, -{58,38,-48}, -{58,38,-47}, -{58,38,-46}, -{58,38,-45}, -{58,38,-44}, -{58,38,-43}, -{58,38,-42}, -{58,38,-41}, -{58,38,-40}, -{58,38,-39}, -{58,38,-38}, -{58,38,-37}, -{58,38,-36}, -{58,38,-35}, -{58,38,-34}, -{58,38,-33}, -{58,38,-32}, -{58,38,-31}, -{58,38,-30}, -{58,38,-29}, -{58,38,-28}, -{58,38,-27}, -{58,38,-26}, -{58,38,-25}, -{58,38,-24}, -{58,38,-23}, -{58,38,-22}, -{58,38,-21}, -{58,38,-20}, -{58,38,-19}, -{58,38,-18}, -{58,38,-17}, -{58,38,-16}, -{58,38,-15}, -{58,38,-14}, -{58,38,-13}, -{58,38,-12}, -{58,38,-11}, -{58,38,-10}, -{58,38,-9}, -{58,38,-8}, -{58,38,-7}, -{58,38,-6}, -{58,38,-5}, -{58,38,-4}, -{58,38,-3}, -{58,38,-2}, -{58,38,-1}, -{58,38,0}, -{58,38,1}, -{58,38,2}, -{58,38,3}, -{58,38,4}, -{58,38,5}, -{58,38,6}, -{58,38,7}, -{58,38,8}, -{58,38,9}, -{58,38,10}, -{58,38,11}, -{58,38,12}, -{58,38,13}, -{58,38,14}, -{58,38,15}, -{58,38,16}, -{58,38,17}, -{58,38,18}, -{58,38,19}, -{58,38,20}, -{58,38,21}, -{58,38,22}, -{58,38,23}, -{58,38,24}, -{58,38,25}, -{58,38,26}, -{58,38,27}, -{58,38,28}, -{58,38,29}, -{58,38,30}, -{58,38,31}, -{58,38,32}, -{58,38,33}, -{58,38,34}, -{58,38,35}, -{58,38,36}, -{58,38,37}, -{58,38,38}, -{58,38,39}, -{58,38,40}, -{58,38,41}, -{58,38,42}, -{58,38,43}, -{58,38,44}, -{58,38,45}, -{58,38,46}, -{58,38,47}, -{58,38,48}, -{58,38,49}, -{58,38,50}, -{58,38,51}, -{58,38,52}, -{58,38,53}, -{58,38,54}, -{58,38,55}, -{58,38,56}, -{58,38,57}, -{58,38,58}, -{58,38,59}, -{58,38,60}, -{58,38,61}, -{58,38,62}, -{58,38,63}, -{58,38,64}, -{58,38,65}, -{58,38,66}, -{58,39,-65}, -{58,39,-64}, -{58,39,-63}, -{58,39,-62}, -{58,39,-61}, -{58,39,-60}, -{58,39,-59}, -{58,39,-58}, -{58,39,-57}, -{58,39,-56}, -{58,39,-55}, -{58,39,-54}, -{58,39,-53}, -{58,39,-52}, -{58,39,-51}, -{58,39,-50}, -{58,39,-49}, -{58,39,-48}, -{58,39,-47}, -{58,39,-46}, -{58,39,-45}, -{58,39,-44}, -{58,39,-43}, -{58,39,-42}, -{58,39,-41}, -{58,39,-40}, -{58,39,-39}, -{58,39,-38}, -{58,39,-37}, -{58,39,-36}, -{58,39,-35}, -{58,39,-34}, -{58,39,-33}, -{58,39,-32}, -{58,39,-31}, -{58,39,-30}, -{58,39,-29}, -{58,39,-28}, -{58,39,-27}, -{58,39,-26}, -{58,39,-25}, -{58,39,-24}, -{58,39,-23}, -{58,39,-22}, -{58,39,-21}, -{58,39,-20}, -{58,39,-19}, -{58,39,-18}, -{58,39,-17}, -{58,39,-16}, -{58,39,-15}, -{58,39,-14}, -{58,39,-13}, -{58,39,-12}, -{58,39,-11}, -{58,39,-10}, -{58,39,-9}, -{58,39,-8}, -{58,39,-7}, -{58,39,-6}, -{58,39,-5}, -{58,39,-4}, -{58,39,-3}, -{58,39,-2}, -{58,39,-1}, -{58,39,0}, -{58,39,1}, -{58,39,2}, -{58,39,3}, -{58,39,4}, -{58,39,5}, -{58,39,6}, -{58,39,7}, -{58,39,8}, -{58,39,9}, -{58,39,10}, -{58,39,11}, -{58,39,12}, -{58,39,13}, -{58,39,14}, -{58,39,15}, -{58,39,16}, -{58,39,17}, -{58,39,18}, -{58,39,19}, -{58,39,20}, -{58,39,21}, -{58,39,22}, -{58,39,23}, -{58,39,24}, -{58,39,25}, -{58,39,26}, -{58,39,27}, -{58,39,28}, -{58,39,29}, -{58,39,30}, -{58,39,31}, -{58,39,32}, -{58,39,33}, -{58,39,34}, -{58,39,35}, -{58,39,36}, -{58,39,37}, -{58,39,38}, -{58,39,39}, -{58,39,40}, -{58,39,41}, -{58,39,42}, -{58,39,43}, -{58,39,44}, -{58,39,45}, -{58,39,46}, -{58,39,47}, -{58,39,48}, -{58,39,49}, -{58,39,50}, -{58,39,51}, -{58,39,52}, -{58,39,53}, -{58,39,54}, -{58,39,55}, -{58,39,56}, -{58,39,57}, -{58,39,58}, -{58,39,59}, -{58,39,60}, -{58,39,61}, -{58,39,62}, -{58,39,63}, -{58,39,64}, -{58,39,65}, -{58,39,66}, -{58,40,-65}, -{58,40,-64}, -{58,40,-63}, -{58,40,-62}, -{58,40,-61}, -{58,40,-60}, -{58,40,-59}, -{58,40,-58}, -{58,40,-57}, -{58,40,-56}, -{58,40,-55}, -{58,40,-54}, -{58,40,-53}, -{58,40,-52}, -{58,40,-51}, -{58,40,-50}, -{58,40,-49}, -{58,40,-48}, -{58,40,-47}, -{58,40,-46}, -{58,40,-45}, -{58,40,-44}, -{58,40,-43}, -{58,40,-42}, -{58,40,-41}, -{58,40,-40}, -{58,40,-39}, -{58,40,-38}, -{58,40,-37}, -{58,40,-36}, -{58,40,-35}, -{58,40,-34}, -{58,40,-33}, -{58,40,-32}, -{58,40,-31}, -{58,40,-30}, -{58,40,-29}, -{58,40,-28}, -{58,40,-27}, -{58,40,-26}, -{58,40,-25}, -{58,40,-24}, -{58,40,-23}, -{58,40,-22}, -{58,40,-21}, -{58,40,-20}, -{58,40,-19}, -{58,40,-18}, -{58,40,-17}, -{58,40,-16}, -{58,40,-15}, -{58,40,-14}, -{58,40,-13}, -{58,40,-12}, -{58,40,-11}, -{58,40,-10}, -{58,40,-9}, -{58,40,-8}, -{58,40,-7}, -{58,40,-6}, -{58,40,-5}, -{58,40,-4}, -{58,40,-3}, -{58,40,-2}, -{58,40,-1}, -{58,40,0}, -{58,40,1}, -{58,40,2}, -{58,40,3}, -{58,40,4}, -{58,40,5}, -{58,40,6}, -{58,40,7}, -{58,40,8}, -{58,40,9}, -{58,40,10}, -{58,40,11}, -{58,40,12}, -{58,40,13}, -{58,40,14}, -{58,40,15}, -{58,40,16}, -{58,40,17}, -{58,40,18}, -{58,40,19}, -{58,40,20}, -{58,40,21}, -{58,40,22}, -{58,40,23}, -{58,40,24}, -{58,40,25}, -{58,40,26}, -{58,40,27}, -{58,40,28}, -{58,40,29}, -{58,40,30}, -{58,40,31}, -{58,40,32}, -{58,40,33}, -{58,40,34}, -{58,40,35}, -{58,40,36}, -{58,40,37}, -{58,40,38}, -{58,40,39}, -{58,40,40}, -{58,40,41}, -{58,40,42}, -{58,40,43}, -{58,40,44}, -{58,40,45}, -{58,40,46}, -{58,40,47}, -{58,40,48}, -{58,40,49}, -{58,40,50}, -{58,40,51}, -{58,40,52}, -{58,40,53}, -{58,40,54}, -{58,40,55}, -{58,40,56}, -{58,40,57}, -{58,40,58}, -{58,40,59}, -{58,40,60}, -{58,40,61}, -{58,40,62}, -{58,40,63}, -{58,40,64}, -{58,40,65}, -{58,40,66}, -{58,41,-65}, -{58,41,-64}, -{58,41,-63}, -{58,41,-62}, -{58,41,-61}, -{58,41,-60}, -{58,41,-59}, -{58,41,-58}, -{58,41,-57}, -{58,41,-56}, -{58,41,-55}, -{58,41,-54}, -{58,41,-53}, -{58,41,-52}, -{58,41,-51}, -{58,41,-50}, -{58,41,-49}, -{58,41,-48}, -{58,41,-47}, -{58,41,-46}, -{58,41,-45}, -{58,41,-44}, -{58,41,-43}, -{58,41,-42}, -{58,41,-41}, -{58,41,-40}, -{58,41,-39}, -{58,41,-38}, -{58,41,-37}, -{58,41,-36}, -{58,41,-35}, -{58,41,-34}, -{58,41,-33}, -{58,41,-32}, -{58,41,-31}, -{58,41,-30}, -{58,41,-29}, -{58,41,-28}, -{58,41,-27}, -{58,41,-26}, -{58,41,-25}, -{58,41,-24}, -{58,41,-23}, -{58,41,-22}, -{58,41,-21}, -{58,41,-20}, -{58,41,-19}, -{58,41,-18}, -{58,41,-17}, -{58,41,-16}, -{58,41,-15}, -{58,41,-14}, -{58,41,-13}, -{58,41,-12}, -{58,41,-11}, -{58,41,-10}, -{58,41,-9}, -{58,41,-8}, -{58,41,-7}, -{58,41,-6}, -{58,41,-5}, -{58,41,-4}, -{58,41,-3}, -{58,41,-2}, -{58,41,-1}, -{58,41,0}, -{58,41,1}, -{58,41,2}, -{58,41,3}, -{58,41,4}, -{58,41,5}, -{58,41,6}, -{58,41,7}, -{58,41,8}, -{58,41,9}, -{58,41,10}, -{58,41,11}, -{58,41,12}, -{58,41,13}, -{58,41,14}, -{58,41,15}, -{58,41,16}, -{58,41,17}, -{58,41,18}, -{58,41,19}, -{58,41,20}, -{58,41,21}, -{58,41,22}, -{58,41,23}, -{58,41,24}, -{58,41,25}, -{58,41,26}, -{58,41,27}, -{58,41,28}, -{58,41,29}, -{58,41,30}, -{58,41,31}, -{58,41,32}, -{58,41,33}, -{58,41,34}, -{58,41,35}, -{58,41,36}, -{58,41,37}, -{58,41,38}, -{58,41,39}, -{58,41,40}, -{58,41,41}, -{58,41,42}, -{58,41,43}, -{58,41,44}, -{58,41,45}, -{58,41,46}, -{58,41,47}, -{58,41,48}, -{58,41,49}, -{58,41,50}, -{58,41,51}, -{58,41,52}, -{58,41,53}, -{58,41,54}, -{58,41,55}, -{58,41,56}, -{58,41,57}, -{58,41,58}, -{58,41,59}, -{58,41,60}, -{58,41,61}, -{58,41,62}, -{58,41,63}, -{58,41,64}, -{58,41,65}, -{58,41,66}, -{58,42,-65}, -{58,42,-64}, -{58,42,-63}, -{58,42,-62}, -{58,42,-61}, -{58,42,-60}, -{58,42,-59}, -{58,42,-58}, -{58,42,-57}, -{58,42,-56}, -{58,42,-55}, -{58,42,-54}, -{58,42,-53}, -{58,42,-52}, -{58,42,-51}, -{58,42,-50}, -{58,42,-49}, -{58,42,-48}, -{58,42,-47}, -{58,42,-46}, -{58,42,-45}, -{58,42,-44}, -{58,42,-43}, -{58,42,-42}, -{58,42,-41}, -{58,42,-40}, -{58,42,-39}, -{58,42,-38}, -{58,42,-37}, -{58,42,-36}, -{58,42,-35}, -{58,42,-34}, -{58,42,-33}, -{58,42,-32}, -{58,42,-31}, -{58,42,-30}, -{58,42,-29}, -{58,42,-28}, -{58,42,-27}, -{58,42,-26}, -{58,42,-25}, -{58,42,-24}, -{58,42,-23}, -{58,42,-22}, -{58,42,-21}, -{58,42,-20}, -{58,42,-19}, -{58,42,-18}, -{58,42,-17}, -{58,42,-16}, -{58,42,-15}, -{58,42,-14}, -{58,42,-13}, -{58,42,-12}, -{58,42,-11}, -{58,42,-10}, -{58,42,-9}, -{58,42,-8}, -{58,42,-7}, -{58,42,-6}, -{58,42,-5}, -{58,42,-4}, -{58,42,-3}, -{58,42,-2}, -{58,42,-1}, -{58,42,0}, -{58,42,1}, -{58,42,2}, -{58,42,3}, -{58,42,4}, -{58,42,5}, -{58,42,6}, -{58,42,7}, -{58,42,8}, -{58,42,9}, -{58,42,10}, -{58,42,11}, -{58,42,12}, -{58,42,13}, -{58,42,14}, -{58,42,15}, -{58,42,16}, -{58,42,17}, -{58,42,18}, -{58,42,19}, -{58,42,20}, -{58,42,21}, -{58,42,22}, -{58,42,23}, -{58,42,24}, -{58,42,25}, -{58,42,26}, -{58,42,27}, -{58,42,28}, -{58,42,29}, -{58,42,30}, -{58,42,31}, -{58,42,32}, -{58,42,33}, -{58,42,34}, -{58,42,35}, -{58,42,36}, -{58,42,37}, -{58,42,38}, -{58,42,39}, -{58,42,40}, -{58,42,41}, -{58,42,42}, -{58,42,43}, -{58,42,44}, -{58,42,45}, -{58,42,46}, -{58,42,47}, -{58,42,48}, -{58,42,49}, -{58,42,50}, -{58,42,51}, -{58,42,52}, -{58,42,53}, -{58,42,54}, -{58,42,55}, -{58,42,56}, -{58,42,57}, -{58,42,58}, -{58,42,59}, -{58,42,60}, -{58,42,61}, -{58,42,62}, -{58,42,63}, -{58,42,64}, -{58,42,65}, -{58,42,66}, -{58,43,-65}, -{58,43,-64}, -{58,43,-63}, -{58,43,-62}, -{58,43,-61}, -{58,43,-60}, -{58,43,-59}, -{58,43,-58}, -{58,43,-57}, -{58,43,-56}, -{58,43,-55}, -{58,43,-54}, -{58,43,-53}, -{58,43,-52}, -{58,43,-51}, -{58,43,-50}, -{58,43,-49}, -{58,43,-48}, -{58,43,-47}, -{58,43,-46}, -{58,43,-45}, -{58,43,-44}, -{58,43,-43}, -{58,43,-42}, -{58,43,-41}, -{58,43,-40}, -{58,43,-39}, -{58,43,-38}, -{58,43,-37}, -{58,43,-36}, -{58,43,-35}, -{58,43,-34}, -{58,43,-33}, -{58,43,-32}, -{58,43,-31}, -{58,43,-30}, -{58,43,-29}, -{58,43,-28}, -{58,43,-27}, -{58,43,-26}, -{58,43,-25}, -{58,43,-24}, -{58,43,-23}, -{58,43,-22}, -{58,43,-21}, -{58,43,-20}, -{58,43,-19}, -{58,43,-18}, -{58,43,-17}, -{58,43,-16}, -{58,43,-15}, -{58,43,-14}, -{58,43,-13}, -{58,43,-12}, -{58,43,-11}, -{58,43,-10}, -{58,43,-9}, -{58,43,-8}, -{58,43,-7}, -{58,43,-6}, -{58,43,-5}, -{58,43,-4}, -{58,43,-3}, -{58,43,-2}, -{58,43,-1}, -{58,43,0}, -{58,43,1}, -{58,43,2}, -{58,43,3}, -{58,43,4}, -{58,43,5}, -{58,43,6}, -{58,43,7}, -{58,43,8}, -{58,43,9}, -{58,43,10}, -{58,43,11}, -{58,43,12}, -{58,43,13}, -{58,43,14}, -{58,43,15}, -{58,43,16}, -{58,43,17}, -{58,43,18}, -{58,43,19}, -{58,43,20}, -{58,43,21}, -{58,43,22}, -{58,43,23}, -{58,43,24}, -{58,43,25}, -{58,43,26}, -{58,43,27}, -{58,43,28}, -{58,43,29}, -{58,43,30}, -{58,43,31}, -{58,43,32}, -{58,43,33}, -{58,43,34}, -{58,43,35}, -{58,43,36}, -{58,43,37}, -{58,43,38}, -{58,43,39}, -{58,43,40}, -{58,43,41}, -{58,43,42}, -{58,43,43}, -{58,43,44}, -{58,43,45}, -{58,43,46}, -{58,43,47}, -{58,43,48}, -{58,43,49}, -{58,43,50}, -{58,43,51}, -{58,43,52}, -{58,43,53}, -{58,43,54}, -{58,43,55}, -{58,43,56}, -{58,43,57}, -{58,43,58}, -{58,43,59}, -{58,43,60}, -{58,43,61}, -{58,43,62}, -{58,43,63}, -{58,43,64}, -{58,43,65}, -{58,43,66}, -{58,44,-65}, -{58,44,-64}, -{58,44,-63}, -{58,44,-62}, -{58,44,-61}, -{58,44,-60}, -{58,44,-59}, -{58,44,-58}, -{58,44,-57}, -{58,44,-56}, -{58,44,-55}, -{58,44,-54}, -{58,44,-53}, -{58,44,-52}, -{58,44,-51}, -{58,44,-50}, -{58,44,-49}, -{58,44,-48}, -{58,44,-47}, -{58,44,-46}, -{58,44,-45}, -{58,44,-44}, -{58,44,-43}, -{58,44,-42}, -{58,44,-41}, -{58,44,-40}, -{58,44,-39}, -{58,44,-38}, -{58,44,-37}, -{58,44,-36}, -{58,44,-35}, -{58,44,-34}, -{58,44,-33}, -{58,44,-32}, -{58,44,-31}, -{58,44,-30}, -{58,44,-29}, -{58,44,-28}, -{58,44,-27}, -{58,44,-26}, -{58,44,-25}, -{58,44,-24}, -{58,44,-23}, -{58,44,-22}, -{58,44,-21}, -{58,44,-20}, -{58,44,-19}, -{58,44,-18}, -{58,44,-17}, -{58,44,-16}, -{58,44,-15}, -{58,44,-14}, -{58,44,-13}, -{58,44,-12}, -{58,44,-11}, -{58,44,-10}, -{58,44,-9}, -{58,44,-8}, -{58,44,-7}, -{58,44,-6}, -{58,44,-5}, -{58,44,-4}, -{58,44,-3}, -{58,44,-2}, -{58,44,-1}, -{58,44,0}, -{58,44,1}, -{58,44,2}, -{58,44,3}, -{58,44,4}, -{58,44,5}, -{58,44,6}, -{58,44,7}, -{58,44,8}, -{58,44,9}, -{58,44,10}, -{58,44,11}, -{58,44,12}, -{58,44,13}, -{58,44,14}, -{58,44,15}, -{58,44,16}, -{58,44,17}, -{58,44,18}, -{58,44,19}, -{58,44,20}, -{58,44,21}, -{58,44,22}, -{58,44,23}, -{58,44,24}, -{58,44,25}, -{58,44,26}, -{58,44,27}, -{58,44,28}, -{58,44,29}, -{58,44,30}, -{58,44,31}, -{58,44,32}, -{58,44,33}, -{58,44,34}, -{58,44,35}, -{58,44,36}, -{58,44,37}, -{58,44,38}, -{58,44,39}, -{58,44,40}, -{58,44,41}, -{58,44,42}, -{58,44,43}, -{58,44,44}, -{58,44,45}, -{58,44,46}, -{58,44,47}, -{58,44,48}, -{58,44,49}, -{58,44,50}, -{58,44,51}, -{58,44,52}, -{58,44,53}, -{58,44,54}, -{58,44,55}, -{58,44,56}, -{58,44,57}, -{58,44,58}, -{58,44,59}, -{58,44,60}, -{58,44,61}, -{58,44,62}, -{58,44,63}, -{58,44,64}, -{58,44,65}, -{58,44,66}, -{58,45,-65}, -{58,45,-64}, -{58,45,-63}, -{58,45,-62}, -{58,45,-61}, -{58,45,-60}, -{58,45,-59}, -{58,45,-58}, -{58,45,-57}, -{58,45,-56}, -{58,45,-55}, -{58,45,-54}, -{58,45,-53}, -{58,45,-52}, -{58,45,-51}, -{58,45,-50}, -{58,45,-49}, -{58,45,-48}, -{58,45,-47}, -{58,45,-46}, -{58,45,-45}, -{58,45,-44}, -{58,45,-43}, -{58,45,-42}, -{58,45,-41}, -{58,45,-40}, -{58,45,-39}, -{58,45,-38}, -{58,45,-37}, -{58,45,-36}, -{58,45,-35}, -{58,45,-34}, -{58,45,-33}, -{58,45,-32}, -{58,45,-31}, -{58,45,-30}, -{58,45,-29}, -{58,45,-28}, -{58,45,-27}, -{58,45,-26}, -{58,45,-25}, -{58,45,-24}, -{58,45,-23}, -{58,45,-22}, -{58,45,-21}, -{58,45,-20}, -{58,45,-19}, -{58,45,-18}, -{58,45,-17}, -{58,45,-16}, -{58,45,-15}, -{58,45,-14}, -{58,45,-13}, -{58,45,-12}, -{58,45,-11}, -{58,45,-10}, -{58,45,-9}, -{58,45,-8}, -{58,45,-7}, -{58,45,-6}, -{58,45,-5}, -{58,45,-4}, -{58,45,-3}, -{58,45,-2}, -{58,45,-1}, -{58,45,0}, -{58,45,1}, -{58,45,2}, -{58,45,3}, -{58,45,4}, -{58,45,5}, -{58,45,6}, -{58,45,7}, -{58,45,8}, -{58,45,9}, -{58,45,10}, -{58,45,11}, -{58,45,12}, -{58,45,13}, -{58,45,14}, -{58,45,15}, -{58,45,16}, -{58,45,17}, -{58,45,18}, -{58,45,19}, -{58,45,20}, -{58,45,21}, -{58,45,22}, -{58,45,23}, -{58,45,24}, -{58,45,25}, -{58,45,26}, -{58,45,27}, -{58,45,28}, -{58,45,29}, -{58,45,30}, -{58,45,31}, -{58,45,32}, -{58,45,33}, -{58,45,34}, -{58,45,35}, -{58,45,36}, -{58,45,37}, -{58,45,38}, -{58,45,39}, -{58,45,40}, -{58,45,41}, -{58,45,42}, -{58,45,43}, -{58,45,44}, -{58,45,45}, -{58,45,46}, -{58,45,47}, -{58,45,48}, -{58,45,49}, -{58,45,50}, -{58,45,51}, -{58,45,52}, -{58,45,53}, -{58,45,54}, -{58,45,55}, -{58,45,56}, -{58,45,57}, -{58,45,58}, -{58,45,59}, -{58,45,60}, -{58,45,61}, -{58,45,62}, -{58,45,63}, -{58,45,64}, -{58,45,65}, -{58,45,66}, -{58,46,-65}, -{58,46,-64}, -{58,46,-63}, -{58,46,-62}, -{58,46,-61}, -{58,46,-60}, -{58,46,-59}, -{58,46,-58}, -{58,46,-57}, -{58,46,-56}, -{58,46,-55}, -{58,46,-54}, -{58,46,-53}, -{58,46,-52}, -{58,46,-51}, -{58,46,-50}, -{58,46,-49}, -{58,46,-48}, -{58,46,-47}, -{58,46,-46}, -{58,46,-45}, -{58,46,-44}, -{58,46,-43}, -{58,46,-42}, -{58,46,-41}, -{58,46,-40}, -{58,46,-39}, -{58,46,-38}, -{58,46,-37}, -{58,46,-36}, -{58,46,-35}, -{58,46,-34}, -{58,46,-33}, -{58,46,-32}, -{58,46,-31}, -{58,46,-30}, -{58,46,-29}, -{58,46,-28}, -{58,46,-27}, -{58,46,-26}, -{58,46,-25}, -{58,46,-24}, -{58,46,-23}, -{58,46,-22}, -{58,46,-21}, -{58,46,-20}, -{58,46,-19}, -{58,46,-18}, -{58,46,-17}, -{58,46,-16}, -{58,46,-15}, -{58,46,-14}, -{58,46,-13}, -{58,46,-12}, -{58,46,-11}, -{58,46,-10}, -{58,46,-9}, -{58,46,-8}, -{58,46,-7}, -{58,46,-6}, -{58,46,-5}, -{58,46,-4}, -{58,46,-3}, -{58,46,-2}, -{58,46,-1}, -{58,46,0}, -{58,46,1}, -{58,46,2}, -{58,46,3}, -{58,46,4}, -{58,46,5}, -{58,46,6}, -{58,46,7}, -{58,46,8}, -{58,46,9}, -{58,46,10}, -{58,46,11}, -{58,46,12}, -{58,46,13}, -{58,46,14}, -{58,46,15}, -{58,46,16}, -{58,46,17}, -{58,46,18}, -{58,46,19}, -{58,46,20}, -{58,46,21}, -{58,46,22}, -{58,46,23}, -{58,46,24}, -{58,46,25}, -{58,46,26}, -{58,46,27}, -{58,46,28}, -{58,46,29}, -{58,46,30}, -{58,46,31}, -{58,46,32}, -{58,46,33}, -{58,46,34}, -{58,46,35}, -{58,46,36}, -{58,46,37}, -{58,46,38}, -{58,46,39}, -{58,46,40}, -{58,46,41}, -{58,46,42}, -{58,46,43}, -{58,46,44}, -{58,46,45}, -{58,46,46}, -{58,46,47}, -{58,46,48}, -{58,46,49}, -{58,46,50}, -{58,46,51}, -{58,46,52}, -{58,46,53}, -{58,46,54}, -{58,46,55}, -{58,46,56}, -{58,46,57}, -{58,46,58}, -{58,46,59}, -{58,46,60}, -{58,46,61}, -{58,46,62}, -{58,46,63}, -{58,46,64}, -{58,46,65}, -{58,46,66}, -{58,47,-65}, -{58,47,-64}, -{58,47,-63}, -{58,47,-62}, -{58,47,-61}, -{58,47,-60}, -{58,47,-59}, -{58,47,-58}, -{58,47,-57}, -{58,47,-56}, -{58,47,-55}, -{58,47,-54}, -{58,47,-53}, -{58,47,-52}, -{58,47,-51}, -{58,47,-50}, -{58,47,-49}, -{58,47,-48}, -{58,47,-47}, -{58,47,-46}, -{58,47,-45}, -{58,47,-44}, -{58,47,-43}, -{58,47,-42}, -{58,47,-41}, -{58,47,-40}, -{58,47,-39}, -{58,47,-38}, -{58,47,-37}, -{58,47,-36}, -{58,47,-35}, -{58,47,-34}, -{58,47,-33}, -{58,47,-32}, -{58,47,-31}, -{58,47,-30}, -{58,47,-29}, -{58,47,-28}, -{58,47,-27}, -{58,47,-26}, -{58,47,-25}, -{58,47,-24}, -{58,47,-23}, -{58,47,-22}, -{58,47,-21}, -{58,47,-20}, -{58,47,-19}, -{58,47,-18}, -{58,47,-17}, -{58,47,-16}, -{58,47,-15}, -{58,47,-14}, -{58,47,-13}, -{58,47,-12}, -{58,47,-11}, -{58,47,-10}, -{58,47,-9}, -{58,47,-8}, -{58,47,-7}, -{58,47,-6}, -{58,47,-5}, -{58,47,-4}, -{58,47,-3}, -{58,47,-2}, -{58,47,-1}, -{58,47,0}, -{58,47,1}, -{58,47,2}, -{58,47,3}, -{58,47,4}, -{58,47,5}, -{58,47,6}, -{58,47,7}, -{58,47,8}, -{58,47,9}, -{58,47,10}, -{58,47,11}, -{58,47,12}, -{58,47,13}, -{58,47,14}, -{58,47,15}, -{58,47,16}, -{58,47,17}, -{58,47,18}, -{58,47,19}, -{58,47,20}, -{58,47,21}, -{58,47,22}, -{58,47,23}, -{58,47,24}, -{58,47,25}, -{58,47,26}, -{58,47,27}, -{58,47,28}, -{58,47,29}, -{58,47,30}, -{58,47,31}, -{58,47,32}, -{58,47,33}, -{58,47,34}, -{58,47,35}, -{58,47,36}, -{58,47,37}, -{58,47,38}, -{58,47,39}, -{58,47,40}, -{58,47,41}, -{58,47,42}, -{58,47,43}, -{58,47,44}, -{58,47,45}, -{58,47,46}, -{58,47,47}, -{58,47,48}, -{58,47,49}, -{58,47,50}, -{58,47,51}, -{58,47,52}, -{58,47,53}, -{58,47,54}, -{58,47,55}, -{58,47,56}, -{58,47,57}, -{58,47,58}, -{58,47,59}, -{58,47,60}, -{58,47,61}, -{58,47,62}, -{58,47,63}, -{58,47,64}, -{58,47,65}, -{58,47,66}, -{58,47,67}, -{58,48,-65}, -{58,48,-64}, -{58,48,-63}, -{58,48,-62}, -{58,48,-61}, -{58,48,-60}, -{58,48,-59}, -{58,48,-58}, -{58,48,-57}, -{58,48,-56}, -{58,48,-55}, -{58,48,-54}, -{58,48,-53}, -{58,48,-52}, -{58,48,-51}, -{58,48,-50}, -{58,48,-49}, -{58,48,-48}, -{58,48,-47}, -{58,48,-46}, -{58,48,-45}, -{58,48,-44}, -{58,48,-43}, -{58,48,-42}, -{58,48,-41}, -{58,48,-40}, -{58,48,-39}, -{58,48,-38}, -{58,48,-37}, -{58,48,-36}, -{58,48,-35}, -{58,48,-34}, -{58,48,-33}, -{58,48,-32}, -{58,48,-31}, -{58,48,-30}, -{58,48,-29}, -{58,48,-28}, -{58,48,-27}, -{58,48,-26}, -{58,48,-25}, -{58,48,-24}, -{58,48,-23}, -{58,48,-22}, -{58,48,-21}, -{58,48,-20}, -{58,48,-19}, -{58,48,-18}, -{58,48,-17}, -{58,48,-16}, -{58,48,-15}, -{58,48,-14}, -{58,48,-13}, -{58,48,-12}, -{58,48,-11}, -{58,48,-10}, -{58,48,-9}, -{58,48,-8}, -{58,48,-7}, -{58,48,-6}, -{58,48,-5}, -{58,48,-4}, -{58,48,-3}, -{58,48,-2}, -{58,48,-1}, -{58,48,0}, -{58,48,1}, -{58,48,2}, -{58,48,3}, -{58,48,4}, -{58,48,5}, -{58,48,6}, -{58,48,7}, -{58,48,8}, -{58,48,9}, -{58,48,10}, -{58,48,11}, -{58,48,12}, -{58,48,13}, -{58,48,14}, -{58,48,15}, -{58,48,16}, -{58,48,17}, -{58,48,18}, -{58,48,19}, -{58,48,20}, -{58,48,21}, -{58,48,22}, -{58,48,23}, -{58,48,24}, -{58,48,25}, -{58,48,26}, -{58,48,27}, -{58,48,28}, -{58,48,29}, -{58,48,30}, -{58,48,31}, -{58,48,32}, -{58,48,33}, -{58,48,34}, -{58,48,35}, -{58,48,36}, -{58,48,37}, -{58,48,38}, -{58,48,39}, -{58,48,40}, -{58,48,41}, -{58,48,42}, -{58,48,43}, -{58,48,44}, -{58,48,45}, -{58,48,46}, -{58,48,47}, -{58,48,48}, -{58,48,49}, -{58,48,50}, -{58,48,51}, -{58,48,52}, -{58,48,53}, -{58,48,54}, -{58,48,55}, -{58,48,56}, -{58,48,57}, -{58,48,58}, -{58,48,59}, -{58,48,60}, -{58,48,61}, -{58,48,62}, -{58,48,63}, -{58,48,64}, -{58,48,65}, -{58,48,66}, -{58,48,67}, -{58,49,-65}, -{58,49,-64}, -{58,49,-63}, -{58,49,-62}, -{58,49,-61}, -{58,49,-60}, -{58,49,-59}, -{58,49,-58}, -{58,49,-57}, -{58,49,-56}, -{58,49,-55}, -{58,49,-54}, -{58,49,-53}, -{58,49,-52}, -{58,49,-51}, -{58,49,-50}, -{58,49,-49}, -{58,49,-48}, -{58,49,-47}, -{58,49,-46}, -{58,49,-45}, -{58,49,-44}, -{58,49,-43}, -{58,49,-42}, -{58,49,-41}, -{58,49,-40}, -{58,49,-39}, -{58,49,-38}, -{58,49,-37}, -{58,49,-36}, -{58,49,-35}, -{58,49,-34}, -{58,49,-33}, -{58,49,-32}, -{58,49,-31}, -{58,49,-30}, -{58,49,-29}, -{58,49,-28}, -{58,49,-27}, -{58,49,-26}, -{58,49,-25}, -{58,49,-24}, -{58,49,-23}, -{58,49,-22}, -{58,49,-21}, -{58,49,-20}, -{58,49,-19}, -{58,49,-18}, -{58,49,-17}, -{58,49,-16}, -{58,49,-15}, -{58,49,-14}, -{58,49,-13}, -{58,49,-12}, -{58,49,-11}, -{58,49,-10}, -{58,49,-9}, -{58,49,-8}, -{58,49,-7}, -{58,49,-6}, -{58,49,-5}, -{58,49,-4}, -{58,49,-3}, -{58,49,-2}, -{58,49,-1}, -{58,49,0}, -{58,49,1}, -{58,49,2}, -{58,49,3}, -{58,49,4}, -{58,49,5}, -{58,49,6}, -{58,49,7}, -{58,49,8}, -{58,49,9}, -{58,49,10}, -{58,49,11}, -{58,49,12}, -{58,49,13}, -{58,49,14}, -{58,49,15}, -{58,49,16}, -{58,49,17}, -{58,49,18}, -{58,49,19}, -{58,49,20}, -{58,49,21}, -{58,49,22}, -{58,49,23}, -{58,49,24}, -{58,49,25}, -{58,49,26}, -{58,49,27}, -{58,49,28}, -{58,49,29}, -{58,49,30}, -{58,49,31}, -{58,49,32}, -{58,49,33}, -{58,49,34}, -{58,49,35}, -{58,49,36}, -{58,49,37}, -{58,49,38}, -{58,49,39}, -{58,49,40}, -{58,49,41}, -{58,49,42}, -{58,49,43}, -{58,49,44}, -{58,49,45}, -{58,49,46}, -{58,49,47}, -{58,49,48}, -{58,49,49}, -{58,49,50}, -{58,49,51}, -{58,49,52}, -{58,49,53}, -{58,49,54}, -{58,49,55}, -{58,49,56}, -{58,49,57}, -{58,49,58}, -{58,49,59}, -{58,49,60}, -{58,49,61}, -{58,49,62}, -{58,49,63}, -{58,49,64}, -{58,49,65}, -{58,49,66}, -{58,49,67}, -{58,50,-65}, -{58,50,-64}, -{58,50,-63}, -{58,50,-62}, -{58,50,-61}, -{58,50,-60}, -{58,50,-59}, -{58,50,-58}, -{58,50,-57}, -{58,50,-56}, -{58,50,-55}, -{58,50,-54}, -{58,50,-53}, -{58,50,-52}, -{58,50,-51}, -{58,50,-50}, -{58,50,-49}, -{58,50,-48}, -{58,50,-47}, -{58,50,-46}, -{58,50,-45}, -{58,50,-44}, -{58,50,-43}, -{58,50,-42}, -{58,50,-41}, -{58,50,-40}, -{58,50,-39}, -{58,50,-38}, -{58,50,-37}, -{58,50,-36}, -{58,50,-35}, -{58,50,-34}, -{58,50,-33}, -{58,50,-32}, -{58,50,-31}, -{58,50,-30}, -{58,50,-29}, -{58,50,-28}, -{58,50,-27}, -{58,50,-26}, -{58,50,-25}, -{58,50,-24}, -{58,50,-23}, -{58,50,-22}, -{58,50,-21}, -{58,50,-20}, -{58,50,-19}, -{58,50,-18}, -{58,50,-17}, -{58,50,-16}, -{58,50,-15}, -{58,50,-14}, -{58,50,-13}, -{58,50,-12}, -{58,50,-11}, -{58,50,-10}, -{58,50,-9}, -{58,50,-8}, -{58,50,-7}, -{58,50,-6}, -{58,50,-5}, -{58,50,-4}, -{58,50,-3}, -{58,50,-2}, -{58,50,-1}, -{58,50,0}, -{58,50,1}, -{58,50,2}, -{58,50,3}, -{58,50,4}, -{58,50,5}, -{58,50,6}, -{58,50,7}, -{58,50,8}, -{58,50,9}, -{58,50,10}, -{58,50,11}, -{58,50,12}, -{58,50,13}, -{58,50,14}, -{58,50,15}, -{58,50,16}, -{58,50,17}, -{58,50,18}, -{58,50,19}, -{58,50,20}, -{58,50,21}, -{58,50,22}, -{58,50,23}, -{58,50,24}, -{58,50,25}, -{58,50,26}, -{58,50,27}, -{58,50,28}, -{58,50,29}, -{58,50,30}, -{58,50,31}, -{58,50,32}, -{58,50,33}, -{58,50,34}, -{58,50,35}, -{58,50,36}, -{58,50,37}, -{58,50,38}, -{58,50,39}, -{58,50,40}, -{58,50,41}, -{58,50,42}, -{58,50,43}, -{58,50,44}, -{58,50,45}, -{58,50,46}, -{58,50,47}, -{58,50,48}, -{58,50,49}, -{58,50,50}, -{58,50,51}, -{58,50,52}, -{58,50,53}, -{58,50,54}, -{58,50,55}, -{58,50,56}, -{58,50,57}, -{58,50,58}, -{58,50,59}, -{58,50,60}, -{58,50,61}, -{58,50,62}, -{58,50,63}, -{58,50,64}, -{58,50,65}, -{58,50,66}, -{58,50,67}, -{58,51,-65}, -{58,51,-64}, -{58,51,-63}, -{58,51,-62}, -{58,51,-61}, -{58,51,-60}, -{58,51,-59}, -{58,51,-58}, -{58,51,-57}, -{58,51,-56}, -{58,51,-55}, -{58,51,-54}, -{58,51,-53}, -{58,51,-52}, -{58,51,-51}, -{58,51,-50}, -{58,51,-49}, -{58,51,-48}, -{58,51,-47}, -{58,51,-46}, -{58,51,-45}, -{58,51,-44}, -{58,51,-43}, -{58,51,-42}, -{58,51,-41}, -{58,51,-40}, -{58,51,-39}, -{58,51,-38}, -{58,51,-37}, -{58,51,-36}, -{58,51,-35}, -{58,51,-34}, -{58,51,-33}, -{58,51,-32}, -{58,51,-31}, -{58,51,-30}, -{58,51,-29}, -{58,51,-28}, -{58,51,-27}, -{58,51,-26}, -{58,51,-25}, -{58,51,-24}, -{58,51,-23}, -{58,51,-22}, -{58,51,-21}, -{58,51,-20}, -{58,51,-19}, -{58,51,-18}, -{58,51,-17}, -{58,51,-16}, -{58,51,-15}, -{58,51,-14}, -{58,51,-13}, -{58,51,-12}, -{58,51,-11}, -{58,51,-10}, -{58,51,-9}, -{58,51,-8}, -{58,51,-7}, -{58,51,-6}, -{58,51,-5}, -{58,51,-4}, -{58,51,-3}, -{58,51,-2}, -{58,51,-1}, -{58,51,0}, -{58,51,1}, -{58,51,2}, -{58,51,3}, -{58,51,4}, -{58,51,5}, -{58,51,6}, -{58,51,7}, -{58,51,8}, -{58,51,9}, -{58,51,10}, -{58,51,11}, -{58,51,12}, -{58,51,13}, -{58,51,14}, -{58,51,15}, -{58,51,16}, -{58,51,17}, -{58,51,18}, -{58,51,19}, -{58,51,20}, -{58,51,21}, -{58,51,22}, -{58,51,23}, -{58,51,24}, -{58,51,25}, -{58,51,26}, -{58,51,27}, -{58,51,28}, -{58,51,29}, -{58,51,30}, -{58,51,31}, -{58,51,32}, -{58,51,33}, -{58,51,34}, -{58,51,35}, -{58,51,36}, -{58,51,37}, -{58,51,38}, -{58,51,39}, -{58,51,40}, -{58,51,41}, -{58,51,42}, -{58,51,43}, -{58,51,44}, -{58,51,45}, -{58,51,46}, -{58,51,47}, -{58,51,48}, -{58,51,49}, -{58,51,50}, -{58,51,51}, -{58,51,52}, -{58,51,53}, -{58,51,54}, -{58,51,55}, -{58,51,56}, -{58,51,57}, -{58,51,58}, -{58,51,59}, -{58,51,60}, -{58,51,61}, -{58,51,62}, -{58,51,63}, -{58,51,64}, -{58,51,65}, -{58,51,66}, -{58,51,67}, -{58,52,-65}, -{58,52,-64}, -{58,52,-63}, -{58,52,-62}, -{58,52,-61}, -{58,52,-60}, -{58,52,-59}, -{58,52,-58}, -{58,52,-57}, -{58,52,-56}, -{58,52,-55}, -{58,52,-54}, -{58,52,-53}, -{58,52,-52}, -{58,52,-51}, -{58,52,-50}, -{58,52,-49}, -{58,52,-48}, -{58,52,-47}, -{58,52,-46}, -{58,52,-45}, -{58,52,-44}, -{58,52,-43}, -{58,52,-42}, -{58,52,-41}, -{58,52,-40}, -{58,52,-39}, -{58,52,-38}, -{58,52,-37}, -{58,52,-36}, -{58,52,-35}, -{58,52,-34}, -{58,52,-33}, -{58,52,-32}, -{58,52,-31}, -{58,52,-30}, -{58,52,-29}, -{58,52,-28}, -{58,52,-27}, -{58,52,-26}, -{58,52,-25}, -{58,52,-24}, -{58,52,-23}, -{58,52,-22}, -{58,52,-21}, -{58,52,-20}, -{58,52,-19}, -{58,52,-18}, -{58,52,-17}, -{58,52,-16}, -{58,52,-15}, -{58,52,-14}, -{58,52,-13}, -{58,52,-12}, -{58,52,-11}, -{58,52,-10}, -{58,52,-9}, -{58,52,-8}, -{58,52,-7}, -{58,52,-6}, -{58,52,-5}, -{58,52,-4}, -{58,52,-3}, -{58,52,-2}, -{58,52,-1}, -{58,52,0}, -{58,52,1}, -{58,52,2}, -{58,52,3}, -{58,52,4}, -{58,52,5}, -{58,52,6}, -{58,52,7}, -{58,52,8}, -{58,52,9}, -{58,52,10}, -{58,52,11}, -{58,52,12}, -{58,52,13}, -{58,52,14}, -{58,52,15}, -{58,52,16}, -{58,52,17}, -{58,52,18}, -{58,52,19}, -{58,52,20}, -{58,52,21}, -{58,52,22}, -{58,52,23}, -{58,52,24}, -{58,52,25}, -{58,52,26}, -{58,52,27}, -{58,52,28}, -{58,52,29}, -{58,52,30}, -{58,52,31}, -{58,52,32}, -{58,52,33}, -{58,52,34}, -{58,52,35}, -{58,52,36}, -{58,52,37}, -{58,52,38}, -{58,52,39}, -{58,52,40}, -{58,52,41}, -{58,52,42}, -{58,52,43}, -{58,52,44}, -{58,52,45}, -{58,52,46}, -{58,52,47}, -{58,52,48}, -{58,52,49}, -{58,52,50}, -{58,52,51}, -{58,52,52}, -{58,52,53}, -{58,52,54}, -{58,52,55}, -{58,52,56}, -{58,52,57}, -{58,52,58}, -{58,52,59}, -{58,52,60}, -{58,52,61}, -{58,52,62}, -{58,52,63}, -{58,52,64}, -{58,52,65}, -{58,52,66}, -{58,52,67}, -{58,53,-65}, -{58,53,-64}, -{58,53,-63}, -{58,53,-62}, -{58,53,-61}, -{58,53,-60}, -{58,53,-59}, -{58,53,-58}, -{58,53,-57}, -{58,53,-56}, -{58,53,-55}, -{58,53,-54}, -{58,53,-53}, -{58,53,-52}, -{58,53,-51}, -{58,53,-50}, -{58,53,-49}, -{58,53,-48}, -{58,53,-47}, -{58,53,-46}, -{58,53,-45}, -{58,53,-44}, -{58,53,-43}, -{58,53,-42}, -{58,53,-41}, -{58,53,-40}, -{58,53,-39}, -{58,53,-38}, -{58,53,-37}, -{58,53,-36}, -{58,53,-35}, -{58,53,-34}, -{58,53,-33}, -{58,53,-32}, -{58,53,-31}, -{58,53,-30}, -{58,53,-29}, -{58,53,-28}, -{58,53,-27}, -{58,53,-26}, -{58,53,-25}, -{58,53,-24}, -{58,53,-23}, -{58,53,-22}, -{58,53,-21}, -{58,53,-20}, -{58,53,-19}, -{58,53,-18}, -{58,53,-17}, -{58,53,-16}, -{58,53,-15}, -{58,53,-14}, -{58,53,-13}, -{58,53,-12}, -{58,53,-11}, -{58,53,-10}, -{58,53,-9}, -{58,53,-8}, -{58,53,-7}, -{58,53,-6}, -{58,53,-5}, -{58,53,-4}, -{58,53,-3}, -{58,53,-2}, -{58,53,-1}, -{58,53,0}, -{58,53,1}, -{58,53,2}, -{58,53,3}, -{58,53,4}, -{58,53,5}, -{58,53,6}, -{58,53,7}, -{58,53,8}, -{58,53,9}, -{58,53,10}, -{58,53,11}, -{58,53,12}, -{58,53,13}, -{58,53,14}, -{58,53,15}, -{58,53,16}, -{58,53,17}, -{58,53,18}, -{58,53,19}, -{58,53,20}, -{58,53,21}, -{58,53,22}, -{58,53,23}, -{58,53,24}, -{58,53,25}, -{58,53,26}, -{58,53,27}, -{58,53,28}, -{58,53,29}, -{58,53,30}, -{58,53,31}, -{58,53,32}, -{58,53,33}, -{58,53,34}, -{58,53,35}, -{58,53,36}, -{58,53,37}, -{58,53,38}, -{58,53,39}, -{58,53,40}, -{58,53,41}, -{58,53,42}, -{58,53,43}, -{58,53,44}, -{58,53,45}, -{58,53,46}, -{58,53,47}, -{58,53,48}, -{58,53,49}, -{58,53,50}, -{58,53,51}, -{58,53,52}, -{58,53,53}, -{58,53,54}, -{58,53,55}, -{58,53,56}, -{58,53,57}, -{58,53,58}, -{58,53,59}, -{58,53,60}, -{58,53,61}, -{58,53,62}, -{58,53,63}, -{58,53,64}, -{58,53,65}, -{58,53,66}, -{58,53,67}, -{58,54,-65}, -{58,54,-64}, -{58,54,-63}, -{58,54,-62}, -{58,54,-61}, -{58,54,-60}, -{58,54,-59}, -{58,54,-58}, -{58,54,-57}, -{58,54,-56}, -{58,54,-55}, -{58,54,-54}, -{58,54,-53}, -{58,54,-52}, -{58,54,-51}, -{58,54,-50}, -{58,54,-49}, -{58,54,-48}, -{58,54,-47}, -{58,54,-46}, -{58,54,-45}, -{58,54,-44}, -{58,54,-43}, -{58,54,-42}, -{58,54,-41}, -{58,54,-40}, -{58,54,-39}, -{58,54,-38}, -{58,54,-37}, -{58,54,-36}, -{58,54,-35}, -{58,54,-34}, -{58,54,-33}, -{58,54,-32}, -{58,54,-31}, -{58,54,-30}, -{58,54,-29}, -{58,54,-28}, -{58,54,-27}, -{58,54,-26}, -{58,54,-25}, -{58,54,-24}, -{58,54,-23}, -{58,54,-22}, -{58,54,-21}, -{58,54,-20}, -{58,54,-19}, -{58,54,-18}, -{58,54,-17}, -{58,54,-16}, -{58,54,-15}, -{58,54,-14}, -{58,54,-13}, -{58,54,-12}, -{58,54,-11}, -{58,54,-10}, -{58,54,-9}, -{58,54,-8}, -{58,54,-7}, -{58,54,-6}, -{58,54,-5}, -{58,54,-4}, -{58,54,-3}, -{58,54,-2}, -{58,54,-1}, -{58,54,0}, -{58,54,1}, -{58,54,2}, -{58,54,3}, -{58,54,4}, -{58,54,5}, -{58,54,6}, -{58,54,7}, -{58,54,8}, -{58,54,9}, -{58,54,10}, -{58,54,11}, -{58,54,12}, -{58,54,13}, -{58,54,14}, -{58,54,15}, -{58,54,16}, -{58,54,17}, -{58,54,18}, -{58,54,19}, -{58,54,20}, -{58,54,21}, -{58,54,22}, -{58,54,23}, -{58,54,24}, -{58,54,25}, -{58,54,26}, -{58,54,27}, -{58,54,28}, -{58,54,29}, -{58,54,30}, -{58,54,31}, -{58,54,32}, -{58,54,33}, -{58,54,34}, -{58,54,35}, -{58,54,36}, -{58,54,37}, -{58,54,38}, -{58,54,39}, -{58,54,40}, -{58,54,41}, -{58,54,42}, -{58,54,43}, -{58,54,44}, -{58,54,45}, -{58,54,46}, -{58,54,47}, -{58,54,48}, -{58,54,49}, -{58,54,50}, -{58,54,51}, -{58,54,52}, -{58,54,53}, -{58,54,54}, -{58,54,55}, -{58,54,56}, -{58,54,57}, -{58,54,58}, -{58,54,59}, -{58,54,60}, -{58,54,61}, -{58,54,62}, -{58,54,63}, -{58,54,64}, -{58,54,65}, -{58,54,66}, -{58,54,67}, -{58,55,-65}, -{58,55,-64}, -{58,55,-63}, -{58,55,-62}, -{58,55,-61}, -{58,55,-60}, -{58,55,-59}, -{58,55,-58}, -{58,55,-57}, -{58,55,-56}, -{58,55,-55}, -{58,55,-54}, -{58,55,-53}, -{58,55,-52}, -{58,55,-51}, -{58,55,-50}, -{58,55,-49}, -{58,55,-48}, -{58,55,-47}, -{58,55,-46}, -{58,55,-45}, -{58,55,-44}, -{58,55,-43}, -{58,55,-42}, -{58,55,-41}, -{58,55,-40}, -{58,55,-39}, -{58,55,-38}, -{58,55,-37}, -{58,55,-36}, -{58,55,-35}, -{58,55,-34}, -{58,55,-33}, -{58,55,-32}, -{58,55,-31}, -{58,55,-30}, -{58,55,-29}, -{58,55,-28}, -{58,55,-27}, -{58,55,-26}, -{58,55,-25}, -{58,55,-24}, -{58,55,-23}, -{58,55,-22}, -{58,55,-21}, -{58,55,-20}, -{58,55,-19}, -{58,55,-18}, -{58,55,-17}, -{58,55,-16}, -{58,55,-15}, -{58,55,-14}, -{58,55,-13}, -{58,55,-12}, -{58,55,-11}, -{58,55,-10}, -{58,55,-9}, -{58,55,-8}, -{58,55,-7}, -{58,55,-6}, -{58,55,-5}, -{58,55,-4}, -{58,55,-3}, -{58,55,-2}, -{58,55,-1}, -{58,55,0}, -{58,55,1}, -{58,55,2}, -{58,55,3}, -{58,55,4}, -{58,55,5}, -{58,55,6}, -{58,55,7}, -{58,55,8}, -{58,55,9}, -{58,55,10}, -{58,55,11}, -{58,55,12}, -{58,55,13}, -{58,55,14}, -{58,55,15}, -{58,55,16}, -{58,55,17}, -{58,55,18}, -{58,55,19}, -{58,55,20}, -{58,55,21}, -{58,55,22}, -{58,55,23}, -{58,55,24}, -{58,55,25}, -{58,55,26}, -{58,55,27}, -{58,55,28}, -{58,55,29}, -{58,55,30}, -{58,55,31}, -{58,55,32}, -{58,55,33}, -{58,55,34}, -{58,55,35}, -{58,55,36}, -{58,55,37}, -{58,55,38}, -{58,55,39}, -{58,55,40}, -{58,55,41}, -{58,55,42}, -{58,55,43}, -{58,55,44}, -{58,55,45}, -{58,55,46}, -{58,55,47}, -{58,55,48}, -{58,55,49}, -{58,55,50}, -{58,55,51}, -{58,55,52}, -{58,55,53}, -{58,55,54}, -{58,55,55}, -{58,55,56}, -{58,55,57}, -{58,55,58}, -{58,55,59}, -{58,55,60}, -{58,55,61}, -{58,55,62}, -{58,55,63}, -{58,55,64}, -{58,55,65}, -{58,55,66}, -{58,55,67}, -{58,56,-65}, -{58,56,-64}, -{58,56,-63}, -{58,56,-62}, -{58,56,-61}, -{58,56,-60}, -{58,56,-59}, -{58,56,-58}, -{58,56,-57}, -{58,56,-56}, -{58,56,-55}, -{58,56,-54}, -{58,56,-53}, -{58,56,-52}, -{58,56,-51}, -{58,56,-50}, -{58,56,-49}, -{58,56,-48}, -{58,56,-47}, -{58,56,-46}, -{58,56,-45}, -{58,56,-44}, -{58,56,-43}, -{58,56,-42}, -{58,56,-41}, -{58,56,-40}, -{58,56,-39}, -{58,56,-38}, -{58,56,-37}, -{58,56,-36}, -{58,56,-35}, -{58,56,-34}, -{58,56,-33}, -{58,56,-32}, -{58,56,-31}, -{58,56,-30}, -{58,56,-29}, -{58,56,-28}, -{58,56,-27}, -{58,56,-26}, -{58,56,-25}, -{58,56,-24}, -{58,56,-23}, -{58,56,-22}, -{58,56,-21}, -{58,56,-20}, -{58,56,-19}, -{58,56,-18}, -{58,56,-17}, -{58,56,-16}, -{58,56,-15}, -{58,56,-14}, -{58,56,-13}, -{58,56,-12}, -{58,56,-11}, -{58,56,-10}, -{58,56,-9}, -{58,56,-8}, -{58,56,-7}, -{58,56,-6}, -{58,56,-5}, -{58,56,-4}, -{58,56,-3}, -{58,56,-2}, -{58,56,-1}, -{58,56,0}, -{58,56,1}, -{58,56,2}, -{58,56,3}, -{58,56,4}, -{58,56,5}, -{58,56,6}, -{58,56,7}, -{58,56,8}, -{58,56,9}, -{58,56,10}, -{58,56,11}, -{58,56,12}, -{58,56,13}, -{58,56,14}, -{58,56,15}, -{58,56,16}, -{58,56,17}, -{58,56,18}, -{58,56,19}, -{58,56,20}, -{58,56,21}, -{58,56,22}, -{58,56,23}, -{58,56,24}, -{58,56,25}, -{58,56,26}, -{58,56,27}, -{58,56,28}, -{58,56,29}, -{58,56,30}, -{58,56,31}, -{58,56,32}, -{58,56,33}, -{58,56,34}, -{58,56,35}, -{58,56,36}, -{58,56,37}, -{58,56,38}, -{58,56,39}, -{58,56,40}, -{58,56,41}, -{58,56,42}, -{58,56,43}, -{58,56,44}, -{58,56,45}, -{58,56,46}, -{58,56,47}, -{58,56,48}, -{58,56,49}, -{58,56,50}, -{58,56,51}, -{58,56,52}, -{58,56,53}, -{58,56,54}, -{58,56,55}, -{58,56,56}, -{58,56,57}, -{58,56,58}, -{58,56,59}, -{58,56,60}, -{58,56,61}, -{58,56,62}, -{58,56,63}, -{58,56,64}, -{58,56,65}, -{58,56,66}, -{58,56,67}, -{58,56,68}, -{58,57,-65}, -{58,57,-64}, -{58,57,-63}, -{58,57,-62}, -{58,57,-61}, -{58,57,-60}, -{58,57,-59}, -{58,57,-58}, -{58,57,-57}, -{58,57,-56}, -{58,57,-55}, -{58,57,-54}, -{58,57,-53}, -{58,57,-52}, -{58,57,-51}, -{58,57,-50}, -{58,57,-49}, -{58,57,-48}, -{58,57,-47}, -{58,57,-46}, -{58,57,-45}, -{58,57,-44}, -{58,57,-43}, -{58,57,-42}, -{58,57,-41}, -{58,57,-40}, -{58,57,-39}, -{58,57,-38}, -{58,57,-37}, -{58,57,-36}, -{58,57,-35}, -{58,57,-34}, -{58,57,-33}, -{58,57,-32}, -{58,57,-31}, -{58,57,-30}, -{58,57,-29}, -{58,57,-28}, -{58,57,-27}, -{58,57,-26}, -{58,57,-25}, -{58,57,-24}, -{58,57,-23}, -{58,57,-22}, -{58,57,-21}, -{58,57,-20}, -{58,57,-19}, -{58,57,-18}, -{58,57,-17}, -{58,57,-16}, -{58,57,-15}, -{58,57,-14}, -{58,57,-13}, -{58,57,-12}, -{58,57,-11}, -{58,57,-10}, -{58,57,-9}, -{58,57,-8}, -{58,57,-7}, -{58,57,-6}, -{58,57,-5}, -{58,57,-4}, -{58,57,-3}, -{58,57,-2}, -{58,57,-1}, -{58,57,0}, -{58,57,1}, -{58,57,2}, -{58,57,3}, -{58,57,4}, -{58,57,5}, -{58,57,6}, -{58,57,7}, -{58,57,8}, -{58,57,9}, -{58,57,10}, -{58,57,11}, -{58,57,12}, -{58,57,13}, -{58,57,14}, -{58,57,15}, -{58,57,16}, -{58,57,17}, -{58,57,18}, -{58,57,19}, -{58,57,20}, -{58,57,21}, -{58,57,22}, -{58,57,23}, -{58,57,24}, -{58,57,25}, -{58,57,26}, -{58,57,27}, -{58,57,28}, -{58,57,29}, -{58,57,30}, -{58,57,31}, -{58,57,32}, -{58,57,33}, -{58,57,34}, -{58,57,35}, -{58,57,36}, -{58,57,37}, -{58,57,38}, -{58,57,39}, -{58,57,40}, -{58,57,41}, -{58,57,42}, -{58,57,43}, -{58,57,44}, -{58,57,45}, -{58,57,46}, -{58,57,47}, -{58,57,48}, -{58,57,49}, -{58,57,50}, -{58,57,51}, -{58,57,52}, -{58,57,53}, -{58,57,54}, -{58,57,55}, -{58,57,56}, -{58,57,57}, -{58,57,58}, -{58,57,59}, -{58,57,60}, -{58,57,61}, -{58,57,62}, -{58,57,63}, -{58,57,64}, -{58,57,65}, -{58,57,66}, -{58,57,67}, -{58,57,68}, -{58,58,-65}, -{58,58,-64}, -{58,58,-63}, -{58,58,-62}, -{58,58,-61}, -{58,58,-60}, -{58,58,-59}, -{58,58,-58}, -{58,58,-57}, -{58,58,-56}, -{58,58,-55}, -{58,58,-54}, -{58,58,-53}, -{58,58,-52}, -{58,58,-51}, -{58,58,-50}, -{58,58,-49}, -{58,58,-48}, -{58,58,-47}, -{58,58,-46}, -{58,58,-45}, -{58,58,-44}, -{58,58,-43}, -{58,58,-42}, -{58,58,-41}, -{58,58,-40}, -{58,58,-39}, -{58,58,-38}, -{58,58,-37}, -{58,58,-36}, -{58,58,-35}, -{58,58,-34}, -{58,58,-33}, -{58,58,-32}, -{58,58,-31}, -{58,58,-30}, -{58,58,-29}, -{58,58,-28}, -{58,58,-27}, -{58,58,-26}, -{58,58,-25}, -{58,58,-24}, -{58,58,-23}, -{58,58,-22}, -{58,58,-21}, -{58,58,-20}, -{58,58,-19}, -{58,58,-18}, -{58,58,-17}, -{58,58,-16}, -{58,58,-15}, -{58,58,-14}, -{58,58,-13}, -{58,58,-12}, -{58,58,-11}, -{58,58,-10}, -{58,58,-9}, -{58,58,-8}, -{58,58,-7}, -{58,58,-6}, -{58,58,-5}, -{58,58,-4}, -{58,58,-3}, -{58,58,-2}, -{58,58,-1}, -{58,58,0}, -{58,58,1}, -{58,58,2}, -{58,58,3}, -{58,58,4}, -{58,58,5}, -{58,58,6}, -{58,58,7}, -{58,58,8}, -{58,58,9}, -{58,58,10}, -{58,58,11}, -{58,58,12}, -{58,58,13}, -{58,58,14}, -{58,58,15}, -{58,58,16}, -{58,58,17}, -{58,58,18}, -{58,58,19}, -{58,58,20}, -{58,58,21}, -{58,58,22}, -{58,58,23}, -{58,58,24}, -{58,58,25}, -{58,58,26}, -{58,58,27}, -{58,58,28}, -{58,58,29}, -{58,58,30}, -{58,58,31}, -{58,58,32}, -{58,58,33}, -{58,58,34}, -{58,58,35}, -{58,58,36}, -{58,58,37}, -{58,58,38}, -{58,58,39}, -{58,58,40}, -{58,58,41}, -{58,58,42}, -{58,58,43}, -{58,58,44}, -{58,58,45}, -{58,58,46}, -{58,58,47}, -{58,58,48}, -{58,58,49}, -{58,58,50}, -{58,58,51}, -{58,58,52}, -{58,58,53}, -{58,58,54}, -{58,58,55}, -{58,58,56}, -{58,58,57}, -{58,58,58}, -{58,58,59}, -{58,58,60}, -{58,58,61}, -{58,58,62}, -{58,58,63}, -{58,58,64}, -{58,58,65}, -{58,58,66}, -{58,58,67}, -{58,58,68}, -{58,59,-65}, -{58,59,-64}, -{58,59,-63}, -{58,59,-62}, -{58,59,-61}, -{58,59,-60}, -{58,59,-59}, -{58,59,-58}, -{58,59,-57}, -{58,59,-56}, -{58,59,-55}, -{58,59,-54}, -{58,59,-53}, -{58,59,-52}, -{58,59,-51}, -{58,59,-50}, -{58,59,-49}, -{58,59,-48}, -{58,59,-47}, -{58,59,-46}, -{58,59,-45}, -{58,59,-44}, -{58,59,-43}, -{58,59,-42}, -{58,59,-41}, -{58,59,-40}, -{58,59,-39}, -{58,59,-38}, -{58,59,-37}, -{58,59,-36}, -{58,59,-35}, -{58,59,-34}, -{58,59,-33}, -{58,59,-32}, -{58,59,-31}, -{58,59,-30}, -{58,59,-29}, -{58,59,-28}, -{58,59,-27}, -{58,59,-26}, -{58,59,-25}, -{58,59,-24}, -{58,59,-23}, -{58,59,-22}, -{58,59,-21}, -{58,59,-20}, -{58,59,-19}, -{58,59,-18}, -{58,59,-17}, -{58,59,-16}, -{58,59,-15}, -{58,59,-14}, -{58,59,-13}, -{58,59,-12}, -{58,59,-11}, -{58,59,-10}, -{58,59,-9}, -{58,59,-8}, -{58,59,-7}, -{58,59,-6}, -{58,59,-5}, -{58,59,-4}, -{58,59,-3}, -{58,59,-2}, -{58,59,-1}, -{58,59,0}, -{58,59,1}, -{58,59,2}, -{58,59,3}, -{58,59,4}, -{58,59,5}, -{58,59,6}, -{58,59,7}, -{58,59,8}, -{58,59,9}, -{58,59,10}, -{58,59,11}, -{58,59,12}, -{58,59,13}, -{58,59,14}, -{58,59,15}, -{58,59,16}, -{58,59,17}, -{58,59,18}, -{58,59,19}, -{58,59,20}, -{58,59,21}, -{58,59,22}, -{58,59,23}, -{58,59,24}, -{58,59,25}, -{58,59,26}, -{58,59,27}, -{58,59,28}, -{58,59,29}, -{58,59,30}, -{58,59,31}, -{58,59,32}, -{58,59,33}, -{58,59,34}, -{58,59,35}, -{58,59,36}, -{58,59,37}, -{58,59,38}, -{58,59,39}, -{58,59,40}, -{58,59,41}, -{58,59,42}, -{58,59,43}, -{58,59,44}, -{58,59,45}, -{58,59,46}, -{58,59,47}, -{58,59,48}, -{58,59,49}, -{58,59,50}, -{58,59,51}, -{58,59,52}, -{58,59,53}, -{58,59,54}, -{58,59,55}, -{58,59,56}, -{58,59,57}, -{58,59,58}, -{58,59,59}, -{58,59,60}, -{58,59,61}, -{58,59,62}, -{58,59,63}, -{58,59,64}, -{58,59,65}, -{58,59,66}, -{58,59,67}, -{58,59,68}, -{58,60,-65}, -{58,60,-64}, -{58,60,-63}, -{58,60,-62}, -{58,60,-61}, -{58,60,-60}, -{58,60,-59}, -{58,60,-58}, -{58,60,-57}, -{58,60,-56}, -{58,60,-55}, -{58,60,-54}, -{58,60,-53}, -{58,60,-52}, -{58,60,-51}, -{58,60,-50}, -{58,60,-49}, -{58,60,-48}, -{58,60,-47}, -{58,60,-46}, -{58,60,-45}, -{58,60,-44}, -{58,60,-43}, -{58,60,-42}, -{58,60,-41}, -{58,60,-40}, -{58,60,-39}, -{58,60,-38}, -{58,60,-37}, -{58,60,-36}, -{58,60,-35}, -{58,60,-34}, -{58,60,-33}, -{58,60,-32}, -{58,60,-31}, -{58,60,-30}, -{58,60,-29}, -{58,60,-28}, -{58,60,-27}, -{58,60,-26}, -{58,60,-25}, -{58,60,-24}, -{58,60,-23}, -{58,60,-22}, -{58,60,-21}, -{58,60,-20}, -{58,60,-19}, -{58,60,-18}, -{58,60,-17}, -{58,60,-16}, -{58,60,-15}, -{58,60,-14}, -{58,60,-13}, -{58,60,-12}, -{58,60,-11}, -{58,60,-10}, -{58,60,-9}, -{58,60,-8}, -{58,60,-7}, -{58,60,-6}, -{58,60,-5}, -{58,60,-4}, -{58,60,-3}, -{58,60,-2}, -{58,60,-1}, -{58,60,0}, -{58,60,1}, -{58,60,2}, -{58,60,3}, -{58,60,4}, -{58,60,5}, -{58,60,6}, -{58,60,7}, -{58,60,8}, -{58,60,9}, -{58,60,10}, -{58,60,11}, -{58,60,12}, -{58,60,13}, -{58,60,14}, -{58,60,15}, -{58,60,16}, -{58,60,17}, -{58,60,18}, -{58,60,19}, -{58,60,20}, -{58,60,21}, -{58,60,22}, -{58,60,23}, -{58,60,24}, -{58,60,25}, -{58,60,26}, -{58,60,27}, -{58,60,28}, -{58,60,29}, -{58,60,30}, -{58,60,31}, -{58,60,32}, -{58,60,33}, -{58,60,34}, -{58,60,35}, -{58,60,36}, -{58,60,37}, -{58,60,38}, -{58,60,39}, -{58,60,40}, -{58,60,41}, -{58,60,42}, -{58,60,43}, -{58,60,44}, -{58,60,45}, -{58,60,46}, -{58,60,47}, -{58,60,48}, -{58,60,49}, -{58,60,50}, -{58,60,51}, -{58,60,52}, -{58,60,53}, -{58,60,54}, -{58,60,55}, -{58,60,56}, -{58,60,57}, -{58,60,58}, -{58,60,59}, -{58,60,60}, -{58,60,61}, -{58,60,62}, -{58,60,63}, -{58,60,64}, -{58,60,65}, -{58,60,66}, -{58,60,67}, -{58,60,68}, -{58,61,-65}, -{58,61,-64}, -{58,61,-63}, -{58,61,-62}, -{58,61,-61}, -{58,61,-60}, -{58,61,-59}, -{58,61,-58}, -{58,61,-57}, -{58,61,-56}, -{58,61,-55}, -{58,61,-54}, -{58,61,-53}, -{58,61,-52}, -{58,61,-51}, -{58,61,-50}, -{58,61,-49}, -{58,61,-48}, -{58,61,-47}, -{58,61,-46}, -{58,61,-45}, -{58,61,-44}, -{58,61,-43}, -{58,61,-42}, -{58,61,-41}, -{58,61,-40}, -{58,61,-39}, -{58,61,-38}, -{58,61,-37}, -{58,61,-36}, -{58,61,-35}, -{58,61,-34}, -{58,61,-33}, -{58,61,-32}, -{58,61,-31}, -{58,61,-30}, -{58,61,-29}, -{58,61,-28}, -{58,61,-27}, -{58,61,-26}, -{58,61,-25}, -{58,61,-24}, -{58,61,-23}, -{58,61,-22}, -{58,61,-21}, -{58,61,-20}, -{58,61,-19}, -{58,61,-18}, -{58,61,-17}, -{58,61,-16}, -{58,61,-15}, -{58,61,-14}, -{58,61,-13}, -{58,61,-12}, -{58,61,-11}, -{58,61,-10}, -{58,61,-9}, -{58,61,-8}, -{58,61,-7}, -{58,61,-6}, -{58,61,-5}, -{58,61,-4}, -{58,61,-3}, -{58,61,-2}, -{58,61,-1}, -{58,61,0}, -{58,61,1}, -{58,61,2}, -{58,61,3}, -{58,61,4}, -{58,61,5}, -{58,61,6}, -{58,61,7}, -{58,61,8}, -{58,61,9}, -{58,61,10}, -{58,61,11}, -{58,61,12}, -{58,61,13}, -{58,61,14}, -{58,61,15}, -{58,61,16}, -{58,61,17}, -{58,61,18}, -{58,61,19}, -{58,61,20}, -{58,61,21}, -{58,61,22}, -{58,61,23}, -{58,61,24}, -{58,61,25}, -{58,61,26}, -{58,61,27}, -{58,61,28}, -{58,61,29}, -{58,61,30}, -{58,61,31}, -{58,61,32}, -{58,61,33}, -{58,61,34}, -{58,61,35}, -{58,61,36}, -{58,61,37}, -{58,61,38}, -{58,61,39}, -{58,61,40}, -{58,61,41}, -{58,61,42}, -{58,61,43}, -{58,61,44}, -{58,61,45}, -{58,61,46}, -{58,61,47}, -{58,61,48}, -{58,61,49}, -{58,61,50}, -{58,61,51}, -{58,61,52}, -{58,61,53}, -{58,61,54}, -{58,61,55}, -{58,61,56}, -{58,61,57}, -{58,61,58}, -{58,61,59}, -{58,61,60}, -{58,61,61}, -{58,61,62}, -{58,61,63}, -{58,61,64}, -{58,61,65}, -{58,61,66}, -{58,61,67}, -{58,61,68}, -{58,62,-65}, -{58,62,-64}, -{58,62,-63}, -{58,62,-62}, -{58,62,-61}, -{58,62,-60}, -{58,62,-59}, -{58,62,-58}, -{58,62,-57}, -{58,62,-56}, -{58,62,-55}, -{58,62,-54}, -{58,62,-53}, -{58,62,-52}, -{58,62,-51}, -{58,62,-50}, -{58,62,-49}, -{58,62,-48}, -{58,62,-47}, -{58,62,-46}, -{58,62,-45}, -{58,62,-44}, -{58,62,-43}, -{58,62,-42}, -{58,62,-41}, -{58,62,-40}, -{58,62,-39}, -{58,62,-38}, -{58,62,-37}, -{58,62,-36}, -{58,62,-35}, -{58,62,-34}, -{58,62,-33}, -{58,62,-32}, -{58,62,-31}, -{58,62,-30}, -{58,62,-29}, -{58,62,-28}, -{58,62,-27}, -{58,62,-26}, -{58,62,-25}, -{58,62,-24}, -{58,62,-23}, -{58,62,-22}, -{58,62,-21}, -{58,62,-20}, -{58,62,-19}, -{58,62,-18}, -{58,62,-17}, -{58,62,-16}, -{58,62,-15}, -{58,62,-14}, -{58,62,-13}, -{58,62,-12}, -{58,62,-11}, -{58,62,-10}, -{58,62,-9}, -{58,62,-8}, -{58,62,-7}, -{58,62,-6}, -{58,62,-5}, -{58,62,-4}, -{58,62,-3}, -{58,62,-2}, -{58,62,-1}, -{58,62,0}, -{58,62,1}, -{58,62,2}, -{58,62,3}, -{58,62,4}, -{58,62,5}, -{58,62,6}, -{58,62,7}, -{58,62,8}, -{58,62,9}, -{58,62,10}, -{58,62,11}, -{58,62,12}, -{58,62,13}, -{58,62,14}, -{58,62,15}, -{58,62,16}, -{58,62,17}, -{58,62,18}, -{58,62,19}, -{58,62,20}, -{58,62,21}, -{58,62,22}, -{58,62,23}, -{58,62,24}, -{58,62,25}, -{58,62,26}, -{58,62,27}, -{58,62,28}, -{58,62,29}, -{58,62,30}, -{58,62,31}, -{58,62,32}, -{58,62,33}, -{58,62,34}, -{58,62,35}, -{58,62,36}, -{58,62,37}, -{58,62,38}, -{58,62,39}, -{58,62,40}, -{58,62,41}, -{58,62,42}, -{58,62,43}, -{58,62,44}, -{58,62,45}, -{58,62,46}, -{58,62,47}, -{58,62,48}, -{58,62,49}, -{58,62,50}, -{58,62,51}, -{58,62,52}, -{58,62,53}, -{58,62,54}, -{58,62,55}, -{58,62,56}, -{58,62,57}, -{58,62,58}, -{58,62,59}, -{58,62,60}, -{58,62,61}, -{58,62,62}, -{58,62,63}, -{58,62,64}, -{58,62,65}, -{58,62,66}, -{58,62,67}, -{58,62,68}, -{58,63,-65}, -{58,63,-64}, -{58,63,-63}, -{58,63,-62}, -{58,63,-61}, -{58,63,-60}, -{58,63,-59}, -{58,63,-58}, -{58,63,-57}, -{58,63,-56}, -{58,63,-55}, -{58,63,-54}, -{58,63,-53}, -{58,63,-52}, -{58,63,-51}, -{58,63,-50}, -{58,63,-49}, -{58,63,-48}, -{58,63,-47}, -{58,63,-46}, -{58,63,-45}, -{58,63,-44}, -{58,63,-43}, -{58,63,-42}, -{58,63,-41}, -{58,63,-40}, -{58,63,-39}, -{58,63,-38}, -{58,63,-37}, -{58,63,-36}, -{58,63,-35}, -{58,63,-34}, -{58,63,-33}, -{58,63,-32}, -{58,63,-31}, -{58,63,-30}, -{58,63,-29}, -{58,63,-28}, -{58,63,-27}, -{58,63,-26}, -{58,63,-25}, -{58,63,-24}, -{58,63,-23}, -{58,63,-22}, -{58,63,-21}, -{58,63,-20}, -{58,63,-19}, -{58,63,-18}, -{58,63,-17}, -{58,63,-16}, -{58,63,-15}, -{58,63,-14}, -{58,63,-13}, -{58,63,-12}, -{58,63,-11}, -{58,63,-10}, -{58,63,-9}, -{58,63,-8}, -{58,63,-7}, -{58,63,-6}, -{58,63,-5}, -{58,63,-4}, -{58,63,-3}, -{58,63,-2}, -{58,63,-1}, -{58,63,0}, -{58,63,1}, -{58,63,2}, -{58,63,3}, -{58,63,4}, -{58,63,5}, -{58,63,6}, -{58,63,7}, -{58,63,8}, -{58,63,9}, -{58,63,10}, -{58,63,11}, -{58,63,12}, -{58,63,13}, -{58,63,14}, -{58,63,15}, -{58,63,16}, -{58,63,17}, -{58,63,18}, -{58,63,19}, -{58,63,20}, -{58,63,21}, -{58,63,22}, -{58,63,23}, -{58,63,24}, -{58,63,25}, -{58,63,26}, -{58,63,27}, -{58,63,28}, -{58,63,29}, -{58,63,30}, -{58,63,31}, -{58,63,32}, -{58,63,33}, -{58,63,34}, -{58,63,35}, -{58,63,36}, -{58,63,37}, -{58,63,38}, -{58,63,39}, -{58,63,40}, -{58,63,41}, -{58,63,42}, -{58,63,43}, -{58,63,44}, -{58,63,45}, -{58,63,46}, -{58,63,47}, -{58,63,48}, -{58,63,49}, -{58,63,50}, -{58,63,51}, -{58,63,52}, -{58,63,53}, -{58,63,54}, -{58,63,55}, -{58,63,56}, -{58,63,57}, -{58,63,58}, -{58,63,59}, -{58,63,60}, -{58,63,61}, -{58,63,62}, -{58,63,63}, -{58,63,64}, -{58,63,65}, -{58,63,66}, -{58,63,67}, -{58,63,68}, -{58,64,-65}, -{58,64,-64}, -{58,64,-63}, -{58,64,-62}, -{58,64,-61}, -{58,64,-60}, -{58,64,-59}, -{58,64,-58}, -{58,64,-57}, -{58,64,-56}, -{58,64,-55}, -{58,64,-54}, -{58,64,-53}, -{58,64,-52}, -{58,64,-51}, -{58,64,-50}, -{58,64,-49}, -{58,64,-48}, -{58,64,-47}, -{58,64,-46}, -{58,64,-45}, -{58,64,-44}, -{58,64,-43}, -{58,64,-42}, -{58,64,-41}, -{58,64,-40}, -{58,64,-39}, -{58,64,-38}, -{58,64,-37}, -{58,64,-36}, -{58,64,-35}, -{58,64,-34}, -{58,64,-33}, -{58,64,-32}, -{58,64,-31}, -{58,64,-30}, -{58,64,-29}, -{58,64,-28}, -{58,64,-27}, -{58,64,-26}, -{58,64,-25}, -{58,64,-24}, -{58,64,-23}, -{58,64,-22}, -{58,64,-21}, -{58,64,-20}, -{58,64,-19}, -{58,64,-18}, -{58,64,-17}, -{58,64,-16}, -{58,64,-15}, -{58,64,-14}, -{58,64,-13}, -{58,64,-12}, -{58,64,-11}, -{58,64,-10}, -{58,64,-9}, -{58,64,-8}, -{58,64,-7}, -{58,64,-6}, -{58,64,-5}, -{58,64,-4}, -{58,64,-3}, -{58,64,-2}, -{58,64,-1}, -{58,64,0}, -{58,64,1}, -{58,64,2}, -{58,64,3}, -{58,64,4}, -{58,64,5}, -{58,64,6}, -{58,64,7}, -{58,64,8}, -{58,64,9}, -{58,64,10}, -{58,64,11}, -{58,64,12}, -{58,64,13}, -{58,64,14}, -{58,64,15}, -{58,64,16}, -{58,64,17}, -{58,64,18}, -{58,64,19}, -{58,64,20}, -{58,64,21}, -{58,64,22}, -{58,64,23}, -{58,64,24}, -{58,64,25}, -{58,64,26}, -{58,64,27}, -{58,64,28}, -{58,64,29}, -{58,64,30}, -{58,64,31}, -{58,64,32}, -{58,64,33}, -{58,64,34}, -{58,64,35}, -{58,64,36}, -{58,64,37}, -{58,64,38}, -{58,64,39}, -{58,64,40}, -{58,64,41}, -{58,64,42}, -{58,64,43}, -{58,64,44}, -{58,64,45}, -{58,64,46}, -{58,64,47}, -{58,64,48}, -{58,64,49}, -{58,64,50}, -{58,64,51}, -{58,64,52}, -{58,64,53}, -{58,64,54}, -{58,64,55}, -{58,64,56}, -{58,64,57}, -{58,64,58}, -{58,64,59}, -{58,64,60}, -{58,64,61}, -{58,64,62}, -{58,64,63}, -{58,64,64}, -{58,64,65}, -{58,64,66}, -{58,64,67}, -{58,64,68}, -{58,64,69}, -{58,65,-65}, -{58,65,-64}, -{58,65,-63}, -{58,65,-62}, -{58,65,-61}, -{58,65,-60}, -{58,65,-59}, -{58,65,-58}, -{58,65,-57}, -{58,65,-56}, -{58,65,-55}, -{58,65,-54}, -{58,65,-53}, -{58,65,-52}, -{58,65,-51}, -{58,65,-50}, -{58,65,-49}, -{58,65,-48}, -{58,65,-47}, -{58,65,-46}, -{58,65,-45}, -{58,65,-44}, -{58,65,-43}, -{58,65,-42}, -{58,65,-41}, -{58,65,-40}, -{58,65,-39}, -{58,65,-38}, -{58,65,-37}, -{58,65,-36}, -{58,65,-35}, -{58,65,-34}, -{58,65,-33}, -{58,65,-32}, -{58,65,-31}, -{58,65,-30}, -{58,65,-29}, -{58,65,-28}, -{58,65,-27}, -{58,65,-26}, -{58,65,-25}, -{58,65,-24}, -{58,65,-23}, -{58,65,-22}, -{58,65,-21}, -{58,65,-20}, -{58,65,-19}, -{58,65,-18}, -{58,65,-17}, -{58,65,-16}, -{58,65,-15}, -{58,65,-14}, -{58,65,-13}, -{58,65,-12}, -{58,65,-11}, -{58,65,-10}, -{58,65,-9}, -{58,65,-8}, -{58,65,-7}, -{58,65,-6}, -{58,65,-5}, -{58,65,-4}, -{58,65,-3}, -{58,65,-2}, -{58,65,-1}, -{58,65,0}, -{58,65,1}, -{58,65,2}, -{58,65,3}, -{58,65,4}, -{58,65,5}, -{58,65,6}, -{58,65,7}, -{58,65,8}, -{58,65,9}, -{58,65,10}, -{58,65,11}, -{58,65,12}, -{58,65,13}, -{58,65,14}, -{58,65,15}, -{58,65,16}, -{58,65,17}, -{58,65,18}, -{58,65,19}, -{58,65,20}, -{58,65,21}, -{58,65,22}, -{58,65,23}, -{58,65,24}, -{58,65,25}, -{58,65,26}, -{58,65,27}, -{58,65,28}, -{58,65,29}, -{58,65,30}, -{58,65,31}, -{58,65,32}, -{58,65,33}, -{58,65,34}, -{58,65,35}, -{58,65,36}, -{58,65,37}, -{58,65,38}, -{58,65,39}, -{58,65,40}, -{58,65,41}, -{58,65,42}, -{58,65,43}, -{58,65,44}, -{58,65,45}, -{58,65,46}, -{58,65,47}, -{58,65,48}, -{58,65,49}, -{58,65,50}, -{58,65,51}, -{58,65,52}, -{58,65,53}, -{58,65,54}, -{58,65,55}, -{58,65,56}, -{58,65,57}, -{58,65,58}, -{58,65,59}, -{58,65,60}, -{58,65,61}, -{58,65,62}, -{58,65,63}, -{58,65,64}, -{58,65,65}, -{58,65,66}, -{58,65,67}, -{58,65,68}, -{58,65,69}, -{58,66,-65}, -{58,66,-64}, -{58,66,-63}, -{58,66,-62}, -{58,66,-61}, -{58,66,-60}, -{58,66,-59}, -{58,66,-58}, -{58,66,-57}, -{58,66,-56}, -{58,66,-55}, -{58,66,-54}, -{58,66,-53}, -{58,66,-52}, -{58,66,-51}, -{58,66,-50}, -{58,66,-49}, -{58,66,-48}, -{58,66,-47}, -{58,66,-46}, -{58,66,-45}, -{58,66,-44}, -{58,66,-43}, -{58,66,-42}, -{58,66,-41}, -{58,66,-40}, -{58,66,-39}, -{58,66,-38}, -{58,66,-37}, -{58,66,-36}, -{58,66,-35}, -{58,66,-34}, -{58,66,-33}, -{58,66,-32}, -{58,66,-31}, -{58,66,-30}, -{58,66,-29}, -{58,66,-28}, -{58,66,-27}, -{58,66,-26}, -{58,66,-25}, -{58,66,-24}, -{58,66,-23}, -{58,66,-22}, -{58,66,-21}, -{58,66,-20}, -{58,66,-19}, -{58,66,-18}, -{58,66,-17}, -{58,66,-16}, -{58,66,-15}, -{58,66,-14}, -{58,66,-13}, -{58,66,-12}, -{58,66,-11}, -{58,66,-10}, -{58,66,-9}, -{58,66,-8}, -{58,66,-7}, -{58,66,-6}, -{58,66,-5}, -{58,66,-4}, -{58,66,-3}, -{58,66,-2}, -{58,66,-1}, -{58,66,0}, -{58,66,1}, -{58,66,2}, -{58,66,3}, -{58,66,4}, -{58,66,5}, -{58,66,6}, -{58,66,7}, -{58,66,8}, -{58,66,9}, -{58,66,10}, -{58,66,11}, -{58,66,12}, -{58,66,13}, -{58,66,14}, -{58,66,15}, -{58,66,16}, -{58,66,17}, -{58,66,18}, -{58,66,19}, -{58,66,20}, -{58,66,21}, -{58,66,22}, -{58,66,23}, -{58,66,24}, -{58,66,25}, -{58,66,26}, -{58,66,27}, -{58,66,28}, -{58,66,29}, -{58,66,30}, -{58,66,31}, -{58,66,32}, -{58,66,33}, -{58,66,34}, -{58,66,35}, -{58,66,36}, -{58,66,37}, -{58,66,38}, -{58,66,39}, -{58,66,40}, -{58,66,41}, -{58,66,42}, -{58,66,43}, -{58,66,44}, -{58,66,45}, -{58,66,46}, -{58,66,47}, -{58,66,48}, -{58,66,49}, -{58,66,50}, -{58,66,51}, -{58,66,52}, -{58,66,53}, -{58,66,54}, -{58,66,55}, -{58,66,56}, -{58,66,57}, -{58,66,58}, -{58,66,59}, -{58,66,60}, -{58,66,61}, -{58,66,62}, -{58,66,63}, -{58,66,64}, -{58,66,65}, -{58,66,66}, -{58,66,67}, -{58,66,68}, -{58,66,69}, -{58,67,-65}, -{58,67,-64}, -{58,67,-63}, -{58,67,-62}, -{58,67,-61}, -{58,67,-60}, -{58,67,-59}, -{58,67,-58}, -{58,67,-57}, -{58,67,-56}, -{58,67,-55}, -{58,67,-54}, -{58,67,-53}, -{58,67,-52}, -{58,67,-51}, -{58,67,-50}, -{58,67,-49}, -{58,67,-48}, -{58,67,-47}, -{58,67,-46}, -{58,67,-45}, -{58,67,-44}, -{58,67,-43}, -{58,67,-42}, -{58,67,-41}, -{58,67,-40}, -{58,67,-39}, -{58,67,-38}, -{58,67,-37}, -{58,67,-36}, -{58,67,-35}, -{58,67,-34}, -{58,67,-33}, -{58,67,-32}, -{58,67,-31}, -{58,67,-30}, -{58,67,-29}, -{58,67,-28}, -{58,67,-27}, -{58,67,-26}, -{58,67,-25}, -{58,67,-24}, -{58,67,-23}, -{58,67,-22}, -{58,67,-21}, -{58,67,-20}, -{58,67,-19}, -{58,67,-18}, -{58,67,-17}, -{58,67,-16}, -{58,67,-15}, -{58,67,-14}, -{58,67,-13}, -{58,67,-12}, -{58,67,-11}, -{58,67,-10}, -{58,67,-9}, -{58,67,-8}, -{58,67,-7}, -{58,67,-6}, -{58,67,-5}, -{58,67,-4}, -{58,67,-3}, -{58,67,-2}, -{58,67,-1}, -{58,67,0}, -{58,67,1}, -{58,67,2}, -{58,67,3}, -{58,67,4}, -{58,67,5}, -{58,67,6}, -{58,67,7}, -{58,67,8}, -{58,67,9}, -{58,67,10}, -{58,67,11}, -{58,67,12}, -{58,67,13}, -{58,67,14}, -{58,67,15}, -{58,67,16}, -{58,67,17}, -{58,67,18}, -{58,67,19}, -{58,67,20}, -{58,67,21}, -{58,67,22}, -{58,67,23}, -{58,67,24}, -{58,67,25}, -{58,67,26}, -{58,67,27}, -{58,67,28}, -{58,67,29}, -{58,67,30}, -{58,67,31}, -{58,67,32}, -{58,67,33}, -{58,67,34}, -{58,67,35}, -{58,67,36}, -{58,67,37}, -{58,67,38}, -{58,67,39}, -{58,67,40}, -{58,67,41}, -{58,67,42}, -{58,67,43}, -{58,67,44}, -{58,67,45}, -{58,67,46}, -{58,67,47}, -{58,67,48}, -{58,67,49}, -{58,67,50}, -{58,67,51}, -{58,67,52}, -{58,67,53}, -{58,67,54}, -{58,67,55}, -{58,67,56}, -{58,67,57}, -{58,67,58}, -{58,67,59}, -{58,67,60}, -{58,67,61}, -{58,67,62}, -{58,67,63}, -{58,67,64}, -{58,67,65}, -{58,67,66}, -{58,68,-65}, -{58,68,-64}, -{58,68,-63}, -{58,68,-62}, -{58,68,-61}, -{58,68,-60}, -{58,68,-59}, -{58,68,-58}, -{58,68,-57}, -{58,68,-56}, -{58,68,-55}, -{58,68,-54}, -{58,68,-53}, -{58,68,-52}, -{58,68,-51}, -{58,68,-50}, -{58,68,-49}, -{58,68,-48}, -{58,68,-47}, -{58,68,-46}, -{58,68,-45}, -{58,68,-44}, -{58,68,-43}, -{58,68,-42}, -{58,68,-41}, -{58,68,-40}, -{58,68,-39}, -{58,68,-38}, -{58,68,-37}, -{58,68,-36}, -{58,68,-35}, -{58,68,-34}, -{58,68,-33}, -{58,68,-32}, -{58,68,-31}, -{58,68,-30}, -{58,68,-29}, -{58,68,-28}, -{58,68,-27}, -{58,68,-26}, -{58,68,-25}, -{58,68,-24}, -{58,68,-23}, -{58,68,-22}, -{58,68,-21}, -{58,68,-20}, -{58,68,-19}, -{58,68,-18}, -{58,68,-17}, -{58,68,-16}, -{58,68,-15}, -{58,68,-14}, -{58,68,-13}, -{58,68,-12}, -{58,68,-11}, -{58,68,-10}, -{58,68,-9}, -{58,68,-8}, -{58,68,-7}, -{58,68,-6}, -{58,68,-5}, -{58,68,-4}, -{58,68,-3}, -{58,68,-2}, -{58,68,-1}, -{58,68,0}, -{58,68,1}, -{58,68,2}, -{58,68,3}, -{58,68,4}, -{58,68,5}, -{58,68,6}, -{58,68,7}, -{58,68,8}, -{58,68,9}, -{58,68,10}, -{58,68,11}, -{58,68,12}, -{58,68,13}, -{58,68,14}, -{58,68,15}, -{58,68,16}, -{58,68,17}, -{58,68,18}, -{58,68,19}, -{58,68,20}, -{58,68,21}, -{58,68,22}, -{58,68,23}, -{58,68,24}, -{58,68,25}, -{58,68,26}, -{58,68,27}, -{58,68,28}, -{58,68,29}, -{58,68,30}, -{58,68,31}, -{58,68,32}, -{58,68,33}, -{58,68,34}, -{58,68,35}, -{58,68,36}, -{58,68,37}, -{58,68,38}, -{58,68,39}, -{58,68,40}, -{58,68,41}, -{58,68,42}, -{58,68,43}, -{58,68,44}, -{58,68,45}, -{58,68,46}, -{58,68,47}, -{58,68,48}, -{58,68,49}, -{58,68,50}, -{58,68,51}, -{58,68,52}, -{58,68,53}, -{58,68,54}, -{58,69,-65}, -{58,69,-64}, -{58,69,-63}, -{58,69,-62}, -{58,69,-61}, -{58,69,-60}, -{58,69,-59}, -{58,69,-58}, -{58,69,-57}, -{58,69,-56}, -{58,69,-55}, -{58,69,-54}, -{58,69,-53}, -{58,69,-52}, -{58,69,-51}, -{58,69,-50}, -{58,69,-49}, -{58,69,-48}, -{58,69,-47}, -{58,69,-46}, -{58,69,-45}, -{58,69,-44}, -{58,69,-43}, -{58,69,-42}, -{58,69,-41}, -{58,69,-40}, -{58,69,-39}, -{58,69,-38}, -{58,69,-37}, -{58,69,-36}, -{58,69,-35}, -{58,69,-34}, -{58,69,-33}, -{58,69,-32}, -{58,69,-31}, -{58,69,-30}, -{58,69,-29}, -{58,69,-28}, -{58,69,-27}, -{58,69,-26}, -{58,69,-25}, -{58,69,-24}, -{58,69,-23}, -{58,69,-22}, -{58,69,-21}, -{58,69,-20}, -{58,69,-19}, -{58,69,-18}, -{58,69,-17}, -{58,69,-16}, -{58,69,-15}, -{58,69,-14}, -{58,69,-13}, -{58,69,-12}, -{58,69,-11}, -{58,69,-10}, -{58,69,-9}, -{58,69,-8}, -{58,69,-7}, -{58,69,-6}, -{58,69,-5}, -{58,69,-4}, -{58,69,-3}, -{58,69,-2}, -{58,69,-1}, -{58,69,0}, -{58,69,1}, -{58,69,2}, -{58,69,3}, -{58,69,4}, -{58,69,5}, -{58,69,6}, -{58,69,7}, -{58,69,8}, -{58,69,9}, -{58,69,10}, -{58,69,11}, -{58,69,12}, -{58,69,13}, -{58,69,14}, -{58,69,15}, -{58,69,16}, -{58,69,17}, -{58,69,18}, -{58,69,19}, -{58,69,20}, -{58,69,21}, -{58,69,22}, -{58,69,23}, -{58,69,24}, -{58,69,25}, -{58,69,26}, -{58,69,27}, -{58,69,28}, -{58,69,29}, -{58,69,30}, -{58,69,31}, -{58,69,32}, -{58,69,33}, -{58,69,34}, -{58,69,35}, -{58,69,36}, -{58,69,37}, -{58,69,38}, -{58,69,39}, -{58,69,40}, -{58,69,41}, -{58,69,42}, -{58,69,43}, -{58,69,44}, -{58,69,45}, -{58,70,-65}, -{58,70,-64}, -{58,70,-63}, -{58,70,-62}, -{58,70,-61}, -{58,70,-60}, -{58,70,-59}, -{58,70,-58}, -{58,70,-57}, -{58,70,-56}, -{58,70,-55}, -{58,70,-54}, -{58,70,-53}, -{58,70,-52}, -{58,70,-51}, -{58,70,-50}, -{58,70,-49}, -{58,70,-48}, -{58,70,-47}, -{58,70,-46}, -{58,70,-45}, -{58,70,-44}, -{58,70,-43}, -{58,70,-42}, -{58,70,-41}, -{58,70,-40}, -{58,70,-39}, -{58,70,-38}, -{58,70,-37}, -{58,70,-36}, -{58,70,-35}, -{58,70,-34}, -{58,70,-33}, -{58,70,-32}, -{58,70,-31}, -{58,70,-30}, -{58,70,-29}, -{58,70,-28}, -{58,70,-27}, -{58,70,-26}, -{58,70,-25}, -{58,70,-24}, -{58,70,-23}, -{58,70,-22}, -{58,70,-21}, -{58,70,-20}, -{58,70,-19}, -{58,70,-18}, -{58,70,-17}, -{58,70,-16}, -{58,70,-15}, -{58,70,-14}, -{58,70,-13}, -{58,70,-12}, -{58,70,-11}, -{58,70,-10}, -{58,70,-9}, -{58,70,-8}, -{58,70,-7}, -{58,70,-6}, -{58,70,-5}, -{58,70,-4}, -{58,70,-3}, -{58,70,-2}, -{58,70,-1}, -{58,70,0}, -{58,70,1}, -{58,70,2}, -{58,70,3}, -{58,70,4}, -{58,70,5}, -{58,70,6}, -{58,70,7}, -{58,70,8}, -{58,70,9}, -{58,70,10}, -{58,70,11}, -{58,70,12}, -{58,70,13}, -{58,70,14}, -{58,70,15}, -{58,70,16}, -{58,70,17}, -{58,70,18}, -{58,70,19}, -{58,70,20}, -{58,70,21}, -{58,70,22}, -{58,70,23}, -{58,70,24}, -{58,70,25}, -{58,70,26}, -{58,70,27}, -{58,70,28}, -{58,70,29}, -{58,70,30}, -{58,70,31}, -{58,70,32}, -{58,70,33}, -{58,70,34}, -{58,70,35}, -{58,70,36}, -{58,70,37}, -{58,70,38}, -{58,71,-65}, -{58,71,-64}, -{58,71,-63}, -{58,71,-62}, -{58,71,-61}, -{58,71,-60}, -{58,71,-59}, -{58,71,-58}, -{58,71,-57}, -{58,71,-56}, -{58,71,-55}, -{58,71,-54}, -{58,71,-53}, -{58,71,-52}, -{58,71,-51}, -{58,71,-50}, -{58,71,-49}, -{58,71,-48}, -{58,71,-47}, -{58,71,-46}, -{58,71,-45}, -{58,71,-44}, -{58,71,-43}, -{58,71,-42}, -{58,71,-41}, -{58,71,-40}, -{58,71,-39}, -{58,71,-38}, -{58,71,-37}, -{58,71,-36}, -{58,71,-35}, -{58,71,-34}, -{58,71,-33}, -{58,71,-32}, -{58,71,-31}, -{58,71,-30}, -{58,71,-29}, -{58,71,-28}, -{58,71,-27}, -{58,71,-26}, -{58,71,-25}, -{58,71,-24}, -{58,71,-23}, -{58,71,-22}, -{58,71,-21}, -{58,71,-20}, -{58,71,-19}, -{58,71,-18}, -{58,71,-17}, -{58,71,-16}, -{58,71,-15}, -{58,71,-14}, -{58,71,-13}, -{58,71,-12}, -{58,71,-11}, -{58,71,-10}, -{58,71,-9}, -{58,71,-8}, -{58,71,-7}, -{58,71,-6}, -{58,71,-5}, -{58,71,-4}, -{58,71,-3}, -{58,71,-2}, -{58,71,-1}, -{58,71,0}, -{58,71,1}, -{58,71,2}, -{58,71,3}, -{58,71,4}, -{58,71,5}, -{58,71,6}, -{58,71,7}, -{58,71,8}, -{58,71,9}, -{58,71,10}, -{58,71,11}, -{58,71,12}, -{58,71,13}, -{58,71,14}, -{58,71,15}, -{58,71,16}, -{58,71,17}, -{58,71,18}, -{58,71,19}, -{58,71,20}, -{58,71,21}, -{58,71,22}, -{58,71,23}, -{58,71,24}, -{58,71,25}, -{58,71,26}, -{58,71,27}, -{58,71,28}, -{58,71,29}, -{58,71,30}, -{58,71,31}, -{58,72,-65}, -{58,72,-64}, -{58,72,-63}, -{58,72,-62}, -{58,72,-61}, -{58,72,-60}, -{58,72,-59}, -{58,72,-58}, -{58,72,-57}, -{58,72,-56}, -{58,72,-55}, -{58,72,-54}, -{58,72,-53}, -{58,72,-52}, -{58,72,-51}, -{58,72,-50}, -{58,72,-49}, -{58,72,-48}, -{58,72,-47}, -{58,72,-46}, -{58,72,-45}, -{58,72,-44}, -{58,72,-43}, -{58,72,-42}, -{58,72,-41}, -{58,72,-40}, -{58,72,-39}, -{58,72,-38}, -{58,72,-37}, -{58,72,-36}, -{58,72,-35}, -{58,72,-34}, -{58,72,-33}, -{58,72,-32}, -{58,72,-31}, -{58,72,-30}, -{58,72,-29}, -{58,72,-28}, -{58,72,-27}, -{58,72,-26}, -{58,72,-25}, -{58,72,-24}, -{58,72,-23}, -{58,72,-22}, -{58,72,-21}, -{58,72,-20}, -{58,72,-19}, -{58,72,-18}, -{58,72,-17}, -{58,72,-16}, -{58,72,-15}, -{58,72,-14}, -{58,72,-13}, -{58,72,-12}, -{58,72,-11}, -{58,72,-10}, -{58,72,-9}, -{58,72,-8}, -{58,72,-7}, -{58,72,-6}, -{58,72,-5}, -{58,72,-4}, -{58,72,-3}, -{58,72,-2}, -{58,72,-1}, -{58,72,0}, -{58,72,1}, -{58,72,2}, -{58,72,3}, -{58,72,4}, -{58,72,5}, -{58,72,6}, -{58,72,7}, -{58,72,8}, -{58,72,9}, -{58,72,10}, -{58,72,11}, -{58,72,12}, -{58,72,13}, -{58,72,14}, -{58,72,15}, -{58,72,16}, -{58,72,17}, -{58,72,18}, -{58,72,19}, -{58,72,20}, -{58,72,21}, -{58,72,22}, -{58,72,23}, -{58,72,24}, -{58,72,25}, -{58,72,26}, -{58,73,-65}, -{58,73,-64}, -{58,73,-63}, -{58,73,-62}, -{58,73,-61}, -{58,73,-60}, -{58,73,-59}, -{58,73,-58}, -{58,73,-57}, -{58,73,-56}, -{58,73,-55}, -{58,73,-54}, -{58,73,-53}, -{58,73,-52}, -{58,73,-51}, -{58,73,-50}, -{58,73,-49}, -{58,73,-48}, -{58,73,-47}, -{58,73,-46}, -{58,73,-45}, -{58,73,-44}, -{58,73,-43}, -{58,73,-42}, -{58,73,-41}, -{58,73,-40}, -{58,73,-39}, -{58,73,-38}, -{58,73,-37}, -{58,73,-36}, -{58,73,-35}, -{58,73,-34}, -{58,73,-33}, -{58,73,-32}, -{58,73,-31}, -{58,73,-30}, -{58,73,-29}, -{58,73,-28}, -{58,73,-27}, -{58,73,-26}, -{58,73,-25}, -{58,73,-24}, -{58,73,-23}, -{58,73,-22}, -{58,73,-21}, -{58,73,-20}, -{58,73,-19}, -{58,73,-18}, -{58,73,-17}, -{58,73,-16}, -{58,73,-15}, -{58,73,-14}, -{58,73,-13}, -{58,73,-12}, -{58,73,-11}, -{58,73,-10}, -{58,73,-9}, -{58,73,-8}, -{58,73,-7}, -{58,73,-6}, -{58,73,-5}, -{58,73,-4}, -{58,73,-3}, -{58,73,-2}, -{58,73,-1}, -{58,73,0}, -{58,73,1}, -{58,73,2}, -{58,73,3}, -{58,73,4}, -{58,73,5}, -{58,73,6}, -{58,73,7}, -{58,73,8}, -{58,73,9}, -{58,73,10}, -{58,73,11}, -{58,73,12}, -{58,73,13}, -{58,73,14}, -{58,73,15}, -{58,73,16}, -{58,73,17}, -{58,73,18}, -{58,73,19}, -{58,73,20}, -{58,74,-65}, -{58,74,-64}, -{58,74,-63}, -{58,74,-62}, -{58,74,-61}, -{58,74,-60}, -{58,74,-59}, -{58,74,-58}, -{58,74,-57}, -{58,74,-56}, -{58,74,-55}, -{58,74,-54}, -{58,74,-53}, -{58,74,-52}, -{58,74,-51}, -{58,74,-50}, -{58,74,-49}, -{58,74,-48}, -{58,74,-47}, -{58,74,-46}, -{58,74,-45}, -{58,74,-44}, -{58,74,-43}, -{58,74,-42}, -{58,74,-41}, -{58,74,-40}, -{58,74,-39}, -{58,74,-38}, -{58,74,-37}, -{58,74,-36}, -{58,74,-35}, -{58,74,-34}, -{58,74,-33}, -{58,74,-32}, -{58,74,-31}, -{58,74,-30}, -{58,74,-29}, -{58,74,-28}, -{58,74,-27}, -{58,74,-26}, -{58,74,-25}, -{58,74,-24}, -{58,74,-23}, -{58,74,-22}, -{58,74,-21}, -{58,74,-20}, -{58,74,-19}, -{58,74,-18}, -{58,74,-17}, -{58,74,-16}, -{58,74,-15}, -{58,74,-14}, -{58,74,-13}, -{58,74,-12}, -{58,74,-11}, -{58,74,-10}, -{58,74,-9}, -{58,74,-8}, -{58,74,-7}, -{58,74,-6}, -{58,74,-5}, -{58,74,-4}, -{58,74,-3}, -{58,74,-2}, -{58,74,-1}, -{58,74,0}, -{58,74,1}, -{58,74,2}, -{58,74,3}, -{58,74,4}, -{58,74,5}, -{58,74,6}, -{58,74,7}, -{58,74,8}, -{58,74,9}, -{58,74,10}, -{58,74,11}, -{58,74,12}, -{58,74,13}, -{58,74,14}, -{58,74,15}, -{58,74,16}, -{58,75,-65}, -{58,75,-64}, -{58,75,-63}, -{58,75,-62}, -{58,75,-61}, -{58,75,-60}, -{58,75,-59}, -{58,75,-58}, -{58,75,-57}, -{58,75,-56}, -{58,75,-55}, -{58,75,-54}, -{58,75,-53}, -{58,75,-52}, -{58,75,-51}, -{58,75,-50}, -{58,75,-49}, -{58,75,-48}, -{58,75,-47}, -{58,75,-46}, -{58,75,-45}, -{58,75,-44}, -{58,75,-43}, -{58,75,-42}, -{58,75,-41}, -{58,75,-40}, -{58,75,-39}, -{58,75,-38}, -{58,75,-37}, -{58,75,-36}, -{58,75,-35}, -{58,75,-34}, -{58,75,-33}, -{58,75,-32}, -{58,75,-31}, -{58,75,-30}, -{58,75,-29}, -{58,75,-28}, -{58,75,-27}, -{58,75,-26}, -{58,75,-25}, -{58,75,-24}, -{58,75,-23}, -{58,75,-22}, -{58,75,-21}, -{58,75,-20}, -{58,75,-19}, -{58,75,-18}, -{58,75,-17}, -{58,75,-16}, -{58,75,-15}, -{58,75,-14}, -{58,75,-13}, -{58,75,-12}, -{58,75,-11}, -{58,75,-10}, -{58,75,-9}, -{58,75,-8}, -{58,75,-7}, -{58,75,-6}, -{58,75,-5}, -{58,75,-4}, -{58,75,-3}, -{58,75,-2}, -{58,75,-1}, -{58,75,0}, -{58,75,1}, -{58,75,2}, -{58,75,3}, -{58,75,4}, -{58,75,5}, -{58,75,6}, -{58,75,7}, -{58,75,8}, -{58,75,9}, -{58,75,10}, -{58,75,11}, -{58,76,-65}, -{58,76,-64}, -{58,76,-63}, -{58,76,-62}, -{58,76,-61}, -{58,76,-60}, -{58,76,-59}, -{58,76,-58}, -{58,76,-57}, -{58,76,-56}, -{58,76,-55}, -{58,76,-54}, -{58,76,-53}, -{58,76,-52}, -{58,76,-51}, -{58,76,-50}, -{58,76,-49}, -{58,76,-48}, -{58,76,-47}, -{58,76,-46}, -{58,76,-45}, -{58,76,-44}, -{58,76,-43}, -{58,76,-42}, -{58,76,-41}, -{58,76,-40}, -{58,76,-39}, -{58,76,-38}, -{58,76,-37}, -{58,76,-36}, -{58,76,-35}, -{58,76,-34}, -{58,76,-33}, -{58,76,-32}, -{58,76,-31}, -{58,76,-30}, -{58,76,-29}, -{58,76,-28}, -{58,76,-27}, -{58,76,-26}, -{58,76,-25}, -{58,76,-24}, -{58,76,-23}, -{58,76,-22}, -{58,76,-21}, -{58,76,-20}, -{58,76,-19}, -{58,76,-18}, -{58,76,-17}, -{58,76,-16}, -{58,76,-15}, -{58,76,-14}, -{58,76,-13}, -{58,76,-12}, -{58,76,-11}, -{58,76,-10}, -{58,76,-9}, -{58,76,-8}, -{58,76,-7}, -{58,76,-6}, -{58,76,-5}, -{58,76,-4}, -{58,76,-3}, -{58,76,-2}, -{58,76,-1}, -{58,76,0}, -{58,76,1}, -{58,76,2}, -{58,76,3}, -{58,76,4}, -{58,76,5}, -{58,76,6}, -{58,76,7}, -{58,77,-65}, -{58,77,-64}, -{58,77,-63}, -{58,77,-62}, -{58,77,-61}, -{58,77,-60}, -{58,77,-59}, -{58,77,-58}, -{58,77,-57}, -{58,77,-56}, -{58,77,-55}, -{58,77,-54}, -{58,77,-53}, -{58,77,-52}, -{58,77,-51}, -{58,77,-50}, -{58,77,-49}, -{58,77,-48}, -{58,77,-47}, -{58,77,-46}, -{58,77,-45}, -{58,77,-44}, -{58,77,-43}, -{58,77,-42}, -{58,77,-41}, -{58,77,-40}, -{58,77,-39}, -{58,77,-38}, -{58,77,-37}, -{58,77,-36}, -{58,77,-35}, -{58,77,-34}, -{58,77,-33}, -{58,77,-32}, -{58,77,-31}, -{58,77,-30}, -{58,77,-29}, -{58,77,-28}, -{58,77,-27}, -{58,77,-26}, -{58,77,-25}, -{58,77,-24}, -{58,77,-23}, -{58,77,-22}, -{58,77,-21}, -{58,77,-20}, -{58,77,-19}, -{58,77,-18}, -{58,77,-17}, -{58,77,-16}, -{58,77,-15}, -{58,77,-14}, -{58,77,-13}, -{58,77,-12}, -{58,77,-11}, -{58,77,-10}, -{58,77,-9}, -{58,77,-8}, -{58,77,-7}, -{58,77,-6}, -{58,77,-5}, -{58,77,-4}, -{58,77,-3}, -{58,77,-2}, -{58,77,-1}, -{58,77,0}, -{58,77,1}, -{58,77,2}, -{58,77,3}, -{58,78,-65}, -{58,78,-64}, -{58,78,-63}, -{58,78,-62}, -{58,78,-61}, -{58,78,-60}, -{58,78,-59}, -{58,78,-58}, -{58,78,-57}, -{58,78,-56}, -{58,78,-55}, -{58,78,-54}, -{58,78,-53}, -{58,78,-52}, -{58,78,-51}, -{58,78,-50}, -{58,78,-49}, -{58,78,-48}, -{58,78,-47}, -{58,78,-46}, -{58,78,-45}, -{58,78,-44}, -{58,78,-43}, -{58,78,-42}, -{58,78,-41}, -{58,78,-40}, -{58,78,-39}, -{58,78,-38}, -{58,78,-37}, -{58,78,-36}, -{58,78,-35}, -{58,78,-34}, -{58,78,-33}, -{58,78,-32}, -{58,78,-31}, -{58,78,-30}, -{58,78,-29}, -{58,78,-28}, -{58,78,-27}, -{58,78,-26}, -{58,78,-25}, -{58,78,-24}, -{58,78,-23}, -{58,78,-22}, -{58,78,-21}, -{58,78,-20}, -{58,78,-19}, -{58,78,-18}, -{58,78,-17}, -{58,78,-16}, -{58,78,-15}, -{58,78,-14}, -{58,78,-13}, -{58,78,-12}, -{58,78,-11}, -{58,78,-10}, -{58,78,-9}, -{58,78,-8}, -{58,78,-7}, -{58,78,-6}, -{58,78,-5}, -{58,78,-4}, -{58,78,-3}, -{58,78,-2}, -{58,78,-1}, -{58,78,0}, -{58,79,-65}, -{58,79,-64}, -{58,79,-63}, -{58,79,-62}, -{58,79,-61}, -{58,79,-60}, -{58,79,-59}, -{58,79,-58}, -{58,79,-57}, -{58,79,-56}, -{58,79,-55}, -{58,79,-54}, -{58,79,-53}, -{58,79,-52}, -{58,79,-51}, -{58,79,-50}, -{58,79,-49}, -{58,79,-48}, -{58,79,-47}, -{58,79,-46}, -{58,79,-45}, -{58,79,-44}, -{58,79,-43}, -{58,79,-42}, -{58,79,-41}, -{58,79,-40}, -{58,79,-39}, -{58,79,-38}, -{58,79,-37}, -{58,79,-36}, -{58,79,-35}, -{58,79,-34}, -{58,79,-33}, -{58,79,-32}, -{58,79,-31}, -{58,79,-30}, -{58,79,-29}, -{58,79,-28}, -{58,79,-27}, -{58,79,-26}, -{58,79,-25}, -{58,79,-24}, -{58,79,-23}, -{58,79,-22}, -{58,79,-21}, -{58,79,-20}, -{58,79,-19}, -{58,79,-18}, -{58,79,-17}, -{58,79,-16}, -{58,79,-15}, -{58,79,-14}, -{58,79,-13}, -{58,79,-12}, -{58,79,-11}, -{58,79,-10}, -{58,79,-9}, -{58,79,-8}, -{58,79,-7}, -{58,79,-6}, -{58,79,-5}, -{58,79,-4}, -{58,80,-65}, -{58,80,-64}, -{58,80,-63}, -{58,80,-62}, -{58,80,-61}, -{58,80,-60}, -{58,80,-59}, -{58,80,-58}, -{58,80,-57}, -{58,80,-56}, -{58,80,-55}, -{58,80,-54}, -{58,80,-53}, -{58,80,-52}, -{58,80,-51}, -{58,80,-50}, -{58,80,-49}, -{58,80,-48}, -{58,80,-47}, -{58,80,-46}, -{58,80,-45}, -{58,80,-44}, -{58,80,-43}, -{58,80,-42}, -{58,80,-41}, -{58,80,-40}, -{58,80,-39}, -{58,80,-38}, -{58,80,-37}, -{58,80,-36}, -{58,80,-35}, -{58,80,-34}, -{58,80,-33}, -{58,80,-32}, -{58,80,-31}, -{58,80,-30}, -{58,80,-29}, -{58,80,-28}, -{58,80,-27}, -{58,80,-26}, -{58,80,-25}, -{58,80,-24}, -{58,80,-23}, -{58,80,-22}, -{58,80,-21}, -{58,80,-20}, -{58,80,-19}, -{58,80,-18}, -{58,80,-17}, -{58,80,-16}, -{58,80,-15}, -{58,80,-14}, -{58,80,-13}, -{58,80,-12}, -{58,80,-11}, -{58,80,-10}, -{58,80,-9}, -{58,80,-8}, -{58,80,-7}, -{58,81,-65}, -{58,81,-64}, -{58,81,-63}, -{58,81,-62}, -{58,81,-61}, -{58,81,-60}, -{58,81,-59}, -{58,81,-58}, -{58,81,-57}, -{58,81,-56}, -{58,81,-55}, -{58,81,-54}, -{58,81,-53}, -{58,81,-52}, -{58,81,-51}, -{58,81,-50}, -{58,81,-49}, -{58,81,-48}, -{58,81,-47}, -{58,81,-46}, -{58,81,-45}, -{58,81,-44}, -{58,81,-43}, -{58,81,-42}, -{58,81,-41}, -{58,81,-40}, -{58,81,-39}, -{58,81,-38}, -{58,81,-37}, -{58,81,-36}, -{58,81,-35}, -{58,81,-34}, -{58,81,-33}, -{58,81,-32}, -{58,81,-31}, -{58,81,-30}, -{58,81,-29}, -{58,81,-28}, -{58,81,-27}, -{58,81,-26}, -{58,81,-25}, -{58,81,-24}, -{58,81,-23}, -{58,81,-22}, -{58,81,-21}, -{58,81,-20}, -{58,81,-19}, -{58,81,-18}, -{58,81,-17}, -{58,81,-16}, -{58,81,-15}, -{58,81,-14}, -{58,81,-13}, -{58,81,-12}, -{58,81,-11}, -{58,81,-10}, -{58,82,-65}, -{58,82,-64}, -{58,82,-63}, -{58,82,-62}, -{58,82,-61}, -{58,82,-60}, -{58,82,-59}, -{58,82,-58}, -{58,82,-57}, -{58,82,-56}, -{58,82,-55}, -{58,82,-54}, -{58,82,-53}, -{58,82,-52}, -{58,82,-51}, -{58,82,-50}, -{58,82,-49}, -{58,82,-48}, -{58,82,-47}, -{58,82,-46}, -{58,82,-45}, -{58,82,-44}, -{58,82,-43}, -{58,82,-42}, -{58,82,-41}, -{58,82,-40}, -{58,82,-39}, -{58,82,-38}, -{58,82,-37}, -{58,82,-36}, -{58,82,-35}, -{58,82,-34}, -{58,82,-33}, -{58,82,-32}, -{58,82,-31}, -{58,82,-30}, -{58,82,-29}, -{58,82,-28}, -{58,82,-27}, -{58,82,-26}, -{58,82,-25}, -{58,82,-24}, -{58,82,-23}, -{58,82,-22}, -{58,82,-21}, -{58,82,-20}, -{58,82,-19}, -{58,82,-18}, -{58,82,-17}, -{58,82,-16}, -{58,82,-15}, -{58,82,-14}, -{58,82,-13}, -{58,83,-65}, -{58,83,-64}, -{58,83,-63}, -{58,83,-62}, -{58,83,-61}, -{58,83,-60}, -{58,83,-59}, -{58,83,-58}, -{58,83,-57}, -{58,83,-56}, -{58,83,-55}, -{58,83,-54}, -{58,83,-53}, -{58,83,-52}, -{58,83,-51}, -{58,83,-50}, -{58,83,-49}, -{58,83,-48}, -{58,83,-47}, -{58,83,-46}, -{58,83,-45}, -{58,83,-44}, -{58,83,-43}, -{58,83,-42}, -{58,83,-41}, -{58,83,-40}, -{58,83,-39}, -{58,83,-38}, -{58,83,-37}, -{58,83,-36}, -{58,83,-35}, -{58,83,-34}, -{58,83,-33}, -{58,83,-32}, -{58,83,-31}, -{58,83,-30}, -{58,83,-29}, -{58,83,-28}, -{58,83,-27}, -{58,83,-26}, -{58,83,-25}, -{58,83,-24}, -{58,83,-23}, -{58,83,-22}, -{58,83,-21}, -{58,83,-20}, -{58,83,-19}, -{58,83,-18}, -{58,83,-17}, -{58,83,-16}, -{58,84,-65}, -{58,84,-64}, -{58,84,-63}, -{58,84,-62}, -{58,84,-61}, -{58,84,-60}, -{58,84,-59}, -{58,84,-58}, -{58,84,-57}, -{58,84,-56}, -{58,84,-55}, -{58,84,-54}, -{58,84,-53}, -{58,84,-52}, -{58,84,-51}, -{58,84,-50}, -{58,84,-49}, -{58,84,-48}, -{58,84,-47}, -{58,84,-46}, -{58,84,-45}, -{58,84,-44}, -{58,84,-43}, -{58,84,-42}, -{58,84,-41}, -{58,84,-40}, -{58,84,-39}, -{58,84,-38}, -{58,84,-37}, -{58,84,-36}, -{58,84,-35}, -{58,84,-34}, -{58,84,-33}, -{58,84,-32}, -{58,84,-31}, -{58,84,-30}, -{58,84,-29}, -{58,84,-28}, -{58,84,-27}, -{58,84,-26}, -{58,84,-25}, -{58,84,-24}, -{58,84,-23}, -{58,84,-22}, -{58,84,-21}, -{58,84,-20}, -{58,84,-19}, -{58,85,-65}, -{58,85,-64}, -{58,85,-63}, -{58,85,-62}, -{58,85,-61}, -{58,85,-60}, -{58,85,-59}, -{58,85,-58}, -{58,85,-57}, -{58,85,-56}, -{58,85,-55}, -{58,85,-54}, -{58,85,-53}, -{58,85,-52}, -{58,85,-51}, -{58,85,-50}, -{58,85,-49}, -{58,85,-48}, -{58,85,-47}, -{58,85,-46}, -{58,85,-45}, -{58,85,-44}, -{58,85,-43}, -{58,85,-42}, -{58,85,-41}, -{58,85,-40}, -{58,85,-39}, -{58,85,-38}, -{58,85,-37}, -{58,85,-36}, -{58,85,-35}, -{58,85,-34}, -{58,85,-33}, -{58,85,-32}, -{58,85,-31}, -{58,85,-30}, -{58,85,-29}, -{58,85,-28}, -{58,85,-27}, -{58,85,-26}, -{58,85,-25}, -{58,85,-24}, -{58,85,-23}, -{58,85,-22}, -{58,86,-64}, -{58,86,-63}, -{58,86,-62}, -{58,86,-61}, -{58,86,-60}, -{58,86,-59}, -{58,86,-58}, -{58,86,-57}, -{58,86,-56}, -{58,86,-55}, -{58,86,-54}, -{58,86,-53}, -{58,86,-52}, -{58,86,-51}, -{58,86,-50}, -{58,86,-49}, -{58,86,-48}, -{58,86,-47}, -{58,86,-46}, -{58,86,-45}, -{58,86,-44}, -{58,86,-43}, -{58,86,-42}, -{58,86,-41}, -{58,86,-40}, -{58,86,-39}, -{58,86,-38}, -{58,86,-37}, -{58,86,-36}, -{58,86,-35}, -{58,86,-34}, -{58,86,-33}, -{58,86,-32}, -{58,86,-31}, -{58,86,-30}, -{58,86,-29}, -{58,86,-28}, -{58,86,-27}, -{58,86,-26}, -{58,86,-25}, -{58,86,-24}, -{58,87,-64}, -{58,87,-63}, -{58,87,-62}, -{58,87,-61}, -{58,87,-60}, -{58,87,-59}, -{58,87,-58}, -{58,87,-57}, -{58,87,-56}, -{58,87,-55}, -{58,87,-54}, -{58,87,-53}, -{58,87,-52}, -{58,87,-51}, -{58,87,-50}, -{58,87,-49}, -{58,87,-48}, -{58,87,-47}, -{58,87,-46}, -{58,87,-45}, -{58,87,-44}, -{58,87,-43}, -{58,87,-42}, -{58,87,-41}, -{58,87,-40}, -{58,87,-39}, -{58,87,-38}, -{58,87,-37}, -{58,87,-36}, -{58,87,-35}, -{58,87,-34}, -{58,87,-33}, -{58,87,-32}, -{58,87,-31}, -{58,87,-30}, -{58,87,-29}, -{58,87,-28}, -{58,87,-27}, -{58,88,-64}, -{58,88,-63}, -{58,88,-62}, -{58,88,-61}, -{58,88,-60}, -{58,88,-59}, -{58,88,-58}, -{58,88,-57}, -{58,88,-56}, -{58,88,-55}, -{58,88,-54}, -{58,88,-53}, -{58,88,-52}, -{58,88,-51}, -{58,88,-50}, -{58,88,-49}, -{58,88,-48}, -{58,88,-47}, -{58,88,-46}, -{58,88,-45}, -{58,88,-44}, -{58,88,-43}, -{58,88,-42}, -{58,88,-41}, -{58,88,-40}, -{58,88,-39}, -{58,88,-38}, -{58,88,-37}, -{58,88,-36}, -{58,88,-35}, -{58,88,-34}, -{58,88,-33}, -{58,88,-32}, -{58,88,-31}, -{58,88,-30}, -{58,88,-29}, -{58,89,-64}, -{58,89,-63}, -{58,89,-62}, -{58,89,-61}, -{58,89,-60}, -{58,89,-59}, -{58,89,-58}, -{58,89,-57}, -{58,89,-56}, -{58,89,-55}, -{58,89,-54}, -{58,89,-53}, -{58,89,-52}, -{58,89,-51}, -{58,89,-50}, -{58,89,-49}, -{58,89,-48}, -{58,89,-47}, -{58,89,-46}, -{58,89,-45}, -{58,89,-44}, -{58,89,-43}, -{58,89,-42}, -{58,89,-41}, -{58,89,-40}, -{58,89,-39}, -{58,89,-38}, -{58,89,-37}, -{58,89,-36}, -{58,89,-35}, -{58,89,-34}, -{58,89,-33}, -{58,89,-32}, -{58,90,-64}, -{58,90,-63}, -{58,90,-62}, -{58,90,-61}, -{58,90,-60}, -{58,90,-59}, -{58,90,-58}, -{58,90,-57}, -{58,90,-56}, -{58,90,-55}, -{58,90,-54}, -{58,90,-53}, -{58,90,-52}, -{58,90,-51}, -{58,90,-50}, -{58,90,-49}, -{58,90,-48}, -{58,90,-47}, -{58,90,-46}, -{58,90,-45}, -{58,90,-44}, -{58,90,-43}, -{58,90,-42}, -{58,90,-41}, -{58,90,-40}, -{58,90,-39}, -{58,90,-38}, -{58,90,-37}, -{58,90,-36}, -{58,90,-35}, -{58,90,-34}, -{58,91,-64}, -{58,91,-63}, -{58,91,-62}, -{58,91,-61}, -{58,91,-60}, -{58,91,-59}, -{58,91,-58}, -{58,91,-57}, -{58,91,-56}, -{58,91,-55}, -{58,91,-54}, -{58,91,-53}, -{58,91,-52}, -{58,91,-51}, -{58,91,-50}, -{58,91,-49}, -{58,91,-48}, -{58,91,-47}, -{58,91,-46}, -{58,91,-45}, -{58,91,-44}, -{58,91,-43}, -{58,91,-42}, -{58,91,-41}, -{58,91,-40}, -{58,91,-39}, -{58,91,-38}, -{58,91,-37}, -{58,91,-36}, -{58,92,-64}, -{58,92,-63}, -{58,92,-62}, -{58,92,-61}, -{58,92,-60}, -{58,92,-59}, -{58,92,-58}, -{58,92,-57}, -{58,92,-56}, -{58,92,-55}, -{58,92,-54}, -{58,92,-53}, -{58,92,-52}, -{58,92,-51}, -{58,92,-50}, -{58,92,-49}, -{58,92,-48}, -{58,92,-47}, -{58,92,-46}, -{58,92,-45}, -{58,92,-44}, -{58,92,-43}, -{58,92,-42}, -{58,92,-41}, -{58,92,-40}, -{58,92,-39}, -{58,93,-64}, -{58,93,-63}, -{58,93,-62}, -{58,93,-61}, -{58,93,-60}, -{58,93,-59}, -{58,93,-58}, -{58,93,-57}, -{58,93,-56}, -{58,93,-55}, -{58,93,-54}, -{58,93,-53}, -{58,93,-52}, -{58,93,-51}, -{58,93,-50}, -{58,93,-49}, -{58,93,-48}, -{58,93,-47}, -{58,93,-46}, -{58,93,-45}, -{58,93,-44}, -{58,93,-43}, -{58,94,-64}, -{58,94,-63}, -{58,94,-62}, -{58,94,-61}, -{58,94,-60}, -{58,94,-59}, -{58,94,-58}, -{58,94,-57}, -{58,94,-56}, -{58,94,-55}, -{58,94,-54}, -{58,94,-53}, -{58,94,-52}, -{58,94,-51}, -{58,94,-50}, -{58,95,-64}, -{58,95,-63}, -{58,95,-62}, -{58,95,-61}, -{58,95,-60}, -{58,95,-59}, -{58,95,-58}, -{58,95,-57}, -{58,96,-64}, -{58,96,-63}, -{59,-62,58}, -{59,-62,59}, -{59,-62,60}, -{59,-61,54}, -{59,-61,55}, -{59,-61,56}, -{59,-61,57}, -{59,-61,58}, -{59,-61,59}, -{59,-61,60}, -{59,-60,50}, -{59,-60,51}, -{59,-60,52}, -{59,-60,53}, -{59,-60,54}, -{59,-60,55}, -{59,-60,56}, -{59,-60,57}, -{59,-60,58}, -{59,-60,59}, -{59,-60,60}, -{59,-59,46}, -{59,-59,47}, -{59,-59,48}, -{59,-59,49}, -{59,-59,50}, -{59,-59,51}, -{59,-59,52}, -{59,-59,53}, -{59,-59,54}, -{59,-59,55}, -{59,-59,56}, -{59,-59,57}, -{59,-59,58}, -{59,-59,59}, -{59,-59,60}, -{59,-58,42}, -{59,-58,43}, -{59,-58,44}, -{59,-58,45}, -{59,-58,46}, -{59,-58,47}, -{59,-58,48}, -{59,-58,49}, -{59,-58,50}, -{59,-58,51}, -{59,-58,52}, -{59,-58,53}, -{59,-58,54}, -{59,-58,55}, -{59,-58,56}, -{59,-58,57}, -{59,-58,58}, -{59,-58,59}, -{59,-58,60}, -{59,-57,39}, -{59,-57,40}, -{59,-57,41}, -{59,-57,42}, -{59,-57,43}, -{59,-57,44}, -{59,-57,45}, -{59,-57,46}, -{59,-57,47}, -{59,-57,48}, -{59,-57,49}, -{59,-57,50}, -{59,-57,51}, -{59,-57,52}, -{59,-57,53}, -{59,-57,54}, -{59,-57,55}, -{59,-57,56}, -{59,-57,57}, -{59,-57,58}, -{59,-57,59}, -{59,-57,60}, -{59,-56,36}, -{59,-56,37}, -{59,-56,38}, -{59,-56,39}, -{59,-56,40}, -{59,-56,41}, -{59,-56,42}, -{59,-56,43}, -{59,-56,44}, -{59,-56,45}, -{59,-56,46}, -{59,-56,47}, -{59,-56,48}, -{59,-56,49}, -{59,-56,50}, -{59,-56,51}, -{59,-56,52}, -{59,-56,53}, -{59,-56,54}, -{59,-56,55}, -{59,-56,56}, -{59,-56,57}, -{59,-56,58}, -{59,-56,59}, -{59,-56,60}, -{59,-55,33}, -{59,-55,34}, -{59,-55,35}, -{59,-55,36}, -{59,-55,37}, -{59,-55,38}, -{59,-55,39}, -{59,-55,40}, -{59,-55,41}, -{59,-55,42}, -{59,-55,43}, -{59,-55,44}, -{59,-55,45}, -{59,-55,46}, -{59,-55,47}, -{59,-55,48}, -{59,-55,49}, -{59,-55,50}, -{59,-55,51}, -{59,-55,52}, -{59,-55,53}, -{59,-55,54}, -{59,-55,55}, -{59,-55,56}, -{59,-55,57}, -{59,-55,58}, -{59,-55,59}, -{59,-55,60}, -{59,-54,30}, -{59,-54,31}, -{59,-54,32}, -{59,-54,33}, -{59,-54,34}, -{59,-54,35}, -{59,-54,36}, -{59,-54,37}, -{59,-54,38}, -{59,-54,39}, -{59,-54,40}, -{59,-54,41}, -{59,-54,42}, -{59,-54,43}, -{59,-54,44}, -{59,-54,45}, -{59,-54,46}, -{59,-54,47}, -{59,-54,48}, -{59,-54,49}, -{59,-54,50}, -{59,-54,51}, -{59,-54,52}, -{59,-54,53}, -{59,-54,54}, -{59,-54,55}, -{59,-54,56}, -{59,-54,57}, -{59,-54,58}, -{59,-54,59}, -{59,-54,60}, -{59,-53,28}, -{59,-53,29}, -{59,-53,30}, -{59,-53,31}, -{59,-53,32}, -{59,-53,33}, -{59,-53,34}, -{59,-53,35}, -{59,-53,36}, -{59,-53,37}, -{59,-53,38}, -{59,-53,39}, -{59,-53,40}, -{59,-53,41}, -{59,-53,42}, -{59,-53,43}, -{59,-53,44}, -{59,-53,45}, -{59,-53,46}, -{59,-53,47}, -{59,-53,48}, -{59,-53,49}, -{59,-53,50}, -{59,-53,51}, -{59,-53,52}, -{59,-53,53}, -{59,-53,54}, -{59,-53,55}, -{59,-53,56}, -{59,-53,57}, -{59,-53,58}, -{59,-53,59}, -{59,-53,60}, -{59,-52,25}, -{59,-52,26}, -{59,-52,27}, -{59,-52,28}, -{59,-52,29}, -{59,-52,30}, -{59,-52,31}, -{59,-52,32}, -{59,-52,33}, -{59,-52,34}, -{59,-52,35}, -{59,-52,36}, -{59,-52,37}, -{59,-52,38}, -{59,-52,39}, -{59,-52,40}, -{59,-52,41}, -{59,-52,42}, -{59,-52,43}, -{59,-52,44}, -{59,-52,45}, -{59,-52,46}, -{59,-52,47}, -{59,-52,48}, -{59,-52,49}, -{59,-52,50}, -{59,-52,51}, -{59,-52,52}, -{59,-52,53}, -{59,-52,54}, -{59,-52,55}, -{59,-52,56}, -{59,-52,57}, -{59,-52,58}, -{59,-52,59}, -{59,-52,60}, -{59,-51,23}, -{59,-51,24}, -{59,-51,25}, -{59,-51,26}, -{59,-51,27}, -{59,-51,28}, -{59,-51,29}, -{59,-51,30}, -{59,-51,31}, -{59,-51,32}, -{59,-51,33}, -{59,-51,34}, -{59,-51,35}, -{59,-51,36}, -{59,-51,37}, -{59,-51,38}, -{59,-51,39}, -{59,-51,40}, -{59,-51,41}, -{59,-51,42}, -{59,-51,43}, -{59,-51,44}, -{59,-51,45}, -{59,-51,46}, -{59,-51,47}, -{59,-51,48}, -{59,-51,49}, -{59,-51,50}, -{59,-51,51}, -{59,-51,52}, -{59,-51,53}, -{59,-51,54}, -{59,-51,55}, -{59,-51,56}, -{59,-51,57}, -{59,-51,58}, -{59,-51,59}, -{59,-51,60}, -{59,-50,21}, -{59,-50,22}, -{59,-50,23}, -{59,-50,24}, -{59,-50,25}, -{59,-50,26}, -{59,-50,27}, -{59,-50,28}, -{59,-50,29}, -{59,-50,30}, -{59,-50,31}, -{59,-50,32}, -{59,-50,33}, -{59,-50,34}, -{59,-50,35}, -{59,-50,36}, -{59,-50,37}, -{59,-50,38}, -{59,-50,39}, -{59,-50,40}, -{59,-50,41}, -{59,-50,42}, -{59,-50,43}, -{59,-50,44}, -{59,-50,45}, -{59,-50,46}, -{59,-50,47}, -{59,-50,48}, -{59,-50,49}, -{59,-50,50}, -{59,-50,51}, -{59,-50,52}, -{59,-50,53}, -{59,-50,54}, -{59,-50,55}, -{59,-50,56}, -{59,-50,57}, -{59,-50,58}, -{59,-50,59}, -{59,-50,60}, -{59,-49,18}, -{59,-49,19}, -{59,-49,20}, -{59,-49,21}, -{59,-49,22}, -{59,-49,23}, -{59,-49,24}, -{59,-49,25}, -{59,-49,26}, -{59,-49,27}, -{59,-49,28}, -{59,-49,29}, -{59,-49,30}, -{59,-49,31}, -{59,-49,32}, -{59,-49,33}, -{59,-49,34}, -{59,-49,35}, -{59,-49,36}, -{59,-49,37}, -{59,-49,38}, -{59,-49,39}, -{59,-49,40}, -{59,-49,41}, -{59,-49,42}, -{59,-49,43}, -{59,-49,44}, -{59,-49,45}, -{59,-49,46}, -{59,-49,47}, -{59,-49,48}, -{59,-49,49}, -{59,-49,50}, -{59,-49,51}, -{59,-49,52}, -{59,-49,53}, -{59,-49,54}, -{59,-49,55}, -{59,-49,56}, -{59,-49,57}, -{59,-49,58}, -{59,-49,59}, -{59,-49,60}, -{59,-48,16}, -{59,-48,17}, -{59,-48,18}, -{59,-48,19}, -{59,-48,20}, -{59,-48,21}, -{59,-48,22}, -{59,-48,23}, -{59,-48,24}, -{59,-48,25}, -{59,-48,26}, -{59,-48,27}, -{59,-48,28}, -{59,-48,29}, -{59,-48,30}, -{59,-48,31}, -{59,-48,32}, -{59,-48,33}, -{59,-48,34}, -{59,-48,35}, -{59,-48,36}, -{59,-48,37}, -{59,-48,38}, -{59,-48,39}, -{59,-48,40}, -{59,-48,41}, -{59,-48,42}, -{59,-48,43}, -{59,-48,44}, -{59,-48,45}, -{59,-48,46}, -{59,-48,47}, -{59,-48,48}, -{59,-48,49}, -{59,-48,50}, -{59,-48,51}, -{59,-48,52}, -{59,-48,53}, -{59,-48,54}, -{59,-48,55}, -{59,-48,56}, -{59,-48,57}, -{59,-48,58}, -{59,-48,59}, -{59,-48,60}, -{59,-47,14}, -{59,-47,15}, -{59,-47,16}, -{59,-47,17}, -{59,-47,18}, -{59,-47,19}, -{59,-47,20}, -{59,-47,21}, -{59,-47,22}, -{59,-47,23}, -{59,-47,24}, -{59,-47,25}, -{59,-47,26}, -{59,-47,27}, -{59,-47,28}, -{59,-47,29}, -{59,-47,30}, -{59,-47,31}, -{59,-47,32}, -{59,-47,33}, -{59,-47,34}, -{59,-47,35}, -{59,-47,36}, -{59,-47,37}, -{59,-47,38}, -{59,-47,39}, -{59,-47,40}, -{59,-47,41}, -{59,-47,42}, -{59,-47,43}, -{59,-47,44}, -{59,-47,45}, -{59,-47,46}, -{59,-47,47}, -{59,-47,48}, -{59,-47,49}, -{59,-47,50}, -{59,-47,51}, -{59,-47,52}, -{59,-47,53}, -{59,-47,54}, -{59,-47,55}, -{59,-47,56}, -{59,-47,57}, -{59,-47,58}, -{59,-47,59}, -{59,-47,60}, -{59,-47,61}, -{59,-46,12}, -{59,-46,13}, -{59,-46,14}, -{59,-46,15}, -{59,-46,16}, -{59,-46,17}, -{59,-46,18}, -{59,-46,19}, -{59,-46,20}, -{59,-46,21}, -{59,-46,22}, -{59,-46,23}, -{59,-46,24}, -{59,-46,25}, -{59,-46,26}, -{59,-46,27}, -{59,-46,28}, -{59,-46,29}, -{59,-46,30}, -{59,-46,31}, -{59,-46,32}, -{59,-46,33}, -{59,-46,34}, -{59,-46,35}, -{59,-46,36}, -{59,-46,37}, -{59,-46,38}, -{59,-46,39}, -{59,-46,40}, -{59,-46,41}, -{59,-46,42}, -{59,-46,43}, -{59,-46,44}, -{59,-46,45}, -{59,-46,46}, -{59,-46,47}, -{59,-46,48}, -{59,-46,49}, -{59,-46,50}, -{59,-46,51}, -{59,-46,52}, -{59,-46,53}, -{59,-46,54}, -{59,-46,55}, -{59,-46,56}, -{59,-46,57}, -{59,-46,58}, -{59,-46,59}, -{59,-46,60}, -{59,-46,61}, -{59,-45,10}, -{59,-45,11}, -{59,-45,12}, -{59,-45,13}, -{59,-45,14}, -{59,-45,15}, -{59,-45,16}, -{59,-45,17}, -{59,-45,18}, -{59,-45,19}, -{59,-45,20}, -{59,-45,21}, -{59,-45,22}, -{59,-45,23}, -{59,-45,24}, -{59,-45,25}, -{59,-45,26}, -{59,-45,27}, -{59,-45,28}, -{59,-45,29}, -{59,-45,30}, -{59,-45,31}, -{59,-45,32}, -{59,-45,33}, -{59,-45,34}, -{59,-45,35}, -{59,-45,36}, -{59,-45,37}, -{59,-45,38}, -{59,-45,39}, -{59,-45,40}, -{59,-45,41}, -{59,-45,42}, -{59,-45,43}, -{59,-45,44}, -{59,-45,45}, -{59,-45,46}, -{59,-45,47}, -{59,-45,48}, -{59,-45,49}, -{59,-45,50}, -{59,-45,51}, -{59,-45,52}, -{59,-45,53}, -{59,-45,54}, -{59,-45,55}, -{59,-45,56}, -{59,-45,57}, -{59,-45,58}, -{59,-45,59}, -{59,-45,60}, -{59,-45,61}, -{59,-44,8}, -{59,-44,9}, -{59,-44,10}, -{59,-44,11}, -{59,-44,12}, -{59,-44,13}, -{59,-44,14}, -{59,-44,15}, -{59,-44,16}, -{59,-44,17}, -{59,-44,18}, -{59,-44,19}, -{59,-44,20}, -{59,-44,21}, -{59,-44,22}, -{59,-44,23}, -{59,-44,24}, -{59,-44,25}, -{59,-44,26}, -{59,-44,27}, -{59,-44,28}, -{59,-44,29}, -{59,-44,30}, -{59,-44,31}, -{59,-44,32}, -{59,-44,33}, -{59,-44,34}, -{59,-44,35}, -{59,-44,36}, -{59,-44,37}, -{59,-44,38}, -{59,-44,39}, -{59,-44,40}, -{59,-44,41}, -{59,-44,42}, -{59,-44,43}, -{59,-44,44}, -{59,-44,45}, -{59,-44,46}, -{59,-44,47}, -{59,-44,48}, -{59,-44,49}, -{59,-44,50}, -{59,-44,51}, -{59,-44,52}, -{59,-44,53}, -{59,-44,54}, -{59,-44,55}, -{59,-44,56}, -{59,-44,57}, -{59,-44,58}, -{59,-44,59}, -{59,-44,60}, -{59,-44,61}, -{59,-43,6}, -{59,-43,7}, -{59,-43,8}, -{59,-43,9}, -{59,-43,10}, -{59,-43,11}, -{59,-43,12}, -{59,-43,13}, -{59,-43,14}, -{59,-43,15}, -{59,-43,16}, -{59,-43,17}, -{59,-43,18}, -{59,-43,19}, -{59,-43,20}, -{59,-43,21}, -{59,-43,22}, -{59,-43,23}, -{59,-43,24}, -{59,-43,25}, -{59,-43,26}, -{59,-43,27}, -{59,-43,28}, -{59,-43,29}, -{59,-43,30}, -{59,-43,31}, -{59,-43,32}, -{59,-43,33}, -{59,-43,34}, -{59,-43,35}, -{59,-43,36}, -{59,-43,37}, -{59,-43,38}, -{59,-43,39}, -{59,-43,40}, -{59,-43,41}, -{59,-43,42}, -{59,-43,43}, -{59,-43,44}, -{59,-43,45}, -{59,-43,46}, -{59,-43,47}, -{59,-43,48}, -{59,-43,49}, -{59,-43,50}, -{59,-43,51}, -{59,-43,52}, -{59,-43,53}, -{59,-43,54}, -{59,-43,55}, -{59,-43,56}, -{59,-43,57}, -{59,-43,58}, -{59,-43,59}, -{59,-43,60}, -{59,-43,61}, -{59,-42,4}, -{59,-42,5}, -{59,-42,6}, -{59,-42,7}, -{59,-42,8}, -{59,-42,9}, -{59,-42,10}, -{59,-42,11}, -{59,-42,12}, -{59,-42,13}, -{59,-42,14}, -{59,-42,15}, -{59,-42,16}, -{59,-42,17}, -{59,-42,18}, -{59,-42,19}, -{59,-42,20}, -{59,-42,21}, -{59,-42,22}, -{59,-42,23}, -{59,-42,24}, -{59,-42,25}, -{59,-42,26}, -{59,-42,27}, -{59,-42,28}, -{59,-42,29}, -{59,-42,30}, -{59,-42,31}, -{59,-42,32}, -{59,-42,33}, -{59,-42,34}, -{59,-42,35}, -{59,-42,36}, -{59,-42,37}, -{59,-42,38}, -{59,-42,39}, -{59,-42,40}, -{59,-42,41}, -{59,-42,42}, -{59,-42,43}, -{59,-42,44}, -{59,-42,45}, -{59,-42,46}, -{59,-42,47}, -{59,-42,48}, -{59,-42,49}, -{59,-42,50}, -{59,-42,51}, -{59,-42,52}, -{59,-42,53}, -{59,-42,54}, -{59,-42,55}, -{59,-42,56}, -{59,-42,57}, -{59,-42,58}, -{59,-42,59}, -{59,-42,60}, -{59,-42,61}, -{59,-41,3}, -{59,-41,4}, -{59,-41,5}, -{59,-41,6}, -{59,-41,7}, -{59,-41,8}, -{59,-41,9}, -{59,-41,10}, -{59,-41,11}, -{59,-41,12}, -{59,-41,13}, -{59,-41,14}, -{59,-41,15}, -{59,-41,16}, -{59,-41,17}, -{59,-41,18}, -{59,-41,19}, -{59,-41,20}, -{59,-41,21}, -{59,-41,22}, -{59,-41,23}, -{59,-41,24}, -{59,-41,25}, -{59,-41,26}, -{59,-41,27}, -{59,-41,28}, -{59,-41,29}, -{59,-41,30}, -{59,-41,31}, -{59,-41,32}, -{59,-41,33}, -{59,-41,34}, -{59,-41,35}, -{59,-41,36}, -{59,-41,37}, -{59,-41,38}, -{59,-41,39}, -{59,-41,40}, -{59,-41,41}, -{59,-41,42}, -{59,-41,43}, -{59,-41,44}, -{59,-41,45}, -{59,-41,46}, -{59,-41,47}, -{59,-41,48}, -{59,-41,49}, -{59,-41,50}, -{59,-41,51}, -{59,-41,52}, -{59,-41,53}, -{59,-41,54}, -{59,-41,55}, -{59,-41,56}, -{59,-41,57}, -{59,-41,58}, -{59,-41,59}, -{59,-41,60}, -{59,-41,61}, -{59,-40,1}, -{59,-40,2}, -{59,-40,3}, -{59,-40,4}, -{59,-40,5}, -{59,-40,6}, -{59,-40,7}, -{59,-40,8}, -{59,-40,9}, -{59,-40,10}, -{59,-40,11}, -{59,-40,12}, -{59,-40,13}, -{59,-40,14}, -{59,-40,15}, -{59,-40,16}, -{59,-40,17}, -{59,-40,18}, -{59,-40,19}, -{59,-40,20}, -{59,-40,21}, -{59,-40,22}, -{59,-40,23}, -{59,-40,24}, -{59,-40,25}, -{59,-40,26}, -{59,-40,27}, -{59,-40,28}, -{59,-40,29}, -{59,-40,30}, -{59,-40,31}, -{59,-40,32}, -{59,-40,33}, -{59,-40,34}, -{59,-40,35}, -{59,-40,36}, -{59,-40,37}, -{59,-40,38}, -{59,-40,39}, -{59,-40,40}, -{59,-40,41}, -{59,-40,42}, -{59,-40,43}, -{59,-40,44}, -{59,-40,45}, -{59,-40,46}, -{59,-40,47}, -{59,-40,48}, -{59,-40,49}, -{59,-40,50}, -{59,-40,51}, -{59,-40,52}, -{59,-40,53}, -{59,-40,54}, -{59,-40,55}, -{59,-40,56}, -{59,-40,57}, -{59,-40,58}, -{59,-40,59}, -{59,-40,60}, -{59,-40,61}, -{59,-39,-1}, -{59,-39,0}, -{59,-39,1}, -{59,-39,2}, -{59,-39,3}, -{59,-39,4}, -{59,-39,5}, -{59,-39,6}, -{59,-39,7}, -{59,-39,8}, -{59,-39,9}, -{59,-39,10}, -{59,-39,11}, -{59,-39,12}, -{59,-39,13}, -{59,-39,14}, -{59,-39,15}, -{59,-39,16}, -{59,-39,17}, -{59,-39,18}, -{59,-39,19}, -{59,-39,20}, -{59,-39,21}, -{59,-39,22}, -{59,-39,23}, -{59,-39,24}, -{59,-39,25}, -{59,-39,26}, -{59,-39,27}, -{59,-39,28}, -{59,-39,29}, -{59,-39,30}, -{59,-39,31}, -{59,-39,32}, -{59,-39,33}, -{59,-39,34}, -{59,-39,35}, -{59,-39,36}, -{59,-39,37}, -{59,-39,38}, -{59,-39,39}, -{59,-39,40}, -{59,-39,41}, -{59,-39,42}, -{59,-39,43}, -{59,-39,44}, -{59,-39,45}, -{59,-39,46}, -{59,-39,47}, -{59,-39,48}, -{59,-39,49}, -{59,-39,50}, -{59,-39,51}, -{59,-39,52}, -{59,-39,53}, -{59,-39,54}, -{59,-39,55}, -{59,-39,56}, -{59,-39,57}, -{59,-39,58}, -{59,-39,59}, -{59,-39,60}, -{59,-39,61}, -{59,-38,-3}, -{59,-38,-2}, -{59,-38,-1}, -{59,-38,0}, -{59,-38,1}, -{59,-38,2}, -{59,-38,3}, -{59,-38,4}, -{59,-38,5}, -{59,-38,6}, -{59,-38,7}, -{59,-38,8}, -{59,-38,9}, -{59,-38,10}, -{59,-38,11}, -{59,-38,12}, -{59,-38,13}, -{59,-38,14}, -{59,-38,15}, -{59,-38,16}, -{59,-38,17}, -{59,-38,18}, -{59,-38,19}, -{59,-38,20}, -{59,-38,21}, -{59,-38,22}, -{59,-38,23}, -{59,-38,24}, -{59,-38,25}, -{59,-38,26}, -{59,-38,27}, -{59,-38,28}, -{59,-38,29}, -{59,-38,30}, -{59,-38,31}, -{59,-38,32}, -{59,-38,33}, -{59,-38,34}, -{59,-38,35}, -{59,-38,36}, -{59,-38,37}, -{59,-38,38}, -{59,-38,39}, -{59,-38,40}, -{59,-38,41}, -{59,-38,42}, -{59,-38,43}, -{59,-38,44}, -{59,-38,45}, -{59,-38,46}, -{59,-38,47}, -{59,-38,48}, -{59,-38,49}, -{59,-38,50}, -{59,-38,51}, -{59,-38,52}, -{59,-38,53}, -{59,-38,54}, -{59,-38,55}, -{59,-38,56}, -{59,-38,57}, -{59,-38,58}, -{59,-38,59}, -{59,-38,60}, -{59,-38,61}, -{59,-37,-4}, -{59,-37,-3}, -{59,-37,-2}, -{59,-37,-1}, -{59,-37,0}, -{59,-37,1}, -{59,-37,2}, -{59,-37,3}, -{59,-37,4}, -{59,-37,5}, -{59,-37,6}, -{59,-37,7}, -{59,-37,8}, -{59,-37,9}, -{59,-37,10}, -{59,-37,11}, -{59,-37,12}, -{59,-37,13}, -{59,-37,14}, -{59,-37,15}, -{59,-37,16}, -{59,-37,17}, -{59,-37,18}, -{59,-37,19}, -{59,-37,20}, -{59,-37,21}, -{59,-37,22}, -{59,-37,23}, -{59,-37,24}, -{59,-37,25}, -{59,-37,26}, -{59,-37,27}, -{59,-37,28}, -{59,-37,29}, -{59,-37,30}, -{59,-37,31}, -{59,-37,32}, -{59,-37,33}, -{59,-37,34}, -{59,-37,35}, -{59,-37,36}, -{59,-37,37}, -{59,-37,38}, -{59,-37,39}, -{59,-37,40}, -{59,-37,41}, -{59,-37,42}, -{59,-37,43}, -{59,-37,44}, -{59,-37,45}, -{59,-37,46}, -{59,-37,47}, -{59,-37,48}, -{59,-37,49}, -{59,-37,50}, -{59,-37,51}, -{59,-37,52}, -{59,-37,53}, -{59,-37,54}, -{59,-37,55}, -{59,-37,56}, -{59,-37,57}, -{59,-37,58}, -{59,-37,59}, -{59,-37,60}, -{59,-37,61}, -{59,-36,-6}, -{59,-36,-5}, -{59,-36,-4}, -{59,-36,-3}, -{59,-36,-2}, -{59,-36,-1}, -{59,-36,0}, -{59,-36,1}, -{59,-36,2}, -{59,-36,3}, -{59,-36,4}, -{59,-36,5}, -{59,-36,6}, -{59,-36,7}, -{59,-36,8}, -{59,-36,9}, -{59,-36,10}, -{59,-36,11}, -{59,-36,12}, -{59,-36,13}, -{59,-36,14}, -{59,-36,15}, -{59,-36,16}, -{59,-36,17}, -{59,-36,18}, -{59,-36,19}, -{59,-36,20}, -{59,-36,21}, -{59,-36,22}, -{59,-36,23}, -{59,-36,24}, -{59,-36,25}, -{59,-36,26}, -{59,-36,27}, -{59,-36,28}, -{59,-36,29}, -{59,-36,30}, -{59,-36,31}, -{59,-36,32}, -{59,-36,33}, -{59,-36,34}, -{59,-36,35}, -{59,-36,36}, -{59,-36,37}, -{59,-36,38}, -{59,-36,39}, -{59,-36,40}, -{59,-36,41}, -{59,-36,42}, -{59,-36,43}, -{59,-36,44}, -{59,-36,45}, -{59,-36,46}, -{59,-36,47}, -{59,-36,48}, -{59,-36,49}, -{59,-36,50}, -{59,-36,51}, -{59,-36,52}, -{59,-36,53}, -{59,-36,54}, -{59,-36,55}, -{59,-36,56}, -{59,-36,57}, -{59,-36,58}, -{59,-36,59}, -{59,-36,60}, -{59,-36,61}, -{59,-35,-8}, -{59,-35,-7}, -{59,-35,-6}, -{59,-35,-5}, -{59,-35,-4}, -{59,-35,-3}, -{59,-35,-2}, -{59,-35,-1}, -{59,-35,0}, -{59,-35,1}, -{59,-35,2}, -{59,-35,3}, -{59,-35,4}, -{59,-35,5}, -{59,-35,6}, -{59,-35,7}, -{59,-35,8}, -{59,-35,9}, -{59,-35,10}, -{59,-35,11}, -{59,-35,12}, -{59,-35,13}, -{59,-35,14}, -{59,-35,15}, -{59,-35,16}, -{59,-35,17}, -{59,-35,18}, -{59,-35,19}, -{59,-35,20}, -{59,-35,21}, -{59,-35,22}, -{59,-35,23}, -{59,-35,24}, -{59,-35,25}, -{59,-35,26}, -{59,-35,27}, -{59,-35,28}, -{59,-35,29}, -{59,-35,30}, -{59,-35,31}, -{59,-35,32}, -{59,-35,33}, -{59,-35,34}, -{59,-35,35}, -{59,-35,36}, -{59,-35,37}, -{59,-35,38}, -{59,-35,39}, -{59,-35,40}, -{59,-35,41}, -{59,-35,42}, -{59,-35,43}, -{59,-35,44}, -{59,-35,45}, -{59,-35,46}, -{59,-35,47}, -{59,-35,48}, -{59,-35,49}, -{59,-35,50}, -{59,-35,51}, -{59,-35,52}, -{59,-35,53}, -{59,-35,54}, -{59,-35,55}, -{59,-35,56}, -{59,-35,57}, -{59,-35,58}, -{59,-35,59}, -{59,-35,60}, -{59,-35,61}, -{59,-34,-9}, -{59,-34,-8}, -{59,-34,-7}, -{59,-34,-6}, -{59,-34,-5}, -{59,-34,-4}, -{59,-34,-3}, -{59,-34,-2}, -{59,-34,-1}, -{59,-34,0}, -{59,-34,1}, -{59,-34,2}, -{59,-34,3}, -{59,-34,4}, -{59,-34,5}, -{59,-34,6}, -{59,-34,7}, -{59,-34,8}, -{59,-34,9}, -{59,-34,10}, -{59,-34,11}, -{59,-34,12}, -{59,-34,13}, -{59,-34,14}, -{59,-34,15}, -{59,-34,16}, -{59,-34,17}, -{59,-34,18}, -{59,-34,19}, -{59,-34,20}, -{59,-34,21}, -{59,-34,22}, -{59,-34,23}, -{59,-34,24}, -{59,-34,25}, -{59,-34,26}, -{59,-34,27}, -{59,-34,28}, -{59,-34,29}, -{59,-34,30}, -{59,-34,31}, -{59,-34,32}, -{59,-34,33}, -{59,-34,34}, -{59,-34,35}, -{59,-34,36}, -{59,-34,37}, -{59,-34,38}, -{59,-34,39}, -{59,-34,40}, -{59,-34,41}, -{59,-34,42}, -{59,-34,43}, -{59,-34,44}, -{59,-34,45}, -{59,-34,46}, -{59,-34,47}, -{59,-34,48}, -{59,-34,49}, -{59,-34,50}, -{59,-34,51}, -{59,-34,52}, -{59,-34,53}, -{59,-34,54}, -{59,-34,55}, -{59,-34,56}, -{59,-34,57}, -{59,-34,58}, -{59,-34,59}, -{59,-34,60}, -{59,-34,61}, -{59,-33,-11}, -{59,-33,-10}, -{59,-33,-9}, -{59,-33,-8}, -{59,-33,-7}, -{59,-33,-6}, -{59,-33,-5}, -{59,-33,-4}, -{59,-33,-3}, -{59,-33,-2}, -{59,-33,-1}, -{59,-33,0}, -{59,-33,1}, -{59,-33,2}, -{59,-33,3}, -{59,-33,4}, -{59,-33,5}, -{59,-33,6}, -{59,-33,7}, -{59,-33,8}, -{59,-33,9}, -{59,-33,10}, -{59,-33,11}, -{59,-33,12}, -{59,-33,13}, -{59,-33,14}, -{59,-33,15}, -{59,-33,16}, -{59,-33,17}, -{59,-33,18}, -{59,-33,19}, -{59,-33,20}, -{59,-33,21}, -{59,-33,22}, -{59,-33,23}, -{59,-33,24}, -{59,-33,25}, -{59,-33,26}, -{59,-33,27}, -{59,-33,28}, -{59,-33,29}, -{59,-33,30}, -{59,-33,31}, -{59,-33,32}, -{59,-33,33}, -{59,-33,34}, -{59,-33,35}, -{59,-33,36}, -{59,-33,37}, -{59,-33,38}, -{59,-33,39}, -{59,-33,40}, -{59,-33,41}, -{59,-33,42}, -{59,-33,43}, -{59,-33,44}, -{59,-33,45}, -{59,-33,46}, -{59,-33,47}, -{59,-33,48}, -{59,-33,49}, -{59,-33,50}, -{59,-33,51}, -{59,-33,52}, -{59,-33,53}, -{59,-33,54}, -{59,-33,55}, -{59,-33,56}, -{59,-33,57}, -{59,-33,58}, -{59,-33,59}, -{59,-33,60}, -{59,-33,61}, -{59,-32,-12}, -{59,-32,-11}, -{59,-32,-10}, -{59,-32,-9}, -{59,-32,-8}, -{59,-32,-7}, -{59,-32,-6}, -{59,-32,-5}, -{59,-32,-4}, -{59,-32,-3}, -{59,-32,-2}, -{59,-32,-1}, -{59,-32,0}, -{59,-32,1}, -{59,-32,2}, -{59,-32,3}, -{59,-32,4}, -{59,-32,5}, -{59,-32,6}, -{59,-32,7}, -{59,-32,8}, -{59,-32,9}, -{59,-32,10}, -{59,-32,11}, -{59,-32,12}, -{59,-32,13}, -{59,-32,14}, -{59,-32,15}, -{59,-32,16}, -{59,-32,17}, -{59,-32,18}, -{59,-32,19}, -{59,-32,20}, -{59,-32,21}, -{59,-32,22}, -{59,-32,23}, -{59,-32,24}, -{59,-32,25}, -{59,-32,26}, -{59,-32,27}, -{59,-32,28}, -{59,-32,29}, -{59,-32,30}, -{59,-32,31}, -{59,-32,32}, -{59,-32,33}, -{59,-32,34}, -{59,-32,35}, -{59,-32,36}, -{59,-32,37}, -{59,-32,38}, -{59,-32,39}, -{59,-32,40}, -{59,-32,41}, -{59,-32,42}, -{59,-32,43}, -{59,-32,44}, -{59,-32,45}, -{59,-32,46}, -{59,-32,47}, -{59,-32,48}, -{59,-32,49}, -{59,-32,50}, -{59,-32,51}, -{59,-32,52}, -{59,-32,53}, -{59,-32,54}, -{59,-32,55}, -{59,-32,56}, -{59,-32,57}, -{59,-32,58}, -{59,-32,59}, -{59,-32,60}, -{59,-32,61}, -{59,-31,-14}, -{59,-31,-13}, -{59,-31,-12}, -{59,-31,-11}, -{59,-31,-10}, -{59,-31,-9}, -{59,-31,-8}, -{59,-31,-7}, -{59,-31,-6}, -{59,-31,-5}, -{59,-31,-4}, -{59,-31,-3}, -{59,-31,-2}, -{59,-31,-1}, -{59,-31,0}, -{59,-31,1}, -{59,-31,2}, -{59,-31,3}, -{59,-31,4}, -{59,-31,5}, -{59,-31,6}, -{59,-31,7}, -{59,-31,8}, -{59,-31,9}, -{59,-31,10}, -{59,-31,11}, -{59,-31,12}, -{59,-31,13}, -{59,-31,14}, -{59,-31,15}, -{59,-31,16}, -{59,-31,17}, -{59,-31,18}, -{59,-31,19}, -{59,-31,20}, -{59,-31,21}, -{59,-31,22}, -{59,-31,23}, -{59,-31,24}, -{59,-31,25}, -{59,-31,26}, -{59,-31,27}, -{59,-31,28}, -{59,-31,29}, -{59,-31,30}, -{59,-31,31}, -{59,-31,32}, -{59,-31,33}, -{59,-31,34}, -{59,-31,35}, -{59,-31,36}, -{59,-31,37}, -{59,-31,38}, -{59,-31,39}, -{59,-31,40}, -{59,-31,41}, -{59,-31,42}, -{59,-31,43}, -{59,-31,44}, -{59,-31,45}, -{59,-31,46}, -{59,-31,47}, -{59,-31,48}, -{59,-31,49}, -{59,-31,50}, -{59,-31,51}, -{59,-31,52}, -{59,-31,53}, -{59,-31,54}, -{59,-31,55}, -{59,-31,56}, -{59,-31,57}, -{59,-31,58}, -{59,-31,59}, -{59,-31,60}, -{59,-31,61}, -{59,-30,-15}, -{59,-30,-14}, -{59,-30,-13}, -{59,-30,-12}, -{59,-30,-11}, -{59,-30,-10}, -{59,-30,-9}, -{59,-30,-8}, -{59,-30,-7}, -{59,-30,-6}, -{59,-30,-5}, -{59,-30,-4}, -{59,-30,-3}, -{59,-30,-2}, -{59,-30,-1}, -{59,-30,0}, -{59,-30,1}, -{59,-30,2}, -{59,-30,3}, -{59,-30,4}, -{59,-30,5}, -{59,-30,6}, -{59,-30,7}, -{59,-30,8}, -{59,-30,9}, -{59,-30,10}, -{59,-30,11}, -{59,-30,12}, -{59,-30,13}, -{59,-30,14}, -{59,-30,15}, -{59,-30,16}, -{59,-30,17}, -{59,-30,18}, -{59,-30,19}, -{59,-30,20}, -{59,-30,21}, -{59,-30,22}, -{59,-30,23}, -{59,-30,24}, -{59,-30,25}, -{59,-30,26}, -{59,-30,27}, -{59,-30,28}, -{59,-30,29}, -{59,-30,30}, -{59,-30,31}, -{59,-30,32}, -{59,-30,33}, -{59,-30,34}, -{59,-30,35}, -{59,-30,36}, -{59,-30,37}, -{59,-30,38}, -{59,-30,39}, -{59,-30,40}, -{59,-30,41}, -{59,-30,42}, -{59,-30,43}, -{59,-30,44}, -{59,-30,45}, -{59,-30,46}, -{59,-30,47}, -{59,-30,48}, -{59,-30,49}, -{59,-30,50}, -{59,-30,51}, -{59,-30,52}, -{59,-30,53}, -{59,-30,54}, -{59,-30,55}, -{59,-30,56}, -{59,-30,57}, -{59,-30,58}, -{59,-30,59}, -{59,-30,60}, -{59,-30,61}, -{59,-29,-17}, -{59,-29,-16}, -{59,-29,-15}, -{59,-29,-14}, -{59,-29,-13}, -{59,-29,-12}, -{59,-29,-11}, -{59,-29,-10}, -{59,-29,-9}, -{59,-29,-8}, -{59,-29,-7}, -{59,-29,-6}, -{59,-29,-5}, -{59,-29,-4}, -{59,-29,-3}, -{59,-29,-2}, -{59,-29,-1}, -{59,-29,0}, -{59,-29,1}, -{59,-29,2}, -{59,-29,3}, -{59,-29,4}, -{59,-29,5}, -{59,-29,6}, -{59,-29,7}, -{59,-29,8}, -{59,-29,9}, -{59,-29,10}, -{59,-29,11}, -{59,-29,12}, -{59,-29,13}, -{59,-29,14}, -{59,-29,15}, -{59,-29,16}, -{59,-29,17}, -{59,-29,18}, -{59,-29,19}, -{59,-29,20}, -{59,-29,21}, -{59,-29,22}, -{59,-29,23}, -{59,-29,24}, -{59,-29,25}, -{59,-29,26}, -{59,-29,27}, -{59,-29,28}, -{59,-29,29}, -{59,-29,30}, -{59,-29,31}, -{59,-29,32}, -{59,-29,33}, -{59,-29,34}, -{59,-29,35}, -{59,-29,36}, -{59,-29,37}, -{59,-29,38}, -{59,-29,39}, -{59,-29,40}, -{59,-29,41}, -{59,-29,42}, -{59,-29,43}, -{59,-29,44}, -{59,-29,45}, -{59,-29,46}, -{59,-29,47}, -{59,-29,48}, -{59,-29,49}, -{59,-29,50}, -{59,-29,51}, -{59,-29,52}, -{59,-29,53}, -{59,-29,54}, -{59,-29,55}, -{59,-29,56}, -{59,-29,57}, -{59,-29,58}, -{59,-29,59}, -{59,-29,60}, -{59,-29,61}, -{59,-28,-18}, -{59,-28,-17}, -{59,-28,-16}, -{59,-28,-15}, -{59,-28,-14}, -{59,-28,-13}, -{59,-28,-12}, -{59,-28,-11}, -{59,-28,-10}, -{59,-28,-9}, -{59,-28,-8}, -{59,-28,-7}, -{59,-28,-6}, -{59,-28,-5}, -{59,-28,-4}, -{59,-28,-3}, -{59,-28,-2}, -{59,-28,-1}, -{59,-28,0}, -{59,-28,1}, -{59,-28,2}, -{59,-28,3}, -{59,-28,4}, -{59,-28,5}, -{59,-28,6}, -{59,-28,7}, -{59,-28,8}, -{59,-28,9}, -{59,-28,10}, -{59,-28,11}, -{59,-28,12}, -{59,-28,13}, -{59,-28,14}, -{59,-28,15}, -{59,-28,16}, -{59,-28,17}, -{59,-28,18}, -{59,-28,19}, -{59,-28,20}, -{59,-28,21}, -{59,-28,22}, -{59,-28,23}, -{59,-28,24}, -{59,-28,25}, -{59,-28,26}, -{59,-28,27}, -{59,-28,28}, -{59,-28,29}, -{59,-28,30}, -{59,-28,31}, -{59,-28,32}, -{59,-28,33}, -{59,-28,34}, -{59,-28,35}, -{59,-28,36}, -{59,-28,37}, -{59,-28,38}, -{59,-28,39}, -{59,-28,40}, -{59,-28,41}, -{59,-28,42}, -{59,-28,43}, -{59,-28,44}, -{59,-28,45}, -{59,-28,46}, -{59,-28,47}, -{59,-28,48}, -{59,-28,49}, -{59,-28,50}, -{59,-28,51}, -{59,-28,52}, -{59,-28,53}, -{59,-28,54}, -{59,-28,55}, -{59,-28,56}, -{59,-28,57}, -{59,-28,58}, -{59,-28,59}, -{59,-28,60}, -{59,-28,61}, -{59,-27,-20}, -{59,-27,-19}, -{59,-27,-18}, -{59,-27,-17}, -{59,-27,-16}, -{59,-27,-15}, -{59,-27,-14}, -{59,-27,-13}, -{59,-27,-12}, -{59,-27,-11}, -{59,-27,-10}, -{59,-27,-9}, -{59,-27,-8}, -{59,-27,-7}, -{59,-27,-6}, -{59,-27,-5}, -{59,-27,-4}, -{59,-27,-3}, -{59,-27,-2}, -{59,-27,-1}, -{59,-27,0}, -{59,-27,1}, -{59,-27,2}, -{59,-27,3}, -{59,-27,4}, -{59,-27,5}, -{59,-27,6}, -{59,-27,7}, -{59,-27,8}, -{59,-27,9}, -{59,-27,10}, -{59,-27,11}, -{59,-27,12}, -{59,-27,13}, -{59,-27,14}, -{59,-27,15}, -{59,-27,16}, -{59,-27,17}, -{59,-27,18}, -{59,-27,19}, -{59,-27,20}, -{59,-27,21}, -{59,-27,22}, -{59,-27,23}, -{59,-27,24}, -{59,-27,25}, -{59,-27,26}, -{59,-27,27}, -{59,-27,28}, -{59,-27,29}, -{59,-27,30}, -{59,-27,31}, -{59,-27,32}, -{59,-27,33}, -{59,-27,34}, -{59,-27,35}, -{59,-27,36}, -{59,-27,37}, -{59,-27,38}, -{59,-27,39}, -{59,-27,40}, -{59,-27,41}, -{59,-27,42}, -{59,-27,43}, -{59,-27,44}, -{59,-27,45}, -{59,-27,46}, -{59,-27,47}, -{59,-27,48}, -{59,-27,49}, -{59,-27,50}, -{59,-27,51}, -{59,-27,52}, -{59,-27,53}, -{59,-27,54}, -{59,-27,55}, -{59,-27,56}, -{59,-27,57}, -{59,-27,58}, -{59,-27,59}, -{59,-27,60}, -{59,-27,61}, -{59,-27,62}, -{59,-26,-21}, -{59,-26,-20}, -{59,-26,-19}, -{59,-26,-18}, -{59,-26,-17}, -{59,-26,-16}, -{59,-26,-15}, -{59,-26,-14}, -{59,-26,-13}, -{59,-26,-12}, -{59,-26,-11}, -{59,-26,-10}, -{59,-26,-9}, -{59,-26,-8}, -{59,-26,-7}, -{59,-26,-6}, -{59,-26,-5}, -{59,-26,-4}, -{59,-26,-3}, -{59,-26,-2}, -{59,-26,-1}, -{59,-26,0}, -{59,-26,1}, -{59,-26,2}, -{59,-26,3}, -{59,-26,4}, -{59,-26,5}, -{59,-26,6}, -{59,-26,7}, -{59,-26,8}, -{59,-26,9}, -{59,-26,10}, -{59,-26,11}, -{59,-26,12}, -{59,-26,13}, -{59,-26,14}, -{59,-26,15}, -{59,-26,16}, -{59,-26,17}, -{59,-26,18}, -{59,-26,19}, -{59,-26,20}, -{59,-26,21}, -{59,-26,22}, -{59,-26,23}, -{59,-26,24}, -{59,-26,25}, -{59,-26,26}, -{59,-26,27}, -{59,-26,28}, -{59,-26,29}, -{59,-26,30}, -{59,-26,31}, -{59,-26,32}, -{59,-26,33}, -{59,-26,34}, -{59,-26,35}, -{59,-26,36}, -{59,-26,37}, -{59,-26,38}, -{59,-26,39}, -{59,-26,40}, -{59,-26,41}, -{59,-26,42}, -{59,-26,43}, -{59,-26,44}, -{59,-26,45}, -{59,-26,46}, -{59,-26,47}, -{59,-26,48}, -{59,-26,49}, -{59,-26,50}, -{59,-26,51}, -{59,-26,52}, -{59,-26,53}, -{59,-26,54}, -{59,-26,55}, -{59,-26,56}, -{59,-26,57}, -{59,-26,58}, -{59,-26,59}, -{59,-26,60}, -{59,-26,61}, -{59,-26,62}, -{59,-25,-22}, -{59,-25,-21}, -{59,-25,-20}, -{59,-25,-19}, -{59,-25,-18}, -{59,-25,-17}, -{59,-25,-16}, -{59,-25,-15}, -{59,-25,-14}, -{59,-25,-13}, -{59,-25,-12}, -{59,-25,-11}, -{59,-25,-10}, -{59,-25,-9}, -{59,-25,-8}, -{59,-25,-7}, -{59,-25,-6}, -{59,-25,-5}, -{59,-25,-4}, -{59,-25,-3}, -{59,-25,-2}, -{59,-25,-1}, -{59,-25,0}, -{59,-25,1}, -{59,-25,2}, -{59,-25,3}, -{59,-25,4}, -{59,-25,5}, -{59,-25,6}, -{59,-25,7}, -{59,-25,8}, -{59,-25,9}, -{59,-25,10}, -{59,-25,11}, -{59,-25,12}, -{59,-25,13}, -{59,-25,14}, -{59,-25,15}, -{59,-25,16}, -{59,-25,17}, -{59,-25,18}, -{59,-25,19}, -{59,-25,20}, -{59,-25,21}, -{59,-25,22}, -{59,-25,23}, -{59,-25,24}, -{59,-25,25}, -{59,-25,26}, -{59,-25,27}, -{59,-25,28}, -{59,-25,29}, -{59,-25,30}, -{59,-25,31}, -{59,-25,32}, -{59,-25,33}, -{59,-25,34}, -{59,-25,35}, -{59,-25,36}, -{59,-25,37}, -{59,-25,38}, -{59,-25,39}, -{59,-25,40}, -{59,-25,41}, -{59,-25,42}, -{59,-25,43}, -{59,-25,44}, -{59,-25,45}, -{59,-25,46}, -{59,-25,47}, -{59,-25,48}, -{59,-25,49}, -{59,-25,50}, -{59,-25,51}, -{59,-25,52}, -{59,-25,53}, -{59,-25,54}, -{59,-25,55}, -{59,-25,56}, -{59,-25,57}, -{59,-25,58}, -{59,-25,59}, -{59,-25,60}, -{59,-25,61}, -{59,-25,62}, -{59,-24,-24}, -{59,-24,-23}, -{59,-24,-22}, -{59,-24,-21}, -{59,-24,-20}, -{59,-24,-19}, -{59,-24,-18}, -{59,-24,-17}, -{59,-24,-16}, -{59,-24,-15}, -{59,-24,-14}, -{59,-24,-13}, -{59,-24,-12}, -{59,-24,-11}, -{59,-24,-10}, -{59,-24,-9}, -{59,-24,-8}, -{59,-24,-7}, -{59,-24,-6}, -{59,-24,-5}, -{59,-24,-4}, -{59,-24,-3}, -{59,-24,-2}, -{59,-24,-1}, -{59,-24,0}, -{59,-24,1}, -{59,-24,2}, -{59,-24,3}, -{59,-24,4}, -{59,-24,5}, -{59,-24,6}, -{59,-24,7}, -{59,-24,8}, -{59,-24,9}, -{59,-24,10}, -{59,-24,11}, -{59,-24,12}, -{59,-24,13}, -{59,-24,14}, -{59,-24,15}, -{59,-24,16}, -{59,-24,17}, -{59,-24,18}, -{59,-24,19}, -{59,-24,20}, -{59,-24,21}, -{59,-24,22}, -{59,-24,23}, -{59,-24,24}, -{59,-24,25}, -{59,-24,26}, -{59,-24,27}, -{59,-24,28}, -{59,-24,29}, -{59,-24,30}, -{59,-24,31}, -{59,-24,32}, -{59,-24,33}, -{59,-24,34}, -{59,-24,35}, -{59,-24,36}, -{59,-24,37}, -{59,-24,38}, -{59,-24,39}, -{59,-24,40}, -{59,-24,41}, -{59,-24,42}, -{59,-24,43}, -{59,-24,44}, -{59,-24,45}, -{59,-24,46}, -{59,-24,47}, -{59,-24,48}, -{59,-24,49}, -{59,-24,50}, -{59,-24,51}, -{59,-24,52}, -{59,-24,53}, -{59,-24,54}, -{59,-24,55}, -{59,-24,56}, -{59,-24,57}, -{59,-24,58}, -{59,-24,59}, -{59,-24,60}, -{59,-24,61}, -{59,-24,62}, -{59,-23,-25}, -{59,-23,-24}, -{59,-23,-23}, -{59,-23,-22}, -{59,-23,-21}, -{59,-23,-20}, -{59,-23,-19}, -{59,-23,-18}, -{59,-23,-17}, -{59,-23,-16}, -{59,-23,-15}, -{59,-23,-14}, -{59,-23,-13}, -{59,-23,-12}, -{59,-23,-11}, -{59,-23,-10}, -{59,-23,-9}, -{59,-23,-8}, -{59,-23,-7}, -{59,-23,-6}, -{59,-23,-5}, -{59,-23,-4}, -{59,-23,-3}, -{59,-23,-2}, -{59,-23,-1}, -{59,-23,0}, -{59,-23,1}, -{59,-23,2}, -{59,-23,3}, -{59,-23,4}, -{59,-23,5}, -{59,-23,6}, -{59,-23,7}, -{59,-23,8}, -{59,-23,9}, -{59,-23,10}, -{59,-23,11}, -{59,-23,12}, -{59,-23,13}, -{59,-23,14}, -{59,-23,15}, -{59,-23,16}, -{59,-23,17}, -{59,-23,18}, -{59,-23,19}, -{59,-23,20}, -{59,-23,21}, -{59,-23,22}, -{59,-23,23}, -{59,-23,24}, -{59,-23,25}, -{59,-23,26}, -{59,-23,27}, -{59,-23,28}, -{59,-23,29}, -{59,-23,30}, -{59,-23,31}, -{59,-23,32}, -{59,-23,33}, -{59,-23,34}, -{59,-23,35}, -{59,-23,36}, -{59,-23,37}, -{59,-23,38}, -{59,-23,39}, -{59,-23,40}, -{59,-23,41}, -{59,-23,42}, -{59,-23,43}, -{59,-23,44}, -{59,-23,45}, -{59,-23,46}, -{59,-23,47}, -{59,-23,48}, -{59,-23,49}, -{59,-23,50}, -{59,-23,51}, -{59,-23,52}, -{59,-23,53}, -{59,-23,54}, -{59,-23,55}, -{59,-23,56}, -{59,-23,57}, -{59,-23,58}, -{59,-23,59}, -{59,-23,60}, -{59,-23,61}, -{59,-23,62}, -{59,-22,-27}, -{59,-22,-26}, -{59,-22,-25}, -{59,-22,-24}, -{59,-22,-23}, -{59,-22,-22}, -{59,-22,-21}, -{59,-22,-20}, -{59,-22,-19}, -{59,-22,-18}, -{59,-22,-17}, -{59,-22,-16}, -{59,-22,-15}, -{59,-22,-14}, -{59,-22,-13}, -{59,-22,-12}, -{59,-22,-11}, -{59,-22,-10}, -{59,-22,-9}, -{59,-22,-8}, -{59,-22,-7}, -{59,-22,-6}, -{59,-22,-5}, -{59,-22,-4}, -{59,-22,-3}, -{59,-22,-2}, -{59,-22,-1}, -{59,-22,0}, -{59,-22,1}, -{59,-22,2}, -{59,-22,3}, -{59,-22,4}, -{59,-22,5}, -{59,-22,6}, -{59,-22,7}, -{59,-22,8}, -{59,-22,9}, -{59,-22,10}, -{59,-22,11}, -{59,-22,12}, -{59,-22,13}, -{59,-22,14}, -{59,-22,15}, -{59,-22,16}, -{59,-22,17}, -{59,-22,18}, -{59,-22,19}, -{59,-22,20}, -{59,-22,21}, -{59,-22,22}, -{59,-22,23}, -{59,-22,24}, -{59,-22,25}, -{59,-22,26}, -{59,-22,27}, -{59,-22,28}, -{59,-22,29}, -{59,-22,30}, -{59,-22,31}, -{59,-22,32}, -{59,-22,33}, -{59,-22,34}, -{59,-22,35}, -{59,-22,36}, -{59,-22,37}, -{59,-22,38}, -{59,-22,39}, -{59,-22,40}, -{59,-22,41}, -{59,-22,42}, -{59,-22,43}, -{59,-22,44}, -{59,-22,45}, -{59,-22,46}, -{59,-22,47}, -{59,-22,48}, -{59,-22,49}, -{59,-22,50}, -{59,-22,51}, -{59,-22,52}, -{59,-22,53}, -{59,-22,54}, -{59,-22,55}, -{59,-22,56}, -{59,-22,57}, -{59,-22,58}, -{59,-22,59}, -{59,-22,60}, -{59,-22,61}, -{59,-22,62}, -{59,-21,-28}, -{59,-21,-27}, -{59,-21,-26}, -{59,-21,-25}, -{59,-21,-24}, -{59,-21,-23}, -{59,-21,-22}, -{59,-21,-21}, -{59,-21,-20}, -{59,-21,-19}, -{59,-21,-18}, -{59,-21,-17}, -{59,-21,-16}, -{59,-21,-15}, -{59,-21,-14}, -{59,-21,-13}, -{59,-21,-12}, -{59,-21,-11}, -{59,-21,-10}, -{59,-21,-9}, -{59,-21,-8}, -{59,-21,-7}, -{59,-21,-6}, -{59,-21,-5}, -{59,-21,-4}, -{59,-21,-3}, -{59,-21,-2}, -{59,-21,-1}, -{59,-21,0}, -{59,-21,1}, -{59,-21,2}, -{59,-21,3}, -{59,-21,4}, -{59,-21,5}, -{59,-21,6}, -{59,-21,7}, -{59,-21,8}, -{59,-21,9}, -{59,-21,10}, -{59,-21,11}, -{59,-21,12}, -{59,-21,13}, -{59,-21,14}, -{59,-21,15}, -{59,-21,16}, -{59,-21,17}, -{59,-21,18}, -{59,-21,19}, -{59,-21,20}, -{59,-21,21}, -{59,-21,22}, -{59,-21,23}, -{59,-21,24}, -{59,-21,25}, -{59,-21,26}, -{59,-21,27}, -{59,-21,28}, -{59,-21,29}, -{59,-21,30}, -{59,-21,31}, -{59,-21,32}, -{59,-21,33}, -{59,-21,34}, -{59,-21,35}, -{59,-21,36}, -{59,-21,37}, -{59,-21,38}, -{59,-21,39}, -{59,-21,40}, -{59,-21,41}, -{59,-21,42}, -{59,-21,43}, -{59,-21,44}, -{59,-21,45}, -{59,-21,46}, -{59,-21,47}, -{59,-21,48}, -{59,-21,49}, -{59,-21,50}, -{59,-21,51}, -{59,-21,52}, -{59,-21,53}, -{59,-21,54}, -{59,-21,55}, -{59,-21,56}, -{59,-21,57}, -{59,-21,58}, -{59,-21,59}, -{59,-21,60}, -{59,-21,61}, -{59,-21,62}, -{59,-20,-29}, -{59,-20,-28}, -{59,-20,-27}, -{59,-20,-26}, -{59,-20,-25}, -{59,-20,-24}, -{59,-20,-23}, -{59,-20,-22}, -{59,-20,-21}, -{59,-20,-20}, -{59,-20,-19}, -{59,-20,-18}, -{59,-20,-17}, -{59,-20,-16}, -{59,-20,-15}, -{59,-20,-14}, -{59,-20,-13}, -{59,-20,-12}, -{59,-20,-11}, -{59,-20,-10}, -{59,-20,-9}, -{59,-20,-8}, -{59,-20,-7}, -{59,-20,-6}, -{59,-20,-5}, -{59,-20,-4}, -{59,-20,-3}, -{59,-20,-2}, -{59,-20,-1}, -{59,-20,0}, -{59,-20,1}, -{59,-20,2}, -{59,-20,3}, -{59,-20,4}, -{59,-20,5}, -{59,-20,6}, -{59,-20,7}, -{59,-20,8}, -{59,-20,9}, -{59,-20,10}, -{59,-20,11}, -{59,-20,12}, -{59,-20,13}, -{59,-20,14}, -{59,-20,15}, -{59,-20,16}, -{59,-20,17}, -{59,-20,18}, -{59,-20,19}, -{59,-20,20}, -{59,-20,21}, -{59,-20,22}, -{59,-20,23}, -{59,-20,24}, -{59,-20,25}, -{59,-20,26}, -{59,-20,27}, -{59,-20,28}, -{59,-20,29}, -{59,-20,30}, -{59,-20,31}, -{59,-20,32}, -{59,-20,33}, -{59,-20,34}, -{59,-20,35}, -{59,-20,36}, -{59,-20,37}, -{59,-20,38}, -{59,-20,39}, -{59,-20,40}, -{59,-20,41}, -{59,-20,42}, -{59,-20,43}, -{59,-20,44}, -{59,-20,45}, -{59,-20,46}, -{59,-20,47}, -{59,-20,48}, -{59,-20,49}, -{59,-20,50}, -{59,-20,51}, -{59,-20,52}, -{59,-20,53}, -{59,-20,54}, -{59,-20,55}, -{59,-20,56}, -{59,-20,57}, -{59,-20,58}, -{59,-20,59}, -{59,-20,60}, -{59,-20,61}, -{59,-20,62}, -{59,-19,-31}, -{59,-19,-30}, -{59,-19,-29}, -{59,-19,-28}, -{59,-19,-27}, -{59,-19,-26}, -{59,-19,-25}, -{59,-19,-24}, -{59,-19,-23}, -{59,-19,-22}, -{59,-19,-21}, -{59,-19,-20}, -{59,-19,-19}, -{59,-19,-18}, -{59,-19,-17}, -{59,-19,-16}, -{59,-19,-15}, -{59,-19,-14}, -{59,-19,-13}, -{59,-19,-12}, -{59,-19,-11}, -{59,-19,-10}, -{59,-19,-9}, -{59,-19,-8}, -{59,-19,-7}, -{59,-19,-6}, -{59,-19,-5}, -{59,-19,-4}, -{59,-19,-3}, -{59,-19,-2}, -{59,-19,-1}, -{59,-19,0}, -{59,-19,1}, -{59,-19,2}, -{59,-19,3}, -{59,-19,4}, -{59,-19,5}, -{59,-19,6}, -{59,-19,7}, -{59,-19,8}, -{59,-19,9}, -{59,-19,10}, -{59,-19,11}, -{59,-19,12}, -{59,-19,13}, -{59,-19,14}, -{59,-19,15}, -{59,-19,16}, -{59,-19,17}, -{59,-19,18}, -{59,-19,19}, -{59,-19,20}, -{59,-19,21}, -{59,-19,22}, -{59,-19,23}, -{59,-19,24}, -{59,-19,25}, -{59,-19,26}, -{59,-19,27}, -{59,-19,28}, -{59,-19,29}, -{59,-19,30}, -{59,-19,31}, -{59,-19,32}, -{59,-19,33}, -{59,-19,34}, -{59,-19,35}, -{59,-19,36}, -{59,-19,37}, -{59,-19,38}, -{59,-19,39}, -{59,-19,40}, -{59,-19,41}, -{59,-19,42}, -{59,-19,43}, -{59,-19,44}, -{59,-19,45}, -{59,-19,46}, -{59,-19,47}, -{59,-19,48}, -{59,-19,49}, -{59,-19,50}, -{59,-19,51}, -{59,-19,52}, -{59,-19,53}, -{59,-19,54}, -{59,-19,55}, -{59,-19,56}, -{59,-19,57}, -{59,-19,58}, -{59,-19,59}, -{59,-19,60}, -{59,-19,61}, -{59,-19,62}, -{59,-18,-32}, -{59,-18,-31}, -{59,-18,-30}, -{59,-18,-29}, -{59,-18,-28}, -{59,-18,-27}, -{59,-18,-26}, -{59,-18,-25}, -{59,-18,-24}, -{59,-18,-23}, -{59,-18,-22}, -{59,-18,-21}, -{59,-18,-20}, -{59,-18,-19}, -{59,-18,-18}, -{59,-18,-17}, -{59,-18,-16}, -{59,-18,-15}, -{59,-18,-14}, -{59,-18,-13}, -{59,-18,-12}, -{59,-18,-11}, -{59,-18,-10}, -{59,-18,-9}, -{59,-18,-8}, -{59,-18,-7}, -{59,-18,-6}, -{59,-18,-5}, -{59,-18,-4}, -{59,-18,-3}, -{59,-18,-2}, -{59,-18,-1}, -{59,-18,0}, -{59,-18,1}, -{59,-18,2}, -{59,-18,3}, -{59,-18,4}, -{59,-18,5}, -{59,-18,6}, -{59,-18,7}, -{59,-18,8}, -{59,-18,9}, -{59,-18,10}, -{59,-18,11}, -{59,-18,12}, -{59,-18,13}, -{59,-18,14}, -{59,-18,15}, -{59,-18,16}, -{59,-18,17}, -{59,-18,18}, -{59,-18,19}, -{59,-18,20}, -{59,-18,21}, -{59,-18,22}, -{59,-18,23}, -{59,-18,24}, -{59,-18,25}, -{59,-18,26}, -{59,-18,27}, -{59,-18,28}, -{59,-18,29}, -{59,-18,30}, -{59,-18,31}, -{59,-18,32}, -{59,-18,33}, -{59,-18,34}, -{59,-18,35}, -{59,-18,36}, -{59,-18,37}, -{59,-18,38}, -{59,-18,39}, -{59,-18,40}, -{59,-18,41}, -{59,-18,42}, -{59,-18,43}, -{59,-18,44}, -{59,-18,45}, -{59,-18,46}, -{59,-18,47}, -{59,-18,48}, -{59,-18,49}, -{59,-18,50}, -{59,-18,51}, -{59,-18,52}, -{59,-18,53}, -{59,-18,54}, -{59,-18,55}, -{59,-18,56}, -{59,-18,57}, -{59,-18,58}, -{59,-18,59}, -{59,-18,60}, -{59,-18,61}, -{59,-18,62}, -{59,-17,-33}, -{59,-17,-32}, -{59,-17,-31}, -{59,-17,-30}, -{59,-17,-29}, -{59,-17,-28}, -{59,-17,-27}, -{59,-17,-26}, -{59,-17,-25}, -{59,-17,-24}, -{59,-17,-23}, -{59,-17,-22}, -{59,-17,-21}, -{59,-17,-20}, -{59,-17,-19}, -{59,-17,-18}, -{59,-17,-17}, -{59,-17,-16}, -{59,-17,-15}, -{59,-17,-14}, -{59,-17,-13}, -{59,-17,-12}, -{59,-17,-11}, -{59,-17,-10}, -{59,-17,-9}, -{59,-17,-8}, -{59,-17,-7}, -{59,-17,-6}, -{59,-17,-5}, -{59,-17,-4}, -{59,-17,-3}, -{59,-17,-2}, -{59,-17,-1}, -{59,-17,0}, -{59,-17,1}, -{59,-17,2}, -{59,-17,3}, -{59,-17,4}, -{59,-17,5}, -{59,-17,6}, -{59,-17,7}, -{59,-17,8}, -{59,-17,9}, -{59,-17,10}, -{59,-17,11}, -{59,-17,12}, -{59,-17,13}, -{59,-17,14}, -{59,-17,15}, -{59,-17,16}, -{59,-17,17}, -{59,-17,18}, -{59,-17,19}, -{59,-17,20}, -{59,-17,21}, -{59,-17,22}, -{59,-17,23}, -{59,-17,24}, -{59,-17,25}, -{59,-17,26}, -{59,-17,27}, -{59,-17,28}, -{59,-17,29}, -{59,-17,30}, -{59,-17,31}, -{59,-17,32}, -{59,-17,33}, -{59,-17,34}, -{59,-17,35}, -{59,-17,36}, -{59,-17,37}, -{59,-17,38}, -{59,-17,39}, -{59,-17,40}, -{59,-17,41}, -{59,-17,42}, -{59,-17,43}, -{59,-17,44}, -{59,-17,45}, -{59,-17,46}, -{59,-17,47}, -{59,-17,48}, -{59,-17,49}, -{59,-17,50}, -{59,-17,51}, -{59,-17,52}, -{59,-17,53}, -{59,-17,54}, -{59,-17,55}, -{59,-17,56}, -{59,-17,57}, -{59,-17,58}, -{59,-17,59}, -{59,-17,60}, -{59,-17,61}, -{59,-17,62}, -{59,-16,-34}, -{59,-16,-33}, -{59,-16,-32}, -{59,-16,-31}, -{59,-16,-30}, -{59,-16,-29}, -{59,-16,-28}, -{59,-16,-27}, -{59,-16,-26}, -{59,-16,-25}, -{59,-16,-24}, -{59,-16,-23}, -{59,-16,-22}, -{59,-16,-21}, -{59,-16,-20}, -{59,-16,-19}, -{59,-16,-18}, -{59,-16,-17}, -{59,-16,-16}, -{59,-16,-15}, -{59,-16,-14}, -{59,-16,-13}, -{59,-16,-12}, -{59,-16,-11}, -{59,-16,-10}, -{59,-16,-9}, -{59,-16,-8}, -{59,-16,-7}, -{59,-16,-6}, -{59,-16,-5}, -{59,-16,-4}, -{59,-16,-3}, -{59,-16,-2}, -{59,-16,-1}, -{59,-16,0}, -{59,-16,1}, -{59,-16,2}, -{59,-16,3}, -{59,-16,4}, -{59,-16,5}, -{59,-16,6}, -{59,-16,7}, -{59,-16,8}, -{59,-16,9}, -{59,-16,10}, -{59,-16,11}, -{59,-16,12}, -{59,-16,13}, -{59,-16,14}, -{59,-16,15}, -{59,-16,16}, -{59,-16,17}, -{59,-16,18}, -{59,-16,19}, -{59,-16,20}, -{59,-16,21}, -{59,-16,22}, -{59,-16,23}, -{59,-16,24}, -{59,-16,25}, -{59,-16,26}, -{59,-16,27}, -{59,-16,28}, -{59,-16,29}, -{59,-16,30}, -{59,-16,31}, -{59,-16,32}, -{59,-16,33}, -{59,-16,34}, -{59,-16,35}, -{59,-16,36}, -{59,-16,37}, -{59,-16,38}, -{59,-16,39}, -{59,-16,40}, -{59,-16,41}, -{59,-16,42}, -{59,-16,43}, -{59,-16,44}, -{59,-16,45}, -{59,-16,46}, -{59,-16,47}, -{59,-16,48}, -{59,-16,49}, -{59,-16,50}, -{59,-16,51}, -{59,-16,52}, -{59,-16,53}, -{59,-16,54}, -{59,-16,55}, -{59,-16,56}, -{59,-16,57}, -{59,-16,58}, -{59,-16,59}, -{59,-16,60}, -{59,-16,61}, -{59,-16,62}, -{59,-15,-36}, -{59,-15,-35}, -{59,-15,-34}, -{59,-15,-33}, -{59,-15,-32}, -{59,-15,-31}, -{59,-15,-30}, -{59,-15,-29}, -{59,-15,-28}, -{59,-15,-27}, -{59,-15,-26}, -{59,-15,-25}, -{59,-15,-24}, -{59,-15,-23}, -{59,-15,-22}, -{59,-15,-21}, -{59,-15,-20}, -{59,-15,-19}, -{59,-15,-18}, -{59,-15,-17}, -{59,-15,-16}, -{59,-15,-15}, -{59,-15,-14}, -{59,-15,-13}, -{59,-15,-12}, -{59,-15,-11}, -{59,-15,-10}, -{59,-15,-9}, -{59,-15,-8}, -{59,-15,-7}, -{59,-15,-6}, -{59,-15,-5}, -{59,-15,-4}, -{59,-15,-3}, -{59,-15,-2}, -{59,-15,-1}, -{59,-15,0}, -{59,-15,1}, -{59,-15,2}, -{59,-15,3}, -{59,-15,4}, -{59,-15,5}, -{59,-15,6}, -{59,-15,7}, -{59,-15,8}, -{59,-15,9}, -{59,-15,10}, -{59,-15,11}, -{59,-15,12}, -{59,-15,13}, -{59,-15,14}, -{59,-15,15}, -{59,-15,16}, -{59,-15,17}, -{59,-15,18}, -{59,-15,19}, -{59,-15,20}, -{59,-15,21}, -{59,-15,22}, -{59,-15,23}, -{59,-15,24}, -{59,-15,25}, -{59,-15,26}, -{59,-15,27}, -{59,-15,28}, -{59,-15,29}, -{59,-15,30}, -{59,-15,31}, -{59,-15,32}, -{59,-15,33}, -{59,-15,34}, -{59,-15,35}, -{59,-15,36}, -{59,-15,37}, -{59,-15,38}, -{59,-15,39}, -{59,-15,40}, -{59,-15,41}, -{59,-15,42}, -{59,-15,43}, -{59,-15,44}, -{59,-15,45}, -{59,-15,46}, -{59,-15,47}, -{59,-15,48}, -{59,-15,49}, -{59,-15,50}, -{59,-15,51}, -{59,-15,52}, -{59,-15,53}, -{59,-15,54}, -{59,-15,55}, -{59,-15,56}, -{59,-15,57}, -{59,-15,58}, -{59,-15,59}, -{59,-15,60}, -{59,-15,61}, -{59,-15,62}, -{59,-14,-37}, -{59,-14,-36}, -{59,-14,-35}, -{59,-14,-34}, -{59,-14,-33}, -{59,-14,-32}, -{59,-14,-31}, -{59,-14,-30}, -{59,-14,-29}, -{59,-14,-28}, -{59,-14,-27}, -{59,-14,-26}, -{59,-14,-25}, -{59,-14,-24}, -{59,-14,-23}, -{59,-14,-22}, -{59,-14,-21}, -{59,-14,-20}, -{59,-14,-19}, -{59,-14,-18}, -{59,-14,-17}, -{59,-14,-16}, -{59,-14,-15}, -{59,-14,-14}, -{59,-14,-13}, -{59,-14,-12}, -{59,-14,-11}, -{59,-14,-10}, -{59,-14,-9}, -{59,-14,-8}, -{59,-14,-7}, -{59,-14,-6}, -{59,-14,-5}, -{59,-14,-4}, -{59,-14,-3}, -{59,-14,-2}, -{59,-14,-1}, -{59,-14,0}, -{59,-14,1}, -{59,-14,2}, -{59,-14,3}, -{59,-14,4}, -{59,-14,5}, -{59,-14,6}, -{59,-14,7}, -{59,-14,8}, -{59,-14,9}, -{59,-14,10}, -{59,-14,11}, -{59,-14,12}, -{59,-14,13}, -{59,-14,14}, -{59,-14,15}, -{59,-14,16}, -{59,-14,17}, -{59,-14,18}, -{59,-14,19}, -{59,-14,20}, -{59,-14,21}, -{59,-14,22}, -{59,-14,23}, -{59,-14,24}, -{59,-14,25}, -{59,-14,26}, -{59,-14,27}, -{59,-14,28}, -{59,-14,29}, -{59,-14,30}, -{59,-14,31}, -{59,-14,32}, -{59,-14,33}, -{59,-14,34}, -{59,-14,35}, -{59,-14,36}, -{59,-14,37}, -{59,-14,38}, -{59,-14,39}, -{59,-14,40}, -{59,-14,41}, -{59,-14,42}, -{59,-14,43}, -{59,-14,44}, -{59,-14,45}, -{59,-14,46}, -{59,-14,47}, -{59,-14,48}, -{59,-14,49}, -{59,-14,50}, -{59,-14,51}, -{59,-14,52}, -{59,-14,53}, -{59,-14,54}, -{59,-14,55}, -{59,-14,56}, -{59,-14,57}, -{59,-14,58}, -{59,-14,59}, -{59,-14,60}, -{59,-14,61}, -{59,-14,62}, -{59,-13,-38}, -{59,-13,-37}, -{59,-13,-36}, -{59,-13,-35}, -{59,-13,-34}, -{59,-13,-33}, -{59,-13,-32}, -{59,-13,-31}, -{59,-13,-30}, -{59,-13,-29}, -{59,-13,-28}, -{59,-13,-27}, -{59,-13,-26}, -{59,-13,-25}, -{59,-13,-24}, -{59,-13,-23}, -{59,-13,-22}, -{59,-13,-21}, -{59,-13,-20}, -{59,-13,-19}, -{59,-13,-18}, -{59,-13,-17}, -{59,-13,-16}, -{59,-13,-15}, -{59,-13,-14}, -{59,-13,-13}, -{59,-13,-12}, -{59,-13,-11}, -{59,-13,-10}, -{59,-13,-9}, -{59,-13,-8}, -{59,-13,-7}, -{59,-13,-6}, -{59,-13,-5}, -{59,-13,-4}, -{59,-13,-3}, -{59,-13,-2}, -{59,-13,-1}, -{59,-13,0}, -{59,-13,1}, -{59,-13,2}, -{59,-13,3}, -{59,-13,4}, -{59,-13,5}, -{59,-13,6}, -{59,-13,7}, -{59,-13,8}, -{59,-13,9}, -{59,-13,10}, -{59,-13,11}, -{59,-13,12}, -{59,-13,13}, -{59,-13,14}, -{59,-13,15}, -{59,-13,16}, -{59,-13,17}, -{59,-13,18}, -{59,-13,19}, -{59,-13,20}, -{59,-13,21}, -{59,-13,22}, -{59,-13,23}, -{59,-13,24}, -{59,-13,25}, -{59,-13,26}, -{59,-13,27}, -{59,-13,28}, -{59,-13,29}, -{59,-13,30}, -{59,-13,31}, -{59,-13,32}, -{59,-13,33}, -{59,-13,34}, -{59,-13,35}, -{59,-13,36}, -{59,-13,37}, -{59,-13,38}, -{59,-13,39}, -{59,-13,40}, -{59,-13,41}, -{59,-13,42}, -{59,-13,43}, -{59,-13,44}, -{59,-13,45}, -{59,-13,46}, -{59,-13,47}, -{59,-13,48}, -{59,-13,49}, -{59,-13,50}, -{59,-13,51}, -{59,-13,52}, -{59,-13,53}, -{59,-13,54}, -{59,-13,55}, -{59,-13,56}, -{59,-13,57}, -{59,-13,58}, -{59,-13,59}, -{59,-13,60}, -{59,-13,61}, -{59,-13,62}, -{59,-12,-39}, -{59,-12,-38}, -{59,-12,-37}, -{59,-12,-36}, -{59,-12,-35}, -{59,-12,-34}, -{59,-12,-33}, -{59,-12,-32}, -{59,-12,-31}, -{59,-12,-30}, -{59,-12,-29}, -{59,-12,-28}, -{59,-12,-27}, -{59,-12,-26}, -{59,-12,-25}, -{59,-12,-24}, -{59,-12,-23}, -{59,-12,-22}, -{59,-12,-21}, -{59,-12,-20}, -{59,-12,-19}, -{59,-12,-18}, -{59,-12,-17}, -{59,-12,-16}, -{59,-12,-15}, -{59,-12,-14}, -{59,-12,-13}, -{59,-12,-12}, -{59,-12,-11}, -{59,-12,-10}, -{59,-12,-9}, -{59,-12,-8}, -{59,-12,-7}, -{59,-12,-6}, -{59,-12,-5}, -{59,-12,-4}, -{59,-12,-3}, -{59,-12,-2}, -{59,-12,-1}, -{59,-12,0}, -{59,-12,1}, -{59,-12,2}, -{59,-12,3}, -{59,-12,4}, -{59,-12,5}, -{59,-12,6}, -{59,-12,7}, -{59,-12,8}, -{59,-12,9}, -{59,-12,10}, -{59,-12,11}, -{59,-12,12}, -{59,-12,13}, -{59,-12,14}, -{59,-12,15}, -{59,-12,16}, -{59,-12,17}, -{59,-12,18}, -{59,-12,19}, -{59,-12,20}, -{59,-12,21}, -{59,-12,22}, -{59,-12,23}, -{59,-12,24}, -{59,-12,25}, -{59,-12,26}, -{59,-12,27}, -{59,-12,28}, -{59,-12,29}, -{59,-12,30}, -{59,-12,31}, -{59,-12,32}, -{59,-12,33}, -{59,-12,34}, -{59,-12,35}, -{59,-12,36}, -{59,-12,37}, -{59,-12,38}, -{59,-12,39}, -{59,-12,40}, -{59,-12,41}, -{59,-12,42}, -{59,-12,43}, -{59,-12,44}, -{59,-12,45}, -{59,-12,46}, -{59,-12,47}, -{59,-12,48}, -{59,-12,49}, -{59,-12,50}, -{59,-12,51}, -{59,-12,52}, -{59,-12,53}, -{59,-12,54}, -{59,-12,55}, -{59,-12,56}, -{59,-12,57}, -{59,-12,58}, -{59,-12,59}, -{59,-12,60}, -{59,-12,61}, -{59,-12,62}, -{59,-11,-41}, -{59,-11,-40}, -{59,-11,-39}, -{59,-11,-38}, -{59,-11,-37}, -{59,-11,-36}, -{59,-11,-35}, -{59,-11,-34}, -{59,-11,-33}, -{59,-11,-32}, -{59,-11,-31}, -{59,-11,-30}, -{59,-11,-29}, -{59,-11,-28}, -{59,-11,-27}, -{59,-11,-26}, -{59,-11,-25}, -{59,-11,-24}, -{59,-11,-23}, -{59,-11,-22}, -{59,-11,-21}, -{59,-11,-20}, -{59,-11,-19}, -{59,-11,-18}, -{59,-11,-17}, -{59,-11,-16}, -{59,-11,-15}, -{59,-11,-14}, -{59,-11,-13}, -{59,-11,-12}, -{59,-11,-11}, -{59,-11,-10}, -{59,-11,-9}, -{59,-11,-8}, -{59,-11,-7}, -{59,-11,-6}, -{59,-11,-5}, -{59,-11,-4}, -{59,-11,-3}, -{59,-11,-2}, -{59,-11,-1}, -{59,-11,0}, -{59,-11,1}, -{59,-11,2}, -{59,-11,3}, -{59,-11,4}, -{59,-11,5}, -{59,-11,6}, -{59,-11,7}, -{59,-11,8}, -{59,-11,9}, -{59,-11,10}, -{59,-11,11}, -{59,-11,12}, -{59,-11,13}, -{59,-11,14}, -{59,-11,15}, -{59,-11,16}, -{59,-11,17}, -{59,-11,18}, -{59,-11,19}, -{59,-11,20}, -{59,-11,21}, -{59,-11,22}, -{59,-11,23}, -{59,-11,24}, -{59,-11,25}, -{59,-11,26}, -{59,-11,27}, -{59,-11,28}, -{59,-11,29}, -{59,-11,30}, -{59,-11,31}, -{59,-11,32}, -{59,-11,33}, -{59,-11,34}, -{59,-11,35}, -{59,-11,36}, -{59,-11,37}, -{59,-11,38}, -{59,-11,39}, -{59,-11,40}, -{59,-11,41}, -{59,-11,42}, -{59,-11,43}, -{59,-11,44}, -{59,-11,45}, -{59,-11,46}, -{59,-11,47}, -{59,-11,48}, -{59,-11,49}, -{59,-11,50}, -{59,-11,51}, -{59,-11,52}, -{59,-11,53}, -{59,-11,54}, -{59,-11,55}, -{59,-11,56}, -{59,-11,57}, -{59,-11,58}, -{59,-11,59}, -{59,-11,60}, -{59,-11,61}, -{59,-11,62}, -{59,-11,63}, -{59,-10,-42}, -{59,-10,-41}, -{59,-10,-40}, -{59,-10,-39}, -{59,-10,-38}, -{59,-10,-37}, -{59,-10,-36}, -{59,-10,-35}, -{59,-10,-34}, -{59,-10,-33}, -{59,-10,-32}, -{59,-10,-31}, -{59,-10,-30}, -{59,-10,-29}, -{59,-10,-28}, -{59,-10,-27}, -{59,-10,-26}, -{59,-10,-25}, -{59,-10,-24}, -{59,-10,-23}, -{59,-10,-22}, -{59,-10,-21}, -{59,-10,-20}, -{59,-10,-19}, -{59,-10,-18}, -{59,-10,-17}, -{59,-10,-16}, -{59,-10,-15}, -{59,-10,-14}, -{59,-10,-13}, -{59,-10,-12}, -{59,-10,-11}, -{59,-10,-10}, -{59,-10,-9}, -{59,-10,-8}, -{59,-10,-7}, -{59,-10,-6}, -{59,-10,-5}, -{59,-10,-4}, -{59,-10,-3}, -{59,-10,-2}, -{59,-10,-1}, -{59,-10,0}, -{59,-10,1}, -{59,-10,2}, -{59,-10,3}, -{59,-10,4}, -{59,-10,5}, -{59,-10,6}, -{59,-10,7}, -{59,-10,8}, -{59,-10,9}, -{59,-10,10}, -{59,-10,11}, -{59,-10,12}, -{59,-10,13}, -{59,-10,14}, -{59,-10,15}, -{59,-10,16}, -{59,-10,17}, -{59,-10,18}, -{59,-10,19}, -{59,-10,20}, -{59,-10,21}, -{59,-10,22}, -{59,-10,23}, -{59,-10,24}, -{59,-10,25}, -{59,-10,26}, -{59,-10,27}, -{59,-10,28}, -{59,-10,29}, -{59,-10,30}, -{59,-10,31}, -{59,-10,32}, -{59,-10,33}, -{59,-10,34}, -{59,-10,35}, -{59,-10,36}, -{59,-10,37}, -{59,-10,38}, -{59,-10,39}, -{59,-10,40}, -{59,-10,41}, -{59,-10,42}, -{59,-10,43}, -{59,-10,44}, -{59,-10,45}, -{59,-10,46}, -{59,-10,47}, -{59,-10,48}, -{59,-10,49}, -{59,-10,50}, -{59,-10,51}, -{59,-10,52}, -{59,-10,53}, -{59,-10,54}, -{59,-10,55}, -{59,-10,56}, -{59,-10,57}, -{59,-10,58}, -{59,-10,59}, -{59,-10,60}, -{59,-10,61}, -{59,-10,62}, -{59,-10,63}, -{59,-9,-43}, -{59,-9,-42}, -{59,-9,-41}, -{59,-9,-40}, -{59,-9,-39}, -{59,-9,-38}, -{59,-9,-37}, -{59,-9,-36}, -{59,-9,-35}, -{59,-9,-34}, -{59,-9,-33}, -{59,-9,-32}, -{59,-9,-31}, -{59,-9,-30}, -{59,-9,-29}, -{59,-9,-28}, -{59,-9,-27}, -{59,-9,-26}, -{59,-9,-25}, -{59,-9,-24}, -{59,-9,-23}, -{59,-9,-22}, -{59,-9,-21}, -{59,-9,-20}, -{59,-9,-19}, -{59,-9,-18}, -{59,-9,-17}, -{59,-9,-16}, -{59,-9,-15}, -{59,-9,-14}, -{59,-9,-13}, -{59,-9,-12}, -{59,-9,-11}, -{59,-9,-10}, -{59,-9,-9}, -{59,-9,-8}, -{59,-9,-7}, -{59,-9,-6}, -{59,-9,-5}, -{59,-9,-4}, -{59,-9,-3}, -{59,-9,-2}, -{59,-9,-1}, -{59,-9,0}, -{59,-9,1}, -{59,-9,2}, -{59,-9,3}, -{59,-9,4}, -{59,-9,5}, -{59,-9,6}, -{59,-9,7}, -{59,-9,8}, -{59,-9,9}, -{59,-9,10}, -{59,-9,11}, -{59,-9,12}, -{59,-9,13}, -{59,-9,14}, -{59,-9,15}, -{59,-9,16}, -{59,-9,17}, -{59,-9,18}, -{59,-9,19}, -{59,-9,20}, -{59,-9,21}, -{59,-9,22}, -{59,-9,23}, -{59,-9,24}, -{59,-9,25}, -{59,-9,26}, -{59,-9,27}, -{59,-9,28}, -{59,-9,29}, -{59,-9,30}, -{59,-9,31}, -{59,-9,32}, -{59,-9,33}, -{59,-9,34}, -{59,-9,35}, -{59,-9,36}, -{59,-9,37}, -{59,-9,38}, -{59,-9,39}, -{59,-9,40}, -{59,-9,41}, -{59,-9,42}, -{59,-9,43}, -{59,-9,44}, -{59,-9,45}, -{59,-9,46}, -{59,-9,47}, -{59,-9,48}, -{59,-9,49}, -{59,-9,50}, -{59,-9,51}, -{59,-9,52}, -{59,-9,53}, -{59,-9,54}, -{59,-9,55}, -{59,-9,56}, -{59,-9,57}, -{59,-9,58}, -{59,-9,59}, -{59,-9,60}, -{59,-9,61}, -{59,-9,62}, -{59,-9,63}, -{59,-8,-44}, -{59,-8,-43}, -{59,-8,-42}, -{59,-8,-41}, -{59,-8,-40}, -{59,-8,-39}, -{59,-8,-38}, -{59,-8,-37}, -{59,-8,-36}, -{59,-8,-35}, -{59,-8,-34}, -{59,-8,-33}, -{59,-8,-32}, -{59,-8,-31}, -{59,-8,-30}, -{59,-8,-29}, -{59,-8,-28}, -{59,-8,-27}, -{59,-8,-26}, -{59,-8,-25}, -{59,-8,-24}, -{59,-8,-23}, -{59,-8,-22}, -{59,-8,-21}, -{59,-8,-20}, -{59,-8,-19}, -{59,-8,-18}, -{59,-8,-17}, -{59,-8,-16}, -{59,-8,-15}, -{59,-8,-14}, -{59,-8,-13}, -{59,-8,-12}, -{59,-8,-11}, -{59,-8,-10}, -{59,-8,-9}, -{59,-8,-8}, -{59,-8,-7}, -{59,-8,-6}, -{59,-8,-5}, -{59,-8,-4}, -{59,-8,-3}, -{59,-8,-2}, -{59,-8,-1}, -{59,-8,0}, -{59,-8,1}, -{59,-8,2}, -{59,-8,3}, -{59,-8,4}, -{59,-8,5}, -{59,-8,6}, -{59,-8,7}, -{59,-8,8}, -{59,-8,9}, -{59,-8,10}, -{59,-8,11}, -{59,-8,12}, -{59,-8,13}, -{59,-8,14}, -{59,-8,15}, -{59,-8,16}, -{59,-8,17}, -{59,-8,18}, -{59,-8,19}, -{59,-8,20}, -{59,-8,21}, -{59,-8,22}, -{59,-8,23}, -{59,-8,24}, -{59,-8,25}, -{59,-8,26}, -{59,-8,27}, -{59,-8,28}, -{59,-8,29}, -{59,-8,30}, -{59,-8,31}, -{59,-8,32}, -{59,-8,33}, -{59,-8,34}, -{59,-8,35}, -{59,-8,36}, -{59,-8,37}, -{59,-8,38}, -{59,-8,39}, -{59,-8,40}, -{59,-8,41}, -{59,-8,42}, -{59,-8,43}, -{59,-8,44}, -{59,-8,45}, -{59,-8,46}, -{59,-8,47}, -{59,-8,48}, -{59,-8,49}, -{59,-8,50}, -{59,-8,51}, -{59,-8,52}, -{59,-8,53}, -{59,-8,54}, -{59,-8,55}, -{59,-8,56}, -{59,-8,57}, -{59,-8,58}, -{59,-8,59}, -{59,-8,60}, -{59,-8,61}, -{59,-8,62}, -{59,-8,63}, -{59,-7,-45}, -{59,-7,-44}, -{59,-7,-43}, -{59,-7,-42}, -{59,-7,-41}, -{59,-7,-40}, -{59,-7,-39}, -{59,-7,-38}, -{59,-7,-37}, -{59,-7,-36}, -{59,-7,-35}, -{59,-7,-34}, -{59,-7,-33}, -{59,-7,-32}, -{59,-7,-31}, -{59,-7,-30}, -{59,-7,-29}, -{59,-7,-28}, -{59,-7,-27}, -{59,-7,-26}, -{59,-7,-25}, -{59,-7,-24}, -{59,-7,-23}, -{59,-7,-22}, -{59,-7,-21}, -{59,-7,-20}, -{59,-7,-19}, -{59,-7,-18}, -{59,-7,-17}, -{59,-7,-16}, -{59,-7,-15}, -{59,-7,-14}, -{59,-7,-13}, -{59,-7,-12}, -{59,-7,-11}, -{59,-7,-10}, -{59,-7,-9}, -{59,-7,-8}, -{59,-7,-7}, -{59,-7,-6}, -{59,-7,-5}, -{59,-7,-4}, -{59,-7,-3}, -{59,-7,-2}, -{59,-7,-1}, -{59,-7,0}, -{59,-7,1}, -{59,-7,2}, -{59,-7,3}, -{59,-7,4}, -{59,-7,5}, -{59,-7,6}, -{59,-7,7}, -{59,-7,8}, -{59,-7,9}, -{59,-7,10}, -{59,-7,11}, -{59,-7,12}, -{59,-7,13}, -{59,-7,14}, -{59,-7,15}, -{59,-7,16}, -{59,-7,17}, -{59,-7,18}, -{59,-7,19}, -{59,-7,20}, -{59,-7,21}, -{59,-7,22}, -{59,-7,23}, -{59,-7,24}, -{59,-7,25}, -{59,-7,26}, -{59,-7,27}, -{59,-7,28}, -{59,-7,29}, -{59,-7,30}, -{59,-7,31}, -{59,-7,32}, -{59,-7,33}, -{59,-7,34}, -{59,-7,35}, -{59,-7,36}, -{59,-7,37}, -{59,-7,38}, -{59,-7,39}, -{59,-7,40}, -{59,-7,41}, -{59,-7,42}, -{59,-7,43}, -{59,-7,44}, -{59,-7,45}, -{59,-7,46}, -{59,-7,47}, -{59,-7,48}, -{59,-7,49}, -{59,-7,50}, -{59,-7,51}, -{59,-7,52}, -{59,-7,53}, -{59,-7,54}, -{59,-7,55}, -{59,-7,56}, -{59,-7,57}, -{59,-7,58}, -{59,-7,59}, -{59,-7,60}, -{59,-7,61}, -{59,-7,62}, -{59,-7,63}, -{59,-6,-47}, -{59,-6,-46}, -{59,-6,-45}, -{59,-6,-44}, -{59,-6,-43}, -{59,-6,-42}, -{59,-6,-41}, -{59,-6,-40}, -{59,-6,-39}, -{59,-6,-38}, -{59,-6,-37}, -{59,-6,-36}, -{59,-6,-35}, -{59,-6,-34}, -{59,-6,-33}, -{59,-6,-32}, -{59,-6,-31}, -{59,-6,-30}, -{59,-6,-29}, -{59,-6,-28}, -{59,-6,-27}, -{59,-6,-26}, -{59,-6,-25}, -{59,-6,-24}, -{59,-6,-23}, -{59,-6,-22}, -{59,-6,-21}, -{59,-6,-20}, -{59,-6,-19}, -{59,-6,-18}, -{59,-6,-17}, -{59,-6,-16}, -{59,-6,-15}, -{59,-6,-14}, -{59,-6,-13}, -{59,-6,-12}, -{59,-6,-11}, -{59,-6,-10}, -{59,-6,-9}, -{59,-6,-8}, -{59,-6,-7}, -{59,-6,-6}, -{59,-6,-5}, -{59,-6,-4}, -{59,-6,-3}, -{59,-6,-2}, -{59,-6,-1}, -{59,-6,0}, -{59,-6,1}, -{59,-6,2}, -{59,-6,3}, -{59,-6,4}, -{59,-6,5}, -{59,-6,6}, -{59,-6,7}, -{59,-6,8}, -{59,-6,9}, -{59,-6,10}, -{59,-6,11}, -{59,-6,12}, -{59,-6,13}, -{59,-6,14}, -{59,-6,15}, -{59,-6,16}, -{59,-6,17}, -{59,-6,18}, -{59,-6,19}, -{59,-6,20}, -{59,-6,21}, -{59,-6,22}, -{59,-6,23}, -{59,-6,24}, -{59,-6,25}, -{59,-6,26}, -{59,-6,27}, -{59,-6,28}, -{59,-6,29}, -{59,-6,30}, -{59,-6,31}, -{59,-6,32}, -{59,-6,33}, -{59,-6,34}, -{59,-6,35}, -{59,-6,36}, -{59,-6,37}, -{59,-6,38}, -{59,-6,39}, -{59,-6,40}, -{59,-6,41}, -{59,-6,42}, -{59,-6,43}, -{59,-6,44}, -{59,-6,45}, -{59,-6,46}, -{59,-6,47}, -{59,-6,48}, -{59,-6,49}, -{59,-6,50}, -{59,-6,51}, -{59,-6,52}, -{59,-6,53}, -{59,-6,54}, -{59,-6,55}, -{59,-6,56}, -{59,-6,57}, -{59,-6,58}, -{59,-6,59}, -{59,-6,60}, -{59,-6,61}, -{59,-6,62}, -{59,-6,63}, -{59,-5,-48}, -{59,-5,-47}, -{59,-5,-46}, -{59,-5,-45}, -{59,-5,-44}, -{59,-5,-43}, -{59,-5,-42}, -{59,-5,-41}, -{59,-5,-40}, -{59,-5,-39}, -{59,-5,-38}, -{59,-5,-37}, -{59,-5,-36}, -{59,-5,-35}, -{59,-5,-34}, -{59,-5,-33}, -{59,-5,-32}, -{59,-5,-31}, -{59,-5,-30}, -{59,-5,-29}, -{59,-5,-28}, -{59,-5,-27}, -{59,-5,-26}, -{59,-5,-25}, -{59,-5,-24}, -{59,-5,-23}, -{59,-5,-22}, -{59,-5,-21}, -{59,-5,-20}, -{59,-5,-19}, -{59,-5,-18}, -{59,-5,-17}, -{59,-5,-16}, -{59,-5,-15}, -{59,-5,-14}, -{59,-5,-13}, -{59,-5,-12}, -{59,-5,-11}, -{59,-5,-10}, -{59,-5,-9}, -{59,-5,-8}, -{59,-5,-7}, -{59,-5,-6}, -{59,-5,-5}, -{59,-5,-4}, -{59,-5,-3}, -{59,-5,-2}, -{59,-5,-1}, -{59,-5,0}, -{59,-5,1}, -{59,-5,2}, -{59,-5,3}, -{59,-5,4}, -{59,-5,5}, -{59,-5,6}, -{59,-5,7}, -{59,-5,8}, -{59,-5,9}, -{59,-5,10}, -{59,-5,11}, -{59,-5,12}, -{59,-5,13}, -{59,-5,14}, -{59,-5,15}, -{59,-5,16}, -{59,-5,17}, -{59,-5,18}, -{59,-5,19}, -{59,-5,20}, -{59,-5,21}, -{59,-5,22}, -{59,-5,23}, -{59,-5,24}, -{59,-5,25}, -{59,-5,26}, -{59,-5,27}, -{59,-5,28}, -{59,-5,29}, -{59,-5,30}, -{59,-5,31}, -{59,-5,32}, -{59,-5,33}, -{59,-5,34}, -{59,-5,35}, -{59,-5,36}, -{59,-5,37}, -{59,-5,38}, -{59,-5,39}, -{59,-5,40}, -{59,-5,41}, -{59,-5,42}, -{59,-5,43}, -{59,-5,44}, -{59,-5,45}, -{59,-5,46}, -{59,-5,47}, -{59,-5,48}, -{59,-5,49}, -{59,-5,50}, -{59,-5,51}, -{59,-5,52}, -{59,-5,53}, -{59,-5,54}, -{59,-5,55}, -{59,-5,56}, -{59,-5,57}, -{59,-5,58}, -{59,-5,59}, -{59,-5,60}, -{59,-5,61}, -{59,-5,62}, -{59,-5,63}, -{59,-4,-49}, -{59,-4,-48}, -{59,-4,-47}, -{59,-4,-46}, -{59,-4,-45}, -{59,-4,-44}, -{59,-4,-43}, -{59,-4,-42}, -{59,-4,-41}, -{59,-4,-40}, -{59,-4,-39}, -{59,-4,-38}, -{59,-4,-37}, -{59,-4,-36}, -{59,-4,-35}, -{59,-4,-34}, -{59,-4,-33}, -{59,-4,-32}, -{59,-4,-31}, -{59,-4,-30}, -{59,-4,-29}, -{59,-4,-28}, -{59,-4,-27}, -{59,-4,-26}, -{59,-4,-25}, -{59,-4,-24}, -{59,-4,-23}, -{59,-4,-22}, -{59,-4,-21}, -{59,-4,-20}, -{59,-4,-19}, -{59,-4,-18}, -{59,-4,-17}, -{59,-4,-16}, -{59,-4,-15}, -{59,-4,-14}, -{59,-4,-13}, -{59,-4,-12}, -{59,-4,-11}, -{59,-4,-10}, -{59,-4,-9}, -{59,-4,-8}, -{59,-4,-7}, -{59,-4,-6}, -{59,-4,-5}, -{59,-4,-4}, -{59,-4,-3}, -{59,-4,-2}, -{59,-4,-1}, -{59,-4,0}, -{59,-4,1}, -{59,-4,2}, -{59,-4,3}, -{59,-4,4}, -{59,-4,5}, -{59,-4,6}, -{59,-4,7}, -{59,-4,8}, -{59,-4,9}, -{59,-4,10}, -{59,-4,11}, -{59,-4,12}, -{59,-4,13}, -{59,-4,14}, -{59,-4,15}, -{59,-4,16}, -{59,-4,17}, -{59,-4,18}, -{59,-4,19}, -{59,-4,20}, -{59,-4,21}, -{59,-4,22}, -{59,-4,23}, -{59,-4,24}, -{59,-4,25}, -{59,-4,26}, -{59,-4,27}, -{59,-4,28}, -{59,-4,29}, -{59,-4,30}, -{59,-4,31}, -{59,-4,32}, -{59,-4,33}, -{59,-4,34}, -{59,-4,35}, -{59,-4,36}, -{59,-4,37}, -{59,-4,38}, -{59,-4,39}, -{59,-4,40}, -{59,-4,41}, -{59,-4,42}, -{59,-4,43}, -{59,-4,44}, -{59,-4,45}, -{59,-4,46}, -{59,-4,47}, -{59,-4,48}, -{59,-4,49}, -{59,-4,50}, -{59,-4,51}, -{59,-4,52}, -{59,-4,53}, -{59,-4,54}, -{59,-4,55}, -{59,-4,56}, -{59,-4,57}, -{59,-4,58}, -{59,-4,59}, -{59,-4,60}, -{59,-4,61}, -{59,-4,62}, -{59,-4,63}, -{59,-3,-50}, -{59,-3,-49}, -{59,-3,-48}, -{59,-3,-47}, -{59,-3,-46}, -{59,-3,-45}, -{59,-3,-44}, -{59,-3,-43}, -{59,-3,-42}, -{59,-3,-41}, -{59,-3,-40}, -{59,-3,-39}, -{59,-3,-38}, -{59,-3,-37}, -{59,-3,-36}, -{59,-3,-35}, -{59,-3,-34}, -{59,-3,-33}, -{59,-3,-32}, -{59,-3,-31}, -{59,-3,-30}, -{59,-3,-29}, -{59,-3,-28}, -{59,-3,-27}, -{59,-3,-26}, -{59,-3,-25}, -{59,-3,-24}, -{59,-3,-23}, -{59,-3,-22}, -{59,-3,-21}, -{59,-3,-20}, -{59,-3,-19}, -{59,-3,-18}, -{59,-3,-17}, -{59,-3,-16}, -{59,-3,-15}, -{59,-3,-14}, -{59,-3,-13}, -{59,-3,-12}, -{59,-3,-11}, -{59,-3,-10}, -{59,-3,-9}, -{59,-3,-8}, -{59,-3,-7}, -{59,-3,-6}, -{59,-3,-5}, -{59,-3,-4}, -{59,-3,-3}, -{59,-3,-2}, -{59,-3,-1}, -{59,-3,0}, -{59,-3,1}, -{59,-3,2}, -{59,-3,3}, -{59,-3,4}, -{59,-3,5}, -{59,-3,6}, -{59,-3,7}, -{59,-3,8}, -{59,-3,9}, -{59,-3,10}, -{59,-3,11}, -{59,-3,12}, -{59,-3,13}, -{59,-3,14}, -{59,-3,15}, -{59,-3,16}, -{59,-3,17}, -{59,-3,18}, -{59,-3,19}, -{59,-3,20}, -{59,-3,21}, -{59,-3,22}, -{59,-3,23}, -{59,-3,24}, -{59,-3,25}, -{59,-3,26}, -{59,-3,27}, -{59,-3,28}, -{59,-3,29}, -{59,-3,30}, -{59,-3,31}, -{59,-3,32}, -{59,-3,33}, -{59,-3,34}, -{59,-3,35}, -{59,-3,36}, -{59,-3,37}, -{59,-3,38}, -{59,-3,39}, -{59,-3,40}, -{59,-3,41}, -{59,-3,42}, -{59,-3,43}, -{59,-3,44}, -{59,-3,45}, -{59,-3,46}, -{59,-3,47}, -{59,-3,48}, -{59,-3,49}, -{59,-3,50}, -{59,-3,51}, -{59,-3,52}, -{59,-3,53}, -{59,-3,54}, -{59,-3,55}, -{59,-3,56}, -{59,-3,57}, -{59,-3,58}, -{59,-3,59}, -{59,-3,60}, -{59,-3,61}, -{59,-3,62}, -{59,-3,63}, -{59,-2,-51}, -{59,-2,-50}, -{59,-2,-49}, -{59,-2,-48}, -{59,-2,-47}, -{59,-2,-46}, -{59,-2,-45}, -{59,-2,-44}, -{59,-2,-43}, -{59,-2,-42}, -{59,-2,-41}, -{59,-2,-40}, -{59,-2,-39}, -{59,-2,-38}, -{59,-2,-37}, -{59,-2,-36}, -{59,-2,-35}, -{59,-2,-34}, -{59,-2,-33}, -{59,-2,-32}, -{59,-2,-31}, -{59,-2,-30}, -{59,-2,-29}, -{59,-2,-28}, -{59,-2,-27}, -{59,-2,-26}, -{59,-2,-25}, -{59,-2,-24}, -{59,-2,-23}, -{59,-2,-22}, -{59,-2,-21}, -{59,-2,-20}, -{59,-2,-19}, -{59,-2,-18}, -{59,-2,-17}, -{59,-2,-16}, -{59,-2,-15}, -{59,-2,-14}, -{59,-2,-13}, -{59,-2,-12}, -{59,-2,-11}, -{59,-2,-10}, -{59,-2,-9}, -{59,-2,-8}, -{59,-2,-7}, -{59,-2,-6}, -{59,-2,-5}, -{59,-2,-4}, -{59,-2,-3}, -{59,-2,-2}, -{59,-2,-1}, -{59,-2,0}, -{59,-2,1}, -{59,-2,2}, -{59,-2,3}, -{59,-2,4}, -{59,-2,5}, -{59,-2,6}, -{59,-2,7}, -{59,-2,8}, -{59,-2,9}, -{59,-2,10}, -{59,-2,11}, -{59,-2,12}, -{59,-2,13}, -{59,-2,14}, -{59,-2,15}, -{59,-2,16}, -{59,-2,17}, -{59,-2,18}, -{59,-2,19}, -{59,-2,20}, -{59,-2,21}, -{59,-2,22}, -{59,-2,23}, -{59,-2,24}, -{59,-2,25}, -{59,-2,26}, -{59,-2,27}, -{59,-2,28}, -{59,-2,29}, -{59,-2,30}, -{59,-2,31}, -{59,-2,32}, -{59,-2,33}, -{59,-2,34}, -{59,-2,35}, -{59,-2,36}, -{59,-2,37}, -{59,-2,38}, -{59,-2,39}, -{59,-2,40}, -{59,-2,41}, -{59,-2,42}, -{59,-2,43}, -{59,-2,44}, -{59,-2,45}, -{59,-2,46}, -{59,-2,47}, -{59,-2,48}, -{59,-2,49}, -{59,-2,50}, -{59,-2,51}, -{59,-2,52}, -{59,-2,53}, -{59,-2,54}, -{59,-2,55}, -{59,-2,56}, -{59,-2,57}, -{59,-2,58}, -{59,-2,59}, -{59,-2,60}, -{59,-2,61}, -{59,-2,62}, -{59,-2,63}, -{59,-1,-52}, -{59,-1,-51}, -{59,-1,-50}, -{59,-1,-49}, -{59,-1,-48}, -{59,-1,-47}, -{59,-1,-46}, -{59,-1,-45}, -{59,-1,-44}, -{59,-1,-43}, -{59,-1,-42}, -{59,-1,-41}, -{59,-1,-40}, -{59,-1,-39}, -{59,-1,-38}, -{59,-1,-37}, -{59,-1,-36}, -{59,-1,-35}, -{59,-1,-34}, -{59,-1,-33}, -{59,-1,-32}, -{59,-1,-31}, -{59,-1,-30}, -{59,-1,-29}, -{59,-1,-28}, -{59,-1,-27}, -{59,-1,-26}, -{59,-1,-25}, -{59,-1,-24}, -{59,-1,-23}, -{59,-1,-22}, -{59,-1,-21}, -{59,-1,-20}, -{59,-1,-19}, -{59,-1,-18}, -{59,-1,-17}, -{59,-1,-16}, -{59,-1,-15}, -{59,-1,-14}, -{59,-1,-13}, -{59,-1,-12}, -{59,-1,-11}, -{59,-1,-10}, -{59,-1,-9}, -{59,-1,-8}, -{59,-1,-7}, -{59,-1,-6}, -{59,-1,-5}, -{59,-1,-4}, -{59,-1,-3}, -{59,-1,-2}, -{59,-1,-1}, -{59,-1,0}, -{59,-1,1}, -{59,-1,2}, -{59,-1,3}, -{59,-1,4}, -{59,-1,5}, -{59,-1,6}, -{59,-1,7}, -{59,-1,8}, -{59,-1,9}, -{59,-1,10}, -{59,-1,11}, -{59,-1,12}, -{59,-1,13}, -{59,-1,14}, -{59,-1,15}, -{59,-1,16}, -{59,-1,17}, -{59,-1,18}, -{59,-1,19}, -{59,-1,20}, -{59,-1,21}, -{59,-1,22}, -{59,-1,23}, -{59,-1,24}, -{59,-1,25}, -{59,-1,26}, -{59,-1,27}, -{59,-1,28}, -{59,-1,29}, -{59,-1,30}, -{59,-1,31}, -{59,-1,32}, -{59,-1,33}, -{59,-1,34}, -{59,-1,35}, -{59,-1,36}, -{59,-1,37}, -{59,-1,38}, -{59,-1,39}, -{59,-1,40}, -{59,-1,41}, -{59,-1,42}, -{59,-1,43}, -{59,-1,44}, -{59,-1,45}, -{59,-1,46}, -{59,-1,47}, -{59,-1,48}, -{59,-1,49}, -{59,-1,50}, -{59,-1,51}, -{59,-1,52}, -{59,-1,53}, -{59,-1,54}, -{59,-1,55}, -{59,-1,56}, -{59,-1,57}, -{59,-1,58}, -{59,-1,59}, -{59,-1,60}, -{59,-1,61}, -{59,-1,62}, -{59,-1,63}, -{59,0,-54}, -{59,0,-53}, -{59,0,-52}, -{59,0,-51}, -{59,0,-50}, -{59,0,-49}, -{59,0,-48}, -{59,0,-47}, -{59,0,-46}, -{59,0,-45}, -{59,0,-44}, -{59,0,-43}, -{59,0,-42}, -{59,0,-41}, -{59,0,-40}, -{59,0,-39}, -{59,0,-38}, -{59,0,-37}, -{59,0,-36}, -{59,0,-35}, -{59,0,-34}, -{59,0,-33}, -{59,0,-32}, -{59,0,-31}, -{59,0,-30}, -{59,0,-29}, -{59,0,-28}, -{59,0,-27}, -{59,0,-26}, -{59,0,-25}, -{59,0,-24}, -{59,0,-23}, -{59,0,-22}, -{59,0,-21}, -{59,0,-20}, -{59,0,-19}, -{59,0,-18}, -{59,0,-17}, -{59,0,-16}, -{59,0,-15}, -{59,0,-14}, -{59,0,-13}, -{59,0,-12}, -{59,0,-11}, -{59,0,-10}, -{59,0,-9}, -{59,0,-8}, -{59,0,-7}, -{59,0,-6}, -{59,0,-5}, -{59,0,-4}, -{59,0,-3}, -{59,0,-2}, -{59,0,-1}, -{59,0,0}, -{59,0,1}, -{59,0,2}, -{59,0,3}, -{59,0,4}, -{59,0,5}, -{59,0,6}, -{59,0,7}, -{59,0,8}, -{59,0,9}, -{59,0,10}, -{59,0,11}, -{59,0,12}, -{59,0,13}, -{59,0,14}, -{59,0,15}, -{59,0,16}, -{59,0,17}, -{59,0,18}, -{59,0,19}, -{59,0,20}, -{59,0,21}, -{59,0,22}, -{59,0,23}, -{59,0,24}, -{59,0,25}, -{59,0,26}, -{59,0,27}, -{59,0,28}, -{59,0,29}, -{59,0,30}, -{59,0,31}, -{59,0,32}, -{59,0,33}, -{59,0,34}, -{59,0,35}, -{59,0,36}, -{59,0,37}, -{59,0,38}, -{59,0,39}, -{59,0,40}, -{59,0,41}, -{59,0,42}, -{59,0,43}, -{59,0,44}, -{59,0,45}, -{59,0,46}, -{59,0,47}, -{59,0,48}, -{59,0,49}, -{59,0,50}, -{59,0,51}, -{59,0,52}, -{59,0,53}, -{59,0,54}, -{59,0,55}, -{59,0,56}, -{59,0,57}, -{59,0,58}, -{59,0,59}, -{59,0,60}, -{59,0,61}, -{59,0,62}, -{59,0,63}, -{59,1,-55}, -{59,1,-54}, -{59,1,-53}, -{59,1,-52}, -{59,1,-51}, -{59,1,-50}, -{59,1,-49}, -{59,1,-48}, -{59,1,-47}, -{59,1,-46}, -{59,1,-45}, -{59,1,-44}, -{59,1,-43}, -{59,1,-42}, -{59,1,-41}, -{59,1,-40}, -{59,1,-39}, -{59,1,-38}, -{59,1,-37}, -{59,1,-36}, -{59,1,-35}, -{59,1,-34}, -{59,1,-33}, -{59,1,-32}, -{59,1,-31}, -{59,1,-30}, -{59,1,-29}, -{59,1,-28}, -{59,1,-27}, -{59,1,-26}, -{59,1,-25}, -{59,1,-24}, -{59,1,-23}, -{59,1,-22}, -{59,1,-21}, -{59,1,-20}, -{59,1,-19}, -{59,1,-18}, -{59,1,-17}, -{59,1,-16}, -{59,1,-15}, -{59,1,-14}, -{59,1,-13}, -{59,1,-12}, -{59,1,-11}, -{59,1,-10}, -{59,1,-9}, -{59,1,-8}, -{59,1,-7}, -{59,1,-6}, -{59,1,-5}, -{59,1,-4}, -{59,1,-3}, -{59,1,-2}, -{59,1,-1}, -{59,1,0}, -{59,1,1}, -{59,1,2}, -{59,1,3}, -{59,1,4}, -{59,1,5}, -{59,1,6}, -{59,1,7}, -{59,1,8}, -{59,1,9}, -{59,1,10}, -{59,1,11}, -{59,1,12}, -{59,1,13}, -{59,1,14}, -{59,1,15}, -{59,1,16}, -{59,1,17}, -{59,1,18}, -{59,1,19}, -{59,1,20}, -{59,1,21}, -{59,1,22}, -{59,1,23}, -{59,1,24}, -{59,1,25}, -{59,1,26}, -{59,1,27}, -{59,1,28}, -{59,1,29}, -{59,1,30}, -{59,1,31}, -{59,1,32}, -{59,1,33}, -{59,1,34}, -{59,1,35}, -{59,1,36}, -{59,1,37}, -{59,1,38}, -{59,1,39}, -{59,1,40}, -{59,1,41}, -{59,1,42}, -{59,1,43}, -{59,1,44}, -{59,1,45}, -{59,1,46}, -{59,1,47}, -{59,1,48}, -{59,1,49}, -{59,1,50}, -{59,1,51}, -{59,1,52}, -{59,1,53}, -{59,1,54}, -{59,1,55}, -{59,1,56}, -{59,1,57}, -{59,1,58}, -{59,1,59}, -{59,1,60}, -{59,1,61}, -{59,1,62}, -{59,1,63}, -{59,2,-56}, -{59,2,-55}, -{59,2,-54}, -{59,2,-53}, -{59,2,-52}, -{59,2,-51}, -{59,2,-50}, -{59,2,-49}, -{59,2,-48}, -{59,2,-47}, -{59,2,-46}, -{59,2,-45}, -{59,2,-44}, -{59,2,-43}, -{59,2,-42}, -{59,2,-41}, -{59,2,-40}, -{59,2,-39}, -{59,2,-38}, -{59,2,-37}, -{59,2,-36}, -{59,2,-35}, -{59,2,-34}, -{59,2,-33}, -{59,2,-32}, -{59,2,-31}, -{59,2,-30}, -{59,2,-29}, -{59,2,-28}, -{59,2,-27}, -{59,2,-26}, -{59,2,-25}, -{59,2,-24}, -{59,2,-23}, -{59,2,-22}, -{59,2,-21}, -{59,2,-20}, -{59,2,-19}, -{59,2,-18}, -{59,2,-17}, -{59,2,-16}, -{59,2,-15}, -{59,2,-14}, -{59,2,-13}, -{59,2,-12}, -{59,2,-11}, -{59,2,-10}, -{59,2,-9}, -{59,2,-8}, -{59,2,-7}, -{59,2,-6}, -{59,2,-5}, -{59,2,-4}, -{59,2,-3}, -{59,2,-2}, -{59,2,-1}, -{59,2,0}, -{59,2,1}, -{59,2,2}, -{59,2,3}, -{59,2,4}, -{59,2,5}, -{59,2,6}, -{59,2,7}, -{59,2,8}, -{59,2,9}, -{59,2,10}, -{59,2,11}, -{59,2,12}, -{59,2,13}, -{59,2,14}, -{59,2,15}, -{59,2,16}, -{59,2,17}, -{59,2,18}, -{59,2,19}, -{59,2,20}, -{59,2,21}, -{59,2,22}, -{59,2,23}, -{59,2,24}, -{59,2,25}, -{59,2,26}, -{59,2,27}, -{59,2,28}, -{59,2,29}, -{59,2,30}, -{59,2,31}, -{59,2,32}, -{59,2,33}, -{59,2,34}, -{59,2,35}, -{59,2,36}, -{59,2,37}, -{59,2,38}, -{59,2,39}, -{59,2,40}, -{59,2,41}, -{59,2,42}, -{59,2,43}, -{59,2,44}, -{59,2,45}, -{59,2,46}, -{59,2,47}, -{59,2,48}, -{59,2,49}, -{59,2,50}, -{59,2,51}, -{59,2,52}, -{59,2,53}, -{59,2,54}, -{59,2,55}, -{59,2,56}, -{59,2,57}, -{59,2,58}, -{59,2,59}, -{59,2,60}, -{59,2,61}, -{59,2,62}, -{59,2,63}, -{59,3,-57}, -{59,3,-56}, -{59,3,-55}, -{59,3,-54}, -{59,3,-53}, -{59,3,-52}, -{59,3,-51}, -{59,3,-50}, -{59,3,-49}, -{59,3,-48}, -{59,3,-47}, -{59,3,-46}, -{59,3,-45}, -{59,3,-44}, -{59,3,-43}, -{59,3,-42}, -{59,3,-41}, -{59,3,-40}, -{59,3,-39}, -{59,3,-38}, -{59,3,-37}, -{59,3,-36}, -{59,3,-35}, -{59,3,-34}, -{59,3,-33}, -{59,3,-32}, -{59,3,-31}, -{59,3,-30}, -{59,3,-29}, -{59,3,-28}, -{59,3,-27}, -{59,3,-26}, -{59,3,-25}, -{59,3,-24}, -{59,3,-23}, -{59,3,-22}, -{59,3,-21}, -{59,3,-20}, -{59,3,-19}, -{59,3,-18}, -{59,3,-17}, -{59,3,-16}, -{59,3,-15}, -{59,3,-14}, -{59,3,-13}, -{59,3,-12}, -{59,3,-11}, -{59,3,-10}, -{59,3,-9}, -{59,3,-8}, -{59,3,-7}, -{59,3,-6}, -{59,3,-5}, -{59,3,-4}, -{59,3,-3}, -{59,3,-2}, -{59,3,-1}, -{59,3,0}, -{59,3,1}, -{59,3,2}, -{59,3,3}, -{59,3,4}, -{59,3,5}, -{59,3,6}, -{59,3,7}, -{59,3,8}, -{59,3,9}, -{59,3,10}, -{59,3,11}, -{59,3,12}, -{59,3,13}, -{59,3,14}, -{59,3,15}, -{59,3,16}, -{59,3,17}, -{59,3,18}, -{59,3,19}, -{59,3,20}, -{59,3,21}, -{59,3,22}, -{59,3,23}, -{59,3,24}, -{59,3,25}, -{59,3,26}, -{59,3,27}, -{59,3,28}, -{59,3,29}, -{59,3,30}, -{59,3,31}, -{59,3,32}, -{59,3,33}, -{59,3,34}, -{59,3,35}, -{59,3,36}, -{59,3,37}, -{59,3,38}, -{59,3,39}, -{59,3,40}, -{59,3,41}, -{59,3,42}, -{59,3,43}, -{59,3,44}, -{59,3,45}, -{59,3,46}, -{59,3,47}, -{59,3,48}, -{59,3,49}, -{59,3,50}, -{59,3,51}, -{59,3,52}, -{59,3,53}, -{59,3,54}, -{59,3,55}, -{59,3,56}, -{59,3,57}, -{59,3,58}, -{59,3,59}, -{59,3,60}, -{59,3,61}, -{59,3,62}, -{59,3,63}, -{59,4,-58}, -{59,4,-57}, -{59,4,-56}, -{59,4,-55}, -{59,4,-54}, -{59,4,-53}, -{59,4,-52}, -{59,4,-51}, -{59,4,-50}, -{59,4,-49}, -{59,4,-48}, -{59,4,-47}, -{59,4,-46}, -{59,4,-45}, -{59,4,-44}, -{59,4,-43}, -{59,4,-42}, -{59,4,-41}, -{59,4,-40}, -{59,4,-39}, -{59,4,-38}, -{59,4,-37}, -{59,4,-36}, -{59,4,-35}, -{59,4,-34}, -{59,4,-33}, -{59,4,-32}, -{59,4,-31}, -{59,4,-30}, -{59,4,-29}, -{59,4,-28}, -{59,4,-27}, -{59,4,-26}, -{59,4,-25}, -{59,4,-24}, -{59,4,-23}, -{59,4,-22}, -{59,4,-21}, -{59,4,-20}, -{59,4,-19}, -{59,4,-18}, -{59,4,-17}, -{59,4,-16}, -{59,4,-15}, -{59,4,-14}, -{59,4,-13}, -{59,4,-12}, -{59,4,-11}, -{59,4,-10}, -{59,4,-9}, -{59,4,-8}, -{59,4,-7}, -{59,4,-6}, -{59,4,-5}, -{59,4,-4}, -{59,4,-3}, -{59,4,-2}, -{59,4,-1}, -{59,4,0}, -{59,4,1}, -{59,4,2}, -{59,4,3}, -{59,4,4}, -{59,4,5}, -{59,4,6}, -{59,4,7}, -{59,4,8}, -{59,4,9}, -{59,4,10}, -{59,4,11}, -{59,4,12}, -{59,4,13}, -{59,4,14}, -{59,4,15}, -{59,4,16}, -{59,4,17}, -{59,4,18}, -{59,4,19}, -{59,4,20}, -{59,4,21}, -{59,4,22}, -{59,4,23}, -{59,4,24}, -{59,4,25}, -{59,4,26}, -{59,4,27}, -{59,4,28}, -{59,4,29}, -{59,4,30}, -{59,4,31}, -{59,4,32}, -{59,4,33}, -{59,4,34}, -{59,4,35}, -{59,4,36}, -{59,4,37}, -{59,4,38}, -{59,4,39}, -{59,4,40}, -{59,4,41}, -{59,4,42}, -{59,4,43}, -{59,4,44}, -{59,4,45}, -{59,4,46}, -{59,4,47}, -{59,4,48}, -{59,4,49}, -{59,4,50}, -{59,4,51}, -{59,4,52}, -{59,4,53}, -{59,4,54}, -{59,4,55}, -{59,4,56}, -{59,4,57}, -{59,4,58}, -{59,4,59}, -{59,4,60}, -{59,4,61}, -{59,4,62}, -{59,4,63}, -{59,4,64}, -{59,5,-59}, -{59,5,-58}, -{59,5,-57}, -{59,5,-56}, -{59,5,-55}, -{59,5,-54}, -{59,5,-53}, -{59,5,-52}, -{59,5,-51}, -{59,5,-50}, -{59,5,-49}, -{59,5,-48}, -{59,5,-47}, -{59,5,-46}, -{59,5,-45}, -{59,5,-44}, -{59,5,-43}, -{59,5,-42}, -{59,5,-41}, -{59,5,-40}, -{59,5,-39}, -{59,5,-38}, -{59,5,-37}, -{59,5,-36}, -{59,5,-35}, -{59,5,-34}, -{59,5,-33}, -{59,5,-32}, -{59,5,-31}, -{59,5,-30}, -{59,5,-29}, -{59,5,-28}, -{59,5,-27}, -{59,5,-26}, -{59,5,-25}, -{59,5,-24}, -{59,5,-23}, -{59,5,-22}, -{59,5,-21}, -{59,5,-20}, -{59,5,-19}, -{59,5,-18}, -{59,5,-17}, -{59,5,-16}, -{59,5,-15}, -{59,5,-14}, -{59,5,-13}, -{59,5,-12}, -{59,5,-11}, -{59,5,-10}, -{59,5,-9}, -{59,5,-8}, -{59,5,-7}, -{59,5,-6}, -{59,5,-5}, -{59,5,-4}, -{59,5,-3}, -{59,5,-2}, -{59,5,-1}, -{59,5,0}, -{59,5,1}, -{59,5,2}, -{59,5,3}, -{59,5,4}, -{59,5,5}, -{59,5,6}, -{59,5,7}, -{59,5,8}, -{59,5,9}, -{59,5,10}, -{59,5,11}, -{59,5,12}, -{59,5,13}, -{59,5,14}, -{59,5,15}, -{59,5,16}, -{59,5,17}, -{59,5,18}, -{59,5,19}, -{59,5,20}, -{59,5,21}, -{59,5,22}, -{59,5,23}, -{59,5,24}, -{59,5,25}, -{59,5,26}, -{59,5,27}, -{59,5,28}, -{59,5,29}, -{59,5,30}, -{59,5,31}, -{59,5,32}, -{59,5,33}, -{59,5,34}, -{59,5,35}, -{59,5,36}, -{59,5,37}, -{59,5,38}, -{59,5,39}, -{59,5,40}, -{59,5,41}, -{59,5,42}, -{59,5,43}, -{59,5,44}, -{59,5,45}, -{59,5,46}, -{59,5,47}, -{59,5,48}, -{59,5,49}, -{59,5,50}, -{59,5,51}, -{59,5,52}, -{59,5,53}, -{59,5,54}, -{59,5,55}, -{59,5,56}, -{59,5,57}, -{59,5,58}, -{59,5,59}, -{59,5,60}, -{59,5,61}, -{59,5,62}, -{59,5,63}, -{59,5,64}, -{59,6,-60}, -{59,6,-59}, -{59,6,-58}, -{59,6,-57}, -{59,6,-56}, -{59,6,-55}, -{59,6,-54}, -{59,6,-53}, -{59,6,-52}, -{59,6,-51}, -{59,6,-50}, -{59,6,-49}, -{59,6,-48}, -{59,6,-47}, -{59,6,-46}, -{59,6,-45}, -{59,6,-44}, -{59,6,-43}, -{59,6,-42}, -{59,6,-41}, -{59,6,-40}, -{59,6,-39}, -{59,6,-38}, -{59,6,-37}, -{59,6,-36}, -{59,6,-35}, -{59,6,-34}, -{59,6,-33}, -{59,6,-32}, -{59,6,-31}, -{59,6,-30}, -{59,6,-29}, -{59,6,-28}, -{59,6,-27}, -{59,6,-26}, -{59,6,-25}, -{59,6,-24}, -{59,6,-23}, -{59,6,-22}, -{59,6,-21}, -{59,6,-20}, -{59,6,-19}, -{59,6,-18}, -{59,6,-17}, -{59,6,-16}, -{59,6,-15}, -{59,6,-14}, -{59,6,-13}, -{59,6,-12}, -{59,6,-11}, -{59,6,-10}, -{59,6,-9}, -{59,6,-8}, -{59,6,-7}, -{59,6,-6}, -{59,6,-5}, -{59,6,-4}, -{59,6,-3}, -{59,6,-2}, -{59,6,-1}, -{59,6,0}, -{59,6,1}, -{59,6,2}, -{59,6,3}, -{59,6,4}, -{59,6,5}, -{59,6,6}, -{59,6,7}, -{59,6,8}, -{59,6,9}, -{59,6,10}, -{59,6,11}, -{59,6,12}, -{59,6,13}, -{59,6,14}, -{59,6,15}, -{59,6,16}, -{59,6,17}, -{59,6,18}, -{59,6,19}, -{59,6,20}, -{59,6,21}, -{59,6,22}, -{59,6,23}, -{59,6,24}, -{59,6,25}, -{59,6,26}, -{59,6,27}, -{59,6,28}, -{59,6,29}, -{59,6,30}, -{59,6,31}, -{59,6,32}, -{59,6,33}, -{59,6,34}, -{59,6,35}, -{59,6,36}, -{59,6,37}, -{59,6,38}, -{59,6,39}, -{59,6,40}, -{59,6,41}, -{59,6,42}, -{59,6,43}, -{59,6,44}, -{59,6,45}, -{59,6,46}, -{59,6,47}, -{59,6,48}, -{59,6,49}, -{59,6,50}, -{59,6,51}, -{59,6,52}, -{59,6,53}, -{59,6,54}, -{59,6,55}, -{59,6,56}, -{59,6,57}, -{59,6,58}, -{59,6,59}, -{59,6,60}, -{59,6,61}, -{59,6,62}, -{59,6,63}, -{59,6,64}, -{59,7,-61}, -{59,7,-60}, -{59,7,-59}, -{59,7,-58}, -{59,7,-57}, -{59,7,-56}, -{59,7,-55}, -{59,7,-54}, -{59,7,-53}, -{59,7,-52}, -{59,7,-51}, -{59,7,-50}, -{59,7,-49}, -{59,7,-48}, -{59,7,-47}, -{59,7,-46}, -{59,7,-45}, -{59,7,-44}, -{59,7,-43}, -{59,7,-42}, -{59,7,-41}, -{59,7,-40}, -{59,7,-39}, -{59,7,-38}, -{59,7,-37}, -{59,7,-36}, -{59,7,-35}, -{59,7,-34}, -{59,7,-33}, -{59,7,-32}, -{59,7,-31}, -{59,7,-30}, -{59,7,-29}, -{59,7,-28}, -{59,7,-27}, -{59,7,-26}, -{59,7,-25}, -{59,7,-24}, -{59,7,-23}, -{59,7,-22}, -{59,7,-21}, -{59,7,-20}, -{59,7,-19}, -{59,7,-18}, -{59,7,-17}, -{59,7,-16}, -{59,7,-15}, -{59,7,-14}, -{59,7,-13}, -{59,7,-12}, -{59,7,-11}, -{59,7,-10}, -{59,7,-9}, -{59,7,-8}, -{59,7,-7}, -{59,7,-6}, -{59,7,-5}, -{59,7,-4}, -{59,7,-3}, -{59,7,-2}, -{59,7,-1}, -{59,7,0}, -{59,7,1}, -{59,7,2}, -{59,7,3}, -{59,7,4}, -{59,7,5}, -{59,7,6}, -{59,7,7}, -{59,7,8}, -{59,7,9}, -{59,7,10}, -{59,7,11}, -{59,7,12}, -{59,7,13}, -{59,7,14}, -{59,7,15}, -{59,7,16}, -{59,7,17}, -{59,7,18}, -{59,7,19}, -{59,7,20}, -{59,7,21}, -{59,7,22}, -{59,7,23}, -{59,7,24}, -{59,7,25}, -{59,7,26}, -{59,7,27}, -{59,7,28}, -{59,7,29}, -{59,7,30}, -{59,7,31}, -{59,7,32}, -{59,7,33}, -{59,7,34}, -{59,7,35}, -{59,7,36}, -{59,7,37}, -{59,7,38}, -{59,7,39}, -{59,7,40}, -{59,7,41}, -{59,7,42}, -{59,7,43}, -{59,7,44}, -{59,7,45}, -{59,7,46}, -{59,7,47}, -{59,7,48}, -{59,7,49}, -{59,7,50}, -{59,7,51}, -{59,7,52}, -{59,7,53}, -{59,7,54}, -{59,7,55}, -{59,7,56}, -{59,7,57}, -{59,7,58}, -{59,7,59}, -{59,7,60}, -{59,7,61}, -{59,7,62}, -{59,7,63}, -{59,7,64}, -{59,8,-62}, -{59,8,-61}, -{59,8,-60}, -{59,8,-59}, -{59,8,-58}, -{59,8,-57}, -{59,8,-56}, -{59,8,-55}, -{59,8,-54}, -{59,8,-53}, -{59,8,-52}, -{59,8,-51}, -{59,8,-50}, -{59,8,-49}, -{59,8,-48}, -{59,8,-47}, -{59,8,-46}, -{59,8,-45}, -{59,8,-44}, -{59,8,-43}, -{59,8,-42}, -{59,8,-41}, -{59,8,-40}, -{59,8,-39}, -{59,8,-38}, -{59,8,-37}, -{59,8,-36}, -{59,8,-35}, -{59,8,-34}, -{59,8,-33}, -{59,8,-32}, -{59,8,-31}, -{59,8,-30}, -{59,8,-29}, -{59,8,-28}, -{59,8,-27}, -{59,8,-26}, -{59,8,-25}, -{59,8,-24}, -{59,8,-23}, -{59,8,-22}, -{59,8,-21}, -{59,8,-20}, -{59,8,-19}, -{59,8,-18}, -{59,8,-17}, -{59,8,-16}, -{59,8,-15}, -{59,8,-14}, -{59,8,-13}, -{59,8,-12}, -{59,8,-11}, -{59,8,-10}, -{59,8,-9}, -{59,8,-8}, -{59,8,-7}, -{59,8,-6}, -{59,8,-5}, -{59,8,-4}, -{59,8,-3}, -{59,8,-2}, -{59,8,-1}, -{59,8,0}, -{59,8,1}, -{59,8,2}, -{59,8,3}, -{59,8,4}, -{59,8,5}, -{59,8,6}, -{59,8,7}, -{59,8,8}, -{59,8,9}, -{59,8,10}, -{59,8,11}, -{59,8,12}, -{59,8,13}, -{59,8,14}, -{59,8,15}, -{59,8,16}, -{59,8,17}, -{59,8,18}, -{59,8,19}, -{59,8,20}, -{59,8,21}, -{59,8,22}, -{59,8,23}, -{59,8,24}, -{59,8,25}, -{59,8,26}, -{59,8,27}, -{59,8,28}, -{59,8,29}, -{59,8,30}, -{59,8,31}, -{59,8,32}, -{59,8,33}, -{59,8,34}, -{59,8,35}, -{59,8,36}, -{59,8,37}, -{59,8,38}, -{59,8,39}, -{59,8,40}, -{59,8,41}, -{59,8,42}, -{59,8,43}, -{59,8,44}, -{59,8,45}, -{59,8,46}, -{59,8,47}, -{59,8,48}, -{59,8,49}, -{59,8,50}, -{59,8,51}, -{59,8,52}, -{59,8,53}, -{59,8,54}, -{59,8,55}, -{59,8,56}, -{59,8,57}, -{59,8,58}, -{59,8,59}, -{59,8,60}, -{59,8,61}, -{59,8,62}, -{59,8,63}, -{59,8,64}, -{59,9,-63}, -{59,9,-62}, -{59,9,-61}, -{59,9,-60}, -{59,9,-59}, -{59,9,-58}, -{59,9,-57}, -{59,9,-56}, -{59,9,-55}, -{59,9,-54}, -{59,9,-53}, -{59,9,-52}, -{59,9,-51}, -{59,9,-50}, -{59,9,-49}, -{59,9,-48}, -{59,9,-47}, -{59,9,-46}, -{59,9,-45}, -{59,9,-44}, -{59,9,-43}, -{59,9,-42}, -{59,9,-41}, -{59,9,-40}, -{59,9,-39}, -{59,9,-38}, -{59,9,-37}, -{59,9,-36}, -{59,9,-35}, -{59,9,-34}, -{59,9,-33}, -{59,9,-32}, -{59,9,-31}, -{59,9,-30}, -{59,9,-29}, -{59,9,-28}, -{59,9,-27}, -{59,9,-26}, -{59,9,-25}, -{59,9,-24}, -{59,9,-23}, -{59,9,-22}, -{59,9,-21}, -{59,9,-20}, -{59,9,-19}, -{59,9,-18}, -{59,9,-17}, -{59,9,-16}, -{59,9,-15}, -{59,9,-14}, -{59,9,-13}, -{59,9,-12}, -{59,9,-11}, -{59,9,-10}, -{59,9,-9}, -{59,9,-8}, -{59,9,-7}, -{59,9,-6}, -{59,9,-5}, -{59,9,-4}, -{59,9,-3}, -{59,9,-2}, -{59,9,-1}, -{59,9,0}, -{59,9,1}, -{59,9,2}, -{59,9,3}, -{59,9,4}, -{59,9,5}, -{59,9,6}, -{59,9,7}, -{59,9,8}, -{59,9,9}, -{59,9,10}, -{59,9,11}, -{59,9,12}, -{59,9,13}, -{59,9,14}, -{59,9,15}, -{59,9,16}, -{59,9,17}, -{59,9,18}, -{59,9,19}, -{59,9,20}, -{59,9,21}, -{59,9,22}, -{59,9,23}, -{59,9,24}, -{59,9,25}, -{59,9,26}, -{59,9,27}, -{59,9,28}, -{59,9,29}, -{59,9,30}, -{59,9,31}, -{59,9,32}, -{59,9,33}, -{59,9,34}, -{59,9,35}, -{59,9,36}, -{59,9,37}, -{59,9,38}, -{59,9,39}, -{59,9,40}, -{59,9,41}, -{59,9,42}, -{59,9,43}, -{59,9,44}, -{59,9,45}, -{59,9,46}, -{59,9,47}, -{59,9,48}, -{59,9,49}, -{59,9,50}, -{59,9,51}, -{59,9,52}, -{59,9,53}, -{59,9,54}, -{59,9,55}, -{59,9,56}, -{59,9,57}, -{59,9,58}, -{59,9,59}, -{59,9,60}, -{59,9,61}, -{59,9,62}, -{59,9,63}, -{59,9,64}, -{59,10,-64}, -{59,10,-63}, -{59,10,-62}, -{59,10,-61}, -{59,10,-60}, -{59,10,-59}, -{59,10,-58}, -{59,10,-57}, -{59,10,-56}, -{59,10,-55}, -{59,10,-54}, -{59,10,-53}, -{59,10,-52}, -{59,10,-51}, -{59,10,-50}, -{59,10,-49}, -{59,10,-48}, -{59,10,-47}, -{59,10,-46}, -{59,10,-45}, -{59,10,-44}, -{59,10,-43}, -{59,10,-42}, -{59,10,-41}, -{59,10,-40}, -{59,10,-39}, -{59,10,-38}, -{59,10,-37}, -{59,10,-36}, -{59,10,-35}, -{59,10,-34}, -{59,10,-33}, -{59,10,-32}, -{59,10,-31}, -{59,10,-30}, -{59,10,-29}, -{59,10,-28}, -{59,10,-27}, -{59,10,-26}, -{59,10,-25}, -{59,10,-24}, -{59,10,-23}, -{59,10,-22}, -{59,10,-21}, -{59,10,-20}, -{59,10,-19}, -{59,10,-18}, -{59,10,-17}, -{59,10,-16}, -{59,10,-15}, -{59,10,-14}, -{59,10,-13}, -{59,10,-12}, -{59,10,-11}, -{59,10,-10}, -{59,10,-9}, -{59,10,-8}, -{59,10,-7}, -{59,10,-6}, -{59,10,-5}, -{59,10,-4}, -{59,10,-3}, -{59,10,-2}, -{59,10,-1}, -{59,10,0}, -{59,10,1}, -{59,10,2}, -{59,10,3}, -{59,10,4}, -{59,10,5}, -{59,10,6}, -{59,10,7}, -{59,10,8}, -{59,10,9}, -{59,10,10}, -{59,10,11}, -{59,10,12}, -{59,10,13}, -{59,10,14}, -{59,10,15}, -{59,10,16}, -{59,10,17}, -{59,10,18}, -{59,10,19}, -{59,10,20}, -{59,10,21}, -{59,10,22}, -{59,10,23}, -{59,10,24}, -{59,10,25}, -{59,10,26}, -{59,10,27}, -{59,10,28}, -{59,10,29}, -{59,10,30}, -{59,10,31}, -{59,10,32}, -{59,10,33}, -{59,10,34}, -{59,10,35}, -{59,10,36}, -{59,10,37}, -{59,10,38}, -{59,10,39}, -{59,10,40}, -{59,10,41}, -{59,10,42}, -{59,10,43}, -{59,10,44}, -{59,10,45}, -{59,10,46}, -{59,10,47}, -{59,10,48}, -{59,10,49}, -{59,10,50}, -{59,10,51}, -{59,10,52}, -{59,10,53}, -{59,10,54}, -{59,10,55}, -{59,10,56}, -{59,10,57}, -{59,10,58}, -{59,10,59}, -{59,10,60}, -{59,10,61}, -{59,10,62}, -{59,10,63}, -{59,10,64}, -{59,11,-64}, -{59,11,-63}, -{59,11,-62}, -{59,11,-61}, -{59,11,-60}, -{59,11,-59}, -{59,11,-58}, -{59,11,-57}, -{59,11,-56}, -{59,11,-55}, -{59,11,-54}, -{59,11,-53}, -{59,11,-52}, -{59,11,-51}, -{59,11,-50}, -{59,11,-49}, -{59,11,-48}, -{59,11,-47}, -{59,11,-46}, -{59,11,-45}, -{59,11,-44}, -{59,11,-43}, -{59,11,-42}, -{59,11,-41}, -{59,11,-40}, -{59,11,-39}, -{59,11,-38}, -{59,11,-37}, -{59,11,-36}, -{59,11,-35}, -{59,11,-34}, -{59,11,-33}, -{59,11,-32}, -{59,11,-31}, -{59,11,-30}, -{59,11,-29}, -{59,11,-28}, -{59,11,-27}, -{59,11,-26}, -{59,11,-25}, -{59,11,-24}, -{59,11,-23}, -{59,11,-22}, -{59,11,-21}, -{59,11,-20}, -{59,11,-19}, -{59,11,-18}, -{59,11,-17}, -{59,11,-16}, -{59,11,-15}, -{59,11,-14}, -{59,11,-13}, -{59,11,-12}, -{59,11,-11}, -{59,11,-10}, -{59,11,-9}, -{59,11,-8}, -{59,11,-7}, -{59,11,-6}, -{59,11,-5}, -{59,11,-4}, -{59,11,-3}, -{59,11,-2}, -{59,11,-1}, -{59,11,0}, -{59,11,1}, -{59,11,2}, -{59,11,3}, -{59,11,4}, -{59,11,5}, -{59,11,6}, -{59,11,7}, -{59,11,8}, -{59,11,9}, -{59,11,10}, -{59,11,11}, -{59,11,12}, -{59,11,13}, -{59,11,14}, -{59,11,15}, -{59,11,16}, -{59,11,17}, -{59,11,18}, -{59,11,19}, -{59,11,20}, -{59,11,21}, -{59,11,22}, -{59,11,23}, -{59,11,24}, -{59,11,25}, -{59,11,26}, -{59,11,27}, -{59,11,28}, -{59,11,29}, -{59,11,30}, -{59,11,31}, -{59,11,32}, -{59,11,33}, -{59,11,34}, -{59,11,35}, -{59,11,36}, -{59,11,37}, -{59,11,38}, -{59,11,39}, -{59,11,40}, -{59,11,41}, -{59,11,42}, -{59,11,43}, -{59,11,44}, -{59,11,45}, -{59,11,46}, -{59,11,47}, -{59,11,48}, -{59,11,49}, -{59,11,50}, -{59,11,51}, -{59,11,52}, -{59,11,53}, -{59,11,54}, -{59,11,55}, -{59,11,56}, -{59,11,57}, -{59,11,58}, -{59,11,59}, -{59,11,60}, -{59,11,61}, -{59,11,62}, -{59,11,63}, -{59,11,64}, -{59,12,-64}, -{59,12,-63}, -{59,12,-62}, -{59,12,-61}, -{59,12,-60}, -{59,12,-59}, -{59,12,-58}, -{59,12,-57}, -{59,12,-56}, -{59,12,-55}, -{59,12,-54}, -{59,12,-53}, -{59,12,-52}, -{59,12,-51}, -{59,12,-50}, -{59,12,-49}, -{59,12,-48}, -{59,12,-47}, -{59,12,-46}, -{59,12,-45}, -{59,12,-44}, -{59,12,-43}, -{59,12,-42}, -{59,12,-41}, -{59,12,-40}, -{59,12,-39}, -{59,12,-38}, -{59,12,-37}, -{59,12,-36}, -{59,12,-35}, -{59,12,-34}, -{59,12,-33}, -{59,12,-32}, -{59,12,-31}, -{59,12,-30}, -{59,12,-29}, -{59,12,-28}, -{59,12,-27}, -{59,12,-26}, -{59,12,-25}, -{59,12,-24}, -{59,12,-23}, -{59,12,-22}, -{59,12,-21}, -{59,12,-20}, -{59,12,-19}, -{59,12,-18}, -{59,12,-17}, -{59,12,-16}, -{59,12,-15}, -{59,12,-14}, -{59,12,-13}, -{59,12,-12}, -{59,12,-11}, -{59,12,-10}, -{59,12,-9}, -{59,12,-8}, -{59,12,-7}, -{59,12,-6}, -{59,12,-5}, -{59,12,-4}, -{59,12,-3}, -{59,12,-2}, -{59,12,-1}, -{59,12,0}, -{59,12,1}, -{59,12,2}, -{59,12,3}, -{59,12,4}, -{59,12,5}, -{59,12,6}, -{59,12,7}, -{59,12,8}, -{59,12,9}, -{59,12,10}, -{59,12,11}, -{59,12,12}, -{59,12,13}, -{59,12,14}, -{59,12,15}, -{59,12,16}, -{59,12,17}, -{59,12,18}, -{59,12,19}, -{59,12,20}, -{59,12,21}, -{59,12,22}, -{59,12,23}, -{59,12,24}, -{59,12,25}, -{59,12,26}, -{59,12,27}, -{59,12,28}, -{59,12,29}, -{59,12,30}, -{59,12,31}, -{59,12,32}, -{59,12,33}, -{59,12,34}, -{59,12,35}, -{59,12,36}, -{59,12,37}, -{59,12,38}, -{59,12,39}, -{59,12,40}, -{59,12,41}, -{59,12,42}, -{59,12,43}, -{59,12,44}, -{59,12,45}, -{59,12,46}, -{59,12,47}, -{59,12,48}, -{59,12,49}, -{59,12,50}, -{59,12,51}, -{59,12,52}, -{59,12,53}, -{59,12,54}, -{59,12,55}, -{59,12,56}, -{59,12,57}, -{59,12,58}, -{59,12,59}, -{59,12,60}, -{59,12,61}, -{59,12,62}, -{59,12,63}, -{59,12,64}, -{59,13,-64}, -{59,13,-63}, -{59,13,-62}, -{59,13,-61}, -{59,13,-60}, -{59,13,-59}, -{59,13,-58}, -{59,13,-57}, -{59,13,-56}, -{59,13,-55}, -{59,13,-54}, -{59,13,-53}, -{59,13,-52}, -{59,13,-51}, -{59,13,-50}, -{59,13,-49}, -{59,13,-48}, -{59,13,-47}, -{59,13,-46}, -{59,13,-45}, -{59,13,-44}, -{59,13,-43}, -{59,13,-42}, -{59,13,-41}, -{59,13,-40}, -{59,13,-39}, -{59,13,-38}, -{59,13,-37}, -{59,13,-36}, -{59,13,-35}, -{59,13,-34}, -{59,13,-33}, -{59,13,-32}, -{59,13,-31}, -{59,13,-30}, -{59,13,-29}, -{59,13,-28}, -{59,13,-27}, -{59,13,-26}, -{59,13,-25}, -{59,13,-24}, -{59,13,-23}, -{59,13,-22}, -{59,13,-21}, -{59,13,-20}, -{59,13,-19}, -{59,13,-18}, -{59,13,-17}, -{59,13,-16}, -{59,13,-15}, -{59,13,-14}, -{59,13,-13}, -{59,13,-12}, -{59,13,-11}, -{59,13,-10}, -{59,13,-9}, -{59,13,-8}, -{59,13,-7}, -{59,13,-6}, -{59,13,-5}, -{59,13,-4}, -{59,13,-3}, -{59,13,-2}, -{59,13,-1}, -{59,13,0}, -{59,13,1}, -{59,13,2}, -{59,13,3}, -{59,13,4}, -{59,13,5}, -{59,13,6}, -{59,13,7}, -{59,13,8}, -{59,13,9}, -{59,13,10}, -{59,13,11}, -{59,13,12}, -{59,13,13}, -{59,13,14}, -{59,13,15}, -{59,13,16}, -{59,13,17}, -{59,13,18}, -{59,13,19}, -{59,13,20}, -{59,13,21}, -{59,13,22}, -{59,13,23}, -{59,13,24}, -{59,13,25}, -{59,13,26}, -{59,13,27}, -{59,13,28}, -{59,13,29}, -{59,13,30}, -{59,13,31}, -{59,13,32}, -{59,13,33}, -{59,13,34}, -{59,13,35}, -{59,13,36}, -{59,13,37}, -{59,13,38}, -{59,13,39}, -{59,13,40}, -{59,13,41}, -{59,13,42}, -{59,13,43}, -{59,13,44}, -{59,13,45}, -{59,13,46}, -{59,13,47}, -{59,13,48}, -{59,13,49}, -{59,13,50}, -{59,13,51}, -{59,13,52}, -{59,13,53}, -{59,13,54}, -{59,13,55}, -{59,13,56}, -{59,13,57}, -{59,13,58}, -{59,13,59}, -{59,13,60}, -{59,13,61}, -{59,13,62}, -{59,13,63}, -{59,13,64}, -{59,14,-64}, -{59,14,-63}, -{59,14,-62}, -{59,14,-61}, -{59,14,-60}, -{59,14,-59}, -{59,14,-58}, -{59,14,-57}, -{59,14,-56}, -{59,14,-55}, -{59,14,-54}, -{59,14,-53}, -{59,14,-52}, -{59,14,-51}, -{59,14,-50}, -{59,14,-49}, -{59,14,-48}, -{59,14,-47}, -{59,14,-46}, -{59,14,-45}, -{59,14,-44}, -{59,14,-43}, -{59,14,-42}, -{59,14,-41}, -{59,14,-40}, -{59,14,-39}, -{59,14,-38}, -{59,14,-37}, -{59,14,-36}, -{59,14,-35}, -{59,14,-34}, -{59,14,-33}, -{59,14,-32}, -{59,14,-31}, -{59,14,-30}, -{59,14,-29}, -{59,14,-28}, -{59,14,-27}, -{59,14,-26}, -{59,14,-25}, -{59,14,-24}, -{59,14,-23}, -{59,14,-22}, -{59,14,-21}, -{59,14,-20}, -{59,14,-19}, -{59,14,-18}, -{59,14,-17}, -{59,14,-16}, -{59,14,-15}, -{59,14,-14}, -{59,14,-13}, -{59,14,-12}, -{59,14,-11}, -{59,14,-10}, -{59,14,-9}, -{59,14,-8}, -{59,14,-7}, -{59,14,-6}, -{59,14,-5}, -{59,14,-4}, -{59,14,-3}, -{59,14,-2}, -{59,14,-1}, -{59,14,0}, -{59,14,1}, -{59,14,2}, -{59,14,3}, -{59,14,4}, -{59,14,5}, -{59,14,6}, -{59,14,7}, -{59,14,8}, -{59,14,9}, -{59,14,10}, -{59,14,11}, -{59,14,12}, -{59,14,13}, -{59,14,14}, -{59,14,15}, -{59,14,16}, -{59,14,17}, -{59,14,18}, -{59,14,19}, -{59,14,20}, -{59,14,21}, -{59,14,22}, -{59,14,23}, -{59,14,24}, -{59,14,25}, -{59,14,26}, -{59,14,27}, -{59,14,28}, -{59,14,29}, -{59,14,30}, -{59,14,31}, -{59,14,32}, -{59,14,33}, -{59,14,34}, -{59,14,35}, -{59,14,36}, -{59,14,37}, -{59,14,38}, -{59,14,39}, -{59,14,40}, -{59,14,41}, -{59,14,42}, -{59,14,43}, -{59,14,44}, -{59,14,45}, -{59,14,46}, -{59,14,47}, -{59,14,48}, -{59,14,49}, -{59,14,50}, -{59,14,51}, -{59,14,52}, -{59,14,53}, -{59,14,54}, -{59,14,55}, -{59,14,56}, -{59,14,57}, -{59,14,58}, -{59,14,59}, -{59,14,60}, -{59,14,61}, -{59,14,62}, -{59,14,63}, -{59,14,64}, -{59,15,-64}, -{59,15,-63}, -{59,15,-62}, -{59,15,-61}, -{59,15,-60}, -{59,15,-59}, -{59,15,-58}, -{59,15,-57}, -{59,15,-56}, -{59,15,-55}, -{59,15,-54}, -{59,15,-53}, -{59,15,-52}, -{59,15,-51}, -{59,15,-50}, -{59,15,-49}, -{59,15,-48}, -{59,15,-47}, -{59,15,-46}, -{59,15,-45}, -{59,15,-44}, -{59,15,-43}, -{59,15,-42}, -{59,15,-41}, -{59,15,-40}, -{59,15,-39}, -{59,15,-38}, -{59,15,-37}, -{59,15,-36}, -{59,15,-35}, -{59,15,-34}, -{59,15,-33}, -{59,15,-32}, -{59,15,-31}, -{59,15,-30}, -{59,15,-29}, -{59,15,-28}, -{59,15,-27}, -{59,15,-26}, -{59,15,-25}, -{59,15,-24}, -{59,15,-23}, -{59,15,-22}, -{59,15,-21}, -{59,15,-20}, -{59,15,-19}, -{59,15,-18}, -{59,15,-17}, -{59,15,-16}, -{59,15,-15}, -{59,15,-14}, -{59,15,-13}, -{59,15,-12}, -{59,15,-11}, -{59,15,-10}, -{59,15,-9}, -{59,15,-8}, -{59,15,-7}, -{59,15,-6}, -{59,15,-5}, -{59,15,-4}, -{59,15,-3}, -{59,15,-2}, -{59,15,-1}, -{59,15,0}, -{59,15,1}, -{59,15,2}, -{59,15,3}, -{59,15,4}, -{59,15,5}, -{59,15,6}, -{59,15,7}, -{59,15,8}, -{59,15,9}, -{59,15,10}, -{59,15,11}, -{59,15,12}, -{59,15,13}, -{59,15,14}, -{59,15,15}, -{59,15,16}, -{59,15,17}, -{59,15,18}, -{59,15,19}, -{59,15,20}, -{59,15,21}, -{59,15,22}, -{59,15,23}, -{59,15,24}, -{59,15,25}, -{59,15,26}, -{59,15,27}, -{59,15,28}, -{59,15,29}, -{59,15,30}, -{59,15,31}, -{59,15,32}, -{59,15,33}, -{59,15,34}, -{59,15,35}, -{59,15,36}, -{59,15,37}, -{59,15,38}, -{59,15,39}, -{59,15,40}, -{59,15,41}, -{59,15,42}, -{59,15,43}, -{59,15,44}, -{59,15,45}, -{59,15,46}, -{59,15,47}, -{59,15,48}, -{59,15,49}, -{59,15,50}, -{59,15,51}, -{59,15,52}, -{59,15,53}, -{59,15,54}, -{59,15,55}, -{59,15,56}, -{59,15,57}, -{59,15,58}, -{59,15,59}, -{59,15,60}, -{59,15,61}, -{59,15,62}, -{59,15,63}, -{59,15,64}, -{59,16,-64}, -{59,16,-63}, -{59,16,-62}, -{59,16,-61}, -{59,16,-60}, -{59,16,-59}, -{59,16,-58}, -{59,16,-57}, -{59,16,-56}, -{59,16,-55}, -{59,16,-54}, -{59,16,-53}, -{59,16,-52}, -{59,16,-51}, -{59,16,-50}, -{59,16,-49}, -{59,16,-48}, -{59,16,-47}, -{59,16,-46}, -{59,16,-45}, -{59,16,-44}, -{59,16,-43}, -{59,16,-42}, -{59,16,-41}, -{59,16,-40}, -{59,16,-39}, -{59,16,-38}, -{59,16,-37}, -{59,16,-36}, -{59,16,-35}, -{59,16,-34}, -{59,16,-33}, -{59,16,-32}, -{59,16,-31}, -{59,16,-30}, -{59,16,-29}, -{59,16,-28}, -{59,16,-27}, -{59,16,-26}, -{59,16,-25}, -{59,16,-24}, -{59,16,-23}, -{59,16,-22}, -{59,16,-21}, -{59,16,-20}, -{59,16,-19}, -{59,16,-18}, -{59,16,-17}, -{59,16,-16}, -{59,16,-15}, -{59,16,-14}, -{59,16,-13}, -{59,16,-12}, -{59,16,-11}, -{59,16,-10}, -{59,16,-9}, -{59,16,-8}, -{59,16,-7}, -{59,16,-6}, -{59,16,-5}, -{59,16,-4}, -{59,16,-3}, -{59,16,-2}, -{59,16,-1}, -{59,16,0}, -{59,16,1}, -{59,16,2}, -{59,16,3}, -{59,16,4}, -{59,16,5}, -{59,16,6}, -{59,16,7}, -{59,16,8}, -{59,16,9}, -{59,16,10}, -{59,16,11}, -{59,16,12}, -{59,16,13}, -{59,16,14}, -{59,16,15}, -{59,16,16}, -{59,16,17}, -{59,16,18}, -{59,16,19}, -{59,16,20}, -{59,16,21}, -{59,16,22}, -{59,16,23}, -{59,16,24}, -{59,16,25}, -{59,16,26}, -{59,16,27}, -{59,16,28}, -{59,16,29}, -{59,16,30}, -{59,16,31}, -{59,16,32}, -{59,16,33}, -{59,16,34}, -{59,16,35}, -{59,16,36}, -{59,16,37}, -{59,16,38}, -{59,16,39}, -{59,16,40}, -{59,16,41}, -{59,16,42}, -{59,16,43}, -{59,16,44}, -{59,16,45}, -{59,16,46}, -{59,16,47}, -{59,16,48}, -{59,16,49}, -{59,16,50}, -{59,16,51}, -{59,16,52}, -{59,16,53}, -{59,16,54}, -{59,16,55}, -{59,16,56}, -{59,16,57}, -{59,16,58}, -{59,16,59}, -{59,16,60}, -{59,16,61}, -{59,16,62}, -{59,16,63}, -{59,16,64}, -{59,16,65}, -{59,17,-64}, -{59,17,-63}, -{59,17,-62}, -{59,17,-61}, -{59,17,-60}, -{59,17,-59}, -{59,17,-58}, -{59,17,-57}, -{59,17,-56}, -{59,17,-55}, -{59,17,-54}, -{59,17,-53}, -{59,17,-52}, -{59,17,-51}, -{59,17,-50}, -{59,17,-49}, -{59,17,-48}, -{59,17,-47}, -{59,17,-46}, -{59,17,-45}, -{59,17,-44}, -{59,17,-43}, -{59,17,-42}, -{59,17,-41}, -{59,17,-40}, -{59,17,-39}, -{59,17,-38}, -{59,17,-37}, -{59,17,-36}, -{59,17,-35}, -{59,17,-34}, -{59,17,-33}, -{59,17,-32}, -{59,17,-31}, -{59,17,-30}, -{59,17,-29}, -{59,17,-28}, -{59,17,-27}, -{59,17,-26}, -{59,17,-25}, -{59,17,-24}, -{59,17,-23}, -{59,17,-22}, -{59,17,-21}, -{59,17,-20}, -{59,17,-19}, -{59,17,-18}, -{59,17,-17}, -{59,17,-16}, -{59,17,-15}, -{59,17,-14}, -{59,17,-13}, -{59,17,-12}, -{59,17,-11}, -{59,17,-10}, -{59,17,-9}, -{59,17,-8}, -{59,17,-7}, -{59,17,-6}, -{59,17,-5}, -{59,17,-4}, -{59,17,-3}, -{59,17,-2}, -{59,17,-1}, -{59,17,0}, -{59,17,1}, -{59,17,2}, -{59,17,3}, -{59,17,4}, -{59,17,5}, -{59,17,6}, -{59,17,7}, -{59,17,8}, -{59,17,9}, -{59,17,10}, -{59,17,11}, -{59,17,12}, -{59,17,13}, -{59,17,14}, -{59,17,15}, -{59,17,16}, -{59,17,17}, -{59,17,18}, -{59,17,19}, -{59,17,20}, -{59,17,21}, -{59,17,22}, -{59,17,23}, -{59,17,24}, -{59,17,25}, -{59,17,26}, -{59,17,27}, -{59,17,28}, -{59,17,29}, -{59,17,30}, -{59,17,31}, -{59,17,32}, -{59,17,33}, -{59,17,34}, -{59,17,35}, -{59,17,36}, -{59,17,37}, -{59,17,38}, -{59,17,39}, -{59,17,40}, -{59,17,41}, -{59,17,42}, -{59,17,43}, -{59,17,44}, -{59,17,45}, -{59,17,46}, -{59,17,47}, -{59,17,48}, -{59,17,49}, -{59,17,50}, -{59,17,51}, -{59,17,52}, -{59,17,53}, -{59,17,54}, -{59,17,55}, -{59,17,56}, -{59,17,57}, -{59,17,58}, -{59,17,59}, -{59,17,60}, -{59,17,61}, -{59,17,62}, -{59,17,63}, -{59,17,64}, -{59,17,65}, -{59,18,-64}, -{59,18,-63}, -{59,18,-62}, -{59,18,-61}, -{59,18,-60}, -{59,18,-59}, -{59,18,-58}, -{59,18,-57}, -{59,18,-56}, -{59,18,-55}, -{59,18,-54}, -{59,18,-53}, -{59,18,-52}, -{59,18,-51}, -{59,18,-50}, -{59,18,-49}, -{59,18,-48}, -{59,18,-47}, -{59,18,-46}, -{59,18,-45}, -{59,18,-44}, -{59,18,-43}, -{59,18,-42}, -{59,18,-41}, -{59,18,-40}, -{59,18,-39}, -{59,18,-38}, -{59,18,-37}, -{59,18,-36}, -{59,18,-35}, -{59,18,-34}, -{59,18,-33}, -{59,18,-32}, -{59,18,-31}, -{59,18,-30}, -{59,18,-29}, -{59,18,-28}, -{59,18,-27}, -{59,18,-26}, -{59,18,-25}, -{59,18,-24}, -{59,18,-23}, -{59,18,-22}, -{59,18,-21}, -{59,18,-20}, -{59,18,-19}, -{59,18,-18}, -{59,18,-17}, -{59,18,-16}, -{59,18,-15}, -{59,18,-14}, -{59,18,-13}, -{59,18,-12}, -{59,18,-11}, -{59,18,-10}, -{59,18,-9}, -{59,18,-8}, -{59,18,-7}, -{59,18,-6}, -{59,18,-5}, -{59,18,-4}, -{59,18,-3}, -{59,18,-2}, -{59,18,-1}, -{59,18,0}, -{59,18,1}, -{59,18,2}, -{59,18,3}, -{59,18,4}, -{59,18,5}, -{59,18,6}, -{59,18,7}, -{59,18,8}, -{59,18,9}, -{59,18,10}, -{59,18,11}, -{59,18,12}, -{59,18,13}, -{59,18,14}, -{59,18,15}, -{59,18,16}, -{59,18,17}, -{59,18,18}, -{59,18,19}, -{59,18,20}, -{59,18,21}, -{59,18,22}, -{59,18,23}, -{59,18,24}, -{59,18,25}, -{59,18,26}, -{59,18,27}, -{59,18,28}, -{59,18,29}, -{59,18,30}, -{59,18,31}, -{59,18,32}, -{59,18,33}, -{59,18,34}, -{59,18,35}, -{59,18,36}, -{59,18,37}, -{59,18,38}, -{59,18,39}, -{59,18,40}, -{59,18,41}, -{59,18,42}, -{59,18,43}, -{59,18,44}, -{59,18,45}, -{59,18,46}, -{59,18,47}, -{59,18,48}, -{59,18,49}, -{59,18,50}, -{59,18,51}, -{59,18,52}, -{59,18,53}, -{59,18,54}, -{59,18,55}, -{59,18,56}, -{59,18,57}, -{59,18,58}, -{59,18,59}, -{59,18,60}, -{59,18,61}, -{59,18,62}, -{59,18,63}, -{59,18,64}, -{59,18,65}, -{59,19,-64}, -{59,19,-63}, -{59,19,-62}, -{59,19,-61}, -{59,19,-60}, -{59,19,-59}, -{59,19,-58}, -{59,19,-57}, -{59,19,-56}, -{59,19,-55}, -{59,19,-54}, -{59,19,-53}, -{59,19,-52}, -{59,19,-51}, -{59,19,-50}, -{59,19,-49}, -{59,19,-48}, -{59,19,-47}, -{59,19,-46}, -{59,19,-45}, -{59,19,-44}, -{59,19,-43}, -{59,19,-42}, -{59,19,-41}, -{59,19,-40}, -{59,19,-39}, -{59,19,-38}, -{59,19,-37}, -{59,19,-36}, -{59,19,-35}, -{59,19,-34}, -{59,19,-33}, -{59,19,-32}, -{59,19,-31}, -{59,19,-30}, -{59,19,-29}, -{59,19,-28}, -{59,19,-27}, -{59,19,-26}, -{59,19,-25}, -{59,19,-24}, -{59,19,-23}, -{59,19,-22}, -{59,19,-21}, -{59,19,-20}, -{59,19,-19}, -{59,19,-18}, -{59,19,-17}, -{59,19,-16}, -{59,19,-15}, -{59,19,-14}, -{59,19,-13}, -{59,19,-12}, -{59,19,-11}, -{59,19,-10}, -{59,19,-9}, -{59,19,-8}, -{59,19,-7}, -{59,19,-6}, -{59,19,-5}, -{59,19,-4}, -{59,19,-3}, -{59,19,-2}, -{59,19,-1}, -{59,19,0}, -{59,19,1}, -{59,19,2}, -{59,19,3}, -{59,19,4}, -{59,19,5}, -{59,19,6}, -{59,19,7}, -{59,19,8}, -{59,19,9}, -{59,19,10}, -{59,19,11}, -{59,19,12}, -{59,19,13}, -{59,19,14}, -{59,19,15}, -{59,19,16}, -{59,19,17}, -{59,19,18}, -{59,19,19}, -{59,19,20}, -{59,19,21}, -{59,19,22}, -{59,19,23}, -{59,19,24}, -{59,19,25}, -{59,19,26}, -{59,19,27}, -{59,19,28}, -{59,19,29}, -{59,19,30}, -{59,19,31}, -{59,19,32}, -{59,19,33}, -{59,19,34}, -{59,19,35}, -{59,19,36}, -{59,19,37}, -{59,19,38}, -{59,19,39}, -{59,19,40}, -{59,19,41}, -{59,19,42}, -{59,19,43}, -{59,19,44}, -{59,19,45}, -{59,19,46}, -{59,19,47}, -{59,19,48}, -{59,19,49}, -{59,19,50}, -{59,19,51}, -{59,19,52}, -{59,19,53}, -{59,19,54}, -{59,19,55}, -{59,19,56}, -{59,19,57}, -{59,19,58}, -{59,19,59}, -{59,19,60}, -{59,19,61}, -{59,19,62}, -{59,19,63}, -{59,19,64}, -{59,19,65}, -{59,20,-64}, -{59,20,-63}, -{59,20,-62}, -{59,20,-61}, -{59,20,-60}, -{59,20,-59}, -{59,20,-58}, -{59,20,-57}, -{59,20,-56}, -{59,20,-55}, -{59,20,-54}, -{59,20,-53}, -{59,20,-52}, -{59,20,-51}, -{59,20,-50}, -{59,20,-49}, -{59,20,-48}, -{59,20,-47}, -{59,20,-46}, -{59,20,-45}, -{59,20,-44}, -{59,20,-43}, -{59,20,-42}, -{59,20,-41}, -{59,20,-40}, -{59,20,-39}, -{59,20,-38}, -{59,20,-37}, -{59,20,-36}, -{59,20,-35}, -{59,20,-34}, -{59,20,-33}, -{59,20,-32}, -{59,20,-31}, -{59,20,-30}, -{59,20,-29}, -{59,20,-28}, -{59,20,-27}, -{59,20,-26}, -{59,20,-25}, -{59,20,-24}, -{59,20,-23}, -{59,20,-22}, -{59,20,-21}, -{59,20,-20}, -{59,20,-19}, -{59,20,-18}, -{59,20,-17}, -{59,20,-16}, -{59,20,-15}, -{59,20,-14}, -{59,20,-13}, -{59,20,-12}, -{59,20,-11}, -{59,20,-10}, -{59,20,-9}, -{59,20,-8}, -{59,20,-7}, -{59,20,-6}, -{59,20,-5}, -{59,20,-4}, -{59,20,-3}, -{59,20,-2}, -{59,20,-1}, -{59,20,0}, -{59,20,1}, -{59,20,2}, -{59,20,3}, -{59,20,4}, -{59,20,5}, -{59,20,6}, -{59,20,7}, -{59,20,8}, -{59,20,9}, -{59,20,10}, -{59,20,11}, -{59,20,12}, -{59,20,13}, -{59,20,14}, -{59,20,15}, -{59,20,16}, -{59,20,17}, -{59,20,18}, -{59,20,19}, -{59,20,20}, -{59,20,21}, -{59,20,22}, -{59,20,23}, -{59,20,24}, -{59,20,25}, -{59,20,26}, -{59,20,27}, -{59,20,28}, -{59,20,29}, -{59,20,30}, -{59,20,31}, -{59,20,32}, -{59,20,33}, -{59,20,34}, -{59,20,35}, -{59,20,36}, -{59,20,37}, -{59,20,38}, -{59,20,39}, -{59,20,40}, -{59,20,41}, -{59,20,42}, -{59,20,43}, -{59,20,44}, -{59,20,45}, -{59,20,46}, -{59,20,47}, -{59,20,48}, -{59,20,49}, -{59,20,50}, -{59,20,51}, -{59,20,52}, -{59,20,53}, -{59,20,54}, -{59,20,55}, -{59,20,56}, -{59,20,57}, -{59,20,58}, -{59,20,59}, -{59,20,60}, -{59,20,61}, -{59,20,62}, -{59,20,63}, -{59,20,64}, -{59,20,65}, -{59,21,-64}, -{59,21,-63}, -{59,21,-62}, -{59,21,-61}, -{59,21,-60}, -{59,21,-59}, -{59,21,-58}, -{59,21,-57}, -{59,21,-56}, -{59,21,-55}, -{59,21,-54}, -{59,21,-53}, -{59,21,-52}, -{59,21,-51}, -{59,21,-50}, -{59,21,-49}, -{59,21,-48}, -{59,21,-47}, -{59,21,-46}, -{59,21,-45}, -{59,21,-44}, -{59,21,-43}, -{59,21,-42}, -{59,21,-41}, -{59,21,-40}, -{59,21,-39}, -{59,21,-38}, -{59,21,-37}, -{59,21,-36}, -{59,21,-35}, -{59,21,-34}, -{59,21,-33}, -{59,21,-32}, -{59,21,-31}, -{59,21,-30}, -{59,21,-29}, -{59,21,-28}, -{59,21,-27}, -{59,21,-26}, -{59,21,-25}, -{59,21,-24}, -{59,21,-23}, -{59,21,-22}, -{59,21,-21}, -{59,21,-20}, -{59,21,-19}, -{59,21,-18}, -{59,21,-17}, -{59,21,-16}, -{59,21,-15}, -{59,21,-14}, -{59,21,-13}, -{59,21,-12}, -{59,21,-11}, -{59,21,-10}, -{59,21,-9}, -{59,21,-8}, -{59,21,-7}, -{59,21,-6}, -{59,21,-5}, -{59,21,-4}, -{59,21,-3}, -{59,21,-2}, -{59,21,-1}, -{59,21,0}, -{59,21,1}, -{59,21,2}, -{59,21,3}, -{59,21,4}, -{59,21,5}, -{59,21,6}, -{59,21,7}, -{59,21,8}, -{59,21,9}, -{59,21,10}, -{59,21,11}, -{59,21,12}, -{59,21,13}, -{59,21,14}, -{59,21,15}, -{59,21,16}, -{59,21,17}, -{59,21,18}, -{59,21,19}, -{59,21,20}, -{59,21,21}, -{59,21,22}, -{59,21,23}, -{59,21,24}, -{59,21,25}, -{59,21,26}, -{59,21,27}, -{59,21,28}, -{59,21,29}, -{59,21,30}, -{59,21,31}, -{59,21,32}, -{59,21,33}, -{59,21,34}, -{59,21,35}, -{59,21,36}, -{59,21,37}, -{59,21,38}, -{59,21,39}, -{59,21,40}, -{59,21,41}, -{59,21,42}, -{59,21,43}, -{59,21,44}, -{59,21,45}, -{59,21,46}, -{59,21,47}, -{59,21,48}, -{59,21,49}, -{59,21,50}, -{59,21,51}, -{59,21,52}, -{59,21,53}, -{59,21,54}, -{59,21,55}, -{59,21,56}, -{59,21,57}, -{59,21,58}, -{59,21,59}, -{59,21,60}, -{59,21,61}, -{59,21,62}, -{59,21,63}, -{59,21,64}, -{59,21,65}, -{59,22,-64}, -{59,22,-63}, -{59,22,-62}, -{59,22,-61}, -{59,22,-60}, -{59,22,-59}, -{59,22,-58}, -{59,22,-57}, -{59,22,-56}, -{59,22,-55}, -{59,22,-54}, -{59,22,-53}, -{59,22,-52}, -{59,22,-51}, -{59,22,-50}, -{59,22,-49}, -{59,22,-48}, -{59,22,-47}, -{59,22,-46}, -{59,22,-45}, -{59,22,-44}, -{59,22,-43}, -{59,22,-42}, -{59,22,-41}, -{59,22,-40}, -{59,22,-39}, -{59,22,-38}, -{59,22,-37}, -{59,22,-36}, -{59,22,-35}, -{59,22,-34}, -{59,22,-33}, -{59,22,-32}, -{59,22,-31}, -{59,22,-30}, -{59,22,-29}, -{59,22,-28}, -{59,22,-27}, -{59,22,-26}, -{59,22,-25}, -{59,22,-24}, -{59,22,-23}, -{59,22,-22}, -{59,22,-21}, -{59,22,-20}, -{59,22,-19}, -{59,22,-18}, -{59,22,-17}, -{59,22,-16}, -{59,22,-15}, -{59,22,-14}, -{59,22,-13}, -{59,22,-12}, -{59,22,-11}, -{59,22,-10}, -{59,22,-9}, -{59,22,-8}, -{59,22,-7}, -{59,22,-6}, -{59,22,-5}, -{59,22,-4}, -{59,22,-3}, -{59,22,-2}, -{59,22,-1}, -{59,22,0}, -{59,22,1}, -{59,22,2}, -{59,22,3}, -{59,22,4}, -{59,22,5}, -{59,22,6}, -{59,22,7}, -{59,22,8}, -{59,22,9}, -{59,22,10}, -{59,22,11}, -{59,22,12}, -{59,22,13}, -{59,22,14}, -{59,22,15}, -{59,22,16}, -{59,22,17}, -{59,22,18}, -{59,22,19}, -{59,22,20}, -{59,22,21}, -{59,22,22}, -{59,22,23}, -{59,22,24}, -{59,22,25}, -{59,22,26}, -{59,22,27}, -{59,22,28}, -{59,22,29}, -{59,22,30}, -{59,22,31}, -{59,22,32}, -{59,22,33}, -{59,22,34}, -{59,22,35}, -{59,22,36}, -{59,22,37}, -{59,22,38}, -{59,22,39}, -{59,22,40}, -{59,22,41}, -{59,22,42}, -{59,22,43}, -{59,22,44}, -{59,22,45}, -{59,22,46}, -{59,22,47}, -{59,22,48}, -{59,22,49}, -{59,22,50}, -{59,22,51}, -{59,22,52}, -{59,22,53}, -{59,22,54}, -{59,22,55}, -{59,22,56}, -{59,22,57}, -{59,22,58}, -{59,22,59}, -{59,22,60}, -{59,22,61}, -{59,22,62}, -{59,22,63}, -{59,22,64}, -{59,22,65}, -{59,23,-64}, -{59,23,-63}, -{59,23,-62}, -{59,23,-61}, -{59,23,-60}, -{59,23,-59}, -{59,23,-58}, -{59,23,-57}, -{59,23,-56}, -{59,23,-55}, -{59,23,-54}, -{59,23,-53}, -{59,23,-52}, -{59,23,-51}, -{59,23,-50}, -{59,23,-49}, -{59,23,-48}, -{59,23,-47}, -{59,23,-46}, -{59,23,-45}, -{59,23,-44}, -{59,23,-43}, -{59,23,-42}, -{59,23,-41}, -{59,23,-40}, -{59,23,-39}, -{59,23,-38}, -{59,23,-37}, -{59,23,-36}, -{59,23,-35}, -{59,23,-34}, -{59,23,-33}, -{59,23,-32}, -{59,23,-31}, -{59,23,-30}, -{59,23,-29}, -{59,23,-28}, -{59,23,-27}, -{59,23,-26}, -{59,23,-25}, -{59,23,-24}, -{59,23,-23}, -{59,23,-22}, -{59,23,-21}, -{59,23,-20}, -{59,23,-19}, -{59,23,-18}, -{59,23,-17}, -{59,23,-16}, -{59,23,-15}, -{59,23,-14}, -{59,23,-13}, -{59,23,-12}, -{59,23,-11}, -{59,23,-10}, -{59,23,-9}, -{59,23,-8}, -{59,23,-7}, -{59,23,-6}, -{59,23,-5}, -{59,23,-4}, -{59,23,-3}, -{59,23,-2}, -{59,23,-1}, -{59,23,0}, -{59,23,1}, -{59,23,2}, -{59,23,3}, -{59,23,4}, -{59,23,5}, -{59,23,6}, -{59,23,7}, -{59,23,8}, -{59,23,9}, -{59,23,10}, -{59,23,11}, -{59,23,12}, -{59,23,13}, -{59,23,14}, -{59,23,15}, -{59,23,16}, -{59,23,17}, -{59,23,18}, -{59,23,19}, -{59,23,20}, -{59,23,21}, -{59,23,22}, -{59,23,23}, -{59,23,24}, -{59,23,25}, -{59,23,26}, -{59,23,27}, -{59,23,28}, -{59,23,29}, -{59,23,30}, -{59,23,31}, -{59,23,32}, -{59,23,33}, -{59,23,34}, -{59,23,35}, -{59,23,36}, -{59,23,37}, -{59,23,38}, -{59,23,39}, -{59,23,40}, -{59,23,41}, -{59,23,42}, -{59,23,43}, -{59,23,44}, -{59,23,45}, -{59,23,46}, -{59,23,47}, -{59,23,48}, -{59,23,49}, -{59,23,50}, -{59,23,51}, -{59,23,52}, -{59,23,53}, -{59,23,54}, -{59,23,55}, -{59,23,56}, -{59,23,57}, -{59,23,58}, -{59,23,59}, -{59,23,60}, -{59,23,61}, -{59,23,62}, -{59,23,63}, -{59,23,64}, -{59,23,65}, -{59,24,-64}, -{59,24,-63}, -{59,24,-62}, -{59,24,-61}, -{59,24,-60}, -{59,24,-59}, -{59,24,-58}, -{59,24,-57}, -{59,24,-56}, -{59,24,-55}, -{59,24,-54}, -{59,24,-53}, -{59,24,-52}, -{59,24,-51}, -{59,24,-50}, -{59,24,-49}, -{59,24,-48}, -{59,24,-47}, -{59,24,-46}, -{59,24,-45}, -{59,24,-44}, -{59,24,-43}, -{59,24,-42}, -{59,24,-41}, -{59,24,-40}, -{59,24,-39}, -{59,24,-38}, -{59,24,-37}, -{59,24,-36}, -{59,24,-35}, -{59,24,-34}, -{59,24,-33}, -{59,24,-32}, -{59,24,-31}, -{59,24,-30}, -{59,24,-29}, -{59,24,-28}, -{59,24,-27}, -{59,24,-26}, -{59,24,-25}, -{59,24,-24}, -{59,24,-23}, -{59,24,-22}, -{59,24,-21}, -{59,24,-20}, -{59,24,-19}, -{59,24,-18}, -{59,24,-17}, -{59,24,-16}, -{59,24,-15}, -{59,24,-14}, -{59,24,-13}, -{59,24,-12}, -{59,24,-11}, -{59,24,-10}, -{59,24,-9}, -{59,24,-8}, -{59,24,-7}, -{59,24,-6}, -{59,24,-5}, -{59,24,-4}, -{59,24,-3}, -{59,24,-2}, -{59,24,-1}, -{59,24,0}, -{59,24,1}, -{59,24,2}, -{59,24,3}, -{59,24,4}, -{59,24,5}, -{59,24,6}, -{59,24,7}, -{59,24,8}, -{59,24,9}, -{59,24,10}, -{59,24,11}, -{59,24,12}, -{59,24,13}, -{59,24,14}, -{59,24,15}, -{59,24,16}, -{59,24,17}, -{59,24,18}, -{59,24,19}, -{59,24,20}, -{59,24,21}, -{59,24,22}, -{59,24,23}, -{59,24,24}, -{59,24,25}, -{59,24,26}, -{59,24,27}, -{59,24,28}, -{59,24,29}, -{59,24,30}, -{59,24,31}, -{59,24,32}, -{59,24,33}, -{59,24,34}, -{59,24,35}, -{59,24,36}, -{59,24,37}, -{59,24,38}, -{59,24,39}, -{59,24,40}, -{59,24,41}, -{59,24,42}, -{59,24,43}, -{59,24,44}, -{59,24,45}, -{59,24,46}, -{59,24,47}, -{59,24,48}, -{59,24,49}, -{59,24,50}, -{59,24,51}, -{59,24,52}, -{59,24,53}, -{59,24,54}, -{59,24,55}, -{59,24,56}, -{59,24,57}, -{59,24,58}, -{59,24,59}, -{59,24,60}, -{59,24,61}, -{59,24,62}, -{59,24,63}, -{59,24,64}, -{59,24,65}, -{59,25,-64}, -{59,25,-63}, -{59,25,-62}, -{59,25,-61}, -{59,25,-60}, -{59,25,-59}, -{59,25,-58}, -{59,25,-57}, -{59,25,-56}, -{59,25,-55}, -{59,25,-54}, -{59,25,-53}, -{59,25,-52}, -{59,25,-51}, -{59,25,-50}, -{59,25,-49}, -{59,25,-48}, -{59,25,-47}, -{59,25,-46}, -{59,25,-45}, -{59,25,-44}, -{59,25,-43}, -{59,25,-42}, -{59,25,-41}, -{59,25,-40}, -{59,25,-39}, -{59,25,-38}, -{59,25,-37}, -{59,25,-36}, -{59,25,-35}, -{59,25,-34}, -{59,25,-33}, -{59,25,-32}, -{59,25,-31}, -{59,25,-30}, -{59,25,-29}, -{59,25,-28}, -{59,25,-27}, -{59,25,-26}, -{59,25,-25}, -{59,25,-24}, -{59,25,-23}, -{59,25,-22}, -{59,25,-21}, -{59,25,-20}, -{59,25,-19}, -{59,25,-18}, -{59,25,-17}, -{59,25,-16}, -{59,25,-15}, -{59,25,-14}, -{59,25,-13}, -{59,25,-12}, -{59,25,-11}, -{59,25,-10}, -{59,25,-9}, -{59,25,-8}, -{59,25,-7}, -{59,25,-6}, -{59,25,-5}, -{59,25,-4}, -{59,25,-3}, -{59,25,-2}, -{59,25,-1}, -{59,25,0}, -{59,25,1}, -{59,25,2}, -{59,25,3}, -{59,25,4}, -{59,25,5}, -{59,25,6}, -{59,25,7}, -{59,25,8}, -{59,25,9}, -{59,25,10}, -{59,25,11}, -{59,25,12}, -{59,25,13}, -{59,25,14}, -{59,25,15}, -{59,25,16}, -{59,25,17}, -{59,25,18}, -{59,25,19}, -{59,25,20}, -{59,25,21}, -{59,25,22}, -{59,25,23}, -{59,25,24}, -{59,25,25}, -{59,25,26}, -{59,25,27}, -{59,25,28}, -{59,25,29}, -{59,25,30}, -{59,25,31}, -{59,25,32}, -{59,25,33}, -{59,25,34}, -{59,25,35}, -{59,25,36}, -{59,25,37}, -{59,25,38}, -{59,25,39}, -{59,25,40}, -{59,25,41}, -{59,25,42}, -{59,25,43}, -{59,25,44}, -{59,25,45}, -{59,25,46}, -{59,25,47}, -{59,25,48}, -{59,25,49}, -{59,25,50}, -{59,25,51}, -{59,25,52}, -{59,25,53}, -{59,25,54}, -{59,25,55}, -{59,25,56}, -{59,25,57}, -{59,25,58}, -{59,25,59}, -{59,25,60}, -{59,25,61}, -{59,25,62}, -{59,25,63}, -{59,25,64}, -{59,25,65}, -{59,26,-64}, -{59,26,-63}, -{59,26,-62}, -{59,26,-61}, -{59,26,-60}, -{59,26,-59}, -{59,26,-58}, -{59,26,-57}, -{59,26,-56}, -{59,26,-55}, -{59,26,-54}, -{59,26,-53}, -{59,26,-52}, -{59,26,-51}, -{59,26,-50}, -{59,26,-49}, -{59,26,-48}, -{59,26,-47}, -{59,26,-46}, -{59,26,-45}, -{59,26,-44}, -{59,26,-43}, -{59,26,-42}, -{59,26,-41}, -{59,26,-40}, -{59,26,-39}, -{59,26,-38}, -{59,26,-37}, -{59,26,-36}, -{59,26,-35}, -{59,26,-34}, -{59,26,-33}, -{59,26,-32}, -{59,26,-31}, -{59,26,-30}, -{59,26,-29}, -{59,26,-28}, -{59,26,-27}, -{59,26,-26}, -{59,26,-25}, -{59,26,-24}, -{59,26,-23}, -{59,26,-22}, -{59,26,-21}, -{59,26,-20}, -{59,26,-19}, -{59,26,-18}, -{59,26,-17}, -{59,26,-16}, -{59,26,-15}, -{59,26,-14}, -{59,26,-13}, -{59,26,-12}, -{59,26,-11}, -{59,26,-10}, -{59,26,-9}, -{59,26,-8}, -{59,26,-7}, -{59,26,-6}, -{59,26,-5}, -{59,26,-4}, -{59,26,-3}, -{59,26,-2}, -{59,26,-1}, -{59,26,0}, -{59,26,1}, -{59,26,2}, -{59,26,3}, -{59,26,4}, -{59,26,5}, -{59,26,6}, -{59,26,7}, -{59,26,8}, -{59,26,9}, -{59,26,10}, -{59,26,11}, -{59,26,12}, -{59,26,13}, -{59,26,14}, -{59,26,15}, -{59,26,16}, -{59,26,17}, -{59,26,18}, -{59,26,19}, -{59,26,20}, -{59,26,21}, -{59,26,22}, -{59,26,23}, -{59,26,24}, -{59,26,25}, -{59,26,26}, -{59,26,27}, -{59,26,28}, -{59,26,29}, -{59,26,30}, -{59,26,31}, -{59,26,32}, -{59,26,33}, -{59,26,34}, -{59,26,35}, -{59,26,36}, -{59,26,37}, -{59,26,38}, -{59,26,39}, -{59,26,40}, -{59,26,41}, -{59,26,42}, -{59,26,43}, -{59,26,44}, -{59,26,45}, -{59,26,46}, -{59,26,47}, -{59,26,48}, -{59,26,49}, -{59,26,50}, -{59,26,51}, -{59,26,52}, -{59,26,53}, -{59,26,54}, -{59,26,55}, -{59,26,56}, -{59,26,57}, -{59,26,58}, -{59,26,59}, -{59,26,60}, -{59,26,61}, -{59,26,62}, -{59,26,63}, -{59,26,64}, -{59,26,65}, -{59,27,-63}, -{59,27,-62}, -{59,27,-61}, -{59,27,-60}, -{59,27,-59}, -{59,27,-58}, -{59,27,-57}, -{59,27,-56}, -{59,27,-55}, -{59,27,-54}, -{59,27,-53}, -{59,27,-52}, -{59,27,-51}, -{59,27,-50}, -{59,27,-49}, -{59,27,-48}, -{59,27,-47}, -{59,27,-46}, -{59,27,-45}, -{59,27,-44}, -{59,27,-43}, -{59,27,-42}, -{59,27,-41}, -{59,27,-40}, -{59,27,-39}, -{59,27,-38}, -{59,27,-37}, -{59,27,-36}, -{59,27,-35}, -{59,27,-34}, -{59,27,-33}, -{59,27,-32}, -{59,27,-31}, -{59,27,-30}, -{59,27,-29}, -{59,27,-28}, -{59,27,-27}, -{59,27,-26}, -{59,27,-25}, -{59,27,-24}, -{59,27,-23}, -{59,27,-22}, -{59,27,-21}, -{59,27,-20}, -{59,27,-19}, -{59,27,-18}, -{59,27,-17}, -{59,27,-16}, -{59,27,-15}, -{59,27,-14}, -{59,27,-13}, -{59,27,-12}, -{59,27,-11}, -{59,27,-10}, -{59,27,-9}, -{59,27,-8}, -{59,27,-7}, -{59,27,-6}, -{59,27,-5}, -{59,27,-4}, -{59,27,-3}, -{59,27,-2}, -{59,27,-1}, -{59,27,0}, -{59,27,1}, -{59,27,2}, -{59,27,3}, -{59,27,4}, -{59,27,5}, -{59,27,6}, -{59,27,7}, -{59,27,8}, -{59,27,9}, -{59,27,10}, -{59,27,11}, -{59,27,12}, -{59,27,13}, -{59,27,14}, -{59,27,15}, -{59,27,16}, -{59,27,17}, -{59,27,18}, -{59,27,19}, -{59,27,20}, -{59,27,21}, -{59,27,22}, -{59,27,23}, -{59,27,24}, -{59,27,25}, -{59,27,26}, -{59,27,27}, -{59,27,28}, -{59,27,29}, -{59,27,30}, -{59,27,31}, -{59,27,32}, -{59,27,33}, -{59,27,34}, -{59,27,35}, -{59,27,36}, -{59,27,37}, -{59,27,38}, -{59,27,39}, -{59,27,40}, -{59,27,41}, -{59,27,42}, -{59,27,43}, -{59,27,44}, -{59,27,45}, -{59,27,46}, -{59,27,47}, -{59,27,48}, -{59,27,49}, -{59,27,50}, -{59,27,51}, -{59,27,52}, -{59,27,53}, -{59,27,54}, -{59,27,55}, -{59,27,56}, -{59,27,57}, -{59,27,58}, -{59,27,59}, -{59,27,60}, -{59,27,61}, -{59,27,62}, -{59,27,63}, -{59,27,64}, -{59,27,65}, -{59,28,-63}, -{59,28,-62}, -{59,28,-61}, -{59,28,-60}, -{59,28,-59}, -{59,28,-58}, -{59,28,-57}, -{59,28,-56}, -{59,28,-55}, -{59,28,-54}, -{59,28,-53}, -{59,28,-52}, -{59,28,-51}, -{59,28,-50}, -{59,28,-49}, -{59,28,-48}, -{59,28,-47}, -{59,28,-46}, -{59,28,-45}, -{59,28,-44}, -{59,28,-43}, -{59,28,-42}, -{59,28,-41}, -{59,28,-40}, -{59,28,-39}, -{59,28,-38}, -{59,28,-37}, -{59,28,-36}, -{59,28,-35}, -{59,28,-34}, -{59,28,-33}, -{59,28,-32}, -{59,28,-31}, -{59,28,-30}, -{59,28,-29}, -{59,28,-28}, -{59,28,-27}, -{59,28,-26}, -{59,28,-25}, -{59,28,-24}, -{59,28,-23}, -{59,28,-22}, -{59,28,-21}, -{59,28,-20}, -{59,28,-19}, -{59,28,-18}, -{59,28,-17}, -{59,28,-16}, -{59,28,-15}, -{59,28,-14}, -{59,28,-13}, -{59,28,-12}, -{59,28,-11}, -{59,28,-10}, -{59,28,-9}, -{59,28,-8}, -{59,28,-7}, -{59,28,-6}, -{59,28,-5}, -{59,28,-4}, -{59,28,-3}, -{59,28,-2}, -{59,28,-1}, -{59,28,0}, -{59,28,1}, -{59,28,2}, -{59,28,3}, -{59,28,4}, -{59,28,5}, -{59,28,6}, -{59,28,7}, -{59,28,8}, -{59,28,9}, -{59,28,10}, -{59,28,11}, -{59,28,12}, -{59,28,13}, -{59,28,14}, -{59,28,15}, -{59,28,16}, -{59,28,17}, -{59,28,18}, -{59,28,19}, -{59,28,20}, -{59,28,21}, -{59,28,22}, -{59,28,23}, -{59,28,24}, -{59,28,25}, -{59,28,26}, -{59,28,27}, -{59,28,28}, -{59,28,29}, -{59,28,30}, -{59,28,31}, -{59,28,32}, -{59,28,33}, -{59,28,34}, -{59,28,35}, -{59,28,36}, -{59,28,37}, -{59,28,38}, -{59,28,39}, -{59,28,40}, -{59,28,41}, -{59,28,42}, -{59,28,43}, -{59,28,44}, -{59,28,45}, -{59,28,46}, -{59,28,47}, -{59,28,48}, -{59,28,49}, -{59,28,50}, -{59,28,51}, -{59,28,52}, -{59,28,53}, -{59,28,54}, -{59,28,55}, -{59,28,56}, -{59,28,57}, -{59,28,58}, -{59,28,59}, -{59,28,60}, -{59,28,61}, -{59,28,62}, -{59,28,63}, -{59,28,64}, -{59,28,65}, -{59,28,66}, -{59,29,-63}, -{59,29,-62}, -{59,29,-61}, -{59,29,-60}, -{59,29,-59}, -{59,29,-58}, -{59,29,-57}, -{59,29,-56}, -{59,29,-55}, -{59,29,-54}, -{59,29,-53}, -{59,29,-52}, -{59,29,-51}, -{59,29,-50}, -{59,29,-49}, -{59,29,-48}, -{59,29,-47}, -{59,29,-46}, -{59,29,-45}, -{59,29,-44}, -{59,29,-43}, -{59,29,-42}, -{59,29,-41}, -{59,29,-40}, -{59,29,-39}, -{59,29,-38}, -{59,29,-37}, -{59,29,-36}, -{59,29,-35}, -{59,29,-34}, -{59,29,-33}, -{59,29,-32}, -{59,29,-31}, -{59,29,-30}, -{59,29,-29}, -{59,29,-28}, -{59,29,-27}, -{59,29,-26}, -{59,29,-25}, -{59,29,-24}, -{59,29,-23}, -{59,29,-22}, -{59,29,-21}, -{59,29,-20}, -{59,29,-19}, -{59,29,-18}, -{59,29,-17}, -{59,29,-16}, -{59,29,-15}, -{59,29,-14}, -{59,29,-13}, -{59,29,-12}, -{59,29,-11}, -{59,29,-10}, -{59,29,-9}, -{59,29,-8}, -{59,29,-7}, -{59,29,-6}, -{59,29,-5}, -{59,29,-4}, -{59,29,-3}, -{59,29,-2}, -{59,29,-1}, -{59,29,0}, -{59,29,1}, -{59,29,2}, -{59,29,3}, -{59,29,4}, -{59,29,5}, -{59,29,6}, -{59,29,7}, -{59,29,8}, -{59,29,9}, -{59,29,10}, -{59,29,11}, -{59,29,12}, -{59,29,13}, -{59,29,14}, -{59,29,15}, -{59,29,16}, -{59,29,17}, -{59,29,18}, -{59,29,19}, -{59,29,20}, -{59,29,21}, -{59,29,22}, -{59,29,23}, -{59,29,24}, -{59,29,25}, -{59,29,26}, -{59,29,27}, -{59,29,28}, -{59,29,29}, -{59,29,30}, -{59,29,31}, -{59,29,32}, -{59,29,33}, -{59,29,34}, -{59,29,35}, -{59,29,36}, -{59,29,37}, -{59,29,38}, -{59,29,39}, -{59,29,40}, -{59,29,41}, -{59,29,42}, -{59,29,43}, -{59,29,44}, -{59,29,45}, -{59,29,46}, -{59,29,47}, -{59,29,48}, -{59,29,49}, -{59,29,50}, -{59,29,51}, -{59,29,52}, -{59,29,53}, -{59,29,54}, -{59,29,55}, -{59,29,56}, -{59,29,57}, -{59,29,58}, -{59,29,59}, -{59,29,60}, -{59,29,61}, -{59,29,62}, -{59,29,63}, -{59,29,64}, -{59,29,65}, -{59,29,66}, -{59,30,-63}, -{59,30,-62}, -{59,30,-61}, -{59,30,-60}, -{59,30,-59}, -{59,30,-58}, -{59,30,-57}, -{59,30,-56}, -{59,30,-55}, -{59,30,-54}, -{59,30,-53}, -{59,30,-52}, -{59,30,-51}, -{59,30,-50}, -{59,30,-49}, -{59,30,-48}, -{59,30,-47}, -{59,30,-46}, -{59,30,-45}, -{59,30,-44}, -{59,30,-43}, -{59,30,-42}, -{59,30,-41}, -{59,30,-40}, -{59,30,-39}, -{59,30,-38}, -{59,30,-37}, -{59,30,-36}, -{59,30,-35}, -{59,30,-34}, -{59,30,-33}, -{59,30,-32}, -{59,30,-31}, -{59,30,-30}, -{59,30,-29}, -{59,30,-28}, -{59,30,-27}, -{59,30,-26}, -{59,30,-25}, -{59,30,-24}, -{59,30,-23}, -{59,30,-22}, -{59,30,-21}, -{59,30,-20}, -{59,30,-19}, -{59,30,-18}, -{59,30,-17}, -{59,30,-16}, -{59,30,-15}, -{59,30,-14}, -{59,30,-13}, -{59,30,-12}, -{59,30,-11}, -{59,30,-10}, -{59,30,-9}, -{59,30,-8}, -{59,30,-7}, -{59,30,-6}, -{59,30,-5}, -{59,30,-4}, -{59,30,-3}, -{59,30,-2}, -{59,30,-1}, -{59,30,0}, -{59,30,1}, -{59,30,2}, -{59,30,3}, -{59,30,4}, -{59,30,5}, -{59,30,6}, -{59,30,7}, -{59,30,8}, -{59,30,9}, -{59,30,10}, -{59,30,11}, -{59,30,12}, -{59,30,13}, -{59,30,14}, -{59,30,15}, -{59,30,16}, -{59,30,17}, -{59,30,18}, -{59,30,19}, -{59,30,20}, -{59,30,21}, -{59,30,22}, -{59,30,23}, -{59,30,24}, -{59,30,25}, -{59,30,26}, -{59,30,27}, -{59,30,28}, -{59,30,29}, -{59,30,30}, -{59,30,31}, -{59,30,32}, -{59,30,33}, -{59,30,34}, -{59,30,35}, -{59,30,36}, -{59,30,37}, -{59,30,38}, -{59,30,39}, -{59,30,40}, -{59,30,41}, -{59,30,42}, -{59,30,43}, -{59,30,44}, -{59,30,45}, -{59,30,46}, -{59,30,47}, -{59,30,48}, -{59,30,49}, -{59,30,50}, -{59,30,51}, -{59,30,52}, -{59,30,53}, -{59,30,54}, -{59,30,55}, -{59,30,56}, -{59,30,57}, -{59,30,58}, -{59,30,59}, -{59,30,60}, -{59,30,61}, -{59,30,62}, -{59,30,63}, -{59,30,64}, -{59,30,65}, -{59,30,66}, -{59,31,-63}, -{59,31,-62}, -{59,31,-61}, -{59,31,-60}, -{59,31,-59}, -{59,31,-58}, -{59,31,-57}, -{59,31,-56}, -{59,31,-55}, -{59,31,-54}, -{59,31,-53}, -{59,31,-52}, -{59,31,-51}, -{59,31,-50}, -{59,31,-49}, -{59,31,-48}, -{59,31,-47}, -{59,31,-46}, -{59,31,-45}, -{59,31,-44}, -{59,31,-43}, -{59,31,-42}, -{59,31,-41}, -{59,31,-40}, -{59,31,-39}, -{59,31,-38}, -{59,31,-37}, -{59,31,-36}, -{59,31,-35}, -{59,31,-34}, -{59,31,-33}, -{59,31,-32}, -{59,31,-31}, -{59,31,-30}, -{59,31,-29}, -{59,31,-28}, -{59,31,-27}, -{59,31,-26}, -{59,31,-25}, -{59,31,-24}, -{59,31,-23}, -{59,31,-22}, -{59,31,-21}, -{59,31,-20}, -{59,31,-19}, -{59,31,-18}, -{59,31,-17}, -{59,31,-16}, -{59,31,-15}, -{59,31,-14}, -{59,31,-13}, -{59,31,-12}, -{59,31,-11}, -{59,31,-10}, -{59,31,-9}, -{59,31,-8}, -{59,31,-7}, -{59,31,-6}, -{59,31,-5}, -{59,31,-4}, -{59,31,-3}, -{59,31,-2}, -{59,31,-1}, -{59,31,0}, -{59,31,1}, -{59,31,2}, -{59,31,3}, -{59,31,4}, -{59,31,5}, -{59,31,6}, -{59,31,7}, -{59,31,8}, -{59,31,9}, -{59,31,10}, -{59,31,11}, -{59,31,12}, -{59,31,13}, -{59,31,14}, -{59,31,15}, -{59,31,16}, -{59,31,17}, -{59,31,18}, -{59,31,19}, -{59,31,20}, -{59,31,21}, -{59,31,22}, -{59,31,23}, -{59,31,24}, -{59,31,25}, -{59,31,26}, -{59,31,27}, -{59,31,28}, -{59,31,29}, -{59,31,30}, -{59,31,31}, -{59,31,32}, -{59,31,33}, -{59,31,34}, -{59,31,35}, -{59,31,36}, -{59,31,37}, -{59,31,38}, -{59,31,39}, -{59,31,40}, -{59,31,41}, -{59,31,42}, -{59,31,43}, -{59,31,44}, -{59,31,45}, -{59,31,46}, -{59,31,47}, -{59,31,48}, -{59,31,49}, -{59,31,50}, -{59,31,51}, -{59,31,52}, -{59,31,53}, -{59,31,54}, -{59,31,55}, -{59,31,56}, -{59,31,57}, -{59,31,58}, -{59,31,59}, -{59,31,60}, -{59,31,61}, -{59,31,62}, -{59,31,63}, -{59,31,64}, -{59,31,65}, -{59,31,66}, -{59,32,-63}, -{59,32,-62}, -{59,32,-61}, -{59,32,-60}, -{59,32,-59}, -{59,32,-58}, -{59,32,-57}, -{59,32,-56}, -{59,32,-55}, -{59,32,-54}, -{59,32,-53}, -{59,32,-52}, -{59,32,-51}, -{59,32,-50}, -{59,32,-49}, -{59,32,-48}, -{59,32,-47}, -{59,32,-46}, -{59,32,-45}, -{59,32,-44}, -{59,32,-43}, -{59,32,-42}, -{59,32,-41}, -{59,32,-40}, -{59,32,-39}, -{59,32,-38}, -{59,32,-37}, -{59,32,-36}, -{59,32,-35}, -{59,32,-34}, -{59,32,-33}, -{59,32,-32}, -{59,32,-31}, -{59,32,-30}, -{59,32,-29}, -{59,32,-28}, -{59,32,-27}, -{59,32,-26}, -{59,32,-25}, -{59,32,-24}, -{59,32,-23}, -{59,32,-22}, -{59,32,-21}, -{59,32,-20}, -{59,32,-19}, -{59,32,-18}, -{59,32,-17}, -{59,32,-16}, -{59,32,-15}, -{59,32,-14}, -{59,32,-13}, -{59,32,-12}, -{59,32,-11}, -{59,32,-10}, -{59,32,-9}, -{59,32,-8}, -{59,32,-7}, -{59,32,-6}, -{59,32,-5}, -{59,32,-4}, -{59,32,-3}, -{59,32,-2}, -{59,32,-1}, -{59,32,0}, -{59,32,1}, -{59,32,2}, -{59,32,3}, -{59,32,4}, -{59,32,5}, -{59,32,6}, -{59,32,7}, -{59,32,8}, -{59,32,9}, -{59,32,10}, -{59,32,11}, -{59,32,12}, -{59,32,13}, -{59,32,14}, -{59,32,15}, -{59,32,16}, -{59,32,17}, -{59,32,18}, -{59,32,19}, -{59,32,20}, -{59,32,21}, -{59,32,22}, -{59,32,23}, -{59,32,24}, -{59,32,25}, -{59,32,26}, -{59,32,27}, -{59,32,28}, -{59,32,29}, -{59,32,30}, -{59,32,31}, -{59,32,32}, -{59,32,33}, -{59,32,34}, -{59,32,35}, -{59,32,36}, -{59,32,37}, -{59,32,38}, -{59,32,39}, -{59,32,40}, -{59,32,41}, -{59,32,42}, -{59,32,43}, -{59,32,44}, -{59,32,45}, -{59,32,46}, -{59,32,47}, -{59,32,48}, -{59,32,49}, -{59,32,50}, -{59,32,51}, -{59,32,52}, -{59,32,53}, -{59,32,54}, -{59,32,55}, -{59,32,56}, -{59,32,57}, -{59,32,58}, -{59,32,59}, -{59,32,60}, -{59,32,61}, -{59,32,62}, -{59,32,63}, -{59,32,64}, -{59,32,65}, -{59,32,66}, -{59,33,-63}, -{59,33,-62}, -{59,33,-61}, -{59,33,-60}, -{59,33,-59}, -{59,33,-58}, -{59,33,-57}, -{59,33,-56}, -{59,33,-55}, -{59,33,-54}, -{59,33,-53}, -{59,33,-52}, -{59,33,-51}, -{59,33,-50}, -{59,33,-49}, -{59,33,-48}, -{59,33,-47}, -{59,33,-46}, -{59,33,-45}, -{59,33,-44}, -{59,33,-43}, -{59,33,-42}, -{59,33,-41}, -{59,33,-40}, -{59,33,-39}, -{59,33,-38}, -{59,33,-37}, -{59,33,-36}, -{59,33,-35}, -{59,33,-34}, -{59,33,-33}, -{59,33,-32}, -{59,33,-31}, -{59,33,-30}, -{59,33,-29}, -{59,33,-28}, -{59,33,-27}, -{59,33,-26}, -{59,33,-25}, -{59,33,-24}, -{59,33,-23}, -{59,33,-22}, -{59,33,-21}, -{59,33,-20}, -{59,33,-19}, -{59,33,-18}, -{59,33,-17}, -{59,33,-16}, -{59,33,-15}, -{59,33,-14}, -{59,33,-13}, -{59,33,-12}, -{59,33,-11}, -{59,33,-10}, -{59,33,-9}, -{59,33,-8}, -{59,33,-7}, -{59,33,-6}, -{59,33,-5}, -{59,33,-4}, -{59,33,-3}, -{59,33,-2}, -{59,33,-1}, -{59,33,0}, -{59,33,1}, -{59,33,2}, -{59,33,3}, -{59,33,4}, -{59,33,5}, -{59,33,6}, -{59,33,7}, -{59,33,8}, -{59,33,9}, -{59,33,10}, -{59,33,11}, -{59,33,12}, -{59,33,13}, -{59,33,14}, -{59,33,15}, -{59,33,16}, -{59,33,17}, -{59,33,18}, -{59,33,19}, -{59,33,20}, -{59,33,21}, -{59,33,22}, -{59,33,23}, -{59,33,24}, -{59,33,25}, -{59,33,26}, -{59,33,27}, -{59,33,28}, -{59,33,29}, -{59,33,30}, -{59,33,31}, -{59,33,32}, -{59,33,33}, -{59,33,34}, -{59,33,35}, -{59,33,36}, -{59,33,37}, -{59,33,38}, -{59,33,39}, -{59,33,40}, -{59,33,41}, -{59,33,42}, -{59,33,43}, -{59,33,44}, -{59,33,45}, -{59,33,46}, -{59,33,47}, -{59,33,48}, -{59,33,49}, -{59,33,50}, -{59,33,51}, -{59,33,52}, -{59,33,53}, -{59,33,54}, -{59,33,55}, -{59,33,56}, -{59,33,57}, -{59,33,58}, -{59,33,59}, -{59,33,60}, -{59,33,61}, -{59,33,62}, -{59,33,63}, -{59,33,64}, -{59,33,65}, -{59,33,66}, -{59,34,-63}, -{59,34,-62}, -{59,34,-61}, -{59,34,-60}, -{59,34,-59}, -{59,34,-58}, -{59,34,-57}, -{59,34,-56}, -{59,34,-55}, -{59,34,-54}, -{59,34,-53}, -{59,34,-52}, -{59,34,-51}, -{59,34,-50}, -{59,34,-49}, -{59,34,-48}, -{59,34,-47}, -{59,34,-46}, -{59,34,-45}, -{59,34,-44}, -{59,34,-43}, -{59,34,-42}, -{59,34,-41}, -{59,34,-40}, -{59,34,-39}, -{59,34,-38}, -{59,34,-37}, -{59,34,-36}, -{59,34,-35}, -{59,34,-34}, -{59,34,-33}, -{59,34,-32}, -{59,34,-31}, -{59,34,-30}, -{59,34,-29}, -{59,34,-28}, -{59,34,-27}, -{59,34,-26}, -{59,34,-25}, -{59,34,-24}, -{59,34,-23}, -{59,34,-22}, -{59,34,-21}, -{59,34,-20}, -{59,34,-19}, -{59,34,-18}, -{59,34,-17}, -{59,34,-16}, -{59,34,-15}, -{59,34,-14}, -{59,34,-13}, -{59,34,-12}, -{59,34,-11}, -{59,34,-10}, -{59,34,-9}, -{59,34,-8}, -{59,34,-7}, -{59,34,-6}, -{59,34,-5}, -{59,34,-4}, -{59,34,-3}, -{59,34,-2}, -{59,34,-1}, -{59,34,0}, -{59,34,1}, -{59,34,2}, -{59,34,3}, -{59,34,4}, -{59,34,5}, -{59,34,6}, -{59,34,7}, -{59,34,8}, -{59,34,9}, -{59,34,10}, -{59,34,11}, -{59,34,12}, -{59,34,13}, -{59,34,14}, -{59,34,15}, -{59,34,16}, -{59,34,17}, -{59,34,18}, -{59,34,19}, -{59,34,20}, -{59,34,21}, -{59,34,22}, -{59,34,23}, -{59,34,24}, -{59,34,25}, -{59,34,26}, -{59,34,27}, -{59,34,28}, -{59,34,29}, -{59,34,30}, -{59,34,31}, -{59,34,32}, -{59,34,33}, -{59,34,34}, -{59,34,35}, -{59,34,36}, -{59,34,37}, -{59,34,38}, -{59,34,39}, -{59,34,40}, -{59,34,41}, -{59,34,42}, -{59,34,43}, -{59,34,44}, -{59,34,45}, -{59,34,46}, -{59,34,47}, -{59,34,48}, -{59,34,49}, -{59,34,50}, -{59,34,51}, -{59,34,52}, -{59,34,53}, -{59,34,54}, -{59,34,55}, -{59,34,56}, -{59,34,57}, -{59,34,58}, -{59,34,59}, -{59,34,60}, -{59,34,61}, -{59,34,62}, -{59,34,63}, -{59,34,64}, -{59,34,65}, -{59,34,66}, -{59,35,-63}, -{59,35,-62}, -{59,35,-61}, -{59,35,-60}, -{59,35,-59}, -{59,35,-58}, -{59,35,-57}, -{59,35,-56}, -{59,35,-55}, -{59,35,-54}, -{59,35,-53}, -{59,35,-52}, -{59,35,-51}, -{59,35,-50}, -{59,35,-49}, -{59,35,-48}, -{59,35,-47}, -{59,35,-46}, -{59,35,-45}, -{59,35,-44}, -{59,35,-43}, -{59,35,-42}, -{59,35,-41}, -{59,35,-40}, -{59,35,-39}, -{59,35,-38}, -{59,35,-37}, -{59,35,-36}, -{59,35,-35}, -{59,35,-34}, -{59,35,-33}, -{59,35,-32}, -{59,35,-31}, -{59,35,-30}, -{59,35,-29}, -{59,35,-28}, -{59,35,-27}, -{59,35,-26}, -{59,35,-25}, -{59,35,-24}, -{59,35,-23}, -{59,35,-22}, -{59,35,-21}, -{59,35,-20}, -{59,35,-19}, -{59,35,-18}, -{59,35,-17}, -{59,35,-16}, -{59,35,-15}, -{59,35,-14}, -{59,35,-13}, -{59,35,-12}, -{59,35,-11}, -{59,35,-10}, -{59,35,-9}, -{59,35,-8}, -{59,35,-7}, -{59,35,-6}, -{59,35,-5}, -{59,35,-4}, -{59,35,-3}, -{59,35,-2}, -{59,35,-1}, -{59,35,0}, -{59,35,1}, -{59,35,2}, -{59,35,3}, -{59,35,4}, -{59,35,5}, -{59,35,6}, -{59,35,7}, -{59,35,8}, -{59,35,9}, -{59,35,10}, -{59,35,11}, -{59,35,12}, -{59,35,13}, -{59,35,14}, -{59,35,15}, -{59,35,16}, -{59,35,17}, -{59,35,18}, -{59,35,19}, -{59,35,20}, -{59,35,21}, -{59,35,22}, -{59,35,23}, -{59,35,24}, -{59,35,25}, -{59,35,26}, -{59,35,27}, -{59,35,28}, -{59,35,29}, -{59,35,30}, -{59,35,31}, -{59,35,32}, -{59,35,33}, -{59,35,34}, -{59,35,35}, -{59,35,36}, -{59,35,37}, -{59,35,38}, -{59,35,39}, -{59,35,40}, -{59,35,41}, -{59,35,42}, -{59,35,43}, -{59,35,44}, -{59,35,45}, -{59,35,46}, -{59,35,47}, -{59,35,48}, -{59,35,49}, -{59,35,50}, -{59,35,51}, -{59,35,52}, -{59,35,53}, -{59,35,54}, -{59,35,55}, -{59,35,56}, -{59,35,57}, -{59,35,58}, -{59,35,59}, -{59,35,60}, -{59,35,61}, -{59,35,62}, -{59,35,63}, -{59,35,64}, -{59,35,65}, -{59,35,66}, -{59,36,-63}, -{59,36,-62}, -{59,36,-61}, -{59,36,-60}, -{59,36,-59}, -{59,36,-58}, -{59,36,-57}, -{59,36,-56}, -{59,36,-55}, -{59,36,-54}, -{59,36,-53}, -{59,36,-52}, -{59,36,-51}, -{59,36,-50}, -{59,36,-49}, -{59,36,-48}, -{59,36,-47}, -{59,36,-46}, -{59,36,-45}, -{59,36,-44}, -{59,36,-43}, -{59,36,-42}, -{59,36,-41}, -{59,36,-40}, -{59,36,-39}, -{59,36,-38}, -{59,36,-37}, -{59,36,-36}, -{59,36,-35}, -{59,36,-34}, -{59,36,-33}, -{59,36,-32}, -{59,36,-31}, -{59,36,-30}, -{59,36,-29}, -{59,36,-28}, -{59,36,-27}, -{59,36,-26}, -{59,36,-25}, -{59,36,-24}, -{59,36,-23}, -{59,36,-22}, -{59,36,-21}, -{59,36,-20}, -{59,36,-19}, -{59,36,-18}, -{59,36,-17}, -{59,36,-16}, -{59,36,-15}, -{59,36,-14}, -{59,36,-13}, -{59,36,-12}, -{59,36,-11}, -{59,36,-10}, -{59,36,-9}, -{59,36,-8}, -{59,36,-7}, -{59,36,-6}, -{59,36,-5}, -{59,36,-4}, -{59,36,-3}, -{59,36,-2}, -{59,36,-1}, -{59,36,0}, -{59,36,1}, -{59,36,2}, -{59,36,3}, -{59,36,4}, -{59,36,5}, -{59,36,6}, -{59,36,7}, -{59,36,8}, -{59,36,9}, -{59,36,10}, -{59,36,11}, -{59,36,12}, -{59,36,13}, -{59,36,14}, -{59,36,15}, -{59,36,16}, -{59,36,17}, -{59,36,18}, -{59,36,19}, -{59,36,20}, -{59,36,21}, -{59,36,22}, -{59,36,23}, -{59,36,24}, -{59,36,25}, -{59,36,26}, -{59,36,27}, -{59,36,28}, -{59,36,29}, -{59,36,30}, -{59,36,31}, -{59,36,32}, -{59,36,33}, -{59,36,34}, -{59,36,35}, -{59,36,36}, -{59,36,37}, -{59,36,38}, -{59,36,39}, -{59,36,40}, -{59,36,41}, -{59,36,42}, -{59,36,43}, -{59,36,44}, -{59,36,45}, -{59,36,46}, -{59,36,47}, -{59,36,48}, -{59,36,49}, -{59,36,50}, -{59,36,51}, -{59,36,52}, -{59,36,53}, -{59,36,54}, -{59,36,55}, -{59,36,56}, -{59,36,57}, -{59,36,58}, -{59,36,59}, -{59,36,60}, -{59,36,61}, -{59,36,62}, -{59,36,63}, -{59,36,64}, -{59,36,65}, -{59,36,66}, -{59,37,-63}, -{59,37,-62}, -{59,37,-61}, -{59,37,-60}, -{59,37,-59}, -{59,37,-58}, -{59,37,-57}, -{59,37,-56}, -{59,37,-55}, -{59,37,-54}, -{59,37,-53}, -{59,37,-52}, -{59,37,-51}, -{59,37,-50}, -{59,37,-49}, -{59,37,-48}, -{59,37,-47}, -{59,37,-46}, -{59,37,-45}, -{59,37,-44}, -{59,37,-43}, -{59,37,-42}, -{59,37,-41}, -{59,37,-40}, -{59,37,-39}, -{59,37,-38}, -{59,37,-37}, -{59,37,-36}, -{59,37,-35}, -{59,37,-34}, -{59,37,-33}, -{59,37,-32}, -{59,37,-31}, -{59,37,-30}, -{59,37,-29}, -{59,37,-28}, -{59,37,-27}, -{59,37,-26}, -{59,37,-25}, -{59,37,-24}, -{59,37,-23}, -{59,37,-22}, -{59,37,-21}, -{59,37,-20}, -{59,37,-19}, -{59,37,-18}, -{59,37,-17}, -{59,37,-16}, -{59,37,-15}, -{59,37,-14}, -{59,37,-13}, -{59,37,-12}, -{59,37,-11}, -{59,37,-10}, -{59,37,-9}, -{59,37,-8}, -{59,37,-7}, -{59,37,-6}, -{59,37,-5}, -{59,37,-4}, -{59,37,-3}, -{59,37,-2}, -{59,37,-1}, -{59,37,0}, -{59,37,1}, -{59,37,2}, -{59,37,3}, -{59,37,4}, -{59,37,5}, -{59,37,6}, -{59,37,7}, -{59,37,8}, -{59,37,9}, -{59,37,10}, -{59,37,11}, -{59,37,12}, -{59,37,13}, -{59,37,14}, -{59,37,15}, -{59,37,16}, -{59,37,17}, -{59,37,18}, -{59,37,19}, -{59,37,20}, -{59,37,21}, -{59,37,22}, -{59,37,23}, -{59,37,24}, -{59,37,25}, -{59,37,26}, -{59,37,27}, -{59,37,28}, -{59,37,29}, -{59,37,30}, -{59,37,31}, -{59,37,32}, -{59,37,33}, -{59,37,34}, -{59,37,35}, -{59,37,36}, -{59,37,37}, -{59,37,38}, -{59,37,39}, -{59,37,40}, -{59,37,41}, -{59,37,42}, -{59,37,43}, -{59,37,44}, -{59,37,45}, -{59,37,46}, -{59,37,47}, -{59,37,48}, -{59,37,49}, -{59,37,50}, -{59,37,51}, -{59,37,52}, -{59,37,53}, -{59,37,54}, -{59,37,55}, -{59,37,56}, -{59,37,57}, -{59,37,58}, -{59,37,59}, -{59,37,60}, -{59,37,61}, -{59,37,62}, -{59,37,63}, -{59,37,64}, -{59,37,65}, -{59,37,66}, -{59,38,-63}, -{59,38,-62}, -{59,38,-61}, -{59,38,-60}, -{59,38,-59}, -{59,38,-58}, -{59,38,-57}, -{59,38,-56}, -{59,38,-55}, -{59,38,-54}, -{59,38,-53}, -{59,38,-52}, -{59,38,-51}, -{59,38,-50}, -{59,38,-49}, -{59,38,-48}, -{59,38,-47}, -{59,38,-46}, -{59,38,-45}, -{59,38,-44}, -{59,38,-43}, -{59,38,-42}, -{59,38,-41}, -{59,38,-40}, -{59,38,-39}, -{59,38,-38}, -{59,38,-37}, -{59,38,-36}, -{59,38,-35}, -{59,38,-34}, -{59,38,-33}, -{59,38,-32}, -{59,38,-31}, -{59,38,-30}, -{59,38,-29}, -{59,38,-28}, -{59,38,-27}, -{59,38,-26}, -{59,38,-25}, -{59,38,-24}, -{59,38,-23}, -{59,38,-22}, -{59,38,-21}, -{59,38,-20}, -{59,38,-19}, -{59,38,-18}, -{59,38,-17}, -{59,38,-16}, -{59,38,-15}, -{59,38,-14}, -{59,38,-13}, -{59,38,-12}, -{59,38,-11}, -{59,38,-10}, -{59,38,-9}, -{59,38,-8}, -{59,38,-7}, -{59,38,-6}, -{59,38,-5}, -{59,38,-4}, -{59,38,-3}, -{59,38,-2}, -{59,38,-1}, -{59,38,0}, -{59,38,1}, -{59,38,2}, -{59,38,3}, -{59,38,4}, -{59,38,5}, -{59,38,6}, -{59,38,7}, -{59,38,8}, -{59,38,9}, -{59,38,10}, -{59,38,11}, -{59,38,12}, -{59,38,13}, -{59,38,14}, -{59,38,15}, -{59,38,16}, -{59,38,17}, -{59,38,18}, -{59,38,19}, -{59,38,20}, -{59,38,21}, -{59,38,22}, -{59,38,23}, -{59,38,24}, -{59,38,25}, -{59,38,26}, -{59,38,27}, -{59,38,28}, -{59,38,29}, -{59,38,30}, -{59,38,31}, -{59,38,32}, -{59,38,33}, -{59,38,34}, -{59,38,35}, -{59,38,36}, -{59,38,37}, -{59,38,38}, -{59,38,39}, -{59,38,40}, -{59,38,41}, -{59,38,42}, -{59,38,43}, -{59,38,44}, -{59,38,45}, -{59,38,46}, -{59,38,47}, -{59,38,48}, -{59,38,49}, -{59,38,50}, -{59,38,51}, -{59,38,52}, -{59,38,53}, -{59,38,54}, -{59,38,55}, -{59,38,56}, -{59,38,57}, -{59,38,58}, -{59,38,59}, -{59,38,60}, -{59,38,61}, -{59,38,62}, -{59,38,63}, -{59,38,64}, -{59,38,65}, -{59,38,66}, -{59,39,-63}, -{59,39,-62}, -{59,39,-61}, -{59,39,-60}, -{59,39,-59}, -{59,39,-58}, -{59,39,-57}, -{59,39,-56}, -{59,39,-55}, -{59,39,-54}, -{59,39,-53}, -{59,39,-52}, -{59,39,-51}, -{59,39,-50}, -{59,39,-49}, -{59,39,-48}, -{59,39,-47}, -{59,39,-46}, -{59,39,-45}, -{59,39,-44}, -{59,39,-43}, -{59,39,-42}, -{59,39,-41}, -{59,39,-40}, -{59,39,-39}, -{59,39,-38}, -{59,39,-37}, -{59,39,-36}, -{59,39,-35}, -{59,39,-34}, -{59,39,-33}, -{59,39,-32}, -{59,39,-31}, -{59,39,-30}, -{59,39,-29}, -{59,39,-28}, -{59,39,-27}, -{59,39,-26}, -{59,39,-25}, -{59,39,-24}, -{59,39,-23}, -{59,39,-22}, -{59,39,-21}, -{59,39,-20}, -{59,39,-19}, -{59,39,-18}, -{59,39,-17}, -{59,39,-16}, -{59,39,-15}, -{59,39,-14}, -{59,39,-13}, -{59,39,-12}, -{59,39,-11}, -{59,39,-10}, -{59,39,-9}, -{59,39,-8}, -{59,39,-7}, -{59,39,-6}, -{59,39,-5}, -{59,39,-4}, -{59,39,-3}, -{59,39,-2}, -{59,39,-1}, -{59,39,0}, -{59,39,1}, -{59,39,2}, -{59,39,3}, -{59,39,4}, -{59,39,5}, -{59,39,6}, -{59,39,7}, -{59,39,8}, -{59,39,9}, -{59,39,10}, -{59,39,11}, -{59,39,12}, -{59,39,13}, -{59,39,14}, -{59,39,15}, -{59,39,16}, -{59,39,17}, -{59,39,18}, -{59,39,19}, -{59,39,20}, -{59,39,21}, -{59,39,22}, -{59,39,23}, -{59,39,24}, -{59,39,25}, -{59,39,26}, -{59,39,27}, -{59,39,28}, -{59,39,29}, -{59,39,30}, -{59,39,31}, -{59,39,32}, -{59,39,33}, -{59,39,34}, -{59,39,35}, -{59,39,36}, -{59,39,37}, -{59,39,38}, -{59,39,39}, -{59,39,40}, -{59,39,41}, -{59,39,42}, -{59,39,43}, -{59,39,44}, -{59,39,45}, -{59,39,46}, -{59,39,47}, -{59,39,48}, -{59,39,49}, -{59,39,50}, -{59,39,51}, -{59,39,52}, -{59,39,53}, -{59,39,54}, -{59,39,55}, -{59,39,56}, -{59,39,57}, -{59,39,58}, -{59,39,59}, -{59,39,60}, -{59,39,61}, -{59,39,62}, -{59,39,63}, -{59,39,64}, -{59,39,65}, -{59,39,66}, -{59,39,67}, -{59,40,-63}, -{59,40,-62}, -{59,40,-61}, -{59,40,-60}, -{59,40,-59}, -{59,40,-58}, -{59,40,-57}, -{59,40,-56}, -{59,40,-55}, -{59,40,-54}, -{59,40,-53}, -{59,40,-52}, -{59,40,-51}, -{59,40,-50}, -{59,40,-49}, -{59,40,-48}, -{59,40,-47}, -{59,40,-46}, -{59,40,-45}, -{59,40,-44}, -{59,40,-43}, -{59,40,-42}, -{59,40,-41}, -{59,40,-40}, -{59,40,-39}, -{59,40,-38}, -{59,40,-37}, -{59,40,-36}, -{59,40,-35}, -{59,40,-34}, -{59,40,-33}, -{59,40,-32}, -{59,40,-31}, -{59,40,-30}, -{59,40,-29}, -{59,40,-28}, -{59,40,-27}, -{59,40,-26}, -{59,40,-25}, -{59,40,-24}, -{59,40,-23}, -{59,40,-22}, -{59,40,-21}, -{59,40,-20}, -{59,40,-19}, -{59,40,-18}, -{59,40,-17}, -{59,40,-16}, -{59,40,-15}, -{59,40,-14}, -{59,40,-13}, -{59,40,-12}, -{59,40,-11}, -{59,40,-10}, -{59,40,-9}, -{59,40,-8}, -{59,40,-7}, -{59,40,-6}, -{59,40,-5}, -{59,40,-4}, -{59,40,-3}, -{59,40,-2}, -{59,40,-1}, -{59,40,0}, -{59,40,1}, -{59,40,2}, -{59,40,3}, -{59,40,4}, -{59,40,5}, -{59,40,6}, -{59,40,7}, -{59,40,8}, -{59,40,9}, -{59,40,10}, -{59,40,11}, -{59,40,12}, -{59,40,13}, -{59,40,14}, -{59,40,15}, -{59,40,16}, -{59,40,17}, -{59,40,18}, -{59,40,19}, -{59,40,20}, -{59,40,21}, -{59,40,22}, -{59,40,23}, -{59,40,24}, -{59,40,25}, -{59,40,26}, -{59,40,27}, -{59,40,28}, -{59,40,29}, -{59,40,30}, -{59,40,31}, -{59,40,32}, -{59,40,33}, -{59,40,34}, -{59,40,35}, -{59,40,36}, -{59,40,37}, -{59,40,38}, -{59,40,39}, -{59,40,40}, -{59,40,41}, -{59,40,42}, -{59,40,43}, -{59,40,44}, -{59,40,45}, -{59,40,46}, -{59,40,47}, -{59,40,48}, -{59,40,49}, -{59,40,50}, -{59,40,51}, -{59,40,52}, -{59,40,53}, -{59,40,54}, -{59,40,55}, -{59,40,56}, -{59,40,57}, -{59,40,58}, -{59,40,59}, -{59,40,60}, -{59,40,61}, -{59,40,62}, -{59,40,63}, -{59,40,64}, -{59,40,65}, -{59,40,66}, -{59,40,67}, -{59,41,-63}, -{59,41,-62}, -{59,41,-61}, -{59,41,-60}, -{59,41,-59}, -{59,41,-58}, -{59,41,-57}, -{59,41,-56}, -{59,41,-55}, -{59,41,-54}, -{59,41,-53}, -{59,41,-52}, -{59,41,-51}, -{59,41,-50}, -{59,41,-49}, -{59,41,-48}, -{59,41,-47}, -{59,41,-46}, -{59,41,-45}, -{59,41,-44}, -{59,41,-43}, -{59,41,-42}, -{59,41,-41}, -{59,41,-40}, -{59,41,-39}, -{59,41,-38}, -{59,41,-37}, -{59,41,-36}, -{59,41,-35}, -{59,41,-34}, -{59,41,-33}, -{59,41,-32}, -{59,41,-31}, -{59,41,-30}, -{59,41,-29}, -{59,41,-28}, -{59,41,-27}, -{59,41,-26}, -{59,41,-25}, -{59,41,-24}, -{59,41,-23}, -{59,41,-22}, -{59,41,-21}, -{59,41,-20}, -{59,41,-19}, -{59,41,-18}, -{59,41,-17}, -{59,41,-16}, -{59,41,-15}, -{59,41,-14}, -{59,41,-13}, -{59,41,-12}, -{59,41,-11}, -{59,41,-10}, -{59,41,-9}, -{59,41,-8}, -{59,41,-7}, -{59,41,-6}, -{59,41,-5}, -{59,41,-4}, -{59,41,-3}, -{59,41,-2}, -{59,41,-1}, -{59,41,0}, -{59,41,1}, -{59,41,2}, -{59,41,3}, -{59,41,4}, -{59,41,5}, -{59,41,6}, -{59,41,7}, -{59,41,8}, -{59,41,9}, -{59,41,10}, -{59,41,11}, -{59,41,12}, -{59,41,13}, -{59,41,14}, -{59,41,15}, -{59,41,16}, -{59,41,17}, -{59,41,18}, -{59,41,19}, -{59,41,20}, -{59,41,21}, -{59,41,22}, -{59,41,23}, -{59,41,24}, -{59,41,25}, -{59,41,26}, -{59,41,27}, -{59,41,28}, -{59,41,29}, -{59,41,30}, -{59,41,31}, -{59,41,32}, -{59,41,33}, -{59,41,34}, -{59,41,35}, -{59,41,36}, -{59,41,37}, -{59,41,38}, -{59,41,39}, -{59,41,40}, -{59,41,41}, -{59,41,42}, -{59,41,43}, -{59,41,44}, -{59,41,45}, -{59,41,46}, -{59,41,47}, -{59,41,48}, -{59,41,49}, -{59,41,50}, -{59,41,51}, -{59,41,52}, -{59,41,53}, -{59,41,54}, -{59,41,55}, -{59,41,56}, -{59,41,57}, -{59,41,58}, -{59,41,59}, -{59,41,60}, -{59,41,61}, -{59,41,62}, -{59,41,63}, -{59,41,64}, -{59,41,65}, -{59,41,66}, -{59,41,67}, -{59,42,-63}, -{59,42,-62}, -{59,42,-61}, -{59,42,-60}, -{59,42,-59}, -{59,42,-58}, -{59,42,-57}, -{59,42,-56}, -{59,42,-55}, -{59,42,-54}, -{59,42,-53}, -{59,42,-52}, -{59,42,-51}, -{59,42,-50}, -{59,42,-49}, -{59,42,-48}, -{59,42,-47}, -{59,42,-46}, -{59,42,-45}, -{59,42,-44}, -{59,42,-43}, -{59,42,-42}, -{59,42,-41}, -{59,42,-40}, -{59,42,-39}, -{59,42,-38}, -{59,42,-37}, -{59,42,-36}, -{59,42,-35}, -{59,42,-34}, -{59,42,-33}, -{59,42,-32}, -{59,42,-31}, -{59,42,-30}, -{59,42,-29}, -{59,42,-28}, -{59,42,-27}, -{59,42,-26}, -{59,42,-25}, -{59,42,-24}, -{59,42,-23}, -{59,42,-22}, -{59,42,-21}, -{59,42,-20}, -{59,42,-19}, -{59,42,-18}, -{59,42,-17}, -{59,42,-16}, -{59,42,-15}, -{59,42,-14}, -{59,42,-13}, -{59,42,-12}, -{59,42,-11}, -{59,42,-10}, -{59,42,-9}, -{59,42,-8}, -{59,42,-7}, -{59,42,-6}, -{59,42,-5}, -{59,42,-4}, -{59,42,-3}, -{59,42,-2}, -{59,42,-1}, -{59,42,0}, -{59,42,1}, -{59,42,2}, -{59,42,3}, -{59,42,4}, -{59,42,5}, -{59,42,6}, -{59,42,7}, -{59,42,8}, -{59,42,9}, -{59,42,10}, -{59,42,11}, -{59,42,12}, -{59,42,13}, -{59,42,14}, -{59,42,15}, -{59,42,16}, -{59,42,17}, -{59,42,18}, -{59,42,19}, -{59,42,20}, -{59,42,21}, -{59,42,22}, -{59,42,23}, -{59,42,24}, -{59,42,25}, -{59,42,26}, -{59,42,27}, -{59,42,28}, -{59,42,29}, -{59,42,30}, -{59,42,31}, -{59,42,32}, -{59,42,33}, -{59,42,34}, -{59,42,35}, -{59,42,36}, -{59,42,37}, -{59,42,38}, -{59,42,39}, -{59,42,40}, -{59,42,41}, -{59,42,42}, -{59,42,43}, -{59,42,44}, -{59,42,45}, -{59,42,46}, -{59,42,47}, -{59,42,48}, -{59,42,49}, -{59,42,50}, -{59,42,51}, -{59,42,52}, -{59,42,53}, -{59,42,54}, -{59,42,55}, -{59,42,56}, -{59,42,57}, -{59,42,58}, -{59,42,59}, -{59,42,60}, -{59,42,61}, -{59,42,62}, -{59,42,63}, -{59,42,64}, -{59,42,65}, -{59,42,66}, -{59,42,67}, -{59,43,-63}, -{59,43,-62}, -{59,43,-61}, -{59,43,-60}, -{59,43,-59}, -{59,43,-58}, -{59,43,-57}, -{59,43,-56}, -{59,43,-55}, -{59,43,-54}, -{59,43,-53}, -{59,43,-52}, -{59,43,-51}, -{59,43,-50}, -{59,43,-49}, -{59,43,-48}, -{59,43,-47}, -{59,43,-46}, -{59,43,-45}, -{59,43,-44}, -{59,43,-43}, -{59,43,-42}, -{59,43,-41}, -{59,43,-40}, -{59,43,-39}, -{59,43,-38}, -{59,43,-37}, -{59,43,-36}, -{59,43,-35}, -{59,43,-34}, -{59,43,-33}, -{59,43,-32}, -{59,43,-31}, -{59,43,-30}, -{59,43,-29}, -{59,43,-28}, -{59,43,-27}, -{59,43,-26}, -{59,43,-25}, -{59,43,-24}, -{59,43,-23}, -{59,43,-22}, -{59,43,-21}, -{59,43,-20}, -{59,43,-19}, -{59,43,-18}, -{59,43,-17}, -{59,43,-16}, -{59,43,-15}, -{59,43,-14}, -{59,43,-13}, -{59,43,-12}, -{59,43,-11}, -{59,43,-10}, -{59,43,-9}, -{59,43,-8}, -{59,43,-7}, -{59,43,-6}, -{59,43,-5}, -{59,43,-4}, -{59,43,-3}, -{59,43,-2}, -{59,43,-1}, -{59,43,0}, -{59,43,1}, -{59,43,2}, -{59,43,3}, -{59,43,4}, -{59,43,5}, -{59,43,6}, -{59,43,7}, -{59,43,8}, -{59,43,9}, -{59,43,10}, -{59,43,11}, -{59,43,12}, -{59,43,13}, -{59,43,14}, -{59,43,15}, -{59,43,16}, -{59,43,17}, -{59,43,18}, -{59,43,19}, -{59,43,20}, -{59,43,21}, -{59,43,22}, -{59,43,23}, -{59,43,24}, -{59,43,25}, -{59,43,26}, -{59,43,27}, -{59,43,28}, -{59,43,29}, -{59,43,30}, -{59,43,31}, -{59,43,32}, -{59,43,33}, -{59,43,34}, -{59,43,35}, -{59,43,36}, -{59,43,37}, -{59,43,38}, -{59,43,39}, -{59,43,40}, -{59,43,41}, -{59,43,42}, -{59,43,43}, -{59,43,44}, -{59,43,45}, -{59,43,46}, -{59,43,47}, -{59,43,48}, -{59,43,49}, -{59,43,50}, -{59,43,51}, -{59,43,52}, -{59,43,53}, -{59,43,54}, -{59,43,55}, -{59,43,56}, -{59,43,57}, -{59,43,58}, -{59,43,59}, -{59,43,60}, -{59,43,61}, -{59,43,62}, -{59,43,63}, -{59,43,64}, -{59,43,65}, -{59,43,66}, -{59,43,67}, -{59,44,-63}, -{59,44,-62}, -{59,44,-61}, -{59,44,-60}, -{59,44,-59}, -{59,44,-58}, -{59,44,-57}, -{59,44,-56}, -{59,44,-55}, -{59,44,-54}, -{59,44,-53}, -{59,44,-52}, -{59,44,-51}, -{59,44,-50}, -{59,44,-49}, -{59,44,-48}, -{59,44,-47}, -{59,44,-46}, -{59,44,-45}, -{59,44,-44}, -{59,44,-43}, -{59,44,-42}, -{59,44,-41}, -{59,44,-40}, -{59,44,-39}, -{59,44,-38}, -{59,44,-37}, -{59,44,-36}, -{59,44,-35}, -{59,44,-34}, -{59,44,-33}, -{59,44,-32}, -{59,44,-31}, -{59,44,-30}, -{59,44,-29}, -{59,44,-28}, -{59,44,-27}, -{59,44,-26}, -{59,44,-25}, -{59,44,-24}, -{59,44,-23}, -{59,44,-22}, -{59,44,-21}, -{59,44,-20}, -{59,44,-19}, -{59,44,-18}, -{59,44,-17}, -{59,44,-16}, -{59,44,-15}, -{59,44,-14}, -{59,44,-13}, -{59,44,-12}, -{59,44,-11}, -{59,44,-10}, -{59,44,-9}, -{59,44,-8}, -{59,44,-7}, -{59,44,-6}, -{59,44,-5}, -{59,44,-4}, -{59,44,-3}, -{59,44,-2}, -{59,44,-1}, -{59,44,0}, -{59,44,1}, -{59,44,2}, -{59,44,3}, -{59,44,4}, -{59,44,5}, -{59,44,6}, -{59,44,7}, -{59,44,8}, -{59,44,9}, -{59,44,10}, -{59,44,11}, -{59,44,12}, -{59,44,13}, -{59,44,14}, -{59,44,15}, -{59,44,16}, -{59,44,17}, -{59,44,18}, -{59,44,19}, -{59,44,20}, -{59,44,21}, -{59,44,22}, -{59,44,23}, -{59,44,24}, -{59,44,25}, -{59,44,26}, -{59,44,27}, -{59,44,28}, -{59,44,29}, -{59,44,30}, -{59,44,31}, -{59,44,32}, -{59,44,33}, -{59,44,34}, -{59,44,35}, -{59,44,36}, -{59,44,37}, -{59,44,38}, -{59,44,39}, -{59,44,40}, -{59,44,41}, -{59,44,42}, -{59,44,43}, -{59,44,44}, -{59,44,45}, -{59,44,46}, -{59,44,47}, -{59,44,48}, -{59,44,49}, -{59,44,50}, -{59,44,51}, -{59,44,52}, -{59,44,53}, -{59,44,54}, -{59,44,55}, -{59,44,56}, -{59,44,57}, -{59,44,58}, -{59,44,59}, -{59,44,60}, -{59,44,61}, -{59,44,62}, -{59,44,63}, -{59,44,64}, -{59,44,65}, -{59,44,66}, -{59,44,67}, -{59,45,-63}, -{59,45,-62}, -{59,45,-61}, -{59,45,-60}, -{59,45,-59}, -{59,45,-58}, -{59,45,-57}, -{59,45,-56}, -{59,45,-55}, -{59,45,-54}, -{59,45,-53}, -{59,45,-52}, -{59,45,-51}, -{59,45,-50}, -{59,45,-49}, -{59,45,-48}, -{59,45,-47}, -{59,45,-46}, -{59,45,-45}, -{59,45,-44}, -{59,45,-43}, -{59,45,-42}, -{59,45,-41}, -{59,45,-40}, -{59,45,-39}, -{59,45,-38}, -{59,45,-37}, -{59,45,-36}, -{59,45,-35}, -{59,45,-34}, -{59,45,-33}, -{59,45,-32}, -{59,45,-31}, -{59,45,-30}, -{59,45,-29}, -{59,45,-28}, -{59,45,-27}, -{59,45,-26}, -{59,45,-25}, -{59,45,-24}, -{59,45,-23}, -{59,45,-22}, -{59,45,-21}, -{59,45,-20}, -{59,45,-19}, -{59,45,-18}, -{59,45,-17}, -{59,45,-16}, -{59,45,-15}, -{59,45,-14}, -{59,45,-13}, -{59,45,-12}, -{59,45,-11}, -{59,45,-10}, -{59,45,-9}, -{59,45,-8}, -{59,45,-7}, -{59,45,-6}, -{59,45,-5}, -{59,45,-4}, -{59,45,-3}, -{59,45,-2}, -{59,45,-1}, -{59,45,0}, -{59,45,1}, -{59,45,2}, -{59,45,3}, -{59,45,4}, -{59,45,5}, -{59,45,6}, -{59,45,7}, -{59,45,8}, -{59,45,9}, -{59,45,10}, -{59,45,11}, -{59,45,12}, -{59,45,13}, -{59,45,14}, -{59,45,15}, -{59,45,16}, -{59,45,17}, -{59,45,18}, -{59,45,19}, -{59,45,20}, -{59,45,21}, -{59,45,22}, -{59,45,23}, -{59,45,24}, -{59,45,25}, -{59,45,26}, -{59,45,27}, -{59,45,28}, -{59,45,29}, -{59,45,30}, -{59,45,31}, -{59,45,32}, -{59,45,33}, -{59,45,34}, -{59,45,35}, -{59,45,36}, -{59,45,37}, -{59,45,38}, -{59,45,39}, -{59,45,40}, -{59,45,41}, -{59,45,42}, -{59,45,43}, -{59,45,44}, -{59,45,45}, -{59,45,46}, -{59,45,47}, -{59,45,48}, -{59,45,49}, -{59,45,50}, -{59,45,51}, -{59,45,52}, -{59,45,53}, -{59,45,54}, -{59,45,55}, -{59,45,56}, -{59,45,57}, -{59,45,58}, -{59,45,59}, -{59,45,60}, -{59,45,61}, -{59,45,62}, -{59,45,63}, -{59,45,64}, -{59,45,65}, -{59,45,66}, -{59,45,67}, -{59,46,-63}, -{59,46,-62}, -{59,46,-61}, -{59,46,-60}, -{59,46,-59}, -{59,46,-58}, -{59,46,-57}, -{59,46,-56}, -{59,46,-55}, -{59,46,-54}, -{59,46,-53}, -{59,46,-52}, -{59,46,-51}, -{59,46,-50}, -{59,46,-49}, -{59,46,-48}, -{59,46,-47}, -{59,46,-46}, -{59,46,-45}, -{59,46,-44}, -{59,46,-43}, -{59,46,-42}, -{59,46,-41}, -{59,46,-40}, -{59,46,-39}, -{59,46,-38}, -{59,46,-37}, -{59,46,-36}, -{59,46,-35}, -{59,46,-34}, -{59,46,-33}, -{59,46,-32}, -{59,46,-31}, -{59,46,-30}, -{59,46,-29}, -{59,46,-28}, -{59,46,-27}, -{59,46,-26}, -{59,46,-25}, -{59,46,-24}, -{59,46,-23}, -{59,46,-22}, -{59,46,-21}, -{59,46,-20}, -{59,46,-19}, -{59,46,-18}, -{59,46,-17}, -{59,46,-16}, -{59,46,-15}, -{59,46,-14}, -{59,46,-13}, -{59,46,-12}, -{59,46,-11}, -{59,46,-10}, -{59,46,-9}, -{59,46,-8}, -{59,46,-7}, -{59,46,-6}, -{59,46,-5}, -{59,46,-4}, -{59,46,-3}, -{59,46,-2}, -{59,46,-1}, -{59,46,0}, -{59,46,1}, -{59,46,2}, -{59,46,3}, -{59,46,4}, -{59,46,5}, -{59,46,6}, -{59,46,7}, -{59,46,8}, -{59,46,9}, -{59,46,10}, -{59,46,11}, -{59,46,12}, -{59,46,13}, -{59,46,14}, -{59,46,15}, -{59,46,16}, -{59,46,17}, -{59,46,18}, -{59,46,19}, -{59,46,20}, -{59,46,21}, -{59,46,22}, -{59,46,23}, -{59,46,24}, -{59,46,25}, -{59,46,26}, -{59,46,27}, -{59,46,28}, -{59,46,29}, -{59,46,30}, -{59,46,31}, -{59,46,32}, -{59,46,33}, -{59,46,34}, -{59,46,35}, -{59,46,36}, -{59,46,37}, -{59,46,38}, -{59,46,39}, -{59,46,40}, -{59,46,41}, -{59,46,42}, -{59,46,43}, -{59,46,44}, -{59,46,45}, -{59,46,46}, -{59,46,47}, -{59,46,48}, -{59,46,49}, -{59,46,50}, -{59,46,51}, -{59,46,52}, -{59,46,53}, -{59,46,54}, -{59,46,55}, -{59,46,56}, -{59,46,57}, -{59,46,58}, -{59,46,59}, -{59,46,60}, -{59,46,61}, -{59,46,62}, -{59,46,63}, -{59,46,64}, -{59,46,65}, -{59,46,66}, -{59,46,67}, -{59,47,-63}, -{59,47,-62}, -{59,47,-61}, -{59,47,-60}, -{59,47,-59}, -{59,47,-58}, -{59,47,-57}, -{59,47,-56}, -{59,47,-55}, -{59,47,-54}, -{59,47,-53}, -{59,47,-52}, -{59,47,-51}, -{59,47,-50}, -{59,47,-49}, -{59,47,-48}, -{59,47,-47}, -{59,47,-46}, -{59,47,-45}, -{59,47,-44}, -{59,47,-43}, -{59,47,-42}, -{59,47,-41}, -{59,47,-40}, -{59,47,-39}, -{59,47,-38}, -{59,47,-37}, -{59,47,-36}, -{59,47,-35}, -{59,47,-34}, -{59,47,-33}, -{59,47,-32}, -{59,47,-31}, -{59,47,-30}, -{59,47,-29}, -{59,47,-28}, -{59,47,-27}, -{59,47,-26}, -{59,47,-25}, -{59,47,-24}, -{59,47,-23}, -{59,47,-22}, -{59,47,-21}, -{59,47,-20}, -{59,47,-19}, -{59,47,-18}, -{59,47,-17}, -{59,47,-16}, -{59,47,-15}, -{59,47,-14}, -{59,47,-13}, -{59,47,-12}, -{59,47,-11}, -{59,47,-10}, -{59,47,-9}, -{59,47,-8}, -{59,47,-7}, -{59,47,-6}, -{59,47,-5}, -{59,47,-4}, -{59,47,-3}, -{59,47,-2}, -{59,47,-1}, -{59,47,0}, -{59,47,1}, -{59,47,2}, -{59,47,3}, -{59,47,4}, -{59,47,5}, -{59,47,6}, -{59,47,7}, -{59,47,8}, -{59,47,9}, -{59,47,10}, -{59,47,11}, -{59,47,12}, -{59,47,13}, -{59,47,14}, -{59,47,15}, -{59,47,16}, -{59,47,17}, -{59,47,18}, -{59,47,19}, -{59,47,20}, -{59,47,21}, -{59,47,22}, -{59,47,23}, -{59,47,24}, -{59,47,25}, -{59,47,26}, -{59,47,27}, -{59,47,28}, -{59,47,29}, -{59,47,30}, -{59,47,31}, -{59,47,32}, -{59,47,33}, -{59,47,34}, -{59,47,35}, -{59,47,36}, -{59,47,37}, -{59,47,38}, -{59,47,39}, -{59,47,40}, -{59,47,41}, -{59,47,42}, -{59,47,43}, -{59,47,44}, -{59,47,45}, -{59,47,46}, -{59,47,47}, -{59,47,48}, -{59,47,49}, -{59,47,50}, -{59,47,51}, -{59,47,52}, -{59,47,53}, -{59,47,54}, -{59,47,55}, -{59,47,56}, -{59,47,57}, -{59,47,58}, -{59,47,59}, -{59,47,60}, -{59,47,61}, -{59,47,62}, -{59,47,63}, -{59,47,64}, -{59,47,65}, -{59,47,66}, -{59,47,67}, -{59,48,-63}, -{59,48,-62}, -{59,48,-61}, -{59,48,-60}, -{59,48,-59}, -{59,48,-58}, -{59,48,-57}, -{59,48,-56}, -{59,48,-55}, -{59,48,-54}, -{59,48,-53}, -{59,48,-52}, -{59,48,-51}, -{59,48,-50}, -{59,48,-49}, -{59,48,-48}, -{59,48,-47}, -{59,48,-46}, -{59,48,-45}, -{59,48,-44}, -{59,48,-43}, -{59,48,-42}, -{59,48,-41}, -{59,48,-40}, -{59,48,-39}, -{59,48,-38}, -{59,48,-37}, -{59,48,-36}, -{59,48,-35}, -{59,48,-34}, -{59,48,-33}, -{59,48,-32}, -{59,48,-31}, -{59,48,-30}, -{59,48,-29}, -{59,48,-28}, -{59,48,-27}, -{59,48,-26}, -{59,48,-25}, -{59,48,-24}, -{59,48,-23}, -{59,48,-22}, -{59,48,-21}, -{59,48,-20}, -{59,48,-19}, -{59,48,-18}, -{59,48,-17}, -{59,48,-16}, -{59,48,-15}, -{59,48,-14}, -{59,48,-13}, -{59,48,-12}, -{59,48,-11}, -{59,48,-10}, -{59,48,-9}, -{59,48,-8}, -{59,48,-7}, -{59,48,-6}, -{59,48,-5}, -{59,48,-4}, -{59,48,-3}, -{59,48,-2}, -{59,48,-1}, -{59,48,0}, -{59,48,1}, -{59,48,2}, -{59,48,3}, -{59,48,4}, -{59,48,5}, -{59,48,6}, -{59,48,7}, -{59,48,8}, -{59,48,9}, -{59,48,10}, -{59,48,11}, -{59,48,12}, -{59,48,13}, -{59,48,14}, -{59,48,15}, -{59,48,16}, -{59,48,17}, -{59,48,18}, -{59,48,19}, -{59,48,20}, -{59,48,21}, -{59,48,22}, -{59,48,23}, -{59,48,24}, -{59,48,25}, -{59,48,26}, -{59,48,27}, -{59,48,28}, -{59,48,29}, -{59,48,30}, -{59,48,31}, -{59,48,32}, -{59,48,33}, -{59,48,34}, -{59,48,35}, -{59,48,36}, -{59,48,37}, -{59,48,38}, -{59,48,39}, -{59,48,40}, -{59,48,41}, -{59,48,42}, -{59,48,43}, -{59,48,44}, -{59,48,45}, -{59,48,46}, -{59,48,47}, -{59,48,48}, -{59,48,49}, -{59,48,50}, -{59,48,51}, -{59,48,52}, -{59,48,53}, -{59,48,54}, -{59,48,55}, -{59,48,56}, -{59,48,57}, -{59,48,58}, -{59,48,59}, -{59,48,60}, -{59,48,61}, -{59,48,62}, -{59,48,63}, -{59,48,64}, -{59,48,65}, -{59,48,66}, -{59,48,67}, -{59,48,68}, -{59,49,-63}, -{59,49,-62}, -{59,49,-61}, -{59,49,-60}, -{59,49,-59}, -{59,49,-58}, -{59,49,-57}, -{59,49,-56}, -{59,49,-55}, -{59,49,-54}, -{59,49,-53}, -{59,49,-52}, -{59,49,-51}, -{59,49,-50}, -{59,49,-49}, -{59,49,-48}, -{59,49,-47}, -{59,49,-46}, -{59,49,-45}, -{59,49,-44}, -{59,49,-43}, -{59,49,-42}, -{59,49,-41}, -{59,49,-40}, -{59,49,-39}, -{59,49,-38}, -{59,49,-37}, -{59,49,-36}, -{59,49,-35}, -{59,49,-34}, -{59,49,-33}, -{59,49,-32}, -{59,49,-31}, -{59,49,-30}, -{59,49,-29}, -{59,49,-28}, -{59,49,-27}, -{59,49,-26}, -{59,49,-25}, -{59,49,-24}, -{59,49,-23}, -{59,49,-22}, -{59,49,-21}, -{59,49,-20}, -{59,49,-19}, -{59,49,-18}, -{59,49,-17}, -{59,49,-16}, -{59,49,-15}, -{59,49,-14}, -{59,49,-13}, -{59,49,-12}, -{59,49,-11}, -{59,49,-10}, -{59,49,-9}, -{59,49,-8}, -{59,49,-7}, -{59,49,-6}, -{59,49,-5}, -{59,49,-4}, -{59,49,-3}, -{59,49,-2}, -{59,49,-1}, -{59,49,0}, -{59,49,1}, -{59,49,2}, -{59,49,3}, -{59,49,4}, -{59,49,5}, -{59,49,6}, -{59,49,7}, -{59,49,8}, -{59,49,9}, -{59,49,10}, -{59,49,11}, -{59,49,12}, -{59,49,13}, -{59,49,14}, -{59,49,15}, -{59,49,16}, -{59,49,17}, -{59,49,18}, -{59,49,19}, -{59,49,20}, -{59,49,21}, -{59,49,22}, -{59,49,23}, -{59,49,24}, -{59,49,25}, -{59,49,26}, -{59,49,27}, -{59,49,28}, -{59,49,29}, -{59,49,30}, -{59,49,31}, -{59,49,32}, -{59,49,33}, -{59,49,34}, -{59,49,35}, -{59,49,36}, -{59,49,37}, -{59,49,38}, -{59,49,39}, -{59,49,40}, -{59,49,41}, -{59,49,42}, -{59,49,43}, -{59,49,44}, -{59,49,45}, -{59,49,46}, -{59,49,47}, -{59,49,48}, -{59,49,49}, -{59,49,50}, -{59,49,51}, -{59,49,52}, -{59,49,53}, -{59,49,54}, -{59,49,55}, -{59,49,56}, -{59,49,57}, -{59,49,58}, -{59,49,59}, -{59,49,60}, -{59,49,61}, -{59,49,62}, -{59,49,63}, -{59,49,64}, -{59,49,65}, -{59,49,66}, -{59,49,67}, -{59,49,68}, -{59,50,-63}, -{59,50,-62}, -{59,50,-61}, -{59,50,-60}, -{59,50,-59}, -{59,50,-58}, -{59,50,-57}, -{59,50,-56}, -{59,50,-55}, -{59,50,-54}, -{59,50,-53}, -{59,50,-52}, -{59,50,-51}, -{59,50,-50}, -{59,50,-49}, -{59,50,-48}, -{59,50,-47}, -{59,50,-46}, -{59,50,-45}, -{59,50,-44}, -{59,50,-43}, -{59,50,-42}, -{59,50,-41}, -{59,50,-40}, -{59,50,-39}, -{59,50,-38}, -{59,50,-37}, -{59,50,-36}, -{59,50,-35}, -{59,50,-34}, -{59,50,-33}, -{59,50,-32}, -{59,50,-31}, -{59,50,-30}, -{59,50,-29}, -{59,50,-28}, -{59,50,-27}, -{59,50,-26}, -{59,50,-25}, -{59,50,-24}, -{59,50,-23}, -{59,50,-22}, -{59,50,-21}, -{59,50,-20}, -{59,50,-19}, -{59,50,-18}, -{59,50,-17}, -{59,50,-16}, -{59,50,-15}, -{59,50,-14}, -{59,50,-13}, -{59,50,-12}, -{59,50,-11}, -{59,50,-10}, -{59,50,-9}, -{59,50,-8}, -{59,50,-7}, -{59,50,-6}, -{59,50,-5}, -{59,50,-4}, -{59,50,-3}, -{59,50,-2}, -{59,50,-1}, -{59,50,0}, -{59,50,1}, -{59,50,2}, -{59,50,3}, -{59,50,4}, -{59,50,5}, -{59,50,6}, -{59,50,7}, -{59,50,8}, -{59,50,9}, -{59,50,10}, -{59,50,11}, -{59,50,12}, -{59,50,13}, -{59,50,14}, -{59,50,15}, -{59,50,16}, -{59,50,17}, -{59,50,18}, -{59,50,19}, -{59,50,20}, -{59,50,21}, -{59,50,22}, -{59,50,23}, -{59,50,24}, -{59,50,25}, -{59,50,26}, -{59,50,27}, -{59,50,28}, -{59,50,29}, -{59,50,30}, -{59,50,31}, -{59,50,32}, -{59,50,33}, -{59,50,34}, -{59,50,35}, -{59,50,36}, -{59,50,37}, -{59,50,38}, -{59,50,39}, -{59,50,40}, -{59,50,41}, -{59,50,42}, -{59,50,43}, -{59,50,44}, -{59,50,45}, -{59,50,46}, -{59,50,47}, -{59,50,48}, -{59,50,49}, -{59,50,50}, -{59,50,51}, -{59,50,52}, -{59,50,53}, -{59,50,54}, -{59,50,55}, -{59,50,56}, -{59,50,57}, -{59,50,58}, -{59,50,59}, -{59,50,60}, -{59,50,61}, -{59,50,62}, -{59,50,63}, -{59,50,64}, -{59,50,65}, -{59,50,66}, -{59,50,67}, -{59,50,68}, -{59,51,-63}, -{59,51,-62}, -{59,51,-61}, -{59,51,-60}, -{59,51,-59}, -{59,51,-58}, -{59,51,-57}, -{59,51,-56}, -{59,51,-55}, -{59,51,-54}, -{59,51,-53}, -{59,51,-52}, -{59,51,-51}, -{59,51,-50}, -{59,51,-49}, -{59,51,-48}, -{59,51,-47}, -{59,51,-46}, -{59,51,-45}, -{59,51,-44}, -{59,51,-43}, -{59,51,-42}, -{59,51,-41}, -{59,51,-40}, -{59,51,-39}, -{59,51,-38}, -{59,51,-37}, -{59,51,-36}, -{59,51,-35}, -{59,51,-34}, -{59,51,-33}, -{59,51,-32}, -{59,51,-31}, -{59,51,-30}, -{59,51,-29}, -{59,51,-28}, -{59,51,-27}, -{59,51,-26}, -{59,51,-25}, -{59,51,-24}, -{59,51,-23}, -{59,51,-22}, -{59,51,-21}, -{59,51,-20}, -{59,51,-19}, -{59,51,-18}, -{59,51,-17}, -{59,51,-16}, -{59,51,-15}, -{59,51,-14}, -{59,51,-13}, -{59,51,-12}, -{59,51,-11}, -{59,51,-10}, -{59,51,-9}, -{59,51,-8}, -{59,51,-7}, -{59,51,-6}, -{59,51,-5}, -{59,51,-4}, -{59,51,-3}, -{59,51,-2}, -{59,51,-1}, -{59,51,0}, -{59,51,1}, -{59,51,2}, -{59,51,3}, -{59,51,4}, -{59,51,5}, -{59,51,6}, -{59,51,7}, -{59,51,8}, -{59,51,9}, -{59,51,10}, -{59,51,11}, -{59,51,12}, -{59,51,13}, -{59,51,14}, -{59,51,15}, -{59,51,16}, -{59,51,17}, -{59,51,18}, -{59,51,19}, -{59,51,20}, -{59,51,21}, -{59,51,22}, -{59,51,23}, -{59,51,24}, -{59,51,25}, -{59,51,26}, -{59,51,27}, -{59,51,28}, -{59,51,29}, -{59,51,30}, -{59,51,31}, -{59,51,32}, -{59,51,33}, -{59,51,34}, -{59,51,35}, -{59,51,36}, -{59,51,37}, -{59,51,38}, -{59,51,39}, -{59,51,40}, -{59,51,41}, -{59,51,42}, -{59,51,43}, -{59,51,44}, -{59,51,45}, -{59,51,46}, -{59,51,47}, -{59,51,48}, -{59,51,49}, -{59,51,50}, -{59,51,51}, -{59,51,52}, -{59,51,53}, -{59,51,54}, -{59,51,55}, -{59,51,56}, -{59,51,57}, -{59,51,58}, -{59,51,59}, -{59,51,60}, -{59,51,61}, -{59,51,62}, -{59,51,63}, -{59,51,64}, -{59,51,65}, -{59,51,66}, -{59,51,67}, -{59,51,68}, -{59,52,-63}, -{59,52,-62}, -{59,52,-61}, -{59,52,-60}, -{59,52,-59}, -{59,52,-58}, -{59,52,-57}, -{59,52,-56}, -{59,52,-55}, -{59,52,-54}, -{59,52,-53}, -{59,52,-52}, -{59,52,-51}, -{59,52,-50}, -{59,52,-49}, -{59,52,-48}, -{59,52,-47}, -{59,52,-46}, -{59,52,-45}, -{59,52,-44}, -{59,52,-43}, -{59,52,-42}, -{59,52,-41}, -{59,52,-40}, -{59,52,-39}, -{59,52,-38}, -{59,52,-37}, -{59,52,-36}, -{59,52,-35}, -{59,52,-34}, -{59,52,-33}, -{59,52,-32}, -{59,52,-31}, -{59,52,-30}, -{59,52,-29}, -{59,52,-28}, -{59,52,-27}, -{59,52,-26}, -{59,52,-25}, -{59,52,-24}, -{59,52,-23}, -{59,52,-22}, -{59,52,-21}, -{59,52,-20}, -{59,52,-19}, -{59,52,-18}, -{59,52,-17}, -{59,52,-16}, -{59,52,-15}, -{59,52,-14}, -{59,52,-13}, -{59,52,-12}, -{59,52,-11}, -{59,52,-10}, -{59,52,-9}, -{59,52,-8}, -{59,52,-7}, -{59,52,-6}, -{59,52,-5}, -{59,52,-4}, -{59,52,-3}, -{59,52,-2}, -{59,52,-1}, -{59,52,0}, -{59,52,1}, -{59,52,2}, -{59,52,3}, -{59,52,4}, -{59,52,5}, -{59,52,6}, -{59,52,7}, -{59,52,8}, -{59,52,9}, -{59,52,10}, -{59,52,11}, -{59,52,12}, -{59,52,13}, -{59,52,14}, -{59,52,15}, -{59,52,16}, -{59,52,17}, -{59,52,18}, -{59,52,19}, -{59,52,20}, -{59,52,21}, -{59,52,22}, -{59,52,23}, -{59,52,24}, -{59,52,25}, -{59,52,26}, -{59,52,27}, -{59,52,28}, -{59,52,29}, -{59,52,30}, -{59,52,31}, -{59,52,32}, -{59,52,33}, -{59,52,34}, -{59,52,35}, -{59,52,36}, -{59,52,37}, -{59,52,38}, -{59,52,39}, -{59,52,40}, -{59,52,41}, -{59,52,42}, -{59,52,43}, -{59,52,44}, -{59,52,45}, -{59,52,46}, -{59,52,47}, -{59,52,48}, -{59,52,49}, -{59,52,50}, -{59,52,51}, -{59,52,52}, -{59,52,53}, -{59,52,54}, -{59,52,55}, -{59,52,56}, -{59,52,57}, -{59,52,58}, -{59,52,59}, -{59,52,60}, -{59,52,61}, -{59,52,62}, -{59,52,63}, -{59,52,64}, -{59,52,65}, -{59,52,66}, -{59,52,67}, -{59,52,68}, -{59,53,-63}, -{59,53,-62}, -{59,53,-61}, -{59,53,-60}, -{59,53,-59}, -{59,53,-58}, -{59,53,-57}, -{59,53,-56}, -{59,53,-55}, -{59,53,-54}, -{59,53,-53}, -{59,53,-52}, -{59,53,-51}, -{59,53,-50}, -{59,53,-49}, -{59,53,-48}, -{59,53,-47}, -{59,53,-46}, -{59,53,-45}, -{59,53,-44}, -{59,53,-43}, -{59,53,-42}, -{59,53,-41}, -{59,53,-40}, -{59,53,-39}, -{59,53,-38}, -{59,53,-37}, -{59,53,-36}, -{59,53,-35}, -{59,53,-34}, -{59,53,-33}, -{59,53,-32}, -{59,53,-31}, -{59,53,-30}, -{59,53,-29}, -{59,53,-28}, -{59,53,-27}, -{59,53,-26}, -{59,53,-25}, -{59,53,-24}, -{59,53,-23}, -{59,53,-22}, -{59,53,-21}, -{59,53,-20}, -{59,53,-19}, -{59,53,-18}, -{59,53,-17}, -{59,53,-16}, -{59,53,-15}, -{59,53,-14}, -{59,53,-13}, -{59,53,-12}, -{59,53,-11}, -{59,53,-10}, -{59,53,-9}, -{59,53,-8}, -{59,53,-7}, -{59,53,-6}, -{59,53,-5}, -{59,53,-4}, -{59,53,-3}, -{59,53,-2}, -{59,53,-1}, -{59,53,0}, -{59,53,1}, -{59,53,2}, -{59,53,3}, -{59,53,4}, -{59,53,5}, -{59,53,6}, -{59,53,7}, -{59,53,8}, -{59,53,9}, -{59,53,10}, -{59,53,11}, -{59,53,12}, -{59,53,13}, -{59,53,14}, -{59,53,15}, -{59,53,16}, -{59,53,17}, -{59,53,18}, -{59,53,19}, -{59,53,20}, -{59,53,21}, -{59,53,22}, -{59,53,23}, -{59,53,24}, -{59,53,25}, -{59,53,26}, -{59,53,27}, -{59,53,28}, -{59,53,29}, -{59,53,30}, -{59,53,31}, -{59,53,32}, -{59,53,33}, -{59,53,34}, -{59,53,35}, -{59,53,36}, -{59,53,37}, -{59,53,38}, -{59,53,39}, -{59,53,40}, -{59,53,41}, -{59,53,42}, -{59,53,43}, -{59,53,44}, -{59,53,45}, -{59,53,46}, -{59,53,47}, -{59,53,48}, -{59,53,49}, -{59,53,50}, -{59,53,51}, -{59,53,52}, -{59,53,53}, -{59,53,54}, -{59,53,55}, -{59,53,56}, -{59,53,57}, -{59,53,58}, -{59,53,59}, -{59,53,60}, -{59,53,61}, -{59,53,62}, -{59,53,63}, -{59,53,64}, -{59,53,65}, -{59,53,66}, -{59,53,67}, -{59,53,68}, -{59,54,-63}, -{59,54,-62}, -{59,54,-61}, -{59,54,-60}, -{59,54,-59}, -{59,54,-58}, -{59,54,-57}, -{59,54,-56}, -{59,54,-55}, -{59,54,-54}, -{59,54,-53}, -{59,54,-52}, -{59,54,-51}, -{59,54,-50}, -{59,54,-49}, -{59,54,-48}, -{59,54,-47}, -{59,54,-46}, -{59,54,-45}, -{59,54,-44}, -{59,54,-43}, -{59,54,-42}, -{59,54,-41}, -{59,54,-40}, -{59,54,-39}, -{59,54,-38}, -{59,54,-37}, -{59,54,-36}, -{59,54,-35}, -{59,54,-34}, -{59,54,-33}, -{59,54,-32}, -{59,54,-31}, -{59,54,-30}, -{59,54,-29}, -{59,54,-28}, -{59,54,-27}, -{59,54,-26}, -{59,54,-25}, -{59,54,-24}, -{59,54,-23}, -{59,54,-22}, -{59,54,-21}, -{59,54,-20}, -{59,54,-19}, -{59,54,-18}, -{59,54,-17}, -{59,54,-16}, -{59,54,-15}, -{59,54,-14}, -{59,54,-13}, -{59,54,-12}, -{59,54,-11}, -{59,54,-10}, -{59,54,-9}, -{59,54,-8}, -{59,54,-7}, -{59,54,-6}, -{59,54,-5}, -{59,54,-4}, -{59,54,-3}, -{59,54,-2}, -{59,54,-1}, -{59,54,0}, -{59,54,1}, -{59,54,2}, -{59,54,3}, -{59,54,4}, -{59,54,5}, -{59,54,6}, -{59,54,7}, -{59,54,8}, -{59,54,9}, -{59,54,10}, -{59,54,11}, -{59,54,12}, -{59,54,13}, -{59,54,14}, -{59,54,15}, -{59,54,16}, -{59,54,17}, -{59,54,18}, -{59,54,19}, -{59,54,20}, -{59,54,21}, -{59,54,22}, -{59,54,23}, -{59,54,24}, -{59,54,25}, -{59,54,26}, -{59,54,27}, -{59,54,28}, -{59,54,29}, -{59,54,30}, -{59,54,31}, -{59,54,32}, -{59,54,33}, -{59,54,34}, -{59,54,35}, -{59,54,36}, -{59,54,37}, -{59,54,38}, -{59,54,39}, -{59,54,40}, -{59,54,41}, -{59,54,42}, -{59,54,43}, -{59,54,44}, -{59,54,45}, -{59,54,46}, -{59,54,47}, -{59,54,48}, -{59,54,49}, -{59,54,50}, -{59,54,51}, -{59,54,52}, -{59,54,53}, -{59,54,54}, -{59,54,55}, -{59,54,56}, -{59,54,57}, -{59,54,58}, -{59,54,59}, -{59,54,60}, -{59,54,61}, -{59,54,62}, -{59,54,63}, -{59,54,64}, -{59,54,65}, -{59,54,66}, -{59,54,67}, -{59,54,68}, -{59,55,-63}, -{59,55,-62}, -{59,55,-61}, -{59,55,-60}, -{59,55,-59}, -{59,55,-58}, -{59,55,-57}, -{59,55,-56}, -{59,55,-55}, -{59,55,-54}, -{59,55,-53}, -{59,55,-52}, -{59,55,-51}, -{59,55,-50}, -{59,55,-49}, -{59,55,-48}, -{59,55,-47}, -{59,55,-46}, -{59,55,-45}, -{59,55,-44}, -{59,55,-43}, -{59,55,-42}, -{59,55,-41}, -{59,55,-40}, -{59,55,-39}, -{59,55,-38}, -{59,55,-37}, -{59,55,-36}, -{59,55,-35}, -{59,55,-34}, -{59,55,-33}, -{59,55,-32}, -{59,55,-31}, -{59,55,-30}, -{59,55,-29}, -{59,55,-28}, -{59,55,-27}, -{59,55,-26}, -{59,55,-25}, -{59,55,-24}, -{59,55,-23}, -{59,55,-22}, -{59,55,-21}, -{59,55,-20}, -{59,55,-19}, -{59,55,-18}, -{59,55,-17}, -{59,55,-16}, -{59,55,-15}, -{59,55,-14}, -{59,55,-13}, -{59,55,-12}, -{59,55,-11}, -{59,55,-10}, -{59,55,-9}, -{59,55,-8}, -{59,55,-7}, -{59,55,-6}, -{59,55,-5}, -{59,55,-4}, -{59,55,-3}, -{59,55,-2}, -{59,55,-1}, -{59,55,0}, -{59,55,1}, -{59,55,2}, -{59,55,3}, -{59,55,4}, -{59,55,5}, -{59,55,6}, -{59,55,7}, -{59,55,8}, -{59,55,9}, -{59,55,10}, -{59,55,11}, -{59,55,12}, -{59,55,13}, -{59,55,14}, -{59,55,15}, -{59,55,16}, -{59,55,17}, -{59,55,18}, -{59,55,19}, -{59,55,20}, -{59,55,21}, -{59,55,22}, -{59,55,23}, -{59,55,24}, -{59,55,25}, -{59,55,26}, -{59,55,27}, -{59,55,28}, -{59,55,29}, -{59,55,30}, -{59,55,31}, -{59,55,32}, -{59,55,33}, -{59,55,34}, -{59,55,35}, -{59,55,36}, -{59,55,37}, -{59,55,38}, -{59,55,39}, -{59,55,40}, -{59,55,41}, -{59,55,42}, -{59,55,43}, -{59,55,44}, -{59,55,45}, -{59,55,46}, -{59,55,47}, -{59,55,48}, -{59,55,49}, -{59,55,50}, -{59,55,51}, -{59,55,52}, -{59,55,53}, -{59,55,54}, -{59,55,55}, -{59,55,56}, -{59,55,57}, -{59,55,58}, -{59,55,59}, -{59,55,60}, -{59,55,61}, -{59,55,62}, -{59,55,63}, -{59,55,64}, -{59,55,65}, -{59,55,66}, -{59,55,67}, -{59,55,68}, -{59,56,-63}, -{59,56,-62}, -{59,56,-61}, -{59,56,-60}, -{59,56,-59}, -{59,56,-58}, -{59,56,-57}, -{59,56,-56}, -{59,56,-55}, -{59,56,-54}, -{59,56,-53}, -{59,56,-52}, -{59,56,-51}, -{59,56,-50}, -{59,56,-49}, -{59,56,-48}, -{59,56,-47}, -{59,56,-46}, -{59,56,-45}, -{59,56,-44}, -{59,56,-43}, -{59,56,-42}, -{59,56,-41}, -{59,56,-40}, -{59,56,-39}, -{59,56,-38}, -{59,56,-37}, -{59,56,-36}, -{59,56,-35}, -{59,56,-34}, -{59,56,-33}, -{59,56,-32}, -{59,56,-31}, -{59,56,-30}, -{59,56,-29}, -{59,56,-28}, -{59,56,-27}, -{59,56,-26}, -{59,56,-25}, -{59,56,-24}, -{59,56,-23}, -{59,56,-22}, -{59,56,-21}, -{59,56,-20}, -{59,56,-19}, -{59,56,-18}, -{59,56,-17}, -{59,56,-16}, -{59,56,-15}, -{59,56,-14}, -{59,56,-13}, -{59,56,-12}, -{59,56,-11}, -{59,56,-10}, -{59,56,-9}, -{59,56,-8}, -{59,56,-7}, -{59,56,-6}, -{59,56,-5}, -{59,56,-4}, -{59,56,-3}, -{59,56,-2}, -{59,56,-1}, -{59,56,0}, -{59,56,1}, -{59,56,2}, -{59,56,3}, -{59,56,4}, -{59,56,5}, -{59,56,6}, -{59,56,7}, -{59,56,8}, -{59,56,9}, -{59,56,10}, -{59,56,11}, -{59,56,12}, -{59,56,13}, -{59,56,14}, -{59,56,15}, -{59,56,16}, -{59,56,17}, -{59,56,18}, -{59,56,19}, -{59,56,20}, -{59,56,21}, -{59,56,22}, -{59,56,23}, -{59,56,24}, -{59,56,25}, -{59,56,26}, -{59,56,27}, -{59,56,28}, -{59,56,29}, -{59,56,30}, -{59,56,31}, -{59,56,32}, -{59,56,33}, -{59,56,34}, -{59,56,35}, -{59,56,36}, -{59,56,37}, -{59,56,38}, -{59,56,39}, -{59,56,40}, -{59,56,41}, -{59,56,42}, -{59,56,43}, -{59,56,44}, -{59,56,45}, -{59,56,46}, -{59,56,47}, -{59,56,48}, -{59,56,49}, -{59,56,50}, -{59,56,51}, -{59,56,52}, -{59,56,53}, -{59,56,54}, -{59,56,55}, -{59,56,56}, -{59,56,57}, -{59,56,58}, -{59,56,59}, -{59,56,60}, -{59,56,61}, -{59,56,62}, -{59,56,63}, -{59,56,64}, -{59,56,65}, -{59,56,66}, -{59,56,67}, -{59,56,68}, -{59,57,-63}, -{59,57,-62}, -{59,57,-61}, -{59,57,-60}, -{59,57,-59}, -{59,57,-58}, -{59,57,-57}, -{59,57,-56}, -{59,57,-55}, -{59,57,-54}, -{59,57,-53}, -{59,57,-52}, -{59,57,-51}, -{59,57,-50}, -{59,57,-49}, -{59,57,-48}, -{59,57,-47}, -{59,57,-46}, -{59,57,-45}, -{59,57,-44}, -{59,57,-43}, -{59,57,-42}, -{59,57,-41}, -{59,57,-40}, -{59,57,-39}, -{59,57,-38}, -{59,57,-37}, -{59,57,-36}, -{59,57,-35}, -{59,57,-34}, -{59,57,-33}, -{59,57,-32}, -{59,57,-31}, -{59,57,-30}, -{59,57,-29}, -{59,57,-28}, -{59,57,-27}, -{59,57,-26}, -{59,57,-25}, -{59,57,-24}, -{59,57,-23}, -{59,57,-22}, -{59,57,-21}, -{59,57,-20}, -{59,57,-19}, -{59,57,-18}, -{59,57,-17}, -{59,57,-16}, -{59,57,-15}, -{59,57,-14}, -{59,57,-13}, -{59,57,-12}, -{59,57,-11}, -{59,57,-10}, -{59,57,-9}, -{59,57,-8}, -{59,57,-7}, -{59,57,-6}, -{59,57,-5}, -{59,57,-4}, -{59,57,-3}, -{59,57,-2}, -{59,57,-1}, -{59,57,0}, -{59,57,1}, -{59,57,2}, -{59,57,3}, -{59,57,4}, -{59,57,5}, -{59,57,6}, -{59,57,7}, -{59,57,8}, -{59,57,9}, -{59,57,10}, -{59,57,11}, -{59,57,12}, -{59,57,13}, -{59,57,14}, -{59,57,15}, -{59,57,16}, -{59,57,17}, -{59,57,18}, -{59,57,19}, -{59,57,20}, -{59,57,21}, -{59,57,22}, -{59,57,23}, -{59,57,24}, -{59,57,25}, -{59,57,26}, -{59,57,27}, -{59,57,28}, -{59,57,29}, -{59,57,30}, -{59,57,31}, -{59,57,32}, -{59,57,33}, -{59,57,34}, -{59,57,35}, -{59,57,36}, -{59,57,37}, -{59,57,38}, -{59,57,39}, -{59,57,40}, -{59,57,41}, -{59,57,42}, -{59,57,43}, -{59,57,44}, -{59,57,45}, -{59,57,46}, -{59,57,47}, -{59,57,48}, -{59,57,49}, -{59,57,50}, -{59,57,51}, -{59,57,52}, -{59,57,53}, -{59,57,54}, -{59,57,55}, -{59,57,56}, -{59,57,57}, -{59,57,58}, -{59,57,59}, -{59,57,60}, -{59,57,61}, -{59,57,62}, -{59,57,63}, -{59,57,64}, -{59,57,65}, -{59,57,66}, -{59,57,67}, -{59,57,68}, -{59,57,69}, -{59,58,-63}, -{59,58,-62}, -{59,58,-61}, -{59,58,-60}, -{59,58,-59}, -{59,58,-58}, -{59,58,-57}, -{59,58,-56}, -{59,58,-55}, -{59,58,-54}, -{59,58,-53}, -{59,58,-52}, -{59,58,-51}, -{59,58,-50}, -{59,58,-49}, -{59,58,-48}, -{59,58,-47}, -{59,58,-46}, -{59,58,-45}, -{59,58,-44}, -{59,58,-43}, -{59,58,-42}, -{59,58,-41}, -{59,58,-40}, -{59,58,-39}, -{59,58,-38}, -{59,58,-37}, -{59,58,-36}, -{59,58,-35}, -{59,58,-34}, -{59,58,-33}, -{59,58,-32}, -{59,58,-31}, -{59,58,-30}, -{59,58,-29}, -{59,58,-28}, -{59,58,-27}, -{59,58,-26}, -{59,58,-25}, -{59,58,-24}, -{59,58,-23}, -{59,58,-22}, -{59,58,-21}, -{59,58,-20}, -{59,58,-19}, -{59,58,-18}, -{59,58,-17}, -{59,58,-16}, -{59,58,-15}, -{59,58,-14}, -{59,58,-13}, -{59,58,-12}, -{59,58,-11}, -{59,58,-10}, -{59,58,-9}, -{59,58,-8}, -{59,58,-7}, -{59,58,-6}, -{59,58,-5}, -{59,58,-4}, -{59,58,-3}, -{59,58,-2}, -{59,58,-1}, -{59,58,0}, -{59,58,1}, -{59,58,2}, -{59,58,3}, -{59,58,4}, -{59,58,5}, -{59,58,6}, -{59,58,7}, -{59,58,8}, -{59,58,9}, -{59,58,10}, -{59,58,11}, -{59,58,12}, -{59,58,13}, -{59,58,14}, -{59,58,15}, -{59,58,16}, -{59,58,17}, -{59,58,18}, -{59,58,19}, -{59,58,20}, -{59,58,21}, -{59,58,22}, -{59,58,23}, -{59,58,24}, -{59,58,25}, -{59,58,26}, -{59,58,27}, -{59,58,28}, -{59,58,29}, -{59,58,30}, -{59,58,31}, -{59,58,32}, -{59,58,33}, -{59,58,34}, -{59,58,35}, -{59,58,36}, -{59,58,37}, -{59,58,38}, -{59,58,39}, -{59,58,40}, -{59,58,41}, -{59,58,42}, -{59,58,43}, -{59,58,44}, -{59,58,45}, -{59,58,46}, -{59,58,47}, -{59,58,48}, -{59,58,49}, -{59,58,50}, -{59,58,51}, -{59,58,52}, -{59,58,53}, -{59,58,54}, -{59,58,55}, -{59,58,56}, -{59,58,57}, -{59,58,58}, -{59,58,59}, -{59,58,60}, -{59,58,61}, -{59,58,62}, -{59,58,63}, -{59,58,64}, -{59,58,65}, -{59,58,66}, -{59,58,67}, -{59,58,68}, -{59,58,69}, -{59,59,-63}, -{59,59,-62}, -{59,59,-61}, -{59,59,-60}, -{59,59,-59}, -{59,59,-58}, -{59,59,-57}, -{59,59,-56}, -{59,59,-55}, -{59,59,-54}, -{59,59,-53}, -{59,59,-52}, -{59,59,-51}, -{59,59,-50}, -{59,59,-49}, -{59,59,-48}, -{59,59,-47}, -{59,59,-46}, -{59,59,-45}, -{59,59,-44}, -{59,59,-43}, -{59,59,-42}, -{59,59,-41}, -{59,59,-40}, -{59,59,-39}, -{59,59,-38}, -{59,59,-37}, -{59,59,-36}, -{59,59,-35}, -{59,59,-34}, -{59,59,-33}, -{59,59,-32}, -{59,59,-31}, -{59,59,-30}, -{59,59,-29}, -{59,59,-28}, -{59,59,-27}, -{59,59,-26}, -{59,59,-25}, -{59,59,-24}, -{59,59,-23}, -{59,59,-22}, -{59,59,-21}, -{59,59,-20}, -{59,59,-19}, -{59,59,-18}, -{59,59,-17}, -{59,59,-16}, -{59,59,-15}, -{59,59,-14}, -{59,59,-13}, -{59,59,-12}, -{59,59,-11}, -{59,59,-10}, -{59,59,-9}, -{59,59,-8}, -{59,59,-7}, -{59,59,-6}, -{59,59,-5}, -{59,59,-4}, -{59,59,-3}, -{59,59,-2}, -{59,59,-1}, -{59,59,0}, -{59,59,1}, -{59,59,2}, -{59,59,3}, -{59,59,4}, -{59,59,5}, -{59,59,6}, -{59,59,7}, -{59,59,8}, -{59,59,9}, -{59,59,10}, -{59,59,11}, -{59,59,12}, -{59,59,13}, -{59,59,14}, -{59,59,15}, -{59,59,16}, -{59,59,17}, -{59,59,18}, -{59,59,19}, -{59,59,20}, -{59,59,21}, -{59,59,22}, -{59,59,23}, -{59,59,24}, -{59,59,25}, -{59,59,26}, -{59,59,27}, -{59,59,28}, -{59,59,29}, -{59,59,30}, -{59,59,31}, -{59,59,32}, -{59,59,33}, -{59,59,34}, -{59,59,35}, -{59,59,36}, -{59,59,37}, -{59,59,38}, -{59,59,39}, -{59,59,40}, -{59,59,41}, -{59,59,42}, -{59,59,43}, -{59,59,44}, -{59,59,45}, -{59,59,46}, -{59,59,47}, -{59,59,48}, -{59,59,49}, -{59,59,50}, -{59,59,51}, -{59,59,52}, -{59,59,53}, -{59,59,54}, -{59,59,55}, -{59,59,56}, -{59,59,57}, -{59,59,58}, -{59,59,59}, -{59,59,60}, -{59,59,61}, -{59,59,62}, -{59,59,63}, -{59,59,64}, -{59,59,65}, -{59,59,66}, -{59,59,67}, -{59,59,68}, -{59,59,69}, -{59,60,-63}, -{59,60,-62}, -{59,60,-61}, -{59,60,-60}, -{59,60,-59}, -{59,60,-58}, -{59,60,-57}, -{59,60,-56}, -{59,60,-55}, -{59,60,-54}, -{59,60,-53}, -{59,60,-52}, -{59,60,-51}, -{59,60,-50}, -{59,60,-49}, -{59,60,-48}, -{59,60,-47}, -{59,60,-46}, -{59,60,-45}, -{59,60,-44}, -{59,60,-43}, -{59,60,-42}, -{59,60,-41}, -{59,60,-40}, -{59,60,-39}, -{59,60,-38}, -{59,60,-37}, -{59,60,-36}, -{59,60,-35}, -{59,60,-34}, -{59,60,-33}, -{59,60,-32}, -{59,60,-31}, -{59,60,-30}, -{59,60,-29}, -{59,60,-28}, -{59,60,-27}, -{59,60,-26}, -{59,60,-25}, -{59,60,-24}, -{59,60,-23}, -{59,60,-22}, -{59,60,-21}, -{59,60,-20}, -{59,60,-19}, -{59,60,-18}, -{59,60,-17}, -{59,60,-16}, -{59,60,-15}, -{59,60,-14}, -{59,60,-13}, -{59,60,-12}, -{59,60,-11}, -{59,60,-10}, -{59,60,-9}, -{59,60,-8}, -{59,60,-7}, -{59,60,-6}, -{59,60,-5}, -{59,60,-4}, -{59,60,-3}, -{59,60,-2}, -{59,60,-1}, -{59,60,0}, -{59,60,1}, -{59,60,2}, -{59,60,3}, -{59,60,4}, -{59,60,5}, -{59,60,6}, -{59,60,7}, -{59,60,8}, -{59,60,9}, -{59,60,10}, -{59,60,11}, -{59,60,12}, -{59,60,13}, -{59,60,14}, -{59,60,15}, -{59,60,16}, -{59,60,17}, -{59,60,18}, -{59,60,19}, -{59,60,20}, -{59,60,21}, -{59,60,22}, -{59,60,23}, -{59,60,24}, -{59,60,25}, -{59,60,26}, -{59,60,27}, -{59,60,28}, -{59,60,29}, -{59,60,30}, -{59,60,31}, -{59,60,32}, -{59,60,33}, -{59,60,34}, -{59,60,35}, -{59,60,36}, -{59,60,37}, -{59,60,38}, -{59,60,39}, -{59,60,40}, -{59,60,41}, -{59,60,42}, -{59,60,43}, -{59,60,44}, -{59,60,45}, -{59,60,46}, -{59,60,47}, -{59,60,48}, -{59,60,49}, -{59,60,50}, -{59,60,51}, -{59,60,52}, -{59,60,53}, -{59,60,54}, -{59,60,55}, -{59,60,56}, -{59,60,57}, -{59,60,58}, -{59,60,59}, -{59,60,60}, -{59,60,61}, -{59,60,62}, -{59,60,63}, -{59,60,64}, -{59,60,65}, -{59,60,66}, -{59,60,67}, -{59,60,68}, -{59,60,69}, -{59,61,-63}, -{59,61,-62}, -{59,61,-61}, -{59,61,-60}, -{59,61,-59}, -{59,61,-58}, -{59,61,-57}, -{59,61,-56}, -{59,61,-55}, -{59,61,-54}, -{59,61,-53}, -{59,61,-52}, -{59,61,-51}, -{59,61,-50}, -{59,61,-49}, -{59,61,-48}, -{59,61,-47}, -{59,61,-46}, -{59,61,-45}, -{59,61,-44}, -{59,61,-43}, -{59,61,-42}, -{59,61,-41}, -{59,61,-40}, -{59,61,-39}, -{59,61,-38}, -{59,61,-37}, -{59,61,-36}, -{59,61,-35}, -{59,61,-34}, -{59,61,-33}, -{59,61,-32}, -{59,61,-31}, -{59,61,-30}, -{59,61,-29}, -{59,61,-28}, -{59,61,-27}, -{59,61,-26}, -{59,61,-25}, -{59,61,-24}, -{59,61,-23}, -{59,61,-22}, -{59,61,-21}, -{59,61,-20}, -{59,61,-19}, -{59,61,-18}, -{59,61,-17}, -{59,61,-16}, -{59,61,-15}, -{59,61,-14}, -{59,61,-13}, -{59,61,-12}, -{59,61,-11}, -{59,61,-10}, -{59,61,-9}, -{59,61,-8}, -{59,61,-7}, -{59,61,-6}, -{59,61,-5}, -{59,61,-4}, -{59,61,-3}, -{59,61,-2}, -{59,61,-1}, -{59,61,0}, -{59,61,1}, -{59,61,2}, -{59,61,3}, -{59,61,4}, -{59,61,5}, -{59,61,6}, -{59,61,7}, -{59,61,8}, -{59,61,9}, -{59,61,10}, -{59,61,11}, -{59,61,12}, -{59,61,13}, -{59,61,14}, -{59,61,15}, -{59,61,16}, -{59,61,17}, -{59,61,18}, -{59,61,19}, -{59,61,20}, -{59,61,21}, -{59,61,22}, -{59,61,23}, -{59,61,24}, -{59,61,25}, -{59,61,26}, -{59,61,27}, -{59,61,28}, -{59,61,29}, -{59,61,30}, -{59,61,31}, -{59,61,32}, -{59,61,33}, -{59,61,34}, -{59,61,35}, -{59,61,36}, -{59,61,37}, -{59,61,38}, -{59,61,39}, -{59,61,40}, -{59,61,41}, -{59,61,42}, -{59,61,43}, -{59,61,44}, -{59,61,45}, -{59,61,46}, -{59,61,47}, -{59,61,48}, -{59,61,49}, -{59,61,50}, -{59,61,51}, -{59,61,52}, -{59,61,53}, -{59,61,54}, -{59,61,55}, -{59,61,56}, -{59,61,57}, -{59,61,58}, -{59,61,59}, -{59,61,60}, -{59,61,61}, -{59,61,62}, -{59,61,63}, -{59,61,64}, -{59,61,65}, -{59,61,66}, -{59,61,67}, -{59,61,68}, -{59,61,69}, -{59,62,-63}, -{59,62,-62}, -{59,62,-61}, -{59,62,-60}, -{59,62,-59}, -{59,62,-58}, -{59,62,-57}, -{59,62,-56}, -{59,62,-55}, -{59,62,-54}, -{59,62,-53}, -{59,62,-52}, -{59,62,-51}, -{59,62,-50}, -{59,62,-49}, -{59,62,-48}, -{59,62,-47}, -{59,62,-46}, -{59,62,-45}, -{59,62,-44}, -{59,62,-43}, -{59,62,-42}, -{59,62,-41}, -{59,62,-40}, -{59,62,-39}, -{59,62,-38}, -{59,62,-37}, -{59,62,-36}, -{59,62,-35}, -{59,62,-34}, -{59,62,-33}, -{59,62,-32}, -{59,62,-31}, -{59,62,-30}, -{59,62,-29}, -{59,62,-28}, -{59,62,-27}, -{59,62,-26}, -{59,62,-25}, -{59,62,-24}, -{59,62,-23}, -{59,62,-22}, -{59,62,-21}, -{59,62,-20}, -{59,62,-19}, -{59,62,-18}, -{59,62,-17}, -{59,62,-16}, -{59,62,-15}, -{59,62,-14}, -{59,62,-13}, -{59,62,-12}, -{59,62,-11}, -{59,62,-10}, -{59,62,-9}, -{59,62,-8}, -{59,62,-7}, -{59,62,-6}, -{59,62,-5}, -{59,62,-4}, -{59,62,-3}, -{59,62,-2}, -{59,62,-1}, -{59,62,0}, -{59,62,1}, -{59,62,2}, -{59,62,3}, -{59,62,4}, -{59,62,5}, -{59,62,6}, -{59,62,7}, -{59,62,8}, -{59,62,9}, -{59,62,10}, -{59,62,11}, -{59,62,12}, -{59,62,13}, -{59,62,14}, -{59,62,15}, -{59,62,16}, -{59,62,17}, -{59,62,18}, -{59,62,19}, -{59,62,20}, -{59,62,21}, -{59,62,22}, -{59,62,23}, -{59,62,24}, -{59,62,25}, -{59,62,26}, -{59,62,27}, -{59,62,28}, -{59,62,29}, -{59,62,30}, -{59,62,31}, -{59,62,32}, -{59,62,33}, -{59,62,34}, -{59,62,35}, -{59,62,36}, -{59,62,37}, -{59,62,38}, -{59,62,39}, -{59,62,40}, -{59,62,41}, -{59,62,42}, -{59,62,43}, -{59,62,44}, -{59,62,45}, -{59,62,46}, -{59,62,47}, -{59,62,48}, -{59,62,49}, -{59,62,50}, -{59,62,51}, -{59,62,52}, -{59,62,53}, -{59,62,54}, -{59,62,55}, -{59,62,56}, -{59,62,57}, -{59,62,58}, -{59,62,59}, -{59,62,60}, -{59,62,61}, -{59,62,62}, -{59,62,63}, -{59,62,64}, -{59,62,65}, -{59,62,66}, -{59,62,67}, -{59,62,68}, -{59,62,69}, -{59,63,-63}, -{59,63,-62}, -{59,63,-61}, -{59,63,-60}, -{59,63,-59}, -{59,63,-58}, -{59,63,-57}, -{59,63,-56}, -{59,63,-55}, -{59,63,-54}, -{59,63,-53}, -{59,63,-52}, -{59,63,-51}, -{59,63,-50}, -{59,63,-49}, -{59,63,-48}, -{59,63,-47}, -{59,63,-46}, -{59,63,-45}, -{59,63,-44}, -{59,63,-43}, -{59,63,-42}, -{59,63,-41}, -{59,63,-40}, -{59,63,-39}, -{59,63,-38}, -{59,63,-37}, -{59,63,-36}, -{59,63,-35}, -{59,63,-34}, -{59,63,-33}, -{59,63,-32}, -{59,63,-31}, -{59,63,-30}, -{59,63,-29}, -{59,63,-28}, -{59,63,-27}, -{59,63,-26}, -{59,63,-25}, -{59,63,-24}, -{59,63,-23}, -{59,63,-22}, -{59,63,-21}, -{59,63,-20}, -{59,63,-19}, -{59,63,-18}, -{59,63,-17}, -{59,63,-16}, -{59,63,-15}, -{59,63,-14}, -{59,63,-13}, -{59,63,-12}, -{59,63,-11}, -{59,63,-10}, -{59,63,-9}, -{59,63,-8}, -{59,63,-7}, -{59,63,-6}, -{59,63,-5}, -{59,63,-4}, -{59,63,-3}, -{59,63,-2}, -{59,63,-1}, -{59,63,0}, -{59,63,1}, -{59,63,2}, -{59,63,3}, -{59,63,4}, -{59,63,5}, -{59,63,6}, -{59,63,7}, -{59,63,8}, -{59,63,9}, -{59,63,10}, -{59,63,11}, -{59,63,12}, -{59,63,13}, -{59,63,14}, -{59,63,15}, -{59,63,16}, -{59,63,17}, -{59,63,18}, -{59,63,19}, -{59,63,20}, -{59,63,21}, -{59,63,22}, -{59,63,23}, -{59,63,24}, -{59,63,25}, -{59,63,26}, -{59,63,27}, -{59,63,28}, -{59,63,29}, -{59,63,30}, -{59,63,31}, -{59,63,32}, -{59,63,33}, -{59,63,34}, -{59,63,35}, -{59,63,36}, -{59,63,37}, -{59,63,38}, -{59,63,39}, -{59,63,40}, -{59,63,41}, -{59,63,42}, -{59,63,43}, -{59,63,44}, -{59,63,45}, -{59,63,46}, -{59,63,47}, -{59,63,48}, -{59,63,49}, -{59,63,50}, -{59,63,51}, -{59,63,52}, -{59,63,53}, -{59,63,54}, -{59,63,55}, -{59,63,56}, -{59,63,57}, -{59,63,58}, -{59,63,59}, -{59,63,60}, -{59,63,61}, -{59,63,62}, -{59,63,63}, -{59,63,64}, -{59,63,65}, -{59,63,66}, -{59,63,67}, -{59,63,68}, -{59,63,69}, -{59,64,-63}, -{59,64,-62}, -{59,64,-61}, -{59,64,-60}, -{59,64,-59}, -{59,64,-58}, -{59,64,-57}, -{59,64,-56}, -{59,64,-55}, -{59,64,-54}, -{59,64,-53}, -{59,64,-52}, -{59,64,-51}, -{59,64,-50}, -{59,64,-49}, -{59,64,-48}, -{59,64,-47}, -{59,64,-46}, -{59,64,-45}, -{59,64,-44}, -{59,64,-43}, -{59,64,-42}, -{59,64,-41}, -{59,64,-40}, -{59,64,-39}, -{59,64,-38}, -{59,64,-37}, -{59,64,-36}, -{59,64,-35}, -{59,64,-34}, -{59,64,-33}, -{59,64,-32}, -{59,64,-31}, -{59,64,-30}, -{59,64,-29}, -{59,64,-28}, -{59,64,-27}, -{59,64,-26}, -{59,64,-25}, -{59,64,-24}, -{59,64,-23}, -{59,64,-22}, -{59,64,-21}, -{59,64,-20}, -{59,64,-19}, -{59,64,-18}, -{59,64,-17}, -{59,64,-16}, -{59,64,-15}, -{59,64,-14}, -{59,64,-13}, -{59,64,-12}, -{59,64,-11}, -{59,64,-10}, -{59,64,-9}, -{59,64,-8}, -{59,64,-7}, -{59,64,-6}, -{59,64,-5}, -{59,64,-4}, -{59,64,-3}, -{59,64,-2}, -{59,64,-1}, -{59,64,0}, -{59,64,1}, -{59,64,2}, -{59,64,3}, -{59,64,4}, -{59,64,5}, -{59,64,6}, -{59,64,7}, -{59,64,8}, -{59,64,9}, -{59,64,10}, -{59,64,11}, -{59,64,12}, -{59,64,13}, -{59,64,14}, -{59,64,15}, -{59,64,16}, -{59,64,17}, -{59,64,18}, -{59,64,19}, -{59,64,20}, -{59,64,21}, -{59,64,22}, -{59,64,23}, -{59,64,24}, -{59,64,25}, -{59,64,26}, -{59,64,27}, -{59,64,28}, -{59,64,29}, -{59,64,30}, -{59,64,31}, -{59,64,32}, -{59,64,33}, -{59,64,34}, -{59,64,35}, -{59,64,36}, -{59,64,37}, -{59,64,38}, -{59,64,39}, -{59,64,40}, -{59,64,41}, -{59,64,42}, -{59,64,43}, -{59,64,44}, -{59,64,45}, -{59,64,46}, -{59,64,47}, -{59,64,48}, -{59,64,49}, -{59,64,50}, -{59,64,51}, -{59,64,52}, -{59,64,53}, -{59,64,54}, -{59,64,55}, -{59,64,56}, -{59,64,57}, -{59,64,58}, -{59,64,59}, -{59,64,60}, -{59,64,61}, -{59,64,62}, -{59,64,63}, -{59,64,64}, -{59,64,65}, -{59,64,66}, -{59,64,67}, -{59,64,68}, -{59,64,69}, -{59,65,-63}, -{59,65,-62}, -{59,65,-61}, -{59,65,-60}, -{59,65,-59}, -{59,65,-58}, -{59,65,-57}, -{59,65,-56}, -{59,65,-55}, -{59,65,-54}, -{59,65,-53}, -{59,65,-52}, -{59,65,-51}, -{59,65,-50}, -{59,65,-49}, -{59,65,-48}, -{59,65,-47}, -{59,65,-46}, -{59,65,-45}, -{59,65,-44}, -{59,65,-43}, -{59,65,-42}, -{59,65,-41}, -{59,65,-40}, -{59,65,-39}, -{59,65,-38}, -{59,65,-37}, -{59,65,-36}, -{59,65,-35}, -{59,65,-34}, -{59,65,-33}, -{59,65,-32}, -{59,65,-31}, -{59,65,-30}, -{59,65,-29}, -{59,65,-28}, -{59,65,-27}, -{59,65,-26}, -{59,65,-25}, -{59,65,-24}, -{59,65,-23}, -{59,65,-22}, -{59,65,-21}, -{59,65,-20}, -{59,65,-19}, -{59,65,-18}, -{59,65,-17}, -{59,65,-16}, -{59,65,-15}, -{59,65,-14}, -{59,65,-13}, -{59,65,-12}, -{59,65,-11}, -{59,65,-10}, -{59,65,-9}, -{59,65,-8}, -{59,65,-7}, -{59,65,-6}, -{59,65,-5}, -{59,65,-4}, -{59,65,-3}, -{59,65,-2}, -{59,65,-1}, -{59,65,0}, -{59,65,1}, -{59,65,2}, -{59,65,3}, -{59,65,4}, -{59,65,5}, -{59,65,6}, -{59,65,7}, -{59,65,8}, -{59,65,9}, -{59,65,10}, -{59,65,11}, -{59,65,12}, -{59,65,13}, -{59,65,14}, -{59,65,15}, -{59,65,16}, -{59,65,17}, -{59,65,18}, -{59,65,19}, -{59,65,20}, -{59,65,21}, -{59,65,22}, -{59,65,23}, -{59,65,24}, -{59,65,25}, -{59,65,26}, -{59,65,27}, -{59,65,28}, -{59,65,29}, -{59,65,30}, -{59,65,31}, -{59,65,32}, -{59,65,33}, -{59,65,34}, -{59,65,35}, -{59,65,36}, -{59,65,37}, -{59,65,38}, -{59,65,39}, -{59,65,40}, -{59,65,41}, -{59,65,42}, -{59,65,43}, -{59,65,44}, -{59,65,45}, -{59,65,46}, -{59,65,47}, -{59,65,48}, -{59,65,49}, -{59,65,50}, -{59,65,51}, -{59,65,52}, -{59,65,53}, -{59,65,54}, -{59,65,55}, -{59,65,56}, -{59,65,57}, -{59,65,58}, -{59,66,-63}, -{59,66,-62}, -{59,66,-61}, -{59,66,-60}, -{59,66,-59}, -{59,66,-58}, -{59,66,-57}, -{59,66,-56}, -{59,66,-55}, -{59,66,-54}, -{59,66,-53}, -{59,66,-52}, -{59,66,-51}, -{59,66,-50}, -{59,66,-49}, -{59,66,-48}, -{59,66,-47}, -{59,66,-46}, -{59,66,-45}, -{59,66,-44}, -{59,66,-43}, -{59,66,-42}, -{59,66,-41}, -{59,66,-40}, -{59,66,-39}, -{59,66,-38}, -{59,66,-37}, -{59,66,-36}, -{59,66,-35}, -{59,66,-34}, -{59,66,-33}, -{59,66,-32}, -{59,66,-31}, -{59,66,-30}, -{59,66,-29}, -{59,66,-28}, -{59,66,-27}, -{59,66,-26}, -{59,66,-25}, -{59,66,-24}, -{59,66,-23}, -{59,66,-22}, -{59,66,-21}, -{59,66,-20}, -{59,66,-19}, -{59,66,-18}, -{59,66,-17}, -{59,66,-16}, -{59,66,-15}, -{59,66,-14}, -{59,66,-13}, -{59,66,-12}, -{59,66,-11}, -{59,66,-10}, -{59,66,-9}, -{59,66,-8}, -{59,66,-7}, -{59,66,-6}, -{59,66,-5}, -{59,66,-4}, -{59,66,-3}, -{59,66,-2}, -{59,66,-1}, -{59,66,0}, -{59,66,1}, -{59,66,2}, -{59,66,3}, -{59,66,4}, -{59,66,5}, -{59,66,6}, -{59,66,7}, -{59,66,8}, -{59,66,9}, -{59,66,10}, -{59,66,11}, -{59,66,12}, -{59,66,13}, -{59,66,14}, -{59,66,15}, -{59,66,16}, -{59,66,17}, -{59,66,18}, -{59,66,19}, -{59,66,20}, -{59,66,21}, -{59,66,22}, -{59,66,23}, -{59,66,24}, -{59,66,25}, -{59,66,26}, -{59,66,27}, -{59,66,28}, -{59,66,29}, -{59,66,30}, -{59,66,31}, -{59,66,32}, -{59,66,33}, -{59,66,34}, -{59,66,35}, -{59,66,36}, -{59,66,37}, -{59,66,38}, -{59,66,39}, -{59,66,40}, -{59,66,41}, -{59,66,42}, -{59,66,43}, -{59,66,44}, -{59,66,45}, -{59,66,46}, -{59,66,47}, -{59,66,48}, -{59,67,-63}, -{59,67,-62}, -{59,67,-61}, -{59,67,-60}, -{59,67,-59}, -{59,67,-58}, -{59,67,-57}, -{59,67,-56}, -{59,67,-55}, -{59,67,-54}, -{59,67,-53}, -{59,67,-52}, -{59,67,-51}, -{59,67,-50}, -{59,67,-49}, -{59,67,-48}, -{59,67,-47}, -{59,67,-46}, -{59,67,-45}, -{59,67,-44}, -{59,67,-43}, -{59,67,-42}, -{59,67,-41}, -{59,67,-40}, -{59,67,-39}, -{59,67,-38}, -{59,67,-37}, -{59,67,-36}, -{59,67,-35}, -{59,67,-34}, -{59,67,-33}, -{59,67,-32}, -{59,67,-31}, -{59,67,-30}, -{59,67,-29}, -{59,67,-28}, -{59,67,-27}, -{59,67,-26}, -{59,67,-25}, -{59,67,-24}, -{59,67,-23}, -{59,67,-22}, -{59,67,-21}, -{59,67,-20}, -{59,67,-19}, -{59,67,-18}, -{59,67,-17}, -{59,67,-16}, -{59,67,-15}, -{59,67,-14}, -{59,67,-13}, -{59,67,-12}, -{59,67,-11}, -{59,67,-10}, -{59,67,-9}, -{59,67,-8}, -{59,67,-7}, -{59,67,-6}, -{59,67,-5}, -{59,67,-4}, -{59,67,-3}, -{59,67,-2}, -{59,67,-1}, -{59,67,0}, -{59,67,1}, -{59,67,2}, -{59,67,3}, -{59,67,4}, -{59,67,5}, -{59,67,6}, -{59,67,7}, -{59,67,8}, -{59,67,9}, -{59,67,10}, -{59,67,11}, -{59,67,12}, -{59,67,13}, -{59,67,14}, -{59,67,15}, -{59,67,16}, -{59,67,17}, -{59,67,18}, -{59,67,19}, -{59,67,20}, -{59,67,21}, -{59,67,22}, -{59,67,23}, -{59,67,24}, -{59,67,25}, -{59,67,26}, -{59,67,27}, -{59,67,28}, -{59,67,29}, -{59,67,30}, -{59,67,31}, -{59,67,32}, -{59,67,33}, -{59,67,34}, -{59,67,35}, -{59,67,36}, -{59,67,37}, -{59,67,38}, -{59,67,39}, -{59,67,40}, -{59,68,-63}, -{59,68,-62}, -{59,68,-61}, -{59,68,-60}, -{59,68,-59}, -{59,68,-58}, -{59,68,-57}, -{59,68,-56}, -{59,68,-55}, -{59,68,-54}, -{59,68,-53}, -{59,68,-52}, -{59,68,-51}, -{59,68,-50}, -{59,68,-49}, -{59,68,-48}, -{59,68,-47}, -{59,68,-46}, -{59,68,-45}, -{59,68,-44}, -{59,68,-43}, -{59,68,-42}, -{59,68,-41}, -{59,68,-40}, -{59,68,-39}, -{59,68,-38}, -{59,68,-37}, -{59,68,-36}, -{59,68,-35}, -{59,68,-34}, -{59,68,-33}, -{59,68,-32}, -{59,68,-31}, -{59,68,-30}, -{59,68,-29}, -{59,68,-28}, -{59,68,-27}, -{59,68,-26}, -{59,68,-25}, -{59,68,-24}, -{59,68,-23}, -{59,68,-22}, -{59,68,-21}, -{59,68,-20}, -{59,68,-19}, -{59,68,-18}, -{59,68,-17}, -{59,68,-16}, -{59,68,-15}, -{59,68,-14}, -{59,68,-13}, -{59,68,-12}, -{59,68,-11}, -{59,68,-10}, -{59,68,-9}, -{59,68,-8}, -{59,68,-7}, -{59,68,-6}, -{59,68,-5}, -{59,68,-4}, -{59,68,-3}, -{59,68,-2}, -{59,68,-1}, -{59,68,0}, -{59,68,1}, -{59,68,2}, -{59,68,3}, -{59,68,4}, -{59,68,5}, -{59,68,6}, -{59,68,7}, -{59,68,8}, -{59,68,9}, -{59,68,10}, -{59,68,11}, -{59,68,12}, -{59,68,13}, -{59,68,14}, -{59,68,15}, -{59,68,16}, -{59,68,17}, -{59,68,18}, -{59,68,19}, -{59,68,20}, -{59,68,21}, -{59,68,22}, -{59,68,23}, -{59,68,24}, -{59,68,25}, -{59,68,26}, -{59,68,27}, -{59,68,28}, -{59,68,29}, -{59,68,30}, -{59,68,31}, -{59,68,32}, -{59,68,33}, -{59,68,34}, -{59,69,-63}, -{59,69,-62}, -{59,69,-61}, -{59,69,-60}, -{59,69,-59}, -{59,69,-58}, -{59,69,-57}, -{59,69,-56}, -{59,69,-55}, -{59,69,-54}, -{59,69,-53}, -{59,69,-52}, -{59,69,-51}, -{59,69,-50}, -{59,69,-49}, -{59,69,-48}, -{59,69,-47}, -{59,69,-46}, -{59,69,-45}, -{59,69,-44}, -{59,69,-43}, -{59,69,-42}, -{59,69,-41}, -{59,69,-40}, -{59,69,-39}, -{59,69,-38}, -{59,69,-37}, -{59,69,-36}, -{59,69,-35}, -{59,69,-34}, -{59,69,-33}, -{59,69,-32}, -{59,69,-31}, -{59,69,-30}, -{59,69,-29}, -{59,69,-28}, -{59,69,-27}, -{59,69,-26}, -{59,69,-25}, -{59,69,-24}, -{59,69,-23}, -{59,69,-22}, -{59,69,-21}, -{59,69,-20}, -{59,69,-19}, -{59,69,-18}, -{59,69,-17}, -{59,69,-16}, -{59,69,-15}, -{59,69,-14}, -{59,69,-13}, -{59,69,-12}, -{59,69,-11}, -{59,69,-10}, -{59,69,-9}, -{59,69,-8}, -{59,69,-7}, -{59,69,-6}, -{59,69,-5}, -{59,69,-4}, -{59,69,-3}, -{59,69,-2}, -{59,69,-1}, -{59,69,0}, -{59,69,1}, -{59,69,2}, -{59,69,3}, -{59,69,4}, -{59,69,5}, -{59,69,6}, -{59,69,7}, -{59,69,8}, -{59,69,9}, -{59,69,10}, -{59,69,11}, -{59,69,12}, -{59,69,13}, -{59,69,14}, -{59,69,15}, -{59,69,16}, -{59,69,17}, -{59,69,18}, -{59,69,19}, -{59,69,20}, -{59,69,21}, -{59,69,22}, -{59,69,23}, -{59,69,24}, -{59,69,25}, -{59,69,26}, -{59,69,27}, -{59,69,28}, -{59,70,-63}, -{59,70,-62}, -{59,70,-61}, -{59,70,-60}, -{59,70,-59}, -{59,70,-58}, -{59,70,-57}, -{59,70,-56}, -{59,70,-55}, -{59,70,-54}, -{59,70,-53}, -{59,70,-52}, -{59,70,-51}, -{59,70,-50}, -{59,70,-49}, -{59,70,-48}, -{59,70,-47}, -{59,70,-46}, -{59,70,-45}, -{59,70,-44}, -{59,70,-43}, -{59,70,-42}, -{59,70,-41}, -{59,70,-40}, -{59,70,-39}, -{59,70,-38}, -{59,70,-37}, -{59,70,-36}, -{59,70,-35}, -{59,70,-34}, -{59,70,-33}, -{59,70,-32}, -{59,70,-31}, -{59,70,-30}, -{59,70,-29}, -{59,70,-28}, -{59,70,-27}, -{59,70,-26}, -{59,70,-25}, -{59,70,-24}, -{59,70,-23}, -{59,70,-22}, -{59,70,-21}, -{59,70,-20}, -{59,70,-19}, -{59,70,-18}, -{59,70,-17}, -{59,70,-16}, -{59,70,-15}, -{59,70,-14}, -{59,70,-13}, -{59,70,-12}, -{59,70,-11}, -{59,70,-10}, -{59,70,-9}, -{59,70,-8}, -{59,70,-7}, -{59,70,-6}, -{59,70,-5}, -{59,70,-4}, -{59,70,-3}, -{59,70,-2}, -{59,70,-1}, -{59,70,0}, -{59,70,1}, -{59,70,2}, -{59,70,3}, -{59,70,4}, -{59,70,5}, -{59,70,6}, -{59,70,7}, -{59,70,8}, -{59,70,9}, -{59,70,10}, -{59,70,11}, -{59,70,12}, -{59,70,13}, -{59,70,14}, -{59,70,15}, -{59,70,16}, -{59,70,17}, -{59,70,18}, -{59,70,19}, -{59,70,20}, -{59,70,21}, -{59,70,22}, -{59,70,23}, -{59,71,-63}, -{59,71,-62}, -{59,71,-61}, -{59,71,-60}, -{59,71,-59}, -{59,71,-58}, -{59,71,-57}, -{59,71,-56}, -{59,71,-55}, -{59,71,-54}, -{59,71,-53}, -{59,71,-52}, -{59,71,-51}, -{59,71,-50}, -{59,71,-49}, -{59,71,-48}, -{59,71,-47}, -{59,71,-46}, -{59,71,-45}, -{59,71,-44}, -{59,71,-43}, -{59,71,-42}, -{59,71,-41}, -{59,71,-40}, -{59,71,-39}, -{59,71,-38}, -{59,71,-37}, -{59,71,-36}, -{59,71,-35}, -{59,71,-34}, -{59,71,-33}, -{59,71,-32}, -{59,71,-31}, -{59,71,-30}, -{59,71,-29}, -{59,71,-28}, -{59,71,-27}, -{59,71,-26}, -{59,71,-25}, -{59,71,-24}, -{59,71,-23}, -{59,71,-22}, -{59,71,-21}, -{59,71,-20}, -{59,71,-19}, -{59,71,-18}, -{59,71,-17}, -{59,71,-16}, -{59,71,-15}, -{59,71,-14}, -{59,71,-13}, -{59,71,-12}, -{59,71,-11}, -{59,71,-10}, -{59,71,-9}, -{59,71,-8}, -{59,71,-7}, -{59,71,-6}, -{59,71,-5}, -{59,71,-4}, -{59,71,-3}, -{59,71,-2}, -{59,71,-1}, -{59,71,0}, -{59,71,1}, -{59,71,2}, -{59,71,3}, -{59,71,4}, -{59,71,5}, -{59,71,6}, -{59,71,7}, -{59,71,8}, -{59,71,9}, -{59,71,10}, -{59,71,11}, -{59,71,12}, -{59,71,13}, -{59,71,14}, -{59,71,15}, -{59,71,16}, -{59,71,17}, -{59,71,18}, -{59,72,-63}, -{59,72,-62}, -{59,72,-61}, -{59,72,-60}, -{59,72,-59}, -{59,72,-58}, -{59,72,-57}, -{59,72,-56}, -{59,72,-55}, -{59,72,-54}, -{59,72,-53}, -{59,72,-52}, -{59,72,-51}, -{59,72,-50}, -{59,72,-49}, -{59,72,-48}, -{59,72,-47}, -{59,72,-46}, -{59,72,-45}, -{59,72,-44}, -{59,72,-43}, -{59,72,-42}, -{59,72,-41}, -{59,72,-40}, -{59,72,-39}, -{59,72,-38}, -{59,72,-37}, -{59,72,-36}, -{59,72,-35}, -{59,72,-34}, -{59,72,-33}, -{59,72,-32}, -{59,72,-31}, -{59,72,-30}, -{59,72,-29}, -{59,72,-28}, -{59,72,-27}, -{59,72,-26}, -{59,72,-25}, -{59,72,-24}, -{59,72,-23}, -{59,72,-22}, -{59,72,-21}, -{59,72,-20}, -{59,72,-19}, -{59,72,-18}, -{59,72,-17}, -{59,72,-16}, -{59,72,-15}, -{59,72,-14}, -{59,72,-13}, -{59,72,-12}, -{59,72,-11}, -{59,72,-10}, -{59,72,-9}, -{59,72,-8}, -{59,72,-7}, -{59,72,-6}, -{59,72,-5}, -{59,72,-4}, -{59,72,-3}, -{59,72,-2}, -{59,72,-1}, -{59,72,0}, -{59,72,1}, -{59,72,2}, -{59,72,3}, -{59,72,4}, -{59,72,5}, -{59,72,6}, -{59,72,7}, -{59,72,8}, -{59,72,9}, -{59,72,10}, -{59,72,11}, -{59,72,12}, -{59,72,13}, -{59,72,14}, -{59,73,-63}, -{59,73,-62}, -{59,73,-61}, -{59,73,-60}, -{59,73,-59}, -{59,73,-58}, -{59,73,-57}, -{59,73,-56}, -{59,73,-55}, -{59,73,-54}, -{59,73,-53}, -{59,73,-52}, -{59,73,-51}, -{59,73,-50}, -{59,73,-49}, -{59,73,-48}, -{59,73,-47}, -{59,73,-46}, -{59,73,-45}, -{59,73,-44}, -{59,73,-43}, -{59,73,-42}, -{59,73,-41}, -{59,73,-40}, -{59,73,-39}, -{59,73,-38}, -{59,73,-37}, -{59,73,-36}, -{59,73,-35}, -{59,73,-34}, -{59,73,-33}, -{59,73,-32}, -{59,73,-31}, -{59,73,-30}, -{59,73,-29}, -{59,73,-28}, -{59,73,-27}, -{59,73,-26}, -{59,73,-25}, -{59,73,-24}, -{59,73,-23}, -{59,73,-22}, -{59,73,-21}, -{59,73,-20}, -{59,73,-19}, -{59,73,-18}, -{59,73,-17}, -{59,73,-16}, -{59,73,-15}, -{59,73,-14}, -{59,73,-13}, -{59,73,-12}, -{59,73,-11}, -{59,73,-10}, -{59,73,-9}, -{59,73,-8}, -{59,73,-7}, -{59,73,-6}, -{59,73,-5}, -{59,73,-4}, -{59,73,-3}, -{59,73,-2}, -{59,73,-1}, -{59,73,0}, -{59,73,1}, -{59,73,2}, -{59,73,3}, -{59,73,4}, -{59,73,5}, -{59,73,6}, -{59,73,7}, -{59,73,8}, -{59,73,9}, -{59,74,-63}, -{59,74,-62}, -{59,74,-61}, -{59,74,-60}, -{59,74,-59}, -{59,74,-58}, -{59,74,-57}, -{59,74,-56}, -{59,74,-55}, -{59,74,-54}, -{59,74,-53}, -{59,74,-52}, -{59,74,-51}, -{59,74,-50}, -{59,74,-49}, -{59,74,-48}, -{59,74,-47}, -{59,74,-46}, -{59,74,-45}, -{59,74,-44}, -{59,74,-43}, -{59,74,-42}, -{59,74,-41}, -{59,74,-40}, -{59,74,-39}, -{59,74,-38}, -{59,74,-37}, -{59,74,-36}, -{59,74,-35}, -{59,74,-34}, -{59,74,-33}, -{59,74,-32}, -{59,74,-31}, -{59,74,-30}, -{59,74,-29}, -{59,74,-28}, -{59,74,-27}, -{59,74,-26}, -{59,74,-25}, -{59,74,-24}, -{59,74,-23}, -{59,74,-22}, -{59,74,-21}, -{59,74,-20}, -{59,74,-19}, -{59,74,-18}, -{59,74,-17}, -{59,74,-16}, -{59,74,-15}, -{59,74,-14}, -{59,74,-13}, -{59,74,-12}, -{59,74,-11}, -{59,74,-10}, -{59,74,-9}, -{59,74,-8}, -{59,74,-7}, -{59,74,-6}, -{59,74,-5}, -{59,74,-4}, -{59,74,-3}, -{59,74,-2}, -{59,74,-1}, -{59,74,0}, -{59,74,1}, -{59,74,2}, -{59,74,3}, -{59,74,4}, -{59,74,5}, -{59,74,6}, -{59,75,-63}, -{59,75,-62}, -{59,75,-61}, -{59,75,-60}, -{59,75,-59}, -{59,75,-58}, -{59,75,-57}, -{59,75,-56}, -{59,75,-55}, -{59,75,-54}, -{59,75,-53}, -{59,75,-52}, -{59,75,-51}, -{59,75,-50}, -{59,75,-49}, -{59,75,-48}, -{59,75,-47}, -{59,75,-46}, -{59,75,-45}, -{59,75,-44}, -{59,75,-43}, -{59,75,-42}, -{59,75,-41}, -{59,75,-40}, -{59,75,-39}, -{59,75,-38}, -{59,75,-37}, -{59,75,-36}, -{59,75,-35}, -{59,75,-34}, -{59,75,-33}, -{59,75,-32}, -{59,75,-31}, -{59,75,-30}, -{59,75,-29}, -{59,75,-28}, -{59,75,-27}, -{59,75,-26}, -{59,75,-25}, -{59,75,-24}, -{59,75,-23}, -{59,75,-22}, -{59,75,-21}, -{59,75,-20}, -{59,75,-19}, -{59,75,-18}, -{59,75,-17}, -{59,75,-16}, -{59,75,-15}, -{59,75,-14}, -{59,75,-13}, -{59,75,-12}, -{59,75,-11}, -{59,75,-10}, -{59,75,-9}, -{59,75,-8}, -{59,75,-7}, -{59,75,-6}, -{59,75,-5}, -{59,75,-4}, -{59,75,-3}, -{59,75,-2}, -{59,75,-1}, -{59,75,0}, -{59,75,1}, -{59,75,2}, -{59,76,-63}, -{59,76,-62}, -{59,76,-61}, -{59,76,-60}, -{59,76,-59}, -{59,76,-58}, -{59,76,-57}, -{59,76,-56}, -{59,76,-55}, -{59,76,-54}, -{59,76,-53}, -{59,76,-52}, -{59,76,-51}, -{59,76,-50}, -{59,76,-49}, -{59,76,-48}, -{59,76,-47}, -{59,76,-46}, -{59,76,-45}, -{59,76,-44}, -{59,76,-43}, -{59,76,-42}, -{59,76,-41}, -{59,76,-40}, -{59,76,-39}, -{59,76,-38}, -{59,76,-37}, -{59,76,-36}, -{59,76,-35}, -{59,76,-34}, -{59,76,-33}, -{59,76,-32}, -{59,76,-31}, -{59,76,-30}, -{59,76,-29}, -{59,76,-28}, -{59,76,-27}, -{59,76,-26}, -{59,76,-25}, -{59,76,-24}, -{59,76,-23}, -{59,76,-22}, -{59,76,-21}, -{59,76,-20}, -{59,76,-19}, -{59,76,-18}, -{59,76,-17}, -{59,76,-16}, -{59,76,-15}, -{59,76,-14}, -{59,76,-13}, -{59,76,-12}, -{59,76,-11}, -{59,76,-10}, -{59,76,-9}, -{59,76,-8}, -{59,76,-7}, -{59,76,-6}, -{59,76,-5}, -{59,76,-4}, -{59,76,-3}, -{59,76,-2}, -{59,77,-63}, -{59,77,-62}, -{59,77,-61}, -{59,77,-60}, -{59,77,-59}, -{59,77,-58}, -{59,77,-57}, -{59,77,-56}, -{59,77,-55}, -{59,77,-54}, -{59,77,-53}, -{59,77,-52}, -{59,77,-51}, -{59,77,-50}, -{59,77,-49}, -{59,77,-48}, -{59,77,-47}, -{59,77,-46}, -{59,77,-45}, -{59,77,-44}, -{59,77,-43}, -{59,77,-42}, -{59,77,-41}, -{59,77,-40}, -{59,77,-39}, -{59,77,-38}, -{59,77,-37}, -{59,77,-36}, -{59,77,-35}, -{59,77,-34}, -{59,77,-33}, -{59,77,-32}, -{59,77,-31}, -{59,77,-30}, -{59,77,-29}, -{59,77,-28}, -{59,77,-27}, -{59,77,-26}, -{59,77,-25}, -{59,77,-24}, -{59,77,-23}, -{59,77,-22}, -{59,77,-21}, -{59,77,-20}, -{59,77,-19}, -{59,77,-18}, -{59,77,-17}, -{59,77,-16}, -{59,77,-15}, -{59,77,-14}, -{59,77,-13}, -{59,77,-12}, -{59,77,-11}, -{59,77,-10}, -{59,77,-9}, -{59,77,-8}, -{59,77,-7}, -{59,77,-6}, -{59,77,-5}, -{59,78,-63}, -{59,78,-62}, -{59,78,-61}, -{59,78,-60}, -{59,78,-59}, -{59,78,-58}, -{59,78,-57}, -{59,78,-56}, -{59,78,-55}, -{59,78,-54}, -{59,78,-53}, -{59,78,-52}, -{59,78,-51}, -{59,78,-50}, -{59,78,-49}, -{59,78,-48}, -{59,78,-47}, -{59,78,-46}, -{59,78,-45}, -{59,78,-44}, -{59,78,-43}, -{59,78,-42}, -{59,78,-41}, -{59,78,-40}, -{59,78,-39}, -{59,78,-38}, -{59,78,-37}, -{59,78,-36}, -{59,78,-35}, -{59,78,-34}, -{59,78,-33}, -{59,78,-32}, -{59,78,-31}, -{59,78,-30}, -{59,78,-29}, -{59,78,-28}, -{59,78,-27}, -{59,78,-26}, -{59,78,-25}, -{59,78,-24}, -{59,78,-23}, -{59,78,-22}, -{59,78,-21}, -{59,78,-20}, -{59,78,-19}, -{59,78,-18}, -{59,78,-17}, -{59,78,-16}, -{59,78,-15}, -{59,78,-14}, -{59,78,-13}, -{59,78,-12}, -{59,78,-11}, -{59,78,-10}, -{59,78,-9}, -{59,78,-8}, -{59,79,-63}, -{59,79,-62}, -{59,79,-61}, -{59,79,-60}, -{59,79,-59}, -{59,79,-58}, -{59,79,-57}, -{59,79,-56}, -{59,79,-55}, -{59,79,-54}, -{59,79,-53}, -{59,79,-52}, -{59,79,-51}, -{59,79,-50}, -{59,79,-49}, -{59,79,-48}, -{59,79,-47}, -{59,79,-46}, -{59,79,-45}, -{59,79,-44}, -{59,79,-43}, -{59,79,-42}, -{59,79,-41}, -{59,79,-40}, -{59,79,-39}, -{59,79,-38}, -{59,79,-37}, -{59,79,-36}, -{59,79,-35}, -{59,79,-34}, -{59,79,-33}, -{59,79,-32}, -{59,79,-31}, -{59,79,-30}, -{59,79,-29}, -{59,79,-28}, -{59,79,-27}, -{59,79,-26}, -{59,79,-25}, -{59,79,-24}, -{59,79,-23}, -{59,79,-22}, -{59,79,-21}, -{59,79,-20}, -{59,79,-19}, -{59,79,-18}, -{59,79,-17}, -{59,79,-16}, -{59,79,-15}, -{59,79,-14}, -{59,79,-13}, -{59,79,-12}, -{59,79,-11}, -{59,80,-63}, -{59,80,-62}, -{59,80,-61}, -{59,80,-60}, -{59,80,-59}, -{59,80,-58}, -{59,80,-57}, -{59,80,-56}, -{59,80,-55}, -{59,80,-54}, -{59,80,-53}, -{59,80,-52}, -{59,80,-51}, -{59,80,-50}, -{59,80,-49}, -{59,80,-48}, -{59,80,-47}, -{59,80,-46}, -{59,80,-45}, -{59,80,-44}, -{59,80,-43}, -{59,80,-42}, -{59,80,-41}, -{59,80,-40}, -{59,80,-39}, -{59,80,-38}, -{59,80,-37}, -{59,80,-36}, -{59,80,-35}, -{59,80,-34}, -{59,80,-33}, -{59,80,-32}, -{59,80,-31}, -{59,80,-30}, -{59,80,-29}, -{59,80,-28}, -{59,80,-27}, -{59,80,-26}, -{59,80,-25}, -{59,80,-24}, -{59,80,-23}, -{59,80,-22}, -{59,80,-21}, -{59,80,-20}, -{59,80,-19}, -{59,80,-18}, -{59,80,-17}, -{59,80,-16}, -{59,80,-15}, -{59,80,-14}, -{59,81,-63}, -{59,81,-62}, -{59,81,-61}, -{59,81,-60}, -{59,81,-59}, -{59,81,-58}, -{59,81,-57}, -{59,81,-56}, -{59,81,-55}, -{59,81,-54}, -{59,81,-53}, -{59,81,-52}, -{59,81,-51}, -{59,81,-50}, -{59,81,-49}, -{59,81,-48}, -{59,81,-47}, -{59,81,-46}, -{59,81,-45}, -{59,81,-44}, -{59,81,-43}, -{59,81,-42}, -{59,81,-41}, -{59,81,-40}, -{59,81,-39}, -{59,81,-38}, -{59,81,-37}, -{59,81,-36}, -{59,81,-35}, -{59,81,-34}, -{59,81,-33}, -{59,81,-32}, -{59,81,-31}, -{59,81,-30}, -{59,81,-29}, -{59,81,-28}, -{59,81,-27}, -{59,81,-26}, -{59,81,-25}, -{59,81,-24}, -{59,81,-23}, -{59,81,-22}, -{59,81,-21}, -{59,81,-20}, -{59,81,-19}, -{59,81,-18}, -{59,81,-17}, -{59,82,-63}, -{59,82,-62}, -{59,82,-61}, -{59,82,-60}, -{59,82,-59}, -{59,82,-58}, -{59,82,-57}, -{59,82,-56}, -{59,82,-55}, -{59,82,-54}, -{59,82,-53}, -{59,82,-52}, -{59,82,-51}, -{59,82,-50}, -{59,82,-49}, -{59,82,-48}, -{59,82,-47}, -{59,82,-46}, -{59,82,-45}, -{59,82,-44}, -{59,82,-43}, -{59,82,-42}, -{59,82,-41}, -{59,82,-40}, -{59,82,-39}, -{59,82,-38}, -{59,82,-37}, -{59,82,-36}, -{59,82,-35}, -{59,82,-34}, -{59,82,-33}, -{59,82,-32}, -{59,82,-31}, -{59,82,-30}, -{59,82,-29}, -{59,82,-28}, -{59,82,-27}, -{59,82,-26}, -{59,82,-25}, -{59,82,-24}, -{59,82,-23}, -{59,82,-22}, -{59,82,-21}, -{59,82,-20}, -{59,83,-63}, -{59,83,-62}, -{59,83,-61}, -{59,83,-60}, -{59,83,-59}, -{59,83,-58}, -{59,83,-57}, -{59,83,-56}, -{59,83,-55}, -{59,83,-54}, -{59,83,-53}, -{59,83,-52}, -{59,83,-51}, -{59,83,-50}, -{59,83,-49}, -{59,83,-48}, -{59,83,-47}, -{59,83,-46}, -{59,83,-45}, -{59,83,-44}, -{59,83,-43}, -{59,83,-42}, -{59,83,-41}, -{59,83,-40}, -{59,83,-39}, -{59,83,-38}, -{59,83,-37}, -{59,83,-36}, -{59,83,-35}, -{59,83,-34}, -{59,83,-33}, -{59,83,-32}, -{59,83,-31}, -{59,83,-30}, -{59,83,-29}, -{59,83,-28}, -{59,83,-27}, -{59,83,-26}, -{59,83,-25}, -{59,83,-24}, -{59,83,-23}, -{59,83,-22}, -{59,84,-63}, -{59,84,-62}, -{59,84,-61}, -{59,84,-60}, -{59,84,-59}, -{59,84,-58}, -{59,84,-57}, -{59,84,-56}, -{59,84,-55}, -{59,84,-54}, -{59,84,-53}, -{59,84,-52}, -{59,84,-51}, -{59,84,-50}, -{59,84,-49}, -{59,84,-48}, -{59,84,-47}, -{59,84,-46}, -{59,84,-45}, -{59,84,-44}, -{59,84,-43}, -{59,84,-42}, -{59,84,-41}, -{59,84,-40}, -{59,84,-39}, -{59,84,-38}, -{59,84,-37}, -{59,84,-36}, -{59,84,-35}, -{59,84,-34}, -{59,84,-33}, -{59,84,-32}, -{59,84,-31}, -{59,84,-30}, -{59,84,-29}, -{59,84,-28}, -{59,84,-27}, -{59,84,-26}, -{59,84,-25}, -{59,85,-63}, -{59,85,-62}, -{59,85,-61}, -{59,85,-60}, -{59,85,-59}, -{59,85,-58}, -{59,85,-57}, -{59,85,-56}, -{59,85,-55}, -{59,85,-54}, -{59,85,-53}, -{59,85,-52}, -{59,85,-51}, -{59,85,-50}, -{59,85,-49}, -{59,85,-48}, -{59,85,-47}, -{59,85,-46}, -{59,85,-45}, -{59,85,-44}, -{59,85,-43}, -{59,85,-42}, -{59,85,-41}, -{59,85,-40}, -{59,85,-39}, -{59,85,-38}, -{59,85,-37}, -{59,85,-36}, -{59,85,-35}, -{59,85,-34}, -{59,85,-33}, -{59,85,-32}, -{59,85,-31}, -{59,85,-30}, -{59,85,-29}, -{59,85,-28}, -{59,85,-27}, -{59,86,-63}, -{59,86,-62}, -{59,86,-61}, -{59,86,-60}, -{59,86,-59}, -{59,86,-58}, -{59,86,-57}, -{59,86,-56}, -{59,86,-55}, -{59,86,-54}, -{59,86,-53}, -{59,86,-52}, -{59,86,-51}, -{59,86,-50}, -{59,86,-49}, -{59,86,-48}, -{59,86,-47}, -{59,86,-46}, -{59,86,-45}, -{59,86,-44}, -{59,86,-43}, -{59,86,-42}, -{59,86,-41}, -{59,86,-40}, -{59,86,-39}, -{59,86,-38}, -{59,86,-37}, -{59,86,-36}, -{59,86,-35}, -{59,86,-34}, -{59,86,-33}, -{59,86,-32}, -{59,86,-31}, -{59,86,-30}, -{59,87,-63}, -{59,87,-62}, -{59,87,-61}, -{59,87,-60}, -{59,87,-59}, -{59,87,-58}, -{59,87,-57}, -{59,87,-56}, -{59,87,-55}, -{59,87,-54}, -{59,87,-53}, -{59,87,-52}, -{59,87,-51}, -{59,87,-50}, -{59,87,-49}, -{59,87,-48}, -{59,87,-47}, -{59,87,-46}, -{59,87,-45}, -{59,87,-44}, -{59,87,-43}, -{59,87,-42}, -{59,87,-41}, -{59,87,-40}, -{59,87,-39}, -{59,87,-38}, -{59,87,-37}, -{59,87,-36}, -{59,87,-35}, -{59,87,-34}, -{59,87,-33}, -{59,87,-32}, -{59,88,-63}, -{59,88,-62}, -{59,88,-61}, -{59,88,-60}, -{59,88,-59}, -{59,88,-58}, -{59,88,-57}, -{59,88,-56}, -{59,88,-55}, -{59,88,-54}, -{59,88,-53}, -{59,88,-52}, -{59,88,-51}, -{59,88,-50}, -{59,88,-49}, -{59,88,-48}, -{59,88,-47}, -{59,88,-46}, -{59,88,-45}, -{59,88,-44}, -{59,88,-43}, -{59,88,-42}, -{59,88,-41}, -{59,88,-40}, -{59,88,-39}, -{59,88,-38}, -{59,88,-37}, -{59,88,-36}, -{59,88,-35}, -{59,89,-63}, -{59,89,-62}, -{59,89,-61}, -{59,89,-60}, -{59,89,-59}, -{59,89,-58}, -{59,89,-57}, -{59,89,-56}, -{59,89,-55}, -{59,89,-54}, -{59,89,-53}, -{59,89,-52}, -{59,89,-51}, -{59,89,-50}, -{59,89,-49}, -{59,89,-48}, -{59,89,-47}, -{59,89,-46}, -{59,89,-45}, -{59,89,-44}, -{59,89,-43}, -{59,89,-42}, -{59,89,-41}, -{59,89,-40}, -{59,89,-39}, -{59,89,-38}, -{59,89,-37}, -{59,90,-63}, -{59,90,-62}, -{59,90,-61}, -{59,90,-60}, -{59,90,-59}, -{59,90,-58}, -{59,90,-57}, -{59,90,-56}, -{59,90,-55}, -{59,90,-54}, -{59,90,-53}, -{59,90,-52}, -{59,90,-51}, -{59,90,-50}, -{59,90,-49}, -{59,90,-48}, -{59,90,-47}, -{59,90,-46}, -{59,90,-45}, -{59,90,-44}, -{59,90,-43}, -{59,90,-42}, -{59,90,-41}, -{59,90,-40}, -{59,90,-39}, -{59,91,-63}, -{59,91,-62}, -{59,91,-61}, -{59,91,-60}, -{59,91,-59}, -{59,91,-58}, -{59,91,-57}, -{59,91,-56}, -{59,91,-55}, -{59,91,-54}, -{59,91,-53}, -{59,91,-52}, -{59,91,-51}, -{59,91,-50}, -{59,91,-49}, -{59,91,-48}, -{59,91,-47}, -{59,91,-46}, -{59,91,-45}, -{59,91,-44}, -{59,91,-43}, -{59,91,-42}, -{59,91,-41}, -{59,92,-63}, -{59,92,-62}, -{59,92,-61}, -{59,92,-60}, -{59,92,-59}, -{59,92,-58}, -{59,92,-57}, -{59,92,-56}, -{59,92,-55}, -{59,92,-54}, -{59,92,-53}, -{59,92,-52}, -{59,92,-51}, -{59,92,-50}, -{59,92,-49}, -{59,92,-48}, -{59,92,-47}, -{59,92,-46}, -{59,92,-45}, -{59,92,-44}, -{59,92,-43}, -{59,93,-63}, -{59,93,-62}, -{59,93,-61}, -{59,93,-60}, -{59,93,-59}, -{59,93,-58}, -{59,93,-57}, -{59,93,-56}, -{59,93,-55}, -{59,93,-54}, -{59,93,-53}, -{59,93,-52}, -{59,93,-51}, -{59,93,-50}, -{59,93,-49}, -{59,93,-48}, -{59,93,-47}, -{59,93,-46}, -{59,93,-45}, -{59,94,-63}, -{59,94,-62}, -{59,94,-61}, -{59,94,-60}, -{59,94,-59}, -{59,94,-58}, -{59,94,-57}, -{59,94,-56}, -{59,94,-55}, -{59,94,-54}, -{59,94,-53}, -{59,94,-52}, -{59,94,-51}, -{59,94,-50}, -{59,94,-49}, -{59,94,-48}, -{59,95,-63}, -{59,95,-62}, -{59,95,-61}, -{59,95,-60}, -{59,95,-59}, -{59,95,-58}, -{59,95,-57}, -{59,95,-56}, -{59,95,-55}, -{59,95,-54}, -{59,95,-53}, -{59,95,-52}, -{59,95,-51}, -{59,95,-50}, -{59,96,-63}, -{59,96,-62}, -{59,96,-61}, -{59,96,-60}, -{59,96,-59}, -{59,96,-58}, -{59,96,-57}, -{59,96,-56}, -{59,97,-63}, -{59,97,-62}, -{60,-63,60}, -{60,-63,61}, -{60,-62,55}, -{60,-62,56}, -{60,-62,57}, -{60,-62,58}, -{60,-62,59}, -{60,-62,60}, -{60,-62,61}, -{60,-61,51}, -{60,-61,52}, -{60,-61,53}, -{60,-61,54}, -{60,-61,55}, -{60,-61,56}, -{60,-61,57}, -{60,-61,58}, -{60,-61,59}, -{60,-61,60}, -{60,-61,61}, -{60,-60,47}, -{60,-60,48}, -{60,-60,49}, -{60,-60,50}, -{60,-60,51}, -{60,-60,52}, -{60,-60,53}, -{60,-60,54}, -{60,-60,55}, -{60,-60,56}, -{60,-60,57}, -{60,-60,58}, -{60,-60,59}, -{60,-60,60}, -{60,-60,61}, -{60,-59,44}, -{60,-59,45}, -{60,-59,46}, -{60,-59,47}, -{60,-59,48}, -{60,-59,49}, -{60,-59,50}, -{60,-59,51}, -{60,-59,52}, -{60,-59,53}, -{60,-59,54}, -{60,-59,55}, -{60,-59,56}, -{60,-59,57}, -{60,-59,58}, -{60,-59,59}, -{60,-59,60}, -{60,-59,61}, -{60,-58,40}, -{60,-58,41}, -{60,-58,42}, -{60,-58,43}, -{60,-58,44}, -{60,-58,45}, -{60,-58,46}, -{60,-58,47}, -{60,-58,48}, -{60,-58,49}, -{60,-58,50}, -{60,-58,51}, -{60,-58,52}, -{60,-58,53}, -{60,-58,54}, -{60,-58,55}, -{60,-58,56}, -{60,-58,57}, -{60,-58,58}, -{60,-58,59}, -{60,-58,60}, -{60,-58,61}, -{60,-57,37}, -{60,-57,38}, -{60,-57,39}, -{60,-57,40}, -{60,-57,41}, -{60,-57,42}, -{60,-57,43}, -{60,-57,44}, -{60,-57,45}, -{60,-57,46}, -{60,-57,47}, -{60,-57,48}, -{60,-57,49}, -{60,-57,50}, -{60,-57,51}, -{60,-57,52}, -{60,-57,53}, -{60,-57,54}, -{60,-57,55}, -{60,-57,56}, -{60,-57,57}, -{60,-57,58}, -{60,-57,59}, -{60,-57,60}, -{60,-57,61}, -{60,-56,34}, -{60,-56,35}, -{60,-56,36}, -{60,-56,37}, -{60,-56,38}, -{60,-56,39}, -{60,-56,40}, -{60,-56,41}, -{60,-56,42}, -{60,-56,43}, -{60,-56,44}, -{60,-56,45}, -{60,-56,46}, -{60,-56,47}, -{60,-56,48}, -{60,-56,49}, -{60,-56,50}, -{60,-56,51}, -{60,-56,52}, -{60,-56,53}, -{60,-56,54}, -{60,-56,55}, -{60,-56,56}, -{60,-56,57}, -{60,-56,58}, -{60,-56,59}, -{60,-56,60}, -{60,-56,61}, -{60,-55,32}, -{60,-55,33}, -{60,-55,34}, -{60,-55,35}, -{60,-55,36}, -{60,-55,37}, -{60,-55,38}, -{60,-55,39}, -{60,-55,40}, -{60,-55,41}, -{60,-55,42}, -{60,-55,43}, -{60,-55,44}, -{60,-55,45}, -{60,-55,46}, -{60,-55,47}, -{60,-55,48}, -{60,-55,49}, -{60,-55,50}, -{60,-55,51}, -{60,-55,52}, -{60,-55,53}, -{60,-55,54}, -{60,-55,55}, -{60,-55,56}, -{60,-55,57}, -{60,-55,58}, -{60,-55,59}, -{60,-55,60}, -{60,-55,61}, -{60,-54,29}, -{60,-54,30}, -{60,-54,31}, -{60,-54,32}, -{60,-54,33}, -{60,-54,34}, -{60,-54,35}, -{60,-54,36}, -{60,-54,37}, -{60,-54,38}, -{60,-54,39}, -{60,-54,40}, -{60,-54,41}, -{60,-54,42}, -{60,-54,43}, -{60,-54,44}, -{60,-54,45}, -{60,-54,46}, -{60,-54,47}, -{60,-54,48}, -{60,-54,49}, -{60,-54,50}, -{60,-54,51}, -{60,-54,52}, -{60,-54,53}, -{60,-54,54}, -{60,-54,55}, -{60,-54,56}, -{60,-54,57}, -{60,-54,58}, -{60,-54,59}, -{60,-54,60}, -{60,-54,61}, -{60,-53,26}, -{60,-53,27}, -{60,-53,28}, -{60,-53,29}, -{60,-53,30}, -{60,-53,31}, -{60,-53,32}, -{60,-53,33}, -{60,-53,34}, -{60,-53,35}, -{60,-53,36}, -{60,-53,37}, -{60,-53,38}, -{60,-53,39}, -{60,-53,40}, -{60,-53,41}, -{60,-53,42}, -{60,-53,43}, -{60,-53,44}, -{60,-53,45}, -{60,-53,46}, -{60,-53,47}, -{60,-53,48}, -{60,-53,49}, -{60,-53,50}, -{60,-53,51}, -{60,-53,52}, -{60,-53,53}, -{60,-53,54}, -{60,-53,55}, -{60,-53,56}, -{60,-53,57}, -{60,-53,58}, -{60,-53,59}, -{60,-53,60}, -{60,-53,61}, -{60,-52,24}, -{60,-52,25}, -{60,-52,26}, -{60,-52,27}, -{60,-52,28}, -{60,-52,29}, -{60,-52,30}, -{60,-52,31}, -{60,-52,32}, -{60,-52,33}, -{60,-52,34}, -{60,-52,35}, -{60,-52,36}, -{60,-52,37}, -{60,-52,38}, -{60,-52,39}, -{60,-52,40}, -{60,-52,41}, -{60,-52,42}, -{60,-52,43}, -{60,-52,44}, -{60,-52,45}, -{60,-52,46}, -{60,-52,47}, -{60,-52,48}, -{60,-52,49}, -{60,-52,50}, -{60,-52,51}, -{60,-52,52}, -{60,-52,53}, -{60,-52,54}, -{60,-52,55}, -{60,-52,56}, -{60,-52,57}, -{60,-52,58}, -{60,-52,59}, -{60,-52,60}, -{60,-52,61}, -{60,-51,22}, -{60,-51,23}, -{60,-51,24}, -{60,-51,25}, -{60,-51,26}, -{60,-51,27}, -{60,-51,28}, -{60,-51,29}, -{60,-51,30}, -{60,-51,31}, -{60,-51,32}, -{60,-51,33}, -{60,-51,34}, -{60,-51,35}, -{60,-51,36}, -{60,-51,37}, -{60,-51,38}, -{60,-51,39}, -{60,-51,40}, -{60,-51,41}, -{60,-51,42}, -{60,-51,43}, -{60,-51,44}, -{60,-51,45}, -{60,-51,46}, -{60,-51,47}, -{60,-51,48}, -{60,-51,49}, -{60,-51,50}, -{60,-51,51}, -{60,-51,52}, -{60,-51,53}, -{60,-51,54}, -{60,-51,55}, -{60,-51,56}, -{60,-51,57}, -{60,-51,58}, -{60,-51,59}, -{60,-51,60}, -{60,-51,61}, -{60,-50,19}, -{60,-50,20}, -{60,-50,21}, -{60,-50,22}, -{60,-50,23}, -{60,-50,24}, -{60,-50,25}, -{60,-50,26}, -{60,-50,27}, -{60,-50,28}, -{60,-50,29}, -{60,-50,30}, -{60,-50,31}, -{60,-50,32}, -{60,-50,33}, -{60,-50,34}, -{60,-50,35}, -{60,-50,36}, -{60,-50,37}, -{60,-50,38}, -{60,-50,39}, -{60,-50,40}, -{60,-50,41}, -{60,-50,42}, -{60,-50,43}, -{60,-50,44}, -{60,-50,45}, -{60,-50,46}, -{60,-50,47}, -{60,-50,48}, -{60,-50,49}, -{60,-50,50}, -{60,-50,51}, -{60,-50,52}, -{60,-50,53}, -{60,-50,54}, -{60,-50,55}, -{60,-50,56}, -{60,-50,57}, -{60,-50,58}, -{60,-50,59}, -{60,-50,60}, -{60,-50,61}, -{60,-49,17}, -{60,-49,18}, -{60,-49,19}, -{60,-49,20}, -{60,-49,21}, -{60,-49,22}, -{60,-49,23}, -{60,-49,24}, -{60,-49,25}, -{60,-49,26}, -{60,-49,27}, -{60,-49,28}, -{60,-49,29}, -{60,-49,30}, -{60,-49,31}, -{60,-49,32}, -{60,-49,33}, -{60,-49,34}, -{60,-49,35}, -{60,-49,36}, -{60,-49,37}, -{60,-49,38}, -{60,-49,39}, -{60,-49,40}, -{60,-49,41}, -{60,-49,42}, -{60,-49,43}, -{60,-49,44}, -{60,-49,45}, -{60,-49,46}, -{60,-49,47}, -{60,-49,48}, -{60,-49,49}, -{60,-49,50}, -{60,-49,51}, -{60,-49,52}, -{60,-49,53}, -{60,-49,54}, -{60,-49,55}, -{60,-49,56}, -{60,-49,57}, -{60,-49,58}, -{60,-49,59}, -{60,-49,60}, -{60,-49,61}, -{60,-48,15}, -{60,-48,16}, -{60,-48,17}, -{60,-48,18}, -{60,-48,19}, -{60,-48,20}, -{60,-48,21}, -{60,-48,22}, -{60,-48,23}, -{60,-48,24}, -{60,-48,25}, -{60,-48,26}, -{60,-48,27}, -{60,-48,28}, -{60,-48,29}, -{60,-48,30}, -{60,-48,31}, -{60,-48,32}, -{60,-48,33}, -{60,-48,34}, -{60,-48,35}, -{60,-48,36}, -{60,-48,37}, -{60,-48,38}, -{60,-48,39}, -{60,-48,40}, -{60,-48,41}, -{60,-48,42}, -{60,-48,43}, -{60,-48,44}, -{60,-48,45}, -{60,-48,46}, -{60,-48,47}, -{60,-48,48}, -{60,-48,49}, -{60,-48,50}, -{60,-48,51}, -{60,-48,52}, -{60,-48,53}, -{60,-48,54}, -{60,-48,55}, -{60,-48,56}, -{60,-48,57}, -{60,-48,58}, -{60,-48,59}, -{60,-48,60}, -{60,-48,61}, -{60,-47,13}, -{60,-47,14}, -{60,-47,15}, -{60,-47,16}, -{60,-47,17}, -{60,-47,18}, -{60,-47,19}, -{60,-47,20}, -{60,-47,21}, -{60,-47,22}, -{60,-47,23}, -{60,-47,24}, -{60,-47,25}, -{60,-47,26}, -{60,-47,27}, -{60,-47,28}, -{60,-47,29}, -{60,-47,30}, -{60,-47,31}, -{60,-47,32}, -{60,-47,33}, -{60,-47,34}, -{60,-47,35}, -{60,-47,36}, -{60,-47,37}, -{60,-47,38}, -{60,-47,39}, -{60,-47,40}, -{60,-47,41}, -{60,-47,42}, -{60,-47,43}, -{60,-47,44}, -{60,-47,45}, -{60,-47,46}, -{60,-47,47}, -{60,-47,48}, -{60,-47,49}, -{60,-47,50}, -{60,-47,51}, -{60,-47,52}, -{60,-47,53}, -{60,-47,54}, -{60,-47,55}, -{60,-47,56}, -{60,-47,57}, -{60,-47,58}, -{60,-47,59}, -{60,-47,60}, -{60,-47,61}, -{60,-46,11}, -{60,-46,12}, -{60,-46,13}, -{60,-46,14}, -{60,-46,15}, -{60,-46,16}, -{60,-46,17}, -{60,-46,18}, -{60,-46,19}, -{60,-46,20}, -{60,-46,21}, -{60,-46,22}, -{60,-46,23}, -{60,-46,24}, -{60,-46,25}, -{60,-46,26}, -{60,-46,27}, -{60,-46,28}, -{60,-46,29}, -{60,-46,30}, -{60,-46,31}, -{60,-46,32}, -{60,-46,33}, -{60,-46,34}, -{60,-46,35}, -{60,-46,36}, -{60,-46,37}, -{60,-46,38}, -{60,-46,39}, -{60,-46,40}, -{60,-46,41}, -{60,-46,42}, -{60,-46,43}, -{60,-46,44}, -{60,-46,45}, -{60,-46,46}, -{60,-46,47}, -{60,-46,48}, -{60,-46,49}, -{60,-46,50}, -{60,-46,51}, -{60,-46,52}, -{60,-46,53}, -{60,-46,54}, -{60,-46,55}, -{60,-46,56}, -{60,-46,57}, -{60,-46,58}, -{60,-46,59}, -{60,-46,60}, -{60,-46,61}, -{60,-45,9}, -{60,-45,10}, -{60,-45,11}, -{60,-45,12}, -{60,-45,13}, -{60,-45,14}, -{60,-45,15}, -{60,-45,16}, -{60,-45,17}, -{60,-45,18}, -{60,-45,19}, -{60,-45,20}, -{60,-45,21}, -{60,-45,22}, -{60,-45,23}, -{60,-45,24}, -{60,-45,25}, -{60,-45,26}, -{60,-45,27}, -{60,-45,28}, -{60,-45,29}, -{60,-45,30}, -{60,-45,31}, -{60,-45,32}, -{60,-45,33}, -{60,-45,34}, -{60,-45,35}, -{60,-45,36}, -{60,-45,37}, -{60,-45,38}, -{60,-45,39}, -{60,-45,40}, -{60,-45,41}, -{60,-45,42}, -{60,-45,43}, -{60,-45,44}, -{60,-45,45}, -{60,-45,46}, -{60,-45,47}, -{60,-45,48}, -{60,-45,49}, -{60,-45,50}, -{60,-45,51}, -{60,-45,52}, -{60,-45,53}, -{60,-45,54}, -{60,-45,55}, -{60,-45,56}, -{60,-45,57}, -{60,-45,58}, -{60,-45,59}, -{60,-45,60}, -{60,-45,61}, -{60,-44,7}, -{60,-44,8}, -{60,-44,9}, -{60,-44,10}, -{60,-44,11}, -{60,-44,12}, -{60,-44,13}, -{60,-44,14}, -{60,-44,15}, -{60,-44,16}, -{60,-44,17}, -{60,-44,18}, -{60,-44,19}, -{60,-44,20}, -{60,-44,21}, -{60,-44,22}, -{60,-44,23}, -{60,-44,24}, -{60,-44,25}, -{60,-44,26}, -{60,-44,27}, -{60,-44,28}, -{60,-44,29}, -{60,-44,30}, -{60,-44,31}, -{60,-44,32}, -{60,-44,33}, -{60,-44,34}, -{60,-44,35}, -{60,-44,36}, -{60,-44,37}, -{60,-44,38}, -{60,-44,39}, -{60,-44,40}, -{60,-44,41}, -{60,-44,42}, -{60,-44,43}, -{60,-44,44}, -{60,-44,45}, -{60,-44,46}, -{60,-44,47}, -{60,-44,48}, -{60,-44,49}, -{60,-44,50}, -{60,-44,51}, -{60,-44,52}, -{60,-44,53}, -{60,-44,54}, -{60,-44,55}, -{60,-44,56}, -{60,-44,57}, -{60,-44,58}, -{60,-44,59}, -{60,-44,60}, -{60,-44,61}, -{60,-43,5}, -{60,-43,6}, -{60,-43,7}, -{60,-43,8}, -{60,-43,9}, -{60,-43,10}, -{60,-43,11}, -{60,-43,12}, -{60,-43,13}, -{60,-43,14}, -{60,-43,15}, -{60,-43,16}, -{60,-43,17}, -{60,-43,18}, -{60,-43,19}, -{60,-43,20}, -{60,-43,21}, -{60,-43,22}, -{60,-43,23}, -{60,-43,24}, -{60,-43,25}, -{60,-43,26}, -{60,-43,27}, -{60,-43,28}, -{60,-43,29}, -{60,-43,30}, -{60,-43,31}, -{60,-43,32}, -{60,-43,33}, -{60,-43,34}, -{60,-43,35}, -{60,-43,36}, -{60,-43,37}, -{60,-43,38}, -{60,-43,39}, -{60,-43,40}, -{60,-43,41}, -{60,-43,42}, -{60,-43,43}, -{60,-43,44}, -{60,-43,45}, -{60,-43,46}, -{60,-43,47}, -{60,-43,48}, -{60,-43,49}, -{60,-43,50}, -{60,-43,51}, -{60,-43,52}, -{60,-43,53}, -{60,-43,54}, -{60,-43,55}, -{60,-43,56}, -{60,-43,57}, -{60,-43,58}, -{60,-43,59}, -{60,-43,60}, -{60,-43,61}, -{60,-43,62}, -{60,-42,3}, -{60,-42,4}, -{60,-42,5}, -{60,-42,6}, -{60,-42,7}, -{60,-42,8}, -{60,-42,9}, -{60,-42,10}, -{60,-42,11}, -{60,-42,12}, -{60,-42,13}, -{60,-42,14}, -{60,-42,15}, -{60,-42,16}, -{60,-42,17}, -{60,-42,18}, -{60,-42,19}, -{60,-42,20}, -{60,-42,21}, -{60,-42,22}, -{60,-42,23}, -{60,-42,24}, -{60,-42,25}, -{60,-42,26}, -{60,-42,27}, -{60,-42,28}, -{60,-42,29}, -{60,-42,30}, -{60,-42,31}, -{60,-42,32}, -{60,-42,33}, -{60,-42,34}, -{60,-42,35}, -{60,-42,36}, -{60,-42,37}, -{60,-42,38}, -{60,-42,39}, -{60,-42,40}, -{60,-42,41}, -{60,-42,42}, -{60,-42,43}, -{60,-42,44}, -{60,-42,45}, -{60,-42,46}, -{60,-42,47}, -{60,-42,48}, -{60,-42,49}, -{60,-42,50}, -{60,-42,51}, -{60,-42,52}, -{60,-42,53}, -{60,-42,54}, -{60,-42,55}, -{60,-42,56}, -{60,-42,57}, -{60,-42,58}, -{60,-42,59}, -{60,-42,60}, -{60,-42,61}, -{60,-42,62}, -{60,-41,2}, -{60,-41,3}, -{60,-41,4}, -{60,-41,5}, -{60,-41,6}, -{60,-41,7}, -{60,-41,8}, -{60,-41,9}, -{60,-41,10}, -{60,-41,11}, -{60,-41,12}, -{60,-41,13}, -{60,-41,14}, -{60,-41,15}, -{60,-41,16}, -{60,-41,17}, -{60,-41,18}, -{60,-41,19}, -{60,-41,20}, -{60,-41,21}, -{60,-41,22}, -{60,-41,23}, -{60,-41,24}, -{60,-41,25}, -{60,-41,26}, -{60,-41,27}, -{60,-41,28}, -{60,-41,29}, -{60,-41,30}, -{60,-41,31}, -{60,-41,32}, -{60,-41,33}, -{60,-41,34}, -{60,-41,35}, -{60,-41,36}, -{60,-41,37}, -{60,-41,38}, -{60,-41,39}, -{60,-41,40}, -{60,-41,41}, -{60,-41,42}, -{60,-41,43}, -{60,-41,44}, -{60,-41,45}, -{60,-41,46}, -{60,-41,47}, -{60,-41,48}, -{60,-41,49}, -{60,-41,50}, -{60,-41,51}, -{60,-41,52}, -{60,-41,53}, -{60,-41,54}, -{60,-41,55}, -{60,-41,56}, -{60,-41,57}, -{60,-41,58}, -{60,-41,59}, -{60,-41,60}, -{60,-41,61}, -{60,-41,62}, -{60,-40,0}, -{60,-40,1}, -{60,-40,2}, -{60,-40,3}, -{60,-40,4}, -{60,-40,5}, -{60,-40,6}, -{60,-40,7}, -{60,-40,8}, -{60,-40,9}, -{60,-40,10}, -{60,-40,11}, -{60,-40,12}, -{60,-40,13}, -{60,-40,14}, -{60,-40,15}, -{60,-40,16}, -{60,-40,17}, -{60,-40,18}, -{60,-40,19}, -{60,-40,20}, -{60,-40,21}, -{60,-40,22}, -{60,-40,23}, -{60,-40,24}, -{60,-40,25}, -{60,-40,26}, -{60,-40,27}, -{60,-40,28}, -{60,-40,29}, -{60,-40,30}, -{60,-40,31}, -{60,-40,32}, -{60,-40,33}, -{60,-40,34}, -{60,-40,35}, -{60,-40,36}, -{60,-40,37}, -{60,-40,38}, -{60,-40,39}, -{60,-40,40}, -{60,-40,41}, -{60,-40,42}, -{60,-40,43}, -{60,-40,44}, -{60,-40,45}, -{60,-40,46}, -{60,-40,47}, -{60,-40,48}, -{60,-40,49}, -{60,-40,50}, -{60,-40,51}, -{60,-40,52}, -{60,-40,53}, -{60,-40,54}, -{60,-40,55}, -{60,-40,56}, -{60,-40,57}, -{60,-40,58}, -{60,-40,59}, -{60,-40,60}, -{60,-40,61}, -{60,-40,62}, -{60,-39,-2}, -{60,-39,-1}, -{60,-39,0}, -{60,-39,1}, -{60,-39,2}, -{60,-39,3}, -{60,-39,4}, -{60,-39,5}, -{60,-39,6}, -{60,-39,7}, -{60,-39,8}, -{60,-39,9}, -{60,-39,10}, -{60,-39,11}, -{60,-39,12}, -{60,-39,13}, -{60,-39,14}, -{60,-39,15}, -{60,-39,16}, -{60,-39,17}, -{60,-39,18}, -{60,-39,19}, -{60,-39,20}, -{60,-39,21}, -{60,-39,22}, -{60,-39,23}, -{60,-39,24}, -{60,-39,25}, -{60,-39,26}, -{60,-39,27}, -{60,-39,28}, -{60,-39,29}, -{60,-39,30}, -{60,-39,31}, -{60,-39,32}, -{60,-39,33}, -{60,-39,34}, -{60,-39,35}, -{60,-39,36}, -{60,-39,37}, -{60,-39,38}, -{60,-39,39}, -{60,-39,40}, -{60,-39,41}, -{60,-39,42}, -{60,-39,43}, -{60,-39,44}, -{60,-39,45}, -{60,-39,46}, -{60,-39,47}, -{60,-39,48}, -{60,-39,49}, -{60,-39,50}, -{60,-39,51}, -{60,-39,52}, -{60,-39,53}, -{60,-39,54}, -{60,-39,55}, -{60,-39,56}, -{60,-39,57}, -{60,-39,58}, -{60,-39,59}, -{60,-39,60}, -{60,-39,61}, -{60,-39,62}, -{60,-38,-4}, -{60,-38,-3}, -{60,-38,-2}, -{60,-38,-1}, -{60,-38,0}, -{60,-38,1}, -{60,-38,2}, -{60,-38,3}, -{60,-38,4}, -{60,-38,5}, -{60,-38,6}, -{60,-38,7}, -{60,-38,8}, -{60,-38,9}, -{60,-38,10}, -{60,-38,11}, -{60,-38,12}, -{60,-38,13}, -{60,-38,14}, -{60,-38,15}, -{60,-38,16}, -{60,-38,17}, -{60,-38,18}, -{60,-38,19}, -{60,-38,20}, -{60,-38,21}, -{60,-38,22}, -{60,-38,23}, -{60,-38,24}, -{60,-38,25}, -{60,-38,26}, -{60,-38,27}, -{60,-38,28}, -{60,-38,29}, -{60,-38,30}, -{60,-38,31}, -{60,-38,32}, -{60,-38,33}, -{60,-38,34}, -{60,-38,35}, -{60,-38,36}, -{60,-38,37}, -{60,-38,38}, -{60,-38,39}, -{60,-38,40}, -{60,-38,41}, -{60,-38,42}, -{60,-38,43}, -{60,-38,44}, -{60,-38,45}, -{60,-38,46}, -{60,-38,47}, -{60,-38,48}, -{60,-38,49}, -{60,-38,50}, -{60,-38,51}, -{60,-38,52}, -{60,-38,53}, -{60,-38,54}, -{60,-38,55}, -{60,-38,56}, -{60,-38,57}, -{60,-38,58}, -{60,-38,59}, -{60,-38,60}, -{60,-38,61}, -{60,-38,62}, -{60,-37,-5}, -{60,-37,-4}, -{60,-37,-3}, -{60,-37,-2}, -{60,-37,-1}, -{60,-37,0}, -{60,-37,1}, -{60,-37,2}, -{60,-37,3}, -{60,-37,4}, -{60,-37,5}, -{60,-37,6}, -{60,-37,7}, -{60,-37,8}, -{60,-37,9}, -{60,-37,10}, -{60,-37,11}, -{60,-37,12}, -{60,-37,13}, -{60,-37,14}, -{60,-37,15}, -{60,-37,16}, -{60,-37,17}, -{60,-37,18}, -{60,-37,19}, -{60,-37,20}, -{60,-37,21}, -{60,-37,22}, -{60,-37,23}, -{60,-37,24}, -{60,-37,25}, -{60,-37,26}, -{60,-37,27}, -{60,-37,28}, -{60,-37,29}, -{60,-37,30}, -{60,-37,31}, -{60,-37,32}, -{60,-37,33}, -{60,-37,34}, -{60,-37,35}, -{60,-37,36}, -{60,-37,37}, -{60,-37,38}, -{60,-37,39}, -{60,-37,40}, -{60,-37,41}, -{60,-37,42}, -{60,-37,43}, -{60,-37,44}, -{60,-37,45}, -{60,-37,46}, -{60,-37,47}, -{60,-37,48}, -{60,-37,49}, -{60,-37,50}, -{60,-37,51}, -{60,-37,52}, -{60,-37,53}, -{60,-37,54}, -{60,-37,55}, -{60,-37,56}, -{60,-37,57}, -{60,-37,58}, -{60,-37,59}, -{60,-37,60}, -{60,-37,61}, -{60,-37,62}, -{60,-36,-7}, -{60,-36,-6}, -{60,-36,-5}, -{60,-36,-4}, -{60,-36,-3}, -{60,-36,-2}, -{60,-36,-1}, -{60,-36,0}, -{60,-36,1}, -{60,-36,2}, -{60,-36,3}, -{60,-36,4}, -{60,-36,5}, -{60,-36,6}, -{60,-36,7}, -{60,-36,8}, -{60,-36,9}, -{60,-36,10}, -{60,-36,11}, -{60,-36,12}, -{60,-36,13}, -{60,-36,14}, -{60,-36,15}, -{60,-36,16}, -{60,-36,17}, -{60,-36,18}, -{60,-36,19}, -{60,-36,20}, -{60,-36,21}, -{60,-36,22}, -{60,-36,23}, -{60,-36,24}, -{60,-36,25}, -{60,-36,26}, -{60,-36,27}, -{60,-36,28}, -{60,-36,29}, -{60,-36,30}, -{60,-36,31}, -{60,-36,32}, -{60,-36,33}, -{60,-36,34}, -{60,-36,35}, -{60,-36,36}, -{60,-36,37}, -{60,-36,38}, -{60,-36,39}, -{60,-36,40}, -{60,-36,41}, -{60,-36,42}, -{60,-36,43}, -{60,-36,44}, -{60,-36,45}, -{60,-36,46}, -{60,-36,47}, -{60,-36,48}, -{60,-36,49}, -{60,-36,50}, -{60,-36,51}, -{60,-36,52}, -{60,-36,53}, -{60,-36,54}, -{60,-36,55}, -{60,-36,56}, -{60,-36,57}, -{60,-36,58}, -{60,-36,59}, -{60,-36,60}, -{60,-36,61}, -{60,-36,62}, -{60,-35,-8}, -{60,-35,-7}, -{60,-35,-6}, -{60,-35,-5}, -{60,-35,-4}, -{60,-35,-3}, -{60,-35,-2}, -{60,-35,-1}, -{60,-35,0}, -{60,-35,1}, -{60,-35,2}, -{60,-35,3}, -{60,-35,4}, -{60,-35,5}, -{60,-35,6}, -{60,-35,7}, -{60,-35,8}, -{60,-35,9}, -{60,-35,10}, -{60,-35,11}, -{60,-35,12}, -{60,-35,13}, -{60,-35,14}, -{60,-35,15}, -{60,-35,16}, -{60,-35,17}, -{60,-35,18}, -{60,-35,19}, -{60,-35,20}, -{60,-35,21}, -{60,-35,22}, -{60,-35,23}, -{60,-35,24}, -{60,-35,25}, -{60,-35,26}, -{60,-35,27}, -{60,-35,28}, -{60,-35,29}, -{60,-35,30}, -{60,-35,31}, -{60,-35,32}, -{60,-35,33}, -{60,-35,34}, -{60,-35,35}, -{60,-35,36}, -{60,-35,37}, -{60,-35,38}, -{60,-35,39}, -{60,-35,40}, -{60,-35,41}, -{60,-35,42}, -{60,-35,43}, -{60,-35,44}, -{60,-35,45}, -{60,-35,46}, -{60,-35,47}, -{60,-35,48}, -{60,-35,49}, -{60,-35,50}, -{60,-35,51}, -{60,-35,52}, -{60,-35,53}, -{60,-35,54}, -{60,-35,55}, -{60,-35,56}, -{60,-35,57}, -{60,-35,58}, -{60,-35,59}, -{60,-35,60}, -{60,-35,61}, -{60,-35,62}, -{60,-34,-10}, -{60,-34,-9}, -{60,-34,-8}, -{60,-34,-7}, -{60,-34,-6}, -{60,-34,-5}, -{60,-34,-4}, -{60,-34,-3}, -{60,-34,-2}, -{60,-34,-1}, -{60,-34,0}, -{60,-34,1}, -{60,-34,2}, -{60,-34,3}, -{60,-34,4}, -{60,-34,5}, -{60,-34,6}, -{60,-34,7}, -{60,-34,8}, -{60,-34,9}, -{60,-34,10}, -{60,-34,11}, -{60,-34,12}, -{60,-34,13}, -{60,-34,14}, -{60,-34,15}, -{60,-34,16}, -{60,-34,17}, -{60,-34,18}, -{60,-34,19}, -{60,-34,20}, -{60,-34,21}, -{60,-34,22}, -{60,-34,23}, -{60,-34,24}, -{60,-34,25}, -{60,-34,26}, -{60,-34,27}, -{60,-34,28}, -{60,-34,29}, -{60,-34,30}, -{60,-34,31}, -{60,-34,32}, -{60,-34,33}, -{60,-34,34}, -{60,-34,35}, -{60,-34,36}, -{60,-34,37}, -{60,-34,38}, -{60,-34,39}, -{60,-34,40}, -{60,-34,41}, -{60,-34,42}, -{60,-34,43}, -{60,-34,44}, -{60,-34,45}, -{60,-34,46}, -{60,-34,47}, -{60,-34,48}, -{60,-34,49}, -{60,-34,50}, -{60,-34,51}, -{60,-34,52}, -{60,-34,53}, -{60,-34,54}, -{60,-34,55}, -{60,-34,56}, -{60,-34,57}, -{60,-34,58}, -{60,-34,59}, -{60,-34,60}, -{60,-34,61}, -{60,-34,62}, -{60,-33,-12}, -{60,-33,-11}, -{60,-33,-10}, -{60,-33,-9}, -{60,-33,-8}, -{60,-33,-7}, -{60,-33,-6}, -{60,-33,-5}, -{60,-33,-4}, -{60,-33,-3}, -{60,-33,-2}, -{60,-33,-1}, -{60,-33,0}, -{60,-33,1}, -{60,-33,2}, -{60,-33,3}, -{60,-33,4}, -{60,-33,5}, -{60,-33,6}, -{60,-33,7}, -{60,-33,8}, -{60,-33,9}, -{60,-33,10}, -{60,-33,11}, -{60,-33,12}, -{60,-33,13}, -{60,-33,14}, -{60,-33,15}, -{60,-33,16}, -{60,-33,17}, -{60,-33,18}, -{60,-33,19}, -{60,-33,20}, -{60,-33,21}, -{60,-33,22}, -{60,-33,23}, -{60,-33,24}, -{60,-33,25}, -{60,-33,26}, -{60,-33,27}, -{60,-33,28}, -{60,-33,29}, -{60,-33,30}, -{60,-33,31}, -{60,-33,32}, -{60,-33,33}, -{60,-33,34}, -{60,-33,35}, -{60,-33,36}, -{60,-33,37}, -{60,-33,38}, -{60,-33,39}, -{60,-33,40}, -{60,-33,41}, -{60,-33,42}, -{60,-33,43}, -{60,-33,44}, -{60,-33,45}, -{60,-33,46}, -{60,-33,47}, -{60,-33,48}, -{60,-33,49}, -{60,-33,50}, -{60,-33,51}, -{60,-33,52}, -{60,-33,53}, -{60,-33,54}, -{60,-33,55}, -{60,-33,56}, -{60,-33,57}, -{60,-33,58}, -{60,-33,59}, -{60,-33,60}, -{60,-33,61}, -{60,-33,62}, -{60,-32,-13}, -{60,-32,-12}, -{60,-32,-11}, -{60,-32,-10}, -{60,-32,-9}, -{60,-32,-8}, -{60,-32,-7}, -{60,-32,-6}, -{60,-32,-5}, -{60,-32,-4}, -{60,-32,-3}, -{60,-32,-2}, -{60,-32,-1}, -{60,-32,0}, -{60,-32,1}, -{60,-32,2}, -{60,-32,3}, -{60,-32,4}, -{60,-32,5}, -{60,-32,6}, -{60,-32,7}, -{60,-32,8}, -{60,-32,9}, -{60,-32,10}, -{60,-32,11}, -{60,-32,12}, -{60,-32,13}, -{60,-32,14}, -{60,-32,15}, -{60,-32,16}, -{60,-32,17}, -{60,-32,18}, -{60,-32,19}, -{60,-32,20}, -{60,-32,21}, -{60,-32,22}, -{60,-32,23}, -{60,-32,24}, -{60,-32,25}, -{60,-32,26}, -{60,-32,27}, -{60,-32,28}, -{60,-32,29}, -{60,-32,30}, -{60,-32,31}, -{60,-32,32}, -{60,-32,33}, -{60,-32,34}, -{60,-32,35}, -{60,-32,36}, -{60,-32,37}, -{60,-32,38}, -{60,-32,39}, -{60,-32,40}, -{60,-32,41}, -{60,-32,42}, -{60,-32,43}, -{60,-32,44}, -{60,-32,45}, -{60,-32,46}, -{60,-32,47}, -{60,-32,48}, -{60,-32,49}, -{60,-32,50}, -{60,-32,51}, -{60,-32,52}, -{60,-32,53}, -{60,-32,54}, -{60,-32,55}, -{60,-32,56}, -{60,-32,57}, -{60,-32,58}, -{60,-32,59}, -{60,-32,60}, -{60,-32,61}, -{60,-32,62}, -{60,-31,-15}, -{60,-31,-14}, -{60,-31,-13}, -{60,-31,-12}, -{60,-31,-11}, -{60,-31,-10}, -{60,-31,-9}, -{60,-31,-8}, -{60,-31,-7}, -{60,-31,-6}, -{60,-31,-5}, -{60,-31,-4}, -{60,-31,-3}, -{60,-31,-2}, -{60,-31,-1}, -{60,-31,0}, -{60,-31,1}, -{60,-31,2}, -{60,-31,3}, -{60,-31,4}, -{60,-31,5}, -{60,-31,6}, -{60,-31,7}, -{60,-31,8}, -{60,-31,9}, -{60,-31,10}, -{60,-31,11}, -{60,-31,12}, -{60,-31,13}, -{60,-31,14}, -{60,-31,15}, -{60,-31,16}, -{60,-31,17}, -{60,-31,18}, -{60,-31,19}, -{60,-31,20}, -{60,-31,21}, -{60,-31,22}, -{60,-31,23}, -{60,-31,24}, -{60,-31,25}, -{60,-31,26}, -{60,-31,27}, -{60,-31,28}, -{60,-31,29}, -{60,-31,30}, -{60,-31,31}, -{60,-31,32}, -{60,-31,33}, -{60,-31,34}, -{60,-31,35}, -{60,-31,36}, -{60,-31,37}, -{60,-31,38}, -{60,-31,39}, -{60,-31,40}, -{60,-31,41}, -{60,-31,42}, -{60,-31,43}, -{60,-31,44}, -{60,-31,45}, -{60,-31,46}, -{60,-31,47}, -{60,-31,48}, -{60,-31,49}, -{60,-31,50}, -{60,-31,51}, -{60,-31,52}, -{60,-31,53}, -{60,-31,54}, -{60,-31,55}, -{60,-31,56}, -{60,-31,57}, -{60,-31,58}, -{60,-31,59}, -{60,-31,60}, -{60,-31,61}, -{60,-31,62}, -{60,-30,-16}, -{60,-30,-15}, -{60,-30,-14}, -{60,-30,-13}, -{60,-30,-12}, -{60,-30,-11}, -{60,-30,-10}, -{60,-30,-9}, -{60,-30,-8}, -{60,-30,-7}, -{60,-30,-6}, -{60,-30,-5}, -{60,-30,-4}, -{60,-30,-3}, -{60,-30,-2}, -{60,-30,-1}, -{60,-30,0}, -{60,-30,1}, -{60,-30,2}, -{60,-30,3}, -{60,-30,4}, -{60,-30,5}, -{60,-30,6}, -{60,-30,7}, -{60,-30,8}, -{60,-30,9}, -{60,-30,10}, -{60,-30,11}, -{60,-30,12}, -{60,-30,13}, -{60,-30,14}, -{60,-30,15}, -{60,-30,16}, -{60,-30,17}, -{60,-30,18}, -{60,-30,19}, -{60,-30,20}, -{60,-30,21}, -{60,-30,22}, -{60,-30,23}, -{60,-30,24}, -{60,-30,25}, -{60,-30,26}, -{60,-30,27}, -{60,-30,28}, -{60,-30,29}, -{60,-30,30}, -{60,-30,31}, -{60,-30,32}, -{60,-30,33}, -{60,-30,34}, -{60,-30,35}, -{60,-30,36}, -{60,-30,37}, -{60,-30,38}, -{60,-30,39}, -{60,-30,40}, -{60,-30,41}, -{60,-30,42}, -{60,-30,43}, -{60,-30,44}, -{60,-30,45}, -{60,-30,46}, -{60,-30,47}, -{60,-30,48}, -{60,-30,49}, -{60,-30,50}, -{60,-30,51}, -{60,-30,52}, -{60,-30,53}, -{60,-30,54}, -{60,-30,55}, -{60,-30,56}, -{60,-30,57}, -{60,-30,58}, -{60,-30,59}, -{60,-30,60}, -{60,-30,61}, -{60,-30,62}, -{60,-29,-18}, -{60,-29,-17}, -{60,-29,-16}, -{60,-29,-15}, -{60,-29,-14}, -{60,-29,-13}, -{60,-29,-12}, -{60,-29,-11}, -{60,-29,-10}, -{60,-29,-9}, -{60,-29,-8}, -{60,-29,-7}, -{60,-29,-6}, -{60,-29,-5}, -{60,-29,-4}, -{60,-29,-3}, -{60,-29,-2}, -{60,-29,-1}, -{60,-29,0}, -{60,-29,1}, -{60,-29,2}, -{60,-29,3}, -{60,-29,4}, -{60,-29,5}, -{60,-29,6}, -{60,-29,7}, -{60,-29,8}, -{60,-29,9}, -{60,-29,10}, -{60,-29,11}, -{60,-29,12}, -{60,-29,13}, -{60,-29,14}, -{60,-29,15}, -{60,-29,16}, -{60,-29,17}, -{60,-29,18}, -{60,-29,19}, -{60,-29,20}, -{60,-29,21}, -{60,-29,22}, -{60,-29,23}, -{60,-29,24}, -{60,-29,25}, -{60,-29,26}, -{60,-29,27}, -{60,-29,28}, -{60,-29,29}, -{60,-29,30}, -{60,-29,31}, -{60,-29,32}, -{60,-29,33}, -{60,-29,34}, -{60,-29,35}, -{60,-29,36}, -{60,-29,37}, -{60,-29,38}, -{60,-29,39}, -{60,-29,40}, -{60,-29,41}, -{60,-29,42}, -{60,-29,43}, -{60,-29,44}, -{60,-29,45}, -{60,-29,46}, -{60,-29,47}, -{60,-29,48}, -{60,-29,49}, -{60,-29,50}, -{60,-29,51}, -{60,-29,52}, -{60,-29,53}, -{60,-29,54}, -{60,-29,55}, -{60,-29,56}, -{60,-29,57}, -{60,-29,58}, -{60,-29,59}, -{60,-29,60}, -{60,-29,61}, -{60,-29,62}, -{60,-28,-19}, -{60,-28,-18}, -{60,-28,-17}, -{60,-28,-16}, -{60,-28,-15}, -{60,-28,-14}, -{60,-28,-13}, -{60,-28,-12}, -{60,-28,-11}, -{60,-28,-10}, -{60,-28,-9}, -{60,-28,-8}, -{60,-28,-7}, -{60,-28,-6}, -{60,-28,-5}, -{60,-28,-4}, -{60,-28,-3}, -{60,-28,-2}, -{60,-28,-1}, -{60,-28,0}, -{60,-28,1}, -{60,-28,2}, -{60,-28,3}, -{60,-28,4}, -{60,-28,5}, -{60,-28,6}, -{60,-28,7}, -{60,-28,8}, -{60,-28,9}, -{60,-28,10}, -{60,-28,11}, -{60,-28,12}, -{60,-28,13}, -{60,-28,14}, -{60,-28,15}, -{60,-28,16}, -{60,-28,17}, -{60,-28,18}, -{60,-28,19}, -{60,-28,20}, -{60,-28,21}, -{60,-28,22}, -{60,-28,23}, -{60,-28,24}, -{60,-28,25}, -{60,-28,26}, -{60,-28,27}, -{60,-28,28}, -{60,-28,29}, -{60,-28,30}, -{60,-28,31}, -{60,-28,32}, -{60,-28,33}, -{60,-28,34}, -{60,-28,35}, -{60,-28,36}, -{60,-28,37}, -{60,-28,38}, -{60,-28,39}, -{60,-28,40}, -{60,-28,41}, -{60,-28,42}, -{60,-28,43}, -{60,-28,44}, -{60,-28,45}, -{60,-28,46}, -{60,-28,47}, -{60,-28,48}, -{60,-28,49}, -{60,-28,50}, -{60,-28,51}, -{60,-28,52}, -{60,-28,53}, -{60,-28,54}, -{60,-28,55}, -{60,-28,56}, -{60,-28,57}, -{60,-28,58}, -{60,-28,59}, -{60,-28,60}, -{60,-28,61}, -{60,-28,62}, -{60,-27,-20}, -{60,-27,-19}, -{60,-27,-18}, -{60,-27,-17}, -{60,-27,-16}, -{60,-27,-15}, -{60,-27,-14}, -{60,-27,-13}, -{60,-27,-12}, -{60,-27,-11}, -{60,-27,-10}, -{60,-27,-9}, -{60,-27,-8}, -{60,-27,-7}, -{60,-27,-6}, -{60,-27,-5}, -{60,-27,-4}, -{60,-27,-3}, -{60,-27,-2}, -{60,-27,-1}, -{60,-27,0}, -{60,-27,1}, -{60,-27,2}, -{60,-27,3}, -{60,-27,4}, -{60,-27,5}, -{60,-27,6}, -{60,-27,7}, -{60,-27,8}, -{60,-27,9}, -{60,-27,10}, -{60,-27,11}, -{60,-27,12}, -{60,-27,13}, -{60,-27,14}, -{60,-27,15}, -{60,-27,16}, -{60,-27,17}, -{60,-27,18}, -{60,-27,19}, -{60,-27,20}, -{60,-27,21}, -{60,-27,22}, -{60,-27,23}, -{60,-27,24}, -{60,-27,25}, -{60,-27,26}, -{60,-27,27}, -{60,-27,28}, -{60,-27,29}, -{60,-27,30}, -{60,-27,31}, -{60,-27,32}, -{60,-27,33}, -{60,-27,34}, -{60,-27,35}, -{60,-27,36}, -{60,-27,37}, -{60,-27,38}, -{60,-27,39}, -{60,-27,40}, -{60,-27,41}, -{60,-27,42}, -{60,-27,43}, -{60,-27,44}, -{60,-27,45}, -{60,-27,46}, -{60,-27,47}, -{60,-27,48}, -{60,-27,49}, -{60,-27,50}, -{60,-27,51}, -{60,-27,52}, -{60,-27,53}, -{60,-27,54}, -{60,-27,55}, -{60,-27,56}, -{60,-27,57}, -{60,-27,58}, -{60,-27,59}, -{60,-27,60}, -{60,-27,61}, -{60,-27,62}, -{60,-26,-22}, -{60,-26,-21}, -{60,-26,-20}, -{60,-26,-19}, -{60,-26,-18}, -{60,-26,-17}, -{60,-26,-16}, -{60,-26,-15}, -{60,-26,-14}, -{60,-26,-13}, -{60,-26,-12}, -{60,-26,-11}, -{60,-26,-10}, -{60,-26,-9}, -{60,-26,-8}, -{60,-26,-7}, -{60,-26,-6}, -{60,-26,-5}, -{60,-26,-4}, -{60,-26,-3}, -{60,-26,-2}, -{60,-26,-1}, -{60,-26,0}, -{60,-26,1}, -{60,-26,2}, -{60,-26,3}, -{60,-26,4}, -{60,-26,5}, -{60,-26,6}, -{60,-26,7}, -{60,-26,8}, -{60,-26,9}, -{60,-26,10}, -{60,-26,11}, -{60,-26,12}, -{60,-26,13}, -{60,-26,14}, -{60,-26,15}, -{60,-26,16}, -{60,-26,17}, -{60,-26,18}, -{60,-26,19}, -{60,-26,20}, -{60,-26,21}, -{60,-26,22}, -{60,-26,23}, -{60,-26,24}, -{60,-26,25}, -{60,-26,26}, -{60,-26,27}, -{60,-26,28}, -{60,-26,29}, -{60,-26,30}, -{60,-26,31}, -{60,-26,32}, -{60,-26,33}, -{60,-26,34}, -{60,-26,35}, -{60,-26,36}, -{60,-26,37}, -{60,-26,38}, -{60,-26,39}, -{60,-26,40}, -{60,-26,41}, -{60,-26,42}, -{60,-26,43}, -{60,-26,44}, -{60,-26,45}, -{60,-26,46}, -{60,-26,47}, -{60,-26,48}, -{60,-26,49}, -{60,-26,50}, -{60,-26,51}, -{60,-26,52}, -{60,-26,53}, -{60,-26,54}, -{60,-26,55}, -{60,-26,56}, -{60,-26,57}, -{60,-26,58}, -{60,-26,59}, -{60,-26,60}, -{60,-26,61}, -{60,-26,62}, -{60,-25,-23}, -{60,-25,-22}, -{60,-25,-21}, -{60,-25,-20}, -{60,-25,-19}, -{60,-25,-18}, -{60,-25,-17}, -{60,-25,-16}, -{60,-25,-15}, -{60,-25,-14}, -{60,-25,-13}, -{60,-25,-12}, -{60,-25,-11}, -{60,-25,-10}, -{60,-25,-9}, -{60,-25,-8}, -{60,-25,-7}, -{60,-25,-6}, -{60,-25,-5}, -{60,-25,-4}, -{60,-25,-3}, -{60,-25,-2}, -{60,-25,-1}, -{60,-25,0}, -{60,-25,1}, -{60,-25,2}, -{60,-25,3}, -{60,-25,4}, -{60,-25,5}, -{60,-25,6}, -{60,-25,7}, -{60,-25,8}, -{60,-25,9}, -{60,-25,10}, -{60,-25,11}, -{60,-25,12}, -{60,-25,13}, -{60,-25,14}, -{60,-25,15}, -{60,-25,16}, -{60,-25,17}, -{60,-25,18}, -{60,-25,19}, -{60,-25,20}, -{60,-25,21}, -{60,-25,22}, -{60,-25,23}, -{60,-25,24}, -{60,-25,25}, -{60,-25,26}, -{60,-25,27}, -{60,-25,28}, -{60,-25,29}, -{60,-25,30}, -{60,-25,31}, -{60,-25,32}, -{60,-25,33}, -{60,-25,34}, -{60,-25,35}, -{60,-25,36}, -{60,-25,37}, -{60,-25,38}, -{60,-25,39}, -{60,-25,40}, -{60,-25,41}, -{60,-25,42}, -{60,-25,43}, -{60,-25,44}, -{60,-25,45}, -{60,-25,46}, -{60,-25,47}, -{60,-25,48}, -{60,-25,49}, -{60,-25,50}, -{60,-25,51}, -{60,-25,52}, -{60,-25,53}, -{60,-25,54}, -{60,-25,55}, -{60,-25,56}, -{60,-25,57}, -{60,-25,58}, -{60,-25,59}, -{60,-25,60}, -{60,-25,61}, -{60,-25,62}, -{60,-25,63}, -{60,-24,-25}, -{60,-24,-24}, -{60,-24,-23}, -{60,-24,-22}, -{60,-24,-21}, -{60,-24,-20}, -{60,-24,-19}, -{60,-24,-18}, -{60,-24,-17}, -{60,-24,-16}, -{60,-24,-15}, -{60,-24,-14}, -{60,-24,-13}, -{60,-24,-12}, -{60,-24,-11}, -{60,-24,-10}, -{60,-24,-9}, -{60,-24,-8}, -{60,-24,-7}, -{60,-24,-6}, -{60,-24,-5}, -{60,-24,-4}, -{60,-24,-3}, -{60,-24,-2}, -{60,-24,-1}, -{60,-24,0}, -{60,-24,1}, -{60,-24,2}, -{60,-24,3}, -{60,-24,4}, -{60,-24,5}, -{60,-24,6}, -{60,-24,7}, -{60,-24,8}, -{60,-24,9}, -{60,-24,10}, -{60,-24,11}, -{60,-24,12}, -{60,-24,13}, -{60,-24,14}, -{60,-24,15}, -{60,-24,16}, -{60,-24,17}, -{60,-24,18}, -{60,-24,19}, -{60,-24,20}, -{60,-24,21}, -{60,-24,22}, -{60,-24,23}, -{60,-24,24}, -{60,-24,25}, -{60,-24,26}, -{60,-24,27}, -{60,-24,28}, -{60,-24,29}, -{60,-24,30}, -{60,-24,31}, -{60,-24,32}, -{60,-24,33}, -{60,-24,34}, -{60,-24,35}, -{60,-24,36}, -{60,-24,37}, -{60,-24,38}, -{60,-24,39}, -{60,-24,40}, -{60,-24,41}, -{60,-24,42}, -{60,-24,43}, -{60,-24,44}, -{60,-24,45}, -{60,-24,46}, -{60,-24,47}, -{60,-24,48}, -{60,-24,49}, -{60,-24,50}, -{60,-24,51}, -{60,-24,52}, -{60,-24,53}, -{60,-24,54}, -{60,-24,55}, -{60,-24,56}, -{60,-24,57}, -{60,-24,58}, -{60,-24,59}, -{60,-24,60}, -{60,-24,61}, -{60,-24,62}, -{60,-24,63}, -{60,-23,-26}, -{60,-23,-25}, -{60,-23,-24}, -{60,-23,-23}, -{60,-23,-22}, -{60,-23,-21}, -{60,-23,-20}, -{60,-23,-19}, -{60,-23,-18}, -{60,-23,-17}, -{60,-23,-16}, -{60,-23,-15}, -{60,-23,-14}, -{60,-23,-13}, -{60,-23,-12}, -{60,-23,-11}, -{60,-23,-10}, -{60,-23,-9}, -{60,-23,-8}, -{60,-23,-7}, -{60,-23,-6}, -{60,-23,-5}, -{60,-23,-4}, -{60,-23,-3}, -{60,-23,-2}, -{60,-23,-1}, -{60,-23,0}, -{60,-23,1}, -{60,-23,2}, -{60,-23,3}, -{60,-23,4}, -{60,-23,5}, -{60,-23,6}, -{60,-23,7}, -{60,-23,8}, -{60,-23,9}, -{60,-23,10}, -{60,-23,11}, -{60,-23,12}, -{60,-23,13}, -{60,-23,14}, -{60,-23,15}, -{60,-23,16}, -{60,-23,17}, -{60,-23,18}, -{60,-23,19}, -{60,-23,20}, -{60,-23,21}, -{60,-23,22}, -{60,-23,23}, -{60,-23,24}, -{60,-23,25}, -{60,-23,26}, -{60,-23,27}, -{60,-23,28}, -{60,-23,29}, -{60,-23,30}, -{60,-23,31}, -{60,-23,32}, -{60,-23,33}, -{60,-23,34}, -{60,-23,35}, -{60,-23,36}, -{60,-23,37}, -{60,-23,38}, -{60,-23,39}, -{60,-23,40}, -{60,-23,41}, -{60,-23,42}, -{60,-23,43}, -{60,-23,44}, -{60,-23,45}, -{60,-23,46}, -{60,-23,47}, -{60,-23,48}, -{60,-23,49}, -{60,-23,50}, -{60,-23,51}, -{60,-23,52}, -{60,-23,53}, -{60,-23,54}, -{60,-23,55}, -{60,-23,56}, -{60,-23,57}, -{60,-23,58}, -{60,-23,59}, -{60,-23,60}, -{60,-23,61}, -{60,-23,62}, -{60,-23,63}, -{60,-22,-27}, -{60,-22,-26}, -{60,-22,-25}, -{60,-22,-24}, -{60,-22,-23}, -{60,-22,-22}, -{60,-22,-21}, -{60,-22,-20}, -{60,-22,-19}, -{60,-22,-18}, -{60,-22,-17}, -{60,-22,-16}, -{60,-22,-15}, -{60,-22,-14}, -{60,-22,-13}, -{60,-22,-12}, -{60,-22,-11}, -{60,-22,-10}, -{60,-22,-9}, -{60,-22,-8}, -{60,-22,-7}, -{60,-22,-6}, -{60,-22,-5}, -{60,-22,-4}, -{60,-22,-3}, -{60,-22,-2}, -{60,-22,-1}, -{60,-22,0}, -{60,-22,1}, -{60,-22,2}, -{60,-22,3}, -{60,-22,4}, -{60,-22,5}, -{60,-22,6}, -{60,-22,7}, -{60,-22,8}, -{60,-22,9}, -{60,-22,10}, -{60,-22,11}, -{60,-22,12}, -{60,-22,13}, -{60,-22,14}, -{60,-22,15}, -{60,-22,16}, -{60,-22,17}, -{60,-22,18}, -{60,-22,19}, -{60,-22,20}, -{60,-22,21}, -{60,-22,22}, -{60,-22,23}, -{60,-22,24}, -{60,-22,25}, -{60,-22,26}, -{60,-22,27}, -{60,-22,28}, -{60,-22,29}, -{60,-22,30}, -{60,-22,31}, -{60,-22,32}, -{60,-22,33}, -{60,-22,34}, -{60,-22,35}, -{60,-22,36}, -{60,-22,37}, -{60,-22,38}, -{60,-22,39}, -{60,-22,40}, -{60,-22,41}, -{60,-22,42}, -{60,-22,43}, -{60,-22,44}, -{60,-22,45}, -{60,-22,46}, -{60,-22,47}, -{60,-22,48}, -{60,-22,49}, -{60,-22,50}, -{60,-22,51}, -{60,-22,52}, -{60,-22,53}, -{60,-22,54}, -{60,-22,55}, -{60,-22,56}, -{60,-22,57}, -{60,-22,58}, -{60,-22,59}, -{60,-22,60}, -{60,-22,61}, -{60,-22,62}, -{60,-22,63}, -{60,-21,-29}, -{60,-21,-28}, -{60,-21,-27}, -{60,-21,-26}, -{60,-21,-25}, -{60,-21,-24}, -{60,-21,-23}, -{60,-21,-22}, -{60,-21,-21}, -{60,-21,-20}, -{60,-21,-19}, -{60,-21,-18}, -{60,-21,-17}, -{60,-21,-16}, -{60,-21,-15}, -{60,-21,-14}, -{60,-21,-13}, -{60,-21,-12}, -{60,-21,-11}, -{60,-21,-10}, -{60,-21,-9}, -{60,-21,-8}, -{60,-21,-7}, -{60,-21,-6}, -{60,-21,-5}, -{60,-21,-4}, -{60,-21,-3}, -{60,-21,-2}, -{60,-21,-1}, -{60,-21,0}, -{60,-21,1}, -{60,-21,2}, -{60,-21,3}, -{60,-21,4}, -{60,-21,5}, -{60,-21,6}, -{60,-21,7}, -{60,-21,8}, -{60,-21,9}, -{60,-21,10}, -{60,-21,11}, -{60,-21,12}, -{60,-21,13}, -{60,-21,14}, -{60,-21,15}, -{60,-21,16}, -{60,-21,17}, -{60,-21,18}, -{60,-21,19}, -{60,-21,20}, -{60,-21,21}, -{60,-21,22}, -{60,-21,23}, -{60,-21,24}, -{60,-21,25}, -{60,-21,26}, -{60,-21,27}, -{60,-21,28}, -{60,-21,29}, -{60,-21,30}, -{60,-21,31}, -{60,-21,32}, -{60,-21,33}, -{60,-21,34}, -{60,-21,35}, -{60,-21,36}, -{60,-21,37}, -{60,-21,38}, -{60,-21,39}, -{60,-21,40}, -{60,-21,41}, -{60,-21,42}, -{60,-21,43}, -{60,-21,44}, -{60,-21,45}, -{60,-21,46}, -{60,-21,47}, -{60,-21,48}, -{60,-21,49}, -{60,-21,50}, -{60,-21,51}, -{60,-21,52}, -{60,-21,53}, -{60,-21,54}, -{60,-21,55}, -{60,-21,56}, -{60,-21,57}, -{60,-21,58}, -{60,-21,59}, -{60,-21,60}, -{60,-21,61}, -{60,-21,62}, -{60,-21,63}, -{60,-20,-30}, -{60,-20,-29}, -{60,-20,-28}, -{60,-20,-27}, -{60,-20,-26}, -{60,-20,-25}, -{60,-20,-24}, -{60,-20,-23}, -{60,-20,-22}, -{60,-20,-21}, -{60,-20,-20}, -{60,-20,-19}, -{60,-20,-18}, -{60,-20,-17}, -{60,-20,-16}, -{60,-20,-15}, -{60,-20,-14}, -{60,-20,-13}, -{60,-20,-12}, -{60,-20,-11}, -{60,-20,-10}, -{60,-20,-9}, -{60,-20,-8}, -{60,-20,-7}, -{60,-20,-6}, -{60,-20,-5}, -{60,-20,-4}, -{60,-20,-3}, -{60,-20,-2}, -{60,-20,-1}, -{60,-20,0}, -{60,-20,1}, -{60,-20,2}, -{60,-20,3}, -{60,-20,4}, -{60,-20,5}, -{60,-20,6}, -{60,-20,7}, -{60,-20,8}, -{60,-20,9}, -{60,-20,10}, -{60,-20,11}, -{60,-20,12}, -{60,-20,13}, -{60,-20,14}, -{60,-20,15}, -{60,-20,16}, -{60,-20,17}, -{60,-20,18}, -{60,-20,19}, -{60,-20,20}, -{60,-20,21}, -{60,-20,22}, -{60,-20,23}, -{60,-20,24}, -{60,-20,25}, -{60,-20,26}, -{60,-20,27}, -{60,-20,28}, -{60,-20,29}, -{60,-20,30}, -{60,-20,31}, -{60,-20,32}, -{60,-20,33}, -{60,-20,34}, -{60,-20,35}, -{60,-20,36}, -{60,-20,37}, -{60,-20,38}, -{60,-20,39}, -{60,-20,40}, -{60,-20,41}, -{60,-20,42}, -{60,-20,43}, -{60,-20,44}, -{60,-20,45}, -{60,-20,46}, -{60,-20,47}, -{60,-20,48}, -{60,-20,49}, -{60,-20,50}, -{60,-20,51}, -{60,-20,52}, -{60,-20,53}, -{60,-20,54}, -{60,-20,55}, -{60,-20,56}, -{60,-20,57}, -{60,-20,58}, -{60,-20,59}, -{60,-20,60}, -{60,-20,61}, -{60,-20,62}, -{60,-20,63}, -{60,-19,-31}, -{60,-19,-30}, -{60,-19,-29}, -{60,-19,-28}, -{60,-19,-27}, -{60,-19,-26}, -{60,-19,-25}, -{60,-19,-24}, -{60,-19,-23}, -{60,-19,-22}, -{60,-19,-21}, -{60,-19,-20}, -{60,-19,-19}, -{60,-19,-18}, -{60,-19,-17}, -{60,-19,-16}, -{60,-19,-15}, -{60,-19,-14}, -{60,-19,-13}, -{60,-19,-12}, -{60,-19,-11}, -{60,-19,-10}, -{60,-19,-9}, -{60,-19,-8}, -{60,-19,-7}, -{60,-19,-6}, -{60,-19,-5}, -{60,-19,-4}, -{60,-19,-3}, -{60,-19,-2}, -{60,-19,-1}, -{60,-19,0}, -{60,-19,1}, -{60,-19,2}, -{60,-19,3}, -{60,-19,4}, -{60,-19,5}, -{60,-19,6}, -{60,-19,7}, -{60,-19,8}, -{60,-19,9}, -{60,-19,10}, -{60,-19,11}, -{60,-19,12}, -{60,-19,13}, -{60,-19,14}, -{60,-19,15}, -{60,-19,16}, -{60,-19,17}, -{60,-19,18}, -{60,-19,19}, -{60,-19,20}, -{60,-19,21}, -{60,-19,22}, -{60,-19,23}, -{60,-19,24}, -{60,-19,25}, -{60,-19,26}, -{60,-19,27}, -{60,-19,28}, -{60,-19,29}, -{60,-19,30}, -{60,-19,31}, -{60,-19,32}, -{60,-19,33}, -{60,-19,34}, -{60,-19,35}, -{60,-19,36}, -{60,-19,37}, -{60,-19,38}, -{60,-19,39}, -{60,-19,40}, -{60,-19,41}, -{60,-19,42}, -{60,-19,43}, -{60,-19,44}, -{60,-19,45}, -{60,-19,46}, -{60,-19,47}, -{60,-19,48}, -{60,-19,49}, -{60,-19,50}, -{60,-19,51}, -{60,-19,52}, -{60,-19,53}, -{60,-19,54}, -{60,-19,55}, -{60,-19,56}, -{60,-19,57}, -{60,-19,58}, -{60,-19,59}, -{60,-19,60}, -{60,-19,61}, -{60,-19,62}, -{60,-19,63}, -{60,-18,-33}, -{60,-18,-32}, -{60,-18,-31}, -{60,-18,-30}, -{60,-18,-29}, -{60,-18,-28}, -{60,-18,-27}, -{60,-18,-26}, -{60,-18,-25}, -{60,-18,-24}, -{60,-18,-23}, -{60,-18,-22}, -{60,-18,-21}, -{60,-18,-20}, -{60,-18,-19}, -{60,-18,-18}, -{60,-18,-17}, -{60,-18,-16}, -{60,-18,-15}, -{60,-18,-14}, -{60,-18,-13}, -{60,-18,-12}, -{60,-18,-11}, -{60,-18,-10}, -{60,-18,-9}, -{60,-18,-8}, -{60,-18,-7}, -{60,-18,-6}, -{60,-18,-5}, -{60,-18,-4}, -{60,-18,-3}, -{60,-18,-2}, -{60,-18,-1}, -{60,-18,0}, -{60,-18,1}, -{60,-18,2}, -{60,-18,3}, -{60,-18,4}, -{60,-18,5}, -{60,-18,6}, -{60,-18,7}, -{60,-18,8}, -{60,-18,9}, -{60,-18,10}, -{60,-18,11}, -{60,-18,12}, -{60,-18,13}, -{60,-18,14}, -{60,-18,15}, -{60,-18,16}, -{60,-18,17}, -{60,-18,18}, -{60,-18,19}, -{60,-18,20}, -{60,-18,21}, -{60,-18,22}, -{60,-18,23}, -{60,-18,24}, -{60,-18,25}, -{60,-18,26}, -{60,-18,27}, -{60,-18,28}, -{60,-18,29}, -{60,-18,30}, -{60,-18,31}, -{60,-18,32}, -{60,-18,33}, -{60,-18,34}, -{60,-18,35}, -{60,-18,36}, -{60,-18,37}, -{60,-18,38}, -{60,-18,39}, -{60,-18,40}, -{60,-18,41}, -{60,-18,42}, -{60,-18,43}, -{60,-18,44}, -{60,-18,45}, -{60,-18,46}, -{60,-18,47}, -{60,-18,48}, -{60,-18,49}, -{60,-18,50}, -{60,-18,51}, -{60,-18,52}, -{60,-18,53}, -{60,-18,54}, -{60,-18,55}, -{60,-18,56}, -{60,-18,57}, -{60,-18,58}, -{60,-18,59}, -{60,-18,60}, -{60,-18,61}, -{60,-18,62}, -{60,-18,63}, -{60,-17,-34}, -{60,-17,-33}, -{60,-17,-32}, -{60,-17,-31}, -{60,-17,-30}, -{60,-17,-29}, -{60,-17,-28}, -{60,-17,-27}, -{60,-17,-26}, -{60,-17,-25}, -{60,-17,-24}, -{60,-17,-23}, -{60,-17,-22}, -{60,-17,-21}, -{60,-17,-20}, -{60,-17,-19}, -{60,-17,-18}, -{60,-17,-17}, -{60,-17,-16}, -{60,-17,-15}, -{60,-17,-14}, -{60,-17,-13}, -{60,-17,-12}, -{60,-17,-11}, -{60,-17,-10}, -{60,-17,-9}, -{60,-17,-8}, -{60,-17,-7}, -{60,-17,-6}, -{60,-17,-5}, -{60,-17,-4}, -{60,-17,-3}, -{60,-17,-2}, -{60,-17,-1}, -{60,-17,0}, -{60,-17,1}, -{60,-17,2}, -{60,-17,3}, -{60,-17,4}, -{60,-17,5}, -{60,-17,6}, -{60,-17,7}, -{60,-17,8}, -{60,-17,9}, -{60,-17,10}, -{60,-17,11}, -{60,-17,12}, -{60,-17,13}, -{60,-17,14}, -{60,-17,15}, -{60,-17,16}, -{60,-17,17}, -{60,-17,18}, -{60,-17,19}, -{60,-17,20}, -{60,-17,21}, -{60,-17,22}, -{60,-17,23}, -{60,-17,24}, -{60,-17,25}, -{60,-17,26}, -{60,-17,27}, -{60,-17,28}, -{60,-17,29}, -{60,-17,30}, -{60,-17,31}, -{60,-17,32}, -{60,-17,33}, -{60,-17,34}, -{60,-17,35}, -{60,-17,36}, -{60,-17,37}, -{60,-17,38}, -{60,-17,39}, -{60,-17,40}, -{60,-17,41}, -{60,-17,42}, -{60,-17,43}, -{60,-17,44}, -{60,-17,45}, -{60,-17,46}, -{60,-17,47}, -{60,-17,48}, -{60,-17,49}, -{60,-17,50}, -{60,-17,51}, -{60,-17,52}, -{60,-17,53}, -{60,-17,54}, -{60,-17,55}, -{60,-17,56}, -{60,-17,57}, -{60,-17,58}, -{60,-17,59}, -{60,-17,60}, -{60,-17,61}, -{60,-17,62}, -{60,-17,63}, -{60,-16,-35}, -{60,-16,-34}, -{60,-16,-33}, -{60,-16,-32}, -{60,-16,-31}, -{60,-16,-30}, -{60,-16,-29}, -{60,-16,-28}, -{60,-16,-27}, -{60,-16,-26}, -{60,-16,-25}, -{60,-16,-24}, -{60,-16,-23}, -{60,-16,-22}, -{60,-16,-21}, -{60,-16,-20}, -{60,-16,-19}, -{60,-16,-18}, -{60,-16,-17}, -{60,-16,-16}, -{60,-16,-15}, -{60,-16,-14}, -{60,-16,-13}, -{60,-16,-12}, -{60,-16,-11}, -{60,-16,-10}, -{60,-16,-9}, -{60,-16,-8}, -{60,-16,-7}, -{60,-16,-6}, -{60,-16,-5}, -{60,-16,-4}, -{60,-16,-3}, -{60,-16,-2}, -{60,-16,-1}, -{60,-16,0}, -{60,-16,1}, -{60,-16,2}, -{60,-16,3}, -{60,-16,4}, -{60,-16,5}, -{60,-16,6}, -{60,-16,7}, -{60,-16,8}, -{60,-16,9}, -{60,-16,10}, -{60,-16,11}, -{60,-16,12}, -{60,-16,13}, -{60,-16,14}, -{60,-16,15}, -{60,-16,16}, -{60,-16,17}, -{60,-16,18}, -{60,-16,19}, -{60,-16,20}, -{60,-16,21}, -{60,-16,22}, -{60,-16,23}, -{60,-16,24}, -{60,-16,25}, -{60,-16,26}, -{60,-16,27}, -{60,-16,28}, -{60,-16,29}, -{60,-16,30}, -{60,-16,31}, -{60,-16,32}, -{60,-16,33}, -{60,-16,34}, -{60,-16,35}, -{60,-16,36}, -{60,-16,37}, -{60,-16,38}, -{60,-16,39}, -{60,-16,40}, -{60,-16,41}, -{60,-16,42}, -{60,-16,43}, -{60,-16,44}, -{60,-16,45}, -{60,-16,46}, -{60,-16,47}, -{60,-16,48}, -{60,-16,49}, -{60,-16,50}, -{60,-16,51}, -{60,-16,52}, -{60,-16,53}, -{60,-16,54}, -{60,-16,55}, -{60,-16,56}, -{60,-16,57}, -{60,-16,58}, -{60,-16,59}, -{60,-16,60}, -{60,-16,61}, -{60,-16,62}, -{60,-16,63}, -{60,-15,-36}, -{60,-15,-35}, -{60,-15,-34}, -{60,-15,-33}, -{60,-15,-32}, -{60,-15,-31}, -{60,-15,-30}, -{60,-15,-29}, -{60,-15,-28}, -{60,-15,-27}, -{60,-15,-26}, -{60,-15,-25}, -{60,-15,-24}, -{60,-15,-23}, -{60,-15,-22}, -{60,-15,-21}, -{60,-15,-20}, -{60,-15,-19}, -{60,-15,-18}, -{60,-15,-17}, -{60,-15,-16}, -{60,-15,-15}, -{60,-15,-14}, -{60,-15,-13}, -{60,-15,-12}, -{60,-15,-11}, -{60,-15,-10}, -{60,-15,-9}, -{60,-15,-8}, -{60,-15,-7}, -{60,-15,-6}, -{60,-15,-5}, -{60,-15,-4}, -{60,-15,-3}, -{60,-15,-2}, -{60,-15,-1}, -{60,-15,0}, -{60,-15,1}, -{60,-15,2}, -{60,-15,3}, -{60,-15,4}, -{60,-15,5}, -{60,-15,6}, -{60,-15,7}, -{60,-15,8}, -{60,-15,9}, -{60,-15,10}, -{60,-15,11}, -{60,-15,12}, -{60,-15,13}, -{60,-15,14}, -{60,-15,15}, -{60,-15,16}, -{60,-15,17}, -{60,-15,18}, -{60,-15,19}, -{60,-15,20}, -{60,-15,21}, -{60,-15,22}, -{60,-15,23}, -{60,-15,24}, -{60,-15,25}, -{60,-15,26}, -{60,-15,27}, -{60,-15,28}, -{60,-15,29}, -{60,-15,30}, -{60,-15,31}, -{60,-15,32}, -{60,-15,33}, -{60,-15,34}, -{60,-15,35}, -{60,-15,36}, -{60,-15,37}, -{60,-15,38}, -{60,-15,39}, -{60,-15,40}, -{60,-15,41}, -{60,-15,42}, -{60,-15,43}, -{60,-15,44}, -{60,-15,45}, -{60,-15,46}, -{60,-15,47}, -{60,-15,48}, -{60,-15,49}, -{60,-15,50}, -{60,-15,51}, -{60,-15,52}, -{60,-15,53}, -{60,-15,54}, -{60,-15,55}, -{60,-15,56}, -{60,-15,57}, -{60,-15,58}, -{60,-15,59}, -{60,-15,60}, -{60,-15,61}, -{60,-15,62}, -{60,-15,63}, -{60,-14,-38}, -{60,-14,-37}, -{60,-14,-36}, -{60,-14,-35}, -{60,-14,-34}, -{60,-14,-33}, -{60,-14,-32}, -{60,-14,-31}, -{60,-14,-30}, -{60,-14,-29}, -{60,-14,-28}, -{60,-14,-27}, -{60,-14,-26}, -{60,-14,-25}, -{60,-14,-24}, -{60,-14,-23}, -{60,-14,-22}, -{60,-14,-21}, -{60,-14,-20}, -{60,-14,-19}, -{60,-14,-18}, -{60,-14,-17}, -{60,-14,-16}, -{60,-14,-15}, -{60,-14,-14}, -{60,-14,-13}, -{60,-14,-12}, -{60,-14,-11}, -{60,-14,-10}, -{60,-14,-9}, -{60,-14,-8}, -{60,-14,-7}, -{60,-14,-6}, -{60,-14,-5}, -{60,-14,-4}, -{60,-14,-3}, -{60,-14,-2}, -{60,-14,-1}, -{60,-14,0}, -{60,-14,1}, -{60,-14,2}, -{60,-14,3}, -{60,-14,4}, -{60,-14,5}, -{60,-14,6}, -{60,-14,7}, -{60,-14,8}, -{60,-14,9}, -{60,-14,10}, -{60,-14,11}, -{60,-14,12}, -{60,-14,13}, -{60,-14,14}, -{60,-14,15}, -{60,-14,16}, -{60,-14,17}, -{60,-14,18}, -{60,-14,19}, -{60,-14,20}, -{60,-14,21}, -{60,-14,22}, -{60,-14,23}, -{60,-14,24}, -{60,-14,25}, -{60,-14,26}, -{60,-14,27}, -{60,-14,28}, -{60,-14,29}, -{60,-14,30}, -{60,-14,31}, -{60,-14,32}, -{60,-14,33}, -{60,-14,34}, -{60,-14,35}, -{60,-14,36}, -{60,-14,37}, -{60,-14,38}, -{60,-14,39}, -{60,-14,40}, -{60,-14,41}, -{60,-14,42}, -{60,-14,43}, -{60,-14,44}, -{60,-14,45}, -{60,-14,46}, -{60,-14,47}, -{60,-14,48}, -{60,-14,49}, -{60,-14,50}, -{60,-14,51}, -{60,-14,52}, -{60,-14,53}, -{60,-14,54}, -{60,-14,55}, -{60,-14,56}, -{60,-14,57}, -{60,-14,58}, -{60,-14,59}, -{60,-14,60}, -{60,-14,61}, -{60,-14,62}, -{60,-14,63}, -{60,-13,-39}, -{60,-13,-38}, -{60,-13,-37}, -{60,-13,-36}, -{60,-13,-35}, -{60,-13,-34}, -{60,-13,-33}, -{60,-13,-32}, -{60,-13,-31}, -{60,-13,-30}, -{60,-13,-29}, -{60,-13,-28}, -{60,-13,-27}, -{60,-13,-26}, -{60,-13,-25}, -{60,-13,-24}, -{60,-13,-23}, -{60,-13,-22}, -{60,-13,-21}, -{60,-13,-20}, -{60,-13,-19}, -{60,-13,-18}, -{60,-13,-17}, -{60,-13,-16}, -{60,-13,-15}, -{60,-13,-14}, -{60,-13,-13}, -{60,-13,-12}, -{60,-13,-11}, -{60,-13,-10}, -{60,-13,-9}, -{60,-13,-8}, -{60,-13,-7}, -{60,-13,-6}, -{60,-13,-5}, -{60,-13,-4}, -{60,-13,-3}, -{60,-13,-2}, -{60,-13,-1}, -{60,-13,0}, -{60,-13,1}, -{60,-13,2}, -{60,-13,3}, -{60,-13,4}, -{60,-13,5}, -{60,-13,6}, -{60,-13,7}, -{60,-13,8}, -{60,-13,9}, -{60,-13,10}, -{60,-13,11}, -{60,-13,12}, -{60,-13,13}, -{60,-13,14}, -{60,-13,15}, -{60,-13,16}, -{60,-13,17}, -{60,-13,18}, -{60,-13,19}, -{60,-13,20}, -{60,-13,21}, -{60,-13,22}, -{60,-13,23}, -{60,-13,24}, -{60,-13,25}, -{60,-13,26}, -{60,-13,27}, -{60,-13,28}, -{60,-13,29}, -{60,-13,30}, -{60,-13,31}, -{60,-13,32}, -{60,-13,33}, -{60,-13,34}, -{60,-13,35}, -{60,-13,36}, -{60,-13,37}, -{60,-13,38}, -{60,-13,39}, -{60,-13,40}, -{60,-13,41}, -{60,-13,42}, -{60,-13,43}, -{60,-13,44}, -{60,-13,45}, -{60,-13,46}, -{60,-13,47}, -{60,-13,48}, -{60,-13,49}, -{60,-13,50}, -{60,-13,51}, -{60,-13,52}, -{60,-13,53}, -{60,-13,54}, -{60,-13,55}, -{60,-13,56}, -{60,-13,57}, -{60,-13,58}, -{60,-13,59}, -{60,-13,60}, -{60,-13,61}, -{60,-13,62}, -{60,-13,63}, -{60,-12,-40}, -{60,-12,-39}, -{60,-12,-38}, -{60,-12,-37}, -{60,-12,-36}, -{60,-12,-35}, -{60,-12,-34}, -{60,-12,-33}, -{60,-12,-32}, -{60,-12,-31}, -{60,-12,-30}, -{60,-12,-29}, -{60,-12,-28}, -{60,-12,-27}, -{60,-12,-26}, -{60,-12,-25}, -{60,-12,-24}, -{60,-12,-23}, -{60,-12,-22}, -{60,-12,-21}, -{60,-12,-20}, -{60,-12,-19}, -{60,-12,-18}, -{60,-12,-17}, -{60,-12,-16}, -{60,-12,-15}, -{60,-12,-14}, -{60,-12,-13}, -{60,-12,-12}, -{60,-12,-11}, -{60,-12,-10}, -{60,-12,-9}, -{60,-12,-8}, -{60,-12,-7}, -{60,-12,-6}, -{60,-12,-5}, -{60,-12,-4}, -{60,-12,-3}, -{60,-12,-2}, -{60,-12,-1}, -{60,-12,0}, -{60,-12,1}, -{60,-12,2}, -{60,-12,3}, -{60,-12,4}, -{60,-12,5}, -{60,-12,6}, -{60,-12,7}, -{60,-12,8}, -{60,-12,9}, -{60,-12,10}, -{60,-12,11}, -{60,-12,12}, -{60,-12,13}, -{60,-12,14}, -{60,-12,15}, -{60,-12,16}, -{60,-12,17}, -{60,-12,18}, -{60,-12,19}, -{60,-12,20}, -{60,-12,21}, -{60,-12,22}, -{60,-12,23}, -{60,-12,24}, -{60,-12,25}, -{60,-12,26}, -{60,-12,27}, -{60,-12,28}, -{60,-12,29}, -{60,-12,30}, -{60,-12,31}, -{60,-12,32}, -{60,-12,33}, -{60,-12,34}, -{60,-12,35}, -{60,-12,36}, -{60,-12,37}, -{60,-12,38}, -{60,-12,39}, -{60,-12,40}, -{60,-12,41}, -{60,-12,42}, -{60,-12,43}, -{60,-12,44}, -{60,-12,45}, -{60,-12,46}, -{60,-12,47}, -{60,-12,48}, -{60,-12,49}, -{60,-12,50}, -{60,-12,51}, -{60,-12,52}, -{60,-12,53}, -{60,-12,54}, -{60,-12,55}, -{60,-12,56}, -{60,-12,57}, -{60,-12,58}, -{60,-12,59}, -{60,-12,60}, -{60,-12,61}, -{60,-12,62}, -{60,-12,63}, -{60,-11,-41}, -{60,-11,-40}, -{60,-11,-39}, -{60,-11,-38}, -{60,-11,-37}, -{60,-11,-36}, -{60,-11,-35}, -{60,-11,-34}, -{60,-11,-33}, -{60,-11,-32}, -{60,-11,-31}, -{60,-11,-30}, -{60,-11,-29}, -{60,-11,-28}, -{60,-11,-27}, -{60,-11,-26}, -{60,-11,-25}, -{60,-11,-24}, -{60,-11,-23}, -{60,-11,-22}, -{60,-11,-21}, -{60,-11,-20}, -{60,-11,-19}, -{60,-11,-18}, -{60,-11,-17}, -{60,-11,-16}, -{60,-11,-15}, -{60,-11,-14}, -{60,-11,-13}, -{60,-11,-12}, -{60,-11,-11}, -{60,-11,-10}, -{60,-11,-9}, -{60,-11,-8}, -{60,-11,-7}, -{60,-11,-6}, -{60,-11,-5}, -{60,-11,-4}, -{60,-11,-3}, -{60,-11,-2}, -{60,-11,-1}, -{60,-11,0}, -{60,-11,1}, -{60,-11,2}, -{60,-11,3}, -{60,-11,4}, -{60,-11,5}, -{60,-11,6}, -{60,-11,7}, -{60,-11,8}, -{60,-11,9}, -{60,-11,10}, -{60,-11,11}, -{60,-11,12}, -{60,-11,13}, -{60,-11,14}, -{60,-11,15}, -{60,-11,16}, -{60,-11,17}, -{60,-11,18}, -{60,-11,19}, -{60,-11,20}, -{60,-11,21}, -{60,-11,22}, -{60,-11,23}, -{60,-11,24}, -{60,-11,25}, -{60,-11,26}, -{60,-11,27}, -{60,-11,28}, -{60,-11,29}, -{60,-11,30}, -{60,-11,31}, -{60,-11,32}, -{60,-11,33}, -{60,-11,34}, -{60,-11,35}, -{60,-11,36}, -{60,-11,37}, -{60,-11,38}, -{60,-11,39}, -{60,-11,40}, -{60,-11,41}, -{60,-11,42}, -{60,-11,43}, -{60,-11,44}, -{60,-11,45}, -{60,-11,46}, -{60,-11,47}, -{60,-11,48}, -{60,-11,49}, -{60,-11,50}, -{60,-11,51}, -{60,-11,52}, -{60,-11,53}, -{60,-11,54}, -{60,-11,55}, -{60,-11,56}, -{60,-11,57}, -{60,-11,58}, -{60,-11,59}, -{60,-11,60}, -{60,-11,61}, -{60,-11,62}, -{60,-11,63}, -{60,-10,-43}, -{60,-10,-42}, -{60,-10,-41}, -{60,-10,-40}, -{60,-10,-39}, -{60,-10,-38}, -{60,-10,-37}, -{60,-10,-36}, -{60,-10,-35}, -{60,-10,-34}, -{60,-10,-33}, -{60,-10,-32}, -{60,-10,-31}, -{60,-10,-30}, -{60,-10,-29}, -{60,-10,-28}, -{60,-10,-27}, -{60,-10,-26}, -{60,-10,-25}, -{60,-10,-24}, -{60,-10,-23}, -{60,-10,-22}, -{60,-10,-21}, -{60,-10,-20}, -{60,-10,-19}, -{60,-10,-18}, -{60,-10,-17}, -{60,-10,-16}, -{60,-10,-15}, -{60,-10,-14}, -{60,-10,-13}, -{60,-10,-12}, -{60,-10,-11}, -{60,-10,-10}, -{60,-10,-9}, -{60,-10,-8}, -{60,-10,-7}, -{60,-10,-6}, -{60,-10,-5}, -{60,-10,-4}, -{60,-10,-3}, -{60,-10,-2}, -{60,-10,-1}, -{60,-10,0}, -{60,-10,1}, -{60,-10,2}, -{60,-10,3}, -{60,-10,4}, -{60,-10,5}, -{60,-10,6}, -{60,-10,7}, -{60,-10,8}, -{60,-10,9}, -{60,-10,10}, -{60,-10,11}, -{60,-10,12}, -{60,-10,13}, -{60,-10,14}, -{60,-10,15}, -{60,-10,16}, -{60,-10,17}, -{60,-10,18}, -{60,-10,19}, -{60,-10,20}, -{60,-10,21}, -{60,-10,22}, -{60,-10,23}, -{60,-10,24}, -{60,-10,25}, -{60,-10,26}, -{60,-10,27}, -{60,-10,28}, -{60,-10,29}, -{60,-10,30}, -{60,-10,31}, -{60,-10,32}, -{60,-10,33}, -{60,-10,34}, -{60,-10,35}, -{60,-10,36}, -{60,-10,37}, -{60,-10,38}, -{60,-10,39}, -{60,-10,40}, -{60,-10,41}, -{60,-10,42}, -{60,-10,43}, -{60,-10,44}, -{60,-10,45}, -{60,-10,46}, -{60,-10,47}, -{60,-10,48}, -{60,-10,49}, -{60,-10,50}, -{60,-10,51}, -{60,-10,52}, -{60,-10,53}, -{60,-10,54}, -{60,-10,55}, -{60,-10,56}, -{60,-10,57}, -{60,-10,58}, -{60,-10,59}, -{60,-10,60}, -{60,-10,61}, -{60,-10,62}, -{60,-10,63}, -{60,-9,-44}, -{60,-9,-43}, -{60,-9,-42}, -{60,-9,-41}, -{60,-9,-40}, -{60,-9,-39}, -{60,-9,-38}, -{60,-9,-37}, -{60,-9,-36}, -{60,-9,-35}, -{60,-9,-34}, -{60,-9,-33}, -{60,-9,-32}, -{60,-9,-31}, -{60,-9,-30}, -{60,-9,-29}, -{60,-9,-28}, -{60,-9,-27}, -{60,-9,-26}, -{60,-9,-25}, -{60,-9,-24}, -{60,-9,-23}, -{60,-9,-22}, -{60,-9,-21}, -{60,-9,-20}, -{60,-9,-19}, -{60,-9,-18}, -{60,-9,-17}, -{60,-9,-16}, -{60,-9,-15}, -{60,-9,-14}, -{60,-9,-13}, -{60,-9,-12}, -{60,-9,-11}, -{60,-9,-10}, -{60,-9,-9}, -{60,-9,-8}, -{60,-9,-7}, -{60,-9,-6}, -{60,-9,-5}, -{60,-9,-4}, -{60,-9,-3}, -{60,-9,-2}, -{60,-9,-1}, -{60,-9,0}, -{60,-9,1}, -{60,-9,2}, -{60,-9,3}, -{60,-9,4}, -{60,-9,5}, -{60,-9,6}, -{60,-9,7}, -{60,-9,8}, -{60,-9,9}, -{60,-9,10}, -{60,-9,11}, -{60,-9,12}, -{60,-9,13}, -{60,-9,14}, -{60,-9,15}, -{60,-9,16}, -{60,-9,17}, -{60,-9,18}, -{60,-9,19}, -{60,-9,20}, -{60,-9,21}, -{60,-9,22}, -{60,-9,23}, -{60,-9,24}, -{60,-9,25}, -{60,-9,26}, -{60,-9,27}, -{60,-9,28}, -{60,-9,29}, -{60,-9,30}, -{60,-9,31}, -{60,-9,32}, -{60,-9,33}, -{60,-9,34}, -{60,-9,35}, -{60,-9,36}, -{60,-9,37}, -{60,-9,38}, -{60,-9,39}, -{60,-9,40}, -{60,-9,41}, -{60,-9,42}, -{60,-9,43}, -{60,-9,44}, -{60,-9,45}, -{60,-9,46}, -{60,-9,47}, -{60,-9,48}, -{60,-9,49}, -{60,-9,50}, -{60,-9,51}, -{60,-9,52}, -{60,-9,53}, -{60,-9,54}, -{60,-9,55}, -{60,-9,56}, -{60,-9,57}, -{60,-9,58}, -{60,-9,59}, -{60,-9,60}, -{60,-9,61}, -{60,-9,62}, -{60,-9,63}, -{60,-9,64}, -{60,-8,-45}, -{60,-8,-44}, -{60,-8,-43}, -{60,-8,-42}, -{60,-8,-41}, -{60,-8,-40}, -{60,-8,-39}, -{60,-8,-38}, -{60,-8,-37}, -{60,-8,-36}, -{60,-8,-35}, -{60,-8,-34}, -{60,-8,-33}, -{60,-8,-32}, -{60,-8,-31}, -{60,-8,-30}, -{60,-8,-29}, -{60,-8,-28}, -{60,-8,-27}, -{60,-8,-26}, -{60,-8,-25}, -{60,-8,-24}, -{60,-8,-23}, -{60,-8,-22}, -{60,-8,-21}, -{60,-8,-20}, -{60,-8,-19}, -{60,-8,-18}, -{60,-8,-17}, -{60,-8,-16}, -{60,-8,-15}, -{60,-8,-14}, -{60,-8,-13}, -{60,-8,-12}, -{60,-8,-11}, -{60,-8,-10}, -{60,-8,-9}, -{60,-8,-8}, -{60,-8,-7}, -{60,-8,-6}, -{60,-8,-5}, -{60,-8,-4}, -{60,-8,-3}, -{60,-8,-2}, -{60,-8,-1}, -{60,-8,0}, -{60,-8,1}, -{60,-8,2}, -{60,-8,3}, -{60,-8,4}, -{60,-8,5}, -{60,-8,6}, -{60,-8,7}, -{60,-8,8}, -{60,-8,9}, -{60,-8,10}, -{60,-8,11}, -{60,-8,12}, -{60,-8,13}, -{60,-8,14}, -{60,-8,15}, -{60,-8,16}, -{60,-8,17}, -{60,-8,18}, -{60,-8,19}, -{60,-8,20}, -{60,-8,21}, -{60,-8,22}, -{60,-8,23}, -{60,-8,24}, -{60,-8,25}, -{60,-8,26}, -{60,-8,27}, -{60,-8,28}, -{60,-8,29}, -{60,-8,30}, -{60,-8,31}, -{60,-8,32}, -{60,-8,33}, -{60,-8,34}, -{60,-8,35}, -{60,-8,36}, -{60,-8,37}, -{60,-8,38}, -{60,-8,39}, -{60,-8,40}, -{60,-8,41}, -{60,-8,42}, -{60,-8,43}, -{60,-8,44}, -{60,-8,45}, -{60,-8,46}, -{60,-8,47}, -{60,-8,48}, -{60,-8,49}, -{60,-8,50}, -{60,-8,51}, -{60,-8,52}, -{60,-8,53}, -{60,-8,54}, -{60,-8,55}, -{60,-8,56}, -{60,-8,57}, -{60,-8,58}, -{60,-8,59}, -{60,-8,60}, -{60,-8,61}, -{60,-8,62}, -{60,-8,63}, -{60,-8,64}, -{60,-7,-46}, -{60,-7,-45}, -{60,-7,-44}, -{60,-7,-43}, -{60,-7,-42}, -{60,-7,-41}, -{60,-7,-40}, -{60,-7,-39}, -{60,-7,-38}, -{60,-7,-37}, -{60,-7,-36}, -{60,-7,-35}, -{60,-7,-34}, -{60,-7,-33}, -{60,-7,-32}, -{60,-7,-31}, -{60,-7,-30}, -{60,-7,-29}, -{60,-7,-28}, -{60,-7,-27}, -{60,-7,-26}, -{60,-7,-25}, -{60,-7,-24}, -{60,-7,-23}, -{60,-7,-22}, -{60,-7,-21}, -{60,-7,-20}, -{60,-7,-19}, -{60,-7,-18}, -{60,-7,-17}, -{60,-7,-16}, -{60,-7,-15}, -{60,-7,-14}, -{60,-7,-13}, -{60,-7,-12}, -{60,-7,-11}, -{60,-7,-10}, -{60,-7,-9}, -{60,-7,-8}, -{60,-7,-7}, -{60,-7,-6}, -{60,-7,-5}, -{60,-7,-4}, -{60,-7,-3}, -{60,-7,-2}, -{60,-7,-1}, -{60,-7,0}, -{60,-7,1}, -{60,-7,2}, -{60,-7,3}, -{60,-7,4}, -{60,-7,5}, -{60,-7,6}, -{60,-7,7}, -{60,-7,8}, -{60,-7,9}, -{60,-7,10}, -{60,-7,11}, -{60,-7,12}, -{60,-7,13}, -{60,-7,14}, -{60,-7,15}, -{60,-7,16}, -{60,-7,17}, -{60,-7,18}, -{60,-7,19}, -{60,-7,20}, -{60,-7,21}, -{60,-7,22}, -{60,-7,23}, -{60,-7,24}, -{60,-7,25}, -{60,-7,26}, -{60,-7,27}, -{60,-7,28}, -{60,-7,29}, -{60,-7,30}, -{60,-7,31}, -{60,-7,32}, -{60,-7,33}, -{60,-7,34}, -{60,-7,35}, -{60,-7,36}, -{60,-7,37}, -{60,-7,38}, -{60,-7,39}, -{60,-7,40}, -{60,-7,41}, -{60,-7,42}, -{60,-7,43}, -{60,-7,44}, -{60,-7,45}, -{60,-7,46}, -{60,-7,47}, -{60,-7,48}, -{60,-7,49}, -{60,-7,50}, -{60,-7,51}, -{60,-7,52}, -{60,-7,53}, -{60,-7,54}, -{60,-7,55}, -{60,-7,56}, -{60,-7,57}, -{60,-7,58}, -{60,-7,59}, -{60,-7,60}, -{60,-7,61}, -{60,-7,62}, -{60,-7,63}, -{60,-7,64}, -{60,-6,-47}, -{60,-6,-46}, -{60,-6,-45}, -{60,-6,-44}, -{60,-6,-43}, -{60,-6,-42}, -{60,-6,-41}, -{60,-6,-40}, -{60,-6,-39}, -{60,-6,-38}, -{60,-6,-37}, -{60,-6,-36}, -{60,-6,-35}, -{60,-6,-34}, -{60,-6,-33}, -{60,-6,-32}, -{60,-6,-31}, -{60,-6,-30}, -{60,-6,-29}, -{60,-6,-28}, -{60,-6,-27}, -{60,-6,-26}, -{60,-6,-25}, -{60,-6,-24}, -{60,-6,-23}, -{60,-6,-22}, -{60,-6,-21}, -{60,-6,-20}, -{60,-6,-19}, -{60,-6,-18}, -{60,-6,-17}, -{60,-6,-16}, -{60,-6,-15}, -{60,-6,-14}, -{60,-6,-13}, -{60,-6,-12}, -{60,-6,-11}, -{60,-6,-10}, -{60,-6,-9}, -{60,-6,-8}, -{60,-6,-7}, -{60,-6,-6}, -{60,-6,-5}, -{60,-6,-4}, -{60,-6,-3}, -{60,-6,-2}, -{60,-6,-1}, -{60,-6,0}, -{60,-6,1}, -{60,-6,2}, -{60,-6,3}, -{60,-6,4}, -{60,-6,5}, -{60,-6,6}, -{60,-6,7}, -{60,-6,8}, -{60,-6,9}, -{60,-6,10}, -{60,-6,11}, -{60,-6,12}, -{60,-6,13}, -{60,-6,14}, -{60,-6,15}, -{60,-6,16}, -{60,-6,17}, -{60,-6,18}, -{60,-6,19}, -{60,-6,20}, -{60,-6,21}, -{60,-6,22}, -{60,-6,23}, -{60,-6,24}, -{60,-6,25}, -{60,-6,26}, -{60,-6,27}, -{60,-6,28}, -{60,-6,29}, -{60,-6,30}, -{60,-6,31}, -{60,-6,32}, -{60,-6,33}, -{60,-6,34}, -{60,-6,35}, -{60,-6,36}, -{60,-6,37}, -{60,-6,38}, -{60,-6,39}, -{60,-6,40}, -{60,-6,41}, -{60,-6,42}, -{60,-6,43}, -{60,-6,44}, -{60,-6,45}, -{60,-6,46}, -{60,-6,47}, -{60,-6,48}, -{60,-6,49}, -{60,-6,50}, -{60,-6,51}, -{60,-6,52}, -{60,-6,53}, -{60,-6,54}, -{60,-6,55}, -{60,-6,56}, -{60,-6,57}, -{60,-6,58}, -{60,-6,59}, -{60,-6,60}, -{60,-6,61}, -{60,-6,62}, -{60,-6,63}, -{60,-6,64}, -{60,-5,-49}, -{60,-5,-48}, -{60,-5,-47}, -{60,-5,-46}, -{60,-5,-45}, -{60,-5,-44}, -{60,-5,-43}, -{60,-5,-42}, -{60,-5,-41}, -{60,-5,-40}, -{60,-5,-39}, -{60,-5,-38}, -{60,-5,-37}, -{60,-5,-36}, -{60,-5,-35}, -{60,-5,-34}, -{60,-5,-33}, -{60,-5,-32}, -{60,-5,-31}, -{60,-5,-30}, -{60,-5,-29}, -{60,-5,-28}, -{60,-5,-27}, -{60,-5,-26}, -{60,-5,-25}, -{60,-5,-24}, -{60,-5,-23}, -{60,-5,-22}, -{60,-5,-21}, -{60,-5,-20}, -{60,-5,-19}, -{60,-5,-18}, -{60,-5,-17}, -{60,-5,-16}, -{60,-5,-15}, -{60,-5,-14}, -{60,-5,-13}, -{60,-5,-12}, -{60,-5,-11}, -{60,-5,-10}, -{60,-5,-9}, -{60,-5,-8}, -{60,-5,-7}, -{60,-5,-6}, -{60,-5,-5}, -{60,-5,-4}, -{60,-5,-3}, -{60,-5,-2}, -{60,-5,-1}, -{60,-5,0}, -{60,-5,1}, -{60,-5,2}, -{60,-5,3}, -{60,-5,4}, -{60,-5,5}, -{60,-5,6}, -{60,-5,7}, -{60,-5,8}, -{60,-5,9}, -{60,-5,10}, -{60,-5,11}, -{60,-5,12}, -{60,-5,13}, -{60,-5,14}, -{60,-5,15}, -{60,-5,16}, -{60,-5,17}, -{60,-5,18}, -{60,-5,19}, -{60,-5,20}, -{60,-5,21}, -{60,-5,22}, -{60,-5,23}, -{60,-5,24}, -{60,-5,25}, -{60,-5,26}, -{60,-5,27}, -{60,-5,28}, -{60,-5,29}, -{60,-5,30}, -{60,-5,31}, -{60,-5,32}, -{60,-5,33}, -{60,-5,34}, -{60,-5,35}, -{60,-5,36}, -{60,-5,37}, -{60,-5,38}, -{60,-5,39}, -{60,-5,40}, -{60,-5,41}, -{60,-5,42}, -{60,-5,43}, -{60,-5,44}, -{60,-5,45}, -{60,-5,46}, -{60,-5,47}, -{60,-5,48}, -{60,-5,49}, -{60,-5,50}, -{60,-5,51}, -{60,-5,52}, -{60,-5,53}, -{60,-5,54}, -{60,-5,55}, -{60,-5,56}, -{60,-5,57}, -{60,-5,58}, -{60,-5,59}, -{60,-5,60}, -{60,-5,61}, -{60,-5,62}, -{60,-5,63}, -{60,-5,64}, -{60,-4,-50}, -{60,-4,-49}, -{60,-4,-48}, -{60,-4,-47}, -{60,-4,-46}, -{60,-4,-45}, -{60,-4,-44}, -{60,-4,-43}, -{60,-4,-42}, -{60,-4,-41}, -{60,-4,-40}, -{60,-4,-39}, -{60,-4,-38}, -{60,-4,-37}, -{60,-4,-36}, -{60,-4,-35}, -{60,-4,-34}, -{60,-4,-33}, -{60,-4,-32}, -{60,-4,-31}, -{60,-4,-30}, -{60,-4,-29}, -{60,-4,-28}, -{60,-4,-27}, -{60,-4,-26}, -{60,-4,-25}, -{60,-4,-24}, -{60,-4,-23}, -{60,-4,-22}, -{60,-4,-21}, -{60,-4,-20}, -{60,-4,-19}, -{60,-4,-18}, -{60,-4,-17}, -{60,-4,-16}, -{60,-4,-15}, -{60,-4,-14}, -{60,-4,-13}, -{60,-4,-12}, -{60,-4,-11}, -{60,-4,-10}, -{60,-4,-9}, -{60,-4,-8}, -{60,-4,-7}, -{60,-4,-6}, -{60,-4,-5}, -{60,-4,-4}, -{60,-4,-3}, -{60,-4,-2}, -{60,-4,-1}, -{60,-4,0}, -{60,-4,1}, -{60,-4,2}, -{60,-4,3}, -{60,-4,4}, -{60,-4,5}, -{60,-4,6}, -{60,-4,7}, -{60,-4,8}, -{60,-4,9}, -{60,-4,10}, -{60,-4,11}, -{60,-4,12}, -{60,-4,13}, -{60,-4,14}, -{60,-4,15}, -{60,-4,16}, -{60,-4,17}, -{60,-4,18}, -{60,-4,19}, -{60,-4,20}, -{60,-4,21}, -{60,-4,22}, -{60,-4,23}, -{60,-4,24}, -{60,-4,25}, -{60,-4,26}, -{60,-4,27}, -{60,-4,28}, -{60,-4,29}, -{60,-4,30}, -{60,-4,31}, -{60,-4,32}, -{60,-4,33}, -{60,-4,34}, -{60,-4,35}, -{60,-4,36}, -{60,-4,37}, -{60,-4,38}, -{60,-4,39}, -{60,-4,40}, -{60,-4,41}, -{60,-4,42}, -{60,-4,43}, -{60,-4,44}, -{60,-4,45}, -{60,-4,46}, -{60,-4,47}, -{60,-4,48}, -{60,-4,49}, -{60,-4,50}, -{60,-4,51}, -{60,-4,52}, -{60,-4,53}, -{60,-4,54}, -{60,-4,55}, -{60,-4,56}, -{60,-4,57}, -{60,-4,58}, -{60,-4,59}, -{60,-4,60}, -{60,-4,61}, -{60,-4,62}, -{60,-4,63}, -{60,-4,64}, -{60,-3,-51}, -{60,-3,-50}, -{60,-3,-49}, -{60,-3,-48}, -{60,-3,-47}, -{60,-3,-46}, -{60,-3,-45}, -{60,-3,-44}, -{60,-3,-43}, -{60,-3,-42}, -{60,-3,-41}, -{60,-3,-40}, -{60,-3,-39}, -{60,-3,-38}, -{60,-3,-37}, -{60,-3,-36}, -{60,-3,-35}, -{60,-3,-34}, -{60,-3,-33}, -{60,-3,-32}, -{60,-3,-31}, -{60,-3,-30}, -{60,-3,-29}, -{60,-3,-28}, -{60,-3,-27}, -{60,-3,-26}, -{60,-3,-25}, -{60,-3,-24}, -{60,-3,-23}, -{60,-3,-22}, -{60,-3,-21}, -{60,-3,-20}, -{60,-3,-19}, -{60,-3,-18}, -{60,-3,-17}, -{60,-3,-16}, -{60,-3,-15}, -{60,-3,-14}, -{60,-3,-13}, -{60,-3,-12}, -{60,-3,-11}, -{60,-3,-10}, -{60,-3,-9}, -{60,-3,-8}, -{60,-3,-7}, -{60,-3,-6}, -{60,-3,-5}, -{60,-3,-4}, -{60,-3,-3}, -{60,-3,-2}, -{60,-3,-1}, -{60,-3,0}, -{60,-3,1}, -{60,-3,2}, -{60,-3,3}, -{60,-3,4}, -{60,-3,5}, -{60,-3,6}, -{60,-3,7}, -{60,-3,8}, -{60,-3,9}, -{60,-3,10}, -{60,-3,11}, -{60,-3,12}, -{60,-3,13}, -{60,-3,14}, -{60,-3,15}, -{60,-3,16}, -{60,-3,17}, -{60,-3,18}, -{60,-3,19}, -{60,-3,20}, -{60,-3,21}, -{60,-3,22}, -{60,-3,23}, -{60,-3,24}, -{60,-3,25}, -{60,-3,26}, -{60,-3,27}, -{60,-3,28}, -{60,-3,29}, -{60,-3,30}, -{60,-3,31}, -{60,-3,32}, -{60,-3,33}, -{60,-3,34}, -{60,-3,35}, -{60,-3,36}, -{60,-3,37}, -{60,-3,38}, -{60,-3,39}, -{60,-3,40}, -{60,-3,41}, -{60,-3,42}, -{60,-3,43}, -{60,-3,44}, -{60,-3,45}, -{60,-3,46}, -{60,-3,47}, -{60,-3,48}, -{60,-3,49}, -{60,-3,50}, -{60,-3,51}, -{60,-3,52}, -{60,-3,53}, -{60,-3,54}, -{60,-3,55}, -{60,-3,56}, -{60,-3,57}, -{60,-3,58}, -{60,-3,59}, -{60,-3,60}, -{60,-3,61}, -{60,-3,62}, -{60,-3,63}, -{60,-3,64}, -{60,-2,-52}, -{60,-2,-51}, -{60,-2,-50}, -{60,-2,-49}, -{60,-2,-48}, -{60,-2,-47}, -{60,-2,-46}, -{60,-2,-45}, -{60,-2,-44}, -{60,-2,-43}, -{60,-2,-42}, -{60,-2,-41}, -{60,-2,-40}, -{60,-2,-39}, -{60,-2,-38}, -{60,-2,-37}, -{60,-2,-36}, -{60,-2,-35}, -{60,-2,-34}, -{60,-2,-33}, -{60,-2,-32}, -{60,-2,-31}, -{60,-2,-30}, -{60,-2,-29}, -{60,-2,-28}, -{60,-2,-27}, -{60,-2,-26}, -{60,-2,-25}, -{60,-2,-24}, -{60,-2,-23}, -{60,-2,-22}, -{60,-2,-21}, -{60,-2,-20}, -{60,-2,-19}, -{60,-2,-18}, -{60,-2,-17}, -{60,-2,-16}, -{60,-2,-15}, -{60,-2,-14}, -{60,-2,-13}, -{60,-2,-12}, -{60,-2,-11}, -{60,-2,-10}, -{60,-2,-9}, -{60,-2,-8}, -{60,-2,-7}, -{60,-2,-6}, -{60,-2,-5}, -{60,-2,-4}, -{60,-2,-3}, -{60,-2,-2}, -{60,-2,-1}, -{60,-2,0}, -{60,-2,1}, -{60,-2,2}, -{60,-2,3}, -{60,-2,4}, -{60,-2,5}, -{60,-2,6}, -{60,-2,7}, -{60,-2,8}, -{60,-2,9}, -{60,-2,10}, -{60,-2,11}, -{60,-2,12}, -{60,-2,13}, -{60,-2,14}, -{60,-2,15}, -{60,-2,16}, -{60,-2,17}, -{60,-2,18}, -{60,-2,19}, -{60,-2,20}, -{60,-2,21}, -{60,-2,22}, -{60,-2,23}, -{60,-2,24}, -{60,-2,25}, -{60,-2,26}, -{60,-2,27}, -{60,-2,28}, -{60,-2,29}, -{60,-2,30}, -{60,-2,31}, -{60,-2,32}, -{60,-2,33}, -{60,-2,34}, -{60,-2,35}, -{60,-2,36}, -{60,-2,37}, -{60,-2,38}, -{60,-2,39}, -{60,-2,40}, -{60,-2,41}, -{60,-2,42}, -{60,-2,43}, -{60,-2,44}, -{60,-2,45}, -{60,-2,46}, -{60,-2,47}, -{60,-2,48}, -{60,-2,49}, -{60,-2,50}, -{60,-2,51}, -{60,-2,52}, -{60,-2,53}, -{60,-2,54}, -{60,-2,55}, -{60,-2,56}, -{60,-2,57}, -{60,-2,58}, -{60,-2,59}, -{60,-2,60}, -{60,-2,61}, -{60,-2,62}, -{60,-2,63}, -{60,-2,64}, -{60,-1,-53}, -{60,-1,-52}, -{60,-1,-51}, -{60,-1,-50}, -{60,-1,-49}, -{60,-1,-48}, -{60,-1,-47}, -{60,-1,-46}, -{60,-1,-45}, -{60,-1,-44}, -{60,-1,-43}, -{60,-1,-42}, -{60,-1,-41}, -{60,-1,-40}, -{60,-1,-39}, -{60,-1,-38}, -{60,-1,-37}, -{60,-1,-36}, -{60,-1,-35}, -{60,-1,-34}, -{60,-1,-33}, -{60,-1,-32}, -{60,-1,-31}, -{60,-1,-30}, -{60,-1,-29}, -{60,-1,-28}, -{60,-1,-27}, -{60,-1,-26}, -{60,-1,-25}, -{60,-1,-24}, -{60,-1,-23}, -{60,-1,-22}, -{60,-1,-21}, -{60,-1,-20}, -{60,-1,-19}, -{60,-1,-18}, -{60,-1,-17}, -{60,-1,-16}, -{60,-1,-15}, -{60,-1,-14}, -{60,-1,-13}, -{60,-1,-12}, -{60,-1,-11}, -{60,-1,-10}, -{60,-1,-9}, -{60,-1,-8}, -{60,-1,-7}, -{60,-1,-6}, -{60,-1,-5}, -{60,-1,-4}, -{60,-1,-3}, -{60,-1,-2}, -{60,-1,-1}, -{60,-1,0}, -{60,-1,1}, -{60,-1,2}, -{60,-1,3}, -{60,-1,4}, -{60,-1,5}, -{60,-1,6}, -{60,-1,7}, -{60,-1,8}, -{60,-1,9}, -{60,-1,10}, -{60,-1,11}, -{60,-1,12}, -{60,-1,13}, -{60,-1,14}, -{60,-1,15}, -{60,-1,16}, -{60,-1,17}, -{60,-1,18}, -{60,-1,19}, -{60,-1,20}, -{60,-1,21}, -{60,-1,22}, -{60,-1,23}, -{60,-1,24}, -{60,-1,25}, -{60,-1,26}, -{60,-1,27}, -{60,-1,28}, -{60,-1,29}, -{60,-1,30}, -{60,-1,31}, -{60,-1,32}, -{60,-1,33}, -{60,-1,34}, -{60,-1,35}, -{60,-1,36}, -{60,-1,37}, -{60,-1,38}, -{60,-1,39}, -{60,-1,40}, -{60,-1,41}, -{60,-1,42}, -{60,-1,43}, -{60,-1,44}, -{60,-1,45}, -{60,-1,46}, -{60,-1,47}, -{60,-1,48}, -{60,-1,49}, -{60,-1,50}, -{60,-1,51}, -{60,-1,52}, -{60,-1,53}, -{60,-1,54}, -{60,-1,55}, -{60,-1,56}, -{60,-1,57}, -{60,-1,58}, -{60,-1,59}, -{60,-1,60}, -{60,-1,61}, -{60,-1,62}, -{60,-1,63}, -{60,-1,64}, -{60,0,-54}, -{60,0,-53}, -{60,0,-52}, -{60,0,-51}, -{60,0,-50}, -{60,0,-49}, -{60,0,-48}, -{60,0,-47}, -{60,0,-46}, -{60,0,-45}, -{60,0,-44}, -{60,0,-43}, -{60,0,-42}, -{60,0,-41}, -{60,0,-40}, -{60,0,-39}, -{60,0,-38}, -{60,0,-37}, -{60,0,-36}, -{60,0,-35}, -{60,0,-34}, -{60,0,-33}, -{60,0,-32}, -{60,0,-31}, -{60,0,-30}, -{60,0,-29}, -{60,0,-28}, -{60,0,-27}, -{60,0,-26}, -{60,0,-25}, -{60,0,-24}, -{60,0,-23}, -{60,0,-22}, -{60,0,-21}, -{60,0,-20}, -{60,0,-19}, -{60,0,-18}, -{60,0,-17}, -{60,0,-16}, -{60,0,-15}, -{60,0,-14}, -{60,0,-13}, -{60,0,-12}, -{60,0,-11}, -{60,0,-10}, -{60,0,-9}, -{60,0,-8}, -{60,0,-7}, -{60,0,-6}, -{60,0,-5}, -{60,0,-4}, -{60,0,-3}, -{60,0,-2}, -{60,0,-1}, -{60,0,0}, -{60,0,1}, -{60,0,2}, -{60,0,3}, -{60,0,4}, -{60,0,5}, -{60,0,6}, -{60,0,7}, -{60,0,8}, -{60,0,9}, -{60,0,10}, -{60,0,11}, -{60,0,12}, -{60,0,13}, -{60,0,14}, -{60,0,15}, -{60,0,16}, -{60,0,17}, -{60,0,18}, -{60,0,19}, -{60,0,20}, -{60,0,21}, -{60,0,22}, -{60,0,23}, -{60,0,24}, -{60,0,25}, -{60,0,26}, -{60,0,27}, -{60,0,28}, -{60,0,29}, -{60,0,30}, -{60,0,31}, -{60,0,32}, -{60,0,33}, -{60,0,34}, -{60,0,35}, -{60,0,36}, -{60,0,37}, -{60,0,38}, -{60,0,39}, -{60,0,40}, -{60,0,41}, -{60,0,42}, -{60,0,43}, -{60,0,44}, -{60,0,45}, -{60,0,46}, -{60,0,47}, -{60,0,48}, -{60,0,49}, -{60,0,50}, -{60,0,51}, -{60,0,52}, -{60,0,53}, -{60,0,54}, -{60,0,55}, -{60,0,56}, -{60,0,57}, -{60,0,58}, -{60,0,59}, -{60,0,60}, -{60,0,61}, -{60,0,62}, -{60,0,63}, -{60,0,64}, -{60,1,-55}, -{60,1,-54}, -{60,1,-53}, -{60,1,-52}, -{60,1,-51}, -{60,1,-50}, -{60,1,-49}, -{60,1,-48}, -{60,1,-47}, -{60,1,-46}, -{60,1,-45}, -{60,1,-44}, -{60,1,-43}, -{60,1,-42}, -{60,1,-41}, -{60,1,-40}, -{60,1,-39}, -{60,1,-38}, -{60,1,-37}, -{60,1,-36}, -{60,1,-35}, -{60,1,-34}, -{60,1,-33}, -{60,1,-32}, -{60,1,-31}, -{60,1,-30}, -{60,1,-29}, -{60,1,-28}, -{60,1,-27}, -{60,1,-26}, -{60,1,-25}, -{60,1,-24}, -{60,1,-23}, -{60,1,-22}, -{60,1,-21}, -{60,1,-20}, -{60,1,-19}, -{60,1,-18}, -{60,1,-17}, -{60,1,-16}, -{60,1,-15}, -{60,1,-14}, -{60,1,-13}, -{60,1,-12}, -{60,1,-11}, -{60,1,-10}, -{60,1,-9}, -{60,1,-8}, -{60,1,-7}, -{60,1,-6}, -{60,1,-5}, -{60,1,-4}, -{60,1,-3}, -{60,1,-2}, -{60,1,-1}, -{60,1,0}, -{60,1,1}, -{60,1,2}, -{60,1,3}, -{60,1,4}, -{60,1,5}, -{60,1,6}, -{60,1,7}, -{60,1,8}, -{60,1,9}, -{60,1,10}, -{60,1,11}, -{60,1,12}, -{60,1,13}, -{60,1,14}, -{60,1,15}, -{60,1,16}, -{60,1,17}, -{60,1,18}, -{60,1,19}, -{60,1,20}, -{60,1,21}, -{60,1,22}, -{60,1,23}, -{60,1,24}, -{60,1,25}, -{60,1,26}, -{60,1,27}, -{60,1,28}, -{60,1,29}, -{60,1,30}, -{60,1,31}, -{60,1,32}, -{60,1,33}, -{60,1,34}, -{60,1,35}, -{60,1,36}, -{60,1,37}, -{60,1,38}, -{60,1,39}, -{60,1,40}, -{60,1,41}, -{60,1,42}, -{60,1,43}, -{60,1,44}, -{60,1,45}, -{60,1,46}, -{60,1,47}, -{60,1,48}, -{60,1,49}, -{60,1,50}, -{60,1,51}, -{60,1,52}, -{60,1,53}, -{60,1,54}, -{60,1,55}, -{60,1,56}, -{60,1,57}, -{60,1,58}, -{60,1,59}, -{60,1,60}, -{60,1,61}, -{60,1,62}, -{60,1,63}, -{60,1,64}, -{60,2,-57}, -{60,2,-56}, -{60,2,-55}, -{60,2,-54}, -{60,2,-53}, -{60,2,-52}, -{60,2,-51}, -{60,2,-50}, -{60,2,-49}, -{60,2,-48}, -{60,2,-47}, -{60,2,-46}, -{60,2,-45}, -{60,2,-44}, -{60,2,-43}, -{60,2,-42}, -{60,2,-41}, -{60,2,-40}, -{60,2,-39}, -{60,2,-38}, -{60,2,-37}, -{60,2,-36}, -{60,2,-35}, -{60,2,-34}, -{60,2,-33}, -{60,2,-32}, -{60,2,-31}, -{60,2,-30}, -{60,2,-29}, -{60,2,-28}, -{60,2,-27}, -{60,2,-26}, -{60,2,-25}, -{60,2,-24}, -{60,2,-23}, -{60,2,-22}, -{60,2,-21}, -{60,2,-20}, -{60,2,-19}, -{60,2,-18}, -{60,2,-17}, -{60,2,-16}, -{60,2,-15}, -{60,2,-14}, -{60,2,-13}, -{60,2,-12}, -{60,2,-11}, -{60,2,-10}, -{60,2,-9}, -{60,2,-8}, -{60,2,-7}, -{60,2,-6}, -{60,2,-5}, -{60,2,-4}, -{60,2,-3}, -{60,2,-2}, -{60,2,-1}, -{60,2,0}, -{60,2,1}, -{60,2,2}, -{60,2,3}, -{60,2,4}, -{60,2,5}, -{60,2,6}, -{60,2,7}, -{60,2,8}, -{60,2,9}, -{60,2,10}, -{60,2,11}, -{60,2,12}, -{60,2,13}, -{60,2,14}, -{60,2,15}, -{60,2,16}, -{60,2,17}, -{60,2,18}, -{60,2,19}, -{60,2,20}, -{60,2,21}, -{60,2,22}, -{60,2,23}, -{60,2,24}, -{60,2,25}, -{60,2,26}, -{60,2,27}, -{60,2,28}, -{60,2,29}, -{60,2,30}, -{60,2,31}, -{60,2,32}, -{60,2,33}, -{60,2,34}, -{60,2,35}, -{60,2,36}, -{60,2,37}, -{60,2,38}, -{60,2,39}, -{60,2,40}, -{60,2,41}, -{60,2,42}, -{60,2,43}, -{60,2,44}, -{60,2,45}, -{60,2,46}, -{60,2,47}, -{60,2,48}, -{60,2,49}, -{60,2,50}, -{60,2,51}, -{60,2,52}, -{60,2,53}, -{60,2,54}, -{60,2,55}, -{60,2,56}, -{60,2,57}, -{60,2,58}, -{60,2,59}, -{60,2,60}, -{60,2,61}, -{60,2,62}, -{60,2,63}, -{60,2,64}, -{60,3,-58}, -{60,3,-57}, -{60,3,-56}, -{60,3,-55}, -{60,3,-54}, -{60,3,-53}, -{60,3,-52}, -{60,3,-51}, -{60,3,-50}, -{60,3,-49}, -{60,3,-48}, -{60,3,-47}, -{60,3,-46}, -{60,3,-45}, -{60,3,-44}, -{60,3,-43}, -{60,3,-42}, -{60,3,-41}, -{60,3,-40}, -{60,3,-39}, -{60,3,-38}, -{60,3,-37}, -{60,3,-36}, -{60,3,-35}, -{60,3,-34}, -{60,3,-33}, -{60,3,-32}, -{60,3,-31}, -{60,3,-30}, -{60,3,-29}, -{60,3,-28}, -{60,3,-27}, -{60,3,-26}, -{60,3,-25}, -{60,3,-24}, -{60,3,-23}, -{60,3,-22}, -{60,3,-21}, -{60,3,-20}, -{60,3,-19}, -{60,3,-18}, -{60,3,-17}, -{60,3,-16}, -{60,3,-15}, -{60,3,-14}, -{60,3,-13}, -{60,3,-12}, -{60,3,-11}, -{60,3,-10}, -{60,3,-9}, -{60,3,-8}, -{60,3,-7}, -{60,3,-6}, -{60,3,-5}, -{60,3,-4}, -{60,3,-3}, -{60,3,-2}, -{60,3,-1}, -{60,3,0}, -{60,3,1}, -{60,3,2}, -{60,3,3}, -{60,3,4}, -{60,3,5}, -{60,3,6}, -{60,3,7}, -{60,3,8}, -{60,3,9}, -{60,3,10}, -{60,3,11}, -{60,3,12}, -{60,3,13}, -{60,3,14}, -{60,3,15}, -{60,3,16}, -{60,3,17}, -{60,3,18}, -{60,3,19}, -{60,3,20}, -{60,3,21}, -{60,3,22}, -{60,3,23}, -{60,3,24}, -{60,3,25}, -{60,3,26}, -{60,3,27}, -{60,3,28}, -{60,3,29}, -{60,3,30}, -{60,3,31}, -{60,3,32}, -{60,3,33}, -{60,3,34}, -{60,3,35}, -{60,3,36}, -{60,3,37}, -{60,3,38}, -{60,3,39}, -{60,3,40}, -{60,3,41}, -{60,3,42}, -{60,3,43}, -{60,3,44}, -{60,3,45}, -{60,3,46}, -{60,3,47}, -{60,3,48}, -{60,3,49}, -{60,3,50}, -{60,3,51}, -{60,3,52}, -{60,3,53}, -{60,3,54}, -{60,3,55}, -{60,3,56}, -{60,3,57}, -{60,3,58}, -{60,3,59}, -{60,3,60}, -{60,3,61}, -{60,3,62}, -{60,3,63}, -{60,3,64}, -{60,4,-59}, -{60,4,-58}, -{60,4,-57}, -{60,4,-56}, -{60,4,-55}, -{60,4,-54}, -{60,4,-53}, -{60,4,-52}, -{60,4,-51}, -{60,4,-50}, -{60,4,-49}, -{60,4,-48}, -{60,4,-47}, -{60,4,-46}, -{60,4,-45}, -{60,4,-44}, -{60,4,-43}, -{60,4,-42}, -{60,4,-41}, -{60,4,-40}, -{60,4,-39}, -{60,4,-38}, -{60,4,-37}, -{60,4,-36}, -{60,4,-35}, -{60,4,-34}, -{60,4,-33}, -{60,4,-32}, -{60,4,-31}, -{60,4,-30}, -{60,4,-29}, -{60,4,-28}, -{60,4,-27}, -{60,4,-26}, -{60,4,-25}, -{60,4,-24}, -{60,4,-23}, -{60,4,-22}, -{60,4,-21}, -{60,4,-20}, -{60,4,-19}, -{60,4,-18}, -{60,4,-17}, -{60,4,-16}, -{60,4,-15}, -{60,4,-14}, -{60,4,-13}, -{60,4,-12}, -{60,4,-11}, -{60,4,-10}, -{60,4,-9}, -{60,4,-8}, -{60,4,-7}, -{60,4,-6}, -{60,4,-5}, -{60,4,-4}, -{60,4,-3}, -{60,4,-2}, -{60,4,-1}, -{60,4,0}, -{60,4,1}, -{60,4,2}, -{60,4,3}, -{60,4,4}, -{60,4,5}, -{60,4,6}, -{60,4,7}, -{60,4,8}, -{60,4,9}, -{60,4,10}, -{60,4,11}, -{60,4,12}, -{60,4,13}, -{60,4,14}, -{60,4,15}, -{60,4,16}, -{60,4,17}, -{60,4,18}, -{60,4,19}, -{60,4,20}, -{60,4,21}, -{60,4,22}, -{60,4,23}, -{60,4,24}, -{60,4,25}, -{60,4,26}, -{60,4,27}, -{60,4,28}, -{60,4,29}, -{60,4,30}, -{60,4,31}, -{60,4,32}, -{60,4,33}, -{60,4,34}, -{60,4,35}, -{60,4,36}, -{60,4,37}, -{60,4,38}, -{60,4,39}, -{60,4,40}, -{60,4,41}, -{60,4,42}, -{60,4,43}, -{60,4,44}, -{60,4,45}, -{60,4,46}, -{60,4,47}, -{60,4,48}, -{60,4,49}, -{60,4,50}, -{60,4,51}, -{60,4,52}, -{60,4,53}, -{60,4,54}, -{60,4,55}, -{60,4,56}, -{60,4,57}, -{60,4,58}, -{60,4,59}, -{60,4,60}, -{60,4,61}, -{60,4,62}, -{60,4,63}, -{60,4,64}, -{60,5,-60}, -{60,5,-59}, -{60,5,-58}, -{60,5,-57}, -{60,5,-56}, -{60,5,-55}, -{60,5,-54}, -{60,5,-53}, -{60,5,-52}, -{60,5,-51}, -{60,5,-50}, -{60,5,-49}, -{60,5,-48}, -{60,5,-47}, -{60,5,-46}, -{60,5,-45}, -{60,5,-44}, -{60,5,-43}, -{60,5,-42}, -{60,5,-41}, -{60,5,-40}, -{60,5,-39}, -{60,5,-38}, -{60,5,-37}, -{60,5,-36}, -{60,5,-35}, -{60,5,-34}, -{60,5,-33}, -{60,5,-32}, -{60,5,-31}, -{60,5,-30}, -{60,5,-29}, -{60,5,-28}, -{60,5,-27}, -{60,5,-26}, -{60,5,-25}, -{60,5,-24}, -{60,5,-23}, -{60,5,-22}, -{60,5,-21}, -{60,5,-20}, -{60,5,-19}, -{60,5,-18}, -{60,5,-17}, -{60,5,-16}, -{60,5,-15}, -{60,5,-14}, -{60,5,-13}, -{60,5,-12}, -{60,5,-11}, -{60,5,-10}, -{60,5,-9}, -{60,5,-8}, -{60,5,-7}, -{60,5,-6}, -{60,5,-5}, -{60,5,-4}, -{60,5,-3}, -{60,5,-2}, -{60,5,-1}, -{60,5,0}, -{60,5,1}, -{60,5,2}, -{60,5,3}, -{60,5,4}, -{60,5,5}, -{60,5,6}, -{60,5,7}, -{60,5,8}, -{60,5,9}, -{60,5,10}, -{60,5,11}, -{60,5,12}, -{60,5,13}, -{60,5,14}, -{60,5,15}, -{60,5,16}, -{60,5,17}, -{60,5,18}, -{60,5,19}, -{60,5,20}, -{60,5,21}, -{60,5,22}, -{60,5,23}, -{60,5,24}, -{60,5,25}, -{60,5,26}, -{60,5,27}, -{60,5,28}, -{60,5,29}, -{60,5,30}, -{60,5,31}, -{60,5,32}, -{60,5,33}, -{60,5,34}, -{60,5,35}, -{60,5,36}, -{60,5,37}, -{60,5,38}, -{60,5,39}, -{60,5,40}, -{60,5,41}, -{60,5,42}, -{60,5,43}, -{60,5,44}, -{60,5,45}, -{60,5,46}, -{60,5,47}, -{60,5,48}, -{60,5,49}, -{60,5,50}, -{60,5,51}, -{60,5,52}, -{60,5,53}, -{60,5,54}, -{60,5,55}, -{60,5,56}, -{60,5,57}, -{60,5,58}, -{60,5,59}, -{60,5,60}, -{60,5,61}, -{60,5,62}, -{60,5,63}, -{60,5,64}, -{60,6,-61}, -{60,6,-60}, -{60,6,-59}, -{60,6,-58}, -{60,6,-57}, -{60,6,-56}, -{60,6,-55}, -{60,6,-54}, -{60,6,-53}, -{60,6,-52}, -{60,6,-51}, -{60,6,-50}, -{60,6,-49}, -{60,6,-48}, -{60,6,-47}, -{60,6,-46}, -{60,6,-45}, -{60,6,-44}, -{60,6,-43}, -{60,6,-42}, -{60,6,-41}, -{60,6,-40}, -{60,6,-39}, -{60,6,-38}, -{60,6,-37}, -{60,6,-36}, -{60,6,-35}, -{60,6,-34}, -{60,6,-33}, -{60,6,-32}, -{60,6,-31}, -{60,6,-30}, -{60,6,-29}, -{60,6,-28}, -{60,6,-27}, -{60,6,-26}, -{60,6,-25}, -{60,6,-24}, -{60,6,-23}, -{60,6,-22}, -{60,6,-21}, -{60,6,-20}, -{60,6,-19}, -{60,6,-18}, -{60,6,-17}, -{60,6,-16}, -{60,6,-15}, -{60,6,-14}, -{60,6,-13}, -{60,6,-12}, -{60,6,-11}, -{60,6,-10}, -{60,6,-9}, -{60,6,-8}, -{60,6,-7}, -{60,6,-6}, -{60,6,-5}, -{60,6,-4}, -{60,6,-3}, -{60,6,-2}, -{60,6,-1}, -{60,6,0}, -{60,6,1}, -{60,6,2}, -{60,6,3}, -{60,6,4}, -{60,6,5}, -{60,6,6}, -{60,6,7}, -{60,6,8}, -{60,6,9}, -{60,6,10}, -{60,6,11}, -{60,6,12}, -{60,6,13}, -{60,6,14}, -{60,6,15}, -{60,6,16}, -{60,6,17}, -{60,6,18}, -{60,6,19}, -{60,6,20}, -{60,6,21}, -{60,6,22}, -{60,6,23}, -{60,6,24}, -{60,6,25}, -{60,6,26}, -{60,6,27}, -{60,6,28}, -{60,6,29}, -{60,6,30}, -{60,6,31}, -{60,6,32}, -{60,6,33}, -{60,6,34}, -{60,6,35}, -{60,6,36}, -{60,6,37}, -{60,6,38}, -{60,6,39}, -{60,6,40}, -{60,6,41}, -{60,6,42}, -{60,6,43}, -{60,6,44}, -{60,6,45}, -{60,6,46}, -{60,6,47}, -{60,6,48}, -{60,6,49}, -{60,6,50}, -{60,6,51}, -{60,6,52}, -{60,6,53}, -{60,6,54}, -{60,6,55}, -{60,6,56}, -{60,6,57}, -{60,6,58}, -{60,6,59}, -{60,6,60}, -{60,6,61}, -{60,6,62}, -{60,6,63}, -{60,6,64}, -{60,6,65}, -{60,7,-62}, -{60,7,-61}, -{60,7,-60}, -{60,7,-59}, -{60,7,-58}, -{60,7,-57}, -{60,7,-56}, -{60,7,-55}, -{60,7,-54}, -{60,7,-53}, -{60,7,-52}, -{60,7,-51}, -{60,7,-50}, -{60,7,-49}, -{60,7,-48}, -{60,7,-47}, -{60,7,-46}, -{60,7,-45}, -{60,7,-44}, -{60,7,-43}, -{60,7,-42}, -{60,7,-41}, -{60,7,-40}, -{60,7,-39}, -{60,7,-38}, -{60,7,-37}, -{60,7,-36}, -{60,7,-35}, -{60,7,-34}, -{60,7,-33}, -{60,7,-32}, -{60,7,-31}, -{60,7,-30}, -{60,7,-29}, -{60,7,-28}, -{60,7,-27}, -{60,7,-26}, -{60,7,-25}, -{60,7,-24}, -{60,7,-23}, -{60,7,-22}, -{60,7,-21}, -{60,7,-20}, -{60,7,-19}, -{60,7,-18}, -{60,7,-17}, -{60,7,-16}, -{60,7,-15}, -{60,7,-14}, -{60,7,-13}, -{60,7,-12}, -{60,7,-11}, -{60,7,-10}, -{60,7,-9}, -{60,7,-8}, -{60,7,-7}, -{60,7,-6}, -{60,7,-5}, -{60,7,-4}, -{60,7,-3}, -{60,7,-2}, -{60,7,-1}, -{60,7,0}, -{60,7,1}, -{60,7,2}, -{60,7,3}, -{60,7,4}, -{60,7,5}, -{60,7,6}, -{60,7,7}, -{60,7,8}, -{60,7,9}, -{60,7,10}, -{60,7,11}, -{60,7,12}, -{60,7,13}, -{60,7,14}, -{60,7,15}, -{60,7,16}, -{60,7,17}, -{60,7,18}, -{60,7,19}, -{60,7,20}, -{60,7,21}, -{60,7,22}, -{60,7,23}, -{60,7,24}, -{60,7,25}, -{60,7,26}, -{60,7,27}, -{60,7,28}, -{60,7,29}, -{60,7,30}, -{60,7,31}, -{60,7,32}, -{60,7,33}, -{60,7,34}, -{60,7,35}, -{60,7,36}, -{60,7,37}, -{60,7,38}, -{60,7,39}, -{60,7,40}, -{60,7,41}, -{60,7,42}, -{60,7,43}, -{60,7,44}, -{60,7,45}, -{60,7,46}, -{60,7,47}, -{60,7,48}, -{60,7,49}, -{60,7,50}, -{60,7,51}, -{60,7,52}, -{60,7,53}, -{60,7,54}, -{60,7,55}, -{60,7,56}, -{60,7,57}, -{60,7,58}, -{60,7,59}, -{60,7,60}, -{60,7,61}, -{60,7,62}, -{60,7,63}, -{60,7,64}, -{60,7,65}, -{60,8,-62}, -{60,8,-61}, -{60,8,-60}, -{60,8,-59}, -{60,8,-58}, -{60,8,-57}, -{60,8,-56}, -{60,8,-55}, -{60,8,-54}, -{60,8,-53}, -{60,8,-52}, -{60,8,-51}, -{60,8,-50}, -{60,8,-49}, -{60,8,-48}, -{60,8,-47}, -{60,8,-46}, -{60,8,-45}, -{60,8,-44}, -{60,8,-43}, -{60,8,-42}, -{60,8,-41}, -{60,8,-40}, -{60,8,-39}, -{60,8,-38}, -{60,8,-37}, -{60,8,-36}, -{60,8,-35}, -{60,8,-34}, -{60,8,-33}, -{60,8,-32}, -{60,8,-31}, -{60,8,-30}, -{60,8,-29}, -{60,8,-28}, -{60,8,-27}, -{60,8,-26}, -{60,8,-25}, -{60,8,-24}, -{60,8,-23}, -{60,8,-22}, -{60,8,-21}, -{60,8,-20}, -{60,8,-19}, -{60,8,-18}, -{60,8,-17}, -{60,8,-16}, -{60,8,-15}, -{60,8,-14}, -{60,8,-13}, -{60,8,-12}, -{60,8,-11}, -{60,8,-10}, -{60,8,-9}, -{60,8,-8}, -{60,8,-7}, -{60,8,-6}, -{60,8,-5}, -{60,8,-4}, -{60,8,-3}, -{60,8,-2}, -{60,8,-1}, -{60,8,0}, -{60,8,1}, -{60,8,2}, -{60,8,3}, -{60,8,4}, -{60,8,5}, -{60,8,6}, -{60,8,7}, -{60,8,8}, -{60,8,9}, -{60,8,10}, -{60,8,11}, -{60,8,12}, -{60,8,13}, -{60,8,14}, -{60,8,15}, -{60,8,16}, -{60,8,17}, -{60,8,18}, -{60,8,19}, -{60,8,20}, -{60,8,21}, -{60,8,22}, -{60,8,23}, -{60,8,24}, -{60,8,25}, -{60,8,26}, -{60,8,27}, -{60,8,28}, -{60,8,29}, -{60,8,30}, -{60,8,31}, -{60,8,32}, -{60,8,33}, -{60,8,34}, -{60,8,35}, -{60,8,36}, -{60,8,37}, -{60,8,38}, -{60,8,39}, -{60,8,40}, -{60,8,41}, -{60,8,42}, -{60,8,43}, -{60,8,44}, -{60,8,45}, -{60,8,46}, -{60,8,47}, -{60,8,48}, -{60,8,49}, -{60,8,50}, -{60,8,51}, -{60,8,52}, -{60,8,53}, -{60,8,54}, -{60,8,55}, -{60,8,56}, -{60,8,57}, -{60,8,58}, -{60,8,59}, -{60,8,60}, -{60,8,61}, -{60,8,62}, -{60,8,63}, -{60,8,64}, -{60,8,65}, -{60,9,-62}, -{60,9,-61}, -{60,9,-60}, -{60,9,-59}, -{60,9,-58}, -{60,9,-57}, -{60,9,-56}, -{60,9,-55}, -{60,9,-54}, -{60,9,-53}, -{60,9,-52}, -{60,9,-51}, -{60,9,-50}, -{60,9,-49}, -{60,9,-48}, -{60,9,-47}, -{60,9,-46}, -{60,9,-45}, -{60,9,-44}, -{60,9,-43}, -{60,9,-42}, -{60,9,-41}, -{60,9,-40}, -{60,9,-39}, -{60,9,-38}, -{60,9,-37}, -{60,9,-36}, -{60,9,-35}, -{60,9,-34}, -{60,9,-33}, -{60,9,-32}, -{60,9,-31}, -{60,9,-30}, -{60,9,-29}, -{60,9,-28}, -{60,9,-27}, -{60,9,-26}, -{60,9,-25}, -{60,9,-24}, -{60,9,-23}, -{60,9,-22}, -{60,9,-21}, -{60,9,-20}, -{60,9,-19}, -{60,9,-18}, -{60,9,-17}, -{60,9,-16}, -{60,9,-15}, -{60,9,-14}, -{60,9,-13}, -{60,9,-12}, -{60,9,-11}, -{60,9,-10}, -{60,9,-9}, -{60,9,-8}, -{60,9,-7}, -{60,9,-6}, -{60,9,-5}, -{60,9,-4}, -{60,9,-3}, -{60,9,-2}, -{60,9,-1}, -{60,9,0}, -{60,9,1}, -{60,9,2}, -{60,9,3}, -{60,9,4}, -{60,9,5}, -{60,9,6}, -{60,9,7}, -{60,9,8}, -{60,9,9}, -{60,9,10}, -{60,9,11}, -{60,9,12}, -{60,9,13}, -{60,9,14}, -{60,9,15}, -{60,9,16}, -{60,9,17}, -{60,9,18}, -{60,9,19}, -{60,9,20}, -{60,9,21}, -{60,9,22}, -{60,9,23}, -{60,9,24}, -{60,9,25}, -{60,9,26}, -{60,9,27}, -{60,9,28}, -{60,9,29}, -{60,9,30}, -{60,9,31}, -{60,9,32}, -{60,9,33}, -{60,9,34}, -{60,9,35}, -{60,9,36}, -{60,9,37}, -{60,9,38}, -{60,9,39}, -{60,9,40}, -{60,9,41}, -{60,9,42}, -{60,9,43}, -{60,9,44}, -{60,9,45}, -{60,9,46}, -{60,9,47}, -{60,9,48}, -{60,9,49}, -{60,9,50}, -{60,9,51}, -{60,9,52}, -{60,9,53}, -{60,9,54}, -{60,9,55}, -{60,9,56}, -{60,9,57}, -{60,9,58}, -{60,9,59}, -{60,9,60}, -{60,9,61}, -{60,9,62}, -{60,9,63}, -{60,9,64}, -{60,9,65}, -{60,10,-62}, -{60,10,-61}, -{60,10,-60}, -{60,10,-59}, -{60,10,-58}, -{60,10,-57}, -{60,10,-56}, -{60,10,-55}, -{60,10,-54}, -{60,10,-53}, -{60,10,-52}, -{60,10,-51}, -{60,10,-50}, -{60,10,-49}, -{60,10,-48}, -{60,10,-47}, -{60,10,-46}, -{60,10,-45}, -{60,10,-44}, -{60,10,-43}, -{60,10,-42}, -{60,10,-41}, -{60,10,-40}, -{60,10,-39}, -{60,10,-38}, -{60,10,-37}, -{60,10,-36}, -{60,10,-35}, -{60,10,-34}, -{60,10,-33}, -{60,10,-32}, -{60,10,-31}, -{60,10,-30}, -{60,10,-29}, -{60,10,-28}, -{60,10,-27}, -{60,10,-26}, -{60,10,-25}, -{60,10,-24}, -{60,10,-23}, -{60,10,-22}, -{60,10,-21}, -{60,10,-20}, -{60,10,-19}, -{60,10,-18}, -{60,10,-17}, -{60,10,-16}, -{60,10,-15}, -{60,10,-14}, -{60,10,-13}, -{60,10,-12}, -{60,10,-11}, -{60,10,-10}, -{60,10,-9}, -{60,10,-8}, -{60,10,-7}, -{60,10,-6}, -{60,10,-5}, -{60,10,-4}, -{60,10,-3}, -{60,10,-2}, -{60,10,-1}, -{60,10,0}, -{60,10,1}, -{60,10,2}, -{60,10,3}, -{60,10,4}, -{60,10,5}, -{60,10,6}, -{60,10,7}, -{60,10,8}, -{60,10,9}, -{60,10,10}, -{60,10,11}, -{60,10,12}, -{60,10,13}, -{60,10,14}, -{60,10,15}, -{60,10,16}, -{60,10,17}, -{60,10,18}, -{60,10,19}, -{60,10,20}, -{60,10,21}, -{60,10,22}, -{60,10,23}, -{60,10,24}, -{60,10,25}, -{60,10,26}, -{60,10,27}, -{60,10,28}, -{60,10,29}, -{60,10,30}, -{60,10,31}, -{60,10,32}, -{60,10,33}, -{60,10,34}, -{60,10,35}, -{60,10,36}, -{60,10,37}, -{60,10,38}, -{60,10,39}, -{60,10,40}, -{60,10,41}, -{60,10,42}, -{60,10,43}, -{60,10,44}, -{60,10,45}, -{60,10,46}, -{60,10,47}, -{60,10,48}, -{60,10,49}, -{60,10,50}, -{60,10,51}, -{60,10,52}, -{60,10,53}, -{60,10,54}, -{60,10,55}, -{60,10,56}, -{60,10,57}, -{60,10,58}, -{60,10,59}, -{60,10,60}, -{60,10,61}, -{60,10,62}, -{60,10,63}, -{60,10,64}, -{60,10,65}, -{60,11,-62}, -{60,11,-61}, -{60,11,-60}, -{60,11,-59}, -{60,11,-58}, -{60,11,-57}, -{60,11,-56}, -{60,11,-55}, -{60,11,-54}, -{60,11,-53}, -{60,11,-52}, -{60,11,-51}, -{60,11,-50}, -{60,11,-49}, -{60,11,-48}, -{60,11,-47}, -{60,11,-46}, -{60,11,-45}, -{60,11,-44}, -{60,11,-43}, -{60,11,-42}, -{60,11,-41}, -{60,11,-40}, -{60,11,-39}, -{60,11,-38}, -{60,11,-37}, -{60,11,-36}, -{60,11,-35}, -{60,11,-34}, -{60,11,-33}, -{60,11,-32}, -{60,11,-31}, -{60,11,-30}, -{60,11,-29}, -{60,11,-28}, -{60,11,-27}, -{60,11,-26}, -{60,11,-25}, -{60,11,-24}, -{60,11,-23}, -{60,11,-22}, -{60,11,-21}, -{60,11,-20}, -{60,11,-19}, -{60,11,-18}, -{60,11,-17}, -{60,11,-16}, -{60,11,-15}, -{60,11,-14}, -{60,11,-13}, -{60,11,-12}, -{60,11,-11}, -{60,11,-10}, -{60,11,-9}, -{60,11,-8}, -{60,11,-7}, -{60,11,-6}, -{60,11,-5}, -{60,11,-4}, -{60,11,-3}, -{60,11,-2}, -{60,11,-1}, -{60,11,0}, -{60,11,1}, -{60,11,2}, -{60,11,3}, -{60,11,4}, -{60,11,5}, -{60,11,6}, -{60,11,7}, -{60,11,8}, -{60,11,9}, -{60,11,10}, -{60,11,11}, -{60,11,12}, -{60,11,13}, -{60,11,14}, -{60,11,15}, -{60,11,16}, -{60,11,17}, -{60,11,18}, -{60,11,19}, -{60,11,20}, -{60,11,21}, -{60,11,22}, -{60,11,23}, -{60,11,24}, -{60,11,25}, -{60,11,26}, -{60,11,27}, -{60,11,28}, -{60,11,29}, -{60,11,30}, -{60,11,31}, -{60,11,32}, -{60,11,33}, -{60,11,34}, -{60,11,35}, -{60,11,36}, -{60,11,37}, -{60,11,38}, -{60,11,39}, -{60,11,40}, -{60,11,41}, -{60,11,42}, -{60,11,43}, -{60,11,44}, -{60,11,45}, -{60,11,46}, -{60,11,47}, -{60,11,48}, -{60,11,49}, -{60,11,50}, -{60,11,51}, -{60,11,52}, -{60,11,53}, -{60,11,54}, -{60,11,55}, -{60,11,56}, -{60,11,57}, -{60,11,58}, -{60,11,59}, -{60,11,60}, -{60,11,61}, -{60,11,62}, -{60,11,63}, -{60,11,64}, -{60,11,65}, -{60,12,-62}, -{60,12,-61}, -{60,12,-60}, -{60,12,-59}, -{60,12,-58}, -{60,12,-57}, -{60,12,-56}, -{60,12,-55}, -{60,12,-54}, -{60,12,-53}, -{60,12,-52}, -{60,12,-51}, -{60,12,-50}, -{60,12,-49}, -{60,12,-48}, -{60,12,-47}, -{60,12,-46}, -{60,12,-45}, -{60,12,-44}, -{60,12,-43}, -{60,12,-42}, -{60,12,-41}, -{60,12,-40}, -{60,12,-39}, -{60,12,-38}, -{60,12,-37}, -{60,12,-36}, -{60,12,-35}, -{60,12,-34}, -{60,12,-33}, -{60,12,-32}, -{60,12,-31}, -{60,12,-30}, -{60,12,-29}, -{60,12,-28}, -{60,12,-27}, -{60,12,-26}, -{60,12,-25}, -{60,12,-24}, -{60,12,-23}, -{60,12,-22}, -{60,12,-21}, -{60,12,-20}, -{60,12,-19}, -{60,12,-18}, -{60,12,-17}, -{60,12,-16}, -{60,12,-15}, -{60,12,-14}, -{60,12,-13}, -{60,12,-12}, -{60,12,-11}, -{60,12,-10}, -{60,12,-9}, -{60,12,-8}, -{60,12,-7}, -{60,12,-6}, -{60,12,-5}, -{60,12,-4}, -{60,12,-3}, -{60,12,-2}, -{60,12,-1}, -{60,12,0}, -{60,12,1}, -{60,12,2}, -{60,12,3}, -{60,12,4}, -{60,12,5}, -{60,12,6}, -{60,12,7}, -{60,12,8}, -{60,12,9}, -{60,12,10}, -{60,12,11}, -{60,12,12}, -{60,12,13}, -{60,12,14}, -{60,12,15}, -{60,12,16}, -{60,12,17}, -{60,12,18}, -{60,12,19}, -{60,12,20}, -{60,12,21}, -{60,12,22}, -{60,12,23}, -{60,12,24}, -{60,12,25}, -{60,12,26}, -{60,12,27}, -{60,12,28}, -{60,12,29}, -{60,12,30}, -{60,12,31}, -{60,12,32}, -{60,12,33}, -{60,12,34}, -{60,12,35}, -{60,12,36}, -{60,12,37}, -{60,12,38}, -{60,12,39}, -{60,12,40}, -{60,12,41}, -{60,12,42}, -{60,12,43}, -{60,12,44}, -{60,12,45}, -{60,12,46}, -{60,12,47}, -{60,12,48}, -{60,12,49}, -{60,12,50}, -{60,12,51}, -{60,12,52}, -{60,12,53}, -{60,12,54}, -{60,12,55}, -{60,12,56}, -{60,12,57}, -{60,12,58}, -{60,12,59}, -{60,12,60}, -{60,12,61}, -{60,12,62}, -{60,12,63}, -{60,12,64}, -{60,12,65}, -{60,13,-62}, -{60,13,-61}, -{60,13,-60}, -{60,13,-59}, -{60,13,-58}, -{60,13,-57}, -{60,13,-56}, -{60,13,-55}, -{60,13,-54}, -{60,13,-53}, -{60,13,-52}, -{60,13,-51}, -{60,13,-50}, -{60,13,-49}, -{60,13,-48}, -{60,13,-47}, -{60,13,-46}, -{60,13,-45}, -{60,13,-44}, -{60,13,-43}, -{60,13,-42}, -{60,13,-41}, -{60,13,-40}, -{60,13,-39}, -{60,13,-38}, -{60,13,-37}, -{60,13,-36}, -{60,13,-35}, -{60,13,-34}, -{60,13,-33}, -{60,13,-32}, -{60,13,-31}, -{60,13,-30}, -{60,13,-29}, -{60,13,-28}, -{60,13,-27}, -{60,13,-26}, -{60,13,-25}, -{60,13,-24}, -{60,13,-23}, -{60,13,-22}, -{60,13,-21}, -{60,13,-20}, -{60,13,-19}, -{60,13,-18}, -{60,13,-17}, -{60,13,-16}, -{60,13,-15}, -{60,13,-14}, -{60,13,-13}, -{60,13,-12}, -{60,13,-11}, -{60,13,-10}, -{60,13,-9}, -{60,13,-8}, -{60,13,-7}, -{60,13,-6}, -{60,13,-5}, -{60,13,-4}, -{60,13,-3}, -{60,13,-2}, -{60,13,-1}, -{60,13,0}, -{60,13,1}, -{60,13,2}, -{60,13,3}, -{60,13,4}, -{60,13,5}, -{60,13,6}, -{60,13,7}, -{60,13,8}, -{60,13,9}, -{60,13,10}, -{60,13,11}, -{60,13,12}, -{60,13,13}, -{60,13,14}, -{60,13,15}, -{60,13,16}, -{60,13,17}, -{60,13,18}, -{60,13,19}, -{60,13,20}, -{60,13,21}, -{60,13,22}, -{60,13,23}, -{60,13,24}, -{60,13,25}, -{60,13,26}, -{60,13,27}, -{60,13,28}, -{60,13,29}, -{60,13,30}, -{60,13,31}, -{60,13,32}, -{60,13,33}, -{60,13,34}, -{60,13,35}, -{60,13,36}, -{60,13,37}, -{60,13,38}, -{60,13,39}, -{60,13,40}, -{60,13,41}, -{60,13,42}, -{60,13,43}, -{60,13,44}, -{60,13,45}, -{60,13,46}, -{60,13,47}, -{60,13,48}, -{60,13,49}, -{60,13,50}, -{60,13,51}, -{60,13,52}, -{60,13,53}, -{60,13,54}, -{60,13,55}, -{60,13,56}, -{60,13,57}, -{60,13,58}, -{60,13,59}, -{60,13,60}, -{60,13,61}, -{60,13,62}, -{60,13,63}, -{60,13,64}, -{60,13,65}, -{60,14,-62}, -{60,14,-61}, -{60,14,-60}, -{60,14,-59}, -{60,14,-58}, -{60,14,-57}, -{60,14,-56}, -{60,14,-55}, -{60,14,-54}, -{60,14,-53}, -{60,14,-52}, -{60,14,-51}, -{60,14,-50}, -{60,14,-49}, -{60,14,-48}, -{60,14,-47}, -{60,14,-46}, -{60,14,-45}, -{60,14,-44}, -{60,14,-43}, -{60,14,-42}, -{60,14,-41}, -{60,14,-40}, -{60,14,-39}, -{60,14,-38}, -{60,14,-37}, -{60,14,-36}, -{60,14,-35}, -{60,14,-34}, -{60,14,-33}, -{60,14,-32}, -{60,14,-31}, -{60,14,-30}, -{60,14,-29}, -{60,14,-28}, -{60,14,-27}, -{60,14,-26}, -{60,14,-25}, -{60,14,-24}, -{60,14,-23}, -{60,14,-22}, -{60,14,-21}, -{60,14,-20}, -{60,14,-19}, -{60,14,-18}, -{60,14,-17}, -{60,14,-16}, -{60,14,-15}, -{60,14,-14}, -{60,14,-13}, -{60,14,-12}, -{60,14,-11}, -{60,14,-10}, -{60,14,-9}, -{60,14,-8}, -{60,14,-7}, -{60,14,-6}, -{60,14,-5}, -{60,14,-4}, -{60,14,-3}, -{60,14,-2}, -{60,14,-1}, -{60,14,0}, -{60,14,1}, -{60,14,2}, -{60,14,3}, -{60,14,4}, -{60,14,5}, -{60,14,6}, -{60,14,7}, -{60,14,8}, -{60,14,9}, -{60,14,10}, -{60,14,11}, -{60,14,12}, -{60,14,13}, -{60,14,14}, -{60,14,15}, -{60,14,16}, -{60,14,17}, -{60,14,18}, -{60,14,19}, -{60,14,20}, -{60,14,21}, -{60,14,22}, -{60,14,23}, -{60,14,24}, -{60,14,25}, -{60,14,26}, -{60,14,27}, -{60,14,28}, -{60,14,29}, -{60,14,30}, -{60,14,31}, -{60,14,32}, -{60,14,33}, -{60,14,34}, -{60,14,35}, -{60,14,36}, -{60,14,37}, -{60,14,38}, -{60,14,39}, -{60,14,40}, -{60,14,41}, -{60,14,42}, -{60,14,43}, -{60,14,44}, -{60,14,45}, -{60,14,46}, -{60,14,47}, -{60,14,48}, -{60,14,49}, -{60,14,50}, -{60,14,51}, -{60,14,52}, -{60,14,53}, -{60,14,54}, -{60,14,55}, -{60,14,56}, -{60,14,57}, -{60,14,58}, -{60,14,59}, -{60,14,60}, -{60,14,61}, -{60,14,62}, -{60,14,63}, -{60,14,64}, -{60,14,65}, -{60,15,-62}, -{60,15,-61}, -{60,15,-60}, -{60,15,-59}, -{60,15,-58}, -{60,15,-57}, -{60,15,-56}, -{60,15,-55}, -{60,15,-54}, -{60,15,-53}, -{60,15,-52}, -{60,15,-51}, -{60,15,-50}, -{60,15,-49}, -{60,15,-48}, -{60,15,-47}, -{60,15,-46}, -{60,15,-45}, -{60,15,-44}, -{60,15,-43}, -{60,15,-42}, -{60,15,-41}, -{60,15,-40}, -{60,15,-39}, -{60,15,-38}, -{60,15,-37}, -{60,15,-36}, -{60,15,-35}, -{60,15,-34}, -{60,15,-33}, -{60,15,-32}, -{60,15,-31}, -{60,15,-30}, -{60,15,-29}, -{60,15,-28}, -{60,15,-27}, -{60,15,-26}, -{60,15,-25}, -{60,15,-24}, -{60,15,-23}, -{60,15,-22}, -{60,15,-21}, -{60,15,-20}, -{60,15,-19}, -{60,15,-18}, -{60,15,-17}, -{60,15,-16}, -{60,15,-15}, -{60,15,-14}, -{60,15,-13}, -{60,15,-12}, -{60,15,-11}, -{60,15,-10}, -{60,15,-9}, -{60,15,-8}, -{60,15,-7}, -{60,15,-6}, -{60,15,-5}, -{60,15,-4}, -{60,15,-3}, -{60,15,-2}, -{60,15,-1}, -{60,15,0}, -{60,15,1}, -{60,15,2}, -{60,15,3}, -{60,15,4}, -{60,15,5}, -{60,15,6}, -{60,15,7}, -{60,15,8}, -{60,15,9}, -{60,15,10}, -{60,15,11}, -{60,15,12}, -{60,15,13}, -{60,15,14}, -{60,15,15}, -{60,15,16}, -{60,15,17}, -{60,15,18}, -{60,15,19}, -{60,15,20}, -{60,15,21}, -{60,15,22}, -{60,15,23}, -{60,15,24}, -{60,15,25}, -{60,15,26}, -{60,15,27}, -{60,15,28}, -{60,15,29}, -{60,15,30}, -{60,15,31}, -{60,15,32}, -{60,15,33}, -{60,15,34}, -{60,15,35}, -{60,15,36}, -{60,15,37}, -{60,15,38}, -{60,15,39}, -{60,15,40}, -{60,15,41}, -{60,15,42}, -{60,15,43}, -{60,15,44}, -{60,15,45}, -{60,15,46}, -{60,15,47}, -{60,15,48}, -{60,15,49}, -{60,15,50}, -{60,15,51}, -{60,15,52}, -{60,15,53}, -{60,15,54}, -{60,15,55}, -{60,15,56}, -{60,15,57}, -{60,15,58}, -{60,15,59}, -{60,15,60}, -{60,15,61}, -{60,15,62}, -{60,15,63}, -{60,15,64}, -{60,15,65}, -{60,16,-62}, -{60,16,-61}, -{60,16,-60}, -{60,16,-59}, -{60,16,-58}, -{60,16,-57}, -{60,16,-56}, -{60,16,-55}, -{60,16,-54}, -{60,16,-53}, -{60,16,-52}, -{60,16,-51}, -{60,16,-50}, -{60,16,-49}, -{60,16,-48}, -{60,16,-47}, -{60,16,-46}, -{60,16,-45}, -{60,16,-44}, -{60,16,-43}, -{60,16,-42}, -{60,16,-41}, -{60,16,-40}, -{60,16,-39}, -{60,16,-38}, -{60,16,-37}, -{60,16,-36}, -{60,16,-35}, -{60,16,-34}, -{60,16,-33}, -{60,16,-32}, -{60,16,-31}, -{60,16,-30}, -{60,16,-29}, -{60,16,-28}, -{60,16,-27}, -{60,16,-26}, -{60,16,-25}, -{60,16,-24}, -{60,16,-23}, -{60,16,-22}, -{60,16,-21}, -{60,16,-20}, -{60,16,-19}, -{60,16,-18}, -{60,16,-17}, -{60,16,-16}, -{60,16,-15}, -{60,16,-14}, -{60,16,-13}, -{60,16,-12}, -{60,16,-11}, -{60,16,-10}, -{60,16,-9}, -{60,16,-8}, -{60,16,-7}, -{60,16,-6}, -{60,16,-5}, -{60,16,-4}, -{60,16,-3}, -{60,16,-2}, -{60,16,-1}, -{60,16,0}, -{60,16,1}, -{60,16,2}, -{60,16,3}, -{60,16,4}, -{60,16,5}, -{60,16,6}, -{60,16,7}, -{60,16,8}, -{60,16,9}, -{60,16,10}, -{60,16,11}, -{60,16,12}, -{60,16,13}, -{60,16,14}, -{60,16,15}, -{60,16,16}, -{60,16,17}, -{60,16,18}, -{60,16,19}, -{60,16,20}, -{60,16,21}, -{60,16,22}, -{60,16,23}, -{60,16,24}, -{60,16,25}, -{60,16,26}, -{60,16,27}, -{60,16,28}, -{60,16,29}, -{60,16,30}, -{60,16,31}, -{60,16,32}, -{60,16,33}, -{60,16,34}, -{60,16,35}, -{60,16,36}, -{60,16,37}, -{60,16,38}, -{60,16,39}, -{60,16,40}, -{60,16,41}, -{60,16,42}, -{60,16,43}, -{60,16,44}, -{60,16,45}, -{60,16,46}, -{60,16,47}, -{60,16,48}, -{60,16,49}, -{60,16,50}, -{60,16,51}, -{60,16,52}, -{60,16,53}, -{60,16,54}, -{60,16,55}, -{60,16,56}, -{60,16,57}, -{60,16,58}, -{60,16,59}, -{60,16,60}, -{60,16,61}, -{60,16,62}, -{60,16,63}, -{60,16,64}, -{60,16,65}, -{60,17,-62}, -{60,17,-61}, -{60,17,-60}, -{60,17,-59}, -{60,17,-58}, -{60,17,-57}, -{60,17,-56}, -{60,17,-55}, -{60,17,-54}, -{60,17,-53}, -{60,17,-52}, -{60,17,-51}, -{60,17,-50}, -{60,17,-49}, -{60,17,-48}, -{60,17,-47}, -{60,17,-46}, -{60,17,-45}, -{60,17,-44}, -{60,17,-43}, -{60,17,-42}, -{60,17,-41}, -{60,17,-40}, -{60,17,-39}, -{60,17,-38}, -{60,17,-37}, -{60,17,-36}, -{60,17,-35}, -{60,17,-34}, -{60,17,-33}, -{60,17,-32}, -{60,17,-31}, -{60,17,-30}, -{60,17,-29}, -{60,17,-28}, -{60,17,-27}, -{60,17,-26}, -{60,17,-25}, -{60,17,-24}, -{60,17,-23}, -{60,17,-22}, -{60,17,-21}, -{60,17,-20}, -{60,17,-19}, -{60,17,-18}, -{60,17,-17}, -{60,17,-16}, -{60,17,-15}, -{60,17,-14}, -{60,17,-13}, -{60,17,-12}, -{60,17,-11}, -{60,17,-10}, -{60,17,-9}, -{60,17,-8}, -{60,17,-7}, -{60,17,-6}, -{60,17,-5}, -{60,17,-4}, -{60,17,-3}, -{60,17,-2}, -{60,17,-1}, -{60,17,0}, -{60,17,1}, -{60,17,2}, -{60,17,3}, -{60,17,4}, -{60,17,5}, -{60,17,6}, -{60,17,7}, -{60,17,8}, -{60,17,9}, -{60,17,10}, -{60,17,11}, -{60,17,12}, -{60,17,13}, -{60,17,14}, -{60,17,15}, -{60,17,16}, -{60,17,17}, -{60,17,18}, -{60,17,19}, -{60,17,20}, -{60,17,21}, -{60,17,22}, -{60,17,23}, -{60,17,24}, -{60,17,25}, -{60,17,26}, -{60,17,27}, -{60,17,28}, -{60,17,29}, -{60,17,30}, -{60,17,31}, -{60,17,32}, -{60,17,33}, -{60,17,34}, -{60,17,35}, -{60,17,36}, -{60,17,37}, -{60,17,38}, -{60,17,39}, -{60,17,40}, -{60,17,41}, -{60,17,42}, -{60,17,43}, -{60,17,44}, -{60,17,45}, -{60,17,46}, -{60,17,47}, -{60,17,48}, -{60,17,49}, -{60,17,50}, -{60,17,51}, -{60,17,52}, -{60,17,53}, -{60,17,54}, -{60,17,55}, -{60,17,56}, -{60,17,57}, -{60,17,58}, -{60,17,59}, -{60,17,60}, -{60,17,61}, -{60,17,62}, -{60,17,63}, -{60,17,64}, -{60,17,65}, -{60,18,-62}, -{60,18,-61}, -{60,18,-60}, -{60,18,-59}, -{60,18,-58}, -{60,18,-57}, -{60,18,-56}, -{60,18,-55}, -{60,18,-54}, -{60,18,-53}, -{60,18,-52}, -{60,18,-51}, -{60,18,-50}, -{60,18,-49}, -{60,18,-48}, -{60,18,-47}, -{60,18,-46}, -{60,18,-45}, -{60,18,-44}, -{60,18,-43}, -{60,18,-42}, -{60,18,-41}, -{60,18,-40}, -{60,18,-39}, -{60,18,-38}, -{60,18,-37}, -{60,18,-36}, -{60,18,-35}, -{60,18,-34}, -{60,18,-33}, -{60,18,-32}, -{60,18,-31}, -{60,18,-30}, -{60,18,-29}, -{60,18,-28}, -{60,18,-27}, -{60,18,-26}, -{60,18,-25}, -{60,18,-24}, -{60,18,-23}, -{60,18,-22}, -{60,18,-21}, -{60,18,-20}, -{60,18,-19}, -{60,18,-18}, -{60,18,-17}, -{60,18,-16}, -{60,18,-15}, -{60,18,-14}, -{60,18,-13}, -{60,18,-12}, -{60,18,-11}, -{60,18,-10}, -{60,18,-9}, -{60,18,-8}, -{60,18,-7}, -{60,18,-6}, -{60,18,-5}, -{60,18,-4}, -{60,18,-3}, -{60,18,-2}, -{60,18,-1}, -{60,18,0}, -{60,18,1}, -{60,18,2}, -{60,18,3}, -{60,18,4}, -{60,18,5}, -{60,18,6}, -{60,18,7}, -{60,18,8}, -{60,18,9}, -{60,18,10}, -{60,18,11}, -{60,18,12}, -{60,18,13}, -{60,18,14}, -{60,18,15}, -{60,18,16}, -{60,18,17}, -{60,18,18}, -{60,18,19}, -{60,18,20}, -{60,18,21}, -{60,18,22}, -{60,18,23}, -{60,18,24}, -{60,18,25}, -{60,18,26}, -{60,18,27}, -{60,18,28}, -{60,18,29}, -{60,18,30}, -{60,18,31}, -{60,18,32}, -{60,18,33}, -{60,18,34}, -{60,18,35}, -{60,18,36}, -{60,18,37}, -{60,18,38}, -{60,18,39}, -{60,18,40}, -{60,18,41}, -{60,18,42}, -{60,18,43}, -{60,18,44}, -{60,18,45}, -{60,18,46}, -{60,18,47}, -{60,18,48}, -{60,18,49}, -{60,18,50}, -{60,18,51}, -{60,18,52}, -{60,18,53}, -{60,18,54}, -{60,18,55}, -{60,18,56}, -{60,18,57}, -{60,18,58}, -{60,18,59}, -{60,18,60}, -{60,18,61}, -{60,18,62}, -{60,18,63}, -{60,18,64}, -{60,18,65}, -{60,18,66}, -{60,19,-62}, -{60,19,-61}, -{60,19,-60}, -{60,19,-59}, -{60,19,-58}, -{60,19,-57}, -{60,19,-56}, -{60,19,-55}, -{60,19,-54}, -{60,19,-53}, -{60,19,-52}, -{60,19,-51}, -{60,19,-50}, -{60,19,-49}, -{60,19,-48}, -{60,19,-47}, -{60,19,-46}, -{60,19,-45}, -{60,19,-44}, -{60,19,-43}, -{60,19,-42}, -{60,19,-41}, -{60,19,-40}, -{60,19,-39}, -{60,19,-38}, -{60,19,-37}, -{60,19,-36}, -{60,19,-35}, -{60,19,-34}, -{60,19,-33}, -{60,19,-32}, -{60,19,-31}, -{60,19,-30}, -{60,19,-29}, -{60,19,-28}, -{60,19,-27}, -{60,19,-26}, -{60,19,-25}, -{60,19,-24}, -{60,19,-23}, -{60,19,-22}, -{60,19,-21}, -{60,19,-20}, -{60,19,-19}, -{60,19,-18}, -{60,19,-17}, -{60,19,-16}, -{60,19,-15}, -{60,19,-14}, -{60,19,-13}, -{60,19,-12}, -{60,19,-11}, -{60,19,-10}, -{60,19,-9}, -{60,19,-8}, -{60,19,-7}, -{60,19,-6}, -{60,19,-5}, -{60,19,-4}, -{60,19,-3}, -{60,19,-2}, -{60,19,-1}, -{60,19,0}, -{60,19,1}, -{60,19,2}, -{60,19,3}, -{60,19,4}, -{60,19,5}, -{60,19,6}, -{60,19,7}, -{60,19,8}, -{60,19,9}, -{60,19,10}, -{60,19,11}, -{60,19,12}, -{60,19,13}, -{60,19,14}, -{60,19,15}, -{60,19,16}, -{60,19,17}, -{60,19,18}, -{60,19,19}, -{60,19,20}, -{60,19,21}, -{60,19,22}, -{60,19,23}, -{60,19,24}, -{60,19,25}, -{60,19,26}, -{60,19,27}, -{60,19,28}, -{60,19,29}, -{60,19,30}, -{60,19,31}, -{60,19,32}, -{60,19,33}, -{60,19,34}, -{60,19,35}, -{60,19,36}, -{60,19,37}, -{60,19,38}, -{60,19,39}, -{60,19,40}, -{60,19,41}, -{60,19,42}, -{60,19,43}, -{60,19,44}, -{60,19,45}, -{60,19,46}, -{60,19,47}, -{60,19,48}, -{60,19,49}, -{60,19,50}, -{60,19,51}, -{60,19,52}, -{60,19,53}, -{60,19,54}, -{60,19,55}, -{60,19,56}, -{60,19,57}, -{60,19,58}, -{60,19,59}, -{60,19,60}, -{60,19,61}, -{60,19,62}, -{60,19,63}, -{60,19,64}, -{60,19,65}, -{60,19,66}, -{60,20,-62}, -{60,20,-61}, -{60,20,-60}, -{60,20,-59}, -{60,20,-58}, -{60,20,-57}, -{60,20,-56}, -{60,20,-55}, -{60,20,-54}, -{60,20,-53}, -{60,20,-52}, -{60,20,-51}, -{60,20,-50}, -{60,20,-49}, -{60,20,-48}, -{60,20,-47}, -{60,20,-46}, -{60,20,-45}, -{60,20,-44}, -{60,20,-43}, -{60,20,-42}, -{60,20,-41}, -{60,20,-40}, -{60,20,-39}, -{60,20,-38}, -{60,20,-37}, -{60,20,-36}, -{60,20,-35}, -{60,20,-34}, -{60,20,-33}, -{60,20,-32}, -{60,20,-31}, -{60,20,-30}, -{60,20,-29}, -{60,20,-28}, -{60,20,-27}, -{60,20,-26}, -{60,20,-25}, -{60,20,-24}, -{60,20,-23}, -{60,20,-22}, -{60,20,-21}, -{60,20,-20}, -{60,20,-19}, -{60,20,-18}, -{60,20,-17}, -{60,20,-16}, -{60,20,-15}, -{60,20,-14}, -{60,20,-13}, -{60,20,-12}, -{60,20,-11}, -{60,20,-10}, -{60,20,-9}, -{60,20,-8}, -{60,20,-7}, -{60,20,-6}, -{60,20,-5}, -{60,20,-4}, -{60,20,-3}, -{60,20,-2}, -{60,20,-1}, -{60,20,0}, -{60,20,1}, -{60,20,2}, -{60,20,3}, -{60,20,4}, -{60,20,5}, -{60,20,6}, -{60,20,7}, -{60,20,8}, -{60,20,9}, -{60,20,10}, -{60,20,11}, -{60,20,12}, -{60,20,13}, -{60,20,14}, -{60,20,15}, -{60,20,16}, -{60,20,17}, -{60,20,18}, -{60,20,19}, -{60,20,20}, -{60,20,21}, -{60,20,22}, -{60,20,23}, -{60,20,24}, -{60,20,25}, -{60,20,26}, -{60,20,27}, -{60,20,28}, -{60,20,29}, -{60,20,30}, -{60,20,31}, -{60,20,32}, -{60,20,33}, -{60,20,34}, -{60,20,35}, -{60,20,36}, -{60,20,37}, -{60,20,38}, -{60,20,39}, -{60,20,40}, -{60,20,41}, -{60,20,42}, -{60,20,43}, -{60,20,44}, -{60,20,45}, -{60,20,46}, -{60,20,47}, -{60,20,48}, -{60,20,49}, -{60,20,50}, -{60,20,51}, -{60,20,52}, -{60,20,53}, -{60,20,54}, -{60,20,55}, -{60,20,56}, -{60,20,57}, -{60,20,58}, -{60,20,59}, -{60,20,60}, -{60,20,61}, -{60,20,62}, -{60,20,63}, -{60,20,64}, -{60,20,65}, -{60,20,66}, -{60,21,-62}, -{60,21,-61}, -{60,21,-60}, -{60,21,-59}, -{60,21,-58}, -{60,21,-57}, -{60,21,-56}, -{60,21,-55}, -{60,21,-54}, -{60,21,-53}, -{60,21,-52}, -{60,21,-51}, -{60,21,-50}, -{60,21,-49}, -{60,21,-48}, -{60,21,-47}, -{60,21,-46}, -{60,21,-45}, -{60,21,-44}, -{60,21,-43}, -{60,21,-42}, -{60,21,-41}, -{60,21,-40}, -{60,21,-39}, -{60,21,-38}, -{60,21,-37}, -{60,21,-36}, -{60,21,-35}, -{60,21,-34}, -{60,21,-33}, -{60,21,-32}, -{60,21,-31}, -{60,21,-30}, -{60,21,-29}, -{60,21,-28}, -{60,21,-27}, -{60,21,-26}, -{60,21,-25}, -{60,21,-24}, -{60,21,-23}, -{60,21,-22}, -{60,21,-21}, -{60,21,-20}, -{60,21,-19}, -{60,21,-18}, -{60,21,-17}, -{60,21,-16}, -{60,21,-15}, -{60,21,-14}, -{60,21,-13}, -{60,21,-12}, -{60,21,-11}, -{60,21,-10}, -{60,21,-9}, -{60,21,-8}, -{60,21,-7}, -{60,21,-6}, -{60,21,-5}, -{60,21,-4}, -{60,21,-3}, -{60,21,-2}, -{60,21,-1}, -{60,21,0}, -{60,21,1}, -{60,21,2}, -{60,21,3}, -{60,21,4}, -{60,21,5}, -{60,21,6}, -{60,21,7}, -{60,21,8}, -{60,21,9}, -{60,21,10}, -{60,21,11}, -{60,21,12}, -{60,21,13}, -{60,21,14}, -{60,21,15}, -{60,21,16}, -{60,21,17}, -{60,21,18}, -{60,21,19}, -{60,21,20}, -{60,21,21}, -{60,21,22}, -{60,21,23}, -{60,21,24}, -{60,21,25}, -{60,21,26}, -{60,21,27}, -{60,21,28}, -{60,21,29}, -{60,21,30}, -{60,21,31}, -{60,21,32}, -{60,21,33}, -{60,21,34}, -{60,21,35}, -{60,21,36}, -{60,21,37}, -{60,21,38}, -{60,21,39}, -{60,21,40}, -{60,21,41}, -{60,21,42}, -{60,21,43}, -{60,21,44}, -{60,21,45}, -{60,21,46}, -{60,21,47}, -{60,21,48}, -{60,21,49}, -{60,21,50}, -{60,21,51}, -{60,21,52}, -{60,21,53}, -{60,21,54}, -{60,21,55}, -{60,21,56}, -{60,21,57}, -{60,21,58}, -{60,21,59}, -{60,21,60}, -{60,21,61}, -{60,21,62}, -{60,21,63}, -{60,21,64}, -{60,21,65}, -{60,21,66}, -{60,22,-62}, -{60,22,-61}, -{60,22,-60}, -{60,22,-59}, -{60,22,-58}, -{60,22,-57}, -{60,22,-56}, -{60,22,-55}, -{60,22,-54}, -{60,22,-53}, -{60,22,-52}, -{60,22,-51}, -{60,22,-50}, -{60,22,-49}, -{60,22,-48}, -{60,22,-47}, -{60,22,-46}, -{60,22,-45}, -{60,22,-44}, -{60,22,-43}, -{60,22,-42}, -{60,22,-41}, -{60,22,-40}, -{60,22,-39}, -{60,22,-38}, -{60,22,-37}, -{60,22,-36}, -{60,22,-35}, -{60,22,-34}, -{60,22,-33}, -{60,22,-32}, -{60,22,-31}, -{60,22,-30}, -{60,22,-29}, -{60,22,-28}, -{60,22,-27}, -{60,22,-26}, -{60,22,-25}, -{60,22,-24}, -{60,22,-23}, -{60,22,-22}, -{60,22,-21}, -{60,22,-20}, -{60,22,-19}, -{60,22,-18}, -{60,22,-17}, -{60,22,-16}, -{60,22,-15}, -{60,22,-14}, -{60,22,-13}, -{60,22,-12}, -{60,22,-11}, -{60,22,-10}, -{60,22,-9}, -{60,22,-8}, -{60,22,-7}, -{60,22,-6}, -{60,22,-5}, -{60,22,-4}, -{60,22,-3}, -{60,22,-2}, -{60,22,-1}, -{60,22,0}, -{60,22,1}, -{60,22,2}, -{60,22,3}, -{60,22,4}, -{60,22,5}, -{60,22,6}, -{60,22,7}, -{60,22,8}, -{60,22,9}, -{60,22,10}, -{60,22,11}, -{60,22,12}, -{60,22,13}, -{60,22,14}, -{60,22,15}, -{60,22,16}, -{60,22,17}, -{60,22,18}, -{60,22,19}, -{60,22,20}, -{60,22,21}, -{60,22,22}, -{60,22,23}, -{60,22,24}, -{60,22,25}, -{60,22,26}, -{60,22,27}, -{60,22,28}, -{60,22,29}, -{60,22,30}, -{60,22,31}, -{60,22,32}, -{60,22,33}, -{60,22,34}, -{60,22,35}, -{60,22,36}, -{60,22,37}, -{60,22,38}, -{60,22,39}, -{60,22,40}, -{60,22,41}, -{60,22,42}, -{60,22,43}, -{60,22,44}, -{60,22,45}, -{60,22,46}, -{60,22,47}, -{60,22,48}, -{60,22,49}, -{60,22,50}, -{60,22,51}, -{60,22,52}, -{60,22,53}, -{60,22,54}, -{60,22,55}, -{60,22,56}, -{60,22,57}, -{60,22,58}, -{60,22,59}, -{60,22,60}, -{60,22,61}, -{60,22,62}, -{60,22,63}, -{60,22,64}, -{60,22,65}, -{60,22,66}, -{60,23,-62}, -{60,23,-61}, -{60,23,-60}, -{60,23,-59}, -{60,23,-58}, -{60,23,-57}, -{60,23,-56}, -{60,23,-55}, -{60,23,-54}, -{60,23,-53}, -{60,23,-52}, -{60,23,-51}, -{60,23,-50}, -{60,23,-49}, -{60,23,-48}, -{60,23,-47}, -{60,23,-46}, -{60,23,-45}, -{60,23,-44}, -{60,23,-43}, -{60,23,-42}, -{60,23,-41}, -{60,23,-40}, -{60,23,-39}, -{60,23,-38}, -{60,23,-37}, -{60,23,-36}, -{60,23,-35}, -{60,23,-34}, -{60,23,-33}, -{60,23,-32}, -{60,23,-31}, -{60,23,-30}, -{60,23,-29}, -{60,23,-28}, -{60,23,-27}, -{60,23,-26}, -{60,23,-25}, -{60,23,-24}, -{60,23,-23}, -{60,23,-22}, -{60,23,-21}, -{60,23,-20}, -{60,23,-19}, -{60,23,-18}, -{60,23,-17}, -{60,23,-16}, -{60,23,-15}, -{60,23,-14}, -{60,23,-13}, -{60,23,-12}, -{60,23,-11}, -{60,23,-10}, -{60,23,-9}, -{60,23,-8}, -{60,23,-7}, -{60,23,-6}, -{60,23,-5}, -{60,23,-4}, -{60,23,-3}, -{60,23,-2}, -{60,23,-1}, -{60,23,0}, -{60,23,1}, -{60,23,2}, -{60,23,3}, -{60,23,4}, -{60,23,5}, -{60,23,6}, -{60,23,7}, -{60,23,8}, -{60,23,9}, -{60,23,10}, -{60,23,11}, -{60,23,12}, -{60,23,13}, -{60,23,14}, -{60,23,15}, -{60,23,16}, -{60,23,17}, -{60,23,18}, -{60,23,19}, -{60,23,20}, -{60,23,21}, -{60,23,22}, -{60,23,23}, -{60,23,24}, -{60,23,25}, -{60,23,26}, -{60,23,27}, -{60,23,28}, -{60,23,29}, -{60,23,30}, -{60,23,31}, -{60,23,32}, -{60,23,33}, -{60,23,34}, -{60,23,35}, -{60,23,36}, -{60,23,37}, -{60,23,38}, -{60,23,39}, -{60,23,40}, -{60,23,41}, -{60,23,42}, -{60,23,43}, -{60,23,44}, -{60,23,45}, -{60,23,46}, -{60,23,47}, -{60,23,48}, -{60,23,49}, -{60,23,50}, -{60,23,51}, -{60,23,52}, -{60,23,53}, -{60,23,54}, -{60,23,55}, -{60,23,56}, -{60,23,57}, -{60,23,58}, -{60,23,59}, -{60,23,60}, -{60,23,61}, -{60,23,62}, -{60,23,63}, -{60,23,64}, -{60,23,65}, -{60,23,66}, -{60,24,-62}, -{60,24,-61}, -{60,24,-60}, -{60,24,-59}, -{60,24,-58}, -{60,24,-57}, -{60,24,-56}, -{60,24,-55}, -{60,24,-54}, -{60,24,-53}, -{60,24,-52}, -{60,24,-51}, -{60,24,-50}, -{60,24,-49}, -{60,24,-48}, -{60,24,-47}, -{60,24,-46}, -{60,24,-45}, -{60,24,-44}, -{60,24,-43}, -{60,24,-42}, -{60,24,-41}, -{60,24,-40}, -{60,24,-39}, -{60,24,-38}, -{60,24,-37}, -{60,24,-36}, -{60,24,-35}, -{60,24,-34}, -{60,24,-33}, -{60,24,-32}, -{60,24,-31}, -{60,24,-30}, -{60,24,-29}, -{60,24,-28}, -{60,24,-27}, -{60,24,-26}, -{60,24,-25}, -{60,24,-24}, -{60,24,-23}, -{60,24,-22}, -{60,24,-21}, -{60,24,-20}, -{60,24,-19}, -{60,24,-18}, -{60,24,-17}, -{60,24,-16}, -{60,24,-15}, -{60,24,-14}, -{60,24,-13}, -{60,24,-12}, -{60,24,-11}, -{60,24,-10}, -{60,24,-9}, -{60,24,-8}, -{60,24,-7}, -{60,24,-6}, -{60,24,-5}, -{60,24,-4}, -{60,24,-3}, -{60,24,-2}, -{60,24,-1}, -{60,24,0}, -{60,24,1}, -{60,24,2}, -{60,24,3}, -{60,24,4}, -{60,24,5}, -{60,24,6}, -{60,24,7}, -{60,24,8}, -{60,24,9}, -{60,24,10}, -{60,24,11}, -{60,24,12}, -{60,24,13}, -{60,24,14}, -{60,24,15}, -{60,24,16}, -{60,24,17}, -{60,24,18}, -{60,24,19}, -{60,24,20}, -{60,24,21}, -{60,24,22}, -{60,24,23}, -{60,24,24}, -{60,24,25}, -{60,24,26}, -{60,24,27}, -{60,24,28}, -{60,24,29}, -{60,24,30}, -{60,24,31}, -{60,24,32}, -{60,24,33}, -{60,24,34}, -{60,24,35}, -{60,24,36}, -{60,24,37}, -{60,24,38}, -{60,24,39}, -{60,24,40}, -{60,24,41}, -{60,24,42}, -{60,24,43}, -{60,24,44}, -{60,24,45}, -{60,24,46}, -{60,24,47}, -{60,24,48}, -{60,24,49}, -{60,24,50}, -{60,24,51}, -{60,24,52}, -{60,24,53}, -{60,24,54}, -{60,24,55}, -{60,24,56}, -{60,24,57}, -{60,24,58}, -{60,24,59}, -{60,24,60}, -{60,24,61}, -{60,24,62}, -{60,24,63}, -{60,24,64}, -{60,24,65}, -{60,24,66}, -{60,25,-62}, -{60,25,-61}, -{60,25,-60}, -{60,25,-59}, -{60,25,-58}, -{60,25,-57}, -{60,25,-56}, -{60,25,-55}, -{60,25,-54}, -{60,25,-53}, -{60,25,-52}, -{60,25,-51}, -{60,25,-50}, -{60,25,-49}, -{60,25,-48}, -{60,25,-47}, -{60,25,-46}, -{60,25,-45}, -{60,25,-44}, -{60,25,-43}, -{60,25,-42}, -{60,25,-41}, -{60,25,-40}, -{60,25,-39}, -{60,25,-38}, -{60,25,-37}, -{60,25,-36}, -{60,25,-35}, -{60,25,-34}, -{60,25,-33}, -{60,25,-32}, -{60,25,-31}, -{60,25,-30}, -{60,25,-29}, -{60,25,-28}, -{60,25,-27}, -{60,25,-26}, -{60,25,-25}, -{60,25,-24}, -{60,25,-23}, -{60,25,-22}, -{60,25,-21}, -{60,25,-20}, -{60,25,-19}, -{60,25,-18}, -{60,25,-17}, -{60,25,-16}, -{60,25,-15}, -{60,25,-14}, -{60,25,-13}, -{60,25,-12}, -{60,25,-11}, -{60,25,-10}, -{60,25,-9}, -{60,25,-8}, -{60,25,-7}, -{60,25,-6}, -{60,25,-5}, -{60,25,-4}, -{60,25,-3}, -{60,25,-2}, -{60,25,-1}, -{60,25,0}, -{60,25,1}, -{60,25,2}, -{60,25,3}, -{60,25,4}, -{60,25,5}, -{60,25,6}, -{60,25,7}, -{60,25,8}, -{60,25,9}, -{60,25,10}, -{60,25,11}, -{60,25,12}, -{60,25,13}, -{60,25,14}, -{60,25,15}, -{60,25,16}, -{60,25,17}, -{60,25,18}, -{60,25,19}, -{60,25,20}, -{60,25,21}, -{60,25,22}, -{60,25,23}, -{60,25,24}, -{60,25,25}, -{60,25,26}, -{60,25,27}, -{60,25,28}, -{60,25,29}, -{60,25,30}, -{60,25,31}, -{60,25,32}, -{60,25,33}, -{60,25,34}, -{60,25,35}, -{60,25,36}, -{60,25,37}, -{60,25,38}, -{60,25,39}, -{60,25,40}, -{60,25,41}, -{60,25,42}, -{60,25,43}, -{60,25,44}, -{60,25,45}, -{60,25,46}, -{60,25,47}, -{60,25,48}, -{60,25,49}, -{60,25,50}, -{60,25,51}, -{60,25,52}, -{60,25,53}, -{60,25,54}, -{60,25,55}, -{60,25,56}, -{60,25,57}, -{60,25,58}, -{60,25,59}, -{60,25,60}, -{60,25,61}, -{60,25,62}, -{60,25,63}, -{60,25,64}, -{60,25,65}, -{60,25,66}, -{60,26,-62}, -{60,26,-61}, -{60,26,-60}, -{60,26,-59}, -{60,26,-58}, -{60,26,-57}, -{60,26,-56}, -{60,26,-55}, -{60,26,-54}, -{60,26,-53}, -{60,26,-52}, -{60,26,-51}, -{60,26,-50}, -{60,26,-49}, -{60,26,-48}, -{60,26,-47}, -{60,26,-46}, -{60,26,-45}, -{60,26,-44}, -{60,26,-43}, -{60,26,-42}, -{60,26,-41}, -{60,26,-40}, -{60,26,-39}, -{60,26,-38}, -{60,26,-37}, -{60,26,-36}, -{60,26,-35}, -{60,26,-34}, -{60,26,-33}, -{60,26,-32}, -{60,26,-31}, -{60,26,-30}, -{60,26,-29}, -{60,26,-28}, -{60,26,-27}, -{60,26,-26}, -{60,26,-25}, -{60,26,-24}, -{60,26,-23}, -{60,26,-22}, -{60,26,-21}, -{60,26,-20}, -{60,26,-19}, -{60,26,-18}, -{60,26,-17}, -{60,26,-16}, -{60,26,-15}, -{60,26,-14}, -{60,26,-13}, -{60,26,-12}, -{60,26,-11}, -{60,26,-10}, -{60,26,-9}, -{60,26,-8}, -{60,26,-7}, -{60,26,-6}, -{60,26,-5}, -{60,26,-4}, -{60,26,-3}, -{60,26,-2}, -{60,26,-1}, -{60,26,0}, -{60,26,1}, -{60,26,2}, -{60,26,3}, -{60,26,4}, -{60,26,5}, -{60,26,6}, -{60,26,7}, -{60,26,8}, -{60,26,9}, -{60,26,10}, -{60,26,11}, -{60,26,12}, -{60,26,13}, -{60,26,14}, -{60,26,15}, -{60,26,16}, -{60,26,17}, -{60,26,18}, -{60,26,19}, -{60,26,20}, -{60,26,21}, -{60,26,22}, -{60,26,23}, -{60,26,24}, -{60,26,25}, -{60,26,26}, -{60,26,27}, -{60,26,28}, -{60,26,29}, -{60,26,30}, -{60,26,31}, -{60,26,32}, -{60,26,33}, -{60,26,34}, -{60,26,35}, -{60,26,36}, -{60,26,37}, -{60,26,38}, -{60,26,39}, -{60,26,40}, -{60,26,41}, -{60,26,42}, -{60,26,43}, -{60,26,44}, -{60,26,45}, -{60,26,46}, -{60,26,47}, -{60,26,48}, -{60,26,49}, -{60,26,50}, -{60,26,51}, -{60,26,52}, -{60,26,53}, -{60,26,54}, -{60,26,55}, -{60,26,56}, -{60,26,57}, -{60,26,58}, -{60,26,59}, -{60,26,60}, -{60,26,61}, -{60,26,62}, -{60,26,63}, -{60,26,64}, -{60,26,65}, -{60,26,66}, -{60,27,-62}, -{60,27,-61}, -{60,27,-60}, -{60,27,-59}, -{60,27,-58}, -{60,27,-57}, -{60,27,-56}, -{60,27,-55}, -{60,27,-54}, -{60,27,-53}, -{60,27,-52}, -{60,27,-51}, -{60,27,-50}, -{60,27,-49}, -{60,27,-48}, -{60,27,-47}, -{60,27,-46}, -{60,27,-45}, -{60,27,-44}, -{60,27,-43}, -{60,27,-42}, -{60,27,-41}, -{60,27,-40}, -{60,27,-39}, -{60,27,-38}, -{60,27,-37}, -{60,27,-36}, -{60,27,-35}, -{60,27,-34}, -{60,27,-33}, -{60,27,-32}, -{60,27,-31}, -{60,27,-30}, -{60,27,-29}, -{60,27,-28}, -{60,27,-27}, -{60,27,-26}, -{60,27,-25}, -{60,27,-24}, -{60,27,-23}, -{60,27,-22}, -{60,27,-21}, -{60,27,-20}, -{60,27,-19}, -{60,27,-18}, -{60,27,-17}, -{60,27,-16}, -{60,27,-15}, -{60,27,-14}, -{60,27,-13}, -{60,27,-12}, -{60,27,-11}, -{60,27,-10}, -{60,27,-9}, -{60,27,-8}, -{60,27,-7}, -{60,27,-6}, -{60,27,-5}, -{60,27,-4}, -{60,27,-3}, -{60,27,-2}, -{60,27,-1}, -{60,27,0}, -{60,27,1}, -{60,27,2}, -{60,27,3}, -{60,27,4}, -{60,27,5}, -{60,27,6}, -{60,27,7}, -{60,27,8}, -{60,27,9}, -{60,27,10}, -{60,27,11}, -{60,27,12}, -{60,27,13}, -{60,27,14}, -{60,27,15}, -{60,27,16}, -{60,27,17}, -{60,27,18}, -{60,27,19}, -{60,27,20}, -{60,27,21}, -{60,27,22}, -{60,27,23}, -{60,27,24}, -{60,27,25}, -{60,27,26}, -{60,27,27}, -{60,27,28}, -{60,27,29}, -{60,27,30}, -{60,27,31}, -{60,27,32}, -{60,27,33}, -{60,27,34}, -{60,27,35}, -{60,27,36}, -{60,27,37}, -{60,27,38}, -{60,27,39}, -{60,27,40}, -{60,27,41}, -{60,27,42}, -{60,27,43}, -{60,27,44}, -{60,27,45}, -{60,27,46}, -{60,27,47}, -{60,27,48}, -{60,27,49}, -{60,27,50}, -{60,27,51}, -{60,27,52}, -{60,27,53}, -{60,27,54}, -{60,27,55}, -{60,27,56}, -{60,27,57}, -{60,27,58}, -{60,27,59}, -{60,27,60}, -{60,27,61}, -{60,27,62}, -{60,27,63}, -{60,27,64}, -{60,27,65}, -{60,27,66}, -{60,28,-62}, -{60,28,-61}, -{60,28,-60}, -{60,28,-59}, -{60,28,-58}, -{60,28,-57}, -{60,28,-56}, -{60,28,-55}, -{60,28,-54}, -{60,28,-53}, -{60,28,-52}, -{60,28,-51}, -{60,28,-50}, -{60,28,-49}, -{60,28,-48}, -{60,28,-47}, -{60,28,-46}, -{60,28,-45}, -{60,28,-44}, -{60,28,-43}, -{60,28,-42}, -{60,28,-41}, -{60,28,-40}, -{60,28,-39}, -{60,28,-38}, -{60,28,-37}, -{60,28,-36}, -{60,28,-35}, -{60,28,-34}, -{60,28,-33}, -{60,28,-32}, -{60,28,-31}, -{60,28,-30}, -{60,28,-29}, -{60,28,-28}, -{60,28,-27}, -{60,28,-26}, -{60,28,-25}, -{60,28,-24}, -{60,28,-23}, -{60,28,-22}, -{60,28,-21}, -{60,28,-20}, -{60,28,-19}, -{60,28,-18}, -{60,28,-17}, -{60,28,-16}, -{60,28,-15}, -{60,28,-14}, -{60,28,-13}, -{60,28,-12}, -{60,28,-11}, -{60,28,-10}, -{60,28,-9}, -{60,28,-8}, -{60,28,-7}, -{60,28,-6}, -{60,28,-5}, -{60,28,-4}, -{60,28,-3}, -{60,28,-2}, -{60,28,-1}, -{60,28,0}, -{60,28,1}, -{60,28,2}, -{60,28,3}, -{60,28,4}, -{60,28,5}, -{60,28,6}, -{60,28,7}, -{60,28,8}, -{60,28,9}, -{60,28,10}, -{60,28,11}, -{60,28,12}, -{60,28,13}, -{60,28,14}, -{60,28,15}, -{60,28,16}, -{60,28,17}, -{60,28,18}, -{60,28,19}, -{60,28,20}, -{60,28,21}, -{60,28,22}, -{60,28,23}, -{60,28,24}, -{60,28,25}, -{60,28,26}, -{60,28,27}, -{60,28,28}, -{60,28,29}, -{60,28,30}, -{60,28,31}, -{60,28,32}, -{60,28,33}, -{60,28,34}, -{60,28,35}, -{60,28,36}, -{60,28,37}, -{60,28,38}, -{60,28,39}, -{60,28,40}, -{60,28,41}, -{60,28,42}, -{60,28,43}, -{60,28,44}, -{60,28,45}, -{60,28,46}, -{60,28,47}, -{60,28,48}, -{60,28,49}, -{60,28,50}, -{60,28,51}, -{60,28,52}, -{60,28,53}, -{60,28,54}, -{60,28,55}, -{60,28,56}, -{60,28,57}, -{60,28,58}, -{60,28,59}, -{60,28,60}, -{60,28,61}, -{60,28,62}, -{60,28,63}, -{60,28,64}, -{60,28,65}, -{60,28,66}, -{60,29,-62}, -{60,29,-61}, -{60,29,-60}, -{60,29,-59}, -{60,29,-58}, -{60,29,-57}, -{60,29,-56}, -{60,29,-55}, -{60,29,-54}, -{60,29,-53}, -{60,29,-52}, -{60,29,-51}, -{60,29,-50}, -{60,29,-49}, -{60,29,-48}, -{60,29,-47}, -{60,29,-46}, -{60,29,-45}, -{60,29,-44}, -{60,29,-43}, -{60,29,-42}, -{60,29,-41}, -{60,29,-40}, -{60,29,-39}, -{60,29,-38}, -{60,29,-37}, -{60,29,-36}, -{60,29,-35}, -{60,29,-34}, -{60,29,-33}, -{60,29,-32}, -{60,29,-31}, -{60,29,-30}, -{60,29,-29}, -{60,29,-28}, -{60,29,-27}, -{60,29,-26}, -{60,29,-25}, -{60,29,-24}, -{60,29,-23}, -{60,29,-22}, -{60,29,-21}, -{60,29,-20}, -{60,29,-19}, -{60,29,-18}, -{60,29,-17}, -{60,29,-16}, -{60,29,-15}, -{60,29,-14}, -{60,29,-13}, -{60,29,-12}, -{60,29,-11}, -{60,29,-10}, -{60,29,-9}, -{60,29,-8}, -{60,29,-7}, -{60,29,-6}, -{60,29,-5}, -{60,29,-4}, -{60,29,-3}, -{60,29,-2}, -{60,29,-1}, -{60,29,0}, -{60,29,1}, -{60,29,2}, -{60,29,3}, -{60,29,4}, -{60,29,5}, -{60,29,6}, -{60,29,7}, -{60,29,8}, -{60,29,9}, -{60,29,10}, -{60,29,11}, -{60,29,12}, -{60,29,13}, -{60,29,14}, -{60,29,15}, -{60,29,16}, -{60,29,17}, -{60,29,18}, -{60,29,19}, -{60,29,20}, -{60,29,21}, -{60,29,22}, -{60,29,23}, -{60,29,24}, -{60,29,25}, -{60,29,26}, -{60,29,27}, -{60,29,28}, -{60,29,29}, -{60,29,30}, -{60,29,31}, -{60,29,32}, -{60,29,33}, -{60,29,34}, -{60,29,35}, -{60,29,36}, -{60,29,37}, -{60,29,38}, -{60,29,39}, -{60,29,40}, -{60,29,41}, -{60,29,42}, -{60,29,43}, -{60,29,44}, -{60,29,45}, -{60,29,46}, -{60,29,47}, -{60,29,48}, -{60,29,49}, -{60,29,50}, -{60,29,51}, -{60,29,52}, -{60,29,53}, -{60,29,54}, -{60,29,55}, -{60,29,56}, -{60,29,57}, -{60,29,58}, -{60,29,59}, -{60,29,60}, -{60,29,61}, -{60,29,62}, -{60,29,63}, -{60,29,64}, -{60,29,65}, -{60,29,66}, -{60,30,-62}, -{60,30,-61}, -{60,30,-60}, -{60,30,-59}, -{60,30,-58}, -{60,30,-57}, -{60,30,-56}, -{60,30,-55}, -{60,30,-54}, -{60,30,-53}, -{60,30,-52}, -{60,30,-51}, -{60,30,-50}, -{60,30,-49}, -{60,30,-48}, -{60,30,-47}, -{60,30,-46}, -{60,30,-45}, -{60,30,-44}, -{60,30,-43}, -{60,30,-42}, -{60,30,-41}, -{60,30,-40}, -{60,30,-39}, -{60,30,-38}, -{60,30,-37}, -{60,30,-36}, -{60,30,-35}, -{60,30,-34}, -{60,30,-33}, -{60,30,-32}, -{60,30,-31}, -{60,30,-30}, -{60,30,-29}, -{60,30,-28}, -{60,30,-27}, -{60,30,-26}, -{60,30,-25}, -{60,30,-24}, -{60,30,-23}, -{60,30,-22}, -{60,30,-21}, -{60,30,-20}, -{60,30,-19}, -{60,30,-18}, -{60,30,-17}, -{60,30,-16}, -{60,30,-15}, -{60,30,-14}, -{60,30,-13}, -{60,30,-12}, -{60,30,-11}, -{60,30,-10}, -{60,30,-9}, -{60,30,-8}, -{60,30,-7}, -{60,30,-6}, -{60,30,-5}, -{60,30,-4}, -{60,30,-3}, -{60,30,-2}, -{60,30,-1}, -{60,30,0}, -{60,30,1}, -{60,30,2}, -{60,30,3}, -{60,30,4}, -{60,30,5}, -{60,30,6}, -{60,30,7}, -{60,30,8}, -{60,30,9}, -{60,30,10}, -{60,30,11}, -{60,30,12}, -{60,30,13}, -{60,30,14}, -{60,30,15}, -{60,30,16}, -{60,30,17}, -{60,30,18}, -{60,30,19}, -{60,30,20}, -{60,30,21}, -{60,30,22}, -{60,30,23}, -{60,30,24}, -{60,30,25}, -{60,30,26}, -{60,30,27}, -{60,30,28}, -{60,30,29}, -{60,30,30}, -{60,30,31}, -{60,30,32}, -{60,30,33}, -{60,30,34}, -{60,30,35}, -{60,30,36}, -{60,30,37}, -{60,30,38}, -{60,30,39}, -{60,30,40}, -{60,30,41}, -{60,30,42}, -{60,30,43}, -{60,30,44}, -{60,30,45}, -{60,30,46}, -{60,30,47}, -{60,30,48}, -{60,30,49}, -{60,30,50}, -{60,30,51}, -{60,30,52}, -{60,30,53}, -{60,30,54}, -{60,30,55}, -{60,30,56}, -{60,30,57}, -{60,30,58}, -{60,30,59}, -{60,30,60}, -{60,30,61}, -{60,30,62}, -{60,30,63}, -{60,30,64}, -{60,30,65}, -{60,30,66}, -{60,30,67}, -{60,31,-62}, -{60,31,-61}, -{60,31,-60}, -{60,31,-59}, -{60,31,-58}, -{60,31,-57}, -{60,31,-56}, -{60,31,-55}, -{60,31,-54}, -{60,31,-53}, -{60,31,-52}, -{60,31,-51}, -{60,31,-50}, -{60,31,-49}, -{60,31,-48}, -{60,31,-47}, -{60,31,-46}, -{60,31,-45}, -{60,31,-44}, -{60,31,-43}, -{60,31,-42}, -{60,31,-41}, -{60,31,-40}, -{60,31,-39}, -{60,31,-38}, -{60,31,-37}, -{60,31,-36}, -{60,31,-35}, -{60,31,-34}, -{60,31,-33}, -{60,31,-32}, -{60,31,-31}, -{60,31,-30}, -{60,31,-29}, -{60,31,-28}, -{60,31,-27}, -{60,31,-26}, -{60,31,-25}, -{60,31,-24}, -{60,31,-23}, -{60,31,-22}, -{60,31,-21}, -{60,31,-20}, -{60,31,-19}, -{60,31,-18}, -{60,31,-17}, -{60,31,-16}, -{60,31,-15}, -{60,31,-14}, -{60,31,-13}, -{60,31,-12}, -{60,31,-11}, -{60,31,-10}, -{60,31,-9}, -{60,31,-8}, -{60,31,-7}, -{60,31,-6}, -{60,31,-5}, -{60,31,-4}, -{60,31,-3}, -{60,31,-2}, -{60,31,-1}, -{60,31,0}, -{60,31,1}, -{60,31,2}, -{60,31,3}, -{60,31,4}, -{60,31,5}, -{60,31,6}, -{60,31,7}, -{60,31,8}, -{60,31,9}, -{60,31,10}, -{60,31,11}, -{60,31,12}, -{60,31,13}, -{60,31,14}, -{60,31,15}, -{60,31,16}, -{60,31,17}, -{60,31,18}, -{60,31,19}, -{60,31,20}, -{60,31,21}, -{60,31,22}, -{60,31,23}, -{60,31,24}, -{60,31,25}, -{60,31,26}, -{60,31,27}, -{60,31,28}, -{60,31,29}, -{60,31,30}, -{60,31,31}, -{60,31,32}, -{60,31,33}, -{60,31,34}, -{60,31,35}, -{60,31,36}, -{60,31,37}, -{60,31,38}, -{60,31,39}, -{60,31,40}, -{60,31,41}, -{60,31,42}, -{60,31,43}, -{60,31,44}, -{60,31,45}, -{60,31,46}, -{60,31,47}, -{60,31,48}, -{60,31,49}, -{60,31,50}, -{60,31,51}, -{60,31,52}, -{60,31,53}, -{60,31,54}, -{60,31,55}, -{60,31,56}, -{60,31,57}, -{60,31,58}, -{60,31,59}, -{60,31,60}, -{60,31,61}, -{60,31,62}, -{60,31,63}, -{60,31,64}, -{60,31,65}, -{60,31,66}, -{60,31,67}, -{60,32,-62}, -{60,32,-61}, -{60,32,-60}, -{60,32,-59}, -{60,32,-58}, -{60,32,-57}, -{60,32,-56}, -{60,32,-55}, -{60,32,-54}, -{60,32,-53}, -{60,32,-52}, -{60,32,-51}, -{60,32,-50}, -{60,32,-49}, -{60,32,-48}, -{60,32,-47}, -{60,32,-46}, -{60,32,-45}, -{60,32,-44}, -{60,32,-43}, -{60,32,-42}, -{60,32,-41}, -{60,32,-40}, -{60,32,-39}, -{60,32,-38}, -{60,32,-37}, -{60,32,-36}, -{60,32,-35}, -{60,32,-34}, -{60,32,-33}, -{60,32,-32}, -{60,32,-31}, -{60,32,-30}, -{60,32,-29}, -{60,32,-28}, -{60,32,-27}, -{60,32,-26}, -{60,32,-25}, -{60,32,-24}, -{60,32,-23}, -{60,32,-22}, -{60,32,-21}, -{60,32,-20}, -{60,32,-19}, -{60,32,-18}, -{60,32,-17}, -{60,32,-16}, -{60,32,-15}, -{60,32,-14}, -{60,32,-13}, -{60,32,-12}, -{60,32,-11}, -{60,32,-10}, -{60,32,-9}, -{60,32,-8}, -{60,32,-7}, -{60,32,-6}, -{60,32,-5}, -{60,32,-4}, -{60,32,-3}, -{60,32,-2}, -{60,32,-1}, -{60,32,0}, -{60,32,1}, -{60,32,2}, -{60,32,3}, -{60,32,4}, -{60,32,5}, -{60,32,6}, -{60,32,7}, -{60,32,8}, -{60,32,9}, -{60,32,10}, -{60,32,11}, -{60,32,12}, -{60,32,13}, -{60,32,14}, -{60,32,15}, -{60,32,16}, -{60,32,17}, -{60,32,18}, -{60,32,19}, -{60,32,20}, -{60,32,21}, -{60,32,22}, -{60,32,23}, -{60,32,24}, -{60,32,25}, -{60,32,26}, -{60,32,27}, -{60,32,28}, -{60,32,29}, -{60,32,30}, -{60,32,31}, -{60,32,32}, -{60,32,33}, -{60,32,34}, -{60,32,35}, -{60,32,36}, -{60,32,37}, -{60,32,38}, -{60,32,39}, -{60,32,40}, -{60,32,41}, -{60,32,42}, -{60,32,43}, -{60,32,44}, -{60,32,45}, -{60,32,46}, -{60,32,47}, -{60,32,48}, -{60,32,49}, -{60,32,50}, -{60,32,51}, -{60,32,52}, -{60,32,53}, -{60,32,54}, -{60,32,55}, -{60,32,56}, -{60,32,57}, -{60,32,58}, -{60,32,59}, -{60,32,60}, -{60,32,61}, -{60,32,62}, -{60,32,63}, -{60,32,64}, -{60,32,65}, -{60,32,66}, -{60,32,67}, -{60,33,-62}, -{60,33,-61}, -{60,33,-60}, -{60,33,-59}, -{60,33,-58}, -{60,33,-57}, -{60,33,-56}, -{60,33,-55}, -{60,33,-54}, -{60,33,-53}, -{60,33,-52}, -{60,33,-51}, -{60,33,-50}, -{60,33,-49}, -{60,33,-48}, -{60,33,-47}, -{60,33,-46}, -{60,33,-45}, -{60,33,-44}, -{60,33,-43}, -{60,33,-42}, -{60,33,-41}, -{60,33,-40}, -{60,33,-39}, -{60,33,-38}, -{60,33,-37}, -{60,33,-36}, -{60,33,-35}, -{60,33,-34}, -{60,33,-33}, -{60,33,-32}, -{60,33,-31}, -{60,33,-30}, -{60,33,-29}, -{60,33,-28}, -{60,33,-27}, -{60,33,-26}, -{60,33,-25}, -{60,33,-24}, -{60,33,-23}, -{60,33,-22}, -{60,33,-21}, -{60,33,-20}, -{60,33,-19}, -{60,33,-18}, -{60,33,-17}, -{60,33,-16}, -{60,33,-15}, -{60,33,-14}, -{60,33,-13}, -{60,33,-12}, -{60,33,-11}, -{60,33,-10}, -{60,33,-9}, -{60,33,-8}, -{60,33,-7}, -{60,33,-6}, -{60,33,-5}, -{60,33,-4}, -{60,33,-3}, -{60,33,-2}, -{60,33,-1}, -{60,33,0}, -{60,33,1}, -{60,33,2}, -{60,33,3}, -{60,33,4}, -{60,33,5}, -{60,33,6}, -{60,33,7}, -{60,33,8}, -{60,33,9}, -{60,33,10}, -{60,33,11}, -{60,33,12}, -{60,33,13}, -{60,33,14}, -{60,33,15}, -{60,33,16}, -{60,33,17}, -{60,33,18}, -{60,33,19}, -{60,33,20}, -{60,33,21}, -{60,33,22}, -{60,33,23}, -{60,33,24}, -{60,33,25}, -{60,33,26}, -{60,33,27}, -{60,33,28}, -{60,33,29}, -{60,33,30}, -{60,33,31}, -{60,33,32}, -{60,33,33}, -{60,33,34}, -{60,33,35}, -{60,33,36}, -{60,33,37}, -{60,33,38}, -{60,33,39}, -{60,33,40}, -{60,33,41}, -{60,33,42}, -{60,33,43}, -{60,33,44}, -{60,33,45}, -{60,33,46}, -{60,33,47}, -{60,33,48}, -{60,33,49}, -{60,33,50}, -{60,33,51}, -{60,33,52}, -{60,33,53}, -{60,33,54}, -{60,33,55}, -{60,33,56}, -{60,33,57}, -{60,33,58}, -{60,33,59}, -{60,33,60}, -{60,33,61}, -{60,33,62}, -{60,33,63}, -{60,33,64}, -{60,33,65}, -{60,33,66}, -{60,33,67}, -{60,34,-62}, -{60,34,-61}, -{60,34,-60}, -{60,34,-59}, -{60,34,-58}, -{60,34,-57}, -{60,34,-56}, -{60,34,-55}, -{60,34,-54}, -{60,34,-53}, -{60,34,-52}, -{60,34,-51}, -{60,34,-50}, -{60,34,-49}, -{60,34,-48}, -{60,34,-47}, -{60,34,-46}, -{60,34,-45}, -{60,34,-44}, -{60,34,-43}, -{60,34,-42}, -{60,34,-41}, -{60,34,-40}, -{60,34,-39}, -{60,34,-38}, -{60,34,-37}, -{60,34,-36}, -{60,34,-35}, -{60,34,-34}, -{60,34,-33}, -{60,34,-32}, -{60,34,-31}, -{60,34,-30}, -{60,34,-29}, -{60,34,-28}, -{60,34,-27}, -{60,34,-26}, -{60,34,-25}, -{60,34,-24}, -{60,34,-23}, -{60,34,-22}, -{60,34,-21}, -{60,34,-20}, -{60,34,-19}, -{60,34,-18}, -{60,34,-17}, -{60,34,-16}, -{60,34,-15}, -{60,34,-14}, -{60,34,-13}, -{60,34,-12}, -{60,34,-11}, -{60,34,-10}, -{60,34,-9}, -{60,34,-8}, -{60,34,-7}, -{60,34,-6}, -{60,34,-5}, -{60,34,-4}, -{60,34,-3}, -{60,34,-2}, -{60,34,-1}, -{60,34,0}, -{60,34,1}, -{60,34,2}, -{60,34,3}, -{60,34,4}, -{60,34,5}, -{60,34,6}, -{60,34,7}, -{60,34,8}, -{60,34,9}, -{60,34,10}, -{60,34,11}, -{60,34,12}, -{60,34,13}, -{60,34,14}, -{60,34,15}, -{60,34,16}, -{60,34,17}, -{60,34,18}, -{60,34,19}, -{60,34,20}, -{60,34,21}, -{60,34,22}, -{60,34,23}, -{60,34,24}, -{60,34,25}, -{60,34,26}, -{60,34,27}, -{60,34,28}, -{60,34,29}, -{60,34,30}, -{60,34,31}, -{60,34,32}, -{60,34,33}, -{60,34,34}, -{60,34,35}, -{60,34,36}, -{60,34,37}, -{60,34,38}, -{60,34,39}, -{60,34,40}, -{60,34,41}, -{60,34,42}, -{60,34,43}, -{60,34,44}, -{60,34,45}, -{60,34,46}, -{60,34,47}, -{60,34,48}, -{60,34,49}, -{60,34,50}, -{60,34,51}, -{60,34,52}, -{60,34,53}, -{60,34,54}, -{60,34,55}, -{60,34,56}, -{60,34,57}, -{60,34,58}, -{60,34,59}, -{60,34,60}, -{60,34,61}, -{60,34,62}, -{60,34,63}, -{60,34,64}, -{60,34,65}, -{60,34,66}, -{60,34,67}, -{60,35,-62}, -{60,35,-61}, -{60,35,-60}, -{60,35,-59}, -{60,35,-58}, -{60,35,-57}, -{60,35,-56}, -{60,35,-55}, -{60,35,-54}, -{60,35,-53}, -{60,35,-52}, -{60,35,-51}, -{60,35,-50}, -{60,35,-49}, -{60,35,-48}, -{60,35,-47}, -{60,35,-46}, -{60,35,-45}, -{60,35,-44}, -{60,35,-43}, -{60,35,-42}, -{60,35,-41}, -{60,35,-40}, -{60,35,-39}, -{60,35,-38}, -{60,35,-37}, -{60,35,-36}, -{60,35,-35}, -{60,35,-34}, -{60,35,-33}, -{60,35,-32}, -{60,35,-31}, -{60,35,-30}, -{60,35,-29}, -{60,35,-28}, -{60,35,-27}, -{60,35,-26}, -{60,35,-25}, -{60,35,-24}, -{60,35,-23}, -{60,35,-22}, -{60,35,-21}, -{60,35,-20}, -{60,35,-19}, -{60,35,-18}, -{60,35,-17}, -{60,35,-16}, -{60,35,-15}, -{60,35,-14}, -{60,35,-13}, -{60,35,-12}, -{60,35,-11}, -{60,35,-10}, -{60,35,-9}, -{60,35,-8}, -{60,35,-7}, -{60,35,-6}, -{60,35,-5}, -{60,35,-4}, -{60,35,-3}, -{60,35,-2}, -{60,35,-1}, -{60,35,0}, -{60,35,1}, -{60,35,2}, -{60,35,3}, -{60,35,4}, -{60,35,5}, -{60,35,6}, -{60,35,7}, -{60,35,8}, -{60,35,9}, -{60,35,10}, -{60,35,11}, -{60,35,12}, -{60,35,13}, -{60,35,14}, -{60,35,15}, -{60,35,16}, -{60,35,17}, -{60,35,18}, -{60,35,19}, -{60,35,20}, -{60,35,21}, -{60,35,22}, -{60,35,23}, -{60,35,24}, -{60,35,25}, -{60,35,26}, -{60,35,27}, -{60,35,28}, -{60,35,29}, -{60,35,30}, -{60,35,31}, -{60,35,32}, -{60,35,33}, -{60,35,34}, -{60,35,35}, -{60,35,36}, -{60,35,37}, -{60,35,38}, -{60,35,39}, -{60,35,40}, -{60,35,41}, -{60,35,42}, -{60,35,43}, -{60,35,44}, -{60,35,45}, -{60,35,46}, -{60,35,47}, -{60,35,48}, -{60,35,49}, -{60,35,50}, -{60,35,51}, -{60,35,52}, -{60,35,53}, -{60,35,54}, -{60,35,55}, -{60,35,56}, -{60,35,57}, -{60,35,58}, -{60,35,59}, -{60,35,60}, -{60,35,61}, -{60,35,62}, -{60,35,63}, -{60,35,64}, -{60,35,65}, -{60,35,66}, -{60,35,67}, -{60,36,-62}, -{60,36,-61}, -{60,36,-60}, -{60,36,-59}, -{60,36,-58}, -{60,36,-57}, -{60,36,-56}, -{60,36,-55}, -{60,36,-54}, -{60,36,-53}, -{60,36,-52}, -{60,36,-51}, -{60,36,-50}, -{60,36,-49}, -{60,36,-48}, -{60,36,-47}, -{60,36,-46}, -{60,36,-45}, -{60,36,-44}, -{60,36,-43}, -{60,36,-42}, -{60,36,-41}, -{60,36,-40}, -{60,36,-39}, -{60,36,-38}, -{60,36,-37}, -{60,36,-36}, -{60,36,-35}, -{60,36,-34}, -{60,36,-33}, -{60,36,-32}, -{60,36,-31}, -{60,36,-30}, -{60,36,-29}, -{60,36,-28}, -{60,36,-27}, -{60,36,-26}, -{60,36,-25}, -{60,36,-24}, -{60,36,-23}, -{60,36,-22}, -{60,36,-21}, -{60,36,-20}, -{60,36,-19}, -{60,36,-18}, -{60,36,-17}, -{60,36,-16}, -{60,36,-15}, -{60,36,-14}, -{60,36,-13}, -{60,36,-12}, -{60,36,-11}, -{60,36,-10}, -{60,36,-9}, -{60,36,-8}, -{60,36,-7}, -{60,36,-6}, -{60,36,-5}, -{60,36,-4}, -{60,36,-3}, -{60,36,-2}, -{60,36,-1}, -{60,36,0}, -{60,36,1}, -{60,36,2}, -{60,36,3}, -{60,36,4}, -{60,36,5}, -{60,36,6}, -{60,36,7}, -{60,36,8}, -{60,36,9}, -{60,36,10}, -{60,36,11}, -{60,36,12}, -{60,36,13}, -{60,36,14}, -{60,36,15}, -{60,36,16}, -{60,36,17}, -{60,36,18}, -{60,36,19}, -{60,36,20}, -{60,36,21}, -{60,36,22}, -{60,36,23}, -{60,36,24}, -{60,36,25}, -{60,36,26}, -{60,36,27}, -{60,36,28}, -{60,36,29}, -{60,36,30}, -{60,36,31}, -{60,36,32}, -{60,36,33}, -{60,36,34}, -{60,36,35}, -{60,36,36}, -{60,36,37}, -{60,36,38}, -{60,36,39}, -{60,36,40}, -{60,36,41}, -{60,36,42}, -{60,36,43}, -{60,36,44}, -{60,36,45}, -{60,36,46}, -{60,36,47}, -{60,36,48}, -{60,36,49}, -{60,36,50}, -{60,36,51}, -{60,36,52}, -{60,36,53}, -{60,36,54}, -{60,36,55}, -{60,36,56}, -{60,36,57}, -{60,36,58}, -{60,36,59}, -{60,36,60}, -{60,36,61}, -{60,36,62}, -{60,36,63}, -{60,36,64}, -{60,36,65}, -{60,36,66}, -{60,36,67}, -{60,37,-62}, -{60,37,-61}, -{60,37,-60}, -{60,37,-59}, -{60,37,-58}, -{60,37,-57}, -{60,37,-56}, -{60,37,-55}, -{60,37,-54}, -{60,37,-53}, -{60,37,-52}, -{60,37,-51}, -{60,37,-50}, -{60,37,-49}, -{60,37,-48}, -{60,37,-47}, -{60,37,-46}, -{60,37,-45}, -{60,37,-44}, -{60,37,-43}, -{60,37,-42}, -{60,37,-41}, -{60,37,-40}, -{60,37,-39}, -{60,37,-38}, -{60,37,-37}, -{60,37,-36}, -{60,37,-35}, -{60,37,-34}, -{60,37,-33}, -{60,37,-32}, -{60,37,-31}, -{60,37,-30}, -{60,37,-29}, -{60,37,-28}, -{60,37,-27}, -{60,37,-26}, -{60,37,-25}, -{60,37,-24}, -{60,37,-23}, -{60,37,-22}, -{60,37,-21}, -{60,37,-20}, -{60,37,-19}, -{60,37,-18}, -{60,37,-17}, -{60,37,-16}, -{60,37,-15}, -{60,37,-14}, -{60,37,-13}, -{60,37,-12}, -{60,37,-11}, -{60,37,-10}, -{60,37,-9}, -{60,37,-8}, -{60,37,-7}, -{60,37,-6}, -{60,37,-5}, -{60,37,-4}, -{60,37,-3}, -{60,37,-2}, -{60,37,-1}, -{60,37,0}, -{60,37,1}, -{60,37,2}, -{60,37,3}, -{60,37,4}, -{60,37,5}, -{60,37,6}, -{60,37,7}, -{60,37,8}, -{60,37,9}, -{60,37,10}, -{60,37,11}, -{60,37,12}, -{60,37,13}, -{60,37,14}, -{60,37,15}, -{60,37,16}, -{60,37,17}, -{60,37,18}, -{60,37,19}, -{60,37,20}, -{60,37,21}, -{60,37,22}, -{60,37,23}, -{60,37,24}, -{60,37,25}, -{60,37,26}, -{60,37,27}, -{60,37,28}, -{60,37,29}, -{60,37,30}, -{60,37,31}, -{60,37,32}, -{60,37,33}, -{60,37,34}, -{60,37,35}, -{60,37,36}, -{60,37,37}, -{60,37,38}, -{60,37,39}, -{60,37,40}, -{60,37,41}, -{60,37,42}, -{60,37,43}, -{60,37,44}, -{60,37,45}, -{60,37,46}, -{60,37,47}, -{60,37,48}, -{60,37,49}, -{60,37,50}, -{60,37,51}, -{60,37,52}, -{60,37,53}, -{60,37,54}, -{60,37,55}, -{60,37,56}, -{60,37,57}, -{60,37,58}, -{60,37,59}, -{60,37,60}, -{60,37,61}, -{60,37,62}, -{60,37,63}, -{60,37,64}, -{60,37,65}, -{60,37,66}, -{60,37,67}, -{60,38,-62}, -{60,38,-61}, -{60,38,-60}, -{60,38,-59}, -{60,38,-58}, -{60,38,-57}, -{60,38,-56}, -{60,38,-55}, -{60,38,-54}, -{60,38,-53}, -{60,38,-52}, -{60,38,-51}, -{60,38,-50}, -{60,38,-49}, -{60,38,-48}, -{60,38,-47}, -{60,38,-46}, -{60,38,-45}, -{60,38,-44}, -{60,38,-43}, -{60,38,-42}, -{60,38,-41}, -{60,38,-40}, -{60,38,-39}, -{60,38,-38}, -{60,38,-37}, -{60,38,-36}, -{60,38,-35}, -{60,38,-34}, -{60,38,-33}, -{60,38,-32}, -{60,38,-31}, -{60,38,-30}, -{60,38,-29}, -{60,38,-28}, -{60,38,-27}, -{60,38,-26}, -{60,38,-25}, -{60,38,-24}, -{60,38,-23}, -{60,38,-22}, -{60,38,-21}, -{60,38,-20}, -{60,38,-19}, -{60,38,-18}, -{60,38,-17}, -{60,38,-16}, -{60,38,-15}, -{60,38,-14}, -{60,38,-13}, -{60,38,-12}, -{60,38,-11}, -{60,38,-10}, -{60,38,-9}, -{60,38,-8}, -{60,38,-7}, -{60,38,-6}, -{60,38,-5}, -{60,38,-4}, -{60,38,-3}, -{60,38,-2}, -{60,38,-1}, -{60,38,0}, -{60,38,1}, -{60,38,2}, -{60,38,3}, -{60,38,4}, -{60,38,5}, -{60,38,6}, -{60,38,7}, -{60,38,8}, -{60,38,9}, -{60,38,10}, -{60,38,11}, -{60,38,12}, -{60,38,13}, -{60,38,14}, -{60,38,15}, -{60,38,16}, -{60,38,17}, -{60,38,18}, -{60,38,19}, -{60,38,20}, -{60,38,21}, -{60,38,22}, -{60,38,23}, -{60,38,24}, -{60,38,25}, -{60,38,26}, -{60,38,27}, -{60,38,28}, -{60,38,29}, -{60,38,30}, -{60,38,31}, -{60,38,32}, -{60,38,33}, -{60,38,34}, -{60,38,35}, -{60,38,36}, -{60,38,37}, -{60,38,38}, -{60,38,39}, -{60,38,40}, -{60,38,41}, -{60,38,42}, -{60,38,43}, -{60,38,44}, -{60,38,45}, -{60,38,46}, -{60,38,47}, -{60,38,48}, -{60,38,49}, -{60,38,50}, -{60,38,51}, -{60,38,52}, -{60,38,53}, -{60,38,54}, -{60,38,55}, -{60,38,56}, -{60,38,57}, -{60,38,58}, -{60,38,59}, -{60,38,60}, -{60,38,61}, -{60,38,62}, -{60,38,63}, -{60,38,64}, -{60,38,65}, -{60,38,66}, -{60,38,67}, -{60,39,-62}, -{60,39,-61}, -{60,39,-60}, -{60,39,-59}, -{60,39,-58}, -{60,39,-57}, -{60,39,-56}, -{60,39,-55}, -{60,39,-54}, -{60,39,-53}, -{60,39,-52}, -{60,39,-51}, -{60,39,-50}, -{60,39,-49}, -{60,39,-48}, -{60,39,-47}, -{60,39,-46}, -{60,39,-45}, -{60,39,-44}, -{60,39,-43}, -{60,39,-42}, -{60,39,-41}, -{60,39,-40}, -{60,39,-39}, -{60,39,-38}, -{60,39,-37}, -{60,39,-36}, -{60,39,-35}, -{60,39,-34}, -{60,39,-33}, -{60,39,-32}, -{60,39,-31}, -{60,39,-30}, -{60,39,-29}, -{60,39,-28}, -{60,39,-27}, -{60,39,-26}, -{60,39,-25}, -{60,39,-24}, -{60,39,-23}, -{60,39,-22}, -{60,39,-21}, -{60,39,-20}, -{60,39,-19}, -{60,39,-18}, -{60,39,-17}, -{60,39,-16}, -{60,39,-15}, -{60,39,-14}, -{60,39,-13}, -{60,39,-12}, -{60,39,-11}, -{60,39,-10}, -{60,39,-9}, -{60,39,-8}, -{60,39,-7}, -{60,39,-6}, -{60,39,-5}, -{60,39,-4}, -{60,39,-3}, -{60,39,-2}, -{60,39,-1}, -{60,39,0}, -{60,39,1}, -{60,39,2}, -{60,39,3}, -{60,39,4}, -{60,39,5}, -{60,39,6}, -{60,39,7}, -{60,39,8}, -{60,39,9}, -{60,39,10}, -{60,39,11}, -{60,39,12}, -{60,39,13}, -{60,39,14}, -{60,39,15}, -{60,39,16}, -{60,39,17}, -{60,39,18}, -{60,39,19}, -{60,39,20}, -{60,39,21}, -{60,39,22}, -{60,39,23}, -{60,39,24}, -{60,39,25}, -{60,39,26}, -{60,39,27}, -{60,39,28}, -{60,39,29}, -{60,39,30}, -{60,39,31}, -{60,39,32}, -{60,39,33}, -{60,39,34}, -{60,39,35}, -{60,39,36}, -{60,39,37}, -{60,39,38}, -{60,39,39}, -{60,39,40}, -{60,39,41}, -{60,39,42}, -{60,39,43}, -{60,39,44}, -{60,39,45}, -{60,39,46}, -{60,39,47}, -{60,39,48}, -{60,39,49}, -{60,39,50}, -{60,39,51}, -{60,39,52}, -{60,39,53}, -{60,39,54}, -{60,39,55}, -{60,39,56}, -{60,39,57}, -{60,39,58}, -{60,39,59}, -{60,39,60}, -{60,39,61}, -{60,39,62}, -{60,39,63}, -{60,39,64}, -{60,39,65}, -{60,39,66}, -{60,39,67}, -{60,40,-62}, -{60,40,-61}, -{60,40,-60}, -{60,40,-59}, -{60,40,-58}, -{60,40,-57}, -{60,40,-56}, -{60,40,-55}, -{60,40,-54}, -{60,40,-53}, -{60,40,-52}, -{60,40,-51}, -{60,40,-50}, -{60,40,-49}, -{60,40,-48}, -{60,40,-47}, -{60,40,-46}, -{60,40,-45}, -{60,40,-44}, -{60,40,-43}, -{60,40,-42}, -{60,40,-41}, -{60,40,-40}, -{60,40,-39}, -{60,40,-38}, -{60,40,-37}, -{60,40,-36}, -{60,40,-35}, -{60,40,-34}, -{60,40,-33}, -{60,40,-32}, -{60,40,-31}, -{60,40,-30}, -{60,40,-29}, -{60,40,-28}, -{60,40,-27}, -{60,40,-26}, -{60,40,-25}, -{60,40,-24}, -{60,40,-23}, -{60,40,-22}, -{60,40,-21}, -{60,40,-20}, -{60,40,-19}, -{60,40,-18}, -{60,40,-17}, -{60,40,-16}, -{60,40,-15}, -{60,40,-14}, -{60,40,-13}, -{60,40,-12}, -{60,40,-11}, -{60,40,-10}, -{60,40,-9}, -{60,40,-8}, -{60,40,-7}, -{60,40,-6}, -{60,40,-5}, -{60,40,-4}, -{60,40,-3}, -{60,40,-2}, -{60,40,-1}, -{60,40,0}, -{60,40,1}, -{60,40,2}, -{60,40,3}, -{60,40,4}, -{60,40,5}, -{60,40,6}, -{60,40,7}, -{60,40,8}, -{60,40,9}, -{60,40,10}, -{60,40,11}, -{60,40,12}, -{60,40,13}, -{60,40,14}, -{60,40,15}, -{60,40,16}, -{60,40,17}, -{60,40,18}, -{60,40,19}, -{60,40,20}, -{60,40,21}, -{60,40,22}, -{60,40,23}, -{60,40,24}, -{60,40,25}, -{60,40,26}, -{60,40,27}, -{60,40,28}, -{60,40,29}, -{60,40,30}, -{60,40,31}, -{60,40,32}, -{60,40,33}, -{60,40,34}, -{60,40,35}, -{60,40,36}, -{60,40,37}, -{60,40,38}, -{60,40,39}, -{60,40,40}, -{60,40,41}, -{60,40,42}, -{60,40,43}, -{60,40,44}, -{60,40,45}, -{60,40,46}, -{60,40,47}, -{60,40,48}, -{60,40,49}, -{60,40,50}, -{60,40,51}, -{60,40,52}, -{60,40,53}, -{60,40,54}, -{60,40,55}, -{60,40,56}, -{60,40,57}, -{60,40,58}, -{60,40,59}, -{60,40,60}, -{60,40,61}, -{60,40,62}, -{60,40,63}, -{60,40,64}, -{60,40,65}, -{60,40,66}, -{60,40,67}, -{60,40,68}, -{60,41,-62}, -{60,41,-61}, -{60,41,-60}, -{60,41,-59}, -{60,41,-58}, -{60,41,-57}, -{60,41,-56}, -{60,41,-55}, -{60,41,-54}, -{60,41,-53}, -{60,41,-52}, -{60,41,-51}, -{60,41,-50}, -{60,41,-49}, -{60,41,-48}, -{60,41,-47}, -{60,41,-46}, -{60,41,-45}, -{60,41,-44}, -{60,41,-43}, -{60,41,-42}, -{60,41,-41}, -{60,41,-40}, -{60,41,-39}, -{60,41,-38}, -{60,41,-37}, -{60,41,-36}, -{60,41,-35}, -{60,41,-34}, -{60,41,-33}, -{60,41,-32}, -{60,41,-31}, -{60,41,-30}, -{60,41,-29}, -{60,41,-28}, -{60,41,-27}, -{60,41,-26}, -{60,41,-25}, -{60,41,-24}, -{60,41,-23}, -{60,41,-22}, -{60,41,-21}, -{60,41,-20}, -{60,41,-19}, -{60,41,-18}, -{60,41,-17}, -{60,41,-16}, -{60,41,-15}, -{60,41,-14}, -{60,41,-13}, -{60,41,-12}, -{60,41,-11}, -{60,41,-10}, -{60,41,-9}, -{60,41,-8}, -{60,41,-7}, -{60,41,-6}, -{60,41,-5}, -{60,41,-4}, -{60,41,-3}, -{60,41,-2}, -{60,41,-1}, -{60,41,0}, -{60,41,1}, -{60,41,2}, -{60,41,3}, -{60,41,4}, -{60,41,5}, -{60,41,6}, -{60,41,7}, -{60,41,8}, -{60,41,9}, -{60,41,10}, -{60,41,11}, -{60,41,12}, -{60,41,13}, -{60,41,14}, -{60,41,15}, -{60,41,16}, -{60,41,17}, -{60,41,18}, -{60,41,19}, -{60,41,20}, -{60,41,21}, -{60,41,22}, -{60,41,23}, -{60,41,24}, -{60,41,25}, -{60,41,26}, -{60,41,27}, -{60,41,28}, -{60,41,29}, -{60,41,30}, -{60,41,31}, -{60,41,32}, -{60,41,33}, -{60,41,34}, -{60,41,35}, -{60,41,36}, -{60,41,37}, -{60,41,38}, -{60,41,39}, -{60,41,40}, -{60,41,41}, -{60,41,42}, -{60,41,43}, -{60,41,44}, -{60,41,45}, -{60,41,46}, -{60,41,47}, -{60,41,48}, -{60,41,49}, -{60,41,50}, -{60,41,51}, -{60,41,52}, -{60,41,53}, -{60,41,54}, -{60,41,55}, -{60,41,56}, -{60,41,57}, -{60,41,58}, -{60,41,59}, -{60,41,60}, -{60,41,61}, -{60,41,62}, -{60,41,63}, -{60,41,64}, -{60,41,65}, -{60,41,66}, -{60,41,67}, -{60,41,68}, -{60,42,-62}, -{60,42,-61}, -{60,42,-60}, -{60,42,-59}, -{60,42,-58}, -{60,42,-57}, -{60,42,-56}, -{60,42,-55}, -{60,42,-54}, -{60,42,-53}, -{60,42,-52}, -{60,42,-51}, -{60,42,-50}, -{60,42,-49}, -{60,42,-48}, -{60,42,-47}, -{60,42,-46}, -{60,42,-45}, -{60,42,-44}, -{60,42,-43}, -{60,42,-42}, -{60,42,-41}, -{60,42,-40}, -{60,42,-39}, -{60,42,-38}, -{60,42,-37}, -{60,42,-36}, -{60,42,-35}, -{60,42,-34}, -{60,42,-33}, -{60,42,-32}, -{60,42,-31}, -{60,42,-30}, -{60,42,-29}, -{60,42,-28}, -{60,42,-27}, -{60,42,-26}, -{60,42,-25}, -{60,42,-24}, -{60,42,-23}, -{60,42,-22}, -{60,42,-21}, -{60,42,-20}, -{60,42,-19}, -{60,42,-18}, -{60,42,-17}, -{60,42,-16}, -{60,42,-15}, -{60,42,-14}, -{60,42,-13}, -{60,42,-12}, -{60,42,-11}, -{60,42,-10}, -{60,42,-9}, -{60,42,-8}, -{60,42,-7}, -{60,42,-6}, -{60,42,-5}, -{60,42,-4}, -{60,42,-3}, -{60,42,-2}, -{60,42,-1}, -{60,42,0}, -{60,42,1}, -{60,42,2}, -{60,42,3}, -{60,42,4}, -{60,42,5}, -{60,42,6}, -{60,42,7}, -{60,42,8}, -{60,42,9}, -{60,42,10}, -{60,42,11}, -{60,42,12}, -{60,42,13}, -{60,42,14}, -{60,42,15}, -{60,42,16}, -{60,42,17}, -{60,42,18}, -{60,42,19}, -{60,42,20}, -{60,42,21}, -{60,42,22}, -{60,42,23}, -{60,42,24}, -{60,42,25}, -{60,42,26}, -{60,42,27}, -{60,42,28}, -{60,42,29}, -{60,42,30}, -{60,42,31}, -{60,42,32}, -{60,42,33}, -{60,42,34}, -{60,42,35}, -{60,42,36}, -{60,42,37}, -{60,42,38}, -{60,42,39}, -{60,42,40}, -{60,42,41}, -{60,42,42}, -{60,42,43}, -{60,42,44}, -{60,42,45}, -{60,42,46}, -{60,42,47}, -{60,42,48}, -{60,42,49}, -{60,42,50}, -{60,42,51}, -{60,42,52}, -{60,42,53}, -{60,42,54}, -{60,42,55}, -{60,42,56}, -{60,42,57}, -{60,42,58}, -{60,42,59}, -{60,42,60}, -{60,42,61}, -{60,42,62}, -{60,42,63}, -{60,42,64}, -{60,42,65}, -{60,42,66}, -{60,42,67}, -{60,42,68}, -{60,43,-62}, -{60,43,-61}, -{60,43,-60}, -{60,43,-59}, -{60,43,-58}, -{60,43,-57}, -{60,43,-56}, -{60,43,-55}, -{60,43,-54}, -{60,43,-53}, -{60,43,-52}, -{60,43,-51}, -{60,43,-50}, -{60,43,-49}, -{60,43,-48}, -{60,43,-47}, -{60,43,-46}, -{60,43,-45}, -{60,43,-44}, -{60,43,-43}, -{60,43,-42}, -{60,43,-41}, -{60,43,-40}, -{60,43,-39}, -{60,43,-38}, -{60,43,-37}, -{60,43,-36}, -{60,43,-35}, -{60,43,-34}, -{60,43,-33}, -{60,43,-32}, -{60,43,-31}, -{60,43,-30}, -{60,43,-29}, -{60,43,-28}, -{60,43,-27}, -{60,43,-26}, -{60,43,-25}, -{60,43,-24}, -{60,43,-23}, -{60,43,-22}, -{60,43,-21}, -{60,43,-20}, -{60,43,-19}, -{60,43,-18}, -{60,43,-17}, -{60,43,-16}, -{60,43,-15}, -{60,43,-14}, -{60,43,-13}, -{60,43,-12}, -{60,43,-11}, -{60,43,-10}, -{60,43,-9}, -{60,43,-8}, -{60,43,-7}, -{60,43,-6}, -{60,43,-5}, -{60,43,-4}, -{60,43,-3}, -{60,43,-2}, -{60,43,-1}, -{60,43,0}, -{60,43,1}, -{60,43,2}, -{60,43,3}, -{60,43,4}, -{60,43,5}, -{60,43,6}, -{60,43,7}, -{60,43,8}, -{60,43,9}, -{60,43,10}, -{60,43,11}, -{60,43,12}, -{60,43,13}, -{60,43,14}, -{60,43,15}, -{60,43,16}, -{60,43,17}, -{60,43,18}, -{60,43,19}, -{60,43,20}, -{60,43,21}, -{60,43,22}, -{60,43,23}, -{60,43,24}, -{60,43,25}, -{60,43,26}, -{60,43,27}, -{60,43,28}, -{60,43,29}, -{60,43,30}, -{60,43,31}, -{60,43,32}, -{60,43,33}, -{60,43,34}, -{60,43,35}, -{60,43,36}, -{60,43,37}, -{60,43,38}, -{60,43,39}, -{60,43,40}, -{60,43,41}, -{60,43,42}, -{60,43,43}, -{60,43,44}, -{60,43,45}, -{60,43,46}, -{60,43,47}, -{60,43,48}, -{60,43,49}, -{60,43,50}, -{60,43,51}, -{60,43,52}, -{60,43,53}, -{60,43,54}, -{60,43,55}, -{60,43,56}, -{60,43,57}, -{60,43,58}, -{60,43,59}, -{60,43,60}, -{60,43,61}, -{60,43,62}, -{60,43,63}, -{60,43,64}, -{60,43,65}, -{60,43,66}, -{60,43,67}, -{60,43,68}, -{60,44,-62}, -{60,44,-61}, -{60,44,-60}, -{60,44,-59}, -{60,44,-58}, -{60,44,-57}, -{60,44,-56}, -{60,44,-55}, -{60,44,-54}, -{60,44,-53}, -{60,44,-52}, -{60,44,-51}, -{60,44,-50}, -{60,44,-49}, -{60,44,-48}, -{60,44,-47}, -{60,44,-46}, -{60,44,-45}, -{60,44,-44}, -{60,44,-43}, -{60,44,-42}, -{60,44,-41}, -{60,44,-40}, -{60,44,-39}, -{60,44,-38}, -{60,44,-37}, -{60,44,-36}, -{60,44,-35}, -{60,44,-34}, -{60,44,-33}, -{60,44,-32}, -{60,44,-31}, -{60,44,-30}, -{60,44,-29}, -{60,44,-28}, -{60,44,-27}, -{60,44,-26}, -{60,44,-25}, -{60,44,-24}, -{60,44,-23}, -{60,44,-22}, -{60,44,-21}, -{60,44,-20}, -{60,44,-19}, -{60,44,-18}, -{60,44,-17}, -{60,44,-16}, -{60,44,-15}, -{60,44,-14}, -{60,44,-13}, -{60,44,-12}, -{60,44,-11}, -{60,44,-10}, -{60,44,-9}, -{60,44,-8}, -{60,44,-7}, -{60,44,-6}, -{60,44,-5}, -{60,44,-4}, -{60,44,-3}, -{60,44,-2}, -{60,44,-1}, -{60,44,0}, -{60,44,1}, -{60,44,2}, -{60,44,3}, -{60,44,4}, -{60,44,5}, -{60,44,6}, -{60,44,7}, -{60,44,8}, -{60,44,9}, -{60,44,10}, -{60,44,11}, -{60,44,12}, -{60,44,13}, -{60,44,14}, -{60,44,15}, -{60,44,16}, -{60,44,17}, -{60,44,18}, -{60,44,19}, -{60,44,20}, -{60,44,21}, -{60,44,22}, -{60,44,23}, -{60,44,24}, -{60,44,25}, -{60,44,26}, -{60,44,27}, -{60,44,28}, -{60,44,29}, -{60,44,30}, -{60,44,31}, -{60,44,32}, -{60,44,33}, -{60,44,34}, -{60,44,35}, -{60,44,36}, -{60,44,37}, -{60,44,38}, -{60,44,39}, -{60,44,40}, -{60,44,41}, -{60,44,42}, -{60,44,43}, -{60,44,44}, -{60,44,45}, -{60,44,46}, -{60,44,47}, -{60,44,48}, -{60,44,49}, -{60,44,50}, -{60,44,51}, -{60,44,52}, -{60,44,53}, -{60,44,54}, -{60,44,55}, -{60,44,56}, -{60,44,57}, -{60,44,58}, -{60,44,59}, -{60,44,60}, -{60,44,61}, -{60,44,62}, -{60,44,63}, -{60,44,64}, -{60,44,65}, -{60,44,66}, -{60,44,67}, -{60,44,68}, -{60,45,-62}, -{60,45,-61}, -{60,45,-60}, -{60,45,-59}, -{60,45,-58}, -{60,45,-57}, -{60,45,-56}, -{60,45,-55}, -{60,45,-54}, -{60,45,-53}, -{60,45,-52}, -{60,45,-51}, -{60,45,-50}, -{60,45,-49}, -{60,45,-48}, -{60,45,-47}, -{60,45,-46}, -{60,45,-45}, -{60,45,-44}, -{60,45,-43}, -{60,45,-42}, -{60,45,-41}, -{60,45,-40}, -{60,45,-39}, -{60,45,-38}, -{60,45,-37}, -{60,45,-36}, -{60,45,-35}, -{60,45,-34}, -{60,45,-33}, -{60,45,-32}, -{60,45,-31}, -{60,45,-30}, -{60,45,-29}, -{60,45,-28}, -{60,45,-27}, -{60,45,-26}, -{60,45,-25}, -{60,45,-24}, -{60,45,-23}, -{60,45,-22}, -{60,45,-21}, -{60,45,-20}, -{60,45,-19}, -{60,45,-18}, -{60,45,-17}, -{60,45,-16}, -{60,45,-15}, -{60,45,-14}, -{60,45,-13}, -{60,45,-12}, -{60,45,-11}, -{60,45,-10}, -{60,45,-9}, -{60,45,-8}, -{60,45,-7}, -{60,45,-6}, -{60,45,-5}, -{60,45,-4}, -{60,45,-3}, -{60,45,-2}, -{60,45,-1}, -{60,45,0}, -{60,45,1}, -{60,45,2}, -{60,45,3}, -{60,45,4}, -{60,45,5}, -{60,45,6}, -{60,45,7}, -{60,45,8}, -{60,45,9}, -{60,45,10}, -{60,45,11}, -{60,45,12}, -{60,45,13}, -{60,45,14}, -{60,45,15}, -{60,45,16}, -{60,45,17}, -{60,45,18}, -{60,45,19}, -{60,45,20}, -{60,45,21}, -{60,45,22}, -{60,45,23}, -{60,45,24}, -{60,45,25}, -{60,45,26}, -{60,45,27}, -{60,45,28}, -{60,45,29}, -{60,45,30}, -{60,45,31}, -{60,45,32}, -{60,45,33}, -{60,45,34}, -{60,45,35}, -{60,45,36}, -{60,45,37}, -{60,45,38}, -{60,45,39}, -{60,45,40}, -{60,45,41}, -{60,45,42}, -{60,45,43}, -{60,45,44}, -{60,45,45}, -{60,45,46}, -{60,45,47}, -{60,45,48}, -{60,45,49}, -{60,45,50}, -{60,45,51}, -{60,45,52}, -{60,45,53}, -{60,45,54}, -{60,45,55}, -{60,45,56}, -{60,45,57}, -{60,45,58}, -{60,45,59}, -{60,45,60}, -{60,45,61}, -{60,45,62}, -{60,45,63}, -{60,45,64}, -{60,45,65}, -{60,45,66}, -{60,45,67}, -{60,45,68}, -{60,46,-62}, -{60,46,-61}, -{60,46,-60}, -{60,46,-59}, -{60,46,-58}, -{60,46,-57}, -{60,46,-56}, -{60,46,-55}, -{60,46,-54}, -{60,46,-53}, -{60,46,-52}, -{60,46,-51}, -{60,46,-50}, -{60,46,-49}, -{60,46,-48}, -{60,46,-47}, -{60,46,-46}, -{60,46,-45}, -{60,46,-44}, -{60,46,-43}, -{60,46,-42}, -{60,46,-41}, -{60,46,-40}, -{60,46,-39}, -{60,46,-38}, -{60,46,-37}, -{60,46,-36}, -{60,46,-35}, -{60,46,-34}, -{60,46,-33}, -{60,46,-32}, -{60,46,-31}, -{60,46,-30}, -{60,46,-29}, -{60,46,-28}, -{60,46,-27}, -{60,46,-26}, -{60,46,-25}, -{60,46,-24}, -{60,46,-23}, -{60,46,-22}, -{60,46,-21}, -{60,46,-20}, -{60,46,-19}, -{60,46,-18}, -{60,46,-17}, -{60,46,-16}, -{60,46,-15}, -{60,46,-14}, -{60,46,-13}, -{60,46,-12}, -{60,46,-11}, -{60,46,-10}, -{60,46,-9}, -{60,46,-8}, -{60,46,-7}, -{60,46,-6}, -{60,46,-5}, -{60,46,-4}, -{60,46,-3}, -{60,46,-2}, -{60,46,-1}, -{60,46,0}, -{60,46,1}, -{60,46,2}, -{60,46,3}, -{60,46,4}, -{60,46,5}, -{60,46,6}, -{60,46,7}, -{60,46,8}, -{60,46,9}, -{60,46,10}, -{60,46,11}, -{60,46,12}, -{60,46,13}, -{60,46,14}, -{60,46,15}, -{60,46,16}, -{60,46,17}, -{60,46,18}, -{60,46,19}, -{60,46,20}, -{60,46,21}, -{60,46,22}, -{60,46,23}, -{60,46,24}, -{60,46,25}, -{60,46,26}, -{60,46,27}, -{60,46,28}, -{60,46,29}, -{60,46,30}, -{60,46,31}, -{60,46,32}, -{60,46,33}, -{60,46,34}, -{60,46,35}, -{60,46,36}, -{60,46,37}, -{60,46,38}, -{60,46,39}, -{60,46,40}, -{60,46,41}, -{60,46,42}, -{60,46,43}, -{60,46,44}, -{60,46,45}, -{60,46,46}, -{60,46,47}, -{60,46,48}, -{60,46,49}, -{60,46,50}, -{60,46,51}, -{60,46,52}, -{60,46,53}, -{60,46,54}, -{60,46,55}, -{60,46,56}, -{60,46,57}, -{60,46,58}, -{60,46,59}, -{60,46,60}, -{60,46,61}, -{60,46,62}, -{60,46,63}, -{60,46,64}, -{60,46,65}, -{60,46,66}, -{60,46,67}, -{60,46,68}, -{60,47,-62}, -{60,47,-61}, -{60,47,-60}, -{60,47,-59}, -{60,47,-58}, -{60,47,-57}, -{60,47,-56}, -{60,47,-55}, -{60,47,-54}, -{60,47,-53}, -{60,47,-52}, -{60,47,-51}, -{60,47,-50}, -{60,47,-49}, -{60,47,-48}, -{60,47,-47}, -{60,47,-46}, -{60,47,-45}, -{60,47,-44}, -{60,47,-43}, -{60,47,-42}, -{60,47,-41}, -{60,47,-40}, -{60,47,-39}, -{60,47,-38}, -{60,47,-37}, -{60,47,-36}, -{60,47,-35}, -{60,47,-34}, -{60,47,-33}, -{60,47,-32}, -{60,47,-31}, -{60,47,-30}, -{60,47,-29}, -{60,47,-28}, -{60,47,-27}, -{60,47,-26}, -{60,47,-25}, -{60,47,-24}, -{60,47,-23}, -{60,47,-22}, -{60,47,-21}, -{60,47,-20}, -{60,47,-19}, -{60,47,-18}, -{60,47,-17}, -{60,47,-16}, -{60,47,-15}, -{60,47,-14}, -{60,47,-13}, -{60,47,-12}, -{60,47,-11}, -{60,47,-10}, -{60,47,-9}, -{60,47,-8}, -{60,47,-7}, -{60,47,-6}, -{60,47,-5}, -{60,47,-4}, -{60,47,-3}, -{60,47,-2}, -{60,47,-1}, -{60,47,0}, -{60,47,1}, -{60,47,2}, -{60,47,3}, -{60,47,4}, -{60,47,5}, -{60,47,6}, -{60,47,7}, -{60,47,8}, -{60,47,9}, -{60,47,10}, -{60,47,11}, -{60,47,12}, -{60,47,13}, -{60,47,14}, -{60,47,15}, -{60,47,16}, -{60,47,17}, -{60,47,18}, -{60,47,19}, -{60,47,20}, -{60,47,21}, -{60,47,22}, -{60,47,23}, -{60,47,24}, -{60,47,25}, -{60,47,26}, -{60,47,27}, -{60,47,28}, -{60,47,29}, -{60,47,30}, -{60,47,31}, -{60,47,32}, -{60,47,33}, -{60,47,34}, -{60,47,35}, -{60,47,36}, -{60,47,37}, -{60,47,38}, -{60,47,39}, -{60,47,40}, -{60,47,41}, -{60,47,42}, -{60,47,43}, -{60,47,44}, -{60,47,45}, -{60,47,46}, -{60,47,47}, -{60,47,48}, -{60,47,49}, -{60,47,50}, -{60,47,51}, -{60,47,52}, -{60,47,53}, -{60,47,54}, -{60,47,55}, -{60,47,56}, -{60,47,57}, -{60,47,58}, -{60,47,59}, -{60,47,60}, -{60,47,61}, -{60,47,62}, -{60,47,63}, -{60,47,64}, -{60,47,65}, -{60,47,66}, -{60,47,67}, -{60,47,68}, -{60,48,-62}, -{60,48,-61}, -{60,48,-60}, -{60,48,-59}, -{60,48,-58}, -{60,48,-57}, -{60,48,-56}, -{60,48,-55}, -{60,48,-54}, -{60,48,-53}, -{60,48,-52}, -{60,48,-51}, -{60,48,-50}, -{60,48,-49}, -{60,48,-48}, -{60,48,-47}, -{60,48,-46}, -{60,48,-45}, -{60,48,-44}, -{60,48,-43}, -{60,48,-42}, -{60,48,-41}, -{60,48,-40}, -{60,48,-39}, -{60,48,-38}, -{60,48,-37}, -{60,48,-36}, -{60,48,-35}, -{60,48,-34}, -{60,48,-33}, -{60,48,-32}, -{60,48,-31}, -{60,48,-30}, -{60,48,-29}, -{60,48,-28}, -{60,48,-27}, -{60,48,-26}, -{60,48,-25}, -{60,48,-24}, -{60,48,-23}, -{60,48,-22}, -{60,48,-21}, -{60,48,-20}, -{60,48,-19}, -{60,48,-18}, -{60,48,-17}, -{60,48,-16}, -{60,48,-15}, -{60,48,-14}, -{60,48,-13}, -{60,48,-12}, -{60,48,-11}, -{60,48,-10}, -{60,48,-9}, -{60,48,-8}, -{60,48,-7}, -{60,48,-6}, -{60,48,-5}, -{60,48,-4}, -{60,48,-3}, -{60,48,-2}, -{60,48,-1}, -{60,48,0}, -{60,48,1}, -{60,48,2}, -{60,48,3}, -{60,48,4}, -{60,48,5}, -{60,48,6}, -{60,48,7}, -{60,48,8}, -{60,48,9}, -{60,48,10}, -{60,48,11}, -{60,48,12}, -{60,48,13}, -{60,48,14}, -{60,48,15}, -{60,48,16}, -{60,48,17}, -{60,48,18}, -{60,48,19}, -{60,48,20}, -{60,48,21}, -{60,48,22}, -{60,48,23}, -{60,48,24}, -{60,48,25}, -{60,48,26}, -{60,48,27}, -{60,48,28}, -{60,48,29}, -{60,48,30}, -{60,48,31}, -{60,48,32}, -{60,48,33}, -{60,48,34}, -{60,48,35}, -{60,48,36}, -{60,48,37}, -{60,48,38}, -{60,48,39}, -{60,48,40}, -{60,48,41}, -{60,48,42}, -{60,48,43}, -{60,48,44}, -{60,48,45}, -{60,48,46}, -{60,48,47}, -{60,48,48}, -{60,48,49}, -{60,48,50}, -{60,48,51}, -{60,48,52}, -{60,48,53}, -{60,48,54}, -{60,48,55}, -{60,48,56}, -{60,48,57}, -{60,48,58}, -{60,48,59}, -{60,48,60}, -{60,48,61}, -{60,48,62}, -{60,48,63}, -{60,48,64}, -{60,48,65}, -{60,48,66}, -{60,48,67}, -{60,48,68}, -{60,49,-62}, -{60,49,-61}, -{60,49,-60}, -{60,49,-59}, -{60,49,-58}, -{60,49,-57}, -{60,49,-56}, -{60,49,-55}, -{60,49,-54}, -{60,49,-53}, -{60,49,-52}, -{60,49,-51}, -{60,49,-50}, -{60,49,-49}, -{60,49,-48}, -{60,49,-47}, -{60,49,-46}, -{60,49,-45}, -{60,49,-44}, -{60,49,-43}, -{60,49,-42}, -{60,49,-41}, -{60,49,-40}, -{60,49,-39}, -{60,49,-38}, -{60,49,-37}, -{60,49,-36}, -{60,49,-35}, -{60,49,-34}, -{60,49,-33}, -{60,49,-32}, -{60,49,-31}, -{60,49,-30}, -{60,49,-29}, -{60,49,-28}, -{60,49,-27}, -{60,49,-26}, -{60,49,-25}, -{60,49,-24}, -{60,49,-23}, -{60,49,-22}, -{60,49,-21}, -{60,49,-20}, -{60,49,-19}, -{60,49,-18}, -{60,49,-17}, -{60,49,-16}, -{60,49,-15}, -{60,49,-14}, -{60,49,-13}, -{60,49,-12}, -{60,49,-11}, -{60,49,-10}, -{60,49,-9}, -{60,49,-8}, -{60,49,-7}, -{60,49,-6}, -{60,49,-5}, -{60,49,-4}, -{60,49,-3}, -{60,49,-2}, -{60,49,-1}, -{60,49,0}, -{60,49,1}, -{60,49,2}, -{60,49,3}, -{60,49,4}, -{60,49,5}, -{60,49,6}, -{60,49,7}, -{60,49,8}, -{60,49,9}, -{60,49,10}, -{60,49,11}, -{60,49,12}, -{60,49,13}, -{60,49,14}, -{60,49,15}, -{60,49,16}, -{60,49,17}, -{60,49,18}, -{60,49,19}, -{60,49,20}, -{60,49,21}, -{60,49,22}, -{60,49,23}, -{60,49,24}, -{60,49,25}, -{60,49,26}, -{60,49,27}, -{60,49,28}, -{60,49,29}, -{60,49,30}, -{60,49,31}, -{60,49,32}, -{60,49,33}, -{60,49,34}, -{60,49,35}, -{60,49,36}, -{60,49,37}, -{60,49,38}, -{60,49,39}, -{60,49,40}, -{60,49,41}, -{60,49,42}, -{60,49,43}, -{60,49,44}, -{60,49,45}, -{60,49,46}, -{60,49,47}, -{60,49,48}, -{60,49,49}, -{60,49,50}, -{60,49,51}, -{60,49,52}, -{60,49,53}, -{60,49,54}, -{60,49,55}, -{60,49,56}, -{60,49,57}, -{60,49,58}, -{60,49,59}, -{60,49,60}, -{60,49,61}, -{60,49,62}, -{60,49,63}, -{60,49,64}, -{60,49,65}, -{60,49,66}, -{60,49,67}, -{60,49,68}, -{60,50,-62}, -{60,50,-61}, -{60,50,-60}, -{60,50,-59}, -{60,50,-58}, -{60,50,-57}, -{60,50,-56}, -{60,50,-55}, -{60,50,-54}, -{60,50,-53}, -{60,50,-52}, -{60,50,-51}, -{60,50,-50}, -{60,50,-49}, -{60,50,-48}, -{60,50,-47}, -{60,50,-46}, -{60,50,-45}, -{60,50,-44}, -{60,50,-43}, -{60,50,-42}, -{60,50,-41}, -{60,50,-40}, -{60,50,-39}, -{60,50,-38}, -{60,50,-37}, -{60,50,-36}, -{60,50,-35}, -{60,50,-34}, -{60,50,-33}, -{60,50,-32}, -{60,50,-31}, -{60,50,-30}, -{60,50,-29}, -{60,50,-28}, -{60,50,-27}, -{60,50,-26}, -{60,50,-25}, -{60,50,-24}, -{60,50,-23}, -{60,50,-22}, -{60,50,-21}, -{60,50,-20}, -{60,50,-19}, -{60,50,-18}, -{60,50,-17}, -{60,50,-16}, -{60,50,-15}, -{60,50,-14}, -{60,50,-13}, -{60,50,-12}, -{60,50,-11}, -{60,50,-10}, -{60,50,-9}, -{60,50,-8}, -{60,50,-7}, -{60,50,-6}, -{60,50,-5}, -{60,50,-4}, -{60,50,-3}, -{60,50,-2}, -{60,50,-1}, -{60,50,0}, -{60,50,1}, -{60,50,2}, -{60,50,3}, -{60,50,4}, -{60,50,5}, -{60,50,6}, -{60,50,7}, -{60,50,8}, -{60,50,9}, -{60,50,10}, -{60,50,11}, -{60,50,12}, -{60,50,13}, -{60,50,14}, -{60,50,15}, -{60,50,16}, -{60,50,17}, -{60,50,18}, -{60,50,19}, -{60,50,20}, -{60,50,21}, -{60,50,22}, -{60,50,23}, -{60,50,24}, -{60,50,25}, -{60,50,26}, -{60,50,27}, -{60,50,28}, -{60,50,29}, -{60,50,30}, -{60,50,31}, -{60,50,32}, -{60,50,33}, -{60,50,34}, -{60,50,35}, -{60,50,36}, -{60,50,37}, -{60,50,38}, -{60,50,39}, -{60,50,40}, -{60,50,41}, -{60,50,42}, -{60,50,43}, -{60,50,44}, -{60,50,45}, -{60,50,46}, -{60,50,47}, -{60,50,48}, -{60,50,49}, -{60,50,50}, -{60,50,51}, -{60,50,52}, -{60,50,53}, -{60,50,54}, -{60,50,55}, -{60,50,56}, -{60,50,57}, -{60,50,58}, -{60,50,59}, -{60,50,60}, -{60,50,61}, -{60,50,62}, -{60,50,63}, -{60,50,64}, -{60,50,65}, -{60,50,66}, -{60,50,67}, -{60,50,68}, -{60,50,69}, -{60,51,-62}, -{60,51,-61}, -{60,51,-60}, -{60,51,-59}, -{60,51,-58}, -{60,51,-57}, -{60,51,-56}, -{60,51,-55}, -{60,51,-54}, -{60,51,-53}, -{60,51,-52}, -{60,51,-51}, -{60,51,-50}, -{60,51,-49}, -{60,51,-48}, -{60,51,-47}, -{60,51,-46}, -{60,51,-45}, -{60,51,-44}, -{60,51,-43}, -{60,51,-42}, -{60,51,-41}, -{60,51,-40}, -{60,51,-39}, -{60,51,-38}, -{60,51,-37}, -{60,51,-36}, -{60,51,-35}, -{60,51,-34}, -{60,51,-33}, -{60,51,-32}, -{60,51,-31}, -{60,51,-30}, -{60,51,-29}, -{60,51,-28}, -{60,51,-27}, -{60,51,-26}, -{60,51,-25}, -{60,51,-24}, -{60,51,-23}, -{60,51,-22}, -{60,51,-21}, -{60,51,-20}, -{60,51,-19}, -{60,51,-18}, -{60,51,-17}, -{60,51,-16}, -{60,51,-15}, -{60,51,-14}, -{60,51,-13}, -{60,51,-12}, -{60,51,-11}, -{60,51,-10}, -{60,51,-9}, -{60,51,-8}, -{60,51,-7}, -{60,51,-6}, -{60,51,-5}, -{60,51,-4}, -{60,51,-3}, -{60,51,-2}, -{60,51,-1}, -{60,51,0}, -{60,51,1}, -{60,51,2}, -{60,51,3}, -{60,51,4}, -{60,51,5}, -{60,51,6}, -{60,51,7}, -{60,51,8}, -{60,51,9}, -{60,51,10}, -{60,51,11}, -{60,51,12}, -{60,51,13}, -{60,51,14}, -{60,51,15}, -{60,51,16}, -{60,51,17}, -{60,51,18}, -{60,51,19}, -{60,51,20}, -{60,51,21}, -{60,51,22}, -{60,51,23}, -{60,51,24}, -{60,51,25}, -{60,51,26}, -{60,51,27}, -{60,51,28}, -{60,51,29}, -{60,51,30}, -{60,51,31}, -{60,51,32}, -{60,51,33}, -{60,51,34}, -{60,51,35}, -{60,51,36}, -{60,51,37}, -{60,51,38}, -{60,51,39}, -{60,51,40}, -{60,51,41}, -{60,51,42}, -{60,51,43}, -{60,51,44}, -{60,51,45}, -{60,51,46}, -{60,51,47}, -{60,51,48}, -{60,51,49}, -{60,51,50}, -{60,51,51}, -{60,51,52}, -{60,51,53}, -{60,51,54}, -{60,51,55}, -{60,51,56}, -{60,51,57}, -{60,51,58}, -{60,51,59}, -{60,51,60}, -{60,51,61}, -{60,51,62}, -{60,51,63}, -{60,51,64}, -{60,51,65}, -{60,51,66}, -{60,51,67}, -{60,51,68}, -{60,51,69}, -{60,52,-62}, -{60,52,-61}, -{60,52,-60}, -{60,52,-59}, -{60,52,-58}, -{60,52,-57}, -{60,52,-56}, -{60,52,-55}, -{60,52,-54}, -{60,52,-53}, -{60,52,-52}, -{60,52,-51}, -{60,52,-50}, -{60,52,-49}, -{60,52,-48}, -{60,52,-47}, -{60,52,-46}, -{60,52,-45}, -{60,52,-44}, -{60,52,-43}, -{60,52,-42}, -{60,52,-41}, -{60,52,-40}, -{60,52,-39}, -{60,52,-38}, -{60,52,-37}, -{60,52,-36}, -{60,52,-35}, -{60,52,-34}, -{60,52,-33}, -{60,52,-32}, -{60,52,-31}, -{60,52,-30}, -{60,52,-29}, -{60,52,-28}, -{60,52,-27}, -{60,52,-26}, -{60,52,-25}, -{60,52,-24}, -{60,52,-23}, -{60,52,-22}, -{60,52,-21}, -{60,52,-20}, -{60,52,-19}, -{60,52,-18}, -{60,52,-17}, -{60,52,-16}, -{60,52,-15}, -{60,52,-14}, -{60,52,-13}, -{60,52,-12}, -{60,52,-11}, -{60,52,-10}, -{60,52,-9}, -{60,52,-8}, -{60,52,-7}, -{60,52,-6}, -{60,52,-5}, -{60,52,-4}, -{60,52,-3}, -{60,52,-2}, -{60,52,-1}, -{60,52,0}, -{60,52,1}, -{60,52,2}, -{60,52,3}, -{60,52,4}, -{60,52,5}, -{60,52,6}, -{60,52,7}, -{60,52,8}, -{60,52,9}, -{60,52,10}, -{60,52,11}, -{60,52,12}, -{60,52,13}, -{60,52,14}, -{60,52,15}, -{60,52,16}, -{60,52,17}, -{60,52,18}, -{60,52,19}, -{60,52,20}, -{60,52,21}, -{60,52,22}, -{60,52,23}, -{60,52,24}, -{60,52,25}, -{60,52,26}, -{60,52,27}, -{60,52,28}, -{60,52,29}, -{60,52,30}, -{60,52,31}, -{60,52,32}, -{60,52,33}, -{60,52,34}, -{60,52,35}, -{60,52,36}, -{60,52,37}, -{60,52,38}, -{60,52,39}, -{60,52,40}, -{60,52,41}, -{60,52,42}, -{60,52,43}, -{60,52,44}, -{60,52,45}, -{60,52,46}, -{60,52,47}, -{60,52,48}, -{60,52,49}, -{60,52,50}, -{60,52,51}, -{60,52,52}, -{60,52,53}, -{60,52,54}, -{60,52,55}, -{60,52,56}, -{60,52,57}, -{60,52,58}, -{60,52,59}, -{60,52,60}, -{60,52,61}, -{60,52,62}, -{60,52,63}, -{60,52,64}, -{60,52,65}, -{60,52,66}, -{60,52,67}, -{60,52,68}, -{60,52,69}, -{60,53,-62}, -{60,53,-61}, -{60,53,-60}, -{60,53,-59}, -{60,53,-58}, -{60,53,-57}, -{60,53,-56}, -{60,53,-55}, -{60,53,-54}, -{60,53,-53}, -{60,53,-52}, -{60,53,-51}, -{60,53,-50}, -{60,53,-49}, -{60,53,-48}, -{60,53,-47}, -{60,53,-46}, -{60,53,-45}, -{60,53,-44}, -{60,53,-43}, -{60,53,-42}, -{60,53,-41}, -{60,53,-40}, -{60,53,-39}, -{60,53,-38}, -{60,53,-37}, -{60,53,-36}, -{60,53,-35}, -{60,53,-34}, -{60,53,-33}, -{60,53,-32}, -{60,53,-31}, -{60,53,-30}, -{60,53,-29}, -{60,53,-28}, -{60,53,-27}, -{60,53,-26}, -{60,53,-25}, -{60,53,-24}, -{60,53,-23}, -{60,53,-22}, -{60,53,-21}, -{60,53,-20}, -{60,53,-19}, -{60,53,-18}, -{60,53,-17}, -{60,53,-16}, -{60,53,-15}, -{60,53,-14}, -{60,53,-13}, -{60,53,-12}, -{60,53,-11}, -{60,53,-10}, -{60,53,-9}, -{60,53,-8}, -{60,53,-7}, -{60,53,-6}, -{60,53,-5}, -{60,53,-4}, -{60,53,-3}, -{60,53,-2}, -{60,53,-1}, -{60,53,0}, -{60,53,1}, -{60,53,2}, -{60,53,3}, -{60,53,4}, -{60,53,5}, -{60,53,6}, -{60,53,7}, -{60,53,8}, -{60,53,9}, -{60,53,10}, -{60,53,11}, -{60,53,12}, -{60,53,13}, -{60,53,14}, -{60,53,15}, -{60,53,16}, -{60,53,17}, -{60,53,18}, -{60,53,19}, -{60,53,20}, -{60,53,21}, -{60,53,22}, -{60,53,23}, -{60,53,24}, -{60,53,25}, -{60,53,26}, -{60,53,27}, -{60,53,28}, -{60,53,29}, -{60,53,30}, -{60,53,31}, -{60,53,32}, -{60,53,33}, -{60,53,34}, -{60,53,35}, -{60,53,36}, -{60,53,37}, -{60,53,38}, -{60,53,39}, -{60,53,40}, -{60,53,41}, -{60,53,42}, -{60,53,43}, -{60,53,44}, -{60,53,45}, -{60,53,46}, -{60,53,47}, -{60,53,48}, -{60,53,49}, -{60,53,50}, -{60,53,51}, -{60,53,52}, -{60,53,53}, -{60,53,54}, -{60,53,55}, -{60,53,56}, -{60,53,57}, -{60,53,58}, -{60,53,59}, -{60,53,60}, -{60,53,61}, -{60,53,62}, -{60,53,63}, -{60,53,64}, -{60,53,65}, -{60,53,66}, -{60,53,67}, -{60,53,68}, -{60,53,69}, -{60,54,-62}, -{60,54,-61}, -{60,54,-60}, -{60,54,-59}, -{60,54,-58}, -{60,54,-57}, -{60,54,-56}, -{60,54,-55}, -{60,54,-54}, -{60,54,-53}, -{60,54,-52}, -{60,54,-51}, -{60,54,-50}, -{60,54,-49}, -{60,54,-48}, -{60,54,-47}, -{60,54,-46}, -{60,54,-45}, -{60,54,-44}, -{60,54,-43}, -{60,54,-42}, -{60,54,-41}, -{60,54,-40}, -{60,54,-39}, -{60,54,-38}, -{60,54,-37}, -{60,54,-36}, -{60,54,-35}, -{60,54,-34}, -{60,54,-33}, -{60,54,-32}, -{60,54,-31}, -{60,54,-30}, -{60,54,-29}, -{60,54,-28}, -{60,54,-27}, -{60,54,-26}, -{60,54,-25}, -{60,54,-24}, -{60,54,-23}, -{60,54,-22}, -{60,54,-21}, -{60,54,-20}, -{60,54,-19}, -{60,54,-18}, -{60,54,-17}, -{60,54,-16}, -{60,54,-15}, -{60,54,-14}, -{60,54,-13}, -{60,54,-12}, -{60,54,-11}, -{60,54,-10}, -{60,54,-9}, -{60,54,-8}, -{60,54,-7}, -{60,54,-6}, -{60,54,-5}, -{60,54,-4}, -{60,54,-3}, -{60,54,-2}, -{60,54,-1}, -{60,54,0}, -{60,54,1}, -{60,54,2}, -{60,54,3}, -{60,54,4}, -{60,54,5}, -{60,54,6}, -{60,54,7}, -{60,54,8}, -{60,54,9}, -{60,54,10}, -{60,54,11}, -{60,54,12}, -{60,54,13}, -{60,54,14}, -{60,54,15}, -{60,54,16}, -{60,54,17}, -{60,54,18}, -{60,54,19}, -{60,54,20}, -{60,54,21}, -{60,54,22}, -{60,54,23}, -{60,54,24}, -{60,54,25}, -{60,54,26}, -{60,54,27}, -{60,54,28}, -{60,54,29}, -{60,54,30}, -{60,54,31}, -{60,54,32}, -{60,54,33}, -{60,54,34}, -{60,54,35}, -{60,54,36}, -{60,54,37}, -{60,54,38}, -{60,54,39}, -{60,54,40}, -{60,54,41}, -{60,54,42}, -{60,54,43}, -{60,54,44}, -{60,54,45}, -{60,54,46}, -{60,54,47}, -{60,54,48}, -{60,54,49}, -{60,54,50}, -{60,54,51}, -{60,54,52}, -{60,54,53}, -{60,54,54}, -{60,54,55}, -{60,54,56}, -{60,54,57}, -{60,54,58}, -{60,54,59}, -{60,54,60}, -{60,54,61}, -{60,54,62}, -{60,54,63}, -{60,54,64}, -{60,54,65}, -{60,54,66}, -{60,54,67}, -{60,54,68}, -{60,54,69}, -{60,55,-62}, -{60,55,-61}, -{60,55,-60}, -{60,55,-59}, -{60,55,-58}, -{60,55,-57}, -{60,55,-56}, -{60,55,-55}, -{60,55,-54}, -{60,55,-53}, -{60,55,-52}, -{60,55,-51}, -{60,55,-50}, -{60,55,-49}, -{60,55,-48}, -{60,55,-47}, -{60,55,-46}, -{60,55,-45}, -{60,55,-44}, -{60,55,-43}, -{60,55,-42}, -{60,55,-41}, -{60,55,-40}, -{60,55,-39}, -{60,55,-38}, -{60,55,-37}, -{60,55,-36}, -{60,55,-35}, -{60,55,-34}, -{60,55,-33}, -{60,55,-32}, -{60,55,-31}, -{60,55,-30}, -{60,55,-29}, -{60,55,-28}, -{60,55,-27}, -{60,55,-26}, -{60,55,-25}, -{60,55,-24}, -{60,55,-23}, -{60,55,-22}, -{60,55,-21}, -{60,55,-20}, -{60,55,-19}, -{60,55,-18}, -{60,55,-17}, -{60,55,-16}, -{60,55,-15}, -{60,55,-14}, -{60,55,-13}, -{60,55,-12}, -{60,55,-11}, -{60,55,-10}, -{60,55,-9}, -{60,55,-8}, -{60,55,-7}, -{60,55,-6}, -{60,55,-5}, -{60,55,-4}, -{60,55,-3}, -{60,55,-2}, -{60,55,-1}, -{60,55,0}, -{60,55,1}, -{60,55,2}, -{60,55,3}, -{60,55,4}, -{60,55,5}, -{60,55,6}, -{60,55,7}, -{60,55,8}, -{60,55,9}, -{60,55,10}, -{60,55,11}, -{60,55,12}, -{60,55,13}, -{60,55,14}, -{60,55,15}, -{60,55,16}, -{60,55,17}, -{60,55,18}, -{60,55,19}, -{60,55,20}, -{60,55,21}, -{60,55,22}, -{60,55,23}, -{60,55,24}, -{60,55,25}, -{60,55,26}, -{60,55,27}, -{60,55,28}, -{60,55,29}, -{60,55,30}, -{60,55,31}, -{60,55,32}, -{60,55,33}, -{60,55,34}, -{60,55,35}, -{60,55,36}, -{60,55,37}, -{60,55,38}, -{60,55,39}, -{60,55,40}, -{60,55,41}, -{60,55,42}, -{60,55,43}, -{60,55,44}, -{60,55,45}, -{60,55,46}, -{60,55,47}, -{60,55,48}, -{60,55,49}, -{60,55,50}, -{60,55,51}, -{60,55,52}, -{60,55,53}, -{60,55,54}, -{60,55,55}, -{60,55,56}, -{60,55,57}, -{60,55,58}, -{60,55,59}, -{60,55,60}, -{60,55,61}, -{60,55,62}, -{60,55,63}, -{60,55,64}, -{60,55,65}, -{60,55,66}, -{60,55,67}, -{60,55,68}, -{60,55,69}, -{60,56,-62}, -{60,56,-61}, -{60,56,-60}, -{60,56,-59}, -{60,56,-58}, -{60,56,-57}, -{60,56,-56}, -{60,56,-55}, -{60,56,-54}, -{60,56,-53}, -{60,56,-52}, -{60,56,-51}, -{60,56,-50}, -{60,56,-49}, -{60,56,-48}, -{60,56,-47}, -{60,56,-46}, -{60,56,-45}, -{60,56,-44}, -{60,56,-43}, -{60,56,-42}, -{60,56,-41}, -{60,56,-40}, -{60,56,-39}, -{60,56,-38}, -{60,56,-37}, -{60,56,-36}, -{60,56,-35}, -{60,56,-34}, -{60,56,-33}, -{60,56,-32}, -{60,56,-31}, -{60,56,-30}, -{60,56,-29}, -{60,56,-28}, -{60,56,-27}, -{60,56,-26}, -{60,56,-25}, -{60,56,-24}, -{60,56,-23}, -{60,56,-22}, -{60,56,-21}, -{60,56,-20}, -{60,56,-19}, -{60,56,-18}, -{60,56,-17}, -{60,56,-16}, -{60,56,-15}, -{60,56,-14}, -{60,56,-13}, -{60,56,-12}, -{60,56,-11}, -{60,56,-10}, -{60,56,-9}, -{60,56,-8}, -{60,56,-7}, -{60,56,-6}, -{60,56,-5}, -{60,56,-4}, -{60,56,-3}, -{60,56,-2}, -{60,56,-1}, -{60,56,0}, -{60,56,1}, -{60,56,2}, -{60,56,3}, -{60,56,4}, -{60,56,5}, -{60,56,6}, -{60,56,7}, -{60,56,8}, -{60,56,9}, -{60,56,10}, -{60,56,11}, -{60,56,12}, -{60,56,13}, -{60,56,14}, -{60,56,15}, -{60,56,16}, -{60,56,17}, -{60,56,18}, -{60,56,19}, -{60,56,20}, -{60,56,21}, -{60,56,22}, -{60,56,23}, -{60,56,24}, -{60,56,25}, -{60,56,26}, -{60,56,27}, -{60,56,28}, -{60,56,29}, -{60,56,30}, -{60,56,31}, -{60,56,32}, -{60,56,33}, -{60,56,34}, -{60,56,35}, -{60,56,36}, -{60,56,37}, -{60,56,38}, -{60,56,39}, -{60,56,40}, -{60,56,41}, -{60,56,42}, -{60,56,43}, -{60,56,44}, -{60,56,45}, -{60,56,46}, -{60,56,47}, -{60,56,48}, -{60,56,49}, -{60,56,50}, -{60,56,51}, -{60,56,52}, -{60,56,53}, -{60,56,54}, -{60,56,55}, -{60,56,56}, -{60,56,57}, -{60,56,58}, -{60,56,59}, -{60,56,60}, -{60,56,61}, -{60,56,62}, -{60,56,63}, -{60,56,64}, -{60,56,65}, -{60,56,66}, -{60,56,67}, -{60,56,68}, -{60,56,69}, -{60,57,-62}, -{60,57,-61}, -{60,57,-60}, -{60,57,-59}, -{60,57,-58}, -{60,57,-57}, -{60,57,-56}, -{60,57,-55}, -{60,57,-54}, -{60,57,-53}, -{60,57,-52}, -{60,57,-51}, -{60,57,-50}, -{60,57,-49}, -{60,57,-48}, -{60,57,-47}, -{60,57,-46}, -{60,57,-45}, -{60,57,-44}, -{60,57,-43}, -{60,57,-42}, -{60,57,-41}, -{60,57,-40}, -{60,57,-39}, -{60,57,-38}, -{60,57,-37}, -{60,57,-36}, -{60,57,-35}, -{60,57,-34}, -{60,57,-33}, -{60,57,-32}, -{60,57,-31}, -{60,57,-30}, -{60,57,-29}, -{60,57,-28}, -{60,57,-27}, -{60,57,-26}, -{60,57,-25}, -{60,57,-24}, -{60,57,-23}, -{60,57,-22}, -{60,57,-21}, -{60,57,-20}, -{60,57,-19}, -{60,57,-18}, -{60,57,-17}, -{60,57,-16}, -{60,57,-15}, -{60,57,-14}, -{60,57,-13}, -{60,57,-12}, -{60,57,-11}, -{60,57,-10}, -{60,57,-9}, -{60,57,-8}, -{60,57,-7}, -{60,57,-6}, -{60,57,-5}, -{60,57,-4}, -{60,57,-3}, -{60,57,-2}, -{60,57,-1}, -{60,57,0}, -{60,57,1}, -{60,57,2}, -{60,57,3}, -{60,57,4}, -{60,57,5}, -{60,57,6}, -{60,57,7}, -{60,57,8}, -{60,57,9}, -{60,57,10}, -{60,57,11}, -{60,57,12}, -{60,57,13}, -{60,57,14}, -{60,57,15}, -{60,57,16}, -{60,57,17}, -{60,57,18}, -{60,57,19}, -{60,57,20}, -{60,57,21}, -{60,57,22}, -{60,57,23}, -{60,57,24}, -{60,57,25}, -{60,57,26}, -{60,57,27}, -{60,57,28}, -{60,57,29}, -{60,57,30}, -{60,57,31}, -{60,57,32}, -{60,57,33}, -{60,57,34}, -{60,57,35}, -{60,57,36}, -{60,57,37}, -{60,57,38}, -{60,57,39}, -{60,57,40}, -{60,57,41}, -{60,57,42}, -{60,57,43}, -{60,57,44}, -{60,57,45}, -{60,57,46}, -{60,57,47}, -{60,57,48}, -{60,57,49}, -{60,57,50}, -{60,57,51}, -{60,57,52}, -{60,57,53}, -{60,57,54}, -{60,57,55}, -{60,57,56}, -{60,57,57}, -{60,57,58}, -{60,57,59}, -{60,57,60}, -{60,57,61}, -{60,57,62}, -{60,57,63}, -{60,57,64}, -{60,57,65}, -{60,57,66}, -{60,57,67}, -{60,57,68}, -{60,57,69}, -{60,58,-62}, -{60,58,-61}, -{60,58,-60}, -{60,58,-59}, -{60,58,-58}, -{60,58,-57}, -{60,58,-56}, -{60,58,-55}, -{60,58,-54}, -{60,58,-53}, -{60,58,-52}, -{60,58,-51}, -{60,58,-50}, -{60,58,-49}, -{60,58,-48}, -{60,58,-47}, -{60,58,-46}, -{60,58,-45}, -{60,58,-44}, -{60,58,-43}, -{60,58,-42}, -{60,58,-41}, -{60,58,-40}, -{60,58,-39}, -{60,58,-38}, -{60,58,-37}, -{60,58,-36}, -{60,58,-35}, -{60,58,-34}, -{60,58,-33}, -{60,58,-32}, -{60,58,-31}, -{60,58,-30}, -{60,58,-29}, -{60,58,-28}, -{60,58,-27}, -{60,58,-26}, -{60,58,-25}, -{60,58,-24}, -{60,58,-23}, -{60,58,-22}, -{60,58,-21}, -{60,58,-20}, -{60,58,-19}, -{60,58,-18}, -{60,58,-17}, -{60,58,-16}, -{60,58,-15}, -{60,58,-14}, -{60,58,-13}, -{60,58,-12}, -{60,58,-11}, -{60,58,-10}, -{60,58,-9}, -{60,58,-8}, -{60,58,-7}, -{60,58,-6}, -{60,58,-5}, -{60,58,-4}, -{60,58,-3}, -{60,58,-2}, -{60,58,-1}, -{60,58,0}, -{60,58,1}, -{60,58,2}, -{60,58,3}, -{60,58,4}, -{60,58,5}, -{60,58,6}, -{60,58,7}, -{60,58,8}, -{60,58,9}, -{60,58,10}, -{60,58,11}, -{60,58,12}, -{60,58,13}, -{60,58,14}, -{60,58,15}, -{60,58,16}, -{60,58,17}, -{60,58,18}, -{60,58,19}, -{60,58,20}, -{60,58,21}, -{60,58,22}, -{60,58,23}, -{60,58,24}, -{60,58,25}, -{60,58,26}, -{60,58,27}, -{60,58,28}, -{60,58,29}, -{60,58,30}, -{60,58,31}, -{60,58,32}, -{60,58,33}, -{60,58,34}, -{60,58,35}, -{60,58,36}, -{60,58,37}, -{60,58,38}, -{60,58,39}, -{60,58,40}, -{60,58,41}, -{60,58,42}, -{60,58,43}, -{60,58,44}, -{60,58,45}, -{60,58,46}, -{60,58,47}, -{60,58,48}, -{60,58,49}, -{60,58,50}, -{60,58,51}, -{60,58,52}, -{60,58,53}, -{60,58,54}, -{60,58,55}, -{60,58,56}, -{60,58,57}, -{60,58,58}, -{60,58,59}, -{60,58,60}, -{60,58,61}, -{60,58,62}, -{60,58,63}, -{60,58,64}, -{60,58,65}, -{60,58,66}, -{60,58,67}, -{60,58,68}, -{60,58,69}, -{60,59,-62}, -{60,59,-61}, -{60,59,-60}, -{60,59,-59}, -{60,59,-58}, -{60,59,-57}, -{60,59,-56}, -{60,59,-55}, -{60,59,-54}, -{60,59,-53}, -{60,59,-52}, -{60,59,-51}, -{60,59,-50}, -{60,59,-49}, -{60,59,-48}, -{60,59,-47}, -{60,59,-46}, -{60,59,-45}, -{60,59,-44}, -{60,59,-43}, -{60,59,-42}, -{60,59,-41}, -{60,59,-40}, -{60,59,-39}, -{60,59,-38}, -{60,59,-37}, -{60,59,-36}, -{60,59,-35}, -{60,59,-34}, -{60,59,-33}, -{60,59,-32}, -{60,59,-31}, -{60,59,-30}, -{60,59,-29}, -{60,59,-28}, -{60,59,-27}, -{60,59,-26}, -{60,59,-25}, -{60,59,-24}, -{60,59,-23}, -{60,59,-22}, -{60,59,-21}, -{60,59,-20}, -{60,59,-19}, -{60,59,-18}, -{60,59,-17}, -{60,59,-16}, -{60,59,-15}, -{60,59,-14}, -{60,59,-13}, -{60,59,-12}, -{60,59,-11}, -{60,59,-10}, -{60,59,-9}, -{60,59,-8}, -{60,59,-7}, -{60,59,-6}, -{60,59,-5}, -{60,59,-4}, -{60,59,-3}, -{60,59,-2}, -{60,59,-1}, -{60,59,0}, -{60,59,1}, -{60,59,2}, -{60,59,3}, -{60,59,4}, -{60,59,5}, -{60,59,6}, -{60,59,7}, -{60,59,8}, -{60,59,9}, -{60,59,10}, -{60,59,11}, -{60,59,12}, -{60,59,13}, -{60,59,14}, -{60,59,15}, -{60,59,16}, -{60,59,17}, -{60,59,18}, -{60,59,19}, -{60,59,20}, -{60,59,21}, -{60,59,22}, -{60,59,23}, -{60,59,24}, -{60,59,25}, -{60,59,26}, -{60,59,27}, -{60,59,28}, -{60,59,29}, -{60,59,30}, -{60,59,31}, -{60,59,32}, -{60,59,33}, -{60,59,34}, -{60,59,35}, -{60,59,36}, -{60,59,37}, -{60,59,38}, -{60,59,39}, -{60,59,40}, -{60,59,41}, -{60,59,42}, -{60,59,43}, -{60,59,44}, -{60,59,45}, -{60,59,46}, -{60,59,47}, -{60,59,48}, -{60,59,49}, -{60,59,50}, -{60,59,51}, -{60,59,52}, -{60,59,53}, -{60,59,54}, -{60,59,55}, -{60,59,56}, -{60,59,57}, -{60,59,58}, -{60,59,59}, -{60,59,60}, -{60,59,61}, -{60,59,62}, -{60,59,63}, -{60,59,64}, -{60,59,65}, -{60,59,66}, -{60,59,67}, -{60,59,68}, -{60,59,69}, -{60,59,70}, -{60,60,-62}, -{60,60,-61}, -{60,60,-60}, -{60,60,-59}, -{60,60,-58}, -{60,60,-57}, -{60,60,-56}, -{60,60,-55}, -{60,60,-54}, -{60,60,-53}, -{60,60,-52}, -{60,60,-51}, -{60,60,-50}, -{60,60,-49}, -{60,60,-48}, -{60,60,-47}, -{60,60,-46}, -{60,60,-45}, -{60,60,-44}, -{60,60,-43}, -{60,60,-42}, -{60,60,-41}, -{60,60,-40}, -{60,60,-39}, -{60,60,-38}, -{60,60,-37}, -{60,60,-36}, -{60,60,-35}, -{60,60,-34}, -{60,60,-33}, -{60,60,-32}, -{60,60,-31}, -{60,60,-30}, -{60,60,-29}, -{60,60,-28}, -{60,60,-27}, -{60,60,-26}, -{60,60,-25}, -{60,60,-24}, -{60,60,-23}, -{60,60,-22}, -{60,60,-21}, -{60,60,-20}, -{60,60,-19}, -{60,60,-18}, -{60,60,-17}, -{60,60,-16}, -{60,60,-15}, -{60,60,-14}, -{60,60,-13}, -{60,60,-12}, -{60,60,-11}, -{60,60,-10}, -{60,60,-9}, -{60,60,-8}, -{60,60,-7}, -{60,60,-6}, -{60,60,-5}, -{60,60,-4}, -{60,60,-3}, -{60,60,-2}, -{60,60,-1}, -{60,60,0}, -{60,60,1}, -{60,60,2}, -{60,60,3}, -{60,60,4}, -{60,60,5}, -{60,60,6}, -{60,60,7}, -{60,60,8}, -{60,60,9}, -{60,60,10}, -{60,60,11}, -{60,60,12}, -{60,60,13}, -{60,60,14}, -{60,60,15}, -{60,60,16}, -{60,60,17}, -{60,60,18}, -{60,60,19}, -{60,60,20}, -{60,60,21}, -{60,60,22}, -{60,60,23}, -{60,60,24}, -{60,60,25}, -{60,60,26}, -{60,60,27}, -{60,60,28}, -{60,60,29}, -{60,60,30}, -{60,60,31}, -{60,60,32}, -{60,60,33}, -{60,60,34}, -{60,60,35}, -{60,60,36}, -{60,60,37}, -{60,60,38}, -{60,60,39}, -{60,60,40}, -{60,60,41}, -{60,60,42}, -{60,60,43}, -{60,60,44}, -{60,60,45}, -{60,60,46}, -{60,60,47}, -{60,60,48}, -{60,60,49}, -{60,60,50}, -{60,60,51}, -{60,60,52}, -{60,60,53}, -{60,60,54}, -{60,60,55}, -{60,60,56}, -{60,60,57}, -{60,60,58}, -{60,60,59}, -{60,60,60}, -{60,60,61}, -{60,60,62}, -{60,60,63}, -{60,60,64}, -{60,60,65}, -{60,60,66}, -{60,60,67}, -{60,60,68}, -{60,60,69}, -{60,60,70}, -{60,61,-62}, -{60,61,-61}, -{60,61,-60}, -{60,61,-59}, -{60,61,-58}, -{60,61,-57}, -{60,61,-56}, -{60,61,-55}, -{60,61,-54}, -{60,61,-53}, -{60,61,-52}, -{60,61,-51}, -{60,61,-50}, -{60,61,-49}, -{60,61,-48}, -{60,61,-47}, -{60,61,-46}, -{60,61,-45}, -{60,61,-44}, -{60,61,-43}, -{60,61,-42}, -{60,61,-41}, -{60,61,-40}, -{60,61,-39}, -{60,61,-38}, -{60,61,-37}, -{60,61,-36}, -{60,61,-35}, -{60,61,-34}, -{60,61,-33}, -{60,61,-32}, -{60,61,-31}, -{60,61,-30}, -{60,61,-29}, -{60,61,-28}, -{60,61,-27}, -{60,61,-26}, -{60,61,-25}, -{60,61,-24}, -{60,61,-23}, -{60,61,-22}, -{60,61,-21}, -{60,61,-20}, -{60,61,-19}, -{60,61,-18}, -{60,61,-17}, -{60,61,-16}, -{60,61,-15}, -{60,61,-14}, -{60,61,-13}, -{60,61,-12}, -{60,61,-11}, -{60,61,-10}, -{60,61,-9}, -{60,61,-8}, -{60,61,-7}, -{60,61,-6}, -{60,61,-5}, -{60,61,-4}, -{60,61,-3}, -{60,61,-2}, -{60,61,-1}, -{60,61,0}, -{60,61,1}, -{60,61,2}, -{60,61,3}, -{60,61,4}, -{60,61,5}, -{60,61,6}, -{60,61,7}, -{60,61,8}, -{60,61,9}, -{60,61,10}, -{60,61,11}, -{60,61,12}, -{60,61,13}, -{60,61,14}, -{60,61,15}, -{60,61,16}, -{60,61,17}, -{60,61,18}, -{60,61,19}, -{60,61,20}, -{60,61,21}, -{60,61,22}, -{60,61,23}, -{60,61,24}, -{60,61,25}, -{60,61,26}, -{60,61,27}, -{60,61,28}, -{60,61,29}, -{60,61,30}, -{60,61,31}, -{60,61,32}, -{60,61,33}, -{60,61,34}, -{60,61,35}, -{60,61,36}, -{60,61,37}, -{60,61,38}, -{60,61,39}, -{60,61,40}, -{60,61,41}, -{60,61,42}, -{60,61,43}, -{60,61,44}, -{60,61,45}, -{60,61,46}, -{60,61,47}, -{60,61,48}, -{60,61,49}, -{60,61,50}, -{60,61,51}, -{60,61,52}, -{60,61,53}, -{60,61,54}, -{60,61,55}, -{60,61,56}, -{60,61,57}, -{60,61,58}, -{60,61,59}, -{60,61,60}, -{60,61,61}, -{60,61,62}, -{60,61,63}, -{60,61,64}, -{60,61,65}, -{60,61,66}, -{60,61,67}, -{60,61,68}, -{60,61,69}, -{60,61,70}, -{60,62,-61}, -{60,62,-60}, -{60,62,-59}, -{60,62,-58}, -{60,62,-57}, -{60,62,-56}, -{60,62,-55}, -{60,62,-54}, -{60,62,-53}, -{60,62,-52}, -{60,62,-51}, -{60,62,-50}, -{60,62,-49}, -{60,62,-48}, -{60,62,-47}, -{60,62,-46}, -{60,62,-45}, -{60,62,-44}, -{60,62,-43}, -{60,62,-42}, -{60,62,-41}, -{60,62,-40}, -{60,62,-39}, -{60,62,-38}, -{60,62,-37}, -{60,62,-36}, -{60,62,-35}, -{60,62,-34}, -{60,62,-33}, -{60,62,-32}, -{60,62,-31}, -{60,62,-30}, -{60,62,-29}, -{60,62,-28}, -{60,62,-27}, -{60,62,-26}, -{60,62,-25}, -{60,62,-24}, -{60,62,-23}, -{60,62,-22}, -{60,62,-21}, -{60,62,-20}, -{60,62,-19}, -{60,62,-18}, -{60,62,-17}, -{60,62,-16}, -{60,62,-15}, -{60,62,-14}, -{60,62,-13}, -{60,62,-12}, -{60,62,-11}, -{60,62,-10}, -{60,62,-9}, -{60,62,-8}, -{60,62,-7}, -{60,62,-6}, -{60,62,-5}, -{60,62,-4}, -{60,62,-3}, -{60,62,-2}, -{60,62,-1}, -{60,62,0}, -{60,62,1}, -{60,62,2}, -{60,62,3}, -{60,62,4}, -{60,62,5}, -{60,62,6}, -{60,62,7}, -{60,62,8}, -{60,62,9}, -{60,62,10}, -{60,62,11}, -{60,62,12}, -{60,62,13}, -{60,62,14}, -{60,62,15}, -{60,62,16}, -{60,62,17}, -{60,62,18}, -{60,62,19}, -{60,62,20}, -{60,62,21}, -{60,62,22}, -{60,62,23}, -{60,62,24}, -{60,62,25}, -{60,62,26}, -{60,62,27}, -{60,62,28}, -{60,62,29}, -{60,62,30}, -{60,62,31}, -{60,62,32}, -{60,62,33}, -{60,62,34}, -{60,62,35}, -{60,62,36}, -{60,62,37}, -{60,62,38}, -{60,62,39}, -{60,62,40}, -{60,62,41}, -{60,62,42}, -{60,62,43}, -{60,62,44}, -{60,62,45}, -{60,62,46}, -{60,62,47}, -{60,62,48}, -{60,62,49}, -{60,62,50}, -{60,62,51}, -{60,62,52}, -{60,62,53}, -{60,62,54}, -{60,62,55}, -{60,62,56}, -{60,62,57}, -{60,62,58}, -{60,62,59}, -{60,62,60}, -{60,62,61}, -{60,62,62}, -{60,63,-61}, -{60,63,-60}, -{60,63,-59}, -{60,63,-58}, -{60,63,-57}, -{60,63,-56}, -{60,63,-55}, -{60,63,-54}, -{60,63,-53}, -{60,63,-52}, -{60,63,-51}, -{60,63,-50}, -{60,63,-49}, -{60,63,-48}, -{60,63,-47}, -{60,63,-46}, -{60,63,-45}, -{60,63,-44}, -{60,63,-43}, -{60,63,-42}, -{60,63,-41}, -{60,63,-40}, -{60,63,-39}, -{60,63,-38}, -{60,63,-37}, -{60,63,-36}, -{60,63,-35}, -{60,63,-34}, -{60,63,-33}, -{60,63,-32}, -{60,63,-31}, -{60,63,-30}, -{60,63,-29}, -{60,63,-28}, -{60,63,-27}, -{60,63,-26}, -{60,63,-25}, -{60,63,-24}, -{60,63,-23}, -{60,63,-22}, -{60,63,-21}, -{60,63,-20}, -{60,63,-19}, -{60,63,-18}, -{60,63,-17}, -{60,63,-16}, -{60,63,-15}, -{60,63,-14}, -{60,63,-13}, -{60,63,-12}, -{60,63,-11}, -{60,63,-10}, -{60,63,-9}, -{60,63,-8}, -{60,63,-7}, -{60,63,-6}, -{60,63,-5}, -{60,63,-4}, -{60,63,-3}, -{60,63,-2}, -{60,63,-1}, -{60,63,0}, -{60,63,1}, -{60,63,2}, -{60,63,3}, -{60,63,4}, -{60,63,5}, -{60,63,6}, -{60,63,7}, -{60,63,8}, -{60,63,9}, -{60,63,10}, -{60,63,11}, -{60,63,12}, -{60,63,13}, -{60,63,14}, -{60,63,15}, -{60,63,16}, -{60,63,17}, -{60,63,18}, -{60,63,19}, -{60,63,20}, -{60,63,21}, -{60,63,22}, -{60,63,23}, -{60,63,24}, -{60,63,25}, -{60,63,26}, -{60,63,27}, -{60,63,28}, -{60,63,29}, -{60,63,30}, -{60,63,31}, -{60,63,32}, -{60,63,33}, -{60,63,34}, -{60,63,35}, -{60,63,36}, -{60,63,37}, -{60,63,38}, -{60,63,39}, -{60,63,40}, -{60,63,41}, -{60,63,42}, -{60,63,43}, -{60,63,44}, -{60,63,45}, -{60,63,46}, -{60,63,47}, -{60,63,48}, -{60,63,49}, -{60,63,50}, -{60,63,51}, -{60,63,52}, -{60,64,-61}, -{60,64,-60}, -{60,64,-59}, -{60,64,-58}, -{60,64,-57}, -{60,64,-56}, -{60,64,-55}, -{60,64,-54}, -{60,64,-53}, -{60,64,-52}, -{60,64,-51}, -{60,64,-50}, -{60,64,-49}, -{60,64,-48}, -{60,64,-47}, -{60,64,-46}, -{60,64,-45}, -{60,64,-44}, -{60,64,-43}, -{60,64,-42}, -{60,64,-41}, -{60,64,-40}, -{60,64,-39}, -{60,64,-38}, -{60,64,-37}, -{60,64,-36}, -{60,64,-35}, -{60,64,-34}, -{60,64,-33}, -{60,64,-32}, -{60,64,-31}, -{60,64,-30}, -{60,64,-29}, -{60,64,-28}, -{60,64,-27}, -{60,64,-26}, -{60,64,-25}, -{60,64,-24}, -{60,64,-23}, -{60,64,-22}, -{60,64,-21}, -{60,64,-20}, -{60,64,-19}, -{60,64,-18}, -{60,64,-17}, -{60,64,-16}, -{60,64,-15}, -{60,64,-14}, -{60,64,-13}, -{60,64,-12}, -{60,64,-11}, -{60,64,-10}, -{60,64,-9}, -{60,64,-8}, -{60,64,-7}, -{60,64,-6}, -{60,64,-5}, -{60,64,-4}, -{60,64,-3}, -{60,64,-2}, -{60,64,-1}, -{60,64,0}, -{60,64,1}, -{60,64,2}, -{60,64,3}, -{60,64,4}, -{60,64,5}, -{60,64,6}, -{60,64,7}, -{60,64,8}, -{60,64,9}, -{60,64,10}, -{60,64,11}, -{60,64,12}, -{60,64,13}, -{60,64,14}, -{60,64,15}, -{60,64,16}, -{60,64,17}, -{60,64,18}, -{60,64,19}, -{60,64,20}, -{60,64,21}, -{60,64,22}, -{60,64,23}, -{60,64,24}, -{60,64,25}, -{60,64,26}, -{60,64,27}, -{60,64,28}, -{60,64,29}, -{60,64,30}, -{60,64,31}, -{60,64,32}, -{60,64,33}, -{60,64,34}, -{60,64,35}, -{60,64,36}, -{60,64,37}, -{60,64,38}, -{60,64,39}, -{60,64,40}, -{60,64,41}, -{60,64,42}, -{60,64,43}, -{60,65,-61}, -{60,65,-60}, -{60,65,-59}, -{60,65,-58}, -{60,65,-57}, -{60,65,-56}, -{60,65,-55}, -{60,65,-54}, -{60,65,-53}, -{60,65,-52}, -{60,65,-51}, -{60,65,-50}, -{60,65,-49}, -{60,65,-48}, -{60,65,-47}, -{60,65,-46}, -{60,65,-45}, -{60,65,-44}, -{60,65,-43}, -{60,65,-42}, -{60,65,-41}, -{60,65,-40}, -{60,65,-39}, -{60,65,-38}, -{60,65,-37}, -{60,65,-36}, -{60,65,-35}, -{60,65,-34}, -{60,65,-33}, -{60,65,-32}, -{60,65,-31}, -{60,65,-30}, -{60,65,-29}, -{60,65,-28}, -{60,65,-27}, -{60,65,-26}, -{60,65,-25}, -{60,65,-24}, -{60,65,-23}, -{60,65,-22}, -{60,65,-21}, -{60,65,-20}, -{60,65,-19}, -{60,65,-18}, -{60,65,-17}, -{60,65,-16}, -{60,65,-15}, -{60,65,-14}, -{60,65,-13}, -{60,65,-12}, -{60,65,-11}, -{60,65,-10}, -{60,65,-9}, -{60,65,-8}, -{60,65,-7}, -{60,65,-6}, -{60,65,-5}, -{60,65,-4}, -{60,65,-3}, -{60,65,-2}, -{60,65,-1}, -{60,65,0}, -{60,65,1}, -{60,65,2}, -{60,65,3}, -{60,65,4}, -{60,65,5}, -{60,65,6}, -{60,65,7}, -{60,65,8}, -{60,65,9}, -{60,65,10}, -{60,65,11}, -{60,65,12}, -{60,65,13}, -{60,65,14}, -{60,65,15}, -{60,65,16}, -{60,65,17}, -{60,65,18}, -{60,65,19}, -{60,65,20}, -{60,65,21}, -{60,65,22}, -{60,65,23}, -{60,65,24}, -{60,65,25}, -{60,65,26}, -{60,65,27}, -{60,65,28}, -{60,65,29}, -{60,65,30}, -{60,65,31}, -{60,65,32}, -{60,65,33}, -{60,65,34}, -{60,65,35}, -{60,65,36}, -{60,65,37}, -{60,66,-61}, -{60,66,-60}, -{60,66,-59}, -{60,66,-58}, -{60,66,-57}, -{60,66,-56}, -{60,66,-55}, -{60,66,-54}, -{60,66,-53}, -{60,66,-52}, -{60,66,-51}, -{60,66,-50}, -{60,66,-49}, -{60,66,-48}, -{60,66,-47}, -{60,66,-46}, -{60,66,-45}, -{60,66,-44}, -{60,66,-43}, -{60,66,-42}, -{60,66,-41}, -{60,66,-40}, -{60,66,-39}, -{60,66,-38}, -{60,66,-37}, -{60,66,-36}, -{60,66,-35}, -{60,66,-34}, -{60,66,-33}, -{60,66,-32}, -{60,66,-31}, -{60,66,-30}, -{60,66,-29}, -{60,66,-28}, -{60,66,-27}, -{60,66,-26}, -{60,66,-25}, -{60,66,-24}, -{60,66,-23}, -{60,66,-22}, -{60,66,-21}, -{60,66,-20}, -{60,66,-19}, -{60,66,-18}, -{60,66,-17}, -{60,66,-16}, -{60,66,-15}, -{60,66,-14}, -{60,66,-13}, -{60,66,-12}, -{60,66,-11}, -{60,66,-10}, -{60,66,-9}, -{60,66,-8}, -{60,66,-7}, -{60,66,-6}, -{60,66,-5}, -{60,66,-4}, -{60,66,-3}, -{60,66,-2}, -{60,66,-1}, -{60,66,0}, -{60,66,1}, -{60,66,2}, -{60,66,3}, -{60,66,4}, -{60,66,5}, -{60,66,6}, -{60,66,7}, -{60,66,8}, -{60,66,9}, -{60,66,10}, -{60,66,11}, -{60,66,12}, -{60,66,13}, -{60,66,14}, -{60,66,15}, -{60,66,16}, -{60,66,17}, -{60,66,18}, -{60,66,19}, -{60,66,20}, -{60,66,21}, -{60,66,22}, -{60,66,23}, -{60,66,24}, -{60,66,25}, -{60,66,26}, -{60,66,27}, -{60,66,28}, -{60,66,29}, -{60,66,30}, -{60,66,31}, -{60,67,-61}, -{60,67,-60}, -{60,67,-59}, -{60,67,-58}, -{60,67,-57}, -{60,67,-56}, -{60,67,-55}, -{60,67,-54}, -{60,67,-53}, -{60,67,-52}, -{60,67,-51}, -{60,67,-50}, -{60,67,-49}, -{60,67,-48}, -{60,67,-47}, -{60,67,-46}, -{60,67,-45}, -{60,67,-44}, -{60,67,-43}, -{60,67,-42}, -{60,67,-41}, -{60,67,-40}, -{60,67,-39}, -{60,67,-38}, -{60,67,-37}, -{60,67,-36}, -{60,67,-35}, -{60,67,-34}, -{60,67,-33}, -{60,67,-32}, -{60,67,-31}, -{60,67,-30}, -{60,67,-29}, -{60,67,-28}, -{60,67,-27}, -{60,67,-26}, -{60,67,-25}, -{60,67,-24}, -{60,67,-23}, -{60,67,-22}, -{60,67,-21}, -{60,67,-20}, -{60,67,-19}, -{60,67,-18}, -{60,67,-17}, -{60,67,-16}, -{60,67,-15}, -{60,67,-14}, -{60,67,-13}, -{60,67,-12}, -{60,67,-11}, -{60,67,-10}, -{60,67,-9}, -{60,67,-8}, -{60,67,-7}, -{60,67,-6}, -{60,67,-5}, -{60,67,-4}, -{60,67,-3}, -{60,67,-2}, -{60,67,-1}, -{60,67,0}, -{60,67,1}, -{60,67,2}, -{60,67,3}, -{60,67,4}, -{60,67,5}, -{60,67,6}, -{60,67,7}, -{60,67,8}, -{60,67,9}, -{60,67,10}, -{60,67,11}, -{60,67,12}, -{60,67,13}, -{60,67,14}, -{60,67,15}, -{60,67,16}, -{60,67,17}, -{60,67,18}, -{60,67,19}, -{60,67,20}, -{60,67,21}, -{60,67,22}, -{60,67,23}, -{60,67,24}, -{60,67,25}, -{60,68,-61}, -{60,68,-60}, -{60,68,-59}, -{60,68,-58}, -{60,68,-57}, -{60,68,-56}, -{60,68,-55}, -{60,68,-54}, -{60,68,-53}, -{60,68,-52}, -{60,68,-51}, -{60,68,-50}, -{60,68,-49}, -{60,68,-48}, -{60,68,-47}, -{60,68,-46}, -{60,68,-45}, -{60,68,-44}, -{60,68,-43}, -{60,68,-42}, -{60,68,-41}, -{60,68,-40}, -{60,68,-39}, -{60,68,-38}, -{60,68,-37}, -{60,68,-36}, -{60,68,-35}, -{60,68,-34}, -{60,68,-33}, -{60,68,-32}, -{60,68,-31}, -{60,68,-30}, -{60,68,-29}, -{60,68,-28}, -{60,68,-27}, -{60,68,-26}, -{60,68,-25}, -{60,68,-24}, -{60,68,-23}, -{60,68,-22}, -{60,68,-21}, -{60,68,-20}, -{60,68,-19}, -{60,68,-18}, -{60,68,-17}, -{60,68,-16}, -{60,68,-15}, -{60,68,-14}, -{60,68,-13}, -{60,68,-12}, -{60,68,-11}, -{60,68,-10}, -{60,68,-9}, -{60,68,-8}, -{60,68,-7}, -{60,68,-6}, -{60,68,-5}, -{60,68,-4}, -{60,68,-3}, -{60,68,-2}, -{60,68,-1}, -{60,68,0}, -{60,68,1}, -{60,68,2}, -{60,68,3}, -{60,68,4}, -{60,68,5}, -{60,68,6}, -{60,68,7}, -{60,68,8}, -{60,68,9}, -{60,68,10}, -{60,68,11}, -{60,68,12}, -{60,68,13}, -{60,68,14}, -{60,68,15}, -{60,68,16}, -{60,68,17}, -{60,68,18}, -{60,68,19}, -{60,68,20}, -{60,69,-61}, -{60,69,-60}, -{60,69,-59}, -{60,69,-58}, -{60,69,-57}, -{60,69,-56}, -{60,69,-55}, -{60,69,-54}, -{60,69,-53}, -{60,69,-52}, -{60,69,-51}, -{60,69,-50}, -{60,69,-49}, -{60,69,-48}, -{60,69,-47}, -{60,69,-46}, -{60,69,-45}, -{60,69,-44}, -{60,69,-43}, -{60,69,-42}, -{60,69,-41}, -{60,69,-40}, -{60,69,-39}, -{60,69,-38}, -{60,69,-37}, -{60,69,-36}, -{60,69,-35}, -{60,69,-34}, -{60,69,-33}, -{60,69,-32}, -{60,69,-31}, -{60,69,-30}, -{60,69,-29}, -{60,69,-28}, -{60,69,-27}, -{60,69,-26}, -{60,69,-25}, -{60,69,-24}, -{60,69,-23}, -{60,69,-22}, -{60,69,-21}, -{60,69,-20}, -{60,69,-19}, -{60,69,-18}, -{60,69,-17}, -{60,69,-16}, -{60,69,-15}, -{60,69,-14}, -{60,69,-13}, -{60,69,-12}, -{60,69,-11}, -{60,69,-10}, -{60,69,-9}, -{60,69,-8}, -{60,69,-7}, -{60,69,-6}, -{60,69,-5}, -{60,69,-4}, -{60,69,-3}, -{60,69,-2}, -{60,69,-1}, -{60,69,0}, -{60,69,1}, -{60,69,2}, -{60,69,3}, -{60,69,4}, -{60,69,5}, -{60,69,6}, -{60,69,7}, -{60,69,8}, -{60,69,9}, -{60,69,10}, -{60,69,11}, -{60,69,12}, -{60,69,13}, -{60,69,14}, -{60,69,15}, -{60,69,16}, -{60,70,-61}, -{60,70,-60}, -{60,70,-59}, -{60,70,-58}, -{60,70,-57}, -{60,70,-56}, -{60,70,-55}, -{60,70,-54}, -{60,70,-53}, -{60,70,-52}, -{60,70,-51}, -{60,70,-50}, -{60,70,-49}, -{60,70,-48}, -{60,70,-47}, -{60,70,-46}, -{60,70,-45}, -{60,70,-44}, -{60,70,-43}, -{60,70,-42}, -{60,70,-41}, -{60,70,-40}, -{60,70,-39}, -{60,70,-38}, -{60,70,-37}, -{60,70,-36}, -{60,70,-35}, -{60,70,-34}, -{60,70,-33}, -{60,70,-32}, -{60,70,-31}, -{60,70,-30}, -{60,70,-29}, -{60,70,-28}, -{60,70,-27}, -{60,70,-26}, -{60,70,-25}, -{60,70,-24}, -{60,70,-23}, -{60,70,-22}, -{60,70,-21}, -{60,70,-20}, -{60,70,-19}, -{60,70,-18}, -{60,70,-17}, -{60,70,-16}, -{60,70,-15}, -{60,70,-14}, -{60,70,-13}, -{60,70,-12}, -{60,70,-11}, -{60,70,-10}, -{60,70,-9}, -{60,70,-8}, -{60,70,-7}, -{60,70,-6}, -{60,70,-5}, -{60,70,-4}, -{60,70,-3}, -{60,70,-2}, -{60,70,-1}, -{60,70,0}, -{60,70,1}, -{60,70,2}, -{60,70,3}, -{60,70,4}, -{60,70,5}, -{60,70,6}, -{60,70,7}, -{60,70,8}, -{60,70,9}, -{60,70,10}, -{60,70,11}, -{60,70,12}, -{60,71,-61}, -{60,71,-60}, -{60,71,-59}, -{60,71,-58}, -{60,71,-57}, -{60,71,-56}, -{60,71,-55}, -{60,71,-54}, -{60,71,-53}, -{60,71,-52}, -{60,71,-51}, -{60,71,-50}, -{60,71,-49}, -{60,71,-48}, -{60,71,-47}, -{60,71,-46}, -{60,71,-45}, -{60,71,-44}, -{60,71,-43}, -{60,71,-42}, -{60,71,-41}, -{60,71,-40}, -{60,71,-39}, -{60,71,-38}, -{60,71,-37}, -{60,71,-36}, -{60,71,-35}, -{60,71,-34}, -{60,71,-33}, -{60,71,-32}, -{60,71,-31}, -{60,71,-30}, -{60,71,-29}, -{60,71,-28}, -{60,71,-27}, -{60,71,-26}, -{60,71,-25}, -{60,71,-24}, -{60,71,-23}, -{60,71,-22}, -{60,71,-21}, -{60,71,-20}, -{60,71,-19}, -{60,71,-18}, -{60,71,-17}, -{60,71,-16}, -{60,71,-15}, -{60,71,-14}, -{60,71,-13}, -{60,71,-12}, -{60,71,-11}, -{60,71,-10}, -{60,71,-9}, -{60,71,-8}, -{60,71,-7}, -{60,71,-6}, -{60,71,-5}, -{60,71,-4}, -{60,71,-3}, -{60,71,-2}, -{60,71,-1}, -{60,71,0}, -{60,71,1}, -{60,71,2}, -{60,71,3}, -{60,71,4}, -{60,71,5}, -{60,71,6}, -{60,71,7}, -{60,71,8}, -{60,72,-61}, -{60,72,-60}, -{60,72,-59}, -{60,72,-58}, -{60,72,-57}, -{60,72,-56}, -{60,72,-55}, -{60,72,-54}, -{60,72,-53}, -{60,72,-52}, -{60,72,-51}, -{60,72,-50}, -{60,72,-49}, -{60,72,-48}, -{60,72,-47}, -{60,72,-46}, -{60,72,-45}, -{60,72,-44}, -{60,72,-43}, -{60,72,-42}, -{60,72,-41}, -{60,72,-40}, -{60,72,-39}, -{60,72,-38}, -{60,72,-37}, -{60,72,-36}, -{60,72,-35}, -{60,72,-34}, -{60,72,-33}, -{60,72,-32}, -{60,72,-31}, -{60,72,-30}, -{60,72,-29}, -{60,72,-28}, -{60,72,-27}, -{60,72,-26}, -{60,72,-25}, -{60,72,-24}, -{60,72,-23}, -{60,72,-22}, -{60,72,-21}, -{60,72,-20}, -{60,72,-19}, -{60,72,-18}, -{60,72,-17}, -{60,72,-16}, -{60,72,-15}, -{60,72,-14}, -{60,72,-13}, -{60,72,-12}, -{60,72,-11}, -{60,72,-10}, -{60,72,-9}, -{60,72,-8}, -{60,72,-7}, -{60,72,-6}, -{60,72,-5}, -{60,72,-4}, -{60,72,-3}, -{60,72,-2}, -{60,72,-1}, -{60,72,0}, -{60,72,1}, -{60,72,2}, -{60,72,3}, -{60,72,4}, -{60,73,-61}, -{60,73,-60}, -{60,73,-59}, -{60,73,-58}, -{60,73,-57}, -{60,73,-56}, -{60,73,-55}, -{60,73,-54}, -{60,73,-53}, -{60,73,-52}, -{60,73,-51}, -{60,73,-50}, -{60,73,-49}, -{60,73,-48}, -{60,73,-47}, -{60,73,-46}, -{60,73,-45}, -{60,73,-44}, -{60,73,-43}, -{60,73,-42}, -{60,73,-41}, -{60,73,-40}, -{60,73,-39}, -{60,73,-38}, -{60,73,-37}, -{60,73,-36}, -{60,73,-35}, -{60,73,-34}, -{60,73,-33}, -{60,73,-32}, -{60,73,-31}, -{60,73,-30}, -{60,73,-29}, -{60,73,-28}, -{60,73,-27}, -{60,73,-26}, -{60,73,-25}, -{60,73,-24}, -{60,73,-23}, -{60,73,-22}, -{60,73,-21}, -{60,73,-20}, -{60,73,-19}, -{60,73,-18}, -{60,73,-17}, -{60,73,-16}, -{60,73,-15}, -{60,73,-14}, -{60,73,-13}, -{60,73,-12}, -{60,73,-11}, -{60,73,-10}, -{60,73,-9}, -{60,73,-8}, -{60,73,-7}, -{60,73,-6}, -{60,73,-5}, -{60,73,-4}, -{60,73,-3}, -{60,73,-2}, -{60,73,-1}, -{60,73,0}, -{60,73,1}, -{60,74,-61}, -{60,74,-60}, -{60,74,-59}, -{60,74,-58}, -{60,74,-57}, -{60,74,-56}, -{60,74,-55}, -{60,74,-54}, -{60,74,-53}, -{60,74,-52}, -{60,74,-51}, -{60,74,-50}, -{60,74,-49}, -{60,74,-48}, -{60,74,-47}, -{60,74,-46}, -{60,74,-45}, -{60,74,-44}, -{60,74,-43}, -{60,74,-42}, -{60,74,-41}, -{60,74,-40}, -{60,74,-39}, -{60,74,-38}, -{60,74,-37}, -{60,74,-36}, -{60,74,-35}, -{60,74,-34}, -{60,74,-33}, -{60,74,-32}, -{60,74,-31}, -{60,74,-30}, -{60,74,-29}, -{60,74,-28}, -{60,74,-27}, -{60,74,-26}, -{60,74,-25}, -{60,74,-24}, -{60,74,-23}, -{60,74,-22}, -{60,74,-21}, -{60,74,-20}, -{60,74,-19}, -{60,74,-18}, -{60,74,-17}, -{60,74,-16}, -{60,74,-15}, -{60,74,-14}, -{60,74,-13}, -{60,74,-12}, -{60,74,-11}, -{60,74,-10}, -{60,74,-9}, -{60,74,-8}, -{60,74,-7}, -{60,74,-6}, -{60,74,-5}, -{60,74,-4}, -{60,74,-3}, -{60,75,-61}, -{60,75,-60}, -{60,75,-59}, -{60,75,-58}, -{60,75,-57}, -{60,75,-56}, -{60,75,-55}, -{60,75,-54}, -{60,75,-53}, -{60,75,-52}, -{60,75,-51}, -{60,75,-50}, -{60,75,-49}, -{60,75,-48}, -{60,75,-47}, -{60,75,-46}, -{60,75,-45}, -{60,75,-44}, -{60,75,-43}, -{60,75,-42}, -{60,75,-41}, -{60,75,-40}, -{60,75,-39}, -{60,75,-38}, -{60,75,-37}, -{60,75,-36}, -{60,75,-35}, -{60,75,-34}, -{60,75,-33}, -{60,75,-32}, -{60,75,-31}, -{60,75,-30}, -{60,75,-29}, -{60,75,-28}, -{60,75,-27}, -{60,75,-26}, -{60,75,-25}, -{60,75,-24}, -{60,75,-23}, -{60,75,-22}, -{60,75,-21}, -{60,75,-20}, -{60,75,-19}, -{60,75,-18}, -{60,75,-17}, -{60,75,-16}, -{60,75,-15}, -{60,75,-14}, -{60,75,-13}, -{60,75,-12}, -{60,75,-11}, -{60,75,-10}, -{60,75,-9}, -{60,75,-8}, -{60,75,-7}, -{60,75,-6}, -{60,76,-61}, -{60,76,-60}, -{60,76,-59}, -{60,76,-58}, -{60,76,-57}, -{60,76,-56}, -{60,76,-55}, -{60,76,-54}, -{60,76,-53}, -{60,76,-52}, -{60,76,-51}, -{60,76,-50}, -{60,76,-49}, -{60,76,-48}, -{60,76,-47}, -{60,76,-46}, -{60,76,-45}, -{60,76,-44}, -{60,76,-43}, -{60,76,-42}, -{60,76,-41}, -{60,76,-40}, -{60,76,-39}, -{60,76,-38}, -{60,76,-37}, -{60,76,-36}, -{60,76,-35}, -{60,76,-34}, -{60,76,-33}, -{60,76,-32}, -{60,76,-31}, -{60,76,-30}, -{60,76,-29}, -{60,76,-28}, -{60,76,-27}, -{60,76,-26}, -{60,76,-25}, -{60,76,-24}, -{60,76,-23}, -{60,76,-22}, -{60,76,-21}, -{60,76,-20}, -{60,76,-19}, -{60,76,-18}, -{60,76,-17}, -{60,76,-16}, -{60,76,-15}, -{60,76,-14}, -{60,76,-13}, -{60,76,-12}, -{60,76,-11}, -{60,76,-10}, -{60,76,-9}, -{60,77,-61}, -{60,77,-60}, -{60,77,-59}, -{60,77,-58}, -{60,77,-57}, -{60,77,-56}, -{60,77,-55}, -{60,77,-54}, -{60,77,-53}, -{60,77,-52}, -{60,77,-51}, -{60,77,-50}, -{60,77,-49}, -{60,77,-48}, -{60,77,-47}, -{60,77,-46}, -{60,77,-45}, -{60,77,-44}, -{60,77,-43}, -{60,77,-42}, -{60,77,-41}, -{60,77,-40}, -{60,77,-39}, -{60,77,-38}, -{60,77,-37}, -{60,77,-36}, -{60,77,-35}, -{60,77,-34}, -{60,77,-33}, -{60,77,-32}, -{60,77,-31}, -{60,77,-30}, -{60,77,-29}, -{60,77,-28}, -{60,77,-27}, -{60,77,-26}, -{60,77,-25}, -{60,77,-24}, -{60,77,-23}, -{60,77,-22}, -{60,77,-21}, -{60,77,-20}, -{60,77,-19}, -{60,77,-18}, -{60,77,-17}, -{60,77,-16}, -{60,77,-15}, -{60,77,-14}, -{60,77,-13}, -{60,77,-12}, -{60,78,-61}, -{60,78,-60}, -{60,78,-59}, -{60,78,-58}, -{60,78,-57}, -{60,78,-56}, -{60,78,-55}, -{60,78,-54}, -{60,78,-53}, -{60,78,-52}, -{60,78,-51}, -{60,78,-50}, -{60,78,-49}, -{60,78,-48}, -{60,78,-47}, -{60,78,-46}, -{60,78,-45}, -{60,78,-44}, -{60,78,-43}, -{60,78,-42}, -{60,78,-41}, -{60,78,-40}, -{60,78,-39}, -{60,78,-38}, -{60,78,-37}, -{60,78,-36}, -{60,78,-35}, -{60,78,-34}, -{60,78,-33}, -{60,78,-32}, -{60,78,-31}, -{60,78,-30}, -{60,78,-29}, -{60,78,-28}, -{60,78,-27}, -{60,78,-26}, -{60,78,-25}, -{60,78,-24}, -{60,78,-23}, -{60,78,-22}, -{60,78,-21}, -{60,78,-20}, -{60,78,-19}, -{60,78,-18}, -{60,78,-17}, -{60,78,-16}, -{60,78,-15}, -{60,79,-61}, -{60,79,-60}, -{60,79,-59}, -{60,79,-58}, -{60,79,-57}, -{60,79,-56}, -{60,79,-55}, -{60,79,-54}, -{60,79,-53}, -{60,79,-52}, -{60,79,-51}, -{60,79,-50}, -{60,79,-49}, -{60,79,-48}, -{60,79,-47}, -{60,79,-46}, -{60,79,-45}, -{60,79,-44}, -{60,79,-43}, -{60,79,-42}, -{60,79,-41}, -{60,79,-40}, -{60,79,-39}, -{60,79,-38}, -{60,79,-37}, -{60,79,-36}, -{60,79,-35}, -{60,79,-34}, -{60,79,-33}, -{60,79,-32}, -{60,79,-31}, -{60,79,-30}, -{60,79,-29}, -{60,79,-28}, -{60,79,-27}, -{60,79,-26}, -{60,79,-25}, -{60,79,-24}, -{60,79,-23}, -{60,79,-22}, -{60,79,-21}, -{60,79,-20}, -{60,79,-19}, -{60,79,-18}, -{60,80,-61}, -{60,80,-60}, -{60,80,-59}, -{60,80,-58}, -{60,80,-57}, -{60,80,-56}, -{60,80,-55}, -{60,80,-54}, -{60,80,-53}, -{60,80,-52}, -{60,80,-51}, -{60,80,-50}, -{60,80,-49}, -{60,80,-48}, -{60,80,-47}, -{60,80,-46}, -{60,80,-45}, -{60,80,-44}, -{60,80,-43}, -{60,80,-42}, -{60,80,-41}, -{60,80,-40}, -{60,80,-39}, -{60,80,-38}, -{60,80,-37}, -{60,80,-36}, -{60,80,-35}, -{60,80,-34}, -{60,80,-33}, -{60,80,-32}, -{60,80,-31}, -{60,80,-30}, -{60,80,-29}, -{60,80,-28}, -{60,80,-27}, -{60,80,-26}, -{60,80,-25}, -{60,80,-24}, -{60,80,-23}, -{60,80,-22}, -{60,80,-21}, -{60,80,-20}, -{60,81,-61}, -{60,81,-60}, -{60,81,-59}, -{60,81,-58}, -{60,81,-57}, -{60,81,-56}, -{60,81,-55}, -{60,81,-54}, -{60,81,-53}, -{60,81,-52}, -{60,81,-51}, -{60,81,-50}, -{60,81,-49}, -{60,81,-48}, -{60,81,-47}, -{60,81,-46}, -{60,81,-45}, -{60,81,-44}, -{60,81,-43}, -{60,81,-42}, -{60,81,-41}, -{60,81,-40}, -{60,81,-39}, -{60,81,-38}, -{60,81,-37}, -{60,81,-36}, -{60,81,-35}, -{60,81,-34}, -{60,81,-33}, -{60,81,-32}, -{60,81,-31}, -{60,81,-30}, -{60,81,-29}, -{60,81,-28}, -{60,81,-27}, -{60,81,-26}, -{60,81,-25}, -{60,81,-24}, -{60,81,-23}, -{60,82,-61}, -{60,82,-60}, -{60,82,-59}, -{60,82,-58}, -{60,82,-57}, -{60,82,-56}, -{60,82,-55}, -{60,82,-54}, -{60,82,-53}, -{60,82,-52}, -{60,82,-51}, -{60,82,-50}, -{60,82,-49}, -{60,82,-48}, -{60,82,-47}, -{60,82,-46}, -{60,82,-45}, -{60,82,-44}, -{60,82,-43}, -{60,82,-42}, -{60,82,-41}, -{60,82,-40}, -{60,82,-39}, -{60,82,-38}, -{60,82,-37}, -{60,82,-36}, -{60,82,-35}, -{60,82,-34}, -{60,82,-33}, -{60,82,-32}, -{60,82,-31}, -{60,82,-30}, -{60,82,-29}, -{60,82,-28}, -{60,82,-27}, -{60,82,-26}, -{60,83,-61}, -{60,83,-60}, -{60,83,-59}, -{60,83,-58}, -{60,83,-57}, -{60,83,-56}, -{60,83,-55}, -{60,83,-54}, -{60,83,-53}, -{60,83,-52}, -{60,83,-51}, -{60,83,-50}, -{60,83,-49}, -{60,83,-48}, -{60,83,-47}, -{60,83,-46}, -{60,83,-45}, -{60,83,-44}, -{60,83,-43}, -{60,83,-42}, -{60,83,-41}, -{60,83,-40}, -{60,83,-39}, -{60,83,-38}, -{60,83,-37}, -{60,83,-36}, -{60,83,-35}, -{60,83,-34}, -{60,83,-33}, -{60,83,-32}, -{60,83,-31}, -{60,83,-30}, -{60,83,-29}, -{60,83,-28}, -{60,84,-61}, -{60,84,-60}, -{60,84,-59}, -{60,84,-58}, -{60,84,-57}, -{60,84,-56}, -{60,84,-55}, -{60,84,-54}, -{60,84,-53}, -{60,84,-52}, -{60,84,-51}, -{60,84,-50}, -{60,84,-49}, -{60,84,-48}, -{60,84,-47}, -{60,84,-46}, -{60,84,-45}, -{60,84,-44}, -{60,84,-43}, -{60,84,-42}, -{60,84,-41}, -{60,84,-40}, -{60,84,-39}, -{60,84,-38}, -{60,84,-37}, -{60,84,-36}, -{60,84,-35}, -{60,84,-34}, -{60,84,-33}, -{60,84,-32}, -{60,84,-31}, -{60,84,-30}, -{60,85,-61}, -{60,85,-60}, -{60,85,-59}, -{60,85,-58}, -{60,85,-57}, -{60,85,-56}, -{60,85,-55}, -{60,85,-54}, -{60,85,-53}, -{60,85,-52}, -{60,85,-51}, -{60,85,-50}, -{60,85,-49}, -{60,85,-48}, -{60,85,-47}, -{60,85,-46}, -{60,85,-45}, -{60,85,-44}, -{60,85,-43}, -{60,85,-42}, -{60,85,-41}, -{60,85,-40}, -{60,85,-39}, -{60,85,-38}, -{60,85,-37}, -{60,85,-36}, -{60,85,-35}, -{60,85,-34}, -{60,85,-33}, -{60,86,-61}, -{60,86,-60}, -{60,86,-59}, -{60,86,-58}, -{60,86,-57}, -{60,86,-56}, -{60,86,-55}, -{60,86,-54}, -{60,86,-53}, -{60,86,-52}, -{60,86,-51}, -{60,86,-50}, -{60,86,-49}, -{60,86,-48}, -{60,86,-47}, -{60,86,-46}, -{60,86,-45}, -{60,86,-44}, -{60,86,-43}, -{60,86,-42}, -{60,86,-41}, -{60,86,-40}, -{60,86,-39}, -{60,86,-38}, -{60,86,-37}, -{60,86,-36}, -{60,86,-35}, -{60,87,-61}, -{60,87,-60}, -{60,87,-59}, -{60,87,-58}, -{60,87,-57}, -{60,87,-56}, -{60,87,-55}, -{60,87,-54}, -{60,87,-53}, -{60,87,-52}, -{60,87,-51}, -{60,87,-50}, -{60,87,-49}, -{60,87,-48}, -{60,87,-47}, -{60,87,-46}, -{60,87,-45}, -{60,87,-44}, -{60,87,-43}, -{60,87,-42}, -{60,87,-41}, -{60,87,-40}, -{60,87,-39}, -{60,87,-38}, -{60,87,-37}, -{60,88,-61}, -{60,88,-60}, -{60,88,-59}, -{60,88,-58}, -{60,88,-57}, -{60,88,-56}, -{60,88,-55}, -{60,88,-54}, -{60,88,-53}, -{60,88,-52}, -{60,88,-51}, -{60,88,-50}, -{60,88,-49}, -{60,88,-48}, -{60,88,-47}, -{60,88,-46}, -{60,88,-45}, -{60,88,-44}, -{60,88,-43}, -{60,88,-42}, -{60,88,-41}, -{60,88,-40}, -{60,88,-39}, -{60,89,-61}, -{60,89,-60}, -{60,89,-59}, -{60,89,-58}, -{60,89,-57}, -{60,89,-56}, -{60,89,-55}, -{60,89,-54}, -{60,89,-53}, -{60,89,-52}, -{60,89,-51}, -{60,89,-50}, -{60,89,-49}, -{60,89,-48}, -{60,89,-47}, -{60,89,-46}, -{60,89,-45}, -{60,89,-44}, -{60,89,-43}, -{60,89,-42}, -{60,90,-61}, -{60,90,-60}, -{60,90,-59}, -{60,90,-58}, -{60,90,-57}, -{60,90,-56}, -{60,90,-55}, -{60,90,-54}, -{60,90,-53}, -{60,90,-52}, -{60,90,-51}, -{60,90,-50}, -{60,90,-49}, -{60,90,-48}, -{60,90,-47}, -{60,90,-46}, -{60,90,-45}, -{60,90,-44}, -{60,91,-61}, -{60,91,-60}, -{60,91,-59}, -{60,91,-58}, -{60,91,-57}, -{60,91,-56}, -{60,91,-55}, -{60,91,-54}, -{60,91,-53}, -{60,91,-52}, -{60,91,-51}, -{60,91,-50}, -{60,91,-49}, -{60,91,-48}, -{60,91,-47}, -{60,91,-46}, -{60,92,-61}, -{60,92,-60}, -{60,92,-59}, -{60,92,-58}, -{60,92,-57}, -{60,92,-56}, -{60,92,-55}, -{60,92,-54}, -{60,92,-53}, -{60,92,-52}, -{60,92,-51}, -{60,92,-50}, -{60,92,-49}, -{60,92,-48}, -{60,93,-61}, -{60,93,-60}, -{60,93,-59}, -{60,93,-58}, -{60,93,-57}, -{60,93,-56}, -{60,93,-55}, -{60,93,-54}, -{60,93,-53}, -{60,93,-52}, -{60,93,-51}, -{60,93,-50}, -{60,94,-61}, -{60,94,-60}, -{60,94,-59}, -{60,94,-58}, -{60,94,-57}, -{60,94,-56}, -{60,94,-55}, -{60,94,-54}, -{60,94,-53}, -{60,94,-52}, -{60,95,-61}, -{60,95,-60}, -{60,95,-59}, -{60,95,-58}, -{60,95,-57}, -{60,95,-56}, -{60,95,-55}, -{60,95,-54}, -{60,96,-61}, -{60,96,-60}, -{60,96,-59}, -{60,96,-58}, -{60,96,-57}, -{60,96,-56}, -{60,97,-61}, -{60,97,-60}, -{60,97,-59}, -{60,97,-58}, -{60,97,-57}, -{60,98,-61}, -{61,-64,61}, -{61,-63,57}, -{61,-63,58}, -{61,-63,59}, -{61,-63,60}, -{61,-63,61}, -{61,-62,52}, -{61,-62,53}, -{61,-62,54}, -{61,-62,55}, -{61,-62,56}, -{61,-62,57}, -{61,-62,58}, -{61,-62,59}, -{61,-62,60}, -{61,-62,61}, -{61,-61,49}, -{61,-61,50}, -{61,-61,51}, -{61,-61,52}, -{61,-61,53}, -{61,-61,54}, -{61,-61,55}, -{61,-61,56}, -{61,-61,57}, -{61,-61,58}, -{61,-61,59}, -{61,-61,60}, -{61,-61,61}, -{61,-61,62}, -{61,-60,45}, -{61,-60,46}, -{61,-60,47}, -{61,-60,48}, -{61,-60,49}, -{61,-60,50}, -{61,-60,51}, -{61,-60,52}, -{61,-60,53}, -{61,-60,54}, -{61,-60,55}, -{61,-60,56}, -{61,-60,57}, -{61,-60,58}, -{61,-60,59}, -{61,-60,60}, -{61,-60,61}, -{61,-60,62}, -{61,-59,42}, -{61,-59,43}, -{61,-59,44}, -{61,-59,45}, -{61,-59,46}, -{61,-59,47}, -{61,-59,48}, -{61,-59,49}, -{61,-59,50}, -{61,-59,51}, -{61,-59,52}, -{61,-59,53}, -{61,-59,54}, -{61,-59,55}, -{61,-59,56}, -{61,-59,57}, -{61,-59,58}, -{61,-59,59}, -{61,-59,60}, -{61,-59,61}, -{61,-59,62}, -{61,-58,39}, -{61,-58,40}, -{61,-58,41}, -{61,-58,42}, -{61,-58,43}, -{61,-58,44}, -{61,-58,45}, -{61,-58,46}, -{61,-58,47}, -{61,-58,48}, -{61,-58,49}, -{61,-58,50}, -{61,-58,51}, -{61,-58,52}, -{61,-58,53}, -{61,-58,54}, -{61,-58,55}, -{61,-58,56}, -{61,-58,57}, -{61,-58,58}, -{61,-58,59}, -{61,-58,60}, -{61,-58,61}, -{61,-58,62}, -{61,-57,36}, -{61,-57,37}, -{61,-57,38}, -{61,-57,39}, -{61,-57,40}, -{61,-57,41}, -{61,-57,42}, -{61,-57,43}, -{61,-57,44}, -{61,-57,45}, -{61,-57,46}, -{61,-57,47}, -{61,-57,48}, -{61,-57,49}, -{61,-57,50}, -{61,-57,51}, -{61,-57,52}, -{61,-57,53}, -{61,-57,54}, -{61,-57,55}, -{61,-57,56}, -{61,-57,57}, -{61,-57,58}, -{61,-57,59}, -{61,-57,60}, -{61,-57,61}, -{61,-57,62}, -{61,-56,33}, -{61,-56,34}, -{61,-56,35}, -{61,-56,36}, -{61,-56,37}, -{61,-56,38}, -{61,-56,39}, -{61,-56,40}, -{61,-56,41}, -{61,-56,42}, -{61,-56,43}, -{61,-56,44}, -{61,-56,45}, -{61,-56,46}, -{61,-56,47}, -{61,-56,48}, -{61,-56,49}, -{61,-56,50}, -{61,-56,51}, -{61,-56,52}, -{61,-56,53}, -{61,-56,54}, -{61,-56,55}, -{61,-56,56}, -{61,-56,57}, -{61,-56,58}, -{61,-56,59}, -{61,-56,60}, -{61,-56,61}, -{61,-56,62}, -{61,-55,30}, -{61,-55,31}, -{61,-55,32}, -{61,-55,33}, -{61,-55,34}, -{61,-55,35}, -{61,-55,36}, -{61,-55,37}, -{61,-55,38}, -{61,-55,39}, -{61,-55,40}, -{61,-55,41}, -{61,-55,42}, -{61,-55,43}, -{61,-55,44}, -{61,-55,45}, -{61,-55,46}, -{61,-55,47}, -{61,-55,48}, -{61,-55,49}, -{61,-55,50}, -{61,-55,51}, -{61,-55,52}, -{61,-55,53}, -{61,-55,54}, -{61,-55,55}, -{61,-55,56}, -{61,-55,57}, -{61,-55,58}, -{61,-55,59}, -{61,-55,60}, -{61,-55,61}, -{61,-55,62}, -{61,-54,28}, -{61,-54,29}, -{61,-54,30}, -{61,-54,31}, -{61,-54,32}, -{61,-54,33}, -{61,-54,34}, -{61,-54,35}, -{61,-54,36}, -{61,-54,37}, -{61,-54,38}, -{61,-54,39}, -{61,-54,40}, -{61,-54,41}, -{61,-54,42}, -{61,-54,43}, -{61,-54,44}, -{61,-54,45}, -{61,-54,46}, -{61,-54,47}, -{61,-54,48}, -{61,-54,49}, -{61,-54,50}, -{61,-54,51}, -{61,-54,52}, -{61,-54,53}, -{61,-54,54}, -{61,-54,55}, -{61,-54,56}, -{61,-54,57}, -{61,-54,58}, -{61,-54,59}, -{61,-54,60}, -{61,-54,61}, -{61,-54,62}, -{61,-53,25}, -{61,-53,26}, -{61,-53,27}, -{61,-53,28}, -{61,-53,29}, -{61,-53,30}, -{61,-53,31}, -{61,-53,32}, -{61,-53,33}, -{61,-53,34}, -{61,-53,35}, -{61,-53,36}, -{61,-53,37}, -{61,-53,38}, -{61,-53,39}, -{61,-53,40}, -{61,-53,41}, -{61,-53,42}, -{61,-53,43}, -{61,-53,44}, -{61,-53,45}, -{61,-53,46}, -{61,-53,47}, -{61,-53,48}, -{61,-53,49}, -{61,-53,50}, -{61,-53,51}, -{61,-53,52}, -{61,-53,53}, -{61,-53,54}, -{61,-53,55}, -{61,-53,56}, -{61,-53,57}, -{61,-53,58}, -{61,-53,59}, -{61,-53,60}, -{61,-53,61}, -{61,-53,62}, -{61,-52,23}, -{61,-52,24}, -{61,-52,25}, -{61,-52,26}, -{61,-52,27}, -{61,-52,28}, -{61,-52,29}, -{61,-52,30}, -{61,-52,31}, -{61,-52,32}, -{61,-52,33}, -{61,-52,34}, -{61,-52,35}, -{61,-52,36}, -{61,-52,37}, -{61,-52,38}, -{61,-52,39}, -{61,-52,40}, -{61,-52,41}, -{61,-52,42}, -{61,-52,43}, -{61,-52,44}, -{61,-52,45}, -{61,-52,46}, -{61,-52,47}, -{61,-52,48}, -{61,-52,49}, -{61,-52,50}, -{61,-52,51}, -{61,-52,52}, -{61,-52,53}, -{61,-52,54}, -{61,-52,55}, -{61,-52,56}, -{61,-52,57}, -{61,-52,58}, -{61,-52,59}, -{61,-52,60}, -{61,-52,61}, -{61,-52,62}, -{61,-51,20}, -{61,-51,21}, -{61,-51,22}, -{61,-51,23}, -{61,-51,24}, -{61,-51,25}, -{61,-51,26}, -{61,-51,27}, -{61,-51,28}, -{61,-51,29}, -{61,-51,30}, -{61,-51,31}, -{61,-51,32}, -{61,-51,33}, -{61,-51,34}, -{61,-51,35}, -{61,-51,36}, -{61,-51,37}, -{61,-51,38}, -{61,-51,39}, -{61,-51,40}, -{61,-51,41}, -{61,-51,42}, -{61,-51,43}, -{61,-51,44}, -{61,-51,45}, -{61,-51,46}, -{61,-51,47}, -{61,-51,48}, -{61,-51,49}, -{61,-51,50}, -{61,-51,51}, -{61,-51,52}, -{61,-51,53}, -{61,-51,54}, -{61,-51,55}, -{61,-51,56}, -{61,-51,57}, -{61,-51,58}, -{61,-51,59}, -{61,-51,60}, -{61,-51,61}, -{61,-51,62}, -{61,-50,18}, -{61,-50,19}, -{61,-50,20}, -{61,-50,21}, -{61,-50,22}, -{61,-50,23}, -{61,-50,24}, -{61,-50,25}, -{61,-50,26}, -{61,-50,27}, -{61,-50,28}, -{61,-50,29}, -{61,-50,30}, -{61,-50,31}, -{61,-50,32}, -{61,-50,33}, -{61,-50,34}, -{61,-50,35}, -{61,-50,36}, -{61,-50,37}, -{61,-50,38}, -{61,-50,39}, -{61,-50,40}, -{61,-50,41}, -{61,-50,42}, -{61,-50,43}, -{61,-50,44}, -{61,-50,45}, -{61,-50,46}, -{61,-50,47}, -{61,-50,48}, -{61,-50,49}, -{61,-50,50}, -{61,-50,51}, -{61,-50,52}, -{61,-50,53}, -{61,-50,54}, -{61,-50,55}, -{61,-50,56}, -{61,-50,57}, -{61,-50,58}, -{61,-50,59}, -{61,-50,60}, -{61,-50,61}, -{61,-50,62}, -{61,-49,16}, -{61,-49,17}, -{61,-49,18}, -{61,-49,19}, -{61,-49,20}, -{61,-49,21}, -{61,-49,22}, -{61,-49,23}, -{61,-49,24}, -{61,-49,25}, -{61,-49,26}, -{61,-49,27}, -{61,-49,28}, -{61,-49,29}, -{61,-49,30}, -{61,-49,31}, -{61,-49,32}, -{61,-49,33}, -{61,-49,34}, -{61,-49,35}, -{61,-49,36}, -{61,-49,37}, -{61,-49,38}, -{61,-49,39}, -{61,-49,40}, -{61,-49,41}, -{61,-49,42}, -{61,-49,43}, -{61,-49,44}, -{61,-49,45}, -{61,-49,46}, -{61,-49,47}, -{61,-49,48}, -{61,-49,49}, -{61,-49,50}, -{61,-49,51}, -{61,-49,52}, -{61,-49,53}, -{61,-49,54}, -{61,-49,55}, -{61,-49,56}, -{61,-49,57}, -{61,-49,58}, -{61,-49,59}, -{61,-49,60}, -{61,-49,61}, -{61,-49,62}, -{61,-48,14}, -{61,-48,15}, -{61,-48,16}, -{61,-48,17}, -{61,-48,18}, -{61,-48,19}, -{61,-48,20}, -{61,-48,21}, -{61,-48,22}, -{61,-48,23}, -{61,-48,24}, -{61,-48,25}, -{61,-48,26}, -{61,-48,27}, -{61,-48,28}, -{61,-48,29}, -{61,-48,30}, -{61,-48,31}, -{61,-48,32}, -{61,-48,33}, -{61,-48,34}, -{61,-48,35}, -{61,-48,36}, -{61,-48,37}, -{61,-48,38}, -{61,-48,39}, -{61,-48,40}, -{61,-48,41}, -{61,-48,42}, -{61,-48,43}, -{61,-48,44}, -{61,-48,45}, -{61,-48,46}, -{61,-48,47}, -{61,-48,48}, -{61,-48,49}, -{61,-48,50}, -{61,-48,51}, -{61,-48,52}, -{61,-48,53}, -{61,-48,54}, -{61,-48,55}, -{61,-48,56}, -{61,-48,57}, -{61,-48,58}, -{61,-48,59}, -{61,-48,60}, -{61,-48,61}, -{61,-48,62}, -{61,-47,12}, -{61,-47,13}, -{61,-47,14}, -{61,-47,15}, -{61,-47,16}, -{61,-47,17}, -{61,-47,18}, -{61,-47,19}, -{61,-47,20}, -{61,-47,21}, -{61,-47,22}, -{61,-47,23}, -{61,-47,24}, -{61,-47,25}, -{61,-47,26}, -{61,-47,27}, -{61,-47,28}, -{61,-47,29}, -{61,-47,30}, -{61,-47,31}, -{61,-47,32}, -{61,-47,33}, -{61,-47,34}, -{61,-47,35}, -{61,-47,36}, -{61,-47,37}, -{61,-47,38}, -{61,-47,39}, -{61,-47,40}, -{61,-47,41}, -{61,-47,42}, -{61,-47,43}, -{61,-47,44}, -{61,-47,45}, -{61,-47,46}, -{61,-47,47}, -{61,-47,48}, -{61,-47,49}, -{61,-47,50}, -{61,-47,51}, -{61,-47,52}, -{61,-47,53}, -{61,-47,54}, -{61,-47,55}, -{61,-47,56}, -{61,-47,57}, -{61,-47,58}, -{61,-47,59}, -{61,-47,60}, -{61,-47,61}, -{61,-47,62}, -{61,-46,10}, -{61,-46,11}, -{61,-46,12}, -{61,-46,13}, -{61,-46,14}, -{61,-46,15}, -{61,-46,16}, -{61,-46,17}, -{61,-46,18}, -{61,-46,19}, -{61,-46,20}, -{61,-46,21}, -{61,-46,22}, -{61,-46,23}, -{61,-46,24}, -{61,-46,25}, -{61,-46,26}, -{61,-46,27}, -{61,-46,28}, -{61,-46,29}, -{61,-46,30}, -{61,-46,31}, -{61,-46,32}, -{61,-46,33}, -{61,-46,34}, -{61,-46,35}, -{61,-46,36}, -{61,-46,37}, -{61,-46,38}, -{61,-46,39}, -{61,-46,40}, -{61,-46,41}, -{61,-46,42}, -{61,-46,43}, -{61,-46,44}, -{61,-46,45}, -{61,-46,46}, -{61,-46,47}, -{61,-46,48}, -{61,-46,49}, -{61,-46,50}, -{61,-46,51}, -{61,-46,52}, -{61,-46,53}, -{61,-46,54}, -{61,-46,55}, -{61,-46,56}, -{61,-46,57}, -{61,-46,58}, -{61,-46,59}, -{61,-46,60}, -{61,-46,61}, -{61,-46,62}, -{61,-45,8}, -{61,-45,9}, -{61,-45,10}, -{61,-45,11}, -{61,-45,12}, -{61,-45,13}, -{61,-45,14}, -{61,-45,15}, -{61,-45,16}, -{61,-45,17}, -{61,-45,18}, -{61,-45,19}, -{61,-45,20}, -{61,-45,21}, -{61,-45,22}, -{61,-45,23}, -{61,-45,24}, -{61,-45,25}, -{61,-45,26}, -{61,-45,27}, -{61,-45,28}, -{61,-45,29}, -{61,-45,30}, -{61,-45,31}, -{61,-45,32}, -{61,-45,33}, -{61,-45,34}, -{61,-45,35}, -{61,-45,36}, -{61,-45,37}, -{61,-45,38}, -{61,-45,39}, -{61,-45,40}, -{61,-45,41}, -{61,-45,42}, -{61,-45,43}, -{61,-45,44}, -{61,-45,45}, -{61,-45,46}, -{61,-45,47}, -{61,-45,48}, -{61,-45,49}, -{61,-45,50}, -{61,-45,51}, -{61,-45,52}, -{61,-45,53}, -{61,-45,54}, -{61,-45,55}, -{61,-45,56}, -{61,-45,57}, -{61,-45,58}, -{61,-45,59}, -{61,-45,60}, -{61,-45,61}, -{61,-45,62}, -{61,-44,6}, -{61,-44,7}, -{61,-44,8}, -{61,-44,9}, -{61,-44,10}, -{61,-44,11}, -{61,-44,12}, -{61,-44,13}, -{61,-44,14}, -{61,-44,15}, -{61,-44,16}, -{61,-44,17}, -{61,-44,18}, -{61,-44,19}, -{61,-44,20}, -{61,-44,21}, -{61,-44,22}, -{61,-44,23}, -{61,-44,24}, -{61,-44,25}, -{61,-44,26}, -{61,-44,27}, -{61,-44,28}, -{61,-44,29}, -{61,-44,30}, -{61,-44,31}, -{61,-44,32}, -{61,-44,33}, -{61,-44,34}, -{61,-44,35}, -{61,-44,36}, -{61,-44,37}, -{61,-44,38}, -{61,-44,39}, -{61,-44,40}, -{61,-44,41}, -{61,-44,42}, -{61,-44,43}, -{61,-44,44}, -{61,-44,45}, -{61,-44,46}, -{61,-44,47}, -{61,-44,48}, -{61,-44,49}, -{61,-44,50}, -{61,-44,51}, -{61,-44,52}, -{61,-44,53}, -{61,-44,54}, -{61,-44,55}, -{61,-44,56}, -{61,-44,57}, -{61,-44,58}, -{61,-44,59}, -{61,-44,60}, -{61,-44,61}, -{61,-44,62}, -{61,-43,4}, -{61,-43,5}, -{61,-43,6}, -{61,-43,7}, -{61,-43,8}, -{61,-43,9}, -{61,-43,10}, -{61,-43,11}, -{61,-43,12}, -{61,-43,13}, -{61,-43,14}, -{61,-43,15}, -{61,-43,16}, -{61,-43,17}, -{61,-43,18}, -{61,-43,19}, -{61,-43,20}, -{61,-43,21}, -{61,-43,22}, -{61,-43,23}, -{61,-43,24}, -{61,-43,25}, -{61,-43,26}, -{61,-43,27}, -{61,-43,28}, -{61,-43,29}, -{61,-43,30}, -{61,-43,31}, -{61,-43,32}, -{61,-43,33}, -{61,-43,34}, -{61,-43,35}, -{61,-43,36}, -{61,-43,37}, -{61,-43,38}, -{61,-43,39}, -{61,-43,40}, -{61,-43,41}, -{61,-43,42}, -{61,-43,43}, -{61,-43,44}, -{61,-43,45}, -{61,-43,46}, -{61,-43,47}, -{61,-43,48}, -{61,-43,49}, -{61,-43,50}, -{61,-43,51}, -{61,-43,52}, -{61,-43,53}, -{61,-43,54}, -{61,-43,55}, -{61,-43,56}, -{61,-43,57}, -{61,-43,58}, -{61,-43,59}, -{61,-43,60}, -{61,-43,61}, -{61,-43,62}, -{61,-42,2}, -{61,-42,3}, -{61,-42,4}, -{61,-42,5}, -{61,-42,6}, -{61,-42,7}, -{61,-42,8}, -{61,-42,9}, -{61,-42,10}, -{61,-42,11}, -{61,-42,12}, -{61,-42,13}, -{61,-42,14}, -{61,-42,15}, -{61,-42,16}, -{61,-42,17}, -{61,-42,18}, -{61,-42,19}, -{61,-42,20}, -{61,-42,21}, -{61,-42,22}, -{61,-42,23}, -{61,-42,24}, -{61,-42,25}, -{61,-42,26}, -{61,-42,27}, -{61,-42,28}, -{61,-42,29}, -{61,-42,30}, -{61,-42,31}, -{61,-42,32}, -{61,-42,33}, -{61,-42,34}, -{61,-42,35}, -{61,-42,36}, -{61,-42,37}, -{61,-42,38}, -{61,-42,39}, -{61,-42,40}, -{61,-42,41}, -{61,-42,42}, -{61,-42,43}, -{61,-42,44}, -{61,-42,45}, -{61,-42,46}, -{61,-42,47}, -{61,-42,48}, -{61,-42,49}, -{61,-42,50}, -{61,-42,51}, -{61,-42,52}, -{61,-42,53}, -{61,-42,54}, -{61,-42,55}, -{61,-42,56}, -{61,-42,57}, -{61,-42,58}, -{61,-42,59}, -{61,-42,60}, -{61,-42,61}, -{61,-42,62}, -{61,-41,1}, -{61,-41,2}, -{61,-41,3}, -{61,-41,4}, -{61,-41,5}, -{61,-41,6}, -{61,-41,7}, -{61,-41,8}, -{61,-41,9}, -{61,-41,10}, -{61,-41,11}, -{61,-41,12}, -{61,-41,13}, -{61,-41,14}, -{61,-41,15}, -{61,-41,16}, -{61,-41,17}, -{61,-41,18}, -{61,-41,19}, -{61,-41,20}, -{61,-41,21}, -{61,-41,22}, -{61,-41,23}, -{61,-41,24}, -{61,-41,25}, -{61,-41,26}, -{61,-41,27}, -{61,-41,28}, -{61,-41,29}, -{61,-41,30}, -{61,-41,31}, -{61,-41,32}, -{61,-41,33}, -{61,-41,34}, -{61,-41,35}, -{61,-41,36}, -{61,-41,37}, -{61,-41,38}, -{61,-41,39}, -{61,-41,40}, -{61,-41,41}, -{61,-41,42}, -{61,-41,43}, -{61,-41,44}, -{61,-41,45}, -{61,-41,46}, -{61,-41,47}, -{61,-41,48}, -{61,-41,49}, -{61,-41,50}, -{61,-41,51}, -{61,-41,52}, -{61,-41,53}, -{61,-41,54}, -{61,-41,55}, -{61,-41,56}, -{61,-41,57}, -{61,-41,58}, -{61,-41,59}, -{61,-41,60}, -{61,-41,61}, -{61,-41,62}, -{61,-40,-1}, -{61,-40,0}, -{61,-40,1}, -{61,-40,2}, -{61,-40,3}, -{61,-40,4}, -{61,-40,5}, -{61,-40,6}, -{61,-40,7}, -{61,-40,8}, -{61,-40,9}, -{61,-40,10}, -{61,-40,11}, -{61,-40,12}, -{61,-40,13}, -{61,-40,14}, -{61,-40,15}, -{61,-40,16}, -{61,-40,17}, -{61,-40,18}, -{61,-40,19}, -{61,-40,20}, -{61,-40,21}, -{61,-40,22}, -{61,-40,23}, -{61,-40,24}, -{61,-40,25}, -{61,-40,26}, -{61,-40,27}, -{61,-40,28}, -{61,-40,29}, -{61,-40,30}, -{61,-40,31}, -{61,-40,32}, -{61,-40,33}, -{61,-40,34}, -{61,-40,35}, -{61,-40,36}, -{61,-40,37}, -{61,-40,38}, -{61,-40,39}, -{61,-40,40}, -{61,-40,41}, -{61,-40,42}, -{61,-40,43}, -{61,-40,44}, -{61,-40,45}, -{61,-40,46}, -{61,-40,47}, -{61,-40,48}, -{61,-40,49}, -{61,-40,50}, -{61,-40,51}, -{61,-40,52}, -{61,-40,53}, -{61,-40,54}, -{61,-40,55}, -{61,-40,56}, -{61,-40,57}, -{61,-40,58}, -{61,-40,59}, -{61,-40,60}, -{61,-40,61}, -{61,-40,62}, -{61,-40,63}, -{61,-39,-3}, -{61,-39,-2}, -{61,-39,-1}, -{61,-39,0}, -{61,-39,1}, -{61,-39,2}, -{61,-39,3}, -{61,-39,4}, -{61,-39,5}, -{61,-39,6}, -{61,-39,7}, -{61,-39,8}, -{61,-39,9}, -{61,-39,10}, -{61,-39,11}, -{61,-39,12}, -{61,-39,13}, -{61,-39,14}, -{61,-39,15}, -{61,-39,16}, -{61,-39,17}, -{61,-39,18}, -{61,-39,19}, -{61,-39,20}, -{61,-39,21}, -{61,-39,22}, -{61,-39,23}, -{61,-39,24}, -{61,-39,25}, -{61,-39,26}, -{61,-39,27}, -{61,-39,28}, -{61,-39,29}, -{61,-39,30}, -{61,-39,31}, -{61,-39,32}, -{61,-39,33}, -{61,-39,34}, -{61,-39,35}, -{61,-39,36}, -{61,-39,37}, -{61,-39,38}, -{61,-39,39}, -{61,-39,40}, -{61,-39,41}, -{61,-39,42}, -{61,-39,43}, -{61,-39,44}, -{61,-39,45}, -{61,-39,46}, -{61,-39,47}, -{61,-39,48}, -{61,-39,49}, -{61,-39,50}, -{61,-39,51}, -{61,-39,52}, -{61,-39,53}, -{61,-39,54}, -{61,-39,55}, -{61,-39,56}, -{61,-39,57}, -{61,-39,58}, -{61,-39,59}, -{61,-39,60}, -{61,-39,61}, -{61,-39,62}, -{61,-39,63}, -{61,-38,-4}, -{61,-38,-3}, -{61,-38,-2}, -{61,-38,-1}, -{61,-38,0}, -{61,-38,1}, -{61,-38,2}, -{61,-38,3}, -{61,-38,4}, -{61,-38,5}, -{61,-38,6}, -{61,-38,7}, -{61,-38,8}, -{61,-38,9}, -{61,-38,10}, -{61,-38,11}, -{61,-38,12}, -{61,-38,13}, -{61,-38,14}, -{61,-38,15}, -{61,-38,16}, -{61,-38,17}, -{61,-38,18}, -{61,-38,19}, -{61,-38,20}, -{61,-38,21}, -{61,-38,22}, -{61,-38,23}, -{61,-38,24}, -{61,-38,25}, -{61,-38,26}, -{61,-38,27}, -{61,-38,28}, -{61,-38,29}, -{61,-38,30}, -{61,-38,31}, -{61,-38,32}, -{61,-38,33}, -{61,-38,34}, -{61,-38,35}, -{61,-38,36}, -{61,-38,37}, -{61,-38,38}, -{61,-38,39}, -{61,-38,40}, -{61,-38,41}, -{61,-38,42}, -{61,-38,43}, -{61,-38,44}, -{61,-38,45}, -{61,-38,46}, -{61,-38,47}, -{61,-38,48}, -{61,-38,49}, -{61,-38,50}, -{61,-38,51}, -{61,-38,52}, -{61,-38,53}, -{61,-38,54}, -{61,-38,55}, -{61,-38,56}, -{61,-38,57}, -{61,-38,58}, -{61,-38,59}, -{61,-38,60}, -{61,-38,61}, -{61,-38,62}, -{61,-38,63}, -{61,-37,-6}, -{61,-37,-5}, -{61,-37,-4}, -{61,-37,-3}, -{61,-37,-2}, -{61,-37,-1}, -{61,-37,0}, -{61,-37,1}, -{61,-37,2}, -{61,-37,3}, -{61,-37,4}, -{61,-37,5}, -{61,-37,6}, -{61,-37,7}, -{61,-37,8}, -{61,-37,9}, -{61,-37,10}, -{61,-37,11}, -{61,-37,12}, -{61,-37,13}, -{61,-37,14}, -{61,-37,15}, -{61,-37,16}, -{61,-37,17}, -{61,-37,18}, -{61,-37,19}, -{61,-37,20}, -{61,-37,21}, -{61,-37,22}, -{61,-37,23}, -{61,-37,24}, -{61,-37,25}, -{61,-37,26}, -{61,-37,27}, -{61,-37,28}, -{61,-37,29}, -{61,-37,30}, -{61,-37,31}, -{61,-37,32}, -{61,-37,33}, -{61,-37,34}, -{61,-37,35}, -{61,-37,36}, -{61,-37,37}, -{61,-37,38}, -{61,-37,39}, -{61,-37,40}, -{61,-37,41}, -{61,-37,42}, -{61,-37,43}, -{61,-37,44}, -{61,-37,45}, -{61,-37,46}, -{61,-37,47}, -{61,-37,48}, -{61,-37,49}, -{61,-37,50}, -{61,-37,51}, -{61,-37,52}, -{61,-37,53}, -{61,-37,54}, -{61,-37,55}, -{61,-37,56}, -{61,-37,57}, -{61,-37,58}, -{61,-37,59}, -{61,-37,60}, -{61,-37,61}, -{61,-37,62}, -{61,-37,63}, -{61,-36,-8}, -{61,-36,-7}, -{61,-36,-6}, -{61,-36,-5}, -{61,-36,-4}, -{61,-36,-3}, -{61,-36,-2}, -{61,-36,-1}, -{61,-36,0}, -{61,-36,1}, -{61,-36,2}, -{61,-36,3}, -{61,-36,4}, -{61,-36,5}, -{61,-36,6}, -{61,-36,7}, -{61,-36,8}, -{61,-36,9}, -{61,-36,10}, -{61,-36,11}, -{61,-36,12}, -{61,-36,13}, -{61,-36,14}, -{61,-36,15}, -{61,-36,16}, -{61,-36,17}, -{61,-36,18}, -{61,-36,19}, -{61,-36,20}, -{61,-36,21}, -{61,-36,22}, -{61,-36,23}, -{61,-36,24}, -{61,-36,25}, -{61,-36,26}, -{61,-36,27}, -{61,-36,28}, -{61,-36,29}, -{61,-36,30}, -{61,-36,31}, -{61,-36,32}, -{61,-36,33}, -{61,-36,34}, -{61,-36,35}, -{61,-36,36}, -{61,-36,37}, -{61,-36,38}, -{61,-36,39}, -{61,-36,40}, -{61,-36,41}, -{61,-36,42}, -{61,-36,43}, -{61,-36,44}, -{61,-36,45}, -{61,-36,46}, -{61,-36,47}, -{61,-36,48}, -{61,-36,49}, -{61,-36,50}, -{61,-36,51}, -{61,-36,52}, -{61,-36,53}, -{61,-36,54}, -{61,-36,55}, -{61,-36,56}, -{61,-36,57}, -{61,-36,58}, -{61,-36,59}, -{61,-36,60}, -{61,-36,61}, -{61,-36,62}, -{61,-36,63}, -{61,-35,-9}, -{61,-35,-8}, -{61,-35,-7}, -{61,-35,-6}, -{61,-35,-5}, -{61,-35,-4}, -{61,-35,-3}, -{61,-35,-2}, -{61,-35,-1}, -{61,-35,0}, -{61,-35,1}, -{61,-35,2}, -{61,-35,3}, -{61,-35,4}, -{61,-35,5}, -{61,-35,6}, -{61,-35,7}, -{61,-35,8}, -{61,-35,9}, -{61,-35,10}, -{61,-35,11}, -{61,-35,12}, -{61,-35,13}, -{61,-35,14}, -{61,-35,15}, -{61,-35,16}, -{61,-35,17}, -{61,-35,18}, -{61,-35,19}, -{61,-35,20}, -{61,-35,21}, -{61,-35,22}, -{61,-35,23}, -{61,-35,24}, -{61,-35,25}, -{61,-35,26}, -{61,-35,27}, -{61,-35,28}, -{61,-35,29}, -{61,-35,30}, -{61,-35,31}, -{61,-35,32}, -{61,-35,33}, -{61,-35,34}, -{61,-35,35}, -{61,-35,36}, -{61,-35,37}, -{61,-35,38}, -{61,-35,39}, -{61,-35,40}, -{61,-35,41}, -{61,-35,42}, -{61,-35,43}, -{61,-35,44}, -{61,-35,45}, -{61,-35,46}, -{61,-35,47}, -{61,-35,48}, -{61,-35,49}, -{61,-35,50}, -{61,-35,51}, -{61,-35,52}, -{61,-35,53}, -{61,-35,54}, -{61,-35,55}, -{61,-35,56}, -{61,-35,57}, -{61,-35,58}, -{61,-35,59}, -{61,-35,60}, -{61,-35,61}, -{61,-35,62}, -{61,-35,63}, -{61,-34,-11}, -{61,-34,-10}, -{61,-34,-9}, -{61,-34,-8}, -{61,-34,-7}, -{61,-34,-6}, -{61,-34,-5}, -{61,-34,-4}, -{61,-34,-3}, -{61,-34,-2}, -{61,-34,-1}, -{61,-34,0}, -{61,-34,1}, -{61,-34,2}, -{61,-34,3}, -{61,-34,4}, -{61,-34,5}, -{61,-34,6}, -{61,-34,7}, -{61,-34,8}, -{61,-34,9}, -{61,-34,10}, -{61,-34,11}, -{61,-34,12}, -{61,-34,13}, -{61,-34,14}, -{61,-34,15}, -{61,-34,16}, -{61,-34,17}, -{61,-34,18}, -{61,-34,19}, -{61,-34,20}, -{61,-34,21}, -{61,-34,22}, -{61,-34,23}, -{61,-34,24}, -{61,-34,25}, -{61,-34,26}, -{61,-34,27}, -{61,-34,28}, -{61,-34,29}, -{61,-34,30}, -{61,-34,31}, -{61,-34,32}, -{61,-34,33}, -{61,-34,34}, -{61,-34,35}, -{61,-34,36}, -{61,-34,37}, -{61,-34,38}, -{61,-34,39}, -{61,-34,40}, -{61,-34,41}, -{61,-34,42}, -{61,-34,43}, -{61,-34,44}, -{61,-34,45}, -{61,-34,46}, -{61,-34,47}, -{61,-34,48}, -{61,-34,49}, -{61,-34,50}, -{61,-34,51}, -{61,-34,52}, -{61,-34,53}, -{61,-34,54}, -{61,-34,55}, -{61,-34,56}, -{61,-34,57}, -{61,-34,58}, -{61,-34,59}, -{61,-34,60}, -{61,-34,61}, -{61,-34,62}, -{61,-34,63}, -{61,-33,-12}, -{61,-33,-11}, -{61,-33,-10}, -{61,-33,-9}, -{61,-33,-8}, -{61,-33,-7}, -{61,-33,-6}, -{61,-33,-5}, -{61,-33,-4}, -{61,-33,-3}, -{61,-33,-2}, -{61,-33,-1}, -{61,-33,0}, -{61,-33,1}, -{61,-33,2}, -{61,-33,3}, -{61,-33,4}, -{61,-33,5}, -{61,-33,6}, -{61,-33,7}, -{61,-33,8}, -{61,-33,9}, -{61,-33,10}, -{61,-33,11}, -{61,-33,12}, -{61,-33,13}, -{61,-33,14}, -{61,-33,15}, -{61,-33,16}, -{61,-33,17}, -{61,-33,18}, -{61,-33,19}, -{61,-33,20}, -{61,-33,21}, -{61,-33,22}, -{61,-33,23}, -{61,-33,24}, -{61,-33,25}, -{61,-33,26}, -{61,-33,27}, -{61,-33,28}, -{61,-33,29}, -{61,-33,30}, -{61,-33,31}, -{61,-33,32}, -{61,-33,33}, -{61,-33,34}, -{61,-33,35}, -{61,-33,36}, -{61,-33,37}, -{61,-33,38}, -{61,-33,39}, -{61,-33,40}, -{61,-33,41}, -{61,-33,42}, -{61,-33,43}, -{61,-33,44}, -{61,-33,45}, -{61,-33,46}, -{61,-33,47}, -{61,-33,48}, -{61,-33,49}, -{61,-33,50}, -{61,-33,51}, -{61,-33,52}, -{61,-33,53}, -{61,-33,54}, -{61,-33,55}, -{61,-33,56}, -{61,-33,57}, -{61,-33,58}, -{61,-33,59}, -{61,-33,60}, -{61,-33,61}, -{61,-33,62}, -{61,-33,63}, -{61,-32,-14}, -{61,-32,-13}, -{61,-32,-12}, -{61,-32,-11}, -{61,-32,-10}, -{61,-32,-9}, -{61,-32,-8}, -{61,-32,-7}, -{61,-32,-6}, -{61,-32,-5}, -{61,-32,-4}, -{61,-32,-3}, -{61,-32,-2}, -{61,-32,-1}, -{61,-32,0}, -{61,-32,1}, -{61,-32,2}, -{61,-32,3}, -{61,-32,4}, -{61,-32,5}, -{61,-32,6}, -{61,-32,7}, -{61,-32,8}, -{61,-32,9}, -{61,-32,10}, -{61,-32,11}, -{61,-32,12}, -{61,-32,13}, -{61,-32,14}, -{61,-32,15}, -{61,-32,16}, -{61,-32,17}, -{61,-32,18}, -{61,-32,19}, -{61,-32,20}, -{61,-32,21}, -{61,-32,22}, -{61,-32,23}, -{61,-32,24}, -{61,-32,25}, -{61,-32,26}, -{61,-32,27}, -{61,-32,28}, -{61,-32,29}, -{61,-32,30}, -{61,-32,31}, -{61,-32,32}, -{61,-32,33}, -{61,-32,34}, -{61,-32,35}, -{61,-32,36}, -{61,-32,37}, -{61,-32,38}, -{61,-32,39}, -{61,-32,40}, -{61,-32,41}, -{61,-32,42}, -{61,-32,43}, -{61,-32,44}, -{61,-32,45}, -{61,-32,46}, -{61,-32,47}, -{61,-32,48}, -{61,-32,49}, -{61,-32,50}, -{61,-32,51}, -{61,-32,52}, -{61,-32,53}, -{61,-32,54}, -{61,-32,55}, -{61,-32,56}, -{61,-32,57}, -{61,-32,58}, -{61,-32,59}, -{61,-32,60}, -{61,-32,61}, -{61,-32,62}, -{61,-32,63}, -{61,-31,-15}, -{61,-31,-14}, -{61,-31,-13}, -{61,-31,-12}, -{61,-31,-11}, -{61,-31,-10}, -{61,-31,-9}, -{61,-31,-8}, -{61,-31,-7}, -{61,-31,-6}, -{61,-31,-5}, -{61,-31,-4}, -{61,-31,-3}, -{61,-31,-2}, -{61,-31,-1}, -{61,-31,0}, -{61,-31,1}, -{61,-31,2}, -{61,-31,3}, -{61,-31,4}, -{61,-31,5}, -{61,-31,6}, -{61,-31,7}, -{61,-31,8}, -{61,-31,9}, -{61,-31,10}, -{61,-31,11}, -{61,-31,12}, -{61,-31,13}, -{61,-31,14}, -{61,-31,15}, -{61,-31,16}, -{61,-31,17}, -{61,-31,18}, -{61,-31,19}, -{61,-31,20}, -{61,-31,21}, -{61,-31,22}, -{61,-31,23}, -{61,-31,24}, -{61,-31,25}, -{61,-31,26}, -{61,-31,27}, -{61,-31,28}, -{61,-31,29}, -{61,-31,30}, -{61,-31,31}, -{61,-31,32}, -{61,-31,33}, -{61,-31,34}, -{61,-31,35}, -{61,-31,36}, -{61,-31,37}, -{61,-31,38}, -{61,-31,39}, -{61,-31,40}, -{61,-31,41}, -{61,-31,42}, -{61,-31,43}, -{61,-31,44}, -{61,-31,45}, -{61,-31,46}, -{61,-31,47}, -{61,-31,48}, -{61,-31,49}, -{61,-31,50}, -{61,-31,51}, -{61,-31,52}, -{61,-31,53}, -{61,-31,54}, -{61,-31,55}, -{61,-31,56}, -{61,-31,57}, -{61,-31,58}, -{61,-31,59}, -{61,-31,60}, -{61,-31,61}, -{61,-31,62}, -{61,-31,63}, -{61,-30,-17}, -{61,-30,-16}, -{61,-30,-15}, -{61,-30,-14}, -{61,-30,-13}, -{61,-30,-12}, -{61,-30,-11}, -{61,-30,-10}, -{61,-30,-9}, -{61,-30,-8}, -{61,-30,-7}, -{61,-30,-6}, -{61,-30,-5}, -{61,-30,-4}, -{61,-30,-3}, -{61,-30,-2}, -{61,-30,-1}, -{61,-30,0}, -{61,-30,1}, -{61,-30,2}, -{61,-30,3}, -{61,-30,4}, -{61,-30,5}, -{61,-30,6}, -{61,-30,7}, -{61,-30,8}, -{61,-30,9}, -{61,-30,10}, -{61,-30,11}, -{61,-30,12}, -{61,-30,13}, -{61,-30,14}, -{61,-30,15}, -{61,-30,16}, -{61,-30,17}, -{61,-30,18}, -{61,-30,19}, -{61,-30,20}, -{61,-30,21}, -{61,-30,22}, -{61,-30,23}, -{61,-30,24}, -{61,-30,25}, -{61,-30,26}, -{61,-30,27}, -{61,-30,28}, -{61,-30,29}, -{61,-30,30}, -{61,-30,31}, -{61,-30,32}, -{61,-30,33}, -{61,-30,34}, -{61,-30,35}, -{61,-30,36}, -{61,-30,37}, -{61,-30,38}, -{61,-30,39}, -{61,-30,40}, -{61,-30,41}, -{61,-30,42}, -{61,-30,43}, -{61,-30,44}, -{61,-30,45}, -{61,-30,46}, -{61,-30,47}, -{61,-30,48}, -{61,-30,49}, -{61,-30,50}, -{61,-30,51}, -{61,-30,52}, -{61,-30,53}, -{61,-30,54}, -{61,-30,55}, -{61,-30,56}, -{61,-30,57}, -{61,-30,58}, -{61,-30,59}, -{61,-30,60}, -{61,-30,61}, -{61,-30,62}, -{61,-30,63}, -{61,-29,-18}, -{61,-29,-17}, -{61,-29,-16}, -{61,-29,-15}, -{61,-29,-14}, -{61,-29,-13}, -{61,-29,-12}, -{61,-29,-11}, -{61,-29,-10}, -{61,-29,-9}, -{61,-29,-8}, -{61,-29,-7}, -{61,-29,-6}, -{61,-29,-5}, -{61,-29,-4}, -{61,-29,-3}, -{61,-29,-2}, -{61,-29,-1}, -{61,-29,0}, -{61,-29,1}, -{61,-29,2}, -{61,-29,3}, -{61,-29,4}, -{61,-29,5}, -{61,-29,6}, -{61,-29,7}, -{61,-29,8}, -{61,-29,9}, -{61,-29,10}, -{61,-29,11}, -{61,-29,12}, -{61,-29,13}, -{61,-29,14}, -{61,-29,15}, -{61,-29,16}, -{61,-29,17}, -{61,-29,18}, -{61,-29,19}, -{61,-29,20}, -{61,-29,21}, -{61,-29,22}, -{61,-29,23}, -{61,-29,24}, -{61,-29,25}, -{61,-29,26}, -{61,-29,27}, -{61,-29,28}, -{61,-29,29}, -{61,-29,30}, -{61,-29,31}, -{61,-29,32}, -{61,-29,33}, -{61,-29,34}, -{61,-29,35}, -{61,-29,36}, -{61,-29,37}, -{61,-29,38}, -{61,-29,39}, -{61,-29,40}, -{61,-29,41}, -{61,-29,42}, -{61,-29,43}, -{61,-29,44}, -{61,-29,45}, -{61,-29,46}, -{61,-29,47}, -{61,-29,48}, -{61,-29,49}, -{61,-29,50}, -{61,-29,51}, -{61,-29,52}, -{61,-29,53}, -{61,-29,54}, -{61,-29,55}, -{61,-29,56}, -{61,-29,57}, -{61,-29,58}, -{61,-29,59}, -{61,-29,60}, -{61,-29,61}, -{61,-29,62}, -{61,-29,63}, -{61,-28,-20}, -{61,-28,-19}, -{61,-28,-18}, -{61,-28,-17}, -{61,-28,-16}, -{61,-28,-15}, -{61,-28,-14}, -{61,-28,-13}, -{61,-28,-12}, -{61,-28,-11}, -{61,-28,-10}, -{61,-28,-9}, -{61,-28,-8}, -{61,-28,-7}, -{61,-28,-6}, -{61,-28,-5}, -{61,-28,-4}, -{61,-28,-3}, -{61,-28,-2}, -{61,-28,-1}, -{61,-28,0}, -{61,-28,1}, -{61,-28,2}, -{61,-28,3}, -{61,-28,4}, -{61,-28,5}, -{61,-28,6}, -{61,-28,7}, -{61,-28,8}, -{61,-28,9}, -{61,-28,10}, -{61,-28,11}, -{61,-28,12}, -{61,-28,13}, -{61,-28,14}, -{61,-28,15}, -{61,-28,16}, -{61,-28,17}, -{61,-28,18}, -{61,-28,19}, -{61,-28,20}, -{61,-28,21}, -{61,-28,22}, -{61,-28,23}, -{61,-28,24}, -{61,-28,25}, -{61,-28,26}, -{61,-28,27}, -{61,-28,28}, -{61,-28,29}, -{61,-28,30}, -{61,-28,31}, -{61,-28,32}, -{61,-28,33}, -{61,-28,34}, -{61,-28,35}, -{61,-28,36}, -{61,-28,37}, -{61,-28,38}, -{61,-28,39}, -{61,-28,40}, -{61,-28,41}, -{61,-28,42}, -{61,-28,43}, -{61,-28,44}, -{61,-28,45}, -{61,-28,46}, -{61,-28,47}, -{61,-28,48}, -{61,-28,49}, -{61,-28,50}, -{61,-28,51}, -{61,-28,52}, -{61,-28,53}, -{61,-28,54}, -{61,-28,55}, -{61,-28,56}, -{61,-28,57}, -{61,-28,58}, -{61,-28,59}, -{61,-28,60}, -{61,-28,61}, -{61,-28,62}, -{61,-28,63}, -{61,-27,-21}, -{61,-27,-20}, -{61,-27,-19}, -{61,-27,-18}, -{61,-27,-17}, -{61,-27,-16}, -{61,-27,-15}, -{61,-27,-14}, -{61,-27,-13}, -{61,-27,-12}, -{61,-27,-11}, -{61,-27,-10}, -{61,-27,-9}, -{61,-27,-8}, -{61,-27,-7}, -{61,-27,-6}, -{61,-27,-5}, -{61,-27,-4}, -{61,-27,-3}, -{61,-27,-2}, -{61,-27,-1}, -{61,-27,0}, -{61,-27,1}, -{61,-27,2}, -{61,-27,3}, -{61,-27,4}, -{61,-27,5}, -{61,-27,6}, -{61,-27,7}, -{61,-27,8}, -{61,-27,9}, -{61,-27,10}, -{61,-27,11}, -{61,-27,12}, -{61,-27,13}, -{61,-27,14}, -{61,-27,15}, -{61,-27,16}, -{61,-27,17}, -{61,-27,18}, -{61,-27,19}, -{61,-27,20}, -{61,-27,21}, -{61,-27,22}, -{61,-27,23}, -{61,-27,24}, -{61,-27,25}, -{61,-27,26}, -{61,-27,27}, -{61,-27,28}, -{61,-27,29}, -{61,-27,30}, -{61,-27,31}, -{61,-27,32}, -{61,-27,33}, -{61,-27,34}, -{61,-27,35}, -{61,-27,36}, -{61,-27,37}, -{61,-27,38}, -{61,-27,39}, -{61,-27,40}, -{61,-27,41}, -{61,-27,42}, -{61,-27,43}, -{61,-27,44}, -{61,-27,45}, -{61,-27,46}, -{61,-27,47}, -{61,-27,48}, -{61,-27,49}, -{61,-27,50}, -{61,-27,51}, -{61,-27,52}, -{61,-27,53}, -{61,-27,54}, -{61,-27,55}, -{61,-27,56}, -{61,-27,57}, -{61,-27,58}, -{61,-27,59}, -{61,-27,60}, -{61,-27,61}, -{61,-27,62}, -{61,-27,63}, -{61,-26,-23}, -{61,-26,-22}, -{61,-26,-21}, -{61,-26,-20}, -{61,-26,-19}, -{61,-26,-18}, -{61,-26,-17}, -{61,-26,-16}, -{61,-26,-15}, -{61,-26,-14}, -{61,-26,-13}, -{61,-26,-12}, -{61,-26,-11}, -{61,-26,-10}, -{61,-26,-9}, -{61,-26,-8}, -{61,-26,-7}, -{61,-26,-6}, -{61,-26,-5}, -{61,-26,-4}, -{61,-26,-3}, -{61,-26,-2}, -{61,-26,-1}, -{61,-26,0}, -{61,-26,1}, -{61,-26,2}, -{61,-26,3}, -{61,-26,4}, -{61,-26,5}, -{61,-26,6}, -{61,-26,7}, -{61,-26,8}, -{61,-26,9}, -{61,-26,10}, -{61,-26,11}, -{61,-26,12}, -{61,-26,13}, -{61,-26,14}, -{61,-26,15}, -{61,-26,16}, -{61,-26,17}, -{61,-26,18}, -{61,-26,19}, -{61,-26,20}, -{61,-26,21}, -{61,-26,22}, -{61,-26,23}, -{61,-26,24}, -{61,-26,25}, -{61,-26,26}, -{61,-26,27}, -{61,-26,28}, -{61,-26,29}, -{61,-26,30}, -{61,-26,31}, -{61,-26,32}, -{61,-26,33}, -{61,-26,34}, -{61,-26,35}, -{61,-26,36}, -{61,-26,37}, -{61,-26,38}, -{61,-26,39}, -{61,-26,40}, -{61,-26,41}, -{61,-26,42}, -{61,-26,43}, -{61,-26,44}, -{61,-26,45}, -{61,-26,46}, -{61,-26,47}, -{61,-26,48}, -{61,-26,49}, -{61,-26,50}, -{61,-26,51}, -{61,-26,52}, -{61,-26,53}, -{61,-26,54}, -{61,-26,55}, -{61,-26,56}, -{61,-26,57}, -{61,-26,58}, -{61,-26,59}, -{61,-26,60}, -{61,-26,61}, -{61,-26,62}, -{61,-26,63}, -{61,-25,-24}, -{61,-25,-23}, -{61,-25,-22}, -{61,-25,-21}, -{61,-25,-20}, -{61,-25,-19}, -{61,-25,-18}, -{61,-25,-17}, -{61,-25,-16}, -{61,-25,-15}, -{61,-25,-14}, -{61,-25,-13}, -{61,-25,-12}, -{61,-25,-11}, -{61,-25,-10}, -{61,-25,-9}, -{61,-25,-8}, -{61,-25,-7}, -{61,-25,-6}, -{61,-25,-5}, -{61,-25,-4}, -{61,-25,-3}, -{61,-25,-2}, -{61,-25,-1}, -{61,-25,0}, -{61,-25,1}, -{61,-25,2}, -{61,-25,3}, -{61,-25,4}, -{61,-25,5}, -{61,-25,6}, -{61,-25,7}, -{61,-25,8}, -{61,-25,9}, -{61,-25,10}, -{61,-25,11}, -{61,-25,12}, -{61,-25,13}, -{61,-25,14}, -{61,-25,15}, -{61,-25,16}, -{61,-25,17}, -{61,-25,18}, -{61,-25,19}, -{61,-25,20}, -{61,-25,21}, -{61,-25,22}, -{61,-25,23}, -{61,-25,24}, -{61,-25,25}, -{61,-25,26}, -{61,-25,27}, -{61,-25,28}, -{61,-25,29}, -{61,-25,30}, -{61,-25,31}, -{61,-25,32}, -{61,-25,33}, -{61,-25,34}, -{61,-25,35}, -{61,-25,36}, -{61,-25,37}, -{61,-25,38}, -{61,-25,39}, -{61,-25,40}, -{61,-25,41}, -{61,-25,42}, -{61,-25,43}, -{61,-25,44}, -{61,-25,45}, -{61,-25,46}, -{61,-25,47}, -{61,-25,48}, -{61,-25,49}, -{61,-25,50}, -{61,-25,51}, -{61,-25,52}, -{61,-25,53}, -{61,-25,54}, -{61,-25,55}, -{61,-25,56}, -{61,-25,57}, -{61,-25,58}, -{61,-25,59}, -{61,-25,60}, -{61,-25,61}, -{61,-25,62}, -{61,-25,63}, -{61,-24,-25}, -{61,-24,-24}, -{61,-24,-23}, -{61,-24,-22}, -{61,-24,-21}, -{61,-24,-20}, -{61,-24,-19}, -{61,-24,-18}, -{61,-24,-17}, -{61,-24,-16}, -{61,-24,-15}, -{61,-24,-14}, -{61,-24,-13}, -{61,-24,-12}, -{61,-24,-11}, -{61,-24,-10}, -{61,-24,-9}, -{61,-24,-8}, -{61,-24,-7}, -{61,-24,-6}, -{61,-24,-5}, -{61,-24,-4}, -{61,-24,-3}, -{61,-24,-2}, -{61,-24,-1}, -{61,-24,0}, -{61,-24,1}, -{61,-24,2}, -{61,-24,3}, -{61,-24,4}, -{61,-24,5}, -{61,-24,6}, -{61,-24,7}, -{61,-24,8}, -{61,-24,9}, -{61,-24,10}, -{61,-24,11}, -{61,-24,12}, -{61,-24,13}, -{61,-24,14}, -{61,-24,15}, -{61,-24,16}, -{61,-24,17}, -{61,-24,18}, -{61,-24,19}, -{61,-24,20}, -{61,-24,21}, -{61,-24,22}, -{61,-24,23}, -{61,-24,24}, -{61,-24,25}, -{61,-24,26}, -{61,-24,27}, -{61,-24,28}, -{61,-24,29}, -{61,-24,30}, -{61,-24,31}, -{61,-24,32}, -{61,-24,33}, -{61,-24,34}, -{61,-24,35}, -{61,-24,36}, -{61,-24,37}, -{61,-24,38}, -{61,-24,39}, -{61,-24,40}, -{61,-24,41}, -{61,-24,42}, -{61,-24,43}, -{61,-24,44}, -{61,-24,45}, -{61,-24,46}, -{61,-24,47}, -{61,-24,48}, -{61,-24,49}, -{61,-24,50}, -{61,-24,51}, -{61,-24,52}, -{61,-24,53}, -{61,-24,54}, -{61,-24,55}, -{61,-24,56}, -{61,-24,57}, -{61,-24,58}, -{61,-24,59}, -{61,-24,60}, -{61,-24,61}, -{61,-24,62}, -{61,-24,63}, -{61,-23,-27}, -{61,-23,-26}, -{61,-23,-25}, -{61,-23,-24}, -{61,-23,-23}, -{61,-23,-22}, -{61,-23,-21}, -{61,-23,-20}, -{61,-23,-19}, -{61,-23,-18}, -{61,-23,-17}, -{61,-23,-16}, -{61,-23,-15}, -{61,-23,-14}, -{61,-23,-13}, -{61,-23,-12}, -{61,-23,-11}, -{61,-23,-10}, -{61,-23,-9}, -{61,-23,-8}, -{61,-23,-7}, -{61,-23,-6}, -{61,-23,-5}, -{61,-23,-4}, -{61,-23,-3}, -{61,-23,-2}, -{61,-23,-1}, -{61,-23,0}, -{61,-23,1}, -{61,-23,2}, -{61,-23,3}, -{61,-23,4}, -{61,-23,5}, -{61,-23,6}, -{61,-23,7}, -{61,-23,8}, -{61,-23,9}, -{61,-23,10}, -{61,-23,11}, -{61,-23,12}, -{61,-23,13}, -{61,-23,14}, -{61,-23,15}, -{61,-23,16}, -{61,-23,17}, -{61,-23,18}, -{61,-23,19}, -{61,-23,20}, -{61,-23,21}, -{61,-23,22}, -{61,-23,23}, -{61,-23,24}, -{61,-23,25}, -{61,-23,26}, -{61,-23,27}, -{61,-23,28}, -{61,-23,29}, -{61,-23,30}, -{61,-23,31}, -{61,-23,32}, -{61,-23,33}, -{61,-23,34}, -{61,-23,35}, -{61,-23,36}, -{61,-23,37}, -{61,-23,38}, -{61,-23,39}, -{61,-23,40}, -{61,-23,41}, -{61,-23,42}, -{61,-23,43}, -{61,-23,44}, -{61,-23,45}, -{61,-23,46}, -{61,-23,47}, -{61,-23,48}, -{61,-23,49}, -{61,-23,50}, -{61,-23,51}, -{61,-23,52}, -{61,-23,53}, -{61,-23,54}, -{61,-23,55}, -{61,-23,56}, -{61,-23,57}, -{61,-23,58}, -{61,-23,59}, -{61,-23,60}, -{61,-23,61}, -{61,-23,62}, -{61,-23,63}, -{61,-22,-28}, -{61,-22,-27}, -{61,-22,-26}, -{61,-22,-25}, -{61,-22,-24}, -{61,-22,-23}, -{61,-22,-22}, -{61,-22,-21}, -{61,-22,-20}, -{61,-22,-19}, -{61,-22,-18}, -{61,-22,-17}, -{61,-22,-16}, -{61,-22,-15}, -{61,-22,-14}, -{61,-22,-13}, -{61,-22,-12}, -{61,-22,-11}, -{61,-22,-10}, -{61,-22,-9}, -{61,-22,-8}, -{61,-22,-7}, -{61,-22,-6}, -{61,-22,-5}, -{61,-22,-4}, -{61,-22,-3}, -{61,-22,-2}, -{61,-22,-1}, -{61,-22,0}, -{61,-22,1}, -{61,-22,2}, -{61,-22,3}, -{61,-22,4}, -{61,-22,5}, -{61,-22,6}, -{61,-22,7}, -{61,-22,8}, -{61,-22,9}, -{61,-22,10}, -{61,-22,11}, -{61,-22,12}, -{61,-22,13}, -{61,-22,14}, -{61,-22,15}, -{61,-22,16}, -{61,-22,17}, -{61,-22,18}, -{61,-22,19}, -{61,-22,20}, -{61,-22,21}, -{61,-22,22}, -{61,-22,23}, -{61,-22,24}, -{61,-22,25}, -{61,-22,26}, -{61,-22,27}, -{61,-22,28}, -{61,-22,29}, -{61,-22,30}, -{61,-22,31}, -{61,-22,32}, -{61,-22,33}, -{61,-22,34}, -{61,-22,35}, -{61,-22,36}, -{61,-22,37}, -{61,-22,38}, -{61,-22,39}, -{61,-22,40}, -{61,-22,41}, -{61,-22,42}, -{61,-22,43}, -{61,-22,44}, -{61,-22,45}, -{61,-22,46}, -{61,-22,47}, -{61,-22,48}, -{61,-22,49}, -{61,-22,50}, -{61,-22,51}, -{61,-22,52}, -{61,-22,53}, -{61,-22,54}, -{61,-22,55}, -{61,-22,56}, -{61,-22,57}, -{61,-22,58}, -{61,-22,59}, -{61,-22,60}, -{61,-22,61}, -{61,-22,62}, -{61,-22,63}, -{61,-22,64}, -{61,-21,-29}, -{61,-21,-28}, -{61,-21,-27}, -{61,-21,-26}, -{61,-21,-25}, -{61,-21,-24}, -{61,-21,-23}, -{61,-21,-22}, -{61,-21,-21}, -{61,-21,-20}, -{61,-21,-19}, -{61,-21,-18}, -{61,-21,-17}, -{61,-21,-16}, -{61,-21,-15}, -{61,-21,-14}, -{61,-21,-13}, -{61,-21,-12}, -{61,-21,-11}, -{61,-21,-10}, -{61,-21,-9}, -{61,-21,-8}, -{61,-21,-7}, -{61,-21,-6}, -{61,-21,-5}, -{61,-21,-4}, -{61,-21,-3}, -{61,-21,-2}, -{61,-21,-1}, -{61,-21,0}, -{61,-21,1}, -{61,-21,2}, -{61,-21,3}, -{61,-21,4}, -{61,-21,5}, -{61,-21,6}, -{61,-21,7}, -{61,-21,8}, -{61,-21,9}, -{61,-21,10}, -{61,-21,11}, -{61,-21,12}, -{61,-21,13}, -{61,-21,14}, -{61,-21,15}, -{61,-21,16}, -{61,-21,17}, -{61,-21,18}, -{61,-21,19}, -{61,-21,20}, -{61,-21,21}, -{61,-21,22}, -{61,-21,23}, -{61,-21,24}, -{61,-21,25}, -{61,-21,26}, -{61,-21,27}, -{61,-21,28}, -{61,-21,29}, -{61,-21,30}, -{61,-21,31}, -{61,-21,32}, -{61,-21,33}, -{61,-21,34}, -{61,-21,35}, -{61,-21,36}, -{61,-21,37}, -{61,-21,38}, -{61,-21,39}, -{61,-21,40}, -{61,-21,41}, -{61,-21,42}, -{61,-21,43}, -{61,-21,44}, -{61,-21,45}, -{61,-21,46}, -{61,-21,47}, -{61,-21,48}, -{61,-21,49}, -{61,-21,50}, -{61,-21,51}, -{61,-21,52}, -{61,-21,53}, -{61,-21,54}, -{61,-21,55}, -{61,-21,56}, -{61,-21,57}, -{61,-21,58}, -{61,-21,59}, -{61,-21,60}, -{61,-21,61}, -{61,-21,62}, -{61,-21,63}, -{61,-21,64}, -{61,-20,-31}, -{61,-20,-30}, -{61,-20,-29}, -{61,-20,-28}, -{61,-20,-27}, -{61,-20,-26}, -{61,-20,-25}, -{61,-20,-24}, -{61,-20,-23}, -{61,-20,-22}, -{61,-20,-21}, -{61,-20,-20}, -{61,-20,-19}, -{61,-20,-18}, -{61,-20,-17}, -{61,-20,-16}, -{61,-20,-15}, -{61,-20,-14}, -{61,-20,-13}, -{61,-20,-12}, -{61,-20,-11}, -{61,-20,-10}, -{61,-20,-9}, -{61,-20,-8}, -{61,-20,-7}, -{61,-20,-6}, -{61,-20,-5}, -{61,-20,-4}, -{61,-20,-3}, -{61,-20,-2}, -{61,-20,-1}, -{61,-20,0}, -{61,-20,1}, -{61,-20,2}, -{61,-20,3}, -{61,-20,4}, -{61,-20,5}, -{61,-20,6}, -{61,-20,7}, -{61,-20,8}, -{61,-20,9}, -{61,-20,10}, -{61,-20,11}, -{61,-20,12}, -{61,-20,13}, -{61,-20,14}, -{61,-20,15}, -{61,-20,16}, -{61,-20,17}, -{61,-20,18}, -{61,-20,19}, -{61,-20,20}, -{61,-20,21}, -{61,-20,22}, -{61,-20,23}, -{61,-20,24}, -{61,-20,25}, -{61,-20,26}, -{61,-20,27}, -{61,-20,28}, -{61,-20,29}, -{61,-20,30}, -{61,-20,31}, -{61,-20,32}, -{61,-20,33}, -{61,-20,34}, -{61,-20,35}, -{61,-20,36}, -{61,-20,37}, -{61,-20,38}, -{61,-20,39}, -{61,-20,40}, -{61,-20,41}, -{61,-20,42}, -{61,-20,43}, -{61,-20,44}, -{61,-20,45}, -{61,-20,46}, -{61,-20,47}, -{61,-20,48}, -{61,-20,49}, -{61,-20,50}, -{61,-20,51}, -{61,-20,52}, -{61,-20,53}, -{61,-20,54}, -{61,-20,55}, -{61,-20,56}, -{61,-20,57}, -{61,-20,58}, -{61,-20,59}, -{61,-20,60}, -{61,-20,61}, -{61,-20,62}, -{61,-20,63}, -{61,-20,64}, -{61,-19,-32}, -{61,-19,-31}, -{61,-19,-30}, -{61,-19,-29}, -{61,-19,-28}, -{61,-19,-27}, -{61,-19,-26}, -{61,-19,-25}, -{61,-19,-24}, -{61,-19,-23}, -{61,-19,-22}, -{61,-19,-21}, -{61,-19,-20}, -{61,-19,-19}, -{61,-19,-18}, -{61,-19,-17}, -{61,-19,-16}, -{61,-19,-15}, -{61,-19,-14}, -{61,-19,-13}, -{61,-19,-12}, -{61,-19,-11}, -{61,-19,-10}, -{61,-19,-9}, -{61,-19,-8}, -{61,-19,-7}, -{61,-19,-6}, -{61,-19,-5}, -{61,-19,-4}, -{61,-19,-3}, -{61,-19,-2}, -{61,-19,-1}, -{61,-19,0}, -{61,-19,1}, -{61,-19,2}, -{61,-19,3}, -{61,-19,4}, -{61,-19,5}, -{61,-19,6}, -{61,-19,7}, -{61,-19,8}, -{61,-19,9}, -{61,-19,10}, -{61,-19,11}, -{61,-19,12}, -{61,-19,13}, -{61,-19,14}, -{61,-19,15}, -{61,-19,16}, -{61,-19,17}, -{61,-19,18}, -{61,-19,19}, -{61,-19,20}, -{61,-19,21}, -{61,-19,22}, -{61,-19,23}, -{61,-19,24}, -{61,-19,25}, -{61,-19,26}, -{61,-19,27}, -{61,-19,28}, -{61,-19,29}, -{61,-19,30}, -{61,-19,31}, -{61,-19,32}, -{61,-19,33}, -{61,-19,34}, -{61,-19,35}, -{61,-19,36}, -{61,-19,37}, -{61,-19,38}, -{61,-19,39}, -{61,-19,40}, -{61,-19,41}, -{61,-19,42}, -{61,-19,43}, -{61,-19,44}, -{61,-19,45}, -{61,-19,46}, -{61,-19,47}, -{61,-19,48}, -{61,-19,49}, -{61,-19,50}, -{61,-19,51}, -{61,-19,52}, -{61,-19,53}, -{61,-19,54}, -{61,-19,55}, -{61,-19,56}, -{61,-19,57}, -{61,-19,58}, -{61,-19,59}, -{61,-19,60}, -{61,-19,61}, -{61,-19,62}, -{61,-19,63}, -{61,-19,64}, -{61,-18,-33}, -{61,-18,-32}, -{61,-18,-31}, -{61,-18,-30}, -{61,-18,-29}, -{61,-18,-28}, -{61,-18,-27}, -{61,-18,-26}, -{61,-18,-25}, -{61,-18,-24}, -{61,-18,-23}, -{61,-18,-22}, -{61,-18,-21}, -{61,-18,-20}, -{61,-18,-19}, -{61,-18,-18}, -{61,-18,-17}, -{61,-18,-16}, -{61,-18,-15}, -{61,-18,-14}, -{61,-18,-13}, -{61,-18,-12}, -{61,-18,-11}, -{61,-18,-10}, -{61,-18,-9}, -{61,-18,-8}, -{61,-18,-7}, -{61,-18,-6}, -{61,-18,-5}, -{61,-18,-4}, -{61,-18,-3}, -{61,-18,-2}, -{61,-18,-1}, -{61,-18,0}, -{61,-18,1}, -{61,-18,2}, -{61,-18,3}, -{61,-18,4}, -{61,-18,5}, -{61,-18,6}, -{61,-18,7}, -{61,-18,8}, -{61,-18,9}, -{61,-18,10}, -{61,-18,11}, -{61,-18,12}, -{61,-18,13}, -{61,-18,14}, -{61,-18,15}, -{61,-18,16}, -{61,-18,17}, -{61,-18,18}, -{61,-18,19}, -{61,-18,20}, -{61,-18,21}, -{61,-18,22}, -{61,-18,23}, -{61,-18,24}, -{61,-18,25}, -{61,-18,26}, -{61,-18,27}, -{61,-18,28}, -{61,-18,29}, -{61,-18,30}, -{61,-18,31}, -{61,-18,32}, -{61,-18,33}, -{61,-18,34}, -{61,-18,35}, -{61,-18,36}, -{61,-18,37}, -{61,-18,38}, -{61,-18,39}, -{61,-18,40}, -{61,-18,41}, -{61,-18,42}, -{61,-18,43}, -{61,-18,44}, -{61,-18,45}, -{61,-18,46}, -{61,-18,47}, -{61,-18,48}, -{61,-18,49}, -{61,-18,50}, -{61,-18,51}, -{61,-18,52}, -{61,-18,53}, -{61,-18,54}, -{61,-18,55}, -{61,-18,56}, -{61,-18,57}, -{61,-18,58}, -{61,-18,59}, -{61,-18,60}, -{61,-18,61}, -{61,-18,62}, -{61,-18,63}, -{61,-18,64}, -{61,-17,-35}, -{61,-17,-34}, -{61,-17,-33}, -{61,-17,-32}, -{61,-17,-31}, -{61,-17,-30}, -{61,-17,-29}, -{61,-17,-28}, -{61,-17,-27}, -{61,-17,-26}, -{61,-17,-25}, -{61,-17,-24}, -{61,-17,-23}, -{61,-17,-22}, -{61,-17,-21}, -{61,-17,-20}, -{61,-17,-19}, -{61,-17,-18}, -{61,-17,-17}, -{61,-17,-16}, -{61,-17,-15}, -{61,-17,-14}, -{61,-17,-13}, -{61,-17,-12}, -{61,-17,-11}, -{61,-17,-10}, -{61,-17,-9}, -{61,-17,-8}, -{61,-17,-7}, -{61,-17,-6}, -{61,-17,-5}, -{61,-17,-4}, -{61,-17,-3}, -{61,-17,-2}, -{61,-17,-1}, -{61,-17,0}, -{61,-17,1}, -{61,-17,2}, -{61,-17,3}, -{61,-17,4}, -{61,-17,5}, -{61,-17,6}, -{61,-17,7}, -{61,-17,8}, -{61,-17,9}, -{61,-17,10}, -{61,-17,11}, -{61,-17,12}, -{61,-17,13}, -{61,-17,14}, -{61,-17,15}, -{61,-17,16}, -{61,-17,17}, -{61,-17,18}, -{61,-17,19}, -{61,-17,20}, -{61,-17,21}, -{61,-17,22}, -{61,-17,23}, -{61,-17,24}, -{61,-17,25}, -{61,-17,26}, -{61,-17,27}, -{61,-17,28}, -{61,-17,29}, -{61,-17,30}, -{61,-17,31}, -{61,-17,32}, -{61,-17,33}, -{61,-17,34}, -{61,-17,35}, -{61,-17,36}, -{61,-17,37}, -{61,-17,38}, -{61,-17,39}, -{61,-17,40}, -{61,-17,41}, -{61,-17,42}, -{61,-17,43}, -{61,-17,44}, -{61,-17,45}, -{61,-17,46}, -{61,-17,47}, -{61,-17,48}, -{61,-17,49}, -{61,-17,50}, -{61,-17,51}, -{61,-17,52}, -{61,-17,53}, -{61,-17,54}, -{61,-17,55}, -{61,-17,56}, -{61,-17,57}, -{61,-17,58}, -{61,-17,59}, -{61,-17,60}, -{61,-17,61}, -{61,-17,62}, -{61,-17,63}, -{61,-17,64}, -{61,-16,-36}, -{61,-16,-35}, -{61,-16,-34}, -{61,-16,-33}, -{61,-16,-32}, -{61,-16,-31}, -{61,-16,-30}, -{61,-16,-29}, -{61,-16,-28}, -{61,-16,-27}, -{61,-16,-26}, -{61,-16,-25}, -{61,-16,-24}, -{61,-16,-23}, -{61,-16,-22}, -{61,-16,-21}, -{61,-16,-20}, -{61,-16,-19}, -{61,-16,-18}, -{61,-16,-17}, -{61,-16,-16}, -{61,-16,-15}, -{61,-16,-14}, -{61,-16,-13}, -{61,-16,-12}, -{61,-16,-11}, -{61,-16,-10}, -{61,-16,-9}, -{61,-16,-8}, -{61,-16,-7}, -{61,-16,-6}, -{61,-16,-5}, -{61,-16,-4}, -{61,-16,-3}, -{61,-16,-2}, -{61,-16,-1}, -{61,-16,0}, -{61,-16,1}, -{61,-16,2}, -{61,-16,3}, -{61,-16,4}, -{61,-16,5}, -{61,-16,6}, -{61,-16,7}, -{61,-16,8}, -{61,-16,9}, -{61,-16,10}, -{61,-16,11}, -{61,-16,12}, -{61,-16,13}, -{61,-16,14}, -{61,-16,15}, -{61,-16,16}, -{61,-16,17}, -{61,-16,18}, -{61,-16,19}, -{61,-16,20}, -{61,-16,21}, -{61,-16,22}, -{61,-16,23}, -{61,-16,24}, -{61,-16,25}, -{61,-16,26}, -{61,-16,27}, -{61,-16,28}, -{61,-16,29}, -{61,-16,30}, -{61,-16,31}, -{61,-16,32}, -{61,-16,33}, -{61,-16,34}, -{61,-16,35}, -{61,-16,36}, -{61,-16,37}, -{61,-16,38}, -{61,-16,39}, -{61,-16,40}, -{61,-16,41}, -{61,-16,42}, -{61,-16,43}, -{61,-16,44}, -{61,-16,45}, -{61,-16,46}, -{61,-16,47}, -{61,-16,48}, -{61,-16,49}, -{61,-16,50}, -{61,-16,51}, -{61,-16,52}, -{61,-16,53}, -{61,-16,54}, -{61,-16,55}, -{61,-16,56}, -{61,-16,57}, -{61,-16,58}, -{61,-16,59}, -{61,-16,60}, -{61,-16,61}, -{61,-16,62}, -{61,-16,63}, -{61,-16,64}, -{61,-15,-37}, -{61,-15,-36}, -{61,-15,-35}, -{61,-15,-34}, -{61,-15,-33}, -{61,-15,-32}, -{61,-15,-31}, -{61,-15,-30}, -{61,-15,-29}, -{61,-15,-28}, -{61,-15,-27}, -{61,-15,-26}, -{61,-15,-25}, -{61,-15,-24}, -{61,-15,-23}, -{61,-15,-22}, -{61,-15,-21}, -{61,-15,-20}, -{61,-15,-19}, -{61,-15,-18}, -{61,-15,-17}, -{61,-15,-16}, -{61,-15,-15}, -{61,-15,-14}, -{61,-15,-13}, -{61,-15,-12}, -{61,-15,-11}, -{61,-15,-10}, -{61,-15,-9}, -{61,-15,-8}, -{61,-15,-7}, -{61,-15,-6}, -{61,-15,-5}, -{61,-15,-4}, -{61,-15,-3}, -{61,-15,-2}, -{61,-15,-1}, -{61,-15,0}, -{61,-15,1}, -{61,-15,2}, -{61,-15,3}, -{61,-15,4}, -{61,-15,5}, -{61,-15,6}, -{61,-15,7}, -{61,-15,8}, -{61,-15,9}, -{61,-15,10}, -{61,-15,11}, -{61,-15,12}, -{61,-15,13}, -{61,-15,14}, -{61,-15,15}, -{61,-15,16}, -{61,-15,17}, -{61,-15,18}, -{61,-15,19}, -{61,-15,20}, -{61,-15,21}, -{61,-15,22}, -{61,-15,23}, -{61,-15,24}, -{61,-15,25}, -{61,-15,26}, -{61,-15,27}, -{61,-15,28}, -{61,-15,29}, -{61,-15,30}, -{61,-15,31}, -{61,-15,32}, -{61,-15,33}, -{61,-15,34}, -{61,-15,35}, -{61,-15,36}, -{61,-15,37}, -{61,-15,38}, -{61,-15,39}, -{61,-15,40}, -{61,-15,41}, -{61,-15,42}, -{61,-15,43}, -{61,-15,44}, -{61,-15,45}, -{61,-15,46}, -{61,-15,47}, -{61,-15,48}, -{61,-15,49}, -{61,-15,50}, -{61,-15,51}, -{61,-15,52}, -{61,-15,53}, -{61,-15,54}, -{61,-15,55}, -{61,-15,56}, -{61,-15,57}, -{61,-15,58}, -{61,-15,59}, -{61,-15,60}, -{61,-15,61}, -{61,-15,62}, -{61,-15,63}, -{61,-15,64}, -{61,-14,-38}, -{61,-14,-37}, -{61,-14,-36}, -{61,-14,-35}, -{61,-14,-34}, -{61,-14,-33}, -{61,-14,-32}, -{61,-14,-31}, -{61,-14,-30}, -{61,-14,-29}, -{61,-14,-28}, -{61,-14,-27}, -{61,-14,-26}, -{61,-14,-25}, -{61,-14,-24}, -{61,-14,-23}, -{61,-14,-22}, -{61,-14,-21}, -{61,-14,-20}, -{61,-14,-19}, -{61,-14,-18}, -{61,-14,-17}, -{61,-14,-16}, -{61,-14,-15}, -{61,-14,-14}, -{61,-14,-13}, -{61,-14,-12}, -{61,-14,-11}, -{61,-14,-10}, -{61,-14,-9}, -{61,-14,-8}, -{61,-14,-7}, -{61,-14,-6}, -{61,-14,-5}, -{61,-14,-4}, -{61,-14,-3}, -{61,-14,-2}, -{61,-14,-1}, -{61,-14,0}, -{61,-14,1}, -{61,-14,2}, -{61,-14,3}, -{61,-14,4}, -{61,-14,5}, -{61,-14,6}, -{61,-14,7}, -{61,-14,8}, -{61,-14,9}, -{61,-14,10}, -{61,-14,11}, -{61,-14,12}, -{61,-14,13}, -{61,-14,14}, -{61,-14,15}, -{61,-14,16}, -{61,-14,17}, -{61,-14,18}, -{61,-14,19}, -{61,-14,20}, -{61,-14,21}, -{61,-14,22}, -{61,-14,23}, -{61,-14,24}, -{61,-14,25}, -{61,-14,26}, -{61,-14,27}, -{61,-14,28}, -{61,-14,29}, -{61,-14,30}, -{61,-14,31}, -{61,-14,32}, -{61,-14,33}, -{61,-14,34}, -{61,-14,35}, -{61,-14,36}, -{61,-14,37}, -{61,-14,38}, -{61,-14,39}, -{61,-14,40}, -{61,-14,41}, -{61,-14,42}, -{61,-14,43}, -{61,-14,44}, -{61,-14,45}, -{61,-14,46}, -{61,-14,47}, -{61,-14,48}, -{61,-14,49}, -{61,-14,50}, -{61,-14,51}, -{61,-14,52}, -{61,-14,53}, -{61,-14,54}, -{61,-14,55}, -{61,-14,56}, -{61,-14,57}, -{61,-14,58}, -{61,-14,59}, -{61,-14,60}, -{61,-14,61}, -{61,-14,62}, -{61,-14,63}, -{61,-14,64}, -{61,-13,-40}, -{61,-13,-39}, -{61,-13,-38}, -{61,-13,-37}, -{61,-13,-36}, -{61,-13,-35}, -{61,-13,-34}, -{61,-13,-33}, -{61,-13,-32}, -{61,-13,-31}, -{61,-13,-30}, -{61,-13,-29}, -{61,-13,-28}, -{61,-13,-27}, -{61,-13,-26}, -{61,-13,-25}, -{61,-13,-24}, -{61,-13,-23}, -{61,-13,-22}, -{61,-13,-21}, -{61,-13,-20}, -{61,-13,-19}, -{61,-13,-18}, -{61,-13,-17}, -{61,-13,-16}, -{61,-13,-15}, -{61,-13,-14}, -{61,-13,-13}, -{61,-13,-12}, -{61,-13,-11}, -{61,-13,-10}, -{61,-13,-9}, -{61,-13,-8}, -{61,-13,-7}, -{61,-13,-6}, -{61,-13,-5}, -{61,-13,-4}, -{61,-13,-3}, -{61,-13,-2}, -{61,-13,-1}, -{61,-13,0}, -{61,-13,1}, -{61,-13,2}, -{61,-13,3}, -{61,-13,4}, -{61,-13,5}, -{61,-13,6}, -{61,-13,7}, -{61,-13,8}, -{61,-13,9}, -{61,-13,10}, -{61,-13,11}, -{61,-13,12}, -{61,-13,13}, -{61,-13,14}, -{61,-13,15}, -{61,-13,16}, -{61,-13,17}, -{61,-13,18}, -{61,-13,19}, -{61,-13,20}, -{61,-13,21}, -{61,-13,22}, -{61,-13,23}, -{61,-13,24}, -{61,-13,25}, -{61,-13,26}, -{61,-13,27}, -{61,-13,28}, -{61,-13,29}, -{61,-13,30}, -{61,-13,31}, -{61,-13,32}, -{61,-13,33}, -{61,-13,34}, -{61,-13,35}, -{61,-13,36}, -{61,-13,37}, -{61,-13,38}, -{61,-13,39}, -{61,-13,40}, -{61,-13,41}, -{61,-13,42}, -{61,-13,43}, -{61,-13,44}, -{61,-13,45}, -{61,-13,46}, -{61,-13,47}, -{61,-13,48}, -{61,-13,49}, -{61,-13,50}, -{61,-13,51}, -{61,-13,52}, -{61,-13,53}, -{61,-13,54}, -{61,-13,55}, -{61,-13,56}, -{61,-13,57}, -{61,-13,58}, -{61,-13,59}, -{61,-13,60}, -{61,-13,61}, -{61,-13,62}, -{61,-13,63}, -{61,-13,64}, -{61,-12,-41}, -{61,-12,-40}, -{61,-12,-39}, -{61,-12,-38}, -{61,-12,-37}, -{61,-12,-36}, -{61,-12,-35}, -{61,-12,-34}, -{61,-12,-33}, -{61,-12,-32}, -{61,-12,-31}, -{61,-12,-30}, -{61,-12,-29}, -{61,-12,-28}, -{61,-12,-27}, -{61,-12,-26}, -{61,-12,-25}, -{61,-12,-24}, -{61,-12,-23}, -{61,-12,-22}, -{61,-12,-21}, -{61,-12,-20}, -{61,-12,-19}, -{61,-12,-18}, -{61,-12,-17}, -{61,-12,-16}, -{61,-12,-15}, -{61,-12,-14}, -{61,-12,-13}, -{61,-12,-12}, -{61,-12,-11}, -{61,-12,-10}, -{61,-12,-9}, -{61,-12,-8}, -{61,-12,-7}, -{61,-12,-6}, -{61,-12,-5}, -{61,-12,-4}, -{61,-12,-3}, -{61,-12,-2}, -{61,-12,-1}, -{61,-12,0}, -{61,-12,1}, -{61,-12,2}, -{61,-12,3}, -{61,-12,4}, -{61,-12,5}, -{61,-12,6}, -{61,-12,7}, -{61,-12,8}, -{61,-12,9}, -{61,-12,10}, -{61,-12,11}, -{61,-12,12}, -{61,-12,13}, -{61,-12,14}, -{61,-12,15}, -{61,-12,16}, -{61,-12,17}, -{61,-12,18}, -{61,-12,19}, -{61,-12,20}, -{61,-12,21}, -{61,-12,22}, -{61,-12,23}, -{61,-12,24}, -{61,-12,25}, -{61,-12,26}, -{61,-12,27}, -{61,-12,28}, -{61,-12,29}, -{61,-12,30}, -{61,-12,31}, -{61,-12,32}, -{61,-12,33}, -{61,-12,34}, -{61,-12,35}, -{61,-12,36}, -{61,-12,37}, -{61,-12,38}, -{61,-12,39}, -{61,-12,40}, -{61,-12,41}, -{61,-12,42}, -{61,-12,43}, -{61,-12,44}, -{61,-12,45}, -{61,-12,46}, -{61,-12,47}, -{61,-12,48}, -{61,-12,49}, -{61,-12,50}, -{61,-12,51}, -{61,-12,52}, -{61,-12,53}, -{61,-12,54}, -{61,-12,55}, -{61,-12,56}, -{61,-12,57}, -{61,-12,58}, -{61,-12,59}, -{61,-12,60}, -{61,-12,61}, -{61,-12,62}, -{61,-12,63}, -{61,-12,64}, -{61,-11,-42}, -{61,-11,-41}, -{61,-11,-40}, -{61,-11,-39}, -{61,-11,-38}, -{61,-11,-37}, -{61,-11,-36}, -{61,-11,-35}, -{61,-11,-34}, -{61,-11,-33}, -{61,-11,-32}, -{61,-11,-31}, -{61,-11,-30}, -{61,-11,-29}, -{61,-11,-28}, -{61,-11,-27}, -{61,-11,-26}, -{61,-11,-25}, -{61,-11,-24}, -{61,-11,-23}, -{61,-11,-22}, -{61,-11,-21}, -{61,-11,-20}, -{61,-11,-19}, -{61,-11,-18}, -{61,-11,-17}, -{61,-11,-16}, -{61,-11,-15}, -{61,-11,-14}, -{61,-11,-13}, -{61,-11,-12}, -{61,-11,-11}, -{61,-11,-10}, -{61,-11,-9}, -{61,-11,-8}, -{61,-11,-7}, -{61,-11,-6}, -{61,-11,-5}, -{61,-11,-4}, -{61,-11,-3}, -{61,-11,-2}, -{61,-11,-1}, -{61,-11,0}, -{61,-11,1}, -{61,-11,2}, -{61,-11,3}, -{61,-11,4}, -{61,-11,5}, -{61,-11,6}, -{61,-11,7}, -{61,-11,8}, -{61,-11,9}, -{61,-11,10}, -{61,-11,11}, -{61,-11,12}, -{61,-11,13}, -{61,-11,14}, -{61,-11,15}, -{61,-11,16}, -{61,-11,17}, -{61,-11,18}, -{61,-11,19}, -{61,-11,20}, -{61,-11,21}, -{61,-11,22}, -{61,-11,23}, -{61,-11,24}, -{61,-11,25}, -{61,-11,26}, -{61,-11,27}, -{61,-11,28}, -{61,-11,29}, -{61,-11,30}, -{61,-11,31}, -{61,-11,32}, -{61,-11,33}, -{61,-11,34}, -{61,-11,35}, -{61,-11,36}, -{61,-11,37}, -{61,-11,38}, -{61,-11,39}, -{61,-11,40}, -{61,-11,41}, -{61,-11,42}, -{61,-11,43}, -{61,-11,44}, -{61,-11,45}, -{61,-11,46}, -{61,-11,47}, -{61,-11,48}, -{61,-11,49}, -{61,-11,50}, -{61,-11,51}, -{61,-11,52}, -{61,-11,53}, -{61,-11,54}, -{61,-11,55}, -{61,-11,56}, -{61,-11,57}, -{61,-11,58}, -{61,-11,59}, -{61,-11,60}, -{61,-11,61}, -{61,-11,62}, -{61,-11,63}, -{61,-11,64}, -{61,-10,-43}, -{61,-10,-42}, -{61,-10,-41}, -{61,-10,-40}, -{61,-10,-39}, -{61,-10,-38}, -{61,-10,-37}, -{61,-10,-36}, -{61,-10,-35}, -{61,-10,-34}, -{61,-10,-33}, -{61,-10,-32}, -{61,-10,-31}, -{61,-10,-30}, -{61,-10,-29}, -{61,-10,-28}, -{61,-10,-27}, -{61,-10,-26}, -{61,-10,-25}, -{61,-10,-24}, -{61,-10,-23}, -{61,-10,-22}, -{61,-10,-21}, -{61,-10,-20}, -{61,-10,-19}, -{61,-10,-18}, -{61,-10,-17}, -{61,-10,-16}, -{61,-10,-15}, -{61,-10,-14}, -{61,-10,-13}, -{61,-10,-12}, -{61,-10,-11}, -{61,-10,-10}, -{61,-10,-9}, -{61,-10,-8}, -{61,-10,-7}, -{61,-10,-6}, -{61,-10,-5}, -{61,-10,-4}, -{61,-10,-3}, -{61,-10,-2}, -{61,-10,-1}, -{61,-10,0}, -{61,-10,1}, -{61,-10,2}, -{61,-10,3}, -{61,-10,4}, -{61,-10,5}, -{61,-10,6}, -{61,-10,7}, -{61,-10,8}, -{61,-10,9}, -{61,-10,10}, -{61,-10,11}, -{61,-10,12}, -{61,-10,13}, -{61,-10,14}, -{61,-10,15}, -{61,-10,16}, -{61,-10,17}, -{61,-10,18}, -{61,-10,19}, -{61,-10,20}, -{61,-10,21}, -{61,-10,22}, -{61,-10,23}, -{61,-10,24}, -{61,-10,25}, -{61,-10,26}, -{61,-10,27}, -{61,-10,28}, -{61,-10,29}, -{61,-10,30}, -{61,-10,31}, -{61,-10,32}, -{61,-10,33}, -{61,-10,34}, -{61,-10,35}, -{61,-10,36}, -{61,-10,37}, -{61,-10,38}, -{61,-10,39}, -{61,-10,40}, -{61,-10,41}, -{61,-10,42}, -{61,-10,43}, -{61,-10,44}, -{61,-10,45}, -{61,-10,46}, -{61,-10,47}, -{61,-10,48}, -{61,-10,49}, -{61,-10,50}, -{61,-10,51}, -{61,-10,52}, -{61,-10,53}, -{61,-10,54}, -{61,-10,55}, -{61,-10,56}, -{61,-10,57}, -{61,-10,58}, -{61,-10,59}, -{61,-10,60}, -{61,-10,61}, -{61,-10,62}, -{61,-10,63}, -{61,-10,64}, -{61,-9,-45}, -{61,-9,-44}, -{61,-9,-43}, -{61,-9,-42}, -{61,-9,-41}, -{61,-9,-40}, -{61,-9,-39}, -{61,-9,-38}, -{61,-9,-37}, -{61,-9,-36}, -{61,-9,-35}, -{61,-9,-34}, -{61,-9,-33}, -{61,-9,-32}, -{61,-9,-31}, -{61,-9,-30}, -{61,-9,-29}, -{61,-9,-28}, -{61,-9,-27}, -{61,-9,-26}, -{61,-9,-25}, -{61,-9,-24}, -{61,-9,-23}, -{61,-9,-22}, -{61,-9,-21}, -{61,-9,-20}, -{61,-9,-19}, -{61,-9,-18}, -{61,-9,-17}, -{61,-9,-16}, -{61,-9,-15}, -{61,-9,-14}, -{61,-9,-13}, -{61,-9,-12}, -{61,-9,-11}, -{61,-9,-10}, -{61,-9,-9}, -{61,-9,-8}, -{61,-9,-7}, -{61,-9,-6}, -{61,-9,-5}, -{61,-9,-4}, -{61,-9,-3}, -{61,-9,-2}, -{61,-9,-1}, -{61,-9,0}, -{61,-9,1}, -{61,-9,2}, -{61,-9,3}, -{61,-9,4}, -{61,-9,5}, -{61,-9,6}, -{61,-9,7}, -{61,-9,8}, -{61,-9,9}, -{61,-9,10}, -{61,-9,11}, -{61,-9,12}, -{61,-9,13}, -{61,-9,14}, -{61,-9,15}, -{61,-9,16}, -{61,-9,17}, -{61,-9,18}, -{61,-9,19}, -{61,-9,20}, -{61,-9,21}, -{61,-9,22}, -{61,-9,23}, -{61,-9,24}, -{61,-9,25}, -{61,-9,26}, -{61,-9,27}, -{61,-9,28}, -{61,-9,29}, -{61,-9,30}, -{61,-9,31}, -{61,-9,32}, -{61,-9,33}, -{61,-9,34}, -{61,-9,35}, -{61,-9,36}, -{61,-9,37}, -{61,-9,38}, -{61,-9,39}, -{61,-9,40}, -{61,-9,41}, -{61,-9,42}, -{61,-9,43}, -{61,-9,44}, -{61,-9,45}, -{61,-9,46}, -{61,-9,47}, -{61,-9,48}, -{61,-9,49}, -{61,-9,50}, -{61,-9,51}, -{61,-9,52}, -{61,-9,53}, -{61,-9,54}, -{61,-9,55}, -{61,-9,56}, -{61,-9,57}, -{61,-9,58}, -{61,-9,59}, -{61,-9,60}, -{61,-9,61}, -{61,-9,62}, -{61,-9,63}, -{61,-9,64}, -{61,-8,-46}, -{61,-8,-45}, -{61,-8,-44}, -{61,-8,-43}, -{61,-8,-42}, -{61,-8,-41}, -{61,-8,-40}, -{61,-8,-39}, -{61,-8,-38}, -{61,-8,-37}, -{61,-8,-36}, -{61,-8,-35}, -{61,-8,-34}, -{61,-8,-33}, -{61,-8,-32}, -{61,-8,-31}, -{61,-8,-30}, -{61,-8,-29}, -{61,-8,-28}, -{61,-8,-27}, -{61,-8,-26}, -{61,-8,-25}, -{61,-8,-24}, -{61,-8,-23}, -{61,-8,-22}, -{61,-8,-21}, -{61,-8,-20}, -{61,-8,-19}, -{61,-8,-18}, -{61,-8,-17}, -{61,-8,-16}, -{61,-8,-15}, -{61,-8,-14}, -{61,-8,-13}, -{61,-8,-12}, -{61,-8,-11}, -{61,-8,-10}, -{61,-8,-9}, -{61,-8,-8}, -{61,-8,-7}, -{61,-8,-6}, -{61,-8,-5}, -{61,-8,-4}, -{61,-8,-3}, -{61,-8,-2}, -{61,-8,-1}, -{61,-8,0}, -{61,-8,1}, -{61,-8,2}, -{61,-8,3}, -{61,-8,4}, -{61,-8,5}, -{61,-8,6}, -{61,-8,7}, -{61,-8,8}, -{61,-8,9}, -{61,-8,10}, -{61,-8,11}, -{61,-8,12}, -{61,-8,13}, -{61,-8,14}, -{61,-8,15}, -{61,-8,16}, -{61,-8,17}, -{61,-8,18}, -{61,-8,19}, -{61,-8,20}, -{61,-8,21}, -{61,-8,22}, -{61,-8,23}, -{61,-8,24}, -{61,-8,25}, -{61,-8,26}, -{61,-8,27}, -{61,-8,28}, -{61,-8,29}, -{61,-8,30}, -{61,-8,31}, -{61,-8,32}, -{61,-8,33}, -{61,-8,34}, -{61,-8,35}, -{61,-8,36}, -{61,-8,37}, -{61,-8,38}, -{61,-8,39}, -{61,-8,40}, -{61,-8,41}, -{61,-8,42}, -{61,-8,43}, -{61,-8,44}, -{61,-8,45}, -{61,-8,46}, -{61,-8,47}, -{61,-8,48}, -{61,-8,49}, -{61,-8,50}, -{61,-8,51}, -{61,-8,52}, -{61,-8,53}, -{61,-8,54}, -{61,-8,55}, -{61,-8,56}, -{61,-8,57}, -{61,-8,58}, -{61,-8,59}, -{61,-8,60}, -{61,-8,61}, -{61,-8,62}, -{61,-8,63}, -{61,-8,64}, -{61,-7,-47}, -{61,-7,-46}, -{61,-7,-45}, -{61,-7,-44}, -{61,-7,-43}, -{61,-7,-42}, -{61,-7,-41}, -{61,-7,-40}, -{61,-7,-39}, -{61,-7,-38}, -{61,-7,-37}, -{61,-7,-36}, -{61,-7,-35}, -{61,-7,-34}, -{61,-7,-33}, -{61,-7,-32}, -{61,-7,-31}, -{61,-7,-30}, -{61,-7,-29}, -{61,-7,-28}, -{61,-7,-27}, -{61,-7,-26}, -{61,-7,-25}, -{61,-7,-24}, -{61,-7,-23}, -{61,-7,-22}, -{61,-7,-21}, -{61,-7,-20}, -{61,-7,-19}, -{61,-7,-18}, -{61,-7,-17}, -{61,-7,-16}, -{61,-7,-15}, -{61,-7,-14}, -{61,-7,-13}, -{61,-7,-12}, -{61,-7,-11}, -{61,-7,-10}, -{61,-7,-9}, -{61,-7,-8}, -{61,-7,-7}, -{61,-7,-6}, -{61,-7,-5}, -{61,-7,-4}, -{61,-7,-3}, -{61,-7,-2}, -{61,-7,-1}, -{61,-7,0}, -{61,-7,1}, -{61,-7,2}, -{61,-7,3}, -{61,-7,4}, -{61,-7,5}, -{61,-7,6}, -{61,-7,7}, -{61,-7,8}, -{61,-7,9}, -{61,-7,10}, -{61,-7,11}, -{61,-7,12}, -{61,-7,13}, -{61,-7,14}, -{61,-7,15}, -{61,-7,16}, -{61,-7,17}, -{61,-7,18}, -{61,-7,19}, -{61,-7,20}, -{61,-7,21}, -{61,-7,22}, -{61,-7,23}, -{61,-7,24}, -{61,-7,25}, -{61,-7,26}, -{61,-7,27}, -{61,-7,28}, -{61,-7,29}, -{61,-7,30}, -{61,-7,31}, -{61,-7,32}, -{61,-7,33}, -{61,-7,34}, -{61,-7,35}, -{61,-7,36}, -{61,-7,37}, -{61,-7,38}, -{61,-7,39}, -{61,-7,40}, -{61,-7,41}, -{61,-7,42}, -{61,-7,43}, -{61,-7,44}, -{61,-7,45}, -{61,-7,46}, -{61,-7,47}, -{61,-7,48}, -{61,-7,49}, -{61,-7,50}, -{61,-7,51}, -{61,-7,52}, -{61,-7,53}, -{61,-7,54}, -{61,-7,55}, -{61,-7,56}, -{61,-7,57}, -{61,-7,58}, -{61,-7,59}, -{61,-7,60}, -{61,-7,61}, -{61,-7,62}, -{61,-7,63}, -{61,-7,64}, -{61,-6,-48}, -{61,-6,-47}, -{61,-6,-46}, -{61,-6,-45}, -{61,-6,-44}, -{61,-6,-43}, -{61,-6,-42}, -{61,-6,-41}, -{61,-6,-40}, -{61,-6,-39}, -{61,-6,-38}, -{61,-6,-37}, -{61,-6,-36}, -{61,-6,-35}, -{61,-6,-34}, -{61,-6,-33}, -{61,-6,-32}, -{61,-6,-31}, -{61,-6,-30}, -{61,-6,-29}, -{61,-6,-28}, -{61,-6,-27}, -{61,-6,-26}, -{61,-6,-25}, -{61,-6,-24}, -{61,-6,-23}, -{61,-6,-22}, -{61,-6,-21}, -{61,-6,-20}, -{61,-6,-19}, -{61,-6,-18}, -{61,-6,-17}, -{61,-6,-16}, -{61,-6,-15}, -{61,-6,-14}, -{61,-6,-13}, -{61,-6,-12}, -{61,-6,-11}, -{61,-6,-10}, -{61,-6,-9}, -{61,-6,-8}, -{61,-6,-7}, -{61,-6,-6}, -{61,-6,-5}, -{61,-6,-4}, -{61,-6,-3}, -{61,-6,-2}, -{61,-6,-1}, -{61,-6,0}, -{61,-6,1}, -{61,-6,2}, -{61,-6,3}, -{61,-6,4}, -{61,-6,5}, -{61,-6,6}, -{61,-6,7}, -{61,-6,8}, -{61,-6,9}, -{61,-6,10}, -{61,-6,11}, -{61,-6,12}, -{61,-6,13}, -{61,-6,14}, -{61,-6,15}, -{61,-6,16}, -{61,-6,17}, -{61,-6,18}, -{61,-6,19}, -{61,-6,20}, -{61,-6,21}, -{61,-6,22}, -{61,-6,23}, -{61,-6,24}, -{61,-6,25}, -{61,-6,26}, -{61,-6,27}, -{61,-6,28}, -{61,-6,29}, -{61,-6,30}, -{61,-6,31}, -{61,-6,32}, -{61,-6,33}, -{61,-6,34}, -{61,-6,35}, -{61,-6,36}, -{61,-6,37}, -{61,-6,38}, -{61,-6,39}, -{61,-6,40}, -{61,-6,41}, -{61,-6,42}, -{61,-6,43}, -{61,-6,44}, -{61,-6,45}, -{61,-6,46}, -{61,-6,47}, -{61,-6,48}, -{61,-6,49}, -{61,-6,50}, -{61,-6,51}, -{61,-6,52}, -{61,-6,53}, -{61,-6,54}, -{61,-6,55}, -{61,-6,56}, -{61,-6,57}, -{61,-6,58}, -{61,-6,59}, -{61,-6,60}, -{61,-6,61}, -{61,-6,62}, -{61,-6,63}, -{61,-6,64}, -{61,-6,65}, -{61,-5,-49}, -{61,-5,-48}, -{61,-5,-47}, -{61,-5,-46}, -{61,-5,-45}, -{61,-5,-44}, -{61,-5,-43}, -{61,-5,-42}, -{61,-5,-41}, -{61,-5,-40}, -{61,-5,-39}, -{61,-5,-38}, -{61,-5,-37}, -{61,-5,-36}, -{61,-5,-35}, -{61,-5,-34}, -{61,-5,-33}, -{61,-5,-32}, -{61,-5,-31}, -{61,-5,-30}, -{61,-5,-29}, -{61,-5,-28}, -{61,-5,-27}, -{61,-5,-26}, -{61,-5,-25}, -{61,-5,-24}, -{61,-5,-23}, -{61,-5,-22}, -{61,-5,-21}, -{61,-5,-20}, -{61,-5,-19}, -{61,-5,-18}, -{61,-5,-17}, -{61,-5,-16}, -{61,-5,-15}, -{61,-5,-14}, -{61,-5,-13}, -{61,-5,-12}, -{61,-5,-11}, -{61,-5,-10}, -{61,-5,-9}, -{61,-5,-8}, -{61,-5,-7}, -{61,-5,-6}, -{61,-5,-5}, -{61,-5,-4}, -{61,-5,-3}, -{61,-5,-2}, -{61,-5,-1}, -{61,-5,0}, -{61,-5,1}, -{61,-5,2}, -{61,-5,3}, -{61,-5,4}, -{61,-5,5}, -{61,-5,6}, -{61,-5,7}, -{61,-5,8}, -{61,-5,9}, -{61,-5,10}, -{61,-5,11}, -{61,-5,12}, -{61,-5,13}, -{61,-5,14}, -{61,-5,15}, -{61,-5,16}, -{61,-5,17}, -{61,-5,18}, -{61,-5,19}, -{61,-5,20}, -{61,-5,21}, -{61,-5,22}, -{61,-5,23}, -{61,-5,24}, -{61,-5,25}, -{61,-5,26}, -{61,-5,27}, -{61,-5,28}, -{61,-5,29}, -{61,-5,30}, -{61,-5,31}, -{61,-5,32}, -{61,-5,33}, -{61,-5,34}, -{61,-5,35}, -{61,-5,36}, -{61,-5,37}, -{61,-5,38}, -{61,-5,39}, -{61,-5,40}, -{61,-5,41}, -{61,-5,42}, -{61,-5,43}, -{61,-5,44}, -{61,-5,45}, -{61,-5,46}, -{61,-5,47}, -{61,-5,48}, -{61,-5,49}, -{61,-5,50}, -{61,-5,51}, -{61,-5,52}, -{61,-5,53}, -{61,-5,54}, -{61,-5,55}, -{61,-5,56}, -{61,-5,57}, -{61,-5,58}, -{61,-5,59}, -{61,-5,60}, -{61,-5,61}, -{61,-5,62}, -{61,-5,63}, -{61,-5,64}, -{61,-5,65}, -{61,-4,-50}, -{61,-4,-49}, -{61,-4,-48}, -{61,-4,-47}, -{61,-4,-46}, -{61,-4,-45}, -{61,-4,-44}, -{61,-4,-43}, -{61,-4,-42}, -{61,-4,-41}, -{61,-4,-40}, -{61,-4,-39}, -{61,-4,-38}, -{61,-4,-37}, -{61,-4,-36}, -{61,-4,-35}, -{61,-4,-34}, -{61,-4,-33}, -{61,-4,-32}, -{61,-4,-31}, -{61,-4,-30}, -{61,-4,-29}, -{61,-4,-28}, -{61,-4,-27}, -{61,-4,-26}, -{61,-4,-25}, -{61,-4,-24}, -{61,-4,-23}, -{61,-4,-22}, -{61,-4,-21}, -{61,-4,-20}, -{61,-4,-19}, -{61,-4,-18}, -{61,-4,-17}, -{61,-4,-16}, -{61,-4,-15}, -{61,-4,-14}, -{61,-4,-13}, -{61,-4,-12}, -{61,-4,-11}, -{61,-4,-10}, -{61,-4,-9}, -{61,-4,-8}, -{61,-4,-7}, -{61,-4,-6}, -{61,-4,-5}, -{61,-4,-4}, -{61,-4,-3}, -{61,-4,-2}, -{61,-4,-1}, -{61,-4,0}, -{61,-4,1}, -{61,-4,2}, -{61,-4,3}, -{61,-4,4}, -{61,-4,5}, -{61,-4,6}, -{61,-4,7}, -{61,-4,8}, -{61,-4,9}, -{61,-4,10}, -{61,-4,11}, -{61,-4,12}, -{61,-4,13}, -{61,-4,14}, -{61,-4,15}, -{61,-4,16}, -{61,-4,17}, -{61,-4,18}, -{61,-4,19}, -{61,-4,20}, -{61,-4,21}, -{61,-4,22}, -{61,-4,23}, -{61,-4,24}, -{61,-4,25}, -{61,-4,26}, -{61,-4,27}, -{61,-4,28}, -{61,-4,29}, -{61,-4,30}, -{61,-4,31}, -{61,-4,32}, -{61,-4,33}, -{61,-4,34}, -{61,-4,35}, -{61,-4,36}, -{61,-4,37}, -{61,-4,38}, -{61,-4,39}, -{61,-4,40}, -{61,-4,41}, -{61,-4,42}, -{61,-4,43}, -{61,-4,44}, -{61,-4,45}, -{61,-4,46}, -{61,-4,47}, -{61,-4,48}, -{61,-4,49}, -{61,-4,50}, -{61,-4,51}, -{61,-4,52}, -{61,-4,53}, -{61,-4,54}, -{61,-4,55}, -{61,-4,56}, -{61,-4,57}, -{61,-4,58}, -{61,-4,59}, -{61,-4,60}, -{61,-4,61}, -{61,-4,62}, -{61,-4,63}, -{61,-4,64}, -{61,-4,65}, -{61,-3,-52}, -{61,-3,-51}, -{61,-3,-50}, -{61,-3,-49}, -{61,-3,-48}, -{61,-3,-47}, -{61,-3,-46}, -{61,-3,-45}, -{61,-3,-44}, -{61,-3,-43}, -{61,-3,-42}, -{61,-3,-41}, -{61,-3,-40}, -{61,-3,-39}, -{61,-3,-38}, -{61,-3,-37}, -{61,-3,-36}, -{61,-3,-35}, -{61,-3,-34}, -{61,-3,-33}, -{61,-3,-32}, -{61,-3,-31}, -{61,-3,-30}, -{61,-3,-29}, -{61,-3,-28}, -{61,-3,-27}, -{61,-3,-26}, -{61,-3,-25}, -{61,-3,-24}, -{61,-3,-23}, -{61,-3,-22}, -{61,-3,-21}, -{61,-3,-20}, -{61,-3,-19}, -{61,-3,-18}, -{61,-3,-17}, -{61,-3,-16}, -{61,-3,-15}, -{61,-3,-14}, -{61,-3,-13}, -{61,-3,-12}, -{61,-3,-11}, -{61,-3,-10}, -{61,-3,-9}, -{61,-3,-8}, -{61,-3,-7}, -{61,-3,-6}, -{61,-3,-5}, -{61,-3,-4}, -{61,-3,-3}, -{61,-3,-2}, -{61,-3,-1}, -{61,-3,0}, -{61,-3,1}, -{61,-3,2}, -{61,-3,3}, -{61,-3,4}, -{61,-3,5}, -{61,-3,6}, -{61,-3,7}, -{61,-3,8}, -{61,-3,9}, -{61,-3,10}, -{61,-3,11}, -{61,-3,12}, -{61,-3,13}, -{61,-3,14}, -{61,-3,15}, -{61,-3,16}, -{61,-3,17}, -{61,-3,18}, -{61,-3,19}, -{61,-3,20}, -{61,-3,21}, -{61,-3,22}, -{61,-3,23}, -{61,-3,24}, -{61,-3,25}, -{61,-3,26}, -{61,-3,27}, -{61,-3,28}, -{61,-3,29}, -{61,-3,30}, -{61,-3,31}, -{61,-3,32}, -{61,-3,33}, -{61,-3,34}, -{61,-3,35}, -{61,-3,36}, -{61,-3,37}, -{61,-3,38}, -{61,-3,39}, -{61,-3,40}, -{61,-3,41}, -{61,-3,42}, -{61,-3,43}, -{61,-3,44}, -{61,-3,45}, -{61,-3,46}, -{61,-3,47}, -{61,-3,48}, -{61,-3,49}, -{61,-3,50}, -{61,-3,51}, -{61,-3,52}, -{61,-3,53}, -{61,-3,54}, -{61,-3,55}, -{61,-3,56}, -{61,-3,57}, -{61,-3,58}, -{61,-3,59}, -{61,-3,60}, -{61,-3,61}, -{61,-3,62}, -{61,-3,63}, -{61,-3,64}, -{61,-3,65}, -{61,-2,-53}, -{61,-2,-52}, -{61,-2,-51}, -{61,-2,-50}, -{61,-2,-49}, -{61,-2,-48}, -{61,-2,-47}, -{61,-2,-46}, -{61,-2,-45}, -{61,-2,-44}, -{61,-2,-43}, -{61,-2,-42}, -{61,-2,-41}, -{61,-2,-40}, -{61,-2,-39}, -{61,-2,-38}, -{61,-2,-37}, -{61,-2,-36}, -{61,-2,-35}, -{61,-2,-34}, -{61,-2,-33}, -{61,-2,-32}, -{61,-2,-31}, -{61,-2,-30}, -{61,-2,-29}, -{61,-2,-28}, -{61,-2,-27}, -{61,-2,-26}, -{61,-2,-25}, -{61,-2,-24}, -{61,-2,-23}, -{61,-2,-22}, -{61,-2,-21}, -{61,-2,-20}, -{61,-2,-19}, -{61,-2,-18}, -{61,-2,-17}, -{61,-2,-16}, -{61,-2,-15}, -{61,-2,-14}, -{61,-2,-13}, -{61,-2,-12}, -{61,-2,-11}, -{61,-2,-10}, -{61,-2,-9}, -{61,-2,-8}, -{61,-2,-7}, -{61,-2,-6}, -{61,-2,-5}, -{61,-2,-4}, -{61,-2,-3}, -{61,-2,-2}, -{61,-2,-1}, -{61,-2,0}, -{61,-2,1}, -{61,-2,2}, -{61,-2,3}, -{61,-2,4}, -{61,-2,5}, -{61,-2,6}, -{61,-2,7}, -{61,-2,8}, -{61,-2,9}, -{61,-2,10}, -{61,-2,11}, -{61,-2,12}, -{61,-2,13}, -{61,-2,14}, -{61,-2,15}, -{61,-2,16}, -{61,-2,17}, -{61,-2,18}, -{61,-2,19}, -{61,-2,20}, -{61,-2,21}, -{61,-2,22}, -{61,-2,23}, -{61,-2,24}, -{61,-2,25}, -{61,-2,26}, -{61,-2,27}, -{61,-2,28}, -{61,-2,29}, -{61,-2,30}, -{61,-2,31}, -{61,-2,32}, -{61,-2,33}, -{61,-2,34}, -{61,-2,35}, -{61,-2,36}, -{61,-2,37}, -{61,-2,38}, -{61,-2,39}, -{61,-2,40}, -{61,-2,41}, -{61,-2,42}, -{61,-2,43}, -{61,-2,44}, -{61,-2,45}, -{61,-2,46}, -{61,-2,47}, -{61,-2,48}, -{61,-2,49}, -{61,-2,50}, -{61,-2,51}, -{61,-2,52}, -{61,-2,53}, -{61,-2,54}, -{61,-2,55}, -{61,-2,56}, -{61,-2,57}, -{61,-2,58}, -{61,-2,59}, -{61,-2,60}, -{61,-2,61}, -{61,-2,62}, -{61,-2,63}, -{61,-2,64}, -{61,-2,65}, -{61,-1,-54}, -{61,-1,-53}, -{61,-1,-52}, -{61,-1,-51}, -{61,-1,-50}, -{61,-1,-49}, -{61,-1,-48}, -{61,-1,-47}, -{61,-1,-46}, -{61,-1,-45}, -{61,-1,-44}, -{61,-1,-43}, -{61,-1,-42}, -{61,-1,-41}, -{61,-1,-40}, -{61,-1,-39}, -{61,-1,-38}, -{61,-1,-37}, -{61,-1,-36}, -{61,-1,-35}, -{61,-1,-34}, -{61,-1,-33}, -{61,-1,-32}, -{61,-1,-31}, -{61,-1,-30}, -{61,-1,-29}, -{61,-1,-28}, -{61,-1,-27}, -{61,-1,-26}, -{61,-1,-25}, -{61,-1,-24}, -{61,-1,-23}, -{61,-1,-22}, -{61,-1,-21}, -{61,-1,-20}, -{61,-1,-19}, -{61,-1,-18}, -{61,-1,-17}, -{61,-1,-16}, -{61,-1,-15}, -{61,-1,-14}, -{61,-1,-13}, -{61,-1,-12}, -{61,-1,-11}, -{61,-1,-10}, -{61,-1,-9}, -{61,-1,-8}, -{61,-1,-7}, -{61,-1,-6}, -{61,-1,-5}, -{61,-1,-4}, -{61,-1,-3}, -{61,-1,-2}, -{61,-1,-1}, -{61,-1,0}, -{61,-1,1}, -{61,-1,2}, -{61,-1,3}, -{61,-1,4}, -{61,-1,5}, -{61,-1,6}, -{61,-1,7}, -{61,-1,8}, -{61,-1,9}, -{61,-1,10}, -{61,-1,11}, -{61,-1,12}, -{61,-1,13}, -{61,-1,14}, -{61,-1,15}, -{61,-1,16}, -{61,-1,17}, -{61,-1,18}, -{61,-1,19}, -{61,-1,20}, -{61,-1,21}, -{61,-1,22}, -{61,-1,23}, -{61,-1,24}, -{61,-1,25}, -{61,-1,26}, -{61,-1,27}, -{61,-1,28}, -{61,-1,29}, -{61,-1,30}, -{61,-1,31}, -{61,-1,32}, -{61,-1,33}, -{61,-1,34}, -{61,-1,35}, -{61,-1,36}, -{61,-1,37}, -{61,-1,38}, -{61,-1,39}, -{61,-1,40}, -{61,-1,41}, -{61,-1,42}, -{61,-1,43}, -{61,-1,44}, -{61,-1,45}, -{61,-1,46}, -{61,-1,47}, -{61,-1,48}, -{61,-1,49}, -{61,-1,50}, -{61,-1,51}, -{61,-1,52}, -{61,-1,53}, -{61,-1,54}, -{61,-1,55}, -{61,-1,56}, -{61,-1,57}, -{61,-1,58}, -{61,-1,59}, -{61,-1,60}, -{61,-1,61}, -{61,-1,62}, -{61,-1,63}, -{61,-1,64}, -{61,-1,65}, -{61,0,-55}, -{61,0,-54}, -{61,0,-53}, -{61,0,-52}, -{61,0,-51}, -{61,0,-50}, -{61,0,-49}, -{61,0,-48}, -{61,0,-47}, -{61,0,-46}, -{61,0,-45}, -{61,0,-44}, -{61,0,-43}, -{61,0,-42}, -{61,0,-41}, -{61,0,-40}, -{61,0,-39}, -{61,0,-38}, -{61,0,-37}, -{61,0,-36}, -{61,0,-35}, -{61,0,-34}, -{61,0,-33}, -{61,0,-32}, -{61,0,-31}, -{61,0,-30}, -{61,0,-29}, -{61,0,-28}, -{61,0,-27}, -{61,0,-26}, -{61,0,-25}, -{61,0,-24}, -{61,0,-23}, -{61,0,-22}, -{61,0,-21}, -{61,0,-20}, -{61,0,-19}, -{61,0,-18}, -{61,0,-17}, -{61,0,-16}, -{61,0,-15}, -{61,0,-14}, -{61,0,-13}, -{61,0,-12}, -{61,0,-11}, -{61,0,-10}, -{61,0,-9}, -{61,0,-8}, -{61,0,-7}, -{61,0,-6}, -{61,0,-5}, -{61,0,-4}, -{61,0,-3}, -{61,0,-2}, -{61,0,-1}, -{61,0,0}, -{61,0,1}, -{61,0,2}, -{61,0,3}, -{61,0,4}, -{61,0,5}, -{61,0,6}, -{61,0,7}, -{61,0,8}, -{61,0,9}, -{61,0,10}, -{61,0,11}, -{61,0,12}, -{61,0,13}, -{61,0,14}, -{61,0,15}, -{61,0,16}, -{61,0,17}, -{61,0,18}, -{61,0,19}, -{61,0,20}, -{61,0,21}, -{61,0,22}, -{61,0,23}, -{61,0,24}, -{61,0,25}, -{61,0,26}, -{61,0,27}, -{61,0,28}, -{61,0,29}, -{61,0,30}, -{61,0,31}, -{61,0,32}, -{61,0,33}, -{61,0,34}, -{61,0,35}, -{61,0,36}, -{61,0,37}, -{61,0,38}, -{61,0,39}, -{61,0,40}, -{61,0,41}, -{61,0,42}, -{61,0,43}, -{61,0,44}, -{61,0,45}, -{61,0,46}, -{61,0,47}, -{61,0,48}, -{61,0,49}, -{61,0,50}, -{61,0,51}, -{61,0,52}, -{61,0,53}, -{61,0,54}, -{61,0,55}, -{61,0,56}, -{61,0,57}, -{61,0,58}, -{61,0,59}, -{61,0,60}, -{61,0,61}, -{61,0,62}, -{61,0,63}, -{61,0,64}, -{61,0,65}, -{61,1,-56}, -{61,1,-55}, -{61,1,-54}, -{61,1,-53}, -{61,1,-52}, -{61,1,-51}, -{61,1,-50}, -{61,1,-49}, -{61,1,-48}, -{61,1,-47}, -{61,1,-46}, -{61,1,-45}, -{61,1,-44}, -{61,1,-43}, -{61,1,-42}, -{61,1,-41}, -{61,1,-40}, -{61,1,-39}, -{61,1,-38}, -{61,1,-37}, -{61,1,-36}, -{61,1,-35}, -{61,1,-34}, -{61,1,-33}, -{61,1,-32}, -{61,1,-31}, -{61,1,-30}, -{61,1,-29}, -{61,1,-28}, -{61,1,-27}, -{61,1,-26}, -{61,1,-25}, -{61,1,-24}, -{61,1,-23}, -{61,1,-22}, -{61,1,-21}, -{61,1,-20}, -{61,1,-19}, -{61,1,-18}, -{61,1,-17}, -{61,1,-16}, -{61,1,-15}, -{61,1,-14}, -{61,1,-13}, -{61,1,-12}, -{61,1,-11}, -{61,1,-10}, -{61,1,-9}, -{61,1,-8}, -{61,1,-7}, -{61,1,-6}, -{61,1,-5}, -{61,1,-4}, -{61,1,-3}, -{61,1,-2}, -{61,1,-1}, -{61,1,0}, -{61,1,1}, -{61,1,2}, -{61,1,3}, -{61,1,4}, -{61,1,5}, -{61,1,6}, -{61,1,7}, -{61,1,8}, -{61,1,9}, -{61,1,10}, -{61,1,11}, -{61,1,12}, -{61,1,13}, -{61,1,14}, -{61,1,15}, -{61,1,16}, -{61,1,17}, -{61,1,18}, -{61,1,19}, -{61,1,20}, -{61,1,21}, -{61,1,22}, -{61,1,23}, -{61,1,24}, -{61,1,25}, -{61,1,26}, -{61,1,27}, -{61,1,28}, -{61,1,29}, -{61,1,30}, -{61,1,31}, -{61,1,32}, -{61,1,33}, -{61,1,34}, -{61,1,35}, -{61,1,36}, -{61,1,37}, -{61,1,38}, -{61,1,39}, -{61,1,40}, -{61,1,41}, -{61,1,42}, -{61,1,43}, -{61,1,44}, -{61,1,45}, -{61,1,46}, -{61,1,47}, -{61,1,48}, -{61,1,49}, -{61,1,50}, -{61,1,51}, -{61,1,52}, -{61,1,53}, -{61,1,54}, -{61,1,55}, -{61,1,56}, -{61,1,57}, -{61,1,58}, -{61,1,59}, -{61,1,60}, -{61,1,61}, -{61,1,62}, -{61,1,63}, -{61,1,64}, -{61,1,65}, -{61,2,-57}, -{61,2,-56}, -{61,2,-55}, -{61,2,-54}, -{61,2,-53}, -{61,2,-52}, -{61,2,-51}, -{61,2,-50}, -{61,2,-49}, -{61,2,-48}, -{61,2,-47}, -{61,2,-46}, -{61,2,-45}, -{61,2,-44}, -{61,2,-43}, -{61,2,-42}, -{61,2,-41}, -{61,2,-40}, -{61,2,-39}, -{61,2,-38}, -{61,2,-37}, -{61,2,-36}, -{61,2,-35}, -{61,2,-34}, -{61,2,-33}, -{61,2,-32}, -{61,2,-31}, -{61,2,-30}, -{61,2,-29}, -{61,2,-28}, -{61,2,-27}, -{61,2,-26}, -{61,2,-25}, -{61,2,-24}, -{61,2,-23}, -{61,2,-22}, -{61,2,-21}, -{61,2,-20}, -{61,2,-19}, -{61,2,-18}, -{61,2,-17}, -{61,2,-16}, -{61,2,-15}, -{61,2,-14}, -{61,2,-13}, -{61,2,-12}, -{61,2,-11}, -{61,2,-10}, -{61,2,-9}, -{61,2,-8}, -{61,2,-7}, -{61,2,-6}, -{61,2,-5}, -{61,2,-4}, -{61,2,-3}, -{61,2,-2}, -{61,2,-1}, -{61,2,0}, -{61,2,1}, -{61,2,2}, -{61,2,3}, -{61,2,4}, -{61,2,5}, -{61,2,6}, -{61,2,7}, -{61,2,8}, -{61,2,9}, -{61,2,10}, -{61,2,11}, -{61,2,12}, -{61,2,13}, -{61,2,14}, -{61,2,15}, -{61,2,16}, -{61,2,17}, -{61,2,18}, -{61,2,19}, -{61,2,20}, -{61,2,21}, -{61,2,22}, -{61,2,23}, -{61,2,24}, -{61,2,25}, -{61,2,26}, -{61,2,27}, -{61,2,28}, -{61,2,29}, -{61,2,30}, -{61,2,31}, -{61,2,32}, -{61,2,33}, -{61,2,34}, -{61,2,35}, -{61,2,36}, -{61,2,37}, -{61,2,38}, -{61,2,39}, -{61,2,40}, -{61,2,41}, -{61,2,42}, -{61,2,43}, -{61,2,44}, -{61,2,45}, -{61,2,46}, -{61,2,47}, -{61,2,48}, -{61,2,49}, -{61,2,50}, -{61,2,51}, -{61,2,52}, -{61,2,53}, -{61,2,54}, -{61,2,55}, -{61,2,56}, -{61,2,57}, -{61,2,58}, -{61,2,59}, -{61,2,60}, -{61,2,61}, -{61,2,62}, -{61,2,63}, -{61,2,64}, -{61,2,65}, -{61,3,-58}, -{61,3,-57}, -{61,3,-56}, -{61,3,-55}, -{61,3,-54}, -{61,3,-53}, -{61,3,-52}, -{61,3,-51}, -{61,3,-50}, -{61,3,-49}, -{61,3,-48}, -{61,3,-47}, -{61,3,-46}, -{61,3,-45}, -{61,3,-44}, -{61,3,-43}, -{61,3,-42}, -{61,3,-41}, -{61,3,-40}, -{61,3,-39}, -{61,3,-38}, -{61,3,-37}, -{61,3,-36}, -{61,3,-35}, -{61,3,-34}, -{61,3,-33}, -{61,3,-32}, -{61,3,-31}, -{61,3,-30}, -{61,3,-29}, -{61,3,-28}, -{61,3,-27}, -{61,3,-26}, -{61,3,-25}, -{61,3,-24}, -{61,3,-23}, -{61,3,-22}, -{61,3,-21}, -{61,3,-20}, -{61,3,-19}, -{61,3,-18}, -{61,3,-17}, -{61,3,-16}, -{61,3,-15}, -{61,3,-14}, -{61,3,-13}, -{61,3,-12}, -{61,3,-11}, -{61,3,-10}, -{61,3,-9}, -{61,3,-8}, -{61,3,-7}, -{61,3,-6}, -{61,3,-5}, -{61,3,-4}, -{61,3,-3}, -{61,3,-2}, -{61,3,-1}, -{61,3,0}, -{61,3,1}, -{61,3,2}, -{61,3,3}, -{61,3,4}, -{61,3,5}, -{61,3,6}, -{61,3,7}, -{61,3,8}, -{61,3,9}, -{61,3,10}, -{61,3,11}, -{61,3,12}, -{61,3,13}, -{61,3,14}, -{61,3,15}, -{61,3,16}, -{61,3,17}, -{61,3,18}, -{61,3,19}, -{61,3,20}, -{61,3,21}, -{61,3,22}, -{61,3,23}, -{61,3,24}, -{61,3,25}, -{61,3,26}, -{61,3,27}, -{61,3,28}, -{61,3,29}, -{61,3,30}, -{61,3,31}, -{61,3,32}, -{61,3,33}, -{61,3,34}, -{61,3,35}, -{61,3,36}, -{61,3,37}, -{61,3,38}, -{61,3,39}, -{61,3,40}, -{61,3,41}, -{61,3,42}, -{61,3,43}, -{61,3,44}, -{61,3,45}, -{61,3,46}, -{61,3,47}, -{61,3,48}, -{61,3,49}, -{61,3,50}, -{61,3,51}, -{61,3,52}, -{61,3,53}, -{61,3,54}, -{61,3,55}, -{61,3,56}, -{61,3,57}, -{61,3,58}, -{61,3,59}, -{61,3,60}, -{61,3,61}, -{61,3,62}, -{61,3,63}, -{61,3,64}, -{61,3,65}, -{61,4,-59}, -{61,4,-58}, -{61,4,-57}, -{61,4,-56}, -{61,4,-55}, -{61,4,-54}, -{61,4,-53}, -{61,4,-52}, -{61,4,-51}, -{61,4,-50}, -{61,4,-49}, -{61,4,-48}, -{61,4,-47}, -{61,4,-46}, -{61,4,-45}, -{61,4,-44}, -{61,4,-43}, -{61,4,-42}, -{61,4,-41}, -{61,4,-40}, -{61,4,-39}, -{61,4,-38}, -{61,4,-37}, -{61,4,-36}, -{61,4,-35}, -{61,4,-34}, -{61,4,-33}, -{61,4,-32}, -{61,4,-31}, -{61,4,-30}, -{61,4,-29}, -{61,4,-28}, -{61,4,-27}, -{61,4,-26}, -{61,4,-25}, -{61,4,-24}, -{61,4,-23}, -{61,4,-22}, -{61,4,-21}, -{61,4,-20}, -{61,4,-19}, -{61,4,-18}, -{61,4,-17}, -{61,4,-16}, -{61,4,-15}, -{61,4,-14}, -{61,4,-13}, -{61,4,-12}, -{61,4,-11}, -{61,4,-10}, -{61,4,-9}, -{61,4,-8}, -{61,4,-7}, -{61,4,-6}, -{61,4,-5}, -{61,4,-4}, -{61,4,-3}, -{61,4,-2}, -{61,4,-1}, -{61,4,0}, -{61,4,1}, -{61,4,2}, -{61,4,3}, -{61,4,4}, -{61,4,5}, -{61,4,6}, -{61,4,7}, -{61,4,8}, -{61,4,9}, -{61,4,10}, -{61,4,11}, -{61,4,12}, -{61,4,13}, -{61,4,14}, -{61,4,15}, -{61,4,16}, -{61,4,17}, -{61,4,18}, -{61,4,19}, -{61,4,20}, -{61,4,21}, -{61,4,22}, -{61,4,23}, -{61,4,24}, -{61,4,25}, -{61,4,26}, -{61,4,27}, -{61,4,28}, -{61,4,29}, -{61,4,30}, -{61,4,31}, -{61,4,32}, -{61,4,33}, -{61,4,34}, -{61,4,35}, -{61,4,36}, -{61,4,37}, -{61,4,38}, -{61,4,39}, -{61,4,40}, -{61,4,41}, -{61,4,42}, -{61,4,43}, -{61,4,44}, -{61,4,45}, -{61,4,46}, -{61,4,47}, -{61,4,48}, -{61,4,49}, -{61,4,50}, -{61,4,51}, -{61,4,52}, -{61,4,53}, -{61,4,54}, -{61,4,55}, -{61,4,56}, -{61,4,57}, -{61,4,58}, -{61,4,59}, -{61,4,60}, -{61,4,61}, -{61,4,62}, -{61,4,63}, -{61,4,64}, -{61,4,65}, -{61,5,-60}, -{61,5,-59}, -{61,5,-58}, -{61,5,-57}, -{61,5,-56}, -{61,5,-55}, -{61,5,-54}, -{61,5,-53}, -{61,5,-52}, -{61,5,-51}, -{61,5,-50}, -{61,5,-49}, -{61,5,-48}, -{61,5,-47}, -{61,5,-46}, -{61,5,-45}, -{61,5,-44}, -{61,5,-43}, -{61,5,-42}, -{61,5,-41}, -{61,5,-40}, -{61,5,-39}, -{61,5,-38}, -{61,5,-37}, -{61,5,-36}, -{61,5,-35}, -{61,5,-34}, -{61,5,-33}, -{61,5,-32}, -{61,5,-31}, -{61,5,-30}, -{61,5,-29}, -{61,5,-28}, -{61,5,-27}, -{61,5,-26}, -{61,5,-25}, -{61,5,-24}, -{61,5,-23}, -{61,5,-22}, -{61,5,-21}, -{61,5,-20}, -{61,5,-19}, -{61,5,-18}, -{61,5,-17}, -{61,5,-16}, -{61,5,-15}, -{61,5,-14}, -{61,5,-13}, -{61,5,-12}, -{61,5,-11}, -{61,5,-10}, -{61,5,-9}, -{61,5,-8}, -{61,5,-7}, -{61,5,-6}, -{61,5,-5}, -{61,5,-4}, -{61,5,-3}, -{61,5,-2}, -{61,5,-1}, -{61,5,0}, -{61,5,1}, -{61,5,2}, -{61,5,3}, -{61,5,4}, -{61,5,5}, -{61,5,6}, -{61,5,7}, -{61,5,8}, -{61,5,9}, -{61,5,10}, -{61,5,11}, -{61,5,12}, -{61,5,13}, -{61,5,14}, -{61,5,15}, -{61,5,16}, -{61,5,17}, -{61,5,18}, -{61,5,19}, -{61,5,20}, -{61,5,21}, -{61,5,22}, -{61,5,23}, -{61,5,24}, -{61,5,25}, -{61,5,26}, -{61,5,27}, -{61,5,28}, -{61,5,29}, -{61,5,30}, -{61,5,31}, -{61,5,32}, -{61,5,33}, -{61,5,34}, -{61,5,35}, -{61,5,36}, -{61,5,37}, -{61,5,38}, -{61,5,39}, -{61,5,40}, -{61,5,41}, -{61,5,42}, -{61,5,43}, -{61,5,44}, -{61,5,45}, -{61,5,46}, -{61,5,47}, -{61,5,48}, -{61,5,49}, -{61,5,50}, -{61,5,51}, -{61,5,52}, -{61,5,53}, -{61,5,54}, -{61,5,55}, -{61,5,56}, -{61,5,57}, -{61,5,58}, -{61,5,59}, -{61,5,60}, -{61,5,61}, -{61,5,62}, -{61,5,63}, -{61,5,64}, -{61,5,65}, -{61,6,-60}, -{61,6,-59}, -{61,6,-58}, -{61,6,-57}, -{61,6,-56}, -{61,6,-55}, -{61,6,-54}, -{61,6,-53}, -{61,6,-52}, -{61,6,-51}, -{61,6,-50}, -{61,6,-49}, -{61,6,-48}, -{61,6,-47}, -{61,6,-46}, -{61,6,-45}, -{61,6,-44}, -{61,6,-43}, -{61,6,-42}, -{61,6,-41}, -{61,6,-40}, -{61,6,-39}, -{61,6,-38}, -{61,6,-37}, -{61,6,-36}, -{61,6,-35}, -{61,6,-34}, -{61,6,-33}, -{61,6,-32}, -{61,6,-31}, -{61,6,-30}, -{61,6,-29}, -{61,6,-28}, -{61,6,-27}, -{61,6,-26}, -{61,6,-25}, -{61,6,-24}, -{61,6,-23}, -{61,6,-22}, -{61,6,-21}, -{61,6,-20}, -{61,6,-19}, -{61,6,-18}, -{61,6,-17}, -{61,6,-16}, -{61,6,-15}, -{61,6,-14}, -{61,6,-13}, -{61,6,-12}, -{61,6,-11}, -{61,6,-10}, -{61,6,-9}, -{61,6,-8}, -{61,6,-7}, -{61,6,-6}, -{61,6,-5}, -{61,6,-4}, -{61,6,-3}, -{61,6,-2}, -{61,6,-1}, -{61,6,0}, -{61,6,1}, -{61,6,2}, -{61,6,3}, -{61,6,4}, -{61,6,5}, -{61,6,6}, -{61,6,7}, -{61,6,8}, -{61,6,9}, -{61,6,10}, -{61,6,11}, -{61,6,12}, -{61,6,13}, -{61,6,14}, -{61,6,15}, -{61,6,16}, -{61,6,17}, -{61,6,18}, -{61,6,19}, -{61,6,20}, -{61,6,21}, -{61,6,22}, -{61,6,23}, -{61,6,24}, -{61,6,25}, -{61,6,26}, -{61,6,27}, -{61,6,28}, -{61,6,29}, -{61,6,30}, -{61,6,31}, -{61,6,32}, -{61,6,33}, -{61,6,34}, -{61,6,35}, -{61,6,36}, -{61,6,37}, -{61,6,38}, -{61,6,39}, -{61,6,40}, -{61,6,41}, -{61,6,42}, -{61,6,43}, -{61,6,44}, -{61,6,45}, -{61,6,46}, -{61,6,47}, -{61,6,48}, -{61,6,49}, -{61,6,50}, -{61,6,51}, -{61,6,52}, -{61,6,53}, -{61,6,54}, -{61,6,55}, -{61,6,56}, -{61,6,57}, -{61,6,58}, -{61,6,59}, -{61,6,60}, -{61,6,61}, -{61,6,62}, -{61,6,63}, -{61,6,64}, -{61,6,65}, -{61,7,-60}, -{61,7,-59}, -{61,7,-58}, -{61,7,-57}, -{61,7,-56}, -{61,7,-55}, -{61,7,-54}, -{61,7,-53}, -{61,7,-52}, -{61,7,-51}, -{61,7,-50}, -{61,7,-49}, -{61,7,-48}, -{61,7,-47}, -{61,7,-46}, -{61,7,-45}, -{61,7,-44}, -{61,7,-43}, -{61,7,-42}, -{61,7,-41}, -{61,7,-40}, -{61,7,-39}, -{61,7,-38}, -{61,7,-37}, -{61,7,-36}, -{61,7,-35}, -{61,7,-34}, -{61,7,-33}, -{61,7,-32}, -{61,7,-31}, -{61,7,-30}, -{61,7,-29}, -{61,7,-28}, -{61,7,-27}, -{61,7,-26}, -{61,7,-25}, -{61,7,-24}, -{61,7,-23}, -{61,7,-22}, -{61,7,-21}, -{61,7,-20}, -{61,7,-19}, -{61,7,-18}, -{61,7,-17}, -{61,7,-16}, -{61,7,-15}, -{61,7,-14}, -{61,7,-13}, -{61,7,-12}, -{61,7,-11}, -{61,7,-10}, -{61,7,-9}, -{61,7,-8}, -{61,7,-7}, -{61,7,-6}, -{61,7,-5}, -{61,7,-4}, -{61,7,-3}, -{61,7,-2}, -{61,7,-1}, -{61,7,0}, -{61,7,1}, -{61,7,2}, -{61,7,3}, -{61,7,4}, -{61,7,5}, -{61,7,6}, -{61,7,7}, -{61,7,8}, -{61,7,9}, -{61,7,10}, -{61,7,11}, -{61,7,12}, -{61,7,13}, -{61,7,14}, -{61,7,15}, -{61,7,16}, -{61,7,17}, -{61,7,18}, -{61,7,19}, -{61,7,20}, -{61,7,21}, -{61,7,22}, -{61,7,23}, -{61,7,24}, -{61,7,25}, -{61,7,26}, -{61,7,27}, -{61,7,28}, -{61,7,29}, -{61,7,30}, -{61,7,31}, -{61,7,32}, -{61,7,33}, -{61,7,34}, -{61,7,35}, -{61,7,36}, -{61,7,37}, -{61,7,38}, -{61,7,39}, -{61,7,40}, -{61,7,41}, -{61,7,42}, -{61,7,43}, -{61,7,44}, -{61,7,45}, -{61,7,46}, -{61,7,47}, -{61,7,48}, -{61,7,49}, -{61,7,50}, -{61,7,51}, -{61,7,52}, -{61,7,53}, -{61,7,54}, -{61,7,55}, -{61,7,56}, -{61,7,57}, -{61,7,58}, -{61,7,59}, -{61,7,60}, -{61,7,61}, -{61,7,62}, -{61,7,63}, -{61,7,64}, -{61,7,65}, -{61,8,-60}, -{61,8,-59}, -{61,8,-58}, -{61,8,-57}, -{61,8,-56}, -{61,8,-55}, -{61,8,-54}, -{61,8,-53}, -{61,8,-52}, -{61,8,-51}, -{61,8,-50}, -{61,8,-49}, -{61,8,-48}, -{61,8,-47}, -{61,8,-46}, -{61,8,-45}, -{61,8,-44}, -{61,8,-43}, -{61,8,-42}, -{61,8,-41}, -{61,8,-40}, -{61,8,-39}, -{61,8,-38}, -{61,8,-37}, -{61,8,-36}, -{61,8,-35}, -{61,8,-34}, -{61,8,-33}, -{61,8,-32}, -{61,8,-31}, -{61,8,-30}, -{61,8,-29}, -{61,8,-28}, -{61,8,-27}, -{61,8,-26}, -{61,8,-25}, -{61,8,-24}, -{61,8,-23}, -{61,8,-22}, -{61,8,-21}, -{61,8,-20}, -{61,8,-19}, -{61,8,-18}, -{61,8,-17}, -{61,8,-16}, -{61,8,-15}, -{61,8,-14}, -{61,8,-13}, -{61,8,-12}, -{61,8,-11}, -{61,8,-10}, -{61,8,-9}, -{61,8,-8}, -{61,8,-7}, -{61,8,-6}, -{61,8,-5}, -{61,8,-4}, -{61,8,-3}, -{61,8,-2}, -{61,8,-1}, -{61,8,0}, -{61,8,1}, -{61,8,2}, -{61,8,3}, -{61,8,4}, -{61,8,5}, -{61,8,6}, -{61,8,7}, -{61,8,8}, -{61,8,9}, -{61,8,10}, -{61,8,11}, -{61,8,12}, -{61,8,13}, -{61,8,14}, -{61,8,15}, -{61,8,16}, -{61,8,17}, -{61,8,18}, -{61,8,19}, -{61,8,20}, -{61,8,21}, -{61,8,22}, -{61,8,23}, -{61,8,24}, -{61,8,25}, -{61,8,26}, -{61,8,27}, -{61,8,28}, -{61,8,29}, -{61,8,30}, -{61,8,31}, -{61,8,32}, -{61,8,33}, -{61,8,34}, -{61,8,35}, -{61,8,36}, -{61,8,37}, -{61,8,38}, -{61,8,39}, -{61,8,40}, -{61,8,41}, -{61,8,42}, -{61,8,43}, -{61,8,44}, -{61,8,45}, -{61,8,46}, -{61,8,47}, -{61,8,48}, -{61,8,49}, -{61,8,50}, -{61,8,51}, -{61,8,52}, -{61,8,53}, -{61,8,54}, -{61,8,55}, -{61,8,56}, -{61,8,57}, -{61,8,58}, -{61,8,59}, -{61,8,60}, -{61,8,61}, -{61,8,62}, -{61,8,63}, -{61,8,64}, -{61,8,65}, -{61,8,66}, -{61,9,-60}, -{61,9,-59}, -{61,9,-58}, -{61,9,-57}, -{61,9,-56}, -{61,9,-55}, -{61,9,-54}, -{61,9,-53}, -{61,9,-52}, -{61,9,-51}, -{61,9,-50}, -{61,9,-49}, -{61,9,-48}, -{61,9,-47}, -{61,9,-46}, -{61,9,-45}, -{61,9,-44}, -{61,9,-43}, -{61,9,-42}, -{61,9,-41}, -{61,9,-40}, -{61,9,-39}, -{61,9,-38}, -{61,9,-37}, -{61,9,-36}, -{61,9,-35}, -{61,9,-34}, -{61,9,-33}, -{61,9,-32}, -{61,9,-31}, -{61,9,-30}, -{61,9,-29}, -{61,9,-28}, -{61,9,-27}, -{61,9,-26}, -{61,9,-25}, -{61,9,-24}, -{61,9,-23}, -{61,9,-22}, -{61,9,-21}, -{61,9,-20}, -{61,9,-19}, -{61,9,-18}, -{61,9,-17}, -{61,9,-16}, -{61,9,-15}, -{61,9,-14}, -{61,9,-13}, -{61,9,-12}, -{61,9,-11}, -{61,9,-10}, -{61,9,-9}, -{61,9,-8}, -{61,9,-7}, -{61,9,-6}, -{61,9,-5}, -{61,9,-4}, -{61,9,-3}, -{61,9,-2}, -{61,9,-1}, -{61,9,0}, -{61,9,1}, -{61,9,2}, -{61,9,3}, -{61,9,4}, -{61,9,5}, -{61,9,6}, -{61,9,7}, -{61,9,8}, -{61,9,9}, -{61,9,10}, -{61,9,11}, -{61,9,12}, -{61,9,13}, -{61,9,14}, -{61,9,15}, -{61,9,16}, -{61,9,17}, -{61,9,18}, -{61,9,19}, -{61,9,20}, -{61,9,21}, -{61,9,22}, -{61,9,23}, -{61,9,24}, -{61,9,25}, -{61,9,26}, -{61,9,27}, -{61,9,28}, -{61,9,29}, -{61,9,30}, -{61,9,31}, -{61,9,32}, -{61,9,33}, -{61,9,34}, -{61,9,35}, -{61,9,36}, -{61,9,37}, -{61,9,38}, -{61,9,39}, -{61,9,40}, -{61,9,41}, -{61,9,42}, -{61,9,43}, -{61,9,44}, -{61,9,45}, -{61,9,46}, -{61,9,47}, -{61,9,48}, -{61,9,49}, -{61,9,50}, -{61,9,51}, -{61,9,52}, -{61,9,53}, -{61,9,54}, -{61,9,55}, -{61,9,56}, -{61,9,57}, -{61,9,58}, -{61,9,59}, -{61,9,60}, -{61,9,61}, -{61,9,62}, -{61,9,63}, -{61,9,64}, -{61,9,65}, -{61,9,66}, -{61,10,-60}, -{61,10,-59}, -{61,10,-58}, -{61,10,-57}, -{61,10,-56}, -{61,10,-55}, -{61,10,-54}, -{61,10,-53}, -{61,10,-52}, -{61,10,-51}, -{61,10,-50}, -{61,10,-49}, -{61,10,-48}, -{61,10,-47}, -{61,10,-46}, -{61,10,-45}, -{61,10,-44}, -{61,10,-43}, -{61,10,-42}, -{61,10,-41}, -{61,10,-40}, -{61,10,-39}, -{61,10,-38}, -{61,10,-37}, -{61,10,-36}, -{61,10,-35}, -{61,10,-34}, -{61,10,-33}, -{61,10,-32}, -{61,10,-31}, -{61,10,-30}, -{61,10,-29}, -{61,10,-28}, -{61,10,-27}, -{61,10,-26}, -{61,10,-25}, -{61,10,-24}, -{61,10,-23}, -{61,10,-22}, -{61,10,-21}, -{61,10,-20}, -{61,10,-19}, -{61,10,-18}, -{61,10,-17}, -{61,10,-16}, -{61,10,-15}, -{61,10,-14}, -{61,10,-13}, -{61,10,-12}, -{61,10,-11}, -{61,10,-10}, -{61,10,-9}, -{61,10,-8}, -{61,10,-7}, -{61,10,-6}, -{61,10,-5}, -{61,10,-4}, -{61,10,-3}, -{61,10,-2}, -{61,10,-1}, -{61,10,0}, -{61,10,1}, -{61,10,2}, -{61,10,3}, -{61,10,4}, -{61,10,5}, -{61,10,6}, -{61,10,7}, -{61,10,8}, -{61,10,9}, -{61,10,10}, -{61,10,11}, -{61,10,12}, -{61,10,13}, -{61,10,14}, -{61,10,15}, -{61,10,16}, -{61,10,17}, -{61,10,18}, -{61,10,19}, -{61,10,20}, -{61,10,21}, -{61,10,22}, -{61,10,23}, -{61,10,24}, -{61,10,25}, -{61,10,26}, -{61,10,27}, -{61,10,28}, -{61,10,29}, -{61,10,30}, -{61,10,31}, -{61,10,32}, -{61,10,33}, -{61,10,34}, -{61,10,35}, -{61,10,36}, -{61,10,37}, -{61,10,38}, -{61,10,39}, -{61,10,40}, -{61,10,41}, -{61,10,42}, -{61,10,43}, -{61,10,44}, -{61,10,45}, -{61,10,46}, -{61,10,47}, -{61,10,48}, -{61,10,49}, -{61,10,50}, -{61,10,51}, -{61,10,52}, -{61,10,53}, -{61,10,54}, -{61,10,55}, -{61,10,56}, -{61,10,57}, -{61,10,58}, -{61,10,59}, -{61,10,60}, -{61,10,61}, -{61,10,62}, -{61,10,63}, -{61,10,64}, -{61,10,65}, -{61,10,66}, -{61,11,-60}, -{61,11,-59}, -{61,11,-58}, -{61,11,-57}, -{61,11,-56}, -{61,11,-55}, -{61,11,-54}, -{61,11,-53}, -{61,11,-52}, -{61,11,-51}, -{61,11,-50}, -{61,11,-49}, -{61,11,-48}, -{61,11,-47}, -{61,11,-46}, -{61,11,-45}, -{61,11,-44}, -{61,11,-43}, -{61,11,-42}, -{61,11,-41}, -{61,11,-40}, -{61,11,-39}, -{61,11,-38}, -{61,11,-37}, -{61,11,-36}, -{61,11,-35}, -{61,11,-34}, -{61,11,-33}, -{61,11,-32}, -{61,11,-31}, -{61,11,-30}, -{61,11,-29}, -{61,11,-28}, -{61,11,-27}, -{61,11,-26}, -{61,11,-25}, -{61,11,-24}, -{61,11,-23}, -{61,11,-22}, -{61,11,-21}, -{61,11,-20}, -{61,11,-19}, -{61,11,-18}, -{61,11,-17}, -{61,11,-16}, -{61,11,-15}, -{61,11,-14}, -{61,11,-13}, -{61,11,-12}, -{61,11,-11}, -{61,11,-10}, -{61,11,-9}, -{61,11,-8}, -{61,11,-7}, -{61,11,-6}, -{61,11,-5}, -{61,11,-4}, -{61,11,-3}, -{61,11,-2}, -{61,11,-1}, -{61,11,0}, -{61,11,1}, -{61,11,2}, -{61,11,3}, -{61,11,4}, -{61,11,5}, -{61,11,6}, -{61,11,7}, -{61,11,8}, -{61,11,9}, -{61,11,10}, -{61,11,11}, -{61,11,12}, -{61,11,13}, -{61,11,14}, -{61,11,15}, -{61,11,16}, -{61,11,17}, -{61,11,18}, -{61,11,19}, -{61,11,20}, -{61,11,21}, -{61,11,22}, -{61,11,23}, -{61,11,24}, -{61,11,25}, -{61,11,26}, -{61,11,27}, -{61,11,28}, -{61,11,29}, -{61,11,30}, -{61,11,31}, -{61,11,32}, -{61,11,33}, -{61,11,34}, -{61,11,35}, -{61,11,36}, -{61,11,37}, -{61,11,38}, -{61,11,39}, -{61,11,40}, -{61,11,41}, -{61,11,42}, -{61,11,43}, -{61,11,44}, -{61,11,45}, -{61,11,46}, -{61,11,47}, -{61,11,48}, -{61,11,49}, -{61,11,50}, -{61,11,51}, -{61,11,52}, -{61,11,53}, -{61,11,54}, -{61,11,55}, -{61,11,56}, -{61,11,57}, -{61,11,58}, -{61,11,59}, -{61,11,60}, -{61,11,61}, -{61,11,62}, -{61,11,63}, -{61,11,64}, -{61,11,65}, -{61,11,66}, -{61,12,-60}, -{61,12,-59}, -{61,12,-58}, -{61,12,-57}, -{61,12,-56}, -{61,12,-55}, -{61,12,-54}, -{61,12,-53}, -{61,12,-52}, -{61,12,-51}, -{61,12,-50}, -{61,12,-49}, -{61,12,-48}, -{61,12,-47}, -{61,12,-46}, -{61,12,-45}, -{61,12,-44}, -{61,12,-43}, -{61,12,-42}, -{61,12,-41}, -{61,12,-40}, -{61,12,-39}, -{61,12,-38}, -{61,12,-37}, -{61,12,-36}, -{61,12,-35}, -{61,12,-34}, -{61,12,-33}, -{61,12,-32}, -{61,12,-31}, -{61,12,-30}, -{61,12,-29}, -{61,12,-28}, -{61,12,-27}, -{61,12,-26}, -{61,12,-25}, -{61,12,-24}, -{61,12,-23}, -{61,12,-22}, -{61,12,-21}, -{61,12,-20}, -{61,12,-19}, -{61,12,-18}, -{61,12,-17}, -{61,12,-16}, -{61,12,-15}, -{61,12,-14}, -{61,12,-13}, -{61,12,-12}, -{61,12,-11}, -{61,12,-10}, -{61,12,-9}, -{61,12,-8}, -{61,12,-7}, -{61,12,-6}, -{61,12,-5}, -{61,12,-4}, -{61,12,-3}, -{61,12,-2}, -{61,12,-1}, -{61,12,0}, -{61,12,1}, -{61,12,2}, -{61,12,3}, -{61,12,4}, -{61,12,5}, -{61,12,6}, -{61,12,7}, -{61,12,8}, -{61,12,9}, -{61,12,10}, -{61,12,11}, -{61,12,12}, -{61,12,13}, -{61,12,14}, -{61,12,15}, -{61,12,16}, -{61,12,17}, -{61,12,18}, -{61,12,19}, -{61,12,20}, -{61,12,21}, -{61,12,22}, -{61,12,23}, -{61,12,24}, -{61,12,25}, -{61,12,26}, -{61,12,27}, -{61,12,28}, -{61,12,29}, -{61,12,30}, -{61,12,31}, -{61,12,32}, -{61,12,33}, -{61,12,34}, -{61,12,35}, -{61,12,36}, -{61,12,37}, -{61,12,38}, -{61,12,39}, -{61,12,40}, -{61,12,41}, -{61,12,42}, -{61,12,43}, -{61,12,44}, -{61,12,45}, -{61,12,46}, -{61,12,47}, -{61,12,48}, -{61,12,49}, -{61,12,50}, -{61,12,51}, -{61,12,52}, -{61,12,53}, -{61,12,54}, -{61,12,55}, -{61,12,56}, -{61,12,57}, -{61,12,58}, -{61,12,59}, -{61,12,60}, -{61,12,61}, -{61,12,62}, -{61,12,63}, -{61,12,64}, -{61,12,65}, -{61,12,66}, -{61,13,-60}, -{61,13,-59}, -{61,13,-58}, -{61,13,-57}, -{61,13,-56}, -{61,13,-55}, -{61,13,-54}, -{61,13,-53}, -{61,13,-52}, -{61,13,-51}, -{61,13,-50}, -{61,13,-49}, -{61,13,-48}, -{61,13,-47}, -{61,13,-46}, -{61,13,-45}, -{61,13,-44}, -{61,13,-43}, -{61,13,-42}, -{61,13,-41}, -{61,13,-40}, -{61,13,-39}, -{61,13,-38}, -{61,13,-37}, -{61,13,-36}, -{61,13,-35}, -{61,13,-34}, -{61,13,-33}, -{61,13,-32}, -{61,13,-31}, -{61,13,-30}, -{61,13,-29}, -{61,13,-28}, -{61,13,-27}, -{61,13,-26}, -{61,13,-25}, -{61,13,-24}, -{61,13,-23}, -{61,13,-22}, -{61,13,-21}, -{61,13,-20}, -{61,13,-19}, -{61,13,-18}, -{61,13,-17}, -{61,13,-16}, -{61,13,-15}, -{61,13,-14}, -{61,13,-13}, -{61,13,-12}, -{61,13,-11}, -{61,13,-10}, -{61,13,-9}, -{61,13,-8}, -{61,13,-7}, -{61,13,-6}, -{61,13,-5}, -{61,13,-4}, -{61,13,-3}, -{61,13,-2}, -{61,13,-1}, -{61,13,0}, -{61,13,1}, -{61,13,2}, -{61,13,3}, -{61,13,4}, -{61,13,5}, -{61,13,6}, -{61,13,7}, -{61,13,8}, -{61,13,9}, -{61,13,10}, -{61,13,11}, -{61,13,12}, -{61,13,13}, -{61,13,14}, -{61,13,15}, -{61,13,16}, -{61,13,17}, -{61,13,18}, -{61,13,19}, -{61,13,20}, -{61,13,21}, -{61,13,22}, -{61,13,23}, -{61,13,24}, -{61,13,25}, -{61,13,26}, -{61,13,27}, -{61,13,28}, -{61,13,29}, -{61,13,30}, -{61,13,31}, -{61,13,32}, -{61,13,33}, -{61,13,34}, -{61,13,35}, -{61,13,36}, -{61,13,37}, -{61,13,38}, -{61,13,39}, -{61,13,40}, -{61,13,41}, -{61,13,42}, -{61,13,43}, -{61,13,44}, -{61,13,45}, -{61,13,46}, -{61,13,47}, -{61,13,48}, -{61,13,49}, -{61,13,50}, -{61,13,51}, -{61,13,52}, -{61,13,53}, -{61,13,54}, -{61,13,55}, -{61,13,56}, -{61,13,57}, -{61,13,58}, -{61,13,59}, -{61,13,60}, -{61,13,61}, -{61,13,62}, -{61,13,63}, -{61,13,64}, -{61,13,65}, -{61,13,66}, -{61,14,-60}, -{61,14,-59}, -{61,14,-58}, -{61,14,-57}, -{61,14,-56}, -{61,14,-55}, -{61,14,-54}, -{61,14,-53}, -{61,14,-52}, -{61,14,-51}, -{61,14,-50}, -{61,14,-49}, -{61,14,-48}, -{61,14,-47}, -{61,14,-46}, -{61,14,-45}, -{61,14,-44}, -{61,14,-43}, -{61,14,-42}, -{61,14,-41}, -{61,14,-40}, -{61,14,-39}, -{61,14,-38}, -{61,14,-37}, -{61,14,-36}, -{61,14,-35}, -{61,14,-34}, -{61,14,-33}, -{61,14,-32}, -{61,14,-31}, -{61,14,-30}, -{61,14,-29}, -{61,14,-28}, -{61,14,-27}, -{61,14,-26}, -{61,14,-25}, -{61,14,-24}, -{61,14,-23}, -{61,14,-22}, -{61,14,-21}, -{61,14,-20}, -{61,14,-19}, -{61,14,-18}, -{61,14,-17}, -{61,14,-16}, -{61,14,-15}, -{61,14,-14}, -{61,14,-13}, -{61,14,-12}, -{61,14,-11}, -{61,14,-10}, -{61,14,-9}, -{61,14,-8}, -{61,14,-7}, -{61,14,-6}, -{61,14,-5}, -{61,14,-4}, -{61,14,-3}, -{61,14,-2}, -{61,14,-1}, -{61,14,0}, -{61,14,1}, -{61,14,2}, -{61,14,3}, -{61,14,4}, -{61,14,5}, -{61,14,6}, -{61,14,7}, -{61,14,8}, -{61,14,9}, -{61,14,10}, -{61,14,11}, -{61,14,12}, -{61,14,13}, -{61,14,14}, -{61,14,15}, -{61,14,16}, -{61,14,17}, -{61,14,18}, -{61,14,19}, -{61,14,20}, -{61,14,21}, -{61,14,22}, -{61,14,23}, -{61,14,24}, -{61,14,25}, -{61,14,26}, -{61,14,27}, -{61,14,28}, -{61,14,29}, -{61,14,30}, -{61,14,31}, -{61,14,32}, -{61,14,33}, -{61,14,34}, -{61,14,35}, -{61,14,36}, -{61,14,37}, -{61,14,38}, -{61,14,39}, -{61,14,40}, -{61,14,41}, -{61,14,42}, -{61,14,43}, -{61,14,44}, -{61,14,45}, -{61,14,46}, -{61,14,47}, -{61,14,48}, -{61,14,49}, -{61,14,50}, -{61,14,51}, -{61,14,52}, -{61,14,53}, -{61,14,54}, -{61,14,55}, -{61,14,56}, -{61,14,57}, -{61,14,58}, -{61,14,59}, -{61,14,60}, -{61,14,61}, -{61,14,62}, -{61,14,63}, -{61,14,64}, -{61,14,65}, -{61,14,66}, -{61,15,-60}, -{61,15,-59}, -{61,15,-58}, -{61,15,-57}, -{61,15,-56}, -{61,15,-55}, -{61,15,-54}, -{61,15,-53}, -{61,15,-52}, -{61,15,-51}, -{61,15,-50}, -{61,15,-49}, -{61,15,-48}, -{61,15,-47}, -{61,15,-46}, -{61,15,-45}, -{61,15,-44}, -{61,15,-43}, -{61,15,-42}, -{61,15,-41}, -{61,15,-40}, -{61,15,-39}, -{61,15,-38}, -{61,15,-37}, -{61,15,-36}, -{61,15,-35}, -{61,15,-34}, -{61,15,-33}, -{61,15,-32}, -{61,15,-31}, -{61,15,-30}, -{61,15,-29}, -{61,15,-28}, -{61,15,-27}, -{61,15,-26}, -{61,15,-25}, -{61,15,-24}, -{61,15,-23}, -{61,15,-22}, -{61,15,-21}, -{61,15,-20}, -{61,15,-19}, -{61,15,-18}, -{61,15,-17}, -{61,15,-16}, -{61,15,-15}, -{61,15,-14}, -{61,15,-13}, -{61,15,-12}, -{61,15,-11}, -{61,15,-10}, -{61,15,-9}, -{61,15,-8}, -{61,15,-7}, -{61,15,-6}, -{61,15,-5}, -{61,15,-4}, -{61,15,-3}, -{61,15,-2}, -{61,15,-1}, -{61,15,0}, -{61,15,1}, -{61,15,2}, -{61,15,3}, -{61,15,4}, -{61,15,5}, -{61,15,6}, -{61,15,7}, -{61,15,8}, -{61,15,9}, -{61,15,10}, -{61,15,11}, -{61,15,12}, -{61,15,13}, -{61,15,14}, -{61,15,15}, -{61,15,16}, -{61,15,17}, -{61,15,18}, -{61,15,19}, -{61,15,20}, -{61,15,21}, -{61,15,22}, -{61,15,23}, -{61,15,24}, -{61,15,25}, -{61,15,26}, -{61,15,27}, -{61,15,28}, -{61,15,29}, -{61,15,30}, -{61,15,31}, -{61,15,32}, -{61,15,33}, -{61,15,34}, -{61,15,35}, -{61,15,36}, -{61,15,37}, -{61,15,38}, -{61,15,39}, -{61,15,40}, -{61,15,41}, -{61,15,42}, -{61,15,43}, -{61,15,44}, -{61,15,45}, -{61,15,46}, -{61,15,47}, -{61,15,48}, -{61,15,49}, -{61,15,50}, -{61,15,51}, -{61,15,52}, -{61,15,53}, -{61,15,54}, -{61,15,55}, -{61,15,56}, -{61,15,57}, -{61,15,58}, -{61,15,59}, -{61,15,60}, -{61,15,61}, -{61,15,62}, -{61,15,63}, -{61,15,64}, -{61,15,65}, -{61,15,66}, -{61,16,-60}, -{61,16,-59}, -{61,16,-58}, -{61,16,-57}, -{61,16,-56}, -{61,16,-55}, -{61,16,-54}, -{61,16,-53}, -{61,16,-52}, -{61,16,-51}, -{61,16,-50}, -{61,16,-49}, -{61,16,-48}, -{61,16,-47}, -{61,16,-46}, -{61,16,-45}, -{61,16,-44}, -{61,16,-43}, -{61,16,-42}, -{61,16,-41}, -{61,16,-40}, -{61,16,-39}, -{61,16,-38}, -{61,16,-37}, -{61,16,-36}, -{61,16,-35}, -{61,16,-34}, -{61,16,-33}, -{61,16,-32}, -{61,16,-31}, -{61,16,-30}, -{61,16,-29}, -{61,16,-28}, -{61,16,-27}, -{61,16,-26}, -{61,16,-25}, -{61,16,-24}, -{61,16,-23}, -{61,16,-22}, -{61,16,-21}, -{61,16,-20}, -{61,16,-19}, -{61,16,-18}, -{61,16,-17}, -{61,16,-16}, -{61,16,-15}, -{61,16,-14}, -{61,16,-13}, -{61,16,-12}, -{61,16,-11}, -{61,16,-10}, -{61,16,-9}, -{61,16,-8}, -{61,16,-7}, -{61,16,-6}, -{61,16,-5}, -{61,16,-4}, -{61,16,-3}, -{61,16,-2}, -{61,16,-1}, -{61,16,0}, -{61,16,1}, -{61,16,2}, -{61,16,3}, -{61,16,4}, -{61,16,5}, -{61,16,6}, -{61,16,7}, -{61,16,8}, -{61,16,9}, -{61,16,10}, -{61,16,11}, -{61,16,12}, -{61,16,13}, -{61,16,14}, -{61,16,15}, -{61,16,16}, -{61,16,17}, -{61,16,18}, -{61,16,19}, -{61,16,20}, -{61,16,21}, -{61,16,22}, -{61,16,23}, -{61,16,24}, -{61,16,25}, -{61,16,26}, -{61,16,27}, -{61,16,28}, -{61,16,29}, -{61,16,30}, -{61,16,31}, -{61,16,32}, -{61,16,33}, -{61,16,34}, -{61,16,35}, -{61,16,36}, -{61,16,37}, -{61,16,38}, -{61,16,39}, -{61,16,40}, -{61,16,41}, -{61,16,42}, -{61,16,43}, -{61,16,44}, -{61,16,45}, -{61,16,46}, -{61,16,47}, -{61,16,48}, -{61,16,49}, -{61,16,50}, -{61,16,51}, -{61,16,52}, -{61,16,53}, -{61,16,54}, -{61,16,55}, -{61,16,56}, -{61,16,57}, -{61,16,58}, -{61,16,59}, -{61,16,60}, -{61,16,61}, -{61,16,62}, -{61,16,63}, -{61,16,64}, -{61,16,65}, -{61,16,66}, -{61,17,-60}, -{61,17,-59}, -{61,17,-58}, -{61,17,-57}, -{61,17,-56}, -{61,17,-55}, -{61,17,-54}, -{61,17,-53}, -{61,17,-52}, -{61,17,-51}, -{61,17,-50}, -{61,17,-49}, -{61,17,-48}, -{61,17,-47}, -{61,17,-46}, -{61,17,-45}, -{61,17,-44}, -{61,17,-43}, -{61,17,-42}, -{61,17,-41}, -{61,17,-40}, -{61,17,-39}, -{61,17,-38}, -{61,17,-37}, -{61,17,-36}, -{61,17,-35}, -{61,17,-34}, -{61,17,-33}, -{61,17,-32}, -{61,17,-31}, -{61,17,-30}, -{61,17,-29}, -{61,17,-28}, -{61,17,-27}, -{61,17,-26}, -{61,17,-25}, -{61,17,-24}, -{61,17,-23}, -{61,17,-22}, -{61,17,-21}, -{61,17,-20}, -{61,17,-19}, -{61,17,-18}, -{61,17,-17}, -{61,17,-16}, -{61,17,-15}, -{61,17,-14}, -{61,17,-13}, -{61,17,-12}, -{61,17,-11}, -{61,17,-10}, -{61,17,-9}, -{61,17,-8}, -{61,17,-7}, -{61,17,-6}, -{61,17,-5}, -{61,17,-4}, -{61,17,-3}, -{61,17,-2}, -{61,17,-1}, -{61,17,0}, -{61,17,1}, -{61,17,2}, -{61,17,3}, -{61,17,4}, -{61,17,5}, -{61,17,6}, -{61,17,7}, -{61,17,8}, -{61,17,9}, -{61,17,10}, -{61,17,11}, -{61,17,12}, -{61,17,13}, -{61,17,14}, -{61,17,15}, -{61,17,16}, -{61,17,17}, -{61,17,18}, -{61,17,19}, -{61,17,20}, -{61,17,21}, -{61,17,22}, -{61,17,23}, -{61,17,24}, -{61,17,25}, -{61,17,26}, -{61,17,27}, -{61,17,28}, -{61,17,29}, -{61,17,30}, -{61,17,31}, -{61,17,32}, -{61,17,33}, -{61,17,34}, -{61,17,35}, -{61,17,36}, -{61,17,37}, -{61,17,38}, -{61,17,39}, -{61,17,40}, -{61,17,41}, -{61,17,42}, -{61,17,43}, -{61,17,44}, -{61,17,45}, -{61,17,46}, -{61,17,47}, -{61,17,48}, -{61,17,49}, -{61,17,50}, -{61,17,51}, -{61,17,52}, -{61,17,53}, -{61,17,54}, -{61,17,55}, -{61,17,56}, -{61,17,57}, -{61,17,58}, -{61,17,59}, -{61,17,60}, -{61,17,61}, -{61,17,62}, -{61,17,63}, -{61,17,64}, -{61,17,65}, -{61,17,66}, -{61,18,-60}, -{61,18,-59}, -{61,18,-58}, -{61,18,-57}, -{61,18,-56}, -{61,18,-55}, -{61,18,-54}, -{61,18,-53}, -{61,18,-52}, -{61,18,-51}, -{61,18,-50}, -{61,18,-49}, -{61,18,-48}, -{61,18,-47}, -{61,18,-46}, -{61,18,-45}, -{61,18,-44}, -{61,18,-43}, -{61,18,-42}, -{61,18,-41}, -{61,18,-40}, -{61,18,-39}, -{61,18,-38}, -{61,18,-37}, -{61,18,-36}, -{61,18,-35}, -{61,18,-34}, -{61,18,-33}, -{61,18,-32}, -{61,18,-31}, -{61,18,-30}, -{61,18,-29}, -{61,18,-28}, -{61,18,-27}, -{61,18,-26}, -{61,18,-25}, -{61,18,-24}, -{61,18,-23}, -{61,18,-22}, -{61,18,-21}, -{61,18,-20}, -{61,18,-19}, -{61,18,-18}, -{61,18,-17}, -{61,18,-16}, -{61,18,-15}, -{61,18,-14}, -{61,18,-13}, -{61,18,-12}, -{61,18,-11}, -{61,18,-10}, -{61,18,-9}, -{61,18,-8}, -{61,18,-7}, -{61,18,-6}, -{61,18,-5}, -{61,18,-4}, -{61,18,-3}, -{61,18,-2}, -{61,18,-1}, -{61,18,0}, -{61,18,1}, -{61,18,2}, -{61,18,3}, -{61,18,4}, -{61,18,5}, -{61,18,6}, -{61,18,7}, -{61,18,8}, -{61,18,9}, -{61,18,10}, -{61,18,11}, -{61,18,12}, -{61,18,13}, -{61,18,14}, -{61,18,15}, -{61,18,16}, -{61,18,17}, -{61,18,18}, -{61,18,19}, -{61,18,20}, -{61,18,21}, -{61,18,22}, -{61,18,23}, -{61,18,24}, -{61,18,25}, -{61,18,26}, -{61,18,27}, -{61,18,28}, -{61,18,29}, -{61,18,30}, -{61,18,31}, -{61,18,32}, -{61,18,33}, -{61,18,34}, -{61,18,35}, -{61,18,36}, -{61,18,37}, -{61,18,38}, -{61,18,39}, -{61,18,40}, -{61,18,41}, -{61,18,42}, -{61,18,43}, -{61,18,44}, -{61,18,45}, -{61,18,46}, -{61,18,47}, -{61,18,48}, -{61,18,49}, -{61,18,50}, -{61,18,51}, -{61,18,52}, -{61,18,53}, -{61,18,54}, -{61,18,55}, -{61,18,56}, -{61,18,57}, -{61,18,58}, -{61,18,59}, -{61,18,60}, -{61,18,61}, -{61,18,62}, -{61,18,63}, -{61,18,64}, -{61,18,65}, -{61,18,66}, -{61,19,-60}, -{61,19,-59}, -{61,19,-58}, -{61,19,-57}, -{61,19,-56}, -{61,19,-55}, -{61,19,-54}, -{61,19,-53}, -{61,19,-52}, -{61,19,-51}, -{61,19,-50}, -{61,19,-49}, -{61,19,-48}, -{61,19,-47}, -{61,19,-46}, -{61,19,-45}, -{61,19,-44}, -{61,19,-43}, -{61,19,-42}, -{61,19,-41}, -{61,19,-40}, -{61,19,-39}, -{61,19,-38}, -{61,19,-37}, -{61,19,-36}, -{61,19,-35}, -{61,19,-34}, -{61,19,-33}, -{61,19,-32}, -{61,19,-31}, -{61,19,-30}, -{61,19,-29}, -{61,19,-28}, -{61,19,-27}, -{61,19,-26}, -{61,19,-25}, -{61,19,-24}, -{61,19,-23}, -{61,19,-22}, -{61,19,-21}, -{61,19,-20}, -{61,19,-19}, -{61,19,-18}, -{61,19,-17}, -{61,19,-16}, -{61,19,-15}, -{61,19,-14}, -{61,19,-13}, -{61,19,-12}, -{61,19,-11}, -{61,19,-10}, -{61,19,-9}, -{61,19,-8}, -{61,19,-7}, -{61,19,-6}, -{61,19,-5}, -{61,19,-4}, -{61,19,-3}, -{61,19,-2}, -{61,19,-1}, -{61,19,0}, -{61,19,1}, -{61,19,2}, -{61,19,3}, -{61,19,4}, -{61,19,5}, -{61,19,6}, -{61,19,7}, -{61,19,8}, -{61,19,9}, -{61,19,10}, -{61,19,11}, -{61,19,12}, -{61,19,13}, -{61,19,14}, -{61,19,15}, -{61,19,16}, -{61,19,17}, -{61,19,18}, -{61,19,19}, -{61,19,20}, -{61,19,21}, -{61,19,22}, -{61,19,23}, -{61,19,24}, -{61,19,25}, -{61,19,26}, -{61,19,27}, -{61,19,28}, -{61,19,29}, -{61,19,30}, -{61,19,31}, -{61,19,32}, -{61,19,33}, -{61,19,34}, -{61,19,35}, -{61,19,36}, -{61,19,37}, -{61,19,38}, -{61,19,39}, -{61,19,40}, -{61,19,41}, -{61,19,42}, -{61,19,43}, -{61,19,44}, -{61,19,45}, -{61,19,46}, -{61,19,47}, -{61,19,48}, -{61,19,49}, -{61,19,50}, -{61,19,51}, -{61,19,52}, -{61,19,53}, -{61,19,54}, -{61,19,55}, -{61,19,56}, -{61,19,57}, -{61,19,58}, -{61,19,59}, -{61,19,60}, -{61,19,61}, -{61,19,62}, -{61,19,63}, -{61,19,64}, -{61,19,65}, -{61,19,66}, -{61,20,-60}, -{61,20,-59}, -{61,20,-58}, -{61,20,-57}, -{61,20,-56}, -{61,20,-55}, -{61,20,-54}, -{61,20,-53}, -{61,20,-52}, -{61,20,-51}, -{61,20,-50}, -{61,20,-49}, -{61,20,-48}, -{61,20,-47}, -{61,20,-46}, -{61,20,-45}, -{61,20,-44}, -{61,20,-43}, -{61,20,-42}, -{61,20,-41}, -{61,20,-40}, -{61,20,-39}, -{61,20,-38}, -{61,20,-37}, -{61,20,-36}, -{61,20,-35}, -{61,20,-34}, -{61,20,-33}, -{61,20,-32}, -{61,20,-31}, -{61,20,-30}, -{61,20,-29}, -{61,20,-28}, -{61,20,-27}, -{61,20,-26}, -{61,20,-25}, -{61,20,-24}, -{61,20,-23}, -{61,20,-22}, -{61,20,-21}, -{61,20,-20}, -{61,20,-19}, -{61,20,-18}, -{61,20,-17}, -{61,20,-16}, -{61,20,-15}, -{61,20,-14}, -{61,20,-13}, -{61,20,-12}, -{61,20,-11}, -{61,20,-10}, -{61,20,-9}, -{61,20,-8}, -{61,20,-7}, -{61,20,-6}, -{61,20,-5}, -{61,20,-4}, -{61,20,-3}, -{61,20,-2}, -{61,20,-1}, -{61,20,0}, -{61,20,1}, -{61,20,2}, -{61,20,3}, -{61,20,4}, -{61,20,5}, -{61,20,6}, -{61,20,7}, -{61,20,8}, -{61,20,9}, -{61,20,10}, -{61,20,11}, -{61,20,12}, -{61,20,13}, -{61,20,14}, -{61,20,15}, -{61,20,16}, -{61,20,17}, -{61,20,18}, -{61,20,19}, -{61,20,20}, -{61,20,21}, -{61,20,22}, -{61,20,23}, -{61,20,24}, -{61,20,25}, -{61,20,26}, -{61,20,27}, -{61,20,28}, -{61,20,29}, -{61,20,30}, -{61,20,31}, -{61,20,32}, -{61,20,33}, -{61,20,34}, -{61,20,35}, -{61,20,36}, -{61,20,37}, -{61,20,38}, -{61,20,39}, -{61,20,40}, -{61,20,41}, -{61,20,42}, -{61,20,43}, -{61,20,44}, -{61,20,45}, -{61,20,46}, -{61,20,47}, -{61,20,48}, -{61,20,49}, -{61,20,50}, -{61,20,51}, -{61,20,52}, -{61,20,53}, -{61,20,54}, -{61,20,55}, -{61,20,56}, -{61,20,57}, -{61,20,58}, -{61,20,59}, -{61,20,60}, -{61,20,61}, -{61,20,62}, -{61,20,63}, -{61,20,64}, -{61,20,65}, -{61,20,66}, -{61,20,67}, -{61,21,-60}, -{61,21,-59}, -{61,21,-58}, -{61,21,-57}, -{61,21,-56}, -{61,21,-55}, -{61,21,-54}, -{61,21,-53}, -{61,21,-52}, -{61,21,-51}, -{61,21,-50}, -{61,21,-49}, -{61,21,-48}, -{61,21,-47}, -{61,21,-46}, -{61,21,-45}, -{61,21,-44}, -{61,21,-43}, -{61,21,-42}, -{61,21,-41}, -{61,21,-40}, -{61,21,-39}, -{61,21,-38}, -{61,21,-37}, -{61,21,-36}, -{61,21,-35}, -{61,21,-34}, -{61,21,-33}, -{61,21,-32}, -{61,21,-31}, -{61,21,-30}, -{61,21,-29}, -{61,21,-28}, -{61,21,-27}, -{61,21,-26}, -{61,21,-25}, -{61,21,-24}, -{61,21,-23}, -{61,21,-22}, -{61,21,-21}, -{61,21,-20}, -{61,21,-19}, -{61,21,-18}, -{61,21,-17}, -{61,21,-16}, -{61,21,-15}, -{61,21,-14}, -{61,21,-13}, -{61,21,-12}, -{61,21,-11}, -{61,21,-10}, -{61,21,-9}, -{61,21,-8}, -{61,21,-7}, -{61,21,-6}, -{61,21,-5}, -{61,21,-4}, -{61,21,-3}, -{61,21,-2}, -{61,21,-1}, -{61,21,0}, -{61,21,1}, -{61,21,2}, -{61,21,3}, -{61,21,4}, -{61,21,5}, -{61,21,6}, -{61,21,7}, -{61,21,8}, -{61,21,9}, -{61,21,10}, -{61,21,11}, -{61,21,12}, -{61,21,13}, -{61,21,14}, -{61,21,15}, -{61,21,16}, -{61,21,17}, -{61,21,18}, -{61,21,19}, -{61,21,20}, -{61,21,21}, -{61,21,22}, -{61,21,23}, -{61,21,24}, -{61,21,25}, -{61,21,26}, -{61,21,27}, -{61,21,28}, -{61,21,29}, -{61,21,30}, -{61,21,31}, -{61,21,32}, -{61,21,33}, -{61,21,34}, -{61,21,35}, -{61,21,36}, -{61,21,37}, -{61,21,38}, -{61,21,39}, -{61,21,40}, -{61,21,41}, -{61,21,42}, -{61,21,43}, -{61,21,44}, -{61,21,45}, -{61,21,46}, -{61,21,47}, -{61,21,48}, -{61,21,49}, -{61,21,50}, -{61,21,51}, -{61,21,52}, -{61,21,53}, -{61,21,54}, -{61,21,55}, -{61,21,56}, -{61,21,57}, -{61,21,58}, -{61,21,59}, -{61,21,60}, -{61,21,61}, -{61,21,62}, -{61,21,63}, -{61,21,64}, -{61,21,65}, -{61,21,66}, -{61,21,67}, -{61,22,-60}, -{61,22,-59}, -{61,22,-58}, -{61,22,-57}, -{61,22,-56}, -{61,22,-55}, -{61,22,-54}, -{61,22,-53}, -{61,22,-52}, -{61,22,-51}, -{61,22,-50}, -{61,22,-49}, -{61,22,-48}, -{61,22,-47}, -{61,22,-46}, -{61,22,-45}, -{61,22,-44}, -{61,22,-43}, -{61,22,-42}, -{61,22,-41}, -{61,22,-40}, -{61,22,-39}, -{61,22,-38}, -{61,22,-37}, -{61,22,-36}, -{61,22,-35}, -{61,22,-34}, -{61,22,-33}, -{61,22,-32}, -{61,22,-31}, -{61,22,-30}, -{61,22,-29}, -{61,22,-28}, -{61,22,-27}, -{61,22,-26}, -{61,22,-25}, -{61,22,-24}, -{61,22,-23}, -{61,22,-22}, -{61,22,-21}, -{61,22,-20}, -{61,22,-19}, -{61,22,-18}, -{61,22,-17}, -{61,22,-16}, -{61,22,-15}, -{61,22,-14}, -{61,22,-13}, -{61,22,-12}, -{61,22,-11}, -{61,22,-10}, -{61,22,-9}, -{61,22,-8}, -{61,22,-7}, -{61,22,-6}, -{61,22,-5}, -{61,22,-4}, -{61,22,-3}, -{61,22,-2}, -{61,22,-1}, -{61,22,0}, -{61,22,1}, -{61,22,2}, -{61,22,3}, -{61,22,4}, -{61,22,5}, -{61,22,6}, -{61,22,7}, -{61,22,8}, -{61,22,9}, -{61,22,10}, -{61,22,11}, -{61,22,12}, -{61,22,13}, -{61,22,14}, -{61,22,15}, -{61,22,16}, -{61,22,17}, -{61,22,18}, -{61,22,19}, -{61,22,20}, -{61,22,21}, -{61,22,22}, -{61,22,23}, -{61,22,24}, -{61,22,25}, -{61,22,26}, -{61,22,27}, -{61,22,28}, -{61,22,29}, -{61,22,30}, -{61,22,31}, -{61,22,32}, -{61,22,33}, -{61,22,34}, -{61,22,35}, -{61,22,36}, -{61,22,37}, -{61,22,38}, -{61,22,39}, -{61,22,40}, -{61,22,41}, -{61,22,42}, -{61,22,43}, -{61,22,44}, -{61,22,45}, -{61,22,46}, -{61,22,47}, -{61,22,48}, -{61,22,49}, -{61,22,50}, -{61,22,51}, -{61,22,52}, -{61,22,53}, -{61,22,54}, -{61,22,55}, -{61,22,56}, -{61,22,57}, -{61,22,58}, -{61,22,59}, -{61,22,60}, -{61,22,61}, -{61,22,62}, -{61,22,63}, -{61,22,64}, -{61,22,65}, -{61,22,66}, -{61,22,67}, -{61,23,-60}, -{61,23,-59}, -{61,23,-58}, -{61,23,-57}, -{61,23,-56}, -{61,23,-55}, -{61,23,-54}, -{61,23,-53}, -{61,23,-52}, -{61,23,-51}, -{61,23,-50}, -{61,23,-49}, -{61,23,-48}, -{61,23,-47}, -{61,23,-46}, -{61,23,-45}, -{61,23,-44}, -{61,23,-43}, -{61,23,-42}, -{61,23,-41}, -{61,23,-40}, -{61,23,-39}, -{61,23,-38}, -{61,23,-37}, -{61,23,-36}, -{61,23,-35}, -{61,23,-34}, -{61,23,-33}, -{61,23,-32}, -{61,23,-31}, -{61,23,-30}, -{61,23,-29}, -{61,23,-28}, -{61,23,-27}, -{61,23,-26}, -{61,23,-25}, -{61,23,-24}, -{61,23,-23}, -{61,23,-22}, -{61,23,-21}, -{61,23,-20}, -{61,23,-19}, -{61,23,-18}, -{61,23,-17}, -{61,23,-16}, -{61,23,-15}, -{61,23,-14}, -{61,23,-13}, -{61,23,-12}, -{61,23,-11}, -{61,23,-10}, -{61,23,-9}, -{61,23,-8}, -{61,23,-7}, -{61,23,-6}, -{61,23,-5}, -{61,23,-4}, -{61,23,-3}, -{61,23,-2}, -{61,23,-1}, -{61,23,0}, -{61,23,1}, -{61,23,2}, -{61,23,3}, -{61,23,4}, -{61,23,5}, -{61,23,6}, -{61,23,7}, -{61,23,8}, -{61,23,9}, -{61,23,10}, -{61,23,11}, -{61,23,12}, -{61,23,13}, -{61,23,14}, -{61,23,15}, -{61,23,16}, -{61,23,17}, -{61,23,18}, -{61,23,19}, -{61,23,20}, -{61,23,21}, -{61,23,22}, -{61,23,23}, -{61,23,24}, -{61,23,25}, -{61,23,26}, -{61,23,27}, -{61,23,28}, -{61,23,29}, -{61,23,30}, -{61,23,31}, -{61,23,32}, -{61,23,33}, -{61,23,34}, -{61,23,35}, -{61,23,36}, -{61,23,37}, -{61,23,38}, -{61,23,39}, -{61,23,40}, -{61,23,41}, -{61,23,42}, -{61,23,43}, -{61,23,44}, -{61,23,45}, -{61,23,46}, -{61,23,47}, -{61,23,48}, -{61,23,49}, -{61,23,50}, -{61,23,51}, -{61,23,52}, -{61,23,53}, -{61,23,54}, -{61,23,55}, -{61,23,56}, -{61,23,57}, -{61,23,58}, -{61,23,59}, -{61,23,60}, -{61,23,61}, -{61,23,62}, -{61,23,63}, -{61,23,64}, -{61,23,65}, -{61,23,66}, -{61,23,67}, -{61,24,-60}, -{61,24,-59}, -{61,24,-58}, -{61,24,-57}, -{61,24,-56}, -{61,24,-55}, -{61,24,-54}, -{61,24,-53}, -{61,24,-52}, -{61,24,-51}, -{61,24,-50}, -{61,24,-49}, -{61,24,-48}, -{61,24,-47}, -{61,24,-46}, -{61,24,-45}, -{61,24,-44}, -{61,24,-43}, -{61,24,-42}, -{61,24,-41}, -{61,24,-40}, -{61,24,-39}, -{61,24,-38}, -{61,24,-37}, -{61,24,-36}, -{61,24,-35}, -{61,24,-34}, -{61,24,-33}, -{61,24,-32}, -{61,24,-31}, -{61,24,-30}, -{61,24,-29}, -{61,24,-28}, -{61,24,-27}, -{61,24,-26}, -{61,24,-25}, -{61,24,-24}, -{61,24,-23}, -{61,24,-22}, -{61,24,-21}, -{61,24,-20}, -{61,24,-19}, -{61,24,-18}, -{61,24,-17}, -{61,24,-16}, -{61,24,-15}, -{61,24,-14}, -{61,24,-13}, -{61,24,-12}, -{61,24,-11}, -{61,24,-10}, -{61,24,-9}, -{61,24,-8}, -{61,24,-7}, -{61,24,-6}, -{61,24,-5}, -{61,24,-4}, -{61,24,-3}, -{61,24,-2}, -{61,24,-1}, -{61,24,0}, -{61,24,1}, -{61,24,2}, -{61,24,3}, -{61,24,4}, -{61,24,5}, -{61,24,6}, -{61,24,7}, -{61,24,8}, -{61,24,9}, -{61,24,10}, -{61,24,11}, -{61,24,12}, -{61,24,13}, -{61,24,14}, -{61,24,15}, -{61,24,16}, -{61,24,17}, -{61,24,18}, -{61,24,19}, -{61,24,20}, -{61,24,21}, -{61,24,22}, -{61,24,23}, -{61,24,24}, -{61,24,25}, -{61,24,26}, -{61,24,27}, -{61,24,28}, -{61,24,29}, -{61,24,30}, -{61,24,31}, -{61,24,32}, -{61,24,33}, -{61,24,34}, -{61,24,35}, -{61,24,36}, -{61,24,37}, -{61,24,38}, -{61,24,39}, -{61,24,40}, -{61,24,41}, -{61,24,42}, -{61,24,43}, -{61,24,44}, -{61,24,45}, -{61,24,46}, -{61,24,47}, -{61,24,48}, -{61,24,49}, -{61,24,50}, -{61,24,51}, -{61,24,52}, -{61,24,53}, -{61,24,54}, -{61,24,55}, -{61,24,56}, -{61,24,57}, -{61,24,58}, -{61,24,59}, -{61,24,60}, -{61,24,61}, -{61,24,62}, -{61,24,63}, -{61,24,64}, -{61,24,65}, -{61,24,66}, -{61,24,67}, -{61,25,-60}, -{61,25,-59}, -{61,25,-58}, -{61,25,-57}, -{61,25,-56}, -{61,25,-55}, -{61,25,-54}, -{61,25,-53}, -{61,25,-52}, -{61,25,-51}, -{61,25,-50}, -{61,25,-49}, -{61,25,-48}, -{61,25,-47}, -{61,25,-46}, -{61,25,-45}, -{61,25,-44}, -{61,25,-43}, -{61,25,-42}, -{61,25,-41}, -{61,25,-40}, -{61,25,-39}, -{61,25,-38}, -{61,25,-37}, -{61,25,-36}, -{61,25,-35}, -{61,25,-34}, -{61,25,-33}, -{61,25,-32}, -{61,25,-31}, -{61,25,-30}, -{61,25,-29}, -{61,25,-28}, -{61,25,-27}, -{61,25,-26}, -{61,25,-25}, -{61,25,-24}, -{61,25,-23}, -{61,25,-22}, -{61,25,-21}, -{61,25,-20}, -{61,25,-19}, -{61,25,-18}, -{61,25,-17}, -{61,25,-16}, -{61,25,-15}, -{61,25,-14}, -{61,25,-13}, -{61,25,-12}, -{61,25,-11}, -{61,25,-10}, -{61,25,-9}, -{61,25,-8}, -{61,25,-7}, -{61,25,-6}, -{61,25,-5}, -{61,25,-4}, -{61,25,-3}, -{61,25,-2}, -{61,25,-1}, -{61,25,0}, -{61,25,1}, -{61,25,2}, -{61,25,3}, -{61,25,4}, -{61,25,5}, -{61,25,6}, -{61,25,7}, -{61,25,8}, -{61,25,9}, -{61,25,10}, -{61,25,11}, -{61,25,12}, -{61,25,13}, -{61,25,14}, -{61,25,15}, -{61,25,16}, -{61,25,17}, -{61,25,18}, -{61,25,19}, -{61,25,20}, -{61,25,21}, -{61,25,22}, -{61,25,23}, -{61,25,24}, -{61,25,25}, -{61,25,26}, -{61,25,27}, -{61,25,28}, -{61,25,29}, -{61,25,30}, -{61,25,31}, -{61,25,32}, -{61,25,33}, -{61,25,34}, -{61,25,35}, -{61,25,36}, -{61,25,37}, -{61,25,38}, -{61,25,39}, -{61,25,40}, -{61,25,41}, -{61,25,42}, -{61,25,43}, -{61,25,44}, -{61,25,45}, -{61,25,46}, -{61,25,47}, -{61,25,48}, -{61,25,49}, -{61,25,50}, -{61,25,51}, -{61,25,52}, -{61,25,53}, -{61,25,54}, -{61,25,55}, -{61,25,56}, -{61,25,57}, -{61,25,58}, -{61,25,59}, -{61,25,60}, -{61,25,61}, -{61,25,62}, -{61,25,63}, -{61,25,64}, -{61,25,65}, -{61,25,66}, -{61,25,67}, -{61,26,-60}, -{61,26,-59}, -{61,26,-58}, -{61,26,-57}, -{61,26,-56}, -{61,26,-55}, -{61,26,-54}, -{61,26,-53}, -{61,26,-52}, -{61,26,-51}, -{61,26,-50}, -{61,26,-49}, -{61,26,-48}, -{61,26,-47}, -{61,26,-46}, -{61,26,-45}, -{61,26,-44}, -{61,26,-43}, -{61,26,-42}, -{61,26,-41}, -{61,26,-40}, -{61,26,-39}, -{61,26,-38}, -{61,26,-37}, -{61,26,-36}, -{61,26,-35}, -{61,26,-34}, -{61,26,-33}, -{61,26,-32}, -{61,26,-31}, -{61,26,-30}, -{61,26,-29}, -{61,26,-28}, -{61,26,-27}, -{61,26,-26}, -{61,26,-25}, -{61,26,-24}, -{61,26,-23}, -{61,26,-22}, -{61,26,-21}, -{61,26,-20}, -{61,26,-19}, -{61,26,-18}, -{61,26,-17}, -{61,26,-16}, -{61,26,-15}, -{61,26,-14}, -{61,26,-13}, -{61,26,-12}, -{61,26,-11}, -{61,26,-10}, -{61,26,-9}, -{61,26,-8}, -{61,26,-7}, -{61,26,-6}, -{61,26,-5}, -{61,26,-4}, -{61,26,-3}, -{61,26,-2}, -{61,26,-1}, -{61,26,0}, -{61,26,1}, -{61,26,2}, -{61,26,3}, -{61,26,4}, -{61,26,5}, -{61,26,6}, -{61,26,7}, -{61,26,8}, -{61,26,9}, -{61,26,10}, -{61,26,11}, -{61,26,12}, -{61,26,13}, -{61,26,14}, -{61,26,15}, -{61,26,16}, -{61,26,17}, -{61,26,18}, -{61,26,19}, -{61,26,20}, -{61,26,21}, -{61,26,22}, -{61,26,23}, -{61,26,24}, -{61,26,25}, -{61,26,26}, -{61,26,27}, -{61,26,28}, -{61,26,29}, -{61,26,30}, -{61,26,31}, -{61,26,32}, -{61,26,33}, -{61,26,34}, -{61,26,35}, -{61,26,36}, -{61,26,37}, -{61,26,38}, -{61,26,39}, -{61,26,40}, -{61,26,41}, -{61,26,42}, -{61,26,43}, -{61,26,44}, -{61,26,45}, -{61,26,46}, -{61,26,47}, -{61,26,48}, -{61,26,49}, -{61,26,50}, -{61,26,51}, -{61,26,52}, -{61,26,53}, -{61,26,54}, -{61,26,55}, -{61,26,56}, -{61,26,57}, -{61,26,58}, -{61,26,59}, -{61,26,60}, -{61,26,61}, -{61,26,62}, -{61,26,63}, -{61,26,64}, -{61,26,65}, -{61,26,66}, -{61,26,67}, -{61,27,-60}, -{61,27,-59}, -{61,27,-58}, -{61,27,-57}, -{61,27,-56}, -{61,27,-55}, -{61,27,-54}, -{61,27,-53}, -{61,27,-52}, -{61,27,-51}, -{61,27,-50}, -{61,27,-49}, -{61,27,-48}, -{61,27,-47}, -{61,27,-46}, -{61,27,-45}, -{61,27,-44}, -{61,27,-43}, -{61,27,-42}, -{61,27,-41}, -{61,27,-40}, -{61,27,-39}, -{61,27,-38}, -{61,27,-37}, -{61,27,-36}, -{61,27,-35}, -{61,27,-34}, -{61,27,-33}, -{61,27,-32}, -{61,27,-31}, -{61,27,-30}, -{61,27,-29}, -{61,27,-28}, -{61,27,-27}, -{61,27,-26}, -{61,27,-25}, -{61,27,-24}, -{61,27,-23}, -{61,27,-22}, -{61,27,-21}, -{61,27,-20}, -{61,27,-19}, -{61,27,-18}, -{61,27,-17}, -{61,27,-16}, -{61,27,-15}, -{61,27,-14}, -{61,27,-13}, -{61,27,-12}, -{61,27,-11}, -{61,27,-10}, -{61,27,-9}, -{61,27,-8}, -{61,27,-7}, -{61,27,-6}, -{61,27,-5}, -{61,27,-4}, -{61,27,-3}, -{61,27,-2}, -{61,27,-1}, -{61,27,0}, -{61,27,1}, -{61,27,2}, -{61,27,3}, -{61,27,4}, -{61,27,5}, -{61,27,6}, -{61,27,7}, -{61,27,8}, -{61,27,9}, -{61,27,10}, -{61,27,11}, -{61,27,12}, -{61,27,13}, -{61,27,14}, -{61,27,15}, -{61,27,16}, -{61,27,17}, -{61,27,18}, -{61,27,19}, -{61,27,20}, -{61,27,21}, -{61,27,22}, -{61,27,23}, -{61,27,24}, -{61,27,25}, -{61,27,26}, -{61,27,27}, -{61,27,28}, -{61,27,29}, -{61,27,30}, -{61,27,31}, -{61,27,32}, -{61,27,33}, -{61,27,34}, -{61,27,35}, -{61,27,36}, -{61,27,37}, -{61,27,38}, -{61,27,39}, -{61,27,40}, -{61,27,41}, -{61,27,42}, -{61,27,43}, -{61,27,44}, -{61,27,45}, -{61,27,46}, -{61,27,47}, -{61,27,48}, -{61,27,49}, -{61,27,50}, -{61,27,51}, -{61,27,52}, -{61,27,53}, -{61,27,54}, -{61,27,55}, -{61,27,56}, -{61,27,57}, -{61,27,58}, -{61,27,59}, -{61,27,60}, -{61,27,61}, -{61,27,62}, -{61,27,63}, -{61,27,64}, -{61,27,65}, -{61,27,66}, -{61,27,67}, -{61,28,-60}, -{61,28,-59}, -{61,28,-58}, -{61,28,-57}, -{61,28,-56}, -{61,28,-55}, -{61,28,-54}, -{61,28,-53}, -{61,28,-52}, -{61,28,-51}, -{61,28,-50}, -{61,28,-49}, -{61,28,-48}, -{61,28,-47}, -{61,28,-46}, -{61,28,-45}, -{61,28,-44}, -{61,28,-43}, -{61,28,-42}, -{61,28,-41}, -{61,28,-40}, -{61,28,-39}, -{61,28,-38}, -{61,28,-37}, -{61,28,-36}, -{61,28,-35}, -{61,28,-34}, -{61,28,-33}, -{61,28,-32}, -{61,28,-31}, -{61,28,-30}, -{61,28,-29}, -{61,28,-28}, -{61,28,-27}, -{61,28,-26}, -{61,28,-25}, -{61,28,-24}, -{61,28,-23}, -{61,28,-22}, -{61,28,-21}, -{61,28,-20}, -{61,28,-19}, -{61,28,-18}, -{61,28,-17}, -{61,28,-16}, -{61,28,-15}, -{61,28,-14}, -{61,28,-13}, -{61,28,-12}, -{61,28,-11}, -{61,28,-10}, -{61,28,-9}, -{61,28,-8}, -{61,28,-7}, -{61,28,-6}, -{61,28,-5}, -{61,28,-4}, -{61,28,-3}, -{61,28,-2}, -{61,28,-1}, -{61,28,0}, -{61,28,1}, -{61,28,2}, -{61,28,3}, -{61,28,4}, -{61,28,5}, -{61,28,6}, -{61,28,7}, -{61,28,8}, -{61,28,9}, -{61,28,10}, -{61,28,11}, -{61,28,12}, -{61,28,13}, -{61,28,14}, -{61,28,15}, -{61,28,16}, -{61,28,17}, -{61,28,18}, -{61,28,19}, -{61,28,20}, -{61,28,21}, -{61,28,22}, -{61,28,23}, -{61,28,24}, -{61,28,25}, -{61,28,26}, -{61,28,27}, -{61,28,28}, -{61,28,29}, -{61,28,30}, -{61,28,31}, -{61,28,32}, -{61,28,33}, -{61,28,34}, -{61,28,35}, -{61,28,36}, -{61,28,37}, -{61,28,38}, -{61,28,39}, -{61,28,40}, -{61,28,41}, -{61,28,42}, -{61,28,43}, -{61,28,44}, -{61,28,45}, -{61,28,46}, -{61,28,47}, -{61,28,48}, -{61,28,49}, -{61,28,50}, -{61,28,51}, -{61,28,52}, -{61,28,53}, -{61,28,54}, -{61,28,55}, -{61,28,56}, -{61,28,57}, -{61,28,58}, -{61,28,59}, -{61,28,60}, -{61,28,61}, -{61,28,62}, -{61,28,63}, -{61,28,64}, -{61,28,65}, -{61,28,66}, -{61,28,67}, -{61,29,-60}, -{61,29,-59}, -{61,29,-58}, -{61,29,-57}, -{61,29,-56}, -{61,29,-55}, -{61,29,-54}, -{61,29,-53}, -{61,29,-52}, -{61,29,-51}, -{61,29,-50}, -{61,29,-49}, -{61,29,-48}, -{61,29,-47}, -{61,29,-46}, -{61,29,-45}, -{61,29,-44}, -{61,29,-43}, -{61,29,-42}, -{61,29,-41}, -{61,29,-40}, -{61,29,-39}, -{61,29,-38}, -{61,29,-37}, -{61,29,-36}, -{61,29,-35}, -{61,29,-34}, -{61,29,-33}, -{61,29,-32}, -{61,29,-31}, -{61,29,-30}, -{61,29,-29}, -{61,29,-28}, -{61,29,-27}, -{61,29,-26}, -{61,29,-25}, -{61,29,-24}, -{61,29,-23}, -{61,29,-22}, -{61,29,-21}, -{61,29,-20}, -{61,29,-19}, -{61,29,-18}, -{61,29,-17}, -{61,29,-16}, -{61,29,-15}, -{61,29,-14}, -{61,29,-13}, -{61,29,-12}, -{61,29,-11}, -{61,29,-10}, -{61,29,-9}, -{61,29,-8}, -{61,29,-7}, -{61,29,-6}, -{61,29,-5}, -{61,29,-4}, -{61,29,-3}, -{61,29,-2}, -{61,29,-1}, -{61,29,0}, -{61,29,1}, -{61,29,2}, -{61,29,3}, -{61,29,4}, -{61,29,5}, -{61,29,6}, -{61,29,7}, -{61,29,8}, -{61,29,9}, -{61,29,10}, -{61,29,11}, -{61,29,12}, -{61,29,13}, -{61,29,14}, -{61,29,15}, -{61,29,16}, -{61,29,17}, -{61,29,18}, -{61,29,19}, -{61,29,20}, -{61,29,21}, -{61,29,22}, -{61,29,23}, -{61,29,24}, -{61,29,25}, -{61,29,26}, -{61,29,27}, -{61,29,28}, -{61,29,29}, -{61,29,30}, -{61,29,31}, -{61,29,32}, -{61,29,33}, -{61,29,34}, -{61,29,35}, -{61,29,36}, -{61,29,37}, -{61,29,38}, -{61,29,39}, -{61,29,40}, -{61,29,41}, -{61,29,42}, -{61,29,43}, -{61,29,44}, -{61,29,45}, -{61,29,46}, -{61,29,47}, -{61,29,48}, -{61,29,49}, -{61,29,50}, -{61,29,51}, -{61,29,52}, -{61,29,53}, -{61,29,54}, -{61,29,55}, -{61,29,56}, -{61,29,57}, -{61,29,58}, -{61,29,59}, -{61,29,60}, -{61,29,61}, -{61,29,62}, -{61,29,63}, -{61,29,64}, -{61,29,65}, -{61,29,66}, -{61,29,67}, -{61,30,-60}, -{61,30,-59}, -{61,30,-58}, -{61,30,-57}, -{61,30,-56}, -{61,30,-55}, -{61,30,-54}, -{61,30,-53}, -{61,30,-52}, -{61,30,-51}, -{61,30,-50}, -{61,30,-49}, -{61,30,-48}, -{61,30,-47}, -{61,30,-46}, -{61,30,-45}, -{61,30,-44}, -{61,30,-43}, -{61,30,-42}, -{61,30,-41}, -{61,30,-40}, -{61,30,-39}, -{61,30,-38}, -{61,30,-37}, -{61,30,-36}, -{61,30,-35}, -{61,30,-34}, -{61,30,-33}, -{61,30,-32}, -{61,30,-31}, -{61,30,-30}, -{61,30,-29}, -{61,30,-28}, -{61,30,-27}, -{61,30,-26}, -{61,30,-25}, -{61,30,-24}, -{61,30,-23}, -{61,30,-22}, -{61,30,-21}, -{61,30,-20}, -{61,30,-19}, -{61,30,-18}, -{61,30,-17}, -{61,30,-16}, -{61,30,-15}, -{61,30,-14}, -{61,30,-13}, -{61,30,-12}, -{61,30,-11}, -{61,30,-10}, -{61,30,-9}, -{61,30,-8}, -{61,30,-7}, -{61,30,-6}, -{61,30,-5}, -{61,30,-4}, -{61,30,-3}, -{61,30,-2}, -{61,30,-1}, -{61,30,0}, -{61,30,1}, -{61,30,2}, -{61,30,3}, -{61,30,4}, -{61,30,5}, -{61,30,6}, -{61,30,7}, -{61,30,8}, -{61,30,9}, -{61,30,10}, -{61,30,11}, -{61,30,12}, -{61,30,13}, -{61,30,14}, -{61,30,15}, -{61,30,16}, -{61,30,17}, -{61,30,18}, -{61,30,19}, -{61,30,20}, -{61,30,21}, -{61,30,22}, -{61,30,23}, -{61,30,24}, -{61,30,25}, -{61,30,26}, -{61,30,27}, -{61,30,28}, -{61,30,29}, -{61,30,30}, -{61,30,31}, -{61,30,32}, -{61,30,33}, -{61,30,34}, -{61,30,35}, -{61,30,36}, -{61,30,37}, -{61,30,38}, -{61,30,39}, -{61,30,40}, -{61,30,41}, -{61,30,42}, -{61,30,43}, -{61,30,44}, -{61,30,45}, -{61,30,46}, -{61,30,47}, -{61,30,48}, -{61,30,49}, -{61,30,50}, -{61,30,51}, -{61,30,52}, -{61,30,53}, -{61,30,54}, -{61,30,55}, -{61,30,56}, -{61,30,57}, -{61,30,58}, -{61,30,59}, -{61,30,60}, -{61,30,61}, -{61,30,62}, -{61,30,63}, -{61,30,64}, -{61,30,65}, -{61,30,66}, -{61,30,67}, -{61,31,-60}, -{61,31,-59}, -{61,31,-58}, -{61,31,-57}, -{61,31,-56}, -{61,31,-55}, -{61,31,-54}, -{61,31,-53}, -{61,31,-52}, -{61,31,-51}, -{61,31,-50}, -{61,31,-49}, -{61,31,-48}, -{61,31,-47}, -{61,31,-46}, -{61,31,-45}, -{61,31,-44}, -{61,31,-43}, -{61,31,-42}, -{61,31,-41}, -{61,31,-40}, -{61,31,-39}, -{61,31,-38}, -{61,31,-37}, -{61,31,-36}, -{61,31,-35}, -{61,31,-34}, -{61,31,-33}, -{61,31,-32}, -{61,31,-31}, -{61,31,-30}, -{61,31,-29}, -{61,31,-28}, -{61,31,-27}, -{61,31,-26}, -{61,31,-25}, -{61,31,-24}, -{61,31,-23}, -{61,31,-22}, -{61,31,-21}, -{61,31,-20}, -{61,31,-19}, -{61,31,-18}, -{61,31,-17}, -{61,31,-16}, -{61,31,-15}, -{61,31,-14}, -{61,31,-13}, -{61,31,-12}, -{61,31,-11}, -{61,31,-10}, -{61,31,-9}, -{61,31,-8}, -{61,31,-7}, -{61,31,-6}, -{61,31,-5}, -{61,31,-4}, -{61,31,-3}, -{61,31,-2}, -{61,31,-1}, -{61,31,0}, -{61,31,1}, -{61,31,2}, -{61,31,3}, -{61,31,4}, -{61,31,5}, -{61,31,6}, -{61,31,7}, -{61,31,8}, -{61,31,9}, -{61,31,10}, -{61,31,11}, -{61,31,12}, -{61,31,13}, -{61,31,14}, -{61,31,15}, -{61,31,16}, -{61,31,17}, -{61,31,18}, -{61,31,19}, -{61,31,20}, -{61,31,21}, -{61,31,22}, -{61,31,23}, -{61,31,24}, -{61,31,25}, -{61,31,26}, -{61,31,27}, -{61,31,28}, -{61,31,29}, -{61,31,30}, -{61,31,31}, -{61,31,32}, -{61,31,33}, -{61,31,34}, -{61,31,35}, -{61,31,36}, -{61,31,37}, -{61,31,38}, -{61,31,39}, -{61,31,40}, -{61,31,41}, -{61,31,42}, -{61,31,43}, -{61,31,44}, -{61,31,45}, -{61,31,46}, -{61,31,47}, -{61,31,48}, -{61,31,49}, -{61,31,50}, -{61,31,51}, -{61,31,52}, -{61,31,53}, -{61,31,54}, -{61,31,55}, -{61,31,56}, -{61,31,57}, -{61,31,58}, -{61,31,59}, -{61,31,60}, -{61,31,61}, -{61,31,62}, -{61,31,63}, -{61,31,64}, -{61,31,65}, -{61,31,66}, -{61,31,67}, -{61,32,-60}, -{61,32,-59}, -{61,32,-58}, -{61,32,-57}, -{61,32,-56}, -{61,32,-55}, -{61,32,-54}, -{61,32,-53}, -{61,32,-52}, -{61,32,-51}, -{61,32,-50}, -{61,32,-49}, -{61,32,-48}, -{61,32,-47}, -{61,32,-46}, -{61,32,-45}, -{61,32,-44}, -{61,32,-43}, -{61,32,-42}, -{61,32,-41}, -{61,32,-40}, -{61,32,-39}, -{61,32,-38}, -{61,32,-37}, -{61,32,-36}, -{61,32,-35}, -{61,32,-34}, -{61,32,-33}, -{61,32,-32}, -{61,32,-31}, -{61,32,-30}, -{61,32,-29}, -{61,32,-28}, -{61,32,-27}, -{61,32,-26}, -{61,32,-25}, -{61,32,-24}, -{61,32,-23}, -{61,32,-22}, -{61,32,-21}, -{61,32,-20}, -{61,32,-19}, -{61,32,-18}, -{61,32,-17}, -{61,32,-16}, -{61,32,-15}, -{61,32,-14}, -{61,32,-13}, -{61,32,-12}, -{61,32,-11}, -{61,32,-10}, -{61,32,-9}, -{61,32,-8}, -{61,32,-7}, -{61,32,-6}, -{61,32,-5}, -{61,32,-4}, -{61,32,-3}, -{61,32,-2}, -{61,32,-1}, -{61,32,0}, -{61,32,1}, -{61,32,2}, -{61,32,3}, -{61,32,4}, -{61,32,5}, -{61,32,6}, -{61,32,7}, -{61,32,8}, -{61,32,9}, -{61,32,10}, -{61,32,11}, -{61,32,12}, -{61,32,13}, -{61,32,14}, -{61,32,15}, -{61,32,16}, -{61,32,17}, -{61,32,18}, -{61,32,19}, -{61,32,20}, -{61,32,21}, -{61,32,22}, -{61,32,23}, -{61,32,24}, -{61,32,25}, -{61,32,26}, -{61,32,27}, -{61,32,28}, -{61,32,29}, -{61,32,30}, -{61,32,31}, -{61,32,32}, -{61,32,33}, -{61,32,34}, -{61,32,35}, -{61,32,36}, -{61,32,37}, -{61,32,38}, -{61,32,39}, -{61,32,40}, -{61,32,41}, -{61,32,42}, -{61,32,43}, -{61,32,44}, -{61,32,45}, -{61,32,46}, -{61,32,47}, -{61,32,48}, -{61,32,49}, -{61,32,50}, -{61,32,51}, -{61,32,52}, -{61,32,53}, -{61,32,54}, -{61,32,55}, -{61,32,56}, -{61,32,57}, -{61,32,58}, -{61,32,59}, -{61,32,60}, -{61,32,61}, -{61,32,62}, -{61,32,63}, -{61,32,64}, -{61,32,65}, -{61,32,66}, -{61,32,67}, -{61,32,68}, -{61,33,-60}, -{61,33,-59}, -{61,33,-58}, -{61,33,-57}, -{61,33,-56}, -{61,33,-55}, -{61,33,-54}, -{61,33,-53}, -{61,33,-52}, -{61,33,-51}, -{61,33,-50}, -{61,33,-49}, -{61,33,-48}, -{61,33,-47}, -{61,33,-46}, -{61,33,-45}, -{61,33,-44}, -{61,33,-43}, -{61,33,-42}, -{61,33,-41}, -{61,33,-40}, -{61,33,-39}, -{61,33,-38}, -{61,33,-37}, -{61,33,-36}, -{61,33,-35}, -{61,33,-34}, -{61,33,-33}, -{61,33,-32}, -{61,33,-31}, -{61,33,-30}, -{61,33,-29}, -{61,33,-28}, -{61,33,-27}, -{61,33,-26}, -{61,33,-25}, -{61,33,-24}, -{61,33,-23}, -{61,33,-22}, -{61,33,-21}, -{61,33,-20}, -{61,33,-19}, -{61,33,-18}, -{61,33,-17}, -{61,33,-16}, -{61,33,-15}, -{61,33,-14}, -{61,33,-13}, -{61,33,-12}, -{61,33,-11}, -{61,33,-10}, -{61,33,-9}, -{61,33,-8}, -{61,33,-7}, -{61,33,-6}, -{61,33,-5}, -{61,33,-4}, -{61,33,-3}, -{61,33,-2}, -{61,33,-1}, -{61,33,0}, -{61,33,1}, -{61,33,2}, -{61,33,3}, -{61,33,4}, -{61,33,5}, -{61,33,6}, -{61,33,7}, -{61,33,8}, -{61,33,9}, -{61,33,10}, -{61,33,11}, -{61,33,12}, -{61,33,13}, -{61,33,14}, -{61,33,15}, -{61,33,16}, -{61,33,17}, -{61,33,18}, -{61,33,19}, -{61,33,20}, -{61,33,21}, -{61,33,22}, -{61,33,23}, -{61,33,24}, -{61,33,25}, -{61,33,26}, -{61,33,27}, -{61,33,28}, -{61,33,29}, -{61,33,30}, -{61,33,31}, -{61,33,32}, -{61,33,33}, -{61,33,34}, -{61,33,35}, -{61,33,36}, -{61,33,37}, -{61,33,38}, -{61,33,39}, -{61,33,40}, -{61,33,41}, -{61,33,42}, -{61,33,43}, -{61,33,44}, -{61,33,45}, -{61,33,46}, -{61,33,47}, -{61,33,48}, -{61,33,49}, -{61,33,50}, -{61,33,51}, -{61,33,52}, -{61,33,53}, -{61,33,54}, -{61,33,55}, -{61,33,56}, -{61,33,57}, -{61,33,58}, -{61,33,59}, -{61,33,60}, -{61,33,61}, -{61,33,62}, -{61,33,63}, -{61,33,64}, -{61,33,65}, -{61,33,66}, -{61,33,67}, -{61,33,68}, -{61,34,-60}, -{61,34,-59}, -{61,34,-58}, -{61,34,-57}, -{61,34,-56}, -{61,34,-55}, -{61,34,-54}, -{61,34,-53}, -{61,34,-52}, -{61,34,-51}, -{61,34,-50}, -{61,34,-49}, -{61,34,-48}, -{61,34,-47}, -{61,34,-46}, -{61,34,-45}, -{61,34,-44}, -{61,34,-43}, -{61,34,-42}, -{61,34,-41}, -{61,34,-40}, -{61,34,-39}, -{61,34,-38}, -{61,34,-37}, -{61,34,-36}, -{61,34,-35}, -{61,34,-34}, -{61,34,-33}, -{61,34,-32}, -{61,34,-31}, -{61,34,-30}, -{61,34,-29}, -{61,34,-28}, -{61,34,-27}, -{61,34,-26}, -{61,34,-25}, -{61,34,-24}, -{61,34,-23}, -{61,34,-22}, -{61,34,-21}, -{61,34,-20}, -{61,34,-19}, -{61,34,-18}, -{61,34,-17}, -{61,34,-16}, -{61,34,-15}, -{61,34,-14}, -{61,34,-13}, -{61,34,-12}, -{61,34,-11}, -{61,34,-10}, -{61,34,-9}, -{61,34,-8}, -{61,34,-7}, -{61,34,-6}, -{61,34,-5}, -{61,34,-4}, -{61,34,-3}, -{61,34,-2}, -{61,34,-1}, -{61,34,0}, -{61,34,1}, -{61,34,2}, -{61,34,3}, -{61,34,4}, -{61,34,5}, -{61,34,6}, -{61,34,7}, -{61,34,8}, -{61,34,9}, -{61,34,10}, -{61,34,11}, -{61,34,12}, -{61,34,13}, -{61,34,14}, -{61,34,15}, -{61,34,16}, -{61,34,17}, -{61,34,18}, -{61,34,19}, -{61,34,20}, -{61,34,21}, -{61,34,22}, -{61,34,23}, -{61,34,24}, -{61,34,25}, -{61,34,26}, -{61,34,27}, -{61,34,28}, -{61,34,29}, -{61,34,30}, -{61,34,31}, -{61,34,32}, -{61,34,33}, -{61,34,34}, -{61,34,35}, -{61,34,36}, -{61,34,37}, -{61,34,38}, -{61,34,39}, -{61,34,40}, -{61,34,41}, -{61,34,42}, -{61,34,43}, -{61,34,44}, -{61,34,45}, -{61,34,46}, -{61,34,47}, -{61,34,48}, -{61,34,49}, -{61,34,50}, -{61,34,51}, -{61,34,52}, -{61,34,53}, -{61,34,54}, -{61,34,55}, -{61,34,56}, -{61,34,57}, -{61,34,58}, -{61,34,59}, -{61,34,60}, -{61,34,61}, -{61,34,62}, -{61,34,63}, -{61,34,64}, -{61,34,65}, -{61,34,66}, -{61,34,67}, -{61,34,68}, -{61,35,-60}, -{61,35,-59}, -{61,35,-58}, -{61,35,-57}, -{61,35,-56}, -{61,35,-55}, -{61,35,-54}, -{61,35,-53}, -{61,35,-52}, -{61,35,-51}, -{61,35,-50}, -{61,35,-49}, -{61,35,-48}, -{61,35,-47}, -{61,35,-46}, -{61,35,-45}, -{61,35,-44}, -{61,35,-43}, -{61,35,-42}, -{61,35,-41}, -{61,35,-40}, -{61,35,-39}, -{61,35,-38}, -{61,35,-37}, -{61,35,-36}, -{61,35,-35}, -{61,35,-34}, -{61,35,-33}, -{61,35,-32}, -{61,35,-31}, -{61,35,-30}, -{61,35,-29}, -{61,35,-28}, -{61,35,-27}, -{61,35,-26}, -{61,35,-25}, -{61,35,-24}, -{61,35,-23}, -{61,35,-22}, -{61,35,-21}, -{61,35,-20}, -{61,35,-19}, -{61,35,-18}, -{61,35,-17}, -{61,35,-16}, -{61,35,-15}, -{61,35,-14}, -{61,35,-13}, -{61,35,-12}, -{61,35,-11}, -{61,35,-10}, -{61,35,-9}, -{61,35,-8}, -{61,35,-7}, -{61,35,-6}, -{61,35,-5}, -{61,35,-4}, -{61,35,-3}, -{61,35,-2}, -{61,35,-1}, -{61,35,0}, -{61,35,1}, -{61,35,2}, -{61,35,3}, -{61,35,4}, -{61,35,5}, -{61,35,6}, -{61,35,7}, -{61,35,8}, -{61,35,9}, -{61,35,10}, -{61,35,11}, -{61,35,12}, -{61,35,13}, -{61,35,14}, -{61,35,15}, -{61,35,16}, -{61,35,17}, -{61,35,18}, -{61,35,19}, -{61,35,20}, -{61,35,21}, -{61,35,22}, -{61,35,23}, -{61,35,24}, -{61,35,25}, -{61,35,26}, -{61,35,27}, -{61,35,28}, -{61,35,29}, -{61,35,30}, -{61,35,31}, -{61,35,32}, -{61,35,33}, -{61,35,34}, -{61,35,35}, -{61,35,36}, -{61,35,37}, -{61,35,38}, -{61,35,39}, -{61,35,40}, -{61,35,41}, -{61,35,42}, -{61,35,43}, -{61,35,44}, -{61,35,45}, -{61,35,46}, -{61,35,47}, -{61,35,48}, -{61,35,49}, -{61,35,50}, -{61,35,51}, -{61,35,52}, -{61,35,53}, -{61,35,54}, -{61,35,55}, -{61,35,56}, -{61,35,57}, -{61,35,58}, -{61,35,59}, -{61,35,60}, -{61,35,61}, -{61,35,62}, -{61,35,63}, -{61,35,64}, -{61,35,65}, -{61,35,66}, -{61,35,67}, -{61,35,68}, -{61,36,-60}, -{61,36,-59}, -{61,36,-58}, -{61,36,-57}, -{61,36,-56}, -{61,36,-55}, -{61,36,-54}, -{61,36,-53}, -{61,36,-52}, -{61,36,-51}, -{61,36,-50}, -{61,36,-49}, -{61,36,-48}, -{61,36,-47}, -{61,36,-46}, -{61,36,-45}, -{61,36,-44}, -{61,36,-43}, -{61,36,-42}, -{61,36,-41}, -{61,36,-40}, -{61,36,-39}, -{61,36,-38}, -{61,36,-37}, -{61,36,-36}, -{61,36,-35}, -{61,36,-34}, -{61,36,-33}, -{61,36,-32}, -{61,36,-31}, -{61,36,-30}, -{61,36,-29}, -{61,36,-28}, -{61,36,-27}, -{61,36,-26}, -{61,36,-25}, -{61,36,-24}, -{61,36,-23}, -{61,36,-22}, -{61,36,-21}, -{61,36,-20}, -{61,36,-19}, -{61,36,-18}, -{61,36,-17}, -{61,36,-16}, -{61,36,-15}, -{61,36,-14}, -{61,36,-13}, -{61,36,-12}, -{61,36,-11}, -{61,36,-10}, -{61,36,-9}, -{61,36,-8}, -{61,36,-7}, -{61,36,-6}, -{61,36,-5}, -{61,36,-4}, -{61,36,-3}, -{61,36,-2}, -{61,36,-1}, -{61,36,0}, -{61,36,1}, -{61,36,2}, -{61,36,3}, -{61,36,4}, -{61,36,5}, -{61,36,6}, -{61,36,7}, -{61,36,8}, -{61,36,9}, -{61,36,10}, -{61,36,11}, -{61,36,12}, -{61,36,13}, -{61,36,14}, -{61,36,15}, -{61,36,16}, -{61,36,17}, -{61,36,18}, -{61,36,19}, -{61,36,20}, -{61,36,21}, -{61,36,22}, -{61,36,23}, -{61,36,24}, -{61,36,25}, -{61,36,26}, -{61,36,27}, -{61,36,28}, -{61,36,29}, -{61,36,30}, -{61,36,31}, -{61,36,32}, -{61,36,33}, -{61,36,34}, -{61,36,35}, -{61,36,36}, -{61,36,37}, -{61,36,38}, -{61,36,39}, -{61,36,40}, -{61,36,41}, -{61,36,42}, -{61,36,43}, -{61,36,44}, -{61,36,45}, -{61,36,46}, -{61,36,47}, -{61,36,48}, -{61,36,49}, -{61,36,50}, -{61,36,51}, -{61,36,52}, -{61,36,53}, -{61,36,54}, -{61,36,55}, -{61,36,56}, -{61,36,57}, -{61,36,58}, -{61,36,59}, -{61,36,60}, -{61,36,61}, -{61,36,62}, -{61,36,63}, -{61,36,64}, -{61,36,65}, -{61,36,66}, -{61,36,67}, -{61,36,68}, -{61,37,-60}, -{61,37,-59}, -{61,37,-58}, -{61,37,-57}, -{61,37,-56}, -{61,37,-55}, -{61,37,-54}, -{61,37,-53}, -{61,37,-52}, -{61,37,-51}, -{61,37,-50}, -{61,37,-49}, -{61,37,-48}, -{61,37,-47}, -{61,37,-46}, -{61,37,-45}, -{61,37,-44}, -{61,37,-43}, -{61,37,-42}, -{61,37,-41}, -{61,37,-40}, -{61,37,-39}, -{61,37,-38}, -{61,37,-37}, -{61,37,-36}, -{61,37,-35}, -{61,37,-34}, -{61,37,-33}, -{61,37,-32}, -{61,37,-31}, -{61,37,-30}, -{61,37,-29}, -{61,37,-28}, -{61,37,-27}, -{61,37,-26}, -{61,37,-25}, -{61,37,-24}, -{61,37,-23}, -{61,37,-22}, -{61,37,-21}, -{61,37,-20}, -{61,37,-19}, -{61,37,-18}, -{61,37,-17}, -{61,37,-16}, -{61,37,-15}, -{61,37,-14}, -{61,37,-13}, -{61,37,-12}, -{61,37,-11}, -{61,37,-10}, -{61,37,-9}, -{61,37,-8}, -{61,37,-7}, -{61,37,-6}, -{61,37,-5}, -{61,37,-4}, -{61,37,-3}, -{61,37,-2}, -{61,37,-1}, -{61,37,0}, -{61,37,1}, -{61,37,2}, -{61,37,3}, -{61,37,4}, -{61,37,5}, -{61,37,6}, -{61,37,7}, -{61,37,8}, -{61,37,9}, -{61,37,10}, -{61,37,11}, -{61,37,12}, -{61,37,13}, -{61,37,14}, -{61,37,15}, -{61,37,16}, -{61,37,17}, -{61,37,18}, -{61,37,19}, -{61,37,20}, -{61,37,21}, -{61,37,22}, -{61,37,23}, -{61,37,24}, -{61,37,25}, -{61,37,26}, -{61,37,27}, -{61,37,28}, -{61,37,29}, -{61,37,30}, -{61,37,31}, -{61,37,32}, -{61,37,33}, -{61,37,34}, -{61,37,35}, -{61,37,36}, -{61,37,37}, -{61,37,38}, -{61,37,39}, -{61,37,40}, -{61,37,41}, -{61,37,42}, -{61,37,43}, -{61,37,44}, -{61,37,45}, -{61,37,46}, -{61,37,47}, -{61,37,48}, -{61,37,49}, -{61,37,50}, -{61,37,51}, -{61,37,52}, -{61,37,53}, -{61,37,54}, -{61,37,55}, -{61,37,56}, -{61,37,57}, -{61,37,58}, -{61,37,59}, -{61,37,60}, -{61,37,61}, -{61,37,62}, -{61,37,63}, -{61,37,64}, -{61,37,65}, -{61,37,66}, -{61,37,67}, -{61,37,68}, -{61,38,-60}, -{61,38,-59}, -{61,38,-58}, -{61,38,-57}, -{61,38,-56}, -{61,38,-55}, -{61,38,-54}, -{61,38,-53}, -{61,38,-52}, -{61,38,-51}, -{61,38,-50}, -{61,38,-49}, -{61,38,-48}, -{61,38,-47}, -{61,38,-46}, -{61,38,-45}, -{61,38,-44}, -{61,38,-43}, -{61,38,-42}, -{61,38,-41}, -{61,38,-40}, -{61,38,-39}, -{61,38,-38}, -{61,38,-37}, -{61,38,-36}, -{61,38,-35}, -{61,38,-34}, -{61,38,-33}, -{61,38,-32}, -{61,38,-31}, -{61,38,-30}, -{61,38,-29}, -{61,38,-28}, -{61,38,-27}, -{61,38,-26}, -{61,38,-25}, -{61,38,-24}, -{61,38,-23}, -{61,38,-22}, -{61,38,-21}, -{61,38,-20}, -{61,38,-19}, -{61,38,-18}, -{61,38,-17}, -{61,38,-16}, -{61,38,-15}, -{61,38,-14}, -{61,38,-13}, -{61,38,-12}, -{61,38,-11}, -{61,38,-10}, -{61,38,-9}, -{61,38,-8}, -{61,38,-7}, -{61,38,-6}, -{61,38,-5}, -{61,38,-4}, -{61,38,-3}, -{61,38,-2}, -{61,38,-1}, -{61,38,0}, -{61,38,1}, -{61,38,2}, -{61,38,3}, -{61,38,4}, -{61,38,5}, -{61,38,6}, -{61,38,7}, -{61,38,8}, -{61,38,9}, -{61,38,10}, -{61,38,11}, -{61,38,12}, -{61,38,13}, -{61,38,14}, -{61,38,15}, -{61,38,16}, -{61,38,17}, -{61,38,18}, -{61,38,19}, -{61,38,20}, -{61,38,21}, -{61,38,22}, -{61,38,23}, -{61,38,24}, -{61,38,25}, -{61,38,26}, -{61,38,27}, -{61,38,28}, -{61,38,29}, -{61,38,30}, -{61,38,31}, -{61,38,32}, -{61,38,33}, -{61,38,34}, -{61,38,35}, -{61,38,36}, -{61,38,37}, -{61,38,38}, -{61,38,39}, -{61,38,40}, -{61,38,41}, -{61,38,42}, -{61,38,43}, -{61,38,44}, -{61,38,45}, -{61,38,46}, -{61,38,47}, -{61,38,48}, -{61,38,49}, -{61,38,50}, -{61,38,51}, -{61,38,52}, -{61,38,53}, -{61,38,54}, -{61,38,55}, -{61,38,56}, -{61,38,57}, -{61,38,58}, -{61,38,59}, -{61,38,60}, -{61,38,61}, -{61,38,62}, -{61,38,63}, -{61,38,64}, -{61,38,65}, -{61,38,66}, -{61,38,67}, -{61,38,68}, -{61,39,-60}, -{61,39,-59}, -{61,39,-58}, -{61,39,-57}, -{61,39,-56}, -{61,39,-55}, -{61,39,-54}, -{61,39,-53}, -{61,39,-52}, -{61,39,-51}, -{61,39,-50}, -{61,39,-49}, -{61,39,-48}, -{61,39,-47}, -{61,39,-46}, -{61,39,-45}, -{61,39,-44}, -{61,39,-43}, -{61,39,-42}, -{61,39,-41}, -{61,39,-40}, -{61,39,-39}, -{61,39,-38}, -{61,39,-37}, -{61,39,-36}, -{61,39,-35}, -{61,39,-34}, -{61,39,-33}, -{61,39,-32}, -{61,39,-31}, -{61,39,-30}, -{61,39,-29}, -{61,39,-28}, -{61,39,-27}, -{61,39,-26}, -{61,39,-25}, -{61,39,-24}, -{61,39,-23}, -{61,39,-22}, -{61,39,-21}, -{61,39,-20}, -{61,39,-19}, -{61,39,-18}, -{61,39,-17}, -{61,39,-16}, -{61,39,-15}, -{61,39,-14}, -{61,39,-13}, -{61,39,-12}, -{61,39,-11}, -{61,39,-10}, -{61,39,-9}, -{61,39,-8}, -{61,39,-7}, -{61,39,-6}, -{61,39,-5}, -{61,39,-4}, -{61,39,-3}, -{61,39,-2}, -{61,39,-1}, -{61,39,0}, -{61,39,1}, -{61,39,2}, -{61,39,3}, -{61,39,4}, -{61,39,5}, -{61,39,6}, -{61,39,7}, -{61,39,8}, -{61,39,9}, -{61,39,10}, -{61,39,11}, -{61,39,12}, -{61,39,13}, -{61,39,14}, -{61,39,15}, -{61,39,16}, -{61,39,17}, -{61,39,18}, -{61,39,19}, -{61,39,20}, -{61,39,21}, -{61,39,22}, -{61,39,23}, -{61,39,24}, -{61,39,25}, -{61,39,26}, -{61,39,27}, -{61,39,28}, -{61,39,29}, -{61,39,30}, -{61,39,31}, -{61,39,32}, -{61,39,33}, -{61,39,34}, -{61,39,35}, -{61,39,36}, -{61,39,37}, -{61,39,38}, -{61,39,39}, -{61,39,40}, -{61,39,41}, -{61,39,42}, -{61,39,43}, -{61,39,44}, -{61,39,45}, -{61,39,46}, -{61,39,47}, -{61,39,48}, -{61,39,49}, -{61,39,50}, -{61,39,51}, -{61,39,52}, -{61,39,53}, -{61,39,54}, -{61,39,55}, -{61,39,56}, -{61,39,57}, -{61,39,58}, -{61,39,59}, -{61,39,60}, -{61,39,61}, -{61,39,62}, -{61,39,63}, -{61,39,64}, -{61,39,65}, -{61,39,66}, -{61,39,67}, -{61,39,68}, -{61,40,-60}, -{61,40,-59}, -{61,40,-58}, -{61,40,-57}, -{61,40,-56}, -{61,40,-55}, -{61,40,-54}, -{61,40,-53}, -{61,40,-52}, -{61,40,-51}, -{61,40,-50}, -{61,40,-49}, -{61,40,-48}, -{61,40,-47}, -{61,40,-46}, -{61,40,-45}, -{61,40,-44}, -{61,40,-43}, -{61,40,-42}, -{61,40,-41}, -{61,40,-40}, -{61,40,-39}, -{61,40,-38}, -{61,40,-37}, -{61,40,-36}, -{61,40,-35}, -{61,40,-34}, -{61,40,-33}, -{61,40,-32}, -{61,40,-31}, -{61,40,-30}, -{61,40,-29}, -{61,40,-28}, -{61,40,-27}, -{61,40,-26}, -{61,40,-25}, -{61,40,-24}, -{61,40,-23}, -{61,40,-22}, -{61,40,-21}, -{61,40,-20}, -{61,40,-19}, -{61,40,-18}, -{61,40,-17}, -{61,40,-16}, -{61,40,-15}, -{61,40,-14}, -{61,40,-13}, -{61,40,-12}, -{61,40,-11}, -{61,40,-10}, -{61,40,-9}, -{61,40,-8}, -{61,40,-7}, -{61,40,-6}, -{61,40,-5}, -{61,40,-4}, -{61,40,-3}, -{61,40,-2}, -{61,40,-1}, -{61,40,0}, -{61,40,1}, -{61,40,2}, -{61,40,3}, -{61,40,4}, -{61,40,5}, -{61,40,6}, -{61,40,7}, -{61,40,8}, -{61,40,9}, -{61,40,10}, -{61,40,11}, -{61,40,12}, -{61,40,13}, -{61,40,14}, -{61,40,15}, -{61,40,16}, -{61,40,17}, -{61,40,18}, -{61,40,19}, -{61,40,20}, -{61,40,21}, -{61,40,22}, -{61,40,23}, -{61,40,24}, -{61,40,25}, -{61,40,26}, -{61,40,27}, -{61,40,28}, -{61,40,29}, -{61,40,30}, -{61,40,31}, -{61,40,32}, -{61,40,33}, -{61,40,34}, -{61,40,35}, -{61,40,36}, -{61,40,37}, -{61,40,38}, -{61,40,39}, -{61,40,40}, -{61,40,41}, -{61,40,42}, -{61,40,43}, -{61,40,44}, -{61,40,45}, -{61,40,46}, -{61,40,47}, -{61,40,48}, -{61,40,49}, -{61,40,50}, -{61,40,51}, -{61,40,52}, -{61,40,53}, -{61,40,54}, -{61,40,55}, -{61,40,56}, -{61,40,57}, -{61,40,58}, -{61,40,59}, -{61,40,60}, -{61,40,61}, -{61,40,62}, -{61,40,63}, -{61,40,64}, -{61,40,65}, -{61,40,66}, -{61,40,67}, -{61,40,68}, -{61,41,-60}, -{61,41,-59}, -{61,41,-58}, -{61,41,-57}, -{61,41,-56}, -{61,41,-55}, -{61,41,-54}, -{61,41,-53}, -{61,41,-52}, -{61,41,-51}, -{61,41,-50}, -{61,41,-49}, -{61,41,-48}, -{61,41,-47}, -{61,41,-46}, -{61,41,-45}, -{61,41,-44}, -{61,41,-43}, -{61,41,-42}, -{61,41,-41}, -{61,41,-40}, -{61,41,-39}, -{61,41,-38}, -{61,41,-37}, -{61,41,-36}, -{61,41,-35}, -{61,41,-34}, -{61,41,-33}, -{61,41,-32}, -{61,41,-31}, -{61,41,-30}, -{61,41,-29}, -{61,41,-28}, -{61,41,-27}, -{61,41,-26}, -{61,41,-25}, -{61,41,-24}, -{61,41,-23}, -{61,41,-22}, -{61,41,-21}, -{61,41,-20}, -{61,41,-19}, -{61,41,-18}, -{61,41,-17}, -{61,41,-16}, -{61,41,-15}, -{61,41,-14}, -{61,41,-13}, -{61,41,-12}, -{61,41,-11}, -{61,41,-10}, -{61,41,-9}, -{61,41,-8}, -{61,41,-7}, -{61,41,-6}, -{61,41,-5}, -{61,41,-4}, -{61,41,-3}, -{61,41,-2}, -{61,41,-1}, -{61,41,0}, -{61,41,1}, -{61,41,2}, -{61,41,3}, -{61,41,4}, -{61,41,5}, -{61,41,6}, -{61,41,7}, -{61,41,8}, -{61,41,9}, -{61,41,10}, -{61,41,11}, -{61,41,12}, -{61,41,13}, -{61,41,14}, -{61,41,15}, -{61,41,16}, -{61,41,17}, -{61,41,18}, -{61,41,19}, -{61,41,20}, -{61,41,21}, -{61,41,22}, -{61,41,23}, -{61,41,24}, -{61,41,25}, -{61,41,26}, -{61,41,27}, -{61,41,28}, -{61,41,29}, -{61,41,30}, -{61,41,31}, -{61,41,32}, -{61,41,33}, -{61,41,34}, -{61,41,35}, -{61,41,36}, -{61,41,37}, -{61,41,38}, -{61,41,39}, -{61,41,40}, -{61,41,41}, -{61,41,42}, -{61,41,43}, -{61,41,44}, -{61,41,45}, -{61,41,46}, -{61,41,47}, -{61,41,48}, -{61,41,49}, -{61,41,50}, -{61,41,51}, -{61,41,52}, -{61,41,53}, -{61,41,54}, -{61,41,55}, -{61,41,56}, -{61,41,57}, -{61,41,58}, -{61,41,59}, -{61,41,60}, -{61,41,61}, -{61,41,62}, -{61,41,63}, -{61,41,64}, -{61,41,65}, -{61,41,66}, -{61,41,67}, -{61,41,68}, -{61,42,-60}, -{61,42,-59}, -{61,42,-58}, -{61,42,-57}, -{61,42,-56}, -{61,42,-55}, -{61,42,-54}, -{61,42,-53}, -{61,42,-52}, -{61,42,-51}, -{61,42,-50}, -{61,42,-49}, -{61,42,-48}, -{61,42,-47}, -{61,42,-46}, -{61,42,-45}, -{61,42,-44}, -{61,42,-43}, -{61,42,-42}, -{61,42,-41}, -{61,42,-40}, -{61,42,-39}, -{61,42,-38}, -{61,42,-37}, -{61,42,-36}, -{61,42,-35}, -{61,42,-34}, -{61,42,-33}, -{61,42,-32}, -{61,42,-31}, -{61,42,-30}, -{61,42,-29}, -{61,42,-28}, -{61,42,-27}, -{61,42,-26}, -{61,42,-25}, -{61,42,-24}, -{61,42,-23}, -{61,42,-22}, -{61,42,-21}, -{61,42,-20}, -{61,42,-19}, -{61,42,-18}, -{61,42,-17}, -{61,42,-16}, -{61,42,-15}, -{61,42,-14}, -{61,42,-13}, -{61,42,-12}, -{61,42,-11}, -{61,42,-10}, -{61,42,-9}, -{61,42,-8}, -{61,42,-7}, -{61,42,-6}, -{61,42,-5}, -{61,42,-4}, -{61,42,-3}, -{61,42,-2}, -{61,42,-1}, -{61,42,0}, -{61,42,1}, -{61,42,2}, -{61,42,3}, -{61,42,4}, -{61,42,5}, -{61,42,6}, -{61,42,7}, -{61,42,8}, -{61,42,9}, -{61,42,10}, -{61,42,11}, -{61,42,12}, -{61,42,13}, -{61,42,14}, -{61,42,15}, -{61,42,16}, -{61,42,17}, -{61,42,18}, -{61,42,19}, -{61,42,20}, -{61,42,21}, -{61,42,22}, -{61,42,23}, -{61,42,24}, -{61,42,25}, -{61,42,26}, -{61,42,27}, -{61,42,28}, -{61,42,29}, -{61,42,30}, -{61,42,31}, -{61,42,32}, -{61,42,33}, -{61,42,34}, -{61,42,35}, -{61,42,36}, -{61,42,37}, -{61,42,38}, -{61,42,39}, -{61,42,40}, -{61,42,41}, -{61,42,42}, -{61,42,43}, -{61,42,44}, -{61,42,45}, -{61,42,46}, -{61,42,47}, -{61,42,48}, -{61,42,49}, -{61,42,50}, -{61,42,51}, -{61,42,52}, -{61,42,53}, -{61,42,54}, -{61,42,55}, -{61,42,56}, -{61,42,57}, -{61,42,58}, -{61,42,59}, -{61,42,60}, -{61,42,61}, -{61,42,62}, -{61,42,63}, -{61,42,64}, -{61,42,65}, -{61,42,66}, -{61,42,67}, -{61,42,68}, -{61,42,69}, -{61,43,-60}, -{61,43,-59}, -{61,43,-58}, -{61,43,-57}, -{61,43,-56}, -{61,43,-55}, -{61,43,-54}, -{61,43,-53}, -{61,43,-52}, -{61,43,-51}, -{61,43,-50}, -{61,43,-49}, -{61,43,-48}, -{61,43,-47}, -{61,43,-46}, -{61,43,-45}, -{61,43,-44}, -{61,43,-43}, -{61,43,-42}, -{61,43,-41}, -{61,43,-40}, -{61,43,-39}, -{61,43,-38}, -{61,43,-37}, -{61,43,-36}, -{61,43,-35}, -{61,43,-34}, -{61,43,-33}, -{61,43,-32}, -{61,43,-31}, -{61,43,-30}, -{61,43,-29}, -{61,43,-28}, -{61,43,-27}, -{61,43,-26}, -{61,43,-25}, -{61,43,-24}, -{61,43,-23}, -{61,43,-22}, -{61,43,-21}, -{61,43,-20}, -{61,43,-19}, -{61,43,-18}, -{61,43,-17}, -{61,43,-16}, -{61,43,-15}, -{61,43,-14}, -{61,43,-13}, -{61,43,-12}, -{61,43,-11}, -{61,43,-10}, -{61,43,-9}, -{61,43,-8}, -{61,43,-7}, -{61,43,-6}, -{61,43,-5}, -{61,43,-4}, -{61,43,-3}, -{61,43,-2}, -{61,43,-1}, -{61,43,0}, -{61,43,1}, -{61,43,2}, -{61,43,3}, -{61,43,4}, -{61,43,5}, -{61,43,6}, -{61,43,7}, -{61,43,8}, -{61,43,9}, -{61,43,10}, -{61,43,11}, -{61,43,12}, -{61,43,13}, -{61,43,14}, -{61,43,15}, -{61,43,16}, -{61,43,17}, -{61,43,18}, -{61,43,19}, -{61,43,20}, -{61,43,21}, -{61,43,22}, -{61,43,23}, -{61,43,24}, -{61,43,25}, -{61,43,26}, -{61,43,27}, -{61,43,28}, -{61,43,29}, -{61,43,30}, -{61,43,31}, -{61,43,32}, -{61,43,33}, -{61,43,34}, -{61,43,35}, -{61,43,36}, -{61,43,37}, -{61,43,38}, -{61,43,39}, -{61,43,40}, -{61,43,41}, -{61,43,42}, -{61,43,43}, -{61,43,44}, -{61,43,45}, -{61,43,46}, -{61,43,47}, -{61,43,48}, -{61,43,49}, -{61,43,50}, -{61,43,51}, -{61,43,52}, -{61,43,53}, -{61,43,54}, -{61,43,55}, -{61,43,56}, -{61,43,57}, -{61,43,58}, -{61,43,59}, -{61,43,60}, -{61,43,61}, -{61,43,62}, -{61,43,63}, -{61,43,64}, -{61,43,65}, -{61,43,66}, -{61,43,67}, -{61,43,68}, -{61,43,69}, -{61,44,-60}, -{61,44,-59}, -{61,44,-58}, -{61,44,-57}, -{61,44,-56}, -{61,44,-55}, -{61,44,-54}, -{61,44,-53}, -{61,44,-52}, -{61,44,-51}, -{61,44,-50}, -{61,44,-49}, -{61,44,-48}, -{61,44,-47}, -{61,44,-46}, -{61,44,-45}, -{61,44,-44}, -{61,44,-43}, -{61,44,-42}, -{61,44,-41}, -{61,44,-40}, -{61,44,-39}, -{61,44,-38}, -{61,44,-37}, -{61,44,-36}, -{61,44,-35}, -{61,44,-34}, -{61,44,-33}, -{61,44,-32}, -{61,44,-31}, -{61,44,-30}, -{61,44,-29}, -{61,44,-28}, -{61,44,-27}, -{61,44,-26}, -{61,44,-25}, -{61,44,-24}, -{61,44,-23}, -{61,44,-22}, -{61,44,-21}, -{61,44,-20}, -{61,44,-19}, -{61,44,-18}, -{61,44,-17}, -{61,44,-16}, -{61,44,-15}, -{61,44,-14}, -{61,44,-13}, -{61,44,-12}, -{61,44,-11}, -{61,44,-10}, -{61,44,-9}, -{61,44,-8}, -{61,44,-7}, -{61,44,-6}, -{61,44,-5}, -{61,44,-4}, -{61,44,-3}, -{61,44,-2}, -{61,44,-1}, -{61,44,0}, -{61,44,1}, -{61,44,2}, -{61,44,3}, -{61,44,4}, -{61,44,5}, -{61,44,6}, -{61,44,7}, -{61,44,8}, -{61,44,9}, -{61,44,10}, -{61,44,11}, -{61,44,12}, -{61,44,13}, -{61,44,14}, -{61,44,15}, -{61,44,16}, -{61,44,17}, -{61,44,18}, -{61,44,19}, -{61,44,20}, -{61,44,21}, -{61,44,22}, -{61,44,23}, -{61,44,24}, -{61,44,25}, -{61,44,26}, -{61,44,27}, -{61,44,28}, -{61,44,29}, -{61,44,30}, -{61,44,31}, -{61,44,32}, -{61,44,33}, -{61,44,34}, -{61,44,35}, -{61,44,36}, -{61,44,37}, -{61,44,38}, -{61,44,39}, -{61,44,40}, -{61,44,41}, -{61,44,42}, -{61,44,43}, -{61,44,44}, -{61,44,45}, -{61,44,46}, -{61,44,47}, -{61,44,48}, -{61,44,49}, -{61,44,50}, -{61,44,51}, -{61,44,52}, -{61,44,53}, -{61,44,54}, -{61,44,55}, -{61,44,56}, -{61,44,57}, -{61,44,58}, -{61,44,59}, -{61,44,60}, -{61,44,61}, -{61,44,62}, -{61,44,63}, -{61,44,64}, -{61,44,65}, -{61,44,66}, -{61,44,67}, -{61,44,68}, -{61,44,69}, -{61,45,-60}, -{61,45,-59}, -{61,45,-58}, -{61,45,-57}, -{61,45,-56}, -{61,45,-55}, -{61,45,-54}, -{61,45,-53}, -{61,45,-52}, -{61,45,-51}, -{61,45,-50}, -{61,45,-49}, -{61,45,-48}, -{61,45,-47}, -{61,45,-46}, -{61,45,-45}, -{61,45,-44}, -{61,45,-43}, -{61,45,-42}, -{61,45,-41}, -{61,45,-40}, -{61,45,-39}, -{61,45,-38}, -{61,45,-37}, -{61,45,-36}, -{61,45,-35}, -{61,45,-34}, -{61,45,-33}, -{61,45,-32}, -{61,45,-31}, -{61,45,-30}, -{61,45,-29}, -{61,45,-28}, -{61,45,-27}, -{61,45,-26}, -{61,45,-25}, -{61,45,-24}, -{61,45,-23}, -{61,45,-22}, -{61,45,-21}, -{61,45,-20}, -{61,45,-19}, -{61,45,-18}, -{61,45,-17}, -{61,45,-16}, -{61,45,-15}, -{61,45,-14}, -{61,45,-13}, -{61,45,-12}, -{61,45,-11}, -{61,45,-10}, -{61,45,-9}, -{61,45,-8}, -{61,45,-7}, -{61,45,-6}, -{61,45,-5}, -{61,45,-4}, -{61,45,-3}, -{61,45,-2}, -{61,45,-1}, -{61,45,0}, -{61,45,1}, -{61,45,2}, -{61,45,3}, -{61,45,4}, -{61,45,5}, -{61,45,6}, -{61,45,7}, -{61,45,8}, -{61,45,9}, -{61,45,10}, -{61,45,11}, -{61,45,12}, -{61,45,13}, -{61,45,14}, -{61,45,15}, -{61,45,16}, -{61,45,17}, -{61,45,18}, -{61,45,19}, -{61,45,20}, -{61,45,21}, -{61,45,22}, -{61,45,23}, -{61,45,24}, -{61,45,25}, -{61,45,26}, -{61,45,27}, -{61,45,28}, -{61,45,29}, -{61,45,30}, -{61,45,31}, -{61,45,32}, -{61,45,33}, -{61,45,34}, -{61,45,35}, -{61,45,36}, -{61,45,37}, -{61,45,38}, -{61,45,39}, -{61,45,40}, -{61,45,41}, -{61,45,42}, -{61,45,43}, -{61,45,44}, -{61,45,45}, -{61,45,46}, -{61,45,47}, -{61,45,48}, -{61,45,49}, -{61,45,50}, -{61,45,51}, -{61,45,52}, -{61,45,53}, -{61,45,54}, -{61,45,55}, -{61,45,56}, -{61,45,57}, -{61,45,58}, -{61,45,59}, -{61,45,60}, -{61,45,61}, -{61,45,62}, -{61,45,63}, -{61,45,64}, -{61,45,65}, -{61,45,66}, -{61,45,67}, -{61,45,68}, -{61,45,69}, -{61,46,-60}, -{61,46,-59}, -{61,46,-58}, -{61,46,-57}, -{61,46,-56}, -{61,46,-55}, -{61,46,-54}, -{61,46,-53}, -{61,46,-52}, -{61,46,-51}, -{61,46,-50}, -{61,46,-49}, -{61,46,-48}, -{61,46,-47}, -{61,46,-46}, -{61,46,-45}, -{61,46,-44}, -{61,46,-43}, -{61,46,-42}, -{61,46,-41}, -{61,46,-40}, -{61,46,-39}, -{61,46,-38}, -{61,46,-37}, -{61,46,-36}, -{61,46,-35}, -{61,46,-34}, -{61,46,-33}, -{61,46,-32}, -{61,46,-31}, -{61,46,-30}, -{61,46,-29}, -{61,46,-28}, -{61,46,-27}, -{61,46,-26}, -{61,46,-25}, -{61,46,-24}, -{61,46,-23}, -{61,46,-22}, -{61,46,-21}, -{61,46,-20}, -{61,46,-19}, -{61,46,-18}, -{61,46,-17}, -{61,46,-16}, -{61,46,-15}, -{61,46,-14}, -{61,46,-13}, -{61,46,-12}, -{61,46,-11}, -{61,46,-10}, -{61,46,-9}, -{61,46,-8}, -{61,46,-7}, -{61,46,-6}, -{61,46,-5}, -{61,46,-4}, -{61,46,-3}, -{61,46,-2}, -{61,46,-1}, -{61,46,0}, -{61,46,1}, -{61,46,2}, -{61,46,3}, -{61,46,4}, -{61,46,5}, -{61,46,6}, -{61,46,7}, -{61,46,8}, -{61,46,9}, -{61,46,10}, -{61,46,11}, -{61,46,12}, -{61,46,13}, -{61,46,14}, -{61,46,15}, -{61,46,16}, -{61,46,17}, -{61,46,18}, -{61,46,19}, -{61,46,20}, -{61,46,21}, -{61,46,22}, -{61,46,23}, -{61,46,24}, -{61,46,25}, -{61,46,26}, -{61,46,27}, -{61,46,28}, -{61,46,29}, -{61,46,30}, -{61,46,31}, -{61,46,32}, -{61,46,33}, -{61,46,34}, -{61,46,35}, -{61,46,36}, -{61,46,37}, -{61,46,38}, -{61,46,39}, -{61,46,40}, -{61,46,41}, -{61,46,42}, -{61,46,43}, -{61,46,44}, -{61,46,45}, -{61,46,46}, -{61,46,47}, -{61,46,48}, -{61,46,49}, -{61,46,50}, -{61,46,51}, -{61,46,52}, -{61,46,53}, -{61,46,54}, -{61,46,55}, -{61,46,56}, -{61,46,57}, -{61,46,58}, -{61,46,59}, -{61,46,60}, -{61,46,61}, -{61,46,62}, -{61,46,63}, -{61,46,64}, -{61,46,65}, -{61,46,66}, -{61,46,67}, -{61,46,68}, -{61,46,69}, -{61,47,-60}, -{61,47,-59}, -{61,47,-58}, -{61,47,-57}, -{61,47,-56}, -{61,47,-55}, -{61,47,-54}, -{61,47,-53}, -{61,47,-52}, -{61,47,-51}, -{61,47,-50}, -{61,47,-49}, -{61,47,-48}, -{61,47,-47}, -{61,47,-46}, -{61,47,-45}, -{61,47,-44}, -{61,47,-43}, -{61,47,-42}, -{61,47,-41}, -{61,47,-40}, -{61,47,-39}, -{61,47,-38}, -{61,47,-37}, -{61,47,-36}, -{61,47,-35}, -{61,47,-34}, -{61,47,-33}, -{61,47,-32}, -{61,47,-31}, -{61,47,-30}, -{61,47,-29}, -{61,47,-28}, -{61,47,-27}, -{61,47,-26}, -{61,47,-25}, -{61,47,-24}, -{61,47,-23}, -{61,47,-22}, -{61,47,-21}, -{61,47,-20}, -{61,47,-19}, -{61,47,-18}, -{61,47,-17}, -{61,47,-16}, -{61,47,-15}, -{61,47,-14}, -{61,47,-13}, -{61,47,-12}, -{61,47,-11}, -{61,47,-10}, -{61,47,-9}, -{61,47,-8}, -{61,47,-7}, -{61,47,-6}, -{61,47,-5}, -{61,47,-4}, -{61,47,-3}, -{61,47,-2}, -{61,47,-1}, -{61,47,0}, -{61,47,1}, -{61,47,2}, -{61,47,3}, -{61,47,4}, -{61,47,5}, -{61,47,6}, -{61,47,7}, -{61,47,8}, -{61,47,9}, -{61,47,10}, -{61,47,11}, -{61,47,12}, -{61,47,13}, -{61,47,14}, -{61,47,15}, -{61,47,16}, -{61,47,17}, -{61,47,18}, -{61,47,19}, -{61,47,20}, -{61,47,21}, -{61,47,22}, -{61,47,23}, -{61,47,24}, -{61,47,25}, -{61,47,26}, -{61,47,27}, -{61,47,28}, -{61,47,29}, -{61,47,30}, -{61,47,31}, -{61,47,32}, -{61,47,33}, -{61,47,34}, -{61,47,35}, -{61,47,36}, -{61,47,37}, -{61,47,38}, -{61,47,39}, -{61,47,40}, -{61,47,41}, -{61,47,42}, -{61,47,43}, -{61,47,44}, -{61,47,45}, -{61,47,46}, -{61,47,47}, -{61,47,48}, -{61,47,49}, -{61,47,50}, -{61,47,51}, -{61,47,52}, -{61,47,53}, -{61,47,54}, -{61,47,55}, -{61,47,56}, -{61,47,57}, -{61,47,58}, -{61,47,59}, -{61,47,60}, -{61,47,61}, -{61,47,62}, -{61,47,63}, -{61,47,64}, -{61,47,65}, -{61,47,66}, -{61,47,67}, -{61,47,68}, -{61,47,69}, -{61,48,-60}, -{61,48,-59}, -{61,48,-58}, -{61,48,-57}, -{61,48,-56}, -{61,48,-55}, -{61,48,-54}, -{61,48,-53}, -{61,48,-52}, -{61,48,-51}, -{61,48,-50}, -{61,48,-49}, -{61,48,-48}, -{61,48,-47}, -{61,48,-46}, -{61,48,-45}, -{61,48,-44}, -{61,48,-43}, -{61,48,-42}, -{61,48,-41}, -{61,48,-40}, -{61,48,-39}, -{61,48,-38}, -{61,48,-37}, -{61,48,-36}, -{61,48,-35}, -{61,48,-34}, -{61,48,-33}, -{61,48,-32}, -{61,48,-31}, -{61,48,-30}, -{61,48,-29}, -{61,48,-28}, -{61,48,-27}, -{61,48,-26}, -{61,48,-25}, -{61,48,-24}, -{61,48,-23}, -{61,48,-22}, -{61,48,-21}, -{61,48,-20}, -{61,48,-19}, -{61,48,-18}, -{61,48,-17}, -{61,48,-16}, -{61,48,-15}, -{61,48,-14}, -{61,48,-13}, -{61,48,-12}, -{61,48,-11}, -{61,48,-10}, -{61,48,-9}, -{61,48,-8}, -{61,48,-7}, -{61,48,-6}, -{61,48,-5}, -{61,48,-4}, -{61,48,-3}, -{61,48,-2}, -{61,48,-1}, -{61,48,0}, -{61,48,1}, -{61,48,2}, -{61,48,3}, -{61,48,4}, -{61,48,5}, -{61,48,6}, -{61,48,7}, -{61,48,8}, -{61,48,9}, -{61,48,10}, -{61,48,11}, -{61,48,12}, -{61,48,13}, -{61,48,14}, -{61,48,15}, -{61,48,16}, -{61,48,17}, -{61,48,18}, -{61,48,19}, -{61,48,20}, -{61,48,21}, -{61,48,22}, -{61,48,23}, -{61,48,24}, -{61,48,25}, -{61,48,26}, -{61,48,27}, -{61,48,28}, -{61,48,29}, -{61,48,30}, -{61,48,31}, -{61,48,32}, -{61,48,33}, -{61,48,34}, -{61,48,35}, -{61,48,36}, -{61,48,37}, -{61,48,38}, -{61,48,39}, -{61,48,40}, -{61,48,41}, -{61,48,42}, -{61,48,43}, -{61,48,44}, -{61,48,45}, -{61,48,46}, -{61,48,47}, -{61,48,48}, -{61,48,49}, -{61,48,50}, -{61,48,51}, -{61,48,52}, -{61,48,53}, -{61,48,54}, -{61,48,55}, -{61,48,56}, -{61,48,57}, -{61,48,58}, -{61,48,59}, -{61,48,60}, -{61,48,61}, -{61,48,62}, -{61,48,63}, -{61,48,64}, -{61,48,65}, -{61,48,66}, -{61,48,67}, -{61,48,68}, -{61,48,69}, -{61,49,-60}, -{61,49,-59}, -{61,49,-58}, -{61,49,-57}, -{61,49,-56}, -{61,49,-55}, -{61,49,-54}, -{61,49,-53}, -{61,49,-52}, -{61,49,-51}, -{61,49,-50}, -{61,49,-49}, -{61,49,-48}, -{61,49,-47}, -{61,49,-46}, -{61,49,-45}, -{61,49,-44}, -{61,49,-43}, -{61,49,-42}, -{61,49,-41}, -{61,49,-40}, -{61,49,-39}, -{61,49,-38}, -{61,49,-37}, -{61,49,-36}, -{61,49,-35}, -{61,49,-34}, -{61,49,-33}, -{61,49,-32}, -{61,49,-31}, -{61,49,-30}, -{61,49,-29}, -{61,49,-28}, -{61,49,-27}, -{61,49,-26}, -{61,49,-25}, -{61,49,-24}, -{61,49,-23}, -{61,49,-22}, -{61,49,-21}, -{61,49,-20}, -{61,49,-19}, -{61,49,-18}, -{61,49,-17}, -{61,49,-16}, -{61,49,-15}, -{61,49,-14}, -{61,49,-13}, -{61,49,-12}, -{61,49,-11}, -{61,49,-10}, -{61,49,-9}, -{61,49,-8}, -{61,49,-7}, -{61,49,-6}, -{61,49,-5}, -{61,49,-4}, -{61,49,-3}, -{61,49,-2}, -{61,49,-1}, -{61,49,0}, -{61,49,1}, -{61,49,2}, -{61,49,3}, -{61,49,4}, -{61,49,5}, -{61,49,6}, -{61,49,7}, -{61,49,8}, -{61,49,9}, -{61,49,10}, -{61,49,11}, -{61,49,12}, -{61,49,13}, -{61,49,14}, -{61,49,15}, -{61,49,16}, -{61,49,17}, -{61,49,18}, -{61,49,19}, -{61,49,20}, -{61,49,21}, -{61,49,22}, -{61,49,23}, -{61,49,24}, -{61,49,25}, -{61,49,26}, -{61,49,27}, -{61,49,28}, -{61,49,29}, -{61,49,30}, -{61,49,31}, -{61,49,32}, -{61,49,33}, -{61,49,34}, -{61,49,35}, -{61,49,36}, -{61,49,37}, -{61,49,38}, -{61,49,39}, -{61,49,40}, -{61,49,41}, -{61,49,42}, -{61,49,43}, -{61,49,44}, -{61,49,45}, -{61,49,46}, -{61,49,47}, -{61,49,48}, -{61,49,49}, -{61,49,50}, -{61,49,51}, -{61,49,52}, -{61,49,53}, -{61,49,54}, -{61,49,55}, -{61,49,56}, -{61,49,57}, -{61,49,58}, -{61,49,59}, -{61,49,60}, -{61,49,61}, -{61,49,62}, -{61,49,63}, -{61,49,64}, -{61,49,65}, -{61,49,66}, -{61,49,67}, -{61,49,68}, -{61,49,69}, -{61,50,-60}, -{61,50,-59}, -{61,50,-58}, -{61,50,-57}, -{61,50,-56}, -{61,50,-55}, -{61,50,-54}, -{61,50,-53}, -{61,50,-52}, -{61,50,-51}, -{61,50,-50}, -{61,50,-49}, -{61,50,-48}, -{61,50,-47}, -{61,50,-46}, -{61,50,-45}, -{61,50,-44}, -{61,50,-43}, -{61,50,-42}, -{61,50,-41}, -{61,50,-40}, -{61,50,-39}, -{61,50,-38}, -{61,50,-37}, -{61,50,-36}, -{61,50,-35}, -{61,50,-34}, -{61,50,-33}, -{61,50,-32}, -{61,50,-31}, -{61,50,-30}, -{61,50,-29}, -{61,50,-28}, -{61,50,-27}, -{61,50,-26}, -{61,50,-25}, -{61,50,-24}, -{61,50,-23}, -{61,50,-22}, -{61,50,-21}, -{61,50,-20}, -{61,50,-19}, -{61,50,-18}, -{61,50,-17}, -{61,50,-16}, -{61,50,-15}, -{61,50,-14}, -{61,50,-13}, -{61,50,-12}, -{61,50,-11}, -{61,50,-10}, -{61,50,-9}, -{61,50,-8}, -{61,50,-7}, -{61,50,-6}, -{61,50,-5}, -{61,50,-4}, -{61,50,-3}, -{61,50,-2}, -{61,50,-1}, -{61,50,0}, -{61,50,1}, -{61,50,2}, -{61,50,3}, -{61,50,4}, -{61,50,5}, -{61,50,6}, -{61,50,7}, -{61,50,8}, -{61,50,9}, -{61,50,10}, -{61,50,11}, -{61,50,12}, -{61,50,13}, -{61,50,14}, -{61,50,15}, -{61,50,16}, -{61,50,17}, -{61,50,18}, -{61,50,19}, -{61,50,20}, -{61,50,21}, -{61,50,22}, -{61,50,23}, -{61,50,24}, -{61,50,25}, -{61,50,26}, -{61,50,27}, -{61,50,28}, -{61,50,29}, -{61,50,30}, -{61,50,31}, -{61,50,32}, -{61,50,33}, -{61,50,34}, -{61,50,35}, -{61,50,36}, -{61,50,37}, -{61,50,38}, -{61,50,39}, -{61,50,40}, -{61,50,41}, -{61,50,42}, -{61,50,43}, -{61,50,44}, -{61,50,45}, -{61,50,46}, -{61,50,47}, -{61,50,48}, -{61,50,49}, -{61,50,50}, -{61,50,51}, -{61,50,52}, -{61,50,53}, -{61,50,54}, -{61,50,55}, -{61,50,56}, -{61,50,57}, -{61,50,58}, -{61,50,59}, -{61,50,60}, -{61,50,61}, -{61,50,62}, -{61,50,63}, -{61,50,64}, -{61,50,65}, -{61,50,66}, -{61,50,67}, -{61,50,68}, -{61,50,69}, -{61,51,-60}, -{61,51,-59}, -{61,51,-58}, -{61,51,-57}, -{61,51,-56}, -{61,51,-55}, -{61,51,-54}, -{61,51,-53}, -{61,51,-52}, -{61,51,-51}, -{61,51,-50}, -{61,51,-49}, -{61,51,-48}, -{61,51,-47}, -{61,51,-46}, -{61,51,-45}, -{61,51,-44}, -{61,51,-43}, -{61,51,-42}, -{61,51,-41}, -{61,51,-40}, -{61,51,-39}, -{61,51,-38}, -{61,51,-37}, -{61,51,-36}, -{61,51,-35}, -{61,51,-34}, -{61,51,-33}, -{61,51,-32}, -{61,51,-31}, -{61,51,-30}, -{61,51,-29}, -{61,51,-28}, -{61,51,-27}, -{61,51,-26}, -{61,51,-25}, -{61,51,-24}, -{61,51,-23}, -{61,51,-22}, -{61,51,-21}, -{61,51,-20}, -{61,51,-19}, -{61,51,-18}, -{61,51,-17}, -{61,51,-16}, -{61,51,-15}, -{61,51,-14}, -{61,51,-13}, -{61,51,-12}, -{61,51,-11}, -{61,51,-10}, -{61,51,-9}, -{61,51,-8}, -{61,51,-7}, -{61,51,-6}, -{61,51,-5}, -{61,51,-4}, -{61,51,-3}, -{61,51,-2}, -{61,51,-1}, -{61,51,0}, -{61,51,1}, -{61,51,2}, -{61,51,3}, -{61,51,4}, -{61,51,5}, -{61,51,6}, -{61,51,7}, -{61,51,8}, -{61,51,9}, -{61,51,10}, -{61,51,11}, -{61,51,12}, -{61,51,13}, -{61,51,14}, -{61,51,15}, -{61,51,16}, -{61,51,17}, -{61,51,18}, -{61,51,19}, -{61,51,20}, -{61,51,21}, -{61,51,22}, -{61,51,23}, -{61,51,24}, -{61,51,25}, -{61,51,26}, -{61,51,27}, -{61,51,28}, -{61,51,29}, -{61,51,30}, -{61,51,31}, -{61,51,32}, -{61,51,33}, -{61,51,34}, -{61,51,35}, -{61,51,36}, -{61,51,37}, -{61,51,38}, -{61,51,39}, -{61,51,40}, -{61,51,41}, -{61,51,42}, -{61,51,43}, -{61,51,44}, -{61,51,45}, -{61,51,46}, -{61,51,47}, -{61,51,48}, -{61,51,49}, -{61,51,50}, -{61,51,51}, -{61,51,52}, -{61,51,53}, -{61,51,54}, -{61,51,55}, -{61,51,56}, -{61,51,57}, -{61,51,58}, -{61,51,59}, -{61,51,60}, -{61,51,61}, -{61,51,62}, -{61,51,63}, -{61,51,64}, -{61,51,65}, -{61,51,66}, -{61,51,67}, -{61,51,68}, -{61,51,69}, -{61,51,70}, -{61,52,-60}, -{61,52,-59}, -{61,52,-58}, -{61,52,-57}, -{61,52,-56}, -{61,52,-55}, -{61,52,-54}, -{61,52,-53}, -{61,52,-52}, -{61,52,-51}, -{61,52,-50}, -{61,52,-49}, -{61,52,-48}, -{61,52,-47}, -{61,52,-46}, -{61,52,-45}, -{61,52,-44}, -{61,52,-43}, -{61,52,-42}, -{61,52,-41}, -{61,52,-40}, -{61,52,-39}, -{61,52,-38}, -{61,52,-37}, -{61,52,-36}, -{61,52,-35}, -{61,52,-34}, -{61,52,-33}, -{61,52,-32}, -{61,52,-31}, -{61,52,-30}, -{61,52,-29}, -{61,52,-28}, -{61,52,-27}, -{61,52,-26}, -{61,52,-25}, -{61,52,-24}, -{61,52,-23}, -{61,52,-22}, -{61,52,-21}, -{61,52,-20}, -{61,52,-19}, -{61,52,-18}, -{61,52,-17}, -{61,52,-16}, -{61,52,-15}, -{61,52,-14}, -{61,52,-13}, -{61,52,-12}, -{61,52,-11}, -{61,52,-10}, -{61,52,-9}, -{61,52,-8}, -{61,52,-7}, -{61,52,-6}, -{61,52,-5}, -{61,52,-4}, -{61,52,-3}, -{61,52,-2}, -{61,52,-1}, -{61,52,0}, -{61,52,1}, -{61,52,2}, -{61,52,3}, -{61,52,4}, -{61,52,5}, -{61,52,6}, -{61,52,7}, -{61,52,8}, -{61,52,9}, -{61,52,10}, -{61,52,11}, -{61,52,12}, -{61,52,13}, -{61,52,14}, -{61,52,15}, -{61,52,16}, -{61,52,17}, -{61,52,18}, -{61,52,19}, -{61,52,20}, -{61,52,21}, -{61,52,22}, -{61,52,23}, -{61,52,24}, -{61,52,25}, -{61,52,26}, -{61,52,27}, -{61,52,28}, -{61,52,29}, -{61,52,30}, -{61,52,31}, -{61,52,32}, -{61,52,33}, -{61,52,34}, -{61,52,35}, -{61,52,36}, -{61,52,37}, -{61,52,38}, -{61,52,39}, -{61,52,40}, -{61,52,41}, -{61,52,42}, -{61,52,43}, -{61,52,44}, -{61,52,45}, -{61,52,46}, -{61,52,47}, -{61,52,48}, -{61,52,49}, -{61,52,50}, -{61,52,51}, -{61,52,52}, -{61,52,53}, -{61,52,54}, -{61,52,55}, -{61,52,56}, -{61,52,57}, -{61,52,58}, -{61,52,59}, -{61,52,60}, -{61,52,61}, -{61,52,62}, -{61,52,63}, -{61,52,64}, -{61,52,65}, -{61,52,66}, -{61,52,67}, -{61,52,68}, -{61,52,69}, -{61,52,70}, -{61,53,-60}, -{61,53,-59}, -{61,53,-58}, -{61,53,-57}, -{61,53,-56}, -{61,53,-55}, -{61,53,-54}, -{61,53,-53}, -{61,53,-52}, -{61,53,-51}, -{61,53,-50}, -{61,53,-49}, -{61,53,-48}, -{61,53,-47}, -{61,53,-46}, -{61,53,-45}, -{61,53,-44}, -{61,53,-43}, -{61,53,-42}, -{61,53,-41}, -{61,53,-40}, -{61,53,-39}, -{61,53,-38}, -{61,53,-37}, -{61,53,-36}, -{61,53,-35}, -{61,53,-34}, -{61,53,-33}, -{61,53,-32}, -{61,53,-31}, -{61,53,-30}, -{61,53,-29}, -{61,53,-28}, -{61,53,-27}, -{61,53,-26}, -{61,53,-25}, -{61,53,-24}, -{61,53,-23}, -{61,53,-22}, -{61,53,-21}, -{61,53,-20}, -{61,53,-19}, -{61,53,-18}, -{61,53,-17}, -{61,53,-16}, -{61,53,-15}, -{61,53,-14}, -{61,53,-13}, -{61,53,-12}, -{61,53,-11}, -{61,53,-10}, -{61,53,-9}, -{61,53,-8}, -{61,53,-7}, -{61,53,-6}, -{61,53,-5}, -{61,53,-4}, -{61,53,-3}, -{61,53,-2}, -{61,53,-1}, -{61,53,0}, -{61,53,1}, -{61,53,2}, -{61,53,3}, -{61,53,4}, -{61,53,5}, -{61,53,6}, -{61,53,7}, -{61,53,8}, -{61,53,9}, -{61,53,10}, -{61,53,11}, -{61,53,12}, -{61,53,13}, -{61,53,14}, -{61,53,15}, -{61,53,16}, -{61,53,17}, -{61,53,18}, -{61,53,19}, -{61,53,20}, -{61,53,21}, -{61,53,22}, -{61,53,23}, -{61,53,24}, -{61,53,25}, -{61,53,26}, -{61,53,27}, -{61,53,28}, -{61,53,29}, -{61,53,30}, -{61,53,31}, -{61,53,32}, -{61,53,33}, -{61,53,34}, -{61,53,35}, -{61,53,36}, -{61,53,37}, -{61,53,38}, -{61,53,39}, -{61,53,40}, -{61,53,41}, -{61,53,42}, -{61,53,43}, -{61,53,44}, -{61,53,45}, -{61,53,46}, -{61,53,47}, -{61,53,48}, -{61,53,49}, -{61,53,50}, -{61,53,51}, -{61,53,52}, -{61,53,53}, -{61,53,54}, -{61,53,55}, -{61,53,56}, -{61,53,57}, -{61,53,58}, -{61,53,59}, -{61,53,60}, -{61,53,61}, -{61,53,62}, -{61,53,63}, -{61,53,64}, -{61,53,65}, -{61,53,66}, -{61,53,67}, -{61,53,68}, -{61,53,69}, -{61,53,70}, -{61,54,-60}, -{61,54,-59}, -{61,54,-58}, -{61,54,-57}, -{61,54,-56}, -{61,54,-55}, -{61,54,-54}, -{61,54,-53}, -{61,54,-52}, -{61,54,-51}, -{61,54,-50}, -{61,54,-49}, -{61,54,-48}, -{61,54,-47}, -{61,54,-46}, -{61,54,-45}, -{61,54,-44}, -{61,54,-43}, -{61,54,-42}, -{61,54,-41}, -{61,54,-40}, -{61,54,-39}, -{61,54,-38}, -{61,54,-37}, -{61,54,-36}, -{61,54,-35}, -{61,54,-34}, -{61,54,-33}, -{61,54,-32}, -{61,54,-31}, -{61,54,-30}, -{61,54,-29}, -{61,54,-28}, -{61,54,-27}, -{61,54,-26}, -{61,54,-25}, -{61,54,-24}, -{61,54,-23}, -{61,54,-22}, -{61,54,-21}, -{61,54,-20}, -{61,54,-19}, -{61,54,-18}, -{61,54,-17}, -{61,54,-16}, -{61,54,-15}, -{61,54,-14}, -{61,54,-13}, -{61,54,-12}, -{61,54,-11}, -{61,54,-10}, -{61,54,-9}, -{61,54,-8}, -{61,54,-7}, -{61,54,-6}, -{61,54,-5}, -{61,54,-4}, -{61,54,-3}, -{61,54,-2}, -{61,54,-1}, -{61,54,0}, -{61,54,1}, -{61,54,2}, -{61,54,3}, -{61,54,4}, -{61,54,5}, -{61,54,6}, -{61,54,7}, -{61,54,8}, -{61,54,9}, -{61,54,10}, -{61,54,11}, -{61,54,12}, -{61,54,13}, -{61,54,14}, -{61,54,15}, -{61,54,16}, -{61,54,17}, -{61,54,18}, -{61,54,19}, -{61,54,20}, -{61,54,21}, -{61,54,22}, -{61,54,23}, -{61,54,24}, -{61,54,25}, -{61,54,26}, -{61,54,27}, -{61,54,28}, -{61,54,29}, -{61,54,30}, -{61,54,31}, -{61,54,32}, -{61,54,33}, -{61,54,34}, -{61,54,35}, -{61,54,36}, -{61,54,37}, -{61,54,38}, -{61,54,39}, -{61,54,40}, -{61,54,41}, -{61,54,42}, -{61,54,43}, -{61,54,44}, -{61,54,45}, -{61,54,46}, -{61,54,47}, -{61,54,48}, -{61,54,49}, -{61,54,50}, -{61,54,51}, -{61,54,52}, -{61,54,53}, -{61,54,54}, -{61,54,55}, -{61,54,56}, -{61,54,57}, -{61,54,58}, -{61,54,59}, -{61,54,60}, -{61,54,61}, -{61,54,62}, -{61,54,63}, -{61,54,64}, -{61,54,65}, -{61,54,66}, -{61,54,67}, -{61,54,68}, -{61,54,69}, -{61,54,70}, -{61,55,-60}, -{61,55,-59}, -{61,55,-58}, -{61,55,-57}, -{61,55,-56}, -{61,55,-55}, -{61,55,-54}, -{61,55,-53}, -{61,55,-52}, -{61,55,-51}, -{61,55,-50}, -{61,55,-49}, -{61,55,-48}, -{61,55,-47}, -{61,55,-46}, -{61,55,-45}, -{61,55,-44}, -{61,55,-43}, -{61,55,-42}, -{61,55,-41}, -{61,55,-40}, -{61,55,-39}, -{61,55,-38}, -{61,55,-37}, -{61,55,-36}, -{61,55,-35}, -{61,55,-34}, -{61,55,-33}, -{61,55,-32}, -{61,55,-31}, -{61,55,-30}, -{61,55,-29}, -{61,55,-28}, -{61,55,-27}, -{61,55,-26}, -{61,55,-25}, -{61,55,-24}, -{61,55,-23}, -{61,55,-22}, -{61,55,-21}, -{61,55,-20}, -{61,55,-19}, -{61,55,-18}, -{61,55,-17}, -{61,55,-16}, -{61,55,-15}, -{61,55,-14}, -{61,55,-13}, -{61,55,-12}, -{61,55,-11}, -{61,55,-10}, -{61,55,-9}, -{61,55,-8}, -{61,55,-7}, -{61,55,-6}, -{61,55,-5}, -{61,55,-4}, -{61,55,-3}, -{61,55,-2}, -{61,55,-1}, -{61,55,0}, -{61,55,1}, -{61,55,2}, -{61,55,3}, -{61,55,4}, -{61,55,5}, -{61,55,6}, -{61,55,7}, -{61,55,8}, -{61,55,9}, -{61,55,10}, -{61,55,11}, -{61,55,12}, -{61,55,13}, -{61,55,14}, -{61,55,15}, -{61,55,16}, -{61,55,17}, -{61,55,18}, -{61,55,19}, -{61,55,20}, -{61,55,21}, -{61,55,22}, -{61,55,23}, -{61,55,24}, -{61,55,25}, -{61,55,26}, -{61,55,27}, -{61,55,28}, -{61,55,29}, -{61,55,30}, -{61,55,31}, -{61,55,32}, -{61,55,33}, -{61,55,34}, -{61,55,35}, -{61,55,36}, -{61,55,37}, -{61,55,38}, -{61,55,39}, -{61,55,40}, -{61,55,41}, -{61,55,42}, -{61,55,43}, -{61,55,44}, -{61,55,45}, -{61,55,46}, -{61,55,47}, -{61,55,48}, -{61,55,49}, -{61,55,50}, -{61,55,51}, -{61,55,52}, -{61,55,53}, -{61,55,54}, -{61,55,55}, -{61,55,56}, -{61,55,57}, -{61,55,58}, -{61,55,59}, -{61,55,60}, -{61,55,61}, -{61,55,62}, -{61,55,63}, -{61,55,64}, -{61,55,65}, -{61,55,66}, -{61,55,67}, -{61,55,68}, -{61,55,69}, -{61,55,70}, -{61,56,-60}, -{61,56,-59}, -{61,56,-58}, -{61,56,-57}, -{61,56,-56}, -{61,56,-55}, -{61,56,-54}, -{61,56,-53}, -{61,56,-52}, -{61,56,-51}, -{61,56,-50}, -{61,56,-49}, -{61,56,-48}, -{61,56,-47}, -{61,56,-46}, -{61,56,-45}, -{61,56,-44}, -{61,56,-43}, -{61,56,-42}, -{61,56,-41}, -{61,56,-40}, -{61,56,-39}, -{61,56,-38}, -{61,56,-37}, -{61,56,-36}, -{61,56,-35}, -{61,56,-34}, -{61,56,-33}, -{61,56,-32}, -{61,56,-31}, -{61,56,-30}, -{61,56,-29}, -{61,56,-28}, -{61,56,-27}, -{61,56,-26}, -{61,56,-25}, -{61,56,-24}, -{61,56,-23}, -{61,56,-22}, -{61,56,-21}, -{61,56,-20}, -{61,56,-19}, -{61,56,-18}, -{61,56,-17}, -{61,56,-16}, -{61,56,-15}, -{61,56,-14}, -{61,56,-13}, -{61,56,-12}, -{61,56,-11}, -{61,56,-10}, -{61,56,-9}, -{61,56,-8}, -{61,56,-7}, -{61,56,-6}, -{61,56,-5}, -{61,56,-4}, -{61,56,-3}, -{61,56,-2}, -{61,56,-1}, -{61,56,0}, -{61,56,1}, -{61,56,2}, -{61,56,3}, -{61,56,4}, -{61,56,5}, -{61,56,6}, -{61,56,7}, -{61,56,8}, -{61,56,9}, -{61,56,10}, -{61,56,11}, -{61,56,12}, -{61,56,13}, -{61,56,14}, -{61,56,15}, -{61,56,16}, -{61,56,17}, -{61,56,18}, -{61,56,19}, -{61,56,20}, -{61,56,21}, -{61,56,22}, -{61,56,23}, -{61,56,24}, -{61,56,25}, -{61,56,26}, -{61,56,27}, -{61,56,28}, -{61,56,29}, -{61,56,30}, -{61,56,31}, -{61,56,32}, -{61,56,33}, -{61,56,34}, -{61,56,35}, -{61,56,36}, -{61,56,37}, -{61,56,38}, -{61,56,39}, -{61,56,40}, -{61,56,41}, -{61,56,42}, -{61,56,43}, -{61,56,44}, -{61,56,45}, -{61,56,46}, -{61,56,47}, -{61,56,48}, -{61,56,49}, -{61,56,50}, -{61,56,51}, -{61,56,52}, -{61,56,53}, -{61,56,54}, -{61,56,55}, -{61,56,56}, -{61,56,57}, -{61,56,58}, -{61,56,59}, -{61,56,60}, -{61,56,61}, -{61,56,62}, -{61,56,63}, -{61,56,64}, -{61,56,65}, -{61,56,66}, -{61,56,67}, -{61,56,68}, -{61,56,69}, -{61,56,70}, -{61,57,-60}, -{61,57,-59}, -{61,57,-58}, -{61,57,-57}, -{61,57,-56}, -{61,57,-55}, -{61,57,-54}, -{61,57,-53}, -{61,57,-52}, -{61,57,-51}, -{61,57,-50}, -{61,57,-49}, -{61,57,-48}, -{61,57,-47}, -{61,57,-46}, -{61,57,-45}, -{61,57,-44}, -{61,57,-43}, -{61,57,-42}, -{61,57,-41}, -{61,57,-40}, -{61,57,-39}, -{61,57,-38}, -{61,57,-37}, -{61,57,-36}, -{61,57,-35}, -{61,57,-34}, -{61,57,-33}, -{61,57,-32}, -{61,57,-31}, -{61,57,-30}, -{61,57,-29}, -{61,57,-28}, -{61,57,-27}, -{61,57,-26}, -{61,57,-25}, -{61,57,-24}, -{61,57,-23}, -{61,57,-22}, -{61,57,-21}, -{61,57,-20}, -{61,57,-19}, -{61,57,-18}, -{61,57,-17}, -{61,57,-16}, -{61,57,-15}, -{61,57,-14}, -{61,57,-13}, -{61,57,-12}, -{61,57,-11}, -{61,57,-10}, -{61,57,-9}, -{61,57,-8}, -{61,57,-7}, -{61,57,-6}, -{61,57,-5}, -{61,57,-4}, -{61,57,-3}, -{61,57,-2}, -{61,57,-1}, -{61,57,0}, -{61,57,1}, -{61,57,2}, -{61,57,3}, -{61,57,4}, -{61,57,5}, -{61,57,6}, -{61,57,7}, -{61,57,8}, -{61,57,9}, -{61,57,10}, -{61,57,11}, -{61,57,12}, -{61,57,13}, -{61,57,14}, -{61,57,15}, -{61,57,16}, -{61,57,17}, -{61,57,18}, -{61,57,19}, -{61,57,20}, -{61,57,21}, -{61,57,22}, -{61,57,23}, -{61,57,24}, -{61,57,25}, -{61,57,26}, -{61,57,27}, -{61,57,28}, -{61,57,29}, -{61,57,30}, -{61,57,31}, -{61,57,32}, -{61,57,33}, -{61,57,34}, -{61,57,35}, -{61,57,36}, -{61,57,37}, -{61,57,38}, -{61,57,39}, -{61,57,40}, -{61,57,41}, -{61,57,42}, -{61,57,43}, -{61,57,44}, -{61,57,45}, -{61,57,46}, -{61,57,47}, -{61,57,48}, -{61,57,49}, -{61,57,50}, -{61,57,51}, -{61,57,52}, -{61,57,53}, -{61,57,54}, -{61,57,55}, -{61,57,56}, -{61,57,57}, -{61,57,58}, -{61,57,59}, -{61,57,60}, -{61,57,61}, -{61,57,62}, -{61,57,63}, -{61,57,64}, -{61,57,65}, -{61,57,66}, -{61,57,67}, -{61,57,68}, -{61,57,69}, -{61,57,70}, -{61,58,-60}, -{61,58,-59}, -{61,58,-58}, -{61,58,-57}, -{61,58,-56}, -{61,58,-55}, -{61,58,-54}, -{61,58,-53}, -{61,58,-52}, -{61,58,-51}, -{61,58,-50}, -{61,58,-49}, -{61,58,-48}, -{61,58,-47}, -{61,58,-46}, -{61,58,-45}, -{61,58,-44}, -{61,58,-43}, -{61,58,-42}, -{61,58,-41}, -{61,58,-40}, -{61,58,-39}, -{61,58,-38}, -{61,58,-37}, -{61,58,-36}, -{61,58,-35}, -{61,58,-34}, -{61,58,-33}, -{61,58,-32}, -{61,58,-31}, -{61,58,-30}, -{61,58,-29}, -{61,58,-28}, -{61,58,-27}, -{61,58,-26}, -{61,58,-25}, -{61,58,-24}, -{61,58,-23}, -{61,58,-22}, -{61,58,-21}, -{61,58,-20}, -{61,58,-19}, -{61,58,-18}, -{61,58,-17}, -{61,58,-16}, -{61,58,-15}, -{61,58,-14}, -{61,58,-13}, -{61,58,-12}, -{61,58,-11}, -{61,58,-10}, -{61,58,-9}, -{61,58,-8}, -{61,58,-7}, -{61,58,-6}, -{61,58,-5}, -{61,58,-4}, -{61,58,-3}, -{61,58,-2}, -{61,58,-1}, -{61,58,0}, -{61,58,1}, -{61,58,2}, -{61,58,3}, -{61,58,4}, -{61,58,5}, -{61,58,6}, -{61,58,7}, -{61,58,8}, -{61,58,9}, -{61,58,10}, -{61,58,11}, -{61,58,12}, -{61,58,13}, -{61,58,14}, -{61,58,15}, -{61,58,16}, -{61,58,17}, -{61,58,18}, -{61,58,19}, -{61,58,20}, -{61,58,21}, -{61,58,22}, -{61,58,23}, -{61,58,24}, -{61,58,25}, -{61,58,26}, -{61,58,27}, -{61,58,28}, -{61,58,29}, -{61,58,30}, -{61,58,31}, -{61,58,32}, -{61,58,33}, -{61,58,34}, -{61,58,35}, -{61,58,36}, -{61,58,37}, -{61,58,38}, -{61,58,39}, -{61,58,40}, -{61,58,41}, -{61,58,42}, -{61,58,43}, -{61,58,44}, -{61,58,45}, -{61,58,46}, -{61,58,47}, -{61,58,48}, -{61,58,49}, -{61,58,50}, -{61,58,51}, -{61,58,52}, -{61,58,53}, -{61,58,54}, -{61,58,55}, -{61,58,56}, -{61,58,57}, -{61,58,58}, -{61,58,59}, -{61,58,60}, -{61,58,61}, -{61,58,62}, -{61,58,63}, -{61,58,64}, -{61,58,65}, -{61,58,66}, -{61,58,67}, -{61,58,68}, -{61,58,69}, -{61,58,70}, -{61,59,-60}, -{61,59,-59}, -{61,59,-58}, -{61,59,-57}, -{61,59,-56}, -{61,59,-55}, -{61,59,-54}, -{61,59,-53}, -{61,59,-52}, -{61,59,-51}, -{61,59,-50}, -{61,59,-49}, -{61,59,-48}, -{61,59,-47}, -{61,59,-46}, -{61,59,-45}, -{61,59,-44}, -{61,59,-43}, -{61,59,-42}, -{61,59,-41}, -{61,59,-40}, -{61,59,-39}, -{61,59,-38}, -{61,59,-37}, -{61,59,-36}, -{61,59,-35}, -{61,59,-34}, -{61,59,-33}, -{61,59,-32}, -{61,59,-31}, -{61,59,-30}, -{61,59,-29}, -{61,59,-28}, -{61,59,-27}, -{61,59,-26}, -{61,59,-25}, -{61,59,-24}, -{61,59,-23}, -{61,59,-22}, -{61,59,-21}, -{61,59,-20}, -{61,59,-19}, -{61,59,-18}, -{61,59,-17}, -{61,59,-16}, -{61,59,-15}, -{61,59,-14}, -{61,59,-13}, -{61,59,-12}, -{61,59,-11}, -{61,59,-10}, -{61,59,-9}, -{61,59,-8}, -{61,59,-7}, -{61,59,-6}, -{61,59,-5}, -{61,59,-4}, -{61,59,-3}, -{61,59,-2}, -{61,59,-1}, -{61,59,0}, -{61,59,1}, -{61,59,2}, -{61,59,3}, -{61,59,4}, -{61,59,5}, -{61,59,6}, -{61,59,7}, -{61,59,8}, -{61,59,9}, -{61,59,10}, -{61,59,11}, -{61,59,12}, -{61,59,13}, -{61,59,14}, -{61,59,15}, -{61,59,16}, -{61,59,17}, -{61,59,18}, -{61,59,19}, -{61,59,20}, -{61,59,21}, -{61,59,22}, -{61,59,23}, -{61,59,24}, -{61,59,25}, -{61,59,26}, -{61,59,27}, -{61,59,28}, -{61,59,29}, -{61,59,30}, -{61,59,31}, -{61,59,32}, -{61,59,33}, -{61,59,34}, -{61,59,35}, -{61,59,36}, -{61,59,37}, -{61,59,38}, -{61,59,39}, -{61,59,40}, -{61,59,41}, -{61,59,42}, -{61,59,43}, -{61,59,44}, -{61,59,45}, -{61,59,46}, -{61,59,47}, -{61,59,48}, -{61,59,49}, -{61,59,50}, -{61,59,51}, -{61,59,52}, -{61,59,53}, -{61,59,54}, -{61,59,55}, -{61,59,56}, -{61,59,57}, -{61,59,58}, -{61,59,59}, -{61,59,60}, -{61,59,61}, -{61,59,62}, -{61,59,63}, -{61,59,64}, -{61,59,65}, -{61,59,66}, -{61,60,-60}, -{61,60,-59}, -{61,60,-58}, -{61,60,-57}, -{61,60,-56}, -{61,60,-55}, -{61,60,-54}, -{61,60,-53}, -{61,60,-52}, -{61,60,-51}, -{61,60,-50}, -{61,60,-49}, -{61,60,-48}, -{61,60,-47}, -{61,60,-46}, -{61,60,-45}, -{61,60,-44}, -{61,60,-43}, -{61,60,-42}, -{61,60,-41}, -{61,60,-40}, -{61,60,-39}, -{61,60,-38}, -{61,60,-37}, -{61,60,-36}, -{61,60,-35}, -{61,60,-34}, -{61,60,-33}, -{61,60,-32}, -{61,60,-31}, -{61,60,-30}, -{61,60,-29}, -{61,60,-28}, -{61,60,-27}, -{61,60,-26}, -{61,60,-25}, -{61,60,-24}, -{61,60,-23}, -{61,60,-22}, -{61,60,-21}, -{61,60,-20}, -{61,60,-19}, -{61,60,-18}, -{61,60,-17}, -{61,60,-16}, -{61,60,-15}, -{61,60,-14}, -{61,60,-13}, -{61,60,-12}, -{61,60,-11}, -{61,60,-10}, -{61,60,-9}, -{61,60,-8}, -{61,60,-7}, -{61,60,-6}, -{61,60,-5}, -{61,60,-4}, -{61,60,-3}, -{61,60,-2}, -{61,60,-1}, -{61,60,0}, -{61,60,1}, -{61,60,2}, -{61,60,3}, -{61,60,4}, -{61,60,5}, -{61,60,6}, -{61,60,7}, -{61,60,8}, -{61,60,9}, -{61,60,10}, -{61,60,11}, -{61,60,12}, -{61,60,13}, -{61,60,14}, -{61,60,15}, -{61,60,16}, -{61,60,17}, -{61,60,18}, -{61,60,19}, -{61,60,20}, -{61,60,21}, -{61,60,22}, -{61,60,23}, -{61,60,24}, -{61,60,25}, -{61,60,26}, -{61,60,27}, -{61,60,28}, -{61,60,29}, -{61,60,30}, -{61,60,31}, -{61,60,32}, -{61,60,33}, -{61,60,34}, -{61,60,35}, -{61,60,36}, -{61,60,37}, -{61,60,38}, -{61,60,39}, -{61,60,40}, -{61,60,41}, -{61,60,42}, -{61,60,43}, -{61,60,44}, -{61,60,45}, -{61,60,46}, -{61,60,47}, -{61,60,48}, -{61,60,49}, -{61,60,50}, -{61,60,51}, -{61,60,52}, -{61,60,53}, -{61,60,54}, -{61,60,55}, -{61,61,-60}, -{61,61,-59}, -{61,61,-58}, -{61,61,-57}, -{61,61,-56}, -{61,61,-55}, -{61,61,-54}, -{61,61,-53}, -{61,61,-52}, -{61,61,-51}, -{61,61,-50}, -{61,61,-49}, -{61,61,-48}, -{61,61,-47}, -{61,61,-46}, -{61,61,-45}, -{61,61,-44}, -{61,61,-43}, -{61,61,-42}, -{61,61,-41}, -{61,61,-40}, -{61,61,-39}, -{61,61,-38}, -{61,61,-37}, -{61,61,-36}, -{61,61,-35}, -{61,61,-34}, -{61,61,-33}, -{61,61,-32}, -{61,61,-31}, -{61,61,-30}, -{61,61,-29}, -{61,61,-28}, -{61,61,-27}, -{61,61,-26}, -{61,61,-25}, -{61,61,-24}, -{61,61,-23}, -{61,61,-22}, -{61,61,-21}, -{61,61,-20}, -{61,61,-19}, -{61,61,-18}, -{61,61,-17}, -{61,61,-16}, -{61,61,-15}, -{61,61,-14}, -{61,61,-13}, -{61,61,-12}, -{61,61,-11}, -{61,61,-10}, -{61,61,-9}, -{61,61,-8}, -{61,61,-7}, -{61,61,-6}, -{61,61,-5}, -{61,61,-4}, -{61,61,-3}, -{61,61,-2}, -{61,61,-1}, -{61,61,0}, -{61,61,1}, -{61,61,2}, -{61,61,3}, -{61,61,4}, -{61,61,5}, -{61,61,6}, -{61,61,7}, -{61,61,8}, -{61,61,9}, -{61,61,10}, -{61,61,11}, -{61,61,12}, -{61,61,13}, -{61,61,14}, -{61,61,15}, -{61,61,16}, -{61,61,17}, -{61,61,18}, -{61,61,19}, -{61,61,20}, -{61,61,21}, -{61,61,22}, -{61,61,23}, -{61,61,24}, -{61,61,25}, -{61,61,26}, -{61,61,27}, -{61,61,28}, -{61,61,29}, -{61,61,30}, -{61,61,31}, -{61,61,32}, -{61,61,33}, -{61,61,34}, -{61,61,35}, -{61,61,36}, -{61,61,37}, -{61,61,38}, -{61,61,39}, -{61,61,40}, -{61,61,41}, -{61,61,42}, -{61,61,43}, -{61,61,44}, -{61,61,45}, -{61,61,46}, -{61,61,47}, -{61,62,-60}, -{61,62,-59}, -{61,62,-58}, -{61,62,-57}, -{61,62,-56}, -{61,62,-55}, -{61,62,-54}, -{61,62,-53}, -{61,62,-52}, -{61,62,-51}, -{61,62,-50}, -{61,62,-49}, -{61,62,-48}, -{61,62,-47}, -{61,62,-46}, -{61,62,-45}, -{61,62,-44}, -{61,62,-43}, -{61,62,-42}, -{61,62,-41}, -{61,62,-40}, -{61,62,-39}, -{61,62,-38}, -{61,62,-37}, -{61,62,-36}, -{61,62,-35}, -{61,62,-34}, -{61,62,-33}, -{61,62,-32}, -{61,62,-31}, -{61,62,-30}, -{61,62,-29}, -{61,62,-28}, -{61,62,-27}, -{61,62,-26}, -{61,62,-25}, -{61,62,-24}, -{61,62,-23}, -{61,62,-22}, -{61,62,-21}, -{61,62,-20}, -{61,62,-19}, -{61,62,-18}, -{61,62,-17}, -{61,62,-16}, -{61,62,-15}, -{61,62,-14}, -{61,62,-13}, -{61,62,-12}, -{61,62,-11}, -{61,62,-10}, -{61,62,-9}, -{61,62,-8}, -{61,62,-7}, -{61,62,-6}, -{61,62,-5}, -{61,62,-4}, -{61,62,-3}, -{61,62,-2}, -{61,62,-1}, -{61,62,0}, -{61,62,1}, -{61,62,2}, -{61,62,3}, -{61,62,4}, -{61,62,5}, -{61,62,6}, -{61,62,7}, -{61,62,8}, -{61,62,9}, -{61,62,10}, -{61,62,11}, -{61,62,12}, -{61,62,13}, -{61,62,14}, -{61,62,15}, -{61,62,16}, -{61,62,17}, -{61,62,18}, -{61,62,19}, -{61,62,20}, -{61,62,21}, -{61,62,22}, -{61,62,23}, -{61,62,24}, -{61,62,25}, -{61,62,26}, -{61,62,27}, -{61,62,28}, -{61,62,29}, -{61,62,30}, -{61,62,31}, -{61,62,32}, -{61,62,33}, -{61,62,34}, -{61,62,35}, -{61,62,36}, -{61,62,37}, -{61,62,38}, -{61,62,39}, -{61,62,40}, -{61,63,-60}, -{61,63,-59}, -{61,63,-58}, -{61,63,-57}, -{61,63,-56}, -{61,63,-55}, -{61,63,-54}, -{61,63,-53}, -{61,63,-52}, -{61,63,-51}, -{61,63,-50}, -{61,63,-49}, -{61,63,-48}, -{61,63,-47}, -{61,63,-46}, -{61,63,-45}, -{61,63,-44}, -{61,63,-43}, -{61,63,-42}, -{61,63,-41}, -{61,63,-40}, -{61,63,-39}, -{61,63,-38}, -{61,63,-37}, -{61,63,-36}, -{61,63,-35}, -{61,63,-34}, -{61,63,-33}, -{61,63,-32}, -{61,63,-31}, -{61,63,-30}, -{61,63,-29}, -{61,63,-28}, -{61,63,-27}, -{61,63,-26}, -{61,63,-25}, -{61,63,-24}, -{61,63,-23}, -{61,63,-22}, -{61,63,-21}, -{61,63,-20}, -{61,63,-19}, -{61,63,-18}, -{61,63,-17}, -{61,63,-16}, -{61,63,-15}, -{61,63,-14}, -{61,63,-13}, -{61,63,-12}, -{61,63,-11}, -{61,63,-10}, -{61,63,-9}, -{61,63,-8}, -{61,63,-7}, -{61,63,-6}, -{61,63,-5}, -{61,63,-4}, -{61,63,-3}, -{61,63,-2}, -{61,63,-1}, -{61,63,0}, -{61,63,1}, -{61,63,2}, -{61,63,3}, -{61,63,4}, -{61,63,5}, -{61,63,6}, -{61,63,7}, -{61,63,8}, -{61,63,9}, -{61,63,10}, -{61,63,11}, -{61,63,12}, -{61,63,13}, -{61,63,14}, -{61,63,15}, -{61,63,16}, -{61,63,17}, -{61,63,18}, -{61,63,19}, -{61,63,20}, -{61,63,21}, -{61,63,22}, -{61,63,23}, -{61,63,24}, -{61,63,25}, -{61,63,26}, -{61,63,27}, -{61,63,28}, -{61,63,29}, -{61,63,30}, -{61,63,31}, -{61,63,32}, -{61,63,33}, -{61,64,-60}, -{61,64,-59}, -{61,64,-58}, -{61,64,-57}, -{61,64,-56}, -{61,64,-55}, -{61,64,-54}, -{61,64,-53}, -{61,64,-52}, -{61,64,-51}, -{61,64,-50}, -{61,64,-49}, -{61,64,-48}, -{61,64,-47}, -{61,64,-46}, -{61,64,-45}, -{61,64,-44}, -{61,64,-43}, -{61,64,-42}, -{61,64,-41}, -{61,64,-40}, -{61,64,-39}, -{61,64,-38}, -{61,64,-37}, -{61,64,-36}, -{61,64,-35}, -{61,64,-34}, -{61,64,-33}, -{61,64,-32}, -{61,64,-31}, -{61,64,-30}, -{61,64,-29}, -{61,64,-28}, -{61,64,-27}, -{61,64,-26}, -{61,64,-25}, -{61,64,-24}, -{61,64,-23}, -{61,64,-22}, -{61,64,-21}, -{61,64,-20}, -{61,64,-19}, -{61,64,-18}, -{61,64,-17}, -{61,64,-16}, -{61,64,-15}, -{61,64,-14}, -{61,64,-13}, -{61,64,-12}, -{61,64,-11}, -{61,64,-10}, -{61,64,-9}, -{61,64,-8}, -{61,64,-7}, -{61,64,-6}, -{61,64,-5}, -{61,64,-4}, -{61,64,-3}, -{61,64,-2}, -{61,64,-1}, -{61,64,0}, -{61,64,1}, -{61,64,2}, -{61,64,3}, -{61,64,4}, -{61,64,5}, -{61,64,6}, -{61,64,7}, -{61,64,8}, -{61,64,9}, -{61,64,10}, -{61,64,11}, -{61,64,12}, -{61,64,13}, -{61,64,14}, -{61,64,15}, -{61,64,16}, -{61,64,17}, -{61,64,18}, -{61,64,19}, -{61,64,20}, -{61,64,21}, -{61,64,22}, -{61,64,23}, -{61,64,24}, -{61,64,25}, -{61,64,26}, -{61,64,27}, -{61,64,28}, -{61,65,-60}, -{61,65,-59}, -{61,65,-58}, -{61,65,-57}, -{61,65,-56}, -{61,65,-55}, -{61,65,-54}, -{61,65,-53}, -{61,65,-52}, -{61,65,-51}, -{61,65,-50}, -{61,65,-49}, -{61,65,-48}, -{61,65,-47}, -{61,65,-46}, -{61,65,-45}, -{61,65,-44}, -{61,65,-43}, -{61,65,-42}, -{61,65,-41}, -{61,65,-40}, -{61,65,-39}, -{61,65,-38}, -{61,65,-37}, -{61,65,-36}, -{61,65,-35}, -{61,65,-34}, -{61,65,-33}, -{61,65,-32}, -{61,65,-31}, -{61,65,-30}, -{61,65,-29}, -{61,65,-28}, -{61,65,-27}, -{61,65,-26}, -{61,65,-25}, -{61,65,-24}, -{61,65,-23}, -{61,65,-22}, -{61,65,-21}, -{61,65,-20}, -{61,65,-19}, -{61,65,-18}, -{61,65,-17}, -{61,65,-16}, -{61,65,-15}, -{61,65,-14}, -{61,65,-13}, -{61,65,-12}, -{61,65,-11}, -{61,65,-10}, -{61,65,-9}, -{61,65,-8}, -{61,65,-7}, -{61,65,-6}, -{61,65,-5}, -{61,65,-4}, -{61,65,-3}, -{61,65,-2}, -{61,65,-1}, -{61,65,0}, -{61,65,1}, -{61,65,2}, -{61,65,3}, -{61,65,4}, -{61,65,5}, -{61,65,6}, -{61,65,7}, -{61,65,8}, -{61,65,9}, -{61,65,10}, -{61,65,11}, -{61,65,12}, -{61,65,13}, -{61,65,14}, -{61,65,15}, -{61,65,16}, -{61,65,17}, -{61,65,18}, -{61,65,19}, -{61,65,20}, -{61,65,21}, -{61,65,22}, -{61,65,23}, -{61,66,-60}, -{61,66,-59}, -{61,66,-58}, -{61,66,-57}, -{61,66,-56}, -{61,66,-55}, -{61,66,-54}, -{61,66,-53}, -{61,66,-52}, -{61,66,-51}, -{61,66,-50}, -{61,66,-49}, -{61,66,-48}, -{61,66,-47}, -{61,66,-46}, -{61,66,-45}, -{61,66,-44}, -{61,66,-43}, -{61,66,-42}, -{61,66,-41}, -{61,66,-40}, -{61,66,-39}, -{61,66,-38}, -{61,66,-37}, -{61,66,-36}, -{61,66,-35}, -{61,66,-34}, -{61,66,-33}, -{61,66,-32}, -{61,66,-31}, -{61,66,-30}, -{61,66,-29}, -{61,66,-28}, -{61,66,-27}, -{61,66,-26}, -{61,66,-25}, -{61,66,-24}, -{61,66,-23}, -{61,66,-22}, -{61,66,-21}, -{61,66,-20}, -{61,66,-19}, -{61,66,-18}, -{61,66,-17}, -{61,66,-16}, -{61,66,-15}, -{61,66,-14}, -{61,66,-13}, -{61,66,-12}, -{61,66,-11}, -{61,66,-10}, -{61,66,-9}, -{61,66,-8}, -{61,66,-7}, -{61,66,-6}, -{61,66,-5}, -{61,66,-4}, -{61,66,-3}, -{61,66,-2}, -{61,66,-1}, -{61,66,0}, -{61,66,1}, -{61,66,2}, -{61,66,3}, -{61,66,4}, -{61,66,5}, -{61,66,6}, -{61,66,7}, -{61,66,8}, -{61,66,9}, -{61,66,10}, -{61,66,11}, -{61,66,12}, -{61,66,13}, -{61,66,14}, -{61,66,15}, -{61,66,16}, -{61,66,17}, -{61,66,18}, -{61,67,-60}, -{61,67,-59}, -{61,67,-58}, -{61,67,-57}, -{61,67,-56}, -{61,67,-55}, -{61,67,-54}, -{61,67,-53}, -{61,67,-52}, -{61,67,-51}, -{61,67,-50}, -{61,67,-49}, -{61,67,-48}, -{61,67,-47}, -{61,67,-46}, -{61,67,-45}, -{61,67,-44}, -{61,67,-43}, -{61,67,-42}, -{61,67,-41}, -{61,67,-40}, -{61,67,-39}, -{61,67,-38}, -{61,67,-37}, -{61,67,-36}, -{61,67,-35}, -{61,67,-34}, -{61,67,-33}, -{61,67,-32}, -{61,67,-31}, -{61,67,-30}, -{61,67,-29}, -{61,67,-28}, -{61,67,-27}, -{61,67,-26}, -{61,67,-25}, -{61,67,-24}, -{61,67,-23}, -{61,67,-22}, -{61,67,-21}, -{61,67,-20}, -{61,67,-19}, -{61,67,-18}, -{61,67,-17}, -{61,67,-16}, -{61,67,-15}, -{61,67,-14}, -{61,67,-13}, -{61,67,-12}, -{61,67,-11}, -{61,67,-10}, -{61,67,-9}, -{61,67,-8}, -{61,67,-7}, -{61,67,-6}, -{61,67,-5}, -{61,67,-4}, -{61,67,-3}, -{61,67,-2}, -{61,67,-1}, -{61,67,0}, -{61,67,1}, -{61,67,2}, -{61,67,3}, -{61,67,4}, -{61,67,5}, -{61,67,6}, -{61,67,7}, -{61,67,8}, -{61,67,9}, -{61,67,10}, -{61,67,11}, -{61,67,12}, -{61,67,13}, -{61,67,14}, -{61,68,-60}, -{61,68,-59}, -{61,68,-58}, -{61,68,-57}, -{61,68,-56}, -{61,68,-55}, -{61,68,-54}, -{61,68,-53}, -{61,68,-52}, -{61,68,-51}, -{61,68,-50}, -{61,68,-49}, -{61,68,-48}, -{61,68,-47}, -{61,68,-46}, -{61,68,-45}, -{61,68,-44}, -{61,68,-43}, -{61,68,-42}, -{61,68,-41}, -{61,68,-40}, -{61,68,-39}, -{61,68,-38}, -{61,68,-37}, -{61,68,-36}, -{61,68,-35}, -{61,68,-34}, -{61,68,-33}, -{61,68,-32}, -{61,68,-31}, -{61,68,-30}, -{61,68,-29}, -{61,68,-28}, -{61,68,-27}, -{61,68,-26}, -{61,68,-25}, -{61,68,-24}, -{61,68,-23}, -{61,68,-22}, -{61,68,-21}, -{61,68,-20}, -{61,68,-19}, -{61,68,-18}, -{61,68,-17}, -{61,68,-16}, -{61,68,-15}, -{61,68,-14}, -{61,68,-13}, -{61,68,-12}, -{61,68,-11}, -{61,68,-10}, -{61,68,-9}, -{61,68,-8}, -{61,68,-7}, -{61,68,-6}, -{61,68,-5}, -{61,68,-4}, -{61,68,-3}, -{61,68,-2}, -{61,68,-1}, -{61,68,0}, -{61,68,1}, -{61,68,2}, -{61,68,3}, -{61,68,4}, -{61,68,5}, -{61,68,6}, -{61,68,7}, -{61,68,8}, -{61,68,9}, -{61,68,10}, -{61,69,-60}, -{61,69,-59}, -{61,69,-58}, -{61,69,-57}, -{61,69,-56}, -{61,69,-55}, -{61,69,-54}, -{61,69,-53}, -{61,69,-52}, -{61,69,-51}, -{61,69,-50}, -{61,69,-49}, -{61,69,-48}, -{61,69,-47}, -{61,69,-46}, -{61,69,-45}, -{61,69,-44}, -{61,69,-43}, -{61,69,-42}, -{61,69,-41}, -{61,69,-40}, -{61,69,-39}, -{61,69,-38}, -{61,69,-37}, -{61,69,-36}, -{61,69,-35}, -{61,69,-34}, -{61,69,-33}, -{61,69,-32}, -{61,69,-31}, -{61,69,-30}, -{61,69,-29}, -{61,69,-28}, -{61,69,-27}, -{61,69,-26}, -{61,69,-25}, -{61,69,-24}, -{61,69,-23}, -{61,69,-22}, -{61,69,-21}, -{61,69,-20}, -{61,69,-19}, -{61,69,-18}, -{61,69,-17}, -{61,69,-16}, -{61,69,-15}, -{61,69,-14}, -{61,69,-13}, -{61,69,-12}, -{61,69,-11}, -{61,69,-10}, -{61,69,-9}, -{61,69,-8}, -{61,69,-7}, -{61,69,-6}, -{61,69,-5}, -{61,69,-4}, -{61,69,-3}, -{61,69,-2}, -{61,69,-1}, -{61,69,0}, -{61,69,1}, -{61,69,2}, -{61,69,3}, -{61,69,4}, -{61,69,5}, -{61,69,6}, -{61,70,-60}, -{61,70,-59}, -{61,70,-58}, -{61,70,-57}, -{61,70,-56}, -{61,70,-55}, -{61,70,-54}, -{61,70,-53}, -{61,70,-52}, -{61,70,-51}, -{61,70,-50}, -{61,70,-49}, -{61,70,-48}, -{61,70,-47}, -{61,70,-46}, -{61,70,-45}, -{61,70,-44}, -{61,70,-43}, -{61,70,-42}, -{61,70,-41}, -{61,70,-40}, -{61,70,-39}, -{61,70,-38}, -{61,70,-37}, -{61,70,-36}, -{61,70,-35}, -{61,70,-34}, -{61,70,-33}, -{61,70,-32}, -{61,70,-31}, -{61,70,-30}, -{61,70,-29}, -{61,70,-28}, -{61,70,-27}, -{61,70,-26}, -{61,70,-25}, -{61,70,-24}, -{61,70,-23}, -{61,70,-22}, -{61,70,-21}, -{61,70,-20}, -{61,70,-19}, -{61,70,-18}, -{61,70,-17}, -{61,70,-16}, -{61,70,-15}, -{61,70,-14}, -{61,70,-13}, -{61,70,-12}, -{61,70,-11}, -{61,70,-10}, -{61,70,-9}, -{61,70,-8}, -{61,70,-7}, -{61,70,-6}, -{61,70,-5}, -{61,70,-4}, -{61,70,-3}, -{61,70,-2}, -{61,70,-1}, -{61,70,0}, -{61,70,1}, -{61,70,2}, -{61,70,3}, -{61,71,-60}, -{61,71,-59}, -{61,71,-58}, -{61,71,-57}, -{61,71,-56}, -{61,71,-55}, -{61,71,-54}, -{61,71,-53}, -{61,71,-52}, -{61,71,-51}, -{61,71,-50}, -{61,71,-49}, -{61,71,-48}, -{61,71,-47}, -{61,71,-46}, -{61,71,-45}, -{61,71,-44}, -{61,71,-43}, -{61,71,-42}, -{61,71,-41}, -{61,71,-40}, -{61,71,-39}, -{61,71,-38}, -{61,71,-37}, -{61,71,-36}, -{61,71,-35}, -{61,71,-34}, -{61,71,-33}, -{61,71,-32}, -{61,71,-31}, -{61,71,-30}, -{61,71,-29}, -{61,71,-28}, -{61,71,-27}, -{61,71,-26}, -{61,71,-25}, -{61,71,-24}, -{61,71,-23}, -{61,71,-22}, -{61,71,-21}, -{61,71,-20}, -{61,71,-19}, -{61,71,-18}, -{61,71,-17}, -{61,71,-16}, -{61,71,-15}, -{61,71,-14}, -{61,71,-13}, -{61,71,-12}, -{61,71,-11}, -{61,71,-10}, -{61,71,-9}, -{61,71,-8}, -{61,71,-7}, -{61,71,-6}, -{61,71,-5}, -{61,71,-4}, -{61,71,-3}, -{61,71,-2}, -{61,71,-1}, -{61,72,-60}, -{61,72,-59}, -{61,72,-58}, -{61,72,-57}, -{61,72,-56}, -{61,72,-55}, -{61,72,-54}, -{61,72,-53}, -{61,72,-52}, -{61,72,-51}, -{61,72,-50}, -{61,72,-49}, -{61,72,-48}, -{61,72,-47}, -{61,72,-46}, -{61,72,-45}, -{61,72,-44}, -{61,72,-43}, -{61,72,-42}, -{61,72,-41}, -{61,72,-40}, -{61,72,-39}, -{61,72,-38}, -{61,72,-37}, -{61,72,-36}, -{61,72,-35}, -{61,72,-34}, -{61,72,-33}, -{61,72,-32}, -{61,72,-31}, -{61,72,-30}, -{61,72,-29}, -{61,72,-28}, -{61,72,-27}, -{61,72,-26}, -{61,72,-25}, -{61,72,-24}, -{61,72,-23}, -{61,72,-22}, -{61,72,-21}, -{61,72,-20}, -{61,72,-19}, -{61,72,-18}, -{61,72,-17}, -{61,72,-16}, -{61,72,-15}, -{61,72,-14}, -{61,72,-13}, -{61,72,-12}, -{61,72,-11}, -{61,72,-10}, -{61,72,-9}, -{61,72,-8}, -{61,72,-7}, -{61,72,-6}, -{61,72,-5}, -{61,72,-4}, -{61,73,-60}, -{61,73,-59}, -{61,73,-58}, -{61,73,-57}, -{61,73,-56}, -{61,73,-55}, -{61,73,-54}, -{61,73,-53}, -{61,73,-52}, -{61,73,-51}, -{61,73,-50}, -{61,73,-49}, -{61,73,-48}, -{61,73,-47}, -{61,73,-46}, -{61,73,-45}, -{61,73,-44}, -{61,73,-43}, -{61,73,-42}, -{61,73,-41}, -{61,73,-40}, -{61,73,-39}, -{61,73,-38}, -{61,73,-37}, -{61,73,-36}, -{61,73,-35}, -{61,73,-34}, -{61,73,-33}, -{61,73,-32}, -{61,73,-31}, -{61,73,-30}, -{61,73,-29}, -{61,73,-28}, -{61,73,-27}, -{61,73,-26}, -{61,73,-25}, -{61,73,-24}, -{61,73,-23}, -{61,73,-22}, -{61,73,-21}, -{61,73,-20}, -{61,73,-19}, -{61,73,-18}, -{61,73,-17}, -{61,73,-16}, -{61,73,-15}, -{61,73,-14}, -{61,73,-13}, -{61,73,-12}, -{61,73,-11}, -{61,73,-10}, -{61,73,-9}, -{61,73,-8}, -{61,73,-7}, -{61,74,-60}, -{61,74,-59}, -{61,74,-58}, -{61,74,-57}, -{61,74,-56}, -{61,74,-55}, -{61,74,-54}, -{61,74,-53}, -{61,74,-52}, -{61,74,-51}, -{61,74,-50}, -{61,74,-49}, -{61,74,-48}, -{61,74,-47}, -{61,74,-46}, -{61,74,-45}, -{61,74,-44}, -{61,74,-43}, -{61,74,-42}, -{61,74,-41}, -{61,74,-40}, -{61,74,-39}, -{61,74,-38}, -{61,74,-37}, -{61,74,-36}, -{61,74,-35}, -{61,74,-34}, -{61,74,-33}, -{61,74,-32}, -{61,74,-31}, -{61,74,-30}, -{61,74,-29}, -{61,74,-28}, -{61,74,-27}, -{61,74,-26}, -{61,74,-25}, -{61,74,-24}, -{61,74,-23}, -{61,74,-22}, -{61,74,-21}, -{61,74,-20}, -{61,74,-19}, -{61,74,-18}, -{61,74,-17}, -{61,74,-16}, -{61,74,-15}, -{61,74,-14}, -{61,74,-13}, -{61,74,-12}, -{61,74,-11}, -{61,74,-10}, -{61,75,-60}, -{61,75,-59}, -{61,75,-58}, -{61,75,-57}, -{61,75,-56}, -{61,75,-55}, -{61,75,-54}, -{61,75,-53}, -{61,75,-52}, -{61,75,-51}, -{61,75,-50}, -{61,75,-49}, -{61,75,-48}, -{61,75,-47}, -{61,75,-46}, -{61,75,-45}, -{61,75,-44}, -{61,75,-43}, -{61,75,-42}, -{61,75,-41}, -{61,75,-40}, -{61,75,-39}, -{61,75,-38}, -{61,75,-37}, -{61,75,-36}, -{61,75,-35}, -{61,75,-34}, -{61,75,-33}, -{61,75,-32}, -{61,75,-31}, -{61,75,-30}, -{61,75,-29}, -{61,75,-28}, -{61,75,-27}, -{61,75,-26}, -{61,75,-25}, -{61,75,-24}, -{61,75,-23}, -{61,75,-22}, -{61,75,-21}, -{61,75,-20}, -{61,75,-19}, -{61,75,-18}, -{61,75,-17}, -{61,75,-16}, -{61,75,-15}, -{61,75,-14}, -{61,75,-13}, -{61,76,-60}, -{61,76,-59}, -{61,76,-58}, -{61,76,-57}, -{61,76,-56}, -{61,76,-55}, -{61,76,-54}, -{61,76,-53}, -{61,76,-52}, -{61,76,-51}, -{61,76,-50}, -{61,76,-49}, -{61,76,-48}, -{61,76,-47}, -{61,76,-46}, -{61,76,-45}, -{61,76,-44}, -{61,76,-43}, -{61,76,-42}, -{61,76,-41}, -{61,76,-40}, -{61,76,-39}, -{61,76,-38}, -{61,76,-37}, -{61,76,-36}, -{61,76,-35}, -{61,76,-34}, -{61,76,-33}, -{61,76,-32}, -{61,76,-31}, -{61,76,-30}, -{61,76,-29}, -{61,76,-28}, -{61,76,-27}, -{61,76,-26}, -{61,76,-25}, -{61,76,-24}, -{61,76,-23}, -{61,76,-22}, -{61,76,-21}, -{61,76,-20}, -{61,76,-19}, -{61,76,-18}, -{61,76,-17}, -{61,76,-16}, -{61,77,-60}, -{61,77,-59}, -{61,77,-58}, -{61,77,-57}, -{61,77,-56}, -{61,77,-55}, -{61,77,-54}, -{61,77,-53}, -{61,77,-52}, -{61,77,-51}, -{61,77,-50}, -{61,77,-49}, -{61,77,-48}, -{61,77,-47}, -{61,77,-46}, -{61,77,-45}, -{61,77,-44}, -{61,77,-43}, -{61,77,-42}, -{61,77,-41}, -{61,77,-40}, -{61,77,-39}, -{61,77,-38}, -{61,77,-37}, -{61,77,-36}, -{61,77,-35}, -{61,77,-34}, -{61,77,-33}, -{61,77,-32}, -{61,77,-31}, -{61,77,-30}, -{61,77,-29}, -{61,77,-28}, -{61,77,-27}, -{61,77,-26}, -{61,77,-25}, -{61,77,-24}, -{61,77,-23}, -{61,77,-22}, -{61,77,-21}, -{61,77,-20}, -{61,77,-19}, -{61,77,-18}, -{61,78,-60}, -{61,78,-59}, -{61,78,-58}, -{61,78,-57}, -{61,78,-56}, -{61,78,-55}, -{61,78,-54}, -{61,78,-53}, -{61,78,-52}, -{61,78,-51}, -{61,78,-50}, -{61,78,-49}, -{61,78,-48}, -{61,78,-47}, -{61,78,-46}, -{61,78,-45}, -{61,78,-44}, -{61,78,-43}, -{61,78,-42}, -{61,78,-41}, -{61,78,-40}, -{61,78,-39}, -{61,78,-38}, -{61,78,-37}, -{61,78,-36}, -{61,78,-35}, -{61,78,-34}, -{61,78,-33}, -{61,78,-32}, -{61,78,-31}, -{61,78,-30}, -{61,78,-29}, -{61,78,-28}, -{61,78,-27}, -{61,78,-26}, -{61,78,-25}, -{61,78,-24}, -{61,78,-23}, -{61,78,-22}, -{61,78,-21}, -{61,79,-60}, -{61,79,-59}, -{61,79,-58}, -{61,79,-57}, -{61,79,-56}, -{61,79,-55}, -{61,79,-54}, -{61,79,-53}, -{61,79,-52}, -{61,79,-51}, -{61,79,-50}, -{61,79,-49}, -{61,79,-48}, -{61,79,-47}, -{61,79,-46}, -{61,79,-45}, -{61,79,-44}, -{61,79,-43}, -{61,79,-42}, -{61,79,-41}, -{61,79,-40}, -{61,79,-39}, -{61,79,-38}, -{61,79,-37}, -{61,79,-36}, -{61,79,-35}, -{61,79,-34}, -{61,79,-33}, -{61,79,-32}, -{61,79,-31}, -{61,79,-30}, -{61,79,-29}, -{61,79,-28}, -{61,79,-27}, -{61,79,-26}, -{61,79,-25}, -{61,79,-24}, -{61,80,-60}, -{61,80,-59}, -{61,80,-58}, -{61,80,-57}, -{61,80,-56}, -{61,80,-55}, -{61,80,-54}, -{61,80,-53}, -{61,80,-52}, -{61,80,-51}, -{61,80,-50}, -{61,80,-49}, -{61,80,-48}, -{61,80,-47}, -{61,80,-46}, -{61,80,-45}, -{61,80,-44}, -{61,80,-43}, -{61,80,-42}, -{61,80,-41}, -{61,80,-40}, -{61,80,-39}, -{61,80,-38}, -{61,80,-37}, -{61,80,-36}, -{61,80,-35}, -{61,80,-34}, -{61,80,-33}, -{61,80,-32}, -{61,80,-31}, -{61,80,-30}, -{61,80,-29}, -{61,80,-28}, -{61,80,-27}, -{61,80,-26}, -{61,81,-60}, -{61,81,-59}, -{61,81,-58}, -{61,81,-57}, -{61,81,-56}, -{61,81,-55}, -{61,81,-54}, -{61,81,-53}, -{61,81,-52}, -{61,81,-51}, -{61,81,-50}, -{61,81,-49}, -{61,81,-48}, -{61,81,-47}, -{61,81,-46}, -{61,81,-45}, -{61,81,-44}, -{61,81,-43}, -{61,81,-42}, -{61,81,-41}, -{61,81,-40}, -{61,81,-39}, -{61,81,-38}, -{61,81,-37}, -{61,81,-36}, -{61,81,-35}, -{61,81,-34}, -{61,81,-33}, -{61,81,-32}, -{61,81,-31}, -{61,81,-30}, -{61,81,-29}, -{61,82,-60}, -{61,82,-59}, -{61,82,-58}, -{61,82,-57}, -{61,82,-56}, -{61,82,-55}, -{61,82,-54}, -{61,82,-53}, -{61,82,-52}, -{61,82,-51}, -{61,82,-50}, -{61,82,-49}, -{61,82,-48}, -{61,82,-47}, -{61,82,-46}, -{61,82,-45}, -{61,82,-44}, -{61,82,-43}, -{61,82,-42}, -{61,82,-41}, -{61,82,-40}, -{61,82,-39}, -{61,82,-38}, -{61,82,-37}, -{61,82,-36}, -{61,82,-35}, -{61,82,-34}, -{61,82,-33}, -{61,82,-32}, -{61,82,-31}, -{61,83,-60}, -{61,83,-59}, -{61,83,-58}, -{61,83,-57}, -{61,83,-56}, -{61,83,-55}, -{61,83,-54}, -{61,83,-53}, -{61,83,-52}, -{61,83,-51}, -{61,83,-50}, -{61,83,-49}, -{61,83,-48}, -{61,83,-47}, -{61,83,-46}, -{61,83,-45}, -{61,83,-44}, -{61,83,-43}, -{61,83,-42}, -{61,83,-41}, -{61,83,-40}, -{61,83,-39}, -{61,83,-38}, -{61,83,-37}, -{61,83,-36}, -{61,83,-35}, -{61,83,-34}, -{61,83,-33}, -{61,84,-60}, -{61,84,-59}, -{61,84,-58}, -{61,84,-57}, -{61,84,-56}, -{61,84,-55}, -{61,84,-54}, -{61,84,-53}, -{61,84,-52}, -{61,84,-51}, -{61,84,-50}, -{61,84,-49}, -{61,84,-48}, -{61,84,-47}, -{61,84,-46}, -{61,84,-45}, -{61,84,-44}, -{61,84,-43}, -{61,84,-42}, -{61,84,-41}, -{61,84,-40}, -{61,84,-39}, -{61,84,-38}, -{61,84,-37}, -{61,84,-36}, -{61,84,-35}, -{61,85,-60}, -{61,85,-59}, -{61,85,-58}, -{61,85,-57}, -{61,85,-56}, -{61,85,-55}, -{61,85,-54}, -{61,85,-53}, -{61,85,-52}, -{61,85,-51}, -{61,85,-50}, -{61,85,-49}, -{61,85,-48}, -{61,85,-47}, -{61,85,-46}, -{61,85,-45}, -{61,85,-44}, -{61,85,-43}, -{61,85,-42}, -{61,85,-41}, -{61,85,-40}, -{61,85,-39}, -{61,85,-38}, -{61,86,-60}, -{61,86,-59}, -{61,86,-58}, -{61,86,-57}, -{61,86,-56}, -{61,86,-55}, -{61,86,-54}, -{61,86,-53}, -{61,86,-52}, -{61,86,-51}, -{61,86,-50}, -{61,86,-49}, -{61,86,-48}, -{61,86,-47}, -{61,86,-46}, -{61,86,-45}, -{61,86,-44}, -{61,86,-43}, -{61,86,-42}, -{61,86,-41}, -{61,86,-40}, -{61,87,-60}, -{61,87,-59}, -{61,87,-58}, -{61,87,-57}, -{61,87,-56}, -{61,87,-55}, -{61,87,-54}, -{61,87,-53}, -{61,87,-52}, -{61,87,-51}, -{61,87,-50}, -{61,87,-49}, -{61,87,-48}, -{61,87,-47}, -{61,87,-46}, -{61,87,-45}, -{61,87,-44}, -{61,87,-43}, -{61,87,-42}, -{61,88,-60}, -{61,88,-59}, -{61,88,-58}, -{61,88,-57}, -{61,88,-56}, -{61,88,-55}, -{61,88,-54}, -{61,88,-53}, -{61,88,-52}, -{61,88,-51}, -{61,88,-50}, -{61,88,-49}, -{61,88,-48}, -{61,88,-47}, -{61,88,-46}, -{61,88,-45}, -{61,88,-44}, -{61,89,-60}, -{61,89,-59}, -{61,89,-58}, -{61,89,-57}, -{61,89,-56}, -{61,89,-55}, -{61,89,-54}, -{61,89,-53}, -{61,89,-52}, -{61,89,-51}, -{61,89,-50}, -{61,89,-49}, -{61,89,-48}, -{61,89,-47}, -{61,89,-46}, -{61,90,-60}, -{61,90,-59}, -{61,90,-58}, -{61,90,-57}, -{61,90,-56}, -{61,90,-55}, -{61,90,-54}, -{61,90,-53}, -{61,90,-52}, -{61,90,-51}, -{61,90,-50}, -{61,90,-49}, -{61,90,-48}, -{61,91,-59}, -{61,91,-58}, -{61,91,-57}, -{61,91,-56}, -{61,91,-55}, -{61,91,-54}, -{61,91,-53}, -{61,91,-52}, -{61,91,-51}, -{61,91,-50}, -{61,92,-59}, -{61,92,-58}, -{61,92,-57}, -{61,92,-56}, -{61,92,-55}, -{61,92,-54}, -{61,92,-53}, -{61,92,-52}, -{61,93,-59}, -{61,93,-58}, -{61,93,-57}, -{61,93,-56}, -{61,93,-55}, -{61,93,-54}, -{61,94,-59}, -{61,94,-58}, -{61,94,-57}, -{61,94,-56}, -{61,95,-59}, -{61,95,-58}, -{61,96,-59}, -{62,-64,58}, -{62,-64,59}, -{62,-64,60}, -{62,-64,61}, -{62,-64,62}, -{62,-63,54}, -{62,-63,55}, -{62,-63,56}, -{62,-63,57}, -{62,-63,58}, -{62,-63,59}, -{62,-63,60}, -{62,-63,61}, -{62,-63,62}, -{62,-62,50}, -{62,-62,51}, -{62,-62,52}, -{62,-62,53}, -{62,-62,54}, -{62,-62,55}, -{62,-62,56}, -{62,-62,57}, -{62,-62,58}, -{62,-62,59}, -{62,-62,60}, -{62,-62,61}, -{62,-62,62}, -{62,-61,46}, -{62,-61,47}, -{62,-61,48}, -{62,-61,49}, -{62,-61,50}, -{62,-61,51}, -{62,-61,52}, -{62,-61,53}, -{62,-61,54}, -{62,-61,55}, -{62,-61,56}, -{62,-61,57}, -{62,-61,58}, -{62,-61,59}, -{62,-61,60}, -{62,-61,61}, -{62,-61,62}, -{62,-60,43}, -{62,-60,44}, -{62,-60,45}, -{62,-60,46}, -{62,-60,47}, -{62,-60,48}, -{62,-60,49}, -{62,-60,50}, -{62,-60,51}, -{62,-60,52}, -{62,-60,53}, -{62,-60,54}, -{62,-60,55}, -{62,-60,56}, -{62,-60,57}, -{62,-60,58}, -{62,-60,59}, -{62,-60,60}, -{62,-60,61}, -{62,-60,62}, -{62,-59,40}, -{62,-59,41}, -{62,-59,42}, -{62,-59,43}, -{62,-59,44}, -{62,-59,45}, -{62,-59,46}, -{62,-59,47}, -{62,-59,48}, -{62,-59,49}, -{62,-59,50}, -{62,-59,51}, -{62,-59,52}, -{62,-59,53}, -{62,-59,54}, -{62,-59,55}, -{62,-59,56}, -{62,-59,57}, -{62,-59,58}, -{62,-59,59}, -{62,-59,60}, -{62,-59,61}, -{62,-59,62}, -{62,-58,37}, -{62,-58,38}, -{62,-58,39}, -{62,-58,40}, -{62,-58,41}, -{62,-58,42}, -{62,-58,43}, -{62,-58,44}, -{62,-58,45}, -{62,-58,46}, -{62,-58,47}, -{62,-58,48}, -{62,-58,49}, -{62,-58,50}, -{62,-58,51}, -{62,-58,52}, -{62,-58,53}, -{62,-58,54}, -{62,-58,55}, -{62,-58,56}, -{62,-58,57}, -{62,-58,58}, -{62,-58,59}, -{62,-58,60}, -{62,-58,61}, -{62,-58,62}, -{62,-58,63}, -{62,-57,34}, -{62,-57,35}, -{62,-57,36}, -{62,-57,37}, -{62,-57,38}, -{62,-57,39}, -{62,-57,40}, -{62,-57,41}, -{62,-57,42}, -{62,-57,43}, -{62,-57,44}, -{62,-57,45}, -{62,-57,46}, -{62,-57,47}, -{62,-57,48}, -{62,-57,49}, -{62,-57,50}, -{62,-57,51}, -{62,-57,52}, -{62,-57,53}, -{62,-57,54}, -{62,-57,55}, -{62,-57,56}, -{62,-57,57}, -{62,-57,58}, -{62,-57,59}, -{62,-57,60}, -{62,-57,61}, -{62,-57,62}, -{62,-57,63}, -{62,-56,31}, -{62,-56,32}, -{62,-56,33}, -{62,-56,34}, -{62,-56,35}, -{62,-56,36}, -{62,-56,37}, -{62,-56,38}, -{62,-56,39}, -{62,-56,40}, -{62,-56,41}, -{62,-56,42}, -{62,-56,43}, -{62,-56,44}, -{62,-56,45}, -{62,-56,46}, -{62,-56,47}, -{62,-56,48}, -{62,-56,49}, -{62,-56,50}, -{62,-56,51}, -{62,-56,52}, -{62,-56,53}, -{62,-56,54}, -{62,-56,55}, -{62,-56,56}, -{62,-56,57}, -{62,-56,58}, -{62,-56,59}, -{62,-56,60}, -{62,-56,61}, -{62,-56,62}, -{62,-56,63}, -{62,-55,29}, -{62,-55,30}, -{62,-55,31}, -{62,-55,32}, -{62,-55,33}, -{62,-55,34}, -{62,-55,35}, -{62,-55,36}, -{62,-55,37}, -{62,-55,38}, -{62,-55,39}, -{62,-55,40}, -{62,-55,41}, -{62,-55,42}, -{62,-55,43}, -{62,-55,44}, -{62,-55,45}, -{62,-55,46}, -{62,-55,47}, -{62,-55,48}, -{62,-55,49}, -{62,-55,50}, -{62,-55,51}, -{62,-55,52}, -{62,-55,53}, -{62,-55,54}, -{62,-55,55}, -{62,-55,56}, -{62,-55,57}, -{62,-55,58}, -{62,-55,59}, -{62,-55,60}, -{62,-55,61}, -{62,-55,62}, -{62,-55,63}, -{62,-54,26}, -{62,-54,27}, -{62,-54,28}, -{62,-54,29}, -{62,-54,30}, -{62,-54,31}, -{62,-54,32}, -{62,-54,33}, -{62,-54,34}, -{62,-54,35}, -{62,-54,36}, -{62,-54,37}, -{62,-54,38}, -{62,-54,39}, -{62,-54,40}, -{62,-54,41}, -{62,-54,42}, -{62,-54,43}, -{62,-54,44}, -{62,-54,45}, -{62,-54,46}, -{62,-54,47}, -{62,-54,48}, -{62,-54,49}, -{62,-54,50}, -{62,-54,51}, -{62,-54,52}, -{62,-54,53}, -{62,-54,54}, -{62,-54,55}, -{62,-54,56}, -{62,-54,57}, -{62,-54,58}, -{62,-54,59}, -{62,-54,60}, -{62,-54,61}, -{62,-54,62}, -{62,-54,63}, -{62,-53,24}, -{62,-53,25}, -{62,-53,26}, -{62,-53,27}, -{62,-53,28}, -{62,-53,29}, -{62,-53,30}, -{62,-53,31}, -{62,-53,32}, -{62,-53,33}, -{62,-53,34}, -{62,-53,35}, -{62,-53,36}, -{62,-53,37}, -{62,-53,38}, -{62,-53,39}, -{62,-53,40}, -{62,-53,41}, -{62,-53,42}, -{62,-53,43}, -{62,-53,44}, -{62,-53,45}, -{62,-53,46}, -{62,-53,47}, -{62,-53,48}, -{62,-53,49}, -{62,-53,50}, -{62,-53,51}, -{62,-53,52}, -{62,-53,53}, -{62,-53,54}, -{62,-53,55}, -{62,-53,56}, -{62,-53,57}, -{62,-53,58}, -{62,-53,59}, -{62,-53,60}, -{62,-53,61}, -{62,-53,62}, -{62,-53,63}, -{62,-52,21}, -{62,-52,22}, -{62,-52,23}, -{62,-52,24}, -{62,-52,25}, -{62,-52,26}, -{62,-52,27}, -{62,-52,28}, -{62,-52,29}, -{62,-52,30}, -{62,-52,31}, -{62,-52,32}, -{62,-52,33}, -{62,-52,34}, -{62,-52,35}, -{62,-52,36}, -{62,-52,37}, -{62,-52,38}, -{62,-52,39}, -{62,-52,40}, -{62,-52,41}, -{62,-52,42}, -{62,-52,43}, -{62,-52,44}, -{62,-52,45}, -{62,-52,46}, -{62,-52,47}, -{62,-52,48}, -{62,-52,49}, -{62,-52,50}, -{62,-52,51}, -{62,-52,52}, -{62,-52,53}, -{62,-52,54}, -{62,-52,55}, -{62,-52,56}, -{62,-52,57}, -{62,-52,58}, -{62,-52,59}, -{62,-52,60}, -{62,-52,61}, -{62,-52,62}, -{62,-52,63}, -{62,-51,19}, -{62,-51,20}, -{62,-51,21}, -{62,-51,22}, -{62,-51,23}, -{62,-51,24}, -{62,-51,25}, -{62,-51,26}, -{62,-51,27}, -{62,-51,28}, -{62,-51,29}, -{62,-51,30}, -{62,-51,31}, -{62,-51,32}, -{62,-51,33}, -{62,-51,34}, -{62,-51,35}, -{62,-51,36}, -{62,-51,37}, -{62,-51,38}, -{62,-51,39}, -{62,-51,40}, -{62,-51,41}, -{62,-51,42}, -{62,-51,43}, -{62,-51,44}, -{62,-51,45}, -{62,-51,46}, -{62,-51,47}, -{62,-51,48}, -{62,-51,49}, -{62,-51,50}, -{62,-51,51}, -{62,-51,52}, -{62,-51,53}, -{62,-51,54}, -{62,-51,55}, -{62,-51,56}, -{62,-51,57}, -{62,-51,58}, -{62,-51,59}, -{62,-51,60}, -{62,-51,61}, -{62,-51,62}, -{62,-51,63}, -{62,-50,17}, -{62,-50,18}, -{62,-50,19}, -{62,-50,20}, -{62,-50,21}, -{62,-50,22}, -{62,-50,23}, -{62,-50,24}, -{62,-50,25}, -{62,-50,26}, -{62,-50,27}, -{62,-50,28}, -{62,-50,29}, -{62,-50,30}, -{62,-50,31}, -{62,-50,32}, -{62,-50,33}, -{62,-50,34}, -{62,-50,35}, -{62,-50,36}, -{62,-50,37}, -{62,-50,38}, -{62,-50,39}, -{62,-50,40}, -{62,-50,41}, -{62,-50,42}, -{62,-50,43}, -{62,-50,44}, -{62,-50,45}, -{62,-50,46}, -{62,-50,47}, -{62,-50,48}, -{62,-50,49}, -{62,-50,50}, -{62,-50,51}, -{62,-50,52}, -{62,-50,53}, -{62,-50,54}, -{62,-50,55}, -{62,-50,56}, -{62,-50,57}, -{62,-50,58}, -{62,-50,59}, -{62,-50,60}, -{62,-50,61}, -{62,-50,62}, -{62,-50,63}, -{62,-49,15}, -{62,-49,16}, -{62,-49,17}, -{62,-49,18}, -{62,-49,19}, -{62,-49,20}, -{62,-49,21}, -{62,-49,22}, -{62,-49,23}, -{62,-49,24}, -{62,-49,25}, -{62,-49,26}, -{62,-49,27}, -{62,-49,28}, -{62,-49,29}, -{62,-49,30}, -{62,-49,31}, -{62,-49,32}, -{62,-49,33}, -{62,-49,34}, -{62,-49,35}, -{62,-49,36}, -{62,-49,37}, -{62,-49,38}, -{62,-49,39}, -{62,-49,40}, -{62,-49,41}, -{62,-49,42}, -{62,-49,43}, -{62,-49,44}, -{62,-49,45}, -{62,-49,46}, -{62,-49,47}, -{62,-49,48}, -{62,-49,49}, -{62,-49,50}, -{62,-49,51}, -{62,-49,52}, -{62,-49,53}, -{62,-49,54}, -{62,-49,55}, -{62,-49,56}, -{62,-49,57}, -{62,-49,58}, -{62,-49,59}, -{62,-49,60}, -{62,-49,61}, -{62,-49,62}, -{62,-49,63}, -{62,-48,13}, -{62,-48,14}, -{62,-48,15}, -{62,-48,16}, -{62,-48,17}, -{62,-48,18}, -{62,-48,19}, -{62,-48,20}, -{62,-48,21}, -{62,-48,22}, -{62,-48,23}, -{62,-48,24}, -{62,-48,25}, -{62,-48,26}, -{62,-48,27}, -{62,-48,28}, -{62,-48,29}, -{62,-48,30}, -{62,-48,31}, -{62,-48,32}, -{62,-48,33}, -{62,-48,34}, -{62,-48,35}, -{62,-48,36}, -{62,-48,37}, -{62,-48,38}, -{62,-48,39}, -{62,-48,40}, -{62,-48,41}, -{62,-48,42}, -{62,-48,43}, -{62,-48,44}, -{62,-48,45}, -{62,-48,46}, -{62,-48,47}, -{62,-48,48}, -{62,-48,49}, -{62,-48,50}, -{62,-48,51}, -{62,-48,52}, -{62,-48,53}, -{62,-48,54}, -{62,-48,55}, -{62,-48,56}, -{62,-48,57}, -{62,-48,58}, -{62,-48,59}, -{62,-48,60}, -{62,-48,61}, -{62,-48,62}, -{62,-48,63}, -{62,-47,11}, -{62,-47,12}, -{62,-47,13}, -{62,-47,14}, -{62,-47,15}, -{62,-47,16}, -{62,-47,17}, -{62,-47,18}, -{62,-47,19}, -{62,-47,20}, -{62,-47,21}, -{62,-47,22}, -{62,-47,23}, -{62,-47,24}, -{62,-47,25}, -{62,-47,26}, -{62,-47,27}, -{62,-47,28}, -{62,-47,29}, -{62,-47,30}, -{62,-47,31}, -{62,-47,32}, -{62,-47,33}, -{62,-47,34}, -{62,-47,35}, -{62,-47,36}, -{62,-47,37}, -{62,-47,38}, -{62,-47,39}, -{62,-47,40}, -{62,-47,41}, -{62,-47,42}, -{62,-47,43}, -{62,-47,44}, -{62,-47,45}, -{62,-47,46}, -{62,-47,47}, -{62,-47,48}, -{62,-47,49}, -{62,-47,50}, -{62,-47,51}, -{62,-47,52}, -{62,-47,53}, -{62,-47,54}, -{62,-47,55}, -{62,-47,56}, -{62,-47,57}, -{62,-47,58}, -{62,-47,59}, -{62,-47,60}, -{62,-47,61}, -{62,-47,62}, -{62,-47,63}, -{62,-46,9}, -{62,-46,10}, -{62,-46,11}, -{62,-46,12}, -{62,-46,13}, -{62,-46,14}, -{62,-46,15}, -{62,-46,16}, -{62,-46,17}, -{62,-46,18}, -{62,-46,19}, -{62,-46,20}, -{62,-46,21}, -{62,-46,22}, -{62,-46,23}, -{62,-46,24}, -{62,-46,25}, -{62,-46,26}, -{62,-46,27}, -{62,-46,28}, -{62,-46,29}, -{62,-46,30}, -{62,-46,31}, -{62,-46,32}, -{62,-46,33}, -{62,-46,34}, -{62,-46,35}, -{62,-46,36}, -{62,-46,37}, -{62,-46,38}, -{62,-46,39}, -{62,-46,40}, -{62,-46,41}, -{62,-46,42}, -{62,-46,43}, -{62,-46,44}, -{62,-46,45}, -{62,-46,46}, -{62,-46,47}, -{62,-46,48}, -{62,-46,49}, -{62,-46,50}, -{62,-46,51}, -{62,-46,52}, -{62,-46,53}, -{62,-46,54}, -{62,-46,55}, -{62,-46,56}, -{62,-46,57}, -{62,-46,58}, -{62,-46,59}, -{62,-46,60}, -{62,-46,61}, -{62,-46,62}, -{62,-46,63}, -{62,-45,7}, -{62,-45,8}, -{62,-45,9}, -{62,-45,10}, -{62,-45,11}, -{62,-45,12}, -{62,-45,13}, -{62,-45,14}, -{62,-45,15}, -{62,-45,16}, -{62,-45,17}, -{62,-45,18}, -{62,-45,19}, -{62,-45,20}, -{62,-45,21}, -{62,-45,22}, -{62,-45,23}, -{62,-45,24}, -{62,-45,25}, -{62,-45,26}, -{62,-45,27}, -{62,-45,28}, -{62,-45,29}, -{62,-45,30}, -{62,-45,31}, -{62,-45,32}, -{62,-45,33}, -{62,-45,34}, -{62,-45,35}, -{62,-45,36}, -{62,-45,37}, -{62,-45,38}, -{62,-45,39}, -{62,-45,40}, -{62,-45,41}, -{62,-45,42}, -{62,-45,43}, -{62,-45,44}, -{62,-45,45}, -{62,-45,46}, -{62,-45,47}, -{62,-45,48}, -{62,-45,49}, -{62,-45,50}, -{62,-45,51}, -{62,-45,52}, -{62,-45,53}, -{62,-45,54}, -{62,-45,55}, -{62,-45,56}, -{62,-45,57}, -{62,-45,58}, -{62,-45,59}, -{62,-45,60}, -{62,-45,61}, -{62,-45,62}, -{62,-45,63}, -{62,-44,5}, -{62,-44,6}, -{62,-44,7}, -{62,-44,8}, -{62,-44,9}, -{62,-44,10}, -{62,-44,11}, -{62,-44,12}, -{62,-44,13}, -{62,-44,14}, -{62,-44,15}, -{62,-44,16}, -{62,-44,17}, -{62,-44,18}, -{62,-44,19}, -{62,-44,20}, -{62,-44,21}, -{62,-44,22}, -{62,-44,23}, -{62,-44,24}, -{62,-44,25}, -{62,-44,26}, -{62,-44,27}, -{62,-44,28}, -{62,-44,29}, -{62,-44,30}, -{62,-44,31}, -{62,-44,32}, -{62,-44,33}, -{62,-44,34}, -{62,-44,35}, -{62,-44,36}, -{62,-44,37}, -{62,-44,38}, -{62,-44,39}, -{62,-44,40}, -{62,-44,41}, -{62,-44,42}, -{62,-44,43}, -{62,-44,44}, -{62,-44,45}, -{62,-44,46}, -{62,-44,47}, -{62,-44,48}, -{62,-44,49}, -{62,-44,50}, -{62,-44,51}, -{62,-44,52}, -{62,-44,53}, -{62,-44,54}, -{62,-44,55}, -{62,-44,56}, -{62,-44,57}, -{62,-44,58}, -{62,-44,59}, -{62,-44,60}, -{62,-44,61}, -{62,-44,62}, -{62,-44,63}, -{62,-43,3}, -{62,-43,4}, -{62,-43,5}, -{62,-43,6}, -{62,-43,7}, -{62,-43,8}, -{62,-43,9}, -{62,-43,10}, -{62,-43,11}, -{62,-43,12}, -{62,-43,13}, -{62,-43,14}, -{62,-43,15}, -{62,-43,16}, -{62,-43,17}, -{62,-43,18}, -{62,-43,19}, -{62,-43,20}, -{62,-43,21}, -{62,-43,22}, -{62,-43,23}, -{62,-43,24}, -{62,-43,25}, -{62,-43,26}, -{62,-43,27}, -{62,-43,28}, -{62,-43,29}, -{62,-43,30}, -{62,-43,31}, -{62,-43,32}, -{62,-43,33}, -{62,-43,34}, -{62,-43,35}, -{62,-43,36}, -{62,-43,37}, -{62,-43,38}, -{62,-43,39}, -{62,-43,40}, -{62,-43,41}, -{62,-43,42}, -{62,-43,43}, -{62,-43,44}, -{62,-43,45}, -{62,-43,46}, -{62,-43,47}, -{62,-43,48}, -{62,-43,49}, -{62,-43,50}, -{62,-43,51}, -{62,-43,52}, -{62,-43,53}, -{62,-43,54}, -{62,-43,55}, -{62,-43,56}, -{62,-43,57}, -{62,-43,58}, -{62,-43,59}, -{62,-43,60}, -{62,-43,61}, -{62,-43,62}, -{62,-43,63}, -{62,-42,2}, -{62,-42,3}, -{62,-42,4}, -{62,-42,5}, -{62,-42,6}, -{62,-42,7}, -{62,-42,8}, -{62,-42,9}, -{62,-42,10}, -{62,-42,11}, -{62,-42,12}, -{62,-42,13}, -{62,-42,14}, -{62,-42,15}, -{62,-42,16}, -{62,-42,17}, -{62,-42,18}, -{62,-42,19}, -{62,-42,20}, -{62,-42,21}, -{62,-42,22}, -{62,-42,23}, -{62,-42,24}, -{62,-42,25}, -{62,-42,26}, -{62,-42,27}, -{62,-42,28}, -{62,-42,29}, -{62,-42,30}, -{62,-42,31}, -{62,-42,32}, -{62,-42,33}, -{62,-42,34}, -{62,-42,35}, -{62,-42,36}, -{62,-42,37}, -{62,-42,38}, -{62,-42,39}, -{62,-42,40}, -{62,-42,41}, -{62,-42,42}, -{62,-42,43}, -{62,-42,44}, -{62,-42,45}, -{62,-42,46}, -{62,-42,47}, -{62,-42,48}, -{62,-42,49}, -{62,-42,50}, -{62,-42,51}, -{62,-42,52}, -{62,-42,53}, -{62,-42,54}, -{62,-42,55}, -{62,-42,56}, -{62,-42,57}, -{62,-42,58}, -{62,-42,59}, -{62,-42,60}, -{62,-42,61}, -{62,-42,62}, -{62,-42,63}, -{62,-41,0}, -{62,-41,1}, -{62,-41,2}, -{62,-41,3}, -{62,-41,4}, -{62,-41,5}, -{62,-41,6}, -{62,-41,7}, -{62,-41,8}, -{62,-41,9}, -{62,-41,10}, -{62,-41,11}, -{62,-41,12}, -{62,-41,13}, -{62,-41,14}, -{62,-41,15}, -{62,-41,16}, -{62,-41,17}, -{62,-41,18}, -{62,-41,19}, -{62,-41,20}, -{62,-41,21}, -{62,-41,22}, -{62,-41,23}, -{62,-41,24}, -{62,-41,25}, -{62,-41,26}, -{62,-41,27}, -{62,-41,28}, -{62,-41,29}, -{62,-41,30}, -{62,-41,31}, -{62,-41,32}, -{62,-41,33}, -{62,-41,34}, -{62,-41,35}, -{62,-41,36}, -{62,-41,37}, -{62,-41,38}, -{62,-41,39}, -{62,-41,40}, -{62,-41,41}, -{62,-41,42}, -{62,-41,43}, -{62,-41,44}, -{62,-41,45}, -{62,-41,46}, -{62,-41,47}, -{62,-41,48}, -{62,-41,49}, -{62,-41,50}, -{62,-41,51}, -{62,-41,52}, -{62,-41,53}, -{62,-41,54}, -{62,-41,55}, -{62,-41,56}, -{62,-41,57}, -{62,-41,58}, -{62,-41,59}, -{62,-41,60}, -{62,-41,61}, -{62,-41,62}, -{62,-41,63}, -{62,-40,-2}, -{62,-40,-1}, -{62,-40,0}, -{62,-40,1}, -{62,-40,2}, -{62,-40,3}, -{62,-40,4}, -{62,-40,5}, -{62,-40,6}, -{62,-40,7}, -{62,-40,8}, -{62,-40,9}, -{62,-40,10}, -{62,-40,11}, -{62,-40,12}, -{62,-40,13}, -{62,-40,14}, -{62,-40,15}, -{62,-40,16}, -{62,-40,17}, -{62,-40,18}, -{62,-40,19}, -{62,-40,20}, -{62,-40,21}, -{62,-40,22}, -{62,-40,23}, -{62,-40,24}, -{62,-40,25}, -{62,-40,26}, -{62,-40,27}, -{62,-40,28}, -{62,-40,29}, -{62,-40,30}, -{62,-40,31}, -{62,-40,32}, -{62,-40,33}, -{62,-40,34}, -{62,-40,35}, -{62,-40,36}, -{62,-40,37}, -{62,-40,38}, -{62,-40,39}, -{62,-40,40}, -{62,-40,41}, -{62,-40,42}, -{62,-40,43}, -{62,-40,44}, -{62,-40,45}, -{62,-40,46}, -{62,-40,47}, -{62,-40,48}, -{62,-40,49}, -{62,-40,50}, -{62,-40,51}, -{62,-40,52}, -{62,-40,53}, -{62,-40,54}, -{62,-40,55}, -{62,-40,56}, -{62,-40,57}, -{62,-40,58}, -{62,-40,59}, -{62,-40,60}, -{62,-40,61}, -{62,-40,62}, -{62,-40,63}, -{62,-39,-4}, -{62,-39,-3}, -{62,-39,-2}, -{62,-39,-1}, -{62,-39,0}, -{62,-39,1}, -{62,-39,2}, -{62,-39,3}, -{62,-39,4}, -{62,-39,5}, -{62,-39,6}, -{62,-39,7}, -{62,-39,8}, -{62,-39,9}, -{62,-39,10}, -{62,-39,11}, -{62,-39,12}, -{62,-39,13}, -{62,-39,14}, -{62,-39,15}, -{62,-39,16}, -{62,-39,17}, -{62,-39,18}, -{62,-39,19}, -{62,-39,20}, -{62,-39,21}, -{62,-39,22}, -{62,-39,23}, -{62,-39,24}, -{62,-39,25}, -{62,-39,26}, -{62,-39,27}, -{62,-39,28}, -{62,-39,29}, -{62,-39,30}, -{62,-39,31}, -{62,-39,32}, -{62,-39,33}, -{62,-39,34}, -{62,-39,35}, -{62,-39,36}, -{62,-39,37}, -{62,-39,38}, -{62,-39,39}, -{62,-39,40}, -{62,-39,41}, -{62,-39,42}, -{62,-39,43}, -{62,-39,44}, -{62,-39,45}, -{62,-39,46}, -{62,-39,47}, -{62,-39,48}, -{62,-39,49}, -{62,-39,50}, -{62,-39,51}, -{62,-39,52}, -{62,-39,53}, -{62,-39,54}, -{62,-39,55}, -{62,-39,56}, -{62,-39,57}, -{62,-39,58}, -{62,-39,59}, -{62,-39,60}, -{62,-39,61}, -{62,-39,62}, -{62,-39,63}, -{62,-38,-5}, -{62,-38,-4}, -{62,-38,-3}, -{62,-38,-2}, -{62,-38,-1}, -{62,-38,0}, -{62,-38,1}, -{62,-38,2}, -{62,-38,3}, -{62,-38,4}, -{62,-38,5}, -{62,-38,6}, -{62,-38,7}, -{62,-38,8}, -{62,-38,9}, -{62,-38,10}, -{62,-38,11}, -{62,-38,12}, -{62,-38,13}, -{62,-38,14}, -{62,-38,15}, -{62,-38,16}, -{62,-38,17}, -{62,-38,18}, -{62,-38,19}, -{62,-38,20}, -{62,-38,21}, -{62,-38,22}, -{62,-38,23}, -{62,-38,24}, -{62,-38,25}, -{62,-38,26}, -{62,-38,27}, -{62,-38,28}, -{62,-38,29}, -{62,-38,30}, -{62,-38,31}, -{62,-38,32}, -{62,-38,33}, -{62,-38,34}, -{62,-38,35}, -{62,-38,36}, -{62,-38,37}, -{62,-38,38}, -{62,-38,39}, -{62,-38,40}, -{62,-38,41}, -{62,-38,42}, -{62,-38,43}, -{62,-38,44}, -{62,-38,45}, -{62,-38,46}, -{62,-38,47}, -{62,-38,48}, -{62,-38,49}, -{62,-38,50}, -{62,-38,51}, -{62,-38,52}, -{62,-38,53}, -{62,-38,54}, -{62,-38,55}, -{62,-38,56}, -{62,-38,57}, -{62,-38,58}, -{62,-38,59}, -{62,-38,60}, -{62,-38,61}, -{62,-38,62}, -{62,-38,63}, -{62,-37,-7}, -{62,-37,-6}, -{62,-37,-5}, -{62,-37,-4}, -{62,-37,-3}, -{62,-37,-2}, -{62,-37,-1}, -{62,-37,0}, -{62,-37,1}, -{62,-37,2}, -{62,-37,3}, -{62,-37,4}, -{62,-37,5}, -{62,-37,6}, -{62,-37,7}, -{62,-37,8}, -{62,-37,9}, -{62,-37,10}, -{62,-37,11}, -{62,-37,12}, -{62,-37,13}, -{62,-37,14}, -{62,-37,15}, -{62,-37,16}, -{62,-37,17}, -{62,-37,18}, -{62,-37,19}, -{62,-37,20}, -{62,-37,21}, -{62,-37,22}, -{62,-37,23}, -{62,-37,24}, -{62,-37,25}, -{62,-37,26}, -{62,-37,27}, -{62,-37,28}, -{62,-37,29}, -{62,-37,30}, -{62,-37,31}, -{62,-37,32}, -{62,-37,33}, -{62,-37,34}, -{62,-37,35}, -{62,-37,36}, -{62,-37,37}, -{62,-37,38}, -{62,-37,39}, -{62,-37,40}, -{62,-37,41}, -{62,-37,42}, -{62,-37,43}, -{62,-37,44}, -{62,-37,45}, -{62,-37,46}, -{62,-37,47}, -{62,-37,48}, -{62,-37,49}, -{62,-37,50}, -{62,-37,51}, -{62,-37,52}, -{62,-37,53}, -{62,-37,54}, -{62,-37,55}, -{62,-37,56}, -{62,-37,57}, -{62,-37,58}, -{62,-37,59}, -{62,-37,60}, -{62,-37,61}, -{62,-37,62}, -{62,-37,63}, -{62,-37,64}, -{62,-36,-9}, -{62,-36,-8}, -{62,-36,-7}, -{62,-36,-6}, -{62,-36,-5}, -{62,-36,-4}, -{62,-36,-3}, -{62,-36,-2}, -{62,-36,-1}, -{62,-36,0}, -{62,-36,1}, -{62,-36,2}, -{62,-36,3}, -{62,-36,4}, -{62,-36,5}, -{62,-36,6}, -{62,-36,7}, -{62,-36,8}, -{62,-36,9}, -{62,-36,10}, -{62,-36,11}, -{62,-36,12}, -{62,-36,13}, -{62,-36,14}, -{62,-36,15}, -{62,-36,16}, -{62,-36,17}, -{62,-36,18}, -{62,-36,19}, -{62,-36,20}, -{62,-36,21}, -{62,-36,22}, -{62,-36,23}, -{62,-36,24}, -{62,-36,25}, -{62,-36,26}, -{62,-36,27}, -{62,-36,28}, -{62,-36,29}, -{62,-36,30}, -{62,-36,31}, -{62,-36,32}, -{62,-36,33}, -{62,-36,34}, -{62,-36,35}, -{62,-36,36}, -{62,-36,37}, -{62,-36,38}, -{62,-36,39}, -{62,-36,40}, -{62,-36,41}, -{62,-36,42}, -{62,-36,43}, -{62,-36,44}, -{62,-36,45}, -{62,-36,46}, -{62,-36,47}, -{62,-36,48}, -{62,-36,49}, -{62,-36,50}, -{62,-36,51}, -{62,-36,52}, -{62,-36,53}, -{62,-36,54}, -{62,-36,55}, -{62,-36,56}, -{62,-36,57}, -{62,-36,58}, -{62,-36,59}, -{62,-36,60}, -{62,-36,61}, -{62,-36,62}, -{62,-36,63}, -{62,-36,64}, -{62,-35,-10}, -{62,-35,-9}, -{62,-35,-8}, -{62,-35,-7}, -{62,-35,-6}, -{62,-35,-5}, -{62,-35,-4}, -{62,-35,-3}, -{62,-35,-2}, -{62,-35,-1}, -{62,-35,0}, -{62,-35,1}, -{62,-35,2}, -{62,-35,3}, -{62,-35,4}, -{62,-35,5}, -{62,-35,6}, -{62,-35,7}, -{62,-35,8}, -{62,-35,9}, -{62,-35,10}, -{62,-35,11}, -{62,-35,12}, -{62,-35,13}, -{62,-35,14}, -{62,-35,15}, -{62,-35,16}, -{62,-35,17}, -{62,-35,18}, -{62,-35,19}, -{62,-35,20}, -{62,-35,21}, -{62,-35,22}, -{62,-35,23}, -{62,-35,24}, -{62,-35,25}, -{62,-35,26}, -{62,-35,27}, -{62,-35,28}, -{62,-35,29}, -{62,-35,30}, -{62,-35,31}, -{62,-35,32}, -{62,-35,33}, -{62,-35,34}, -{62,-35,35}, -{62,-35,36}, -{62,-35,37}, -{62,-35,38}, -{62,-35,39}, -{62,-35,40}, -{62,-35,41}, -{62,-35,42}, -{62,-35,43}, -{62,-35,44}, -{62,-35,45}, -{62,-35,46}, -{62,-35,47}, -{62,-35,48}, -{62,-35,49}, -{62,-35,50}, -{62,-35,51}, -{62,-35,52}, -{62,-35,53}, -{62,-35,54}, -{62,-35,55}, -{62,-35,56}, -{62,-35,57}, -{62,-35,58}, -{62,-35,59}, -{62,-35,60}, -{62,-35,61}, -{62,-35,62}, -{62,-35,63}, -{62,-35,64}, -{62,-34,-12}, -{62,-34,-11}, -{62,-34,-10}, -{62,-34,-9}, -{62,-34,-8}, -{62,-34,-7}, -{62,-34,-6}, -{62,-34,-5}, -{62,-34,-4}, -{62,-34,-3}, -{62,-34,-2}, -{62,-34,-1}, -{62,-34,0}, -{62,-34,1}, -{62,-34,2}, -{62,-34,3}, -{62,-34,4}, -{62,-34,5}, -{62,-34,6}, -{62,-34,7}, -{62,-34,8}, -{62,-34,9}, -{62,-34,10}, -{62,-34,11}, -{62,-34,12}, -{62,-34,13}, -{62,-34,14}, -{62,-34,15}, -{62,-34,16}, -{62,-34,17}, -{62,-34,18}, -{62,-34,19}, -{62,-34,20}, -{62,-34,21}, -{62,-34,22}, -{62,-34,23}, -{62,-34,24}, -{62,-34,25}, -{62,-34,26}, -{62,-34,27}, -{62,-34,28}, -{62,-34,29}, -{62,-34,30}, -{62,-34,31}, -{62,-34,32}, -{62,-34,33}, -{62,-34,34}, -{62,-34,35}, -{62,-34,36}, -{62,-34,37}, -{62,-34,38}, -{62,-34,39}, -{62,-34,40}, -{62,-34,41}, -{62,-34,42}, -{62,-34,43}, -{62,-34,44}, -{62,-34,45}, -{62,-34,46}, -{62,-34,47}, -{62,-34,48}, -{62,-34,49}, -{62,-34,50}, -{62,-34,51}, -{62,-34,52}, -{62,-34,53}, -{62,-34,54}, -{62,-34,55}, -{62,-34,56}, -{62,-34,57}, -{62,-34,58}, -{62,-34,59}, -{62,-34,60}, -{62,-34,61}, -{62,-34,62}, -{62,-34,63}, -{62,-34,64}, -{62,-33,-13}, -{62,-33,-12}, -{62,-33,-11}, -{62,-33,-10}, -{62,-33,-9}, -{62,-33,-8}, -{62,-33,-7}, -{62,-33,-6}, -{62,-33,-5}, -{62,-33,-4}, -{62,-33,-3}, -{62,-33,-2}, -{62,-33,-1}, -{62,-33,0}, -{62,-33,1}, -{62,-33,2}, -{62,-33,3}, -{62,-33,4}, -{62,-33,5}, -{62,-33,6}, -{62,-33,7}, -{62,-33,8}, -{62,-33,9}, -{62,-33,10}, -{62,-33,11}, -{62,-33,12}, -{62,-33,13}, -{62,-33,14}, -{62,-33,15}, -{62,-33,16}, -{62,-33,17}, -{62,-33,18}, -{62,-33,19}, -{62,-33,20}, -{62,-33,21}, -{62,-33,22}, -{62,-33,23}, -{62,-33,24}, -{62,-33,25}, -{62,-33,26}, -{62,-33,27}, -{62,-33,28}, -{62,-33,29}, -{62,-33,30}, -{62,-33,31}, -{62,-33,32}, -{62,-33,33}, -{62,-33,34}, -{62,-33,35}, -{62,-33,36}, -{62,-33,37}, -{62,-33,38}, -{62,-33,39}, -{62,-33,40}, -{62,-33,41}, -{62,-33,42}, -{62,-33,43}, -{62,-33,44}, -{62,-33,45}, -{62,-33,46}, -{62,-33,47}, -{62,-33,48}, -{62,-33,49}, -{62,-33,50}, -{62,-33,51}, -{62,-33,52}, -{62,-33,53}, -{62,-33,54}, -{62,-33,55}, -{62,-33,56}, -{62,-33,57}, -{62,-33,58}, -{62,-33,59}, -{62,-33,60}, -{62,-33,61}, -{62,-33,62}, -{62,-33,63}, -{62,-33,64}, -{62,-32,-15}, -{62,-32,-14}, -{62,-32,-13}, -{62,-32,-12}, -{62,-32,-11}, -{62,-32,-10}, -{62,-32,-9}, -{62,-32,-8}, -{62,-32,-7}, -{62,-32,-6}, -{62,-32,-5}, -{62,-32,-4}, -{62,-32,-3}, -{62,-32,-2}, -{62,-32,-1}, -{62,-32,0}, -{62,-32,1}, -{62,-32,2}, -{62,-32,3}, -{62,-32,4}, -{62,-32,5}, -{62,-32,6}, -{62,-32,7}, -{62,-32,8}, -{62,-32,9}, -{62,-32,10}, -{62,-32,11}, -{62,-32,12}, -{62,-32,13}, -{62,-32,14}, -{62,-32,15}, -{62,-32,16}, -{62,-32,17}, -{62,-32,18}, -{62,-32,19}, -{62,-32,20}, -{62,-32,21}, -{62,-32,22}, -{62,-32,23}, -{62,-32,24}, -{62,-32,25}, -{62,-32,26}, -{62,-32,27}, -{62,-32,28}, -{62,-32,29}, -{62,-32,30}, -{62,-32,31}, -{62,-32,32}, -{62,-32,33}, -{62,-32,34}, -{62,-32,35}, -{62,-32,36}, -{62,-32,37}, -{62,-32,38}, -{62,-32,39}, -{62,-32,40}, -{62,-32,41}, -{62,-32,42}, -{62,-32,43}, -{62,-32,44}, -{62,-32,45}, -{62,-32,46}, -{62,-32,47}, -{62,-32,48}, -{62,-32,49}, -{62,-32,50}, -{62,-32,51}, -{62,-32,52}, -{62,-32,53}, -{62,-32,54}, -{62,-32,55}, -{62,-32,56}, -{62,-32,57}, -{62,-32,58}, -{62,-32,59}, -{62,-32,60}, -{62,-32,61}, -{62,-32,62}, -{62,-32,63}, -{62,-32,64}, -{62,-31,-16}, -{62,-31,-15}, -{62,-31,-14}, -{62,-31,-13}, -{62,-31,-12}, -{62,-31,-11}, -{62,-31,-10}, -{62,-31,-9}, -{62,-31,-8}, -{62,-31,-7}, -{62,-31,-6}, -{62,-31,-5}, -{62,-31,-4}, -{62,-31,-3}, -{62,-31,-2}, -{62,-31,-1}, -{62,-31,0}, -{62,-31,1}, -{62,-31,2}, -{62,-31,3}, -{62,-31,4}, -{62,-31,5}, -{62,-31,6}, -{62,-31,7}, -{62,-31,8}, -{62,-31,9}, -{62,-31,10}, -{62,-31,11}, -{62,-31,12}, -{62,-31,13}, -{62,-31,14}, -{62,-31,15}, -{62,-31,16}, -{62,-31,17}, -{62,-31,18}, -{62,-31,19}, -{62,-31,20}, -{62,-31,21}, -{62,-31,22}, -{62,-31,23}, -{62,-31,24}, -{62,-31,25}, -{62,-31,26}, -{62,-31,27}, -{62,-31,28}, -{62,-31,29}, -{62,-31,30}, -{62,-31,31}, -{62,-31,32}, -{62,-31,33}, -{62,-31,34}, -{62,-31,35}, -{62,-31,36}, -{62,-31,37}, -{62,-31,38}, -{62,-31,39}, -{62,-31,40}, -{62,-31,41}, -{62,-31,42}, -{62,-31,43}, -{62,-31,44}, -{62,-31,45}, -{62,-31,46}, -{62,-31,47}, -{62,-31,48}, -{62,-31,49}, -{62,-31,50}, -{62,-31,51}, -{62,-31,52}, -{62,-31,53}, -{62,-31,54}, -{62,-31,55}, -{62,-31,56}, -{62,-31,57}, -{62,-31,58}, -{62,-31,59}, -{62,-31,60}, -{62,-31,61}, -{62,-31,62}, -{62,-31,63}, -{62,-31,64}, -{62,-30,-18}, -{62,-30,-17}, -{62,-30,-16}, -{62,-30,-15}, -{62,-30,-14}, -{62,-30,-13}, -{62,-30,-12}, -{62,-30,-11}, -{62,-30,-10}, -{62,-30,-9}, -{62,-30,-8}, -{62,-30,-7}, -{62,-30,-6}, -{62,-30,-5}, -{62,-30,-4}, -{62,-30,-3}, -{62,-30,-2}, -{62,-30,-1}, -{62,-30,0}, -{62,-30,1}, -{62,-30,2}, -{62,-30,3}, -{62,-30,4}, -{62,-30,5}, -{62,-30,6}, -{62,-30,7}, -{62,-30,8}, -{62,-30,9}, -{62,-30,10}, -{62,-30,11}, -{62,-30,12}, -{62,-30,13}, -{62,-30,14}, -{62,-30,15}, -{62,-30,16}, -{62,-30,17}, -{62,-30,18}, -{62,-30,19}, -{62,-30,20}, -{62,-30,21}, -{62,-30,22}, -{62,-30,23}, -{62,-30,24}, -{62,-30,25}, -{62,-30,26}, -{62,-30,27}, -{62,-30,28}, -{62,-30,29}, -{62,-30,30}, -{62,-30,31}, -{62,-30,32}, -{62,-30,33}, -{62,-30,34}, -{62,-30,35}, -{62,-30,36}, -{62,-30,37}, -{62,-30,38}, -{62,-30,39}, -{62,-30,40}, -{62,-30,41}, -{62,-30,42}, -{62,-30,43}, -{62,-30,44}, -{62,-30,45}, -{62,-30,46}, -{62,-30,47}, -{62,-30,48}, -{62,-30,49}, -{62,-30,50}, -{62,-30,51}, -{62,-30,52}, -{62,-30,53}, -{62,-30,54}, -{62,-30,55}, -{62,-30,56}, -{62,-30,57}, -{62,-30,58}, -{62,-30,59}, -{62,-30,60}, -{62,-30,61}, -{62,-30,62}, -{62,-30,63}, -{62,-30,64}, -{62,-29,-19}, -{62,-29,-18}, -{62,-29,-17}, -{62,-29,-16}, -{62,-29,-15}, -{62,-29,-14}, -{62,-29,-13}, -{62,-29,-12}, -{62,-29,-11}, -{62,-29,-10}, -{62,-29,-9}, -{62,-29,-8}, -{62,-29,-7}, -{62,-29,-6}, -{62,-29,-5}, -{62,-29,-4}, -{62,-29,-3}, -{62,-29,-2}, -{62,-29,-1}, -{62,-29,0}, -{62,-29,1}, -{62,-29,2}, -{62,-29,3}, -{62,-29,4}, -{62,-29,5}, -{62,-29,6}, -{62,-29,7}, -{62,-29,8}, -{62,-29,9}, -{62,-29,10}, -{62,-29,11}, -{62,-29,12}, -{62,-29,13}, -{62,-29,14}, -{62,-29,15}, -{62,-29,16}, -{62,-29,17}, -{62,-29,18}, -{62,-29,19}, -{62,-29,20}, -{62,-29,21}, -{62,-29,22}, -{62,-29,23}, -{62,-29,24}, -{62,-29,25}, -{62,-29,26}, -{62,-29,27}, -{62,-29,28}, -{62,-29,29}, -{62,-29,30}, -{62,-29,31}, -{62,-29,32}, -{62,-29,33}, -{62,-29,34}, -{62,-29,35}, -{62,-29,36}, -{62,-29,37}, -{62,-29,38}, -{62,-29,39}, -{62,-29,40}, -{62,-29,41}, -{62,-29,42}, -{62,-29,43}, -{62,-29,44}, -{62,-29,45}, -{62,-29,46}, -{62,-29,47}, -{62,-29,48}, -{62,-29,49}, -{62,-29,50}, -{62,-29,51}, -{62,-29,52}, -{62,-29,53}, -{62,-29,54}, -{62,-29,55}, -{62,-29,56}, -{62,-29,57}, -{62,-29,58}, -{62,-29,59}, -{62,-29,60}, -{62,-29,61}, -{62,-29,62}, -{62,-29,63}, -{62,-29,64}, -{62,-28,-21}, -{62,-28,-20}, -{62,-28,-19}, -{62,-28,-18}, -{62,-28,-17}, -{62,-28,-16}, -{62,-28,-15}, -{62,-28,-14}, -{62,-28,-13}, -{62,-28,-12}, -{62,-28,-11}, -{62,-28,-10}, -{62,-28,-9}, -{62,-28,-8}, -{62,-28,-7}, -{62,-28,-6}, -{62,-28,-5}, -{62,-28,-4}, -{62,-28,-3}, -{62,-28,-2}, -{62,-28,-1}, -{62,-28,0}, -{62,-28,1}, -{62,-28,2}, -{62,-28,3}, -{62,-28,4}, -{62,-28,5}, -{62,-28,6}, -{62,-28,7}, -{62,-28,8}, -{62,-28,9}, -{62,-28,10}, -{62,-28,11}, -{62,-28,12}, -{62,-28,13}, -{62,-28,14}, -{62,-28,15}, -{62,-28,16}, -{62,-28,17}, -{62,-28,18}, -{62,-28,19}, -{62,-28,20}, -{62,-28,21}, -{62,-28,22}, -{62,-28,23}, -{62,-28,24}, -{62,-28,25}, -{62,-28,26}, -{62,-28,27}, -{62,-28,28}, -{62,-28,29}, -{62,-28,30}, -{62,-28,31}, -{62,-28,32}, -{62,-28,33}, -{62,-28,34}, -{62,-28,35}, -{62,-28,36}, -{62,-28,37}, -{62,-28,38}, -{62,-28,39}, -{62,-28,40}, -{62,-28,41}, -{62,-28,42}, -{62,-28,43}, -{62,-28,44}, -{62,-28,45}, -{62,-28,46}, -{62,-28,47}, -{62,-28,48}, -{62,-28,49}, -{62,-28,50}, -{62,-28,51}, -{62,-28,52}, -{62,-28,53}, -{62,-28,54}, -{62,-28,55}, -{62,-28,56}, -{62,-28,57}, -{62,-28,58}, -{62,-28,59}, -{62,-28,60}, -{62,-28,61}, -{62,-28,62}, -{62,-28,63}, -{62,-28,64}, -{62,-27,-22}, -{62,-27,-21}, -{62,-27,-20}, -{62,-27,-19}, -{62,-27,-18}, -{62,-27,-17}, -{62,-27,-16}, -{62,-27,-15}, -{62,-27,-14}, -{62,-27,-13}, -{62,-27,-12}, -{62,-27,-11}, -{62,-27,-10}, -{62,-27,-9}, -{62,-27,-8}, -{62,-27,-7}, -{62,-27,-6}, -{62,-27,-5}, -{62,-27,-4}, -{62,-27,-3}, -{62,-27,-2}, -{62,-27,-1}, -{62,-27,0}, -{62,-27,1}, -{62,-27,2}, -{62,-27,3}, -{62,-27,4}, -{62,-27,5}, -{62,-27,6}, -{62,-27,7}, -{62,-27,8}, -{62,-27,9}, -{62,-27,10}, -{62,-27,11}, -{62,-27,12}, -{62,-27,13}, -{62,-27,14}, -{62,-27,15}, -{62,-27,16}, -{62,-27,17}, -{62,-27,18}, -{62,-27,19}, -{62,-27,20}, -{62,-27,21}, -{62,-27,22}, -{62,-27,23}, -{62,-27,24}, -{62,-27,25}, -{62,-27,26}, -{62,-27,27}, -{62,-27,28}, -{62,-27,29}, -{62,-27,30}, -{62,-27,31}, -{62,-27,32}, -{62,-27,33}, -{62,-27,34}, -{62,-27,35}, -{62,-27,36}, -{62,-27,37}, -{62,-27,38}, -{62,-27,39}, -{62,-27,40}, -{62,-27,41}, -{62,-27,42}, -{62,-27,43}, -{62,-27,44}, -{62,-27,45}, -{62,-27,46}, -{62,-27,47}, -{62,-27,48}, -{62,-27,49}, -{62,-27,50}, -{62,-27,51}, -{62,-27,52}, -{62,-27,53}, -{62,-27,54}, -{62,-27,55}, -{62,-27,56}, -{62,-27,57}, -{62,-27,58}, -{62,-27,59}, -{62,-27,60}, -{62,-27,61}, -{62,-27,62}, -{62,-27,63}, -{62,-27,64}, -{62,-26,-23}, -{62,-26,-22}, -{62,-26,-21}, -{62,-26,-20}, -{62,-26,-19}, -{62,-26,-18}, -{62,-26,-17}, -{62,-26,-16}, -{62,-26,-15}, -{62,-26,-14}, -{62,-26,-13}, -{62,-26,-12}, -{62,-26,-11}, -{62,-26,-10}, -{62,-26,-9}, -{62,-26,-8}, -{62,-26,-7}, -{62,-26,-6}, -{62,-26,-5}, -{62,-26,-4}, -{62,-26,-3}, -{62,-26,-2}, -{62,-26,-1}, -{62,-26,0}, -{62,-26,1}, -{62,-26,2}, -{62,-26,3}, -{62,-26,4}, -{62,-26,5}, -{62,-26,6}, -{62,-26,7}, -{62,-26,8}, -{62,-26,9}, -{62,-26,10}, -{62,-26,11}, -{62,-26,12}, -{62,-26,13}, -{62,-26,14}, -{62,-26,15}, -{62,-26,16}, -{62,-26,17}, -{62,-26,18}, -{62,-26,19}, -{62,-26,20}, -{62,-26,21}, -{62,-26,22}, -{62,-26,23}, -{62,-26,24}, -{62,-26,25}, -{62,-26,26}, -{62,-26,27}, -{62,-26,28}, -{62,-26,29}, -{62,-26,30}, -{62,-26,31}, -{62,-26,32}, -{62,-26,33}, -{62,-26,34}, -{62,-26,35}, -{62,-26,36}, -{62,-26,37}, -{62,-26,38}, -{62,-26,39}, -{62,-26,40}, -{62,-26,41}, -{62,-26,42}, -{62,-26,43}, -{62,-26,44}, -{62,-26,45}, -{62,-26,46}, -{62,-26,47}, -{62,-26,48}, -{62,-26,49}, -{62,-26,50}, -{62,-26,51}, -{62,-26,52}, -{62,-26,53}, -{62,-26,54}, -{62,-26,55}, -{62,-26,56}, -{62,-26,57}, -{62,-26,58}, -{62,-26,59}, -{62,-26,60}, -{62,-26,61}, -{62,-26,62}, -{62,-26,63}, -{62,-26,64}, -{62,-25,-25}, -{62,-25,-24}, -{62,-25,-23}, -{62,-25,-22}, -{62,-25,-21}, -{62,-25,-20}, -{62,-25,-19}, -{62,-25,-18}, -{62,-25,-17}, -{62,-25,-16}, -{62,-25,-15}, -{62,-25,-14}, -{62,-25,-13}, -{62,-25,-12}, -{62,-25,-11}, -{62,-25,-10}, -{62,-25,-9}, -{62,-25,-8}, -{62,-25,-7}, -{62,-25,-6}, -{62,-25,-5}, -{62,-25,-4}, -{62,-25,-3}, -{62,-25,-2}, -{62,-25,-1}, -{62,-25,0}, -{62,-25,1}, -{62,-25,2}, -{62,-25,3}, -{62,-25,4}, -{62,-25,5}, -{62,-25,6}, -{62,-25,7}, -{62,-25,8}, -{62,-25,9}, -{62,-25,10}, -{62,-25,11}, -{62,-25,12}, -{62,-25,13}, -{62,-25,14}, -{62,-25,15}, -{62,-25,16}, -{62,-25,17}, -{62,-25,18}, -{62,-25,19}, -{62,-25,20}, -{62,-25,21}, -{62,-25,22}, -{62,-25,23}, -{62,-25,24}, -{62,-25,25}, -{62,-25,26}, -{62,-25,27}, -{62,-25,28}, -{62,-25,29}, -{62,-25,30}, -{62,-25,31}, -{62,-25,32}, -{62,-25,33}, -{62,-25,34}, -{62,-25,35}, -{62,-25,36}, -{62,-25,37}, -{62,-25,38}, -{62,-25,39}, -{62,-25,40}, -{62,-25,41}, -{62,-25,42}, -{62,-25,43}, -{62,-25,44}, -{62,-25,45}, -{62,-25,46}, -{62,-25,47}, -{62,-25,48}, -{62,-25,49}, -{62,-25,50}, -{62,-25,51}, -{62,-25,52}, -{62,-25,53}, -{62,-25,54}, -{62,-25,55}, -{62,-25,56}, -{62,-25,57}, -{62,-25,58}, -{62,-25,59}, -{62,-25,60}, -{62,-25,61}, -{62,-25,62}, -{62,-25,63}, -{62,-25,64}, -{62,-24,-26}, -{62,-24,-25}, -{62,-24,-24}, -{62,-24,-23}, -{62,-24,-22}, -{62,-24,-21}, -{62,-24,-20}, -{62,-24,-19}, -{62,-24,-18}, -{62,-24,-17}, -{62,-24,-16}, -{62,-24,-15}, -{62,-24,-14}, -{62,-24,-13}, -{62,-24,-12}, -{62,-24,-11}, -{62,-24,-10}, -{62,-24,-9}, -{62,-24,-8}, -{62,-24,-7}, -{62,-24,-6}, -{62,-24,-5}, -{62,-24,-4}, -{62,-24,-3}, -{62,-24,-2}, -{62,-24,-1}, -{62,-24,0}, -{62,-24,1}, -{62,-24,2}, -{62,-24,3}, -{62,-24,4}, -{62,-24,5}, -{62,-24,6}, -{62,-24,7}, -{62,-24,8}, -{62,-24,9}, -{62,-24,10}, -{62,-24,11}, -{62,-24,12}, -{62,-24,13}, -{62,-24,14}, -{62,-24,15}, -{62,-24,16}, -{62,-24,17}, -{62,-24,18}, -{62,-24,19}, -{62,-24,20}, -{62,-24,21}, -{62,-24,22}, -{62,-24,23}, -{62,-24,24}, -{62,-24,25}, -{62,-24,26}, -{62,-24,27}, -{62,-24,28}, -{62,-24,29}, -{62,-24,30}, -{62,-24,31}, -{62,-24,32}, -{62,-24,33}, -{62,-24,34}, -{62,-24,35}, -{62,-24,36}, -{62,-24,37}, -{62,-24,38}, -{62,-24,39}, -{62,-24,40}, -{62,-24,41}, -{62,-24,42}, -{62,-24,43}, -{62,-24,44}, -{62,-24,45}, -{62,-24,46}, -{62,-24,47}, -{62,-24,48}, -{62,-24,49}, -{62,-24,50}, -{62,-24,51}, -{62,-24,52}, -{62,-24,53}, -{62,-24,54}, -{62,-24,55}, -{62,-24,56}, -{62,-24,57}, -{62,-24,58}, -{62,-24,59}, -{62,-24,60}, -{62,-24,61}, -{62,-24,62}, -{62,-24,63}, -{62,-24,64}, -{62,-23,-27}, -{62,-23,-26}, -{62,-23,-25}, -{62,-23,-24}, -{62,-23,-23}, -{62,-23,-22}, -{62,-23,-21}, -{62,-23,-20}, -{62,-23,-19}, -{62,-23,-18}, -{62,-23,-17}, -{62,-23,-16}, -{62,-23,-15}, -{62,-23,-14}, -{62,-23,-13}, -{62,-23,-12}, -{62,-23,-11}, -{62,-23,-10}, -{62,-23,-9}, -{62,-23,-8}, -{62,-23,-7}, -{62,-23,-6}, -{62,-23,-5}, -{62,-23,-4}, -{62,-23,-3}, -{62,-23,-2}, -{62,-23,-1}, -{62,-23,0}, -{62,-23,1}, -{62,-23,2}, -{62,-23,3}, -{62,-23,4}, -{62,-23,5}, -{62,-23,6}, -{62,-23,7}, -{62,-23,8}, -{62,-23,9}, -{62,-23,10}, -{62,-23,11}, -{62,-23,12}, -{62,-23,13}, -{62,-23,14}, -{62,-23,15}, -{62,-23,16}, -{62,-23,17}, -{62,-23,18}, -{62,-23,19}, -{62,-23,20}, -{62,-23,21}, -{62,-23,22}, -{62,-23,23}, -{62,-23,24}, -{62,-23,25}, -{62,-23,26}, -{62,-23,27}, -{62,-23,28}, -{62,-23,29}, -{62,-23,30}, -{62,-23,31}, -{62,-23,32}, -{62,-23,33}, -{62,-23,34}, -{62,-23,35}, -{62,-23,36}, -{62,-23,37}, -{62,-23,38}, -{62,-23,39}, -{62,-23,40}, -{62,-23,41}, -{62,-23,42}, -{62,-23,43}, -{62,-23,44}, -{62,-23,45}, -{62,-23,46}, -{62,-23,47}, -{62,-23,48}, -{62,-23,49}, -{62,-23,50}, -{62,-23,51}, -{62,-23,52}, -{62,-23,53}, -{62,-23,54}, -{62,-23,55}, -{62,-23,56}, -{62,-23,57}, -{62,-23,58}, -{62,-23,59}, -{62,-23,60}, -{62,-23,61}, -{62,-23,62}, -{62,-23,63}, -{62,-23,64}, -{62,-22,-29}, -{62,-22,-28}, -{62,-22,-27}, -{62,-22,-26}, -{62,-22,-25}, -{62,-22,-24}, -{62,-22,-23}, -{62,-22,-22}, -{62,-22,-21}, -{62,-22,-20}, -{62,-22,-19}, -{62,-22,-18}, -{62,-22,-17}, -{62,-22,-16}, -{62,-22,-15}, -{62,-22,-14}, -{62,-22,-13}, -{62,-22,-12}, -{62,-22,-11}, -{62,-22,-10}, -{62,-22,-9}, -{62,-22,-8}, -{62,-22,-7}, -{62,-22,-6}, -{62,-22,-5}, -{62,-22,-4}, -{62,-22,-3}, -{62,-22,-2}, -{62,-22,-1}, -{62,-22,0}, -{62,-22,1}, -{62,-22,2}, -{62,-22,3}, -{62,-22,4}, -{62,-22,5}, -{62,-22,6}, -{62,-22,7}, -{62,-22,8}, -{62,-22,9}, -{62,-22,10}, -{62,-22,11}, -{62,-22,12}, -{62,-22,13}, -{62,-22,14}, -{62,-22,15}, -{62,-22,16}, -{62,-22,17}, -{62,-22,18}, -{62,-22,19}, -{62,-22,20}, -{62,-22,21}, -{62,-22,22}, -{62,-22,23}, -{62,-22,24}, -{62,-22,25}, -{62,-22,26}, -{62,-22,27}, -{62,-22,28}, -{62,-22,29}, -{62,-22,30}, -{62,-22,31}, -{62,-22,32}, -{62,-22,33}, -{62,-22,34}, -{62,-22,35}, -{62,-22,36}, -{62,-22,37}, -{62,-22,38}, -{62,-22,39}, -{62,-22,40}, -{62,-22,41}, -{62,-22,42}, -{62,-22,43}, -{62,-22,44}, -{62,-22,45}, -{62,-22,46}, -{62,-22,47}, -{62,-22,48}, -{62,-22,49}, -{62,-22,50}, -{62,-22,51}, -{62,-22,52}, -{62,-22,53}, -{62,-22,54}, -{62,-22,55}, -{62,-22,56}, -{62,-22,57}, -{62,-22,58}, -{62,-22,59}, -{62,-22,60}, -{62,-22,61}, -{62,-22,62}, -{62,-22,63}, -{62,-22,64}, -{62,-21,-30}, -{62,-21,-29}, -{62,-21,-28}, -{62,-21,-27}, -{62,-21,-26}, -{62,-21,-25}, -{62,-21,-24}, -{62,-21,-23}, -{62,-21,-22}, -{62,-21,-21}, -{62,-21,-20}, -{62,-21,-19}, -{62,-21,-18}, -{62,-21,-17}, -{62,-21,-16}, -{62,-21,-15}, -{62,-21,-14}, -{62,-21,-13}, -{62,-21,-12}, -{62,-21,-11}, -{62,-21,-10}, -{62,-21,-9}, -{62,-21,-8}, -{62,-21,-7}, -{62,-21,-6}, -{62,-21,-5}, -{62,-21,-4}, -{62,-21,-3}, -{62,-21,-2}, -{62,-21,-1}, -{62,-21,0}, -{62,-21,1}, -{62,-21,2}, -{62,-21,3}, -{62,-21,4}, -{62,-21,5}, -{62,-21,6}, -{62,-21,7}, -{62,-21,8}, -{62,-21,9}, -{62,-21,10}, -{62,-21,11}, -{62,-21,12}, -{62,-21,13}, -{62,-21,14}, -{62,-21,15}, -{62,-21,16}, -{62,-21,17}, -{62,-21,18}, -{62,-21,19}, -{62,-21,20}, -{62,-21,21}, -{62,-21,22}, -{62,-21,23}, -{62,-21,24}, -{62,-21,25}, -{62,-21,26}, -{62,-21,27}, -{62,-21,28}, -{62,-21,29}, -{62,-21,30}, -{62,-21,31}, -{62,-21,32}, -{62,-21,33}, -{62,-21,34}, -{62,-21,35}, -{62,-21,36}, -{62,-21,37}, -{62,-21,38}, -{62,-21,39}, -{62,-21,40}, -{62,-21,41}, -{62,-21,42}, -{62,-21,43}, -{62,-21,44}, -{62,-21,45}, -{62,-21,46}, -{62,-21,47}, -{62,-21,48}, -{62,-21,49}, -{62,-21,50}, -{62,-21,51}, -{62,-21,52}, -{62,-21,53}, -{62,-21,54}, -{62,-21,55}, -{62,-21,56}, -{62,-21,57}, -{62,-21,58}, -{62,-21,59}, -{62,-21,60}, -{62,-21,61}, -{62,-21,62}, -{62,-21,63}, -{62,-21,64}, -{62,-20,-31}, -{62,-20,-30}, -{62,-20,-29}, -{62,-20,-28}, -{62,-20,-27}, -{62,-20,-26}, -{62,-20,-25}, -{62,-20,-24}, -{62,-20,-23}, -{62,-20,-22}, -{62,-20,-21}, -{62,-20,-20}, -{62,-20,-19}, -{62,-20,-18}, -{62,-20,-17}, -{62,-20,-16}, -{62,-20,-15}, -{62,-20,-14}, -{62,-20,-13}, -{62,-20,-12}, -{62,-20,-11}, -{62,-20,-10}, -{62,-20,-9}, -{62,-20,-8}, -{62,-20,-7}, -{62,-20,-6}, -{62,-20,-5}, -{62,-20,-4}, -{62,-20,-3}, -{62,-20,-2}, -{62,-20,-1}, -{62,-20,0}, -{62,-20,1}, -{62,-20,2}, -{62,-20,3}, -{62,-20,4}, -{62,-20,5}, -{62,-20,6}, -{62,-20,7}, -{62,-20,8}, -{62,-20,9}, -{62,-20,10}, -{62,-20,11}, -{62,-20,12}, -{62,-20,13}, -{62,-20,14}, -{62,-20,15}, -{62,-20,16}, -{62,-20,17}, -{62,-20,18}, -{62,-20,19}, -{62,-20,20}, -{62,-20,21}, -{62,-20,22}, -{62,-20,23}, -{62,-20,24}, -{62,-20,25}, -{62,-20,26}, -{62,-20,27}, -{62,-20,28}, -{62,-20,29}, -{62,-20,30}, -{62,-20,31}, -{62,-20,32}, -{62,-20,33}, -{62,-20,34}, -{62,-20,35}, -{62,-20,36}, -{62,-20,37}, -{62,-20,38}, -{62,-20,39}, -{62,-20,40}, -{62,-20,41}, -{62,-20,42}, -{62,-20,43}, -{62,-20,44}, -{62,-20,45}, -{62,-20,46}, -{62,-20,47}, -{62,-20,48}, -{62,-20,49}, -{62,-20,50}, -{62,-20,51}, -{62,-20,52}, -{62,-20,53}, -{62,-20,54}, -{62,-20,55}, -{62,-20,56}, -{62,-20,57}, -{62,-20,58}, -{62,-20,59}, -{62,-20,60}, -{62,-20,61}, -{62,-20,62}, -{62,-20,63}, -{62,-20,64}, -{62,-20,65}, -{62,-19,-33}, -{62,-19,-32}, -{62,-19,-31}, -{62,-19,-30}, -{62,-19,-29}, -{62,-19,-28}, -{62,-19,-27}, -{62,-19,-26}, -{62,-19,-25}, -{62,-19,-24}, -{62,-19,-23}, -{62,-19,-22}, -{62,-19,-21}, -{62,-19,-20}, -{62,-19,-19}, -{62,-19,-18}, -{62,-19,-17}, -{62,-19,-16}, -{62,-19,-15}, -{62,-19,-14}, -{62,-19,-13}, -{62,-19,-12}, -{62,-19,-11}, -{62,-19,-10}, -{62,-19,-9}, -{62,-19,-8}, -{62,-19,-7}, -{62,-19,-6}, -{62,-19,-5}, -{62,-19,-4}, -{62,-19,-3}, -{62,-19,-2}, -{62,-19,-1}, -{62,-19,0}, -{62,-19,1}, -{62,-19,2}, -{62,-19,3}, -{62,-19,4}, -{62,-19,5}, -{62,-19,6}, -{62,-19,7}, -{62,-19,8}, -{62,-19,9}, -{62,-19,10}, -{62,-19,11}, -{62,-19,12}, -{62,-19,13}, -{62,-19,14}, -{62,-19,15}, -{62,-19,16}, -{62,-19,17}, -{62,-19,18}, -{62,-19,19}, -{62,-19,20}, -{62,-19,21}, -{62,-19,22}, -{62,-19,23}, -{62,-19,24}, -{62,-19,25}, -{62,-19,26}, -{62,-19,27}, -{62,-19,28}, -{62,-19,29}, -{62,-19,30}, -{62,-19,31}, -{62,-19,32}, -{62,-19,33}, -{62,-19,34}, -{62,-19,35}, -{62,-19,36}, -{62,-19,37}, -{62,-19,38}, -{62,-19,39}, -{62,-19,40}, -{62,-19,41}, -{62,-19,42}, -{62,-19,43}, -{62,-19,44}, -{62,-19,45}, -{62,-19,46}, -{62,-19,47}, -{62,-19,48}, -{62,-19,49}, -{62,-19,50}, -{62,-19,51}, -{62,-19,52}, -{62,-19,53}, -{62,-19,54}, -{62,-19,55}, -{62,-19,56}, -{62,-19,57}, -{62,-19,58}, -{62,-19,59}, -{62,-19,60}, -{62,-19,61}, -{62,-19,62}, -{62,-19,63}, -{62,-19,64}, -{62,-19,65}, -{62,-18,-34}, -{62,-18,-33}, -{62,-18,-32}, -{62,-18,-31}, -{62,-18,-30}, -{62,-18,-29}, -{62,-18,-28}, -{62,-18,-27}, -{62,-18,-26}, -{62,-18,-25}, -{62,-18,-24}, -{62,-18,-23}, -{62,-18,-22}, -{62,-18,-21}, -{62,-18,-20}, -{62,-18,-19}, -{62,-18,-18}, -{62,-18,-17}, -{62,-18,-16}, -{62,-18,-15}, -{62,-18,-14}, -{62,-18,-13}, -{62,-18,-12}, -{62,-18,-11}, -{62,-18,-10}, -{62,-18,-9}, -{62,-18,-8}, -{62,-18,-7}, -{62,-18,-6}, -{62,-18,-5}, -{62,-18,-4}, -{62,-18,-3}, -{62,-18,-2}, -{62,-18,-1}, -{62,-18,0}, -{62,-18,1}, -{62,-18,2}, -{62,-18,3}, -{62,-18,4}, -{62,-18,5}, -{62,-18,6}, -{62,-18,7}, -{62,-18,8}, -{62,-18,9}, -{62,-18,10}, -{62,-18,11}, -{62,-18,12}, -{62,-18,13}, -{62,-18,14}, -{62,-18,15}, -{62,-18,16}, -{62,-18,17}, -{62,-18,18}, -{62,-18,19}, -{62,-18,20}, -{62,-18,21}, -{62,-18,22}, -{62,-18,23}, -{62,-18,24}, -{62,-18,25}, -{62,-18,26}, -{62,-18,27}, -{62,-18,28}, -{62,-18,29}, -{62,-18,30}, -{62,-18,31}, -{62,-18,32}, -{62,-18,33}, -{62,-18,34}, -{62,-18,35}, -{62,-18,36}, -{62,-18,37}, -{62,-18,38}, -{62,-18,39}, -{62,-18,40}, -{62,-18,41}, -{62,-18,42}, -{62,-18,43}, -{62,-18,44}, -{62,-18,45}, -{62,-18,46}, -{62,-18,47}, -{62,-18,48}, -{62,-18,49}, -{62,-18,50}, -{62,-18,51}, -{62,-18,52}, -{62,-18,53}, -{62,-18,54}, -{62,-18,55}, -{62,-18,56}, -{62,-18,57}, -{62,-18,58}, -{62,-18,59}, -{62,-18,60}, -{62,-18,61}, -{62,-18,62}, -{62,-18,63}, -{62,-18,64}, -{62,-18,65}, -{62,-17,-35}, -{62,-17,-34}, -{62,-17,-33}, -{62,-17,-32}, -{62,-17,-31}, -{62,-17,-30}, -{62,-17,-29}, -{62,-17,-28}, -{62,-17,-27}, -{62,-17,-26}, -{62,-17,-25}, -{62,-17,-24}, -{62,-17,-23}, -{62,-17,-22}, -{62,-17,-21}, -{62,-17,-20}, -{62,-17,-19}, -{62,-17,-18}, -{62,-17,-17}, -{62,-17,-16}, -{62,-17,-15}, -{62,-17,-14}, -{62,-17,-13}, -{62,-17,-12}, -{62,-17,-11}, -{62,-17,-10}, -{62,-17,-9}, -{62,-17,-8}, -{62,-17,-7}, -{62,-17,-6}, -{62,-17,-5}, -{62,-17,-4}, -{62,-17,-3}, -{62,-17,-2}, -{62,-17,-1}, -{62,-17,0}, -{62,-17,1}, -{62,-17,2}, -{62,-17,3}, -{62,-17,4}, -{62,-17,5}, -{62,-17,6}, -{62,-17,7}, -{62,-17,8}, -{62,-17,9}, -{62,-17,10}, -{62,-17,11}, -{62,-17,12}, -{62,-17,13}, -{62,-17,14}, -{62,-17,15}, -{62,-17,16}, -{62,-17,17}, -{62,-17,18}, -{62,-17,19}, -{62,-17,20}, -{62,-17,21}, -{62,-17,22}, -{62,-17,23}, -{62,-17,24}, -{62,-17,25}, -{62,-17,26}, -{62,-17,27}, -{62,-17,28}, -{62,-17,29}, -{62,-17,30}, -{62,-17,31}, -{62,-17,32}, -{62,-17,33}, -{62,-17,34}, -{62,-17,35}, -{62,-17,36}, -{62,-17,37}, -{62,-17,38}, -{62,-17,39}, -{62,-17,40}, -{62,-17,41}, -{62,-17,42}, -{62,-17,43}, -{62,-17,44}, -{62,-17,45}, -{62,-17,46}, -{62,-17,47}, -{62,-17,48}, -{62,-17,49}, -{62,-17,50}, -{62,-17,51}, -{62,-17,52}, -{62,-17,53}, -{62,-17,54}, -{62,-17,55}, -{62,-17,56}, -{62,-17,57}, -{62,-17,58}, -{62,-17,59}, -{62,-17,60}, -{62,-17,61}, -{62,-17,62}, -{62,-17,63}, -{62,-17,64}, -{62,-17,65}, -{62,-16,-37}, -{62,-16,-36}, -{62,-16,-35}, -{62,-16,-34}, -{62,-16,-33}, -{62,-16,-32}, -{62,-16,-31}, -{62,-16,-30}, -{62,-16,-29}, -{62,-16,-28}, -{62,-16,-27}, -{62,-16,-26}, -{62,-16,-25}, -{62,-16,-24}, -{62,-16,-23}, -{62,-16,-22}, -{62,-16,-21}, -{62,-16,-20}, -{62,-16,-19}, -{62,-16,-18}, -{62,-16,-17}, -{62,-16,-16}, -{62,-16,-15}, -{62,-16,-14}, -{62,-16,-13}, -{62,-16,-12}, -{62,-16,-11}, -{62,-16,-10}, -{62,-16,-9}, -{62,-16,-8}, -{62,-16,-7}, -{62,-16,-6}, -{62,-16,-5}, -{62,-16,-4}, -{62,-16,-3}, -{62,-16,-2}, -{62,-16,-1}, -{62,-16,0}, -{62,-16,1}, -{62,-16,2}, -{62,-16,3}, -{62,-16,4}, -{62,-16,5}, -{62,-16,6}, -{62,-16,7}, -{62,-16,8}, -{62,-16,9}, -{62,-16,10}, -{62,-16,11}, -{62,-16,12}, -{62,-16,13}, -{62,-16,14}, -{62,-16,15}, -{62,-16,16}, -{62,-16,17}, -{62,-16,18}, -{62,-16,19}, -{62,-16,20}, -{62,-16,21}, -{62,-16,22}, -{62,-16,23}, -{62,-16,24}, -{62,-16,25}, -{62,-16,26}, -{62,-16,27}, -{62,-16,28}, -{62,-16,29}, -{62,-16,30}, -{62,-16,31}, -{62,-16,32}, -{62,-16,33}, -{62,-16,34}, -{62,-16,35}, -{62,-16,36}, -{62,-16,37}, -{62,-16,38}, -{62,-16,39}, -{62,-16,40}, -{62,-16,41}, -{62,-16,42}, -{62,-16,43}, -{62,-16,44}, -{62,-16,45}, -{62,-16,46}, -{62,-16,47}, -{62,-16,48}, -{62,-16,49}, -{62,-16,50}, -{62,-16,51}, -{62,-16,52}, -{62,-16,53}, -{62,-16,54}, -{62,-16,55}, -{62,-16,56}, -{62,-16,57}, -{62,-16,58}, -{62,-16,59}, -{62,-16,60}, -{62,-16,61}, -{62,-16,62}, -{62,-16,63}, -{62,-16,64}, -{62,-16,65}, -{62,-15,-38}, -{62,-15,-37}, -{62,-15,-36}, -{62,-15,-35}, -{62,-15,-34}, -{62,-15,-33}, -{62,-15,-32}, -{62,-15,-31}, -{62,-15,-30}, -{62,-15,-29}, -{62,-15,-28}, -{62,-15,-27}, -{62,-15,-26}, -{62,-15,-25}, -{62,-15,-24}, -{62,-15,-23}, -{62,-15,-22}, -{62,-15,-21}, -{62,-15,-20}, -{62,-15,-19}, -{62,-15,-18}, -{62,-15,-17}, -{62,-15,-16}, -{62,-15,-15}, -{62,-15,-14}, -{62,-15,-13}, -{62,-15,-12}, -{62,-15,-11}, -{62,-15,-10}, -{62,-15,-9}, -{62,-15,-8}, -{62,-15,-7}, -{62,-15,-6}, -{62,-15,-5}, -{62,-15,-4}, -{62,-15,-3}, -{62,-15,-2}, -{62,-15,-1}, -{62,-15,0}, -{62,-15,1}, -{62,-15,2}, -{62,-15,3}, -{62,-15,4}, -{62,-15,5}, -{62,-15,6}, -{62,-15,7}, -{62,-15,8}, -{62,-15,9}, -{62,-15,10}, -{62,-15,11}, -{62,-15,12}, -{62,-15,13}, -{62,-15,14}, -{62,-15,15}, -{62,-15,16}, -{62,-15,17}, -{62,-15,18}, -{62,-15,19}, -{62,-15,20}, -{62,-15,21}, -{62,-15,22}, -{62,-15,23}, -{62,-15,24}, -{62,-15,25}, -{62,-15,26}, -{62,-15,27}, -{62,-15,28}, -{62,-15,29}, -{62,-15,30}, -{62,-15,31}, -{62,-15,32}, -{62,-15,33}, -{62,-15,34}, -{62,-15,35}, -{62,-15,36}, -{62,-15,37}, -{62,-15,38}, -{62,-15,39}, -{62,-15,40}, -{62,-15,41}, -{62,-15,42}, -{62,-15,43}, -{62,-15,44}, -{62,-15,45}, -{62,-15,46}, -{62,-15,47}, -{62,-15,48}, -{62,-15,49}, -{62,-15,50}, -{62,-15,51}, -{62,-15,52}, -{62,-15,53}, -{62,-15,54}, -{62,-15,55}, -{62,-15,56}, -{62,-15,57}, -{62,-15,58}, -{62,-15,59}, -{62,-15,60}, -{62,-15,61}, -{62,-15,62}, -{62,-15,63}, -{62,-15,64}, -{62,-15,65}, -{62,-14,-39}, -{62,-14,-38}, -{62,-14,-37}, -{62,-14,-36}, -{62,-14,-35}, -{62,-14,-34}, -{62,-14,-33}, -{62,-14,-32}, -{62,-14,-31}, -{62,-14,-30}, -{62,-14,-29}, -{62,-14,-28}, -{62,-14,-27}, -{62,-14,-26}, -{62,-14,-25}, -{62,-14,-24}, -{62,-14,-23}, -{62,-14,-22}, -{62,-14,-21}, -{62,-14,-20}, -{62,-14,-19}, -{62,-14,-18}, -{62,-14,-17}, -{62,-14,-16}, -{62,-14,-15}, -{62,-14,-14}, -{62,-14,-13}, -{62,-14,-12}, -{62,-14,-11}, -{62,-14,-10}, -{62,-14,-9}, -{62,-14,-8}, -{62,-14,-7}, -{62,-14,-6}, -{62,-14,-5}, -{62,-14,-4}, -{62,-14,-3}, -{62,-14,-2}, -{62,-14,-1}, -{62,-14,0}, -{62,-14,1}, -{62,-14,2}, -{62,-14,3}, -{62,-14,4}, -{62,-14,5}, -{62,-14,6}, -{62,-14,7}, -{62,-14,8}, -{62,-14,9}, -{62,-14,10}, -{62,-14,11}, -{62,-14,12}, -{62,-14,13}, -{62,-14,14}, -{62,-14,15}, -{62,-14,16}, -{62,-14,17}, -{62,-14,18}, -{62,-14,19}, -{62,-14,20}, -{62,-14,21}, -{62,-14,22}, -{62,-14,23}, -{62,-14,24}, -{62,-14,25}, -{62,-14,26}, -{62,-14,27}, -{62,-14,28}, -{62,-14,29}, -{62,-14,30}, -{62,-14,31}, -{62,-14,32}, -{62,-14,33}, -{62,-14,34}, -{62,-14,35}, -{62,-14,36}, -{62,-14,37}, -{62,-14,38}, -{62,-14,39}, -{62,-14,40}, -{62,-14,41}, -{62,-14,42}, -{62,-14,43}, -{62,-14,44}, -{62,-14,45}, -{62,-14,46}, -{62,-14,47}, -{62,-14,48}, -{62,-14,49}, -{62,-14,50}, -{62,-14,51}, -{62,-14,52}, -{62,-14,53}, -{62,-14,54}, -{62,-14,55}, -{62,-14,56}, -{62,-14,57}, -{62,-14,58}, -{62,-14,59}, -{62,-14,60}, -{62,-14,61}, -{62,-14,62}, -{62,-14,63}, -{62,-14,64}, -{62,-14,65}, -{62,-13,-40}, -{62,-13,-39}, -{62,-13,-38}, -{62,-13,-37}, -{62,-13,-36}, -{62,-13,-35}, -{62,-13,-34}, -{62,-13,-33}, -{62,-13,-32}, -{62,-13,-31}, -{62,-13,-30}, -{62,-13,-29}, -{62,-13,-28}, -{62,-13,-27}, -{62,-13,-26}, -{62,-13,-25}, -{62,-13,-24}, -{62,-13,-23}, -{62,-13,-22}, -{62,-13,-21}, -{62,-13,-20}, -{62,-13,-19}, -{62,-13,-18}, -{62,-13,-17}, -{62,-13,-16}, -{62,-13,-15}, -{62,-13,-14}, -{62,-13,-13}, -{62,-13,-12}, -{62,-13,-11}, -{62,-13,-10}, -{62,-13,-9}, -{62,-13,-8}, -{62,-13,-7}, -{62,-13,-6}, -{62,-13,-5}, -{62,-13,-4}, -{62,-13,-3}, -{62,-13,-2}, -{62,-13,-1}, -{62,-13,0}, -{62,-13,1}, -{62,-13,2}, -{62,-13,3}, -{62,-13,4}, -{62,-13,5}, -{62,-13,6}, -{62,-13,7}, -{62,-13,8}, -{62,-13,9}, -{62,-13,10}, -{62,-13,11}, -{62,-13,12}, -{62,-13,13}, -{62,-13,14}, -{62,-13,15}, -{62,-13,16}, -{62,-13,17}, -{62,-13,18}, -{62,-13,19}, -{62,-13,20}, -{62,-13,21}, -{62,-13,22}, -{62,-13,23}, -{62,-13,24}, -{62,-13,25}, -{62,-13,26}, -{62,-13,27}, -{62,-13,28}, -{62,-13,29}, -{62,-13,30}, -{62,-13,31}, -{62,-13,32}, -{62,-13,33}, -{62,-13,34}, -{62,-13,35}, -{62,-13,36}, -{62,-13,37}, -{62,-13,38}, -{62,-13,39}, -{62,-13,40}, -{62,-13,41}, -{62,-13,42}, -{62,-13,43}, -{62,-13,44}, -{62,-13,45}, -{62,-13,46}, -{62,-13,47}, -{62,-13,48}, -{62,-13,49}, -{62,-13,50}, -{62,-13,51}, -{62,-13,52}, -{62,-13,53}, -{62,-13,54}, -{62,-13,55}, -{62,-13,56}, -{62,-13,57}, -{62,-13,58}, -{62,-13,59}, -{62,-13,60}, -{62,-13,61}, -{62,-13,62}, -{62,-13,63}, -{62,-13,64}, -{62,-13,65}, -{62,-12,-42}, -{62,-12,-41}, -{62,-12,-40}, -{62,-12,-39}, -{62,-12,-38}, -{62,-12,-37}, -{62,-12,-36}, -{62,-12,-35}, -{62,-12,-34}, -{62,-12,-33}, -{62,-12,-32}, -{62,-12,-31}, -{62,-12,-30}, -{62,-12,-29}, -{62,-12,-28}, -{62,-12,-27}, -{62,-12,-26}, -{62,-12,-25}, -{62,-12,-24}, -{62,-12,-23}, -{62,-12,-22}, -{62,-12,-21}, -{62,-12,-20}, -{62,-12,-19}, -{62,-12,-18}, -{62,-12,-17}, -{62,-12,-16}, -{62,-12,-15}, -{62,-12,-14}, -{62,-12,-13}, -{62,-12,-12}, -{62,-12,-11}, -{62,-12,-10}, -{62,-12,-9}, -{62,-12,-8}, -{62,-12,-7}, -{62,-12,-6}, -{62,-12,-5}, -{62,-12,-4}, -{62,-12,-3}, -{62,-12,-2}, -{62,-12,-1}, -{62,-12,0}, -{62,-12,1}, -{62,-12,2}, -{62,-12,3}, -{62,-12,4}, -{62,-12,5}, -{62,-12,6}, -{62,-12,7}, -{62,-12,8}, -{62,-12,9}, -{62,-12,10}, -{62,-12,11}, -{62,-12,12}, -{62,-12,13}, -{62,-12,14}, -{62,-12,15}, -{62,-12,16}, -{62,-12,17}, -{62,-12,18}, -{62,-12,19}, -{62,-12,20}, -{62,-12,21}, -{62,-12,22}, -{62,-12,23}, -{62,-12,24}, -{62,-12,25}, -{62,-12,26}, -{62,-12,27}, -{62,-12,28}, -{62,-12,29}, -{62,-12,30}, -{62,-12,31}, -{62,-12,32}, -{62,-12,33}, -{62,-12,34}, -{62,-12,35}, -{62,-12,36}, -{62,-12,37}, -{62,-12,38}, -{62,-12,39}, -{62,-12,40}, -{62,-12,41}, -{62,-12,42}, -{62,-12,43}, -{62,-12,44}, -{62,-12,45}, -{62,-12,46}, -{62,-12,47}, -{62,-12,48}, -{62,-12,49}, -{62,-12,50}, -{62,-12,51}, -{62,-12,52}, -{62,-12,53}, -{62,-12,54}, -{62,-12,55}, -{62,-12,56}, -{62,-12,57}, -{62,-12,58}, -{62,-12,59}, -{62,-12,60}, -{62,-12,61}, -{62,-12,62}, -{62,-12,63}, -{62,-12,64}, -{62,-12,65}, -{62,-11,-43}, -{62,-11,-42}, -{62,-11,-41}, -{62,-11,-40}, -{62,-11,-39}, -{62,-11,-38}, -{62,-11,-37}, -{62,-11,-36}, -{62,-11,-35}, -{62,-11,-34}, -{62,-11,-33}, -{62,-11,-32}, -{62,-11,-31}, -{62,-11,-30}, -{62,-11,-29}, -{62,-11,-28}, -{62,-11,-27}, -{62,-11,-26}, -{62,-11,-25}, -{62,-11,-24}, -{62,-11,-23}, -{62,-11,-22}, -{62,-11,-21}, -{62,-11,-20}, -{62,-11,-19}, -{62,-11,-18}, -{62,-11,-17}, -{62,-11,-16}, -{62,-11,-15}, -{62,-11,-14}, -{62,-11,-13}, -{62,-11,-12}, -{62,-11,-11}, -{62,-11,-10}, -{62,-11,-9}, -{62,-11,-8}, -{62,-11,-7}, -{62,-11,-6}, -{62,-11,-5}, -{62,-11,-4}, -{62,-11,-3}, -{62,-11,-2}, -{62,-11,-1}, -{62,-11,0}, -{62,-11,1}, -{62,-11,2}, -{62,-11,3}, -{62,-11,4}, -{62,-11,5}, -{62,-11,6}, -{62,-11,7}, -{62,-11,8}, -{62,-11,9}, -{62,-11,10}, -{62,-11,11}, -{62,-11,12}, -{62,-11,13}, -{62,-11,14}, -{62,-11,15}, -{62,-11,16}, -{62,-11,17}, -{62,-11,18}, -{62,-11,19}, -{62,-11,20}, -{62,-11,21}, -{62,-11,22}, -{62,-11,23}, -{62,-11,24}, -{62,-11,25}, -{62,-11,26}, -{62,-11,27}, -{62,-11,28}, -{62,-11,29}, -{62,-11,30}, -{62,-11,31}, -{62,-11,32}, -{62,-11,33}, -{62,-11,34}, -{62,-11,35}, -{62,-11,36}, -{62,-11,37}, -{62,-11,38}, -{62,-11,39}, -{62,-11,40}, -{62,-11,41}, -{62,-11,42}, -{62,-11,43}, -{62,-11,44}, -{62,-11,45}, -{62,-11,46}, -{62,-11,47}, -{62,-11,48}, -{62,-11,49}, -{62,-11,50}, -{62,-11,51}, -{62,-11,52}, -{62,-11,53}, -{62,-11,54}, -{62,-11,55}, -{62,-11,56}, -{62,-11,57}, -{62,-11,58}, -{62,-11,59}, -{62,-11,60}, -{62,-11,61}, -{62,-11,62}, -{62,-11,63}, -{62,-11,64}, -{62,-11,65}, -{62,-10,-44}, -{62,-10,-43}, -{62,-10,-42}, -{62,-10,-41}, -{62,-10,-40}, -{62,-10,-39}, -{62,-10,-38}, -{62,-10,-37}, -{62,-10,-36}, -{62,-10,-35}, -{62,-10,-34}, -{62,-10,-33}, -{62,-10,-32}, -{62,-10,-31}, -{62,-10,-30}, -{62,-10,-29}, -{62,-10,-28}, -{62,-10,-27}, -{62,-10,-26}, -{62,-10,-25}, -{62,-10,-24}, -{62,-10,-23}, -{62,-10,-22}, -{62,-10,-21}, -{62,-10,-20}, -{62,-10,-19}, -{62,-10,-18}, -{62,-10,-17}, -{62,-10,-16}, -{62,-10,-15}, -{62,-10,-14}, -{62,-10,-13}, -{62,-10,-12}, -{62,-10,-11}, -{62,-10,-10}, -{62,-10,-9}, -{62,-10,-8}, -{62,-10,-7}, -{62,-10,-6}, -{62,-10,-5}, -{62,-10,-4}, -{62,-10,-3}, -{62,-10,-2}, -{62,-10,-1}, -{62,-10,0}, -{62,-10,1}, -{62,-10,2}, -{62,-10,3}, -{62,-10,4}, -{62,-10,5}, -{62,-10,6}, -{62,-10,7}, -{62,-10,8}, -{62,-10,9}, -{62,-10,10}, -{62,-10,11}, -{62,-10,12}, -{62,-10,13}, -{62,-10,14}, -{62,-10,15}, -{62,-10,16}, -{62,-10,17}, -{62,-10,18}, -{62,-10,19}, -{62,-10,20}, -{62,-10,21}, -{62,-10,22}, -{62,-10,23}, -{62,-10,24}, -{62,-10,25}, -{62,-10,26}, -{62,-10,27}, -{62,-10,28}, -{62,-10,29}, -{62,-10,30}, -{62,-10,31}, -{62,-10,32}, -{62,-10,33}, -{62,-10,34}, -{62,-10,35}, -{62,-10,36}, -{62,-10,37}, -{62,-10,38}, -{62,-10,39}, -{62,-10,40}, -{62,-10,41}, -{62,-10,42}, -{62,-10,43}, -{62,-10,44}, -{62,-10,45}, -{62,-10,46}, -{62,-10,47}, -{62,-10,48}, -{62,-10,49}, -{62,-10,50}, -{62,-10,51}, -{62,-10,52}, -{62,-10,53}, -{62,-10,54}, -{62,-10,55}, -{62,-10,56}, -{62,-10,57}, -{62,-10,58}, -{62,-10,59}, -{62,-10,60}, -{62,-10,61}, -{62,-10,62}, -{62,-10,63}, -{62,-10,64}, -{62,-10,65}, -{62,-9,-45}, -{62,-9,-44}, -{62,-9,-43}, -{62,-9,-42}, -{62,-9,-41}, -{62,-9,-40}, -{62,-9,-39}, -{62,-9,-38}, -{62,-9,-37}, -{62,-9,-36}, -{62,-9,-35}, -{62,-9,-34}, -{62,-9,-33}, -{62,-9,-32}, -{62,-9,-31}, -{62,-9,-30}, -{62,-9,-29}, -{62,-9,-28}, -{62,-9,-27}, -{62,-9,-26}, -{62,-9,-25}, -{62,-9,-24}, -{62,-9,-23}, -{62,-9,-22}, -{62,-9,-21}, -{62,-9,-20}, -{62,-9,-19}, -{62,-9,-18}, -{62,-9,-17}, -{62,-9,-16}, -{62,-9,-15}, -{62,-9,-14}, -{62,-9,-13}, -{62,-9,-12}, -{62,-9,-11}, -{62,-9,-10}, -{62,-9,-9}, -{62,-9,-8}, -{62,-9,-7}, -{62,-9,-6}, -{62,-9,-5}, -{62,-9,-4}, -{62,-9,-3}, -{62,-9,-2}, -{62,-9,-1}, -{62,-9,0}, -{62,-9,1}, -{62,-9,2}, -{62,-9,3}, -{62,-9,4}, -{62,-9,5}, -{62,-9,6}, -{62,-9,7}, -{62,-9,8}, -{62,-9,9}, -{62,-9,10}, -{62,-9,11}, -{62,-9,12}, -{62,-9,13}, -{62,-9,14}, -{62,-9,15}, -{62,-9,16}, -{62,-9,17}, -{62,-9,18}, -{62,-9,19}, -{62,-9,20}, -{62,-9,21}, -{62,-9,22}, -{62,-9,23}, -{62,-9,24}, -{62,-9,25}, -{62,-9,26}, -{62,-9,27}, -{62,-9,28}, -{62,-9,29}, -{62,-9,30}, -{62,-9,31}, -{62,-9,32}, -{62,-9,33}, -{62,-9,34}, -{62,-9,35}, -{62,-9,36}, -{62,-9,37}, -{62,-9,38}, -{62,-9,39}, -{62,-9,40}, -{62,-9,41}, -{62,-9,42}, -{62,-9,43}, -{62,-9,44}, -{62,-9,45}, -{62,-9,46}, -{62,-9,47}, -{62,-9,48}, -{62,-9,49}, -{62,-9,50}, -{62,-9,51}, -{62,-9,52}, -{62,-9,53}, -{62,-9,54}, -{62,-9,55}, -{62,-9,56}, -{62,-9,57}, -{62,-9,58}, -{62,-9,59}, -{62,-9,60}, -{62,-9,61}, -{62,-9,62}, -{62,-9,63}, -{62,-9,64}, -{62,-9,65}, -{62,-8,-46}, -{62,-8,-45}, -{62,-8,-44}, -{62,-8,-43}, -{62,-8,-42}, -{62,-8,-41}, -{62,-8,-40}, -{62,-8,-39}, -{62,-8,-38}, -{62,-8,-37}, -{62,-8,-36}, -{62,-8,-35}, -{62,-8,-34}, -{62,-8,-33}, -{62,-8,-32}, -{62,-8,-31}, -{62,-8,-30}, -{62,-8,-29}, -{62,-8,-28}, -{62,-8,-27}, -{62,-8,-26}, -{62,-8,-25}, -{62,-8,-24}, -{62,-8,-23}, -{62,-8,-22}, -{62,-8,-21}, -{62,-8,-20}, -{62,-8,-19}, -{62,-8,-18}, -{62,-8,-17}, -{62,-8,-16}, -{62,-8,-15}, -{62,-8,-14}, -{62,-8,-13}, -{62,-8,-12}, -{62,-8,-11}, -{62,-8,-10}, -{62,-8,-9}, -{62,-8,-8}, -{62,-8,-7}, -{62,-8,-6}, -{62,-8,-5}, -{62,-8,-4}, -{62,-8,-3}, -{62,-8,-2}, -{62,-8,-1}, -{62,-8,0}, -{62,-8,1}, -{62,-8,2}, -{62,-8,3}, -{62,-8,4}, -{62,-8,5}, -{62,-8,6}, -{62,-8,7}, -{62,-8,8}, -{62,-8,9}, -{62,-8,10}, -{62,-8,11}, -{62,-8,12}, -{62,-8,13}, -{62,-8,14}, -{62,-8,15}, -{62,-8,16}, -{62,-8,17}, -{62,-8,18}, -{62,-8,19}, -{62,-8,20}, -{62,-8,21}, -{62,-8,22}, -{62,-8,23}, -{62,-8,24}, -{62,-8,25}, -{62,-8,26}, -{62,-8,27}, -{62,-8,28}, -{62,-8,29}, -{62,-8,30}, -{62,-8,31}, -{62,-8,32}, -{62,-8,33}, -{62,-8,34}, -{62,-8,35}, -{62,-8,36}, -{62,-8,37}, -{62,-8,38}, -{62,-8,39}, -{62,-8,40}, -{62,-8,41}, -{62,-8,42}, -{62,-8,43}, -{62,-8,44}, -{62,-8,45}, -{62,-8,46}, -{62,-8,47}, -{62,-8,48}, -{62,-8,49}, -{62,-8,50}, -{62,-8,51}, -{62,-8,52}, -{62,-8,53}, -{62,-8,54}, -{62,-8,55}, -{62,-8,56}, -{62,-8,57}, -{62,-8,58}, -{62,-8,59}, -{62,-8,60}, -{62,-8,61}, -{62,-8,62}, -{62,-8,63}, -{62,-8,64}, -{62,-8,65}, -{62,-7,-48}, -{62,-7,-47}, -{62,-7,-46}, -{62,-7,-45}, -{62,-7,-44}, -{62,-7,-43}, -{62,-7,-42}, -{62,-7,-41}, -{62,-7,-40}, -{62,-7,-39}, -{62,-7,-38}, -{62,-7,-37}, -{62,-7,-36}, -{62,-7,-35}, -{62,-7,-34}, -{62,-7,-33}, -{62,-7,-32}, -{62,-7,-31}, -{62,-7,-30}, -{62,-7,-29}, -{62,-7,-28}, -{62,-7,-27}, -{62,-7,-26}, -{62,-7,-25}, -{62,-7,-24}, -{62,-7,-23}, -{62,-7,-22}, -{62,-7,-21}, -{62,-7,-20}, -{62,-7,-19}, -{62,-7,-18}, -{62,-7,-17}, -{62,-7,-16}, -{62,-7,-15}, -{62,-7,-14}, -{62,-7,-13}, -{62,-7,-12}, -{62,-7,-11}, -{62,-7,-10}, -{62,-7,-9}, -{62,-7,-8}, -{62,-7,-7}, -{62,-7,-6}, -{62,-7,-5}, -{62,-7,-4}, -{62,-7,-3}, -{62,-7,-2}, -{62,-7,-1}, -{62,-7,0}, -{62,-7,1}, -{62,-7,2}, -{62,-7,3}, -{62,-7,4}, -{62,-7,5}, -{62,-7,6}, -{62,-7,7}, -{62,-7,8}, -{62,-7,9}, -{62,-7,10}, -{62,-7,11}, -{62,-7,12}, -{62,-7,13}, -{62,-7,14}, -{62,-7,15}, -{62,-7,16}, -{62,-7,17}, -{62,-7,18}, -{62,-7,19}, -{62,-7,20}, -{62,-7,21}, -{62,-7,22}, -{62,-7,23}, -{62,-7,24}, -{62,-7,25}, -{62,-7,26}, -{62,-7,27}, -{62,-7,28}, -{62,-7,29}, -{62,-7,30}, -{62,-7,31}, -{62,-7,32}, -{62,-7,33}, -{62,-7,34}, -{62,-7,35}, -{62,-7,36}, -{62,-7,37}, -{62,-7,38}, -{62,-7,39}, -{62,-7,40}, -{62,-7,41}, -{62,-7,42}, -{62,-7,43}, -{62,-7,44}, -{62,-7,45}, -{62,-7,46}, -{62,-7,47}, -{62,-7,48}, -{62,-7,49}, -{62,-7,50}, -{62,-7,51}, -{62,-7,52}, -{62,-7,53}, -{62,-7,54}, -{62,-7,55}, -{62,-7,56}, -{62,-7,57}, -{62,-7,58}, -{62,-7,59}, -{62,-7,60}, -{62,-7,61}, -{62,-7,62}, -{62,-7,63}, -{62,-7,64}, -{62,-7,65}, -{62,-6,-49}, -{62,-6,-48}, -{62,-6,-47}, -{62,-6,-46}, -{62,-6,-45}, -{62,-6,-44}, -{62,-6,-43}, -{62,-6,-42}, -{62,-6,-41}, -{62,-6,-40}, -{62,-6,-39}, -{62,-6,-38}, -{62,-6,-37}, -{62,-6,-36}, -{62,-6,-35}, -{62,-6,-34}, -{62,-6,-33}, -{62,-6,-32}, -{62,-6,-31}, -{62,-6,-30}, -{62,-6,-29}, -{62,-6,-28}, -{62,-6,-27}, -{62,-6,-26}, -{62,-6,-25}, -{62,-6,-24}, -{62,-6,-23}, -{62,-6,-22}, -{62,-6,-21}, -{62,-6,-20}, -{62,-6,-19}, -{62,-6,-18}, -{62,-6,-17}, -{62,-6,-16}, -{62,-6,-15}, -{62,-6,-14}, -{62,-6,-13}, -{62,-6,-12}, -{62,-6,-11}, -{62,-6,-10}, -{62,-6,-9}, -{62,-6,-8}, -{62,-6,-7}, -{62,-6,-6}, -{62,-6,-5}, -{62,-6,-4}, -{62,-6,-3}, -{62,-6,-2}, -{62,-6,-1}, -{62,-6,0}, -{62,-6,1}, -{62,-6,2}, -{62,-6,3}, -{62,-6,4}, -{62,-6,5}, -{62,-6,6}, -{62,-6,7}, -{62,-6,8}, -{62,-6,9}, -{62,-6,10}, -{62,-6,11}, -{62,-6,12}, -{62,-6,13}, -{62,-6,14}, -{62,-6,15}, -{62,-6,16}, -{62,-6,17}, -{62,-6,18}, -{62,-6,19}, -{62,-6,20}, -{62,-6,21}, -{62,-6,22}, -{62,-6,23}, -{62,-6,24}, -{62,-6,25}, -{62,-6,26}, -{62,-6,27}, -{62,-6,28}, -{62,-6,29}, -{62,-6,30}, -{62,-6,31}, -{62,-6,32}, -{62,-6,33}, -{62,-6,34}, -{62,-6,35}, -{62,-6,36}, -{62,-6,37}, -{62,-6,38}, -{62,-6,39}, -{62,-6,40}, -{62,-6,41}, -{62,-6,42}, -{62,-6,43}, -{62,-6,44}, -{62,-6,45}, -{62,-6,46}, -{62,-6,47}, -{62,-6,48}, -{62,-6,49}, -{62,-6,50}, -{62,-6,51}, -{62,-6,52}, -{62,-6,53}, -{62,-6,54}, -{62,-6,55}, -{62,-6,56}, -{62,-6,57}, -{62,-6,58}, -{62,-6,59}, -{62,-6,60}, -{62,-6,61}, -{62,-6,62}, -{62,-6,63}, -{62,-6,64}, -{62,-6,65}, -{62,-5,-50}, -{62,-5,-49}, -{62,-5,-48}, -{62,-5,-47}, -{62,-5,-46}, -{62,-5,-45}, -{62,-5,-44}, -{62,-5,-43}, -{62,-5,-42}, -{62,-5,-41}, -{62,-5,-40}, -{62,-5,-39}, -{62,-5,-38}, -{62,-5,-37}, -{62,-5,-36}, -{62,-5,-35}, -{62,-5,-34}, -{62,-5,-33}, -{62,-5,-32}, -{62,-5,-31}, -{62,-5,-30}, -{62,-5,-29}, -{62,-5,-28}, -{62,-5,-27}, -{62,-5,-26}, -{62,-5,-25}, -{62,-5,-24}, -{62,-5,-23}, -{62,-5,-22}, -{62,-5,-21}, -{62,-5,-20}, -{62,-5,-19}, -{62,-5,-18}, -{62,-5,-17}, -{62,-5,-16}, -{62,-5,-15}, -{62,-5,-14}, -{62,-5,-13}, -{62,-5,-12}, -{62,-5,-11}, -{62,-5,-10}, -{62,-5,-9}, -{62,-5,-8}, -{62,-5,-7}, -{62,-5,-6}, -{62,-5,-5}, -{62,-5,-4}, -{62,-5,-3}, -{62,-5,-2}, -{62,-5,-1}, -{62,-5,0}, -{62,-5,1}, -{62,-5,2}, -{62,-5,3}, -{62,-5,4}, -{62,-5,5}, -{62,-5,6}, -{62,-5,7}, -{62,-5,8}, -{62,-5,9}, -{62,-5,10}, -{62,-5,11}, -{62,-5,12}, -{62,-5,13}, -{62,-5,14}, -{62,-5,15}, -{62,-5,16}, -{62,-5,17}, -{62,-5,18}, -{62,-5,19}, -{62,-5,20}, -{62,-5,21}, -{62,-5,22}, -{62,-5,23}, -{62,-5,24}, -{62,-5,25}, -{62,-5,26}, -{62,-5,27}, -{62,-5,28}, -{62,-5,29}, -{62,-5,30}, -{62,-5,31}, -{62,-5,32}, -{62,-5,33}, -{62,-5,34}, -{62,-5,35}, -{62,-5,36}, -{62,-5,37}, -{62,-5,38}, -{62,-5,39}, -{62,-5,40}, -{62,-5,41}, -{62,-5,42}, -{62,-5,43}, -{62,-5,44}, -{62,-5,45}, -{62,-5,46}, -{62,-5,47}, -{62,-5,48}, -{62,-5,49}, -{62,-5,50}, -{62,-5,51}, -{62,-5,52}, -{62,-5,53}, -{62,-5,54}, -{62,-5,55}, -{62,-5,56}, -{62,-5,57}, -{62,-5,58}, -{62,-5,59}, -{62,-5,60}, -{62,-5,61}, -{62,-5,62}, -{62,-5,63}, -{62,-5,64}, -{62,-5,65}, -{62,-4,-51}, -{62,-4,-50}, -{62,-4,-49}, -{62,-4,-48}, -{62,-4,-47}, -{62,-4,-46}, -{62,-4,-45}, -{62,-4,-44}, -{62,-4,-43}, -{62,-4,-42}, -{62,-4,-41}, -{62,-4,-40}, -{62,-4,-39}, -{62,-4,-38}, -{62,-4,-37}, -{62,-4,-36}, -{62,-4,-35}, -{62,-4,-34}, -{62,-4,-33}, -{62,-4,-32}, -{62,-4,-31}, -{62,-4,-30}, -{62,-4,-29}, -{62,-4,-28}, -{62,-4,-27}, -{62,-4,-26}, -{62,-4,-25}, -{62,-4,-24}, -{62,-4,-23}, -{62,-4,-22}, -{62,-4,-21}, -{62,-4,-20}, -{62,-4,-19}, -{62,-4,-18}, -{62,-4,-17}, -{62,-4,-16}, -{62,-4,-15}, -{62,-4,-14}, -{62,-4,-13}, -{62,-4,-12}, -{62,-4,-11}, -{62,-4,-10}, -{62,-4,-9}, -{62,-4,-8}, -{62,-4,-7}, -{62,-4,-6}, -{62,-4,-5}, -{62,-4,-4}, -{62,-4,-3}, -{62,-4,-2}, -{62,-4,-1}, -{62,-4,0}, -{62,-4,1}, -{62,-4,2}, -{62,-4,3}, -{62,-4,4}, -{62,-4,5}, -{62,-4,6}, -{62,-4,7}, -{62,-4,8}, -{62,-4,9}, -{62,-4,10}, -{62,-4,11}, -{62,-4,12}, -{62,-4,13}, -{62,-4,14}, -{62,-4,15}, -{62,-4,16}, -{62,-4,17}, -{62,-4,18}, -{62,-4,19}, -{62,-4,20}, -{62,-4,21}, -{62,-4,22}, -{62,-4,23}, -{62,-4,24}, -{62,-4,25}, -{62,-4,26}, -{62,-4,27}, -{62,-4,28}, -{62,-4,29}, -{62,-4,30}, -{62,-4,31}, -{62,-4,32}, -{62,-4,33}, -{62,-4,34}, -{62,-4,35}, -{62,-4,36}, -{62,-4,37}, -{62,-4,38}, -{62,-4,39}, -{62,-4,40}, -{62,-4,41}, -{62,-4,42}, -{62,-4,43}, -{62,-4,44}, -{62,-4,45}, -{62,-4,46}, -{62,-4,47}, -{62,-4,48}, -{62,-4,49}, -{62,-4,50}, -{62,-4,51}, -{62,-4,52}, -{62,-4,53}, -{62,-4,54}, -{62,-4,55}, -{62,-4,56}, -{62,-4,57}, -{62,-4,58}, -{62,-4,59}, -{62,-4,60}, -{62,-4,61}, -{62,-4,62}, -{62,-4,63}, -{62,-4,64}, -{62,-4,65}, -{62,-4,66}, -{62,-3,-52}, -{62,-3,-51}, -{62,-3,-50}, -{62,-3,-49}, -{62,-3,-48}, -{62,-3,-47}, -{62,-3,-46}, -{62,-3,-45}, -{62,-3,-44}, -{62,-3,-43}, -{62,-3,-42}, -{62,-3,-41}, -{62,-3,-40}, -{62,-3,-39}, -{62,-3,-38}, -{62,-3,-37}, -{62,-3,-36}, -{62,-3,-35}, -{62,-3,-34}, -{62,-3,-33}, -{62,-3,-32}, -{62,-3,-31}, -{62,-3,-30}, -{62,-3,-29}, -{62,-3,-28}, -{62,-3,-27}, -{62,-3,-26}, -{62,-3,-25}, -{62,-3,-24}, -{62,-3,-23}, -{62,-3,-22}, -{62,-3,-21}, -{62,-3,-20}, -{62,-3,-19}, -{62,-3,-18}, -{62,-3,-17}, -{62,-3,-16}, -{62,-3,-15}, -{62,-3,-14}, -{62,-3,-13}, -{62,-3,-12}, -{62,-3,-11}, -{62,-3,-10}, -{62,-3,-9}, -{62,-3,-8}, -{62,-3,-7}, -{62,-3,-6}, -{62,-3,-5}, -{62,-3,-4}, -{62,-3,-3}, -{62,-3,-2}, -{62,-3,-1}, -{62,-3,0}, -{62,-3,1}, -{62,-3,2}, -{62,-3,3}, -{62,-3,4}, -{62,-3,5}, -{62,-3,6}, -{62,-3,7}, -{62,-3,8}, -{62,-3,9}, -{62,-3,10}, -{62,-3,11}, -{62,-3,12}, -{62,-3,13}, -{62,-3,14}, -{62,-3,15}, -{62,-3,16}, -{62,-3,17}, -{62,-3,18}, -{62,-3,19}, -{62,-3,20}, -{62,-3,21}, -{62,-3,22}, -{62,-3,23}, -{62,-3,24}, -{62,-3,25}, -{62,-3,26}, -{62,-3,27}, -{62,-3,28}, -{62,-3,29}, -{62,-3,30}, -{62,-3,31}, -{62,-3,32}, -{62,-3,33}, -{62,-3,34}, -{62,-3,35}, -{62,-3,36}, -{62,-3,37}, -{62,-3,38}, -{62,-3,39}, -{62,-3,40}, -{62,-3,41}, -{62,-3,42}, -{62,-3,43}, -{62,-3,44}, -{62,-3,45}, -{62,-3,46}, -{62,-3,47}, -{62,-3,48}, -{62,-3,49}, -{62,-3,50}, -{62,-3,51}, -{62,-3,52}, -{62,-3,53}, -{62,-3,54}, -{62,-3,55}, -{62,-3,56}, -{62,-3,57}, -{62,-3,58}, -{62,-3,59}, -{62,-3,60}, -{62,-3,61}, -{62,-3,62}, -{62,-3,63}, -{62,-3,64}, -{62,-3,65}, -{62,-3,66}, -{62,-2,-53}, -{62,-2,-52}, -{62,-2,-51}, -{62,-2,-50}, -{62,-2,-49}, -{62,-2,-48}, -{62,-2,-47}, -{62,-2,-46}, -{62,-2,-45}, -{62,-2,-44}, -{62,-2,-43}, -{62,-2,-42}, -{62,-2,-41}, -{62,-2,-40}, -{62,-2,-39}, -{62,-2,-38}, -{62,-2,-37}, -{62,-2,-36}, -{62,-2,-35}, -{62,-2,-34}, -{62,-2,-33}, -{62,-2,-32}, -{62,-2,-31}, -{62,-2,-30}, -{62,-2,-29}, -{62,-2,-28}, -{62,-2,-27}, -{62,-2,-26}, -{62,-2,-25}, -{62,-2,-24}, -{62,-2,-23}, -{62,-2,-22}, -{62,-2,-21}, -{62,-2,-20}, -{62,-2,-19}, -{62,-2,-18}, -{62,-2,-17}, -{62,-2,-16}, -{62,-2,-15}, -{62,-2,-14}, -{62,-2,-13}, -{62,-2,-12}, -{62,-2,-11}, -{62,-2,-10}, -{62,-2,-9}, -{62,-2,-8}, -{62,-2,-7}, -{62,-2,-6}, -{62,-2,-5}, -{62,-2,-4}, -{62,-2,-3}, -{62,-2,-2}, -{62,-2,-1}, -{62,-2,0}, -{62,-2,1}, -{62,-2,2}, -{62,-2,3}, -{62,-2,4}, -{62,-2,5}, -{62,-2,6}, -{62,-2,7}, -{62,-2,8}, -{62,-2,9}, -{62,-2,10}, -{62,-2,11}, -{62,-2,12}, -{62,-2,13}, -{62,-2,14}, -{62,-2,15}, -{62,-2,16}, -{62,-2,17}, -{62,-2,18}, -{62,-2,19}, -{62,-2,20}, -{62,-2,21}, -{62,-2,22}, -{62,-2,23}, -{62,-2,24}, -{62,-2,25}, -{62,-2,26}, -{62,-2,27}, -{62,-2,28}, -{62,-2,29}, -{62,-2,30}, -{62,-2,31}, -{62,-2,32}, -{62,-2,33}, -{62,-2,34}, -{62,-2,35}, -{62,-2,36}, -{62,-2,37}, -{62,-2,38}, -{62,-2,39}, -{62,-2,40}, -{62,-2,41}, -{62,-2,42}, -{62,-2,43}, -{62,-2,44}, -{62,-2,45}, -{62,-2,46}, -{62,-2,47}, -{62,-2,48}, -{62,-2,49}, -{62,-2,50}, -{62,-2,51}, -{62,-2,52}, -{62,-2,53}, -{62,-2,54}, -{62,-2,55}, -{62,-2,56}, -{62,-2,57}, -{62,-2,58}, -{62,-2,59}, -{62,-2,60}, -{62,-2,61}, -{62,-2,62}, -{62,-2,63}, -{62,-2,64}, -{62,-2,65}, -{62,-2,66}, -{62,-1,-55}, -{62,-1,-54}, -{62,-1,-53}, -{62,-1,-52}, -{62,-1,-51}, -{62,-1,-50}, -{62,-1,-49}, -{62,-1,-48}, -{62,-1,-47}, -{62,-1,-46}, -{62,-1,-45}, -{62,-1,-44}, -{62,-1,-43}, -{62,-1,-42}, -{62,-1,-41}, -{62,-1,-40}, -{62,-1,-39}, -{62,-1,-38}, -{62,-1,-37}, -{62,-1,-36}, -{62,-1,-35}, -{62,-1,-34}, -{62,-1,-33}, -{62,-1,-32}, -{62,-1,-31}, -{62,-1,-30}, -{62,-1,-29}, -{62,-1,-28}, -{62,-1,-27}, -{62,-1,-26}, -{62,-1,-25}, -{62,-1,-24}, -{62,-1,-23}, -{62,-1,-22}, -{62,-1,-21}, -{62,-1,-20}, -{62,-1,-19}, -{62,-1,-18}, -{62,-1,-17}, -{62,-1,-16}, -{62,-1,-15}, -{62,-1,-14}, -{62,-1,-13}, -{62,-1,-12}, -{62,-1,-11}, -{62,-1,-10}, -{62,-1,-9}, -{62,-1,-8}, -{62,-1,-7}, -{62,-1,-6}, -{62,-1,-5}, -{62,-1,-4}, -{62,-1,-3}, -{62,-1,-2}, -{62,-1,-1}, -{62,-1,0}, -{62,-1,1}, -{62,-1,2}, -{62,-1,3}, -{62,-1,4}, -{62,-1,5}, -{62,-1,6}, -{62,-1,7}, -{62,-1,8}, -{62,-1,9}, -{62,-1,10}, -{62,-1,11}, -{62,-1,12}, -{62,-1,13}, -{62,-1,14}, -{62,-1,15}, -{62,-1,16}, -{62,-1,17}, -{62,-1,18}, -{62,-1,19}, -{62,-1,20}, -{62,-1,21}, -{62,-1,22}, -{62,-1,23}, -{62,-1,24}, -{62,-1,25}, -{62,-1,26}, -{62,-1,27}, -{62,-1,28}, -{62,-1,29}, -{62,-1,30}, -{62,-1,31}, -{62,-1,32}, -{62,-1,33}, -{62,-1,34}, -{62,-1,35}, -{62,-1,36}, -{62,-1,37}, -{62,-1,38}, -{62,-1,39}, -{62,-1,40}, -{62,-1,41}, -{62,-1,42}, -{62,-1,43}, -{62,-1,44}, -{62,-1,45}, -{62,-1,46}, -{62,-1,47}, -{62,-1,48}, -{62,-1,49}, -{62,-1,50}, -{62,-1,51}, -{62,-1,52}, -{62,-1,53}, -{62,-1,54}, -{62,-1,55}, -{62,-1,56}, -{62,-1,57}, -{62,-1,58}, -{62,-1,59}, -{62,-1,60}, -{62,-1,61}, -{62,-1,62}, -{62,-1,63}, -{62,-1,64}, -{62,-1,65}, -{62,-1,66}, -{62,0,-56}, -{62,0,-55}, -{62,0,-54}, -{62,0,-53}, -{62,0,-52}, -{62,0,-51}, -{62,0,-50}, -{62,0,-49}, -{62,0,-48}, -{62,0,-47}, -{62,0,-46}, -{62,0,-45}, -{62,0,-44}, -{62,0,-43}, -{62,0,-42}, -{62,0,-41}, -{62,0,-40}, -{62,0,-39}, -{62,0,-38}, -{62,0,-37}, -{62,0,-36}, -{62,0,-35}, -{62,0,-34}, -{62,0,-33}, -{62,0,-32}, -{62,0,-31}, -{62,0,-30}, -{62,0,-29}, -{62,0,-28}, -{62,0,-27}, -{62,0,-26}, -{62,0,-25}, -{62,0,-24}, -{62,0,-23}, -{62,0,-22}, -{62,0,-21}, -{62,0,-20}, -{62,0,-19}, -{62,0,-18}, -{62,0,-17}, -{62,0,-16}, -{62,0,-15}, -{62,0,-14}, -{62,0,-13}, -{62,0,-12}, -{62,0,-11}, -{62,0,-10}, -{62,0,-9}, -{62,0,-8}, -{62,0,-7}, -{62,0,-6}, -{62,0,-5}, -{62,0,-4}, -{62,0,-3}, -{62,0,-2}, -{62,0,-1}, -{62,0,0}, -{62,0,1}, -{62,0,2}, -{62,0,3}, -{62,0,4}, -{62,0,5}, -{62,0,6}, -{62,0,7}, -{62,0,8}, -{62,0,9}, -{62,0,10}, -{62,0,11}, -{62,0,12}, -{62,0,13}, -{62,0,14}, -{62,0,15}, -{62,0,16}, -{62,0,17}, -{62,0,18}, -{62,0,19}, -{62,0,20}, -{62,0,21}, -{62,0,22}, -{62,0,23}, -{62,0,24}, -{62,0,25}, -{62,0,26}, -{62,0,27}, -{62,0,28}, -{62,0,29}, -{62,0,30}, -{62,0,31}, -{62,0,32}, -{62,0,33}, -{62,0,34}, -{62,0,35}, -{62,0,36}, -{62,0,37}, -{62,0,38}, -{62,0,39}, -{62,0,40}, -{62,0,41}, -{62,0,42}, -{62,0,43}, -{62,0,44}, -{62,0,45}, -{62,0,46}, -{62,0,47}, -{62,0,48}, -{62,0,49}, -{62,0,50}, -{62,0,51}, -{62,0,52}, -{62,0,53}, -{62,0,54}, -{62,0,55}, -{62,0,56}, -{62,0,57}, -{62,0,58}, -{62,0,59}, -{62,0,60}, -{62,0,61}, -{62,0,62}, -{62,0,63}, -{62,0,64}, -{62,0,65}, -{62,0,66}, -{62,1,-57}, -{62,1,-56}, -{62,1,-55}, -{62,1,-54}, -{62,1,-53}, -{62,1,-52}, -{62,1,-51}, -{62,1,-50}, -{62,1,-49}, -{62,1,-48}, -{62,1,-47}, -{62,1,-46}, -{62,1,-45}, -{62,1,-44}, -{62,1,-43}, -{62,1,-42}, -{62,1,-41}, -{62,1,-40}, -{62,1,-39}, -{62,1,-38}, -{62,1,-37}, -{62,1,-36}, -{62,1,-35}, -{62,1,-34}, -{62,1,-33}, -{62,1,-32}, -{62,1,-31}, -{62,1,-30}, -{62,1,-29}, -{62,1,-28}, -{62,1,-27}, -{62,1,-26}, -{62,1,-25}, -{62,1,-24}, -{62,1,-23}, -{62,1,-22}, -{62,1,-21}, -{62,1,-20}, -{62,1,-19}, -{62,1,-18}, -{62,1,-17}, -{62,1,-16}, -{62,1,-15}, -{62,1,-14}, -{62,1,-13}, -{62,1,-12}, -{62,1,-11}, -{62,1,-10}, -{62,1,-9}, -{62,1,-8}, -{62,1,-7}, -{62,1,-6}, -{62,1,-5}, -{62,1,-4}, -{62,1,-3}, -{62,1,-2}, -{62,1,-1}, -{62,1,0}, -{62,1,1}, -{62,1,2}, -{62,1,3}, -{62,1,4}, -{62,1,5}, -{62,1,6}, -{62,1,7}, -{62,1,8}, -{62,1,9}, -{62,1,10}, -{62,1,11}, -{62,1,12}, -{62,1,13}, -{62,1,14}, -{62,1,15}, -{62,1,16}, -{62,1,17}, -{62,1,18}, -{62,1,19}, -{62,1,20}, -{62,1,21}, -{62,1,22}, -{62,1,23}, -{62,1,24}, -{62,1,25}, -{62,1,26}, -{62,1,27}, -{62,1,28}, -{62,1,29}, -{62,1,30}, -{62,1,31}, -{62,1,32}, -{62,1,33}, -{62,1,34}, -{62,1,35}, -{62,1,36}, -{62,1,37}, -{62,1,38}, -{62,1,39}, -{62,1,40}, -{62,1,41}, -{62,1,42}, -{62,1,43}, -{62,1,44}, -{62,1,45}, -{62,1,46}, -{62,1,47}, -{62,1,48}, -{62,1,49}, -{62,1,50}, -{62,1,51}, -{62,1,52}, -{62,1,53}, -{62,1,54}, -{62,1,55}, -{62,1,56}, -{62,1,57}, -{62,1,58}, -{62,1,59}, -{62,1,60}, -{62,1,61}, -{62,1,62}, -{62,1,63}, -{62,1,64}, -{62,1,65}, -{62,1,66}, -{62,2,-58}, -{62,2,-57}, -{62,2,-56}, -{62,2,-55}, -{62,2,-54}, -{62,2,-53}, -{62,2,-52}, -{62,2,-51}, -{62,2,-50}, -{62,2,-49}, -{62,2,-48}, -{62,2,-47}, -{62,2,-46}, -{62,2,-45}, -{62,2,-44}, -{62,2,-43}, -{62,2,-42}, -{62,2,-41}, -{62,2,-40}, -{62,2,-39}, -{62,2,-38}, -{62,2,-37}, -{62,2,-36}, -{62,2,-35}, -{62,2,-34}, -{62,2,-33}, -{62,2,-32}, -{62,2,-31}, -{62,2,-30}, -{62,2,-29}, -{62,2,-28}, -{62,2,-27}, -{62,2,-26}, -{62,2,-25}, -{62,2,-24}, -{62,2,-23}, -{62,2,-22}, -{62,2,-21}, -{62,2,-20}, -{62,2,-19}, -{62,2,-18}, -{62,2,-17}, -{62,2,-16}, -{62,2,-15}, -{62,2,-14}, -{62,2,-13}, -{62,2,-12}, -{62,2,-11}, -{62,2,-10}, -{62,2,-9}, -{62,2,-8}, -{62,2,-7}, -{62,2,-6}, -{62,2,-5}, -{62,2,-4}, -{62,2,-3}, -{62,2,-2}, -{62,2,-1}, -{62,2,0}, -{62,2,1}, -{62,2,2}, -{62,2,3}, -{62,2,4}, -{62,2,5}, -{62,2,6}, -{62,2,7}, -{62,2,8}, -{62,2,9}, -{62,2,10}, -{62,2,11}, -{62,2,12}, -{62,2,13}, -{62,2,14}, -{62,2,15}, -{62,2,16}, -{62,2,17}, -{62,2,18}, -{62,2,19}, -{62,2,20}, -{62,2,21}, -{62,2,22}, -{62,2,23}, -{62,2,24}, -{62,2,25}, -{62,2,26}, -{62,2,27}, -{62,2,28}, -{62,2,29}, -{62,2,30}, -{62,2,31}, -{62,2,32}, -{62,2,33}, -{62,2,34}, -{62,2,35}, -{62,2,36}, -{62,2,37}, -{62,2,38}, -{62,2,39}, -{62,2,40}, -{62,2,41}, -{62,2,42}, -{62,2,43}, -{62,2,44}, -{62,2,45}, -{62,2,46}, -{62,2,47}, -{62,2,48}, -{62,2,49}, -{62,2,50}, -{62,2,51}, -{62,2,52}, -{62,2,53}, -{62,2,54}, -{62,2,55}, -{62,2,56}, -{62,2,57}, -{62,2,58}, -{62,2,59}, -{62,2,60}, -{62,2,61}, -{62,2,62}, -{62,2,63}, -{62,2,64}, -{62,2,65}, -{62,2,66}, -{62,3,-59}, -{62,3,-58}, -{62,3,-57}, -{62,3,-56}, -{62,3,-55}, -{62,3,-54}, -{62,3,-53}, -{62,3,-52}, -{62,3,-51}, -{62,3,-50}, -{62,3,-49}, -{62,3,-48}, -{62,3,-47}, -{62,3,-46}, -{62,3,-45}, -{62,3,-44}, -{62,3,-43}, -{62,3,-42}, -{62,3,-41}, -{62,3,-40}, -{62,3,-39}, -{62,3,-38}, -{62,3,-37}, -{62,3,-36}, -{62,3,-35}, -{62,3,-34}, -{62,3,-33}, -{62,3,-32}, -{62,3,-31}, -{62,3,-30}, -{62,3,-29}, -{62,3,-28}, -{62,3,-27}, -{62,3,-26}, -{62,3,-25}, -{62,3,-24}, -{62,3,-23}, -{62,3,-22}, -{62,3,-21}, -{62,3,-20}, -{62,3,-19}, -{62,3,-18}, -{62,3,-17}, -{62,3,-16}, -{62,3,-15}, -{62,3,-14}, -{62,3,-13}, -{62,3,-12}, -{62,3,-11}, -{62,3,-10}, -{62,3,-9}, -{62,3,-8}, -{62,3,-7}, -{62,3,-6}, -{62,3,-5}, -{62,3,-4}, -{62,3,-3}, -{62,3,-2}, -{62,3,-1}, -{62,3,0}, -{62,3,1}, -{62,3,2}, -{62,3,3}, -{62,3,4}, -{62,3,5}, -{62,3,6}, -{62,3,7}, -{62,3,8}, -{62,3,9}, -{62,3,10}, -{62,3,11}, -{62,3,12}, -{62,3,13}, -{62,3,14}, -{62,3,15}, -{62,3,16}, -{62,3,17}, -{62,3,18}, -{62,3,19}, -{62,3,20}, -{62,3,21}, -{62,3,22}, -{62,3,23}, -{62,3,24}, -{62,3,25}, -{62,3,26}, -{62,3,27}, -{62,3,28}, -{62,3,29}, -{62,3,30}, -{62,3,31}, -{62,3,32}, -{62,3,33}, -{62,3,34}, -{62,3,35}, -{62,3,36}, -{62,3,37}, -{62,3,38}, -{62,3,39}, -{62,3,40}, -{62,3,41}, -{62,3,42}, -{62,3,43}, -{62,3,44}, -{62,3,45}, -{62,3,46}, -{62,3,47}, -{62,3,48}, -{62,3,49}, -{62,3,50}, -{62,3,51}, -{62,3,52}, -{62,3,53}, -{62,3,54}, -{62,3,55}, -{62,3,56}, -{62,3,57}, -{62,3,58}, -{62,3,59}, -{62,3,60}, -{62,3,61}, -{62,3,62}, -{62,3,63}, -{62,3,64}, -{62,3,65}, -{62,3,66}, -{62,4,-59}, -{62,4,-58}, -{62,4,-57}, -{62,4,-56}, -{62,4,-55}, -{62,4,-54}, -{62,4,-53}, -{62,4,-52}, -{62,4,-51}, -{62,4,-50}, -{62,4,-49}, -{62,4,-48}, -{62,4,-47}, -{62,4,-46}, -{62,4,-45}, -{62,4,-44}, -{62,4,-43}, -{62,4,-42}, -{62,4,-41}, -{62,4,-40}, -{62,4,-39}, -{62,4,-38}, -{62,4,-37}, -{62,4,-36}, -{62,4,-35}, -{62,4,-34}, -{62,4,-33}, -{62,4,-32}, -{62,4,-31}, -{62,4,-30}, -{62,4,-29}, -{62,4,-28}, -{62,4,-27}, -{62,4,-26}, -{62,4,-25}, -{62,4,-24}, -{62,4,-23}, -{62,4,-22}, -{62,4,-21}, -{62,4,-20}, -{62,4,-19}, -{62,4,-18}, -{62,4,-17}, -{62,4,-16}, -{62,4,-15}, -{62,4,-14}, -{62,4,-13}, -{62,4,-12}, -{62,4,-11}, -{62,4,-10}, -{62,4,-9}, -{62,4,-8}, -{62,4,-7}, -{62,4,-6}, -{62,4,-5}, -{62,4,-4}, -{62,4,-3}, -{62,4,-2}, -{62,4,-1}, -{62,4,0}, -{62,4,1}, -{62,4,2}, -{62,4,3}, -{62,4,4}, -{62,4,5}, -{62,4,6}, -{62,4,7}, -{62,4,8}, -{62,4,9}, -{62,4,10}, -{62,4,11}, -{62,4,12}, -{62,4,13}, -{62,4,14}, -{62,4,15}, -{62,4,16}, -{62,4,17}, -{62,4,18}, -{62,4,19}, -{62,4,20}, -{62,4,21}, -{62,4,22}, -{62,4,23}, -{62,4,24}, -{62,4,25}, -{62,4,26}, -{62,4,27}, -{62,4,28}, -{62,4,29}, -{62,4,30}, -{62,4,31}, -{62,4,32}, -{62,4,33}, -{62,4,34}, -{62,4,35}, -{62,4,36}, -{62,4,37}, -{62,4,38}, -{62,4,39}, -{62,4,40}, -{62,4,41}, -{62,4,42}, -{62,4,43}, -{62,4,44}, -{62,4,45}, -{62,4,46}, -{62,4,47}, -{62,4,48}, -{62,4,49}, -{62,4,50}, -{62,4,51}, -{62,4,52}, -{62,4,53}, -{62,4,54}, -{62,4,55}, -{62,4,56}, -{62,4,57}, -{62,4,58}, -{62,4,59}, -{62,4,60}, -{62,4,61}, -{62,4,62}, -{62,4,63}, -{62,4,64}, -{62,4,65}, -{62,4,66}, -{62,5,-59}, -{62,5,-58}, -{62,5,-57}, -{62,5,-56}, -{62,5,-55}, -{62,5,-54}, -{62,5,-53}, -{62,5,-52}, -{62,5,-51}, -{62,5,-50}, -{62,5,-49}, -{62,5,-48}, -{62,5,-47}, -{62,5,-46}, -{62,5,-45}, -{62,5,-44}, -{62,5,-43}, -{62,5,-42}, -{62,5,-41}, -{62,5,-40}, -{62,5,-39}, -{62,5,-38}, -{62,5,-37}, -{62,5,-36}, -{62,5,-35}, -{62,5,-34}, -{62,5,-33}, -{62,5,-32}, -{62,5,-31}, -{62,5,-30}, -{62,5,-29}, -{62,5,-28}, -{62,5,-27}, -{62,5,-26}, -{62,5,-25}, -{62,5,-24}, -{62,5,-23}, -{62,5,-22}, -{62,5,-21}, -{62,5,-20}, -{62,5,-19}, -{62,5,-18}, -{62,5,-17}, -{62,5,-16}, -{62,5,-15}, -{62,5,-14}, -{62,5,-13}, -{62,5,-12}, -{62,5,-11}, -{62,5,-10}, -{62,5,-9}, -{62,5,-8}, -{62,5,-7}, -{62,5,-6}, -{62,5,-5}, -{62,5,-4}, -{62,5,-3}, -{62,5,-2}, -{62,5,-1}, -{62,5,0}, -{62,5,1}, -{62,5,2}, -{62,5,3}, -{62,5,4}, -{62,5,5}, -{62,5,6}, -{62,5,7}, -{62,5,8}, -{62,5,9}, -{62,5,10}, -{62,5,11}, -{62,5,12}, -{62,5,13}, -{62,5,14}, -{62,5,15}, -{62,5,16}, -{62,5,17}, -{62,5,18}, -{62,5,19}, -{62,5,20}, -{62,5,21}, -{62,5,22}, -{62,5,23}, -{62,5,24}, -{62,5,25}, -{62,5,26}, -{62,5,27}, -{62,5,28}, -{62,5,29}, -{62,5,30}, -{62,5,31}, -{62,5,32}, -{62,5,33}, -{62,5,34}, -{62,5,35}, -{62,5,36}, -{62,5,37}, -{62,5,38}, -{62,5,39}, -{62,5,40}, -{62,5,41}, -{62,5,42}, -{62,5,43}, -{62,5,44}, -{62,5,45}, -{62,5,46}, -{62,5,47}, -{62,5,48}, -{62,5,49}, -{62,5,50}, -{62,5,51}, -{62,5,52}, -{62,5,53}, -{62,5,54}, -{62,5,55}, -{62,5,56}, -{62,5,57}, -{62,5,58}, -{62,5,59}, -{62,5,60}, -{62,5,61}, -{62,5,62}, -{62,5,63}, -{62,5,64}, -{62,5,65}, -{62,5,66}, -{62,6,-59}, -{62,6,-58}, -{62,6,-57}, -{62,6,-56}, -{62,6,-55}, -{62,6,-54}, -{62,6,-53}, -{62,6,-52}, -{62,6,-51}, -{62,6,-50}, -{62,6,-49}, -{62,6,-48}, -{62,6,-47}, -{62,6,-46}, -{62,6,-45}, -{62,6,-44}, -{62,6,-43}, -{62,6,-42}, -{62,6,-41}, -{62,6,-40}, -{62,6,-39}, -{62,6,-38}, -{62,6,-37}, -{62,6,-36}, -{62,6,-35}, -{62,6,-34}, -{62,6,-33}, -{62,6,-32}, -{62,6,-31}, -{62,6,-30}, -{62,6,-29}, -{62,6,-28}, -{62,6,-27}, -{62,6,-26}, -{62,6,-25}, -{62,6,-24}, -{62,6,-23}, -{62,6,-22}, -{62,6,-21}, -{62,6,-20}, -{62,6,-19}, -{62,6,-18}, -{62,6,-17}, -{62,6,-16}, -{62,6,-15}, -{62,6,-14}, -{62,6,-13}, -{62,6,-12}, -{62,6,-11}, -{62,6,-10}, -{62,6,-9}, -{62,6,-8}, -{62,6,-7}, -{62,6,-6}, -{62,6,-5}, -{62,6,-4}, -{62,6,-3}, -{62,6,-2}, -{62,6,-1}, -{62,6,0}, -{62,6,1}, -{62,6,2}, -{62,6,3}, -{62,6,4}, -{62,6,5}, -{62,6,6}, -{62,6,7}, -{62,6,8}, -{62,6,9}, -{62,6,10}, -{62,6,11}, -{62,6,12}, -{62,6,13}, -{62,6,14}, -{62,6,15}, -{62,6,16}, -{62,6,17}, -{62,6,18}, -{62,6,19}, -{62,6,20}, -{62,6,21}, -{62,6,22}, -{62,6,23}, -{62,6,24}, -{62,6,25}, -{62,6,26}, -{62,6,27}, -{62,6,28}, -{62,6,29}, -{62,6,30}, -{62,6,31}, -{62,6,32}, -{62,6,33}, -{62,6,34}, -{62,6,35}, -{62,6,36}, -{62,6,37}, -{62,6,38}, -{62,6,39}, -{62,6,40}, -{62,6,41}, -{62,6,42}, -{62,6,43}, -{62,6,44}, -{62,6,45}, -{62,6,46}, -{62,6,47}, -{62,6,48}, -{62,6,49}, -{62,6,50}, -{62,6,51}, -{62,6,52}, -{62,6,53}, -{62,6,54}, -{62,6,55}, -{62,6,56}, -{62,6,57}, -{62,6,58}, -{62,6,59}, -{62,6,60}, -{62,6,61}, -{62,6,62}, -{62,6,63}, -{62,6,64}, -{62,6,65}, -{62,6,66}, -{62,7,-59}, -{62,7,-58}, -{62,7,-57}, -{62,7,-56}, -{62,7,-55}, -{62,7,-54}, -{62,7,-53}, -{62,7,-52}, -{62,7,-51}, -{62,7,-50}, -{62,7,-49}, -{62,7,-48}, -{62,7,-47}, -{62,7,-46}, -{62,7,-45}, -{62,7,-44}, -{62,7,-43}, -{62,7,-42}, -{62,7,-41}, -{62,7,-40}, -{62,7,-39}, -{62,7,-38}, -{62,7,-37}, -{62,7,-36}, -{62,7,-35}, -{62,7,-34}, -{62,7,-33}, -{62,7,-32}, -{62,7,-31}, -{62,7,-30}, -{62,7,-29}, -{62,7,-28}, -{62,7,-27}, -{62,7,-26}, -{62,7,-25}, -{62,7,-24}, -{62,7,-23}, -{62,7,-22}, -{62,7,-21}, -{62,7,-20}, -{62,7,-19}, -{62,7,-18}, -{62,7,-17}, -{62,7,-16}, -{62,7,-15}, -{62,7,-14}, -{62,7,-13}, -{62,7,-12}, -{62,7,-11}, -{62,7,-10}, -{62,7,-9}, -{62,7,-8}, -{62,7,-7}, -{62,7,-6}, -{62,7,-5}, -{62,7,-4}, -{62,7,-3}, -{62,7,-2}, -{62,7,-1}, -{62,7,0}, -{62,7,1}, -{62,7,2}, -{62,7,3}, -{62,7,4}, -{62,7,5}, -{62,7,6}, -{62,7,7}, -{62,7,8}, -{62,7,9}, -{62,7,10}, -{62,7,11}, -{62,7,12}, -{62,7,13}, -{62,7,14}, -{62,7,15}, -{62,7,16}, -{62,7,17}, -{62,7,18}, -{62,7,19}, -{62,7,20}, -{62,7,21}, -{62,7,22}, -{62,7,23}, -{62,7,24}, -{62,7,25}, -{62,7,26}, -{62,7,27}, -{62,7,28}, -{62,7,29}, -{62,7,30}, -{62,7,31}, -{62,7,32}, -{62,7,33}, -{62,7,34}, -{62,7,35}, -{62,7,36}, -{62,7,37}, -{62,7,38}, -{62,7,39}, -{62,7,40}, -{62,7,41}, -{62,7,42}, -{62,7,43}, -{62,7,44}, -{62,7,45}, -{62,7,46}, -{62,7,47}, -{62,7,48}, -{62,7,49}, -{62,7,50}, -{62,7,51}, -{62,7,52}, -{62,7,53}, -{62,7,54}, -{62,7,55}, -{62,7,56}, -{62,7,57}, -{62,7,58}, -{62,7,59}, -{62,7,60}, -{62,7,61}, -{62,7,62}, -{62,7,63}, -{62,7,64}, -{62,7,65}, -{62,7,66}, -{62,8,-59}, -{62,8,-58}, -{62,8,-57}, -{62,8,-56}, -{62,8,-55}, -{62,8,-54}, -{62,8,-53}, -{62,8,-52}, -{62,8,-51}, -{62,8,-50}, -{62,8,-49}, -{62,8,-48}, -{62,8,-47}, -{62,8,-46}, -{62,8,-45}, -{62,8,-44}, -{62,8,-43}, -{62,8,-42}, -{62,8,-41}, -{62,8,-40}, -{62,8,-39}, -{62,8,-38}, -{62,8,-37}, -{62,8,-36}, -{62,8,-35}, -{62,8,-34}, -{62,8,-33}, -{62,8,-32}, -{62,8,-31}, -{62,8,-30}, -{62,8,-29}, -{62,8,-28}, -{62,8,-27}, -{62,8,-26}, -{62,8,-25}, -{62,8,-24}, -{62,8,-23}, -{62,8,-22}, -{62,8,-21}, -{62,8,-20}, -{62,8,-19}, -{62,8,-18}, -{62,8,-17}, -{62,8,-16}, -{62,8,-15}, -{62,8,-14}, -{62,8,-13}, -{62,8,-12}, -{62,8,-11}, -{62,8,-10}, -{62,8,-9}, -{62,8,-8}, -{62,8,-7}, -{62,8,-6}, -{62,8,-5}, -{62,8,-4}, -{62,8,-3}, -{62,8,-2}, -{62,8,-1}, -{62,8,0}, -{62,8,1}, -{62,8,2}, -{62,8,3}, -{62,8,4}, -{62,8,5}, -{62,8,6}, -{62,8,7}, -{62,8,8}, -{62,8,9}, -{62,8,10}, -{62,8,11}, -{62,8,12}, -{62,8,13}, -{62,8,14}, -{62,8,15}, -{62,8,16}, -{62,8,17}, -{62,8,18}, -{62,8,19}, -{62,8,20}, -{62,8,21}, -{62,8,22}, -{62,8,23}, -{62,8,24}, -{62,8,25}, -{62,8,26}, -{62,8,27}, -{62,8,28}, -{62,8,29}, -{62,8,30}, -{62,8,31}, -{62,8,32}, -{62,8,33}, -{62,8,34}, -{62,8,35}, -{62,8,36}, -{62,8,37}, -{62,8,38}, -{62,8,39}, -{62,8,40}, -{62,8,41}, -{62,8,42}, -{62,8,43}, -{62,8,44}, -{62,8,45}, -{62,8,46}, -{62,8,47}, -{62,8,48}, -{62,8,49}, -{62,8,50}, -{62,8,51}, -{62,8,52}, -{62,8,53}, -{62,8,54}, -{62,8,55}, -{62,8,56}, -{62,8,57}, -{62,8,58}, -{62,8,59}, -{62,8,60}, -{62,8,61}, -{62,8,62}, -{62,8,63}, -{62,8,64}, -{62,8,65}, -{62,8,66}, -{62,9,-59}, -{62,9,-58}, -{62,9,-57}, -{62,9,-56}, -{62,9,-55}, -{62,9,-54}, -{62,9,-53}, -{62,9,-52}, -{62,9,-51}, -{62,9,-50}, -{62,9,-49}, -{62,9,-48}, -{62,9,-47}, -{62,9,-46}, -{62,9,-45}, -{62,9,-44}, -{62,9,-43}, -{62,9,-42}, -{62,9,-41}, -{62,9,-40}, -{62,9,-39}, -{62,9,-38}, -{62,9,-37}, -{62,9,-36}, -{62,9,-35}, -{62,9,-34}, -{62,9,-33}, -{62,9,-32}, -{62,9,-31}, -{62,9,-30}, -{62,9,-29}, -{62,9,-28}, -{62,9,-27}, -{62,9,-26}, -{62,9,-25}, -{62,9,-24}, -{62,9,-23}, -{62,9,-22}, -{62,9,-21}, -{62,9,-20}, -{62,9,-19}, -{62,9,-18}, -{62,9,-17}, -{62,9,-16}, -{62,9,-15}, -{62,9,-14}, -{62,9,-13}, -{62,9,-12}, -{62,9,-11}, -{62,9,-10}, -{62,9,-9}, -{62,9,-8}, -{62,9,-7}, -{62,9,-6}, -{62,9,-5}, -{62,9,-4}, -{62,9,-3}, -{62,9,-2}, -{62,9,-1}, -{62,9,0}, -{62,9,1}, -{62,9,2}, -{62,9,3}, -{62,9,4}, -{62,9,5}, -{62,9,6}, -{62,9,7}, -{62,9,8}, -{62,9,9}, -{62,9,10}, -{62,9,11}, -{62,9,12}, -{62,9,13}, -{62,9,14}, -{62,9,15}, -{62,9,16}, -{62,9,17}, -{62,9,18}, -{62,9,19}, -{62,9,20}, -{62,9,21}, -{62,9,22}, -{62,9,23}, -{62,9,24}, -{62,9,25}, -{62,9,26}, -{62,9,27}, -{62,9,28}, -{62,9,29}, -{62,9,30}, -{62,9,31}, -{62,9,32}, -{62,9,33}, -{62,9,34}, -{62,9,35}, -{62,9,36}, -{62,9,37}, -{62,9,38}, -{62,9,39}, -{62,9,40}, -{62,9,41}, -{62,9,42}, -{62,9,43}, -{62,9,44}, -{62,9,45}, -{62,9,46}, -{62,9,47}, -{62,9,48}, -{62,9,49}, -{62,9,50}, -{62,9,51}, -{62,9,52}, -{62,9,53}, -{62,9,54}, -{62,9,55}, -{62,9,56}, -{62,9,57}, -{62,9,58}, -{62,9,59}, -{62,9,60}, -{62,9,61}, -{62,9,62}, -{62,9,63}, -{62,9,64}, -{62,9,65}, -{62,9,66}, -{62,10,-59}, -{62,10,-58}, -{62,10,-57}, -{62,10,-56}, -{62,10,-55}, -{62,10,-54}, -{62,10,-53}, -{62,10,-52}, -{62,10,-51}, -{62,10,-50}, -{62,10,-49}, -{62,10,-48}, -{62,10,-47}, -{62,10,-46}, -{62,10,-45}, -{62,10,-44}, -{62,10,-43}, -{62,10,-42}, -{62,10,-41}, -{62,10,-40}, -{62,10,-39}, -{62,10,-38}, -{62,10,-37}, -{62,10,-36}, -{62,10,-35}, -{62,10,-34}, -{62,10,-33}, -{62,10,-32}, -{62,10,-31}, -{62,10,-30}, -{62,10,-29}, -{62,10,-28}, -{62,10,-27}, -{62,10,-26}, -{62,10,-25}, -{62,10,-24}, -{62,10,-23}, -{62,10,-22}, -{62,10,-21}, -{62,10,-20}, -{62,10,-19}, -{62,10,-18}, -{62,10,-17}, -{62,10,-16}, -{62,10,-15}, -{62,10,-14}, -{62,10,-13}, -{62,10,-12}, -{62,10,-11}, -{62,10,-10}, -{62,10,-9}, -{62,10,-8}, -{62,10,-7}, -{62,10,-6}, -{62,10,-5}, -{62,10,-4}, -{62,10,-3}, -{62,10,-2}, -{62,10,-1}, -{62,10,0}, -{62,10,1}, -{62,10,2}, -{62,10,3}, -{62,10,4}, -{62,10,5}, -{62,10,6}, -{62,10,7}, -{62,10,8}, -{62,10,9}, -{62,10,10}, -{62,10,11}, -{62,10,12}, -{62,10,13}, -{62,10,14}, -{62,10,15}, -{62,10,16}, -{62,10,17}, -{62,10,18}, -{62,10,19}, -{62,10,20}, -{62,10,21}, -{62,10,22}, -{62,10,23}, -{62,10,24}, -{62,10,25}, -{62,10,26}, -{62,10,27}, -{62,10,28}, -{62,10,29}, -{62,10,30}, -{62,10,31}, -{62,10,32}, -{62,10,33}, -{62,10,34}, -{62,10,35}, -{62,10,36}, -{62,10,37}, -{62,10,38}, -{62,10,39}, -{62,10,40}, -{62,10,41}, -{62,10,42}, -{62,10,43}, -{62,10,44}, -{62,10,45}, -{62,10,46}, -{62,10,47}, -{62,10,48}, -{62,10,49}, -{62,10,50}, -{62,10,51}, -{62,10,52}, -{62,10,53}, -{62,10,54}, -{62,10,55}, -{62,10,56}, -{62,10,57}, -{62,10,58}, -{62,10,59}, -{62,10,60}, -{62,10,61}, -{62,10,62}, -{62,10,63}, -{62,10,64}, -{62,10,65}, -{62,10,66}, -{62,10,67}, -{62,11,-59}, -{62,11,-58}, -{62,11,-57}, -{62,11,-56}, -{62,11,-55}, -{62,11,-54}, -{62,11,-53}, -{62,11,-52}, -{62,11,-51}, -{62,11,-50}, -{62,11,-49}, -{62,11,-48}, -{62,11,-47}, -{62,11,-46}, -{62,11,-45}, -{62,11,-44}, -{62,11,-43}, -{62,11,-42}, -{62,11,-41}, -{62,11,-40}, -{62,11,-39}, -{62,11,-38}, -{62,11,-37}, -{62,11,-36}, -{62,11,-35}, -{62,11,-34}, -{62,11,-33}, -{62,11,-32}, -{62,11,-31}, -{62,11,-30}, -{62,11,-29}, -{62,11,-28}, -{62,11,-27}, -{62,11,-26}, -{62,11,-25}, -{62,11,-24}, -{62,11,-23}, -{62,11,-22}, -{62,11,-21}, -{62,11,-20}, -{62,11,-19}, -{62,11,-18}, -{62,11,-17}, -{62,11,-16}, -{62,11,-15}, -{62,11,-14}, -{62,11,-13}, -{62,11,-12}, -{62,11,-11}, -{62,11,-10}, -{62,11,-9}, -{62,11,-8}, -{62,11,-7}, -{62,11,-6}, -{62,11,-5}, -{62,11,-4}, -{62,11,-3}, -{62,11,-2}, -{62,11,-1}, -{62,11,0}, -{62,11,1}, -{62,11,2}, -{62,11,3}, -{62,11,4}, -{62,11,5}, -{62,11,6}, -{62,11,7}, -{62,11,8}, -{62,11,9}, -{62,11,10}, -{62,11,11}, -{62,11,12}, -{62,11,13}, -{62,11,14}, -{62,11,15}, -{62,11,16}, -{62,11,17}, -{62,11,18}, -{62,11,19}, -{62,11,20}, -{62,11,21}, -{62,11,22}, -{62,11,23}, -{62,11,24}, -{62,11,25}, -{62,11,26}, -{62,11,27}, -{62,11,28}, -{62,11,29}, -{62,11,30}, -{62,11,31}, -{62,11,32}, -{62,11,33}, -{62,11,34}, -{62,11,35}, -{62,11,36}, -{62,11,37}, -{62,11,38}, -{62,11,39}, -{62,11,40}, -{62,11,41}, -{62,11,42}, -{62,11,43}, -{62,11,44}, -{62,11,45}, -{62,11,46}, -{62,11,47}, -{62,11,48}, -{62,11,49}, -{62,11,50}, -{62,11,51}, -{62,11,52}, -{62,11,53}, -{62,11,54}, -{62,11,55}, -{62,11,56}, -{62,11,57}, -{62,11,58}, -{62,11,59}, -{62,11,60}, -{62,11,61}, -{62,11,62}, -{62,11,63}, -{62,11,64}, -{62,11,65}, -{62,11,66}, -{62,11,67}, -{62,12,-59}, -{62,12,-58}, -{62,12,-57}, -{62,12,-56}, -{62,12,-55}, -{62,12,-54}, -{62,12,-53}, -{62,12,-52}, -{62,12,-51}, -{62,12,-50}, -{62,12,-49}, -{62,12,-48}, -{62,12,-47}, -{62,12,-46}, -{62,12,-45}, -{62,12,-44}, -{62,12,-43}, -{62,12,-42}, -{62,12,-41}, -{62,12,-40}, -{62,12,-39}, -{62,12,-38}, -{62,12,-37}, -{62,12,-36}, -{62,12,-35}, -{62,12,-34}, -{62,12,-33}, -{62,12,-32}, -{62,12,-31}, -{62,12,-30}, -{62,12,-29}, -{62,12,-28}, -{62,12,-27}, -{62,12,-26}, -{62,12,-25}, -{62,12,-24}, -{62,12,-23}, -{62,12,-22}, -{62,12,-21}, -{62,12,-20}, -{62,12,-19}, -{62,12,-18}, -{62,12,-17}, -{62,12,-16}, -{62,12,-15}, -{62,12,-14}, -{62,12,-13}, -{62,12,-12}, -{62,12,-11}, -{62,12,-10}, -{62,12,-9}, -{62,12,-8}, -{62,12,-7}, -{62,12,-6}, -{62,12,-5}, -{62,12,-4}, -{62,12,-3}, -{62,12,-2}, -{62,12,-1}, -{62,12,0}, -{62,12,1}, -{62,12,2}, -{62,12,3}, -{62,12,4}, -{62,12,5}, -{62,12,6}, -{62,12,7}, -{62,12,8}, -{62,12,9}, -{62,12,10}, -{62,12,11}, -{62,12,12}, -{62,12,13}, -{62,12,14}, -{62,12,15}, -{62,12,16}, -{62,12,17}, -{62,12,18}, -{62,12,19}, -{62,12,20}, -{62,12,21}, -{62,12,22}, -{62,12,23}, -{62,12,24}, -{62,12,25}, -{62,12,26}, -{62,12,27}, -{62,12,28}, -{62,12,29}, -{62,12,30}, -{62,12,31}, -{62,12,32}, -{62,12,33}, -{62,12,34}, -{62,12,35}, -{62,12,36}, -{62,12,37}, -{62,12,38}, -{62,12,39}, -{62,12,40}, -{62,12,41}, -{62,12,42}, -{62,12,43}, -{62,12,44}, -{62,12,45}, -{62,12,46}, -{62,12,47}, -{62,12,48}, -{62,12,49}, -{62,12,50}, -{62,12,51}, -{62,12,52}, -{62,12,53}, -{62,12,54}, -{62,12,55}, -{62,12,56}, -{62,12,57}, -{62,12,58}, -{62,12,59}, -{62,12,60}, -{62,12,61}, -{62,12,62}, -{62,12,63}, -{62,12,64}, -{62,12,65}, -{62,12,66}, -{62,12,67}, -{62,13,-59}, -{62,13,-58}, -{62,13,-57}, -{62,13,-56}, -{62,13,-55}, -{62,13,-54}, -{62,13,-53}, -{62,13,-52}, -{62,13,-51}, -{62,13,-50}, -{62,13,-49}, -{62,13,-48}, -{62,13,-47}, -{62,13,-46}, -{62,13,-45}, -{62,13,-44}, -{62,13,-43}, -{62,13,-42}, -{62,13,-41}, -{62,13,-40}, -{62,13,-39}, -{62,13,-38}, -{62,13,-37}, -{62,13,-36}, -{62,13,-35}, -{62,13,-34}, -{62,13,-33}, -{62,13,-32}, -{62,13,-31}, -{62,13,-30}, -{62,13,-29}, -{62,13,-28}, -{62,13,-27}, -{62,13,-26}, -{62,13,-25}, -{62,13,-24}, -{62,13,-23}, -{62,13,-22}, -{62,13,-21}, -{62,13,-20}, -{62,13,-19}, -{62,13,-18}, -{62,13,-17}, -{62,13,-16}, -{62,13,-15}, -{62,13,-14}, -{62,13,-13}, -{62,13,-12}, -{62,13,-11}, -{62,13,-10}, -{62,13,-9}, -{62,13,-8}, -{62,13,-7}, -{62,13,-6}, -{62,13,-5}, -{62,13,-4}, -{62,13,-3}, -{62,13,-2}, -{62,13,-1}, -{62,13,0}, -{62,13,1}, -{62,13,2}, -{62,13,3}, -{62,13,4}, -{62,13,5}, -{62,13,6}, -{62,13,7}, -{62,13,8}, -{62,13,9}, -{62,13,10}, -{62,13,11}, -{62,13,12}, -{62,13,13}, -{62,13,14}, -{62,13,15}, -{62,13,16}, -{62,13,17}, -{62,13,18}, -{62,13,19}, -{62,13,20}, -{62,13,21}, -{62,13,22}, -{62,13,23}, -{62,13,24}, -{62,13,25}, -{62,13,26}, -{62,13,27}, -{62,13,28}, -{62,13,29}, -{62,13,30}, -{62,13,31}, -{62,13,32}, -{62,13,33}, -{62,13,34}, -{62,13,35}, -{62,13,36}, -{62,13,37}, -{62,13,38}, -{62,13,39}, -{62,13,40}, -{62,13,41}, -{62,13,42}, -{62,13,43}, -{62,13,44}, -{62,13,45}, -{62,13,46}, -{62,13,47}, -{62,13,48}, -{62,13,49}, -{62,13,50}, -{62,13,51}, -{62,13,52}, -{62,13,53}, -{62,13,54}, -{62,13,55}, -{62,13,56}, -{62,13,57}, -{62,13,58}, -{62,13,59}, -{62,13,60}, -{62,13,61}, -{62,13,62}, -{62,13,63}, -{62,13,64}, -{62,13,65}, -{62,13,66}, -{62,13,67}, -{62,14,-59}, -{62,14,-58}, -{62,14,-57}, -{62,14,-56}, -{62,14,-55}, -{62,14,-54}, -{62,14,-53}, -{62,14,-52}, -{62,14,-51}, -{62,14,-50}, -{62,14,-49}, -{62,14,-48}, -{62,14,-47}, -{62,14,-46}, -{62,14,-45}, -{62,14,-44}, -{62,14,-43}, -{62,14,-42}, -{62,14,-41}, -{62,14,-40}, -{62,14,-39}, -{62,14,-38}, -{62,14,-37}, -{62,14,-36}, -{62,14,-35}, -{62,14,-34}, -{62,14,-33}, -{62,14,-32}, -{62,14,-31}, -{62,14,-30}, -{62,14,-29}, -{62,14,-28}, -{62,14,-27}, -{62,14,-26}, -{62,14,-25}, -{62,14,-24}, -{62,14,-23}, -{62,14,-22}, -{62,14,-21}, -{62,14,-20}, -{62,14,-19}, -{62,14,-18}, -{62,14,-17}, -{62,14,-16}, -{62,14,-15}, -{62,14,-14}, -{62,14,-13}, -{62,14,-12}, -{62,14,-11}, -{62,14,-10}, -{62,14,-9}, -{62,14,-8}, -{62,14,-7}, -{62,14,-6}, -{62,14,-5}, -{62,14,-4}, -{62,14,-3}, -{62,14,-2}, -{62,14,-1}, -{62,14,0}, -{62,14,1}, -{62,14,2}, -{62,14,3}, -{62,14,4}, -{62,14,5}, -{62,14,6}, -{62,14,7}, -{62,14,8}, -{62,14,9}, -{62,14,10}, -{62,14,11}, -{62,14,12}, -{62,14,13}, -{62,14,14}, -{62,14,15}, -{62,14,16}, -{62,14,17}, -{62,14,18}, -{62,14,19}, -{62,14,20}, -{62,14,21}, -{62,14,22}, -{62,14,23}, -{62,14,24}, -{62,14,25}, -{62,14,26}, -{62,14,27}, -{62,14,28}, -{62,14,29}, -{62,14,30}, -{62,14,31}, -{62,14,32}, -{62,14,33}, -{62,14,34}, -{62,14,35}, -{62,14,36}, -{62,14,37}, -{62,14,38}, -{62,14,39}, -{62,14,40}, -{62,14,41}, -{62,14,42}, -{62,14,43}, -{62,14,44}, -{62,14,45}, -{62,14,46}, -{62,14,47}, -{62,14,48}, -{62,14,49}, -{62,14,50}, -{62,14,51}, -{62,14,52}, -{62,14,53}, -{62,14,54}, -{62,14,55}, -{62,14,56}, -{62,14,57}, -{62,14,58}, -{62,14,59}, -{62,14,60}, -{62,14,61}, -{62,14,62}, -{62,14,63}, -{62,14,64}, -{62,14,65}, -{62,14,66}, -{62,14,67}, -{62,15,-59}, -{62,15,-58}, -{62,15,-57}, -{62,15,-56}, -{62,15,-55}, -{62,15,-54}, -{62,15,-53}, -{62,15,-52}, -{62,15,-51}, -{62,15,-50}, -{62,15,-49}, -{62,15,-48}, -{62,15,-47}, -{62,15,-46}, -{62,15,-45}, -{62,15,-44}, -{62,15,-43}, -{62,15,-42}, -{62,15,-41}, -{62,15,-40}, -{62,15,-39}, -{62,15,-38}, -{62,15,-37}, -{62,15,-36}, -{62,15,-35}, -{62,15,-34}, -{62,15,-33}, -{62,15,-32}, -{62,15,-31}, -{62,15,-30}, -{62,15,-29}, -{62,15,-28}, -{62,15,-27}, -{62,15,-26}, -{62,15,-25}, -{62,15,-24}, -{62,15,-23}, -{62,15,-22}, -{62,15,-21}, -{62,15,-20}, -{62,15,-19}, -{62,15,-18}, -{62,15,-17}, -{62,15,-16}, -{62,15,-15}, -{62,15,-14}, -{62,15,-13}, -{62,15,-12}, -{62,15,-11}, -{62,15,-10}, -{62,15,-9}, -{62,15,-8}, -{62,15,-7}, -{62,15,-6}, -{62,15,-5}, -{62,15,-4}, -{62,15,-3}, -{62,15,-2}, -{62,15,-1}, -{62,15,0}, -{62,15,1}, -{62,15,2}, -{62,15,3}, -{62,15,4}, -{62,15,5}, -{62,15,6}, -{62,15,7}, -{62,15,8}, -{62,15,9}, -{62,15,10}, -{62,15,11}, -{62,15,12}, -{62,15,13}, -{62,15,14}, -{62,15,15}, -{62,15,16}, -{62,15,17}, -{62,15,18}, -{62,15,19}, -{62,15,20}, -{62,15,21}, -{62,15,22}, -{62,15,23}, -{62,15,24}, -{62,15,25}, -{62,15,26}, -{62,15,27}, -{62,15,28}, -{62,15,29}, -{62,15,30}, -{62,15,31}, -{62,15,32}, -{62,15,33}, -{62,15,34}, -{62,15,35}, -{62,15,36}, -{62,15,37}, -{62,15,38}, -{62,15,39}, -{62,15,40}, -{62,15,41}, -{62,15,42}, -{62,15,43}, -{62,15,44}, -{62,15,45}, -{62,15,46}, -{62,15,47}, -{62,15,48}, -{62,15,49}, -{62,15,50}, -{62,15,51}, -{62,15,52}, -{62,15,53}, -{62,15,54}, -{62,15,55}, -{62,15,56}, -{62,15,57}, -{62,15,58}, -{62,15,59}, -{62,15,60}, -{62,15,61}, -{62,15,62}, -{62,15,63}, -{62,15,64}, -{62,15,65}, -{62,15,66}, -{62,15,67}, -{62,16,-59}, -{62,16,-58}, -{62,16,-57}, -{62,16,-56}, -{62,16,-55}, -{62,16,-54}, -{62,16,-53}, -{62,16,-52}, -{62,16,-51}, -{62,16,-50}, -{62,16,-49}, -{62,16,-48}, -{62,16,-47}, -{62,16,-46}, -{62,16,-45}, -{62,16,-44}, -{62,16,-43}, -{62,16,-42}, -{62,16,-41}, -{62,16,-40}, -{62,16,-39}, -{62,16,-38}, -{62,16,-37}, -{62,16,-36}, -{62,16,-35}, -{62,16,-34}, -{62,16,-33}, -{62,16,-32}, -{62,16,-31}, -{62,16,-30}, -{62,16,-29}, -{62,16,-28}, -{62,16,-27}, -{62,16,-26}, -{62,16,-25}, -{62,16,-24}, -{62,16,-23}, -{62,16,-22}, -{62,16,-21}, -{62,16,-20}, -{62,16,-19}, -{62,16,-18}, -{62,16,-17}, -{62,16,-16}, -{62,16,-15}, -{62,16,-14}, -{62,16,-13}, -{62,16,-12}, -{62,16,-11}, -{62,16,-10}, -{62,16,-9}, -{62,16,-8}, -{62,16,-7}, -{62,16,-6}, -{62,16,-5}, -{62,16,-4}, -{62,16,-3}, -{62,16,-2}, -{62,16,-1}, -{62,16,0}, -{62,16,1}, -{62,16,2}, -{62,16,3}, -{62,16,4}, -{62,16,5}, -{62,16,6}, -{62,16,7}, -{62,16,8}, -{62,16,9}, -{62,16,10}, -{62,16,11}, -{62,16,12}, -{62,16,13}, -{62,16,14}, -{62,16,15}, -{62,16,16}, -{62,16,17}, -{62,16,18}, -{62,16,19}, -{62,16,20}, -{62,16,21}, -{62,16,22}, -{62,16,23}, -{62,16,24}, -{62,16,25}, -{62,16,26}, -{62,16,27}, -{62,16,28}, -{62,16,29}, -{62,16,30}, -{62,16,31}, -{62,16,32}, -{62,16,33}, -{62,16,34}, -{62,16,35}, -{62,16,36}, -{62,16,37}, -{62,16,38}, -{62,16,39}, -{62,16,40}, -{62,16,41}, -{62,16,42}, -{62,16,43}, -{62,16,44}, -{62,16,45}, -{62,16,46}, -{62,16,47}, -{62,16,48}, -{62,16,49}, -{62,16,50}, -{62,16,51}, -{62,16,52}, -{62,16,53}, -{62,16,54}, -{62,16,55}, -{62,16,56}, -{62,16,57}, -{62,16,58}, -{62,16,59}, -{62,16,60}, -{62,16,61}, -{62,16,62}, -{62,16,63}, -{62,16,64}, -{62,16,65}, -{62,16,66}, -{62,16,67}, -{62,17,-59}, -{62,17,-58}, -{62,17,-57}, -{62,17,-56}, -{62,17,-55}, -{62,17,-54}, -{62,17,-53}, -{62,17,-52}, -{62,17,-51}, -{62,17,-50}, -{62,17,-49}, -{62,17,-48}, -{62,17,-47}, -{62,17,-46}, -{62,17,-45}, -{62,17,-44}, -{62,17,-43}, -{62,17,-42}, -{62,17,-41}, -{62,17,-40}, -{62,17,-39}, -{62,17,-38}, -{62,17,-37}, -{62,17,-36}, -{62,17,-35}, -{62,17,-34}, -{62,17,-33}, -{62,17,-32}, -{62,17,-31}, -{62,17,-30}, -{62,17,-29}, -{62,17,-28}, -{62,17,-27}, -{62,17,-26}, -{62,17,-25}, -{62,17,-24}, -{62,17,-23}, -{62,17,-22}, -{62,17,-21}, -{62,17,-20}, -{62,17,-19}, -{62,17,-18}, -{62,17,-17}, -{62,17,-16}, -{62,17,-15}, -{62,17,-14}, -{62,17,-13}, -{62,17,-12}, -{62,17,-11}, -{62,17,-10}, -{62,17,-9}, -{62,17,-8}, -{62,17,-7}, -{62,17,-6}, -{62,17,-5}, -{62,17,-4}, -{62,17,-3}, -{62,17,-2}, -{62,17,-1}, -{62,17,0}, -{62,17,1}, -{62,17,2}, -{62,17,3}, -{62,17,4}, -{62,17,5}, -{62,17,6}, -{62,17,7}, -{62,17,8}, -{62,17,9}, -{62,17,10}, -{62,17,11}, -{62,17,12}, -{62,17,13}, -{62,17,14}, -{62,17,15}, -{62,17,16}, -{62,17,17}, -{62,17,18}, -{62,17,19}, -{62,17,20}, -{62,17,21}, -{62,17,22}, -{62,17,23}, -{62,17,24}, -{62,17,25}, -{62,17,26}, -{62,17,27}, -{62,17,28}, -{62,17,29}, -{62,17,30}, -{62,17,31}, -{62,17,32}, -{62,17,33}, -{62,17,34}, -{62,17,35}, -{62,17,36}, -{62,17,37}, -{62,17,38}, -{62,17,39}, -{62,17,40}, -{62,17,41}, -{62,17,42}, -{62,17,43}, -{62,17,44}, -{62,17,45}, -{62,17,46}, -{62,17,47}, -{62,17,48}, -{62,17,49}, -{62,17,50}, -{62,17,51}, -{62,17,52}, -{62,17,53}, -{62,17,54}, -{62,17,55}, -{62,17,56}, -{62,17,57}, -{62,17,58}, -{62,17,59}, -{62,17,60}, -{62,17,61}, -{62,17,62}, -{62,17,63}, -{62,17,64}, -{62,17,65}, -{62,17,66}, -{62,17,67}, -{62,18,-59}, -{62,18,-58}, -{62,18,-57}, -{62,18,-56}, -{62,18,-55}, -{62,18,-54}, -{62,18,-53}, -{62,18,-52}, -{62,18,-51}, -{62,18,-50}, -{62,18,-49}, -{62,18,-48}, -{62,18,-47}, -{62,18,-46}, -{62,18,-45}, -{62,18,-44}, -{62,18,-43}, -{62,18,-42}, -{62,18,-41}, -{62,18,-40}, -{62,18,-39}, -{62,18,-38}, -{62,18,-37}, -{62,18,-36}, -{62,18,-35}, -{62,18,-34}, -{62,18,-33}, -{62,18,-32}, -{62,18,-31}, -{62,18,-30}, -{62,18,-29}, -{62,18,-28}, -{62,18,-27}, -{62,18,-26}, -{62,18,-25}, -{62,18,-24}, -{62,18,-23}, -{62,18,-22}, -{62,18,-21}, -{62,18,-20}, -{62,18,-19}, -{62,18,-18}, -{62,18,-17}, -{62,18,-16}, -{62,18,-15}, -{62,18,-14}, -{62,18,-13}, -{62,18,-12}, -{62,18,-11}, -{62,18,-10}, -{62,18,-9}, -{62,18,-8}, -{62,18,-7}, -{62,18,-6}, -{62,18,-5}, -{62,18,-4}, -{62,18,-3}, -{62,18,-2}, -{62,18,-1}, -{62,18,0}, -{62,18,1}, -{62,18,2}, -{62,18,3}, -{62,18,4}, -{62,18,5}, -{62,18,6}, -{62,18,7}, -{62,18,8}, -{62,18,9}, -{62,18,10}, -{62,18,11}, -{62,18,12}, -{62,18,13}, -{62,18,14}, -{62,18,15}, -{62,18,16}, -{62,18,17}, -{62,18,18}, -{62,18,19}, -{62,18,20}, -{62,18,21}, -{62,18,22}, -{62,18,23}, -{62,18,24}, -{62,18,25}, -{62,18,26}, -{62,18,27}, -{62,18,28}, -{62,18,29}, -{62,18,30}, -{62,18,31}, -{62,18,32}, -{62,18,33}, -{62,18,34}, -{62,18,35}, -{62,18,36}, -{62,18,37}, -{62,18,38}, -{62,18,39}, -{62,18,40}, -{62,18,41}, -{62,18,42}, -{62,18,43}, -{62,18,44}, -{62,18,45}, -{62,18,46}, -{62,18,47}, -{62,18,48}, -{62,18,49}, -{62,18,50}, -{62,18,51}, -{62,18,52}, -{62,18,53}, -{62,18,54}, -{62,18,55}, -{62,18,56}, -{62,18,57}, -{62,18,58}, -{62,18,59}, -{62,18,60}, -{62,18,61}, -{62,18,62}, -{62,18,63}, -{62,18,64}, -{62,18,65}, -{62,18,66}, -{62,18,67}, -{62,19,-59}, -{62,19,-58}, -{62,19,-57}, -{62,19,-56}, -{62,19,-55}, -{62,19,-54}, -{62,19,-53}, -{62,19,-52}, -{62,19,-51}, -{62,19,-50}, -{62,19,-49}, -{62,19,-48}, -{62,19,-47}, -{62,19,-46}, -{62,19,-45}, -{62,19,-44}, -{62,19,-43}, -{62,19,-42}, -{62,19,-41}, -{62,19,-40}, -{62,19,-39}, -{62,19,-38}, -{62,19,-37}, -{62,19,-36}, -{62,19,-35}, -{62,19,-34}, -{62,19,-33}, -{62,19,-32}, -{62,19,-31}, -{62,19,-30}, -{62,19,-29}, -{62,19,-28}, -{62,19,-27}, -{62,19,-26}, -{62,19,-25}, -{62,19,-24}, -{62,19,-23}, -{62,19,-22}, -{62,19,-21}, -{62,19,-20}, -{62,19,-19}, -{62,19,-18}, -{62,19,-17}, -{62,19,-16}, -{62,19,-15}, -{62,19,-14}, -{62,19,-13}, -{62,19,-12}, -{62,19,-11}, -{62,19,-10}, -{62,19,-9}, -{62,19,-8}, -{62,19,-7}, -{62,19,-6}, -{62,19,-5}, -{62,19,-4}, -{62,19,-3}, -{62,19,-2}, -{62,19,-1}, -{62,19,0}, -{62,19,1}, -{62,19,2}, -{62,19,3}, -{62,19,4}, -{62,19,5}, -{62,19,6}, -{62,19,7}, -{62,19,8}, -{62,19,9}, -{62,19,10}, -{62,19,11}, -{62,19,12}, -{62,19,13}, -{62,19,14}, -{62,19,15}, -{62,19,16}, -{62,19,17}, -{62,19,18}, -{62,19,19}, -{62,19,20}, -{62,19,21}, -{62,19,22}, -{62,19,23}, -{62,19,24}, -{62,19,25}, -{62,19,26}, -{62,19,27}, -{62,19,28}, -{62,19,29}, -{62,19,30}, -{62,19,31}, -{62,19,32}, -{62,19,33}, -{62,19,34}, -{62,19,35}, -{62,19,36}, -{62,19,37}, -{62,19,38}, -{62,19,39}, -{62,19,40}, -{62,19,41}, -{62,19,42}, -{62,19,43}, -{62,19,44}, -{62,19,45}, -{62,19,46}, -{62,19,47}, -{62,19,48}, -{62,19,49}, -{62,19,50}, -{62,19,51}, -{62,19,52}, -{62,19,53}, -{62,19,54}, -{62,19,55}, -{62,19,56}, -{62,19,57}, -{62,19,58}, -{62,19,59}, -{62,19,60}, -{62,19,61}, -{62,19,62}, -{62,19,63}, -{62,19,64}, -{62,19,65}, -{62,19,66}, -{62,19,67}, -{62,20,-59}, -{62,20,-58}, -{62,20,-57}, -{62,20,-56}, -{62,20,-55}, -{62,20,-54}, -{62,20,-53}, -{62,20,-52}, -{62,20,-51}, -{62,20,-50}, -{62,20,-49}, -{62,20,-48}, -{62,20,-47}, -{62,20,-46}, -{62,20,-45}, -{62,20,-44}, -{62,20,-43}, -{62,20,-42}, -{62,20,-41}, -{62,20,-40}, -{62,20,-39}, -{62,20,-38}, -{62,20,-37}, -{62,20,-36}, -{62,20,-35}, -{62,20,-34}, -{62,20,-33}, -{62,20,-32}, -{62,20,-31}, -{62,20,-30}, -{62,20,-29}, -{62,20,-28}, -{62,20,-27}, -{62,20,-26}, -{62,20,-25}, -{62,20,-24}, -{62,20,-23}, -{62,20,-22}, -{62,20,-21}, -{62,20,-20}, -{62,20,-19}, -{62,20,-18}, -{62,20,-17}, -{62,20,-16}, -{62,20,-15}, -{62,20,-14}, -{62,20,-13}, -{62,20,-12}, -{62,20,-11}, -{62,20,-10}, -{62,20,-9}, -{62,20,-8}, -{62,20,-7}, -{62,20,-6}, -{62,20,-5}, -{62,20,-4}, -{62,20,-3}, -{62,20,-2}, -{62,20,-1}, -{62,20,0}, -{62,20,1}, -{62,20,2}, -{62,20,3}, -{62,20,4}, -{62,20,5}, -{62,20,6}, -{62,20,7}, -{62,20,8}, -{62,20,9}, -{62,20,10}, -{62,20,11}, -{62,20,12}, -{62,20,13}, -{62,20,14}, -{62,20,15}, -{62,20,16}, -{62,20,17}, -{62,20,18}, -{62,20,19}, -{62,20,20}, -{62,20,21}, -{62,20,22}, -{62,20,23}, -{62,20,24}, -{62,20,25}, -{62,20,26}, -{62,20,27}, -{62,20,28}, -{62,20,29}, -{62,20,30}, -{62,20,31}, -{62,20,32}, -{62,20,33}, -{62,20,34}, -{62,20,35}, -{62,20,36}, -{62,20,37}, -{62,20,38}, -{62,20,39}, -{62,20,40}, -{62,20,41}, -{62,20,42}, -{62,20,43}, -{62,20,44}, -{62,20,45}, -{62,20,46}, -{62,20,47}, -{62,20,48}, -{62,20,49}, -{62,20,50}, -{62,20,51}, -{62,20,52}, -{62,20,53}, -{62,20,54}, -{62,20,55}, -{62,20,56}, -{62,20,57}, -{62,20,58}, -{62,20,59}, -{62,20,60}, -{62,20,61}, -{62,20,62}, -{62,20,63}, -{62,20,64}, -{62,20,65}, -{62,20,66}, -{62,20,67}, -{62,21,-59}, -{62,21,-58}, -{62,21,-57}, -{62,21,-56}, -{62,21,-55}, -{62,21,-54}, -{62,21,-53}, -{62,21,-52}, -{62,21,-51}, -{62,21,-50}, -{62,21,-49}, -{62,21,-48}, -{62,21,-47}, -{62,21,-46}, -{62,21,-45}, -{62,21,-44}, -{62,21,-43}, -{62,21,-42}, -{62,21,-41}, -{62,21,-40}, -{62,21,-39}, -{62,21,-38}, -{62,21,-37}, -{62,21,-36}, -{62,21,-35}, -{62,21,-34}, -{62,21,-33}, -{62,21,-32}, -{62,21,-31}, -{62,21,-30}, -{62,21,-29}, -{62,21,-28}, -{62,21,-27}, -{62,21,-26}, -{62,21,-25}, -{62,21,-24}, -{62,21,-23}, -{62,21,-22}, -{62,21,-21}, -{62,21,-20}, -{62,21,-19}, -{62,21,-18}, -{62,21,-17}, -{62,21,-16}, -{62,21,-15}, -{62,21,-14}, -{62,21,-13}, -{62,21,-12}, -{62,21,-11}, -{62,21,-10}, -{62,21,-9}, -{62,21,-8}, -{62,21,-7}, -{62,21,-6}, -{62,21,-5}, -{62,21,-4}, -{62,21,-3}, -{62,21,-2}, -{62,21,-1}, -{62,21,0}, -{62,21,1}, -{62,21,2}, -{62,21,3}, -{62,21,4}, -{62,21,5}, -{62,21,6}, -{62,21,7}, -{62,21,8}, -{62,21,9}, -{62,21,10}, -{62,21,11}, -{62,21,12}, -{62,21,13}, -{62,21,14}, -{62,21,15}, -{62,21,16}, -{62,21,17}, -{62,21,18}, -{62,21,19}, -{62,21,20}, -{62,21,21}, -{62,21,22}, -{62,21,23}, -{62,21,24}, -{62,21,25}, -{62,21,26}, -{62,21,27}, -{62,21,28}, -{62,21,29}, -{62,21,30}, -{62,21,31}, -{62,21,32}, -{62,21,33}, -{62,21,34}, -{62,21,35}, -{62,21,36}, -{62,21,37}, -{62,21,38}, -{62,21,39}, -{62,21,40}, -{62,21,41}, -{62,21,42}, -{62,21,43}, -{62,21,44}, -{62,21,45}, -{62,21,46}, -{62,21,47}, -{62,21,48}, -{62,21,49}, -{62,21,50}, -{62,21,51}, -{62,21,52}, -{62,21,53}, -{62,21,54}, -{62,21,55}, -{62,21,56}, -{62,21,57}, -{62,21,58}, -{62,21,59}, -{62,21,60}, -{62,21,61}, -{62,21,62}, -{62,21,63}, -{62,21,64}, -{62,21,65}, -{62,21,66}, -{62,21,67}, -{62,22,-59}, -{62,22,-58}, -{62,22,-57}, -{62,22,-56}, -{62,22,-55}, -{62,22,-54}, -{62,22,-53}, -{62,22,-52}, -{62,22,-51}, -{62,22,-50}, -{62,22,-49}, -{62,22,-48}, -{62,22,-47}, -{62,22,-46}, -{62,22,-45}, -{62,22,-44}, -{62,22,-43}, -{62,22,-42}, -{62,22,-41}, -{62,22,-40}, -{62,22,-39}, -{62,22,-38}, -{62,22,-37}, -{62,22,-36}, -{62,22,-35}, -{62,22,-34}, -{62,22,-33}, -{62,22,-32}, -{62,22,-31}, -{62,22,-30}, -{62,22,-29}, -{62,22,-28}, -{62,22,-27}, -{62,22,-26}, -{62,22,-25}, -{62,22,-24}, -{62,22,-23}, -{62,22,-22}, -{62,22,-21}, -{62,22,-20}, -{62,22,-19}, -{62,22,-18}, -{62,22,-17}, -{62,22,-16}, -{62,22,-15}, -{62,22,-14}, -{62,22,-13}, -{62,22,-12}, -{62,22,-11}, -{62,22,-10}, -{62,22,-9}, -{62,22,-8}, -{62,22,-7}, -{62,22,-6}, -{62,22,-5}, -{62,22,-4}, -{62,22,-3}, -{62,22,-2}, -{62,22,-1}, -{62,22,0}, -{62,22,1}, -{62,22,2}, -{62,22,3}, -{62,22,4}, -{62,22,5}, -{62,22,6}, -{62,22,7}, -{62,22,8}, -{62,22,9}, -{62,22,10}, -{62,22,11}, -{62,22,12}, -{62,22,13}, -{62,22,14}, -{62,22,15}, -{62,22,16}, -{62,22,17}, -{62,22,18}, -{62,22,19}, -{62,22,20}, -{62,22,21}, -{62,22,22}, -{62,22,23}, -{62,22,24}, -{62,22,25}, -{62,22,26}, -{62,22,27}, -{62,22,28}, -{62,22,29}, -{62,22,30}, -{62,22,31}, -{62,22,32}, -{62,22,33}, -{62,22,34}, -{62,22,35}, -{62,22,36}, -{62,22,37}, -{62,22,38}, -{62,22,39}, -{62,22,40}, -{62,22,41}, -{62,22,42}, -{62,22,43}, -{62,22,44}, -{62,22,45}, -{62,22,46}, -{62,22,47}, -{62,22,48}, -{62,22,49}, -{62,22,50}, -{62,22,51}, -{62,22,52}, -{62,22,53}, -{62,22,54}, -{62,22,55}, -{62,22,56}, -{62,22,57}, -{62,22,58}, -{62,22,59}, -{62,22,60}, -{62,22,61}, -{62,22,62}, -{62,22,63}, -{62,22,64}, -{62,22,65}, -{62,22,66}, -{62,22,67}, -{62,22,68}, -{62,23,-59}, -{62,23,-58}, -{62,23,-57}, -{62,23,-56}, -{62,23,-55}, -{62,23,-54}, -{62,23,-53}, -{62,23,-52}, -{62,23,-51}, -{62,23,-50}, -{62,23,-49}, -{62,23,-48}, -{62,23,-47}, -{62,23,-46}, -{62,23,-45}, -{62,23,-44}, -{62,23,-43}, -{62,23,-42}, -{62,23,-41}, -{62,23,-40}, -{62,23,-39}, -{62,23,-38}, -{62,23,-37}, -{62,23,-36}, -{62,23,-35}, -{62,23,-34}, -{62,23,-33}, -{62,23,-32}, -{62,23,-31}, -{62,23,-30}, -{62,23,-29}, -{62,23,-28}, -{62,23,-27}, -{62,23,-26}, -{62,23,-25}, -{62,23,-24}, -{62,23,-23}, -{62,23,-22}, -{62,23,-21}, -{62,23,-20}, -{62,23,-19}, -{62,23,-18}, -{62,23,-17}, -{62,23,-16}, -{62,23,-15}, -{62,23,-14}, -{62,23,-13}, -{62,23,-12}, -{62,23,-11}, -{62,23,-10}, -{62,23,-9}, -{62,23,-8}, -{62,23,-7}, -{62,23,-6}, -{62,23,-5}, -{62,23,-4}, -{62,23,-3}, -{62,23,-2}, -{62,23,-1}, -{62,23,0}, -{62,23,1}, -{62,23,2}, -{62,23,3}, -{62,23,4}, -{62,23,5}, -{62,23,6}, -{62,23,7}, -{62,23,8}, -{62,23,9}, -{62,23,10}, -{62,23,11}, -{62,23,12}, -{62,23,13}, -{62,23,14}, -{62,23,15}, -{62,23,16}, -{62,23,17}, -{62,23,18}, -{62,23,19}, -{62,23,20}, -{62,23,21}, -{62,23,22}, -{62,23,23}, -{62,23,24}, -{62,23,25}, -{62,23,26}, -{62,23,27}, -{62,23,28}, -{62,23,29}, -{62,23,30}, -{62,23,31}, -{62,23,32}, -{62,23,33}, -{62,23,34}, -{62,23,35}, -{62,23,36}, -{62,23,37}, -{62,23,38}, -{62,23,39}, -{62,23,40}, -{62,23,41}, -{62,23,42}, -{62,23,43}, -{62,23,44}, -{62,23,45}, -{62,23,46}, -{62,23,47}, -{62,23,48}, -{62,23,49}, -{62,23,50}, -{62,23,51}, -{62,23,52}, -{62,23,53}, -{62,23,54}, -{62,23,55}, -{62,23,56}, -{62,23,57}, -{62,23,58}, -{62,23,59}, -{62,23,60}, -{62,23,61}, -{62,23,62}, -{62,23,63}, -{62,23,64}, -{62,23,65}, -{62,23,66}, -{62,23,67}, -{62,23,68}, -{62,24,-59}, -{62,24,-58}, -{62,24,-57}, -{62,24,-56}, -{62,24,-55}, -{62,24,-54}, -{62,24,-53}, -{62,24,-52}, -{62,24,-51}, -{62,24,-50}, -{62,24,-49}, -{62,24,-48}, -{62,24,-47}, -{62,24,-46}, -{62,24,-45}, -{62,24,-44}, -{62,24,-43}, -{62,24,-42}, -{62,24,-41}, -{62,24,-40}, -{62,24,-39}, -{62,24,-38}, -{62,24,-37}, -{62,24,-36}, -{62,24,-35}, -{62,24,-34}, -{62,24,-33}, -{62,24,-32}, -{62,24,-31}, -{62,24,-30}, -{62,24,-29}, -{62,24,-28}, -{62,24,-27}, -{62,24,-26}, -{62,24,-25}, -{62,24,-24}, -{62,24,-23}, -{62,24,-22}, -{62,24,-21}, -{62,24,-20}, -{62,24,-19}, -{62,24,-18}, -{62,24,-17}, -{62,24,-16}, -{62,24,-15}, -{62,24,-14}, -{62,24,-13}, -{62,24,-12}, -{62,24,-11}, -{62,24,-10}, -{62,24,-9}, -{62,24,-8}, -{62,24,-7}, -{62,24,-6}, -{62,24,-5}, -{62,24,-4}, -{62,24,-3}, -{62,24,-2}, -{62,24,-1}, -{62,24,0}, -{62,24,1}, -{62,24,2}, -{62,24,3}, -{62,24,4}, -{62,24,5}, -{62,24,6}, -{62,24,7}, -{62,24,8}, -{62,24,9}, -{62,24,10}, -{62,24,11}, -{62,24,12}, -{62,24,13}, -{62,24,14}, -{62,24,15}, -{62,24,16}, -{62,24,17}, -{62,24,18}, -{62,24,19}, -{62,24,20}, -{62,24,21}, -{62,24,22}, -{62,24,23}, -{62,24,24}, -{62,24,25}, -{62,24,26}, -{62,24,27}, -{62,24,28}, -{62,24,29}, -{62,24,30}, -{62,24,31}, -{62,24,32}, -{62,24,33}, -{62,24,34}, -{62,24,35}, -{62,24,36}, -{62,24,37}, -{62,24,38}, -{62,24,39}, -{62,24,40}, -{62,24,41}, -{62,24,42}, -{62,24,43}, -{62,24,44}, -{62,24,45}, -{62,24,46}, -{62,24,47}, -{62,24,48}, -{62,24,49}, -{62,24,50}, -{62,24,51}, -{62,24,52}, -{62,24,53}, -{62,24,54}, -{62,24,55}, -{62,24,56}, -{62,24,57}, -{62,24,58}, -{62,24,59}, -{62,24,60}, -{62,24,61}, -{62,24,62}, -{62,24,63}, -{62,24,64}, -{62,24,65}, -{62,24,66}, -{62,24,67}, -{62,24,68}, -{62,25,-59}, -{62,25,-58}, -{62,25,-57}, -{62,25,-56}, -{62,25,-55}, -{62,25,-54}, -{62,25,-53}, -{62,25,-52}, -{62,25,-51}, -{62,25,-50}, -{62,25,-49}, -{62,25,-48}, -{62,25,-47}, -{62,25,-46}, -{62,25,-45}, -{62,25,-44}, -{62,25,-43}, -{62,25,-42}, -{62,25,-41}, -{62,25,-40}, -{62,25,-39}, -{62,25,-38}, -{62,25,-37}, -{62,25,-36}, -{62,25,-35}, -{62,25,-34}, -{62,25,-33}, -{62,25,-32}, -{62,25,-31}, -{62,25,-30}, -{62,25,-29}, -{62,25,-28}, -{62,25,-27}, -{62,25,-26}, -{62,25,-25}, -{62,25,-24}, -{62,25,-23}, -{62,25,-22}, -{62,25,-21}, -{62,25,-20}, -{62,25,-19}, -{62,25,-18}, -{62,25,-17}, -{62,25,-16}, -{62,25,-15}, -{62,25,-14}, -{62,25,-13}, -{62,25,-12}, -{62,25,-11}, -{62,25,-10}, -{62,25,-9}, -{62,25,-8}, -{62,25,-7}, -{62,25,-6}, -{62,25,-5}, -{62,25,-4}, -{62,25,-3}, -{62,25,-2}, -{62,25,-1}, -{62,25,0}, -{62,25,1}, -{62,25,2}, -{62,25,3}, -{62,25,4}, -{62,25,5}, -{62,25,6}, -{62,25,7}, -{62,25,8}, -{62,25,9}, -{62,25,10}, -{62,25,11}, -{62,25,12}, -{62,25,13}, -{62,25,14}, -{62,25,15}, -{62,25,16}, -{62,25,17}, -{62,25,18}, -{62,25,19}, -{62,25,20}, -{62,25,21}, -{62,25,22}, -{62,25,23}, -{62,25,24}, -{62,25,25}, -{62,25,26}, -{62,25,27}, -{62,25,28}, -{62,25,29}, -{62,25,30}, -{62,25,31}, -{62,25,32}, -{62,25,33}, -{62,25,34}, -{62,25,35}, -{62,25,36}, -{62,25,37}, -{62,25,38}, -{62,25,39}, -{62,25,40}, -{62,25,41}, -{62,25,42}, -{62,25,43}, -{62,25,44}, -{62,25,45}, -{62,25,46}, -{62,25,47}, -{62,25,48}, -{62,25,49}, -{62,25,50}, -{62,25,51}, -{62,25,52}, -{62,25,53}, -{62,25,54}, -{62,25,55}, -{62,25,56}, -{62,25,57}, -{62,25,58}, -{62,25,59}, -{62,25,60}, -{62,25,61}, -{62,25,62}, -{62,25,63}, -{62,25,64}, -{62,25,65}, -{62,25,66}, -{62,25,67}, -{62,25,68}, -{62,26,-59}, -{62,26,-58}, -{62,26,-57}, -{62,26,-56}, -{62,26,-55}, -{62,26,-54}, -{62,26,-53}, -{62,26,-52}, -{62,26,-51}, -{62,26,-50}, -{62,26,-49}, -{62,26,-48}, -{62,26,-47}, -{62,26,-46}, -{62,26,-45}, -{62,26,-44}, -{62,26,-43}, -{62,26,-42}, -{62,26,-41}, -{62,26,-40}, -{62,26,-39}, -{62,26,-38}, -{62,26,-37}, -{62,26,-36}, -{62,26,-35}, -{62,26,-34}, -{62,26,-33}, -{62,26,-32}, -{62,26,-31}, -{62,26,-30}, -{62,26,-29}, -{62,26,-28}, -{62,26,-27}, -{62,26,-26}, -{62,26,-25}, -{62,26,-24}, -{62,26,-23}, -{62,26,-22}, -{62,26,-21}, -{62,26,-20}, -{62,26,-19}, -{62,26,-18}, -{62,26,-17}, -{62,26,-16}, -{62,26,-15}, -{62,26,-14}, -{62,26,-13}, -{62,26,-12}, -{62,26,-11}, -{62,26,-10}, -{62,26,-9}, -{62,26,-8}, -{62,26,-7}, -{62,26,-6}, -{62,26,-5}, -{62,26,-4}, -{62,26,-3}, -{62,26,-2}, -{62,26,-1}, -{62,26,0}, -{62,26,1}, -{62,26,2}, -{62,26,3}, -{62,26,4}, -{62,26,5}, -{62,26,6}, -{62,26,7}, -{62,26,8}, -{62,26,9}, -{62,26,10}, -{62,26,11}, -{62,26,12}, -{62,26,13}, -{62,26,14}, -{62,26,15}, -{62,26,16}, -{62,26,17}, -{62,26,18}, -{62,26,19}, -{62,26,20}, -{62,26,21}, -{62,26,22}, -{62,26,23}, -{62,26,24}, -{62,26,25}, -{62,26,26}, -{62,26,27}, -{62,26,28}, -{62,26,29}, -{62,26,30}, -{62,26,31}, -{62,26,32}, -{62,26,33}, -{62,26,34}, -{62,26,35}, -{62,26,36}, -{62,26,37}, -{62,26,38}, -{62,26,39}, -{62,26,40}, -{62,26,41}, -{62,26,42}, -{62,26,43}, -{62,26,44}, -{62,26,45}, -{62,26,46}, -{62,26,47}, -{62,26,48}, -{62,26,49}, -{62,26,50}, -{62,26,51}, -{62,26,52}, -{62,26,53}, -{62,26,54}, -{62,26,55}, -{62,26,56}, -{62,26,57}, -{62,26,58}, -{62,26,59}, -{62,26,60}, -{62,26,61}, -{62,26,62}, -{62,26,63}, -{62,26,64}, -{62,26,65}, -{62,26,66}, -{62,26,67}, -{62,26,68}, -{62,27,-59}, -{62,27,-58}, -{62,27,-57}, -{62,27,-56}, -{62,27,-55}, -{62,27,-54}, -{62,27,-53}, -{62,27,-52}, -{62,27,-51}, -{62,27,-50}, -{62,27,-49}, -{62,27,-48}, -{62,27,-47}, -{62,27,-46}, -{62,27,-45}, -{62,27,-44}, -{62,27,-43}, -{62,27,-42}, -{62,27,-41}, -{62,27,-40}, -{62,27,-39}, -{62,27,-38}, -{62,27,-37}, -{62,27,-36}, -{62,27,-35}, -{62,27,-34}, -{62,27,-33}, -{62,27,-32}, -{62,27,-31}, -{62,27,-30}, -{62,27,-29}, -{62,27,-28}, -{62,27,-27}, -{62,27,-26}, -{62,27,-25}, -{62,27,-24}, -{62,27,-23}, -{62,27,-22}, -{62,27,-21}, -{62,27,-20}, -{62,27,-19}, -{62,27,-18}, -{62,27,-17}, -{62,27,-16}, -{62,27,-15}, -{62,27,-14}, -{62,27,-13}, -{62,27,-12}, -{62,27,-11}, -{62,27,-10}, -{62,27,-9}, -{62,27,-8}, -{62,27,-7}, -{62,27,-6}, -{62,27,-5}, -{62,27,-4}, -{62,27,-3}, -{62,27,-2}, -{62,27,-1}, -{62,27,0}, -{62,27,1}, -{62,27,2}, -{62,27,3}, -{62,27,4}, -{62,27,5}, -{62,27,6}, -{62,27,7}, -{62,27,8}, -{62,27,9}, -{62,27,10}, -{62,27,11}, -{62,27,12}, -{62,27,13}, -{62,27,14}, -{62,27,15}, -{62,27,16}, -{62,27,17}, -{62,27,18}, -{62,27,19}, -{62,27,20}, -{62,27,21}, -{62,27,22}, -{62,27,23}, -{62,27,24}, -{62,27,25}, -{62,27,26}, -{62,27,27}, -{62,27,28}, -{62,27,29}, -{62,27,30}, -{62,27,31}, -{62,27,32}, -{62,27,33}, -{62,27,34}, -{62,27,35}, -{62,27,36}, -{62,27,37}, -{62,27,38}, -{62,27,39}, -{62,27,40}, -{62,27,41}, -{62,27,42}, -{62,27,43}, -{62,27,44}, -{62,27,45}, -{62,27,46}, -{62,27,47}, -{62,27,48}, -{62,27,49}, -{62,27,50}, -{62,27,51}, -{62,27,52}, -{62,27,53}, -{62,27,54}, -{62,27,55}, -{62,27,56}, -{62,27,57}, -{62,27,58}, -{62,27,59}, -{62,27,60}, -{62,27,61}, -{62,27,62}, -{62,27,63}, -{62,27,64}, -{62,27,65}, -{62,27,66}, -{62,27,67}, -{62,27,68}, -{62,28,-59}, -{62,28,-58}, -{62,28,-57}, -{62,28,-56}, -{62,28,-55}, -{62,28,-54}, -{62,28,-53}, -{62,28,-52}, -{62,28,-51}, -{62,28,-50}, -{62,28,-49}, -{62,28,-48}, -{62,28,-47}, -{62,28,-46}, -{62,28,-45}, -{62,28,-44}, -{62,28,-43}, -{62,28,-42}, -{62,28,-41}, -{62,28,-40}, -{62,28,-39}, -{62,28,-38}, -{62,28,-37}, -{62,28,-36}, -{62,28,-35}, -{62,28,-34}, -{62,28,-33}, -{62,28,-32}, -{62,28,-31}, -{62,28,-30}, -{62,28,-29}, -{62,28,-28}, -{62,28,-27}, -{62,28,-26}, -{62,28,-25}, -{62,28,-24}, -{62,28,-23}, -{62,28,-22}, -{62,28,-21}, -{62,28,-20}, -{62,28,-19}, -{62,28,-18}, -{62,28,-17}, -{62,28,-16}, -{62,28,-15}, -{62,28,-14}, -{62,28,-13}, -{62,28,-12}, -{62,28,-11}, -{62,28,-10}, -{62,28,-9}, -{62,28,-8}, -{62,28,-7}, -{62,28,-6}, -{62,28,-5}, -{62,28,-4}, -{62,28,-3}, -{62,28,-2}, -{62,28,-1}, -{62,28,0}, -{62,28,1}, -{62,28,2}, -{62,28,3}, -{62,28,4}, -{62,28,5}, -{62,28,6}, -{62,28,7}, -{62,28,8}, -{62,28,9}, -{62,28,10}, -{62,28,11}, -{62,28,12}, -{62,28,13}, -{62,28,14}, -{62,28,15}, -{62,28,16}, -{62,28,17}, -{62,28,18}, -{62,28,19}, -{62,28,20}, -{62,28,21}, -{62,28,22}, -{62,28,23}, -{62,28,24}, -{62,28,25}, -{62,28,26}, -{62,28,27}, -{62,28,28}, -{62,28,29}, -{62,28,30}, -{62,28,31}, -{62,28,32}, -{62,28,33}, -{62,28,34}, -{62,28,35}, -{62,28,36}, -{62,28,37}, -{62,28,38}, -{62,28,39}, -{62,28,40}, -{62,28,41}, -{62,28,42}, -{62,28,43}, -{62,28,44}, -{62,28,45}, -{62,28,46}, -{62,28,47}, -{62,28,48}, -{62,28,49}, -{62,28,50}, -{62,28,51}, -{62,28,52}, -{62,28,53}, -{62,28,54}, -{62,28,55}, -{62,28,56}, -{62,28,57}, -{62,28,58}, -{62,28,59}, -{62,28,60}, -{62,28,61}, -{62,28,62}, -{62,28,63}, -{62,28,64}, -{62,28,65}, -{62,28,66}, -{62,28,67}, -{62,28,68}, -{62,29,-59}, -{62,29,-58}, -{62,29,-57}, -{62,29,-56}, -{62,29,-55}, -{62,29,-54}, -{62,29,-53}, -{62,29,-52}, -{62,29,-51}, -{62,29,-50}, -{62,29,-49}, -{62,29,-48}, -{62,29,-47}, -{62,29,-46}, -{62,29,-45}, -{62,29,-44}, -{62,29,-43}, -{62,29,-42}, -{62,29,-41}, -{62,29,-40}, -{62,29,-39}, -{62,29,-38}, -{62,29,-37}, -{62,29,-36}, -{62,29,-35}, -{62,29,-34}, -{62,29,-33}, -{62,29,-32}, -{62,29,-31}, -{62,29,-30}, -{62,29,-29}, -{62,29,-28}, -{62,29,-27}, -{62,29,-26}, -{62,29,-25}, -{62,29,-24}, -{62,29,-23}, -{62,29,-22}, -{62,29,-21}, -{62,29,-20}, -{62,29,-19}, -{62,29,-18}, -{62,29,-17}, -{62,29,-16}, -{62,29,-15}, -{62,29,-14}, -{62,29,-13}, -{62,29,-12}, -{62,29,-11}, -{62,29,-10}, -{62,29,-9}, -{62,29,-8}, -{62,29,-7}, -{62,29,-6}, -{62,29,-5}, -{62,29,-4}, -{62,29,-3}, -{62,29,-2}, -{62,29,-1}, -{62,29,0}, -{62,29,1}, -{62,29,2}, -{62,29,3}, -{62,29,4}, -{62,29,5}, -{62,29,6}, -{62,29,7}, -{62,29,8}, -{62,29,9}, -{62,29,10}, -{62,29,11}, -{62,29,12}, -{62,29,13}, -{62,29,14}, -{62,29,15}, -{62,29,16}, -{62,29,17}, -{62,29,18}, -{62,29,19}, -{62,29,20}, -{62,29,21}, -{62,29,22}, -{62,29,23}, -{62,29,24}, -{62,29,25}, -{62,29,26}, -{62,29,27}, -{62,29,28}, -{62,29,29}, -{62,29,30}, -{62,29,31}, -{62,29,32}, -{62,29,33}, -{62,29,34}, -{62,29,35}, -{62,29,36}, -{62,29,37}, -{62,29,38}, -{62,29,39}, -{62,29,40}, -{62,29,41}, -{62,29,42}, -{62,29,43}, -{62,29,44}, -{62,29,45}, -{62,29,46}, -{62,29,47}, -{62,29,48}, -{62,29,49}, -{62,29,50}, -{62,29,51}, -{62,29,52}, -{62,29,53}, -{62,29,54}, -{62,29,55}, -{62,29,56}, -{62,29,57}, -{62,29,58}, -{62,29,59}, -{62,29,60}, -{62,29,61}, -{62,29,62}, -{62,29,63}, -{62,29,64}, -{62,29,65}, -{62,29,66}, -{62,29,67}, -{62,29,68}, -{62,30,-59}, -{62,30,-58}, -{62,30,-57}, -{62,30,-56}, -{62,30,-55}, -{62,30,-54}, -{62,30,-53}, -{62,30,-52}, -{62,30,-51}, -{62,30,-50}, -{62,30,-49}, -{62,30,-48}, -{62,30,-47}, -{62,30,-46}, -{62,30,-45}, -{62,30,-44}, -{62,30,-43}, -{62,30,-42}, -{62,30,-41}, -{62,30,-40}, -{62,30,-39}, -{62,30,-38}, -{62,30,-37}, -{62,30,-36}, -{62,30,-35}, -{62,30,-34}, -{62,30,-33}, -{62,30,-32}, -{62,30,-31}, -{62,30,-30}, -{62,30,-29}, -{62,30,-28}, -{62,30,-27}, -{62,30,-26}, -{62,30,-25}, -{62,30,-24}, -{62,30,-23}, -{62,30,-22}, -{62,30,-21}, -{62,30,-20}, -{62,30,-19}, -{62,30,-18}, -{62,30,-17}, -{62,30,-16}, -{62,30,-15}, -{62,30,-14}, -{62,30,-13}, -{62,30,-12}, -{62,30,-11}, -{62,30,-10}, -{62,30,-9}, -{62,30,-8}, -{62,30,-7}, -{62,30,-6}, -{62,30,-5}, -{62,30,-4}, -{62,30,-3}, -{62,30,-2}, -{62,30,-1}, -{62,30,0}, -{62,30,1}, -{62,30,2}, -{62,30,3}, -{62,30,4}, -{62,30,5}, -{62,30,6}, -{62,30,7}, -{62,30,8}, -{62,30,9}, -{62,30,10}, -{62,30,11}, -{62,30,12}, -{62,30,13}, -{62,30,14}, -{62,30,15}, -{62,30,16}, -{62,30,17}, -{62,30,18}, -{62,30,19}, -{62,30,20}, -{62,30,21}, -{62,30,22}, -{62,30,23}, -{62,30,24}, -{62,30,25}, -{62,30,26}, -{62,30,27}, -{62,30,28}, -{62,30,29}, -{62,30,30}, -{62,30,31}, -{62,30,32}, -{62,30,33}, -{62,30,34}, -{62,30,35}, -{62,30,36}, -{62,30,37}, -{62,30,38}, -{62,30,39}, -{62,30,40}, -{62,30,41}, -{62,30,42}, -{62,30,43}, -{62,30,44}, -{62,30,45}, -{62,30,46}, -{62,30,47}, -{62,30,48}, -{62,30,49}, -{62,30,50}, -{62,30,51}, -{62,30,52}, -{62,30,53}, -{62,30,54}, -{62,30,55}, -{62,30,56}, -{62,30,57}, -{62,30,58}, -{62,30,59}, -{62,30,60}, -{62,30,61}, -{62,30,62}, -{62,30,63}, -{62,30,64}, -{62,30,65}, -{62,30,66}, -{62,30,67}, -{62,30,68}, -{62,31,-59}, -{62,31,-58}, -{62,31,-57}, -{62,31,-56}, -{62,31,-55}, -{62,31,-54}, -{62,31,-53}, -{62,31,-52}, -{62,31,-51}, -{62,31,-50}, -{62,31,-49}, -{62,31,-48}, -{62,31,-47}, -{62,31,-46}, -{62,31,-45}, -{62,31,-44}, -{62,31,-43}, -{62,31,-42}, -{62,31,-41}, -{62,31,-40}, -{62,31,-39}, -{62,31,-38}, -{62,31,-37}, -{62,31,-36}, -{62,31,-35}, -{62,31,-34}, -{62,31,-33}, -{62,31,-32}, -{62,31,-31}, -{62,31,-30}, -{62,31,-29}, -{62,31,-28}, -{62,31,-27}, -{62,31,-26}, -{62,31,-25}, -{62,31,-24}, -{62,31,-23}, -{62,31,-22}, -{62,31,-21}, -{62,31,-20}, -{62,31,-19}, -{62,31,-18}, -{62,31,-17}, -{62,31,-16}, -{62,31,-15}, -{62,31,-14}, -{62,31,-13}, -{62,31,-12}, -{62,31,-11}, -{62,31,-10}, -{62,31,-9}, -{62,31,-8}, -{62,31,-7}, -{62,31,-6}, -{62,31,-5}, -{62,31,-4}, -{62,31,-3}, -{62,31,-2}, -{62,31,-1}, -{62,31,0}, -{62,31,1}, -{62,31,2}, -{62,31,3}, -{62,31,4}, -{62,31,5}, -{62,31,6}, -{62,31,7}, -{62,31,8}, -{62,31,9}, -{62,31,10}, -{62,31,11}, -{62,31,12}, -{62,31,13}, -{62,31,14}, -{62,31,15}, -{62,31,16}, -{62,31,17}, -{62,31,18}, -{62,31,19}, -{62,31,20}, -{62,31,21}, -{62,31,22}, -{62,31,23}, -{62,31,24}, -{62,31,25}, -{62,31,26}, -{62,31,27}, -{62,31,28}, -{62,31,29}, -{62,31,30}, -{62,31,31}, -{62,31,32}, -{62,31,33}, -{62,31,34}, -{62,31,35}, -{62,31,36}, -{62,31,37}, -{62,31,38}, -{62,31,39}, -{62,31,40}, -{62,31,41}, -{62,31,42}, -{62,31,43}, -{62,31,44}, -{62,31,45}, -{62,31,46}, -{62,31,47}, -{62,31,48}, -{62,31,49}, -{62,31,50}, -{62,31,51}, -{62,31,52}, -{62,31,53}, -{62,31,54}, -{62,31,55}, -{62,31,56}, -{62,31,57}, -{62,31,58}, -{62,31,59}, -{62,31,60}, -{62,31,61}, -{62,31,62}, -{62,31,63}, -{62,31,64}, -{62,31,65}, -{62,31,66}, -{62,31,67}, -{62,31,68}, -{62,32,-59}, -{62,32,-58}, -{62,32,-57}, -{62,32,-56}, -{62,32,-55}, -{62,32,-54}, -{62,32,-53}, -{62,32,-52}, -{62,32,-51}, -{62,32,-50}, -{62,32,-49}, -{62,32,-48}, -{62,32,-47}, -{62,32,-46}, -{62,32,-45}, -{62,32,-44}, -{62,32,-43}, -{62,32,-42}, -{62,32,-41}, -{62,32,-40}, -{62,32,-39}, -{62,32,-38}, -{62,32,-37}, -{62,32,-36}, -{62,32,-35}, -{62,32,-34}, -{62,32,-33}, -{62,32,-32}, -{62,32,-31}, -{62,32,-30}, -{62,32,-29}, -{62,32,-28}, -{62,32,-27}, -{62,32,-26}, -{62,32,-25}, -{62,32,-24}, -{62,32,-23}, -{62,32,-22}, -{62,32,-21}, -{62,32,-20}, -{62,32,-19}, -{62,32,-18}, -{62,32,-17}, -{62,32,-16}, -{62,32,-15}, -{62,32,-14}, -{62,32,-13}, -{62,32,-12}, -{62,32,-11}, -{62,32,-10}, -{62,32,-9}, -{62,32,-8}, -{62,32,-7}, -{62,32,-6}, -{62,32,-5}, -{62,32,-4}, -{62,32,-3}, -{62,32,-2}, -{62,32,-1}, -{62,32,0}, -{62,32,1}, -{62,32,2}, -{62,32,3}, -{62,32,4}, -{62,32,5}, -{62,32,6}, -{62,32,7}, -{62,32,8}, -{62,32,9}, -{62,32,10}, -{62,32,11}, -{62,32,12}, -{62,32,13}, -{62,32,14}, -{62,32,15}, -{62,32,16}, -{62,32,17}, -{62,32,18}, -{62,32,19}, -{62,32,20}, -{62,32,21}, -{62,32,22}, -{62,32,23}, -{62,32,24}, -{62,32,25}, -{62,32,26}, -{62,32,27}, -{62,32,28}, -{62,32,29}, -{62,32,30}, -{62,32,31}, -{62,32,32}, -{62,32,33}, -{62,32,34}, -{62,32,35}, -{62,32,36}, -{62,32,37}, -{62,32,38}, -{62,32,39}, -{62,32,40}, -{62,32,41}, -{62,32,42}, -{62,32,43}, -{62,32,44}, -{62,32,45}, -{62,32,46}, -{62,32,47}, -{62,32,48}, -{62,32,49}, -{62,32,50}, -{62,32,51}, -{62,32,52}, -{62,32,53}, -{62,32,54}, -{62,32,55}, -{62,32,56}, -{62,32,57}, -{62,32,58}, -{62,32,59}, -{62,32,60}, -{62,32,61}, -{62,32,62}, -{62,32,63}, -{62,32,64}, -{62,32,65}, -{62,32,66}, -{62,32,67}, -{62,32,68}, -{62,33,-59}, -{62,33,-58}, -{62,33,-57}, -{62,33,-56}, -{62,33,-55}, -{62,33,-54}, -{62,33,-53}, -{62,33,-52}, -{62,33,-51}, -{62,33,-50}, -{62,33,-49}, -{62,33,-48}, -{62,33,-47}, -{62,33,-46}, -{62,33,-45}, -{62,33,-44}, -{62,33,-43}, -{62,33,-42}, -{62,33,-41}, -{62,33,-40}, -{62,33,-39}, -{62,33,-38}, -{62,33,-37}, -{62,33,-36}, -{62,33,-35}, -{62,33,-34}, -{62,33,-33}, -{62,33,-32}, -{62,33,-31}, -{62,33,-30}, -{62,33,-29}, -{62,33,-28}, -{62,33,-27}, -{62,33,-26}, -{62,33,-25}, -{62,33,-24}, -{62,33,-23}, -{62,33,-22}, -{62,33,-21}, -{62,33,-20}, -{62,33,-19}, -{62,33,-18}, -{62,33,-17}, -{62,33,-16}, -{62,33,-15}, -{62,33,-14}, -{62,33,-13}, -{62,33,-12}, -{62,33,-11}, -{62,33,-10}, -{62,33,-9}, -{62,33,-8}, -{62,33,-7}, -{62,33,-6}, -{62,33,-5}, -{62,33,-4}, -{62,33,-3}, -{62,33,-2}, -{62,33,-1}, -{62,33,0}, -{62,33,1}, -{62,33,2}, -{62,33,3}, -{62,33,4}, -{62,33,5}, -{62,33,6}, -{62,33,7}, -{62,33,8}, -{62,33,9}, -{62,33,10}, -{62,33,11}, -{62,33,12}, -{62,33,13}, -{62,33,14}, -{62,33,15}, -{62,33,16}, -{62,33,17}, -{62,33,18}, -{62,33,19}, -{62,33,20}, -{62,33,21}, -{62,33,22}, -{62,33,23}, -{62,33,24}, -{62,33,25}, -{62,33,26}, -{62,33,27}, -{62,33,28}, -{62,33,29}, -{62,33,30}, -{62,33,31}, -{62,33,32}, -{62,33,33}, -{62,33,34}, -{62,33,35}, -{62,33,36}, -{62,33,37}, -{62,33,38}, -{62,33,39}, -{62,33,40}, -{62,33,41}, -{62,33,42}, -{62,33,43}, -{62,33,44}, -{62,33,45}, -{62,33,46}, -{62,33,47}, -{62,33,48}, -{62,33,49}, -{62,33,50}, -{62,33,51}, -{62,33,52}, -{62,33,53}, -{62,33,54}, -{62,33,55}, -{62,33,56}, -{62,33,57}, -{62,33,58}, -{62,33,59}, -{62,33,60}, -{62,33,61}, -{62,33,62}, -{62,33,63}, -{62,33,64}, -{62,33,65}, -{62,33,66}, -{62,33,67}, -{62,33,68}, -{62,33,69}, -{62,34,-59}, -{62,34,-58}, -{62,34,-57}, -{62,34,-56}, -{62,34,-55}, -{62,34,-54}, -{62,34,-53}, -{62,34,-52}, -{62,34,-51}, -{62,34,-50}, -{62,34,-49}, -{62,34,-48}, -{62,34,-47}, -{62,34,-46}, -{62,34,-45}, -{62,34,-44}, -{62,34,-43}, -{62,34,-42}, -{62,34,-41}, -{62,34,-40}, -{62,34,-39}, -{62,34,-38}, -{62,34,-37}, -{62,34,-36}, -{62,34,-35}, -{62,34,-34}, -{62,34,-33}, -{62,34,-32}, -{62,34,-31}, -{62,34,-30}, -{62,34,-29}, -{62,34,-28}, -{62,34,-27}, -{62,34,-26}, -{62,34,-25}, -{62,34,-24}, -{62,34,-23}, -{62,34,-22}, -{62,34,-21}, -{62,34,-20}, -{62,34,-19}, -{62,34,-18}, -{62,34,-17}, -{62,34,-16}, -{62,34,-15}, -{62,34,-14}, -{62,34,-13}, -{62,34,-12}, -{62,34,-11}, -{62,34,-10}, -{62,34,-9}, -{62,34,-8}, -{62,34,-7}, -{62,34,-6}, -{62,34,-5}, -{62,34,-4}, -{62,34,-3}, -{62,34,-2}, -{62,34,-1}, -{62,34,0}, -{62,34,1}, -{62,34,2}, -{62,34,3}, -{62,34,4}, -{62,34,5}, -{62,34,6}, -{62,34,7}, -{62,34,8}, -{62,34,9}, -{62,34,10}, -{62,34,11}, -{62,34,12}, -{62,34,13}, -{62,34,14}, -{62,34,15}, -{62,34,16}, -{62,34,17}, -{62,34,18}, -{62,34,19}, -{62,34,20}, -{62,34,21}, -{62,34,22}, -{62,34,23}, -{62,34,24}, -{62,34,25}, -{62,34,26}, -{62,34,27}, -{62,34,28}, -{62,34,29}, -{62,34,30}, -{62,34,31}, -{62,34,32}, -{62,34,33}, -{62,34,34}, -{62,34,35}, -{62,34,36}, -{62,34,37}, -{62,34,38}, -{62,34,39}, -{62,34,40}, -{62,34,41}, -{62,34,42}, -{62,34,43}, -{62,34,44}, -{62,34,45}, -{62,34,46}, -{62,34,47}, -{62,34,48}, -{62,34,49}, -{62,34,50}, -{62,34,51}, -{62,34,52}, -{62,34,53}, -{62,34,54}, -{62,34,55}, -{62,34,56}, -{62,34,57}, -{62,34,58}, -{62,34,59}, -{62,34,60}, -{62,34,61}, -{62,34,62}, -{62,34,63}, -{62,34,64}, -{62,34,65}, -{62,34,66}, -{62,34,67}, -{62,34,68}, -{62,34,69}, -{62,35,-59}, -{62,35,-58}, -{62,35,-57}, -{62,35,-56}, -{62,35,-55}, -{62,35,-54}, -{62,35,-53}, -{62,35,-52}, -{62,35,-51}, -{62,35,-50}, -{62,35,-49}, -{62,35,-48}, -{62,35,-47}, -{62,35,-46}, -{62,35,-45}, -{62,35,-44}, -{62,35,-43}, -{62,35,-42}, -{62,35,-41}, -{62,35,-40}, -{62,35,-39}, -{62,35,-38}, -{62,35,-37}, -{62,35,-36}, -{62,35,-35}, -{62,35,-34}, -{62,35,-33}, -{62,35,-32}, -{62,35,-31}, -{62,35,-30}, -{62,35,-29}, -{62,35,-28}, -{62,35,-27}, -{62,35,-26}, -{62,35,-25}, -{62,35,-24}, -{62,35,-23}, -{62,35,-22}, -{62,35,-21}, -{62,35,-20}, -{62,35,-19}, -{62,35,-18}, -{62,35,-17}, -{62,35,-16}, -{62,35,-15}, -{62,35,-14}, -{62,35,-13}, -{62,35,-12}, -{62,35,-11}, -{62,35,-10}, -{62,35,-9}, -{62,35,-8}, -{62,35,-7}, -{62,35,-6}, -{62,35,-5}, -{62,35,-4}, -{62,35,-3}, -{62,35,-2}, -{62,35,-1}, -{62,35,0}, -{62,35,1}, -{62,35,2}, -{62,35,3}, -{62,35,4}, -{62,35,5}, -{62,35,6}, -{62,35,7}, -{62,35,8}, -{62,35,9}, -{62,35,10}, -{62,35,11}, -{62,35,12}, -{62,35,13}, -{62,35,14}, -{62,35,15}, -{62,35,16}, -{62,35,17}, -{62,35,18}, -{62,35,19}, -{62,35,20}, -{62,35,21}, -{62,35,22}, -{62,35,23}, -{62,35,24}, -{62,35,25}, -{62,35,26}, -{62,35,27}, -{62,35,28}, -{62,35,29}, -{62,35,30}, -{62,35,31}, -{62,35,32}, -{62,35,33}, -{62,35,34}, -{62,35,35}, -{62,35,36}, -{62,35,37}, -{62,35,38}, -{62,35,39}, -{62,35,40}, -{62,35,41}, -{62,35,42}, -{62,35,43}, -{62,35,44}, -{62,35,45}, -{62,35,46}, -{62,35,47}, -{62,35,48}, -{62,35,49}, -{62,35,50}, -{62,35,51}, -{62,35,52}, -{62,35,53}, -{62,35,54}, -{62,35,55}, -{62,35,56}, -{62,35,57}, -{62,35,58}, -{62,35,59}, -{62,35,60}, -{62,35,61}, -{62,35,62}, -{62,35,63}, -{62,35,64}, -{62,35,65}, -{62,35,66}, -{62,35,67}, -{62,35,68}, -{62,35,69}, -{62,36,-59}, -{62,36,-58}, -{62,36,-57}, -{62,36,-56}, -{62,36,-55}, -{62,36,-54}, -{62,36,-53}, -{62,36,-52}, -{62,36,-51}, -{62,36,-50}, -{62,36,-49}, -{62,36,-48}, -{62,36,-47}, -{62,36,-46}, -{62,36,-45}, -{62,36,-44}, -{62,36,-43}, -{62,36,-42}, -{62,36,-41}, -{62,36,-40}, -{62,36,-39}, -{62,36,-38}, -{62,36,-37}, -{62,36,-36}, -{62,36,-35}, -{62,36,-34}, -{62,36,-33}, -{62,36,-32}, -{62,36,-31}, -{62,36,-30}, -{62,36,-29}, -{62,36,-28}, -{62,36,-27}, -{62,36,-26}, -{62,36,-25}, -{62,36,-24}, -{62,36,-23}, -{62,36,-22}, -{62,36,-21}, -{62,36,-20}, -{62,36,-19}, -{62,36,-18}, -{62,36,-17}, -{62,36,-16}, -{62,36,-15}, -{62,36,-14}, -{62,36,-13}, -{62,36,-12}, -{62,36,-11}, -{62,36,-10}, -{62,36,-9}, -{62,36,-8}, -{62,36,-7}, -{62,36,-6}, -{62,36,-5}, -{62,36,-4}, -{62,36,-3}, -{62,36,-2}, -{62,36,-1}, -{62,36,0}, -{62,36,1}, -{62,36,2}, -{62,36,3}, -{62,36,4}, -{62,36,5}, -{62,36,6}, -{62,36,7}, -{62,36,8}, -{62,36,9}, -{62,36,10}, -{62,36,11}, -{62,36,12}, -{62,36,13}, -{62,36,14}, -{62,36,15}, -{62,36,16}, -{62,36,17}, -{62,36,18}, -{62,36,19}, -{62,36,20}, -{62,36,21}, -{62,36,22}, -{62,36,23}, -{62,36,24}, -{62,36,25}, -{62,36,26}, -{62,36,27}, -{62,36,28}, -{62,36,29}, -{62,36,30}, -{62,36,31}, -{62,36,32}, -{62,36,33}, -{62,36,34}, -{62,36,35}, -{62,36,36}, -{62,36,37}, -{62,36,38}, -{62,36,39}, -{62,36,40}, -{62,36,41}, -{62,36,42}, -{62,36,43}, -{62,36,44}, -{62,36,45}, -{62,36,46}, -{62,36,47}, -{62,36,48}, -{62,36,49}, -{62,36,50}, -{62,36,51}, -{62,36,52}, -{62,36,53}, -{62,36,54}, -{62,36,55}, -{62,36,56}, -{62,36,57}, -{62,36,58}, -{62,36,59}, -{62,36,60}, -{62,36,61}, -{62,36,62}, -{62,36,63}, -{62,36,64}, -{62,36,65}, -{62,36,66}, -{62,36,67}, -{62,36,68}, -{62,36,69}, -{62,37,-59}, -{62,37,-58}, -{62,37,-57}, -{62,37,-56}, -{62,37,-55}, -{62,37,-54}, -{62,37,-53}, -{62,37,-52}, -{62,37,-51}, -{62,37,-50}, -{62,37,-49}, -{62,37,-48}, -{62,37,-47}, -{62,37,-46}, -{62,37,-45}, -{62,37,-44}, -{62,37,-43}, -{62,37,-42}, -{62,37,-41}, -{62,37,-40}, -{62,37,-39}, -{62,37,-38}, -{62,37,-37}, -{62,37,-36}, -{62,37,-35}, -{62,37,-34}, -{62,37,-33}, -{62,37,-32}, -{62,37,-31}, -{62,37,-30}, -{62,37,-29}, -{62,37,-28}, -{62,37,-27}, -{62,37,-26}, -{62,37,-25}, -{62,37,-24}, -{62,37,-23}, -{62,37,-22}, -{62,37,-21}, -{62,37,-20}, -{62,37,-19}, -{62,37,-18}, -{62,37,-17}, -{62,37,-16}, -{62,37,-15}, -{62,37,-14}, -{62,37,-13}, -{62,37,-12}, -{62,37,-11}, -{62,37,-10}, -{62,37,-9}, -{62,37,-8}, -{62,37,-7}, -{62,37,-6}, -{62,37,-5}, -{62,37,-4}, -{62,37,-3}, -{62,37,-2}, -{62,37,-1}, -{62,37,0}, -{62,37,1}, -{62,37,2}, -{62,37,3}, -{62,37,4}, -{62,37,5}, -{62,37,6}, -{62,37,7}, -{62,37,8}, -{62,37,9}, -{62,37,10}, -{62,37,11}, -{62,37,12}, -{62,37,13}, -{62,37,14}, -{62,37,15}, -{62,37,16}, -{62,37,17}, -{62,37,18}, -{62,37,19}, -{62,37,20}, -{62,37,21}, -{62,37,22}, -{62,37,23}, -{62,37,24}, -{62,37,25}, -{62,37,26}, -{62,37,27}, -{62,37,28}, -{62,37,29}, -{62,37,30}, -{62,37,31}, -{62,37,32}, -{62,37,33}, -{62,37,34}, -{62,37,35}, -{62,37,36}, -{62,37,37}, -{62,37,38}, -{62,37,39}, -{62,37,40}, -{62,37,41}, -{62,37,42}, -{62,37,43}, -{62,37,44}, -{62,37,45}, -{62,37,46}, -{62,37,47}, -{62,37,48}, -{62,37,49}, -{62,37,50}, -{62,37,51}, -{62,37,52}, -{62,37,53}, -{62,37,54}, -{62,37,55}, -{62,37,56}, -{62,37,57}, -{62,37,58}, -{62,37,59}, -{62,37,60}, -{62,37,61}, -{62,37,62}, -{62,37,63}, -{62,37,64}, -{62,37,65}, -{62,37,66}, -{62,37,67}, -{62,37,68}, -{62,37,69}, -{62,38,-59}, -{62,38,-58}, -{62,38,-57}, -{62,38,-56}, -{62,38,-55}, -{62,38,-54}, -{62,38,-53}, -{62,38,-52}, -{62,38,-51}, -{62,38,-50}, -{62,38,-49}, -{62,38,-48}, -{62,38,-47}, -{62,38,-46}, -{62,38,-45}, -{62,38,-44}, -{62,38,-43}, -{62,38,-42}, -{62,38,-41}, -{62,38,-40}, -{62,38,-39}, -{62,38,-38}, -{62,38,-37}, -{62,38,-36}, -{62,38,-35}, -{62,38,-34}, -{62,38,-33}, -{62,38,-32}, -{62,38,-31}, -{62,38,-30}, -{62,38,-29}, -{62,38,-28}, -{62,38,-27}, -{62,38,-26}, -{62,38,-25}, -{62,38,-24}, -{62,38,-23}, -{62,38,-22}, -{62,38,-21}, -{62,38,-20}, -{62,38,-19}, -{62,38,-18}, -{62,38,-17}, -{62,38,-16}, -{62,38,-15}, -{62,38,-14}, -{62,38,-13}, -{62,38,-12}, -{62,38,-11}, -{62,38,-10}, -{62,38,-9}, -{62,38,-8}, -{62,38,-7}, -{62,38,-6}, -{62,38,-5}, -{62,38,-4}, -{62,38,-3}, -{62,38,-2}, -{62,38,-1}, -{62,38,0}, -{62,38,1}, -{62,38,2}, -{62,38,3}, -{62,38,4}, -{62,38,5}, -{62,38,6}, -{62,38,7}, -{62,38,8}, -{62,38,9}, -{62,38,10}, -{62,38,11}, -{62,38,12}, -{62,38,13}, -{62,38,14}, -{62,38,15}, -{62,38,16}, -{62,38,17}, -{62,38,18}, -{62,38,19}, -{62,38,20}, -{62,38,21}, -{62,38,22}, -{62,38,23}, -{62,38,24}, -{62,38,25}, -{62,38,26}, -{62,38,27}, -{62,38,28}, -{62,38,29}, -{62,38,30}, -{62,38,31}, -{62,38,32}, -{62,38,33}, -{62,38,34}, -{62,38,35}, -{62,38,36}, -{62,38,37}, -{62,38,38}, -{62,38,39}, -{62,38,40}, -{62,38,41}, -{62,38,42}, -{62,38,43}, -{62,38,44}, -{62,38,45}, -{62,38,46}, -{62,38,47}, -{62,38,48}, -{62,38,49}, -{62,38,50}, -{62,38,51}, -{62,38,52}, -{62,38,53}, -{62,38,54}, -{62,38,55}, -{62,38,56}, -{62,38,57}, -{62,38,58}, -{62,38,59}, -{62,38,60}, -{62,38,61}, -{62,38,62}, -{62,38,63}, -{62,38,64}, -{62,38,65}, -{62,38,66}, -{62,38,67}, -{62,38,68}, -{62,38,69}, -{62,39,-58}, -{62,39,-57}, -{62,39,-56}, -{62,39,-55}, -{62,39,-54}, -{62,39,-53}, -{62,39,-52}, -{62,39,-51}, -{62,39,-50}, -{62,39,-49}, -{62,39,-48}, -{62,39,-47}, -{62,39,-46}, -{62,39,-45}, -{62,39,-44}, -{62,39,-43}, -{62,39,-42}, -{62,39,-41}, -{62,39,-40}, -{62,39,-39}, -{62,39,-38}, -{62,39,-37}, -{62,39,-36}, -{62,39,-35}, -{62,39,-34}, -{62,39,-33}, -{62,39,-32}, -{62,39,-31}, -{62,39,-30}, -{62,39,-29}, -{62,39,-28}, -{62,39,-27}, -{62,39,-26}, -{62,39,-25}, -{62,39,-24}, -{62,39,-23}, -{62,39,-22}, -{62,39,-21}, -{62,39,-20}, -{62,39,-19}, -{62,39,-18}, -{62,39,-17}, -{62,39,-16}, -{62,39,-15}, -{62,39,-14}, -{62,39,-13}, -{62,39,-12}, -{62,39,-11}, -{62,39,-10}, -{62,39,-9}, -{62,39,-8}, -{62,39,-7}, -{62,39,-6}, -{62,39,-5}, -{62,39,-4}, -{62,39,-3}, -{62,39,-2}, -{62,39,-1}, -{62,39,0}, -{62,39,1}, -{62,39,2}, -{62,39,3}, -{62,39,4}, -{62,39,5}, -{62,39,6}, -{62,39,7}, -{62,39,8}, -{62,39,9}, -{62,39,10}, -{62,39,11}, -{62,39,12}, -{62,39,13}, -{62,39,14}, -{62,39,15}, -{62,39,16}, -{62,39,17}, -{62,39,18}, -{62,39,19}, -{62,39,20}, -{62,39,21}, -{62,39,22}, -{62,39,23}, -{62,39,24}, -{62,39,25}, -{62,39,26}, -{62,39,27}, -{62,39,28}, -{62,39,29}, -{62,39,30}, -{62,39,31}, -{62,39,32}, -{62,39,33}, -{62,39,34}, -{62,39,35}, -{62,39,36}, -{62,39,37}, -{62,39,38}, -{62,39,39}, -{62,39,40}, -{62,39,41}, -{62,39,42}, -{62,39,43}, -{62,39,44}, -{62,39,45}, -{62,39,46}, -{62,39,47}, -{62,39,48}, -{62,39,49}, -{62,39,50}, -{62,39,51}, -{62,39,52}, -{62,39,53}, -{62,39,54}, -{62,39,55}, -{62,39,56}, -{62,39,57}, -{62,39,58}, -{62,39,59}, -{62,39,60}, -{62,39,61}, -{62,39,62}, -{62,39,63}, -{62,39,64}, -{62,39,65}, -{62,39,66}, -{62,39,67}, -{62,39,68}, -{62,39,69}, -{62,40,-58}, -{62,40,-57}, -{62,40,-56}, -{62,40,-55}, -{62,40,-54}, -{62,40,-53}, -{62,40,-52}, -{62,40,-51}, -{62,40,-50}, -{62,40,-49}, -{62,40,-48}, -{62,40,-47}, -{62,40,-46}, -{62,40,-45}, -{62,40,-44}, -{62,40,-43}, -{62,40,-42}, -{62,40,-41}, -{62,40,-40}, -{62,40,-39}, -{62,40,-38}, -{62,40,-37}, -{62,40,-36}, -{62,40,-35}, -{62,40,-34}, -{62,40,-33}, -{62,40,-32}, -{62,40,-31}, -{62,40,-30}, -{62,40,-29}, -{62,40,-28}, -{62,40,-27}, -{62,40,-26}, -{62,40,-25}, -{62,40,-24}, -{62,40,-23}, -{62,40,-22}, -{62,40,-21}, -{62,40,-20}, -{62,40,-19}, -{62,40,-18}, -{62,40,-17}, -{62,40,-16}, -{62,40,-15}, -{62,40,-14}, -{62,40,-13}, -{62,40,-12}, -{62,40,-11}, -{62,40,-10}, -{62,40,-9}, -{62,40,-8}, -{62,40,-7}, -{62,40,-6}, -{62,40,-5}, -{62,40,-4}, -{62,40,-3}, -{62,40,-2}, -{62,40,-1}, -{62,40,0}, -{62,40,1}, -{62,40,2}, -{62,40,3}, -{62,40,4}, -{62,40,5}, -{62,40,6}, -{62,40,7}, -{62,40,8}, -{62,40,9}, -{62,40,10}, -{62,40,11}, -{62,40,12}, -{62,40,13}, -{62,40,14}, -{62,40,15}, -{62,40,16}, -{62,40,17}, -{62,40,18}, -{62,40,19}, -{62,40,20}, -{62,40,21}, -{62,40,22}, -{62,40,23}, -{62,40,24}, -{62,40,25}, -{62,40,26}, -{62,40,27}, -{62,40,28}, -{62,40,29}, -{62,40,30}, -{62,40,31}, -{62,40,32}, -{62,40,33}, -{62,40,34}, -{62,40,35}, -{62,40,36}, -{62,40,37}, -{62,40,38}, -{62,40,39}, -{62,40,40}, -{62,40,41}, -{62,40,42}, -{62,40,43}, -{62,40,44}, -{62,40,45}, -{62,40,46}, -{62,40,47}, -{62,40,48}, -{62,40,49}, -{62,40,50}, -{62,40,51}, -{62,40,52}, -{62,40,53}, -{62,40,54}, -{62,40,55}, -{62,40,56}, -{62,40,57}, -{62,40,58}, -{62,40,59}, -{62,40,60}, -{62,40,61}, -{62,40,62}, -{62,40,63}, -{62,40,64}, -{62,40,65}, -{62,40,66}, -{62,40,67}, -{62,40,68}, -{62,40,69}, -{62,41,-58}, -{62,41,-57}, -{62,41,-56}, -{62,41,-55}, -{62,41,-54}, -{62,41,-53}, -{62,41,-52}, -{62,41,-51}, -{62,41,-50}, -{62,41,-49}, -{62,41,-48}, -{62,41,-47}, -{62,41,-46}, -{62,41,-45}, -{62,41,-44}, -{62,41,-43}, -{62,41,-42}, -{62,41,-41}, -{62,41,-40}, -{62,41,-39}, -{62,41,-38}, -{62,41,-37}, -{62,41,-36}, -{62,41,-35}, -{62,41,-34}, -{62,41,-33}, -{62,41,-32}, -{62,41,-31}, -{62,41,-30}, -{62,41,-29}, -{62,41,-28}, -{62,41,-27}, -{62,41,-26}, -{62,41,-25}, -{62,41,-24}, -{62,41,-23}, -{62,41,-22}, -{62,41,-21}, -{62,41,-20}, -{62,41,-19}, -{62,41,-18}, -{62,41,-17}, -{62,41,-16}, -{62,41,-15}, -{62,41,-14}, -{62,41,-13}, -{62,41,-12}, -{62,41,-11}, -{62,41,-10}, -{62,41,-9}, -{62,41,-8}, -{62,41,-7}, -{62,41,-6}, -{62,41,-5}, -{62,41,-4}, -{62,41,-3}, -{62,41,-2}, -{62,41,-1}, -{62,41,0}, -{62,41,1}, -{62,41,2}, -{62,41,3}, -{62,41,4}, -{62,41,5}, -{62,41,6}, -{62,41,7}, -{62,41,8}, -{62,41,9}, -{62,41,10}, -{62,41,11}, -{62,41,12}, -{62,41,13}, -{62,41,14}, -{62,41,15}, -{62,41,16}, -{62,41,17}, -{62,41,18}, -{62,41,19}, -{62,41,20}, -{62,41,21}, -{62,41,22}, -{62,41,23}, -{62,41,24}, -{62,41,25}, -{62,41,26}, -{62,41,27}, -{62,41,28}, -{62,41,29}, -{62,41,30}, -{62,41,31}, -{62,41,32}, -{62,41,33}, -{62,41,34}, -{62,41,35}, -{62,41,36}, -{62,41,37}, -{62,41,38}, -{62,41,39}, -{62,41,40}, -{62,41,41}, -{62,41,42}, -{62,41,43}, -{62,41,44}, -{62,41,45}, -{62,41,46}, -{62,41,47}, -{62,41,48}, -{62,41,49}, -{62,41,50}, -{62,41,51}, -{62,41,52}, -{62,41,53}, -{62,41,54}, -{62,41,55}, -{62,41,56}, -{62,41,57}, -{62,41,58}, -{62,41,59}, -{62,41,60}, -{62,41,61}, -{62,41,62}, -{62,41,63}, -{62,41,64}, -{62,41,65}, -{62,41,66}, -{62,41,67}, -{62,41,68}, -{62,41,69}, -{62,42,-58}, -{62,42,-57}, -{62,42,-56}, -{62,42,-55}, -{62,42,-54}, -{62,42,-53}, -{62,42,-52}, -{62,42,-51}, -{62,42,-50}, -{62,42,-49}, -{62,42,-48}, -{62,42,-47}, -{62,42,-46}, -{62,42,-45}, -{62,42,-44}, -{62,42,-43}, -{62,42,-42}, -{62,42,-41}, -{62,42,-40}, -{62,42,-39}, -{62,42,-38}, -{62,42,-37}, -{62,42,-36}, -{62,42,-35}, -{62,42,-34}, -{62,42,-33}, -{62,42,-32}, -{62,42,-31}, -{62,42,-30}, -{62,42,-29}, -{62,42,-28}, -{62,42,-27}, -{62,42,-26}, -{62,42,-25}, -{62,42,-24}, -{62,42,-23}, -{62,42,-22}, -{62,42,-21}, -{62,42,-20}, -{62,42,-19}, -{62,42,-18}, -{62,42,-17}, -{62,42,-16}, -{62,42,-15}, -{62,42,-14}, -{62,42,-13}, -{62,42,-12}, -{62,42,-11}, -{62,42,-10}, -{62,42,-9}, -{62,42,-8}, -{62,42,-7}, -{62,42,-6}, -{62,42,-5}, -{62,42,-4}, -{62,42,-3}, -{62,42,-2}, -{62,42,-1}, -{62,42,0}, -{62,42,1}, -{62,42,2}, -{62,42,3}, -{62,42,4}, -{62,42,5}, -{62,42,6}, -{62,42,7}, -{62,42,8}, -{62,42,9}, -{62,42,10}, -{62,42,11}, -{62,42,12}, -{62,42,13}, -{62,42,14}, -{62,42,15}, -{62,42,16}, -{62,42,17}, -{62,42,18}, -{62,42,19}, -{62,42,20}, -{62,42,21}, -{62,42,22}, -{62,42,23}, -{62,42,24}, -{62,42,25}, -{62,42,26}, -{62,42,27}, -{62,42,28}, -{62,42,29}, -{62,42,30}, -{62,42,31}, -{62,42,32}, -{62,42,33}, -{62,42,34}, -{62,42,35}, -{62,42,36}, -{62,42,37}, -{62,42,38}, -{62,42,39}, -{62,42,40}, -{62,42,41}, -{62,42,42}, -{62,42,43}, -{62,42,44}, -{62,42,45}, -{62,42,46}, -{62,42,47}, -{62,42,48}, -{62,42,49}, -{62,42,50}, -{62,42,51}, -{62,42,52}, -{62,42,53}, -{62,42,54}, -{62,42,55}, -{62,42,56}, -{62,42,57}, -{62,42,58}, -{62,42,59}, -{62,42,60}, -{62,42,61}, -{62,42,62}, -{62,42,63}, -{62,42,64}, -{62,42,65}, -{62,42,66}, -{62,42,67}, -{62,42,68}, -{62,42,69}, -{62,43,-58}, -{62,43,-57}, -{62,43,-56}, -{62,43,-55}, -{62,43,-54}, -{62,43,-53}, -{62,43,-52}, -{62,43,-51}, -{62,43,-50}, -{62,43,-49}, -{62,43,-48}, -{62,43,-47}, -{62,43,-46}, -{62,43,-45}, -{62,43,-44}, -{62,43,-43}, -{62,43,-42}, -{62,43,-41}, -{62,43,-40}, -{62,43,-39}, -{62,43,-38}, -{62,43,-37}, -{62,43,-36}, -{62,43,-35}, -{62,43,-34}, -{62,43,-33}, -{62,43,-32}, -{62,43,-31}, -{62,43,-30}, -{62,43,-29}, -{62,43,-28}, -{62,43,-27}, -{62,43,-26}, -{62,43,-25}, -{62,43,-24}, -{62,43,-23}, -{62,43,-22}, -{62,43,-21}, -{62,43,-20}, -{62,43,-19}, -{62,43,-18}, -{62,43,-17}, -{62,43,-16}, -{62,43,-15}, -{62,43,-14}, -{62,43,-13}, -{62,43,-12}, -{62,43,-11}, -{62,43,-10}, -{62,43,-9}, -{62,43,-8}, -{62,43,-7}, -{62,43,-6}, -{62,43,-5}, -{62,43,-4}, -{62,43,-3}, -{62,43,-2}, -{62,43,-1}, -{62,43,0}, -{62,43,1}, -{62,43,2}, -{62,43,3}, -{62,43,4}, -{62,43,5}, -{62,43,6}, -{62,43,7}, -{62,43,8}, -{62,43,9}, -{62,43,10}, -{62,43,11}, -{62,43,12}, -{62,43,13}, -{62,43,14}, -{62,43,15}, -{62,43,16}, -{62,43,17}, -{62,43,18}, -{62,43,19}, -{62,43,20}, -{62,43,21}, -{62,43,22}, -{62,43,23}, -{62,43,24}, -{62,43,25}, -{62,43,26}, -{62,43,27}, -{62,43,28}, -{62,43,29}, -{62,43,30}, -{62,43,31}, -{62,43,32}, -{62,43,33}, -{62,43,34}, -{62,43,35}, -{62,43,36}, -{62,43,37}, -{62,43,38}, -{62,43,39}, -{62,43,40}, -{62,43,41}, -{62,43,42}, -{62,43,43}, -{62,43,44}, -{62,43,45}, -{62,43,46}, -{62,43,47}, -{62,43,48}, -{62,43,49}, -{62,43,50}, -{62,43,51}, -{62,43,52}, -{62,43,53}, -{62,43,54}, -{62,43,55}, -{62,43,56}, -{62,43,57}, -{62,43,58}, -{62,43,59}, -{62,43,60}, -{62,43,61}, -{62,43,62}, -{62,43,63}, -{62,43,64}, -{62,43,65}, -{62,43,66}, -{62,43,67}, -{62,43,68}, -{62,43,69}, -{62,44,-58}, -{62,44,-57}, -{62,44,-56}, -{62,44,-55}, -{62,44,-54}, -{62,44,-53}, -{62,44,-52}, -{62,44,-51}, -{62,44,-50}, -{62,44,-49}, -{62,44,-48}, -{62,44,-47}, -{62,44,-46}, -{62,44,-45}, -{62,44,-44}, -{62,44,-43}, -{62,44,-42}, -{62,44,-41}, -{62,44,-40}, -{62,44,-39}, -{62,44,-38}, -{62,44,-37}, -{62,44,-36}, -{62,44,-35}, -{62,44,-34}, -{62,44,-33}, -{62,44,-32}, -{62,44,-31}, -{62,44,-30}, -{62,44,-29}, -{62,44,-28}, -{62,44,-27}, -{62,44,-26}, -{62,44,-25}, -{62,44,-24}, -{62,44,-23}, -{62,44,-22}, -{62,44,-21}, -{62,44,-20}, -{62,44,-19}, -{62,44,-18}, -{62,44,-17}, -{62,44,-16}, -{62,44,-15}, -{62,44,-14}, -{62,44,-13}, -{62,44,-12}, -{62,44,-11}, -{62,44,-10}, -{62,44,-9}, -{62,44,-8}, -{62,44,-7}, -{62,44,-6}, -{62,44,-5}, -{62,44,-4}, -{62,44,-3}, -{62,44,-2}, -{62,44,-1}, -{62,44,0}, -{62,44,1}, -{62,44,2}, -{62,44,3}, -{62,44,4}, -{62,44,5}, -{62,44,6}, -{62,44,7}, -{62,44,8}, -{62,44,9}, -{62,44,10}, -{62,44,11}, -{62,44,12}, -{62,44,13}, -{62,44,14}, -{62,44,15}, -{62,44,16}, -{62,44,17}, -{62,44,18}, -{62,44,19}, -{62,44,20}, -{62,44,21}, -{62,44,22}, -{62,44,23}, -{62,44,24}, -{62,44,25}, -{62,44,26}, -{62,44,27}, -{62,44,28}, -{62,44,29}, -{62,44,30}, -{62,44,31}, -{62,44,32}, -{62,44,33}, -{62,44,34}, -{62,44,35}, -{62,44,36}, -{62,44,37}, -{62,44,38}, -{62,44,39}, -{62,44,40}, -{62,44,41}, -{62,44,42}, -{62,44,43}, -{62,44,44}, -{62,44,45}, -{62,44,46}, -{62,44,47}, -{62,44,48}, -{62,44,49}, -{62,44,50}, -{62,44,51}, -{62,44,52}, -{62,44,53}, -{62,44,54}, -{62,44,55}, -{62,44,56}, -{62,44,57}, -{62,44,58}, -{62,44,59}, -{62,44,60}, -{62,44,61}, -{62,44,62}, -{62,44,63}, -{62,44,64}, -{62,44,65}, -{62,44,66}, -{62,44,67}, -{62,44,68}, -{62,44,69}, -{62,44,70}, -{62,45,-58}, -{62,45,-57}, -{62,45,-56}, -{62,45,-55}, -{62,45,-54}, -{62,45,-53}, -{62,45,-52}, -{62,45,-51}, -{62,45,-50}, -{62,45,-49}, -{62,45,-48}, -{62,45,-47}, -{62,45,-46}, -{62,45,-45}, -{62,45,-44}, -{62,45,-43}, -{62,45,-42}, -{62,45,-41}, -{62,45,-40}, -{62,45,-39}, -{62,45,-38}, -{62,45,-37}, -{62,45,-36}, -{62,45,-35}, -{62,45,-34}, -{62,45,-33}, -{62,45,-32}, -{62,45,-31}, -{62,45,-30}, -{62,45,-29}, -{62,45,-28}, -{62,45,-27}, -{62,45,-26}, -{62,45,-25}, -{62,45,-24}, -{62,45,-23}, -{62,45,-22}, -{62,45,-21}, -{62,45,-20}, -{62,45,-19}, -{62,45,-18}, -{62,45,-17}, -{62,45,-16}, -{62,45,-15}, -{62,45,-14}, -{62,45,-13}, -{62,45,-12}, -{62,45,-11}, -{62,45,-10}, -{62,45,-9}, -{62,45,-8}, -{62,45,-7}, -{62,45,-6}, -{62,45,-5}, -{62,45,-4}, -{62,45,-3}, -{62,45,-2}, -{62,45,-1}, -{62,45,0}, -{62,45,1}, -{62,45,2}, -{62,45,3}, -{62,45,4}, -{62,45,5}, -{62,45,6}, -{62,45,7}, -{62,45,8}, -{62,45,9}, -{62,45,10}, -{62,45,11}, -{62,45,12}, -{62,45,13}, -{62,45,14}, -{62,45,15}, -{62,45,16}, -{62,45,17}, -{62,45,18}, -{62,45,19}, -{62,45,20}, -{62,45,21}, -{62,45,22}, -{62,45,23}, -{62,45,24}, -{62,45,25}, -{62,45,26}, -{62,45,27}, -{62,45,28}, -{62,45,29}, -{62,45,30}, -{62,45,31}, -{62,45,32}, -{62,45,33}, -{62,45,34}, -{62,45,35}, -{62,45,36}, -{62,45,37}, -{62,45,38}, -{62,45,39}, -{62,45,40}, -{62,45,41}, -{62,45,42}, -{62,45,43}, -{62,45,44}, -{62,45,45}, -{62,45,46}, -{62,45,47}, -{62,45,48}, -{62,45,49}, -{62,45,50}, -{62,45,51}, -{62,45,52}, -{62,45,53}, -{62,45,54}, -{62,45,55}, -{62,45,56}, -{62,45,57}, -{62,45,58}, -{62,45,59}, -{62,45,60}, -{62,45,61}, -{62,45,62}, -{62,45,63}, -{62,45,64}, -{62,45,65}, -{62,45,66}, -{62,45,67}, -{62,45,68}, -{62,45,69}, -{62,45,70}, -{62,46,-58}, -{62,46,-57}, -{62,46,-56}, -{62,46,-55}, -{62,46,-54}, -{62,46,-53}, -{62,46,-52}, -{62,46,-51}, -{62,46,-50}, -{62,46,-49}, -{62,46,-48}, -{62,46,-47}, -{62,46,-46}, -{62,46,-45}, -{62,46,-44}, -{62,46,-43}, -{62,46,-42}, -{62,46,-41}, -{62,46,-40}, -{62,46,-39}, -{62,46,-38}, -{62,46,-37}, -{62,46,-36}, -{62,46,-35}, -{62,46,-34}, -{62,46,-33}, -{62,46,-32}, -{62,46,-31}, -{62,46,-30}, -{62,46,-29}, -{62,46,-28}, -{62,46,-27}, -{62,46,-26}, -{62,46,-25}, -{62,46,-24}, -{62,46,-23}, -{62,46,-22}, -{62,46,-21}, -{62,46,-20}, -{62,46,-19}, -{62,46,-18}, -{62,46,-17}, -{62,46,-16}, -{62,46,-15}, -{62,46,-14}, -{62,46,-13}, -{62,46,-12}, -{62,46,-11}, -{62,46,-10}, -{62,46,-9}, -{62,46,-8}, -{62,46,-7}, -{62,46,-6}, -{62,46,-5}, -{62,46,-4}, -{62,46,-3}, -{62,46,-2}, -{62,46,-1}, -{62,46,0}, -{62,46,1}, -{62,46,2}, -{62,46,3}, -{62,46,4}, -{62,46,5}, -{62,46,6}, -{62,46,7}, -{62,46,8}, -{62,46,9}, -{62,46,10}, -{62,46,11}, -{62,46,12}, -{62,46,13}, -{62,46,14}, -{62,46,15}, -{62,46,16}, -{62,46,17}, -{62,46,18}, -{62,46,19}, -{62,46,20}, -{62,46,21}, -{62,46,22}, -{62,46,23}, -{62,46,24}, -{62,46,25}, -{62,46,26}, -{62,46,27}, -{62,46,28}, -{62,46,29}, -{62,46,30}, -{62,46,31}, -{62,46,32}, -{62,46,33}, -{62,46,34}, -{62,46,35}, -{62,46,36}, -{62,46,37}, -{62,46,38}, -{62,46,39}, -{62,46,40}, -{62,46,41}, -{62,46,42}, -{62,46,43}, -{62,46,44}, -{62,46,45}, -{62,46,46}, -{62,46,47}, -{62,46,48}, -{62,46,49}, -{62,46,50}, -{62,46,51}, -{62,46,52}, -{62,46,53}, -{62,46,54}, -{62,46,55}, -{62,46,56}, -{62,46,57}, -{62,46,58}, -{62,46,59}, -{62,46,60}, -{62,46,61}, -{62,46,62}, -{62,46,63}, -{62,46,64}, -{62,46,65}, -{62,46,66}, -{62,46,67}, -{62,46,68}, -{62,46,69}, -{62,46,70}, -{62,47,-58}, -{62,47,-57}, -{62,47,-56}, -{62,47,-55}, -{62,47,-54}, -{62,47,-53}, -{62,47,-52}, -{62,47,-51}, -{62,47,-50}, -{62,47,-49}, -{62,47,-48}, -{62,47,-47}, -{62,47,-46}, -{62,47,-45}, -{62,47,-44}, -{62,47,-43}, -{62,47,-42}, -{62,47,-41}, -{62,47,-40}, -{62,47,-39}, -{62,47,-38}, -{62,47,-37}, -{62,47,-36}, -{62,47,-35}, -{62,47,-34}, -{62,47,-33}, -{62,47,-32}, -{62,47,-31}, -{62,47,-30}, -{62,47,-29}, -{62,47,-28}, -{62,47,-27}, -{62,47,-26}, -{62,47,-25}, -{62,47,-24}, -{62,47,-23}, -{62,47,-22}, -{62,47,-21}, -{62,47,-20}, -{62,47,-19}, -{62,47,-18}, -{62,47,-17}, -{62,47,-16}, -{62,47,-15}, -{62,47,-14}, -{62,47,-13}, -{62,47,-12}, -{62,47,-11}, -{62,47,-10}, -{62,47,-9}, -{62,47,-8}, -{62,47,-7}, -{62,47,-6}, -{62,47,-5}, -{62,47,-4}, -{62,47,-3}, -{62,47,-2}, -{62,47,-1}, -{62,47,0}, -{62,47,1}, -{62,47,2}, -{62,47,3}, -{62,47,4}, -{62,47,5}, -{62,47,6}, -{62,47,7}, -{62,47,8}, -{62,47,9}, -{62,47,10}, -{62,47,11}, -{62,47,12}, -{62,47,13}, -{62,47,14}, -{62,47,15}, -{62,47,16}, -{62,47,17}, -{62,47,18}, -{62,47,19}, -{62,47,20}, -{62,47,21}, -{62,47,22}, -{62,47,23}, -{62,47,24}, -{62,47,25}, -{62,47,26}, -{62,47,27}, -{62,47,28}, -{62,47,29}, -{62,47,30}, -{62,47,31}, -{62,47,32}, -{62,47,33}, -{62,47,34}, -{62,47,35}, -{62,47,36}, -{62,47,37}, -{62,47,38}, -{62,47,39}, -{62,47,40}, -{62,47,41}, -{62,47,42}, -{62,47,43}, -{62,47,44}, -{62,47,45}, -{62,47,46}, -{62,47,47}, -{62,47,48}, -{62,47,49}, -{62,47,50}, -{62,47,51}, -{62,47,52}, -{62,47,53}, -{62,47,54}, -{62,47,55}, -{62,47,56}, -{62,47,57}, -{62,47,58}, -{62,47,59}, -{62,47,60}, -{62,47,61}, -{62,47,62}, -{62,47,63}, -{62,47,64}, -{62,47,65}, -{62,47,66}, -{62,47,67}, -{62,47,68}, -{62,47,69}, -{62,47,70}, -{62,48,-58}, -{62,48,-57}, -{62,48,-56}, -{62,48,-55}, -{62,48,-54}, -{62,48,-53}, -{62,48,-52}, -{62,48,-51}, -{62,48,-50}, -{62,48,-49}, -{62,48,-48}, -{62,48,-47}, -{62,48,-46}, -{62,48,-45}, -{62,48,-44}, -{62,48,-43}, -{62,48,-42}, -{62,48,-41}, -{62,48,-40}, -{62,48,-39}, -{62,48,-38}, -{62,48,-37}, -{62,48,-36}, -{62,48,-35}, -{62,48,-34}, -{62,48,-33}, -{62,48,-32}, -{62,48,-31}, -{62,48,-30}, -{62,48,-29}, -{62,48,-28}, -{62,48,-27}, -{62,48,-26}, -{62,48,-25}, -{62,48,-24}, -{62,48,-23}, -{62,48,-22}, -{62,48,-21}, -{62,48,-20}, -{62,48,-19}, -{62,48,-18}, -{62,48,-17}, -{62,48,-16}, -{62,48,-15}, -{62,48,-14}, -{62,48,-13}, -{62,48,-12}, -{62,48,-11}, -{62,48,-10}, -{62,48,-9}, -{62,48,-8}, -{62,48,-7}, -{62,48,-6}, -{62,48,-5}, -{62,48,-4}, -{62,48,-3}, -{62,48,-2}, -{62,48,-1}, -{62,48,0}, -{62,48,1}, -{62,48,2}, -{62,48,3}, -{62,48,4}, -{62,48,5}, -{62,48,6}, -{62,48,7}, -{62,48,8}, -{62,48,9}, -{62,48,10}, -{62,48,11}, -{62,48,12}, -{62,48,13}, -{62,48,14}, -{62,48,15}, -{62,48,16}, -{62,48,17}, -{62,48,18}, -{62,48,19}, -{62,48,20}, -{62,48,21}, -{62,48,22}, -{62,48,23}, -{62,48,24}, -{62,48,25}, -{62,48,26}, -{62,48,27}, -{62,48,28}, -{62,48,29}, -{62,48,30}, -{62,48,31}, -{62,48,32}, -{62,48,33}, -{62,48,34}, -{62,48,35}, -{62,48,36}, -{62,48,37}, -{62,48,38}, -{62,48,39}, -{62,48,40}, -{62,48,41}, -{62,48,42}, -{62,48,43}, -{62,48,44}, -{62,48,45}, -{62,48,46}, -{62,48,47}, -{62,48,48}, -{62,48,49}, -{62,48,50}, -{62,48,51}, -{62,48,52}, -{62,48,53}, -{62,48,54}, -{62,48,55}, -{62,48,56}, -{62,48,57}, -{62,48,58}, -{62,48,59}, -{62,48,60}, -{62,48,61}, -{62,48,62}, -{62,48,63}, -{62,48,64}, -{62,48,65}, -{62,48,66}, -{62,48,67}, -{62,48,68}, -{62,48,69}, -{62,48,70}, -{62,49,-58}, -{62,49,-57}, -{62,49,-56}, -{62,49,-55}, -{62,49,-54}, -{62,49,-53}, -{62,49,-52}, -{62,49,-51}, -{62,49,-50}, -{62,49,-49}, -{62,49,-48}, -{62,49,-47}, -{62,49,-46}, -{62,49,-45}, -{62,49,-44}, -{62,49,-43}, -{62,49,-42}, -{62,49,-41}, -{62,49,-40}, -{62,49,-39}, -{62,49,-38}, -{62,49,-37}, -{62,49,-36}, -{62,49,-35}, -{62,49,-34}, -{62,49,-33}, -{62,49,-32}, -{62,49,-31}, -{62,49,-30}, -{62,49,-29}, -{62,49,-28}, -{62,49,-27}, -{62,49,-26}, -{62,49,-25}, -{62,49,-24}, -{62,49,-23}, -{62,49,-22}, -{62,49,-21}, -{62,49,-20}, -{62,49,-19}, -{62,49,-18}, -{62,49,-17}, -{62,49,-16}, -{62,49,-15}, -{62,49,-14}, -{62,49,-13}, -{62,49,-12}, -{62,49,-11}, -{62,49,-10}, -{62,49,-9}, -{62,49,-8}, -{62,49,-7}, -{62,49,-6}, -{62,49,-5}, -{62,49,-4}, -{62,49,-3}, -{62,49,-2}, -{62,49,-1}, -{62,49,0}, -{62,49,1}, -{62,49,2}, -{62,49,3}, -{62,49,4}, -{62,49,5}, -{62,49,6}, -{62,49,7}, -{62,49,8}, -{62,49,9}, -{62,49,10}, -{62,49,11}, -{62,49,12}, -{62,49,13}, -{62,49,14}, -{62,49,15}, -{62,49,16}, -{62,49,17}, -{62,49,18}, -{62,49,19}, -{62,49,20}, -{62,49,21}, -{62,49,22}, -{62,49,23}, -{62,49,24}, -{62,49,25}, -{62,49,26}, -{62,49,27}, -{62,49,28}, -{62,49,29}, -{62,49,30}, -{62,49,31}, -{62,49,32}, -{62,49,33}, -{62,49,34}, -{62,49,35}, -{62,49,36}, -{62,49,37}, -{62,49,38}, -{62,49,39}, -{62,49,40}, -{62,49,41}, -{62,49,42}, -{62,49,43}, -{62,49,44}, -{62,49,45}, -{62,49,46}, -{62,49,47}, -{62,49,48}, -{62,49,49}, -{62,49,50}, -{62,49,51}, -{62,49,52}, -{62,49,53}, -{62,49,54}, -{62,49,55}, -{62,49,56}, -{62,49,57}, -{62,49,58}, -{62,49,59}, -{62,49,60}, -{62,49,61}, -{62,49,62}, -{62,49,63}, -{62,49,64}, -{62,49,65}, -{62,49,66}, -{62,49,67}, -{62,49,68}, -{62,49,69}, -{62,49,70}, -{62,50,-58}, -{62,50,-57}, -{62,50,-56}, -{62,50,-55}, -{62,50,-54}, -{62,50,-53}, -{62,50,-52}, -{62,50,-51}, -{62,50,-50}, -{62,50,-49}, -{62,50,-48}, -{62,50,-47}, -{62,50,-46}, -{62,50,-45}, -{62,50,-44}, -{62,50,-43}, -{62,50,-42}, -{62,50,-41}, -{62,50,-40}, -{62,50,-39}, -{62,50,-38}, -{62,50,-37}, -{62,50,-36}, -{62,50,-35}, -{62,50,-34}, -{62,50,-33}, -{62,50,-32}, -{62,50,-31}, -{62,50,-30}, -{62,50,-29}, -{62,50,-28}, -{62,50,-27}, -{62,50,-26}, -{62,50,-25}, -{62,50,-24}, -{62,50,-23}, -{62,50,-22}, -{62,50,-21}, -{62,50,-20}, -{62,50,-19}, -{62,50,-18}, -{62,50,-17}, -{62,50,-16}, -{62,50,-15}, -{62,50,-14}, -{62,50,-13}, -{62,50,-12}, -{62,50,-11}, -{62,50,-10}, -{62,50,-9}, -{62,50,-8}, -{62,50,-7}, -{62,50,-6}, -{62,50,-5}, -{62,50,-4}, -{62,50,-3}, -{62,50,-2}, -{62,50,-1}, -{62,50,0}, -{62,50,1}, -{62,50,2}, -{62,50,3}, -{62,50,4}, -{62,50,5}, -{62,50,6}, -{62,50,7}, -{62,50,8}, -{62,50,9}, -{62,50,10}, -{62,50,11}, -{62,50,12}, -{62,50,13}, -{62,50,14}, -{62,50,15}, -{62,50,16}, -{62,50,17}, -{62,50,18}, -{62,50,19}, -{62,50,20}, -{62,50,21}, -{62,50,22}, -{62,50,23}, -{62,50,24}, -{62,50,25}, -{62,50,26}, -{62,50,27}, -{62,50,28}, -{62,50,29}, -{62,50,30}, -{62,50,31}, -{62,50,32}, -{62,50,33}, -{62,50,34}, -{62,50,35}, -{62,50,36}, -{62,50,37}, -{62,50,38}, -{62,50,39}, -{62,50,40}, -{62,50,41}, -{62,50,42}, -{62,50,43}, -{62,50,44}, -{62,50,45}, -{62,50,46}, -{62,50,47}, -{62,50,48}, -{62,50,49}, -{62,50,50}, -{62,50,51}, -{62,50,52}, -{62,50,53}, -{62,50,54}, -{62,50,55}, -{62,50,56}, -{62,50,57}, -{62,50,58}, -{62,50,59}, -{62,50,60}, -{62,50,61}, -{62,50,62}, -{62,50,63}, -{62,50,64}, -{62,50,65}, -{62,50,66}, -{62,50,67}, -{62,50,68}, -{62,50,69}, -{62,50,70}, -{62,51,-58}, -{62,51,-57}, -{62,51,-56}, -{62,51,-55}, -{62,51,-54}, -{62,51,-53}, -{62,51,-52}, -{62,51,-51}, -{62,51,-50}, -{62,51,-49}, -{62,51,-48}, -{62,51,-47}, -{62,51,-46}, -{62,51,-45}, -{62,51,-44}, -{62,51,-43}, -{62,51,-42}, -{62,51,-41}, -{62,51,-40}, -{62,51,-39}, -{62,51,-38}, -{62,51,-37}, -{62,51,-36}, -{62,51,-35}, -{62,51,-34}, -{62,51,-33}, -{62,51,-32}, -{62,51,-31}, -{62,51,-30}, -{62,51,-29}, -{62,51,-28}, -{62,51,-27}, -{62,51,-26}, -{62,51,-25}, -{62,51,-24}, -{62,51,-23}, -{62,51,-22}, -{62,51,-21}, -{62,51,-20}, -{62,51,-19}, -{62,51,-18}, -{62,51,-17}, -{62,51,-16}, -{62,51,-15}, -{62,51,-14}, -{62,51,-13}, -{62,51,-12}, -{62,51,-11}, -{62,51,-10}, -{62,51,-9}, -{62,51,-8}, -{62,51,-7}, -{62,51,-6}, -{62,51,-5}, -{62,51,-4}, -{62,51,-3}, -{62,51,-2}, -{62,51,-1}, -{62,51,0}, -{62,51,1}, -{62,51,2}, -{62,51,3}, -{62,51,4}, -{62,51,5}, -{62,51,6}, -{62,51,7}, -{62,51,8}, -{62,51,9}, -{62,51,10}, -{62,51,11}, -{62,51,12}, -{62,51,13}, -{62,51,14}, -{62,51,15}, -{62,51,16}, -{62,51,17}, -{62,51,18}, -{62,51,19}, -{62,51,20}, -{62,51,21}, -{62,51,22}, -{62,51,23}, -{62,51,24}, -{62,51,25}, -{62,51,26}, -{62,51,27}, -{62,51,28}, -{62,51,29}, -{62,51,30}, -{62,51,31}, -{62,51,32}, -{62,51,33}, -{62,51,34}, -{62,51,35}, -{62,51,36}, -{62,51,37}, -{62,51,38}, -{62,51,39}, -{62,51,40}, -{62,51,41}, -{62,51,42}, -{62,51,43}, -{62,51,44}, -{62,51,45}, -{62,51,46}, -{62,51,47}, -{62,51,48}, -{62,51,49}, -{62,51,50}, -{62,51,51}, -{62,51,52}, -{62,51,53}, -{62,51,54}, -{62,51,55}, -{62,51,56}, -{62,51,57}, -{62,51,58}, -{62,51,59}, -{62,51,60}, -{62,51,61}, -{62,51,62}, -{62,51,63}, -{62,51,64}, -{62,51,65}, -{62,51,66}, -{62,51,67}, -{62,51,68}, -{62,51,69}, -{62,51,70}, -{62,52,-58}, -{62,52,-57}, -{62,52,-56}, -{62,52,-55}, -{62,52,-54}, -{62,52,-53}, -{62,52,-52}, -{62,52,-51}, -{62,52,-50}, -{62,52,-49}, -{62,52,-48}, -{62,52,-47}, -{62,52,-46}, -{62,52,-45}, -{62,52,-44}, -{62,52,-43}, -{62,52,-42}, -{62,52,-41}, -{62,52,-40}, -{62,52,-39}, -{62,52,-38}, -{62,52,-37}, -{62,52,-36}, -{62,52,-35}, -{62,52,-34}, -{62,52,-33}, -{62,52,-32}, -{62,52,-31}, -{62,52,-30}, -{62,52,-29}, -{62,52,-28}, -{62,52,-27}, -{62,52,-26}, -{62,52,-25}, -{62,52,-24}, -{62,52,-23}, -{62,52,-22}, -{62,52,-21}, -{62,52,-20}, -{62,52,-19}, -{62,52,-18}, -{62,52,-17}, -{62,52,-16}, -{62,52,-15}, -{62,52,-14}, -{62,52,-13}, -{62,52,-12}, -{62,52,-11}, -{62,52,-10}, -{62,52,-9}, -{62,52,-8}, -{62,52,-7}, -{62,52,-6}, -{62,52,-5}, -{62,52,-4}, -{62,52,-3}, -{62,52,-2}, -{62,52,-1}, -{62,52,0}, -{62,52,1}, -{62,52,2}, -{62,52,3}, -{62,52,4}, -{62,52,5}, -{62,52,6}, -{62,52,7}, -{62,52,8}, -{62,52,9}, -{62,52,10}, -{62,52,11}, -{62,52,12}, -{62,52,13}, -{62,52,14}, -{62,52,15}, -{62,52,16}, -{62,52,17}, -{62,52,18}, -{62,52,19}, -{62,52,20}, -{62,52,21}, -{62,52,22}, -{62,52,23}, -{62,52,24}, -{62,52,25}, -{62,52,26}, -{62,52,27}, -{62,52,28}, -{62,52,29}, -{62,52,30}, -{62,52,31}, -{62,52,32}, -{62,52,33}, -{62,52,34}, -{62,52,35}, -{62,52,36}, -{62,52,37}, -{62,52,38}, -{62,52,39}, -{62,52,40}, -{62,52,41}, -{62,52,42}, -{62,52,43}, -{62,52,44}, -{62,52,45}, -{62,52,46}, -{62,52,47}, -{62,52,48}, -{62,52,49}, -{62,52,50}, -{62,52,51}, -{62,52,52}, -{62,52,53}, -{62,52,54}, -{62,52,55}, -{62,52,56}, -{62,52,57}, -{62,52,58}, -{62,52,59}, -{62,52,60}, -{62,52,61}, -{62,52,62}, -{62,52,63}, -{62,52,64}, -{62,52,65}, -{62,52,66}, -{62,52,67}, -{62,52,68}, -{62,52,69}, -{62,52,70}, -{62,53,-58}, -{62,53,-57}, -{62,53,-56}, -{62,53,-55}, -{62,53,-54}, -{62,53,-53}, -{62,53,-52}, -{62,53,-51}, -{62,53,-50}, -{62,53,-49}, -{62,53,-48}, -{62,53,-47}, -{62,53,-46}, -{62,53,-45}, -{62,53,-44}, -{62,53,-43}, -{62,53,-42}, -{62,53,-41}, -{62,53,-40}, -{62,53,-39}, -{62,53,-38}, -{62,53,-37}, -{62,53,-36}, -{62,53,-35}, -{62,53,-34}, -{62,53,-33}, -{62,53,-32}, -{62,53,-31}, -{62,53,-30}, -{62,53,-29}, -{62,53,-28}, -{62,53,-27}, -{62,53,-26}, -{62,53,-25}, -{62,53,-24}, -{62,53,-23}, -{62,53,-22}, -{62,53,-21}, -{62,53,-20}, -{62,53,-19}, -{62,53,-18}, -{62,53,-17}, -{62,53,-16}, -{62,53,-15}, -{62,53,-14}, -{62,53,-13}, -{62,53,-12}, -{62,53,-11}, -{62,53,-10}, -{62,53,-9}, -{62,53,-8}, -{62,53,-7}, -{62,53,-6}, -{62,53,-5}, -{62,53,-4}, -{62,53,-3}, -{62,53,-2}, -{62,53,-1}, -{62,53,0}, -{62,53,1}, -{62,53,2}, -{62,53,3}, -{62,53,4}, -{62,53,5}, -{62,53,6}, -{62,53,7}, -{62,53,8}, -{62,53,9}, -{62,53,10}, -{62,53,11}, -{62,53,12}, -{62,53,13}, -{62,53,14}, -{62,53,15}, -{62,53,16}, -{62,53,17}, -{62,53,18}, -{62,53,19}, -{62,53,20}, -{62,53,21}, -{62,53,22}, -{62,53,23}, -{62,53,24}, -{62,53,25}, -{62,53,26}, -{62,53,27}, -{62,53,28}, -{62,53,29}, -{62,53,30}, -{62,53,31}, -{62,53,32}, -{62,53,33}, -{62,53,34}, -{62,53,35}, -{62,53,36}, -{62,53,37}, -{62,53,38}, -{62,53,39}, -{62,53,40}, -{62,53,41}, -{62,53,42}, -{62,53,43}, -{62,53,44}, -{62,53,45}, -{62,53,46}, -{62,53,47}, -{62,53,48}, -{62,53,49}, -{62,53,50}, -{62,53,51}, -{62,53,52}, -{62,53,53}, -{62,53,54}, -{62,53,55}, -{62,53,56}, -{62,53,57}, -{62,53,58}, -{62,53,59}, -{62,53,60}, -{62,53,61}, -{62,53,62}, -{62,53,63}, -{62,53,64}, -{62,53,65}, -{62,53,66}, -{62,53,67}, -{62,53,68}, -{62,53,69}, -{62,53,70}, -{62,53,71}, -{62,54,-58}, -{62,54,-57}, -{62,54,-56}, -{62,54,-55}, -{62,54,-54}, -{62,54,-53}, -{62,54,-52}, -{62,54,-51}, -{62,54,-50}, -{62,54,-49}, -{62,54,-48}, -{62,54,-47}, -{62,54,-46}, -{62,54,-45}, -{62,54,-44}, -{62,54,-43}, -{62,54,-42}, -{62,54,-41}, -{62,54,-40}, -{62,54,-39}, -{62,54,-38}, -{62,54,-37}, -{62,54,-36}, -{62,54,-35}, -{62,54,-34}, -{62,54,-33}, -{62,54,-32}, -{62,54,-31}, -{62,54,-30}, -{62,54,-29}, -{62,54,-28}, -{62,54,-27}, -{62,54,-26}, -{62,54,-25}, -{62,54,-24}, -{62,54,-23}, -{62,54,-22}, -{62,54,-21}, -{62,54,-20}, -{62,54,-19}, -{62,54,-18}, -{62,54,-17}, -{62,54,-16}, -{62,54,-15}, -{62,54,-14}, -{62,54,-13}, -{62,54,-12}, -{62,54,-11}, -{62,54,-10}, -{62,54,-9}, -{62,54,-8}, -{62,54,-7}, -{62,54,-6}, -{62,54,-5}, -{62,54,-4}, -{62,54,-3}, -{62,54,-2}, -{62,54,-1}, -{62,54,0}, -{62,54,1}, -{62,54,2}, -{62,54,3}, -{62,54,4}, -{62,54,5}, -{62,54,6}, -{62,54,7}, -{62,54,8}, -{62,54,9}, -{62,54,10}, -{62,54,11}, -{62,54,12}, -{62,54,13}, -{62,54,14}, -{62,54,15}, -{62,54,16}, -{62,54,17}, -{62,54,18}, -{62,54,19}, -{62,54,20}, -{62,54,21}, -{62,54,22}, -{62,54,23}, -{62,54,24}, -{62,54,25}, -{62,54,26}, -{62,54,27}, -{62,54,28}, -{62,54,29}, -{62,54,30}, -{62,54,31}, -{62,54,32}, -{62,54,33}, -{62,54,34}, -{62,54,35}, -{62,54,36}, -{62,54,37}, -{62,54,38}, -{62,54,39}, -{62,54,40}, -{62,54,41}, -{62,54,42}, -{62,54,43}, -{62,54,44}, -{62,54,45}, -{62,54,46}, -{62,54,47}, -{62,54,48}, -{62,54,49}, -{62,54,50}, -{62,54,51}, -{62,54,52}, -{62,54,53}, -{62,54,54}, -{62,54,55}, -{62,54,56}, -{62,54,57}, -{62,54,58}, -{62,54,59}, -{62,54,60}, -{62,54,61}, -{62,54,62}, -{62,54,63}, -{62,54,64}, -{62,54,65}, -{62,54,66}, -{62,54,67}, -{62,54,68}, -{62,54,69}, -{62,54,70}, -{62,54,71}, -{62,55,-58}, -{62,55,-57}, -{62,55,-56}, -{62,55,-55}, -{62,55,-54}, -{62,55,-53}, -{62,55,-52}, -{62,55,-51}, -{62,55,-50}, -{62,55,-49}, -{62,55,-48}, -{62,55,-47}, -{62,55,-46}, -{62,55,-45}, -{62,55,-44}, -{62,55,-43}, -{62,55,-42}, -{62,55,-41}, -{62,55,-40}, -{62,55,-39}, -{62,55,-38}, -{62,55,-37}, -{62,55,-36}, -{62,55,-35}, -{62,55,-34}, -{62,55,-33}, -{62,55,-32}, -{62,55,-31}, -{62,55,-30}, -{62,55,-29}, -{62,55,-28}, -{62,55,-27}, -{62,55,-26}, -{62,55,-25}, -{62,55,-24}, -{62,55,-23}, -{62,55,-22}, -{62,55,-21}, -{62,55,-20}, -{62,55,-19}, -{62,55,-18}, -{62,55,-17}, -{62,55,-16}, -{62,55,-15}, -{62,55,-14}, -{62,55,-13}, -{62,55,-12}, -{62,55,-11}, -{62,55,-10}, -{62,55,-9}, -{62,55,-8}, -{62,55,-7}, -{62,55,-6}, -{62,55,-5}, -{62,55,-4}, -{62,55,-3}, -{62,55,-2}, -{62,55,-1}, -{62,55,0}, -{62,55,1}, -{62,55,2}, -{62,55,3}, -{62,55,4}, -{62,55,5}, -{62,55,6}, -{62,55,7}, -{62,55,8}, -{62,55,9}, -{62,55,10}, -{62,55,11}, -{62,55,12}, -{62,55,13}, -{62,55,14}, -{62,55,15}, -{62,55,16}, -{62,55,17}, -{62,55,18}, -{62,55,19}, -{62,55,20}, -{62,55,21}, -{62,55,22}, -{62,55,23}, -{62,55,24}, -{62,55,25}, -{62,55,26}, -{62,55,27}, -{62,55,28}, -{62,55,29}, -{62,55,30}, -{62,55,31}, -{62,55,32}, -{62,55,33}, -{62,55,34}, -{62,55,35}, -{62,55,36}, -{62,55,37}, -{62,55,38}, -{62,55,39}, -{62,55,40}, -{62,55,41}, -{62,55,42}, -{62,55,43}, -{62,55,44}, -{62,55,45}, -{62,55,46}, -{62,55,47}, -{62,55,48}, -{62,55,49}, -{62,55,50}, -{62,55,51}, -{62,55,52}, -{62,55,53}, -{62,55,54}, -{62,55,55}, -{62,55,56}, -{62,55,57}, -{62,55,58}, -{62,55,59}, -{62,55,60}, -{62,55,61}, -{62,55,62}, -{62,55,63}, -{62,55,64}, -{62,55,65}, -{62,55,66}, -{62,55,67}, -{62,55,68}, -{62,55,69}, -{62,55,70}, -{62,55,71}, -{62,56,-58}, -{62,56,-57}, -{62,56,-56}, -{62,56,-55}, -{62,56,-54}, -{62,56,-53}, -{62,56,-52}, -{62,56,-51}, -{62,56,-50}, -{62,56,-49}, -{62,56,-48}, -{62,56,-47}, -{62,56,-46}, -{62,56,-45}, -{62,56,-44}, -{62,56,-43}, -{62,56,-42}, -{62,56,-41}, -{62,56,-40}, -{62,56,-39}, -{62,56,-38}, -{62,56,-37}, -{62,56,-36}, -{62,56,-35}, -{62,56,-34}, -{62,56,-33}, -{62,56,-32}, -{62,56,-31}, -{62,56,-30}, -{62,56,-29}, -{62,56,-28}, -{62,56,-27}, -{62,56,-26}, -{62,56,-25}, -{62,56,-24}, -{62,56,-23}, -{62,56,-22}, -{62,56,-21}, -{62,56,-20}, -{62,56,-19}, -{62,56,-18}, -{62,56,-17}, -{62,56,-16}, -{62,56,-15}, -{62,56,-14}, -{62,56,-13}, -{62,56,-12}, -{62,56,-11}, -{62,56,-10}, -{62,56,-9}, -{62,56,-8}, -{62,56,-7}, -{62,56,-6}, -{62,56,-5}, -{62,56,-4}, -{62,56,-3}, -{62,56,-2}, -{62,56,-1}, -{62,56,0}, -{62,56,1}, -{62,56,2}, -{62,56,3}, -{62,56,4}, -{62,56,5}, -{62,56,6}, -{62,56,7}, -{62,56,8}, -{62,56,9}, -{62,56,10}, -{62,56,11}, -{62,56,12}, -{62,56,13}, -{62,56,14}, -{62,56,15}, -{62,56,16}, -{62,56,17}, -{62,56,18}, -{62,56,19}, -{62,56,20}, -{62,56,21}, -{62,56,22}, -{62,56,23}, -{62,56,24}, -{62,56,25}, -{62,56,26}, -{62,56,27}, -{62,56,28}, -{62,56,29}, -{62,56,30}, -{62,56,31}, -{62,56,32}, -{62,56,33}, -{62,56,34}, -{62,56,35}, -{62,56,36}, -{62,56,37}, -{62,56,38}, -{62,56,39}, -{62,56,40}, -{62,56,41}, -{62,56,42}, -{62,56,43}, -{62,56,44}, -{62,56,45}, -{62,56,46}, -{62,56,47}, -{62,56,48}, -{62,56,49}, -{62,56,50}, -{62,56,51}, -{62,56,52}, -{62,56,53}, -{62,56,54}, -{62,56,55}, -{62,56,56}, -{62,56,57}, -{62,56,58}, -{62,56,59}, -{62,56,60}, -{62,56,61}, -{62,56,62}, -{62,56,63}, -{62,56,64}, -{62,56,65}, -{62,56,66}, -{62,56,67}, -{62,56,68}, -{62,56,69}, -{62,56,70}, -{62,56,71}, -{62,57,-58}, -{62,57,-57}, -{62,57,-56}, -{62,57,-55}, -{62,57,-54}, -{62,57,-53}, -{62,57,-52}, -{62,57,-51}, -{62,57,-50}, -{62,57,-49}, -{62,57,-48}, -{62,57,-47}, -{62,57,-46}, -{62,57,-45}, -{62,57,-44}, -{62,57,-43}, -{62,57,-42}, -{62,57,-41}, -{62,57,-40}, -{62,57,-39}, -{62,57,-38}, -{62,57,-37}, -{62,57,-36}, -{62,57,-35}, -{62,57,-34}, -{62,57,-33}, -{62,57,-32}, -{62,57,-31}, -{62,57,-30}, -{62,57,-29}, -{62,57,-28}, -{62,57,-27}, -{62,57,-26}, -{62,57,-25}, -{62,57,-24}, -{62,57,-23}, -{62,57,-22}, -{62,57,-21}, -{62,57,-20}, -{62,57,-19}, -{62,57,-18}, -{62,57,-17}, -{62,57,-16}, -{62,57,-15}, -{62,57,-14}, -{62,57,-13}, -{62,57,-12}, -{62,57,-11}, -{62,57,-10}, -{62,57,-9}, -{62,57,-8}, -{62,57,-7}, -{62,57,-6}, -{62,57,-5}, -{62,57,-4}, -{62,57,-3}, -{62,57,-2}, -{62,57,-1}, -{62,57,0}, -{62,57,1}, -{62,57,2}, -{62,57,3}, -{62,57,4}, -{62,57,5}, -{62,57,6}, -{62,57,7}, -{62,57,8}, -{62,57,9}, -{62,57,10}, -{62,57,11}, -{62,57,12}, -{62,57,13}, -{62,57,14}, -{62,57,15}, -{62,57,16}, -{62,57,17}, -{62,57,18}, -{62,57,19}, -{62,57,20}, -{62,57,21}, -{62,57,22}, -{62,57,23}, -{62,57,24}, -{62,57,25}, -{62,57,26}, -{62,57,27}, -{62,57,28}, -{62,57,29}, -{62,57,30}, -{62,57,31}, -{62,57,32}, -{62,57,33}, -{62,57,34}, -{62,57,35}, -{62,57,36}, -{62,57,37}, -{62,57,38}, -{62,57,39}, -{62,57,40}, -{62,57,41}, -{62,57,42}, -{62,57,43}, -{62,57,44}, -{62,57,45}, -{62,57,46}, -{62,57,47}, -{62,57,48}, -{62,57,49}, -{62,57,50}, -{62,57,51}, -{62,57,52}, -{62,57,53}, -{62,57,54}, -{62,57,55}, -{62,57,56}, -{62,57,57}, -{62,57,58}, -{62,57,59}, -{62,58,-58}, -{62,58,-57}, -{62,58,-56}, -{62,58,-55}, -{62,58,-54}, -{62,58,-53}, -{62,58,-52}, -{62,58,-51}, -{62,58,-50}, -{62,58,-49}, -{62,58,-48}, -{62,58,-47}, -{62,58,-46}, -{62,58,-45}, -{62,58,-44}, -{62,58,-43}, -{62,58,-42}, -{62,58,-41}, -{62,58,-40}, -{62,58,-39}, -{62,58,-38}, -{62,58,-37}, -{62,58,-36}, -{62,58,-35}, -{62,58,-34}, -{62,58,-33}, -{62,58,-32}, -{62,58,-31}, -{62,58,-30}, -{62,58,-29}, -{62,58,-28}, -{62,58,-27}, -{62,58,-26}, -{62,58,-25}, -{62,58,-24}, -{62,58,-23}, -{62,58,-22}, -{62,58,-21}, -{62,58,-20}, -{62,58,-19}, -{62,58,-18}, -{62,58,-17}, -{62,58,-16}, -{62,58,-15}, -{62,58,-14}, -{62,58,-13}, -{62,58,-12}, -{62,58,-11}, -{62,58,-10}, -{62,58,-9}, -{62,58,-8}, -{62,58,-7}, -{62,58,-6}, -{62,58,-5}, -{62,58,-4}, -{62,58,-3}, -{62,58,-2}, -{62,58,-1}, -{62,58,0}, -{62,58,1}, -{62,58,2}, -{62,58,3}, -{62,58,4}, -{62,58,5}, -{62,58,6}, -{62,58,7}, -{62,58,8}, -{62,58,9}, -{62,58,10}, -{62,58,11}, -{62,58,12}, -{62,58,13}, -{62,58,14}, -{62,58,15}, -{62,58,16}, -{62,58,17}, -{62,58,18}, -{62,58,19}, -{62,58,20}, -{62,58,21}, -{62,58,22}, -{62,58,23}, -{62,58,24}, -{62,58,25}, -{62,58,26}, -{62,58,27}, -{62,58,28}, -{62,58,29}, -{62,58,30}, -{62,58,31}, -{62,58,32}, -{62,58,33}, -{62,58,34}, -{62,58,35}, -{62,58,36}, -{62,58,37}, -{62,58,38}, -{62,58,39}, -{62,58,40}, -{62,58,41}, -{62,58,42}, -{62,58,43}, -{62,58,44}, -{62,58,45}, -{62,58,46}, -{62,58,47}, -{62,58,48}, -{62,58,49}, -{62,58,50}, -{62,59,-58}, -{62,59,-57}, -{62,59,-56}, -{62,59,-55}, -{62,59,-54}, -{62,59,-53}, -{62,59,-52}, -{62,59,-51}, -{62,59,-50}, -{62,59,-49}, -{62,59,-48}, -{62,59,-47}, -{62,59,-46}, -{62,59,-45}, -{62,59,-44}, -{62,59,-43}, -{62,59,-42}, -{62,59,-41}, -{62,59,-40}, -{62,59,-39}, -{62,59,-38}, -{62,59,-37}, -{62,59,-36}, -{62,59,-35}, -{62,59,-34}, -{62,59,-33}, -{62,59,-32}, -{62,59,-31}, -{62,59,-30}, -{62,59,-29}, -{62,59,-28}, -{62,59,-27}, -{62,59,-26}, -{62,59,-25}, -{62,59,-24}, -{62,59,-23}, -{62,59,-22}, -{62,59,-21}, -{62,59,-20}, -{62,59,-19}, -{62,59,-18}, -{62,59,-17}, -{62,59,-16}, -{62,59,-15}, -{62,59,-14}, -{62,59,-13}, -{62,59,-12}, -{62,59,-11}, -{62,59,-10}, -{62,59,-9}, -{62,59,-8}, -{62,59,-7}, -{62,59,-6}, -{62,59,-5}, -{62,59,-4}, -{62,59,-3}, -{62,59,-2}, -{62,59,-1}, -{62,59,0}, -{62,59,1}, -{62,59,2}, -{62,59,3}, -{62,59,4}, -{62,59,5}, -{62,59,6}, -{62,59,7}, -{62,59,8}, -{62,59,9}, -{62,59,10}, -{62,59,11}, -{62,59,12}, -{62,59,13}, -{62,59,14}, -{62,59,15}, -{62,59,16}, -{62,59,17}, -{62,59,18}, -{62,59,19}, -{62,59,20}, -{62,59,21}, -{62,59,22}, -{62,59,23}, -{62,59,24}, -{62,59,25}, -{62,59,26}, -{62,59,27}, -{62,59,28}, -{62,59,29}, -{62,59,30}, -{62,59,31}, -{62,59,32}, -{62,59,33}, -{62,59,34}, -{62,59,35}, -{62,59,36}, -{62,59,37}, -{62,59,38}, -{62,59,39}, -{62,59,40}, -{62,59,41}, -{62,59,42}, -{62,59,43}, -{62,60,-58}, -{62,60,-57}, -{62,60,-56}, -{62,60,-55}, -{62,60,-54}, -{62,60,-53}, -{62,60,-52}, -{62,60,-51}, -{62,60,-50}, -{62,60,-49}, -{62,60,-48}, -{62,60,-47}, -{62,60,-46}, -{62,60,-45}, -{62,60,-44}, -{62,60,-43}, -{62,60,-42}, -{62,60,-41}, -{62,60,-40}, -{62,60,-39}, -{62,60,-38}, -{62,60,-37}, -{62,60,-36}, -{62,60,-35}, -{62,60,-34}, -{62,60,-33}, -{62,60,-32}, -{62,60,-31}, -{62,60,-30}, -{62,60,-29}, -{62,60,-28}, -{62,60,-27}, -{62,60,-26}, -{62,60,-25}, -{62,60,-24}, -{62,60,-23}, -{62,60,-22}, -{62,60,-21}, -{62,60,-20}, -{62,60,-19}, -{62,60,-18}, -{62,60,-17}, -{62,60,-16}, -{62,60,-15}, -{62,60,-14}, -{62,60,-13}, -{62,60,-12}, -{62,60,-11}, -{62,60,-10}, -{62,60,-9}, -{62,60,-8}, -{62,60,-7}, -{62,60,-6}, -{62,60,-5}, -{62,60,-4}, -{62,60,-3}, -{62,60,-2}, -{62,60,-1}, -{62,60,0}, -{62,60,1}, -{62,60,2}, -{62,60,3}, -{62,60,4}, -{62,60,5}, -{62,60,6}, -{62,60,7}, -{62,60,8}, -{62,60,9}, -{62,60,10}, -{62,60,11}, -{62,60,12}, -{62,60,13}, -{62,60,14}, -{62,60,15}, -{62,60,16}, -{62,60,17}, -{62,60,18}, -{62,60,19}, -{62,60,20}, -{62,60,21}, -{62,60,22}, -{62,60,23}, -{62,60,24}, -{62,60,25}, -{62,60,26}, -{62,60,27}, -{62,60,28}, -{62,60,29}, -{62,60,30}, -{62,60,31}, -{62,60,32}, -{62,60,33}, -{62,60,34}, -{62,60,35}, -{62,60,36}, -{62,60,37}, -{62,61,-58}, -{62,61,-57}, -{62,61,-56}, -{62,61,-55}, -{62,61,-54}, -{62,61,-53}, -{62,61,-52}, -{62,61,-51}, -{62,61,-50}, -{62,61,-49}, -{62,61,-48}, -{62,61,-47}, -{62,61,-46}, -{62,61,-45}, -{62,61,-44}, -{62,61,-43}, -{62,61,-42}, -{62,61,-41}, -{62,61,-40}, -{62,61,-39}, -{62,61,-38}, -{62,61,-37}, -{62,61,-36}, -{62,61,-35}, -{62,61,-34}, -{62,61,-33}, -{62,61,-32}, -{62,61,-31}, -{62,61,-30}, -{62,61,-29}, -{62,61,-28}, -{62,61,-27}, -{62,61,-26}, -{62,61,-25}, -{62,61,-24}, -{62,61,-23}, -{62,61,-22}, -{62,61,-21}, -{62,61,-20}, -{62,61,-19}, -{62,61,-18}, -{62,61,-17}, -{62,61,-16}, -{62,61,-15}, -{62,61,-14}, -{62,61,-13}, -{62,61,-12}, -{62,61,-11}, -{62,61,-10}, -{62,61,-9}, -{62,61,-8}, -{62,61,-7}, -{62,61,-6}, -{62,61,-5}, -{62,61,-4}, -{62,61,-3}, -{62,61,-2}, -{62,61,-1}, -{62,61,0}, -{62,61,1}, -{62,61,2}, -{62,61,3}, -{62,61,4}, -{62,61,5}, -{62,61,6}, -{62,61,7}, -{62,61,8}, -{62,61,9}, -{62,61,10}, -{62,61,11}, -{62,61,12}, -{62,61,13}, -{62,61,14}, -{62,61,15}, -{62,61,16}, -{62,61,17}, -{62,61,18}, -{62,61,19}, -{62,61,20}, -{62,61,21}, -{62,61,22}, -{62,61,23}, -{62,61,24}, -{62,61,25}, -{62,61,26}, -{62,61,27}, -{62,61,28}, -{62,61,29}, -{62,61,30}, -{62,61,31}, -{62,62,-58}, -{62,62,-57}, -{62,62,-56}, -{62,62,-55}, -{62,62,-54}, -{62,62,-53}, -{62,62,-52}, -{62,62,-51}, -{62,62,-50}, -{62,62,-49}, -{62,62,-48}, -{62,62,-47}, -{62,62,-46}, -{62,62,-45}, -{62,62,-44}, -{62,62,-43}, -{62,62,-42}, -{62,62,-41}, -{62,62,-40}, -{62,62,-39}, -{62,62,-38}, -{62,62,-37}, -{62,62,-36}, -{62,62,-35}, -{62,62,-34}, -{62,62,-33}, -{62,62,-32}, -{62,62,-31}, -{62,62,-30}, -{62,62,-29}, -{62,62,-28}, -{62,62,-27}, -{62,62,-26}, -{62,62,-25}, -{62,62,-24}, -{62,62,-23}, -{62,62,-22}, -{62,62,-21}, -{62,62,-20}, -{62,62,-19}, -{62,62,-18}, -{62,62,-17}, -{62,62,-16}, -{62,62,-15}, -{62,62,-14}, -{62,62,-13}, -{62,62,-12}, -{62,62,-11}, -{62,62,-10}, -{62,62,-9}, -{62,62,-8}, -{62,62,-7}, -{62,62,-6}, -{62,62,-5}, -{62,62,-4}, -{62,62,-3}, -{62,62,-2}, -{62,62,-1}, -{62,62,0}, -{62,62,1}, -{62,62,2}, -{62,62,3}, -{62,62,4}, -{62,62,5}, -{62,62,6}, -{62,62,7}, -{62,62,8}, -{62,62,9}, -{62,62,10}, -{62,62,11}, -{62,62,12}, -{62,62,13}, -{62,62,14}, -{62,62,15}, -{62,62,16}, -{62,62,17}, -{62,62,18}, -{62,62,19}, -{62,62,20}, -{62,62,21}, -{62,62,22}, -{62,62,23}, -{62,62,24}, -{62,62,25}, -{62,62,26}, -{62,63,-58}, -{62,63,-57}, -{62,63,-56}, -{62,63,-55}, -{62,63,-54}, -{62,63,-53}, -{62,63,-52}, -{62,63,-51}, -{62,63,-50}, -{62,63,-49}, -{62,63,-48}, -{62,63,-47}, -{62,63,-46}, -{62,63,-45}, -{62,63,-44}, -{62,63,-43}, -{62,63,-42}, -{62,63,-41}, -{62,63,-40}, -{62,63,-39}, -{62,63,-38}, -{62,63,-37}, -{62,63,-36}, -{62,63,-35}, -{62,63,-34}, -{62,63,-33}, -{62,63,-32}, -{62,63,-31}, -{62,63,-30}, -{62,63,-29}, -{62,63,-28}, -{62,63,-27}, -{62,63,-26}, -{62,63,-25}, -{62,63,-24}, -{62,63,-23}, -{62,63,-22}, -{62,63,-21}, -{62,63,-20}, -{62,63,-19}, -{62,63,-18}, -{62,63,-17}, -{62,63,-16}, -{62,63,-15}, -{62,63,-14}, -{62,63,-13}, -{62,63,-12}, -{62,63,-11}, -{62,63,-10}, -{62,63,-9}, -{62,63,-8}, -{62,63,-7}, -{62,63,-6}, -{62,63,-5}, -{62,63,-4}, -{62,63,-3}, -{62,63,-2}, -{62,63,-1}, -{62,63,0}, -{62,63,1}, -{62,63,2}, -{62,63,3}, -{62,63,4}, -{62,63,5}, -{62,63,6}, -{62,63,7}, -{62,63,8}, -{62,63,9}, -{62,63,10}, -{62,63,11}, -{62,63,12}, -{62,63,13}, -{62,63,14}, -{62,63,15}, -{62,63,16}, -{62,63,17}, -{62,63,18}, -{62,63,19}, -{62,63,20}, -{62,63,21}, -{62,64,-58}, -{62,64,-57}, -{62,64,-56}, -{62,64,-55}, -{62,64,-54}, -{62,64,-53}, -{62,64,-52}, -{62,64,-51}, -{62,64,-50}, -{62,64,-49}, -{62,64,-48}, -{62,64,-47}, -{62,64,-46}, -{62,64,-45}, -{62,64,-44}, -{62,64,-43}, -{62,64,-42}, -{62,64,-41}, -{62,64,-40}, -{62,64,-39}, -{62,64,-38}, -{62,64,-37}, -{62,64,-36}, -{62,64,-35}, -{62,64,-34}, -{62,64,-33}, -{62,64,-32}, -{62,64,-31}, -{62,64,-30}, -{62,64,-29}, -{62,64,-28}, -{62,64,-27}, -{62,64,-26}, -{62,64,-25}, -{62,64,-24}, -{62,64,-23}, -{62,64,-22}, -{62,64,-21}, -{62,64,-20}, -{62,64,-19}, -{62,64,-18}, -{62,64,-17}, -{62,64,-16}, -{62,64,-15}, -{62,64,-14}, -{62,64,-13}, -{62,64,-12}, -{62,64,-11}, -{62,64,-10}, -{62,64,-9}, -{62,64,-8}, -{62,64,-7}, -{62,64,-6}, -{62,64,-5}, -{62,64,-4}, -{62,64,-3}, -{62,64,-2}, -{62,64,-1}, -{62,64,0}, -{62,64,1}, -{62,64,2}, -{62,64,3}, -{62,64,4}, -{62,64,5}, -{62,64,6}, -{62,64,7}, -{62,64,8}, -{62,64,9}, -{62,64,10}, -{62,64,11}, -{62,64,12}, -{62,64,13}, -{62,64,14}, -{62,64,15}, -{62,64,16}, -{62,64,17}, -{62,65,-58}, -{62,65,-57}, -{62,65,-56}, -{62,65,-55}, -{62,65,-54}, -{62,65,-53}, -{62,65,-52}, -{62,65,-51}, -{62,65,-50}, -{62,65,-49}, -{62,65,-48}, -{62,65,-47}, -{62,65,-46}, -{62,65,-45}, -{62,65,-44}, -{62,65,-43}, -{62,65,-42}, -{62,65,-41}, -{62,65,-40}, -{62,65,-39}, -{62,65,-38}, -{62,65,-37}, -{62,65,-36}, -{62,65,-35}, -{62,65,-34}, -{62,65,-33}, -{62,65,-32}, -{62,65,-31}, -{62,65,-30}, -{62,65,-29}, -{62,65,-28}, -{62,65,-27}, -{62,65,-26}, -{62,65,-25}, -{62,65,-24}, -{62,65,-23}, -{62,65,-22}, -{62,65,-21}, -{62,65,-20}, -{62,65,-19}, -{62,65,-18}, -{62,65,-17}, -{62,65,-16}, -{62,65,-15}, -{62,65,-14}, -{62,65,-13}, -{62,65,-12}, -{62,65,-11}, -{62,65,-10}, -{62,65,-9}, -{62,65,-8}, -{62,65,-7}, -{62,65,-6}, -{62,65,-5}, -{62,65,-4}, -{62,65,-3}, -{62,65,-2}, -{62,65,-1}, -{62,65,0}, -{62,65,1}, -{62,65,2}, -{62,65,3}, -{62,65,4}, -{62,65,5}, -{62,65,6}, -{62,65,7}, -{62,65,8}, -{62,65,9}, -{62,65,10}, -{62,65,11}, -{62,65,12}, -{62,65,13}, -{62,66,-58}, -{62,66,-57}, -{62,66,-56}, -{62,66,-55}, -{62,66,-54}, -{62,66,-53}, -{62,66,-52}, -{62,66,-51}, -{62,66,-50}, -{62,66,-49}, -{62,66,-48}, -{62,66,-47}, -{62,66,-46}, -{62,66,-45}, -{62,66,-44}, -{62,66,-43}, -{62,66,-42}, -{62,66,-41}, -{62,66,-40}, -{62,66,-39}, -{62,66,-38}, -{62,66,-37}, -{62,66,-36}, -{62,66,-35}, -{62,66,-34}, -{62,66,-33}, -{62,66,-32}, -{62,66,-31}, -{62,66,-30}, -{62,66,-29}, -{62,66,-28}, -{62,66,-27}, -{62,66,-26}, -{62,66,-25}, -{62,66,-24}, -{62,66,-23}, -{62,66,-22}, -{62,66,-21}, -{62,66,-20}, -{62,66,-19}, -{62,66,-18}, -{62,66,-17}, -{62,66,-16}, -{62,66,-15}, -{62,66,-14}, -{62,66,-13}, -{62,66,-12}, -{62,66,-11}, -{62,66,-10}, -{62,66,-9}, -{62,66,-8}, -{62,66,-7}, -{62,66,-6}, -{62,66,-5}, -{62,66,-4}, -{62,66,-3}, -{62,66,-2}, -{62,66,-1}, -{62,66,0}, -{62,66,1}, -{62,66,2}, -{62,66,3}, -{62,66,4}, -{62,66,5}, -{62,66,6}, -{62,66,7}, -{62,66,8}, -{62,66,9}, -{62,67,-58}, -{62,67,-57}, -{62,67,-56}, -{62,67,-55}, -{62,67,-54}, -{62,67,-53}, -{62,67,-52}, -{62,67,-51}, -{62,67,-50}, -{62,67,-49}, -{62,67,-48}, -{62,67,-47}, -{62,67,-46}, -{62,67,-45}, -{62,67,-44}, -{62,67,-43}, -{62,67,-42}, -{62,67,-41}, -{62,67,-40}, -{62,67,-39}, -{62,67,-38}, -{62,67,-37}, -{62,67,-36}, -{62,67,-35}, -{62,67,-34}, -{62,67,-33}, -{62,67,-32}, -{62,67,-31}, -{62,67,-30}, -{62,67,-29}, -{62,67,-28}, -{62,67,-27}, -{62,67,-26}, -{62,67,-25}, -{62,67,-24}, -{62,67,-23}, -{62,67,-22}, -{62,67,-21}, -{62,67,-20}, -{62,67,-19}, -{62,67,-18}, -{62,67,-17}, -{62,67,-16}, -{62,67,-15}, -{62,67,-14}, -{62,67,-13}, -{62,67,-12}, -{62,67,-11}, -{62,67,-10}, -{62,67,-9}, -{62,67,-8}, -{62,67,-7}, -{62,67,-6}, -{62,67,-5}, -{62,67,-4}, -{62,67,-3}, -{62,67,-2}, -{62,67,-1}, -{62,67,0}, -{62,67,1}, -{62,67,2}, -{62,67,3}, -{62,67,4}, -{62,67,5}, -{62,68,-58}, -{62,68,-57}, -{62,68,-56}, -{62,68,-55}, -{62,68,-54}, -{62,68,-53}, -{62,68,-52}, -{62,68,-51}, -{62,68,-50}, -{62,68,-49}, -{62,68,-48}, -{62,68,-47}, -{62,68,-46}, -{62,68,-45}, -{62,68,-44}, -{62,68,-43}, -{62,68,-42}, -{62,68,-41}, -{62,68,-40}, -{62,68,-39}, -{62,68,-38}, -{62,68,-37}, -{62,68,-36}, -{62,68,-35}, -{62,68,-34}, -{62,68,-33}, -{62,68,-32}, -{62,68,-31}, -{62,68,-30}, -{62,68,-29}, -{62,68,-28}, -{62,68,-27}, -{62,68,-26}, -{62,68,-25}, -{62,68,-24}, -{62,68,-23}, -{62,68,-22}, -{62,68,-21}, -{62,68,-20}, -{62,68,-19}, -{62,68,-18}, -{62,68,-17}, -{62,68,-16}, -{62,68,-15}, -{62,68,-14}, -{62,68,-13}, -{62,68,-12}, -{62,68,-11}, -{62,68,-10}, -{62,68,-9}, -{62,68,-8}, -{62,68,-7}, -{62,68,-6}, -{62,68,-5}, -{62,68,-4}, -{62,68,-3}, -{62,68,-2}, -{62,68,-1}, -{62,68,0}, -{62,68,1}, -{62,68,2}, -{62,69,-58}, -{62,69,-57}, -{62,69,-56}, -{62,69,-55}, -{62,69,-54}, -{62,69,-53}, -{62,69,-52}, -{62,69,-51}, -{62,69,-50}, -{62,69,-49}, -{62,69,-48}, -{62,69,-47}, -{62,69,-46}, -{62,69,-45}, -{62,69,-44}, -{62,69,-43}, -{62,69,-42}, -{62,69,-41}, -{62,69,-40}, -{62,69,-39}, -{62,69,-38}, -{62,69,-37}, -{62,69,-36}, -{62,69,-35}, -{62,69,-34}, -{62,69,-33}, -{62,69,-32}, -{62,69,-31}, -{62,69,-30}, -{62,69,-29}, -{62,69,-28}, -{62,69,-27}, -{62,69,-26}, -{62,69,-25}, -{62,69,-24}, -{62,69,-23}, -{62,69,-22}, -{62,69,-21}, -{62,69,-20}, -{62,69,-19}, -{62,69,-18}, -{62,69,-17}, -{62,69,-16}, -{62,69,-15}, -{62,69,-14}, -{62,69,-13}, -{62,69,-12}, -{62,69,-11}, -{62,69,-10}, -{62,69,-9}, -{62,69,-8}, -{62,69,-7}, -{62,69,-6}, -{62,69,-5}, -{62,69,-4}, -{62,69,-3}, -{62,69,-2}, -{62,70,-58}, -{62,70,-57}, -{62,70,-56}, -{62,70,-55}, -{62,70,-54}, -{62,70,-53}, -{62,70,-52}, -{62,70,-51}, -{62,70,-50}, -{62,70,-49}, -{62,70,-48}, -{62,70,-47}, -{62,70,-46}, -{62,70,-45}, -{62,70,-44}, -{62,70,-43}, -{62,70,-42}, -{62,70,-41}, -{62,70,-40}, -{62,70,-39}, -{62,70,-38}, -{62,70,-37}, -{62,70,-36}, -{62,70,-35}, -{62,70,-34}, -{62,70,-33}, -{62,70,-32}, -{62,70,-31}, -{62,70,-30}, -{62,70,-29}, -{62,70,-28}, -{62,70,-27}, -{62,70,-26}, -{62,70,-25}, -{62,70,-24}, -{62,70,-23}, -{62,70,-22}, -{62,70,-21}, -{62,70,-20}, -{62,70,-19}, -{62,70,-18}, -{62,70,-17}, -{62,70,-16}, -{62,70,-15}, -{62,70,-14}, -{62,70,-13}, -{62,70,-12}, -{62,70,-11}, -{62,70,-10}, -{62,70,-9}, -{62,70,-8}, -{62,70,-7}, -{62,70,-6}, -{62,70,-5}, -{62,71,-58}, -{62,71,-57}, -{62,71,-56}, -{62,71,-55}, -{62,71,-54}, -{62,71,-53}, -{62,71,-52}, -{62,71,-51}, -{62,71,-50}, -{62,71,-49}, -{62,71,-48}, -{62,71,-47}, -{62,71,-46}, -{62,71,-45}, -{62,71,-44}, -{62,71,-43}, -{62,71,-42}, -{62,71,-41}, -{62,71,-40}, -{62,71,-39}, -{62,71,-38}, -{62,71,-37}, -{62,71,-36}, -{62,71,-35}, -{62,71,-34}, -{62,71,-33}, -{62,71,-32}, -{62,71,-31}, -{62,71,-30}, -{62,71,-29}, -{62,71,-28}, -{62,71,-27}, -{62,71,-26}, -{62,71,-25}, -{62,71,-24}, -{62,71,-23}, -{62,71,-22}, -{62,71,-21}, -{62,71,-20}, -{62,71,-19}, -{62,71,-18}, -{62,71,-17}, -{62,71,-16}, -{62,71,-15}, -{62,71,-14}, -{62,71,-13}, -{62,71,-12}, -{62,71,-11}, -{62,71,-10}, -{62,71,-9}, -{62,71,-8}, -{62,72,-58}, -{62,72,-57}, -{62,72,-56}, -{62,72,-55}, -{62,72,-54}, -{62,72,-53}, -{62,72,-52}, -{62,72,-51}, -{62,72,-50}, -{62,72,-49}, -{62,72,-48}, -{62,72,-47}, -{62,72,-46}, -{62,72,-45}, -{62,72,-44}, -{62,72,-43}, -{62,72,-42}, -{62,72,-41}, -{62,72,-40}, -{62,72,-39}, -{62,72,-38}, -{62,72,-37}, -{62,72,-36}, -{62,72,-35}, -{62,72,-34}, -{62,72,-33}, -{62,72,-32}, -{62,72,-31}, -{62,72,-30}, -{62,72,-29}, -{62,72,-28}, -{62,72,-27}, -{62,72,-26}, -{62,72,-25}, -{62,72,-24}, -{62,72,-23}, -{62,72,-22}, -{62,72,-21}, -{62,72,-20}, -{62,72,-19}, -{62,72,-18}, -{62,72,-17}, -{62,72,-16}, -{62,72,-15}, -{62,72,-14}, -{62,72,-13}, -{62,72,-12}, -{62,72,-11}, -{62,73,-58}, -{62,73,-57}, -{62,73,-56}, -{62,73,-55}, -{62,73,-54}, -{62,73,-53}, -{62,73,-52}, -{62,73,-51}, -{62,73,-50}, -{62,73,-49}, -{62,73,-48}, -{62,73,-47}, -{62,73,-46}, -{62,73,-45}, -{62,73,-44}, -{62,73,-43}, -{62,73,-42}, -{62,73,-41}, -{62,73,-40}, -{62,73,-39}, -{62,73,-38}, -{62,73,-37}, -{62,73,-36}, -{62,73,-35}, -{62,73,-34}, -{62,73,-33}, -{62,73,-32}, -{62,73,-31}, -{62,73,-30}, -{62,73,-29}, -{62,73,-28}, -{62,73,-27}, -{62,73,-26}, -{62,73,-25}, -{62,73,-24}, -{62,73,-23}, -{62,73,-22}, -{62,73,-21}, -{62,73,-20}, -{62,73,-19}, -{62,73,-18}, -{62,73,-17}, -{62,73,-16}, -{62,73,-15}, -{62,73,-14}, -{62,74,-58}, -{62,74,-57}, -{62,74,-56}, -{62,74,-55}, -{62,74,-54}, -{62,74,-53}, -{62,74,-52}, -{62,74,-51}, -{62,74,-50}, -{62,74,-49}, -{62,74,-48}, -{62,74,-47}, -{62,74,-46}, -{62,74,-45}, -{62,74,-44}, -{62,74,-43}, -{62,74,-42}, -{62,74,-41}, -{62,74,-40}, -{62,74,-39}, -{62,74,-38}, -{62,74,-37}, -{62,74,-36}, -{62,74,-35}, -{62,74,-34}, -{62,74,-33}, -{62,74,-32}, -{62,74,-31}, -{62,74,-30}, -{62,74,-29}, -{62,74,-28}, -{62,74,-27}, -{62,74,-26}, -{62,74,-25}, -{62,74,-24}, -{62,74,-23}, -{62,74,-22}, -{62,74,-21}, -{62,74,-20}, -{62,74,-19}, -{62,74,-18}, -{62,74,-17}, -{62,74,-16}, -{62,75,-58}, -{62,75,-57}, -{62,75,-56}, -{62,75,-55}, -{62,75,-54}, -{62,75,-53}, -{62,75,-52}, -{62,75,-51}, -{62,75,-50}, -{62,75,-49}, -{62,75,-48}, -{62,75,-47}, -{62,75,-46}, -{62,75,-45}, -{62,75,-44}, -{62,75,-43}, -{62,75,-42}, -{62,75,-41}, -{62,75,-40}, -{62,75,-39}, -{62,75,-38}, -{62,75,-37}, -{62,75,-36}, -{62,75,-35}, -{62,75,-34}, -{62,75,-33}, -{62,75,-32}, -{62,75,-31}, -{62,75,-30}, -{62,75,-29}, -{62,75,-28}, -{62,75,-27}, -{62,75,-26}, -{62,75,-25}, -{62,75,-24}, -{62,75,-23}, -{62,75,-22}, -{62,75,-21}, -{62,75,-20}, -{62,75,-19}, -{62,76,-58}, -{62,76,-57}, -{62,76,-56}, -{62,76,-55}, -{62,76,-54}, -{62,76,-53}, -{62,76,-52}, -{62,76,-51}, -{62,76,-50}, -{62,76,-49}, -{62,76,-48}, -{62,76,-47}, -{62,76,-46}, -{62,76,-45}, -{62,76,-44}, -{62,76,-43}, -{62,76,-42}, -{62,76,-41}, -{62,76,-40}, -{62,76,-39}, -{62,76,-38}, -{62,76,-37}, -{62,76,-36}, -{62,76,-35}, -{62,76,-34}, -{62,76,-33}, -{62,76,-32}, -{62,76,-31}, -{62,76,-30}, -{62,76,-29}, -{62,76,-28}, -{62,76,-27}, -{62,76,-26}, -{62,76,-25}, -{62,76,-24}, -{62,76,-23}, -{62,76,-22}, -{62,77,-58}, -{62,77,-57}, -{62,77,-56}, -{62,77,-55}, -{62,77,-54}, -{62,77,-53}, -{62,77,-52}, -{62,77,-51}, -{62,77,-50}, -{62,77,-49}, -{62,77,-48}, -{62,77,-47}, -{62,77,-46}, -{62,77,-45}, -{62,77,-44}, -{62,77,-43}, -{62,77,-42}, -{62,77,-41}, -{62,77,-40}, -{62,77,-39}, -{62,77,-38}, -{62,77,-37}, -{62,77,-36}, -{62,77,-35}, -{62,77,-34}, -{62,77,-33}, -{62,77,-32}, -{62,77,-31}, -{62,77,-30}, -{62,77,-29}, -{62,77,-28}, -{62,77,-27}, -{62,77,-26}, -{62,77,-25}, -{62,77,-24}, -{62,78,-58}, -{62,78,-57}, -{62,78,-56}, -{62,78,-55}, -{62,78,-54}, -{62,78,-53}, -{62,78,-52}, -{62,78,-51}, -{62,78,-50}, -{62,78,-49}, -{62,78,-48}, -{62,78,-47}, -{62,78,-46}, -{62,78,-45}, -{62,78,-44}, -{62,78,-43}, -{62,78,-42}, -{62,78,-41}, -{62,78,-40}, -{62,78,-39}, -{62,78,-38}, -{62,78,-37}, -{62,78,-36}, -{62,78,-35}, -{62,78,-34}, -{62,78,-33}, -{62,78,-32}, -{62,78,-31}, -{62,78,-30}, -{62,78,-29}, -{62,78,-28}, -{62,78,-27}, -{62,79,-58}, -{62,79,-57}, -{62,79,-56}, -{62,79,-55}, -{62,79,-54}, -{62,79,-53}, -{62,79,-52}, -{62,79,-51}, -{62,79,-50}, -{62,79,-49}, -{62,79,-48}, -{62,79,-47}, -{62,79,-46}, -{62,79,-45}, -{62,79,-44}, -{62,79,-43}, -{62,79,-42}, -{62,79,-41}, -{62,79,-40}, -{62,79,-39}, -{62,79,-38}, -{62,79,-37}, -{62,79,-36}, -{62,79,-35}, -{62,79,-34}, -{62,79,-33}, -{62,79,-32}, -{62,79,-31}, -{62,79,-30}, -{62,79,-29}, -{62,80,-58}, -{62,80,-57}, -{62,80,-56}, -{62,80,-55}, -{62,80,-54}, -{62,80,-53}, -{62,80,-52}, -{62,80,-51}, -{62,80,-50}, -{62,80,-49}, -{62,80,-48}, -{62,80,-47}, -{62,80,-46}, -{62,80,-45}, -{62,80,-44}, -{62,80,-43}, -{62,80,-42}, -{62,80,-41}, -{62,80,-40}, -{62,80,-39}, -{62,80,-38}, -{62,80,-37}, -{62,80,-36}, -{62,80,-35}, -{62,80,-34}, -{62,80,-33}, -{62,80,-32}, -{62,80,-31}, -{62,81,-58}, -{62,81,-57}, -{62,81,-56}, -{62,81,-55}, -{62,81,-54}, -{62,81,-53}, -{62,81,-52}, -{62,81,-51}, -{62,81,-50}, -{62,81,-49}, -{62,81,-48}, -{62,81,-47}, -{62,81,-46}, -{62,81,-45}, -{62,81,-44}, -{62,81,-43}, -{62,81,-42}, -{62,81,-41}, -{62,81,-40}, -{62,81,-39}, -{62,81,-38}, -{62,81,-37}, -{62,81,-36}, -{62,81,-35}, -{62,81,-34}, -{62,82,-58}, -{62,82,-57}, -{62,82,-56}, -{62,82,-55}, -{62,82,-54}, -{62,82,-53}, -{62,82,-52}, -{62,82,-51}, -{62,82,-50}, -{62,82,-49}, -{62,82,-48}, -{62,82,-47}, -{62,82,-46}, -{62,82,-45}, -{62,82,-44}, -{62,82,-43}, -{62,82,-42}, -{62,82,-41}, -{62,82,-40}, -{62,82,-39}, -{62,82,-38}, -{62,82,-37}, -{62,82,-36}, -{62,83,-58}, -{62,83,-57}, -{62,83,-56}, -{62,83,-55}, -{62,83,-54}, -{62,83,-53}, -{62,83,-52}, -{62,83,-51}, -{62,83,-50}, -{62,83,-49}, -{62,83,-48}, -{62,83,-47}, -{62,83,-46}, -{62,83,-45}, -{62,83,-44}, -{62,83,-43}, -{62,83,-42}, -{62,83,-41}, -{62,83,-40}, -{62,83,-39}, -{62,83,-38}, -{62,84,-58}, -{62,84,-57}, -{62,84,-56}, -{62,84,-55}, -{62,84,-54}, -{62,84,-53}, -{62,84,-52}, -{62,84,-51}, -{62,84,-50}, -{62,84,-49}, -{62,84,-48}, -{62,84,-47}, -{62,84,-46}, -{62,84,-45}, -{62,84,-44}, -{62,84,-43}, -{62,84,-42}, -{62,84,-41}, -{62,84,-40}, -{62,85,-58}, -{62,85,-57}, -{62,85,-56}, -{62,85,-55}, -{62,85,-54}, -{62,85,-53}, -{62,85,-52}, -{62,85,-51}, -{62,85,-50}, -{62,85,-49}, -{62,85,-48}, -{62,85,-47}, -{62,85,-46}, -{62,85,-45}, -{62,85,-44}, -{62,85,-43}, -{62,85,-42}, -{62,86,-58}, -{62,86,-57}, -{62,86,-56}, -{62,86,-55}, -{62,86,-54}, -{62,86,-53}, -{62,86,-52}, -{62,86,-51}, -{62,86,-50}, -{62,86,-49}, -{62,86,-48}, -{62,86,-47}, -{62,86,-46}, -{62,86,-45}, -{62,86,-44}, -{62,87,-58}, -{62,87,-57}, -{62,87,-56}, -{62,87,-55}, -{62,87,-54}, -{62,87,-53}, -{62,87,-52}, -{62,87,-51}, -{62,87,-50}, -{62,87,-49}, -{62,87,-48}, -{62,87,-47}, -{62,87,-46}, -{62,88,-58}, -{62,88,-57}, -{62,88,-56}, -{62,88,-55}, -{62,88,-54}, -{62,88,-53}, -{62,88,-52}, -{62,88,-51}, -{62,88,-50}, -{62,88,-49}, -{62,88,-48}, -{62,89,-58}, -{62,89,-57}, -{62,89,-56}, -{62,89,-55}, -{62,89,-54}, -{62,89,-53}, -{62,89,-52}, -{62,89,-51}, -{62,89,-50}, -{62,90,-58}, -{62,90,-57}, -{62,90,-56}, -{62,90,-55}, -{62,90,-54}, -{62,90,-53}, -{62,90,-52}, -{62,91,-58}, -{62,91,-57}, -{62,91,-56}, -{62,91,-55}, -{62,91,-54}, -{62,92,-58}, -{62,92,-57}, -{62,92,-56}, -{62,93,-58}, -{63,-65,60}, -{63,-65,61}, -{63,-65,62}, -{63,-65,63}, -{63,-64,55}, -{63,-64,56}, -{63,-64,57}, -{63,-64,58}, -{63,-64,59}, -{63,-64,60}, -{63,-64,61}, -{63,-64,62}, -{63,-64,63}, -{63,-63,51}, -{63,-63,52}, -{63,-63,53}, -{63,-63,54}, -{63,-63,55}, -{63,-63,56}, -{63,-63,57}, -{63,-63,58}, -{63,-63,59}, -{63,-63,60}, -{63,-63,61}, -{63,-63,62}, -{63,-63,63}, -{63,-62,48}, -{63,-62,49}, -{63,-62,50}, -{63,-62,51}, -{63,-62,52}, -{63,-62,53}, -{63,-62,54}, -{63,-62,55}, -{63,-62,56}, -{63,-62,57}, -{63,-62,58}, -{63,-62,59}, -{63,-62,60}, -{63,-62,61}, -{63,-62,62}, -{63,-62,63}, -{63,-61,44}, -{63,-61,45}, -{63,-61,46}, -{63,-61,47}, -{63,-61,48}, -{63,-61,49}, -{63,-61,50}, -{63,-61,51}, -{63,-61,52}, -{63,-61,53}, -{63,-61,54}, -{63,-61,55}, -{63,-61,56}, -{63,-61,57}, -{63,-61,58}, -{63,-61,59}, -{63,-61,60}, -{63,-61,61}, -{63,-61,62}, -{63,-61,63}, -{63,-60,41}, -{63,-60,42}, -{63,-60,43}, -{63,-60,44}, -{63,-60,45}, -{63,-60,46}, -{63,-60,47}, -{63,-60,48}, -{63,-60,49}, -{63,-60,50}, -{63,-60,51}, -{63,-60,52}, -{63,-60,53}, -{63,-60,54}, -{63,-60,55}, -{63,-60,56}, -{63,-60,57}, -{63,-60,58}, -{63,-60,59}, -{63,-60,60}, -{63,-60,61}, -{63,-60,62}, -{63,-60,63}, -{63,-59,38}, -{63,-59,39}, -{63,-59,40}, -{63,-59,41}, -{63,-59,42}, -{63,-59,43}, -{63,-59,44}, -{63,-59,45}, -{63,-59,46}, -{63,-59,47}, -{63,-59,48}, -{63,-59,49}, -{63,-59,50}, -{63,-59,51}, -{63,-59,52}, -{63,-59,53}, -{63,-59,54}, -{63,-59,55}, -{63,-59,56}, -{63,-59,57}, -{63,-59,58}, -{63,-59,59}, -{63,-59,60}, -{63,-59,61}, -{63,-59,62}, -{63,-59,63}, -{63,-58,35}, -{63,-58,36}, -{63,-58,37}, -{63,-58,38}, -{63,-58,39}, -{63,-58,40}, -{63,-58,41}, -{63,-58,42}, -{63,-58,43}, -{63,-58,44}, -{63,-58,45}, -{63,-58,46}, -{63,-58,47}, -{63,-58,48}, -{63,-58,49}, -{63,-58,50}, -{63,-58,51}, -{63,-58,52}, -{63,-58,53}, -{63,-58,54}, -{63,-58,55}, -{63,-58,56}, -{63,-58,57}, -{63,-58,58}, -{63,-58,59}, -{63,-58,60}, -{63,-58,61}, -{63,-58,62}, -{63,-58,63}, -{63,-57,32}, -{63,-57,33}, -{63,-57,34}, -{63,-57,35}, -{63,-57,36}, -{63,-57,37}, -{63,-57,38}, -{63,-57,39}, -{63,-57,40}, -{63,-57,41}, -{63,-57,42}, -{63,-57,43}, -{63,-57,44}, -{63,-57,45}, -{63,-57,46}, -{63,-57,47}, -{63,-57,48}, -{63,-57,49}, -{63,-57,50}, -{63,-57,51}, -{63,-57,52}, -{63,-57,53}, -{63,-57,54}, -{63,-57,55}, -{63,-57,56}, -{63,-57,57}, -{63,-57,58}, -{63,-57,59}, -{63,-57,60}, -{63,-57,61}, -{63,-57,62}, -{63,-57,63}, -{63,-56,30}, -{63,-56,31}, -{63,-56,32}, -{63,-56,33}, -{63,-56,34}, -{63,-56,35}, -{63,-56,36}, -{63,-56,37}, -{63,-56,38}, -{63,-56,39}, -{63,-56,40}, -{63,-56,41}, -{63,-56,42}, -{63,-56,43}, -{63,-56,44}, -{63,-56,45}, -{63,-56,46}, -{63,-56,47}, -{63,-56,48}, -{63,-56,49}, -{63,-56,50}, -{63,-56,51}, -{63,-56,52}, -{63,-56,53}, -{63,-56,54}, -{63,-56,55}, -{63,-56,56}, -{63,-56,57}, -{63,-56,58}, -{63,-56,59}, -{63,-56,60}, -{63,-56,61}, -{63,-56,62}, -{63,-56,63}, -{63,-55,27}, -{63,-55,28}, -{63,-55,29}, -{63,-55,30}, -{63,-55,31}, -{63,-55,32}, -{63,-55,33}, -{63,-55,34}, -{63,-55,35}, -{63,-55,36}, -{63,-55,37}, -{63,-55,38}, -{63,-55,39}, -{63,-55,40}, -{63,-55,41}, -{63,-55,42}, -{63,-55,43}, -{63,-55,44}, -{63,-55,45}, -{63,-55,46}, -{63,-55,47}, -{63,-55,48}, -{63,-55,49}, -{63,-55,50}, -{63,-55,51}, -{63,-55,52}, -{63,-55,53}, -{63,-55,54}, -{63,-55,55}, -{63,-55,56}, -{63,-55,57}, -{63,-55,58}, -{63,-55,59}, -{63,-55,60}, -{63,-55,61}, -{63,-55,62}, -{63,-55,63}, -{63,-54,25}, -{63,-54,26}, -{63,-54,27}, -{63,-54,28}, -{63,-54,29}, -{63,-54,30}, -{63,-54,31}, -{63,-54,32}, -{63,-54,33}, -{63,-54,34}, -{63,-54,35}, -{63,-54,36}, -{63,-54,37}, -{63,-54,38}, -{63,-54,39}, -{63,-54,40}, -{63,-54,41}, -{63,-54,42}, -{63,-54,43}, -{63,-54,44}, -{63,-54,45}, -{63,-54,46}, -{63,-54,47}, -{63,-54,48}, -{63,-54,49}, -{63,-54,50}, -{63,-54,51}, -{63,-54,52}, -{63,-54,53}, -{63,-54,54}, -{63,-54,55}, -{63,-54,56}, -{63,-54,57}, -{63,-54,58}, -{63,-54,59}, -{63,-54,60}, -{63,-54,61}, -{63,-54,62}, -{63,-54,63}, -{63,-54,64}, -{63,-53,22}, -{63,-53,23}, -{63,-53,24}, -{63,-53,25}, -{63,-53,26}, -{63,-53,27}, -{63,-53,28}, -{63,-53,29}, -{63,-53,30}, -{63,-53,31}, -{63,-53,32}, -{63,-53,33}, -{63,-53,34}, -{63,-53,35}, -{63,-53,36}, -{63,-53,37}, -{63,-53,38}, -{63,-53,39}, -{63,-53,40}, -{63,-53,41}, -{63,-53,42}, -{63,-53,43}, -{63,-53,44}, -{63,-53,45}, -{63,-53,46}, -{63,-53,47}, -{63,-53,48}, -{63,-53,49}, -{63,-53,50}, -{63,-53,51}, -{63,-53,52}, -{63,-53,53}, -{63,-53,54}, -{63,-53,55}, -{63,-53,56}, -{63,-53,57}, -{63,-53,58}, -{63,-53,59}, -{63,-53,60}, -{63,-53,61}, -{63,-53,62}, -{63,-53,63}, -{63,-53,64}, -{63,-52,20}, -{63,-52,21}, -{63,-52,22}, -{63,-52,23}, -{63,-52,24}, -{63,-52,25}, -{63,-52,26}, -{63,-52,27}, -{63,-52,28}, -{63,-52,29}, -{63,-52,30}, -{63,-52,31}, -{63,-52,32}, -{63,-52,33}, -{63,-52,34}, -{63,-52,35}, -{63,-52,36}, -{63,-52,37}, -{63,-52,38}, -{63,-52,39}, -{63,-52,40}, -{63,-52,41}, -{63,-52,42}, -{63,-52,43}, -{63,-52,44}, -{63,-52,45}, -{63,-52,46}, -{63,-52,47}, -{63,-52,48}, -{63,-52,49}, -{63,-52,50}, -{63,-52,51}, -{63,-52,52}, -{63,-52,53}, -{63,-52,54}, -{63,-52,55}, -{63,-52,56}, -{63,-52,57}, -{63,-52,58}, -{63,-52,59}, -{63,-52,60}, -{63,-52,61}, -{63,-52,62}, -{63,-52,63}, -{63,-52,64}, -{63,-51,18}, -{63,-51,19}, -{63,-51,20}, -{63,-51,21}, -{63,-51,22}, -{63,-51,23}, -{63,-51,24}, -{63,-51,25}, -{63,-51,26}, -{63,-51,27}, -{63,-51,28}, -{63,-51,29}, -{63,-51,30}, -{63,-51,31}, -{63,-51,32}, -{63,-51,33}, -{63,-51,34}, -{63,-51,35}, -{63,-51,36}, -{63,-51,37}, -{63,-51,38}, -{63,-51,39}, -{63,-51,40}, -{63,-51,41}, -{63,-51,42}, -{63,-51,43}, -{63,-51,44}, -{63,-51,45}, -{63,-51,46}, -{63,-51,47}, -{63,-51,48}, -{63,-51,49}, -{63,-51,50}, -{63,-51,51}, -{63,-51,52}, -{63,-51,53}, -{63,-51,54}, -{63,-51,55}, -{63,-51,56}, -{63,-51,57}, -{63,-51,58}, -{63,-51,59}, -{63,-51,60}, -{63,-51,61}, -{63,-51,62}, -{63,-51,63}, -{63,-51,64}, -{63,-50,16}, -{63,-50,17}, -{63,-50,18}, -{63,-50,19}, -{63,-50,20}, -{63,-50,21}, -{63,-50,22}, -{63,-50,23}, -{63,-50,24}, -{63,-50,25}, -{63,-50,26}, -{63,-50,27}, -{63,-50,28}, -{63,-50,29}, -{63,-50,30}, -{63,-50,31}, -{63,-50,32}, -{63,-50,33}, -{63,-50,34}, -{63,-50,35}, -{63,-50,36}, -{63,-50,37}, -{63,-50,38}, -{63,-50,39}, -{63,-50,40}, -{63,-50,41}, -{63,-50,42}, -{63,-50,43}, -{63,-50,44}, -{63,-50,45}, -{63,-50,46}, -{63,-50,47}, -{63,-50,48}, -{63,-50,49}, -{63,-50,50}, -{63,-50,51}, -{63,-50,52}, -{63,-50,53}, -{63,-50,54}, -{63,-50,55}, -{63,-50,56}, -{63,-50,57}, -{63,-50,58}, -{63,-50,59}, -{63,-50,60}, -{63,-50,61}, -{63,-50,62}, -{63,-50,63}, -{63,-50,64}, -{63,-49,14}, -{63,-49,15}, -{63,-49,16}, -{63,-49,17}, -{63,-49,18}, -{63,-49,19}, -{63,-49,20}, -{63,-49,21}, -{63,-49,22}, -{63,-49,23}, -{63,-49,24}, -{63,-49,25}, -{63,-49,26}, -{63,-49,27}, -{63,-49,28}, -{63,-49,29}, -{63,-49,30}, -{63,-49,31}, -{63,-49,32}, -{63,-49,33}, -{63,-49,34}, -{63,-49,35}, -{63,-49,36}, -{63,-49,37}, -{63,-49,38}, -{63,-49,39}, -{63,-49,40}, -{63,-49,41}, -{63,-49,42}, -{63,-49,43}, -{63,-49,44}, -{63,-49,45}, -{63,-49,46}, -{63,-49,47}, -{63,-49,48}, -{63,-49,49}, -{63,-49,50}, -{63,-49,51}, -{63,-49,52}, -{63,-49,53}, -{63,-49,54}, -{63,-49,55}, -{63,-49,56}, -{63,-49,57}, -{63,-49,58}, -{63,-49,59}, -{63,-49,60}, -{63,-49,61}, -{63,-49,62}, -{63,-49,63}, -{63,-49,64}, -{63,-48,12}, -{63,-48,13}, -{63,-48,14}, -{63,-48,15}, -{63,-48,16}, -{63,-48,17}, -{63,-48,18}, -{63,-48,19}, -{63,-48,20}, -{63,-48,21}, -{63,-48,22}, -{63,-48,23}, -{63,-48,24}, -{63,-48,25}, -{63,-48,26}, -{63,-48,27}, -{63,-48,28}, -{63,-48,29}, -{63,-48,30}, -{63,-48,31}, -{63,-48,32}, -{63,-48,33}, -{63,-48,34}, -{63,-48,35}, -{63,-48,36}, -{63,-48,37}, -{63,-48,38}, -{63,-48,39}, -{63,-48,40}, -{63,-48,41}, -{63,-48,42}, -{63,-48,43}, -{63,-48,44}, -{63,-48,45}, -{63,-48,46}, -{63,-48,47}, -{63,-48,48}, -{63,-48,49}, -{63,-48,50}, -{63,-48,51}, -{63,-48,52}, -{63,-48,53}, -{63,-48,54}, -{63,-48,55}, -{63,-48,56}, -{63,-48,57}, -{63,-48,58}, -{63,-48,59}, -{63,-48,60}, -{63,-48,61}, -{63,-48,62}, -{63,-48,63}, -{63,-48,64}, -{63,-47,10}, -{63,-47,11}, -{63,-47,12}, -{63,-47,13}, -{63,-47,14}, -{63,-47,15}, -{63,-47,16}, -{63,-47,17}, -{63,-47,18}, -{63,-47,19}, -{63,-47,20}, -{63,-47,21}, -{63,-47,22}, -{63,-47,23}, -{63,-47,24}, -{63,-47,25}, -{63,-47,26}, -{63,-47,27}, -{63,-47,28}, -{63,-47,29}, -{63,-47,30}, -{63,-47,31}, -{63,-47,32}, -{63,-47,33}, -{63,-47,34}, -{63,-47,35}, -{63,-47,36}, -{63,-47,37}, -{63,-47,38}, -{63,-47,39}, -{63,-47,40}, -{63,-47,41}, -{63,-47,42}, -{63,-47,43}, -{63,-47,44}, -{63,-47,45}, -{63,-47,46}, -{63,-47,47}, -{63,-47,48}, -{63,-47,49}, -{63,-47,50}, -{63,-47,51}, -{63,-47,52}, -{63,-47,53}, -{63,-47,54}, -{63,-47,55}, -{63,-47,56}, -{63,-47,57}, -{63,-47,58}, -{63,-47,59}, -{63,-47,60}, -{63,-47,61}, -{63,-47,62}, -{63,-47,63}, -{63,-47,64}, -{63,-46,8}, -{63,-46,9}, -{63,-46,10}, -{63,-46,11}, -{63,-46,12}, -{63,-46,13}, -{63,-46,14}, -{63,-46,15}, -{63,-46,16}, -{63,-46,17}, -{63,-46,18}, -{63,-46,19}, -{63,-46,20}, -{63,-46,21}, -{63,-46,22}, -{63,-46,23}, -{63,-46,24}, -{63,-46,25}, -{63,-46,26}, -{63,-46,27}, -{63,-46,28}, -{63,-46,29}, -{63,-46,30}, -{63,-46,31}, -{63,-46,32}, -{63,-46,33}, -{63,-46,34}, -{63,-46,35}, -{63,-46,36}, -{63,-46,37}, -{63,-46,38}, -{63,-46,39}, -{63,-46,40}, -{63,-46,41}, -{63,-46,42}, -{63,-46,43}, -{63,-46,44}, -{63,-46,45}, -{63,-46,46}, -{63,-46,47}, -{63,-46,48}, -{63,-46,49}, -{63,-46,50}, -{63,-46,51}, -{63,-46,52}, -{63,-46,53}, -{63,-46,54}, -{63,-46,55}, -{63,-46,56}, -{63,-46,57}, -{63,-46,58}, -{63,-46,59}, -{63,-46,60}, -{63,-46,61}, -{63,-46,62}, -{63,-46,63}, -{63,-46,64}, -{63,-45,6}, -{63,-45,7}, -{63,-45,8}, -{63,-45,9}, -{63,-45,10}, -{63,-45,11}, -{63,-45,12}, -{63,-45,13}, -{63,-45,14}, -{63,-45,15}, -{63,-45,16}, -{63,-45,17}, -{63,-45,18}, -{63,-45,19}, -{63,-45,20}, -{63,-45,21}, -{63,-45,22}, -{63,-45,23}, -{63,-45,24}, -{63,-45,25}, -{63,-45,26}, -{63,-45,27}, -{63,-45,28}, -{63,-45,29}, -{63,-45,30}, -{63,-45,31}, -{63,-45,32}, -{63,-45,33}, -{63,-45,34}, -{63,-45,35}, -{63,-45,36}, -{63,-45,37}, -{63,-45,38}, -{63,-45,39}, -{63,-45,40}, -{63,-45,41}, -{63,-45,42}, -{63,-45,43}, -{63,-45,44}, -{63,-45,45}, -{63,-45,46}, -{63,-45,47}, -{63,-45,48}, -{63,-45,49}, -{63,-45,50}, -{63,-45,51}, -{63,-45,52}, -{63,-45,53}, -{63,-45,54}, -{63,-45,55}, -{63,-45,56}, -{63,-45,57}, -{63,-45,58}, -{63,-45,59}, -{63,-45,60}, -{63,-45,61}, -{63,-45,62}, -{63,-45,63}, -{63,-45,64}, -{63,-44,4}, -{63,-44,5}, -{63,-44,6}, -{63,-44,7}, -{63,-44,8}, -{63,-44,9}, -{63,-44,10}, -{63,-44,11}, -{63,-44,12}, -{63,-44,13}, -{63,-44,14}, -{63,-44,15}, -{63,-44,16}, -{63,-44,17}, -{63,-44,18}, -{63,-44,19}, -{63,-44,20}, -{63,-44,21}, -{63,-44,22}, -{63,-44,23}, -{63,-44,24}, -{63,-44,25}, -{63,-44,26}, -{63,-44,27}, -{63,-44,28}, -{63,-44,29}, -{63,-44,30}, -{63,-44,31}, -{63,-44,32}, -{63,-44,33}, -{63,-44,34}, -{63,-44,35}, -{63,-44,36}, -{63,-44,37}, -{63,-44,38}, -{63,-44,39}, -{63,-44,40}, -{63,-44,41}, -{63,-44,42}, -{63,-44,43}, -{63,-44,44}, -{63,-44,45}, -{63,-44,46}, -{63,-44,47}, -{63,-44,48}, -{63,-44,49}, -{63,-44,50}, -{63,-44,51}, -{63,-44,52}, -{63,-44,53}, -{63,-44,54}, -{63,-44,55}, -{63,-44,56}, -{63,-44,57}, -{63,-44,58}, -{63,-44,59}, -{63,-44,60}, -{63,-44,61}, -{63,-44,62}, -{63,-44,63}, -{63,-44,64}, -{63,-43,2}, -{63,-43,3}, -{63,-43,4}, -{63,-43,5}, -{63,-43,6}, -{63,-43,7}, -{63,-43,8}, -{63,-43,9}, -{63,-43,10}, -{63,-43,11}, -{63,-43,12}, -{63,-43,13}, -{63,-43,14}, -{63,-43,15}, -{63,-43,16}, -{63,-43,17}, -{63,-43,18}, -{63,-43,19}, -{63,-43,20}, -{63,-43,21}, -{63,-43,22}, -{63,-43,23}, -{63,-43,24}, -{63,-43,25}, -{63,-43,26}, -{63,-43,27}, -{63,-43,28}, -{63,-43,29}, -{63,-43,30}, -{63,-43,31}, -{63,-43,32}, -{63,-43,33}, -{63,-43,34}, -{63,-43,35}, -{63,-43,36}, -{63,-43,37}, -{63,-43,38}, -{63,-43,39}, -{63,-43,40}, -{63,-43,41}, -{63,-43,42}, -{63,-43,43}, -{63,-43,44}, -{63,-43,45}, -{63,-43,46}, -{63,-43,47}, -{63,-43,48}, -{63,-43,49}, -{63,-43,50}, -{63,-43,51}, -{63,-43,52}, -{63,-43,53}, -{63,-43,54}, -{63,-43,55}, -{63,-43,56}, -{63,-43,57}, -{63,-43,58}, -{63,-43,59}, -{63,-43,60}, -{63,-43,61}, -{63,-43,62}, -{63,-43,63}, -{63,-43,64}, -{63,-42,1}, -{63,-42,2}, -{63,-42,3}, -{63,-42,4}, -{63,-42,5}, -{63,-42,6}, -{63,-42,7}, -{63,-42,8}, -{63,-42,9}, -{63,-42,10}, -{63,-42,11}, -{63,-42,12}, -{63,-42,13}, -{63,-42,14}, -{63,-42,15}, -{63,-42,16}, -{63,-42,17}, -{63,-42,18}, -{63,-42,19}, -{63,-42,20}, -{63,-42,21}, -{63,-42,22}, -{63,-42,23}, -{63,-42,24}, -{63,-42,25}, -{63,-42,26}, -{63,-42,27}, -{63,-42,28}, -{63,-42,29}, -{63,-42,30}, -{63,-42,31}, -{63,-42,32}, -{63,-42,33}, -{63,-42,34}, -{63,-42,35}, -{63,-42,36}, -{63,-42,37}, -{63,-42,38}, -{63,-42,39}, -{63,-42,40}, -{63,-42,41}, -{63,-42,42}, -{63,-42,43}, -{63,-42,44}, -{63,-42,45}, -{63,-42,46}, -{63,-42,47}, -{63,-42,48}, -{63,-42,49}, -{63,-42,50}, -{63,-42,51}, -{63,-42,52}, -{63,-42,53}, -{63,-42,54}, -{63,-42,55}, -{63,-42,56}, -{63,-42,57}, -{63,-42,58}, -{63,-42,59}, -{63,-42,60}, -{63,-42,61}, -{63,-42,62}, -{63,-42,63}, -{63,-42,64}, -{63,-41,-1}, -{63,-41,0}, -{63,-41,1}, -{63,-41,2}, -{63,-41,3}, -{63,-41,4}, -{63,-41,5}, -{63,-41,6}, -{63,-41,7}, -{63,-41,8}, -{63,-41,9}, -{63,-41,10}, -{63,-41,11}, -{63,-41,12}, -{63,-41,13}, -{63,-41,14}, -{63,-41,15}, -{63,-41,16}, -{63,-41,17}, -{63,-41,18}, -{63,-41,19}, -{63,-41,20}, -{63,-41,21}, -{63,-41,22}, -{63,-41,23}, -{63,-41,24}, -{63,-41,25}, -{63,-41,26}, -{63,-41,27}, -{63,-41,28}, -{63,-41,29}, -{63,-41,30}, -{63,-41,31}, -{63,-41,32}, -{63,-41,33}, -{63,-41,34}, -{63,-41,35}, -{63,-41,36}, -{63,-41,37}, -{63,-41,38}, -{63,-41,39}, -{63,-41,40}, -{63,-41,41}, -{63,-41,42}, -{63,-41,43}, -{63,-41,44}, -{63,-41,45}, -{63,-41,46}, -{63,-41,47}, -{63,-41,48}, -{63,-41,49}, -{63,-41,50}, -{63,-41,51}, -{63,-41,52}, -{63,-41,53}, -{63,-41,54}, -{63,-41,55}, -{63,-41,56}, -{63,-41,57}, -{63,-41,58}, -{63,-41,59}, -{63,-41,60}, -{63,-41,61}, -{63,-41,62}, -{63,-41,63}, -{63,-41,64}, -{63,-40,-3}, -{63,-40,-2}, -{63,-40,-1}, -{63,-40,0}, -{63,-40,1}, -{63,-40,2}, -{63,-40,3}, -{63,-40,4}, -{63,-40,5}, -{63,-40,6}, -{63,-40,7}, -{63,-40,8}, -{63,-40,9}, -{63,-40,10}, -{63,-40,11}, -{63,-40,12}, -{63,-40,13}, -{63,-40,14}, -{63,-40,15}, -{63,-40,16}, -{63,-40,17}, -{63,-40,18}, -{63,-40,19}, -{63,-40,20}, -{63,-40,21}, -{63,-40,22}, -{63,-40,23}, -{63,-40,24}, -{63,-40,25}, -{63,-40,26}, -{63,-40,27}, -{63,-40,28}, -{63,-40,29}, -{63,-40,30}, -{63,-40,31}, -{63,-40,32}, -{63,-40,33}, -{63,-40,34}, -{63,-40,35}, -{63,-40,36}, -{63,-40,37}, -{63,-40,38}, -{63,-40,39}, -{63,-40,40}, -{63,-40,41}, -{63,-40,42}, -{63,-40,43}, -{63,-40,44}, -{63,-40,45}, -{63,-40,46}, -{63,-40,47}, -{63,-40,48}, -{63,-40,49}, -{63,-40,50}, -{63,-40,51}, -{63,-40,52}, -{63,-40,53}, -{63,-40,54}, -{63,-40,55}, -{63,-40,56}, -{63,-40,57}, -{63,-40,58}, -{63,-40,59}, -{63,-40,60}, -{63,-40,61}, -{63,-40,62}, -{63,-40,63}, -{63,-40,64}, -{63,-39,-4}, -{63,-39,-3}, -{63,-39,-2}, -{63,-39,-1}, -{63,-39,0}, -{63,-39,1}, -{63,-39,2}, -{63,-39,3}, -{63,-39,4}, -{63,-39,5}, -{63,-39,6}, -{63,-39,7}, -{63,-39,8}, -{63,-39,9}, -{63,-39,10}, -{63,-39,11}, -{63,-39,12}, -{63,-39,13}, -{63,-39,14}, -{63,-39,15}, -{63,-39,16}, -{63,-39,17}, -{63,-39,18}, -{63,-39,19}, -{63,-39,20}, -{63,-39,21}, -{63,-39,22}, -{63,-39,23}, -{63,-39,24}, -{63,-39,25}, -{63,-39,26}, -{63,-39,27}, -{63,-39,28}, -{63,-39,29}, -{63,-39,30}, -{63,-39,31}, -{63,-39,32}, -{63,-39,33}, -{63,-39,34}, -{63,-39,35}, -{63,-39,36}, -{63,-39,37}, -{63,-39,38}, -{63,-39,39}, -{63,-39,40}, -{63,-39,41}, -{63,-39,42}, -{63,-39,43}, -{63,-39,44}, -{63,-39,45}, -{63,-39,46}, -{63,-39,47}, -{63,-39,48}, -{63,-39,49}, -{63,-39,50}, -{63,-39,51}, -{63,-39,52}, -{63,-39,53}, -{63,-39,54}, -{63,-39,55}, -{63,-39,56}, -{63,-39,57}, -{63,-39,58}, -{63,-39,59}, -{63,-39,60}, -{63,-39,61}, -{63,-39,62}, -{63,-39,63}, -{63,-39,64}, -{63,-38,-6}, -{63,-38,-5}, -{63,-38,-4}, -{63,-38,-3}, -{63,-38,-2}, -{63,-38,-1}, -{63,-38,0}, -{63,-38,1}, -{63,-38,2}, -{63,-38,3}, -{63,-38,4}, -{63,-38,5}, -{63,-38,6}, -{63,-38,7}, -{63,-38,8}, -{63,-38,9}, -{63,-38,10}, -{63,-38,11}, -{63,-38,12}, -{63,-38,13}, -{63,-38,14}, -{63,-38,15}, -{63,-38,16}, -{63,-38,17}, -{63,-38,18}, -{63,-38,19}, -{63,-38,20}, -{63,-38,21}, -{63,-38,22}, -{63,-38,23}, -{63,-38,24}, -{63,-38,25}, -{63,-38,26}, -{63,-38,27}, -{63,-38,28}, -{63,-38,29}, -{63,-38,30}, -{63,-38,31}, -{63,-38,32}, -{63,-38,33}, -{63,-38,34}, -{63,-38,35}, -{63,-38,36}, -{63,-38,37}, -{63,-38,38}, -{63,-38,39}, -{63,-38,40}, -{63,-38,41}, -{63,-38,42}, -{63,-38,43}, -{63,-38,44}, -{63,-38,45}, -{63,-38,46}, -{63,-38,47}, -{63,-38,48}, -{63,-38,49}, -{63,-38,50}, -{63,-38,51}, -{63,-38,52}, -{63,-38,53}, -{63,-38,54}, -{63,-38,55}, -{63,-38,56}, -{63,-38,57}, -{63,-38,58}, -{63,-38,59}, -{63,-38,60}, -{63,-38,61}, -{63,-38,62}, -{63,-38,63}, -{63,-38,64}, -{63,-37,-8}, -{63,-37,-7}, -{63,-37,-6}, -{63,-37,-5}, -{63,-37,-4}, -{63,-37,-3}, -{63,-37,-2}, -{63,-37,-1}, -{63,-37,0}, -{63,-37,1}, -{63,-37,2}, -{63,-37,3}, -{63,-37,4}, -{63,-37,5}, -{63,-37,6}, -{63,-37,7}, -{63,-37,8}, -{63,-37,9}, -{63,-37,10}, -{63,-37,11}, -{63,-37,12}, -{63,-37,13}, -{63,-37,14}, -{63,-37,15}, -{63,-37,16}, -{63,-37,17}, -{63,-37,18}, -{63,-37,19}, -{63,-37,20}, -{63,-37,21}, -{63,-37,22}, -{63,-37,23}, -{63,-37,24}, -{63,-37,25}, -{63,-37,26}, -{63,-37,27}, -{63,-37,28}, -{63,-37,29}, -{63,-37,30}, -{63,-37,31}, -{63,-37,32}, -{63,-37,33}, -{63,-37,34}, -{63,-37,35}, -{63,-37,36}, -{63,-37,37}, -{63,-37,38}, -{63,-37,39}, -{63,-37,40}, -{63,-37,41}, -{63,-37,42}, -{63,-37,43}, -{63,-37,44}, -{63,-37,45}, -{63,-37,46}, -{63,-37,47}, -{63,-37,48}, -{63,-37,49}, -{63,-37,50}, -{63,-37,51}, -{63,-37,52}, -{63,-37,53}, -{63,-37,54}, -{63,-37,55}, -{63,-37,56}, -{63,-37,57}, -{63,-37,58}, -{63,-37,59}, -{63,-37,60}, -{63,-37,61}, -{63,-37,62}, -{63,-37,63}, -{63,-37,64}, -{63,-36,-9}, -{63,-36,-8}, -{63,-36,-7}, -{63,-36,-6}, -{63,-36,-5}, -{63,-36,-4}, -{63,-36,-3}, -{63,-36,-2}, -{63,-36,-1}, -{63,-36,0}, -{63,-36,1}, -{63,-36,2}, -{63,-36,3}, -{63,-36,4}, -{63,-36,5}, -{63,-36,6}, -{63,-36,7}, -{63,-36,8}, -{63,-36,9}, -{63,-36,10}, -{63,-36,11}, -{63,-36,12}, -{63,-36,13}, -{63,-36,14}, -{63,-36,15}, -{63,-36,16}, -{63,-36,17}, -{63,-36,18}, -{63,-36,19}, -{63,-36,20}, -{63,-36,21}, -{63,-36,22}, -{63,-36,23}, -{63,-36,24}, -{63,-36,25}, -{63,-36,26}, -{63,-36,27}, -{63,-36,28}, -{63,-36,29}, -{63,-36,30}, -{63,-36,31}, -{63,-36,32}, -{63,-36,33}, -{63,-36,34}, -{63,-36,35}, -{63,-36,36}, -{63,-36,37}, -{63,-36,38}, -{63,-36,39}, -{63,-36,40}, -{63,-36,41}, -{63,-36,42}, -{63,-36,43}, -{63,-36,44}, -{63,-36,45}, -{63,-36,46}, -{63,-36,47}, -{63,-36,48}, -{63,-36,49}, -{63,-36,50}, -{63,-36,51}, -{63,-36,52}, -{63,-36,53}, -{63,-36,54}, -{63,-36,55}, -{63,-36,56}, -{63,-36,57}, -{63,-36,58}, -{63,-36,59}, -{63,-36,60}, -{63,-36,61}, -{63,-36,62}, -{63,-36,63}, -{63,-36,64}, -{63,-35,-11}, -{63,-35,-10}, -{63,-35,-9}, -{63,-35,-8}, -{63,-35,-7}, -{63,-35,-6}, -{63,-35,-5}, -{63,-35,-4}, -{63,-35,-3}, -{63,-35,-2}, -{63,-35,-1}, -{63,-35,0}, -{63,-35,1}, -{63,-35,2}, -{63,-35,3}, -{63,-35,4}, -{63,-35,5}, -{63,-35,6}, -{63,-35,7}, -{63,-35,8}, -{63,-35,9}, -{63,-35,10}, -{63,-35,11}, -{63,-35,12}, -{63,-35,13}, -{63,-35,14}, -{63,-35,15}, -{63,-35,16}, -{63,-35,17}, -{63,-35,18}, -{63,-35,19}, -{63,-35,20}, -{63,-35,21}, -{63,-35,22}, -{63,-35,23}, -{63,-35,24}, -{63,-35,25}, -{63,-35,26}, -{63,-35,27}, -{63,-35,28}, -{63,-35,29}, -{63,-35,30}, -{63,-35,31}, -{63,-35,32}, -{63,-35,33}, -{63,-35,34}, -{63,-35,35}, -{63,-35,36}, -{63,-35,37}, -{63,-35,38}, -{63,-35,39}, -{63,-35,40}, -{63,-35,41}, -{63,-35,42}, -{63,-35,43}, -{63,-35,44}, -{63,-35,45}, -{63,-35,46}, -{63,-35,47}, -{63,-35,48}, -{63,-35,49}, -{63,-35,50}, -{63,-35,51}, -{63,-35,52}, -{63,-35,53}, -{63,-35,54}, -{63,-35,55}, -{63,-35,56}, -{63,-35,57}, -{63,-35,58}, -{63,-35,59}, -{63,-35,60}, -{63,-35,61}, -{63,-35,62}, -{63,-35,63}, -{63,-35,64}, -{63,-34,-12}, -{63,-34,-11}, -{63,-34,-10}, -{63,-34,-9}, -{63,-34,-8}, -{63,-34,-7}, -{63,-34,-6}, -{63,-34,-5}, -{63,-34,-4}, -{63,-34,-3}, -{63,-34,-2}, -{63,-34,-1}, -{63,-34,0}, -{63,-34,1}, -{63,-34,2}, -{63,-34,3}, -{63,-34,4}, -{63,-34,5}, -{63,-34,6}, -{63,-34,7}, -{63,-34,8}, -{63,-34,9}, -{63,-34,10}, -{63,-34,11}, -{63,-34,12}, -{63,-34,13}, -{63,-34,14}, -{63,-34,15}, -{63,-34,16}, -{63,-34,17}, -{63,-34,18}, -{63,-34,19}, -{63,-34,20}, -{63,-34,21}, -{63,-34,22}, -{63,-34,23}, -{63,-34,24}, -{63,-34,25}, -{63,-34,26}, -{63,-34,27}, -{63,-34,28}, -{63,-34,29}, -{63,-34,30}, -{63,-34,31}, -{63,-34,32}, -{63,-34,33}, -{63,-34,34}, -{63,-34,35}, -{63,-34,36}, -{63,-34,37}, -{63,-34,38}, -{63,-34,39}, -{63,-34,40}, -{63,-34,41}, -{63,-34,42}, -{63,-34,43}, -{63,-34,44}, -{63,-34,45}, -{63,-34,46}, -{63,-34,47}, -{63,-34,48}, -{63,-34,49}, -{63,-34,50}, -{63,-34,51}, -{63,-34,52}, -{63,-34,53}, -{63,-34,54}, -{63,-34,55}, -{63,-34,56}, -{63,-34,57}, -{63,-34,58}, -{63,-34,59}, -{63,-34,60}, -{63,-34,61}, -{63,-34,62}, -{63,-34,63}, -{63,-34,64}, -{63,-34,65}, -{63,-33,-14}, -{63,-33,-13}, -{63,-33,-12}, -{63,-33,-11}, -{63,-33,-10}, -{63,-33,-9}, -{63,-33,-8}, -{63,-33,-7}, -{63,-33,-6}, -{63,-33,-5}, -{63,-33,-4}, -{63,-33,-3}, -{63,-33,-2}, -{63,-33,-1}, -{63,-33,0}, -{63,-33,1}, -{63,-33,2}, -{63,-33,3}, -{63,-33,4}, -{63,-33,5}, -{63,-33,6}, -{63,-33,7}, -{63,-33,8}, -{63,-33,9}, -{63,-33,10}, -{63,-33,11}, -{63,-33,12}, -{63,-33,13}, -{63,-33,14}, -{63,-33,15}, -{63,-33,16}, -{63,-33,17}, -{63,-33,18}, -{63,-33,19}, -{63,-33,20}, -{63,-33,21}, -{63,-33,22}, -{63,-33,23}, -{63,-33,24}, -{63,-33,25}, -{63,-33,26}, -{63,-33,27}, -{63,-33,28}, -{63,-33,29}, -{63,-33,30}, -{63,-33,31}, -{63,-33,32}, -{63,-33,33}, -{63,-33,34}, -{63,-33,35}, -{63,-33,36}, -{63,-33,37}, -{63,-33,38}, -{63,-33,39}, -{63,-33,40}, -{63,-33,41}, -{63,-33,42}, -{63,-33,43}, -{63,-33,44}, -{63,-33,45}, -{63,-33,46}, -{63,-33,47}, -{63,-33,48}, -{63,-33,49}, -{63,-33,50}, -{63,-33,51}, -{63,-33,52}, -{63,-33,53}, -{63,-33,54}, -{63,-33,55}, -{63,-33,56}, -{63,-33,57}, -{63,-33,58}, -{63,-33,59}, -{63,-33,60}, -{63,-33,61}, -{63,-33,62}, -{63,-33,63}, -{63,-33,64}, -{63,-33,65}, -{63,-32,-15}, -{63,-32,-14}, -{63,-32,-13}, -{63,-32,-12}, -{63,-32,-11}, -{63,-32,-10}, -{63,-32,-9}, -{63,-32,-8}, -{63,-32,-7}, -{63,-32,-6}, -{63,-32,-5}, -{63,-32,-4}, -{63,-32,-3}, -{63,-32,-2}, -{63,-32,-1}, -{63,-32,0}, -{63,-32,1}, -{63,-32,2}, -{63,-32,3}, -{63,-32,4}, -{63,-32,5}, -{63,-32,6}, -{63,-32,7}, -{63,-32,8}, -{63,-32,9}, -{63,-32,10}, -{63,-32,11}, -{63,-32,12}, -{63,-32,13}, -{63,-32,14}, -{63,-32,15}, -{63,-32,16}, -{63,-32,17}, -{63,-32,18}, -{63,-32,19}, -{63,-32,20}, -{63,-32,21}, -{63,-32,22}, -{63,-32,23}, -{63,-32,24}, -{63,-32,25}, -{63,-32,26}, -{63,-32,27}, -{63,-32,28}, -{63,-32,29}, -{63,-32,30}, -{63,-32,31}, -{63,-32,32}, -{63,-32,33}, -{63,-32,34}, -{63,-32,35}, -{63,-32,36}, -{63,-32,37}, -{63,-32,38}, -{63,-32,39}, -{63,-32,40}, -{63,-32,41}, -{63,-32,42}, -{63,-32,43}, -{63,-32,44}, -{63,-32,45}, -{63,-32,46}, -{63,-32,47}, -{63,-32,48}, -{63,-32,49}, -{63,-32,50}, -{63,-32,51}, -{63,-32,52}, -{63,-32,53}, -{63,-32,54}, -{63,-32,55}, -{63,-32,56}, -{63,-32,57}, -{63,-32,58}, -{63,-32,59}, -{63,-32,60}, -{63,-32,61}, -{63,-32,62}, -{63,-32,63}, -{63,-32,64}, -{63,-32,65}, -{63,-31,-17}, -{63,-31,-16}, -{63,-31,-15}, -{63,-31,-14}, -{63,-31,-13}, -{63,-31,-12}, -{63,-31,-11}, -{63,-31,-10}, -{63,-31,-9}, -{63,-31,-8}, -{63,-31,-7}, -{63,-31,-6}, -{63,-31,-5}, -{63,-31,-4}, -{63,-31,-3}, -{63,-31,-2}, -{63,-31,-1}, -{63,-31,0}, -{63,-31,1}, -{63,-31,2}, -{63,-31,3}, -{63,-31,4}, -{63,-31,5}, -{63,-31,6}, -{63,-31,7}, -{63,-31,8}, -{63,-31,9}, -{63,-31,10}, -{63,-31,11}, -{63,-31,12}, -{63,-31,13}, -{63,-31,14}, -{63,-31,15}, -{63,-31,16}, -{63,-31,17}, -{63,-31,18}, -{63,-31,19}, -{63,-31,20}, -{63,-31,21}, -{63,-31,22}, -{63,-31,23}, -{63,-31,24}, -{63,-31,25}, -{63,-31,26}, -{63,-31,27}, -{63,-31,28}, -{63,-31,29}, -{63,-31,30}, -{63,-31,31}, -{63,-31,32}, -{63,-31,33}, -{63,-31,34}, -{63,-31,35}, -{63,-31,36}, -{63,-31,37}, -{63,-31,38}, -{63,-31,39}, -{63,-31,40}, -{63,-31,41}, -{63,-31,42}, -{63,-31,43}, -{63,-31,44}, -{63,-31,45}, -{63,-31,46}, -{63,-31,47}, -{63,-31,48}, -{63,-31,49}, -{63,-31,50}, -{63,-31,51}, -{63,-31,52}, -{63,-31,53}, -{63,-31,54}, -{63,-31,55}, -{63,-31,56}, -{63,-31,57}, -{63,-31,58}, -{63,-31,59}, -{63,-31,60}, -{63,-31,61}, -{63,-31,62}, -{63,-31,63}, -{63,-31,64}, -{63,-31,65}, -{63,-30,-18}, -{63,-30,-17}, -{63,-30,-16}, -{63,-30,-15}, -{63,-30,-14}, -{63,-30,-13}, -{63,-30,-12}, -{63,-30,-11}, -{63,-30,-10}, -{63,-30,-9}, -{63,-30,-8}, -{63,-30,-7}, -{63,-30,-6}, -{63,-30,-5}, -{63,-30,-4}, -{63,-30,-3}, -{63,-30,-2}, -{63,-30,-1}, -{63,-30,0}, -{63,-30,1}, -{63,-30,2}, -{63,-30,3}, -{63,-30,4}, -{63,-30,5}, -{63,-30,6}, -{63,-30,7}, -{63,-30,8}, -{63,-30,9}, -{63,-30,10}, -{63,-30,11}, -{63,-30,12}, -{63,-30,13}, -{63,-30,14}, -{63,-30,15}, -{63,-30,16}, -{63,-30,17}, -{63,-30,18}, -{63,-30,19}, -{63,-30,20}, -{63,-30,21}, -{63,-30,22}, -{63,-30,23}, -{63,-30,24}, -{63,-30,25}, -{63,-30,26}, -{63,-30,27}, -{63,-30,28}, -{63,-30,29}, -{63,-30,30}, -{63,-30,31}, -{63,-30,32}, -{63,-30,33}, -{63,-30,34}, -{63,-30,35}, -{63,-30,36}, -{63,-30,37}, -{63,-30,38}, -{63,-30,39}, -{63,-30,40}, -{63,-30,41}, -{63,-30,42}, -{63,-30,43}, -{63,-30,44}, -{63,-30,45}, -{63,-30,46}, -{63,-30,47}, -{63,-30,48}, -{63,-30,49}, -{63,-30,50}, -{63,-30,51}, -{63,-30,52}, -{63,-30,53}, -{63,-30,54}, -{63,-30,55}, -{63,-30,56}, -{63,-30,57}, -{63,-30,58}, -{63,-30,59}, -{63,-30,60}, -{63,-30,61}, -{63,-30,62}, -{63,-30,63}, -{63,-30,64}, -{63,-30,65}, -{63,-29,-20}, -{63,-29,-19}, -{63,-29,-18}, -{63,-29,-17}, -{63,-29,-16}, -{63,-29,-15}, -{63,-29,-14}, -{63,-29,-13}, -{63,-29,-12}, -{63,-29,-11}, -{63,-29,-10}, -{63,-29,-9}, -{63,-29,-8}, -{63,-29,-7}, -{63,-29,-6}, -{63,-29,-5}, -{63,-29,-4}, -{63,-29,-3}, -{63,-29,-2}, -{63,-29,-1}, -{63,-29,0}, -{63,-29,1}, -{63,-29,2}, -{63,-29,3}, -{63,-29,4}, -{63,-29,5}, -{63,-29,6}, -{63,-29,7}, -{63,-29,8}, -{63,-29,9}, -{63,-29,10}, -{63,-29,11}, -{63,-29,12}, -{63,-29,13}, -{63,-29,14}, -{63,-29,15}, -{63,-29,16}, -{63,-29,17}, -{63,-29,18}, -{63,-29,19}, -{63,-29,20}, -{63,-29,21}, -{63,-29,22}, -{63,-29,23}, -{63,-29,24}, -{63,-29,25}, -{63,-29,26}, -{63,-29,27}, -{63,-29,28}, -{63,-29,29}, -{63,-29,30}, -{63,-29,31}, -{63,-29,32}, -{63,-29,33}, -{63,-29,34}, -{63,-29,35}, -{63,-29,36}, -{63,-29,37}, -{63,-29,38}, -{63,-29,39}, -{63,-29,40}, -{63,-29,41}, -{63,-29,42}, -{63,-29,43}, -{63,-29,44}, -{63,-29,45}, -{63,-29,46}, -{63,-29,47}, -{63,-29,48}, -{63,-29,49}, -{63,-29,50}, -{63,-29,51}, -{63,-29,52}, -{63,-29,53}, -{63,-29,54}, -{63,-29,55}, -{63,-29,56}, -{63,-29,57}, -{63,-29,58}, -{63,-29,59}, -{63,-29,60}, -{63,-29,61}, -{63,-29,62}, -{63,-29,63}, -{63,-29,64}, -{63,-29,65}, -{63,-28,-21}, -{63,-28,-20}, -{63,-28,-19}, -{63,-28,-18}, -{63,-28,-17}, -{63,-28,-16}, -{63,-28,-15}, -{63,-28,-14}, -{63,-28,-13}, -{63,-28,-12}, -{63,-28,-11}, -{63,-28,-10}, -{63,-28,-9}, -{63,-28,-8}, -{63,-28,-7}, -{63,-28,-6}, -{63,-28,-5}, -{63,-28,-4}, -{63,-28,-3}, -{63,-28,-2}, -{63,-28,-1}, -{63,-28,0}, -{63,-28,1}, -{63,-28,2}, -{63,-28,3}, -{63,-28,4}, -{63,-28,5}, -{63,-28,6}, -{63,-28,7}, -{63,-28,8}, -{63,-28,9}, -{63,-28,10}, -{63,-28,11}, -{63,-28,12}, -{63,-28,13}, -{63,-28,14}, -{63,-28,15}, -{63,-28,16}, -{63,-28,17}, -{63,-28,18}, -{63,-28,19}, -{63,-28,20}, -{63,-28,21}, -{63,-28,22}, -{63,-28,23}, -{63,-28,24}, -{63,-28,25}, -{63,-28,26}, -{63,-28,27}, -{63,-28,28}, -{63,-28,29}, -{63,-28,30}, -{63,-28,31}, -{63,-28,32}, -{63,-28,33}, -{63,-28,34}, -{63,-28,35}, -{63,-28,36}, -{63,-28,37}, -{63,-28,38}, -{63,-28,39}, -{63,-28,40}, -{63,-28,41}, -{63,-28,42}, -{63,-28,43}, -{63,-28,44}, -{63,-28,45}, -{63,-28,46}, -{63,-28,47}, -{63,-28,48}, -{63,-28,49}, -{63,-28,50}, -{63,-28,51}, -{63,-28,52}, -{63,-28,53}, -{63,-28,54}, -{63,-28,55}, -{63,-28,56}, -{63,-28,57}, -{63,-28,58}, -{63,-28,59}, -{63,-28,60}, -{63,-28,61}, -{63,-28,62}, -{63,-28,63}, -{63,-28,64}, -{63,-28,65}, -{63,-27,-23}, -{63,-27,-22}, -{63,-27,-21}, -{63,-27,-20}, -{63,-27,-19}, -{63,-27,-18}, -{63,-27,-17}, -{63,-27,-16}, -{63,-27,-15}, -{63,-27,-14}, -{63,-27,-13}, -{63,-27,-12}, -{63,-27,-11}, -{63,-27,-10}, -{63,-27,-9}, -{63,-27,-8}, -{63,-27,-7}, -{63,-27,-6}, -{63,-27,-5}, -{63,-27,-4}, -{63,-27,-3}, -{63,-27,-2}, -{63,-27,-1}, -{63,-27,0}, -{63,-27,1}, -{63,-27,2}, -{63,-27,3}, -{63,-27,4}, -{63,-27,5}, -{63,-27,6}, -{63,-27,7}, -{63,-27,8}, -{63,-27,9}, -{63,-27,10}, -{63,-27,11}, -{63,-27,12}, -{63,-27,13}, -{63,-27,14}, -{63,-27,15}, -{63,-27,16}, -{63,-27,17}, -{63,-27,18}, -{63,-27,19}, -{63,-27,20}, -{63,-27,21}, -{63,-27,22}, -{63,-27,23}, -{63,-27,24}, -{63,-27,25}, -{63,-27,26}, -{63,-27,27}, -{63,-27,28}, -{63,-27,29}, -{63,-27,30}, -{63,-27,31}, -{63,-27,32}, -{63,-27,33}, -{63,-27,34}, -{63,-27,35}, -{63,-27,36}, -{63,-27,37}, -{63,-27,38}, -{63,-27,39}, -{63,-27,40}, -{63,-27,41}, -{63,-27,42}, -{63,-27,43}, -{63,-27,44}, -{63,-27,45}, -{63,-27,46}, -{63,-27,47}, -{63,-27,48}, -{63,-27,49}, -{63,-27,50}, -{63,-27,51}, -{63,-27,52}, -{63,-27,53}, -{63,-27,54}, -{63,-27,55}, -{63,-27,56}, -{63,-27,57}, -{63,-27,58}, -{63,-27,59}, -{63,-27,60}, -{63,-27,61}, -{63,-27,62}, -{63,-27,63}, -{63,-27,64}, -{63,-27,65}, -{63,-26,-24}, -{63,-26,-23}, -{63,-26,-22}, -{63,-26,-21}, -{63,-26,-20}, -{63,-26,-19}, -{63,-26,-18}, -{63,-26,-17}, -{63,-26,-16}, -{63,-26,-15}, -{63,-26,-14}, -{63,-26,-13}, -{63,-26,-12}, -{63,-26,-11}, -{63,-26,-10}, -{63,-26,-9}, -{63,-26,-8}, -{63,-26,-7}, -{63,-26,-6}, -{63,-26,-5}, -{63,-26,-4}, -{63,-26,-3}, -{63,-26,-2}, -{63,-26,-1}, -{63,-26,0}, -{63,-26,1}, -{63,-26,2}, -{63,-26,3}, -{63,-26,4}, -{63,-26,5}, -{63,-26,6}, -{63,-26,7}, -{63,-26,8}, -{63,-26,9}, -{63,-26,10}, -{63,-26,11}, -{63,-26,12}, -{63,-26,13}, -{63,-26,14}, -{63,-26,15}, -{63,-26,16}, -{63,-26,17}, -{63,-26,18}, -{63,-26,19}, -{63,-26,20}, -{63,-26,21}, -{63,-26,22}, -{63,-26,23}, -{63,-26,24}, -{63,-26,25}, -{63,-26,26}, -{63,-26,27}, -{63,-26,28}, -{63,-26,29}, -{63,-26,30}, -{63,-26,31}, -{63,-26,32}, -{63,-26,33}, -{63,-26,34}, -{63,-26,35}, -{63,-26,36}, -{63,-26,37}, -{63,-26,38}, -{63,-26,39}, -{63,-26,40}, -{63,-26,41}, -{63,-26,42}, -{63,-26,43}, -{63,-26,44}, -{63,-26,45}, -{63,-26,46}, -{63,-26,47}, -{63,-26,48}, -{63,-26,49}, -{63,-26,50}, -{63,-26,51}, -{63,-26,52}, -{63,-26,53}, -{63,-26,54}, -{63,-26,55}, -{63,-26,56}, -{63,-26,57}, -{63,-26,58}, -{63,-26,59}, -{63,-26,60}, -{63,-26,61}, -{63,-26,62}, -{63,-26,63}, -{63,-26,64}, -{63,-26,65}, -{63,-25,-26}, -{63,-25,-25}, -{63,-25,-24}, -{63,-25,-23}, -{63,-25,-22}, -{63,-25,-21}, -{63,-25,-20}, -{63,-25,-19}, -{63,-25,-18}, -{63,-25,-17}, -{63,-25,-16}, -{63,-25,-15}, -{63,-25,-14}, -{63,-25,-13}, -{63,-25,-12}, -{63,-25,-11}, -{63,-25,-10}, -{63,-25,-9}, -{63,-25,-8}, -{63,-25,-7}, -{63,-25,-6}, -{63,-25,-5}, -{63,-25,-4}, -{63,-25,-3}, -{63,-25,-2}, -{63,-25,-1}, -{63,-25,0}, -{63,-25,1}, -{63,-25,2}, -{63,-25,3}, -{63,-25,4}, -{63,-25,5}, -{63,-25,6}, -{63,-25,7}, -{63,-25,8}, -{63,-25,9}, -{63,-25,10}, -{63,-25,11}, -{63,-25,12}, -{63,-25,13}, -{63,-25,14}, -{63,-25,15}, -{63,-25,16}, -{63,-25,17}, -{63,-25,18}, -{63,-25,19}, -{63,-25,20}, -{63,-25,21}, -{63,-25,22}, -{63,-25,23}, -{63,-25,24}, -{63,-25,25}, -{63,-25,26}, -{63,-25,27}, -{63,-25,28}, -{63,-25,29}, -{63,-25,30}, -{63,-25,31}, -{63,-25,32}, -{63,-25,33}, -{63,-25,34}, -{63,-25,35}, -{63,-25,36}, -{63,-25,37}, -{63,-25,38}, -{63,-25,39}, -{63,-25,40}, -{63,-25,41}, -{63,-25,42}, -{63,-25,43}, -{63,-25,44}, -{63,-25,45}, -{63,-25,46}, -{63,-25,47}, -{63,-25,48}, -{63,-25,49}, -{63,-25,50}, -{63,-25,51}, -{63,-25,52}, -{63,-25,53}, -{63,-25,54}, -{63,-25,55}, -{63,-25,56}, -{63,-25,57}, -{63,-25,58}, -{63,-25,59}, -{63,-25,60}, -{63,-25,61}, -{63,-25,62}, -{63,-25,63}, -{63,-25,64}, -{63,-25,65}, -{63,-24,-27}, -{63,-24,-26}, -{63,-24,-25}, -{63,-24,-24}, -{63,-24,-23}, -{63,-24,-22}, -{63,-24,-21}, -{63,-24,-20}, -{63,-24,-19}, -{63,-24,-18}, -{63,-24,-17}, -{63,-24,-16}, -{63,-24,-15}, -{63,-24,-14}, -{63,-24,-13}, -{63,-24,-12}, -{63,-24,-11}, -{63,-24,-10}, -{63,-24,-9}, -{63,-24,-8}, -{63,-24,-7}, -{63,-24,-6}, -{63,-24,-5}, -{63,-24,-4}, -{63,-24,-3}, -{63,-24,-2}, -{63,-24,-1}, -{63,-24,0}, -{63,-24,1}, -{63,-24,2}, -{63,-24,3}, -{63,-24,4}, -{63,-24,5}, -{63,-24,6}, -{63,-24,7}, -{63,-24,8}, -{63,-24,9}, -{63,-24,10}, -{63,-24,11}, -{63,-24,12}, -{63,-24,13}, -{63,-24,14}, -{63,-24,15}, -{63,-24,16}, -{63,-24,17}, -{63,-24,18}, -{63,-24,19}, -{63,-24,20}, -{63,-24,21}, -{63,-24,22}, -{63,-24,23}, -{63,-24,24}, -{63,-24,25}, -{63,-24,26}, -{63,-24,27}, -{63,-24,28}, -{63,-24,29}, -{63,-24,30}, -{63,-24,31}, -{63,-24,32}, -{63,-24,33}, -{63,-24,34}, -{63,-24,35}, -{63,-24,36}, -{63,-24,37}, -{63,-24,38}, -{63,-24,39}, -{63,-24,40}, -{63,-24,41}, -{63,-24,42}, -{63,-24,43}, -{63,-24,44}, -{63,-24,45}, -{63,-24,46}, -{63,-24,47}, -{63,-24,48}, -{63,-24,49}, -{63,-24,50}, -{63,-24,51}, -{63,-24,52}, -{63,-24,53}, -{63,-24,54}, -{63,-24,55}, -{63,-24,56}, -{63,-24,57}, -{63,-24,58}, -{63,-24,59}, -{63,-24,60}, -{63,-24,61}, -{63,-24,62}, -{63,-24,63}, -{63,-24,64}, -{63,-24,65}, -{63,-23,-28}, -{63,-23,-27}, -{63,-23,-26}, -{63,-23,-25}, -{63,-23,-24}, -{63,-23,-23}, -{63,-23,-22}, -{63,-23,-21}, -{63,-23,-20}, -{63,-23,-19}, -{63,-23,-18}, -{63,-23,-17}, -{63,-23,-16}, -{63,-23,-15}, -{63,-23,-14}, -{63,-23,-13}, -{63,-23,-12}, -{63,-23,-11}, -{63,-23,-10}, -{63,-23,-9}, -{63,-23,-8}, -{63,-23,-7}, -{63,-23,-6}, -{63,-23,-5}, -{63,-23,-4}, -{63,-23,-3}, -{63,-23,-2}, -{63,-23,-1}, -{63,-23,0}, -{63,-23,1}, -{63,-23,2}, -{63,-23,3}, -{63,-23,4}, -{63,-23,5}, -{63,-23,6}, -{63,-23,7}, -{63,-23,8}, -{63,-23,9}, -{63,-23,10}, -{63,-23,11}, -{63,-23,12}, -{63,-23,13}, -{63,-23,14}, -{63,-23,15}, -{63,-23,16}, -{63,-23,17}, -{63,-23,18}, -{63,-23,19}, -{63,-23,20}, -{63,-23,21}, -{63,-23,22}, -{63,-23,23}, -{63,-23,24}, -{63,-23,25}, -{63,-23,26}, -{63,-23,27}, -{63,-23,28}, -{63,-23,29}, -{63,-23,30}, -{63,-23,31}, -{63,-23,32}, -{63,-23,33}, -{63,-23,34}, -{63,-23,35}, -{63,-23,36}, -{63,-23,37}, -{63,-23,38}, -{63,-23,39}, -{63,-23,40}, -{63,-23,41}, -{63,-23,42}, -{63,-23,43}, -{63,-23,44}, -{63,-23,45}, -{63,-23,46}, -{63,-23,47}, -{63,-23,48}, -{63,-23,49}, -{63,-23,50}, -{63,-23,51}, -{63,-23,52}, -{63,-23,53}, -{63,-23,54}, -{63,-23,55}, -{63,-23,56}, -{63,-23,57}, -{63,-23,58}, -{63,-23,59}, -{63,-23,60}, -{63,-23,61}, -{63,-23,62}, -{63,-23,63}, -{63,-23,64}, -{63,-23,65}, -{63,-22,-30}, -{63,-22,-29}, -{63,-22,-28}, -{63,-22,-27}, -{63,-22,-26}, -{63,-22,-25}, -{63,-22,-24}, -{63,-22,-23}, -{63,-22,-22}, -{63,-22,-21}, -{63,-22,-20}, -{63,-22,-19}, -{63,-22,-18}, -{63,-22,-17}, -{63,-22,-16}, -{63,-22,-15}, -{63,-22,-14}, -{63,-22,-13}, -{63,-22,-12}, -{63,-22,-11}, -{63,-22,-10}, -{63,-22,-9}, -{63,-22,-8}, -{63,-22,-7}, -{63,-22,-6}, -{63,-22,-5}, -{63,-22,-4}, -{63,-22,-3}, -{63,-22,-2}, -{63,-22,-1}, -{63,-22,0}, -{63,-22,1}, -{63,-22,2}, -{63,-22,3}, -{63,-22,4}, -{63,-22,5}, -{63,-22,6}, -{63,-22,7}, -{63,-22,8}, -{63,-22,9}, -{63,-22,10}, -{63,-22,11}, -{63,-22,12}, -{63,-22,13}, -{63,-22,14}, -{63,-22,15}, -{63,-22,16}, -{63,-22,17}, -{63,-22,18}, -{63,-22,19}, -{63,-22,20}, -{63,-22,21}, -{63,-22,22}, -{63,-22,23}, -{63,-22,24}, -{63,-22,25}, -{63,-22,26}, -{63,-22,27}, -{63,-22,28}, -{63,-22,29}, -{63,-22,30}, -{63,-22,31}, -{63,-22,32}, -{63,-22,33}, -{63,-22,34}, -{63,-22,35}, -{63,-22,36}, -{63,-22,37}, -{63,-22,38}, -{63,-22,39}, -{63,-22,40}, -{63,-22,41}, -{63,-22,42}, -{63,-22,43}, -{63,-22,44}, -{63,-22,45}, -{63,-22,46}, -{63,-22,47}, -{63,-22,48}, -{63,-22,49}, -{63,-22,50}, -{63,-22,51}, -{63,-22,52}, -{63,-22,53}, -{63,-22,54}, -{63,-22,55}, -{63,-22,56}, -{63,-22,57}, -{63,-22,58}, -{63,-22,59}, -{63,-22,60}, -{63,-22,61}, -{63,-22,62}, -{63,-22,63}, -{63,-22,64}, -{63,-22,65}, -{63,-21,-31}, -{63,-21,-30}, -{63,-21,-29}, -{63,-21,-28}, -{63,-21,-27}, -{63,-21,-26}, -{63,-21,-25}, -{63,-21,-24}, -{63,-21,-23}, -{63,-21,-22}, -{63,-21,-21}, -{63,-21,-20}, -{63,-21,-19}, -{63,-21,-18}, -{63,-21,-17}, -{63,-21,-16}, -{63,-21,-15}, -{63,-21,-14}, -{63,-21,-13}, -{63,-21,-12}, -{63,-21,-11}, -{63,-21,-10}, -{63,-21,-9}, -{63,-21,-8}, -{63,-21,-7}, -{63,-21,-6}, -{63,-21,-5}, -{63,-21,-4}, -{63,-21,-3}, -{63,-21,-2}, -{63,-21,-1}, -{63,-21,0}, -{63,-21,1}, -{63,-21,2}, -{63,-21,3}, -{63,-21,4}, -{63,-21,5}, -{63,-21,6}, -{63,-21,7}, -{63,-21,8}, -{63,-21,9}, -{63,-21,10}, -{63,-21,11}, -{63,-21,12}, -{63,-21,13}, -{63,-21,14}, -{63,-21,15}, -{63,-21,16}, -{63,-21,17}, -{63,-21,18}, -{63,-21,19}, -{63,-21,20}, -{63,-21,21}, -{63,-21,22}, -{63,-21,23}, -{63,-21,24}, -{63,-21,25}, -{63,-21,26}, -{63,-21,27}, -{63,-21,28}, -{63,-21,29}, -{63,-21,30}, -{63,-21,31}, -{63,-21,32}, -{63,-21,33}, -{63,-21,34}, -{63,-21,35}, -{63,-21,36}, -{63,-21,37}, -{63,-21,38}, -{63,-21,39}, -{63,-21,40}, -{63,-21,41}, -{63,-21,42}, -{63,-21,43}, -{63,-21,44}, -{63,-21,45}, -{63,-21,46}, -{63,-21,47}, -{63,-21,48}, -{63,-21,49}, -{63,-21,50}, -{63,-21,51}, -{63,-21,52}, -{63,-21,53}, -{63,-21,54}, -{63,-21,55}, -{63,-21,56}, -{63,-21,57}, -{63,-21,58}, -{63,-21,59}, -{63,-21,60}, -{63,-21,61}, -{63,-21,62}, -{63,-21,63}, -{63,-21,64}, -{63,-21,65}, -{63,-20,-32}, -{63,-20,-31}, -{63,-20,-30}, -{63,-20,-29}, -{63,-20,-28}, -{63,-20,-27}, -{63,-20,-26}, -{63,-20,-25}, -{63,-20,-24}, -{63,-20,-23}, -{63,-20,-22}, -{63,-20,-21}, -{63,-20,-20}, -{63,-20,-19}, -{63,-20,-18}, -{63,-20,-17}, -{63,-20,-16}, -{63,-20,-15}, -{63,-20,-14}, -{63,-20,-13}, -{63,-20,-12}, -{63,-20,-11}, -{63,-20,-10}, -{63,-20,-9}, -{63,-20,-8}, -{63,-20,-7}, -{63,-20,-6}, -{63,-20,-5}, -{63,-20,-4}, -{63,-20,-3}, -{63,-20,-2}, -{63,-20,-1}, -{63,-20,0}, -{63,-20,1}, -{63,-20,2}, -{63,-20,3}, -{63,-20,4}, -{63,-20,5}, -{63,-20,6}, -{63,-20,7}, -{63,-20,8}, -{63,-20,9}, -{63,-20,10}, -{63,-20,11}, -{63,-20,12}, -{63,-20,13}, -{63,-20,14}, -{63,-20,15}, -{63,-20,16}, -{63,-20,17}, -{63,-20,18}, -{63,-20,19}, -{63,-20,20}, -{63,-20,21}, -{63,-20,22}, -{63,-20,23}, -{63,-20,24}, -{63,-20,25}, -{63,-20,26}, -{63,-20,27}, -{63,-20,28}, -{63,-20,29}, -{63,-20,30}, -{63,-20,31}, -{63,-20,32}, -{63,-20,33}, -{63,-20,34}, -{63,-20,35}, -{63,-20,36}, -{63,-20,37}, -{63,-20,38}, -{63,-20,39}, -{63,-20,40}, -{63,-20,41}, -{63,-20,42}, -{63,-20,43}, -{63,-20,44}, -{63,-20,45}, -{63,-20,46}, -{63,-20,47}, -{63,-20,48}, -{63,-20,49}, -{63,-20,50}, -{63,-20,51}, -{63,-20,52}, -{63,-20,53}, -{63,-20,54}, -{63,-20,55}, -{63,-20,56}, -{63,-20,57}, -{63,-20,58}, -{63,-20,59}, -{63,-20,60}, -{63,-20,61}, -{63,-20,62}, -{63,-20,63}, -{63,-20,64}, -{63,-20,65}, -{63,-19,-34}, -{63,-19,-33}, -{63,-19,-32}, -{63,-19,-31}, -{63,-19,-30}, -{63,-19,-29}, -{63,-19,-28}, -{63,-19,-27}, -{63,-19,-26}, -{63,-19,-25}, -{63,-19,-24}, -{63,-19,-23}, -{63,-19,-22}, -{63,-19,-21}, -{63,-19,-20}, -{63,-19,-19}, -{63,-19,-18}, -{63,-19,-17}, -{63,-19,-16}, -{63,-19,-15}, -{63,-19,-14}, -{63,-19,-13}, -{63,-19,-12}, -{63,-19,-11}, -{63,-19,-10}, -{63,-19,-9}, -{63,-19,-8}, -{63,-19,-7}, -{63,-19,-6}, -{63,-19,-5}, -{63,-19,-4}, -{63,-19,-3}, -{63,-19,-2}, -{63,-19,-1}, -{63,-19,0}, -{63,-19,1}, -{63,-19,2}, -{63,-19,3}, -{63,-19,4}, -{63,-19,5}, -{63,-19,6}, -{63,-19,7}, -{63,-19,8}, -{63,-19,9}, -{63,-19,10}, -{63,-19,11}, -{63,-19,12}, -{63,-19,13}, -{63,-19,14}, -{63,-19,15}, -{63,-19,16}, -{63,-19,17}, -{63,-19,18}, -{63,-19,19}, -{63,-19,20}, -{63,-19,21}, -{63,-19,22}, -{63,-19,23}, -{63,-19,24}, -{63,-19,25}, -{63,-19,26}, -{63,-19,27}, -{63,-19,28}, -{63,-19,29}, -{63,-19,30}, -{63,-19,31}, -{63,-19,32}, -{63,-19,33}, -{63,-19,34}, -{63,-19,35}, -{63,-19,36}, -{63,-19,37}, -{63,-19,38}, -{63,-19,39}, -{63,-19,40}, -{63,-19,41}, -{63,-19,42}, -{63,-19,43}, -{63,-19,44}, -{63,-19,45}, -{63,-19,46}, -{63,-19,47}, -{63,-19,48}, -{63,-19,49}, -{63,-19,50}, -{63,-19,51}, -{63,-19,52}, -{63,-19,53}, -{63,-19,54}, -{63,-19,55}, -{63,-19,56}, -{63,-19,57}, -{63,-19,58}, -{63,-19,59}, -{63,-19,60}, -{63,-19,61}, -{63,-19,62}, -{63,-19,63}, -{63,-19,64}, -{63,-19,65}, -{63,-18,-35}, -{63,-18,-34}, -{63,-18,-33}, -{63,-18,-32}, -{63,-18,-31}, -{63,-18,-30}, -{63,-18,-29}, -{63,-18,-28}, -{63,-18,-27}, -{63,-18,-26}, -{63,-18,-25}, -{63,-18,-24}, -{63,-18,-23}, -{63,-18,-22}, -{63,-18,-21}, -{63,-18,-20}, -{63,-18,-19}, -{63,-18,-18}, -{63,-18,-17}, -{63,-18,-16}, -{63,-18,-15}, -{63,-18,-14}, -{63,-18,-13}, -{63,-18,-12}, -{63,-18,-11}, -{63,-18,-10}, -{63,-18,-9}, -{63,-18,-8}, -{63,-18,-7}, -{63,-18,-6}, -{63,-18,-5}, -{63,-18,-4}, -{63,-18,-3}, -{63,-18,-2}, -{63,-18,-1}, -{63,-18,0}, -{63,-18,1}, -{63,-18,2}, -{63,-18,3}, -{63,-18,4}, -{63,-18,5}, -{63,-18,6}, -{63,-18,7}, -{63,-18,8}, -{63,-18,9}, -{63,-18,10}, -{63,-18,11}, -{63,-18,12}, -{63,-18,13}, -{63,-18,14}, -{63,-18,15}, -{63,-18,16}, -{63,-18,17}, -{63,-18,18}, -{63,-18,19}, -{63,-18,20}, -{63,-18,21}, -{63,-18,22}, -{63,-18,23}, -{63,-18,24}, -{63,-18,25}, -{63,-18,26}, -{63,-18,27}, -{63,-18,28}, -{63,-18,29}, -{63,-18,30}, -{63,-18,31}, -{63,-18,32}, -{63,-18,33}, -{63,-18,34}, -{63,-18,35}, -{63,-18,36}, -{63,-18,37}, -{63,-18,38}, -{63,-18,39}, -{63,-18,40}, -{63,-18,41}, -{63,-18,42}, -{63,-18,43}, -{63,-18,44}, -{63,-18,45}, -{63,-18,46}, -{63,-18,47}, -{63,-18,48}, -{63,-18,49}, -{63,-18,50}, -{63,-18,51}, -{63,-18,52}, -{63,-18,53}, -{63,-18,54}, -{63,-18,55}, -{63,-18,56}, -{63,-18,57}, -{63,-18,58}, -{63,-18,59}, -{63,-18,60}, -{63,-18,61}, -{63,-18,62}, -{63,-18,63}, -{63,-18,64}, -{63,-18,65}, -{63,-17,-36}, -{63,-17,-35}, -{63,-17,-34}, -{63,-17,-33}, -{63,-17,-32}, -{63,-17,-31}, -{63,-17,-30}, -{63,-17,-29}, -{63,-17,-28}, -{63,-17,-27}, -{63,-17,-26}, -{63,-17,-25}, -{63,-17,-24}, -{63,-17,-23}, -{63,-17,-22}, -{63,-17,-21}, -{63,-17,-20}, -{63,-17,-19}, -{63,-17,-18}, -{63,-17,-17}, -{63,-17,-16}, -{63,-17,-15}, -{63,-17,-14}, -{63,-17,-13}, -{63,-17,-12}, -{63,-17,-11}, -{63,-17,-10}, -{63,-17,-9}, -{63,-17,-8}, -{63,-17,-7}, -{63,-17,-6}, -{63,-17,-5}, -{63,-17,-4}, -{63,-17,-3}, -{63,-17,-2}, -{63,-17,-1}, -{63,-17,0}, -{63,-17,1}, -{63,-17,2}, -{63,-17,3}, -{63,-17,4}, -{63,-17,5}, -{63,-17,6}, -{63,-17,7}, -{63,-17,8}, -{63,-17,9}, -{63,-17,10}, -{63,-17,11}, -{63,-17,12}, -{63,-17,13}, -{63,-17,14}, -{63,-17,15}, -{63,-17,16}, -{63,-17,17}, -{63,-17,18}, -{63,-17,19}, -{63,-17,20}, -{63,-17,21}, -{63,-17,22}, -{63,-17,23}, -{63,-17,24}, -{63,-17,25}, -{63,-17,26}, -{63,-17,27}, -{63,-17,28}, -{63,-17,29}, -{63,-17,30}, -{63,-17,31}, -{63,-17,32}, -{63,-17,33}, -{63,-17,34}, -{63,-17,35}, -{63,-17,36}, -{63,-17,37}, -{63,-17,38}, -{63,-17,39}, -{63,-17,40}, -{63,-17,41}, -{63,-17,42}, -{63,-17,43}, -{63,-17,44}, -{63,-17,45}, -{63,-17,46}, -{63,-17,47}, -{63,-17,48}, -{63,-17,49}, -{63,-17,50}, -{63,-17,51}, -{63,-17,52}, -{63,-17,53}, -{63,-17,54}, -{63,-17,55}, -{63,-17,56}, -{63,-17,57}, -{63,-17,58}, -{63,-17,59}, -{63,-17,60}, -{63,-17,61}, -{63,-17,62}, -{63,-17,63}, -{63,-17,64}, -{63,-17,65}, -{63,-17,66}, -{63,-16,-37}, -{63,-16,-36}, -{63,-16,-35}, -{63,-16,-34}, -{63,-16,-33}, -{63,-16,-32}, -{63,-16,-31}, -{63,-16,-30}, -{63,-16,-29}, -{63,-16,-28}, -{63,-16,-27}, -{63,-16,-26}, -{63,-16,-25}, -{63,-16,-24}, -{63,-16,-23}, -{63,-16,-22}, -{63,-16,-21}, -{63,-16,-20}, -{63,-16,-19}, -{63,-16,-18}, -{63,-16,-17}, -{63,-16,-16}, -{63,-16,-15}, -{63,-16,-14}, -{63,-16,-13}, -{63,-16,-12}, -{63,-16,-11}, -{63,-16,-10}, -{63,-16,-9}, -{63,-16,-8}, -{63,-16,-7}, -{63,-16,-6}, -{63,-16,-5}, -{63,-16,-4}, -{63,-16,-3}, -{63,-16,-2}, -{63,-16,-1}, -{63,-16,0}, -{63,-16,1}, -{63,-16,2}, -{63,-16,3}, -{63,-16,4}, -{63,-16,5}, -{63,-16,6}, -{63,-16,7}, -{63,-16,8}, -{63,-16,9}, -{63,-16,10}, -{63,-16,11}, -{63,-16,12}, -{63,-16,13}, -{63,-16,14}, -{63,-16,15}, -{63,-16,16}, -{63,-16,17}, -{63,-16,18}, -{63,-16,19}, -{63,-16,20}, -{63,-16,21}, -{63,-16,22}, -{63,-16,23}, -{63,-16,24}, -{63,-16,25}, -{63,-16,26}, -{63,-16,27}, -{63,-16,28}, -{63,-16,29}, -{63,-16,30}, -{63,-16,31}, -{63,-16,32}, -{63,-16,33}, -{63,-16,34}, -{63,-16,35}, -{63,-16,36}, -{63,-16,37}, -{63,-16,38}, -{63,-16,39}, -{63,-16,40}, -{63,-16,41}, -{63,-16,42}, -{63,-16,43}, -{63,-16,44}, -{63,-16,45}, -{63,-16,46}, -{63,-16,47}, -{63,-16,48}, -{63,-16,49}, -{63,-16,50}, -{63,-16,51}, -{63,-16,52}, -{63,-16,53}, -{63,-16,54}, -{63,-16,55}, -{63,-16,56}, -{63,-16,57}, -{63,-16,58}, -{63,-16,59}, -{63,-16,60}, -{63,-16,61}, -{63,-16,62}, -{63,-16,63}, -{63,-16,64}, -{63,-16,65}, -{63,-16,66}, -{63,-15,-39}, -{63,-15,-38}, -{63,-15,-37}, -{63,-15,-36}, -{63,-15,-35}, -{63,-15,-34}, -{63,-15,-33}, -{63,-15,-32}, -{63,-15,-31}, -{63,-15,-30}, -{63,-15,-29}, -{63,-15,-28}, -{63,-15,-27}, -{63,-15,-26}, -{63,-15,-25}, -{63,-15,-24}, -{63,-15,-23}, -{63,-15,-22}, -{63,-15,-21}, -{63,-15,-20}, -{63,-15,-19}, -{63,-15,-18}, -{63,-15,-17}, -{63,-15,-16}, -{63,-15,-15}, -{63,-15,-14}, -{63,-15,-13}, -{63,-15,-12}, -{63,-15,-11}, -{63,-15,-10}, -{63,-15,-9}, -{63,-15,-8}, -{63,-15,-7}, -{63,-15,-6}, -{63,-15,-5}, -{63,-15,-4}, -{63,-15,-3}, -{63,-15,-2}, -{63,-15,-1}, -{63,-15,0}, -{63,-15,1}, -{63,-15,2}, -{63,-15,3}, -{63,-15,4}, -{63,-15,5}, -{63,-15,6}, -{63,-15,7}, -{63,-15,8}, -{63,-15,9}, -{63,-15,10}, -{63,-15,11}, -{63,-15,12}, -{63,-15,13}, -{63,-15,14}, -{63,-15,15}, -{63,-15,16}, -{63,-15,17}, -{63,-15,18}, -{63,-15,19}, -{63,-15,20}, -{63,-15,21}, -{63,-15,22}, -{63,-15,23}, -{63,-15,24}, -{63,-15,25}, -{63,-15,26}, -{63,-15,27}, -{63,-15,28}, -{63,-15,29}, -{63,-15,30}, -{63,-15,31}, -{63,-15,32}, -{63,-15,33}, -{63,-15,34}, -{63,-15,35}, -{63,-15,36}, -{63,-15,37}, -{63,-15,38}, -{63,-15,39}, -{63,-15,40}, -{63,-15,41}, -{63,-15,42}, -{63,-15,43}, -{63,-15,44}, -{63,-15,45}, -{63,-15,46}, -{63,-15,47}, -{63,-15,48}, -{63,-15,49}, -{63,-15,50}, -{63,-15,51}, -{63,-15,52}, -{63,-15,53}, -{63,-15,54}, -{63,-15,55}, -{63,-15,56}, -{63,-15,57}, -{63,-15,58}, -{63,-15,59}, -{63,-15,60}, -{63,-15,61}, -{63,-15,62}, -{63,-15,63}, -{63,-15,64}, -{63,-15,65}, -{63,-15,66}, -{63,-14,-40}, -{63,-14,-39}, -{63,-14,-38}, -{63,-14,-37}, -{63,-14,-36}, -{63,-14,-35}, -{63,-14,-34}, -{63,-14,-33}, -{63,-14,-32}, -{63,-14,-31}, -{63,-14,-30}, -{63,-14,-29}, -{63,-14,-28}, -{63,-14,-27}, -{63,-14,-26}, -{63,-14,-25}, -{63,-14,-24}, -{63,-14,-23}, -{63,-14,-22}, -{63,-14,-21}, -{63,-14,-20}, -{63,-14,-19}, -{63,-14,-18}, -{63,-14,-17}, -{63,-14,-16}, -{63,-14,-15}, -{63,-14,-14}, -{63,-14,-13}, -{63,-14,-12}, -{63,-14,-11}, -{63,-14,-10}, -{63,-14,-9}, -{63,-14,-8}, -{63,-14,-7}, -{63,-14,-6}, -{63,-14,-5}, -{63,-14,-4}, -{63,-14,-3}, -{63,-14,-2}, -{63,-14,-1}, -{63,-14,0}, -{63,-14,1}, -{63,-14,2}, -{63,-14,3}, -{63,-14,4}, -{63,-14,5}, -{63,-14,6}, -{63,-14,7}, -{63,-14,8}, -{63,-14,9}, -{63,-14,10}, -{63,-14,11}, -{63,-14,12}, -{63,-14,13}, -{63,-14,14}, -{63,-14,15}, -{63,-14,16}, -{63,-14,17}, -{63,-14,18}, -{63,-14,19}, -{63,-14,20}, -{63,-14,21}, -{63,-14,22}, -{63,-14,23}, -{63,-14,24}, -{63,-14,25}, -{63,-14,26}, -{63,-14,27}, -{63,-14,28}, -{63,-14,29}, -{63,-14,30}, -{63,-14,31}, -{63,-14,32}, -{63,-14,33}, -{63,-14,34}, -{63,-14,35}, -{63,-14,36}, -{63,-14,37}, -{63,-14,38}, -{63,-14,39}, -{63,-14,40}, -{63,-14,41}, -{63,-14,42}, -{63,-14,43}, -{63,-14,44}, -{63,-14,45}, -{63,-14,46}, -{63,-14,47}, -{63,-14,48}, -{63,-14,49}, -{63,-14,50}, -{63,-14,51}, -{63,-14,52}, -{63,-14,53}, -{63,-14,54}, -{63,-14,55}, -{63,-14,56}, -{63,-14,57}, -{63,-14,58}, -{63,-14,59}, -{63,-14,60}, -{63,-14,61}, -{63,-14,62}, -{63,-14,63}, -{63,-14,64}, -{63,-14,65}, -{63,-14,66}, -{63,-13,-41}, -{63,-13,-40}, -{63,-13,-39}, -{63,-13,-38}, -{63,-13,-37}, -{63,-13,-36}, -{63,-13,-35}, -{63,-13,-34}, -{63,-13,-33}, -{63,-13,-32}, -{63,-13,-31}, -{63,-13,-30}, -{63,-13,-29}, -{63,-13,-28}, -{63,-13,-27}, -{63,-13,-26}, -{63,-13,-25}, -{63,-13,-24}, -{63,-13,-23}, -{63,-13,-22}, -{63,-13,-21}, -{63,-13,-20}, -{63,-13,-19}, -{63,-13,-18}, -{63,-13,-17}, -{63,-13,-16}, -{63,-13,-15}, -{63,-13,-14}, -{63,-13,-13}, -{63,-13,-12}, -{63,-13,-11}, -{63,-13,-10}, -{63,-13,-9}, -{63,-13,-8}, -{63,-13,-7}, -{63,-13,-6}, -{63,-13,-5}, -{63,-13,-4}, -{63,-13,-3}, -{63,-13,-2}, -{63,-13,-1}, -{63,-13,0}, -{63,-13,1}, -{63,-13,2}, -{63,-13,3}, -{63,-13,4}, -{63,-13,5}, -{63,-13,6}, -{63,-13,7}, -{63,-13,8}, -{63,-13,9}, -{63,-13,10}, -{63,-13,11}, -{63,-13,12}, -{63,-13,13}, -{63,-13,14}, -{63,-13,15}, -{63,-13,16}, -{63,-13,17}, -{63,-13,18}, -{63,-13,19}, -{63,-13,20}, -{63,-13,21}, -{63,-13,22}, -{63,-13,23}, -{63,-13,24}, -{63,-13,25}, -{63,-13,26}, -{63,-13,27}, -{63,-13,28}, -{63,-13,29}, -{63,-13,30}, -{63,-13,31}, -{63,-13,32}, -{63,-13,33}, -{63,-13,34}, -{63,-13,35}, -{63,-13,36}, -{63,-13,37}, -{63,-13,38}, -{63,-13,39}, -{63,-13,40}, -{63,-13,41}, -{63,-13,42}, -{63,-13,43}, -{63,-13,44}, -{63,-13,45}, -{63,-13,46}, -{63,-13,47}, -{63,-13,48}, -{63,-13,49}, -{63,-13,50}, -{63,-13,51}, -{63,-13,52}, -{63,-13,53}, -{63,-13,54}, -{63,-13,55}, -{63,-13,56}, -{63,-13,57}, -{63,-13,58}, -{63,-13,59}, -{63,-13,60}, -{63,-13,61}, -{63,-13,62}, -{63,-13,63}, -{63,-13,64}, -{63,-13,65}, -{63,-13,66}, -{63,-12,-42}, -{63,-12,-41}, -{63,-12,-40}, -{63,-12,-39}, -{63,-12,-38}, -{63,-12,-37}, -{63,-12,-36}, -{63,-12,-35}, -{63,-12,-34}, -{63,-12,-33}, -{63,-12,-32}, -{63,-12,-31}, -{63,-12,-30}, -{63,-12,-29}, -{63,-12,-28}, -{63,-12,-27}, -{63,-12,-26}, -{63,-12,-25}, -{63,-12,-24}, -{63,-12,-23}, -{63,-12,-22}, -{63,-12,-21}, -{63,-12,-20}, -{63,-12,-19}, -{63,-12,-18}, -{63,-12,-17}, -{63,-12,-16}, -{63,-12,-15}, -{63,-12,-14}, -{63,-12,-13}, -{63,-12,-12}, -{63,-12,-11}, -{63,-12,-10}, -{63,-12,-9}, -{63,-12,-8}, -{63,-12,-7}, -{63,-12,-6}, -{63,-12,-5}, -{63,-12,-4}, -{63,-12,-3}, -{63,-12,-2}, -{63,-12,-1}, -{63,-12,0}, -{63,-12,1}, -{63,-12,2}, -{63,-12,3}, -{63,-12,4}, -{63,-12,5}, -{63,-12,6}, -{63,-12,7}, -{63,-12,8}, -{63,-12,9}, -{63,-12,10}, -{63,-12,11}, -{63,-12,12}, -{63,-12,13}, -{63,-12,14}, -{63,-12,15}, -{63,-12,16}, -{63,-12,17}, -{63,-12,18}, -{63,-12,19}, -{63,-12,20}, -{63,-12,21}, -{63,-12,22}, -{63,-12,23}, -{63,-12,24}, -{63,-12,25}, -{63,-12,26}, -{63,-12,27}, -{63,-12,28}, -{63,-12,29}, -{63,-12,30}, -{63,-12,31}, -{63,-12,32}, -{63,-12,33}, -{63,-12,34}, -{63,-12,35}, -{63,-12,36}, -{63,-12,37}, -{63,-12,38}, -{63,-12,39}, -{63,-12,40}, -{63,-12,41}, -{63,-12,42}, -{63,-12,43}, -{63,-12,44}, -{63,-12,45}, -{63,-12,46}, -{63,-12,47}, -{63,-12,48}, -{63,-12,49}, -{63,-12,50}, -{63,-12,51}, -{63,-12,52}, -{63,-12,53}, -{63,-12,54}, -{63,-12,55}, -{63,-12,56}, -{63,-12,57}, -{63,-12,58}, -{63,-12,59}, -{63,-12,60}, -{63,-12,61}, -{63,-12,62}, -{63,-12,63}, -{63,-12,64}, -{63,-12,65}, -{63,-12,66}, -{63,-11,-44}, -{63,-11,-43}, -{63,-11,-42}, -{63,-11,-41}, -{63,-11,-40}, -{63,-11,-39}, -{63,-11,-38}, -{63,-11,-37}, -{63,-11,-36}, -{63,-11,-35}, -{63,-11,-34}, -{63,-11,-33}, -{63,-11,-32}, -{63,-11,-31}, -{63,-11,-30}, -{63,-11,-29}, -{63,-11,-28}, -{63,-11,-27}, -{63,-11,-26}, -{63,-11,-25}, -{63,-11,-24}, -{63,-11,-23}, -{63,-11,-22}, -{63,-11,-21}, -{63,-11,-20}, -{63,-11,-19}, -{63,-11,-18}, -{63,-11,-17}, -{63,-11,-16}, -{63,-11,-15}, -{63,-11,-14}, -{63,-11,-13}, -{63,-11,-12}, -{63,-11,-11}, -{63,-11,-10}, -{63,-11,-9}, -{63,-11,-8}, -{63,-11,-7}, -{63,-11,-6}, -{63,-11,-5}, -{63,-11,-4}, -{63,-11,-3}, -{63,-11,-2}, -{63,-11,-1}, -{63,-11,0}, -{63,-11,1}, -{63,-11,2}, -{63,-11,3}, -{63,-11,4}, -{63,-11,5}, -{63,-11,6}, -{63,-11,7}, -{63,-11,8}, -{63,-11,9}, -{63,-11,10}, -{63,-11,11}, -{63,-11,12}, -{63,-11,13}, -{63,-11,14}, -{63,-11,15}, -{63,-11,16}, -{63,-11,17}, -{63,-11,18}, -{63,-11,19}, -{63,-11,20}, -{63,-11,21}, -{63,-11,22}, -{63,-11,23}, -{63,-11,24}, -{63,-11,25}, -{63,-11,26}, -{63,-11,27}, -{63,-11,28}, -{63,-11,29}, -{63,-11,30}, -{63,-11,31}, -{63,-11,32}, -{63,-11,33}, -{63,-11,34}, -{63,-11,35}, -{63,-11,36}, -{63,-11,37}, -{63,-11,38}, -{63,-11,39}, -{63,-11,40}, -{63,-11,41}, -{63,-11,42}, -{63,-11,43}, -{63,-11,44}, -{63,-11,45}, -{63,-11,46}, -{63,-11,47}, -{63,-11,48}, -{63,-11,49}, -{63,-11,50}, -{63,-11,51}, -{63,-11,52}, -{63,-11,53}, -{63,-11,54}, -{63,-11,55}, -{63,-11,56}, -{63,-11,57}, -{63,-11,58}, -{63,-11,59}, -{63,-11,60}, -{63,-11,61}, -{63,-11,62}, -{63,-11,63}, -{63,-11,64}, -{63,-11,65}, -{63,-11,66}, -{63,-10,-45}, -{63,-10,-44}, -{63,-10,-43}, -{63,-10,-42}, -{63,-10,-41}, -{63,-10,-40}, -{63,-10,-39}, -{63,-10,-38}, -{63,-10,-37}, -{63,-10,-36}, -{63,-10,-35}, -{63,-10,-34}, -{63,-10,-33}, -{63,-10,-32}, -{63,-10,-31}, -{63,-10,-30}, -{63,-10,-29}, -{63,-10,-28}, -{63,-10,-27}, -{63,-10,-26}, -{63,-10,-25}, -{63,-10,-24}, -{63,-10,-23}, -{63,-10,-22}, -{63,-10,-21}, -{63,-10,-20}, -{63,-10,-19}, -{63,-10,-18}, -{63,-10,-17}, -{63,-10,-16}, -{63,-10,-15}, -{63,-10,-14}, -{63,-10,-13}, -{63,-10,-12}, -{63,-10,-11}, -{63,-10,-10}, -{63,-10,-9}, -{63,-10,-8}, -{63,-10,-7}, -{63,-10,-6}, -{63,-10,-5}, -{63,-10,-4}, -{63,-10,-3}, -{63,-10,-2}, -{63,-10,-1}, -{63,-10,0}, -{63,-10,1}, -{63,-10,2}, -{63,-10,3}, -{63,-10,4}, -{63,-10,5}, -{63,-10,6}, -{63,-10,7}, -{63,-10,8}, -{63,-10,9}, -{63,-10,10}, -{63,-10,11}, -{63,-10,12}, -{63,-10,13}, -{63,-10,14}, -{63,-10,15}, -{63,-10,16}, -{63,-10,17}, -{63,-10,18}, -{63,-10,19}, -{63,-10,20}, -{63,-10,21}, -{63,-10,22}, -{63,-10,23}, -{63,-10,24}, -{63,-10,25}, -{63,-10,26}, -{63,-10,27}, -{63,-10,28}, -{63,-10,29}, -{63,-10,30}, -{63,-10,31}, -{63,-10,32}, -{63,-10,33}, -{63,-10,34}, -{63,-10,35}, -{63,-10,36}, -{63,-10,37}, -{63,-10,38}, -{63,-10,39}, -{63,-10,40}, -{63,-10,41}, -{63,-10,42}, -{63,-10,43}, -{63,-10,44}, -{63,-10,45}, -{63,-10,46}, -{63,-10,47}, -{63,-10,48}, -{63,-10,49}, -{63,-10,50}, -{63,-10,51}, -{63,-10,52}, -{63,-10,53}, -{63,-10,54}, -{63,-10,55}, -{63,-10,56}, -{63,-10,57}, -{63,-10,58}, -{63,-10,59}, -{63,-10,60}, -{63,-10,61}, -{63,-10,62}, -{63,-10,63}, -{63,-10,64}, -{63,-10,65}, -{63,-10,66}, -{63,-9,-46}, -{63,-9,-45}, -{63,-9,-44}, -{63,-9,-43}, -{63,-9,-42}, -{63,-9,-41}, -{63,-9,-40}, -{63,-9,-39}, -{63,-9,-38}, -{63,-9,-37}, -{63,-9,-36}, -{63,-9,-35}, -{63,-9,-34}, -{63,-9,-33}, -{63,-9,-32}, -{63,-9,-31}, -{63,-9,-30}, -{63,-9,-29}, -{63,-9,-28}, -{63,-9,-27}, -{63,-9,-26}, -{63,-9,-25}, -{63,-9,-24}, -{63,-9,-23}, -{63,-9,-22}, -{63,-9,-21}, -{63,-9,-20}, -{63,-9,-19}, -{63,-9,-18}, -{63,-9,-17}, -{63,-9,-16}, -{63,-9,-15}, -{63,-9,-14}, -{63,-9,-13}, -{63,-9,-12}, -{63,-9,-11}, -{63,-9,-10}, -{63,-9,-9}, -{63,-9,-8}, -{63,-9,-7}, -{63,-9,-6}, -{63,-9,-5}, -{63,-9,-4}, -{63,-9,-3}, -{63,-9,-2}, -{63,-9,-1}, -{63,-9,0}, -{63,-9,1}, -{63,-9,2}, -{63,-9,3}, -{63,-9,4}, -{63,-9,5}, -{63,-9,6}, -{63,-9,7}, -{63,-9,8}, -{63,-9,9}, -{63,-9,10}, -{63,-9,11}, -{63,-9,12}, -{63,-9,13}, -{63,-9,14}, -{63,-9,15}, -{63,-9,16}, -{63,-9,17}, -{63,-9,18}, -{63,-9,19}, -{63,-9,20}, -{63,-9,21}, -{63,-9,22}, -{63,-9,23}, -{63,-9,24}, -{63,-9,25}, -{63,-9,26}, -{63,-9,27}, -{63,-9,28}, -{63,-9,29}, -{63,-9,30}, -{63,-9,31}, -{63,-9,32}, -{63,-9,33}, -{63,-9,34}, -{63,-9,35}, -{63,-9,36}, -{63,-9,37}, -{63,-9,38}, -{63,-9,39}, -{63,-9,40}, -{63,-9,41}, -{63,-9,42}, -{63,-9,43}, -{63,-9,44}, -{63,-9,45}, -{63,-9,46}, -{63,-9,47}, -{63,-9,48}, -{63,-9,49}, -{63,-9,50}, -{63,-9,51}, -{63,-9,52}, -{63,-9,53}, -{63,-9,54}, -{63,-9,55}, -{63,-9,56}, -{63,-9,57}, -{63,-9,58}, -{63,-9,59}, -{63,-9,60}, -{63,-9,61}, -{63,-9,62}, -{63,-9,63}, -{63,-9,64}, -{63,-9,65}, -{63,-9,66}, -{63,-8,-47}, -{63,-8,-46}, -{63,-8,-45}, -{63,-8,-44}, -{63,-8,-43}, -{63,-8,-42}, -{63,-8,-41}, -{63,-8,-40}, -{63,-8,-39}, -{63,-8,-38}, -{63,-8,-37}, -{63,-8,-36}, -{63,-8,-35}, -{63,-8,-34}, -{63,-8,-33}, -{63,-8,-32}, -{63,-8,-31}, -{63,-8,-30}, -{63,-8,-29}, -{63,-8,-28}, -{63,-8,-27}, -{63,-8,-26}, -{63,-8,-25}, -{63,-8,-24}, -{63,-8,-23}, -{63,-8,-22}, -{63,-8,-21}, -{63,-8,-20}, -{63,-8,-19}, -{63,-8,-18}, -{63,-8,-17}, -{63,-8,-16}, -{63,-8,-15}, -{63,-8,-14}, -{63,-8,-13}, -{63,-8,-12}, -{63,-8,-11}, -{63,-8,-10}, -{63,-8,-9}, -{63,-8,-8}, -{63,-8,-7}, -{63,-8,-6}, -{63,-8,-5}, -{63,-8,-4}, -{63,-8,-3}, -{63,-8,-2}, -{63,-8,-1}, -{63,-8,0}, -{63,-8,1}, -{63,-8,2}, -{63,-8,3}, -{63,-8,4}, -{63,-8,5}, -{63,-8,6}, -{63,-8,7}, -{63,-8,8}, -{63,-8,9}, -{63,-8,10}, -{63,-8,11}, -{63,-8,12}, -{63,-8,13}, -{63,-8,14}, -{63,-8,15}, -{63,-8,16}, -{63,-8,17}, -{63,-8,18}, -{63,-8,19}, -{63,-8,20}, -{63,-8,21}, -{63,-8,22}, -{63,-8,23}, -{63,-8,24}, -{63,-8,25}, -{63,-8,26}, -{63,-8,27}, -{63,-8,28}, -{63,-8,29}, -{63,-8,30}, -{63,-8,31}, -{63,-8,32}, -{63,-8,33}, -{63,-8,34}, -{63,-8,35}, -{63,-8,36}, -{63,-8,37}, -{63,-8,38}, -{63,-8,39}, -{63,-8,40}, -{63,-8,41}, -{63,-8,42}, -{63,-8,43}, -{63,-8,44}, -{63,-8,45}, -{63,-8,46}, -{63,-8,47}, -{63,-8,48}, -{63,-8,49}, -{63,-8,50}, -{63,-8,51}, -{63,-8,52}, -{63,-8,53}, -{63,-8,54}, -{63,-8,55}, -{63,-8,56}, -{63,-8,57}, -{63,-8,58}, -{63,-8,59}, -{63,-8,60}, -{63,-8,61}, -{63,-8,62}, -{63,-8,63}, -{63,-8,64}, -{63,-8,65}, -{63,-8,66}, -{63,-7,-48}, -{63,-7,-47}, -{63,-7,-46}, -{63,-7,-45}, -{63,-7,-44}, -{63,-7,-43}, -{63,-7,-42}, -{63,-7,-41}, -{63,-7,-40}, -{63,-7,-39}, -{63,-7,-38}, -{63,-7,-37}, -{63,-7,-36}, -{63,-7,-35}, -{63,-7,-34}, -{63,-7,-33}, -{63,-7,-32}, -{63,-7,-31}, -{63,-7,-30}, -{63,-7,-29}, -{63,-7,-28}, -{63,-7,-27}, -{63,-7,-26}, -{63,-7,-25}, -{63,-7,-24}, -{63,-7,-23}, -{63,-7,-22}, -{63,-7,-21}, -{63,-7,-20}, -{63,-7,-19}, -{63,-7,-18}, -{63,-7,-17}, -{63,-7,-16}, -{63,-7,-15}, -{63,-7,-14}, -{63,-7,-13}, -{63,-7,-12}, -{63,-7,-11}, -{63,-7,-10}, -{63,-7,-9}, -{63,-7,-8}, -{63,-7,-7}, -{63,-7,-6}, -{63,-7,-5}, -{63,-7,-4}, -{63,-7,-3}, -{63,-7,-2}, -{63,-7,-1}, -{63,-7,0}, -{63,-7,1}, -{63,-7,2}, -{63,-7,3}, -{63,-7,4}, -{63,-7,5}, -{63,-7,6}, -{63,-7,7}, -{63,-7,8}, -{63,-7,9}, -{63,-7,10}, -{63,-7,11}, -{63,-7,12}, -{63,-7,13}, -{63,-7,14}, -{63,-7,15}, -{63,-7,16}, -{63,-7,17}, -{63,-7,18}, -{63,-7,19}, -{63,-7,20}, -{63,-7,21}, -{63,-7,22}, -{63,-7,23}, -{63,-7,24}, -{63,-7,25}, -{63,-7,26}, -{63,-7,27}, -{63,-7,28}, -{63,-7,29}, -{63,-7,30}, -{63,-7,31}, -{63,-7,32}, -{63,-7,33}, -{63,-7,34}, -{63,-7,35}, -{63,-7,36}, -{63,-7,37}, -{63,-7,38}, -{63,-7,39}, -{63,-7,40}, -{63,-7,41}, -{63,-7,42}, -{63,-7,43}, -{63,-7,44}, -{63,-7,45}, -{63,-7,46}, -{63,-7,47}, -{63,-7,48}, -{63,-7,49}, -{63,-7,50}, -{63,-7,51}, -{63,-7,52}, -{63,-7,53}, -{63,-7,54}, -{63,-7,55}, -{63,-7,56}, -{63,-7,57}, -{63,-7,58}, -{63,-7,59}, -{63,-7,60}, -{63,-7,61}, -{63,-7,62}, -{63,-7,63}, -{63,-7,64}, -{63,-7,65}, -{63,-7,66}, -{63,-6,-50}, -{63,-6,-49}, -{63,-6,-48}, -{63,-6,-47}, -{63,-6,-46}, -{63,-6,-45}, -{63,-6,-44}, -{63,-6,-43}, -{63,-6,-42}, -{63,-6,-41}, -{63,-6,-40}, -{63,-6,-39}, -{63,-6,-38}, -{63,-6,-37}, -{63,-6,-36}, -{63,-6,-35}, -{63,-6,-34}, -{63,-6,-33}, -{63,-6,-32}, -{63,-6,-31}, -{63,-6,-30}, -{63,-6,-29}, -{63,-6,-28}, -{63,-6,-27}, -{63,-6,-26}, -{63,-6,-25}, -{63,-6,-24}, -{63,-6,-23}, -{63,-6,-22}, -{63,-6,-21}, -{63,-6,-20}, -{63,-6,-19}, -{63,-6,-18}, -{63,-6,-17}, -{63,-6,-16}, -{63,-6,-15}, -{63,-6,-14}, -{63,-6,-13}, -{63,-6,-12}, -{63,-6,-11}, -{63,-6,-10}, -{63,-6,-9}, -{63,-6,-8}, -{63,-6,-7}, -{63,-6,-6}, -{63,-6,-5}, -{63,-6,-4}, -{63,-6,-3}, -{63,-6,-2}, -{63,-6,-1}, -{63,-6,0}, -{63,-6,1}, -{63,-6,2}, -{63,-6,3}, -{63,-6,4}, -{63,-6,5}, -{63,-6,6}, -{63,-6,7}, -{63,-6,8}, -{63,-6,9}, -{63,-6,10}, -{63,-6,11}, -{63,-6,12}, -{63,-6,13}, -{63,-6,14}, -{63,-6,15}, -{63,-6,16}, -{63,-6,17}, -{63,-6,18}, -{63,-6,19}, -{63,-6,20}, -{63,-6,21}, -{63,-6,22}, -{63,-6,23}, -{63,-6,24}, -{63,-6,25}, -{63,-6,26}, -{63,-6,27}, -{63,-6,28}, -{63,-6,29}, -{63,-6,30}, -{63,-6,31}, -{63,-6,32}, -{63,-6,33}, -{63,-6,34}, -{63,-6,35}, -{63,-6,36}, -{63,-6,37}, -{63,-6,38}, -{63,-6,39}, -{63,-6,40}, -{63,-6,41}, -{63,-6,42}, -{63,-6,43}, -{63,-6,44}, -{63,-6,45}, -{63,-6,46}, -{63,-6,47}, -{63,-6,48}, -{63,-6,49}, -{63,-6,50}, -{63,-6,51}, -{63,-6,52}, -{63,-6,53}, -{63,-6,54}, -{63,-6,55}, -{63,-6,56}, -{63,-6,57}, -{63,-6,58}, -{63,-6,59}, -{63,-6,60}, -{63,-6,61}, -{63,-6,62}, -{63,-6,63}, -{63,-6,64}, -{63,-6,65}, -{63,-6,66}, -{63,-5,-51}, -{63,-5,-50}, -{63,-5,-49}, -{63,-5,-48}, -{63,-5,-47}, -{63,-5,-46}, -{63,-5,-45}, -{63,-5,-44}, -{63,-5,-43}, -{63,-5,-42}, -{63,-5,-41}, -{63,-5,-40}, -{63,-5,-39}, -{63,-5,-38}, -{63,-5,-37}, -{63,-5,-36}, -{63,-5,-35}, -{63,-5,-34}, -{63,-5,-33}, -{63,-5,-32}, -{63,-5,-31}, -{63,-5,-30}, -{63,-5,-29}, -{63,-5,-28}, -{63,-5,-27}, -{63,-5,-26}, -{63,-5,-25}, -{63,-5,-24}, -{63,-5,-23}, -{63,-5,-22}, -{63,-5,-21}, -{63,-5,-20}, -{63,-5,-19}, -{63,-5,-18}, -{63,-5,-17}, -{63,-5,-16}, -{63,-5,-15}, -{63,-5,-14}, -{63,-5,-13}, -{63,-5,-12}, -{63,-5,-11}, -{63,-5,-10}, -{63,-5,-9}, -{63,-5,-8}, -{63,-5,-7}, -{63,-5,-6}, -{63,-5,-5}, -{63,-5,-4}, -{63,-5,-3}, -{63,-5,-2}, -{63,-5,-1}, -{63,-5,0}, -{63,-5,1}, -{63,-5,2}, -{63,-5,3}, -{63,-5,4}, -{63,-5,5}, -{63,-5,6}, -{63,-5,7}, -{63,-5,8}, -{63,-5,9}, -{63,-5,10}, -{63,-5,11}, -{63,-5,12}, -{63,-5,13}, -{63,-5,14}, -{63,-5,15}, -{63,-5,16}, -{63,-5,17}, -{63,-5,18}, -{63,-5,19}, -{63,-5,20}, -{63,-5,21}, -{63,-5,22}, -{63,-5,23}, -{63,-5,24}, -{63,-5,25}, -{63,-5,26}, -{63,-5,27}, -{63,-5,28}, -{63,-5,29}, -{63,-5,30}, -{63,-5,31}, -{63,-5,32}, -{63,-5,33}, -{63,-5,34}, -{63,-5,35}, -{63,-5,36}, -{63,-5,37}, -{63,-5,38}, -{63,-5,39}, -{63,-5,40}, -{63,-5,41}, -{63,-5,42}, -{63,-5,43}, -{63,-5,44}, -{63,-5,45}, -{63,-5,46}, -{63,-5,47}, -{63,-5,48}, -{63,-5,49}, -{63,-5,50}, -{63,-5,51}, -{63,-5,52}, -{63,-5,53}, -{63,-5,54}, -{63,-5,55}, -{63,-5,56}, -{63,-5,57}, -{63,-5,58}, -{63,-5,59}, -{63,-5,60}, -{63,-5,61}, -{63,-5,62}, -{63,-5,63}, -{63,-5,64}, -{63,-5,65}, -{63,-5,66}, -{63,-4,-52}, -{63,-4,-51}, -{63,-4,-50}, -{63,-4,-49}, -{63,-4,-48}, -{63,-4,-47}, -{63,-4,-46}, -{63,-4,-45}, -{63,-4,-44}, -{63,-4,-43}, -{63,-4,-42}, -{63,-4,-41}, -{63,-4,-40}, -{63,-4,-39}, -{63,-4,-38}, -{63,-4,-37}, -{63,-4,-36}, -{63,-4,-35}, -{63,-4,-34}, -{63,-4,-33}, -{63,-4,-32}, -{63,-4,-31}, -{63,-4,-30}, -{63,-4,-29}, -{63,-4,-28}, -{63,-4,-27}, -{63,-4,-26}, -{63,-4,-25}, -{63,-4,-24}, -{63,-4,-23}, -{63,-4,-22}, -{63,-4,-21}, -{63,-4,-20}, -{63,-4,-19}, -{63,-4,-18}, -{63,-4,-17}, -{63,-4,-16}, -{63,-4,-15}, -{63,-4,-14}, -{63,-4,-13}, -{63,-4,-12}, -{63,-4,-11}, -{63,-4,-10}, -{63,-4,-9}, -{63,-4,-8}, -{63,-4,-7}, -{63,-4,-6}, -{63,-4,-5}, -{63,-4,-4}, -{63,-4,-3}, -{63,-4,-2}, -{63,-4,-1}, -{63,-4,0}, -{63,-4,1}, -{63,-4,2}, -{63,-4,3}, -{63,-4,4}, -{63,-4,5}, -{63,-4,6}, -{63,-4,7}, -{63,-4,8}, -{63,-4,9}, -{63,-4,10}, -{63,-4,11}, -{63,-4,12}, -{63,-4,13}, -{63,-4,14}, -{63,-4,15}, -{63,-4,16}, -{63,-4,17}, -{63,-4,18}, -{63,-4,19}, -{63,-4,20}, -{63,-4,21}, -{63,-4,22}, -{63,-4,23}, -{63,-4,24}, -{63,-4,25}, -{63,-4,26}, -{63,-4,27}, -{63,-4,28}, -{63,-4,29}, -{63,-4,30}, -{63,-4,31}, -{63,-4,32}, -{63,-4,33}, -{63,-4,34}, -{63,-4,35}, -{63,-4,36}, -{63,-4,37}, -{63,-4,38}, -{63,-4,39}, -{63,-4,40}, -{63,-4,41}, -{63,-4,42}, -{63,-4,43}, -{63,-4,44}, -{63,-4,45}, -{63,-4,46}, -{63,-4,47}, -{63,-4,48}, -{63,-4,49}, -{63,-4,50}, -{63,-4,51}, -{63,-4,52}, -{63,-4,53}, -{63,-4,54}, -{63,-4,55}, -{63,-4,56}, -{63,-4,57}, -{63,-4,58}, -{63,-4,59}, -{63,-4,60}, -{63,-4,61}, -{63,-4,62}, -{63,-4,63}, -{63,-4,64}, -{63,-4,65}, -{63,-4,66}, -{63,-3,-53}, -{63,-3,-52}, -{63,-3,-51}, -{63,-3,-50}, -{63,-3,-49}, -{63,-3,-48}, -{63,-3,-47}, -{63,-3,-46}, -{63,-3,-45}, -{63,-3,-44}, -{63,-3,-43}, -{63,-3,-42}, -{63,-3,-41}, -{63,-3,-40}, -{63,-3,-39}, -{63,-3,-38}, -{63,-3,-37}, -{63,-3,-36}, -{63,-3,-35}, -{63,-3,-34}, -{63,-3,-33}, -{63,-3,-32}, -{63,-3,-31}, -{63,-3,-30}, -{63,-3,-29}, -{63,-3,-28}, -{63,-3,-27}, -{63,-3,-26}, -{63,-3,-25}, -{63,-3,-24}, -{63,-3,-23}, -{63,-3,-22}, -{63,-3,-21}, -{63,-3,-20}, -{63,-3,-19}, -{63,-3,-18}, -{63,-3,-17}, -{63,-3,-16}, -{63,-3,-15}, -{63,-3,-14}, -{63,-3,-13}, -{63,-3,-12}, -{63,-3,-11}, -{63,-3,-10}, -{63,-3,-9}, -{63,-3,-8}, -{63,-3,-7}, -{63,-3,-6}, -{63,-3,-5}, -{63,-3,-4}, -{63,-3,-3}, -{63,-3,-2}, -{63,-3,-1}, -{63,-3,0}, -{63,-3,1}, -{63,-3,2}, -{63,-3,3}, -{63,-3,4}, -{63,-3,5}, -{63,-3,6}, -{63,-3,7}, -{63,-3,8}, -{63,-3,9}, -{63,-3,10}, -{63,-3,11}, -{63,-3,12}, -{63,-3,13}, -{63,-3,14}, -{63,-3,15}, -{63,-3,16}, -{63,-3,17}, -{63,-3,18}, -{63,-3,19}, -{63,-3,20}, -{63,-3,21}, -{63,-3,22}, -{63,-3,23}, -{63,-3,24}, -{63,-3,25}, -{63,-3,26}, -{63,-3,27}, -{63,-3,28}, -{63,-3,29}, -{63,-3,30}, -{63,-3,31}, -{63,-3,32}, -{63,-3,33}, -{63,-3,34}, -{63,-3,35}, -{63,-3,36}, -{63,-3,37}, -{63,-3,38}, -{63,-3,39}, -{63,-3,40}, -{63,-3,41}, -{63,-3,42}, -{63,-3,43}, -{63,-3,44}, -{63,-3,45}, -{63,-3,46}, -{63,-3,47}, -{63,-3,48}, -{63,-3,49}, -{63,-3,50}, -{63,-3,51}, -{63,-3,52}, -{63,-3,53}, -{63,-3,54}, -{63,-3,55}, -{63,-3,56}, -{63,-3,57}, -{63,-3,58}, -{63,-3,59}, -{63,-3,60}, -{63,-3,61}, -{63,-3,62}, -{63,-3,63}, -{63,-3,64}, -{63,-3,65}, -{63,-3,66}, -{63,-2,-54}, -{63,-2,-53}, -{63,-2,-52}, -{63,-2,-51}, -{63,-2,-50}, -{63,-2,-49}, -{63,-2,-48}, -{63,-2,-47}, -{63,-2,-46}, -{63,-2,-45}, -{63,-2,-44}, -{63,-2,-43}, -{63,-2,-42}, -{63,-2,-41}, -{63,-2,-40}, -{63,-2,-39}, -{63,-2,-38}, -{63,-2,-37}, -{63,-2,-36}, -{63,-2,-35}, -{63,-2,-34}, -{63,-2,-33}, -{63,-2,-32}, -{63,-2,-31}, -{63,-2,-30}, -{63,-2,-29}, -{63,-2,-28}, -{63,-2,-27}, -{63,-2,-26}, -{63,-2,-25}, -{63,-2,-24}, -{63,-2,-23}, -{63,-2,-22}, -{63,-2,-21}, -{63,-2,-20}, -{63,-2,-19}, -{63,-2,-18}, -{63,-2,-17}, -{63,-2,-16}, -{63,-2,-15}, -{63,-2,-14}, -{63,-2,-13}, -{63,-2,-12}, -{63,-2,-11}, -{63,-2,-10}, -{63,-2,-9}, -{63,-2,-8}, -{63,-2,-7}, -{63,-2,-6}, -{63,-2,-5}, -{63,-2,-4}, -{63,-2,-3}, -{63,-2,-2}, -{63,-2,-1}, -{63,-2,0}, -{63,-2,1}, -{63,-2,2}, -{63,-2,3}, -{63,-2,4}, -{63,-2,5}, -{63,-2,6}, -{63,-2,7}, -{63,-2,8}, -{63,-2,9}, -{63,-2,10}, -{63,-2,11}, -{63,-2,12}, -{63,-2,13}, -{63,-2,14}, -{63,-2,15}, -{63,-2,16}, -{63,-2,17}, -{63,-2,18}, -{63,-2,19}, -{63,-2,20}, -{63,-2,21}, -{63,-2,22}, -{63,-2,23}, -{63,-2,24}, -{63,-2,25}, -{63,-2,26}, -{63,-2,27}, -{63,-2,28}, -{63,-2,29}, -{63,-2,30}, -{63,-2,31}, -{63,-2,32}, -{63,-2,33}, -{63,-2,34}, -{63,-2,35}, -{63,-2,36}, -{63,-2,37}, -{63,-2,38}, -{63,-2,39}, -{63,-2,40}, -{63,-2,41}, -{63,-2,42}, -{63,-2,43}, -{63,-2,44}, -{63,-2,45}, -{63,-2,46}, -{63,-2,47}, -{63,-2,48}, -{63,-2,49}, -{63,-2,50}, -{63,-2,51}, -{63,-2,52}, -{63,-2,53}, -{63,-2,54}, -{63,-2,55}, -{63,-2,56}, -{63,-2,57}, -{63,-2,58}, -{63,-2,59}, -{63,-2,60}, -{63,-2,61}, -{63,-2,62}, -{63,-2,63}, -{63,-2,64}, -{63,-2,65}, -{63,-2,66}, -{63,-2,67}, -{63,-1,-55}, -{63,-1,-54}, -{63,-1,-53}, -{63,-1,-52}, -{63,-1,-51}, -{63,-1,-50}, -{63,-1,-49}, -{63,-1,-48}, -{63,-1,-47}, -{63,-1,-46}, -{63,-1,-45}, -{63,-1,-44}, -{63,-1,-43}, -{63,-1,-42}, -{63,-1,-41}, -{63,-1,-40}, -{63,-1,-39}, -{63,-1,-38}, -{63,-1,-37}, -{63,-1,-36}, -{63,-1,-35}, -{63,-1,-34}, -{63,-1,-33}, -{63,-1,-32}, -{63,-1,-31}, -{63,-1,-30}, -{63,-1,-29}, -{63,-1,-28}, -{63,-1,-27}, -{63,-1,-26}, -{63,-1,-25}, -{63,-1,-24}, -{63,-1,-23}, -{63,-1,-22}, -{63,-1,-21}, -{63,-1,-20}, -{63,-1,-19}, -{63,-1,-18}, -{63,-1,-17}, -{63,-1,-16}, -{63,-1,-15}, -{63,-1,-14}, -{63,-1,-13}, -{63,-1,-12}, -{63,-1,-11}, -{63,-1,-10}, -{63,-1,-9}, -{63,-1,-8}, -{63,-1,-7}, -{63,-1,-6}, -{63,-1,-5}, -{63,-1,-4}, -{63,-1,-3}, -{63,-1,-2}, -{63,-1,-1}, -{63,-1,0}, -{63,-1,1}, -{63,-1,2}, -{63,-1,3}, -{63,-1,4}, -{63,-1,5}, -{63,-1,6}, -{63,-1,7}, -{63,-1,8}, -{63,-1,9}, -{63,-1,10}, -{63,-1,11}, -{63,-1,12}, -{63,-1,13}, -{63,-1,14}, -{63,-1,15}, -{63,-1,16}, -{63,-1,17}, -{63,-1,18}, -{63,-1,19}, -{63,-1,20}, -{63,-1,21}, -{63,-1,22}, -{63,-1,23}, -{63,-1,24}, -{63,-1,25}, -{63,-1,26}, -{63,-1,27}, -{63,-1,28}, -{63,-1,29}, -{63,-1,30}, -{63,-1,31}, -{63,-1,32}, -{63,-1,33}, -{63,-1,34}, -{63,-1,35}, -{63,-1,36}, -{63,-1,37}, -{63,-1,38}, -{63,-1,39}, -{63,-1,40}, -{63,-1,41}, -{63,-1,42}, -{63,-1,43}, -{63,-1,44}, -{63,-1,45}, -{63,-1,46}, -{63,-1,47}, -{63,-1,48}, -{63,-1,49}, -{63,-1,50}, -{63,-1,51}, -{63,-1,52}, -{63,-1,53}, -{63,-1,54}, -{63,-1,55}, -{63,-1,56}, -{63,-1,57}, -{63,-1,58}, -{63,-1,59}, -{63,-1,60}, -{63,-1,61}, -{63,-1,62}, -{63,-1,63}, -{63,-1,64}, -{63,-1,65}, -{63,-1,66}, -{63,-1,67}, -{63,0,-56}, -{63,0,-55}, -{63,0,-54}, -{63,0,-53}, -{63,0,-52}, -{63,0,-51}, -{63,0,-50}, -{63,0,-49}, -{63,0,-48}, -{63,0,-47}, -{63,0,-46}, -{63,0,-45}, -{63,0,-44}, -{63,0,-43}, -{63,0,-42}, -{63,0,-41}, -{63,0,-40}, -{63,0,-39}, -{63,0,-38}, -{63,0,-37}, -{63,0,-36}, -{63,0,-35}, -{63,0,-34}, -{63,0,-33}, -{63,0,-32}, -{63,0,-31}, -{63,0,-30}, -{63,0,-29}, -{63,0,-28}, -{63,0,-27}, -{63,0,-26}, -{63,0,-25}, -{63,0,-24}, -{63,0,-23}, -{63,0,-22}, -{63,0,-21}, -{63,0,-20}, -{63,0,-19}, -{63,0,-18}, -{63,0,-17}, -{63,0,-16}, -{63,0,-15}, -{63,0,-14}, -{63,0,-13}, -{63,0,-12}, -{63,0,-11}, -{63,0,-10}, -{63,0,-9}, -{63,0,-8}, -{63,0,-7}, -{63,0,-6}, -{63,0,-5}, -{63,0,-4}, -{63,0,-3}, -{63,0,-2}, -{63,0,-1}, -{63,0,0}, -{63,0,1}, -{63,0,2}, -{63,0,3}, -{63,0,4}, -{63,0,5}, -{63,0,6}, -{63,0,7}, -{63,0,8}, -{63,0,9}, -{63,0,10}, -{63,0,11}, -{63,0,12}, -{63,0,13}, -{63,0,14}, -{63,0,15}, -{63,0,16}, -{63,0,17}, -{63,0,18}, -{63,0,19}, -{63,0,20}, -{63,0,21}, -{63,0,22}, -{63,0,23}, -{63,0,24}, -{63,0,25}, -{63,0,26}, -{63,0,27}, -{63,0,28}, -{63,0,29}, -{63,0,30}, -{63,0,31}, -{63,0,32}, -{63,0,33}, -{63,0,34}, -{63,0,35}, -{63,0,36}, -{63,0,37}, -{63,0,38}, -{63,0,39}, -{63,0,40}, -{63,0,41}, -{63,0,42}, -{63,0,43}, -{63,0,44}, -{63,0,45}, -{63,0,46}, -{63,0,47}, -{63,0,48}, -{63,0,49}, -{63,0,50}, -{63,0,51}, -{63,0,52}, -{63,0,53}, -{63,0,54}, -{63,0,55}, -{63,0,56}, -{63,0,57}, -{63,0,58}, -{63,0,59}, -{63,0,60}, -{63,0,61}, -{63,0,62}, -{63,0,63}, -{63,0,64}, -{63,0,65}, -{63,0,66}, -{63,0,67}, -{63,1,-57}, -{63,1,-56}, -{63,1,-55}, -{63,1,-54}, -{63,1,-53}, -{63,1,-52}, -{63,1,-51}, -{63,1,-50}, -{63,1,-49}, -{63,1,-48}, -{63,1,-47}, -{63,1,-46}, -{63,1,-45}, -{63,1,-44}, -{63,1,-43}, -{63,1,-42}, -{63,1,-41}, -{63,1,-40}, -{63,1,-39}, -{63,1,-38}, -{63,1,-37}, -{63,1,-36}, -{63,1,-35}, -{63,1,-34}, -{63,1,-33}, -{63,1,-32}, -{63,1,-31}, -{63,1,-30}, -{63,1,-29}, -{63,1,-28}, -{63,1,-27}, -{63,1,-26}, -{63,1,-25}, -{63,1,-24}, -{63,1,-23}, -{63,1,-22}, -{63,1,-21}, -{63,1,-20}, -{63,1,-19}, -{63,1,-18}, -{63,1,-17}, -{63,1,-16}, -{63,1,-15}, -{63,1,-14}, -{63,1,-13}, -{63,1,-12}, -{63,1,-11}, -{63,1,-10}, -{63,1,-9}, -{63,1,-8}, -{63,1,-7}, -{63,1,-6}, -{63,1,-5}, -{63,1,-4}, -{63,1,-3}, -{63,1,-2}, -{63,1,-1}, -{63,1,0}, -{63,1,1}, -{63,1,2}, -{63,1,3}, -{63,1,4}, -{63,1,5}, -{63,1,6}, -{63,1,7}, -{63,1,8}, -{63,1,9}, -{63,1,10}, -{63,1,11}, -{63,1,12}, -{63,1,13}, -{63,1,14}, -{63,1,15}, -{63,1,16}, -{63,1,17}, -{63,1,18}, -{63,1,19}, -{63,1,20}, -{63,1,21}, -{63,1,22}, -{63,1,23}, -{63,1,24}, -{63,1,25}, -{63,1,26}, -{63,1,27}, -{63,1,28}, -{63,1,29}, -{63,1,30}, -{63,1,31}, -{63,1,32}, -{63,1,33}, -{63,1,34}, -{63,1,35}, -{63,1,36}, -{63,1,37}, -{63,1,38}, -{63,1,39}, -{63,1,40}, -{63,1,41}, -{63,1,42}, -{63,1,43}, -{63,1,44}, -{63,1,45}, -{63,1,46}, -{63,1,47}, -{63,1,48}, -{63,1,49}, -{63,1,50}, -{63,1,51}, -{63,1,52}, -{63,1,53}, -{63,1,54}, -{63,1,55}, -{63,1,56}, -{63,1,57}, -{63,1,58}, -{63,1,59}, -{63,1,60}, -{63,1,61}, -{63,1,62}, -{63,1,63}, -{63,1,64}, -{63,1,65}, -{63,1,66}, -{63,1,67}, -{63,2,-57}, -{63,2,-56}, -{63,2,-55}, -{63,2,-54}, -{63,2,-53}, -{63,2,-52}, -{63,2,-51}, -{63,2,-50}, -{63,2,-49}, -{63,2,-48}, -{63,2,-47}, -{63,2,-46}, -{63,2,-45}, -{63,2,-44}, -{63,2,-43}, -{63,2,-42}, -{63,2,-41}, -{63,2,-40}, -{63,2,-39}, -{63,2,-38}, -{63,2,-37}, -{63,2,-36}, -{63,2,-35}, -{63,2,-34}, -{63,2,-33}, -{63,2,-32}, -{63,2,-31}, -{63,2,-30}, -{63,2,-29}, -{63,2,-28}, -{63,2,-27}, -{63,2,-26}, -{63,2,-25}, -{63,2,-24}, -{63,2,-23}, -{63,2,-22}, -{63,2,-21}, -{63,2,-20}, -{63,2,-19}, -{63,2,-18}, -{63,2,-17}, -{63,2,-16}, -{63,2,-15}, -{63,2,-14}, -{63,2,-13}, -{63,2,-12}, -{63,2,-11}, -{63,2,-10}, -{63,2,-9}, -{63,2,-8}, -{63,2,-7}, -{63,2,-6}, -{63,2,-5}, -{63,2,-4}, -{63,2,-3}, -{63,2,-2}, -{63,2,-1}, -{63,2,0}, -{63,2,1}, -{63,2,2}, -{63,2,3}, -{63,2,4}, -{63,2,5}, -{63,2,6}, -{63,2,7}, -{63,2,8}, -{63,2,9}, -{63,2,10}, -{63,2,11}, -{63,2,12}, -{63,2,13}, -{63,2,14}, -{63,2,15}, -{63,2,16}, -{63,2,17}, -{63,2,18}, -{63,2,19}, -{63,2,20}, -{63,2,21}, -{63,2,22}, -{63,2,23}, -{63,2,24}, -{63,2,25}, -{63,2,26}, -{63,2,27}, -{63,2,28}, -{63,2,29}, -{63,2,30}, -{63,2,31}, -{63,2,32}, -{63,2,33}, -{63,2,34}, -{63,2,35}, -{63,2,36}, -{63,2,37}, -{63,2,38}, -{63,2,39}, -{63,2,40}, -{63,2,41}, -{63,2,42}, -{63,2,43}, -{63,2,44}, -{63,2,45}, -{63,2,46}, -{63,2,47}, -{63,2,48}, -{63,2,49}, -{63,2,50}, -{63,2,51}, -{63,2,52}, -{63,2,53}, -{63,2,54}, -{63,2,55}, -{63,2,56}, -{63,2,57}, -{63,2,58}, -{63,2,59}, -{63,2,60}, -{63,2,61}, -{63,2,62}, -{63,2,63}, -{63,2,64}, -{63,2,65}, -{63,2,66}, -{63,2,67}, -{63,3,-57}, -{63,3,-56}, -{63,3,-55}, -{63,3,-54}, -{63,3,-53}, -{63,3,-52}, -{63,3,-51}, -{63,3,-50}, -{63,3,-49}, -{63,3,-48}, -{63,3,-47}, -{63,3,-46}, -{63,3,-45}, -{63,3,-44}, -{63,3,-43}, -{63,3,-42}, -{63,3,-41}, -{63,3,-40}, -{63,3,-39}, -{63,3,-38}, -{63,3,-37}, -{63,3,-36}, -{63,3,-35}, -{63,3,-34}, -{63,3,-33}, -{63,3,-32}, -{63,3,-31}, -{63,3,-30}, -{63,3,-29}, -{63,3,-28}, -{63,3,-27}, -{63,3,-26}, -{63,3,-25}, -{63,3,-24}, -{63,3,-23}, -{63,3,-22}, -{63,3,-21}, -{63,3,-20}, -{63,3,-19}, -{63,3,-18}, -{63,3,-17}, -{63,3,-16}, -{63,3,-15}, -{63,3,-14}, -{63,3,-13}, -{63,3,-12}, -{63,3,-11}, -{63,3,-10}, -{63,3,-9}, -{63,3,-8}, -{63,3,-7}, -{63,3,-6}, -{63,3,-5}, -{63,3,-4}, -{63,3,-3}, -{63,3,-2}, -{63,3,-1}, -{63,3,0}, -{63,3,1}, -{63,3,2}, -{63,3,3}, -{63,3,4}, -{63,3,5}, -{63,3,6}, -{63,3,7}, -{63,3,8}, -{63,3,9}, -{63,3,10}, -{63,3,11}, -{63,3,12}, -{63,3,13}, -{63,3,14}, -{63,3,15}, -{63,3,16}, -{63,3,17}, -{63,3,18}, -{63,3,19}, -{63,3,20}, -{63,3,21}, -{63,3,22}, -{63,3,23}, -{63,3,24}, -{63,3,25}, -{63,3,26}, -{63,3,27}, -{63,3,28}, -{63,3,29}, -{63,3,30}, -{63,3,31}, -{63,3,32}, -{63,3,33}, -{63,3,34}, -{63,3,35}, -{63,3,36}, -{63,3,37}, -{63,3,38}, -{63,3,39}, -{63,3,40}, -{63,3,41}, -{63,3,42}, -{63,3,43}, -{63,3,44}, -{63,3,45}, -{63,3,46}, -{63,3,47}, -{63,3,48}, -{63,3,49}, -{63,3,50}, -{63,3,51}, -{63,3,52}, -{63,3,53}, -{63,3,54}, -{63,3,55}, -{63,3,56}, -{63,3,57}, -{63,3,58}, -{63,3,59}, -{63,3,60}, -{63,3,61}, -{63,3,62}, -{63,3,63}, -{63,3,64}, -{63,3,65}, -{63,3,66}, -{63,3,67}, -{63,4,-57}, -{63,4,-56}, -{63,4,-55}, -{63,4,-54}, -{63,4,-53}, -{63,4,-52}, -{63,4,-51}, -{63,4,-50}, -{63,4,-49}, -{63,4,-48}, -{63,4,-47}, -{63,4,-46}, -{63,4,-45}, -{63,4,-44}, -{63,4,-43}, -{63,4,-42}, -{63,4,-41}, -{63,4,-40}, -{63,4,-39}, -{63,4,-38}, -{63,4,-37}, -{63,4,-36}, -{63,4,-35}, -{63,4,-34}, -{63,4,-33}, -{63,4,-32}, -{63,4,-31}, -{63,4,-30}, -{63,4,-29}, -{63,4,-28}, -{63,4,-27}, -{63,4,-26}, -{63,4,-25}, -{63,4,-24}, -{63,4,-23}, -{63,4,-22}, -{63,4,-21}, -{63,4,-20}, -{63,4,-19}, -{63,4,-18}, -{63,4,-17}, -{63,4,-16}, -{63,4,-15}, -{63,4,-14}, -{63,4,-13}, -{63,4,-12}, -{63,4,-11}, -{63,4,-10}, -{63,4,-9}, -{63,4,-8}, -{63,4,-7}, -{63,4,-6}, -{63,4,-5}, -{63,4,-4}, -{63,4,-3}, -{63,4,-2}, -{63,4,-1}, -{63,4,0}, -{63,4,1}, -{63,4,2}, -{63,4,3}, -{63,4,4}, -{63,4,5}, -{63,4,6}, -{63,4,7}, -{63,4,8}, -{63,4,9}, -{63,4,10}, -{63,4,11}, -{63,4,12}, -{63,4,13}, -{63,4,14}, -{63,4,15}, -{63,4,16}, -{63,4,17}, -{63,4,18}, -{63,4,19}, -{63,4,20}, -{63,4,21}, -{63,4,22}, -{63,4,23}, -{63,4,24}, -{63,4,25}, -{63,4,26}, -{63,4,27}, -{63,4,28}, -{63,4,29}, -{63,4,30}, -{63,4,31}, -{63,4,32}, -{63,4,33}, -{63,4,34}, -{63,4,35}, -{63,4,36}, -{63,4,37}, -{63,4,38}, -{63,4,39}, -{63,4,40}, -{63,4,41}, -{63,4,42}, -{63,4,43}, -{63,4,44}, -{63,4,45}, -{63,4,46}, -{63,4,47}, -{63,4,48}, -{63,4,49}, -{63,4,50}, -{63,4,51}, -{63,4,52}, -{63,4,53}, -{63,4,54}, -{63,4,55}, -{63,4,56}, -{63,4,57}, -{63,4,58}, -{63,4,59}, -{63,4,60}, -{63,4,61}, -{63,4,62}, -{63,4,63}, -{63,4,64}, -{63,4,65}, -{63,4,66}, -{63,4,67}, -{63,5,-57}, -{63,5,-56}, -{63,5,-55}, -{63,5,-54}, -{63,5,-53}, -{63,5,-52}, -{63,5,-51}, -{63,5,-50}, -{63,5,-49}, -{63,5,-48}, -{63,5,-47}, -{63,5,-46}, -{63,5,-45}, -{63,5,-44}, -{63,5,-43}, -{63,5,-42}, -{63,5,-41}, -{63,5,-40}, -{63,5,-39}, -{63,5,-38}, -{63,5,-37}, -{63,5,-36}, -{63,5,-35}, -{63,5,-34}, -{63,5,-33}, -{63,5,-32}, -{63,5,-31}, -{63,5,-30}, -{63,5,-29}, -{63,5,-28}, -{63,5,-27}, -{63,5,-26}, -{63,5,-25}, -{63,5,-24}, -{63,5,-23}, -{63,5,-22}, -{63,5,-21}, -{63,5,-20}, -{63,5,-19}, -{63,5,-18}, -{63,5,-17}, -{63,5,-16}, -{63,5,-15}, -{63,5,-14}, -{63,5,-13}, -{63,5,-12}, -{63,5,-11}, -{63,5,-10}, -{63,5,-9}, -{63,5,-8}, -{63,5,-7}, -{63,5,-6}, -{63,5,-5}, -{63,5,-4}, -{63,5,-3}, -{63,5,-2}, -{63,5,-1}, -{63,5,0}, -{63,5,1}, -{63,5,2}, -{63,5,3}, -{63,5,4}, -{63,5,5}, -{63,5,6}, -{63,5,7}, -{63,5,8}, -{63,5,9}, -{63,5,10}, -{63,5,11}, -{63,5,12}, -{63,5,13}, -{63,5,14}, -{63,5,15}, -{63,5,16}, -{63,5,17}, -{63,5,18}, -{63,5,19}, -{63,5,20}, -{63,5,21}, -{63,5,22}, -{63,5,23}, -{63,5,24}, -{63,5,25}, -{63,5,26}, -{63,5,27}, -{63,5,28}, -{63,5,29}, -{63,5,30}, -{63,5,31}, -{63,5,32}, -{63,5,33}, -{63,5,34}, -{63,5,35}, -{63,5,36}, -{63,5,37}, -{63,5,38}, -{63,5,39}, -{63,5,40}, -{63,5,41}, -{63,5,42}, -{63,5,43}, -{63,5,44}, -{63,5,45}, -{63,5,46}, -{63,5,47}, -{63,5,48}, -{63,5,49}, -{63,5,50}, -{63,5,51}, -{63,5,52}, -{63,5,53}, -{63,5,54}, -{63,5,55}, -{63,5,56}, -{63,5,57}, -{63,5,58}, -{63,5,59}, -{63,5,60}, -{63,5,61}, -{63,5,62}, -{63,5,63}, -{63,5,64}, -{63,5,65}, -{63,5,66}, -{63,5,67}, -{63,6,-57}, -{63,6,-56}, -{63,6,-55}, -{63,6,-54}, -{63,6,-53}, -{63,6,-52}, -{63,6,-51}, -{63,6,-50}, -{63,6,-49}, -{63,6,-48}, -{63,6,-47}, -{63,6,-46}, -{63,6,-45}, -{63,6,-44}, -{63,6,-43}, -{63,6,-42}, -{63,6,-41}, -{63,6,-40}, -{63,6,-39}, -{63,6,-38}, -{63,6,-37}, -{63,6,-36}, -{63,6,-35}, -{63,6,-34}, -{63,6,-33}, -{63,6,-32}, -{63,6,-31}, -{63,6,-30}, -{63,6,-29}, -{63,6,-28}, -{63,6,-27}, -{63,6,-26}, -{63,6,-25}, -{63,6,-24}, -{63,6,-23}, -{63,6,-22}, -{63,6,-21}, -{63,6,-20}, -{63,6,-19}, -{63,6,-18}, -{63,6,-17}, -{63,6,-16}, -{63,6,-15}, -{63,6,-14}, -{63,6,-13}, -{63,6,-12}, -{63,6,-11}, -{63,6,-10}, -{63,6,-9}, -{63,6,-8}, -{63,6,-7}, -{63,6,-6}, -{63,6,-5}, -{63,6,-4}, -{63,6,-3}, -{63,6,-2}, -{63,6,-1}, -{63,6,0}, -{63,6,1}, -{63,6,2}, -{63,6,3}, -{63,6,4}, -{63,6,5}, -{63,6,6}, -{63,6,7}, -{63,6,8}, -{63,6,9}, -{63,6,10}, -{63,6,11}, -{63,6,12}, -{63,6,13}, -{63,6,14}, -{63,6,15}, -{63,6,16}, -{63,6,17}, -{63,6,18}, -{63,6,19}, -{63,6,20}, -{63,6,21}, -{63,6,22}, -{63,6,23}, -{63,6,24}, -{63,6,25}, -{63,6,26}, -{63,6,27}, -{63,6,28}, -{63,6,29}, -{63,6,30}, -{63,6,31}, -{63,6,32}, -{63,6,33}, -{63,6,34}, -{63,6,35}, -{63,6,36}, -{63,6,37}, -{63,6,38}, -{63,6,39}, -{63,6,40}, -{63,6,41}, -{63,6,42}, -{63,6,43}, -{63,6,44}, -{63,6,45}, -{63,6,46}, -{63,6,47}, -{63,6,48}, -{63,6,49}, -{63,6,50}, -{63,6,51}, -{63,6,52}, -{63,6,53}, -{63,6,54}, -{63,6,55}, -{63,6,56}, -{63,6,57}, -{63,6,58}, -{63,6,59}, -{63,6,60}, -{63,6,61}, -{63,6,62}, -{63,6,63}, -{63,6,64}, -{63,6,65}, -{63,6,66}, -{63,6,67}, -{63,7,-57}, -{63,7,-56}, -{63,7,-55}, -{63,7,-54}, -{63,7,-53}, -{63,7,-52}, -{63,7,-51}, -{63,7,-50}, -{63,7,-49}, -{63,7,-48}, -{63,7,-47}, -{63,7,-46}, -{63,7,-45}, -{63,7,-44}, -{63,7,-43}, -{63,7,-42}, -{63,7,-41}, -{63,7,-40}, -{63,7,-39}, -{63,7,-38}, -{63,7,-37}, -{63,7,-36}, -{63,7,-35}, -{63,7,-34}, -{63,7,-33}, -{63,7,-32}, -{63,7,-31}, -{63,7,-30}, -{63,7,-29}, -{63,7,-28}, -{63,7,-27}, -{63,7,-26}, -{63,7,-25}, -{63,7,-24}, -{63,7,-23}, -{63,7,-22}, -{63,7,-21}, -{63,7,-20}, -{63,7,-19}, -{63,7,-18}, -{63,7,-17}, -{63,7,-16}, -{63,7,-15}, -{63,7,-14}, -{63,7,-13}, -{63,7,-12}, -{63,7,-11}, -{63,7,-10}, -{63,7,-9}, -{63,7,-8}, -{63,7,-7}, -{63,7,-6}, -{63,7,-5}, -{63,7,-4}, -{63,7,-3}, -{63,7,-2}, -{63,7,-1}, -{63,7,0}, -{63,7,1}, -{63,7,2}, -{63,7,3}, -{63,7,4}, -{63,7,5}, -{63,7,6}, -{63,7,7}, -{63,7,8}, -{63,7,9}, -{63,7,10}, -{63,7,11}, -{63,7,12}, -{63,7,13}, -{63,7,14}, -{63,7,15}, -{63,7,16}, -{63,7,17}, -{63,7,18}, -{63,7,19}, -{63,7,20}, -{63,7,21}, -{63,7,22}, -{63,7,23}, -{63,7,24}, -{63,7,25}, -{63,7,26}, -{63,7,27}, -{63,7,28}, -{63,7,29}, -{63,7,30}, -{63,7,31}, -{63,7,32}, -{63,7,33}, -{63,7,34}, -{63,7,35}, -{63,7,36}, -{63,7,37}, -{63,7,38}, -{63,7,39}, -{63,7,40}, -{63,7,41}, -{63,7,42}, -{63,7,43}, -{63,7,44}, -{63,7,45}, -{63,7,46}, -{63,7,47}, -{63,7,48}, -{63,7,49}, -{63,7,50}, -{63,7,51}, -{63,7,52}, -{63,7,53}, -{63,7,54}, -{63,7,55}, -{63,7,56}, -{63,7,57}, -{63,7,58}, -{63,7,59}, -{63,7,60}, -{63,7,61}, -{63,7,62}, -{63,7,63}, -{63,7,64}, -{63,7,65}, -{63,7,66}, -{63,7,67}, -{63,8,-57}, -{63,8,-56}, -{63,8,-55}, -{63,8,-54}, -{63,8,-53}, -{63,8,-52}, -{63,8,-51}, -{63,8,-50}, -{63,8,-49}, -{63,8,-48}, -{63,8,-47}, -{63,8,-46}, -{63,8,-45}, -{63,8,-44}, -{63,8,-43}, -{63,8,-42}, -{63,8,-41}, -{63,8,-40}, -{63,8,-39}, -{63,8,-38}, -{63,8,-37}, -{63,8,-36}, -{63,8,-35}, -{63,8,-34}, -{63,8,-33}, -{63,8,-32}, -{63,8,-31}, -{63,8,-30}, -{63,8,-29}, -{63,8,-28}, -{63,8,-27}, -{63,8,-26}, -{63,8,-25}, -{63,8,-24}, -{63,8,-23}, -{63,8,-22}, -{63,8,-21}, -{63,8,-20}, -{63,8,-19}, -{63,8,-18}, -{63,8,-17}, -{63,8,-16}, -{63,8,-15}, -{63,8,-14}, -{63,8,-13}, -{63,8,-12}, -{63,8,-11}, -{63,8,-10}, -{63,8,-9}, -{63,8,-8}, -{63,8,-7}, -{63,8,-6}, -{63,8,-5}, -{63,8,-4}, -{63,8,-3}, -{63,8,-2}, -{63,8,-1}, -{63,8,0}, -{63,8,1}, -{63,8,2}, -{63,8,3}, -{63,8,4}, -{63,8,5}, -{63,8,6}, -{63,8,7}, -{63,8,8}, -{63,8,9}, -{63,8,10}, -{63,8,11}, -{63,8,12}, -{63,8,13}, -{63,8,14}, -{63,8,15}, -{63,8,16}, -{63,8,17}, -{63,8,18}, -{63,8,19}, -{63,8,20}, -{63,8,21}, -{63,8,22}, -{63,8,23}, -{63,8,24}, -{63,8,25}, -{63,8,26}, -{63,8,27}, -{63,8,28}, -{63,8,29}, -{63,8,30}, -{63,8,31}, -{63,8,32}, -{63,8,33}, -{63,8,34}, -{63,8,35}, -{63,8,36}, -{63,8,37}, -{63,8,38}, -{63,8,39}, -{63,8,40}, -{63,8,41}, -{63,8,42}, -{63,8,43}, -{63,8,44}, -{63,8,45}, -{63,8,46}, -{63,8,47}, -{63,8,48}, -{63,8,49}, -{63,8,50}, -{63,8,51}, -{63,8,52}, -{63,8,53}, -{63,8,54}, -{63,8,55}, -{63,8,56}, -{63,8,57}, -{63,8,58}, -{63,8,59}, -{63,8,60}, -{63,8,61}, -{63,8,62}, -{63,8,63}, -{63,8,64}, -{63,8,65}, -{63,8,66}, -{63,8,67}, -{63,9,-57}, -{63,9,-56}, -{63,9,-55}, -{63,9,-54}, -{63,9,-53}, -{63,9,-52}, -{63,9,-51}, -{63,9,-50}, -{63,9,-49}, -{63,9,-48}, -{63,9,-47}, -{63,9,-46}, -{63,9,-45}, -{63,9,-44}, -{63,9,-43}, -{63,9,-42}, -{63,9,-41}, -{63,9,-40}, -{63,9,-39}, -{63,9,-38}, -{63,9,-37}, -{63,9,-36}, -{63,9,-35}, -{63,9,-34}, -{63,9,-33}, -{63,9,-32}, -{63,9,-31}, -{63,9,-30}, -{63,9,-29}, -{63,9,-28}, -{63,9,-27}, -{63,9,-26}, -{63,9,-25}, -{63,9,-24}, -{63,9,-23}, -{63,9,-22}, -{63,9,-21}, -{63,9,-20}, -{63,9,-19}, -{63,9,-18}, -{63,9,-17}, -{63,9,-16}, -{63,9,-15}, -{63,9,-14}, -{63,9,-13}, -{63,9,-12}, -{63,9,-11}, -{63,9,-10}, -{63,9,-9}, -{63,9,-8}, -{63,9,-7}, -{63,9,-6}, -{63,9,-5}, -{63,9,-4}, -{63,9,-3}, -{63,9,-2}, -{63,9,-1}, -{63,9,0}, -{63,9,1}, -{63,9,2}, -{63,9,3}, -{63,9,4}, -{63,9,5}, -{63,9,6}, -{63,9,7}, -{63,9,8}, -{63,9,9}, -{63,9,10}, -{63,9,11}, -{63,9,12}, -{63,9,13}, -{63,9,14}, -{63,9,15}, -{63,9,16}, -{63,9,17}, -{63,9,18}, -{63,9,19}, -{63,9,20}, -{63,9,21}, -{63,9,22}, -{63,9,23}, -{63,9,24}, -{63,9,25}, -{63,9,26}, -{63,9,27}, -{63,9,28}, -{63,9,29}, -{63,9,30}, -{63,9,31}, -{63,9,32}, -{63,9,33}, -{63,9,34}, -{63,9,35}, -{63,9,36}, -{63,9,37}, -{63,9,38}, -{63,9,39}, -{63,9,40}, -{63,9,41}, -{63,9,42}, -{63,9,43}, -{63,9,44}, -{63,9,45}, -{63,9,46}, -{63,9,47}, -{63,9,48}, -{63,9,49}, -{63,9,50}, -{63,9,51}, -{63,9,52}, -{63,9,53}, -{63,9,54}, -{63,9,55}, -{63,9,56}, -{63,9,57}, -{63,9,58}, -{63,9,59}, -{63,9,60}, -{63,9,61}, -{63,9,62}, -{63,9,63}, -{63,9,64}, -{63,9,65}, -{63,9,66}, -{63,9,67}, -{63,10,-57}, -{63,10,-56}, -{63,10,-55}, -{63,10,-54}, -{63,10,-53}, -{63,10,-52}, -{63,10,-51}, -{63,10,-50}, -{63,10,-49}, -{63,10,-48}, -{63,10,-47}, -{63,10,-46}, -{63,10,-45}, -{63,10,-44}, -{63,10,-43}, -{63,10,-42}, -{63,10,-41}, -{63,10,-40}, -{63,10,-39}, -{63,10,-38}, -{63,10,-37}, -{63,10,-36}, -{63,10,-35}, -{63,10,-34}, -{63,10,-33}, -{63,10,-32}, -{63,10,-31}, -{63,10,-30}, -{63,10,-29}, -{63,10,-28}, -{63,10,-27}, -{63,10,-26}, -{63,10,-25}, -{63,10,-24}, -{63,10,-23}, -{63,10,-22}, -{63,10,-21}, -{63,10,-20}, -{63,10,-19}, -{63,10,-18}, -{63,10,-17}, -{63,10,-16}, -{63,10,-15}, -{63,10,-14}, -{63,10,-13}, -{63,10,-12}, -{63,10,-11}, -{63,10,-10}, -{63,10,-9}, -{63,10,-8}, -{63,10,-7}, -{63,10,-6}, -{63,10,-5}, -{63,10,-4}, -{63,10,-3}, -{63,10,-2}, -{63,10,-1}, -{63,10,0}, -{63,10,1}, -{63,10,2}, -{63,10,3}, -{63,10,4}, -{63,10,5}, -{63,10,6}, -{63,10,7}, -{63,10,8}, -{63,10,9}, -{63,10,10}, -{63,10,11}, -{63,10,12}, -{63,10,13}, -{63,10,14}, -{63,10,15}, -{63,10,16}, -{63,10,17}, -{63,10,18}, -{63,10,19}, -{63,10,20}, -{63,10,21}, -{63,10,22}, -{63,10,23}, -{63,10,24}, -{63,10,25}, -{63,10,26}, -{63,10,27}, -{63,10,28}, -{63,10,29}, -{63,10,30}, -{63,10,31}, -{63,10,32}, -{63,10,33}, -{63,10,34}, -{63,10,35}, -{63,10,36}, -{63,10,37}, -{63,10,38}, -{63,10,39}, -{63,10,40}, -{63,10,41}, -{63,10,42}, -{63,10,43}, -{63,10,44}, -{63,10,45}, -{63,10,46}, -{63,10,47}, -{63,10,48}, -{63,10,49}, -{63,10,50}, -{63,10,51}, -{63,10,52}, -{63,10,53}, -{63,10,54}, -{63,10,55}, -{63,10,56}, -{63,10,57}, -{63,10,58}, -{63,10,59}, -{63,10,60}, -{63,10,61}, -{63,10,62}, -{63,10,63}, -{63,10,64}, -{63,10,65}, -{63,10,66}, -{63,10,67}, -{63,11,-57}, -{63,11,-56}, -{63,11,-55}, -{63,11,-54}, -{63,11,-53}, -{63,11,-52}, -{63,11,-51}, -{63,11,-50}, -{63,11,-49}, -{63,11,-48}, -{63,11,-47}, -{63,11,-46}, -{63,11,-45}, -{63,11,-44}, -{63,11,-43}, -{63,11,-42}, -{63,11,-41}, -{63,11,-40}, -{63,11,-39}, -{63,11,-38}, -{63,11,-37}, -{63,11,-36}, -{63,11,-35}, -{63,11,-34}, -{63,11,-33}, -{63,11,-32}, -{63,11,-31}, -{63,11,-30}, -{63,11,-29}, -{63,11,-28}, -{63,11,-27}, -{63,11,-26}, -{63,11,-25}, -{63,11,-24}, -{63,11,-23}, -{63,11,-22}, -{63,11,-21}, -{63,11,-20}, -{63,11,-19}, -{63,11,-18}, -{63,11,-17}, -{63,11,-16}, -{63,11,-15}, -{63,11,-14}, -{63,11,-13}, -{63,11,-12}, -{63,11,-11}, -{63,11,-10}, -{63,11,-9}, -{63,11,-8}, -{63,11,-7}, -{63,11,-6}, -{63,11,-5}, -{63,11,-4}, -{63,11,-3}, -{63,11,-2}, -{63,11,-1}, -{63,11,0}, -{63,11,1}, -{63,11,2}, -{63,11,3}, -{63,11,4}, -{63,11,5}, -{63,11,6}, -{63,11,7}, -{63,11,8}, -{63,11,9}, -{63,11,10}, -{63,11,11}, -{63,11,12}, -{63,11,13}, -{63,11,14}, -{63,11,15}, -{63,11,16}, -{63,11,17}, -{63,11,18}, -{63,11,19}, -{63,11,20}, -{63,11,21}, -{63,11,22}, -{63,11,23}, -{63,11,24}, -{63,11,25}, -{63,11,26}, -{63,11,27}, -{63,11,28}, -{63,11,29}, -{63,11,30}, -{63,11,31}, -{63,11,32}, -{63,11,33}, -{63,11,34}, -{63,11,35}, -{63,11,36}, -{63,11,37}, -{63,11,38}, -{63,11,39}, -{63,11,40}, -{63,11,41}, -{63,11,42}, -{63,11,43}, -{63,11,44}, -{63,11,45}, -{63,11,46}, -{63,11,47}, -{63,11,48}, -{63,11,49}, -{63,11,50}, -{63,11,51}, -{63,11,52}, -{63,11,53}, -{63,11,54}, -{63,11,55}, -{63,11,56}, -{63,11,57}, -{63,11,58}, -{63,11,59}, -{63,11,60}, -{63,11,61}, -{63,11,62}, -{63,11,63}, -{63,11,64}, -{63,11,65}, -{63,11,66}, -{63,11,67}, -{63,12,-57}, -{63,12,-56}, -{63,12,-55}, -{63,12,-54}, -{63,12,-53}, -{63,12,-52}, -{63,12,-51}, -{63,12,-50}, -{63,12,-49}, -{63,12,-48}, -{63,12,-47}, -{63,12,-46}, -{63,12,-45}, -{63,12,-44}, -{63,12,-43}, -{63,12,-42}, -{63,12,-41}, -{63,12,-40}, -{63,12,-39}, -{63,12,-38}, -{63,12,-37}, -{63,12,-36}, -{63,12,-35}, -{63,12,-34}, -{63,12,-33}, -{63,12,-32}, -{63,12,-31}, -{63,12,-30}, -{63,12,-29}, -{63,12,-28}, -{63,12,-27}, -{63,12,-26}, -{63,12,-25}, -{63,12,-24}, -{63,12,-23}, -{63,12,-22}, -{63,12,-21}, -{63,12,-20}, -{63,12,-19}, -{63,12,-18}, -{63,12,-17}, -{63,12,-16}, -{63,12,-15}, -{63,12,-14}, -{63,12,-13}, -{63,12,-12}, -{63,12,-11}, -{63,12,-10}, -{63,12,-9}, -{63,12,-8}, -{63,12,-7}, -{63,12,-6}, -{63,12,-5}, -{63,12,-4}, -{63,12,-3}, -{63,12,-2}, -{63,12,-1}, -{63,12,0}, -{63,12,1}, -{63,12,2}, -{63,12,3}, -{63,12,4}, -{63,12,5}, -{63,12,6}, -{63,12,7}, -{63,12,8}, -{63,12,9}, -{63,12,10}, -{63,12,11}, -{63,12,12}, -{63,12,13}, -{63,12,14}, -{63,12,15}, -{63,12,16}, -{63,12,17}, -{63,12,18}, -{63,12,19}, -{63,12,20}, -{63,12,21}, -{63,12,22}, -{63,12,23}, -{63,12,24}, -{63,12,25}, -{63,12,26}, -{63,12,27}, -{63,12,28}, -{63,12,29}, -{63,12,30}, -{63,12,31}, -{63,12,32}, -{63,12,33}, -{63,12,34}, -{63,12,35}, -{63,12,36}, -{63,12,37}, -{63,12,38}, -{63,12,39}, -{63,12,40}, -{63,12,41}, -{63,12,42}, -{63,12,43}, -{63,12,44}, -{63,12,45}, -{63,12,46}, -{63,12,47}, -{63,12,48}, -{63,12,49}, -{63,12,50}, -{63,12,51}, -{63,12,52}, -{63,12,53}, -{63,12,54}, -{63,12,55}, -{63,12,56}, -{63,12,57}, -{63,12,58}, -{63,12,59}, -{63,12,60}, -{63,12,61}, -{63,12,62}, -{63,12,63}, -{63,12,64}, -{63,12,65}, -{63,12,66}, -{63,12,67}, -{63,12,68}, -{63,13,-57}, -{63,13,-56}, -{63,13,-55}, -{63,13,-54}, -{63,13,-53}, -{63,13,-52}, -{63,13,-51}, -{63,13,-50}, -{63,13,-49}, -{63,13,-48}, -{63,13,-47}, -{63,13,-46}, -{63,13,-45}, -{63,13,-44}, -{63,13,-43}, -{63,13,-42}, -{63,13,-41}, -{63,13,-40}, -{63,13,-39}, -{63,13,-38}, -{63,13,-37}, -{63,13,-36}, -{63,13,-35}, -{63,13,-34}, -{63,13,-33}, -{63,13,-32}, -{63,13,-31}, -{63,13,-30}, -{63,13,-29}, -{63,13,-28}, -{63,13,-27}, -{63,13,-26}, -{63,13,-25}, -{63,13,-24}, -{63,13,-23}, -{63,13,-22}, -{63,13,-21}, -{63,13,-20}, -{63,13,-19}, -{63,13,-18}, -{63,13,-17}, -{63,13,-16}, -{63,13,-15}, -{63,13,-14}, -{63,13,-13}, -{63,13,-12}, -{63,13,-11}, -{63,13,-10}, -{63,13,-9}, -{63,13,-8}, -{63,13,-7}, -{63,13,-6}, -{63,13,-5}, -{63,13,-4}, -{63,13,-3}, -{63,13,-2}, -{63,13,-1}, -{63,13,0}, -{63,13,1}, -{63,13,2}, -{63,13,3}, -{63,13,4}, -{63,13,5}, -{63,13,6}, -{63,13,7}, -{63,13,8}, -{63,13,9}, -{63,13,10}, -{63,13,11}, -{63,13,12}, -{63,13,13}, -{63,13,14}, -{63,13,15}, -{63,13,16}, -{63,13,17}, -{63,13,18}, -{63,13,19}, -{63,13,20}, -{63,13,21}, -{63,13,22}, -{63,13,23}, -{63,13,24}, -{63,13,25}, -{63,13,26}, -{63,13,27}, -{63,13,28}, -{63,13,29}, -{63,13,30}, -{63,13,31}, -{63,13,32}, -{63,13,33}, -{63,13,34}, -{63,13,35}, -{63,13,36}, -{63,13,37}, -{63,13,38}, -{63,13,39}, -{63,13,40}, -{63,13,41}, -{63,13,42}, -{63,13,43}, -{63,13,44}, -{63,13,45}, -{63,13,46}, -{63,13,47}, -{63,13,48}, -{63,13,49}, -{63,13,50}, -{63,13,51}, -{63,13,52}, -{63,13,53}, -{63,13,54}, -{63,13,55}, -{63,13,56}, -{63,13,57}, -{63,13,58}, -{63,13,59}, -{63,13,60}, -{63,13,61}, -{63,13,62}, -{63,13,63}, -{63,13,64}, -{63,13,65}, -{63,13,66}, -{63,13,67}, -{63,13,68}, -{63,14,-57}, -{63,14,-56}, -{63,14,-55}, -{63,14,-54}, -{63,14,-53}, -{63,14,-52}, -{63,14,-51}, -{63,14,-50}, -{63,14,-49}, -{63,14,-48}, -{63,14,-47}, -{63,14,-46}, -{63,14,-45}, -{63,14,-44}, -{63,14,-43}, -{63,14,-42}, -{63,14,-41}, -{63,14,-40}, -{63,14,-39}, -{63,14,-38}, -{63,14,-37}, -{63,14,-36}, -{63,14,-35}, -{63,14,-34}, -{63,14,-33}, -{63,14,-32}, -{63,14,-31}, -{63,14,-30}, -{63,14,-29}, -{63,14,-28}, -{63,14,-27}, -{63,14,-26}, -{63,14,-25}, -{63,14,-24}, -{63,14,-23}, -{63,14,-22}, -{63,14,-21}, -{63,14,-20}, -{63,14,-19}, -{63,14,-18}, -{63,14,-17}, -{63,14,-16}, -{63,14,-15}, -{63,14,-14}, -{63,14,-13}, -{63,14,-12}, -{63,14,-11}, -{63,14,-10}, -{63,14,-9}, -{63,14,-8}, -{63,14,-7}, -{63,14,-6}, -{63,14,-5}, -{63,14,-4}, -{63,14,-3}, -{63,14,-2}, -{63,14,-1}, -{63,14,0}, -{63,14,1}, -{63,14,2}, -{63,14,3}, -{63,14,4}, -{63,14,5}, -{63,14,6}, -{63,14,7}, -{63,14,8}, -{63,14,9}, -{63,14,10}, -{63,14,11}, -{63,14,12}, -{63,14,13}, -{63,14,14}, -{63,14,15}, -{63,14,16}, -{63,14,17}, -{63,14,18}, -{63,14,19}, -{63,14,20}, -{63,14,21}, -{63,14,22}, -{63,14,23}, -{63,14,24}, -{63,14,25}, -{63,14,26}, -{63,14,27}, -{63,14,28}, -{63,14,29}, -{63,14,30}, -{63,14,31}, -{63,14,32}, -{63,14,33}, -{63,14,34}, -{63,14,35}, -{63,14,36}, -{63,14,37}, -{63,14,38}, -{63,14,39}, -{63,14,40}, -{63,14,41}, -{63,14,42}, -{63,14,43}, -{63,14,44}, -{63,14,45}, -{63,14,46}, -{63,14,47}, -{63,14,48}, -{63,14,49}, -{63,14,50}, -{63,14,51}, -{63,14,52}, -{63,14,53}, -{63,14,54}, -{63,14,55}, -{63,14,56}, -{63,14,57}, -{63,14,58}, -{63,14,59}, -{63,14,60}, -{63,14,61}, -{63,14,62}, -{63,14,63}, -{63,14,64}, -{63,14,65}, -{63,14,66}, -{63,14,67}, -{63,14,68}, -{63,15,-57}, -{63,15,-56}, -{63,15,-55}, -{63,15,-54}, -{63,15,-53}, -{63,15,-52}, -{63,15,-51}, -{63,15,-50}, -{63,15,-49}, -{63,15,-48}, -{63,15,-47}, -{63,15,-46}, -{63,15,-45}, -{63,15,-44}, -{63,15,-43}, -{63,15,-42}, -{63,15,-41}, -{63,15,-40}, -{63,15,-39}, -{63,15,-38}, -{63,15,-37}, -{63,15,-36}, -{63,15,-35}, -{63,15,-34}, -{63,15,-33}, -{63,15,-32}, -{63,15,-31}, -{63,15,-30}, -{63,15,-29}, -{63,15,-28}, -{63,15,-27}, -{63,15,-26}, -{63,15,-25}, -{63,15,-24}, -{63,15,-23}, -{63,15,-22}, -{63,15,-21}, -{63,15,-20}, -{63,15,-19}, -{63,15,-18}, -{63,15,-17}, -{63,15,-16}, -{63,15,-15}, -{63,15,-14}, -{63,15,-13}, -{63,15,-12}, -{63,15,-11}, -{63,15,-10}, -{63,15,-9}, -{63,15,-8}, -{63,15,-7}, -{63,15,-6}, -{63,15,-5}, -{63,15,-4}, -{63,15,-3}, -{63,15,-2}, -{63,15,-1}, -{63,15,0}, -{63,15,1}, -{63,15,2}, -{63,15,3}, -{63,15,4}, -{63,15,5}, -{63,15,6}, -{63,15,7}, -{63,15,8}, -{63,15,9}, -{63,15,10}, -{63,15,11}, -{63,15,12}, -{63,15,13}, -{63,15,14}, -{63,15,15}, -{63,15,16}, -{63,15,17}, -{63,15,18}, -{63,15,19}, -{63,15,20}, -{63,15,21}, -{63,15,22}, -{63,15,23}, -{63,15,24}, -{63,15,25}, -{63,15,26}, -{63,15,27}, -{63,15,28}, -{63,15,29}, -{63,15,30}, -{63,15,31}, -{63,15,32}, -{63,15,33}, -{63,15,34}, -{63,15,35}, -{63,15,36}, -{63,15,37}, -{63,15,38}, -{63,15,39}, -{63,15,40}, -{63,15,41}, -{63,15,42}, -{63,15,43}, -{63,15,44}, -{63,15,45}, -{63,15,46}, -{63,15,47}, -{63,15,48}, -{63,15,49}, -{63,15,50}, -{63,15,51}, -{63,15,52}, -{63,15,53}, -{63,15,54}, -{63,15,55}, -{63,15,56}, -{63,15,57}, -{63,15,58}, -{63,15,59}, -{63,15,60}, -{63,15,61}, -{63,15,62}, -{63,15,63}, -{63,15,64}, -{63,15,65}, -{63,15,66}, -{63,15,67}, -{63,15,68}, -{63,16,-57}, -{63,16,-56}, -{63,16,-55}, -{63,16,-54}, -{63,16,-53}, -{63,16,-52}, -{63,16,-51}, -{63,16,-50}, -{63,16,-49}, -{63,16,-48}, -{63,16,-47}, -{63,16,-46}, -{63,16,-45}, -{63,16,-44}, -{63,16,-43}, -{63,16,-42}, -{63,16,-41}, -{63,16,-40}, -{63,16,-39}, -{63,16,-38}, -{63,16,-37}, -{63,16,-36}, -{63,16,-35}, -{63,16,-34}, -{63,16,-33}, -{63,16,-32}, -{63,16,-31}, -{63,16,-30}, -{63,16,-29}, -{63,16,-28}, -{63,16,-27}, -{63,16,-26}, -{63,16,-25}, -{63,16,-24}, -{63,16,-23}, -{63,16,-22}, -{63,16,-21}, -{63,16,-20}, -{63,16,-19}, -{63,16,-18}, -{63,16,-17}, -{63,16,-16}, -{63,16,-15}, -{63,16,-14}, -{63,16,-13}, -{63,16,-12}, -{63,16,-11}, -{63,16,-10}, -{63,16,-9}, -{63,16,-8}, -{63,16,-7}, -{63,16,-6}, -{63,16,-5}, -{63,16,-4}, -{63,16,-3}, -{63,16,-2}, -{63,16,-1}, -{63,16,0}, -{63,16,1}, -{63,16,2}, -{63,16,3}, -{63,16,4}, -{63,16,5}, -{63,16,6}, -{63,16,7}, -{63,16,8}, -{63,16,9}, -{63,16,10}, -{63,16,11}, -{63,16,12}, -{63,16,13}, -{63,16,14}, -{63,16,15}, -{63,16,16}, -{63,16,17}, -{63,16,18}, -{63,16,19}, -{63,16,20}, -{63,16,21}, -{63,16,22}, -{63,16,23}, -{63,16,24}, -{63,16,25}, -{63,16,26}, -{63,16,27}, -{63,16,28}, -{63,16,29}, -{63,16,30}, -{63,16,31}, -{63,16,32}, -{63,16,33}, -{63,16,34}, -{63,16,35}, -{63,16,36}, -{63,16,37}, -{63,16,38}, -{63,16,39}, -{63,16,40}, -{63,16,41}, -{63,16,42}, -{63,16,43}, -{63,16,44}, -{63,16,45}, -{63,16,46}, -{63,16,47}, -{63,16,48}, -{63,16,49}, -{63,16,50}, -{63,16,51}, -{63,16,52}, -{63,16,53}, -{63,16,54}, -{63,16,55}, -{63,16,56}, -{63,16,57}, -{63,16,58}, -{63,16,59}, -{63,16,60}, -{63,16,61}, -{63,16,62}, -{63,16,63}, -{63,16,64}, -{63,16,65}, -{63,16,66}, -{63,16,67}, -{63,16,68}, -{63,17,-57}, -{63,17,-56}, -{63,17,-55}, -{63,17,-54}, -{63,17,-53}, -{63,17,-52}, -{63,17,-51}, -{63,17,-50}, -{63,17,-49}, -{63,17,-48}, -{63,17,-47}, -{63,17,-46}, -{63,17,-45}, -{63,17,-44}, -{63,17,-43}, -{63,17,-42}, -{63,17,-41}, -{63,17,-40}, -{63,17,-39}, -{63,17,-38}, -{63,17,-37}, -{63,17,-36}, -{63,17,-35}, -{63,17,-34}, -{63,17,-33}, -{63,17,-32}, -{63,17,-31}, -{63,17,-30}, -{63,17,-29}, -{63,17,-28}, -{63,17,-27}, -{63,17,-26}, -{63,17,-25}, -{63,17,-24}, -{63,17,-23}, -{63,17,-22}, -{63,17,-21}, -{63,17,-20}, -{63,17,-19}, -{63,17,-18}, -{63,17,-17}, -{63,17,-16}, -{63,17,-15}, -{63,17,-14}, -{63,17,-13}, -{63,17,-12}, -{63,17,-11}, -{63,17,-10}, -{63,17,-9}, -{63,17,-8}, -{63,17,-7}, -{63,17,-6}, -{63,17,-5}, -{63,17,-4}, -{63,17,-3}, -{63,17,-2}, -{63,17,-1}, -{63,17,0}, -{63,17,1}, -{63,17,2}, -{63,17,3}, -{63,17,4}, -{63,17,5}, -{63,17,6}, -{63,17,7}, -{63,17,8}, -{63,17,9}, -{63,17,10}, -{63,17,11}, -{63,17,12}, -{63,17,13}, -{63,17,14}, -{63,17,15}, -{63,17,16}, -{63,17,17}, -{63,17,18}, -{63,17,19}, -{63,17,20}, -{63,17,21}, -{63,17,22}, -{63,17,23}, -{63,17,24}, -{63,17,25}, -{63,17,26}, -{63,17,27}, -{63,17,28}, -{63,17,29}, -{63,17,30}, -{63,17,31}, -{63,17,32}, -{63,17,33}, -{63,17,34}, -{63,17,35}, -{63,17,36}, -{63,17,37}, -{63,17,38}, -{63,17,39}, -{63,17,40}, -{63,17,41}, -{63,17,42}, -{63,17,43}, -{63,17,44}, -{63,17,45}, -{63,17,46}, -{63,17,47}, -{63,17,48}, -{63,17,49}, -{63,17,50}, -{63,17,51}, -{63,17,52}, -{63,17,53}, -{63,17,54}, -{63,17,55}, -{63,17,56}, -{63,17,57}, -{63,17,58}, -{63,17,59}, -{63,17,60}, -{63,17,61}, -{63,17,62}, -{63,17,63}, -{63,17,64}, -{63,17,65}, -{63,17,66}, -{63,17,67}, -{63,17,68}, -{63,18,-57}, -{63,18,-56}, -{63,18,-55}, -{63,18,-54}, -{63,18,-53}, -{63,18,-52}, -{63,18,-51}, -{63,18,-50}, -{63,18,-49}, -{63,18,-48}, -{63,18,-47}, -{63,18,-46}, -{63,18,-45}, -{63,18,-44}, -{63,18,-43}, -{63,18,-42}, -{63,18,-41}, -{63,18,-40}, -{63,18,-39}, -{63,18,-38}, -{63,18,-37}, -{63,18,-36}, -{63,18,-35}, -{63,18,-34}, -{63,18,-33}, -{63,18,-32}, -{63,18,-31}, -{63,18,-30}, -{63,18,-29}, -{63,18,-28}, -{63,18,-27}, -{63,18,-26}, -{63,18,-25}, -{63,18,-24}, -{63,18,-23}, -{63,18,-22}, -{63,18,-21}, -{63,18,-20}, -{63,18,-19}, -{63,18,-18}, -{63,18,-17}, -{63,18,-16}, -{63,18,-15}, -{63,18,-14}, -{63,18,-13}, -{63,18,-12}, -{63,18,-11}, -{63,18,-10}, -{63,18,-9}, -{63,18,-8}, -{63,18,-7}, -{63,18,-6}, -{63,18,-5}, -{63,18,-4}, -{63,18,-3}, -{63,18,-2}, -{63,18,-1}, -{63,18,0}, -{63,18,1}, -{63,18,2}, -{63,18,3}, -{63,18,4}, -{63,18,5}, -{63,18,6}, -{63,18,7}, -{63,18,8}, -{63,18,9}, -{63,18,10}, -{63,18,11}, -{63,18,12}, -{63,18,13}, -{63,18,14}, -{63,18,15}, -{63,18,16}, -{63,18,17}, -{63,18,18}, -{63,18,19}, -{63,18,20}, -{63,18,21}, -{63,18,22}, -{63,18,23}, -{63,18,24}, -{63,18,25}, -{63,18,26}, -{63,18,27}, -{63,18,28}, -{63,18,29}, -{63,18,30}, -{63,18,31}, -{63,18,32}, -{63,18,33}, -{63,18,34}, -{63,18,35}, -{63,18,36}, -{63,18,37}, -{63,18,38}, -{63,18,39}, -{63,18,40}, -{63,18,41}, -{63,18,42}, -{63,18,43}, -{63,18,44}, -{63,18,45}, -{63,18,46}, -{63,18,47}, -{63,18,48}, -{63,18,49}, -{63,18,50}, -{63,18,51}, -{63,18,52}, -{63,18,53}, -{63,18,54}, -{63,18,55}, -{63,18,56}, -{63,18,57}, -{63,18,58}, -{63,18,59}, -{63,18,60}, -{63,18,61}, -{63,18,62}, -{63,18,63}, -{63,18,64}, -{63,18,65}, -{63,18,66}, -{63,18,67}, -{63,18,68}, -{63,19,-57}, -{63,19,-56}, -{63,19,-55}, -{63,19,-54}, -{63,19,-53}, -{63,19,-52}, -{63,19,-51}, -{63,19,-50}, -{63,19,-49}, -{63,19,-48}, -{63,19,-47}, -{63,19,-46}, -{63,19,-45}, -{63,19,-44}, -{63,19,-43}, -{63,19,-42}, -{63,19,-41}, -{63,19,-40}, -{63,19,-39}, -{63,19,-38}, -{63,19,-37}, -{63,19,-36}, -{63,19,-35}, -{63,19,-34}, -{63,19,-33}, -{63,19,-32}, -{63,19,-31}, -{63,19,-30}, -{63,19,-29}, -{63,19,-28}, -{63,19,-27}, -{63,19,-26}, -{63,19,-25}, -{63,19,-24}, -{63,19,-23}, -{63,19,-22}, -{63,19,-21}, -{63,19,-20}, -{63,19,-19}, -{63,19,-18}, -{63,19,-17}, -{63,19,-16}, -{63,19,-15}, -{63,19,-14}, -{63,19,-13}, -{63,19,-12}, -{63,19,-11}, -{63,19,-10}, -{63,19,-9}, -{63,19,-8}, -{63,19,-7}, -{63,19,-6}, -{63,19,-5}, -{63,19,-4}, -{63,19,-3}, -{63,19,-2}, -{63,19,-1}, -{63,19,0}, -{63,19,1}, -{63,19,2}, -{63,19,3}, -{63,19,4}, -{63,19,5}, -{63,19,6}, -{63,19,7}, -{63,19,8}, -{63,19,9}, -{63,19,10}, -{63,19,11}, -{63,19,12}, -{63,19,13}, -{63,19,14}, -{63,19,15}, -{63,19,16}, -{63,19,17}, -{63,19,18}, -{63,19,19}, -{63,19,20}, -{63,19,21}, -{63,19,22}, -{63,19,23}, -{63,19,24}, -{63,19,25}, -{63,19,26}, -{63,19,27}, -{63,19,28}, -{63,19,29}, -{63,19,30}, -{63,19,31}, -{63,19,32}, -{63,19,33}, -{63,19,34}, -{63,19,35}, -{63,19,36}, -{63,19,37}, -{63,19,38}, -{63,19,39}, -{63,19,40}, -{63,19,41}, -{63,19,42}, -{63,19,43}, -{63,19,44}, -{63,19,45}, -{63,19,46}, -{63,19,47}, -{63,19,48}, -{63,19,49}, -{63,19,50}, -{63,19,51}, -{63,19,52}, -{63,19,53}, -{63,19,54}, -{63,19,55}, -{63,19,56}, -{63,19,57}, -{63,19,58}, -{63,19,59}, -{63,19,60}, -{63,19,61}, -{63,19,62}, -{63,19,63}, -{63,19,64}, -{63,19,65}, -{63,19,66}, -{63,19,67}, -{63,19,68}, -{63,20,-57}, -{63,20,-56}, -{63,20,-55}, -{63,20,-54}, -{63,20,-53}, -{63,20,-52}, -{63,20,-51}, -{63,20,-50}, -{63,20,-49}, -{63,20,-48}, -{63,20,-47}, -{63,20,-46}, -{63,20,-45}, -{63,20,-44}, -{63,20,-43}, -{63,20,-42}, -{63,20,-41}, -{63,20,-40}, -{63,20,-39}, -{63,20,-38}, -{63,20,-37}, -{63,20,-36}, -{63,20,-35}, -{63,20,-34}, -{63,20,-33}, -{63,20,-32}, -{63,20,-31}, -{63,20,-30}, -{63,20,-29}, -{63,20,-28}, -{63,20,-27}, -{63,20,-26}, -{63,20,-25}, -{63,20,-24}, -{63,20,-23}, -{63,20,-22}, -{63,20,-21}, -{63,20,-20}, -{63,20,-19}, -{63,20,-18}, -{63,20,-17}, -{63,20,-16}, -{63,20,-15}, -{63,20,-14}, -{63,20,-13}, -{63,20,-12}, -{63,20,-11}, -{63,20,-10}, -{63,20,-9}, -{63,20,-8}, -{63,20,-7}, -{63,20,-6}, -{63,20,-5}, -{63,20,-4}, -{63,20,-3}, -{63,20,-2}, -{63,20,-1}, -{63,20,0}, -{63,20,1}, -{63,20,2}, -{63,20,3}, -{63,20,4}, -{63,20,5}, -{63,20,6}, -{63,20,7}, -{63,20,8}, -{63,20,9}, -{63,20,10}, -{63,20,11}, -{63,20,12}, -{63,20,13}, -{63,20,14}, -{63,20,15}, -{63,20,16}, -{63,20,17}, -{63,20,18}, -{63,20,19}, -{63,20,20}, -{63,20,21}, -{63,20,22}, -{63,20,23}, -{63,20,24}, -{63,20,25}, -{63,20,26}, -{63,20,27}, -{63,20,28}, -{63,20,29}, -{63,20,30}, -{63,20,31}, -{63,20,32}, -{63,20,33}, -{63,20,34}, -{63,20,35}, -{63,20,36}, -{63,20,37}, -{63,20,38}, -{63,20,39}, -{63,20,40}, -{63,20,41}, -{63,20,42}, -{63,20,43}, -{63,20,44}, -{63,20,45}, -{63,20,46}, -{63,20,47}, -{63,20,48}, -{63,20,49}, -{63,20,50}, -{63,20,51}, -{63,20,52}, -{63,20,53}, -{63,20,54}, -{63,20,55}, -{63,20,56}, -{63,20,57}, -{63,20,58}, -{63,20,59}, -{63,20,60}, -{63,20,61}, -{63,20,62}, -{63,20,63}, -{63,20,64}, -{63,20,65}, -{63,20,66}, -{63,20,67}, -{63,20,68}, -{63,21,-57}, -{63,21,-56}, -{63,21,-55}, -{63,21,-54}, -{63,21,-53}, -{63,21,-52}, -{63,21,-51}, -{63,21,-50}, -{63,21,-49}, -{63,21,-48}, -{63,21,-47}, -{63,21,-46}, -{63,21,-45}, -{63,21,-44}, -{63,21,-43}, -{63,21,-42}, -{63,21,-41}, -{63,21,-40}, -{63,21,-39}, -{63,21,-38}, -{63,21,-37}, -{63,21,-36}, -{63,21,-35}, -{63,21,-34}, -{63,21,-33}, -{63,21,-32}, -{63,21,-31}, -{63,21,-30}, -{63,21,-29}, -{63,21,-28}, -{63,21,-27}, -{63,21,-26}, -{63,21,-25}, -{63,21,-24}, -{63,21,-23}, -{63,21,-22}, -{63,21,-21}, -{63,21,-20}, -{63,21,-19}, -{63,21,-18}, -{63,21,-17}, -{63,21,-16}, -{63,21,-15}, -{63,21,-14}, -{63,21,-13}, -{63,21,-12}, -{63,21,-11}, -{63,21,-10}, -{63,21,-9}, -{63,21,-8}, -{63,21,-7}, -{63,21,-6}, -{63,21,-5}, -{63,21,-4}, -{63,21,-3}, -{63,21,-2}, -{63,21,-1}, -{63,21,0}, -{63,21,1}, -{63,21,2}, -{63,21,3}, -{63,21,4}, -{63,21,5}, -{63,21,6}, -{63,21,7}, -{63,21,8}, -{63,21,9}, -{63,21,10}, -{63,21,11}, -{63,21,12}, -{63,21,13}, -{63,21,14}, -{63,21,15}, -{63,21,16}, -{63,21,17}, -{63,21,18}, -{63,21,19}, -{63,21,20}, -{63,21,21}, -{63,21,22}, -{63,21,23}, -{63,21,24}, -{63,21,25}, -{63,21,26}, -{63,21,27}, -{63,21,28}, -{63,21,29}, -{63,21,30}, -{63,21,31}, -{63,21,32}, -{63,21,33}, -{63,21,34}, -{63,21,35}, -{63,21,36}, -{63,21,37}, -{63,21,38}, -{63,21,39}, -{63,21,40}, -{63,21,41}, -{63,21,42}, -{63,21,43}, -{63,21,44}, -{63,21,45}, -{63,21,46}, -{63,21,47}, -{63,21,48}, -{63,21,49}, -{63,21,50}, -{63,21,51}, -{63,21,52}, -{63,21,53}, -{63,21,54}, -{63,21,55}, -{63,21,56}, -{63,21,57}, -{63,21,58}, -{63,21,59}, -{63,21,60}, -{63,21,61}, -{63,21,62}, -{63,21,63}, -{63,21,64}, -{63,21,65}, -{63,21,66}, -{63,21,67}, -{63,21,68}, -{63,22,-57}, -{63,22,-56}, -{63,22,-55}, -{63,22,-54}, -{63,22,-53}, -{63,22,-52}, -{63,22,-51}, -{63,22,-50}, -{63,22,-49}, -{63,22,-48}, -{63,22,-47}, -{63,22,-46}, -{63,22,-45}, -{63,22,-44}, -{63,22,-43}, -{63,22,-42}, -{63,22,-41}, -{63,22,-40}, -{63,22,-39}, -{63,22,-38}, -{63,22,-37}, -{63,22,-36}, -{63,22,-35}, -{63,22,-34}, -{63,22,-33}, -{63,22,-32}, -{63,22,-31}, -{63,22,-30}, -{63,22,-29}, -{63,22,-28}, -{63,22,-27}, -{63,22,-26}, -{63,22,-25}, -{63,22,-24}, -{63,22,-23}, -{63,22,-22}, -{63,22,-21}, -{63,22,-20}, -{63,22,-19}, -{63,22,-18}, -{63,22,-17}, -{63,22,-16}, -{63,22,-15}, -{63,22,-14}, -{63,22,-13}, -{63,22,-12}, -{63,22,-11}, -{63,22,-10}, -{63,22,-9}, -{63,22,-8}, -{63,22,-7}, -{63,22,-6}, -{63,22,-5}, -{63,22,-4}, -{63,22,-3}, -{63,22,-2}, -{63,22,-1}, -{63,22,0}, -{63,22,1}, -{63,22,2}, -{63,22,3}, -{63,22,4}, -{63,22,5}, -{63,22,6}, -{63,22,7}, -{63,22,8}, -{63,22,9}, -{63,22,10}, -{63,22,11}, -{63,22,12}, -{63,22,13}, -{63,22,14}, -{63,22,15}, -{63,22,16}, -{63,22,17}, -{63,22,18}, -{63,22,19}, -{63,22,20}, -{63,22,21}, -{63,22,22}, -{63,22,23}, -{63,22,24}, -{63,22,25}, -{63,22,26}, -{63,22,27}, -{63,22,28}, -{63,22,29}, -{63,22,30}, -{63,22,31}, -{63,22,32}, -{63,22,33}, -{63,22,34}, -{63,22,35}, -{63,22,36}, -{63,22,37}, -{63,22,38}, -{63,22,39}, -{63,22,40}, -{63,22,41}, -{63,22,42}, -{63,22,43}, -{63,22,44}, -{63,22,45}, -{63,22,46}, -{63,22,47}, -{63,22,48}, -{63,22,49}, -{63,22,50}, -{63,22,51}, -{63,22,52}, -{63,22,53}, -{63,22,54}, -{63,22,55}, -{63,22,56}, -{63,22,57}, -{63,22,58}, -{63,22,59}, -{63,22,60}, -{63,22,61}, -{63,22,62}, -{63,22,63}, -{63,22,64}, -{63,22,65}, -{63,22,66}, -{63,22,67}, -{63,22,68}, -{63,23,-57}, -{63,23,-56}, -{63,23,-55}, -{63,23,-54}, -{63,23,-53}, -{63,23,-52}, -{63,23,-51}, -{63,23,-50}, -{63,23,-49}, -{63,23,-48}, -{63,23,-47}, -{63,23,-46}, -{63,23,-45}, -{63,23,-44}, -{63,23,-43}, -{63,23,-42}, -{63,23,-41}, -{63,23,-40}, -{63,23,-39}, -{63,23,-38}, -{63,23,-37}, -{63,23,-36}, -{63,23,-35}, -{63,23,-34}, -{63,23,-33}, -{63,23,-32}, -{63,23,-31}, -{63,23,-30}, -{63,23,-29}, -{63,23,-28}, -{63,23,-27}, -{63,23,-26}, -{63,23,-25}, -{63,23,-24}, -{63,23,-23}, -{63,23,-22}, -{63,23,-21}, -{63,23,-20}, -{63,23,-19}, -{63,23,-18}, -{63,23,-17}, -{63,23,-16}, -{63,23,-15}, -{63,23,-14}, -{63,23,-13}, -{63,23,-12}, -{63,23,-11}, -{63,23,-10}, -{63,23,-9}, -{63,23,-8}, -{63,23,-7}, -{63,23,-6}, -{63,23,-5}, -{63,23,-4}, -{63,23,-3}, -{63,23,-2}, -{63,23,-1}, -{63,23,0}, -{63,23,1}, -{63,23,2}, -{63,23,3}, -{63,23,4}, -{63,23,5}, -{63,23,6}, -{63,23,7}, -{63,23,8}, -{63,23,9}, -{63,23,10}, -{63,23,11}, -{63,23,12}, -{63,23,13}, -{63,23,14}, -{63,23,15}, -{63,23,16}, -{63,23,17}, -{63,23,18}, -{63,23,19}, -{63,23,20}, -{63,23,21}, -{63,23,22}, -{63,23,23}, -{63,23,24}, -{63,23,25}, -{63,23,26}, -{63,23,27}, -{63,23,28}, -{63,23,29}, -{63,23,30}, -{63,23,31}, -{63,23,32}, -{63,23,33}, -{63,23,34}, -{63,23,35}, -{63,23,36}, -{63,23,37}, -{63,23,38}, -{63,23,39}, -{63,23,40}, -{63,23,41}, -{63,23,42}, -{63,23,43}, -{63,23,44}, -{63,23,45}, -{63,23,46}, -{63,23,47}, -{63,23,48}, -{63,23,49}, -{63,23,50}, -{63,23,51}, -{63,23,52}, -{63,23,53}, -{63,23,54}, -{63,23,55}, -{63,23,56}, -{63,23,57}, -{63,23,58}, -{63,23,59}, -{63,23,60}, -{63,23,61}, -{63,23,62}, -{63,23,63}, -{63,23,64}, -{63,23,65}, -{63,23,66}, -{63,23,67}, -{63,23,68}, -{63,24,-57}, -{63,24,-56}, -{63,24,-55}, -{63,24,-54}, -{63,24,-53}, -{63,24,-52}, -{63,24,-51}, -{63,24,-50}, -{63,24,-49}, -{63,24,-48}, -{63,24,-47}, -{63,24,-46}, -{63,24,-45}, -{63,24,-44}, -{63,24,-43}, -{63,24,-42}, -{63,24,-41}, -{63,24,-40}, -{63,24,-39}, -{63,24,-38}, -{63,24,-37}, -{63,24,-36}, -{63,24,-35}, -{63,24,-34}, -{63,24,-33}, -{63,24,-32}, -{63,24,-31}, -{63,24,-30}, -{63,24,-29}, -{63,24,-28}, -{63,24,-27}, -{63,24,-26}, -{63,24,-25}, -{63,24,-24}, -{63,24,-23}, -{63,24,-22}, -{63,24,-21}, -{63,24,-20}, -{63,24,-19}, -{63,24,-18}, -{63,24,-17}, -{63,24,-16}, -{63,24,-15}, -{63,24,-14}, -{63,24,-13}, -{63,24,-12}, -{63,24,-11}, -{63,24,-10}, -{63,24,-9}, -{63,24,-8}, -{63,24,-7}, -{63,24,-6}, -{63,24,-5}, -{63,24,-4}, -{63,24,-3}, -{63,24,-2}, -{63,24,-1}, -{63,24,0}, -{63,24,1}, -{63,24,2}, -{63,24,3}, -{63,24,4}, -{63,24,5}, -{63,24,6}, -{63,24,7}, -{63,24,8}, -{63,24,9}, -{63,24,10}, -{63,24,11}, -{63,24,12}, -{63,24,13}, -{63,24,14}, -{63,24,15}, -{63,24,16}, -{63,24,17}, -{63,24,18}, -{63,24,19}, -{63,24,20}, -{63,24,21}, -{63,24,22}, -{63,24,23}, -{63,24,24}, -{63,24,25}, -{63,24,26}, -{63,24,27}, -{63,24,28}, -{63,24,29}, -{63,24,30}, -{63,24,31}, -{63,24,32}, -{63,24,33}, -{63,24,34}, -{63,24,35}, -{63,24,36}, -{63,24,37}, -{63,24,38}, -{63,24,39}, -{63,24,40}, -{63,24,41}, -{63,24,42}, -{63,24,43}, -{63,24,44}, -{63,24,45}, -{63,24,46}, -{63,24,47}, -{63,24,48}, -{63,24,49}, -{63,24,50}, -{63,24,51}, -{63,24,52}, -{63,24,53}, -{63,24,54}, -{63,24,55}, -{63,24,56}, -{63,24,57}, -{63,24,58}, -{63,24,59}, -{63,24,60}, -{63,24,61}, -{63,24,62}, -{63,24,63}, -{63,24,64}, -{63,24,65}, -{63,24,66}, -{63,24,67}, -{63,24,68}, -{63,24,69}, -{63,25,-57}, -{63,25,-56}, -{63,25,-55}, -{63,25,-54}, -{63,25,-53}, -{63,25,-52}, -{63,25,-51}, -{63,25,-50}, -{63,25,-49}, -{63,25,-48}, -{63,25,-47}, -{63,25,-46}, -{63,25,-45}, -{63,25,-44}, -{63,25,-43}, -{63,25,-42}, -{63,25,-41}, -{63,25,-40}, -{63,25,-39}, -{63,25,-38}, -{63,25,-37}, -{63,25,-36}, -{63,25,-35}, -{63,25,-34}, -{63,25,-33}, -{63,25,-32}, -{63,25,-31}, -{63,25,-30}, -{63,25,-29}, -{63,25,-28}, -{63,25,-27}, -{63,25,-26}, -{63,25,-25}, -{63,25,-24}, -{63,25,-23}, -{63,25,-22}, -{63,25,-21}, -{63,25,-20}, -{63,25,-19}, -{63,25,-18}, -{63,25,-17}, -{63,25,-16}, -{63,25,-15}, -{63,25,-14}, -{63,25,-13}, -{63,25,-12}, -{63,25,-11}, -{63,25,-10}, -{63,25,-9}, -{63,25,-8}, -{63,25,-7}, -{63,25,-6}, -{63,25,-5}, -{63,25,-4}, -{63,25,-3}, -{63,25,-2}, -{63,25,-1}, -{63,25,0}, -{63,25,1}, -{63,25,2}, -{63,25,3}, -{63,25,4}, -{63,25,5}, -{63,25,6}, -{63,25,7}, -{63,25,8}, -{63,25,9}, -{63,25,10}, -{63,25,11}, -{63,25,12}, -{63,25,13}, -{63,25,14}, -{63,25,15}, -{63,25,16}, -{63,25,17}, -{63,25,18}, -{63,25,19}, -{63,25,20}, -{63,25,21}, -{63,25,22}, -{63,25,23}, -{63,25,24}, -{63,25,25}, -{63,25,26}, -{63,25,27}, -{63,25,28}, -{63,25,29}, -{63,25,30}, -{63,25,31}, -{63,25,32}, -{63,25,33}, -{63,25,34}, -{63,25,35}, -{63,25,36}, -{63,25,37}, -{63,25,38}, -{63,25,39}, -{63,25,40}, -{63,25,41}, -{63,25,42}, -{63,25,43}, -{63,25,44}, -{63,25,45}, -{63,25,46}, -{63,25,47}, -{63,25,48}, -{63,25,49}, -{63,25,50}, -{63,25,51}, -{63,25,52}, -{63,25,53}, -{63,25,54}, -{63,25,55}, -{63,25,56}, -{63,25,57}, -{63,25,58}, -{63,25,59}, -{63,25,60}, -{63,25,61}, -{63,25,62}, -{63,25,63}, -{63,25,64}, -{63,25,65}, -{63,25,66}, -{63,25,67}, -{63,25,68}, -{63,25,69}, -{63,26,-57}, -{63,26,-56}, -{63,26,-55}, -{63,26,-54}, -{63,26,-53}, -{63,26,-52}, -{63,26,-51}, -{63,26,-50}, -{63,26,-49}, -{63,26,-48}, -{63,26,-47}, -{63,26,-46}, -{63,26,-45}, -{63,26,-44}, -{63,26,-43}, -{63,26,-42}, -{63,26,-41}, -{63,26,-40}, -{63,26,-39}, -{63,26,-38}, -{63,26,-37}, -{63,26,-36}, -{63,26,-35}, -{63,26,-34}, -{63,26,-33}, -{63,26,-32}, -{63,26,-31}, -{63,26,-30}, -{63,26,-29}, -{63,26,-28}, -{63,26,-27}, -{63,26,-26}, -{63,26,-25}, -{63,26,-24}, -{63,26,-23}, -{63,26,-22}, -{63,26,-21}, -{63,26,-20}, -{63,26,-19}, -{63,26,-18}, -{63,26,-17}, -{63,26,-16}, -{63,26,-15}, -{63,26,-14}, -{63,26,-13}, -{63,26,-12}, -{63,26,-11}, -{63,26,-10}, -{63,26,-9}, -{63,26,-8}, -{63,26,-7}, -{63,26,-6}, -{63,26,-5}, -{63,26,-4}, -{63,26,-3}, -{63,26,-2}, -{63,26,-1}, -{63,26,0}, -{63,26,1}, -{63,26,2}, -{63,26,3}, -{63,26,4}, -{63,26,5}, -{63,26,6}, -{63,26,7}, -{63,26,8}, -{63,26,9}, -{63,26,10}, -{63,26,11}, -{63,26,12}, -{63,26,13}, -{63,26,14}, -{63,26,15}, -{63,26,16}, -{63,26,17}, -{63,26,18}, -{63,26,19}, -{63,26,20}, -{63,26,21}, -{63,26,22}, -{63,26,23}, -{63,26,24}, -{63,26,25}, -{63,26,26}, -{63,26,27}, -{63,26,28}, -{63,26,29}, -{63,26,30}, -{63,26,31}, -{63,26,32}, -{63,26,33}, -{63,26,34}, -{63,26,35}, -{63,26,36}, -{63,26,37}, -{63,26,38}, -{63,26,39}, -{63,26,40}, -{63,26,41}, -{63,26,42}, -{63,26,43}, -{63,26,44}, -{63,26,45}, -{63,26,46}, -{63,26,47}, -{63,26,48}, -{63,26,49}, -{63,26,50}, -{63,26,51}, -{63,26,52}, -{63,26,53}, -{63,26,54}, -{63,26,55}, -{63,26,56}, -{63,26,57}, -{63,26,58}, -{63,26,59}, -{63,26,60}, -{63,26,61}, -{63,26,62}, -{63,26,63}, -{63,26,64}, -{63,26,65}, -{63,26,66}, -{63,26,67}, -{63,26,68}, -{63,26,69}, -{63,27,-57}, -{63,27,-56}, -{63,27,-55}, -{63,27,-54}, -{63,27,-53}, -{63,27,-52}, -{63,27,-51}, -{63,27,-50}, -{63,27,-49}, -{63,27,-48}, -{63,27,-47}, -{63,27,-46}, -{63,27,-45}, -{63,27,-44}, -{63,27,-43}, -{63,27,-42}, -{63,27,-41}, -{63,27,-40}, -{63,27,-39}, -{63,27,-38}, -{63,27,-37}, -{63,27,-36}, -{63,27,-35}, -{63,27,-34}, -{63,27,-33}, -{63,27,-32}, -{63,27,-31}, -{63,27,-30}, -{63,27,-29}, -{63,27,-28}, -{63,27,-27}, -{63,27,-26}, -{63,27,-25}, -{63,27,-24}, -{63,27,-23}, -{63,27,-22}, -{63,27,-21}, -{63,27,-20}, -{63,27,-19}, -{63,27,-18}, -{63,27,-17}, -{63,27,-16}, -{63,27,-15}, -{63,27,-14}, -{63,27,-13}, -{63,27,-12}, -{63,27,-11}, -{63,27,-10}, -{63,27,-9}, -{63,27,-8}, -{63,27,-7}, -{63,27,-6}, -{63,27,-5}, -{63,27,-4}, -{63,27,-3}, -{63,27,-2}, -{63,27,-1}, -{63,27,0}, -{63,27,1}, -{63,27,2}, -{63,27,3}, -{63,27,4}, -{63,27,5}, -{63,27,6}, -{63,27,7}, -{63,27,8}, -{63,27,9}, -{63,27,10}, -{63,27,11}, -{63,27,12}, -{63,27,13}, -{63,27,14}, -{63,27,15}, -{63,27,16}, -{63,27,17}, -{63,27,18}, -{63,27,19}, -{63,27,20}, -{63,27,21}, -{63,27,22}, -{63,27,23}, -{63,27,24}, -{63,27,25}, -{63,27,26}, -{63,27,27}, -{63,27,28}, -{63,27,29}, -{63,27,30}, -{63,27,31}, -{63,27,32}, -{63,27,33}, -{63,27,34}, -{63,27,35}, -{63,27,36}, -{63,27,37}, -{63,27,38}, -{63,27,39}, -{63,27,40}, -{63,27,41}, -{63,27,42}, -{63,27,43}, -{63,27,44}, -{63,27,45}, -{63,27,46}, -{63,27,47}, -{63,27,48}, -{63,27,49}, -{63,27,50}, -{63,27,51}, -{63,27,52}, -{63,27,53}, -{63,27,54}, -{63,27,55}, -{63,27,56}, -{63,27,57}, -{63,27,58}, -{63,27,59}, -{63,27,60}, -{63,27,61}, -{63,27,62}, -{63,27,63}, -{63,27,64}, -{63,27,65}, -{63,27,66}, -{63,27,67}, -{63,27,68}, -{63,27,69}, -{63,28,-57}, -{63,28,-56}, -{63,28,-55}, -{63,28,-54}, -{63,28,-53}, -{63,28,-52}, -{63,28,-51}, -{63,28,-50}, -{63,28,-49}, -{63,28,-48}, -{63,28,-47}, -{63,28,-46}, -{63,28,-45}, -{63,28,-44}, -{63,28,-43}, -{63,28,-42}, -{63,28,-41}, -{63,28,-40}, -{63,28,-39}, -{63,28,-38}, -{63,28,-37}, -{63,28,-36}, -{63,28,-35}, -{63,28,-34}, -{63,28,-33}, -{63,28,-32}, -{63,28,-31}, -{63,28,-30}, -{63,28,-29}, -{63,28,-28}, -{63,28,-27}, -{63,28,-26}, -{63,28,-25}, -{63,28,-24}, -{63,28,-23}, -{63,28,-22}, -{63,28,-21}, -{63,28,-20}, -{63,28,-19}, -{63,28,-18}, -{63,28,-17}, -{63,28,-16}, -{63,28,-15}, -{63,28,-14}, -{63,28,-13}, -{63,28,-12}, -{63,28,-11}, -{63,28,-10}, -{63,28,-9}, -{63,28,-8}, -{63,28,-7}, -{63,28,-6}, -{63,28,-5}, -{63,28,-4}, -{63,28,-3}, -{63,28,-2}, -{63,28,-1}, -{63,28,0}, -{63,28,1}, -{63,28,2}, -{63,28,3}, -{63,28,4}, -{63,28,5}, -{63,28,6}, -{63,28,7}, -{63,28,8}, -{63,28,9}, -{63,28,10}, -{63,28,11}, -{63,28,12}, -{63,28,13}, -{63,28,14}, -{63,28,15}, -{63,28,16}, -{63,28,17}, -{63,28,18}, -{63,28,19}, -{63,28,20}, -{63,28,21}, -{63,28,22}, -{63,28,23}, -{63,28,24}, -{63,28,25}, -{63,28,26}, -{63,28,27}, -{63,28,28}, -{63,28,29}, -{63,28,30}, -{63,28,31}, -{63,28,32}, -{63,28,33}, -{63,28,34}, -{63,28,35}, -{63,28,36}, -{63,28,37}, -{63,28,38}, -{63,28,39}, -{63,28,40}, -{63,28,41}, -{63,28,42}, -{63,28,43}, -{63,28,44}, -{63,28,45}, -{63,28,46}, -{63,28,47}, -{63,28,48}, -{63,28,49}, -{63,28,50}, -{63,28,51}, -{63,28,52}, -{63,28,53}, -{63,28,54}, -{63,28,55}, -{63,28,56}, -{63,28,57}, -{63,28,58}, -{63,28,59}, -{63,28,60}, -{63,28,61}, -{63,28,62}, -{63,28,63}, -{63,28,64}, -{63,28,65}, -{63,28,66}, -{63,28,67}, -{63,28,68}, -{63,28,69}, -{63,29,-57}, -{63,29,-56}, -{63,29,-55}, -{63,29,-54}, -{63,29,-53}, -{63,29,-52}, -{63,29,-51}, -{63,29,-50}, -{63,29,-49}, -{63,29,-48}, -{63,29,-47}, -{63,29,-46}, -{63,29,-45}, -{63,29,-44}, -{63,29,-43}, -{63,29,-42}, -{63,29,-41}, -{63,29,-40}, -{63,29,-39}, -{63,29,-38}, -{63,29,-37}, -{63,29,-36}, -{63,29,-35}, -{63,29,-34}, -{63,29,-33}, -{63,29,-32}, -{63,29,-31}, -{63,29,-30}, -{63,29,-29}, -{63,29,-28}, -{63,29,-27}, -{63,29,-26}, -{63,29,-25}, -{63,29,-24}, -{63,29,-23}, -{63,29,-22}, -{63,29,-21}, -{63,29,-20}, -{63,29,-19}, -{63,29,-18}, -{63,29,-17}, -{63,29,-16}, -{63,29,-15}, -{63,29,-14}, -{63,29,-13}, -{63,29,-12}, -{63,29,-11}, -{63,29,-10}, -{63,29,-9}, -{63,29,-8}, -{63,29,-7}, -{63,29,-6}, -{63,29,-5}, -{63,29,-4}, -{63,29,-3}, -{63,29,-2}, -{63,29,-1}, -{63,29,0}, -{63,29,1}, -{63,29,2}, -{63,29,3}, -{63,29,4}, -{63,29,5}, -{63,29,6}, -{63,29,7}, -{63,29,8}, -{63,29,9}, -{63,29,10}, -{63,29,11}, -{63,29,12}, -{63,29,13}, -{63,29,14}, -{63,29,15}, -{63,29,16}, -{63,29,17}, -{63,29,18}, -{63,29,19}, -{63,29,20}, -{63,29,21}, -{63,29,22}, -{63,29,23}, -{63,29,24}, -{63,29,25}, -{63,29,26}, -{63,29,27}, -{63,29,28}, -{63,29,29}, -{63,29,30}, -{63,29,31}, -{63,29,32}, -{63,29,33}, -{63,29,34}, -{63,29,35}, -{63,29,36}, -{63,29,37}, -{63,29,38}, -{63,29,39}, -{63,29,40}, -{63,29,41}, -{63,29,42}, -{63,29,43}, -{63,29,44}, -{63,29,45}, -{63,29,46}, -{63,29,47}, -{63,29,48}, -{63,29,49}, -{63,29,50}, -{63,29,51}, -{63,29,52}, -{63,29,53}, -{63,29,54}, -{63,29,55}, -{63,29,56}, -{63,29,57}, -{63,29,58}, -{63,29,59}, -{63,29,60}, -{63,29,61}, -{63,29,62}, -{63,29,63}, -{63,29,64}, -{63,29,65}, -{63,29,66}, -{63,29,67}, -{63,29,68}, -{63,29,69}, -{63,30,-57}, -{63,30,-56}, -{63,30,-55}, -{63,30,-54}, -{63,30,-53}, -{63,30,-52}, -{63,30,-51}, -{63,30,-50}, -{63,30,-49}, -{63,30,-48}, -{63,30,-47}, -{63,30,-46}, -{63,30,-45}, -{63,30,-44}, -{63,30,-43}, -{63,30,-42}, -{63,30,-41}, -{63,30,-40}, -{63,30,-39}, -{63,30,-38}, -{63,30,-37}, -{63,30,-36}, -{63,30,-35}, -{63,30,-34}, -{63,30,-33}, -{63,30,-32}, -{63,30,-31}, -{63,30,-30}, -{63,30,-29}, -{63,30,-28}, -{63,30,-27}, -{63,30,-26}, -{63,30,-25}, -{63,30,-24}, -{63,30,-23}, -{63,30,-22}, -{63,30,-21}, -{63,30,-20}, -{63,30,-19}, -{63,30,-18}, -{63,30,-17}, -{63,30,-16}, -{63,30,-15}, -{63,30,-14}, -{63,30,-13}, -{63,30,-12}, -{63,30,-11}, -{63,30,-10}, -{63,30,-9}, -{63,30,-8}, -{63,30,-7}, -{63,30,-6}, -{63,30,-5}, -{63,30,-4}, -{63,30,-3}, -{63,30,-2}, -{63,30,-1}, -{63,30,0}, -{63,30,1}, -{63,30,2}, -{63,30,3}, -{63,30,4}, -{63,30,5}, -{63,30,6}, -{63,30,7}, -{63,30,8}, -{63,30,9}, -{63,30,10}, -{63,30,11}, -{63,30,12}, -{63,30,13}, -{63,30,14}, -{63,30,15}, -{63,30,16}, -{63,30,17}, -{63,30,18}, -{63,30,19}, -{63,30,20}, -{63,30,21}, -{63,30,22}, -{63,30,23}, -{63,30,24}, -{63,30,25}, -{63,30,26}, -{63,30,27}, -{63,30,28}, -{63,30,29}, -{63,30,30}, -{63,30,31}, -{63,30,32}, -{63,30,33}, -{63,30,34}, -{63,30,35}, -{63,30,36}, -{63,30,37}, -{63,30,38}, -{63,30,39}, -{63,30,40}, -{63,30,41}, -{63,30,42}, -{63,30,43}, -{63,30,44}, -{63,30,45}, -{63,30,46}, -{63,30,47}, -{63,30,48}, -{63,30,49}, -{63,30,50}, -{63,30,51}, -{63,30,52}, -{63,30,53}, -{63,30,54}, -{63,30,55}, -{63,30,56}, -{63,30,57}, -{63,30,58}, -{63,30,59}, -{63,30,60}, -{63,30,61}, -{63,30,62}, -{63,30,63}, -{63,30,64}, -{63,30,65}, -{63,30,66}, -{63,30,67}, -{63,30,68}, -{63,30,69}, -{63,31,-57}, -{63,31,-56}, -{63,31,-55}, -{63,31,-54}, -{63,31,-53}, -{63,31,-52}, -{63,31,-51}, -{63,31,-50}, -{63,31,-49}, -{63,31,-48}, -{63,31,-47}, -{63,31,-46}, -{63,31,-45}, -{63,31,-44}, -{63,31,-43}, -{63,31,-42}, -{63,31,-41}, -{63,31,-40}, -{63,31,-39}, -{63,31,-38}, -{63,31,-37}, -{63,31,-36}, -{63,31,-35}, -{63,31,-34}, -{63,31,-33}, -{63,31,-32}, -{63,31,-31}, -{63,31,-30}, -{63,31,-29}, -{63,31,-28}, -{63,31,-27}, -{63,31,-26}, -{63,31,-25}, -{63,31,-24}, -{63,31,-23}, -{63,31,-22}, -{63,31,-21}, -{63,31,-20}, -{63,31,-19}, -{63,31,-18}, -{63,31,-17}, -{63,31,-16}, -{63,31,-15}, -{63,31,-14}, -{63,31,-13}, -{63,31,-12}, -{63,31,-11}, -{63,31,-10}, -{63,31,-9}, -{63,31,-8}, -{63,31,-7}, -{63,31,-6}, -{63,31,-5}, -{63,31,-4}, -{63,31,-3}, -{63,31,-2}, -{63,31,-1}, -{63,31,0}, -{63,31,1}, -{63,31,2}, -{63,31,3}, -{63,31,4}, -{63,31,5}, -{63,31,6}, -{63,31,7}, -{63,31,8}, -{63,31,9}, -{63,31,10}, -{63,31,11}, -{63,31,12}, -{63,31,13}, -{63,31,14}, -{63,31,15}, -{63,31,16}, -{63,31,17}, -{63,31,18}, -{63,31,19}, -{63,31,20}, -{63,31,21}, -{63,31,22}, -{63,31,23}, -{63,31,24}, -{63,31,25}, -{63,31,26}, -{63,31,27}, -{63,31,28}, -{63,31,29}, -{63,31,30}, -{63,31,31}, -{63,31,32}, -{63,31,33}, -{63,31,34}, -{63,31,35}, -{63,31,36}, -{63,31,37}, -{63,31,38}, -{63,31,39}, -{63,31,40}, -{63,31,41}, -{63,31,42}, -{63,31,43}, -{63,31,44}, -{63,31,45}, -{63,31,46}, -{63,31,47}, -{63,31,48}, -{63,31,49}, -{63,31,50}, -{63,31,51}, -{63,31,52}, -{63,31,53}, -{63,31,54}, -{63,31,55}, -{63,31,56}, -{63,31,57}, -{63,31,58}, -{63,31,59}, -{63,31,60}, -{63,31,61}, -{63,31,62}, -{63,31,63}, -{63,31,64}, -{63,31,65}, -{63,31,66}, -{63,31,67}, -{63,31,68}, -{63,31,69}, -{63,32,-57}, -{63,32,-56}, -{63,32,-55}, -{63,32,-54}, -{63,32,-53}, -{63,32,-52}, -{63,32,-51}, -{63,32,-50}, -{63,32,-49}, -{63,32,-48}, -{63,32,-47}, -{63,32,-46}, -{63,32,-45}, -{63,32,-44}, -{63,32,-43}, -{63,32,-42}, -{63,32,-41}, -{63,32,-40}, -{63,32,-39}, -{63,32,-38}, -{63,32,-37}, -{63,32,-36}, -{63,32,-35}, -{63,32,-34}, -{63,32,-33}, -{63,32,-32}, -{63,32,-31}, -{63,32,-30}, -{63,32,-29}, -{63,32,-28}, -{63,32,-27}, -{63,32,-26}, -{63,32,-25}, -{63,32,-24}, -{63,32,-23}, -{63,32,-22}, -{63,32,-21}, -{63,32,-20}, -{63,32,-19}, -{63,32,-18}, -{63,32,-17}, -{63,32,-16}, -{63,32,-15}, -{63,32,-14}, -{63,32,-13}, -{63,32,-12}, -{63,32,-11}, -{63,32,-10}, -{63,32,-9}, -{63,32,-8}, -{63,32,-7}, -{63,32,-6}, -{63,32,-5}, -{63,32,-4}, -{63,32,-3}, -{63,32,-2}, -{63,32,-1}, -{63,32,0}, -{63,32,1}, -{63,32,2}, -{63,32,3}, -{63,32,4}, -{63,32,5}, -{63,32,6}, -{63,32,7}, -{63,32,8}, -{63,32,9}, -{63,32,10}, -{63,32,11}, -{63,32,12}, -{63,32,13}, -{63,32,14}, -{63,32,15}, -{63,32,16}, -{63,32,17}, -{63,32,18}, -{63,32,19}, -{63,32,20}, -{63,32,21}, -{63,32,22}, -{63,32,23}, -{63,32,24}, -{63,32,25}, -{63,32,26}, -{63,32,27}, -{63,32,28}, -{63,32,29}, -{63,32,30}, -{63,32,31}, -{63,32,32}, -{63,32,33}, -{63,32,34}, -{63,32,35}, -{63,32,36}, -{63,32,37}, -{63,32,38}, -{63,32,39}, -{63,32,40}, -{63,32,41}, -{63,32,42}, -{63,32,43}, -{63,32,44}, -{63,32,45}, -{63,32,46}, -{63,32,47}, -{63,32,48}, -{63,32,49}, -{63,32,50}, -{63,32,51}, -{63,32,52}, -{63,32,53}, -{63,32,54}, -{63,32,55}, -{63,32,56}, -{63,32,57}, -{63,32,58}, -{63,32,59}, -{63,32,60}, -{63,32,61}, -{63,32,62}, -{63,32,63}, -{63,32,64}, -{63,32,65}, -{63,32,66}, -{63,32,67}, -{63,32,68}, -{63,32,69}, -{63,33,-57}, -{63,33,-56}, -{63,33,-55}, -{63,33,-54}, -{63,33,-53}, -{63,33,-52}, -{63,33,-51}, -{63,33,-50}, -{63,33,-49}, -{63,33,-48}, -{63,33,-47}, -{63,33,-46}, -{63,33,-45}, -{63,33,-44}, -{63,33,-43}, -{63,33,-42}, -{63,33,-41}, -{63,33,-40}, -{63,33,-39}, -{63,33,-38}, -{63,33,-37}, -{63,33,-36}, -{63,33,-35}, -{63,33,-34}, -{63,33,-33}, -{63,33,-32}, -{63,33,-31}, -{63,33,-30}, -{63,33,-29}, -{63,33,-28}, -{63,33,-27}, -{63,33,-26}, -{63,33,-25}, -{63,33,-24}, -{63,33,-23}, -{63,33,-22}, -{63,33,-21}, -{63,33,-20}, -{63,33,-19}, -{63,33,-18}, -{63,33,-17}, -{63,33,-16}, -{63,33,-15}, -{63,33,-14}, -{63,33,-13}, -{63,33,-12}, -{63,33,-11}, -{63,33,-10}, -{63,33,-9}, -{63,33,-8}, -{63,33,-7}, -{63,33,-6}, -{63,33,-5}, -{63,33,-4}, -{63,33,-3}, -{63,33,-2}, -{63,33,-1}, -{63,33,0}, -{63,33,1}, -{63,33,2}, -{63,33,3}, -{63,33,4}, -{63,33,5}, -{63,33,6}, -{63,33,7}, -{63,33,8}, -{63,33,9}, -{63,33,10}, -{63,33,11}, -{63,33,12}, -{63,33,13}, -{63,33,14}, -{63,33,15}, -{63,33,16}, -{63,33,17}, -{63,33,18}, -{63,33,19}, -{63,33,20}, -{63,33,21}, -{63,33,22}, -{63,33,23}, -{63,33,24}, -{63,33,25}, -{63,33,26}, -{63,33,27}, -{63,33,28}, -{63,33,29}, -{63,33,30}, -{63,33,31}, -{63,33,32}, -{63,33,33}, -{63,33,34}, -{63,33,35}, -{63,33,36}, -{63,33,37}, -{63,33,38}, -{63,33,39}, -{63,33,40}, -{63,33,41}, -{63,33,42}, -{63,33,43}, -{63,33,44}, -{63,33,45}, -{63,33,46}, -{63,33,47}, -{63,33,48}, -{63,33,49}, -{63,33,50}, -{63,33,51}, -{63,33,52}, -{63,33,53}, -{63,33,54}, -{63,33,55}, -{63,33,56}, -{63,33,57}, -{63,33,58}, -{63,33,59}, -{63,33,60}, -{63,33,61}, -{63,33,62}, -{63,33,63}, -{63,33,64}, -{63,33,65}, -{63,33,66}, -{63,33,67}, -{63,33,68}, -{63,33,69}, -{63,34,-57}, -{63,34,-56}, -{63,34,-55}, -{63,34,-54}, -{63,34,-53}, -{63,34,-52}, -{63,34,-51}, -{63,34,-50}, -{63,34,-49}, -{63,34,-48}, -{63,34,-47}, -{63,34,-46}, -{63,34,-45}, -{63,34,-44}, -{63,34,-43}, -{63,34,-42}, -{63,34,-41}, -{63,34,-40}, -{63,34,-39}, -{63,34,-38}, -{63,34,-37}, -{63,34,-36}, -{63,34,-35}, -{63,34,-34}, -{63,34,-33}, -{63,34,-32}, -{63,34,-31}, -{63,34,-30}, -{63,34,-29}, -{63,34,-28}, -{63,34,-27}, -{63,34,-26}, -{63,34,-25}, -{63,34,-24}, -{63,34,-23}, -{63,34,-22}, -{63,34,-21}, -{63,34,-20}, -{63,34,-19}, -{63,34,-18}, -{63,34,-17}, -{63,34,-16}, -{63,34,-15}, -{63,34,-14}, -{63,34,-13}, -{63,34,-12}, -{63,34,-11}, -{63,34,-10}, -{63,34,-9}, -{63,34,-8}, -{63,34,-7}, -{63,34,-6}, -{63,34,-5}, -{63,34,-4}, -{63,34,-3}, -{63,34,-2}, -{63,34,-1}, -{63,34,0}, -{63,34,1}, -{63,34,2}, -{63,34,3}, -{63,34,4}, -{63,34,5}, -{63,34,6}, -{63,34,7}, -{63,34,8}, -{63,34,9}, -{63,34,10}, -{63,34,11}, -{63,34,12}, -{63,34,13}, -{63,34,14}, -{63,34,15}, -{63,34,16}, -{63,34,17}, -{63,34,18}, -{63,34,19}, -{63,34,20}, -{63,34,21}, -{63,34,22}, -{63,34,23}, -{63,34,24}, -{63,34,25}, -{63,34,26}, -{63,34,27}, -{63,34,28}, -{63,34,29}, -{63,34,30}, -{63,34,31}, -{63,34,32}, -{63,34,33}, -{63,34,34}, -{63,34,35}, -{63,34,36}, -{63,34,37}, -{63,34,38}, -{63,34,39}, -{63,34,40}, -{63,34,41}, -{63,34,42}, -{63,34,43}, -{63,34,44}, -{63,34,45}, -{63,34,46}, -{63,34,47}, -{63,34,48}, -{63,34,49}, -{63,34,50}, -{63,34,51}, -{63,34,52}, -{63,34,53}, -{63,34,54}, -{63,34,55}, -{63,34,56}, -{63,34,57}, -{63,34,58}, -{63,34,59}, -{63,34,60}, -{63,34,61}, -{63,34,62}, -{63,34,63}, -{63,34,64}, -{63,34,65}, -{63,34,66}, -{63,34,67}, -{63,34,68}, -{63,34,69}, -{63,35,-57}, -{63,35,-56}, -{63,35,-55}, -{63,35,-54}, -{63,35,-53}, -{63,35,-52}, -{63,35,-51}, -{63,35,-50}, -{63,35,-49}, -{63,35,-48}, -{63,35,-47}, -{63,35,-46}, -{63,35,-45}, -{63,35,-44}, -{63,35,-43}, -{63,35,-42}, -{63,35,-41}, -{63,35,-40}, -{63,35,-39}, -{63,35,-38}, -{63,35,-37}, -{63,35,-36}, -{63,35,-35}, -{63,35,-34}, -{63,35,-33}, -{63,35,-32}, -{63,35,-31}, -{63,35,-30}, -{63,35,-29}, -{63,35,-28}, -{63,35,-27}, -{63,35,-26}, -{63,35,-25}, -{63,35,-24}, -{63,35,-23}, -{63,35,-22}, -{63,35,-21}, -{63,35,-20}, -{63,35,-19}, -{63,35,-18}, -{63,35,-17}, -{63,35,-16}, -{63,35,-15}, -{63,35,-14}, -{63,35,-13}, -{63,35,-12}, -{63,35,-11}, -{63,35,-10}, -{63,35,-9}, -{63,35,-8}, -{63,35,-7}, -{63,35,-6}, -{63,35,-5}, -{63,35,-4}, -{63,35,-3}, -{63,35,-2}, -{63,35,-1}, -{63,35,0}, -{63,35,1}, -{63,35,2}, -{63,35,3}, -{63,35,4}, -{63,35,5}, -{63,35,6}, -{63,35,7}, -{63,35,8}, -{63,35,9}, -{63,35,10}, -{63,35,11}, -{63,35,12}, -{63,35,13}, -{63,35,14}, -{63,35,15}, -{63,35,16}, -{63,35,17}, -{63,35,18}, -{63,35,19}, -{63,35,20}, -{63,35,21}, -{63,35,22}, -{63,35,23}, -{63,35,24}, -{63,35,25}, -{63,35,26}, -{63,35,27}, -{63,35,28}, -{63,35,29}, -{63,35,30}, -{63,35,31}, -{63,35,32}, -{63,35,33}, -{63,35,34}, -{63,35,35}, -{63,35,36}, -{63,35,37}, -{63,35,38}, -{63,35,39}, -{63,35,40}, -{63,35,41}, -{63,35,42}, -{63,35,43}, -{63,35,44}, -{63,35,45}, -{63,35,46}, -{63,35,47}, -{63,35,48}, -{63,35,49}, -{63,35,50}, -{63,35,51}, -{63,35,52}, -{63,35,53}, -{63,35,54}, -{63,35,55}, -{63,35,56}, -{63,35,57}, -{63,35,58}, -{63,35,59}, -{63,35,60}, -{63,35,61}, -{63,35,62}, -{63,35,63}, -{63,35,64}, -{63,35,65}, -{63,35,66}, -{63,35,67}, -{63,35,68}, -{63,35,69}, -{63,35,70}, -{63,36,-57}, -{63,36,-56}, -{63,36,-55}, -{63,36,-54}, -{63,36,-53}, -{63,36,-52}, -{63,36,-51}, -{63,36,-50}, -{63,36,-49}, -{63,36,-48}, -{63,36,-47}, -{63,36,-46}, -{63,36,-45}, -{63,36,-44}, -{63,36,-43}, -{63,36,-42}, -{63,36,-41}, -{63,36,-40}, -{63,36,-39}, -{63,36,-38}, -{63,36,-37}, -{63,36,-36}, -{63,36,-35}, -{63,36,-34}, -{63,36,-33}, -{63,36,-32}, -{63,36,-31}, -{63,36,-30}, -{63,36,-29}, -{63,36,-28}, -{63,36,-27}, -{63,36,-26}, -{63,36,-25}, -{63,36,-24}, -{63,36,-23}, -{63,36,-22}, -{63,36,-21}, -{63,36,-20}, -{63,36,-19}, -{63,36,-18}, -{63,36,-17}, -{63,36,-16}, -{63,36,-15}, -{63,36,-14}, -{63,36,-13}, -{63,36,-12}, -{63,36,-11}, -{63,36,-10}, -{63,36,-9}, -{63,36,-8}, -{63,36,-7}, -{63,36,-6}, -{63,36,-5}, -{63,36,-4}, -{63,36,-3}, -{63,36,-2}, -{63,36,-1}, -{63,36,0}, -{63,36,1}, -{63,36,2}, -{63,36,3}, -{63,36,4}, -{63,36,5}, -{63,36,6}, -{63,36,7}, -{63,36,8}, -{63,36,9}, -{63,36,10}, -{63,36,11}, -{63,36,12}, -{63,36,13}, -{63,36,14}, -{63,36,15}, -{63,36,16}, -{63,36,17}, -{63,36,18}, -{63,36,19}, -{63,36,20}, -{63,36,21}, -{63,36,22}, -{63,36,23}, -{63,36,24}, -{63,36,25}, -{63,36,26}, -{63,36,27}, -{63,36,28}, -{63,36,29}, -{63,36,30}, -{63,36,31}, -{63,36,32}, -{63,36,33}, -{63,36,34}, -{63,36,35}, -{63,36,36}, -{63,36,37}, -{63,36,38}, -{63,36,39}, -{63,36,40}, -{63,36,41}, -{63,36,42}, -{63,36,43}, -{63,36,44}, -{63,36,45}, -{63,36,46}, -{63,36,47}, -{63,36,48}, -{63,36,49}, -{63,36,50}, -{63,36,51}, -{63,36,52}, -{63,36,53}, -{63,36,54}, -{63,36,55}, -{63,36,56}, -{63,36,57}, -{63,36,58}, -{63,36,59}, -{63,36,60}, -{63,36,61}, -{63,36,62}, -{63,36,63}, -{63,36,64}, -{63,36,65}, -{63,36,66}, -{63,36,67}, -{63,36,68}, -{63,36,69}, -{63,36,70}, -{63,37,-57}, -{63,37,-56}, -{63,37,-55}, -{63,37,-54}, -{63,37,-53}, -{63,37,-52}, -{63,37,-51}, -{63,37,-50}, -{63,37,-49}, -{63,37,-48}, -{63,37,-47}, -{63,37,-46}, -{63,37,-45}, -{63,37,-44}, -{63,37,-43}, -{63,37,-42}, -{63,37,-41}, -{63,37,-40}, -{63,37,-39}, -{63,37,-38}, -{63,37,-37}, -{63,37,-36}, -{63,37,-35}, -{63,37,-34}, -{63,37,-33}, -{63,37,-32}, -{63,37,-31}, -{63,37,-30}, -{63,37,-29}, -{63,37,-28}, -{63,37,-27}, -{63,37,-26}, -{63,37,-25}, -{63,37,-24}, -{63,37,-23}, -{63,37,-22}, -{63,37,-21}, -{63,37,-20}, -{63,37,-19}, -{63,37,-18}, -{63,37,-17}, -{63,37,-16}, -{63,37,-15}, -{63,37,-14}, -{63,37,-13}, -{63,37,-12}, -{63,37,-11}, -{63,37,-10}, -{63,37,-9}, -{63,37,-8}, -{63,37,-7}, -{63,37,-6}, -{63,37,-5}, -{63,37,-4}, -{63,37,-3}, -{63,37,-2}, -{63,37,-1}, -{63,37,0}, -{63,37,1}, -{63,37,2}, -{63,37,3}, -{63,37,4}, -{63,37,5}, -{63,37,6}, -{63,37,7}, -{63,37,8}, -{63,37,9}, -{63,37,10}, -{63,37,11}, -{63,37,12}, -{63,37,13}, -{63,37,14}, -{63,37,15}, -{63,37,16}, -{63,37,17}, -{63,37,18}, -{63,37,19}, -{63,37,20}, -{63,37,21}, -{63,37,22}, -{63,37,23}, -{63,37,24}, -{63,37,25}, -{63,37,26}, -{63,37,27}, -{63,37,28}, -{63,37,29}, -{63,37,30}, -{63,37,31}, -{63,37,32}, -{63,37,33}, -{63,37,34}, -{63,37,35}, -{63,37,36}, -{63,37,37}, -{63,37,38}, -{63,37,39}, -{63,37,40}, -{63,37,41}, -{63,37,42}, -{63,37,43}, -{63,37,44}, -{63,37,45}, -{63,37,46}, -{63,37,47}, -{63,37,48}, -{63,37,49}, -{63,37,50}, -{63,37,51}, -{63,37,52}, -{63,37,53}, -{63,37,54}, -{63,37,55}, -{63,37,56}, -{63,37,57}, -{63,37,58}, -{63,37,59}, -{63,37,60}, -{63,37,61}, -{63,37,62}, -{63,37,63}, -{63,37,64}, -{63,37,65}, -{63,37,66}, -{63,37,67}, -{63,37,68}, -{63,37,69}, -{63,37,70}, -{63,38,-57}, -{63,38,-56}, -{63,38,-55}, -{63,38,-54}, -{63,38,-53}, -{63,38,-52}, -{63,38,-51}, -{63,38,-50}, -{63,38,-49}, -{63,38,-48}, -{63,38,-47}, -{63,38,-46}, -{63,38,-45}, -{63,38,-44}, -{63,38,-43}, -{63,38,-42}, -{63,38,-41}, -{63,38,-40}, -{63,38,-39}, -{63,38,-38}, -{63,38,-37}, -{63,38,-36}, -{63,38,-35}, -{63,38,-34}, -{63,38,-33}, -{63,38,-32}, -{63,38,-31}, -{63,38,-30}, -{63,38,-29}, -{63,38,-28}, -{63,38,-27}, -{63,38,-26}, -{63,38,-25}, -{63,38,-24}, -{63,38,-23}, -{63,38,-22}, -{63,38,-21}, -{63,38,-20}, -{63,38,-19}, -{63,38,-18}, -{63,38,-17}, -{63,38,-16}, -{63,38,-15}, -{63,38,-14}, -{63,38,-13}, -{63,38,-12}, -{63,38,-11}, -{63,38,-10}, -{63,38,-9}, -{63,38,-8}, -{63,38,-7}, -{63,38,-6}, -{63,38,-5}, -{63,38,-4}, -{63,38,-3}, -{63,38,-2}, -{63,38,-1}, -{63,38,0}, -{63,38,1}, -{63,38,2}, -{63,38,3}, -{63,38,4}, -{63,38,5}, -{63,38,6}, -{63,38,7}, -{63,38,8}, -{63,38,9}, -{63,38,10}, -{63,38,11}, -{63,38,12}, -{63,38,13}, -{63,38,14}, -{63,38,15}, -{63,38,16}, -{63,38,17}, -{63,38,18}, -{63,38,19}, -{63,38,20}, -{63,38,21}, -{63,38,22}, -{63,38,23}, -{63,38,24}, -{63,38,25}, -{63,38,26}, -{63,38,27}, -{63,38,28}, -{63,38,29}, -{63,38,30}, -{63,38,31}, -{63,38,32}, -{63,38,33}, -{63,38,34}, -{63,38,35}, -{63,38,36}, -{63,38,37}, -{63,38,38}, -{63,38,39}, -{63,38,40}, -{63,38,41}, -{63,38,42}, -{63,38,43}, -{63,38,44}, -{63,38,45}, -{63,38,46}, -{63,38,47}, -{63,38,48}, -{63,38,49}, -{63,38,50}, -{63,38,51}, -{63,38,52}, -{63,38,53}, -{63,38,54}, -{63,38,55}, -{63,38,56}, -{63,38,57}, -{63,38,58}, -{63,38,59}, -{63,38,60}, -{63,38,61}, -{63,38,62}, -{63,38,63}, -{63,38,64}, -{63,38,65}, -{63,38,66}, -{63,38,67}, -{63,38,68}, -{63,38,69}, -{63,38,70}, -{63,39,-57}, -{63,39,-56}, -{63,39,-55}, -{63,39,-54}, -{63,39,-53}, -{63,39,-52}, -{63,39,-51}, -{63,39,-50}, -{63,39,-49}, -{63,39,-48}, -{63,39,-47}, -{63,39,-46}, -{63,39,-45}, -{63,39,-44}, -{63,39,-43}, -{63,39,-42}, -{63,39,-41}, -{63,39,-40}, -{63,39,-39}, -{63,39,-38}, -{63,39,-37}, -{63,39,-36}, -{63,39,-35}, -{63,39,-34}, -{63,39,-33}, -{63,39,-32}, -{63,39,-31}, -{63,39,-30}, -{63,39,-29}, -{63,39,-28}, -{63,39,-27}, -{63,39,-26}, -{63,39,-25}, -{63,39,-24}, -{63,39,-23}, -{63,39,-22}, -{63,39,-21}, -{63,39,-20}, -{63,39,-19}, -{63,39,-18}, -{63,39,-17}, -{63,39,-16}, -{63,39,-15}, -{63,39,-14}, -{63,39,-13}, -{63,39,-12}, -{63,39,-11}, -{63,39,-10}, -{63,39,-9}, -{63,39,-8}, -{63,39,-7}, -{63,39,-6}, -{63,39,-5}, -{63,39,-4}, -{63,39,-3}, -{63,39,-2}, -{63,39,-1}, -{63,39,0}, -{63,39,1}, -{63,39,2}, -{63,39,3}, -{63,39,4}, -{63,39,5}, -{63,39,6}, -{63,39,7}, -{63,39,8}, -{63,39,9}, -{63,39,10}, -{63,39,11}, -{63,39,12}, -{63,39,13}, -{63,39,14}, -{63,39,15}, -{63,39,16}, -{63,39,17}, -{63,39,18}, -{63,39,19}, -{63,39,20}, -{63,39,21}, -{63,39,22}, -{63,39,23}, -{63,39,24}, -{63,39,25}, -{63,39,26}, -{63,39,27}, -{63,39,28}, -{63,39,29}, -{63,39,30}, -{63,39,31}, -{63,39,32}, -{63,39,33}, -{63,39,34}, -{63,39,35}, -{63,39,36}, -{63,39,37}, -{63,39,38}, -{63,39,39}, -{63,39,40}, -{63,39,41}, -{63,39,42}, -{63,39,43}, -{63,39,44}, -{63,39,45}, -{63,39,46}, -{63,39,47}, -{63,39,48}, -{63,39,49}, -{63,39,50}, -{63,39,51}, -{63,39,52}, -{63,39,53}, -{63,39,54}, -{63,39,55}, -{63,39,56}, -{63,39,57}, -{63,39,58}, -{63,39,59}, -{63,39,60}, -{63,39,61}, -{63,39,62}, -{63,39,63}, -{63,39,64}, -{63,39,65}, -{63,39,66}, -{63,39,67}, -{63,39,68}, -{63,39,69}, -{63,39,70}, -{63,40,-57}, -{63,40,-56}, -{63,40,-55}, -{63,40,-54}, -{63,40,-53}, -{63,40,-52}, -{63,40,-51}, -{63,40,-50}, -{63,40,-49}, -{63,40,-48}, -{63,40,-47}, -{63,40,-46}, -{63,40,-45}, -{63,40,-44}, -{63,40,-43}, -{63,40,-42}, -{63,40,-41}, -{63,40,-40}, -{63,40,-39}, -{63,40,-38}, -{63,40,-37}, -{63,40,-36}, -{63,40,-35}, -{63,40,-34}, -{63,40,-33}, -{63,40,-32}, -{63,40,-31}, -{63,40,-30}, -{63,40,-29}, -{63,40,-28}, -{63,40,-27}, -{63,40,-26}, -{63,40,-25}, -{63,40,-24}, -{63,40,-23}, -{63,40,-22}, -{63,40,-21}, -{63,40,-20}, -{63,40,-19}, -{63,40,-18}, -{63,40,-17}, -{63,40,-16}, -{63,40,-15}, -{63,40,-14}, -{63,40,-13}, -{63,40,-12}, -{63,40,-11}, -{63,40,-10}, -{63,40,-9}, -{63,40,-8}, -{63,40,-7}, -{63,40,-6}, -{63,40,-5}, -{63,40,-4}, -{63,40,-3}, -{63,40,-2}, -{63,40,-1}, -{63,40,0}, -{63,40,1}, -{63,40,2}, -{63,40,3}, -{63,40,4}, -{63,40,5}, -{63,40,6}, -{63,40,7}, -{63,40,8}, -{63,40,9}, -{63,40,10}, -{63,40,11}, -{63,40,12}, -{63,40,13}, -{63,40,14}, -{63,40,15}, -{63,40,16}, -{63,40,17}, -{63,40,18}, -{63,40,19}, -{63,40,20}, -{63,40,21}, -{63,40,22}, -{63,40,23}, -{63,40,24}, -{63,40,25}, -{63,40,26}, -{63,40,27}, -{63,40,28}, -{63,40,29}, -{63,40,30}, -{63,40,31}, -{63,40,32}, -{63,40,33}, -{63,40,34}, -{63,40,35}, -{63,40,36}, -{63,40,37}, -{63,40,38}, -{63,40,39}, -{63,40,40}, -{63,40,41}, -{63,40,42}, -{63,40,43}, -{63,40,44}, -{63,40,45}, -{63,40,46}, -{63,40,47}, -{63,40,48}, -{63,40,49}, -{63,40,50}, -{63,40,51}, -{63,40,52}, -{63,40,53}, -{63,40,54}, -{63,40,55}, -{63,40,56}, -{63,40,57}, -{63,40,58}, -{63,40,59}, -{63,40,60}, -{63,40,61}, -{63,40,62}, -{63,40,63}, -{63,40,64}, -{63,40,65}, -{63,40,66}, -{63,40,67}, -{63,40,68}, -{63,40,69}, -{63,40,70}, -{63,41,-57}, -{63,41,-56}, -{63,41,-55}, -{63,41,-54}, -{63,41,-53}, -{63,41,-52}, -{63,41,-51}, -{63,41,-50}, -{63,41,-49}, -{63,41,-48}, -{63,41,-47}, -{63,41,-46}, -{63,41,-45}, -{63,41,-44}, -{63,41,-43}, -{63,41,-42}, -{63,41,-41}, -{63,41,-40}, -{63,41,-39}, -{63,41,-38}, -{63,41,-37}, -{63,41,-36}, -{63,41,-35}, -{63,41,-34}, -{63,41,-33}, -{63,41,-32}, -{63,41,-31}, -{63,41,-30}, -{63,41,-29}, -{63,41,-28}, -{63,41,-27}, -{63,41,-26}, -{63,41,-25}, -{63,41,-24}, -{63,41,-23}, -{63,41,-22}, -{63,41,-21}, -{63,41,-20}, -{63,41,-19}, -{63,41,-18}, -{63,41,-17}, -{63,41,-16}, -{63,41,-15}, -{63,41,-14}, -{63,41,-13}, -{63,41,-12}, -{63,41,-11}, -{63,41,-10}, -{63,41,-9}, -{63,41,-8}, -{63,41,-7}, -{63,41,-6}, -{63,41,-5}, -{63,41,-4}, -{63,41,-3}, -{63,41,-2}, -{63,41,-1}, -{63,41,0}, -{63,41,1}, -{63,41,2}, -{63,41,3}, -{63,41,4}, -{63,41,5}, -{63,41,6}, -{63,41,7}, -{63,41,8}, -{63,41,9}, -{63,41,10}, -{63,41,11}, -{63,41,12}, -{63,41,13}, -{63,41,14}, -{63,41,15}, -{63,41,16}, -{63,41,17}, -{63,41,18}, -{63,41,19}, -{63,41,20}, -{63,41,21}, -{63,41,22}, -{63,41,23}, -{63,41,24}, -{63,41,25}, -{63,41,26}, -{63,41,27}, -{63,41,28}, -{63,41,29}, -{63,41,30}, -{63,41,31}, -{63,41,32}, -{63,41,33}, -{63,41,34}, -{63,41,35}, -{63,41,36}, -{63,41,37}, -{63,41,38}, -{63,41,39}, -{63,41,40}, -{63,41,41}, -{63,41,42}, -{63,41,43}, -{63,41,44}, -{63,41,45}, -{63,41,46}, -{63,41,47}, -{63,41,48}, -{63,41,49}, -{63,41,50}, -{63,41,51}, -{63,41,52}, -{63,41,53}, -{63,41,54}, -{63,41,55}, -{63,41,56}, -{63,41,57}, -{63,41,58}, -{63,41,59}, -{63,41,60}, -{63,41,61}, -{63,41,62}, -{63,41,63}, -{63,41,64}, -{63,41,65}, -{63,41,66}, -{63,41,67}, -{63,41,68}, -{63,41,69}, -{63,41,70}, -{63,42,-57}, -{63,42,-56}, -{63,42,-55}, -{63,42,-54}, -{63,42,-53}, -{63,42,-52}, -{63,42,-51}, -{63,42,-50}, -{63,42,-49}, -{63,42,-48}, -{63,42,-47}, -{63,42,-46}, -{63,42,-45}, -{63,42,-44}, -{63,42,-43}, -{63,42,-42}, -{63,42,-41}, -{63,42,-40}, -{63,42,-39}, -{63,42,-38}, -{63,42,-37}, -{63,42,-36}, -{63,42,-35}, -{63,42,-34}, -{63,42,-33}, -{63,42,-32}, -{63,42,-31}, -{63,42,-30}, -{63,42,-29}, -{63,42,-28}, -{63,42,-27}, -{63,42,-26}, -{63,42,-25}, -{63,42,-24}, -{63,42,-23}, -{63,42,-22}, -{63,42,-21}, -{63,42,-20}, -{63,42,-19}, -{63,42,-18}, -{63,42,-17}, -{63,42,-16}, -{63,42,-15}, -{63,42,-14}, -{63,42,-13}, -{63,42,-12}, -{63,42,-11}, -{63,42,-10}, -{63,42,-9}, -{63,42,-8}, -{63,42,-7}, -{63,42,-6}, -{63,42,-5}, -{63,42,-4}, -{63,42,-3}, -{63,42,-2}, -{63,42,-1}, -{63,42,0}, -{63,42,1}, -{63,42,2}, -{63,42,3}, -{63,42,4}, -{63,42,5}, -{63,42,6}, -{63,42,7}, -{63,42,8}, -{63,42,9}, -{63,42,10}, -{63,42,11}, -{63,42,12}, -{63,42,13}, -{63,42,14}, -{63,42,15}, -{63,42,16}, -{63,42,17}, -{63,42,18}, -{63,42,19}, -{63,42,20}, -{63,42,21}, -{63,42,22}, -{63,42,23}, -{63,42,24}, -{63,42,25}, -{63,42,26}, -{63,42,27}, -{63,42,28}, -{63,42,29}, -{63,42,30}, -{63,42,31}, -{63,42,32}, -{63,42,33}, -{63,42,34}, -{63,42,35}, -{63,42,36}, -{63,42,37}, -{63,42,38}, -{63,42,39}, -{63,42,40}, -{63,42,41}, -{63,42,42}, -{63,42,43}, -{63,42,44}, -{63,42,45}, -{63,42,46}, -{63,42,47}, -{63,42,48}, -{63,42,49}, -{63,42,50}, -{63,42,51}, -{63,42,52}, -{63,42,53}, -{63,42,54}, -{63,42,55}, -{63,42,56}, -{63,42,57}, -{63,42,58}, -{63,42,59}, -{63,42,60}, -{63,42,61}, -{63,42,62}, -{63,42,63}, -{63,42,64}, -{63,42,65}, -{63,42,66}, -{63,42,67}, -{63,42,68}, -{63,42,69}, -{63,42,70}, -{63,43,-57}, -{63,43,-56}, -{63,43,-55}, -{63,43,-54}, -{63,43,-53}, -{63,43,-52}, -{63,43,-51}, -{63,43,-50}, -{63,43,-49}, -{63,43,-48}, -{63,43,-47}, -{63,43,-46}, -{63,43,-45}, -{63,43,-44}, -{63,43,-43}, -{63,43,-42}, -{63,43,-41}, -{63,43,-40}, -{63,43,-39}, -{63,43,-38}, -{63,43,-37}, -{63,43,-36}, -{63,43,-35}, -{63,43,-34}, -{63,43,-33}, -{63,43,-32}, -{63,43,-31}, -{63,43,-30}, -{63,43,-29}, -{63,43,-28}, -{63,43,-27}, -{63,43,-26}, -{63,43,-25}, -{63,43,-24}, -{63,43,-23}, -{63,43,-22}, -{63,43,-21}, -{63,43,-20}, -{63,43,-19}, -{63,43,-18}, -{63,43,-17}, -{63,43,-16}, -{63,43,-15}, -{63,43,-14}, -{63,43,-13}, -{63,43,-12}, -{63,43,-11}, -{63,43,-10}, -{63,43,-9}, -{63,43,-8}, -{63,43,-7}, -{63,43,-6}, -{63,43,-5}, -{63,43,-4}, -{63,43,-3}, -{63,43,-2}, -{63,43,-1}, -{63,43,0}, -{63,43,1}, -{63,43,2}, -{63,43,3}, -{63,43,4}, -{63,43,5}, -{63,43,6}, -{63,43,7}, -{63,43,8}, -{63,43,9}, -{63,43,10}, -{63,43,11}, -{63,43,12}, -{63,43,13}, -{63,43,14}, -{63,43,15}, -{63,43,16}, -{63,43,17}, -{63,43,18}, -{63,43,19}, -{63,43,20}, -{63,43,21}, -{63,43,22}, -{63,43,23}, -{63,43,24}, -{63,43,25}, -{63,43,26}, -{63,43,27}, -{63,43,28}, -{63,43,29}, -{63,43,30}, -{63,43,31}, -{63,43,32}, -{63,43,33}, -{63,43,34}, -{63,43,35}, -{63,43,36}, -{63,43,37}, -{63,43,38}, -{63,43,39}, -{63,43,40}, -{63,43,41}, -{63,43,42}, -{63,43,43}, -{63,43,44}, -{63,43,45}, -{63,43,46}, -{63,43,47}, -{63,43,48}, -{63,43,49}, -{63,43,50}, -{63,43,51}, -{63,43,52}, -{63,43,53}, -{63,43,54}, -{63,43,55}, -{63,43,56}, -{63,43,57}, -{63,43,58}, -{63,43,59}, -{63,43,60}, -{63,43,61}, -{63,43,62}, -{63,43,63}, -{63,43,64}, -{63,43,65}, -{63,43,66}, -{63,43,67}, -{63,43,68}, -{63,43,69}, -{63,43,70}, -{63,44,-57}, -{63,44,-56}, -{63,44,-55}, -{63,44,-54}, -{63,44,-53}, -{63,44,-52}, -{63,44,-51}, -{63,44,-50}, -{63,44,-49}, -{63,44,-48}, -{63,44,-47}, -{63,44,-46}, -{63,44,-45}, -{63,44,-44}, -{63,44,-43}, -{63,44,-42}, -{63,44,-41}, -{63,44,-40}, -{63,44,-39}, -{63,44,-38}, -{63,44,-37}, -{63,44,-36}, -{63,44,-35}, -{63,44,-34}, -{63,44,-33}, -{63,44,-32}, -{63,44,-31}, -{63,44,-30}, -{63,44,-29}, -{63,44,-28}, -{63,44,-27}, -{63,44,-26}, -{63,44,-25}, -{63,44,-24}, -{63,44,-23}, -{63,44,-22}, -{63,44,-21}, -{63,44,-20}, -{63,44,-19}, -{63,44,-18}, -{63,44,-17}, -{63,44,-16}, -{63,44,-15}, -{63,44,-14}, -{63,44,-13}, -{63,44,-12}, -{63,44,-11}, -{63,44,-10}, -{63,44,-9}, -{63,44,-8}, -{63,44,-7}, -{63,44,-6}, -{63,44,-5}, -{63,44,-4}, -{63,44,-3}, -{63,44,-2}, -{63,44,-1}, -{63,44,0}, -{63,44,1}, -{63,44,2}, -{63,44,3}, -{63,44,4}, -{63,44,5}, -{63,44,6}, -{63,44,7}, -{63,44,8}, -{63,44,9}, -{63,44,10}, -{63,44,11}, -{63,44,12}, -{63,44,13}, -{63,44,14}, -{63,44,15}, -{63,44,16}, -{63,44,17}, -{63,44,18}, -{63,44,19}, -{63,44,20}, -{63,44,21}, -{63,44,22}, -{63,44,23}, -{63,44,24}, -{63,44,25}, -{63,44,26}, -{63,44,27}, -{63,44,28}, -{63,44,29}, -{63,44,30}, -{63,44,31}, -{63,44,32}, -{63,44,33}, -{63,44,34}, -{63,44,35}, -{63,44,36}, -{63,44,37}, -{63,44,38}, -{63,44,39}, -{63,44,40}, -{63,44,41}, -{63,44,42}, -{63,44,43}, -{63,44,44}, -{63,44,45}, -{63,44,46}, -{63,44,47}, -{63,44,48}, -{63,44,49}, -{63,44,50}, -{63,44,51}, -{63,44,52}, -{63,44,53}, -{63,44,54}, -{63,44,55}, -{63,44,56}, -{63,44,57}, -{63,44,58}, -{63,44,59}, -{63,44,60}, -{63,44,61}, -{63,44,62}, -{63,44,63}, -{63,44,64}, -{63,44,65}, -{63,44,66}, -{63,44,67}, -{63,44,68}, -{63,44,69}, -{63,44,70}, -{63,45,-57}, -{63,45,-56}, -{63,45,-55}, -{63,45,-54}, -{63,45,-53}, -{63,45,-52}, -{63,45,-51}, -{63,45,-50}, -{63,45,-49}, -{63,45,-48}, -{63,45,-47}, -{63,45,-46}, -{63,45,-45}, -{63,45,-44}, -{63,45,-43}, -{63,45,-42}, -{63,45,-41}, -{63,45,-40}, -{63,45,-39}, -{63,45,-38}, -{63,45,-37}, -{63,45,-36}, -{63,45,-35}, -{63,45,-34}, -{63,45,-33}, -{63,45,-32}, -{63,45,-31}, -{63,45,-30}, -{63,45,-29}, -{63,45,-28}, -{63,45,-27}, -{63,45,-26}, -{63,45,-25}, -{63,45,-24}, -{63,45,-23}, -{63,45,-22}, -{63,45,-21}, -{63,45,-20}, -{63,45,-19}, -{63,45,-18}, -{63,45,-17}, -{63,45,-16}, -{63,45,-15}, -{63,45,-14}, -{63,45,-13}, -{63,45,-12}, -{63,45,-11}, -{63,45,-10}, -{63,45,-9}, -{63,45,-8}, -{63,45,-7}, -{63,45,-6}, -{63,45,-5}, -{63,45,-4}, -{63,45,-3}, -{63,45,-2}, -{63,45,-1}, -{63,45,0}, -{63,45,1}, -{63,45,2}, -{63,45,3}, -{63,45,4}, -{63,45,5}, -{63,45,6}, -{63,45,7}, -{63,45,8}, -{63,45,9}, -{63,45,10}, -{63,45,11}, -{63,45,12}, -{63,45,13}, -{63,45,14}, -{63,45,15}, -{63,45,16}, -{63,45,17}, -{63,45,18}, -{63,45,19}, -{63,45,20}, -{63,45,21}, -{63,45,22}, -{63,45,23}, -{63,45,24}, -{63,45,25}, -{63,45,26}, -{63,45,27}, -{63,45,28}, -{63,45,29}, -{63,45,30}, -{63,45,31}, -{63,45,32}, -{63,45,33}, -{63,45,34}, -{63,45,35}, -{63,45,36}, -{63,45,37}, -{63,45,38}, -{63,45,39}, -{63,45,40}, -{63,45,41}, -{63,45,42}, -{63,45,43}, -{63,45,44}, -{63,45,45}, -{63,45,46}, -{63,45,47}, -{63,45,48}, -{63,45,49}, -{63,45,50}, -{63,45,51}, -{63,45,52}, -{63,45,53}, -{63,45,54}, -{63,45,55}, -{63,45,56}, -{63,45,57}, -{63,45,58}, -{63,45,59}, -{63,45,60}, -{63,45,61}, -{63,45,62}, -{63,45,63}, -{63,45,64}, -{63,45,65}, -{63,45,66}, -{63,45,67}, -{63,45,68}, -{63,45,69}, -{63,45,70}, -{63,45,71}, -{63,46,-57}, -{63,46,-56}, -{63,46,-55}, -{63,46,-54}, -{63,46,-53}, -{63,46,-52}, -{63,46,-51}, -{63,46,-50}, -{63,46,-49}, -{63,46,-48}, -{63,46,-47}, -{63,46,-46}, -{63,46,-45}, -{63,46,-44}, -{63,46,-43}, -{63,46,-42}, -{63,46,-41}, -{63,46,-40}, -{63,46,-39}, -{63,46,-38}, -{63,46,-37}, -{63,46,-36}, -{63,46,-35}, -{63,46,-34}, -{63,46,-33}, -{63,46,-32}, -{63,46,-31}, -{63,46,-30}, -{63,46,-29}, -{63,46,-28}, -{63,46,-27}, -{63,46,-26}, -{63,46,-25}, -{63,46,-24}, -{63,46,-23}, -{63,46,-22}, -{63,46,-21}, -{63,46,-20}, -{63,46,-19}, -{63,46,-18}, -{63,46,-17}, -{63,46,-16}, -{63,46,-15}, -{63,46,-14}, -{63,46,-13}, -{63,46,-12}, -{63,46,-11}, -{63,46,-10}, -{63,46,-9}, -{63,46,-8}, -{63,46,-7}, -{63,46,-6}, -{63,46,-5}, -{63,46,-4}, -{63,46,-3}, -{63,46,-2}, -{63,46,-1}, -{63,46,0}, -{63,46,1}, -{63,46,2}, -{63,46,3}, -{63,46,4}, -{63,46,5}, -{63,46,6}, -{63,46,7}, -{63,46,8}, -{63,46,9}, -{63,46,10}, -{63,46,11}, -{63,46,12}, -{63,46,13}, -{63,46,14}, -{63,46,15}, -{63,46,16}, -{63,46,17}, -{63,46,18}, -{63,46,19}, -{63,46,20}, -{63,46,21}, -{63,46,22}, -{63,46,23}, -{63,46,24}, -{63,46,25}, -{63,46,26}, -{63,46,27}, -{63,46,28}, -{63,46,29}, -{63,46,30}, -{63,46,31}, -{63,46,32}, -{63,46,33}, -{63,46,34}, -{63,46,35}, -{63,46,36}, -{63,46,37}, -{63,46,38}, -{63,46,39}, -{63,46,40}, -{63,46,41}, -{63,46,42}, -{63,46,43}, -{63,46,44}, -{63,46,45}, -{63,46,46}, -{63,46,47}, -{63,46,48}, -{63,46,49}, -{63,46,50}, -{63,46,51}, -{63,46,52}, -{63,46,53}, -{63,46,54}, -{63,46,55}, -{63,46,56}, -{63,46,57}, -{63,46,58}, -{63,46,59}, -{63,46,60}, -{63,46,61}, -{63,46,62}, -{63,46,63}, -{63,46,64}, -{63,46,65}, -{63,46,66}, -{63,46,67}, -{63,46,68}, -{63,46,69}, -{63,46,70}, -{63,46,71}, -{63,47,-57}, -{63,47,-56}, -{63,47,-55}, -{63,47,-54}, -{63,47,-53}, -{63,47,-52}, -{63,47,-51}, -{63,47,-50}, -{63,47,-49}, -{63,47,-48}, -{63,47,-47}, -{63,47,-46}, -{63,47,-45}, -{63,47,-44}, -{63,47,-43}, -{63,47,-42}, -{63,47,-41}, -{63,47,-40}, -{63,47,-39}, -{63,47,-38}, -{63,47,-37}, -{63,47,-36}, -{63,47,-35}, -{63,47,-34}, -{63,47,-33}, -{63,47,-32}, -{63,47,-31}, -{63,47,-30}, -{63,47,-29}, -{63,47,-28}, -{63,47,-27}, -{63,47,-26}, -{63,47,-25}, -{63,47,-24}, -{63,47,-23}, -{63,47,-22}, -{63,47,-21}, -{63,47,-20}, -{63,47,-19}, -{63,47,-18}, -{63,47,-17}, -{63,47,-16}, -{63,47,-15}, -{63,47,-14}, -{63,47,-13}, -{63,47,-12}, -{63,47,-11}, -{63,47,-10}, -{63,47,-9}, -{63,47,-8}, -{63,47,-7}, -{63,47,-6}, -{63,47,-5}, -{63,47,-4}, -{63,47,-3}, -{63,47,-2}, -{63,47,-1}, -{63,47,0}, -{63,47,1}, -{63,47,2}, -{63,47,3}, -{63,47,4}, -{63,47,5}, -{63,47,6}, -{63,47,7}, -{63,47,8}, -{63,47,9}, -{63,47,10}, -{63,47,11}, -{63,47,12}, -{63,47,13}, -{63,47,14}, -{63,47,15}, -{63,47,16}, -{63,47,17}, -{63,47,18}, -{63,47,19}, -{63,47,20}, -{63,47,21}, -{63,47,22}, -{63,47,23}, -{63,47,24}, -{63,47,25}, -{63,47,26}, -{63,47,27}, -{63,47,28}, -{63,47,29}, -{63,47,30}, -{63,47,31}, -{63,47,32}, -{63,47,33}, -{63,47,34}, -{63,47,35}, -{63,47,36}, -{63,47,37}, -{63,47,38}, -{63,47,39}, -{63,47,40}, -{63,47,41}, -{63,47,42}, -{63,47,43}, -{63,47,44}, -{63,47,45}, -{63,47,46}, -{63,47,47}, -{63,47,48}, -{63,47,49}, -{63,47,50}, -{63,47,51}, -{63,47,52}, -{63,47,53}, -{63,47,54}, -{63,47,55}, -{63,47,56}, -{63,47,57}, -{63,47,58}, -{63,47,59}, -{63,47,60}, -{63,47,61}, -{63,47,62}, -{63,47,63}, -{63,47,64}, -{63,47,65}, -{63,47,66}, -{63,47,67}, -{63,47,68}, -{63,47,69}, -{63,47,70}, -{63,47,71}, -{63,48,-57}, -{63,48,-56}, -{63,48,-55}, -{63,48,-54}, -{63,48,-53}, -{63,48,-52}, -{63,48,-51}, -{63,48,-50}, -{63,48,-49}, -{63,48,-48}, -{63,48,-47}, -{63,48,-46}, -{63,48,-45}, -{63,48,-44}, -{63,48,-43}, -{63,48,-42}, -{63,48,-41}, -{63,48,-40}, -{63,48,-39}, -{63,48,-38}, -{63,48,-37}, -{63,48,-36}, -{63,48,-35}, -{63,48,-34}, -{63,48,-33}, -{63,48,-32}, -{63,48,-31}, -{63,48,-30}, -{63,48,-29}, -{63,48,-28}, -{63,48,-27}, -{63,48,-26}, -{63,48,-25}, -{63,48,-24}, -{63,48,-23}, -{63,48,-22}, -{63,48,-21}, -{63,48,-20}, -{63,48,-19}, -{63,48,-18}, -{63,48,-17}, -{63,48,-16}, -{63,48,-15}, -{63,48,-14}, -{63,48,-13}, -{63,48,-12}, -{63,48,-11}, -{63,48,-10}, -{63,48,-9}, -{63,48,-8}, -{63,48,-7}, -{63,48,-6}, -{63,48,-5}, -{63,48,-4}, -{63,48,-3}, -{63,48,-2}, -{63,48,-1}, -{63,48,0}, -{63,48,1}, -{63,48,2}, -{63,48,3}, -{63,48,4}, -{63,48,5}, -{63,48,6}, -{63,48,7}, -{63,48,8}, -{63,48,9}, -{63,48,10}, -{63,48,11}, -{63,48,12}, -{63,48,13}, -{63,48,14}, -{63,48,15}, -{63,48,16}, -{63,48,17}, -{63,48,18}, -{63,48,19}, -{63,48,20}, -{63,48,21}, -{63,48,22}, -{63,48,23}, -{63,48,24}, -{63,48,25}, -{63,48,26}, -{63,48,27}, -{63,48,28}, -{63,48,29}, -{63,48,30}, -{63,48,31}, -{63,48,32}, -{63,48,33}, -{63,48,34}, -{63,48,35}, -{63,48,36}, -{63,48,37}, -{63,48,38}, -{63,48,39}, -{63,48,40}, -{63,48,41}, -{63,48,42}, -{63,48,43}, -{63,48,44}, -{63,48,45}, -{63,48,46}, -{63,48,47}, -{63,48,48}, -{63,48,49}, -{63,48,50}, -{63,48,51}, -{63,48,52}, -{63,48,53}, -{63,48,54}, -{63,48,55}, -{63,48,56}, -{63,48,57}, -{63,48,58}, -{63,48,59}, -{63,48,60}, -{63,48,61}, -{63,48,62}, -{63,48,63}, -{63,48,64}, -{63,48,65}, -{63,48,66}, -{63,48,67}, -{63,48,68}, -{63,48,69}, -{63,48,70}, -{63,48,71}, -{63,49,-57}, -{63,49,-56}, -{63,49,-55}, -{63,49,-54}, -{63,49,-53}, -{63,49,-52}, -{63,49,-51}, -{63,49,-50}, -{63,49,-49}, -{63,49,-48}, -{63,49,-47}, -{63,49,-46}, -{63,49,-45}, -{63,49,-44}, -{63,49,-43}, -{63,49,-42}, -{63,49,-41}, -{63,49,-40}, -{63,49,-39}, -{63,49,-38}, -{63,49,-37}, -{63,49,-36}, -{63,49,-35}, -{63,49,-34}, -{63,49,-33}, -{63,49,-32}, -{63,49,-31}, -{63,49,-30}, -{63,49,-29}, -{63,49,-28}, -{63,49,-27}, -{63,49,-26}, -{63,49,-25}, -{63,49,-24}, -{63,49,-23}, -{63,49,-22}, -{63,49,-21}, -{63,49,-20}, -{63,49,-19}, -{63,49,-18}, -{63,49,-17}, -{63,49,-16}, -{63,49,-15}, -{63,49,-14}, -{63,49,-13}, -{63,49,-12}, -{63,49,-11}, -{63,49,-10}, -{63,49,-9}, -{63,49,-8}, -{63,49,-7}, -{63,49,-6}, -{63,49,-5}, -{63,49,-4}, -{63,49,-3}, -{63,49,-2}, -{63,49,-1}, -{63,49,0}, -{63,49,1}, -{63,49,2}, -{63,49,3}, -{63,49,4}, -{63,49,5}, -{63,49,6}, -{63,49,7}, -{63,49,8}, -{63,49,9}, -{63,49,10}, -{63,49,11}, -{63,49,12}, -{63,49,13}, -{63,49,14}, -{63,49,15}, -{63,49,16}, -{63,49,17}, -{63,49,18}, -{63,49,19}, -{63,49,20}, -{63,49,21}, -{63,49,22}, -{63,49,23}, -{63,49,24}, -{63,49,25}, -{63,49,26}, -{63,49,27}, -{63,49,28}, -{63,49,29}, -{63,49,30}, -{63,49,31}, -{63,49,32}, -{63,49,33}, -{63,49,34}, -{63,49,35}, -{63,49,36}, -{63,49,37}, -{63,49,38}, -{63,49,39}, -{63,49,40}, -{63,49,41}, -{63,49,42}, -{63,49,43}, -{63,49,44}, -{63,49,45}, -{63,49,46}, -{63,49,47}, -{63,49,48}, -{63,49,49}, -{63,49,50}, -{63,49,51}, -{63,49,52}, -{63,49,53}, -{63,49,54}, -{63,49,55}, -{63,49,56}, -{63,49,57}, -{63,49,58}, -{63,49,59}, -{63,49,60}, -{63,49,61}, -{63,49,62}, -{63,49,63}, -{63,49,64}, -{63,49,65}, -{63,49,66}, -{63,49,67}, -{63,49,68}, -{63,49,69}, -{63,49,70}, -{63,49,71}, -{63,50,-57}, -{63,50,-56}, -{63,50,-55}, -{63,50,-54}, -{63,50,-53}, -{63,50,-52}, -{63,50,-51}, -{63,50,-50}, -{63,50,-49}, -{63,50,-48}, -{63,50,-47}, -{63,50,-46}, -{63,50,-45}, -{63,50,-44}, -{63,50,-43}, -{63,50,-42}, -{63,50,-41}, -{63,50,-40}, -{63,50,-39}, -{63,50,-38}, -{63,50,-37}, -{63,50,-36}, -{63,50,-35}, -{63,50,-34}, -{63,50,-33}, -{63,50,-32}, -{63,50,-31}, -{63,50,-30}, -{63,50,-29}, -{63,50,-28}, -{63,50,-27}, -{63,50,-26}, -{63,50,-25}, -{63,50,-24}, -{63,50,-23}, -{63,50,-22}, -{63,50,-21}, -{63,50,-20}, -{63,50,-19}, -{63,50,-18}, -{63,50,-17}, -{63,50,-16}, -{63,50,-15}, -{63,50,-14}, -{63,50,-13}, -{63,50,-12}, -{63,50,-11}, -{63,50,-10}, -{63,50,-9}, -{63,50,-8}, -{63,50,-7}, -{63,50,-6}, -{63,50,-5}, -{63,50,-4}, -{63,50,-3}, -{63,50,-2}, -{63,50,-1}, -{63,50,0}, -{63,50,1}, -{63,50,2}, -{63,50,3}, -{63,50,4}, -{63,50,5}, -{63,50,6}, -{63,50,7}, -{63,50,8}, -{63,50,9}, -{63,50,10}, -{63,50,11}, -{63,50,12}, -{63,50,13}, -{63,50,14}, -{63,50,15}, -{63,50,16}, -{63,50,17}, -{63,50,18}, -{63,50,19}, -{63,50,20}, -{63,50,21}, -{63,50,22}, -{63,50,23}, -{63,50,24}, -{63,50,25}, -{63,50,26}, -{63,50,27}, -{63,50,28}, -{63,50,29}, -{63,50,30}, -{63,50,31}, -{63,50,32}, -{63,50,33}, -{63,50,34}, -{63,50,35}, -{63,50,36}, -{63,50,37}, -{63,50,38}, -{63,50,39}, -{63,50,40}, -{63,50,41}, -{63,50,42}, -{63,50,43}, -{63,50,44}, -{63,50,45}, -{63,50,46}, -{63,50,47}, -{63,50,48}, -{63,50,49}, -{63,50,50}, -{63,50,51}, -{63,50,52}, -{63,50,53}, -{63,50,54}, -{63,50,55}, -{63,50,56}, -{63,50,57}, -{63,50,58}, -{63,50,59}, -{63,50,60}, -{63,50,61}, -{63,50,62}, -{63,50,63}, -{63,50,64}, -{63,50,65}, -{63,50,66}, -{63,50,67}, -{63,50,68}, -{63,50,69}, -{63,50,70}, -{63,50,71}, -{63,51,-57}, -{63,51,-56}, -{63,51,-55}, -{63,51,-54}, -{63,51,-53}, -{63,51,-52}, -{63,51,-51}, -{63,51,-50}, -{63,51,-49}, -{63,51,-48}, -{63,51,-47}, -{63,51,-46}, -{63,51,-45}, -{63,51,-44}, -{63,51,-43}, -{63,51,-42}, -{63,51,-41}, -{63,51,-40}, -{63,51,-39}, -{63,51,-38}, -{63,51,-37}, -{63,51,-36}, -{63,51,-35}, -{63,51,-34}, -{63,51,-33}, -{63,51,-32}, -{63,51,-31}, -{63,51,-30}, -{63,51,-29}, -{63,51,-28}, -{63,51,-27}, -{63,51,-26}, -{63,51,-25}, -{63,51,-24}, -{63,51,-23}, -{63,51,-22}, -{63,51,-21}, -{63,51,-20}, -{63,51,-19}, -{63,51,-18}, -{63,51,-17}, -{63,51,-16}, -{63,51,-15}, -{63,51,-14}, -{63,51,-13}, -{63,51,-12}, -{63,51,-11}, -{63,51,-10}, -{63,51,-9}, -{63,51,-8}, -{63,51,-7}, -{63,51,-6}, -{63,51,-5}, -{63,51,-4}, -{63,51,-3}, -{63,51,-2}, -{63,51,-1}, -{63,51,0}, -{63,51,1}, -{63,51,2}, -{63,51,3}, -{63,51,4}, -{63,51,5}, -{63,51,6}, -{63,51,7}, -{63,51,8}, -{63,51,9}, -{63,51,10}, -{63,51,11}, -{63,51,12}, -{63,51,13}, -{63,51,14}, -{63,51,15}, -{63,51,16}, -{63,51,17}, -{63,51,18}, -{63,51,19}, -{63,51,20}, -{63,51,21}, -{63,51,22}, -{63,51,23}, -{63,51,24}, -{63,51,25}, -{63,51,26}, -{63,51,27}, -{63,51,28}, -{63,51,29}, -{63,51,30}, -{63,51,31}, -{63,51,32}, -{63,51,33}, -{63,51,34}, -{63,51,35}, -{63,51,36}, -{63,51,37}, -{63,51,38}, -{63,51,39}, -{63,51,40}, -{63,51,41}, -{63,51,42}, -{63,51,43}, -{63,51,44}, -{63,51,45}, -{63,51,46}, -{63,51,47}, -{63,51,48}, -{63,51,49}, -{63,51,50}, -{63,51,51}, -{63,51,52}, -{63,51,53}, -{63,51,54}, -{63,51,55}, -{63,51,56}, -{63,51,57}, -{63,51,58}, -{63,51,59}, -{63,51,60}, -{63,51,61}, -{63,51,62}, -{63,51,63}, -{63,51,64}, -{63,51,65}, -{63,51,66}, -{63,51,67}, -{63,51,68}, -{63,51,69}, -{63,51,70}, -{63,51,71}, -{63,52,-57}, -{63,52,-56}, -{63,52,-55}, -{63,52,-54}, -{63,52,-53}, -{63,52,-52}, -{63,52,-51}, -{63,52,-50}, -{63,52,-49}, -{63,52,-48}, -{63,52,-47}, -{63,52,-46}, -{63,52,-45}, -{63,52,-44}, -{63,52,-43}, -{63,52,-42}, -{63,52,-41}, -{63,52,-40}, -{63,52,-39}, -{63,52,-38}, -{63,52,-37}, -{63,52,-36}, -{63,52,-35}, -{63,52,-34}, -{63,52,-33}, -{63,52,-32}, -{63,52,-31}, -{63,52,-30}, -{63,52,-29}, -{63,52,-28}, -{63,52,-27}, -{63,52,-26}, -{63,52,-25}, -{63,52,-24}, -{63,52,-23}, -{63,52,-22}, -{63,52,-21}, -{63,52,-20}, -{63,52,-19}, -{63,52,-18}, -{63,52,-17}, -{63,52,-16}, -{63,52,-15}, -{63,52,-14}, -{63,52,-13}, -{63,52,-12}, -{63,52,-11}, -{63,52,-10}, -{63,52,-9}, -{63,52,-8}, -{63,52,-7}, -{63,52,-6}, -{63,52,-5}, -{63,52,-4}, -{63,52,-3}, -{63,52,-2}, -{63,52,-1}, -{63,52,0}, -{63,52,1}, -{63,52,2}, -{63,52,3}, -{63,52,4}, -{63,52,5}, -{63,52,6}, -{63,52,7}, -{63,52,8}, -{63,52,9}, -{63,52,10}, -{63,52,11}, -{63,52,12}, -{63,52,13}, -{63,52,14}, -{63,52,15}, -{63,52,16}, -{63,52,17}, -{63,52,18}, -{63,52,19}, -{63,52,20}, -{63,52,21}, -{63,52,22}, -{63,52,23}, -{63,52,24}, -{63,52,25}, -{63,52,26}, -{63,52,27}, -{63,52,28}, -{63,52,29}, -{63,52,30}, -{63,52,31}, -{63,52,32}, -{63,52,33}, -{63,52,34}, -{63,52,35}, -{63,52,36}, -{63,52,37}, -{63,52,38}, -{63,52,39}, -{63,52,40}, -{63,52,41}, -{63,52,42}, -{63,52,43}, -{63,52,44}, -{63,52,45}, -{63,52,46}, -{63,52,47}, -{63,52,48}, -{63,52,49}, -{63,52,50}, -{63,52,51}, -{63,52,52}, -{63,52,53}, -{63,52,54}, -{63,52,55}, -{63,52,56}, -{63,52,57}, -{63,52,58}, -{63,52,59}, -{63,52,60}, -{63,52,61}, -{63,52,62}, -{63,52,63}, -{63,52,64}, -{63,52,65}, -{63,52,66}, -{63,52,67}, -{63,52,68}, -{63,52,69}, -{63,52,70}, -{63,52,71}, -{63,53,-57}, -{63,53,-56}, -{63,53,-55}, -{63,53,-54}, -{63,53,-53}, -{63,53,-52}, -{63,53,-51}, -{63,53,-50}, -{63,53,-49}, -{63,53,-48}, -{63,53,-47}, -{63,53,-46}, -{63,53,-45}, -{63,53,-44}, -{63,53,-43}, -{63,53,-42}, -{63,53,-41}, -{63,53,-40}, -{63,53,-39}, -{63,53,-38}, -{63,53,-37}, -{63,53,-36}, -{63,53,-35}, -{63,53,-34}, -{63,53,-33}, -{63,53,-32}, -{63,53,-31}, -{63,53,-30}, -{63,53,-29}, -{63,53,-28}, -{63,53,-27}, -{63,53,-26}, -{63,53,-25}, -{63,53,-24}, -{63,53,-23}, -{63,53,-22}, -{63,53,-21}, -{63,53,-20}, -{63,53,-19}, -{63,53,-18}, -{63,53,-17}, -{63,53,-16}, -{63,53,-15}, -{63,53,-14}, -{63,53,-13}, -{63,53,-12}, -{63,53,-11}, -{63,53,-10}, -{63,53,-9}, -{63,53,-8}, -{63,53,-7}, -{63,53,-6}, -{63,53,-5}, -{63,53,-4}, -{63,53,-3}, -{63,53,-2}, -{63,53,-1}, -{63,53,0}, -{63,53,1}, -{63,53,2}, -{63,53,3}, -{63,53,4}, -{63,53,5}, -{63,53,6}, -{63,53,7}, -{63,53,8}, -{63,53,9}, -{63,53,10}, -{63,53,11}, -{63,53,12}, -{63,53,13}, -{63,53,14}, -{63,53,15}, -{63,53,16}, -{63,53,17}, -{63,53,18}, -{63,53,19}, -{63,53,20}, -{63,53,21}, -{63,53,22}, -{63,53,23}, -{63,53,24}, -{63,53,25}, -{63,53,26}, -{63,53,27}, -{63,53,28}, -{63,53,29}, -{63,53,30}, -{63,53,31}, -{63,53,32}, -{63,53,33}, -{63,53,34}, -{63,53,35}, -{63,53,36}, -{63,53,37}, -{63,53,38}, -{63,53,39}, -{63,53,40}, -{63,53,41}, -{63,53,42}, -{63,53,43}, -{63,53,44}, -{63,53,45}, -{63,53,46}, -{63,53,47}, -{63,53,48}, -{63,53,49}, -{63,53,50}, -{63,53,51}, -{63,53,52}, -{63,53,53}, -{63,53,54}, -{63,53,55}, -{63,53,56}, -{63,53,57}, -{63,53,58}, -{63,53,59}, -{63,53,60}, -{63,53,61}, -{63,53,62}, -{63,53,63}, -{63,53,64}, -{63,53,65}, -{63,53,66}, -{63,53,67}, -{63,53,68}, -{63,53,69}, -{63,53,70}, -{63,53,71}, -{63,54,-57}, -{63,54,-56}, -{63,54,-55}, -{63,54,-54}, -{63,54,-53}, -{63,54,-52}, -{63,54,-51}, -{63,54,-50}, -{63,54,-49}, -{63,54,-48}, -{63,54,-47}, -{63,54,-46}, -{63,54,-45}, -{63,54,-44}, -{63,54,-43}, -{63,54,-42}, -{63,54,-41}, -{63,54,-40}, -{63,54,-39}, -{63,54,-38}, -{63,54,-37}, -{63,54,-36}, -{63,54,-35}, -{63,54,-34}, -{63,54,-33}, -{63,54,-32}, -{63,54,-31}, -{63,54,-30}, -{63,54,-29}, -{63,54,-28}, -{63,54,-27}, -{63,54,-26}, -{63,54,-25}, -{63,54,-24}, -{63,54,-23}, -{63,54,-22}, -{63,54,-21}, -{63,54,-20}, -{63,54,-19}, -{63,54,-18}, -{63,54,-17}, -{63,54,-16}, -{63,54,-15}, -{63,54,-14}, -{63,54,-13}, -{63,54,-12}, -{63,54,-11}, -{63,54,-10}, -{63,54,-9}, -{63,54,-8}, -{63,54,-7}, -{63,54,-6}, -{63,54,-5}, -{63,54,-4}, -{63,54,-3}, -{63,54,-2}, -{63,54,-1}, -{63,54,0}, -{63,54,1}, -{63,54,2}, -{63,54,3}, -{63,54,4}, -{63,54,5}, -{63,54,6}, -{63,54,7}, -{63,54,8}, -{63,54,9}, -{63,54,10}, -{63,54,11}, -{63,54,12}, -{63,54,13}, -{63,54,14}, -{63,54,15}, -{63,54,16}, -{63,54,17}, -{63,54,18}, -{63,54,19}, -{63,54,20}, -{63,54,21}, -{63,54,22}, -{63,54,23}, -{63,54,24}, -{63,54,25}, -{63,54,26}, -{63,54,27}, -{63,54,28}, -{63,54,29}, -{63,54,30}, -{63,54,31}, -{63,54,32}, -{63,54,33}, -{63,54,34}, -{63,54,35}, -{63,54,36}, -{63,54,37}, -{63,54,38}, -{63,54,39}, -{63,54,40}, -{63,54,41}, -{63,54,42}, -{63,54,43}, -{63,54,44}, -{63,54,45}, -{63,54,46}, -{63,54,47}, -{63,54,48}, -{63,54,49}, -{63,54,50}, -{63,54,51}, -{63,54,52}, -{63,54,53}, -{63,54,54}, -{63,54,55}, -{63,54,56}, -{63,54,57}, -{63,54,58}, -{63,54,59}, -{63,54,60}, -{63,54,61}, -{63,54,62}, -{63,54,63}, -{63,54,64}, -{63,55,-57}, -{63,55,-56}, -{63,55,-55}, -{63,55,-54}, -{63,55,-53}, -{63,55,-52}, -{63,55,-51}, -{63,55,-50}, -{63,55,-49}, -{63,55,-48}, -{63,55,-47}, -{63,55,-46}, -{63,55,-45}, -{63,55,-44}, -{63,55,-43}, -{63,55,-42}, -{63,55,-41}, -{63,55,-40}, -{63,55,-39}, -{63,55,-38}, -{63,55,-37}, -{63,55,-36}, -{63,55,-35}, -{63,55,-34}, -{63,55,-33}, -{63,55,-32}, -{63,55,-31}, -{63,55,-30}, -{63,55,-29}, -{63,55,-28}, -{63,55,-27}, -{63,55,-26}, -{63,55,-25}, -{63,55,-24}, -{63,55,-23}, -{63,55,-22}, -{63,55,-21}, -{63,55,-20}, -{63,55,-19}, -{63,55,-18}, -{63,55,-17}, -{63,55,-16}, -{63,55,-15}, -{63,55,-14}, -{63,55,-13}, -{63,55,-12}, -{63,55,-11}, -{63,55,-10}, -{63,55,-9}, -{63,55,-8}, -{63,55,-7}, -{63,55,-6}, -{63,55,-5}, -{63,55,-4}, -{63,55,-3}, -{63,55,-2}, -{63,55,-1}, -{63,55,0}, -{63,55,1}, -{63,55,2}, -{63,55,3}, -{63,55,4}, -{63,55,5}, -{63,55,6}, -{63,55,7}, -{63,55,8}, -{63,55,9}, -{63,55,10}, -{63,55,11}, -{63,55,12}, -{63,55,13}, -{63,55,14}, -{63,55,15}, -{63,55,16}, -{63,55,17}, -{63,55,18}, -{63,55,19}, -{63,55,20}, -{63,55,21}, -{63,55,22}, -{63,55,23}, -{63,55,24}, -{63,55,25}, -{63,55,26}, -{63,55,27}, -{63,55,28}, -{63,55,29}, -{63,55,30}, -{63,55,31}, -{63,55,32}, -{63,55,33}, -{63,55,34}, -{63,55,35}, -{63,55,36}, -{63,55,37}, -{63,55,38}, -{63,55,39}, -{63,55,40}, -{63,55,41}, -{63,55,42}, -{63,55,43}, -{63,55,44}, -{63,55,45}, -{63,55,46}, -{63,55,47}, -{63,55,48}, -{63,55,49}, -{63,55,50}, -{63,55,51}, -{63,55,52}, -{63,55,53}, -{63,55,54}, -{63,56,-57}, -{63,56,-56}, -{63,56,-55}, -{63,56,-54}, -{63,56,-53}, -{63,56,-52}, -{63,56,-51}, -{63,56,-50}, -{63,56,-49}, -{63,56,-48}, -{63,56,-47}, -{63,56,-46}, -{63,56,-45}, -{63,56,-44}, -{63,56,-43}, -{63,56,-42}, -{63,56,-41}, -{63,56,-40}, -{63,56,-39}, -{63,56,-38}, -{63,56,-37}, -{63,56,-36}, -{63,56,-35}, -{63,56,-34}, -{63,56,-33}, -{63,56,-32}, -{63,56,-31}, -{63,56,-30}, -{63,56,-29}, -{63,56,-28}, -{63,56,-27}, -{63,56,-26}, -{63,56,-25}, -{63,56,-24}, -{63,56,-23}, -{63,56,-22}, -{63,56,-21}, -{63,56,-20}, -{63,56,-19}, -{63,56,-18}, -{63,56,-17}, -{63,56,-16}, -{63,56,-15}, -{63,56,-14}, -{63,56,-13}, -{63,56,-12}, -{63,56,-11}, -{63,56,-10}, -{63,56,-9}, -{63,56,-8}, -{63,56,-7}, -{63,56,-6}, -{63,56,-5}, -{63,56,-4}, -{63,56,-3}, -{63,56,-2}, -{63,56,-1}, -{63,56,0}, -{63,56,1}, -{63,56,2}, -{63,56,3}, -{63,56,4}, -{63,56,5}, -{63,56,6}, -{63,56,7}, -{63,56,8}, -{63,56,9}, -{63,56,10}, -{63,56,11}, -{63,56,12}, -{63,56,13}, -{63,56,14}, -{63,56,15}, -{63,56,16}, -{63,56,17}, -{63,56,18}, -{63,56,19}, -{63,56,20}, -{63,56,21}, -{63,56,22}, -{63,56,23}, -{63,56,24}, -{63,56,25}, -{63,56,26}, -{63,56,27}, -{63,56,28}, -{63,56,29}, -{63,56,30}, -{63,56,31}, -{63,56,32}, -{63,56,33}, -{63,56,34}, -{63,56,35}, -{63,56,36}, -{63,56,37}, -{63,56,38}, -{63,56,39}, -{63,56,40}, -{63,56,41}, -{63,56,42}, -{63,56,43}, -{63,56,44}, -{63,56,45}, -{63,56,46}, -{63,56,47}, -{63,57,-57}, -{63,57,-56}, -{63,57,-55}, -{63,57,-54}, -{63,57,-53}, -{63,57,-52}, -{63,57,-51}, -{63,57,-50}, -{63,57,-49}, -{63,57,-48}, -{63,57,-47}, -{63,57,-46}, -{63,57,-45}, -{63,57,-44}, -{63,57,-43}, -{63,57,-42}, -{63,57,-41}, -{63,57,-40}, -{63,57,-39}, -{63,57,-38}, -{63,57,-37}, -{63,57,-36}, -{63,57,-35}, -{63,57,-34}, -{63,57,-33}, -{63,57,-32}, -{63,57,-31}, -{63,57,-30}, -{63,57,-29}, -{63,57,-28}, -{63,57,-27}, -{63,57,-26}, -{63,57,-25}, -{63,57,-24}, -{63,57,-23}, -{63,57,-22}, -{63,57,-21}, -{63,57,-20}, -{63,57,-19}, -{63,57,-18}, -{63,57,-17}, -{63,57,-16}, -{63,57,-15}, -{63,57,-14}, -{63,57,-13}, -{63,57,-12}, -{63,57,-11}, -{63,57,-10}, -{63,57,-9}, -{63,57,-8}, -{63,57,-7}, -{63,57,-6}, -{63,57,-5}, -{63,57,-4}, -{63,57,-3}, -{63,57,-2}, -{63,57,-1}, -{63,57,0}, -{63,57,1}, -{63,57,2}, -{63,57,3}, -{63,57,4}, -{63,57,5}, -{63,57,6}, -{63,57,7}, -{63,57,8}, -{63,57,9}, -{63,57,10}, -{63,57,11}, -{63,57,12}, -{63,57,13}, -{63,57,14}, -{63,57,15}, -{63,57,16}, -{63,57,17}, -{63,57,18}, -{63,57,19}, -{63,57,20}, -{63,57,21}, -{63,57,22}, -{63,57,23}, -{63,57,24}, -{63,57,25}, -{63,57,26}, -{63,57,27}, -{63,57,28}, -{63,57,29}, -{63,57,30}, -{63,57,31}, -{63,57,32}, -{63,57,33}, -{63,57,34}, -{63,57,35}, -{63,57,36}, -{63,57,37}, -{63,57,38}, -{63,57,39}, -{63,57,40}, -{63,58,-57}, -{63,58,-56}, -{63,58,-55}, -{63,58,-54}, -{63,58,-53}, -{63,58,-52}, -{63,58,-51}, -{63,58,-50}, -{63,58,-49}, -{63,58,-48}, -{63,58,-47}, -{63,58,-46}, -{63,58,-45}, -{63,58,-44}, -{63,58,-43}, -{63,58,-42}, -{63,58,-41}, -{63,58,-40}, -{63,58,-39}, -{63,58,-38}, -{63,58,-37}, -{63,58,-36}, -{63,58,-35}, -{63,58,-34}, -{63,58,-33}, -{63,58,-32}, -{63,58,-31}, -{63,58,-30}, -{63,58,-29}, -{63,58,-28}, -{63,58,-27}, -{63,58,-26}, -{63,58,-25}, -{63,58,-24}, -{63,58,-23}, -{63,58,-22}, -{63,58,-21}, -{63,58,-20}, -{63,58,-19}, -{63,58,-18}, -{63,58,-17}, -{63,58,-16}, -{63,58,-15}, -{63,58,-14}, -{63,58,-13}, -{63,58,-12}, -{63,58,-11}, -{63,58,-10}, -{63,58,-9}, -{63,58,-8}, -{63,58,-7}, -{63,58,-6}, -{63,58,-5}, -{63,58,-4}, -{63,58,-3}, -{63,58,-2}, -{63,58,-1}, -{63,58,0}, -{63,58,1}, -{63,58,2}, -{63,58,3}, -{63,58,4}, -{63,58,5}, -{63,58,6}, -{63,58,7}, -{63,58,8}, -{63,58,9}, -{63,58,10}, -{63,58,11}, -{63,58,12}, -{63,58,13}, -{63,58,14}, -{63,58,15}, -{63,58,16}, -{63,58,17}, -{63,58,18}, -{63,58,19}, -{63,58,20}, -{63,58,21}, -{63,58,22}, -{63,58,23}, -{63,58,24}, -{63,58,25}, -{63,58,26}, -{63,58,27}, -{63,58,28}, -{63,58,29}, -{63,58,30}, -{63,58,31}, -{63,58,32}, -{63,58,33}, -{63,58,34}, -{63,59,-57}, -{63,59,-56}, -{63,59,-55}, -{63,59,-54}, -{63,59,-53}, -{63,59,-52}, -{63,59,-51}, -{63,59,-50}, -{63,59,-49}, -{63,59,-48}, -{63,59,-47}, -{63,59,-46}, -{63,59,-45}, -{63,59,-44}, -{63,59,-43}, -{63,59,-42}, -{63,59,-41}, -{63,59,-40}, -{63,59,-39}, -{63,59,-38}, -{63,59,-37}, -{63,59,-36}, -{63,59,-35}, -{63,59,-34}, -{63,59,-33}, -{63,59,-32}, -{63,59,-31}, -{63,59,-30}, -{63,59,-29}, -{63,59,-28}, -{63,59,-27}, -{63,59,-26}, -{63,59,-25}, -{63,59,-24}, -{63,59,-23}, -{63,59,-22}, -{63,59,-21}, -{63,59,-20}, -{63,59,-19}, -{63,59,-18}, -{63,59,-17}, -{63,59,-16}, -{63,59,-15}, -{63,59,-14}, -{63,59,-13}, -{63,59,-12}, -{63,59,-11}, -{63,59,-10}, -{63,59,-9}, -{63,59,-8}, -{63,59,-7}, -{63,59,-6}, -{63,59,-5}, -{63,59,-4}, -{63,59,-3}, -{63,59,-2}, -{63,59,-1}, -{63,59,0}, -{63,59,1}, -{63,59,2}, -{63,59,3}, -{63,59,4}, -{63,59,5}, -{63,59,6}, -{63,59,7}, -{63,59,8}, -{63,59,9}, -{63,59,10}, -{63,59,11}, -{63,59,12}, -{63,59,13}, -{63,59,14}, -{63,59,15}, -{63,59,16}, -{63,59,17}, -{63,59,18}, -{63,59,19}, -{63,59,20}, -{63,59,21}, -{63,59,22}, -{63,59,23}, -{63,59,24}, -{63,59,25}, -{63,59,26}, -{63,59,27}, -{63,59,28}, -{63,59,29}, -{63,60,-57}, -{63,60,-56}, -{63,60,-55}, -{63,60,-54}, -{63,60,-53}, -{63,60,-52}, -{63,60,-51}, -{63,60,-50}, -{63,60,-49}, -{63,60,-48}, -{63,60,-47}, -{63,60,-46}, -{63,60,-45}, -{63,60,-44}, -{63,60,-43}, -{63,60,-42}, -{63,60,-41}, -{63,60,-40}, -{63,60,-39}, -{63,60,-38}, -{63,60,-37}, -{63,60,-36}, -{63,60,-35}, -{63,60,-34}, -{63,60,-33}, -{63,60,-32}, -{63,60,-31}, -{63,60,-30}, -{63,60,-29}, -{63,60,-28}, -{63,60,-27}, -{63,60,-26}, -{63,60,-25}, -{63,60,-24}, -{63,60,-23}, -{63,60,-22}, -{63,60,-21}, -{63,60,-20}, -{63,60,-19}, -{63,60,-18}, -{63,60,-17}, -{63,60,-16}, -{63,60,-15}, -{63,60,-14}, -{63,60,-13}, -{63,60,-12}, -{63,60,-11}, -{63,60,-10}, -{63,60,-9}, -{63,60,-8}, -{63,60,-7}, -{63,60,-6}, -{63,60,-5}, -{63,60,-4}, -{63,60,-3}, -{63,60,-2}, -{63,60,-1}, -{63,60,0}, -{63,60,1}, -{63,60,2}, -{63,60,3}, -{63,60,4}, -{63,60,5}, -{63,60,6}, -{63,60,7}, -{63,60,8}, -{63,60,9}, -{63,60,10}, -{63,60,11}, -{63,60,12}, -{63,60,13}, -{63,60,14}, -{63,60,15}, -{63,60,16}, -{63,60,17}, -{63,60,18}, -{63,60,19}, -{63,60,20}, -{63,60,21}, -{63,60,22}, -{63,60,23}, -{63,60,24}, -{63,61,-57}, -{63,61,-56}, -{63,61,-55}, -{63,61,-54}, -{63,61,-53}, -{63,61,-52}, -{63,61,-51}, -{63,61,-50}, -{63,61,-49}, -{63,61,-48}, -{63,61,-47}, -{63,61,-46}, -{63,61,-45}, -{63,61,-44}, -{63,61,-43}, -{63,61,-42}, -{63,61,-41}, -{63,61,-40}, -{63,61,-39}, -{63,61,-38}, -{63,61,-37}, -{63,61,-36}, -{63,61,-35}, -{63,61,-34}, -{63,61,-33}, -{63,61,-32}, -{63,61,-31}, -{63,61,-30}, -{63,61,-29}, -{63,61,-28}, -{63,61,-27}, -{63,61,-26}, -{63,61,-25}, -{63,61,-24}, -{63,61,-23}, -{63,61,-22}, -{63,61,-21}, -{63,61,-20}, -{63,61,-19}, -{63,61,-18}, -{63,61,-17}, -{63,61,-16}, -{63,61,-15}, -{63,61,-14}, -{63,61,-13}, -{63,61,-12}, -{63,61,-11}, -{63,61,-10}, -{63,61,-9}, -{63,61,-8}, -{63,61,-7}, -{63,61,-6}, -{63,61,-5}, -{63,61,-4}, -{63,61,-3}, -{63,61,-2}, -{63,61,-1}, -{63,61,0}, -{63,61,1}, -{63,61,2}, -{63,61,3}, -{63,61,4}, -{63,61,5}, -{63,61,6}, -{63,61,7}, -{63,61,8}, -{63,61,9}, -{63,61,10}, -{63,61,11}, -{63,61,12}, -{63,61,13}, -{63,61,14}, -{63,61,15}, -{63,61,16}, -{63,61,17}, -{63,61,18}, -{63,61,19}, -{63,62,-57}, -{63,62,-56}, -{63,62,-55}, -{63,62,-54}, -{63,62,-53}, -{63,62,-52}, -{63,62,-51}, -{63,62,-50}, -{63,62,-49}, -{63,62,-48}, -{63,62,-47}, -{63,62,-46}, -{63,62,-45}, -{63,62,-44}, -{63,62,-43}, -{63,62,-42}, -{63,62,-41}, -{63,62,-40}, -{63,62,-39}, -{63,62,-38}, -{63,62,-37}, -{63,62,-36}, -{63,62,-35}, -{63,62,-34}, -{63,62,-33}, -{63,62,-32}, -{63,62,-31}, -{63,62,-30}, -{63,62,-29}, -{63,62,-28}, -{63,62,-27}, -{63,62,-26}, -{63,62,-25}, -{63,62,-24}, -{63,62,-23}, -{63,62,-22}, -{63,62,-21}, -{63,62,-20}, -{63,62,-19}, -{63,62,-18}, -{63,62,-17}, -{63,62,-16}, -{63,62,-15}, -{63,62,-14}, -{63,62,-13}, -{63,62,-12}, -{63,62,-11}, -{63,62,-10}, -{63,62,-9}, -{63,62,-8}, -{63,62,-7}, -{63,62,-6}, -{63,62,-5}, -{63,62,-4}, -{63,62,-3}, -{63,62,-2}, -{63,62,-1}, -{63,62,0}, -{63,62,1}, -{63,62,2}, -{63,62,3}, -{63,62,4}, -{63,62,5}, -{63,62,6}, -{63,62,7}, -{63,62,8}, -{63,62,9}, -{63,62,10}, -{63,62,11}, -{63,62,12}, -{63,62,13}, -{63,62,14}, -{63,62,15}, -{63,63,-57}, -{63,63,-56}, -{63,63,-55}, -{63,63,-54}, -{63,63,-53}, -{63,63,-52}, -{63,63,-51}, -{63,63,-50}, -{63,63,-49}, -{63,63,-48}, -{63,63,-47}, -{63,63,-46}, -{63,63,-45}, -{63,63,-44}, -{63,63,-43}, -{63,63,-42}, -{63,63,-41}, -{63,63,-40}, -{63,63,-39}, -{63,63,-38}, -{63,63,-37}, -{63,63,-36}, -{63,63,-35}, -{63,63,-34}, -{63,63,-33}, -{63,63,-32}, -{63,63,-31}, -{63,63,-30}, -{63,63,-29}, -{63,63,-28}, -{63,63,-27}, -{63,63,-26}, -{63,63,-25}, -{63,63,-24}, -{63,63,-23}, -{63,63,-22}, -{63,63,-21}, -{63,63,-20}, -{63,63,-19}, -{63,63,-18}, -{63,63,-17}, -{63,63,-16}, -{63,63,-15}, -{63,63,-14}, -{63,63,-13}, -{63,63,-12}, -{63,63,-11}, -{63,63,-10}, -{63,63,-9}, -{63,63,-8}, -{63,63,-7}, -{63,63,-6}, -{63,63,-5}, -{63,63,-4}, -{63,63,-3}, -{63,63,-2}, -{63,63,-1}, -{63,63,0}, -{63,63,1}, -{63,63,2}, -{63,63,3}, -{63,63,4}, -{63,63,5}, -{63,63,6}, -{63,63,7}, -{63,63,8}, -{63,63,9}, -{63,63,10}, -{63,63,11}, -{63,64,-57}, -{63,64,-56}, -{63,64,-55}, -{63,64,-54}, -{63,64,-53}, -{63,64,-52}, -{63,64,-51}, -{63,64,-50}, -{63,64,-49}, -{63,64,-48}, -{63,64,-47}, -{63,64,-46}, -{63,64,-45}, -{63,64,-44}, -{63,64,-43}, -{63,64,-42}, -{63,64,-41}, -{63,64,-40}, -{63,64,-39}, -{63,64,-38}, -{63,64,-37}, -{63,64,-36}, -{63,64,-35}, -{63,64,-34}, -{63,64,-33}, -{63,64,-32}, -{63,64,-31}, -{63,64,-30}, -{63,64,-29}, -{63,64,-28}, -{63,64,-27}, -{63,64,-26}, -{63,64,-25}, -{63,64,-24}, -{63,64,-23}, -{63,64,-22}, -{63,64,-21}, -{63,64,-20}, -{63,64,-19}, -{63,64,-18}, -{63,64,-17}, -{63,64,-16}, -{63,64,-15}, -{63,64,-14}, -{63,64,-13}, -{63,64,-12}, -{63,64,-11}, -{63,64,-10}, -{63,64,-9}, -{63,64,-8}, -{63,64,-7}, -{63,64,-6}, -{63,64,-5}, -{63,64,-4}, -{63,64,-3}, -{63,64,-2}, -{63,64,-1}, -{63,64,0}, -{63,64,1}, -{63,64,2}, -{63,64,3}, -{63,64,4}, -{63,64,5}, -{63,64,6}, -{63,64,7}, -{63,64,8}, -{63,65,-57}, -{63,65,-56}, -{63,65,-55}, -{63,65,-54}, -{63,65,-53}, -{63,65,-52}, -{63,65,-51}, -{63,65,-50}, -{63,65,-49}, -{63,65,-48}, -{63,65,-47}, -{63,65,-46}, -{63,65,-45}, -{63,65,-44}, -{63,65,-43}, -{63,65,-42}, -{63,65,-41}, -{63,65,-40}, -{63,65,-39}, -{63,65,-38}, -{63,65,-37}, -{63,65,-36}, -{63,65,-35}, -{63,65,-34}, -{63,65,-33}, -{63,65,-32}, -{63,65,-31}, -{63,65,-30}, -{63,65,-29}, -{63,65,-28}, -{63,65,-27}, -{63,65,-26}, -{63,65,-25}, -{63,65,-24}, -{63,65,-23}, -{63,65,-22}, -{63,65,-21}, -{63,65,-20}, -{63,65,-19}, -{63,65,-18}, -{63,65,-17}, -{63,65,-16}, -{63,65,-15}, -{63,65,-14}, -{63,65,-13}, -{63,65,-12}, -{63,65,-11}, -{63,65,-10}, -{63,65,-9}, -{63,65,-8}, -{63,65,-7}, -{63,65,-6}, -{63,65,-5}, -{63,65,-4}, -{63,65,-3}, -{63,65,-2}, -{63,65,-1}, -{63,65,0}, -{63,65,1}, -{63,65,2}, -{63,65,3}, -{63,65,4}, -{63,66,-57}, -{63,66,-56}, -{63,66,-55}, -{63,66,-54}, -{63,66,-53}, -{63,66,-52}, -{63,66,-51}, -{63,66,-50}, -{63,66,-49}, -{63,66,-48}, -{63,66,-47}, -{63,66,-46}, -{63,66,-45}, -{63,66,-44}, -{63,66,-43}, -{63,66,-42}, -{63,66,-41}, -{63,66,-40}, -{63,66,-39}, -{63,66,-38}, -{63,66,-37}, -{63,66,-36}, -{63,66,-35}, -{63,66,-34}, -{63,66,-33}, -{63,66,-32}, -{63,66,-31}, -{63,66,-30}, -{63,66,-29}, -{63,66,-28}, -{63,66,-27}, -{63,66,-26}, -{63,66,-25}, -{63,66,-24}, -{63,66,-23}, -{63,66,-22}, -{63,66,-21}, -{63,66,-20}, -{63,66,-19}, -{63,66,-18}, -{63,66,-17}, -{63,66,-16}, -{63,66,-15}, -{63,66,-14}, -{63,66,-13}, -{63,66,-12}, -{63,66,-11}, -{63,66,-10}, -{63,66,-9}, -{63,66,-8}, -{63,66,-7}, -{63,66,-6}, -{63,66,-5}, -{63,66,-4}, -{63,66,-3}, -{63,66,-2}, -{63,66,-1}, -{63,66,0}, -{63,66,1}, -{63,67,-57}, -{63,67,-56}, -{63,67,-55}, -{63,67,-54}, -{63,67,-53}, -{63,67,-52}, -{63,67,-51}, -{63,67,-50}, -{63,67,-49}, -{63,67,-48}, -{63,67,-47}, -{63,67,-46}, -{63,67,-45}, -{63,67,-44}, -{63,67,-43}, -{63,67,-42}, -{63,67,-41}, -{63,67,-40}, -{63,67,-39}, -{63,67,-38}, -{63,67,-37}, -{63,67,-36}, -{63,67,-35}, -{63,67,-34}, -{63,67,-33}, -{63,67,-32}, -{63,67,-31}, -{63,67,-30}, -{63,67,-29}, -{63,67,-28}, -{63,67,-27}, -{63,67,-26}, -{63,67,-25}, -{63,67,-24}, -{63,67,-23}, -{63,67,-22}, -{63,67,-21}, -{63,67,-20}, -{63,67,-19}, -{63,67,-18}, -{63,67,-17}, -{63,67,-16}, -{63,67,-15}, -{63,67,-14}, -{63,67,-13}, -{63,67,-12}, -{63,67,-11}, -{63,67,-10}, -{63,67,-9}, -{63,67,-8}, -{63,67,-7}, -{63,67,-6}, -{63,67,-5}, -{63,67,-4}, -{63,67,-3}, -{63,68,-57}, -{63,68,-56}, -{63,68,-55}, -{63,68,-54}, -{63,68,-53}, -{63,68,-52}, -{63,68,-51}, -{63,68,-50}, -{63,68,-49}, -{63,68,-48}, -{63,68,-47}, -{63,68,-46}, -{63,68,-45}, -{63,68,-44}, -{63,68,-43}, -{63,68,-42}, -{63,68,-41}, -{63,68,-40}, -{63,68,-39}, -{63,68,-38}, -{63,68,-37}, -{63,68,-36}, -{63,68,-35}, -{63,68,-34}, -{63,68,-33}, -{63,68,-32}, -{63,68,-31}, -{63,68,-30}, -{63,68,-29}, -{63,68,-28}, -{63,68,-27}, -{63,68,-26}, -{63,68,-25}, -{63,68,-24}, -{63,68,-23}, -{63,68,-22}, -{63,68,-21}, -{63,68,-20}, -{63,68,-19}, -{63,68,-18}, -{63,68,-17}, -{63,68,-16}, -{63,68,-15}, -{63,68,-14}, -{63,68,-13}, -{63,68,-12}, -{63,68,-11}, -{63,68,-10}, -{63,68,-9}, -{63,68,-8}, -{63,68,-7}, -{63,68,-6}, -{63,69,-57}, -{63,69,-56}, -{63,69,-55}, -{63,69,-54}, -{63,69,-53}, -{63,69,-52}, -{63,69,-51}, -{63,69,-50}, -{63,69,-49}, -{63,69,-48}, -{63,69,-47}, -{63,69,-46}, -{63,69,-45}, -{63,69,-44}, -{63,69,-43}, -{63,69,-42}, -{63,69,-41}, -{63,69,-40}, -{63,69,-39}, -{63,69,-38}, -{63,69,-37}, -{63,69,-36}, -{63,69,-35}, -{63,69,-34}, -{63,69,-33}, -{63,69,-32}, -{63,69,-31}, -{63,69,-30}, -{63,69,-29}, -{63,69,-28}, -{63,69,-27}, -{63,69,-26}, -{63,69,-25}, -{63,69,-24}, -{63,69,-23}, -{63,69,-22}, -{63,69,-21}, -{63,69,-20}, -{63,69,-19}, -{63,69,-18}, -{63,69,-17}, -{63,69,-16}, -{63,69,-15}, -{63,69,-14}, -{63,69,-13}, -{63,69,-12}, -{63,69,-11}, -{63,69,-10}, -{63,69,-9}, -{63,70,-57}, -{63,70,-56}, -{63,70,-55}, -{63,70,-54}, -{63,70,-53}, -{63,70,-52}, -{63,70,-51}, -{63,70,-50}, -{63,70,-49}, -{63,70,-48}, -{63,70,-47}, -{63,70,-46}, -{63,70,-45}, -{63,70,-44}, -{63,70,-43}, -{63,70,-42}, -{63,70,-41}, -{63,70,-40}, -{63,70,-39}, -{63,70,-38}, -{63,70,-37}, -{63,70,-36}, -{63,70,-35}, -{63,70,-34}, -{63,70,-33}, -{63,70,-32}, -{63,70,-31}, -{63,70,-30}, -{63,70,-29}, -{63,70,-28}, -{63,70,-27}, -{63,70,-26}, -{63,70,-25}, -{63,70,-24}, -{63,70,-23}, -{63,70,-22}, -{63,70,-21}, -{63,70,-20}, -{63,70,-19}, -{63,70,-18}, -{63,70,-17}, -{63,70,-16}, -{63,70,-15}, -{63,70,-14}, -{63,70,-13}, -{63,70,-12}, -{63,71,-56}, -{63,71,-55}, -{63,71,-54}, -{63,71,-53}, -{63,71,-52}, -{63,71,-51}, -{63,71,-50}, -{63,71,-49}, -{63,71,-48}, -{63,71,-47}, -{63,71,-46}, -{63,71,-45}, -{63,71,-44}, -{63,71,-43}, -{63,71,-42}, -{63,71,-41}, -{63,71,-40}, -{63,71,-39}, -{63,71,-38}, -{63,71,-37}, -{63,71,-36}, -{63,71,-35}, -{63,71,-34}, -{63,71,-33}, -{63,71,-32}, -{63,71,-31}, -{63,71,-30}, -{63,71,-29}, -{63,71,-28}, -{63,71,-27}, -{63,71,-26}, -{63,71,-25}, -{63,71,-24}, -{63,71,-23}, -{63,71,-22}, -{63,71,-21}, -{63,71,-20}, -{63,71,-19}, -{63,71,-18}, -{63,71,-17}, -{63,71,-16}, -{63,71,-15}, -{63,71,-14}, -{63,72,-56}, -{63,72,-55}, -{63,72,-54}, -{63,72,-53}, -{63,72,-52}, -{63,72,-51}, -{63,72,-50}, -{63,72,-49}, -{63,72,-48}, -{63,72,-47}, -{63,72,-46}, -{63,72,-45}, -{63,72,-44}, -{63,72,-43}, -{63,72,-42}, -{63,72,-41}, -{63,72,-40}, -{63,72,-39}, -{63,72,-38}, -{63,72,-37}, -{63,72,-36}, -{63,72,-35}, -{63,72,-34}, -{63,72,-33}, -{63,72,-32}, -{63,72,-31}, -{63,72,-30}, -{63,72,-29}, -{63,72,-28}, -{63,72,-27}, -{63,72,-26}, -{63,72,-25}, -{63,72,-24}, -{63,72,-23}, -{63,72,-22}, -{63,72,-21}, -{63,72,-20}, -{63,72,-19}, -{63,72,-18}, -{63,72,-17}, -{63,73,-56}, -{63,73,-55}, -{63,73,-54}, -{63,73,-53}, -{63,73,-52}, -{63,73,-51}, -{63,73,-50}, -{63,73,-49}, -{63,73,-48}, -{63,73,-47}, -{63,73,-46}, -{63,73,-45}, -{63,73,-44}, -{63,73,-43}, -{63,73,-42}, -{63,73,-41}, -{63,73,-40}, -{63,73,-39}, -{63,73,-38}, -{63,73,-37}, -{63,73,-36}, -{63,73,-35}, -{63,73,-34}, -{63,73,-33}, -{63,73,-32}, -{63,73,-31}, -{63,73,-30}, -{63,73,-29}, -{63,73,-28}, -{63,73,-27}, -{63,73,-26}, -{63,73,-25}, -{63,73,-24}, -{63,73,-23}, -{63,73,-22}, -{63,73,-21}, -{63,73,-20}, -{63,74,-56}, -{63,74,-55}, -{63,74,-54}, -{63,74,-53}, -{63,74,-52}, -{63,74,-51}, -{63,74,-50}, -{63,74,-49}, -{63,74,-48}, -{63,74,-47}, -{63,74,-46}, -{63,74,-45}, -{63,74,-44}, -{63,74,-43}, -{63,74,-42}, -{63,74,-41}, -{63,74,-40}, -{63,74,-39}, -{63,74,-38}, -{63,74,-37}, -{63,74,-36}, -{63,74,-35}, -{63,74,-34}, -{63,74,-33}, -{63,74,-32}, -{63,74,-31}, -{63,74,-30}, -{63,74,-29}, -{63,74,-28}, -{63,74,-27}, -{63,74,-26}, -{63,74,-25}, -{63,74,-24}, -{63,74,-23}, -{63,74,-22}, -{63,75,-56}, -{63,75,-55}, -{63,75,-54}, -{63,75,-53}, -{63,75,-52}, -{63,75,-51}, -{63,75,-50}, -{63,75,-49}, -{63,75,-48}, -{63,75,-47}, -{63,75,-46}, -{63,75,-45}, -{63,75,-44}, -{63,75,-43}, -{63,75,-42}, -{63,75,-41}, -{63,75,-40}, -{63,75,-39}, -{63,75,-38}, -{63,75,-37}, -{63,75,-36}, -{63,75,-35}, -{63,75,-34}, -{63,75,-33}, -{63,75,-32}, -{63,75,-31}, -{63,75,-30}, -{63,75,-29}, -{63,75,-28}, -{63,75,-27}, -{63,75,-26}, -{63,75,-25}, -{63,76,-56}, -{63,76,-55}, -{63,76,-54}, -{63,76,-53}, -{63,76,-52}, -{63,76,-51}, -{63,76,-50}, -{63,76,-49}, -{63,76,-48}, -{63,76,-47}, -{63,76,-46}, -{63,76,-45}, -{63,76,-44}, -{63,76,-43}, -{63,76,-42}, -{63,76,-41}, -{63,76,-40}, -{63,76,-39}, -{63,76,-38}, -{63,76,-37}, -{63,76,-36}, -{63,76,-35}, -{63,76,-34}, -{63,76,-33}, -{63,76,-32}, -{63,76,-31}, -{63,76,-30}, -{63,76,-29}, -{63,76,-28}, -{63,76,-27}, -{63,77,-56}, -{63,77,-55}, -{63,77,-54}, -{63,77,-53}, -{63,77,-52}, -{63,77,-51}, -{63,77,-50}, -{63,77,-49}, -{63,77,-48}, -{63,77,-47}, -{63,77,-46}, -{63,77,-45}, -{63,77,-44}, -{63,77,-43}, -{63,77,-42}, -{63,77,-41}, -{63,77,-40}, -{63,77,-39}, -{63,77,-38}, -{63,77,-37}, -{63,77,-36}, -{63,77,-35}, -{63,77,-34}, -{63,77,-33}, -{63,77,-32}, -{63,77,-31}, -{63,77,-30}, -{63,77,-29}, -{63,78,-56}, -{63,78,-55}, -{63,78,-54}, -{63,78,-53}, -{63,78,-52}, -{63,78,-51}, -{63,78,-50}, -{63,78,-49}, -{63,78,-48}, -{63,78,-47}, -{63,78,-46}, -{63,78,-45}, -{63,78,-44}, -{63,78,-43}, -{63,78,-42}, -{63,78,-41}, -{63,78,-40}, -{63,78,-39}, -{63,78,-38}, -{63,78,-37}, -{63,78,-36}, -{63,78,-35}, -{63,78,-34}, -{63,78,-33}, -{63,78,-32}, -{63,79,-56}, -{63,79,-55}, -{63,79,-54}, -{63,79,-53}, -{63,79,-52}, -{63,79,-51}, -{63,79,-50}, -{63,79,-49}, -{63,79,-48}, -{63,79,-47}, -{63,79,-46}, -{63,79,-45}, -{63,79,-44}, -{63,79,-43}, -{63,79,-42}, -{63,79,-41}, -{63,79,-40}, -{63,79,-39}, -{63,79,-38}, -{63,79,-37}, -{63,79,-36}, -{63,79,-35}, -{63,79,-34}, -{63,80,-56}, -{63,80,-55}, -{63,80,-54}, -{63,80,-53}, -{63,80,-52}, -{63,80,-51}, -{63,80,-50}, -{63,80,-49}, -{63,80,-48}, -{63,80,-47}, -{63,80,-46}, -{63,80,-45}, -{63,80,-44}, -{63,80,-43}, -{63,80,-42}, -{63,80,-41}, -{63,80,-40}, -{63,80,-39}, -{63,80,-38}, -{63,80,-37}, -{63,80,-36}, -{63,81,-56}, -{63,81,-55}, -{63,81,-54}, -{63,81,-53}, -{63,81,-52}, -{63,81,-51}, -{63,81,-50}, -{63,81,-49}, -{63,81,-48}, -{63,81,-47}, -{63,81,-46}, -{63,81,-45}, -{63,81,-44}, -{63,81,-43}, -{63,81,-42}, -{63,81,-41}, -{63,81,-40}, -{63,81,-39}, -{63,81,-38}, -{63,82,-56}, -{63,82,-55}, -{63,82,-54}, -{63,82,-53}, -{63,82,-52}, -{63,82,-51}, -{63,82,-50}, -{63,82,-49}, -{63,82,-48}, -{63,82,-47}, -{63,82,-46}, -{63,82,-45}, -{63,82,-44}, -{63,82,-43}, -{63,82,-42}, -{63,82,-41}, -{63,82,-40}, -{63,83,-56}, -{63,83,-55}, -{63,83,-54}, -{63,83,-53}, -{63,83,-52}, -{63,83,-51}, -{63,83,-50}, -{63,83,-49}, -{63,83,-48}, -{63,83,-47}, -{63,83,-46}, -{63,83,-45}, -{63,83,-44}, -{63,83,-43}, -{63,83,-42}, -{63,84,-56}, -{63,84,-55}, -{63,84,-54}, -{63,84,-53}, -{63,84,-52}, -{63,84,-51}, -{63,84,-50}, -{63,84,-49}, -{63,84,-48}, -{63,84,-47}, -{63,84,-46}, -{63,84,-45}, -{63,84,-44}, -{63,85,-56}, -{63,85,-55}, -{63,85,-54}, -{63,85,-53}, -{63,85,-52}, -{63,85,-51}, -{63,85,-50}, -{63,85,-49}, -{63,85,-48}, -{63,85,-47}, -{63,85,-46}, -{63,86,-56}, -{63,86,-55}, -{63,86,-54}, -{63,86,-53}, -{63,86,-52}, -{63,86,-51}, -{63,86,-50}, -{63,86,-49}, -{63,86,-48}, -{63,87,-56}, -{63,87,-55}, -{63,87,-54}, -{63,87,-53}, -{63,87,-52}, -{63,87,-51}, -{63,87,-50}, -{63,88,-56}, -{63,88,-55}, -{63,88,-54}, -{63,88,-53}, -{63,88,-52}, -{63,89,-56}, -{63,89,-55}, -{63,89,-54}, -{63,90,-56}, -{64,-66,61}, -{64,-66,62}, -{64,-66,63}, -{64,-66,64}, -{64,-65,57}, -{64,-65,58}, -{64,-65,59}, -{64,-65,60}, -{64,-65,61}, -{64,-65,62}, -{64,-65,63}, -{64,-65,64}, -{64,-64,53}, -{64,-64,54}, -{64,-64,55}, -{64,-64,56}, -{64,-64,57}, -{64,-64,58}, -{64,-64,59}, -{64,-64,60}, -{64,-64,61}, -{64,-64,62}, -{64,-64,63}, -{64,-64,64}, -{64,-63,49}, -{64,-63,50}, -{64,-63,51}, -{64,-63,52}, -{64,-63,53}, -{64,-63,54}, -{64,-63,55}, -{64,-63,56}, -{64,-63,57}, -{64,-63,58}, -{64,-63,59}, -{64,-63,60}, -{64,-63,61}, -{64,-63,62}, -{64,-63,63}, -{64,-63,64}, -{64,-62,46}, -{64,-62,47}, -{64,-62,48}, -{64,-62,49}, -{64,-62,50}, -{64,-62,51}, -{64,-62,52}, -{64,-62,53}, -{64,-62,54}, -{64,-62,55}, -{64,-62,56}, -{64,-62,57}, -{64,-62,58}, -{64,-62,59}, -{64,-62,60}, -{64,-62,61}, -{64,-62,62}, -{64,-62,63}, -{64,-62,64}, -{64,-61,42}, -{64,-61,43}, -{64,-61,44}, -{64,-61,45}, -{64,-61,46}, -{64,-61,47}, -{64,-61,48}, -{64,-61,49}, -{64,-61,50}, -{64,-61,51}, -{64,-61,52}, -{64,-61,53}, -{64,-61,54}, -{64,-61,55}, -{64,-61,56}, -{64,-61,57}, -{64,-61,58}, -{64,-61,59}, -{64,-61,60}, -{64,-61,61}, -{64,-61,62}, -{64,-61,63}, -{64,-61,64}, -{64,-60,39}, -{64,-60,40}, -{64,-60,41}, -{64,-60,42}, -{64,-60,43}, -{64,-60,44}, -{64,-60,45}, -{64,-60,46}, -{64,-60,47}, -{64,-60,48}, -{64,-60,49}, -{64,-60,50}, -{64,-60,51}, -{64,-60,52}, -{64,-60,53}, -{64,-60,54}, -{64,-60,55}, -{64,-60,56}, -{64,-60,57}, -{64,-60,58}, -{64,-60,59}, -{64,-60,60}, -{64,-60,61}, -{64,-60,62}, -{64,-60,63}, -{64,-60,64}, -{64,-59,36}, -{64,-59,37}, -{64,-59,38}, -{64,-59,39}, -{64,-59,40}, -{64,-59,41}, -{64,-59,42}, -{64,-59,43}, -{64,-59,44}, -{64,-59,45}, -{64,-59,46}, -{64,-59,47}, -{64,-59,48}, -{64,-59,49}, -{64,-59,50}, -{64,-59,51}, -{64,-59,52}, -{64,-59,53}, -{64,-59,54}, -{64,-59,55}, -{64,-59,56}, -{64,-59,57}, -{64,-59,58}, -{64,-59,59}, -{64,-59,60}, -{64,-59,61}, -{64,-59,62}, -{64,-59,63}, -{64,-59,64}, -{64,-58,34}, -{64,-58,35}, -{64,-58,36}, -{64,-58,37}, -{64,-58,38}, -{64,-58,39}, -{64,-58,40}, -{64,-58,41}, -{64,-58,42}, -{64,-58,43}, -{64,-58,44}, -{64,-58,45}, -{64,-58,46}, -{64,-58,47}, -{64,-58,48}, -{64,-58,49}, -{64,-58,50}, -{64,-58,51}, -{64,-58,52}, -{64,-58,53}, -{64,-58,54}, -{64,-58,55}, -{64,-58,56}, -{64,-58,57}, -{64,-58,58}, -{64,-58,59}, -{64,-58,60}, -{64,-58,61}, -{64,-58,62}, -{64,-58,63}, -{64,-58,64}, -{64,-57,31}, -{64,-57,32}, -{64,-57,33}, -{64,-57,34}, -{64,-57,35}, -{64,-57,36}, -{64,-57,37}, -{64,-57,38}, -{64,-57,39}, -{64,-57,40}, -{64,-57,41}, -{64,-57,42}, -{64,-57,43}, -{64,-57,44}, -{64,-57,45}, -{64,-57,46}, -{64,-57,47}, -{64,-57,48}, -{64,-57,49}, -{64,-57,50}, -{64,-57,51}, -{64,-57,52}, -{64,-57,53}, -{64,-57,54}, -{64,-57,55}, -{64,-57,56}, -{64,-57,57}, -{64,-57,58}, -{64,-57,59}, -{64,-57,60}, -{64,-57,61}, -{64,-57,62}, -{64,-57,63}, -{64,-57,64}, -{64,-56,28}, -{64,-56,29}, -{64,-56,30}, -{64,-56,31}, -{64,-56,32}, -{64,-56,33}, -{64,-56,34}, -{64,-56,35}, -{64,-56,36}, -{64,-56,37}, -{64,-56,38}, -{64,-56,39}, -{64,-56,40}, -{64,-56,41}, -{64,-56,42}, -{64,-56,43}, -{64,-56,44}, -{64,-56,45}, -{64,-56,46}, -{64,-56,47}, -{64,-56,48}, -{64,-56,49}, -{64,-56,50}, -{64,-56,51}, -{64,-56,52}, -{64,-56,53}, -{64,-56,54}, -{64,-56,55}, -{64,-56,56}, -{64,-56,57}, -{64,-56,58}, -{64,-56,59}, -{64,-56,60}, -{64,-56,61}, -{64,-56,62}, -{64,-56,63}, -{64,-56,64}, -{64,-55,26}, -{64,-55,27}, -{64,-55,28}, -{64,-55,29}, -{64,-55,30}, -{64,-55,31}, -{64,-55,32}, -{64,-55,33}, -{64,-55,34}, -{64,-55,35}, -{64,-55,36}, -{64,-55,37}, -{64,-55,38}, -{64,-55,39}, -{64,-55,40}, -{64,-55,41}, -{64,-55,42}, -{64,-55,43}, -{64,-55,44}, -{64,-55,45}, -{64,-55,46}, -{64,-55,47}, -{64,-55,48}, -{64,-55,49}, -{64,-55,50}, -{64,-55,51}, -{64,-55,52}, -{64,-55,53}, -{64,-55,54}, -{64,-55,55}, -{64,-55,56}, -{64,-55,57}, -{64,-55,58}, -{64,-55,59}, -{64,-55,60}, -{64,-55,61}, -{64,-55,62}, -{64,-55,63}, -{64,-55,64}, -{64,-54,24}, -{64,-54,25}, -{64,-54,26}, -{64,-54,27}, -{64,-54,28}, -{64,-54,29}, -{64,-54,30}, -{64,-54,31}, -{64,-54,32}, -{64,-54,33}, -{64,-54,34}, -{64,-54,35}, -{64,-54,36}, -{64,-54,37}, -{64,-54,38}, -{64,-54,39}, -{64,-54,40}, -{64,-54,41}, -{64,-54,42}, -{64,-54,43}, -{64,-54,44}, -{64,-54,45}, -{64,-54,46}, -{64,-54,47}, -{64,-54,48}, -{64,-54,49}, -{64,-54,50}, -{64,-54,51}, -{64,-54,52}, -{64,-54,53}, -{64,-54,54}, -{64,-54,55}, -{64,-54,56}, -{64,-54,57}, -{64,-54,58}, -{64,-54,59}, -{64,-54,60}, -{64,-54,61}, -{64,-54,62}, -{64,-54,63}, -{64,-54,64}, -{64,-53,21}, -{64,-53,22}, -{64,-53,23}, -{64,-53,24}, -{64,-53,25}, -{64,-53,26}, -{64,-53,27}, -{64,-53,28}, -{64,-53,29}, -{64,-53,30}, -{64,-53,31}, -{64,-53,32}, -{64,-53,33}, -{64,-53,34}, -{64,-53,35}, -{64,-53,36}, -{64,-53,37}, -{64,-53,38}, -{64,-53,39}, -{64,-53,40}, -{64,-53,41}, -{64,-53,42}, -{64,-53,43}, -{64,-53,44}, -{64,-53,45}, -{64,-53,46}, -{64,-53,47}, -{64,-53,48}, -{64,-53,49}, -{64,-53,50}, -{64,-53,51}, -{64,-53,52}, -{64,-53,53}, -{64,-53,54}, -{64,-53,55}, -{64,-53,56}, -{64,-53,57}, -{64,-53,58}, -{64,-53,59}, -{64,-53,60}, -{64,-53,61}, -{64,-53,62}, -{64,-53,63}, -{64,-53,64}, -{64,-52,19}, -{64,-52,20}, -{64,-52,21}, -{64,-52,22}, -{64,-52,23}, -{64,-52,24}, -{64,-52,25}, -{64,-52,26}, -{64,-52,27}, -{64,-52,28}, -{64,-52,29}, -{64,-52,30}, -{64,-52,31}, -{64,-52,32}, -{64,-52,33}, -{64,-52,34}, -{64,-52,35}, -{64,-52,36}, -{64,-52,37}, -{64,-52,38}, -{64,-52,39}, -{64,-52,40}, -{64,-52,41}, -{64,-52,42}, -{64,-52,43}, -{64,-52,44}, -{64,-52,45}, -{64,-52,46}, -{64,-52,47}, -{64,-52,48}, -{64,-52,49}, -{64,-52,50}, -{64,-52,51}, -{64,-52,52}, -{64,-52,53}, -{64,-52,54}, -{64,-52,55}, -{64,-52,56}, -{64,-52,57}, -{64,-52,58}, -{64,-52,59}, -{64,-52,60}, -{64,-52,61}, -{64,-52,62}, -{64,-52,63}, -{64,-52,64}, -{64,-51,17}, -{64,-51,18}, -{64,-51,19}, -{64,-51,20}, -{64,-51,21}, -{64,-51,22}, -{64,-51,23}, -{64,-51,24}, -{64,-51,25}, -{64,-51,26}, -{64,-51,27}, -{64,-51,28}, -{64,-51,29}, -{64,-51,30}, -{64,-51,31}, -{64,-51,32}, -{64,-51,33}, -{64,-51,34}, -{64,-51,35}, -{64,-51,36}, -{64,-51,37}, -{64,-51,38}, -{64,-51,39}, -{64,-51,40}, -{64,-51,41}, -{64,-51,42}, -{64,-51,43}, -{64,-51,44}, -{64,-51,45}, -{64,-51,46}, -{64,-51,47}, -{64,-51,48}, -{64,-51,49}, -{64,-51,50}, -{64,-51,51}, -{64,-51,52}, -{64,-51,53}, -{64,-51,54}, -{64,-51,55}, -{64,-51,56}, -{64,-51,57}, -{64,-51,58}, -{64,-51,59}, -{64,-51,60}, -{64,-51,61}, -{64,-51,62}, -{64,-51,63}, -{64,-51,64}, -{64,-51,65}, -{64,-50,15}, -{64,-50,16}, -{64,-50,17}, -{64,-50,18}, -{64,-50,19}, -{64,-50,20}, -{64,-50,21}, -{64,-50,22}, -{64,-50,23}, -{64,-50,24}, -{64,-50,25}, -{64,-50,26}, -{64,-50,27}, -{64,-50,28}, -{64,-50,29}, -{64,-50,30}, -{64,-50,31}, -{64,-50,32}, -{64,-50,33}, -{64,-50,34}, -{64,-50,35}, -{64,-50,36}, -{64,-50,37}, -{64,-50,38}, -{64,-50,39}, -{64,-50,40}, -{64,-50,41}, -{64,-50,42}, -{64,-50,43}, -{64,-50,44}, -{64,-50,45}, -{64,-50,46}, -{64,-50,47}, -{64,-50,48}, -{64,-50,49}, -{64,-50,50}, -{64,-50,51}, -{64,-50,52}, -{64,-50,53}, -{64,-50,54}, -{64,-50,55}, -{64,-50,56}, -{64,-50,57}, -{64,-50,58}, -{64,-50,59}, -{64,-50,60}, -{64,-50,61}, -{64,-50,62}, -{64,-50,63}, -{64,-50,64}, -{64,-50,65}, -{64,-49,13}, -{64,-49,14}, -{64,-49,15}, -{64,-49,16}, -{64,-49,17}, -{64,-49,18}, -{64,-49,19}, -{64,-49,20}, -{64,-49,21}, -{64,-49,22}, -{64,-49,23}, -{64,-49,24}, -{64,-49,25}, -{64,-49,26}, -{64,-49,27}, -{64,-49,28}, -{64,-49,29}, -{64,-49,30}, -{64,-49,31}, -{64,-49,32}, -{64,-49,33}, -{64,-49,34}, -{64,-49,35}, -{64,-49,36}, -{64,-49,37}, -{64,-49,38}, -{64,-49,39}, -{64,-49,40}, -{64,-49,41}, -{64,-49,42}, -{64,-49,43}, -{64,-49,44}, -{64,-49,45}, -{64,-49,46}, -{64,-49,47}, -{64,-49,48}, -{64,-49,49}, -{64,-49,50}, -{64,-49,51}, -{64,-49,52}, -{64,-49,53}, -{64,-49,54}, -{64,-49,55}, -{64,-49,56}, -{64,-49,57}, -{64,-49,58}, -{64,-49,59}, -{64,-49,60}, -{64,-49,61}, -{64,-49,62}, -{64,-49,63}, -{64,-49,64}, -{64,-49,65}, -{64,-48,11}, -{64,-48,12}, -{64,-48,13}, -{64,-48,14}, -{64,-48,15}, -{64,-48,16}, -{64,-48,17}, -{64,-48,18}, -{64,-48,19}, -{64,-48,20}, -{64,-48,21}, -{64,-48,22}, -{64,-48,23}, -{64,-48,24}, -{64,-48,25}, -{64,-48,26}, -{64,-48,27}, -{64,-48,28}, -{64,-48,29}, -{64,-48,30}, -{64,-48,31}, -{64,-48,32}, -{64,-48,33}, -{64,-48,34}, -{64,-48,35}, -{64,-48,36}, -{64,-48,37}, -{64,-48,38}, -{64,-48,39}, -{64,-48,40}, -{64,-48,41}, -{64,-48,42}, -{64,-48,43}, -{64,-48,44}, -{64,-48,45}, -{64,-48,46}, -{64,-48,47}, -{64,-48,48}, -{64,-48,49}, -{64,-48,50}, -{64,-48,51}, -{64,-48,52}, -{64,-48,53}, -{64,-48,54}, -{64,-48,55}, -{64,-48,56}, -{64,-48,57}, -{64,-48,58}, -{64,-48,59}, -{64,-48,60}, -{64,-48,61}, -{64,-48,62}, -{64,-48,63}, -{64,-48,64}, -{64,-48,65}, -{64,-47,9}, -{64,-47,10}, -{64,-47,11}, -{64,-47,12}, -{64,-47,13}, -{64,-47,14}, -{64,-47,15}, -{64,-47,16}, -{64,-47,17}, -{64,-47,18}, -{64,-47,19}, -{64,-47,20}, -{64,-47,21}, -{64,-47,22}, -{64,-47,23}, -{64,-47,24}, -{64,-47,25}, -{64,-47,26}, -{64,-47,27}, -{64,-47,28}, -{64,-47,29}, -{64,-47,30}, -{64,-47,31}, -{64,-47,32}, -{64,-47,33}, -{64,-47,34}, -{64,-47,35}, -{64,-47,36}, -{64,-47,37}, -{64,-47,38}, -{64,-47,39}, -{64,-47,40}, -{64,-47,41}, -{64,-47,42}, -{64,-47,43}, -{64,-47,44}, -{64,-47,45}, -{64,-47,46}, -{64,-47,47}, -{64,-47,48}, -{64,-47,49}, -{64,-47,50}, -{64,-47,51}, -{64,-47,52}, -{64,-47,53}, -{64,-47,54}, -{64,-47,55}, -{64,-47,56}, -{64,-47,57}, -{64,-47,58}, -{64,-47,59}, -{64,-47,60}, -{64,-47,61}, -{64,-47,62}, -{64,-47,63}, -{64,-47,64}, -{64,-47,65}, -{64,-46,7}, -{64,-46,8}, -{64,-46,9}, -{64,-46,10}, -{64,-46,11}, -{64,-46,12}, -{64,-46,13}, -{64,-46,14}, -{64,-46,15}, -{64,-46,16}, -{64,-46,17}, -{64,-46,18}, -{64,-46,19}, -{64,-46,20}, -{64,-46,21}, -{64,-46,22}, -{64,-46,23}, -{64,-46,24}, -{64,-46,25}, -{64,-46,26}, -{64,-46,27}, -{64,-46,28}, -{64,-46,29}, -{64,-46,30}, -{64,-46,31}, -{64,-46,32}, -{64,-46,33}, -{64,-46,34}, -{64,-46,35}, -{64,-46,36}, -{64,-46,37}, -{64,-46,38}, -{64,-46,39}, -{64,-46,40}, -{64,-46,41}, -{64,-46,42}, -{64,-46,43}, -{64,-46,44}, -{64,-46,45}, -{64,-46,46}, -{64,-46,47}, -{64,-46,48}, -{64,-46,49}, -{64,-46,50}, -{64,-46,51}, -{64,-46,52}, -{64,-46,53}, -{64,-46,54}, -{64,-46,55}, -{64,-46,56}, -{64,-46,57}, -{64,-46,58}, -{64,-46,59}, -{64,-46,60}, -{64,-46,61}, -{64,-46,62}, -{64,-46,63}, -{64,-46,64}, -{64,-46,65}, -{64,-45,5}, -{64,-45,6}, -{64,-45,7}, -{64,-45,8}, -{64,-45,9}, -{64,-45,10}, -{64,-45,11}, -{64,-45,12}, -{64,-45,13}, -{64,-45,14}, -{64,-45,15}, -{64,-45,16}, -{64,-45,17}, -{64,-45,18}, -{64,-45,19}, -{64,-45,20}, -{64,-45,21}, -{64,-45,22}, -{64,-45,23}, -{64,-45,24}, -{64,-45,25}, -{64,-45,26}, -{64,-45,27}, -{64,-45,28}, -{64,-45,29}, -{64,-45,30}, -{64,-45,31}, -{64,-45,32}, -{64,-45,33}, -{64,-45,34}, -{64,-45,35}, -{64,-45,36}, -{64,-45,37}, -{64,-45,38}, -{64,-45,39}, -{64,-45,40}, -{64,-45,41}, -{64,-45,42}, -{64,-45,43}, -{64,-45,44}, -{64,-45,45}, -{64,-45,46}, -{64,-45,47}, -{64,-45,48}, -{64,-45,49}, -{64,-45,50}, -{64,-45,51}, -{64,-45,52}, -{64,-45,53}, -{64,-45,54}, -{64,-45,55}, -{64,-45,56}, -{64,-45,57}, -{64,-45,58}, -{64,-45,59}, -{64,-45,60}, -{64,-45,61}, -{64,-45,62}, -{64,-45,63}, -{64,-45,64}, -{64,-45,65}, -{64,-44,3}, -{64,-44,4}, -{64,-44,5}, -{64,-44,6}, -{64,-44,7}, -{64,-44,8}, -{64,-44,9}, -{64,-44,10}, -{64,-44,11}, -{64,-44,12}, -{64,-44,13}, -{64,-44,14}, -{64,-44,15}, -{64,-44,16}, -{64,-44,17}, -{64,-44,18}, -{64,-44,19}, -{64,-44,20}, -{64,-44,21}, -{64,-44,22}, -{64,-44,23}, -{64,-44,24}, -{64,-44,25}, -{64,-44,26}, -{64,-44,27}, -{64,-44,28}, -{64,-44,29}, -{64,-44,30}, -{64,-44,31}, -{64,-44,32}, -{64,-44,33}, -{64,-44,34}, -{64,-44,35}, -{64,-44,36}, -{64,-44,37}, -{64,-44,38}, -{64,-44,39}, -{64,-44,40}, -{64,-44,41}, -{64,-44,42}, -{64,-44,43}, -{64,-44,44}, -{64,-44,45}, -{64,-44,46}, -{64,-44,47}, -{64,-44,48}, -{64,-44,49}, -{64,-44,50}, -{64,-44,51}, -{64,-44,52}, -{64,-44,53}, -{64,-44,54}, -{64,-44,55}, -{64,-44,56}, -{64,-44,57}, -{64,-44,58}, -{64,-44,59}, -{64,-44,60}, -{64,-44,61}, -{64,-44,62}, -{64,-44,63}, -{64,-44,64}, -{64,-44,65}, -{64,-43,1}, -{64,-43,2}, -{64,-43,3}, -{64,-43,4}, -{64,-43,5}, -{64,-43,6}, -{64,-43,7}, -{64,-43,8}, -{64,-43,9}, -{64,-43,10}, -{64,-43,11}, -{64,-43,12}, -{64,-43,13}, -{64,-43,14}, -{64,-43,15}, -{64,-43,16}, -{64,-43,17}, -{64,-43,18}, -{64,-43,19}, -{64,-43,20}, -{64,-43,21}, -{64,-43,22}, -{64,-43,23}, -{64,-43,24}, -{64,-43,25}, -{64,-43,26}, -{64,-43,27}, -{64,-43,28}, -{64,-43,29}, -{64,-43,30}, -{64,-43,31}, -{64,-43,32}, -{64,-43,33}, -{64,-43,34}, -{64,-43,35}, -{64,-43,36}, -{64,-43,37}, -{64,-43,38}, -{64,-43,39}, -{64,-43,40}, -{64,-43,41}, -{64,-43,42}, -{64,-43,43}, -{64,-43,44}, -{64,-43,45}, -{64,-43,46}, -{64,-43,47}, -{64,-43,48}, -{64,-43,49}, -{64,-43,50}, -{64,-43,51}, -{64,-43,52}, -{64,-43,53}, -{64,-43,54}, -{64,-43,55}, -{64,-43,56}, -{64,-43,57}, -{64,-43,58}, -{64,-43,59}, -{64,-43,60}, -{64,-43,61}, -{64,-43,62}, -{64,-43,63}, -{64,-43,64}, -{64,-43,65}, -{64,-42,0}, -{64,-42,1}, -{64,-42,2}, -{64,-42,3}, -{64,-42,4}, -{64,-42,5}, -{64,-42,6}, -{64,-42,7}, -{64,-42,8}, -{64,-42,9}, -{64,-42,10}, -{64,-42,11}, -{64,-42,12}, -{64,-42,13}, -{64,-42,14}, -{64,-42,15}, -{64,-42,16}, -{64,-42,17}, -{64,-42,18}, -{64,-42,19}, -{64,-42,20}, -{64,-42,21}, -{64,-42,22}, -{64,-42,23}, -{64,-42,24}, -{64,-42,25}, -{64,-42,26}, -{64,-42,27}, -{64,-42,28}, -{64,-42,29}, -{64,-42,30}, -{64,-42,31}, -{64,-42,32}, -{64,-42,33}, -{64,-42,34}, -{64,-42,35}, -{64,-42,36}, -{64,-42,37}, -{64,-42,38}, -{64,-42,39}, -{64,-42,40}, -{64,-42,41}, -{64,-42,42}, -{64,-42,43}, -{64,-42,44}, -{64,-42,45}, -{64,-42,46}, -{64,-42,47}, -{64,-42,48}, -{64,-42,49}, -{64,-42,50}, -{64,-42,51}, -{64,-42,52}, -{64,-42,53}, -{64,-42,54}, -{64,-42,55}, -{64,-42,56}, -{64,-42,57}, -{64,-42,58}, -{64,-42,59}, -{64,-42,60}, -{64,-42,61}, -{64,-42,62}, -{64,-42,63}, -{64,-42,64}, -{64,-42,65}, -{64,-41,-2}, -{64,-41,-1}, -{64,-41,0}, -{64,-41,1}, -{64,-41,2}, -{64,-41,3}, -{64,-41,4}, -{64,-41,5}, -{64,-41,6}, -{64,-41,7}, -{64,-41,8}, -{64,-41,9}, -{64,-41,10}, -{64,-41,11}, -{64,-41,12}, -{64,-41,13}, -{64,-41,14}, -{64,-41,15}, -{64,-41,16}, -{64,-41,17}, -{64,-41,18}, -{64,-41,19}, -{64,-41,20}, -{64,-41,21}, -{64,-41,22}, -{64,-41,23}, -{64,-41,24}, -{64,-41,25}, -{64,-41,26}, -{64,-41,27}, -{64,-41,28}, -{64,-41,29}, -{64,-41,30}, -{64,-41,31}, -{64,-41,32}, -{64,-41,33}, -{64,-41,34}, -{64,-41,35}, -{64,-41,36}, -{64,-41,37}, -{64,-41,38}, -{64,-41,39}, -{64,-41,40}, -{64,-41,41}, -{64,-41,42}, -{64,-41,43}, -{64,-41,44}, -{64,-41,45}, -{64,-41,46}, -{64,-41,47}, -{64,-41,48}, -{64,-41,49}, -{64,-41,50}, -{64,-41,51}, -{64,-41,52}, -{64,-41,53}, -{64,-41,54}, -{64,-41,55}, -{64,-41,56}, -{64,-41,57}, -{64,-41,58}, -{64,-41,59}, -{64,-41,60}, -{64,-41,61}, -{64,-41,62}, -{64,-41,63}, -{64,-41,64}, -{64,-41,65}, -{64,-40,-4}, -{64,-40,-3}, -{64,-40,-2}, -{64,-40,-1}, -{64,-40,0}, -{64,-40,1}, -{64,-40,2}, -{64,-40,3}, -{64,-40,4}, -{64,-40,5}, -{64,-40,6}, -{64,-40,7}, -{64,-40,8}, -{64,-40,9}, -{64,-40,10}, -{64,-40,11}, -{64,-40,12}, -{64,-40,13}, -{64,-40,14}, -{64,-40,15}, -{64,-40,16}, -{64,-40,17}, -{64,-40,18}, -{64,-40,19}, -{64,-40,20}, -{64,-40,21}, -{64,-40,22}, -{64,-40,23}, -{64,-40,24}, -{64,-40,25}, -{64,-40,26}, -{64,-40,27}, -{64,-40,28}, -{64,-40,29}, -{64,-40,30}, -{64,-40,31}, -{64,-40,32}, -{64,-40,33}, -{64,-40,34}, -{64,-40,35}, -{64,-40,36}, -{64,-40,37}, -{64,-40,38}, -{64,-40,39}, -{64,-40,40}, -{64,-40,41}, -{64,-40,42}, -{64,-40,43}, -{64,-40,44}, -{64,-40,45}, -{64,-40,46}, -{64,-40,47}, -{64,-40,48}, -{64,-40,49}, -{64,-40,50}, -{64,-40,51}, -{64,-40,52}, -{64,-40,53}, -{64,-40,54}, -{64,-40,55}, -{64,-40,56}, -{64,-40,57}, -{64,-40,58}, -{64,-40,59}, -{64,-40,60}, -{64,-40,61}, -{64,-40,62}, -{64,-40,63}, -{64,-40,64}, -{64,-40,65}, -{64,-39,-5}, -{64,-39,-4}, -{64,-39,-3}, -{64,-39,-2}, -{64,-39,-1}, -{64,-39,0}, -{64,-39,1}, -{64,-39,2}, -{64,-39,3}, -{64,-39,4}, -{64,-39,5}, -{64,-39,6}, -{64,-39,7}, -{64,-39,8}, -{64,-39,9}, -{64,-39,10}, -{64,-39,11}, -{64,-39,12}, -{64,-39,13}, -{64,-39,14}, -{64,-39,15}, -{64,-39,16}, -{64,-39,17}, -{64,-39,18}, -{64,-39,19}, -{64,-39,20}, -{64,-39,21}, -{64,-39,22}, -{64,-39,23}, -{64,-39,24}, -{64,-39,25}, -{64,-39,26}, -{64,-39,27}, -{64,-39,28}, -{64,-39,29}, -{64,-39,30}, -{64,-39,31}, -{64,-39,32}, -{64,-39,33}, -{64,-39,34}, -{64,-39,35}, -{64,-39,36}, -{64,-39,37}, -{64,-39,38}, -{64,-39,39}, -{64,-39,40}, -{64,-39,41}, -{64,-39,42}, -{64,-39,43}, -{64,-39,44}, -{64,-39,45}, -{64,-39,46}, -{64,-39,47}, -{64,-39,48}, -{64,-39,49}, -{64,-39,50}, -{64,-39,51}, -{64,-39,52}, -{64,-39,53}, -{64,-39,54}, -{64,-39,55}, -{64,-39,56}, -{64,-39,57}, -{64,-39,58}, -{64,-39,59}, -{64,-39,60}, -{64,-39,61}, -{64,-39,62}, -{64,-39,63}, -{64,-39,64}, -{64,-39,65}, -{64,-38,-7}, -{64,-38,-6}, -{64,-38,-5}, -{64,-38,-4}, -{64,-38,-3}, -{64,-38,-2}, -{64,-38,-1}, -{64,-38,0}, -{64,-38,1}, -{64,-38,2}, -{64,-38,3}, -{64,-38,4}, -{64,-38,5}, -{64,-38,6}, -{64,-38,7}, -{64,-38,8}, -{64,-38,9}, -{64,-38,10}, -{64,-38,11}, -{64,-38,12}, -{64,-38,13}, -{64,-38,14}, -{64,-38,15}, -{64,-38,16}, -{64,-38,17}, -{64,-38,18}, -{64,-38,19}, -{64,-38,20}, -{64,-38,21}, -{64,-38,22}, -{64,-38,23}, -{64,-38,24}, -{64,-38,25}, -{64,-38,26}, -{64,-38,27}, -{64,-38,28}, -{64,-38,29}, -{64,-38,30}, -{64,-38,31}, -{64,-38,32}, -{64,-38,33}, -{64,-38,34}, -{64,-38,35}, -{64,-38,36}, -{64,-38,37}, -{64,-38,38}, -{64,-38,39}, -{64,-38,40}, -{64,-38,41}, -{64,-38,42}, -{64,-38,43}, -{64,-38,44}, -{64,-38,45}, -{64,-38,46}, -{64,-38,47}, -{64,-38,48}, -{64,-38,49}, -{64,-38,50}, -{64,-38,51}, -{64,-38,52}, -{64,-38,53}, -{64,-38,54}, -{64,-38,55}, -{64,-38,56}, -{64,-38,57}, -{64,-38,58}, -{64,-38,59}, -{64,-38,60}, -{64,-38,61}, -{64,-38,62}, -{64,-38,63}, -{64,-38,64}, -{64,-38,65}, -{64,-37,-9}, -{64,-37,-8}, -{64,-37,-7}, -{64,-37,-6}, -{64,-37,-5}, -{64,-37,-4}, -{64,-37,-3}, -{64,-37,-2}, -{64,-37,-1}, -{64,-37,0}, -{64,-37,1}, -{64,-37,2}, -{64,-37,3}, -{64,-37,4}, -{64,-37,5}, -{64,-37,6}, -{64,-37,7}, -{64,-37,8}, -{64,-37,9}, -{64,-37,10}, -{64,-37,11}, -{64,-37,12}, -{64,-37,13}, -{64,-37,14}, -{64,-37,15}, -{64,-37,16}, -{64,-37,17}, -{64,-37,18}, -{64,-37,19}, -{64,-37,20}, -{64,-37,21}, -{64,-37,22}, -{64,-37,23}, -{64,-37,24}, -{64,-37,25}, -{64,-37,26}, -{64,-37,27}, -{64,-37,28}, -{64,-37,29}, -{64,-37,30}, -{64,-37,31}, -{64,-37,32}, -{64,-37,33}, -{64,-37,34}, -{64,-37,35}, -{64,-37,36}, -{64,-37,37}, -{64,-37,38}, -{64,-37,39}, -{64,-37,40}, -{64,-37,41}, -{64,-37,42}, -{64,-37,43}, -{64,-37,44}, -{64,-37,45}, -{64,-37,46}, -{64,-37,47}, -{64,-37,48}, -{64,-37,49}, -{64,-37,50}, -{64,-37,51}, -{64,-37,52}, -{64,-37,53}, -{64,-37,54}, -{64,-37,55}, -{64,-37,56}, -{64,-37,57}, -{64,-37,58}, -{64,-37,59}, -{64,-37,60}, -{64,-37,61}, -{64,-37,62}, -{64,-37,63}, -{64,-37,64}, -{64,-37,65}, -{64,-36,-10}, -{64,-36,-9}, -{64,-36,-8}, -{64,-36,-7}, -{64,-36,-6}, -{64,-36,-5}, -{64,-36,-4}, -{64,-36,-3}, -{64,-36,-2}, -{64,-36,-1}, -{64,-36,0}, -{64,-36,1}, -{64,-36,2}, -{64,-36,3}, -{64,-36,4}, -{64,-36,5}, -{64,-36,6}, -{64,-36,7}, -{64,-36,8}, -{64,-36,9}, -{64,-36,10}, -{64,-36,11}, -{64,-36,12}, -{64,-36,13}, -{64,-36,14}, -{64,-36,15}, -{64,-36,16}, -{64,-36,17}, -{64,-36,18}, -{64,-36,19}, -{64,-36,20}, -{64,-36,21}, -{64,-36,22}, -{64,-36,23}, -{64,-36,24}, -{64,-36,25}, -{64,-36,26}, -{64,-36,27}, -{64,-36,28}, -{64,-36,29}, -{64,-36,30}, -{64,-36,31}, -{64,-36,32}, -{64,-36,33}, -{64,-36,34}, -{64,-36,35}, -{64,-36,36}, -{64,-36,37}, -{64,-36,38}, -{64,-36,39}, -{64,-36,40}, -{64,-36,41}, -{64,-36,42}, -{64,-36,43}, -{64,-36,44}, -{64,-36,45}, -{64,-36,46}, -{64,-36,47}, -{64,-36,48}, -{64,-36,49}, -{64,-36,50}, -{64,-36,51}, -{64,-36,52}, -{64,-36,53}, -{64,-36,54}, -{64,-36,55}, -{64,-36,56}, -{64,-36,57}, -{64,-36,58}, -{64,-36,59}, -{64,-36,60}, -{64,-36,61}, -{64,-36,62}, -{64,-36,63}, -{64,-36,64}, -{64,-36,65}, -{64,-35,-12}, -{64,-35,-11}, -{64,-35,-10}, -{64,-35,-9}, -{64,-35,-8}, -{64,-35,-7}, -{64,-35,-6}, -{64,-35,-5}, -{64,-35,-4}, -{64,-35,-3}, -{64,-35,-2}, -{64,-35,-1}, -{64,-35,0}, -{64,-35,1}, -{64,-35,2}, -{64,-35,3}, -{64,-35,4}, -{64,-35,5}, -{64,-35,6}, -{64,-35,7}, -{64,-35,8}, -{64,-35,9}, -{64,-35,10}, -{64,-35,11}, -{64,-35,12}, -{64,-35,13}, -{64,-35,14}, -{64,-35,15}, -{64,-35,16}, -{64,-35,17}, -{64,-35,18}, -{64,-35,19}, -{64,-35,20}, -{64,-35,21}, -{64,-35,22}, -{64,-35,23}, -{64,-35,24}, -{64,-35,25}, -{64,-35,26}, -{64,-35,27}, -{64,-35,28}, -{64,-35,29}, -{64,-35,30}, -{64,-35,31}, -{64,-35,32}, -{64,-35,33}, -{64,-35,34}, -{64,-35,35}, -{64,-35,36}, -{64,-35,37}, -{64,-35,38}, -{64,-35,39}, -{64,-35,40}, -{64,-35,41}, -{64,-35,42}, -{64,-35,43}, -{64,-35,44}, -{64,-35,45}, -{64,-35,46}, -{64,-35,47}, -{64,-35,48}, -{64,-35,49}, -{64,-35,50}, -{64,-35,51}, -{64,-35,52}, -{64,-35,53}, -{64,-35,54}, -{64,-35,55}, -{64,-35,56}, -{64,-35,57}, -{64,-35,58}, -{64,-35,59}, -{64,-35,60}, -{64,-35,61}, -{64,-35,62}, -{64,-35,63}, -{64,-35,64}, -{64,-35,65}, -{64,-34,-13}, -{64,-34,-12}, -{64,-34,-11}, -{64,-34,-10}, -{64,-34,-9}, -{64,-34,-8}, -{64,-34,-7}, -{64,-34,-6}, -{64,-34,-5}, -{64,-34,-4}, -{64,-34,-3}, -{64,-34,-2}, -{64,-34,-1}, -{64,-34,0}, -{64,-34,1}, -{64,-34,2}, -{64,-34,3}, -{64,-34,4}, -{64,-34,5}, -{64,-34,6}, -{64,-34,7}, -{64,-34,8}, -{64,-34,9}, -{64,-34,10}, -{64,-34,11}, -{64,-34,12}, -{64,-34,13}, -{64,-34,14}, -{64,-34,15}, -{64,-34,16}, -{64,-34,17}, -{64,-34,18}, -{64,-34,19}, -{64,-34,20}, -{64,-34,21}, -{64,-34,22}, -{64,-34,23}, -{64,-34,24}, -{64,-34,25}, -{64,-34,26}, -{64,-34,27}, -{64,-34,28}, -{64,-34,29}, -{64,-34,30}, -{64,-34,31}, -{64,-34,32}, -{64,-34,33}, -{64,-34,34}, -{64,-34,35}, -{64,-34,36}, -{64,-34,37}, -{64,-34,38}, -{64,-34,39}, -{64,-34,40}, -{64,-34,41}, -{64,-34,42}, -{64,-34,43}, -{64,-34,44}, -{64,-34,45}, -{64,-34,46}, -{64,-34,47}, -{64,-34,48}, -{64,-34,49}, -{64,-34,50}, -{64,-34,51}, -{64,-34,52}, -{64,-34,53}, -{64,-34,54}, -{64,-34,55}, -{64,-34,56}, -{64,-34,57}, -{64,-34,58}, -{64,-34,59}, -{64,-34,60}, -{64,-34,61}, -{64,-34,62}, -{64,-34,63}, -{64,-34,64}, -{64,-34,65}, -{64,-33,-15}, -{64,-33,-14}, -{64,-33,-13}, -{64,-33,-12}, -{64,-33,-11}, -{64,-33,-10}, -{64,-33,-9}, -{64,-33,-8}, -{64,-33,-7}, -{64,-33,-6}, -{64,-33,-5}, -{64,-33,-4}, -{64,-33,-3}, -{64,-33,-2}, -{64,-33,-1}, -{64,-33,0}, -{64,-33,1}, -{64,-33,2}, -{64,-33,3}, -{64,-33,4}, -{64,-33,5}, -{64,-33,6}, -{64,-33,7}, -{64,-33,8}, -{64,-33,9}, -{64,-33,10}, -{64,-33,11}, -{64,-33,12}, -{64,-33,13}, -{64,-33,14}, -{64,-33,15}, -{64,-33,16}, -{64,-33,17}, -{64,-33,18}, -{64,-33,19}, -{64,-33,20}, -{64,-33,21}, -{64,-33,22}, -{64,-33,23}, -{64,-33,24}, -{64,-33,25}, -{64,-33,26}, -{64,-33,27}, -{64,-33,28}, -{64,-33,29}, -{64,-33,30}, -{64,-33,31}, -{64,-33,32}, -{64,-33,33}, -{64,-33,34}, -{64,-33,35}, -{64,-33,36}, -{64,-33,37}, -{64,-33,38}, -{64,-33,39}, -{64,-33,40}, -{64,-33,41}, -{64,-33,42}, -{64,-33,43}, -{64,-33,44}, -{64,-33,45}, -{64,-33,46}, -{64,-33,47}, -{64,-33,48}, -{64,-33,49}, -{64,-33,50}, -{64,-33,51}, -{64,-33,52}, -{64,-33,53}, -{64,-33,54}, -{64,-33,55}, -{64,-33,56}, -{64,-33,57}, -{64,-33,58}, -{64,-33,59}, -{64,-33,60}, -{64,-33,61}, -{64,-33,62}, -{64,-33,63}, -{64,-33,64}, -{64,-33,65}, -{64,-32,-16}, -{64,-32,-15}, -{64,-32,-14}, -{64,-32,-13}, -{64,-32,-12}, -{64,-32,-11}, -{64,-32,-10}, -{64,-32,-9}, -{64,-32,-8}, -{64,-32,-7}, -{64,-32,-6}, -{64,-32,-5}, -{64,-32,-4}, -{64,-32,-3}, -{64,-32,-2}, -{64,-32,-1}, -{64,-32,0}, -{64,-32,1}, -{64,-32,2}, -{64,-32,3}, -{64,-32,4}, -{64,-32,5}, -{64,-32,6}, -{64,-32,7}, -{64,-32,8}, -{64,-32,9}, -{64,-32,10}, -{64,-32,11}, -{64,-32,12}, -{64,-32,13}, -{64,-32,14}, -{64,-32,15}, -{64,-32,16}, -{64,-32,17}, -{64,-32,18}, -{64,-32,19}, -{64,-32,20}, -{64,-32,21}, -{64,-32,22}, -{64,-32,23}, -{64,-32,24}, -{64,-32,25}, -{64,-32,26}, -{64,-32,27}, -{64,-32,28}, -{64,-32,29}, -{64,-32,30}, -{64,-32,31}, -{64,-32,32}, -{64,-32,33}, -{64,-32,34}, -{64,-32,35}, -{64,-32,36}, -{64,-32,37}, -{64,-32,38}, -{64,-32,39}, -{64,-32,40}, -{64,-32,41}, -{64,-32,42}, -{64,-32,43}, -{64,-32,44}, -{64,-32,45}, -{64,-32,46}, -{64,-32,47}, -{64,-32,48}, -{64,-32,49}, -{64,-32,50}, -{64,-32,51}, -{64,-32,52}, -{64,-32,53}, -{64,-32,54}, -{64,-32,55}, -{64,-32,56}, -{64,-32,57}, -{64,-32,58}, -{64,-32,59}, -{64,-32,60}, -{64,-32,61}, -{64,-32,62}, -{64,-32,63}, -{64,-32,64}, -{64,-32,65}, -{64,-31,-18}, -{64,-31,-17}, -{64,-31,-16}, -{64,-31,-15}, -{64,-31,-14}, -{64,-31,-13}, -{64,-31,-12}, -{64,-31,-11}, -{64,-31,-10}, -{64,-31,-9}, -{64,-31,-8}, -{64,-31,-7}, -{64,-31,-6}, -{64,-31,-5}, -{64,-31,-4}, -{64,-31,-3}, -{64,-31,-2}, -{64,-31,-1}, -{64,-31,0}, -{64,-31,1}, -{64,-31,2}, -{64,-31,3}, -{64,-31,4}, -{64,-31,5}, -{64,-31,6}, -{64,-31,7}, -{64,-31,8}, -{64,-31,9}, -{64,-31,10}, -{64,-31,11}, -{64,-31,12}, -{64,-31,13}, -{64,-31,14}, -{64,-31,15}, -{64,-31,16}, -{64,-31,17}, -{64,-31,18}, -{64,-31,19}, -{64,-31,20}, -{64,-31,21}, -{64,-31,22}, -{64,-31,23}, -{64,-31,24}, -{64,-31,25}, -{64,-31,26}, -{64,-31,27}, -{64,-31,28}, -{64,-31,29}, -{64,-31,30}, -{64,-31,31}, -{64,-31,32}, -{64,-31,33}, -{64,-31,34}, -{64,-31,35}, -{64,-31,36}, -{64,-31,37}, -{64,-31,38}, -{64,-31,39}, -{64,-31,40}, -{64,-31,41}, -{64,-31,42}, -{64,-31,43}, -{64,-31,44}, -{64,-31,45}, -{64,-31,46}, -{64,-31,47}, -{64,-31,48}, -{64,-31,49}, -{64,-31,50}, -{64,-31,51}, -{64,-31,52}, -{64,-31,53}, -{64,-31,54}, -{64,-31,55}, -{64,-31,56}, -{64,-31,57}, -{64,-31,58}, -{64,-31,59}, -{64,-31,60}, -{64,-31,61}, -{64,-31,62}, -{64,-31,63}, -{64,-31,64}, -{64,-31,65}, -{64,-31,66}, -{64,-30,-19}, -{64,-30,-18}, -{64,-30,-17}, -{64,-30,-16}, -{64,-30,-15}, -{64,-30,-14}, -{64,-30,-13}, -{64,-30,-12}, -{64,-30,-11}, -{64,-30,-10}, -{64,-30,-9}, -{64,-30,-8}, -{64,-30,-7}, -{64,-30,-6}, -{64,-30,-5}, -{64,-30,-4}, -{64,-30,-3}, -{64,-30,-2}, -{64,-30,-1}, -{64,-30,0}, -{64,-30,1}, -{64,-30,2}, -{64,-30,3}, -{64,-30,4}, -{64,-30,5}, -{64,-30,6}, -{64,-30,7}, -{64,-30,8}, -{64,-30,9}, -{64,-30,10}, -{64,-30,11}, -{64,-30,12}, -{64,-30,13}, -{64,-30,14}, -{64,-30,15}, -{64,-30,16}, -{64,-30,17}, -{64,-30,18}, -{64,-30,19}, -{64,-30,20}, -{64,-30,21}, -{64,-30,22}, -{64,-30,23}, -{64,-30,24}, -{64,-30,25}, -{64,-30,26}, -{64,-30,27}, -{64,-30,28}, -{64,-30,29}, -{64,-30,30}, -{64,-30,31}, -{64,-30,32}, -{64,-30,33}, -{64,-30,34}, -{64,-30,35}, -{64,-30,36}, -{64,-30,37}, -{64,-30,38}, -{64,-30,39}, -{64,-30,40}, -{64,-30,41}, -{64,-30,42}, -{64,-30,43}, -{64,-30,44}, -{64,-30,45}, -{64,-30,46}, -{64,-30,47}, -{64,-30,48}, -{64,-30,49}, -{64,-30,50}, -{64,-30,51}, -{64,-30,52}, -{64,-30,53}, -{64,-30,54}, -{64,-30,55}, -{64,-30,56}, -{64,-30,57}, -{64,-30,58}, -{64,-30,59}, -{64,-30,60}, -{64,-30,61}, -{64,-30,62}, -{64,-30,63}, -{64,-30,64}, -{64,-30,65}, -{64,-30,66}, -{64,-29,-21}, -{64,-29,-20}, -{64,-29,-19}, -{64,-29,-18}, -{64,-29,-17}, -{64,-29,-16}, -{64,-29,-15}, -{64,-29,-14}, -{64,-29,-13}, -{64,-29,-12}, -{64,-29,-11}, -{64,-29,-10}, -{64,-29,-9}, -{64,-29,-8}, -{64,-29,-7}, -{64,-29,-6}, -{64,-29,-5}, -{64,-29,-4}, -{64,-29,-3}, -{64,-29,-2}, -{64,-29,-1}, -{64,-29,0}, -{64,-29,1}, -{64,-29,2}, -{64,-29,3}, -{64,-29,4}, -{64,-29,5}, -{64,-29,6}, -{64,-29,7}, -{64,-29,8}, -{64,-29,9}, -{64,-29,10}, -{64,-29,11}, -{64,-29,12}, -{64,-29,13}, -{64,-29,14}, -{64,-29,15}, -{64,-29,16}, -{64,-29,17}, -{64,-29,18}, -{64,-29,19}, -{64,-29,20}, -{64,-29,21}, -{64,-29,22}, -{64,-29,23}, -{64,-29,24}, -{64,-29,25}, -{64,-29,26}, -{64,-29,27}, -{64,-29,28}, -{64,-29,29}, -{64,-29,30}, -{64,-29,31}, -{64,-29,32}, -{64,-29,33}, -{64,-29,34}, -{64,-29,35}, -{64,-29,36}, -{64,-29,37}, -{64,-29,38}, -{64,-29,39}, -{64,-29,40}, -{64,-29,41}, -{64,-29,42}, -{64,-29,43}, -{64,-29,44}, -{64,-29,45}, -{64,-29,46}, -{64,-29,47}, -{64,-29,48}, -{64,-29,49}, -{64,-29,50}, -{64,-29,51}, -{64,-29,52}, -{64,-29,53}, -{64,-29,54}, -{64,-29,55}, -{64,-29,56}, -{64,-29,57}, -{64,-29,58}, -{64,-29,59}, -{64,-29,60}, -{64,-29,61}, -{64,-29,62}, -{64,-29,63}, -{64,-29,64}, -{64,-29,65}, -{64,-29,66}, -{64,-28,-22}, -{64,-28,-21}, -{64,-28,-20}, -{64,-28,-19}, -{64,-28,-18}, -{64,-28,-17}, -{64,-28,-16}, -{64,-28,-15}, -{64,-28,-14}, -{64,-28,-13}, -{64,-28,-12}, -{64,-28,-11}, -{64,-28,-10}, -{64,-28,-9}, -{64,-28,-8}, -{64,-28,-7}, -{64,-28,-6}, -{64,-28,-5}, -{64,-28,-4}, -{64,-28,-3}, -{64,-28,-2}, -{64,-28,-1}, -{64,-28,0}, -{64,-28,1}, -{64,-28,2}, -{64,-28,3}, -{64,-28,4}, -{64,-28,5}, -{64,-28,6}, -{64,-28,7}, -{64,-28,8}, -{64,-28,9}, -{64,-28,10}, -{64,-28,11}, -{64,-28,12}, -{64,-28,13}, -{64,-28,14}, -{64,-28,15}, -{64,-28,16}, -{64,-28,17}, -{64,-28,18}, -{64,-28,19}, -{64,-28,20}, -{64,-28,21}, -{64,-28,22}, -{64,-28,23}, -{64,-28,24}, -{64,-28,25}, -{64,-28,26}, -{64,-28,27}, -{64,-28,28}, -{64,-28,29}, -{64,-28,30}, -{64,-28,31}, -{64,-28,32}, -{64,-28,33}, -{64,-28,34}, -{64,-28,35}, -{64,-28,36}, -{64,-28,37}, -{64,-28,38}, -{64,-28,39}, -{64,-28,40}, -{64,-28,41}, -{64,-28,42}, -{64,-28,43}, -{64,-28,44}, -{64,-28,45}, -{64,-28,46}, -{64,-28,47}, -{64,-28,48}, -{64,-28,49}, -{64,-28,50}, -{64,-28,51}, -{64,-28,52}, -{64,-28,53}, -{64,-28,54}, -{64,-28,55}, -{64,-28,56}, -{64,-28,57}, -{64,-28,58}, -{64,-28,59}, -{64,-28,60}, -{64,-28,61}, -{64,-28,62}, -{64,-28,63}, -{64,-28,64}, -{64,-28,65}, -{64,-28,66}, -{64,-27,-24}, -{64,-27,-23}, -{64,-27,-22}, -{64,-27,-21}, -{64,-27,-20}, -{64,-27,-19}, -{64,-27,-18}, -{64,-27,-17}, -{64,-27,-16}, -{64,-27,-15}, -{64,-27,-14}, -{64,-27,-13}, -{64,-27,-12}, -{64,-27,-11}, -{64,-27,-10}, -{64,-27,-9}, -{64,-27,-8}, -{64,-27,-7}, -{64,-27,-6}, -{64,-27,-5}, -{64,-27,-4}, -{64,-27,-3}, -{64,-27,-2}, -{64,-27,-1}, -{64,-27,0}, -{64,-27,1}, -{64,-27,2}, -{64,-27,3}, -{64,-27,4}, -{64,-27,5}, -{64,-27,6}, -{64,-27,7}, -{64,-27,8}, -{64,-27,9}, -{64,-27,10}, -{64,-27,11}, -{64,-27,12}, -{64,-27,13}, -{64,-27,14}, -{64,-27,15}, -{64,-27,16}, -{64,-27,17}, -{64,-27,18}, -{64,-27,19}, -{64,-27,20}, -{64,-27,21}, -{64,-27,22}, -{64,-27,23}, -{64,-27,24}, -{64,-27,25}, -{64,-27,26}, -{64,-27,27}, -{64,-27,28}, -{64,-27,29}, -{64,-27,30}, -{64,-27,31}, -{64,-27,32}, -{64,-27,33}, -{64,-27,34}, -{64,-27,35}, -{64,-27,36}, -{64,-27,37}, -{64,-27,38}, -{64,-27,39}, -{64,-27,40}, -{64,-27,41}, -{64,-27,42}, -{64,-27,43}, -{64,-27,44}, -{64,-27,45}, -{64,-27,46}, -{64,-27,47}, -{64,-27,48}, -{64,-27,49}, -{64,-27,50}, -{64,-27,51}, -{64,-27,52}, -{64,-27,53}, -{64,-27,54}, -{64,-27,55}, -{64,-27,56}, -{64,-27,57}, -{64,-27,58}, -{64,-27,59}, -{64,-27,60}, -{64,-27,61}, -{64,-27,62}, -{64,-27,63}, -{64,-27,64}, -{64,-27,65}, -{64,-27,66}, -{64,-26,-25}, -{64,-26,-24}, -{64,-26,-23}, -{64,-26,-22}, -{64,-26,-21}, -{64,-26,-20}, -{64,-26,-19}, -{64,-26,-18}, -{64,-26,-17}, -{64,-26,-16}, -{64,-26,-15}, -{64,-26,-14}, -{64,-26,-13}, -{64,-26,-12}, -{64,-26,-11}, -{64,-26,-10}, -{64,-26,-9}, -{64,-26,-8}, -{64,-26,-7}, -{64,-26,-6}, -{64,-26,-5}, -{64,-26,-4}, -{64,-26,-3}, -{64,-26,-2}, -{64,-26,-1}, -{64,-26,0}, -{64,-26,1}, -{64,-26,2}, -{64,-26,3}, -{64,-26,4}, -{64,-26,5}, -{64,-26,6}, -{64,-26,7}, -{64,-26,8}, -{64,-26,9}, -{64,-26,10}, -{64,-26,11}, -{64,-26,12}, -{64,-26,13}, -{64,-26,14}, -{64,-26,15}, -{64,-26,16}, -{64,-26,17}, -{64,-26,18}, -{64,-26,19}, -{64,-26,20}, -{64,-26,21}, -{64,-26,22}, -{64,-26,23}, -{64,-26,24}, -{64,-26,25}, -{64,-26,26}, -{64,-26,27}, -{64,-26,28}, -{64,-26,29}, -{64,-26,30}, -{64,-26,31}, -{64,-26,32}, -{64,-26,33}, -{64,-26,34}, -{64,-26,35}, -{64,-26,36}, -{64,-26,37}, -{64,-26,38}, -{64,-26,39}, -{64,-26,40}, -{64,-26,41}, -{64,-26,42}, -{64,-26,43}, -{64,-26,44}, -{64,-26,45}, -{64,-26,46}, -{64,-26,47}, -{64,-26,48}, -{64,-26,49}, -{64,-26,50}, -{64,-26,51}, -{64,-26,52}, -{64,-26,53}, -{64,-26,54}, -{64,-26,55}, -{64,-26,56}, -{64,-26,57}, -{64,-26,58}, -{64,-26,59}, -{64,-26,60}, -{64,-26,61}, -{64,-26,62}, -{64,-26,63}, -{64,-26,64}, -{64,-26,65}, -{64,-26,66}, -{64,-25,-26}, -{64,-25,-25}, -{64,-25,-24}, -{64,-25,-23}, -{64,-25,-22}, -{64,-25,-21}, -{64,-25,-20}, -{64,-25,-19}, -{64,-25,-18}, -{64,-25,-17}, -{64,-25,-16}, -{64,-25,-15}, -{64,-25,-14}, -{64,-25,-13}, -{64,-25,-12}, -{64,-25,-11}, -{64,-25,-10}, -{64,-25,-9}, -{64,-25,-8}, -{64,-25,-7}, -{64,-25,-6}, -{64,-25,-5}, -{64,-25,-4}, -{64,-25,-3}, -{64,-25,-2}, -{64,-25,-1}, -{64,-25,0}, -{64,-25,1}, -{64,-25,2}, -{64,-25,3}, -{64,-25,4}, -{64,-25,5}, -{64,-25,6}, -{64,-25,7}, -{64,-25,8}, -{64,-25,9}, -{64,-25,10}, -{64,-25,11}, -{64,-25,12}, -{64,-25,13}, -{64,-25,14}, -{64,-25,15}, -{64,-25,16}, -{64,-25,17}, -{64,-25,18}, -{64,-25,19}, -{64,-25,20}, -{64,-25,21}, -{64,-25,22}, -{64,-25,23}, -{64,-25,24}, -{64,-25,25}, -{64,-25,26}, -{64,-25,27}, -{64,-25,28}, -{64,-25,29}, -{64,-25,30}, -{64,-25,31}, -{64,-25,32}, -{64,-25,33}, -{64,-25,34}, -{64,-25,35}, -{64,-25,36}, -{64,-25,37}, -{64,-25,38}, -{64,-25,39}, -{64,-25,40}, -{64,-25,41}, -{64,-25,42}, -{64,-25,43}, -{64,-25,44}, -{64,-25,45}, -{64,-25,46}, -{64,-25,47}, -{64,-25,48}, -{64,-25,49}, -{64,-25,50}, -{64,-25,51}, -{64,-25,52}, -{64,-25,53}, -{64,-25,54}, -{64,-25,55}, -{64,-25,56}, -{64,-25,57}, -{64,-25,58}, -{64,-25,59}, -{64,-25,60}, -{64,-25,61}, -{64,-25,62}, -{64,-25,63}, -{64,-25,64}, -{64,-25,65}, -{64,-25,66}, -{64,-24,-28}, -{64,-24,-27}, -{64,-24,-26}, -{64,-24,-25}, -{64,-24,-24}, -{64,-24,-23}, -{64,-24,-22}, -{64,-24,-21}, -{64,-24,-20}, -{64,-24,-19}, -{64,-24,-18}, -{64,-24,-17}, -{64,-24,-16}, -{64,-24,-15}, -{64,-24,-14}, -{64,-24,-13}, -{64,-24,-12}, -{64,-24,-11}, -{64,-24,-10}, -{64,-24,-9}, -{64,-24,-8}, -{64,-24,-7}, -{64,-24,-6}, -{64,-24,-5}, -{64,-24,-4}, -{64,-24,-3}, -{64,-24,-2}, -{64,-24,-1}, -{64,-24,0}, -{64,-24,1}, -{64,-24,2}, -{64,-24,3}, -{64,-24,4}, -{64,-24,5}, -{64,-24,6}, -{64,-24,7}, -{64,-24,8}, -{64,-24,9}, -{64,-24,10}, -{64,-24,11}, -{64,-24,12}, -{64,-24,13}, -{64,-24,14}, -{64,-24,15}, -{64,-24,16}, -{64,-24,17}, -{64,-24,18}, -{64,-24,19}, -{64,-24,20}, -{64,-24,21}, -{64,-24,22}, -{64,-24,23}, -{64,-24,24}, -{64,-24,25}, -{64,-24,26}, -{64,-24,27}, -{64,-24,28}, -{64,-24,29}, -{64,-24,30}, -{64,-24,31}, -{64,-24,32}, -{64,-24,33}, -{64,-24,34}, -{64,-24,35}, -{64,-24,36}, -{64,-24,37}, -{64,-24,38}, -{64,-24,39}, -{64,-24,40}, -{64,-24,41}, -{64,-24,42}, -{64,-24,43}, -{64,-24,44}, -{64,-24,45}, -{64,-24,46}, -{64,-24,47}, -{64,-24,48}, -{64,-24,49}, -{64,-24,50}, -{64,-24,51}, -{64,-24,52}, -{64,-24,53}, -{64,-24,54}, -{64,-24,55}, -{64,-24,56}, -{64,-24,57}, -{64,-24,58}, -{64,-24,59}, -{64,-24,60}, -{64,-24,61}, -{64,-24,62}, -{64,-24,63}, -{64,-24,64}, -{64,-24,65}, -{64,-24,66}, -{64,-23,-29}, -{64,-23,-28}, -{64,-23,-27}, -{64,-23,-26}, -{64,-23,-25}, -{64,-23,-24}, -{64,-23,-23}, -{64,-23,-22}, -{64,-23,-21}, -{64,-23,-20}, -{64,-23,-19}, -{64,-23,-18}, -{64,-23,-17}, -{64,-23,-16}, -{64,-23,-15}, -{64,-23,-14}, -{64,-23,-13}, -{64,-23,-12}, -{64,-23,-11}, -{64,-23,-10}, -{64,-23,-9}, -{64,-23,-8}, -{64,-23,-7}, -{64,-23,-6}, -{64,-23,-5}, -{64,-23,-4}, -{64,-23,-3}, -{64,-23,-2}, -{64,-23,-1}, -{64,-23,0}, -{64,-23,1}, -{64,-23,2}, -{64,-23,3}, -{64,-23,4}, -{64,-23,5}, -{64,-23,6}, -{64,-23,7}, -{64,-23,8}, -{64,-23,9}, -{64,-23,10}, -{64,-23,11}, -{64,-23,12}, -{64,-23,13}, -{64,-23,14}, -{64,-23,15}, -{64,-23,16}, -{64,-23,17}, -{64,-23,18}, -{64,-23,19}, -{64,-23,20}, -{64,-23,21}, -{64,-23,22}, -{64,-23,23}, -{64,-23,24}, -{64,-23,25}, -{64,-23,26}, -{64,-23,27}, -{64,-23,28}, -{64,-23,29}, -{64,-23,30}, -{64,-23,31}, -{64,-23,32}, -{64,-23,33}, -{64,-23,34}, -{64,-23,35}, -{64,-23,36}, -{64,-23,37}, -{64,-23,38}, -{64,-23,39}, -{64,-23,40}, -{64,-23,41}, -{64,-23,42}, -{64,-23,43}, -{64,-23,44}, -{64,-23,45}, -{64,-23,46}, -{64,-23,47}, -{64,-23,48}, -{64,-23,49}, -{64,-23,50}, -{64,-23,51}, -{64,-23,52}, -{64,-23,53}, -{64,-23,54}, -{64,-23,55}, -{64,-23,56}, -{64,-23,57}, -{64,-23,58}, -{64,-23,59}, -{64,-23,60}, -{64,-23,61}, -{64,-23,62}, -{64,-23,63}, -{64,-23,64}, -{64,-23,65}, -{64,-23,66}, -{64,-22,-30}, -{64,-22,-29}, -{64,-22,-28}, -{64,-22,-27}, -{64,-22,-26}, -{64,-22,-25}, -{64,-22,-24}, -{64,-22,-23}, -{64,-22,-22}, -{64,-22,-21}, -{64,-22,-20}, -{64,-22,-19}, -{64,-22,-18}, -{64,-22,-17}, -{64,-22,-16}, -{64,-22,-15}, -{64,-22,-14}, -{64,-22,-13}, -{64,-22,-12}, -{64,-22,-11}, -{64,-22,-10}, -{64,-22,-9}, -{64,-22,-8}, -{64,-22,-7}, -{64,-22,-6}, -{64,-22,-5}, -{64,-22,-4}, -{64,-22,-3}, -{64,-22,-2}, -{64,-22,-1}, -{64,-22,0}, -{64,-22,1}, -{64,-22,2}, -{64,-22,3}, -{64,-22,4}, -{64,-22,5}, -{64,-22,6}, -{64,-22,7}, -{64,-22,8}, -{64,-22,9}, -{64,-22,10}, -{64,-22,11}, -{64,-22,12}, -{64,-22,13}, -{64,-22,14}, -{64,-22,15}, -{64,-22,16}, -{64,-22,17}, -{64,-22,18}, -{64,-22,19}, -{64,-22,20}, -{64,-22,21}, -{64,-22,22}, -{64,-22,23}, -{64,-22,24}, -{64,-22,25}, -{64,-22,26}, -{64,-22,27}, -{64,-22,28}, -{64,-22,29}, -{64,-22,30}, -{64,-22,31}, -{64,-22,32}, -{64,-22,33}, -{64,-22,34}, -{64,-22,35}, -{64,-22,36}, -{64,-22,37}, -{64,-22,38}, -{64,-22,39}, -{64,-22,40}, -{64,-22,41}, -{64,-22,42}, -{64,-22,43}, -{64,-22,44}, -{64,-22,45}, -{64,-22,46}, -{64,-22,47}, -{64,-22,48}, -{64,-22,49}, -{64,-22,50}, -{64,-22,51}, -{64,-22,52}, -{64,-22,53}, -{64,-22,54}, -{64,-22,55}, -{64,-22,56}, -{64,-22,57}, -{64,-22,58}, -{64,-22,59}, -{64,-22,60}, -{64,-22,61}, -{64,-22,62}, -{64,-22,63}, -{64,-22,64}, -{64,-22,65}, -{64,-22,66}, -{64,-21,-32}, -{64,-21,-31}, -{64,-21,-30}, -{64,-21,-29}, -{64,-21,-28}, -{64,-21,-27}, -{64,-21,-26}, -{64,-21,-25}, -{64,-21,-24}, -{64,-21,-23}, -{64,-21,-22}, -{64,-21,-21}, -{64,-21,-20}, -{64,-21,-19}, -{64,-21,-18}, -{64,-21,-17}, -{64,-21,-16}, -{64,-21,-15}, -{64,-21,-14}, -{64,-21,-13}, -{64,-21,-12}, -{64,-21,-11}, -{64,-21,-10}, -{64,-21,-9}, -{64,-21,-8}, -{64,-21,-7}, -{64,-21,-6}, -{64,-21,-5}, -{64,-21,-4}, -{64,-21,-3}, -{64,-21,-2}, -{64,-21,-1}, -{64,-21,0}, -{64,-21,1}, -{64,-21,2}, -{64,-21,3}, -{64,-21,4}, -{64,-21,5}, -{64,-21,6}, -{64,-21,7}, -{64,-21,8}, -{64,-21,9}, -{64,-21,10}, -{64,-21,11}, -{64,-21,12}, -{64,-21,13}, -{64,-21,14}, -{64,-21,15}, -{64,-21,16}, -{64,-21,17}, -{64,-21,18}, -{64,-21,19}, -{64,-21,20}, -{64,-21,21}, -{64,-21,22}, -{64,-21,23}, -{64,-21,24}, -{64,-21,25}, -{64,-21,26}, -{64,-21,27}, -{64,-21,28}, -{64,-21,29}, -{64,-21,30}, -{64,-21,31}, -{64,-21,32}, -{64,-21,33}, -{64,-21,34}, -{64,-21,35}, -{64,-21,36}, -{64,-21,37}, -{64,-21,38}, -{64,-21,39}, -{64,-21,40}, -{64,-21,41}, -{64,-21,42}, -{64,-21,43}, -{64,-21,44}, -{64,-21,45}, -{64,-21,46}, -{64,-21,47}, -{64,-21,48}, -{64,-21,49}, -{64,-21,50}, -{64,-21,51}, -{64,-21,52}, -{64,-21,53}, -{64,-21,54}, -{64,-21,55}, -{64,-21,56}, -{64,-21,57}, -{64,-21,58}, -{64,-21,59}, -{64,-21,60}, -{64,-21,61}, -{64,-21,62}, -{64,-21,63}, -{64,-21,64}, -{64,-21,65}, -{64,-21,66}, -{64,-20,-33}, -{64,-20,-32}, -{64,-20,-31}, -{64,-20,-30}, -{64,-20,-29}, -{64,-20,-28}, -{64,-20,-27}, -{64,-20,-26}, -{64,-20,-25}, -{64,-20,-24}, -{64,-20,-23}, -{64,-20,-22}, -{64,-20,-21}, -{64,-20,-20}, -{64,-20,-19}, -{64,-20,-18}, -{64,-20,-17}, -{64,-20,-16}, -{64,-20,-15}, -{64,-20,-14}, -{64,-20,-13}, -{64,-20,-12}, -{64,-20,-11}, -{64,-20,-10}, -{64,-20,-9}, -{64,-20,-8}, -{64,-20,-7}, -{64,-20,-6}, -{64,-20,-5}, -{64,-20,-4}, -{64,-20,-3}, -{64,-20,-2}, -{64,-20,-1}, -{64,-20,0}, -{64,-20,1}, -{64,-20,2}, -{64,-20,3}, -{64,-20,4}, -{64,-20,5}, -{64,-20,6}, -{64,-20,7}, -{64,-20,8}, -{64,-20,9}, -{64,-20,10}, -{64,-20,11}, -{64,-20,12}, -{64,-20,13}, -{64,-20,14}, -{64,-20,15}, -{64,-20,16}, -{64,-20,17}, -{64,-20,18}, -{64,-20,19}, -{64,-20,20}, -{64,-20,21}, -{64,-20,22}, -{64,-20,23}, -{64,-20,24}, -{64,-20,25}, -{64,-20,26}, -{64,-20,27}, -{64,-20,28}, -{64,-20,29}, -{64,-20,30}, -{64,-20,31}, -{64,-20,32}, -{64,-20,33}, -{64,-20,34}, -{64,-20,35}, -{64,-20,36}, -{64,-20,37}, -{64,-20,38}, -{64,-20,39}, -{64,-20,40}, -{64,-20,41}, -{64,-20,42}, -{64,-20,43}, -{64,-20,44}, -{64,-20,45}, -{64,-20,46}, -{64,-20,47}, -{64,-20,48}, -{64,-20,49}, -{64,-20,50}, -{64,-20,51}, -{64,-20,52}, -{64,-20,53}, -{64,-20,54}, -{64,-20,55}, -{64,-20,56}, -{64,-20,57}, -{64,-20,58}, -{64,-20,59}, -{64,-20,60}, -{64,-20,61}, -{64,-20,62}, -{64,-20,63}, -{64,-20,64}, -{64,-20,65}, -{64,-20,66}, -{64,-19,-34}, -{64,-19,-33}, -{64,-19,-32}, -{64,-19,-31}, -{64,-19,-30}, -{64,-19,-29}, -{64,-19,-28}, -{64,-19,-27}, -{64,-19,-26}, -{64,-19,-25}, -{64,-19,-24}, -{64,-19,-23}, -{64,-19,-22}, -{64,-19,-21}, -{64,-19,-20}, -{64,-19,-19}, -{64,-19,-18}, -{64,-19,-17}, -{64,-19,-16}, -{64,-19,-15}, -{64,-19,-14}, -{64,-19,-13}, -{64,-19,-12}, -{64,-19,-11}, -{64,-19,-10}, -{64,-19,-9}, -{64,-19,-8}, -{64,-19,-7}, -{64,-19,-6}, -{64,-19,-5}, -{64,-19,-4}, -{64,-19,-3}, -{64,-19,-2}, -{64,-19,-1}, -{64,-19,0}, -{64,-19,1}, -{64,-19,2}, -{64,-19,3}, -{64,-19,4}, -{64,-19,5}, -{64,-19,6}, -{64,-19,7}, -{64,-19,8}, -{64,-19,9}, -{64,-19,10}, -{64,-19,11}, -{64,-19,12}, -{64,-19,13}, -{64,-19,14}, -{64,-19,15}, -{64,-19,16}, -{64,-19,17}, -{64,-19,18}, -{64,-19,19}, -{64,-19,20}, -{64,-19,21}, -{64,-19,22}, -{64,-19,23}, -{64,-19,24}, -{64,-19,25}, -{64,-19,26}, -{64,-19,27}, -{64,-19,28}, -{64,-19,29}, -{64,-19,30}, -{64,-19,31}, -{64,-19,32}, -{64,-19,33}, -{64,-19,34}, -{64,-19,35}, -{64,-19,36}, -{64,-19,37}, -{64,-19,38}, -{64,-19,39}, -{64,-19,40}, -{64,-19,41}, -{64,-19,42}, -{64,-19,43}, -{64,-19,44}, -{64,-19,45}, -{64,-19,46}, -{64,-19,47}, -{64,-19,48}, -{64,-19,49}, -{64,-19,50}, -{64,-19,51}, -{64,-19,52}, -{64,-19,53}, -{64,-19,54}, -{64,-19,55}, -{64,-19,56}, -{64,-19,57}, -{64,-19,58}, -{64,-19,59}, -{64,-19,60}, -{64,-19,61}, -{64,-19,62}, -{64,-19,63}, -{64,-19,64}, -{64,-19,65}, -{64,-19,66}, -{64,-18,-36}, -{64,-18,-35}, -{64,-18,-34}, -{64,-18,-33}, -{64,-18,-32}, -{64,-18,-31}, -{64,-18,-30}, -{64,-18,-29}, -{64,-18,-28}, -{64,-18,-27}, -{64,-18,-26}, -{64,-18,-25}, -{64,-18,-24}, -{64,-18,-23}, -{64,-18,-22}, -{64,-18,-21}, -{64,-18,-20}, -{64,-18,-19}, -{64,-18,-18}, -{64,-18,-17}, -{64,-18,-16}, -{64,-18,-15}, -{64,-18,-14}, -{64,-18,-13}, -{64,-18,-12}, -{64,-18,-11}, -{64,-18,-10}, -{64,-18,-9}, -{64,-18,-8}, -{64,-18,-7}, -{64,-18,-6}, -{64,-18,-5}, -{64,-18,-4}, -{64,-18,-3}, -{64,-18,-2}, -{64,-18,-1}, -{64,-18,0}, -{64,-18,1}, -{64,-18,2}, -{64,-18,3}, -{64,-18,4}, -{64,-18,5}, -{64,-18,6}, -{64,-18,7}, -{64,-18,8}, -{64,-18,9}, -{64,-18,10}, -{64,-18,11}, -{64,-18,12}, -{64,-18,13}, -{64,-18,14}, -{64,-18,15}, -{64,-18,16}, -{64,-18,17}, -{64,-18,18}, -{64,-18,19}, -{64,-18,20}, -{64,-18,21}, -{64,-18,22}, -{64,-18,23}, -{64,-18,24}, -{64,-18,25}, -{64,-18,26}, -{64,-18,27}, -{64,-18,28}, -{64,-18,29}, -{64,-18,30}, -{64,-18,31}, -{64,-18,32}, -{64,-18,33}, -{64,-18,34}, -{64,-18,35}, -{64,-18,36}, -{64,-18,37}, -{64,-18,38}, -{64,-18,39}, -{64,-18,40}, -{64,-18,41}, -{64,-18,42}, -{64,-18,43}, -{64,-18,44}, -{64,-18,45}, -{64,-18,46}, -{64,-18,47}, -{64,-18,48}, -{64,-18,49}, -{64,-18,50}, -{64,-18,51}, -{64,-18,52}, -{64,-18,53}, -{64,-18,54}, -{64,-18,55}, -{64,-18,56}, -{64,-18,57}, -{64,-18,58}, -{64,-18,59}, -{64,-18,60}, -{64,-18,61}, -{64,-18,62}, -{64,-18,63}, -{64,-18,64}, -{64,-18,65}, -{64,-18,66}, -{64,-17,-37}, -{64,-17,-36}, -{64,-17,-35}, -{64,-17,-34}, -{64,-17,-33}, -{64,-17,-32}, -{64,-17,-31}, -{64,-17,-30}, -{64,-17,-29}, -{64,-17,-28}, -{64,-17,-27}, -{64,-17,-26}, -{64,-17,-25}, -{64,-17,-24}, -{64,-17,-23}, -{64,-17,-22}, -{64,-17,-21}, -{64,-17,-20}, -{64,-17,-19}, -{64,-17,-18}, -{64,-17,-17}, -{64,-17,-16}, -{64,-17,-15}, -{64,-17,-14}, -{64,-17,-13}, -{64,-17,-12}, -{64,-17,-11}, -{64,-17,-10}, -{64,-17,-9}, -{64,-17,-8}, -{64,-17,-7}, -{64,-17,-6}, -{64,-17,-5}, -{64,-17,-4}, -{64,-17,-3}, -{64,-17,-2}, -{64,-17,-1}, -{64,-17,0}, -{64,-17,1}, -{64,-17,2}, -{64,-17,3}, -{64,-17,4}, -{64,-17,5}, -{64,-17,6}, -{64,-17,7}, -{64,-17,8}, -{64,-17,9}, -{64,-17,10}, -{64,-17,11}, -{64,-17,12}, -{64,-17,13}, -{64,-17,14}, -{64,-17,15}, -{64,-17,16}, -{64,-17,17}, -{64,-17,18}, -{64,-17,19}, -{64,-17,20}, -{64,-17,21}, -{64,-17,22}, -{64,-17,23}, -{64,-17,24}, -{64,-17,25}, -{64,-17,26}, -{64,-17,27}, -{64,-17,28}, -{64,-17,29}, -{64,-17,30}, -{64,-17,31}, -{64,-17,32}, -{64,-17,33}, -{64,-17,34}, -{64,-17,35}, -{64,-17,36}, -{64,-17,37}, -{64,-17,38}, -{64,-17,39}, -{64,-17,40}, -{64,-17,41}, -{64,-17,42}, -{64,-17,43}, -{64,-17,44}, -{64,-17,45}, -{64,-17,46}, -{64,-17,47}, -{64,-17,48}, -{64,-17,49}, -{64,-17,50}, -{64,-17,51}, -{64,-17,52}, -{64,-17,53}, -{64,-17,54}, -{64,-17,55}, -{64,-17,56}, -{64,-17,57}, -{64,-17,58}, -{64,-17,59}, -{64,-17,60}, -{64,-17,61}, -{64,-17,62}, -{64,-17,63}, -{64,-17,64}, -{64,-17,65}, -{64,-17,66}, -{64,-16,-38}, -{64,-16,-37}, -{64,-16,-36}, -{64,-16,-35}, -{64,-16,-34}, -{64,-16,-33}, -{64,-16,-32}, -{64,-16,-31}, -{64,-16,-30}, -{64,-16,-29}, -{64,-16,-28}, -{64,-16,-27}, -{64,-16,-26}, -{64,-16,-25}, -{64,-16,-24}, -{64,-16,-23}, -{64,-16,-22}, -{64,-16,-21}, -{64,-16,-20}, -{64,-16,-19}, -{64,-16,-18}, -{64,-16,-17}, -{64,-16,-16}, -{64,-16,-15}, -{64,-16,-14}, -{64,-16,-13}, -{64,-16,-12}, -{64,-16,-11}, -{64,-16,-10}, -{64,-16,-9}, -{64,-16,-8}, -{64,-16,-7}, -{64,-16,-6}, -{64,-16,-5}, -{64,-16,-4}, -{64,-16,-3}, -{64,-16,-2}, -{64,-16,-1}, -{64,-16,0}, -{64,-16,1}, -{64,-16,2}, -{64,-16,3}, -{64,-16,4}, -{64,-16,5}, -{64,-16,6}, -{64,-16,7}, -{64,-16,8}, -{64,-16,9}, -{64,-16,10}, -{64,-16,11}, -{64,-16,12}, -{64,-16,13}, -{64,-16,14}, -{64,-16,15}, -{64,-16,16}, -{64,-16,17}, -{64,-16,18}, -{64,-16,19}, -{64,-16,20}, -{64,-16,21}, -{64,-16,22}, -{64,-16,23}, -{64,-16,24}, -{64,-16,25}, -{64,-16,26}, -{64,-16,27}, -{64,-16,28}, -{64,-16,29}, -{64,-16,30}, -{64,-16,31}, -{64,-16,32}, -{64,-16,33}, -{64,-16,34}, -{64,-16,35}, -{64,-16,36}, -{64,-16,37}, -{64,-16,38}, -{64,-16,39}, -{64,-16,40}, -{64,-16,41}, -{64,-16,42}, -{64,-16,43}, -{64,-16,44}, -{64,-16,45}, -{64,-16,46}, -{64,-16,47}, -{64,-16,48}, -{64,-16,49}, -{64,-16,50}, -{64,-16,51}, -{64,-16,52}, -{64,-16,53}, -{64,-16,54}, -{64,-16,55}, -{64,-16,56}, -{64,-16,57}, -{64,-16,58}, -{64,-16,59}, -{64,-16,60}, -{64,-16,61}, -{64,-16,62}, -{64,-16,63}, -{64,-16,64}, -{64,-16,65}, -{64,-16,66}, -{64,-15,-39}, -{64,-15,-38}, -{64,-15,-37}, -{64,-15,-36}, -{64,-15,-35}, -{64,-15,-34}, -{64,-15,-33}, -{64,-15,-32}, -{64,-15,-31}, -{64,-15,-30}, -{64,-15,-29}, -{64,-15,-28}, -{64,-15,-27}, -{64,-15,-26}, -{64,-15,-25}, -{64,-15,-24}, -{64,-15,-23}, -{64,-15,-22}, -{64,-15,-21}, -{64,-15,-20}, -{64,-15,-19}, -{64,-15,-18}, -{64,-15,-17}, -{64,-15,-16}, -{64,-15,-15}, -{64,-15,-14}, -{64,-15,-13}, -{64,-15,-12}, -{64,-15,-11}, -{64,-15,-10}, -{64,-15,-9}, -{64,-15,-8}, -{64,-15,-7}, -{64,-15,-6}, -{64,-15,-5}, -{64,-15,-4}, -{64,-15,-3}, -{64,-15,-2}, -{64,-15,-1}, -{64,-15,0}, -{64,-15,1}, -{64,-15,2}, -{64,-15,3}, -{64,-15,4}, -{64,-15,5}, -{64,-15,6}, -{64,-15,7}, -{64,-15,8}, -{64,-15,9}, -{64,-15,10}, -{64,-15,11}, -{64,-15,12}, -{64,-15,13}, -{64,-15,14}, -{64,-15,15}, -{64,-15,16}, -{64,-15,17}, -{64,-15,18}, -{64,-15,19}, -{64,-15,20}, -{64,-15,21}, -{64,-15,22}, -{64,-15,23}, -{64,-15,24}, -{64,-15,25}, -{64,-15,26}, -{64,-15,27}, -{64,-15,28}, -{64,-15,29}, -{64,-15,30}, -{64,-15,31}, -{64,-15,32}, -{64,-15,33}, -{64,-15,34}, -{64,-15,35}, -{64,-15,36}, -{64,-15,37}, -{64,-15,38}, -{64,-15,39}, -{64,-15,40}, -{64,-15,41}, -{64,-15,42}, -{64,-15,43}, -{64,-15,44}, -{64,-15,45}, -{64,-15,46}, -{64,-15,47}, -{64,-15,48}, -{64,-15,49}, -{64,-15,50}, -{64,-15,51}, -{64,-15,52}, -{64,-15,53}, -{64,-15,54}, -{64,-15,55}, -{64,-15,56}, -{64,-15,57}, -{64,-15,58}, -{64,-15,59}, -{64,-15,60}, -{64,-15,61}, -{64,-15,62}, -{64,-15,63}, -{64,-15,64}, -{64,-15,65}, -{64,-15,66}, -{64,-15,67}, -{64,-14,-41}, -{64,-14,-40}, -{64,-14,-39}, -{64,-14,-38}, -{64,-14,-37}, -{64,-14,-36}, -{64,-14,-35}, -{64,-14,-34}, -{64,-14,-33}, -{64,-14,-32}, -{64,-14,-31}, -{64,-14,-30}, -{64,-14,-29}, -{64,-14,-28}, -{64,-14,-27}, -{64,-14,-26}, -{64,-14,-25}, -{64,-14,-24}, -{64,-14,-23}, -{64,-14,-22}, -{64,-14,-21}, -{64,-14,-20}, -{64,-14,-19}, -{64,-14,-18}, -{64,-14,-17}, -{64,-14,-16}, -{64,-14,-15}, -{64,-14,-14}, -{64,-14,-13}, -{64,-14,-12}, -{64,-14,-11}, -{64,-14,-10}, -{64,-14,-9}, -{64,-14,-8}, -{64,-14,-7}, -{64,-14,-6}, -{64,-14,-5}, -{64,-14,-4}, -{64,-14,-3}, -{64,-14,-2}, -{64,-14,-1}, -{64,-14,0}, -{64,-14,1}, -{64,-14,2}, -{64,-14,3}, -{64,-14,4}, -{64,-14,5}, -{64,-14,6}, -{64,-14,7}, -{64,-14,8}, -{64,-14,9}, -{64,-14,10}, -{64,-14,11}, -{64,-14,12}, -{64,-14,13}, -{64,-14,14}, -{64,-14,15}, -{64,-14,16}, -{64,-14,17}, -{64,-14,18}, -{64,-14,19}, -{64,-14,20}, -{64,-14,21}, -{64,-14,22}, -{64,-14,23}, -{64,-14,24}, -{64,-14,25}, -{64,-14,26}, -{64,-14,27}, -{64,-14,28}, -{64,-14,29}, -{64,-14,30}, -{64,-14,31}, -{64,-14,32}, -{64,-14,33}, -{64,-14,34}, -{64,-14,35}, -{64,-14,36}, -{64,-14,37}, -{64,-14,38}, -{64,-14,39}, -{64,-14,40}, -{64,-14,41}, -{64,-14,42}, -{64,-14,43}, -{64,-14,44}, -{64,-14,45}, -{64,-14,46}, -{64,-14,47}, -{64,-14,48}, -{64,-14,49}, -{64,-14,50}, -{64,-14,51}, -{64,-14,52}, -{64,-14,53}, -{64,-14,54}, -{64,-14,55}, -{64,-14,56}, -{64,-14,57}, -{64,-14,58}, -{64,-14,59}, -{64,-14,60}, -{64,-14,61}, -{64,-14,62}, -{64,-14,63}, -{64,-14,64}, -{64,-14,65}, -{64,-14,66}, -{64,-14,67}, -{64,-13,-42}, -{64,-13,-41}, -{64,-13,-40}, -{64,-13,-39}, -{64,-13,-38}, -{64,-13,-37}, -{64,-13,-36}, -{64,-13,-35}, -{64,-13,-34}, -{64,-13,-33}, -{64,-13,-32}, -{64,-13,-31}, -{64,-13,-30}, -{64,-13,-29}, -{64,-13,-28}, -{64,-13,-27}, -{64,-13,-26}, -{64,-13,-25}, -{64,-13,-24}, -{64,-13,-23}, -{64,-13,-22}, -{64,-13,-21}, -{64,-13,-20}, -{64,-13,-19}, -{64,-13,-18}, -{64,-13,-17}, -{64,-13,-16}, -{64,-13,-15}, -{64,-13,-14}, -{64,-13,-13}, -{64,-13,-12}, -{64,-13,-11}, -{64,-13,-10}, -{64,-13,-9}, -{64,-13,-8}, -{64,-13,-7}, -{64,-13,-6}, -{64,-13,-5}, -{64,-13,-4}, -{64,-13,-3}, -{64,-13,-2}, -{64,-13,-1}, -{64,-13,0}, -{64,-13,1}, -{64,-13,2}, -{64,-13,3}, -{64,-13,4}, -{64,-13,5}, -{64,-13,6}, -{64,-13,7}, -{64,-13,8}, -{64,-13,9}, -{64,-13,10}, -{64,-13,11}, -{64,-13,12}, -{64,-13,13}, -{64,-13,14}, -{64,-13,15}, -{64,-13,16}, -{64,-13,17}, -{64,-13,18}, -{64,-13,19}, -{64,-13,20}, -{64,-13,21}, -{64,-13,22}, -{64,-13,23}, -{64,-13,24}, -{64,-13,25}, -{64,-13,26}, -{64,-13,27}, -{64,-13,28}, -{64,-13,29}, -{64,-13,30}, -{64,-13,31}, -{64,-13,32}, -{64,-13,33}, -{64,-13,34}, -{64,-13,35}, -{64,-13,36}, -{64,-13,37}, -{64,-13,38}, -{64,-13,39}, -{64,-13,40}, -{64,-13,41}, -{64,-13,42}, -{64,-13,43}, -{64,-13,44}, -{64,-13,45}, -{64,-13,46}, -{64,-13,47}, -{64,-13,48}, -{64,-13,49}, -{64,-13,50}, -{64,-13,51}, -{64,-13,52}, -{64,-13,53}, -{64,-13,54}, -{64,-13,55}, -{64,-13,56}, -{64,-13,57}, -{64,-13,58}, -{64,-13,59}, -{64,-13,60}, -{64,-13,61}, -{64,-13,62}, -{64,-13,63}, -{64,-13,64}, -{64,-13,65}, -{64,-13,66}, -{64,-13,67}, -{64,-12,-43}, -{64,-12,-42}, -{64,-12,-41}, -{64,-12,-40}, -{64,-12,-39}, -{64,-12,-38}, -{64,-12,-37}, -{64,-12,-36}, -{64,-12,-35}, -{64,-12,-34}, -{64,-12,-33}, -{64,-12,-32}, -{64,-12,-31}, -{64,-12,-30}, -{64,-12,-29}, -{64,-12,-28}, -{64,-12,-27}, -{64,-12,-26}, -{64,-12,-25}, -{64,-12,-24}, -{64,-12,-23}, -{64,-12,-22}, -{64,-12,-21}, -{64,-12,-20}, -{64,-12,-19}, -{64,-12,-18}, -{64,-12,-17}, -{64,-12,-16}, -{64,-12,-15}, -{64,-12,-14}, -{64,-12,-13}, -{64,-12,-12}, -{64,-12,-11}, -{64,-12,-10}, -{64,-12,-9}, -{64,-12,-8}, -{64,-12,-7}, -{64,-12,-6}, -{64,-12,-5}, -{64,-12,-4}, -{64,-12,-3}, -{64,-12,-2}, -{64,-12,-1}, -{64,-12,0}, -{64,-12,1}, -{64,-12,2}, -{64,-12,3}, -{64,-12,4}, -{64,-12,5}, -{64,-12,6}, -{64,-12,7}, -{64,-12,8}, -{64,-12,9}, -{64,-12,10}, -{64,-12,11}, -{64,-12,12}, -{64,-12,13}, -{64,-12,14}, -{64,-12,15}, -{64,-12,16}, -{64,-12,17}, -{64,-12,18}, -{64,-12,19}, -{64,-12,20}, -{64,-12,21}, -{64,-12,22}, -{64,-12,23}, -{64,-12,24}, -{64,-12,25}, -{64,-12,26}, -{64,-12,27}, -{64,-12,28}, -{64,-12,29}, -{64,-12,30}, -{64,-12,31}, -{64,-12,32}, -{64,-12,33}, -{64,-12,34}, -{64,-12,35}, -{64,-12,36}, -{64,-12,37}, -{64,-12,38}, -{64,-12,39}, -{64,-12,40}, -{64,-12,41}, -{64,-12,42}, -{64,-12,43}, -{64,-12,44}, -{64,-12,45}, -{64,-12,46}, -{64,-12,47}, -{64,-12,48}, -{64,-12,49}, -{64,-12,50}, -{64,-12,51}, -{64,-12,52}, -{64,-12,53}, -{64,-12,54}, -{64,-12,55}, -{64,-12,56}, -{64,-12,57}, -{64,-12,58}, -{64,-12,59}, -{64,-12,60}, -{64,-12,61}, -{64,-12,62}, -{64,-12,63}, -{64,-12,64}, -{64,-12,65}, -{64,-12,66}, -{64,-12,67}, -{64,-11,-44}, -{64,-11,-43}, -{64,-11,-42}, -{64,-11,-41}, -{64,-11,-40}, -{64,-11,-39}, -{64,-11,-38}, -{64,-11,-37}, -{64,-11,-36}, -{64,-11,-35}, -{64,-11,-34}, -{64,-11,-33}, -{64,-11,-32}, -{64,-11,-31}, -{64,-11,-30}, -{64,-11,-29}, -{64,-11,-28}, -{64,-11,-27}, -{64,-11,-26}, -{64,-11,-25}, -{64,-11,-24}, -{64,-11,-23}, -{64,-11,-22}, -{64,-11,-21}, -{64,-11,-20}, -{64,-11,-19}, -{64,-11,-18}, -{64,-11,-17}, -{64,-11,-16}, -{64,-11,-15}, -{64,-11,-14}, -{64,-11,-13}, -{64,-11,-12}, -{64,-11,-11}, -{64,-11,-10}, -{64,-11,-9}, -{64,-11,-8}, -{64,-11,-7}, -{64,-11,-6}, -{64,-11,-5}, -{64,-11,-4}, -{64,-11,-3}, -{64,-11,-2}, -{64,-11,-1}, -{64,-11,0}, -{64,-11,1}, -{64,-11,2}, -{64,-11,3}, -{64,-11,4}, -{64,-11,5}, -{64,-11,6}, -{64,-11,7}, -{64,-11,8}, -{64,-11,9}, -{64,-11,10}, -{64,-11,11}, -{64,-11,12}, -{64,-11,13}, -{64,-11,14}, -{64,-11,15}, -{64,-11,16}, -{64,-11,17}, -{64,-11,18}, -{64,-11,19}, -{64,-11,20}, -{64,-11,21}, -{64,-11,22}, -{64,-11,23}, -{64,-11,24}, -{64,-11,25}, -{64,-11,26}, -{64,-11,27}, -{64,-11,28}, -{64,-11,29}, -{64,-11,30}, -{64,-11,31}, -{64,-11,32}, -{64,-11,33}, -{64,-11,34}, -{64,-11,35}, -{64,-11,36}, -{64,-11,37}, -{64,-11,38}, -{64,-11,39}, -{64,-11,40}, -{64,-11,41}, -{64,-11,42}, -{64,-11,43}, -{64,-11,44}, -{64,-11,45}, -{64,-11,46}, -{64,-11,47}, -{64,-11,48}, -{64,-11,49}, -{64,-11,50}, -{64,-11,51}, -{64,-11,52}, -{64,-11,53}, -{64,-11,54}, -{64,-11,55}, -{64,-11,56}, -{64,-11,57}, -{64,-11,58}, -{64,-11,59}, -{64,-11,60}, -{64,-11,61}, -{64,-11,62}, -{64,-11,63}, -{64,-11,64}, -{64,-11,65}, -{64,-11,66}, -{64,-11,67}, -{64,-10,-45}, -{64,-10,-44}, -{64,-10,-43}, -{64,-10,-42}, -{64,-10,-41}, -{64,-10,-40}, -{64,-10,-39}, -{64,-10,-38}, -{64,-10,-37}, -{64,-10,-36}, -{64,-10,-35}, -{64,-10,-34}, -{64,-10,-33}, -{64,-10,-32}, -{64,-10,-31}, -{64,-10,-30}, -{64,-10,-29}, -{64,-10,-28}, -{64,-10,-27}, -{64,-10,-26}, -{64,-10,-25}, -{64,-10,-24}, -{64,-10,-23}, -{64,-10,-22}, -{64,-10,-21}, -{64,-10,-20}, -{64,-10,-19}, -{64,-10,-18}, -{64,-10,-17}, -{64,-10,-16}, -{64,-10,-15}, -{64,-10,-14}, -{64,-10,-13}, -{64,-10,-12}, -{64,-10,-11}, -{64,-10,-10}, -{64,-10,-9}, -{64,-10,-8}, -{64,-10,-7}, -{64,-10,-6}, -{64,-10,-5}, -{64,-10,-4}, -{64,-10,-3}, -{64,-10,-2}, -{64,-10,-1}, -{64,-10,0}, -{64,-10,1}, -{64,-10,2}, -{64,-10,3}, -{64,-10,4}, -{64,-10,5}, -{64,-10,6}, -{64,-10,7}, -{64,-10,8}, -{64,-10,9}, -{64,-10,10}, -{64,-10,11}, -{64,-10,12}, -{64,-10,13}, -{64,-10,14}, -{64,-10,15}, -{64,-10,16}, -{64,-10,17}, -{64,-10,18}, -{64,-10,19}, -{64,-10,20}, -{64,-10,21}, -{64,-10,22}, -{64,-10,23}, -{64,-10,24}, -{64,-10,25}, -{64,-10,26}, -{64,-10,27}, -{64,-10,28}, -{64,-10,29}, -{64,-10,30}, -{64,-10,31}, -{64,-10,32}, -{64,-10,33}, -{64,-10,34}, -{64,-10,35}, -{64,-10,36}, -{64,-10,37}, -{64,-10,38}, -{64,-10,39}, -{64,-10,40}, -{64,-10,41}, -{64,-10,42}, -{64,-10,43}, -{64,-10,44}, -{64,-10,45}, -{64,-10,46}, -{64,-10,47}, -{64,-10,48}, -{64,-10,49}, -{64,-10,50}, -{64,-10,51}, -{64,-10,52}, -{64,-10,53}, -{64,-10,54}, -{64,-10,55}, -{64,-10,56}, -{64,-10,57}, -{64,-10,58}, -{64,-10,59}, -{64,-10,60}, -{64,-10,61}, -{64,-10,62}, -{64,-10,63}, -{64,-10,64}, -{64,-10,65}, -{64,-10,66}, -{64,-10,67}, -{64,-9,-47}, -{64,-9,-46}, -{64,-9,-45}, -{64,-9,-44}, -{64,-9,-43}, -{64,-9,-42}, -{64,-9,-41}, -{64,-9,-40}, -{64,-9,-39}, -{64,-9,-38}, -{64,-9,-37}, -{64,-9,-36}, -{64,-9,-35}, -{64,-9,-34}, -{64,-9,-33}, -{64,-9,-32}, -{64,-9,-31}, -{64,-9,-30}, -{64,-9,-29}, -{64,-9,-28}, -{64,-9,-27}, -{64,-9,-26}, -{64,-9,-25}, -{64,-9,-24}, -{64,-9,-23}, -{64,-9,-22}, -{64,-9,-21}, -{64,-9,-20}, -{64,-9,-19}, -{64,-9,-18}, -{64,-9,-17}, -{64,-9,-16}, -{64,-9,-15}, -{64,-9,-14}, -{64,-9,-13}, -{64,-9,-12}, -{64,-9,-11}, -{64,-9,-10}, -{64,-9,-9}, -{64,-9,-8}, -{64,-9,-7}, -{64,-9,-6}, -{64,-9,-5}, -{64,-9,-4}, -{64,-9,-3}, -{64,-9,-2}, -{64,-9,-1}, -{64,-9,0}, -{64,-9,1}, -{64,-9,2}, -{64,-9,3}, -{64,-9,4}, -{64,-9,5}, -{64,-9,6}, -{64,-9,7}, -{64,-9,8}, -{64,-9,9}, -{64,-9,10}, -{64,-9,11}, -{64,-9,12}, -{64,-9,13}, -{64,-9,14}, -{64,-9,15}, -{64,-9,16}, -{64,-9,17}, -{64,-9,18}, -{64,-9,19}, -{64,-9,20}, -{64,-9,21}, -{64,-9,22}, -{64,-9,23}, -{64,-9,24}, -{64,-9,25}, -{64,-9,26}, -{64,-9,27}, -{64,-9,28}, -{64,-9,29}, -{64,-9,30}, -{64,-9,31}, -{64,-9,32}, -{64,-9,33}, -{64,-9,34}, -{64,-9,35}, -{64,-9,36}, -{64,-9,37}, -{64,-9,38}, -{64,-9,39}, -{64,-9,40}, -{64,-9,41}, -{64,-9,42}, -{64,-9,43}, -{64,-9,44}, -{64,-9,45}, -{64,-9,46}, -{64,-9,47}, -{64,-9,48}, -{64,-9,49}, -{64,-9,50}, -{64,-9,51}, -{64,-9,52}, -{64,-9,53}, -{64,-9,54}, -{64,-9,55}, -{64,-9,56}, -{64,-9,57}, -{64,-9,58}, -{64,-9,59}, -{64,-9,60}, -{64,-9,61}, -{64,-9,62}, -{64,-9,63}, -{64,-9,64}, -{64,-9,65}, -{64,-9,66}, -{64,-9,67}, -{64,-8,-48}, -{64,-8,-47}, -{64,-8,-46}, -{64,-8,-45}, -{64,-8,-44}, -{64,-8,-43}, -{64,-8,-42}, -{64,-8,-41}, -{64,-8,-40}, -{64,-8,-39}, -{64,-8,-38}, -{64,-8,-37}, -{64,-8,-36}, -{64,-8,-35}, -{64,-8,-34}, -{64,-8,-33}, -{64,-8,-32}, -{64,-8,-31}, -{64,-8,-30}, -{64,-8,-29}, -{64,-8,-28}, -{64,-8,-27}, -{64,-8,-26}, -{64,-8,-25}, -{64,-8,-24}, -{64,-8,-23}, -{64,-8,-22}, -{64,-8,-21}, -{64,-8,-20}, -{64,-8,-19}, -{64,-8,-18}, -{64,-8,-17}, -{64,-8,-16}, -{64,-8,-15}, -{64,-8,-14}, -{64,-8,-13}, -{64,-8,-12}, -{64,-8,-11}, -{64,-8,-10}, -{64,-8,-9}, -{64,-8,-8}, -{64,-8,-7}, -{64,-8,-6}, -{64,-8,-5}, -{64,-8,-4}, -{64,-8,-3}, -{64,-8,-2}, -{64,-8,-1}, -{64,-8,0}, -{64,-8,1}, -{64,-8,2}, -{64,-8,3}, -{64,-8,4}, -{64,-8,5}, -{64,-8,6}, -{64,-8,7}, -{64,-8,8}, -{64,-8,9}, -{64,-8,10}, -{64,-8,11}, -{64,-8,12}, -{64,-8,13}, -{64,-8,14}, -{64,-8,15}, -{64,-8,16}, -{64,-8,17}, -{64,-8,18}, -{64,-8,19}, -{64,-8,20}, -{64,-8,21}, -{64,-8,22}, -{64,-8,23}, -{64,-8,24}, -{64,-8,25}, -{64,-8,26}, -{64,-8,27}, -{64,-8,28}, -{64,-8,29}, -{64,-8,30}, -{64,-8,31}, -{64,-8,32}, -{64,-8,33}, -{64,-8,34}, -{64,-8,35}, -{64,-8,36}, -{64,-8,37}, -{64,-8,38}, -{64,-8,39}, -{64,-8,40}, -{64,-8,41}, -{64,-8,42}, -{64,-8,43}, -{64,-8,44}, -{64,-8,45}, -{64,-8,46}, -{64,-8,47}, -{64,-8,48}, -{64,-8,49}, -{64,-8,50}, -{64,-8,51}, -{64,-8,52}, -{64,-8,53}, -{64,-8,54}, -{64,-8,55}, -{64,-8,56}, -{64,-8,57}, -{64,-8,58}, -{64,-8,59}, -{64,-8,60}, -{64,-8,61}, -{64,-8,62}, -{64,-8,63}, -{64,-8,64}, -{64,-8,65}, -{64,-8,66}, -{64,-8,67}, -{64,-7,-49}, -{64,-7,-48}, -{64,-7,-47}, -{64,-7,-46}, -{64,-7,-45}, -{64,-7,-44}, -{64,-7,-43}, -{64,-7,-42}, -{64,-7,-41}, -{64,-7,-40}, -{64,-7,-39}, -{64,-7,-38}, -{64,-7,-37}, -{64,-7,-36}, -{64,-7,-35}, -{64,-7,-34}, -{64,-7,-33}, -{64,-7,-32}, -{64,-7,-31}, -{64,-7,-30}, -{64,-7,-29}, -{64,-7,-28}, -{64,-7,-27}, -{64,-7,-26}, -{64,-7,-25}, -{64,-7,-24}, -{64,-7,-23}, -{64,-7,-22}, -{64,-7,-21}, -{64,-7,-20}, -{64,-7,-19}, -{64,-7,-18}, -{64,-7,-17}, -{64,-7,-16}, -{64,-7,-15}, -{64,-7,-14}, -{64,-7,-13}, -{64,-7,-12}, -{64,-7,-11}, -{64,-7,-10}, -{64,-7,-9}, -{64,-7,-8}, -{64,-7,-7}, -{64,-7,-6}, -{64,-7,-5}, -{64,-7,-4}, -{64,-7,-3}, -{64,-7,-2}, -{64,-7,-1}, -{64,-7,0}, -{64,-7,1}, -{64,-7,2}, -{64,-7,3}, -{64,-7,4}, -{64,-7,5}, -{64,-7,6}, -{64,-7,7}, -{64,-7,8}, -{64,-7,9}, -{64,-7,10}, -{64,-7,11}, -{64,-7,12}, -{64,-7,13}, -{64,-7,14}, -{64,-7,15}, -{64,-7,16}, -{64,-7,17}, -{64,-7,18}, -{64,-7,19}, -{64,-7,20}, -{64,-7,21}, -{64,-7,22}, -{64,-7,23}, -{64,-7,24}, -{64,-7,25}, -{64,-7,26}, -{64,-7,27}, -{64,-7,28}, -{64,-7,29}, -{64,-7,30}, -{64,-7,31}, -{64,-7,32}, -{64,-7,33}, -{64,-7,34}, -{64,-7,35}, -{64,-7,36}, -{64,-7,37}, -{64,-7,38}, -{64,-7,39}, -{64,-7,40}, -{64,-7,41}, -{64,-7,42}, -{64,-7,43}, -{64,-7,44}, -{64,-7,45}, -{64,-7,46}, -{64,-7,47}, -{64,-7,48}, -{64,-7,49}, -{64,-7,50}, -{64,-7,51}, -{64,-7,52}, -{64,-7,53}, -{64,-7,54}, -{64,-7,55}, -{64,-7,56}, -{64,-7,57}, -{64,-7,58}, -{64,-7,59}, -{64,-7,60}, -{64,-7,61}, -{64,-7,62}, -{64,-7,63}, -{64,-7,64}, -{64,-7,65}, -{64,-7,66}, -{64,-7,67}, -{64,-6,-50}, -{64,-6,-49}, -{64,-6,-48}, -{64,-6,-47}, -{64,-6,-46}, -{64,-6,-45}, -{64,-6,-44}, -{64,-6,-43}, -{64,-6,-42}, -{64,-6,-41}, -{64,-6,-40}, -{64,-6,-39}, -{64,-6,-38}, -{64,-6,-37}, -{64,-6,-36}, -{64,-6,-35}, -{64,-6,-34}, -{64,-6,-33}, -{64,-6,-32}, -{64,-6,-31}, -{64,-6,-30}, -{64,-6,-29}, -{64,-6,-28}, -{64,-6,-27}, -{64,-6,-26}, -{64,-6,-25}, -{64,-6,-24}, -{64,-6,-23}, -{64,-6,-22}, -{64,-6,-21}, -{64,-6,-20}, -{64,-6,-19}, -{64,-6,-18}, -{64,-6,-17}, -{64,-6,-16}, -{64,-6,-15}, -{64,-6,-14}, -{64,-6,-13}, -{64,-6,-12}, -{64,-6,-11}, -{64,-6,-10}, -{64,-6,-9}, -{64,-6,-8}, -{64,-6,-7}, -{64,-6,-6}, -{64,-6,-5}, -{64,-6,-4}, -{64,-6,-3}, -{64,-6,-2}, -{64,-6,-1}, -{64,-6,0}, -{64,-6,1}, -{64,-6,2}, -{64,-6,3}, -{64,-6,4}, -{64,-6,5}, -{64,-6,6}, -{64,-6,7}, -{64,-6,8}, -{64,-6,9}, -{64,-6,10}, -{64,-6,11}, -{64,-6,12}, -{64,-6,13}, -{64,-6,14}, -{64,-6,15}, -{64,-6,16}, -{64,-6,17}, -{64,-6,18}, -{64,-6,19}, -{64,-6,20}, -{64,-6,21}, -{64,-6,22}, -{64,-6,23}, -{64,-6,24}, -{64,-6,25}, -{64,-6,26}, -{64,-6,27}, -{64,-6,28}, -{64,-6,29}, -{64,-6,30}, -{64,-6,31}, -{64,-6,32}, -{64,-6,33}, -{64,-6,34}, -{64,-6,35}, -{64,-6,36}, -{64,-6,37}, -{64,-6,38}, -{64,-6,39}, -{64,-6,40}, -{64,-6,41}, -{64,-6,42}, -{64,-6,43}, -{64,-6,44}, -{64,-6,45}, -{64,-6,46}, -{64,-6,47}, -{64,-6,48}, -{64,-6,49}, -{64,-6,50}, -{64,-6,51}, -{64,-6,52}, -{64,-6,53}, -{64,-6,54}, -{64,-6,55}, -{64,-6,56}, -{64,-6,57}, -{64,-6,58}, -{64,-6,59}, -{64,-6,60}, -{64,-6,61}, -{64,-6,62}, -{64,-6,63}, -{64,-6,64}, -{64,-6,65}, -{64,-6,66}, -{64,-6,67}, -{64,-5,-51}, -{64,-5,-50}, -{64,-5,-49}, -{64,-5,-48}, -{64,-5,-47}, -{64,-5,-46}, -{64,-5,-45}, -{64,-5,-44}, -{64,-5,-43}, -{64,-5,-42}, -{64,-5,-41}, -{64,-5,-40}, -{64,-5,-39}, -{64,-5,-38}, -{64,-5,-37}, -{64,-5,-36}, -{64,-5,-35}, -{64,-5,-34}, -{64,-5,-33}, -{64,-5,-32}, -{64,-5,-31}, -{64,-5,-30}, -{64,-5,-29}, -{64,-5,-28}, -{64,-5,-27}, -{64,-5,-26}, -{64,-5,-25}, -{64,-5,-24}, -{64,-5,-23}, -{64,-5,-22}, -{64,-5,-21}, -{64,-5,-20}, -{64,-5,-19}, -{64,-5,-18}, -{64,-5,-17}, -{64,-5,-16}, -{64,-5,-15}, -{64,-5,-14}, -{64,-5,-13}, -{64,-5,-12}, -{64,-5,-11}, -{64,-5,-10}, -{64,-5,-9}, -{64,-5,-8}, -{64,-5,-7}, -{64,-5,-6}, -{64,-5,-5}, -{64,-5,-4}, -{64,-5,-3}, -{64,-5,-2}, -{64,-5,-1}, -{64,-5,0}, -{64,-5,1}, -{64,-5,2}, -{64,-5,3}, -{64,-5,4}, -{64,-5,5}, -{64,-5,6}, -{64,-5,7}, -{64,-5,8}, -{64,-5,9}, -{64,-5,10}, -{64,-5,11}, -{64,-5,12}, -{64,-5,13}, -{64,-5,14}, -{64,-5,15}, -{64,-5,16}, -{64,-5,17}, -{64,-5,18}, -{64,-5,19}, -{64,-5,20}, -{64,-5,21}, -{64,-5,22}, -{64,-5,23}, -{64,-5,24}, -{64,-5,25}, -{64,-5,26}, -{64,-5,27}, -{64,-5,28}, -{64,-5,29}, -{64,-5,30}, -{64,-5,31}, -{64,-5,32}, -{64,-5,33}, -{64,-5,34}, -{64,-5,35}, -{64,-5,36}, -{64,-5,37}, -{64,-5,38}, -{64,-5,39}, -{64,-5,40}, -{64,-5,41}, -{64,-5,42}, -{64,-5,43}, -{64,-5,44}, -{64,-5,45}, -{64,-5,46}, -{64,-5,47}, -{64,-5,48}, -{64,-5,49}, -{64,-5,50}, -{64,-5,51}, -{64,-5,52}, -{64,-5,53}, -{64,-5,54}, -{64,-5,55}, -{64,-5,56}, -{64,-5,57}, -{64,-5,58}, -{64,-5,59}, -{64,-5,60}, -{64,-5,61}, -{64,-5,62}, -{64,-5,63}, -{64,-5,64}, -{64,-5,65}, -{64,-5,66}, -{64,-5,67}, -{64,-4,-53}, -{64,-4,-52}, -{64,-4,-51}, -{64,-4,-50}, -{64,-4,-49}, -{64,-4,-48}, -{64,-4,-47}, -{64,-4,-46}, -{64,-4,-45}, -{64,-4,-44}, -{64,-4,-43}, -{64,-4,-42}, -{64,-4,-41}, -{64,-4,-40}, -{64,-4,-39}, -{64,-4,-38}, -{64,-4,-37}, -{64,-4,-36}, -{64,-4,-35}, -{64,-4,-34}, -{64,-4,-33}, -{64,-4,-32}, -{64,-4,-31}, -{64,-4,-30}, -{64,-4,-29}, -{64,-4,-28}, -{64,-4,-27}, -{64,-4,-26}, -{64,-4,-25}, -{64,-4,-24}, -{64,-4,-23}, -{64,-4,-22}, -{64,-4,-21}, -{64,-4,-20}, -{64,-4,-19}, -{64,-4,-18}, -{64,-4,-17}, -{64,-4,-16}, -{64,-4,-15}, -{64,-4,-14}, -{64,-4,-13}, -{64,-4,-12}, -{64,-4,-11}, -{64,-4,-10}, -{64,-4,-9}, -{64,-4,-8}, -{64,-4,-7}, -{64,-4,-6}, -{64,-4,-5}, -{64,-4,-4}, -{64,-4,-3}, -{64,-4,-2}, -{64,-4,-1}, -{64,-4,0}, -{64,-4,1}, -{64,-4,2}, -{64,-4,3}, -{64,-4,4}, -{64,-4,5}, -{64,-4,6}, -{64,-4,7}, -{64,-4,8}, -{64,-4,9}, -{64,-4,10}, -{64,-4,11}, -{64,-4,12}, -{64,-4,13}, -{64,-4,14}, -{64,-4,15}, -{64,-4,16}, -{64,-4,17}, -{64,-4,18}, -{64,-4,19}, -{64,-4,20}, -{64,-4,21}, -{64,-4,22}, -{64,-4,23}, -{64,-4,24}, -{64,-4,25}, -{64,-4,26}, -{64,-4,27}, -{64,-4,28}, -{64,-4,29}, -{64,-4,30}, -{64,-4,31}, -{64,-4,32}, -{64,-4,33}, -{64,-4,34}, -{64,-4,35}, -{64,-4,36}, -{64,-4,37}, -{64,-4,38}, -{64,-4,39}, -{64,-4,40}, -{64,-4,41}, -{64,-4,42}, -{64,-4,43}, -{64,-4,44}, -{64,-4,45}, -{64,-4,46}, -{64,-4,47}, -{64,-4,48}, -{64,-4,49}, -{64,-4,50}, -{64,-4,51}, -{64,-4,52}, -{64,-4,53}, -{64,-4,54}, -{64,-4,55}, -{64,-4,56}, -{64,-4,57}, -{64,-4,58}, -{64,-4,59}, -{64,-4,60}, -{64,-4,61}, -{64,-4,62}, -{64,-4,63}, -{64,-4,64}, -{64,-4,65}, -{64,-4,66}, -{64,-4,67}, -{64,-3,-54}, -{64,-3,-53}, -{64,-3,-52}, -{64,-3,-51}, -{64,-3,-50}, -{64,-3,-49}, -{64,-3,-48}, -{64,-3,-47}, -{64,-3,-46}, -{64,-3,-45}, -{64,-3,-44}, -{64,-3,-43}, -{64,-3,-42}, -{64,-3,-41}, -{64,-3,-40}, -{64,-3,-39}, -{64,-3,-38}, -{64,-3,-37}, -{64,-3,-36}, -{64,-3,-35}, -{64,-3,-34}, -{64,-3,-33}, -{64,-3,-32}, -{64,-3,-31}, -{64,-3,-30}, -{64,-3,-29}, -{64,-3,-28}, -{64,-3,-27}, -{64,-3,-26}, -{64,-3,-25}, -{64,-3,-24}, -{64,-3,-23}, -{64,-3,-22}, -{64,-3,-21}, -{64,-3,-20}, -{64,-3,-19}, -{64,-3,-18}, -{64,-3,-17}, -{64,-3,-16}, -{64,-3,-15}, -{64,-3,-14}, -{64,-3,-13}, -{64,-3,-12}, -{64,-3,-11}, -{64,-3,-10}, -{64,-3,-9}, -{64,-3,-8}, -{64,-3,-7}, -{64,-3,-6}, -{64,-3,-5}, -{64,-3,-4}, -{64,-3,-3}, -{64,-3,-2}, -{64,-3,-1}, -{64,-3,0}, -{64,-3,1}, -{64,-3,2}, -{64,-3,3}, -{64,-3,4}, -{64,-3,5}, -{64,-3,6}, -{64,-3,7}, -{64,-3,8}, -{64,-3,9}, -{64,-3,10}, -{64,-3,11}, -{64,-3,12}, -{64,-3,13}, -{64,-3,14}, -{64,-3,15}, -{64,-3,16}, -{64,-3,17}, -{64,-3,18}, -{64,-3,19}, -{64,-3,20}, -{64,-3,21}, -{64,-3,22}, -{64,-3,23}, -{64,-3,24}, -{64,-3,25}, -{64,-3,26}, -{64,-3,27}, -{64,-3,28}, -{64,-3,29}, -{64,-3,30}, -{64,-3,31}, -{64,-3,32}, -{64,-3,33}, -{64,-3,34}, -{64,-3,35}, -{64,-3,36}, -{64,-3,37}, -{64,-3,38}, -{64,-3,39}, -{64,-3,40}, -{64,-3,41}, -{64,-3,42}, -{64,-3,43}, -{64,-3,44}, -{64,-3,45}, -{64,-3,46}, -{64,-3,47}, -{64,-3,48}, -{64,-3,49}, -{64,-3,50}, -{64,-3,51}, -{64,-3,52}, -{64,-3,53}, -{64,-3,54}, -{64,-3,55}, -{64,-3,56}, -{64,-3,57}, -{64,-3,58}, -{64,-3,59}, -{64,-3,60}, -{64,-3,61}, -{64,-3,62}, -{64,-3,63}, -{64,-3,64}, -{64,-3,65}, -{64,-3,66}, -{64,-3,67}, -{64,-2,-55}, -{64,-2,-54}, -{64,-2,-53}, -{64,-2,-52}, -{64,-2,-51}, -{64,-2,-50}, -{64,-2,-49}, -{64,-2,-48}, -{64,-2,-47}, -{64,-2,-46}, -{64,-2,-45}, -{64,-2,-44}, -{64,-2,-43}, -{64,-2,-42}, -{64,-2,-41}, -{64,-2,-40}, -{64,-2,-39}, -{64,-2,-38}, -{64,-2,-37}, -{64,-2,-36}, -{64,-2,-35}, -{64,-2,-34}, -{64,-2,-33}, -{64,-2,-32}, -{64,-2,-31}, -{64,-2,-30}, -{64,-2,-29}, -{64,-2,-28}, -{64,-2,-27}, -{64,-2,-26}, -{64,-2,-25}, -{64,-2,-24}, -{64,-2,-23}, -{64,-2,-22}, -{64,-2,-21}, -{64,-2,-20}, -{64,-2,-19}, -{64,-2,-18}, -{64,-2,-17}, -{64,-2,-16}, -{64,-2,-15}, -{64,-2,-14}, -{64,-2,-13}, -{64,-2,-12}, -{64,-2,-11}, -{64,-2,-10}, -{64,-2,-9}, -{64,-2,-8}, -{64,-2,-7}, -{64,-2,-6}, -{64,-2,-5}, -{64,-2,-4}, -{64,-2,-3}, -{64,-2,-2}, -{64,-2,-1}, -{64,-2,0}, -{64,-2,1}, -{64,-2,2}, -{64,-2,3}, -{64,-2,4}, -{64,-2,5}, -{64,-2,6}, -{64,-2,7}, -{64,-2,8}, -{64,-2,9}, -{64,-2,10}, -{64,-2,11}, -{64,-2,12}, -{64,-2,13}, -{64,-2,14}, -{64,-2,15}, -{64,-2,16}, -{64,-2,17}, -{64,-2,18}, -{64,-2,19}, -{64,-2,20}, -{64,-2,21}, -{64,-2,22}, -{64,-2,23}, -{64,-2,24}, -{64,-2,25}, -{64,-2,26}, -{64,-2,27}, -{64,-2,28}, -{64,-2,29}, -{64,-2,30}, -{64,-2,31}, -{64,-2,32}, -{64,-2,33}, -{64,-2,34}, -{64,-2,35}, -{64,-2,36}, -{64,-2,37}, -{64,-2,38}, -{64,-2,39}, -{64,-2,40}, -{64,-2,41}, -{64,-2,42}, -{64,-2,43}, -{64,-2,44}, -{64,-2,45}, -{64,-2,46}, -{64,-2,47}, -{64,-2,48}, -{64,-2,49}, -{64,-2,50}, -{64,-2,51}, -{64,-2,52}, -{64,-2,53}, -{64,-2,54}, -{64,-2,55}, -{64,-2,56}, -{64,-2,57}, -{64,-2,58}, -{64,-2,59}, -{64,-2,60}, -{64,-2,61}, -{64,-2,62}, -{64,-2,63}, -{64,-2,64}, -{64,-2,65}, -{64,-2,66}, -{64,-2,67}, -{64,-1,-56}, -{64,-1,-55}, -{64,-1,-54}, -{64,-1,-53}, -{64,-1,-52}, -{64,-1,-51}, -{64,-1,-50}, -{64,-1,-49}, -{64,-1,-48}, -{64,-1,-47}, -{64,-1,-46}, -{64,-1,-45}, -{64,-1,-44}, -{64,-1,-43}, -{64,-1,-42}, -{64,-1,-41}, -{64,-1,-40}, -{64,-1,-39}, -{64,-1,-38}, -{64,-1,-37}, -{64,-1,-36}, -{64,-1,-35}, -{64,-1,-34}, -{64,-1,-33}, -{64,-1,-32}, -{64,-1,-31}, -{64,-1,-30}, -{64,-1,-29}, -{64,-1,-28}, -{64,-1,-27}, -{64,-1,-26}, -{64,-1,-25}, -{64,-1,-24}, -{64,-1,-23}, -{64,-1,-22}, -{64,-1,-21}, -{64,-1,-20}, -{64,-1,-19}, -{64,-1,-18}, -{64,-1,-17}, -{64,-1,-16}, -{64,-1,-15}, -{64,-1,-14}, -{64,-1,-13}, -{64,-1,-12}, -{64,-1,-11}, -{64,-1,-10}, -{64,-1,-9}, -{64,-1,-8}, -{64,-1,-7}, -{64,-1,-6}, -{64,-1,-5}, -{64,-1,-4}, -{64,-1,-3}, -{64,-1,-2}, -{64,-1,-1}, -{64,-1,0}, -{64,-1,1}, -{64,-1,2}, -{64,-1,3}, -{64,-1,4}, -{64,-1,5}, -{64,-1,6}, -{64,-1,7}, -{64,-1,8}, -{64,-1,9}, -{64,-1,10}, -{64,-1,11}, -{64,-1,12}, -{64,-1,13}, -{64,-1,14}, -{64,-1,15}, -{64,-1,16}, -{64,-1,17}, -{64,-1,18}, -{64,-1,19}, -{64,-1,20}, -{64,-1,21}, -{64,-1,22}, -{64,-1,23}, -{64,-1,24}, -{64,-1,25}, -{64,-1,26}, -{64,-1,27}, -{64,-1,28}, -{64,-1,29}, -{64,-1,30}, -{64,-1,31}, -{64,-1,32}, -{64,-1,33}, -{64,-1,34}, -{64,-1,35}, -{64,-1,36}, -{64,-1,37}, -{64,-1,38}, -{64,-1,39}, -{64,-1,40}, -{64,-1,41}, -{64,-1,42}, -{64,-1,43}, -{64,-1,44}, -{64,-1,45}, -{64,-1,46}, -{64,-1,47}, -{64,-1,48}, -{64,-1,49}, -{64,-1,50}, -{64,-1,51}, -{64,-1,52}, -{64,-1,53}, -{64,-1,54}, -{64,-1,55}, -{64,-1,56}, -{64,-1,57}, -{64,-1,58}, -{64,-1,59}, -{64,-1,60}, -{64,-1,61}, -{64,-1,62}, -{64,-1,63}, -{64,-1,64}, -{64,-1,65}, -{64,-1,66}, -{64,-1,67}, -{64,0,-56}, -{64,0,-55}, -{64,0,-54}, -{64,0,-53}, -{64,0,-52}, -{64,0,-51}, -{64,0,-50}, -{64,0,-49}, -{64,0,-48}, -{64,0,-47}, -{64,0,-46}, -{64,0,-45}, -{64,0,-44}, -{64,0,-43}, -{64,0,-42}, -{64,0,-41}, -{64,0,-40}, -{64,0,-39}, -{64,0,-38}, -{64,0,-37}, -{64,0,-36}, -{64,0,-35}, -{64,0,-34}, -{64,0,-33}, -{64,0,-32}, -{64,0,-31}, -{64,0,-30}, -{64,0,-29}, -{64,0,-28}, -{64,0,-27}, -{64,0,-26}, -{64,0,-25}, -{64,0,-24}, -{64,0,-23}, -{64,0,-22}, -{64,0,-21}, -{64,0,-20}, -{64,0,-19}, -{64,0,-18}, -{64,0,-17}, -{64,0,-16}, -{64,0,-15}, -{64,0,-14}, -{64,0,-13}, -{64,0,-12}, -{64,0,-11}, -{64,0,-10}, -{64,0,-9}, -{64,0,-8}, -{64,0,-7}, -{64,0,-6}, -{64,0,-5}, -{64,0,-4}, -{64,0,-3}, -{64,0,-2}, -{64,0,-1}, -{64,0,0}, -{64,0,1}, -{64,0,2}, -{64,0,3}, -{64,0,4}, -{64,0,5}, -{64,0,6}, -{64,0,7}, -{64,0,8}, -{64,0,9}, -{64,0,10}, -{64,0,11}, -{64,0,12}, -{64,0,13}, -{64,0,14}, -{64,0,15}, -{64,0,16}, -{64,0,17}, -{64,0,18}, -{64,0,19}, -{64,0,20}, -{64,0,21}, -{64,0,22}, -{64,0,23}, -{64,0,24}, -{64,0,25}, -{64,0,26}, -{64,0,27}, -{64,0,28}, -{64,0,29}, -{64,0,30}, -{64,0,31}, -{64,0,32}, -{64,0,33}, -{64,0,34}, -{64,0,35}, -{64,0,36}, -{64,0,37}, -{64,0,38}, -{64,0,39}, -{64,0,40}, -{64,0,41}, -{64,0,42}, -{64,0,43}, -{64,0,44}, -{64,0,45}, -{64,0,46}, -{64,0,47}, -{64,0,48}, -{64,0,49}, -{64,0,50}, -{64,0,51}, -{64,0,52}, -{64,0,53}, -{64,0,54}, -{64,0,55}, -{64,0,56}, -{64,0,57}, -{64,0,58}, -{64,0,59}, -{64,0,60}, -{64,0,61}, -{64,0,62}, -{64,0,63}, -{64,0,64}, -{64,0,65}, -{64,0,66}, -{64,0,67}, -{64,0,68}, -{64,1,-56}, -{64,1,-55}, -{64,1,-54}, -{64,1,-53}, -{64,1,-52}, -{64,1,-51}, -{64,1,-50}, -{64,1,-49}, -{64,1,-48}, -{64,1,-47}, -{64,1,-46}, -{64,1,-45}, -{64,1,-44}, -{64,1,-43}, -{64,1,-42}, -{64,1,-41}, -{64,1,-40}, -{64,1,-39}, -{64,1,-38}, -{64,1,-37}, -{64,1,-36}, -{64,1,-35}, -{64,1,-34}, -{64,1,-33}, -{64,1,-32}, -{64,1,-31}, -{64,1,-30}, -{64,1,-29}, -{64,1,-28}, -{64,1,-27}, -{64,1,-26}, -{64,1,-25}, -{64,1,-24}, -{64,1,-23}, -{64,1,-22}, -{64,1,-21}, -{64,1,-20}, -{64,1,-19}, -{64,1,-18}, -{64,1,-17}, -{64,1,-16}, -{64,1,-15}, -{64,1,-14}, -{64,1,-13}, -{64,1,-12}, -{64,1,-11}, -{64,1,-10}, -{64,1,-9}, -{64,1,-8}, -{64,1,-7}, -{64,1,-6}, -{64,1,-5}, -{64,1,-4}, -{64,1,-3}, -{64,1,-2}, -{64,1,-1}, -{64,1,0}, -{64,1,1}, -{64,1,2}, -{64,1,3}, -{64,1,4}, -{64,1,5}, -{64,1,6}, -{64,1,7}, -{64,1,8}, -{64,1,9}, -{64,1,10}, -{64,1,11}, -{64,1,12}, -{64,1,13}, -{64,1,14}, -{64,1,15}, -{64,1,16}, -{64,1,17}, -{64,1,18}, -{64,1,19}, -{64,1,20}, -{64,1,21}, -{64,1,22}, -{64,1,23}, -{64,1,24}, -{64,1,25}, -{64,1,26}, -{64,1,27}, -{64,1,28}, -{64,1,29}, -{64,1,30}, -{64,1,31}, -{64,1,32}, -{64,1,33}, -{64,1,34}, -{64,1,35}, -{64,1,36}, -{64,1,37}, -{64,1,38}, -{64,1,39}, -{64,1,40}, -{64,1,41}, -{64,1,42}, -{64,1,43}, -{64,1,44}, -{64,1,45}, -{64,1,46}, -{64,1,47}, -{64,1,48}, -{64,1,49}, -{64,1,50}, -{64,1,51}, -{64,1,52}, -{64,1,53}, -{64,1,54}, -{64,1,55}, -{64,1,56}, -{64,1,57}, -{64,1,58}, -{64,1,59}, -{64,1,60}, -{64,1,61}, -{64,1,62}, -{64,1,63}, -{64,1,64}, -{64,1,65}, -{64,1,66}, -{64,1,67}, -{64,1,68}, -{64,2,-56}, -{64,2,-55}, -{64,2,-54}, -{64,2,-53}, -{64,2,-52}, -{64,2,-51}, -{64,2,-50}, -{64,2,-49}, -{64,2,-48}, -{64,2,-47}, -{64,2,-46}, -{64,2,-45}, -{64,2,-44}, -{64,2,-43}, -{64,2,-42}, -{64,2,-41}, -{64,2,-40}, -{64,2,-39}, -{64,2,-38}, -{64,2,-37}, -{64,2,-36}, -{64,2,-35}, -{64,2,-34}, -{64,2,-33}, -{64,2,-32}, -{64,2,-31}, -{64,2,-30}, -{64,2,-29}, -{64,2,-28}, -{64,2,-27}, -{64,2,-26}, -{64,2,-25}, -{64,2,-24}, -{64,2,-23}, -{64,2,-22}, -{64,2,-21}, -{64,2,-20}, -{64,2,-19}, -{64,2,-18}, -{64,2,-17}, -{64,2,-16}, -{64,2,-15}, -{64,2,-14}, -{64,2,-13}, -{64,2,-12}, -{64,2,-11}, -{64,2,-10}, -{64,2,-9}, -{64,2,-8}, -{64,2,-7}, -{64,2,-6}, -{64,2,-5}, -{64,2,-4}, -{64,2,-3}, -{64,2,-2}, -{64,2,-1}, -{64,2,0}, -{64,2,1}, -{64,2,2}, -{64,2,3}, -{64,2,4}, -{64,2,5}, -{64,2,6}, -{64,2,7}, -{64,2,8}, -{64,2,9}, -{64,2,10}, -{64,2,11}, -{64,2,12}, -{64,2,13}, -{64,2,14}, -{64,2,15}, -{64,2,16}, -{64,2,17}, -{64,2,18}, -{64,2,19}, -{64,2,20}, -{64,2,21}, -{64,2,22}, -{64,2,23}, -{64,2,24}, -{64,2,25}, -{64,2,26}, -{64,2,27}, -{64,2,28}, -{64,2,29}, -{64,2,30}, -{64,2,31}, -{64,2,32}, -{64,2,33}, -{64,2,34}, -{64,2,35}, -{64,2,36}, -{64,2,37}, -{64,2,38}, -{64,2,39}, -{64,2,40}, -{64,2,41}, -{64,2,42}, -{64,2,43}, -{64,2,44}, -{64,2,45}, -{64,2,46}, -{64,2,47}, -{64,2,48}, -{64,2,49}, -{64,2,50}, -{64,2,51}, -{64,2,52}, -{64,2,53}, -{64,2,54}, -{64,2,55}, -{64,2,56}, -{64,2,57}, -{64,2,58}, -{64,2,59}, -{64,2,60}, -{64,2,61}, -{64,2,62}, -{64,2,63}, -{64,2,64}, -{64,2,65}, -{64,2,66}, -{64,2,67}, -{64,2,68}, -{64,3,-56}, -{64,3,-55}, -{64,3,-54}, -{64,3,-53}, -{64,3,-52}, -{64,3,-51}, -{64,3,-50}, -{64,3,-49}, -{64,3,-48}, -{64,3,-47}, -{64,3,-46}, -{64,3,-45}, -{64,3,-44}, -{64,3,-43}, -{64,3,-42}, -{64,3,-41}, -{64,3,-40}, -{64,3,-39}, -{64,3,-38}, -{64,3,-37}, -{64,3,-36}, -{64,3,-35}, -{64,3,-34}, -{64,3,-33}, -{64,3,-32}, -{64,3,-31}, -{64,3,-30}, -{64,3,-29}, -{64,3,-28}, -{64,3,-27}, -{64,3,-26}, -{64,3,-25}, -{64,3,-24}, -{64,3,-23}, -{64,3,-22}, -{64,3,-21}, -{64,3,-20}, -{64,3,-19}, -{64,3,-18}, -{64,3,-17}, -{64,3,-16}, -{64,3,-15}, -{64,3,-14}, -{64,3,-13}, -{64,3,-12}, -{64,3,-11}, -{64,3,-10}, -{64,3,-9}, -{64,3,-8}, -{64,3,-7}, -{64,3,-6}, -{64,3,-5}, -{64,3,-4}, -{64,3,-3}, -{64,3,-2}, -{64,3,-1}, -{64,3,0}, -{64,3,1}, -{64,3,2}, -{64,3,3}, -{64,3,4}, -{64,3,5}, -{64,3,6}, -{64,3,7}, -{64,3,8}, -{64,3,9}, -{64,3,10}, -{64,3,11}, -{64,3,12}, -{64,3,13}, -{64,3,14}, -{64,3,15}, -{64,3,16}, -{64,3,17}, -{64,3,18}, -{64,3,19}, -{64,3,20}, -{64,3,21}, -{64,3,22}, -{64,3,23}, -{64,3,24}, -{64,3,25}, -{64,3,26}, -{64,3,27}, -{64,3,28}, -{64,3,29}, -{64,3,30}, -{64,3,31}, -{64,3,32}, -{64,3,33}, -{64,3,34}, -{64,3,35}, -{64,3,36}, -{64,3,37}, -{64,3,38}, -{64,3,39}, -{64,3,40}, -{64,3,41}, -{64,3,42}, -{64,3,43}, -{64,3,44}, -{64,3,45}, -{64,3,46}, -{64,3,47}, -{64,3,48}, -{64,3,49}, -{64,3,50}, -{64,3,51}, -{64,3,52}, -{64,3,53}, -{64,3,54}, -{64,3,55}, -{64,3,56}, -{64,3,57}, -{64,3,58}, -{64,3,59}, -{64,3,60}, -{64,3,61}, -{64,3,62}, -{64,3,63}, -{64,3,64}, -{64,3,65}, -{64,3,66}, -{64,3,67}, -{64,3,68}, -{64,4,-56}, -{64,4,-55}, -{64,4,-54}, -{64,4,-53}, -{64,4,-52}, -{64,4,-51}, -{64,4,-50}, -{64,4,-49}, -{64,4,-48}, -{64,4,-47}, -{64,4,-46}, -{64,4,-45}, -{64,4,-44}, -{64,4,-43}, -{64,4,-42}, -{64,4,-41}, -{64,4,-40}, -{64,4,-39}, -{64,4,-38}, -{64,4,-37}, -{64,4,-36}, -{64,4,-35}, -{64,4,-34}, -{64,4,-33}, -{64,4,-32}, -{64,4,-31}, -{64,4,-30}, -{64,4,-29}, -{64,4,-28}, -{64,4,-27}, -{64,4,-26}, -{64,4,-25}, -{64,4,-24}, -{64,4,-23}, -{64,4,-22}, -{64,4,-21}, -{64,4,-20}, -{64,4,-19}, -{64,4,-18}, -{64,4,-17}, -{64,4,-16}, -{64,4,-15}, -{64,4,-14}, -{64,4,-13}, -{64,4,-12}, -{64,4,-11}, -{64,4,-10}, -{64,4,-9}, -{64,4,-8}, -{64,4,-7}, -{64,4,-6}, -{64,4,-5}, -{64,4,-4}, -{64,4,-3}, -{64,4,-2}, -{64,4,-1}, -{64,4,0}, -{64,4,1}, -{64,4,2}, -{64,4,3}, -{64,4,4}, -{64,4,5}, -{64,4,6}, -{64,4,7}, -{64,4,8}, -{64,4,9}, -{64,4,10}, -{64,4,11}, -{64,4,12}, -{64,4,13}, -{64,4,14}, -{64,4,15}, -{64,4,16}, -{64,4,17}, -{64,4,18}, -{64,4,19}, -{64,4,20}, -{64,4,21}, -{64,4,22}, -{64,4,23}, -{64,4,24}, -{64,4,25}, -{64,4,26}, -{64,4,27}, -{64,4,28}, -{64,4,29}, -{64,4,30}, -{64,4,31}, -{64,4,32}, -{64,4,33}, -{64,4,34}, -{64,4,35}, -{64,4,36}, -{64,4,37}, -{64,4,38}, -{64,4,39}, -{64,4,40}, -{64,4,41}, -{64,4,42}, -{64,4,43}, -{64,4,44}, -{64,4,45}, -{64,4,46}, -{64,4,47}, -{64,4,48}, -{64,4,49}, -{64,4,50}, -{64,4,51}, -{64,4,52}, -{64,4,53}, -{64,4,54}, -{64,4,55}, -{64,4,56}, -{64,4,57}, -{64,4,58}, -{64,4,59}, -{64,4,60}, -{64,4,61}, -{64,4,62}, -{64,4,63}, -{64,4,64}, -{64,4,65}, -{64,4,66}, -{64,4,67}, -{64,4,68}, -{64,5,-56}, -{64,5,-55}, -{64,5,-54}, -{64,5,-53}, -{64,5,-52}, -{64,5,-51}, -{64,5,-50}, -{64,5,-49}, -{64,5,-48}, -{64,5,-47}, -{64,5,-46}, -{64,5,-45}, -{64,5,-44}, -{64,5,-43}, -{64,5,-42}, -{64,5,-41}, -{64,5,-40}, -{64,5,-39}, -{64,5,-38}, -{64,5,-37}, -{64,5,-36}, -{64,5,-35}, -{64,5,-34}, -{64,5,-33}, -{64,5,-32}, -{64,5,-31}, -{64,5,-30}, -{64,5,-29}, -{64,5,-28}, -{64,5,-27}, -{64,5,-26}, -{64,5,-25}, -{64,5,-24}, -{64,5,-23}, -{64,5,-22}, -{64,5,-21}, -{64,5,-20}, -{64,5,-19}, -{64,5,-18}, -{64,5,-17}, -{64,5,-16}, -{64,5,-15}, -{64,5,-14}, -{64,5,-13}, -{64,5,-12}, -{64,5,-11}, -{64,5,-10}, -{64,5,-9}, -{64,5,-8}, -{64,5,-7}, -{64,5,-6}, -{64,5,-5}, -{64,5,-4}, -{64,5,-3}, -{64,5,-2}, -{64,5,-1}, -{64,5,0}, -{64,5,1}, -{64,5,2}, -{64,5,3}, -{64,5,4}, -{64,5,5}, -{64,5,6}, -{64,5,7}, -{64,5,8}, -{64,5,9}, -{64,5,10}, -{64,5,11}, -{64,5,12}, -{64,5,13}, -{64,5,14}, -{64,5,15}, -{64,5,16}, -{64,5,17}, -{64,5,18}, -{64,5,19}, -{64,5,20}, -{64,5,21}, -{64,5,22}, -{64,5,23}, -{64,5,24}, -{64,5,25}, -{64,5,26}, -{64,5,27}, -{64,5,28}, -{64,5,29}, -{64,5,30}, -{64,5,31}, -{64,5,32}, -{64,5,33}, -{64,5,34}, -{64,5,35}, -{64,5,36}, -{64,5,37}, -{64,5,38}, -{64,5,39}, -{64,5,40}, -{64,5,41}, -{64,5,42}, -{64,5,43}, -{64,5,44}, -{64,5,45}, -{64,5,46}, -{64,5,47}, -{64,5,48}, -{64,5,49}, -{64,5,50}, -{64,5,51}, -{64,5,52}, -{64,5,53}, -{64,5,54}, -{64,5,55}, -{64,5,56}, -{64,5,57}, -{64,5,58}, -{64,5,59}, -{64,5,60}, -{64,5,61}, -{64,5,62}, -{64,5,63}, -{64,5,64}, -{64,5,65}, -{64,5,66}, -{64,5,67}, -{64,5,68}, -{64,6,-56}, -{64,6,-55}, -{64,6,-54}, -{64,6,-53}, -{64,6,-52}, -{64,6,-51}, -{64,6,-50}, -{64,6,-49}, -{64,6,-48}, -{64,6,-47}, -{64,6,-46}, -{64,6,-45}, -{64,6,-44}, -{64,6,-43}, -{64,6,-42}, -{64,6,-41}, -{64,6,-40}, -{64,6,-39}, -{64,6,-38}, -{64,6,-37}, -{64,6,-36}, -{64,6,-35}, -{64,6,-34}, -{64,6,-33}, -{64,6,-32}, -{64,6,-31}, -{64,6,-30}, -{64,6,-29}, -{64,6,-28}, -{64,6,-27}, -{64,6,-26}, -{64,6,-25}, -{64,6,-24}, -{64,6,-23}, -{64,6,-22}, -{64,6,-21}, -{64,6,-20}, -{64,6,-19}, -{64,6,-18}, -{64,6,-17}, -{64,6,-16}, -{64,6,-15}, -{64,6,-14}, -{64,6,-13}, -{64,6,-12}, -{64,6,-11}, -{64,6,-10}, -{64,6,-9}, -{64,6,-8}, -{64,6,-7}, -{64,6,-6}, -{64,6,-5}, -{64,6,-4}, -{64,6,-3}, -{64,6,-2}, -{64,6,-1}, -{64,6,0}, -{64,6,1}, -{64,6,2}, -{64,6,3}, -{64,6,4}, -{64,6,5}, -{64,6,6}, -{64,6,7}, -{64,6,8}, -{64,6,9}, -{64,6,10}, -{64,6,11}, -{64,6,12}, -{64,6,13}, -{64,6,14}, -{64,6,15}, -{64,6,16}, -{64,6,17}, -{64,6,18}, -{64,6,19}, -{64,6,20}, -{64,6,21}, -{64,6,22}, -{64,6,23}, -{64,6,24}, -{64,6,25}, -{64,6,26}, -{64,6,27}, -{64,6,28}, -{64,6,29}, -{64,6,30}, -{64,6,31}, -{64,6,32}, -{64,6,33}, -{64,6,34}, -{64,6,35}, -{64,6,36}, -{64,6,37}, -{64,6,38}, -{64,6,39}, -{64,6,40}, -{64,6,41}, -{64,6,42}, -{64,6,43}, -{64,6,44}, -{64,6,45}, -{64,6,46}, -{64,6,47}, -{64,6,48}, -{64,6,49}, -{64,6,50}, -{64,6,51}, -{64,6,52}, -{64,6,53}, -{64,6,54}, -{64,6,55}, -{64,6,56}, -{64,6,57}, -{64,6,58}, -{64,6,59}, -{64,6,60}, -{64,6,61}, -{64,6,62}, -{64,6,63}, -{64,6,64}, -{64,6,65}, -{64,6,66}, -{64,6,67}, -{64,6,68}, -{64,7,-56}, -{64,7,-55}, -{64,7,-54}, -{64,7,-53}, -{64,7,-52}, -{64,7,-51}, -{64,7,-50}, -{64,7,-49}, -{64,7,-48}, -{64,7,-47}, -{64,7,-46}, -{64,7,-45}, -{64,7,-44}, -{64,7,-43}, -{64,7,-42}, -{64,7,-41}, -{64,7,-40}, -{64,7,-39}, -{64,7,-38}, -{64,7,-37}, -{64,7,-36}, -{64,7,-35}, -{64,7,-34}, -{64,7,-33}, -{64,7,-32}, -{64,7,-31}, -{64,7,-30}, -{64,7,-29}, -{64,7,-28}, -{64,7,-27}, -{64,7,-26}, -{64,7,-25}, -{64,7,-24}, -{64,7,-23}, -{64,7,-22}, -{64,7,-21}, -{64,7,-20}, -{64,7,-19}, -{64,7,-18}, -{64,7,-17}, -{64,7,-16}, -{64,7,-15}, -{64,7,-14}, -{64,7,-13}, -{64,7,-12}, -{64,7,-11}, -{64,7,-10}, -{64,7,-9}, -{64,7,-8}, -{64,7,-7}, -{64,7,-6}, -{64,7,-5}, -{64,7,-4}, -{64,7,-3}, -{64,7,-2}, -{64,7,-1}, -{64,7,0}, -{64,7,1}, -{64,7,2}, -{64,7,3}, -{64,7,4}, -{64,7,5}, -{64,7,6}, -{64,7,7}, -{64,7,8}, -{64,7,9}, -{64,7,10}, -{64,7,11}, -{64,7,12}, -{64,7,13}, -{64,7,14}, -{64,7,15}, -{64,7,16}, -{64,7,17}, -{64,7,18}, -{64,7,19}, -{64,7,20}, -{64,7,21}, -{64,7,22}, -{64,7,23}, -{64,7,24}, -{64,7,25}, -{64,7,26}, -{64,7,27}, -{64,7,28}, -{64,7,29}, -{64,7,30}, -{64,7,31}, -{64,7,32}, -{64,7,33}, -{64,7,34}, -{64,7,35}, -{64,7,36}, -{64,7,37}, -{64,7,38}, -{64,7,39}, -{64,7,40}, -{64,7,41}, -{64,7,42}, -{64,7,43}, -{64,7,44}, -{64,7,45}, -{64,7,46}, -{64,7,47}, -{64,7,48}, -{64,7,49}, -{64,7,50}, -{64,7,51}, -{64,7,52}, -{64,7,53}, -{64,7,54}, -{64,7,55}, -{64,7,56}, -{64,7,57}, -{64,7,58}, -{64,7,59}, -{64,7,60}, -{64,7,61}, -{64,7,62}, -{64,7,63}, -{64,7,64}, -{64,7,65}, -{64,7,66}, -{64,7,67}, -{64,7,68}, -{64,8,-56}, -{64,8,-55}, -{64,8,-54}, -{64,8,-53}, -{64,8,-52}, -{64,8,-51}, -{64,8,-50}, -{64,8,-49}, -{64,8,-48}, -{64,8,-47}, -{64,8,-46}, -{64,8,-45}, -{64,8,-44}, -{64,8,-43}, -{64,8,-42}, -{64,8,-41}, -{64,8,-40}, -{64,8,-39}, -{64,8,-38}, -{64,8,-37}, -{64,8,-36}, -{64,8,-35}, -{64,8,-34}, -{64,8,-33}, -{64,8,-32}, -{64,8,-31}, -{64,8,-30}, -{64,8,-29}, -{64,8,-28}, -{64,8,-27}, -{64,8,-26}, -{64,8,-25}, -{64,8,-24}, -{64,8,-23}, -{64,8,-22}, -{64,8,-21}, -{64,8,-20}, -{64,8,-19}, -{64,8,-18}, -{64,8,-17}, -{64,8,-16}, -{64,8,-15}, -{64,8,-14}, -{64,8,-13}, -{64,8,-12}, -{64,8,-11}, -{64,8,-10}, -{64,8,-9}, -{64,8,-8}, -{64,8,-7}, -{64,8,-6}, -{64,8,-5}, -{64,8,-4}, -{64,8,-3}, -{64,8,-2}, -{64,8,-1}, -{64,8,0}, -{64,8,1}, -{64,8,2}, -{64,8,3}, -{64,8,4}, -{64,8,5}, -{64,8,6}, -{64,8,7}, -{64,8,8}, -{64,8,9}, -{64,8,10}, -{64,8,11}, -{64,8,12}, -{64,8,13}, -{64,8,14}, -{64,8,15}, -{64,8,16}, -{64,8,17}, -{64,8,18}, -{64,8,19}, -{64,8,20}, -{64,8,21}, -{64,8,22}, -{64,8,23}, -{64,8,24}, -{64,8,25}, -{64,8,26}, -{64,8,27}, -{64,8,28}, -{64,8,29}, -{64,8,30}, -{64,8,31}, -{64,8,32}, -{64,8,33}, -{64,8,34}, -{64,8,35}, -{64,8,36}, -{64,8,37}, -{64,8,38}, -{64,8,39}, -{64,8,40}, -{64,8,41}, -{64,8,42}, -{64,8,43}, -{64,8,44}, -{64,8,45}, -{64,8,46}, -{64,8,47}, -{64,8,48}, -{64,8,49}, -{64,8,50}, -{64,8,51}, -{64,8,52}, -{64,8,53}, -{64,8,54}, -{64,8,55}, -{64,8,56}, -{64,8,57}, -{64,8,58}, -{64,8,59}, -{64,8,60}, -{64,8,61}, -{64,8,62}, -{64,8,63}, -{64,8,64}, -{64,8,65}, -{64,8,66}, -{64,8,67}, -{64,8,68}, -{64,9,-56}, -{64,9,-55}, -{64,9,-54}, -{64,9,-53}, -{64,9,-52}, -{64,9,-51}, -{64,9,-50}, -{64,9,-49}, -{64,9,-48}, -{64,9,-47}, -{64,9,-46}, -{64,9,-45}, -{64,9,-44}, -{64,9,-43}, -{64,9,-42}, -{64,9,-41}, -{64,9,-40}, -{64,9,-39}, -{64,9,-38}, -{64,9,-37}, -{64,9,-36}, -{64,9,-35}, -{64,9,-34}, -{64,9,-33}, -{64,9,-32}, -{64,9,-31}, -{64,9,-30}, -{64,9,-29}, -{64,9,-28}, -{64,9,-27}, -{64,9,-26}, -{64,9,-25}, -{64,9,-24}, -{64,9,-23}, -{64,9,-22}, -{64,9,-21}, -{64,9,-20}, -{64,9,-19}, -{64,9,-18}, -{64,9,-17}, -{64,9,-16}, -{64,9,-15}, -{64,9,-14}, -{64,9,-13}, -{64,9,-12}, -{64,9,-11}, -{64,9,-10}, -{64,9,-9}, -{64,9,-8}, -{64,9,-7}, -{64,9,-6}, -{64,9,-5}, -{64,9,-4}, -{64,9,-3}, -{64,9,-2}, -{64,9,-1}, -{64,9,0}, -{64,9,1}, -{64,9,2}, -{64,9,3}, -{64,9,4}, -{64,9,5}, -{64,9,6}, -{64,9,7}, -{64,9,8}, -{64,9,9}, -{64,9,10}, -{64,9,11}, -{64,9,12}, -{64,9,13}, -{64,9,14}, -{64,9,15}, -{64,9,16}, -{64,9,17}, -{64,9,18}, -{64,9,19}, -{64,9,20}, -{64,9,21}, -{64,9,22}, -{64,9,23}, -{64,9,24}, -{64,9,25}, -{64,9,26}, -{64,9,27}, -{64,9,28}, -{64,9,29}, -{64,9,30}, -{64,9,31}, -{64,9,32}, -{64,9,33}, -{64,9,34}, -{64,9,35}, -{64,9,36}, -{64,9,37}, -{64,9,38}, -{64,9,39}, -{64,9,40}, -{64,9,41}, -{64,9,42}, -{64,9,43}, -{64,9,44}, -{64,9,45}, -{64,9,46}, -{64,9,47}, -{64,9,48}, -{64,9,49}, -{64,9,50}, -{64,9,51}, -{64,9,52}, -{64,9,53}, -{64,9,54}, -{64,9,55}, -{64,9,56}, -{64,9,57}, -{64,9,58}, -{64,9,59}, -{64,9,60}, -{64,9,61}, -{64,9,62}, -{64,9,63}, -{64,9,64}, -{64,9,65}, -{64,9,66}, -{64,9,67}, -{64,9,68}, -{64,10,-56}, -{64,10,-55}, -{64,10,-54}, -{64,10,-53}, -{64,10,-52}, -{64,10,-51}, -{64,10,-50}, -{64,10,-49}, -{64,10,-48}, -{64,10,-47}, -{64,10,-46}, -{64,10,-45}, -{64,10,-44}, -{64,10,-43}, -{64,10,-42}, -{64,10,-41}, -{64,10,-40}, -{64,10,-39}, -{64,10,-38}, -{64,10,-37}, -{64,10,-36}, -{64,10,-35}, -{64,10,-34}, -{64,10,-33}, -{64,10,-32}, -{64,10,-31}, -{64,10,-30}, -{64,10,-29}, -{64,10,-28}, -{64,10,-27}, -{64,10,-26}, -{64,10,-25}, -{64,10,-24}, -{64,10,-23}, -{64,10,-22}, -{64,10,-21}, -{64,10,-20}, -{64,10,-19}, -{64,10,-18}, -{64,10,-17}, -{64,10,-16}, -{64,10,-15}, -{64,10,-14}, -{64,10,-13}, -{64,10,-12}, -{64,10,-11}, -{64,10,-10}, -{64,10,-9}, -{64,10,-8}, -{64,10,-7}, -{64,10,-6}, -{64,10,-5}, -{64,10,-4}, -{64,10,-3}, -{64,10,-2}, -{64,10,-1}, -{64,10,0}, -{64,10,1}, -{64,10,2}, -{64,10,3}, -{64,10,4}, -{64,10,5}, -{64,10,6}, -{64,10,7}, -{64,10,8}, -{64,10,9}, -{64,10,10}, -{64,10,11}, -{64,10,12}, -{64,10,13}, -{64,10,14}, -{64,10,15}, -{64,10,16}, -{64,10,17}, -{64,10,18}, -{64,10,19}, -{64,10,20}, -{64,10,21}, -{64,10,22}, -{64,10,23}, -{64,10,24}, -{64,10,25}, -{64,10,26}, -{64,10,27}, -{64,10,28}, -{64,10,29}, -{64,10,30}, -{64,10,31}, -{64,10,32}, -{64,10,33}, -{64,10,34}, -{64,10,35}, -{64,10,36}, -{64,10,37}, -{64,10,38}, -{64,10,39}, -{64,10,40}, -{64,10,41}, -{64,10,42}, -{64,10,43}, -{64,10,44}, -{64,10,45}, -{64,10,46}, -{64,10,47}, -{64,10,48}, -{64,10,49}, -{64,10,50}, -{64,10,51}, -{64,10,52}, -{64,10,53}, -{64,10,54}, -{64,10,55}, -{64,10,56}, -{64,10,57}, -{64,10,58}, -{64,10,59}, -{64,10,60}, -{64,10,61}, -{64,10,62}, -{64,10,63}, -{64,10,64}, -{64,10,65}, -{64,10,66}, -{64,10,67}, -{64,10,68}, -{64,11,-56}, -{64,11,-55}, -{64,11,-54}, -{64,11,-53}, -{64,11,-52}, -{64,11,-51}, -{64,11,-50}, -{64,11,-49}, -{64,11,-48}, -{64,11,-47}, -{64,11,-46}, -{64,11,-45}, -{64,11,-44}, -{64,11,-43}, -{64,11,-42}, -{64,11,-41}, -{64,11,-40}, -{64,11,-39}, -{64,11,-38}, -{64,11,-37}, -{64,11,-36}, -{64,11,-35}, -{64,11,-34}, -{64,11,-33}, -{64,11,-32}, -{64,11,-31}, -{64,11,-30}, -{64,11,-29}, -{64,11,-28}, -{64,11,-27}, -{64,11,-26}, -{64,11,-25}, -{64,11,-24}, -{64,11,-23}, -{64,11,-22}, -{64,11,-21}, -{64,11,-20}, -{64,11,-19}, -{64,11,-18}, -{64,11,-17}, -{64,11,-16}, -{64,11,-15}, -{64,11,-14}, -{64,11,-13}, -{64,11,-12}, -{64,11,-11}, -{64,11,-10}, -{64,11,-9}, -{64,11,-8}, -{64,11,-7}, -{64,11,-6}, -{64,11,-5}, -{64,11,-4}, -{64,11,-3}, -{64,11,-2}, -{64,11,-1}, -{64,11,0}, -{64,11,1}, -{64,11,2}, -{64,11,3}, -{64,11,4}, -{64,11,5}, -{64,11,6}, -{64,11,7}, -{64,11,8}, -{64,11,9}, -{64,11,10}, -{64,11,11}, -{64,11,12}, -{64,11,13}, -{64,11,14}, -{64,11,15}, -{64,11,16}, -{64,11,17}, -{64,11,18}, -{64,11,19}, -{64,11,20}, -{64,11,21}, -{64,11,22}, -{64,11,23}, -{64,11,24}, -{64,11,25}, -{64,11,26}, -{64,11,27}, -{64,11,28}, -{64,11,29}, -{64,11,30}, -{64,11,31}, -{64,11,32}, -{64,11,33}, -{64,11,34}, -{64,11,35}, -{64,11,36}, -{64,11,37}, -{64,11,38}, -{64,11,39}, -{64,11,40}, -{64,11,41}, -{64,11,42}, -{64,11,43}, -{64,11,44}, -{64,11,45}, -{64,11,46}, -{64,11,47}, -{64,11,48}, -{64,11,49}, -{64,11,50}, -{64,11,51}, -{64,11,52}, -{64,11,53}, -{64,11,54}, -{64,11,55}, -{64,11,56}, -{64,11,57}, -{64,11,58}, -{64,11,59}, -{64,11,60}, -{64,11,61}, -{64,11,62}, -{64,11,63}, -{64,11,64}, -{64,11,65}, -{64,11,66}, -{64,11,67}, -{64,11,68}, -{64,12,-56}, -{64,12,-55}, -{64,12,-54}, -{64,12,-53}, -{64,12,-52}, -{64,12,-51}, -{64,12,-50}, -{64,12,-49}, -{64,12,-48}, -{64,12,-47}, -{64,12,-46}, -{64,12,-45}, -{64,12,-44}, -{64,12,-43}, -{64,12,-42}, -{64,12,-41}, -{64,12,-40}, -{64,12,-39}, -{64,12,-38}, -{64,12,-37}, -{64,12,-36}, -{64,12,-35}, -{64,12,-34}, -{64,12,-33}, -{64,12,-32}, -{64,12,-31}, -{64,12,-30}, -{64,12,-29}, -{64,12,-28}, -{64,12,-27}, -{64,12,-26}, -{64,12,-25}, -{64,12,-24}, -{64,12,-23}, -{64,12,-22}, -{64,12,-21}, -{64,12,-20}, -{64,12,-19}, -{64,12,-18}, -{64,12,-17}, -{64,12,-16}, -{64,12,-15}, -{64,12,-14}, -{64,12,-13}, -{64,12,-12}, -{64,12,-11}, -{64,12,-10}, -{64,12,-9}, -{64,12,-8}, -{64,12,-7}, -{64,12,-6}, -{64,12,-5}, -{64,12,-4}, -{64,12,-3}, -{64,12,-2}, -{64,12,-1}, -{64,12,0}, -{64,12,1}, -{64,12,2}, -{64,12,3}, -{64,12,4}, -{64,12,5}, -{64,12,6}, -{64,12,7}, -{64,12,8}, -{64,12,9}, -{64,12,10}, -{64,12,11}, -{64,12,12}, -{64,12,13}, -{64,12,14}, -{64,12,15}, -{64,12,16}, -{64,12,17}, -{64,12,18}, -{64,12,19}, -{64,12,20}, -{64,12,21}, -{64,12,22}, -{64,12,23}, -{64,12,24}, -{64,12,25}, -{64,12,26}, -{64,12,27}, -{64,12,28}, -{64,12,29}, -{64,12,30}, -{64,12,31}, -{64,12,32}, -{64,12,33}, -{64,12,34}, -{64,12,35}, -{64,12,36}, -{64,12,37}, -{64,12,38}, -{64,12,39}, -{64,12,40}, -{64,12,41}, -{64,12,42}, -{64,12,43}, -{64,12,44}, -{64,12,45}, -{64,12,46}, -{64,12,47}, -{64,12,48}, -{64,12,49}, -{64,12,50}, -{64,12,51}, -{64,12,52}, -{64,12,53}, -{64,12,54}, -{64,12,55}, -{64,12,56}, -{64,12,57}, -{64,12,58}, -{64,12,59}, -{64,12,60}, -{64,12,61}, -{64,12,62}, -{64,12,63}, -{64,12,64}, -{64,12,65}, -{64,12,66}, -{64,12,67}, -{64,12,68}, -{64,13,-56}, -{64,13,-55}, -{64,13,-54}, -{64,13,-53}, -{64,13,-52}, -{64,13,-51}, -{64,13,-50}, -{64,13,-49}, -{64,13,-48}, -{64,13,-47}, -{64,13,-46}, -{64,13,-45}, -{64,13,-44}, -{64,13,-43}, -{64,13,-42}, -{64,13,-41}, -{64,13,-40}, -{64,13,-39}, -{64,13,-38}, -{64,13,-37}, -{64,13,-36}, -{64,13,-35}, -{64,13,-34}, -{64,13,-33}, -{64,13,-32}, -{64,13,-31}, -{64,13,-30}, -{64,13,-29}, -{64,13,-28}, -{64,13,-27}, -{64,13,-26}, -{64,13,-25}, -{64,13,-24}, -{64,13,-23}, -{64,13,-22}, -{64,13,-21}, -{64,13,-20}, -{64,13,-19}, -{64,13,-18}, -{64,13,-17}, -{64,13,-16}, -{64,13,-15}, -{64,13,-14}, -{64,13,-13}, -{64,13,-12}, -{64,13,-11}, -{64,13,-10}, -{64,13,-9}, -{64,13,-8}, -{64,13,-7}, -{64,13,-6}, -{64,13,-5}, -{64,13,-4}, -{64,13,-3}, -{64,13,-2}, -{64,13,-1}, -{64,13,0}, -{64,13,1}, -{64,13,2}, -{64,13,3}, -{64,13,4}, -{64,13,5}, -{64,13,6}, -{64,13,7}, -{64,13,8}, -{64,13,9}, -{64,13,10}, -{64,13,11}, -{64,13,12}, -{64,13,13}, -{64,13,14}, -{64,13,15}, -{64,13,16}, -{64,13,17}, -{64,13,18}, -{64,13,19}, -{64,13,20}, -{64,13,21}, -{64,13,22}, -{64,13,23}, -{64,13,24}, -{64,13,25}, -{64,13,26}, -{64,13,27}, -{64,13,28}, -{64,13,29}, -{64,13,30}, -{64,13,31}, -{64,13,32}, -{64,13,33}, -{64,13,34}, -{64,13,35}, -{64,13,36}, -{64,13,37}, -{64,13,38}, -{64,13,39}, -{64,13,40}, -{64,13,41}, -{64,13,42}, -{64,13,43}, -{64,13,44}, -{64,13,45}, -{64,13,46}, -{64,13,47}, -{64,13,48}, -{64,13,49}, -{64,13,50}, -{64,13,51}, -{64,13,52}, -{64,13,53}, -{64,13,54}, -{64,13,55}, -{64,13,56}, -{64,13,57}, -{64,13,58}, -{64,13,59}, -{64,13,60}, -{64,13,61}, -{64,13,62}, -{64,13,63}, -{64,13,64}, -{64,13,65}, -{64,13,66}, -{64,13,67}, -{64,13,68}, -{64,14,-56}, -{64,14,-55}, -{64,14,-54}, -{64,14,-53}, -{64,14,-52}, -{64,14,-51}, -{64,14,-50}, -{64,14,-49}, -{64,14,-48}, -{64,14,-47}, -{64,14,-46}, -{64,14,-45}, -{64,14,-44}, -{64,14,-43}, -{64,14,-42}, -{64,14,-41}, -{64,14,-40}, -{64,14,-39}, -{64,14,-38}, -{64,14,-37}, -{64,14,-36}, -{64,14,-35}, -{64,14,-34}, -{64,14,-33}, -{64,14,-32}, -{64,14,-31}, -{64,14,-30}, -{64,14,-29}, -{64,14,-28}, -{64,14,-27}, -{64,14,-26}, -{64,14,-25}, -{64,14,-24}, -{64,14,-23}, -{64,14,-22}, -{64,14,-21}, -{64,14,-20}, -{64,14,-19}, -{64,14,-18}, -{64,14,-17}, -{64,14,-16}, -{64,14,-15}, -{64,14,-14}, -{64,14,-13}, -{64,14,-12}, -{64,14,-11}, -{64,14,-10}, -{64,14,-9}, -{64,14,-8}, -{64,14,-7}, -{64,14,-6}, -{64,14,-5}, -{64,14,-4}, -{64,14,-3}, -{64,14,-2}, -{64,14,-1}, -{64,14,0}, -{64,14,1}, -{64,14,2}, -{64,14,3}, -{64,14,4}, -{64,14,5}, -{64,14,6}, -{64,14,7}, -{64,14,8}, -{64,14,9}, -{64,14,10}, -{64,14,11}, -{64,14,12}, -{64,14,13}, -{64,14,14}, -{64,14,15}, -{64,14,16}, -{64,14,17}, -{64,14,18}, -{64,14,19}, -{64,14,20}, -{64,14,21}, -{64,14,22}, -{64,14,23}, -{64,14,24}, -{64,14,25}, -{64,14,26}, -{64,14,27}, -{64,14,28}, -{64,14,29}, -{64,14,30}, -{64,14,31}, -{64,14,32}, -{64,14,33}, -{64,14,34}, -{64,14,35}, -{64,14,36}, -{64,14,37}, -{64,14,38}, -{64,14,39}, -{64,14,40}, -{64,14,41}, -{64,14,42}, -{64,14,43}, -{64,14,44}, -{64,14,45}, -{64,14,46}, -{64,14,47}, -{64,14,48}, -{64,14,49}, -{64,14,50}, -{64,14,51}, -{64,14,52}, -{64,14,53}, -{64,14,54}, -{64,14,55}, -{64,14,56}, -{64,14,57}, -{64,14,58}, -{64,14,59}, -{64,14,60}, -{64,14,61}, -{64,14,62}, -{64,14,63}, -{64,14,64}, -{64,14,65}, -{64,14,66}, -{64,14,67}, -{64,14,68}, -{64,14,69}, -{64,15,-56}, -{64,15,-55}, -{64,15,-54}, -{64,15,-53}, -{64,15,-52}, -{64,15,-51}, -{64,15,-50}, -{64,15,-49}, -{64,15,-48}, -{64,15,-47}, -{64,15,-46}, -{64,15,-45}, -{64,15,-44}, -{64,15,-43}, -{64,15,-42}, -{64,15,-41}, -{64,15,-40}, -{64,15,-39}, -{64,15,-38}, -{64,15,-37}, -{64,15,-36}, -{64,15,-35}, -{64,15,-34}, -{64,15,-33}, -{64,15,-32}, -{64,15,-31}, -{64,15,-30}, -{64,15,-29}, -{64,15,-28}, -{64,15,-27}, -{64,15,-26}, -{64,15,-25}, -{64,15,-24}, -{64,15,-23}, -{64,15,-22}, -{64,15,-21}, -{64,15,-20}, -{64,15,-19}, -{64,15,-18}, -{64,15,-17}, -{64,15,-16}, -{64,15,-15}, -{64,15,-14}, -{64,15,-13}, -{64,15,-12}, -{64,15,-11}, -{64,15,-10}, -{64,15,-9}, -{64,15,-8}, -{64,15,-7}, -{64,15,-6}, -{64,15,-5}, -{64,15,-4}, -{64,15,-3}, -{64,15,-2}, -{64,15,-1}, -{64,15,0}, -{64,15,1}, -{64,15,2}, -{64,15,3}, -{64,15,4}, -{64,15,5}, -{64,15,6}, -{64,15,7}, -{64,15,8}, -{64,15,9}, -{64,15,10}, -{64,15,11}, -{64,15,12}, -{64,15,13}, -{64,15,14}, -{64,15,15}, -{64,15,16}, -{64,15,17}, -{64,15,18}, -{64,15,19}, -{64,15,20}, -{64,15,21}, -{64,15,22}, -{64,15,23}, -{64,15,24}, -{64,15,25}, -{64,15,26}, -{64,15,27}, -{64,15,28}, -{64,15,29}, -{64,15,30}, -{64,15,31}, -{64,15,32}, -{64,15,33}, -{64,15,34}, -{64,15,35}, -{64,15,36}, -{64,15,37}, -{64,15,38}, -{64,15,39}, -{64,15,40}, -{64,15,41}, -{64,15,42}, -{64,15,43}, -{64,15,44}, -{64,15,45}, -{64,15,46}, -{64,15,47}, -{64,15,48}, -{64,15,49}, -{64,15,50}, -{64,15,51}, -{64,15,52}, -{64,15,53}, -{64,15,54}, -{64,15,55}, -{64,15,56}, -{64,15,57}, -{64,15,58}, -{64,15,59}, -{64,15,60}, -{64,15,61}, -{64,15,62}, -{64,15,63}, -{64,15,64}, -{64,15,65}, -{64,15,66}, -{64,15,67}, -{64,15,68}, -{64,15,69}, -{64,16,-55}, -{64,16,-54}, -{64,16,-53}, -{64,16,-52}, -{64,16,-51}, -{64,16,-50}, -{64,16,-49}, -{64,16,-48}, -{64,16,-47}, -{64,16,-46}, -{64,16,-45}, -{64,16,-44}, -{64,16,-43}, -{64,16,-42}, -{64,16,-41}, -{64,16,-40}, -{64,16,-39}, -{64,16,-38}, -{64,16,-37}, -{64,16,-36}, -{64,16,-35}, -{64,16,-34}, -{64,16,-33}, -{64,16,-32}, -{64,16,-31}, -{64,16,-30}, -{64,16,-29}, -{64,16,-28}, -{64,16,-27}, -{64,16,-26}, -{64,16,-25}, -{64,16,-24}, -{64,16,-23}, -{64,16,-22}, -{64,16,-21}, -{64,16,-20}, -{64,16,-19}, -{64,16,-18}, -{64,16,-17}, -{64,16,-16}, -{64,16,-15}, -{64,16,-14}, -{64,16,-13}, -{64,16,-12}, -{64,16,-11}, -{64,16,-10}, -{64,16,-9}, -{64,16,-8}, -{64,16,-7}, -{64,16,-6}, -{64,16,-5}, -{64,16,-4}, -{64,16,-3}, -{64,16,-2}, -{64,16,-1}, -{64,16,0}, -{64,16,1}, -{64,16,2}, -{64,16,3}, -{64,16,4}, -{64,16,5}, -{64,16,6}, -{64,16,7}, -{64,16,8}, -{64,16,9}, -{64,16,10}, -{64,16,11}, -{64,16,12}, -{64,16,13}, -{64,16,14}, -{64,16,15}, -{64,16,16}, -{64,16,17}, -{64,16,18}, -{64,16,19}, -{64,16,20}, -{64,16,21}, -{64,16,22}, -{64,16,23}, -{64,16,24}, -{64,16,25}, -{64,16,26}, -{64,16,27}, -{64,16,28}, -{64,16,29}, -{64,16,30}, -{64,16,31}, -{64,16,32}, -{64,16,33}, -{64,16,34}, -{64,16,35}, -{64,16,36}, -{64,16,37}, -{64,16,38}, -{64,16,39}, -{64,16,40}, -{64,16,41}, -{64,16,42}, -{64,16,43}, -{64,16,44}, -{64,16,45}, -{64,16,46}, -{64,16,47}, -{64,16,48}, -{64,16,49}, -{64,16,50}, -{64,16,51}, -{64,16,52}, -{64,16,53}, -{64,16,54}, -{64,16,55}, -{64,16,56}, -{64,16,57}, -{64,16,58}, -{64,16,59}, -{64,16,60}, -{64,16,61}, -{64,16,62}, -{64,16,63}, -{64,16,64}, -{64,16,65}, -{64,16,66}, -{64,16,67}, -{64,16,68}, -{64,16,69}, -{64,17,-55}, -{64,17,-54}, -{64,17,-53}, -{64,17,-52}, -{64,17,-51}, -{64,17,-50}, -{64,17,-49}, -{64,17,-48}, -{64,17,-47}, -{64,17,-46}, -{64,17,-45}, -{64,17,-44}, -{64,17,-43}, -{64,17,-42}, -{64,17,-41}, -{64,17,-40}, -{64,17,-39}, -{64,17,-38}, -{64,17,-37}, -{64,17,-36}, -{64,17,-35}, -{64,17,-34}, -{64,17,-33}, -{64,17,-32}, -{64,17,-31}, -{64,17,-30}, -{64,17,-29}, -{64,17,-28}, -{64,17,-27}, -{64,17,-26}, -{64,17,-25}, -{64,17,-24}, -{64,17,-23}, -{64,17,-22}, -{64,17,-21}, -{64,17,-20}, -{64,17,-19}, -{64,17,-18}, -{64,17,-17}, -{64,17,-16}, -{64,17,-15}, -{64,17,-14}, -{64,17,-13}, -{64,17,-12}, -{64,17,-11}, -{64,17,-10}, -{64,17,-9}, -{64,17,-8}, -{64,17,-7}, -{64,17,-6}, -{64,17,-5}, -{64,17,-4}, -{64,17,-3}, -{64,17,-2}, -{64,17,-1}, -{64,17,0}, -{64,17,1}, -{64,17,2}, -{64,17,3}, -{64,17,4}, -{64,17,5}, -{64,17,6}, -{64,17,7}, -{64,17,8}, -{64,17,9}, -{64,17,10}, -{64,17,11}, -{64,17,12}, -{64,17,13}, -{64,17,14}, -{64,17,15}, -{64,17,16}, -{64,17,17}, -{64,17,18}, -{64,17,19}, -{64,17,20}, -{64,17,21}, -{64,17,22}, -{64,17,23}, -{64,17,24}, -{64,17,25}, -{64,17,26}, -{64,17,27}, -{64,17,28}, -{64,17,29}, -{64,17,30}, -{64,17,31}, -{64,17,32}, -{64,17,33}, -{64,17,34}, -{64,17,35}, -{64,17,36}, -{64,17,37}, -{64,17,38}, -{64,17,39}, -{64,17,40}, -{64,17,41}, -{64,17,42}, -{64,17,43}, -{64,17,44}, -{64,17,45}, -{64,17,46}, -{64,17,47}, -{64,17,48}, -{64,17,49}, -{64,17,50}, -{64,17,51}, -{64,17,52}, -{64,17,53}, -{64,17,54}, -{64,17,55}, -{64,17,56}, -{64,17,57}, -{64,17,58}, -{64,17,59}, -{64,17,60}, -{64,17,61}, -{64,17,62}, -{64,17,63}, -{64,17,64}, -{64,17,65}, -{64,17,66}, -{64,17,67}, -{64,17,68}, -{64,17,69}, -{64,18,-55}, -{64,18,-54}, -{64,18,-53}, -{64,18,-52}, -{64,18,-51}, -{64,18,-50}, -{64,18,-49}, -{64,18,-48}, -{64,18,-47}, -{64,18,-46}, -{64,18,-45}, -{64,18,-44}, -{64,18,-43}, -{64,18,-42}, -{64,18,-41}, -{64,18,-40}, -{64,18,-39}, -{64,18,-38}, -{64,18,-37}, -{64,18,-36}, -{64,18,-35}, -{64,18,-34}, -{64,18,-33}, -{64,18,-32}, -{64,18,-31}, -{64,18,-30}, -{64,18,-29}, -{64,18,-28}, -{64,18,-27}, -{64,18,-26}, -{64,18,-25}, -{64,18,-24}, -{64,18,-23}, -{64,18,-22}, -{64,18,-21}, -{64,18,-20}, -{64,18,-19}, -{64,18,-18}, -{64,18,-17}, -{64,18,-16}, -{64,18,-15}, -{64,18,-14}, -{64,18,-13}, -{64,18,-12}, -{64,18,-11}, -{64,18,-10}, -{64,18,-9}, -{64,18,-8}, -{64,18,-7}, -{64,18,-6}, -{64,18,-5}, -{64,18,-4}, -{64,18,-3}, -{64,18,-2}, -{64,18,-1}, -{64,18,0}, -{64,18,1}, -{64,18,2}, -{64,18,3}, -{64,18,4}, -{64,18,5}, -{64,18,6}, -{64,18,7}, -{64,18,8}, -{64,18,9}, -{64,18,10}, -{64,18,11}, -{64,18,12}, -{64,18,13}, -{64,18,14}, -{64,18,15}, -{64,18,16}, -{64,18,17}, -{64,18,18}, -{64,18,19}, -{64,18,20}, -{64,18,21}, -{64,18,22}, -{64,18,23}, -{64,18,24}, -{64,18,25}, -{64,18,26}, -{64,18,27}, -{64,18,28}, -{64,18,29}, -{64,18,30}, -{64,18,31}, -{64,18,32}, -{64,18,33}, -{64,18,34}, -{64,18,35}, -{64,18,36}, -{64,18,37}, -{64,18,38}, -{64,18,39}, -{64,18,40}, -{64,18,41}, -{64,18,42}, -{64,18,43}, -{64,18,44}, -{64,18,45}, -{64,18,46}, -{64,18,47}, -{64,18,48}, -{64,18,49}, -{64,18,50}, -{64,18,51}, -{64,18,52}, -{64,18,53}, -{64,18,54}, -{64,18,55}, -{64,18,56}, -{64,18,57}, -{64,18,58}, -{64,18,59}, -{64,18,60}, -{64,18,61}, -{64,18,62}, -{64,18,63}, -{64,18,64}, -{64,18,65}, -{64,18,66}, -{64,18,67}, -{64,18,68}, -{64,18,69}, -{64,19,-55}, -{64,19,-54}, -{64,19,-53}, -{64,19,-52}, -{64,19,-51}, -{64,19,-50}, -{64,19,-49}, -{64,19,-48}, -{64,19,-47}, -{64,19,-46}, -{64,19,-45}, -{64,19,-44}, -{64,19,-43}, -{64,19,-42}, -{64,19,-41}, -{64,19,-40}, -{64,19,-39}, -{64,19,-38}, -{64,19,-37}, -{64,19,-36}, -{64,19,-35}, -{64,19,-34}, -{64,19,-33}, -{64,19,-32}, -{64,19,-31}, -{64,19,-30}, -{64,19,-29}, -{64,19,-28}, -{64,19,-27}, -{64,19,-26}, -{64,19,-25}, -{64,19,-24}, -{64,19,-23}, -{64,19,-22}, -{64,19,-21}, -{64,19,-20}, -{64,19,-19}, -{64,19,-18}, -{64,19,-17}, -{64,19,-16}, -{64,19,-15}, -{64,19,-14}, -{64,19,-13}, -{64,19,-12}, -{64,19,-11}, -{64,19,-10}, -{64,19,-9}, -{64,19,-8}, -{64,19,-7}, -{64,19,-6}, -{64,19,-5}, -{64,19,-4}, -{64,19,-3}, -{64,19,-2}, -{64,19,-1}, -{64,19,0}, -{64,19,1}, -{64,19,2}, -{64,19,3}, -{64,19,4}, -{64,19,5}, -{64,19,6}, -{64,19,7}, -{64,19,8}, -{64,19,9}, -{64,19,10}, -{64,19,11}, -{64,19,12}, -{64,19,13}, -{64,19,14}, -{64,19,15}, -{64,19,16}, -{64,19,17}, -{64,19,18}, -{64,19,19}, -{64,19,20}, -{64,19,21}, -{64,19,22}, -{64,19,23}, -{64,19,24}, -{64,19,25}, -{64,19,26}, -{64,19,27}, -{64,19,28}, -{64,19,29}, -{64,19,30}, -{64,19,31}, -{64,19,32}, -{64,19,33}, -{64,19,34}, -{64,19,35}, -{64,19,36}, -{64,19,37}, -{64,19,38}, -{64,19,39}, -{64,19,40}, -{64,19,41}, -{64,19,42}, -{64,19,43}, -{64,19,44}, -{64,19,45}, -{64,19,46}, -{64,19,47}, -{64,19,48}, -{64,19,49}, -{64,19,50}, -{64,19,51}, -{64,19,52}, -{64,19,53}, -{64,19,54}, -{64,19,55}, -{64,19,56}, -{64,19,57}, -{64,19,58}, -{64,19,59}, -{64,19,60}, -{64,19,61}, -{64,19,62}, -{64,19,63}, -{64,19,64}, -{64,19,65}, -{64,19,66}, -{64,19,67}, -{64,19,68}, -{64,19,69}, -{64,20,-55}, -{64,20,-54}, -{64,20,-53}, -{64,20,-52}, -{64,20,-51}, -{64,20,-50}, -{64,20,-49}, -{64,20,-48}, -{64,20,-47}, -{64,20,-46}, -{64,20,-45}, -{64,20,-44}, -{64,20,-43}, -{64,20,-42}, -{64,20,-41}, -{64,20,-40}, -{64,20,-39}, -{64,20,-38}, -{64,20,-37}, -{64,20,-36}, -{64,20,-35}, -{64,20,-34}, -{64,20,-33}, -{64,20,-32}, -{64,20,-31}, -{64,20,-30}, -{64,20,-29}, -{64,20,-28}, -{64,20,-27}, -{64,20,-26}, -{64,20,-25}, -{64,20,-24}, -{64,20,-23}, -{64,20,-22}, -{64,20,-21}, -{64,20,-20}, -{64,20,-19}, -{64,20,-18}, -{64,20,-17}, -{64,20,-16}, -{64,20,-15}, -{64,20,-14}, -{64,20,-13}, -{64,20,-12}, -{64,20,-11}, -{64,20,-10}, -{64,20,-9}, -{64,20,-8}, -{64,20,-7}, -{64,20,-6}, -{64,20,-5}, -{64,20,-4}, -{64,20,-3}, -{64,20,-2}, -{64,20,-1}, -{64,20,0}, -{64,20,1}, -{64,20,2}, -{64,20,3}, -{64,20,4}, -{64,20,5}, -{64,20,6}, -{64,20,7}, -{64,20,8}, -{64,20,9}, -{64,20,10}, -{64,20,11}, -{64,20,12}, -{64,20,13}, -{64,20,14}, -{64,20,15}, -{64,20,16}, -{64,20,17}, -{64,20,18}, -{64,20,19}, -{64,20,20}, -{64,20,21}, -{64,20,22}, -{64,20,23}, -{64,20,24}, -{64,20,25}, -{64,20,26}, -{64,20,27}, -{64,20,28}, -{64,20,29}, -{64,20,30}, -{64,20,31}, -{64,20,32}, -{64,20,33}, -{64,20,34}, -{64,20,35}, -{64,20,36}, -{64,20,37}, -{64,20,38}, -{64,20,39}, -{64,20,40}, -{64,20,41}, -{64,20,42}, -{64,20,43}, -{64,20,44}, -{64,20,45}, -{64,20,46}, -{64,20,47}, -{64,20,48}, -{64,20,49}, -{64,20,50}, -{64,20,51}, -{64,20,52}, -{64,20,53}, -{64,20,54}, -{64,20,55}, -{64,20,56}, -{64,20,57}, -{64,20,58}, -{64,20,59}, -{64,20,60}, -{64,20,61}, -{64,20,62}, -{64,20,63}, -{64,20,64}, -{64,20,65}, -{64,20,66}, -{64,20,67}, -{64,20,68}, -{64,20,69}, -{64,21,-55}, -{64,21,-54}, -{64,21,-53}, -{64,21,-52}, -{64,21,-51}, -{64,21,-50}, -{64,21,-49}, -{64,21,-48}, -{64,21,-47}, -{64,21,-46}, -{64,21,-45}, -{64,21,-44}, -{64,21,-43}, -{64,21,-42}, -{64,21,-41}, -{64,21,-40}, -{64,21,-39}, -{64,21,-38}, -{64,21,-37}, -{64,21,-36}, -{64,21,-35}, -{64,21,-34}, -{64,21,-33}, -{64,21,-32}, -{64,21,-31}, -{64,21,-30}, -{64,21,-29}, -{64,21,-28}, -{64,21,-27}, -{64,21,-26}, -{64,21,-25}, -{64,21,-24}, -{64,21,-23}, -{64,21,-22}, -{64,21,-21}, -{64,21,-20}, -{64,21,-19}, -{64,21,-18}, -{64,21,-17}, -{64,21,-16}, -{64,21,-15}, -{64,21,-14}, -{64,21,-13}, -{64,21,-12}, -{64,21,-11}, -{64,21,-10}, -{64,21,-9}, -{64,21,-8}, -{64,21,-7}, -{64,21,-6}, -{64,21,-5}, -{64,21,-4}, -{64,21,-3}, -{64,21,-2}, -{64,21,-1}, -{64,21,0}, -{64,21,1}, -{64,21,2}, -{64,21,3}, -{64,21,4}, -{64,21,5}, -{64,21,6}, -{64,21,7}, -{64,21,8}, -{64,21,9}, -{64,21,10}, -{64,21,11}, -{64,21,12}, -{64,21,13}, -{64,21,14}, -{64,21,15}, -{64,21,16}, -{64,21,17}, -{64,21,18}, -{64,21,19}, -{64,21,20}, -{64,21,21}, -{64,21,22}, -{64,21,23}, -{64,21,24}, -{64,21,25}, -{64,21,26}, -{64,21,27}, -{64,21,28}, -{64,21,29}, -{64,21,30}, -{64,21,31}, -{64,21,32}, -{64,21,33}, -{64,21,34}, -{64,21,35}, -{64,21,36}, -{64,21,37}, -{64,21,38}, -{64,21,39}, -{64,21,40}, -{64,21,41}, -{64,21,42}, -{64,21,43}, -{64,21,44}, -{64,21,45}, -{64,21,46}, -{64,21,47}, -{64,21,48}, -{64,21,49}, -{64,21,50}, -{64,21,51}, -{64,21,52}, -{64,21,53}, -{64,21,54}, -{64,21,55}, -{64,21,56}, -{64,21,57}, -{64,21,58}, -{64,21,59}, -{64,21,60}, -{64,21,61}, -{64,21,62}, -{64,21,63}, -{64,21,64}, -{64,21,65}, -{64,21,66}, -{64,21,67}, -{64,21,68}, -{64,21,69}, -{64,22,-55}, -{64,22,-54}, -{64,22,-53}, -{64,22,-52}, -{64,22,-51}, -{64,22,-50}, -{64,22,-49}, -{64,22,-48}, -{64,22,-47}, -{64,22,-46}, -{64,22,-45}, -{64,22,-44}, -{64,22,-43}, -{64,22,-42}, -{64,22,-41}, -{64,22,-40}, -{64,22,-39}, -{64,22,-38}, -{64,22,-37}, -{64,22,-36}, -{64,22,-35}, -{64,22,-34}, -{64,22,-33}, -{64,22,-32}, -{64,22,-31}, -{64,22,-30}, -{64,22,-29}, -{64,22,-28}, -{64,22,-27}, -{64,22,-26}, -{64,22,-25}, -{64,22,-24}, -{64,22,-23}, -{64,22,-22}, -{64,22,-21}, -{64,22,-20}, -{64,22,-19}, -{64,22,-18}, -{64,22,-17}, -{64,22,-16}, -{64,22,-15}, -{64,22,-14}, -{64,22,-13}, -{64,22,-12}, -{64,22,-11}, -{64,22,-10}, -{64,22,-9}, -{64,22,-8}, -{64,22,-7}, -{64,22,-6}, -{64,22,-5}, -{64,22,-4}, -{64,22,-3}, -{64,22,-2}, -{64,22,-1}, -{64,22,0}, -{64,22,1}, -{64,22,2}, -{64,22,3}, -{64,22,4}, -{64,22,5}, -{64,22,6}, -{64,22,7}, -{64,22,8}, -{64,22,9}, -{64,22,10}, -{64,22,11}, -{64,22,12}, -{64,22,13}, -{64,22,14}, -{64,22,15}, -{64,22,16}, -{64,22,17}, -{64,22,18}, -{64,22,19}, -{64,22,20}, -{64,22,21}, -{64,22,22}, -{64,22,23}, -{64,22,24}, -{64,22,25}, -{64,22,26}, -{64,22,27}, -{64,22,28}, -{64,22,29}, -{64,22,30}, -{64,22,31}, -{64,22,32}, -{64,22,33}, -{64,22,34}, -{64,22,35}, -{64,22,36}, -{64,22,37}, -{64,22,38}, -{64,22,39}, -{64,22,40}, -{64,22,41}, -{64,22,42}, -{64,22,43}, -{64,22,44}, -{64,22,45}, -{64,22,46}, -{64,22,47}, -{64,22,48}, -{64,22,49}, -{64,22,50}, -{64,22,51}, -{64,22,52}, -{64,22,53}, -{64,22,54}, -{64,22,55}, -{64,22,56}, -{64,22,57}, -{64,22,58}, -{64,22,59}, -{64,22,60}, -{64,22,61}, -{64,22,62}, -{64,22,63}, -{64,22,64}, -{64,22,65}, -{64,22,66}, -{64,22,67}, -{64,22,68}, -{64,22,69}, -{64,23,-55}, -{64,23,-54}, -{64,23,-53}, -{64,23,-52}, -{64,23,-51}, -{64,23,-50}, -{64,23,-49}, -{64,23,-48}, -{64,23,-47}, -{64,23,-46}, -{64,23,-45}, -{64,23,-44}, -{64,23,-43}, -{64,23,-42}, -{64,23,-41}, -{64,23,-40}, -{64,23,-39}, -{64,23,-38}, -{64,23,-37}, -{64,23,-36}, -{64,23,-35}, -{64,23,-34}, -{64,23,-33}, -{64,23,-32}, -{64,23,-31}, -{64,23,-30}, -{64,23,-29}, -{64,23,-28}, -{64,23,-27}, -{64,23,-26}, -{64,23,-25}, -{64,23,-24}, -{64,23,-23}, -{64,23,-22}, -{64,23,-21}, -{64,23,-20}, -{64,23,-19}, -{64,23,-18}, -{64,23,-17}, -{64,23,-16}, -{64,23,-15}, -{64,23,-14}, -{64,23,-13}, -{64,23,-12}, -{64,23,-11}, -{64,23,-10}, -{64,23,-9}, -{64,23,-8}, -{64,23,-7}, -{64,23,-6}, -{64,23,-5}, -{64,23,-4}, -{64,23,-3}, -{64,23,-2}, -{64,23,-1}, -{64,23,0}, -{64,23,1}, -{64,23,2}, -{64,23,3}, -{64,23,4}, -{64,23,5}, -{64,23,6}, -{64,23,7}, -{64,23,8}, -{64,23,9}, -{64,23,10}, -{64,23,11}, -{64,23,12}, -{64,23,13}, -{64,23,14}, -{64,23,15}, -{64,23,16}, -{64,23,17}, -{64,23,18}, -{64,23,19}, -{64,23,20}, -{64,23,21}, -{64,23,22}, -{64,23,23}, -{64,23,24}, -{64,23,25}, -{64,23,26}, -{64,23,27}, -{64,23,28}, -{64,23,29}, -{64,23,30}, -{64,23,31}, -{64,23,32}, -{64,23,33}, -{64,23,34}, -{64,23,35}, -{64,23,36}, -{64,23,37}, -{64,23,38}, -{64,23,39}, -{64,23,40}, -{64,23,41}, -{64,23,42}, -{64,23,43}, -{64,23,44}, -{64,23,45}, -{64,23,46}, -{64,23,47}, -{64,23,48}, -{64,23,49}, -{64,23,50}, -{64,23,51}, -{64,23,52}, -{64,23,53}, -{64,23,54}, -{64,23,55}, -{64,23,56}, -{64,23,57}, -{64,23,58}, -{64,23,59}, -{64,23,60}, -{64,23,61}, -{64,23,62}, -{64,23,63}, -{64,23,64}, -{64,23,65}, -{64,23,66}, -{64,23,67}, -{64,23,68}, -{64,23,69}, -{64,24,-55}, -{64,24,-54}, -{64,24,-53}, -{64,24,-52}, -{64,24,-51}, -{64,24,-50}, -{64,24,-49}, -{64,24,-48}, -{64,24,-47}, -{64,24,-46}, -{64,24,-45}, -{64,24,-44}, -{64,24,-43}, -{64,24,-42}, -{64,24,-41}, -{64,24,-40}, -{64,24,-39}, -{64,24,-38}, -{64,24,-37}, -{64,24,-36}, -{64,24,-35}, -{64,24,-34}, -{64,24,-33}, -{64,24,-32}, -{64,24,-31}, -{64,24,-30}, -{64,24,-29}, -{64,24,-28}, -{64,24,-27}, -{64,24,-26}, -{64,24,-25}, -{64,24,-24}, -{64,24,-23}, -{64,24,-22}, -{64,24,-21}, -{64,24,-20}, -{64,24,-19}, -{64,24,-18}, -{64,24,-17}, -{64,24,-16}, -{64,24,-15}, -{64,24,-14}, -{64,24,-13}, -{64,24,-12}, -{64,24,-11}, -{64,24,-10}, -{64,24,-9}, -{64,24,-8}, -{64,24,-7}, -{64,24,-6}, -{64,24,-5}, -{64,24,-4}, -{64,24,-3}, -{64,24,-2}, -{64,24,-1}, -{64,24,0}, -{64,24,1}, -{64,24,2}, -{64,24,3}, -{64,24,4}, -{64,24,5}, -{64,24,6}, -{64,24,7}, -{64,24,8}, -{64,24,9}, -{64,24,10}, -{64,24,11}, -{64,24,12}, -{64,24,13}, -{64,24,14}, -{64,24,15}, -{64,24,16}, -{64,24,17}, -{64,24,18}, -{64,24,19}, -{64,24,20}, -{64,24,21}, -{64,24,22}, -{64,24,23}, -{64,24,24}, -{64,24,25}, -{64,24,26}, -{64,24,27}, -{64,24,28}, -{64,24,29}, -{64,24,30}, -{64,24,31}, -{64,24,32}, -{64,24,33}, -{64,24,34}, -{64,24,35}, -{64,24,36}, -{64,24,37}, -{64,24,38}, -{64,24,39}, -{64,24,40}, -{64,24,41}, -{64,24,42}, -{64,24,43}, -{64,24,44}, -{64,24,45}, -{64,24,46}, -{64,24,47}, -{64,24,48}, -{64,24,49}, -{64,24,50}, -{64,24,51}, -{64,24,52}, -{64,24,53}, -{64,24,54}, -{64,24,55}, -{64,24,56}, -{64,24,57}, -{64,24,58}, -{64,24,59}, -{64,24,60}, -{64,24,61}, -{64,24,62}, -{64,24,63}, -{64,24,64}, -{64,24,65}, -{64,24,66}, -{64,24,67}, -{64,24,68}, -{64,24,69}, -{64,25,-55}, -{64,25,-54}, -{64,25,-53}, -{64,25,-52}, -{64,25,-51}, -{64,25,-50}, -{64,25,-49}, -{64,25,-48}, -{64,25,-47}, -{64,25,-46}, -{64,25,-45}, -{64,25,-44}, -{64,25,-43}, -{64,25,-42}, -{64,25,-41}, -{64,25,-40}, -{64,25,-39}, -{64,25,-38}, -{64,25,-37}, -{64,25,-36}, -{64,25,-35}, -{64,25,-34}, -{64,25,-33}, -{64,25,-32}, -{64,25,-31}, -{64,25,-30}, -{64,25,-29}, -{64,25,-28}, -{64,25,-27}, -{64,25,-26}, -{64,25,-25}, -{64,25,-24}, -{64,25,-23}, -{64,25,-22}, -{64,25,-21}, -{64,25,-20}, -{64,25,-19}, -{64,25,-18}, -{64,25,-17}, -{64,25,-16}, -{64,25,-15}, -{64,25,-14}, -{64,25,-13}, -{64,25,-12}, -{64,25,-11}, -{64,25,-10}, -{64,25,-9}, -{64,25,-8}, -{64,25,-7}, -{64,25,-6}, -{64,25,-5}, -{64,25,-4}, -{64,25,-3}, -{64,25,-2}, -{64,25,-1}, -{64,25,0}, -{64,25,1}, -{64,25,2}, -{64,25,3}, -{64,25,4}, -{64,25,5}, -{64,25,6}, -{64,25,7}, -{64,25,8}, -{64,25,9}, -{64,25,10}, -{64,25,11}, -{64,25,12}, -{64,25,13}, -{64,25,14}, -{64,25,15}, -{64,25,16}, -{64,25,17}, -{64,25,18}, -{64,25,19}, -{64,25,20}, -{64,25,21}, -{64,25,22}, -{64,25,23}, -{64,25,24}, -{64,25,25}, -{64,25,26}, -{64,25,27}, -{64,25,28}, -{64,25,29}, -{64,25,30}, -{64,25,31}, -{64,25,32}, -{64,25,33}, -{64,25,34}, -{64,25,35}, -{64,25,36}, -{64,25,37}, -{64,25,38}, -{64,25,39}, -{64,25,40}, -{64,25,41}, -{64,25,42}, -{64,25,43}, -{64,25,44}, -{64,25,45}, -{64,25,46}, -{64,25,47}, -{64,25,48}, -{64,25,49}, -{64,25,50}, -{64,25,51}, -{64,25,52}, -{64,25,53}, -{64,25,54}, -{64,25,55}, -{64,25,56}, -{64,25,57}, -{64,25,58}, -{64,25,59}, -{64,25,60}, -{64,25,61}, -{64,25,62}, -{64,25,63}, -{64,25,64}, -{64,25,65}, -{64,25,66}, -{64,25,67}, -{64,25,68}, -{64,25,69}, -{64,26,-55}, -{64,26,-54}, -{64,26,-53}, -{64,26,-52}, -{64,26,-51}, -{64,26,-50}, -{64,26,-49}, -{64,26,-48}, -{64,26,-47}, -{64,26,-46}, -{64,26,-45}, -{64,26,-44}, -{64,26,-43}, -{64,26,-42}, -{64,26,-41}, -{64,26,-40}, -{64,26,-39}, -{64,26,-38}, -{64,26,-37}, -{64,26,-36}, -{64,26,-35}, -{64,26,-34}, -{64,26,-33}, -{64,26,-32}, -{64,26,-31}, -{64,26,-30}, -{64,26,-29}, -{64,26,-28}, -{64,26,-27}, -{64,26,-26}, -{64,26,-25}, -{64,26,-24}, -{64,26,-23}, -{64,26,-22}, -{64,26,-21}, -{64,26,-20}, -{64,26,-19}, -{64,26,-18}, -{64,26,-17}, -{64,26,-16}, -{64,26,-15}, -{64,26,-14}, -{64,26,-13}, -{64,26,-12}, -{64,26,-11}, -{64,26,-10}, -{64,26,-9}, -{64,26,-8}, -{64,26,-7}, -{64,26,-6}, -{64,26,-5}, -{64,26,-4}, -{64,26,-3}, -{64,26,-2}, -{64,26,-1}, -{64,26,0}, -{64,26,1}, -{64,26,2}, -{64,26,3}, -{64,26,4}, -{64,26,5}, -{64,26,6}, -{64,26,7}, -{64,26,8}, -{64,26,9}, -{64,26,10}, -{64,26,11}, -{64,26,12}, -{64,26,13}, -{64,26,14}, -{64,26,15}, -{64,26,16}, -{64,26,17}, -{64,26,18}, -{64,26,19}, -{64,26,20}, -{64,26,21}, -{64,26,22}, -{64,26,23}, -{64,26,24}, -{64,26,25}, -{64,26,26}, -{64,26,27}, -{64,26,28}, -{64,26,29}, -{64,26,30}, -{64,26,31}, -{64,26,32}, -{64,26,33}, -{64,26,34}, -{64,26,35}, -{64,26,36}, -{64,26,37}, -{64,26,38}, -{64,26,39}, -{64,26,40}, -{64,26,41}, -{64,26,42}, -{64,26,43}, -{64,26,44}, -{64,26,45}, -{64,26,46}, -{64,26,47}, -{64,26,48}, -{64,26,49}, -{64,26,50}, -{64,26,51}, -{64,26,52}, -{64,26,53}, -{64,26,54}, -{64,26,55}, -{64,26,56}, -{64,26,57}, -{64,26,58}, -{64,26,59}, -{64,26,60}, -{64,26,61}, -{64,26,62}, -{64,26,63}, -{64,26,64}, -{64,26,65}, -{64,26,66}, -{64,26,67}, -{64,26,68}, -{64,26,69}, -{64,26,70}, -{64,27,-55}, -{64,27,-54}, -{64,27,-53}, -{64,27,-52}, -{64,27,-51}, -{64,27,-50}, -{64,27,-49}, -{64,27,-48}, -{64,27,-47}, -{64,27,-46}, -{64,27,-45}, -{64,27,-44}, -{64,27,-43}, -{64,27,-42}, -{64,27,-41}, -{64,27,-40}, -{64,27,-39}, -{64,27,-38}, -{64,27,-37}, -{64,27,-36}, -{64,27,-35}, -{64,27,-34}, -{64,27,-33}, -{64,27,-32}, -{64,27,-31}, -{64,27,-30}, -{64,27,-29}, -{64,27,-28}, -{64,27,-27}, -{64,27,-26}, -{64,27,-25}, -{64,27,-24}, -{64,27,-23}, -{64,27,-22}, -{64,27,-21}, -{64,27,-20}, -{64,27,-19}, -{64,27,-18}, -{64,27,-17}, -{64,27,-16}, -{64,27,-15}, -{64,27,-14}, -{64,27,-13}, -{64,27,-12}, -{64,27,-11}, -{64,27,-10}, -{64,27,-9}, -{64,27,-8}, -{64,27,-7}, -{64,27,-6}, -{64,27,-5}, -{64,27,-4}, -{64,27,-3}, -{64,27,-2}, -{64,27,-1}, -{64,27,0}, -{64,27,1}, -{64,27,2}, -{64,27,3}, -{64,27,4}, -{64,27,5}, -{64,27,6}, -{64,27,7}, -{64,27,8}, -{64,27,9}, -{64,27,10}, -{64,27,11}, -{64,27,12}, -{64,27,13}, -{64,27,14}, -{64,27,15}, -{64,27,16}, -{64,27,17}, -{64,27,18}, -{64,27,19}, -{64,27,20}, -{64,27,21}, -{64,27,22}, -{64,27,23}, -{64,27,24}, -{64,27,25}, -{64,27,26}, -{64,27,27}, -{64,27,28}, -{64,27,29}, -{64,27,30}, -{64,27,31}, -{64,27,32}, -{64,27,33}, -{64,27,34}, -{64,27,35}, -{64,27,36}, -{64,27,37}, -{64,27,38}, -{64,27,39}, -{64,27,40}, -{64,27,41}, -{64,27,42}, -{64,27,43}, -{64,27,44}, -{64,27,45}, -{64,27,46}, -{64,27,47}, -{64,27,48}, -{64,27,49}, -{64,27,50}, -{64,27,51}, -{64,27,52}, -{64,27,53}, -{64,27,54}, -{64,27,55}, -{64,27,56}, -{64,27,57}, -{64,27,58}, -{64,27,59}, -{64,27,60}, -{64,27,61}, -{64,27,62}, -{64,27,63}, -{64,27,64}, -{64,27,65}, -{64,27,66}, -{64,27,67}, -{64,27,68}, -{64,27,69}, -{64,27,70}, -{64,28,-55}, -{64,28,-54}, -{64,28,-53}, -{64,28,-52}, -{64,28,-51}, -{64,28,-50}, -{64,28,-49}, -{64,28,-48}, -{64,28,-47}, -{64,28,-46}, -{64,28,-45}, -{64,28,-44}, -{64,28,-43}, -{64,28,-42}, -{64,28,-41}, -{64,28,-40}, -{64,28,-39}, -{64,28,-38}, -{64,28,-37}, -{64,28,-36}, -{64,28,-35}, -{64,28,-34}, -{64,28,-33}, -{64,28,-32}, -{64,28,-31}, -{64,28,-30}, -{64,28,-29}, -{64,28,-28}, -{64,28,-27}, -{64,28,-26}, -{64,28,-25}, -{64,28,-24}, -{64,28,-23}, -{64,28,-22}, -{64,28,-21}, -{64,28,-20}, -{64,28,-19}, -{64,28,-18}, -{64,28,-17}, -{64,28,-16}, -{64,28,-15}, -{64,28,-14}, -{64,28,-13}, -{64,28,-12}, -{64,28,-11}, -{64,28,-10}, -{64,28,-9}, -{64,28,-8}, -{64,28,-7}, -{64,28,-6}, -{64,28,-5}, -{64,28,-4}, -{64,28,-3}, -{64,28,-2}, -{64,28,-1}, -{64,28,0}, -{64,28,1}, -{64,28,2}, -{64,28,3}, -{64,28,4}, -{64,28,5}, -{64,28,6}, -{64,28,7}, -{64,28,8}, -{64,28,9}, -{64,28,10}, -{64,28,11}, -{64,28,12}, -{64,28,13}, -{64,28,14}, -{64,28,15}, -{64,28,16}, -{64,28,17}, -{64,28,18}, -{64,28,19}, -{64,28,20}, -{64,28,21}, -{64,28,22}, -{64,28,23}, -{64,28,24}, -{64,28,25}, -{64,28,26}, -{64,28,27}, -{64,28,28}, -{64,28,29}, -{64,28,30}, -{64,28,31}, -{64,28,32}, -{64,28,33}, -{64,28,34}, -{64,28,35}, -{64,28,36}, -{64,28,37}, -{64,28,38}, -{64,28,39}, -{64,28,40}, -{64,28,41}, -{64,28,42}, -{64,28,43}, -{64,28,44}, -{64,28,45}, -{64,28,46}, -{64,28,47}, -{64,28,48}, -{64,28,49}, -{64,28,50}, -{64,28,51}, -{64,28,52}, -{64,28,53}, -{64,28,54}, -{64,28,55}, -{64,28,56}, -{64,28,57}, -{64,28,58}, -{64,28,59}, -{64,28,60}, -{64,28,61}, -{64,28,62}, -{64,28,63}, -{64,28,64}, -{64,28,65}, -{64,28,66}, -{64,28,67}, -{64,28,68}, -{64,28,69}, -{64,28,70}, -{64,29,-55}, -{64,29,-54}, -{64,29,-53}, -{64,29,-52}, -{64,29,-51}, -{64,29,-50}, -{64,29,-49}, -{64,29,-48}, -{64,29,-47}, -{64,29,-46}, -{64,29,-45}, -{64,29,-44}, -{64,29,-43}, -{64,29,-42}, -{64,29,-41}, -{64,29,-40}, -{64,29,-39}, -{64,29,-38}, -{64,29,-37}, -{64,29,-36}, -{64,29,-35}, -{64,29,-34}, -{64,29,-33}, -{64,29,-32}, -{64,29,-31}, -{64,29,-30}, -{64,29,-29}, -{64,29,-28}, -{64,29,-27}, -{64,29,-26}, -{64,29,-25}, -{64,29,-24}, -{64,29,-23}, -{64,29,-22}, -{64,29,-21}, -{64,29,-20}, -{64,29,-19}, -{64,29,-18}, -{64,29,-17}, -{64,29,-16}, -{64,29,-15}, -{64,29,-14}, -{64,29,-13}, -{64,29,-12}, -{64,29,-11}, -{64,29,-10}, -{64,29,-9}, -{64,29,-8}, -{64,29,-7}, -{64,29,-6}, -{64,29,-5}, -{64,29,-4}, -{64,29,-3}, -{64,29,-2}, -{64,29,-1}, -{64,29,0}, -{64,29,1}, -{64,29,2}, -{64,29,3}, -{64,29,4}, -{64,29,5}, -{64,29,6}, -{64,29,7}, -{64,29,8}, -{64,29,9}, -{64,29,10}, -{64,29,11}, -{64,29,12}, -{64,29,13}, -{64,29,14}, -{64,29,15}, -{64,29,16}, -{64,29,17}, -{64,29,18}, -{64,29,19}, -{64,29,20}, -{64,29,21}, -{64,29,22}, -{64,29,23}, -{64,29,24}, -{64,29,25}, -{64,29,26}, -{64,29,27}, -{64,29,28}, -{64,29,29}, -{64,29,30}, -{64,29,31}, -{64,29,32}, -{64,29,33}, -{64,29,34}, -{64,29,35}, -{64,29,36}, -{64,29,37}, -{64,29,38}, -{64,29,39}, -{64,29,40}, -{64,29,41}, -{64,29,42}, -{64,29,43}, -{64,29,44}, -{64,29,45}, -{64,29,46}, -{64,29,47}, -{64,29,48}, -{64,29,49}, -{64,29,50}, -{64,29,51}, -{64,29,52}, -{64,29,53}, -{64,29,54}, -{64,29,55}, -{64,29,56}, -{64,29,57}, -{64,29,58}, -{64,29,59}, -{64,29,60}, -{64,29,61}, -{64,29,62}, -{64,29,63}, -{64,29,64}, -{64,29,65}, -{64,29,66}, -{64,29,67}, -{64,29,68}, -{64,29,69}, -{64,29,70}, -{64,30,-55}, -{64,30,-54}, -{64,30,-53}, -{64,30,-52}, -{64,30,-51}, -{64,30,-50}, -{64,30,-49}, -{64,30,-48}, -{64,30,-47}, -{64,30,-46}, -{64,30,-45}, -{64,30,-44}, -{64,30,-43}, -{64,30,-42}, -{64,30,-41}, -{64,30,-40}, -{64,30,-39}, -{64,30,-38}, -{64,30,-37}, -{64,30,-36}, -{64,30,-35}, -{64,30,-34}, -{64,30,-33}, -{64,30,-32}, -{64,30,-31}, -{64,30,-30}, -{64,30,-29}, -{64,30,-28}, -{64,30,-27}, -{64,30,-26}, -{64,30,-25}, -{64,30,-24}, -{64,30,-23}, -{64,30,-22}, -{64,30,-21}, -{64,30,-20}, -{64,30,-19}, -{64,30,-18}, -{64,30,-17}, -{64,30,-16}, -{64,30,-15}, -{64,30,-14}, -{64,30,-13}, -{64,30,-12}, -{64,30,-11}, -{64,30,-10}, -{64,30,-9}, -{64,30,-8}, -{64,30,-7}, -{64,30,-6}, -{64,30,-5}, -{64,30,-4}, -{64,30,-3}, -{64,30,-2}, -{64,30,-1}, -{64,30,0}, -{64,30,1}, -{64,30,2}, -{64,30,3}, -{64,30,4}, -{64,30,5}, -{64,30,6}, -{64,30,7}, -{64,30,8}, -{64,30,9}, -{64,30,10}, -{64,30,11}, -{64,30,12}, -{64,30,13}, -{64,30,14}, -{64,30,15}, -{64,30,16}, -{64,30,17}, -{64,30,18}, -{64,30,19}, -{64,30,20}, -{64,30,21}, -{64,30,22}, -{64,30,23}, -{64,30,24}, -{64,30,25}, -{64,30,26}, -{64,30,27}, -{64,30,28}, -{64,30,29}, -{64,30,30}, -{64,30,31}, -{64,30,32}, -{64,30,33}, -{64,30,34}, -{64,30,35}, -{64,30,36}, -{64,30,37}, -{64,30,38}, -{64,30,39}, -{64,30,40}, -{64,30,41}, -{64,30,42}, -{64,30,43}, -{64,30,44}, -{64,30,45}, -{64,30,46}, -{64,30,47}, -{64,30,48}, -{64,30,49}, -{64,30,50}, -{64,30,51}, -{64,30,52}, -{64,30,53}, -{64,30,54}, -{64,30,55}, -{64,30,56}, -{64,30,57}, -{64,30,58}, -{64,30,59}, -{64,30,60}, -{64,30,61}, -{64,30,62}, -{64,30,63}, -{64,30,64}, -{64,30,65}, -{64,30,66}, -{64,30,67}, -{64,30,68}, -{64,30,69}, -{64,30,70}, -{64,31,-55}, -{64,31,-54}, -{64,31,-53}, -{64,31,-52}, -{64,31,-51}, -{64,31,-50}, -{64,31,-49}, -{64,31,-48}, -{64,31,-47}, -{64,31,-46}, -{64,31,-45}, -{64,31,-44}, -{64,31,-43}, -{64,31,-42}, -{64,31,-41}, -{64,31,-40}, -{64,31,-39}, -{64,31,-38}, -{64,31,-37}, -{64,31,-36}, -{64,31,-35}, -{64,31,-34}, -{64,31,-33}, -{64,31,-32}, -{64,31,-31}, -{64,31,-30}, -{64,31,-29}, -{64,31,-28}, -{64,31,-27}, -{64,31,-26}, -{64,31,-25}, -{64,31,-24}, -{64,31,-23}, -{64,31,-22}, -{64,31,-21}, -{64,31,-20}, -{64,31,-19}, -{64,31,-18}, -{64,31,-17}, -{64,31,-16}, -{64,31,-15}, -{64,31,-14}, -{64,31,-13}, -{64,31,-12}, -{64,31,-11}, -{64,31,-10}, -{64,31,-9}, -{64,31,-8}, -{64,31,-7}, -{64,31,-6}, -{64,31,-5}, -{64,31,-4}, -{64,31,-3}, -{64,31,-2}, -{64,31,-1}, -{64,31,0}, -{64,31,1}, -{64,31,2}, -{64,31,3}, -{64,31,4}, -{64,31,5}, -{64,31,6}, -{64,31,7}, -{64,31,8}, -{64,31,9}, -{64,31,10}, -{64,31,11}, -{64,31,12}, -{64,31,13}, -{64,31,14}, -{64,31,15}, -{64,31,16}, -{64,31,17}, -{64,31,18}, -{64,31,19}, -{64,31,20}, -{64,31,21}, -{64,31,22}, -{64,31,23}, -{64,31,24}, -{64,31,25}, -{64,31,26}, -{64,31,27}, -{64,31,28}, -{64,31,29}, -{64,31,30}, -{64,31,31}, -{64,31,32}, -{64,31,33}, -{64,31,34}, -{64,31,35}, -{64,31,36}, -{64,31,37}, -{64,31,38}, -{64,31,39}, -{64,31,40}, -{64,31,41}, -{64,31,42}, -{64,31,43}, -{64,31,44}, -{64,31,45}, -{64,31,46}, -{64,31,47}, -{64,31,48}, -{64,31,49}, -{64,31,50}, -{64,31,51}, -{64,31,52}, -{64,31,53}, -{64,31,54}, -{64,31,55}, -{64,31,56}, -{64,31,57}, -{64,31,58}, -{64,31,59}, -{64,31,60}, -{64,31,61}, -{64,31,62}, -{64,31,63}, -{64,31,64}, -{64,31,65}, -{64,31,66}, -{64,31,67}, -{64,31,68}, -{64,31,69}, -{64,31,70}, -{64,32,-55}, -{64,32,-54}, -{64,32,-53}, -{64,32,-52}, -{64,32,-51}, -{64,32,-50}, -{64,32,-49}, -{64,32,-48}, -{64,32,-47}, -{64,32,-46}, -{64,32,-45}, -{64,32,-44}, -{64,32,-43}, -{64,32,-42}, -{64,32,-41}, -{64,32,-40}, -{64,32,-39}, -{64,32,-38}, -{64,32,-37}, -{64,32,-36}, -{64,32,-35}, -{64,32,-34}, -{64,32,-33}, -{64,32,-32}, -{64,32,-31}, -{64,32,-30}, -{64,32,-29}, -{64,32,-28}, -{64,32,-27}, -{64,32,-26}, -{64,32,-25}, -{64,32,-24}, -{64,32,-23}, -{64,32,-22}, -{64,32,-21}, -{64,32,-20}, -{64,32,-19}, -{64,32,-18}, -{64,32,-17}, -{64,32,-16}, -{64,32,-15}, -{64,32,-14}, -{64,32,-13}, -{64,32,-12}, -{64,32,-11}, -{64,32,-10}, -{64,32,-9}, -{64,32,-8}, -{64,32,-7}, -{64,32,-6}, -{64,32,-5}, -{64,32,-4}, -{64,32,-3}, -{64,32,-2}, -{64,32,-1}, -{64,32,0}, -{64,32,1}, -{64,32,2}, -{64,32,3}, -{64,32,4}, -{64,32,5}, -{64,32,6}, -{64,32,7}, -{64,32,8}, -{64,32,9}, -{64,32,10}, -{64,32,11}, -{64,32,12}, -{64,32,13}, -{64,32,14}, -{64,32,15}, -{64,32,16}, -{64,32,17}, -{64,32,18}, -{64,32,19}, -{64,32,20}, -{64,32,21}, -{64,32,22}, -{64,32,23}, -{64,32,24}, -{64,32,25}, -{64,32,26}, -{64,32,27}, -{64,32,28}, -{64,32,29}, -{64,32,30}, -{64,32,31}, -{64,32,32}, -{64,32,33}, -{64,32,34}, -{64,32,35}, -{64,32,36}, -{64,32,37}, -{64,32,38}, -{64,32,39}, -{64,32,40}, -{64,32,41}, -{64,32,42}, -{64,32,43}, -{64,32,44}, -{64,32,45}, -{64,32,46}, -{64,32,47}, -{64,32,48}, -{64,32,49}, -{64,32,50}, -{64,32,51}, -{64,32,52}, -{64,32,53}, -{64,32,54}, -{64,32,55}, -{64,32,56}, -{64,32,57}, -{64,32,58}, -{64,32,59}, -{64,32,60}, -{64,32,61}, -{64,32,62}, -{64,32,63}, -{64,32,64}, -{64,32,65}, -{64,32,66}, -{64,32,67}, -{64,32,68}, -{64,32,69}, -{64,32,70}, -{64,33,-55}, -{64,33,-54}, -{64,33,-53}, -{64,33,-52}, -{64,33,-51}, -{64,33,-50}, -{64,33,-49}, -{64,33,-48}, -{64,33,-47}, -{64,33,-46}, -{64,33,-45}, -{64,33,-44}, -{64,33,-43}, -{64,33,-42}, -{64,33,-41}, -{64,33,-40}, -{64,33,-39}, -{64,33,-38}, -{64,33,-37}, -{64,33,-36}, -{64,33,-35}, -{64,33,-34}, -{64,33,-33}, -{64,33,-32}, -{64,33,-31}, -{64,33,-30}, -{64,33,-29}, -{64,33,-28}, -{64,33,-27}, -{64,33,-26}, -{64,33,-25}, -{64,33,-24}, -{64,33,-23}, -{64,33,-22}, -{64,33,-21}, -{64,33,-20}, -{64,33,-19}, -{64,33,-18}, -{64,33,-17}, -{64,33,-16}, -{64,33,-15}, -{64,33,-14}, -{64,33,-13}, -{64,33,-12}, -{64,33,-11}, -{64,33,-10}, -{64,33,-9}, -{64,33,-8}, -{64,33,-7}, -{64,33,-6}, -{64,33,-5}, -{64,33,-4}, -{64,33,-3}, -{64,33,-2}, -{64,33,-1}, -{64,33,0}, -{64,33,1}, -{64,33,2}, -{64,33,3}, -{64,33,4}, -{64,33,5}, -{64,33,6}, -{64,33,7}, -{64,33,8}, -{64,33,9}, -{64,33,10}, -{64,33,11}, -{64,33,12}, -{64,33,13}, -{64,33,14}, -{64,33,15}, -{64,33,16}, -{64,33,17}, -{64,33,18}, -{64,33,19}, -{64,33,20}, -{64,33,21}, -{64,33,22}, -{64,33,23}, -{64,33,24}, -{64,33,25}, -{64,33,26}, -{64,33,27}, -{64,33,28}, -{64,33,29}, -{64,33,30}, -{64,33,31}, -{64,33,32}, -{64,33,33}, -{64,33,34}, -{64,33,35}, -{64,33,36}, -{64,33,37}, -{64,33,38}, -{64,33,39}, -{64,33,40}, -{64,33,41}, -{64,33,42}, -{64,33,43}, -{64,33,44}, -{64,33,45}, -{64,33,46}, -{64,33,47}, -{64,33,48}, -{64,33,49}, -{64,33,50}, -{64,33,51}, -{64,33,52}, -{64,33,53}, -{64,33,54}, -{64,33,55}, -{64,33,56}, -{64,33,57}, -{64,33,58}, -{64,33,59}, -{64,33,60}, -{64,33,61}, -{64,33,62}, -{64,33,63}, -{64,33,64}, -{64,33,65}, -{64,33,66}, -{64,33,67}, -{64,33,68}, -{64,33,69}, -{64,33,70}, -{64,34,-55}, -{64,34,-54}, -{64,34,-53}, -{64,34,-52}, -{64,34,-51}, -{64,34,-50}, -{64,34,-49}, -{64,34,-48}, -{64,34,-47}, -{64,34,-46}, -{64,34,-45}, -{64,34,-44}, -{64,34,-43}, -{64,34,-42}, -{64,34,-41}, -{64,34,-40}, -{64,34,-39}, -{64,34,-38}, -{64,34,-37}, -{64,34,-36}, -{64,34,-35}, -{64,34,-34}, -{64,34,-33}, -{64,34,-32}, -{64,34,-31}, -{64,34,-30}, -{64,34,-29}, -{64,34,-28}, -{64,34,-27}, -{64,34,-26}, -{64,34,-25}, -{64,34,-24}, -{64,34,-23}, -{64,34,-22}, -{64,34,-21}, -{64,34,-20}, -{64,34,-19}, -{64,34,-18}, -{64,34,-17}, -{64,34,-16}, -{64,34,-15}, -{64,34,-14}, -{64,34,-13}, -{64,34,-12}, -{64,34,-11}, -{64,34,-10}, -{64,34,-9}, -{64,34,-8}, -{64,34,-7}, -{64,34,-6}, -{64,34,-5}, -{64,34,-4}, -{64,34,-3}, -{64,34,-2}, -{64,34,-1}, -{64,34,0}, -{64,34,1}, -{64,34,2}, -{64,34,3}, -{64,34,4}, -{64,34,5}, -{64,34,6}, -{64,34,7}, -{64,34,8}, -{64,34,9}, -{64,34,10}, -{64,34,11}, -{64,34,12}, -{64,34,13}, -{64,34,14}, -{64,34,15}, -{64,34,16}, -{64,34,17}, -{64,34,18}, -{64,34,19}, -{64,34,20}, -{64,34,21}, -{64,34,22}, -{64,34,23}, -{64,34,24}, -{64,34,25}, -{64,34,26}, -{64,34,27}, -{64,34,28}, -{64,34,29}, -{64,34,30}, -{64,34,31}, -{64,34,32}, -{64,34,33}, -{64,34,34}, -{64,34,35}, -{64,34,36}, -{64,34,37}, -{64,34,38}, -{64,34,39}, -{64,34,40}, -{64,34,41}, -{64,34,42}, -{64,34,43}, -{64,34,44}, -{64,34,45}, -{64,34,46}, -{64,34,47}, -{64,34,48}, -{64,34,49}, -{64,34,50}, -{64,34,51}, -{64,34,52}, -{64,34,53}, -{64,34,54}, -{64,34,55}, -{64,34,56}, -{64,34,57}, -{64,34,58}, -{64,34,59}, -{64,34,60}, -{64,34,61}, -{64,34,62}, -{64,34,63}, -{64,34,64}, -{64,34,65}, -{64,34,66}, -{64,34,67}, -{64,34,68}, -{64,34,69}, -{64,34,70}, -{64,35,-55}, -{64,35,-54}, -{64,35,-53}, -{64,35,-52}, -{64,35,-51}, -{64,35,-50}, -{64,35,-49}, -{64,35,-48}, -{64,35,-47}, -{64,35,-46}, -{64,35,-45}, -{64,35,-44}, -{64,35,-43}, -{64,35,-42}, -{64,35,-41}, -{64,35,-40}, -{64,35,-39}, -{64,35,-38}, -{64,35,-37}, -{64,35,-36}, -{64,35,-35}, -{64,35,-34}, -{64,35,-33}, -{64,35,-32}, -{64,35,-31}, -{64,35,-30}, -{64,35,-29}, -{64,35,-28}, -{64,35,-27}, -{64,35,-26}, -{64,35,-25}, -{64,35,-24}, -{64,35,-23}, -{64,35,-22}, -{64,35,-21}, -{64,35,-20}, -{64,35,-19}, -{64,35,-18}, -{64,35,-17}, -{64,35,-16}, -{64,35,-15}, -{64,35,-14}, -{64,35,-13}, -{64,35,-12}, -{64,35,-11}, -{64,35,-10}, -{64,35,-9}, -{64,35,-8}, -{64,35,-7}, -{64,35,-6}, -{64,35,-5}, -{64,35,-4}, -{64,35,-3}, -{64,35,-2}, -{64,35,-1}, -{64,35,0}, -{64,35,1}, -{64,35,2}, -{64,35,3}, -{64,35,4}, -{64,35,5}, -{64,35,6}, -{64,35,7}, -{64,35,8}, -{64,35,9}, -{64,35,10}, -{64,35,11}, -{64,35,12}, -{64,35,13}, -{64,35,14}, -{64,35,15}, -{64,35,16}, -{64,35,17}, -{64,35,18}, -{64,35,19}, -{64,35,20}, -{64,35,21}, -{64,35,22}, -{64,35,23}, -{64,35,24}, -{64,35,25}, -{64,35,26}, -{64,35,27}, -{64,35,28}, -{64,35,29}, -{64,35,30}, -{64,35,31}, -{64,35,32}, -{64,35,33}, -{64,35,34}, -{64,35,35}, -{64,35,36}, -{64,35,37}, -{64,35,38}, -{64,35,39}, -{64,35,40}, -{64,35,41}, -{64,35,42}, -{64,35,43}, -{64,35,44}, -{64,35,45}, -{64,35,46}, -{64,35,47}, -{64,35,48}, -{64,35,49}, -{64,35,50}, -{64,35,51}, -{64,35,52}, -{64,35,53}, -{64,35,54}, -{64,35,55}, -{64,35,56}, -{64,35,57}, -{64,35,58}, -{64,35,59}, -{64,35,60}, -{64,35,61}, -{64,35,62}, -{64,35,63}, -{64,35,64}, -{64,35,65}, -{64,35,66}, -{64,35,67}, -{64,35,68}, -{64,35,69}, -{64,35,70}, -{64,36,-55}, -{64,36,-54}, -{64,36,-53}, -{64,36,-52}, -{64,36,-51}, -{64,36,-50}, -{64,36,-49}, -{64,36,-48}, -{64,36,-47}, -{64,36,-46}, -{64,36,-45}, -{64,36,-44}, -{64,36,-43}, -{64,36,-42}, -{64,36,-41}, -{64,36,-40}, -{64,36,-39}, -{64,36,-38}, -{64,36,-37}, -{64,36,-36}, -{64,36,-35}, -{64,36,-34}, -{64,36,-33}, -{64,36,-32}, -{64,36,-31}, -{64,36,-30}, -{64,36,-29}, -{64,36,-28}, -{64,36,-27}, -{64,36,-26}, -{64,36,-25}, -{64,36,-24}, -{64,36,-23}, -{64,36,-22}, -{64,36,-21}, -{64,36,-20}, -{64,36,-19}, -{64,36,-18}, -{64,36,-17}, -{64,36,-16}, -{64,36,-15}, -{64,36,-14}, -{64,36,-13}, -{64,36,-12}, -{64,36,-11}, -{64,36,-10}, -{64,36,-9}, -{64,36,-8}, -{64,36,-7}, -{64,36,-6}, -{64,36,-5}, -{64,36,-4}, -{64,36,-3}, -{64,36,-2}, -{64,36,-1}, -{64,36,0}, -{64,36,1}, -{64,36,2}, -{64,36,3}, -{64,36,4}, -{64,36,5}, -{64,36,6}, -{64,36,7}, -{64,36,8}, -{64,36,9}, -{64,36,10}, -{64,36,11}, -{64,36,12}, -{64,36,13}, -{64,36,14}, -{64,36,15}, -{64,36,16}, -{64,36,17}, -{64,36,18}, -{64,36,19}, -{64,36,20}, -{64,36,21}, -{64,36,22}, -{64,36,23}, -{64,36,24}, -{64,36,25}, -{64,36,26}, -{64,36,27}, -{64,36,28}, -{64,36,29}, -{64,36,30}, -{64,36,31}, -{64,36,32}, -{64,36,33}, -{64,36,34}, -{64,36,35}, -{64,36,36}, -{64,36,37}, -{64,36,38}, -{64,36,39}, -{64,36,40}, -{64,36,41}, -{64,36,42}, -{64,36,43}, -{64,36,44}, -{64,36,45}, -{64,36,46}, -{64,36,47}, -{64,36,48}, -{64,36,49}, -{64,36,50}, -{64,36,51}, -{64,36,52}, -{64,36,53}, -{64,36,54}, -{64,36,55}, -{64,36,56}, -{64,36,57}, -{64,36,58}, -{64,36,59}, -{64,36,60}, -{64,36,61}, -{64,36,62}, -{64,36,63}, -{64,36,64}, -{64,36,65}, -{64,36,66}, -{64,36,67}, -{64,36,68}, -{64,36,69}, -{64,36,70}, -{64,37,-55}, -{64,37,-54}, -{64,37,-53}, -{64,37,-52}, -{64,37,-51}, -{64,37,-50}, -{64,37,-49}, -{64,37,-48}, -{64,37,-47}, -{64,37,-46}, -{64,37,-45}, -{64,37,-44}, -{64,37,-43}, -{64,37,-42}, -{64,37,-41}, -{64,37,-40}, -{64,37,-39}, -{64,37,-38}, -{64,37,-37}, -{64,37,-36}, -{64,37,-35}, -{64,37,-34}, -{64,37,-33}, -{64,37,-32}, -{64,37,-31}, -{64,37,-30}, -{64,37,-29}, -{64,37,-28}, -{64,37,-27}, -{64,37,-26}, -{64,37,-25}, -{64,37,-24}, -{64,37,-23}, -{64,37,-22}, -{64,37,-21}, -{64,37,-20}, -{64,37,-19}, -{64,37,-18}, -{64,37,-17}, -{64,37,-16}, -{64,37,-15}, -{64,37,-14}, -{64,37,-13}, -{64,37,-12}, -{64,37,-11}, -{64,37,-10}, -{64,37,-9}, -{64,37,-8}, -{64,37,-7}, -{64,37,-6}, -{64,37,-5}, -{64,37,-4}, -{64,37,-3}, -{64,37,-2}, -{64,37,-1}, -{64,37,0}, -{64,37,1}, -{64,37,2}, -{64,37,3}, -{64,37,4}, -{64,37,5}, -{64,37,6}, -{64,37,7}, -{64,37,8}, -{64,37,9}, -{64,37,10}, -{64,37,11}, -{64,37,12}, -{64,37,13}, -{64,37,14}, -{64,37,15}, -{64,37,16}, -{64,37,17}, -{64,37,18}, -{64,37,19}, -{64,37,20}, -{64,37,21}, -{64,37,22}, -{64,37,23}, -{64,37,24}, -{64,37,25}, -{64,37,26}, -{64,37,27}, -{64,37,28}, -{64,37,29}, -{64,37,30}, -{64,37,31}, -{64,37,32}, -{64,37,33}, -{64,37,34}, -{64,37,35}, -{64,37,36}, -{64,37,37}, -{64,37,38}, -{64,37,39}, -{64,37,40}, -{64,37,41}, -{64,37,42}, -{64,37,43}, -{64,37,44}, -{64,37,45}, -{64,37,46}, -{64,37,47}, -{64,37,48}, -{64,37,49}, -{64,37,50}, -{64,37,51}, -{64,37,52}, -{64,37,53}, -{64,37,54}, -{64,37,55}, -{64,37,56}, -{64,37,57}, -{64,37,58}, -{64,37,59}, -{64,37,60}, -{64,37,61}, -{64,37,62}, -{64,37,63}, -{64,37,64}, -{64,37,65}, -{64,37,66}, -{64,37,67}, -{64,37,68}, -{64,37,69}, -{64,37,70}, -{64,37,71}, -{64,38,-55}, -{64,38,-54}, -{64,38,-53}, -{64,38,-52}, -{64,38,-51}, -{64,38,-50}, -{64,38,-49}, -{64,38,-48}, -{64,38,-47}, -{64,38,-46}, -{64,38,-45}, -{64,38,-44}, -{64,38,-43}, -{64,38,-42}, -{64,38,-41}, -{64,38,-40}, -{64,38,-39}, -{64,38,-38}, -{64,38,-37}, -{64,38,-36}, -{64,38,-35}, -{64,38,-34}, -{64,38,-33}, -{64,38,-32}, -{64,38,-31}, -{64,38,-30}, -{64,38,-29}, -{64,38,-28}, -{64,38,-27}, -{64,38,-26}, -{64,38,-25}, -{64,38,-24}, -{64,38,-23}, -{64,38,-22}, -{64,38,-21}, -{64,38,-20}, -{64,38,-19}, -{64,38,-18}, -{64,38,-17}, -{64,38,-16}, -{64,38,-15}, -{64,38,-14}, -{64,38,-13}, -{64,38,-12}, -{64,38,-11}, -{64,38,-10}, -{64,38,-9}, -{64,38,-8}, -{64,38,-7}, -{64,38,-6}, -{64,38,-5}, -{64,38,-4}, -{64,38,-3}, -{64,38,-2}, -{64,38,-1}, -{64,38,0}, -{64,38,1}, -{64,38,2}, -{64,38,3}, -{64,38,4}, -{64,38,5}, -{64,38,6}, -{64,38,7}, -{64,38,8}, -{64,38,9}, -{64,38,10}, -{64,38,11}, -{64,38,12}, -{64,38,13}, -{64,38,14}, -{64,38,15}, -{64,38,16}, -{64,38,17}, -{64,38,18}, -{64,38,19}, -{64,38,20}, -{64,38,21}, -{64,38,22}, -{64,38,23}, -{64,38,24}, -{64,38,25}, -{64,38,26}, -{64,38,27}, -{64,38,28}, -{64,38,29}, -{64,38,30}, -{64,38,31}, -{64,38,32}, -{64,38,33}, -{64,38,34}, -{64,38,35}, -{64,38,36}, -{64,38,37}, -{64,38,38}, -{64,38,39}, -{64,38,40}, -{64,38,41}, -{64,38,42}, -{64,38,43}, -{64,38,44}, -{64,38,45}, -{64,38,46}, -{64,38,47}, -{64,38,48}, -{64,38,49}, -{64,38,50}, -{64,38,51}, -{64,38,52}, -{64,38,53}, -{64,38,54}, -{64,38,55}, -{64,38,56}, -{64,38,57}, -{64,38,58}, -{64,38,59}, -{64,38,60}, -{64,38,61}, -{64,38,62}, -{64,38,63}, -{64,38,64}, -{64,38,65}, -{64,38,66}, -{64,38,67}, -{64,38,68}, -{64,38,69}, -{64,38,70}, -{64,38,71}, -{64,39,-55}, -{64,39,-54}, -{64,39,-53}, -{64,39,-52}, -{64,39,-51}, -{64,39,-50}, -{64,39,-49}, -{64,39,-48}, -{64,39,-47}, -{64,39,-46}, -{64,39,-45}, -{64,39,-44}, -{64,39,-43}, -{64,39,-42}, -{64,39,-41}, -{64,39,-40}, -{64,39,-39}, -{64,39,-38}, -{64,39,-37}, -{64,39,-36}, -{64,39,-35}, -{64,39,-34}, -{64,39,-33}, -{64,39,-32}, -{64,39,-31}, -{64,39,-30}, -{64,39,-29}, -{64,39,-28}, -{64,39,-27}, -{64,39,-26}, -{64,39,-25}, -{64,39,-24}, -{64,39,-23}, -{64,39,-22}, -{64,39,-21}, -{64,39,-20}, -{64,39,-19}, -{64,39,-18}, -{64,39,-17}, -{64,39,-16}, -{64,39,-15}, -{64,39,-14}, -{64,39,-13}, -{64,39,-12}, -{64,39,-11}, -{64,39,-10}, -{64,39,-9}, -{64,39,-8}, -{64,39,-7}, -{64,39,-6}, -{64,39,-5}, -{64,39,-4}, -{64,39,-3}, -{64,39,-2}, -{64,39,-1}, -{64,39,0}, -{64,39,1}, -{64,39,2}, -{64,39,3}, -{64,39,4}, -{64,39,5}, -{64,39,6}, -{64,39,7}, -{64,39,8}, -{64,39,9}, -{64,39,10}, -{64,39,11}, -{64,39,12}, -{64,39,13}, -{64,39,14}, -{64,39,15}, -{64,39,16}, -{64,39,17}, -{64,39,18}, -{64,39,19}, -{64,39,20}, -{64,39,21}, -{64,39,22}, -{64,39,23}, -{64,39,24}, -{64,39,25}, -{64,39,26}, -{64,39,27}, -{64,39,28}, -{64,39,29}, -{64,39,30}, -{64,39,31}, -{64,39,32}, -{64,39,33}, -{64,39,34}, -{64,39,35}, -{64,39,36}, -{64,39,37}, -{64,39,38}, -{64,39,39}, -{64,39,40}, -{64,39,41}, -{64,39,42}, -{64,39,43}, -{64,39,44}, -{64,39,45}, -{64,39,46}, -{64,39,47}, -{64,39,48}, -{64,39,49}, -{64,39,50}, -{64,39,51}, -{64,39,52}, -{64,39,53}, -{64,39,54}, -{64,39,55}, -{64,39,56}, -{64,39,57}, -{64,39,58}, -{64,39,59}, -{64,39,60}, -{64,39,61}, -{64,39,62}, -{64,39,63}, -{64,39,64}, -{64,39,65}, -{64,39,66}, -{64,39,67}, -{64,39,68}, -{64,39,69}, -{64,39,70}, -{64,39,71}, -{64,40,-55}, -{64,40,-54}, -{64,40,-53}, -{64,40,-52}, -{64,40,-51}, -{64,40,-50}, -{64,40,-49}, -{64,40,-48}, -{64,40,-47}, -{64,40,-46}, -{64,40,-45}, -{64,40,-44}, -{64,40,-43}, -{64,40,-42}, -{64,40,-41}, -{64,40,-40}, -{64,40,-39}, -{64,40,-38}, -{64,40,-37}, -{64,40,-36}, -{64,40,-35}, -{64,40,-34}, -{64,40,-33}, -{64,40,-32}, -{64,40,-31}, -{64,40,-30}, -{64,40,-29}, -{64,40,-28}, -{64,40,-27}, -{64,40,-26}, -{64,40,-25}, -{64,40,-24}, -{64,40,-23}, -{64,40,-22}, -{64,40,-21}, -{64,40,-20}, -{64,40,-19}, -{64,40,-18}, -{64,40,-17}, -{64,40,-16}, -{64,40,-15}, -{64,40,-14}, -{64,40,-13}, -{64,40,-12}, -{64,40,-11}, -{64,40,-10}, -{64,40,-9}, -{64,40,-8}, -{64,40,-7}, -{64,40,-6}, -{64,40,-5}, -{64,40,-4}, -{64,40,-3}, -{64,40,-2}, -{64,40,-1}, -{64,40,0}, -{64,40,1}, -{64,40,2}, -{64,40,3}, -{64,40,4}, -{64,40,5}, -{64,40,6}, -{64,40,7}, -{64,40,8}, -{64,40,9}, -{64,40,10}, -{64,40,11}, -{64,40,12}, -{64,40,13}, -{64,40,14}, -{64,40,15}, -{64,40,16}, -{64,40,17}, -{64,40,18}, -{64,40,19}, -{64,40,20}, -{64,40,21}, -{64,40,22}, -{64,40,23}, -{64,40,24}, -{64,40,25}, -{64,40,26}, -{64,40,27}, -{64,40,28}, -{64,40,29}, -{64,40,30}, -{64,40,31}, -{64,40,32}, -{64,40,33}, -{64,40,34}, -{64,40,35}, -{64,40,36}, -{64,40,37}, -{64,40,38}, -{64,40,39}, -{64,40,40}, -{64,40,41}, -{64,40,42}, -{64,40,43}, -{64,40,44}, -{64,40,45}, -{64,40,46}, -{64,40,47}, -{64,40,48}, -{64,40,49}, -{64,40,50}, -{64,40,51}, -{64,40,52}, -{64,40,53}, -{64,40,54}, -{64,40,55}, -{64,40,56}, -{64,40,57}, -{64,40,58}, -{64,40,59}, -{64,40,60}, -{64,40,61}, -{64,40,62}, -{64,40,63}, -{64,40,64}, -{64,40,65}, -{64,40,66}, -{64,40,67}, -{64,40,68}, -{64,40,69}, -{64,40,70}, -{64,40,71}, -{64,41,-55}, -{64,41,-54}, -{64,41,-53}, -{64,41,-52}, -{64,41,-51}, -{64,41,-50}, -{64,41,-49}, -{64,41,-48}, -{64,41,-47}, -{64,41,-46}, -{64,41,-45}, -{64,41,-44}, -{64,41,-43}, -{64,41,-42}, -{64,41,-41}, -{64,41,-40}, -{64,41,-39}, -{64,41,-38}, -{64,41,-37}, -{64,41,-36}, -{64,41,-35}, -{64,41,-34}, -{64,41,-33}, -{64,41,-32}, -{64,41,-31}, -{64,41,-30}, -{64,41,-29}, -{64,41,-28}, -{64,41,-27}, -{64,41,-26}, -{64,41,-25}, -{64,41,-24}, -{64,41,-23}, -{64,41,-22}, -{64,41,-21}, -{64,41,-20}, -{64,41,-19}, -{64,41,-18}, -{64,41,-17}, -{64,41,-16}, -{64,41,-15}, -{64,41,-14}, -{64,41,-13}, -{64,41,-12}, -{64,41,-11}, -{64,41,-10}, -{64,41,-9}, -{64,41,-8}, -{64,41,-7}, -{64,41,-6}, -{64,41,-5}, -{64,41,-4}, -{64,41,-3}, -{64,41,-2}, -{64,41,-1}, -{64,41,0}, -{64,41,1}, -{64,41,2}, -{64,41,3}, -{64,41,4}, -{64,41,5}, -{64,41,6}, -{64,41,7}, -{64,41,8}, -{64,41,9}, -{64,41,10}, -{64,41,11}, -{64,41,12}, -{64,41,13}, -{64,41,14}, -{64,41,15}, -{64,41,16}, -{64,41,17}, -{64,41,18}, -{64,41,19}, -{64,41,20}, -{64,41,21}, -{64,41,22}, -{64,41,23}, -{64,41,24}, -{64,41,25}, -{64,41,26}, -{64,41,27}, -{64,41,28}, -{64,41,29}, -{64,41,30}, -{64,41,31}, -{64,41,32}, -{64,41,33}, -{64,41,34}, -{64,41,35}, -{64,41,36}, -{64,41,37}, -{64,41,38}, -{64,41,39}, -{64,41,40}, -{64,41,41}, -{64,41,42}, -{64,41,43}, -{64,41,44}, -{64,41,45}, -{64,41,46}, -{64,41,47}, -{64,41,48}, -{64,41,49}, -{64,41,50}, -{64,41,51}, -{64,41,52}, -{64,41,53}, -{64,41,54}, -{64,41,55}, -{64,41,56}, -{64,41,57}, -{64,41,58}, -{64,41,59}, -{64,41,60}, -{64,41,61}, -{64,41,62}, -{64,41,63}, -{64,41,64}, -{64,41,65}, -{64,41,66}, -{64,41,67}, -{64,41,68}, -{64,41,69}, -{64,41,70}, -{64,41,71}, -{64,42,-55}, -{64,42,-54}, -{64,42,-53}, -{64,42,-52}, -{64,42,-51}, -{64,42,-50}, -{64,42,-49}, -{64,42,-48}, -{64,42,-47}, -{64,42,-46}, -{64,42,-45}, -{64,42,-44}, -{64,42,-43}, -{64,42,-42}, -{64,42,-41}, -{64,42,-40}, -{64,42,-39}, -{64,42,-38}, -{64,42,-37}, -{64,42,-36}, -{64,42,-35}, -{64,42,-34}, -{64,42,-33}, -{64,42,-32}, -{64,42,-31}, -{64,42,-30}, -{64,42,-29}, -{64,42,-28}, -{64,42,-27}, -{64,42,-26}, -{64,42,-25}, -{64,42,-24}, -{64,42,-23}, -{64,42,-22}, -{64,42,-21}, -{64,42,-20}, -{64,42,-19}, -{64,42,-18}, -{64,42,-17}, -{64,42,-16}, -{64,42,-15}, -{64,42,-14}, -{64,42,-13}, -{64,42,-12}, -{64,42,-11}, -{64,42,-10}, -{64,42,-9}, -{64,42,-8}, -{64,42,-7}, -{64,42,-6}, -{64,42,-5}, -{64,42,-4}, -{64,42,-3}, -{64,42,-2}, -{64,42,-1}, -{64,42,0}, -{64,42,1}, -{64,42,2}, -{64,42,3}, -{64,42,4}, -{64,42,5}, -{64,42,6}, -{64,42,7}, -{64,42,8}, -{64,42,9}, -{64,42,10}, -{64,42,11}, -{64,42,12}, -{64,42,13}, -{64,42,14}, -{64,42,15}, -{64,42,16}, -{64,42,17}, -{64,42,18}, -{64,42,19}, -{64,42,20}, -{64,42,21}, -{64,42,22}, -{64,42,23}, -{64,42,24}, -{64,42,25}, -{64,42,26}, -{64,42,27}, -{64,42,28}, -{64,42,29}, -{64,42,30}, -{64,42,31}, -{64,42,32}, -{64,42,33}, -{64,42,34}, -{64,42,35}, -{64,42,36}, -{64,42,37}, -{64,42,38}, -{64,42,39}, -{64,42,40}, -{64,42,41}, -{64,42,42}, -{64,42,43}, -{64,42,44}, -{64,42,45}, -{64,42,46}, -{64,42,47}, -{64,42,48}, -{64,42,49}, -{64,42,50}, -{64,42,51}, -{64,42,52}, -{64,42,53}, -{64,42,54}, -{64,42,55}, -{64,42,56}, -{64,42,57}, -{64,42,58}, -{64,42,59}, -{64,42,60}, -{64,42,61}, -{64,42,62}, -{64,42,63}, -{64,42,64}, -{64,42,65}, -{64,42,66}, -{64,42,67}, -{64,42,68}, -{64,42,69}, -{64,42,70}, -{64,42,71}, -{64,43,-55}, -{64,43,-54}, -{64,43,-53}, -{64,43,-52}, -{64,43,-51}, -{64,43,-50}, -{64,43,-49}, -{64,43,-48}, -{64,43,-47}, -{64,43,-46}, -{64,43,-45}, -{64,43,-44}, -{64,43,-43}, -{64,43,-42}, -{64,43,-41}, -{64,43,-40}, -{64,43,-39}, -{64,43,-38}, -{64,43,-37}, -{64,43,-36}, -{64,43,-35}, -{64,43,-34}, -{64,43,-33}, -{64,43,-32}, -{64,43,-31}, -{64,43,-30}, -{64,43,-29}, -{64,43,-28}, -{64,43,-27}, -{64,43,-26}, -{64,43,-25}, -{64,43,-24}, -{64,43,-23}, -{64,43,-22}, -{64,43,-21}, -{64,43,-20}, -{64,43,-19}, -{64,43,-18}, -{64,43,-17}, -{64,43,-16}, -{64,43,-15}, -{64,43,-14}, -{64,43,-13}, -{64,43,-12}, -{64,43,-11}, -{64,43,-10}, -{64,43,-9}, -{64,43,-8}, -{64,43,-7}, -{64,43,-6}, -{64,43,-5}, -{64,43,-4}, -{64,43,-3}, -{64,43,-2}, -{64,43,-1}, -{64,43,0}, -{64,43,1}, -{64,43,2}, -{64,43,3}, -{64,43,4}, -{64,43,5}, -{64,43,6}, -{64,43,7}, -{64,43,8}, -{64,43,9}, -{64,43,10}, -{64,43,11}, -{64,43,12}, -{64,43,13}, -{64,43,14}, -{64,43,15}, -{64,43,16}, -{64,43,17}, -{64,43,18}, -{64,43,19}, -{64,43,20}, -{64,43,21}, -{64,43,22}, -{64,43,23}, -{64,43,24}, -{64,43,25}, -{64,43,26}, -{64,43,27}, -{64,43,28}, -{64,43,29}, -{64,43,30}, -{64,43,31}, -{64,43,32}, -{64,43,33}, -{64,43,34}, -{64,43,35}, -{64,43,36}, -{64,43,37}, -{64,43,38}, -{64,43,39}, -{64,43,40}, -{64,43,41}, -{64,43,42}, -{64,43,43}, -{64,43,44}, -{64,43,45}, -{64,43,46}, -{64,43,47}, -{64,43,48}, -{64,43,49}, -{64,43,50}, -{64,43,51}, -{64,43,52}, -{64,43,53}, -{64,43,54}, -{64,43,55}, -{64,43,56}, -{64,43,57}, -{64,43,58}, -{64,43,59}, -{64,43,60}, -{64,43,61}, -{64,43,62}, -{64,43,63}, -{64,43,64}, -{64,43,65}, -{64,43,66}, -{64,43,67}, -{64,43,68}, -{64,43,69}, -{64,43,70}, -{64,43,71}, -{64,44,-55}, -{64,44,-54}, -{64,44,-53}, -{64,44,-52}, -{64,44,-51}, -{64,44,-50}, -{64,44,-49}, -{64,44,-48}, -{64,44,-47}, -{64,44,-46}, -{64,44,-45}, -{64,44,-44}, -{64,44,-43}, -{64,44,-42}, -{64,44,-41}, -{64,44,-40}, -{64,44,-39}, -{64,44,-38}, -{64,44,-37}, -{64,44,-36}, -{64,44,-35}, -{64,44,-34}, -{64,44,-33}, -{64,44,-32}, -{64,44,-31}, -{64,44,-30}, -{64,44,-29}, -{64,44,-28}, -{64,44,-27}, -{64,44,-26}, -{64,44,-25}, -{64,44,-24}, -{64,44,-23}, -{64,44,-22}, -{64,44,-21}, -{64,44,-20}, -{64,44,-19}, -{64,44,-18}, -{64,44,-17}, -{64,44,-16}, -{64,44,-15}, -{64,44,-14}, -{64,44,-13}, -{64,44,-12}, -{64,44,-11}, -{64,44,-10}, -{64,44,-9}, -{64,44,-8}, -{64,44,-7}, -{64,44,-6}, -{64,44,-5}, -{64,44,-4}, -{64,44,-3}, -{64,44,-2}, -{64,44,-1}, -{64,44,0}, -{64,44,1}, -{64,44,2}, -{64,44,3}, -{64,44,4}, -{64,44,5}, -{64,44,6}, -{64,44,7}, -{64,44,8}, -{64,44,9}, -{64,44,10}, -{64,44,11}, -{64,44,12}, -{64,44,13}, -{64,44,14}, -{64,44,15}, -{64,44,16}, -{64,44,17}, -{64,44,18}, -{64,44,19}, -{64,44,20}, -{64,44,21}, -{64,44,22}, -{64,44,23}, -{64,44,24}, -{64,44,25}, -{64,44,26}, -{64,44,27}, -{64,44,28}, -{64,44,29}, -{64,44,30}, -{64,44,31}, -{64,44,32}, -{64,44,33}, -{64,44,34}, -{64,44,35}, -{64,44,36}, -{64,44,37}, -{64,44,38}, -{64,44,39}, -{64,44,40}, -{64,44,41}, -{64,44,42}, -{64,44,43}, -{64,44,44}, -{64,44,45}, -{64,44,46}, -{64,44,47}, -{64,44,48}, -{64,44,49}, -{64,44,50}, -{64,44,51}, -{64,44,52}, -{64,44,53}, -{64,44,54}, -{64,44,55}, -{64,44,56}, -{64,44,57}, -{64,44,58}, -{64,44,59}, -{64,44,60}, -{64,44,61}, -{64,44,62}, -{64,44,63}, -{64,44,64}, -{64,44,65}, -{64,44,66}, -{64,44,67}, -{64,44,68}, -{64,44,69}, -{64,44,70}, -{64,44,71}, -{64,45,-55}, -{64,45,-54}, -{64,45,-53}, -{64,45,-52}, -{64,45,-51}, -{64,45,-50}, -{64,45,-49}, -{64,45,-48}, -{64,45,-47}, -{64,45,-46}, -{64,45,-45}, -{64,45,-44}, -{64,45,-43}, -{64,45,-42}, -{64,45,-41}, -{64,45,-40}, -{64,45,-39}, -{64,45,-38}, -{64,45,-37}, -{64,45,-36}, -{64,45,-35}, -{64,45,-34}, -{64,45,-33}, -{64,45,-32}, -{64,45,-31}, -{64,45,-30}, -{64,45,-29}, -{64,45,-28}, -{64,45,-27}, -{64,45,-26}, -{64,45,-25}, -{64,45,-24}, -{64,45,-23}, -{64,45,-22}, -{64,45,-21}, -{64,45,-20}, -{64,45,-19}, -{64,45,-18}, -{64,45,-17}, -{64,45,-16}, -{64,45,-15}, -{64,45,-14}, -{64,45,-13}, -{64,45,-12}, -{64,45,-11}, -{64,45,-10}, -{64,45,-9}, -{64,45,-8}, -{64,45,-7}, -{64,45,-6}, -{64,45,-5}, -{64,45,-4}, -{64,45,-3}, -{64,45,-2}, -{64,45,-1}, -{64,45,0}, -{64,45,1}, -{64,45,2}, -{64,45,3}, -{64,45,4}, -{64,45,5}, -{64,45,6}, -{64,45,7}, -{64,45,8}, -{64,45,9}, -{64,45,10}, -{64,45,11}, -{64,45,12}, -{64,45,13}, -{64,45,14}, -{64,45,15}, -{64,45,16}, -{64,45,17}, -{64,45,18}, -{64,45,19}, -{64,45,20}, -{64,45,21}, -{64,45,22}, -{64,45,23}, -{64,45,24}, -{64,45,25}, -{64,45,26}, -{64,45,27}, -{64,45,28}, -{64,45,29}, -{64,45,30}, -{64,45,31}, -{64,45,32}, -{64,45,33}, -{64,45,34}, -{64,45,35}, -{64,45,36}, -{64,45,37}, -{64,45,38}, -{64,45,39}, -{64,45,40}, -{64,45,41}, -{64,45,42}, -{64,45,43}, -{64,45,44}, -{64,45,45}, -{64,45,46}, -{64,45,47}, -{64,45,48}, -{64,45,49}, -{64,45,50}, -{64,45,51}, -{64,45,52}, -{64,45,53}, -{64,45,54}, -{64,45,55}, -{64,45,56}, -{64,45,57}, -{64,45,58}, -{64,45,59}, -{64,45,60}, -{64,45,61}, -{64,45,62}, -{64,45,63}, -{64,45,64}, -{64,45,65}, -{64,45,66}, -{64,45,67}, -{64,45,68}, -{64,45,69}, -{64,45,70}, -{64,45,71}, -{64,46,-55}, -{64,46,-54}, -{64,46,-53}, -{64,46,-52}, -{64,46,-51}, -{64,46,-50}, -{64,46,-49}, -{64,46,-48}, -{64,46,-47}, -{64,46,-46}, -{64,46,-45}, -{64,46,-44}, -{64,46,-43}, -{64,46,-42}, -{64,46,-41}, -{64,46,-40}, -{64,46,-39}, -{64,46,-38}, -{64,46,-37}, -{64,46,-36}, -{64,46,-35}, -{64,46,-34}, -{64,46,-33}, -{64,46,-32}, -{64,46,-31}, -{64,46,-30}, -{64,46,-29}, -{64,46,-28}, -{64,46,-27}, -{64,46,-26}, -{64,46,-25}, -{64,46,-24}, -{64,46,-23}, -{64,46,-22}, -{64,46,-21}, -{64,46,-20}, -{64,46,-19}, -{64,46,-18}, -{64,46,-17}, -{64,46,-16}, -{64,46,-15}, -{64,46,-14}, -{64,46,-13}, -{64,46,-12}, -{64,46,-11}, -{64,46,-10}, -{64,46,-9}, -{64,46,-8}, -{64,46,-7}, -{64,46,-6}, -{64,46,-5}, -{64,46,-4}, -{64,46,-3}, -{64,46,-2}, -{64,46,-1}, -{64,46,0}, -{64,46,1}, -{64,46,2}, -{64,46,3}, -{64,46,4}, -{64,46,5}, -{64,46,6}, -{64,46,7}, -{64,46,8}, -{64,46,9}, -{64,46,10}, -{64,46,11}, -{64,46,12}, -{64,46,13}, -{64,46,14}, -{64,46,15}, -{64,46,16}, -{64,46,17}, -{64,46,18}, -{64,46,19}, -{64,46,20}, -{64,46,21}, -{64,46,22}, -{64,46,23}, -{64,46,24}, -{64,46,25}, -{64,46,26}, -{64,46,27}, -{64,46,28}, -{64,46,29}, -{64,46,30}, -{64,46,31}, -{64,46,32}, -{64,46,33}, -{64,46,34}, -{64,46,35}, -{64,46,36}, -{64,46,37}, -{64,46,38}, -{64,46,39}, -{64,46,40}, -{64,46,41}, -{64,46,42}, -{64,46,43}, -{64,46,44}, -{64,46,45}, -{64,46,46}, -{64,46,47}, -{64,46,48}, -{64,46,49}, -{64,46,50}, -{64,46,51}, -{64,46,52}, -{64,46,53}, -{64,46,54}, -{64,46,55}, -{64,46,56}, -{64,46,57}, -{64,46,58}, -{64,46,59}, -{64,46,60}, -{64,46,61}, -{64,46,62}, -{64,46,63}, -{64,46,64}, -{64,46,65}, -{64,46,66}, -{64,46,67}, -{64,46,68}, -{64,46,69}, -{64,46,70}, -{64,46,71}, -{64,47,-55}, -{64,47,-54}, -{64,47,-53}, -{64,47,-52}, -{64,47,-51}, -{64,47,-50}, -{64,47,-49}, -{64,47,-48}, -{64,47,-47}, -{64,47,-46}, -{64,47,-45}, -{64,47,-44}, -{64,47,-43}, -{64,47,-42}, -{64,47,-41}, -{64,47,-40}, -{64,47,-39}, -{64,47,-38}, -{64,47,-37}, -{64,47,-36}, -{64,47,-35}, -{64,47,-34}, -{64,47,-33}, -{64,47,-32}, -{64,47,-31}, -{64,47,-30}, -{64,47,-29}, -{64,47,-28}, -{64,47,-27}, -{64,47,-26}, -{64,47,-25}, -{64,47,-24}, -{64,47,-23}, -{64,47,-22}, -{64,47,-21}, -{64,47,-20}, -{64,47,-19}, -{64,47,-18}, -{64,47,-17}, -{64,47,-16}, -{64,47,-15}, -{64,47,-14}, -{64,47,-13}, -{64,47,-12}, -{64,47,-11}, -{64,47,-10}, -{64,47,-9}, -{64,47,-8}, -{64,47,-7}, -{64,47,-6}, -{64,47,-5}, -{64,47,-4}, -{64,47,-3}, -{64,47,-2}, -{64,47,-1}, -{64,47,0}, -{64,47,1}, -{64,47,2}, -{64,47,3}, -{64,47,4}, -{64,47,5}, -{64,47,6}, -{64,47,7}, -{64,47,8}, -{64,47,9}, -{64,47,10}, -{64,47,11}, -{64,47,12}, -{64,47,13}, -{64,47,14}, -{64,47,15}, -{64,47,16}, -{64,47,17}, -{64,47,18}, -{64,47,19}, -{64,47,20}, -{64,47,21}, -{64,47,22}, -{64,47,23}, -{64,47,24}, -{64,47,25}, -{64,47,26}, -{64,47,27}, -{64,47,28}, -{64,47,29}, -{64,47,30}, -{64,47,31}, -{64,47,32}, -{64,47,33}, -{64,47,34}, -{64,47,35}, -{64,47,36}, -{64,47,37}, -{64,47,38}, -{64,47,39}, -{64,47,40}, -{64,47,41}, -{64,47,42}, -{64,47,43}, -{64,47,44}, -{64,47,45}, -{64,47,46}, -{64,47,47}, -{64,47,48}, -{64,47,49}, -{64,47,50}, -{64,47,51}, -{64,47,52}, -{64,47,53}, -{64,47,54}, -{64,47,55}, -{64,47,56}, -{64,47,57}, -{64,47,58}, -{64,47,59}, -{64,47,60}, -{64,47,61}, -{64,47,62}, -{64,47,63}, -{64,47,64}, -{64,47,65}, -{64,47,66}, -{64,47,67}, -{64,47,68}, -{64,47,69}, -{64,47,70}, -{64,47,71}, -{64,47,72}, -{64,48,-55}, -{64,48,-54}, -{64,48,-53}, -{64,48,-52}, -{64,48,-51}, -{64,48,-50}, -{64,48,-49}, -{64,48,-48}, -{64,48,-47}, -{64,48,-46}, -{64,48,-45}, -{64,48,-44}, -{64,48,-43}, -{64,48,-42}, -{64,48,-41}, -{64,48,-40}, -{64,48,-39}, -{64,48,-38}, -{64,48,-37}, -{64,48,-36}, -{64,48,-35}, -{64,48,-34}, -{64,48,-33}, -{64,48,-32}, -{64,48,-31}, -{64,48,-30}, -{64,48,-29}, -{64,48,-28}, -{64,48,-27}, -{64,48,-26}, -{64,48,-25}, -{64,48,-24}, -{64,48,-23}, -{64,48,-22}, -{64,48,-21}, -{64,48,-20}, -{64,48,-19}, -{64,48,-18}, -{64,48,-17}, -{64,48,-16}, -{64,48,-15}, -{64,48,-14}, -{64,48,-13}, -{64,48,-12}, -{64,48,-11}, -{64,48,-10}, -{64,48,-9}, -{64,48,-8}, -{64,48,-7}, -{64,48,-6}, -{64,48,-5}, -{64,48,-4}, -{64,48,-3}, -{64,48,-2}, -{64,48,-1}, -{64,48,0}, -{64,48,1}, -{64,48,2}, -{64,48,3}, -{64,48,4}, -{64,48,5}, -{64,48,6}, -{64,48,7}, -{64,48,8}, -{64,48,9}, -{64,48,10}, -{64,48,11}, -{64,48,12}, -{64,48,13}, -{64,48,14}, -{64,48,15}, -{64,48,16}, -{64,48,17}, -{64,48,18}, -{64,48,19}, -{64,48,20}, -{64,48,21}, -{64,48,22}, -{64,48,23}, -{64,48,24}, -{64,48,25}, -{64,48,26}, -{64,48,27}, -{64,48,28}, -{64,48,29}, -{64,48,30}, -{64,48,31}, -{64,48,32}, -{64,48,33}, -{64,48,34}, -{64,48,35}, -{64,48,36}, -{64,48,37}, -{64,48,38}, -{64,48,39}, -{64,48,40}, -{64,48,41}, -{64,48,42}, -{64,48,43}, -{64,48,44}, -{64,48,45}, -{64,48,46}, -{64,48,47}, -{64,48,48}, -{64,48,49}, -{64,48,50}, -{64,48,51}, -{64,48,52}, -{64,48,53}, -{64,48,54}, -{64,48,55}, -{64,48,56}, -{64,48,57}, -{64,48,58}, -{64,48,59}, -{64,48,60}, -{64,48,61}, -{64,48,62}, -{64,48,63}, -{64,48,64}, -{64,48,65}, -{64,48,66}, -{64,48,67}, -{64,48,68}, -{64,48,69}, -{64,48,70}, -{64,48,71}, -{64,48,72}, -{64,49,-55}, -{64,49,-54}, -{64,49,-53}, -{64,49,-52}, -{64,49,-51}, -{64,49,-50}, -{64,49,-49}, -{64,49,-48}, -{64,49,-47}, -{64,49,-46}, -{64,49,-45}, -{64,49,-44}, -{64,49,-43}, -{64,49,-42}, -{64,49,-41}, -{64,49,-40}, -{64,49,-39}, -{64,49,-38}, -{64,49,-37}, -{64,49,-36}, -{64,49,-35}, -{64,49,-34}, -{64,49,-33}, -{64,49,-32}, -{64,49,-31}, -{64,49,-30}, -{64,49,-29}, -{64,49,-28}, -{64,49,-27}, -{64,49,-26}, -{64,49,-25}, -{64,49,-24}, -{64,49,-23}, -{64,49,-22}, -{64,49,-21}, -{64,49,-20}, -{64,49,-19}, -{64,49,-18}, -{64,49,-17}, -{64,49,-16}, -{64,49,-15}, -{64,49,-14}, -{64,49,-13}, -{64,49,-12}, -{64,49,-11}, -{64,49,-10}, -{64,49,-9}, -{64,49,-8}, -{64,49,-7}, -{64,49,-6}, -{64,49,-5}, -{64,49,-4}, -{64,49,-3}, -{64,49,-2}, -{64,49,-1}, -{64,49,0}, -{64,49,1}, -{64,49,2}, -{64,49,3}, -{64,49,4}, -{64,49,5}, -{64,49,6}, -{64,49,7}, -{64,49,8}, -{64,49,9}, -{64,49,10}, -{64,49,11}, -{64,49,12}, -{64,49,13}, -{64,49,14}, -{64,49,15}, -{64,49,16}, -{64,49,17}, -{64,49,18}, -{64,49,19}, -{64,49,20}, -{64,49,21}, -{64,49,22}, -{64,49,23}, -{64,49,24}, -{64,49,25}, -{64,49,26}, -{64,49,27}, -{64,49,28}, -{64,49,29}, -{64,49,30}, -{64,49,31}, -{64,49,32}, -{64,49,33}, -{64,49,34}, -{64,49,35}, -{64,49,36}, -{64,49,37}, -{64,49,38}, -{64,49,39}, -{64,49,40}, -{64,49,41}, -{64,49,42}, -{64,49,43}, -{64,49,44}, -{64,49,45}, -{64,49,46}, -{64,49,47}, -{64,49,48}, -{64,49,49}, -{64,49,50}, -{64,49,51}, -{64,49,52}, -{64,49,53}, -{64,49,54}, -{64,49,55}, -{64,49,56}, -{64,49,57}, -{64,49,58}, -{64,49,59}, -{64,49,60}, -{64,49,61}, -{64,49,62}, -{64,49,63}, -{64,49,64}, -{64,49,65}, -{64,49,66}, -{64,49,67}, -{64,49,68}, -{64,49,69}, -{64,49,70}, -{64,49,71}, -{64,49,72}, -{64,50,-55}, -{64,50,-54}, -{64,50,-53}, -{64,50,-52}, -{64,50,-51}, -{64,50,-50}, -{64,50,-49}, -{64,50,-48}, -{64,50,-47}, -{64,50,-46}, -{64,50,-45}, -{64,50,-44}, -{64,50,-43}, -{64,50,-42}, -{64,50,-41}, -{64,50,-40}, -{64,50,-39}, -{64,50,-38}, -{64,50,-37}, -{64,50,-36}, -{64,50,-35}, -{64,50,-34}, -{64,50,-33}, -{64,50,-32}, -{64,50,-31}, -{64,50,-30}, -{64,50,-29}, -{64,50,-28}, -{64,50,-27}, -{64,50,-26}, -{64,50,-25}, -{64,50,-24}, -{64,50,-23}, -{64,50,-22}, -{64,50,-21}, -{64,50,-20}, -{64,50,-19}, -{64,50,-18}, -{64,50,-17}, -{64,50,-16}, -{64,50,-15}, -{64,50,-14}, -{64,50,-13}, -{64,50,-12}, -{64,50,-11}, -{64,50,-10}, -{64,50,-9}, -{64,50,-8}, -{64,50,-7}, -{64,50,-6}, -{64,50,-5}, -{64,50,-4}, -{64,50,-3}, -{64,50,-2}, -{64,50,-1}, -{64,50,0}, -{64,50,1}, -{64,50,2}, -{64,50,3}, -{64,50,4}, -{64,50,5}, -{64,50,6}, -{64,50,7}, -{64,50,8}, -{64,50,9}, -{64,50,10}, -{64,50,11}, -{64,50,12}, -{64,50,13}, -{64,50,14}, -{64,50,15}, -{64,50,16}, -{64,50,17}, -{64,50,18}, -{64,50,19}, -{64,50,20}, -{64,50,21}, -{64,50,22}, -{64,50,23}, -{64,50,24}, -{64,50,25}, -{64,50,26}, -{64,50,27}, -{64,50,28}, -{64,50,29}, -{64,50,30}, -{64,50,31}, -{64,50,32}, -{64,50,33}, -{64,50,34}, -{64,50,35}, -{64,50,36}, -{64,50,37}, -{64,50,38}, -{64,50,39}, -{64,50,40}, -{64,50,41}, -{64,50,42}, -{64,50,43}, -{64,50,44}, -{64,50,45}, -{64,50,46}, -{64,50,47}, -{64,50,48}, -{64,50,49}, -{64,50,50}, -{64,50,51}, -{64,50,52}, -{64,50,53}, -{64,50,54}, -{64,50,55}, -{64,50,56}, -{64,50,57}, -{64,50,58}, -{64,50,59}, -{64,50,60}, -{64,50,61}, -{64,50,62}, -{64,50,63}, -{64,50,64}, -{64,50,65}, -{64,50,66}, -{64,50,67}, -{64,50,68}, -{64,50,69}, -{64,50,70}, -{64,50,71}, -{64,50,72}, -{64,51,-55}, -{64,51,-54}, -{64,51,-53}, -{64,51,-52}, -{64,51,-51}, -{64,51,-50}, -{64,51,-49}, -{64,51,-48}, -{64,51,-47}, -{64,51,-46}, -{64,51,-45}, -{64,51,-44}, -{64,51,-43}, -{64,51,-42}, -{64,51,-41}, -{64,51,-40}, -{64,51,-39}, -{64,51,-38}, -{64,51,-37}, -{64,51,-36}, -{64,51,-35}, -{64,51,-34}, -{64,51,-33}, -{64,51,-32}, -{64,51,-31}, -{64,51,-30}, -{64,51,-29}, -{64,51,-28}, -{64,51,-27}, -{64,51,-26}, -{64,51,-25}, -{64,51,-24}, -{64,51,-23}, -{64,51,-22}, -{64,51,-21}, -{64,51,-20}, -{64,51,-19}, -{64,51,-18}, -{64,51,-17}, -{64,51,-16}, -{64,51,-15}, -{64,51,-14}, -{64,51,-13}, -{64,51,-12}, -{64,51,-11}, -{64,51,-10}, -{64,51,-9}, -{64,51,-8}, -{64,51,-7}, -{64,51,-6}, -{64,51,-5}, -{64,51,-4}, -{64,51,-3}, -{64,51,-2}, -{64,51,-1}, -{64,51,0}, -{64,51,1}, -{64,51,2}, -{64,51,3}, -{64,51,4}, -{64,51,5}, -{64,51,6}, -{64,51,7}, -{64,51,8}, -{64,51,9}, -{64,51,10}, -{64,51,11}, -{64,51,12}, -{64,51,13}, -{64,51,14}, -{64,51,15}, -{64,51,16}, -{64,51,17}, -{64,51,18}, -{64,51,19}, -{64,51,20}, -{64,51,21}, -{64,51,22}, -{64,51,23}, -{64,51,24}, -{64,51,25}, -{64,51,26}, -{64,51,27}, -{64,51,28}, -{64,51,29}, -{64,51,30}, -{64,51,31}, -{64,51,32}, -{64,51,33}, -{64,51,34}, -{64,51,35}, -{64,51,36}, -{64,51,37}, -{64,51,38}, -{64,51,39}, -{64,51,40}, -{64,51,41}, -{64,51,42}, -{64,51,43}, -{64,51,44}, -{64,51,45}, -{64,51,46}, -{64,51,47}, -{64,51,48}, -{64,51,49}, -{64,51,50}, -{64,51,51}, -{64,51,52}, -{64,51,53}, -{64,51,54}, -{64,51,55}, -{64,51,56}, -{64,51,57}, -{64,51,58}, -{64,51,59}, -{64,51,60}, -{64,51,61}, -{64,51,62}, -{64,51,63}, -{64,51,64}, -{64,51,65}, -{64,51,66}, -{64,51,67}, -{64,51,68}, -{64,51,69}, -{64,52,-55}, -{64,52,-54}, -{64,52,-53}, -{64,52,-52}, -{64,52,-51}, -{64,52,-50}, -{64,52,-49}, -{64,52,-48}, -{64,52,-47}, -{64,52,-46}, -{64,52,-45}, -{64,52,-44}, -{64,52,-43}, -{64,52,-42}, -{64,52,-41}, -{64,52,-40}, -{64,52,-39}, -{64,52,-38}, -{64,52,-37}, -{64,52,-36}, -{64,52,-35}, -{64,52,-34}, -{64,52,-33}, -{64,52,-32}, -{64,52,-31}, -{64,52,-30}, -{64,52,-29}, -{64,52,-28}, -{64,52,-27}, -{64,52,-26}, -{64,52,-25}, -{64,52,-24}, -{64,52,-23}, -{64,52,-22}, -{64,52,-21}, -{64,52,-20}, -{64,52,-19}, -{64,52,-18}, -{64,52,-17}, -{64,52,-16}, -{64,52,-15}, -{64,52,-14}, -{64,52,-13}, -{64,52,-12}, -{64,52,-11}, -{64,52,-10}, -{64,52,-9}, -{64,52,-8}, -{64,52,-7}, -{64,52,-6}, -{64,52,-5}, -{64,52,-4}, -{64,52,-3}, -{64,52,-2}, -{64,52,-1}, -{64,52,0}, -{64,52,1}, -{64,52,2}, -{64,52,3}, -{64,52,4}, -{64,52,5}, -{64,52,6}, -{64,52,7}, -{64,52,8}, -{64,52,9}, -{64,52,10}, -{64,52,11}, -{64,52,12}, -{64,52,13}, -{64,52,14}, -{64,52,15}, -{64,52,16}, -{64,52,17}, -{64,52,18}, -{64,52,19}, -{64,52,20}, -{64,52,21}, -{64,52,22}, -{64,52,23}, -{64,52,24}, -{64,52,25}, -{64,52,26}, -{64,52,27}, -{64,52,28}, -{64,52,29}, -{64,52,30}, -{64,52,31}, -{64,52,32}, -{64,52,33}, -{64,52,34}, -{64,52,35}, -{64,52,36}, -{64,52,37}, -{64,52,38}, -{64,52,39}, -{64,52,40}, -{64,52,41}, -{64,52,42}, -{64,52,43}, -{64,52,44}, -{64,52,45}, -{64,52,46}, -{64,52,47}, -{64,52,48}, -{64,52,49}, -{64,52,50}, -{64,52,51}, -{64,52,52}, -{64,52,53}, -{64,52,54}, -{64,52,55}, -{64,52,56}, -{64,52,57}, -{64,52,58}, -{64,52,59}, -{64,53,-55}, -{64,53,-54}, -{64,53,-53}, -{64,53,-52}, -{64,53,-51}, -{64,53,-50}, -{64,53,-49}, -{64,53,-48}, -{64,53,-47}, -{64,53,-46}, -{64,53,-45}, -{64,53,-44}, -{64,53,-43}, -{64,53,-42}, -{64,53,-41}, -{64,53,-40}, -{64,53,-39}, -{64,53,-38}, -{64,53,-37}, -{64,53,-36}, -{64,53,-35}, -{64,53,-34}, -{64,53,-33}, -{64,53,-32}, -{64,53,-31}, -{64,53,-30}, -{64,53,-29}, -{64,53,-28}, -{64,53,-27}, -{64,53,-26}, -{64,53,-25}, -{64,53,-24}, -{64,53,-23}, -{64,53,-22}, -{64,53,-21}, -{64,53,-20}, -{64,53,-19}, -{64,53,-18}, -{64,53,-17}, -{64,53,-16}, -{64,53,-15}, -{64,53,-14}, -{64,53,-13}, -{64,53,-12}, -{64,53,-11}, -{64,53,-10}, -{64,53,-9}, -{64,53,-8}, -{64,53,-7}, -{64,53,-6}, -{64,53,-5}, -{64,53,-4}, -{64,53,-3}, -{64,53,-2}, -{64,53,-1}, -{64,53,0}, -{64,53,1}, -{64,53,2}, -{64,53,3}, -{64,53,4}, -{64,53,5}, -{64,53,6}, -{64,53,7}, -{64,53,8}, -{64,53,9}, -{64,53,10}, -{64,53,11}, -{64,53,12}, -{64,53,13}, -{64,53,14}, -{64,53,15}, -{64,53,16}, -{64,53,17}, -{64,53,18}, -{64,53,19}, -{64,53,20}, -{64,53,21}, -{64,53,22}, -{64,53,23}, -{64,53,24}, -{64,53,25}, -{64,53,26}, -{64,53,27}, -{64,53,28}, -{64,53,29}, -{64,53,30}, -{64,53,31}, -{64,53,32}, -{64,53,33}, -{64,53,34}, -{64,53,35}, -{64,53,36}, -{64,53,37}, -{64,53,38}, -{64,53,39}, -{64,53,40}, -{64,53,41}, -{64,53,42}, -{64,53,43}, -{64,53,44}, -{64,53,45}, -{64,53,46}, -{64,53,47}, -{64,53,48}, -{64,53,49}, -{64,53,50}, -{64,54,-55}, -{64,54,-54}, -{64,54,-53}, -{64,54,-52}, -{64,54,-51}, -{64,54,-50}, -{64,54,-49}, -{64,54,-48}, -{64,54,-47}, -{64,54,-46}, -{64,54,-45}, -{64,54,-44}, -{64,54,-43}, -{64,54,-42}, -{64,54,-41}, -{64,54,-40}, -{64,54,-39}, -{64,54,-38}, -{64,54,-37}, -{64,54,-36}, -{64,54,-35}, -{64,54,-34}, -{64,54,-33}, -{64,54,-32}, -{64,54,-31}, -{64,54,-30}, -{64,54,-29}, -{64,54,-28}, -{64,54,-27}, -{64,54,-26}, -{64,54,-25}, -{64,54,-24}, -{64,54,-23}, -{64,54,-22}, -{64,54,-21}, -{64,54,-20}, -{64,54,-19}, -{64,54,-18}, -{64,54,-17}, -{64,54,-16}, -{64,54,-15}, -{64,54,-14}, -{64,54,-13}, -{64,54,-12}, -{64,54,-11}, -{64,54,-10}, -{64,54,-9}, -{64,54,-8}, -{64,54,-7}, -{64,54,-6}, -{64,54,-5}, -{64,54,-4}, -{64,54,-3}, -{64,54,-2}, -{64,54,-1}, -{64,54,0}, -{64,54,1}, -{64,54,2}, -{64,54,3}, -{64,54,4}, -{64,54,5}, -{64,54,6}, -{64,54,7}, -{64,54,8}, -{64,54,9}, -{64,54,10}, -{64,54,11}, -{64,54,12}, -{64,54,13}, -{64,54,14}, -{64,54,15}, -{64,54,16}, -{64,54,17}, -{64,54,18}, -{64,54,19}, -{64,54,20}, -{64,54,21}, -{64,54,22}, -{64,54,23}, -{64,54,24}, -{64,54,25}, -{64,54,26}, -{64,54,27}, -{64,54,28}, -{64,54,29}, -{64,54,30}, -{64,54,31}, -{64,54,32}, -{64,54,33}, -{64,54,34}, -{64,54,35}, -{64,54,36}, -{64,54,37}, -{64,54,38}, -{64,54,39}, -{64,54,40}, -{64,54,41}, -{64,54,42}, -{64,54,43}, -{64,55,-55}, -{64,55,-54}, -{64,55,-53}, -{64,55,-52}, -{64,55,-51}, -{64,55,-50}, -{64,55,-49}, -{64,55,-48}, -{64,55,-47}, -{64,55,-46}, -{64,55,-45}, -{64,55,-44}, -{64,55,-43}, -{64,55,-42}, -{64,55,-41}, -{64,55,-40}, -{64,55,-39}, -{64,55,-38}, -{64,55,-37}, -{64,55,-36}, -{64,55,-35}, -{64,55,-34}, -{64,55,-33}, -{64,55,-32}, -{64,55,-31}, -{64,55,-30}, -{64,55,-29}, -{64,55,-28}, -{64,55,-27}, -{64,55,-26}, -{64,55,-25}, -{64,55,-24}, -{64,55,-23}, -{64,55,-22}, -{64,55,-21}, -{64,55,-20}, -{64,55,-19}, -{64,55,-18}, -{64,55,-17}, -{64,55,-16}, -{64,55,-15}, -{64,55,-14}, -{64,55,-13}, -{64,55,-12}, -{64,55,-11}, -{64,55,-10}, -{64,55,-9}, -{64,55,-8}, -{64,55,-7}, -{64,55,-6}, -{64,55,-5}, -{64,55,-4}, -{64,55,-3}, -{64,55,-2}, -{64,55,-1}, -{64,55,0}, -{64,55,1}, -{64,55,2}, -{64,55,3}, -{64,55,4}, -{64,55,5}, -{64,55,6}, -{64,55,7}, -{64,55,8}, -{64,55,9}, -{64,55,10}, -{64,55,11}, -{64,55,12}, -{64,55,13}, -{64,55,14}, -{64,55,15}, -{64,55,16}, -{64,55,17}, -{64,55,18}, -{64,55,19}, -{64,55,20}, -{64,55,21}, -{64,55,22}, -{64,55,23}, -{64,55,24}, -{64,55,25}, -{64,55,26}, -{64,55,27}, -{64,55,28}, -{64,55,29}, -{64,55,30}, -{64,55,31}, -{64,55,32}, -{64,55,33}, -{64,55,34}, -{64,55,35}, -{64,55,36}, -{64,55,37}, -{64,56,-55}, -{64,56,-54}, -{64,56,-53}, -{64,56,-52}, -{64,56,-51}, -{64,56,-50}, -{64,56,-49}, -{64,56,-48}, -{64,56,-47}, -{64,56,-46}, -{64,56,-45}, -{64,56,-44}, -{64,56,-43}, -{64,56,-42}, -{64,56,-41}, -{64,56,-40}, -{64,56,-39}, -{64,56,-38}, -{64,56,-37}, -{64,56,-36}, -{64,56,-35}, -{64,56,-34}, -{64,56,-33}, -{64,56,-32}, -{64,56,-31}, -{64,56,-30}, -{64,56,-29}, -{64,56,-28}, -{64,56,-27}, -{64,56,-26}, -{64,56,-25}, -{64,56,-24}, -{64,56,-23}, -{64,56,-22}, -{64,56,-21}, -{64,56,-20}, -{64,56,-19}, -{64,56,-18}, -{64,56,-17}, -{64,56,-16}, -{64,56,-15}, -{64,56,-14}, -{64,56,-13}, -{64,56,-12}, -{64,56,-11}, -{64,56,-10}, -{64,56,-9}, -{64,56,-8}, -{64,56,-7}, -{64,56,-6}, -{64,56,-5}, -{64,56,-4}, -{64,56,-3}, -{64,56,-2}, -{64,56,-1}, -{64,56,0}, -{64,56,1}, -{64,56,2}, -{64,56,3}, -{64,56,4}, -{64,56,5}, -{64,56,6}, -{64,56,7}, -{64,56,8}, -{64,56,9}, -{64,56,10}, -{64,56,11}, -{64,56,12}, -{64,56,13}, -{64,56,14}, -{64,56,15}, -{64,56,16}, -{64,56,17}, -{64,56,18}, -{64,56,19}, -{64,56,20}, -{64,56,21}, -{64,56,22}, -{64,56,23}, -{64,56,24}, -{64,56,25}, -{64,56,26}, -{64,56,27}, -{64,56,28}, -{64,56,29}, -{64,56,30}, -{64,56,31}, -{64,56,32}, -{64,57,-55}, -{64,57,-54}, -{64,57,-53}, -{64,57,-52}, -{64,57,-51}, -{64,57,-50}, -{64,57,-49}, -{64,57,-48}, -{64,57,-47}, -{64,57,-46}, -{64,57,-45}, -{64,57,-44}, -{64,57,-43}, -{64,57,-42}, -{64,57,-41}, -{64,57,-40}, -{64,57,-39}, -{64,57,-38}, -{64,57,-37}, -{64,57,-36}, -{64,57,-35}, -{64,57,-34}, -{64,57,-33}, -{64,57,-32}, -{64,57,-31}, -{64,57,-30}, -{64,57,-29}, -{64,57,-28}, -{64,57,-27}, -{64,57,-26}, -{64,57,-25}, -{64,57,-24}, -{64,57,-23}, -{64,57,-22}, -{64,57,-21}, -{64,57,-20}, -{64,57,-19}, -{64,57,-18}, -{64,57,-17}, -{64,57,-16}, -{64,57,-15}, -{64,57,-14}, -{64,57,-13}, -{64,57,-12}, -{64,57,-11}, -{64,57,-10}, -{64,57,-9}, -{64,57,-8}, -{64,57,-7}, -{64,57,-6}, -{64,57,-5}, -{64,57,-4}, -{64,57,-3}, -{64,57,-2}, -{64,57,-1}, -{64,57,0}, -{64,57,1}, -{64,57,2}, -{64,57,3}, -{64,57,4}, -{64,57,5}, -{64,57,6}, -{64,57,7}, -{64,57,8}, -{64,57,9}, -{64,57,10}, -{64,57,11}, -{64,57,12}, -{64,57,13}, -{64,57,14}, -{64,57,15}, -{64,57,16}, -{64,57,17}, -{64,57,18}, -{64,57,19}, -{64,57,20}, -{64,57,21}, -{64,57,22}, -{64,57,23}, -{64,57,24}, -{64,57,25}, -{64,57,26}, -{64,57,27}, -{64,58,-55}, -{64,58,-54}, -{64,58,-53}, -{64,58,-52}, -{64,58,-51}, -{64,58,-50}, -{64,58,-49}, -{64,58,-48}, -{64,58,-47}, -{64,58,-46}, -{64,58,-45}, -{64,58,-44}, -{64,58,-43}, -{64,58,-42}, -{64,58,-41}, -{64,58,-40}, -{64,58,-39}, -{64,58,-38}, -{64,58,-37}, -{64,58,-36}, -{64,58,-35}, -{64,58,-34}, -{64,58,-33}, -{64,58,-32}, -{64,58,-31}, -{64,58,-30}, -{64,58,-29}, -{64,58,-28}, -{64,58,-27}, -{64,58,-26}, -{64,58,-25}, -{64,58,-24}, -{64,58,-23}, -{64,58,-22}, -{64,58,-21}, -{64,58,-20}, -{64,58,-19}, -{64,58,-18}, -{64,58,-17}, -{64,58,-16}, -{64,58,-15}, -{64,58,-14}, -{64,58,-13}, -{64,58,-12}, -{64,58,-11}, -{64,58,-10}, -{64,58,-9}, -{64,58,-8}, -{64,58,-7}, -{64,58,-6}, -{64,58,-5}, -{64,58,-4}, -{64,58,-3}, -{64,58,-2}, -{64,58,-1}, -{64,58,0}, -{64,58,1}, -{64,58,2}, -{64,58,3}, -{64,58,4}, -{64,58,5}, -{64,58,6}, -{64,58,7}, -{64,58,8}, -{64,58,9}, -{64,58,10}, -{64,58,11}, -{64,58,12}, -{64,58,13}, -{64,58,14}, -{64,58,15}, -{64,58,16}, -{64,58,17}, -{64,58,18}, -{64,58,19}, -{64,58,20}, -{64,58,21}, -{64,58,22}, -{64,59,-55}, -{64,59,-54}, -{64,59,-53}, -{64,59,-52}, -{64,59,-51}, -{64,59,-50}, -{64,59,-49}, -{64,59,-48}, -{64,59,-47}, -{64,59,-46}, -{64,59,-45}, -{64,59,-44}, -{64,59,-43}, -{64,59,-42}, -{64,59,-41}, -{64,59,-40}, -{64,59,-39}, -{64,59,-38}, -{64,59,-37}, -{64,59,-36}, -{64,59,-35}, -{64,59,-34}, -{64,59,-33}, -{64,59,-32}, -{64,59,-31}, -{64,59,-30}, -{64,59,-29}, -{64,59,-28}, -{64,59,-27}, -{64,59,-26}, -{64,59,-25}, -{64,59,-24}, -{64,59,-23}, -{64,59,-22}, -{64,59,-21}, -{64,59,-20}, -{64,59,-19}, -{64,59,-18}, -{64,59,-17}, -{64,59,-16}, -{64,59,-15}, -{64,59,-14}, -{64,59,-13}, -{64,59,-12}, -{64,59,-11}, -{64,59,-10}, -{64,59,-9}, -{64,59,-8}, -{64,59,-7}, -{64,59,-6}, -{64,59,-5}, -{64,59,-4}, -{64,59,-3}, -{64,59,-2}, -{64,59,-1}, -{64,59,0}, -{64,59,1}, -{64,59,2}, -{64,59,3}, -{64,59,4}, -{64,59,5}, -{64,59,6}, -{64,59,7}, -{64,59,8}, -{64,59,9}, -{64,59,10}, -{64,59,11}, -{64,59,12}, -{64,59,13}, -{64,59,14}, -{64,59,15}, -{64,59,16}, -{64,59,17}, -{64,59,18}, -{64,60,-55}, -{64,60,-54}, -{64,60,-53}, -{64,60,-52}, -{64,60,-51}, -{64,60,-50}, -{64,60,-49}, -{64,60,-48}, -{64,60,-47}, -{64,60,-46}, -{64,60,-45}, -{64,60,-44}, -{64,60,-43}, -{64,60,-42}, -{64,60,-41}, -{64,60,-40}, -{64,60,-39}, -{64,60,-38}, -{64,60,-37}, -{64,60,-36}, -{64,60,-35}, -{64,60,-34}, -{64,60,-33}, -{64,60,-32}, -{64,60,-31}, -{64,60,-30}, -{64,60,-29}, -{64,60,-28}, -{64,60,-27}, -{64,60,-26}, -{64,60,-25}, -{64,60,-24}, -{64,60,-23}, -{64,60,-22}, -{64,60,-21}, -{64,60,-20}, -{64,60,-19}, -{64,60,-18}, -{64,60,-17}, -{64,60,-16}, -{64,60,-15}, -{64,60,-14}, -{64,60,-13}, -{64,60,-12}, -{64,60,-11}, -{64,60,-10}, -{64,60,-9}, -{64,60,-8}, -{64,60,-7}, -{64,60,-6}, -{64,60,-5}, -{64,60,-4}, -{64,60,-3}, -{64,60,-2}, -{64,60,-1}, -{64,60,0}, -{64,60,1}, -{64,60,2}, -{64,60,3}, -{64,60,4}, -{64,60,5}, -{64,60,6}, -{64,60,7}, -{64,60,8}, -{64,60,9}, -{64,60,10}, -{64,60,11}, -{64,60,12}, -{64,60,13}, -{64,60,14}, -{64,61,-55}, -{64,61,-54}, -{64,61,-53}, -{64,61,-52}, -{64,61,-51}, -{64,61,-50}, -{64,61,-49}, -{64,61,-48}, -{64,61,-47}, -{64,61,-46}, -{64,61,-45}, -{64,61,-44}, -{64,61,-43}, -{64,61,-42}, -{64,61,-41}, -{64,61,-40}, -{64,61,-39}, -{64,61,-38}, -{64,61,-37}, -{64,61,-36}, -{64,61,-35}, -{64,61,-34}, -{64,61,-33}, -{64,61,-32}, -{64,61,-31}, -{64,61,-30}, -{64,61,-29}, -{64,61,-28}, -{64,61,-27}, -{64,61,-26}, -{64,61,-25}, -{64,61,-24}, -{64,61,-23}, -{64,61,-22}, -{64,61,-21}, -{64,61,-20}, -{64,61,-19}, -{64,61,-18}, -{64,61,-17}, -{64,61,-16}, -{64,61,-15}, -{64,61,-14}, -{64,61,-13}, -{64,61,-12}, -{64,61,-11}, -{64,61,-10}, -{64,61,-9}, -{64,61,-8}, -{64,61,-7}, -{64,61,-6}, -{64,61,-5}, -{64,61,-4}, -{64,61,-3}, -{64,61,-2}, -{64,61,-1}, -{64,61,0}, -{64,61,1}, -{64,61,2}, -{64,61,3}, -{64,61,4}, -{64,61,5}, -{64,61,6}, -{64,61,7}, -{64,61,8}, -{64,61,9}, -{64,61,10}, -{64,62,-55}, -{64,62,-54}, -{64,62,-53}, -{64,62,-52}, -{64,62,-51}, -{64,62,-50}, -{64,62,-49}, -{64,62,-48}, -{64,62,-47}, -{64,62,-46}, -{64,62,-45}, -{64,62,-44}, -{64,62,-43}, -{64,62,-42}, -{64,62,-41}, -{64,62,-40}, -{64,62,-39}, -{64,62,-38}, -{64,62,-37}, -{64,62,-36}, -{64,62,-35}, -{64,62,-34}, -{64,62,-33}, -{64,62,-32}, -{64,62,-31}, -{64,62,-30}, -{64,62,-29}, -{64,62,-28}, -{64,62,-27}, -{64,62,-26}, -{64,62,-25}, -{64,62,-24}, -{64,62,-23}, -{64,62,-22}, -{64,62,-21}, -{64,62,-20}, -{64,62,-19}, -{64,62,-18}, -{64,62,-17}, -{64,62,-16}, -{64,62,-15}, -{64,62,-14}, -{64,62,-13}, -{64,62,-12}, -{64,62,-11}, -{64,62,-10}, -{64,62,-9}, -{64,62,-8}, -{64,62,-7}, -{64,62,-6}, -{64,62,-5}, -{64,62,-4}, -{64,62,-3}, -{64,62,-2}, -{64,62,-1}, -{64,62,0}, -{64,62,1}, -{64,62,2}, -{64,62,3}, -{64,62,4}, -{64,62,5}, -{64,62,6}, -{64,63,-55}, -{64,63,-54}, -{64,63,-53}, -{64,63,-52}, -{64,63,-51}, -{64,63,-50}, -{64,63,-49}, -{64,63,-48}, -{64,63,-47}, -{64,63,-46}, -{64,63,-45}, -{64,63,-44}, -{64,63,-43}, -{64,63,-42}, -{64,63,-41}, -{64,63,-40}, -{64,63,-39}, -{64,63,-38}, -{64,63,-37}, -{64,63,-36}, -{64,63,-35}, -{64,63,-34}, -{64,63,-33}, -{64,63,-32}, -{64,63,-31}, -{64,63,-30}, -{64,63,-29}, -{64,63,-28}, -{64,63,-27}, -{64,63,-26}, -{64,63,-25}, -{64,63,-24}, -{64,63,-23}, -{64,63,-22}, -{64,63,-21}, -{64,63,-20}, -{64,63,-19}, -{64,63,-18}, -{64,63,-17}, -{64,63,-16}, -{64,63,-15}, -{64,63,-14}, -{64,63,-13}, -{64,63,-12}, -{64,63,-11}, -{64,63,-10}, -{64,63,-9}, -{64,63,-8}, -{64,63,-7}, -{64,63,-6}, -{64,63,-5}, -{64,63,-4}, -{64,63,-3}, -{64,63,-2}, -{64,63,-1}, -{64,63,0}, -{64,63,1}, -{64,63,2}, -{64,63,3}, -{64,64,-55}, -{64,64,-54}, -{64,64,-53}, -{64,64,-52}, -{64,64,-51}, -{64,64,-50}, -{64,64,-49}, -{64,64,-48}, -{64,64,-47}, -{64,64,-46}, -{64,64,-45}, -{64,64,-44}, -{64,64,-43}, -{64,64,-42}, -{64,64,-41}, -{64,64,-40}, -{64,64,-39}, -{64,64,-38}, -{64,64,-37}, -{64,64,-36}, -{64,64,-35}, -{64,64,-34}, -{64,64,-33}, -{64,64,-32}, -{64,64,-31}, -{64,64,-30}, -{64,64,-29}, -{64,64,-28}, -{64,64,-27}, -{64,64,-26}, -{64,64,-25}, -{64,64,-24}, -{64,64,-23}, -{64,64,-22}, -{64,64,-21}, -{64,64,-20}, -{64,64,-19}, -{64,64,-18}, -{64,64,-17}, -{64,64,-16}, -{64,64,-15}, -{64,64,-14}, -{64,64,-13}, -{64,64,-12}, -{64,64,-11}, -{64,64,-10}, -{64,64,-9}, -{64,64,-8}, -{64,64,-7}, -{64,64,-6}, -{64,64,-5}, -{64,64,-4}, -{64,64,-3}, -{64,64,-2}, -{64,64,-1}, -{64,64,0}, -{64,65,-55}, -{64,65,-54}, -{64,65,-53}, -{64,65,-52}, -{64,65,-51}, -{64,65,-50}, -{64,65,-49}, -{64,65,-48}, -{64,65,-47}, -{64,65,-46}, -{64,65,-45}, -{64,65,-44}, -{64,65,-43}, -{64,65,-42}, -{64,65,-41}, -{64,65,-40}, -{64,65,-39}, -{64,65,-38}, -{64,65,-37}, -{64,65,-36}, -{64,65,-35}, -{64,65,-34}, -{64,65,-33}, -{64,65,-32}, -{64,65,-31}, -{64,65,-30}, -{64,65,-29}, -{64,65,-28}, -{64,65,-27}, -{64,65,-26}, -{64,65,-25}, -{64,65,-24}, -{64,65,-23}, -{64,65,-22}, -{64,65,-21}, -{64,65,-20}, -{64,65,-19}, -{64,65,-18}, -{64,65,-17}, -{64,65,-16}, -{64,65,-15}, -{64,65,-14}, -{64,65,-13}, -{64,65,-12}, -{64,65,-11}, -{64,65,-10}, -{64,65,-9}, -{64,65,-8}, -{64,65,-7}, -{64,65,-6}, -{64,65,-5}, -{64,65,-4}, -{64,65,-3}, -{64,66,-55}, -{64,66,-54}, -{64,66,-53}, -{64,66,-52}, -{64,66,-51}, -{64,66,-50}, -{64,66,-49}, -{64,66,-48}, -{64,66,-47}, -{64,66,-46}, -{64,66,-45}, -{64,66,-44}, -{64,66,-43}, -{64,66,-42}, -{64,66,-41}, -{64,66,-40}, -{64,66,-39}, -{64,66,-38}, -{64,66,-37}, -{64,66,-36}, -{64,66,-35}, -{64,66,-34}, -{64,66,-33}, -{64,66,-32}, -{64,66,-31}, -{64,66,-30}, -{64,66,-29}, -{64,66,-28}, -{64,66,-27}, -{64,66,-26}, -{64,66,-25}, -{64,66,-24}, -{64,66,-23}, -{64,66,-22}, -{64,66,-21}, -{64,66,-20}, -{64,66,-19}, -{64,66,-18}, -{64,66,-17}, -{64,66,-16}, -{64,66,-15}, -{64,66,-14}, -{64,66,-13}, -{64,66,-12}, -{64,66,-11}, -{64,66,-10}, -{64,66,-9}, -{64,66,-8}, -{64,66,-7}, -{64,66,-6}, -{64,67,-55}, -{64,67,-54}, -{64,67,-53}, -{64,67,-52}, -{64,67,-51}, -{64,67,-50}, -{64,67,-49}, -{64,67,-48}, -{64,67,-47}, -{64,67,-46}, -{64,67,-45}, -{64,67,-44}, -{64,67,-43}, -{64,67,-42}, -{64,67,-41}, -{64,67,-40}, -{64,67,-39}, -{64,67,-38}, -{64,67,-37}, -{64,67,-36}, -{64,67,-35}, -{64,67,-34}, -{64,67,-33}, -{64,67,-32}, -{64,67,-31}, -{64,67,-30}, -{64,67,-29}, -{64,67,-28}, -{64,67,-27}, -{64,67,-26}, -{64,67,-25}, -{64,67,-24}, -{64,67,-23}, -{64,67,-22}, -{64,67,-21}, -{64,67,-20}, -{64,67,-19}, -{64,67,-18}, -{64,67,-17}, -{64,67,-16}, -{64,67,-15}, -{64,67,-14}, -{64,67,-13}, -{64,67,-12}, -{64,67,-11}, -{64,67,-10}, -{64,67,-9}, -{64,68,-55}, -{64,68,-54}, -{64,68,-53}, -{64,68,-52}, -{64,68,-51}, -{64,68,-50}, -{64,68,-49}, -{64,68,-48}, -{64,68,-47}, -{64,68,-46}, -{64,68,-45}, -{64,68,-44}, -{64,68,-43}, -{64,68,-42}, -{64,68,-41}, -{64,68,-40}, -{64,68,-39}, -{64,68,-38}, -{64,68,-37}, -{64,68,-36}, -{64,68,-35}, -{64,68,-34}, -{64,68,-33}, -{64,68,-32}, -{64,68,-31}, -{64,68,-30}, -{64,68,-29}, -{64,68,-28}, -{64,68,-27}, -{64,68,-26}, -{64,68,-25}, -{64,68,-24}, -{64,68,-23}, -{64,68,-22}, -{64,68,-21}, -{64,68,-20}, -{64,68,-19}, -{64,68,-18}, -{64,68,-17}, -{64,68,-16}, -{64,68,-15}, -{64,68,-14}, -{64,68,-13}, -{64,68,-12}, -{64,69,-55}, -{64,69,-54}, -{64,69,-53}, -{64,69,-52}, -{64,69,-51}, -{64,69,-50}, -{64,69,-49}, -{64,69,-48}, -{64,69,-47}, -{64,69,-46}, -{64,69,-45}, -{64,69,-44}, -{64,69,-43}, -{64,69,-42}, -{64,69,-41}, -{64,69,-40}, -{64,69,-39}, -{64,69,-38}, -{64,69,-37}, -{64,69,-36}, -{64,69,-35}, -{64,69,-34}, -{64,69,-33}, -{64,69,-32}, -{64,69,-31}, -{64,69,-30}, -{64,69,-29}, -{64,69,-28}, -{64,69,-27}, -{64,69,-26}, -{64,69,-25}, -{64,69,-24}, -{64,69,-23}, -{64,69,-22}, -{64,69,-21}, -{64,69,-20}, -{64,69,-19}, -{64,69,-18}, -{64,69,-17}, -{64,69,-16}, -{64,69,-15}, -{64,70,-55}, -{64,70,-54}, -{64,70,-53}, -{64,70,-52}, -{64,70,-51}, -{64,70,-50}, -{64,70,-49}, -{64,70,-48}, -{64,70,-47}, -{64,70,-46}, -{64,70,-45}, -{64,70,-44}, -{64,70,-43}, -{64,70,-42}, -{64,70,-41}, -{64,70,-40}, -{64,70,-39}, -{64,70,-38}, -{64,70,-37}, -{64,70,-36}, -{64,70,-35}, -{64,70,-34}, -{64,70,-33}, -{64,70,-32}, -{64,70,-31}, -{64,70,-30}, -{64,70,-29}, -{64,70,-28}, -{64,70,-27}, -{64,70,-26}, -{64,70,-25}, -{64,70,-24}, -{64,70,-23}, -{64,70,-22}, -{64,70,-21}, -{64,70,-20}, -{64,70,-19}, -{64,70,-18}, -{64,70,-17}, -{64,71,-55}, -{64,71,-54}, -{64,71,-53}, -{64,71,-52}, -{64,71,-51}, -{64,71,-50}, -{64,71,-49}, -{64,71,-48}, -{64,71,-47}, -{64,71,-46}, -{64,71,-45}, -{64,71,-44}, -{64,71,-43}, -{64,71,-42}, -{64,71,-41}, -{64,71,-40}, -{64,71,-39}, -{64,71,-38}, -{64,71,-37}, -{64,71,-36}, -{64,71,-35}, -{64,71,-34}, -{64,71,-33}, -{64,71,-32}, -{64,71,-31}, -{64,71,-30}, -{64,71,-29}, -{64,71,-28}, -{64,71,-27}, -{64,71,-26}, -{64,71,-25}, -{64,71,-24}, -{64,71,-23}, -{64,71,-22}, -{64,71,-21}, -{64,71,-20}, -{64,72,-55}, -{64,72,-54}, -{64,72,-53}, -{64,72,-52}, -{64,72,-51}, -{64,72,-50}, -{64,72,-49}, -{64,72,-48}, -{64,72,-47}, -{64,72,-46}, -{64,72,-45}, -{64,72,-44}, -{64,72,-43}, -{64,72,-42}, -{64,72,-41}, -{64,72,-40}, -{64,72,-39}, -{64,72,-38}, -{64,72,-37}, -{64,72,-36}, -{64,72,-35}, -{64,72,-34}, -{64,72,-33}, -{64,72,-32}, -{64,72,-31}, -{64,72,-30}, -{64,72,-29}, -{64,72,-28}, -{64,72,-27}, -{64,72,-26}, -{64,72,-25}, -{64,72,-24}, -{64,72,-23}, -{64,73,-55}, -{64,73,-54}, -{64,73,-53}, -{64,73,-52}, -{64,73,-51}, -{64,73,-50}, -{64,73,-49}, -{64,73,-48}, -{64,73,-47}, -{64,73,-46}, -{64,73,-45}, -{64,73,-44}, -{64,73,-43}, -{64,73,-42}, -{64,73,-41}, -{64,73,-40}, -{64,73,-39}, -{64,73,-38}, -{64,73,-37}, -{64,73,-36}, -{64,73,-35}, -{64,73,-34}, -{64,73,-33}, -{64,73,-32}, -{64,73,-31}, -{64,73,-30}, -{64,73,-29}, -{64,73,-28}, -{64,73,-27}, -{64,73,-26}, -{64,73,-25}, -{64,74,-55}, -{64,74,-54}, -{64,74,-53}, -{64,74,-52}, -{64,74,-51}, -{64,74,-50}, -{64,74,-49}, -{64,74,-48}, -{64,74,-47}, -{64,74,-46}, -{64,74,-45}, -{64,74,-44}, -{64,74,-43}, -{64,74,-42}, -{64,74,-41}, -{64,74,-40}, -{64,74,-39}, -{64,74,-38}, -{64,74,-37}, -{64,74,-36}, -{64,74,-35}, -{64,74,-34}, -{64,74,-33}, -{64,74,-32}, -{64,74,-31}, -{64,74,-30}, -{64,74,-29}, -{64,74,-28}, -{64,74,-27}, -{64,75,-55}, -{64,75,-54}, -{64,75,-53}, -{64,75,-52}, -{64,75,-51}, -{64,75,-50}, -{64,75,-49}, -{64,75,-48}, -{64,75,-47}, -{64,75,-46}, -{64,75,-45}, -{64,75,-44}, -{64,75,-43}, -{64,75,-42}, -{64,75,-41}, -{64,75,-40}, -{64,75,-39}, -{64,75,-38}, -{64,75,-37}, -{64,75,-36}, -{64,75,-35}, -{64,75,-34}, -{64,75,-33}, -{64,75,-32}, -{64,75,-31}, -{64,75,-30}, -{64,76,-55}, -{64,76,-54}, -{64,76,-53}, -{64,76,-52}, -{64,76,-51}, -{64,76,-50}, -{64,76,-49}, -{64,76,-48}, -{64,76,-47}, -{64,76,-46}, -{64,76,-45}, -{64,76,-44}, -{64,76,-43}, -{64,76,-42}, -{64,76,-41}, -{64,76,-40}, -{64,76,-39}, -{64,76,-38}, -{64,76,-37}, -{64,76,-36}, -{64,76,-35}, -{64,76,-34}, -{64,76,-33}, -{64,76,-32}, -{64,77,-55}, -{64,77,-54}, -{64,77,-53}, -{64,77,-52}, -{64,77,-51}, -{64,77,-50}, -{64,77,-49}, -{64,77,-48}, -{64,77,-47}, -{64,77,-46}, -{64,77,-45}, -{64,77,-44}, -{64,77,-43}, -{64,77,-42}, -{64,77,-41}, -{64,77,-40}, -{64,77,-39}, -{64,77,-38}, -{64,77,-37}, -{64,77,-36}, -{64,77,-35}, -{64,77,-34}, -{64,78,-55}, -{64,78,-54}, -{64,78,-53}, -{64,78,-52}, -{64,78,-51}, -{64,78,-50}, -{64,78,-49}, -{64,78,-48}, -{64,78,-47}, -{64,78,-46}, -{64,78,-45}, -{64,78,-44}, -{64,78,-43}, -{64,78,-42}, -{64,78,-41}, -{64,78,-40}, -{64,78,-39}, -{64,78,-38}, -{64,78,-37}, -{64,78,-36}, -{64,79,-55}, -{64,79,-54}, -{64,79,-53}, -{64,79,-52}, -{64,79,-51}, -{64,79,-50}, -{64,79,-49}, -{64,79,-48}, -{64,79,-47}, -{64,79,-46}, -{64,79,-45}, -{64,79,-44}, -{64,79,-43}, -{64,79,-42}, -{64,79,-41}, -{64,79,-40}, -{64,79,-39}, -{64,79,-38}, -{64,80,-55}, -{64,80,-54}, -{64,80,-53}, -{64,80,-52}, -{64,80,-51}, -{64,80,-50}, -{64,80,-49}, -{64,80,-48}, -{64,80,-47}, -{64,80,-46}, -{64,80,-45}, -{64,80,-44}, -{64,80,-43}, -{64,80,-42}, -{64,80,-41}, -{64,80,-40}, -{64,81,-55}, -{64,81,-54}, -{64,81,-53}, -{64,81,-52}, -{64,81,-51}, -{64,81,-50}, -{64,81,-49}, -{64,81,-48}, -{64,81,-47}, -{64,81,-46}, -{64,81,-45}, -{64,81,-44}, -{64,81,-43}, -{64,82,-55}, -{64,82,-54}, -{64,82,-53}, -{64,82,-52}, -{64,82,-51}, -{64,82,-50}, -{64,82,-49}, -{64,82,-48}, -{64,82,-47}, -{64,82,-46}, -{64,82,-45}, -{64,83,-55}, -{64,83,-54}, -{64,83,-53}, -{64,83,-52}, -{64,83,-51}, -{64,83,-50}, -{64,83,-49}, -{64,83,-48}, -{64,83,-47}, -{64,84,-55}, -{64,84,-54}, -{64,84,-53}, -{64,84,-52}, -{64,84,-51}, -{64,84,-50}, -{64,84,-49}, -{64,84,-48}, -{64,85,-55}, -{64,85,-54}, -{64,85,-53}, -{64,85,-52}, -{64,85,-51}, -{64,85,-50}, -{64,86,-55}, -{64,86,-54}, -{64,86,-53}, -{64,86,-52}, -{64,87,-55}, -{64,87,-54}, -{65,-67,63}, -{65,-67,64}, -{65,-67,65}, -{65,-66,58}, -{65,-66,59}, -{65,-66,60}, -{65,-66,61}, -{65,-66,62}, -{65,-66,63}, -{65,-66,64}, -{65,-66,65}, -{65,-65,54}, -{65,-65,55}, -{65,-65,56}, -{65,-65,57}, -{65,-65,58}, -{65,-65,59}, -{65,-65,60}, -{65,-65,61}, -{65,-65,62}, -{65,-65,63}, -{65,-65,64}, -{65,-65,65}, -{65,-64,50}, -{65,-64,51}, -{65,-64,52}, -{65,-64,53}, -{65,-64,54}, -{65,-64,55}, -{65,-64,56}, -{65,-64,57}, -{65,-64,58}, -{65,-64,59}, -{65,-64,60}, -{65,-64,61}, -{65,-64,62}, -{65,-64,63}, -{65,-64,64}, -{65,-64,65}, -{65,-63,47}, -{65,-63,48}, -{65,-63,49}, -{65,-63,50}, -{65,-63,51}, -{65,-63,52}, -{65,-63,53}, -{65,-63,54}, -{65,-63,55}, -{65,-63,56}, -{65,-63,57}, -{65,-63,58}, -{65,-63,59}, -{65,-63,60}, -{65,-63,61}, -{65,-63,62}, -{65,-63,63}, -{65,-63,64}, -{65,-63,65}, -{65,-62,44}, -{65,-62,45}, -{65,-62,46}, -{65,-62,47}, -{65,-62,48}, -{65,-62,49}, -{65,-62,50}, -{65,-62,51}, -{65,-62,52}, -{65,-62,53}, -{65,-62,54}, -{65,-62,55}, -{65,-62,56}, -{65,-62,57}, -{65,-62,58}, -{65,-62,59}, -{65,-62,60}, -{65,-62,61}, -{65,-62,62}, -{65,-62,63}, -{65,-62,64}, -{65,-62,65}, -{65,-61,41}, -{65,-61,42}, -{65,-61,43}, -{65,-61,44}, -{65,-61,45}, -{65,-61,46}, -{65,-61,47}, -{65,-61,48}, -{65,-61,49}, -{65,-61,50}, -{65,-61,51}, -{65,-61,52}, -{65,-61,53}, -{65,-61,54}, -{65,-61,55}, -{65,-61,56}, -{65,-61,57}, -{65,-61,58}, -{65,-61,59}, -{65,-61,60}, -{65,-61,61}, -{65,-61,62}, -{65,-61,63}, -{65,-61,64}, -{65,-61,65}, -{65,-60,38}, -{65,-60,39}, -{65,-60,40}, -{65,-60,41}, -{65,-60,42}, -{65,-60,43}, -{65,-60,44}, -{65,-60,45}, -{65,-60,46}, -{65,-60,47}, -{65,-60,48}, -{65,-60,49}, -{65,-60,50}, -{65,-60,51}, -{65,-60,52}, -{65,-60,53}, -{65,-60,54}, -{65,-60,55}, -{65,-60,56}, -{65,-60,57}, -{65,-60,58}, -{65,-60,59}, -{65,-60,60}, -{65,-60,61}, -{65,-60,62}, -{65,-60,63}, -{65,-60,64}, -{65,-60,65}, -{65,-59,35}, -{65,-59,36}, -{65,-59,37}, -{65,-59,38}, -{65,-59,39}, -{65,-59,40}, -{65,-59,41}, -{65,-59,42}, -{65,-59,43}, -{65,-59,44}, -{65,-59,45}, -{65,-59,46}, -{65,-59,47}, -{65,-59,48}, -{65,-59,49}, -{65,-59,50}, -{65,-59,51}, -{65,-59,52}, -{65,-59,53}, -{65,-59,54}, -{65,-59,55}, -{65,-59,56}, -{65,-59,57}, -{65,-59,58}, -{65,-59,59}, -{65,-59,60}, -{65,-59,61}, -{65,-59,62}, -{65,-59,63}, -{65,-59,64}, -{65,-59,65}, -{65,-58,32}, -{65,-58,33}, -{65,-58,34}, -{65,-58,35}, -{65,-58,36}, -{65,-58,37}, -{65,-58,38}, -{65,-58,39}, -{65,-58,40}, -{65,-58,41}, -{65,-58,42}, -{65,-58,43}, -{65,-58,44}, -{65,-58,45}, -{65,-58,46}, -{65,-58,47}, -{65,-58,48}, -{65,-58,49}, -{65,-58,50}, -{65,-58,51}, -{65,-58,52}, -{65,-58,53}, -{65,-58,54}, -{65,-58,55}, -{65,-58,56}, -{65,-58,57}, -{65,-58,58}, -{65,-58,59}, -{65,-58,60}, -{65,-58,61}, -{65,-58,62}, -{65,-58,63}, -{65,-58,64}, -{65,-58,65}, -{65,-57,29}, -{65,-57,30}, -{65,-57,31}, -{65,-57,32}, -{65,-57,33}, -{65,-57,34}, -{65,-57,35}, -{65,-57,36}, -{65,-57,37}, -{65,-57,38}, -{65,-57,39}, -{65,-57,40}, -{65,-57,41}, -{65,-57,42}, -{65,-57,43}, -{65,-57,44}, -{65,-57,45}, -{65,-57,46}, -{65,-57,47}, -{65,-57,48}, -{65,-57,49}, -{65,-57,50}, -{65,-57,51}, -{65,-57,52}, -{65,-57,53}, -{65,-57,54}, -{65,-57,55}, -{65,-57,56}, -{65,-57,57}, -{65,-57,58}, -{65,-57,59}, -{65,-57,60}, -{65,-57,61}, -{65,-57,62}, -{65,-57,63}, -{65,-57,64}, -{65,-57,65}, -{65,-56,27}, -{65,-56,28}, -{65,-56,29}, -{65,-56,30}, -{65,-56,31}, -{65,-56,32}, -{65,-56,33}, -{65,-56,34}, -{65,-56,35}, -{65,-56,36}, -{65,-56,37}, -{65,-56,38}, -{65,-56,39}, -{65,-56,40}, -{65,-56,41}, -{65,-56,42}, -{65,-56,43}, -{65,-56,44}, -{65,-56,45}, -{65,-56,46}, -{65,-56,47}, -{65,-56,48}, -{65,-56,49}, -{65,-56,50}, -{65,-56,51}, -{65,-56,52}, -{65,-56,53}, -{65,-56,54}, -{65,-56,55}, -{65,-56,56}, -{65,-56,57}, -{65,-56,58}, -{65,-56,59}, -{65,-56,60}, -{65,-56,61}, -{65,-56,62}, -{65,-56,63}, -{65,-56,64}, -{65,-56,65}, -{65,-55,25}, -{65,-55,26}, -{65,-55,27}, -{65,-55,28}, -{65,-55,29}, -{65,-55,30}, -{65,-55,31}, -{65,-55,32}, -{65,-55,33}, -{65,-55,34}, -{65,-55,35}, -{65,-55,36}, -{65,-55,37}, -{65,-55,38}, -{65,-55,39}, -{65,-55,40}, -{65,-55,41}, -{65,-55,42}, -{65,-55,43}, -{65,-55,44}, -{65,-55,45}, -{65,-55,46}, -{65,-55,47}, -{65,-55,48}, -{65,-55,49}, -{65,-55,50}, -{65,-55,51}, -{65,-55,52}, -{65,-55,53}, -{65,-55,54}, -{65,-55,55}, -{65,-55,56}, -{65,-55,57}, -{65,-55,58}, -{65,-55,59}, -{65,-55,60}, -{65,-55,61}, -{65,-55,62}, -{65,-55,63}, -{65,-55,64}, -{65,-55,65}, -{65,-54,22}, -{65,-54,23}, -{65,-54,24}, -{65,-54,25}, -{65,-54,26}, -{65,-54,27}, -{65,-54,28}, -{65,-54,29}, -{65,-54,30}, -{65,-54,31}, -{65,-54,32}, -{65,-54,33}, -{65,-54,34}, -{65,-54,35}, -{65,-54,36}, -{65,-54,37}, -{65,-54,38}, -{65,-54,39}, -{65,-54,40}, -{65,-54,41}, -{65,-54,42}, -{65,-54,43}, -{65,-54,44}, -{65,-54,45}, -{65,-54,46}, -{65,-54,47}, -{65,-54,48}, -{65,-54,49}, -{65,-54,50}, -{65,-54,51}, -{65,-54,52}, -{65,-54,53}, -{65,-54,54}, -{65,-54,55}, -{65,-54,56}, -{65,-54,57}, -{65,-54,58}, -{65,-54,59}, -{65,-54,60}, -{65,-54,61}, -{65,-54,62}, -{65,-54,63}, -{65,-54,64}, -{65,-54,65}, -{65,-53,20}, -{65,-53,21}, -{65,-53,22}, -{65,-53,23}, -{65,-53,24}, -{65,-53,25}, -{65,-53,26}, -{65,-53,27}, -{65,-53,28}, -{65,-53,29}, -{65,-53,30}, -{65,-53,31}, -{65,-53,32}, -{65,-53,33}, -{65,-53,34}, -{65,-53,35}, -{65,-53,36}, -{65,-53,37}, -{65,-53,38}, -{65,-53,39}, -{65,-53,40}, -{65,-53,41}, -{65,-53,42}, -{65,-53,43}, -{65,-53,44}, -{65,-53,45}, -{65,-53,46}, -{65,-53,47}, -{65,-53,48}, -{65,-53,49}, -{65,-53,50}, -{65,-53,51}, -{65,-53,52}, -{65,-53,53}, -{65,-53,54}, -{65,-53,55}, -{65,-53,56}, -{65,-53,57}, -{65,-53,58}, -{65,-53,59}, -{65,-53,60}, -{65,-53,61}, -{65,-53,62}, -{65,-53,63}, -{65,-53,64}, -{65,-53,65}, -{65,-52,18}, -{65,-52,19}, -{65,-52,20}, -{65,-52,21}, -{65,-52,22}, -{65,-52,23}, -{65,-52,24}, -{65,-52,25}, -{65,-52,26}, -{65,-52,27}, -{65,-52,28}, -{65,-52,29}, -{65,-52,30}, -{65,-52,31}, -{65,-52,32}, -{65,-52,33}, -{65,-52,34}, -{65,-52,35}, -{65,-52,36}, -{65,-52,37}, -{65,-52,38}, -{65,-52,39}, -{65,-52,40}, -{65,-52,41}, -{65,-52,42}, -{65,-52,43}, -{65,-52,44}, -{65,-52,45}, -{65,-52,46}, -{65,-52,47}, -{65,-52,48}, -{65,-52,49}, -{65,-52,50}, -{65,-52,51}, -{65,-52,52}, -{65,-52,53}, -{65,-52,54}, -{65,-52,55}, -{65,-52,56}, -{65,-52,57}, -{65,-52,58}, -{65,-52,59}, -{65,-52,60}, -{65,-52,61}, -{65,-52,62}, -{65,-52,63}, -{65,-52,64}, -{65,-52,65}, -{65,-51,16}, -{65,-51,17}, -{65,-51,18}, -{65,-51,19}, -{65,-51,20}, -{65,-51,21}, -{65,-51,22}, -{65,-51,23}, -{65,-51,24}, -{65,-51,25}, -{65,-51,26}, -{65,-51,27}, -{65,-51,28}, -{65,-51,29}, -{65,-51,30}, -{65,-51,31}, -{65,-51,32}, -{65,-51,33}, -{65,-51,34}, -{65,-51,35}, -{65,-51,36}, -{65,-51,37}, -{65,-51,38}, -{65,-51,39}, -{65,-51,40}, -{65,-51,41}, -{65,-51,42}, -{65,-51,43}, -{65,-51,44}, -{65,-51,45}, -{65,-51,46}, -{65,-51,47}, -{65,-51,48}, -{65,-51,49}, -{65,-51,50}, -{65,-51,51}, -{65,-51,52}, -{65,-51,53}, -{65,-51,54}, -{65,-51,55}, -{65,-51,56}, -{65,-51,57}, -{65,-51,58}, -{65,-51,59}, -{65,-51,60}, -{65,-51,61}, -{65,-51,62}, -{65,-51,63}, -{65,-51,64}, -{65,-51,65}, -{65,-50,14}, -{65,-50,15}, -{65,-50,16}, -{65,-50,17}, -{65,-50,18}, -{65,-50,19}, -{65,-50,20}, -{65,-50,21}, -{65,-50,22}, -{65,-50,23}, -{65,-50,24}, -{65,-50,25}, -{65,-50,26}, -{65,-50,27}, -{65,-50,28}, -{65,-50,29}, -{65,-50,30}, -{65,-50,31}, -{65,-50,32}, -{65,-50,33}, -{65,-50,34}, -{65,-50,35}, -{65,-50,36}, -{65,-50,37}, -{65,-50,38}, -{65,-50,39}, -{65,-50,40}, -{65,-50,41}, -{65,-50,42}, -{65,-50,43}, -{65,-50,44}, -{65,-50,45}, -{65,-50,46}, -{65,-50,47}, -{65,-50,48}, -{65,-50,49}, -{65,-50,50}, -{65,-50,51}, -{65,-50,52}, -{65,-50,53}, -{65,-50,54}, -{65,-50,55}, -{65,-50,56}, -{65,-50,57}, -{65,-50,58}, -{65,-50,59}, -{65,-50,60}, -{65,-50,61}, -{65,-50,62}, -{65,-50,63}, -{65,-50,64}, -{65,-50,65}, -{65,-49,12}, -{65,-49,13}, -{65,-49,14}, -{65,-49,15}, -{65,-49,16}, -{65,-49,17}, -{65,-49,18}, -{65,-49,19}, -{65,-49,20}, -{65,-49,21}, -{65,-49,22}, -{65,-49,23}, -{65,-49,24}, -{65,-49,25}, -{65,-49,26}, -{65,-49,27}, -{65,-49,28}, -{65,-49,29}, -{65,-49,30}, -{65,-49,31}, -{65,-49,32}, -{65,-49,33}, -{65,-49,34}, -{65,-49,35}, -{65,-49,36}, -{65,-49,37}, -{65,-49,38}, -{65,-49,39}, -{65,-49,40}, -{65,-49,41}, -{65,-49,42}, -{65,-49,43}, -{65,-49,44}, -{65,-49,45}, -{65,-49,46}, -{65,-49,47}, -{65,-49,48}, -{65,-49,49}, -{65,-49,50}, -{65,-49,51}, -{65,-49,52}, -{65,-49,53}, -{65,-49,54}, -{65,-49,55}, -{65,-49,56}, -{65,-49,57}, -{65,-49,58}, -{65,-49,59}, -{65,-49,60}, -{65,-49,61}, -{65,-49,62}, -{65,-49,63}, -{65,-49,64}, -{65,-49,65}, -{65,-48,10}, -{65,-48,11}, -{65,-48,12}, -{65,-48,13}, -{65,-48,14}, -{65,-48,15}, -{65,-48,16}, -{65,-48,17}, -{65,-48,18}, -{65,-48,19}, -{65,-48,20}, -{65,-48,21}, -{65,-48,22}, -{65,-48,23}, -{65,-48,24}, -{65,-48,25}, -{65,-48,26}, -{65,-48,27}, -{65,-48,28}, -{65,-48,29}, -{65,-48,30}, -{65,-48,31}, -{65,-48,32}, -{65,-48,33}, -{65,-48,34}, -{65,-48,35}, -{65,-48,36}, -{65,-48,37}, -{65,-48,38}, -{65,-48,39}, -{65,-48,40}, -{65,-48,41}, -{65,-48,42}, -{65,-48,43}, -{65,-48,44}, -{65,-48,45}, -{65,-48,46}, -{65,-48,47}, -{65,-48,48}, -{65,-48,49}, -{65,-48,50}, -{65,-48,51}, -{65,-48,52}, -{65,-48,53}, -{65,-48,54}, -{65,-48,55}, -{65,-48,56}, -{65,-48,57}, -{65,-48,58}, -{65,-48,59}, -{65,-48,60}, -{65,-48,61}, -{65,-48,62}, -{65,-48,63}, -{65,-48,64}, -{65,-48,65}, -{65,-48,66}, -{65,-47,8}, -{65,-47,9}, -{65,-47,10}, -{65,-47,11}, -{65,-47,12}, -{65,-47,13}, -{65,-47,14}, -{65,-47,15}, -{65,-47,16}, -{65,-47,17}, -{65,-47,18}, -{65,-47,19}, -{65,-47,20}, -{65,-47,21}, -{65,-47,22}, -{65,-47,23}, -{65,-47,24}, -{65,-47,25}, -{65,-47,26}, -{65,-47,27}, -{65,-47,28}, -{65,-47,29}, -{65,-47,30}, -{65,-47,31}, -{65,-47,32}, -{65,-47,33}, -{65,-47,34}, -{65,-47,35}, -{65,-47,36}, -{65,-47,37}, -{65,-47,38}, -{65,-47,39}, -{65,-47,40}, -{65,-47,41}, -{65,-47,42}, -{65,-47,43}, -{65,-47,44}, -{65,-47,45}, -{65,-47,46}, -{65,-47,47}, -{65,-47,48}, -{65,-47,49}, -{65,-47,50}, -{65,-47,51}, -{65,-47,52}, -{65,-47,53}, -{65,-47,54}, -{65,-47,55}, -{65,-47,56}, -{65,-47,57}, -{65,-47,58}, -{65,-47,59}, -{65,-47,60}, -{65,-47,61}, -{65,-47,62}, -{65,-47,63}, -{65,-47,64}, -{65,-47,65}, -{65,-47,66}, -{65,-46,6}, -{65,-46,7}, -{65,-46,8}, -{65,-46,9}, -{65,-46,10}, -{65,-46,11}, -{65,-46,12}, -{65,-46,13}, -{65,-46,14}, -{65,-46,15}, -{65,-46,16}, -{65,-46,17}, -{65,-46,18}, -{65,-46,19}, -{65,-46,20}, -{65,-46,21}, -{65,-46,22}, -{65,-46,23}, -{65,-46,24}, -{65,-46,25}, -{65,-46,26}, -{65,-46,27}, -{65,-46,28}, -{65,-46,29}, -{65,-46,30}, -{65,-46,31}, -{65,-46,32}, -{65,-46,33}, -{65,-46,34}, -{65,-46,35}, -{65,-46,36}, -{65,-46,37}, -{65,-46,38}, -{65,-46,39}, -{65,-46,40}, -{65,-46,41}, -{65,-46,42}, -{65,-46,43}, -{65,-46,44}, -{65,-46,45}, -{65,-46,46}, -{65,-46,47}, -{65,-46,48}, -{65,-46,49}, -{65,-46,50}, -{65,-46,51}, -{65,-46,52}, -{65,-46,53}, -{65,-46,54}, -{65,-46,55}, -{65,-46,56}, -{65,-46,57}, -{65,-46,58}, -{65,-46,59}, -{65,-46,60}, -{65,-46,61}, -{65,-46,62}, -{65,-46,63}, -{65,-46,64}, -{65,-46,65}, -{65,-46,66}, -{65,-45,4}, -{65,-45,5}, -{65,-45,6}, -{65,-45,7}, -{65,-45,8}, -{65,-45,9}, -{65,-45,10}, -{65,-45,11}, -{65,-45,12}, -{65,-45,13}, -{65,-45,14}, -{65,-45,15}, -{65,-45,16}, -{65,-45,17}, -{65,-45,18}, -{65,-45,19}, -{65,-45,20}, -{65,-45,21}, -{65,-45,22}, -{65,-45,23}, -{65,-45,24}, -{65,-45,25}, -{65,-45,26}, -{65,-45,27}, -{65,-45,28}, -{65,-45,29}, -{65,-45,30}, -{65,-45,31}, -{65,-45,32}, -{65,-45,33}, -{65,-45,34}, -{65,-45,35}, -{65,-45,36}, -{65,-45,37}, -{65,-45,38}, -{65,-45,39}, -{65,-45,40}, -{65,-45,41}, -{65,-45,42}, -{65,-45,43}, -{65,-45,44}, -{65,-45,45}, -{65,-45,46}, -{65,-45,47}, -{65,-45,48}, -{65,-45,49}, -{65,-45,50}, -{65,-45,51}, -{65,-45,52}, -{65,-45,53}, -{65,-45,54}, -{65,-45,55}, -{65,-45,56}, -{65,-45,57}, -{65,-45,58}, -{65,-45,59}, -{65,-45,60}, -{65,-45,61}, -{65,-45,62}, -{65,-45,63}, -{65,-45,64}, -{65,-45,65}, -{65,-45,66}, -{65,-44,2}, -{65,-44,3}, -{65,-44,4}, -{65,-44,5}, -{65,-44,6}, -{65,-44,7}, -{65,-44,8}, -{65,-44,9}, -{65,-44,10}, -{65,-44,11}, -{65,-44,12}, -{65,-44,13}, -{65,-44,14}, -{65,-44,15}, -{65,-44,16}, -{65,-44,17}, -{65,-44,18}, -{65,-44,19}, -{65,-44,20}, -{65,-44,21}, -{65,-44,22}, -{65,-44,23}, -{65,-44,24}, -{65,-44,25}, -{65,-44,26}, -{65,-44,27}, -{65,-44,28}, -{65,-44,29}, -{65,-44,30}, -{65,-44,31}, -{65,-44,32}, -{65,-44,33}, -{65,-44,34}, -{65,-44,35}, -{65,-44,36}, -{65,-44,37}, -{65,-44,38}, -{65,-44,39}, -{65,-44,40}, -{65,-44,41}, -{65,-44,42}, -{65,-44,43}, -{65,-44,44}, -{65,-44,45}, -{65,-44,46}, -{65,-44,47}, -{65,-44,48}, -{65,-44,49}, -{65,-44,50}, -{65,-44,51}, -{65,-44,52}, -{65,-44,53}, -{65,-44,54}, -{65,-44,55}, -{65,-44,56}, -{65,-44,57}, -{65,-44,58}, -{65,-44,59}, -{65,-44,60}, -{65,-44,61}, -{65,-44,62}, -{65,-44,63}, -{65,-44,64}, -{65,-44,65}, -{65,-44,66}, -{65,-43,1}, -{65,-43,2}, -{65,-43,3}, -{65,-43,4}, -{65,-43,5}, -{65,-43,6}, -{65,-43,7}, -{65,-43,8}, -{65,-43,9}, -{65,-43,10}, -{65,-43,11}, -{65,-43,12}, -{65,-43,13}, -{65,-43,14}, -{65,-43,15}, -{65,-43,16}, -{65,-43,17}, -{65,-43,18}, -{65,-43,19}, -{65,-43,20}, -{65,-43,21}, -{65,-43,22}, -{65,-43,23}, -{65,-43,24}, -{65,-43,25}, -{65,-43,26}, -{65,-43,27}, -{65,-43,28}, -{65,-43,29}, -{65,-43,30}, -{65,-43,31}, -{65,-43,32}, -{65,-43,33}, -{65,-43,34}, -{65,-43,35}, -{65,-43,36}, -{65,-43,37}, -{65,-43,38}, -{65,-43,39}, -{65,-43,40}, -{65,-43,41}, -{65,-43,42}, -{65,-43,43}, -{65,-43,44}, -{65,-43,45}, -{65,-43,46}, -{65,-43,47}, -{65,-43,48}, -{65,-43,49}, -{65,-43,50}, -{65,-43,51}, -{65,-43,52}, -{65,-43,53}, -{65,-43,54}, -{65,-43,55}, -{65,-43,56}, -{65,-43,57}, -{65,-43,58}, -{65,-43,59}, -{65,-43,60}, -{65,-43,61}, -{65,-43,62}, -{65,-43,63}, -{65,-43,64}, -{65,-43,65}, -{65,-43,66}, -{65,-42,-1}, -{65,-42,0}, -{65,-42,1}, -{65,-42,2}, -{65,-42,3}, -{65,-42,4}, -{65,-42,5}, -{65,-42,6}, -{65,-42,7}, -{65,-42,8}, -{65,-42,9}, -{65,-42,10}, -{65,-42,11}, -{65,-42,12}, -{65,-42,13}, -{65,-42,14}, -{65,-42,15}, -{65,-42,16}, -{65,-42,17}, -{65,-42,18}, -{65,-42,19}, -{65,-42,20}, -{65,-42,21}, -{65,-42,22}, -{65,-42,23}, -{65,-42,24}, -{65,-42,25}, -{65,-42,26}, -{65,-42,27}, -{65,-42,28}, -{65,-42,29}, -{65,-42,30}, -{65,-42,31}, -{65,-42,32}, -{65,-42,33}, -{65,-42,34}, -{65,-42,35}, -{65,-42,36}, -{65,-42,37}, -{65,-42,38}, -{65,-42,39}, -{65,-42,40}, -{65,-42,41}, -{65,-42,42}, -{65,-42,43}, -{65,-42,44}, -{65,-42,45}, -{65,-42,46}, -{65,-42,47}, -{65,-42,48}, -{65,-42,49}, -{65,-42,50}, -{65,-42,51}, -{65,-42,52}, -{65,-42,53}, -{65,-42,54}, -{65,-42,55}, -{65,-42,56}, -{65,-42,57}, -{65,-42,58}, -{65,-42,59}, -{65,-42,60}, -{65,-42,61}, -{65,-42,62}, -{65,-42,63}, -{65,-42,64}, -{65,-42,65}, -{65,-42,66}, -{65,-41,-3}, -{65,-41,-2}, -{65,-41,-1}, -{65,-41,0}, -{65,-41,1}, -{65,-41,2}, -{65,-41,3}, -{65,-41,4}, -{65,-41,5}, -{65,-41,6}, -{65,-41,7}, -{65,-41,8}, -{65,-41,9}, -{65,-41,10}, -{65,-41,11}, -{65,-41,12}, -{65,-41,13}, -{65,-41,14}, -{65,-41,15}, -{65,-41,16}, -{65,-41,17}, -{65,-41,18}, -{65,-41,19}, -{65,-41,20}, -{65,-41,21}, -{65,-41,22}, -{65,-41,23}, -{65,-41,24}, -{65,-41,25}, -{65,-41,26}, -{65,-41,27}, -{65,-41,28}, -{65,-41,29}, -{65,-41,30}, -{65,-41,31}, -{65,-41,32}, -{65,-41,33}, -{65,-41,34}, -{65,-41,35}, -{65,-41,36}, -{65,-41,37}, -{65,-41,38}, -{65,-41,39}, -{65,-41,40}, -{65,-41,41}, -{65,-41,42}, -{65,-41,43}, -{65,-41,44}, -{65,-41,45}, -{65,-41,46}, -{65,-41,47}, -{65,-41,48}, -{65,-41,49}, -{65,-41,50}, -{65,-41,51}, -{65,-41,52}, -{65,-41,53}, -{65,-41,54}, -{65,-41,55}, -{65,-41,56}, -{65,-41,57}, -{65,-41,58}, -{65,-41,59}, -{65,-41,60}, -{65,-41,61}, -{65,-41,62}, -{65,-41,63}, -{65,-41,64}, -{65,-41,65}, -{65,-41,66}, -{65,-40,-5}, -{65,-40,-4}, -{65,-40,-3}, -{65,-40,-2}, -{65,-40,-1}, -{65,-40,0}, -{65,-40,1}, -{65,-40,2}, -{65,-40,3}, -{65,-40,4}, -{65,-40,5}, -{65,-40,6}, -{65,-40,7}, -{65,-40,8}, -{65,-40,9}, -{65,-40,10}, -{65,-40,11}, -{65,-40,12}, -{65,-40,13}, -{65,-40,14}, -{65,-40,15}, -{65,-40,16}, -{65,-40,17}, -{65,-40,18}, -{65,-40,19}, -{65,-40,20}, -{65,-40,21}, -{65,-40,22}, -{65,-40,23}, -{65,-40,24}, -{65,-40,25}, -{65,-40,26}, -{65,-40,27}, -{65,-40,28}, -{65,-40,29}, -{65,-40,30}, -{65,-40,31}, -{65,-40,32}, -{65,-40,33}, -{65,-40,34}, -{65,-40,35}, -{65,-40,36}, -{65,-40,37}, -{65,-40,38}, -{65,-40,39}, -{65,-40,40}, -{65,-40,41}, -{65,-40,42}, -{65,-40,43}, -{65,-40,44}, -{65,-40,45}, -{65,-40,46}, -{65,-40,47}, -{65,-40,48}, -{65,-40,49}, -{65,-40,50}, -{65,-40,51}, -{65,-40,52}, -{65,-40,53}, -{65,-40,54}, -{65,-40,55}, -{65,-40,56}, -{65,-40,57}, -{65,-40,58}, -{65,-40,59}, -{65,-40,60}, -{65,-40,61}, -{65,-40,62}, -{65,-40,63}, -{65,-40,64}, -{65,-40,65}, -{65,-40,66}, -{65,-39,-6}, -{65,-39,-5}, -{65,-39,-4}, -{65,-39,-3}, -{65,-39,-2}, -{65,-39,-1}, -{65,-39,0}, -{65,-39,1}, -{65,-39,2}, -{65,-39,3}, -{65,-39,4}, -{65,-39,5}, -{65,-39,6}, -{65,-39,7}, -{65,-39,8}, -{65,-39,9}, -{65,-39,10}, -{65,-39,11}, -{65,-39,12}, -{65,-39,13}, -{65,-39,14}, -{65,-39,15}, -{65,-39,16}, -{65,-39,17}, -{65,-39,18}, -{65,-39,19}, -{65,-39,20}, -{65,-39,21}, -{65,-39,22}, -{65,-39,23}, -{65,-39,24}, -{65,-39,25}, -{65,-39,26}, -{65,-39,27}, -{65,-39,28}, -{65,-39,29}, -{65,-39,30}, -{65,-39,31}, -{65,-39,32}, -{65,-39,33}, -{65,-39,34}, -{65,-39,35}, -{65,-39,36}, -{65,-39,37}, -{65,-39,38}, -{65,-39,39}, -{65,-39,40}, -{65,-39,41}, -{65,-39,42}, -{65,-39,43}, -{65,-39,44}, -{65,-39,45}, -{65,-39,46}, -{65,-39,47}, -{65,-39,48}, -{65,-39,49}, -{65,-39,50}, -{65,-39,51}, -{65,-39,52}, -{65,-39,53}, -{65,-39,54}, -{65,-39,55}, -{65,-39,56}, -{65,-39,57}, -{65,-39,58}, -{65,-39,59}, -{65,-39,60}, -{65,-39,61}, -{65,-39,62}, -{65,-39,63}, -{65,-39,64}, -{65,-39,65}, -{65,-39,66}, -{65,-38,-8}, -{65,-38,-7}, -{65,-38,-6}, -{65,-38,-5}, -{65,-38,-4}, -{65,-38,-3}, -{65,-38,-2}, -{65,-38,-1}, -{65,-38,0}, -{65,-38,1}, -{65,-38,2}, -{65,-38,3}, -{65,-38,4}, -{65,-38,5}, -{65,-38,6}, -{65,-38,7}, -{65,-38,8}, -{65,-38,9}, -{65,-38,10}, -{65,-38,11}, -{65,-38,12}, -{65,-38,13}, -{65,-38,14}, -{65,-38,15}, -{65,-38,16}, -{65,-38,17}, -{65,-38,18}, -{65,-38,19}, -{65,-38,20}, -{65,-38,21}, -{65,-38,22}, -{65,-38,23}, -{65,-38,24}, -{65,-38,25}, -{65,-38,26}, -{65,-38,27}, -{65,-38,28}, -{65,-38,29}, -{65,-38,30}, -{65,-38,31}, -{65,-38,32}, -{65,-38,33}, -{65,-38,34}, -{65,-38,35}, -{65,-38,36}, -{65,-38,37}, -{65,-38,38}, -{65,-38,39}, -{65,-38,40}, -{65,-38,41}, -{65,-38,42}, -{65,-38,43}, -{65,-38,44}, -{65,-38,45}, -{65,-38,46}, -{65,-38,47}, -{65,-38,48}, -{65,-38,49}, -{65,-38,50}, -{65,-38,51}, -{65,-38,52}, -{65,-38,53}, -{65,-38,54}, -{65,-38,55}, -{65,-38,56}, -{65,-38,57}, -{65,-38,58}, -{65,-38,59}, -{65,-38,60}, -{65,-38,61}, -{65,-38,62}, -{65,-38,63}, -{65,-38,64}, -{65,-38,65}, -{65,-38,66}, -{65,-37,-9}, -{65,-37,-8}, -{65,-37,-7}, -{65,-37,-6}, -{65,-37,-5}, -{65,-37,-4}, -{65,-37,-3}, -{65,-37,-2}, -{65,-37,-1}, -{65,-37,0}, -{65,-37,1}, -{65,-37,2}, -{65,-37,3}, -{65,-37,4}, -{65,-37,5}, -{65,-37,6}, -{65,-37,7}, -{65,-37,8}, -{65,-37,9}, -{65,-37,10}, -{65,-37,11}, -{65,-37,12}, -{65,-37,13}, -{65,-37,14}, -{65,-37,15}, -{65,-37,16}, -{65,-37,17}, -{65,-37,18}, -{65,-37,19}, -{65,-37,20}, -{65,-37,21}, -{65,-37,22}, -{65,-37,23}, -{65,-37,24}, -{65,-37,25}, -{65,-37,26}, -{65,-37,27}, -{65,-37,28}, -{65,-37,29}, -{65,-37,30}, -{65,-37,31}, -{65,-37,32}, -{65,-37,33}, -{65,-37,34}, -{65,-37,35}, -{65,-37,36}, -{65,-37,37}, -{65,-37,38}, -{65,-37,39}, -{65,-37,40}, -{65,-37,41}, -{65,-37,42}, -{65,-37,43}, -{65,-37,44}, -{65,-37,45}, -{65,-37,46}, -{65,-37,47}, -{65,-37,48}, -{65,-37,49}, -{65,-37,50}, -{65,-37,51}, -{65,-37,52}, -{65,-37,53}, -{65,-37,54}, -{65,-37,55}, -{65,-37,56}, -{65,-37,57}, -{65,-37,58}, -{65,-37,59}, -{65,-37,60}, -{65,-37,61}, -{65,-37,62}, -{65,-37,63}, -{65,-37,64}, -{65,-37,65}, -{65,-37,66}, -{65,-36,-11}, -{65,-36,-10}, -{65,-36,-9}, -{65,-36,-8}, -{65,-36,-7}, -{65,-36,-6}, -{65,-36,-5}, -{65,-36,-4}, -{65,-36,-3}, -{65,-36,-2}, -{65,-36,-1}, -{65,-36,0}, -{65,-36,1}, -{65,-36,2}, -{65,-36,3}, -{65,-36,4}, -{65,-36,5}, -{65,-36,6}, -{65,-36,7}, -{65,-36,8}, -{65,-36,9}, -{65,-36,10}, -{65,-36,11}, -{65,-36,12}, -{65,-36,13}, -{65,-36,14}, -{65,-36,15}, -{65,-36,16}, -{65,-36,17}, -{65,-36,18}, -{65,-36,19}, -{65,-36,20}, -{65,-36,21}, -{65,-36,22}, -{65,-36,23}, -{65,-36,24}, -{65,-36,25}, -{65,-36,26}, -{65,-36,27}, -{65,-36,28}, -{65,-36,29}, -{65,-36,30}, -{65,-36,31}, -{65,-36,32}, -{65,-36,33}, -{65,-36,34}, -{65,-36,35}, -{65,-36,36}, -{65,-36,37}, -{65,-36,38}, -{65,-36,39}, -{65,-36,40}, -{65,-36,41}, -{65,-36,42}, -{65,-36,43}, -{65,-36,44}, -{65,-36,45}, -{65,-36,46}, -{65,-36,47}, -{65,-36,48}, -{65,-36,49}, -{65,-36,50}, -{65,-36,51}, -{65,-36,52}, -{65,-36,53}, -{65,-36,54}, -{65,-36,55}, -{65,-36,56}, -{65,-36,57}, -{65,-36,58}, -{65,-36,59}, -{65,-36,60}, -{65,-36,61}, -{65,-36,62}, -{65,-36,63}, -{65,-36,64}, -{65,-36,65}, -{65,-36,66}, -{65,-35,-13}, -{65,-35,-12}, -{65,-35,-11}, -{65,-35,-10}, -{65,-35,-9}, -{65,-35,-8}, -{65,-35,-7}, -{65,-35,-6}, -{65,-35,-5}, -{65,-35,-4}, -{65,-35,-3}, -{65,-35,-2}, -{65,-35,-1}, -{65,-35,0}, -{65,-35,1}, -{65,-35,2}, -{65,-35,3}, -{65,-35,4}, -{65,-35,5}, -{65,-35,6}, -{65,-35,7}, -{65,-35,8}, -{65,-35,9}, -{65,-35,10}, -{65,-35,11}, -{65,-35,12}, -{65,-35,13}, -{65,-35,14}, -{65,-35,15}, -{65,-35,16}, -{65,-35,17}, -{65,-35,18}, -{65,-35,19}, -{65,-35,20}, -{65,-35,21}, -{65,-35,22}, -{65,-35,23}, -{65,-35,24}, -{65,-35,25}, -{65,-35,26}, -{65,-35,27}, -{65,-35,28}, -{65,-35,29}, -{65,-35,30}, -{65,-35,31}, -{65,-35,32}, -{65,-35,33}, -{65,-35,34}, -{65,-35,35}, -{65,-35,36}, -{65,-35,37}, -{65,-35,38}, -{65,-35,39}, -{65,-35,40}, -{65,-35,41}, -{65,-35,42}, -{65,-35,43}, -{65,-35,44}, -{65,-35,45}, -{65,-35,46}, -{65,-35,47}, -{65,-35,48}, -{65,-35,49}, -{65,-35,50}, -{65,-35,51}, -{65,-35,52}, -{65,-35,53}, -{65,-35,54}, -{65,-35,55}, -{65,-35,56}, -{65,-35,57}, -{65,-35,58}, -{65,-35,59}, -{65,-35,60}, -{65,-35,61}, -{65,-35,62}, -{65,-35,63}, -{65,-35,64}, -{65,-35,65}, -{65,-35,66}, -{65,-34,-14}, -{65,-34,-13}, -{65,-34,-12}, -{65,-34,-11}, -{65,-34,-10}, -{65,-34,-9}, -{65,-34,-8}, -{65,-34,-7}, -{65,-34,-6}, -{65,-34,-5}, -{65,-34,-4}, -{65,-34,-3}, -{65,-34,-2}, -{65,-34,-1}, -{65,-34,0}, -{65,-34,1}, -{65,-34,2}, -{65,-34,3}, -{65,-34,4}, -{65,-34,5}, -{65,-34,6}, -{65,-34,7}, -{65,-34,8}, -{65,-34,9}, -{65,-34,10}, -{65,-34,11}, -{65,-34,12}, -{65,-34,13}, -{65,-34,14}, -{65,-34,15}, -{65,-34,16}, -{65,-34,17}, -{65,-34,18}, -{65,-34,19}, -{65,-34,20}, -{65,-34,21}, -{65,-34,22}, -{65,-34,23}, -{65,-34,24}, -{65,-34,25}, -{65,-34,26}, -{65,-34,27}, -{65,-34,28}, -{65,-34,29}, -{65,-34,30}, -{65,-34,31}, -{65,-34,32}, -{65,-34,33}, -{65,-34,34}, -{65,-34,35}, -{65,-34,36}, -{65,-34,37}, -{65,-34,38}, -{65,-34,39}, -{65,-34,40}, -{65,-34,41}, -{65,-34,42}, -{65,-34,43}, -{65,-34,44}, -{65,-34,45}, -{65,-34,46}, -{65,-34,47}, -{65,-34,48}, -{65,-34,49}, -{65,-34,50}, -{65,-34,51}, -{65,-34,52}, -{65,-34,53}, -{65,-34,54}, -{65,-34,55}, -{65,-34,56}, -{65,-34,57}, -{65,-34,58}, -{65,-34,59}, -{65,-34,60}, -{65,-34,61}, -{65,-34,62}, -{65,-34,63}, -{65,-34,64}, -{65,-34,65}, -{65,-34,66}, -{65,-33,-16}, -{65,-33,-15}, -{65,-33,-14}, -{65,-33,-13}, -{65,-33,-12}, -{65,-33,-11}, -{65,-33,-10}, -{65,-33,-9}, -{65,-33,-8}, -{65,-33,-7}, -{65,-33,-6}, -{65,-33,-5}, -{65,-33,-4}, -{65,-33,-3}, -{65,-33,-2}, -{65,-33,-1}, -{65,-33,0}, -{65,-33,1}, -{65,-33,2}, -{65,-33,3}, -{65,-33,4}, -{65,-33,5}, -{65,-33,6}, -{65,-33,7}, -{65,-33,8}, -{65,-33,9}, -{65,-33,10}, -{65,-33,11}, -{65,-33,12}, -{65,-33,13}, -{65,-33,14}, -{65,-33,15}, -{65,-33,16}, -{65,-33,17}, -{65,-33,18}, -{65,-33,19}, -{65,-33,20}, -{65,-33,21}, -{65,-33,22}, -{65,-33,23}, -{65,-33,24}, -{65,-33,25}, -{65,-33,26}, -{65,-33,27}, -{65,-33,28}, -{65,-33,29}, -{65,-33,30}, -{65,-33,31}, -{65,-33,32}, -{65,-33,33}, -{65,-33,34}, -{65,-33,35}, -{65,-33,36}, -{65,-33,37}, -{65,-33,38}, -{65,-33,39}, -{65,-33,40}, -{65,-33,41}, -{65,-33,42}, -{65,-33,43}, -{65,-33,44}, -{65,-33,45}, -{65,-33,46}, -{65,-33,47}, -{65,-33,48}, -{65,-33,49}, -{65,-33,50}, -{65,-33,51}, -{65,-33,52}, -{65,-33,53}, -{65,-33,54}, -{65,-33,55}, -{65,-33,56}, -{65,-33,57}, -{65,-33,58}, -{65,-33,59}, -{65,-33,60}, -{65,-33,61}, -{65,-33,62}, -{65,-33,63}, -{65,-33,64}, -{65,-33,65}, -{65,-33,66}, -{65,-32,-17}, -{65,-32,-16}, -{65,-32,-15}, -{65,-32,-14}, -{65,-32,-13}, -{65,-32,-12}, -{65,-32,-11}, -{65,-32,-10}, -{65,-32,-9}, -{65,-32,-8}, -{65,-32,-7}, -{65,-32,-6}, -{65,-32,-5}, -{65,-32,-4}, -{65,-32,-3}, -{65,-32,-2}, -{65,-32,-1}, -{65,-32,0}, -{65,-32,1}, -{65,-32,2}, -{65,-32,3}, -{65,-32,4}, -{65,-32,5}, -{65,-32,6}, -{65,-32,7}, -{65,-32,8}, -{65,-32,9}, -{65,-32,10}, -{65,-32,11}, -{65,-32,12}, -{65,-32,13}, -{65,-32,14}, -{65,-32,15}, -{65,-32,16}, -{65,-32,17}, -{65,-32,18}, -{65,-32,19}, -{65,-32,20}, -{65,-32,21}, -{65,-32,22}, -{65,-32,23}, -{65,-32,24}, -{65,-32,25}, -{65,-32,26}, -{65,-32,27}, -{65,-32,28}, -{65,-32,29}, -{65,-32,30}, -{65,-32,31}, -{65,-32,32}, -{65,-32,33}, -{65,-32,34}, -{65,-32,35}, -{65,-32,36}, -{65,-32,37}, -{65,-32,38}, -{65,-32,39}, -{65,-32,40}, -{65,-32,41}, -{65,-32,42}, -{65,-32,43}, -{65,-32,44}, -{65,-32,45}, -{65,-32,46}, -{65,-32,47}, -{65,-32,48}, -{65,-32,49}, -{65,-32,50}, -{65,-32,51}, -{65,-32,52}, -{65,-32,53}, -{65,-32,54}, -{65,-32,55}, -{65,-32,56}, -{65,-32,57}, -{65,-32,58}, -{65,-32,59}, -{65,-32,60}, -{65,-32,61}, -{65,-32,62}, -{65,-32,63}, -{65,-32,64}, -{65,-32,65}, -{65,-32,66}, -{65,-31,-19}, -{65,-31,-18}, -{65,-31,-17}, -{65,-31,-16}, -{65,-31,-15}, -{65,-31,-14}, -{65,-31,-13}, -{65,-31,-12}, -{65,-31,-11}, -{65,-31,-10}, -{65,-31,-9}, -{65,-31,-8}, -{65,-31,-7}, -{65,-31,-6}, -{65,-31,-5}, -{65,-31,-4}, -{65,-31,-3}, -{65,-31,-2}, -{65,-31,-1}, -{65,-31,0}, -{65,-31,1}, -{65,-31,2}, -{65,-31,3}, -{65,-31,4}, -{65,-31,5}, -{65,-31,6}, -{65,-31,7}, -{65,-31,8}, -{65,-31,9}, -{65,-31,10}, -{65,-31,11}, -{65,-31,12}, -{65,-31,13}, -{65,-31,14}, -{65,-31,15}, -{65,-31,16}, -{65,-31,17}, -{65,-31,18}, -{65,-31,19}, -{65,-31,20}, -{65,-31,21}, -{65,-31,22}, -{65,-31,23}, -{65,-31,24}, -{65,-31,25}, -{65,-31,26}, -{65,-31,27}, -{65,-31,28}, -{65,-31,29}, -{65,-31,30}, -{65,-31,31}, -{65,-31,32}, -{65,-31,33}, -{65,-31,34}, -{65,-31,35}, -{65,-31,36}, -{65,-31,37}, -{65,-31,38}, -{65,-31,39}, -{65,-31,40}, -{65,-31,41}, -{65,-31,42}, -{65,-31,43}, -{65,-31,44}, -{65,-31,45}, -{65,-31,46}, -{65,-31,47}, -{65,-31,48}, -{65,-31,49}, -{65,-31,50}, -{65,-31,51}, -{65,-31,52}, -{65,-31,53}, -{65,-31,54}, -{65,-31,55}, -{65,-31,56}, -{65,-31,57}, -{65,-31,58}, -{65,-31,59}, -{65,-31,60}, -{65,-31,61}, -{65,-31,62}, -{65,-31,63}, -{65,-31,64}, -{65,-31,65}, -{65,-31,66}, -{65,-30,-20}, -{65,-30,-19}, -{65,-30,-18}, -{65,-30,-17}, -{65,-30,-16}, -{65,-30,-15}, -{65,-30,-14}, -{65,-30,-13}, -{65,-30,-12}, -{65,-30,-11}, -{65,-30,-10}, -{65,-30,-9}, -{65,-30,-8}, -{65,-30,-7}, -{65,-30,-6}, -{65,-30,-5}, -{65,-30,-4}, -{65,-30,-3}, -{65,-30,-2}, -{65,-30,-1}, -{65,-30,0}, -{65,-30,1}, -{65,-30,2}, -{65,-30,3}, -{65,-30,4}, -{65,-30,5}, -{65,-30,6}, -{65,-30,7}, -{65,-30,8}, -{65,-30,9}, -{65,-30,10}, -{65,-30,11}, -{65,-30,12}, -{65,-30,13}, -{65,-30,14}, -{65,-30,15}, -{65,-30,16}, -{65,-30,17}, -{65,-30,18}, -{65,-30,19}, -{65,-30,20}, -{65,-30,21}, -{65,-30,22}, -{65,-30,23}, -{65,-30,24}, -{65,-30,25}, -{65,-30,26}, -{65,-30,27}, -{65,-30,28}, -{65,-30,29}, -{65,-30,30}, -{65,-30,31}, -{65,-30,32}, -{65,-30,33}, -{65,-30,34}, -{65,-30,35}, -{65,-30,36}, -{65,-30,37}, -{65,-30,38}, -{65,-30,39}, -{65,-30,40}, -{65,-30,41}, -{65,-30,42}, -{65,-30,43}, -{65,-30,44}, -{65,-30,45}, -{65,-30,46}, -{65,-30,47}, -{65,-30,48}, -{65,-30,49}, -{65,-30,50}, -{65,-30,51}, -{65,-30,52}, -{65,-30,53}, -{65,-30,54}, -{65,-30,55}, -{65,-30,56}, -{65,-30,57}, -{65,-30,58}, -{65,-30,59}, -{65,-30,60}, -{65,-30,61}, -{65,-30,62}, -{65,-30,63}, -{65,-30,64}, -{65,-30,65}, -{65,-30,66}, -{65,-29,-21}, -{65,-29,-20}, -{65,-29,-19}, -{65,-29,-18}, -{65,-29,-17}, -{65,-29,-16}, -{65,-29,-15}, -{65,-29,-14}, -{65,-29,-13}, -{65,-29,-12}, -{65,-29,-11}, -{65,-29,-10}, -{65,-29,-9}, -{65,-29,-8}, -{65,-29,-7}, -{65,-29,-6}, -{65,-29,-5}, -{65,-29,-4}, -{65,-29,-3}, -{65,-29,-2}, -{65,-29,-1}, -{65,-29,0}, -{65,-29,1}, -{65,-29,2}, -{65,-29,3}, -{65,-29,4}, -{65,-29,5}, -{65,-29,6}, -{65,-29,7}, -{65,-29,8}, -{65,-29,9}, -{65,-29,10}, -{65,-29,11}, -{65,-29,12}, -{65,-29,13}, -{65,-29,14}, -{65,-29,15}, -{65,-29,16}, -{65,-29,17}, -{65,-29,18}, -{65,-29,19}, -{65,-29,20}, -{65,-29,21}, -{65,-29,22}, -{65,-29,23}, -{65,-29,24}, -{65,-29,25}, -{65,-29,26}, -{65,-29,27}, -{65,-29,28}, -{65,-29,29}, -{65,-29,30}, -{65,-29,31}, -{65,-29,32}, -{65,-29,33}, -{65,-29,34}, -{65,-29,35}, -{65,-29,36}, -{65,-29,37}, -{65,-29,38}, -{65,-29,39}, -{65,-29,40}, -{65,-29,41}, -{65,-29,42}, -{65,-29,43}, -{65,-29,44}, -{65,-29,45}, -{65,-29,46}, -{65,-29,47}, -{65,-29,48}, -{65,-29,49}, -{65,-29,50}, -{65,-29,51}, -{65,-29,52}, -{65,-29,53}, -{65,-29,54}, -{65,-29,55}, -{65,-29,56}, -{65,-29,57}, -{65,-29,58}, -{65,-29,59}, -{65,-29,60}, -{65,-29,61}, -{65,-29,62}, -{65,-29,63}, -{65,-29,64}, -{65,-29,65}, -{65,-29,66}, -{65,-29,67}, -{65,-28,-23}, -{65,-28,-22}, -{65,-28,-21}, -{65,-28,-20}, -{65,-28,-19}, -{65,-28,-18}, -{65,-28,-17}, -{65,-28,-16}, -{65,-28,-15}, -{65,-28,-14}, -{65,-28,-13}, -{65,-28,-12}, -{65,-28,-11}, -{65,-28,-10}, -{65,-28,-9}, -{65,-28,-8}, -{65,-28,-7}, -{65,-28,-6}, -{65,-28,-5}, -{65,-28,-4}, -{65,-28,-3}, -{65,-28,-2}, -{65,-28,-1}, -{65,-28,0}, -{65,-28,1}, -{65,-28,2}, -{65,-28,3}, -{65,-28,4}, -{65,-28,5}, -{65,-28,6}, -{65,-28,7}, -{65,-28,8}, -{65,-28,9}, -{65,-28,10}, -{65,-28,11}, -{65,-28,12}, -{65,-28,13}, -{65,-28,14}, -{65,-28,15}, -{65,-28,16}, -{65,-28,17}, -{65,-28,18}, -{65,-28,19}, -{65,-28,20}, -{65,-28,21}, -{65,-28,22}, -{65,-28,23}, -{65,-28,24}, -{65,-28,25}, -{65,-28,26}, -{65,-28,27}, -{65,-28,28}, -{65,-28,29}, -{65,-28,30}, -{65,-28,31}, -{65,-28,32}, -{65,-28,33}, -{65,-28,34}, -{65,-28,35}, -{65,-28,36}, -{65,-28,37}, -{65,-28,38}, -{65,-28,39}, -{65,-28,40}, -{65,-28,41}, -{65,-28,42}, -{65,-28,43}, -{65,-28,44}, -{65,-28,45}, -{65,-28,46}, -{65,-28,47}, -{65,-28,48}, -{65,-28,49}, -{65,-28,50}, -{65,-28,51}, -{65,-28,52}, -{65,-28,53}, -{65,-28,54}, -{65,-28,55}, -{65,-28,56}, -{65,-28,57}, -{65,-28,58}, -{65,-28,59}, -{65,-28,60}, -{65,-28,61}, -{65,-28,62}, -{65,-28,63}, -{65,-28,64}, -{65,-28,65}, -{65,-28,66}, -{65,-28,67}, -{65,-27,-24}, -{65,-27,-23}, -{65,-27,-22}, -{65,-27,-21}, -{65,-27,-20}, -{65,-27,-19}, -{65,-27,-18}, -{65,-27,-17}, -{65,-27,-16}, -{65,-27,-15}, -{65,-27,-14}, -{65,-27,-13}, -{65,-27,-12}, -{65,-27,-11}, -{65,-27,-10}, -{65,-27,-9}, -{65,-27,-8}, -{65,-27,-7}, -{65,-27,-6}, -{65,-27,-5}, -{65,-27,-4}, -{65,-27,-3}, -{65,-27,-2}, -{65,-27,-1}, -{65,-27,0}, -{65,-27,1}, -{65,-27,2}, -{65,-27,3}, -{65,-27,4}, -{65,-27,5}, -{65,-27,6}, -{65,-27,7}, -{65,-27,8}, -{65,-27,9}, -{65,-27,10}, -{65,-27,11}, -{65,-27,12}, -{65,-27,13}, -{65,-27,14}, -{65,-27,15}, -{65,-27,16}, -{65,-27,17}, -{65,-27,18}, -{65,-27,19}, -{65,-27,20}, -{65,-27,21}, -{65,-27,22}, -{65,-27,23}, -{65,-27,24}, -{65,-27,25}, -{65,-27,26}, -{65,-27,27}, -{65,-27,28}, -{65,-27,29}, -{65,-27,30}, -{65,-27,31}, -{65,-27,32}, -{65,-27,33}, -{65,-27,34}, -{65,-27,35}, -{65,-27,36}, -{65,-27,37}, -{65,-27,38}, -{65,-27,39}, -{65,-27,40}, -{65,-27,41}, -{65,-27,42}, -{65,-27,43}, -{65,-27,44}, -{65,-27,45}, -{65,-27,46}, -{65,-27,47}, -{65,-27,48}, -{65,-27,49}, -{65,-27,50}, -{65,-27,51}, -{65,-27,52}, -{65,-27,53}, -{65,-27,54}, -{65,-27,55}, -{65,-27,56}, -{65,-27,57}, -{65,-27,58}, -{65,-27,59}, -{65,-27,60}, -{65,-27,61}, -{65,-27,62}, -{65,-27,63}, -{65,-27,64}, -{65,-27,65}, -{65,-27,66}, -{65,-27,67}, -{65,-26,-26}, -{65,-26,-25}, -{65,-26,-24}, -{65,-26,-23}, -{65,-26,-22}, -{65,-26,-21}, -{65,-26,-20}, -{65,-26,-19}, -{65,-26,-18}, -{65,-26,-17}, -{65,-26,-16}, -{65,-26,-15}, -{65,-26,-14}, -{65,-26,-13}, -{65,-26,-12}, -{65,-26,-11}, -{65,-26,-10}, -{65,-26,-9}, -{65,-26,-8}, -{65,-26,-7}, -{65,-26,-6}, -{65,-26,-5}, -{65,-26,-4}, -{65,-26,-3}, -{65,-26,-2}, -{65,-26,-1}, -{65,-26,0}, -{65,-26,1}, -{65,-26,2}, -{65,-26,3}, -{65,-26,4}, -{65,-26,5}, -{65,-26,6}, -{65,-26,7}, -{65,-26,8}, -{65,-26,9}, -{65,-26,10}, -{65,-26,11}, -{65,-26,12}, -{65,-26,13}, -{65,-26,14}, -{65,-26,15}, -{65,-26,16}, -{65,-26,17}, -{65,-26,18}, -{65,-26,19}, -{65,-26,20}, -{65,-26,21}, -{65,-26,22}, -{65,-26,23}, -{65,-26,24}, -{65,-26,25}, -{65,-26,26}, -{65,-26,27}, -{65,-26,28}, -{65,-26,29}, -{65,-26,30}, -{65,-26,31}, -{65,-26,32}, -{65,-26,33}, -{65,-26,34}, -{65,-26,35}, -{65,-26,36}, -{65,-26,37}, -{65,-26,38}, -{65,-26,39}, -{65,-26,40}, -{65,-26,41}, -{65,-26,42}, -{65,-26,43}, -{65,-26,44}, -{65,-26,45}, -{65,-26,46}, -{65,-26,47}, -{65,-26,48}, -{65,-26,49}, -{65,-26,50}, -{65,-26,51}, -{65,-26,52}, -{65,-26,53}, -{65,-26,54}, -{65,-26,55}, -{65,-26,56}, -{65,-26,57}, -{65,-26,58}, -{65,-26,59}, -{65,-26,60}, -{65,-26,61}, -{65,-26,62}, -{65,-26,63}, -{65,-26,64}, -{65,-26,65}, -{65,-26,66}, -{65,-26,67}, -{65,-25,-27}, -{65,-25,-26}, -{65,-25,-25}, -{65,-25,-24}, -{65,-25,-23}, -{65,-25,-22}, -{65,-25,-21}, -{65,-25,-20}, -{65,-25,-19}, -{65,-25,-18}, -{65,-25,-17}, -{65,-25,-16}, -{65,-25,-15}, -{65,-25,-14}, -{65,-25,-13}, -{65,-25,-12}, -{65,-25,-11}, -{65,-25,-10}, -{65,-25,-9}, -{65,-25,-8}, -{65,-25,-7}, -{65,-25,-6}, -{65,-25,-5}, -{65,-25,-4}, -{65,-25,-3}, -{65,-25,-2}, -{65,-25,-1}, -{65,-25,0}, -{65,-25,1}, -{65,-25,2}, -{65,-25,3}, -{65,-25,4}, -{65,-25,5}, -{65,-25,6}, -{65,-25,7}, -{65,-25,8}, -{65,-25,9}, -{65,-25,10}, -{65,-25,11}, -{65,-25,12}, -{65,-25,13}, -{65,-25,14}, -{65,-25,15}, -{65,-25,16}, -{65,-25,17}, -{65,-25,18}, -{65,-25,19}, -{65,-25,20}, -{65,-25,21}, -{65,-25,22}, -{65,-25,23}, -{65,-25,24}, -{65,-25,25}, -{65,-25,26}, -{65,-25,27}, -{65,-25,28}, -{65,-25,29}, -{65,-25,30}, -{65,-25,31}, -{65,-25,32}, -{65,-25,33}, -{65,-25,34}, -{65,-25,35}, -{65,-25,36}, -{65,-25,37}, -{65,-25,38}, -{65,-25,39}, -{65,-25,40}, -{65,-25,41}, -{65,-25,42}, -{65,-25,43}, -{65,-25,44}, -{65,-25,45}, -{65,-25,46}, -{65,-25,47}, -{65,-25,48}, -{65,-25,49}, -{65,-25,50}, -{65,-25,51}, -{65,-25,52}, -{65,-25,53}, -{65,-25,54}, -{65,-25,55}, -{65,-25,56}, -{65,-25,57}, -{65,-25,58}, -{65,-25,59}, -{65,-25,60}, -{65,-25,61}, -{65,-25,62}, -{65,-25,63}, -{65,-25,64}, -{65,-25,65}, -{65,-25,66}, -{65,-25,67}, -{65,-24,-28}, -{65,-24,-27}, -{65,-24,-26}, -{65,-24,-25}, -{65,-24,-24}, -{65,-24,-23}, -{65,-24,-22}, -{65,-24,-21}, -{65,-24,-20}, -{65,-24,-19}, -{65,-24,-18}, -{65,-24,-17}, -{65,-24,-16}, -{65,-24,-15}, -{65,-24,-14}, -{65,-24,-13}, -{65,-24,-12}, -{65,-24,-11}, -{65,-24,-10}, -{65,-24,-9}, -{65,-24,-8}, -{65,-24,-7}, -{65,-24,-6}, -{65,-24,-5}, -{65,-24,-4}, -{65,-24,-3}, -{65,-24,-2}, -{65,-24,-1}, -{65,-24,0}, -{65,-24,1}, -{65,-24,2}, -{65,-24,3}, -{65,-24,4}, -{65,-24,5}, -{65,-24,6}, -{65,-24,7}, -{65,-24,8}, -{65,-24,9}, -{65,-24,10}, -{65,-24,11}, -{65,-24,12}, -{65,-24,13}, -{65,-24,14}, -{65,-24,15}, -{65,-24,16}, -{65,-24,17}, -{65,-24,18}, -{65,-24,19}, -{65,-24,20}, -{65,-24,21}, -{65,-24,22}, -{65,-24,23}, -{65,-24,24}, -{65,-24,25}, -{65,-24,26}, -{65,-24,27}, -{65,-24,28}, -{65,-24,29}, -{65,-24,30}, -{65,-24,31}, -{65,-24,32}, -{65,-24,33}, -{65,-24,34}, -{65,-24,35}, -{65,-24,36}, -{65,-24,37}, -{65,-24,38}, -{65,-24,39}, -{65,-24,40}, -{65,-24,41}, -{65,-24,42}, -{65,-24,43}, -{65,-24,44}, -{65,-24,45}, -{65,-24,46}, -{65,-24,47}, -{65,-24,48}, -{65,-24,49}, -{65,-24,50}, -{65,-24,51}, -{65,-24,52}, -{65,-24,53}, -{65,-24,54}, -{65,-24,55}, -{65,-24,56}, -{65,-24,57}, -{65,-24,58}, -{65,-24,59}, -{65,-24,60}, -{65,-24,61}, -{65,-24,62}, -{65,-24,63}, -{65,-24,64}, -{65,-24,65}, -{65,-24,66}, -{65,-24,67}, -{65,-23,-30}, -{65,-23,-29}, -{65,-23,-28}, -{65,-23,-27}, -{65,-23,-26}, -{65,-23,-25}, -{65,-23,-24}, -{65,-23,-23}, -{65,-23,-22}, -{65,-23,-21}, -{65,-23,-20}, -{65,-23,-19}, -{65,-23,-18}, -{65,-23,-17}, -{65,-23,-16}, -{65,-23,-15}, -{65,-23,-14}, -{65,-23,-13}, -{65,-23,-12}, -{65,-23,-11}, -{65,-23,-10}, -{65,-23,-9}, -{65,-23,-8}, -{65,-23,-7}, -{65,-23,-6}, -{65,-23,-5}, -{65,-23,-4}, -{65,-23,-3}, -{65,-23,-2}, -{65,-23,-1}, -{65,-23,0}, -{65,-23,1}, -{65,-23,2}, -{65,-23,3}, -{65,-23,4}, -{65,-23,5}, -{65,-23,6}, -{65,-23,7}, -{65,-23,8}, -{65,-23,9}, -{65,-23,10}, -{65,-23,11}, -{65,-23,12}, -{65,-23,13}, -{65,-23,14}, -{65,-23,15}, -{65,-23,16}, -{65,-23,17}, -{65,-23,18}, -{65,-23,19}, -{65,-23,20}, -{65,-23,21}, -{65,-23,22}, -{65,-23,23}, -{65,-23,24}, -{65,-23,25}, -{65,-23,26}, -{65,-23,27}, -{65,-23,28}, -{65,-23,29}, -{65,-23,30}, -{65,-23,31}, -{65,-23,32}, -{65,-23,33}, -{65,-23,34}, -{65,-23,35}, -{65,-23,36}, -{65,-23,37}, -{65,-23,38}, -{65,-23,39}, -{65,-23,40}, -{65,-23,41}, -{65,-23,42}, -{65,-23,43}, -{65,-23,44}, -{65,-23,45}, -{65,-23,46}, -{65,-23,47}, -{65,-23,48}, -{65,-23,49}, -{65,-23,50}, -{65,-23,51}, -{65,-23,52}, -{65,-23,53}, -{65,-23,54}, -{65,-23,55}, -{65,-23,56}, -{65,-23,57}, -{65,-23,58}, -{65,-23,59}, -{65,-23,60}, -{65,-23,61}, -{65,-23,62}, -{65,-23,63}, -{65,-23,64}, -{65,-23,65}, -{65,-23,66}, -{65,-23,67}, -{65,-22,-31}, -{65,-22,-30}, -{65,-22,-29}, -{65,-22,-28}, -{65,-22,-27}, -{65,-22,-26}, -{65,-22,-25}, -{65,-22,-24}, -{65,-22,-23}, -{65,-22,-22}, -{65,-22,-21}, -{65,-22,-20}, -{65,-22,-19}, -{65,-22,-18}, -{65,-22,-17}, -{65,-22,-16}, -{65,-22,-15}, -{65,-22,-14}, -{65,-22,-13}, -{65,-22,-12}, -{65,-22,-11}, -{65,-22,-10}, -{65,-22,-9}, -{65,-22,-8}, -{65,-22,-7}, -{65,-22,-6}, -{65,-22,-5}, -{65,-22,-4}, -{65,-22,-3}, -{65,-22,-2}, -{65,-22,-1}, -{65,-22,0}, -{65,-22,1}, -{65,-22,2}, -{65,-22,3}, -{65,-22,4}, -{65,-22,5}, -{65,-22,6}, -{65,-22,7}, -{65,-22,8}, -{65,-22,9}, -{65,-22,10}, -{65,-22,11}, -{65,-22,12}, -{65,-22,13}, -{65,-22,14}, -{65,-22,15}, -{65,-22,16}, -{65,-22,17}, -{65,-22,18}, -{65,-22,19}, -{65,-22,20}, -{65,-22,21}, -{65,-22,22}, -{65,-22,23}, -{65,-22,24}, -{65,-22,25}, -{65,-22,26}, -{65,-22,27}, -{65,-22,28}, -{65,-22,29}, -{65,-22,30}, -{65,-22,31}, -{65,-22,32}, -{65,-22,33}, -{65,-22,34}, -{65,-22,35}, -{65,-22,36}, -{65,-22,37}, -{65,-22,38}, -{65,-22,39}, -{65,-22,40}, -{65,-22,41}, -{65,-22,42}, -{65,-22,43}, -{65,-22,44}, -{65,-22,45}, -{65,-22,46}, -{65,-22,47}, -{65,-22,48}, -{65,-22,49}, -{65,-22,50}, -{65,-22,51}, -{65,-22,52}, -{65,-22,53}, -{65,-22,54}, -{65,-22,55}, -{65,-22,56}, -{65,-22,57}, -{65,-22,58}, -{65,-22,59}, -{65,-22,60}, -{65,-22,61}, -{65,-22,62}, -{65,-22,63}, -{65,-22,64}, -{65,-22,65}, -{65,-22,66}, -{65,-22,67}, -{65,-21,-32}, -{65,-21,-31}, -{65,-21,-30}, -{65,-21,-29}, -{65,-21,-28}, -{65,-21,-27}, -{65,-21,-26}, -{65,-21,-25}, -{65,-21,-24}, -{65,-21,-23}, -{65,-21,-22}, -{65,-21,-21}, -{65,-21,-20}, -{65,-21,-19}, -{65,-21,-18}, -{65,-21,-17}, -{65,-21,-16}, -{65,-21,-15}, -{65,-21,-14}, -{65,-21,-13}, -{65,-21,-12}, -{65,-21,-11}, -{65,-21,-10}, -{65,-21,-9}, -{65,-21,-8}, -{65,-21,-7}, -{65,-21,-6}, -{65,-21,-5}, -{65,-21,-4}, -{65,-21,-3}, -{65,-21,-2}, -{65,-21,-1}, -{65,-21,0}, -{65,-21,1}, -{65,-21,2}, -{65,-21,3}, -{65,-21,4}, -{65,-21,5}, -{65,-21,6}, -{65,-21,7}, -{65,-21,8}, -{65,-21,9}, -{65,-21,10}, -{65,-21,11}, -{65,-21,12}, -{65,-21,13}, -{65,-21,14}, -{65,-21,15}, -{65,-21,16}, -{65,-21,17}, -{65,-21,18}, -{65,-21,19}, -{65,-21,20}, -{65,-21,21}, -{65,-21,22}, -{65,-21,23}, -{65,-21,24}, -{65,-21,25}, -{65,-21,26}, -{65,-21,27}, -{65,-21,28}, -{65,-21,29}, -{65,-21,30}, -{65,-21,31}, -{65,-21,32}, -{65,-21,33}, -{65,-21,34}, -{65,-21,35}, -{65,-21,36}, -{65,-21,37}, -{65,-21,38}, -{65,-21,39}, -{65,-21,40}, -{65,-21,41}, -{65,-21,42}, -{65,-21,43}, -{65,-21,44}, -{65,-21,45}, -{65,-21,46}, -{65,-21,47}, -{65,-21,48}, -{65,-21,49}, -{65,-21,50}, -{65,-21,51}, -{65,-21,52}, -{65,-21,53}, -{65,-21,54}, -{65,-21,55}, -{65,-21,56}, -{65,-21,57}, -{65,-21,58}, -{65,-21,59}, -{65,-21,60}, -{65,-21,61}, -{65,-21,62}, -{65,-21,63}, -{65,-21,64}, -{65,-21,65}, -{65,-21,66}, -{65,-21,67}, -{65,-20,-34}, -{65,-20,-33}, -{65,-20,-32}, -{65,-20,-31}, -{65,-20,-30}, -{65,-20,-29}, -{65,-20,-28}, -{65,-20,-27}, -{65,-20,-26}, -{65,-20,-25}, -{65,-20,-24}, -{65,-20,-23}, -{65,-20,-22}, -{65,-20,-21}, -{65,-20,-20}, -{65,-20,-19}, -{65,-20,-18}, -{65,-20,-17}, -{65,-20,-16}, -{65,-20,-15}, -{65,-20,-14}, -{65,-20,-13}, -{65,-20,-12}, -{65,-20,-11}, -{65,-20,-10}, -{65,-20,-9}, -{65,-20,-8}, -{65,-20,-7}, -{65,-20,-6}, -{65,-20,-5}, -{65,-20,-4}, -{65,-20,-3}, -{65,-20,-2}, -{65,-20,-1}, -{65,-20,0}, -{65,-20,1}, -{65,-20,2}, -{65,-20,3}, -{65,-20,4}, -{65,-20,5}, -{65,-20,6}, -{65,-20,7}, -{65,-20,8}, -{65,-20,9}, -{65,-20,10}, -{65,-20,11}, -{65,-20,12}, -{65,-20,13}, -{65,-20,14}, -{65,-20,15}, -{65,-20,16}, -{65,-20,17}, -{65,-20,18}, -{65,-20,19}, -{65,-20,20}, -{65,-20,21}, -{65,-20,22}, -{65,-20,23}, -{65,-20,24}, -{65,-20,25}, -{65,-20,26}, -{65,-20,27}, -{65,-20,28}, -{65,-20,29}, -{65,-20,30}, -{65,-20,31}, -{65,-20,32}, -{65,-20,33}, -{65,-20,34}, -{65,-20,35}, -{65,-20,36}, -{65,-20,37}, -{65,-20,38}, -{65,-20,39}, -{65,-20,40}, -{65,-20,41}, -{65,-20,42}, -{65,-20,43}, -{65,-20,44}, -{65,-20,45}, -{65,-20,46}, -{65,-20,47}, -{65,-20,48}, -{65,-20,49}, -{65,-20,50}, -{65,-20,51}, -{65,-20,52}, -{65,-20,53}, -{65,-20,54}, -{65,-20,55}, -{65,-20,56}, -{65,-20,57}, -{65,-20,58}, -{65,-20,59}, -{65,-20,60}, -{65,-20,61}, -{65,-20,62}, -{65,-20,63}, -{65,-20,64}, -{65,-20,65}, -{65,-20,66}, -{65,-20,67}, -{65,-19,-35}, -{65,-19,-34}, -{65,-19,-33}, -{65,-19,-32}, -{65,-19,-31}, -{65,-19,-30}, -{65,-19,-29}, -{65,-19,-28}, -{65,-19,-27}, -{65,-19,-26}, -{65,-19,-25}, -{65,-19,-24}, -{65,-19,-23}, -{65,-19,-22}, -{65,-19,-21}, -{65,-19,-20}, -{65,-19,-19}, -{65,-19,-18}, -{65,-19,-17}, -{65,-19,-16}, -{65,-19,-15}, -{65,-19,-14}, -{65,-19,-13}, -{65,-19,-12}, -{65,-19,-11}, -{65,-19,-10}, -{65,-19,-9}, -{65,-19,-8}, -{65,-19,-7}, -{65,-19,-6}, -{65,-19,-5}, -{65,-19,-4}, -{65,-19,-3}, -{65,-19,-2}, -{65,-19,-1}, -{65,-19,0}, -{65,-19,1}, -{65,-19,2}, -{65,-19,3}, -{65,-19,4}, -{65,-19,5}, -{65,-19,6}, -{65,-19,7}, -{65,-19,8}, -{65,-19,9}, -{65,-19,10}, -{65,-19,11}, -{65,-19,12}, -{65,-19,13}, -{65,-19,14}, -{65,-19,15}, -{65,-19,16}, -{65,-19,17}, -{65,-19,18}, -{65,-19,19}, -{65,-19,20}, -{65,-19,21}, -{65,-19,22}, -{65,-19,23}, -{65,-19,24}, -{65,-19,25}, -{65,-19,26}, -{65,-19,27}, -{65,-19,28}, -{65,-19,29}, -{65,-19,30}, -{65,-19,31}, -{65,-19,32}, -{65,-19,33}, -{65,-19,34}, -{65,-19,35}, -{65,-19,36}, -{65,-19,37}, -{65,-19,38}, -{65,-19,39}, -{65,-19,40}, -{65,-19,41}, -{65,-19,42}, -{65,-19,43}, -{65,-19,44}, -{65,-19,45}, -{65,-19,46}, -{65,-19,47}, -{65,-19,48}, -{65,-19,49}, -{65,-19,50}, -{65,-19,51}, -{65,-19,52}, -{65,-19,53}, -{65,-19,54}, -{65,-19,55}, -{65,-19,56}, -{65,-19,57}, -{65,-19,58}, -{65,-19,59}, -{65,-19,60}, -{65,-19,61}, -{65,-19,62}, -{65,-19,63}, -{65,-19,64}, -{65,-19,65}, -{65,-19,66}, -{65,-19,67}, -{65,-18,-36}, -{65,-18,-35}, -{65,-18,-34}, -{65,-18,-33}, -{65,-18,-32}, -{65,-18,-31}, -{65,-18,-30}, -{65,-18,-29}, -{65,-18,-28}, -{65,-18,-27}, -{65,-18,-26}, -{65,-18,-25}, -{65,-18,-24}, -{65,-18,-23}, -{65,-18,-22}, -{65,-18,-21}, -{65,-18,-20}, -{65,-18,-19}, -{65,-18,-18}, -{65,-18,-17}, -{65,-18,-16}, -{65,-18,-15}, -{65,-18,-14}, -{65,-18,-13}, -{65,-18,-12}, -{65,-18,-11}, -{65,-18,-10}, -{65,-18,-9}, -{65,-18,-8}, -{65,-18,-7}, -{65,-18,-6}, -{65,-18,-5}, -{65,-18,-4}, -{65,-18,-3}, -{65,-18,-2}, -{65,-18,-1}, -{65,-18,0}, -{65,-18,1}, -{65,-18,2}, -{65,-18,3}, -{65,-18,4}, -{65,-18,5}, -{65,-18,6}, -{65,-18,7}, -{65,-18,8}, -{65,-18,9}, -{65,-18,10}, -{65,-18,11}, -{65,-18,12}, -{65,-18,13}, -{65,-18,14}, -{65,-18,15}, -{65,-18,16}, -{65,-18,17}, -{65,-18,18}, -{65,-18,19}, -{65,-18,20}, -{65,-18,21}, -{65,-18,22}, -{65,-18,23}, -{65,-18,24}, -{65,-18,25}, -{65,-18,26}, -{65,-18,27}, -{65,-18,28}, -{65,-18,29}, -{65,-18,30}, -{65,-18,31}, -{65,-18,32}, -{65,-18,33}, -{65,-18,34}, -{65,-18,35}, -{65,-18,36}, -{65,-18,37}, -{65,-18,38}, -{65,-18,39}, -{65,-18,40}, -{65,-18,41}, -{65,-18,42}, -{65,-18,43}, -{65,-18,44}, -{65,-18,45}, -{65,-18,46}, -{65,-18,47}, -{65,-18,48}, -{65,-18,49}, -{65,-18,50}, -{65,-18,51}, -{65,-18,52}, -{65,-18,53}, -{65,-18,54}, -{65,-18,55}, -{65,-18,56}, -{65,-18,57}, -{65,-18,58}, -{65,-18,59}, -{65,-18,60}, -{65,-18,61}, -{65,-18,62}, -{65,-18,63}, -{65,-18,64}, -{65,-18,65}, -{65,-18,66}, -{65,-18,67}, -{65,-17,-38}, -{65,-17,-37}, -{65,-17,-36}, -{65,-17,-35}, -{65,-17,-34}, -{65,-17,-33}, -{65,-17,-32}, -{65,-17,-31}, -{65,-17,-30}, -{65,-17,-29}, -{65,-17,-28}, -{65,-17,-27}, -{65,-17,-26}, -{65,-17,-25}, -{65,-17,-24}, -{65,-17,-23}, -{65,-17,-22}, -{65,-17,-21}, -{65,-17,-20}, -{65,-17,-19}, -{65,-17,-18}, -{65,-17,-17}, -{65,-17,-16}, -{65,-17,-15}, -{65,-17,-14}, -{65,-17,-13}, -{65,-17,-12}, -{65,-17,-11}, -{65,-17,-10}, -{65,-17,-9}, -{65,-17,-8}, -{65,-17,-7}, -{65,-17,-6}, -{65,-17,-5}, -{65,-17,-4}, -{65,-17,-3}, -{65,-17,-2}, -{65,-17,-1}, -{65,-17,0}, -{65,-17,1}, -{65,-17,2}, -{65,-17,3}, -{65,-17,4}, -{65,-17,5}, -{65,-17,6}, -{65,-17,7}, -{65,-17,8}, -{65,-17,9}, -{65,-17,10}, -{65,-17,11}, -{65,-17,12}, -{65,-17,13}, -{65,-17,14}, -{65,-17,15}, -{65,-17,16}, -{65,-17,17}, -{65,-17,18}, -{65,-17,19}, -{65,-17,20}, -{65,-17,21}, -{65,-17,22}, -{65,-17,23}, -{65,-17,24}, -{65,-17,25}, -{65,-17,26}, -{65,-17,27}, -{65,-17,28}, -{65,-17,29}, -{65,-17,30}, -{65,-17,31}, -{65,-17,32}, -{65,-17,33}, -{65,-17,34}, -{65,-17,35}, -{65,-17,36}, -{65,-17,37}, -{65,-17,38}, -{65,-17,39}, -{65,-17,40}, -{65,-17,41}, -{65,-17,42}, -{65,-17,43}, -{65,-17,44}, -{65,-17,45}, -{65,-17,46}, -{65,-17,47}, -{65,-17,48}, -{65,-17,49}, -{65,-17,50}, -{65,-17,51}, -{65,-17,52}, -{65,-17,53}, -{65,-17,54}, -{65,-17,55}, -{65,-17,56}, -{65,-17,57}, -{65,-17,58}, -{65,-17,59}, -{65,-17,60}, -{65,-17,61}, -{65,-17,62}, -{65,-17,63}, -{65,-17,64}, -{65,-17,65}, -{65,-17,66}, -{65,-17,67}, -{65,-16,-39}, -{65,-16,-38}, -{65,-16,-37}, -{65,-16,-36}, -{65,-16,-35}, -{65,-16,-34}, -{65,-16,-33}, -{65,-16,-32}, -{65,-16,-31}, -{65,-16,-30}, -{65,-16,-29}, -{65,-16,-28}, -{65,-16,-27}, -{65,-16,-26}, -{65,-16,-25}, -{65,-16,-24}, -{65,-16,-23}, -{65,-16,-22}, -{65,-16,-21}, -{65,-16,-20}, -{65,-16,-19}, -{65,-16,-18}, -{65,-16,-17}, -{65,-16,-16}, -{65,-16,-15}, -{65,-16,-14}, -{65,-16,-13}, -{65,-16,-12}, -{65,-16,-11}, -{65,-16,-10}, -{65,-16,-9}, -{65,-16,-8}, -{65,-16,-7}, -{65,-16,-6}, -{65,-16,-5}, -{65,-16,-4}, -{65,-16,-3}, -{65,-16,-2}, -{65,-16,-1}, -{65,-16,0}, -{65,-16,1}, -{65,-16,2}, -{65,-16,3}, -{65,-16,4}, -{65,-16,5}, -{65,-16,6}, -{65,-16,7}, -{65,-16,8}, -{65,-16,9}, -{65,-16,10}, -{65,-16,11}, -{65,-16,12}, -{65,-16,13}, -{65,-16,14}, -{65,-16,15}, -{65,-16,16}, -{65,-16,17}, -{65,-16,18}, -{65,-16,19}, -{65,-16,20}, -{65,-16,21}, -{65,-16,22}, -{65,-16,23}, -{65,-16,24}, -{65,-16,25}, -{65,-16,26}, -{65,-16,27}, -{65,-16,28}, -{65,-16,29}, -{65,-16,30}, -{65,-16,31}, -{65,-16,32}, -{65,-16,33}, -{65,-16,34}, -{65,-16,35}, -{65,-16,36}, -{65,-16,37}, -{65,-16,38}, -{65,-16,39}, -{65,-16,40}, -{65,-16,41}, -{65,-16,42}, -{65,-16,43}, -{65,-16,44}, -{65,-16,45}, -{65,-16,46}, -{65,-16,47}, -{65,-16,48}, -{65,-16,49}, -{65,-16,50}, -{65,-16,51}, -{65,-16,52}, -{65,-16,53}, -{65,-16,54}, -{65,-16,55}, -{65,-16,56}, -{65,-16,57}, -{65,-16,58}, -{65,-16,59}, -{65,-16,60}, -{65,-16,61}, -{65,-16,62}, -{65,-16,63}, -{65,-16,64}, -{65,-16,65}, -{65,-16,66}, -{65,-16,67}, -{65,-15,-40}, -{65,-15,-39}, -{65,-15,-38}, -{65,-15,-37}, -{65,-15,-36}, -{65,-15,-35}, -{65,-15,-34}, -{65,-15,-33}, -{65,-15,-32}, -{65,-15,-31}, -{65,-15,-30}, -{65,-15,-29}, -{65,-15,-28}, -{65,-15,-27}, -{65,-15,-26}, -{65,-15,-25}, -{65,-15,-24}, -{65,-15,-23}, -{65,-15,-22}, -{65,-15,-21}, -{65,-15,-20}, -{65,-15,-19}, -{65,-15,-18}, -{65,-15,-17}, -{65,-15,-16}, -{65,-15,-15}, -{65,-15,-14}, -{65,-15,-13}, -{65,-15,-12}, -{65,-15,-11}, -{65,-15,-10}, -{65,-15,-9}, -{65,-15,-8}, -{65,-15,-7}, -{65,-15,-6}, -{65,-15,-5}, -{65,-15,-4}, -{65,-15,-3}, -{65,-15,-2}, -{65,-15,-1}, -{65,-15,0}, -{65,-15,1}, -{65,-15,2}, -{65,-15,3}, -{65,-15,4}, -{65,-15,5}, -{65,-15,6}, -{65,-15,7}, -{65,-15,8}, -{65,-15,9}, -{65,-15,10}, -{65,-15,11}, -{65,-15,12}, -{65,-15,13}, -{65,-15,14}, -{65,-15,15}, -{65,-15,16}, -{65,-15,17}, -{65,-15,18}, -{65,-15,19}, -{65,-15,20}, -{65,-15,21}, -{65,-15,22}, -{65,-15,23}, -{65,-15,24}, -{65,-15,25}, -{65,-15,26}, -{65,-15,27}, -{65,-15,28}, -{65,-15,29}, -{65,-15,30}, -{65,-15,31}, -{65,-15,32}, -{65,-15,33}, -{65,-15,34}, -{65,-15,35}, -{65,-15,36}, -{65,-15,37}, -{65,-15,38}, -{65,-15,39}, -{65,-15,40}, -{65,-15,41}, -{65,-15,42}, -{65,-15,43}, -{65,-15,44}, -{65,-15,45}, -{65,-15,46}, -{65,-15,47}, -{65,-15,48}, -{65,-15,49}, -{65,-15,50}, -{65,-15,51}, -{65,-15,52}, -{65,-15,53}, -{65,-15,54}, -{65,-15,55}, -{65,-15,56}, -{65,-15,57}, -{65,-15,58}, -{65,-15,59}, -{65,-15,60}, -{65,-15,61}, -{65,-15,62}, -{65,-15,63}, -{65,-15,64}, -{65,-15,65}, -{65,-15,66}, -{65,-15,67}, -{65,-14,-41}, -{65,-14,-40}, -{65,-14,-39}, -{65,-14,-38}, -{65,-14,-37}, -{65,-14,-36}, -{65,-14,-35}, -{65,-14,-34}, -{65,-14,-33}, -{65,-14,-32}, -{65,-14,-31}, -{65,-14,-30}, -{65,-14,-29}, -{65,-14,-28}, -{65,-14,-27}, -{65,-14,-26}, -{65,-14,-25}, -{65,-14,-24}, -{65,-14,-23}, -{65,-14,-22}, -{65,-14,-21}, -{65,-14,-20}, -{65,-14,-19}, -{65,-14,-18}, -{65,-14,-17}, -{65,-14,-16}, -{65,-14,-15}, -{65,-14,-14}, -{65,-14,-13}, -{65,-14,-12}, -{65,-14,-11}, -{65,-14,-10}, -{65,-14,-9}, -{65,-14,-8}, -{65,-14,-7}, -{65,-14,-6}, -{65,-14,-5}, -{65,-14,-4}, -{65,-14,-3}, -{65,-14,-2}, -{65,-14,-1}, -{65,-14,0}, -{65,-14,1}, -{65,-14,2}, -{65,-14,3}, -{65,-14,4}, -{65,-14,5}, -{65,-14,6}, -{65,-14,7}, -{65,-14,8}, -{65,-14,9}, -{65,-14,10}, -{65,-14,11}, -{65,-14,12}, -{65,-14,13}, -{65,-14,14}, -{65,-14,15}, -{65,-14,16}, -{65,-14,17}, -{65,-14,18}, -{65,-14,19}, -{65,-14,20}, -{65,-14,21}, -{65,-14,22}, -{65,-14,23}, -{65,-14,24}, -{65,-14,25}, -{65,-14,26}, -{65,-14,27}, -{65,-14,28}, -{65,-14,29}, -{65,-14,30}, -{65,-14,31}, -{65,-14,32}, -{65,-14,33}, -{65,-14,34}, -{65,-14,35}, -{65,-14,36}, -{65,-14,37}, -{65,-14,38}, -{65,-14,39}, -{65,-14,40}, -{65,-14,41}, -{65,-14,42}, -{65,-14,43}, -{65,-14,44}, -{65,-14,45}, -{65,-14,46}, -{65,-14,47}, -{65,-14,48}, -{65,-14,49}, -{65,-14,50}, -{65,-14,51}, -{65,-14,52}, -{65,-14,53}, -{65,-14,54}, -{65,-14,55}, -{65,-14,56}, -{65,-14,57}, -{65,-14,58}, -{65,-14,59}, -{65,-14,60}, -{65,-14,61}, -{65,-14,62}, -{65,-14,63}, -{65,-14,64}, -{65,-14,65}, -{65,-14,66}, -{65,-14,67}, -{65,-13,-43}, -{65,-13,-42}, -{65,-13,-41}, -{65,-13,-40}, -{65,-13,-39}, -{65,-13,-38}, -{65,-13,-37}, -{65,-13,-36}, -{65,-13,-35}, -{65,-13,-34}, -{65,-13,-33}, -{65,-13,-32}, -{65,-13,-31}, -{65,-13,-30}, -{65,-13,-29}, -{65,-13,-28}, -{65,-13,-27}, -{65,-13,-26}, -{65,-13,-25}, -{65,-13,-24}, -{65,-13,-23}, -{65,-13,-22}, -{65,-13,-21}, -{65,-13,-20}, -{65,-13,-19}, -{65,-13,-18}, -{65,-13,-17}, -{65,-13,-16}, -{65,-13,-15}, -{65,-13,-14}, -{65,-13,-13}, -{65,-13,-12}, -{65,-13,-11}, -{65,-13,-10}, -{65,-13,-9}, -{65,-13,-8}, -{65,-13,-7}, -{65,-13,-6}, -{65,-13,-5}, -{65,-13,-4}, -{65,-13,-3}, -{65,-13,-2}, -{65,-13,-1}, -{65,-13,0}, -{65,-13,1}, -{65,-13,2}, -{65,-13,3}, -{65,-13,4}, -{65,-13,5}, -{65,-13,6}, -{65,-13,7}, -{65,-13,8}, -{65,-13,9}, -{65,-13,10}, -{65,-13,11}, -{65,-13,12}, -{65,-13,13}, -{65,-13,14}, -{65,-13,15}, -{65,-13,16}, -{65,-13,17}, -{65,-13,18}, -{65,-13,19}, -{65,-13,20}, -{65,-13,21}, -{65,-13,22}, -{65,-13,23}, -{65,-13,24}, -{65,-13,25}, -{65,-13,26}, -{65,-13,27}, -{65,-13,28}, -{65,-13,29}, -{65,-13,30}, -{65,-13,31}, -{65,-13,32}, -{65,-13,33}, -{65,-13,34}, -{65,-13,35}, -{65,-13,36}, -{65,-13,37}, -{65,-13,38}, -{65,-13,39}, -{65,-13,40}, -{65,-13,41}, -{65,-13,42}, -{65,-13,43}, -{65,-13,44}, -{65,-13,45}, -{65,-13,46}, -{65,-13,47}, -{65,-13,48}, -{65,-13,49}, -{65,-13,50}, -{65,-13,51}, -{65,-13,52}, -{65,-13,53}, -{65,-13,54}, -{65,-13,55}, -{65,-13,56}, -{65,-13,57}, -{65,-13,58}, -{65,-13,59}, -{65,-13,60}, -{65,-13,61}, -{65,-13,62}, -{65,-13,63}, -{65,-13,64}, -{65,-13,65}, -{65,-13,66}, -{65,-13,67}, -{65,-12,-44}, -{65,-12,-43}, -{65,-12,-42}, -{65,-12,-41}, -{65,-12,-40}, -{65,-12,-39}, -{65,-12,-38}, -{65,-12,-37}, -{65,-12,-36}, -{65,-12,-35}, -{65,-12,-34}, -{65,-12,-33}, -{65,-12,-32}, -{65,-12,-31}, -{65,-12,-30}, -{65,-12,-29}, -{65,-12,-28}, -{65,-12,-27}, -{65,-12,-26}, -{65,-12,-25}, -{65,-12,-24}, -{65,-12,-23}, -{65,-12,-22}, -{65,-12,-21}, -{65,-12,-20}, -{65,-12,-19}, -{65,-12,-18}, -{65,-12,-17}, -{65,-12,-16}, -{65,-12,-15}, -{65,-12,-14}, -{65,-12,-13}, -{65,-12,-12}, -{65,-12,-11}, -{65,-12,-10}, -{65,-12,-9}, -{65,-12,-8}, -{65,-12,-7}, -{65,-12,-6}, -{65,-12,-5}, -{65,-12,-4}, -{65,-12,-3}, -{65,-12,-2}, -{65,-12,-1}, -{65,-12,0}, -{65,-12,1}, -{65,-12,2}, -{65,-12,3}, -{65,-12,4}, -{65,-12,5}, -{65,-12,6}, -{65,-12,7}, -{65,-12,8}, -{65,-12,9}, -{65,-12,10}, -{65,-12,11}, -{65,-12,12}, -{65,-12,13}, -{65,-12,14}, -{65,-12,15}, -{65,-12,16}, -{65,-12,17}, -{65,-12,18}, -{65,-12,19}, -{65,-12,20}, -{65,-12,21}, -{65,-12,22}, -{65,-12,23}, -{65,-12,24}, -{65,-12,25}, -{65,-12,26}, -{65,-12,27}, -{65,-12,28}, -{65,-12,29}, -{65,-12,30}, -{65,-12,31}, -{65,-12,32}, -{65,-12,33}, -{65,-12,34}, -{65,-12,35}, -{65,-12,36}, -{65,-12,37}, -{65,-12,38}, -{65,-12,39}, -{65,-12,40}, -{65,-12,41}, -{65,-12,42}, -{65,-12,43}, -{65,-12,44}, -{65,-12,45}, -{65,-12,46}, -{65,-12,47}, -{65,-12,48}, -{65,-12,49}, -{65,-12,50}, -{65,-12,51}, -{65,-12,52}, -{65,-12,53}, -{65,-12,54}, -{65,-12,55}, -{65,-12,56}, -{65,-12,57}, -{65,-12,58}, -{65,-12,59}, -{65,-12,60}, -{65,-12,61}, -{65,-12,62}, -{65,-12,63}, -{65,-12,64}, -{65,-12,65}, -{65,-12,66}, -{65,-12,67}, -{65,-12,68}, -{65,-11,-45}, -{65,-11,-44}, -{65,-11,-43}, -{65,-11,-42}, -{65,-11,-41}, -{65,-11,-40}, -{65,-11,-39}, -{65,-11,-38}, -{65,-11,-37}, -{65,-11,-36}, -{65,-11,-35}, -{65,-11,-34}, -{65,-11,-33}, -{65,-11,-32}, -{65,-11,-31}, -{65,-11,-30}, -{65,-11,-29}, -{65,-11,-28}, -{65,-11,-27}, -{65,-11,-26}, -{65,-11,-25}, -{65,-11,-24}, -{65,-11,-23}, -{65,-11,-22}, -{65,-11,-21}, -{65,-11,-20}, -{65,-11,-19}, -{65,-11,-18}, -{65,-11,-17}, -{65,-11,-16}, -{65,-11,-15}, -{65,-11,-14}, -{65,-11,-13}, -{65,-11,-12}, -{65,-11,-11}, -{65,-11,-10}, -{65,-11,-9}, -{65,-11,-8}, -{65,-11,-7}, -{65,-11,-6}, -{65,-11,-5}, -{65,-11,-4}, -{65,-11,-3}, -{65,-11,-2}, -{65,-11,-1}, -{65,-11,0}, -{65,-11,1}, -{65,-11,2}, -{65,-11,3}, -{65,-11,4}, -{65,-11,5}, -{65,-11,6}, -{65,-11,7}, -{65,-11,8}, -{65,-11,9}, -{65,-11,10}, -{65,-11,11}, -{65,-11,12}, -{65,-11,13}, -{65,-11,14}, -{65,-11,15}, -{65,-11,16}, -{65,-11,17}, -{65,-11,18}, -{65,-11,19}, -{65,-11,20}, -{65,-11,21}, -{65,-11,22}, -{65,-11,23}, -{65,-11,24}, -{65,-11,25}, -{65,-11,26}, -{65,-11,27}, -{65,-11,28}, -{65,-11,29}, -{65,-11,30}, -{65,-11,31}, -{65,-11,32}, -{65,-11,33}, -{65,-11,34}, -{65,-11,35}, -{65,-11,36}, -{65,-11,37}, -{65,-11,38}, -{65,-11,39}, -{65,-11,40}, -{65,-11,41}, -{65,-11,42}, -{65,-11,43}, -{65,-11,44}, -{65,-11,45}, -{65,-11,46}, -{65,-11,47}, -{65,-11,48}, -{65,-11,49}, -{65,-11,50}, -{65,-11,51}, -{65,-11,52}, -{65,-11,53}, -{65,-11,54}, -{65,-11,55}, -{65,-11,56}, -{65,-11,57}, -{65,-11,58}, -{65,-11,59}, -{65,-11,60}, -{65,-11,61}, -{65,-11,62}, -{65,-11,63}, -{65,-11,64}, -{65,-11,65}, -{65,-11,66}, -{65,-11,67}, -{65,-11,68}, -{65,-10,-46}, -{65,-10,-45}, -{65,-10,-44}, -{65,-10,-43}, -{65,-10,-42}, -{65,-10,-41}, -{65,-10,-40}, -{65,-10,-39}, -{65,-10,-38}, -{65,-10,-37}, -{65,-10,-36}, -{65,-10,-35}, -{65,-10,-34}, -{65,-10,-33}, -{65,-10,-32}, -{65,-10,-31}, -{65,-10,-30}, -{65,-10,-29}, -{65,-10,-28}, -{65,-10,-27}, -{65,-10,-26}, -{65,-10,-25}, -{65,-10,-24}, -{65,-10,-23}, -{65,-10,-22}, -{65,-10,-21}, -{65,-10,-20}, -{65,-10,-19}, -{65,-10,-18}, -{65,-10,-17}, -{65,-10,-16}, -{65,-10,-15}, -{65,-10,-14}, -{65,-10,-13}, -{65,-10,-12}, -{65,-10,-11}, -{65,-10,-10}, -{65,-10,-9}, -{65,-10,-8}, -{65,-10,-7}, -{65,-10,-6}, -{65,-10,-5}, -{65,-10,-4}, -{65,-10,-3}, -{65,-10,-2}, -{65,-10,-1}, -{65,-10,0}, -{65,-10,1}, -{65,-10,2}, -{65,-10,3}, -{65,-10,4}, -{65,-10,5}, -{65,-10,6}, -{65,-10,7}, -{65,-10,8}, -{65,-10,9}, -{65,-10,10}, -{65,-10,11}, -{65,-10,12}, -{65,-10,13}, -{65,-10,14}, -{65,-10,15}, -{65,-10,16}, -{65,-10,17}, -{65,-10,18}, -{65,-10,19}, -{65,-10,20}, -{65,-10,21}, -{65,-10,22}, -{65,-10,23}, -{65,-10,24}, -{65,-10,25}, -{65,-10,26}, -{65,-10,27}, -{65,-10,28}, -{65,-10,29}, -{65,-10,30}, -{65,-10,31}, -{65,-10,32}, -{65,-10,33}, -{65,-10,34}, -{65,-10,35}, -{65,-10,36}, -{65,-10,37}, -{65,-10,38}, -{65,-10,39}, -{65,-10,40}, -{65,-10,41}, -{65,-10,42}, -{65,-10,43}, -{65,-10,44}, -{65,-10,45}, -{65,-10,46}, -{65,-10,47}, -{65,-10,48}, -{65,-10,49}, -{65,-10,50}, -{65,-10,51}, -{65,-10,52}, -{65,-10,53}, -{65,-10,54}, -{65,-10,55}, -{65,-10,56}, -{65,-10,57}, -{65,-10,58}, -{65,-10,59}, -{65,-10,60}, -{65,-10,61}, -{65,-10,62}, -{65,-10,63}, -{65,-10,64}, -{65,-10,65}, -{65,-10,66}, -{65,-10,67}, -{65,-10,68}, -{65,-9,-47}, -{65,-9,-46}, -{65,-9,-45}, -{65,-9,-44}, -{65,-9,-43}, -{65,-9,-42}, -{65,-9,-41}, -{65,-9,-40}, -{65,-9,-39}, -{65,-9,-38}, -{65,-9,-37}, -{65,-9,-36}, -{65,-9,-35}, -{65,-9,-34}, -{65,-9,-33}, -{65,-9,-32}, -{65,-9,-31}, -{65,-9,-30}, -{65,-9,-29}, -{65,-9,-28}, -{65,-9,-27}, -{65,-9,-26}, -{65,-9,-25}, -{65,-9,-24}, -{65,-9,-23}, -{65,-9,-22}, -{65,-9,-21}, -{65,-9,-20}, -{65,-9,-19}, -{65,-9,-18}, -{65,-9,-17}, -{65,-9,-16}, -{65,-9,-15}, -{65,-9,-14}, -{65,-9,-13}, -{65,-9,-12}, -{65,-9,-11}, -{65,-9,-10}, -{65,-9,-9}, -{65,-9,-8}, -{65,-9,-7}, -{65,-9,-6}, -{65,-9,-5}, -{65,-9,-4}, -{65,-9,-3}, -{65,-9,-2}, -{65,-9,-1}, -{65,-9,0}, -{65,-9,1}, -{65,-9,2}, -{65,-9,3}, -{65,-9,4}, -{65,-9,5}, -{65,-9,6}, -{65,-9,7}, -{65,-9,8}, -{65,-9,9}, -{65,-9,10}, -{65,-9,11}, -{65,-9,12}, -{65,-9,13}, -{65,-9,14}, -{65,-9,15}, -{65,-9,16}, -{65,-9,17}, -{65,-9,18}, -{65,-9,19}, -{65,-9,20}, -{65,-9,21}, -{65,-9,22}, -{65,-9,23}, -{65,-9,24}, -{65,-9,25}, -{65,-9,26}, -{65,-9,27}, -{65,-9,28}, -{65,-9,29}, -{65,-9,30}, -{65,-9,31}, -{65,-9,32}, -{65,-9,33}, -{65,-9,34}, -{65,-9,35}, -{65,-9,36}, -{65,-9,37}, -{65,-9,38}, -{65,-9,39}, -{65,-9,40}, -{65,-9,41}, -{65,-9,42}, -{65,-9,43}, -{65,-9,44}, -{65,-9,45}, -{65,-9,46}, -{65,-9,47}, -{65,-9,48}, -{65,-9,49}, -{65,-9,50}, -{65,-9,51}, -{65,-9,52}, -{65,-9,53}, -{65,-9,54}, -{65,-9,55}, -{65,-9,56}, -{65,-9,57}, -{65,-9,58}, -{65,-9,59}, -{65,-9,60}, -{65,-9,61}, -{65,-9,62}, -{65,-9,63}, -{65,-9,64}, -{65,-9,65}, -{65,-9,66}, -{65,-9,67}, -{65,-9,68}, -{65,-8,-49}, -{65,-8,-48}, -{65,-8,-47}, -{65,-8,-46}, -{65,-8,-45}, -{65,-8,-44}, -{65,-8,-43}, -{65,-8,-42}, -{65,-8,-41}, -{65,-8,-40}, -{65,-8,-39}, -{65,-8,-38}, -{65,-8,-37}, -{65,-8,-36}, -{65,-8,-35}, -{65,-8,-34}, -{65,-8,-33}, -{65,-8,-32}, -{65,-8,-31}, -{65,-8,-30}, -{65,-8,-29}, -{65,-8,-28}, -{65,-8,-27}, -{65,-8,-26}, -{65,-8,-25}, -{65,-8,-24}, -{65,-8,-23}, -{65,-8,-22}, -{65,-8,-21}, -{65,-8,-20}, -{65,-8,-19}, -{65,-8,-18}, -{65,-8,-17}, -{65,-8,-16}, -{65,-8,-15}, -{65,-8,-14}, -{65,-8,-13}, -{65,-8,-12}, -{65,-8,-11}, -{65,-8,-10}, -{65,-8,-9}, -{65,-8,-8}, -{65,-8,-7}, -{65,-8,-6}, -{65,-8,-5}, -{65,-8,-4}, -{65,-8,-3}, -{65,-8,-2}, -{65,-8,-1}, -{65,-8,0}, -{65,-8,1}, -{65,-8,2}, -{65,-8,3}, -{65,-8,4}, -{65,-8,5}, -{65,-8,6}, -{65,-8,7}, -{65,-8,8}, -{65,-8,9}, -{65,-8,10}, -{65,-8,11}, -{65,-8,12}, -{65,-8,13}, -{65,-8,14}, -{65,-8,15}, -{65,-8,16}, -{65,-8,17}, -{65,-8,18}, -{65,-8,19}, -{65,-8,20}, -{65,-8,21}, -{65,-8,22}, -{65,-8,23}, -{65,-8,24}, -{65,-8,25}, -{65,-8,26}, -{65,-8,27}, -{65,-8,28}, -{65,-8,29}, -{65,-8,30}, -{65,-8,31}, -{65,-8,32}, -{65,-8,33}, -{65,-8,34}, -{65,-8,35}, -{65,-8,36}, -{65,-8,37}, -{65,-8,38}, -{65,-8,39}, -{65,-8,40}, -{65,-8,41}, -{65,-8,42}, -{65,-8,43}, -{65,-8,44}, -{65,-8,45}, -{65,-8,46}, -{65,-8,47}, -{65,-8,48}, -{65,-8,49}, -{65,-8,50}, -{65,-8,51}, -{65,-8,52}, -{65,-8,53}, -{65,-8,54}, -{65,-8,55}, -{65,-8,56}, -{65,-8,57}, -{65,-8,58}, -{65,-8,59}, -{65,-8,60}, -{65,-8,61}, -{65,-8,62}, -{65,-8,63}, -{65,-8,64}, -{65,-8,65}, -{65,-8,66}, -{65,-8,67}, -{65,-8,68}, -{65,-7,-50}, -{65,-7,-49}, -{65,-7,-48}, -{65,-7,-47}, -{65,-7,-46}, -{65,-7,-45}, -{65,-7,-44}, -{65,-7,-43}, -{65,-7,-42}, -{65,-7,-41}, -{65,-7,-40}, -{65,-7,-39}, -{65,-7,-38}, -{65,-7,-37}, -{65,-7,-36}, -{65,-7,-35}, -{65,-7,-34}, -{65,-7,-33}, -{65,-7,-32}, -{65,-7,-31}, -{65,-7,-30}, -{65,-7,-29}, -{65,-7,-28}, -{65,-7,-27}, -{65,-7,-26}, -{65,-7,-25}, -{65,-7,-24}, -{65,-7,-23}, -{65,-7,-22}, -{65,-7,-21}, -{65,-7,-20}, -{65,-7,-19}, -{65,-7,-18}, -{65,-7,-17}, -{65,-7,-16}, -{65,-7,-15}, -{65,-7,-14}, -{65,-7,-13}, -{65,-7,-12}, -{65,-7,-11}, -{65,-7,-10}, -{65,-7,-9}, -{65,-7,-8}, -{65,-7,-7}, -{65,-7,-6}, -{65,-7,-5}, -{65,-7,-4}, -{65,-7,-3}, -{65,-7,-2}, -{65,-7,-1}, -{65,-7,0}, -{65,-7,1}, -{65,-7,2}, -{65,-7,3}, -{65,-7,4}, -{65,-7,5}, -{65,-7,6}, -{65,-7,7}, -{65,-7,8}, -{65,-7,9}, -{65,-7,10}, -{65,-7,11}, -{65,-7,12}, -{65,-7,13}, -{65,-7,14}, -{65,-7,15}, -{65,-7,16}, -{65,-7,17}, -{65,-7,18}, -{65,-7,19}, -{65,-7,20}, -{65,-7,21}, -{65,-7,22}, -{65,-7,23}, -{65,-7,24}, -{65,-7,25}, -{65,-7,26}, -{65,-7,27}, -{65,-7,28}, -{65,-7,29}, -{65,-7,30}, -{65,-7,31}, -{65,-7,32}, -{65,-7,33}, -{65,-7,34}, -{65,-7,35}, -{65,-7,36}, -{65,-7,37}, -{65,-7,38}, -{65,-7,39}, -{65,-7,40}, -{65,-7,41}, -{65,-7,42}, -{65,-7,43}, -{65,-7,44}, -{65,-7,45}, -{65,-7,46}, -{65,-7,47}, -{65,-7,48}, -{65,-7,49}, -{65,-7,50}, -{65,-7,51}, -{65,-7,52}, -{65,-7,53}, -{65,-7,54}, -{65,-7,55}, -{65,-7,56}, -{65,-7,57}, -{65,-7,58}, -{65,-7,59}, -{65,-7,60}, -{65,-7,61}, -{65,-7,62}, -{65,-7,63}, -{65,-7,64}, -{65,-7,65}, -{65,-7,66}, -{65,-7,67}, -{65,-7,68}, -{65,-6,-51}, -{65,-6,-50}, -{65,-6,-49}, -{65,-6,-48}, -{65,-6,-47}, -{65,-6,-46}, -{65,-6,-45}, -{65,-6,-44}, -{65,-6,-43}, -{65,-6,-42}, -{65,-6,-41}, -{65,-6,-40}, -{65,-6,-39}, -{65,-6,-38}, -{65,-6,-37}, -{65,-6,-36}, -{65,-6,-35}, -{65,-6,-34}, -{65,-6,-33}, -{65,-6,-32}, -{65,-6,-31}, -{65,-6,-30}, -{65,-6,-29}, -{65,-6,-28}, -{65,-6,-27}, -{65,-6,-26}, -{65,-6,-25}, -{65,-6,-24}, -{65,-6,-23}, -{65,-6,-22}, -{65,-6,-21}, -{65,-6,-20}, -{65,-6,-19}, -{65,-6,-18}, -{65,-6,-17}, -{65,-6,-16}, -{65,-6,-15}, -{65,-6,-14}, -{65,-6,-13}, -{65,-6,-12}, -{65,-6,-11}, -{65,-6,-10}, -{65,-6,-9}, -{65,-6,-8}, -{65,-6,-7}, -{65,-6,-6}, -{65,-6,-5}, -{65,-6,-4}, -{65,-6,-3}, -{65,-6,-2}, -{65,-6,-1}, -{65,-6,0}, -{65,-6,1}, -{65,-6,2}, -{65,-6,3}, -{65,-6,4}, -{65,-6,5}, -{65,-6,6}, -{65,-6,7}, -{65,-6,8}, -{65,-6,9}, -{65,-6,10}, -{65,-6,11}, -{65,-6,12}, -{65,-6,13}, -{65,-6,14}, -{65,-6,15}, -{65,-6,16}, -{65,-6,17}, -{65,-6,18}, -{65,-6,19}, -{65,-6,20}, -{65,-6,21}, -{65,-6,22}, -{65,-6,23}, -{65,-6,24}, -{65,-6,25}, -{65,-6,26}, -{65,-6,27}, -{65,-6,28}, -{65,-6,29}, -{65,-6,30}, -{65,-6,31}, -{65,-6,32}, -{65,-6,33}, -{65,-6,34}, -{65,-6,35}, -{65,-6,36}, -{65,-6,37}, -{65,-6,38}, -{65,-6,39}, -{65,-6,40}, -{65,-6,41}, -{65,-6,42}, -{65,-6,43}, -{65,-6,44}, -{65,-6,45}, -{65,-6,46}, -{65,-6,47}, -{65,-6,48}, -{65,-6,49}, -{65,-6,50}, -{65,-6,51}, -{65,-6,52}, -{65,-6,53}, -{65,-6,54}, -{65,-6,55}, -{65,-6,56}, -{65,-6,57}, -{65,-6,58}, -{65,-6,59}, -{65,-6,60}, -{65,-6,61}, -{65,-6,62}, -{65,-6,63}, -{65,-6,64}, -{65,-6,65}, -{65,-6,66}, -{65,-6,67}, -{65,-6,68}, -{65,-5,-52}, -{65,-5,-51}, -{65,-5,-50}, -{65,-5,-49}, -{65,-5,-48}, -{65,-5,-47}, -{65,-5,-46}, -{65,-5,-45}, -{65,-5,-44}, -{65,-5,-43}, -{65,-5,-42}, -{65,-5,-41}, -{65,-5,-40}, -{65,-5,-39}, -{65,-5,-38}, -{65,-5,-37}, -{65,-5,-36}, -{65,-5,-35}, -{65,-5,-34}, -{65,-5,-33}, -{65,-5,-32}, -{65,-5,-31}, -{65,-5,-30}, -{65,-5,-29}, -{65,-5,-28}, -{65,-5,-27}, -{65,-5,-26}, -{65,-5,-25}, -{65,-5,-24}, -{65,-5,-23}, -{65,-5,-22}, -{65,-5,-21}, -{65,-5,-20}, -{65,-5,-19}, -{65,-5,-18}, -{65,-5,-17}, -{65,-5,-16}, -{65,-5,-15}, -{65,-5,-14}, -{65,-5,-13}, -{65,-5,-12}, -{65,-5,-11}, -{65,-5,-10}, -{65,-5,-9}, -{65,-5,-8}, -{65,-5,-7}, -{65,-5,-6}, -{65,-5,-5}, -{65,-5,-4}, -{65,-5,-3}, -{65,-5,-2}, -{65,-5,-1}, -{65,-5,0}, -{65,-5,1}, -{65,-5,2}, -{65,-5,3}, -{65,-5,4}, -{65,-5,5}, -{65,-5,6}, -{65,-5,7}, -{65,-5,8}, -{65,-5,9}, -{65,-5,10}, -{65,-5,11}, -{65,-5,12}, -{65,-5,13}, -{65,-5,14}, -{65,-5,15}, -{65,-5,16}, -{65,-5,17}, -{65,-5,18}, -{65,-5,19}, -{65,-5,20}, -{65,-5,21}, -{65,-5,22}, -{65,-5,23}, -{65,-5,24}, -{65,-5,25}, -{65,-5,26}, -{65,-5,27}, -{65,-5,28}, -{65,-5,29}, -{65,-5,30}, -{65,-5,31}, -{65,-5,32}, -{65,-5,33}, -{65,-5,34}, -{65,-5,35}, -{65,-5,36}, -{65,-5,37}, -{65,-5,38}, -{65,-5,39}, -{65,-5,40}, -{65,-5,41}, -{65,-5,42}, -{65,-5,43}, -{65,-5,44}, -{65,-5,45}, -{65,-5,46}, -{65,-5,47}, -{65,-5,48}, -{65,-5,49}, -{65,-5,50}, -{65,-5,51}, -{65,-5,52}, -{65,-5,53}, -{65,-5,54}, -{65,-5,55}, -{65,-5,56}, -{65,-5,57}, -{65,-5,58}, -{65,-5,59}, -{65,-5,60}, -{65,-5,61}, -{65,-5,62}, -{65,-5,63}, -{65,-5,64}, -{65,-5,65}, -{65,-5,66}, -{65,-5,67}, -{65,-5,68}, -{65,-4,-53}, -{65,-4,-52}, -{65,-4,-51}, -{65,-4,-50}, -{65,-4,-49}, -{65,-4,-48}, -{65,-4,-47}, -{65,-4,-46}, -{65,-4,-45}, -{65,-4,-44}, -{65,-4,-43}, -{65,-4,-42}, -{65,-4,-41}, -{65,-4,-40}, -{65,-4,-39}, -{65,-4,-38}, -{65,-4,-37}, -{65,-4,-36}, -{65,-4,-35}, -{65,-4,-34}, -{65,-4,-33}, -{65,-4,-32}, -{65,-4,-31}, -{65,-4,-30}, -{65,-4,-29}, -{65,-4,-28}, -{65,-4,-27}, -{65,-4,-26}, -{65,-4,-25}, -{65,-4,-24}, -{65,-4,-23}, -{65,-4,-22}, -{65,-4,-21}, -{65,-4,-20}, -{65,-4,-19}, -{65,-4,-18}, -{65,-4,-17}, -{65,-4,-16}, -{65,-4,-15}, -{65,-4,-14}, -{65,-4,-13}, -{65,-4,-12}, -{65,-4,-11}, -{65,-4,-10}, -{65,-4,-9}, -{65,-4,-8}, -{65,-4,-7}, -{65,-4,-6}, -{65,-4,-5}, -{65,-4,-4}, -{65,-4,-3}, -{65,-4,-2}, -{65,-4,-1}, -{65,-4,0}, -{65,-4,1}, -{65,-4,2}, -{65,-4,3}, -{65,-4,4}, -{65,-4,5}, -{65,-4,6}, -{65,-4,7}, -{65,-4,8}, -{65,-4,9}, -{65,-4,10}, -{65,-4,11}, -{65,-4,12}, -{65,-4,13}, -{65,-4,14}, -{65,-4,15}, -{65,-4,16}, -{65,-4,17}, -{65,-4,18}, -{65,-4,19}, -{65,-4,20}, -{65,-4,21}, -{65,-4,22}, -{65,-4,23}, -{65,-4,24}, -{65,-4,25}, -{65,-4,26}, -{65,-4,27}, -{65,-4,28}, -{65,-4,29}, -{65,-4,30}, -{65,-4,31}, -{65,-4,32}, -{65,-4,33}, -{65,-4,34}, -{65,-4,35}, -{65,-4,36}, -{65,-4,37}, -{65,-4,38}, -{65,-4,39}, -{65,-4,40}, -{65,-4,41}, -{65,-4,42}, -{65,-4,43}, -{65,-4,44}, -{65,-4,45}, -{65,-4,46}, -{65,-4,47}, -{65,-4,48}, -{65,-4,49}, -{65,-4,50}, -{65,-4,51}, -{65,-4,52}, -{65,-4,53}, -{65,-4,54}, -{65,-4,55}, -{65,-4,56}, -{65,-4,57}, -{65,-4,58}, -{65,-4,59}, -{65,-4,60}, -{65,-4,61}, -{65,-4,62}, -{65,-4,63}, -{65,-4,64}, -{65,-4,65}, -{65,-4,66}, -{65,-4,67}, -{65,-4,68}, -{65,-3,-54}, -{65,-3,-53}, -{65,-3,-52}, -{65,-3,-51}, -{65,-3,-50}, -{65,-3,-49}, -{65,-3,-48}, -{65,-3,-47}, -{65,-3,-46}, -{65,-3,-45}, -{65,-3,-44}, -{65,-3,-43}, -{65,-3,-42}, -{65,-3,-41}, -{65,-3,-40}, -{65,-3,-39}, -{65,-3,-38}, -{65,-3,-37}, -{65,-3,-36}, -{65,-3,-35}, -{65,-3,-34}, -{65,-3,-33}, -{65,-3,-32}, -{65,-3,-31}, -{65,-3,-30}, -{65,-3,-29}, -{65,-3,-28}, -{65,-3,-27}, -{65,-3,-26}, -{65,-3,-25}, -{65,-3,-24}, -{65,-3,-23}, -{65,-3,-22}, -{65,-3,-21}, -{65,-3,-20}, -{65,-3,-19}, -{65,-3,-18}, -{65,-3,-17}, -{65,-3,-16}, -{65,-3,-15}, -{65,-3,-14}, -{65,-3,-13}, -{65,-3,-12}, -{65,-3,-11}, -{65,-3,-10}, -{65,-3,-9}, -{65,-3,-8}, -{65,-3,-7}, -{65,-3,-6}, -{65,-3,-5}, -{65,-3,-4}, -{65,-3,-3}, -{65,-3,-2}, -{65,-3,-1}, -{65,-3,0}, -{65,-3,1}, -{65,-3,2}, -{65,-3,3}, -{65,-3,4}, -{65,-3,5}, -{65,-3,6}, -{65,-3,7}, -{65,-3,8}, -{65,-3,9}, -{65,-3,10}, -{65,-3,11}, -{65,-3,12}, -{65,-3,13}, -{65,-3,14}, -{65,-3,15}, -{65,-3,16}, -{65,-3,17}, -{65,-3,18}, -{65,-3,19}, -{65,-3,20}, -{65,-3,21}, -{65,-3,22}, -{65,-3,23}, -{65,-3,24}, -{65,-3,25}, -{65,-3,26}, -{65,-3,27}, -{65,-3,28}, -{65,-3,29}, -{65,-3,30}, -{65,-3,31}, -{65,-3,32}, -{65,-3,33}, -{65,-3,34}, -{65,-3,35}, -{65,-3,36}, -{65,-3,37}, -{65,-3,38}, -{65,-3,39}, -{65,-3,40}, -{65,-3,41}, -{65,-3,42}, -{65,-3,43}, -{65,-3,44}, -{65,-3,45}, -{65,-3,46}, -{65,-3,47}, -{65,-3,48}, -{65,-3,49}, -{65,-3,50}, -{65,-3,51}, -{65,-3,52}, -{65,-3,53}, -{65,-3,54}, -{65,-3,55}, -{65,-3,56}, -{65,-3,57}, -{65,-3,58}, -{65,-3,59}, -{65,-3,60}, -{65,-3,61}, -{65,-3,62}, -{65,-3,63}, -{65,-3,64}, -{65,-3,65}, -{65,-3,66}, -{65,-3,67}, -{65,-3,68}, -{65,-2,-54}, -{65,-2,-53}, -{65,-2,-52}, -{65,-2,-51}, -{65,-2,-50}, -{65,-2,-49}, -{65,-2,-48}, -{65,-2,-47}, -{65,-2,-46}, -{65,-2,-45}, -{65,-2,-44}, -{65,-2,-43}, -{65,-2,-42}, -{65,-2,-41}, -{65,-2,-40}, -{65,-2,-39}, -{65,-2,-38}, -{65,-2,-37}, -{65,-2,-36}, -{65,-2,-35}, -{65,-2,-34}, -{65,-2,-33}, -{65,-2,-32}, -{65,-2,-31}, -{65,-2,-30}, -{65,-2,-29}, -{65,-2,-28}, -{65,-2,-27}, -{65,-2,-26}, -{65,-2,-25}, -{65,-2,-24}, -{65,-2,-23}, -{65,-2,-22}, -{65,-2,-21}, -{65,-2,-20}, -{65,-2,-19}, -{65,-2,-18}, -{65,-2,-17}, -{65,-2,-16}, -{65,-2,-15}, -{65,-2,-14}, -{65,-2,-13}, -{65,-2,-12}, -{65,-2,-11}, -{65,-2,-10}, -{65,-2,-9}, -{65,-2,-8}, -{65,-2,-7}, -{65,-2,-6}, -{65,-2,-5}, -{65,-2,-4}, -{65,-2,-3}, -{65,-2,-2}, -{65,-2,-1}, -{65,-2,0}, -{65,-2,1}, -{65,-2,2}, -{65,-2,3}, -{65,-2,4}, -{65,-2,5}, -{65,-2,6}, -{65,-2,7}, -{65,-2,8}, -{65,-2,9}, -{65,-2,10}, -{65,-2,11}, -{65,-2,12}, -{65,-2,13}, -{65,-2,14}, -{65,-2,15}, -{65,-2,16}, -{65,-2,17}, -{65,-2,18}, -{65,-2,19}, -{65,-2,20}, -{65,-2,21}, -{65,-2,22}, -{65,-2,23}, -{65,-2,24}, -{65,-2,25}, -{65,-2,26}, -{65,-2,27}, -{65,-2,28}, -{65,-2,29}, -{65,-2,30}, -{65,-2,31}, -{65,-2,32}, -{65,-2,33}, -{65,-2,34}, -{65,-2,35}, -{65,-2,36}, -{65,-2,37}, -{65,-2,38}, -{65,-2,39}, -{65,-2,40}, -{65,-2,41}, -{65,-2,42}, -{65,-2,43}, -{65,-2,44}, -{65,-2,45}, -{65,-2,46}, -{65,-2,47}, -{65,-2,48}, -{65,-2,49}, -{65,-2,50}, -{65,-2,51}, -{65,-2,52}, -{65,-2,53}, -{65,-2,54}, -{65,-2,55}, -{65,-2,56}, -{65,-2,57}, -{65,-2,58}, -{65,-2,59}, -{65,-2,60}, -{65,-2,61}, -{65,-2,62}, -{65,-2,63}, -{65,-2,64}, -{65,-2,65}, -{65,-2,66}, -{65,-2,67}, -{65,-2,68}, -{65,-1,-54}, -{65,-1,-53}, -{65,-1,-52}, -{65,-1,-51}, -{65,-1,-50}, -{65,-1,-49}, -{65,-1,-48}, -{65,-1,-47}, -{65,-1,-46}, -{65,-1,-45}, -{65,-1,-44}, -{65,-1,-43}, -{65,-1,-42}, -{65,-1,-41}, -{65,-1,-40}, -{65,-1,-39}, -{65,-1,-38}, -{65,-1,-37}, -{65,-1,-36}, -{65,-1,-35}, -{65,-1,-34}, -{65,-1,-33}, -{65,-1,-32}, -{65,-1,-31}, -{65,-1,-30}, -{65,-1,-29}, -{65,-1,-28}, -{65,-1,-27}, -{65,-1,-26}, -{65,-1,-25}, -{65,-1,-24}, -{65,-1,-23}, -{65,-1,-22}, -{65,-1,-21}, -{65,-1,-20}, -{65,-1,-19}, -{65,-1,-18}, -{65,-1,-17}, -{65,-1,-16}, -{65,-1,-15}, -{65,-1,-14}, -{65,-1,-13}, -{65,-1,-12}, -{65,-1,-11}, -{65,-1,-10}, -{65,-1,-9}, -{65,-1,-8}, -{65,-1,-7}, -{65,-1,-6}, -{65,-1,-5}, -{65,-1,-4}, -{65,-1,-3}, -{65,-1,-2}, -{65,-1,-1}, -{65,-1,0}, -{65,-1,1}, -{65,-1,2}, -{65,-1,3}, -{65,-1,4}, -{65,-1,5}, -{65,-1,6}, -{65,-1,7}, -{65,-1,8}, -{65,-1,9}, -{65,-1,10}, -{65,-1,11}, -{65,-1,12}, -{65,-1,13}, -{65,-1,14}, -{65,-1,15}, -{65,-1,16}, -{65,-1,17}, -{65,-1,18}, -{65,-1,19}, -{65,-1,20}, -{65,-1,21}, -{65,-1,22}, -{65,-1,23}, -{65,-1,24}, -{65,-1,25}, -{65,-1,26}, -{65,-1,27}, -{65,-1,28}, -{65,-1,29}, -{65,-1,30}, -{65,-1,31}, -{65,-1,32}, -{65,-1,33}, -{65,-1,34}, -{65,-1,35}, -{65,-1,36}, -{65,-1,37}, -{65,-1,38}, -{65,-1,39}, -{65,-1,40}, -{65,-1,41}, -{65,-1,42}, -{65,-1,43}, -{65,-1,44}, -{65,-1,45}, -{65,-1,46}, -{65,-1,47}, -{65,-1,48}, -{65,-1,49}, -{65,-1,50}, -{65,-1,51}, -{65,-1,52}, -{65,-1,53}, -{65,-1,54}, -{65,-1,55}, -{65,-1,56}, -{65,-1,57}, -{65,-1,58}, -{65,-1,59}, -{65,-1,60}, -{65,-1,61}, -{65,-1,62}, -{65,-1,63}, -{65,-1,64}, -{65,-1,65}, -{65,-1,66}, -{65,-1,67}, -{65,-1,68}, -{65,0,-54}, -{65,0,-53}, -{65,0,-52}, -{65,0,-51}, -{65,0,-50}, -{65,0,-49}, -{65,0,-48}, -{65,0,-47}, -{65,0,-46}, -{65,0,-45}, -{65,0,-44}, -{65,0,-43}, -{65,0,-42}, -{65,0,-41}, -{65,0,-40}, -{65,0,-39}, -{65,0,-38}, -{65,0,-37}, -{65,0,-36}, -{65,0,-35}, -{65,0,-34}, -{65,0,-33}, -{65,0,-32}, -{65,0,-31}, -{65,0,-30}, -{65,0,-29}, -{65,0,-28}, -{65,0,-27}, -{65,0,-26}, -{65,0,-25}, -{65,0,-24}, -{65,0,-23}, -{65,0,-22}, -{65,0,-21}, -{65,0,-20}, -{65,0,-19}, -{65,0,-18}, -{65,0,-17}, -{65,0,-16}, -{65,0,-15}, -{65,0,-14}, -{65,0,-13}, -{65,0,-12}, -{65,0,-11}, -{65,0,-10}, -{65,0,-9}, -{65,0,-8}, -{65,0,-7}, -{65,0,-6}, -{65,0,-5}, -{65,0,-4}, -{65,0,-3}, -{65,0,-2}, -{65,0,-1}, -{65,0,0}, -{65,0,1}, -{65,0,2}, -{65,0,3}, -{65,0,4}, -{65,0,5}, -{65,0,6}, -{65,0,7}, -{65,0,8}, -{65,0,9}, -{65,0,10}, -{65,0,11}, -{65,0,12}, -{65,0,13}, -{65,0,14}, -{65,0,15}, -{65,0,16}, -{65,0,17}, -{65,0,18}, -{65,0,19}, -{65,0,20}, -{65,0,21}, -{65,0,22}, -{65,0,23}, -{65,0,24}, -{65,0,25}, -{65,0,26}, -{65,0,27}, -{65,0,28}, -{65,0,29}, -{65,0,30}, -{65,0,31}, -{65,0,32}, -{65,0,33}, -{65,0,34}, -{65,0,35}, -{65,0,36}, -{65,0,37}, -{65,0,38}, -{65,0,39}, -{65,0,40}, -{65,0,41}, -{65,0,42}, -{65,0,43}, -{65,0,44}, -{65,0,45}, -{65,0,46}, -{65,0,47}, -{65,0,48}, -{65,0,49}, -{65,0,50}, -{65,0,51}, -{65,0,52}, -{65,0,53}, -{65,0,54}, -{65,0,55}, -{65,0,56}, -{65,0,57}, -{65,0,58}, -{65,0,59}, -{65,0,60}, -{65,0,61}, -{65,0,62}, -{65,0,63}, -{65,0,64}, -{65,0,65}, -{65,0,66}, -{65,0,67}, -{65,0,68}, -{65,1,-54}, -{65,1,-53}, -{65,1,-52}, -{65,1,-51}, -{65,1,-50}, -{65,1,-49}, -{65,1,-48}, -{65,1,-47}, -{65,1,-46}, -{65,1,-45}, -{65,1,-44}, -{65,1,-43}, -{65,1,-42}, -{65,1,-41}, -{65,1,-40}, -{65,1,-39}, -{65,1,-38}, -{65,1,-37}, -{65,1,-36}, -{65,1,-35}, -{65,1,-34}, -{65,1,-33}, -{65,1,-32}, -{65,1,-31}, -{65,1,-30}, -{65,1,-29}, -{65,1,-28}, -{65,1,-27}, -{65,1,-26}, -{65,1,-25}, -{65,1,-24}, -{65,1,-23}, -{65,1,-22}, -{65,1,-21}, -{65,1,-20}, -{65,1,-19}, -{65,1,-18}, -{65,1,-17}, -{65,1,-16}, -{65,1,-15}, -{65,1,-14}, -{65,1,-13}, -{65,1,-12}, -{65,1,-11}, -{65,1,-10}, -{65,1,-9}, -{65,1,-8}, -{65,1,-7}, -{65,1,-6}, -{65,1,-5}, -{65,1,-4}, -{65,1,-3}, -{65,1,-2}, -{65,1,-1}, -{65,1,0}, -{65,1,1}, -{65,1,2}, -{65,1,3}, -{65,1,4}, -{65,1,5}, -{65,1,6}, -{65,1,7}, -{65,1,8}, -{65,1,9}, -{65,1,10}, -{65,1,11}, -{65,1,12}, -{65,1,13}, -{65,1,14}, -{65,1,15}, -{65,1,16}, -{65,1,17}, -{65,1,18}, -{65,1,19}, -{65,1,20}, -{65,1,21}, -{65,1,22}, -{65,1,23}, -{65,1,24}, -{65,1,25}, -{65,1,26}, -{65,1,27}, -{65,1,28}, -{65,1,29}, -{65,1,30}, -{65,1,31}, -{65,1,32}, -{65,1,33}, -{65,1,34}, -{65,1,35}, -{65,1,36}, -{65,1,37}, -{65,1,38}, -{65,1,39}, -{65,1,40}, -{65,1,41}, -{65,1,42}, -{65,1,43}, -{65,1,44}, -{65,1,45}, -{65,1,46}, -{65,1,47}, -{65,1,48}, -{65,1,49}, -{65,1,50}, -{65,1,51}, -{65,1,52}, -{65,1,53}, -{65,1,54}, -{65,1,55}, -{65,1,56}, -{65,1,57}, -{65,1,58}, -{65,1,59}, -{65,1,60}, -{65,1,61}, -{65,1,62}, -{65,1,63}, -{65,1,64}, -{65,1,65}, -{65,1,66}, -{65,1,67}, -{65,1,68}, -{65,2,-54}, -{65,2,-53}, -{65,2,-52}, -{65,2,-51}, -{65,2,-50}, -{65,2,-49}, -{65,2,-48}, -{65,2,-47}, -{65,2,-46}, -{65,2,-45}, -{65,2,-44}, -{65,2,-43}, -{65,2,-42}, -{65,2,-41}, -{65,2,-40}, -{65,2,-39}, -{65,2,-38}, -{65,2,-37}, -{65,2,-36}, -{65,2,-35}, -{65,2,-34}, -{65,2,-33}, -{65,2,-32}, -{65,2,-31}, -{65,2,-30}, -{65,2,-29}, -{65,2,-28}, -{65,2,-27}, -{65,2,-26}, -{65,2,-25}, -{65,2,-24}, -{65,2,-23}, -{65,2,-22}, -{65,2,-21}, -{65,2,-20}, -{65,2,-19}, -{65,2,-18}, -{65,2,-17}, -{65,2,-16}, -{65,2,-15}, -{65,2,-14}, -{65,2,-13}, -{65,2,-12}, -{65,2,-11}, -{65,2,-10}, -{65,2,-9}, -{65,2,-8}, -{65,2,-7}, -{65,2,-6}, -{65,2,-5}, -{65,2,-4}, -{65,2,-3}, -{65,2,-2}, -{65,2,-1}, -{65,2,0}, -{65,2,1}, -{65,2,2}, -{65,2,3}, -{65,2,4}, -{65,2,5}, -{65,2,6}, -{65,2,7}, -{65,2,8}, -{65,2,9}, -{65,2,10}, -{65,2,11}, -{65,2,12}, -{65,2,13}, -{65,2,14}, -{65,2,15}, -{65,2,16}, -{65,2,17}, -{65,2,18}, -{65,2,19}, -{65,2,20}, -{65,2,21}, -{65,2,22}, -{65,2,23}, -{65,2,24}, -{65,2,25}, -{65,2,26}, -{65,2,27}, -{65,2,28}, -{65,2,29}, -{65,2,30}, -{65,2,31}, -{65,2,32}, -{65,2,33}, -{65,2,34}, -{65,2,35}, -{65,2,36}, -{65,2,37}, -{65,2,38}, -{65,2,39}, -{65,2,40}, -{65,2,41}, -{65,2,42}, -{65,2,43}, -{65,2,44}, -{65,2,45}, -{65,2,46}, -{65,2,47}, -{65,2,48}, -{65,2,49}, -{65,2,50}, -{65,2,51}, -{65,2,52}, -{65,2,53}, -{65,2,54}, -{65,2,55}, -{65,2,56}, -{65,2,57}, -{65,2,58}, -{65,2,59}, -{65,2,60}, -{65,2,61}, -{65,2,62}, -{65,2,63}, -{65,2,64}, -{65,2,65}, -{65,2,66}, -{65,2,67}, -{65,2,68}, -{65,2,69}, -{65,3,-54}, -{65,3,-53}, -{65,3,-52}, -{65,3,-51}, -{65,3,-50}, -{65,3,-49}, -{65,3,-48}, -{65,3,-47}, -{65,3,-46}, -{65,3,-45}, -{65,3,-44}, -{65,3,-43}, -{65,3,-42}, -{65,3,-41}, -{65,3,-40}, -{65,3,-39}, -{65,3,-38}, -{65,3,-37}, -{65,3,-36}, -{65,3,-35}, -{65,3,-34}, -{65,3,-33}, -{65,3,-32}, -{65,3,-31}, -{65,3,-30}, -{65,3,-29}, -{65,3,-28}, -{65,3,-27}, -{65,3,-26}, -{65,3,-25}, -{65,3,-24}, -{65,3,-23}, -{65,3,-22}, -{65,3,-21}, -{65,3,-20}, -{65,3,-19}, -{65,3,-18}, -{65,3,-17}, -{65,3,-16}, -{65,3,-15}, -{65,3,-14}, -{65,3,-13}, -{65,3,-12}, -{65,3,-11}, -{65,3,-10}, -{65,3,-9}, -{65,3,-8}, -{65,3,-7}, -{65,3,-6}, -{65,3,-5}, -{65,3,-4}, -{65,3,-3}, -{65,3,-2}, -{65,3,-1}, -{65,3,0}, -{65,3,1}, -{65,3,2}, -{65,3,3}, -{65,3,4}, -{65,3,5}, -{65,3,6}, -{65,3,7}, -{65,3,8}, -{65,3,9}, -{65,3,10}, -{65,3,11}, -{65,3,12}, -{65,3,13}, -{65,3,14}, -{65,3,15}, -{65,3,16}, -{65,3,17}, -{65,3,18}, -{65,3,19}, -{65,3,20}, -{65,3,21}, -{65,3,22}, -{65,3,23}, -{65,3,24}, -{65,3,25}, -{65,3,26}, -{65,3,27}, -{65,3,28}, -{65,3,29}, -{65,3,30}, -{65,3,31}, -{65,3,32}, -{65,3,33}, -{65,3,34}, -{65,3,35}, -{65,3,36}, -{65,3,37}, -{65,3,38}, -{65,3,39}, -{65,3,40}, -{65,3,41}, -{65,3,42}, -{65,3,43}, -{65,3,44}, -{65,3,45}, -{65,3,46}, -{65,3,47}, -{65,3,48}, -{65,3,49}, -{65,3,50}, -{65,3,51}, -{65,3,52}, -{65,3,53}, -{65,3,54}, -{65,3,55}, -{65,3,56}, -{65,3,57}, -{65,3,58}, -{65,3,59}, -{65,3,60}, -{65,3,61}, -{65,3,62}, -{65,3,63}, -{65,3,64}, -{65,3,65}, -{65,3,66}, -{65,3,67}, -{65,3,68}, -{65,3,69}, -{65,4,-54}, -{65,4,-53}, -{65,4,-52}, -{65,4,-51}, -{65,4,-50}, -{65,4,-49}, -{65,4,-48}, -{65,4,-47}, -{65,4,-46}, -{65,4,-45}, -{65,4,-44}, -{65,4,-43}, -{65,4,-42}, -{65,4,-41}, -{65,4,-40}, -{65,4,-39}, -{65,4,-38}, -{65,4,-37}, -{65,4,-36}, -{65,4,-35}, -{65,4,-34}, -{65,4,-33}, -{65,4,-32}, -{65,4,-31}, -{65,4,-30}, -{65,4,-29}, -{65,4,-28}, -{65,4,-27}, -{65,4,-26}, -{65,4,-25}, -{65,4,-24}, -{65,4,-23}, -{65,4,-22}, -{65,4,-21}, -{65,4,-20}, -{65,4,-19}, -{65,4,-18}, -{65,4,-17}, -{65,4,-16}, -{65,4,-15}, -{65,4,-14}, -{65,4,-13}, -{65,4,-12}, -{65,4,-11}, -{65,4,-10}, -{65,4,-9}, -{65,4,-8}, -{65,4,-7}, -{65,4,-6}, -{65,4,-5}, -{65,4,-4}, -{65,4,-3}, -{65,4,-2}, -{65,4,-1}, -{65,4,0}, -{65,4,1}, -{65,4,2}, -{65,4,3}, -{65,4,4}, -{65,4,5}, -{65,4,6}, -{65,4,7}, -{65,4,8}, -{65,4,9}, -{65,4,10}, -{65,4,11}, -{65,4,12}, -{65,4,13}, -{65,4,14}, -{65,4,15}, -{65,4,16}, -{65,4,17}, -{65,4,18}, -{65,4,19}, -{65,4,20}, -{65,4,21}, -{65,4,22}, -{65,4,23}, -{65,4,24}, -{65,4,25}, -{65,4,26}, -{65,4,27}, -{65,4,28}, -{65,4,29}, -{65,4,30}, -{65,4,31}, -{65,4,32}, -{65,4,33}, -{65,4,34}, -{65,4,35}, -{65,4,36}, -{65,4,37}, -{65,4,38}, -{65,4,39}, -{65,4,40}, -{65,4,41}, -{65,4,42}, -{65,4,43}, -{65,4,44}, -{65,4,45}, -{65,4,46}, -{65,4,47}, -{65,4,48}, -{65,4,49}, -{65,4,50}, -{65,4,51}, -{65,4,52}, -{65,4,53}, -{65,4,54}, -{65,4,55}, -{65,4,56}, -{65,4,57}, -{65,4,58}, -{65,4,59}, -{65,4,60}, -{65,4,61}, -{65,4,62}, -{65,4,63}, -{65,4,64}, -{65,4,65}, -{65,4,66}, -{65,4,67}, -{65,4,68}, -{65,4,69}, -{65,5,-54}, -{65,5,-53}, -{65,5,-52}, -{65,5,-51}, -{65,5,-50}, -{65,5,-49}, -{65,5,-48}, -{65,5,-47}, -{65,5,-46}, -{65,5,-45}, -{65,5,-44}, -{65,5,-43}, -{65,5,-42}, -{65,5,-41}, -{65,5,-40}, -{65,5,-39}, -{65,5,-38}, -{65,5,-37}, -{65,5,-36}, -{65,5,-35}, -{65,5,-34}, -{65,5,-33}, -{65,5,-32}, -{65,5,-31}, -{65,5,-30}, -{65,5,-29}, -{65,5,-28}, -{65,5,-27}, -{65,5,-26}, -{65,5,-25}, -{65,5,-24}, -{65,5,-23}, -{65,5,-22}, -{65,5,-21}, -{65,5,-20}, -{65,5,-19}, -{65,5,-18}, -{65,5,-17}, -{65,5,-16}, -{65,5,-15}, -{65,5,-14}, -{65,5,-13}, -{65,5,-12}, -{65,5,-11}, -{65,5,-10}, -{65,5,-9}, -{65,5,-8}, -{65,5,-7}, -{65,5,-6}, -{65,5,-5}, -{65,5,-4}, -{65,5,-3}, -{65,5,-2}, -{65,5,-1}, -{65,5,0}, -{65,5,1}, -{65,5,2}, -{65,5,3}, -{65,5,4}, -{65,5,5}, -{65,5,6}, -{65,5,7}, -{65,5,8}, -{65,5,9}, -{65,5,10}, -{65,5,11}, -{65,5,12}, -{65,5,13}, -{65,5,14}, -{65,5,15}, -{65,5,16}, -{65,5,17}, -{65,5,18}, -{65,5,19}, -{65,5,20}, -{65,5,21}, -{65,5,22}, -{65,5,23}, -{65,5,24}, -{65,5,25}, -{65,5,26}, -{65,5,27}, -{65,5,28}, -{65,5,29}, -{65,5,30}, -{65,5,31}, -{65,5,32}, -{65,5,33}, -{65,5,34}, -{65,5,35}, -{65,5,36}, -{65,5,37}, -{65,5,38}, -{65,5,39}, -{65,5,40}, -{65,5,41}, -{65,5,42}, -{65,5,43}, -{65,5,44}, -{65,5,45}, -{65,5,46}, -{65,5,47}, -{65,5,48}, -{65,5,49}, -{65,5,50}, -{65,5,51}, -{65,5,52}, -{65,5,53}, -{65,5,54}, -{65,5,55}, -{65,5,56}, -{65,5,57}, -{65,5,58}, -{65,5,59}, -{65,5,60}, -{65,5,61}, -{65,5,62}, -{65,5,63}, -{65,5,64}, -{65,5,65}, -{65,5,66}, -{65,5,67}, -{65,5,68}, -{65,5,69}, -{65,6,-54}, -{65,6,-53}, -{65,6,-52}, -{65,6,-51}, -{65,6,-50}, -{65,6,-49}, -{65,6,-48}, -{65,6,-47}, -{65,6,-46}, -{65,6,-45}, -{65,6,-44}, -{65,6,-43}, -{65,6,-42}, -{65,6,-41}, -{65,6,-40}, -{65,6,-39}, -{65,6,-38}, -{65,6,-37}, -{65,6,-36}, -{65,6,-35}, -{65,6,-34}, -{65,6,-33}, -{65,6,-32}, -{65,6,-31}, -{65,6,-30}, -{65,6,-29}, -{65,6,-28}, -{65,6,-27}, -{65,6,-26}, -{65,6,-25}, -{65,6,-24}, -{65,6,-23}, -{65,6,-22}, -{65,6,-21}, -{65,6,-20}, -{65,6,-19}, -{65,6,-18}, -{65,6,-17}, -{65,6,-16}, -{65,6,-15}, -{65,6,-14}, -{65,6,-13}, -{65,6,-12}, -{65,6,-11}, -{65,6,-10}, -{65,6,-9}, -{65,6,-8}, -{65,6,-7}, -{65,6,-6}, -{65,6,-5}, -{65,6,-4}, -{65,6,-3}, -{65,6,-2}, -{65,6,-1}, -{65,6,0}, -{65,6,1}, -{65,6,2}, -{65,6,3}, -{65,6,4}, -{65,6,5}, -{65,6,6}, -{65,6,7}, -{65,6,8}, -{65,6,9}, -{65,6,10}, -{65,6,11}, -{65,6,12}, -{65,6,13}, -{65,6,14}, -{65,6,15}, -{65,6,16}, -{65,6,17}, -{65,6,18}, -{65,6,19}, -{65,6,20}, -{65,6,21}, -{65,6,22}, -{65,6,23}, -{65,6,24}, -{65,6,25}, -{65,6,26}, -{65,6,27}, -{65,6,28}, -{65,6,29}, -{65,6,30}, -{65,6,31}, -{65,6,32}, -{65,6,33}, -{65,6,34}, -{65,6,35}, -{65,6,36}, -{65,6,37}, -{65,6,38}, -{65,6,39}, -{65,6,40}, -{65,6,41}, -{65,6,42}, -{65,6,43}, -{65,6,44}, -{65,6,45}, -{65,6,46}, -{65,6,47}, -{65,6,48}, -{65,6,49}, -{65,6,50}, -{65,6,51}, -{65,6,52}, -{65,6,53}, -{65,6,54}, -{65,6,55}, -{65,6,56}, -{65,6,57}, -{65,6,58}, -{65,6,59}, -{65,6,60}, -{65,6,61}, -{65,6,62}, -{65,6,63}, -{65,6,64}, -{65,6,65}, -{65,6,66}, -{65,6,67}, -{65,6,68}, -{65,6,69}, -{65,7,-54}, -{65,7,-53}, -{65,7,-52}, -{65,7,-51}, -{65,7,-50}, -{65,7,-49}, -{65,7,-48}, -{65,7,-47}, -{65,7,-46}, -{65,7,-45}, -{65,7,-44}, -{65,7,-43}, -{65,7,-42}, -{65,7,-41}, -{65,7,-40}, -{65,7,-39}, -{65,7,-38}, -{65,7,-37}, -{65,7,-36}, -{65,7,-35}, -{65,7,-34}, -{65,7,-33}, -{65,7,-32}, -{65,7,-31}, -{65,7,-30}, -{65,7,-29}, -{65,7,-28}, -{65,7,-27}, -{65,7,-26}, -{65,7,-25}, -{65,7,-24}, -{65,7,-23}, -{65,7,-22}, -{65,7,-21}, -{65,7,-20}, -{65,7,-19}, -{65,7,-18}, -{65,7,-17}, -{65,7,-16}, -{65,7,-15}, -{65,7,-14}, -{65,7,-13}, -{65,7,-12}, -{65,7,-11}, -{65,7,-10}, -{65,7,-9}, -{65,7,-8}, -{65,7,-7}, -{65,7,-6}, -{65,7,-5}, -{65,7,-4}, -{65,7,-3}, -{65,7,-2}, -{65,7,-1}, -{65,7,0}, -{65,7,1}, -{65,7,2}, -{65,7,3}, -{65,7,4}, -{65,7,5}, -{65,7,6}, -{65,7,7}, -{65,7,8}, -{65,7,9}, -{65,7,10}, -{65,7,11}, -{65,7,12}, -{65,7,13}, -{65,7,14}, -{65,7,15}, -{65,7,16}, -{65,7,17}, -{65,7,18}, -{65,7,19}, -{65,7,20}, -{65,7,21}, -{65,7,22}, -{65,7,23}, -{65,7,24}, -{65,7,25}, -{65,7,26}, -{65,7,27}, -{65,7,28}, -{65,7,29}, -{65,7,30}, -{65,7,31}, -{65,7,32}, -{65,7,33}, -{65,7,34}, -{65,7,35}, -{65,7,36}, -{65,7,37}, -{65,7,38}, -{65,7,39}, -{65,7,40}, -{65,7,41}, -{65,7,42}, -{65,7,43}, -{65,7,44}, -{65,7,45}, -{65,7,46}, -{65,7,47}, -{65,7,48}, -{65,7,49}, -{65,7,50}, -{65,7,51}, -{65,7,52}, -{65,7,53}, -{65,7,54}, -{65,7,55}, -{65,7,56}, -{65,7,57}, -{65,7,58}, -{65,7,59}, -{65,7,60}, -{65,7,61}, -{65,7,62}, -{65,7,63}, -{65,7,64}, -{65,7,65}, -{65,7,66}, -{65,7,67}, -{65,7,68}, -{65,7,69}, -{65,8,-54}, -{65,8,-53}, -{65,8,-52}, -{65,8,-51}, -{65,8,-50}, -{65,8,-49}, -{65,8,-48}, -{65,8,-47}, -{65,8,-46}, -{65,8,-45}, -{65,8,-44}, -{65,8,-43}, -{65,8,-42}, -{65,8,-41}, -{65,8,-40}, -{65,8,-39}, -{65,8,-38}, -{65,8,-37}, -{65,8,-36}, -{65,8,-35}, -{65,8,-34}, -{65,8,-33}, -{65,8,-32}, -{65,8,-31}, -{65,8,-30}, -{65,8,-29}, -{65,8,-28}, -{65,8,-27}, -{65,8,-26}, -{65,8,-25}, -{65,8,-24}, -{65,8,-23}, -{65,8,-22}, -{65,8,-21}, -{65,8,-20}, -{65,8,-19}, -{65,8,-18}, -{65,8,-17}, -{65,8,-16}, -{65,8,-15}, -{65,8,-14}, -{65,8,-13}, -{65,8,-12}, -{65,8,-11}, -{65,8,-10}, -{65,8,-9}, -{65,8,-8}, -{65,8,-7}, -{65,8,-6}, -{65,8,-5}, -{65,8,-4}, -{65,8,-3}, -{65,8,-2}, -{65,8,-1}, -{65,8,0}, -{65,8,1}, -{65,8,2}, -{65,8,3}, -{65,8,4}, -{65,8,5}, -{65,8,6}, -{65,8,7}, -{65,8,8}, -{65,8,9}, -{65,8,10}, -{65,8,11}, -{65,8,12}, -{65,8,13}, -{65,8,14}, -{65,8,15}, -{65,8,16}, -{65,8,17}, -{65,8,18}, -{65,8,19}, -{65,8,20}, -{65,8,21}, -{65,8,22}, -{65,8,23}, -{65,8,24}, -{65,8,25}, -{65,8,26}, -{65,8,27}, -{65,8,28}, -{65,8,29}, -{65,8,30}, -{65,8,31}, -{65,8,32}, -{65,8,33}, -{65,8,34}, -{65,8,35}, -{65,8,36}, -{65,8,37}, -{65,8,38}, -{65,8,39}, -{65,8,40}, -{65,8,41}, -{65,8,42}, -{65,8,43}, -{65,8,44}, -{65,8,45}, -{65,8,46}, -{65,8,47}, -{65,8,48}, -{65,8,49}, -{65,8,50}, -{65,8,51}, -{65,8,52}, -{65,8,53}, -{65,8,54}, -{65,8,55}, -{65,8,56}, -{65,8,57}, -{65,8,58}, -{65,8,59}, -{65,8,60}, -{65,8,61}, -{65,8,62}, -{65,8,63}, -{65,8,64}, -{65,8,65}, -{65,8,66}, -{65,8,67}, -{65,8,68}, -{65,8,69}, -{65,9,-54}, -{65,9,-53}, -{65,9,-52}, -{65,9,-51}, -{65,9,-50}, -{65,9,-49}, -{65,9,-48}, -{65,9,-47}, -{65,9,-46}, -{65,9,-45}, -{65,9,-44}, -{65,9,-43}, -{65,9,-42}, -{65,9,-41}, -{65,9,-40}, -{65,9,-39}, -{65,9,-38}, -{65,9,-37}, -{65,9,-36}, -{65,9,-35}, -{65,9,-34}, -{65,9,-33}, -{65,9,-32}, -{65,9,-31}, -{65,9,-30}, -{65,9,-29}, -{65,9,-28}, -{65,9,-27}, -{65,9,-26}, -{65,9,-25}, -{65,9,-24}, -{65,9,-23}, -{65,9,-22}, -{65,9,-21}, -{65,9,-20}, -{65,9,-19}, -{65,9,-18}, -{65,9,-17}, -{65,9,-16}, -{65,9,-15}, -{65,9,-14}, -{65,9,-13}, -{65,9,-12}, -{65,9,-11}, -{65,9,-10}, -{65,9,-9}, -{65,9,-8}, -{65,9,-7}, -{65,9,-6}, -{65,9,-5}, -{65,9,-4}, -{65,9,-3}, -{65,9,-2}, -{65,9,-1}, -{65,9,0}, -{65,9,1}, -{65,9,2}, -{65,9,3}, -{65,9,4}, -{65,9,5}, -{65,9,6}, -{65,9,7}, -{65,9,8}, -{65,9,9}, -{65,9,10}, -{65,9,11}, -{65,9,12}, -{65,9,13}, -{65,9,14}, -{65,9,15}, -{65,9,16}, -{65,9,17}, -{65,9,18}, -{65,9,19}, -{65,9,20}, -{65,9,21}, -{65,9,22}, -{65,9,23}, -{65,9,24}, -{65,9,25}, -{65,9,26}, -{65,9,27}, -{65,9,28}, -{65,9,29}, -{65,9,30}, -{65,9,31}, -{65,9,32}, -{65,9,33}, -{65,9,34}, -{65,9,35}, -{65,9,36}, -{65,9,37}, -{65,9,38}, -{65,9,39}, -{65,9,40}, -{65,9,41}, -{65,9,42}, -{65,9,43}, -{65,9,44}, -{65,9,45}, -{65,9,46}, -{65,9,47}, -{65,9,48}, -{65,9,49}, -{65,9,50}, -{65,9,51}, -{65,9,52}, -{65,9,53}, -{65,9,54}, -{65,9,55}, -{65,9,56}, -{65,9,57}, -{65,9,58}, -{65,9,59}, -{65,9,60}, -{65,9,61}, -{65,9,62}, -{65,9,63}, -{65,9,64}, -{65,9,65}, -{65,9,66}, -{65,9,67}, -{65,9,68}, -{65,9,69}, -{65,10,-54}, -{65,10,-53}, -{65,10,-52}, -{65,10,-51}, -{65,10,-50}, -{65,10,-49}, -{65,10,-48}, -{65,10,-47}, -{65,10,-46}, -{65,10,-45}, -{65,10,-44}, -{65,10,-43}, -{65,10,-42}, -{65,10,-41}, -{65,10,-40}, -{65,10,-39}, -{65,10,-38}, -{65,10,-37}, -{65,10,-36}, -{65,10,-35}, -{65,10,-34}, -{65,10,-33}, -{65,10,-32}, -{65,10,-31}, -{65,10,-30}, -{65,10,-29}, -{65,10,-28}, -{65,10,-27}, -{65,10,-26}, -{65,10,-25}, -{65,10,-24}, -{65,10,-23}, -{65,10,-22}, -{65,10,-21}, -{65,10,-20}, -{65,10,-19}, -{65,10,-18}, -{65,10,-17}, -{65,10,-16}, -{65,10,-15}, -{65,10,-14}, -{65,10,-13}, -{65,10,-12}, -{65,10,-11}, -{65,10,-10}, -{65,10,-9}, -{65,10,-8}, -{65,10,-7}, -{65,10,-6}, -{65,10,-5}, -{65,10,-4}, -{65,10,-3}, -{65,10,-2}, -{65,10,-1}, -{65,10,0}, -{65,10,1}, -{65,10,2}, -{65,10,3}, -{65,10,4}, -{65,10,5}, -{65,10,6}, -{65,10,7}, -{65,10,8}, -{65,10,9}, -{65,10,10}, -{65,10,11}, -{65,10,12}, -{65,10,13}, -{65,10,14}, -{65,10,15}, -{65,10,16}, -{65,10,17}, -{65,10,18}, -{65,10,19}, -{65,10,20}, -{65,10,21}, -{65,10,22}, -{65,10,23}, -{65,10,24}, -{65,10,25}, -{65,10,26}, -{65,10,27}, -{65,10,28}, -{65,10,29}, -{65,10,30}, -{65,10,31}, -{65,10,32}, -{65,10,33}, -{65,10,34}, -{65,10,35}, -{65,10,36}, -{65,10,37}, -{65,10,38}, -{65,10,39}, -{65,10,40}, -{65,10,41}, -{65,10,42}, -{65,10,43}, -{65,10,44}, -{65,10,45}, -{65,10,46}, -{65,10,47}, -{65,10,48}, -{65,10,49}, -{65,10,50}, -{65,10,51}, -{65,10,52}, -{65,10,53}, -{65,10,54}, -{65,10,55}, -{65,10,56}, -{65,10,57}, -{65,10,58}, -{65,10,59}, -{65,10,60}, -{65,10,61}, -{65,10,62}, -{65,10,63}, -{65,10,64}, -{65,10,65}, -{65,10,66}, -{65,10,67}, -{65,10,68}, -{65,10,69}, -{65,11,-54}, -{65,11,-53}, -{65,11,-52}, -{65,11,-51}, -{65,11,-50}, -{65,11,-49}, -{65,11,-48}, -{65,11,-47}, -{65,11,-46}, -{65,11,-45}, -{65,11,-44}, -{65,11,-43}, -{65,11,-42}, -{65,11,-41}, -{65,11,-40}, -{65,11,-39}, -{65,11,-38}, -{65,11,-37}, -{65,11,-36}, -{65,11,-35}, -{65,11,-34}, -{65,11,-33}, -{65,11,-32}, -{65,11,-31}, -{65,11,-30}, -{65,11,-29}, -{65,11,-28}, -{65,11,-27}, -{65,11,-26}, -{65,11,-25}, -{65,11,-24}, -{65,11,-23}, -{65,11,-22}, -{65,11,-21}, -{65,11,-20}, -{65,11,-19}, -{65,11,-18}, -{65,11,-17}, -{65,11,-16}, -{65,11,-15}, -{65,11,-14}, -{65,11,-13}, -{65,11,-12}, -{65,11,-11}, -{65,11,-10}, -{65,11,-9}, -{65,11,-8}, -{65,11,-7}, -{65,11,-6}, -{65,11,-5}, -{65,11,-4}, -{65,11,-3}, -{65,11,-2}, -{65,11,-1}, -{65,11,0}, -{65,11,1}, -{65,11,2}, -{65,11,3}, -{65,11,4}, -{65,11,5}, -{65,11,6}, -{65,11,7}, -{65,11,8}, -{65,11,9}, -{65,11,10}, -{65,11,11}, -{65,11,12}, -{65,11,13}, -{65,11,14}, -{65,11,15}, -{65,11,16}, -{65,11,17}, -{65,11,18}, -{65,11,19}, -{65,11,20}, -{65,11,21}, -{65,11,22}, -{65,11,23}, -{65,11,24}, -{65,11,25}, -{65,11,26}, -{65,11,27}, -{65,11,28}, -{65,11,29}, -{65,11,30}, -{65,11,31}, -{65,11,32}, -{65,11,33}, -{65,11,34}, -{65,11,35}, -{65,11,36}, -{65,11,37}, -{65,11,38}, -{65,11,39}, -{65,11,40}, -{65,11,41}, -{65,11,42}, -{65,11,43}, -{65,11,44}, -{65,11,45}, -{65,11,46}, -{65,11,47}, -{65,11,48}, -{65,11,49}, -{65,11,50}, -{65,11,51}, -{65,11,52}, -{65,11,53}, -{65,11,54}, -{65,11,55}, -{65,11,56}, -{65,11,57}, -{65,11,58}, -{65,11,59}, -{65,11,60}, -{65,11,61}, -{65,11,62}, -{65,11,63}, -{65,11,64}, -{65,11,65}, -{65,11,66}, -{65,11,67}, -{65,11,68}, -{65,11,69}, -{65,12,-54}, -{65,12,-53}, -{65,12,-52}, -{65,12,-51}, -{65,12,-50}, -{65,12,-49}, -{65,12,-48}, -{65,12,-47}, -{65,12,-46}, -{65,12,-45}, -{65,12,-44}, -{65,12,-43}, -{65,12,-42}, -{65,12,-41}, -{65,12,-40}, -{65,12,-39}, -{65,12,-38}, -{65,12,-37}, -{65,12,-36}, -{65,12,-35}, -{65,12,-34}, -{65,12,-33}, -{65,12,-32}, -{65,12,-31}, -{65,12,-30}, -{65,12,-29}, -{65,12,-28}, -{65,12,-27}, -{65,12,-26}, -{65,12,-25}, -{65,12,-24}, -{65,12,-23}, -{65,12,-22}, -{65,12,-21}, -{65,12,-20}, -{65,12,-19}, -{65,12,-18}, -{65,12,-17}, -{65,12,-16}, -{65,12,-15}, -{65,12,-14}, -{65,12,-13}, -{65,12,-12}, -{65,12,-11}, -{65,12,-10}, -{65,12,-9}, -{65,12,-8}, -{65,12,-7}, -{65,12,-6}, -{65,12,-5}, -{65,12,-4}, -{65,12,-3}, -{65,12,-2}, -{65,12,-1}, -{65,12,0}, -{65,12,1}, -{65,12,2}, -{65,12,3}, -{65,12,4}, -{65,12,5}, -{65,12,6}, -{65,12,7}, -{65,12,8}, -{65,12,9}, -{65,12,10}, -{65,12,11}, -{65,12,12}, -{65,12,13}, -{65,12,14}, -{65,12,15}, -{65,12,16}, -{65,12,17}, -{65,12,18}, -{65,12,19}, -{65,12,20}, -{65,12,21}, -{65,12,22}, -{65,12,23}, -{65,12,24}, -{65,12,25}, -{65,12,26}, -{65,12,27}, -{65,12,28}, -{65,12,29}, -{65,12,30}, -{65,12,31}, -{65,12,32}, -{65,12,33}, -{65,12,34}, -{65,12,35}, -{65,12,36}, -{65,12,37}, -{65,12,38}, -{65,12,39}, -{65,12,40}, -{65,12,41}, -{65,12,42}, -{65,12,43}, -{65,12,44}, -{65,12,45}, -{65,12,46}, -{65,12,47}, -{65,12,48}, -{65,12,49}, -{65,12,50}, -{65,12,51}, -{65,12,52}, -{65,12,53}, -{65,12,54}, -{65,12,55}, -{65,12,56}, -{65,12,57}, -{65,12,58}, -{65,12,59}, -{65,12,60}, -{65,12,61}, -{65,12,62}, -{65,12,63}, -{65,12,64}, -{65,12,65}, -{65,12,66}, -{65,12,67}, -{65,12,68}, -{65,12,69}, -{65,13,-54}, -{65,13,-53}, -{65,13,-52}, -{65,13,-51}, -{65,13,-50}, -{65,13,-49}, -{65,13,-48}, -{65,13,-47}, -{65,13,-46}, -{65,13,-45}, -{65,13,-44}, -{65,13,-43}, -{65,13,-42}, -{65,13,-41}, -{65,13,-40}, -{65,13,-39}, -{65,13,-38}, -{65,13,-37}, -{65,13,-36}, -{65,13,-35}, -{65,13,-34}, -{65,13,-33}, -{65,13,-32}, -{65,13,-31}, -{65,13,-30}, -{65,13,-29}, -{65,13,-28}, -{65,13,-27}, -{65,13,-26}, -{65,13,-25}, -{65,13,-24}, -{65,13,-23}, -{65,13,-22}, -{65,13,-21}, -{65,13,-20}, -{65,13,-19}, -{65,13,-18}, -{65,13,-17}, -{65,13,-16}, -{65,13,-15}, -{65,13,-14}, -{65,13,-13}, -{65,13,-12}, -{65,13,-11}, -{65,13,-10}, -{65,13,-9}, -{65,13,-8}, -{65,13,-7}, -{65,13,-6}, -{65,13,-5}, -{65,13,-4}, -{65,13,-3}, -{65,13,-2}, -{65,13,-1}, -{65,13,0}, -{65,13,1}, -{65,13,2}, -{65,13,3}, -{65,13,4}, -{65,13,5}, -{65,13,6}, -{65,13,7}, -{65,13,8}, -{65,13,9}, -{65,13,10}, -{65,13,11}, -{65,13,12}, -{65,13,13}, -{65,13,14}, -{65,13,15}, -{65,13,16}, -{65,13,17}, -{65,13,18}, -{65,13,19}, -{65,13,20}, -{65,13,21}, -{65,13,22}, -{65,13,23}, -{65,13,24}, -{65,13,25}, -{65,13,26}, -{65,13,27}, -{65,13,28}, -{65,13,29}, -{65,13,30}, -{65,13,31}, -{65,13,32}, -{65,13,33}, -{65,13,34}, -{65,13,35}, -{65,13,36}, -{65,13,37}, -{65,13,38}, -{65,13,39}, -{65,13,40}, -{65,13,41}, -{65,13,42}, -{65,13,43}, -{65,13,44}, -{65,13,45}, -{65,13,46}, -{65,13,47}, -{65,13,48}, -{65,13,49}, -{65,13,50}, -{65,13,51}, -{65,13,52}, -{65,13,53}, -{65,13,54}, -{65,13,55}, -{65,13,56}, -{65,13,57}, -{65,13,58}, -{65,13,59}, -{65,13,60}, -{65,13,61}, -{65,13,62}, -{65,13,63}, -{65,13,64}, -{65,13,65}, -{65,13,66}, -{65,13,67}, -{65,13,68}, -{65,13,69}, -{65,14,-54}, -{65,14,-53}, -{65,14,-52}, -{65,14,-51}, -{65,14,-50}, -{65,14,-49}, -{65,14,-48}, -{65,14,-47}, -{65,14,-46}, -{65,14,-45}, -{65,14,-44}, -{65,14,-43}, -{65,14,-42}, -{65,14,-41}, -{65,14,-40}, -{65,14,-39}, -{65,14,-38}, -{65,14,-37}, -{65,14,-36}, -{65,14,-35}, -{65,14,-34}, -{65,14,-33}, -{65,14,-32}, -{65,14,-31}, -{65,14,-30}, -{65,14,-29}, -{65,14,-28}, -{65,14,-27}, -{65,14,-26}, -{65,14,-25}, -{65,14,-24}, -{65,14,-23}, -{65,14,-22}, -{65,14,-21}, -{65,14,-20}, -{65,14,-19}, -{65,14,-18}, -{65,14,-17}, -{65,14,-16}, -{65,14,-15}, -{65,14,-14}, -{65,14,-13}, -{65,14,-12}, -{65,14,-11}, -{65,14,-10}, -{65,14,-9}, -{65,14,-8}, -{65,14,-7}, -{65,14,-6}, -{65,14,-5}, -{65,14,-4}, -{65,14,-3}, -{65,14,-2}, -{65,14,-1}, -{65,14,0}, -{65,14,1}, -{65,14,2}, -{65,14,3}, -{65,14,4}, -{65,14,5}, -{65,14,6}, -{65,14,7}, -{65,14,8}, -{65,14,9}, -{65,14,10}, -{65,14,11}, -{65,14,12}, -{65,14,13}, -{65,14,14}, -{65,14,15}, -{65,14,16}, -{65,14,17}, -{65,14,18}, -{65,14,19}, -{65,14,20}, -{65,14,21}, -{65,14,22}, -{65,14,23}, -{65,14,24}, -{65,14,25}, -{65,14,26}, -{65,14,27}, -{65,14,28}, -{65,14,29}, -{65,14,30}, -{65,14,31}, -{65,14,32}, -{65,14,33}, -{65,14,34}, -{65,14,35}, -{65,14,36}, -{65,14,37}, -{65,14,38}, -{65,14,39}, -{65,14,40}, -{65,14,41}, -{65,14,42}, -{65,14,43}, -{65,14,44}, -{65,14,45}, -{65,14,46}, -{65,14,47}, -{65,14,48}, -{65,14,49}, -{65,14,50}, -{65,14,51}, -{65,14,52}, -{65,14,53}, -{65,14,54}, -{65,14,55}, -{65,14,56}, -{65,14,57}, -{65,14,58}, -{65,14,59}, -{65,14,60}, -{65,14,61}, -{65,14,62}, -{65,14,63}, -{65,14,64}, -{65,14,65}, -{65,14,66}, -{65,14,67}, -{65,14,68}, -{65,14,69}, -{65,15,-54}, -{65,15,-53}, -{65,15,-52}, -{65,15,-51}, -{65,15,-50}, -{65,15,-49}, -{65,15,-48}, -{65,15,-47}, -{65,15,-46}, -{65,15,-45}, -{65,15,-44}, -{65,15,-43}, -{65,15,-42}, -{65,15,-41}, -{65,15,-40}, -{65,15,-39}, -{65,15,-38}, -{65,15,-37}, -{65,15,-36}, -{65,15,-35}, -{65,15,-34}, -{65,15,-33}, -{65,15,-32}, -{65,15,-31}, -{65,15,-30}, -{65,15,-29}, -{65,15,-28}, -{65,15,-27}, -{65,15,-26}, -{65,15,-25}, -{65,15,-24}, -{65,15,-23}, -{65,15,-22}, -{65,15,-21}, -{65,15,-20}, -{65,15,-19}, -{65,15,-18}, -{65,15,-17}, -{65,15,-16}, -{65,15,-15}, -{65,15,-14}, -{65,15,-13}, -{65,15,-12}, -{65,15,-11}, -{65,15,-10}, -{65,15,-9}, -{65,15,-8}, -{65,15,-7}, -{65,15,-6}, -{65,15,-5}, -{65,15,-4}, -{65,15,-3}, -{65,15,-2}, -{65,15,-1}, -{65,15,0}, -{65,15,1}, -{65,15,2}, -{65,15,3}, -{65,15,4}, -{65,15,5}, -{65,15,6}, -{65,15,7}, -{65,15,8}, -{65,15,9}, -{65,15,10}, -{65,15,11}, -{65,15,12}, -{65,15,13}, -{65,15,14}, -{65,15,15}, -{65,15,16}, -{65,15,17}, -{65,15,18}, -{65,15,19}, -{65,15,20}, -{65,15,21}, -{65,15,22}, -{65,15,23}, -{65,15,24}, -{65,15,25}, -{65,15,26}, -{65,15,27}, -{65,15,28}, -{65,15,29}, -{65,15,30}, -{65,15,31}, -{65,15,32}, -{65,15,33}, -{65,15,34}, -{65,15,35}, -{65,15,36}, -{65,15,37}, -{65,15,38}, -{65,15,39}, -{65,15,40}, -{65,15,41}, -{65,15,42}, -{65,15,43}, -{65,15,44}, -{65,15,45}, -{65,15,46}, -{65,15,47}, -{65,15,48}, -{65,15,49}, -{65,15,50}, -{65,15,51}, -{65,15,52}, -{65,15,53}, -{65,15,54}, -{65,15,55}, -{65,15,56}, -{65,15,57}, -{65,15,58}, -{65,15,59}, -{65,15,60}, -{65,15,61}, -{65,15,62}, -{65,15,63}, -{65,15,64}, -{65,15,65}, -{65,15,66}, -{65,15,67}, -{65,15,68}, -{65,15,69}, -{65,15,70}, -{65,16,-54}, -{65,16,-53}, -{65,16,-52}, -{65,16,-51}, -{65,16,-50}, -{65,16,-49}, -{65,16,-48}, -{65,16,-47}, -{65,16,-46}, -{65,16,-45}, -{65,16,-44}, -{65,16,-43}, -{65,16,-42}, -{65,16,-41}, -{65,16,-40}, -{65,16,-39}, -{65,16,-38}, -{65,16,-37}, -{65,16,-36}, -{65,16,-35}, -{65,16,-34}, -{65,16,-33}, -{65,16,-32}, -{65,16,-31}, -{65,16,-30}, -{65,16,-29}, -{65,16,-28}, -{65,16,-27}, -{65,16,-26}, -{65,16,-25}, -{65,16,-24}, -{65,16,-23}, -{65,16,-22}, -{65,16,-21}, -{65,16,-20}, -{65,16,-19}, -{65,16,-18}, -{65,16,-17}, -{65,16,-16}, -{65,16,-15}, -{65,16,-14}, -{65,16,-13}, -{65,16,-12}, -{65,16,-11}, -{65,16,-10}, -{65,16,-9}, -{65,16,-8}, -{65,16,-7}, -{65,16,-6}, -{65,16,-5}, -{65,16,-4}, -{65,16,-3}, -{65,16,-2}, -{65,16,-1}, -{65,16,0}, -{65,16,1}, -{65,16,2}, -{65,16,3}, -{65,16,4}, -{65,16,5}, -{65,16,6}, -{65,16,7}, -{65,16,8}, -{65,16,9}, -{65,16,10}, -{65,16,11}, -{65,16,12}, -{65,16,13}, -{65,16,14}, -{65,16,15}, -{65,16,16}, -{65,16,17}, -{65,16,18}, -{65,16,19}, -{65,16,20}, -{65,16,21}, -{65,16,22}, -{65,16,23}, -{65,16,24}, -{65,16,25}, -{65,16,26}, -{65,16,27}, -{65,16,28}, -{65,16,29}, -{65,16,30}, -{65,16,31}, -{65,16,32}, -{65,16,33}, -{65,16,34}, -{65,16,35}, -{65,16,36}, -{65,16,37}, -{65,16,38}, -{65,16,39}, -{65,16,40}, -{65,16,41}, -{65,16,42}, -{65,16,43}, -{65,16,44}, -{65,16,45}, -{65,16,46}, -{65,16,47}, -{65,16,48}, -{65,16,49}, -{65,16,50}, -{65,16,51}, -{65,16,52}, -{65,16,53}, -{65,16,54}, -{65,16,55}, -{65,16,56}, -{65,16,57}, -{65,16,58}, -{65,16,59}, -{65,16,60}, -{65,16,61}, -{65,16,62}, -{65,16,63}, -{65,16,64}, -{65,16,65}, -{65,16,66}, -{65,16,67}, -{65,16,68}, -{65,16,69}, -{65,16,70}, -{65,17,-54}, -{65,17,-53}, -{65,17,-52}, -{65,17,-51}, -{65,17,-50}, -{65,17,-49}, -{65,17,-48}, -{65,17,-47}, -{65,17,-46}, -{65,17,-45}, -{65,17,-44}, -{65,17,-43}, -{65,17,-42}, -{65,17,-41}, -{65,17,-40}, -{65,17,-39}, -{65,17,-38}, -{65,17,-37}, -{65,17,-36}, -{65,17,-35}, -{65,17,-34}, -{65,17,-33}, -{65,17,-32}, -{65,17,-31}, -{65,17,-30}, -{65,17,-29}, -{65,17,-28}, -{65,17,-27}, -{65,17,-26}, -{65,17,-25}, -{65,17,-24}, -{65,17,-23}, -{65,17,-22}, -{65,17,-21}, -{65,17,-20}, -{65,17,-19}, -{65,17,-18}, -{65,17,-17}, -{65,17,-16}, -{65,17,-15}, -{65,17,-14}, -{65,17,-13}, -{65,17,-12}, -{65,17,-11}, -{65,17,-10}, -{65,17,-9}, -{65,17,-8}, -{65,17,-7}, -{65,17,-6}, -{65,17,-5}, -{65,17,-4}, -{65,17,-3}, -{65,17,-2}, -{65,17,-1}, -{65,17,0}, -{65,17,1}, -{65,17,2}, -{65,17,3}, -{65,17,4}, -{65,17,5}, -{65,17,6}, -{65,17,7}, -{65,17,8}, -{65,17,9}, -{65,17,10}, -{65,17,11}, -{65,17,12}, -{65,17,13}, -{65,17,14}, -{65,17,15}, -{65,17,16}, -{65,17,17}, -{65,17,18}, -{65,17,19}, -{65,17,20}, -{65,17,21}, -{65,17,22}, -{65,17,23}, -{65,17,24}, -{65,17,25}, -{65,17,26}, -{65,17,27}, -{65,17,28}, -{65,17,29}, -{65,17,30}, -{65,17,31}, -{65,17,32}, -{65,17,33}, -{65,17,34}, -{65,17,35}, -{65,17,36}, -{65,17,37}, -{65,17,38}, -{65,17,39}, -{65,17,40}, -{65,17,41}, -{65,17,42}, -{65,17,43}, -{65,17,44}, -{65,17,45}, -{65,17,46}, -{65,17,47}, -{65,17,48}, -{65,17,49}, -{65,17,50}, -{65,17,51}, -{65,17,52}, -{65,17,53}, -{65,17,54}, -{65,17,55}, -{65,17,56}, -{65,17,57}, -{65,17,58}, -{65,17,59}, -{65,17,60}, -{65,17,61}, -{65,17,62}, -{65,17,63}, -{65,17,64}, -{65,17,65}, -{65,17,66}, -{65,17,67}, -{65,17,68}, -{65,17,69}, -{65,17,70}, -{65,18,-54}, -{65,18,-53}, -{65,18,-52}, -{65,18,-51}, -{65,18,-50}, -{65,18,-49}, -{65,18,-48}, -{65,18,-47}, -{65,18,-46}, -{65,18,-45}, -{65,18,-44}, -{65,18,-43}, -{65,18,-42}, -{65,18,-41}, -{65,18,-40}, -{65,18,-39}, -{65,18,-38}, -{65,18,-37}, -{65,18,-36}, -{65,18,-35}, -{65,18,-34}, -{65,18,-33}, -{65,18,-32}, -{65,18,-31}, -{65,18,-30}, -{65,18,-29}, -{65,18,-28}, -{65,18,-27}, -{65,18,-26}, -{65,18,-25}, -{65,18,-24}, -{65,18,-23}, -{65,18,-22}, -{65,18,-21}, -{65,18,-20}, -{65,18,-19}, -{65,18,-18}, -{65,18,-17}, -{65,18,-16}, -{65,18,-15}, -{65,18,-14}, -{65,18,-13}, -{65,18,-12}, -{65,18,-11}, -{65,18,-10}, -{65,18,-9}, -{65,18,-8}, -{65,18,-7}, -{65,18,-6}, -{65,18,-5}, -{65,18,-4}, -{65,18,-3}, -{65,18,-2}, -{65,18,-1}, -{65,18,0}, -{65,18,1}, -{65,18,2}, -{65,18,3}, -{65,18,4}, -{65,18,5}, -{65,18,6}, -{65,18,7}, -{65,18,8}, -{65,18,9}, -{65,18,10}, -{65,18,11}, -{65,18,12}, -{65,18,13}, -{65,18,14}, -{65,18,15}, -{65,18,16}, -{65,18,17}, -{65,18,18}, -{65,18,19}, -{65,18,20}, -{65,18,21}, -{65,18,22}, -{65,18,23}, -{65,18,24}, -{65,18,25}, -{65,18,26}, -{65,18,27}, -{65,18,28}, -{65,18,29}, -{65,18,30}, -{65,18,31}, -{65,18,32}, -{65,18,33}, -{65,18,34}, -{65,18,35}, -{65,18,36}, -{65,18,37}, -{65,18,38}, -{65,18,39}, -{65,18,40}, -{65,18,41}, -{65,18,42}, -{65,18,43}, -{65,18,44}, -{65,18,45}, -{65,18,46}, -{65,18,47}, -{65,18,48}, -{65,18,49}, -{65,18,50}, -{65,18,51}, -{65,18,52}, -{65,18,53}, -{65,18,54}, -{65,18,55}, -{65,18,56}, -{65,18,57}, -{65,18,58}, -{65,18,59}, -{65,18,60}, -{65,18,61}, -{65,18,62}, -{65,18,63}, -{65,18,64}, -{65,18,65}, -{65,18,66}, -{65,18,67}, -{65,18,68}, -{65,18,69}, -{65,18,70}, -{65,19,-54}, -{65,19,-53}, -{65,19,-52}, -{65,19,-51}, -{65,19,-50}, -{65,19,-49}, -{65,19,-48}, -{65,19,-47}, -{65,19,-46}, -{65,19,-45}, -{65,19,-44}, -{65,19,-43}, -{65,19,-42}, -{65,19,-41}, -{65,19,-40}, -{65,19,-39}, -{65,19,-38}, -{65,19,-37}, -{65,19,-36}, -{65,19,-35}, -{65,19,-34}, -{65,19,-33}, -{65,19,-32}, -{65,19,-31}, -{65,19,-30}, -{65,19,-29}, -{65,19,-28}, -{65,19,-27}, -{65,19,-26}, -{65,19,-25}, -{65,19,-24}, -{65,19,-23}, -{65,19,-22}, -{65,19,-21}, -{65,19,-20}, -{65,19,-19}, -{65,19,-18}, -{65,19,-17}, -{65,19,-16}, -{65,19,-15}, -{65,19,-14}, -{65,19,-13}, -{65,19,-12}, -{65,19,-11}, -{65,19,-10}, -{65,19,-9}, -{65,19,-8}, -{65,19,-7}, -{65,19,-6}, -{65,19,-5}, -{65,19,-4}, -{65,19,-3}, -{65,19,-2}, -{65,19,-1}, -{65,19,0}, -{65,19,1}, -{65,19,2}, -{65,19,3}, -{65,19,4}, -{65,19,5}, -{65,19,6}, -{65,19,7}, -{65,19,8}, -{65,19,9}, -{65,19,10}, -{65,19,11}, -{65,19,12}, -{65,19,13}, -{65,19,14}, -{65,19,15}, -{65,19,16}, -{65,19,17}, -{65,19,18}, -{65,19,19}, -{65,19,20}, -{65,19,21}, -{65,19,22}, -{65,19,23}, -{65,19,24}, -{65,19,25}, -{65,19,26}, -{65,19,27}, -{65,19,28}, -{65,19,29}, -{65,19,30}, -{65,19,31}, -{65,19,32}, -{65,19,33}, -{65,19,34}, -{65,19,35}, -{65,19,36}, -{65,19,37}, -{65,19,38}, -{65,19,39}, -{65,19,40}, -{65,19,41}, -{65,19,42}, -{65,19,43}, -{65,19,44}, -{65,19,45}, -{65,19,46}, -{65,19,47}, -{65,19,48}, -{65,19,49}, -{65,19,50}, -{65,19,51}, -{65,19,52}, -{65,19,53}, -{65,19,54}, -{65,19,55}, -{65,19,56}, -{65,19,57}, -{65,19,58}, -{65,19,59}, -{65,19,60}, -{65,19,61}, -{65,19,62}, -{65,19,63}, -{65,19,64}, -{65,19,65}, -{65,19,66}, -{65,19,67}, -{65,19,68}, -{65,19,69}, -{65,19,70}, -{65,20,-54}, -{65,20,-53}, -{65,20,-52}, -{65,20,-51}, -{65,20,-50}, -{65,20,-49}, -{65,20,-48}, -{65,20,-47}, -{65,20,-46}, -{65,20,-45}, -{65,20,-44}, -{65,20,-43}, -{65,20,-42}, -{65,20,-41}, -{65,20,-40}, -{65,20,-39}, -{65,20,-38}, -{65,20,-37}, -{65,20,-36}, -{65,20,-35}, -{65,20,-34}, -{65,20,-33}, -{65,20,-32}, -{65,20,-31}, -{65,20,-30}, -{65,20,-29}, -{65,20,-28}, -{65,20,-27}, -{65,20,-26}, -{65,20,-25}, -{65,20,-24}, -{65,20,-23}, -{65,20,-22}, -{65,20,-21}, -{65,20,-20}, -{65,20,-19}, -{65,20,-18}, -{65,20,-17}, -{65,20,-16}, -{65,20,-15}, -{65,20,-14}, -{65,20,-13}, -{65,20,-12}, -{65,20,-11}, -{65,20,-10}, -{65,20,-9}, -{65,20,-8}, -{65,20,-7}, -{65,20,-6}, -{65,20,-5}, -{65,20,-4}, -{65,20,-3}, -{65,20,-2}, -{65,20,-1}, -{65,20,0}, -{65,20,1}, -{65,20,2}, -{65,20,3}, -{65,20,4}, -{65,20,5}, -{65,20,6}, -{65,20,7}, -{65,20,8}, -{65,20,9}, -{65,20,10}, -{65,20,11}, -{65,20,12}, -{65,20,13}, -{65,20,14}, -{65,20,15}, -{65,20,16}, -{65,20,17}, -{65,20,18}, -{65,20,19}, -{65,20,20}, -{65,20,21}, -{65,20,22}, -{65,20,23}, -{65,20,24}, -{65,20,25}, -{65,20,26}, -{65,20,27}, -{65,20,28}, -{65,20,29}, -{65,20,30}, -{65,20,31}, -{65,20,32}, -{65,20,33}, -{65,20,34}, -{65,20,35}, -{65,20,36}, -{65,20,37}, -{65,20,38}, -{65,20,39}, -{65,20,40}, -{65,20,41}, -{65,20,42}, -{65,20,43}, -{65,20,44}, -{65,20,45}, -{65,20,46}, -{65,20,47}, -{65,20,48}, -{65,20,49}, -{65,20,50}, -{65,20,51}, -{65,20,52}, -{65,20,53}, -{65,20,54}, -{65,20,55}, -{65,20,56}, -{65,20,57}, -{65,20,58}, -{65,20,59}, -{65,20,60}, -{65,20,61}, -{65,20,62}, -{65,20,63}, -{65,20,64}, -{65,20,65}, -{65,20,66}, -{65,20,67}, -{65,20,68}, -{65,20,69}, -{65,20,70}, -{65,21,-54}, -{65,21,-53}, -{65,21,-52}, -{65,21,-51}, -{65,21,-50}, -{65,21,-49}, -{65,21,-48}, -{65,21,-47}, -{65,21,-46}, -{65,21,-45}, -{65,21,-44}, -{65,21,-43}, -{65,21,-42}, -{65,21,-41}, -{65,21,-40}, -{65,21,-39}, -{65,21,-38}, -{65,21,-37}, -{65,21,-36}, -{65,21,-35}, -{65,21,-34}, -{65,21,-33}, -{65,21,-32}, -{65,21,-31}, -{65,21,-30}, -{65,21,-29}, -{65,21,-28}, -{65,21,-27}, -{65,21,-26}, -{65,21,-25}, -{65,21,-24}, -{65,21,-23}, -{65,21,-22}, -{65,21,-21}, -{65,21,-20}, -{65,21,-19}, -{65,21,-18}, -{65,21,-17}, -{65,21,-16}, -{65,21,-15}, -{65,21,-14}, -{65,21,-13}, -{65,21,-12}, -{65,21,-11}, -{65,21,-10}, -{65,21,-9}, -{65,21,-8}, -{65,21,-7}, -{65,21,-6}, -{65,21,-5}, -{65,21,-4}, -{65,21,-3}, -{65,21,-2}, -{65,21,-1}, -{65,21,0}, -{65,21,1}, -{65,21,2}, -{65,21,3}, -{65,21,4}, -{65,21,5}, -{65,21,6}, -{65,21,7}, -{65,21,8}, -{65,21,9}, -{65,21,10}, -{65,21,11}, -{65,21,12}, -{65,21,13}, -{65,21,14}, -{65,21,15}, -{65,21,16}, -{65,21,17}, -{65,21,18}, -{65,21,19}, -{65,21,20}, -{65,21,21}, -{65,21,22}, -{65,21,23}, -{65,21,24}, -{65,21,25}, -{65,21,26}, -{65,21,27}, -{65,21,28}, -{65,21,29}, -{65,21,30}, -{65,21,31}, -{65,21,32}, -{65,21,33}, -{65,21,34}, -{65,21,35}, -{65,21,36}, -{65,21,37}, -{65,21,38}, -{65,21,39}, -{65,21,40}, -{65,21,41}, -{65,21,42}, -{65,21,43}, -{65,21,44}, -{65,21,45}, -{65,21,46}, -{65,21,47}, -{65,21,48}, -{65,21,49}, -{65,21,50}, -{65,21,51}, -{65,21,52}, -{65,21,53}, -{65,21,54}, -{65,21,55}, -{65,21,56}, -{65,21,57}, -{65,21,58}, -{65,21,59}, -{65,21,60}, -{65,21,61}, -{65,21,62}, -{65,21,63}, -{65,21,64}, -{65,21,65}, -{65,21,66}, -{65,21,67}, -{65,21,68}, -{65,21,69}, -{65,21,70}, -{65,22,-54}, -{65,22,-53}, -{65,22,-52}, -{65,22,-51}, -{65,22,-50}, -{65,22,-49}, -{65,22,-48}, -{65,22,-47}, -{65,22,-46}, -{65,22,-45}, -{65,22,-44}, -{65,22,-43}, -{65,22,-42}, -{65,22,-41}, -{65,22,-40}, -{65,22,-39}, -{65,22,-38}, -{65,22,-37}, -{65,22,-36}, -{65,22,-35}, -{65,22,-34}, -{65,22,-33}, -{65,22,-32}, -{65,22,-31}, -{65,22,-30}, -{65,22,-29}, -{65,22,-28}, -{65,22,-27}, -{65,22,-26}, -{65,22,-25}, -{65,22,-24}, -{65,22,-23}, -{65,22,-22}, -{65,22,-21}, -{65,22,-20}, -{65,22,-19}, -{65,22,-18}, -{65,22,-17}, -{65,22,-16}, -{65,22,-15}, -{65,22,-14}, -{65,22,-13}, -{65,22,-12}, -{65,22,-11}, -{65,22,-10}, -{65,22,-9}, -{65,22,-8}, -{65,22,-7}, -{65,22,-6}, -{65,22,-5}, -{65,22,-4}, -{65,22,-3}, -{65,22,-2}, -{65,22,-1}, -{65,22,0}, -{65,22,1}, -{65,22,2}, -{65,22,3}, -{65,22,4}, -{65,22,5}, -{65,22,6}, -{65,22,7}, -{65,22,8}, -{65,22,9}, -{65,22,10}, -{65,22,11}, -{65,22,12}, -{65,22,13}, -{65,22,14}, -{65,22,15}, -{65,22,16}, -{65,22,17}, -{65,22,18}, -{65,22,19}, -{65,22,20}, -{65,22,21}, -{65,22,22}, -{65,22,23}, -{65,22,24}, -{65,22,25}, -{65,22,26}, -{65,22,27}, -{65,22,28}, -{65,22,29}, -{65,22,30}, -{65,22,31}, -{65,22,32}, -{65,22,33}, -{65,22,34}, -{65,22,35}, -{65,22,36}, -{65,22,37}, -{65,22,38}, -{65,22,39}, -{65,22,40}, -{65,22,41}, -{65,22,42}, -{65,22,43}, -{65,22,44}, -{65,22,45}, -{65,22,46}, -{65,22,47}, -{65,22,48}, -{65,22,49}, -{65,22,50}, -{65,22,51}, -{65,22,52}, -{65,22,53}, -{65,22,54}, -{65,22,55}, -{65,22,56}, -{65,22,57}, -{65,22,58}, -{65,22,59}, -{65,22,60}, -{65,22,61}, -{65,22,62}, -{65,22,63}, -{65,22,64}, -{65,22,65}, -{65,22,66}, -{65,22,67}, -{65,22,68}, -{65,22,69}, -{65,22,70}, -{65,23,-54}, -{65,23,-53}, -{65,23,-52}, -{65,23,-51}, -{65,23,-50}, -{65,23,-49}, -{65,23,-48}, -{65,23,-47}, -{65,23,-46}, -{65,23,-45}, -{65,23,-44}, -{65,23,-43}, -{65,23,-42}, -{65,23,-41}, -{65,23,-40}, -{65,23,-39}, -{65,23,-38}, -{65,23,-37}, -{65,23,-36}, -{65,23,-35}, -{65,23,-34}, -{65,23,-33}, -{65,23,-32}, -{65,23,-31}, -{65,23,-30}, -{65,23,-29}, -{65,23,-28}, -{65,23,-27}, -{65,23,-26}, -{65,23,-25}, -{65,23,-24}, -{65,23,-23}, -{65,23,-22}, -{65,23,-21}, -{65,23,-20}, -{65,23,-19}, -{65,23,-18}, -{65,23,-17}, -{65,23,-16}, -{65,23,-15}, -{65,23,-14}, -{65,23,-13}, -{65,23,-12}, -{65,23,-11}, -{65,23,-10}, -{65,23,-9}, -{65,23,-8}, -{65,23,-7}, -{65,23,-6}, -{65,23,-5}, -{65,23,-4}, -{65,23,-3}, -{65,23,-2}, -{65,23,-1}, -{65,23,0}, -{65,23,1}, -{65,23,2}, -{65,23,3}, -{65,23,4}, -{65,23,5}, -{65,23,6}, -{65,23,7}, -{65,23,8}, -{65,23,9}, -{65,23,10}, -{65,23,11}, -{65,23,12}, -{65,23,13}, -{65,23,14}, -{65,23,15}, -{65,23,16}, -{65,23,17}, -{65,23,18}, -{65,23,19}, -{65,23,20}, -{65,23,21}, -{65,23,22}, -{65,23,23}, -{65,23,24}, -{65,23,25}, -{65,23,26}, -{65,23,27}, -{65,23,28}, -{65,23,29}, -{65,23,30}, -{65,23,31}, -{65,23,32}, -{65,23,33}, -{65,23,34}, -{65,23,35}, -{65,23,36}, -{65,23,37}, -{65,23,38}, -{65,23,39}, -{65,23,40}, -{65,23,41}, -{65,23,42}, -{65,23,43}, -{65,23,44}, -{65,23,45}, -{65,23,46}, -{65,23,47}, -{65,23,48}, -{65,23,49}, -{65,23,50}, -{65,23,51}, -{65,23,52}, -{65,23,53}, -{65,23,54}, -{65,23,55}, -{65,23,56}, -{65,23,57}, -{65,23,58}, -{65,23,59}, -{65,23,60}, -{65,23,61}, -{65,23,62}, -{65,23,63}, -{65,23,64}, -{65,23,65}, -{65,23,66}, -{65,23,67}, -{65,23,68}, -{65,23,69}, -{65,23,70}, -{65,24,-54}, -{65,24,-53}, -{65,24,-52}, -{65,24,-51}, -{65,24,-50}, -{65,24,-49}, -{65,24,-48}, -{65,24,-47}, -{65,24,-46}, -{65,24,-45}, -{65,24,-44}, -{65,24,-43}, -{65,24,-42}, -{65,24,-41}, -{65,24,-40}, -{65,24,-39}, -{65,24,-38}, -{65,24,-37}, -{65,24,-36}, -{65,24,-35}, -{65,24,-34}, -{65,24,-33}, -{65,24,-32}, -{65,24,-31}, -{65,24,-30}, -{65,24,-29}, -{65,24,-28}, -{65,24,-27}, -{65,24,-26}, -{65,24,-25}, -{65,24,-24}, -{65,24,-23}, -{65,24,-22}, -{65,24,-21}, -{65,24,-20}, -{65,24,-19}, -{65,24,-18}, -{65,24,-17}, -{65,24,-16}, -{65,24,-15}, -{65,24,-14}, -{65,24,-13}, -{65,24,-12}, -{65,24,-11}, -{65,24,-10}, -{65,24,-9}, -{65,24,-8}, -{65,24,-7}, -{65,24,-6}, -{65,24,-5}, -{65,24,-4}, -{65,24,-3}, -{65,24,-2}, -{65,24,-1}, -{65,24,0}, -{65,24,1}, -{65,24,2}, -{65,24,3}, -{65,24,4}, -{65,24,5}, -{65,24,6}, -{65,24,7}, -{65,24,8}, -{65,24,9}, -{65,24,10}, -{65,24,11}, -{65,24,12}, -{65,24,13}, -{65,24,14}, -{65,24,15}, -{65,24,16}, -{65,24,17}, -{65,24,18}, -{65,24,19}, -{65,24,20}, -{65,24,21}, -{65,24,22}, -{65,24,23}, -{65,24,24}, -{65,24,25}, -{65,24,26}, -{65,24,27}, -{65,24,28}, -{65,24,29}, -{65,24,30}, -{65,24,31}, -{65,24,32}, -{65,24,33}, -{65,24,34}, -{65,24,35}, -{65,24,36}, -{65,24,37}, -{65,24,38}, -{65,24,39}, -{65,24,40}, -{65,24,41}, -{65,24,42}, -{65,24,43}, -{65,24,44}, -{65,24,45}, -{65,24,46}, -{65,24,47}, -{65,24,48}, -{65,24,49}, -{65,24,50}, -{65,24,51}, -{65,24,52}, -{65,24,53}, -{65,24,54}, -{65,24,55}, -{65,24,56}, -{65,24,57}, -{65,24,58}, -{65,24,59}, -{65,24,60}, -{65,24,61}, -{65,24,62}, -{65,24,63}, -{65,24,64}, -{65,24,65}, -{65,24,66}, -{65,24,67}, -{65,24,68}, -{65,24,69}, -{65,24,70}, -{65,25,-54}, -{65,25,-53}, -{65,25,-52}, -{65,25,-51}, -{65,25,-50}, -{65,25,-49}, -{65,25,-48}, -{65,25,-47}, -{65,25,-46}, -{65,25,-45}, -{65,25,-44}, -{65,25,-43}, -{65,25,-42}, -{65,25,-41}, -{65,25,-40}, -{65,25,-39}, -{65,25,-38}, -{65,25,-37}, -{65,25,-36}, -{65,25,-35}, -{65,25,-34}, -{65,25,-33}, -{65,25,-32}, -{65,25,-31}, -{65,25,-30}, -{65,25,-29}, -{65,25,-28}, -{65,25,-27}, -{65,25,-26}, -{65,25,-25}, -{65,25,-24}, -{65,25,-23}, -{65,25,-22}, -{65,25,-21}, -{65,25,-20}, -{65,25,-19}, -{65,25,-18}, -{65,25,-17}, -{65,25,-16}, -{65,25,-15}, -{65,25,-14}, -{65,25,-13}, -{65,25,-12}, -{65,25,-11}, -{65,25,-10}, -{65,25,-9}, -{65,25,-8}, -{65,25,-7}, -{65,25,-6}, -{65,25,-5}, -{65,25,-4}, -{65,25,-3}, -{65,25,-2}, -{65,25,-1}, -{65,25,0}, -{65,25,1}, -{65,25,2}, -{65,25,3}, -{65,25,4}, -{65,25,5}, -{65,25,6}, -{65,25,7}, -{65,25,8}, -{65,25,9}, -{65,25,10}, -{65,25,11}, -{65,25,12}, -{65,25,13}, -{65,25,14}, -{65,25,15}, -{65,25,16}, -{65,25,17}, -{65,25,18}, -{65,25,19}, -{65,25,20}, -{65,25,21}, -{65,25,22}, -{65,25,23}, -{65,25,24}, -{65,25,25}, -{65,25,26}, -{65,25,27}, -{65,25,28}, -{65,25,29}, -{65,25,30}, -{65,25,31}, -{65,25,32}, -{65,25,33}, -{65,25,34}, -{65,25,35}, -{65,25,36}, -{65,25,37}, -{65,25,38}, -{65,25,39}, -{65,25,40}, -{65,25,41}, -{65,25,42}, -{65,25,43}, -{65,25,44}, -{65,25,45}, -{65,25,46}, -{65,25,47}, -{65,25,48}, -{65,25,49}, -{65,25,50}, -{65,25,51}, -{65,25,52}, -{65,25,53}, -{65,25,54}, -{65,25,55}, -{65,25,56}, -{65,25,57}, -{65,25,58}, -{65,25,59}, -{65,25,60}, -{65,25,61}, -{65,25,62}, -{65,25,63}, -{65,25,64}, -{65,25,65}, -{65,25,66}, -{65,25,67}, -{65,25,68}, -{65,25,69}, -{65,25,70}, -{65,26,-54}, -{65,26,-53}, -{65,26,-52}, -{65,26,-51}, -{65,26,-50}, -{65,26,-49}, -{65,26,-48}, -{65,26,-47}, -{65,26,-46}, -{65,26,-45}, -{65,26,-44}, -{65,26,-43}, -{65,26,-42}, -{65,26,-41}, -{65,26,-40}, -{65,26,-39}, -{65,26,-38}, -{65,26,-37}, -{65,26,-36}, -{65,26,-35}, -{65,26,-34}, -{65,26,-33}, -{65,26,-32}, -{65,26,-31}, -{65,26,-30}, -{65,26,-29}, -{65,26,-28}, -{65,26,-27}, -{65,26,-26}, -{65,26,-25}, -{65,26,-24}, -{65,26,-23}, -{65,26,-22}, -{65,26,-21}, -{65,26,-20}, -{65,26,-19}, -{65,26,-18}, -{65,26,-17}, -{65,26,-16}, -{65,26,-15}, -{65,26,-14}, -{65,26,-13}, -{65,26,-12}, -{65,26,-11}, -{65,26,-10}, -{65,26,-9}, -{65,26,-8}, -{65,26,-7}, -{65,26,-6}, -{65,26,-5}, -{65,26,-4}, -{65,26,-3}, -{65,26,-2}, -{65,26,-1}, -{65,26,0}, -{65,26,1}, -{65,26,2}, -{65,26,3}, -{65,26,4}, -{65,26,5}, -{65,26,6}, -{65,26,7}, -{65,26,8}, -{65,26,9}, -{65,26,10}, -{65,26,11}, -{65,26,12}, -{65,26,13}, -{65,26,14}, -{65,26,15}, -{65,26,16}, -{65,26,17}, -{65,26,18}, -{65,26,19}, -{65,26,20}, -{65,26,21}, -{65,26,22}, -{65,26,23}, -{65,26,24}, -{65,26,25}, -{65,26,26}, -{65,26,27}, -{65,26,28}, -{65,26,29}, -{65,26,30}, -{65,26,31}, -{65,26,32}, -{65,26,33}, -{65,26,34}, -{65,26,35}, -{65,26,36}, -{65,26,37}, -{65,26,38}, -{65,26,39}, -{65,26,40}, -{65,26,41}, -{65,26,42}, -{65,26,43}, -{65,26,44}, -{65,26,45}, -{65,26,46}, -{65,26,47}, -{65,26,48}, -{65,26,49}, -{65,26,50}, -{65,26,51}, -{65,26,52}, -{65,26,53}, -{65,26,54}, -{65,26,55}, -{65,26,56}, -{65,26,57}, -{65,26,58}, -{65,26,59}, -{65,26,60}, -{65,26,61}, -{65,26,62}, -{65,26,63}, -{65,26,64}, -{65,26,65}, -{65,26,66}, -{65,26,67}, -{65,26,68}, -{65,26,69}, -{65,26,70}, -{65,27,-54}, -{65,27,-53}, -{65,27,-52}, -{65,27,-51}, -{65,27,-50}, -{65,27,-49}, -{65,27,-48}, -{65,27,-47}, -{65,27,-46}, -{65,27,-45}, -{65,27,-44}, -{65,27,-43}, -{65,27,-42}, -{65,27,-41}, -{65,27,-40}, -{65,27,-39}, -{65,27,-38}, -{65,27,-37}, -{65,27,-36}, -{65,27,-35}, -{65,27,-34}, -{65,27,-33}, -{65,27,-32}, -{65,27,-31}, -{65,27,-30}, -{65,27,-29}, -{65,27,-28}, -{65,27,-27}, -{65,27,-26}, -{65,27,-25}, -{65,27,-24}, -{65,27,-23}, -{65,27,-22}, -{65,27,-21}, -{65,27,-20}, -{65,27,-19}, -{65,27,-18}, -{65,27,-17}, -{65,27,-16}, -{65,27,-15}, -{65,27,-14}, -{65,27,-13}, -{65,27,-12}, -{65,27,-11}, -{65,27,-10}, -{65,27,-9}, -{65,27,-8}, -{65,27,-7}, -{65,27,-6}, -{65,27,-5}, -{65,27,-4}, -{65,27,-3}, -{65,27,-2}, -{65,27,-1}, -{65,27,0}, -{65,27,1}, -{65,27,2}, -{65,27,3}, -{65,27,4}, -{65,27,5}, -{65,27,6}, -{65,27,7}, -{65,27,8}, -{65,27,9}, -{65,27,10}, -{65,27,11}, -{65,27,12}, -{65,27,13}, -{65,27,14}, -{65,27,15}, -{65,27,16}, -{65,27,17}, -{65,27,18}, -{65,27,19}, -{65,27,20}, -{65,27,21}, -{65,27,22}, -{65,27,23}, -{65,27,24}, -{65,27,25}, -{65,27,26}, -{65,27,27}, -{65,27,28}, -{65,27,29}, -{65,27,30}, -{65,27,31}, -{65,27,32}, -{65,27,33}, -{65,27,34}, -{65,27,35}, -{65,27,36}, -{65,27,37}, -{65,27,38}, -{65,27,39}, -{65,27,40}, -{65,27,41}, -{65,27,42}, -{65,27,43}, -{65,27,44}, -{65,27,45}, -{65,27,46}, -{65,27,47}, -{65,27,48}, -{65,27,49}, -{65,27,50}, -{65,27,51}, -{65,27,52}, -{65,27,53}, -{65,27,54}, -{65,27,55}, -{65,27,56}, -{65,27,57}, -{65,27,58}, -{65,27,59}, -{65,27,60}, -{65,27,61}, -{65,27,62}, -{65,27,63}, -{65,27,64}, -{65,27,65}, -{65,27,66}, -{65,27,67}, -{65,27,68}, -{65,27,69}, -{65,27,70}, -{65,27,71}, -{65,28,-54}, -{65,28,-53}, -{65,28,-52}, -{65,28,-51}, -{65,28,-50}, -{65,28,-49}, -{65,28,-48}, -{65,28,-47}, -{65,28,-46}, -{65,28,-45}, -{65,28,-44}, -{65,28,-43}, -{65,28,-42}, -{65,28,-41}, -{65,28,-40}, -{65,28,-39}, -{65,28,-38}, -{65,28,-37}, -{65,28,-36}, -{65,28,-35}, -{65,28,-34}, -{65,28,-33}, -{65,28,-32}, -{65,28,-31}, -{65,28,-30}, -{65,28,-29}, -{65,28,-28}, -{65,28,-27}, -{65,28,-26}, -{65,28,-25}, -{65,28,-24}, -{65,28,-23}, -{65,28,-22}, -{65,28,-21}, -{65,28,-20}, -{65,28,-19}, -{65,28,-18}, -{65,28,-17}, -{65,28,-16}, -{65,28,-15}, -{65,28,-14}, -{65,28,-13}, -{65,28,-12}, -{65,28,-11}, -{65,28,-10}, -{65,28,-9}, -{65,28,-8}, -{65,28,-7}, -{65,28,-6}, -{65,28,-5}, -{65,28,-4}, -{65,28,-3}, -{65,28,-2}, -{65,28,-1}, -{65,28,0}, -{65,28,1}, -{65,28,2}, -{65,28,3}, -{65,28,4}, -{65,28,5}, -{65,28,6}, -{65,28,7}, -{65,28,8}, -{65,28,9}, -{65,28,10}, -{65,28,11}, -{65,28,12}, -{65,28,13}, -{65,28,14}, -{65,28,15}, -{65,28,16}, -{65,28,17}, -{65,28,18}, -{65,28,19}, -{65,28,20}, -{65,28,21}, -{65,28,22}, -{65,28,23}, -{65,28,24}, -{65,28,25}, -{65,28,26}, -{65,28,27}, -{65,28,28}, -{65,28,29}, -{65,28,30}, -{65,28,31}, -{65,28,32}, -{65,28,33}, -{65,28,34}, -{65,28,35}, -{65,28,36}, -{65,28,37}, -{65,28,38}, -{65,28,39}, -{65,28,40}, -{65,28,41}, -{65,28,42}, -{65,28,43}, -{65,28,44}, -{65,28,45}, -{65,28,46}, -{65,28,47}, -{65,28,48}, -{65,28,49}, -{65,28,50}, -{65,28,51}, -{65,28,52}, -{65,28,53}, -{65,28,54}, -{65,28,55}, -{65,28,56}, -{65,28,57}, -{65,28,58}, -{65,28,59}, -{65,28,60}, -{65,28,61}, -{65,28,62}, -{65,28,63}, -{65,28,64}, -{65,28,65}, -{65,28,66}, -{65,28,67}, -{65,28,68}, -{65,28,69}, -{65,28,70}, -{65,28,71}, -{65,29,-54}, -{65,29,-53}, -{65,29,-52}, -{65,29,-51}, -{65,29,-50}, -{65,29,-49}, -{65,29,-48}, -{65,29,-47}, -{65,29,-46}, -{65,29,-45}, -{65,29,-44}, -{65,29,-43}, -{65,29,-42}, -{65,29,-41}, -{65,29,-40}, -{65,29,-39}, -{65,29,-38}, -{65,29,-37}, -{65,29,-36}, -{65,29,-35}, -{65,29,-34}, -{65,29,-33}, -{65,29,-32}, -{65,29,-31}, -{65,29,-30}, -{65,29,-29}, -{65,29,-28}, -{65,29,-27}, -{65,29,-26}, -{65,29,-25}, -{65,29,-24}, -{65,29,-23}, -{65,29,-22}, -{65,29,-21}, -{65,29,-20}, -{65,29,-19}, -{65,29,-18}, -{65,29,-17}, -{65,29,-16}, -{65,29,-15}, -{65,29,-14}, -{65,29,-13}, -{65,29,-12}, -{65,29,-11}, -{65,29,-10}, -{65,29,-9}, -{65,29,-8}, -{65,29,-7}, -{65,29,-6}, -{65,29,-5}, -{65,29,-4}, -{65,29,-3}, -{65,29,-2}, -{65,29,-1}, -{65,29,0}, -{65,29,1}, -{65,29,2}, -{65,29,3}, -{65,29,4}, -{65,29,5}, -{65,29,6}, -{65,29,7}, -{65,29,8}, -{65,29,9}, -{65,29,10}, -{65,29,11}, -{65,29,12}, -{65,29,13}, -{65,29,14}, -{65,29,15}, -{65,29,16}, -{65,29,17}, -{65,29,18}, -{65,29,19}, -{65,29,20}, -{65,29,21}, -{65,29,22}, -{65,29,23}, -{65,29,24}, -{65,29,25}, -{65,29,26}, -{65,29,27}, -{65,29,28}, -{65,29,29}, -{65,29,30}, -{65,29,31}, -{65,29,32}, -{65,29,33}, -{65,29,34}, -{65,29,35}, -{65,29,36}, -{65,29,37}, -{65,29,38}, -{65,29,39}, -{65,29,40}, -{65,29,41}, -{65,29,42}, -{65,29,43}, -{65,29,44}, -{65,29,45}, -{65,29,46}, -{65,29,47}, -{65,29,48}, -{65,29,49}, -{65,29,50}, -{65,29,51}, -{65,29,52}, -{65,29,53}, -{65,29,54}, -{65,29,55}, -{65,29,56}, -{65,29,57}, -{65,29,58}, -{65,29,59}, -{65,29,60}, -{65,29,61}, -{65,29,62}, -{65,29,63}, -{65,29,64}, -{65,29,65}, -{65,29,66}, -{65,29,67}, -{65,29,68}, -{65,29,69}, -{65,29,70}, -{65,29,71}, -{65,30,-54}, -{65,30,-53}, -{65,30,-52}, -{65,30,-51}, -{65,30,-50}, -{65,30,-49}, -{65,30,-48}, -{65,30,-47}, -{65,30,-46}, -{65,30,-45}, -{65,30,-44}, -{65,30,-43}, -{65,30,-42}, -{65,30,-41}, -{65,30,-40}, -{65,30,-39}, -{65,30,-38}, -{65,30,-37}, -{65,30,-36}, -{65,30,-35}, -{65,30,-34}, -{65,30,-33}, -{65,30,-32}, -{65,30,-31}, -{65,30,-30}, -{65,30,-29}, -{65,30,-28}, -{65,30,-27}, -{65,30,-26}, -{65,30,-25}, -{65,30,-24}, -{65,30,-23}, -{65,30,-22}, -{65,30,-21}, -{65,30,-20}, -{65,30,-19}, -{65,30,-18}, -{65,30,-17}, -{65,30,-16}, -{65,30,-15}, -{65,30,-14}, -{65,30,-13}, -{65,30,-12}, -{65,30,-11}, -{65,30,-10}, -{65,30,-9}, -{65,30,-8}, -{65,30,-7}, -{65,30,-6}, -{65,30,-5}, -{65,30,-4}, -{65,30,-3}, -{65,30,-2}, -{65,30,-1}, -{65,30,0}, -{65,30,1}, -{65,30,2}, -{65,30,3}, -{65,30,4}, -{65,30,5}, -{65,30,6}, -{65,30,7}, -{65,30,8}, -{65,30,9}, -{65,30,10}, -{65,30,11}, -{65,30,12}, -{65,30,13}, -{65,30,14}, -{65,30,15}, -{65,30,16}, -{65,30,17}, -{65,30,18}, -{65,30,19}, -{65,30,20}, -{65,30,21}, -{65,30,22}, -{65,30,23}, -{65,30,24}, -{65,30,25}, -{65,30,26}, -{65,30,27}, -{65,30,28}, -{65,30,29}, -{65,30,30}, -{65,30,31}, -{65,30,32}, -{65,30,33}, -{65,30,34}, -{65,30,35}, -{65,30,36}, -{65,30,37}, -{65,30,38}, -{65,30,39}, -{65,30,40}, -{65,30,41}, -{65,30,42}, -{65,30,43}, -{65,30,44}, -{65,30,45}, -{65,30,46}, -{65,30,47}, -{65,30,48}, -{65,30,49}, -{65,30,50}, -{65,30,51}, -{65,30,52}, -{65,30,53}, -{65,30,54}, -{65,30,55}, -{65,30,56}, -{65,30,57}, -{65,30,58}, -{65,30,59}, -{65,30,60}, -{65,30,61}, -{65,30,62}, -{65,30,63}, -{65,30,64}, -{65,30,65}, -{65,30,66}, -{65,30,67}, -{65,30,68}, -{65,30,69}, -{65,30,70}, -{65,30,71}, -{65,31,-54}, -{65,31,-53}, -{65,31,-52}, -{65,31,-51}, -{65,31,-50}, -{65,31,-49}, -{65,31,-48}, -{65,31,-47}, -{65,31,-46}, -{65,31,-45}, -{65,31,-44}, -{65,31,-43}, -{65,31,-42}, -{65,31,-41}, -{65,31,-40}, -{65,31,-39}, -{65,31,-38}, -{65,31,-37}, -{65,31,-36}, -{65,31,-35}, -{65,31,-34}, -{65,31,-33}, -{65,31,-32}, -{65,31,-31}, -{65,31,-30}, -{65,31,-29}, -{65,31,-28}, -{65,31,-27}, -{65,31,-26}, -{65,31,-25}, -{65,31,-24}, -{65,31,-23}, -{65,31,-22}, -{65,31,-21}, -{65,31,-20}, -{65,31,-19}, -{65,31,-18}, -{65,31,-17}, -{65,31,-16}, -{65,31,-15}, -{65,31,-14}, -{65,31,-13}, -{65,31,-12}, -{65,31,-11}, -{65,31,-10}, -{65,31,-9}, -{65,31,-8}, -{65,31,-7}, -{65,31,-6}, -{65,31,-5}, -{65,31,-4}, -{65,31,-3}, -{65,31,-2}, -{65,31,-1}, -{65,31,0}, -{65,31,1}, -{65,31,2}, -{65,31,3}, -{65,31,4}, -{65,31,5}, -{65,31,6}, -{65,31,7}, -{65,31,8}, -{65,31,9}, -{65,31,10}, -{65,31,11}, -{65,31,12}, -{65,31,13}, -{65,31,14}, -{65,31,15}, -{65,31,16}, -{65,31,17}, -{65,31,18}, -{65,31,19}, -{65,31,20}, -{65,31,21}, -{65,31,22}, -{65,31,23}, -{65,31,24}, -{65,31,25}, -{65,31,26}, -{65,31,27}, -{65,31,28}, -{65,31,29}, -{65,31,30}, -{65,31,31}, -{65,31,32}, -{65,31,33}, -{65,31,34}, -{65,31,35}, -{65,31,36}, -{65,31,37}, -{65,31,38}, -{65,31,39}, -{65,31,40}, -{65,31,41}, -{65,31,42}, -{65,31,43}, -{65,31,44}, -{65,31,45}, -{65,31,46}, -{65,31,47}, -{65,31,48}, -{65,31,49}, -{65,31,50}, -{65,31,51}, -{65,31,52}, -{65,31,53}, -{65,31,54}, -{65,31,55}, -{65,31,56}, -{65,31,57}, -{65,31,58}, -{65,31,59}, -{65,31,60}, -{65,31,61}, -{65,31,62}, -{65,31,63}, -{65,31,64}, -{65,31,65}, -{65,31,66}, -{65,31,67}, -{65,31,68}, -{65,31,69}, -{65,31,70}, -{65,31,71}, -{65,32,-54}, -{65,32,-53}, -{65,32,-52}, -{65,32,-51}, -{65,32,-50}, -{65,32,-49}, -{65,32,-48}, -{65,32,-47}, -{65,32,-46}, -{65,32,-45}, -{65,32,-44}, -{65,32,-43}, -{65,32,-42}, -{65,32,-41}, -{65,32,-40}, -{65,32,-39}, -{65,32,-38}, -{65,32,-37}, -{65,32,-36}, -{65,32,-35}, -{65,32,-34}, -{65,32,-33}, -{65,32,-32}, -{65,32,-31}, -{65,32,-30}, -{65,32,-29}, -{65,32,-28}, -{65,32,-27}, -{65,32,-26}, -{65,32,-25}, -{65,32,-24}, -{65,32,-23}, -{65,32,-22}, -{65,32,-21}, -{65,32,-20}, -{65,32,-19}, -{65,32,-18}, -{65,32,-17}, -{65,32,-16}, -{65,32,-15}, -{65,32,-14}, -{65,32,-13}, -{65,32,-12}, -{65,32,-11}, -{65,32,-10}, -{65,32,-9}, -{65,32,-8}, -{65,32,-7}, -{65,32,-6}, -{65,32,-5}, -{65,32,-4}, -{65,32,-3}, -{65,32,-2}, -{65,32,-1}, -{65,32,0}, -{65,32,1}, -{65,32,2}, -{65,32,3}, -{65,32,4}, -{65,32,5}, -{65,32,6}, -{65,32,7}, -{65,32,8}, -{65,32,9}, -{65,32,10}, -{65,32,11}, -{65,32,12}, -{65,32,13}, -{65,32,14}, -{65,32,15}, -{65,32,16}, -{65,32,17}, -{65,32,18}, -{65,32,19}, -{65,32,20}, -{65,32,21}, -{65,32,22}, -{65,32,23}, -{65,32,24}, -{65,32,25}, -{65,32,26}, -{65,32,27}, -{65,32,28}, -{65,32,29}, -{65,32,30}, -{65,32,31}, -{65,32,32}, -{65,32,33}, -{65,32,34}, -{65,32,35}, -{65,32,36}, -{65,32,37}, -{65,32,38}, -{65,32,39}, -{65,32,40}, -{65,32,41}, -{65,32,42}, -{65,32,43}, -{65,32,44}, -{65,32,45}, -{65,32,46}, -{65,32,47}, -{65,32,48}, -{65,32,49}, -{65,32,50}, -{65,32,51}, -{65,32,52}, -{65,32,53}, -{65,32,54}, -{65,32,55}, -{65,32,56}, -{65,32,57}, -{65,32,58}, -{65,32,59}, -{65,32,60}, -{65,32,61}, -{65,32,62}, -{65,32,63}, -{65,32,64}, -{65,32,65}, -{65,32,66}, -{65,32,67}, -{65,32,68}, -{65,32,69}, -{65,32,70}, -{65,32,71}, -{65,33,-54}, -{65,33,-53}, -{65,33,-52}, -{65,33,-51}, -{65,33,-50}, -{65,33,-49}, -{65,33,-48}, -{65,33,-47}, -{65,33,-46}, -{65,33,-45}, -{65,33,-44}, -{65,33,-43}, -{65,33,-42}, -{65,33,-41}, -{65,33,-40}, -{65,33,-39}, -{65,33,-38}, -{65,33,-37}, -{65,33,-36}, -{65,33,-35}, -{65,33,-34}, -{65,33,-33}, -{65,33,-32}, -{65,33,-31}, -{65,33,-30}, -{65,33,-29}, -{65,33,-28}, -{65,33,-27}, -{65,33,-26}, -{65,33,-25}, -{65,33,-24}, -{65,33,-23}, -{65,33,-22}, -{65,33,-21}, -{65,33,-20}, -{65,33,-19}, -{65,33,-18}, -{65,33,-17}, -{65,33,-16}, -{65,33,-15}, -{65,33,-14}, -{65,33,-13}, -{65,33,-12}, -{65,33,-11}, -{65,33,-10}, -{65,33,-9}, -{65,33,-8}, -{65,33,-7}, -{65,33,-6}, -{65,33,-5}, -{65,33,-4}, -{65,33,-3}, -{65,33,-2}, -{65,33,-1}, -{65,33,0}, -{65,33,1}, -{65,33,2}, -{65,33,3}, -{65,33,4}, -{65,33,5}, -{65,33,6}, -{65,33,7}, -{65,33,8}, -{65,33,9}, -{65,33,10}, -{65,33,11}, -{65,33,12}, -{65,33,13}, -{65,33,14}, -{65,33,15}, -{65,33,16}, -{65,33,17}, -{65,33,18}, -{65,33,19}, -{65,33,20}, -{65,33,21}, -{65,33,22}, -{65,33,23}, -{65,33,24}, -{65,33,25}, -{65,33,26}, -{65,33,27}, -{65,33,28}, -{65,33,29}, -{65,33,30}, -{65,33,31}, -{65,33,32}, -{65,33,33}, -{65,33,34}, -{65,33,35}, -{65,33,36}, -{65,33,37}, -{65,33,38}, -{65,33,39}, -{65,33,40}, -{65,33,41}, -{65,33,42}, -{65,33,43}, -{65,33,44}, -{65,33,45}, -{65,33,46}, -{65,33,47}, -{65,33,48}, -{65,33,49}, -{65,33,50}, -{65,33,51}, -{65,33,52}, -{65,33,53}, -{65,33,54}, -{65,33,55}, -{65,33,56}, -{65,33,57}, -{65,33,58}, -{65,33,59}, -{65,33,60}, -{65,33,61}, -{65,33,62}, -{65,33,63}, -{65,33,64}, -{65,33,65}, -{65,33,66}, -{65,33,67}, -{65,33,68}, -{65,33,69}, -{65,33,70}, -{65,33,71}, -{65,34,-54}, -{65,34,-53}, -{65,34,-52}, -{65,34,-51}, -{65,34,-50}, -{65,34,-49}, -{65,34,-48}, -{65,34,-47}, -{65,34,-46}, -{65,34,-45}, -{65,34,-44}, -{65,34,-43}, -{65,34,-42}, -{65,34,-41}, -{65,34,-40}, -{65,34,-39}, -{65,34,-38}, -{65,34,-37}, -{65,34,-36}, -{65,34,-35}, -{65,34,-34}, -{65,34,-33}, -{65,34,-32}, -{65,34,-31}, -{65,34,-30}, -{65,34,-29}, -{65,34,-28}, -{65,34,-27}, -{65,34,-26}, -{65,34,-25}, -{65,34,-24}, -{65,34,-23}, -{65,34,-22}, -{65,34,-21}, -{65,34,-20}, -{65,34,-19}, -{65,34,-18}, -{65,34,-17}, -{65,34,-16}, -{65,34,-15}, -{65,34,-14}, -{65,34,-13}, -{65,34,-12}, -{65,34,-11}, -{65,34,-10}, -{65,34,-9}, -{65,34,-8}, -{65,34,-7}, -{65,34,-6}, -{65,34,-5}, -{65,34,-4}, -{65,34,-3}, -{65,34,-2}, -{65,34,-1}, -{65,34,0}, -{65,34,1}, -{65,34,2}, -{65,34,3}, -{65,34,4}, -{65,34,5}, -{65,34,6}, -{65,34,7}, -{65,34,8}, -{65,34,9}, -{65,34,10}, -{65,34,11}, -{65,34,12}, -{65,34,13}, -{65,34,14}, -{65,34,15}, -{65,34,16}, -{65,34,17}, -{65,34,18}, -{65,34,19}, -{65,34,20}, -{65,34,21}, -{65,34,22}, -{65,34,23}, -{65,34,24}, -{65,34,25}, -{65,34,26}, -{65,34,27}, -{65,34,28}, -{65,34,29}, -{65,34,30}, -{65,34,31}, -{65,34,32}, -{65,34,33}, -{65,34,34}, -{65,34,35}, -{65,34,36}, -{65,34,37}, -{65,34,38}, -{65,34,39}, -{65,34,40}, -{65,34,41}, -{65,34,42}, -{65,34,43}, -{65,34,44}, -{65,34,45}, -{65,34,46}, -{65,34,47}, -{65,34,48}, -{65,34,49}, -{65,34,50}, -{65,34,51}, -{65,34,52}, -{65,34,53}, -{65,34,54}, -{65,34,55}, -{65,34,56}, -{65,34,57}, -{65,34,58}, -{65,34,59}, -{65,34,60}, -{65,34,61}, -{65,34,62}, -{65,34,63}, -{65,34,64}, -{65,34,65}, -{65,34,66}, -{65,34,67}, -{65,34,68}, -{65,34,69}, -{65,34,70}, -{65,34,71}, -{65,35,-54}, -{65,35,-53}, -{65,35,-52}, -{65,35,-51}, -{65,35,-50}, -{65,35,-49}, -{65,35,-48}, -{65,35,-47}, -{65,35,-46}, -{65,35,-45}, -{65,35,-44}, -{65,35,-43}, -{65,35,-42}, -{65,35,-41}, -{65,35,-40}, -{65,35,-39}, -{65,35,-38}, -{65,35,-37}, -{65,35,-36}, -{65,35,-35}, -{65,35,-34}, -{65,35,-33}, -{65,35,-32}, -{65,35,-31}, -{65,35,-30}, -{65,35,-29}, -{65,35,-28}, -{65,35,-27}, -{65,35,-26}, -{65,35,-25}, -{65,35,-24}, -{65,35,-23}, -{65,35,-22}, -{65,35,-21}, -{65,35,-20}, -{65,35,-19}, -{65,35,-18}, -{65,35,-17}, -{65,35,-16}, -{65,35,-15}, -{65,35,-14}, -{65,35,-13}, -{65,35,-12}, -{65,35,-11}, -{65,35,-10}, -{65,35,-9}, -{65,35,-8}, -{65,35,-7}, -{65,35,-6}, -{65,35,-5}, -{65,35,-4}, -{65,35,-3}, -{65,35,-2}, -{65,35,-1}, -{65,35,0}, -{65,35,1}, -{65,35,2}, -{65,35,3}, -{65,35,4}, -{65,35,5}, -{65,35,6}, -{65,35,7}, -{65,35,8}, -{65,35,9}, -{65,35,10}, -{65,35,11}, -{65,35,12}, -{65,35,13}, -{65,35,14}, -{65,35,15}, -{65,35,16}, -{65,35,17}, -{65,35,18}, -{65,35,19}, -{65,35,20}, -{65,35,21}, -{65,35,22}, -{65,35,23}, -{65,35,24}, -{65,35,25}, -{65,35,26}, -{65,35,27}, -{65,35,28}, -{65,35,29}, -{65,35,30}, -{65,35,31}, -{65,35,32}, -{65,35,33}, -{65,35,34}, -{65,35,35}, -{65,35,36}, -{65,35,37}, -{65,35,38}, -{65,35,39}, -{65,35,40}, -{65,35,41}, -{65,35,42}, -{65,35,43}, -{65,35,44}, -{65,35,45}, -{65,35,46}, -{65,35,47}, -{65,35,48}, -{65,35,49}, -{65,35,50}, -{65,35,51}, -{65,35,52}, -{65,35,53}, -{65,35,54}, -{65,35,55}, -{65,35,56}, -{65,35,57}, -{65,35,58}, -{65,35,59}, -{65,35,60}, -{65,35,61}, -{65,35,62}, -{65,35,63}, -{65,35,64}, -{65,35,65}, -{65,35,66}, -{65,35,67}, -{65,35,68}, -{65,35,69}, -{65,35,70}, -{65,35,71}, -{65,36,-54}, -{65,36,-53}, -{65,36,-52}, -{65,36,-51}, -{65,36,-50}, -{65,36,-49}, -{65,36,-48}, -{65,36,-47}, -{65,36,-46}, -{65,36,-45}, -{65,36,-44}, -{65,36,-43}, -{65,36,-42}, -{65,36,-41}, -{65,36,-40}, -{65,36,-39}, -{65,36,-38}, -{65,36,-37}, -{65,36,-36}, -{65,36,-35}, -{65,36,-34}, -{65,36,-33}, -{65,36,-32}, -{65,36,-31}, -{65,36,-30}, -{65,36,-29}, -{65,36,-28}, -{65,36,-27}, -{65,36,-26}, -{65,36,-25}, -{65,36,-24}, -{65,36,-23}, -{65,36,-22}, -{65,36,-21}, -{65,36,-20}, -{65,36,-19}, -{65,36,-18}, -{65,36,-17}, -{65,36,-16}, -{65,36,-15}, -{65,36,-14}, -{65,36,-13}, -{65,36,-12}, -{65,36,-11}, -{65,36,-10}, -{65,36,-9}, -{65,36,-8}, -{65,36,-7}, -{65,36,-6}, -{65,36,-5}, -{65,36,-4}, -{65,36,-3}, -{65,36,-2}, -{65,36,-1}, -{65,36,0}, -{65,36,1}, -{65,36,2}, -{65,36,3}, -{65,36,4}, -{65,36,5}, -{65,36,6}, -{65,36,7}, -{65,36,8}, -{65,36,9}, -{65,36,10}, -{65,36,11}, -{65,36,12}, -{65,36,13}, -{65,36,14}, -{65,36,15}, -{65,36,16}, -{65,36,17}, -{65,36,18}, -{65,36,19}, -{65,36,20}, -{65,36,21}, -{65,36,22}, -{65,36,23}, -{65,36,24}, -{65,36,25}, -{65,36,26}, -{65,36,27}, -{65,36,28}, -{65,36,29}, -{65,36,30}, -{65,36,31}, -{65,36,32}, -{65,36,33}, -{65,36,34}, -{65,36,35}, -{65,36,36}, -{65,36,37}, -{65,36,38}, -{65,36,39}, -{65,36,40}, -{65,36,41}, -{65,36,42}, -{65,36,43}, -{65,36,44}, -{65,36,45}, -{65,36,46}, -{65,36,47}, -{65,36,48}, -{65,36,49}, -{65,36,50}, -{65,36,51}, -{65,36,52}, -{65,36,53}, -{65,36,54}, -{65,36,55}, -{65,36,56}, -{65,36,57}, -{65,36,58}, -{65,36,59}, -{65,36,60}, -{65,36,61}, -{65,36,62}, -{65,36,63}, -{65,36,64}, -{65,36,65}, -{65,36,66}, -{65,36,67}, -{65,36,68}, -{65,36,69}, -{65,36,70}, -{65,36,71}, -{65,37,-54}, -{65,37,-53}, -{65,37,-52}, -{65,37,-51}, -{65,37,-50}, -{65,37,-49}, -{65,37,-48}, -{65,37,-47}, -{65,37,-46}, -{65,37,-45}, -{65,37,-44}, -{65,37,-43}, -{65,37,-42}, -{65,37,-41}, -{65,37,-40}, -{65,37,-39}, -{65,37,-38}, -{65,37,-37}, -{65,37,-36}, -{65,37,-35}, -{65,37,-34}, -{65,37,-33}, -{65,37,-32}, -{65,37,-31}, -{65,37,-30}, -{65,37,-29}, -{65,37,-28}, -{65,37,-27}, -{65,37,-26}, -{65,37,-25}, -{65,37,-24}, -{65,37,-23}, -{65,37,-22}, -{65,37,-21}, -{65,37,-20}, -{65,37,-19}, -{65,37,-18}, -{65,37,-17}, -{65,37,-16}, -{65,37,-15}, -{65,37,-14}, -{65,37,-13}, -{65,37,-12}, -{65,37,-11}, -{65,37,-10}, -{65,37,-9}, -{65,37,-8}, -{65,37,-7}, -{65,37,-6}, -{65,37,-5}, -{65,37,-4}, -{65,37,-3}, -{65,37,-2}, -{65,37,-1}, -{65,37,0}, -{65,37,1}, -{65,37,2}, -{65,37,3}, -{65,37,4}, -{65,37,5}, -{65,37,6}, -{65,37,7}, -{65,37,8}, -{65,37,9}, -{65,37,10}, -{65,37,11}, -{65,37,12}, -{65,37,13}, -{65,37,14}, -{65,37,15}, -{65,37,16}, -{65,37,17}, -{65,37,18}, -{65,37,19}, -{65,37,20}, -{65,37,21}, -{65,37,22}, -{65,37,23}, -{65,37,24}, -{65,37,25}, -{65,37,26}, -{65,37,27}, -{65,37,28}, -{65,37,29}, -{65,37,30}, -{65,37,31}, -{65,37,32}, -{65,37,33}, -{65,37,34}, -{65,37,35}, -{65,37,36}, -{65,37,37}, -{65,37,38}, -{65,37,39}, -{65,37,40}, -{65,37,41}, -{65,37,42}, -{65,37,43}, -{65,37,44}, -{65,37,45}, -{65,37,46}, -{65,37,47}, -{65,37,48}, -{65,37,49}, -{65,37,50}, -{65,37,51}, -{65,37,52}, -{65,37,53}, -{65,37,54}, -{65,37,55}, -{65,37,56}, -{65,37,57}, -{65,37,58}, -{65,37,59}, -{65,37,60}, -{65,37,61}, -{65,37,62}, -{65,37,63}, -{65,37,64}, -{65,37,65}, -{65,37,66}, -{65,37,67}, -{65,37,68}, -{65,37,69}, -{65,37,70}, -{65,37,71}, -{65,38,-54}, -{65,38,-53}, -{65,38,-52}, -{65,38,-51}, -{65,38,-50}, -{65,38,-49}, -{65,38,-48}, -{65,38,-47}, -{65,38,-46}, -{65,38,-45}, -{65,38,-44}, -{65,38,-43}, -{65,38,-42}, -{65,38,-41}, -{65,38,-40}, -{65,38,-39}, -{65,38,-38}, -{65,38,-37}, -{65,38,-36}, -{65,38,-35}, -{65,38,-34}, -{65,38,-33}, -{65,38,-32}, -{65,38,-31}, -{65,38,-30}, -{65,38,-29}, -{65,38,-28}, -{65,38,-27}, -{65,38,-26}, -{65,38,-25}, -{65,38,-24}, -{65,38,-23}, -{65,38,-22}, -{65,38,-21}, -{65,38,-20}, -{65,38,-19}, -{65,38,-18}, -{65,38,-17}, -{65,38,-16}, -{65,38,-15}, -{65,38,-14}, -{65,38,-13}, -{65,38,-12}, -{65,38,-11}, -{65,38,-10}, -{65,38,-9}, -{65,38,-8}, -{65,38,-7}, -{65,38,-6}, -{65,38,-5}, -{65,38,-4}, -{65,38,-3}, -{65,38,-2}, -{65,38,-1}, -{65,38,0}, -{65,38,1}, -{65,38,2}, -{65,38,3}, -{65,38,4}, -{65,38,5}, -{65,38,6}, -{65,38,7}, -{65,38,8}, -{65,38,9}, -{65,38,10}, -{65,38,11}, -{65,38,12}, -{65,38,13}, -{65,38,14}, -{65,38,15}, -{65,38,16}, -{65,38,17}, -{65,38,18}, -{65,38,19}, -{65,38,20}, -{65,38,21}, -{65,38,22}, -{65,38,23}, -{65,38,24}, -{65,38,25}, -{65,38,26}, -{65,38,27}, -{65,38,28}, -{65,38,29}, -{65,38,30}, -{65,38,31}, -{65,38,32}, -{65,38,33}, -{65,38,34}, -{65,38,35}, -{65,38,36}, -{65,38,37}, -{65,38,38}, -{65,38,39}, -{65,38,40}, -{65,38,41}, -{65,38,42}, -{65,38,43}, -{65,38,44}, -{65,38,45}, -{65,38,46}, -{65,38,47}, -{65,38,48}, -{65,38,49}, -{65,38,50}, -{65,38,51}, -{65,38,52}, -{65,38,53}, -{65,38,54}, -{65,38,55}, -{65,38,56}, -{65,38,57}, -{65,38,58}, -{65,38,59}, -{65,38,60}, -{65,38,61}, -{65,38,62}, -{65,38,63}, -{65,38,64}, -{65,38,65}, -{65,38,66}, -{65,38,67}, -{65,38,68}, -{65,38,69}, -{65,38,70}, -{65,38,71}, -{65,38,72}, -{65,39,-54}, -{65,39,-53}, -{65,39,-52}, -{65,39,-51}, -{65,39,-50}, -{65,39,-49}, -{65,39,-48}, -{65,39,-47}, -{65,39,-46}, -{65,39,-45}, -{65,39,-44}, -{65,39,-43}, -{65,39,-42}, -{65,39,-41}, -{65,39,-40}, -{65,39,-39}, -{65,39,-38}, -{65,39,-37}, -{65,39,-36}, -{65,39,-35}, -{65,39,-34}, -{65,39,-33}, -{65,39,-32}, -{65,39,-31}, -{65,39,-30}, -{65,39,-29}, -{65,39,-28}, -{65,39,-27}, -{65,39,-26}, -{65,39,-25}, -{65,39,-24}, -{65,39,-23}, -{65,39,-22}, -{65,39,-21}, -{65,39,-20}, -{65,39,-19}, -{65,39,-18}, -{65,39,-17}, -{65,39,-16}, -{65,39,-15}, -{65,39,-14}, -{65,39,-13}, -{65,39,-12}, -{65,39,-11}, -{65,39,-10}, -{65,39,-9}, -{65,39,-8}, -{65,39,-7}, -{65,39,-6}, -{65,39,-5}, -{65,39,-4}, -{65,39,-3}, -{65,39,-2}, -{65,39,-1}, -{65,39,0}, -{65,39,1}, -{65,39,2}, -{65,39,3}, -{65,39,4}, -{65,39,5}, -{65,39,6}, -{65,39,7}, -{65,39,8}, -{65,39,9}, -{65,39,10}, -{65,39,11}, -{65,39,12}, -{65,39,13}, -{65,39,14}, -{65,39,15}, -{65,39,16}, -{65,39,17}, -{65,39,18}, -{65,39,19}, -{65,39,20}, -{65,39,21}, -{65,39,22}, -{65,39,23}, -{65,39,24}, -{65,39,25}, -{65,39,26}, -{65,39,27}, -{65,39,28}, -{65,39,29}, -{65,39,30}, -{65,39,31}, -{65,39,32}, -{65,39,33}, -{65,39,34}, -{65,39,35}, -{65,39,36}, -{65,39,37}, -{65,39,38}, -{65,39,39}, -{65,39,40}, -{65,39,41}, -{65,39,42}, -{65,39,43}, -{65,39,44}, -{65,39,45}, -{65,39,46}, -{65,39,47}, -{65,39,48}, -{65,39,49}, -{65,39,50}, -{65,39,51}, -{65,39,52}, -{65,39,53}, -{65,39,54}, -{65,39,55}, -{65,39,56}, -{65,39,57}, -{65,39,58}, -{65,39,59}, -{65,39,60}, -{65,39,61}, -{65,39,62}, -{65,39,63}, -{65,39,64}, -{65,39,65}, -{65,39,66}, -{65,39,67}, -{65,39,68}, -{65,39,69}, -{65,39,70}, -{65,39,71}, -{65,39,72}, -{65,40,-54}, -{65,40,-53}, -{65,40,-52}, -{65,40,-51}, -{65,40,-50}, -{65,40,-49}, -{65,40,-48}, -{65,40,-47}, -{65,40,-46}, -{65,40,-45}, -{65,40,-44}, -{65,40,-43}, -{65,40,-42}, -{65,40,-41}, -{65,40,-40}, -{65,40,-39}, -{65,40,-38}, -{65,40,-37}, -{65,40,-36}, -{65,40,-35}, -{65,40,-34}, -{65,40,-33}, -{65,40,-32}, -{65,40,-31}, -{65,40,-30}, -{65,40,-29}, -{65,40,-28}, -{65,40,-27}, -{65,40,-26}, -{65,40,-25}, -{65,40,-24}, -{65,40,-23}, -{65,40,-22}, -{65,40,-21}, -{65,40,-20}, -{65,40,-19}, -{65,40,-18}, -{65,40,-17}, -{65,40,-16}, -{65,40,-15}, -{65,40,-14}, -{65,40,-13}, -{65,40,-12}, -{65,40,-11}, -{65,40,-10}, -{65,40,-9}, -{65,40,-8}, -{65,40,-7}, -{65,40,-6}, -{65,40,-5}, -{65,40,-4}, -{65,40,-3}, -{65,40,-2}, -{65,40,-1}, -{65,40,0}, -{65,40,1}, -{65,40,2}, -{65,40,3}, -{65,40,4}, -{65,40,5}, -{65,40,6}, -{65,40,7}, -{65,40,8}, -{65,40,9}, -{65,40,10}, -{65,40,11}, -{65,40,12}, -{65,40,13}, -{65,40,14}, -{65,40,15}, -{65,40,16}, -{65,40,17}, -{65,40,18}, -{65,40,19}, -{65,40,20}, -{65,40,21}, -{65,40,22}, -{65,40,23}, -{65,40,24}, -{65,40,25}, -{65,40,26}, -{65,40,27}, -{65,40,28}, -{65,40,29}, -{65,40,30}, -{65,40,31}, -{65,40,32}, -{65,40,33}, -{65,40,34}, -{65,40,35}, -{65,40,36}, -{65,40,37}, -{65,40,38}, -{65,40,39}, -{65,40,40}, -{65,40,41}, -{65,40,42}, -{65,40,43}, -{65,40,44}, -{65,40,45}, -{65,40,46}, -{65,40,47}, -{65,40,48}, -{65,40,49}, -{65,40,50}, -{65,40,51}, -{65,40,52}, -{65,40,53}, -{65,40,54}, -{65,40,55}, -{65,40,56}, -{65,40,57}, -{65,40,58}, -{65,40,59}, -{65,40,60}, -{65,40,61}, -{65,40,62}, -{65,40,63}, -{65,40,64}, -{65,40,65}, -{65,40,66}, -{65,40,67}, -{65,40,68}, -{65,40,69}, -{65,40,70}, -{65,40,71}, -{65,40,72}, -{65,41,-54}, -{65,41,-53}, -{65,41,-52}, -{65,41,-51}, -{65,41,-50}, -{65,41,-49}, -{65,41,-48}, -{65,41,-47}, -{65,41,-46}, -{65,41,-45}, -{65,41,-44}, -{65,41,-43}, -{65,41,-42}, -{65,41,-41}, -{65,41,-40}, -{65,41,-39}, -{65,41,-38}, -{65,41,-37}, -{65,41,-36}, -{65,41,-35}, -{65,41,-34}, -{65,41,-33}, -{65,41,-32}, -{65,41,-31}, -{65,41,-30}, -{65,41,-29}, -{65,41,-28}, -{65,41,-27}, -{65,41,-26}, -{65,41,-25}, -{65,41,-24}, -{65,41,-23}, -{65,41,-22}, -{65,41,-21}, -{65,41,-20}, -{65,41,-19}, -{65,41,-18}, -{65,41,-17}, -{65,41,-16}, -{65,41,-15}, -{65,41,-14}, -{65,41,-13}, -{65,41,-12}, -{65,41,-11}, -{65,41,-10}, -{65,41,-9}, -{65,41,-8}, -{65,41,-7}, -{65,41,-6}, -{65,41,-5}, -{65,41,-4}, -{65,41,-3}, -{65,41,-2}, -{65,41,-1}, -{65,41,0}, -{65,41,1}, -{65,41,2}, -{65,41,3}, -{65,41,4}, -{65,41,5}, -{65,41,6}, -{65,41,7}, -{65,41,8}, -{65,41,9}, -{65,41,10}, -{65,41,11}, -{65,41,12}, -{65,41,13}, -{65,41,14}, -{65,41,15}, -{65,41,16}, -{65,41,17}, -{65,41,18}, -{65,41,19}, -{65,41,20}, -{65,41,21}, -{65,41,22}, -{65,41,23}, -{65,41,24}, -{65,41,25}, -{65,41,26}, -{65,41,27}, -{65,41,28}, -{65,41,29}, -{65,41,30}, -{65,41,31}, -{65,41,32}, -{65,41,33}, -{65,41,34}, -{65,41,35}, -{65,41,36}, -{65,41,37}, -{65,41,38}, -{65,41,39}, -{65,41,40}, -{65,41,41}, -{65,41,42}, -{65,41,43}, -{65,41,44}, -{65,41,45}, -{65,41,46}, -{65,41,47}, -{65,41,48}, -{65,41,49}, -{65,41,50}, -{65,41,51}, -{65,41,52}, -{65,41,53}, -{65,41,54}, -{65,41,55}, -{65,41,56}, -{65,41,57}, -{65,41,58}, -{65,41,59}, -{65,41,60}, -{65,41,61}, -{65,41,62}, -{65,41,63}, -{65,41,64}, -{65,41,65}, -{65,41,66}, -{65,41,67}, -{65,41,68}, -{65,41,69}, -{65,41,70}, -{65,41,71}, -{65,41,72}, -{65,42,-54}, -{65,42,-53}, -{65,42,-52}, -{65,42,-51}, -{65,42,-50}, -{65,42,-49}, -{65,42,-48}, -{65,42,-47}, -{65,42,-46}, -{65,42,-45}, -{65,42,-44}, -{65,42,-43}, -{65,42,-42}, -{65,42,-41}, -{65,42,-40}, -{65,42,-39}, -{65,42,-38}, -{65,42,-37}, -{65,42,-36}, -{65,42,-35}, -{65,42,-34}, -{65,42,-33}, -{65,42,-32}, -{65,42,-31}, -{65,42,-30}, -{65,42,-29}, -{65,42,-28}, -{65,42,-27}, -{65,42,-26}, -{65,42,-25}, -{65,42,-24}, -{65,42,-23}, -{65,42,-22}, -{65,42,-21}, -{65,42,-20}, -{65,42,-19}, -{65,42,-18}, -{65,42,-17}, -{65,42,-16}, -{65,42,-15}, -{65,42,-14}, -{65,42,-13}, -{65,42,-12}, -{65,42,-11}, -{65,42,-10}, -{65,42,-9}, -{65,42,-8}, -{65,42,-7}, -{65,42,-6}, -{65,42,-5}, -{65,42,-4}, -{65,42,-3}, -{65,42,-2}, -{65,42,-1}, -{65,42,0}, -{65,42,1}, -{65,42,2}, -{65,42,3}, -{65,42,4}, -{65,42,5}, -{65,42,6}, -{65,42,7}, -{65,42,8}, -{65,42,9}, -{65,42,10}, -{65,42,11}, -{65,42,12}, -{65,42,13}, -{65,42,14}, -{65,42,15}, -{65,42,16}, -{65,42,17}, -{65,42,18}, -{65,42,19}, -{65,42,20}, -{65,42,21}, -{65,42,22}, -{65,42,23}, -{65,42,24}, -{65,42,25}, -{65,42,26}, -{65,42,27}, -{65,42,28}, -{65,42,29}, -{65,42,30}, -{65,42,31}, -{65,42,32}, -{65,42,33}, -{65,42,34}, -{65,42,35}, -{65,42,36}, -{65,42,37}, -{65,42,38}, -{65,42,39}, -{65,42,40}, -{65,42,41}, -{65,42,42}, -{65,42,43}, -{65,42,44}, -{65,42,45}, -{65,42,46}, -{65,42,47}, -{65,42,48}, -{65,42,49}, -{65,42,50}, -{65,42,51}, -{65,42,52}, -{65,42,53}, -{65,42,54}, -{65,42,55}, -{65,42,56}, -{65,42,57}, -{65,42,58}, -{65,42,59}, -{65,42,60}, -{65,42,61}, -{65,42,62}, -{65,42,63}, -{65,42,64}, -{65,42,65}, -{65,42,66}, -{65,42,67}, -{65,42,68}, -{65,42,69}, -{65,42,70}, -{65,42,71}, -{65,42,72}, -{65,43,-54}, -{65,43,-53}, -{65,43,-52}, -{65,43,-51}, -{65,43,-50}, -{65,43,-49}, -{65,43,-48}, -{65,43,-47}, -{65,43,-46}, -{65,43,-45}, -{65,43,-44}, -{65,43,-43}, -{65,43,-42}, -{65,43,-41}, -{65,43,-40}, -{65,43,-39}, -{65,43,-38}, -{65,43,-37}, -{65,43,-36}, -{65,43,-35}, -{65,43,-34}, -{65,43,-33}, -{65,43,-32}, -{65,43,-31}, -{65,43,-30}, -{65,43,-29}, -{65,43,-28}, -{65,43,-27}, -{65,43,-26}, -{65,43,-25}, -{65,43,-24}, -{65,43,-23}, -{65,43,-22}, -{65,43,-21}, -{65,43,-20}, -{65,43,-19}, -{65,43,-18}, -{65,43,-17}, -{65,43,-16}, -{65,43,-15}, -{65,43,-14}, -{65,43,-13}, -{65,43,-12}, -{65,43,-11}, -{65,43,-10}, -{65,43,-9}, -{65,43,-8}, -{65,43,-7}, -{65,43,-6}, -{65,43,-5}, -{65,43,-4}, -{65,43,-3}, -{65,43,-2}, -{65,43,-1}, -{65,43,0}, -{65,43,1}, -{65,43,2}, -{65,43,3}, -{65,43,4}, -{65,43,5}, -{65,43,6}, -{65,43,7}, -{65,43,8}, -{65,43,9}, -{65,43,10}, -{65,43,11}, -{65,43,12}, -{65,43,13}, -{65,43,14}, -{65,43,15}, -{65,43,16}, -{65,43,17}, -{65,43,18}, -{65,43,19}, -{65,43,20}, -{65,43,21}, -{65,43,22}, -{65,43,23}, -{65,43,24}, -{65,43,25}, -{65,43,26}, -{65,43,27}, -{65,43,28}, -{65,43,29}, -{65,43,30}, -{65,43,31}, -{65,43,32}, -{65,43,33}, -{65,43,34}, -{65,43,35}, -{65,43,36}, -{65,43,37}, -{65,43,38}, -{65,43,39}, -{65,43,40}, -{65,43,41}, -{65,43,42}, -{65,43,43}, -{65,43,44}, -{65,43,45}, -{65,43,46}, -{65,43,47}, -{65,43,48}, -{65,43,49}, -{65,43,50}, -{65,43,51}, -{65,43,52}, -{65,43,53}, -{65,43,54}, -{65,43,55}, -{65,43,56}, -{65,43,57}, -{65,43,58}, -{65,43,59}, -{65,43,60}, -{65,43,61}, -{65,43,62}, -{65,43,63}, -{65,43,64}, -{65,43,65}, -{65,43,66}, -{65,43,67}, -{65,43,68}, -{65,43,69}, -{65,43,70}, -{65,43,71}, -{65,43,72}, -{65,44,-54}, -{65,44,-53}, -{65,44,-52}, -{65,44,-51}, -{65,44,-50}, -{65,44,-49}, -{65,44,-48}, -{65,44,-47}, -{65,44,-46}, -{65,44,-45}, -{65,44,-44}, -{65,44,-43}, -{65,44,-42}, -{65,44,-41}, -{65,44,-40}, -{65,44,-39}, -{65,44,-38}, -{65,44,-37}, -{65,44,-36}, -{65,44,-35}, -{65,44,-34}, -{65,44,-33}, -{65,44,-32}, -{65,44,-31}, -{65,44,-30}, -{65,44,-29}, -{65,44,-28}, -{65,44,-27}, -{65,44,-26}, -{65,44,-25}, -{65,44,-24}, -{65,44,-23}, -{65,44,-22}, -{65,44,-21}, -{65,44,-20}, -{65,44,-19}, -{65,44,-18}, -{65,44,-17}, -{65,44,-16}, -{65,44,-15}, -{65,44,-14}, -{65,44,-13}, -{65,44,-12}, -{65,44,-11}, -{65,44,-10}, -{65,44,-9}, -{65,44,-8}, -{65,44,-7}, -{65,44,-6}, -{65,44,-5}, -{65,44,-4}, -{65,44,-3}, -{65,44,-2}, -{65,44,-1}, -{65,44,0}, -{65,44,1}, -{65,44,2}, -{65,44,3}, -{65,44,4}, -{65,44,5}, -{65,44,6}, -{65,44,7}, -{65,44,8}, -{65,44,9}, -{65,44,10}, -{65,44,11}, -{65,44,12}, -{65,44,13}, -{65,44,14}, -{65,44,15}, -{65,44,16}, -{65,44,17}, -{65,44,18}, -{65,44,19}, -{65,44,20}, -{65,44,21}, -{65,44,22}, -{65,44,23}, -{65,44,24}, -{65,44,25}, -{65,44,26}, -{65,44,27}, -{65,44,28}, -{65,44,29}, -{65,44,30}, -{65,44,31}, -{65,44,32}, -{65,44,33}, -{65,44,34}, -{65,44,35}, -{65,44,36}, -{65,44,37}, -{65,44,38}, -{65,44,39}, -{65,44,40}, -{65,44,41}, -{65,44,42}, -{65,44,43}, -{65,44,44}, -{65,44,45}, -{65,44,46}, -{65,44,47}, -{65,44,48}, -{65,44,49}, -{65,44,50}, -{65,44,51}, -{65,44,52}, -{65,44,53}, -{65,44,54}, -{65,44,55}, -{65,44,56}, -{65,44,57}, -{65,44,58}, -{65,44,59}, -{65,44,60}, -{65,44,61}, -{65,44,62}, -{65,44,63}, -{65,44,64}, -{65,44,65}, -{65,44,66}, -{65,44,67}, -{65,44,68}, -{65,44,69}, -{65,44,70}, -{65,44,71}, -{65,44,72}, -{65,45,-54}, -{65,45,-53}, -{65,45,-52}, -{65,45,-51}, -{65,45,-50}, -{65,45,-49}, -{65,45,-48}, -{65,45,-47}, -{65,45,-46}, -{65,45,-45}, -{65,45,-44}, -{65,45,-43}, -{65,45,-42}, -{65,45,-41}, -{65,45,-40}, -{65,45,-39}, -{65,45,-38}, -{65,45,-37}, -{65,45,-36}, -{65,45,-35}, -{65,45,-34}, -{65,45,-33}, -{65,45,-32}, -{65,45,-31}, -{65,45,-30}, -{65,45,-29}, -{65,45,-28}, -{65,45,-27}, -{65,45,-26}, -{65,45,-25}, -{65,45,-24}, -{65,45,-23}, -{65,45,-22}, -{65,45,-21}, -{65,45,-20}, -{65,45,-19}, -{65,45,-18}, -{65,45,-17}, -{65,45,-16}, -{65,45,-15}, -{65,45,-14}, -{65,45,-13}, -{65,45,-12}, -{65,45,-11}, -{65,45,-10}, -{65,45,-9}, -{65,45,-8}, -{65,45,-7}, -{65,45,-6}, -{65,45,-5}, -{65,45,-4}, -{65,45,-3}, -{65,45,-2}, -{65,45,-1}, -{65,45,0}, -{65,45,1}, -{65,45,2}, -{65,45,3}, -{65,45,4}, -{65,45,5}, -{65,45,6}, -{65,45,7}, -{65,45,8}, -{65,45,9}, -{65,45,10}, -{65,45,11}, -{65,45,12}, -{65,45,13}, -{65,45,14}, -{65,45,15}, -{65,45,16}, -{65,45,17}, -{65,45,18}, -{65,45,19}, -{65,45,20}, -{65,45,21}, -{65,45,22}, -{65,45,23}, -{65,45,24}, -{65,45,25}, -{65,45,26}, -{65,45,27}, -{65,45,28}, -{65,45,29}, -{65,45,30}, -{65,45,31}, -{65,45,32}, -{65,45,33}, -{65,45,34}, -{65,45,35}, -{65,45,36}, -{65,45,37}, -{65,45,38}, -{65,45,39}, -{65,45,40}, -{65,45,41}, -{65,45,42}, -{65,45,43}, -{65,45,44}, -{65,45,45}, -{65,45,46}, -{65,45,47}, -{65,45,48}, -{65,45,49}, -{65,45,50}, -{65,45,51}, -{65,45,52}, -{65,45,53}, -{65,45,54}, -{65,45,55}, -{65,45,56}, -{65,45,57}, -{65,45,58}, -{65,45,59}, -{65,45,60}, -{65,45,61}, -{65,45,62}, -{65,45,63}, -{65,45,64}, -{65,45,65}, -{65,45,66}, -{65,45,67}, -{65,45,68}, -{65,45,69}, -{65,45,70}, -{65,45,71}, -{65,45,72}, -{65,46,-54}, -{65,46,-53}, -{65,46,-52}, -{65,46,-51}, -{65,46,-50}, -{65,46,-49}, -{65,46,-48}, -{65,46,-47}, -{65,46,-46}, -{65,46,-45}, -{65,46,-44}, -{65,46,-43}, -{65,46,-42}, -{65,46,-41}, -{65,46,-40}, -{65,46,-39}, -{65,46,-38}, -{65,46,-37}, -{65,46,-36}, -{65,46,-35}, -{65,46,-34}, -{65,46,-33}, -{65,46,-32}, -{65,46,-31}, -{65,46,-30}, -{65,46,-29}, -{65,46,-28}, -{65,46,-27}, -{65,46,-26}, -{65,46,-25}, -{65,46,-24}, -{65,46,-23}, -{65,46,-22}, -{65,46,-21}, -{65,46,-20}, -{65,46,-19}, -{65,46,-18}, -{65,46,-17}, -{65,46,-16}, -{65,46,-15}, -{65,46,-14}, -{65,46,-13}, -{65,46,-12}, -{65,46,-11}, -{65,46,-10}, -{65,46,-9}, -{65,46,-8}, -{65,46,-7}, -{65,46,-6}, -{65,46,-5}, -{65,46,-4}, -{65,46,-3}, -{65,46,-2}, -{65,46,-1}, -{65,46,0}, -{65,46,1}, -{65,46,2}, -{65,46,3}, -{65,46,4}, -{65,46,5}, -{65,46,6}, -{65,46,7}, -{65,46,8}, -{65,46,9}, -{65,46,10}, -{65,46,11}, -{65,46,12}, -{65,46,13}, -{65,46,14}, -{65,46,15}, -{65,46,16}, -{65,46,17}, -{65,46,18}, -{65,46,19}, -{65,46,20}, -{65,46,21}, -{65,46,22}, -{65,46,23}, -{65,46,24}, -{65,46,25}, -{65,46,26}, -{65,46,27}, -{65,46,28}, -{65,46,29}, -{65,46,30}, -{65,46,31}, -{65,46,32}, -{65,46,33}, -{65,46,34}, -{65,46,35}, -{65,46,36}, -{65,46,37}, -{65,46,38}, -{65,46,39}, -{65,46,40}, -{65,46,41}, -{65,46,42}, -{65,46,43}, -{65,46,44}, -{65,46,45}, -{65,46,46}, -{65,46,47}, -{65,46,48}, -{65,46,49}, -{65,46,50}, -{65,46,51}, -{65,46,52}, -{65,46,53}, -{65,46,54}, -{65,46,55}, -{65,46,56}, -{65,46,57}, -{65,46,58}, -{65,46,59}, -{65,46,60}, -{65,46,61}, -{65,46,62}, -{65,46,63}, -{65,46,64}, -{65,46,65}, -{65,46,66}, -{65,46,67}, -{65,46,68}, -{65,46,69}, -{65,46,70}, -{65,46,71}, -{65,46,72}, -{65,47,-54}, -{65,47,-53}, -{65,47,-52}, -{65,47,-51}, -{65,47,-50}, -{65,47,-49}, -{65,47,-48}, -{65,47,-47}, -{65,47,-46}, -{65,47,-45}, -{65,47,-44}, -{65,47,-43}, -{65,47,-42}, -{65,47,-41}, -{65,47,-40}, -{65,47,-39}, -{65,47,-38}, -{65,47,-37}, -{65,47,-36}, -{65,47,-35}, -{65,47,-34}, -{65,47,-33}, -{65,47,-32}, -{65,47,-31}, -{65,47,-30}, -{65,47,-29}, -{65,47,-28}, -{65,47,-27}, -{65,47,-26}, -{65,47,-25}, -{65,47,-24}, -{65,47,-23}, -{65,47,-22}, -{65,47,-21}, -{65,47,-20}, -{65,47,-19}, -{65,47,-18}, -{65,47,-17}, -{65,47,-16}, -{65,47,-15}, -{65,47,-14}, -{65,47,-13}, -{65,47,-12}, -{65,47,-11}, -{65,47,-10}, -{65,47,-9}, -{65,47,-8}, -{65,47,-7}, -{65,47,-6}, -{65,47,-5}, -{65,47,-4}, -{65,47,-3}, -{65,47,-2}, -{65,47,-1}, -{65,47,0}, -{65,47,1}, -{65,47,2}, -{65,47,3}, -{65,47,4}, -{65,47,5}, -{65,47,6}, -{65,47,7}, -{65,47,8}, -{65,47,9}, -{65,47,10}, -{65,47,11}, -{65,47,12}, -{65,47,13}, -{65,47,14}, -{65,47,15}, -{65,47,16}, -{65,47,17}, -{65,47,18}, -{65,47,19}, -{65,47,20}, -{65,47,21}, -{65,47,22}, -{65,47,23}, -{65,47,24}, -{65,47,25}, -{65,47,26}, -{65,47,27}, -{65,47,28}, -{65,47,29}, -{65,47,30}, -{65,47,31}, -{65,47,32}, -{65,47,33}, -{65,47,34}, -{65,47,35}, -{65,47,36}, -{65,47,37}, -{65,47,38}, -{65,47,39}, -{65,47,40}, -{65,47,41}, -{65,47,42}, -{65,47,43}, -{65,47,44}, -{65,47,45}, -{65,47,46}, -{65,47,47}, -{65,47,48}, -{65,47,49}, -{65,47,50}, -{65,47,51}, -{65,47,52}, -{65,47,53}, -{65,47,54}, -{65,47,55}, -{65,47,56}, -{65,47,57}, -{65,47,58}, -{65,47,59}, -{65,47,60}, -{65,47,61}, -{65,47,62}, -{65,47,63}, -{65,47,64}, -{65,47,65}, -{65,47,66}, -{65,47,67}, -{65,47,68}, -{65,47,69}, -{65,47,70}, -{65,47,71}, -{65,47,72}, -{65,48,-54}, -{65,48,-53}, -{65,48,-52}, -{65,48,-51}, -{65,48,-50}, -{65,48,-49}, -{65,48,-48}, -{65,48,-47}, -{65,48,-46}, -{65,48,-45}, -{65,48,-44}, -{65,48,-43}, -{65,48,-42}, -{65,48,-41}, -{65,48,-40}, -{65,48,-39}, -{65,48,-38}, -{65,48,-37}, -{65,48,-36}, -{65,48,-35}, -{65,48,-34}, -{65,48,-33}, -{65,48,-32}, -{65,48,-31}, -{65,48,-30}, -{65,48,-29}, -{65,48,-28}, -{65,48,-27}, -{65,48,-26}, -{65,48,-25}, -{65,48,-24}, -{65,48,-23}, -{65,48,-22}, -{65,48,-21}, -{65,48,-20}, -{65,48,-19}, -{65,48,-18}, -{65,48,-17}, -{65,48,-16}, -{65,48,-15}, -{65,48,-14}, -{65,48,-13}, -{65,48,-12}, -{65,48,-11}, -{65,48,-10}, -{65,48,-9}, -{65,48,-8}, -{65,48,-7}, -{65,48,-6}, -{65,48,-5}, -{65,48,-4}, -{65,48,-3}, -{65,48,-2}, -{65,48,-1}, -{65,48,0}, -{65,48,1}, -{65,48,2}, -{65,48,3}, -{65,48,4}, -{65,48,5}, -{65,48,6}, -{65,48,7}, -{65,48,8}, -{65,48,9}, -{65,48,10}, -{65,48,11}, -{65,48,12}, -{65,48,13}, -{65,48,14}, -{65,48,15}, -{65,48,16}, -{65,48,17}, -{65,48,18}, -{65,48,19}, -{65,48,20}, -{65,48,21}, -{65,48,22}, -{65,48,23}, -{65,48,24}, -{65,48,25}, -{65,48,26}, -{65,48,27}, -{65,48,28}, -{65,48,29}, -{65,48,30}, -{65,48,31}, -{65,48,32}, -{65,48,33}, -{65,48,34}, -{65,48,35}, -{65,48,36}, -{65,48,37}, -{65,48,38}, -{65,48,39}, -{65,48,40}, -{65,48,41}, -{65,48,42}, -{65,48,43}, -{65,48,44}, -{65,48,45}, -{65,48,46}, -{65,48,47}, -{65,48,48}, -{65,48,49}, -{65,48,50}, -{65,48,51}, -{65,48,52}, -{65,48,53}, -{65,48,54}, -{65,48,55}, -{65,48,56}, -{65,48,57}, -{65,48,58}, -{65,48,59}, -{65,48,60}, -{65,48,61}, -{65,48,62}, -{65,48,63}, -{65,48,64}, -{65,48,65}, -{65,48,66}, -{65,48,67}, -{65,48,68}, -{65,48,69}, -{65,48,70}, -{65,48,71}, -{65,48,72}, -{65,48,73}, -{65,49,-54}, -{65,49,-53}, -{65,49,-52}, -{65,49,-51}, -{65,49,-50}, -{65,49,-49}, -{65,49,-48}, -{65,49,-47}, -{65,49,-46}, -{65,49,-45}, -{65,49,-44}, -{65,49,-43}, -{65,49,-42}, -{65,49,-41}, -{65,49,-40}, -{65,49,-39}, -{65,49,-38}, -{65,49,-37}, -{65,49,-36}, -{65,49,-35}, -{65,49,-34}, -{65,49,-33}, -{65,49,-32}, -{65,49,-31}, -{65,49,-30}, -{65,49,-29}, -{65,49,-28}, -{65,49,-27}, -{65,49,-26}, -{65,49,-25}, -{65,49,-24}, -{65,49,-23}, -{65,49,-22}, -{65,49,-21}, -{65,49,-20}, -{65,49,-19}, -{65,49,-18}, -{65,49,-17}, -{65,49,-16}, -{65,49,-15}, -{65,49,-14}, -{65,49,-13}, -{65,49,-12}, -{65,49,-11}, -{65,49,-10}, -{65,49,-9}, -{65,49,-8}, -{65,49,-7}, -{65,49,-6}, -{65,49,-5}, -{65,49,-4}, -{65,49,-3}, -{65,49,-2}, -{65,49,-1}, -{65,49,0}, -{65,49,1}, -{65,49,2}, -{65,49,3}, -{65,49,4}, -{65,49,5}, -{65,49,6}, -{65,49,7}, -{65,49,8}, -{65,49,9}, -{65,49,10}, -{65,49,11}, -{65,49,12}, -{65,49,13}, -{65,49,14}, -{65,49,15}, -{65,49,16}, -{65,49,17}, -{65,49,18}, -{65,49,19}, -{65,49,20}, -{65,49,21}, -{65,49,22}, -{65,49,23}, -{65,49,24}, -{65,49,25}, -{65,49,26}, -{65,49,27}, -{65,49,28}, -{65,49,29}, -{65,49,30}, -{65,49,31}, -{65,49,32}, -{65,49,33}, -{65,49,34}, -{65,49,35}, -{65,49,36}, -{65,49,37}, -{65,49,38}, -{65,49,39}, -{65,49,40}, -{65,49,41}, -{65,49,42}, -{65,49,43}, -{65,49,44}, -{65,49,45}, -{65,49,46}, -{65,49,47}, -{65,49,48}, -{65,49,49}, -{65,49,50}, -{65,49,51}, -{65,49,52}, -{65,49,53}, -{65,49,54}, -{65,49,55}, -{65,49,56}, -{65,49,57}, -{65,49,58}, -{65,49,59}, -{65,49,60}, -{65,49,61}, -{65,49,62}, -{65,49,63}, -{65,49,64}, -{65,50,-54}, -{65,50,-53}, -{65,50,-52}, -{65,50,-51}, -{65,50,-50}, -{65,50,-49}, -{65,50,-48}, -{65,50,-47}, -{65,50,-46}, -{65,50,-45}, -{65,50,-44}, -{65,50,-43}, -{65,50,-42}, -{65,50,-41}, -{65,50,-40}, -{65,50,-39}, -{65,50,-38}, -{65,50,-37}, -{65,50,-36}, -{65,50,-35}, -{65,50,-34}, -{65,50,-33}, -{65,50,-32}, -{65,50,-31}, -{65,50,-30}, -{65,50,-29}, -{65,50,-28}, -{65,50,-27}, -{65,50,-26}, -{65,50,-25}, -{65,50,-24}, -{65,50,-23}, -{65,50,-22}, -{65,50,-21}, -{65,50,-20}, -{65,50,-19}, -{65,50,-18}, -{65,50,-17}, -{65,50,-16}, -{65,50,-15}, -{65,50,-14}, -{65,50,-13}, -{65,50,-12}, -{65,50,-11}, -{65,50,-10}, -{65,50,-9}, -{65,50,-8}, -{65,50,-7}, -{65,50,-6}, -{65,50,-5}, -{65,50,-4}, -{65,50,-3}, -{65,50,-2}, -{65,50,-1}, -{65,50,0}, -{65,50,1}, -{65,50,2}, -{65,50,3}, -{65,50,4}, -{65,50,5}, -{65,50,6}, -{65,50,7}, -{65,50,8}, -{65,50,9}, -{65,50,10}, -{65,50,11}, -{65,50,12}, -{65,50,13}, -{65,50,14}, -{65,50,15}, -{65,50,16}, -{65,50,17}, -{65,50,18}, -{65,50,19}, -{65,50,20}, -{65,50,21}, -{65,50,22}, -{65,50,23}, -{65,50,24}, -{65,50,25}, -{65,50,26}, -{65,50,27}, -{65,50,28}, -{65,50,29}, -{65,50,30}, -{65,50,31}, -{65,50,32}, -{65,50,33}, -{65,50,34}, -{65,50,35}, -{65,50,36}, -{65,50,37}, -{65,50,38}, -{65,50,39}, -{65,50,40}, -{65,50,41}, -{65,50,42}, -{65,50,43}, -{65,50,44}, -{65,50,45}, -{65,50,46}, -{65,50,47}, -{65,50,48}, -{65,50,49}, -{65,50,50}, -{65,50,51}, -{65,50,52}, -{65,50,53}, -{65,50,54}, -{65,50,55}, -{65,51,-53}, -{65,51,-52}, -{65,51,-51}, -{65,51,-50}, -{65,51,-49}, -{65,51,-48}, -{65,51,-47}, -{65,51,-46}, -{65,51,-45}, -{65,51,-44}, -{65,51,-43}, -{65,51,-42}, -{65,51,-41}, -{65,51,-40}, -{65,51,-39}, -{65,51,-38}, -{65,51,-37}, -{65,51,-36}, -{65,51,-35}, -{65,51,-34}, -{65,51,-33}, -{65,51,-32}, -{65,51,-31}, -{65,51,-30}, -{65,51,-29}, -{65,51,-28}, -{65,51,-27}, -{65,51,-26}, -{65,51,-25}, -{65,51,-24}, -{65,51,-23}, -{65,51,-22}, -{65,51,-21}, -{65,51,-20}, -{65,51,-19}, -{65,51,-18}, -{65,51,-17}, -{65,51,-16}, -{65,51,-15}, -{65,51,-14}, -{65,51,-13}, -{65,51,-12}, -{65,51,-11}, -{65,51,-10}, -{65,51,-9}, -{65,51,-8}, -{65,51,-7}, -{65,51,-6}, -{65,51,-5}, -{65,51,-4}, -{65,51,-3}, -{65,51,-2}, -{65,51,-1}, -{65,51,0}, -{65,51,1}, -{65,51,2}, -{65,51,3}, -{65,51,4}, -{65,51,5}, -{65,51,6}, -{65,51,7}, -{65,51,8}, -{65,51,9}, -{65,51,10}, -{65,51,11}, -{65,51,12}, -{65,51,13}, -{65,51,14}, -{65,51,15}, -{65,51,16}, -{65,51,17}, -{65,51,18}, -{65,51,19}, -{65,51,20}, -{65,51,21}, -{65,51,22}, -{65,51,23}, -{65,51,24}, -{65,51,25}, -{65,51,26}, -{65,51,27}, -{65,51,28}, -{65,51,29}, -{65,51,30}, -{65,51,31}, -{65,51,32}, -{65,51,33}, -{65,51,34}, -{65,51,35}, -{65,51,36}, -{65,51,37}, -{65,51,38}, -{65,51,39}, -{65,51,40}, -{65,51,41}, -{65,51,42}, -{65,51,43}, -{65,51,44}, -{65,51,45}, -{65,51,46}, -{65,51,47}, -{65,52,-53}, -{65,52,-52}, -{65,52,-51}, -{65,52,-50}, -{65,52,-49}, -{65,52,-48}, -{65,52,-47}, -{65,52,-46}, -{65,52,-45}, -{65,52,-44}, -{65,52,-43}, -{65,52,-42}, -{65,52,-41}, -{65,52,-40}, -{65,52,-39}, -{65,52,-38}, -{65,52,-37}, -{65,52,-36}, -{65,52,-35}, -{65,52,-34}, -{65,52,-33}, -{65,52,-32}, -{65,52,-31}, -{65,52,-30}, -{65,52,-29}, -{65,52,-28}, -{65,52,-27}, -{65,52,-26}, -{65,52,-25}, -{65,52,-24}, -{65,52,-23}, -{65,52,-22}, -{65,52,-21}, -{65,52,-20}, -{65,52,-19}, -{65,52,-18}, -{65,52,-17}, -{65,52,-16}, -{65,52,-15}, -{65,52,-14}, -{65,52,-13}, -{65,52,-12}, -{65,52,-11}, -{65,52,-10}, -{65,52,-9}, -{65,52,-8}, -{65,52,-7}, -{65,52,-6}, -{65,52,-5}, -{65,52,-4}, -{65,52,-3}, -{65,52,-2}, -{65,52,-1}, -{65,52,0}, -{65,52,1}, -{65,52,2}, -{65,52,3}, -{65,52,4}, -{65,52,5}, -{65,52,6}, -{65,52,7}, -{65,52,8}, -{65,52,9}, -{65,52,10}, -{65,52,11}, -{65,52,12}, -{65,52,13}, -{65,52,14}, -{65,52,15}, -{65,52,16}, -{65,52,17}, -{65,52,18}, -{65,52,19}, -{65,52,20}, -{65,52,21}, -{65,52,22}, -{65,52,23}, -{65,52,24}, -{65,52,25}, -{65,52,26}, -{65,52,27}, -{65,52,28}, -{65,52,29}, -{65,52,30}, -{65,52,31}, -{65,52,32}, -{65,52,33}, -{65,52,34}, -{65,52,35}, -{65,52,36}, -{65,52,37}, -{65,52,38}, -{65,52,39}, -{65,52,40}, -{65,52,41}, -{65,53,-53}, -{65,53,-52}, -{65,53,-51}, -{65,53,-50}, -{65,53,-49}, -{65,53,-48}, -{65,53,-47}, -{65,53,-46}, -{65,53,-45}, -{65,53,-44}, -{65,53,-43}, -{65,53,-42}, -{65,53,-41}, -{65,53,-40}, -{65,53,-39}, -{65,53,-38}, -{65,53,-37}, -{65,53,-36}, -{65,53,-35}, -{65,53,-34}, -{65,53,-33}, -{65,53,-32}, -{65,53,-31}, -{65,53,-30}, -{65,53,-29}, -{65,53,-28}, -{65,53,-27}, -{65,53,-26}, -{65,53,-25}, -{65,53,-24}, -{65,53,-23}, -{65,53,-22}, -{65,53,-21}, -{65,53,-20}, -{65,53,-19}, -{65,53,-18}, -{65,53,-17}, -{65,53,-16}, -{65,53,-15}, -{65,53,-14}, -{65,53,-13}, -{65,53,-12}, -{65,53,-11}, -{65,53,-10}, -{65,53,-9}, -{65,53,-8}, -{65,53,-7}, -{65,53,-6}, -{65,53,-5}, -{65,53,-4}, -{65,53,-3}, -{65,53,-2}, -{65,53,-1}, -{65,53,0}, -{65,53,1}, -{65,53,2}, -{65,53,3}, -{65,53,4}, -{65,53,5}, -{65,53,6}, -{65,53,7}, -{65,53,8}, -{65,53,9}, -{65,53,10}, -{65,53,11}, -{65,53,12}, -{65,53,13}, -{65,53,14}, -{65,53,15}, -{65,53,16}, -{65,53,17}, -{65,53,18}, -{65,53,19}, -{65,53,20}, -{65,53,21}, -{65,53,22}, -{65,53,23}, -{65,53,24}, -{65,53,25}, -{65,53,26}, -{65,53,27}, -{65,53,28}, -{65,53,29}, -{65,53,30}, -{65,53,31}, -{65,53,32}, -{65,53,33}, -{65,53,34}, -{65,53,35}, -{65,54,-53}, -{65,54,-52}, -{65,54,-51}, -{65,54,-50}, -{65,54,-49}, -{65,54,-48}, -{65,54,-47}, -{65,54,-46}, -{65,54,-45}, -{65,54,-44}, -{65,54,-43}, -{65,54,-42}, -{65,54,-41}, -{65,54,-40}, -{65,54,-39}, -{65,54,-38}, -{65,54,-37}, -{65,54,-36}, -{65,54,-35}, -{65,54,-34}, -{65,54,-33}, -{65,54,-32}, -{65,54,-31}, -{65,54,-30}, -{65,54,-29}, -{65,54,-28}, -{65,54,-27}, -{65,54,-26}, -{65,54,-25}, -{65,54,-24}, -{65,54,-23}, -{65,54,-22}, -{65,54,-21}, -{65,54,-20}, -{65,54,-19}, -{65,54,-18}, -{65,54,-17}, -{65,54,-16}, -{65,54,-15}, -{65,54,-14}, -{65,54,-13}, -{65,54,-12}, -{65,54,-11}, -{65,54,-10}, -{65,54,-9}, -{65,54,-8}, -{65,54,-7}, -{65,54,-6}, -{65,54,-5}, -{65,54,-4}, -{65,54,-3}, -{65,54,-2}, -{65,54,-1}, -{65,54,0}, -{65,54,1}, -{65,54,2}, -{65,54,3}, -{65,54,4}, -{65,54,5}, -{65,54,6}, -{65,54,7}, -{65,54,8}, -{65,54,9}, -{65,54,10}, -{65,54,11}, -{65,54,12}, -{65,54,13}, -{65,54,14}, -{65,54,15}, -{65,54,16}, -{65,54,17}, -{65,54,18}, -{65,54,19}, -{65,54,20}, -{65,54,21}, -{65,54,22}, -{65,54,23}, -{65,54,24}, -{65,54,25}, -{65,54,26}, -{65,54,27}, -{65,54,28}, -{65,54,29}, -{65,54,30}, -{65,55,-53}, -{65,55,-52}, -{65,55,-51}, -{65,55,-50}, -{65,55,-49}, -{65,55,-48}, -{65,55,-47}, -{65,55,-46}, -{65,55,-45}, -{65,55,-44}, -{65,55,-43}, -{65,55,-42}, -{65,55,-41}, -{65,55,-40}, -{65,55,-39}, -{65,55,-38}, -{65,55,-37}, -{65,55,-36}, -{65,55,-35}, -{65,55,-34}, -{65,55,-33}, -{65,55,-32}, -{65,55,-31}, -{65,55,-30}, -{65,55,-29}, -{65,55,-28}, -{65,55,-27}, -{65,55,-26}, -{65,55,-25}, -{65,55,-24}, -{65,55,-23}, -{65,55,-22}, -{65,55,-21}, -{65,55,-20}, -{65,55,-19}, -{65,55,-18}, -{65,55,-17}, -{65,55,-16}, -{65,55,-15}, -{65,55,-14}, -{65,55,-13}, -{65,55,-12}, -{65,55,-11}, -{65,55,-10}, -{65,55,-9}, -{65,55,-8}, -{65,55,-7}, -{65,55,-6}, -{65,55,-5}, -{65,55,-4}, -{65,55,-3}, -{65,55,-2}, -{65,55,-1}, -{65,55,0}, -{65,55,1}, -{65,55,2}, -{65,55,3}, -{65,55,4}, -{65,55,5}, -{65,55,6}, -{65,55,7}, -{65,55,8}, -{65,55,9}, -{65,55,10}, -{65,55,11}, -{65,55,12}, -{65,55,13}, -{65,55,14}, -{65,55,15}, -{65,55,16}, -{65,55,17}, -{65,55,18}, -{65,55,19}, -{65,55,20}, -{65,55,21}, -{65,55,22}, -{65,55,23}, -{65,55,24}, -{65,55,25}, -{65,56,-53}, -{65,56,-52}, -{65,56,-51}, -{65,56,-50}, -{65,56,-49}, -{65,56,-48}, -{65,56,-47}, -{65,56,-46}, -{65,56,-45}, -{65,56,-44}, -{65,56,-43}, -{65,56,-42}, -{65,56,-41}, -{65,56,-40}, -{65,56,-39}, -{65,56,-38}, -{65,56,-37}, -{65,56,-36}, -{65,56,-35}, -{65,56,-34}, -{65,56,-33}, -{65,56,-32}, -{65,56,-31}, -{65,56,-30}, -{65,56,-29}, -{65,56,-28}, -{65,56,-27}, -{65,56,-26}, -{65,56,-25}, -{65,56,-24}, -{65,56,-23}, -{65,56,-22}, -{65,56,-21}, -{65,56,-20}, -{65,56,-19}, -{65,56,-18}, -{65,56,-17}, -{65,56,-16}, -{65,56,-15}, -{65,56,-14}, -{65,56,-13}, -{65,56,-12}, -{65,56,-11}, -{65,56,-10}, -{65,56,-9}, -{65,56,-8}, -{65,56,-7}, -{65,56,-6}, -{65,56,-5}, -{65,56,-4}, -{65,56,-3}, -{65,56,-2}, -{65,56,-1}, -{65,56,0}, -{65,56,1}, -{65,56,2}, -{65,56,3}, -{65,56,4}, -{65,56,5}, -{65,56,6}, -{65,56,7}, -{65,56,8}, -{65,56,9}, -{65,56,10}, -{65,56,11}, -{65,56,12}, -{65,56,13}, -{65,56,14}, -{65,56,15}, -{65,56,16}, -{65,56,17}, -{65,56,18}, -{65,56,19}, -{65,56,20}, -{65,56,21}, -{65,57,-53}, -{65,57,-52}, -{65,57,-51}, -{65,57,-50}, -{65,57,-49}, -{65,57,-48}, -{65,57,-47}, -{65,57,-46}, -{65,57,-45}, -{65,57,-44}, -{65,57,-43}, -{65,57,-42}, -{65,57,-41}, -{65,57,-40}, -{65,57,-39}, -{65,57,-38}, -{65,57,-37}, -{65,57,-36}, -{65,57,-35}, -{65,57,-34}, -{65,57,-33}, -{65,57,-32}, -{65,57,-31}, -{65,57,-30}, -{65,57,-29}, -{65,57,-28}, -{65,57,-27}, -{65,57,-26}, -{65,57,-25}, -{65,57,-24}, -{65,57,-23}, -{65,57,-22}, -{65,57,-21}, -{65,57,-20}, -{65,57,-19}, -{65,57,-18}, -{65,57,-17}, -{65,57,-16}, -{65,57,-15}, -{65,57,-14}, -{65,57,-13}, -{65,57,-12}, -{65,57,-11}, -{65,57,-10}, -{65,57,-9}, -{65,57,-8}, -{65,57,-7}, -{65,57,-6}, -{65,57,-5}, -{65,57,-4}, -{65,57,-3}, -{65,57,-2}, -{65,57,-1}, -{65,57,0}, -{65,57,1}, -{65,57,2}, -{65,57,3}, -{65,57,4}, -{65,57,5}, -{65,57,6}, -{65,57,7}, -{65,57,8}, -{65,57,9}, -{65,57,10}, -{65,57,11}, -{65,57,12}, -{65,57,13}, -{65,57,14}, -{65,57,15}, -{65,57,16}, -{65,57,17}, -{65,58,-53}, -{65,58,-52}, -{65,58,-51}, -{65,58,-50}, -{65,58,-49}, -{65,58,-48}, -{65,58,-47}, -{65,58,-46}, -{65,58,-45}, -{65,58,-44}, -{65,58,-43}, -{65,58,-42}, -{65,58,-41}, -{65,58,-40}, -{65,58,-39}, -{65,58,-38}, -{65,58,-37}, -{65,58,-36}, -{65,58,-35}, -{65,58,-34}, -{65,58,-33}, -{65,58,-32}, -{65,58,-31}, -{65,58,-30}, -{65,58,-29}, -{65,58,-28}, -{65,58,-27}, -{65,58,-26}, -{65,58,-25}, -{65,58,-24}, -{65,58,-23}, -{65,58,-22}, -{65,58,-21}, -{65,58,-20}, -{65,58,-19}, -{65,58,-18}, -{65,58,-17}, -{65,58,-16}, -{65,58,-15}, -{65,58,-14}, -{65,58,-13}, -{65,58,-12}, -{65,58,-11}, -{65,58,-10}, -{65,58,-9}, -{65,58,-8}, -{65,58,-7}, -{65,58,-6}, -{65,58,-5}, -{65,58,-4}, -{65,58,-3}, -{65,58,-2}, -{65,58,-1}, -{65,58,0}, -{65,58,1}, -{65,58,2}, -{65,58,3}, -{65,58,4}, -{65,58,5}, -{65,58,6}, -{65,58,7}, -{65,58,8}, -{65,58,9}, -{65,58,10}, -{65,58,11}, -{65,58,12}, -{65,58,13}, -{65,59,-53}, -{65,59,-52}, -{65,59,-51}, -{65,59,-50}, -{65,59,-49}, -{65,59,-48}, -{65,59,-47}, -{65,59,-46}, -{65,59,-45}, -{65,59,-44}, -{65,59,-43}, -{65,59,-42}, -{65,59,-41}, -{65,59,-40}, -{65,59,-39}, -{65,59,-38}, -{65,59,-37}, -{65,59,-36}, -{65,59,-35}, -{65,59,-34}, -{65,59,-33}, -{65,59,-32}, -{65,59,-31}, -{65,59,-30}, -{65,59,-29}, -{65,59,-28}, -{65,59,-27}, -{65,59,-26}, -{65,59,-25}, -{65,59,-24}, -{65,59,-23}, -{65,59,-22}, -{65,59,-21}, -{65,59,-20}, -{65,59,-19}, -{65,59,-18}, -{65,59,-17}, -{65,59,-16}, -{65,59,-15}, -{65,59,-14}, -{65,59,-13}, -{65,59,-12}, -{65,59,-11}, -{65,59,-10}, -{65,59,-9}, -{65,59,-8}, -{65,59,-7}, -{65,59,-6}, -{65,59,-5}, -{65,59,-4}, -{65,59,-3}, -{65,59,-2}, -{65,59,-1}, -{65,59,0}, -{65,59,1}, -{65,59,2}, -{65,59,3}, -{65,59,4}, -{65,59,5}, -{65,59,6}, -{65,59,7}, -{65,59,8}, -{65,59,9}, -{65,60,-53}, -{65,60,-52}, -{65,60,-51}, -{65,60,-50}, -{65,60,-49}, -{65,60,-48}, -{65,60,-47}, -{65,60,-46}, -{65,60,-45}, -{65,60,-44}, -{65,60,-43}, -{65,60,-42}, -{65,60,-41}, -{65,60,-40}, -{65,60,-39}, -{65,60,-38}, -{65,60,-37}, -{65,60,-36}, -{65,60,-35}, -{65,60,-34}, -{65,60,-33}, -{65,60,-32}, -{65,60,-31}, -{65,60,-30}, -{65,60,-29}, -{65,60,-28}, -{65,60,-27}, -{65,60,-26}, -{65,60,-25}, -{65,60,-24}, -{65,60,-23}, -{65,60,-22}, -{65,60,-21}, -{65,60,-20}, -{65,60,-19}, -{65,60,-18}, -{65,60,-17}, -{65,60,-16}, -{65,60,-15}, -{65,60,-14}, -{65,60,-13}, -{65,60,-12}, -{65,60,-11}, -{65,60,-10}, -{65,60,-9}, -{65,60,-8}, -{65,60,-7}, -{65,60,-6}, -{65,60,-5}, -{65,60,-4}, -{65,60,-3}, -{65,60,-2}, -{65,60,-1}, -{65,60,0}, -{65,60,1}, -{65,60,2}, -{65,60,3}, -{65,60,4}, -{65,60,5}, -{65,60,6}, -{65,61,-53}, -{65,61,-52}, -{65,61,-51}, -{65,61,-50}, -{65,61,-49}, -{65,61,-48}, -{65,61,-47}, -{65,61,-46}, -{65,61,-45}, -{65,61,-44}, -{65,61,-43}, -{65,61,-42}, -{65,61,-41}, -{65,61,-40}, -{65,61,-39}, -{65,61,-38}, -{65,61,-37}, -{65,61,-36}, -{65,61,-35}, -{65,61,-34}, -{65,61,-33}, -{65,61,-32}, -{65,61,-31}, -{65,61,-30}, -{65,61,-29}, -{65,61,-28}, -{65,61,-27}, -{65,61,-26}, -{65,61,-25}, -{65,61,-24}, -{65,61,-23}, -{65,61,-22}, -{65,61,-21}, -{65,61,-20}, -{65,61,-19}, -{65,61,-18}, -{65,61,-17}, -{65,61,-16}, -{65,61,-15}, -{65,61,-14}, -{65,61,-13}, -{65,61,-12}, -{65,61,-11}, -{65,61,-10}, -{65,61,-9}, -{65,61,-8}, -{65,61,-7}, -{65,61,-6}, -{65,61,-5}, -{65,61,-4}, -{65,61,-3}, -{65,61,-2}, -{65,61,-1}, -{65,61,0}, -{65,61,1}, -{65,61,2}, -{65,62,-53}, -{65,62,-52}, -{65,62,-51}, -{65,62,-50}, -{65,62,-49}, -{65,62,-48}, -{65,62,-47}, -{65,62,-46}, -{65,62,-45}, -{65,62,-44}, -{65,62,-43}, -{65,62,-42}, -{65,62,-41}, -{65,62,-40}, -{65,62,-39}, -{65,62,-38}, -{65,62,-37}, -{65,62,-36}, -{65,62,-35}, -{65,62,-34}, -{65,62,-33}, -{65,62,-32}, -{65,62,-31}, -{65,62,-30}, -{65,62,-29}, -{65,62,-28}, -{65,62,-27}, -{65,62,-26}, -{65,62,-25}, -{65,62,-24}, -{65,62,-23}, -{65,62,-22}, -{65,62,-21}, -{65,62,-20}, -{65,62,-19}, -{65,62,-18}, -{65,62,-17}, -{65,62,-16}, -{65,62,-15}, -{65,62,-14}, -{65,62,-13}, -{65,62,-12}, -{65,62,-11}, -{65,62,-10}, -{65,62,-9}, -{65,62,-8}, -{65,62,-7}, -{65,62,-6}, -{65,62,-5}, -{65,62,-4}, -{65,62,-3}, -{65,62,-2}, -{65,62,-1}, -{65,63,-53}, -{65,63,-52}, -{65,63,-51}, -{65,63,-50}, -{65,63,-49}, -{65,63,-48}, -{65,63,-47}, -{65,63,-46}, -{65,63,-45}, -{65,63,-44}, -{65,63,-43}, -{65,63,-42}, -{65,63,-41}, -{65,63,-40}, -{65,63,-39}, -{65,63,-38}, -{65,63,-37}, -{65,63,-36}, -{65,63,-35}, -{65,63,-34}, -{65,63,-33}, -{65,63,-32}, -{65,63,-31}, -{65,63,-30}, -{65,63,-29}, -{65,63,-28}, -{65,63,-27}, -{65,63,-26}, -{65,63,-25}, -{65,63,-24}, -{65,63,-23}, -{65,63,-22}, -{65,63,-21}, -{65,63,-20}, -{65,63,-19}, -{65,63,-18}, -{65,63,-17}, -{65,63,-16}, -{65,63,-15}, -{65,63,-14}, -{65,63,-13}, -{65,63,-12}, -{65,63,-11}, -{65,63,-10}, -{65,63,-9}, -{65,63,-8}, -{65,63,-7}, -{65,63,-6}, -{65,63,-5}, -{65,63,-4}, -{65,64,-53}, -{65,64,-52}, -{65,64,-51}, -{65,64,-50}, -{65,64,-49}, -{65,64,-48}, -{65,64,-47}, -{65,64,-46}, -{65,64,-45}, -{65,64,-44}, -{65,64,-43}, -{65,64,-42}, -{65,64,-41}, -{65,64,-40}, -{65,64,-39}, -{65,64,-38}, -{65,64,-37}, -{65,64,-36}, -{65,64,-35}, -{65,64,-34}, -{65,64,-33}, -{65,64,-32}, -{65,64,-31}, -{65,64,-30}, -{65,64,-29}, -{65,64,-28}, -{65,64,-27}, -{65,64,-26}, -{65,64,-25}, -{65,64,-24}, -{65,64,-23}, -{65,64,-22}, -{65,64,-21}, -{65,64,-20}, -{65,64,-19}, -{65,64,-18}, -{65,64,-17}, -{65,64,-16}, -{65,64,-15}, -{65,64,-14}, -{65,64,-13}, -{65,64,-12}, -{65,64,-11}, -{65,64,-10}, -{65,64,-9}, -{65,64,-8}, -{65,64,-7}, -{65,65,-53}, -{65,65,-52}, -{65,65,-51}, -{65,65,-50}, -{65,65,-49}, -{65,65,-48}, -{65,65,-47}, -{65,65,-46}, -{65,65,-45}, -{65,65,-44}, -{65,65,-43}, -{65,65,-42}, -{65,65,-41}, -{65,65,-40}, -{65,65,-39}, -{65,65,-38}, -{65,65,-37}, -{65,65,-36}, -{65,65,-35}, -{65,65,-34}, -{65,65,-33}, -{65,65,-32}, -{65,65,-31}, -{65,65,-30}, -{65,65,-29}, -{65,65,-28}, -{65,65,-27}, -{65,65,-26}, -{65,65,-25}, -{65,65,-24}, -{65,65,-23}, -{65,65,-22}, -{65,65,-21}, -{65,65,-20}, -{65,65,-19}, -{65,65,-18}, -{65,65,-17}, -{65,65,-16}, -{65,65,-15}, -{65,65,-14}, -{65,65,-13}, -{65,65,-12}, -{65,65,-11}, -{65,65,-10}, -{65,66,-53}, -{65,66,-52}, -{65,66,-51}, -{65,66,-50}, -{65,66,-49}, -{65,66,-48}, -{65,66,-47}, -{65,66,-46}, -{65,66,-45}, -{65,66,-44}, -{65,66,-43}, -{65,66,-42}, -{65,66,-41}, -{65,66,-40}, -{65,66,-39}, -{65,66,-38}, -{65,66,-37}, -{65,66,-36}, -{65,66,-35}, -{65,66,-34}, -{65,66,-33}, -{65,66,-32}, -{65,66,-31}, -{65,66,-30}, -{65,66,-29}, -{65,66,-28}, -{65,66,-27}, -{65,66,-26}, -{65,66,-25}, -{65,66,-24}, -{65,66,-23}, -{65,66,-22}, -{65,66,-21}, -{65,66,-20}, -{65,66,-19}, -{65,66,-18}, -{65,66,-17}, -{65,66,-16}, -{65,66,-15}, -{65,66,-14}, -{65,66,-13}, -{65,67,-53}, -{65,67,-52}, -{65,67,-51}, -{65,67,-50}, -{65,67,-49}, -{65,67,-48}, -{65,67,-47}, -{65,67,-46}, -{65,67,-45}, -{65,67,-44}, -{65,67,-43}, -{65,67,-42}, -{65,67,-41}, -{65,67,-40}, -{65,67,-39}, -{65,67,-38}, -{65,67,-37}, -{65,67,-36}, -{65,67,-35}, -{65,67,-34}, -{65,67,-33}, -{65,67,-32}, -{65,67,-31}, -{65,67,-30}, -{65,67,-29}, -{65,67,-28}, -{65,67,-27}, -{65,67,-26}, -{65,67,-25}, -{65,67,-24}, -{65,67,-23}, -{65,67,-22}, -{65,67,-21}, -{65,67,-20}, -{65,67,-19}, -{65,67,-18}, -{65,67,-17}, -{65,67,-16}, -{65,67,-15}, -{65,68,-53}, -{65,68,-52}, -{65,68,-51}, -{65,68,-50}, -{65,68,-49}, -{65,68,-48}, -{65,68,-47}, -{65,68,-46}, -{65,68,-45}, -{65,68,-44}, -{65,68,-43}, -{65,68,-42}, -{65,68,-41}, -{65,68,-40}, -{65,68,-39}, -{65,68,-38}, -{65,68,-37}, -{65,68,-36}, -{65,68,-35}, -{65,68,-34}, -{65,68,-33}, -{65,68,-32}, -{65,68,-31}, -{65,68,-30}, -{65,68,-29}, -{65,68,-28}, -{65,68,-27}, -{65,68,-26}, -{65,68,-25}, -{65,68,-24}, -{65,68,-23}, -{65,68,-22}, -{65,68,-21}, -{65,68,-20}, -{65,68,-19}, -{65,68,-18}, -{65,69,-53}, -{65,69,-52}, -{65,69,-51}, -{65,69,-50}, -{65,69,-49}, -{65,69,-48}, -{65,69,-47}, -{65,69,-46}, -{65,69,-45}, -{65,69,-44}, -{65,69,-43}, -{65,69,-42}, -{65,69,-41}, -{65,69,-40}, -{65,69,-39}, -{65,69,-38}, -{65,69,-37}, -{65,69,-36}, -{65,69,-35}, -{65,69,-34}, -{65,69,-33}, -{65,69,-32}, -{65,69,-31}, -{65,69,-30}, -{65,69,-29}, -{65,69,-28}, -{65,69,-27}, -{65,69,-26}, -{65,69,-25}, -{65,69,-24}, -{65,69,-23}, -{65,69,-22}, -{65,69,-21}, -{65,69,-20}, -{65,70,-53}, -{65,70,-52}, -{65,70,-51}, -{65,70,-50}, -{65,70,-49}, -{65,70,-48}, -{65,70,-47}, -{65,70,-46}, -{65,70,-45}, -{65,70,-44}, -{65,70,-43}, -{65,70,-42}, -{65,70,-41}, -{65,70,-40}, -{65,70,-39}, -{65,70,-38}, -{65,70,-37}, -{65,70,-36}, -{65,70,-35}, -{65,70,-34}, -{65,70,-33}, -{65,70,-32}, -{65,70,-31}, -{65,70,-30}, -{65,70,-29}, -{65,70,-28}, -{65,70,-27}, -{65,70,-26}, -{65,70,-25}, -{65,70,-24}, -{65,70,-23}, -{65,71,-53}, -{65,71,-52}, -{65,71,-51}, -{65,71,-50}, -{65,71,-49}, -{65,71,-48}, -{65,71,-47}, -{65,71,-46}, -{65,71,-45}, -{65,71,-44}, -{65,71,-43}, -{65,71,-42}, -{65,71,-41}, -{65,71,-40}, -{65,71,-39}, -{65,71,-38}, -{65,71,-37}, -{65,71,-36}, -{65,71,-35}, -{65,71,-34}, -{65,71,-33}, -{65,71,-32}, -{65,71,-31}, -{65,71,-30}, -{65,71,-29}, -{65,71,-28}, -{65,71,-27}, -{65,71,-26}, -{65,71,-25}, -{65,72,-53}, -{65,72,-52}, -{65,72,-51}, -{65,72,-50}, -{65,72,-49}, -{65,72,-48}, -{65,72,-47}, -{65,72,-46}, -{65,72,-45}, -{65,72,-44}, -{65,72,-43}, -{65,72,-42}, -{65,72,-41}, -{65,72,-40}, -{65,72,-39}, -{65,72,-38}, -{65,72,-37}, -{65,72,-36}, -{65,72,-35}, -{65,72,-34}, -{65,72,-33}, -{65,72,-32}, -{65,72,-31}, -{65,72,-30}, -{65,72,-29}, -{65,72,-28}, -{65,73,-53}, -{65,73,-52}, -{65,73,-51}, -{65,73,-50}, -{65,73,-49}, -{65,73,-48}, -{65,73,-47}, -{65,73,-46}, -{65,73,-45}, -{65,73,-44}, -{65,73,-43}, -{65,73,-42}, -{65,73,-41}, -{65,73,-40}, -{65,73,-39}, -{65,73,-38}, -{65,73,-37}, -{65,73,-36}, -{65,73,-35}, -{65,73,-34}, -{65,73,-33}, -{65,73,-32}, -{65,73,-31}, -{65,73,-30}, -{65,74,-53}, -{65,74,-52}, -{65,74,-51}, -{65,74,-50}, -{65,74,-49}, -{65,74,-48}, -{65,74,-47}, -{65,74,-46}, -{65,74,-45}, -{65,74,-44}, -{65,74,-43}, -{65,74,-42}, -{65,74,-41}, -{65,74,-40}, -{65,74,-39}, -{65,74,-38}, -{65,74,-37}, -{65,74,-36}, -{65,74,-35}, -{65,74,-34}, -{65,74,-33}, -{65,74,-32}, -{65,75,-53}, -{65,75,-52}, -{65,75,-51}, -{65,75,-50}, -{65,75,-49}, -{65,75,-48}, -{65,75,-47}, -{65,75,-46}, -{65,75,-45}, -{65,75,-44}, -{65,75,-43}, -{65,75,-42}, -{65,75,-41}, -{65,75,-40}, -{65,75,-39}, -{65,75,-38}, -{65,75,-37}, -{65,75,-36}, -{65,75,-35}, -{65,75,-34}, -{65,76,-53}, -{65,76,-52}, -{65,76,-51}, -{65,76,-50}, -{65,76,-49}, -{65,76,-48}, -{65,76,-47}, -{65,76,-46}, -{65,76,-45}, -{65,76,-44}, -{65,76,-43}, -{65,76,-42}, -{65,76,-41}, -{65,76,-40}, -{65,76,-39}, -{65,76,-38}, -{65,76,-37}, -{65,76,-36}, -{65,77,-53}, -{65,77,-52}, -{65,77,-51}, -{65,77,-50}, -{65,77,-49}, -{65,77,-48}, -{65,77,-47}, -{65,77,-46}, -{65,77,-45}, -{65,77,-44}, -{65,77,-43}, -{65,77,-42}, -{65,77,-41}, -{65,77,-40}, -{65,77,-39}, -{65,78,-53}, -{65,78,-52}, -{65,78,-51}, -{65,78,-50}, -{65,78,-49}, -{65,78,-48}, -{65,78,-47}, -{65,78,-46}, -{65,78,-45}, -{65,78,-44}, -{65,78,-43}, -{65,78,-42}, -{65,78,-41}, -{65,79,-53}, -{65,79,-52}, -{65,79,-51}, -{65,79,-50}, -{65,79,-49}, -{65,79,-48}, -{65,79,-47}, -{65,79,-46}, -{65,79,-45}, -{65,79,-44}, -{65,79,-43}, -{65,80,-53}, -{65,80,-52}, -{65,80,-51}, -{65,80,-50}, -{65,80,-49}, -{65,80,-48}, -{65,80,-47}, -{65,80,-46}, -{65,80,-45}, -{65,81,-53}, -{65,81,-52}, -{65,81,-51}, -{65,81,-50}, -{65,81,-49}, -{65,81,-48}, -{65,81,-47}, -{65,82,-53}, -{65,82,-52}, -{65,82,-51}, -{65,82,-50}, -{65,82,-49}, -{65,82,-48}, -{65,83,-53}, -{65,83,-52}, -{65,83,-51}, -{65,83,-50}, -{65,84,-53}, -{65,84,-52}, -{66,-68,65}, -{66,-67,60}, -{66,-67,61}, -{66,-67,62}, -{66,-67,63}, -{66,-67,64}, -{66,-67,65}, -{66,-66,56}, -{66,-66,57}, -{66,-66,58}, -{66,-66,59}, -{66,-66,60}, -{66,-66,61}, -{66,-66,62}, -{66,-66,63}, -{66,-66,64}, -{66,-66,65}, -{66,-66,66}, -{66,-65,52}, -{66,-65,53}, -{66,-65,54}, -{66,-65,55}, -{66,-65,56}, -{66,-65,57}, -{66,-65,58}, -{66,-65,59}, -{66,-65,60}, -{66,-65,61}, -{66,-65,62}, -{66,-65,63}, -{66,-65,64}, -{66,-65,65}, -{66,-65,66}, -{66,-64,48}, -{66,-64,49}, -{66,-64,50}, -{66,-64,51}, -{66,-64,52}, -{66,-64,53}, -{66,-64,54}, -{66,-64,55}, -{66,-64,56}, -{66,-64,57}, -{66,-64,58}, -{66,-64,59}, -{66,-64,60}, -{66,-64,61}, -{66,-64,62}, -{66,-64,63}, -{66,-64,64}, -{66,-64,65}, -{66,-64,66}, -{66,-63,45}, -{66,-63,46}, -{66,-63,47}, -{66,-63,48}, -{66,-63,49}, -{66,-63,50}, -{66,-63,51}, -{66,-63,52}, -{66,-63,53}, -{66,-63,54}, -{66,-63,55}, -{66,-63,56}, -{66,-63,57}, -{66,-63,58}, -{66,-63,59}, -{66,-63,60}, -{66,-63,61}, -{66,-63,62}, -{66,-63,63}, -{66,-63,64}, -{66,-63,65}, -{66,-63,66}, -{66,-62,42}, -{66,-62,43}, -{66,-62,44}, -{66,-62,45}, -{66,-62,46}, -{66,-62,47}, -{66,-62,48}, -{66,-62,49}, -{66,-62,50}, -{66,-62,51}, -{66,-62,52}, -{66,-62,53}, -{66,-62,54}, -{66,-62,55}, -{66,-62,56}, -{66,-62,57}, -{66,-62,58}, -{66,-62,59}, -{66,-62,60}, -{66,-62,61}, -{66,-62,62}, -{66,-62,63}, -{66,-62,64}, -{66,-62,65}, -{66,-62,66}, -{66,-61,39}, -{66,-61,40}, -{66,-61,41}, -{66,-61,42}, -{66,-61,43}, -{66,-61,44}, -{66,-61,45}, -{66,-61,46}, -{66,-61,47}, -{66,-61,48}, -{66,-61,49}, -{66,-61,50}, -{66,-61,51}, -{66,-61,52}, -{66,-61,53}, -{66,-61,54}, -{66,-61,55}, -{66,-61,56}, -{66,-61,57}, -{66,-61,58}, -{66,-61,59}, -{66,-61,60}, -{66,-61,61}, -{66,-61,62}, -{66,-61,63}, -{66,-61,64}, -{66,-61,65}, -{66,-61,66}, -{66,-60,36}, -{66,-60,37}, -{66,-60,38}, -{66,-60,39}, -{66,-60,40}, -{66,-60,41}, -{66,-60,42}, -{66,-60,43}, -{66,-60,44}, -{66,-60,45}, -{66,-60,46}, -{66,-60,47}, -{66,-60,48}, -{66,-60,49}, -{66,-60,50}, -{66,-60,51}, -{66,-60,52}, -{66,-60,53}, -{66,-60,54}, -{66,-60,55}, -{66,-60,56}, -{66,-60,57}, -{66,-60,58}, -{66,-60,59}, -{66,-60,60}, -{66,-60,61}, -{66,-60,62}, -{66,-60,63}, -{66,-60,64}, -{66,-60,65}, -{66,-60,66}, -{66,-59,33}, -{66,-59,34}, -{66,-59,35}, -{66,-59,36}, -{66,-59,37}, -{66,-59,38}, -{66,-59,39}, -{66,-59,40}, -{66,-59,41}, -{66,-59,42}, -{66,-59,43}, -{66,-59,44}, -{66,-59,45}, -{66,-59,46}, -{66,-59,47}, -{66,-59,48}, -{66,-59,49}, -{66,-59,50}, -{66,-59,51}, -{66,-59,52}, -{66,-59,53}, -{66,-59,54}, -{66,-59,55}, -{66,-59,56}, -{66,-59,57}, -{66,-59,58}, -{66,-59,59}, -{66,-59,60}, -{66,-59,61}, -{66,-59,62}, -{66,-59,63}, -{66,-59,64}, -{66,-59,65}, -{66,-59,66}, -{66,-58,31}, -{66,-58,32}, -{66,-58,33}, -{66,-58,34}, -{66,-58,35}, -{66,-58,36}, -{66,-58,37}, -{66,-58,38}, -{66,-58,39}, -{66,-58,40}, -{66,-58,41}, -{66,-58,42}, -{66,-58,43}, -{66,-58,44}, -{66,-58,45}, -{66,-58,46}, -{66,-58,47}, -{66,-58,48}, -{66,-58,49}, -{66,-58,50}, -{66,-58,51}, -{66,-58,52}, -{66,-58,53}, -{66,-58,54}, -{66,-58,55}, -{66,-58,56}, -{66,-58,57}, -{66,-58,58}, -{66,-58,59}, -{66,-58,60}, -{66,-58,61}, -{66,-58,62}, -{66,-58,63}, -{66,-58,64}, -{66,-58,65}, -{66,-58,66}, -{66,-57,28}, -{66,-57,29}, -{66,-57,30}, -{66,-57,31}, -{66,-57,32}, -{66,-57,33}, -{66,-57,34}, -{66,-57,35}, -{66,-57,36}, -{66,-57,37}, -{66,-57,38}, -{66,-57,39}, -{66,-57,40}, -{66,-57,41}, -{66,-57,42}, -{66,-57,43}, -{66,-57,44}, -{66,-57,45}, -{66,-57,46}, -{66,-57,47}, -{66,-57,48}, -{66,-57,49}, -{66,-57,50}, -{66,-57,51}, -{66,-57,52}, -{66,-57,53}, -{66,-57,54}, -{66,-57,55}, -{66,-57,56}, -{66,-57,57}, -{66,-57,58}, -{66,-57,59}, -{66,-57,60}, -{66,-57,61}, -{66,-57,62}, -{66,-57,63}, -{66,-57,64}, -{66,-57,65}, -{66,-57,66}, -{66,-56,26}, -{66,-56,27}, -{66,-56,28}, -{66,-56,29}, -{66,-56,30}, -{66,-56,31}, -{66,-56,32}, -{66,-56,33}, -{66,-56,34}, -{66,-56,35}, -{66,-56,36}, -{66,-56,37}, -{66,-56,38}, -{66,-56,39}, -{66,-56,40}, -{66,-56,41}, -{66,-56,42}, -{66,-56,43}, -{66,-56,44}, -{66,-56,45}, -{66,-56,46}, -{66,-56,47}, -{66,-56,48}, -{66,-56,49}, -{66,-56,50}, -{66,-56,51}, -{66,-56,52}, -{66,-56,53}, -{66,-56,54}, -{66,-56,55}, -{66,-56,56}, -{66,-56,57}, -{66,-56,58}, -{66,-56,59}, -{66,-56,60}, -{66,-56,61}, -{66,-56,62}, -{66,-56,63}, -{66,-56,64}, -{66,-56,65}, -{66,-56,66}, -{66,-55,23}, -{66,-55,24}, -{66,-55,25}, -{66,-55,26}, -{66,-55,27}, -{66,-55,28}, -{66,-55,29}, -{66,-55,30}, -{66,-55,31}, -{66,-55,32}, -{66,-55,33}, -{66,-55,34}, -{66,-55,35}, -{66,-55,36}, -{66,-55,37}, -{66,-55,38}, -{66,-55,39}, -{66,-55,40}, -{66,-55,41}, -{66,-55,42}, -{66,-55,43}, -{66,-55,44}, -{66,-55,45}, -{66,-55,46}, -{66,-55,47}, -{66,-55,48}, -{66,-55,49}, -{66,-55,50}, -{66,-55,51}, -{66,-55,52}, -{66,-55,53}, -{66,-55,54}, -{66,-55,55}, -{66,-55,56}, -{66,-55,57}, -{66,-55,58}, -{66,-55,59}, -{66,-55,60}, -{66,-55,61}, -{66,-55,62}, -{66,-55,63}, -{66,-55,64}, -{66,-55,65}, -{66,-55,66}, -{66,-54,21}, -{66,-54,22}, -{66,-54,23}, -{66,-54,24}, -{66,-54,25}, -{66,-54,26}, -{66,-54,27}, -{66,-54,28}, -{66,-54,29}, -{66,-54,30}, -{66,-54,31}, -{66,-54,32}, -{66,-54,33}, -{66,-54,34}, -{66,-54,35}, -{66,-54,36}, -{66,-54,37}, -{66,-54,38}, -{66,-54,39}, -{66,-54,40}, -{66,-54,41}, -{66,-54,42}, -{66,-54,43}, -{66,-54,44}, -{66,-54,45}, -{66,-54,46}, -{66,-54,47}, -{66,-54,48}, -{66,-54,49}, -{66,-54,50}, -{66,-54,51}, -{66,-54,52}, -{66,-54,53}, -{66,-54,54}, -{66,-54,55}, -{66,-54,56}, -{66,-54,57}, -{66,-54,58}, -{66,-54,59}, -{66,-54,60}, -{66,-54,61}, -{66,-54,62}, -{66,-54,63}, -{66,-54,64}, -{66,-54,65}, -{66,-54,66}, -{66,-53,19}, -{66,-53,20}, -{66,-53,21}, -{66,-53,22}, -{66,-53,23}, -{66,-53,24}, -{66,-53,25}, -{66,-53,26}, -{66,-53,27}, -{66,-53,28}, -{66,-53,29}, -{66,-53,30}, -{66,-53,31}, -{66,-53,32}, -{66,-53,33}, -{66,-53,34}, -{66,-53,35}, -{66,-53,36}, -{66,-53,37}, -{66,-53,38}, -{66,-53,39}, -{66,-53,40}, -{66,-53,41}, -{66,-53,42}, -{66,-53,43}, -{66,-53,44}, -{66,-53,45}, -{66,-53,46}, -{66,-53,47}, -{66,-53,48}, -{66,-53,49}, -{66,-53,50}, -{66,-53,51}, -{66,-53,52}, -{66,-53,53}, -{66,-53,54}, -{66,-53,55}, -{66,-53,56}, -{66,-53,57}, -{66,-53,58}, -{66,-53,59}, -{66,-53,60}, -{66,-53,61}, -{66,-53,62}, -{66,-53,63}, -{66,-53,64}, -{66,-53,65}, -{66,-53,66}, -{66,-52,17}, -{66,-52,18}, -{66,-52,19}, -{66,-52,20}, -{66,-52,21}, -{66,-52,22}, -{66,-52,23}, -{66,-52,24}, -{66,-52,25}, -{66,-52,26}, -{66,-52,27}, -{66,-52,28}, -{66,-52,29}, -{66,-52,30}, -{66,-52,31}, -{66,-52,32}, -{66,-52,33}, -{66,-52,34}, -{66,-52,35}, -{66,-52,36}, -{66,-52,37}, -{66,-52,38}, -{66,-52,39}, -{66,-52,40}, -{66,-52,41}, -{66,-52,42}, -{66,-52,43}, -{66,-52,44}, -{66,-52,45}, -{66,-52,46}, -{66,-52,47}, -{66,-52,48}, -{66,-52,49}, -{66,-52,50}, -{66,-52,51}, -{66,-52,52}, -{66,-52,53}, -{66,-52,54}, -{66,-52,55}, -{66,-52,56}, -{66,-52,57}, -{66,-52,58}, -{66,-52,59}, -{66,-52,60}, -{66,-52,61}, -{66,-52,62}, -{66,-52,63}, -{66,-52,64}, -{66,-52,65}, -{66,-52,66}, -{66,-51,15}, -{66,-51,16}, -{66,-51,17}, -{66,-51,18}, -{66,-51,19}, -{66,-51,20}, -{66,-51,21}, -{66,-51,22}, -{66,-51,23}, -{66,-51,24}, -{66,-51,25}, -{66,-51,26}, -{66,-51,27}, -{66,-51,28}, -{66,-51,29}, -{66,-51,30}, -{66,-51,31}, -{66,-51,32}, -{66,-51,33}, -{66,-51,34}, -{66,-51,35}, -{66,-51,36}, -{66,-51,37}, -{66,-51,38}, -{66,-51,39}, -{66,-51,40}, -{66,-51,41}, -{66,-51,42}, -{66,-51,43}, -{66,-51,44}, -{66,-51,45}, -{66,-51,46}, -{66,-51,47}, -{66,-51,48}, -{66,-51,49}, -{66,-51,50}, -{66,-51,51}, -{66,-51,52}, -{66,-51,53}, -{66,-51,54}, -{66,-51,55}, -{66,-51,56}, -{66,-51,57}, -{66,-51,58}, -{66,-51,59}, -{66,-51,60}, -{66,-51,61}, -{66,-51,62}, -{66,-51,63}, -{66,-51,64}, -{66,-51,65}, -{66,-51,66}, -{66,-50,13}, -{66,-50,14}, -{66,-50,15}, -{66,-50,16}, -{66,-50,17}, -{66,-50,18}, -{66,-50,19}, -{66,-50,20}, -{66,-50,21}, -{66,-50,22}, -{66,-50,23}, -{66,-50,24}, -{66,-50,25}, -{66,-50,26}, -{66,-50,27}, -{66,-50,28}, -{66,-50,29}, -{66,-50,30}, -{66,-50,31}, -{66,-50,32}, -{66,-50,33}, -{66,-50,34}, -{66,-50,35}, -{66,-50,36}, -{66,-50,37}, -{66,-50,38}, -{66,-50,39}, -{66,-50,40}, -{66,-50,41}, -{66,-50,42}, -{66,-50,43}, -{66,-50,44}, -{66,-50,45}, -{66,-50,46}, -{66,-50,47}, -{66,-50,48}, -{66,-50,49}, -{66,-50,50}, -{66,-50,51}, -{66,-50,52}, -{66,-50,53}, -{66,-50,54}, -{66,-50,55}, -{66,-50,56}, -{66,-50,57}, -{66,-50,58}, -{66,-50,59}, -{66,-50,60}, -{66,-50,61}, -{66,-50,62}, -{66,-50,63}, -{66,-50,64}, -{66,-50,65}, -{66,-50,66}, -{66,-49,11}, -{66,-49,12}, -{66,-49,13}, -{66,-49,14}, -{66,-49,15}, -{66,-49,16}, -{66,-49,17}, -{66,-49,18}, -{66,-49,19}, -{66,-49,20}, -{66,-49,21}, -{66,-49,22}, -{66,-49,23}, -{66,-49,24}, -{66,-49,25}, -{66,-49,26}, -{66,-49,27}, -{66,-49,28}, -{66,-49,29}, -{66,-49,30}, -{66,-49,31}, -{66,-49,32}, -{66,-49,33}, -{66,-49,34}, -{66,-49,35}, -{66,-49,36}, -{66,-49,37}, -{66,-49,38}, -{66,-49,39}, -{66,-49,40}, -{66,-49,41}, -{66,-49,42}, -{66,-49,43}, -{66,-49,44}, -{66,-49,45}, -{66,-49,46}, -{66,-49,47}, -{66,-49,48}, -{66,-49,49}, -{66,-49,50}, -{66,-49,51}, -{66,-49,52}, -{66,-49,53}, -{66,-49,54}, -{66,-49,55}, -{66,-49,56}, -{66,-49,57}, -{66,-49,58}, -{66,-49,59}, -{66,-49,60}, -{66,-49,61}, -{66,-49,62}, -{66,-49,63}, -{66,-49,64}, -{66,-49,65}, -{66,-49,66}, -{66,-48,9}, -{66,-48,10}, -{66,-48,11}, -{66,-48,12}, -{66,-48,13}, -{66,-48,14}, -{66,-48,15}, -{66,-48,16}, -{66,-48,17}, -{66,-48,18}, -{66,-48,19}, -{66,-48,20}, -{66,-48,21}, -{66,-48,22}, -{66,-48,23}, -{66,-48,24}, -{66,-48,25}, -{66,-48,26}, -{66,-48,27}, -{66,-48,28}, -{66,-48,29}, -{66,-48,30}, -{66,-48,31}, -{66,-48,32}, -{66,-48,33}, -{66,-48,34}, -{66,-48,35}, -{66,-48,36}, -{66,-48,37}, -{66,-48,38}, -{66,-48,39}, -{66,-48,40}, -{66,-48,41}, -{66,-48,42}, -{66,-48,43}, -{66,-48,44}, -{66,-48,45}, -{66,-48,46}, -{66,-48,47}, -{66,-48,48}, -{66,-48,49}, -{66,-48,50}, -{66,-48,51}, -{66,-48,52}, -{66,-48,53}, -{66,-48,54}, -{66,-48,55}, -{66,-48,56}, -{66,-48,57}, -{66,-48,58}, -{66,-48,59}, -{66,-48,60}, -{66,-48,61}, -{66,-48,62}, -{66,-48,63}, -{66,-48,64}, -{66,-48,65}, -{66,-48,66}, -{66,-47,7}, -{66,-47,8}, -{66,-47,9}, -{66,-47,10}, -{66,-47,11}, -{66,-47,12}, -{66,-47,13}, -{66,-47,14}, -{66,-47,15}, -{66,-47,16}, -{66,-47,17}, -{66,-47,18}, -{66,-47,19}, -{66,-47,20}, -{66,-47,21}, -{66,-47,22}, -{66,-47,23}, -{66,-47,24}, -{66,-47,25}, -{66,-47,26}, -{66,-47,27}, -{66,-47,28}, -{66,-47,29}, -{66,-47,30}, -{66,-47,31}, -{66,-47,32}, -{66,-47,33}, -{66,-47,34}, -{66,-47,35}, -{66,-47,36}, -{66,-47,37}, -{66,-47,38}, -{66,-47,39}, -{66,-47,40}, -{66,-47,41}, -{66,-47,42}, -{66,-47,43}, -{66,-47,44}, -{66,-47,45}, -{66,-47,46}, -{66,-47,47}, -{66,-47,48}, -{66,-47,49}, -{66,-47,50}, -{66,-47,51}, -{66,-47,52}, -{66,-47,53}, -{66,-47,54}, -{66,-47,55}, -{66,-47,56}, -{66,-47,57}, -{66,-47,58}, -{66,-47,59}, -{66,-47,60}, -{66,-47,61}, -{66,-47,62}, -{66,-47,63}, -{66,-47,64}, -{66,-47,65}, -{66,-47,66}, -{66,-46,5}, -{66,-46,6}, -{66,-46,7}, -{66,-46,8}, -{66,-46,9}, -{66,-46,10}, -{66,-46,11}, -{66,-46,12}, -{66,-46,13}, -{66,-46,14}, -{66,-46,15}, -{66,-46,16}, -{66,-46,17}, -{66,-46,18}, -{66,-46,19}, -{66,-46,20}, -{66,-46,21}, -{66,-46,22}, -{66,-46,23}, -{66,-46,24}, -{66,-46,25}, -{66,-46,26}, -{66,-46,27}, -{66,-46,28}, -{66,-46,29}, -{66,-46,30}, -{66,-46,31}, -{66,-46,32}, -{66,-46,33}, -{66,-46,34}, -{66,-46,35}, -{66,-46,36}, -{66,-46,37}, -{66,-46,38}, -{66,-46,39}, -{66,-46,40}, -{66,-46,41}, -{66,-46,42}, -{66,-46,43}, -{66,-46,44}, -{66,-46,45}, -{66,-46,46}, -{66,-46,47}, -{66,-46,48}, -{66,-46,49}, -{66,-46,50}, -{66,-46,51}, -{66,-46,52}, -{66,-46,53}, -{66,-46,54}, -{66,-46,55}, -{66,-46,56}, -{66,-46,57}, -{66,-46,58}, -{66,-46,59}, -{66,-46,60}, -{66,-46,61}, -{66,-46,62}, -{66,-46,63}, -{66,-46,64}, -{66,-46,65}, -{66,-46,66}, -{66,-45,3}, -{66,-45,4}, -{66,-45,5}, -{66,-45,6}, -{66,-45,7}, -{66,-45,8}, -{66,-45,9}, -{66,-45,10}, -{66,-45,11}, -{66,-45,12}, -{66,-45,13}, -{66,-45,14}, -{66,-45,15}, -{66,-45,16}, -{66,-45,17}, -{66,-45,18}, -{66,-45,19}, -{66,-45,20}, -{66,-45,21}, -{66,-45,22}, -{66,-45,23}, -{66,-45,24}, -{66,-45,25}, -{66,-45,26}, -{66,-45,27}, -{66,-45,28}, -{66,-45,29}, -{66,-45,30}, -{66,-45,31}, -{66,-45,32}, -{66,-45,33}, -{66,-45,34}, -{66,-45,35}, -{66,-45,36}, -{66,-45,37}, -{66,-45,38}, -{66,-45,39}, -{66,-45,40}, -{66,-45,41}, -{66,-45,42}, -{66,-45,43}, -{66,-45,44}, -{66,-45,45}, -{66,-45,46}, -{66,-45,47}, -{66,-45,48}, -{66,-45,49}, -{66,-45,50}, -{66,-45,51}, -{66,-45,52}, -{66,-45,53}, -{66,-45,54}, -{66,-45,55}, -{66,-45,56}, -{66,-45,57}, -{66,-45,58}, -{66,-45,59}, -{66,-45,60}, -{66,-45,61}, -{66,-45,62}, -{66,-45,63}, -{66,-45,64}, -{66,-45,65}, -{66,-45,66}, -{66,-44,1}, -{66,-44,2}, -{66,-44,3}, -{66,-44,4}, -{66,-44,5}, -{66,-44,6}, -{66,-44,7}, -{66,-44,8}, -{66,-44,9}, -{66,-44,10}, -{66,-44,11}, -{66,-44,12}, -{66,-44,13}, -{66,-44,14}, -{66,-44,15}, -{66,-44,16}, -{66,-44,17}, -{66,-44,18}, -{66,-44,19}, -{66,-44,20}, -{66,-44,21}, -{66,-44,22}, -{66,-44,23}, -{66,-44,24}, -{66,-44,25}, -{66,-44,26}, -{66,-44,27}, -{66,-44,28}, -{66,-44,29}, -{66,-44,30}, -{66,-44,31}, -{66,-44,32}, -{66,-44,33}, -{66,-44,34}, -{66,-44,35}, -{66,-44,36}, -{66,-44,37}, -{66,-44,38}, -{66,-44,39}, -{66,-44,40}, -{66,-44,41}, -{66,-44,42}, -{66,-44,43}, -{66,-44,44}, -{66,-44,45}, -{66,-44,46}, -{66,-44,47}, -{66,-44,48}, -{66,-44,49}, -{66,-44,50}, -{66,-44,51}, -{66,-44,52}, -{66,-44,53}, -{66,-44,54}, -{66,-44,55}, -{66,-44,56}, -{66,-44,57}, -{66,-44,58}, -{66,-44,59}, -{66,-44,60}, -{66,-44,61}, -{66,-44,62}, -{66,-44,63}, -{66,-44,64}, -{66,-44,65}, -{66,-44,66}, -{66,-44,67}, -{66,-43,0}, -{66,-43,1}, -{66,-43,2}, -{66,-43,3}, -{66,-43,4}, -{66,-43,5}, -{66,-43,6}, -{66,-43,7}, -{66,-43,8}, -{66,-43,9}, -{66,-43,10}, -{66,-43,11}, -{66,-43,12}, -{66,-43,13}, -{66,-43,14}, -{66,-43,15}, -{66,-43,16}, -{66,-43,17}, -{66,-43,18}, -{66,-43,19}, -{66,-43,20}, -{66,-43,21}, -{66,-43,22}, -{66,-43,23}, -{66,-43,24}, -{66,-43,25}, -{66,-43,26}, -{66,-43,27}, -{66,-43,28}, -{66,-43,29}, -{66,-43,30}, -{66,-43,31}, -{66,-43,32}, -{66,-43,33}, -{66,-43,34}, -{66,-43,35}, -{66,-43,36}, -{66,-43,37}, -{66,-43,38}, -{66,-43,39}, -{66,-43,40}, -{66,-43,41}, -{66,-43,42}, -{66,-43,43}, -{66,-43,44}, -{66,-43,45}, -{66,-43,46}, -{66,-43,47}, -{66,-43,48}, -{66,-43,49}, -{66,-43,50}, -{66,-43,51}, -{66,-43,52}, -{66,-43,53}, -{66,-43,54}, -{66,-43,55}, -{66,-43,56}, -{66,-43,57}, -{66,-43,58}, -{66,-43,59}, -{66,-43,60}, -{66,-43,61}, -{66,-43,62}, -{66,-43,63}, -{66,-43,64}, -{66,-43,65}, -{66,-43,66}, -{66,-43,67}, -{66,-42,-2}, -{66,-42,-1}, -{66,-42,0}, -{66,-42,1}, -{66,-42,2}, -{66,-42,3}, -{66,-42,4}, -{66,-42,5}, -{66,-42,6}, -{66,-42,7}, -{66,-42,8}, -{66,-42,9}, -{66,-42,10}, -{66,-42,11}, -{66,-42,12}, -{66,-42,13}, -{66,-42,14}, -{66,-42,15}, -{66,-42,16}, -{66,-42,17}, -{66,-42,18}, -{66,-42,19}, -{66,-42,20}, -{66,-42,21}, -{66,-42,22}, -{66,-42,23}, -{66,-42,24}, -{66,-42,25}, -{66,-42,26}, -{66,-42,27}, -{66,-42,28}, -{66,-42,29}, -{66,-42,30}, -{66,-42,31}, -{66,-42,32}, -{66,-42,33}, -{66,-42,34}, -{66,-42,35}, -{66,-42,36}, -{66,-42,37}, -{66,-42,38}, -{66,-42,39}, -{66,-42,40}, -{66,-42,41}, -{66,-42,42}, -{66,-42,43}, -{66,-42,44}, -{66,-42,45}, -{66,-42,46}, -{66,-42,47}, -{66,-42,48}, -{66,-42,49}, -{66,-42,50}, -{66,-42,51}, -{66,-42,52}, -{66,-42,53}, -{66,-42,54}, -{66,-42,55}, -{66,-42,56}, -{66,-42,57}, -{66,-42,58}, -{66,-42,59}, -{66,-42,60}, -{66,-42,61}, -{66,-42,62}, -{66,-42,63}, -{66,-42,64}, -{66,-42,65}, -{66,-42,66}, -{66,-42,67}, -{66,-41,-4}, -{66,-41,-3}, -{66,-41,-2}, -{66,-41,-1}, -{66,-41,0}, -{66,-41,1}, -{66,-41,2}, -{66,-41,3}, -{66,-41,4}, -{66,-41,5}, -{66,-41,6}, -{66,-41,7}, -{66,-41,8}, -{66,-41,9}, -{66,-41,10}, -{66,-41,11}, -{66,-41,12}, -{66,-41,13}, -{66,-41,14}, -{66,-41,15}, -{66,-41,16}, -{66,-41,17}, -{66,-41,18}, -{66,-41,19}, -{66,-41,20}, -{66,-41,21}, -{66,-41,22}, -{66,-41,23}, -{66,-41,24}, -{66,-41,25}, -{66,-41,26}, -{66,-41,27}, -{66,-41,28}, -{66,-41,29}, -{66,-41,30}, -{66,-41,31}, -{66,-41,32}, -{66,-41,33}, -{66,-41,34}, -{66,-41,35}, -{66,-41,36}, -{66,-41,37}, -{66,-41,38}, -{66,-41,39}, -{66,-41,40}, -{66,-41,41}, -{66,-41,42}, -{66,-41,43}, -{66,-41,44}, -{66,-41,45}, -{66,-41,46}, -{66,-41,47}, -{66,-41,48}, -{66,-41,49}, -{66,-41,50}, -{66,-41,51}, -{66,-41,52}, -{66,-41,53}, -{66,-41,54}, -{66,-41,55}, -{66,-41,56}, -{66,-41,57}, -{66,-41,58}, -{66,-41,59}, -{66,-41,60}, -{66,-41,61}, -{66,-41,62}, -{66,-41,63}, -{66,-41,64}, -{66,-41,65}, -{66,-41,66}, -{66,-41,67}, -{66,-40,-5}, -{66,-40,-4}, -{66,-40,-3}, -{66,-40,-2}, -{66,-40,-1}, -{66,-40,0}, -{66,-40,1}, -{66,-40,2}, -{66,-40,3}, -{66,-40,4}, -{66,-40,5}, -{66,-40,6}, -{66,-40,7}, -{66,-40,8}, -{66,-40,9}, -{66,-40,10}, -{66,-40,11}, -{66,-40,12}, -{66,-40,13}, -{66,-40,14}, -{66,-40,15}, -{66,-40,16}, -{66,-40,17}, -{66,-40,18}, -{66,-40,19}, -{66,-40,20}, -{66,-40,21}, -{66,-40,22}, -{66,-40,23}, -{66,-40,24}, -{66,-40,25}, -{66,-40,26}, -{66,-40,27}, -{66,-40,28}, -{66,-40,29}, -{66,-40,30}, -{66,-40,31}, -{66,-40,32}, -{66,-40,33}, -{66,-40,34}, -{66,-40,35}, -{66,-40,36}, -{66,-40,37}, -{66,-40,38}, -{66,-40,39}, -{66,-40,40}, -{66,-40,41}, -{66,-40,42}, -{66,-40,43}, -{66,-40,44}, -{66,-40,45}, -{66,-40,46}, -{66,-40,47}, -{66,-40,48}, -{66,-40,49}, -{66,-40,50}, -{66,-40,51}, -{66,-40,52}, -{66,-40,53}, -{66,-40,54}, -{66,-40,55}, -{66,-40,56}, -{66,-40,57}, -{66,-40,58}, -{66,-40,59}, -{66,-40,60}, -{66,-40,61}, -{66,-40,62}, -{66,-40,63}, -{66,-40,64}, -{66,-40,65}, -{66,-40,66}, -{66,-40,67}, -{66,-39,-7}, -{66,-39,-6}, -{66,-39,-5}, -{66,-39,-4}, -{66,-39,-3}, -{66,-39,-2}, -{66,-39,-1}, -{66,-39,0}, -{66,-39,1}, -{66,-39,2}, -{66,-39,3}, -{66,-39,4}, -{66,-39,5}, -{66,-39,6}, -{66,-39,7}, -{66,-39,8}, -{66,-39,9}, -{66,-39,10}, -{66,-39,11}, -{66,-39,12}, -{66,-39,13}, -{66,-39,14}, -{66,-39,15}, -{66,-39,16}, -{66,-39,17}, -{66,-39,18}, -{66,-39,19}, -{66,-39,20}, -{66,-39,21}, -{66,-39,22}, -{66,-39,23}, -{66,-39,24}, -{66,-39,25}, -{66,-39,26}, -{66,-39,27}, -{66,-39,28}, -{66,-39,29}, -{66,-39,30}, -{66,-39,31}, -{66,-39,32}, -{66,-39,33}, -{66,-39,34}, -{66,-39,35}, -{66,-39,36}, -{66,-39,37}, -{66,-39,38}, -{66,-39,39}, -{66,-39,40}, -{66,-39,41}, -{66,-39,42}, -{66,-39,43}, -{66,-39,44}, -{66,-39,45}, -{66,-39,46}, -{66,-39,47}, -{66,-39,48}, -{66,-39,49}, -{66,-39,50}, -{66,-39,51}, -{66,-39,52}, -{66,-39,53}, -{66,-39,54}, -{66,-39,55}, -{66,-39,56}, -{66,-39,57}, -{66,-39,58}, -{66,-39,59}, -{66,-39,60}, -{66,-39,61}, -{66,-39,62}, -{66,-39,63}, -{66,-39,64}, -{66,-39,65}, -{66,-39,66}, -{66,-39,67}, -{66,-38,-9}, -{66,-38,-8}, -{66,-38,-7}, -{66,-38,-6}, -{66,-38,-5}, -{66,-38,-4}, -{66,-38,-3}, -{66,-38,-2}, -{66,-38,-1}, -{66,-38,0}, -{66,-38,1}, -{66,-38,2}, -{66,-38,3}, -{66,-38,4}, -{66,-38,5}, -{66,-38,6}, -{66,-38,7}, -{66,-38,8}, -{66,-38,9}, -{66,-38,10}, -{66,-38,11}, -{66,-38,12}, -{66,-38,13}, -{66,-38,14}, -{66,-38,15}, -{66,-38,16}, -{66,-38,17}, -{66,-38,18}, -{66,-38,19}, -{66,-38,20}, -{66,-38,21}, -{66,-38,22}, -{66,-38,23}, -{66,-38,24}, -{66,-38,25}, -{66,-38,26}, -{66,-38,27}, -{66,-38,28}, -{66,-38,29}, -{66,-38,30}, -{66,-38,31}, -{66,-38,32}, -{66,-38,33}, -{66,-38,34}, -{66,-38,35}, -{66,-38,36}, -{66,-38,37}, -{66,-38,38}, -{66,-38,39}, -{66,-38,40}, -{66,-38,41}, -{66,-38,42}, -{66,-38,43}, -{66,-38,44}, -{66,-38,45}, -{66,-38,46}, -{66,-38,47}, -{66,-38,48}, -{66,-38,49}, -{66,-38,50}, -{66,-38,51}, -{66,-38,52}, -{66,-38,53}, -{66,-38,54}, -{66,-38,55}, -{66,-38,56}, -{66,-38,57}, -{66,-38,58}, -{66,-38,59}, -{66,-38,60}, -{66,-38,61}, -{66,-38,62}, -{66,-38,63}, -{66,-38,64}, -{66,-38,65}, -{66,-38,66}, -{66,-38,67}, -{66,-37,-10}, -{66,-37,-9}, -{66,-37,-8}, -{66,-37,-7}, -{66,-37,-6}, -{66,-37,-5}, -{66,-37,-4}, -{66,-37,-3}, -{66,-37,-2}, -{66,-37,-1}, -{66,-37,0}, -{66,-37,1}, -{66,-37,2}, -{66,-37,3}, -{66,-37,4}, -{66,-37,5}, -{66,-37,6}, -{66,-37,7}, -{66,-37,8}, -{66,-37,9}, -{66,-37,10}, -{66,-37,11}, -{66,-37,12}, -{66,-37,13}, -{66,-37,14}, -{66,-37,15}, -{66,-37,16}, -{66,-37,17}, -{66,-37,18}, -{66,-37,19}, -{66,-37,20}, -{66,-37,21}, -{66,-37,22}, -{66,-37,23}, -{66,-37,24}, -{66,-37,25}, -{66,-37,26}, -{66,-37,27}, -{66,-37,28}, -{66,-37,29}, -{66,-37,30}, -{66,-37,31}, -{66,-37,32}, -{66,-37,33}, -{66,-37,34}, -{66,-37,35}, -{66,-37,36}, -{66,-37,37}, -{66,-37,38}, -{66,-37,39}, -{66,-37,40}, -{66,-37,41}, -{66,-37,42}, -{66,-37,43}, -{66,-37,44}, -{66,-37,45}, -{66,-37,46}, -{66,-37,47}, -{66,-37,48}, -{66,-37,49}, -{66,-37,50}, -{66,-37,51}, -{66,-37,52}, -{66,-37,53}, -{66,-37,54}, -{66,-37,55}, -{66,-37,56}, -{66,-37,57}, -{66,-37,58}, -{66,-37,59}, -{66,-37,60}, -{66,-37,61}, -{66,-37,62}, -{66,-37,63}, -{66,-37,64}, -{66,-37,65}, -{66,-37,66}, -{66,-37,67}, -{66,-36,-12}, -{66,-36,-11}, -{66,-36,-10}, -{66,-36,-9}, -{66,-36,-8}, -{66,-36,-7}, -{66,-36,-6}, -{66,-36,-5}, -{66,-36,-4}, -{66,-36,-3}, -{66,-36,-2}, -{66,-36,-1}, -{66,-36,0}, -{66,-36,1}, -{66,-36,2}, -{66,-36,3}, -{66,-36,4}, -{66,-36,5}, -{66,-36,6}, -{66,-36,7}, -{66,-36,8}, -{66,-36,9}, -{66,-36,10}, -{66,-36,11}, -{66,-36,12}, -{66,-36,13}, -{66,-36,14}, -{66,-36,15}, -{66,-36,16}, -{66,-36,17}, -{66,-36,18}, -{66,-36,19}, -{66,-36,20}, -{66,-36,21}, -{66,-36,22}, -{66,-36,23}, -{66,-36,24}, -{66,-36,25}, -{66,-36,26}, -{66,-36,27}, -{66,-36,28}, -{66,-36,29}, -{66,-36,30}, -{66,-36,31}, -{66,-36,32}, -{66,-36,33}, -{66,-36,34}, -{66,-36,35}, -{66,-36,36}, -{66,-36,37}, -{66,-36,38}, -{66,-36,39}, -{66,-36,40}, -{66,-36,41}, -{66,-36,42}, -{66,-36,43}, -{66,-36,44}, -{66,-36,45}, -{66,-36,46}, -{66,-36,47}, -{66,-36,48}, -{66,-36,49}, -{66,-36,50}, -{66,-36,51}, -{66,-36,52}, -{66,-36,53}, -{66,-36,54}, -{66,-36,55}, -{66,-36,56}, -{66,-36,57}, -{66,-36,58}, -{66,-36,59}, -{66,-36,60}, -{66,-36,61}, -{66,-36,62}, -{66,-36,63}, -{66,-36,64}, -{66,-36,65}, -{66,-36,66}, -{66,-36,67}, -{66,-35,-13}, -{66,-35,-12}, -{66,-35,-11}, -{66,-35,-10}, -{66,-35,-9}, -{66,-35,-8}, -{66,-35,-7}, -{66,-35,-6}, -{66,-35,-5}, -{66,-35,-4}, -{66,-35,-3}, -{66,-35,-2}, -{66,-35,-1}, -{66,-35,0}, -{66,-35,1}, -{66,-35,2}, -{66,-35,3}, -{66,-35,4}, -{66,-35,5}, -{66,-35,6}, -{66,-35,7}, -{66,-35,8}, -{66,-35,9}, -{66,-35,10}, -{66,-35,11}, -{66,-35,12}, -{66,-35,13}, -{66,-35,14}, -{66,-35,15}, -{66,-35,16}, -{66,-35,17}, -{66,-35,18}, -{66,-35,19}, -{66,-35,20}, -{66,-35,21}, -{66,-35,22}, -{66,-35,23}, -{66,-35,24}, -{66,-35,25}, -{66,-35,26}, -{66,-35,27}, -{66,-35,28}, -{66,-35,29}, -{66,-35,30}, -{66,-35,31}, -{66,-35,32}, -{66,-35,33}, -{66,-35,34}, -{66,-35,35}, -{66,-35,36}, -{66,-35,37}, -{66,-35,38}, -{66,-35,39}, -{66,-35,40}, -{66,-35,41}, -{66,-35,42}, -{66,-35,43}, -{66,-35,44}, -{66,-35,45}, -{66,-35,46}, -{66,-35,47}, -{66,-35,48}, -{66,-35,49}, -{66,-35,50}, -{66,-35,51}, -{66,-35,52}, -{66,-35,53}, -{66,-35,54}, -{66,-35,55}, -{66,-35,56}, -{66,-35,57}, -{66,-35,58}, -{66,-35,59}, -{66,-35,60}, -{66,-35,61}, -{66,-35,62}, -{66,-35,63}, -{66,-35,64}, -{66,-35,65}, -{66,-35,66}, -{66,-35,67}, -{66,-34,-15}, -{66,-34,-14}, -{66,-34,-13}, -{66,-34,-12}, -{66,-34,-11}, -{66,-34,-10}, -{66,-34,-9}, -{66,-34,-8}, -{66,-34,-7}, -{66,-34,-6}, -{66,-34,-5}, -{66,-34,-4}, -{66,-34,-3}, -{66,-34,-2}, -{66,-34,-1}, -{66,-34,0}, -{66,-34,1}, -{66,-34,2}, -{66,-34,3}, -{66,-34,4}, -{66,-34,5}, -{66,-34,6}, -{66,-34,7}, -{66,-34,8}, -{66,-34,9}, -{66,-34,10}, -{66,-34,11}, -{66,-34,12}, -{66,-34,13}, -{66,-34,14}, -{66,-34,15}, -{66,-34,16}, -{66,-34,17}, -{66,-34,18}, -{66,-34,19}, -{66,-34,20}, -{66,-34,21}, -{66,-34,22}, -{66,-34,23}, -{66,-34,24}, -{66,-34,25}, -{66,-34,26}, -{66,-34,27}, -{66,-34,28}, -{66,-34,29}, -{66,-34,30}, -{66,-34,31}, -{66,-34,32}, -{66,-34,33}, -{66,-34,34}, -{66,-34,35}, -{66,-34,36}, -{66,-34,37}, -{66,-34,38}, -{66,-34,39}, -{66,-34,40}, -{66,-34,41}, -{66,-34,42}, -{66,-34,43}, -{66,-34,44}, -{66,-34,45}, -{66,-34,46}, -{66,-34,47}, -{66,-34,48}, -{66,-34,49}, -{66,-34,50}, -{66,-34,51}, -{66,-34,52}, -{66,-34,53}, -{66,-34,54}, -{66,-34,55}, -{66,-34,56}, -{66,-34,57}, -{66,-34,58}, -{66,-34,59}, -{66,-34,60}, -{66,-34,61}, -{66,-34,62}, -{66,-34,63}, -{66,-34,64}, -{66,-34,65}, -{66,-34,66}, -{66,-34,67}, -{66,-33,-16}, -{66,-33,-15}, -{66,-33,-14}, -{66,-33,-13}, -{66,-33,-12}, -{66,-33,-11}, -{66,-33,-10}, -{66,-33,-9}, -{66,-33,-8}, -{66,-33,-7}, -{66,-33,-6}, -{66,-33,-5}, -{66,-33,-4}, -{66,-33,-3}, -{66,-33,-2}, -{66,-33,-1}, -{66,-33,0}, -{66,-33,1}, -{66,-33,2}, -{66,-33,3}, -{66,-33,4}, -{66,-33,5}, -{66,-33,6}, -{66,-33,7}, -{66,-33,8}, -{66,-33,9}, -{66,-33,10}, -{66,-33,11}, -{66,-33,12}, -{66,-33,13}, -{66,-33,14}, -{66,-33,15}, -{66,-33,16}, -{66,-33,17}, -{66,-33,18}, -{66,-33,19}, -{66,-33,20}, -{66,-33,21}, -{66,-33,22}, -{66,-33,23}, -{66,-33,24}, -{66,-33,25}, -{66,-33,26}, -{66,-33,27}, -{66,-33,28}, -{66,-33,29}, -{66,-33,30}, -{66,-33,31}, -{66,-33,32}, -{66,-33,33}, -{66,-33,34}, -{66,-33,35}, -{66,-33,36}, -{66,-33,37}, -{66,-33,38}, -{66,-33,39}, -{66,-33,40}, -{66,-33,41}, -{66,-33,42}, -{66,-33,43}, -{66,-33,44}, -{66,-33,45}, -{66,-33,46}, -{66,-33,47}, -{66,-33,48}, -{66,-33,49}, -{66,-33,50}, -{66,-33,51}, -{66,-33,52}, -{66,-33,53}, -{66,-33,54}, -{66,-33,55}, -{66,-33,56}, -{66,-33,57}, -{66,-33,58}, -{66,-33,59}, -{66,-33,60}, -{66,-33,61}, -{66,-33,62}, -{66,-33,63}, -{66,-33,64}, -{66,-33,65}, -{66,-33,66}, -{66,-33,67}, -{66,-32,-18}, -{66,-32,-17}, -{66,-32,-16}, -{66,-32,-15}, -{66,-32,-14}, -{66,-32,-13}, -{66,-32,-12}, -{66,-32,-11}, -{66,-32,-10}, -{66,-32,-9}, -{66,-32,-8}, -{66,-32,-7}, -{66,-32,-6}, -{66,-32,-5}, -{66,-32,-4}, -{66,-32,-3}, -{66,-32,-2}, -{66,-32,-1}, -{66,-32,0}, -{66,-32,1}, -{66,-32,2}, -{66,-32,3}, -{66,-32,4}, -{66,-32,5}, -{66,-32,6}, -{66,-32,7}, -{66,-32,8}, -{66,-32,9}, -{66,-32,10}, -{66,-32,11}, -{66,-32,12}, -{66,-32,13}, -{66,-32,14}, -{66,-32,15}, -{66,-32,16}, -{66,-32,17}, -{66,-32,18}, -{66,-32,19}, -{66,-32,20}, -{66,-32,21}, -{66,-32,22}, -{66,-32,23}, -{66,-32,24}, -{66,-32,25}, -{66,-32,26}, -{66,-32,27}, -{66,-32,28}, -{66,-32,29}, -{66,-32,30}, -{66,-32,31}, -{66,-32,32}, -{66,-32,33}, -{66,-32,34}, -{66,-32,35}, -{66,-32,36}, -{66,-32,37}, -{66,-32,38}, -{66,-32,39}, -{66,-32,40}, -{66,-32,41}, -{66,-32,42}, -{66,-32,43}, -{66,-32,44}, -{66,-32,45}, -{66,-32,46}, -{66,-32,47}, -{66,-32,48}, -{66,-32,49}, -{66,-32,50}, -{66,-32,51}, -{66,-32,52}, -{66,-32,53}, -{66,-32,54}, -{66,-32,55}, -{66,-32,56}, -{66,-32,57}, -{66,-32,58}, -{66,-32,59}, -{66,-32,60}, -{66,-32,61}, -{66,-32,62}, -{66,-32,63}, -{66,-32,64}, -{66,-32,65}, -{66,-32,66}, -{66,-32,67}, -{66,-31,-19}, -{66,-31,-18}, -{66,-31,-17}, -{66,-31,-16}, -{66,-31,-15}, -{66,-31,-14}, -{66,-31,-13}, -{66,-31,-12}, -{66,-31,-11}, -{66,-31,-10}, -{66,-31,-9}, -{66,-31,-8}, -{66,-31,-7}, -{66,-31,-6}, -{66,-31,-5}, -{66,-31,-4}, -{66,-31,-3}, -{66,-31,-2}, -{66,-31,-1}, -{66,-31,0}, -{66,-31,1}, -{66,-31,2}, -{66,-31,3}, -{66,-31,4}, -{66,-31,5}, -{66,-31,6}, -{66,-31,7}, -{66,-31,8}, -{66,-31,9}, -{66,-31,10}, -{66,-31,11}, -{66,-31,12}, -{66,-31,13}, -{66,-31,14}, -{66,-31,15}, -{66,-31,16}, -{66,-31,17}, -{66,-31,18}, -{66,-31,19}, -{66,-31,20}, -{66,-31,21}, -{66,-31,22}, -{66,-31,23}, -{66,-31,24}, -{66,-31,25}, -{66,-31,26}, -{66,-31,27}, -{66,-31,28}, -{66,-31,29}, -{66,-31,30}, -{66,-31,31}, -{66,-31,32}, -{66,-31,33}, -{66,-31,34}, -{66,-31,35}, -{66,-31,36}, -{66,-31,37}, -{66,-31,38}, -{66,-31,39}, -{66,-31,40}, -{66,-31,41}, -{66,-31,42}, -{66,-31,43}, -{66,-31,44}, -{66,-31,45}, -{66,-31,46}, -{66,-31,47}, -{66,-31,48}, -{66,-31,49}, -{66,-31,50}, -{66,-31,51}, -{66,-31,52}, -{66,-31,53}, -{66,-31,54}, -{66,-31,55}, -{66,-31,56}, -{66,-31,57}, -{66,-31,58}, -{66,-31,59}, -{66,-31,60}, -{66,-31,61}, -{66,-31,62}, -{66,-31,63}, -{66,-31,64}, -{66,-31,65}, -{66,-31,66}, -{66,-31,67}, -{66,-30,-21}, -{66,-30,-20}, -{66,-30,-19}, -{66,-30,-18}, -{66,-30,-17}, -{66,-30,-16}, -{66,-30,-15}, -{66,-30,-14}, -{66,-30,-13}, -{66,-30,-12}, -{66,-30,-11}, -{66,-30,-10}, -{66,-30,-9}, -{66,-30,-8}, -{66,-30,-7}, -{66,-30,-6}, -{66,-30,-5}, -{66,-30,-4}, -{66,-30,-3}, -{66,-30,-2}, -{66,-30,-1}, -{66,-30,0}, -{66,-30,1}, -{66,-30,2}, -{66,-30,3}, -{66,-30,4}, -{66,-30,5}, -{66,-30,6}, -{66,-30,7}, -{66,-30,8}, -{66,-30,9}, -{66,-30,10}, -{66,-30,11}, -{66,-30,12}, -{66,-30,13}, -{66,-30,14}, -{66,-30,15}, -{66,-30,16}, -{66,-30,17}, -{66,-30,18}, -{66,-30,19}, -{66,-30,20}, -{66,-30,21}, -{66,-30,22}, -{66,-30,23}, -{66,-30,24}, -{66,-30,25}, -{66,-30,26}, -{66,-30,27}, -{66,-30,28}, -{66,-30,29}, -{66,-30,30}, -{66,-30,31}, -{66,-30,32}, -{66,-30,33}, -{66,-30,34}, -{66,-30,35}, -{66,-30,36}, -{66,-30,37}, -{66,-30,38}, -{66,-30,39}, -{66,-30,40}, -{66,-30,41}, -{66,-30,42}, -{66,-30,43}, -{66,-30,44}, -{66,-30,45}, -{66,-30,46}, -{66,-30,47}, -{66,-30,48}, -{66,-30,49}, -{66,-30,50}, -{66,-30,51}, -{66,-30,52}, -{66,-30,53}, -{66,-30,54}, -{66,-30,55}, -{66,-30,56}, -{66,-30,57}, -{66,-30,58}, -{66,-30,59}, -{66,-30,60}, -{66,-30,61}, -{66,-30,62}, -{66,-30,63}, -{66,-30,64}, -{66,-30,65}, -{66,-30,66}, -{66,-30,67}, -{66,-29,-22}, -{66,-29,-21}, -{66,-29,-20}, -{66,-29,-19}, -{66,-29,-18}, -{66,-29,-17}, -{66,-29,-16}, -{66,-29,-15}, -{66,-29,-14}, -{66,-29,-13}, -{66,-29,-12}, -{66,-29,-11}, -{66,-29,-10}, -{66,-29,-9}, -{66,-29,-8}, -{66,-29,-7}, -{66,-29,-6}, -{66,-29,-5}, -{66,-29,-4}, -{66,-29,-3}, -{66,-29,-2}, -{66,-29,-1}, -{66,-29,0}, -{66,-29,1}, -{66,-29,2}, -{66,-29,3}, -{66,-29,4}, -{66,-29,5}, -{66,-29,6}, -{66,-29,7}, -{66,-29,8}, -{66,-29,9}, -{66,-29,10}, -{66,-29,11}, -{66,-29,12}, -{66,-29,13}, -{66,-29,14}, -{66,-29,15}, -{66,-29,16}, -{66,-29,17}, -{66,-29,18}, -{66,-29,19}, -{66,-29,20}, -{66,-29,21}, -{66,-29,22}, -{66,-29,23}, -{66,-29,24}, -{66,-29,25}, -{66,-29,26}, -{66,-29,27}, -{66,-29,28}, -{66,-29,29}, -{66,-29,30}, -{66,-29,31}, -{66,-29,32}, -{66,-29,33}, -{66,-29,34}, -{66,-29,35}, -{66,-29,36}, -{66,-29,37}, -{66,-29,38}, -{66,-29,39}, -{66,-29,40}, -{66,-29,41}, -{66,-29,42}, -{66,-29,43}, -{66,-29,44}, -{66,-29,45}, -{66,-29,46}, -{66,-29,47}, -{66,-29,48}, -{66,-29,49}, -{66,-29,50}, -{66,-29,51}, -{66,-29,52}, -{66,-29,53}, -{66,-29,54}, -{66,-29,55}, -{66,-29,56}, -{66,-29,57}, -{66,-29,58}, -{66,-29,59}, -{66,-29,60}, -{66,-29,61}, -{66,-29,62}, -{66,-29,63}, -{66,-29,64}, -{66,-29,65}, -{66,-29,66}, -{66,-29,67}, -{66,-28,-24}, -{66,-28,-23}, -{66,-28,-22}, -{66,-28,-21}, -{66,-28,-20}, -{66,-28,-19}, -{66,-28,-18}, -{66,-28,-17}, -{66,-28,-16}, -{66,-28,-15}, -{66,-28,-14}, -{66,-28,-13}, -{66,-28,-12}, -{66,-28,-11}, -{66,-28,-10}, -{66,-28,-9}, -{66,-28,-8}, -{66,-28,-7}, -{66,-28,-6}, -{66,-28,-5}, -{66,-28,-4}, -{66,-28,-3}, -{66,-28,-2}, -{66,-28,-1}, -{66,-28,0}, -{66,-28,1}, -{66,-28,2}, -{66,-28,3}, -{66,-28,4}, -{66,-28,5}, -{66,-28,6}, -{66,-28,7}, -{66,-28,8}, -{66,-28,9}, -{66,-28,10}, -{66,-28,11}, -{66,-28,12}, -{66,-28,13}, -{66,-28,14}, -{66,-28,15}, -{66,-28,16}, -{66,-28,17}, -{66,-28,18}, -{66,-28,19}, -{66,-28,20}, -{66,-28,21}, -{66,-28,22}, -{66,-28,23}, -{66,-28,24}, -{66,-28,25}, -{66,-28,26}, -{66,-28,27}, -{66,-28,28}, -{66,-28,29}, -{66,-28,30}, -{66,-28,31}, -{66,-28,32}, -{66,-28,33}, -{66,-28,34}, -{66,-28,35}, -{66,-28,36}, -{66,-28,37}, -{66,-28,38}, -{66,-28,39}, -{66,-28,40}, -{66,-28,41}, -{66,-28,42}, -{66,-28,43}, -{66,-28,44}, -{66,-28,45}, -{66,-28,46}, -{66,-28,47}, -{66,-28,48}, -{66,-28,49}, -{66,-28,50}, -{66,-28,51}, -{66,-28,52}, -{66,-28,53}, -{66,-28,54}, -{66,-28,55}, -{66,-28,56}, -{66,-28,57}, -{66,-28,58}, -{66,-28,59}, -{66,-28,60}, -{66,-28,61}, -{66,-28,62}, -{66,-28,63}, -{66,-28,64}, -{66,-28,65}, -{66,-28,66}, -{66,-28,67}, -{66,-27,-25}, -{66,-27,-24}, -{66,-27,-23}, -{66,-27,-22}, -{66,-27,-21}, -{66,-27,-20}, -{66,-27,-19}, -{66,-27,-18}, -{66,-27,-17}, -{66,-27,-16}, -{66,-27,-15}, -{66,-27,-14}, -{66,-27,-13}, -{66,-27,-12}, -{66,-27,-11}, -{66,-27,-10}, -{66,-27,-9}, -{66,-27,-8}, -{66,-27,-7}, -{66,-27,-6}, -{66,-27,-5}, -{66,-27,-4}, -{66,-27,-3}, -{66,-27,-2}, -{66,-27,-1}, -{66,-27,0}, -{66,-27,1}, -{66,-27,2}, -{66,-27,3}, -{66,-27,4}, -{66,-27,5}, -{66,-27,6}, -{66,-27,7}, -{66,-27,8}, -{66,-27,9}, -{66,-27,10}, -{66,-27,11}, -{66,-27,12}, -{66,-27,13}, -{66,-27,14}, -{66,-27,15}, -{66,-27,16}, -{66,-27,17}, -{66,-27,18}, -{66,-27,19}, -{66,-27,20}, -{66,-27,21}, -{66,-27,22}, -{66,-27,23}, -{66,-27,24}, -{66,-27,25}, -{66,-27,26}, -{66,-27,27}, -{66,-27,28}, -{66,-27,29}, -{66,-27,30}, -{66,-27,31}, -{66,-27,32}, -{66,-27,33}, -{66,-27,34}, -{66,-27,35}, -{66,-27,36}, -{66,-27,37}, -{66,-27,38}, -{66,-27,39}, -{66,-27,40}, -{66,-27,41}, -{66,-27,42}, -{66,-27,43}, -{66,-27,44}, -{66,-27,45}, -{66,-27,46}, -{66,-27,47}, -{66,-27,48}, -{66,-27,49}, -{66,-27,50}, -{66,-27,51}, -{66,-27,52}, -{66,-27,53}, -{66,-27,54}, -{66,-27,55}, -{66,-27,56}, -{66,-27,57}, -{66,-27,58}, -{66,-27,59}, -{66,-27,60}, -{66,-27,61}, -{66,-27,62}, -{66,-27,63}, -{66,-27,64}, -{66,-27,65}, -{66,-27,66}, -{66,-27,67}, -{66,-26,-26}, -{66,-26,-25}, -{66,-26,-24}, -{66,-26,-23}, -{66,-26,-22}, -{66,-26,-21}, -{66,-26,-20}, -{66,-26,-19}, -{66,-26,-18}, -{66,-26,-17}, -{66,-26,-16}, -{66,-26,-15}, -{66,-26,-14}, -{66,-26,-13}, -{66,-26,-12}, -{66,-26,-11}, -{66,-26,-10}, -{66,-26,-9}, -{66,-26,-8}, -{66,-26,-7}, -{66,-26,-6}, -{66,-26,-5}, -{66,-26,-4}, -{66,-26,-3}, -{66,-26,-2}, -{66,-26,-1}, -{66,-26,0}, -{66,-26,1}, -{66,-26,2}, -{66,-26,3}, -{66,-26,4}, -{66,-26,5}, -{66,-26,6}, -{66,-26,7}, -{66,-26,8}, -{66,-26,9}, -{66,-26,10}, -{66,-26,11}, -{66,-26,12}, -{66,-26,13}, -{66,-26,14}, -{66,-26,15}, -{66,-26,16}, -{66,-26,17}, -{66,-26,18}, -{66,-26,19}, -{66,-26,20}, -{66,-26,21}, -{66,-26,22}, -{66,-26,23}, -{66,-26,24}, -{66,-26,25}, -{66,-26,26}, -{66,-26,27}, -{66,-26,28}, -{66,-26,29}, -{66,-26,30}, -{66,-26,31}, -{66,-26,32}, -{66,-26,33}, -{66,-26,34}, -{66,-26,35}, -{66,-26,36}, -{66,-26,37}, -{66,-26,38}, -{66,-26,39}, -{66,-26,40}, -{66,-26,41}, -{66,-26,42}, -{66,-26,43}, -{66,-26,44}, -{66,-26,45}, -{66,-26,46}, -{66,-26,47}, -{66,-26,48}, -{66,-26,49}, -{66,-26,50}, -{66,-26,51}, -{66,-26,52}, -{66,-26,53}, -{66,-26,54}, -{66,-26,55}, -{66,-26,56}, -{66,-26,57}, -{66,-26,58}, -{66,-26,59}, -{66,-26,60}, -{66,-26,61}, -{66,-26,62}, -{66,-26,63}, -{66,-26,64}, -{66,-26,65}, -{66,-26,66}, -{66,-26,67}, -{66,-26,68}, -{66,-25,-28}, -{66,-25,-27}, -{66,-25,-26}, -{66,-25,-25}, -{66,-25,-24}, -{66,-25,-23}, -{66,-25,-22}, -{66,-25,-21}, -{66,-25,-20}, -{66,-25,-19}, -{66,-25,-18}, -{66,-25,-17}, -{66,-25,-16}, -{66,-25,-15}, -{66,-25,-14}, -{66,-25,-13}, -{66,-25,-12}, -{66,-25,-11}, -{66,-25,-10}, -{66,-25,-9}, -{66,-25,-8}, -{66,-25,-7}, -{66,-25,-6}, -{66,-25,-5}, -{66,-25,-4}, -{66,-25,-3}, -{66,-25,-2}, -{66,-25,-1}, -{66,-25,0}, -{66,-25,1}, -{66,-25,2}, -{66,-25,3}, -{66,-25,4}, -{66,-25,5}, -{66,-25,6}, -{66,-25,7}, -{66,-25,8}, -{66,-25,9}, -{66,-25,10}, -{66,-25,11}, -{66,-25,12}, -{66,-25,13}, -{66,-25,14}, -{66,-25,15}, -{66,-25,16}, -{66,-25,17}, -{66,-25,18}, -{66,-25,19}, -{66,-25,20}, -{66,-25,21}, -{66,-25,22}, -{66,-25,23}, -{66,-25,24}, -{66,-25,25}, -{66,-25,26}, -{66,-25,27}, -{66,-25,28}, -{66,-25,29}, -{66,-25,30}, -{66,-25,31}, -{66,-25,32}, -{66,-25,33}, -{66,-25,34}, -{66,-25,35}, -{66,-25,36}, -{66,-25,37}, -{66,-25,38}, -{66,-25,39}, -{66,-25,40}, -{66,-25,41}, -{66,-25,42}, -{66,-25,43}, -{66,-25,44}, -{66,-25,45}, -{66,-25,46}, -{66,-25,47}, -{66,-25,48}, -{66,-25,49}, -{66,-25,50}, -{66,-25,51}, -{66,-25,52}, -{66,-25,53}, -{66,-25,54}, -{66,-25,55}, -{66,-25,56}, -{66,-25,57}, -{66,-25,58}, -{66,-25,59}, -{66,-25,60}, -{66,-25,61}, -{66,-25,62}, -{66,-25,63}, -{66,-25,64}, -{66,-25,65}, -{66,-25,66}, -{66,-25,67}, -{66,-25,68}, -{66,-24,-29}, -{66,-24,-28}, -{66,-24,-27}, -{66,-24,-26}, -{66,-24,-25}, -{66,-24,-24}, -{66,-24,-23}, -{66,-24,-22}, -{66,-24,-21}, -{66,-24,-20}, -{66,-24,-19}, -{66,-24,-18}, -{66,-24,-17}, -{66,-24,-16}, -{66,-24,-15}, -{66,-24,-14}, -{66,-24,-13}, -{66,-24,-12}, -{66,-24,-11}, -{66,-24,-10}, -{66,-24,-9}, -{66,-24,-8}, -{66,-24,-7}, -{66,-24,-6}, -{66,-24,-5}, -{66,-24,-4}, -{66,-24,-3}, -{66,-24,-2}, -{66,-24,-1}, -{66,-24,0}, -{66,-24,1}, -{66,-24,2}, -{66,-24,3}, -{66,-24,4}, -{66,-24,5}, -{66,-24,6}, -{66,-24,7}, -{66,-24,8}, -{66,-24,9}, -{66,-24,10}, -{66,-24,11}, -{66,-24,12}, -{66,-24,13}, -{66,-24,14}, -{66,-24,15}, -{66,-24,16}, -{66,-24,17}, -{66,-24,18}, -{66,-24,19}, -{66,-24,20}, -{66,-24,21}, -{66,-24,22}, -{66,-24,23}, -{66,-24,24}, -{66,-24,25}, -{66,-24,26}, -{66,-24,27}, -{66,-24,28}, -{66,-24,29}, -{66,-24,30}, -{66,-24,31}, -{66,-24,32}, -{66,-24,33}, -{66,-24,34}, -{66,-24,35}, -{66,-24,36}, -{66,-24,37}, -{66,-24,38}, -{66,-24,39}, -{66,-24,40}, -{66,-24,41}, -{66,-24,42}, -{66,-24,43}, -{66,-24,44}, -{66,-24,45}, -{66,-24,46}, -{66,-24,47}, -{66,-24,48}, -{66,-24,49}, -{66,-24,50}, -{66,-24,51}, -{66,-24,52}, -{66,-24,53}, -{66,-24,54}, -{66,-24,55}, -{66,-24,56}, -{66,-24,57}, -{66,-24,58}, -{66,-24,59}, -{66,-24,60}, -{66,-24,61}, -{66,-24,62}, -{66,-24,63}, -{66,-24,64}, -{66,-24,65}, -{66,-24,66}, -{66,-24,67}, -{66,-24,68}, -{66,-23,-30}, -{66,-23,-29}, -{66,-23,-28}, -{66,-23,-27}, -{66,-23,-26}, -{66,-23,-25}, -{66,-23,-24}, -{66,-23,-23}, -{66,-23,-22}, -{66,-23,-21}, -{66,-23,-20}, -{66,-23,-19}, -{66,-23,-18}, -{66,-23,-17}, -{66,-23,-16}, -{66,-23,-15}, -{66,-23,-14}, -{66,-23,-13}, -{66,-23,-12}, -{66,-23,-11}, -{66,-23,-10}, -{66,-23,-9}, -{66,-23,-8}, -{66,-23,-7}, -{66,-23,-6}, -{66,-23,-5}, -{66,-23,-4}, -{66,-23,-3}, -{66,-23,-2}, -{66,-23,-1}, -{66,-23,0}, -{66,-23,1}, -{66,-23,2}, -{66,-23,3}, -{66,-23,4}, -{66,-23,5}, -{66,-23,6}, -{66,-23,7}, -{66,-23,8}, -{66,-23,9}, -{66,-23,10}, -{66,-23,11}, -{66,-23,12}, -{66,-23,13}, -{66,-23,14}, -{66,-23,15}, -{66,-23,16}, -{66,-23,17}, -{66,-23,18}, -{66,-23,19}, -{66,-23,20}, -{66,-23,21}, -{66,-23,22}, -{66,-23,23}, -{66,-23,24}, -{66,-23,25}, -{66,-23,26}, -{66,-23,27}, -{66,-23,28}, -{66,-23,29}, -{66,-23,30}, -{66,-23,31}, -{66,-23,32}, -{66,-23,33}, -{66,-23,34}, -{66,-23,35}, -{66,-23,36}, -{66,-23,37}, -{66,-23,38}, -{66,-23,39}, -{66,-23,40}, -{66,-23,41}, -{66,-23,42}, -{66,-23,43}, -{66,-23,44}, -{66,-23,45}, -{66,-23,46}, -{66,-23,47}, -{66,-23,48}, -{66,-23,49}, -{66,-23,50}, -{66,-23,51}, -{66,-23,52}, -{66,-23,53}, -{66,-23,54}, -{66,-23,55}, -{66,-23,56}, -{66,-23,57}, -{66,-23,58}, -{66,-23,59}, -{66,-23,60}, -{66,-23,61}, -{66,-23,62}, -{66,-23,63}, -{66,-23,64}, -{66,-23,65}, -{66,-23,66}, -{66,-23,67}, -{66,-23,68}, -{66,-22,-32}, -{66,-22,-31}, -{66,-22,-30}, -{66,-22,-29}, -{66,-22,-28}, -{66,-22,-27}, -{66,-22,-26}, -{66,-22,-25}, -{66,-22,-24}, -{66,-22,-23}, -{66,-22,-22}, -{66,-22,-21}, -{66,-22,-20}, -{66,-22,-19}, -{66,-22,-18}, -{66,-22,-17}, -{66,-22,-16}, -{66,-22,-15}, -{66,-22,-14}, -{66,-22,-13}, -{66,-22,-12}, -{66,-22,-11}, -{66,-22,-10}, -{66,-22,-9}, -{66,-22,-8}, -{66,-22,-7}, -{66,-22,-6}, -{66,-22,-5}, -{66,-22,-4}, -{66,-22,-3}, -{66,-22,-2}, -{66,-22,-1}, -{66,-22,0}, -{66,-22,1}, -{66,-22,2}, -{66,-22,3}, -{66,-22,4}, -{66,-22,5}, -{66,-22,6}, -{66,-22,7}, -{66,-22,8}, -{66,-22,9}, -{66,-22,10}, -{66,-22,11}, -{66,-22,12}, -{66,-22,13}, -{66,-22,14}, -{66,-22,15}, -{66,-22,16}, -{66,-22,17}, -{66,-22,18}, -{66,-22,19}, -{66,-22,20}, -{66,-22,21}, -{66,-22,22}, -{66,-22,23}, -{66,-22,24}, -{66,-22,25}, -{66,-22,26}, -{66,-22,27}, -{66,-22,28}, -{66,-22,29}, -{66,-22,30}, -{66,-22,31}, -{66,-22,32}, -{66,-22,33}, -{66,-22,34}, -{66,-22,35}, -{66,-22,36}, -{66,-22,37}, -{66,-22,38}, -{66,-22,39}, -{66,-22,40}, -{66,-22,41}, -{66,-22,42}, -{66,-22,43}, -{66,-22,44}, -{66,-22,45}, -{66,-22,46}, -{66,-22,47}, -{66,-22,48}, -{66,-22,49}, -{66,-22,50}, -{66,-22,51}, -{66,-22,52}, -{66,-22,53}, -{66,-22,54}, -{66,-22,55}, -{66,-22,56}, -{66,-22,57}, -{66,-22,58}, -{66,-22,59}, -{66,-22,60}, -{66,-22,61}, -{66,-22,62}, -{66,-22,63}, -{66,-22,64}, -{66,-22,65}, -{66,-22,66}, -{66,-22,67}, -{66,-22,68}, -{66,-21,-33}, -{66,-21,-32}, -{66,-21,-31}, -{66,-21,-30}, -{66,-21,-29}, -{66,-21,-28}, -{66,-21,-27}, -{66,-21,-26}, -{66,-21,-25}, -{66,-21,-24}, -{66,-21,-23}, -{66,-21,-22}, -{66,-21,-21}, -{66,-21,-20}, -{66,-21,-19}, -{66,-21,-18}, -{66,-21,-17}, -{66,-21,-16}, -{66,-21,-15}, -{66,-21,-14}, -{66,-21,-13}, -{66,-21,-12}, -{66,-21,-11}, -{66,-21,-10}, -{66,-21,-9}, -{66,-21,-8}, -{66,-21,-7}, -{66,-21,-6}, -{66,-21,-5}, -{66,-21,-4}, -{66,-21,-3}, -{66,-21,-2}, -{66,-21,-1}, -{66,-21,0}, -{66,-21,1}, -{66,-21,2}, -{66,-21,3}, -{66,-21,4}, -{66,-21,5}, -{66,-21,6}, -{66,-21,7}, -{66,-21,8}, -{66,-21,9}, -{66,-21,10}, -{66,-21,11}, -{66,-21,12}, -{66,-21,13}, -{66,-21,14}, -{66,-21,15}, -{66,-21,16}, -{66,-21,17}, -{66,-21,18}, -{66,-21,19}, -{66,-21,20}, -{66,-21,21}, -{66,-21,22}, -{66,-21,23}, -{66,-21,24}, -{66,-21,25}, -{66,-21,26}, -{66,-21,27}, -{66,-21,28}, -{66,-21,29}, -{66,-21,30}, -{66,-21,31}, -{66,-21,32}, -{66,-21,33}, -{66,-21,34}, -{66,-21,35}, -{66,-21,36}, -{66,-21,37}, -{66,-21,38}, -{66,-21,39}, -{66,-21,40}, -{66,-21,41}, -{66,-21,42}, -{66,-21,43}, -{66,-21,44}, -{66,-21,45}, -{66,-21,46}, -{66,-21,47}, -{66,-21,48}, -{66,-21,49}, -{66,-21,50}, -{66,-21,51}, -{66,-21,52}, -{66,-21,53}, -{66,-21,54}, -{66,-21,55}, -{66,-21,56}, -{66,-21,57}, -{66,-21,58}, -{66,-21,59}, -{66,-21,60}, -{66,-21,61}, -{66,-21,62}, -{66,-21,63}, -{66,-21,64}, -{66,-21,65}, -{66,-21,66}, -{66,-21,67}, -{66,-21,68}, -{66,-20,-34}, -{66,-20,-33}, -{66,-20,-32}, -{66,-20,-31}, -{66,-20,-30}, -{66,-20,-29}, -{66,-20,-28}, -{66,-20,-27}, -{66,-20,-26}, -{66,-20,-25}, -{66,-20,-24}, -{66,-20,-23}, -{66,-20,-22}, -{66,-20,-21}, -{66,-20,-20}, -{66,-20,-19}, -{66,-20,-18}, -{66,-20,-17}, -{66,-20,-16}, -{66,-20,-15}, -{66,-20,-14}, -{66,-20,-13}, -{66,-20,-12}, -{66,-20,-11}, -{66,-20,-10}, -{66,-20,-9}, -{66,-20,-8}, -{66,-20,-7}, -{66,-20,-6}, -{66,-20,-5}, -{66,-20,-4}, -{66,-20,-3}, -{66,-20,-2}, -{66,-20,-1}, -{66,-20,0}, -{66,-20,1}, -{66,-20,2}, -{66,-20,3}, -{66,-20,4}, -{66,-20,5}, -{66,-20,6}, -{66,-20,7}, -{66,-20,8}, -{66,-20,9}, -{66,-20,10}, -{66,-20,11}, -{66,-20,12}, -{66,-20,13}, -{66,-20,14}, -{66,-20,15}, -{66,-20,16}, -{66,-20,17}, -{66,-20,18}, -{66,-20,19}, -{66,-20,20}, -{66,-20,21}, -{66,-20,22}, -{66,-20,23}, -{66,-20,24}, -{66,-20,25}, -{66,-20,26}, -{66,-20,27}, -{66,-20,28}, -{66,-20,29}, -{66,-20,30}, -{66,-20,31}, -{66,-20,32}, -{66,-20,33}, -{66,-20,34}, -{66,-20,35}, -{66,-20,36}, -{66,-20,37}, -{66,-20,38}, -{66,-20,39}, -{66,-20,40}, -{66,-20,41}, -{66,-20,42}, -{66,-20,43}, -{66,-20,44}, -{66,-20,45}, -{66,-20,46}, -{66,-20,47}, -{66,-20,48}, -{66,-20,49}, -{66,-20,50}, -{66,-20,51}, -{66,-20,52}, -{66,-20,53}, -{66,-20,54}, -{66,-20,55}, -{66,-20,56}, -{66,-20,57}, -{66,-20,58}, -{66,-20,59}, -{66,-20,60}, -{66,-20,61}, -{66,-20,62}, -{66,-20,63}, -{66,-20,64}, -{66,-20,65}, -{66,-20,66}, -{66,-20,67}, -{66,-20,68}, -{66,-19,-36}, -{66,-19,-35}, -{66,-19,-34}, -{66,-19,-33}, -{66,-19,-32}, -{66,-19,-31}, -{66,-19,-30}, -{66,-19,-29}, -{66,-19,-28}, -{66,-19,-27}, -{66,-19,-26}, -{66,-19,-25}, -{66,-19,-24}, -{66,-19,-23}, -{66,-19,-22}, -{66,-19,-21}, -{66,-19,-20}, -{66,-19,-19}, -{66,-19,-18}, -{66,-19,-17}, -{66,-19,-16}, -{66,-19,-15}, -{66,-19,-14}, -{66,-19,-13}, -{66,-19,-12}, -{66,-19,-11}, -{66,-19,-10}, -{66,-19,-9}, -{66,-19,-8}, -{66,-19,-7}, -{66,-19,-6}, -{66,-19,-5}, -{66,-19,-4}, -{66,-19,-3}, -{66,-19,-2}, -{66,-19,-1}, -{66,-19,0}, -{66,-19,1}, -{66,-19,2}, -{66,-19,3}, -{66,-19,4}, -{66,-19,5}, -{66,-19,6}, -{66,-19,7}, -{66,-19,8}, -{66,-19,9}, -{66,-19,10}, -{66,-19,11}, -{66,-19,12}, -{66,-19,13}, -{66,-19,14}, -{66,-19,15}, -{66,-19,16}, -{66,-19,17}, -{66,-19,18}, -{66,-19,19}, -{66,-19,20}, -{66,-19,21}, -{66,-19,22}, -{66,-19,23}, -{66,-19,24}, -{66,-19,25}, -{66,-19,26}, -{66,-19,27}, -{66,-19,28}, -{66,-19,29}, -{66,-19,30}, -{66,-19,31}, -{66,-19,32}, -{66,-19,33}, -{66,-19,34}, -{66,-19,35}, -{66,-19,36}, -{66,-19,37}, -{66,-19,38}, -{66,-19,39}, -{66,-19,40}, -{66,-19,41}, -{66,-19,42}, -{66,-19,43}, -{66,-19,44}, -{66,-19,45}, -{66,-19,46}, -{66,-19,47}, -{66,-19,48}, -{66,-19,49}, -{66,-19,50}, -{66,-19,51}, -{66,-19,52}, -{66,-19,53}, -{66,-19,54}, -{66,-19,55}, -{66,-19,56}, -{66,-19,57}, -{66,-19,58}, -{66,-19,59}, -{66,-19,60}, -{66,-19,61}, -{66,-19,62}, -{66,-19,63}, -{66,-19,64}, -{66,-19,65}, -{66,-19,66}, -{66,-19,67}, -{66,-19,68}, -{66,-18,-37}, -{66,-18,-36}, -{66,-18,-35}, -{66,-18,-34}, -{66,-18,-33}, -{66,-18,-32}, -{66,-18,-31}, -{66,-18,-30}, -{66,-18,-29}, -{66,-18,-28}, -{66,-18,-27}, -{66,-18,-26}, -{66,-18,-25}, -{66,-18,-24}, -{66,-18,-23}, -{66,-18,-22}, -{66,-18,-21}, -{66,-18,-20}, -{66,-18,-19}, -{66,-18,-18}, -{66,-18,-17}, -{66,-18,-16}, -{66,-18,-15}, -{66,-18,-14}, -{66,-18,-13}, -{66,-18,-12}, -{66,-18,-11}, -{66,-18,-10}, -{66,-18,-9}, -{66,-18,-8}, -{66,-18,-7}, -{66,-18,-6}, -{66,-18,-5}, -{66,-18,-4}, -{66,-18,-3}, -{66,-18,-2}, -{66,-18,-1}, -{66,-18,0}, -{66,-18,1}, -{66,-18,2}, -{66,-18,3}, -{66,-18,4}, -{66,-18,5}, -{66,-18,6}, -{66,-18,7}, -{66,-18,8}, -{66,-18,9}, -{66,-18,10}, -{66,-18,11}, -{66,-18,12}, -{66,-18,13}, -{66,-18,14}, -{66,-18,15}, -{66,-18,16}, -{66,-18,17}, -{66,-18,18}, -{66,-18,19}, -{66,-18,20}, -{66,-18,21}, -{66,-18,22}, -{66,-18,23}, -{66,-18,24}, -{66,-18,25}, -{66,-18,26}, -{66,-18,27}, -{66,-18,28}, -{66,-18,29}, -{66,-18,30}, -{66,-18,31}, -{66,-18,32}, -{66,-18,33}, -{66,-18,34}, -{66,-18,35}, -{66,-18,36}, -{66,-18,37}, -{66,-18,38}, -{66,-18,39}, -{66,-18,40}, -{66,-18,41}, -{66,-18,42}, -{66,-18,43}, -{66,-18,44}, -{66,-18,45}, -{66,-18,46}, -{66,-18,47}, -{66,-18,48}, -{66,-18,49}, -{66,-18,50}, -{66,-18,51}, -{66,-18,52}, -{66,-18,53}, -{66,-18,54}, -{66,-18,55}, -{66,-18,56}, -{66,-18,57}, -{66,-18,58}, -{66,-18,59}, -{66,-18,60}, -{66,-18,61}, -{66,-18,62}, -{66,-18,63}, -{66,-18,64}, -{66,-18,65}, -{66,-18,66}, -{66,-18,67}, -{66,-18,68}, -{66,-17,-38}, -{66,-17,-37}, -{66,-17,-36}, -{66,-17,-35}, -{66,-17,-34}, -{66,-17,-33}, -{66,-17,-32}, -{66,-17,-31}, -{66,-17,-30}, -{66,-17,-29}, -{66,-17,-28}, -{66,-17,-27}, -{66,-17,-26}, -{66,-17,-25}, -{66,-17,-24}, -{66,-17,-23}, -{66,-17,-22}, -{66,-17,-21}, -{66,-17,-20}, -{66,-17,-19}, -{66,-17,-18}, -{66,-17,-17}, -{66,-17,-16}, -{66,-17,-15}, -{66,-17,-14}, -{66,-17,-13}, -{66,-17,-12}, -{66,-17,-11}, -{66,-17,-10}, -{66,-17,-9}, -{66,-17,-8}, -{66,-17,-7}, -{66,-17,-6}, -{66,-17,-5}, -{66,-17,-4}, -{66,-17,-3}, -{66,-17,-2}, -{66,-17,-1}, -{66,-17,0}, -{66,-17,1}, -{66,-17,2}, -{66,-17,3}, -{66,-17,4}, -{66,-17,5}, -{66,-17,6}, -{66,-17,7}, -{66,-17,8}, -{66,-17,9}, -{66,-17,10}, -{66,-17,11}, -{66,-17,12}, -{66,-17,13}, -{66,-17,14}, -{66,-17,15}, -{66,-17,16}, -{66,-17,17}, -{66,-17,18}, -{66,-17,19}, -{66,-17,20}, -{66,-17,21}, -{66,-17,22}, -{66,-17,23}, -{66,-17,24}, -{66,-17,25}, -{66,-17,26}, -{66,-17,27}, -{66,-17,28}, -{66,-17,29}, -{66,-17,30}, -{66,-17,31}, -{66,-17,32}, -{66,-17,33}, -{66,-17,34}, -{66,-17,35}, -{66,-17,36}, -{66,-17,37}, -{66,-17,38}, -{66,-17,39}, -{66,-17,40}, -{66,-17,41}, -{66,-17,42}, -{66,-17,43}, -{66,-17,44}, -{66,-17,45}, -{66,-17,46}, -{66,-17,47}, -{66,-17,48}, -{66,-17,49}, -{66,-17,50}, -{66,-17,51}, -{66,-17,52}, -{66,-17,53}, -{66,-17,54}, -{66,-17,55}, -{66,-17,56}, -{66,-17,57}, -{66,-17,58}, -{66,-17,59}, -{66,-17,60}, -{66,-17,61}, -{66,-17,62}, -{66,-17,63}, -{66,-17,64}, -{66,-17,65}, -{66,-17,66}, -{66,-17,67}, -{66,-17,68}, -{66,-16,-40}, -{66,-16,-39}, -{66,-16,-38}, -{66,-16,-37}, -{66,-16,-36}, -{66,-16,-35}, -{66,-16,-34}, -{66,-16,-33}, -{66,-16,-32}, -{66,-16,-31}, -{66,-16,-30}, -{66,-16,-29}, -{66,-16,-28}, -{66,-16,-27}, -{66,-16,-26}, -{66,-16,-25}, -{66,-16,-24}, -{66,-16,-23}, -{66,-16,-22}, -{66,-16,-21}, -{66,-16,-20}, -{66,-16,-19}, -{66,-16,-18}, -{66,-16,-17}, -{66,-16,-16}, -{66,-16,-15}, -{66,-16,-14}, -{66,-16,-13}, -{66,-16,-12}, -{66,-16,-11}, -{66,-16,-10}, -{66,-16,-9}, -{66,-16,-8}, -{66,-16,-7}, -{66,-16,-6}, -{66,-16,-5}, -{66,-16,-4}, -{66,-16,-3}, -{66,-16,-2}, -{66,-16,-1}, -{66,-16,0}, -{66,-16,1}, -{66,-16,2}, -{66,-16,3}, -{66,-16,4}, -{66,-16,5}, -{66,-16,6}, -{66,-16,7}, -{66,-16,8}, -{66,-16,9}, -{66,-16,10}, -{66,-16,11}, -{66,-16,12}, -{66,-16,13}, -{66,-16,14}, -{66,-16,15}, -{66,-16,16}, -{66,-16,17}, -{66,-16,18}, -{66,-16,19}, -{66,-16,20}, -{66,-16,21}, -{66,-16,22}, -{66,-16,23}, -{66,-16,24}, -{66,-16,25}, -{66,-16,26}, -{66,-16,27}, -{66,-16,28}, -{66,-16,29}, -{66,-16,30}, -{66,-16,31}, -{66,-16,32}, -{66,-16,33}, -{66,-16,34}, -{66,-16,35}, -{66,-16,36}, -{66,-16,37}, -{66,-16,38}, -{66,-16,39}, -{66,-16,40}, -{66,-16,41}, -{66,-16,42}, -{66,-16,43}, -{66,-16,44}, -{66,-16,45}, -{66,-16,46}, -{66,-16,47}, -{66,-16,48}, -{66,-16,49}, -{66,-16,50}, -{66,-16,51}, -{66,-16,52}, -{66,-16,53}, -{66,-16,54}, -{66,-16,55}, -{66,-16,56}, -{66,-16,57}, -{66,-16,58}, -{66,-16,59}, -{66,-16,60}, -{66,-16,61}, -{66,-16,62}, -{66,-16,63}, -{66,-16,64}, -{66,-16,65}, -{66,-16,66}, -{66,-16,67}, -{66,-16,68}, -{66,-15,-41}, -{66,-15,-40}, -{66,-15,-39}, -{66,-15,-38}, -{66,-15,-37}, -{66,-15,-36}, -{66,-15,-35}, -{66,-15,-34}, -{66,-15,-33}, -{66,-15,-32}, -{66,-15,-31}, -{66,-15,-30}, -{66,-15,-29}, -{66,-15,-28}, -{66,-15,-27}, -{66,-15,-26}, -{66,-15,-25}, -{66,-15,-24}, -{66,-15,-23}, -{66,-15,-22}, -{66,-15,-21}, -{66,-15,-20}, -{66,-15,-19}, -{66,-15,-18}, -{66,-15,-17}, -{66,-15,-16}, -{66,-15,-15}, -{66,-15,-14}, -{66,-15,-13}, -{66,-15,-12}, -{66,-15,-11}, -{66,-15,-10}, -{66,-15,-9}, -{66,-15,-8}, -{66,-15,-7}, -{66,-15,-6}, -{66,-15,-5}, -{66,-15,-4}, -{66,-15,-3}, -{66,-15,-2}, -{66,-15,-1}, -{66,-15,0}, -{66,-15,1}, -{66,-15,2}, -{66,-15,3}, -{66,-15,4}, -{66,-15,5}, -{66,-15,6}, -{66,-15,7}, -{66,-15,8}, -{66,-15,9}, -{66,-15,10}, -{66,-15,11}, -{66,-15,12}, -{66,-15,13}, -{66,-15,14}, -{66,-15,15}, -{66,-15,16}, -{66,-15,17}, -{66,-15,18}, -{66,-15,19}, -{66,-15,20}, -{66,-15,21}, -{66,-15,22}, -{66,-15,23}, -{66,-15,24}, -{66,-15,25}, -{66,-15,26}, -{66,-15,27}, -{66,-15,28}, -{66,-15,29}, -{66,-15,30}, -{66,-15,31}, -{66,-15,32}, -{66,-15,33}, -{66,-15,34}, -{66,-15,35}, -{66,-15,36}, -{66,-15,37}, -{66,-15,38}, -{66,-15,39}, -{66,-15,40}, -{66,-15,41}, -{66,-15,42}, -{66,-15,43}, -{66,-15,44}, -{66,-15,45}, -{66,-15,46}, -{66,-15,47}, -{66,-15,48}, -{66,-15,49}, -{66,-15,50}, -{66,-15,51}, -{66,-15,52}, -{66,-15,53}, -{66,-15,54}, -{66,-15,55}, -{66,-15,56}, -{66,-15,57}, -{66,-15,58}, -{66,-15,59}, -{66,-15,60}, -{66,-15,61}, -{66,-15,62}, -{66,-15,63}, -{66,-15,64}, -{66,-15,65}, -{66,-15,66}, -{66,-15,67}, -{66,-15,68}, -{66,-14,-42}, -{66,-14,-41}, -{66,-14,-40}, -{66,-14,-39}, -{66,-14,-38}, -{66,-14,-37}, -{66,-14,-36}, -{66,-14,-35}, -{66,-14,-34}, -{66,-14,-33}, -{66,-14,-32}, -{66,-14,-31}, -{66,-14,-30}, -{66,-14,-29}, -{66,-14,-28}, -{66,-14,-27}, -{66,-14,-26}, -{66,-14,-25}, -{66,-14,-24}, -{66,-14,-23}, -{66,-14,-22}, -{66,-14,-21}, -{66,-14,-20}, -{66,-14,-19}, -{66,-14,-18}, -{66,-14,-17}, -{66,-14,-16}, -{66,-14,-15}, -{66,-14,-14}, -{66,-14,-13}, -{66,-14,-12}, -{66,-14,-11}, -{66,-14,-10}, -{66,-14,-9}, -{66,-14,-8}, -{66,-14,-7}, -{66,-14,-6}, -{66,-14,-5}, -{66,-14,-4}, -{66,-14,-3}, -{66,-14,-2}, -{66,-14,-1}, -{66,-14,0}, -{66,-14,1}, -{66,-14,2}, -{66,-14,3}, -{66,-14,4}, -{66,-14,5}, -{66,-14,6}, -{66,-14,7}, -{66,-14,8}, -{66,-14,9}, -{66,-14,10}, -{66,-14,11}, -{66,-14,12}, -{66,-14,13}, -{66,-14,14}, -{66,-14,15}, -{66,-14,16}, -{66,-14,17}, -{66,-14,18}, -{66,-14,19}, -{66,-14,20}, -{66,-14,21}, -{66,-14,22}, -{66,-14,23}, -{66,-14,24}, -{66,-14,25}, -{66,-14,26}, -{66,-14,27}, -{66,-14,28}, -{66,-14,29}, -{66,-14,30}, -{66,-14,31}, -{66,-14,32}, -{66,-14,33}, -{66,-14,34}, -{66,-14,35}, -{66,-14,36}, -{66,-14,37}, -{66,-14,38}, -{66,-14,39}, -{66,-14,40}, -{66,-14,41}, -{66,-14,42}, -{66,-14,43}, -{66,-14,44}, -{66,-14,45}, -{66,-14,46}, -{66,-14,47}, -{66,-14,48}, -{66,-14,49}, -{66,-14,50}, -{66,-14,51}, -{66,-14,52}, -{66,-14,53}, -{66,-14,54}, -{66,-14,55}, -{66,-14,56}, -{66,-14,57}, -{66,-14,58}, -{66,-14,59}, -{66,-14,60}, -{66,-14,61}, -{66,-14,62}, -{66,-14,63}, -{66,-14,64}, -{66,-14,65}, -{66,-14,66}, -{66,-14,67}, -{66,-14,68}, -{66,-13,-43}, -{66,-13,-42}, -{66,-13,-41}, -{66,-13,-40}, -{66,-13,-39}, -{66,-13,-38}, -{66,-13,-37}, -{66,-13,-36}, -{66,-13,-35}, -{66,-13,-34}, -{66,-13,-33}, -{66,-13,-32}, -{66,-13,-31}, -{66,-13,-30}, -{66,-13,-29}, -{66,-13,-28}, -{66,-13,-27}, -{66,-13,-26}, -{66,-13,-25}, -{66,-13,-24}, -{66,-13,-23}, -{66,-13,-22}, -{66,-13,-21}, -{66,-13,-20}, -{66,-13,-19}, -{66,-13,-18}, -{66,-13,-17}, -{66,-13,-16}, -{66,-13,-15}, -{66,-13,-14}, -{66,-13,-13}, -{66,-13,-12}, -{66,-13,-11}, -{66,-13,-10}, -{66,-13,-9}, -{66,-13,-8}, -{66,-13,-7}, -{66,-13,-6}, -{66,-13,-5}, -{66,-13,-4}, -{66,-13,-3}, -{66,-13,-2}, -{66,-13,-1}, -{66,-13,0}, -{66,-13,1}, -{66,-13,2}, -{66,-13,3}, -{66,-13,4}, -{66,-13,5}, -{66,-13,6}, -{66,-13,7}, -{66,-13,8}, -{66,-13,9}, -{66,-13,10}, -{66,-13,11}, -{66,-13,12}, -{66,-13,13}, -{66,-13,14}, -{66,-13,15}, -{66,-13,16}, -{66,-13,17}, -{66,-13,18}, -{66,-13,19}, -{66,-13,20}, -{66,-13,21}, -{66,-13,22}, -{66,-13,23}, -{66,-13,24}, -{66,-13,25}, -{66,-13,26}, -{66,-13,27}, -{66,-13,28}, -{66,-13,29}, -{66,-13,30}, -{66,-13,31}, -{66,-13,32}, -{66,-13,33}, -{66,-13,34}, -{66,-13,35}, -{66,-13,36}, -{66,-13,37}, -{66,-13,38}, -{66,-13,39}, -{66,-13,40}, -{66,-13,41}, -{66,-13,42}, -{66,-13,43}, -{66,-13,44}, -{66,-13,45}, -{66,-13,46}, -{66,-13,47}, -{66,-13,48}, -{66,-13,49}, -{66,-13,50}, -{66,-13,51}, -{66,-13,52}, -{66,-13,53}, -{66,-13,54}, -{66,-13,55}, -{66,-13,56}, -{66,-13,57}, -{66,-13,58}, -{66,-13,59}, -{66,-13,60}, -{66,-13,61}, -{66,-13,62}, -{66,-13,63}, -{66,-13,64}, -{66,-13,65}, -{66,-13,66}, -{66,-13,67}, -{66,-13,68}, -{66,-12,-45}, -{66,-12,-44}, -{66,-12,-43}, -{66,-12,-42}, -{66,-12,-41}, -{66,-12,-40}, -{66,-12,-39}, -{66,-12,-38}, -{66,-12,-37}, -{66,-12,-36}, -{66,-12,-35}, -{66,-12,-34}, -{66,-12,-33}, -{66,-12,-32}, -{66,-12,-31}, -{66,-12,-30}, -{66,-12,-29}, -{66,-12,-28}, -{66,-12,-27}, -{66,-12,-26}, -{66,-12,-25}, -{66,-12,-24}, -{66,-12,-23}, -{66,-12,-22}, -{66,-12,-21}, -{66,-12,-20}, -{66,-12,-19}, -{66,-12,-18}, -{66,-12,-17}, -{66,-12,-16}, -{66,-12,-15}, -{66,-12,-14}, -{66,-12,-13}, -{66,-12,-12}, -{66,-12,-11}, -{66,-12,-10}, -{66,-12,-9}, -{66,-12,-8}, -{66,-12,-7}, -{66,-12,-6}, -{66,-12,-5}, -{66,-12,-4}, -{66,-12,-3}, -{66,-12,-2}, -{66,-12,-1}, -{66,-12,0}, -{66,-12,1}, -{66,-12,2}, -{66,-12,3}, -{66,-12,4}, -{66,-12,5}, -{66,-12,6}, -{66,-12,7}, -{66,-12,8}, -{66,-12,9}, -{66,-12,10}, -{66,-12,11}, -{66,-12,12}, -{66,-12,13}, -{66,-12,14}, -{66,-12,15}, -{66,-12,16}, -{66,-12,17}, -{66,-12,18}, -{66,-12,19}, -{66,-12,20}, -{66,-12,21}, -{66,-12,22}, -{66,-12,23}, -{66,-12,24}, -{66,-12,25}, -{66,-12,26}, -{66,-12,27}, -{66,-12,28}, -{66,-12,29}, -{66,-12,30}, -{66,-12,31}, -{66,-12,32}, -{66,-12,33}, -{66,-12,34}, -{66,-12,35}, -{66,-12,36}, -{66,-12,37}, -{66,-12,38}, -{66,-12,39}, -{66,-12,40}, -{66,-12,41}, -{66,-12,42}, -{66,-12,43}, -{66,-12,44}, -{66,-12,45}, -{66,-12,46}, -{66,-12,47}, -{66,-12,48}, -{66,-12,49}, -{66,-12,50}, -{66,-12,51}, -{66,-12,52}, -{66,-12,53}, -{66,-12,54}, -{66,-12,55}, -{66,-12,56}, -{66,-12,57}, -{66,-12,58}, -{66,-12,59}, -{66,-12,60}, -{66,-12,61}, -{66,-12,62}, -{66,-12,63}, -{66,-12,64}, -{66,-12,65}, -{66,-12,66}, -{66,-12,67}, -{66,-12,68}, -{66,-11,-46}, -{66,-11,-45}, -{66,-11,-44}, -{66,-11,-43}, -{66,-11,-42}, -{66,-11,-41}, -{66,-11,-40}, -{66,-11,-39}, -{66,-11,-38}, -{66,-11,-37}, -{66,-11,-36}, -{66,-11,-35}, -{66,-11,-34}, -{66,-11,-33}, -{66,-11,-32}, -{66,-11,-31}, -{66,-11,-30}, -{66,-11,-29}, -{66,-11,-28}, -{66,-11,-27}, -{66,-11,-26}, -{66,-11,-25}, -{66,-11,-24}, -{66,-11,-23}, -{66,-11,-22}, -{66,-11,-21}, -{66,-11,-20}, -{66,-11,-19}, -{66,-11,-18}, -{66,-11,-17}, -{66,-11,-16}, -{66,-11,-15}, -{66,-11,-14}, -{66,-11,-13}, -{66,-11,-12}, -{66,-11,-11}, -{66,-11,-10}, -{66,-11,-9}, -{66,-11,-8}, -{66,-11,-7}, -{66,-11,-6}, -{66,-11,-5}, -{66,-11,-4}, -{66,-11,-3}, -{66,-11,-2}, -{66,-11,-1}, -{66,-11,0}, -{66,-11,1}, -{66,-11,2}, -{66,-11,3}, -{66,-11,4}, -{66,-11,5}, -{66,-11,6}, -{66,-11,7}, -{66,-11,8}, -{66,-11,9}, -{66,-11,10}, -{66,-11,11}, -{66,-11,12}, -{66,-11,13}, -{66,-11,14}, -{66,-11,15}, -{66,-11,16}, -{66,-11,17}, -{66,-11,18}, -{66,-11,19}, -{66,-11,20}, -{66,-11,21}, -{66,-11,22}, -{66,-11,23}, -{66,-11,24}, -{66,-11,25}, -{66,-11,26}, -{66,-11,27}, -{66,-11,28}, -{66,-11,29}, -{66,-11,30}, -{66,-11,31}, -{66,-11,32}, -{66,-11,33}, -{66,-11,34}, -{66,-11,35}, -{66,-11,36}, -{66,-11,37}, -{66,-11,38}, -{66,-11,39}, -{66,-11,40}, -{66,-11,41}, -{66,-11,42}, -{66,-11,43}, -{66,-11,44}, -{66,-11,45}, -{66,-11,46}, -{66,-11,47}, -{66,-11,48}, -{66,-11,49}, -{66,-11,50}, -{66,-11,51}, -{66,-11,52}, -{66,-11,53}, -{66,-11,54}, -{66,-11,55}, -{66,-11,56}, -{66,-11,57}, -{66,-11,58}, -{66,-11,59}, -{66,-11,60}, -{66,-11,61}, -{66,-11,62}, -{66,-11,63}, -{66,-11,64}, -{66,-11,65}, -{66,-11,66}, -{66,-11,67}, -{66,-11,68}, -{66,-10,-47}, -{66,-10,-46}, -{66,-10,-45}, -{66,-10,-44}, -{66,-10,-43}, -{66,-10,-42}, -{66,-10,-41}, -{66,-10,-40}, -{66,-10,-39}, -{66,-10,-38}, -{66,-10,-37}, -{66,-10,-36}, -{66,-10,-35}, -{66,-10,-34}, -{66,-10,-33}, -{66,-10,-32}, -{66,-10,-31}, -{66,-10,-30}, -{66,-10,-29}, -{66,-10,-28}, -{66,-10,-27}, -{66,-10,-26}, -{66,-10,-25}, -{66,-10,-24}, -{66,-10,-23}, -{66,-10,-22}, -{66,-10,-21}, -{66,-10,-20}, -{66,-10,-19}, -{66,-10,-18}, -{66,-10,-17}, -{66,-10,-16}, -{66,-10,-15}, -{66,-10,-14}, -{66,-10,-13}, -{66,-10,-12}, -{66,-10,-11}, -{66,-10,-10}, -{66,-10,-9}, -{66,-10,-8}, -{66,-10,-7}, -{66,-10,-6}, -{66,-10,-5}, -{66,-10,-4}, -{66,-10,-3}, -{66,-10,-2}, -{66,-10,-1}, -{66,-10,0}, -{66,-10,1}, -{66,-10,2}, -{66,-10,3}, -{66,-10,4}, -{66,-10,5}, -{66,-10,6}, -{66,-10,7}, -{66,-10,8}, -{66,-10,9}, -{66,-10,10}, -{66,-10,11}, -{66,-10,12}, -{66,-10,13}, -{66,-10,14}, -{66,-10,15}, -{66,-10,16}, -{66,-10,17}, -{66,-10,18}, -{66,-10,19}, -{66,-10,20}, -{66,-10,21}, -{66,-10,22}, -{66,-10,23}, -{66,-10,24}, -{66,-10,25}, -{66,-10,26}, -{66,-10,27}, -{66,-10,28}, -{66,-10,29}, -{66,-10,30}, -{66,-10,31}, -{66,-10,32}, -{66,-10,33}, -{66,-10,34}, -{66,-10,35}, -{66,-10,36}, -{66,-10,37}, -{66,-10,38}, -{66,-10,39}, -{66,-10,40}, -{66,-10,41}, -{66,-10,42}, -{66,-10,43}, -{66,-10,44}, -{66,-10,45}, -{66,-10,46}, -{66,-10,47}, -{66,-10,48}, -{66,-10,49}, -{66,-10,50}, -{66,-10,51}, -{66,-10,52}, -{66,-10,53}, -{66,-10,54}, -{66,-10,55}, -{66,-10,56}, -{66,-10,57}, -{66,-10,58}, -{66,-10,59}, -{66,-10,60}, -{66,-10,61}, -{66,-10,62}, -{66,-10,63}, -{66,-10,64}, -{66,-10,65}, -{66,-10,66}, -{66,-10,67}, -{66,-10,68}, -{66,-10,69}, -{66,-9,-48}, -{66,-9,-47}, -{66,-9,-46}, -{66,-9,-45}, -{66,-9,-44}, -{66,-9,-43}, -{66,-9,-42}, -{66,-9,-41}, -{66,-9,-40}, -{66,-9,-39}, -{66,-9,-38}, -{66,-9,-37}, -{66,-9,-36}, -{66,-9,-35}, -{66,-9,-34}, -{66,-9,-33}, -{66,-9,-32}, -{66,-9,-31}, -{66,-9,-30}, -{66,-9,-29}, -{66,-9,-28}, -{66,-9,-27}, -{66,-9,-26}, -{66,-9,-25}, -{66,-9,-24}, -{66,-9,-23}, -{66,-9,-22}, -{66,-9,-21}, -{66,-9,-20}, -{66,-9,-19}, -{66,-9,-18}, -{66,-9,-17}, -{66,-9,-16}, -{66,-9,-15}, -{66,-9,-14}, -{66,-9,-13}, -{66,-9,-12}, -{66,-9,-11}, -{66,-9,-10}, -{66,-9,-9}, -{66,-9,-8}, -{66,-9,-7}, -{66,-9,-6}, -{66,-9,-5}, -{66,-9,-4}, -{66,-9,-3}, -{66,-9,-2}, -{66,-9,-1}, -{66,-9,0}, -{66,-9,1}, -{66,-9,2}, -{66,-9,3}, -{66,-9,4}, -{66,-9,5}, -{66,-9,6}, -{66,-9,7}, -{66,-9,8}, -{66,-9,9}, -{66,-9,10}, -{66,-9,11}, -{66,-9,12}, -{66,-9,13}, -{66,-9,14}, -{66,-9,15}, -{66,-9,16}, -{66,-9,17}, -{66,-9,18}, -{66,-9,19}, -{66,-9,20}, -{66,-9,21}, -{66,-9,22}, -{66,-9,23}, -{66,-9,24}, -{66,-9,25}, -{66,-9,26}, -{66,-9,27}, -{66,-9,28}, -{66,-9,29}, -{66,-9,30}, -{66,-9,31}, -{66,-9,32}, -{66,-9,33}, -{66,-9,34}, -{66,-9,35}, -{66,-9,36}, -{66,-9,37}, -{66,-9,38}, -{66,-9,39}, -{66,-9,40}, -{66,-9,41}, -{66,-9,42}, -{66,-9,43}, -{66,-9,44}, -{66,-9,45}, -{66,-9,46}, -{66,-9,47}, -{66,-9,48}, -{66,-9,49}, -{66,-9,50}, -{66,-9,51}, -{66,-9,52}, -{66,-9,53}, -{66,-9,54}, -{66,-9,55}, -{66,-9,56}, -{66,-9,57}, -{66,-9,58}, -{66,-9,59}, -{66,-9,60}, -{66,-9,61}, -{66,-9,62}, -{66,-9,63}, -{66,-9,64}, -{66,-9,65}, -{66,-9,66}, -{66,-9,67}, -{66,-9,68}, -{66,-9,69}, -{66,-8,-49}, -{66,-8,-48}, -{66,-8,-47}, -{66,-8,-46}, -{66,-8,-45}, -{66,-8,-44}, -{66,-8,-43}, -{66,-8,-42}, -{66,-8,-41}, -{66,-8,-40}, -{66,-8,-39}, -{66,-8,-38}, -{66,-8,-37}, -{66,-8,-36}, -{66,-8,-35}, -{66,-8,-34}, -{66,-8,-33}, -{66,-8,-32}, -{66,-8,-31}, -{66,-8,-30}, -{66,-8,-29}, -{66,-8,-28}, -{66,-8,-27}, -{66,-8,-26}, -{66,-8,-25}, -{66,-8,-24}, -{66,-8,-23}, -{66,-8,-22}, -{66,-8,-21}, -{66,-8,-20}, -{66,-8,-19}, -{66,-8,-18}, -{66,-8,-17}, -{66,-8,-16}, -{66,-8,-15}, -{66,-8,-14}, -{66,-8,-13}, -{66,-8,-12}, -{66,-8,-11}, -{66,-8,-10}, -{66,-8,-9}, -{66,-8,-8}, -{66,-8,-7}, -{66,-8,-6}, -{66,-8,-5}, -{66,-8,-4}, -{66,-8,-3}, -{66,-8,-2}, -{66,-8,-1}, -{66,-8,0}, -{66,-8,1}, -{66,-8,2}, -{66,-8,3}, -{66,-8,4}, -{66,-8,5}, -{66,-8,6}, -{66,-8,7}, -{66,-8,8}, -{66,-8,9}, -{66,-8,10}, -{66,-8,11}, -{66,-8,12}, -{66,-8,13}, -{66,-8,14}, -{66,-8,15}, -{66,-8,16}, -{66,-8,17}, -{66,-8,18}, -{66,-8,19}, -{66,-8,20}, -{66,-8,21}, -{66,-8,22}, -{66,-8,23}, -{66,-8,24}, -{66,-8,25}, -{66,-8,26}, -{66,-8,27}, -{66,-8,28}, -{66,-8,29}, -{66,-8,30}, -{66,-8,31}, -{66,-8,32}, -{66,-8,33}, -{66,-8,34}, -{66,-8,35}, -{66,-8,36}, -{66,-8,37}, -{66,-8,38}, -{66,-8,39}, -{66,-8,40}, -{66,-8,41}, -{66,-8,42}, -{66,-8,43}, -{66,-8,44}, -{66,-8,45}, -{66,-8,46}, -{66,-8,47}, -{66,-8,48}, -{66,-8,49}, -{66,-8,50}, -{66,-8,51}, -{66,-8,52}, -{66,-8,53}, -{66,-8,54}, -{66,-8,55}, -{66,-8,56}, -{66,-8,57}, -{66,-8,58}, -{66,-8,59}, -{66,-8,60}, -{66,-8,61}, -{66,-8,62}, -{66,-8,63}, -{66,-8,64}, -{66,-8,65}, -{66,-8,66}, -{66,-8,67}, -{66,-8,68}, -{66,-8,69}, -{66,-7,-51}, -{66,-7,-50}, -{66,-7,-49}, -{66,-7,-48}, -{66,-7,-47}, -{66,-7,-46}, -{66,-7,-45}, -{66,-7,-44}, -{66,-7,-43}, -{66,-7,-42}, -{66,-7,-41}, -{66,-7,-40}, -{66,-7,-39}, -{66,-7,-38}, -{66,-7,-37}, -{66,-7,-36}, -{66,-7,-35}, -{66,-7,-34}, -{66,-7,-33}, -{66,-7,-32}, -{66,-7,-31}, -{66,-7,-30}, -{66,-7,-29}, -{66,-7,-28}, -{66,-7,-27}, -{66,-7,-26}, -{66,-7,-25}, -{66,-7,-24}, -{66,-7,-23}, -{66,-7,-22}, -{66,-7,-21}, -{66,-7,-20}, -{66,-7,-19}, -{66,-7,-18}, -{66,-7,-17}, -{66,-7,-16}, -{66,-7,-15}, -{66,-7,-14}, -{66,-7,-13}, -{66,-7,-12}, -{66,-7,-11}, -{66,-7,-10}, -{66,-7,-9}, -{66,-7,-8}, -{66,-7,-7}, -{66,-7,-6}, -{66,-7,-5}, -{66,-7,-4}, -{66,-7,-3}, -{66,-7,-2}, -{66,-7,-1}, -{66,-7,0}, -{66,-7,1}, -{66,-7,2}, -{66,-7,3}, -{66,-7,4}, -{66,-7,5}, -{66,-7,6}, -{66,-7,7}, -{66,-7,8}, -{66,-7,9}, -{66,-7,10}, -{66,-7,11}, -{66,-7,12}, -{66,-7,13}, -{66,-7,14}, -{66,-7,15}, -{66,-7,16}, -{66,-7,17}, -{66,-7,18}, -{66,-7,19}, -{66,-7,20}, -{66,-7,21}, -{66,-7,22}, -{66,-7,23}, -{66,-7,24}, -{66,-7,25}, -{66,-7,26}, -{66,-7,27}, -{66,-7,28}, -{66,-7,29}, -{66,-7,30}, -{66,-7,31}, -{66,-7,32}, -{66,-7,33}, -{66,-7,34}, -{66,-7,35}, -{66,-7,36}, -{66,-7,37}, -{66,-7,38}, -{66,-7,39}, -{66,-7,40}, -{66,-7,41}, -{66,-7,42}, -{66,-7,43}, -{66,-7,44}, -{66,-7,45}, -{66,-7,46}, -{66,-7,47}, -{66,-7,48}, -{66,-7,49}, -{66,-7,50}, -{66,-7,51}, -{66,-7,52}, -{66,-7,53}, -{66,-7,54}, -{66,-7,55}, -{66,-7,56}, -{66,-7,57}, -{66,-7,58}, -{66,-7,59}, -{66,-7,60}, -{66,-7,61}, -{66,-7,62}, -{66,-7,63}, -{66,-7,64}, -{66,-7,65}, -{66,-7,66}, -{66,-7,67}, -{66,-7,68}, -{66,-7,69}, -{66,-6,-52}, -{66,-6,-51}, -{66,-6,-50}, -{66,-6,-49}, -{66,-6,-48}, -{66,-6,-47}, -{66,-6,-46}, -{66,-6,-45}, -{66,-6,-44}, -{66,-6,-43}, -{66,-6,-42}, -{66,-6,-41}, -{66,-6,-40}, -{66,-6,-39}, -{66,-6,-38}, -{66,-6,-37}, -{66,-6,-36}, -{66,-6,-35}, -{66,-6,-34}, -{66,-6,-33}, -{66,-6,-32}, -{66,-6,-31}, -{66,-6,-30}, -{66,-6,-29}, -{66,-6,-28}, -{66,-6,-27}, -{66,-6,-26}, -{66,-6,-25}, -{66,-6,-24}, -{66,-6,-23}, -{66,-6,-22}, -{66,-6,-21}, -{66,-6,-20}, -{66,-6,-19}, -{66,-6,-18}, -{66,-6,-17}, -{66,-6,-16}, -{66,-6,-15}, -{66,-6,-14}, -{66,-6,-13}, -{66,-6,-12}, -{66,-6,-11}, -{66,-6,-10}, -{66,-6,-9}, -{66,-6,-8}, -{66,-6,-7}, -{66,-6,-6}, -{66,-6,-5}, -{66,-6,-4}, -{66,-6,-3}, -{66,-6,-2}, -{66,-6,-1}, -{66,-6,0}, -{66,-6,1}, -{66,-6,2}, -{66,-6,3}, -{66,-6,4}, -{66,-6,5}, -{66,-6,6}, -{66,-6,7}, -{66,-6,8}, -{66,-6,9}, -{66,-6,10}, -{66,-6,11}, -{66,-6,12}, -{66,-6,13}, -{66,-6,14}, -{66,-6,15}, -{66,-6,16}, -{66,-6,17}, -{66,-6,18}, -{66,-6,19}, -{66,-6,20}, -{66,-6,21}, -{66,-6,22}, -{66,-6,23}, -{66,-6,24}, -{66,-6,25}, -{66,-6,26}, -{66,-6,27}, -{66,-6,28}, -{66,-6,29}, -{66,-6,30}, -{66,-6,31}, -{66,-6,32}, -{66,-6,33}, -{66,-6,34}, -{66,-6,35}, -{66,-6,36}, -{66,-6,37}, -{66,-6,38}, -{66,-6,39}, -{66,-6,40}, -{66,-6,41}, -{66,-6,42}, -{66,-6,43}, -{66,-6,44}, -{66,-6,45}, -{66,-6,46}, -{66,-6,47}, -{66,-6,48}, -{66,-6,49}, -{66,-6,50}, -{66,-6,51}, -{66,-6,52}, -{66,-6,53}, -{66,-6,54}, -{66,-6,55}, -{66,-6,56}, -{66,-6,57}, -{66,-6,58}, -{66,-6,59}, -{66,-6,60}, -{66,-6,61}, -{66,-6,62}, -{66,-6,63}, -{66,-6,64}, -{66,-6,65}, -{66,-6,66}, -{66,-6,67}, -{66,-6,68}, -{66,-6,69}, -{66,-5,-52}, -{66,-5,-51}, -{66,-5,-50}, -{66,-5,-49}, -{66,-5,-48}, -{66,-5,-47}, -{66,-5,-46}, -{66,-5,-45}, -{66,-5,-44}, -{66,-5,-43}, -{66,-5,-42}, -{66,-5,-41}, -{66,-5,-40}, -{66,-5,-39}, -{66,-5,-38}, -{66,-5,-37}, -{66,-5,-36}, -{66,-5,-35}, -{66,-5,-34}, -{66,-5,-33}, -{66,-5,-32}, -{66,-5,-31}, -{66,-5,-30}, -{66,-5,-29}, -{66,-5,-28}, -{66,-5,-27}, -{66,-5,-26}, -{66,-5,-25}, -{66,-5,-24}, -{66,-5,-23}, -{66,-5,-22}, -{66,-5,-21}, -{66,-5,-20}, -{66,-5,-19}, -{66,-5,-18}, -{66,-5,-17}, -{66,-5,-16}, -{66,-5,-15}, -{66,-5,-14}, -{66,-5,-13}, -{66,-5,-12}, -{66,-5,-11}, -{66,-5,-10}, -{66,-5,-9}, -{66,-5,-8}, -{66,-5,-7}, -{66,-5,-6}, -{66,-5,-5}, -{66,-5,-4}, -{66,-5,-3}, -{66,-5,-2}, -{66,-5,-1}, -{66,-5,0}, -{66,-5,1}, -{66,-5,2}, -{66,-5,3}, -{66,-5,4}, -{66,-5,5}, -{66,-5,6}, -{66,-5,7}, -{66,-5,8}, -{66,-5,9}, -{66,-5,10}, -{66,-5,11}, -{66,-5,12}, -{66,-5,13}, -{66,-5,14}, -{66,-5,15}, -{66,-5,16}, -{66,-5,17}, -{66,-5,18}, -{66,-5,19}, -{66,-5,20}, -{66,-5,21}, -{66,-5,22}, -{66,-5,23}, -{66,-5,24}, -{66,-5,25}, -{66,-5,26}, -{66,-5,27}, -{66,-5,28}, -{66,-5,29}, -{66,-5,30}, -{66,-5,31}, -{66,-5,32}, -{66,-5,33}, -{66,-5,34}, -{66,-5,35}, -{66,-5,36}, -{66,-5,37}, -{66,-5,38}, -{66,-5,39}, -{66,-5,40}, -{66,-5,41}, -{66,-5,42}, -{66,-5,43}, -{66,-5,44}, -{66,-5,45}, -{66,-5,46}, -{66,-5,47}, -{66,-5,48}, -{66,-5,49}, -{66,-5,50}, -{66,-5,51}, -{66,-5,52}, -{66,-5,53}, -{66,-5,54}, -{66,-5,55}, -{66,-5,56}, -{66,-5,57}, -{66,-5,58}, -{66,-5,59}, -{66,-5,60}, -{66,-5,61}, -{66,-5,62}, -{66,-5,63}, -{66,-5,64}, -{66,-5,65}, -{66,-5,66}, -{66,-5,67}, -{66,-5,68}, -{66,-5,69}, -{66,-4,-52}, -{66,-4,-51}, -{66,-4,-50}, -{66,-4,-49}, -{66,-4,-48}, -{66,-4,-47}, -{66,-4,-46}, -{66,-4,-45}, -{66,-4,-44}, -{66,-4,-43}, -{66,-4,-42}, -{66,-4,-41}, -{66,-4,-40}, -{66,-4,-39}, -{66,-4,-38}, -{66,-4,-37}, -{66,-4,-36}, -{66,-4,-35}, -{66,-4,-34}, -{66,-4,-33}, -{66,-4,-32}, -{66,-4,-31}, -{66,-4,-30}, -{66,-4,-29}, -{66,-4,-28}, -{66,-4,-27}, -{66,-4,-26}, -{66,-4,-25}, -{66,-4,-24}, -{66,-4,-23}, -{66,-4,-22}, -{66,-4,-21}, -{66,-4,-20}, -{66,-4,-19}, -{66,-4,-18}, -{66,-4,-17}, -{66,-4,-16}, -{66,-4,-15}, -{66,-4,-14}, -{66,-4,-13}, -{66,-4,-12}, -{66,-4,-11}, -{66,-4,-10}, -{66,-4,-9}, -{66,-4,-8}, -{66,-4,-7}, -{66,-4,-6}, -{66,-4,-5}, -{66,-4,-4}, -{66,-4,-3}, -{66,-4,-2}, -{66,-4,-1}, -{66,-4,0}, -{66,-4,1}, -{66,-4,2}, -{66,-4,3}, -{66,-4,4}, -{66,-4,5}, -{66,-4,6}, -{66,-4,7}, -{66,-4,8}, -{66,-4,9}, -{66,-4,10}, -{66,-4,11}, -{66,-4,12}, -{66,-4,13}, -{66,-4,14}, -{66,-4,15}, -{66,-4,16}, -{66,-4,17}, -{66,-4,18}, -{66,-4,19}, -{66,-4,20}, -{66,-4,21}, -{66,-4,22}, -{66,-4,23}, -{66,-4,24}, -{66,-4,25}, -{66,-4,26}, -{66,-4,27}, -{66,-4,28}, -{66,-4,29}, -{66,-4,30}, -{66,-4,31}, -{66,-4,32}, -{66,-4,33}, -{66,-4,34}, -{66,-4,35}, -{66,-4,36}, -{66,-4,37}, -{66,-4,38}, -{66,-4,39}, -{66,-4,40}, -{66,-4,41}, -{66,-4,42}, -{66,-4,43}, -{66,-4,44}, -{66,-4,45}, -{66,-4,46}, -{66,-4,47}, -{66,-4,48}, -{66,-4,49}, -{66,-4,50}, -{66,-4,51}, -{66,-4,52}, -{66,-4,53}, -{66,-4,54}, -{66,-4,55}, -{66,-4,56}, -{66,-4,57}, -{66,-4,58}, -{66,-4,59}, -{66,-4,60}, -{66,-4,61}, -{66,-4,62}, -{66,-4,63}, -{66,-4,64}, -{66,-4,65}, -{66,-4,66}, -{66,-4,67}, -{66,-4,68}, -{66,-4,69}, -{66,-3,-52}, -{66,-3,-51}, -{66,-3,-50}, -{66,-3,-49}, -{66,-3,-48}, -{66,-3,-47}, -{66,-3,-46}, -{66,-3,-45}, -{66,-3,-44}, -{66,-3,-43}, -{66,-3,-42}, -{66,-3,-41}, -{66,-3,-40}, -{66,-3,-39}, -{66,-3,-38}, -{66,-3,-37}, -{66,-3,-36}, -{66,-3,-35}, -{66,-3,-34}, -{66,-3,-33}, -{66,-3,-32}, -{66,-3,-31}, -{66,-3,-30}, -{66,-3,-29}, -{66,-3,-28}, -{66,-3,-27}, -{66,-3,-26}, -{66,-3,-25}, -{66,-3,-24}, -{66,-3,-23}, -{66,-3,-22}, -{66,-3,-21}, -{66,-3,-20}, -{66,-3,-19}, -{66,-3,-18}, -{66,-3,-17}, -{66,-3,-16}, -{66,-3,-15}, -{66,-3,-14}, -{66,-3,-13}, -{66,-3,-12}, -{66,-3,-11}, -{66,-3,-10}, -{66,-3,-9}, -{66,-3,-8}, -{66,-3,-7}, -{66,-3,-6}, -{66,-3,-5}, -{66,-3,-4}, -{66,-3,-3}, -{66,-3,-2}, -{66,-3,-1}, -{66,-3,0}, -{66,-3,1}, -{66,-3,2}, -{66,-3,3}, -{66,-3,4}, -{66,-3,5}, -{66,-3,6}, -{66,-3,7}, -{66,-3,8}, -{66,-3,9}, -{66,-3,10}, -{66,-3,11}, -{66,-3,12}, -{66,-3,13}, -{66,-3,14}, -{66,-3,15}, -{66,-3,16}, -{66,-3,17}, -{66,-3,18}, -{66,-3,19}, -{66,-3,20}, -{66,-3,21}, -{66,-3,22}, -{66,-3,23}, -{66,-3,24}, -{66,-3,25}, -{66,-3,26}, -{66,-3,27}, -{66,-3,28}, -{66,-3,29}, -{66,-3,30}, -{66,-3,31}, -{66,-3,32}, -{66,-3,33}, -{66,-3,34}, -{66,-3,35}, -{66,-3,36}, -{66,-3,37}, -{66,-3,38}, -{66,-3,39}, -{66,-3,40}, -{66,-3,41}, -{66,-3,42}, -{66,-3,43}, -{66,-3,44}, -{66,-3,45}, -{66,-3,46}, -{66,-3,47}, -{66,-3,48}, -{66,-3,49}, -{66,-3,50}, -{66,-3,51}, -{66,-3,52}, -{66,-3,53}, -{66,-3,54}, -{66,-3,55}, -{66,-3,56}, -{66,-3,57}, -{66,-3,58}, -{66,-3,59}, -{66,-3,60}, -{66,-3,61}, -{66,-3,62}, -{66,-3,63}, -{66,-3,64}, -{66,-3,65}, -{66,-3,66}, -{66,-3,67}, -{66,-3,68}, -{66,-3,69}, -{66,-2,-52}, -{66,-2,-51}, -{66,-2,-50}, -{66,-2,-49}, -{66,-2,-48}, -{66,-2,-47}, -{66,-2,-46}, -{66,-2,-45}, -{66,-2,-44}, -{66,-2,-43}, -{66,-2,-42}, -{66,-2,-41}, -{66,-2,-40}, -{66,-2,-39}, -{66,-2,-38}, -{66,-2,-37}, -{66,-2,-36}, -{66,-2,-35}, -{66,-2,-34}, -{66,-2,-33}, -{66,-2,-32}, -{66,-2,-31}, -{66,-2,-30}, -{66,-2,-29}, -{66,-2,-28}, -{66,-2,-27}, -{66,-2,-26}, -{66,-2,-25}, -{66,-2,-24}, -{66,-2,-23}, -{66,-2,-22}, -{66,-2,-21}, -{66,-2,-20}, -{66,-2,-19}, -{66,-2,-18}, -{66,-2,-17}, -{66,-2,-16}, -{66,-2,-15}, -{66,-2,-14}, -{66,-2,-13}, -{66,-2,-12}, -{66,-2,-11}, -{66,-2,-10}, -{66,-2,-9}, -{66,-2,-8}, -{66,-2,-7}, -{66,-2,-6}, -{66,-2,-5}, -{66,-2,-4}, -{66,-2,-3}, -{66,-2,-2}, -{66,-2,-1}, -{66,-2,0}, -{66,-2,1}, -{66,-2,2}, -{66,-2,3}, -{66,-2,4}, -{66,-2,5}, -{66,-2,6}, -{66,-2,7}, -{66,-2,8}, -{66,-2,9}, -{66,-2,10}, -{66,-2,11}, -{66,-2,12}, -{66,-2,13}, -{66,-2,14}, -{66,-2,15}, -{66,-2,16}, -{66,-2,17}, -{66,-2,18}, -{66,-2,19}, -{66,-2,20}, -{66,-2,21}, -{66,-2,22}, -{66,-2,23}, -{66,-2,24}, -{66,-2,25}, -{66,-2,26}, -{66,-2,27}, -{66,-2,28}, -{66,-2,29}, -{66,-2,30}, -{66,-2,31}, -{66,-2,32}, -{66,-2,33}, -{66,-2,34}, -{66,-2,35}, -{66,-2,36}, -{66,-2,37}, -{66,-2,38}, -{66,-2,39}, -{66,-2,40}, -{66,-2,41}, -{66,-2,42}, -{66,-2,43}, -{66,-2,44}, -{66,-2,45}, -{66,-2,46}, -{66,-2,47}, -{66,-2,48}, -{66,-2,49}, -{66,-2,50}, -{66,-2,51}, -{66,-2,52}, -{66,-2,53}, -{66,-2,54}, -{66,-2,55}, -{66,-2,56}, -{66,-2,57}, -{66,-2,58}, -{66,-2,59}, -{66,-2,60}, -{66,-2,61}, -{66,-2,62}, -{66,-2,63}, -{66,-2,64}, -{66,-2,65}, -{66,-2,66}, -{66,-2,67}, -{66,-2,68}, -{66,-2,69}, -{66,-1,-52}, -{66,-1,-51}, -{66,-1,-50}, -{66,-1,-49}, -{66,-1,-48}, -{66,-1,-47}, -{66,-1,-46}, -{66,-1,-45}, -{66,-1,-44}, -{66,-1,-43}, -{66,-1,-42}, -{66,-1,-41}, -{66,-1,-40}, -{66,-1,-39}, -{66,-1,-38}, -{66,-1,-37}, -{66,-1,-36}, -{66,-1,-35}, -{66,-1,-34}, -{66,-1,-33}, -{66,-1,-32}, -{66,-1,-31}, -{66,-1,-30}, -{66,-1,-29}, -{66,-1,-28}, -{66,-1,-27}, -{66,-1,-26}, -{66,-1,-25}, -{66,-1,-24}, -{66,-1,-23}, -{66,-1,-22}, -{66,-1,-21}, -{66,-1,-20}, -{66,-1,-19}, -{66,-1,-18}, -{66,-1,-17}, -{66,-1,-16}, -{66,-1,-15}, -{66,-1,-14}, -{66,-1,-13}, -{66,-1,-12}, -{66,-1,-11}, -{66,-1,-10}, -{66,-1,-9}, -{66,-1,-8}, -{66,-1,-7}, -{66,-1,-6}, -{66,-1,-5}, -{66,-1,-4}, -{66,-1,-3}, -{66,-1,-2}, -{66,-1,-1}, -{66,-1,0}, -{66,-1,1}, -{66,-1,2}, -{66,-1,3}, -{66,-1,4}, -{66,-1,5}, -{66,-1,6}, -{66,-1,7}, -{66,-1,8}, -{66,-1,9}, -{66,-1,10}, -{66,-1,11}, -{66,-1,12}, -{66,-1,13}, -{66,-1,14}, -{66,-1,15}, -{66,-1,16}, -{66,-1,17}, -{66,-1,18}, -{66,-1,19}, -{66,-1,20}, -{66,-1,21}, -{66,-1,22}, -{66,-1,23}, -{66,-1,24}, -{66,-1,25}, -{66,-1,26}, -{66,-1,27}, -{66,-1,28}, -{66,-1,29}, -{66,-1,30}, -{66,-1,31}, -{66,-1,32}, -{66,-1,33}, -{66,-1,34}, -{66,-1,35}, -{66,-1,36}, -{66,-1,37}, -{66,-1,38}, -{66,-1,39}, -{66,-1,40}, -{66,-1,41}, -{66,-1,42}, -{66,-1,43}, -{66,-1,44}, -{66,-1,45}, -{66,-1,46}, -{66,-1,47}, -{66,-1,48}, -{66,-1,49}, -{66,-1,50}, -{66,-1,51}, -{66,-1,52}, -{66,-1,53}, -{66,-1,54}, -{66,-1,55}, -{66,-1,56}, -{66,-1,57}, -{66,-1,58}, -{66,-1,59}, -{66,-1,60}, -{66,-1,61}, -{66,-1,62}, -{66,-1,63}, -{66,-1,64}, -{66,-1,65}, -{66,-1,66}, -{66,-1,67}, -{66,-1,68}, -{66,-1,69}, -{66,0,-52}, -{66,0,-51}, -{66,0,-50}, -{66,0,-49}, -{66,0,-48}, -{66,0,-47}, -{66,0,-46}, -{66,0,-45}, -{66,0,-44}, -{66,0,-43}, -{66,0,-42}, -{66,0,-41}, -{66,0,-40}, -{66,0,-39}, -{66,0,-38}, -{66,0,-37}, -{66,0,-36}, -{66,0,-35}, -{66,0,-34}, -{66,0,-33}, -{66,0,-32}, -{66,0,-31}, -{66,0,-30}, -{66,0,-29}, -{66,0,-28}, -{66,0,-27}, -{66,0,-26}, -{66,0,-25}, -{66,0,-24}, -{66,0,-23}, -{66,0,-22}, -{66,0,-21}, -{66,0,-20}, -{66,0,-19}, -{66,0,-18}, -{66,0,-17}, -{66,0,-16}, -{66,0,-15}, -{66,0,-14}, -{66,0,-13}, -{66,0,-12}, -{66,0,-11}, -{66,0,-10}, -{66,0,-9}, -{66,0,-8}, -{66,0,-7}, -{66,0,-6}, -{66,0,-5}, -{66,0,-4}, -{66,0,-3}, -{66,0,-2}, -{66,0,-1}, -{66,0,0}, -{66,0,1}, -{66,0,2}, -{66,0,3}, -{66,0,4}, -{66,0,5}, -{66,0,6}, -{66,0,7}, -{66,0,8}, -{66,0,9}, -{66,0,10}, -{66,0,11}, -{66,0,12}, -{66,0,13}, -{66,0,14}, -{66,0,15}, -{66,0,16}, -{66,0,17}, -{66,0,18}, -{66,0,19}, -{66,0,20}, -{66,0,21}, -{66,0,22}, -{66,0,23}, -{66,0,24}, -{66,0,25}, -{66,0,26}, -{66,0,27}, -{66,0,28}, -{66,0,29}, -{66,0,30}, -{66,0,31}, -{66,0,32}, -{66,0,33}, -{66,0,34}, -{66,0,35}, -{66,0,36}, -{66,0,37}, -{66,0,38}, -{66,0,39}, -{66,0,40}, -{66,0,41}, -{66,0,42}, -{66,0,43}, -{66,0,44}, -{66,0,45}, -{66,0,46}, -{66,0,47}, -{66,0,48}, -{66,0,49}, -{66,0,50}, -{66,0,51}, -{66,0,52}, -{66,0,53}, -{66,0,54}, -{66,0,55}, -{66,0,56}, -{66,0,57}, -{66,0,58}, -{66,0,59}, -{66,0,60}, -{66,0,61}, -{66,0,62}, -{66,0,63}, -{66,0,64}, -{66,0,65}, -{66,0,66}, -{66,0,67}, -{66,0,68}, -{66,0,69}, -{66,1,-52}, -{66,1,-51}, -{66,1,-50}, -{66,1,-49}, -{66,1,-48}, -{66,1,-47}, -{66,1,-46}, -{66,1,-45}, -{66,1,-44}, -{66,1,-43}, -{66,1,-42}, -{66,1,-41}, -{66,1,-40}, -{66,1,-39}, -{66,1,-38}, -{66,1,-37}, -{66,1,-36}, -{66,1,-35}, -{66,1,-34}, -{66,1,-33}, -{66,1,-32}, -{66,1,-31}, -{66,1,-30}, -{66,1,-29}, -{66,1,-28}, -{66,1,-27}, -{66,1,-26}, -{66,1,-25}, -{66,1,-24}, -{66,1,-23}, -{66,1,-22}, -{66,1,-21}, -{66,1,-20}, -{66,1,-19}, -{66,1,-18}, -{66,1,-17}, -{66,1,-16}, -{66,1,-15}, -{66,1,-14}, -{66,1,-13}, -{66,1,-12}, -{66,1,-11}, -{66,1,-10}, -{66,1,-9}, -{66,1,-8}, -{66,1,-7}, -{66,1,-6}, -{66,1,-5}, -{66,1,-4}, -{66,1,-3}, -{66,1,-2}, -{66,1,-1}, -{66,1,0}, -{66,1,1}, -{66,1,2}, -{66,1,3}, -{66,1,4}, -{66,1,5}, -{66,1,6}, -{66,1,7}, -{66,1,8}, -{66,1,9}, -{66,1,10}, -{66,1,11}, -{66,1,12}, -{66,1,13}, -{66,1,14}, -{66,1,15}, -{66,1,16}, -{66,1,17}, -{66,1,18}, -{66,1,19}, -{66,1,20}, -{66,1,21}, -{66,1,22}, -{66,1,23}, -{66,1,24}, -{66,1,25}, -{66,1,26}, -{66,1,27}, -{66,1,28}, -{66,1,29}, -{66,1,30}, -{66,1,31}, -{66,1,32}, -{66,1,33}, -{66,1,34}, -{66,1,35}, -{66,1,36}, -{66,1,37}, -{66,1,38}, -{66,1,39}, -{66,1,40}, -{66,1,41}, -{66,1,42}, -{66,1,43}, -{66,1,44}, -{66,1,45}, -{66,1,46}, -{66,1,47}, -{66,1,48}, -{66,1,49}, -{66,1,50}, -{66,1,51}, -{66,1,52}, -{66,1,53}, -{66,1,54}, -{66,1,55}, -{66,1,56}, -{66,1,57}, -{66,1,58}, -{66,1,59}, -{66,1,60}, -{66,1,61}, -{66,1,62}, -{66,1,63}, -{66,1,64}, -{66,1,65}, -{66,1,66}, -{66,1,67}, -{66,1,68}, -{66,1,69}, -{66,2,-52}, -{66,2,-51}, -{66,2,-50}, -{66,2,-49}, -{66,2,-48}, -{66,2,-47}, -{66,2,-46}, -{66,2,-45}, -{66,2,-44}, -{66,2,-43}, -{66,2,-42}, -{66,2,-41}, -{66,2,-40}, -{66,2,-39}, -{66,2,-38}, -{66,2,-37}, -{66,2,-36}, -{66,2,-35}, -{66,2,-34}, -{66,2,-33}, -{66,2,-32}, -{66,2,-31}, -{66,2,-30}, -{66,2,-29}, -{66,2,-28}, -{66,2,-27}, -{66,2,-26}, -{66,2,-25}, -{66,2,-24}, -{66,2,-23}, -{66,2,-22}, -{66,2,-21}, -{66,2,-20}, -{66,2,-19}, -{66,2,-18}, -{66,2,-17}, -{66,2,-16}, -{66,2,-15}, -{66,2,-14}, -{66,2,-13}, -{66,2,-12}, -{66,2,-11}, -{66,2,-10}, -{66,2,-9}, -{66,2,-8}, -{66,2,-7}, -{66,2,-6}, -{66,2,-5}, -{66,2,-4}, -{66,2,-3}, -{66,2,-2}, -{66,2,-1}, -{66,2,0}, -{66,2,1}, -{66,2,2}, -{66,2,3}, -{66,2,4}, -{66,2,5}, -{66,2,6}, -{66,2,7}, -{66,2,8}, -{66,2,9}, -{66,2,10}, -{66,2,11}, -{66,2,12}, -{66,2,13}, -{66,2,14}, -{66,2,15}, -{66,2,16}, -{66,2,17}, -{66,2,18}, -{66,2,19}, -{66,2,20}, -{66,2,21}, -{66,2,22}, -{66,2,23}, -{66,2,24}, -{66,2,25}, -{66,2,26}, -{66,2,27}, -{66,2,28}, -{66,2,29}, -{66,2,30}, -{66,2,31}, -{66,2,32}, -{66,2,33}, -{66,2,34}, -{66,2,35}, -{66,2,36}, -{66,2,37}, -{66,2,38}, -{66,2,39}, -{66,2,40}, -{66,2,41}, -{66,2,42}, -{66,2,43}, -{66,2,44}, -{66,2,45}, -{66,2,46}, -{66,2,47}, -{66,2,48}, -{66,2,49}, -{66,2,50}, -{66,2,51}, -{66,2,52}, -{66,2,53}, -{66,2,54}, -{66,2,55}, -{66,2,56}, -{66,2,57}, -{66,2,58}, -{66,2,59}, -{66,2,60}, -{66,2,61}, -{66,2,62}, -{66,2,63}, -{66,2,64}, -{66,2,65}, -{66,2,66}, -{66,2,67}, -{66,2,68}, -{66,2,69}, -{66,3,-52}, -{66,3,-51}, -{66,3,-50}, -{66,3,-49}, -{66,3,-48}, -{66,3,-47}, -{66,3,-46}, -{66,3,-45}, -{66,3,-44}, -{66,3,-43}, -{66,3,-42}, -{66,3,-41}, -{66,3,-40}, -{66,3,-39}, -{66,3,-38}, -{66,3,-37}, -{66,3,-36}, -{66,3,-35}, -{66,3,-34}, -{66,3,-33}, -{66,3,-32}, -{66,3,-31}, -{66,3,-30}, -{66,3,-29}, -{66,3,-28}, -{66,3,-27}, -{66,3,-26}, -{66,3,-25}, -{66,3,-24}, -{66,3,-23}, -{66,3,-22}, -{66,3,-21}, -{66,3,-20}, -{66,3,-19}, -{66,3,-18}, -{66,3,-17}, -{66,3,-16}, -{66,3,-15}, -{66,3,-14}, -{66,3,-13}, -{66,3,-12}, -{66,3,-11}, -{66,3,-10}, -{66,3,-9}, -{66,3,-8}, -{66,3,-7}, -{66,3,-6}, -{66,3,-5}, -{66,3,-4}, -{66,3,-3}, -{66,3,-2}, -{66,3,-1}, -{66,3,0}, -{66,3,1}, -{66,3,2}, -{66,3,3}, -{66,3,4}, -{66,3,5}, -{66,3,6}, -{66,3,7}, -{66,3,8}, -{66,3,9}, -{66,3,10}, -{66,3,11}, -{66,3,12}, -{66,3,13}, -{66,3,14}, -{66,3,15}, -{66,3,16}, -{66,3,17}, -{66,3,18}, -{66,3,19}, -{66,3,20}, -{66,3,21}, -{66,3,22}, -{66,3,23}, -{66,3,24}, -{66,3,25}, -{66,3,26}, -{66,3,27}, -{66,3,28}, -{66,3,29}, -{66,3,30}, -{66,3,31}, -{66,3,32}, -{66,3,33}, -{66,3,34}, -{66,3,35}, -{66,3,36}, -{66,3,37}, -{66,3,38}, -{66,3,39}, -{66,3,40}, -{66,3,41}, -{66,3,42}, -{66,3,43}, -{66,3,44}, -{66,3,45}, -{66,3,46}, -{66,3,47}, -{66,3,48}, -{66,3,49}, -{66,3,50}, -{66,3,51}, -{66,3,52}, -{66,3,53}, -{66,3,54}, -{66,3,55}, -{66,3,56}, -{66,3,57}, -{66,3,58}, -{66,3,59}, -{66,3,60}, -{66,3,61}, -{66,3,62}, -{66,3,63}, -{66,3,64}, -{66,3,65}, -{66,3,66}, -{66,3,67}, -{66,3,68}, -{66,3,69}, -{66,4,-52}, -{66,4,-51}, -{66,4,-50}, -{66,4,-49}, -{66,4,-48}, -{66,4,-47}, -{66,4,-46}, -{66,4,-45}, -{66,4,-44}, -{66,4,-43}, -{66,4,-42}, -{66,4,-41}, -{66,4,-40}, -{66,4,-39}, -{66,4,-38}, -{66,4,-37}, -{66,4,-36}, -{66,4,-35}, -{66,4,-34}, -{66,4,-33}, -{66,4,-32}, -{66,4,-31}, -{66,4,-30}, -{66,4,-29}, -{66,4,-28}, -{66,4,-27}, -{66,4,-26}, -{66,4,-25}, -{66,4,-24}, -{66,4,-23}, -{66,4,-22}, -{66,4,-21}, -{66,4,-20}, -{66,4,-19}, -{66,4,-18}, -{66,4,-17}, -{66,4,-16}, -{66,4,-15}, -{66,4,-14}, -{66,4,-13}, -{66,4,-12}, -{66,4,-11}, -{66,4,-10}, -{66,4,-9}, -{66,4,-8}, -{66,4,-7}, -{66,4,-6}, -{66,4,-5}, -{66,4,-4}, -{66,4,-3}, -{66,4,-2}, -{66,4,-1}, -{66,4,0}, -{66,4,1}, -{66,4,2}, -{66,4,3}, -{66,4,4}, -{66,4,5}, -{66,4,6}, -{66,4,7}, -{66,4,8}, -{66,4,9}, -{66,4,10}, -{66,4,11}, -{66,4,12}, -{66,4,13}, -{66,4,14}, -{66,4,15}, -{66,4,16}, -{66,4,17}, -{66,4,18}, -{66,4,19}, -{66,4,20}, -{66,4,21}, -{66,4,22}, -{66,4,23}, -{66,4,24}, -{66,4,25}, -{66,4,26}, -{66,4,27}, -{66,4,28}, -{66,4,29}, -{66,4,30}, -{66,4,31}, -{66,4,32}, -{66,4,33}, -{66,4,34}, -{66,4,35}, -{66,4,36}, -{66,4,37}, -{66,4,38}, -{66,4,39}, -{66,4,40}, -{66,4,41}, -{66,4,42}, -{66,4,43}, -{66,4,44}, -{66,4,45}, -{66,4,46}, -{66,4,47}, -{66,4,48}, -{66,4,49}, -{66,4,50}, -{66,4,51}, -{66,4,52}, -{66,4,53}, -{66,4,54}, -{66,4,55}, -{66,4,56}, -{66,4,57}, -{66,4,58}, -{66,4,59}, -{66,4,60}, -{66,4,61}, -{66,4,62}, -{66,4,63}, -{66,4,64}, -{66,4,65}, -{66,4,66}, -{66,4,67}, -{66,4,68}, -{66,4,69}, -{66,4,70}, -{66,5,-52}, -{66,5,-51}, -{66,5,-50}, -{66,5,-49}, -{66,5,-48}, -{66,5,-47}, -{66,5,-46}, -{66,5,-45}, -{66,5,-44}, -{66,5,-43}, -{66,5,-42}, -{66,5,-41}, -{66,5,-40}, -{66,5,-39}, -{66,5,-38}, -{66,5,-37}, -{66,5,-36}, -{66,5,-35}, -{66,5,-34}, -{66,5,-33}, -{66,5,-32}, -{66,5,-31}, -{66,5,-30}, -{66,5,-29}, -{66,5,-28}, -{66,5,-27}, -{66,5,-26}, -{66,5,-25}, -{66,5,-24}, -{66,5,-23}, -{66,5,-22}, -{66,5,-21}, -{66,5,-20}, -{66,5,-19}, -{66,5,-18}, -{66,5,-17}, -{66,5,-16}, -{66,5,-15}, -{66,5,-14}, -{66,5,-13}, -{66,5,-12}, -{66,5,-11}, -{66,5,-10}, -{66,5,-9}, -{66,5,-8}, -{66,5,-7}, -{66,5,-6}, -{66,5,-5}, -{66,5,-4}, -{66,5,-3}, -{66,5,-2}, -{66,5,-1}, -{66,5,0}, -{66,5,1}, -{66,5,2}, -{66,5,3}, -{66,5,4}, -{66,5,5}, -{66,5,6}, -{66,5,7}, -{66,5,8}, -{66,5,9}, -{66,5,10}, -{66,5,11}, -{66,5,12}, -{66,5,13}, -{66,5,14}, -{66,5,15}, -{66,5,16}, -{66,5,17}, -{66,5,18}, -{66,5,19}, -{66,5,20}, -{66,5,21}, -{66,5,22}, -{66,5,23}, -{66,5,24}, -{66,5,25}, -{66,5,26}, -{66,5,27}, -{66,5,28}, -{66,5,29}, -{66,5,30}, -{66,5,31}, -{66,5,32}, -{66,5,33}, -{66,5,34}, -{66,5,35}, -{66,5,36}, -{66,5,37}, -{66,5,38}, -{66,5,39}, -{66,5,40}, -{66,5,41}, -{66,5,42}, -{66,5,43}, -{66,5,44}, -{66,5,45}, -{66,5,46}, -{66,5,47}, -{66,5,48}, -{66,5,49}, -{66,5,50}, -{66,5,51}, -{66,5,52}, -{66,5,53}, -{66,5,54}, -{66,5,55}, -{66,5,56}, -{66,5,57}, -{66,5,58}, -{66,5,59}, -{66,5,60}, -{66,5,61}, -{66,5,62}, -{66,5,63}, -{66,5,64}, -{66,5,65}, -{66,5,66}, -{66,5,67}, -{66,5,68}, -{66,5,69}, -{66,5,70}, -{66,6,-52}, -{66,6,-51}, -{66,6,-50}, -{66,6,-49}, -{66,6,-48}, -{66,6,-47}, -{66,6,-46}, -{66,6,-45}, -{66,6,-44}, -{66,6,-43}, -{66,6,-42}, -{66,6,-41}, -{66,6,-40}, -{66,6,-39}, -{66,6,-38}, -{66,6,-37}, -{66,6,-36}, -{66,6,-35}, -{66,6,-34}, -{66,6,-33}, -{66,6,-32}, -{66,6,-31}, -{66,6,-30}, -{66,6,-29}, -{66,6,-28}, -{66,6,-27}, -{66,6,-26}, -{66,6,-25}, -{66,6,-24}, -{66,6,-23}, -{66,6,-22}, -{66,6,-21}, -{66,6,-20}, -{66,6,-19}, -{66,6,-18}, -{66,6,-17}, -{66,6,-16}, -{66,6,-15}, -{66,6,-14}, -{66,6,-13}, -{66,6,-12}, -{66,6,-11}, -{66,6,-10}, -{66,6,-9}, -{66,6,-8}, -{66,6,-7}, -{66,6,-6}, -{66,6,-5}, -{66,6,-4}, -{66,6,-3}, -{66,6,-2}, -{66,6,-1}, -{66,6,0}, -{66,6,1}, -{66,6,2}, -{66,6,3}, -{66,6,4}, -{66,6,5}, -{66,6,6}, -{66,6,7}, -{66,6,8}, -{66,6,9}, -{66,6,10}, -{66,6,11}, -{66,6,12}, -{66,6,13}, -{66,6,14}, -{66,6,15}, -{66,6,16}, -{66,6,17}, -{66,6,18}, -{66,6,19}, -{66,6,20}, -{66,6,21}, -{66,6,22}, -{66,6,23}, -{66,6,24}, -{66,6,25}, -{66,6,26}, -{66,6,27}, -{66,6,28}, -{66,6,29}, -{66,6,30}, -{66,6,31}, -{66,6,32}, -{66,6,33}, -{66,6,34}, -{66,6,35}, -{66,6,36}, -{66,6,37}, -{66,6,38}, -{66,6,39}, -{66,6,40}, -{66,6,41}, -{66,6,42}, -{66,6,43}, -{66,6,44}, -{66,6,45}, -{66,6,46}, -{66,6,47}, -{66,6,48}, -{66,6,49}, -{66,6,50}, -{66,6,51}, -{66,6,52}, -{66,6,53}, -{66,6,54}, -{66,6,55}, -{66,6,56}, -{66,6,57}, -{66,6,58}, -{66,6,59}, -{66,6,60}, -{66,6,61}, -{66,6,62}, -{66,6,63}, -{66,6,64}, -{66,6,65}, -{66,6,66}, -{66,6,67}, -{66,6,68}, -{66,6,69}, -{66,6,70}, -{66,7,-52}, -{66,7,-51}, -{66,7,-50}, -{66,7,-49}, -{66,7,-48}, -{66,7,-47}, -{66,7,-46}, -{66,7,-45}, -{66,7,-44}, -{66,7,-43}, -{66,7,-42}, -{66,7,-41}, -{66,7,-40}, -{66,7,-39}, -{66,7,-38}, -{66,7,-37}, -{66,7,-36}, -{66,7,-35}, -{66,7,-34}, -{66,7,-33}, -{66,7,-32}, -{66,7,-31}, -{66,7,-30}, -{66,7,-29}, -{66,7,-28}, -{66,7,-27}, -{66,7,-26}, -{66,7,-25}, -{66,7,-24}, -{66,7,-23}, -{66,7,-22}, -{66,7,-21}, -{66,7,-20}, -{66,7,-19}, -{66,7,-18}, -{66,7,-17}, -{66,7,-16}, -{66,7,-15}, -{66,7,-14}, -{66,7,-13}, -{66,7,-12}, -{66,7,-11}, -{66,7,-10}, -{66,7,-9}, -{66,7,-8}, -{66,7,-7}, -{66,7,-6}, -{66,7,-5}, -{66,7,-4}, -{66,7,-3}, -{66,7,-2}, -{66,7,-1}, -{66,7,0}, -{66,7,1}, -{66,7,2}, -{66,7,3}, -{66,7,4}, -{66,7,5}, -{66,7,6}, -{66,7,7}, -{66,7,8}, -{66,7,9}, -{66,7,10}, -{66,7,11}, -{66,7,12}, -{66,7,13}, -{66,7,14}, -{66,7,15}, -{66,7,16}, -{66,7,17}, -{66,7,18}, -{66,7,19}, -{66,7,20}, -{66,7,21}, -{66,7,22}, -{66,7,23}, -{66,7,24}, -{66,7,25}, -{66,7,26}, -{66,7,27}, -{66,7,28}, -{66,7,29}, -{66,7,30}, -{66,7,31}, -{66,7,32}, -{66,7,33}, -{66,7,34}, -{66,7,35}, -{66,7,36}, -{66,7,37}, -{66,7,38}, -{66,7,39}, -{66,7,40}, -{66,7,41}, -{66,7,42}, -{66,7,43}, -{66,7,44}, -{66,7,45}, -{66,7,46}, -{66,7,47}, -{66,7,48}, -{66,7,49}, -{66,7,50}, -{66,7,51}, -{66,7,52}, -{66,7,53}, -{66,7,54}, -{66,7,55}, -{66,7,56}, -{66,7,57}, -{66,7,58}, -{66,7,59}, -{66,7,60}, -{66,7,61}, -{66,7,62}, -{66,7,63}, -{66,7,64}, -{66,7,65}, -{66,7,66}, -{66,7,67}, -{66,7,68}, -{66,7,69}, -{66,7,70}, -{66,8,-52}, -{66,8,-51}, -{66,8,-50}, -{66,8,-49}, -{66,8,-48}, -{66,8,-47}, -{66,8,-46}, -{66,8,-45}, -{66,8,-44}, -{66,8,-43}, -{66,8,-42}, -{66,8,-41}, -{66,8,-40}, -{66,8,-39}, -{66,8,-38}, -{66,8,-37}, -{66,8,-36}, -{66,8,-35}, -{66,8,-34}, -{66,8,-33}, -{66,8,-32}, -{66,8,-31}, -{66,8,-30}, -{66,8,-29}, -{66,8,-28}, -{66,8,-27}, -{66,8,-26}, -{66,8,-25}, -{66,8,-24}, -{66,8,-23}, -{66,8,-22}, -{66,8,-21}, -{66,8,-20}, -{66,8,-19}, -{66,8,-18}, -{66,8,-17}, -{66,8,-16}, -{66,8,-15}, -{66,8,-14}, -{66,8,-13}, -{66,8,-12}, -{66,8,-11}, -{66,8,-10}, -{66,8,-9}, -{66,8,-8}, -{66,8,-7}, -{66,8,-6}, -{66,8,-5}, -{66,8,-4}, -{66,8,-3}, -{66,8,-2}, -{66,8,-1}, -{66,8,0}, -{66,8,1}, -{66,8,2}, -{66,8,3}, -{66,8,4}, -{66,8,5}, -{66,8,6}, -{66,8,7}, -{66,8,8}, -{66,8,9}, -{66,8,10}, -{66,8,11}, -{66,8,12}, -{66,8,13}, -{66,8,14}, -{66,8,15}, -{66,8,16}, -{66,8,17}, -{66,8,18}, -{66,8,19}, -{66,8,20}, -{66,8,21}, -{66,8,22}, -{66,8,23}, -{66,8,24}, -{66,8,25}, -{66,8,26}, -{66,8,27}, -{66,8,28}, -{66,8,29}, -{66,8,30}, -{66,8,31}, -{66,8,32}, -{66,8,33}, -{66,8,34}, -{66,8,35}, -{66,8,36}, -{66,8,37}, -{66,8,38}, -{66,8,39}, -{66,8,40}, -{66,8,41}, -{66,8,42}, -{66,8,43}, -{66,8,44}, -{66,8,45}, -{66,8,46}, -{66,8,47}, -{66,8,48}, -{66,8,49}, -{66,8,50}, -{66,8,51}, -{66,8,52}, -{66,8,53}, -{66,8,54}, -{66,8,55}, -{66,8,56}, -{66,8,57}, -{66,8,58}, -{66,8,59}, -{66,8,60}, -{66,8,61}, -{66,8,62}, -{66,8,63}, -{66,8,64}, -{66,8,65}, -{66,8,66}, -{66,8,67}, -{66,8,68}, -{66,8,69}, -{66,8,70}, -{66,9,-52}, -{66,9,-51}, -{66,9,-50}, -{66,9,-49}, -{66,9,-48}, -{66,9,-47}, -{66,9,-46}, -{66,9,-45}, -{66,9,-44}, -{66,9,-43}, -{66,9,-42}, -{66,9,-41}, -{66,9,-40}, -{66,9,-39}, -{66,9,-38}, -{66,9,-37}, -{66,9,-36}, -{66,9,-35}, -{66,9,-34}, -{66,9,-33}, -{66,9,-32}, -{66,9,-31}, -{66,9,-30}, -{66,9,-29}, -{66,9,-28}, -{66,9,-27}, -{66,9,-26}, -{66,9,-25}, -{66,9,-24}, -{66,9,-23}, -{66,9,-22}, -{66,9,-21}, -{66,9,-20}, -{66,9,-19}, -{66,9,-18}, -{66,9,-17}, -{66,9,-16}, -{66,9,-15}, -{66,9,-14}, -{66,9,-13}, -{66,9,-12}, -{66,9,-11}, -{66,9,-10}, -{66,9,-9}, -{66,9,-8}, -{66,9,-7}, -{66,9,-6}, -{66,9,-5}, -{66,9,-4}, -{66,9,-3}, -{66,9,-2}, -{66,9,-1}, -{66,9,0}, -{66,9,1}, -{66,9,2}, -{66,9,3}, -{66,9,4}, -{66,9,5}, -{66,9,6}, -{66,9,7}, -{66,9,8}, -{66,9,9}, -{66,9,10}, -{66,9,11}, -{66,9,12}, -{66,9,13}, -{66,9,14}, -{66,9,15}, -{66,9,16}, -{66,9,17}, -{66,9,18}, -{66,9,19}, -{66,9,20}, -{66,9,21}, -{66,9,22}, -{66,9,23}, -{66,9,24}, -{66,9,25}, -{66,9,26}, -{66,9,27}, -{66,9,28}, -{66,9,29}, -{66,9,30}, -{66,9,31}, -{66,9,32}, -{66,9,33}, -{66,9,34}, -{66,9,35}, -{66,9,36}, -{66,9,37}, -{66,9,38}, -{66,9,39}, -{66,9,40}, -{66,9,41}, -{66,9,42}, -{66,9,43}, -{66,9,44}, -{66,9,45}, -{66,9,46}, -{66,9,47}, -{66,9,48}, -{66,9,49}, -{66,9,50}, -{66,9,51}, -{66,9,52}, -{66,9,53}, -{66,9,54}, -{66,9,55}, -{66,9,56}, -{66,9,57}, -{66,9,58}, -{66,9,59}, -{66,9,60}, -{66,9,61}, -{66,9,62}, -{66,9,63}, -{66,9,64}, -{66,9,65}, -{66,9,66}, -{66,9,67}, -{66,9,68}, -{66,9,69}, -{66,9,70}, -{66,10,-52}, -{66,10,-51}, -{66,10,-50}, -{66,10,-49}, -{66,10,-48}, -{66,10,-47}, -{66,10,-46}, -{66,10,-45}, -{66,10,-44}, -{66,10,-43}, -{66,10,-42}, -{66,10,-41}, -{66,10,-40}, -{66,10,-39}, -{66,10,-38}, -{66,10,-37}, -{66,10,-36}, -{66,10,-35}, -{66,10,-34}, -{66,10,-33}, -{66,10,-32}, -{66,10,-31}, -{66,10,-30}, -{66,10,-29}, -{66,10,-28}, -{66,10,-27}, -{66,10,-26}, -{66,10,-25}, -{66,10,-24}, -{66,10,-23}, -{66,10,-22}, -{66,10,-21}, -{66,10,-20}, -{66,10,-19}, -{66,10,-18}, -{66,10,-17}, -{66,10,-16}, -{66,10,-15}, -{66,10,-14}, -{66,10,-13}, -{66,10,-12}, -{66,10,-11}, -{66,10,-10}, -{66,10,-9}, -{66,10,-8}, -{66,10,-7}, -{66,10,-6}, -{66,10,-5}, -{66,10,-4}, -{66,10,-3}, -{66,10,-2}, -{66,10,-1}, -{66,10,0}, -{66,10,1}, -{66,10,2}, -{66,10,3}, -{66,10,4}, -{66,10,5}, -{66,10,6}, -{66,10,7}, -{66,10,8}, -{66,10,9}, -{66,10,10}, -{66,10,11}, -{66,10,12}, -{66,10,13}, -{66,10,14}, -{66,10,15}, -{66,10,16}, -{66,10,17}, -{66,10,18}, -{66,10,19}, -{66,10,20}, -{66,10,21}, -{66,10,22}, -{66,10,23}, -{66,10,24}, -{66,10,25}, -{66,10,26}, -{66,10,27}, -{66,10,28}, -{66,10,29}, -{66,10,30}, -{66,10,31}, -{66,10,32}, -{66,10,33}, -{66,10,34}, -{66,10,35}, -{66,10,36}, -{66,10,37}, -{66,10,38}, -{66,10,39}, -{66,10,40}, -{66,10,41}, -{66,10,42}, -{66,10,43}, -{66,10,44}, -{66,10,45}, -{66,10,46}, -{66,10,47}, -{66,10,48}, -{66,10,49}, -{66,10,50}, -{66,10,51}, -{66,10,52}, -{66,10,53}, -{66,10,54}, -{66,10,55}, -{66,10,56}, -{66,10,57}, -{66,10,58}, -{66,10,59}, -{66,10,60}, -{66,10,61}, -{66,10,62}, -{66,10,63}, -{66,10,64}, -{66,10,65}, -{66,10,66}, -{66,10,67}, -{66,10,68}, -{66,10,69}, -{66,10,70}, -{66,11,-52}, -{66,11,-51}, -{66,11,-50}, -{66,11,-49}, -{66,11,-48}, -{66,11,-47}, -{66,11,-46}, -{66,11,-45}, -{66,11,-44}, -{66,11,-43}, -{66,11,-42}, -{66,11,-41}, -{66,11,-40}, -{66,11,-39}, -{66,11,-38}, -{66,11,-37}, -{66,11,-36}, -{66,11,-35}, -{66,11,-34}, -{66,11,-33}, -{66,11,-32}, -{66,11,-31}, -{66,11,-30}, -{66,11,-29}, -{66,11,-28}, -{66,11,-27}, -{66,11,-26}, -{66,11,-25}, -{66,11,-24}, -{66,11,-23}, -{66,11,-22}, -{66,11,-21}, -{66,11,-20}, -{66,11,-19}, -{66,11,-18}, -{66,11,-17}, -{66,11,-16}, -{66,11,-15}, -{66,11,-14}, -{66,11,-13}, -{66,11,-12}, -{66,11,-11}, -{66,11,-10}, -{66,11,-9}, -{66,11,-8}, -{66,11,-7}, -{66,11,-6}, -{66,11,-5}, -{66,11,-4}, -{66,11,-3}, -{66,11,-2}, -{66,11,-1}, -{66,11,0}, -{66,11,1}, -{66,11,2}, -{66,11,3}, -{66,11,4}, -{66,11,5}, -{66,11,6}, -{66,11,7}, -{66,11,8}, -{66,11,9}, -{66,11,10}, -{66,11,11}, -{66,11,12}, -{66,11,13}, -{66,11,14}, -{66,11,15}, -{66,11,16}, -{66,11,17}, -{66,11,18}, -{66,11,19}, -{66,11,20}, -{66,11,21}, -{66,11,22}, -{66,11,23}, -{66,11,24}, -{66,11,25}, -{66,11,26}, -{66,11,27}, -{66,11,28}, -{66,11,29}, -{66,11,30}, -{66,11,31}, -{66,11,32}, -{66,11,33}, -{66,11,34}, -{66,11,35}, -{66,11,36}, -{66,11,37}, -{66,11,38}, -{66,11,39}, -{66,11,40}, -{66,11,41}, -{66,11,42}, -{66,11,43}, -{66,11,44}, -{66,11,45}, -{66,11,46}, -{66,11,47}, -{66,11,48}, -{66,11,49}, -{66,11,50}, -{66,11,51}, -{66,11,52}, -{66,11,53}, -{66,11,54}, -{66,11,55}, -{66,11,56}, -{66,11,57}, -{66,11,58}, -{66,11,59}, -{66,11,60}, -{66,11,61}, -{66,11,62}, -{66,11,63}, -{66,11,64}, -{66,11,65}, -{66,11,66}, -{66,11,67}, -{66,11,68}, -{66,11,69}, -{66,11,70}, -{66,12,-52}, -{66,12,-51}, -{66,12,-50}, -{66,12,-49}, -{66,12,-48}, -{66,12,-47}, -{66,12,-46}, -{66,12,-45}, -{66,12,-44}, -{66,12,-43}, -{66,12,-42}, -{66,12,-41}, -{66,12,-40}, -{66,12,-39}, -{66,12,-38}, -{66,12,-37}, -{66,12,-36}, -{66,12,-35}, -{66,12,-34}, -{66,12,-33}, -{66,12,-32}, -{66,12,-31}, -{66,12,-30}, -{66,12,-29}, -{66,12,-28}, -{66,12,-27}, -{66,12,-26}, -{66,12,-25}, -{66,12,-24}, -{66,12,-23}, -{66,12,-22}, -{66,12,-21}, -{66,12,-20}, -{66,12,-19}, -{66,12,-18}, -{66,12,-17}, -{66,12,-16}, -{66,12,-15}, -{66,12,-14}, -{66,12,-13}, -{66,12,-12}, -{66,12,-11}, -{66,12,-10}, -{66,12,-9}, -{66,12,-8}, -{66,12,-7}, -{66,12,-6}, -{66,12,-5}, -{66,12,-4}, -{66,12,-3}, -{66,12,-2}, -{66,12,-1}, -{66,12,0}, -{66,12,1}, -{66,12,2}, -{66,12,3}, -{66,12,4}, -{66,12,5}, -{66,12,6}, -{66,12,7}, -{66,12,8}, -{66,12,9}, -{66,12,10}, -{66,12,11}, -{66,12,12}, -{66,12,13}, -{66,12,14}, -{66,12,15}, -{66,12,16}, -{66,12,17}, -{66,12,18}, -{66,12,19}, -{66,12,20}, -{66,12,21}, -{66,12,22}, -{66,12,23}, -{66,12,24}, -{66,12,25}, -{66,12,26}, -{66,12,27}, -{66,12,28}, -{66,12,29}, -{66,12,30}, -{66,12,31}, -{66,12,32}, -{66,12,33}, -{66,12,34}, -{66,12,35}, -{66,12,36}, -{66,12,37}, -{66,12,38}, -{66,12,39}, -{66,12,40}, -{66,12,41}, -{66,12,42}, -{66,12,43}, -{66,12,44}, -{66,12,45}, -{66,12,46}, -{66,12,47}, -{66,12,48}, -{66,12,49}, -{66,12,50}, -{66,12,51}, -{66,12,52}, -{66,12,53}, -{66,12,54}, -{66,12,55}, -{66,12,56}, -{66,12,57}, -{66,12,58}, -{66,12,59}, -{66,12,60}, -{66,12,61}, -{66,12,62}, -{66,12,63}, -{66,12,64}, -{66,12,65}, -{66,12,66}, -{66,12,67}, -{66,12,68}, -{66,12,69}, -{66,12,70}, -{66,13,-52}, -{66,13,-51}, -{66,13,-50}, -{66,13,-49}, -{66,13,-48}, -{66,13,-47}, -{66,13,-46}, -{66,13,-45}, -{66,13,-44}, -{66,13,-43}, -{66,13,-42}, -{66,13,-41}, -{66,13,-40}, -{66,13,-39}, -{66,13,-38}, -{66,13,-37}, -{66,13,-36}, -{66,13,-35}, -{66,13,-34}, -{66,13,-33}, -{66,13,-32}, -{66,13,-31}, -{66,13,-30}, -{66,13,-29}, -{66,13,-28}, -{66,13,-27}, -{66,13,-26}, -{66,13,-25}, -{66,13,-24}, -{66,13,-23}, -{66,13,-22}, -{66,13,-21}, -{66,13,-20}, -{66,13,-19}, -{66,13,-18}, -{66,13,-17}, -{66,13,-16}, -{66,13,-15}, -{66,13,-14}, -{66,13,-13}, -{66,13,-12}, -{66,13,-11}, -{66,13,-10}, -{66,13,-9}, -{66,13,-8}, -{66,13,-7}, -{66,13,-6}, -{66,13,-5}, -{66,13,-4}, -{66,13,-3}, -{66,13,-2}, -{66,13,-1}, -{66,13,0}, -{66,13,1}, -{66,13,2}, -{66,13,3}, -{66,13,4}, -{66,13,5}, -{66,13,6}, -{66,13,7}, -{66,13,8}, -{66,13,9}, -{66,13,10}, -{66,13,11}, -{66,13,12}, -{66,13,13}, -{66,13,14}, -{66,13,15}, -{66,13,16}, -{66,13,17}, -{66,13,18}, -{66,13,19}, -{66,13,20}, -{66,13,21}, -{66,13,22}, -{66,13,23}, -{66,13,24}, -{66,13,25}, -{66,13,26}, -{66,13,27}, -{66,13,28}, -{66,13,29}, -{66,13,30}, -{66,13,31}, -{66,13,32}, -{66,13,33}, -{66,13,34}, -{66,13,35}, -{66,13,36}, -{66,13,37}, -{66,13,38}, -{66,13,39}, -{66,13,40}, -{66,13,41}, -{66,13,42}, -{66,13,43}, -{66,13,44}, -{66,13,45}, -{66,13,46}, -{66,13,47}, -{66,13,48}, -{66,13,49}, -{66,13,50}, -{66,13,51}, -{66,13,52}, -{66,13,53}, -{66,13,54}, -{66,13,55}, -{66,13,56}, -{66,13,57}, -{66,13,58}, -{66,13,59}, -{66,13,60}, -{66,13,61}, -{66,13,62}, -{66,13,63}, -{66,13,64}, -{66,13,65}, -{66,13,66}, -{66,13,67}, -{66,13,68}, -{66,13,69}, -{66,13,70}, -{66,14,-52}, -{66,14,-51}, -{66,14,-50}, -{66,14,-49}, -{66,14,-48}, -{66,14,-47}, -{66,14,-46}, -{66,14,-45}, -{66,14,-44}, -{66,14,-43}, -{66,14,-42}, -{66,14,-41}, -{66,14,-40}, -{66,14,-39}, -{66,14,-38}, -{66,14,-37}, -{66,14,-36}, -{66,14,-35}, -{66,14,-34}, -{66,14,-33}, -{66,14,-32}, -{66,14,-31}, -{66,14,-30}, -{66,14,-29}, -{66,14,-28}, -{66,14,-27}, -{66,14,-26}, -{66,14,-25}, -{66,14,-24}, -{66,14,-23}, -{66,14,-22}, -{66,14,-21}, -{66,14,-20}, -{66,14,-19}, -{66,14,-18}, -{66,14,-17}, -{66,14,-16}, -{66,14,-15}, -{66,14,-14}, -{66,14,-13}, -{66,14,-12}, -{66,14,-11}, -{66,14,-10}, -{66,14,-9}, -{66,14,-8}, -{66,14,-7}, -{66,14,-6}, -{66,14,-5}, -{66,14,-4}, -{66,14,-3}, -{66,14,-2}, -{66,14,-1}, -{66,14,0}, -{66,14,1}, -{66,14,2}, -{66,14,3}, -{66,14,4}, -{66,14,5}, -{66,14,6}, -{66,14,7}, -{66,14,8}, -{66,14,9}, -{66,14,10}, -{66,14,11}, -{66,14,12}, -{66,14,13}, -{66,14,14}, -{66,14,15}, -{66,14,16}, -{66,14,17}, -{66,14,18}, -{66,14,19}, -{66,14,20}, -{66,14,21}, -{66,14,22}, -{66,14,23}, -{66,14,24}, -{66,14,25}, -{66,14,26}, -{66,14,27}, -{66,14,28}, -{66,14,29}, -{66,14,30}, -{66,14,31}, -{66,14,32}, -{66,14,33}, -{66,14,34}, -{66,14,35}, -{66,14,36}, -{66,14,37}, -{66,14,38}, -{66,14,39}, -{66,14,40}, -{66,14,41}, -{66,14,42}, -{66,14,43}, -{66,14,44}, -{66,14,45}, -{66,14,46}, -{66,14,47}, -{66,14,48}, -{66,14,49}, -{66,14,50}, -{66,14,51}, -{66,14,52}, -{66,14,53}, -{66,14,54}, -{66,14,55}, -{66,14,56}, -{66,14,57}, -{66,14,58}, -{66,14,59}, -{66,14,60}, -{66,14,61}, -{66,14,62}, -{66,14,63}, -{66,14,64}, -{66,14,65}, -{66,14,66}, -{66,14,67}, -{66,14,68}, -{66,14,69}, -{66,14,70}, -{66,15,-52}, -{66,15,-51}, -{66,15,-50}, -{66,15,-49}, -{66,15,-48}, -{66,15,-47}, -{66,15,-46}, -{66,15,-45}, -{66,15,-44}, -{66,15,-43}, -{66,15,-42}, -{66,15,-41}, -{66,15,-40}, -{66,15,-39}, -{66,15,-38}, -{66,15,-37}, -{66,15,-36}, -{66,15,-35}, -{66,15,-34}, -{66,15,-33}, -{66,15,-32}, -{66,15,-31}, -{66,15,-30}, -{66,15,-29}, -{66,15,-28}, -{66,15,-27}, -{66,15,-26}, -{66,15,-25}, -{66,15,-24}, -{66,15,-23}, -{66,15,-22}, -{66,15,-21}, -{66,15,-20}, -{66,15,-19}, -{66,15,-18}, -{66,15,-17}, -{66,15,-16}, -{66,15,-15}, -{66,15,-14}, -{66,15,-13}, -{66,15,-12}, -{66,15,-11}, -{66,15,-10}, -{66,15,-9}, -{66,15,-8}, -{66,15,-7}, -{66,15,-6}, -{66,15,-5}, -{66,15,-4}, -{66,15,-3}, -{66,15,-2}, -{66,15,-1}, -{66,15,0}, -{66,15,1}, -{66,15,2}, -{66,15,3}, -{66,15,4}, -{66,15,5}, -{66,15,6}, -{66,15,7}, -{66,15,8}, -{66,15,9}, -{66,15,10}, -{66,15,11}, -{66,15,12}, -{66,15,13}, -{66,15,14}, -{66,15,15}, -{66,15,16}, -{66,15,17}, -{66,15,18}, -{66,15,19}, -{66,15,20}, -{66,15,21}, -{66,15,22}, -{66,15,23}, -{66,15,24}, -{66,15,25}, -{66,15,26}, -{66,15,27}, -{66,15,28}, -{66,15,29}, -{66,15,30}, -{66,15,31}, -{66,15,32}, -{66,15,33}, -{66,15,34}, -{66,15,35}, -{66,15,36}, -{66,15,37}, -{66,15,38}, -{66,15,39}, -{66,15,40}, -{66,15,41}, -{66,15,42}, -{66,15,43}, -{66,15,44}, -{66,15,45}, -{66,15,46}, -{66,15,47}, -{66,15,48}, -{66,15,49}, -{66,15,50}, -{66,15,51}, -{66,15,52}, -{66,15,53}, -{66,15,54}, -{66,15,55}, -{66,15,56}, -{66,15,57}, -{66,15,58}, -{66,15,59}, -{66,15,60}, -{66,15,61}, -{66,15,62}, -{66,15,63}, -{66,15,64}, -{66,15,65}, -{66,15,66}, -{66,15,67}, -{66,15,68}, -{66,15,69}, -{66,15,70}, -{66,16,-52}, -{66,16,-51}, -{66,16,-50}, -{66,16,-49}, -{66,16,-48}, -{66,16,-47}, -{66,16,-46}, -{66,16,-45}, -{66,16,-44}, -{66,16,-43}, -{66,16,-42}, -{66,16,-41}, -{66,16,-40}, -{66,16,-39}, -{66,16,-38}, -{66,16,-37}, -{66,16,-36}, -{66,16,-35}, -{66,16,-34}, -{66,16,-33}, -{66,16,-32}, -{66,16,-31}, -{66,16,-30}, -{66,16,-29}, -{66,16,-28}, -{66,16,-27}, -{66,16,-26}, -{66,16,-25}, -{66,16,-24}, -{66,16,-23}, -{66,16,-22}, -{66,16,-21}, -{66,16,-20}, -{66,16,-19}, -{66,16,-18}, -{66,16,-17}, -{66,16,-16}, -{66,16,-15}, -{66,16,-14}, -{66,16,-13}, -{66,16,-12}, -{66,16,-11}, -{66,16,-10}, -{66,16,-9}, -{66,16,-8}, -{66,16,-7}, -{66,16,-6}, -{66,16,-5}, -{66,16,-4}, -{66,16,-3}, -{66,16,-2}, -{66,16,-1}, -{66,16,0}, -{66,16,1}, -{66,16,2}, -{66,16,3}, -{66,16,4}, -{66,16,5}, -{66,16,6}, -{66,16,7}, -{66,16,8}, -{66,16,9}, -{66,16,10}, -{66,16,11}, -{66,16,12}, -{66,16,13}, -{66,16,14}, -{66,16,15}, -{66,16,16}, -{66,16,17}, -{66,16,18}, -{66,16,19}, -{66,16,20}, -{66,16,21}, -{66,16,22}, -{66,16,23}, -{66,16,24}, -{66,16,25}, -{66,16,26}, -{66,16,27}, -{66,16,28}, -{66,16,29}, -{66,16,30}, -{66,16,31}, -{66,16,32}, -{66,16,33}, -{66,16,34}, -{66,16,35}, -{66,16,36}, -{66,16,37}, -{66,16,38}, -{66,16,39}, -{66,16,40}, -{66,16,41}, -{66,16,42}, -{66,16,43}, -{66,16,44}, -{66,16,45}, -{66,16,46}, -{66,16,47}, -{66,16,48}, -{66,16,49}, -{66,16,50}, -{66,16,51}, -{66,16,52}, -{66,16,53}, -{66,16,54}, -{66,16,55}, -{66,16,56}, -{66,16,57}, -{66,16,58}, -{66,16,59}, -{66,16,60}, -{66,16,61}, -{66,16,62}, -{66,16,63}, -{66,16,64}, -{66,16,65}, -{66,16,66}, -{66,16,67}, -{66,16,68}, -{66,16,69}, -{66,16,70}, -{66,17,-52}, -{66,17,-51}, -{66,17,-50}, -{66,17,-49}, -{66,17,-48}, -{66,17,-47}, -{66,17,-46}, -{66,17,-45}, -{66,17,-44}, -{66,17,-43}, -{66,17,-42}, -{66,17,-41}, -{66,17,-40}, -{66,17,-39}, -{66,17,-38}, -{66,17,-37}, -{66,17,-36}, -{66,17,-35}, -{66,17,-34}, -{66,17,-33}, -{66,17,-32}, -{66,17,-31}, -{66,17,-30}, -{66,17,-29}, -{66,17,-28}, -{66,17,-27}, -{66,17,-26}, -{66,17,-25}, -{66,17,-24}, -{66,17,-23}, -{66,17,-22}, -{66,17,-21}, -{66,17,-20}, -{66,17,-19}, -{66,17,-18}, -{66,17,-17}, -{66,17,-16}, -{66,17,-15}, -{66,17,-14}, -{66,17,-13}, -{66,17,-12}, -{66,17,-11}, -{66,17,-10}, -{66,17,-9}, -{66,17,-8}, -{66,17,-7}, -{66,17,-6}, -{66,17,-5}, -{66,17,-4}, -{66,17,-3}, -{66,17,-2}, -{66,17,-1}, -{66,17,0}, -{66,17,1}, -{66,17,2}, -{66,17,3}, -{66,17,4}, -{66,17,5}, -{66,17,6}, -{66,17,7}, -{66,17,8}, -{66,17,9}, -{66,17,10}, -{66,17,11}, -{66,17,12}, -{66,17,13}, -{66,17,14}, -{66,17,15}, -{66,17,16}, -{66,17,17}, -{66,17,18}, -{66,17,19}, -{66,17,20}, -{66,17,21}, -{66,17,22}, -{66,17,23}, -{66,17,24}, -{66,17,25}, -{66,17,26}, -{66,17,27}, -{66,17,28}, -{66,17,29}, -{66,17,30}, -{66,17,31}, -{66,17,32}, -{66,17,33}, -{66,17,34}, -{66,17,35}, -{66,17,36}, -{66,17,37}, -{66,17,38}, -{66,17,39}, -{66,17,40}, -{66,17,41}, -{66,17,42}, -{66,17,43}, -{66,17,44}, -{66,17,45}, -{66,17,46}, -{66,17,47}, -{66,17,48}, -{66,17,49}, -{66,17,50}, -{66,17,51}, -{66,17,52}, -{66,17,53}, -{66,17,54}, -{66,17,55}, -{66,17,56}, -{66,17,57}, -{66,17,58}, -{66,17,59}, -{66,17,60}, -{66,17,61}, -{66,17,62}, -{66,17,63}, -{66,17,64}, -{66,17,65}, -{66,17,66}, -{66,17,67}, -{66,17,68}, -{66,17,69}, -{66,17,70}, -{66,17,71}, -{66,18,-52}, -{66,18,-51}, -{66,18,-50}, -{66,18,-49}, -{66,18,-48}, -{66,18,-47}, -{66,18,-46}, -{66,18,-45}, -{66,18,-44}, -{66,18,-43}, -{66,18,-42}, -{66,18,-41}, -{66,18,-40}, -{66,18,-39}, -{66,18,-38}, -{66,18,-37}, -{66,18,-36}, -{66,18,-35}, -{66,18,-34}, -{66,18,-33}, -{66,18,-32}, -{66,18,-31}, -{66,18,-30}, -{66,18,-29}, -{66,18,-28}, -{66,18,-27}, -{66,18,-26}, -{66,18,-25}, -{66,18,-24}, -{66,18,-23}, -{66,18,-22}, -{66,18,-21}, -{66,18,-20}, -{66,18,-19}, -{66,18,-18}, -{66,18,-17}, -{66,18,-16}, -{66,18,-15}, -{66,18,-14}, -{66,18,-13}, -{66,18,-12}, -{66,18,-11}, -{66,18,-10}, -{66,18,-9}, -{66,18,-8}, -{66,18,-7}, -{66,18,-6}, -{66,18,-5}, -{66,18,-4}, -{66,18,-3}, -{66,18,-2}, -{66,18,-1}, -{66,18,0}, -{66,18,1}, -{66,18,2}, -{66,18,3}, -{66,18,4}, -{66,18,5}, -{66,18,6}, -{66,18,7}, -{66,18,8}, -{66,18,9}, -{66,18,10}, -{66,18,11}, -{66,18,12}, -{66,18,13}, -{66,18,14}, -{66,18,15}, -{66,18,16}, -{66,18,17}, -{66,18,18}, -{66,18,19}, -{66,18,20}, -{66,18,21}, -{66,18,22}, -{66,18,23}, -{66,18,24}, -{66,18,25}, -{66,18,26}, -{66,18,27}, -{66,18,28}, -{66,18,29}, -{66,18,30}, -{66,18,31}, -{66,18,32}, -{66,18,33}, -{66,18,34}, -{66,18,35}, -{66,18,36}, -{66,18,37}, -{66,18,38}, -{66,18,39}, -{66,18,40}, -{66,18,41}, -{66,18,42}, -{66,18,43}, -{66,18,44}, -{66,18,45}, -{66,18,46}, -{66,18,47}, -{66,18,48}, -{66,18,49}, -{66,18,50}, -{66,18,51}, -{66,18,52}, -{66,18,53}, -{66,18,54}, -{66,18,55}, -{66,18,56}, -{66,18,57}, -{66,18,58}, -{66,18,59}, -{66,18,60}, -{66,18,61}, -{66,18,62}, -{66,18,63}, -{66,18,64}, -{66,18,65}, -{66,18,66}, -{66,18,67}, -{66,18,68}, -{66,18,69}, -{66,18,70}, -{66,18,71}, -{66,19,-52}, -{66,19,-51}, -{66,19,-50}, -{66,19,-49}, -{66,19,-48}, -{66,19,-47}, -{66,19,-46}, -{66,19,-45}, -{66,19,-44}, -{66,19,-43}, -{66,19,-42}, -{66,19,-41}, -{66,19,-40}, -{66,19,-39}, -{66,19,-38}, -{66,19,-37}, -{66,19,-36}, -{66,19,-35}, -{66,19,-34}, -{66,19,-33}, -{66,19,-32}, -{66,19,-31}, -{66,19,-30}, -{66,19,-29}, -{66,19,-28}, -{66,19,-27}, -{66,19,-26}, -{66,19,-25}, -{66,19,-24}, -{66,19,-23}, -{66,19,-22}, -{66,19,-21}, -{66,19,-20}, -{66,19,-19}, -{66,19,-18}, -{66,19,-17}, -{66,19,-16}, -{66,19,-15}, -{66,19,-14}, -{66,19,-13}, -{66,19,-12}, -{66,19,-11}, -{66,19,-10}, -{66,19,-9}, -{66,19,-8}, -{66,19,-7}, -{66,19,-6}, -{66,19,-5}, -{66,19,-4}, -{66,19,-3}, -{66,19,-2}, -{66,19,-1}, -{66,19,0}, -{66,19,1}, -{66,19,2}, -{66,19,3}, -{66,19,4}, -{66,19,5}, -{66,19,6}, -{66,19,7}, -{66,19,8}, -{66,19,9}, -{66,19,10}, -{66,19,11}, -{66,19,12}, -{66,19,13}, -{66,19,14}, -{66,19,15}, -{66,19,16}, -{66,19,17}, -{66,19,18}, -{66,19,19}, -{66,19,20}, -{66,19,21}, -{66,19,22}, -{66,19,23}, -{66,19,24}, -{66,19,25}, -{66,19,26}, -{66,19,27}, -{66,19,28}, -{66,19,29}, -{66,19,30}, -{66,19,31}, -{66,19,32}, -{66,19,33}, -{66,19,34}, -{66,19,35}, -{66,19,36}, -{66,19,37}, -{66,19,38}, -{66,19,39}, -{66,19,40}, -{66,19,41}, -{66,19,42}, -{66,19,43}, -{66,19,44}, -{66,19,45}, -{66,19,46}, -{66,19,47}, -{66,19,48}, -{66,19,49}, -{66,19,50}, -{66,19,51}, -{66,19,52}, -{66,19,53}, -{66,19,54}, -{66,19,55}, -{66,19,56}, -{66,19,57}, -{66,19,58}, -{66,19,59}, -{66,19,60}, -{66,19,61}, -{66,19,62}, -{66,19,63}, -{66,19,64}, -{66,19,65}, -{66,19,66}, -{66,19,67}, -{66,19,68}, -{66,19,69}, -{66,19,70}, -{66,19,71}, -{66,20,-52}, -{66,20,-51}, -{66,20,-50}, -{66,20,-49}, -{66,20,-48}, -{66,20,-47}, -{66,20,-46}, -{66,20,-45}, -{66,20,-44}, -{66,20,-43}, -{66,20,-42}, -{66,20,-41}, -{66,20,-40}, -{66,20,-39}, -{66,20,-38}, -{66,20,-37}, -{66,20,-36}, -{66,20,-35}, -{66,20,-34}, -{66,20,-33}, -{66,20,-32}, -{66,20,-31}, -{66,20,-30}, -{66,20,-29}, -{66,20,-28}, -{66,20,-27}, -{66,20,-26}, -{66,20,-25}, -{66,20,-24}, -{66,20,-23}, -{66,20,-22}, -{66,20,-21}, -{66,20,-20}, -{66,20,-19}, -{66,20,-18}, -{66,20,-17}, -{66,20,-16}, -{66,20,-15}, -{66,20,-14}, -{66,20,-13}, -{66,20,-12}, -{66,20,-11}, -{66,20,-10}, -{66,20,-9}, -{66,20,-8}, -{66,20,-7}, -{66,20,-6}, -{66,20,-5}, -{66,20,-4}, -{66,20,-3}, -{66,20,-2}, -{66,20,-1}, -{66,20,0}, -{66,20,1}, -{66,20,2}, -{66,20,3}, -{66,20,4}, -{66,20,5}, -{66,20,6}, -{66,20,7}, -{66,20,8}, -{66,20,9}, -{66,20,10}, -{66,20,11}, -{66,20,12}, -{66,20,13}, -{66,20,14}, -{66,20,15}, -{66,20,16}, -{66,20,17}, -{66,20,18}, -{66,20,19}, -{66,20,20}, -{66,20,21}, -{66,20,22}, -{66,20,23}, -{66,20,24}, -{66,20,25}, -{66,20,26}, -{66,20,27}, -{66,20,28}, -{66,20,29}, -{66,20,30}, -{66,20,31}, -{66,20,32}, -{66,20,33}, -{66,20,34}, -{66,20,35}, -{66,20,36}, -{66,20,37}, -{66,20,38}, -{66,20,39}, -{66,20,40}, -{66,20,41}, -{66,20,42}, -{66,20,43}, -{66,20,44}, -{66,20,45}, -{66,20,46}, -{66,20,47}, -{66,20,48}, -{66,20,49}, -{66,20,50}, -{66,20,51}, -{66,20,52}, -{66,20,53}, -{66,20,54}, -{66,20,55}, -{66,20,56}, -{66,20,57}, -{66,20,58}, -{66,20,59}, -{66,20,60}, -{66,20,61}, -{66,20,62}, -{66,20,63}, -{66,20,64}, -{66,20,65}, -{66,20,66}, -{66,20,67}, -{66,20,68}, -{66,20,69}, -{66,20,70}, -{66,20,71}, -{66,21,-52}, -{66,21,-51}, -{66,21,-50}, -{66,21,-49}, -{66,21,-48}, -{66,21,-47}, -{66,21,-46}, -{66,21,-45}, -{66,21,-44}, -{66,21,-43}, -{66,21,-42}, -{66,21,-41}, -{66,21,-40}, -{66,21,-39}, -{66,21,-38}, -{66,21,-37}, -{66,21,-36}, -{66,21,-35}, -{66,21,-34}, -{66,21,-33}, -{66,21,-32}, -{66,21,-31}, -{66,21,-30}, -{66,21,-29}, -{66,21,-28}, -{66,21,-27}, -{66,21,-26}, -{66,21,-25}, -{66,21,-24}, -{66,21,-23}, -{66,21,-22}, -{66,21,-21}, -{66,21,-20}, -{66,21,-19}, -{66,21,-18}, -{66,21,-17}, -{66,21,-16}, -{66,21,-15}, -{66,21,-14}, -{66,21,-13}, -{66,21,-12}, -{66,21,-11}, -{66,21,-10}, -{66,21,-9}, -{66,21,-8}, -{66,21,-7}, -{66,21,-6}, -{66,21,-5}, -{66,21,-4}, -{66,21,-3}, -{66,21,-2}, -{66,21,-1}, -{66,21,0}, -{66,21,1}, -{66,21,2}, -{66,21,3}, -{66,21,4}, -{66,21,5}, -{66,21,6}, -{66,21,7}, -{66,21,8}, -{66,21,9}, -{66,21,10}, -{66,21,11}, -{66,21,12}, -{66,21,13}, -{66,21,14}, -{66,21,15}, -{66,21,16}, -{66,21,17}, -{66,21,18}, -{66,21,19}, -{66,21,20}, -{66,21,21}, -{66,21,22}, -{66,21,23}, -{66,21,24}, -{66,21,25}, -{66,21,26}, -{66,21,27}, -{66,21,28}, -{66,21,29}, -{66,21,30}, -{66,21,31}, -{66,21,32}, -{66,21,33}, -{66,21,34}, -{66,21,35}, -{66,21,36}, -{66,21,37}, -{66,21,38}, -{66,21,39}, -{66,21,40}, -{66,21,41}, -{66,21,42}, -{66,21,43}, -{66,21,44}, -{66,21,45}, -{66,21,46}, -{66,21,47}, -{66,21,48}, -{66,21,49}, -{66,21,50}, -{66,21,51}, -{66,21,52}, -{66,21,53}, -{66,21,54}, -{66,21,55}, -{66,21,56}, -{66,21,57}, -{66,21,58}, -{66,21,59}, -{66,21,60}, -{66,21,61}, -{66,21,62}, -{66,21,63}, -{66,21,64}, -{66,21,65}, -{66,21,66}, -{66,21,67}, -{66,21,68}, -{66,21,69}, -{66,21,70}, -{66,21,71}, -{66,22,-52}, -{66,22,-51}, -{66,22,-50}, -{66,22,-49}, -{66,22,-48}, -{66,22,-47}, -{66,22,-46}, -{66,22,-45}, -{66,22,-44}, -{66,22,-43}, -{66,22,-42}, -{66,22,-41}, -{66,22,-40}, -{66,22,-39}, -{66,22,-38}, -{66,22,-37}, -{66,22,-36}, -{66,22,-35}, -{66,22,-34}, -{66,22,-33}, -{66,22,-32}, -{66,22,-31}, -{66,22,-30}, -{66,22,-29}, -{66,22,-28}, -{66,22,-27}, -{66,22,-26}, -{66,22,-25}, -{66,22,-24}, -{66,22,-23}, -{66,22,-22}, -{66,22,-21}, -{66,22,-20}, -{66,22,-19}, -{66,22,-18}, -{66,22,-17}, -{66,22,-16}, -{66,22,-15}, -{66,22,-14}, -{66,22,-13}, -{66,22,-12}, -{66,22,-11}, -{66,22,-10}, -{66,22,-9}, -{66,22,-8}, -{66,22,-7}, -{66,22,-6}, -{66,22,-5}, -{66,22,-4}, -{66,22,-3}, -{66,22,-2}, -{66,22,-1}, -{66,22,0}, -{66,22,1}, -{66,22,2}, -{66,22,3}, -{66,22,4}, -{66,22,5}, -{66,22,6}, -{66,22,7}, -{66,22,8}, -{66,22,9}, -{66,22,10}, -{66,22,11}, -{66,22,12}, -{66,22,13}, -{66,22,14}, -{66,22,15}, -{66,22,16}, -{66,22,17}, -{66,22,18}, -{66,22,19}, -{66,22,20}, -{66,22,21}, -{66,22,22}, -{66,22,23}, -{66,22,24}, -{66,22,25}, -{66,22,26}, -{66,22,27}, -{66,22,28}, -{66,22,29}, -{66,22,30}, -{66,22,31}, -{66,22,32}, -{66,22,33}, -{66,22,34}, -{66,22,35}, -{66,22,36}, -{66,22,37}, -{66,22,38}, -{66,22,39}, -{66,22,40}, -{66,22,41}, -{66,22,42}, -{66,22,43}, -{66,22,44}, -{66,22,45}, -{66,22,46}, -{66,22,47}, -{66,22,48}, -{66,22,49}, -{66,22,50}, -{66,22,51}, -{66,22,52}, -{66,22,53}, -{66,22,54}, -{66,22,55}, -{66,22,56}, -{66,22,57}, -{66,22,58}, -{66,22,59}, -{66,22,60}, -{66,22,61}, -{66,22,62}, -{66,22,63}, -{66,22,64}, -{66,22,65}, -{66,22,66}, -{66,22,67}, -{66,22,68}, -{66,22,69}, -{66,22,70}, -{66,22,71}, -{66,23,-52}, -{66,23,-51}, -{66,23,-50}, -{66,23,-49}, -{66,23,-48}, -{66,23,-47}, -{66,23,-46}, -{66,23,-45}, -{66,23,-44}, -{66,23,-43}, -{66,23,-42}, -{66,23,-41}, -{66,23,-40}, -{66,23,-39}, -{66,23,-38}, -{66,23,-37}, -{66,23,-36}, -{66,23,-35}, -{66,23,-34}, -{66,23,-33}, -{66,23,-32}, -{66,23,-31}, -{66,23,-30}, -{66,23,-29}, -{66,23,-28}, -{66,23,-27}, -{66,23,-26}, -{66,23,-25}, -{66,23,-24}, -{66,23,-23}, -{66,23,-22}, -{66,23,-21}, -{66,23,-20}, -{66,23,-19}, -{66,23,-18}, -{66,23,-17}, -{66,23,-16}, -{66,23,-15}, -{66,23,-14}, -{66,23,-13}, -{66,23,-12}, -{66,23,-11}, -{66,23,-10}, -{66,23,-9}, -{66,23,-8}, -{66,23,-7}, -{66,23,-6}, -{66,23,-5}, -{66,23,-4}, -{66,23,-3}, -{66,23,-2}, -{66,23,-1}, -{66,23,0}, -{66,23,1}, -{66,23,2}, -{66,23,3}, -{66,23,4}, -{66,23,5}, -{66,23,6}, -{66,23,7}, -{66,23,8}, -{66,23,9}, -{66,23,10}, -{66,23,11}, -{66,23,12}, -{66,23,13}, -{66,23,14}, -{66,23,15}, -{66,23,16}, -{66,23,17}, -{66,23,18}, -{66,23,19}, -{66,23,20}, -{66,23,21}, -{66,23,22}, -{66,23,23}, -{66,23,24}, -{66,23,25}, -{66,23,26}, -{66,23,27}, -{66,23,28}, -{66,23,29}, -{66,23,30}, -{66,23,31}, -{66,23,32}, -{66,23,33}, -{66,23,34}, -{66,23,35}, -{66,23,36}, -{66,23,37}, -{66,23,38}, -{66,23,39}, -{66,23,40}, -{66,23,41}, -{66,23,42}, -{66,23,43}, -{66,23,44}, -{66,23,45}, -{66,23,46}, -{66,23,47}, -{66,23,48}, -{66,23,49}, -{66,23,50}, -{66,23,51}, -{66,23,52}, -{66,23,53}, -{66,23,54}, -{66,23,55}, -{66,23,56}, -{66,23,57}, -{66,23,58}, -{66,23,59}, -{66,23,60}, -{66,23,61}, -{66,23,62}, -{66,23,63}, -{66,23,64}, -{66,23,65}, -{66,23,66}, -{66,23,67}, -{66,23,68}, -{66,23,69}, -{66,23,70}, -{66,23,71}, -{66,24,-52}, -{66,24,-51}, -{66,24,-50}, -{66,24,-49}, -{66,24,-48}, -{66,24,-47}, -{66,24,-46}, -{66,24,-45}, -{66,24,-44}, -{66,24,-43}, -{66,24,-42}, -{66,24,-41}, -{66,24,-40}, -{66,24,-39}, -{66,24,-38}, -{66,24,-37}, -{66,24,-36}, -{66,24,-35}, -{66,24,-34}, -{66,24,-33}, -{66,24,-32}, -{66,24,-31}, -{66,24,-30}, -{66,24,-29}, -{66,24,-28}, -{66,24,-27}, -{66,24,-26}, -{66,24,-25}, -{66,24,-24}, -{66,24,-23}, -{66,24,-22}, -{66,24,-21}, -{66,24,-20}, -{66,24,-19}, -{66,24,-18}, -{66,24,-17}, -{66,24,-16}, -{66,24,-15}, -{66,24,-14}, -{66,24,-13}, -{66,24,-12}, -{66,24,-11}, -{66,24,-10}, -{66,24,-9}, -{66,24,-8}, -{66,24,-7}, -{66,24,-6}, -{66,24,-5}, -{66,24,-4}, -{66,24,-3}, -{66,24,-2}, -{66,24,-1}, -{66,24,0}, -{66,24,1}, -{66,24,2}, -{66,24,3}, -{66,24,4}, -{66,24,5}, -{66,24,6}, -{66,24,7}, -{66,24,8}, -{66,24,9}, -{66,24,10}, -{66,24,11}, -{66,24,12}, -{66,24,13}, -{66,24,14}, -{66,24,15}, -{66,24,16}, -{66,24,17}, -{66,24,18}, -{66,24,19}, -{66,24,20}, -{66,24,21}, -{66,24,22}, -{66,24,23}, -{66,24,24}, -{66,24,25}, -{66,24,26}, -{66,24,27}, -{66,24,28}, -{66,24,29}, -{66,24,30}, -{66,24,31}, -{66,24,32}, -{66,24,33}, -{66,24,34}, -{66,24,35}, -{66,24,36}, -{66,24,37}, -{66,24,38}, -{66,24,39}, -{66,24,40}, -{66,24,41}, -{66,24,42}, -{66,24,43}, -{66,24,44}, -{66,24,45}, -{66,24,46}, -{66,24,47}, -{66,24,48}, -{66,24,49}, -{66,24,50}, -{66,24,51}, -{66,24,52}, -{66,24,53}, -{66,24,54}, -{66,24,55}, -{66,24,56}, -{66,24,57}, -{66,24,58}, -{66,24,59}, -{66,24,60}, -{66,24,61}, -{66,24,62}, -{66,24,63}, -{66,24,64}, -{66,24,65}, -{66,24,66}, -{66,24,67}, -{66,24,68}, -{66,24,69}, -{66,24,70}, -{66,24,71}, -{66,25,-52}, -{66,25,-51}, -{66,25,-50}, -{66,25,-49}, -{66,25,-48}, -{66,25,-47}, -{66,25,-46}, -{66,25,-45}, -{66,25,-44}, -{66,25,-43}, -{66,25,-42}, -{66,25,-41}, -{66,25,-40}, -{66,25,-39}, -{66,25,-38}, -{66,25,-37}, -{66,25,-36}, -{66,25,-35}, -{66,25,-34}, -{66,25,-33}, -{66,25,-32}, -{66,25,-31}, -{66,25,-30}, -{66,25,-29}, -{66,25,-28}, -{66,25,-27}, -{66,25,-26}, -{66,25,-25}, -{66,25,-24}, -{66,25,-23}, -{66,25,-22}, -{66,25,-21}, -{66,25,-20}, -{66,25,-19}, -{66,25,-18}, -{66,25,-17}, -{66,25,-16}, -{66,25,-15}, -{66,25,-14}, -{66,25,-13}, -{66,25,-12}, -{66,25,-11}, -{66,25,-10}, -{66,25,-9}, -{66,25,-8}, -{66,25,-7}, -{66,25,-6}, -{66,25,-5}, -{66,25,-4}, -{66,25,-3}, -{66,25,-2}, -{66,25,-1}, -{66,25,0}, -{66,25,1}, -{66,25,2}, -{66,25,3}, -{66,25,4}, -{66,25,5}, -{66,25,6}, -{66,25,7}, -{66,25,8}, -{66,25,9}, -{66,25,10}, -{66,25,11}, -{66,25,12}, -{66,25,13}, -{66,25,14}, -{66,25,15}, -{66,25,16}, -{66,25,17}, -{66,25,18}, -{66,25,19}, -{66,25,20}, -{66,25,21}, -{66,25,22}, -{66,25,23}, -{66,25,24}, -{66,25,25}, -{66,25,26}, -{66,25,27}, -{66,25,28}, -{66,25,29}, -{66,25,30}, -{66,25,31}, -{66,25,32}, -{66,25,33}, -{66,25,34}, -{66,25,35}, -{66,25,36}, -{66,25,37}, -{66,25,38}, -{66,25,39}, -{66,25,40}, -{66,25,41}, -{66,25,42}, -{66,25,43}, -{66,25,44}, -{66,25,45}, -{66,25,46}, -{66,25,47}, -{66,25,48}, -{66,25,49}, -{66,25,50}, -{66,25,51}, -{66,25,52}, -{66,25,53}, -{66,25,54}, -{66,25,55}, -{66,25,56}, -{66,25,57}, -{66,25,58}, -{66,25,59}, -{66,25,60}, -{66,25,61}, -{66,25,62}, -{66,25,63}, -{66,25,64}, -{66,25,65}, -{66,25,66}, -{66,25,67}, -{66,25,68}, -{66,25,69}, -{66,25,70}, -{66,25,71}, -{66,26,-52}, -{66,26,-51}, -{66,26,-50}, -{66,26,-49}, -{66,26,-48}, -{66,26,-47}, -{66,26,-46}, -{66,26,-45}, -{66,26,-44}, -{66,26,-43}, -{66,26,-42}, -{66,26,-41}, -{66,26,-40}, -{66,26,-39}, -{66,26,-38}, -{66,26,-37}, -{66,26,-36}, -{66,26,-35}, -{66,26,-34}, -{66,26,-33}, -{66,26,-32}, -{66,26,-31}, -{66,26,-30}, -{66,26,-29}, -{66,26,-28}, -{66,26,-27}, -{66,26,-26}, -{66,26,-25}, -{66,26,-24}, -{66,26,-23}, -{66,26,-22}, -{66,26,-21}, -{66,26,-20}, -{66,26,-19}, -{66,26,-18}, -{66,26,-17}, -{66,26,-16}, -{66,26,-15}, -{66,26,-14}, -{66,26,-13}, -{66,26,-12}, -{66,26,-11}, -{66,26,-10}, -{66,26,-9}, -{66,26,-8}, -{66,26,-7}, -{66,26,-6}, -{66,26,-5}, -{66,26,-4}, -{66,26,-3}, -{66,26,-2}, -{66,26,-1}, -{66,26,0}, -{66,26,1}, -{66,26,2}, -{66,26,3}, -{66,26,4}, -{66,26,5}, -{66,26,6}, -{66,26,7}, -{66,26,8}, -{66,26,9}, -{66,26,10}, -{66,26,11}, -{66,26,12}, -{66,26,13}, -{66,26,14}, -{66,26,15}, -{66,26,16}, -{66,26,17}, -{66,26,18}, -{66,26,19}, -{66,26,20}, -{66,26,21}, -{66,26,22}, -{66,26,23}, -{66,26,24}, -{66,26,25}, -{66,26,26}, -{66,26,27}, -{66,26,28}, -{66,26,29}, -{66,26,30}, -{66,26,31}, -{66,26,32}, -{66,26,33}, -{66,26,34}, -{66,26,35}, -{66,26,36}, -{66,26,37}, -{66,26,38}, -{66,26,39}, -{66,26,40}, -{66,26,41}, -{66,26,42}, -{66,26,43}, -{66,26,44}, -{66,26,45}, -{66,26,46}, -{66,26,47}, -{66,26,48}, -{66,26,49}, -{66,26,50}, -{66,26,51}, -{66,26,52}, -{66,26,53}, -{66,26,54}, -{66,26,55}, -{66,26,56}, -{66,26,57}, -{66,26,58}, -{66,26,59}, -{66,26,60}, -{66,26,61}, -{66,26,62}, -{66,26,63}, -{66,26,64}, -{66,26,65}, -{66,26,66}, -{66,26,67}, -{66,26,68}, -{66,26,69}, -{66,26,70}, -{66,26,71}, -{66,27,-52}, -{66,27,-51}, -{66,27,-50}, -{66,27,-49}, -{66,27,-48}, -{66,27,-47}, -{66,27,-46}, -{66,27,-45}, -{66,27,-44}, -{66,27,-43}, -{66,27,-42}, -{66,27,-41}, -{66,27,-40}, -{66,27,-39}, -{66,27,-38}, -{66,27,-37}, -{66,27,-36}, -{66,27,-35}, -{66,27,-34}, -{66,27,-33}, -{66,27,-32}, -{66,27,-31}, -{66,27,-30}, -{66,27,-29}, -{66,27,-28}, -{66,27,-27}, -{66,27,-26}, -{66,27,-25}, -{66,27,-24}, -{66,27,-23}, -{66,27,-22}, -{66,27,-21}, -{66,27,-20}, -{66,27,-19}, -{66,27,-18}, -{66,27,-17}, -{66,27,-16}, -{66,27,-15}, -{66,27,-14}, -{66,27,-13}, -{66,27,-12}, -{66,27,-11}, -{66,27,-10}, -{66,27,-9}, -{66,27,-8}, -{66,27,-7}, -{66,27,-6}, -{66,27,-5}, -{66,27,-4}, -{66,27,-3}, -{66,27,-2}, -{66,27,-1}, -{66,27,0}, -{66,27,1}, -{66,27,2}, -{66,27,3}, -{66,27,4}, -{66,27,5}, -{66,27,6}, -{66,27,7}, -{66,27,8}, -{66,27,9}, -{66,27,10}, -{66,27,11}, -{66,27,12}, -{66,27,13}, -{66,27,14}, -{66,27,15}, -{66,27,16}, -{66,27,17}, -{66,27,18}, -{66,27,19}, -{66,27,20}, -{66,27,21}, -{66,27,22}, -{66,27,23}, -{66,27,24}, -{66,27,25}, -{66,27,26}, -{66,27,27}, -{66,27,28}, -{66,27,29}, -{66,27,30}, -{66,27,31}, -{66,27,32}, -{66,27,33}, -{66,27,34}, -{66,27,35}, -{66,27,36}, -{66,27,37}, -{66,27,38}, -{66,27,39}, -{66,27,40}, -{66,27,41}, -{66,27,42}, -{66,27,43}, -{66,27,44}, -{66,27,45}, -{66,27,46}, -{66,27,47}, -{66,27,48}, -{66,27,49}, -{66,27,50}, -{66,27,51}, -{66,27,52}, -{66,27,53}, -{66,27,54}, -{66,27,55}, -{66,27,56}, -{66,27,57}, -{66,27,58}, -{66,27,59}, -{66,27,60}, -{66,27,61}, -{66,27,62}, -{66,27,63}, -{66,27,64}, -{66,27,65}, -{66,27,66}, -{66,27,67}, -{66,27,68}, -{66,27,69}, -{66,27,70}, -{66,27,71}, -{66,28,-52}, -{66,28,-51}, -{66,28,-50}, -{66,28,-49}, -{66,28,-48}, -{66,28,-47}, -{66,28,-46}, -{66,28,-45}, -{66,28,-44}, -{66,28,-43}, -{66,28,-42}, -{66,28,-41}, -{66,28,-40}, -{66,28,-39}, -{66,28,-38}, -{66,28,-37}, -{66,28,-36}, -{66,28,-35}, -{66,28,-34}, -{66,28,-33}, -{66,28,-32}, -{66,28,-31}, -{66,28,-30}, -{66,28,-29}, -{66,28,-28}, -{66,28,-27}, -{66,28,-26}, -{66,28,-25}, -{66,28,-24}, -{66,28,-23}, -{66,28,-22}, -{66,28,-21}, -{66,28,-20}, -{66,28,-19}, -{66,28,-18}, -{66,28,-17}, -{66,28,-16}, -{66,28,-15}, -{66,28,-14}, -{66,28,-13}, -{66,28,-12}, -{66,28,-11}, -{66,28,-10}, -{66,28,-9}, -{66,28,-8}, -{66,28,-7}, -{66,28,-6}, -{66,28,-5}, -{66,28,-4}, -{66,28,-3}, -{66,28,-2}, -{66,28,-1}, -{66,28,0}, -{66,28,1}, -{66,28,2}, -{66,28,3}, -{66,28,4}, -{66,28,5}, -{66,28,6}, -{66,28,7}, -{66,28,8}, -{66,28,9}, -{66,28,10}, -{66,28,11}, -{66,28,12}, -{66,28,13}, -{66,28,14}, -{66,28,15}, -{66,28,16}, -{66,28,17}, -{66,28,18}, -{66,28,19}, -{66,28,20}, -{66,28,21}, -{66,28,22}, -{66,28,23}, -{66,28,24}, -{66,28,25}, -{66,28,26}, -{66,28,27}, -{66,28,28}, -{66,28,29}, -{66,28,30}, -{66,28,31}, -{66,28,32}, -{66,28,33}, -{66,28,34}, -{66,28,35}, -{66,28,36}, -{66,28,37}, -{66,28,38}, -{66,28,39}, -{66,28,40}, -{66,28,41}, -{66,28,42}, -{66,28,43}, -{66,28,44}, -{66,28,45}, -{66,28,46}, -{66,28,47}, -{66,28,48}, -{66,28,49}, -{66,28,50}, -{66,28,51}, -{66,28,52}, -{66,28,53}, -{66,28,54}, -{66,28,55}, -{66,28,56}, -{66,28,57}, -{66,28,58}, -{66,28,59}, -{66,28,60}, -{66,28,61}, -{66,28,62}, -{66,28,63}, -{66,28,64}, -{66,28,65}, -{66,28,66}, -{66,28,67}, -{66,28,68}, -{66,28,69}, -{66,28,70}, -{66,28,71}, -{66,29,-52}, -{66,29,-51}, -{66,29,-50}, -{66,29,-49}, -{66,29,-48}, -{66,29,-47}, -{66,29,-46}, -{66,29,-45}, -{66,29,-44}, -{66,29,-43}, -{66,29,-42}, -{66,29,-41}, -{66,29,-40}, -{66,29,-39}, -{66,29,-38}, -{66,29,-37}, -{66,29,-36}, -{66,29,-35}, -{66,29,-34}, -{66,29,-33}, -{66,29,-32}, -{66,29,-31}, -{66,29,-30}, -{66,29,-29}, -{66,29,-28}, -{66,29,-27}, -{66,29,-26}, -{66,29,-25}, -{66,29,-24}, -{66,29,-23}, -{66,29,-22}, -{66,29,-21}, -{66,29,-20}, -{66,29,-19}, -{66,29,-18}, -{66,29,-17}, -{66,29,-16}, -{66,29,-15}, -{66,29,-14}, -{66,29,-13}, -{66,29,-12}, -{66,29,-11}, -{66,29,-10}, -{66,29,-9}, -{66,29,-8}, -{66,29,-7}, -{66,29,-6}, -{66,29,-5}, -{66,29,-4}, -{66,29,-3}, -{66,29,-2}, -{66,29,-1}, -{66,29,0}, -{66,29,1}, -{66,29,2}, -{66,29,3}, -{66,29,4}, -{66,29,5}, -{66,29,6}, -{66,29,7}, -{66,29,8}, -{66,29,9}, -{66,29,10}, -{66,29,11}, -{66,29,12}, -{66,29,13}, -{66,29,14}, -{66,29,15}, -{66,29,16}, -{66,29,17}, -{66,29,18}, -{66,29,19}, -{66,29,20}, -{66,29,21}, -{66,29,22}, -{66,29,23}, -{66,29,24}, -{66,29,25}, -{66,29,26}, -{66,29,27}, -{66,29,28}, -{66,29,29}, -{66,29,30}, -{66,29,31}, -{66,29,32}, -{66,29,33}, -{66,29,34}, -{66,29,35}, -{66,29,36}, -{66,29,37}, -{66,29,38}, -{66,29,39}, -{66,29,40}, -{66,29,41}, -{66,29,42}, -{66,29,43}, -{66,29,44}, -{66,29,45}, -{66,29,46}, -{66,29,47}, -{66,29,48}, -{66,29,49}, -{66,29,50}, -{66,29,51}, -{66,29,52}, -{66,29,53}, -{66,29,54}, -{66,29,55}, -{66,29,56}, -{66,29,57}, -{66,29,58}, -{66,29,59}, -{66,29,60}, -{66,29,61}, -{66,29,62}, -{66,29,63}, -{66,29,64}, -{66,29,65}, -{66,29,66}, -{66,29,67}, -{66,29,68}, -{66,29,69}, -{66,29,70}, -{66,29,71}, -{66,29,72}, -{66,30,-52}, -{66,30,-51}, -{66,30,-50}, -{66,30,-49}, -{66,30,-48}, -{66,30,-47}, -{66,30,-46}, -{66,30,-45}, -{66,30,-44}, -{66,30,-43}, -{66,30,-42}, -{66,30,-41}, -{66,30,-40}, -{66,30,-39}, -{66,30,-38}, -{66,30,-37}, -{66,30,-36}, -{66,30,-35}, -{66,30,-34}, -{66,30,-33}, -{66,30,-32}, -{66,30,-31}, -{66,30,-30}, -{66,30,-29}, -{66,30,-28}, -{66,30,-27}, -{66,30,-26}, -{66,30,-25}, -{66,30,-24}, -{66,30,-23}, -{66,30,-22}, -{66,30,-21}, -{66,30,-20}, -{66,30,-19}, -{66,30,-18}, -{66,30,-17}, -{66,30,-16}, -{66,30,-15}, -{66,30,-14}, -{66,30,-13}, -{66,30,-12}, -{66,30,-11}, -{66,30,-10}, -{66,30,-9}, -{66,30,-8}, -{66,30,-7}, -{66,30,-6}, -{66,30,-5}, -{66,30,-4}, -{66,30,-3}, -{66,30,-2}, -{66,30,-1}, -{66,30,0}, -{66,30,1}, -{66,30,2}, -{66,30,3}, -{66,30,4}, -{66,30,5}, -{66,30,6}, -{66,30,7}, -{66,30,8}, -{66,30,9}, -{66,30,10}, -{66,30,11}, -{66,30,12}, -{66,30,13}, -{66,30,14}, -{66,30,15}, -{66,30,16}, -{66,30,17}, -{66,30,18}, -{66,30,19}, -{66,30,20}, -{66,30,21}, -{66,30,22}, -{66,30,23}, -{66,30,24}, -{66,30,25}, -{66,30,26}, -{66,30,27}, -{66,30,28}, -{66,30,29}, -{66,30,30}, -{66,30,31}, -{66,30,32}, -{66,30,33}, -{66,30,34}, -{66,30,35}, -{66,30,36}, -{66,30,37}, -{66,30,38}, -{66,30,39}, -{66,30,40}, -{66,30,41}, -{66,30,42}, -{66,30,43}, -{66,30,44}, -{66,30,45}, -{66,30,46}, -{66,30,47}, -{66,30,48}, -{66,30,49}, -{66,30,50}, -{66,30,51}, -{66,30,52}, -{66,30,53}, -{66,30,54}, -{66,30,55}, -{66,30,56}, -{66,30,57}, -{66,30,58}, -{66,30,59}, -{66,30,60}, -{66,30,61}, -{66,30,62}, -{66,30,63}, -{66,30,64}, -{66,30,65}, -{66,30,66}, -{66,30,67}, -{66,30,68}, -{66,30,69}, -{66,30,70}, -{66,30,71}, -{66,30,72}, -{66,31,-52}, -{66,31,-51}, -{66,31,-50}, -{66,31,-49}, -{66,31,-48}, -{66,31,-47}, -{66,31,-46}, -{66,31,-45}, -{66,31,-44}, -{66,31,-43}, -{66,31,-42}, -{66,31,-41}, -{66,31,-40}, -{66,31,-39}, -{66,31,-38}, -{66,31,-37}, -{66,31,-36}, -{66,31,-35}, -{66,31,-34}, -{66,31,-33}, -{66,31,-32}, -{66,31,-31}, -{66,31,-30}, -{66,31,-29}, -{66,31,-28}, -{66,31,-27}, -{66,31,-26}, -{66,31,-25}, -{66,31,-24}, -{66,31,-23}, -{66,31,-22}, -{66,31,-21}, -{66,31,-20}, -{66,31,-19}, -{66,31,-18}, -{66,31,-17}, -{66,31,-16}, -{66,31,-15}, -{66,31,-14}, -{66,31,-13}, -{66,31,-12}, -{66,31,-11}, -{66,31,-10}, -{66,31,-9}, -{66,31,-8}, -{66,31,-7}, -{66,31,-6}, -{66,31,-5}, -{66,31,-4}, -{66,31,-3}, -{66,31,-2}, -{66,31,-1}, -{66,31,0}, -{66,31,1}, -{66,31,2}, -{66,31,3}, -{66,31,4}, -{66,31,5}, -{66,31,6}, -{66,31,7}, -{66,31,8}, -{66,31,9}, -{66,31,10}, -{66,31,11}, -{66,31,12}, -{66,31,13}, -{66,31,14}, -{66,31,15}, -{66,31,16}, -{66,31,17}, -{66,31,18}, -{66,31,19}, -{66,31,20}, -{66,31,21}, -{66,31,22}, -{66,31,23}, -{66,31,24}, -{66,31,25}, -{66,31,26}, -{66,31,27}, -{66,31,28}, -{66,31,29}, -{66,31,30}, -{66,31,31}, -{66,31,32}, -{66,31,33}, -{66,31,34}, -{66,31,35}, -{66,31,36}, -{66,31,37}, -{66,31,38}, -{66,31,39}, -{66,31,40}, -{66,31,41}, -{66,31,42}, -{66,31,43}, -{66,31,44}, -{66,31,45}, -{66,31,46}, -{66,31,47}, -{66,31,48}, -{66,31,49}, -{66,31,50}, -{66,31,51}, -{66,31,52}, -{66,31,53}, -{66,31,54}, -{66,31,55}, -{66,31,56}, -{66,31,57}, -{66,31,58}, -{66,31,59}, -{66,31,60}, -{66,31,61}, -{66,31,62}, -{66,31,63}, -{66,31,64}, -{66,31,65}, -{66,31,66}, -{66,31,67}, -{66,31,68}, -{66,31,69}, -{66,31,70}, -{66,31,71}, -{66,31,72}, -{66,32,-52}, -{66,32,-51}, -{66,32,-50}, -{66,32,-49}, -{66,32,-48}, -{66,32,-47}, -{66,32,-46}, -{66,32,-45}, -{66,32,-44}, -{66,32,-43}, -{66,32,-42}, -{66,32,-41}, -{66,32,-40}, -{66,32,-39}, -{66,32,-38}, -{66,32,-37}, -{66,32,-36}, -{66,32,-35}, -{66,32,-34}, -{66,32,-33}, -{66,32,-32}, -{66,32,-31}, -{66,32,-30}, -{66,32,-29}, -{66,32,-28}, -{66,32,-27}, -{66,32,-26}, -{66,32,-25}, -{66,32,-24}, -{66,32,-23}, -{66,32,-22}, -{66,32,-21}, -{66,32,-20}, -{66,32,-19}, -{66,32,-18}, -{66,32,-17}, -{66,32,-16}, -{66,32,-15}, -{66,32,-14}, -{66,32,-13}, -{66,32,-12}, -{66,32,-11}, -{66,32,-10}, -{66,32,-9}, -{66,32,-8}, -{66,32,-7}, -{66,32,-6}, -{66,32,-5}, -{66,32,-4}, -{66,32,-3}, -{66,32,-2}, -{66,32,-1}, -{66,32,0}, -{66,32,1}, -{66,32,2}, -{66,32,3}, -{66,32,4}, -{66,32,5}, -{66,32,6}, -{66,32,7}, -{66,32,8}, -{66,32,9}, -{66,32,10}, -{66,32,11}, -{66,32,12}, -{66,32,13}, -{66,32,14}, -{66,32,15}, -{66,32,16}, -{66,32,17}, -{66,32,18}, -{66,32,19}, -{66,32,20}, -{66,32,21}, -{66,32,22}, -{66,32,23}, -{66,32,24}, -{66,32,25}, -{66,32,26}, -{66,32,27}, -{66,32,28}, -{66,32,29}, -{66,32,30}, -{66,32,31}, -{66,32,32}, -{66,32,33}, -{66,32,34}, -{66,32,35}, -{66,32,36}, -{66,32,37}, -{66,32,38}, -{66,32,39}, -{66,32,40}, -{66,32,41}, -{66,32,42}, -{66,32,43}, -{66,32,44}, -{66,32,45}, -{66,32,46}, -{66,32,47}, -{66,32,48}, -{66,32,49}, -{66,32,50}, -{66,32,51}, -{66,32,52}, -{66,32,53}, -{66,32,54}, -{66,32,55}, -{66,32,56}, -{66,32,57}, -{66,32,58}, -{66,32,59}, -{66,32,60}, -{66,32,61}, -{66,32,62}, -{66,32,63}, -{66,32,64}, -{66,32,65}, -{66,32,66}, -{66,32,67}, -{66,32,68}, -{66,32,69}, -{66,32,70}, -{66,32,71}, -{66,32,72}, -{66,33,-52}, -{66,33,-51}, -{66,33,-50}, -{66,33,-49}, -{66,33,-48}, -{66,33,-47}, -{66,33,-46}, -{66,33,-45}, -{66,33,-44}, -{66,33,-43}, -{66,33,-42}, -{66,33,-41}, -{66,33,-40}, -{66,33,-39}, -{66,33,-38}, -{66,33,-37}, -{66,33,-36}, -{66,33,-35}, -{66,33,-34}, -{66,33,-33}, -{66,33,-32}, -{66,33,-31}, -{66,33,-30}, -{66,33,-29}, -{66,33,-28}, -{66,33,-27}, -{66,33,-26}, -{66,33,-25}, -{66,33,-24}, -{66,33,-23}, -{66,33,-22}, -{66,33,-21}, -{66,33,-20}, -{66,33,-19}, -{66,33,-18}, -{66,33,-17}, -{66,33,-16}, -{66,33,-15}, -{66,33,-14}, -{66,33,-13}, -{66,33,-12}, -{66,33,-11}, -{66,33,-10}, -{66,33,-9}, -{66,33,-8}, -{66,33,-7}, -{66,33,-6}, -{66,33,-5}, -{66,33,-4}, -{66,33,-3}, -{66,33,-2}, -{66,33,-1}, -{66,33,0}, -{66,33,1}, -{66,33,2}, -{66,33,3}, -{66,33,4}, -{66,33,5}, -{66,33,6}, -{66,33,7}, -{66,33,8}, -{66,33,9}, -{66,33,10}, -{66,33,11}, -{66,33,12}, -{66,33,13}, -{66,33,14}, -{66,33,15}, -{66,33,16}, -{66,33,17}, -{66,33,18}, -{66,33,19}, -{66,33,20}, -{66,33,21}, -{66,33,22}, -{66,33,23}, -{66,33,24}, -{66,33,25}, -{66,33,26}, -{66,33,27}, -{66,33,28}, -{66,33,29}, -{66,33,30}, -{66,33,31}, -{66,33,32}, -{66,33,33}, -{66,33,34}, -{66,33,35}, -{66,33,36}, -{66,33,37}, -{66,33,38}, -{66,33,39}, -{66,33,40}, -{66,33,41}, -{66,33,42}, -{66,33,43}, -{66,33,44}, -{66,33,45}, -{66,33,46}, -{66,33,47}, -{66,33,48}, -{66,33,49}, -{66,33,50}, -{66,33,51}, -{66,33,52}, -{66,33,53}, -{66,33,54}, -{66,33,55}, -{66,33,56}, -{66,33,57}, -{66,33,58}, -{66,33,59}, -{66,33,60}, -{66,33,61}, -{66,33,62}, -{66,33,63}, -{66,33,64}, -{66,33,65}, -{66,33,66}, -{66,33,67}, -{66,33,68}, -{66,33,69}, -{66,33,70}, -{66,33,71}, -{66,33,72}, -{66,34,-52}, -{66,34,-51}, -{66,34,-50}, -{66,34,-49}, -{66,34,-48}, -{66,34,-47}, -{66,34,-46}, -{66,34,-45}, -{66,34,-44}, -{66,34,-43}, -{66,34,-42}, -{66,34,-41}, -{66,34,-40}, -{66,34,-39}, -{66,34,-38}, -{66,34,-37}, -{66,34,-36}, -{66,34,-35}, -{66,34,-34}, -{66,34,-33}, -{66,34,-32}, -{66,34,-31}, -{66,34,-30}, -{66,34,-29}, -{66,34,-28}, -{66,34,-27}, -{66,34,-26}, -{66,34,-25}, -{66,34,-24}, -{66,34,-23}, -{66,34,-22}, -{66,34,-21}, -{66,34,-20}, -{66,34,-19}, -{66,34,-18}, -{66,34,-17}, -{66,34,-16}, -{66,34,-15}, -{66,34,-14}, -{66,34,-13}, -{66,34,-12}, -{66,34,-11}, -{66,34,-10}, -{66,34,-9}, -{66,34,-8}, -{66,34,-7}, -{66,34,-6}, -{66,34,-5}, -{66,34,-4}, -{66,34,-3}, -{66,34,-2}, -{66,34,-1}, -{66,34,0}, -{66,34,1}, -{66,34,2}, -{66,34,3}, -{66,34,4}, -{66,34,5}, -{66,34,6}, -{66,34,7}, -{66,34,8}, -{66,34,9}, -{66,34,10}, -{66,34,11}, -{66,34,12}, -{66,34,13}, -{66,34,14}, -{66,34,15}, -{66,34,16}, -{66,34,17}, -{66,34,18}, -{66,34,19}, -{66,34,20}, -{66,34,21}, -{66,34,22}, -{66,34,23}, -{66,34,24}, -{66,34,25}, -{66,34,26}, -{66,34,27}, -{66,34,28}, -{66,34,29}, -{66,34,30}, -{66,34,31}, -{66,34,32}, -{66,34,33}, -{66,34,34}, -{66,34,35}, -{66,34,36}, -{66,34,37}, -{66,34,38}, -{66,34,39}, -{66,34,40}, -{66,34,41}, -{66,34,42}, -{66,34,43}, -{66,34,44}, -{66,34,45}, -{66,34,46}, -{66,34,47}, -{66,34,48}, -{66,34,49}, -{66,34,50}, -{66,34,51}, -{66,34,52}, -{66,34,53}, -{66,34,54}, -{66,34,55}, -{66,34,56}, -{66,34,57}, -{66,34,58}, -{66,34,59}, -{66,34,60}, -{66,34,61}, -{66,34,62}, -{66,34,63}, -{66,34,64}, -{66,34,65}, -{66,34,66}, -{66,34,67}, -{66,34,68}, -{66,34,69}, -{66,34,70}, -{66,34,71}, -{66,34,72}, -{66,35,-52}, -{66,35,-51}, -{66,35,-50}, -{66,35,-49}, -{66,35,-48}, -{66,35,-47}, -{66,35,-46}, -{66,35,-45}, -{66,35,-44}, -{66,35,-43}, -{66,35,-42}, -{66,35,-41}, -{66,35,-40}, -{66,35,-39}, -{66,35,-38}, -{66,35,-37}, -{66,35,-36}, -{66,35,-35}, -{66,35,-34}, -{66,35,-33}, -{66,35,-32}, -{66,35,-31}, -{66,35,-30}, -{66,35,-29}, -{66,35,-28}, -{66,35,-27}, -{66,35,-26}, -{66,35,-25}, -{66,35,-24}, -{66,35,-23}, -{66,35,-22}, -{66,35,-21}, -{66,35,-20}, -{66,35,-19}, -{66,35,-18}, -{66,35,-17}, -{66,35,-16}, -{66,35,-15}, -{66,35,-14}, -{66,35,-13}, -{66,35,-12}, -{66,35,-11}, -{66,35,-10}, -{66,35,-9}, -{66,35,-8}, -{66,35,-7}, -{66,35,-6}, -{66,35,-5}, -{66,35,-4}, -{66,35,-3}, -{66,35,-2}, -{66,35,-1}, -{66,35,0}, -{66,35,1}, -{66,35,2}, -{66,35,3}, -{66,35,4}, -{66,35,5}, -{66,35,6}, -{66,35,7}, -{66,35,8}, -{66,35,9}, -{66,35,10}, -{66,35,11}, -{66,35,12}, -{66,35,13}, -{66,35,14}, -{66,35,15}, -{66,35,16}, -{66,35,17}, -{66,35,18}, -{66,35,19}, -{66,35,20}, -{66,35,21}, -{66,35,22}, -{66,35,23}, -{66,35,24}, -{66,35,25}, -{66,35,26}, -{66,35,27}, -{66,35,28}, -{66,35,29}, -{66,35,30}, -{66,35,31}, -{66,35,32}, -{66,35,33}, -{66,35,34}, -{66,35,35}, -{66,35,36}, -{66,35,37}, -{66,35,38}, -{66,35,39}, -{66,35,40}, -{66,35,41}, -{66,35,42}, -{66,35,43}, -{66,35,44}, -{66,35,45}, -{66,35,46}, -{66,35,47}, -{66,35,48}, -{66,35,49}, -{66,35,50}, -{66,35,51}, -{66,35,52}, -{66,35,53}, -{66,35,54}, -{66,35,55}, -{66,35,56}, -{66,35,57}, -{66,35,58}, -{66,35,59}, -{66,35,60}, -{66,35,61}, -{66,35,62}, -{66,35,63}, -{66,35,64}, -{66,35,65}, -{66,35,66}, -{66,35,67}, -{66,35,68}, -{66,35,69}, -{66,35,70}, -{66,35,71}, -{66,35,72}, -{66,36,-52}, -{66,36,-51}, -{66,36,-50}, -{66,36,-49}, -{66,36,-48}, -{66,36,-47}, -{66,36,-46}, -{66,36,-45}, -{66,36,-44}, -{66,36,-43}, -{66,36,-42}, -{66,36,-41}, -{66,36,-40}, -{66,36,-39}, -{66,36,-38}, -{66,36,-37}, -{66,36,-36}, -{66,36,-35}, -{66,36,-34}, -{66,36,-33}, -{66,36,-32}, -{66,36,-31}, -{66,36,-30}, -{66,36,-29}, -{66,36,-28}, -{66,36,-27}, -{66,36,-26}, -{66,36,-25}, -{66,36,-24}, -{66,36,-23}, -{66,36,-22}, -{66,36,-21}, -{66,36,-20}, -{66,36,-19}, -{66,36,-18}, -{66,36,-17}, -{66,36,-16}, -{66,36,-15}, -{66,36,-14}, -{66,36,-13}, -{66,36,-12}, -{66,36,-11}, -{66,36,-10}, -{66,36,-9}, -{66,36,-8}, -{66,36,-7}, -{66,36,-6}, -{66,36,-5}, -{66,36,-4}, -{66,36,-3}, -{66,36,-2}, -{66,36,-1}, -{66,36,0}, -{66,36,1}, -{66,36,2}, -{66,36,3}, -{66,36,4}, -{66,36,5}, -{66,36,6}, -{66,36,7}, -{66,36,8}, -{66,36,9}, -{66,36,10}, -{66,36,11}, -{66,36,12}, -{66,36,13}, -{66,36,14}, -{66,36,15}, -{66,36,16}, -{66,36,17}, -{66,36,18}, -{66,36,19}, -{66,36,20}, -{66,36,21}, -{66,36,22}, -{66,36,23}, -{66,36,24}, -{66,36,25}, -{66,36,26}, -{66,36,27}, -{66,36,28}, -{66,36,29}, -{66,36,30}, -{66,36,31}, -{66,36,32}, -{66,36,33}, -{66,36,34}, -{66,36,35}, -{66,36,36}, -{66,36,37}, -{66,36,38}, -{66,36,39}, -{66,36,40}, -{66,36,41}, -{66,36,42}, -{66,36,43}, -{66,36,44}, -{66,36,45}, -{66,36,46}, -{66,36,47}, -{66,36,48}, -{66,36,49}, -{66,36,50}, -{66,36,51}, -{66,36,52}, -{66,36,53}, -{66,36,54}, -{66,36,55}, -{66,36,56}, -{66,36,57}, -{66,36,58}, -{66,36,59}, -{66,36,60}, -{66,36,61}, -{66,36,62}, -{66,36,63}, -{66,36,64}, -{66,36,65}, -{66,36,66}, -{66,36,67}, -{66,36,68}, -{66,36,69}, -{66,36,70}, -{66,36,71}, -{66,36,72}, -{66,37,-52}, -{66,37,-51}, -{66,37,-50}, -{66,37,-49}, -{66,37,-48}, -{66,37,-47}, -{66,37,-46}, -{66,37,-45}, -{66,37,-44}, -{66,37,-43}, -{66,37,-42}, -{66,37,-41}, -{66,37,-40}, -{66,37,-39}, -{66,37,-38}, -{66,37,-37}, -{66,37,-36}, -{66,37,-35}, -{66,37,-34}, -{66,37,-33}, -{66,37,-32}, -{66,37,-31}, -{66,37,-30}, -{66,37,-29}, -{66,37,-28}, -{66,37,-27}, -{66,37,-26}, -{66,37,-25}, -{66,37,-24}, -{66,37,-23}, -{66,37,-22}, -{66,37,-21}, -{66,37,-20}, -{66,37,-19}, -{66,37,-18}, -{66,37,-17}, -{66,37,-16}, -{66,37,-15}, -{66,37,-14}, -{66,37,-13}, -{66,37,-12}, -{66,37,-11}, -{66,37,-10}, -{66,37,-9}, -{66,37,-8}, -{66,37,-7}, -{66,37,-6}, -{66,37,-5}, -{66,37,-4}, -{66,37,-3}, -{66,37,-2}, -{66,37,-1}, -{66,37,0}, -{66,37,1}, -{66,37,2}, -{66,37,3}, -{66,37,4}, -{66,37,5}, -{66,37,6}, -{66,37,7}, -{66,37,8}, -{66,37,9}, -{66,37,10}, -{66,37,11}, -{66,37,12}, -{66,37,13}, -{66,37,14}, -{66,37,15}, -{66,37,16}, -{66,37,17}, -{66,37,18}, -{66,37,19}, -{66,37,20}, -{66,37,21}, -{66,37,22}, -{66,37,23}, -{66,37,24}, -{66,37,25}, -{66,37,26}, -{66,37,27}, -{66,37,28}, -{66,37,29}, -{66,37,30}, -{66,37,31}, -{66,37,32}, -{66,37,33}, -{66,37,34}, -{66,37,35}, -{66,37,36}, -{66,37,37}, -{66,37,38}, -{66,37,39}, -{66,37,40}, -{66,37,41}, -{66,37,42}, -{66,37,43}, -{66,37,44}, -{66,37,45}, -{66,37,46}, -{66,37,47}, -{66,37,48}, -{66,37,49}, -{66,37,50}, -{66,37,51}, -{66,37,52}, -{66,37,53}, -{66,37,54}, -{66,37,55}, -{66,37,56}, -{66,37,57}, -{66,37,58}, -{66,37,59}, -{66,37,60}, -{66,37,61}, -{66,37,62}, -{66,37,63}, -{66,37,64}, -{66,37,65}, -{66,37,66}, -{66,37,67}, -{66,37,68}, -{66,37,69}, -{66,37,70}, -{66,37,71}, -{66,37,72}, -{66,38,-52}, -{66,38,-51}, -{66,38,-50}, -{66,38,-49}, -{66,38,-48}, -{66,38,-47}, -{66,38,-46}, -{66,38,-45}, -{66,38,-44}, -{66,38,-43}, -{66,38,-42}, -{66,38,-41}, -{66,38,-40}, -{66,38,-39}, -{66,38,-38}, -{66,38,-37}, -{66,38,-36}, -{66,38,-35}, -{66,38,-34}, -{66,38,-33}, -{66,38,-32}, -{66,38,-31}, -{66,38,-30}, -{66,38,-29}, -{66,38,-28}, -{66,38,-27}, -{66,38,-26}, -{66,38,-25}, -{66,38,-24}, -{66,38,-23}, -{66,38,-22}, -{66,38,-21}, -{66,38,-20}, -{66,38,-19}, -{66,38,-18}, -{66,38,-17}, -{66,38,-16}, -{66,38,-15}, -{66,38,-14}, -{66,38,-13}, -{66,38,-12}, -{66,38,-11}, -{66,38,-10}, -{66,38,-9}, -{66,38,-8}, -{66,38,-7}, -{66,38,-6}, -{66,38,-5}, -{66,38,-4}, -{66,38,-3}, -{66,38,-2}, -{66,38,-1}, -{66,38,0}, -{66,38,1}, -{66,38,2}, -{66,38,3}, -{66,38,4}, -{66,38,5}, -{66,38,6}, -{66,38,7}, -{66,38,8}, -{66,38,9}, -{66,38,10}, -{66,38,11}, -{66,38,12}, -{66,38,13}, -{66,38,14}, -{66,38,15}, -{66,38,16}, -{66,38,17}, -{66,38,18}, -{66,38,19}, -{66,38,20}, -{66,38,21}, -{66,38,22}, -{66,38,23}, -{66,38,24}, -{66,38,25}, -{66,38,26}, -{66,38,27}, -{66,38,28}, -{66,38,29}, -{66,38,30}, -{66,38,31}, -{66,38,32}, -{66,38,33}, -{66,38,34}, -{66,38,35}, -{66,38,36}, -{66,38,37}, -{66,38,38}, -{66,38,39}, -{66,38,40}, -{66,38,41}, -{66,38,42}, -{66,38,43}, -{66,38,44}, -{66,38,45}, -{66,38,46}, -{66,38,47}, -{66,38,48}, -{66,38,49}, -{66,38,50}, -{66,38,51}, -{66,38,52}, -{66,38,53}, -{66,38,54}, -{66,38,55}, -{66,38,56}, -{66,38,57}, -{66,38,58}, -{66,38,59}, -{66,38,60}, -{66,38,61}, -{66,38,62}, -{66,38,63}, -{66,38,64}, -{66,38,65}, -{66,38,66}, -{66,38,67}, -{66,38,68}, -{66,38,69}, -{66,38,70}, -{66,38,71}, -{66,38,72}, -{66,39,-52}, -{66,39,-51}, -{66,39,-50}, -{66,39,-49}, -{66,39,-48}, -{66,39,-47}, -{66,39,-46}, -{66,39,-45}, -{66,39,-44}, -{66,39,-43}, -{66,39,-42}, -{66,39,-41}, -{66,39,-40}, -{66,39,-39}, -{66,39,-38}, -{66,39,-37}, -{66,39,-36}, -{66,39,-35}, -{66,39,-34}, -{66,39,-33}, -{66,39,-32}, -{66,39,-31}, -{66,39,-30}, -{66,39,-29}, -{66,39,-28}, -{66,39,-27}, -{66,39,-26}, -{66,39,-25}, -{66,39,-24}, -{66,39,-23}, -{66,39,-22}, -{66,39,-21}, -{66,39,-20}, -{66,39,-19}, -{66,39,-18}, -{66,39,-17}, -{66,39,-16}, -{66,39,-15}, -{66,39,-14}, -{66,39,-13}, -{66,39,-12}, -{66,39,-11}, -{66,39,-10}, -{66,39,-9}, -{66,39,-8}, -{66,39,-7}, -{66,39,-6}, -{66,39,-5}, -{66,39,-4}, -{66,39,-3}, -{66,39,-2}, -{66,39,-1}, -{66,39,0}, -{66,39,1}, -{66,39,2}, -{66,39,3}, -{66,39,4}, -{66,39,5}, -{66,39,6}, -{66,39,7}, -{66,39,8}, -{66,39,9}, -{66,39,10}, -{66,39,11}, -{66,39,12}, -{66,39,13}, -{66,39,14}, -{66,39,15}, -{66,39,16}, -{66,39,17}, -{66,39,18}, -{66,39,19}, -{66,39,20}, -{66,39,21}, -{66,39,22}, -{66,39,23}, -{66,39,24}, -{66,39,25}, -{66,39,26}, -{66,39,27}, -{66,39,28}, -{66,39,29}, -{66,39,30}, -{66,39,31}, -{66,39,32}, -{66,39,33}, -{66,39,34}, -{66,39,35}, -{66,39,36}, -{66,39,37}, -{66,39,38}, -{66,39,39}, -{66,39,40}, -{66,39,41}, -{66,39,42}, -{66,39,43}, -{66,39,44}, -{66,39,45}, -{66,39,46}, -{66,39,47}, -{66,39,48}, -{66,39,49}, -{66,39,50}, -{66,39,51}, -{66,39,52}, -{66,39,53}, -{66,39,54}, -{66,39,55}, -{66,39,56}, -{66,39,57}, -{66,39,58}, -{66,39,59}, -{66,39,60}, -{66,39,61}, -{66,39,62}, -{66,39,63}, -{66,39,64}, -{66,39,65}, -{66,39,66}, -{66,39,67}, -{66,39,68}, -{66,39,69}, -{66,39,70}, -{66,39,71}, -{66,39,72}, -{66,40,-52}, -{66,40,-51}, -{66,40,-50}, -{66,40,-49}, -{66,40,-48}, -{66,40,-47}, -{66,40,-46}, -{66,40,-45}, -{66,40,-44}, -{66,40,-43}, -{66,40,-42}, -{66,40,-41}, -{66,40,-40}, -{66,40,-39}, -{66,40,-38}, -{66,40,-37}, -{66,40,-36}, -{66,40,-35}, -{66,40,-34}, -{66,40,-33}, -{66,40,-32}, -{66,40,-31}, -{66,40,-30}, -{66,40,-29}, -{66,40,-28}, -{66,40,-27}, -{66,40,-26}, -{66,40,-25}, -{66,40,-24}, -{66,40,-23}, -{66,40,-22}, -{66,40,-21}, -{66,40,-20}, -{66,40,-19}, -{66,40,-18}, -{66,40,-17}, -{66,40,-16}, -{66,40,-15}, -{66,40,-14}, -{66,40,-13}, -{66,40,-12}, -{66,40,-11}, -{66,40,-10}, -{66,40,-9}, -{66,40,-8}, -{66,40,-7}, -{66,40,-6}, -{66,40,-5}, -{66,40,-4}, -{66,40,-3}, -{66,40,-2}, -{66,40,-1}, -{66,40,0}, -{66,40,1}, -{66,40,2}, -{66,40,3}, -{66,40,4}, -{66,40,5}, -{66,40,6}, -{66,40,7}, -{66,40,8}, -{66,40,9}, -{66,40,10}, -{66,40,11}, -{66,40,12}, -{66,40,13}, -{66,40,14}, -{66,40,15}, -{66,40,16}, -{66,40,17}, -{66,40,18}, -{66,40,19}, -{66,40,20}, -{66,40,21}, -{66,40,22}, -{66,40,23}, -{66,40,24}, -{66,40,25}, -{66,40,26}, -{66,40,27}, -{66,40,28}, -{66,40,29}, -{66,40,30}, -{66,40,31}, -{66,40,32}, -{66,40,33}, -{66,40,34}, -{66,40,35}, -{66,40,36}, -{66,40,37}, -{66,40,38}, -{66,40,39}, -{66,40,40}, -{66,40,41}, -{66,40,42}, -{66,40,43}, -{66,40,44}, -{66,40,45}, -{66,40,46}, -{66,40,47}, -{66,40,48}, -{66,40,49}, -{66,40,50}, -{66,40,51}, -{66,40,52}, -{66,40,53}, -{66,40,54}, -{66,40,55}, -{66,40,56}, -{66,40,57}, -{66,40,58}, -{66,40,59}, -{66,40,60}, -{66,40,61}, -{66,40,62}, -{66,40,63}, -{66,40,64}, -{66,40,65}, -{66,40,66}, -{66,40,67}, -{66,40,68}, -{66,40,69}, -{66,40,70}, -{66,40,71}, -{66,40,72}, -{66,40,73}, -{66,41,-52}, -{66,41,-51}, -{66,41,-50}, -{66,41,-49}, -{66,41,-48}, -{66,41,-47}, -{66,41,-46}, -{66,41,-45}, -{66,41,-44}, -{66,41,-43}, -{66,41,-42}, -{66,41,-41}, -{66,41,-40}, -{66,41,-39}, -{66,41,-38}, -{66,41,-37}, -{66,41,-36}, -{66,41,-35}, -{66,41,-34}, -{66,41,-33}, -{66,41,-32}, -{66,41,-31}, -{66,41,-30}, -{66,41,-29}, -{66,41,-28}, -{66,41,-27}, -{66,41,-26}, -{66,41,-25}, -{66,41,-24}, -{66,41,-23}, -{66,41,-22}, -{66,41,-21}, -{66,41,-20}, -{66,41,-19}, -{66,41,-18}, -{66,41,-17}, -{66,41,-16}, -{66,41,-15}, -{66,41,-14}, -{66,41,-13}, -{66,41,-12}, -{66,41,-11}, -{66,41,-10}, -{66,41,-9}, -{66,41,-8}, -{66,41,-7}, -{66,41,-6}, -{66,41,-5}, -{66,41,-4}, -{66,41,-3}, -{66,41,-2}, -{66,41,-1}, -{66,41,0}, -{66,41,1}, -{66,41,2}, -{66,41,3}, -{66,41,4}, -{66,41,5}, -{66,41,6}, -{66,41,7}, -{66,41,8}, -{66,41,9}, -{66,41,10}, -{66,41,11}, -{66,41,12}, -{66,41,13}, -{66,41,14}, -{66,41,15}, -{66,41,16}, -{66,41,17}, -{66,41,18}, -{66,41,19}, -{66,41,20}, -{66,41,21}, -{66,41,22}, -{66,41,23}, -{66,41,24}, -{66,41,25}, -{66,41,26}, -{66,41,27}, -{66,41,28}, -{66,41,29}, -{66,41,30}, -{66,41,31}, -{66,41,32}, -{66,41,33}, -{66,41,34}, -{66,41,35}, -{66,41,36}, -{66,41,37}, -{66,41,38}, -{66,41,39}, -{66,41,40}, -{66,41,41}, -{66,41,42}, -{66,41,43}, -{66,41,44}, -{66,41,45}, -{66,41,46}, -{66,41,47}, -{66,41,48}, -{66,41,49}, -{66,41,50}, -{66,41,51}, -{66,41,52}, -{66,41,53}, -{66,41,54}, -{66,41,55}, -{66,41,56}, -{66,41,57}, -{66,41,58}, -{66,41,59}, -{66,41,60}, -{66,41,61}, -{66,41,62}, -{66,41,63}, -{66,41,64}, -{66,41,65}, -{66,41,66}, -{66,41,67}, -{66,41,68}, -{66,41,69}, -{66,41,70}, -{66,41,71}, -{66,41,72}, -{66,41,73}, -{66,42,-52}, -{66,42,-51}, -{66,42,-50}, -{66,42,-49}, -{66,42,-48}, -{66,42,-47}, -{66,42,-46}, -{66,42,-45}, -{66,42,-44}, -{66,42,-43}, -{66,42,-42}, -{66,42,-41}, -{66,42,-40}, -{66,42,-39}, -{66,42,-38}, -{66,42,-37}, -{66,42,-36}, -{66,42,-35}, -{66,42,-34}, -{66,42,-33}, -{66,42,-32}, -{66,42,-31}, -{66,42,-30}, -{66,42,-29}, -{66,42,-28}, -{66,42,-27}, -{66,42,-26}, -{66,42,-25}, -{66,42,-24}, -{66,42,-23}, -{66,42,-22}, -{66,42,-21}, -{66,42,-20}, -{66,42,-19}, -{66,42,-18}, -{66,42,-17}, -{66,42,-16}, -{66,42,-15}, -{66,42,-14}, -{66,42,-13}, -{66,42,-12}, -{66,42,-11}, -{66,42,-10}, -{66,42,-9}, -{66,42,-8}, -{66,42,-7}, -{66,42,-6}, -{66,42,-5}, -{66,42,-4}, -{66,42,-3}, -{66,42,-2}, -{66,42,-1}, -{66,42,0}, -{66,42,1}, -{66,42,2}, -{66,42,3}, -{66,42,4}, -{66,42,5}, -{66,42,6}, -{66,42,7}, -{66,42,8}, -{66,42,9}, -{66,42,10}, -{66,42,11}, -{66,42,12}, -{66,42,13}, -{66,42,14}, -{66,42,15}, -{66,42,16}, -{66,42,17}, -{66,42,18}, -{66,42,19}, -{66,42,20}, -{66,42,21}, -{66,42,22}, -{66,42,23}, -{66,42,24}, -{66,42,25}, -{66,42,26}, -{66,42,27}, -{66,42,28}, -{66,42,29}, -{66,42,30}, -{66,42,31}, -{66,42,32}, -{66,42,33}, -{66,42,34}, -{66,42,35}, -{66,42,36}, -{66,42,37}, -{66,42,38}, -{66,42,39}, -{66,42,40}, -{66,42,41}, -{66,42,42}, -{66,42,43}, -{66,42,44}, -{66,42,45}, -{66,42,46}, -{66,42,47}, -{66,42,48}, -{66,42,49}, -{66,42,50}, -{66,42,51}, -{66,42,52}, -{66,42,53}, -{66,42,54}, -{66,42,55}, -{66,42,56}, -{66,42,57}, -{66,42,58}, -{66,42,59}, -{66,42,60}, -{66,42,61}, -{66,42,62}, -{66,42,63}, -{66,42,64}, -{66,42,65}, -{66,42,66}, -{66,42,67}, -{66,42,68}, -{66,42,69}, -{66,42,70}, -{66,42,71}, -{66,42,72}, -{66,42,73}, -{66,43,-52}, -{66,43,-51}, -{66,43,-50}, -{66,43,-49}, -{66,43,-48}, -{66,43,-47}, -{66,43,-46}, -{66,43,-45}, -{66,43,-44}, -{66,43,-43}, -{66,43,-42}, -{66,43,-41}, -{66,43,-40}, -{66,43,-39}, -{66,43,-38}, -{66,43,-37}, -{66,43,-36}, -{66,43,-35}, -{66,43,-34}, -{66,43,-33}, -{66,43,-32}, -{66,43,-31}, -{66,43,-30}, -{66,43,-29}, -{66,43,-28}, -{66,43,-27}, -{66,43,-26}, -{66,43,-25}, -{66,43,-24}, -{66,43,-23}, -{66,43,-22}, -{66,43,-21}, -{66,43,-20}, -{66,43,-19}, -{66,43,-18}, -{66,43,-17}, -{66,43,-16}, -{66,43,-15}, -{66,43,-14}, -{66,43,-13}, -{66,43,-12}, -{66,43,-11}, -{66,43,-10}, -{66,43,-9}, -{66,43,-8}, -{66,43,-7}, -{66,43,-6}, -{66,43,-5}, -{66,43,-4}, -{66,43,-3}, -{66,43,-2}, -{66,43,-1}, -{66,43,0}, -{66,43,1}, -{66,43,2}, -{66,43,3}, -{66,43,4}, -{66,43,5}, -{66,43,6}, -{66,43,7}, -{66,43,8}, -{66,43,9}, -{66,43,10}, -{66,43,11}, -{66,43,12}, -{66,43,13}, -{66,43,14}, -{66,43,15}, -{66,43,16}, -{66,43,17}, -{66,43,18}, -{66,43,19}, -{66,43,20}, -{66,43,21}, -{66,43,22}, -{66,43,23}, -{66,43,24}, -{66,43,25}, -{66,43,26}, -{66,43,27}, -{66,43,28}, -{66,43,29}, -{66,43,30}, -{66,43,31}, -{66,43,32}, -{66,43,33}, -{66,43,34}, -{66,43,35}, -{66,43,36}, -{66,43,37}, -{66,43,38}, -{66,43,39}, -{66,43,40}, -{66,43,41}, -{66,43,42}, -{66,43,43}, -{66,43,44}, -{66,43,45}, -{66,43,46}, -{66,43,47}, -{66,43,48}, -{66,43,49}, -{66,43,50}, -{66,43,51}, -{66,43,52}, -{66,43,53}, -{66,43,54}, -{66,43,55}, -{66,43,56}, -{66,43,57}, -{66,43,58}, -{66,43,59}, -{66,43,60}, -{66,43,61}, -{66,43,62}, -{66,43,63}, -{66,43,64}, -{66,43,65}, -{66,43,66}, -{66,43,67}, -{66,43,68}, -{66,43,69}, -{66,43,70}, -{66,43,71}, -{66,43,72}, -{66,43,73}, -{66,44,-52}, -{66,44,-51}, -{66,44,-50}, -{66,44,-49}, -{66,44,-48}, -{66,44,-47}, -{66,44,-46}, -{66,44,-45}, -{66,44,-44}, -{66,44,-43}, -{66,44,-42}, -{66,44,-41}, -{66,44,-40}, -{66,44,-39}, -{66,44,-38}, -{66,44,-37}, -{66,44,-36}, -{66,44,-35}, -{66,44,-34}, -{66,44,-33}, -{66,44,-32}, -{66,44,-31}, -{66,44,-30}, -{66,44,-29}, -{66,44,-28}, -{66,44,-27}, -{66,44,-26}, -{66,44,-25}, -{66,44,-24}, -{66,44,-23}, -{66,44,-22}, -{66,44,-21}, -{66,44,-20}, -{66,44,-19}, -{66,44,-18}, -{66,44,-17}, -{66,44,-16}, -{66,44,-15}, -{66,44,-14}, -{66,44,-13}, -{66,44,-12}, -{66,44,-11}, -{66,44,-10}, -{66,44,-9}, -{66,44,-8}, -{66,44,-7}, -{66,44,-6}, -{66,44,-5}, -{66,44,-4}, -{66,44,-3}, -{66,44,-2}, -{66,44,-1}, -{66,44,0}, -{66,44,1}, -{66,44,2}, -{66,44,3}, -{66,44,4}, -{66,44,5}, -{66,44,6}, -{66,44,7}, -{66,44,8}, -{66,44,9}, -{66,44,10}, -{66,44,11}, -{66,44,12}, -{66,44,13}, -{66,44,14}, -{66,44,15}, -{66,44,16}, -{66,44,17}, -{66,44,18}, -{66,44,19}, -{66,44,20}, -{66,44,21}, -{66,44,22}, -{66,44,23}, -{66,44,24}, -{66,44,25}, -{66,44,26}, -{66,44,27}, -{66,44,28}, -{66,44,29}, -{66,44,30}, -{66,44,31}, -{66,44,32}, -{66,44,33}, -{66,44,34}, -{66,44,35}, -{66,44,36}, -{66,44,37}, -{66,44,38}, -{66,44,39}, -{66,44,40}, -{66,44,41}, -{66,44,42}, -{66,44,43}, -{66,44,44}, -{66,44,45}, -{66,44,46}, -{66,44,47}, -{66,44,48}, -{66,44,49}, -{66,44,50}, -{66,44,51}, -{66,44,52}, -{66,44,53}, -{66,44,54}, -{66,44,55}, -{66,44,56}, -{66,44,57}, -{66,44,58}, -{66,44,59}, -{66,44,60}, -{66,44,61}, -{66,44,62}, -{66,44,63}, -{66,44,64}, -{66,44,65}, -{66,44,66}, -{66,44,67}, -{66,44,68}, -{66,44,69}, -{66,44,70}, -{66,44,71}, -{66,44,72}, -{66,44,73}, -{66,45,-52}, -{66,45,-51}, -{66,45,-50}, -{66,45,-49}, -{66,45,-48}, -{66,45,-47}, -{66,45,-46}, -{66,45,-45}, -{66,45,-44}, -{66,45,-43}, -{66,45,-42}, -{66,45,-41}, -{66,45,-40}, -{66,45,-39}, -{66,45,-38}, -{66,45,-37}, -{66,45,-36}, -{66,45,-35}, -{66,45,-34}, -{66,45,-33}, -{66,45,-32}, -{66,45,-31}, -{66,45,-30}, -{66,45,-29}, -{66,45,-28}, -{66,45,-27}, -{66,45,-26}, -{66,45,-25}, -{66,45,-24}, -{66,45,-23}, -{66,45,-22}, -{66,45,-21}, -{66,45,-20}, -{66,45,-19}, -{66,45,-18}, -{66,45,-17}, -{66,45,-16}, -{66,45,-15}, -{66,45,-14}, -{66,45,-13}, -{66,45,-12}, -{66,45,-11}, -{66,45,-10}, -{66,45,-9}, -{66,45,-8}, -{66,45,-7}, -{66,45,-6}, -{66,45,-5}, -{66,45,-4}, -{66,45,-3}, -{66,45,-2}, -{66,45,-1}, -{66,45,0}, -{66,45,1}, -{66,45,2}, -{66,45,3}, -{66,45,4}, -{66,45,5}, -{66,45,6}, -{66,45,7}, -{66,45,8}, -{66,45,9}, -{66,45,10}, -{66,45,11}, -{66,45,12}, -{66,45,13}, -{66,45,14}, -{66,45,15}, -{66,45,16}, -{66,45,17}, -{66,45,18}, -{66,45,19}, -{66,45,20}, -{66,45,21}, -{66,45,22}, -{66,45,23}, -{66,45,24}, -{66,45,25}, -{66,45,26}, -{66,45,27}, -{66,45,28}, -{66,45,29}, -{66,45,30}, -{66,45,31}, -{66,45,32}, -{66,45,33}, -{66,45,34}, -{66,45,35}, -{66,45,36}, -{66,45,37}, -{66,45,38}, -{66,45,39}, -{66,45,40}, -{66,45,41}, -{66,45,42}, -{66,45,43}, -{66,45,44}, -{66,45,45}, -{66,45,46}, -{66,45,47}, -{66,45,48}, -{66,45,49}, -{66,45,50}, -{66,45,51}, -{66,45,52}, -{66,45,53}, -{66,45,54}, -{66,45,55}, -{66,45,56}, -{66,45,57}, -{66,45,58}, -{66,45,59}, -{66,45,60}, -{66,45,61}, -{66,45,62}, -{66,45,63}, -{66,45,64}, -{66,45,65}, -{66,45,66}, -{66,45,67}, -{66,45,68}, -{66,45,69}, -{66,45,70}, -{66,45,71}, -{66,45,72}, -{66,45,73}, -{66,46,-52}, -{66,46,-51}, -{66,46,-50}, -{66,46,-49}, -{66,46,-48}, -{66,46,-47}, -{66,46,-46}, -{66,46,-45}, -{66,46,-44}, -{66,46,-43}, -{66,46,-42}, -{66,46,-41}, -{66,46,-40}, -{66,46,-39}, -{66,46,-38}, -{66,46,-37}, -{66,46,-36}, -{66,46,-35}, -{66,46,-34}, -{66,46,-33}, -{66,46,-32}, -{66,46,-31}, -{66,46,-30}, -{66,46,-29}, -{66,46,-28}, -{66,46,-27}, -{66,46,-26}, -{66,46,-25}, -{66,46,-24}, -{66,46,-23}, -{66,46,-22}, -{66,46,-21}, -{66,46,-20}, -{66,46,-19}, -{66,46,-18}, -{66,46,-17}, -{66,46,-16}, -{66,46,-15}, -{66,46,-14}, -{66,46,-13}, -{66,46,-12}, -{66,46,-11}, -{66,46,-10}, -{66,46,-9}, -{66,46,-8}, -{66,46,-7}, -{66,46,-6}, -{66,46,-5}, -{66,46,-4}, -{66,46,-3}, -{66,46,-2}, -{66,46,-1}, -{66,46,0}, -{66,46,1}, -{66,46,2}, -{66,46,3}, -{66,46,4}, -{66,46,5}, -{66,46,6}, -{66,46,7}, -{66,46,8}, -{66,46,9}, -{66,46,10}, -{66,46,11}, -{66,46,12}, -{66,46,13}, -{66,46,14}, -{66,46,15}, -{66,46,16}, -{66,46,17}, -{66,46,18}, -{66,46,19}, -{66,46,20}, -{66,46,21}, -{66,46,22}, -{66,46,23}, -{66,46,24}, -{66,46,25}, -{66,46,26}, -{66,46,27}, -{66,46,28}, -{66,46,29}, -{66,46,30}, -{66,46,31}, -{66,46,32}, -{66,46,33}, -{66,46,34}, -{66,46,35}, -{66,46,36}, -{66,46,37}, -{66,46,38}, -{66,46,39}, -{66,46,40}, -{66,46,41}, -{66,46,42}, -{66,46,43}, -{66,46,44}, -{66,46,45}, -{66,46,46}, -{66,46,47}, -{66,46,48}, -{66,46,49}, -{66,46,50}, -{66,46,51}, -{66,46,52}, -{66,46,53}, -{66,46,54}, -{66,46,55}, -{66,46,56}, -{66,46,57}, -{66,46,58}, -{66,46,59}, -{66,46,60}, -{66,46,61}, -{66,46,62}, -{66,46,63}, -{66,46,64}, -{66,46,65}, -{66,46,66}, -{66,46,67}, -{66,46,68}, -{66,46,69}, -{66,47,-52}, -{66,47,-51}, -{66,47,-50}, -{66,47,-49}, -{66,47,-48}, -{66,47,-47}, -{66,47,-46}, -{66,47,-45}, -{66,47,-44}, -{66,47,-43}, -{66,47,-42}, -{66,47,-41}, -{66,47,-40}, -{66,47,-39}, -{66,47,-38}, -{66,47,-37}, -{66,47,-36}, -{66,47,-35}, -{66,47,-34}, -{66,47,-33}, -{66,47,-32}, -{66,47,-31}, -{66,47,-30}, -{66,47,-29}, -{66,47,-28}, -{66,47,-27}, -{66,47,-26}, -{66,47,-25}, -{66,47,-24}, -{66,47,-23}, -{66,47,-22}, -{66,47,-21}, -{66,47,-20}, -{66,47,-19}, -{66,47,-18}, -{66,47,-17}, -{66,47,-16}, -{66,47,-15}, -{66,47,-14}, -{66,47,-13}, -{66,47,-12}, -{66,47,-11}, -{66,47,-10}, -{66,47,-9}, -{66,47,-8}, -{66,47,-7}, -{66,47,-6}, -{66,47,-5}, -{66,47,-4}, -{66,47,-3}, -{66,47,-2}, -{66,47,-1}, -{66,47,0}, -{66,47,1}, -{66,47,2}, -{66,47,3}, -{66,47,4}, -{66,47,5}, -{66,47,6}, -{66,47,7}, -{66,47,8}, -{66,47,9}, -{66,47,10}, -{66,47,11}, -{66,47,12}, -{66,47,13}, -{66,47,14}, -{66,47,15}, -{66,47,16}, -{66,47,17}, -{66,47,18}, -{66,47,19}, -{66,47,20}, -{66,47,21}, -{66,47,22}, -{66,47,23}, -{66,47,24}, -{66,47,25}, -{66,47,26}, -{66,47,27}, -{66,47,28}, -{66,47,29}, -{66,47,30}, -{66,47,31}, -{66,47,32}, -{66,47,33}, -{66,47,34}, -{66,47,35}, -{66,47,36}, -{66,47,37}, -{66,47,38}, -{66,47,39}, -{66,47,40}, -{66,47,41}, -{66,47,42}, -{66,47,43}, -{66,47,44}, -{66,47,45}, -{66,47,46}, -{66,47,47}, -{66,47,48}, -{66,47,49}, -{66,47,50}, -{66,47,51}, -{66,47,52}, -{66,47,53}, -{66,47,54}, -{66,47,55}, -{66,47,56}, -{66,47,57}, -{66,47,58}, -{66,47,59}, -{66,48,-52}, -{66,48,-51}, -{66,48,-50}, -{66,48,-49}, -{66,48,-48}, -{66,48,-47}, -{66,48,-46}, -{66,48,-45}, -{66,48,-44}, -{66,48,-43}, -{66,48,-42}, -{66,48,-41}, -{66,48,-40}, -{66,48,-39}, -{66,48,-38}, -{66,48,-37}, -{66,48,-36}, -{66,48,-35}, -{66,48,-34}, -{66,48,-33}, -{66,48,-32}, -{66,48,-31}, -{66,48,-30}, -{66,48,-29}, -{66,48,-28}, -{66,48,-27}, -{66,48,-26}, -{66,48,-25}, -{66,48,-24}, -{66,48,-23}, -{66,48,-22}, -{66,48,-21}, -{66,48,-20}, -{66,48,-19}, -{66,48,-18}, -{66,48,-17}, -{66,48,-16}, -{66,48,-15}, -{66,48,-14}, -{66,48,-13}, -{66,48,-12}, -{66,48,-11}, -{66,48,-10}, -{66,48,-9}, -{66,48,-8}, -{66,48,-7}, -{66,48,-6}, -{66,48,-5}, -{66,48,-4}, -{66,48,-3}, -{66,48,-2}, -{66,48,-1}, -{66,48,0}, -{66,48,1}, -{66,48,2}, -{66,48,3}, -{66,48,4}, -{66,48,5}, -{66,48,6}, -{66,48,7}, -{66,48,8}, -{66,48,9}, -{66,48,10}, -{66,48,11}, -{66,48,12}, -{66,48,13}, -{66,48,14}, -{66,48,15}, -{66,48,16}, -{66,48,17}, -{66,48,18}, -{66,48,19}, -{66,48,20}, -{66,48,21}, -{66,48,22}, -{66,48,23}, -{66,48,24}, -{66,48,25}, -{66,48,26}, -{66,48,27}, -{66,48,28}, -{66,48,29}, -{66,48,30}, -{66,48,31}, -{66,48,32}, -{66,48,33}, -{66,48,34}, -{66,48,35}, -{66,48,36}, -{66,48,37}, -{66,48,38}, -{66,48,39}, -{66,48,40}, -{66,48,41}, -{66,48,42}, -{66,48,43}, -{66,48,44}, -{66,48,45}, -{66,48,46}, -{66,48,47}, -{66,48,48}, -{66,48,49}, -{66,48,50}, -{66,48,51}, -{66,49,-52}, -{66,49,-51}, -{66,49,-50}, -{66,49,-49}, -{66,49,-48}, -{66,49,-47}, -{66,49,-46}, -{66,49,-45}, -{66,49,-44}, -{66,49,-43}, -{66,49,-42}, -{66,49,-41}, -{66,49,-40}, -{66,49,-39}, -{66,49,-38}, -{66,49,-37}, -{66,49,-36}, -{66,49,-35}, -{66,49,-34}, -{66,49,-33}, -{66,49,-32}, -{66,49,-31}, -{66,49,-30}, -{66,49,-29}, -{66,49,-28}, -{66,49,-27}, -{66,49,-26}, -{66,49,-25}, -{66,49,-24}, -{66,49,-23}, -{66,49,-22}, -{66,49,-21}, -{66,49,-20}, -{66,49,-19}, -{66,49,-18}, -{66,49,-17}, -{66,49,-16}, -{66,49,-15}, -{66,49,-14}, -{66,49,-13}, -{66,49,-12}, -{66,49,-11}, -{66,49,-10}, -{66,49,-9}, -{66,49,-8}, -{66,49,-7}, -{66,49,-6}, -{66,49,-5}, -{66,49,-4}, -{66,49,-3}, -{66,49,-2}, -{66,49,-1}, -{66,49,0}, -{66,49,1}, -{66,49,2}, -{66,49,3}, -{66,49,4}, -{66,49,5}, -{66,49,6}, -{66,49,7}, -{66,49,8}, -{66,49,9}, -{66,49,10}, -{66,49,11}, -{66,49,12}, -{66,49,13}, -{66,49,14}, -{66,49,15}, -{66,49,16}, -{66,49,17}, -{66,49,18}, -{66,49,19}, -{66,49,20}, -{66,49,21}, -{66,49,22}, -{66,49,23}, -{66,49,24}, -{66,49,25}, -{66,49,26}, -{66,49,27}, -{66,49,28}, -{66,49,29}, -{66,49,30}, -{66,49,31}, -{66,49,32}, -{66,49,33}, -{66,49,34}, -{66,49,35}, -{66,49,36}, -{66,49,37}, -{66,49,38}, -{66,49,39}, -{66,49,40}, -{66,49,41}, -{66,49,42}, -{66,49,43}, -{66,49,44}, -{66,49,45}, -{66,50,-52}, -{66,50,-51}, -{66,50,-50}, -{66,50,-49}, -{66,50,-48}, -{66,50,-47}, -{66,50,-46}, -{66,50,-45}, -{66,50,-44}, -{66,50,-43}, -{66,50,-42}, -{66,50,-41}, -{66,50,-40}, -{66,50,-39}, -{66,50,-38}, -{66,50,-37}, -{66,50,-36}, -{66,50,-35}, -{66,50,-34}, -{66,50,-33}, -{66,50,-32}, -{66,50,-31}, -{66,50,-30}, -{66,50,-29}, -{66,50,-28}, -{66,50,-27}, -{66,50,-26}, -{66,50,-25}, -{66,50,-24}, -{66,50,-23}, -{66,50,-22}, -{66,50,-21}, -{66,50,-20}, -{66,50,-19}, -{66,50,-18}, -{66,50,-17}, -{66,50,-16}, -{66,50,-15}, -{66,50,-14}, -{66,50,-13}, -{66,50,-12}, -{66,50,-11}, -{66,50,-10}, -{66,50,-9}, -{66,50,-8}, -{66,50,-7}, -{66,50,-6}, -{66,50,-5}, -{66,50,-4}, -{66,50,-3}, -{66,50,-2}, -{66,50,-1}, -{66,50,0}, -{66,50,1}, -{66,50,2}, -{66,50,3}, -{66,50,4}, -{66,50,5}, -{66,50,6}, -{66,50,7}, -{66,50,8}, -{66,50,9}, -{66,50,10}, -{66,50,11}, -{66,50,12}, -{66,50,13}, -{66,50,14}, -{66,50,15}, -{66,50,16}, -{66,50,17}, -{66,50,18}, -{66,50,19}, -{66,50,20}, -{66,50,21}, -{66,50,22}, -{66,50,23}, -{66,50,24}, -{66,50,25}, -{66,50,26}, -{66,50,27}, -{66,50,28}, -{66,50,29}, -{66,50,30}, -{66,50,31}, -{66,50,32}, -{66,50,33}, -{66,50,34}, -{66,50,35}, -{66,50,36}, -{66,50,37}, -{66,50,38}, -{66,50,39}, -{66,51,-52}, -{66,51,-51}, -{66,51,-50}, -{66,51,-49}, -{66,51,-48}, -{66,51,-47}, -{66,51,-46}, -{66,51,-45}, -{66,51,-44}, -{66,51,-43}, -{66,51,-42}, -{66,51,-41}, -{66,51,-40}, -{66,51,-39}, -{66,51,-38}, -{66,51,-37}, -{66,51,-36}, -{66,51,-35}, -{66,51,-34}, -{66,51,-33}, -{66,51,-32}, -{66,51,-31}, -{66,51,-30}, -{66,51,-29}, -{66,51,-28}, -{66,51,-27}, -{66,51,-26}, -{66,51,-25}, -{66,51,-24}, -{66,51,-23}, -{66,51,-22}, -{66,51,-21}, -{66,51,-20}, -{66,51,-19}, -{66,51,-18}, -{66,51,-17}, -{66,51,-16}, -{66,51,-15}, -{66,51,-14}, -{66,51,-13}, -{66,51,-12}, -{66,51,-11}, -{66,51,-10}, -{66,51,-9}, -{66,51,-8}, -{66,51,-7}, -{66,51,-6}, -{66,51,-5}, -{66,51,-4}, -{66,51,-3}, -{66,51,-2}, -{66,51,-1}, -{66,51,0}, -{66,51,1}, -{66,51,2}, -{66,51,3}, -{66,51,4}, -{66,51,5}, -{66,51,6}, -{66,51,7}, -{66,51,8}, -{66,51,9}, -{66,51,10}, -{66,51,11}, -{66,51,12}, -{66,51,13}, -{66,51,14}, -{66,51,15}, -{66,51,16}, -{66,51,17}, -{66,51,18}, -{66,51,19}, -{66,51,20}, -{66,51,21}, -{66,51,22}, -{66,51,23}, -{66,51,24}, -{66,51,25}, -{66,51,26}, -{66,51,27}, -{66,51,28}, -{66,51,29}, -{66,51,30}, -{66,51,31}, -{66,51,32}, -{66,51,33}, -{66,52,-52}, -{66,52,-51}, -{66,52,-50}, -{66,52,-49}, -{66,52,-48}, -{66,52,-47}, -{66,52,-46}, -{66,52,-45}, -{66,52,-44}, -{66,52,-43}, -{66,52,-42}, -{66,52,-41}, -{66,52,-40}, -{66,52,-39}, -{66,52,-38}, -{66,52,-37}, -{66,52,-36}, -{66,52,-35}, -{66,52,-34}, -{66,52,-33}, -{66,52,-32}, -{66,52,-31}, -{66,52,-30}, -{66,52,-29}, -{66,52,-28}, -{66,52,-27}, -{66,52,-26}, -{66,52,-25}, -{66,52,-24}, -{66,52,-23}, -{66,52,-22}, -{66,52,-21}, -{66,52,-20}, -{66,52,-19}, -{66,52,-18}, -{66,52,-17}, -{66,52,-16}, -{66,52,-15}, -{66,52,-14}, -{66,52,-13}, -{66,52,-12}, -{66,52,-11}, -{66,52,-10}, -{66,52,-9}, -{66,52,-8}, -{66,52,-7}, -{66,52,-6}, -{66,52,-5}, -{66,52,-4}, -{66,52,-3}, -{66,52,-2}, -{66,52,-1}, -{66,52,0}, -{66,52,1}, -{66,52,2}, -{66,52,3}, -{66,52,4}, -{66,52,5}, -{66,52,6}, -{66,52,7}, -{66,52,8}, -{66,52,9}, -{66,52,10}, -{66,52,11}, -{66,52,12}, -{66,52,13}, -{66,52,14}, -{66,52,15}, -{66,52,16}, -{66,52,17}, -{66,52,18}, -{66,52,19}, -{66,52,20}, -{66,52,21}, -{66,52,22}, -{66,52,23}, -{66,52,24}, -{66,52,25}, -{66,52,26}, -{66,52,27}, -{66,52,28}, -{66,53,-52}, -{66,53,-51}, -{66,53,-50}, -{66,53,-49}, -{66,53,-48}, -{66,53,-47}, -{66,53,-46}, -{66,53,-45}, -{66,53,-44}, -{66,53,-43}, -{66,53,-42}, -{66,53,-41}, -{66,53,-40}, -{66,53,-39}, -{66,53,-38}, -{66,53,-37}, -{66,53,-36}, -{66,53,-35}, -{66,53,-34}, -{66,53,-33}, -{66,53,-32}, -{66,53,-31}, -{66,53,-30}, -{66,53,-29}, -{66,53,-28}, -{66,53,-27}, -{66,53,-26}, -{66,53,-25}, -{66,53,-24}, -{66,53,-23}, -{66,53,-22}, -{66,53,-21}, -{66,53,-20}, -{66,53,-19}, -{66,53,-18}, -{66,53,-17}, -{66,53,-16}, -{66,53,-15}, -{66,53,-14}, -{66,53,-13}, -{66,53,-12}, -{66,53,-11}, -{66,53,-10}, -{66,53,-9}, -{66,53,-8}, -{66,53,-7}, -{66,53,-6}, -{66,53,-5}, -{66,53,-4}, -{66,53,-3}, -{66,53,-2}, -{66,53,-1}, -{66,53,0}, -{66,53,1}, -{66,53,2}, -{66,53,3}, -{66,53,4}, -{66,53,5}, -{66,53,6}, -{66,53,7}, -{66,53,8}, -{66,53,9}, -{66,53,10}, -{66,53,11}, -{66,53,12}, -{66,53,13}, -{66,53,14}, -{66,53,15}, -{66,53,16}, -{66,53,17}, -{66,53,18}, -{66,53,19}, -{66,53,20}, -{66,53,21}, -{66,53,22}, -{66,53,23}, -{66,53,24}, -{66,54,-52}, -{66,54,-51}, -{66,54,-50}, -{66,54,-49}, -{66,54,-48}, -{66,54,-47}, -{66,54,-46}, -{66,54,-45}, -{66,54,-44}, -{66,54,-43}, -{66,54,-42}, -{66,54,-41}, -{66,54,-40}, -{66,54,-39}, -{66,54,-38}, -{66,54,-37}, -{66,54,-36}, -{66,54,-35}, -{66,54,-34}, -{66,54,-33}, -{66,54,-32}, -{66,54,-31}, -{66,54,-30}, -{66,54,-29}, -{66,54,-28}, -{66,54,-27}, -{66,54,-26}, -{66,54,-25}, -{66,54,-24}, -{66,54,-23}, -{66,54,-22}, -{66,54,-21}, -{66,54,-20}, -{66,54,-19}, -{66,54,-18}, -{66,54,-17}, -{66,54,-16}, -{66,54,-15}, -{66,54,-14}, -{66,54,-13}, -{66,54,-12}, -{66,54,-11}, -{66,54,-10}, -{66,54,-9}, -{66,54,-8}, -{66,54,-7}, -{66,54,-6}, -{66,54,-5}, -{66,54,-4}, -{66,54,-3}, -{66,54,-2}, -{66,54,-1}, -{66,54,0}, -{66,54,1}, -{66,54,2}, -{66,54,3}, -{66,54,4}, -{66,54,5}, -{66,54,6}, -{66,54,7}, -{66,54,8}, -{66,54,9}, -{66,54,10}, -{66,54,11}, -{66,54,12}, -{66,54,13}, -{66,54,14}, -{66,54,15}, -{66,54,16}, -{66,54,17}, -{66,54,18}, -{66,54,19}, -{66,54,20}, -{66,55,-52}, -{66,55,-51}, -{66,55,-50}, -{66,55,-49}, -{66,55,-48}, -{66,55,-47}, -{66,55,-46}, -{66,55,-45}, -{66,55,-44}, -{66,55,-43}, -{66,55,-42}, -{66,55,-41}, -{66,55,-40}, -{66,55,-39}, -{66,55,-38}, -{66,55,-37}, -{66,55,-36}, -{66,55,-35}, -{66,55,-34}, -{66,55,-33}, -{66,55,-32}, -{66,55,-31}, -{66,55,-30}, -{66,55,-29}, -{66,55,-28}, -{66,55,-27}, -{66,55,-26}, -{66,55,-25}, -{66,55,-24}, -{66,55,-23}, -{66,55,-22}, -{66,55,-21}, -{66,55,-20}, -{66,55,-19}, -{66,55,-18}, -{66,55,-17}, -{66,55,-16}, -{66,55,-15}, -{66,55,-14}, -{66,55,-13}, -{66,55,-12}, -{66,55,-11}, -{66,55,-10}, -{66,55,-9}, -{66,55,-8}, -{66,55,-7}, -{66,55,-6}, -{66,55,-5}, -{66,55,-4}, -{66,55,-3}, -{66,55,-2}, -{66,55,-1}, -{66,55,0}, -{66,55,1}, -{66,55,2}, -{66,55,3}, -{66,55,4}, -{66,55,5}, -{66,55,6}, -{66,55,7}, -{66,55,8}, -{66,55,9}, -{66,55,10}, -{66,55,11}, -{66,55,12}, -{66,55,13}, -{66,55,14}, -{66,55,15}, -{66,55,16}, -{66,56,-52}, -{66,56,-51}, -{66,56,-50}, -{66,56,-49}, -{66,56,-48}, -{66,56,-47}, -{66,56,-46}, -{66,56,-45}, -{66,56,-44}, -{66,56,-43}, -{66,56,-42}, -{66,56,-41}, -{66,56,-40}, -{66,56,-39}, -{66,56,-38}, -{66,56,-37}, -{66,56,-36}, -{66,56,-35}, -{66,56,-34}, -{66,56,-33}, -{66,56,-32}, -{66,56,-31}, -{66,56,-30}, -{66,56,-29}, -{66,56,-28}, -{66,56,-27}, -{66,56,-26}, -{66,56,-25}, -{66,56,-24}, -{66,56,-23}, -{66,56,-22}, -{66,56,-21}, -{66,56,-20}, -{66,56,-19}, -{66,56,-18}, -{66,56,-17}, -{66,56,-16}, -{66,56,-15}, -{66,56,-14}, -{66,56,-13}, -{66,56,-12}, -{66,56,-11}, -{66,56,-10}, -{66,56,-9}, -{66,56,-8}, -{66,56,-7}, -{66,56,-6}, -{66,56,-5}, -{66,56,-4}, -{66,56,-3}, -{66,56,-2}, -{66,56,-1}, -{66,56,0}, -{66,56,1}, -{66,56,2}, -{66,56,3}, -{66,56,4}, -{66,56,5}, -{66,56,6}, -{66,56,7}, -{66,56,8}, -{66,56,9}, -{66,56,10}, -{66,56,11}, -{66,56,12}, -{66,57,-52}, -{66,57,-51}, -{66,57,-50}, -{66,57,-49}, -{66,57,-48}, -{66,57,-47}, -{66,57,-46}, -{66,57,-45}, -{66,57,-44}, -{66,57,-43}, -{66,57,-42}, -{66,57,-41}, -{66,57,-40}, -{66,57,-39}, -{66,57,-38}, -{66,57,-37}, -{66,57,-36}, -{66,57,-35}, -{66,57,-34}, -{66,57,-33}, -{66,57,-32}, -{66,57,-31}, -{66,57,-30}, -{66,57,-29}, -{66,57,-28}, -{66,57,-27}, -{66,57,-26}, -{66,57,-25}, -{66,57,-24}, -{66,57,-23}, -{66,57,-22}, -{66,57,-21}, -{66,57,-20}, -{66,57,-19}, -{66,57,-18}, -{66,57,-17}, -{66,57,-16}, -{66,57,-15}, -{66,57,-14}, -{66,57,-13}, -{66,57,-12}, -{66,57,-11}, -{66,57,-10}, -{66,57,-9}, -{66,57,-8}, -{66,57,-7}, -{66,57,-6}, -{66,57,-5}, -{66,57,-4}, -{66,57,-3}, -{66,57,-2}, -{66,57,-1}, -{66,57,0}, -{66,57,1}, -{66,57,2}, -{66,57,3}, -{66,57,4}, -{66,57,5}, -{66,57,6}, -{66,57,7}, -{66,57,8}, -{66,58,-52}, -{66,58,-51}, -{66,58,-50}, -{66,58,-49}, -{66,58,-48}, -{66,58,-47}, -{66,58,-46}, -{66,58,-45}, -{66,58,-44}, -{66,58,-43}, -{66,58,-42}, -{66,58,-41}, -{66,58,-40}, -{66,58,-39}, -{66,58,-38}, -{66,58,-37}, -{66,58,-36}, -{66,58,-35}, -{66,58,-34}, -{66,58,-33}, -{66,58,-32}, -{66,58,-31}, -{66,58,-30}, -{66,58,-29}, -{66,58,-28}, -{66,58,-27}, -{66,58,-26}, -{66,58,-25}, -{66,58,-24}, -{66,58,-23}, -{66,58,-22}, -{66,58,-21}, -{66,58,-20}, -{66,58,-19}, -{66,58,-18}, -{66,58,-17}, -{66,58,-16}, -{66,58,-15}, -{66,58,-14}, -{66,58,-13}, -{66,58,-12}, -{66,58,-11}, -{66,58,-10}, -{66,58,-9}, -{66,58,-8}, -{66,58,-7}, -{66,58,-6}, -{66,58,-5}, -{66,58,-4}, -{66,58,-3}, -{66,58,-2}, -{66,58,-1}, -{66,58,0}, -{66,58,1}, -{66,58,2}, -{66,58,3}, -{66,58,4}, -{66,58,5}, -{66,59,-52}, -{66,59,-51}, -{66,59,-50}, -{66,59,-49}, -{66,59,-48}, -{66,59,-47}, -{66,59,-46}, -{66,59,-45}, -{66,59,-44}, -{66,59,-43}, -{66,59,-42}, -{66,59,-41}, -{66,59,-40}, -{66,59,-39}, -{66,59,-38}, -{66,59,-37}, -{66,59,-36}, -{66,59,-35}, -{66,59,-34}, -{66,59,-33}, -{66,59,-32}, -{66,59,-31}, -{66,59,-30}, -{66,59,-29}, -{66,59,-28}, -{66,59,-27}, -{66,59,-26}, -{66,59,-25}, -{66,59,-24}, -{66,59,-23}, -{66,59,-22}, -{66,59,-21}, -{66,59,-20}, -{66,59,-19}, -{66,59,-18}, -{66,59,-17}, -{66,59,-16}, -{66,59,-15}, -{66,59,-14}, -{66,59,-13}, -{66,59,-12}, -{66,59,-11}, -{66,59,-10}, -{66,59,-9}, -{66,59,-8}, -{66,59,-7}, -{66,59,-6}, -{66,59,-5}, -{66,59,-4}, -{66,59,-3}, -{66,59,-2}, -{66,59,-1}, -{66,59,0}, -{66,59,1}, -{66,59,2}, -{66,60,-52}, -{66,60,-51}, -{66,60,-50}, -{66,60,-49}, -{66,60,-48}, -{66,60,-47}, -{66,60,-46}, -{66,60,-45}, -{66,60,-44}, -{66,60,-43}, -{66,60,-42}, -{66,60,-41}, -{66,60,-40}, -{66,60,-39}, -{66,60,-38}, -{66,60,-37}, -{66,60,-36}, -{66,60,-35}, -{66,60,-34}, -{66,60,-33}, -{66,60,-32}, -{66,60,-31}, -{66,60,-30}, -{66,60,-29}, -{66,60,-28}, -{66,60,-27}, -{66,60,-26}, -{66,60,-25}, -{66,60,-24}, -{66,60,-23}, -{66,60,-22}, -{66,60,-21}, -{66,60,-20}, -{66,60,-19}, -{66,60,-18}, -{66,60,-17}, -{66,60,-16}, -{66,60,-15}, -{66,60,-14}, -{66,60,-13}, -{66,60,-12}, -{66,60,-11}, -{66,60,-10}, -{66,60,-9}, -{66,60,-8}, -{66,60,-7}, -{66,60,-6}, -{66,60,-5}, -{66,60,-4}, -{66,60,-3}, -{66,60,-2}, -{66,61,-52}, -{66,61,-51}, -{66,61,-50}, -{66,61,-49}, -{66,61,-48}, -{66,61,-47}, -{66,61,-46}, -{66,61,-45}, -{66,61,-44}, -{66,61,-43}, -{66,61,-42}, -{66,61,-41}, -{66,61,-40}, -{66,61,-39}, -{66,61,-38}, -{66,61,-37}, -{66,61,-36}, -{66,61,-35}, -{66,61,-34}, -{66,61,-33}, -{66,61,-32}, -{66,61,-31}, -{66,61,-30}, -{66,61,-29}, -{66,61,-28}, -{66,61,-27}, -{66,61,-26}, -{66,61,-25}, -{66,61,-24}, -{66,61,-23}, -{66,61,-22}, -{66,61,-21}, -{66,61,-20}, -{66,61,-19}, -{66,61,-18}, -{66,61,-17}, -{66,61,-16}, -{66,61,-15}, -{66,61,-14}, -{66,61,-13}, -{66,61,-12}, -{66,61,-11}, -{66,61,-10}, -{66,61,-9}, -{66,61,-8}, -{66,61,-7}, -{66,61,-6}, -{66,61,-5}, -{66,62,-52}, -{66,62,-51}, -{66,62,-50}, -{66,62,-49}, -{66,62,-48}, -{66,62,-47}, -{66,62,-46}, -{66,62,-45}, -{66,62,-44}, -{66,62,-43}, -{66,62,-42}, -{66,62,-41}, -{66,62,-40}, -{66,62,-39}, -{66,62,-38}, -{66,62,-37}, -{66,62,-36}, -{66,62,-35}, -{66,62,-34}, -{66,62,-33}, -{66,62,-32}, -{66,62,-31}, -{66,62,-30}, -{66,62,-29}, -{66,62,-28}, -{66,62,-27}, -{66,62,-26}, -{66,62,-25}, -{66,62,-24}, -{66,62,-23}, -{66,62,-22}, -{66,62,-21}, -{66,62,-20}, -{66,62,-19}, -{66,62,-18}, -{66,62,-17}, -{66,62,-16}, -{66,62,-15}, -{66,62,-14}, -{66,62,-13}, -{66,62,-12}, -{66,62,-11}, -{66,62,-10}, -{66,62,-9}, -{66,62,-8}, -{66,62,-7}, -{66,63,-52}, -{66,63,-51}, -{66,63,-50}, -{66,63,-49}, -{66,63,-48}, -{66,63,-47}, -{66,63,-46}, -{66,63,-45}, -{66,63,-44}, -{66,63,-43}, -{66,63,-42}, -{66,63,-41}, -{66,63,-40}, -{66,63,-39}, -{66,63,-38}, -{66,63,-37}, -{66,63,-36}, -{66,63,-35}, -{66,63,-34}, -{66,63,-33}, -{66,63,-32}, -{66,63,-31}, -{66,63,-30}, -{66,63,-29}, -{66,63,-28}, -{66,63,-27}, -{66,63,-26}, -{66,63,-25}, -{66,63,-24}, -{66,63,-23}, -{66,63,-22}, -{66,63,-21}, -{66,63,-20}, -{66,63,-19}, -{66,63,-18}, -{66,63,-17}, -{66,63,-16}, -{66,63,-15}, -{66,63,-14}, -{66,63,-13}, -{66,63,-12}, -{66,63,-11}, -{66,63,-10}, -{66,64,-52}, -{66,64,-51}, -{66,64,-50}, -{66,64,-49}, -{66,64,-48}, -{66,64,-47}, -{66,64,-46}, -{66,64,-45}, -{66,64,-44}, -{66,64,-43}, -{66,64,-42}, -{66,64,-41}, -{66,64,-40}, -{66,64,-39}, -{66,64,-38}, -{66,64,-37}, -{66,64,-36}, -{66,64,-35}, -{66,64,-34}, -{66,64,-33}, -{66,64,-32}, -{66,64,-31}, -{66,64,-30}, -{66,64,-29}, -{66,64,-28}, -{66,64,-27}, -{66,64,-26}, -{66,64,-25}, -{66,64,-24}, -{66,64,-23}, -{66,64,-22}, -{66,64,-21}, -{66,64,-20}, -{66,64,-19}, -{66,64,-18}, -{66,64,-17}, -{66,64,-16}, -{66,64,-15}, -{66,64,-14}, -{66,64,-13}, -{66,65,-52}, -{66,65,-51}, -{66,65,-50}, -{66,65,-49}, -{66,65,-48}, -{66,65,-47}, -{66,65,-46}, -{66,65,-45}, -{66,65,-44}, -{66,65,-43}, -{66,65,-42}, -{66,65,-41}, -{66,65,-40}, -{66,65,-39}, -{66,65,-38}, -{66,65,-37}, -{66,65,-36}, -{66,65,-35}, -{66,65,-34}, -{66,65,-33}, -{66,65,-32}, -{66,65,-31}, -{66,65,-30}, -{66,65,-29}, -{66,65,-28}, -{66,65,-27}, -{66,65,-26}, -{66,65,-25}, -{66,65,-24}, -{66,65,-23}, -{66,65,-22}, -{66,65,-21}, -{66,65,-20}, -{66,65,-19}, -{66,65,-18}, -{66,65,-17}, -{66,65,-16}, -{66,66,-52}, -{66,66,-51}, -{66,66,-50}, -{66,66,-49}, -{66,66,-48}, -{66,66,-47}, -{66,66,-46}, -{66,66,-45}, -{66,66,-44}, -{66,66,-43}, -{66,66,-42}, -{66,66,-41}, -{66,66,-40}, -{66,66,-39}, -{66,66,-38}, -{66,66,-37}, -{66,66,-36}, -{66,66,-35}, -{66,66,-34}, -{66,66,-33}, -{66,66,-32}, -{66,66,-31}, -{66,66,-30}, -{66,66,-29}, -{66,66,-28}, -{66,66,-27}, -{66,66,-26}, -{66,66,-25}, -{66,66,-24}, -{66,66,-23}, -{66,66,-22}, -{66,66,-21}, -{66,66,-20}, -{66,66,-19}, -{66,66,-18}, -{66,67,-52}, -{66,67,-51}, -{66,67,-50}, -{66,67,-49}, -{66,67,-48}, -{66,67,-47}, -{66,67,-46}, -{66,67,-45}, -{66,67,-44}, -{66,67,-43}, -{66,67,-42}, -{66,67,-41}, -{66,67,-40}, -{66,67,-39}, -{66,67,-38}, -{66,67,-37}, -{66,67,-36}, -{66,67,-35}, -{66,67,-34}, -{66,67,-33}, -{66,67,-32}, -{66,67,-31}, -{66,67,-30}, -{66,67,-29}, -{66,67,-28}, -{66,67,-27}, -{66,67,-26}, -{66,67,-25}, -{66,67,-24}, -{66,67,-23}, -{66,67,-22}, -{66,67,-21}, -{66,68,-52}, -{66,68,-51}, -{66,68,-50}, -{66,68,-49}, -{66,68,-48}, -{66,68,-47}, -{66,68,-46}, -{66,68,-45}, -{66,68,-44}, -{66,68,-43}, -{66,68,-42}, -{66,68,-41}, -{66,68,-40}, -{66,68,-39}, -{66,68,-38}, -{66,68,-37}, -{66,68,-36}, -{66,68,-35}, -{66,68,-34}, -{66,68,-33}, -{66,68,-32}, -{66,68,-31}, -{66,68,-30}, -{66,68,-29}, -{66,68,-28}, -{66,68,-27}, -{66,68,-26}, -{66,68,-25}, -{66,68,-24}, -{66,68,-23}, -{66,69,-52}, -{66,69,-51}, -{66,69,-50}, -{66,69,-49}, -{66,69,-48}, -{66,69,-47}, -{66,69,-46}, -{66,69,-45}, -{66,69,-44}, -{66,69,-43}, -{66,69,-42}, -{66,69,-41}, -{66,69,-40}, -{66,69,-39}, -{66,69,-38}, -{66,69,-37}, -{66,69,-36}, -{66,69,-35}, -{66,69,-34}, -{66,69,-33}, -{66,69,-32}, -{66,69,-31}, -{66,69,-30}, -{66,69,-29}, -{66,69,-28}, -{66,69,-27}, -{66,69,-26}, -{66,69,-25}, -{66,70,-52}, -{66,70,-51}, -{66,70,-50}, -{66,70,-49}, -{66,70,-48}, -{66,70,-47}, -{66,70,-46}, -{66,70,-45}, -{66,70,-44}, -{66,70,-43}, -{66,70,-42}, -{66,70,-41}, -{66,70,-40}, -{66,70,-39}, -{66,70,-38}, -{66,70,-37}, -{66,70,-36}, -{66,70,-35}, -{66,70,-34}, -{66,70,-33}, -{66,70,-32}, -{66,70,-31}, -{66,70,-30}, -{66,70,-29}, -{66,70,-28}, -{66,71,-52}, -{66,71,-51}, -{66,71,-50}, -{66,71,-49}, -{66,71,-48}, -{66,71,-47}, -{66,71,-46}, -{66,71,-45}, -{66,71,-44}, -{66,71,-43}, -{66,71,-42}, -{66,71,-41}, -{66,71,-40}, -{66,71,-39}, -{66,71,-38}, -{66,71,-37}, -{66,71,-36}, -{66,71,-35}, -{66,71,-34}, -{66,71,-33}, -{66,71,-32}, -{66,71,-31}, -{66,71,-30}, -{66,72,-52}, -{66,72,-51}, -{66,72,-50}, -{66,72,-49}, -{66,72,-48}, -{66,72,-47}, -{66,72,-46}, -{66,72,-45}, -{66,72,-44}, -{66,72,-43}, -{66,72,-42}, -{66,72,-41}, -{66,72,-40}, -{66,72,-39}, -{66,72,-38}, -{66,72,-37}, -{66,72,-36}, -{66,72,-35}, -{66,72,-34}, -{66,72,-33}, -{66,72,-32}, -{66,73,-52}, -{66,73,-51}, -{66,73,-50}, -{66,73,-49}, -{66,73,-48}, -{66,73,-47}, -{66,73,-46}, -{66,73,-45}, -{66,73,-44}, -{66,73,-43}, -{66,73,-42}, -{66,73,-41}, -{66,73,-40}, -{66,73,-39}, -{66,73,-38}, -{66,73,-37}, -{66,73,-36}, -{66,73,-35}, -{66,73,-34}, -{66,74,-52}, -{66,74,-51}, -{66,74,-50}, -{66,74,-49}, -{66,74,-48}, -{66,74,-47}, -{66,74,-46}, -{66,74,-45}, -{66,74,-44}, -{66,74,-43}, -{66,74,-42}, -{66,74,-41}, -{66,74,-40}, -{66,74,-39}, -{66,74,-38}, -{66,74,-37}, -{66,74,-36}, -{66,75,-52}, -{66,75,-51}, -{66,75,-50}, -{66,75,-49}, -{66,75,-48}, -{66,75,-47}, -{66,75,-46}, -{66,75,-45}, -{66,75,-44}, -{66,75,-43}, -{66,75,-42}, -{66,75,-41}, -{66,75,-40}, -{66,75,-39}, -{66,76,-52}, -{66,76,-51}, -{66,76,-50}, -{66,76,-49}, -{66,76,-48}, -{66,76,-47}, -{66,76,-46}, -{66,76,-45}, -{66,76,-44}, -{66,76,-43}, -{66,76,-42}, -{66,76,-41}, -{66,77,-52}, -{66,77,-51}, -{66,77,-50}, -{66,77,-49}, -{66,77,-48}, -{66,77,-47}, -{66,77,-46}, -{66,77,-45}, -{66,77,-44}, -{66,77,-43}, -{66,78,-52}, -{66,78,-51}, -{66,78,-50}, -{66,78,-49}, -{66,78,-48}, -{66,78,-47}, -{66,78,-46}, -{66,78,-45}, -{66,79,-52}, -{66,79,-51}, -{66,79,-50}, -{66,79,-49}, -{66,79,-48}, -{66,79,-47}, -{66,80,-51}, -{66,80,-50}, -{66,80,-49}, -{66,80,-48}, -{66,81,-51}, -{66,81,-50}, -{67,-69,66}, -{67,-68,62}, -{67,-68,63}, -{67,-68,64}, -{67,-68,65}, -{67,-68,66}, -{67,-67,57}, -{67,-67,58}, -{67,-67,59}, -{67,-67,60}, -{67,-67,61}, -{67,-67,62}, -{67,-67,63}, -{67,-67,64}, -{67,-67,65}, -{67,-67,66}, -{67,-66,53}, -{67,-66,54}, -{67,-66,55}, -{67,-66,56}, -{67,-66,57}, -{67,-66,58}, -{67,-66,59}, -{67,-66,60}, -{67,-66,61}, -{67,-66,62}, -{67,-66,63}, -{67,-66,64}, -{67,-66,65}, -{67,-66,66}, -{67,-65,50}, -{67,-65,51}, -{67,-65,52}, -{67,-65,53}, -{67,-65,54}, -{67,-65,55}, -{67,-65,56}, -{67,-65,57}, -{67,-65,58}, -{67,-65,59}, -{67,-65,60}, -{67,-65,61}, -{67,-65,62}, -{67,-65,63}, -{67,-65,64}, -{67,-65,65}, -{67,-65,66}, -{67,-64,46}, -{67,-64,47}, -{67,-64,48}, -{67,-64,49}, -{67,-64,50}, -{67,-64,51}, -{67,-64,52}, -{67,-64,53}, -{67,-64,54}, -{67,-64,55}, -{67,-64,56}, -{67,-64,57}, -{67,-64,58}, -{67,-64,59}, -{67,-64,60}, -{67,-64,61}, -{67,-64,62}, -{67,-64,63}, -{67,-64,64}, -{67,-64,65}, -{67,-64,66}, -{67,-63,43}, -{67,-63,44}, -{67,-63,45}, -{67,-63,46}, -{67,-63,47}, -{67,-63,48}, -{67,-63,49}, -{67,-63,50}, -{67,-63,51}, -{67,-63,52}, -{67,-63,53}, -{67,-63,54}, -{67,-63,55}, -{67,-63,56}, -{67,-63,57}, -{67,-63,58}, -{67,-63,59}, -{67,-63,60}, -{67,-63,61}, -{67,-63,62}, -{67,-63,63}, -{67,-63,64}, -{67,-63,65}, -{67,-63,66}, -{67,-62,40}, -{67,-62,41}, -{67,-62,42}, -{67,-62,43}, -{67,-62,44}, -{67,-62,45}, -{67,-62,46}, -{67,-62,47}, -{67,-62,48}, -{67,-62,49}, -{67,-62,50}, -{67,-62,51}, -{67,-62,52}, -{67,-62,53}, -{67,-62,54}, -{67,-62,55}, -{67,-62,56}, -{67,-62,57}, -{67,-62,58}, -{67,-62,59}, -{67,-62,60}, -{67,-62,61}, -{67,-62,62}, -{67,-62,63}, -{67,-62,64}, -{67,-62,65}, -{67,-62,66}, -{67,-62,67}, -{67,-61,37}, -{67,-61,38}, -{67,-61,39}, -{67,-61,40}, -{67,-61,41}, -{67,-61,42}, -{67,-61,43}, -{67,-61,44}, -{67,-61,45}, -{67,-61,46}, -{67,-61,47}, -{67,-61,48}, -{67,-61,49}, -{67,-61,50}, -{67,-61,51}, -{67,-61,52}, -{67,-61,53}, -{67,-61,54}, -{67,-61,55}, -{67,-61,56}, -{67,-61,57}, -{67,-61,58}, -{67,-61,59}, -{67,-61,60}, -{67,-61,61}, -{67,-61,62}, -{67,-61,63}, -{67,-61,64}, -{67,-61,65}, -{67,-61,66}, -{67,-61,67}, -{67,-60,34}, -{67,-60,35}, -{67,-60,36}, -{67,-60,37}, -{67,-60,38}, -{67,-60,39}, -{67,-60,40}, -{67,-60,41}, -{67,-60,42}, -{67,-60,43}, -{67,-60,44}, -{67,-60,45}, -{67,-60,46}, -{67,-60,47}, -{67,-60,48}, -{67,-60,49}, -{67,-60,50}, -{67,-60,51}, -{67,-60,52}, -{67,-60,53}, -{67,-60,54}, -{67,-60,55}, -{67,-60,56}, -{67,-60,57}, -{67,-60,58}, -{67,-60,59}, -{67,-60,60}, -{67,-60,61}, -{67,-60,62}, -{67,-60,63}, -{67,-60,64}, -{67,-60,65}, -{67,-60,66}, -{67,-60,67}, -{67,-59,32}, -{67,-59,33}, -{67,-59,34}, -{67,-59,35}, -{67,-59,36}, -{67,-59,37}, -{67,-59,38}, -{67,-59,39}, -{67,-59,40}, -{67,-59,41}, -{67,-59,42}, -{67,-59,43}, -{67,-59,44}, -{67,-59,45}, -{67,-59,46}, -{67,-59,47}, -{67,-59,48}, -{67,-59,49}, -{67,-59,50}, -{67,-59,51}, -{67,-59,52}, -{67,-59,53}, -{67,-59,54}, -{67,-59,55}, -{67,-59,56}, -{67,-59,57}, -{67,-59,58}, -{67,-59,59}, -{67,-59,60}, -{67,-59,61}, -{67,-59,62}, -{67,-59,63}, -{67,-59,64}, -{67,-59,65}, -{67,-59,66}, -{67,-59,67}, -{67,-58,29}, -{67,-58,30}, -{67,-58,31}, -{67,-58,32}, -{67,-58,33}, -{67,-58,34}, -{67,-58,35}, -{67,-58,36}, -{67,-58,37}, -{67,-58,38}, -{67,-58,39}, -{67,-58,40}, -{67,-58,41}, -{67,-58,42}, -{67,-58,43}, -{67,-58,44}, -{67,-58,45}, -{67,-58,46}, -{67,-58,47}, -{67,-58,48}, -{67,-58,49}, -{67,-58,50}, -{67,-58,51}, -{67,-58,52}, -{67,-58,53}, -{67,-58,54}, -{67,-58,55}, -{67,-58,56}, -{67,-58,57}, -{67,-58,58}, -{67,-58,59}, -{67,-58,60}, -{67,-58,61}, -{67,-58,62}, -{67,-58,63}, -{67,-58,64}, -{67,-58,65}, -{67,-58,66}, -{67,-58,67}, -{67,-57,27}, -{67,-57,28}, -{67,-57,29}, -{67,-57,30}, -{67,-57,31}, -{67,-57,32}, -{67,-57,33}, -{67,-57,34}, -{67,-57,35}, -{67,-57,36}, -{67,-57,37}, -{67,-57,38}, -{67,-57,39}, -{67,-57,40}, -{67,-57,41}, -{67,-57,42}, -{67,-57,43}, -{67,-57,44}, -{67,-57,45}, -{67,-57,46}, -{67,-57,47}, -{67,-57,48}, -{67,-57,49}, -{67,-57,50}, -{67,-57,51}, -{67,-57,52}, -{67,-57,53}, -{67,-57,54}, -{67,-57,55}, -{67,-57,56}, -{67,-57,57}, -{67,-57,58}, -{67,-57,59}, -{67,-57,60}, -{67,-57,61}, -{67,-57,62}, -{67,-57,63}, -{67,-57,64}, -{67,-57,65}, -{67,-57,66}, -{67,-57,67}, -{67,-56,24}, -{67,-56,25}, -{67,-56,26}, -{67,-56,27}, -{67,-56,28}, -{67,-56,29}, -{67,-56,30}, -{67,-56,31}, -{67,-56,32}, -{67,-56,33}, -{67,-56,34}, -{67,-56,35}, -{67,-56,36}, -{67,-56,37}, -{67,-56,38}, -{67,-56,39}, -{67,-56,40}, -{67,-56,41}, -{67,-56,42}, -{67,-56,43}, -{67,-56,44}, -{67,-56,45}, -{67,-56,46}, -{67,-56,47}, -{67,-56,48}, -{67,-56,49}, -{67,-56,50}, -{67,-56,51}, -{67,-56,52}, -{67,-56,53}, -{67,-56,54}, -{67,-56,55}, -{67,-56,56}, -{67,-56,57}, -{67,-56,58}, -{67,-56,59}, -{67,-56,60}, -{67,-56,61}, -{67,-56,62}, -{67,-56,63}, -{67,-56,64}, -{67,-56,65}, -{67,-56,66}, -{67,-56,67}, -{67,-55,22}, -{67,-55,23}, -{67,-55,24}, -{67,-55,25}, -{67,-55,26}, -{67,-55,27}, -{67,-55,28}, -{67,-55,29}, -{67,-55,30}, -{67,-55,31}, -{67,-55,32}, -{67,-55,33}, -{67,-55,34}, -{67,-55,35}, -{67,-55,36}, -{67,-55,37}, -{67,-55,38}, -{67,-55,39}, -{67,-55,40}, -{67,-55,41}, -{67,-55,42}, -{67,-55,43}, -{67,-55,44}, -{67,-55,45}, -{67,-55,46}, -{67,-55,47}, -{67,-55,48}, -{67,-55,49}, -{67,-55,50}, -{67,-55,51}, -{67,-55,52}, -{67,-55,53}, -{67,-55,54}, -{67,-55,55}, -{67,-55,56}, -{67,-55,57}, -{67,-55,58}, -{67,-55,59}, -{67,-55,60}, -{67,-55,61}, -{67,-55,62}, -{67,-55,63}, -{67,-55,64}, -{67,-55,65}, -{67,-55,66}, -{67,-55,67}, -{67,-54,20}, -{67,-54,21}, -{67,-54,22}, -{67,-54,23}, -{67,-54,24}, -{67,-54,25}, -{67,-54,26}, -{67,-54,27}, -{67,-54,28}, -{67,-54,29}, -{67,-54,30}, -{67,-54,31}, -{67,-54,32}, -{67,-54,33}, -{67,-54,34}, -{67,-54,35}, -{67,-54,36}, -{67,-54,37}, -{67,-54,38}, -{67,-54,39}, -{67,-54,40}, -{67,-54,41}, -{67,-54,42}, -{67,-54,43}, -{67,-54,44}, -{67,-54,45}, -{67,-54,46}, -{67,-54,47}, -{67,-54,48}, -{67,-54,49}, -{67,-54,50}, -{67,-54,51}, -{67,-54,52}, -{67,-54,53}, -{67,-54,54}, -{67,-54,55}, -{67,-54,56}, -{67,-54,57}, -{67,-54,58}, -{67,-54,59}, -{67,-54,60}, -{67,-54,61}, -{67,-54,62}, -{67,-54,63}, -{67,-54,64}, -{67,-54,65}, -{67,-54,66}, -{67,-54,67}, -{67,-53,18}, -{67,-53,19}, -{67,-53,20}, -{67,-53,21}, -{67,-53,22}, -{67,-53,23}, -{67,-53,24}, -{67,-53,25}, -{67,-53,26}, -{67,-53,27}, -{67,-53,28}, -{67,-53,29}, -{67,-53,30}, -{67,-53,31}, -{67,-53,32}, -{67,-53,33}, -{67,-53,34}, -{67,-53,35}, -{67,-53,36}, -{67,-53,37}, -{67,-53,38}, -{67,-53,39}, -{67,-53,40}, -{67,-53,41}, -{67,-53,42}, -{67,-53,43}, -{67,-53,44}, -{67,-53,45}, -{67,-53,46}, -{67,-53,47}, -{67,-53,48}, -{67,-53,49}, -{67,-53,50}, -{67,-53,51}, -{67,-53,52}, -{67,-53,53}, -{67,-53,54}, -{67,-53,55}, -{67,-53,56}, -{67,-53,57}, -{67,-53,58}, -{67,-53,59}, -{67,-53,60}, -{67,-53,61}, -{67,-53,62}, -{67,-53,63}, -{67,-53,64}, -{67,-53,65}, -{67,-53,66}, -{67,-53,67}, -{67,-52,16}, -{67,-52,17}, -{67,-52,18}, -{67,-52,19}, -{67,-52,20}, -{67,-52,21}, -{67,-52,22}, -{67,-52,23}, -{67,-52,24}, -{67,-52,25}, -{67,-52,26}, -{67,-52,27}, -{67,-52,28}, -{67,-52,29}, -{67,-52,30}, -{67,-52,31}, -{67,-52,32}, -{67,-52,33}, -{67,-52,34}, -{67,-52,35}, -{67,-52,36}, -{67,-52,37}, -{67,-52,38}, -{67,-52,39}, -{67,-52,40}, -{67,-52,41}, -{67,-52,42}, -{67,-52,43}, -{67,-52,44}, -{67,-52,45}, -{67,-52,46}, -{67,-52,47}, -{67,-52,48}, -{67,-52,49}, -{67,-52,50}, -{67,-52,51}, -{67,-52,52}, -{67,-52,53}, -{67,-52,54}, -{67,-52,55}, -{67,-52,56}, -{67,-52,57}, -{67,-52,58}, -{67,-52,59}, -{67,-52,60}, -{67,-52,61}, -{67,-52,62}, -{67,-52,63}, -{67,-52,64}, -{67,-52,65}, -{67,-52,66}, -{67,-52,67}, -{67,-51,14}, -{67,-51,15}, -{67,-51,16}, -{67,-51,17}, -{67,-51,18}, -{67,-51,19}, -{67,-51,20}, -{67,-51,21}, -{67,-51,22}, -{67,-51,23}, -{67,-51,24}, -{67,-51,25}, -{67,-51,26}, -{67,-51,27}, -{67,-51,28}, -{67,-51,29}, -{67,-51,30}, -{67,-51,31}, -{67,-51,32}, -{67,-51,33}, -{67,-51,34}, -{67,-51,35}, -{67,-51,36}, -{67,-51,37}, -{67,-51,38}, -{67,-51,39}, -{67,-51,40}, -{67,-51,41}, -{67,-51,42}, -{67,-51,43}, -{67,-51,44}, -{67,-51,45}, -{67,-51,46}, -{67,-51,47}, -{67,-51,48}, -{67,-51,49}, -{67,-51,50}, -{67,-51,51}, -{67,-51,52}, -{67,-51,53}, -{67,-51,54}, -{67,-51,55}, -{67,-51,56}, -{67,-51,57}, -{67,-51,58}, -{67,-51,59}, -{67,-51,60}, -{67,-51,61}, -{67,-51,62}, -{67,-51,63}, -{67,-51,64}, -{67,-51,65}, -{67,-51,66}, -{67,-51,67}, -{67,-50,12}, -{67,-50,13}, -{67,-50,14}, -{67,-50,15}, -{67,-50,16}, -{67,-50,17}, -{67,-50,18}, -{67,-50,19}, -{67,-50,20}, -{67,-50,21}, -{67,-50,22}, -{67,-50,23}, -{67,-50,24}, -{67,-50,25}, -{67,-50,26}, -{67,-50,27}, -{67,-50,28}, -{67,-50,29}, -{67,-50,30}, -{67,-50,31}, -{67,-50,32}, -{67,-50,33}, -{67,-50,34}, -{67,-50,35}, -{67,-50,36}, -{67,-50,37}, -{67,-50,38}, -{67,-50,39}, -{67,-50,40}, -{67,-50,41}, -{67,-50,42}, -{67,-50,43}, -{67,-50,44}, -{67,-50,45}, -{67,-50,46}, -{67,-50,47}, -{67,-50,48}, -{67,-50,49}, -{67,-50,50}, -{67,-50,51}, -{67,-50,52}, -{67,-50,53}, -{67,-50,54}, -{67,-50,55}, -{67,-50,56}, -{67,-50,57}, -{67,-50,58}, -{67,-50,59}, -{67,-50,60}, -{67,-50,61}, -{67,-50,62}, -{67,-50,63}, -{67,-50,64}, -{67,-50,65}, -{67,-50,66}, -{67,-50,67}, -{67,-49,10}, -{67,-49,11}, -{67,-49,12}, -{67,-49,13}, -{67,-49,14}, -{67,-49,15}, -{67,-49,16}, -{67,-49,17}, -{67,-49,18}, -{67,-49,19}, -{67,-49,20}, -{67,-49,21}, -{67,-49,22}, -{67,-49,23}, -{67,-49,24}, -{67,-49,25}, -{67,-49,26}, -{67,-49,27}, -{67,-49,28}, -{67,-49,29}, -{67,-49,30}, -{67,-49,31}, -{67,-49,32}, -{67,-49,33}, -{67,-49,34}, -{67,-49,35}, -{67,-49,36}, -{67,-49,37}, -{67,-49,38}, -{67,-49,39}, -{67,-49,40}, -{67,-49,41}, -{67,-49,42}, -{67,-49,43}, -{67,-49,44}, -{67,-49,45}, -{67,-49,46}, -{67,-49,47}, -{67,-49,48}, -{67,-49,49}, -{67,-49,50}, -{67,-49,51}, -{67,-49,52}, -{67,-49,53}, -{67,-49,54}, -{67,-49,55}, -{67,-49,56}, -{67,-49,57}, -{67,-49,58}, -{67,-49,59}, -{67,-49,60}, -{67,-49,61}, -{67,-49,62}, -{67,-49,63}, -{67,-49,64}, -{67,-49,65}, -{67,-49,66}, -{67,-49,67}, -{67,-48,8}, -{67,-48,9}, -{67,-48,10}, -{67,-48,11}, -{67,-48,12}, -{67,-48,13}, -{67,-48,14}, -{67,-48,15}, -{67,-48,16}, -{67,-48,17}, -{67,-48,18}, -{67,-48,19}, -{67,-48,20}, -{67,-48,21}, -{67,-48,22}, -{67,-48,23}, -{67,-48,24}, -{67,-48,25}, -{67,-48,26}, -{67,-48,27}, -{67,-48,28}, -{67,-48,29}, -{67,-48,30}, -{67,-48,31}, -{67,-48,32}, -{67,-48,33}, -{67,-48,34}, -{67,-48,35}, -{67,-48,36}, -{67,-48,37}, -{67,-48,38}, -{67,-48,39}, -{67,-48,40}, -{67,-48,41}, -{67,-48,42}, -{67,-48,43}, -{67,-48,44}, -{67,-48,45}, -{67,-48,46}, -{67,-48,47}, -{67,-48,48}, -{67,-48,49}, -{67,-48,50}, -{67,-48,51}, -{67,-48,52}, -{67,-48,53}, -{67,-48,54}, -{67,-48,55}, -{67,-48,56}, -{67,-48,57}, -{67,-48,58}, -{67,-48,59}, -{67,-48,60}, -{67,-48,61}, -{67,-48,62}, -{67,-48,63}, -{67,-48,64}, -{67,-48,65}, -{67,-48,66}, -{67,-48,67}, -{67,-47,6}, -{67,-47,7}, -{67,-47,8}, -{67,-47,9}, -{67,-47,10}, -{67,-47,11}, -{67,-47,12}, -{67,-47,13}, -{67,-47,14}, -{67,-47,15}, -{67,-47,16}, -{67,-47,17}, -{67,-47,18}, -{67,-47,19}, -{67,-47,20}, -{67,-47,21}, -{67,-47,22}, -{67,-47,23}, -{67,-47,24}, -{67,-47,25}, -{67,-47,26}, -{67,-47,27}, -{67,-47,28}, -{67,-47,29}, -{67,-47,30}, -{67,-47,31}, -{67,-47,32}, -{67,-47,33}, -{67,-47,34}, -{67,-47,35}, -{67,-47,36}, -{67,-47,37}, -{67,-47,38}, -{67,-47,39}, -{67,-47,40}, -{67,-47,41}, -{67,-47,42}, -{67,-47,43}, -{67,-47,44}, -{67,-47,45}, -{67,-47,46}, -{67,-47,47}, -{67,-47,48}, -{67,-47,49}, -{67,-47,50}, -{67,-47,51}, -{67,-47,52}, -{67,-47,53}, -{67,-47,54}, -{67,-47,55}, -{67,-47,56}, -{67,-47,57}, -{67,-47,58}, -{67,-47,59}, -{67,-47,60}, -{67,-47,61}, -{67,-47,62}, -{67,-47,63}, -{67,-47,64}, -{67,-47,65}, -{67,-47,66}, -{67,-47,67}, -{67,-46,4}, -{67,-46,5}, -{67,-46,6}, -{67,-46,7}, -{67,-46,8}, -{67,-46,9}, -{67,-46,10}, -{67,-46,11}, -{67,-46,12}, -{67,-46,13}, -{67,-46,14}, -{67,-46,15}, -{67,-46,16}, -{67,-46,17}, -{67,-46,18}, -{67,-46,19}, -{67,-46,20}, -{67,-46,21}, -{67,-46,22}, -{67,-46,23}, -{67,-46,24}, -{67,-46,25}, -{67,-46,26}, -{67,-46,27}, -{67,-46,28}, -{67,-46,29}, -{67,-46,30}, -{67,-46,31}, -{67,-46,32}, -{67,-46,33}, -{67,-46,34}, -{67,-46,35}, -{67,-46,36}, -{67,-46,37}, -{67,-46,38}, -{67,-46,39}, -{67,-46,40}, -{67,-46,41}, -{67,-46,42}, -{67,-46,43}, -{67,-46,44}, -{67,-46,45}, -{67,-46,46}, -{67,-46,47}, -{67,-46,48}, -{67,-46,49}, -{67,-46,50}, -{67,-46,51}, -{67,-46,52}, -{67,-46,53}, -{67,-46,54}, -{67,-46,55}, -{67,-46,56}, -{67,-46,57}, -{67,-46,58}, -{67,-46,59}, -{67,-46,60}, -{67,-46,61}, -{67,-46,62}, -{67,-46,63}, -{67,-46,64}, -{67,-46,65}, -{67,-46,66}, -{67,-46,67}, -{67,-45,2}, -{67,-45,3}, -{67,-45,4}, -{67,-45,5}, -{67,-45,6}, -{67,-45,7}, -{67,-45,8}, -{67,-45,9}, -{67,-45,10}, -{67,-45,11}, -{67,-45,12}, -{67,-45,13}, -{67,-45,14}, -{67,-45,15}, -{67,-45,16}, -{67,-45,17}, -{67,-45,18}, -{67,-45,19}, -{67,-45,20}, -{67,-45,21}, -{67,-45,22}, -{67,-45,23}, -{67,-45,24}, -{67,-45,25}, -{67,-45,26}, -{67,-45,27}, -{67,-45,28}, -{67,-45,29}, -{67,-45,30}, -{67,-45,31}, -{67,-45,32}, -{67,-45,33}, -{67,-45,34}, -{67,-45,35}, -{67,-45,36}, -{67,-45,37}, -{67,-45,38}, -{67,-45,39}, -{67,-45,40}, -{67,-45,41}, -{67,-45,42}, -{67,-45,43}, -{67,-45,44}, -{67,-45,45}, -{67,-45,46}, -{67,-45,47}, -{67,-45,48}, -{67,-45,49}, -{67,-45,50}, -{67,-45,51}, -{67,-45,52}, -{67,-45,53}, -{67,-45,54}, -{67,-45,55}, -{67,-45,56}, -{67,-45,57}, -{67,-45,58}, -{67,-45,59}, -{67,-45,60}, -{67,-45,61}, -{67,-45,62}, -{67,-45,63}, -{67,-45,64}, -{67,-45,65}, -{67,-45,66}, -{67,-45,67}, -{67,-44,0}, -{67,-44,1}, -{67,-44,2}, -{67,-44,3}, -{67,-44,4}, -{67,-44,5}, -{67,-44,6}, -{67,-44,7}, -{67,-44,8}, -{67,-44,9}, -{67,-44,10}, -{67,-44,11}, -{67,-44,12}, -{67,-44,13}, -{67,-44,14}, -{67,-44,15}, -{67,-44,16}, -{67,-44,17}, -{67,-44,18}, -{67,-44,19}, -{67,-44,20}, -{67,-44,21}, -{67,-44,22}, -{67,-44,23}, -{67,-44,24}, -{67,-44,25}, -{67,-44,26}, -{67,-44,27}, -{67,-44,28}, -{67,-44,29}, -{67,-44,30}, -{67,-44,31}, -{67,-44,32}, -{67,-44,33}, -{67,-44,34}, -{67,-44,35}, -{67,-44,36}, -{67,-44,37}, -{67,-44,38}, -{67,-44,39}, -{67,-44,40}, -{67,-44,41}, -{67,-44,42}, -{67,-44,43}, -{67,-44,44}, -{67,-44,45}, -{67,-44,46}, -{67,-44,47}, -{67,-44,48}, -{67,-44,49}, -{67,-44,50}, -{67,-44,51}, -{67,-44,52}, -{67,-44,53}, -{67,-44,54}, -{67,-44,55}, -{67,-44,56}, -{67,-44,57}, -{67,-44,58}, -{67,-44,59}, -{67,-44,60}, -{67,-44,61}, -{67,-44,62}, -{67,-44,63}, -{67,-44,64}, -{67,-44,65}, -{67,-44,66}, -{67,-44,67}, -{67,-43,-1}, -{67,-43,0}, -{67,-43,1}, -{67,-43,2}, -{67,-43,3}, -{67,-43,4}, -{67,-43,5}, -{67,-43,6}, -{67,-43,7}, -{67,-43,8}, -{67,-43,9}, -{67,-43,10}, -{67,-43,11}, -{67,-43,12}, -{67,-43,13}, -{67,-43,14}, -{67,-43,15}, -{67,-43,16}, -{67,-43,17}, -{67,-43,18}, -{67,-43,19}, -{67,-43,20}, -{67,-43,21}, -{67,-43,22}, -{67,-43,23}, -{67,-43,24}, -{67,-43,25}, -{67,-43,26}, -{67,-43,27}, -{67,-43,28}, -{67,-43,29}, -{67,-43,30}, -{67,-43,31}, -{67,-43,32}, -{67,-43,33}, -{67,-43,34}, -{67,-43,35}, -{67,-43,36}, -{67,-43,37}, -{67,-43,38}, -{67,-43,39}, -{67,-43,40}, -{67,-43,41}, -{67,-43,42}, -{67,-43,43}, -{67,-43,44}, -{67,-43,45}, -{67,-43,46}, -{67,-43,47}, -{67,-43,48}, -{67,-43,49}, -{67,-43,50}, -{67,-43,51}, -{67,-43,52}, -{67,-43,53}, -{67,-43,54}, -{67,-43,55}, -{67,-43,56}, -{67,-43,57}, -{67,-43,58}, -{67,-43,59}, -{67,-43,60}, -{67,-43,61}, -{67,-43,62}, -{67,-43,63}, -{67,-43,64}, -{67,-43,65}, -{67,-43,66}, -{67,-43,67}, -{67,-42,-3}, -{67,-42,-2}, -{67,-42,-1}, -{67,-42,0}, -{67,-42,1}, -{67,-42,2}, -{67,-42,3}, -{67,-42,4}, -{67,-42,5}, -{67,-42,6}, -{67,-42,7}, -{67,-42,8}, -{67,-42,9}, -{67,-42,10}, -{67,-42,11}, -{67,-42,12}, -{67,-42,13}, -{67,-42,14}, -{67,-42,15}, -{67,-42,16}, -{67,-42,17}, -{67,-42,18}, -{67,-42,19}, -{67,-42,20}, -{67,-42,21}, -{67,-42,22}, -{67,-42,23}, -{67,-42,24}, -{67,-42,25}, -{67,-42,26}, -{67,-42,27}, -{67,-42,28}, -{67,-42,29}, -{67,-42,30}, -{67,-42,31}, -{67,-42,32}, -{67,-42,33}, -{67,-42,34}, -{67,-42,35}, -{67,-42,36}, -{67,-42,37}, -{67,-42,38}, -{67,-42,39}, -{67,-42,40}, -{67,-42,41}, -{67,-42,42}, -{67,-42,43}, -{67,-42,44}, -{67,-42,45}, -{67,-42,46}, -{67,-42,47}, -{67,-42,48}, -{67,-42,49}, -{67,-42,50}, -{67,-42,51}, -{67,-42,52}, -{67,-42,53}, -{67,-42,54}, -{67,-42,55}, -{67,-42,56}, -{67,-42,57}, -{67,-42,58}, -{67,-42,59}, -{67,-42,60}, -{67,-42,61}, -{67,-42,62}, -{67,-42,63}, -{67,-42,64}, -{67,-42,65}, -{67,-42,66}, -{67,-42,67}, -{67,-41,-5}, -{67,-41,-4}, -{67,-41,-3}, -{67,-41,-2}, -{67,-41,-1}, -{67,-41,0}, -{67,-41,1}, -{67,-41,2}, -{67,-41,3}, -{67,-41,4}, -{67,-41,5}, -{67,-41,6}, -{67,-41,7}, -{67,-41,8}, -{67,-41,9}, -{67,-41,10}, -{67,-41,11}, -{67,-41,12}, -{67,-41,13}, -{67,-41,14}, -{67,-41,15}, -{67,-41,16}, -{67,-41,17}, -{67,-41,18}, -{67,-41,19}, -{67,-41,20}, -{67,-41,21}, -{67,-41,22}, -{67,-41,23}, -{67,-41,24}, -{67,-41,25}, -{67,-41,26}, -{67,-41,27}, -{67,-41,28}, -{67,-41,29}, -{67,-41,30}, -{67,-41,31}, -{67,-41,32}, -{67,-41,33}, -{67,-41,34}, -{67,-41,35}, -{67,-41,36}, -{67,-41,37}, -{67,-41,38}, -{67,-41,39}, -{67,-41,40}, -{67,-41,41}, -{67,-41,42}, -{67,-41,43}, -{67,-41,44}, -{67,-41,45}, -{67,-41,46}, -{67,-41,47}, -{67,-41,48}, -{67,-41,49}, -{67,-41,50}, -{67,-41,51}, -{67,-41,52}, -{67,-41,53}, -{67,-41,54}, -{67,-41,55}, -{67,-41,56}, -{67,-41,57}, -{67,-41,58}, -{67,-41,59}, -{67,-41,60}, -{67,-41,61}, -{67,-41,62}, -{67,-41,63}, -{67,-41,64}, -{67,-41,65}, -{67,-41,66}, -{67,-41,67}, -{67,-41,68}, -{67,-40,-6}, -{67,-40,-5}, -{67,-40,-4}, -{67,-40,-3}, -{67,-40,-2}, -{67,-40,-1}, -{67,-40,0}, -{67,-40,1}, -{67,-40,2}, -{67,-40,3}, -{67,-40,4}, -{67,-40,5}, -{67,-40,6}, -{67,-40,7}, -{67,-40,8}, -{67,-40,9}, -{67,-40,10}, -{67,-40,11}, -{67,-40,12}, -{67,-40,13}, -{67,-40,14}, -{67,-40,15}, -{67,-40,16}, -{67,-40,17}, -{67,-40,18}, -{67,-40,19}, -{67,-40,20}, -{67,-40,21}, -{67,-40,22}, -{67,-40,23}, -{67,-40,24}, -{67,-40,25}, -{67,-40,26}, -{67,-40,27}, -{67,-40,28}, -{67,-40,29}, -{67,-40,30}, -{67,-40,31}, -{67,-40,32}, -{67,-40,33}, -{67,-40,34}, -{67,-40,35}, -{67,-40,36}, -{67,-40,37}, -{67,-40,38}, -{67,-40,39}, -{67,-40,40}, -{67,-40,41}, -{67,-40,42}, -{67,-40,43}, -{67,-40,44}, -{67,-40,45}, -{67,-40,46}, -{67,-40,47}, -{67,-40,48}, -{67,-40,49}, -{67,-40,50}, -{67,-40,51}, -{67,-40,52}, -{67,-40,53}, -{67,-40,54}, -{67,-40,55}, -{67,-40,56}, -{67,-40,57}, -{67,-40,58}, -{67,-40,59}, -{67,-40,60}, -{67,-40,61}, -{67,-40,62}, -{67,-40,63}, -{67,-40,64}, -{67,-40,65}, -{67,-40,66}, -{67,-40,67}, -{67,-40,68}, -{67,-39,-8}, -{67,-39,-7}, -{67,-39,-6}, -{67,-39,-5}, -{67,-39,-4}, -{67,-39,-3}, -{67,-39,-2}, -{67,-39,-1}, -{67,-39,0}, -{67,-39,1}, -{67,-39,2}, -{67,-39,3}, -{67,-39,4}, -{67,-39,5}, -{67,-39,6}, -{67,-39,7}, -{67,-39,8}, -{67,-39,9}, -{67,-39,10}, -{67,-39,11}, -{67,-39,12}, -{67,-39,13}, -{67,-39,14}, -{67,-39,15}, -{67,-39,16}, -{67,-39,17}, -{67,-39,18}, -{67,-39,19}, -{67,-39,20}, -{67,-39,21}, -{67,-39,22}, -{67,-39,23}, -{67,-39,24}, -{67,-39,25}, -{67,-39,26}, -{67,-39,27}, -{67,-39,28}, -{67,-39,29}, -{67,-39,30}, -{67,-39,31}, -{67,-39,32}, -{67,-39,33}, -{67,-39,34}, -{67,-39,35}, -{67,-39,36}, -{67,-39,37}, -{67,-39,38}, -{67,-39,39}, -{67,-39,40}, -{67,-39,41}, -{67,-39,42}, -{67,-39,43}, -{67,-39,44}, -{67,-39,45}, -{67,-39,46}, -{67,-39,47}, -{67,-39,48}, -{67,-39,49}, -{67,-39,50}, -{67,-39,51}, -{67,-39,52}, -{67,-39,53}, -{67,-39,54}, -{67,-39,55}, -{67,-39,56}, -{67,-39,57}, -{67,-39,58}, -{67,-39,59}, -{67,-39,60}, -{67,-39,61}, -{67,-39,62}, -{67,-39,63}, -{67,-39,64}, -{67,-39,65}, -{67,-39,66}, -{67,-39,67}, -{67,-39,68}, -{67,-38,-10}, -{67,-38,-9}, -{67,-38,-8}, -{67,-38,-7}, -{67,-38,-6}, -{67,-38,-5}, -{67,-38,-4}, -{67,-38,-3}, -{67,-38,-2}, -{67,-38,-1}, -{67,-38,0}, -{67,-38,1}, -{67,-38,2}, -{67,-38,3}, -{67,-38,4}, -{67,-38,5}, -{67,-38,6}, -{67,-38,7}, -{67,-38,8}, -{67,-38,9}, -{67,-38,10}, -{67,-38,11}, -{67,-38,12}, -{67,-38,13}, -{67,-38,14}, -{67,-38,15}, -{67,-38,16}, -{67,-38,17}, -{67,-38,18}, -{67,-38,19}, -{67,-38,20}, -{67,-38,21}, -{67,-38,22}, -{67,-38,23}, -{67,-38,24}, -{67,-38,25}, -{67,-38,26}, -{67,-38,27}, -{67,-38,28}, -{67,-38,29}, -{67,-38,30}, -{67,-38,31}, -{67,-38,32}, -{67,-38,33}, -{67,-38,34}, -{67,-38,35}, -{67,-38,36}, -{67,-38,37}, -{67,-38,38}, -{67,-38,39}, -{67,-38,40}, -{67,-38,41}, -{67,-38,42}, -{67,-38,43}, -{67,-38,44}, -{67,-38,45}, -{67,-38,46}, -{67,-38,47}, -{67,-38,48}, -{67,-38,49}, -{67,-38,50}, -{67,-38,51}, -{67,-38,52}, -{67,-38,53}, -{67,-38,54}, -{67,-38,55}, -{67,-38,56}, -{67,-38,57}, -{67,-38,58}, -{67,-38,59}, -{67,-38,60}, -{67,-38,61}, -{67,-38,62}, -{67,-38,63}, -{67,-38,64}, -{67,-38,65}, -{67,-38,66}, -{67,-38,67}, -{67,-38,68}, -{67,-37,-11}, -{67,-37,-10}, -{67,-37,-9}, -{67,-37,-8}, -{67,-37,-7}, -{67,-37,-6}, -{67,-37,-5}, -{67,-37,-4}, -{67,-37,-3}, -{67,-37,-2}, -{67,-37,-1}, -{67,-37,0}, -{67,-37,1}, -{67,-37,2}, -{67,-37,3}, -{67,-37,4}, -{67,-37,5}, -{67,-37,6}, -{67,-37,7}, -{67,-37,8}, -{67,-37,9}, -{67,-37,10}, -{67,-37,11}, -{67,-37,12}, -{67,-37,13}, -{67,-37,14}, -{67,-37,15}, -{67,-37,16}, -{67,-37,17}, -{67,-37,18}, -{67,-37,19}, -{67,-37,20}, -{67,-37,21}, -{67,-37,22}, -{67,-37,23}, -{67,-37,24}, -{67,-37,25}, -{67,-37,26}, -{67,-37,27}, -{67,-37,28}, -{67,-37,29}, -{67,-37,30}, -{67,-37,31}, -{67,-37,32}, -{67,-37,33}, -{67,-37,34}, -{67,-37,35}, -{67,-37,36}, -{67,-37,37}, -{67,-37,38}, -{67,-37,39}, -{67,-37,40}, -{67,-37,41}, -{67,-37,42}, -{67,-37,43}, -{67,-37,44}, -{67,-37,45}, -{67,-37,46}, -{67,-37,47}, -{67,-37,48}, -{67,-37,49}, -{67,-37,50}, -{67,-37,51}, -{67,-37,52}, -{67,-37,53}, -{67,-37,54}, -{67,-37,55}, -{67,-37,56}, -{67,-37,57}, -{67,-37,58}, -{67,-37,59}, -{67,-37,60}, -{67,-37,61}, -{67,-37,62}, -{67,-37,63}, -{67,-37,64}, -{67,-37,65}, -{67,-37,66}, -{67,-37,67}, -{67,-37,68}, -{67,-36,-13}, -{67,-36,-12}, -{67,-36,-11}, -{67,-36,-10}, -{67,-36,-9}, -{67,-36,-8}, -{67,-36,-7}, -{67,-36,-6}, -{67,-36,-5}, -{67,-36,-4}, -{67,-36,-3}, -{67,-36,-2}, -{67,-36,-1}, -{67,-36,0}, -{67,-36,1}, -{67,-36,2}, -{67,-36,3}, -{67,-36,4}, -{67,-36,5}, -{67,-36,6}, -{67,-36,7}, -{67,-36,8}, -{67,-36,9}, -{67,-36,10}, -{67,-36,11}, -{67,-36,12}, -{67,-36,13}, -{67,-36,14}, -{67,-36,15}, -{67,-36,16}, -{67,-36,17}, -{67,-36,18}, -{67,-36,19}, -{67,-36,20}, -{67,-36,21}, -{67,-36,22}, -{67,-36,23}, -{67,-36,24}, -{67,-36,25}, -{67,-36,26}, -{67,-36,27}, -{67,-36,28}, -{67,-36,29}, -{67,-36,30}, -{67,-36,31}, -{67,-36,32}, -{67,-36,33}, -{67,-36,34}, -{67,-36,35}, -{67,-36,36}, -{67,-36,37}, -{67,-36,38}, -{67,-36,39}, -{67,-36,40}, -{67,-36,41}, -{67,-36,42}, -{67,-36,43}, -{67,-36,44}, -{67,-36,45}, -{67,-36,46}, -{67,-36,47}, -{67,-36,48}, -{67,-36,49}, -{67,-36,50}, -{67,-36,51}, -{67,-36,52}, -{67,-36,53}, -{67,-36,54}, -{67,-36,55}, -{67,-36,56}, -{67,-36,57}, -{67,-36,58}, -{67,-36,59}, -{67,-36,60}, -{67,-36,61}, -{67,-36,62}, -{67,-36,63}, -{67,-36,64}, -{67,-36,65}, -{67,-36,66}, -{67,-36,67}, -{67,-36,68}, -{67,-35,-14}, -{67,-35,-13}, -{67,-35,-12}, -{67,-35,-11}, -{67,-35,-10}, -{67,-35,-9}, -{67,-35,-8}, -{67,-35,-7}, -{67,-35,-6}, -{67,-35,-5}, -{67,-35,-4}, -{67,-35,-3}, -{67,-35,-2}, -{67,-35,-1}, -{67,-35,0}, -{67,-35,1}, -{67,-35,2}, -{67,-35,3}, -{67,-35,4}, -{67,-35,5}, -{67,-35,6}, -{67,-35,7}, -{67,-35,8}, -{67,-35,9}, -{67,-35,10}, -{67,-35,11}, -{67,-35,12}, -{67,-35,13}, -{67,-35,14}, -{67,-35,15}, -{67,-35,16}, -{67,-35,17}, -{67,-35,18}, -{67,-35,19}, -{67,-35,20}, -{67,-35,21}, -{67,-35,22}, -{67,-35,23}, -{67,-35,24}, -{67,-35,25}, -{67,-35,26}, -{67,-35,27}, -{67,-35,28}, -{67,-35,29}, -{67,-35,30}, -{67,-35,31}, -{67,-35,32}, -{67,-35,33}, -{67,-35,34}, -{67,-35,35}, -{67,-35,36}, -{67,-35,37}, -{67,-35,38}, -{67,-35,39}, -{67,-35,40}, -{67,-35,41}, -{67,-35,42}, -{67,-35,43}, -{67,-35,44}, -{67,-35,45}, -{67,-35,46}, -{67,-35,47}, -{67,-35,48}, -{67,-35,49}, -{67,-35,50}, -{67,-35,51}, -{67,-35,52}, -{67,-35,53}, -{67,-35,54}, -{67,-35,55}, -{67,-35,56}, -{67,-35,57}, -{67,-35,58}, -{67,-35,59}, -{67,-35,60}, -{67,-35,61}, -{67,-35,62}, -{67,-35,63}, -{67,-35,64}, -{67,-35,65}, -{67,-35,66}, -{67,-35,67}, -{67,-35,68}, -{67,-34,-16}, -{67,-34,-15}, -{67,-34,-14}, -{67,-34,-13}, -{67,-34,-12}, -{67,-34,-11}, -{67,-34,-10}, -{67,-34,-9}, -{67,-34,-8}, -{67,-34,-7}, -{67,-34,-6}, -{67,-34,-5}, -{67,-34,-4}, -{67,-34,-3}, -{67,-34,-2}, -{67,-34,-1}, -{67,-34,0}, -{67,-34,1}, -{67,-34,2}, -{67,-34,3}, -{67,-34,4}, -{67,-34,5}, -{67,-34,6}, -{67,-34,7}, -{67,-34,8}, -{67,-34,9}, -{67,-34,10}, -{67,-34,11}, -{67,-34,12}, -{67,-34,13}, -{67,-34,14}, -{67,-34,15}, -{67,-34,16}, -{67,-34,17}, -{67,-34,18}, -{67,-34,19}, -{67,-34,20}, -{67,-34,21}, -{67,-34,22}, -{67,-34,23}, -{67,-34,24}, -{67,-34,25}, -{67,-34,26}, -{67,-34,27}, -{67,-34,28}, -{67,-34,29}, -{67,-34,30}, -{67,-34,31}, -{67,-34,32}, -{67,-34,33}, -{67,-34,34}, -{67,-34,35}, -{67,-34,36}, -{67,-34,37}, -{67,-34,38}, -{67,-34,39}, -{67,-34,40}, -{67,-34,41}, -{67,-34,42}, -{67,-34,43}, -{67,-34,44}, -{67,-34,45}, -{67,-34,46}, -{67,-34,47}, -{67,-34,48}, -{67,-34,49}, -{67,-34,50}, -{67,-34,51}, -{67,-34,52}, -{67,-34,53}, -{67,-34,54}, -{67,-34,55}, -{67,-34,56}, -{67,-34,57}, -{67,-34,58}, -{67,-34,59}, -{67,-34,60}, -{67,-34,61}, -{67,-34,62}, -{67,-34,63}, -{67,-34,64}, -{67,-34,65}, -{67,-34,66}, -{67,-34,67}, -{67,-34,68}, -{67,-33,-17}, -{67,-33,-16}, -{67,-33,-15}, -{67,-33,-14}, -{67,-33,-13}, -{67,-33,-12}, -{67,-33,-11}, -{67,-33,-10}, -{67,-33,-9}, -{67,-33,-8}, -{67,-33,-7}, -{67,-33,-6}, -{67,-33,-5}, -{67,-33,-4}, -{67,-33,-3}, -{67,-33,-2}, -{67,-33,-1}, -{67,-33,0}, -{67,-33,1}, -{67,-33,2}, -{67,-33,3}, -{67,-33,4}, -{67,-33,5}, -{67,-33,6}, -{67,-33,7}, -{67,-33,8}, -{67,-33,9}, -{67,-33,10}, -{67,-33,11}, -{67,-33,12}, -{67,-33,13}, -{67,-33,14}, -{67,-33,15}, -{67,-33,16}, -{67,-33,17}, -{67,-33,18}, -{67,-33,19}, -{67,-33,20}, -{67,-33,21}, -{67,-33,22}, -{67,-33,23}, -{67,-33,24}, -{67,-33,25}, -{67,-33,26}, -{67,-33,27}, -{67,-33,28}, -{67,-33,29}, -{67,-33,30}, -{67,-33,31}, -{67,-33,32}, -{67,-33,33}, -{67,-33,34}, -{67,-33,35}, -{67,-33,36}, -{67,-33,37}, -{67,-33,38}, -{67,-33,39}, -{67,-33,40}, -{67,-33,41}, -{67,-33,42}, -{67,-33,43}, -{67,-33,44}, -{67,-33,45}, -{67,-33,46}, -{67,-33,47}, -{67,-33,48}, -{67,-33,49}, -{67,-33,50}, -{67,-33,51}, -{67,-33,52}, -{67,-33,53}, -{67,-33,54}, -{67,-33,55}, -{67,-33,56}, -{67,-33,57}, -{67,-33,58}, -{67,-33,59}, -{67,-33,60}, -{67,-33,61}, -{67,-33,62}, -{67,-33,63}, -{67,-33,64}, -{67,-33,65}, -{67,-33,66}, -{67,-33,67}, -{67,-33,68}, -{67,-32,-19}, -{67,-32,-18}, -{67,-32,-17}, -{67,-32,-16}, -{67,-32,-15}, -{67,-32,-14}, -{67,-32,-13}, -{67,-32,-12}, -{67,-32,-11}, -{67,-32,-10}, -{67,-32,-9}, -{67,-32,-8}, -{67,-32,-7}, -{67,-32,-6}, -{67,-32,-5}, -{67,-32,-4}, -{67,-32,-3}, -{67,-32,-2}, -{67,-32,-1}, -{67,-32,0}, -{67,-32,1}, -{67,-32,2}, -{67,-32,3}, -{67,-32,4}, -{67,-32,5}, -{67,-32,6}, -{67,-32,7}, -{67,-32,8}, -{67,-32,9}, -{67,-32,10}, -{67,-32,11}, -{67,-32,12}, -{67,-32,13}, -{67,-32,14}, -{67,-32,15}, -{67,-32,16}, -{67,-32,17}, -{67,-32,18}, -{67,-32,19}, -{67,-32,20}, -{67,-32,21}, -{67,-32,22}, -{67,-32,23}, -{67,-32,24}, -{67,-32,25}, -{67,-32,26}, -{67,-32,27}, -{67,-32,28}, -{67,-32,29}, -{67,-32,30}, -{67,-32,31}, -{67,-32,32}, -{67,-32,33}, -{67,-32,34}, -{67,-32,35}, -{67,-32,36}, -{67,-32,37}, -{67,-32,38}, -{67,-32,39}, -{67,-32,40}, -{67,-32,41}, -{67,-32,42}, -{67,-32,43}, -{67,-32,44}, -{67,-32,45}, -{67,-32,46}, -{67,-32,47}, -{67,-32,48}, -{67,-32,49}, -{67,-32,50}, -{67,-32,51}, -{67,-32,52}, -{67,-32,53}, -{67,-32,54}, -{67,-32,55}, -{67,-32,56}, -{67,-32,57}, -{67,-32,58}, -{67,-32,59}, -{67,-32,60}, -{67,-32,61}, -{67,-32,62}, -{67,-32,63}, -{67,-32,64}, -{67,-32,65}, -{67,-32,66}, -{67,-32,67}, -{67,-32,68}, -{67,-31,-20}, -{67,-31,-19}, -{67,-31,-18}, -{67,-31,-17}, -{67,-31,-16}, -{67,-31,-15}, -{67,-31,-14}, -{67,-31,-13}, -{67,-31,-12}, -{67,-31,-11}, -{67,-31,-10}, -{67,-31,-9}, -{67,-31,-8}, -{67,-31,-7}, -{67,-31,-6}, -{67,-31,-5}, -{67,-31,-4}, -{67,-31,-3}, -{67,-31,-2}, -{67,-31,-1}, -{67,-31,0}, -{67,-31,1}, -{67,-31,2}, -{67,-31,3}, -{67,-31,4}, -{67,-31,5}, -{67,-31,6}, -{67,-31,7}, -{67,-31,8}, -{67,-31,9}, -{67,-31,10}, -{67,-31,11}, -{67,-31,12}, -{67,-31,13}, -{67,-31,14}, -{67,-31,15}, -{67,-31,16}, -{67,-31,17}, -{67,-31,18}, -{67,-31,19}, -{67,-31,20}, -{67,-31,21}, -{67,-31,22}, -{67,-31,23}, -{67,-31,24}, -{67,-31,25}, -{67,-31,26}, -{67,-31,27}, -{67,-31,28}, -{67,-31,29}, -{67,-31,30}, -{67,-31,31}, -{67,-31,32}, -{67,-31,33}, -{67,-31,34}, -{67,-31,35}, -{67,-31,36}, -{67,-31,37}, -{67,-31,38}, -{67,-31,39}, -{67,-31,40}, -{67,-31,41}, -{67,-31,42}, -{67,-31,43}, -{67,-31,44}, -{67,-31,45}, -{67,-31,46}, -{67,-31,47}, -{67,-31,48}, -{67,-31,49}, -{67,-31,50}, -{67,-31,51}, -{67,-31,52}, -{67,-31,53}, -{67,-31,54}, -{67,-31,55}, -{67,-31,56}, -{67,-31,57}, -{67,-31,58}, -{67,-31,59}, -{67,-31,60}, -{67,-31,61}, -{67,-31,62}, -{67,-31,63}, -{67,-31,64}, -{67,-31,65}, -{67,-31,66}, -{67,-31,67}, -{67,-31,68}, -{67,-30,-22}, -{67,-30,-21}, -{67,-30,-20}, -{67,-30,-19}, -{67,-30,-18}, -{67,-30,-17}, -{67,-30,-16}, -{67,-30,-15}, -{67,-30,-14}, -{67,-30,-13}, -{67,-30,-12}, -{67,-30,-11}, -{67,-30,-10}, -{67,-30,-9}, -{67,-30,-8}, -{67,-30,-7}, -{67,-30,-6}, -{67,-30,-5}, -{67,-30,-4}, -{67,-30,-3}, -{67,-30,-2}, -{67,-30,-1}, -{67,-30,0}, -{67,-30,1}, -{67,-30,2}, -{67,-30,3}, -{67,-30,4}, -{67,-30,5}, -{67,-30,6}, -{67,-30,7}, -{67,-30,8}, -{67,-30,9}, -{67,-30,10}, -{67,-30,11}, -{67,-30,12}, -{67,-30,13}, -{67,-30,14}, -{67,-30,15}, -{67,-30,16}, -{67,-30,17}, -{67,-30,18}, -{67,-30,19}, -{67,-30,20}, -{67,-30,21}, -{67,-30,22}, -{67,-30,23}, -{67,-30,24}, -{67,-30,25}, -{67,-30,26}, -{67,-30,27}, -{67,-30,28}, -{67,-30,29}, -{67,-30,30}, -{67,-30,31}, -{67,-30,32}, -{67,-30,33}, -{67,-30,34}, -{67,-30,35}, -{67,-30,36}, -{67,-30,37}, -{67,-30,38}, -{67,-30,39}, -{67,-30,40}, -{67,-30,41}, -{67,-30,42}, -{67,-30,43}, -{67,-30,44}, -{67,-30,45}, -{67,-30,46}, -{67,-30,47}, -{67,-30,48}, -{67,-30,49}, -{67,-30,50}, -{67,-30,51}, -{67,-30,52}, -{67,-30,53}, -{67,-30,54}, -{67,-30,55}, -{67,-30,56}, -{67,-30,57}, -{67,-30,58}, -{67,-30,59}, -{67,-30,60}, -{67,-30,61}, -{67,-30,62}, -{67,-30,63}, -{67,-30,64}, -{67,-30,65}, -{67,-30,66}, -{67,-30,67}, -{67,-30,68}, -{67,-29,-23}, -{67,-29,-22}, -{67,-29,-21}, -{67,-29,-20}, -{67,-29,-19}, -{67,-29,-18}, -{67,-29,-17}, -{67,-29,-16}, -{67,-29,-15}, -{67,-29,-14}, -{67,-29,-13}, -{67,-29,-12}, -{67,-29,-11}, -{67,-29,-10}, -{67,-29,-9}, -{67,-29,-8}, -{67,-29,-7}, -{67,-29,-6}, -{67,-29,-5}, -{67,-29,-4}, -{67,-29,-3}, -{67,-29,-2}, -{67,-29,-1}, -{67,-29,0}, -{67,-29,1}, -{67,-29,2}, -{67,-29,3}, -{67,-29,4}, -{67,-29,5}, -{67,-29,6}, -{67,-29,7}, -{67,-29,8}, -{67,-29,9}, -{67,-29,10}, -{67,-29,11}, -{67,-29,12}, -{67,-29,13}, -{67,-29,14}, -{67,-29,15}, -{67,-29,16}, -{67,-29,17}, -{67,-29,18}, -{67,-29,19}, -{67,-29,20}, -{67,-29,21}, -{67,-29,22}, -{67,-29,23}, -{67,-29,24}, -{67,-29,25}, -{67,-29,26}, -{67,-29,27}, -{67,-29,28}, -{67,-29,29}, -{67,-29,30}, -{67,-29,31}, -{67,-29,32}, -{67,-29,33}, -{67,-29,34}, -{67,-29,35}, -{67,-29,36}, -{67,-29,37}, -{67,-29,38}, -{67,-29,39}, -{67,-29,40}, -{67,-29,41}, -{67,-29,42}, -{67,-29,43}, -{67,-29,44}, -{67,-29,45}, -{67,-29,46}, -{67,-29,47}, -{67,-29,48}, -{67,-29,49}, -{67,-29,50}, -{67,-29,51}, -{67,-29,52}, -{67,-29,53}, -{67,-29,54}, -{67,-29,55}, -{67,-29,56}, -{67,-29,57}, -{67,-29,58}, -{67,-29,59}, -{67,-29,60}, -{67,-29,61}, -{67,-29,62}, -{67,-29,63}, -{67,-29,64}, -{67,-29,65}, -{67,-29,66}, -{67,-29,67}, -{67,-29,68}, -{67,-28,-24}, -{67,-28,-23}, -{67,-28,-22}, -{67,-28,-21}, -{67,-28,-20}, -{67,-28,-19}, -{67,-28,-18}, -{67,-28,-17}, -{67,-28,-16}, -{67,-28,-15}, -{67,-28,-14}, -{67,-28,-13}, -{67,-28,-12}, -{67,-28,-11}, -{67,-28,-10}, -{67,-28,-9}, -{67,-28,-8}, -{67,-28,-7}, -{67,-28,-6}, -{67,-28,-5}, -{67,-28,-4}, -{67,-28,-3}, -{67,-28,-2}, -{67,-28,-1}, -{67,-28,0}, -{67,-28,1}, -{67,-28,2}, -{67,-28,3}, -{67,-28,4}, -{67,-28,5}, -{67,-28,6}, -{67,-28,7}, -{67,-28,8}, -{67,-28,9}, -{67,-28,10}, -{67,-28,11}, -{67,-28,12}, -{67,-28,13}, -{67,-28,14}, -{67,-28,15}, -{67,-28,16}, -{67,-28,17}, -{67,-28,18}, -{67,-28,19}, -{67,-28,20}, -{67,-28,21}, -{67,-28,22}, -{67,-28,23}, -{67,-28,24}, -{67,-28,25}, -{67,-28,26}, -{67,-28,27}, -{67,-28,28}, -{67,-28,29}, -{67,-28,30}, -{67,-28,31}, -{67,-28,32}, -{67,-28,33}, -{67,-28,34}, -{67,-28,35}, -{67,-28,36}, -{67,-28,37}, -{67,-28,38}, -{67,-28,39}, -{67,-28,40}, -{67,-28,41}, -{67,-28,42}, -{67,-28,43}, -{67,-28,44}, -{67,-28,45}, -{67,-28,46}, -{67,-28,47}, -{67,-28,48}, -{67,-28,49}, -{67,-28,50}, -{67,-28,51}, -{67,-28,52}, -{67,-28,53}, -{67,-28,54}, -{67,-28,55}, -{67,-28,56}, -{67,-28,57}, -{67,-28,58}, -{67,-28,59}, -{67,-28,60}, -{67,-28,61}, -{67,-28,62}, -{67,-28,63}, -{67,-28,64}, -{67,-28,65}, -{67,-28,66}, -{67,-28,67}, -{67,-28,68}, -{67,-27,-26}, -{67,-27,-25}, -{67,-27,-24}, -{67,-27,-23}, -{67,-27,-22}, -{67,-27,-21}, -{67,-27,-20}, -{67,-27,-19}, -{67,-27,-18}, -{67,-27,-17}, -{67,-27,-16}, -{67,-27,-15}, -{67,-27,-14}, -{67,-27,-13}, -{67,-27,-12}, -{67,-27,-11}, -{67,-27,-10}, -{67,-27,-9}, -{67,-27,-8}, -{67,-27,-7}, -{67,-27,-6}, -{67,-27,-5}, -{67,-27,-4}, -{67,-27,-3}, -{67,-27,-2}, -{67,-27,-1}, -{67,-27,0}, -{67,-27,1}, -{67,-27,2}, -{67,-27,3}, -{67,-27,4}, -{67,-27,5}, -{67,-27,6}, -{67,-27,7}, -{67,-27,8}, -{67,-27,9}, -{67,-27,10}, -{67,-27,11}, -{67,-27,12}, -{67,-27,13}, -{67,-27,14}, -{67,-27,15}, -{67,-27,16}, -{67,-27,17}, -{67,-27,18}, -{67,-27,19}, -{67,-27,20}, -{67,-27,21}, -{67,-27,22}, -{67,-27,23}, -{67,-27,24}, -{67,-27,25}, -{67,-27,26}, -{67,-27,27}, -{67,-27,28}, -{67,-27,29}, -{67,-27,30}, -{67,-27,31}, -{67,-27,32}, -{67,-27,33}, -{67,-27,34}, -{67,-27,35}, -{67,-27,36}, -{67,-27,37}, -{67,-27,38}, -{67,-27,39}, -{67,-27,40}, -{67,-27,41}, -{67,-27,42}, -{67,-27,43}, -{67,-27,44}, -{67,-27,45}, -{67,-27,46}, -{67,-27,47}, -{67,-27,48}, -{67,-27,49}, -{67,-27,50}, -{67,-27,51}, -{67,-27,52}, -{67,-27,53}, -{67,-27,54}, -{67,-27,55}, -{67,-27,56}, -{67,-27,57}, -{67,-27,58}, -{67,-27,59}, -{67,-27,60}, -{67,-27,61}, -{67,-27,62}, -{67,-27,63}, -{67,-27,64}, -{67,-27,65}, -{67,-27,66}, -{67,-27,67}, -{67,-27,68}, -{67,-26,-27}, -{67,-26,-26}, -{67,-26,-25}, -{67,-26,-24}, -{67,-26,-23}, -{67,-26,-22}, -{67,-26,-21}, -{67,-26,-20}, -{67,-26,-19}, -{67,-26,-18}, -{67,-26,-17}, -{67,-26,-16}, -{67,-26,-15}, -{67,-26,-14}, -{67,-26,-13}, -{67,-26,-12}, -{67,-26,-11}, -{67,-26,-10}, -{67,-26,-9}, -{67,-26,-8}, -{67,-26,-7}, -{67,-26,-6}, -{67,-26,-5}, -{67,-26,-4}, -{67,-26,-3}, -{67,-26,-2}, -{67,-26,-1}, -{67,-26,0}, -{67,-26,1}, -{67,-26,2}, -{67,-26,3}, -{67,-26,4}, -{67,-26,5}, -{67,-26,6}, -{67,-26,7}, -{67,-26,8}, -{67,-26,9}, -{67,-26,10}, -{67,-26,11}, -{67,-26,12}, -{67,-26,13}, -{67,-26,14}, -{67,-26,15}, -{67,-26,16}, -{67,-26,17}, -{67,-26,18}, -{67,-26,19}, -{67,-26,20}, -{67,-26,21}, -{67,-26,22}, -{67,-26,23}, -{67,-26,24}, -{67,-26,25}, -{67,-26,26}, -{67,-26,27}, -{67,-26,28}, -{67,-26,29}, -{67,-26,30}, -{67,-26,31}, -{67,-26,32}, -{67,-26,33}, -{67,-26,34}, -{67,-26,35}, -{67,-26,36}, -{67,-26,37}, -{67,-26,38}, -{67,-26,39}, -{67,-26,40}, -{67,-26,41}, -{67,-26,42}, -{67,-26,43}, -{67,-26,44}, -{67,-26,45}, -{67,-26,46}, -{67,-26,47}, -{67,-26,48}, -{67,-26,49}, -{67,-26,50}, -{67,-26,51}, -{67,-26,52}, -{67,-26,53}, -{67,-26,54}, -{67,-26,55}, -{67,-26,56}, -{67,-26,57}, -{67,-26,58}, -{67,-26,59}, -{67,-26,60}, -{67,-26,61}, -{67,-26,62}, -{67,-26,63}, -{67,-26,64}, -{67,-26,65}, -{67,-26,66}, -{67,-26,67}, -{67,-26,68}, -{67,-25,-29}, -{67,-25,-28}, -{67,-25,-27}, -{67,-25,-26}, -{67,-25,-25}, -{67,-25,-24}, -{67,-25,-23}, -{67,-25,-22}, -{67,-25,-21}, -{67,-25,-20}, -{67,-25,-19}, -{67,-25,-18}, -{67,-25,-17}, -{67,-25,-16}, -{67,-25,-15}, -{67,-25,-14}, -{67,-25,-13}, -{67,-25,-12}, -{67,-25,-11}, -{67,-25,-10}, -{67,-25,-9}, -{67,-25,-8}, -{67,-25,-7}, -{67,-25,-6}, -{67,-25,-5}, -{67,-25,-4}, -{67,-25,-3}, -{67,-25,-2}, -{67,-25,-1}, -{67,-25,0}, -{67,-25,1}, -{67,-25,2}, -{67,-25,3}, -{67,-25,4}, -{67,-25,5}, -{67,-25,6}, -{67,-25,7}, -{67,-25,8}, -{67,-25,9}, -{67,-25,10}, -{67,-25,11}, -{67,-25,12}, -{67,-25,13}, -{67,-25,14}, -{67,-25,15}, -{67,-25,16}, -{67,-25,17}, -{67,-25,18}, -{67,-25,19}, -{67,-25,20}, -{67,-25,21}, -{67,-25,22}, -{67,-25,23}, -{67,-25,24}, -{67,-25,25}, -{67,-25,26}, -{67,-25,27}, -{67,-25,28}, -{67,-25,29}, -{67,-25,30}, -{67,-25,31}, -{67,-25,32}, -{67,-25,33}, -{67,-25,34}, -{67,-25,35}, -{67,-25,36}, -{67,-25,37}, -{67,-25,38}, -{67,-25,39}, -{67,-25,40}, -{67,-25,41}, -{67,-25,42}, -{67,-25,43}, -{67,-25,44}, -{67,-25,45}, -{67,-25,46}, -{67,-25,47}, -{67,-25,48}, -{67,-25,49}, -{67,-25,50}, -{67,-25,51}, -{67,-25,52}, -{67,-25,53}, -{67,-25,54}, -{67,-25,55}, -{67,-25,56}, -{67,-25,57}, -{67,-25,58}, -{67,-25,59}, -{67,-25,60}, -{67,-25,61}, -{67,-25,62}, -{67,-25,63}, -{67,-25,64}, -{67,-25,65}, -{67,-25,66}, -{67,-25,67}, -{67,-25,68}, -{67,-24,-30}, -{67,-24,-29}, -{67,-24,-28}, -{67,-24,-27}, -{67,-24,-26}, -{67,-24,-25}, -{67,-24,-24}, -{67,-24,-23}, -{67,-24,-22}, -{67,-24,-21}, -{67,-24,-20}, -{67,-24,-19}, -{67,-24,-18}, -{67,-24,-17}, -{67,-24,-16}, -{67,-24,-15}, -{67,-24,-14}, -{67,-24,-13}, -{67,-24,-12}, -{67,-24,-11}, -{67,-24,-10}, -{67,-24,-9}, -{67,-24,-8}, -{67,-24,-7}, -{67,-24,-6}, -{67,-24,-5}, -{67,-24,-4}, -{67,-24,-3}, -{67,-24,-2}, -{67,-24,-1}, -{67,-24,0}, -{67,-24,1}, -{67,-24,2}, -{67,-24,3}, -{67,-24,4}, -{67,-24,5}, -{67,-24,6}, -{67,-24,7}, -{67,-24,8}, -{67,-24,9}, -{67,-24,10}, -{67,-24,11}, -{67,-24,12}, -{67,-24,13}, -{67,-24,14}, -{67,-24,15}, -{67,-24,16}, -{67,-24,17}, -{67,-24,18}, -{67,-24,19}, -{67,-24,20}, -{67,-24,21}, -{67,-24,22}, -{67,-24,23}, -{67,-24,24}, -{67,-24,25}, -{67,-24,26}, -{67,-24,27}, -{67,-24,28}, -{67,-24,29}, -{67,-24,30}, -{67,-24,31}, -{67,-24,32}, -{67,-24,33}, -{67,-24,34}, -{67,-24,35}, -{67,-24,36}, -{67,-24,37}, -{67,-24,38}, -{67,-24,39}, -{67,-24,40}, -{67,-24,41}, -{67,-24,42}, -{67,-24,43}, -{67,-24,44}, -{67,-24,45}, -{67,-24,46}, -{67,-24,47}, -{67,-24,48}, -{67,-24,49}, -{67,-24,50}, -{67,-24,51}, -{67,-24,52}, -{67,-24,53}, -{67,-24,54}, -{67,-24,55}, -{67,-24,56}, -{67,-24,57}, -{67,-24,58}, -{67,-24,59}, -{67,-24,60}, -{67,-24,61}, -{67,-24,62}, -{67,-24,63}, -{67,-24,64}, -{67,-24,65}, -{67,-24,66}, -{67,-24,67}, -{67,-24,68}, -{67,-23,-31}, -{67,-23,-30}, -{67,-23,-29}, -{67,-23,-28}, -{67,-23,-27}, -{67,-23,-26}, -{67,-23,-25}, -{67,-23,-24}, -{67,-23,-23}, -{67,-23,-22}, -{67,-23,-21}, -{67,-23,-20}, -{67,-23,-19}, -{67,-23,-18}, -{67,-23,-17}, -{67,-23,-16}, -{67,-23,-15}, -{67,-23,-14}, -{67,-23,-13}, -{67,-23,-12}, -{67,-23,-11}, -{67,-23,-10}, -{67,-23,-9}, -{67,-23,-8}, -{67,-23,-7}, -{67,-23,-6}, -{67,-23,-5}, -{67,-23,-4}, -{67,-23,-3}, -{67,-23,-2}, -{67,-23,-1}, -{67,-23,0}, -{67,-23,1}, -{67,-23,2}, -{67,-23,3}, -{67,-23,4}, -{67,-23,5}, -{67,-23,6}, -{67,-23,7}, -{67,-23,8}, -{67,-23,9}, -{67,-23,10}, -{67,-23,11}, -{67,-23,12}, -{67,-23,13}, -{67,-23,14}, -{67,-23,15}, -{67,-23,16}, -{67,-23,17}, -{67,-23,18}, -{67,-23,19}, -{67,-23,20}, -{67,-23,21}, -{67,-23,22}, -{67,-23,23}, -{67,-23,24}, -{67,-23,25}, -{67,-23,26}, -{67,-23,27}, -{67,-23,28}, -{67,-23,29}, -{67,-23,30}, -{67,-23,31}, -{67,-23,32}, -{67,-23,33}, -{67,-23,34}, -{67,-23,35}, -{67,-23,36}, -{67,-23,37}, -{67,-23,38}, -{67,-23,39}, -{67,-23,40}, -{67,-23,41}, -{67,-23,42}, -{67,-23,43}, -{67,-23,44}, -{67,-23,45}, -{67,-23,46}, -{67,-23,47}, -{67,-23,48}, -{67,-23,49}, -{67,-23,50}, -{67,-23,51}, -{67,-23,52}, -{67,-23,53}, -{67,-23,54}, -{67,-23,55}, -{67,-23,56}, -{67,-23,57}, -{67,-23,58}, -{67,-23,59}, -{67,-23,60}, -{67,-23,61}, -{67,-23,62}, -{67,-23,63}, -{67,-23,64}, -{67,-23,65}, -{67,-23,66}, -{67,-23,67}, -{67,-23,68}, -{67,-23,69}, -{67,-22,-33}, -{67,-22,-32}, -{67,-22,-31}, -{67,-22,-30}, -{67,-22,-29}, -{67,-22,-28}, -{67,-22,-27}, -{67,-22,-26}, -{67,-22,-25}, -{67,-22,-24}, -{67,-22,-23}, -{67,-22,-22}, -{67,-22,-21}, -{67,-22,-20}, -{67,-22,-19}, -{67,-22,-18}, -{67,-22,-17}, -{67,-22,-16}, -{67,-22,-15}, -{67,-22,-14}, -{67,-22,-13}, -{67,-22,-12}, -{67,-22,-11}, -{67,-22,-10}, -{67,-22,-9}, -{67,-22,-8}, -{67,-22,-7}, -{67,-22,-6}, -{67,-22,-5}, -{67,-22,-4}, -{67,-22,-3}, -{67,-22,-2}, -{67,-22,-1}, -{67,-22,0}, -{67,-22,1}, -{67,-22,2}, -{67,-22,3}, -{67,-22,4}, -{67,-22,5}, -{67,-22,6}, -{67,-22,7}, -{67,-22,8}, -{67,-22,9}, -{67,-22,10}, -{67,-22,11}, -{67,-22,12}, -{67,-22,13}, -{67,-22,14}, -{67,-22,15}, -{67,-22,16}, -{67,-22,17}, -{67,-22,18}, -{67,-22,19}, -{67,-22,20}, -{67,-22,21}, -{67,-22,22}, -{67,-22,23}, -{67,-22,24}, -{67,-22,25}, -{67,-22,26}, -{67,-22,27}, -{67,-22,28}, -{67,-22,29}, -{67,-22,30}, -{67,-22,31}, -{67,-22,32}, -{67,-22,33}, -{67,-22,34}, -{67,-22,35}, -{67,-22,36}, -{67,-22,37}, -{67,-22,38}, -{67,-22,39}, -{67,-22,40}, -{67,-22,41}, -{67,-22,42}, -{67,-22,43}, -{67,-22,44}, -{67,-22,45}, -{67,-22,46}, -{67,-22,47}, -{67,-22,48}, -{67,-22,49}, -{67,-22,50}, -{67,-22,51}, -{67,-22,52}, -{67,-22,53}, -{67,-22,54}, -{67,-22,55}, -{67,-22,56}, -{67,-22,57}, -{67,-22,58}, -{67,-22,59}, -{67,-22,60}, -{67,-22,61}, -{67,-22,62}, -{67,-22,63}, -{67,-22,64}, -{67,-22,65}, -{67,-22,66}, -{67,-22,67}, -{67,-22,68}, -{67,-22,69}, -{67,-21,-34}, -{67,-21,-33}, -{67,-21,-32}, -{67,-21,-31}, -{67,-21,-30}, -{67,-21,-29}, -{67,-21,-28}, -{67,-21,-27}, -{67,-21,-26}, -{67,-21,-25}, -{67,-21,-24}, -{67,-21,-23}, -{67,-21,-22}, -{67,-21,-21}, -{67,-21,-20}, -{67,-21,-19}, -{67,-21,-18}, -{67,-21,-17}, -{67,-21,-16}, -{67,-21,-15}, -{67,-21,-14}, -{67,-21,-13}, -{67,-21,-12}, -{67,-21,-11}, -{67,-21,-10}, -{67,-21,-9}, -{67,-21,-8}, -{67,-21,-7}, -{67,-21,-6}, -{67,-21,-5}, -{67,-21,-4}, -{67,-21,-3}, -{67,-21,-2}, -{67,-21,-1}, -{67,-21,0}, -{67,-21,1}, -{67,-21,2}, -{67,-21,3}, -{67,-21,4}, -{67,-21,5}, -{67,-21,6}, -{67,-21,7}, -{67,-21,8}, -{67,-21,9}, -{67,-21,10}, -{67,-21,11}, -{67,-21,12}, -{67,-21,13}, -{67,-21,14}, -{67,-21,15}, -{67,-21,16}, -{67,-21,17}, -{67,-21,18}, -{67,-21,19}, -{67,-21,20}, -{67,-21,21}, -{67,-21,22}, -{67,-21,23}, -{67,-21,24}, -{67,-21,25}, -{67,-21,26}, -{67,-21,27}, -{67,-21,28}, -{67,-21,29}, -{67,-21,30}, -{67,-21,31}, -{67,-21,32}, -{67,-21,33}, -{67,-21,34}, -{67,-21,35}, -{67,-21,36}, -{67,-21,37}, -{67,-21,38}, -{67,-21,39}, -{67,-21,40}, -{67,-21,41}, -{67,-21,42}, -{67,-21,43}, -{67,-21,44}, -{67,-21,45}, -{67,-21,46}, -{67,-21,47}, -{67,-21,48}, -{67,-21,49}, -{67,-21,50}, -{67,-21,51}, -{67,-21,52}, -{67,-21,53}, -{67,-21,54}, -{67,-21,55}, -{67,-21,56}, -{67,-21,57}, -{67,-21,58}, -{67,-21,59}, -{67,-21,60}, -{67,-21,61}, -{67,-21,62}, -{67,-21,63}, -{67,-21,64}, -{67,-21,65}, -{67,-21,66}, -{67,-21,67}, -{67,-21,68}, -{67,-21,69}, -{67,-20,-35}, -{67,-20,-34}, -{67,-20,-33}, -{67,-20,-32}, -{67,-20,-31}, -{67,-20,-30}, -{67,-20,-29}, -{67,-20,-28}, -{67,-20,-27}, -{67,-20,-26}, -{67,-20,-25}, -{67,-20,-24}, -{67,-20,-23}, -{67,-20,-22}, -{67,-20,-21}, -{67,-20,-20}, -{67,-20,-19}, -{67,-20,-18}, -{67,-20,-17}, -{67,-20,-16}, -{67,-20,-15}, -{67,-20,-14}, -{67,-20,-13}, -{67,-20,-12}, -{67,-20,-11}, -{67,-20,-10}, -{67,-20,-9}, -{67,-20,-8}, -{67,-20,-7}, -{67,-20,-6}, -{67,-20,-5}, -{67,-20,-4}, -{67,-20,-3}, -{67,-20,-2}, -{67,-20,-1}, -{67,-20,0}, -{67,-20,1}, -{67,-20,2}, -{67,-20,3}, -{67,-20,4}, -{67,-20,5}, -{67,-20,6}, -{67,-20,7}, -{67,-20,8}, -{67,-20,9}, -{67,-20,10}, -{67,-20,11}, -{67,-20,12}, -{67,-20,13}, -{67,-20,14}, -{67,-20,15}, -{67,-20,16}, -{67,-20,17}, -{67,-20,18}, -{67,-20,19}, -{67,-20,20}, -{67,-20,21}, -{67,-20,22}, -{67,-20,23}, -{67,-20,24}, -{67,-20,25}, -{67,-20,26}, -{67,-20,27}, -{67,-20,28}, -{67,-20,29}, -{67,-20,30}, -{67,-20,31}, -{67,-20,32}, -{67,-20,33}, -{67,-20,34}, -{67,-20,35}, -{67,-20,36}, -{67,-20,37}, -{67,-20,38}, -{67,-20,39}, -{67,-20,40}, -{67,-20,41}, -{67,-20,42}, -{67,-20,43}, -{67,-20,44}, -{67,-20,45}, -{67,-20,46}, -{67,-20,47}, -{67,-20,48}, -{67,-20,49}, -{67,-20,50}, -{67,-20,51}, -{67,-20,52}, -{67,-20,53}, -{67,-20,54}, -{67,-20,55}, -{67,-20,56}, -{67,-20,57}, -{67,-20,58}, -{67,-20,59}, -{67,-20,60}, -{67,-20,61}, -{67,-20,62}, -{67,-20,63}, -{67,-20,64}, -{67,-20,65}, -{67,-20,66}, -{67,-20,67}, -{67,-20,68}, -{67,-20,69}, -{67,-19,-36}, -{67,-19,-35}, -{67,-19,-34}, -{67,-19,-33}, -{67,-19,-32}, -{67,-19,-31}, -{67,-19,-30}, -{67,-19,-29}, -{67,-19,-28}, -{67,-19,-27}, -{67,-19,-26}, -{67,-19,-25}, -{67,-19,-24}, -{67,-19,-23}, -{67,-19,-22}, -{67,-19,-21}, -{67,-19,-20}, -{67,-19,-19}, -{67,-19,-18}, -{67,-19,-17}, -{67,-19,-16}, -{67,-19,-15}, -{67,-19,-14}, -{67,-19,-13}, -{67,-19,-12}, -{67,-19,-11}, -{67,-19,-10}, -{67,-19,-9}, -{67,-19,-8}, -{67,-19,-7}, -{67,-19,-6}, -{67,-19,-5}, -{67,-19,-4}, -{67,-19,-3}, -{67,-19,-2}, -{67,-19,-1}, -{67,-19,0}, -{67,-19,1}, -{67,-19,2}, -{67,-19,3}, -{67,-19,4}, -{67,-19,5}, -{67,-19,6}, -{67,-19,7}, -{67,-19,8}, -{67,-19,9}, -{67,-19,10}, -{67,-19,11}, -{67,-19,12}, -{67,-19,13}, -{67,-19,14}, -{67,-19,15}, -{67,-19,16}, -{67,-19,17}, -{67,-19,18}, -{67,-19,19}, -{67,-19,20}, -{67,-19,21}, -{67,-19,22}, -{67,-19,23}, -{67,-19,24}, -{67,-19,25}, -{67,-19,26}, -{67,-19,27}, -{67,-19,28}, -{67,-19,29}, -{67,-19,30}, -{67,-19,31}, -{67,-19,32}, -{67,-19,33}, -{67,-19,34}, -{67,-19,35}, -{67,-19,36}, -{67,-19,37}, -{67,-19,38}, -{67,-19,39}, -{67,-19,40}, -{67,-19,41}, -{67,-19,42}, -{67,-19,43}, -{67,-19,44}, -{67,-19,45}, -{67,-19,46}, -{67,-19,47}, -{67,-19,48}, -{67,-19,49}, -{67,-19,50}, -{67,-19,51}, -{67,-19,52}, -{67,-19,53}, -{67,-19,54}, -{67,-19,55}, -{67,-19,56}, -{67,-19,57}, -{67,-19,58}, -{67,-19,59}, -{67,-19,60}, -{67,-19,61}, -{67,-19,62}, -{67,-19,63}, -{67,-19,64}, -{67,-19,65}, -{67,-19,66}, -{67,-19,67}, -{67,-19,68}, -{67,-19,69}, -{67,-18,-38}, -{67,-18,-37}, -{67,-18,-36}, -{67,-18,-35}, -{67,-18,-34}, -{67,-18,-33}, -{67,-18,-32}, -{67,-18,-31}, -{67,-18,-30}, -{67,-18,-29}, -{67,-18,-28}, -{67,-18,-27}, -{67,-18,-26}, -{67,-18,-25}, -{67,-18,-24}, -{67,-18,-23}, -{67,-18,-22}, -{67,-18,-21}, -{67,-18,-20}, -{67,-18,-19}, -{67,-18,-18}, -{67,-18,-17}, -{67,-18,-16}, -{67,-18,-15}, -{67,-18,-14}, -{67,-18,-13}, -{67,-18,-12}, -{67,-18,-11}, -{67,-18,-10}, -{67,-18,-9}, -{67,-18,-8}, -{67,-18,-7}, -{67,-18,-6}, -{67,-18,-5}, -{67,-18,-4}, -{67,-18,-3}, -{67,-18,-2}, -{67,-18,-1}, -{67,-18,0}, -{67,-18,1}, -{67,-18,2}, -{67,-18,3}, -{67,-18,4}, -{67,-18,5}, -{67,-18,6}, -{67,-18,7}, -{67,-18,8}, -{67,-18,9}, -{67,-18,10}, -{67,-18,11}, -{67,-18,12}, -{67,-18,13}, -{67,-18,14}, -{67,-18,15}, -{67,-18,16}, -{67,-18,17}, -{67,-18,18}, -{67,-18,19}, -{67,-18,20}, -{67,-18,21}, -{67,-18,22}, -{67,-18,23}, -{67,-18,24}, -{67,-18,25}, -{67,-18,26}, -{67,-18,27}, -{67,-18,28}, -{67,-18,29}, -{67,-18,30}, -{67,-18,31}, -{67,-18,32}, -{67,-18,33}, -{67,-18,34}, -{67,-18,35}, -{67,-18,36}, -{67,-18,37}, -{67,-18,38}, -{67,-18,39}, -{67,-18,40}, -{67,-18,41}, -{67,-18,42}, -{67,-18,43}, -{67,-18,44}, -{67,-18,45}, -{67,-18,46}, -{67,-18,47}, -{67,-18,48}, -{67,-18,49}, -{67,-18,50}, -{67,-18,51}, -{67,-18,52}, -{67,-18,53}, -{67,-18,54}, -{67,-18,55}, -{67,-18,56}, -{67,-18,57}, -{67,-18,58}, -{67,-18,59}, -{67,-18,60}, -{67,-18,61}, -{67,-18,62}, -{67,-18,63}, -{67,-18,64}, -{67,-18,65}, -{67,-18,66}, -{67,-18,67}, -{67,-18,68}, -{67,-18,69}, -{67,-17,-39}, -{67,-17,-38}, -{67,-17,-37}, -{67,-17,-36}, -{67,-17,-35}, -{67,-17,-34}, -{67,-17,-33}, -{67,-17,-32}, -{67,-17,-31}, -{67,-17,-30}, -{67,-17,-29}, -{67,-17,-28}, -{67,-17,-27}, -{67,-17,-26}, -{67,-17,-25}, -{67,-17,-24}, -{67,-17,-23}, -{67,-17,-22}, -{67,-17,-21}, -{67,-17,-20}, -{67,-17,-19}, -{67,-17,-18}, -{67,-17,-17}, -{67,-17,-16}, -{67,-17,-15}, -{67,-17,-14}, -{67,-17,-13}, -{67,-17,-12}, -{67,-17,-11}, -{67,-17,-10}, -{67,-17,-9}, -{67,-17,-8}, -{67,-17,-7}, -{67,-17,-6}, -{67,-17,-5}, -{67,-17,-4}, -{67,-17,-3}, -{67,-17,-2}, -{67,-17,-1}, -{67,-17,0}, -{67,-17,1}, -{67,-17,2}, -{67,-17,3}, -{67,-17,4}, -{67,-17,5}, -{67,-17,6}, -{67,-17,7}, -{67,-17,8}, -{67,-17,9}, -{67,-17,10}, -{67,-17,11}, -{67,-17,12}, -{67,-17,13}, -{67,-17,14}, -{67,-17,15}, -{67,-17,16}, -{67,-17,17}, -{67,-17,18}, -{67,-17,19}, -{67,-17,20}, -{67,-17,21}, -{67,-17,22}, -{67,-17,23}, -{67,-17,24}, -{67,-17,25}, -{67,-17,26}, -{67,-17,27}, -{67,-17,28}, -{67,-17,29}, -{67,-17,30}, -{67,-17,31}, -{67,-17,32}, -{67,-17,33}, -{67,-17,34}, -{67,-17,35}, -{67,-17,36}, -{67,-17,37}, -{67,-17,38}, -{67,-17,39}, -{67,-17,40}, -{67,-17,41}, -{67,-17,42}, -{67,-17,43}, -{67,-17,44}, -{67,-17,45}, -{67,-17,46}, -{67,-17,47}, -{67,-17,48}, -{67,-17,49}, -{67,-17,50}, -{67,-17,51}, -{67,-17,52}, -{67,-17,53}, -{67,-17,54}, -{67,-17,55}, -{67,-17,56}, -{67,-17,57}, -{67,-17,58}, -{67,-17,59}, -{67,-17,60}, -{67,-17,61}, -{67,-17,62}, -{67,-17,63}, -{67,-17,64}, -{67,-17,65}, -{67,-17,66}, -{67,-17,67}, -{67,-17,68}, -{67,-17,69}, -{67,-16,-40}, -{67,-16,-39}, -{67,-16,-38}, -{67,-16,-37}, -{67,-16,-36}, -{67,-16,-35}, -{67,-16,-34}, -{67,-16,-33}, -{67,-16,-32}, -{67,-16,-31}, -{67,-16,-30}, -{67,-16,-29}, -{67,-16,-28}, -{67,-16,-27}, -{67,-16,-26}, -{67,-16,-25}, -{67,-16,-24}, -{67,-16,-23}, -{67,-16,-22}, -{67,-16,-21}, -{67,-16,-20}, -{67,-16,-19}, -{67,-16,-18}, -{67,-16,-17}, -{67,-16,-16}, -{67,-16,-15}, -{67,-16,-14}, -{67,-16,-13}, -{67,-16,-12}, -{67,-16,-11}, -{67,-16,-10}, -{67,-16,-9}, -{67,-16,-8}, -{67,-16,-7}, -{67,-16,-6}, -{67,-16,-5}, -{67,-16,-4}, -{67,-16,-3}, -{67,-16,-2}, -{67,-16,-1}, -{67,-16,0}, -{67,-16,1}, -{67,-16,2}, -{67,-16,3}, -{67,-16,4}, -{67,-16,5}, -{67,-16,6}, -{67,-16,7}, -{67,-16,8}, -{67,-16,9}, -{67,-16,10}, -{67,-16,11}, -{67,-16,12}, -{67,-16,13}, -{67,-16,14}, -{67,-16,15}, -{67,-16,16}, -{67,-16,17}, -{67,-16,18}, -{67,-16,19}, -{67,-16,20}, -{67,-16,21}, -{67,-16,22}, -{67,-16,23}, -{67,-16,24}, -{67,-16,25}, -{67,-16,26}, -{67,-16,27}, -{67,-16,28}, -{67,-16,29}, -{67,-16,30}, -{67,-16,31}, -{67,-16,32}, -{67,-16,33}, -{67,-16,34}, -{67,-16,35}, -{67,-16,36}, -{67,-16,37}, -{67,-16,38}, -{67,-16,39}, -{67,-16,40}, -{67,-16,41}, -{67,-16,42}, -{67,-16,43}, -{67,-16,44}, -{67,-16,45}, -{67,-16,46}, -{67,-16,47}, -{67,-16,48}, -{67,-16,49}, -{67,-16,50}, -{67,-16,51}, -{67,-16,52}, -{67,-16,53}, -{67,-16,54}, -{67,-16,55}, -{67,-16,56}, -{67,-16,57}, -{67,-16,58}, -{67,-16,59}, -{67,-16,60}, -{67,-16,61}, -{67,-16,62}, -{67,-16,63}, -{67,-16,64}, -{67,-16,65}, -{67,-16,66}, -{67,-16,67}, -{67,-16,68}, -{67,-16,69}, -{67,-15,-42}, -{67,-15,-41}, -{67,-15,-40}, -{67,-15,-39}, -{67,-15,-38}, -{67,-15,-37}, -{67,-15,-36}, -{67,-15,-35}, -{67,-15,-34}, -{67,-15,-33}, -{67,-15,-32}, -{67,-15,-31}, -{67,-15,-30}, -{67,-15,-29}, -{67,-15,-28}, -{67,-15,-27}, -{67,-15,-26}, -{67,-15,-25}, -{67,-15,-24}, -{67,-15,-23}, -{67,-15,-22}, -{67,-15,-21}, -{67,-15,-20}, -{67,-15,-19}, -{67,-15,-18}, -{67,-15,-17}, -{67,-15,-16}, -{67,-15,-15}, -{67,-15,-14}, -{67,-15,-13}, -{67,-15,-12}, -{67,-15,-11}, -{67,-15,-10}, -{67,-15,-9}, -{67,-15,-8}, -{67,-15,-7}, -{67,-15,-6}, -{67,-15,-5}, -{67,-15,-4}, -{67,-15,-3}, -{67,-15,-2}, -{67,-15,-1}, -{67,-15,0}, -{67,-15,1}, -{67,-15,2}, -{67,-15,3}, -{67,-15,4}, -{67,-15,5}, -{67,-15,6}, -{67,-15,7}, -{67,-15,8}, -{67,-15,9}, -{67,-15,10}, -{67,-15,11}, -{67,-15,12}, -{67,-15,13}, -{67,-15,14}, -{67,-15,15}, -{67,-15,16}, -{67,-15,17}, -{67,-15,18}, -{67,-15,19}, -{67,-15,20}, -{67,-15,21}, -{67,-15,22}, -{67,-15,23}, -{67,-15,24}, -{67,-15,25}, -{67,-15,26}, -{67,-15,27}, -{67,-15,28}, -{67,-15,29}, -{67,-15,30}, -{67,-15,31}, -{67,-15,32}, -{67,-15,33}, -{67,-15,34}, -{67,-15,35}, -{67,-15,36}, -{67,-15,37}, -{67,-15,38}, -{67,-15,39}, -{67,-15,40}, -{67,-15,41}, -{67,-15,42}, -{67,-15,43}, -{67,-15,44}, -{67,-15,45}, -{67,-15,46}, -{67,-15,47}, -{67,-15,48}, -{67,-15,49}, -{67,-15,50}, -{67,-15,51}, -{67,-15,52}, -{67,-15,53}, -{67,-15,54}, -{67,-15,55}, -{67,-15,56}, -{67,-15,57}, -{67,-15,58}, -{67,-15,59}, -{67,-15,60}, -{67,-15,61}, -{67,-15,62}, -{67,-15,63}, -{67,-15,64}, -{67,-15,65}, -{67,-15,66}, -{67,-15,67}, -{67,-15,68}, -{67,-15,69}, -{67,-14,-43}, -{67,-14,-42}, -{67,-14,-41}, -{67,-14,-40}, -{67,-14,-39}, -{67,-14,-38}, -{67,-14,-37}, -{67,-14,-36}, -{67,-14,-35}, -{67,-14,-34}, -{67,-14,-33}, -{67,-14,-32}, -{67,-14,-31}, -{67,-14,-30}, -{67,-14,-29}, -{67,-14,-28}, -{67,-14,-27}, -{67,-14,-26}, -{67,-14,-25}, -{67,-14,-24}, -{67,-14,-23}, -{67,-14,-22}, -{67,-14,-21}, -{67,-14,-20}, -{67,-14,-19}, -{67,-14,-18}, -{67,-14,-17}, -{67,-14,-16}, -{67,-14,-15}, -{67,-14,-14}, -{67,-14,-13}, -{67,-14,-12}, -{67,-14,-11}, -{67,-14,-10}, -{67,-14,-9}, -{67,-14,-8}, -{67,-14,-7}, -{67,-14,-6}, -{67,-14,-5}, -{67,-14,-4}, -{67,-14,-3}, -{67,-14,-2}, -{67,-14,-1}, -{67,-14,0}, -{67,-14,1}, -{67,-14,2}, -{67,-14,3}, -{67,-14,4}, -{67,-14,5}, -{67,-14,6}, -{67,-14,7}, -{67,-14,8}, -{67,-14,9}, -{67,-14,10}, -{67,-14,11}, -{67,-14,12}, -{67,-14,13}, -{67,-14,14}, -{67,-14,15}, -{67,-14,16}, -{67,-14,17}, -{67,-14,18}, -{67,-14,19}, -{67,-14,20}, -{67,-14,21}, -{67,-14,22}, -{67,-14,23}, -{67,-14,24}, -{67,-14,25}, -{67,-14,26}, -{67,-14,27}, -{67,-14,28}, -{67,-14,29}, -{67,-14,30}, -{67,-14,31}, -{67,-14,32}, -{67,-14,33}, -{67,-14,34}, -{67,-14,35}, -{67,-14,36}, -{67,-14,37}, -{67,-14,38}, -{67,-14,39}, -{67,-14,40}, -{67,-14,41}, -{67,-14,42}, -{67,-14,43}, -{67,-14,44}, -{67,-14,45}, -{67,-14,46}, -{67,-14,47}, -{67,-14,48}, -{67,-14,49}, -{67,-14,50}, -{67,-14,51}, -{67,-14,52}, -{67,-14,53}, -{67,-14,54}, -{67,-14,55}, -{67,-14,56}, -{67,-14,57}, -{67,-14,58}, -{67,-14,59}, -{67,-14,60}, -{67,-14,61}, -{67,-14,62}, -{67,-14,63}, -{67,-14,64}, -{67,-14,65}, -{67,-14,66}, -{67,-14,67}, -{67,-14,68}, -{67,-14,69}, -{67,-13,-44}, -{67,-13,-43}, -{67,-13,-42}, -{67,-13,-41}, -{67,-13,-40}, -{67,-13,-39}, -{67,-13,-38}, -{67,-13,-37}, -{67,-13,-36}, -{67,-13,-35}, -{67,-13,-34}, -{67,-13,-33}, -{67,-13,-32}, -{67,-13,-31}, -{67,-13,-30}, -{67,-13,-29}, -{67,-13,-28}, -{67,-13,-27}, -{67,-13,-26}, -{67,-13,-25}, -{67,-13,-24}, -{67,-13,-23}, -{67,-13,-22}, -{67,-13,-21}, -{67,-13,-20}, -{67,-13,-19}, -{67,-13,-18}, -{67,-13,-17}, -{67,-13,-16}, -{67,-13,-15}, -{67,-13,-14}, -{67,-13,-13}, -{67,-13,-12}, -{67,-13,-11}, -{67,-13,-10}, -{67,-13,-9}, -{67,-13,-8}, -{67,-13,-7}, -{67,-13,-6}, -{67,-13,-5}, -{67,-13,-4}, -{67,-13,-3}, -{67,-13,-2}, -{67,-13,-1}, -{67,-13,0}, -{67,-13,1}, -{67,-13,2}, -{67,-13,3}, -{67,-13,4}, -{67,-13,5}, -{67,-13,6}, -{67,-13,7}, -{67,-13,8}, -{67,-13,9}, -{67,-13,10}, -{67,-13,11}, -{67,-13,12}, -{67,-13,13}, -{67,-13,14}, -{67,-13,15}, -{67,-13,16}, -{67,-13,17}, -{67,-13,18}, -{67,-13,19}, -{67,-13,20}, -{67,-13,21}, -{67,-13,22}, -{67,-13,23}, -{67,-13,24}, -{67,-13,25}, -{67,-13,26}, -{67,-13,27}, -{67,-13,28}, -{67,-13,29}, -{67,-13,30}, -{67,-13,31}, -{67,-13,32}, -{67,-13,33}, -{67,-13,34}, -{67,-13,35}, -{67,-13,36}, -{67,-13,37}, -{67,-13,38}, -{67,-13,39}, -{67,-13,40}, -{67,-13,41}, -{67,-13,42}, -{67,-13,43}, -{67,-13,44}, -{67,-13,45}, -{67,-13,46}, -{67,-13,47}, -{67,-13,48}, -{67,-13,49}, -{67,-13,50}, -{67,-13,51}, -{67,-13,52}, -{67,-13,53}, -{67,-13,54}, -{67,-13,55}, -{67,-13,56}, -{67,-13,57}, -{67,-13,58}, -{67,-13,59}, -{67,-13,60}, -{67,-13,61}, -{67,-13,62}, -{67,-13,63}, -{67,-13,64}, -{67,-13,65}, -{67,-13,66}, -{67,-13,67}, -{67,-13,68}, -{67,-13,69}, -{67,-12,-45}, -{67,-12,-44}, -{67,-12,-43}, -{67,-12,-42}, -{67,-12,-41}, -{67,-12,-40}, -{67,-12,-39}, -{67,-12,-38}, -{67,-12,-37}, -{67,-12,-36}, -{67,-12,-35}, -{67,-12,-34}, -{67,-12,-33}, -{67,-12,-32}, -{67,-12,-31}, -{67,-12,-30}, -{67,-12,-29}, -{67,-12,-28}, -{67,-12,-27}, -{67,-12,-26}, -{67,-12,-25}, -{67,-12,-24}, -{67,-12,-23}, -{67,-12,-22}, -{67,-12,-21}, -{67,-12,-20}, -{67,-12,-19}, -{67,-12,-18}, -{67,-12,-17}, -{67,-12,-16}, -{67,-12,-15}, -{67,-12,-14}, -{67,-12,-13}, -{67,-12,-12}, -{67,-12,-11}, -{67,-12,-10}, -{67,-12,-9}, -{67,-12,-8}, -{67,-12,-7}, -{67,-12,-6}, -{67,-12,-5}, -{67,-12,-4}, -{67,-12,-3}, -{67,-12,-2}, -{67,-12,-1}, -{67,-12,0}, -{67,-12,1}, -{67,-12,2}, -{67,-12,3}, -{67,-12,4}, -{67,-12,5}, -{67,-12,6}, -{67,-12,7}, -{67,-12,8}, -{67,-12,9}, -{67,-12,10}, -{67,-12,11}, -{67,-12,12}, -{67,-12,13}, -{67,-12,14}, -{67,-12,15}, -{67,-12,16}, -{67,-12,17}, -{67,-12,18}, -{67,-12,19}, -{67,-12,20}, -{67,-12,21}, -{67,-12,22}, -{67,-12,23}, -{67,-12,24}, -{67,-12,25}, -{67,-12,26}, -{67,-12,27}, -{67,-12,28}, -{67,-12,29}, -{67,-12,30}, -{67,-12,31}, -{67,-12,32}, -{67,-12,33}, -{67,-12,34}, -{67,-12,35}, -{67,-12,36}, -{67,-12,37}, -{67,-12,38}, -{67,-12,39}, -{67,-12,40}, -{67,-12,41}, -{67,-12,42}, -{67,-12,43}, -{67,-12,44}, -{67,-12,45}, -{67,-12,46}, -{67,-12,47}, -{67,-12,48}, -{67,-12,49}, -{67,-12,50}, -{67,-12,51}, -{67,-12,52}, -{67,-12,53}, -{67,-12,54}, -{67,-12,55}, -{67,-12,56}, -{67,-12,57}, -{67,-12,58}, -{67,-12,59}, -{67,-12,60}, -{67,-12,61}, -{67,-12,62}, -{67,-12,63}, -{67,-12,64}, -{67,-12,65}, -{67,-12,66}, -{67,-12,67}, -{67,-12,68}, -{67,-12,69}, -{67,-11,-46}, -{67,-11,-45}, -{67,-11,-44}, -{67,-11,-43}, -{67,-11,-42}, -{67,-11,-41}, -{67,-11,-40}, -{67,-11,-39}, -{67,-11,-38}, -{67,-11,-37}, -{67,-11,-36}, -{67,-11,-35}, -{67,-11,-34}, -{67,-11,-33}, -{67,-11,-32}, -{67,-11,-31}, -{67,-11,-30}, -{67,-11,-29}, -{67,-11,-28}, -{67,-11,-27}, -{67,-11,-26}, -{67,-11,-25}, -{67,-11,-24}, -{67,-11,-23}, -{67,-11,-22}, -{67,-11,-21}, -{67,-11,-20}, -{67,-11,-19}, -{67,-11,-18}, -{67,-11,-17}, -{67,-11,-16}, -{67,-11,-15}, -{67,-11,-14}, -{67,-11,-13}, -{67,-11,-12}, -{67,-11,-11}, -{67,-11,-10}, -{67,-11,-9}, -{67,-11,-8}, -{67,-11,-7}, -{67,-11,-6}, -{67,-11,-5}, -{67,-11,-4}, -{67,-11,-3}, -{67,-11,-2}, -{67,-11,-1}, -{67,-11,0}, -{67,-11,1}, -{67,-11,2}, -{67,-11,3}, -{67,-11,4}, -{67,-11,5}, -{67,-11,6}, -{67,-11,7}, -{67,-11,8}, -{67,-11,9}, -{67,-11,10}, -{67,-11,11}, -{67,-11,12}, -{67,-11,13}, -{67,-11,14}, -{67,-11,15}, -{67,-11,16}, -{67,-11,17}, -{67,-11,18}, -{67,-11,19}, -{67,-11,20}, -{67,-11,21}, -{67,-11,22}, -{67,-11,23}, -{67,-11,24}, -{67,-11,25}, -{67,-11,26}, -{67,-11,27}, -{67,-11,28}, -{67,-11,29}, -{67,-11,30}, -{67,-11,31}, -{67,-11,32}, -{67,-11,33}, -{67,-11,34}, -{67,-11,35}, -{67,-11,36}, -{67,-11,37}, -{67,-11,38}, -{67,-11,39}, -{67,-11,40}, -{67,-11,41}, -{67,-11,42}, -{67,-11,43}, -{67,-11,44}, -{67,-11,45}, -{67,-11,46}, -{67,-11,47}, -{67,-11,48}, -{67,-11,49}, -{67,-11,50}, -{67,-11,51}, -{67,-11,52}, -{67,-11,53}, -{67,-11,54}, -{67,-11,55}, -{67,-11,56}, -{67,-11,57}, -{67,-11,58}, -{67,-11,59}, -{67,-11,60}, -{67,-11,61}, -{67,-11,62}, -{67,-11,63}, -{67,-11,64}, -{67,-11,65}, -{67,-11,66}, -{67,-11,67}, -{67,-11,68}, -{67,-11,69}, -{67,-10,-48}, -{67,-10,-47}, -{67,-10,-46}, -{67,-10,-45}, -{67,-10,-44}, -{67,-10,-43}, -{67,-10,-42}, -{67,-10,-41}, -{67,-10,-40}, -{67,-10,-39}, -{67,-10,-38}, -{67,-10,-37}, -{67,-10,-36}, -{67,-10,-35}, -{67,-10,-34}, -{67,-10,-33}, -{67,-10,-32}, -{67,-10,-31}, -{67,-10,-30}, -{67,-10,-29}, -{67,-10,-28}, -{67,-10,-27}, -{67,-10,-26}, -{67,-10,-25}, -{67,-10,-24}, -{67,-10,-23}, -{67,-10,-22}, -{67,-10,-21}, -{67,-10,-20}, -{67,-10,-19}, -{67,-10,-18}, -{67,-10,-17}, -{67,-10,-16}, -{67,-10,-15}, -{67,-10,-14}, -{67,-10,-13}, -{67,-10,-12}, -{67,-10,-11}, -{67,-10,-10}, -{67,-10,-9}, -{67,-10,-8}, -{67,-10,-7}, -{67,-10,-6}, -{67,-10,-5}, -{67,-10,-4}, -{67,-10,-3}, -{67,-10,-2}, -{67,-10,-1}, -{67,-10,0}, -{67,-10,1}, -{67,-10,2}, -{67,-10,3}, -{67,-10,4}, -{67,-10,5}, -{67,-10,6}, -{67,-10,7}, -{67,-10,8}, -{67,-10,9}, -{67,-10,10}, -{67,-10,11}, -{67,-10,12}, -{67,-10,13}, -{67,-10,14}, -{67,-10,15}, -{67,-10,16}, -{67,-10,17}, -{67,-10,18}, -{67,-10,19}, -{67,-10,20}, -{67,-10,21}, -{67,-10,22}, -{67,-10,23}, -{67,-10,24}, -{67,-10,25}, -{67,-10,26}, -{67,-10,27}, -{67,-10,28}, -{67,-10,29}, -{67,-10,30}, -{67,-10,31}, -{67,-10,32}, -{67,-10,33}, -{67,-10,34}, -{67,-10,35}, -{67,-10,36}, -{67,-10,37}, -{67,-10,38}, -{67,-10,39}, -{67,-10,40}, -{67,-10,41}, -{67,-10,42}, -{67,-10,43}, -{67,-10,44}, -{67,-10,45}, -{67,-10,46}, -{67,-10,47}, -{67,-10,48}, -{67,-10,49}, -{67,-10,50}, -{67,-10,51}, -{67,-10,52}, -{67,-10,53}, -{67,-10,54}, -{67,-10,55}, -{67,-10,56}, -{67,-10,57}, -{67,-10,58}, -{67,-10,59}, -{67,-10,60}, -{67,-10,61}, -{67,-10,62}, -{67,-10,63}, -{67,-10,64}, -{67,-10,65}, -{67,-10,66}, -{67,-10,67}, -{67,-10,68}, -{67,-10,69}, -{67,-9,-49}, -{67,-9,-48}, -{67,-9,-47}, -{67,-9,-46}, -{67,-9,-45}, -{67,-9,-44}, -{67,-9,-43}, -{67,-9,-42}, -{67,-9,-41}, -{67,-9,-40}, -{67,-9,-39}, -{67,-9,-38}, -{67,-9,-37}, -{67,-9,-36}, -{67,-9,-35}, -{67,-9,-34}, -{67,-9,-33}, -{67,-9,-32}, -{67,-9,-31}, -{67,-9,-30}, -{67,-9,-29}, -{67,-9,-28}, -{67,-9,-27}, -{67,-9,-26}, -{67,-9,-25}, -{67,-9,-24}, -{67,-9,-23}, -{67,-9,-22}, -{67,-9,-21}, -{67,-9,-20}, -{67,-9,-19}, -{67,-9,-18}, -{67,-9,-17}, -{67,-9,-16}, -{67,-9,-15}, -{67,-9,-14}, -{67,-9,-13}, -{67,-9,-12}, -{67,-9,-11}, -{67,-9,-10}, -{67,-9,-9}, -{67,-9,-8}, -{67,-9,-7}, -{67,-9,-6}, -{67,-9,-5}, -{67,-9,-4}, -{67,-9,-3}, -{67,-9,-2}, -{67,-9,-1}, -{67,-9,0}, -{67,-9,1}, -{67,-9,2}, -{67,-9,3}, -{67,-9,4}, -{67,-9,5}, -{67,-9,6}, -{67,-9,7}, -{67,-9,8}, -{67,-9,9}, -{67,-9,10}, -{67,-9,11}, -{67,-9,12}, -{67,-9,13}, -{67,-9,14}, -{67,-9,15}, -{67,-9,16}, -{67,-9,17}, -{67,-9,18}, -{67,-9,19}, -{67,-9,20}, -{67,-9,21}, -{67,-9,22}, -{67,-9,23}, -{67,-9,24}, -{67,-9,25}, -{67,-9,26}, -{67,-9,27}, -{67,-9,28}, -{67,-9,29}, -{67,-9,30}, -{67,-9,31}, -{67,-9,32}, -{67,-9,33}, -{67,-9,34}, -{67,-9,35}, -{67,-9,36}, -{67,-9,37}, -{67,-9,38}, -{67,-9,39}, -{67,-9,40}, -{67,-9,41}, -{67,-9,42}, -{67,-9,43}, -{67,-9,44}, -{67,-9,45}, -{67,-9,46}, -{67,-9,47}, -{67,-9,48}, -{67,-9,49}, -{67,-9,50}, -{67,-9,51}, -{67,-9,52}, -{67,-9,53}, -{67,-9,54}, -{67,-9,55}, -{67,-9,56}, -{67,-9,57}, -{67,-9,58}, -{67,-9,59}, -{67,-9,60}, -{67,-9,61}, -{67,-9,62}, -{67,-9,63}, -{67,-9,64}, -{67,-9,65}, -{67,-9,66}, -{67,-9,67}, -{67,-9,68}, -{67,-9,69}, -{67,-8,-50}, -{67,-8,-49}, -{67,-8,-48}, -{67,-8,-47}, -{67,-8,-46}, -{67,-8,-45}, -{67,-8,-44}, -{67,-8,-43}, -{67,-8,-42}, -{67,-8,-41}, -{67,-8,-40}, -{67,-8,-39}, -{67,-8,-38}, -{67,-8,-37}, -{67,-8,-36}, -{67,-8,-35}, -{67,-8,-34}, -{67,-8,-33}, -{67,-8,-32}, -{67,-8,-31}, -{67,-8,-30}, -{67,-8,-29}, -{67,-8,-28}, -{67,-8,-27}, -{67,-8,-26}, -{67,-8,-25}, -{67,-8,-24}, -{67,-8,-23}, -{67,-8,-22}, -{67,-8,-21}, -{67,-8,-20}, -{67,-8,-19}, -{67,-8,-18}, -{67,-8,-17}, -{67,-8,-16}, -{67,-8,-15}, -{67,-8,-14}, -{67,-8,-13}, -{67,-8,-12}, -{67,-8,-11}, -{67,-8,-10}, -{67,-8,-9}, -{67,-8,-8}, -{67,-8,-7}, -{67,-8,-6}, -{67,-8,-5}, -{67,-8,-4}, -{67,-8,-3}, -{67,-8,-2}, -{67,-8,-1}, -{67,-8,0}, -{67,-8,1}, -{67,-8,2}, -{67,-8,3}, -{67,-8,4}, -{67,-8,5}, -{67,-8,6}, -{67,-8,7}, -{67,-8,8}, -{67,-8,9}, -{67,-8,10}, -{67,-8,11}, -{67,-8,12}, -{67,-8,13}, -{67,-8,14}, -{67,-8,15}, -{67,-8,16}, -{67,-8,17}, -{67,-8,18}, -{67,-8,19}, -{67,-8,20}, -{67,-8,21}, -{67,-8,22}, -{67,-8,23}, -{67,-8,24}, -{67,-8,25}, -{67,-8,26}, -{67,-8,27}, -{67,-8,28}, -{67,-8,29}, -{67,-8,30}, -{67,-8,31}, -{67,-8,32}, -{67,-8,33}, -{67,-8,34}, -{67,-8,35}, -{67,-8,36}, -{67,-8,37}, -{67,-8,38}, -{67,-8,39}, -{67,-8,40}, -{67,-8,41}, -{67,-8,42}, -{67,-8,43}, -{67,-8,44}, -{67,-8,45}, -{67,-8,46}, -{67,-8,47}, -{67,-8,48}, -{67,-8,49}, -{67,-8,50}, -{67,-8,51}, -{67,-8,52}, -{67,-8,53}, -{67,-8,54}, -{67,-8,55}, -{67,-8,56}, -{67,-8,57}, -{67,-8,58}, -{67,-8,59}, -{67,-8,60}, -{67,-8,61}, -{67,-8,62}, -{67,-8,63}, -{67,-8,64}, -{67,-8,65}, -{67,-8,66}, -{67,-8,67}, -{67,-8,68}, -{67,-8,69}, -{67,-8,70}, -{67,-7,-51}, -{67,-7,-50}, -{67,-7,-49}, -{67,-7,-48}, -{67,-7,-47}, -{67,-7,-46}, -{67,-7,-45}, -{67,-7,-44}, -{67,-7,-43}, -{67,-7,-42}, -{67,-7,-41}, -{67,-7,-40}, -{67,-7,-39}, -{67,-7,-38}, -{67,-7,-37}, -{67,-7,-36}, -{67,-7,-35}, -{67,-7,-34}, -{67,-7,-33}, -{67,-7,-32}, -{67,-7,-31}, -{67,-7,-30}, -{67,-7,-29}, -{67,-7,-28}, -{67,-7,-27}, -{67,-7,-26}, -{67,-7,-25}, -{67,-7,-24}, -{67,-7,-23}, -{67,-7,-22}, -{67,-7,-21}, -{67,-7,-20}, -{67,-7,-19}, -{67,-7,-18}, -{67,-7,-17}, -{67,-7,-16}, -{67,-7,-15}, -{67,-7,-14}, -{67,-7,-13}, -{67,-7,-12}, -{67,-7,-11}, -{67,-7,-10}, -{67,-7,-9}, -{67,-7,-8}, -{67,-7,-7}, -{67,-7,-6}, -{67,-7,-5}, -{67,-7,-4}, -{67,-7,-3}, -{67,-7,-2}, -{67,-7,-1}, -{67,-7,0}, -{67,-7,1}, -{67,-7,2}, -{67,-7,3}, -{67,-7,4}, -{67,-7,5}, -{67,-7,6}, -{67,-7,7}, -{67,-7,8}, -{67,-7,9}, -{67,-7,10}, -{67,-7,11}, -{67,-7,12}, -{67,-7,13}, -{67,-7,14}, -{67,-7,15}, -{67,-7,16}, -{67,-7,17}, -{67,-7,18}, -{67,-7,19}, -{67,-7,20}, -{67,-7,21}, -{67,-7,22}, -{67,-7,23}, -{67,-7,24}, -{67,-7,25}, -{67,-7,26}, -{67,-7,27}, -{67,-7,28}, -{67,-7,29}, -{67,-7,30}, -{67,-7,31}, -{67,-7,32}, -{67,-7,33}, -{67,-7,34}, -{67,-7,35}, -{67,-7,36}, -{67,-7,37}, -{67,-7,38}, -{67,-7,39}, -{67,-7,40}, -{67,-7,41}, -{67,-7,42}, -{67,-7,43}, -{67,-7,44}, -{67,-7,45}, -{67,-7,46}, -{67,-7,47}, -{67,-7,48}, -{67,-7,49}, -{67,-7,50}, -{67,-7,51}, -{67,-7,52}, -{67,-7,53}, -{67,-7,54}, -{67,-7,55}, -{67,-7,56}, -{67,-7,57}, -{67,-7,58}, -{67,-7,59}, -{67,-7,60}, -{67,-7,61}, -{67,-7,62}, -{67,-7,63}, -{67,-7,64}, -{67,-7,65}, -{67,-7,66}, -{67,-7,67}, -{67,-7,68}, -{67,-7,69}, -{67,-7,70}, -{67,-6,-51}, -{67,-6,-50}, -{67,-6,-49}, -{67,-6,-48}, -{67,-6,-47}, -{67,-6,-46}, -{67,-6,-45}, -{67,-6,-44}, -{67,-6,-43}, -{67,-6,-42}, -{67,-6,-41}, -{67,-6,-40}, -{67,-6,-39}, -{67,-6,-38}, -{67,-6,-37}, -{67,-6,-36}, -{67,-6,-35}, -{67,-6,-34}, -{67,-6,-33}, -{67,-6,-32}, -{67,-6,-31}, -{67,-6,-30}, -{67,-6,-29}, -{67,-6,-28}, -{67,-6,-27}, -{67,-6,-26}, -{67,-6,-25}, -{67,-6,-24}, -{67,-6,-23}, -{67,-6,-22}, -{67,-6,-21}, -{67,-6,-20}, -{67,-6,-19}, -{67,-6,-18}, -{67,-6,-17}, -{67,-6,-16}, -{67,-6,-15}, -{67,-6,-14}, -{67,-6,-13}, -{67,-6,-12}, -{67,-6,-11}, -{67,-6,-10}, -{67,-6,-9}, -{67,-6,-8}, -{67,-6,-7}, -{67,-6,-6}, -{67,-6,-5}, -{67,-6,-4}, -{67,-6,-3}, -{67,-6,-2}, -{67,-6,-1}, -{67,-6,0}, -{67,-6,1}, -{67,-6,2}, -{67,-6,3}, -{67,-6,4}, -{67,-6,5}, -{67,-6,6}, -{67,-6,7}, -{67,-6,8}, -{67,-6,9}, -{67,-6,10}, -{67,-6,11}, -{67,-6,12}, -{67,-6,13}, -{67,-6,14}, -{67,-6,15}, -{67,-6,16}, -{67,-6,17}, -{67,-6,18}, -{67,-6,19}, -{67,-6,20}, -{67,-6,21}, -{67,-6,22}, -{67,-6,23}, -{67,-6,24}, -{67,-6,25}, -{67,-6,26}, -{67,-6,27}, -{67,-6,28}, -{67,-6,29}, -{67,-6,30}, -{67,-6,31}, -{67,-6,32}, -{67,-6,33}, -{67,-6,34}, -{67,-6,35}, -{67,-6,36}, -{67,-6,37}, -{67,-6,38}, -{67,-6,39}, -{67,-6,40}, -{67,-6,41}, -{67,-6,42}, -{67,-6,43}, -{67,-6,44}, -{67,-6,45}, -{67,-6,46}, -{67,-6,47}, -{67,-6,48}, -{67,-6,49}, -{67,-6,50}, -{67,-6,51}, -{67,-6,52}, -{67,-6,53}, -{67,-6,54}, -{67,-6,55}, -{67,-6,56}, -{67,-6,57}, -{67,-6,58}, -{67,-6,59}, -{67,-6,60}, -{67,-6,61}, -{67,-6,62}, -{67,-6,63}, -{67,-6,64}, -{67,-6,65}, -{67,-6,66}, -{67,-6,67}, -{67,-6,68}, -{67,-6,69}, -{67,-6,70}, -{67,-5,-51}, -{67,-5,-50}, -{67,-5,-49}, -{67,-5,-48}, -{67,-5,-47}, -{67,-5,-46}, -{67,-5,-45}, -{67,-5,-44}, -{67,-5,-43}, -{67,-5,-42}, -{67,-5,-41}, -{67,-5,-40}, -{67,-5,-39}, -{67,-5,-38}, -{67,-5,-37}, -{67,-5,-36}, -{67,-5,-35}, -{67,-5,-34}, -{67,-5,-33}, -{67,-5,-32}, -{67,-5,-31}, -{67,-5,-30}, -{67,-5,-29}, -{67,-5,-28}, -{67,-5,-27}, -{67,-5,-26}, -{67,-5,-25}, -{67,-5,-24}, -{67,-5,-23}, -{67,-5,-22}, -{67,-5,-21}, -{67,-5,-20}, -{67,-5,-19}, -{67,-5,-18}, -{67,-5,-17}, -{67,-5,-16}, -{67,-5,-15}, -{67,-5,-14}, -{67,-5,-13}, -{67,-5,-12}, -{67,-5,-11}, -{67,-5,-10}, -{67,-5,-9}, -{67,-5,-8}, -{67,-5,-7}, -{67,-5,-6}, -{67,-5,-5}, -{67,-5,-4}, -{67,-5,-3}, -{67,-5,-2}, -{67,-5,-1}, -{67,-5,0}, -{67,-5,1}, -{67,-5,2}, -{67,-5,3}, -{67,-5,4}, -{67,-5,5}, -{67,-5,6}, -{67,-5,7}, -{67,-5,8}, -{67,-5,9}, -{67,-5,10}, -{67,-5,11}, -{67,-5,12}, -{67,-5,13}, -{67,-5,14}, -{67,-5,15}, -{67,-5,16}, -{67,-5,17}, -{67,-5,18}, -{67,-5,19}, -{67,-5,20}, -{67,-5,21}, -{67,-5,22}, -{67,-5,23}, -{67,-5,24}, -{67,-5,25}, -{67,-5,26}, -{67,-5,27}, -{67,-5,28}, -{67,-5,29}, -{67,-5,30}, -{67,-5,31}, -{67,-5,32}, -{67,-5,33}, -{67,-5,34}, -{67,-5,35}, -{67,-5,36}, -{67,-5,37}, -{67,-5,38}, -{67,-5,39}, -{67,-5,40}, -{67,-5,41}, -{67,-5,42}, -{67,-5,43}, -{67,-5,44}, -{67,-5,45}, -{67,-5,46}, -{67,-5,47}, -{67,-5,48}, -{67,-5,49}, -{67,-5,50}, -{67,-5,51}, -{67,-5,52}, -{67,-5,53}, -{67,-5,54}, -{67,-5,55}, -{67,-5,56}, -{67,-5,57}, -{67,-5,58}, -{67,-5,59}, -{67,-5,60}, -{67,-5,61}, -{67,-5,62}, -{67,-5,63}, -{67,-5,64}, -{67,-5,65}, -{67,-5,66}, -{67,-5,67}, -{67,-5,68}, -{67,-5,69}, -{67,-5,70}, -{67,-4,-51}, -{67,-4,-50}, -{67,-4,-49}, -{67,-4,-48}, -{67,-4,-47}, -{67,-4,-46}, -{67,-4,-45}, -{67,-4,-44}, -{67,-4,-43}, -{67,-4,-42}, -{67,-4,-41}, -{67,-4,-40}, -{67,-4,-39}, -{67,-4,-38}, -{67,-4,-37}, -{67,-4,-36}, -{67,-4,-35}, -{67,-4,-34}, -{67,-4,-33}, -{67,-4,-32}, -{67,-4,-31}, -{67,-4,-30}, -{67,-4,-29}, -{67,-4,-28}, -{67,-4,-27}, -{67,-4,-26}, -{67,-4,-25}, -{67,-4,-24}, -{67,-4,-23}, -{67,-4,-22}, -{67,-4,-21}, -{67,-4,-20}, -{67,-4,-19}, -{67,-4,-18}, -{67,-4,-17}, -{67,-4,-16}, -{67,-4,-15}, -{67,-4,-14}, -{67,-4,-13}, -{67,-4,-12}, -{67,-4,-11}, -{67,-4,-10}, -{67,-4,-9}, -{67,-4,-8}, -{67,-4,-7}, -{67,-4,-6}, -{67,-4,-5}, -{67,-4,-4}, -{67,-4,-3}, -{67,-4,-2}, -{67,-4,-1}, -{67,-4,0}, -{67,-4,1}, -{67,-4,2}, -{67,-4,3}, -{67,-4,4}, -{67,-4,5}, -{67,-4,6}, -{67,-4,7}, -{67,-4,8}, -{67,-4,9}, -{67,-4,10}, -{67,-4,11}, -{67,-4,12}, -{67,-4,13}, -{67,-4,14}, -{67,-4,15}, -{67,-4,16}, -{67,-4,17}, -{67,-4,18}, -{67,-4,19}, -{67,-4,20}, -{67,-4,21}, -{67,-4,22}, -{67,-4,23}, -{67,-4,24}, -{67,-4,25}, -{67,-4,26}, -{67,-4,27}, -{67,-4,28}, -{67,-4,29}, -{67,-4,30}, -{67,-4,31}, -{67,-4,32}, -{67,-4,33}, -{67,-4,34}, -{67,-4,35}, -{67,-4,36}, -{67,-4,37}, -{67,-4,38}, -{67,-4,39}, -{67,-4,40}, -{67,-4,41}, -{67,-4,42}, -{67,-4,43}, -{67,-4,44}, -{67,-4,45}, -{67,-4,46}, -{67,-4,47}, -{67,-4,48}, -{67,-4,49}, -{67,-4,50}, -{67,-4,51}, -{67,-4,52}, -{67,-4,53}, -{67,-4,54}, -{67,-4,55}, -{67,-4,56}, -{67,-4,57}, -{67,-4,58}, -{67,-4,59}, -{67,-4,60}, -{67,-4,61}, -{67,-4,62}, -{67,-4,63}, -{67,-4,64}, -{67,-4,65}, -{67,-4,66}, -{67,-4,67}, -{67,-4,68}, -{67,-4,69}, -{67,-4,70}, -{67,-3,-51}, -{67,-3,-50}, -{67,-3,-49}, -{67,-3,-48}, -{67,-3,-47}, -{67,-3,-46}, -{67,-3,-45}, -{67,-3,-44}, -{67,-3,-43}, -{67,-3,-42}, -{67,-3,-41}, -{67,-3,-40}, -{67,-3,-39}, -{67,-3,-38}, -{67,-3,-37}, -{67,-3,-36}, -{67,-3,-35}, -{67,-3,-34}, -{67,-3,-33}, -{67,-3,-32}, -{67,-3,-31}, -{67,-3,-30}, -{67,-3,-29}, -{67,-3,-28}, -{67,-3,-27}, -{67,-3,-26}, -{67,-3,-25}, -{67,-3,-24}, -{67,-3,-23}, -{67,-3,-22}, -{67,-3,-21}, -{67,-3,-20}, -{67,-3,-19}, -{67,-3,-18}, -{67,-3,-17}, -{67,-3,-16}, -{67,-3,-15}, -{67,-3,-14}, -{67,-3,-13}, -{67,-3,-12}, -{67,-3,-11}, -{67,-3,-10}, -{67,-3,-9}, -{67,-3,-8}, -{67,-3,-7}, -{67,-3,-6}, -{67,-3,-5}, -{67,-3,-4}, -{67,-3,-3}, -{67,-3,-2}, -{67,-3,-1}, -{67,-3,0}, -{67,-3,1}, -{67,-3,2}, -{67,-3,3}, -{67,-3,4}, -{67,-3,5}, -{67,-3,6}, -{67,-3,7}, -{67,-3,8}, -{67,-3,9}, -{67,-3,10}, -{67,-3,11}, -{67,-3,12}, -{67,-3,13}, -{67,-3,14}, -{67,-3,15}, -{67,-3,16}, -{67,-3,17}, -{67,-3,18}, -{67,-3,19}, -{67,-3,20}, -{67,-3,21}, -{67,-3,22}, -{67,-3,23}, -{67,-3,24}, -{67,-3,25}, -{67,-3,26}, -{67,-3,27}, -{67,-3,28}, -{67,-3,29}, -{67,-3,30}, -{67,-3,31}, -{67,-3,32}, -{67,-3,33}, -{67,-3,34}, -{67,-3,35}, -{67,-3,36}, -{67,-3,37}, -{67,-3,38}, -{67,-3,39}, -{67,-3,40}, -{67,-3,41}, -{67,-3,42}, -{67,-3,43}, -{67,-3,44}, -{67,-3,45}, -{67,-3,46}, -{67,-3,47}, -{67,-3,48}, -{67,-3,49}, -{67,-3,50}, -{67,-3,51}, -{67,-3,52}, -{67,-3,53}, -{67,-3,54}, -{67,-3,55}, -{67,-3,56}, -{67,-3,57}, -{67,-3,58}, -{67,-3,59}, -{67,-3,60}, -{67,-3,61}, -{67,-3,62}, -{67,-3,63}, -{67,-3,64}, -{67,-3,65}, -{67,-3,66}, -{67,-3,67}, -{67,-3,68}, -{67,-3,69}, -{67,-3,70}, -{67,-2,-51}, -{67,-2,-50}, -{67,-2,-49}, -{67,-2,-48}, -{67,-2,-47}, -{67,-2,-46}, -{67,-2,-45}, -{67,-2,-44}, -{67,-2,-43}, -{67,-2,-42}, -{67,-2,-41}, -{67,-2,-40}, -{67,-2,-39}, -{67,-2,-38}, -{67,-2,-37}, -{67,-2,-36}, -{67,-2,-35}, -{67,-2,-34}, -{67,-2,-33}, -{67,-2,-32}, -{67,-2,-31}, -{67,-2,-30}, -{67,-2,-29}, -{67,-2,-28}, -{67,-2,-27}, -{67,-2,-26}, -{67,-2,-25}, -{67,-2,-24}, -{67,-2,-23}, -{67,-2,-22}, -{67,-2,-21}, -{67,-2,-20}, -{67,-2,-19}, -{67,-2,-18}, -{67,-2,-17}, -{67,-2,-16}, -{67,-2,-15}, -{67,-2,-14}, -{67,-2,-13}, -{67,-2,-12}, -{67,-2,-11}, -{67,-2,-10}, -{67,-2,-9}, -{67,-2,-8}, -{67,-2,-7}, -{67,-2,-6}, -{67,-2,-5}, -{67,-2,-4}, -{67,-2,-3}, -{67,-2,-2}, -{67,-2,-1}, -{67,-2,0}, -{67,-2,1}, -{67,-2,2}, -{67,-2,3}, -{67,-2,4}, -{67,-2,5}, -{67,-2,6}, -{67,-2,7}, -{67,-2,8}, -{67,-2,9}, -{67,-2,10}, -{67,-2,11}, -{67,-2,12}, -{67,-2,13}, -{67,-2,14}, -{67,-2,15}, -{67,-2,16}, -{67,-2,17}, -{67,-2,18}, -{67,-2,19}, -{67,-2,20}, -{67,-2,21}, -{67,-2,22}, -{67,-2,23}, -{67,-2,24}, -{67,-2,25}, -{67,-2,26}, -{67,-2,27}, -{67,-2,28}, -{67,-2,29}, -{67,-2,30}, -{67,-2,31}, -{67,-2,32}, -{67,-2,33}, -{67,-2,34}, -{67,-2,35}, -{67,-2,36}, -{67,-2,37}, -{67,-2,38}, -{67,-2,39}, -{67,-2,40}, -{67,-2,41}, -{67,-2,42}, -{67,-2,43}, -{67,-2,44}, -{67,-2,45}, -{67,-2,46}, -{67,-2,47}, -{67,-2,48}, -{67,-2,49}, -{67,-2,50}, -{67,-2,51}, -{67,-2,52}, -{67,-2,53}, -{67,-2,54}, -{67,-2,55}, -{67,-2,56}, -{67,-2,57}, -{67,-2,58}, -{67,-2,59}, -{67,-2,60}, -{67,-2,61}, -{67,-2,62}, -{67,-2,63}, -{67,-2,64}, -{67,-2,65}, -{67,-2,66}, -{67,-2,67}, -{67,-2,68}, -{67,-2,69}, -{67,-2,70}, -{67,-1,-51}, -{67,-1,-50}, -{67,-1,-49}, -{67,-1,-48}, -{67,-1,-47}, -{67,-1,-46}, -{67,-1,-45}, -{67,-1,-44}, -{67,-1,-43}, -{67,-1,-42}, -{67,-1,-41}, -{67,-1,-40}, -{67,-1,-39}, -{67,-1,-38}, -{67,-1,-37}, -{67,-1,-36}, -{67,-1,-35}, -{67,-1,-34}, -{67,-1,-33}, -{67,-1,-32}, -{67,-1,-31}, -{67,-1,-30}, -{67,-1,-29}, -{67,-1,-28}, -{67,-1,-27}, -{67,-1,-26}, -{67,-1,-25}, -{67,-1,-24}, -{67,-1,-23}, -{67,-1,-22}, -{67,-1,-21}, -{67,-1,-20}, -{67,-1,-19}, -{67,-1,-18}, -{67,-1,-17}, -{67,-1,-16}, -{67,-1,-15}, -{67,-1,-14}, -{67,-1,-13}, -{67,-1,-12}, -{67,-1,-11}, -{67,-1,-10}, -{67,-1,-9}, -{67,-1,-8}, -{67,-1,-7}, -{67,-1,-6}, -{67,-1,-5}, -{67,-1,-4}, -{67,-1,-3}, -{67,-1,-2}, -{67,-1,-1}, -{67,-1,0}, -{67,-1,1}, -{67,-1,2}, -{67,-1,3}, -{67,-1,4}, -{67,-1,5}, -{67,-1,6}, -{67,-1,7}, -{67,-1,8}, -{67,-1,9}, -{67,-1,10}, -{67,-1,11}, -{67,-1,12}, -{67,-1,13}, -{67,-1,14}, -{67,-1,15}, -{67,-1,16}, -{67,-1,17}, -{67,-1,18}, -{67,-1,19}, -{67,-1,20}, -{67,-1,21}, -{67,-1,22}, -{67,-1,23}, -{67,-1,24}, -{67,-1,25}, -{67,-1,26}, -{67,-1,27}, -{67,-1,28}, -{67,-1,29}, -{67,-1,30}, -{67,-1,31}, -{67,-1,32}, -{67,-1,33}, -{67,-1,34}, -{67,-1,35}, -{67,-1,36}, -{67,-1,37}, -{67,-1,38}, -{67,-1,39}, -{67,-1,40}, -{67,-1,41}, -{67,-1,42}, -{67,-1,43}, -{67,-1,44}, -{67,-1,45}, -{67,-1,46}, -{67,-1,47}, -{67,-1,48}, -{67,-1,49}, -{67,-1,50}, -{67,-1,51}, -{67,-1,52}, -{67,-1,53}, -{67,-1,54}, -{67,-1,55}, -{67,-1,56}, -{67,-1,57}, -{67,-1,58}, -{67,-1,59}, -{67,-1,60}, -{67,-1,61}, -{67,-1,62}, -{67,-1,63}, -{67,-1,64}, -{67,-1,65}, -{67,-1,66}, -{67,-1,67}, -{67,-1,68}, -{67,-1,69}, -{67,-1,70}, -{67,0,-51}, -{67,0,-50}, -{67,0,-49}, -{67,0,-48}, -{67,0,-47}, -{67,0,-46}, -{67,0,-45}, -{67,0,-44}, -{67,0,-43}, -{67,0,-42}, -{67,0,-41}, -{67,0,-40}, -{67,0,-39}, -{67,0,-38}, -{67,0,-37}, -{67,0,-36}, -{67,0,-35}, -{67,0,-34}, -{67,0,-33}, -{67,0,-32}, -{67,0,-31}, -{67,0,-30}, -{67,0,-29}, -{67,0,-28}, -{67,0,-27}, -{67,0,-26}, -{67,0,-25}, -{67,0,-24}, -{67,0,-23}, -{67,0,-22}, -{67,0,-21}, -{67,0,-20}, -{67,0,-19}, -{67,0,-18}, -{67,0,-17}, -{67,0,-16}, -{67,0,-15}, -{67,0,-14}, -{67,0,-13}, -{67,0,-12}, -{67,0,-11}, -{67,0,-10}, -{67,0,-9}, -{67,0,-8}, -{67,0,-7}, -{67,0,-6}, -{67,0,-5}, -{67,0,-4}, -{67,0,-3}, -{67,0,-2}, -{67,0,-1}, -{67,0,0}, -{67,0,1}, -{67,0,2}, -{67,0,3}, -{67,0,4}, -{67,0,5}, -{67,0,6}, -{67,0,7}, -{67,0,8}, -{67,0,9}, -{67,0,10}, -{67,0,11}, -{67,0,12}, -{67,0,13}, -{67,0,14}, -{67,0,15}, -{67,0,16}, -{67,0,17}, -{67,0,18}, -{67,0,19}, -{67,0,20}, -{67,0,21}, -{67,0,22}, -{67,0,23}, -{67,0,24}, -{67,0,25}, -{67,0,26}, -{67,0,27}, -{67,0,28}, -{67,0,29}, -{67,0,30}, -{67,0,31}, -{67,0,32}, -{67,0,33}, -{67,0,34}, -{67,0,35}, -{67,0,36}, -{67,0,37}, -{67,0,38}, -{67,0,39}, -{67,0,40}, -{67,0,41}, -{67,0,42}, -{67,0,43}, -{67,0,44}, -{67,0,45}, -{67,0,46}, -{67,0,47}, -{67,0,48}, -{67,0,49}, -{67,0,50}, -{67,0,51}, -{67,0,52}, -{67,0,53}, -{67,0,54}, -{67,0,55}, -{67,0,56}, -{67,0,57}, -{67,0,58}, -{67,0,59}, -{67,0,60}, -{67,0,61}, -{67,0,62}, -{67,0,63}, -{67,0,64}, -{67,0,65}, -{67,0,66}, -{67,0,67}, -{67,0,68}, -{67,0,69}, -{67,0,70}, -{67,1,-51}, -{67,1,-50}, -{67,1,-49}, -{67,1,-48}, -{67,1,-47}, -{67,1,-46}, -{67,1,-45}, -{67,1,-44}, -{67,1,-43}, -{67,1,-42}, -{67,1,-41}, -{67,1,-40}, -{67,1,-39}, -{67,1,-38}, -{67,1,-37}, -{67,1,-36}, -{67,1,-35}, -{67,1,-34}, -{67,1,-33}, -{67,1,-32}, -{67,1,-31}, -{67,1,-30}, -{67,1,-29}, -{67,1,-28}, -{67,1,-27}, -{67,1,-26}, -{67,1,-25}, -{67,1,-24}, -{67,1,-23}, -{67,1,-22}, -{67,1,-21}, -{67,1,-20}, -{67,1,-19}, -{67,1,-18}, -{67,1,-17}, -{67,1,-16}, -{67,1,-15}, -{67,1,-14}, -{67,1,-13}, -{67,1,-12}, -{67,1,-11}, -{67,1,-10}, -{67,1,-9}, -{67,1,-8}, -{67,1,-7}, -{67,1,-6}, -{67,1,-5}, -{67,1,-4}, -{67,1,-3}, -{67,1,-2}, -{67,1,-1}, -{67,1,0}, -{67,1,1}, -{67,1,2}, -{67,1,3}, -{67,1,4}, -{67,1,5}, -{67,1,6}, -{67,1,7}, -{67,1,8}, -{67,1,9}, -{67,1,10}, -{67,1,11}, -{67,1,12}, -{67,1,13}, -{67,1,14}, -{67,1,15}, -{67,1,16}, -{67,1,17}, -{67,1,18}, -{67,1,19}, -{67,1,20}, -{67,1,21}, -{67,1,22}, -{67,1,23}, -{67,1,24}, -{67,1,25}, -{67,1,26}, -{67,1,27}, -{67,1,28}, -{67,1,29}, -{67,1,30}, -{67,1,31}, -{67,1,32}, -{67,1,33}, -{67,1,34}, -{67,1,35}, -{67,1,36}, -{67,1,37}, -{67,1,38}, -{67,1,39}, -{67,1,40}, -{67,1,41}, -{67,1,42}, -{67,1,43}, -{67,1,44}, -{67,1,45}, -{67,1,46}, -{67,1,47}, -{67,1,48}, -{67,1,49}, -{67,1,50}, -{67,1,51}, -{67,1,52}, -{67,1,53}, -{67,1,54}, -{67,1,55}, -{67,1,56}, -{67,1,57}, -{67,1,58}, -{67,1,59}, -{67,1,60}, -{67,1,61}, -{67,1,62}, -{67,1,63}, -{67,1,64}, -{67,1,65}, -{67,1,66}, -{67,1,67}, -{67,1,68}, -{67,1,69}, -{67,1,70}, -{67,2,-51}, -{67,2,-50}, -{67,2,-49}, -{67,2,-48}, -{67,2,-47}, -{67,2,-46}, -{67,2,-45}, -{67,2,-44}, -{67,2,-43}, -{67,2,-42}, -{67,2,-41}, -{67,2,-40}, -{67,2,-39}, -{67,2,-38}, -{67,2,-37}, -{67,2,-36}, -{67,2,-35}, -{67,2,-34}, -{67,2,-33}, -{67,2,-32}, -{67,2,-31}, -{67,2,-30}, -{67,2,-29}, -{67,2,-28}, -{67,2,-27}, -{67,2,-26}, -{67,2,-25}, -{67,2,-24}, -{67,2,-23}, -{67,2,-22}, -{67,2,-21}, -{67,2,-20}, -{67,2,-19}, -{67,2,-18}, -{67,2,-17}, -{67,2,-16}, -{67,2,-15}, -{67,2,-14}, -{67,2,-13}, -{67,2,-12}, -{67,2,-11}, -{67,2,-10}, -{67,2,-9}, -{67,2,-8}, -{67,2,-7}, -{67,2,-6}, -{67,2,-5}, -{67,2,-4}, -{67,2,-3}, -{67,2,-2}, -{67,2,-1}, -{67,2,0}, -{67,2,1}, -{67,2,2}, -{67,2,3}, -{67,2,4}, -{67,2,5}, -{67,2,6}, -{67,2,7}, -{67,2,8}, -{67,2,9}, -{67,2,10}, -{67,2,11}, -{67,2,12}, -{67,2,13}, -{67,2,14}, -{67,2,15}, -{67,2,16}, -{67,2,17}, -{67,2,18}, -{67,2,19}, -{67,2,20}, -{67,2,21}, -{67,2,22}, -{67,2,23}, -{67,2,24}, -{67,2,25}, -{67,2,26}, -{67,2,27}, -{67,2,28}, -{67,2,29}, -{67,2,30}, -{67,2,31}, -{67,2,32}, -{67,2,33}, -{67,2,34}, -{67,2,35}, -{67,2,36}, -{67,2,37}, -{67,2,38}, -{67,2,39}, -{67,2,40}, -{67,2,41}, -{67,2,42}, -{67,2,43}, -{67,2,44}, -{67,2,45}, -{67,2,46}, -{67,2,47}, -{67,2,48}, -{67,2,49}, -{67,2,50}, -{67,2,51}, -{67,2,52}, -{67,2,53}, -{67,2,54}, -{67,2,55}, -{67,2,56}, -{67,2,57}, -{67,2,58}, -{67,2,59}, -{67,2,60}, -{67,2,61}, -{67,2,62}, -{67,2,63}, -{67,2,64}, -{67,2,65}, -{67,2,66}, -{67,2,67}, -{67,2,68}, -{67,2,69}, -{67,2,70}, -{67,3,-51}, -{67,3,-50}, -{67,3,-49}, -{67,3,-48}, -{67,3,-47}, -{67,3,-46}, -{67,3,-45}, -{67,3,-44}, -{67,3,-43}, -{67,3,-42}, -{67,3,-41}, -{67,3,-40}, -{67,3,-39}, -{67,3,-38}, -{67,3,-37}, -{67,3,-36}, -{67,3,-35}, -{67,3,-34}, -{67,3,-33}, -{67,3,-32}, -{67,3,-31}, -{67,3,-30}, -{67,3,-29}, -{67,3,-28}, -{67,3,-27}, -{67,3,-26}, -{67,3,-25}, -{67,3,-24}, -{67,3,-23}, -{67,3,-22}, -{67,3,-21}, -{67,3,-20}, -{67,3,-19}, -{67,3,-18}, -{67,3,-17}, -{67,3,-16}, -{67,3,-15}, -{67,3,-14}, -{67,3,-13}, -{67,3,-12}, -{67,3,-11}, -{67,3,-10}, -{67,3,-9}, -{67,3,-8}, -{67,3,-7}, -{67,3,-6}, -{67,3,-5}, -{67,3,-4}, -{67,3,-3}, -{67,3,-2}, -{67,3,-1}, -{67,3,0}, -{67,3,1}, -{67,3,2}, -{67,3,3}, -{67,3,4}, -{67,3,5}, -{67,3,6}, -{67,3,7}, -{67,3,8}, -{67,3,9}, -{67,3,10}, -{67,3,11}, -{67,3,12}, -{67,3,13}, -{67,3,14}, -{67,3,15}, -{67,3,16}, -{67,3,17}, -{67,3,18}, -{67,3,19}, -{67,3,20}, -{67,3,21}, -{67,3,22}, -{67,3,23}, -{67,3,24}, -{67,3,25}, -{67,3,26}, -{67,3,27}, -{67,3,28}, -{67,3,29}, -{67,3,30}, -{67,3,31}, -{67,3,32}, -{67,3,33}, -{67,3,34}, -{67,3,35}, -{67,3,36}, -{67,3,37}, -{67,3,38}, -{67,3,39}, -{67,3,40}, -{67,3,41}, -{67,3,42}, -{67,3,43}, -{67,3,44}, -{67,3,45}, -{67,3,46}, -{67,3,47}, -{67,3,48}, -{67,3,49}, -{67,3,50}, -{67,3,51}, -{67,3,52}, -{67,3,53}, -{67,3,54}, -{67,3,55}, -{67,3,56}, -{67,3,57}, -{67,3,58}, -{67,3,59}, -{67,3,60}, -{67,3,61}, -{67,3,62}, -{67,3,63}, -{67,3,64}, -{67,3,65}, -{67,3,66}, -{67,3,67}, -{67,3,68}, -{67,3,69}, -{67,3,70}, -{67,4,-51}, -{67,4,-50}, -{67,4,-49}, -{67,4,-48}, -{67,4,-47}, -{67,4,-46}, -{67,4,-45}, -{67,4,-44}, -{67,4,-43}, -{67,4,-42}, -{67,4,-41}, -{67,4,-40}, -{67,4,-39}, -{67,4,-38}, -{67,4,-37}, -{67,4,-36}, -{67,4,-35}, -{67,4,-34}, -{67,4,-33}, -{67,4,-32}, -{67,4,-31}, -{67,4,-30}, -{67,4,-29}, -{67,4,-28}, -{67,4,-27}, -{67,4,-26}, -{67,4,-25}, -{67,4,-24}, -{67,4,-23}, -{67,4,-22}, -{67,4,-21}, -{67,4,-20}, -{67,4,-19}, -{67,4,-18}, -{67,4,-17}, -{67,4,-16}, -{67,4,-15}, -{67,4,-14}, -{67,4,-13}, -{67,4,-12}, -{67,4,-11}, -{67,4,-10}, -{67,4,-9}, -{67,4,-8}, -{67,4,-7}, -{67,4,-6}, -{67,4,-5}, -{67,4,-4}, -{67,4,-3}, -{67,4,-2}, -{67,4,-1}, -{67,4,0}, -{67,4,1}, -{67,4,2}, -{67,4,3}, -{67,4,4}, -{67,4,5}, -{67,4,6}, -{67,4,7}, -{67,4,8}, -{67,4,9}, -{67,4,10}, -{67,4,11}, -{67,4,12}, -{67,4,13}, -{67,4,14}, -{67,4,15}, -{67,4,16}, -{67,4,17}, -{67,4,18}, -{67,4,19}, -{67,4,20}, -{67,4,21}, -{67,4,22}, -{67,4,23}, -{67,4,24}, -{67,4,25}, -{67,4,26}, -{67,4,27}, -{67,4,28}, -{67,4,29}, -{67,4,30}, -{67,4,31}, -{67,4,32}, -{67,4,33}, -{67,4,34}, -{67,4,35}, -{67,4,36}, -{67,4,37}, -{67,4,38}, -{67,4,39}, -{67,4,40}, -{67,4,41}, -{67,4,42}, -{67,4,43}, -{67,4,44}, -{67,4,45}, -{67,4,46}, -{67,4,47}, -{67,4,48}, -{67,4,49}, -{67,4,50}, -{67,4,51}, -{67,4,52}, -{67,4,53}, -{67,4,54}, -{67,4,55}, -{67,4,56}, -{67,4,57}, -{67,4,58}, -{67,4,59}, -{67,4,60}, -{67,4,61}, -{67,4,62}, -{67,4,63}, -{67,4,64}, -{67,4,65}, -{67,4,66}, -{67,4,67}, -{67,4,68}, -{67,4,69}, -{67,4,70}, -{67,5,-51}, -{67,5,-50}, -{67,5,-49}, -{67,5,-48}, -{67,5,-47}, -{67,5,-46}, -{67,5,-45}, -{67,5,-44}, -{67,5,-43}, -{67,5,-42}, -{67,5,-41}, -{67,5,-40}, -{67,5,-39}, -{67,5,-38}, -{67,5,-37}, -{67,5,-36}, -{67,5,-35}, -{67,5,-34}, -{67,5,-33}, -{67,5,-32}, -{67,5,-31}, -{67,5,-30}, -{67,5,-29}, -{67,5,-28}, -{67,5,-27}, -{67,5,-26}, -{67,5,-25}, -{67,5,-24}, -{67,5,-23}, -{67,5,-22}, -{67,5,-21}, -{67,5,-20}, -{67,5,-19}, -{67,5,-18}, -{67,5,-17}, -{67,5,-16}, -{67,5,-15}, -{67,5,-14}, -{67,5,-13}, -{67,5,-12}, -{67,5,-11}, -{67,5,-10}, -{67,5,-9}, -{67,5,-8}, -{67,5,-7}, -{67,5,-6}, -{67,5,-5}, -{67,5,-4}, -{67,5,-3}, -{67,5,-2}, -{67,5,-1}, -{67,5,0}, -{67,5,1}, -{67,5,2}, -{67,5,3}, -{67,5,4}, -{67,5,5}, -{67,5,6}, -{67,5,7}, -{67,5,8}, -{67,5,9}, -{67,5,10}, -{67,5,11}, -{67,5,12}, -{67,5,13}, -{67,5,14}, -{67,5,15}, -{67,5,16}, -{67,5,17}, -{67,5,18}, -{67,5,19}, -{67,5,20}, -{67,5,21}, -{67,5,22}, -{67,5,23}, -{67,5,24}, -{67,5,25}, -{67,5,26}, -{67,5,27}, -{67,5,28}, -{67,5,29}, -{67,5,30}, -{67,5,31}, -{67,5,32}, -{67,5,33}, -{67,5,34}, -{67,5,35}, -{67,5,36}, -{67,5,37}, -{67,5,38}, -{67,5,39}, -{67,5,40}, -{67,5,41}, -{67,5,42}, -{67,5,43}, -{67,5,44}, -{67,5,45}, -{67,5,46}, -{67,5,47}, -{67,5,48}, -{67,5,49}, -{67,5,50}, -{67,5,51}, -{67,5,52}, -{67,5,53}, -{67,5,54}, -{67,5,55}, -{67,5,56}, -{67,5,57}, -{67,5,58}, -{67,5,59}, -{67,5,60}, -{67,5,61}, -{67,5,62}, -{67,5,63}, -{67,5,64}, -{67,5,65}, -{67,5,66}, -{67,5,67}, -{67,5,68}, -{67,5,69}, -{67,5,70}, -{67,6,-51}, -{67,6,-50}, -{67,6,-49}, -{67,6,-48}, -{67,6,-47}, -{67,6,-46}, -{67,6,-45}, -{67,6,-44}, -{67,6,-43}, -{67,6,-42}, -{67,6,-41}, -{67,6,-40}, -{67,6,-39}, -{67,6,-38}, -{67,6,-37}, -{67,6,-36}, -{67,6,-35}, -{67,6,-34}, -{67,6,-33}, -{67,6,-32}, -{67,6,-31}, -{67,6,-30}, -{67,6,-29}, -{67,6,-28}, -{67,6,-27}, -{67,6,-26}, -{67,6,-25}, -{67,6,-24}, -{67,6,-23}, -{67,6,-22}, -{67,6,-21}, -{67,6,-20}, -{67,6,-19}, -{67,6,-18}, -{67,6,-17}, -{67,6,-16}, -{67,6,-15}, -{67,6,-14}, -{67,6,-13}, -{67,6,-12}, -{67,6,-11}, -{67,6,-10}, -{67,6,-9}, -{67,6,-8}, -{67,6,-7}, -{67,6,-6}, -{67,6,-5}, -{67,6,-4}, -{67,6,-3}, -{67,6,-2}, -{67,6,-1}, -{67,6,0}, -{67,6,1}, -{67,6,2}, -{67,6,3}, -{67,6,4}, -{67,6,5}, -{67,6,6}, -{67,6,7}, -{67,6,8}, -{67,6,9}, -{67,6,10}, -{67,6,11}, -{67,6,12}, -{67,6,13}, -{67,6,14}, -{67,6,15}, -{67,6,16}, -{67,6,17}, -{67,6,18}, -{67,6,19}, -{67,6,20}, -{67,6,21}, -{67,6,22}, -{67,6,23}, -{67,6,24}, -{67,6,25}, -{67,6,26}, -{67,6,27}, -{67,6,28}, -{67,6,29}, -{67,6,30}, -{67,6,31}, -{67,6,32}, -{67,6,33}, -{67,6,34}, -{67,6,35}, -{67,6,36}, -{67,6,37}, -{67,6,38}, -{67,6,39}, -{67,6,40}, -{67,6,41}, -{67,6,42}, -{67,6,43}, -{67,6,44}, -{67,6,45}, -{67,6,46}, -{67,6,47}, -{67,6,48}, -{67,6,49}, -{67,6,50}, -{67,6,51}, -{67,6,52}, -{67,6,53}, -{67,6,54}, -{67,6,55}, -{67,6,56}, -{67,6,57}, -{67,6,58}, -{67,6,59}, -{67,6,60}, -{67,6,61}, -{67,6,62}, -{67,6,63}, -{67,6,64}, -{67,6,65}, -{67,6,66}, -{67,6,67}, -{67,6,68}, -{67,6,69}, -{67,6,70}, -{67,6,71}, -{67,7,-51}, -{67,7,-50}, -{67,7,-49}, -{67,7,-48}, -{67,7,-47}, -{67,7,-46}, -{67,7,-45}, -{67,7,-44}, -{67,7,-43}, -{67,7,-42}, -{67,7,-41}, -{67,7,-40}, -{67,7,-39}, -{67,7,-38}, -{67,7,-37}, -{67,7,-36}, -{67,7,-35}, -{67,7,-34}, -{67,7,-33}, -{67,7,-32}, -{67,7,-31}, -{67,7,-30}, -{67,7,-29}, -{67,7,-28}, -{67,7,-27}, -{67,7,-26}, -{67,7,-25}, -{67,7,-24}, -{67,7,-23}, -{67,7,-22}, -{67,7,-21}, -{67,7,-20}, -{67,7,-19}, -{67,7,-18}, -{67,7,-17}, -{67,7,-16}, -{67,7,-15}, -{67,7,-14}, -{67,7,-13}, -{67,7,-12}, -{67,7,-11}, -{67,7,-10}, -{67,7,-9}, -{67,7,-8}, -{67,7,-7}, -{67,7,-6}, -{67,7,-5}, -{67,7,-4}, -{67,7,-3}, -{67,7,-2}, -{67,7,-1}, -{67,7,0}, -{67,7,1}, -{67,7,2}, -{67,7,3}, -{67,7,4}, -{67,7,5}, -{67,7,6}, -{67,7,7}, -{67,7,8}, -{67,7,9}, -{67,7,10}, -{67,7,11}, -{67,7,12}, -{67,7,13}, -{67,7,14}, -{67,7,15}, -{67,7,16}, -{67,7,17}, -{67,7,18}, -{67,7,19}, -{67,7,20}, -{67,7,21}, -{67,7,22}, -{67,7,23}, -{67,7,24}, -{67,7,25}, -{67,7,26}, -{67,7,27}, -{67,7,28}, -{67,7,29}, -{67,7,30}, -{67,7,31}, -{67,7,32}, -{67,7,33}, -{67,7,34}, -{67,7,35}, -{67,7,36}, -{67,7,37}, -{67,7,38}, -{67,7,39}, -{67,7,40}, -{67,7,41}, -{67,7,42}, -{67,7,43}, -{67,7,44}, -{67,7,45}, -{67,7,46}, -{67,7,47}, -{67,7,48}, -{67,7,49}, -{67,7,50}, -{67,7,51}, -{67,7,52}, -{67,7,53}, -{67,7,54}, -{67,7,55}, -{67,7,56}, -{67,7,57}, -{67,7,58}, -{67,7,59}, -{67,7,60}, -{67,7,61}, -{67,7,62}, -{67,7,63}, -{67,7,64}, -{67,7,65}, -{67,7,66}, -{67,7,67}, -{67,7,68}, -{67,7,69}, -{67,7,70}, -{67,7,71}, -{67,8,-51}, -{67,8,-50}, -{67,8,-49}, -{67,8,-48}, -{67,8,-47}, -{67,8,-46}, -{67,8,-45}, -{67,8,-44}, -{67,8,-43}, -{67,8,-42}, -{67,8,-41}, -{67,8,-40}, -{67,8,-39}, -{67,8,-38}, -{67,8,-37}, -{67,8,-36}, -{67,8,-35}, -{67,8,-34}, -{67,8,-33}, -{67,8,-32}, -{67,8,-31}, -{67,8,-30}, -{67,8,-29}, -{67,8,-28}, -{67,8,-27}, -{67,8,-26}, -{67,8,-25}, -{67,8,-24}, -{67,8,-23}, -{67,8,-22}, -{67,8,-21}, -{67,8,-20}, -{67,8,-19}, -{67,8,-18}, -{67,8,-17}, -{67,8,-16}, -{67,8,-15}, -{67,8,-14}, -{67,8,-13}, -{67,8,-12}, -{67,8,-11}, -{67,8,-10}, -{67,8,-9}, -{67,8,-8}, -{67,8,-7}, -{67,8,-6}, -{67,8,-5}, -{67,8,-4}, -{67,8,-3}, -{67,8,-2}, -{67,8,-1}, -{67,8,0}, -{67,8,1}, -{67,8,2}, -{67,8,3}, -{67,8,4}, -{67,8,5}, -{67,8,6}, -{67,8,7}, -{67,8,8}, -{67,8,9}, -{67,8,10}, -{67,8,11}, -{67,8,12}, -{67,8,13}, -{67,8,14}, -{67,8,15}, -{67,8,16}, -{67,8,17}, -{67,8,18}, -{67,8,19}, -{67,8,20}, -{67,8,21}, -{67,8,22}, -{67,8,23}, -{67,8,24}, -{67,8,25}, -{67,8,26}, -{67,8,27}, -{67,8,28}, -{67,8,29}, -{67,8,30}, -{67,8,31}, -{67,8,32}, -{67,8,33}, -{67,8,34}, -{67,8,35}, -{67,8,36}, -{67,8,37}, -{67,8,38}, -{67,8,39}, -{67,8,40}, -{67,8,41}, -{67,8,42}, -{67,8,43}, -{67,8,44}, -{67,8,45}, -{67,8,46}, -{67,8,47}, -{67,8,48}, -{67,8,49}, -{67,8,50}, -{67,8,51}, -{67,8,52}, -{67,8,53}, -{67,8,54}, -{67,8,55}, -{67,8,56}, -{67,8,57}, -{67,8,58}, -{67,8,59}, -{67,8,60}, -{67,8,61}, -{67,8,62}, -{67,8,63}, -{67,8,64}, -{67,8,65}, -{67,8,66}, -{67,8,67}, -{67,8,68}, -{67,8,69}, -{67,8,70}, -{67,8,71}, -{67,9,-51}, -{67,9,-50}, -{67,9,-49}, -{67,9,-48}, -{67,9,-47}, -{67,9,-46}, -{67,9,-45}, -{67,9,-44}, -{67,9,-43}, -{67,9,-42}, -{67,9,-41}, -{67,9,-40}, -{67,9,-39}, -{67,9,-38}, -{67,9,-37}, -{67,9,-36}, -{67,9,-35}, -{67,9,-34}, -{67,9,-33}, -{67,9,-32}, -{67,9,-31}, -{67,9,-30}, -{67,9,-29}, -{67,9,-28}, -{67,9,-27}, -{67,9,-26}, -{67,9,-25}, -{67,9,-24}, -{67,9,-23}, -{67,9,-22}, -{67,9,-21}, -{67,9,-20}, -{67,9,-19}, -{67,9,-18}, -{67,9,-17}, -{67,9,-16}, -{67,9,-15}, -{67,9,-14}, -{67,9,-13}, -{67,9,-12}, -{67,9,-11}, -{67,9,-10}, -{67,9,-9}, -{67,9,-8}, -{67,9,-7}, -{67,9,-6}, -{67,9,-5}, -{67,9,-4}, -{67,9,-3}, -{67,9,-2}, -{67,9,-1}, -{67,9,0}, -{67,9,1}, -{67,9,2}, -{67,9,3}, -{67,9,4}, -{67,9,5}, -{67,9,6}, -{67,9,7}, -{67,9,8}, -{67,9,9}, -{67,9,10}, -{67,9,11}, -{67,9,12}, -{67,9,13}, -{67,9,14}, -{67,9,15}, -{67,9,16}, -{67,9,17}, -{67,9,18}, -{67,9,19}, -{67,9,20}, -{67,9,21}, -{67,9,22}, -{67,9,23}, -{67,9,24}, -{67,9,25}, -{67,9,26}, -{67,9,27}, -{67,9,28}, -{67,9,29}, -{67,9,30}, -{67,9,31}, -{67,9,32}, -{67,9,33}, -{67,9,34}, -{67,9,35}, -{67,9,36}, -{67,9,37}, -{67,9,38}, -{67,9,39}, -{67,9,40}, -{67,9,41}, -{67,9,42}, -{67,9,43}, -{67,9,44}, -{67,9,45}, -{67,9,46}, -{67,9,47}, -{67,9,48}, -{67,9,49}, -{67,9,50}, -{67,9,51}, -{67,9,52}, -{67,9,53}, -{67,9,54}, -{67,9,55}, -{67,9,56}, -{67,9,57}, -{67,9,58}, -{67,9,59}, -{67,9,60}, -{67,9,61}, -{67,9,62}, -{67,9,63}, -{67,9,64}, -{67,9,65}, -{67,9,66}, -{67,9,67}, -{67,9,68}, -{67,9,69}, -{67,9,70}, -{67,9,71}, -{67,10,-51}, -{67,10,-50}, -{67,10,-49}, -{67,10,-48}, -{67,10,-47}, -{67,10,-46}, -{67,10,-45}, -{67,10,-44}, -{67,10,-43}, -{67,10,-42}, -{67,10,-41}, -{67,10,-40}, -{67,10,-39}, -{67,10,-38}, -{67,10,-37}, -{67,10,-36}, -{67,10,-35}, -{67,10,-34}, -{67,10,-33}, -{67,10,-32}, -{67,10,-31}, -{67,10,-30}, -{67,10,-29}, -{67,10,-28}, -{67,10,-27}, -{67,10,-26}, -{67,10,-25}, -{67,10,-24}, -{67,10,-23}, -{67,10,-22}, -{67,10,-21}, -{67,10,-20}, -{67,10,-19}, -{67,10,-18}, -{67,10,-17}, -{67,10,-16}, -{67,10,-15}, -{67,10,-14}, -{67,10,-13}, -{67,10,-12}, -{67,10,-11}, -{67,10,-10}, -{67,10,-9}, -{67,10,-8}, -{67,10,-7}, -{67,10,-6}, -{67,10,-5}, -{67,10,-4}, -{67,10,-3}, -{67,10,-2}, -{67,10,-1}, -{67,10,0}, -{67,10,1}, -{67,10,2}, -{67,10,3}, -{67,10,4}, -{67,10,5}, -{67,10,6}, -{67,10,7}, -{67,10,8}, -{67,10,9}, -{67,10,10}, -{67,10,11}, -{67,10,12}, -{67,10,13}, -{67,10,14}, -{67,10,15}, -{67,10,16}, -{67,10,17}, -{67,10,18}, -{67,10,19}, -{67,10,20}, -{67,10,21}, -{67,10,22}, -{67,10,23}, -{67,10,24}, -{67,10,25}, -{67,10,26}, -{67,10,27}, -{67,10,28}, -{67,10,29}, -{67,10,30}, -{67,10,31}, -{67,10,32}, -{67,10,33}, -{67,10,34}, -{67,10,35}, -{67,10,36}, -{67,10,37}, -{67,10,38}, -{67,10,39}, -{67,10,40}, -{67,10,41}, -{67,10,42}, -{67,10,43}, -{67,10,44}, -{67,10,45}, -{67,10,46}, -{67,10,47}, -{67,10,48}, -{67,10,49}, -{67,10,50}, -{67,10,51}, -{67,10,52}, -{67,10,53}, -{67,10,54}, -{67,10,55}, -{67,10,56}, -{67,10,57}, -{67,10,58}, -{67,10,59}, -{67,10,60}, -{67,10,61}, -{67,10,62}, -{67,10,63}, -{67,10,64}, -{67,10,65}, -{67,10,66}, -{67,10,67}, -{67,10,68}, -{67,10,69}, -{67,10,70}, -{67,10,71}, -{67,11,-51}, -{67,11,-50}, -{67,11,-49}, -{67,11,-48}, -{67,11,-47}, -{67,11,-46}, -{67,11,-45}, -{67,11,-44}, -{67,11,-43}, -{67,11,-42}, -{67,11,-41}, -{67,11,-40}, -{67,11,-39}, -{67,11,-38}, -{67,11,-37}, -{67,11,-36}, -{67,11,-35}, -{67,11,-34}, -{67,11,-33}, -{67,11,-32}, -{67,11,-31}, -{67,11,-30}, -{67,11,-29}, -{67,11,-28}, -{67,11,-27}, -{67,11,-26}, -{67,11,-25}, -{67,11,-24}, -{67,11,-23}, -{67,11,-22}, -{67,11,-21}, -{67,11,-20}, -{67,11,-19}, -{67,11,-18}, -{67,11,-17}, -{67,11,-16}, -{67,11,-15}, -{67,11,-14}, -{67,11,-13}, -{67,11,-12}, -{67,11,-11}, -{67,11,-10}, -{67,11,-9}, -{67,11,-8}, -{67,11,-7}, -{67,11,-6}, -{67,11,-5}, -{67,11,-4}, -{67,11,-3}, -{67,11,-2}, -{67,11,-1}, -{67,11,0}, -{67,11,1}, -{67,11,2}, -{67,11,3}, -{67,11,4}, -{67,11,5}, -{67,11,6}, -{67,11,7}, -{67,11,8}, -{67,11,9}, -{67,11,10}, -{67,11,11}, -{67,11,12}, -{67,11,13}, -{67,11,14}, -{67,11,15}, -{67,11,16}, -{67,11,17}, -{67,11,18}, -{67,11,19}, -{67,11,20}, -{67,11,21}, -{67,11,22}, -{67,11,23}, -{67,11,24}, -{67,11,25}, -{67,11,26}, -{67,11,27}, -{67,11,28}, -{67,11,29}, -{67,11,30}, -{67,11,31}, -{67,11,32}, -{67,11,33}, -{67,11,34}, -{67,11,35}, -{67,11,36}, -{67,11,37}, -{67,11,38}, -{67,11,39}, -{67,11,40}, -{67,11,41}, -{67,11,42}, -{67,11,43}, -{67,11,44}, -{67,11,45}, -{67,11,46}, -{67,11,47}, -{67,11,48}, -{67,11,49}, -{67,11,50}, -{67,11,51}, -{67,11,52}, -{67,11,53}, -{67,11,54}, -{67,11,55}, -{67,11,56}, -{67,11,57}, -{67,11,58}, -{67,11,59}, -{67,11,60}, -{67,11,61}, -{67,11,62}, -{67,11,63}, -{67,11,64}, -{67,11,65}, -{67,11,66}, -{67,11,67}, -{67,11,68}, -{67,11,69}, -{67,11,70}, -{67,11,71}, -{67,12,-51}, -{67,12,-50}, -{67,12,-49}, -{67,12,-48}, -{67,12,-47}, -{67,12,-46}, -{67,12,-45}, -{67,12,-44}, -{67,12,-43}, -{67,12,-42}, -{67,12,-41}, -{67,12,-40}, -{67,12,-39}, -{67,12,-38}, -{67,12,-37}, -{67,12,-36}, -{67,12,-35}, -{67,12,-34}, -{67,12,-33}, -{67,12,-32}, -{67,12,-31}, -{67,12,-30}, -{67,12,-29}, -{67,12,-28}, -{67,12,-27}, -{67,12,-26}, -{67,12,-25}, -{67,12,-24}, -{67,12,-23}, -{67,12,-22}, -{67,12,-21}, -{67,12,-20}, -{67,12,-19}, -{67,12,-18}, -{67,12,-17}, -{67,12,-16}, -{67,12,-15}, -{67,12,-14}, -{67,12,-13}, -{67,12,-12}, -{67,12,-11}, -{67,12,-10}, -{67,12,-9}, -{67,12,-8}, -{67,12,-7}, -{67,12,-6}, -{67,12,-5}, -{67,12,-4}, -{67,12,-3}, -{67,12,-2}, -{67,12,-1}, -{67,12,0}, -{67,12,1}, -{67,12,2}, -{67,12,3}, -{67,12,4}, -{67,12,5}, -{67,12,6}, -{67,12,7}, -{67,12,8}, -{67,12,9}, -{67,12,10}, -{67,12,11}, -{67,12,12}, -{67,12,13}, -{67,12,14}, -{67,12,15}, -{67,12,16}, -{67,12,17}, -{67,12,18}, -{67,12,19}, -{67,12,20}, -{67,12,21}, -{67,12,22}, -{67,12,23}, -{67,12,24}, -{67,12,25}, -{67,12,26}, -{67,12,27}, -{67,12,28}, -{67,12,29}, -{67,12,30}, -{67,12,31}, -{67,12,32}, -{67,12,33}, -{67,12,34}, -{67,12,35}, -{67,12,36}, -{67,12,37}, -{67,12,38}, -{67,12,39}, -{67,12,40}, -{67,12,41}, -{67,12,42}, -{67,12,43}, -{67,12,44}, -{67,12,45}, -{67,12,46}, -{67,12,47}, -{67,12,48}, -{67,12,49}, -{67,12,50}, -{67,12,51}, -{67,12,52}, -{67,12,53}, -{67,12,54}, -{67,12,55}, -{67,12,56}, -{67,12,57}, -{67,12,58}, -{67,12,59}, -{67,12,60}, -{67,12,61}, -{67,12,62}, -{67,12,63}, -{67,12,64}, -{67,12,65}, -{67,12,66}, -{67,12,67}, -{67,12,68}, -{67,12,69}, -{67,12,70}, -{67,12,71}, -{67,13,-51}, -{67,13,-50}, -{67,13,-49}, -{67,13,-48}, -{67,13,-47}, -{67,13,-46}, -{67,13,-45}, -{67,13,-44}, -{67,13,-43}, -{67,13,-42}, -{67,13,-41}, -{67,13,-40}, -{67,13,-39}, -{67,13,-38}, -{67,13,-37}, -{67,13,-36}, -{67,13,-35}, -{67,13,-34}, -{67,13,-33}, -{67,13,-32}, -{67,13,-31}, -{67,13,-30}, -{67,13,-29}, -{67,13,-28}, -{67,13,-27}, -{67,13,-26}, -{67,13,-25}, -{67,13,-24}, -{67,13,-23}, -{67,13,-22}, -{67,13,-21}, -{67,13,-20}, -{67,13,-19}, -{67,13,-18}, -{67,13,-17}, -{67,13,-16}, -{67,13,-15}, -{67,13,-14}, -{67,13,-13}, -{67,13,-12}, -{67,13,-11}, -{67,13,-10}, -{67,13,-9}, -{67,13,-8}, -{67,13,-7}, -{67,13,-6}, -{67,13,-5}, -{67,13,-4}, -{67,13,-3}, -{67,13,-2}, -{67,13,-1}, -{67,13,0}, -{67,13,1}, -{67,13,2}, -{67,13,3}, -{67,13,4}, -{67,13,5}, -{67,13,6}, -{67,13,7}, -{67,13,8}, -{67,13,9}, -{67,13,10}, -{67,13,11}, -{67,13,12}, -{67,13,13}, -{67,13,14}, -{67,13,15}, -{67,13,16}, -{67,13,17}, -{67,13,18}, -{67,13,19}, -{67,13,20}, -{67,13,21}, -{67,13,22}, -{67,13,23}, -{67,13,24}, -{67,13,25}, -{67,13,26}, -{67,13,27}, -{67,13,28}, -{67,13,29}, -{67,13,30}, -{67,13,31}, -{67,13,32}, -{67,13,33}, -{67,13,34}, -{67,13,35}, -{67,13,36}, -{67,13,37}, -{67,13,38}, -{67,13,39}, -{67,13,40}, -{67,13,41}, -{67,13,42}, -{67,13,43}, -{67,13,44}, -{67,13,45}, -{67,13,46}, -{67,13,47}, -{67,13,48}, -{67,13,49}, -{67,13,50}, -{67,13,51}, -{67,13,52}, -{67,13,53}, -{67,13,54}, -{67,13,55}, -{67,13,56}, -{67,13,57}, -{67,13,58}, -{67,13,59}, -{67,13,60}, -{67,13,61}, -{67,13,62}, -{67,13,63}, -{67,13,64}, -{67,13,65}, -{67,13,66}, -{67,13,67}, -{67,13,68}, -{67,13,69}, -{67,13,70}, -{67,13,71}, -{67,14,-51}, -{67,14,-50}, -{67,14,-49}, -{67,14,-48}, -{67,14,-47}, -{67,14,-46}, -{67,14,-45}, -{67,14,-44}, -{67,14,-43}, -{67,14,-42}, -{67,14,-41}, -{67,14,-40}, -{67,14,-39}, -{67,14,-38}, -{67,14,-37}, -{67,14,-36}, -{67,14,-35}, -{67,14,-34}, -{67,14,-33}, -{67,14,-32}, -{67,14,-31}, -{67,14,-30}, -{67,14,-29}, -{67,14,-28}, -{67,14,-27}, -{67,14,-26}, -{67,14,-25}, -{67,14,-24}, -{67,14,-23}, -{67,14,-22}, -{67,14,-21}, -{67,14,-20}, -{67,14,-19}, -{67,14,-18}, -{67,14,-17}, -{67,14,-16}, -{67,14,-15}, -{67,14,-14}, -{67,14,-13}, -{67,14,-12}, -{67,14,-11}, -{67,14,-10}, -{67,14,-9}, -{67,14,-8}, -{67,14,-7}, -{67,14,-6}, -{67,14,-5}, -{67,14,-4}, -{67,14,-3}, -{67,14,-2}, -{67,14,-1}, -{67,14,0}, -{67,14,1}, -{67,14,2}, -{67,14,3}, -{67,14,4}, -{67,14,5}, -{67,14,6}, -{67,14,7}, -{67,14,8}, -{67,14,9}, -{67,14,10}, -{67,14,11}, -{67,14,12}, -{67,14,13}, -{67,14,14}, -{67,14,15}, -{67,14,16}, -{67,14,17}, -{67,14,18}, -{67,14,19}, -{67,14,20}, -{67,14,21}, -{67,14,22}, -{67,14,23}, -{67,14,24}, -{67,14,25}, -{67,14,26}, -{67,14,27}, -{67,14,28}, -{67,14,29}, -{67,14,30}, -{67,14,31}, -{67,14,32}, -{67,14,33}, -{67,14,34}, -{67,14,35}, -{67,14,36}, -{67,14,37}, -{67,14,38}, -{67,14,39}, -{67,14,40}, -{67,14,41}, -{67,14,42}, -{67,14,43}, -{67,14,44}, -{67,14,45}, -{67,14,46}, -{67,14,47}, -{67,14,48}, -{67,14,49}, -{67,14,50}, -{67,14,51}, -{67,14,52}, -{67,14,53}, -{67,14,54}, -{67,14,55}, -{67,14,56}, -{67,14,57}, -{67,14,58}, -{67,14,59}, -{67,14,60}, -{67,14,61}, -{67,14,62}, -{67,14,63}, -{67,14,64}, -{67,14,65}, -{67,14,66}, -{67,14,67}, -{67,14,68}, -{67,14,69}, -{67,14,70}, -{67,14,71}, -{67,15,-51}, -{67,15,-50}, -{67,15,-49}, -{67,15,-48}, -{67,15,-47}, -{67,15,-46}, -{67,15,-45}, -{67,15,-44}, -{67,15,-43}, -{67,15,-42}, -{67,15,-41}, -{67,15,-40}, -{67,15,-39}, -{67,15,-38}, -{67,15,-37}, -{67,15,-36}, -{67,15,-35}, -{67,15,-34}, -{67,15,-33}, -{67,15,-32}, -{67,15,-31}, -{67,15,-30}, -{67,15,-29}, -{67,15,-28}, -{67,15,-27}, -{67,15,-26}, -{67,15,-25}, -{67,15,-24}, -{67,15,-23}, -{67,15,-22}, -{67,15,-21}, -{67,15,-20}, -{67,15,-19}, -{67,15,-18}, -{67,15,-17}, -{67,15,-16}, -{67,15,-15}, -{67,15,-14}, -{67,15,-13}, -{67,15,-12}, -{67,15,-11}, -{67,15,-10}, -{67,15,-9}, -{67,15,-8}, -{67,15,-7}, -{67,15,-6}, -{67,15,-5}, -{67,15,-4}, -{67,15,-3}, -{67,15,-2}, -{67,15,-1}, -{67,15,0}, -{67,15,1}, -{67,15,2}, -{67,15,3}, -{67,15,4}, -{67,15,5}, -{67,15,6}, -{67,15,7}, -{67,15,8}, -{67,15,9}, -{67,15,10}, -{67,15,11}, -{67,15,12}, -{67,15,13}, -{67,15,14}, -{67,15,15}, -{67,15,16}, -{67,15,17}, -{67,15,18}, -{67,15,19}, -{67,15,20}, -{67,15,21}, -{67,15,22}, -{67,15,23}, -{67,15,24}, -{67,15,25}, -{67,15,26}, -{67,15,27}, -{67,15,28}, -{67,15,29}, -{67,15,30}, -{67,15,31}, -{67,15,32}, -{67,15,33}, -{67,15,34}, -{67,15,35}, -{67,15,36}, -{67,15,37}, -{67,15,38}, -{67,15,39}, -{67,15,40}, -{67,15,41}, -{67,15,42}, -{67,15,43}, -{67,15,44}, -{67,15,45}, -{67,15,46}, -{67,15,47}, -{67,15,48}, -{67,15,49}, -{67,15,50}, -{67,15,51}, -{67,15,52}, -{67,15,53}, -{67,15,54}, -{67,15,55}, -{67,15,56}, -{67,15,57}, -{67,15,58}, -{67,15,59}, -{67,15,60}, -{67,15,61}, -{67,15,62}, -{67,15,63}, -{67,15,64}, -{67,15,65}, -{67,15,66}, -{67,15,67}, -{67,15,68}, -{67,15,69}, -{67,15,70}, -{67,15,71}, -{67,16,-51}, -{67,16,-50}, -{67,16,-49}, -{67,16,-48}, -{67,16,-47}, -{67,16,-46}, -{67,16,-45}, -{67,16,-44}, -{67,16,-43}, -{67,16,-42}, -{67,16,-41}, -{67,16,-40}, -{67,16,-39}, -{67,16,-38}, -{67,16,-37}, -{67,16,-36}, -{67,16,-35}, -{67,16,-34}, -{67,16,-33}, -{67,16,-32}, -{67,16,-31}, -{67,16,-30}, -{67,16,-29}, -{67,16,-28}, -{67,16,-27}, -{67,16,-26}, -{67,16,-25}, -{67,16,-24}, -{67,16,-23}, -{67,16,-22}, -{67,16,-21}, -{67,16,-20}, -{67,16,-19}, -{67,16,-18}, -{67,16,-17}, -{67,16,-16}, -{67,16,-15}, -{67,16,-14}, -{67,16,-13}, -{67,16,-12}, -{67,16,-11}, -{67,16,-10}, -{67,16,-9}, -{67,16,-8}, -{67,16,-7}, -{67,16,-6}, -{67,16,-5}, -{67,16,-4}, -{67,16,-3}, -{67,16,-2}, -{67,16,-1}, -{67,16,0}, -{67,16,1}, -{67,16,2}, -{67,16,3}, -{67,16,4}, -{67,16,5}, -{67,16,6}, -{67,16,7}, -{67,16,8}, -{67,16,9}, -{67,16,10}, -{67,16,11}, -{67,16,12}, -{67,16,13}, -{67,16,14}, -{67,16,15}, -{67,16,16}, -{67,16,17}, -{67,16,18}, -{67,16,19}, -{67,16,20}, -{67,16,21}, -{67,16,22}, -{67,16,23}, -{67,16,24}, -{67,16,25}, -{67,16,26}, -{67,16,27}, -{67,16,28}, -{67,16,29}, -{67,16,30}, -{67,16,31}, -{67,16,32}, -{67,16,33}, -{67,16,34}, -{67,16,35}, -{67,16,36}, -{67,16,37}, -{67,16,38}, -{67,16,39}, -{67,16,40}, -{67,16,41}, -{67,16,42}, -{67,16,43}, -{67,16,44}, -{67,16,45}, -{67,16,46}, -{67,16,47}, -{67,16,48}, -{67,16,49}, -{67,16,50}, -{67,16,51}, -{67,16,52}, -{67,16,53}, -{67,16,54}, -{67,16,55}, -{67,16,56}, -{67,16,57}, -{67,16,58}, -{67,16,59}, -{67,16,60}, -{67,16,61}, -{67,16,62}, -{67,16,63}, -{67,16,64}, -{67,16,65}, -{67,16,66}, -{67,16,67}, -{67,16,68}, -{67,16,69}, -{67,16,70}, -{67,16,71}, -{67,17,-51}, -{67,17,-50}, -{67,17,-49}, -{67,17,-48}, -{67,17,-47}, -{67,17,-46}, -{67,17,-45}, -{67,17,-44}, -{67,17,-43}, -{67,17,-42}, -{67,17,-41}, -{67,17,-40}, -{67,17,-39}, -{67,17,-38}, -{67,17,-37}, -{67,17,-36}, -{67,17,-35}, -{67,17,-34}, -{67,17,-33}, -{67,17,-32}, -{67,17,-31}, -{67,17,-30}, -{67,17,-29}, -{67,17,-28}, -{67,17,-27}, -{67,17,-26}, -{67,17,-25}, -{67,17,-24}, -{67,17,-23}, -{67,17,-22}, -{67,17,-21}, -{67,17,-20}, -{67,17,-19}, -{67,17,-18}, -{67,17,-17}, -{67,17,-16}, -{67,17,-15}, -{67,17,-14}, -{67,17,-13}, -{67,17,-12}, -{67,17,-11}, -{67,17,-10}, -{67,17,-9}, -{67,17,-8}, -{67,17,-7}, -{67,17,-6}, -{67,17,-5}, -{67,17,-4}, -{67,17,-3}, -{67,17,-2}, -{67,17,-1}, -{67,17,0}, -{67,17,1}, -{67,17,2}, -{67,17,3}, -{67,17,4}, -{67,17,5}, -{67,17,6}, -{67,17,7}, -{67,17,8}, -{67,17,9}, -{67,17,10}, -{67,17,11}, -{67,17,12}, -{67,17,13}, -{67,17,14}, -{67,17,15}, -{67,17,16}, -{67,17,17}, -{67,17,18}, -{67,17,19}, -{67,17,20}, -{67,17,21}, -{67,17,22}, -{67,17,23}, -{67,17,24}, -{67,17,25}, -{67,17,26}, -{67,17,27}, -{67,17,28}, -{67,17,29}, -{67,17,30}, -{67,17,31}, -{67,17,32}, -{67,17,33}, -{67,17,34}, -{67,17,35}, -{67,17,36}, -{67,17,37}, -{67,17,38}, -{67,17,39}, -{67,17,40}, -{67,17,41}, -{67,17,42}, -{67,17,43}, -{67,17,44}, -{67,17,45}, -{67,17,46}, -{67,17,47}, -{67,17,48}, -{67,17,49}, -{67,17,50}, -{67,17,51}, -{67,17,52}, -{67,17,53}, -{67,17,54}, -{67,17,55}, -{67,17,56}, -{67,17,57}, -{67,17,58}, -{67,17,59}, -{67,17,60}, -{67,17,61}, -{67,17,62}, -{67,17,63}, -{67,17,64}, -{67,17,65}, -{67,17,66}, -{67,17,67}, -{67,17,68}, -{67,17,69}, -{67,17,70}, -{67,17,71}, -{67,18,-51}, -{67,18,-50}, -{67,18,-49}, -{67,18,-48}, -{67,18,-47}, -{67,18,-46}, -{67,18,-45}, -{67,18,-44}, -{67,18,-43}, -{67,18,-42}, -{67,18,-41}, -{67,18,-40}, -{67,18,-39}, -{67,18,-38}, -{67,18,-37}, -{67,18,-36}, -{67,18,-35}, -{67,18,-34}, -{67,18,-33}, -{67,18,-32}, -{67,18,-31}, -{67,18,-30}, -{67,18,-29}, -{67,18,-28}, -{67,18,-27}, -{67,18,-26}, -{67,18,-25}, -{67,18,-24}, -{67,18,-23}, -{67,18,-22}, -{67,18,-21}, -{67,18,-20}, -{67,18,-19}, -{67,18,-18}, -{67,18,-17}, -{67,18,-16}, -{67,18,-15}, -{67,18,-14}, -{67,18,-13}, -{67,18,-12}, -{67,18,-11}, -{67,18,-10}, -{67,18,-9}, -{67,18,-8}, -{67,18,-7}, -{67,18,-6}, -{67,18,-5}, -{67,18,-4}, -{67,18,-3}, -{67,18,-2}, -{67,18,-1}, -{67,18,0}, -{67,18,1}, -{67,18,2}, -{67,18,3}, -{67,18,4}, -{67,18,5}, -{67,18,6}, -{67,18,7}, -{67,18,8}, -{67,18,9}, -{67,18,10}, -{67,18,11}, -{67,18,12}, -{67,18,13}, -{67,18,14}, -{67,18,15}, -{67,18,16}, -{67,18,17}, -{67,18,18}, -{67,18,19}, -{67,18,20}, -{67,18,21}, -{67,18,22}, -{67,18,23}, -{67,18,24}, -{67,18,25}, -{67,18,26}, -{67,18,27}, -{67,18,28}, -{67,18,29}, -{67,18,30}, -{67,18,31}, -{67,18,32}, -{67,18,33}, -{67,18,34}, -{67,18,35}, -{67,18,36}, -{67,18,37}, -{67,18,38}, -{67,18,39}, -{67,18,40}, -{67,18,41}, -{67,18,42}, -{67,18,43}, -{67,18,44}, -{67,18,45}, -{67,18,46}, -{67,18,47}, -{67,18,48}, -{67,18,49}, -{67,18,50}, -{67,18,51}, -{67,18,52}, -{67,18,53}, -{67,18,54}, -{67,18,55}, -{67,18,56}, -{67,18,57}, -{67,18,58}, -{67,18,59}, -{67,18,60}, -{67,18,61}, -{67,18,62}, -{67,18,63}, -{67,18,64}, -{67,18,65}, -{67,18,66}, -{67,18,67}, -{67,18,68}, -{67,18,69}, -{67,18,70}, -{67,18,71}, -{67,19,-51}, -{67,19,-50}, -{67,19,-49}, -{67,19,-48}, -{67,19,-47}, -{67,19,-46}, -{67,19,-45}, -{67,19,-44}, -{67,19,-43}, -{67,19,-42}, -{67,19,-41}, -{67,19,-40}, -{67,19,-39}, -{67,19,-38}, -{67,19,-37}, -{67,19,-36}, -{67,19,-35}, -{67,19,-34}, -{67,19,-33}, -{67,19,-32}, -{67,19,-31}, -{67,19,-30}, -{67,19,-29}, -{67,19,-28}, -{67,19,-27}, -{67,19,-26}, -{67,19,-25}, -{67,19,-24}, -{67,19,-23}, -{67,19,-22}, -{67,19,-21}, -{67,19,-20}, -{67,19,-19}, -{67,19,-18}, -{67,19,-17}, -{67,19,-16}, -{67,19,-15}, -{67,19,-14}, -{67,19,-13}, -{67,19,-12}, -{67,19,-11}, -{67,19,-10}, -{67,19,-9}, -{67,19,-8}, -{67,19,-7}, -{67,19,-6}, -{67,19,-5}, -{67,19,-4}, -{67,19,-3}, -{67,19,-2}, -{67,19,-1}, -{67,19,0}, -{67,19,1}, -{67,19,2}, -{67,19,3}, -{67,19,4}, -{67,19,5}, -{67,19,6}, -{67,19,7}, -{67,19,8}, -{67,19,9}, -{67,19,10}, -{67,19,11}, -{67,19,12}, -{67,19,13}, -{67,19,14}, -{67,19,15}, -{67,19,16}, -{67,19,17}, -{67,19,18}, -{67,19,19}, -{67,19,20}, -{67,19,21}, -{67,19,22}, -{67,19,23}, -{67,19,24}, -{67,19,25}, -{67,19,26}, -{67,19,27}, -{67,19,28}, -{67,19,29}, -{67,19,30}, -{67,19,31}, -{67,19,32}, -{67,19,33}, -{67,19,34}, -{67,19,35}, -{67,19,36}, -{67,19,37}, -{67,19,38}, -{67,19,39}, -{67,19,40}, -{67,19,41}, -{67,19,42}, -{67,19,43}, -{67,19,44}, -{67,19,45}, -{67,19,46}, -{67,19,47}, -{67,19,48}, -{67,19,49}, -{67,19,50}, -{67,19,51}, -{67,19,52}, -{67,19,53}, -{67,19,54}, -{67,19,55}, -{67,19,56}, -{67,19,57}, -{67,19,58}, -{67,19,59}, -{67,19,60}, -{67,19,61}, -{67,19,62}, -{67,19,63}, -{67,19,64}, -{67,19,65}, -{67,19,66}, -{67,19,67}, -{67,19,68}, -{67,19,69}, -{67,19,70}, -{67,19,71}, -{67,19,72}, -{67,20,-51}, -{67,20,-50}, -{67,20,-49}, -{67,20,-48}, -{67,20,-47}, -{67,20,-46}, -{67,20,-45}, -{67,20,-44}, -{67,20,-43}, -{67,20,-42}, -{67,20,-41}, -{67,20,-40}, -{67,20,-39}, -{67,20,-38}, -{67,20,-37}, -{67,20,-36}, -{67,20,-35}, -{67,20,-34}, -{67,20,-33}, -{67,20,-32}, -{67,20,-31}, -{67,20,-30}, -{67,20,-29}, -{67,20,-28}, -{67,20,-27}, -{67,20,-26}, -{67,20,-25}, -{67,20,-24}, -{67,20,-23}, -{67,20,-22}, -{67,20,-21}, -{67,20,-20}, -{67,20,-19}, -{67,20,-18}, -{67,20,-17}, -{67,20,-16}, -{67,20,-15}, -{67,20,-14}, -{67,20,-13}, -{67,20,-12}, -{67,20,-11}, -{67,20,-10}, -{67,20,-9}, -{67,20,-8}, -{67,20,-7}, -{67,20,-6}, -{67,20,-5}, -{67,20,-4}, -{67,20,-3}, -{67,20,-2}, -{67,20,-1}, -{67,20,0}, -{67,20,1}, -{67,20,2}, -{67,20,3}, -{67,20,4}, -{67,20,5}, -{67,20,6}, -{67,20,7}, -{67,20,8}, -{67,20,9}, -{67,20,10}, -{67,20,11}, -{67,20,12}, -{67,20,13}, -{67,20,14}, -{67,20,15}, -{67,20,16}, -{67,20,17}, -{67,20,18}, -{67,20,19}, -{67,20,20}, -{67,20,21}, -{67,20,22}, -{67,20,23}, -{67,20,24}, -{67,20,25}, -{67,20,26}, -{67,20,27}, -{67,20,28}, -{67,20,29}, -{67,20,30}, -{67,20,31}, -{67,20,32}, -{67,20,33}, -{67,20,34}, -{67,20,35}, -{67,20,36}, -{67,20,37}, -{67,20,38}, -{67,20,39}, -{67,20,40}, -{67,20,41}, -{67,20,42}, -{67,20,43}, -{67,20,44}, -{67,20,45}, -{67,20,46}, -{67,20,47}, -{67,20,48}, -{67,20,49}, -{67,20,50}, -{67,20,51}, -{67,20,52}, -{67,20,53}, -{67,20,54}, -{67,20,55}, -{67,20,56}, -{67,20,57}, -{67,20,58}, -{67,20,59}, -{67,20,60}, -{67,20,61}, -{67,20,62}, -{67,20,63}, -{67,20,64}, -{67,20,65}, -{67,20,66}, -{67,20,67}, -{67,20,68}, -{67,20,69}, -{67,20,70}, -{67,20,71}, -{67,20,72}, -{67,21,-51}, -{67,21,-50}, -{67,21,-49}, -{67,21,-48}, -{67,21,-47}, -{67,21,-46}, -{67,21,-45}, -{67,21,-44}, -{67,21,-43}, -{67,21,-42}, -{67,21,-41}, -{67,21,-40}, -{67,21,-39}, -{67,21,-38}, -{67,21,-37}, -{67,21,-36}, -{67,21,-35}, -{67,21,-34}, -{67,21,-33}, -{67,21,-32}, -{67,21,-31}, -{67,21,-30}, -{67,21,-29}, -{67,21,-28}, -{67,21,-27}, -{67,21,-26}, -{67,21,-25}, -{67,21,-24}, -{67,21,-23}, -{67,21,-22}, -{67,21,-21}, -{67,21,-20}, -{67,21,-19}, -{67,21,-18}, -{67,21,-17}, -{67,21,-16}, -{67,21,-15}, -{67,21,-14}, -{67,21,-13}, -{67,21,-12}, -{67,21,-11}, -{67,21,-10}, -{67,21,-9}, -{67,21,-8}, -{67,21,-7}, -{67,21,-6}, -{67,21,-5}, -{67,21,-4}, -{67,21,-3}, -{67,21,-2}, -{67,21,-1}, -{67,21,0}, -{67,21,1}, -{67,21,2}, -{67,21,3}, -{67,21,4}, -{67,21,5}, -{67,21,6}, -{67,21,7}, -{67,21,8}, -{67,21,9}, -{67,21,10}, -{67,21,11}, -{67,21,12}, -{67,21,13}, -{67,21,14}, -{67,21,15}, -{67,21,16}, -{67,21,17}, -{67,21,18}, -{67,21,19}, -{67,21,20}, -{67,21,21}, -{67,21,22}, -{67,21,23}, -{67,21,24}, -{67,21,25}, -{67,21,26}, -{67,21,27}, -{67,21,28}, -{67,21,29}, -{67,21,30}, -{67,21,31}, -{67,21,32}, -{67,21,33}, -{67,21,34}, -{67,21,35}, -{67,21,36}, -{67,21,37}, -{67,21,38}, -{67,21,39}, -{67,21,40}, -{67,21,41}, -{67,21,42}, -{67,21,43}, -{67,21,44}, -{67,21,45}, -{67,21,46}, -{67,21,47}, -{67,21,48}, -{67,21,49}, -{67,21,50}, -{67,21,51}, -{67,21,52}, -{67,21,53}, -{67,21,54}, -{67,21,55}, -{67,21,56}, -{67,21,57}, -{67,21,58}, -{67,21,59}, -{67,21,60}, -{67,21,61}, -{67,21,62}, -{67,21,63}, -{67,21,64}, -{67,21,65}, -{67,21,66}, -{67,21,67}, -{67,21,68}, -{67,21,69}, -{67,21,70}, -{67,21,71}, -{67,21,72}, -{67,22,-51}, -{67,22,-50}, -{67,22,-49}, -{67,22,-48}, -{67,22,-47}, -{67,22,-46}, -{67,22,-45}, -{67,22,-44}, -{67,22,-43}, -{67,22,-42}, -{67,22,-41}, -{67,22,-40}, -{67,22,-39}, -{67,22,-38}, -{67,22,-37}, -{67,22,-36}, -{67,22,-35}, -{67,22,-34}, -{67,22,-33}, -{67,22,-32}, -{67,22,-31}, -{67,22,-30}, -{67,22,-29}, -{67,22,-28}, -{67,22,-27}, -{67,22,-26}, -{67,22,-25}, -{67,22,-24}, -{67,22,-23}, -{67,22,-22}, -{67,22,-21}, -{67,22,-20}, -{67,22,-19}, -{67,22,-18}, -{67,22,-17}, -{67,22,-16}, -{67,22,-15}, -{67,22,-14}, -{67,22,-13}, -{67,22,-12}, -{67,22,-11}, -{67,22,-10}, -{67,22,-9}, -{67,22,-8}, -{67,22,-7}, -{67,22,-6}, -{67,22,-5}, -{67,22,-4}, -{67,22,-3}, -{67,22,-2}, -{67,22,-1}, -{67,22,0}, -{67,22,1}, -{67,22,2}, -{67,22,3}, -{67,22,4}, -{67,22,5}, -{67,22,6}, -{67,22,7}, -{67,22,8}, -{67,22,9}, -{67,22,10}, -{67,22,11}, -{67,22,12}, -{67,22,13}, -{67,22,14}, -{67,22,15}, -{67,22,16}, -{67,22,17}, -{67,22,18}, -{67,22,19}, -{67,22,20}, -{67,22,21}, -{67,22,22}, -{67,22,23}, -{67,22,24}, -{67,22,25}, -{67,22,26}, -{67,22,27}, -{67,22,28}, -{67,22,29}, -{67,22,30}, -{67,22,31}, -{67,22,32}, -{67,22,33}, -{67,22,34}, -{67,22,35}, -{67,22,36}, -{67,22,37}, -{67,22,38}, -{67,22,39}, -{67,22,40}, -{67,22,41}, -{67,22,42}, -{67,22,43}, -{67,22,44}, -{67,22,45}, -{67,22,46}, -{67,22,47}, -{67,22,48}, -{67,22,49}, -{67,22,50}, -{67,22,51}, -{67,22,52}, -{67,22,53}, -{67,22,54}, -{67,22,55}, -{67,22,56}, -{67,22,57}, -{67,22,58}, -{67,22,59}, -{67,22,60}, -{67,22,61}, -{67,22,62}, -{67,22,63}, -{67,22,64}, -{67,22,65}, -{67,22,66}, -{67,22,67}, -{67,22,68}, -{67,22,69}, -{67,22,70}, -{67,22,71}, -{67,22,72}, -{67,23,-51}, -{67,23,-50}, -{67,23,-49}, -{67,23,-48}, -{67,23,-47}, -{67,23,-46}, -{67,23,-45}, -{67,23,-44}, -{67,23,-43}, -{67,23,-42}, -{67,23,-41}, -{67,23,-40}, -{67,23,-39}, -{67,23,-38}, -{67,23,-37}, -{67,23,-36}, -{67,23,-35}, -{67,23,-34}, -{67,23,-33}, -{67,23,-32}, -{67,23,-31}, -{67,23,-30}, -{67,23,-29}, -{67,23,-28}, -{67,23,-27}, -{67,23,-26}, -{67,23,-25}, -{67,23,-24}, -{67,23,-23}, -{67,23,-22}, -{67,23,-21}, -{67,23,-20}, -{67,23,-19}, -{67,23,-18}, -{67,23,-17}, -{67,23,-16}, -{67,23,-15}, -{67,23,-14}, -{67,23,-13}, -{67,23,-12}, -{67,23,-11}, -{67,23,-10}, -{67,23,-9}, -{67,23,-8}, -{67,23,-7}, -{67,23,-6}, -{67,23,-5}, -{67,23,-4}, -{67,23,-3}, -{67,23,-2}, -{67,23,-1}, -{67,23,0}, -{67,23,1}, -{67,23,2}, -{67,23,3}, -{67,23,4}, -{67,23,5}, -{67,23,6}, -{67,23,7}, -{67,23,8}, -{67,23,9}, -{67,23,10}, -{67,23,11}, -{67,23,12}, -{67,23,13}, -{67,23,14}, -{67,23,15}, -{67,23,16}, -{67,23,17}, -{67,23,18}, -{67,23,19}, -{67,23,20}, -{67,23,21}, -{67,23,22}, -{67,23,23}, -{67,23,24}, -{67,23,25}, -{67,23,26}, -{67,23,27}, -{67,23,28}, -{67,23,29}, -{67,23,30}, -{67,23,31}, -{67,23,32}, -{67,23,33}, -{67,23,34}, -{67,23,35}, -{67,23,36}, -{67,23,37}, -{67,23,38}, -{67,23,39}, -{67,23,40}, -{67,23,41}, -{67,23,42}, -{67,23,43}, -{67,23,44}, -{67,23,45}, -{67,23,46}, -{67,23,47}, -{67,23,48}, -{67,23,49}, -{67,23,50}, -{67,23,51}, -{67,23,52}, -{67,23,53}, -{67,23,54}, -{67,23,55}, -{67,23,56}, -{67,23,57}, -{67,23,58}, -{67,23,59}, -{67,23,60}, -{67,23,61}, -{67,23,62}, -{67,23,63}, -{67,23,64}, -{67,23,65}, -{67,23,66}, -{67,23,67}, -{67,23,68}, -{67,23,69}, -{67,23,70}, -{67,23,71}, -{67,23,72}, -{67,24,-51}, -{67,24,-50}, -{67,24,-49}, -{67,24,-48}, -{67,24,-47}, -{67,24,-46}, -{67,24,-45}, -{67,24,-44}, -{67,24,-43}, -{67,24,-42}, -{67,24,-41}, -{67,24,-40}, -{67,24,-39}, -{67,24,-38}, -{67,24,-37}, -{67,24,-36}, -{67,24,-35}, -{67,24,-34}, -{67,24,-33}, -{67,24,-32}, -{67,24,-31}, -{67,24,-30}, -{67,24,-29}, -{67,24,-28}, -{67,24,-27}, -{67,24,-26}, -{67,24,-25}, -{67,24,-24}, -{67,24,-23}, -{67,24,-22}, -{67,24,-21}, -{67,24,-20}, -{67,24,-19}, -{67,24,-18}, -{67,24,-17}, -{67,24,-16}, -{67,24,-15}, -{67,24,-14}, -{67,24,-13}, -{67,24,-12}, -{67,24,-11}, -{67,24,-10}, -{67,24,-9}, -{67,24,-8}, -{67,24,-7}, -{67,24,-6}, -{67,24,-5}, -{67,24,-4}, -{67,24,-3}, -{67,24,-2}, -{67,24,-1}, -{67,24,0}, -{67,24,1}, -{67,24,2}, -{67,24,3}, -{67,24,4}, -{67,24,5}, -{67,24,6}, -{67,24,7}, -{67,24,8}, -{67,24,9}, -{67,24,10}, -{67,24,11}, -{67,24,12}, -{67,24,13}, -{67,24,14}, -{67,24,15}, -{67,24,16}, -{67,24,17}, -{67,24,18}, -{67,24,19}, -{67,24,20}, -{67,24,21}, -{67,24,22}, -{67,24,23}, -{67,24,24}, -{67,24,25}, -{67,24,26}, -{67,24,27}, -{67,24,28}, -{67,24,29}, -{67,24,30}, -{67,24,31}, -{67,24,32}, -{67,24,33}, -{67,24,34}, -{67,24,35}, -{67,24,36}, -{67,24,37}, -{67,24,38}, -{67,24,39}, -{67,24,40}, -{67,24,41}, -{67,24,42}, -{67,24,43}, -{67,24,44}, -{67,24,45}, -{67,24,46}, -{67,24,47}, -{67,24,48}, -{67,24,49}, -{67,24,50}, -{67,24,51}, -{67,24,52}, -{67,24,53}, -{67,24,54}, -{67,24,55}, -{67,24,56}, -{67,24,57}, -{67,24,58}, -{67,24,59}, -{67,24,60}, -{67,24,61}, -{67,24,62}, -{67,24,63}, -{67,24,64}, -{67,24,65}, -{67,24,66}, -{67,24,67}, -{67,24,68}, -{67,24,69}, -{67,24,70}, -{67,24,71}, -{67,24,72}, -{67,25,-51}, -{67,25,-50}, -{67,25,-49}, -{67,25,-48}, -{67,25,-47}, -{67,25,-46}, -{67,25,-45}, -{67,25,-44}, -{67,25,-43}, -{67,25,-42}, -{67,25,-41}, -{67,25,-40}, -{67,25,-39}, -{67,25,-38}, -{67,25,-37}, -{67,25,-36}, -{67,25,-35}, -{67,25,-34}, -{67,25,-33}, -{67,25,-32}, -{67,25,-31}, -{67,25,-30}, -{67,25,-29}, -{67,25,-28}, -{67,25,-27}, -{67,25,-26}, -{67,25,-25}, -{67,25,-24}, -{67,25,-23}, -{67,25,-22}, -{67,25,-21}, -{67,25,-20}, -{67,25,-19}, -{67,25,-18}, -{67,25,-17}, -{67,25,-16}, -{67,25,-15}, -{67,25,-14}, -{67,25,-13}, -{67,25,-12}, -{67,25,-11}, -{67,25,-10}, -{67,25,-9}, -{67,25,-8}, -{67,25,-7}, -{67,25,-6}, -{67,25,-5}, -{67,25,-4}, -{67,25,-3}, -{67,25,-2}, -{67,25,-1}, -{67,25,0}, -{67,25,1}, -{67,25,2}, -{67,25,3}, -{67,25,4}, -{67,25,5}, -{67,25,6}, -{67,25,7}, -{67,25,8}, -{67,25,9}, -{67,25,10}, -{67,25,11}, -{67,25,12}, -{67,25,13}, -{67,25,14}, -{67,25,15}, -{67,25,16}, -{67,25,17}, -{67,25,18}, -{67,25,19}, -{67,25,20}, -{67,25,21}, -{67,25,22}, -{67,25,23}, -{67,25,24}, -{67,25,25}, -{67,25,26}, -{67,25,27}, -{67,25,28}, -{67,25,29}, -{67,25,30}, -{67,25,31}, -{67,25,32}, -{67,25,33}, -{67,25,34}, -{67,25,35}, -{67,25,36}, -{67,25,37}, -{67,25,38}, -{67,25,39}, -{67,25,40}, -{67,25,41}, -{67,25,42}, -{67,25,43}, -{67,25,44}, -{67,25,45}, -{67,25,46}, -{67,25,47}, -{67,25,48}, -{67,25,49}, -{67,25,50}, -{67,25,51}, -{67,25,52}, -{67,25,53}, -{67,25,54}, -{67,25,55}, -{67,25,56}, -{67,25,57}, -{67,25,58}, -{67,25,59}, -{67,25,60}, -{67,25,61}, -{67,25,62}, -{67,25,63}, -{67,25,64}, -{67,25,65}, -{67,25,66}, -{67,25,67}, -{67,25,68}, -{67,25,69}, -{67,25,70}, -{67,25,71}, -{67,25,72}, -{67,26,-51}, -{67,26,-50}, -{67,26,-49}, -{67,26,-48}, -{67,26,-47}, -{67,26,-46}, -{67,26,-45}, -{67,26,-44}, -{67,26,-43}, -{67,26,-42}, -{67,26,-41}, -{67,26,-40}, -{67,26,-39}, -{67,26,-38}, -{67,26,-37}, -{67,26,-36}, -{67,26,-35}, -{67,26,-34}, -{67,26,-33}, -{67,26,-32}, -{67,26,-31}, -{67,26,-30}, -{67,26,-29}, -{67,26,-28}, -{67,26,-27}, -{67,26,-26}, -{67,26,-25}, -{67,26,-24}, -{67,26,-23}, -{67,26,-22}, -{67,26,-21}, -{67,26,-20}, -{67,26,-19}, -{67,26,-18}, -{67,26,-17}, -{67,26,-16}, -{67,26,-15}, -{67,26,-14}, -{67,26,-13}, -{67,26,-12}, -{67,26,-11}, -{67,26,-10}, -{67,26,-9}, -{67,26,-8}, -{67,26,-7}, -{67,26,-6}, -{67,26,-5}, -{67,26,-4}, -{67,26,-3}, -{67,26,-2}, -{67,26,-1}, -{67,26,0}, -{67,26,1}, -{67,26,2}, -{67,26,3}, -{67,26,4}, -{67,26,5}, -{67,26,6}, -{67,26,7}, -{67,26,8}, -{67,26,9}, -{67,26,10}, -{67,26,11}, -{67,26,12}, -{67,26,13}, -{67,26,14}, -{67,26,15}, -{67,26,16}, -{67,26,17}, -{67,26,18}, -{67,26,19}, -{67,26,20}, -{67,26,21}, -{67,26,22}, -{67,26,23}, -{67,26,24}, -{67,26,25}, -{67,26,26}, -{67,26,27}, -{67,26,28}, -{67,26,29}, -{67,26,30}, -{67,26,31}, -{67,26,32}, -{67,26,33}, -{67,26,34}, -{67,26,35}, -{67,26,36}, -{67,26,37}, -{67,26,38}, -{67,26,39}, -{67,26,40}, -{67,26,41}, -{67,26,42}, -{67,26,43}, -{67,26,44}, -{67,26,45}, -{67,26,46}, -{67,26,47}, -{67,26,48}, -{67,26,49}, -{67,26,50}, -{67,26,51}, -{67,26,52}, -{67,26,53}, -{67,26,54}, -{67,26,55}, -{67,26,56}, -{67,26,57}, -{67,26,58}, -{67,26,59}, -{67,26,60}, -{67,26,61}, -{67,26,62}, -{67,26,63}, -{67,26,64}, -{67,26,65}, -{67,26,66}, -{67,26,67}, -{67,26,68}, -{67,26,69}, -{67,26,70}, -{67,26,71}, -{67,26,72}, -{67,27,-51}, -{67,27,-50}, -{67,27,-49}, -{67,27,-48}, -{67,27,-47}, -{67,27,-46}, -{67,27,-45}, -{67,27,-44}, -{67,27,-43}, -{67,27,-42}, -{67,27,-41}, -{67,27,-40}, -{67,27,-39}, -{67,27,-38}, -{67,27,-37}, -{67,27,-36}, -{67,27,-35}, -{67,27,-34}, -{67,27,-33}, -{67,27,-32}, -{67,27,-31}, -{67,27,-30}, -{67,27,-29}, -{67,27,-28}, -{67,27,-27}, -{67,27,-26}, -{67,27,-25}, -{67,27,-24}, -{67,27,-23}, -{67,27,-22}, -{67,27,-21}, -{67,27,-20}, -{67,27,-19}, -{67,27,-18}, -{67,27,-17}, -{67,27,-16}, -{67,27,-15}, -{67,27,-14}, -{67,27,-13}, -{67,27,-12}, -{67,27,-11}, -{67,27,-10}, -{67,27,-9}, -{67,27,-8}, -{67,27,-7}, -{67,27,-6}, -{67,27,-5}, -{67,27,-4}, -{67,27,-3}, -{67,27,-2}, -{67,27,-1}, -{67,27,0}, -{67,27,1}, -{67,27,2}, -{67,27,3}, -{67,27,4}, -{67,27,5}, -{67,27,6}, -{67,27,7}, -{67,27,8}, -{67,27,9}, -{67,27,10}, -{67,27,11}, -{67,27,12}, -{67,27,13}, -{67,27,14}, -{67,27,15}, -{67,27,16}, -{67,27,17}, -{67,27,18}, -{67,27,19}, -{67,27,20}, -{67,27,21}, -{67,27,22}, -{67,27,23}, -{67,27,24}, -{67,27,25}, -{67,27,26}, -{67,27,27}, -{67,27,28}, -{67,27,29}, -{67,27,30}, -{67,27,31}, -{67,27,32}, -{67,27,33}, -{67,27,34}, -{67,27,35}, -{67,27,36}, -{67,27,37}, -{67,27,38}, -{67,27,39}, -{67,27,40}, -{67,27,41}, -{67,27,42}, -{67,27,43}, -{67,27,44}, -{67,27,45}, -{67,27,46}, -{67,27,47}, -{67,27,48}, -{67,27,49}, -{67,27,50}, -{67,27,51}, -{67,27,52}, -{67,27,53}, -{67,27,54}, -{67,27,55}, -{67,27,56}, -{67,27,57}, -{67,27,58}, -{67,27,59}, -{67,27,60}, -{67,27,61}, -{67,27,62}, -{67,27,63}, -{67,27,64}, -{67,27,65}, -{67,27,66}, -{67,27,67}, -{67,27,68}, -{67,27,69}, -{67,27,70}, -{67,27,71}, -{67,27,72}, -{67,28,-51}, -{67,28,-50}, -{67,28,-49}, -{67,28,-48}, -{67,28,-47}, -{67,28,-46}, -{67,28,-45}, -{67,28,-44}, -{67,28,-43}, -{67,28,-42}, -{67,28,-41}, -{67,28,-40}, -{67,28,-39}, -{67,28,-38}, -{67,28,-37}, -{67,28,-36}, -{67,28,-35}, -{67,28,-34}, -{67,28,-33}, -{67,28,-32}, -{67,28,-31}, -{67,28,-30}, -{67,28,-29}, -{67,28,-28}, -{67,28,-27}, -{67,28,-26}, -{67,28,-25}, -{67,28,-24}, -{67,28,-23}, -{67,28,-22}, -{67,28,-21}, -{67,28,-20}, -{67,28,-19}, -{67,28,-18}, -{67,28,-17}, -{67,28,-16}, -{67,28,-15}, -{67,28,-14}, -{67,28,-13}, -{67,28,-12}, -{67,28,-11}, -{67,28,-10}, -{67,28,-9}, -{67,28,-8}, -{67,28,-7}, -{67,28,-6}, -{67,28,-5}, -{67,28,-4}, -{67,28,-3}, -{67,28,-2}, -{67,28,-1}, -{67,28,0}, -{67,28,1}, -{67,28,2}, -{67,28,3}, -{67,28,4}, -{67,28,5}, -{67,28,6}, -{67,28,7}, -{67,28,8}, -{67,28,9}, -{67,28,10}, -{67,28,11}, -{67,28,12}, -{67,28,13}, -{67,28,14}, -{67,28,15}, -{67,28,16}, -{67,28,17}, -{67,28,18}, -{67,28,19}, -{67,28,20}, -{67,28,21}, -{67,28,22}, -{67,28,23}, -{67,28,24}, -{67,28,25}, -{67,28,26}, -{67,28,27}, -{67,28,28}, -{67,28,29}, -{67,28,30}, -{67,28,31}, -{67,28,32}, -{67,28,33}, -{67,28,34}, -{67,28,35}, -{67,28,36}, -{67,28,37}, -{67,28,38}, -{67,28,39}, -{67,28,40}, -{67,28,41}, -{67,28,42}, -{67,28,43}, -{67,28,44}, -{67,28,45}, -{67,28,46}, -{67,28,47}, -{67,28,48}, -{67,28,49}, -{67,28,50}, -{67,28,51}, -{67,28,52}, -{67,28,53}, -{67,28,54}, -{67,28,55}, -{67,28,56}, -{67,28,57}, -{67,28,58}, -{67,28,59}, -{67,28,60}, -{67,28,61}, -{67,28,62}, -{67,28,63}, -{67,28,64}, -{67,28,65}, -{67,28,66}, -{67,28,67}, -{67,28,68}, -{67,28,69}, -{67,28,70}, -{67,28,71}, -{67,28,72}, -{67,29,-51}, -{67,29,-50}, -{67,29,-49}, -{67,29,-48}, -{67,29,-47}, -{67,29,-46}, -{67,29,-45}, -{67,29,-44}, -{67,29,-43}, -{67,29,-42}, -{67,29,-41}, -{67,29,-40}, -{67,29,-39}, -{67,29,-38}, -{67,29,-37}, -{67,29,-36}, -{67,29,-35}, -{67,29,-34}, -{67,29,-33}, -{67,29,-32}, -{67,29,-31}, -{67,29,-30}, -{67,29,-29}, -{67,29,-28}, -{67,29,-27}, -{67,29,-26}, -{67,29,-25}, -{67,29,-24}, -{67,29,-23}, -{67,29,-22}, -{67,29,-21}, -{67,29,-20}, -{67,29,-19}, -{67,29,-18}, -{67,29,-17}, -{67,29,-16}, -{67,29,-15}, -{67,29,-14}, -{67,29,-13}, -{67,29,-12}, -{67,29,-11}, -{67,29,-10}, -{67,29,-9}, -{67,29,-8}, -{67,29,-7}, -{67,29,-6}, -{67,29,-5}, -{67,29,-4}, -{67,29,-3}, -{67,29,-2}, -{67,29,-1}, -{67,29,0}, -{67,29,1}, -{67,29,2}, -{67,29,3}, -{67,29,4}, -{67,29,5}, -{67,29,6}, -{67,29,7}, -{67,29,8}, -{67,29,9}, -{67,29,10}, -{67,29,11}, -{67,29,12}, -{67,29,13}, -{67,29,14}, -{67,29,15}, -{67,29,16}, -{67,29,17}, -{67,29,18}, -{67,29,19}, -{67,29,20}, -{67,29,21}, -{67,29,22}, -{67,29,23}, -{67,29,24}, -{67,29,25}, -{67,29,26}, -{67,29,27}, -{67,29,28}, -{67,29,29}, -{67,29,30}, -{67,29,31}, -{67,29,32}, -{67,29,33}, -{67,29,34}, -{67,29,35}, -{67,29,36}, -{67,29,37}, -{67,29,38}, -{67,29,39}, -{67,29,40}, -{67,29,41}, -{67,29,42}, -{67,29,43}, -{67,29,44}, -{67,29,45}, -{67,29,46}, -{67,29,47}, -{67,29,48}, -{67,29,49}, -{67,29,50}, -{67,29,51}, -{67,29,52}, -{67,29,53}, -{67,29,54}, -{67,29,55}, -{67,29,56}, -{67,29,57}, -{67,29,58}, -{67,29,59}, -{67,29,60}, -{67,29,61}, -{67,29,62}, -{67,29,63}, -{67,29,64}, -{67,29,65}, -{67,29,66}, -{67,29,67}, -{67,29,68}, -{67,29,69}, -{67,29,70}, -{67,29,71}, -{67,29,72}, -{67,30,-51}, -{67,30,-50}, -{67,30,-49}, -{67,30,-48}, -{67,30,-47}, -{67,30,-46}, -{67,30,-45}, -{67,30,-44}, -{67,30,-43}, -{67,30,-42}, -{67,30,-41}, -{67,30,-40}, -{67,30,-39}, -{67,30,-38}, -{67,30,-37}, -{67,30,-36}, -{67,30,-35}, -{67,30,-34}, -{67,30,-33}, -{67,30,-32}, -{67,30,-31}, -{67,30,-30}, -{67,30,-29}, -{67,30,-28}, -{67,30,-27}, -{67,30,-26}, -{67,30,-25}, -{67,30,-24}, -{67,30,-23}, -{67,30,-22}, -{67,30,-21}, -{67,30,-20}, -{67,30,-19}, -{67,30,-18}, -{67,30,-17}, -{67,30,-16}, -{67,30,-15}, -{67,30,-14}, -{67,30,-13}, -{67,30,-12}, -{67,30,-11}, -{67,30,-10}, -{67,30,-9}, -{67,30,-8}, -{67,30,-7}, -{67,30,-6}, -{67,30,-5}, -{67,30,-4}, -{67,30,-3}, -{67,30,-2}, -{67,30,-1}, -{67,30,0}, -{67,30,1}, -{67,30,2}, -{67,30,3}, -{67,30,4}, -{67,30,5}, -{67,30,6}, -{67,30,7}, -{67,30,8}, -{67,30,9}, -{67,30,10}, -{67,30,11}, -{67,30,12}, -{67,30,13}, -{67,30,14}, -{67,30,15}, -{67,30,16}, -{67,30,17}, -{67,30,18}, -{67,30,19}, -{67,30,20}, -{67,30,21}, -{67,30,22}, -{67,30,23}, -{67,30,24}, -{67,30,25}, -{67,30,26}, -{67,30,27}, -{67,30,28}, -{67,30,29}, -{67,30,30}, -{67,30,31}, -{67,30,32}, -{67,30,33}, -{67,30,34}, -{67,30,35}, -{67,30,36}, -{67,30,37}, -{67,30,38}, -{67,30,39}, -{67,30,40}, -{67,30,41}, -{67,30,42}, -{67,30,43}, -{67,30,44}, -{67,30,45}, -{67,30,46}, -{67,30,47}, -{67,30,48}, -{67,30,49}, -{67,30,50}, -{67,30,51}, -{67,30,52}, -{67,30,53}, -{67,30,54}, -{67,30,55}, -{67,30,56}, -{67,30,57}, -{67,30,58}, -{67,30,59}, -{67,30,60}, -{67,30,61}, -{67,30,62}, -{67,30,63}, -{67,30,64}, -{67,30,65}, -{67,30,66}, -{67,30,67}, -{67,30,68}, -{67,30,69}, -{67,30,70}, -{67,30,71}, -{67,30,72}, -{67,31,-51}, -{67,31,-50}, -{67,31,-49}, -{67,31,-48}, -{67,31,-47}, -{67,31,-46}, -{67,31,-45}, -{67,31,-44}, -{67,31,-43}, -{67,31,-42}, -{67,31,-41}, -{67,31,-40}, -{67,31,-39}, -{67,31,-38}, -{67,31,-37}, -{67,31,-36}, -{67,31,-35}, -{67,31,-34}, -{67,31,-33}, -{67,31,-32}, -{67,31,-31}, -{67,31,-30}, -{67,31,-29}, -{67,31,-28}, -{67,31,-27}, -{67,31,-26}, -{67,31,-25}, -{67,31,-24}, -{67,31,-23}, -{67,31,-22}, -{67,31,-21}, -{67,31,-20}, -{67,31,-19}, -{67,31,-18}, -{67,31,-17}, -{67,31,-16}, -{67,31,-15}, -{67,31,-14}, -{67,31,-13}, -{67,31,-12}, -{67,31,-11}, -{67,31,-10}, -{67,31,-9}, -{67,31,-8}, -{67,31,-7}, -{67,31,-6}, -{67,31,-5}, -{67,31,-4}, -{67,31,-3}, -{67,31,-2}, -{67,31,-1}, -{67,31,0}, -{67,31,1}, -{67,31,2}, -{67,31,3}, -{67,31,4}, -{67,31,5}, -{67,31,6}, -{67,31,7}, -{67,31,8}, -{67,31,9}, -{67,31,10}, -{67,31,11}, -{67,31,12}, -{67,31,13}, -{67,31,14}, -{67,31,15}, -{67,31,16}, -{67,31,17}, -{67,31,18}, -{67,31,19}, -{67,31,20}, -{67,31,21}, -{67,31,22}, -{67,31,23}, -{67,31,24}, -{67,31,25}, -{67,31,26}, -{67,31,27}, -{67,31,28}, -{67,31,29}, -{67,31,30}, -{67,31,31}, -{67,31,32}, -{67,31,33}, -{67,31,34}, -{67,31,35}, -{67,31,36}, -{67,31,37}, -{67,31,38}, -{67,31,39}, -{67,31,40}, -{67,31,41}, -{67,31,42}, -{67,31,43}, -{67,31,44}, -{67,31,45}, -{67,31,46}, -{67,31,47}, -{67,31,48}, -{67,31,49}, -{67,31,50}, -{67,31,51}, -{67,31,52}, -{67,31,53}, -{67,31,54}, -{67,31,55}, -{67,31,56}, -{67,31,57}, -{67,31,58}, -{67,31,59}, -{67,31,60}, -{67,31,61}, -{67,31,62}, -{67,31,63}, -{67,31,64}, -{67,31,65}, -{67,31,66}, -{67,31,67}, -{67,31,68}, -{67,31,69}, -{67,31,70}, -{67,31,71}, -{67,31,72}, -{67,31,73}, -{67,32,-50}, -{67,32,-49}, -{67,32,-48}, -{67,32,-47}, -{67,32,-46}, -{67,32,-45}, -{67,32,-44}, -{67,32,-43}, -{67,32,-42}, -{67,32,-41}, -{67,32,-40}, -{67,32,-39}, -{67,32,-38}, -{67,32,-37}, -{67,32,-36}, -{67,32,-35}, -{67,32,-34}, -{67,32,-33}, -{67,32,-32}, -{67,32,-31}, -{67,32,-30}, -{67,32,-29}, -{67,32,-28}, -{67,32,-27}, -{67,32,-26}, -{67,32,-25}, -{67,32,-24}, -{67,32,-23}, -{67,32,-22}, -{67,32,-21}, -{67,32,-20}, -{67,32,-19}, -{67,32,-18}, -{67,32,-17}, -{67,32,-16}, -{67,32,-15}, -{67,32,-14}, -{67,32,-13}, -{67,32,-12}, -{67,32,-11}, -{67,32,-10}, -{67,32,-9}, -{67,32,-8}, -{67,32,-7}, -{67,32,-6}, -{67,32,-5}, -{67,32,-4}, -{67,32,-3}, -{67,32,-2}, -{67,32,-1}, -{67,32,0}, -{67,32,1}, -{67,32,2}, -{67,32,3}, -{67,32,4}, -{67,32,5}, -{67,32,6}, -{67,32,7}, -{67,32,8}, -{67,32,9}, -{67,32,10}, -{67,32,11}, -{67,32,12}, -{67,32,13}, -{67,32,14}, -{67,32,15}, -{67,32,16}, -{67,32,17}, -{67,32,18}, -{67,32,19}, -{67,32,20}, -{67,32,21}, -{67,32,22}, -{67,32,23}, -{67,32,24}, -{67,32,25}, -{67,32,26}, -{67,32,27}, -{67,32,28}, -{67,32,29}, -{67,32,30}, -{67,32,31}, -{67,32,32}, -{67,32,33}, -{67,32,34}, -{67,32,35}, -{67,32,36}, -{67,32,37}, -{67,32,38}, -{67,32,39}, -{67,32,40}, -{67,32,41}, -{67,32,42}, -{67,32,43}, -{67,32,44}, -{67,32,45}, -{67,32,46}, -{67,32,47}, -{67,32,48}, -{67,32,49}, -{67,32,50}, -{67,32,51}, -{67,32,52}, -{67,32,53}, -{67,32,54}, -{67,32,55}, -{67,32,56}, -{67,32,57}, -{67,32,58}, -{67,32,59}, -{67,32,60}, -{67,32,61}, -{67,32,62}, -{67,32,63}, -{67,32,64}, -{67,32,65}, -{67,32,66}, -{67,32,67}, -{67,32,68}, -{67,32,69}, -{67,32,70}, -{67,32,71}, -{67,32,72}, -{67,32,73}, -{67,33,-50}, -{67,33,-49}, -{67,33,-48}, -{67,33,-47}, -{67,33,-46}, -{67,33,-45}, -{67,33,-44}, -{67,33,-43}, -{67,33,-42}, -{67,33,-41}, -{67,33,-40}, -{67,33,-39}, -{67,33,-38}, -{67,33,-37}, -{67,33,-36}, -{67,33,-35}, -{67,33,-34}, -{67,33,-33}, -{67,33,-32}, -{67,33,-31}, -{67,33,-30}, -{67,33,-29}, -{67,33,-28}, -{67,33,-27}, -{67,33,-26}, -{67,33,-25}, -{67,33,-24}, -{67,33,-23}, -{67,33,-22}, -{67,33,-21}, -{67,33,-20}, -{67,33,-19}, -{67,33,-18}, -{67,33,-17}, -{67,33,-16}, -{67,33,-15}, -{67,33,-14}, -{67,33,-13}, -{67,33,-12}, -{67,33,-11}, -{67,33,-10}, -{67,33,-9}, -{67,33,-8}, -{67,33,-7}, -{67,33,-6}, -{67,33,-5}, -{67,33,-4}, -{67,33,-3}, -{67,33,-2}, -{67,33,-1}, -{67,33,0}, -{67,33,1}, -{67,33,2}, -{67,33,3}, -{67,33,4}, -{67,33,5}, -{67,33,6}, -{67,33,7}, -{67,33,8}, -{67,33,9}, -{67,33,10}, -{67,33,11}, -{67,33,12}, -{67,33,13}, -{67,33,14}, -{67,33,15}, -{67,33,16}, -{67,33,17}, -{67,33,18}, -{67,33,19}, -{67,33,20}, -{67,33,21}, -{67,33,22}, -{67,33,23}, -{67,33,24}, -{67,33,25}, -{67,33,26}, -{67,33,27}, -{67,33,28}, -{67,33,29}, -{67,33,30}, -{67,33,31}, -{67,33,32}, -{67,33,33}, -{67,33,34}, -{67,33,35}, -{67,33,36}, -{67,33,37}, -{67,33,38}, -{67,33,39}, -{67,33,40}, -{67,33,41}, -{67,33,42}, -{67,33,43}, -{67,33,44}, -{67,33,45}, -{67,33,46}, -{67,33,47}, -{67,33,48}, -{67,33,49}, -{67,33,50}, -{67,33,51}, -{67,33,52}, -{67,33,53}, -{67,33,54}, -{67,33,55}, -{67,33,56}, -{67,33,57}, -{67,33,58}, -{67,33,59}, -{67,33,60}, -{67,33,61}, -{67,33,62}, -{67,33,63}, -{67,33,64}, -{67,33,65}, -{67,33,66}, -{67,33,67}, -{67,33,68}, -{67,33,69}, -{67,33,70}, -{67,33,71}, -{67,33,72}, -{67,33,73}, -{67,34,-50}, -{67,34,-49}, -{67,34,-48}, -{67,34,-47}, -{67,34,-46}, -{67,34,-45}, -{67,34,-44}, -{67,34,-43}, -{67,34,-42}, -{67,34,-41}, -{67,34,-40}, -{67,34,-39}, -{67,34,-38}, -{67,34,-37}, -{67,34,-36}, -{67,34,-35}, -{67,34,-34}, -{67,34,-33}, -{67,34,-32}, -{67,34,-31}, -{67,34,-30}, -{67,34,-29}, -{67,34,-28}, -{67,34,-27}, -{67,34,-26}, -{67,34,-25}, -{67,34,-24}, -{67,34,-23}, -{67,34,-22}, -{67,34,-21}, -{67,34,-20}, -{67,34,-19}, -{67,34,-18}, -{67,34,-17}, -{67,34,-16}, -{67,34,-15}, -{67,34,-14}, -{67,34,-13}, -{67,34,-12}, -{67,34,-11}, -{67,34,-10}, -{67,34,-9}, -{67,34,-8}, -{67,34,-7}, -{67,34,-6}, -{67,34,-5}, -{67,34,-4}, -{67,34,-3}, -{67,34,-2}, -{67,34,-1}, -{67,34,0}, -{67,34,1}, -{67,34,2}, -{67,34,3}, -{67,34,4}, -{67,34,5}, -{67,34,6}, -{67,34,7}, -{67,34,8}, -{67,34,9}, -{67,34,10}, -{67,34,11}, -{67,34,12}, -{67,34,13}, -{67,34,14}, -{67,34,15}, -{67,34,16}, -{67,34,17}, -{67,34,18}, -{67,34,19}, -{67,34,20}, -{67,34,21}, -{67,34,22}, -{67,34,23}, -{67,34,24}, -{67,34,25}, -{67,34,26}, -{67,34,27}, -{67,34,28}, -{67,34,29}, -{67,34,30}, -{67,34,31}, -{67,34,32}, -{67,34,33}, -{67,34,34}, -{67,34,35}, -{67,34,36}, -{67,34,37}, -{67,34,38}, -{67,34,39}, -{67,34,40}, -{67,34,41}, -{67,34,42}, -{67,34,43}, -{67,34,44}, -{67,34,45}, -{67,34,46}, -{67,34,47}, -{67,34,48}, -{67,34,49}, -{67,34,50}, -{67,34,51}, -{67,34,52}, -{67,34,53}, -{67,34,54}, -{67,34,55}, -{67,34,56}, -{67,34,57}, -{67,34,58}, -{67,34,59}, -{67,34,60}, -{67,34,61}, -{67,34,62}, -{67,34,63}, -{67,34,64}, -{67,34,65}, -{67,34,66}, -{67,34,67}, -{67,34,68}, -{67,34,69}, -{67,34,70}, -{67,34,71}, -{67,34,72}, -{67,34,73}, -{67,35,-50}, -{67,35,-49}, -{67,35,-48}, -{67,35,-47}, -{67,35,-46}, -{67,35,-45}, -{67,35,-44}, -{67,35,-43}, -{67,35,-42}, -{67,35,-41}, -{67,35,-40}, -{67,35,-39}, -{67,35,-38}, -{67,35,-37}, -{67,35,-36}, -{67,35,-35}, -{67,35,-34}, -{67,35,-33}, -{67,35,-32}, -{67,35,-31}, -{67,35,-30}, -{67,35,-29}, -{67,35,-28}, -{67,35,-27}, -{67,35,-26}, -{67,35,-25}, -{67,35,-24}, -{67,35,-23}, -{67,35,-22}, -{67,35,-21}, -{67,35,-20}, -{67,35,-19}, -{67,35,-18}, -{67,35,-17}, -{67,35,-16}, -{67,35,-15}, -{67,35,-14}, -{67,35,-13}, -{67,35,-12}, -{67,35,-11}, -{67,35,-10}, -{67,35,-9}, -{67,35,-8}, -{67,35,-7}, -{67,35,-6}, -{67,35,-5}, -{67,35,-4}, -{67,35,-3}, -{67,35,-2}, -{67,35,-1}, -{67,35,0}, -{67,35,1}, -{67,35,2}, -{67,35,3}, -{67,35,4}, -{67,35,5}, -{67,35,6}, -{67,35,7}, -{67,35,8}, -{67,35,9}, -{67,35,10}, -{67,35,11}, -{67,35,12}, -{67,35,13}, -{67,35,14}, -{67,35,15}, -{67,35,16}, -{67,35,17}, -{67,35,18}, -{67,35,19}, -{67,35,20}, -{67,35,21}, -{67,35,22}, -{67,35,23}, -{67,35,24}, -{67,35,25}, -{67,35,26}, -{67,35,27}, -{67,35,28}, -{67,35,29}, -{67,35,30}, -{67,35,31}, -{67,35,32}, -{67,35,33}, -{67,35,34}, -{67,35,35}, -{67,35,36}, -{67,35,37}, -{67,35,38}, -{67,35,39}, -{67,35,40}, -{67,35,41}, -{67,35,42}, -{67,35,43}, -{67,35,44}, -{67,35,45}, -{67,35,46}, -{67,35,47}, -{67,35,48}, -{67,35,49}, -{67,35,50}, -{67,35,51}, -{67,35,52}, -{67,35,53}, -{67,35,54}, -{67,35,55}, -{67,35,56}, -{67,35,57}, -{67,35,58}, -{67,35,59}, -{67,35,60}, -{67,35,61}, -{67,35,62}, -{67,35,63}, -{67,35,64}, -{67,35,65}, -{67,35,66}, -{67,35,67}, -{67,35,68}, -{67,35,69}, -{67,35,70}, -{67,35,71}, -{67,35,72}, -{67,35,73}, -{67,36,-50}, -{67,36,-49}, -{67,36,-48}, -{67,36,-47}, -{67,36,-46}, -{67,36,-45}, -{67,36,-44}, -{67,36,-43}, -{67,36,-42}, -{67,36,-41}, -{67,36,-40}, -{67,36,-39}, -{67,36,-38}, -{67,36,-37}, -{67,36,-36}, -{67,36,-35}, -{67,36,-34}, -{67,36,-33}, -{67,36,-32}, -{67,36,-31}, -{67,36,-30}, -{67,36,-29}, -{67,36,-28}, -{67,36,-27}, -{67,36,-26}, -{67,36,-25}, -{67,36,-24}, -{67,36,-23}, -{67,36,-22}, -{67,36,-21}, -{67,36,-20}, -{67,36,-19}, -{67,36,-18}, -{67,36,-17}, -{67,36,-16}, -{67,36,-15}, -{67,36,-14}, -{67,36,-13}, -{67,36,-12}, -{67,36,-11}, -{67,36,-10}, -{67,36,-9}, -{67,36,-8}, -{67,36,-7}, -{67,36,-6}, -{67,36,-5}, -{67,36,-4}, -{67,36,-3}, -{67,36,-2}, -{67,36,-1}, -{67,36,0}, -{67,36,1}, -{67,36,2}, -{67,36,3}, -{67,36,4}, -{67,36,5}, -{67,36,6}, -{67,36,7}, -{67,36,8}, -{67,36,9}, -{67,36,10}, -{67,36,11}, -{67,36,12}, -{67,36,13}, -{67,36,14}, -{67,36,15}, -{67,36,16}, -{67,36,17}, -{67,36,18}, -{67,36,19}, -{67,36,20}, -{67,36,21}, -{67,36,22}, -{67,36,23}, -{67,36,24}, -{67,36,25}, -{67,36,26}, -{67,36,27}, -{67,36,28}, -{67,36,29}, -{67,36,30}, -{67,36,31}, -{67,36,32}, -{67,36,33}, -{67,36,34}, -{67,36,35}, -{67,36,36}, -{67,36,37}, -{67,36,38}, -{67,36,39}, -{67,36,40}, -{67,36,41}, -{67,36,42}, -{67,36,43}, -{67,36,44}, -{67,36,45}, -{67,36,46}, -{67,36,47}, -{67,36,48}, -{67,36,49}, -{67,36,50}, -{67,36,51}, -{67,36,52}, -{67,36,53}, -{67,36,54}, -{67,36,55}, -{67,36,56}, -{67,36,57}, -{67,36,58}, -{67,36,59}, -{67,36,60}, -{67,36,61}, -{67,36,62}, -{67,36,63}, -{67,36,64}, -{67,36,65}, -{67,36,66}, -{67,36,67}, -{67,36,68}, -{67,36,69}, -{67,36,70}, -{67,36,71}, -{67,36,72}, -{67,36,73}, -{67,37,-50}, -{67,37,-49}, -{67,37,-48}, -{67,37,-47}, -{67,37,-46}, -{67,37,-45}, -{67,37,-44}, -{67,37,-43}, -{67,37,-42}, -{67,37,-41}, -{67,37,-40}, -{67,37,-39}, -{67,37,-38}, -{67,37,-37}, -{67,37,-36}, -{67,37,-35}, -{67,37,-34}, -{67,37,-33}, -{67,37,-32}, -{67,37,-31}, -{67,37,-30}, -{67,37,-29}, -{67,37,-28}, -{67,37,-27}, -{67,37,-26}, -{67,37,-25}, -{67,37,-24}, -{67,37,-23}, -{67,37,-22}, -{67,37,-21}, -{67,37,-20}, -{67,37,-19}, -{67,37,-18}, -{67,37,-17}, -{67,37,-16}, -{67,37,-15}, -{67,37,-14}, -{67,37,-13}, -{67,37,-12}, -{67,37,-11}, -{67,37,-10}, -{67,37,-9}, -{67,37,-8}, -{67,37,-7}, -{67,37,-6}, -{67,37,-5}, -{67,37,-4}, -{67,37,-3}, -{67,37,-2}, -{67,37,-1}, -{67,37,0}, -{67,37,1}, -{67,37,2}, -{67,37,3}, -{67,37,4}, -{67,37,5}, -{67,37,6}, -{67,37,7}, -{67,37,8}, -{67,37,9}, -{67,37,10}, -{67,37,11}, -{67,37,12}, -{67,37,13}, -{67,37,14}, -{67,37,15}, -{67,37,16}, -{67,37,17}, -{67,37,18}, -{67,37,19}, -{67,37,20}, -{67,37,21}, -{67,37,22}, -{67,37,23}, -{67,37,24}, -{67,37,25}, -{67,37,26}, -{67,37,27}, -{67,37,28}, -{67,37,29}, -{67,37,30}, -{67,37,31}, -{67,37,32}, -{67,37,33}, -{67,37,34}, -{67,37,35}, -{67,37,36}, -{67,37,37}, -{67,37,38}, -{67,37,39}, -{67,37,40}, -{67,37,41}, -{67,37,42}, -{67,37,43}, -{67,37,44}, -{67,37,45}, -{67,37,46}, -{67,37,47}, -{67,37,48}, -{67,37,49}, -{67,37,50}, -{67,37,51}, -{67,37,52}, -{67,37,53}, -{67,37,54}, -{67,37,55}, -{67,37,56}, -{67,37,57}, -{67,37,58}, -{67,37,59}, -{67,37,60}, -{67,37,61}, -{67,37,62}, -{67,37,63}, -{67,37,64}, -{67,37,65}, -{67,37,66}, -{67,37,67}, -{67,37,68}, -{67,37,69}, -{67,37,70}, -{67,37,71}, -{67,37,72}, -{67,37,73}, -{67,38,-50}, -{67,38,-49}, -{67,38,-48}, -{67,38,-47}, -{67,38,-46}, -{67,38,-45}, -{67,38,-44}, -{67,38,-43}, -{67,38,-42}, -{67,38,-41}, -{67,38,-40}, -{67,38,-39}, -{67,38,-38}, -{67,38,-37}, -{67,38,-36}, -{67,38,-35}, -{67,38,-34}, -{67,38,-33}, -{67,38,-32}, -{67,38,-31}, -{67,38,-30}, -{67,38,-29}, -{67,38,-28}, -{67,38,-27}, -{67,38,-26}, -{67,38,-25}, -{67,38,-24}, -{67,38,-23}, -{67,38,-22}, -{67,38,-21}, -{67,38,-20}, -{67,38,-19}, -{67,38,-18}, -{67,38,-17}, -{67,38,-16}, -{67,38,-15}, -{67,38,-14}, -{67,38,-13}, -{67,38,-12}, -{67,38,-11}, -{67,38,-10}, -{67,38,-9}, -{67,38,-8}, -{67,38,-7}, -{67,38,-6}, -{67,38,-5}, -{67,38,-4}, -{67,38,-3}, -{67,38,-2}, -{67,38,-1}, -{67,38,0}, -{67,38,1}, -{67,38,2}, -{67,38,3}, -{67,38,4}, -{67,38,5}, -{67,38,6}, -{67,38,7}, -{67,38,8}, -{67,38,9}, -{67,38,10}, -{67,38,11}, -{67,38,12}, -{67,38,13}, -{67,38,14}, -{67,38,15}, -{67,38,16}, -{67,38,17}, -{67,38,18}, -{67,38,19}, -{67,38,20}, -{67,38,21}, -{67,38,22}, -{67,38,23}, -{67,38,24}, -{67,38,25}, -{67,38,26}, -{67,38,27}, -{67,38,28}, -{67,38,29}, -{67,38,30}, -{67,38,31}, -{67,38,32}, -{67,38,33}, -{67,38,34}, -{67,38,35}, -{67,38,36}, -{67,38,37}, -{67,38,38}, -{67,38,39}, -{67,38,40}, -{67,38,41}, -{67,38,42}, -{67,38,43}, -{67,38,44}, -{67,38,45}, -{67,38,46}, -{67,38,47}, -{67,38,48}, -{67,38,49}, -{67,38,50}, -{67,38,51}, -{67,38,52}, -{67,38,53}, -{67,38,54}, -{67,38,55}, -{67,38,56}, -{67,38,57}, -{67,38,58}, -{67,38,59}, -{67,38,60}, -{67,38,61}, -{67,38,62}, -{67,38,63}, -{67,38,64}, -{67,38,65}, -{67,38,66}, -{67,38,67}, -{67,38,68}, -{67,38,69}, -{67,38,70}, -{67,38,71}, -{67,38,72}, -{67,38,73}, -{67,39,-50}, -{67,39,-49}, -{67,39,-48}, -{67,39,-47}, -{67,39,-46}, -{67,39,-45}, -{67,39,-44}, -{67,39,-43}, -{67,39,-42}, -{67,39,-41}, -{67,39,-40}, -{67,39,-39}, -{67,39,-38}, -{67,39,-37}, -{67,39,-36}, -{67,39,-35}, -{67,39,-34}, -{67,39,-33}, -{67,39,-32}, -{67,39,-31}, -{67,39,-30}, -{67,39,-29}, -{67,39,-28}, -{67,39,-27}, -{67,39,-26}, -{67,39,-25}, -{67,39,-24}, -{67,39,-23}, -{67,39,-22}, -{67,39,-21}, -{67,39,-20}, -{67,39,-19}, -{67,39,-18}, -{67,39,-17}, -{67,39,-16}, -{67,39,-15}, -{67,39,-14}, -{67,39,-13}, -{67,39,-12}, -{67,39,-11}, -{67,39,-10}, -{67,39,-9}, -{67,39,-8}, -{67,39,-7}, -{67,39,-6}, -{67,39,-5}, -{67,39,-4}, -{67,39,-3}, -{67,39,-2}, -{67,39,-1}, -{67,39,0}, -{67,39,1}, -{67,39,2}, -{67,39,3}, -{67,39,4}, -{67,39,5}, -{67,39,6}, -{67,39,7}, -{67,39,8}, -{67,39,9}, -{67,39,10}, -{67,39,11}, -{67,39,12}, -{67,39,13}, -{67,39,14}, -{67,39,15}, -{67,39,16}, -{67,39,17}, -{67,39,18}, -{67,39,19}, -{67,39,20}, -{67,39,21}, -{67,39,22}, -{67,39,23}, -{67,39,24}, -{67,39,25}, -{67,39,26}, -{67,39,27}, -{67,39,28}, -{67,39,29}, -{67,39,30}, -{67,39,31}, -{67,39,32}, -{67,39,33}, -{67,39,34}, -{67,39,35}, -{67,39,36}, -{67,39,37}, -{67,39,38}, -{67,39,39}, -{67,39,40}, -{67,39,41}, -{67,39,42}, -{67,39,43}, -{67,39,44}, -{67,39,45}, -{67,39,46}, -{67,39,47}, -{67,39,48}, -{67,39,49}, -{67,39,50}, -{67,39,51}, -{67,39,52}, -{67,39,53}, -{67,39,54}, -{67,39,55}, -{67,39,56}, -{67,39,57}, -{67,39,58}, -{67,39,59}, -{67,39,60}, -{67,39,61}, -{67,39,62}, -{67,39,63}, -{67,39,64}, -{67,39,65}, -{67,39,66}, -{67,39,67}, -{67,39,68}, -{67,39,69}, -{67,39,70}, -{67,39,71}, -{67,39,72}, -{67,39,73}, -{67,40,-50}, -{67,40,-49}, -{67,40,-48}, -{67,40,-47}, -{67,40,-46}, -{67,40,-45}, -{67,40,-44}, -{67,40,-43}, -{67,40,-42}, -{67,40,-41}, -{67,40,-40}, -{67,40,-39}, -{67,40,-38}, -{67,40,-37}, -{67,40,-36}, -{67,40,-35}, -{67,40,-34}, -{67,40,-33}, -{67,40,-32}, -{67,40,-31}, -{67,40,-30}, -{67,40,-29}, -{67,40,-28}, -{67,40,-27}, -{67,40,-26}, -{67,40,-25}, -{67,40,-24}, -{67,40,-23}, -{67,40,-22}, -{67,40,-21}, -{67,40,-20}, -{67,40,-19}, -{67,40,-18}, -{67,40,-17}, -{67,40,-16}, -{67,40,-15}, -{67,40,-14}, -{67,40,-13}, -{67,40,-12}, -{67,40,-11}, -{67,40,-10}, -{67,40,-9}, -{67,40,-8}, -{67,40,-7}, -{67,40,-6}, -{67,40,-5}, -{67,40,-4}, -{67,40,-3}, -{67,40,-2}, -{67,40,-1}, -{67,40,0}, -{67,40,1}, -{67,40,2}, -{67,40,3}, -{67,40,4}, -{67,40,5}, -{67,40,6}, -{67,40,7}, -{67,40,8}, -{67,40,9}, -{67,40,10}, -{67,40,11}, -{67,40,12}, -{67,40,13}, -{67,40,14}, -{67,40,15}, -{67,40,16}, -{67,40,17}, -{67,40,18}, -{67,40,19}, -{67,40,20}, -{67,40,21}, -{67,40,22}, -{67,40,23}, -{67,40,24}, -{67,40,25}, -{67,40,26}, -{67,40,27}, -{67,40,28}, -{67,40,29}, -{67,40,30}, -{67,40,31}, -{67,40,32}, -{67,40,33}, -{67,40,34}, -{67,40,35}, -{67,40,36}, -{67,40,37}, -{67,40,38}, -{67,40,39}, -{67,40,40}, -{67,40,41}, -{67,40,42}, -{67,40,43}, -{67,40,44}, -{67,40,45}, -{67,40,46}, -{67,40,47}, -{67,40,48}, -{67,40,49}, -{67,40,50}, -{67,40,51}, -{67,40,52}, -{67,40,53}, -{67,40,54}, -{67,40,55}, -{67,40,56}, -{67,40,57}, -{67,40,58}, -{67,40,59}, -{67,40,60}, -{67,40,61}, -{67,40,62}, -{67,40,63}, -{67,40,64}, -{67,40,65}, -{67,40,66}, -{67,40,67}, -{67,40,68}, -{67,40,69}, -{67,40,70}, -{67,40,71}, -{67,40,72}, -{67,40,73}, -{67,41,-50}, -{67,41,-49}, -{67,41,-48}, -{67,41,-47}, -{67,41,-46}, -{67,41,-45}, -{67,41,-44}, -{67,41,-43}, -{67,41,-42}, -{67,41,-41}, -{67,41,-40}, -{67,41,-39}, -{67,41,-38}, -{67,41,-37}, -{67,41,-36}, -{67,41,-35}, -{67,41,-34}, -{67,41,-33}, -{67,41,-32}, -{67,41,-31}, -{67,41,-30}, -{67,41,-29}, -{67,41,-28}, -{67,41,-27}, -{67,41,-26}, -{67,41,-25}, -{67,41,-24}, -{67,41,-23}, -{67,41,-22}, -{67,41,-21}, -{67,41,-20}, -{67,41,-19}, -{67,41,-18}, -{67,41,-17}, -{67,41,-16}, -{67,41,-15}, -{67,41,-14}, -{67,41,-13}, -{67,41,-12}, -{67,41,-11}, -{67,41,-10}, -{67,41,-9}, -{67,41,-8}, -{67,41,-7}, -{67,41,-6}, -{67,41,-5}, -{67,41,-4}, -{67,41,-3}, -{67,41,-2}, -{67,41,-1}, -{67,41,0}, -{67,41,1}, -{67,41,2}, -{67,41,3}, -{67,41,4}, -{67,41,5}, -{67,41,6}, -{67,41,7}, -{67,41,8}, -{67,41,9}, -{67,41,10}, -{67,41,11}, -{67,41,12}, -{67,41,13}, -{67,41,14}, -{67,41,15}, -{67,41,16}, -{67,41,17}, -{67,41,18}, -{67,41,19}, -{67,41,20}, -{67,41,21}, -{67,41,22}, -{67,41,23}, -{67,41,24}, -{67,41,25}, -{67,41,26}, -{67,41,27}, -{67,41,28}, -{67,41,29}, -{67,41,30}, -{67,41,31}, -{67,41,32}, -{67,41,33}, -{67,41,34}, -{67,41,35}, -{67,41,36}, -{67,41,37}, -{67,41,38}, -{67,41,39}, -{67,41,40}, -{67,41,41}, -{67,41,42}, -{67,41,43}, -{67,41,44}, -{67,41,45}, -{67,41,46}, -{67,41,47}, -{67,41,48}, -{67,41,49}, -{67,41,50}, -{67,41,51}, -{67,41,52}, -{67,41,53}, -{67,41,54}, -{67,41,55}, -{67,41,56}, -{67,41,57}, -{67,41,58}, -{67,41,59}, -{67,41,60}, -{67,41,61}, -{67,41,62}, -{67,41,63}, -{67,41,64}, -{67,41,65}, -{67,41,66}, -{67,41,67}, -{67,41,68}, -{67,41,69}, -{67,41,70}, -{67,41,71}, -{67,41,72}, -{67,41,73}, -{67,42,-50}, -{67,42,-49}, -{67,42,-48}, -{67,42,-47}, -{67,42,-46}, -{67,42,-45}, -{67,42,-44}, -{67,42,-43}, -{67,42,-42}, -{67,42,-41}, -{67,42,-40}, -{67,42,-39}, -{67,42,-38}, -{67,42,-37}, -{67,42,-36}, -{67,42,-35}, -{67,42,-34}, -{67,42,-33}, -{67,42,-32}, -{67,42,-31}, -{67,42,-30}, -{67,42,-29}, -{67,42,-28}, -{67,42,-27}, -{67,42,-26}, -{67,42,-25}, -{67,42,-24}, -{67,42,-23}, -{67,42,-22}, -{67,42,-21}, -{67,42,-20}, -{67,42,-19}, -{67,42,-18}, -{67,42,-17}, -{67,42,-16}, -{67,42,-15}, -{67,42,-14}, -{67,42,-13}, -{67,42,-12}, -{67,42,-11}, -{67,42,-10}, -{67,42,-9}, -{67,42,-8}, -{67,42,-7}, -{67,42,-6}, -{67,42,-5}, -{67,42,-4}, -{67,42,-3}, -{67,42,-2}, -{67,42,-1}, -{67,42,0}, -{67,42,1}, -{67,42,2}, -{67,42,3}, -{67,42,4}, -{67,42,5}, -{67,42,6}, -{67,42,7}, -{67,42,8}, -{67,42,9}, -{67,42,10}, -{67,42,11}, -{67,42,12}, -{67,42,13}, -{67,42,14}, -{67,42,15}, -{67,42,16}, -{67,42,17}, -{67,42,18}, -{67,42,19}, -{67,42,20}, -{67,42,21}, -{67,42,22}, -{67,42,23}, -{67,42,24}, -{67,42,25}, -{67,42,26}, -{67,42,27}, -{67,42,28}, -{67,42,29}, -{67,42,30}, -{67,42,31}, -{67,42,32}, -{67,42,33}, -{67,42,34}, -{67,42,35}, -{67,42,36}, -{67,42,37}, -{67,42,38}, -{67,42,39}, -{67,42,40}, -{67,42,41}, -{67,42,42}, -{67,42,43}, -{67,42,44}, -{67,42,45}, -{67,42,46}, -{67,42,47}, -{67,42,48}, -{67,42,49}, -{67,42,50}, -{67,42,51}, -{67,42,52}, -{67,42,53}, -{67,42,54}, -{67,42,55}, -{67,42,56}, -{67,42,57}, -{67,42,58}, -{67,42,59}, -{67,42,60}, -{67,42,61}, -{67,42,62}, -{67,42,63}, -{67,42,64}, -{67,42,65}, -{67,42,66}, -{67,42,67}, -{67,42,68}, -{67,42,69}, -{67,42,70}, -{67,42,71}, -{67,42,72}, -{67,42,73}, -{67,42,74}, -{67,43,-50}, -{67,43,-49}, -{67,43,-48}, -{67,43,-47}, -{67,43,-46}, -{67,43,-45}, -{67,43,-44}, -{67,43,-43}, -{67,43,-42}, -{67,43,-41}, -{67,43,-40}, -{67,43,-39}, -{67,43,-38}, -{67,43,-37}, -{67,43,-36}, -{67,43,-35}, -{67,43,-34}, -{67,43,-33}, -{67,43,-32}, -{67,43,-31}, -{67,43,-30}, -{67,43,-29}, -{67,43,-28}, -{67,43,-27}, -{67,43,-26}, -{67,43,-25}, -{67,43,-24}, -{67,43,-23}, -{67,43,-22}, -{67,43,-21}, -{67,43,-20}, -{67,43,-19}, -{67,43,-18}, -{67,43,-17}, -{67,43,-16}, -{67,43,-15}, -{67,43,-14}, -{67,43,-13}, -{67,43,-12}, -{67,43,-11}, -{67,43,-10}, -{67,43,-9}, -{67,43,-8}, -{67,43,-7}, -{67,43,-6}, -{67,43,-5}, -{67,43,-4}, -{67,43,-3}, -{67,43,-2}, -{67,43,-1}, -{67,43,0}, -{67,43,1}, -{67,43,2}, -{67,43,3}, -{67,43,4}, -{67,43,5}, -{67,43,6}, -{67,43,7}, -{67,43,8}, -{67,43,9}, -{67,43,10}, -{67,43,11}, -{67,43,12}, -{67,43,13}, -{67,43,14}, -{67,43,15}, -{67,43,16}, -{67,43,17}, -{67,43,18}, -{67,43,19}, -{67,43,20}, -{67,43,21}, -{67,43,22}, -{67,43,23}, -{67,43,24}, -{67,43,25}, -{67,43,26}, -{67,43,27}, -{67,43,28}, -{67,43,29}, -{67,43,30}, -{67,43,31}, -{67,43,32}, -{67,43,33}, -{67,43,34}, -{67,43,35}, -{67,43,36}, -{67,43,37}, -{67,43,38}, -{67,43,39}, -{67,43,40}, -{67,43,41}, -{67,43,42}, -{67,43,43}, -{67,43,44}, -{67,43,45}, -{67,43,46}, -{67,43,47}, -{67,43,48}, -{67,43,49}, -{67,43,50}, -{67,43,51}, -{67,43,52}, -{67,43,53}, -{67,43,54}, -{67,43,55}, -{67,43,56}, -{67,43,57}, -{67,43,58}, -{67,43,59}, -{67,43,60}, -{67,43,61}, -{67,43,62}, -{67,43,63}, -{67,43,64}, -{67,43,65}, -{67,43,66}, -{67,43,67}, -{67,43,68}, -{67,43,69}, -{67,43,70}, -{67,43,71}, -{67,43,72}, -{67,43,73}, -{67,43,74}, -{67,44,-50}, -{67,44,-49}, -{67,44,-48}, -{67,44,-47}, -{67,44,-46}, -{67,44,-45}, -{67,44,-44}, -{67,44,-43}, -{67,44,-42}, -{67,44,-41}, -{67,44,-40}, -{67,44,-39}, -{67,44,-38}, -{67,44,-37}, -{67,44,-36}, -{67,44,-35}, -{67,44,-34}, -{67,44,-33}, -{67,44,-32}, -{67,44,-31}, -{67,44,-30}, -{67,44,-29}, -{67,44,-28}, -{67,44,-27}, -{67,44,-26}, -{67,44,-25}, -{67,44,-24}, -{67,44,-23}, -{67,44,-22}, -{67,44,-21}, -{67,44,-20}, -{67,44,-19}, -{67,44,-18}, -{67,44,-17}, -{67,44,-16}, -{67,44,-15}, -{67,44,-14}, -{67,44,-13}, -{67,44,-12}, -{67,44,-11}, -{67,44,-10}, -{67,44,-9}, -{67,44,-8}, -{67,44,-7}, -{67,44,-6}, -{67,44,-5}, -{67,44,-4}, -{67,44,-3}, -{67,44,-2}, -{67,44,-1}, -{67,44,0}, -{67,44,1}, -{67,44,2}, -{67,44,3}, -{67,44,4}, -{67,44,5}, -{67,44,6}, -{67,44,7}, -{67,44,8}, -{67,44,9}, -{67,44,10}, -{67,44,11}, -{67,44,12}, -{67,44,13}, -{67,44,14}, -{67,44,15}, -{67,44,16}, -{67,44,17}, -{67,44,18}, -{67,44,19}, -{67,44,20}, -{67,44,21}, -{67,44,22}, -{67,44,23}, -{67,44,24}, -{67,44,25}, -{67,44,26}, -{67,44,27}, -{67,44,28}, -{67,44,29}, -{67,44,30}, -{67,44,31}, -{67,44,32}, -{67,44,33}, -{67,44,34}, -{67,44,35}, -{67,44,36}, -{67,44,37}, -{67,44,38}, -{67,44,39}, -{67,44,40}, -{67,44,41}, -{67,44,42}, -{67,44,43}, -{67,44,44}, -{67,44,45}, -{67,44,46}, -{67,44,47}, -{67,44,48}, -{67,44,49}, -{67,44,50}, -{67,44,51}, -{67,44,52}, -{67,44,53}, -{67,44,54}, -{67,44,55}, -{67,44,56}, -{67,44,57}, -{67,44,58}, -{67,44,59}, -{67,44,60}, -{67,44,61}, -{67,44,62}, -{67,44,63}, -{67,44,64}, -{67,44,65}, -{67,45,-50}, -{67,45,-49}, -{67,45,-48}, -{67,45,-47}, -{67,45,-46}, -{67,45,-45}, -{67,45,-44}, -{67,45,-43}, -{67,45,-42}, -{67,45,-41}, -{67,45,-40}, -{67,45,-39}, -{67,45,-38}, -{67,45,-37}, -{67,45,-36}, -{67,45,-35}, -{67,45,-34}, -{67,45,-33}, -{67,45,-32}, -{67,45,-31}, -{67,45,-30}, -{67,45,-29}, -{67,45,-28}, -{67,45,-27}, -{67,45,-26}, -{67,45,-25}, -{67,45,-24}, -{67,45,-23}, -{67,45,-22}, -{67,45,-21}, -{67,45,-20}, -{67,45,-19}, -{67,45,-18}, -{67,45,-17}, -{67,45,-16}, -{67,45,-15}, -{67,45,-14}, -{67,45,-13}, -{67,45,-12}, -{67,45,-11}, -{67,45,-10}, -{67,45,-9}, -{67,45,-8}, -{67,45,-7}, -{67,45,-6}, -{67,45,-5}, -{67,45,-4}, -{67,45,-3}, -{67,45,-2}, -{67,45,-1}, -{67,45,0}, -{67,45,1}, -{67,45,2}, -{67,45,3}, -{67,45,4}, -{67,45,5}, -{67,45,6}, -{67,45,7}, -{67,45,8}, -{67,45,9}, -{67,45,10}, -{67,45,11}, -{67,45,12}, -{67,45,13}, -{67,45,14}, -{67,45,15}, -{67,45,16}, -{67,45,17}, -{67,45,18}, -{67,45,19}, -{67,45,20}, -{67,45,21}, -{67,45,22}, -{67,45,23}, -{67,45,24}, -{67,45,25}, -{67,45,26}, -{67,45,27}, -{67,45,28}, -{67,45,29}, -{67,45,30}, -{67,45,31}, -{67,45,32}, -{67,45,33}, -{67,45,34}, -{67,45,35}, -{67,45,36}, -{67,45,37}, -{67,45,38}, -{67,45,39}, -{67,45,40}, -{67,45,41}, -{67,45,42}, -{67,45,43}, -{67,45,44}, -{67,45,45}, -{67,45,46}, -{67,45,47}, -{67,45,48}, -{67,45,49}, -{67,45,50}, -{67,45,51}, -{67,45,52}, -{67,45,53}, -{67,45,54}, -{67,45,55}, -{67,45,56}, -{67,46,-50}, -{67,46,-49}, -{67,46,-48}, -{67,46,-47}, -{67,46,-46}, -{67,46,-45}, -{67,46,-44}, -{67,46,-43}, -{67,46,-42}, -{67,46,-41}, -{67,46,-40}, -{67,46,-39}, -{67,46,-38}, -{67,46,-37}, -{67,46,-36}, -{67,46,-35}, -{67,46,-34}, -{67,46,-33}, -{67,46,-32}, -{67,46,-31}, -{67,46,-30}, -{67,46,-29}, -{67,46,-28}, -{67,46,-27}, -{67,46,-26}, -{67,46,-25}, -{67,46,-24}, -{67,46,-23}, -{67,46,-22}, -{67,46,-21}, -{67,46,-20}, -{67,46,-19}, -{67,46,-18}, -{67,46,-17}, -{67,46,-16}, -{67,46,-15}, -{67,46,-14}, -{67,46,-13}, -{67,46,-12}, -{67,46,-11}, -{67,46,-10}, -{67,46,-9}, -{67,46,-8}, -{67,46,-7}, -{67,46,-6}, -{67,46,-5}, -{67,46,-4}, -{67,46,-3}, -{67,46,-2}, -{67,46,-1}, -{67,46,0}, -{67,46,1}, -{67,46,2}, -{67,46,3}, -{67,46,4}, -{67,46,5}, -{67,46,6}, -{67,46,7}, -{67,46,8}, -{67,46,9}, -{67,46,10}, -{67,46,11}, -{67,46,12}, -{67,46,13}, -{67,46,14}, -{67,46,15}, -{67,46,16}, -{67,46,17}, -{67,46,18}, -{67,46,19}, -{67,46,20}, -{67,46,21}, -{67,46,22}, -{67,46,23}, -{67,46,24}, -{67,46,25}, -{67,46,26}, -{67,46,27}, -{67,46,28}, -{67,46,29}, -{67,46,30}, -{67,46,31}, -{67,46,32}, -{67,46,33}, -{67,46,34}, -{67,46,35}, -{67,46,36}, -{67,46,37}, -{67,46,38}, -{67,46,39}, -{67,46,40}, -{67,46,41}, -{67,46,42}, -{67,46,43}, -{67,46,44}, -{67,46,45}, -{67,46,46}, -{67,46,47}, -{67,46,48}, -{67,46,49}, -{67,47,-50}, -{67,47,-49}, -{67,47,-48}, -{67,47,-47}, -{67,47,-46}, -{67,47,-45}, -{67,47,-44}, -{67,47,-43}, -{67,47,-42}, -{67,47,-41}, -{67,47,-40}, -{67,47,-39}, -{67,47,-38}, -{67,47,-37}, -{67,47,-36}, -{67,47,-35}, -{67,47,-34}, -{67,47,-33}, -{67,47,-32}, -{67,47,-31}, -{67,47,-30}, -{67,47,-29}, -{67,47,-28}, -{67,47,-27}, -{67,47,-26}, -{67,47,-25}, -{67,47,-24}, -{67,47,-23}, -{67,47,-22}, -{67,47,-21}, -{67,47,-20}, -{67,47,-19}, -{67,47,-18}, -{67,47,-17}, -{67,47,-16}, -{67,47,-15}, -{67,47,-14}, -{67,47,-13}, -{67,47,-12}, -{67,47,-11}, -{67,47,-10}, -{67,47,-9}, -{67,47,-8}, -{67,47,-7}, -{67,47,-6}, -{67,47,-5}, -{67,47,-4}, -{67,47,-3}, -{67,47,-2}, -{67,47,-1}, -{67,47,0}, -{67,47,1}, -{67,47,2}, -{67,47,3}, -{67,47,4}, -{67,47,5}, -{67,47,6}, -{67,47,7}, -{67,47,8}, -{67,47,9}, -{67,47,10}, -{67,47,11}, -{67,47,12}, -{67,47,13}, -{67,47,14}, -{67,47,15}, -{67,47,16}, -{67,47,17}, -{67,47,18}, -{67,47,19}, -{67,47,20}, -{67,47,21}, -{67,47,22}, -{67,47,23}, -{67,47,24}, -{67,47,25}, -{67,47,26}, -{67,47,27}, -{67,47,28}, -{67,47,29}, -{67,47,30}, -{67,47,31}, -{67,47,32}, -{67,47,33}, -{67,47,34}, -{67,47,35}, -{67,47,36}, -{67,47,37}, -{67,47,38}, -{67,47,39}, -{67,47,40}, -{67,47,41}, -{67,47,42}, -{67,48,-50}, -{67,48,-49}, -{67,48,-48}, -{67,48,-47}, -{67,48,-46}, -{67,48,-45}, -{67,48,-44}, -{67,48,-43}, -{67,48,-42}, -{67,48,-41}, -{67,48,-40}, -{67,48,-39}, -{67,48,-38}, -{67,48,-37}, -{67,48,-36}, -{67,48,-35}, -{67,48,-34}, -{67,48,-33}, -{67,48,-32}, -{67,48,-31}, -{67,48,-30}, -{67,48,-29}, -{67,48,-28}, -{67,48,-27}, -{67,48,-26}, -{67,48,-25}, -{67,48,-24}, -{67,48,-23}, -{67,48,-22}, -{67,48,-21}, -{67,48,-20}, -{67,48,-19}, -{67,48,-18}, -{67,48,-17}, -{67,48,-16}, -{67,48,-15}, -{67,48,-14}, -{67,48,-13}, -{67,48,-12}, -{67,48,-11}, -{67,48,-10}, -{67,48,-9}, -{67,48,-8}, -{67,48,-7}, -{67,48,-6}, -{67,48,-5}, -{67,48,-4}, -{67,48,-3}, -{67,48,-2}, -{67,48,-1}, -{67,48,0}, -{67,48,1}, -{67,48,2}, -{67,48,3}, -{67,48,4}, -{67,48,5}, -{67,48,6}, -{67,48,7}, -{67,48,8}, -{67,48,9}, -{67,48,10}, -{67,48,11}, -{67,48,12}, -{67,48,13}, -{67,48,14}, -{67,48,15}, -{67,48,16}, -{67,48,17}, -{67,48,18}, -{67,48,19}, -{67,48,20}, -{67,48,21}, -{67,48,22}, -{67,48,23}, -{67,48,24}, -{67,48,25}, -{67,48,26}, -{67,48,27}, -{67,48,28}, -{67,48,29}, -{67,48,30}, -{67,48,31}, -{67,48,32}, -{67,48,33}, -{67,48,34}, -{67,48,35}, -{67,48,36}, -{67,48,37}, -{67,49,-50}, -{67,49,-49}, -{67,49,-48}, -{67,49,-47}, -{67,49,-46}, -{67,49,-45}, -{67,49,-44}, -{67,49,-43}, -{67,49,-42}, -{67,49,-41}, -{67,49,-40}, -{67,49,-39}, -{67,49,-38}, -{67,49,-37}, -{67,49,-36}, -{67,49,-35}, -{67,49,-34}, -{67,49,-33}, -{67,49,-32}, -{67,49,-31}, -{67,49,-30}, -{67,49,-29}, -{67,49,-28}, -{67,49,-27}, -{67,49,-26}, -{67,49,-25}, -{67,49,-24}, -{67,49,-23}, -{67,49,-22}, -{67,49,-21}, -{67,49,-20}, -{67,49,-19}, -{67,49,-18}, -{67,49,-17}, -{67,49,-16}, -{67,49,-15}, -{67,49,-14}, -{67,49,-13}, -{67,49,-12}, -{67,49,-11}, -{67,49,-10}, -{67,49,-9}, -{67,49,-8}, -{67,49,-7}, -{67,49,-6}, -{67,49,-5}, -{67,49,-4}, -{67,49,-3}, -{67,49,-2}, -{67,49,-1}, -{67,49,0}, -{67,49,1}, -{67,49,2}, -{67,49,3}, -{67,49,4}, -{67,49,5}, -{67,49,6}, -{67,49,7}, -{67,49,8}, -{67,49,9}, -{67,49,10}, -{67,49,11}, -{67,49,12}, -{67,49,13}, -{67,49,14}, -{67,49,15}, -{67,49,16}, -{67,49,17}, -{67,49,18}, -{67,49,19}, -{67,49,20}, -{67,49,21}, -{67,49,22}, -{67,49,23}, -{67,49,24}, -{67,49,25}, -{67,49,26}, -{67,49,27}, -{67,49,28}, -{67,49,29}, -{67,49,30}, -{67,49,31}, -{67,49,32}, -{67,50,-50}, -{67,50,-49}, -{67,50,-48}, -{67,50,-47}, -{67,50,-46}, -{67,50,-45}, -{67,50,-44}, -{67,50,-43}, -{67,50,-42}, -{67,50,-41}, -{67,50,-40}, -{67,50,-39}, -{67,50,-38}, -{67,50,-37}, -{67,50,-36}, -{67,50,-35}, -{67,50,-34}, -{67,50,-33}, -{67,50,-32}, -{67,50,-31}, -{67,50,-30}, -{67,50,-29}, -{67,50,-28}, -{67,50,-27}, -{67,50,-26}, -{67,50,-25}, -{67,50,-24}, -{67,50,-23}, -{67,50,-22}, -{67,50,-21}, -{67,50,-20}, -{67,50,-19}, -{67,50,-18}, -{67,50,-17}, -{67,50,-16}, -{67,50,-15}, -{67,50,-14}, -{67,50,-13}, -{67,50,-12}, -{67,50,-11}, -{67,50,-10}, -{67,50,-9}, -{67,50,-8}, -{67,50,-7}, -{67,50,-6}, -{67,50,-5}, -{67,50,-4}, -{67,50,-3}, -{67,50,-2}, -{67,50,-1}, -{67,50,0}, -{67,50,1}, -{67,50,2}, -{67,50,3}, -{67,50,4}, -{67,50,5}, -{67,50,6}, -{67,50,7}, -{67,50,8}, -{67,50,9}, -{67,50,10}, -{67,50,11}, -{67,50,12}, -{67,50,13}, -{67,50,14}, -{67,50,15}, -{67,50,16}, -{67,50,17}, -{67,50,18}, -{67,50,19}, -{67,50,20}, -{67,50,21}, -{67,50,22}, -{67,50,23}, -{67,50,24}, -{67,50,25}, -{67,50,26}, -{67,50,27}, -{67,51,-50}, -{67,51,-49}, -{67,51,-48}, -{67,51,-47}, -{67,51,-46}, -{67,51,-45}, -{67,51,-44}, -{67,51,-43}, -{67,51,-42}, -{67,51,-41}, -{67,51,-40}, -{67,51,-39}, -{67,51,-38}, -{67,51,-37}, -{67,51,-36}, -{67,51,-35}, -{67,51,-34}, -{67,51,-33}, -{67,51,-32}, -{67,51,-31}, -{67,51,-30}, -{67,51,-29}, -{67,51,-28}, -{67,51,-27}, -{67,51,-26}, -{67,51,-25}, -{67,51,-24}, -{67,51,-23}, -{67,51,-22}, -{67,51,-21}, -{67,51,-20}, -{67,51,-19}, -{67,51,-18}, -{67,51,-17}, -{67,51,-16}, -{67,51,-15}, -{67,51,-14}, -{67,51,-13}, -{67,51,-12}, -{67,51,-11}, -{67,51,-10}, -{67,51,-9}, -{67,51,-8}, -{67,51,-7}, -{67,51,-6}, -{67,51,-5}, -{67,51,-4}, -{67,51,-3}, -{67,51,-2}, -{67,51,-1}, -{67,51,0}, -{67,51,1}, -{67,51,2}, -{67,51,3}, -{67,51,4}, -{67,51,5}, -{67,51,6}, -{67,51,7}, -{67,51,8}, -{67,51,9}, -{67,51,10}, -{67,51,11}, -{67,51,12}, -{67,51,13}, -{67,51,14}, -{67,51,15}, -{67,51,16}, -{67,51,17}, -{67,51,18}, -{67,51,19}, -{67,51,20}, -{67,51,21}, -{67,51,22}, -{67,51,23}, -{67,52,-50}, -{67,52,-49}, -{67,52,-48}, -{67,52,-47}, -{67,52,-46}, -{67,52,-45}, -{67,52,-44}, -{67,52,-43}, -{67,52,-42}, -{67,52,-41}, -{67,52,-40}, -{67,52,-39}, -{67,52,-38}, -{67,52,-37}, -{67,52,-36}, -{67,52,-35}, -{67,52,-34}, -{67,52,-33}, -{67,52,-32}, -{67,52,-31}, -{67,52,-30}, -{67,52,-29}, -{67,52,-28}, -{67,52,-27}, -{67,52,-26}, -{67,52,-25}, -{67,52,-24}, -{67,52,-23}, -{67,52,-22}, -{67,52,-21}, -{67,52,-20}, -{67,52,-19}, -{67,52,-18}, -{67,52,-17}, -{67,52,-16}, -{67,52,-15}, -{67,52,-14}, -{67,52,-13}, -{67,52,-12}, -{67,52,-11}, -{67,52,-10}, -{67,52,-9}, -{67,52,-8}, -{67,52,-7}, -{67,52,-6}, -{67,52,-5}, -{67,52,-4}, -{67,52,-3}, -{67,52,-2}, -{67,52,-1}, -{67,52,0}, -{67,52,1}, -{67,52,2}, -{67,52,3}, -{67,52,4}, -{67,52,5}, -{67,52,6}, -{67,52,7}, -{67,52,8}, -{67,52,9}, -{67,52,10}, -{67,52,11}, -{67,52,12}, -{67,52,13}, -{67,52,14}, -{67,52,15}, -{67,52,16}, -{67,52,17}, -{67,52,18}, -{67,52,19}, -{67,53,-50}, -{67,53,-49}, -{67,53,-48}, -{67,53,-47}, -{67,53,-46}, -{67,53,-45}, -{67,53,-44}, -{67,53,-43}, -{67,53,-42}, -{67,53,-41}, -{67,53,-40}, -{67,53,-39}, -{67,53,-38}, -{67,53,-37}, -{67,53,-36}, -{67,53,-35}, -{67,53,-34}, -{67,53,-33}, -{67,53,-32}, -{67,53,-31}, -{67,53,-30}, -{67,53,-29}, -{67,53,-28}, -{67,53,-27}, -{67,53,-26}, -{67,53,-25}, -{67,53,-24}, -{67,53,-23}, -{67,53,-22}, -{67,53,-21}, -{67,53,-20}, -{67,53,-19}, -{67,53,-18}, -{67,53,-17}, -{67,53,-16}, -{67,53,-15}, -{67,53,-14}, -{67,53,-13}, -{67,53,-12}, -{67,53,-11}, -{67,53,-10}, -{67,53,-9}, -{67,53,-8}, -{67,53,-7}, -{67,53,-6}, -{67,53,-5}, -{67,53,-4}, -{67,53,-3}, -{67,53,-2}, -{67,53,-1}, -{67,53,0}, -{67,53,1}, -{67,53,2}, -{67,53,3}, -{67,53,4}, -{67,53,5}, -{67,53,6}, -{67,53,7}, -{67,53,8}, -{67,53,9}, -{67,53,10}, -{67,53,11}, -{67,53,12}, -{67,53,13}, -{67,53,14}, -{67,53,15}, -{67,54,-50}, -{67,54,-49}, -{67,54,-48}, -{67,54,-47}, -{67,54,-46}, -{67,54,-45}, -{67,54,-44}, -{67,54,-43}, -{67,54,-42}, -{67,54,-41}, -{67,54,-40}, -{67,54,-39}, -{67,54,-38}, -{67,54,-37}, -{67,54,-36}, -{67,54,-35}, -{67,54,-34}, -{67,54,-33}, -{67,54,-32}, -{67,54,-31}, -{67,54,-30}, -{67,54,-29}, -{67,54,-28}, -{67,54,-27}, -{67,54,-26}, -{67,54,-25}, -{67,54,-24}, -{67,54,-23}, -{67,54,-22}, -{67,54,-21}, -{67,54,-20}, -{67,54,-19}, -{67,54,-18}, -{67,54,-17}, -{67,54,-16}, -{67,54,-15}, -{67,54,-14}, -{67,54,-13}, -{67,54,-12}, -{67,54,-11}, -{67,54,-10}, -{67,54,-9}, -{67,54,-8}, -{67,54,-7}, -{67,54,-6}, -{67,54,-5}, -{67,54,-4}, -{67,54,-3}, -{67,54,-2}, -{67,54,-1}, -{67,54,0}, -{67,54,1}, -{67,54,2}, -{67,54,3}, -{67,54,4}, -{67,54,5}, -{67,54,6}, -{67,54,7}, -{67,54,8}, -{67,54,9}, -{67,54,10}, -{67,54,11}, -{67,55,-50}, -{67,55,-49}, -{67,55,-48}, -{67,55,-47}, -{67,55,-46}, -{67,55,-45}, -{67,55,-44}, -{67,55,-43}, -{67,55,-42}, -{67,55,-41}, -{67,55,-40}, -{67,55,-39}, -{67,55,-38}, -{67,55,-37}, -{67,55,-36}, -{67,55,-35}, -{67,55,-34}, -{67,55,-33}, -{67,55,-32}, -{67,55,-31}, -{67,55,-30}, -{67,55,-29}, -{67,55,-28}, -{67,55,-27}, -{67,55,-26}, -{67,55,-25}, -{67,55,-24}, -{67,55,-23}, -{67,55,-22}, -{67,55,-21}, -{67,55,-20}, -{67,55,-19}, -{67,55,-18}, -{67,55,-17}, -{67,55,-16}, -{67,55,-15}, -{67,55,-14}, -{67,55,-13}, -{67,55,-12}, -{67,55,-11}, -{67,55,-10}, -{67,55,-9}, -{67,55,-8}, -{67,55,-7}, -{67,55,-6}, -{67,55,-5}, -{67,55,-4}, -{67,55,-3}, -{67,55,-2}, -{67,55,-1}, -{67,55,0}, -{67,55,1}, -{67,55,2}, -{67,55,3}, -{67,55,4}, -{67,55,5}, -{67,55,6}, -{67,55,7}, -{67,55,8}, -{67,56,-50}, -{67,56,-49}, -{67,56,-48}, -{67,56,-47}, -{67,56,-46}, -{67,56,-45}, -{67,56,-44}, -{67,56,-43}, -{67,56,-42}, -{67,56,-41}, -{67,56,-40}, -{67,56,-39}, -{67,56,-38}, -{67,56,-37}, -{67,56,-36}, -{67,56,-35}, -{67,56,-34}, -{67,56,-33}, -{67,56,-32}, -{67,56,-31}, -{67,56,-30}, -{67,56,-29}, -{67,56,-28}, -{67,56,-27}, -{67,56,-26}, -{67,56,-25}, -{67,56,-24}, -{67,56,-23}, -{67,56,-22}, -{67,56,-21}, -{67,56,-20}, -{67,56,-19}, -{67,56,-18}, -{67,56,-17}, -{67,56,-16}, -{67,56,-15}, -{67,56,-14}, -{67,56,-13}, -{67,56,-12}, -{67,56,-11}, -{67,56,-10}, -{67,56,-9}, -{67,56,-8}, -{67,56,-7}, -{67,56,-6}, -{67,56,-5}, -{67,56,-4}, -{67,56,-3}, -{67,56,-2}, -{67,56,-1}, -{67,56,0}, -{67,56,1}, -{67,56,2}, -{67,56,3}, -{67,56,4}, -{67,57,-50}, -{67,57,-49}, -{67,57,-48}, -{67,57,-47}, -{67,57,-46}, -{67,57,-45}, -{67,57,-44}, -{67,57,-43}, -{67,57,-42}, -{67,57,-41}, -{67,57,-40}, -{67,57,-39}, -{67,57,-38}, -{67,57,-37}, -{67,57,-36}, -{67,57,-35}, -{67,57,-34}, -{67,57,-33}, -{67,57,-32}, -{67,57,-31}, -{67,57,-30}, -{67,57,-29}, -{67,57,-28}, -{67,57,-27}, -{67,57,-26}, -{67,57,-25}, -{67,57,-24}, -{67,57,-23}, -{67,57,-22}, -{67,57,-21}, -{67,57,-20}, -{67,57,-19}, -{67,57,-18}, -{67,57,-17}, -{67,57,-16}, -{67,57,-15}, -{67,57,-14}, -{67,57,-13}, -{67,57,-12}, -{67,57,-11}, -{67,57,-10}, -{67,57,-9}, -{67,57,-8}, -{67,57,-7}, -{67,57,-6}, -{67,57,-5}, -{67,57,-4}, -{67,57,-3}, -{67,57,-2}, -{67,57,-1}, -{67,57,0}, -{67,57,1}, -{67,58,-50}, -{67,58,-49}, -{67,58,-48}, -{67,58,-47}, -{67,58,-46}, -{67,58,-45}, -{67,58,-44}, -{67,58,-43}, -{67,58,-42}, -{67,58,-41}, -{67,58,-40}, -{67,58,-39}, -{67,58,-38}, -{67,58,-37}, -{67,58,-36}, -{67,58,-35}, -{67,58,-34}, -{67,58,-33}, -{67,58,-32}, -{67,58,-31}, -{67,58,-30}, -{67,58,-29}, -{67,58,-28}, -{67,58,-27}, -{67,58,-26}, -{67,58,-25}, -{67,58,-24}, -{67,58,-23}, -{67,58,-22}, -{67,58,-21}, -{67,58,-20}, -{67,58,-19}, -{67,58,-18}, -{67,58,-17}, -{67,58,-16}, -{67,58,-15}, -{67,58,-14}, -{67,58,-13}, -{67,58,-12}, -{67,58,-11}, -{67,58,-10}, -{67,58,-9}, -{67,58,-8}, -{67,58,-7}, -{67,58,-6}, -{67,58,-5}, -{67,58,-4}, -{67,58,-3}, -{67,58,-2}, -{67,59,-50}, -{67,59,-49}, -{67,59,-48}, -{67,59,-47}, -{67,59,-46}, -{67,59,-45}, -{67,59,-44}, -{67,59,-43}, -{67,59,-42}, -{67,59,-41}, -{67,59,-40}, -{67,59,-39}, -{67,59,-38}, -{67,59,-37}, -{67,59,-36}, -{67,59,-35}, -{67,59,-34}, -{67,59,-33}, -{67,59,-32}, -{67,59,-31}, -{67,59,-30}, -{67,59,-29}, -{67,59,-28}, -{67,59,-27}, -{67,59,-26}, -{67,59,-25}, -{67,59,-24}, -{67,59,-23}, -{67,59,-22}, -{67,59,-21}, -{67,59,-20}, -{67,59,-19}, -{67,59,-18}, -{67,59,-17}, -{67,59,-16}, -{67,59,-15}, -{67,59,-14}, -{67,59,-13}, -{67,59,-12}, -{67,59,-11}, -{67,59,-10}, -{67,59,-9}, -{67,59,-8}, -{67,59,-7}, -{67,59,-6}, -{67,59,-5}, -{67,60,-50}, -{67,60,-49}, -{67,60,-48}, -{67,60,-47}, -{67,60,-46}, -{67,60,-45}, -{67,60,-44}, -{67,60,-43}, -{67,60,-42}, -{67,60,-41}, -{67,60,-40}, -{67,60,-39}, -{67,60,-38}, -{67,60,-37}, -{67,60,-36}, -{67,60,-35}, -{67,60,-34}, -{67,60,-33}, -{67,60,-32}, -{67,60,-31}, -{67,60,-30}, -{67,60,-29}, -{67,60,-28}, -{67,60,-27}, -{67,60,-26}, -{67,60,-25}, -{67,60,-24}, -{67,60,-23}, -{67,60,-22}, -{67,60,-21}, -{67,60,-20}, -{67,60,-19}, -{67,60,-18}, -{67,60,-17}, -{67,60,-16}, -{67,60,-15}, -{67,60,-14}, -{67,60,-13}, -{67,60,-12}, -{67,60,-11}, -{67,60,-10}, -{67,60,-9}, -{67,60,-8}, -{67,61,-50}, -{67,61,-49}, -{67,61,-48}, -{67,61,-47}, -{67,61,-46}, -{67,61,-45}, -{67,61,-44}, -{67,61,-43}, -{67,61,-42}, -{67,61,-41}, -{67,61,-40}, -{67,61,-39}, -{67,61,-38}, -{67,61,-37}, -{67,61,-36}, -{67,61,-35}, -{67,61,-34}, -{67,61,-33}, -{67,61,-32}, -{67,61,-31}, -{67,61,-30}, -{67,61,-29}, -{67,61,-28}, -{67,61,-27}, -{67,61,-26}, -{67,61,-25}, -{67,61,-24}, -{67,61,-23}, -{67,61,-22}, -{67,61,-21}, -{67,61,-20}, -{67,61,-19}, -{67,61,-18}, -{67,61,-17}, -{67,61,-16}, -{67,61,-15}, -{67,61,-14}, -{67,61,-13}, -{67,61,-12}, -{67,61,-11}, -{67,62,-50}, -{67,62,-49}, -{67,62,-48}, -{67,62,-47}, -{67,62,-46}, -{67,62,-45}, -{67,62,-44}, -{67,62,-43}, -{67,62,-42}, -{67,62,-41}, -{67,62,-40}, -{67,62,-39}, -{67,62,-38}, -{67,62,-37}, -{67,62,-36}, -{67,62,-35}, -{67,62,-34}, -{67,62,-33}, -{67,62,-32}, -{67,62,-31}, -{67,62,-30}, -{67,62,-29}, -{67,62,-28}, -{67,62,-27}, -{67,62,-26}, -{67,62,-25}, -{67,62,-24}, -{67,62,-23}, -{67,62,-22}, -{67,62,-21}, -{67,62,-20}, -{67,62,-19}, -{67,62,-18}, -{67,62,-17}, -{67,62,-16}, -{67,62,-15}, -{67,62,-14}, -{67,62,-13}, -{67,63,-50}, -{67,63,-49}, -{67,63,-48}, -{67,63,-47}, -{67,63,-46}, -{67,63,-45}, -{67,63,-44}, -{67,63,-43}, -{67,63,-42}, -{67,63,-41}, -{67,63,-40}, -{67,63,-39}, -{67,63,-38}, -{67,63,-37}, -{67,63,-36}, -{67,63,-35}, -{67,63,-34}, -{67,63,-33}, -{67,63,-32}, -{67,63,-31}, -{67,63,-30}, -{67,63,-29}, -{67,63,-28}, -{67,63,-27}, -{67,63,-26}, -{67,63,-25}, -{67,63,-24}, -{67,63,-23}, -{67,63,-22}, -{67,63,-21}, -{67,63,-20}, -{67,63,-19}, -{67,63,-18}, -{67,63,-17}, -{67,63,-16}, -{67,64,-50}, -{67,64,-49}, -{67,64,-48}, -{67,64,-47}, -{67,64,-46}, -{67,64,-45}, -{67,64,-44}, -{67,64,-43}, -{67,64,-42}, -{67,64,-41}, -{67,64,-40}, -{67,64,-39}, -{67,64,-38}, -{67,64,-37}, -{67,64,-36}, -{67,64,-35}, -{67,64,-34}, -{67,64,-33}, -{67,64,-32}, -{67,64,-31}, -{67,64,-30}, -{67,64,-29}, -{67,64,-28}, -{67,64,-27}, -{67,64,-26}, -{67,64,-25}, -{67,64,-24}, -{67,64,-23}, -{67,64,-22}, -{67,64,-21}, -{67,64,-20}, -{67,64,-19}, -{67,64,-18}, -{67,65,-50}, -{67,65,-49}, -{67,65,-48}, -{67,65,-47}, -{67,65,-46}, -{67,65,-45}, -{67,65,-44}, -{67,65,-43}, -{67,65,-42}, -{67,65,-41}, -{67,65,-40}, -{67,65,-39}, -{67,65,-38}, -{67,65,-37}, -{67,65,-36}, -{67,65,-35}, -{67,65,-34}, -{67,65,-33}, -{67,65,-32}, -{67,65,-31}, -{67,65,-30}, -{67,65,-29}, -{67,65,-28}, -{67,65,-27}, -{67,65,-26}, -{67,65,-25}, -{67,65,-24}, -{67,65,-23}, -{67,65,-22}, -{67,65,-21}, -{67,66,-50}, -{67,66,-49}, -{67,66,-48}, -{67,66,-47}, -{67,66,-46}, -{67,66,-45}, -{67,66,-44}, -{67,66,-43}, -{67,66,-42}, -{67,66,-41}, -{67,66,-40}, -{67,66,-39}, -{67,66,-38}, -{67,66,-37}, -{67,66,-36}, -{67,66,-35}, -{67,66,-34}, -{67,66,-33}, -{67,66,-32}, -{67,66,-31}, -{67,66,-30}, -{67,66,-29}, -{67,66,-28}, -{67,66,-27}, -{67,66,-26}, -{67,66,-25}, -{67,66,-24}, -{67,66,-23}, -{67,67,-50}, -{67,67,-49}, -{67,67,-48}, -{67,67,-47}, -{67,67,-46}, -{67,67,-45}, -{67,67,-44}, -{67,67,-43}, -{67,67,-42}, -{67,67,-41}, -{67,67,-40}, -{67,67,-39}, -{67,67,-38}, -{67,67,-37}, -{67,67,-36}, -{67,67,-35}, -{67,67,-34}, -{67,67,-33}, -{67,67,-32}, -{67,67,-31}, -{67,67,-30}, -{67,67,-29}, -{67,67,-28}, -{67,67,-27}, -{67,67,-26}, -{67,68,-50}, -{67,68,-49}, -{67,68,-48}, -{67,68,-47}, -{67,68,-46}, -{67,68,-45}, -{67,68,-44}, -{67,68,-43}, -{67,68,-42}, -{67,68,-41}, -{67,68,-40}, -{67,68,-39}, -{67,68,-38}, -{67,68,-37}, -{67,68,-36}, -{67,68,-35}, -{67,68,-34}, -{67,68,-33}, -{67,68,-32}, -{67,68,-31}, -{67,68,-30}, -{67,68,-29}, -{67,68,-28}, -{67,69,-50}, -{67,69,-49}, -{67,69,-48}, -{67,69,-47}, -{67,69,-46}, -{67,69,-45}, -{67,69,-44}, -{67,69,-43}, -{67,69,-42}, -{67,69,-41}, -{67,69,-40}, -{67,69,-39}, -{67,69,-38}, -{67,69,-37}, -{67,69,-36}, -{67,69,-35}, -{67,69,-34}, -{67,69,-33}, -{67,69,-32}, -{67,69,-31}, -{67,69,-30}, -{67,70,-50}, -{67,70,-49}, -{67,70,-48}, -{67,70,-47}, -{67,70,-46}, -{67,70,-45}, -{67,70,-44}, -{67,70,-43}, -{67,70,-42}, -{67,70,-41}, -{67,70,-40}, -{67,70,-39}, -{67,70,-38}, -{67,70,-37}, -{67,70,-36}, -{67,70,-35}, -{67,70,-34}, -{67,70,-33}, -{67,70,-32}, -{67,71,-50}, -{67,71,-49}, -{67,71,-48}, -{67,71,-47}, -{67,71,-46}, -{67,71,-45}, -{67,71,-44}, -{67,71,-43}, -{67,71,-42}, -{67,71,-41}, -{67,71,-40}, -{67,71,-39}, -{67,71,-38}, -{67,71,-37}, -{67,71,-36}, -{67,71,-35}, -{67,71,-34}, -{67,72,-50}, -{67,72,-49}, -{67,72,-48}, -{67,72,-47}, -{67,72,-46}, -{67,72,-45}, -{67,72,-44}, -{67,72,-43}, -{67,72,-42}, -{67,72,-41}, -{67,72,-40}, -{67,72,-39}, -{67,72,-38}, -{67,72,-37}, -{67,73,-50}, -{67,73,-49}, -{67,73,-48}, -{67,73,-47}, -{67,73,-46}, -{67,73,-45}, -{67,73,-44}, -{67,73,-43}, -{67,73,-42}, -{67,73,-41}, -{67,73,-40}, -{67,73,-39}, -{67,74,-50}, -{67,74,-49}, -{67,74,-48}, -{67,74,-47}, -{67,74,-46}, -{67,74,-45}, -{67,74,-44}, -{67,74,-43}, -{67,74,-42}, -{67,74,-41}, -{67,75,-50}, -{67,75,-49}, -{67,75,-48}, -{67,75,-47}, -{67,75,-46}, -{67,75,-45}, -{67,75,-44}, -{67,75,-43}, -{67,76,-50}, -{67,76,-49}, -{67,76,-48}, -{67,76,-47}, -{67,76,-46}, -{67,76,-45}, -{67,77,-50}, -{67,77,-49}, -{67,77,-48}, -{67,77,-47}, -{67,77,-46}, -{67,78,-50}, -{67,78,-49}, -{67,78,-48}, -{67,79,-50}, -{68,-69,63}, -{68,-69,64}, -{68,-69,65}, -{68,-69,66}, -{68,-69,67}, -{68,-68,59}, -{68,-68,60}, -{68,-68,61}, -{68,-68,62}, -{68,-68,63}, -{68,-68,64}, -{68,-68,65}, -{68,-68,66}, -{68,-68,67}, -{68,-67,55}, -{68,-67,56}, -{68,-67,57}, -{68,-67,58}, -{68,-67,59}, -{68,-67,60}, -{68,-67,61}, -{68,-67,62}, -{68,-67,63}, -{68,-67,64}, -{68,-67,65}, -{68,-67,66}, -{68,-67,67}, -{68,-66,51}, -{68,-66,52}, -{68,-66,53}, -{68,-66,54}, -{68,-66,55}, -{68,-66,56}, -{68,-66,57}, -{68,-66,58}, -{68,-66,59}, -{68,-66,60}, -{68,-66,61}, -{68,-66,62}, -{68,-66,63}, -{68,-66,64}, -{68,-66,65}, -{68,-66,66}, -{68,-66,67}, -{68,-65,48}, -{68,-65,49}, -{68,-65,50}, -{68,-65,51}, -{68,-65,52}, -{68,-65,53}, -{68,-65,54}, -{68,-65,55}, -{68,-65,56}, -{68,-65,57}, -{68,-65,58}, -{68,-65,59}, -{68,-65,60}, -{68,-65,61}, -{68,-65,62}, -{68,-65,63}, -{68,-65,64}, -{68,-65,65}, -{68,-65,66}, -{68,-65,67}, -{68,-64,44}, -{68,-64,45}, -{68,-64,46}, -{68,-64,47}, -{68,-64,48}, -{68,-64,49}, -{68,-64,50}, -{68,-64,51}, -{68,-64,52}, -{68,-64,53}, -{68,-64,54}, -{68,-64,55}, -{68,-64,56}, -{68,-64,57}, -{68,-64,58}, -{68,-64,59}, -{68,-64,60}, -{68,-64,61}, -{68,-64,62}, -{68,-64,63}, -{68,-64,64}, -{68,-64,65}, -{68,-64,66}, -{68,-64,67}, -{68,-63,41}, -{68,-63,42}, -{68,-63,43}, -{68,-63,44}, -{68,-63,45}, -{68,-63,46}, -{68,-63,47}, -{68,-63,48}, -{68,-63,49}, -{68,-63,50}, -{68,-63,51}, -{68,-63,52}, -{68,-63,53}, -{68,-63,54}, -{68,-63,55}, -{68,-63,56}, -{68,-63,57}, -{68,-63,58}, -{68,-63,59}, -{68,-63,60}, -{68,-63,61}, -{68,-63,62}, -{68,-63,63}, -{68,-63,64}, -{68,-63,65}, -{68,-63,66}, -{68,-63,67}, -{68,-62,38}, -{68,-62,39}, -{68,-62,40}, -{68,-62,41}, -{68,-62,42}, -{68,-62,43}, -{68,-62,44}, -{68,-62,45}, -{68,-62,46}, -{68,-62,47}, -{68,-62,48}, -{68,-62,49}, -{68,-62,50}, -{68,-62,51}, -{68,-62,52}, -{68,-62,53}, -{68,-62,54}, -{68,-62,55}, -{68,-62,56}, -{68,-62,57}, -{68,-62,58}, -{68,-62,59}, -{68,-62,60}, -{68,-62,61}, -{68,-62,62}, -{68,-62,63}, -{68,-62,64}, -{68,-62,65}, -{68,-62,66}, -{68,-62,67}, -{68,-61,36}, -{68,-61,37}, -{68,-61,38}, -{68,-61,39}, -{68,-61,40}, -{68,-61,41}, -{68,-61,42}, -{68,-61,43}, -{68,-61,44}, -{68,-61,45}, -{68,-61,46}, -{68,-61,47}, -{68,-61,48}, -{68,-61,49}, -{68,-61,50}, -{68,-61,51}, -{68,-61,52}, -{68,-61,53}, -{68,-61,54}, -{68,-61,55}, -{68,-61,56}, -{68,-61,57}, -{68,-61,58}, -{68,-61,59}, -{68,-61,60}, -{68,-61,61}, -{68,-61,62}, -{68,-61,63}, -{68,-61,64}, -{68,-61,65}, -{68,-61,66}, -{68,-61,67}, -{68,-60,33}, -{68,-60,34}, -{68,-60,35}, -{68,-60,36}, -{68,-60,37}, -{68,-60,38}, -{68,-60,39}, -{68,-60,40}, -{68,-60,41}, -{68,-60,42}, -{68,-60,43}, -{68,-60,44}, -{68,-60,45}, -{68,-60,46}, -{68,-60,47}, -{68,-60,48}, -{68,-60,49}, -{68,-60,50}, -{68,-60,51}, -{68,-60,52}, -{68,-60,53}, -{68,-60,54}, -{68,-60,55}, -{68,-60,56}, -{68,-60,57}, -{68,-60,58}, -{68,-60,59}, -{68,-60,60}, -{68,-60,61}, -{68,-60,62}, -{68,-60,63}, -{68,-60,64}, -{68,-60,65}, -{68,-60,66}, -{68,-60,67}, -{68,-59,30}, -{68,-59,31}, -{68,-59,32}, -{68,-59,33}, -{68,-59,34}, -{68,-59,35}, -{68,-59,36}, -{68,-59,37}, -{68,-59,38}, -{68,-59,39}, -{68,-59,40}, -{68,-59,41}, -{68,-59,42}, -{68,-59,43}, -{68,-59,44}, -{68,-59,45}, -{68,-59,46}, -{68,-59,47}, -{68,-59,48}, -{68,-59,49}, -{68,-59,50}, -{68,-59,51}, -{68,-59,52}, -{68,-59,53}, -{68,-59,54}, -{68,-59,55}, -{68,-59,56}, -{68,-59,57}, -{68,-59,58}, -{68,-59,59}, -{68,-59,60}, -{68,-59,61}, -{68,-59,62}, -{68,-59,63}, -{68,-59,64}, -{68,-59,65}, -{68,-59,66}, -{68,-59,67}, -{68,-59,68}, -{68,-58,28}, -{68,-58,29}, -{68,-58,30}, -{68,-58,31}, -{68,-58,32}, -{68,-58,33}, -{68,-58,34}, -{68,-58,35}, -{68,-58,36}, -{68,-58,37}, -{68,-58,38}, -{68,-58,39}, -{68,-58,40}, -{68,-58,41}, -{68,-58,42}, -{68,-58,43}, -{68,-58,44}, -{68,-58,45}, -{68,-58,46}, -{68,-58,47}, -{68,-58,48}, -{68,-58,49}, -{68,-58,50}, -{68,-58,51}, -{68,-58,52}, -{68,-58,53}, -{68,-58,54}, -{68,-58,55}, -{68,-58,56}, -{68,-58,57}, -{68,-58,58}, -{68,-58,59}, -{68,-58,60}, -{68,-58,61}, -{68,-58,62}, -{68,-58,63}, -{68,-58,64}, -{68,-58,65}, -{68,-58,66}, -{68,-58,67}, -{68,-58,68}, -{68,-57,25}, -{68,-57,26}, -{68,-57,27}, -{68,-57,28}, -{68,-57,29}, -{68,-57,30}, -{68,-57,31}, -{68,-57,32}, -{68,-57,33}, -{68,-57,34}, -{68,-57,35}, -{68,-57,36}, -{68,-57,37}, -{68,-57,38}, -{68,-57,39}, -{68,-57,40}, -{68,-57,41}, -{68,-57,42}, -{68,-57,43}, -{68,-57,44}, -{68,-57,45}, -{68,-57,46}, -{68,-57,47}, -{68,-57,48}, -{68,-57,49}, -{68,-57,50}, -{68,-57,51}, -{68,-57,52}, -{68,-57,53}, -{68,-57,54}, -{68,-57,55}, -{68,-57,56}, -{68,-57,57}, -{68,-57,58}, -{68,-57,59}, -{68,-57,60}, -{68,-57,61}, -{68,-57,62}, -{68,-57,63}, -{68,-57,64}, -{68,-57,65}, -{68,-57,66}, -{68,-57,67}, -{68,-57,68}, -{68,-56,23}, -{68,-56,24}, -{68,-56,25}, -{68,-56,26}, -{68,-56,27}, -{68,-56,28}, -{68,-56,29}, -{68,-56,30}, -{68,-56,31}, -{68,-56,32}, -{68,-56,33}, -{68,-56,34}, -{68,-56,35}, -{68,-56,36}, -{68,-56,37}, -{68,-56,38}, -{68,-56,39}, -{68,-56,40}, -{68,-56,41}, -{68,-56,42}, -{68,-56,43}, -{68,-56,44}, -{68,-56,45}, -{68,-56,46}, -{68,-56,47}, -{68,-56,48}, -{68,-56,49}, -{68,-56,50}, -{68,-56,51}, -{68,-56,52}, -{68,-56,53}, -{68,-56,54}, -{68,-56,55}, -{68,-56,56}, -{68,-56,57}, -{68,-56,58}, -{68,-56,59}, -{68,-56,60}, -{68,-56,61}, -{68,-56,62}, -{68,-56,63}, -{68,-56,64}, -{68,-56,65}, -{68,-56,66}, -{68,-56,67}, -{68,-56,68}, -{68,-55,21}, -{68,-55,22}, -{68,-55,23}, -{68,-55,24}, -{68,-55,25}, -{68,-55,26}, -{68,-55,27}, -{68,-55,28}, -{68,-55,29}, -{68,-55,30}, -{68,-55,31}, -{68,-55,32}, -{68,-55,33}, -{68,-55,34}, -{68,-55,35}, -{68,-55,36}, -{68,-55,37}, -{68,-55,38}, -{68,-55,39}, -{68,-55,40}, -{68,-55,41}, -{68,-55,42}, -{68,-55,43}, -{68,-55,44}, -{68,-55,45}, -{68,-55,46}, -{68,-55,47}, -{68,-55,48}, -{68,-55,49}, -{68,-55,50}, -{68,-55,51}, -{68,-55,52}, -{68,-55,53}, -{68,-55,54}, -{68,-55,55}, -{68,-55,56}, -{68,-55,57}, -{68,-55,58}, -{68,-55,59}, -{68,-55,60}, -{68,-55,61}, -{68,-55,62}, -{68,-55,63}, -{68,-55,64}, -{68,-55,65}, -{68,-55,66}, -{68,-55,67}, -{68,-55,68}, -{68,-54,19}, -{68,-54,20}, -{68,-54,21}, -{68,-54,22}, -{68,-54,23}, -{68,-54,24}, -{68,-54,25}, -{68,-54,26}, -{68,-54,27}, -{68,-54,28}, -{68,-54,29}, -{68,-54,30}, -{68,-54,31}, -{68,-54,32}, -{68,-54,33}, -{68,-54,34}, -{68,-54,35}, -{68,-54,36}, -{68,-54,37}, -{68,-54,38}, -{68,-54,39}, -{68,-54,40}, -{68,-54,41}, -{68,-54,42}, -{68,-54,43}, -{68,-54,44}, -{68,-54,45}, -{68,-54,46}, -{68,-54,47}, -{68,-54,48}, -{68,-54,49}, -{68,-54,50}, -{68,-54,51}, -{68,-54,52}, -{68,-54,53}, -{68,-54,54}, -{68,-54,55}, -{68,-54,56}, -{68,-54,57}, -{68,-54,58}, -{68,-54,59}, -{68,-54,60}, -{68,-54,61}, -{68,-54,62}, -{68,-54,63}, -{68,-54,64}, -{68,-54,65}, -{68,-54,66}, -{68,-54,67}, -{68,-54,68}, -{68,-53,17}, -{68,-53,18}, -{68,-53,19}, -{68,-53,20}, -{68,-53,21}, -{68,-53,22}, -{68,-53,23}, -{68,-53,24}, -{68,-53,25}, -{68,-53,26}, -{68,-53,27}, -{68,-53,28}, -{68,-53,29}, -{68,-53,30}, -{68,-53,31}, -{68,-53,32}, -{68,-53,33}, -{68,-53,34}, -{68,-53,35}, -{68,-53,36}, -{68,-53,37}, -{68,-53,38}, -{68,-53,39}, -{68,-53,40}, -{68,-53,41}, -{68,-53,42}, -{68,-53,43}, -{68,-53,44}, -{68,-53,45}, -{68,-53,46}, -{68,-53,47}, -{68,-53,48}, -{68,-53,49}, -{68,-53,50}, -{68,-53,51}, -{68,-53,52}, -{68,-53,53}, -{68,-53,54}, -{68,-53,55}, -{68,-53,56}, -{68,-53,57}, -{68,-53,58}, -{68,-53,59}, -{68,-53,60}, -{68,-53,61}, -{68,-53,62}, -{68,-53,63}, -{68,-53,64}, -{68,-53,65}, -{68,-53,66}, -{68,-53,67}, -{68,-53,68}, -{68,-52,14}, -{68,-52,15}, -{68,-52,16}, -{68,-52,17}, -{68,-52,18}, -{68,-52,19}, -{68,-52,20}, -{68,-52,21}, -{68,-52,22}, -{68,-52,23}, -{68,-52,24}, -{68,-52,25}, -{68,-52,26}, -{68,-52,27}, -{68,-52,28}, -{68,-52,29}, -{68,-52,30}, -{68,-52,31}, -{68,-52,32}, -{68,-52,33}, -{68,-52,34}, -{68,-52,35}, -{68,-52,36}, -{68,-52,37}, -{68,-52,38}, -{68,-52,39}, -{68,-52,40}, -{68,-52,41}, -{68,-52,42}, -{68,-52,43}, -{68,-52,44}, -{68,-52,45}, -{68,-52,46}, -{68,-52,47}, -{68,-52,48}, -{68,-52,49}, -{68,-52,50}, -{68,-52,51}, -{68,-52,52}, -{68,-52,53}, -{68,-52,54}, -{68,-52,55}, -{68,-52,56}, -{68,-52,57}, -{68,-52,58}, -{68,-52,59}, -{68,-52,60}, -{68,-52,61}, -{68,-52,62}, -{68,-52,63}, -{68,-52,64}, -{68,-52,65}, -{68,-52,66}, -{68,-52,67}, -{68,-52,68}, -{68,-51,12}, -{68,-51,13}, -{68,-51,14}, -{68,-51,15}, -{68,-51,16}, -{68,-51,17}, -{68,-51,18}, -{68,-51,19}, -{68,-51,20}, -{68,-51,21}, -{68,-51,22}, -{68,-51,23}, -{68,-51,24}, -{68,-51,25}, -{68,-51,26}, -{68,-51,27}, -{68,-51,28}, -{68,-51,29}, -{68,-51,30}, -{68,-51,31}, -{68,-51,32}, -{68,-51,33}, -{68,-51,34}, -{68,-51,35}, -{68,-51,36}, -{68,-51,37}, -{68,-51,38}, -{68,-51,39}, -{68,-51,40}, -{68,-51,41}, -{68,-51,42}, -{68,-51,43}, -{68,-51,44}, -{68,-51,45}, -{68,-51,46}, -{68,-51,47}, -{68,-51,48}, -{68,-51,49}, -{68,-51,50}, -{68,-51,51}, -{68,-51,52}, -{68,-51,53}, -{68,-51,54}, -{68,-51,55}, -{68,-51,56}, -{68,-51,57}, -{68,-51,58}, -{68,-51,59}, -{68,-51,60}, -{68,-51,61}, -{68,-51,62}, -{68,-51,63}, -{68,-51,64}, -{68,-51,65}, -{68,-51,66}, -{68,-51,67}, -{68,-51,68}, -{68,-50,10}, -{68,-50,11}, -{68,-50,12}, -{68,-50,13}, -{68,-50,14}, -{68,-50,15}, -{68,-50,16}, -{68,-50,17}, -{68,-50,18}, -{68,-50,19}, -{68,-50,20}, -{68,-50,21}, -{68,-50,22}, -{68,-50,23}, -{68,-50,24}, -{68,-50,25}, -{68,-50,26}, -{68,-50,27}, -{68,-50,28}, -{68,-50,29}, -{68,-50,30}, -{68,-50,31}, -{68,-50,32}, -{68,-50,33}, -{68,-50,34}, -{68,-50,35}, -{68,-50,36}, -{68,-50,37}, -{68,-50,38}, -{68,-50,39}, -{68,-50,40}, -{68,-50,41}, -{68,-50,42}, -{68,-50,43}, -{68,-50,44}, -{68,-50,45}, -{68,-50,46}, -{68,-50,47}, -{68,-50,48}, -{68,-50,49}, -{68,-50,50}, -{68,-50,51}, -{68,-50,52}, -{68,-50,53}, -{68,-50,54}, -{68,-50,55}, -{68,-50,56}, -{68,-50,57}, -{68,-50,58}, -{68,-50,59}, -{68,-50,60}, -{68,-50,61}, -{68,-50,62}, -{68,-50,63}, -{68,-50,64}, -{68,-50,65}, -{68,-50,66}, -{68,-50,67}, -{68,-50,68}, -{68,-49,9}, -{68,-49,10}, -{68,-49,11}, -{68,-49,12}, -{68,-49,13}, -{68,-49,14}, -{68,-49,15}, -{68,-49,16}, -{68,-49,17}, -{68,-49,18}, -{68,-49,19}, -{68,-49,20}, -{68,-49,21}, -{68,-49,22}, -{68,-49,23}, -{68,-49,24}, -{68,-49,25}, -{68,-49,26}, -{68,-49,27}, -{68,-49,28}, -{68,-49,29}, -{68,-49,30}, -{68,-49,31}, -{68,-49,32}, -{68,-49,33}, -{68,-49,34}, -{68,-49,35}, -{68,-49,36}, -{68,-49,37}, -{68,-49,38}, -{68,-49,39}, -{68,-49,40}, -{68,-49,41}, -{68,-49,42}, -{68,-49,43}, -{68,-49,44}, -{68,-49,45}, -{68,-49,46}, -{68,-49,47}, -{68,-49,48}, -{68,-49,49}, -{68,-49,50}, -{68,-49,51}, -{68,-49,52}, -{68,-49,53}, -{68,-49,54}, -{68,-49,55}, -{68,-49,56}, -{68,-49,57}, -{68,-49,58}, -{68,-49,59}, -{68,-49,60}, -{68,-49,61}, -{68,-49,62}, -{68,-49,63}, -{68,-49,64}, -{68,-49,65}, -{68,-49,66}, -{68,-49,67}, -{68,-49,68}, -{68,-48,7}, -{68,-48,8}, -{68,-48,9}, -{68,-48,10}, -{68,-48,11}, -{68,-48,12}, -{68,-48,13}, -{68,-48,14}, -{68,-48,15}, -{68,-48,16}, -{68,-48,17}, -{68,-48,18}, -{68,-48,19}, -{68,-48,20}, -{68,-48,21}, -{68,-48,22}, -{68,-48,23}, -{68,-48,24}, -{68,-48,25}, -{68,-48,26}, -{68,-48,27}, -{68,-48,28}, -{68,-48,29}, -{68,-48,30}, -{68,-48,31}, -{68,-48,32}, -{68,-48,33}, -{68,-48,34}, -{68,-48,35}, -{68,-48,36}, -{68,-48,37}, -{68,-48,38}, -{68,-48,39}, -{68,-48,40}, -{68,-48,41}, -{68,-48,42}, -{68,-48,43}, -{68,-48,44}, -{68,-48,45}, -{68,-48,46}, -{68,-48,47}, -{68,-48,48}, -{68,-48,49}, -{68,-48,50}, -{68,-48,51}, -{68,-48,52}, -{68,-48,53}, -{68,-48,54}, -{68,-48,55}, -{68,-48,56}, -{68,-48,57}, -{68,-48,58}, -{68,-48,59}, -{68,-48,60}, -{68,-48,61}, -{68,-48,62}, -{68,-48,63}, -{68,-48,64}, -{68,-48,65}, -{68,-48,66}, -{68,-48,67}, -{68,-48,68}, -{68,-47,5}, -{68,-47,6}, -{68,-47,7}, -{68,-47,8}, -{68,-47,9}, -{68,-47,10}, -{68,-47,11}, -{68,-47,12}, -{68,-47,13}, -{68,-47,14}, -{68,-47,15}, -{68,-47,16}, -{68,-47,17}, -{68,-47,18}, -{68,-47,19}, -{68,-47,20}, -{68,-47,21}, -{68,-47,22}, -{68,-47,23}, -{68,-47,24}, -{68,-47,25}, -{68,-47,26}, -{68,-47,27}, -{68,-47,28}, -{68,-47,29}, -{68,-47,30}, -{68,-47,31}, -{68,-47,32}, -{68,-47,33}, -{68,-47,34}, -{68,-47,35}, -{68,-47,36}, -{68,-47,37}, -{68,-47,38}, -{68,-47,39}, -{68,-47,40}, -{68,-47,41}, -{68,-47,42}, -{68,-47,43}, -{68,-47,44}, -{68,-47,45}, -{68,-47,46}, -{68,-47,47}, -{68,-47,48}, -{68,-47,49}, -{68,-47,50}, -{68,-47,51}, -{68,-47,52}, -{68,-47,53}, -{68,-47,54}, -{68,-47,55}, -{68,-47,56}, -{68,-47,57}, -{68,-47,58}, -{68,-47,59}, -{68,-47,60}, -{68,-47,61}, -{68,-47,62}, -{68,-47,63}, -{68,-47,64}, -{68,-47,65}, -{68,-47,66}, -{68,-47,67}, -{68,-47,68}, -{68,-46,3}, -{68,-46,4}, -{68,-46,5}, -{68,-46,6}, -{68,-46,7}, -{68,-46,8}, -{68,-46,9}, -{68,-46,10}, -{68,-46,11}, -{68,-46,12}, -{68,-46,13}, -{68,-46,14}, -{68,-46,15}, -{68,-46,16}, -{68,-46,17}, -{68,-46,18}, -{68,-46,19}, -{68,-46,20}, -{68,-46,21}, -{68,-46,22}, -{68,-46,23}, -{68,-46,24}, -{68,-46,25}, -{68,-46,26}, -{68,-46,27}, -{68,-46,28}, -{68,-46,29}, -{68,-46,30}, -{68,-46,31}, -{68,-46,32}, -{68,-46,33}, -{68,-46,34}, -{68,-46,35}, -{68,-46,36}, -{68,-46,37}, -{68,-46,38}, -{68,-46,39}, -{68,-46,40}, -{68,-46,41}, -{68,-46,42}, -{68,-46,43}, -{68,-46,44}, -{68,-46,45}, -{68,-46,46}, -{68,-46,47}, -{68,-46,48}, -{68,-46,49}, -{68,-46,50}, -{68,-46,51}, -{68,-46,52}, -{68,-46,53}, -{68,-46,54}, -{68,-46,55}, -{68,-46,56}, -{68,-46,57}, -{68,-46,58}, -{68,-46,59}, -{68,-46,60}, -{68,-46,61}, -{68,-46,62}, -{68,-46,63}, -{68,-46,64}, -{68,-46,65}, -{68,-46,66}, -{68,-46,67}, -{68,-46,68}, -{68,-45,1}, -{68,-45,2}, -{68,-45,3}, -{68,-45,4}, -{68,-45,5}, -{68,-45,6}, -{68,-45,7}, -{68,-45,8}, -{68,-45,9}, -{68,-45,10}, -{68,-45,11}, -{68,-45,12}, -{68,-45,13}, -{68,-45,14}, -{68,-45,15}, -{68,-45,16}, -{68,-45,17}, -{68,-45,18}, -{68,-45,19}, -{68,-45,20}, -{68,-45,21}, -{68,-45,22}, -{68,-45,23}, -{68,-45,24}, -{68,-45,25}, -{68,-45,26}, -{68,-45,27}, -{68,-45,28}, -{68,-45,29}, -{68,-45,30}, -{68,-45,31}, -{68,-45,32}, -{68,-45,33}, -{68,-45,34}, -{68,-45,35}, -{68,-45,36}, -{68,-45,37}, -{68,-45,38}, -{68,-45,39}, -{68,-45,40}, -{68,-45,41}, -{68,-45,42}, -{68,-45,43}, -{68,-45,44}, -{68,-45,45}, -{68,-45,46}, -{68,-45,47}, -{68,-45,48}, -{68,-45,49}, -{68,-45,50}, -{68,-45,51}, -{68,-45,52}, -{68,-45,53}, -{68,-45,54}, -{68,-45,55}, -{68,-45,56}, -{68,-45,57}, -{68,-45,58}, -{68,-45,59}, -{68,-45,60}, -{68,-45,61}, -{68,-45,62}, -{68,-45,63}, -{68,-45,64}, -{68,-45,65}, -{68,-45,66}, -{68,-45,67}, -{68,-45,68}, -{68,-44,-1}, -{68,-44,0}, -{68,-44,1}, -{68,-44,2}, -{68,-44,3}, -{68,-44,4}, -{68,-44,5}, -{68,-44,6}, -{68,-44,7}, -{68,-44,8}, -{68,-44,9}, -{68,-44,10}, -{68,-44,11}, -{68,-44,12}, -{68,-44,13}, -{68,-44,14}, -{68,-44,15}, -{68,-44,16}, -{68,-44,17}, -{68,-44,18}, -{68,-44,19}, -{68,-44,20}, -{68,-44,21}, -{68,-44,22}, -{68,-44,23}, -{68,-44,24}, -{68,-44,25}, -{68,-44,26}, -{68,-44,27}, -{68,-44,28}, -{68,-44,29}, -{68,-44,30}, -{68,-44,31}, -{68,-44,32}, -{68,-44,33}, -{68,-44,34}, -{68,-44,35}, -{68,-44,36}, -{68,-44,37}, -{68,-44,38}, -{68,-44,39}, -{68,-44,40}, -{68,-44,41}, -{68,-44,42}, -{68,-44,43}, -{68,-44,44}, -{68,-44,45}, -{68,-44,46}, -{68,-44,47}, -{68,-44,48}, -{68,-44,49}, -{68,-44,50}, -{68,-44,51}, -{68,-44,52}, -{68,-44,53}, -{68,-44,54}, -{68,-44,55}, -{68,-44,56}, -{68,-44,57}, -{68,-44,58}, -{68,-44,59}, -{68,-44,60}, -{68,-44,61}, -{68,-44,62}, -{68,-44,63}, -{68,-44,64}, -{68,-44,65}, -{68,-44,66}, -{68,-44,67}, -{68,-44,68}, -{68,-43,-2}, -{68,-43,-1}, -{68,-43,0}, -{68,-43,1}, -{68,-43,2}, -{68,-43,3}, -{68,-43,4}, -{68,-43,5}, -{68,-43,6}, -{68,-43,7}, -{68,-43,8}, -{68,-43,9}, -{68,-43,10}, -{68,-43,11}, -{68,-43,12}, -{68,-43,13}, -{68,-43,14}, -{68,-43,15}, -{68,-43,16}, -{68,-43,17}, -{68,-43,18}, -{68,-43,19}, -{68,-43,20}, -{68,-43,21}, -{68,-43,22}, -{68,-43,23}, -{68,-43,24}, -{68,-43,25}, -{68,-43,26}, -{68,-43,27}, -{68,-43,28}, -{68,-43,29}, -{68,-43,30}, -{68,-43,31}, -{68,-43,32}, -{68,-43,33}, -{68,-43,34}, -{68,-43,35}, -{68,-43,36}, -{68,-43,37}, -{68,-43,38}, -{68,-43,39}, -{68,-43,40}, -{68,-43,41}, -{68,-43,42}, -{68,-43,43}, -{68,-43,44}, -{68,-43,45}, -{68,-43,46}, -{68,-43,47}, -{68,-43,48}, -{68,-43,49}, -{68,-43,50}, -{68,-43,51}, -{68,-43,52}, -{68,-43,53}, -{68,-43,54}, -{68,-43,55}, -{68,-43,56}, -{68,-43,57}, -{68,-43,58}, -{68,-43,59}, -{68,-43,60}, -{68,-43,61}, -{68,-43,62}, -{68,-43,63}, -{68,-43,64}, -{68,-43,65}, -{68,-43,66}, -{68,-43,67}, -{68,-43,68}, -{68,-42,-4}, -{68,-42,-3}, -{68,-42,-2}, -{68,-42,-1}, -{68,-42,0}, -{68,-42,1}, -{68,-42,2}, -{68,-42,3}, -{68,-42,4}, -{68,-42,5}, -{68,-42,6}, -{68,-42,7}, -{68,-42,8}, -{68,-42,9}, -{68,-42,10}, -{68,-42,11}, -{68,-42,12}, -{68,-42,13}, -{68,-42,14}, -{68,-42,15}, -{68,-42,16}, -{68,-42,17}, -{68,-42,18}, -{68,-42,19}, -{68,-42,20}, -{68,-42,21}, -{68,-42,22}, -{68,-42,23}, -{68,-42,24}, -{68,-42,25}, -{68,-42,26}, -{68,-42,27}, -{68,-42,28}, -{68,-42,29}, -{68,-42,30}, -{68,-42,31}, -{68,-42,32}, -{68,-42,33}, -{68,-42,34}, -{68,-42,35}, -{68,-42,36}, -{68,-42,37}, -{68,-42,38}, -{68,-42,39}, -{68,-42,40}, -{68,-42,41}, -{68,-42,42}, -{68,-42,43}, -{68,-42,44}, -{68,-42,45}, -{68,-42,46}, -{68,-42,47}, -{68,-42,48}, -{68,-42,49}, -{68,-42,50}, -{68,-42,51}, -{68,-42,52}, -{68,-42,53}, -{68,-42,54}, -{68,-42,55}, -{68,-42,56}, -{68,-42,57}, -{68,-42,58}, -{68,-42,59}, -{68,-42,60}, -{68,-42,61}, -{68,-42,62}, -{68,-42,63}, -{68,-42,64}, -{68,-42,65}, -{68,-42,66}, -{68,-42,67}, -{68,-42,68}, -{68,-41,-6}, -{68,-41,-5}, -{68,-41,-4}, -{68,-41,-3}, -{68,-41,-2}, -{68,-41,-1}, -{68,-41,0}, -{68,-41,1}, -{68,-41,2}, -{68,-41,3}, -{68,-41,4}, -{68,-41,5}, -{68,-41,6}, -{68,-41,7}, -{68,-41,8}, -{68,-41,9}, -{68,-41,10}, -{68,-41,11}, -{68,-41,12}, -{68,-41,13}, -{68,-41,14}, -{68,-41,15}, -{68,-41,16}, -{68,-41,17}, -{68,-41,18}, -{68,-41,19}, -{68,-41,20}, -{68,-41,21}, -{68,-41,22}, -{68,-41,23}, -{68,-41,24}, -{68,-41,25}, -{68,-41,26}, -{68,-41,27}, -{68,-41,28}, -{68,-41,29}, -{68,-41,30}, -{68,-41,31}, -{68,-41,32}, -{68,-41,33}, -{68,-41,34}, -{68,-41,35}, -{68,-41,36}, -{68,-41,37}, -{68,-41,38}, -{68,-41,39}, -{68,-41,40}, -{68,-41,41}, -{68,-41,42}, -{68,-41,43}, -{68,-41,44}, -{68,-41,45}, -{68,-41,46}, -{68,-41,47}, -{68,-41,48}, -{68,-41,49}, -{68,-41,50}, -{68,-41,51}, -{68,-41,52}, -{68,-41,53}, -{68,-41,54}, -{68,-41,55}, -{68,-41,56}, -{68,-41,57}, -{68,-41,58}, -{68,-41,59}, -{68,-41,60}, -{68,-41,61}, -{68,-41,62}, -{68,-41,63}, -{68,-41,64}, -{68,-41,65}, -{68,-41,66}, -{68,-41,67}, -{68,-41,68}, -{68,-40,-7}, -{68,-40,-6}, -{68,-40,-5}, -{68,-40,-4}, -{68,-40,-3}, -{68,-40,-2}, -{68,-40,-1}, -{68,-40,0}, -{68,-40,1}, -{68,-40,2}, -{68,-40,3}, -{68,-40,4}, -{68,-40,5}, -{68,-40,6}, -{68,-40,7}, -{68,-40,8}, -{68,-40,9}, -{68,-40,10}, -{68,-40,11}, -{68,-40,12}, -{68,-40,13}, -{68,-40,14}, -{68,-40,15}, -{68,-40,16}, -{68,-40,17}, -{68,-40,18}, -{68,-40,19}, -{68,-40,20}, -{68,-40,21}, -{68,-40,22}, -{68,-40,23}, -{68,-40,24}, -{68,-40,25}, -{68,-40,26}, -{68,-40,27}, -{68,-40,28}, -{68,-40,29}, -{68,-40,30}, -{68,-40,31}, -{68,-40,32}, -{68,-40,33}, -{68,-40,34}, -{68,-40,35}, -{68,-40,36}, -{68,-40,37}, -{68,-40,38}, -{68,-40,39}, -{68,-40,40}, -{68,-40,41}, -{68,-40,42}, -{68,-40,43}, -{68,-40,44}, -{68,-40,45}, -{68,-40,46}, -{68,-40,47}, -{68,-40,48}, -{68,-40,49}, -{68,-40,50}, -{68,-40,51}, -{68,-40,52}, -{68,-40,53}, -{68,-40,54}, -{68,-40,55}, -{68,-40,56}, -{68,-40,57}, -{68,-40,58}, -{68,-40,59}, -{68,-40,60}, -{68,-40,61}, -{68,-40,62}, -{68,-40,63}, -{68,-40,64}, -{68,-40,65}, -{68,-40,66}, -{68,-40,67}, -{68,-40,68}, -{68,-39,-9}, -{68,-39,-8}, -{68,-39,-7}, -{68,-39,-6}, -{68,-39,-5}, -{68,-39,-4}, -{68,-39,-3}, -{68,-39,-2}, -{68,-39,-1}, -{68,-39,0}, -{68,-39,1}, -{68,-39,2}, -{68,-39,3}, -{68,-39,4}, -{68,-39,5}, -{68,-39,6}, -{68,-39,7}, -{68,-39,8}, -{68,-39,9}, -{68,-39,10}, -{68,-39,11}, -{68,-39,12}, -{68,-39,13}, -{68,-39,14}, -{68,-39,15}, -{68,-39,16}, -{68,-39,17}, -{68,-39,18}, -{68,-39,19}, -{68,-39,20}, -{68,-39,21}, -{68,-39,22}, -{68,-39,23}, -{68,-39,24}, -{68,-39,25}, -{68,-39,26}, -{68,-39,27}, -{68,-39,28}, -{68,-39,29}, -{68,-39,30}, -{68,-39,31}, -{68,-39,32}, -{68,-39,33}, -{68,-39,34}, -{68,-39,35}, -{68,-39,36}, -{68,-39,37}, -{68,-39,38}, -{68,-39,39}, -{68,-39,40}, -{68,-39,41}, -{68,-39,42}, -{68,-39,43}, -{68,-39,44}, -{68,-39,45}, -{68,-39,46}, -{68,-39,47}, -{68,-39,48}, -{68,-39,49}, -{68,-39,50}, -{68,-39,51}, -{68,-39,52}, -{68,-39,53}, -{68,-39,54}, -{68,-39,55}, -{68,-39,56}, -{68,-39,57}, -{68,-39,58}, -{68,-39,59}, -{68,-39,60}, -{68,-39,61}, -{68,-39,62}, -{68,-39,63}, -{68,-39,64}, -{68,-39,65}, -{68,-39,66}, -{68,-39,67}, -{68,-39,68}, -{68,-38,-10}, -{68,-38,-9}, -{68,-38,-8}, -{68,-38,-7}, -{68,-38,-6}, -{68,-38,-5}, -{68,-38,-4}, -{68,-38,-3}, -{68,-38,-2}, -{68,-38,-1}, -{68,-38,0}, -{68,-38,1}, -{68,-38,2}, -{68,-38,3}, -{68,-38,4}, -{68,-38,5}, -{68,-38,6}, -{68,-38,7}, -{68,-38,8}, -{68,-38,9}, -{68,-38,10}, -{68,-38,11}, -{68,-38,12}, -{68,-38,13}, -{68,-38,14}, -{68,-38,15}, -{68,-38,16}, -{68,-38,17}, -{68,-38,18}, -{68,-38,19}, -{68,-38,20}, -{68,-38,21}, -{68,-38,22}, -{68,-38,23}, -{68,-38,24}, -{68,-38,25}, -{68,-38,26}, -{68,-38,27}, -{68,-38,28}, -{68,-38,29}, -{68,-38,30}, -{68,-38,31}, -{68,-38,32}, -{68,-38,33}, -{68,-38,34}, -{68,-38,35}, -{68,-38,36}, -{68,-38,37}, -{68,-38,38}, -{68,-38,39}, -{68,-38,40}, -{68,-38,41}, -{68,-38,42}, -{68,-38,43}, -{68,-38,44}, -{68,-38,45}, -{68,-38,46}, -{68,-38,47}, -{68,-38,48}, -{68,-38,49}, -{68,-38,50}, -{68,-38,51}, -{68,-38,52}, -{68,-38,53}, -{68,-38,54}, -{68,-38,55}, -{68,-38,56}, -{68,-38,57}, -{68,-38,58}, -{68,-38,59}, -{68,-38,60}, -{68,-38,61}, -{68,-38,62}, -{68,-38,63}, -{68,-38,64}, -{68,-38,65}, -{68,-38,66}, -{68,-38,67}, -{68,-38,68}, -{68,-38,69}, -{68,-37,-12}, -{68,-37,-11}, -{68,-37,-10}, -{68,-37,-9}, -{68,-37,-8}, -{68,-37,-7}, -{68,-37,-6}, -{68,-37,-5}, -{68,-37,-4}, -{68,-37,-3}, -{68,-37,-2}, -{68,-37,-1}, -{68,-37,0}, -{68,-37,1}, -{68,-37,2}, -{68,-37,3}, -{68,-37,4}, -{68,-37,5}, -{68,-37,6}, -{68,-37,7}, -{68,-37,8}, -{68,-37,9}, -{68,-37,10}, -{68,-37,11}, -{68,-37,12}, -{68,-37,13}, -{68,-37,14}, -{68,-37,15}, -{68,-37,16}, -{68,-37,17}, -{68,-37,18}, -{68,-37,19}, -{68,-37,20}, -{68,-37,21}, -{68,-37,22}, -{68,-37,23}, -{68,-37,24}, -{68,-37,25}, -{68,-37,26}, -{68,-37,27}, -{68,-37,28}, -{68,-37,29}, -{68,-37,30}, -{68,-37,31}, -{68,-37,32}, -{68,-37,33}, -{68,-37,34}, -{68,-37,35}, -{68,-37,36}, -{68,-37,37}, -{68,-37,38}, -{68,-37,39}, -{68,-37,40}, -{68,-37,41}, -{68,-37,42}, -{68,-37,43}, -{68,-37,44}, -{68,-37,45}, -{68,-37,46}, -{68,-37,47}, -{68,-37,48}, -{68,-37,49}, -{68,-37,50}, -{68,-37,51}, -{68,-37,52}, -{68,-37,53}, -{68,-37,54}, -{68,-37,55}, -{68,-37,56}, -{68,-37,57}, -{68,-37,58}, -{68,-37,59}, -{68,-37,60}, -{68,-37,61}, -{68,-37,62}, -{68,-37,63}, -{68,-37,64}, -{68,-37,65}, -{68,-37,66}, -{68,-37,67}, -{68,-37,68}, -{68,-37,69}, -{68,-36,-14}, -{68,-36,-13}, -{68,-36,-12}, -{68,-36,-11}, -{68,-36,-10}, -{68,-36,-9}, -{68,-36,-8}, -{68,-36,-7}, -{68,-36,-6}, -{68,-36,-5}, -{68,-36,-4}, -{68,-36,-3}, -{68,-36,-2}, -{68,-36,-1}, -{68,-36,0}, -{68,-36,1}, -{68,-36,2}, -{68,-36,3}, -{68,-36,4}, -{68,-36,5}, -{68,-36,6}, -{68,-36,7}, -{68,-36,8}, -{68,-36,9}, -{68,-36,10}, -{68,-36,11}, -{68,-36,12}, -{68,-36,13}, -{68,-36,14}, -{68,-36,15}, -{68,-36,16}, -{68,-36,17}, -{68,-36,18}, -{68,-36,19}, -{68,-36,20}, -{68,-36,21}, -{68,-36,22}, -{68,-36,23}, -{68,-36,24}, -{68,-36,25}, -{68,-36,26}, -{68,-36,27}, -{68,-36,28}, -{68,-36,29}, -{68,-36,30}, -{68,-36,31}, -{68,-36,32}, -{68,-36,33}, -{68,-36,34}, -{68,-36,35}, -{68,-36,36}, -{68,-36,37}, -{68,-36,38}, -{68,-36,39}, -{68,-36,40}, -{68,-36,41}, -{68,-36,42}, -{68,-36,43}, -{68,-36,44}, -{68,-36,45}, -{68,-36,46}, -{68,-36,47}, -{68,-36,48}, -{68,-36,49}, -{68,-36,50}, -{68,-36,51}, -{68,-36,52}, -{68,-36,53}, -{68,-36,54}, -{68,-36,55}, -{68,-36,56}, -{68,-36,57}, -{68,-36,58}, -{68,-36,59}, -{68,-36,60}, -{68,-36,61}, -{68,-36,62}, -{68,-36,63}, -{68,-36,64}, -{68,-36,65}, -{68,-36,66}, -{68,-36,67}, -{68,-36,68}, -{68,-36,69}, -{68,-35,-15}, -{68,-35,-14}, -{68,-35,-13}, -{68,-35,-12}, -{68,-35,-11}, -{68,-35,-10}, -{68,-35,-9}, -{68,-35,-8}, -{68,-35,-7}, -{68,-35,-6}, -{68,-35,-5}, -{68,-35,-4}, -{68,-35,-3}, -{68,-35,-2}, -{68,-35,-1}, -{68,-35,0}, -{68,-35,1}, -{68,-35,2}, -{68,-35,3}, -{68,-35,4}, -{68,-35,5}, -{68,-35,6}, -{68,-35,7}, -{68,-35,8}, -{68,-35,9}, -{68,-35,10}, -{68,-35,11}, -{68,-35,12}, -{68,-35,13}, -{68,-35,14}, -{68,-35,15}, -{68,-35,16}, -{68,-35,17}, -{68,-35,18}, -{68,-35,19}, -{68,-35,20}, -{68,-35,21}, -{68,-35,22}, -{68,-35,23}, -{68,-35,24}, -{68,-35,25}, -{68,-35,26}, -{68,-35,27}, -{68,-35,28}, -{68,-35,29}, -{68,-35,30}, -{68,-35,31}, -{68,-35,32}, -{68,-35,33}, -{68,-35,34}, -{68,-35,35}, -{68,-35,36}, -{68,-35,37}, -{68,-35,38}, -{68,-35,39}, -{68,-35,40}, -{68,-35,41}, -{68,-35,42}, -{68,-35,43}, -{68,-35,44}, -{68,-35,45}, -{68,-35,46}, -{68,-35,47}, -{68,-35,48}, -{68,-35,49}, -{68,-35,50}, -{68,-35,51}, -{68,-35,52}, -{68,-35,53}, -{68,-35,54}, -{68,-35,55}, -{68,-35,56}, -{68,-35,57}, -{68,-35,58}, -{68,-35,59}, -{68,-35,60}, -{68,-35,61}, -{68,-35,62}, -{68,-35,63}, -{68,-35,64}, -{68,-35,65}, -{68,-35,66}, -{68,-35,67}, -{68,-35,68}, -{68,-35,69}, -{68,-34,-17}, -{68,-34,-16}, -{68,-34,-15}, -{68,-34,-14}, -{68,-34,-13}, -{68,-34,-12}, -{68,-34,-11}, -{68,-34,-10}, -{68,-34,-9}, -{68,-34,-8}, -{68,-34,-7}, -{68,-34,-6}, -{68,-34,-5}, -{68,-34,-4}, -{68,-34,-3}, -{68,-34,-2}, -{68,-34,-1}, -{68,-34,0}, -{68,-34,1}, -{68,-34,2}, -{68,-34,3}, -{68,-34,4}, -{68,-34,5}, -{68,-34,6}, -{68,-34,7}, -{68,-34,8}, -{68,-34,9}, -{68,-34,10}, -{68,-34,11}, -{68,-34,12}, -{68,-34,13}, -{68,-34,14}, -{68,-34,15}, -{68,-34,16}, -{68,-34,17}, -{68,-34,18}, -{68,-34,19}, -{68,-34,20}, -{68,-34,21}, -{68,-34,22}, -{68,-34,23}, -{68,-34,24}, -{68,-34,25}, -{68,-34,26}, -{68,-34,27}, -{68,-34,28}, -{68,-34,29}, -{68,-34,30}, -{68,-34,31}, -{68,-34,32}, -{68,-34,33}, -{68,-34,34}, -{68,-34,35}, -{68,-34,36}, -{68,-34,37}, -{68,-34,38}, -{68,-34,39}, -{68,-34,40}, -{68,-34,41}, -{68,-34,42}, -{68,-34,43}, -{68,-34,44}, -{68,-34,45}, -{68,-34,46}, -{68,-34,47}, -{68,-34,48}, -{68,-34,49}, -{68,-34,50}, -{68,-34,51}, -{68,-34,52}, -{68,-34,53}, -{68,-34,54}, -{68,-34,55}, -{68,-34,56}, -{68,-34,57}, -{68,-34,58}, -{68,-34,59}, -{68,-34,60}, -{68,-34,61}, -{68,-34,62}, -{68,-34,63}, -{68,-34,64}, -{68,-34,65}, -{68,-34,66}, -{68,-34,67}, -{68,-34,68}, -{68,-34,69}, -{68,-33,-18}, -{68,-33,-17}, -{68,-33,-16}, -{68,-33,-15}, -{68,-33,-14}, -{68,-33,-13}, -{68,-33,-12}, -{68,-33,-11}, -{68,-33,-10}, -{68,-33,-9}, -{68,-33,-8}, -{68,-33,-7}, -{68,-33,-6}, -{68,-33,-5}, -{68,-33,-4}, -{68,-33,-3}, -{68,-33,-2}, -{68,-33,-1}, -{68,-33,0}, -{68,-33,1}, -{68,-33,2}, -{68,-33,3}, -{68,-33,4}, -{68,-33,5}, -{68,-33,6}, -{68,-33,7}, -{68,-33,8}, -{68,-33,9}, -{68,-33,10}, -{68,-33,11}, -{68,-33,12}, -{68,-33,13}, -{68,-33,14}, -{68,-33,15}, -{68,-33,16}, -{68,-33,17}, -{68,-33,18}, -{68,-33,19}, -{68,-33,20}, -{68,-33,21}, -{68,-33,22}, -{68,-33,23}, -{68,-33,24}, -{68,-33,25}, -{68,-33,26}, -{68,-33,27}, -{68,-33,28}, -{68,-33,29}, -{68,-33,30}, -{68,-33,31}, -{68,-33,32}, -{68,-33,33}, -{68,-33,34}, -{68,-33,35}, -{68,-33,36}, -{68,-33,37}, -{68,-33,38}, -{68,-33,39}, -{68,-33,40}, -{68,-33,41}, -{68,-33,42}, -{68,-33,43}, -{68,-33,44}, -{68,-33,45}, -{68,-33,46}, -{68,-33,47}, -{68,-33,48}, -{68,-33,49}, -{68,-33,50}, -{68,-33,51}, -{68,-33,52}, -{68,-33,53}, -{68,-33,54}, -{68,-33,55}, -{68,-33,56}, -{68,-33,57}, -{68,-33,58}, -{68,-33,59}, -{68,-33,60}, -{68,-33,61}, -{68,-33,62}, -{68,-33,63}, -{68,-33,64}, -{68,-33,65}, -{68,-33,66}, -{68,-33,67}, -{68,-33,68}, -{68,-33,69}, -{68,-32,-19}, -{68,-32,-18}, -{68,-32,-17}, -{68,-32,-16}, -{68,-32,-15}, -{68,-32,-14}, -{68,-32,-13}, -{68,-32,-12}, -{68,-32,-11}, -{68,-32,-10}, -{68,-32,-9}, -{68,-32,-8}, -{68,-32,-7}, -{68,-32,-6}, -{68,-32,-5}, -{68,-32,-4}, -{68,-32,-3}, -{68,-32,-2}, -{68,-32,-1}, -{68,-32,0}, -{68,-32,1}, -{68,-32,2}, -{68,-32,3}, -{68,-32,4}, -{68,-32,5}, -{68,-32,6}, -{68,-32,7}, -{68,-32,8}, -{68,-32,9}, -{68,-32,10}, -{68,-32,11}, -{68,-32,12}, -{68,-32,13}, -{68,-32,14}, -{68,-32,15}, -{68,-32,16}, -{68,-32,17}, -{68,-32,18}, -{68,-32,19}, -{68,-32,20}, -{68,-32,21}, -{68,-32,22}, -{68,-32,23}, -{68,-32,24}, -{68,-32,25}, -{68,-32,26}, -{68,-32,27}, -{68,-32,28}, -{68,-32,29}, -{68,-32,30}, -{68,-32,31}, -{68,-32,32}, -{68,-32,33}, -{68,-32,34}, -{68,-32,35}, -{68,-32,36}, -{68,-32,37}, -{68,-32,38}, -{68,-32,39}, -{68,-32,40}, -{68,-32,41}, -{68,-32,42}, -{68,-32,43}, -{68,-32,44}, -{68,-32,45}, -{68,-32,46}, -{68,-32,47}, -{68,-32,48}, -{68,-32,49}, -{68,-32,50}, -{68,-32,51}, -{68,-32,52}, -{68,-32,53}, -{68,-32,54}, -{68,-32,55}, -{68,-32,56}, -{68,-32,57}, -{68,-32,58}, -{68,-32,59}, -{68,-32,60}, -{68,-32,61}, -{68,-32,62}, -{68,-32,63}, -{68,-32,64}, -{68,-32,65}, -{68,-32,66}, -{68,-32,67}, -{68,-32,68}, -{68,-32,69}, -{68,-31,-21}, -{68,-31,-20}, -{68,-31,-19}, -{68,-31,-18}, -{68,-31,-17}, -{68,-31,-16}, -{68,-31,-15}, -{68,-31,-14}, -{68,-31,-13}, -{68,-31,-12}, -{68,-31,-11}, -{68,-31,-10}, -{68,-31,-9}, -{68,-31,-8}, -{68,-31,-7}, -{68,-31,-6}, -{68,-31,-5}, -{68,-31,-4}, -{68,-31,-3}, -{68,-31,-2}, -{68,-31,-1}, -{68,-31,0}, -{68,-31,1}, -{68,-31,2}, -{68,-31,3}, -{68,-31,4}, -{68,-31,5}, -{68,-31,6}, -{68,-31,7}, -{68,-31,8}, -{68,-31,9}, -{68,-31,10}, -{68,-31,11}, -{68,-31,12}, -{68,-31,13}, -{68,-31,14}, -{68,-31,15}, -{68,-31,16}, -{68,-31,17}, -{68,-31,18}, -{68,-31,19}, -{68,-31,20}, -{68,-31,21}, -{68,-31,22}, -{68,-31,23}, -{68,-31,24}, -{68,-31,25}, -{68,-31,26}, -{68,-31,27}, -{68,-31,28}, -{68,-31,29}, -{68,-31,30}, -{68,-31,31}, -{68,-31,32}, -{68,-31,33}, -{68,-31,34}, -{68,-31,35}, -{68,-31,36}, -{68,-31,37}, -{68,-31,38}, -{68,-31,39}, -{68,-31,40}, -{68,-31,41}, -{68,-31,42}, -{68,-31,43}, -{68,-31,44}, -{68,-31,45}, -{68,-31,46}, -{68,-31,47}, -{68,-31,48}, -{68,-31,49}, -{68,-31,50}, -{68,-31,51}, -{68,-31,52}, -{68,-31,53}, -{68,-31,54}, -{68,-31,55}, -{68,-31,56}, -{68,-31,57}, -{68,-31,58}, -{68,-31,59}, -{68,-31,60}, -{68,-31,61}, -{68,-31,62}, -{68,-31,63}, -{68,-31,64}, -{68,-31,65}, -{68,-31,66}, -{68,-31,67}, -{68,-31,68}, -{68,-31,69}, -{68,-30,-22}, -{68,-30,-21}, -{68,-30,-20}, -{68,-30,-19}, -{68,-30,-18}, -{68,-30,-17}, -{68,-30,-16}, -{68,-30,-15}, -{68,-30,-14}, -{68,-30,-13}, -{68,-30,-12}, -{68,-30,-11}, -{68,-30,-10}, -{68,-30,-9}, -{68,-30,-8}, -{68,-30,-7}, -{68,-30,-6}, -{68,-30,-5}, -{68,-30,-4}, -{68,-30,-3}, -{68,-30,-2}, -{68,-30,-1}, -{68,-30,0}, -{68,-30,1}, -{68,-30,2}, -{68,-30,3}, -{68,-30,4}, -{68,-30,5}, -{68,-30,6}, -{68,-30,7}, -{68,-30,8}, -{68,-30,9}, -{68,-30,10}, -{68,-30,11}, -{68,-30,12}, -{68,-30,13}, -{68,-30,14}, -{68,-30,15}, -{68,-30,16}, -{68,-30,17}, -{68,-30,18}, -{68,-30,19}, -{68,-30,20}, -{68,-30,21}, -{68,-30,22}, -{68,-30,23}, -{68,-30,24}, -{68,-30,25}, -{68,-30,26}, -{68,-30,27}, -{68,-30,28}, -{68,-30,29}, -{68,-30,30}, -{68,-30,31}, -{68,-30,32}, -{68,-30,33}, -{68,-30,34}, -{68,-30,35}, -{68,-30,36}, -{68,-30,37}, -{68,-30,38}, -{68,-30,39}, -{68,-30,40}, -{68,-30,41}, -{68,-30,42}, -{68,-30,43}, -{68,-30,44}, -{68,-30,45}, -{68,-30,46}, -{68,-30,47}, -{68,-30,48}, -{68,-30,49}, -{68,-30,50}, -{68,-30,51}, -{68,-30,52}, -{68,-30,53}, -{68,-30,54}, -{68,-30,55}, -{68,-30,56}, -{68,-30,57}, -{68,-30,58}, -{68,-30,59}, -{68,-30,60}, -{68,-30,61}, -{68,-30,62}, -{68,-30,63}, -{68,-30,64}, -{68,-30,65}, -{68,-30,66}, -{68,-30,67}, -{68,-30,68}, -{68,-30,69}, -{68,-29,-24}, -{68,-29,-23}, -{68,-29,-22}, -{68,-29,-21}, -{68,-29,-20}, -{68,-29,-19}, -{68,-29,-18}, -{68,-29,-17}, -{68,-29,-16}, -{68,-29,-15}, -{68,-29,-14}, -{68,-29,-13}, -{68,-29,-12}, -{68,-29,-11}, -{68,-29,-10}, -{68,-29,-9}, -{68,-29,-8}, -{68,-29,-7}, -{68,-29,-6}, -{68,-29,-5}, -{68,-29,-4}, -{68,-29,-3}, -{68,-29,-2}, -{68,-29,-1}, -{68,-29,0}, -{68,-29,1}, -{68,-29,2}, -{68,-29,3}, -{68,-29,4}, -{68,-29,5}, -{68,-29,6}, -{68,-29,7}, -{68,-29,8}, -{68,-29,9}, -{68,-29,10}, -{68,-29,11}, -{68,-29,12}, -{68,-29,13}, -{68,-29,14}, -{68,-29,15}, -{68,-29,16}, -{68,-29,17}, -{68,-29,18}, -{68,-29,19}, -{68,-29,20}, -{68,-29,21}, -{68,-29,22}, -{68,-29,23}, -{68,-29,24}, -{68,-29,25}, -{68,-29,26}, -{68,-29,27}, -{68,-29,28}, -{68,-29,29}, -{68,-29,30}, -{68,-29,31}, -{68,-29,32}, -{68,-29,33}, -{68,-29,34}, -{68,-29,35}, -{68,-29,36}, -{68,-29,37}, -{68,-29,38}, -{68,-29,39}, -{68,-29,40}, -{68,-29,41}, -{68,-29,42}, -{68,-29,43}, -{68,-29,44}, -{68,-29,45}, -{68,-29,46}, -{68,-29,47}, -{68,-29,48}, -{68,-29,49}, -{68,-29,50}, -{68,-29,51}, -{68,-29,52}, -{68,-29,53}, -{68,-29,54}, -{68,-29,55}, -{68,-29,56}, -{68,-29,57}, -{68,-29,58}, -{68,-29,59}, -{68,-29,60}, -{68,-29,61}, -{68,-29,62}, -{68,-29,63}, -{68,-29,64}, -{68,-29,65}, -{68,-29,66}, -{68,-29,67}, -{68,-29,68}, -{68,-29,69}, -{68,-28,-25}, -{68,-28,-24}, -{68,-28,-23}, -{68,-28,-22}, -{68,-28,-21}, -{68,-28,-20}, -{68,-28,-19}, -{68,-28,-18}, -{68,-28,-17}, -{68,-28,-16}, -{68,-28,-15}, -{68,-28,-14}, -{68,-28,-13}, -{68,-28,-12}, -{68,-28,-11}, -{68,-28,-10}, -{68,-28,-9}, -{68,-28,-8}, -{68,-28,-7}, -{68,-28,-6}, -{68,-28,-5}, -{68,-28,-4}, -{68,-28,-3}, -{68,-28,-2}, -{68,-28,-1}, -{68,-28,0}, -{68,-28,1}, -{68,-28,2}, -{68,-28,3}, -{68,-28,4}, -{68,-28,5}, -{68,-28,6}, -{68,-28,7}, -{68,-28,8}, -{68,-28,9}, -{68,-28,10}, -{68,-28,11}, -{68,-28,12}, -{68,-28,13}, -{68,-28,14}, -{68,-28,15}, -{68,-28,16}, -{68,-28,17}, -{68,-28,18}, -{68,-28,19}, -{68,-28,20}, -{68,-28,21}, -{68,-28,22}, -{68,-28,23}, -{68,-28,24}, -{68,-28,25}, -{68,-28,26}, -{68,-28,27}, -{68,-28,28}, -{68,-28,29}, -{68,-28,30}, -{68,-28,31}, -{68,-28,32}, -{68,-28,33}, -{68,-28,34}, -{68,-28,35}, -{68,-28,36}, -{68,-28,37}, -{68,-28,38}, -{68,-28,39}, -{68,-28,40}, -{68,-28,41}, -{68,-28,42}, -{68,-28,43}, -{68,-28,44}, -{68,-28,45}, -{68,-28,46}, -{68,-28,47}, -{68,-28,48}, -{68,-28,49}, -{68,-28,50}, -{68,-28,51}, -{68,-28,52}, -{68,-28,53}, -{68,-28,54}, -{68,-28,55}, -{68,-28,56}, -{68,-28,57}, -{68,-28,58}, -{68,-28,59}, -{68,-28,60}, -{68,-28,61}, -{68,-28,62}, -{68,-28,63}, -{68,-28,64}, -{68,-28,65}, -{68,-28,66}, -{68,-28,67}, -{68,-28,68}, -{68,-28,69}, -{68,-27,-27}, -{68,-27,-26}, -{68,-27,-25}, -{68,-27,-24}, -{68,-27,-23}, -{68,-27,-22}, -{68,-27,-21}, -{68,-27,-20}, -{68,-27,-19}, -{68,-27,-18}, -{68,-27,-17}, -{68,-27,-16}, -{68,-27,-15}, -{68,-27,-14}, -{68,-27,-13}, -{68,-27,-12}, -{68,-27,-11}, -{68,-27,-10}, -{68,-27,-9}, -{68,-27,-8}, -{68,-27,-7}, -{68,-27,-6}, -{68,-27,-5}, -{68,-27,-4}, -{68,-27,-3}, -{68,-27,-2}, -{68,-27,-1}, -{68,-27,0}, -{68,-27,1}, -{68,-27,2}, -{68,-27,3}, -{68,-27,4}, -{68,-27,5}, -{68,-27,6}, -{68,-27,7}, -{68,-27,8}, -{68,-27,9}, -{68,-27,10}, -{68,-27,11}, -{68,-27,12}, -{68,-27,13}, -{68,-27,14}, -{68,-27,15}, -{68,-27,16}, -{68,-27,17}, -{68,-27,18}, -{68,-27,19}, -{68,-27,20}, -{68,-27,21}, -{68,-27,22}, -{68,-27,23}, -{68,-27,24}, -{68,-27,25}, -{68,-27,26}, -{68,-27,27}, -{68,-27,28}, -{68,-27,29}, -{68,-27,30}, -{68,-27,31}, -{68,-27,32}, -{68,-27,33}, -{68,-27,34}, -{68,-27,35}, -{68,-27,36}, -{68,-27,37}, -{68,-27,38}, -{68,-27,39}, -{68,-27,40}, -{68,-27,41}, -{68,-27,42}, -{68,-27,43}, -{68,-27,44}, -{68,-27,45}, -{68,-27,46}, -{68,-27,47}, -{68,-27,48}, -{68,-27,49}, -{68,-27,50}, -{68,-27,51}, -{68,-27,52}, -{68,-27,53}, -{68,-27,54}, -{68,-27,55}, -{68,-27,56}, -{68,-27,57}, -{68,-27,58}, -{68,-27,59}, -{68,-27,60}, -{68,-27,61}, -{68,-27,62}, -{68,-27,63}, -{68,-27,64}, -{68,-27,65}, -{68,-27,66}, -{68,-27,67}, -{68,-27,68}, -{68,-27,69}, -{68,-26,-28}, -{68,-26,-27}, -{68,-26,-26}, -{68,-26,-25}, -{68,-26,-24}, -{68,-26,-23}, -{68,-26,-22}, -{68,-26,-21}, -{68,-26,-20}, -{68,-26,-19}, -{68,-26,-18}, -{68,-26,-17}, -{68,-26,-16}, -{68,-26,-15}, -{68,-26,-14}, -{68,-26,-13}, -{68,-26,-12}, -{68,-26,-11}, -{68,-26,-10}, -{68,-26,-9}, -{68,-26,-8}, -{68,-26,-7}, -{68,-26,-6}, -{68,-26,-5}, -{68,-26,-4}, -{68,-26,-3}, -{68,-26,-2}, -{68,-26,-1}, -{68,-26,0}, -{68,-26,1}, -{68,-26,2}, -{68,-26,3}, -{68,-26,4}, -{68,-26,5}, -{68,-26,6}, -{68,-26,7}, -{68,-26,8}, -{68,-26,9}, -{68,-26,10}, -{68,-26,11}, -{68,-26,12}, -{68,-26,13}, -{68,-26,14}, -{68,-26,15}, -{68,-26,16}, -{68,-26,17}, -{68,-26,18}, -{68,-26,19}, -{68,-26,20}, -{68,-26,21}, -{68,-26,22}, -{68,-26,23}, -{68,-26,24}, -{68,-26,25}, -{68,-26,26}, -{68,-26,27}, -{68,-26,28}, -{68,-26,29}, -{68,-26,30}, -{68,-26,31}, -{68,-26,32}, -{68,-26,33}, -{68,-26,34}, -{68,-26,35}, -{68,-26,36}, -{68,-26,37}, -{68,-26,38}, -{68,-26,39}, -{68,-26,40}, -{68,-26,41}, -{68,-26,42}, -{68,-26,43}, -{68,-26,44}, -{68,-26,45}, -{68,-26,46}, -{68,-26,47}, -{68,-26,48}, -{68,-26,49}, -{68,-26,50}, -{68,-26,51}, -{68,-26,52}, -{68,-26,53}, -{68,-26,54}, -{68,-26,55}, -{68,-26,56}, -{68,-26,57}, -{68,-26,58}, -{68,-26,59}, -{68,-26,60}, -{68,-26,61}, -{68,-26,62}, -{68,-26,63}, -{68,-26,64}, -{68,-26,65}, -{68,-26,66}, -{68,-26,67}, -{68,-26,68}, -{68,-26,69}, -{68,-25,-29}, -{68,-25,-28}, -{68,-25,-27}, -{68,-25,-26}, -{68,-25,-25}, -{68,-25,-24}, -{68,-25,-23}, -{68,-25,-22}, -{68,-25,-21}, -{68,-25,-20}, -{68,-25,-19}, -{68,-25,-18}, -{68,-25,-17}, -{68,-25,-16}, -{68,-25,-15}, -{68,-25,-14}, -{68,-25,-13}, -{68,-25,-12}, -{68,-25,-11}, -{68,-25,-10}, -{68,-25,-9}, -{68,-25,-8}, -{68,-25,-7}, -{68,-25,-6}, -{68,-25,-5}, -{68,-25,-4}, -{68,-25,-3}, -{68,-25,-2}, -{68,-25,-1}, -{68,-25,0}, -{68,-25,1}, -{68,-25,2}, -{68,-25,3}, -{68,-25,4}, -{68,-25,5}, -{68,-25,6}, -{68,-25,7}, -{68,-25,8}, -{68,-25,9}, -{68,-25,10}, -{68,-25,11}, -{68,-25,12}, -{68,-25,13}, -{68,-25,14}, -{68,-25,15}, -{68,-25,16}, -{68,-25,17}, -{68,-25,18}, -{68,-25,19}, -{68,-25,20}, -{68,-25,21}, -{68,-25,22}, -{68,-25,23}, -{68,-25,24}, -{68,-25,25}, -{68,-25,26}, -{68,-25,27}, -{68,-25,28}, -{68,-25,29}, -{68,-25,30}, -{68,-25,31}, -{68,-25,32}, -{68,-25,33}, -{68,-25,34}, -{68,-25,35}, -{68,-25,36}, -{68,-25,37}, -{68,-25,38}, -{68,-25,39}, -{68,-25,40}, -{68,-25,41}, -{68,-25,42}, -{68,-25,43}, -{68,-25,44}, -{68,-25,45}, -{68,-25,46}, -{68,-25,47}, -{68,-25,48}, -{68,-25,49}, -{68,-25,50}, -{68,-25,51}, -{68,-25,52}, -{68,-25,53}, -{68,-25,54}, -{68,-25,55}, -{68,-25,56}, -{68,-25,57}, -{68,-25,58}, -{68,-25,59}, -{68,-25,60}, -{68,-25,61}, -{68,-25,62}, -{68,-25,63}, -{68,-25,64}, -{68,-25,65}, -{68,-25,66}, -{68,-25,67}, -{68,-25,68}, -{68,-25,69}, -{68,-24,-31}, -{68,-24,-30}, -{68,-24,-29}, -{68,-24,-28}, -{68,-24,-27}, -{68,-24,-26}, -{68,-24,-25}, -{68,-24,-24}, -{68,-24,-23}, -{68,-24,-22}, -{68,-24,-21}, -{68,-24,-20}, -{68,-24,-19}, -{68,-24,-18}, -{68,-24,-17}, -{68,-24,-16}, -{68,-24,-15}, -{68,-24,-14}, -{68,-24,-13}, -{68,-24,-12}, -{68,-24,-11}, -{68,-24,-10}, -{68,-24,-9}, -{68,-24,-8}, -{68,-24,-7}, -{68,-24,-6}, -{68,-24,-5}, -{68,-24,-4}, -{68,-24,-3}, -{68,-24,-2}, -{68,-24,-1}, -{68,-24,0}, -{68,-24,1}, -{68,-24,2}, -{68,-24,3}, -{68,-24,4}, -{68,-24,5}, -{68,-24,6}, -{68,-24,7}, -{68,-24,8}, -{68,-24,9}, -{68,-24,10}, -{68,-24,11}, -{68,-24,12}, -{68,-24,13}, -{68,-24,14}, -{68,-24,15}, -{68,-24,16}, -{68,-24,17}, -{68,-24,18}, -{68,-24,19}, -{68,-24,20}, -{68,-24,21}, -{68,-24,22}, -{68,-24,23}, -{68,-24,24}, -{68,-24,25}, -{68,-24,26}, -{68,-24,27}, -{68,-24,28}, -{68,-24,29}, -{68,-24,30}, -{68,-24,31}, -{68,-24,32}, -{68,-24,33}, -{68,-24,34}, -{68,-24,35}, -{68,-24,36}, -{68,-24,37}, -{68,-24,38}, -{68,-24,39}, -{68,-24,40}, -{68,-24,41}, -{68,-24,42}, -{68,-24,43}, -{68,-24,44}, -{68,-24,45}, -{68,-24,46}, -{68,-24,47}, -{68,-24,48}, -{68,-24,49}, -{68,-24,50}, -{68,-24,51}, -{68,-24,52}, -{68,-24,53}, -{68,-24,54}, -{68,-24,55}, -{68,-24,56}, -{68,-24,57}, -{68,-24,58}, -{68,-24,59}, -{68,-24,60}, -{68,-24,61}, -{68,-24,62}, -{68,-24,63}, -{68,-24,64}, -{68,-24,65}, -{68,-24,66}, -{68,-24,67}, -{68,-24,68}, -{68,-24,69}, -{68,-23,-32}, -{68,-23,-31}, -{68,-23,-30}, -{68,-23,-29}, -{68,-23,-28}, -{68,-23,-27}, -{68,-23,-26}, -{68,-23,-25}, -{68,-23,-24}, -{68,-23,-23}, -{68,-23,-22}, -{68,-23,-21}, -{68,-23,-20}, -{68,-23,-19}, -{68,-23,-18}, -{68,-23,-17}, -{68,-23,-16}, -{68,-23,-15}, -{68,-23,-14}, -{68,-23,-13}, -{68,-23,-12}, -{68,-23,-11}, -{68,-23,-10}, -{68,-23,-9}, -{68,-23,-8}, -{68,-23,-7}, -{68,-23,-6}, -{68,-23,-5}, -{68,-23,-4}, -{68,-23,-3}, -{68,-23,-2}, -{68,-23,-1}, -{68,-23,0}, -{68,-23,1}, -{68,-23,2}, -{68,-23,3}, -{68,-23,4}, -{68,-23,5}, -{68,-23,6}, -{68,-23,7}, -{68,-23,8}, -{68,-23,9}, -{68,-23,10}, -{68,-23,11}, -{68,-23,12}, -{68,-23,13}, -{68,-23,14}, -{68,-23,15}, -{68,-23,16}, -{68,-23,17}, -{68,-23,18}, -{68,-23,19}, -{68,-23,20}, -{68,-23,21}, -{68,-23,22}, -{68,-23,23}, -{68,-23,24}, -{68,-23,25}, -{68,-23,26}, -{68,-23,27}, -{68,-23,28}, -{68,-23,29}, -{68,-23,30}, -{68,-23,31}, -{68,-23,32}, -{68,-23,33}, -{68,-23,34}, -{68,-23,35}, -{68,-23,36}, -{68,-23,37}, -{68,-23,38}, -{68,-23,39}, -{68,-23,40}, -{68,-23,41}, -{68,-23,42}, -{68,-23,43}, -{68,-23,44}, -{68,-23,45}, -{68,-23,46}, -{68,-23,47}, -{68,-23,48}, -{68,-23,49}, -{68,-23,50}, -{68,-23,51}, -{68,-23,52}, -{68,-23,53}, -{68,-23,54}, -{68,-23,55}, -{68,-23,56}, -{68,-23,57}, -{68,-23,58}, -{68,-23,59}, -{68,-23,60}, -{68,-23,61}, -{68,-23,62}, -{68,-23,63}, -{68,-23,64}, -{68,-23,65}, -{68,-23,66}, -{68,-23,67}, -{68,-23,68}, -{68,-23,69}, -{68,-22,-33}, -{68,-22,-32}, -{68,-22,-31}, -{68,-22,-30}, -{68,-22,-29}, -{68,-22,-28}, -{68,-22,-27}, -{68,-22,-26}, -{68,-22,-25}, -{68,-22,-24}, -{68,-22,-23}, -{68,-22,-22}, -{68,-22,-21}, -{68,-22,-20}, -{68,-22,-19}, -{68,-22,-18}, -{68,-22,-17}, -{68,-22,-16}, -{68,-22,-15}, -{68,-22,-14}, -{68,-22,-13}, -{68,-22,-12}, -{68,-22,-11}, -{68,-22,-10}, -{68,-22,-9}, -{68,-22,-8}, -{68,-22,-7}, -{68,-22,-6}, -{68,-22,-5}, -{68,-22,-4}, -{68,-22,-3}, -{68,-22,-2}, -{68,-22,-1}, -{68,-22,0}, -{68,-22,1}, -{68,-22,2}, -{68,-22,3}, -{68,-22,4}, -{68,-22,5}, -{68,-22,6}, -{68,-22,7}, -{68,-22,8}, -{68,-22,9}, -{68,-22,10}, -{68,-22,11}, -{68,-22,12}, -{68,-22,13}, -{68,-22,14}, -{68,-22,15}, -{68,-22,16}, -{68,-22,17}, -{68,-22,18}, -{68,-22,19}, -{68,-22,20}, -{68,-22,21}, -{68,-22,22}, -{68,-22,23}, -{68,-22,24}, -{68,-22,25}, -{68,-22,26}, -{68,-22,27}, -{68,-22,28}, -{68,-22,29}, -{68,-22,30}, -{68,-22,31}, -{68,-22,32}, -{68,-22,33}, -{68,-22,34}, -{68,-22,35}, -{68,-22,36}, -{68,-22,37}, -{68,-22,38}, -{68,-22,39}, -{68,-22,40}, -{68,-22,41}, -{68,-22,42}, -{68,-22,43}, -{68,-22,44}, -{68,-22,45}, -{68,-22,46}, -{68,-22,47}, -{68,-22,48}, -{68,-22,49}, -{68,-22,50}, -{68,-22,51}, -{68,-22,52}, -{68,-22,53}, -{68,-22,54}, -{68,-22,55}, -{68,-22,56}, -{68,-22,57}, -{68,-22,58}, -{68,-22,59}, -{68,-22,60}, -{68,-22,61}, -{68,-22,62}, -{68,-22,63}, -{68,-22,64}, -{68,-22,65}, -{68,-22,66}, -{68,-22,67}, -{68,-22,68}, -{68,-22,69}, -{68,-21,-35}, -{68,-21,-34}, -{68,-21,-33}, -{68,-21,-32}, -{68,-21,-31}, -{68,-21,-30}, -{68,-21,-29}, -{68,-21,-28}, -{68,-21,-27}, -{68,-21,-26}, -{68,-21,-25}, -{68,-21,-24}, -{68,-21,-23}, -{68,-21,-22}, -{68,-21,-21}, -{68,-21,-20}, -{68,-21,-19}, -{68,-21,-18}, -{68,-21,-17}, -{68,-21,-16}, -{68,-21,-15}, -{68,-21,-14}, -{68,-21,-13}, -{68,-21,-12}, -{68,-21,-11}, -{68,-21,-10}, -{68,-21,-9}, -{68,-21,-8}, -{68,-21,-7}, -{68,-21,-6}, -{68,-21,-5}, -{68,-21,-4}, -{68,-21,-3}, -{68,-21,-2}, -{68,-21,-1}, -{68,-21,0}, -{68,-21,1}, -{68,-21,2}, -{68,-21,3}, -{68,-21,4}, -{68,-21,5}, -{68,-21,6}, -{68,-21,7}, -{68,-21,8}, -{68,-21,9}, -{68,-21,10}, -{68,-21,11}, -{68,-21,12}, -{68,-21,13}, -{68,-21,14}, -{68,-21,15}, -{68,-21,16}, -{68,-21,17}, -{68,-21,18}, -{68,-21,19}, -{68,-21,20}, -{68,-21,21}, -{68,-21,22}, -{68,-21,23}, -{68,-21,24}, -{68,-21,25}, -{68,-21,26}, -{68,-21,27}, -{68,-21,28}, -{68,-21,29}, -{68,-21,30}, -{68,-21,31}, -{68,-21,32}, -{68,-21,33}, -{68,-21,34}, -{68,-21,35}, -{68,-21,36}, -{68,-21,37}, -{68,-21,38}, -{68,-21,39}, -{68,-21,40}, -{68,-21,41}, -{68,-21,42}, -{68,-21,43}, -{68,-21,44}, -{68,-21,45}, -{68,-21,46}, -{68,-21,47}, -{68,-21,48}, -{68,-21,49}, -{68,-21,50}, -{68,-21,51}, -{68,-21,52}, -{68,-21,53}, -{68,-21,54}, -{68,-21,55}, -{68,-21,56}, -{68,-21,57}, -{68,-21,58}, -{68,-21,59}, -{68,-21,60}, -{68,-21,61}, -{68,-21,62}, -{68,-21,63}, -{68,-21,64}, -{68,-21,65}, -{68,-21,66}, -{68,-21,67}, -{68,-21,68}, -{68,-21,69}, -{68,-21,70}, -{68,-20,-36}, -{68,-20,-35}, -{68,-20,-34}, -{68,-20,-33}, -{68,-20,-32}, -{68,-20,-31}, -{68,-20,-30}, -{68,-20,-29}, -{68,-20,-28}, -{68,-20,-27}, -{68,-20,-26}, -{68,-20,-25}, -{68,-20,-24}, -{68,-20,-23}, -{68,-20,-22}, -{68,-20,-21}, -{68,-20,-20}, -{68,-20,-19}, -{68,-20,-18}, -{68,-20,-17}, -{68,-20,-16}, -{68,-20,-15}, -{68,-20,-14}, -{68,-20,-13}, -{68,-20,-12}, -{68,-20,-11}, -{68,-20,-10}, -{68,-20,-9}, -{68,-20,-8}, -{68,-20,-7}, -{68,-20,-6}, -{68,-20,-5}, -{68,-20,-4}, -{68,-20,-3}, -{68,-20,-2}, -{68,-20,-1}, -{68,-20,0}, -{68,-20,1}, -{68,-20,2}, -{68,-20,3}, -{68,-20,4}, -{68,-20,5}, -{68,-20,6}, -{68,-20,7}, -{68,-20,8}, -{68,-20,9}, -{68,-20,10}, -{68,-20,11}, -{68,-20,12}, -{68,-20,13}, -{68,-20,14}, -{68,-20,15}, -{68,-20,16}, -{68,-20,17}, -{68,-20,18}, -{68,-20,19}, -{68,-20,20}, -{68,-20,21}, -{68,-20,22}, -{68,-20,23}, -{68,-20,24}, -{68,-20,25}, -{68,-20,26}, -{68,-20,27}, -{68,-20,28}, -{68,-20,29}, -{68,-20,30}, -{68,-20,31}, -{68,-20,32}, -{68,-20,33}, -{68,-20,34}, -{68,-20,35}, -{68,-20,36}, -{68,-20,37}, -{68,-20,38}, -{68,-20,39}, -{68,-20,40}, -{68,-20,41}, -{68,-20,42}, -{68,-20,43}, -{68,-20,44}, -{68,-20,45}, -{68,-20,46}, -{68,-20,47}, -{68,-20,48}, -{68,-20,49}, -{68,-20,50}, -{68,-20,51}, -{68,-20,52}, -{68,-20,53}, -{68,-20,54}, -{68,-20,55}, -{68,-20,56}, -{68,-20,57}, -{68,-20,58}, -{68,-20,59}, -{68,-20,60}, -{68,-20,61}, -{68,-20,62}, -{68,-20,63}, -{68,-20,64}, -{68,-20,65}, -{68,-20,66}, -{68,-20,67}, -{68,-20,68}, -{68,-20,69}, -{68,-20,70}, -{68,-19,-37}, -{68,-19,-36}, -{68,-19,-35}, -{68,-19,-34}, -{68,-19,-33}, -{68,-19,-32}, -{68,-19,-31}, -{68,-19,-30}, -{68,-19,-29}, -{68,-19,-28}, -{68,-19,-27}, -{68,-19,-26}, -{68,-19,-25}, -{68,-19,-24}, -{68,-19,-23}, -{68,-19,-22}, -{68,-19,-21}, -{68,-19,-20}, -{68,-19,-19}, -{68,-19,-18}, -{68,-19,-17}, -{68,-19,-16}, -{68,-19,-15}, -{68,-19,-14}, -{68,-19,-13}, -{68,-19,-12}, -{68,-19,-11}, -{68,-19,-10}, -{68,-19,-9}, -{68,-19,-8}, -{68,-19,-7}, -{68,-19,-6}, -{68,-19,-5}, -{68,-19,-4}, -{68,-19,-3}, -{68,-19,-2}, -{68,-19,-1}, -{68,-19,0}, -{68,-19,1}, -{68,-19,2}, -{68,-19,3}, -{68,-19,4}, -{68,-19,5}, -{68,-19,6}, -{68,-19,7}, -{68,-19,8}, -{68,-19,9}, -{68,-19,10}, -{68,-19,11}, -{68,-19,12}, -{68,-19,13}, -{68,-19,14}, -{68,-19,15}, -{68,-19,16}, -{68,-19,17}, -{68,-19,18}, -{68,-19,19}, -{68,-19,20}, -{68,-19,21}, -{68,-19,22}, -{68,-19,23}, -{68,-19,24}, -{68,-19,25}, -{68,-19,26}, -{68,-19,27}, -{68,-19,28}, -{68,-19,29}, -{68,-19,30}, -{68,-19,31}, -{68,-19,32}, -{68,-19,33}, -{68,-19,34}, -{68,-19,35}, -{68,-19,36}, -{68,-19,37}, -{68,-19,38}, -{68,-19,39}, -{68,-19,40}, -{68,-19,41}, -{68,-19,42}, -{68,-19,43}, -{68,-19,44}, -{68,-19,45}, -{68,-19,46}, -{68,-19,47}, -{68,-19,48}, -{68,-19,49}, -{68,-19,50}, -{68,-19,51}, -{68,-19,52}, -{68,-19,53}, -{68,-19,54}, -{68,-19,55}, -{68,-19,56}, -{68,-19,57}, -{68,-19,58}, -{68,-19,59}, -{68,-19,60}, -{68,-19,61}, -{68,-19,62}, -{68,-19,63}, -{68,-19,64}, -{68,-19,65}, -{68,-19,66}, -{68,-19,67}, -{68,-19,68}, -{68,-19,69}, -{68,-19,70}, -{68,-18,-38}, -{68,-18,-37}, -{68,-18,-36}, -{68,-18,-35}, -{68,-18,-34}, -{68,-18,-33}, -{68,-18,-32}, -{68,-18,-31}, -{68,-18,-30}, -{68,-18,-29}, -{68,-18,-28}, -{68,-18,-27}, -{68,-18,-26}, -{68,-18,-25}, -{68,-18,-24}, -{68,-18,-23}, -{68,-18,-22}, -{68,-18,-21}, -{68,-18,-20}, -{68,-18,-19}, -{68,-18,-18}, -{68,-18,-17}, -{68,-18,-16}, -{68,-18,-15}, -{68,-18,-14}, -{68,-18,-13}, -{68,-18,-12}, -{68,-18,-11}, -{68,-18,-10}, -{68,-18,-9}, -{68,-18,-8}, -{68,-18,-7}, -{68,-18,-6}, -{68,-18,-5}, -{68,-18,-4}, -{68,-18,-3}, -{68,-18,-2}, -{68,-18,-1}, -{68,-18,0}, -{68,-18,1}, -{68,-18,2}, -{68,-18,3}, -{68,-18,4}, -{68,-18,5}, -{68,-18,6}, -{68,-18,7}, -{68,-18,8}, -{68,-18,9}, -{68,-18,10}, -{68,-18,11}, -{68,-18,12}, -{68,-18,13}, -{68,-18,14}, -{68,-18,15}, -{68,-18,16}, -{68,-18,17}, -{68,-18,18}, -{68,-18,19}, -{68,-18,20}, -{68,-18,21}, -{68,-18,22}, -{68,-18,23}, -{68,-18,24}, -{68,-18,25}, -{68,-18,26}, -{68,-18,27}, -{68,-18,28}, -{68,-18,29}, -{68,-18,30}, -{68,-18,31}, -{68,-18,32}, -{68,-18,33}, -{68,-18,34}, -{68,-18,35}, -{68,-18,36}, -{68,-18,37}, -{68,-18,38}, -{68,-18,39}, -{68,-18,40}, -{68,-18,41}, -{68,-18,42}, -{68,-18,43}, -{68,-18,44}, -{68,-18,45}, -{68,-18,46}, -{68,-18,47}, -{68,-18,48}, -{68,-18,49}, -{68,-18,50}, -{68,-18,51}, -{68,-18,52}, -{68,-18,53}, -{68,-18,54}, -{68,-18,55}, -{68,-18,56}, -{68,-18,57}, -{68,-18,58}, -{68,-18,59}, -{68,-18,60}, -{68,-18,61}, -{68,-18,62}, -{68,-18,63}, -{68,-18,64}, -{68,-18,65}, -{68,-18,66}, -{68,-18,67}, -{68,-18,68}, -{68,-18,69}, -{68,-18,70}, -{68,-17,-40}, -{68,-17,-39}, -{68,-17,-38}, -{68,-17,-37}, -{68,-17,-36}, -{68,-17,-35}, -{68,-17,-34}, -{68,-17,-33}, -{68,-17,-32}, -{68,-17,-31}, -{68,-17,-30}, -{68,-17,-29}, -{68,-17,-28}, -{68,-17,-27}, -{68,-17,-26}, -{68,-17,-25}, -{68,-17,-24}, -{68,-17,-23}, -{68,-17,-22}, -{68,-17,-21}, -{68,-17,-20}, -{68,-17,-19}, -{68,-17,-18}, -{68,-17,-17}, -{68,-17,-16}, -{68,-17,-15}, -{68,-17,-14}, -{68,-17,-13}, -{68,-17,-12}, -{68,-17,-11}, -{68,-17,-10}, -{68,-17,-9}, -{68,-17,-8}, -{68,-17,-7}, -{68,-17,-6}, -{68,-17,-5}, -{68,-17,-4}, -{68,-17,-3}, -{68,-17,-2}, -{68,-17,-1}, -{68,-17,0}, -{68,-17,1}, -{68,-17,2}, -{68,-17,3}, -{68,-17,4}, -{68,-17,5}, -{68,-17,6}, -{68,-17,7}, -{68,-17,8}, -{68,-17,9}, -{68,-17,10}, -{68,-17,11}, -{68,-17,12}, -{68,-17,13}, -{68,-17,14}, -{68,-17,15}, -{68,-17,16}, -{68,-17,17}, -{68,-17,18}, -{68,-17,19}, -{68,-17,20}, -{68,-17,21}, -{68,-17,22}, -{68,-17,23}, -{68,-17,24}, -{68,-17,25}, -{68,-17,26}, -{68,-17,27}, -{68,-17,28}, -{68,-17,29}, -{68,-17,30}, -{68,-17,31}, -{68,-17,32}, -{68,-17,33}, -{68,-17,34}, -{68,-17,35}, -{68,-17,36}, -{68,-17,37}, -{68,-17,38}, -{68,-17,39}, -{68,-17,40}, -{68,-17,41}, -{68,-17,42}, -{68,-17,43}, -{68,-17,44}, -{68,-17,45}, -{68,-17,46}, -{68,-17,47}, -{68,-17,48}, -{68,-17,49}, -{68,-17,50}, -{68,-17,51}, -{68,-17,52}, -{68,-17,53}, -{68,-17,54}, -{68,-17,55}, -{68,-17,56}, -{68,-17,57}, -{68,-17,58}, -{68,-17,59}, -{68,-17,60}, -{68,-17,61}, -{68,-17,62}, -{68,-17,63}, -{68,-17,64}, -{68,-17,65}, -{68,-17,66}, -{68,-17,67}, -{68,-17,68}, -{68,-17,69}, -{68,-17,70}, -{68,-16,-41}, -{68,-16,-40}, -{68,-16,-39}, -{68,-16,-38}, -{68,-16,-37}, -{68,-16,-36}, -{68,-16,-35}, -{68,-16,-34}, -{68,-16,-33}, -{68,-16,-32}, -{68,-16,-31}, -{68,-16,-30}, -{68,-16,-29}, -{68,-16,-28}, -{68,-16,-27}, -{68,-16,-26}, -{68,-16,-25}, -{68,-16,-24}, -{68,-16,-23}, -{68,-16,-22}, -{68,-16,-21}, -{68,-16,-20}, -{68,-16,-19}, -{68,-16,-18}, -{68,-16,-17}, -{68,-16,-16}, -{68,-16,-15}, -{68,-16,-14}, -{68,-16,-13}, -{68,-16,-12}, -{68,-16,-11}, -{68,-16,-10}, -{68,-16,-9}, -{68,-16,-8}, -{68,-16,-7}, -{68,-16,-6}, -{68,-16,-5}, -{68,-16,-4}, -{68,-16,-3}, -{68,-16,-2}, -{68,-16,-1}, -{68,-16,0}, -{68,-16,1}, -{68,-16,2}, -{68,-16,3}, -{68,-16,4}, -{68,-16,5}, -{68,-16,6}, -{68,-16,7}, -{68,-16,8}, -{68,-16,9}, -{68,-16,10}, -{68,-16,11}, -{68,-16,12}, -{68,-16,13}, -{68,-16,14}, -{68,-16,15}, -{68,-16,16}, -{68,-16,17}, -{68,-16,18}, -{68,-16,19}, -{68,-16,20}, -{68,-16,21}, -{68,-16,22}, -{68,-16,23}, -{68,-16,24}, -{68,-16,25}, -{68,-16,26}, -{68,-16,27}, -{68,-16,28}, -{68,-16,29}, -{68,-16,30}, -{68,-16,31}, -{68,-16,32}, -{68,-16,33}, -{68,-16,34}, -{68,-16,35}, -{68,-16,36}, -{68,-16,37}, -{68,-16,38}, -{68,-16,39}, -{68,-16,40}, -{68,-16,41}, -{68,-16,42}, -{68,-16,43}, -{68,-16,44}, -{68,-16,45}, -{68,-16,46}, -{68,-16,47}, -{68,-16,48}, -{68,-16,49}, -{68,-16,50}, -{68,-16,51}, -{68,-16,52}, -{68,-16,53}, -{68,-16,54}, -{68,-16,55}, -{68,-16,56}, -{68,-16,57}, -{68,-16,58}, -{68,-16,59}, -{68,-16,60}, -{68,-16,61}, -{68,-16,62}, -{68,-16,63}, -{68,-16,64}, -{68,-16,65}, -{68,-16,66}, -{68,-16,67}, -{68,-16,68}, -{68,-16,69}, -{68,-16,70}, -{68,-15,-42}, -{68,-15,-41}, -{68,-15,-40}, -{68,-15,-39}, -{68,-15,-38}, -{68,-15,-37}, -{68,-15,-36}, -{68,-15,-35}, -{68,-15,-34}, -{68,-15,-33}, -{68,-15,-32}, -{68,-15,-31}, -{68,-15,-30}, -{68,-15,-29}, -{68,-15,-28}, -{68,-15,-27}, -{68,-15,-26}, -{68,-15,-25}, -{68,-15,-24}, -{68,-15,-23}, -{68,-15,-22}, -{68,-15,-21}, -{68,-15,-20}, -{68,-15,-19}, -{68,-15,-18}, -{68,-15,-17}, -{68,-15,-16}, -{68,-15,-15}, -{68,-15,-14}, -{68,-15,-13}, -{68,-15,-12}, -{68,-15,-11}, -{68,-15,-10}, -{68,-15,-9}, -{68,-15,-8}, -{68,-15,-7}, -{68,-15,-6}, -{68,-15,-5}, -{68,-15,-4}, -{68,-15,-3}, -{68,-15,-2}, -{68,-15,-1}, -{68,-15,0}, -{68,-15,1}, -{68,-15,2}, -{68,-15,3}, -{68,-15,4}, -{68,-15,5}, -{68,-15,6}, -{68,-15,7}, -{68,-15,8}, -{68,-15,9}, -{68,-15,10}, -{68,-15,11}, -{68,-15,12}, -{68,-15,13}, -{68,-15,14}, -{68,-15,15}, -{68,-15,16}, -{68,-15,17}, -{68,-15,18}, -{68,-15,19}, -{68,-15,20}, -{68,-15,21}, -{68,-15,22}, -{68,-15,23}, -{68,-15,24}, -{68,-15,25}, -{68,-15,26}, -{68,-15,27}, -{68,-15,28}, -{68,-15,29}, -{68,-15,30}, -{68,-15,31}, -{68,-15,32}, -{68,-15,33}, -{68,-15,34}, -{68,-15,35}, -{68,-15,36}, -{68,-15,37}, -{68,-15,38}, -{68,-15,39}, -{68,-15,40}, -{68,-15,41}, -{68,-15,42}, -{68,-15,43}, -{68,-15,44}, -{68,-15,45}, -{68,-15,46}, -{68,-15,47}, -{68,-15,48}, -{68,-15,49}, -{68,-15,50}, -{68,-15,51}, -{68,-15,52}, -{68,-15,53}, -{68,-15,54}, -{68,-15,55}, -{68,-15,56}, -{68,-15,57}, -{68,-15,58}, -{68,-15,59}, -{68,-15,60}, -{68,-15,61}, -{68,-15,62}, -{68,-15,63}, -{68,-15,64}, -{68,-15,65}, -{68,-15,66}, -{68,-15,67}, -{68,-15,68}, -{68,-15,69}, -{68,-15,70}, -{68,-14,-44}, -{68,-14,-43}, -{68,-14,-42}, -{68,-14,-41}, -{68,-14,-40}, -{68,-14,-39}, -{68,-14,-38}, -{68,-14,-37}, -{68,-14,-36}, -{68,-14,-35}, -{68,-14,-34}, -{68,-14,-33}, -{68,-14,-32}, -{68,-14,-31}, -{68,-14,-30}, -{68,-14,-29}, -{68,-14,-28}, -{68,-14,-27}, -{68,-14,-26}, -{68,-14,-25}, -{68,-14,-24}, -{68,-14,-23}, -{68,-14,-22}, -{68,-14,-21}, -{68,-14,-20}, -{68,-14,-19}, -{68,-14,-18}, -{68,-14,-17}, -{68,-14,-16}, -{68,-14,-15}, -{68,-14,-14}, -{68,-14,-13}, -{68,-14,-12}, -{68,-14,-11}, -{68,-14,-10}, -{68,-14,-9}, -{68,-14,-8}, -{68,-14,-7}, -{68,-14,-6}, -{68,-14,-5}, -{68,-14,-4}, -{68,-14,-3}, -{68,-14,-2}, -{68,-14,-1}, -{68,-14,0}, -{68,-14,1}, -{68,-14,2}, -{68,-14,3}, -{68,-14,4}, -{68,-14,5}, -{68,-14,6}, -{68,-14,7}, -{68,-14,8}, -{68,-14,9}, -{68,-14,10}, -{68,-14,11}, -{68,-14,12}, -{68,-14,13}, -{68,-14,14}, -{68,-14,15}, -{68,-14,16}, -{68,-14,17}, -{68,-14,18}, -{68,-14,19}, -{68,-14,20}, -{68,-14,21}, -{68,-14,22}, -{68,-14,23}, -{68,-14,24}, -{68,-14,25}, -{68,-14,26}, -{68,-14,27}, -{68,-14,28}, -{68,-14,29}, -{68,-14,30}, -{68,-14,31}, -{68,-14,32}, -{68,-14,33}, -{68,-14,34}, -{68,-14,35}, -{68,-14,36}, -{68,-14,37}, -{68,-14,38}, -{68,-14,39}, -{68,-14,40}, -{68,-14,41}, -{68,-14,42}, -{68,-14,43}, -{68,-14,44}, -{68,-14,45}, -{68,-14,46}, -{68,-14,47}, -{68,-14,48}, -{68,-14,49}, -{68,-14,50}, -{68,-14,51}, -{68,-14,52}, -{68,-14,53}, -{68,-14,54}, -{68,-14,55}, -{68,-14,56}, -{68,-14,57}, -{68,-14,58}, -{68,-14,59}, -{68,-14,60}, -{68,-14,61}, -{68,-14,62}, -{68,-14,63}, -{68,-14,64}, -{68,-14,65}, -{68,-14,66}, -{68,-14,67}, -{68,-14,68}, -{68,-14,69}, -{68,-14,70}, -{68,-13,-45}, -{68,-13,-44}, -{68,-13,-43}, -{68,-13,-42}, -{68,-13,-41}, -{68,-13,-40}, -{68,-13,-39}, -{68,-13,-38}, -{68,-13,-37}, -{68,-13,-36}, -{68,-13,-35}, -{68,-13,-34}, -{68,-13,-33}, -{68,-13,-32}, -{68,-13,-31}, -{68,-13,-30}, -{68,-13,-29}, -{68,-13,-28}, -{68,-13,-27}, -{68,-13,-26}, -{68,-13,-25}, -{68,-13,-24}, -{68,-13,-23}, -{68,-13,-22}, -{68,-13,-21}, -{68,-13,-20}, -{68,-13,-19}, -{68,-13,-18}, -{68,-13,-17}, -{68,-13,-16}, -{68,-13,-15}, -{68,-13,-14}, -{68,-13,-13}, -{68,-13,-12}, -{68,-13,-11}, -{68,-13,-10}, -{68,-13,-9}, -{68,-13,-8}, -{68,-13,-7}, -{68,-13,-6}, -{68,-13,-5}, -{68,-13,-4}, -{68,-13,-3}, -{68,-13,-2}, -{68,-13,-1}, -{68,-13,0}, -{68,-13,1}, -{68,-13,2}, -{68,-13,3}, -{68,-13,4}, -{68,-13,5}, -{68,-13,6}, -{68,-13,7}, -{68,-13,8}, -{68,-13,9}, -{68,-13,10}, -{68,-13,11}, -{68,-13,12}, -{68,-13,13}, -{68,-13,14}, -{68,-13,15}, -{68,-13,16}, -{68,-13,17}, -{68,-13,18}, -{68,-13,19}, -{68,-13,20}, -{68,-13,21}, -{68,-13,22}, -{68,-13,23}, -{68,-13,24}, -{68,-13,25}, -{68,-13,26}, -{68,-13,27}, -{68,-13,28}, -{68,-13,29}, -{68,-13,30}, -{68,-13,31}, -{68,-13,32}, -{68,-13,33}, -{68,-13,34}, -{68,-13,35}, -{68,-13,36}, -{68,-13,37}, -{68,-13,38}, -{68,-13,39}, -{68,-13,40}, -{68,-13,41}, -{68,-13,42}, -{68,-13,43}, -{68,-13,44}, -{68,-13,45}, -{68,-13,46}, -{68,-13,47}, -{68,-13,48}, -{68,-13,49}, -{68,-13,50}, -{68,-13,51}, -{68,-13,52}, -{68,-13,53}, -{68,-13,54}, -{68,-13,55}, -{68,-13,56}, -{68,-13,57}, -{68,-13,58}, -{68,-13,59}, -{68,-13,60}, -{68,-13,61}, -{68,-13,62}, -{68,-13,63}, -{68,-13,64}, -{68,-13,65}, -{68,-13,66}, -{68,-13,67}, -{68,-13,68}, -{68,-13,69}, -{68,-13,70}, -{68,-12,-46}, -{68,-12,-45}, -{68,-12,-44}, -{68,-12,-43}, -{68,-12,-42}, -{68,-12,-41}, -{68,-12,-40}, -{68,-12,-39}, -{68,-12,-38}, -{68,-12,-37}, -{68,-12,-36}, -{68,-12,-35}, -{68,-12,-34}, -{68,-12,-33}, -{68,-12,-32}, -{68,-12,-31}, -{68,-12,-30}, -{68,-12,-29}, -{68,-12,-28}, -{68,-12,-27}, -{68,-12,-26}, -{68,-12,-25}, -{68,-12,-24}, -{68,-12,-23}, -{68,-12,-22}, -{68,-12,-21}, -{68,-12,-20}, -{68,-12,-19}, -{68,-12,-18}, -{68,-12,-17}, -{68,-12,-16}, -{68,-12,-15}, -{68,-12,-14}, -{68,-12,-13}, -{68,-12,-12}, -{68,-12,-11}, -{68,-12,-10}, -{68,-12,-9}, -{68,-12,-8}, -{68,-12,-7}, -{68,-12,-6}, -{68,-12,-5}, -{68,-12,-4}, -{68,-12,-3}, -{68,-12,-2}, -{68,-12,-1}, -{68,-12,0}, -{68,-12,1}, -{68,-12,2}, -{68,-12,3}, -{68,-12,4}, -{68,-12,5}, -{68,-12,6}, -{68,-12,7}, -{68,-12,8}, -{68,-12,9}, -{68,-12,10}, -{68,-12,11}, -{68,-12,12}, -{68,-12,13}, -{68,-12,14}, -{68,-12,15}, -{68,-12,16}, -{68,-12,17}, -{68,-12,18}, -{68,-12,19}, -{68,-12,20}, -{68,-12,21}, -{68,-12,22}, -{68,-12,23}, -{68,-12,24}, -{68,-12,25}, -{68,-12,26}, -{68,-12,27}, -{68,-12,28}, -{68,-12,29}, -{68,-12,30}, -{68,-12,31}, -{68,-12,32}, -{68,-12,33}, -{68,-12,34}, -{68,-12,35}, -{68,-12,36}, -{68,-12,37}, -{68,-12,38}, -{68,-12,39}, -{68,-12,40}, -{68,-12,41}, -{68,-12,42}, -{68,-12,43}, -{68,-12,44}, -{68,-12,45}, -{68,-12,46}, -{68,-12,47}, -{68,-12,48}, -{68,-12,49}, -{68,-12,50}, -{68,-12,51}, -{68,-12,52}, -{68,-12,53}, -{68,-12,54}, -{68,-12,55}, -{68,-12,56}, -{68,-12,57}, -{68,-12,58}, -{68,-12,59}, -{68,-12,60}, -{68,-12,61}, -{68,-12,62}, -{68,-12,63}, -{68,-12,64}, -{68,-12,65}, -{68,-12,66}, -{68,-12,67}, -{68,-12,68}, -{68,-12,69}, -{68,-12,70}, -{68,-11,-47}, -{68,-11,-46}, -{68,-11,-45}, -{68,-11,-44}, -{68,-11,-43}, -{68,-11,-42}, -{68,-11,-41}, -{68,-11,-40}, -{68,-11,-39}, -{68,-11,-38}, -{68,-11,-37}, -{68,-11,-36}, -{68,-11,-35}, -{68,-11,-34}, -{68,-11,-33}, -{68,-11,-32}, -{68,-11,-31}, -{68,-11,-30}, -{68,-11,-29}, -{68,-11,-28}, -{68,-11,-27}, -{68,-11,-26}, -{68,-11,-25}, -{68,-11,-24}, -{68,-11,-23}, -{68,-11,-22}, -{68,-11,-21}, -{68,-11,-20}, -{68,-11,-19}, -{68,-11,-18}, -{68,-11,-17}, -{68,-11,-16}, -{68,-11,-15}, -{68,-11,-14}, -{68,-11,-13}, -{68,-11,-12}, -{68,-11,-11}, -{68,-11,-10}, -{68,-11,-9}, -{68,-11,-8}, -{68,-11,-7}, -{68,-11,-6}, -{68,-11,-5}, -{68,-11,-4}, -{68,-11,-3}, -{68,-11,-2}, -{68,-11,-1}, -{68,-11,0}, -{68,-11,1}, -{68,-11,2}, -{68,-11,3}, -{68,-11,4}, -{68,-11,5}, -{68,-11,6}, -{68,-11,7}, -{68,-11,8}, -{68,-11,9}, -{68,-11,10}, -{68,-11,11}, -{68,-11,12}, -{68,-11,13}, -{68,-11,14}, -{68,-11,15}, -{68,-11,16}, -{68,-11,17}, -{68,-11,18}, -{68,-11,19}, -{68,-11,20}, -{68,-11,21}, -{68,-11,22}, -{68,-11,23}, -{68,-11,24}, -{68,-11,25}, -{68,-11,26}, -{68,-11,27}, -{68,-11,28}, -{68,-11,29}, -{68,-11,30}, -{68,-11,31}, -{68,-11,32}, -{68,-11,33}, -{68,-11,34}, -{68,-11,35}, -{68,-11,36}, -{68,-11,37}, -{68,-11,38}, -{68,-11,39}, -{68,-11,40}, -{68,-11,41}, -{68,-11,42}, -{68,-11,43}, -{68,-11,44}, -{68,-11,45}, -{68,-11,46}, -{68,-11,47}, -{68,-11,48}, -{68,-11,49}, -{68,-11,50}, -{68,-11,51}, -{68,-11,52}, -{68,-11,53}, -{68,-11,54}, -{68,-11,55}, -{68,-11,56}, -{68,-11,57}, -{68,-11,58}, -{68,-11,59}, -{68,-11,60}, -{68,-11,61}, -{68,-11,62}, -{68,-11,63}, -{68,-11,64}, -{68,-11,65}, -{68,-11,66}, -{68,-11,67}, -{68,-11,68}, -{68,-11,69}, -{68,-11,70}, -{68,-10,-48}, -{68,-10,-47}, -{68,-10,-46}, -{68,-10,-45}, -{68,-10,-44}, -{68,-10,-43}, -{68,-10,-42}, -{68,-10,-41}, -{68,-10,-40}, -{68,-10,-39}, -{68,-10,-38}, -{68,-10,-37}, -{68,-10,-36}, -{68,-10,-35}, -{68,-10,-34}, -{68,-10,-33}, -{68,-10,-32}, -{68,-10,-31}, -{68,-10,-30}, -{68,-10,-29}, -{68,-10,-28}, -{68,-10,-27}, -{68,-10,-26}, -{68,-10,-25}, -{68,-10,-24}, -{68,-10,-23}, -{68,-10,-22}, -{68,-10,-21}, -{68,-10,-20}, -{68,-10,-19}, -{68,-10,-18}, -{68,-10,-17}, -{68,-10,-16}, -{68,-10,-15}, -{68,-10,-14}, -{68,-10,-13}, -{68,-10,-12}, -{68,-10,-11}, -{68,-10,-10}, -{68,-10,-9}, -{68,-10,-8}, -{68,-10,-7}, -{68,-10,-6}, -{68,-10,-5}, -{68,-10,-4}, -{68,-10,-3}, -{68,-10,-2}, -{68,-10,-1}, -{68,-10,0}, -{68,-10,1}, -{68,-10,2}, -{68,-10,3}, -{68,-10,4}, -{68,-10,5}, -{68,-10,6}, -{68,-10,7}, -{68,-10,8}, -{68,-10,9}, -{68,-10,10}, -{68,-10,11}, -{68,-10,12}, -{68,-10,13}, -{68,-10,14}, -{68,-10,15}, -{68,-10,16}, -{68,-10,17}, -{68,-10,18}, -{68,-10,19}, -{68,-10,20}, -{68,-10,21}, -{68,-10,22}, -{68,-10,23}, -{68,-10,24}, -{68,-10,25}, -{68,-10,26}, -{68,-10,27}, -{68,-10,28}, -{68,-10,29}, -{68,-10,30}, -{68,-10,31}, -{68,-10,32}, -{68,-10,33}, -{68,-10,34}, -{68,-10,35}, -{68,-10,36}, -{68,-10,37}, -{68,-10,38}, -{68,-10,39}, -{68,-10,40}, -{68,-10,41}, -{68,-10,42}, -{68,-10,43}, -{68,-10,44}, -{68,-10,45}, -{68,-10,46}, -{68,-10,47}, -{68,-10,48}, -{68,-10,49}, -{68,-10,50}, -{68,-10,51}, -{68,-10,52}, -{68,-10,53}, -{68,-10,54}, -{68,-10,55}, -{68,-10,56}, -{68,-10,57}, -{68,-10,58}, -{68,-10,59}, -{68,-10,60}, -{68,-10,61}, -{68,-10,62}, -{68,-10,63}, -{68,-10,64}, -{68,-10,65}, -{68,-10,66}, -{68,-10,67}, -{68,-10,68}, -{68,-10,69}, -{68,-10,70}, -{68,-9,-49}, -{68,-9,-48}, -{68,-9,-47}, -{68,-9,-46}, -{68,-9,-45}, -{68,-9,-44}, -{68,-9,-43}, -{68,-9,-42}, -{68,-9,-41}, -{68,-9,-40}, -{68,-9,-39}, -{68,-9,-38}, -{68,-9,-37}, -{68,-9,-36}, -{68,-9,-35}, -{68,-9,-34}, -{68,-9,-33}, -{68,-9,-32}, -{68,-9,-31}, -{68,-9,-30}, -{68,-9,-29}, -{68,-9,-28}, -{68,-9,-27}, -{68,-9,-26}, -{68,-9,-25}, -{68,-9,-24}, -{68,-9,-23}, -{68,-9,-22}, -{68,-9,-21}, -{68,-9,-20}, -{68,-9,-19}, -{68,-9,-18}, -{68,-9,-17}, -{68,-9,-16}, -{68,-9,-15}, -{68,-9,-14}, -{68,-9,-13}, -{68,-9,-12}, -{68,-9,-11}, -{68,-9,-10}, -{68,-9,-9}, -{68,-9,-8}, -{68,-9,-7}, -{68,-9,-6}, -{68,-9,-5}, -{68,-9,-4}, -{68,-9,-3}, -{68,-9,-2}, -{68,-9,-1}, -{68,-9,0}, -{68,-9,1}, -{68,-9,2}, -{68,-9,3}, -{68,-9,4}, -{68,-9,5}, -{68,-9,6}, -{68,-9,7}, -{68,-9,8}, -{68,-9,9}, -{68,-9,10}, -{68,-9,11}, -{68,-9,12}, -{68,-9,13}, -{68,-9,14}, -{68,-9,15}, -{68,-9,16}, -{68,-9,17}, -{68,-9,18}, -{68,-9,19}, -{68,-9,20}, -{68,-9,21}, -{68,-9,22}, -{68,-9,23}, -{68,-9,24}, -{68,-9,25}, -{68,-9,26}, -{68,-9,27}, -{68,-9,28}, -{68,-9,29}, -{68,-9,30}, -{68,-9,31}, -{68,-9,32}, -{68,-9,33}, -{68,-9,34}, -{68,-9,35}, -{68,-9,36}, -{68,-9,37}, -{68,-9,38}, -{68,-9,39}, -{68,-9,40}, -{68,-9,41}, -{68,-9,42}, -{68,-9,43}, -{68,-9,44}, -{68,-9,45}, -{68,-9,46}, -{68,-9,47}, -{68,-9,48}, -{68,-9,49}, -{68,-9,50}, -{68,-9,51}, -{68,-9,52}, -{68,-9,53}, -{68,-9,54}, -{68,-9,55}, -{68,-9,56}, -{68,-9,57}, -{68,-9,58}, -{68,-9,59}, -{68,-9,60}, -{68,-9,61}, -{68,-9,62}, -{68,-9,63}, -{68,-9,64}, -{68,-9,65}, -{68,-9,66}, -{68,-9,67}, -{68,-9,68}, -{68,-9,69}, -{68,-9,70}, -{68,-8,-49}, -{68,-8,-48}, -{68,-8,-47}, -{68,-8,-46}, -{68,-8,-45}, -{68,-8,-44}, -{68,-8,-43}, -{68,-8,-42}, -{68,-8,-41}, -{68,-8,-40}, -{68,-8,-39}, -{68,-8,-38}, -{68,-8,-37}, -{68,-8,-36}, -{68,-8,-35}, -{68,-8,-34}, -{68,-8,-33}, -{68,-8,-32}, -{68,-8,-31}, -{68,-8,-30}, -{68,-8,-29}, -{68,-8,-28}, -{68,-8,-27}, -{68,-8,-26}, -{68,-8,-25}, -{68,-8,-24}, -{68,-8,-23}, -{68,-8,-22}, -{68,-8,-21}, -{68,-8,-20}, -{68,-8,-19}, -{68,-8,-18}, -{68,-8,-17}, -{68,-8,-16}, -{68,-8,-15}, -{68,-8,-14}, -{68,-8,-13}, -{68,-8,-12}, -{68,-8,-11}, -{68,-8,-10}, -{68,-8,-9}, -{68,-8,-8}, -{68,-8,-7}, -{68,-8,-6}, -{68,-8,-5}, -{68,-8,-4}, -{68,-8,-3}, -{68,-8,-2}, -{68,-8,-1}, -{68,-8,0}, -{68,-8,1}, -{68,-8,2}, -{68,-8,3}, -{68,-8,4}, -{68,-8,5}, -{68,-8,6}, -{68,-8,7}, -{68,-8,8}, -{68,-8,9}, -{68,-8,10}, -{68,-8,11}, -{68,-8,12}, -{68,-8,13}, -{68,-8,14}, -{68,-8,15}, -{68,-8,16}, -{68,-8,17}, -{68,-8,18}, -{68,-8,19}, -{68,-8,20}, -{68,-8,21}, -{68,-8,22}, -{68,-8,23}, -{68,-8,24}, -{68,-8,25}, -{68,-8,26}, -{68,-8,27}, -{68,-8,28}, -{68,-8,29}, -{68,-8,30}, -{68,-8,31}, -{68,-8,32}, -{68,-8,33}, -{68,-8,34}, -{68,-8,35}, -{68,-8,36}, -{68,-8,37}, -{68,-8,38}, -{68,-8,39}, -{68,-8,40}, -{68,-8,41}, -{68,-8,42}, -{68,-8,43}, -{68,-8,44}, -{68,-8,45}, -{68,-8,46}, -{68,-8,47}, -{68,-8,48}, -{68,-8,49}, -{68,-8,50}, -{68,-8,51}, -{68,-8,52}, -{68,-8,53}, -{68,-8,54}, -{68,-8,55}, -{68,-8,56}, -{68,-8,57}, -{68,-8,58}, -{68,-8,59}, -{68,-8,60}, -{68,-8,61}, -{68,-8,62}, -{68,-8,63}, -{68,-8,64}, -{68,-8,65}, -{68,-8,66}, -{68,-8,67}, -{68,-8,68}, -{68,-8,69}, -{68,-8,70}, -{68,-7,-49}, -{68,-7,-48}, -{68,-7,-47}, -{68,-7,-46}, -{68,-7,-45}, -{68,-7,-44}, -{68,-7,-43}, -{68,-7,-42}, -{68,-7,-41}, -{68,-7,-40}, -{68,-7,-39}, -{68,-7,-38}, -{68,-7,-37}, -{68,-7,-36}, -{68,-7,-35}, -{68,-7,-34}, -{68,-7,-33}, -{68,-7,-32}, -{68,-7,-31}, -{68,-7,-30}, -{68,-7,-29}, -{68,-7,-28}, -{68,-7,-27}, -{68,-7,-26}, -{68,-7,-25}, -{68,-7,-24}, -{68,-7,-23}, -{68,-7,-22}, -{68,-7,-21}, -{68,-7,-20}, -{68,-7,-19}, -{68,-7,-18}, -{68,-7,-17}, -{68,-7,-16}, -{68,-7,-15}, -{68,-7,-14}, -{68,-7,-13}, -{68,-7,-12}, -{68,-7,-11}, -{68,-7,-10}, -{68,-7,-9}, -{68,-7,-8}, -{68,-7,-7}, -{68,-7,-6}, -{68,-7,-5}, -{68,-7,-4}, -{68,-7,-3}, -{68,-7,-2}, -{68,-7,-1}, -{68,-7,0}, -{68,-7,1}, -{68,-7,2}, -{68,-7,3}, -{68,-7,4}, -{68,-7,5}, -{68,-7,6}, -{68,-7,7}, -{68,-7,8}, -{68,-7,9}, -{68,-7,10}, -{68,-7,11}, -{68,-7,12}, -{68,-7,13}, -{68,-7,14}, -{68,-7,15}, -{68,-7,16}, -{68,-7,17}, -{68,-7,18}, -{68,-7,19}, -{68,-7,20}, -{68,-7,21}, -{68,-7,22}, -{68,-7,23}, -{68,-7,24}, -{68,-7,25}, -{68,-7,26}, -{68,-7,27}, -{68,-7,28}, -{68,-7,29}, -{68,-7,30}, -{68,-7,31}, -{68,-7,32}, -{68,-7,33}, -{68,-7,34}, -{68,-7,35}, -{68,-7,36}, -{68,-7,37}, -{68,-7,38}, -{68,-7,39}, -{68,-7,40}, -{68,-7,41}, -{68,-7,42}, -{68,-7,43}, -{68,-7,44}, -{68,-7,45}, -{68,-7,46}, -{68,-7,47}, -{68,-7,48}, -{68,-7,49}, -{68,-7,50}, -{68,-7,51}, -{68,-7,52}, -{68,-7,53}, -{68,-7,54}, -{68,-7,55}, -{68,-7,56}, -{68,-7,57}, -{68,-7,58}, -{68,-7,59}, -{68,-7,60}, -{68,-7,61}, -{68,-7,62}, -{68,-7,63}, -{68,-7,64}, -{68,-7,65}, -{68,-7,66}, -{68,-7,67}, -{68,-7,68}, -{68,-7,69}, -{68,-7,70}, -{68,-6,-49}, -{68,-6,-48}, -{68,-6,-47}, -{68,-6,-46}, -{68,-6,-45}, -{68,-6,-44}, -{68,-6,-43}, -{68,-6,-42}, -{68,-6,-41}, -{68,-6,-40}, -{68,-6,-39}, -{68,-6,-38}, -{68,-6,-37}, -{68,-6,-36}, -{68,-6,-35}, -{68,-6,-34}, -{68,-6,-33}, -{68,-6,-32}, -{68,-6,-31}, -{68,-6,-30}, -{68,-6,-29}, -{68,-6,-28}, -{68,-6,-27}, -{68,-6,-26}, -{68,-6,-25}, -{68,-6,-24}, -{68,-6,-23}, -{68,-6,-22}, -{68,-6,-21}, -{68,-6,-20}, -{68,-6,-19}, -{68,-6,-18}, -{68,-6,-17}, -{68,-6,-16}, -{68,-6,-15}, -{68,-6,-14}, -{68,-6,-13}, -{68,-6,-12}, -{68,-6,-11}, -{68,-6,-10}, -{68,-6,-9}, -{68,-6,-8}, -{68,-6,-7}, -{68,-6,-6}, -{68,-6,-5}, -{68,-6,-4}, -{68,-6,-3}, -{68,-6,-2}, -{68,-6,-1}, -{68,-6,0}, -{68,-6,1}, -{68,-6,2}, -{68,-6,3}, -{68,-6,4}, -{68,-6,5}, -{68,-6,6}, -{68,-6,7}, -{68,-6,8}, -{68,-6,9}, -{68,-6,10}, -{68,-6,11}, -{68,-6,12}, -{68,-6,13}, -{68,-6,14}, -{68,-6,15}, -{68,-6,16}, -{68,-6,17}, -{68,-6,18}, -{68,-6,19}, -{68,-6,20}, -{68,-6,21}, -{68,-6,22}, -{68,-6,23}, -{68,-6,24}, -{68,-6,25}, -{68,-6,26}, -{68,-6,27}, -{68,-6,28}, -{68,-6,29}, -{68,-6,30}, -{68,-6,31}, -{68,-6,32}, -{68,-6,33}, -{68,-6,34}, -{68,-6,35}, -{68,-6,36}, -{68,-6,37}, -{68,-6,38}, -{68,-6,39}, -{68,-6,40}, -{68,-6,41}, -{68,-6,42}, -{68,-6,43}, -{68,-6,44}, -{68,-6,45}, -{68,-6,46}, -{68,-6,47}, -{68,-6,48}, -{68,-6,49}, -{68,-6,50}, -{68,-6,51}, -{68,-6,52}, -{68,-6,53}, -{68,-6,54}, -{68,-6,55}, -{68,-6,56}, -{68,-6,57}, -{68,-6,58}, -{68,-6,59}, -{68,-6,60}, -{68,-6,61}, -{68,-6,62}, -{68,-6,63}, -{68,-6,64}, -{68,-6,65}, -{68,-6,66}, -{68,-6,67}, -{68,-6,68}, -{68,-6,69}, -{68,-6,70}, -{68,-5,-49}, -{68,-5,-48}, -{68,-5,-47}, -{68,-5,-46}, -{68,-5,-45}, -{68,-5,-44}, -{68,-5,-43}, -{68,-5,-42}, -{68,-5,-41}, -{68,-5,-40}, -{68,-5,-39}, -{68,-5,-38}, -{68,-5,-37}, -{68,-5,-36}, -{68,-5,-35}, -{68,-5,-34}, -{68,-5,-33}, -{68,-5,-32}, -{68,-5,-31}, -{68,-5,-30}, -{68,-5,-29}, -{68,-5,-28}, -{68,-5,-27}, -{68,-5,-26}, -{68,-5,-25}, -{68,-5,-24}, -{68,-5,-23}, -{68,-5,-22}, -{68,-5,-21}, -{68,-5,-20}, -{68,-5,-19}, -{68,-5,-18}, -{68,-5,-17}, -{68,-5,-16}, -{68,-5,-15}, -{68,-5,-14}, -{68,-5,-13}, -{68,-5,-12}, -{68,-5,-11}, -{68,-5,-10}, -{68,-5,-9}, -{68,-5,-8}, -{68,-5,-7}, -{68,-5,-6}, -{68,-5,-5}, -{68,-5,-4}, -{68,-5,-3}, -{68,-5,-2}, -{68,-5,-1}, -{68,-5,0}, -{68,-5,1}, -{68,-5,2}, -{68,-5,3}, -{68,-5,4}, -{68,-5,5}, -{68,-5,6}, -{68,-5,7}, -{68,-5,8}, -{68,-5,9}, -{68,-5,10}, -{68,-5,11}, -{68,-5,12}, -{68,-5,13}, -{68,-5,14}, -{68,-5,15}, -{68,-5,16}, -{68,-5,17}, -{68,-5,18}, -{68,-5,19}, -{68,-5,20}, -{68,-5,21}, -{68,-5,22}, -{68,-5,23}, -{68,-5,24}, -{68,-5,25}, -{68,-5,26}, -{68,-5,27}, -{68,-5,28}, -{68,-5,29}, -{68,-5,30}, -{68,-5,31}, -{68,-5,32}, -{68,-5,33}, -{68,-5,34}, -{68,-5,35}, -{68,-5,36}, -{68,-5,37}, -{68,-5,38}, -{68,-5,39}, -{68,-5,40}, -{68,-5,41}, -{68,-5,42}, -{68,-5,43}, -{68,-5,44}, -{68,-5,45}, -{68,-5,46}, -{68,-5,47}, -{68,-5,48}, -{68,-5,49}, -{68,-5,50}, -{68,-5,51}, -{68,-5,52}, -{68,-5,53}, -{68,-5,54}, -{68,-5,55}, -{68,-5,56}, -{68,-5,57}, -{68,-5,58}, -{68,-5,59}, -{68,-5,60}, -{68,-5,61}, -{68,-5,62}, -{68,-5,63}, -{68,-5,64}, -{68,-5,65}, -{68,-5,66}, -{68,-5,67}, -{68,-5,68}, -{68,-5,69}, -{68,-5,70}, -{68,-5,71}, -{68,-4,-49}, -{68,-4,-48}, -{68,-4,-47}, -{68,-4,-46}, -{68,-4,-45}, -{68,-4,-44}, -{68,-4,-43}, -{68,-4,-42}, -{68,-4,-41}, -{68,-4,-40}, -{68,-4,-39}, -{68,-4,-38}, -{68,-4,-37}, -{68,-4,-36}, -{68,-4,-35}, -{68,-4,-34}, -{68,-4,-33}, -{68,-4,-32}, -{68,-4,-31}, -{68,-4,-30}, -{68,-4,-29}, -{68,-4,-28}, -{68,-4,-27}, -{68,-4,-26}, -{68,-4,-25}, -{68,-4,-24}, -{68,-4,-23}, -{68,-4,-22}, -{68,-4,-21}, -{68,-4,-20}, -{68,-4,-19}, -{68,-4,-18}, -{68,-4,-17}, -{68,-4,-16}, -{68,-4,-15}, -{68,-4,-14}, -{68,-4,-13}, -{68,-4,-12}, -{68,-4,-11}, -{68,-4,-10}, -{68,-4,-9}, -{68,-4,-8}, -{68,-4,-7}, -{68,-4,-6}, -{68,-4,-5}, -{68,-4,-4}, -{68,-4,-3}, -{68,-4,-2}, -{68,-4,-1}, -{68,-4,0}, -{68,-4,1}, -{68,-4,2}, -{68,-4,3}, -{68,-4,4}, -{68,-4,5}, -{68,-4,6}, -{68,-4,7}, -{68,-4,8}, -{68,-4,9}, -{68,-4,10}, -{68,-4,11}, -{68,-4,12}, -{68,-4,13}, -{68,-4,14}, -{68,-4,15}, -{68,-4,16}, -{68,-4,17}, -{68,-4,18}, -{68,-4,19}, -{68,-4,20}, -{68,-4,21}, -{68,-4,22}, -{68,-4,23}, -{68,-4,24}, -{68,-4,25}, -{68,-4,26}, -{68,-4,27}, -{68,-4,28}, -{68,-4,29}, -{68,-4,30}, -{68,-4,31}, -{68,-4,32}, -{68,-4,33}, -{68,-4,34}, -{68,-4,35}, -{68,-4,36}, -{68,-4,37}, -{68,-4,38}, -{68,-4,39}, -{68,-4,40}, -{68,-4,41}, -{68,-4,42}, -{68,-4,43}, -{68,-4,44}, -{68,-4,45}, -{68,-4,46}, -{68,-4,47}, -{68,-4,48}, -{68,-4,49}, -{68,-4,50}, -{68,-4,51}, -{68,-4,52}, -{68,-4,53}, -{68,-4,54}, -{68,-4,55}, -{68,-4,56}, -{68,-4,57}, -{68,-4,58}, -{68,-4,59}, -{68,-4,60}, -{68,-4,61}, -{68,-4,62}, -{68,-4,63}, -{68,-4,64}, -{68,-4,65}, -{68,-4,66}, -{68,-4,67}, -{68,-4,68}, -{68,-4,69}, -{68,-4,70}, -{68,-4,71}, -{68,-3,-49}, -{68,-3,-48}, -{68,-3,-47}, -{68,-3,-46}, -{68,-3,-45}, -{68,-3,-44}, -{68,-3,-43}, -{68,-3,-42}, -{68,-3,-41}, -{68,-3,-40}, -{68,-3,-39}, -{68,-3,-38}, -{68,-3,-37}, -{68,-3,-36}, -{68,-3,-35}, -{68,-3,-34}, -{68,-3,-33}, -{68,-3,-32}, -{68,-3,-31}, -{68,-3,-30}, -{68,-3,-29}, -{68,-3,-28}, -{68,-3,-27}, -{68,-3,-26}, -{68,-3,-25}, -{68,-3,-24}, -{68,-3,-23}, -{68,-3,-22}, -{68,-3,-21}, -{68,-3,-20}, -{68,-3,-19}, -{68,-3,-18}, -{68,-3,-17}, -{68,-3,-16}, -{68,-3,-15}, -{68,-3,-14}, -{68,-3,-13}, -{68,-3,-12}, -{68,-3,-11}, -{68,-3,-10}, -{68,-3,-9}, -{68,-3,-8}, -{68,-3,-7}, -{68,-3,-6}, -{68,-3,-5}, -{68,-3,-4}, -{68,-3,-3}, -{68,-3,-2}, -{68,-3,-1}, -{68,-3,0}, -{68,-3,1}, -{68,-3,2}, -{68,-3,3}, -{68,-3,4}, -{68,-3,5}, -{68,-3,6}, -{68,-3,7}, -{68,-3,8}, -{68,-3,9}, -{68,-3,10}, -{68,-3,11}, -{68,-3,12}, -{68,-3,13}, -{68,-3,14}, -{68,-3,15}, -{68,-3,16}, -{68,-3,17}, -{68,-3,18}, -{68,-3,19}, -{68,-3,20}, -{68,-3,21}, -{68,-3,22}, -{68,-3,23}, -{68,-3,24}, -{68,-3,25}, -{68,-3,26}, -{68,-3,27}, -{68,-3,28}, -{68,-3,29}, -{68,-3,30}, -{68,-3,31}, -{68,-3,32}, -{68,-3,33}, -{68,-3,34}, -{68,-3,35}, -{68,-3,36}, -{68,-3,37}, -{68,-3,38}, -{68,-3,39}, -{68,-3,40}, -{68,-3,41}, -{68,-3,42}, -{68,-3,43}, -{68,-3,44}, -{68,-3,45}, -{68,-3,46}, -{68,-3,47}, -{68,-3,48}, -{68,-3,49}, -{68,-3,50}, -{68,-3,51}, -{68,-3,52}, -{68,-3,53}, -{68,-3,54}, -{68,-3,55}, -{68,-3,56}, -{68,-3,57}, -{68,-3,58}, -{68,-3,59}, -{68,-3,60}, -{68,-3,61}, -{68,-3,62}, -{68,-3,63}, -{68,-3,64}, -{68,-3,65}, -{68,-3,66}, -{68,-3,67}, -{68,-3,68}, -{68,-3,69}, -{68,-3,70}, -{68,-3,71}, -{68,-2,-49}, -{68,-2,-48}, -{68,-2,-47}, -{68,-2,-46}, -{68,-2,-45}, -{68,-2,-44}, -{68,-2,-43}, -{68,-2,-42}, -{68,-2,-41}, -{68,-2,-40}, -{68,-2,-39}, -{68,-2,-38}, -{68,-2,-37}, -{68,-2,-36}, -{68,-2,-35}, -{68,-2,-34}, -{68,-2,-33}, -{68,-2,-32}, -{68,-2,-31}, -{68,-2,-30}, -{68,-2,-29}, -{68,-2,-28}, -{68,-2,-27}, -{68,-2,-26}, -{68,-2,-25}, -{68,-2,-24}, -{68,-2,-23}, -{68,-2,-22}, -{68,-2,-21}, -{68,-2,-20}, -{68,-2,-19}, -{68,-2,-18}, -{68,-2,-17}, -{68,-2,-16}, -{68,-2,-15}, -{68,-2,-14}, -{68,-2,-13}, -{68,-2,-12}, -{68,-2,-11}, -{68,-2,-10}, -{68,-2,-9}, -{68,-2,-8}, -{68,-2,-7}, -{68,-2,-6}, -{68,-2,-5}, -{68,-2,-4}, -{68,-2,-3}, -{68,-2,-2}, -{68,-2,-1}, -{68,-2,0}, -{68,-2,1}, -{68,-2,2}, -{68,-2,3}, -{68,-2,4}, -{68,-2,5}, -{68,-2,6}, -{68,-2,7}, -{68,-2,8}, -{68,-2,9}, -{68,-2,10}, -{68,-2,11}, -{68,-2,12}, -{68,-2,13}, -{68,-2,14}, -{68,-2,15}, -{68,-2,16}, -{68,-2,17}, -{68,-2,18}, -{68,-2,19}, -{68,-2,20}, -{68,-2,21}, -{68,-2,22}, -{68,-2,23}, -{68,-2,24}, -{68,-2,25}, -{68,-2,26}, -{68,-2,27}, -{68,-2,28}, -{68,-2,29}, -{68,-2,30}, -{68,-2,31}, -{68,-2,32}, -{68,-2,33}, -{68,-2,34}, -{68,-2,35}, -{68,-2,36}, -{68,-2,37}, -{68,-2,38}, -{68,-2,39}, -{68,-2,40}, -{68,-2,41}, -{68,-2,42}, -{68,-2,43}, -{68,-2,44}, -{68,-2,45}, -{68,-2,46}, -{68,-2,47}, -{68,-2,48}, -{68,-2,49}, -{68,-2,50}, -{68,-2,51}, -{68,-2,52}, -{68,-2,53}, -{68,-2,54}, -{68,-2,55}, -{68,-2,56}, -{68,-2,57}, -{68,-2,58}, -{68,-2,59}, -{68,-2,60}, -{68,-2,61}, -{68,-2,62}, -{68,-2,63}, -{68,-2,64}, -{68,-2,65}, -{68,-2,66}, -{68,-2,67}, -{68,-2,68}, -{68,-2,69}, -{68,-2,70}, -{68,-2,71}, -{68,-1,-49}, -{68,-1,-48}, -{68,-1,-47}, -{68,-1,-46}, -{68,-1,-45}, -{68,-1,-44}, -{68,-1,-43}, -{68,-1,-42}, -{68,-1,-41}, -{68,-1,-40}, -{68,-1,-39}, -{68,-1,-38}, -{68,-1,-37}, -{68,-1,-36}, -{68,-1,-35}, -{68,-1,-34}, -{68,-1,-33}, -{68,-1,-32}, -{68,-1,-31}, -{68,-1,-30}, -{68,-1,-29}, -{68,-1,-28}, -{68,-1,-27}, -{68,-1,-26}, -{68,-1,-25}, -{68,-1,-24}, -{68,-1,-23}, -{68,-1,-22}, -{68,-1,-21}, -{68,-1,-20}, -{68,-1,-19}, -{68,-1,-18}, -{68,-1,-17}, -{68,-1,-16}, -{68,-1,-15}, -{68,-1,-14}, -{68,-1,-13}, -{68,-1,-12}, -{68,-1,-11}, -{68,-1,-10}, -{68,-1,-9}, -{68,-1,-8}, -{68,-1,-7}, -{68,-1,-6}, -{68,-1,-5}, -{68,-1,-4}, -{68,-1,-3}, -{68,-1,-2}, -{68,-1,-1}, -{68,-1,0}, -{68,-1,1}, -{68,-1,2}, -{68,-1,3}, -{68,-1,4}, -{68,-1,5}, -{68,-1,6}, -{68,-1,7}, -{68,-1,8}, -{68,-1,9}, -{68,-1,10}, -{68,-1,11}, -{68,-1,12}, -{68,-1,13}, -{68,-1,14}, -{68,-1,15}, -{68,-1,16}, -{68,-1,17}, -{68,-1,18}, -{68,-1,19}, -{68,-1,20}, -{68,-1,21}, -{68,-1,22}, -{68,-1,23}, -{68,-1,24}, -{68,-1,25}, -{68,-1,26}, -{68,-1,27}, -{68,-1,28}, -{68,-1,29}, -{68,-1,30}, -{68,-1,31}, -{68,-1,32}, -{68,-1,33}, -{68,-1,34}, -{68,-1,35}, -{68,-1,36}, -{68,-1,37}, -{68,-1,38}, -{68,-1,39}, -{68,-1,40}, -{68,-1,41}, -{68,-1,42}, -{68,-1,43}, -{68,-1,44}, -{68,-1,45}, -{68,-1,46}, -{68,-1,47}, -{68,-1,48}, -{68,-1,49}, -{68,-1,50}, -{68,-1,51}, -{68,-1,52}, -{68,-1,53}, -{68,-1,54}, -{68,-1,55}, -{68,-1,56}, -{68,-1,57}, -{68,-1,58}, -{68,-1,59}, -{68,-1,60}, -{68,-1,61}, -{68,-1,62}, -{68,-1,63}, -{68,-1,64}, -{68,-1,65}, -{68,-1,66}, -{68,-1,67}, -{68,-1,68}, -{68,-1,69}, -{68,-1,70}, -{68,-1,71}, -{68,0,-49}, -{68,0,-48}, -{68,0,-47}, -{68,0,-46}, -{68,0,-45}, -{68,0,-44}, -{68,0,-43}, -{68,0,-42}, -{68,0,-41}, -{68,0,-40}, -{68,0,-39}, -{68,0,-38}, -{68,0,-37}, -{68,0,-36}, -{68,0,-35}, -{68,0,-34}, -{68,0,-33}, -{68,0,-32}, -{68,0,-31}, -{68,0,-30}, -{68,0,-29}, -{68,0,-28}, -{68,0,-27}, -{68,0,-26}, -{68,0,-25}, -{68,0,-24}, -{68,0,-23}, -{68,0,-22}, -{68,0,-21}, -{68,0,-20}, -{68,0,-19}, -{68,0,-18}, -{68,0,-17}, -{68,0,-16}, -{68,0,-15}, -{68,0,-14}, -{68,0,-13}, -{68,0,-12}, -{68,0,-11}, -{68,0,-10}, -{68,0,-9}, -{68,0,-8}, -{68,0,-7}, -{68,0,-6}, -{68,0,-5}, -{68,0,-4}, -{68,0,-3}, -{68,0,-2}, -{68,0,-1}, -{68,0,0}, -{68,0,1}, -{68,0,2}, -{68,0,3}, -{68,0,4}, -{68,0,5}, -{68,0,6}, -{68,0,7}, -{68,0,8}, -{68,0,9}, -{68,0,10}, -{68,0,11}, -{68,0,12}, -{68,0,13}, -{68,0,14}, -{68,0,15}, -{68,0,16}, -{68,0,17}, -{68,0,18}, -{68,0,19}, -{68,0,20}, -{68,0,21}, -{68,0,22}, -{68,0,23}, -{68,0,24}, -{68,0,25}, -{68,0,26}, -{68,0,27}, -{68,0,28}, -{68,0,29}, -{68,0,30}, -{68,0,31}, -{68,0,32}, -{68,0,33}, -{68,0,34}, -{68,0,35}, -{68,0,36}, -{68,0,37}, -{68,0,38}, -{68,0,39}, -{68,0,40}, -{68,0,41}, -{68,0,42}, -{68,0,43}, -{68,0,44}, -{68,0,45}, -{68,0,46}, -{68,0,47}, -{68,0,48}, -{68,0,49}, -{68,0,50}, -{68,0,51}, -{68,0,52}, -{68,0,53}, -{68,0,54}, -{68,0,55}, -{68,0,56}, -{68,0,57}, -{68,0,58}, -{68,0,59}, -{68,0,60}, -{68,0,61}, -{68,0,62}, -{68,0,63}, -{68,0,64}, -{68,0,65}, -{68,0,66}, -{68,0,67}, -{68,0,68}, -{68,0,69}, -{68,0,70}, -{68,0,71}, -{68,1,-49}, -{68,1,-48}, -{68,1,-47}, -{68,1,-46}, -{68,1,-45}, -{68,1,-44}, -{68,1,-43}, -{68,1,-42}, -{68,1,-41}, -{68,1,-40}, -{68,1,-39}, -{68,1,-38}, -{68,1,-37}, -{68,1,-36}, -{68,1,-35}, -{68,1,-34}, -{68,1,-33}, -{68,1,-32}, -{68,1,-31}, -{68,1,-30}, -{68,1,-29}, -{68,1,-28}, -{68,1,-27}, -{68,1,-26}, -{68,1,-25}, -{68,1,-24}, -{68,1,-23}, -{68,1,-22}, -{68,1,-21}, -{68,1,-20}, -{68,1,-19}, -{68,1,-18}, -{68,1,-17}, -{68,1,-16}, -{68,1,-15}, -{68,1,-14}, -{68,1,-13}, -{68,1,-12}, -{68,1,-11}, -{68,1,-10}, -{68,1,-9}, -{68,1,-8}, -{68,1,-7}, -{68,1,-6}, -{68,1,-5}, -{68,1,-4}, -{68,1,-3}, -{68,1,-2}, -{68,1,-1}, -{68,1,0}, -{68,1,1}, -{68,1,2}, -{68,1,3}, -{68,1,4}, -{68,1,5}, -{68,1,6}, -{68,1,7}, -{68,1,8}, -{68,1,9}, -{68,1,10}, -{68,1,11}, -{68,1,12}, -{68,1,13}, -{68,1,14}, -{68,1,15}, -{68,1,16}, -{68,1,17}, -{68,1,18}, -{68,1,19}, -{68,1,20}, -{68,1,21}, -{68,1,22}, -{68,1,23}, -{68,1,24}, -{68,1,25}, -{68,1,26}, -{68,1,27}, -{68,1,28}, -{68,1,29}, -{68,1,30}, -{68,1,31}, -{68,1,32}, -{68,1,33}, -{68,1,34}, -{68,1,35}, -{68,1,36}, -{68,1,37}, -{68,1,38}, -{68,1,39}, -{68,1,40}, -{68,1,41}, -{68,1,42}, -{68,1,43}, -{68,1,44}, -{68,1,45}, -{68,1,46}, -{68,1,47}, -{68,1,48}, -{68,1,49}, -{68,1,50}, -{68,1,51}, -{68,1,52}, -{68,1,53}, -{68,1,54}, -{68,1,55}, -{68,1,56}, -{68,1,57}, -{68,1,58}, -{68,1,59}, -{68,1,60}, -{68,1,61}, -{68,1,62}, -{68,1,63}, -{68,1,64}, -{68,1,65}, -{68,1,66}, -{68,1,67}, -{68,1,68}, -{68,1,69}, -{68,1,70}, -{68,1,71}, -{68,2,-49}, -{68,2,-48}, -{68,2,-47}, -{68,2,-46}, -{68,2,-45}, -{68,2,-44}, -{68,2,-43}, -{68,2,-42}, -{68,2,-41}, -{68,2,-40}, -{68,2,-39}, -{68,2,-38}, -{68,2,-37}, -{68,2,-36}, -{68,2,-35}, -{68,2,-34}, -{68,2,-33}, -{68,2,-32}, -{68,2,-31}, -{68,2,-30}, -{68,2,-29}, -{68,2,-28}, -{68,2,-27}, -{68,2,-26}, -{68,2,-25}, -{68,2,-24}, -{68,2,-23}, -{68,2,-22}, -{68,2,-21}, -{68,2,-20}, -{68,2,-19}, -{68,2,-18}, -{68,2,-17}, -{68,2,-16}, -{68,2,-15}, -{68,2,-14}, -{68,2,-13}, -{68,2,-12}, -{68,2,-11}, -{68,2,-10}, -{68,2,-9}, -{68,2,-8}, -{68,2,-7}, -{68,2,-6}, -{68,2,-5}, -{68,2,-4}, -{68,2,-3}, -{68,2,-2}, -{68,2,-1}, -{68,2,0}, -{68,2,1}, -{68,2,2}, -{68,2,3}, -{68,2,4}, -{68,2,5}, -{68,2,6}, -{68,2,7}, -{68,2,8}, -{68,2,9}, -{68,2,10}, -{68,2,11}, -{68,2,12}, -{68,2,13}, -{68,2,14}, -{68,2,15}, -{68,2,16}, -{68,2,17}, -{68,2,18}, -{68,2,19}, -{68,2,20}, -{68,2,21}, -{68,2,22}, -{68,2,23}, -{68,2,24}, -{68,2,25}, -{68,2,26}, -{68,2,27}, -{68,2,28}, -{68,2,29}, -{68,2,30}, -{68,2,31}, -{68,2,32}, -{68,2,33}, -{68,2,34}, -{68,2,35}, -{68,2,36}, -{68,2,37}, -{68,2,38}, -{68,2,39}, -{68,2,40}, -{68,2,41}, -{68,2,42}, -{68,2,43}, -{68,2,44}, -{68,2,45}, -{68,2,46}, -{68,2,47}, -{68,2,48}, -{68,2,49}, -{68,2,50}, -{68,2,51}, -{68,2,52}, -{68,2,53}, -{68,2,54}, -{68,2,55}, -{68,2,56}, -{68,2,57}, -{68,2,58}, -{68,2,59}, -{68,2,60}, -{68,2,61}, -{68,2,62}, -{68,2,63}, -{68,2,64}, -{68,2,65}, -{68,2,66}, -{68,2,67}, -{68,2,68}, -{68,2,69}, -{68,2,70}, -{68,2,71}, -{68,3,-49}, -{68,3,-48}, -{68,3,-47}, -{68,3,-46}, -{68,3,-45}, -{68,3,-44}, -{68,3,-43}, -{68,3,-42}, -{68,3,-41}, -{68,3,-40}, -{68,3,-39}, -{68,3,-38}, -{68,3,-37}, -{68,3,-36}, -{68,3,-35}, -{68,3,-34}, -{68,3,-33}, -{68,3,-32}, -{68,3,-31}, -{68,3,-30}, -{68,3,-29}, -{68,3,-28}, -{68,3,-27}, -{68,3,-26}, -{68,3,-25}, -{68,3,-24}, -{68,3,-23}, -{68,3,-22}, -{68,3,-21}, -{68,3,-20}, -{68,3,-19}, -{68,3,-18}, -{68,3,-17}, -{68,3,-16}, -{68,3,-15}, -{68,3,-14}, -{68,3,-13}, -{68,3,-12}, -{68,3,-11}, -{68,3,-10}, -{68,3,-9}, -{68,3,-8}, -{68,3,-7}, -{68,3,-6}, -{68,3,-5}, -{68,3,-4}, -{68,3,-3}, -{68,3,-2}, -{68,3,-1}, -{68,3,0}, -{68,3,1}, -{68,3,2}, -{68,3,3}, -{68,3,4}, -{68,3,5}, -{68,3,6}, -{68,3,7}, -{68,3,8}, -{68,3,9}, -{68,3,10}, -{68,3,11}, -{68,3,12}, -{68,3,13}, -{68,3,14}, -{68,3,15}, -{68,3,16}, -{68,3,17}, -{68,3,18}, -{68,3,19}, -{68,3,20}, -{68,3,21}, -{68,3,22}, -{68,3,23}, -{68,3,24}, -{68,3,25}, -{68,3,26}, -{68,3,27}, -{68,3,28}, -{68,3,29}, -{68,3,30}, -{68,3,31}, -{68,3,32}, -{68,3,33}, -{68,3,34}, -{68,3,35}, -{68,3,36}, -{68,3,37}, -{68,3,38}, -{68,3,39}, -{68,3,40}, -{68,3,41}, -{68,3,42}, -{68,3,43}, -{68,3,44}, -{68,3,45}, -{68,3,46}, -{68,3,47}, -{68,3,48}, -{68,3,49}, -{68,3,50}, -{68,3,51}, -{68,3,52}, -{68,3,53}, -{68,3,54}, -{68,3,55}, -{68,3,56}, -{68,3,57}, -{68,3,58}, -{68,3,59}, -{68,3,60}, -{68,3,61}, -{68,3,62}, -{68,3,63}, -{68,3,64}, -{68,3,65}, -{68,3,66}, -{68,3,67}, -{68,3,68}, -{68,3,69}, -{68,3,70}, -{68,3,71}, -{68,4,-49}, -{68,4,-48}, -{68,4,-47}, -{68,4,-46}, -{68,4,-45}, -{68,4,-44}, -{68,4,-43}, -{68,4,-42}, -{68,4,-41}, -{68,4,-40}, -{68,4,-39}, -{68,4,-38}, -{68,4,-37}, -{68,4,-36}, -{68,4,-35}, -{68,4,-34}, -{68,4,-33}, -{68,4,-32}, -{68,4,-31}, -{68,4,-30}, -{68,4,-29}, -{68,4,-28}, -{68,4,-27}, -{68,4,-26}, -{68,4,-25}, -{68,4,-24}, -{68,4,-23}, -{68,4,-22}, -{68,4,-21}, -{68,4,-20}, -{68,4,-19}, -{68,4,-18}, -{68,4,-17}, -{68,4,-16}, -{68,4,-15}, -{68,4,-14}, -{68,4,-13}, -{68,4,-12}, -{68,4,-11}, -{68,4,-10}, -{68,4,-9}, -{68,4,-8}, -{68,4,-7}, -{68,4,-6}, -{68,4,-5}, -{68,4,-4}, -{68,4,-3}, -{68,4,-2}, -{68,4,-1}, -{68,4,0}, -{68,4,1}, -{68,4,2}, -{68,4,3}, -{68,4,4}, -{68,4,5}, -{68,4,6}, -{68,4,7}, -{68,4,8}, -{68,4,9}, -{68,4,10}, -{68,4,11}, -{68,4,12}, -{68,4,13}, -{68,4,14}, -{68,4,15}, -{68,4,16}, -{68,4,17}, -{68,4,18}, -{68,4,19}, -{68,4,20}, -{68,4,21}, -{68,4,22}, -{68,4,23}, -{68,4,24}, -{68,4,25}, -{68,4,26}, -{68,4,27}, -{68,4,28}, -{68,4,29}, -{68,4,30}, -{68,4,31}, -{68,4,32}, -{68,4,33}, -{68,4,34}, -{68,4,35}, -{68,4,36}, -{68,4,37}, -{68,4,38}, -{68,4,39}, -{68,4,40}, -{68,4,41}, -{68,4,42}, -{68,4,43}, -{68,4,44}, -{68,4,45}, -{68,4,46}, -{68,4,47}, -{68,4,48}, -{68,4,49}, -{68,4,50}, -{68,4,51}, -{68,4,52}, -{68,4,53}, -{68,4,54}, -{68,4,55}, -{68,4,56}, -{68,4,57}, -{68,4,58}, -{68,4,59}, -{68,4,60}, -{68,4,61}, -{68,4,62}, -{68,4,63}, -{68,4,64}, -{68,4,65}, -{68,4,66}, -{68,4,67}, -{68,4,68}, -{68,4,69}, -{68,4,70}, -{68,4,71}, -{68,5,-49}, -{68,5,-48}, -{68,5,-47}, -{68,5,-46}, -{68,5,-45}, -{68,5,-44}, -{68,5,-43}, -{68,5,-42}, -{68,5,-41}, -{68,5,-40}, -{68,5,-39}, -{68,5,-38}, -{68,5,-37}, -{68,5,-36}, -{68,5,-35}, -{68,5,-34}, -{68,5,-33}, -{68,5,-32}, -{68,5,-31}, -{68,5,-30}, -{68,5,-29}, -{68,5,-28}, -{68,5,-27}, -{68,5,-26}, -{68,5,-25}, -{68,5,-24}, -{68,5,-23}, -{68,5,-22}, -{68,5,-21}, -{68,5,-20}, -{68,5,-19}, -{68,5,-18}, -{68,5,-17}, -{68,5,-16}, -{68,5,-15}, -{68,5,-14}, -{68,5,-13}, -{68,5,-12}, -{68,5,-11}, -{68,5,-10}, -{68,5,-9}, -{68,5,-8}, -{68,5,-7}, -{68,5,-6}, -{68,5,-5}, -{68,5,-4}, -{68,5,-3}, -{68,5,-2}, -{68,5,-1}, -{68,5,0}, -{68,5,1}, -{68,5,2}, -{68,5,3}, -{68,5,4}, -{68,5,5}, -{68,5,6}, -{68,5,7}, -{68,5,8}, -{68,5,9}, -{68,5,10}, -{68,5,11}, -{68,5,12}, -{68,5,13}, -{68,5,14}, -{68,5,15}, -{68,5,16}, -{68,5,17}, -{68,5,18}, -{68,5,19}, -{68,5,20}, -{68,5,21}, -{68,5,22}, -{68,5,23}, -{68,5,24}, -{68,5,25}, -{68,5,26}, -{68,5,27}, -{68,5,28}, -{68,5,29}, -{68,5,30}, -{68,5,31}, -{68,5,32}, -{68,5,33}, -{68,5,34}, -{68,5,35}, -{68,5,36}, -{68,5,37}, -{68,5,38}, -{68,5,39}, -{68,5,40}, -{68,5,41}, -{68,5,42}, -{68,5,43}, -{68,5,44}, -{68,5,45}, -{68,5,46}, -{68,5,47}, -{68,5,48}, -{68,5,49}, -{68,5,50}, -{68,5,51}, -{68,5,52}, -{68,5,53}, -{68,5,54}, -{68,5,55}, -{68,5,56}, -{68,5,57}, -{68,5,58}, -{68,5,59}, -{68,5,60}, -{68,5,61}, -{68,5,62}, -{68,5,63}, -{68,5,64}, -{68,5,65}, -{68,5,66}, -{68,5,67}, -{68,5,68}, -{68,5,69}, -{68,5,70}, -{68,5,71}, -{68,6,-49}, -{68,6,-48}, -{68,6,-47}, -{68,6,-46}, -{68,6,-45}, -{68,6,-44}, -{68,6,-43}, -{68,6,-42}, -{68,6,-41}, -{68,6,-40}, -{68,6,-39}, -{68,6,-38}, -{68,6,-37}, -{68,6,-36}, -{68,6,-35}, -{68,6,-34}, -{68,6,-33}, -{68,6,-32}, -{68,6,-31}, -{68,6,-30}, -{68,6,-29}, -{68,6,-28}, -{68,6,-27}, -{68,6,-26}, -{68,6,-25}, -{68,6,-24}, -{68,6,-23}, -{68,6,-22}, -{68,6,-21}, -{68,6,-20}, -{68,6,-19}, -{68,6,-18}, -{68,6,-17}, -{68,6,-16}, -{68,6,-15}, -{68,6,-14}, -{68,6,-13}, -{68,6,-12}, -{68,6,-11}, -{68,6,-10}, -{68,6,-9}, -{68,6,-8}, -{68,6,-7}, -{68,6,-6}, -{68,6,-5}, -{68,6,-4}, -{68,6,-3}, -{68,6,-2}, -{68,6,-1}, -{68,6,0}, -{68,6,1}, -{68,6,2}, -{68,6,3}, -{68,6,4}, -{68,6,5}, -{68,6,6}, -{68,6,7}, -{68,6,8}, -{68,6,9}, -{68,6,10}, -{68,6,11}, -{68,6,12}, -{68,6,13}, -{68,6,14}, -{68,6,15}, -{68,6,16}, -{68,6,17}, -{68,6,18}, -{68,6,19}, -{68,6,20}, -{68,6,21}, -{68,6,22}, -{68,6,23}, -{68,6,24}, -{68,6,25}, -{68,6,26}, -{68,6,27}, -{68,6,28}, -{68,6,29}, -{68,6,30}, -{68,6,31}, -{68,6,32}, -{68,6,33}, -{68,6,34}, -{68,6,35}, -{68,6,36}, -{68,6,37}, -{68,6,38}, -{68,6,39}, -{68,6,40}, -{68,6,41}, -{68,6,42}, -{68,6,43}, -{68,6,44}, -{68,6,45}, -{68,6,46}, -{68,6,47}, -{68,6,48}, -{68,6,49}, -{68,6,50}, -{68,6,51}, -{68,6,52}, -{68,6,53}, -{68,6,54}, -{68,6,55}, -{68,6,56}, -{68,6,57}, -{68,6,58}, -{68,6,59}, -{68,6,60}, -{68,6,61}, -{68,6,62}, -{68,6,63}, -{68,6,64}, -{68,6,65}, -{68,6,66}, -{68,6,67}, -{68,6,68}, -{68,6,69}, -{68,6,70}, -{68,6,71}, -{68,7,-49}, -{68,7,-48}, -{68,7,-47}, -{68,7,-46}, -{68,7,-45}, -{68,7,-44}, -{68,7,-43}, -{68,7,-42}, -{68,7,-41}, -{68,7,-40}, -{68,7,-39}, -{68,7,-38}, -{68,7,-37}, -{68,7,-36}, -{68,7,-35}, -{68,7,-34}, -{68,7,-33}, -{68,7,-32}, -{68,7,-31}, -{68,7,-30}, -{68,7,-29}, -{68,7,-28}, -{68,7,-27}, -{68,7,-26}, -{68,7,-25}, -{68,7,-24}, -{68,7,-23}, -{68,7,-22}, -{68,7,-21}, -{68,7,-20}, -{68,7,-19}, -{68,7,-18}, -{68,7,-17}, -{68,7,-16}, -{68,7,-15}, -{68,7,-14}, -{68,7,-13}, -{68,7,-12}, -{68,7,-11}, -{68,7,-10}, -{68,7,-9}, -{68,7,-8}, -{68,7,-7}, -{68,7,-6}, -{68,7,-5}, -{68,7,-4}, -{68,7,-3}, -{68,7,-2}, -{68,7,-1}, -{68,7,0}, -{68,7,1}, -{68,7,2}, -{68,7,3}, -{68,7,4}, -{68,7,5}, -{68,7,6}, -{68,7,7}, -{68,7,8}, -{68,7,9}, -{68,7,10}, -{68,7,11}, -{68,7,12}, -{68,7,13}, -{68,7,14}, -{68,7,15}, -{68,7,16}, -{68,7,17}, -{68,7,18}, -{68,7,19}, -{68,7,20}, -{68,7,21}, -{68,7,22}, -{68,7,23}, -{68,7,24}, -{68,7,25}, -{68,7,26}, -{68,7,27}, -{68,7,28}, -{68,7,29}, -{68,7,30}, -{68,7,31}, -{68,7,32}, -{68,7,33}, -{68,7,34}, -{68,7,35}, -{68,7,36}, -{68,7,37}, -{68,7,38}, -{68,7,39}, -{68,7,40}, -{68,7,41}, -{68,7,42}, -{68,7,43}, -{68,7,44}, -{68,7,45}, -{68,7,46}, -{68,7,47}, -{68,7,48}, -{68,7,49}, -{68,7,50}, -{68,7,51}, -{68,7,52}, -{68,7,53}, -{68,7,54}, -{68,7,55}, -{68,7,56}, -{68,7,57}, -{68,7,58}, -{68,7,59}, -{68,7,60}, -{68,7,61}, -{68,7,62}, -{68,7,63}, -{68,7,64}, -{68,7,65}, -{68,7,66}, -{68,7,67}, -{68,7,68}, -{68,7,69}, -{68,7,70}, -{68,7,71}, -{68,8,-49}, -{68,8,-48}, -{68,8,-47}, -{68,8,-46}, -{68,8,-45}, -{68,8,-44}, -{68,8,-43}, -{68,8,-42}, -{68,8,-41}, -{68,8,-40}, -{68,8,-39}, -{68,8,-38}, -{68,8,-37}, -{68,8,-36}, -{68,8,-35}, -{68,8,-34}, -{68,8,-33}, -{68,8,-32}, -{68,8,-31}, -{68,8,-30}, -{68,8,-29}, -{68,8,-28}, -{68,8,-27}, -{68,8,-26}, -{68,8,-25}, -{68,8,-24}, -{68,8,-23}, -{68,8,-22}, -{68,8,-21}, -{68,8,-20}, -{68,8,-19}, -{68,8,-18}, -{68,8,-17}, -{68,8,-16}, -{68,8,-15}, -{68,8,-14}, -{68,8,-13}, -{68,8,-12}, -{68,8,-11}, -{68,8,-10}, -{68,8,-9}, -{68,8,-8}, -{68,8,-7}, -{68,8,-6}, -{68,8,-5}, -{68,8,-4}, -{68,8,-3}, -{68,8,-2}, -{68,8,-1}, -{68,8,0}, -{68,8,1}, -{68,8,2}, -{68,8,3}, -{68,8,4}, -{68,8,5}, -{68,8,6}, -{68,8,7}, -{68,8,8}, -{68,8,9}, -{68,8,10}, -{68,8,11}, -{68,8,12}, -{68,8,13}, -{68,8,14}, -{68,8,15}, -{68,8,16}, -{68,8,17}, -{68,8,18}, -{68,8,19}, -{68,8,20}, -{68,8,21}, -{68,8,22}, -{68,8,23}, -{68,8,24}, -{68,8,25}, -{68,8,26}, -{68,8,27}, -{68,8,28}, -{68,8,29}, -{68,8,30}, -{68,8,31}, -{68,8,32}, -{68,8,33}, -{68,8,34}, -{68,8,35}, -{68,8,36}, -{68,8,37}, -{68,8,38}, -{68,8,39}, -{68,8,40}, -{68,8,41}, -{68,8,42}, -{68,8,43}, -{68,8,44}, -{68,8,45}, -{68,8,46}, -{68,8,47}, -{68,8,48}, -{68,8,49}, -{68,8,50}, -{68,8,51}, -{68,8,52}, -{68,8,53}, -{68,8,54}, -{68,8,55}, -{68,8,56}, -{68,8,57}, -{68,8,58}, -{68,8,59}, -{68,8,60}, -{68,8,61}, -{68,8,62}, -{68,8,63}, -{68,8,64}, -{68,8,65}, -{68,8,66}, -{68,8,67}, -{68,8,68}, -{68,8,69}, -{68,8,70}, -{68,8,71}, -{68,9,-49}, -{68,9,-48}, -{68,9,-47}, -{68,9,-46}, -{68,9,-45}, -{68,9,-44}, -{68,9,-43}, -{68,9,-42}, -{68,9,-41}, -{68,9,-40}, -{68,9,-39}, -{68,9,-38}, -{68,9,-37}, -{68,9,-36}, -{68,9,-35}, -{68,9,-34}, -{68,9,-33}, -{68,9,-32}, -{68,9,-31}, -{68,9,-30}, -{68,9,-29}, -{68,9,-28}, -{68,9,-27}, -{68,9,-26}, -{68,9,-25}, -{68,9,-24}, -{68,9,-23}, -{68,9,-22}, -{68,9,-21}, -{68,9,-20}, -{68,9,-19}, -{68,9,-18}, -{68,9,-17}, -{68,9,-16}, -{68,9,-15}, -{68,9,-14}, -{68,9,-13}, -{68,9,-12}, -{68,9,-11}, -{68,9,-10}, -{68,9,-9}, -{68,9,-8}, -{68,9,-7}, -{68,9,-6}, -{68,9,-5}, -{68,9,-4}, -{68,9,-3}, -{68,9,-2}, -{68,9,-1}, -{68,9,0}, -{68,9,1}, -{68,9,2}, -{68,9,3}, -{68,9,4}, -{68,9,5}, -{68,9,6}, -{68,9,7}, -{68,9,8}, -{68,9,9}, -{68,9,10}, -{68,9,11}, -{68,9,12}, -{68,9,13}, -{68,9,14}, -{68,9,15}, -{68,9,16}, -{68,9,17}, -{68,9,18}, -{68,9,19}, -{68,9,20}, -{68,9,21}, -{68,9,22}, -{68,9,23}, -{68,9,24}, -{68,9,25}, -{68,9,26}, -{68,9,27}, -{68,9,28}, -{68,9,29}, -{68,9,30}, -{68,9,31}, -{68,9,32}, -{68,9,33}, -{68,9,34}, -{68,9,35}, -{68,9,36}, -{68,9,37}, -{68,9,38}, -{68,9,39}, -{68,9,40}, -{68,9,41}, -{68,9,42}, -{68,9,43}, -{68,9,44}, -{68,9,45}, -{68,9,46}, -{68,9,47}, -{68,9,48}, -{68,9,49}, -{68,9,50}, -{68,9,51}, -{68,9,52}, -{68,9,53}, -{68,9,54}, -{68,9,55}, -{68,9,56}, -{68,9,57}, -{68,9,58}, -{68,9,59}, -{68,9,60}, -{68,9,61}, -{68,9,62}, -{68,9,63}, -{68,9,64}, -{68,9,65}, -{68,9,66}, -{68,9,67}, -{68,9,68}, -{68,9,69}, -{68,9,70}, -{68,9,71}, -{68,9,72}, -{68,10,-49}, -{68,10,-48}, -{68,10,-47}, -{68,10,-46}, -{68,10,-45}, -{68,10,-44}, -{68,10,-43}, -{68,10,-42}, -{68,10,-41}, -{68,10,-40}, -{68,10,-39}, -{68,10,-38}, -{68,10,-37}, -{68,10,-36}, -{68,10,-35}, -{68,10,-34}, -{68,10,-33}, -{68,10,-32}, -{68,10,-31}, -{68,10,-30}, -{68,10,-29}, -{68,10,-28}, -{68,10,-27}, -{68,10,-26}, -{68,10,-25}, -{68,10,-24}, -{68,10,-23}, -{68,10,-22}, -{68,10,-21}, -{68,10,-20}, -{68,10,-19}, -{68,10,-18}, -{68,10,-17}, -{68,10,-16}, -{68,10,-15}, -{68,10,-14}, -{68,10,-13}, -{68,10,-12}, -{68,10,-11}, -{68,10,-10}, -{68,10,-9}, -{68,10,-8}, -{68,10,-7}, -{68,10,-6}, -{68,10,-5}, -{68,10,-4}, -{68,10,-3}, -{68,10,-2}, -{68,10,-1}, -{68,10,0}, -{68,10,1}, -{68,10,2}, -{68,10,3}, -{68,10,4}, -{68,10,5}, -{68,10,6}, -{68,10,7}, -{68,10,8}, -{68,10,9}, -{68,10,10}, -{68,10,11}, -{68,10,12}, -{68,10,13}, -{68,10,14}, -{68,10,15}, -{68,10,16}, -{68,10,17}, -{68,10,18}, -{68,10,19}, -{68,10,20}, -{68,10,21}, -{68,10,22}, -{68,10,23}, -{68,10,24}, -{68,10,25}, -{68,10,26}, -{68,10,27}, -{68,10,28}, -{68,10,29}, -{68,10,30}, -{68,10,31}, -{68,10,32}, -{68,10,33}, -{68,10,34}, -{68,10,35}, -{68,10,36}, -{68,10,37}, -{68,10,38}, -{68,10,39}, -{68,10,40}, -{68,10,41}, -{68,10,42}, -{68,10,43}, -{68,10,44}, -{68,10,45}, -{68,10,46}, -{68,10,47}, -{68,10,48}, -{68,10,49}, -{68,10,50}, -{68,10,51}, -{68,10,52}, -{68,10,53}, -{68,10,54}, -{68,10,55}, -{68,10,56}, -{68,10,57}, -{68,10,58}, -{68,10,59}, -{68,10,60}, -{68,10,61}, -{68,10,62}, -{68,10,63}, -{68,10,64}, -{68,10,65}, -{68,10,66}, -{68,10,67}, -{68,10,68}, -{68,10,69}, -{68,10,70}, -{68,10,71}, -{68,10,72}, -{68,11,-49}, -{68,11,-48}, -{68,11,-47}, -{68,11,-46}, -{68,11,-45}, -{68,11,-44}, -{68,11,-43}, -{68,11,-42}, -{68,11,-41}, -{68,11,-40}, -{68,11,-39}, -{68,11,-38}, -{68,11,-37}, -{68,11,-36}, -{68,11,-35}, -{68,11,-34}, -{68,11,-33}, -{68,11,-32}, -{68,11,-31}, -{68,11,-30}, -{68,11,-29}, -{68,11,-28}, -{68,11,-27}, -{68,11,-26}, -{68,11,-25}, -{68,11,-24}, -{68,11,-23}, -{68,11,-22}, -{68,11,-21}, -{68,11,-20}, -{68,11,-19}, -{68,11,-18}, -{68,11,-17}, -{68,11,-16}, -{68,11,-15}, -{68,11,-14}, -{68,11,-13}, -{68,11,-12}, -{68,11,-11}, -{68,11,-10}, -{68,11,-9}, -{68,11,-8}, -{68,11,-7}, -{68,11,-6}, -{68,11,-5}, -{68,11,-4}, -{68,11,-3}, -{68,11,-2}, -{68,11,-1}, -{68,11,0}, -{68,11,1}, -{68,11,2}, -{68,11,3}, -{68,11,4}, -{68,11,5}, -{68,11,6}, -{68,11,7}, -{68,11,8}, -{68,11,9}, -{68,11,10}, -{68,11,11}, -{68,11,12}, -{68,11,13}, -{68,11,14}, -{68,11,15}, -{68,11,16}, -{68,11,17}, -{68,11,18}, -{68,11,19}, -{68,11,20}, -{68,11,21}, -{68,11,22}, -{68,11,23}, -{68,11,24}, -{68,11,25}, -{68,11,26}, -{68,11,27}, -{68,11,28}, -{68,11,29}, -{68,11,30}, -{68,11,31}, -{68,11,32}, -{68,11,33}, -{68,11,34}, -{68,11,35}, -{68,11,36}, -{68,11,37}, -{68,11,38}, -{68,11,39}, -{68,11,40}, -{68,11,41}, -{68,11,42}, -{68,11,43}, -{68,11,44}, -{68,11,45}, -{68,11,46}, -{68,11,47}, -{68,11,48}, -{68,11,49}, -{68,11,50}, -{68,11,51}, -{68,11,52}, -{68,11,53}, -{68,11,54}, -{68,11,55}, -{68,11,56}, -{68,11,57}, -{68,11,58}, -{68,11,59}, -{68,11,60}, -{68,11,61}, -{68,11,62}, -{68,11,63}, -{68,11,64}, -{68,11,65}, -{68,11,66}, -{68,11,67}, -{68,11,68}, -{68,11,69}, -{68,11,70}, -{68,11,71}, -{68,11,72}, -{68,12,-49}, -{68,12,-48}, -{68,12,-47}, -{68,12,-46}, -{68,12,-45}, -{68,12,-44}, -{68,12,-43}, -{68,12,-42}, -{68,12,-41}, -{68,12,-40}, -{68,12,-39}, -{68,12,-38}, -{68,12,-37}, -{68,12,-36}, -{68,12,-35}, -{68,12,-34}, -{68,12,-33}, -{68,12,-32}, -{68,12,-31}, -{68,12,-30}, -{68,12,-29}, -{68,12,-28}, -{68,12,-27}, -{68,12,-26}, -{68,12,-25}, -{68,12,-24}, -{68,12,-23}, -{68,12,-22}, -{68,12,-21}, -{68,12,-20}, -{68,12,-19}, -{68,12,-18}, -{68,12,-17}, -{68,12,-16}, -{68,12,-15}, -{68,12,-14}, -{68,12,-13}, -{68,12,-12}, -{68,12,-11}, -{68,12,-10}, -{68,12,-9}, -{68,12,-8}, -{68,12,-7}, -{68,12,-6}, -{68,12,-5}, -{68,12,-4}, -{68,12,-3}, -{68,12,-2}, -{68,12,-1}, -{68,12,0}, -{68,12,1}, -{68,12,2}, -{68,12,3}, -{68,12,4}, -{68,12,5}, -{68,12,6}, -{68,12,7}, -{68,12,8}, -{68,12,9}, -{68,12,10}, -{68,12,11}, -{68,12,12}, -{68,12,13}, -{68,12,14}, -{68,12,15}, -{68,12,16}, -{68,12,17}, -{68,12,18}, -{68,12,19}, -{68,12,20}, -{68,12,21}, -{68,12,22}, -{68,12,23}, -{68,12,24}, -{68,12,25}, -{68,12,26}, -{68,12,27}, -{68,12,28}, -{68,12,29}, -{68,12,30}, -{68,12,31}, -{68,12,32}, -{68,12,33}, -{68,12,34}, -{68,12,35}, -{68,12,36}, -{68,12,37}, -{68,12,38}, -{68,12,39}, -{68,12,40}, -{68,12,41}, -{68,12,42}, -{68,12,43}, -{68,12,44}, -{68,12,45}, -{68,12,46}, -{68,12,47}, -{68,12,48}, -{68,12,49}, -{68,12,50}, -{68,12,51}, -{68,12,52}, -{68,12,53}, -{68,12,54}, -{68,12,55}, -{68,12,56}, -{68,12,57}, -{68,12,58}, -{68,12,59}, -{68,12,60}, -{68,12,61}, -{68,12,62}, -{68,12,63}, -{68,12,64}, -{68,12,65}, -{68,12,66}, -{68,12,67}, -{68,12,68}, -{68,12,69}, -{68,12,70}, -{68,12,71}, -{68,12,72}, -{68,13,-49}, -{68,13,-48}, -{68,13,-47}, -{68,13,-46}, -{68,13,-45}, -{68,13,-44}, -{68,13,-43}, -{68,13,-42}, -{68,13,-41}, -{68,13,-40}, -{68,13,-39}, -{68,13,-38}, -{68,13,-37}, -{68,13,-36}, -{68,13,-35}, -{68,13,-34}, -{68,13,-33}, -{68,13,-32}, -{68,13,-31}, -{68,13,-30}, -{68,13,-29}, -{68,13,-28}, -{68,13,-27}, -{68,13,-26}, -{68,13,-25}, -{68,13,-24}, -{68,13,-23}, -{68,13,-22}, -{68,13,-21}, -{68,13,-20}, -{68,13,-19}, -{68,13,-18}, -{68,13,-17}, -{68,13,-16}, -{68,13,-15}, -{68,13,-14}, -{68,13,-13}, -{68,13,-12}, -{68,13,-11}, -{68,13,-10}, -{68,13,-9}, -{68,13,-8}, -{68,13,-7}, -{68,13,-6}, -{68,13,-5}, -{68,13,-4}, -{68,13,-3}, -{68,13,-2}, -{68,13,-1}, -{68,13,0}, -{68,13,1}, -{68,13,2}, -{68,13,3}, -{68,13,4}, -{68,13,5}, -{68,13,6}, -{68,13,7}, -{68,13,8}, -{68,13,9}, -{68,13,10}, -{68,13,11}, -{68,13,12}, -{68,13,13}, -{68,13,14}, -{68,13,15}, -{68,13,16}, -{68,13,17}, -{68,13,18}, -{68,13,19}, -{68,13,20}, -{68,13,21}, -{68,13,22}, -{68,13,23}, -{68,13,24}, -{68,13,25}, -{68,13,26}, -{68,13,27}, -{68,13,28}, -{68,13,29}, -{68,13,30}, -{68,13,31}, -{68,13,32}, -{68,13,33}, -{68,13,34}, -{68,13,35}, -{68,13,36}, -{68,13,37}, -{68,13,38}, -{68,13,39}, -{68,13,40}, -{68,13,41}, -{68,13,42}, -{68,13,43}, -{68,13,44}, -{68,13,45}, -{68,13,46}, -{68,13,47}, -{68,13,48}, -{68,13,49}, -{68,13,50}, -{68,13,51}, -{68,13,52}, -{68,13,53}, -{68,13,54}, -{68,13,55}, -{68,13,56}, -{68,13,57}, -{68,13,58}, -{68,13,59}, -{68,13,60}, -{68,13,61}, -{68,13,62}, -{68,13,63}, -{68,13,64}, -{68,13,65}, -{68,13,66}, -{68,13,67}, -{68,13,68}, -{68,13,69}, -{68,13,70}, -{68,13,71}, -{68,13,72}, -{68,14,-49}, -{68,14,-48}, -{68,14,-47}, -{68,14,-46}, -{68,14,-45}, -{68,14,-44}, -{68,14,-43}, -{68,14,-42}, -{68,14,-41}, -{68,14,-40}, -{68,14,-39}, -{68,14,-38}, -{68,14,-37}, -{68,14,-36}, -{68,14,-35}, -{68,14,-34}, -{68,14,-33}, -{68,14,-32}, -{68,14,-31}, -{68,14,-30}, -{68,14,-29}, -{68,14,-28}, -{68,14,-27}, -{68,14,-26}, -{68,14,-25}, -{68,14,-24}, -{68,14,-23}, -{68,14,-22}, -{68,14,-21}, -{68,14,-20}, -{68,14,-19}, -{68,14,-18}, -{68,14,-17}, -{68,14,-16}, -{68,14,-15}, -{68,14,-14}, -{68,14,-13}, -{68,14,-12}, -{68,14,-11}, -{68,14,-10}, -{68,14,-9}, -{68,14,-8}, -{68,14,-7}, -{68,14,-6}, -{68,14,-5}, -{68,14,-4}, -{68,14,-3}, -{68,14,-2}, -{68,14,-1}, -{68,14,0}, -{68,14,1}, -{68,14,2}, -{68,14,3}, -{68,14,4}, -{68,14,5}, -{68,14,6}, -{68,14,7}, -{68,14,8}, -{68,14,9}, -{68,14,10}, -{68,14,11}, -{68,14,12}, -{68,14,13}, -{68,14,14}, -{68,14,15}, -{68,14,16}, -{68,14,17}, -{68,14,18}, -{68,14,19}, -{68,14,20}, -{68,14,21}, -{68,14,22}, -{68,14,23}, -{68,14,24}, -{68,14,25}, -{68,14,26}, -{68,14,27}, -{68,14,28}, -{68,14,29}, -{68,14,30}, -{68,14,31}, -{68,14,32}, -{68,14,33}, -{68,14,34}, -{68,14,35}, -{68,14,36}, -{68,14,37}, -{68,14,38}, -{68,14,39}, -{68,14,40}, -{68,14,41}, -{68,14,42}, -{68,14,43}, -{68,14,44}, -{68,14,45}, -{68,14,46}, -{68,14,47}, -{68,14,48}, -{68,14,49}, -{68,14,50}, -{68,14,51}, -{68,14,52}, -{68,14,53}, -{68,14,54}, -{68,14,55}, -{68,14,56}, -{68,14,57}, -{68,14,58}, -{68,14,59}, -{68,14,60}, -{68,14,61}, -{68,14,62}, -{68,14,63}, -{68,14,64}, -{68,14,65}, -{68,14,66}, -{68,14,67}, -{68,14,68}, -{68,14,69}, -{68,14,70}, -{68,14,71}, -{68,14,72}, -{68,15,-49}, -{68,15,-48}, -{68,15,-47}, -{68,15,-46}, -{68,15,-45}, -{68,15,-44}, -{68,15,-43}, -{68,15,-42}, -{68,15,-41}, -{68,15,-40}, -{68,15,-39}, -{68,15,-38}, -{68,15,-37}, -{68,15,-36}, -{68,15,-35}, -{68,15,-34}, -{68,15,-33}, -{68,15,-32}, -{68,15,-31}, -{68,15,-30}, -{68,15,-29}, -{68,15,-28}, -{68,15,-27}, -{68,15,-26}, -{68,15,-25}, -{68,15,-24}, -{68,15,-23}, -{68,15,-22}, -{68,15,-21}, -{68,15,-20}, -{68,15,-19}, -{68,15,-18}, -{68,15,-17}, -{68,15,-16}, -{68,15,-15}, -{68,15,-14}, -{68,15,-13}, -{68,15,-12}, -{68,15,-11}, -{68,15,-10}, -{68,15,-9}, -{68,15,-8}, -{68,15,-7}, -{68,15,-6}, -{68,15,-5}, -{68,15,-4}, -{68,15,-3}, -{68,15,-2}, -{68,15,-1}, -{68,15,0}, -{68,15,1}, -{68,15,2}, -{68,15,3}, -{68,15,4}, -{68,15,5}, -{68,15,6}, -{68,15,7}, -{68,15,8}, -{68,15,9}, -{68,15,10}, -{68,15,11}, -{68,15,12}, -{68,15,13}, -{68,15,14}, -{68,15,15}, -{68,15,16}, -{68,15,17}, -{68,15,18}, -{68,15,19}, -{68,15,20}, -{68,15,21}, -{68,15,22}, -{68,15,23}, -{68,15,24}, -{68,15,25}, -{68,15,26}, -{68,15,27}, -{68,15,28}, -{68,15,29}, -{68,15,30}, -{68,15,31}, -{68,15,32}, -{68,15,33}, -{68,15,34}, -{68,15,35}, -{68,15,36}, -{68,15,37}, -{68,15,38}, -{68,15,39}, -{68,15,40}, -{68,15,41}, -{68,15,42}, -{68,15,43}, -{68,15,44}, -{68,15,45}, -{68,15,46}, -{68,15,47}, -{68,15,48}, -{68,15,49}, -{68,15,50}, -{68,15,51}, -{68,15,52}, -{68,15,53}, -{68,15,54}, -{68,15,55}, -{68,15,56}, -{68,15,57}, -{68,15,58}, -{68,15,59}, -{68,15,60}, -{68,15,61}, -{68,15,62}, -{68,15,63}, -{68,15,64}, -{68,15,65}, -{68,15,66}, -{68,15,67}, -{68,15,68}, -{68,15,69}, -{68,15,70}, -{68,15,71}, -{68,15,72}, -{68,16,-49}, -{68,16,-48}, -{68,16,-47}, -{68,16,-46}, -{68,16,-45}, -{68,16,-44}, -{68,16,-43}, -{68,16,-42}, -{68,16,-41}, -{68,16,-40}, -{68,16,-39}, -{68,16,-38}, -{68,16,-37}, -{68,16,-36}, -{68,16,-35}, -{68,16,-34}, -{68,16,-33}, -{68,16,-32}, -{68,16,-31}, -{68,16,-30}, -{68,16,-29}, -{68,16,-28}, -{68,16,-27}, -{68,16,-26}, -{68,16,-25}, -{68,16,-24}, -{68,16,-23}, -{68,16,-22}, -{68,16,-21}, -{68,16,-20}, -{68,16,-19}, -{68,16,-18}, -{68,16,-17}, -{68,16,-16}, -{68,16,-15}, -{68,16,-14}, -{68,16,-13}, -{68,16,-12}, -{68,16,-11}, -{68,16,-10}, -{68,16,-9}, -{68,16,-8}, -{68,16,-7}, -{68,16,-6}, -{68,16,-5}, -{68,16,-4}, -{68,16,-3}, -{68,16,-2}, -{68,16,-1}, -{68,16,0}, -{68,16,1}, -{68,16,2}, -{68,16,3}, -{68,16,4}, -{68,16,5}, -{68,16,6}, -{68,16,7}, -{68,16,8}, -{68,16,9}, -{68,16,10}, -{68,16,11}, -{68,16,12}, -{68,16,13}, -{68,16,14}, -{68,16,15}, -{68,16,16}, -{68,16,17}, -{68,16,18}, -{68,16,19}, -{68,16,20}, -{68,16,21}, -{68,16,22}, -{68,16,23}, -{68,16,24}, -{68,16,25}, -{68,16,26}, -{68,16,27}, -{68,16,28}, -{68,16,29}, -{68,16,30}, -{68,16,31}, -{68,16,32}, -{68,16,33}, -{68,16,34}, -{68,16,35}, -{68,16,36}, -{68,16,37}, -{68,16,38}, -{68,16,39}, -{68,16,40}, -{68,16,41}, -{68,16,42}, -{68,16,43}, -{68,16,44}, -{68,16,45}, -{68,16,46}, -{68,16,47}, -{68,16,48}, -{68,16,49}, -{68,16,50}, -{68,16,51}, -{68,16,52}, -{68,16,53}, -{68,16,54}, -{68,16,55}, -{68,16,56}, -{68,16,57}, -{68,16,58}, -{68,16,59}, -{68,16,60}, -{68,16,61}, -{68,16,62}, -{68,16,63}, -{68,16,64}, -{68,16,65}, -{68,16,66}, -{68,16,67}, -{68,16,68}, -{68,16,69}, -{68,16,70}, -{68,16,71}, -{68,16,72}, -{68,17,-49}, -{68,17,-48}, -{68,17,-47}, -{68,17,-46}, -{68,17,-45}, -{68,17,-44}, -{68,17,-43}, -{68,17,-42}, -{68,17,-41}, -{68,17,-40}, -{68,17,-39}, -{68,17,-38}, -{68,17,-37}, -{68,17,-36}, -{68,17,-35}, -{68,17,-34}, -{68,17,-33}, -{68,17,-32}, -{68,17,-31}, -{68,17,-30}, -{68,17,-29}, -{68,17,-28}, -{68,17,-27}, -{68,17,-26}, -{68,17,-25}, -{68,17,-24}, -{68,17,-23}, -{68,17,-22}, -{68,17,-21}, -{68,17,-20}, -{68,17,-19}, -{68,17,-18}, -{68,17,-17}, -{68,17,-16}, -{68,17,-15}, -{68,17,-14}, -{68,17,-13}, -{68,17,-12}, -{68,17,-11}, -{68,17,-10}, -{68,17,-9}, -{68,17,-8}, -{68,17,-7}, -{68,17,-6}, -{68,17,-5}, -{68,17,-4}, -{68,17,-3}, -{68,17,-2}, -{68,17,-1}, -{68,17,0}, -{68,17,1}, -{68,17,2}, -{68,17,3}, -{68,17,4}, -{68,17,5}, -{68,17,6}, -{68,17,7}, -{68,17,8}, -{68,17,9}, -{68,17,10}, -{68,17,11}, -{68,17,12}, -{68,17,13}, -{68,17,14}, -{68,17,15}, -{68,17,16}, -{68,17,17}, -{68,17,18}, -{68,17,19}, -{68,17,20}, -{68,17,21}, -{68,17,22}, -{68,17,23}, -{68,17,24}, -{68,17,25}, -{68,17,26}, -{68,17,27}, -{68,17,28}, -{68,17,29}, -{68,17,30}, -{68,17,31}, -{68,17,32}, -{68,17,33}, -{68,17,34}, -{68,17,35}, -{68,17,36}, -{68,17,37}, -{68,17,38}, -{68,17,39}, -{68,17,40}, -{68,17,41}, -{68,17,42}, -{68,17,43}, -{68,17,44}, -{68,17,45}, -{68,17,46}, -{68,17,47}, -{68,17,48}, -{68,17,49}, -{68,17,50}, -{68,17,51}, -{68,17,52}, -{68,17,53}, -{68,17,54}, -{68,17,55}, -{68,17,56}, -{68,17,57}, -{68,17,58}, -{68,17,59}, -{68,17,60}, -{68,17,61}, -{68,17,62}, -{68,17,63}, -{68,17,64}, -{68,17,65}, -{68,17,66}, -{68,17,67}, -{68,17,68}, -{68,17,69}, -{68,17,70}, -{68,17,71}, -{68,17,72}, -{68,18,-49}, -{68,18,-48}, -{68,18,-47}, -{68,18,-46}, -{68,18,-45}, -{68,18,-44}, -{68,18,-43}, -{68,18,-42}, -{68,18,-41}, -{68,18,-40}, -{68,18,-39}, -{68,18,-38}, -{68,18,-37}, -{68,18,-36}, -{68,18,-35}, -{68,18,-34}, -{68,18,-33}, -{68,18,-32}, -{68,18,-31}, -{68,18,-30}, -{68,18,-29}, -{68,18,-28}, -{68,18,-27}, -{68,18,-26}, -{68,18,-25}, -{68,18,-24}, -{68,18,-23}, -{68,18,-22}, -{68,18,-21}, -{68,18,-20}, -{68,18,-19}, -{68,18,-18}, -{68,18,-17}, -{68,18,-16}, -{68,18,-15}, -{68,18,-14}, -{68,18,-13}, -{68,18,-12}, -{68,18,-11}, -{68,18,-10}, -{68,18,-9}, -{68,18,-8}, -{68,18,-7}, -{68,18,-6}, -{68,18,-5}, -{68,18,-4}, -{68,18,-3}, -{68,18,-2}, -{68,18,-1}, -{68,18,0}, -{68,18,1}, -{68,18,2}, -{68,18,3}, -{68,18,4}, -{68,18,5}, -{68,18,6}, -{68,18,7}, -{68,18,8}, -{68,18,9}, -{68,18,10}, -{68,18,11}, -{68,18,12}, -{68,18,13}, -{68,18,14}, -{68,18,15}, -{68,18,16}, -{68,18,17}, -{68,18,18}, -{68,18,19}, -{68,18,20}, -{68,18,21}, -{68,18,22}, -{68,18,23}, -{68,18,24}, -{68,18,25}, -{68,18,26}, -{68,18,27}, -{68,18,28}, -{68,18,29}, -{68,18,30}, -{68,18,31}, -{68,18,32}, -{68,18,33}, -{68,18,34}, -{68,18,35}, -{68,18,36}, -{68,18,37}, -{68,18,38}, -{68,18,39}, -{68,18,40}, -{68,18,41}, -{68,18,42}, -{68,18,43}, -{68,18,44}, -{68,18,45}, -{68,18,46}, -{68,18,47}, -{68,18,48}, -{68,18,49}, -{68,18,50}, -{68,18,51}, -{68,18,52}, -{68,18,53}, -{68,18,54}, -{68,18,55}, -{68,18,56}, -{68,18,57}, -{68,18,58}, -{68,18,59}, -{68,18,60}, -{68,18,61}, -{68,18,62}, -{68,18,63}, -{68,18,64}, -{68,18,65}, -{68,18,66}, -{68,18,67}, -{68,18,68}, -{68,18,69}, -{68,18,70}, -{68,18,71}, -{68,18,72}, -{68,19,-49}, -{68,19,-48}, -{68,19,-47}, -{68,19,-46}, -{68,19,-45}, -{68,19,-44}, -{68,19,-43}, -{68,19,-42}, -{68,19,-41}, -{68,19,-40}, -{68,19,-39}, -{68,19,-38}, -{68,19,-37}, -{68,19,-36}, -{68,19,-35}, -{68,19,-34}, -{68,19,-33}, -{68,19,-32}, -{68,19,-31}, -{68,19,-30}, -{68,19,-29}, -{68,19,-28}, -{68,19,-27}, -{68,19,-26}, -{68,19,-25}, -{68,19,-24}, -{68,19,-23}, -{68,19,-22}, -{68,19,-21}, -{68,19,-20}, -{68,19,-19}, -{68,19,-18}, -{68,19,-17}, -{68,19,-16}, -{68,19,-15}, -{68,19,-14}, -{68,19,-13}, -{68,19,-12}, -{68,19,-11}, -{68,19,-10}, -{68,19,-9}, -{68,19,-8}, -{68,19,-7}, -{68,19,-6}, -{68,19,-5}, -{68,19,-4}, -{68,19,-3}, -{68,19,-2}, -{68,19,-1}, -{68,19,0}, -{68,19,1}, -{68,19,2}, -{68,19,3}, -{68,19,4}, -{68,19,5}, -{68,19,6}, -{68,19,7}, -{68,19,8}, -{68,19,9}, -{68,19,10}, -{68,19,11}, -{68,19,12}, -{68,19,13}, -{68,19,14}, -{68,19,15}, -{68,19,16}, -{68,19,17}, -{68,19,18}, -{68,19,19}, -{68,19,20}, -{68,19,21}, -{68,19,22}, -{68,19,23}, -{68,19,24}, -{68,19,25}, -{68,19,26}, -{68,19,27}, -{68,19,28}, -{68,19,29}, -{68,19,30}, -{68,19,31}, -{68,19,32}, -{68,19,33}, -{68,19,34}, -{68,19,35}, -{68,19,36}, -{68,19,37}, -{68,19,38}, -{68,19,39}, -{68,19,40}, -{68,19,41}, -{68,19,42}, -{68,19,43}, -{68,19,44}, -{68,19,45}, -{68,19,46}, -{68,19,47}, -{68,19,48}, -{68,19,49}, -{68,19,50}, -{68,19,51}, -{68,19,52}, -{68,19,53}, -{68,19,54}, -{68,19,55}, -{68,19,56}, -{68,19,57}, -{68,19,58}, -{68,19,59}, -{68,19,60}, -{68,19,61}, -{68,19,62}, -{68,19,63}, -{68,19,64}, -{68,19,65}, -{68,19,66}, -{68,19,67}, -{68,19,68}, -{68,19,69}, -{68,19,70}, -{68,19,71}, -{68,19,72}, -{68,20,-49}, -{68,20,-48}, -{68,20,-47}, -{68,20,-46}, -{68,20,-45}, -{68,20,-44}, -{68,20,-43}, -{68,20,-42}, -{68,20,-41}, -{68,20,-40}, -{68,20,-39}, -{68,20,-38}, -{68,20,-37}, -{68,20,-36}, -{68,20,-35}, -{68,20,-34}, -{68,20,-33}, -{68,20,-32}, -{68,20,-31}, -{68,20,-30}, -{68,20,-29}, -{68,20,-28}, -{68,20,-27}, -{68,20,-26}, -{68,20,-25}, -{68,20,-24}, -{68,20,-23}, -{68,20,-22}, -{68,20,-21}, -{68,20,-20}, -{68,20,-19}, -{68,20,-18}, -{68,20,-17}, -{68,20,-16}, -{68,20,-15}, -{68,20,-14}, -{68,20,-13}, -{68,20,-12}, -{68,20,-11}, -{68,20,-10}, -{68,20,-9}, -{68,20,-8}, -{68,20,-7}, -{68,20,-6}, -{68,20,-5}, -{68,20,-4}, -{68,20,-3}, -{68,20,-2}, -{68,20,-1}, -{68,20,0}, -{68,20,1}, -{68,20,2}, -{68,20,3}, -{68,20,4}, -{68,20,5}, -{68,20,6}, -{68,20,7}, -{68,20,8}, -{68,20,9}, -{68,20,10}, -{68,20,11}, -{68,20,12}, -{68,20,13}, -{68,20,14}, -{68,20,15}, -{68,20,16}, -{68,20,17}, -{68,20,18}, -{68,20,19}, -{68,20,20}, -{68,20,21}, -{68,20,22}, -{68,20,23}, -{68,20,24}, -{68,20,25}, -{68,20,26}, -{68,20,27}, -{68,20,28}, -{68,20,29}, -{68,20,30}, -{68,20,31}, -{68,20,32}, -{68,20,33}, -{68,20,34}, -{68,20,35}, -{68,20,36}, -{68,20,37}, -{68,20,38}, -{68,20,39}, -{68,20,40}, -{68,20,41}, -{68,20,42}, -{68,20,43}, -{68,20,44}, -{68,20,45}, -{68,20,46}, -{68,20,47}, -{68,20,48}, -{68,20,49}, -{68,20,50}, -{68,20,51}, -{68,20,52}, -{68,20,53}, -{68,20,54}, -{68,20,55}, -{68,20,56}, -{68,20,57}, -{68,20,58}, -{68,20,59}, -{68,20,60}, -{68,20,61}, -{68,20,62}, -{68,20,63}, -{68,20,64}, -{68,20,65}, -{68,20,66}, -{68,20,67}, -{68,20,68}, -{68,20,69}, -{68,20,70}, -{68,20,71}, -{68,20,72}, -{68,21,-49}, -{68,21,-48}, -{68,21,-47}, -{68,21,-46}, -{68,21,-45}, -{68,21,-44}, -{68,21,-43}, -{68,21,-42}, -{68,21,-41}, -{68,21,-40}, -{68,21,-39}, -{68,21,-38}, -{68,21,-37}, -{68,21,-36}, -{68,21,-35}, -{68,21,-34}, -{68,21,-33}, -{68,21,-32}, -{68,21,-31}, -{68,21,-30}, -{68,21,-29}, -{68,21,-28}, -{68,21,-27}, -{68,21,-26}, -{68,21,-25}, -{68,21,-24}, -{68,21,-23}, -{68,21,-22}, -{68,21,-21}, -{68,21,-20}, -{68,21,-19}, -{68,21,-18}, -{68,21,-17}, -{68,21,-16}, -{68,21,-15}, -{68,21,-14}, -{68,21,-13}, -{68,21,-12}, -{68,21,-11}, -{68,21,-10}, -{68,21,-9}, -{68,21,-8}, -{68,21,-7}, -{68,21,-6}, -{68,21,-5}, -{68,21,-4}, -{68,21,-3}, -{68,21,-2}, -{68,21,-1}, -{68,21,0}, -{68,21,1}, -{68,21,2}, -{68,21,3}, -{68,21,4}, -{68,21,5}, -{68,21,6}, -{68,21,7}, -{68,21,8}, -{68,21,9}, -{68,21,10}, -{68,21,11}, -{68,21,12}, -{68,21,13}, -{68,21,14}, -{68,21,15}, -{68,21,16}, -{68,21,17}, -{68,21,18}, -{68,21,19}, -{68,21,20}, -{68,21,21}, -{68,21,22}, -{68,21,23}, -{68,21,24}, -{68,21,25}, -{68,21,26}, -{68,21,27}, -{68,21,28}, -{68,21,29}, -{68,21,30}, -{68,21,31}, -{68,21,32}, -{68,21,33}, -{68,21,34}, -{68,21,35}, -{68,21,36}, -{68,21,37}, -{68,21,38}, -{68,21,39}, -{68,21,40}, -{68,21,41}, -{68,21,42}, -{68,21,43}, -{68,21,44}, -{68,21,45}, -{68,21,46}, -{68,21,47}, -{68,21,48}, -{68,21,49}, -{68,21,50}, -{68,21,51}, -{68,21,52}, -{68,21,53}, -{68,21,54}, -{68,21,55}, -{68,21,56}, -{68,21,57}, -{68,21,58}, -{68,21,59}, -{68,21,60}, -{68,21,61}, -{68,21,62}, -{68,21,63}, -{68,21,64}, -{68,21,65}, -{68,21,66}, -{68,21,67}, -{68,21,68}, -{68,21,69}, -{68,21,70}, -{68,21,71}, -{68,21,72}, -{68,21,73}, -{68,22,-49}, -{68,22,-48}, -{68,22,-47}, -{68,22,-46}, -{68,22,-45}, -{68,22,-44}, -{68,22,-43}, -{68,22,-42}, -{68,22,-41}, -{68,22,-40}, -{68,22,-39}, -{68,22,-38}, -{68,22,-37}, -{68,22,-36}, -{68,22,-35}, -{68,22,-34}, -{68,22,-33}, -{68,22,-32}, -{68,22,-31}, -{68,22,-30}, -{68,22,-29}, -{68,22,-28}, -{68,22,-27}, -{68,22,-26}, -{68,22,-25}, -{68,22,-24}, -{68,22,-23}, -{68,22,-22}, -{68,22,-21}, -{68,22,-20}, -{68,22,-19}, -{68,22,-18}, -{68,22,-17}, -{68,22,-16}, -{68,22,-15}, -{68,22,-14}, -{68,22,-13}, -{68,22,-12}, -{68,22,-11}, -{68,22,-10}, -{68,22,-9}, -{68,22,-8}, -{68,22,-7}, -{68,22,-6}, -{68,22,-5}, -{68,22,-4}, -{68,22,-3}, -{68,22,-2}, -{68,22,-1}, -{68,22,0}, -{68,22,1}, -{68,22,2}, -{68,22,3}, -{68,22,4}, -{68,22,5}, -{68,22,6}, -{68,22,7}, -{68,22,8}, -{68,22,9}, -{68,22,10}, -{68,22,11}, -{68,22,12}, -{68,22,13}, -{68,22,14}, -{68,22,15}, -{68,22,16}, -{68,22,17}, -{68,22,18}, -{68,22,19}, -{68,22,20}, -{68,22,21}, -{68,22,22}, -{68,22,23}, -{68,22,24}, -{68,22,25}, -{68,22,26}, -{68,22,27}, -{68,22,28}, -{68,22,29}, -{68,22,30}, -{68,22,31}, -{68,22,32}, -{68,22,33}, -{68,22,34}, -{68,22,35}, -{68,22,36}, -{68,22,37}, -{68,22,38}, -{68,22,39}, -{68,22,40}, -{68,22,41}, -{68,22,42}, -{68,22,43}, -{68,22,44}, -{68,22,45}, -{68,22,46}, -{68,22,47}, -{68,22,48}, -{68,22,49}, -{68,22,50}, -{68,22,51}, -{68,22,52}, -{68,22,53}, -{68,22,54}, -{68,22,55}, -{68,22,56}, -{68,22,57}, -{68,22,58}, -{68,22,59}, -{68,22,60}, -{68,22,61}, -{68,22,62}, -{68,22,63}, -{68,22,64}, -{68,22,65}, -{68,22,66}, -{68,22,67}, -{68,22,68}, -{68,22,69}, -{68,22,70}, -{68,22,71}, -{68,22,72}, -{68,22,73}, -{68,23,-49}, -{68,23,-48}, -{68,23,-47}, -{68,23,-46}, -{68,23,-45}, -{68,23,-44}, -{68,23,-43}, -{68,23,-42}, -{68,23,-41}, -{68,23,-40}, -{68,23,-39}, -{68,23,-38}, -{68,23,-37}, -{68,23,-36}, -{68,23,-35}, -{68,23,-34}, -{68,23,-33}, -{68,23,-32}, -{68,23,-31}, -{68,23,-30}, -{68,23,-29}, -{68,23,-28}, -{68,23,-27}, -{68,23,-26}, -{68,23,-25}, -{68,23,-24}, -{68,23,-23}, -{68,23,-22}, -{68,23,-21}, -{68,23,-20}, -{68,23,-19}, -{68,23,-18}, -{68,23,-17}, -{68,23,-16}, -{68,23,-15}, -{68,23,-14}, -{68,23,-13}, -{68,23,-12}, -{68,23,-11}, -{68,23,-10}, -{68,23,-9}, -{68,23,-8}, -{68,23,-7}, -{68,23,-6}, -{68,23,-5}, -{68,23,-4}, -{68,23,-3}, -{68,23,-2}, -{68,23,-1}, -{68,23,0}, -{68,23,1}, -{68,23,2}, -{68,23,3}, -{68,23,4}, -{68,23,5}, -{68,23,6}, -{68,23,7}, -{68,23,8}, -{68,23,9}, -{68,23,10}, -{68,23,11}, -{68,23,12}, -{68,23,13}, -{68,23,14}, -{68,23,15}, -{68,23,16}, -{68,23,17}, -{68,23,18}, -{68,23,19}, -{68,23,20}, -{68,23,21}, -{68,23,22}, -{68,23,23}, -{68,23,24}, -{68,23,25}, -{68,23,26}, -{68,23,27}, -{68,23,28}, -{68,23,29}, -{68,23,30}, -{68,23,31}, -{68,23,32}, -{68,23,33}, -{68,23,34}, -{68,23,35}, -{68,23,36}, -{68,23,37}, -{68,23,38}, -{68,23,39}, -{68,23,40}, -{68,23,41}, -{68,23,42}, -{68,23,43}, -{68,23,44}, -{68,23,45}, -{68,23,46}, -{68,23,47}, -{68,23,48}, -{68,23,49}, -{68,23,50}, -{68,23,51}, -{68,23,52}, -{68,23,53}, -{68,23,54}, -{68,23,55}, -{68,23,56}, -{68,23,57}, -{68,23,58}, -{68,23,59}, -{68,23,60}, -{68,23,61}, -{68,23,62}, -{68,23,63}, -{68,23,64}, -{68,23,65}, -{68,23,66}, -{68,23,67}, -{68,23,68}, -{68,23,69}, -{68,23,70}, -{68,23,71}, -{68,23,72}, -{68,23,73}, -{68,24,-49}, -{68,24,-48}, -{68,24,-47}, -{68,24,-46}, -{68,24,-45}, -{68,24,-44}, -{68,24,-43}, -{68,24,-42}, -{68,24,-41}, -{68,24,-40}, -{68,24,-39}, -{68,24,-38}, -{68,24,-37}, -{68,24,-36}, -{68,24,-35}, -{68,24,-34}, -{68,24,-33}, -{68,24,-32}, -{68,24,-31}, -{68,24,-30}, -{68,24,-29}, -{68,24,-28}, -{68,24,-27}, -{68,24,-26}, -{68,24,-25}, -{68,24,-24}, -{68,24,-23}, -{68,24,-22}, -{68,24,-21}, -{68,24,-20}, -{68,24,-19}, -{68,24,-18}, -{68,24,-17}, -{68,24,-16}, -{68,24,-15}, -{68,24,-14}, -{68,24,-13}, -{68,24,-12}, -{68,24,-11}, -{68,24,-10}, -{68,24,-9}, -{68,24,-8}, -{68,24,-7}, -{68,24,-6}, -{68,24,-5}, -{68,24,-4}, -{68,24,-3}, -{68,24,-2}, -{68,24,-1}, -{68,24,0}, -{68,24,1}, -{68,24,2}, -{68,24,3}, -{68,24,4}, -{68,24,5}, -{68,24,6}, -{68,24,7}, -{68,24,8}, -{68,24,9}, -{68,24,10}, -{68,24,11}, -{68,24,12}, -{68,24,13}, -{68,24,14}, -{68,24,15}, -{68,24,16}, -{68,24,17}, -{68,24,18}, -{68,24,19}, -{68,24,20}, -{68,24,21}, -{68,24,22}, -{68,24,23}, -{68,24,24}, -{68,24,25}, -{68,24,26}, -{68,24,27}, -{68,24,28}, -{68,24,29}, -{68,24,30}, -{68,24,31}, -{68,24,32}, -{68,24,33}, -{68,24,34}, -{68,24,35}, -{68,24,36}, -{68,24,37}, -{68,24,38}, -{68,24,39}, -{68,24,40}, -{68,24,41}, -{68,24,42}, -{68,24,43}, -{68,24,44}, -{68,24,45}, -{68,24,46}, -{68,24,47}, -{68,24,48}, -{68,24,49}, -{68,24,50}, -{68,24,51}, -{68,24,52}, -{68,24,53}, -{68,24,54}, -{68,24,55}, -{68,24,56}, -{68,24,57}, -{68,24,58}, -{68,24,59}, -{68,24,60}, -{68,24,61}, -{68,24,62}, -{68,24,63}, -{68,24,64}, -{68,24,65}, -{68,24,66}, -{68,24,67}, -{68,24,68}, -{68,24,69}, -{68,24,70}, -{68,24,71}, -{68,24,72}, -{68,24,73}, -{68,25,-49}, -{68,25,-48}, -{68,25,-47}, -{68,25,-46}, -{68,25,-45}, -{68,25,-44}, -{68,25,-43}, -{68,25,-42}, -{68,25,-41}, -{68,25,-40}, -{68,25,-39}, -{68,25,-38}, -{68,25,-37}, -{68,25,-36}, -{68,25,-35}, -{68,25,-34}, -{68,25,-33}, -{68,25,-32}, -{68,25,-31}, -{68,25,-30}, -{68,25,-29}, -{68,25,-28}, -{68,25,-27}, -{68,25,-26}, -{68,25,-25}, -{68,25,-24}, -{68,25,-23}, -{68,25,-22}, -{68,25,-21}, -{68,25,-20}, -{68,25,-19}, -{68,25,-18}, -{68,25,-17}, -{68,25,-16}, -{68,25,-15}, -{68,25,-14}, -{68,25,-13}, -{68,25,-12}, -{68,25,-11}, -{68,25,-10}, -{68,25,-9}, -{68,25,-8}, -{68,25,-7}, -{68,25,-6}, -{68,25,-5}, -{68,25,-4}, -{68,25,-3}, -{68,25,-2}, -{68,25,-1}, -{68,25,0}, -{68,25,1}, -{68,25,2}, -{68,25,3}, -{68,25,4}, -{68,25,5}, -{68,25,6}, -{68,25,7}, -{68,25,8}, -{68,25,9}, -{68,25,10}, -{68,25,11}, -{68,25,12}, -{68,25,13}, -{68,25,14}, -{68,25,15}, -{68,25,16}, -{68,25,17}, -{68,25,18}, -{68,25,19}, -{68,25,20}, -{68,25,21}, -{68,25,22}, -{68,25,23}, -{68,25,24}, -{68,25,25}, -{68,25,26}, -{68,25,27}, -{68,25,28}, -{68,25,29}, -{68,25,30}, -{68,25,31}, -{68,25,32}, -{68,25,33}, -{68,25,34}, -{68,25,35}, -{68,25,36}, -{68,25,37}, -{68,25,38}, -{68,25,39}, -{68,25,40}, -{68,25,41}, -{68,25,42}, -{68,25,43}, -{68,25,44}, -{68,25,45}, -{68,25,46}, -{68,25,47}, -{68,25,48}, -{68,25,49}, -{68,25,50}, -{68,25,51}, -{68,25,52}, -{68,25,53}, -{68,25,54}, -{68,25,55}, -{68,25,56}, -{68,25,57}, -{68,25,58}, -{68,25,59}, -{68,25,60}, -{68,25,61}, -{68,25,62}, -{68,25,63}, -{68,25,64}, -{68,25,65}, -{68,25,66}, -{68,25,67}, -{68,25,68}, -{68,25,69}, -{68,25,70}, -{68,25,71}, -{68,25,72}, -{68,25,73}, -{68,26,-49}, -{68,26,-48}, -{68,26,-47}, -{68,26,-46}, -{68,26,-45}, -{68,26,-44}, -{68,26,-43}, -{68,26,-42}, -{68,26,-41}, -{68,26,-40}, -{68,26,-39}, -{68,26,-38}, -{68,26,-37}, -{68,26,-36}, -{68,26,-35}, -{68,26,-34}, -{68,26,-33}, -{68,26,-32}, -{68,26,-31}, -{68,26,-30}, -{68,26,-29}, -{68,26,-28}, -{68,26,-27}, -{68,26,-26}, -{68,26,-25}, -{68,26,-24}, -{68,26,-23}, -{68,26,-22}, -{68,26,-21}, -{68,26,-20}, -{68,26,-19}, -{68,26,-18}, -{68,26,-17}, -{68,26,-16}, -{68,26,-15}, -{68,26,-14}, -{68,26,-13}, -{68,26,-12}, -{68,26,-11}, -{68,26,-10}, -{68,26,-9}, -{68,26,-8}, -{68,26,-7}, -{68,26,-6}, -{68,26,-5}, -{68,26,-4}, -{68,26,-3}, -{68,26,-2}, -{68,26,-1}, -{68,26,0}, -{68,26,1}, -{68,26,2}, -{68,26,3}, -{68,26,4}, -{68,26,5}, -{68,26,6}, -{68,26,7}, -{68,26,8}, -{68,26,9}, -{68,26,10}, -{68,26,11}, -{68,26,12}, -{68,26,13}, -{68,26,14}, -{68,26,15}, -{68,26,16}, -{68,26,17}, -{68,26,18}, -{68,26,19}, -{68,26,20}, -{68,26,21}, -{68,26,22}, -{68,26,23}, -{68,26,24}, -{68,26,25}, -{68,26,26}, -{68,26,27}, -{68,26,28}, -{68,26,29}, -{68,26,30}, -{68,26,31}, -{68,26,32}, -{68,26,33}, -{68,26,34}, -{68,26,35}, -{68,26,36}, -{68,26,37}, -{68,26,38}, -{68,26,39}, -{68,26,40}, -{68,26,41}, -{68,26,42}, -{68,26,43}, -{68,26,44}, -{68,26,45}, -{68,26,46}, -{68,26,47}, -{68,26,48}, -{68,26,49}, -{68,26,50}, -{68,26,51}, -{68,26,52}, -{68,26,53}, -{68,26,54}, -{68,26,55}, -{68,26,56}, -{68,26,57}, -{68,26,58}, -{68,26,59}, -{68,26,60}, -{68,26,61}, -{68,26,62}, -{68,26,63}, -{68,26,64}, -{68,26,65}, -{68,26,66}, -{68,26,67}, -{68,26,68}, -{68,26,69}, -{68,26,70}, -{68,26,71}, -{68,26,72}, -{68,26,73}, -{68,27,-49}, -{68,27,-48}, -{68,27,-47}, -{68,27,-46}, -{68,27,-45}, -{68,27,-44}, -{68,27,-43}, -{68,27,-42}, -{68,27,-41}, -{68,27,-40}, -{68,27,-39}, -{68,27,-38}, -{68,27,-37}, -{68,27,-36}, -{68,27,-35}, -{68,27,-34}, -{68,27,-33}, -{68,27,-32}, -{68,27,-31}, -{68,27,-30}, -{68,27,-29}, -{68,27,-28}, -{68,27,-27}, -{68,27,-26}, -{68,27,-25}, -{68,27,-24}, -{68,27,-23}, -{68,27,-22}, -{68,27,-21}, -{68,27,-20}, -{68,27,-19}, -{68,27,-18}, -{68,27,-17}, -{68,27,-16}, -{68,27,-15}, -{68,27,-14}, -{68,27,-13}, -{68,27,-12}, -{68,27,-11}, -{68,27,-10}, -{68,27,-9}, -{68,27,-8}, -{68,27,-7}, -{68,27,-6}, -{68,27,-5}, -{68,27,-4}, -{68,27,-3}, -{68,27,-2}, -{68,27,-1}, -{68,27,0}, -{68,27,1}, -{68,27,2}, -{68,27,3}, -{68,27,4}, -{68,27,5}, -{68,27,6}, -{68,27,7}, -{68,27,8}, -{68,27,9}, -{68,27,10}, -{68,27,11}, -{68,27,12}, -{68,27,13}, -{68,27,14}, -{68,27,15}, -{68,27,16}, -{68,27,17}, -{68,27,18}, -{68,27,19}, -{68,27,20}, -{68,27,21}, -{68,27,22}, -{68,27,23}, -{68,27,24}, -{68,27,25}, -{68,27,26}, -{68,27,27}, -{68,27,28}, -{68,27,29}, -{68,27,30}, -{68,27,31}, -{68,27,32}, -{68,27,33}, -{68,27,34}, -{68,27,35}, -{68,27,36}, -{68,27,37}, -{68,27,38}, -{68,27,39}, -{68,27,40}, -{68,27,41}, -{68,27,42}, -{68,27,43}, -{68,27,44}, -{68,27,45}, -{68,27,46}, -{68,27,47}, -{68,27,48}, -{68,27,49}, -{68,27,50}, -{68,27,51}, -{68,27,52}, -{68,27,53}, -{68,27,54}, -{68,27,55}, -{68,27,56}, -{68,27,57}, -{68,27,58}, -{68,27,59}, -{68,27,60}, -{68,27,61}, -{68,27,62}, -{68,27,63}, -{68,27,64}, -{68,27,65}, -{68,27,66}, -{68,27,67}, -{68,27,68}, -{68,27,69}, -{68,27,70}, -{68,27,71}, -{68,27,72}, -{68,27,73}, -{68,28,-49}, -{68,28,-48}, -{68,28,-47}, -{68,28,-46}, -{68,28,-45}, -{68,28,-44}, -{68,28,-43}, -{68,28,-42}, -{68,28,-41}, -{68,28,-40}, -{68,28,-39}, -{68,28,-38}, -{68,28,-37}, -{68,28,-36}, -{68,28,-35}, -{68,28,-34}, -{68,28,-33}, -{68,28,-32}, -{68,28,-31}, -{68,28,-30}, -{68,28,-29}, -{68,28,-28}, -{68,28,-27}, -{68,28,-26}, -{68,28,-25}, -{68,28,-24}, -{68,28,-23}, -{68,28,-22}, -{68,28,-21}, -{68,28,-20}, -{68,28,-19}, -{68,28,-18}, -{68,28,-17}, -{68,28,-16}, -{68,28,-15}, -{68,28,-14}, -{68,28,-13}, -{68,28,-12}, -{68,28,-11}, -{68,28,-10}, -{68,28,-9}, -{68,28,-8}, -{68,28,-7}, -{68,28,-6}, -{68,28,-5}, -{68,28,-4}, -{68,28,-3}, -{68,28,-2}, -{68,28,-1}, -{68,28,0}, -{68,28,1}, -{68,28,2}, -{68,28,3}, -{68,28,4}, -{68,28,5}, -{68,28,6}, -{68,28,7}, -{68,28,8}, -{68,28,9}, -{68,28,10}, -{68,28,11}, -{68,28,12}, -{68,28,13}, -{68,28,14}, -{68,28,15}, -{68,28,16}, -{68,28,17}, -{68,28,18}, -{68,28,19}, -{68,28,20}, -{68,28,21}, -{68,28,22}, -{68,28,23}, -{68,28,24}, -{68,28,25}, -{68,28,26}, -{68,28,27}, -{68,28,28}, -{68,28,29}, -{68,28,30}, -{68,28,31}, -{68,28,32}, -{68,28,33}, -{68,28,34}, -{68,28,35}, -{68,28,36}, -{68,28,37}, -{68,28,38}, -{68,28,39}, -{68,28,40}, -{68,28,41}, -{68,28,42}, -{68,28,43}, -{68,28,44}, -{68,28,45}, -{68,28,46}, -{68,28,47}, -{68,28,48}, -{68,28,49}, -{68,28,50}, -{68,28,51}, -{68,28,52}, -{68,28,53}, -{68,28,54}, -{68,28,55}, -{68,28,56}, -{68,28,57}, -{68,28,58}, -{68,28,59}, -{68,28,60}, -{68,28,61}, -{68,28,62}, -{68,28,63}, -{68,28,64}, -{68,28,65}, -{68,28,66}, -{68,28,67}, -{68,28,68}, -{68,28,69}, -{68,28,70}, -{68,28,71}, -{68,28,72}, -{68,28,73}, -{68,29,-49}, -{68,29,-48}, -{68,29,-47}, -{68,29,-46}, -{68,29,-45}, -{68,29,-44}, -{68,29,-43}, -{68,29,-42}, -{68,29,-41}, -{68,29,-40}, -{68,29,-39}, -{68,29,-38}, -{68,29,-37}, -{68,29,-36}, -{68,29,-35}, -{68,29,-34}, -{68,29,-33}, -{68,29,-32}, -{68,29,-31}, -{68,29,-30}, -{68,29,-29}, -{68,29,-28}, -{68,29,-27}, -{68,29,-26}, -{68,29,-25}, -{68,29,-24}, -{68,29,-23}, -{68,29,-22}, -{68,29,-21}, -{68,29,-20}, -{68,29,-19}, -{68,29,-18}, -{68,29,-17}, -{68,29,-16}, -{68,29,-15}, -{68,29,-14}, -{68,29,-13}, -{68,29,-12}, -{68,29,-11}, -{68,29,-10}, -{68,29,-9}, -{68,29,-8}, -{68,29,-7}, -{68,29,-6}, -{68,29,-5}, -{68,29,-4}, -{68,29,-3}, -{68,29,-2}, -{68,29,-1}, -{68,29,0}, -{68,29,1}, -{68,29,2}, -{68,29,3}, -{68,29,4}, -{68,29,5}, -{68,29,6}, -{68,29,7}, -{68,29,8}, -{68,29,9}, -{68,29,10}, -{68,29,11}, -{68,29,12}, -{68,29,13}, -{68,29,14}, -{68,29,15}, -{68,29,16}, -{68,29,17}, -{68,29,18}, -{68,29,19}, -{68,29,20}, -{68,29,21}, -{68,29,22}, -{68,29,23}, -{68,29,24}, -{68,29,25}, -{68,29,26}, -{68,29,27}, -{68,29,28}, -{68,29,29}, -{68,29,30}, -{68,29,31}, -{68,29,32}, -{68,29,33}, -{68,29,34}, -{68,29,35}, -{68,29,36}, -{68,29,37}, -{68,29,38}, -{68,29,39}, -{68,29,40}, -{68,29,41}, -{68,29,42}, -{68,29,43}, -{68,29,44}, -{68,29,45}, -{68,29,46}, -{68,29,47}, -{68,29,48}, -{68,29,49}, -{68,29,50}, -{68,29,51}, -{68,29,52}, -{68,29,53}, -{68,29,54}, -{68,29,55}, -{68,29,56}, -{68,29,57}, -{68,29,58}, -{68,29,59}, -{68,29,60}, -{68,29,61}, -{68,29,62}, -{68,29,63}, -{68,29,64}, -{68,29,65}, -{68,29,66}, -{68,29,67}, -{68,29,68}, -{68,29,69}, -{68,29,70}, -{68,29,71}, -{68,29,72}, -{68,29,73}, -{68,30,-49}, -{68,30,-48}, -{68,30,-47}, -{68,30,-46}, -{68,30,-45}, -{68,30,-44}, -{68,30,-43}, -{68,30,-42}, -{68,30,-41}, -{68,30,-40}, -{68,30,-39}, -{68,30,-38}, -{68,30,-37}, -{68,30,-36}, -{68,30,-35}, -{68,30,-34}, -{68,30,-33}, -{68,30,-32}, -{68,30,-31}, -{68,30,-30}, -{68,30,-29}, -{68,30,-28}, -{68,30,-27}, -{68,30,-26}, -{68,30,-25}, -{68,30,-24}, -{68,30,-23}, -{68,30,-22}, -{68,30,-21}, -{68,30,-20}, -{68,30,-19}, -{68,30,-18}, -{68,30,-17}, -{68,30,-16}, -{68,30,-15}, -{68,30,-14}, -{68,30,-13}, -{68,30,-12}, -{68,30,-11}, -{68,30,-10}, -{68,30,-9}, -{68,30,-8}, -{68,30,-7}, -{68,30,-6}, -{68,30,-5}, -{68,30,-4}, -{68,30,-3}, -{68,30,-2}, -{68,30,-1}, -{68,30,0}, -{68,30,1}, -{68,30,2}, -{68,30,3}, -{68,30,4}, -{68,30,5}, -{68,30,6}, -{68,30,7}, -{68,30,8}, -{68,30,9}, -{68,30,10}, -{68,30,11}, -{68,30,12}, -{68,30,13}, -{68,30,14}, -{68,30,15}, -{68,30,16}, -{68,30,17}, -{68,30,18}, -{68,30,19}, -{68,30,20}, -{68,30,21}, -{68,30,22}, -{68,30,23}, -{68,30,24}, -{68,30,25}, -{68,30,26}, -{68,30,27}, -{68,30,28}, -{68,30,29}, -{68,30,30}, -{68,30,31}, -{68,30,32}, -{68,30,33}, -{68,30,34}, -{68,30,35}, -{68,30,36}, -{68,30,37}, -{68,30,38}, -{68,30,39}, -{68,30,40}, -{68,30,41}, -{68,30,42}, -{68,30,43}, -{68,30,44}, -{68,30,45}, -{68,30,46}, -{68,30,47}, -{68,30,48}, -{68,30,49}, -{68,30,50}, -{68,30,51}, -{68,30,52}, -{68,30,53}, -{68,30,54}, -{68,30,55}, -{68,30,56}, -{68,30,57}, -{68,30,58}, -{68,30,59}, -{68,30,60}, -{68,30,61}, -{68,30,62}, -{68,30,63}, -{68,30,64}, -{68,30,65}, -{68,30,66}, -{68,30,67}, -{68,30,68}, -{68,30,69}, -{68,30,70}, -{68,30,71}, -{68,30,72}, -{68,30,73}, -{68,31,-49}, -{68,31,-48}, -{68,31,-47}, -{68,31,-46}, -{68,31,-45}, -{68,31,-44}, -{68,31,-43}, -{68,31,-42}, -{68,31,-41}, -{68,31,-40}, -{68,31,-39}, -{68,31,-38}, -{68,31,-37}, -{68,31,-36}, -{68,31,-35}, -{68,31,-34}, -{68,31,-33}, -{68,31,-32}, -{68,31,-31}, -{68,31,-30}, -{68,31,-29}, -{68,31,-28}, -{68,31,-27}, -{68,31,-26}, -{68,31,-25}, -{68,31,-24}, -{68,31,-23}, -{68,31,-22}, -{68,31,-21}, -{68,31,-20}, -{68,31,-19}, -{68,31,-18}, -{68,31,-17}, -{68,31,-16}, -{68,31,-15}, -{68,31,-14}, -{68,31,-13}, -{68,31,-12}, -{68,31,-11}, -{68,31,-10}, -{68,31,-9}, -{68,31,-8}, -{68,31,-7}, -{68,31,-6}, -{68,31,-5}, -{68,31,-4}, -{68,31,-3}, -{68,31,-2}, -{68,31,-1}, -{68,31,0}, -{68,31,1}, -{68,31,2}, -{68,31,3}, -{68,31,4}, -{68,31,5}, -{68,31,6}, -{68,31,7}, -{68,31,8}, -{68,31,9}, -{68,31,10}, -{68,31,11}, -{68,31,12}, -{68,31,13}, -{68,31,14}, -{68,31,15}, -{68,31,16}, -{68,31,17}, -{68,31,18}, -{68,31,19}, -{68,31,20}, -{68,31,21}, -{68,31,22}, -{68,31,23}, -{68,31,24}, -{68,31,25}, -{68,31,26}, -{68,31,27}, -{68,31,28}, -{68,31,29}, -{68,31,30}, -{68,31,31}, -{68,31,32}, -{68,31,33}, -{68,31,34}, -{68,31,35}, -{68,31,36}, -{68,31,37}, -{68,31,38}, -{68,31,39}, -{68,31,40}, -{68,31,41}, -{68,31,42}, -{68,31,43}, -{68,31,44}, -{68,31,45}, -{68,31,46}, -{68,31,47}, -{68,31,48}, -{68,31,49}, -{68,31,50}, -{68,31,51}, -{68,31,52}, -{68,31,53}, -{68,31,54}, -{68,31,55}, -{68,31,56}, -{68,31,57}, -{68,31,58}, -{68,31,59}, -{68,31,60}, -{68,31,61}, -{68,31,62}, -{68,31,63}, -{68,31,64}, -{68,31,65}, -{68,31,66}, -{68,31,67}, -{68,31,68}, -{68,31,69}, -{68,31,70}, -{68,31,71}, -{68,31,72}, -{68,31,73}, -{68,32,-49}, -{68,32,-48}, -{68,32,-47}, -{68,32,-46}, -{68,32,-45}, -{68,32,-44}, -{68,32,-43}, -{68,32,-42}, -{68,32,-41}, -{68,32,-40}, -{68,32,-39}, -{68,32,-38}, -{68,32,-37}, -{68,32,-36}, -{68,32,-35}, -{68,32,-34}, -{68,32,-33}, -{68,32,-32}, -{68,32,-31}, -{68,32,-30}, -{68,32,-29}, -{68,32,-28}, -{68,32,-27}, -{68,32,-26}, -{68,32,-25}, -{68,32,-24}, -{68,32,-23}, -{68,32,-22}, -{68,32,-21}, -{68,32,-20}, -{68,32,-19}, -{68,32,-18}, -{68,32,-17}, -{68,32,-16}, -{68,32,-15}, -{68,32,-14}, -{68,32,-13}, -{68,32,-12}, -{68,32,-11}, -{68,32,-10}, -{68,32,-9}, -{68,32,-8}, -{68,32,-7}, -{68,32,-6}, -{68,32,-5}, -{68,32,-4}, -{68,32,-3}, -{68,32,-2}, -{68,32,-1}, -{68,32,0}, -{68,32,1}, -{68,32,2}, -{68,32,3}, -{68,32,4}, -{68,32,5}, -{68,32,6}, -{68,32,7}, -{68,32,8}, -{68,32,9}, -{68,32,10}, -{68,32,11}, -{68,32,12}, -{68,32,13}, -{68,32,14}, -{68,32,15}, -{68,32,16}, -{68,32,17}, -{68,32,18}, -{68,32,19}, -{68,32,20}, -{68,32,21}, -{68,32,22}, -{68,32,23}, -{68,32,24}, -{68,32,25}, -{68,32,26}, -{68,32,27}, -{68,32,28}, -{68,32,29}, -{68,32,30}, -{68,32,31}, -{68,32,32}, -{68,32,33}, -{68,32,34}, -{68,32,35}, -{68,32,36}, -{68,32,37}, -{68,32,38}, -{68,32,39}, -{68,32,40}, -{68,32,41}, -{68,32,42}, -{68,32,43}, -{68,32,44}, -{68,32,45}, -{68,32,46}, -{68,32,47}, -{68,32,48}, -{68,32,49}, -{68,32,50}, -{68,32,51}, -{68,32,52}, -{68,32,53}, -{68,32,54}, -{68,32,55}, -{68,32,56}, -{68,32,57}, -{68,32,58}, -{68,32,59}, -{68,32,60}, -{68,32,61}, -{68,32,62}, -{68,32,63}, -{68,32,64}, -{68,32,65}, -{68,32,66}, -{68,32,67}, -{68,32,68}, -{68,32,69}, -{68,32,70}, -{68,32,71}, -{68,32,72}, -{68,32,73}, -{68,33,-49}, -{68,33,-48}, -{68,33,-47}, -{68,33,-46}, -{68,33,-45}, -{68,33,-44}, -{68,33,-43}, -{68,33,-42}, -{68,33,-41}, -{68,33,-40}, -{68,33,-39}, -{68,33,-38}, -{68,33,-37}, -{68,33,-36}, -{68,33,-35}, -{68,33,-34}, -{68,33,-33}, -{68,33,-32}, -{68,33,-31}, -{68,33,-30}, -{68,33,-29}, -{68,33,-28}, -{68,33,-27}, -{68,33,-26}, -{68,33,-25}, -{68,33,-24}, -{68,33,-23}, -{68,33,-22}, -{68,33,-21}, -{68,33,-20}, -{68,33,-19}, -{68,33,-18}, -{68,33,-17}, -{68,33,-16}, -{68,33,-15}, -{68,33,-14}, -{68,33,-13}, -{68,33,-12}, -{68,33,-11}, -{68,33,-10}, -{68,33,-9}, -{68,33,-8}, -{68,33,-7}, -{68,33,-6}, -{68,33,-5}, -{68,33,-4}, -{68,33,-3}, -{68,33,-2}, -{68,33,-1}, -{68,33,0}, -{68,33,1}, -{68,33,2}, -{68,33,3}, -{68,33,4}, -{68,33,5}, -{68,33,6}, -{68,33,7}, -{68,33,8}, -{68,33,9}, -{68,33,10}, -{68,33,11}, -{68,33,12}, -{68,33,13}, -{68,33,14}, -{68,33,15}, -{68,33,16}, -{68,33,17}, -{68,33,18}, -{68,33,19}, -{68,33,20}, -{68,33,21}, -{68,33,22}, -{68,33,23}, -{68,33,24}, -{68,33,25}, -{68,33,26}, -{68,33,27}, -{68,33,28}, -{68,33,29}, -{68,33,30}, -{68,33,31}, -{68,33,32}, -{68,33,33}, -{68,33,34}, -{68,33,35}, -{68,33,36}, -{68,33,37}, -{68,33,38}, -{68,33,39}, -{68,33,40}, -{68,33,41}, -{68,33,42}, -{68,33,43}, -{68,33,44}, -{68,33,45}, -{68,33,46}, -{68,33,47}, -{68,33,48}, -{68,33,49}, -{68,33,50}, -{68,33,51}, -{68,33,52}, -{68,33,53}, -{68,33,54}, -{68,33,55}, -{68,33,56}, -{68,33,57}, -{68,33,58}, -{68,33,59}, -{68,33,60}, -{68,33,61}, -{68,33,62}, -{68,33,63}, -{68,33,64}, -{68,33,65}, -{68,33,66}, -{68,33,67}, -{68,33,68}, -{68,33,69}, -{68,33,70}, -{68,33,71}, -{68,33,72}, -{68,33,73}, -{68,33,74}, -{68,34,-49}, -{68,34,-48}, -{68,34,-47}, -{68,34,-46}, -{68,34,-45}, -{68,34,-44}, -{68,34,-43}, -{68,34,-42}, -{68,34,-41}, -{68,34,-40}, -{68,34,-39}, -{68,34,-38}, -{68,34,-37}, -{68,34,-36}, -{68,34,-35}, -{68,34,-34}, -{68,34,-33}, -{68,34,-32}, -{68,34,-31}, -{68,34,-30}, -{68,34,-29}, -{68,34,-28}, -{68,34,-27}, -{68,34,-26}, -{68,34,-25}, -{68,34,-24}, -{68,34,-23}, -{68,34,-22}, -{68,34,-21}, -{68,34,-20}, -{68,34,-19}, -{68,34,-18}, -{68,34,-17}, -{68,34,-16}, -{68,34,-15}, -{68,34,-14}, -{68,34,-13}, -{68,34,-12}, -{68,34,-11}, -{68,34,-10}, -{68,34,-9}, -{68,34,-8}, -{68,34,-7}, -{68,34,-6}, -{68,34,-5}, -{68,34,-4}, -{68,34,-3}, -{68,34,-2}, -{68,34,-1}, -{68,34,0}, -{68,34,1}, -{68,34,2}, -{68,34,3}, -{68,34,4}, -{68,34,5}, -{68,34,6}, -{68,34,7}, -{68,34,8}, -{68,34,9}, -{68,34,10}, -{68,34,11}, -{68,34,12}, -{68,34,13}, -{68,34,14}, -{68,34,15}, -{68,34,16}, -{68,34,17}, -{68,34,18}, -{68,34,19}, -{68,34,20}, -{68,34,21}, -{68,34,22}, -{68,34,23}, -{68,34,24}, -{68,34,25}, -{68,34,26}, -{68,34,27}, -{68,34,28}, -{68,34,29}, -{68,34,30}, -{68,34,31}, -{68,34,32}, -{68,34,33}, -{68,34,34}, -{68,34,35}, -{68,34,36}, -{68,34,37}, -{68,34,38}, -{68,34,39}, -{68,34,40}, -{68,34,41}, -{68,34,42}, -{68,34,43}, -{68,34,44}, -{68,34,45}, -{68,34,46}, -{68,34,47}, -{68,34,48}, -{68,34,49}, -{68,34,50}, -{68,34,51}, -{68,34,52}, -{68,34,53}, -{68,34,54}, -{68,34,55}, -{68,34,56}, -{68,34,57}, -{68,34,58}, -{68,34,59}, -{68,34,60}, -{68,34,61}, -{68,34,62}, -{68,34,63}, -{68,34,64}, -{68,34,65}, -{68,34,66}, -{68,34,67}, -{68,34,68}, -{68,34,69}, -{68,34,70}, -{68,34,71}, -{68,34,72}, -{68,34,73}, -{68,34,74}, -{68,35,-49}, -{68,35,-48}, -{68,35,-47}, -{68,35,-46}, -{68,35,-45}, -{68,35,-44}, -{68,35,-43}, -{68,35,-42}, -{68,35,-41}, -{68,35,-40}, -{68,35,-39}, -{68,35,-38}, -{68,35,-37}, -{68,35,-36}, -{68,35,-35}, -{68,35,-34}, -{68,35,-33}, -{68,35,-32}, -{68,35,-31}, -{68,35,-30}, -{68,35,-29}, -{68,35,-28}, -{68,35,-27}, -{68,35,-26}, -{68,35,-25}, -{68,35,-24}, -{68,35,-23}, -{68,35,-22}, -{68,35,-21}, -{68,35,-20}, -{68,35,-19}, -{68,35,-18}, -{68,35,-17}, -{68,35,-16}, -{68,35,-15}, -{68,35,-14}, -{68,35,-13}, -{68,35,-12}, -{68,35,-11}, -{68,35,-10}, -{68,35,-9}, -{68,35,-8}, -{68,35,-7}, -{68,35,-6}, -{68,35,-5}, -{68,35,-4}, -{68,35,-3}, -{68,35,-2}, -{68,35,-1}, -{68,35,0}, -{68,35,1}, -{68,35,2}, -{68,35,3}, -{68,35,4}, -{68,35,5}, -{68,35,6}, -{68,35,7}, -{68,35,8}, -{68,35,9}, -{68,35,10}, -{68,35,11}, -{68,35,12}, -{68,35,13}, -{68,35,14}, -{68,35,15}, -{68,35,16}, -{68,35,17}, -{68,35,18}, -{68,35,19}, -{68,35,20}, -{68,35,21}, -{68,35,22}, -{68,35,23}, -{68,35,24}, -{68,35,25}, -{68,35,26}, -{68,35,27}, -{68,35,28}, -{68,35,29}, -{68,35,30}, -{68,35,31}, -{68,35,32}, -{68,35,33}, -{68,35,34}, -{68,35,35}, -{68,35,36}, -{68,35,37}, -{68,35,38}, -{68,35,39}, -{68,35,40}, -{68,35,41}, -{68,35,42}, -{68,35,43}, -{68,35,44}, -{68,35,45}, -{68,35,46}, -{68,35,47}, -{68,35,48}, -{68,35,49}, -{68,35,50}, -{68,35,51}, -{68,35,52}, -{68,35,53}, -{68,35,54}, -{68,35,55}, -{68,35,56}, -{68,35,57}, -{68,35,58}, -{68,35,59}, -{68,35,60}, -{68,35,61}, -{68,35,62}, -{68,35,63}, -{68,35,64}, -{68,35,65}, -{68,35,66}, -{68,35,67}, -{68,35,68}, -{68,35,69}, -{68,35,70}, -{68,35,71}, -{68,35,72}, -{68,35,73}, -{68,35,74}, -{68,36,-49}, -{68,36,-48}, -{68,36,-47}, -{68,36,-46}, -{68,36,-45}, -{68,36,-44}, -{68,36,-43}, -{68,36,-42}, -{68,36,-41}, -{68,36,-40}, -{68,36,-39}, -{68,36,-38}, -{68,36,-37}, -{68,36,-36}, -{68,36,-35}, -{68,36,-34}, -{68,36,-33}, -{68,36,-32}, -{68,36,-31}, -{68,36,-30}, -{68,36,-29}, -{68,36,-28}, -{68,36,-27}, -{68,36,-26}, -{68,36,-25}, -{68,36,-24}, -{68,36,-23}, -{68,36,-22}, -{68,36,-21}, -{68,36,-20}, -{68,36,-19}, -{68,36,-18}, -{68,36,-17}, -{68,36,-16}, -{68,36,-15}, -{68,36,-14}, -{68,36,-13}, -{68,36,-12}, -{68,36,-11}, -{68,36,-10}, -{68,36,-9}, -{68,36,-8}, -{68,36,-7}, -{68,36,-6}, -{68,36,-5}, -{68,36,-4}, -{68,36,-3}, -{68,36,-2}, -{68,36,-1}, -{68,36,0}, -{68,36,1}, -{68,36,2}, -{68,36,3}, -{68,36,4}, -{68,36,5}, -{68,36,6}, -{68,36,7}, -{68,36,8}, -{68,36,9}, -{68,36,10}, -{68,36,11}, -{68,36,12}, -{68,36,13}, -{68,36,14}, -{68,36,15}, -{68,36,16}, -{68,36,17}, -{68,36,18}, -{68,36,19}, -{68,36,20}, -{68,36,21}, -{68,36,22}, -{68,36,23}, -{68,36,24}, -{68,36,25}, -{68,36,26}, -{68,36,27}, -{68,36,28}, -{68,36,29}, -{68,36,30}, -{68,36,31}, -{68,36,32}, -{68,36,33}, -{68,36,34}, -{68,36,35}, -{68,36,36}, -{68,36,37}, -{68,36,38}, -{68,36,39}, -{68,36,40}, -{68,36,41}, -{68,36,42}, -{68,36,43}, -{68,36,44}, -{68,36,45}, -{68,36,46}, -{68,36,47}, -{68,36,48}, -{68,36,49}, -{68,36,50}, -{68,36,51}, -{68,36,52}, -{68,36,53}, -{68,36,54}, -{68,36,55}, -{68,36,56}, -{68,36,57}, -{68,36,58}, -{68,36,59}, -{68,36,60}, -{68,36,61}, -{68,36,62}, -{68,36,63}, -{68,36,64}, -{68,36,65}, -{68,36,66}, -{68,36,67}, -{68,36,68}, -{68,36,69}, -{68,36,70}, -{68,36,71}, -{68,36,72}, -{68,36,73}, -{68,36,74}, -{68,37,-49}, -{68,37,-48}, -{68,37,-47}, -{68,37,-46}, -{68,37,-45}, -{68,37,-44}, -{68,37,-43}, -{68,37,-42}, -{68,37,-41}, -{68,37,-40}, -{68,37,-39}, -{68,37,-38}, -{68,37,-37}, -{68,37,-36}, -{68,37,-35}, -{68,37,-34}, -{68,37,-33}, -{68,37,-32}, -{68,37,-31}, -{68,37,-30}, -{68,37,-29}, -{68,37,-28}, -{68,37,-27}, -{68,37,-26}, -{68,37,-25}, -{68,37,-24}, -{68,37,-23}, -{68,37,-22}, -{68,37,-21}, -{68,37,-20}, -{68,37,-19}, -{68,37,-18}, -{68,37,-17}, -{68,37,-16}, -{68,37,-15}, -{68,37,-14}, -{68,37,-13}, -{68,37,-12}, -{68,37,-11}, -{68,37,-10}, -{68,37,-9}, -{68,37,-8}, -{68,37,-7}, -{68,37,-6}, -{68,37,-5}, -{68,37,-4}, -{68,37,-3}, -{68,37,-2}, -{68,37,-1}, -{68,37,0}, -{68,37,1}, -{68,37,2}, -{68,37,3}, -{68,37,4}, -{68,37,5}, -{68,37,6}, -{68,37,7}, -{68,37,8}, -{68,37,9}, -{68,37,10}, -{68,37,11}, -{68,37,12}, -{68,37,13}, -{68,37,14}, -{68,37,15}, -{68,37,16}, -{68,37,17}, -{68,37,18}, -{68,37,19}, -{68,37,20}, -{68,37,21}, -{68,37,22}, -{68,37,23}, -{68,37,24}, -{68,37,25}, -{68,37,26}, -{68,37,27}, -{68,37,28}, -{68,37,29}, -{68,37,30}, -{68,37,31}, -{68,37,32}, -{68,37,33}, -{68,37,34}, -{68,37,35}, -{68,37,36}, -{68,37,37}, -{68,37,38}, -{68,37,39}, -{68,37,40}, -{68,37,41}, -{68,37,42}, -{68,37,43}, -{68,37,44}, -{68,37,45}, -{68,37,46}, -{68,37,47}, -{68,37,48}, -{68,37,49}, -{68,37,50}, -{68,37,51}, -{68,37,52}, -{68,37,53}, -{68,37,54}, -{68,37,55}, -{68,37,56}, -{68,37,57}, -{68,37,58}, -{68,37,59}, -{68,37,60}, -{68,37,61}, -{68,37,62}, -{68,37,63}, -{68,37,64}, -{68,37,65}, -{68,37,66}, -{68,37,67}, -{68,37,68}, -{68,37,69}, -{68,37,70}, -{68,37,71}, -{68,37,72}, -{68,37,73}, -{68,37,74}, -{68,38,-49}, -{68,38,-48}, -{68,38,-47}, -{68,38,-46}, -{68,38,-45}, -{68,38,-44}, -{68,38,-43}, -{68,38,-42}, -{68,38,-41}, -{68,38,-40}, -{68,38,-39}, -{68,38,-38}, -{68,38,-37}, -{68,38,-36}, -{68,38,-35}, -{68,38,-34}, -{68,38,-33}, -{68,38,-32}, -{68,38,-31}, -{68,38,-30}, -{68,38,-29}, -{68,38,-28}, -{68,38,-27}, -{68,38,-26}, -{68,38,-25}, -{68,38,-24}, -{68,38,-23}, -{68,38,-22}, -{68,38,-21}, -{68,38,-20}, -{68,38,-19}, -{68,38,-18}, -{68,38,-17}, -{68,38,-16}, -{68,38,-15}, -{68,38,-14}, -{68,38,-13}, -{68,38,-12}, -{68,38,-11}, -{68,38,-10}, -{68,38,-9}, -{68,38,-8}, -{68,38,-7}, -{68,38,-6}, -{68,38,-5}, -{68,38,-4}, -{68,38,-3}, -{68,38,-2}, -{68,38,-1}, -{68,38,0}, -{68,38,1}, -{68,38,2}, -{68,38,3}, -{68,38,4}, -{68,38,5}, -{68,38,6}, -{68,38,7}, -{68,38,8}, -{68,38,9}, -{68,38,10}, -{68,38,11}, -{68,38,12}, -{68,38,13}, -{68,38,14}, -{68,38,15}, -{68,38,16}, -{68,38,17}, -{68,38,18}, -{68,38,19}, -{68,38,20}, -{68,38,21}, -{68,38,22}, -{68,38,23}, -{68,38,24}, -{68,38,25}, -{68,38,26}, -{68,38,27}, -{68,38,28}, -{68,38,29}, -{68,38,30}, -{68,38,31}, -{68,38,32}, -{68,38,33}, -{68,38,34}, -{68,38,35}, -{68,38,36}, -{68,38,37}, -{68,38,38}, -{68,38,39}, -{68,38,40}, -{68,38,41}, -{68,38,42}, -{68,38,43}, -{68,38,44}, -{68,38,45}, -{68,38,46}, -{68,38,47}, -{68,38,48}, -{68,38,49}, -{68,38,50}, -{68,38,51}, -{68,38,52}, -{68,38,53}, -{68,38,54}, -{68,38,55}, -{68,38,56}, -{68,38,57}, -{68,38,58}, -{68,38,59}, -{68,38,60}, -{68,38,61}, -{68,38,62}, -{68,38,63}, -{68,38,64}, -{68,38,65}, -{68,38,66}, -{68,38,67}, -{68,38,68}, -{68,38,69}, -{68,38,70}, -{68,38,71}, -{68,38,72}, -{68,38,73}, -{68,38,74}, -{68,39,-49}, -{68,39,-48}, -{68,39,-47}, -{68,39,-46}, -{68,39,-45}, -{68,39,-44}, -{68,39,-43}, -{68,39,-42}, -{68,39,-41}, -{68,39,-40}, -{68,39,-39}, -{68,39,-38}, -{68,39,-37}, -{68,39,-36}, -{68,39,-35}, -{68,39,-34}, -{68,39,-33}, -{68,39,-32}, -{68,39,-31}, -{68,39,-30}, -{68,39,-29}, -{68,39,-28}, -{68,39,-27}, -{68,39,-26}, -{68,39,-25}, -{68,39,-24}, -{68,39,-23}, -{68,39,-22}, -{68,39,-21}, -{68,39,-20}, -{68,39,-19}, -{68,39,-18}, -{68,39,-17}, -{68,39,-16}, -{68,39,-15}, -{68,39,-14}, -{68,39,-13}, -{68,39,-12}, -{68,39,-11}, -{68,39,-10}, -{68,39,-9}, -{68,39,-8}, -{68,39,-7}, -{68,39,-6}, -{68,39,-5}, -{68,39,-4}, -{68,39,-3}, -{68,39,-2}, -{68,39,-1}, -{68,39,0}, -{68,39,1}, -{68,39,2}, -{68,39,3}, -{68,39,4}, -{68,39,5}, -{68,39,6}, -{68,39,7}, -{68,39,8}, -{68,39,9}, -{68,39,10}, -{68,39,11}, -{68,39,12}, -{68,39,13}, -{68,39,14}, -{68,39,15}, -{68,39,16}, -{68,39,17}, -{68,39,18}, -{68,39,19}, -{68,39,20}, -{68,39,21}, -{68,39,22}, -{68,39,23}, -{68,39,24}, -{68,39,25}, -{68,39,26}, -{68,39,27}, -{68,39,28}, -{68,39,29}, -{68,39,30}, -{68,39,31}, -{68,39,32}, -{68,39,33}, -{68,39,34}, -{68,39,35}, -{68,39,36}, -{68,39,37}, -{68,39,38}, -{68,39,39}, -{68,39,40}, -{68,39,41}, -{68,39,42}, -{68,39,43}, -{68,39,44}, -{68,39,45}, -{68,39,46}, -{68,39,47}, -{68,39,48}, -{68,39,49}, -{68,39,50}, -{68,39,51}, -{68,39,52}, -{68,39,53}, -{68,39,54}, -{68,39,55}, -{68,39,56}, -{68,39,57}, -{68,39,58}, -{68,39,59}, -{68,39,60}, -{68,39,61}, -{68,39,62}, -{68,39,63}, -{68,39,64}, -{68,39,65}, -{68,39,66}, -{68,39,67}, -{68,39,68}, -{68,39,69}, -{68,39,70}, -{68,39,71}, -{68,39,72}, -{68,39,73}, -{68,39,74}, -{68,40,-49}, -{68,40,-48}, -{68,40,-47}, -{68,40,-46}, -{68,40,-45}, -{68,40,-44}, -{68,40,-43}, -{68,40,-42}, -{68,40,-41}, -{68,40,-40}, -{68,40,-39}, -{68,40,-38}, -{68,40,-37}, -{68,40,-36}, -{68,40,-35}, -{68,40,-34}, -{68,40,-33}, -{68,40,-32}, -{68,40,-31}, -{68,40,-30}, -{68,40,-29}, -{68,40,-28}, -{68,40,-27}, -{68,40,-26}, -{68,40,-25}, -{68,40,-24}, -{68,40,-23}, -{68,40,-22}, -{68,40,-21}, -{68,40,-20}, -{68,40,-19}, -{68,40,-18}, -{68,40,-17}, -{68,40,-16}, -{68,40,-15}, -{68,40,-14}, -{68,40,-13}, -{68,40,-12}, -{68,40,-11}, -{68,40,-10}, -{68,40,-9}, -{68,40,-8}, -{68,40,-7}, -{68,40,-6}, -{68,40,-5}, -{68,40,-4}, -{68,40,-3}, -{68,40,-2}, -{68,40,-1}, -{68,40,0}, -{68,40,1}, -{68,40,2}, -{68,40,3}, -{68,40,4}, -{68,40,5}, -{68,40,6}, -{68,40,7}, -{68,40,8}, -{68,40,9}, -{68,40,10}, -{68,40,11}, -{68,40,12}, -{68,40,13}, -{68,40,14}, -{68,40,15}, -{68,40,16}, -{68,40,17}, -{68,40,18}, -{68,40,19}, -{68,40,20}, -{68,40,21}, -{68,40,22}, -{68,40,23}, -{68,40,24}, -{68,40,25}, -{68,40,26}, -{68,40,27}, -{68,40,28}, -{68,40,29}, -{68,40,30}, -{68,40,31}, -{68,40,32}, -{68,40,33}, -{68,40,34}, -{68,40,35}, -{68,40,36}, -{68,40,37}, -{68,40,38}, -{68,40,39}, -{68,40,40}, -{68,40,41}, -{68,40,42}, -{68,40,43}, -{68,40,44}, -{68,40,45}, -{68,40,46}, -{68,40,47}, -{68,40,48}, -{68,40,49}, -{68,40,50}, -{68,40,51}, -{68,40,52}, -{68,40,53}, -{68,40,54}, -{68,40,55}, -{68,40,56}, -{68,40,57}, -{68,40,58}, -{68,40,59}, -{68,40,60}, -{68,40,61}, -{68,40,62}, -{68,40,63}, -{68,40,64}, -{68,40,65}, -{68,40,66}, -{68,40,67}, -{68,40,68}, -{68,40,69}, -{68,40,70}, -{68,40,71}, -{68,40,72}, -{68,40,73}, -{68,40,74}, -{68,41,-49}, -{68,41,-48}, -{68,41,-47}, -{68,41,-46}, -{68,41,-45}, -{68,41,-44}, -{68,41,-43}, -{68,41,-42}, -{68,41,-41}, -{68,41,-40}, -{68,41,-39}, -{68,41,-38}, -{68,41,-37}, -{68,41,-36}, -{68,41,-35}, -{68,41,-34}, -{68,41,-33}, -{68,41,-32}, -{68,41,-31}, -{68,41,-30}, -{68,41,-29}, -{68,41,-28}, -{68,41,-27}, -{68,41,-26}, -{68,41,-25}, -{68,41,-24}, -{68,41,-23}, -{68,41,-22}, -{68,41,-21}, -{68,41,-20}, -{68,41,-19}, -{68,41,-18}, -{68,41,-17}, -{68,41,-16}, -{68,41,-15}, -{68,41,-14}, -{68,41,-13}, -{68,41,-12}, -{68,41,-11}, -{68,41,-10}, -{68,41,-9}, -{68,41,-8}, -{68,41,-7}, -{68,41,-6}, -{68,41,-5}, -{68,41,-4}, -{68,41,-3}, -{68,41,-2}, -{68,41,-1}, -{68,41,0}, -{68,41,1}, -{68,41,2}, -{68,41,3}, -{68,41,4}, -{68,41,5}, -{68,41,6}, -{68,41,7}, -{68,41,8}, -{68,41,9}, -{68,41,10}, -{68,41,11}, -{68,41,12}, -{68,41,13}, -{68,41,14}, -{68,41,15}, -{68,41,16}, -{68,41,17}, -{68,41,18}, -{68,41,19}, -{68,41,20}, -{68,41,21}, -{68,41,22}, -{68,41,23}, -{68,41,24}, -{68,41,25}, -{68,41,26}, -{68,41,27}, -{68,41,28}, -{68,41,29}, -{68,41,30}, -{68,41,31}, -{68,41,32}, -{68,41,33}, -{68,41,34}, -{68,41,35}, -{68,41,36}, -{68,41,37}, -{68,41,38}, -{68,41,39}, -{68,41,40}, -{68,41,41}, -{68,41,42}, -{68,41,43}, -{68,41,44}, -{68,41,45}, -{68,41,46}, -{68,41,47}, -{68,41,48}, -{68,41,49}, -{68,41,50}, -{68,41,51}, -{68,41,52}, -{68,41,53}, -{68,41,54}, -{68,41,55}, -{68,41,56}, -{68,41,57}, -{68,41,58}, -{68,41,59}, -{68,41,60}, -{68,41,61}, -{68,41,62}, -{68,41,63}, -{68,41,64}, -{68,41,65}, -{68,41,66}, -{68,41,67}, -{68,41,68}, -{68,41,69}, -{68,41,70}, -{68,42,-49}, -{68,42,-48}, -{68,42,-47}, -{68,42,-46}, -{68,42,-45}, -{68,42,-44}, -{68,42,-43}, -{68,42,-42}, -{68,42,-41}, -{68,42,-40}, -{68,42,-39}, -{68,42,-38}, -{68,42,-37}, -{68,42,-36}, -{68,42,-35}, -{68,42,-34}, -{68,42,-33}, -{68,42,-32}, -{68,42,-31}, -{68,42,-30}, -{68,42,-29}, -{68,42,-28}, -{68,42,-27}, -{68,42,-26}, -{68,42,-25}, -{68,42,-24}, -{68,42,-23}, -{68,42,-22}, -{68,42,-21}, -{68,42,-20}, -{68,42,-19}, -{68,42,-18}, -{68,42,-17}, -{68,42,-16}, -{68,42,-15}, -{68,42,-14}, -{68,42,-13}, -{68,42,-12}, -{68,42,-11}, -{68,42,-10}, -{68,42,-9}, -{68,42,-8}, -{68,42,-7}, -{68,42,-6}, -{68,42,-5}, -{68,42,-4}, -{68,42,-3}, -{68,42,-2}, -{68,42,-1}, -{68,42,0}, -{68,42,1}, -{68,42,2}, -{68,42,3}, -{68,42,4}, -{68,42,5}, -{68,42,6}, -{68,42,7}, -{68,42,8}, -{68,42,9}, -{68,42,10}, -{68,42,11}, -{68,42,12}, -{68,42,13}, -{68,42,14}, -{68,42,15}, -{68,42,16}, -{68,42,17}, -{68,42,18}, -{68,42,19}, -{68,42,20}, -{68,42,21}, -{68,42,22}, -{68,42,23}, -{68,42,24}, -{68,42,25}, -{68,42,26}, -{68,42,27}, -{68,42,28}, -{68,42,29}, -{68,42,30}, -{68,42,31}, -{68,42,32}, -{68,42,33}, -{68,42,34}, -{68,42,35}, -{68,42,36}, -{68,42,37}, -{68,42,38}, -{68,42,39}, -{68,42,40}, -{68,42,41}, -{68,42,42}, -{68,42,43}, -{68,42,44}, -{68,42,45}, -{68,42,46}, -{68,42,47}, -{68,42,48}, -{68,42,49}, -{68,42,50}, -{68,42,51}, -{68,42,52}, -{68,42,53}, -{68,42,54}, -{68,42,55}, -{68,42,56}, -{68,42,57}, -{68,42,58}, -{68,42,59}, -{68,42,60}, -{68,42,61}, -{68,43,-49}, -{68,43,-48}, -{68,43,-47}, -{68,43,-46}, -{68,43,-45}, -{68,43,-44}, -{68,43,-43}, -{68,43,-42}, -{68,43,-41}, -{68,43,-40}, -{68,43,-39}, -{68,43,-38}, -{68,43,-37}, -{68,43,-36}, -{68,43,-35}, -{68,43,-34}, -{68,43,-33}, -{68,43,-32}, -{68,43,-31}, -{68,43,-30}, -{68,43,-29}, -{68,43,-28}, -{68,43,-27}, -{68,43,-26}, -{68,43,-25}, -{68,43,-24}, -{68,43,-23}, -{68,43,-22}, -{68,43,-21}, -{68,43,-20}, -{68,43,-19}, -{68,43,-18}, -{68,43,-17}, -{68,43,-16}, -{68,43,-15}, -{68,43,-14}, -{68,43,-13}, -{68,43,-12}, -{68,43,-11}, -{68,43,-10}, -{68,43,-9}, -{68,43,-8}, -{68,43,-7}, -{68,43,-6}, -{68,43,-5}, -{68,43,-4}, -{68,43,-3}, -{68,43,-2}, -{68,43,-1}, -{68,43,0}, -{68,43,1}, -{68,43,2}, -{68,43,3}, -{68,43,4}, -{68,43,5}, -{68,43,6}, -{68,43,7}, -{68,43,8}, -{68,43,9}, -{68,43,10}, -{68,43,11}, -{68,43,12}, -{68,43,13}, -{68,43,14}, -{68,43,15}, -{68,43,16}, -{68,43,17}, -{68,43,18}, -{68,43,19}, -{68,43,20}, -{68,43,21}, -{68,43,22}, -{68,43,23}, -{68,43,24}, -{68,43,25}, -{68,43,26}, -{68,43,27}, -{68,43,28}, -{68,43,29}, -{68,43,30}, -{68,43,31}, -{68,43,32}, -{68,43,33}, -{68,43,34}, -{68,43,35}, -{68,43,36}, -{68,43,37}, -{68,43,38}, -{68,43,39}, -{68,43,40}, -{68,43,41}, -{68,43,42}, -{68,43,43}, -{68,43,44}, -{68,43,45}, -{68,43,46}, -{68,43,47}, -{68,43,48}, -{68,43,49}, -{68,43,50}, -{68,43,51}, -{68,43,52}, -{68,43,53}, -{68,44,-49}, -{68,44,-48}, -{68,44,-47}, -{68,44,-46}, -{68,44,-45}, -{68,44,-44}, -{68,44,-43}, -{68,44,-42}, -{68,44,-41}, -{68,44,-40}, -{68,44,-39}, -{68,44,-38}, -{68,44,-37}, -{68,44,-36}, -{68,44,-35}, -{68,44,-34}, -{68,44,-33}, -{68,44,-32}, -{68,44,-31}, -{68,44,-30}, -{68,44,-29}, -{68,44,-28}, -{68,44,-27}, -{68,44,-26}, -{68,44,-25}, -{68,44,-24}, -{68,44,-23}, -{68,44,-22}, -{68,44,-21}, -{68,44,-20}, -{68,44,-19}, -{68,44,-18}, -{68,44,-17}, -{68,44,-16}, -{68,44,-15}, -{68,44,-14}, -{68,44,-13}, -{68,44,-12}, -{68,44,-11}, -{68,44,-10}, -{68,44,-9}, -{68,44,-8}, -{68,44,-7}, -{68,44,-6}, -{68,44,-5}, -{68,44,-4}, -{68,44,-3}, -{68,44,-2}, -{68,44,-1}, -{68,44,0}, -{68,44,1}, -{68,44,2}, -{68,44,3}, -{68,44,4}, -{68,44,5}, -{68,44,6}, -{68,44,7}, -{68,44,8}, -{68,44,9}, -{68,44,10}, -{68,44,11}, -{68,44,12}, -{68,44,13}, -{68,44,14}, -{68,44,15}, -{68,44,16}, -{68,44,17}, -{68,44,18}, -{68,44,19}, -{68,44,20}, -{68,44,21}, -{68,44,22}, -{68,44,23}, -{68,44,24}, -{68,44,25}, -{68,44,26}, -{68,44,27}, -{68,44,28}, -{68,44,29}, -{68,44,30}, -{68,44,31}, -{68,44,32}, -{68,44,33}, -{68,44,34}, -{68,44,35}, -{68,44,36}, -{68,44,37}, -{68,44,38}, -{68,44,39}, -{68,44,40}, -{68,44,41}, -{68,44,42}, -{68,44,43}, -{68,44,44}, -{68,44,45}, -{68,44,46}, -{68,45,-49}, -{68,45,-48}, -{68,45,-47}, -{68,45,-46}, -{68,45,-45}, -{68,45,-44}, -{68,45,-43}, -{68,45,-42}, -{68,45,-41}, -{68,45,-40}, -{68,45,-39}, -{68,45,-38}, -{68,45,-37}, -{68,45,-36}, -{68,45,-35}, -{68,45,-34}, -{68,45,-33}, -{68,45,-32}, -{68,45,-31}, -{68,45,-30}, -{68,45,-29}, -{68,45,-28}, -{68,45,-27}, -{68,45,-26}, -{68,45,-25}, -{68,45,-24}, -{68,45,-23}, -{68,45,-22}, -{68,45,-21}, -{68,45,-20}, -{68,45,-19}, -{68,45,-18}, -{68,45,-17}, -{68,45,-16}, -{68,45,-15}, -{68,45,-14}, -{68,45,-13}, -{68,45,-12}, -{68,45,-11}, -{68,45,-10}, -{68,45,-9}, -{68,45,-8}, -{68,45,-7}, -{68,45,-6}, -{68,45,-5}, -{68,45,-4}, -{68,45,-3}, -{68,45,-2}, -{68,45,-1}, -{68,45,0}, -{68,45,1}, -{68,45,2}, -{68,45,3}, -{68,45,4}, -{68,45,5}, -{68,45,6}, -{68,45,7}, -{68,45,8}, -{68,45,9}, -{68,45,10}, -{68,45,11}, -{68,45,12}, -{68,45,13}, -{68,45,14}, -{68,45,15}, -{68,45,16}, -{68,45,17}, -{68,45,18}, -{68,45,19}, -{68,45,20}, -{68,45,21}, -{68,45,22}, -{68,45,23}, -{68,45,24}, -{68,45,25}, -{68,45,26}, -{68,45,27}, -{68,45,28}, -{68,45,29}, -{68,45,30}, -{68,45,31}, -{68,45,32}, -{68,45,33}, -{68,45,34}, -{68,45,35}, -{68,45,36}, -{68,45,37}, -{68,45,38}, -{68,45,39}, -{68,45,40}, -{68,45,41}, -{68,46,-49}, -{68,46,-48}, -{68,46,-47}, -{68,46,-46}, -{68,46,-45}, -{68,46,-44}, -{68,46,-43}, -{68,46,-42}, -{68,46,-41}, -{68,46,-40}, -{68,46,-39}, -{68,46,-38}, -{68,46,-37}, -{68,46,-36}, -{68,46,-35}, -{68,46,-34}, -{68,46,-33}, -{68,46,-32}, -{68,46,-31}, -{68,46,-30}, -{68,46,-29}, -{68,46,-28}, -{68,46,-27}, -{68,46,-26}, -{68,46,-25}, -{68,46,-24}, -{68,46,-23}, -{68,46,-22}, -{68,46,-21}, -{68,46,-20}, -{68,46,-19}, -{68,46,-18}, -{68,46,-17}, -{68,46,-16}, -{68,46,-15}, -{68,46,-14}, -{68,46,-13}, -{68,46,-12}, -{68,46,-11}, -{68,46,-10}, -{68,46,-9}, -{68,46,-8}, -{68,46,-7}, -{68,46,-6}, -{68,46,-5}, -{68,46,-4}, -{68,46,-3}, -{68,46,-2}, -{68,46,-1}, -{68,46,0}, -{68,46,1}, -{68,46,2}, -{68,46,3}, -{68,46,4}, -{68,46,5}, -{68,46,6}, -{68,46,7}, -{68,46,8}, -{68,46,9}, -{68,46,10}, -{68,46,11}, -{68,46,12}, -{68,46,13}, -{68,46,14}, -{68,46,15}, -{68,46,16}, -{68,46,17}, -{68,46,18}, -{68,46,19}, -{68,46,20}, -{68,46,21}, -{68,46,22}, -{68,46,23}, -{68,46,24}, -{68,46,25}, -{68,46,26}, -{68,46,27}, -{68,46,28}, -{68,46,29}, -{68,46,30}, -{68,46,31}, -{68,46,32}, -{68,46,33}, -{68,46,34}, -{68,46,35}, -{68,47,-49}, -{68,47,-48}, -{68,47,-47}, -{68,47,-46}, -{68,47,-45}, -{68,47,-44}, -{68,47,-43}, -{68,47,-42}, -{68,47,-41}, -{68,47,-40}, -{68,47,-39}, -{68,47,-38}, -{68,47,-37}, -{68,47,-36}, -{68,47,-35}, -{68,47,-34}, -{68,47,-33}, -{68,47,-32}, -{68,47,-31}, -{68,47,-30}, -{68,47,-29}, -{68,47,-28}, -{68,47,-27}, -{68,47,-26}, -{68,47,-25}, -{68,47,-24}, -{68,47,-23}, -{68,47,-22}, -{68,47,-21}, -{68,47,-20}, -{68,47,-19}, -{68,47,-18}, -{68,47,-17}, -{68,47,-16}, -{68,47,-15}, -{68,47,-14}, -{68,47,-13}, -{68,47,-12}, -{68,47,-11}, -{68,47,-10}, -{68,47,-9}, -{68,47,-8}, -{68,47,-7}, -{68,47,-6}, -{68,47,-5}, -{68,47,-4}, -{68,47,-3}, -{68,47,-2}, -{68,47,-1}, -{68,47,0}, -{68,47,1}, -{68,47,2}, -{68,47,3}, -{68,47,4}, -{68,47,5}, -{68,47,6}, -{68,47,7}, -{68,47,8}, -{68,47,9}, -{68,47,10}, -{68,47,11}, -{68,47,12}, -{68,47,13}, -{68,47,14}, -{68,47,15}, -{68,47,16}, -{68,47,17}, -{68,47,18}, -{68,47,19}, -{68,47,20}, -{68,47,21}, -{68,47,22}, -{68,47,23}, -{68,47,24}, -{68,47,25}, -{68,47,26}, -{68,47,27}, -{68,47,28}, -{68,47,29}, -{68,47,30}, -{68,48,-49}, -{68,48,-48}, -{68,48,-47}, -{68,48,-46}, -{68,48,-45}, -{68,48,-44}, -{68,48,-43}, -{68,48,-42}, -{68,48,-41}, -{68,48,-40}, -{68,48,-39}, -{68,48,-38}, -{68,48,-37}, -{68,48,-36}, -{68,48,-35}, -{68,48,-34}, -{68,48,-33}, -{68,48,-32}, -{68,48,-31}, -{68,48,-30}, -{68,48,-29}, -{68,48,-28}, -{68,48,-27}, -{68,48,-26}, -{68,48,-25}, -{68,48,-24}, -{68,48,-23}, -{68,48,-22}, -{68,48,-21}, -{68,48,-20}, -{68,48,-19}, -{68,48,-18}, -{68,48,-17}, -{68,48,-16}, -{68,48,-15}, -{68,48,-14}, -{68,48,-13}, -{68,48,-12}, -{68,48,-11}, -{68,48,-10}, -{68,48,-9}, -{68,48,-8}, -{68,48,-7}, -{68,48,-6}, -{68,48,-5}, -{68,48,-4}, -{68,48,-3}, -{68,48,-2}, -{68,48,-1}, -{68,48,0}, -{68,48,1}, -{68,48,2}, -{68,48,3}, -{68,48,4}, -{68,48,5}, -{68,48,6}, -{68,48,7}, -{68,48,8}, -{68,48,9}, -{68,48,10}, -{68,48,11}, -{68,48,12}, -{68,48,13}, -{68,48,14}, -{68,48,15}, -{68,48,16}, -{68,48,17}, -{68,48,18}, -{68,48,19}, -{68,48,20}, -{68,48,21}, -{68,48,22}, -{68,48,23}, -{68,48,24}, -{68,48,25}, -{68,48,26}, -{68,49,-49}, -{68,49,-48}, -{68,49,-47}, -{68,49,-46}, -{68,49,-45}, -{68,49,-44}, -{68,49,-43}, -{68,49,-42}, -{68,49,-41}, -{68,49,-40}, -{68,49,-39}, -{68,49,-38}, -{68,49,-37}, -{68,49,-36}, -{68,49,-35}, -{68,49,-34}, -{68,49,-33}, -{68,49,-32}, -{68,49,-31}, -{68,49,-30}, -{68,49,-29}, -{68,49,-28}, -{68,49,-27}, -{68,49,-26}, -{68,49,-25}, -{68,49,-24}, -{68,49,-23}, -{68,49,-22}, -{68,49,-21}, -{68,49,-20}, -{68,49,-19}, -{68,49,-18}, -{68,49,-17}, -{68,49,-16}, -{68,49,-15}, -{68,49,-14}, -{68,49,-13}, -{68,49,-12}, -{68,49,-11}, -{68,49,-10}, -{68,49,-9}, -{68,49,-8}, -{68,49,-7}, -{68,49,-6}, -{68,49,-5}, -{68,49,-4}, -{68,49,-3}, -{68,49,-2}, -{68,49,-1}, -{68,49,0}, -{68,49,1}, -{68,49,2}, -{68,49,3}, -{68,49,4}, -{68,49,5}, -{68,49,6}, -{68,49,7}, -{68,49,8}, -{68,49,9}, -{68,49,10}, -{68,49,11}, -{68,49,12}, -{68,49,13}, -{68,49,14}, -{68,49,15}, -{68,49,16}, -{68,49,17}, -{68,49,18}, -{68,49,19}, -{68,49,20}, -{68,49,21}, -{68,49,22}, -{68,50,-49}, -{68,50,-48}, -{68,50,-47}, -{68,50,-46}, -{68,50,-45}, -{68,50,-44}, -{68,50,-43}, -{68,50,-42}, -{68,50,-41}, -{68,50,-40}, -{68,50,-39}, -{68,50,-38}, -{68,50,-37}, -{68,50,-36}, -{68,50,-35}, -{68,50,-34}, -{68,50,-33}, -{68,50,-32}, -{68,50,-31}, -{68,50,-30}, -{68,50,-29}, -{68,50,-28}, -{68,50,-27}, -{68,50,-26}, -{68,50,-25}, -{68,50,-24}, -{68,50,-23}, -{68,50,-22}, -{68,50,-21}, -{68,50,-20}, -{68,50,-19}, -{68,50,-18}, -{68,50,-17}, -{68,50,-16}, -{68,50,-15}, -{68,50,-14}, -{68,50,-13}, -{68,50,-12}, -{68,50,-11}, -{68,50,-10}, -{68,50,-9}, -{68,50,-8}, -{68,50,-7}, -{68,50,-6}, -{68,50,-5}, -{68,50,-4}, -{68,50,-3}, -{68,50,-2}, -{68,50,-1}, -{68,50,0}, -{68,50,1}, -{68,50,2}, -{68,50,3}, -{68,50,4}, -{68,50,5}, -{68,50,6}, -{68,50,7}, -{68,50,8}, -{68,50,9}, -{68,50,10}, -{68,50,11}, -{68,50,12}, -{68,50,13}, -{68,50,14}, -{68,50,15}, -{68,50,16}, -{68,50,17}, -{68,50,18}, -{68,51,-49}, -{68,51,-48}, -{68,51,-47}, -{68,51,-46}, -{68,51,-45}, -{68,51,-44}, -{68,51,-43}, -{68,51,-42}, -{68,51,-41}, -{68,51,-40}, -{68,51,-39}, -{68,51,-38}, -{68,51,-37}, -{68,51,-36}, -{68,51,-35}, -{68,51,-34}, -{68,51,-33}, -{68,51,-32}, -{68,51,-31}, -{68,51,-30}, -{68,51,-29}, -{68,51,-28}, -{68,51,-27}, -{68,51,-26}, -{68,51,-25}, -{68,51,-24}, -{68,51,-23}, -{68,51,-22}, -{68,51,-21}, -{68,51,-20}, -{68,51,-19}, -{68,51,-18}, -{68,51,-17}, -{68,51,-16}, -{68,51,-15}, -{68,51,-14}, -{68,51,-13}, -{68,51,-12}, -{68,51,-11}, -{68,51,-10}, -{68,51,-9}, -{68,51,-8}, -{68,51,-7}, -{68,51,-6}, -{68,51,-5}, -{68,51,-4}, -{68,51,-3}, -{68,51,-2}, -{68,51,-1}, -{68,51,0}, -{68,51,1}, -{68,51,2}, -{68,51,3}, -{68,51,4}, -{68,51,5}, -{68,51,6}, -{68,51,7}, -{68,51,8}, -{68,51,9}, -{68,51,10}, -{68,51,11}, -{68,51,12}, -{68,51,13}, -{68,51,14}, -{68,52,-49}, -{68,52,-48}, -{68,52,-47}, -{68,52,-46}, -{68,52,-45}, -{68,52,-44}, -{68,52,-43}, -{68,52,-42}, -{68,52,-41}, -{68,52,-40}, -{68,52,-39}, -{68,52,-38}, -{68,52,-37}, -{68,52,-36}, -{68,52,-35}, -{68,52,-34}, -{68,52,-33}, -{68,52,-32}, -{68,52,-31}, -{68,52,-30}, -{68,52,-29}, -{68,52,-28}, -{68,52,-27}, -{68,52,-26}, -{68,52,-25}, -{68,52,-24}, -{68,52,-23}, -{68,52,-22}, -{68,52,-21}, -{68,52,-20}, -{68,52,-19}, -{68,52,-18}, -{68,52,-17}, -{68,52,-16}, -{68,52,-15}, -{68,52,-14}, -{68,52,-13}, -{68,52,-12}, -{68,52,-11}, -{68,52,-10}, -{68,52,-9}, -{68,52,-8}, -{68,52,-7}, -{68,52,-6}, -{68,52,-5}, -{68,52,-4}, -{68,52,-3}, -{68,52,-2}, -{68,52,-1}, -{68,52,0}, -{68,52,1}, -{68,52,2}, -{68,52,3}, -{68,52,4}, -{68,52,5}, -{68,52,6}, -{68,52,7}, -{68,52,8}, -{68,52,9}, -{68,52,10}, -{68,53,-49}, -{68,53,-48}, -{68,53,-47}, -{68,53,-46}, -{68,53,-45}, -{68,53,-44}, -{68,53,-43}, -{68,53,-42}, -{68,53,-41}, -{68,53,-40}, -{68,53,-39}, -{68,53,-38}, -{68,53,-37}, -{68,53,-36}, -{68,53,-35}, -{68,53,-34}, -{68,53,-33}, -{68,53,-32}, -{68,53,-31}, -{68,53,-30}, -{68,53,-29}, -{68,53,-28}, -{68,53,-27}, -{68,53,-26}, -{68,53,-25}, -{68,53,-24}, -{68,53,-23}, -{68,53,-22}, -{68,53,-21}, -{68,53,-20}, -{68,53,-19}, -{68,53,-18}, -{68,53,-17}, -{68,53,-16}, -{68,53,-15}, -{68,53,-14}, -{68,53,-13}, -{68,53,-12}, -{68,53,-11}, -{68,53,-10}, -{68,53,-9}, -{68,53,-8}, -{68,53,-7}, -{68,53,-6}, -{68,53,-5}, -{68,53,-4}, -{68,53,-3}, -{68,53,-2}, -{68,53,-1}, -{68,53,0}, -{68,53,1}, -{68,53,2}, -{68,53,3}, -{68,53,4}, -{68,53,5}, -{68,53,6}, -{68,53,7}, -{68,54,-49}, -{68,54,-48}, -{68,54,-47}, -{68,54,-46}, -{68,54,-45}, -{68,54,-44}, -{68,54,-43}, -{68,54,-42}, -{68,54,-41}, -{68,54,-40}, -{68,54,-39}, -{68,54,-38}, -{68,54,-37}, -{68,54,-36}, -{68,54,-35}, -{68,54,-34}, -{68,54,-33}, -{68,54,-32}, -{68,54,-31}, -{68,54,-30}, -{68,54,-29}, -{68,54,-28}, -{68,54,-27}, -{68,54,-26}, -{68,54,-25}, -{68,54,-24}, -{68,54,-23}, -{68,54,-22}, -{68,54,-21}, -{68,54,-20}, -{68,54,-19}, -{68,54,-18}, -{68,54,-17}, -{68,54,-16}, -{68,54,-15}, -{68,54,-14}, -{68,54,-13}, -{68,54,-12}, -{68,54,-11}, -{68,54,-10}, -{68,54,-9}, -{68,54,-8}, -{68,54,-7}, -{68,54,-6}, -{68,54,-5}, -{68,54,-4}, -{68,54,-3}, -{68,54,-2}, -{68,54,-1}, -{68,54,0}, -{68,54,1}, -{68,54,2}, -{68,54,3}, -{68,54,4}, -{68,55,-49}, -{68,55,-48}, -{68,55,-47}, -{68,55,-46}, -{68,55,-45}, -{68,55,-44}, -{68,55,-43}, -{68,55,-42}, -{68,55,-41}, -{68,55,-40}, -{68,55,-39}, -{68,55,-38}, -{68,55,-37}, -{68,55,-36}, -{68,55,-35}, -{68,55,-34}, -{68,55,-33}, -{68,55,-32}, -{68,55,-31}, -{68,55,-30}, -{68,55,-29}, -{68,55,-28}, -{68,55,-27}, -{68,55,-26}, -{68,55,-25}, -{68,55,-24}, -{68,55,-23}, -{68,55,-22}, -{68,55,-21}, -{68,55,-20}, -{68,55,-19}, -{68,55,-18}, -{68,55,-17}, -{68,55,-16}, -{68,55,-15}, -{68,55,-14}, -{68,55,-13}, -{68,55,-12}, -{68,55,-11}, -{68,55,-10}, -{68,55,-9}, -{68,55,-8}, -{68,55,-7}, -{68,55,-6}, -{68,55,-5}, -{68,55,-4}, -{68,55,-3}, -{68,55,-2}, -{68,55,-1}, -{68,55,0}, -{68,55,1}, -{68,56,-49}, -{68,56,-48}, -{68,56,-47}, -{68,56,-46}, -{68,56,-45}, -{68,56,-44}, -{68,56,-43}, -{68,56,-42}, -{68,56,-41}, -{68,56,-40}, -{68,56,-39}, -{68,56,-38}, -{68,56,-37}, -{68,56,-36}, -{68,56,-35}, -{68,56,-34}, -{68,56,-33}, -{68,56,-32}, -{68,56,-31}, -{68,56,-30}, -{68,56,-29}, -{68,56,-28}, -{68,56,-27}, -{68,56,-26}, -{68,56,-25}, -{68,56,-24}, -{68,56,-23}, -{68,56,-22}, -{68,56,-21}, -{68,56,-20}, -{68,56,-19}, -{68,56,-18}, -{68,56,-17}, -{68,56,-16}, -{68,56,-15}, -{68,56,-14}, -{68,56,-13}, -{68,56,-12}, -{68,56,-11}, -{68,56,-10}, -{68,56,-9}, -{68,56,-8}, -{68,56,-7}, -{68,56,-6}, -{68,56,-5}, -{68,56,-4}, -{68,56,-3}, -{68,56,-2}, -{68,57,-49}, -{68,57,-48}, -{68,57,-47}, -{68,57,-46}, -{68,57,-45}, -{68,57,-44}, -{68,57,-43}, -{68,57,-42}, -{68,57,-41}, -{68,57,-40}, -{68,57,-39}, -{68,57,-38}, -{68,57,-37}, -{68,57,-36}, -{68,57,-35}, -{68,57,-34}, -{68,57,-33}, -{68,57,-32}, -{68,57,-31}, -{68,57,-30}, -{68,57,-29}, -{68,57,-28}, -{68,57,-27}, -{68,57,-26}, -{68,57,-25}, -{68,57,-24}, -{68,57,-23}, -{68,57,-22}, -{68,57,-21}, -{68,57,-20}, -{68,57,-19}, -{68,57,-18}, -{68,57,-17}, -{68,57,-16}, -{68,57,-15}, -{68,57,-14}, -{68,57,-13}, -{68,57,-12}, -{68,57,-11}, -{68,57,-10}, -{68,57,-9}, -{68,57,-8}, -{68,57,-7}, -{68,57,-6}, -{68,57,-5}, -{68,58,-49}, -{68,58,-48}, -{68,58,-47}, -{68,58,-46}, -{68,58,-45}, -{68,58,-44}, -{68,58,-43}, -{68,58,-42}, -{68,58,-41}, -{68,58,-40}, -{68,58,-39}, -{68,58,-38}, -{68,58,-37}, -{68,58,-36}, -{68,58,-35}, -{68,58,-34}, -{68,58,-33}, -{68,58,-32}, -{68,58,-31}, -{68,58,-30}, -{68,58,-29}, -{68,58,-28}, -{68,58,-27}, -{68,58,-26}, -{68,58,-25}, -{68,58,-24}, -{68,58,-23}, -{68,58,-22}, -{68,58,-21}, -{68,58,-20}, -{68,58,-19}, -{68,58,-18}, -{68,58,-17}, -{68,58,-16}, -{68,58,-15}, -{68,58,-14}, -{68,58,-13}, -{68,58,-12}, -{68,58,-11}, -{68,58,-10}, -{68,58,-9}, -{68,58,-8}, -{68,59,-49}, -{68,59,-48}, -{68,59,-47}, -{68,59,-46}, -{68,59,-45}, -{68,59,-44}, -{68,59,-43}, -{68,59,-42}, -{68,59,-41}, -{68,59,-40}, -{68,59,-39}, -{68,59,-38}, -{68,59,-37}, -{68,59,-36}, -{68,59,-35}, -{68,59,-34}, -{68,59,-33}, -{68,59,-32}, -{68,59,-31}, -{68,59,-30}, -{68,59,-29}, -{68,59,-28}, -{68,59,-27}, -{68,59,-26}, -{68,59,-25}, -{68,59,-24}, -{68,59,-23}, -{68,59,-22}, -{68,59,-21}, -{68,59,-20}, -{68,59,-19}, -{68,59,-18}, -{68,59,-17}, -{68,59,-16}, -{68,59,-15}, -{68,59,-14}, -{68,59,-13}, -{68,59,-12}, -{68,59,-11}, -{68,60,-49}, -{68,60,-48}, -{68,60,-47}, -{68,60,-46}, -{68,60,-45}, -{68,60,-44}, -{68,60,-43}, -{68,60,-42}, -{68,60,-41}, -{68,60,-40}, -{68,60,-39}, -{68,60,-38}, -{68,60,-37}, -{68,60,-36}, -{68,60,-35}, -{68,60,-34}, -{68,60,-33}, -{68,60,-32}, -{68,60,-31}, -{68,60,-30}, -{68,60,-29}, -{68,60,-28}, -{68,60,-27}, -{68,60,-26}, -{68,60,-25}, -{68,60,-24}, -{68,60,-23}, -{68,60,-22}, -{68,60,-21}, -{68,60,-20}, -{68,60,-19}, -{68,60,-18}, -{68,60,-17}, -{68,60,-16}, -{68,60,-15}, -{68,60,-14}, -{68,60,-13}, -{68,61,-49}, -{68,61,-48}, -{68,61,-47}, -{68,61,-46}, -{68,61,-45}, -{68,61,-44}, -{68,61,-43}, -{68,61,-42}, -{68,61,-41}, -{68,61,-40}, -{68,61,-39}, -{68,61,-38}, -{68,61,-37}, -{68,61,-36}, -{68,61,-35}, -{68,61,-34}, -{68,61,-33}, -{68,61,-32}, -{68,61,-31}, -{68,61,-30}, -{68,61,-29}, -{68,61,-28}, -{68,61,-27}, -{68,61,-26}, -{68,61,-25}, -{68,61,-24}, -{68,61,-23}, -{68,61,-22}, -{68,61,-21}, -{68,61,-20}, -{68,61,-19}, -{68,61,-18}, -{68,61,-17}, -{68,61,-16}, -{68,62,-49}, -{68,62,-48}, -{68,62,-47}, -{68,62,-46}, -{68,62,-45}, -{68,62,-44}, -{68,62,-43}, -{68,62,-42}, -{68,62,-41}, -{68,62,-40}, -{68,62,-39}, -{68,62,-38}, -{68,62,-37}, -{68,62,-36}, -{68,62,-35}, -{68,62,-34}, -{68,62,-33}, -{68,62,-32}, -{68,62,-31}, -{68,62,-30}, -{68,62,-29}, -{68,62,-28}, -{68,62,-27}, -{68,62,-26}, -{68,62,-25}, -{68,62,-24}, -{68,62,-23}, -{68,62,-22}, -{68,62,-21}, -{68,62,-20}, -{68,62,-19}, -{68,62,-18}, -{68,63,-48}, -{68,63,-47}, -{68,63,-46}, -{68,63,-45}, -{68,63,-44}, -{68,63,-43}, -{68,63,-42}, -{68,63,-41}, -{68,63,-40}, -{68,63,-39}, -{68,63,-38}, -{68,63,-37}, -{68,63,-36}, -{68,63,-35}, -{68,63,-34}, -{68,63,-33}, -{68,63,-32}, -{68,63,-31}, -{68,63,-30}, -{68,63,-29}, -{68,63,-28}, -{68,63,-27}, -{68,63,-26}, -{68,63,-25}, -{68,63,-24}, -{68,63,-23}, -{68,63,-22}, -{68,63,-21}, -{68,64,-48}, -{68,64,-47}, -{68,64,-46}, -{68,64,-45}, -{68,64,-44}, -{68,64,-43}, -{68,64,-42}, -{68,64,-41}, -{68,64,-40}, -{68,64,-39}, -{68,64,-38}, -{68,64,-37}, -{68,64,-36}, -{68,64,-35}, -{68,64,-34}, -{68,64,-33}, -{68,64,-32}, -{68,64,-31}, -{68,64,-30}, -{68,64,-29}, -{68,64,-28}, -{68,64,-27}, -{68,64,-26}, -{68,64,-25}, -{68,64,-24}, -{68,64,-23}, -{68,65,-48}, -{68,65,-47}, -{68,65,-46}, -{68,65,-45}, -{68,65,-44}, -{68,65,-43}, -{68,65,-42}, -{68,65,-41}, -{68,65,-40}, -{68,65,-39}, -{68,65,-38}, -{68,65,-37}, -{68,65,-36}, -{68,65,-35}, -{68,65,-34}, -{68,65,-33}, -{68,65,-32}, -{68,65,-31}, -{68,65,-30}, -{68,65,-29}, -{68,65,-28}, -{68,65,-27}, -{68,65,-26}, -{68,66,-48}, -{68,66,-47}, -{68,66,-46}, -{68,66,-45}, -{68,66,-44}, -{68,66,-43}, -{68,66,-42}, -{68,66,-41}, -{68,66,-40}, -{68,66,-39}, -{68,66,-38}, -{68,66,-37}, -{68,66,-36}, -{68,66,-35}, -{68,66,-34}, -{68,66,-33}, -{68,66,-32}, -{68,66,-31}, -{68,66,-30}, -{68,66,-29}, -{68,66,-28}, -{68,67,-48}, -{68,67,-47}, -{68,67,-46}, -{68,67,-45}, -{68,67,-44}, -{68,67,-43}, -{68,67,-42}, -{68,67,-41}, -{68,67,-40}, -{68,67,-39}, -{68,67,-38}, -{68,67,-37}, -{68,67,-36}, -{68,67,-35}, -{68,67,-34}, -{68,67,-33}, -{68,67,-32}, -{68,67,-31}, -{68,67,-30}, -{68,68,-48}, -{68,68,-47}, -{68,68,-46}, -{68,68,-45}, -{68,68,-44}, -{68,68,-43}, -{68,68,-42}, -{68,68,-41}, -{68,68,-40}, -{68,68,-39}, -{68,68,-38}, -{68,68,-37}, -{68,68,-36}, -{68,68,-35}, -{68,68,-34}, -{68,68,-33}, -{68,68,-32}, -{68,69,-48}, -{68,69,-47}, -{68,69,-46}, -{68,69,-45}, -{68,69,-44}, -{68,69,-43}, -{68,69,-42}, -{68,69,-41}, -{68,69,-40}, -{68,69,-39}, -{68,69,-38}, -{68,69,-37}, -{68,69,-36}, -{68,69,-35}, -{68,69,-34}, -{68,70,-48}, -{68,70,-47}, -{68,70,-46}, -{68,70,-45}, -{68,70,-44}, -{68,70,-43}, -{68,70,-42}, -{68,70,-41}, -{68,70,-40}, -{68,70,-39}, -{68,70,-38}, -{68,70,-37}, -{68,70,-36}, -{68,71,-48}, -{68,71,-47}, -{68,71,-46}, -{68,71,-45}, -{68,71,-44}, -{68,71,-43}, -{68,71,-42}, -{68,71,-41}, -{68,71,-40}, -{68,71,-39}, -{68,72,-48}, -{68,72,-47}, -{68,72,-46}, -{68,72,-45}, -{68,72,-44}, -{68,72,-43}, -{68,72,-42}, -{68,72,-41}, -{68,73,-48}, -{68,73,-47}, -{68,73,-46}, -{68,73,-45}, -{68,73,-44}, -{68,73,-43}, -{68,74,-48}, -{68,74,-47}, -{68,74,-46}, -{68,74,-45}, -{68,74,-44}, -{68,75,-48}, -{68,75,-47}, -{68,75,-46}, -{68,76,-48}, -{69,-70,65}, -{69,-70,66}, -{69,-70,67}, -{69,-70,68}, -{69,-69,60}, -{69,-69,61}, -{69,-69,62}, -{69,-69,63}, -{69,-69,64}, -{69,-69,65}, -{69,-69,66}, -{69,-69,67}, -{69,-69,68}, -{69,-68,56}, -{69,-68,57}, -{69,-68,58}, -{69,-68,59}, -{69,-68,60}, -{69,-68,61}, -{69,-68,62}, -{69,-68,63}, -{69,-68,64}, -{69,-68,65}, -{69,-68,66}, -{69,-68,67}, -{69,-68,68}, -{69,-67,52}, -{69,-67,53}, -{69,-67,54}, -{69,-67,55}, -{69,-67,56}, -{69,-67,57}, -{69,-67,58}, -{69,-67,59}, -{69,-67,60}, -{69,-67,61}, -{69,-67,62}, -{69,-67,63}, -{69,-67,64}, -{69,-67,65}, -{69,-67,66}, -{69,-67,67}, -{69,-67,68}, -{69,-66,49}, -{69,-66,50}, -{69,-66,51}, -{69,-66,52}, -{69,-66,53}, -{69,-66,54}, -{69,-66,55}, -{69,-66,56}, -{69,-66,57}, -{69,-66,58}, -{69,-66,59}, -{69,-66,60}, -{69,-66,61}, -{69,-66,62}, -{69,-66,63}, -{69,-66,64}, -{69,-66,65}, -{69,-66,66}, -{69,-66,67}, -{69,-66,68}, -{69,-65,46}, -{69,-65,47}, -{69,-65,48}, -{69,-65,49}, -{69,-65,50}, -{69,-65,51}, -{69,-65,52}, -{69,-65,53}, -{69,-65,54}, -{69,-65,55}, -{69,-65,56}, -{69,-65,57}, -{69,-65,58}, -{69,-65,59}, -{69,-65,60}, -{69,-65,61}, -{69,-65,62}, -{69,-65,63}, -{69,-65,64}, -{69,-65,65}, -{69,-65,66}, -{69,-65,67}, -{69,-65,68}, -{69,-64,42}, -{69,-64,43}, -{69,-64,44}, -{69,-64,45}, -{69,-64,46}, -{69,-64,47}, -{69,-64,48}, -{69,-64,49}, -{69,-64,50}, -{69,-64,51}, -{69,-64,52}, -{69,-64,53}, -{69,-64,54}, -{69,-64,55}, -{69,-64,56}, -{69,-64,57}, -{69,-64,58}, -{69,-64,59}, -{69,-64,60}, -{69,-64,61}, -{69,-64,62}, -{69,-64,63}, -{69,-64,64}, -{69,-64,65}, -{69,-64,66}, -{69,-64,67}, -{69,-64,68}, -{69,-63,40}, -{69,-63,41}, -{69,-63,42}, -{69,-63,43}, -{69,-63,44}, -{69,-63,45}, -{69,-63,46}, -{69,-63,47}, -{69,-63,48}, -{69,-63,49}, -{69,-63,50}, -{69,-63,51}, -{69,-63,52}, -{69,-63,53}, -{69,-63,54}, -{69,-63,55}, -{69,-63,56}, -{69,-63,57}, -{69,-63,58}, -{69,-63,59}, -{69,-63,60}, -{69,-63,61}, -{69,-63,62}, -{69,-63,63}, -{69,-63,64}, -{69,-63,65}, -{69,-63,66}, -{69,-63,67}, -{69,-63,68}, -{69,-62,37}, -{69,-62,38}, -{69,-62,39}, -{69,-62,40}, -{69,-62,41}, -{69,-62,42}, -{69,-62,43}, -{69,-62,44}, -{69,-62,45}, -{69,-62,46}, -{69,-62,47}, -{69,-62,48}, -{69,-62,49}, -{69,-62,50}, -{69,-62,51}, -{69,-62,52}, -{69,-62,53}, -{69,-62,54}, -{69,-62,55}, -{69,-62,56}, -{69,-62,57}, -{69,-62,58}, -{69,-62,59}, -{69,-62,60}, -{69,-62,61}, -{69,-62,62}, -{69,-62,63}, -{69,-62,64}, -{69,-62,65}, -{69,-62,66}, -{69,-62,67}, -{69,-62,68}, -{69,-61,34}, -{69,-61,35}, -{69,-61,36}, -{69,-61,37}, -{69,-61,38}, -{69,-61,39}, -{69,-61,40}, -{69,-61,41}, -{69,-61,42}, -{69,-61,43}, -{69,-61,44}, -{69,-61,45}, -{69,-61,46}, -{69,-61,47}, -{69,-61,48}, -{69,-61,49}, -{69,-61,50}, -{69,-61,51}, -{69,-61,52}, -{69,-61,53}, -{69,-61,54}, -{69,-61,55}, -{69,-61,56}, -{69,-61,57}, -{69,-61,58}, -{69,-61,59}, -{69,-61,60}, -{69,-61,61}, -{69,-61,62}, -{69,-61,63}, -{69,-61,64}, -{69,-61,65}, -{69,-61,66}, -{69,-61,67}, -{69,-61,68}, -{69,-60,31}, -{69,-60,32}, -{69,-60,33}, -{69,-60,34}, -{69,-60,35}, -{69,-60,36}, -{69,-60,37}, -{69,-60,38}, -{69,-60,39}, -{69,-60,40}, -{69,-60,41}, -{69,-60,42}, -{69,-60,43}, -{69,-60,44}, -{69,-60,45}, -{69,-60,46}, -{69,-60,47}, -{69,-60,48}, -{69,-60,49}, -{69,-60,50}, -{69,-60,51}, -{69,-60,52}, -{69,-60,53}, -{69,-60,54}, -{69,-60,55}, -{69,-60,56}, -{69,-60,57}, -{69,-60,58}, -{69,-60,59}, -{69,-60,60}, -{69,-60,61}, -{69,-60,62}, -{69,-60,63}, -{69,-60,64}, -{69,-60,65}, -{69,-60,66}, -{69,-60,67}, -{69,-60,68}, -{69,-59,29}, -{69,-59,30}, -{69,-59,31}, -{69,-59,32}, -{69,-59,33}, -{69,-59,34}, -{69,-59,35}, -{69,-59,36}, -{69,-59,37}, -{69,-59,38}, -{69,-59,39}, -{69,-59,40}, -{69,-59,41}, -{69,-59,42}, -{69,-59,43}, -{69,-59,44}, -{69,-59,45}, -{69,-59,46}, -{69,-59,47}, -{69,-59,48}, -{69,-59,49}, -{69,-59,50}, -{69,-59,51}, -{69,-59,52}, -{69,-59,53}, -{69,-59,54}, -{69,-59,55}, -{69,-59,56}, -{69,-59,57}, -{69,-59,58}, -{69,-59,59}, -{69,-59,60}, -{69,-59,61}, -{69,-59,62}, -{69,-59,63}, -{69,-59,64}, -{69,-59,65}, -{69,-59,66}, -{69,-59,67}, -{69,-59,68}, -{69,-58,26}, -{69,-58,27}, -{69,-58,28}, -{69,-58,29}, -{69,-58,30}, -{69,-58,31}, -{69,-58,32}, -{69,-58,33}, -{69,-58,34}, -{69,-58,35}, -{69,-58,36}, -{69,-58,37}, -{69,-58,38}, -{69,-58,39}, -{69,-58,40}, -{69,-58,41}, -{69,-58,42}, -{69,-58,43}, -{69,-58,44}, -{69,-58,45}, -{69,-58,46}, -{69,-58,47}, -{69,-58,48}, -{69,-58,49}, -{69,-58,50}, -{69,-58,51}, -{69,-58,52}, -{69,-58,53}, -{69,-58,54}, -{69,-58,55}, -{69,-58,56}, -{69,-58,57}, -{69,-58,58}, -{69,-58,59}, -{69,-58,60}, -{69,-58,61}, -{69,-58,62}, -{69,-58,63}, -{69,-58,64}, -{69,-58,65}, -{69,-58,66}, -{69,-58,67}, -{69,-58,68}, -{69,-57,24}, -{69,-57,25}, -{69,-57,26}, -{69,-57,27}, -{69,-57,28}, -{69,-57,29}, -{69,-57,30}, -{69,-57,31}, -{69,-57,32}, -{69,-57,33}, -{69,-57,34}, -{69,-57,35}, -{69,-57,36}, -{69,-57,37}, -{69,-57,38}, -{69,-57,39}, -{69,-57,40}, -{69,-57,41}, -{69,-57,42}, -{69,-57,43}, -{69,-57,44}, -{69,-57,45}, -{69,-57,46}, -{69,-57,47}, -{69,-57,48}, -{69,-57,49}, -{69,-57,50}, -{69,-57,51}, -{69,-57,52}, -{69,-57,53}, -{69,-57,54}, -{69,-57,55}, -{69,-57,56}, -{69,-57,57}, -{69,-57,58}, -{69,-57,59}, -{69,-57,60}, -{69,-57,61}, -{69,-57,62}, -{69,-57,63}, -{69,-57,64}, -{69,-57,65}, -{69,-57,66}, -{69,-57,67}, -{69,-57,68}, -{69,-56,22}, -{69,-56,23}, -{69,-56,24}, -{69,-56,25}, -{69,-56,26}, -{69,-56,27}, -{69,-56,28}, -{69,-56,29}, -{69,-56,30}, -{69,-56,31}, -{69,-56,32}, -{69,-56,33}, -{69,-56,34}, -{69,-56,35}, -{69,-56,36}, -{69,-56,37}, -{69,-56,38}, -{69,-56,39}, -{69,-56,40}, -{69,-56,41}, -{69,-56,42}, -{69,-56,43}, -{69,-56,44}, -{69,-56,45}, -{69,-56,46}, -{69,-56,47}, -{69,-56,48}, -{69,-56,49}, -{69,-56,50}, -{69,-56,51}, -{69,-56,52}, -{69,-56,53}, -{69,-56,54}, -{69,-56,55}, -{69,-56,56}, -{69,-56,57}, -{69,-56,58}, -{69,-56,59}, -{69,-56,60}, -{69,-56,61}, -{69,-56,62}, -{69,-56,63}, -{69,-56,64}, -{69,-56,65}, -{69,-56,66}, -{69,-56,67}, -{69,-56,68}, -{69,-55,20}, -{69,-55,21}, -{69,-55,22}, -{69,-55,23}, -{69,-55,24}, -{69,-55,25}, -{69,-55,26}, -{69,-55,27}, -{69,-55,28}, -{69,-55,29}, -{69,-55,30}, -{69,-55,31}, -{69,-55,32}, -{69,-55,33}, -{69,-55,34}, -{69,-55,35}, -{69,-55,36}, -{69,-55,37}, -{69,-55,38}, -{69,-55,39}, -{69,-55,40}, -{69,-55,41}, -{69,-55,42}, -{69,-55,43}, -{69,-55,44}, -{69,-55,45}, -{69,-55,46}, -{69,-55,47}, -{69,-55,48}, -{69,-55,49}, -{69,-55,50}, -{69,-55,51}, -{69,-55,52}, -{69,-55,53}, -{69,-55,54}, -{69,-55,55}, -{69,-55,56}, -{69,-55,57}, -{69,-55,58}, -{69,-55,59}, -{69,-55,60}, -{69,-55,61}, -{69,-55,62}, -{69,-55,63}, -{69,-55,64}, -{69,-55,65}, -{69,-55,66}, -{69,-55,67}, -{69,-55,68}, -{69,-55,69}, -{69,-54,17}, -{69,-54,18}, -{69,-54,19}, -{69,-54,20}, -{69,-54,21}, -{69,-54,22}, -{69,-54,23}, -{69,-54,24}, -{69,-54,25}, -{69,-54,26}, -{69,-54,27}, -{69,-54,28}, -{69,-54,29}, -{69,-54,30}, -{69,-54,31}, -{69,-54,32}, -{69,-54,33}, -{69,-54,34}, -{69,-54,35}, -{69,-54,36}, -{69,-54,37}, -{69,-54,38}, -{69,-54,39}, -{69,-54,40}, -{69,-54,41}, -{69,-54,42}, -{69,-54,43}, -{69,-54,44}, -{69,-54,45}, -{69,-54,46}, -{69,-54,47}, -{69,-54,48}, -{69,-54,49}, -{69,-54,50}, -{69,-54,51}, -{69,-54,52}, -{69,-54,53}, -{69,-54,54}, -{69,-54,55}, -{69,-54,56}, -{69,-54,57}, -{69,-54,58}, -{69,-54,59}, -{69,-54,60}, -{69,-54,61}, -{69,-54,62}, -{69,-54,63}, -{69,-54,64}, -{69,-54,65}, -{69,-54,66}, -{69,-54,67}, -{69,-54,68}, -{69,-54,69}, -{69,-53,15}, -{69,-53,16}, -{69,-53,17}, -{69,-53,18}, -{69,-53,19}, -{69,-53,20}, -{69,-53,21}, -{69,-53,22}, -{69,-53,23}, -{69,-53,24}, -{69,-53,25}, -{69,-53,26}, -{69,-53,27}, -{69,-53,28}, -{69,-53,29}, -{69,-53,30}, -{69,-53,31}, -{69,-53,32}, -{69,-53,33}, -{69,-53,34}, -{69,-53,35}, -{69,-53,36}, -{69,-53,37}, -{69,-53,38}, -{69,-53,39}, -{69,-53,40}, -{69,-53,41}, -{69,-53,42}, -{69,-53,43}, -{69,-53,44}, -{69,-53,45}, -{69,-53,46}, -{69,-53,47}, -{69,-53,48}, -{69,-53,49}, -{69,-53,50}, -{69,-53,51}, -{69,-53,52}, -{69,-53,53}, -{69,-53,54}, -{69,-53,55}, -{69,-53,56}, -{69,-53,57}, -{69,-53,58}, -{69,-53,59}, -{69,-53,60}, -{69,-53,61}, -{69,-53,62}, -{69,-53,63}, -{69,-53,64}, -{69,-53,65}, -{69,-53,66}, -{69,-53,67}, -{69,-53,68}, -{69,-53,69}, -{69,-52,13}, -{69,-52,14}, -{69,-52,15}, -{69,-52,16}, -{69,-52,17}, -{69,-52,18}, -{69,-52,19}, -{69,-52,20}, -{69,-52,21}, -{69,-52,22}, -{69,-52,23}, -{69,-52,24}, -{69,-52,25}, -{69,-52,26}, -{69,-52,27}, -{69,-52,28}, -{69,-52,29}, -{69,-52,30}, -{69,-52,31}, -{69,-52,32}, -{69,-52,33}, -{69,-52,34}, -{69,-52,35}, -{69,-52,36}, -{69,-52,37}, -{69,-52,38}, -{69,-52,39}, -{69,-52,40}, -{69,-52,41}, -{69,-52,42}, -{69,-52,43}, -{69,-52,44}, -{69,-52,45}, -{69,-52,46}, -{69,-52,47}, -{69,-52,48}, -{69,-52,49}, -{69,-52,50}, -{69,-52,51}, -{69,-52,52}, -{69,-52,53}, -{69,-52,54}, -{69,-52,55}, -{69,-52,56}, -{69,-52,57}, -{69,-52,58}, -{69,-52,59}, -{69,-52,60}, -{69,-52,61}, -{69,-52,62}, -{69,-52,63}, -{69,-52,64}, -{69,-52,65}, -{69,-52,66}, -{69,-52,67}, -{69,-52,68}, -{69,-52,69}, -{69,-51,11}, -{69,-51,12}, -{69,-51,13}, -{69,-51,14}, -{69,-51,15}, -{69,-51,16}, -{69,-51,17}, -{69,-51,18}, -{69,-51,19}, -{69,-51,20}, -{69,-51,21}, -{69,-51,22}, -{69,-51,23}, -{69,-51,24}, -{69,-51,25}, -{69,-51,26}, -{69,-51,27}, -{69,-51,28}, -{69,-51,29}, -{69,-51,30}, -{69,-51,31}, -{69,-51,32}, -{69,-51,33}, -{69,-51,34}, -{69,-51,35}, -{69,-51,36}, -{69,-51,37}, -{69,-51,38}, -{69,-51,39}, -{69,-51,40}, -{69,-51,41}, -{69,-51,42}, -{69,-51,43}, -{69,-51,44}, -{69,-51,45}, -{69,-51,46}, -{69,-51,47}, -{69,-51,48}, -{69,-51,49}, -{69,-51,50}, -{69,-51,51}, -{69,-51,52}, -{69,-51,53}, -{69,-51,54}, -{69,-51,55}, -{69,-51,56}, -{69,-51,57}, -{69,-51,58}, -{69,-51,59}, -{69,-51,60}, -{69,-51,61}, -{69,-51,62}, -{69,-51,63}, -{69,-51,64}, -{69,-51,65}, -{69,-51,66}, -{69,-51,67}, -{69,-51,68}, -{69,-51,69}, -{69,-50,9}, -{69,-50,10}, -{69,-50,11}, -{69,-50,12}, -{69,-50,13}, -{69,-50,14}, -{69,-50,15}, -{69,-50,16}, -{69,-50,17}, -{69,-50,18}, -{69,-50,19}, -{69,-50,20}, -{69,-50,21}, -{69,-50,22}, -{69,-50,23}, -{69,-50,24}, -{69,-50,25}, -{69,-50,26}, -{69,-50,27}, -{69,-50,28}, -{69,-50,29}, -{69,-50,30}, -{69,-50,31}, -{69,-50,32}, -{69,-50,33}, -{69,-50,34}, -{69,-50,35}, -{69,-50,36}, -{69,-50,37}, -{69,-50,38}, -{69,-50,39}, -{69,-50,40}, -{69,-50,41}, -{69,-50,42}, -{69,-50,43}, -{69,-50,44}, -{69,-50,45}, -{69,-50,46}, -{69,-50,47}, -{69,-50,48}, -{69,-50,49}, -{69,-50,50}, -{69,-50,51}, -{69,-50,52}, -{69,-50,53}, -{69,-50,54}, -{69,-50,55}, -{69,-50,56}, -{69,-50,57}, -{69,-50,58}, -{69,-50,59}, -{69,-50,60}, -{69,-50,61}, -{69,-50,62}, -{69,-50,63}, -{69,-50,64}, -{69,-50,65}, -{69,-50,66}, -{69,-50,67}, -{69,-50,68}, -{69,-50,69}, -{69,-49,8}, -{69,-49,9}, -{69,-49,10}, -{69,-49,11}, -{69,-49,12}, -{69,-49,13}, -{69,-49,14}, -{69,-49,15}, -{69,-49,16}, -{69,-49,17}, -{69,-49,18}, -{69,-49,19}, -{69,-49,20}, -{69,-49,21}, -{69,-49,22}, -{69,-49,23}, -{69,-49,24}, -{69,-49,25}, -{69,-49,26}, -{69,-49,27}, -{69,-49,28}, -{69,-49,29}, -{69,-49,30}, -{69,-49,31}, -{69,-49,32}, -{69,-49,33}, -{69,-49,34}, -{69,-49,35}, -{69,-49,36}, -{69,-49,37}, -{69,-49,38}, -{69,-49,39}, -{69,-49,40}, -{69,-49,41}, -{69,-49,42}, -{69,-49,43}, -{69,-49,44}, -{69,-49,45}, -{69,-49,46}, -{69,-49,47}, -{69,-49,48}, -{69,-49,49}, -{69,-49,50}, -{69,-49,51}, -{69,-49,52}, -{69,-49,53}, -{69,-49,54}, -{69,-49,55}, -{69,-49,56}, -{69,-49,57}, -{69,-49,58}, -{69,-49,59}, -{69,-49,60}, -{69,-49,61}, -{69,-49,62}, -{69,-49,63}, -{69,-49,64}, -{69,-49,65}, -{69,-49,66}, -{69,-49,67}, -{69,-49,68}, -{69,-49,69}, -{69,-48,6}, -{69,-48,7}, -{69,-48,8}, -{69,-48,9}, -{69,-48,10}, -{69,-48,11}, -{69,-48,12}, -{69,-48,13}, -{69,-48,14}, -{69,-48,15}, -{69,-48,16}, -{69,-48,17}, -{69,-48,18}, -{69,-48,19}, -{69,-48,20}, -{69,-48,21}, -{69,-48,22}, -{69,-48,23}, -{69,-48,24}, -{69,-48,25}, -{69,-48,26}, -{69,-48,27}, -{69,-48,28}, -{69,-48,29}, -{69,-48,30}, -{69,-48,31}, -{69,-48,32}, -{69,-48,33}, -{69,-48,34}, -{69,-48,35}, -{69,-48,36}, -{69,-48,37}, -{69,-48,38}, -{69,-48,39}, -{69,-48,40}, -{69,-48,41}, -{69,-48,42}, -{69,-48,43}, -{69,-48,44}, -{69,-48,45}, -{69,-48,46}, -{69,-48,47}, -{69,-48,48}, -{69,-48,49}, -{69,-48,50}, -{69,-48,51}, -{69,-48,52}, -{69,-48,53}, -{69,-48,54}, -{69,-48,55}, -{69,-48,56}, -{69,-48,57}, -{69,-48,58}, -{69,-48,59}, -{69,-48,60}, -{69,-48,61}, -{69,-48,62}, -{69,-48,63}, -{69,-48,64}, -{69,-48,65}, -{69,-48,66}, -{69,-48,67}, -{69,-48,68}, -{69,-48,69}, -{69,-47,4}, -{69,-47,5}, -{69,-47,6}, -{69,-47,7}, -{69,-47,8}, -{69,-47,9}, -{69,-47,10}, -{69,-47,11}, -{69,-47,12}, -{69,-47,13}, -{69,-47,14}, -{69,-47,15}, -{69,-47,16}, -{69,-47,17}, -{69,-47,18}, -{69,-47,19}, -{69,-47,20}, -{69,-47,21}, -{69,-47,22}, -{69,-47,23}, -{69,-47,24}, -{69,-47,25}, -{69,-47,26}, -{69,-47,27}, -{69,-47,28}, -{69,-47,29}, -{69,-47,30}, -{69,-47,31}, -{69,-47,32}, -{69,-47,33}, -{69,-47,34}, -{69,-47,35}, -{69,-47,36}, -{69,-47,37}, -{69,-47,38}, -{69,-47,39}, -{69,-47,40}, -{69,-47,41}, -{69,-47,42}, -{69,-47,43}, -{69,-47,44}, -{69,-47,45}, -{69,-47,46}, -{69,-47,47}, -{69,-47,48}, -{69,-47,49}, -{69,-47,50}, -{69,-47,51}, -{69,-47,52}, -{69,-47,53}, -{69,-47,54}, -{69,-47,55}, -{69,-47,56}, -{69,-47,57}, -{69,-47,58}, -{69,-47,59}, -{69,-47,60}, -{69,-47,61}, -{69,-47,62}, -{69,-47,63}, -{69,-47,64}, -{69,-47,65}, -{69,-47,66}, -{69,-47,67}, -{69,-47,68}, -{69,-47,69}, -{69,-46,2}, -{69,-46,3}, -{69,-46,4}, -{69,-46,5}, -{69,-46,6}, -{69,-46,7}, -{69,-46,8}, -{69,-46,9}, -{69,-46,10}, -{69,-46,11}, -{69,-46,12}, -{69,-46,13}, -{69,-46,14}, -{69,-46,15}, -{69,-46,16}, -{69,-46,17}, -{69,-46,18}, -{69,-46,19}, -{69,-46,20}, -{69,-46,21}, -{69,-46,22}, -{69,-46,23}, -{69,-46,24}, -{69,-46,25}, -{69,-46,26}, -{69,-46,27}, -{69,-46,28}, -{69,-46,29}, -{69,-46,30}, -{69,-46,31}, -{69,-46,32}, -{69,-46,33}, -{69,-46,34}, -{69,-46,35}, -{69,-46,36}, -{69,-46,37}, -{69,-46,38}, -{69,-46,39}, -{69,-46,40}, -{69,-46,41}, -{69,-46,42}, -{69,-46,43}, -{69,-46,44}, -{69,-46,45}, -{69,-46,46}, -{69,-46,47}, -{69,-46,48}, -{69,-46,49}, -{69,-46,50}, -{69,-46,51}, -{69,-46,52}, -{69,-46,53}, -{69,-46,54}, -{69,-46,55}, -{69,-46,56}, -{69,-46,57}, -{69,-46,58}, -{69,-46,59}, -{69,-46,60}, -{69,-46,61}, -{69,-46,62}, -{69,-46,63}, -{69,-46,64}, -{69,-46,65}, -{69,-46,66}, -{69,-46,67}, -{69,-46,68}, -{69,-46,69}, -{69,-45,0}, -{69,-45,1}, -{69,-45,2}, -{69,-45,3}, -{69,-45,4}, -{69,-45,5}, -{69,-45,6}, -{69,-45,7}, -{69,-45,8}, -{69,-45,9}, -{69,-45,10}, -{69,-45,11}, -{69,-45,12}, -{69,-45,13}, -{69,-45,14}, -{69,-45,15}, -{69,-45,16}, -{69,-45,17}, -{69,-45,18}, -{69,-45,19}, -{69,-45,20}, -{69,-45,21}, -{69,-45,22}, -{69,-45,23}, -{69,-45,24}, -{69,-45,25}, -{69,-45,26}, -{69,-45,27}, -{69,-45,28}, -{69,-45,29}, -{69,-45,30}, -{69,-45,31}, -{69,-45,32}, -{69,-45,33}, -{69,-45,34}, -{69,-45,35}, -{69,-45,36}, -{69,-45,37}, -{69,-45,38}, -{69,-45,39}, -{69,-45,40}, -{69,-45,41}, -{69,-45,42}, -{69,-45,43}, -{69,-45,44}, -{69,-45,45}, -{69,-45,46}, -{69,-45,47}, -{69,-45,48}, -{69,-45,49}, -{69,-45,50}, -{69,-45,51}, -{69,-45,52}, -{69,-45,53}, -{69,-45,54}, -{69,-45,55}, -{69,-45,56}, -{69,-45,57}, -{69,-45,58}, -{69,-45,59}, -{69,-45,60}, -{69,-45,61}, -{69,-45,62}, -{69,-45,63}, -{69,-45,64}, -{69,-45,65}, -{69,-45,66}, -{69,-45,67}, -{69,-45,68}, -{69,-45,69}, -{69,-44,-1}, -{69,-44,0}, -{69,-44,1}, -{69,-44,2}, -{69,-44,3}, -{69,-44,4}, -{69,-44,5}, -{69,-44,6}, -{69,-44,7}, -{69,-44,8}, -{69,-44,9}, -{69,-44,10}, -{69,-44,11}, -{69,-44,12}, -{69,-44,13}, -{69,-44,14}, -{69,-44,15}, -{69,-44,16}, -{69,-44,17}, -{69,-44,18}, -{69,-44,19}, -{69,-44,20}, -{69,-44,21}, -{69,-44,22}, -{69,-44,23}, -{69,-44,24}, -{69,-44,25}, -{69,-44,26}, -{69,-44,27}, -{69,-44,28}, -{69,-44,29}, -{69,-44,30}, -{69,-44,31}, -{69,-44,32}, -{69,-44,33}, -{69,-44,34}, -{69,-44,35}, -{69,-44,36}, -{69,-44,37}, -{69,-44,38}, -{69,-44,39}, -{69,-44,40}, -{69,-44,41}, -{69,-44,42}, -{69,-44,43}, -{69,-44,44}, -{69,-44,45}, -{69,-44,46}, -{69,-44,47}, -{69,-44,48}, -{69,-44,49}, -{69,-44,50}, -{69,-44,51}, -{69,-44,52}, -{69,-44,53}, -{69,-44,54}, -{69,-44,55}, -{69,-44,56}, -{69,-44,57}, -{69,-44,58}, -{69,-44,59}, -{69,-44,60}, -{69,-44,61}, -{69,-44,62}, -{69,-44,63}, -{69,-44,64}, -{69,-44,65}, -{69,-44,66}, -{69,-44,67}, -{69,-44,68}, -{69,-44,69}, -{69,-43,-3}, -{69,-43,-2}, -{69,-43,-1}, -{69,-43,0}, -{69,-43,1}, -{69,-43,2}, -{69,-43,3}, -{69,-43,4}, -{69,-43,5}, -{69,-43,6}, -{69,-43,7}, -{69,-43,8}, -{69,-43,9}, -{69,-43,10}, -{69,-43,11}, -{69,-43,12}, -{69,-43,13}, -{69,-43,14}, -{69,-43,15}, -{69,-43,16}, -{69,-43,17}, -{69,-43,18}, -{69,-43,19}, -{69,-43,20}, -{69,-43,21}, -{69,-43,22}, -{69,-43,23}, -{69,-43,24}, -{69,-43,25}, -{69,-43,26}, -{69,-43,27}, -{69,-43,28}, -{69,-43,29}, -{69,-43,30}, -{69,-43,31}, -{69,-43,32}, -{69,-43,33}, -{69,-43,34}, -{69,-43,35}, -{69,-43,36}, -{69,-43,37}, -{69,-43,38}, -{69,-43,39}, -{69,-43,40}, -{69,-43,41}, -{69,-43,42}, -{69,-43,43}, -{69,-43,44}, -{69,-43,45}, -{69,-43,46}, -{69,-43,47}, -{69,-43,48}, -{69,-43,49}, -{69,-43,50}, -{69,-43,51}, -{69,-43,52}, -{69,-43,53}, -{69,-43,54}, -{69,-43,55}, -{69,-43,56}, -{69,-43,57}, -{69,-43,58}, -{69,-43,59}, -{69,-43,60}, -{69,-43,61}, -{69,-43,62}, -{69,-43,63}, -{69,-43,64}, -{69,-43,65}, -{69,-43,66}, -{69,-43,67}, -{69,-43,68}, -{69,-43,69}, -{69,-42,-5}, -{69,-42,-4}, -{69,-42,-3}, -{69,-42,-2}, -{69,-42,-1}, -{69,-42,0}, -{69,-42,1}, -{69,-42,2}, -{69,-42,3}, -{69,-42,4}, -{69,-42,5}, -{69,-42,6}, -{69,-42,7}, -{69,-42,8}, -{69,-42,9}, -{69,-42,10}, -{69,-42,11}, -{69,-42,12}, -{69,-42,13}, -{69,-42,14}, -{69,-42,15}, -{69,-42,16}, -{69,-42,17}, -{69,-42,18}, -{69,-42,19}, -{69,-42,20}, -{69,-42,21}, -{69,-42,22}, -{69,-42,23}, -{69,-42,24}, -{69,-42,25}, -{69,-42,26}, -{69,-42,27}, -{69,-42,28}, -{69,-42,29}, -{69,-42,30}, -{69,-42,31}, -{69,-42,32}, -{69,-42,33}, -{69,-42,34}, -{69,-42,35}, -{69,-42,36}, -{69,-42,37}, -{69,-42,38}, -{69,-42,39}, -{69,-42,40}, -{69,-42,41}, -{69,-42,42}, -{69,-42,43}, -{69,-42,44}, -{69,-42,45}, -{69,-42,46}, -{69,-42,47}, -{69,-42,48}, -{69,-42,49}, -{69,-42,50}, -{69,-42,51}, -{69,-42,52}, -{69,-42,53}, -{69,-42,54}, -{69,-42,55}, -{69,-42,56}, -{69,-42,57}, -{69,-42,58}, -{69,-42,59}, -{69,-42,60}, -{69,-42,61}, -{69,-42,62}, -{69,-42,63}, -{69,-42,64}, -{69,-42,65}, -{69,-42,66}, -{69,-42,67}, -{69,-42,68}, -{69,-42,69}, -{69,-41,-6}, -{69,-41,-5}, -{69,-41,-4}, -{69,-41,-3}, -{69,-41,-2}, -{69,-41,-1}, -{69,-41,0}, -{69,-41,1}, -{69,-41,2}, -{69,-41,3}, -{69,-41,4}, -{69,-41,5}, -{69,-41,6}, -{69,-41,7}, -{69,-41,8}, -{69,-41,9}, -{69,-41,10}, -{69,-41,11}, -{69,-41,12}, -{69,-41,13}, -{69,-41,14}, -{69,-41,15}, -{69,-41,16}, -{69,-41,17}, -{69,-41,18}, -{69,-41,19}, -{69,-41,20}, -{69,-41,21}, -{69,-41,22}, -{69,-41,23}, -{69,-41,24}, -{69,-41,25}, -{69,-41,26}, -{69,-41,27}, -{69,-41,28}, -{69,-41,29}, -{69,-41,30}, -{69,-41,31}, -{69,-41,32}, -{69,-41,33}, -{69,-41,34}, -{69,-41,35}, -{69,-41,36}, -{69,-41,37}, -{69,-41,38}, -{69,-41,39}, -{69,-41,40}, -{69,-41,41}, -{69,-41,42}, -{69,-41,43}, -{69,-41,44}, -{69,-41,45}, -{69,-41,46}, -{69,-41,47}, -{69,-41,48}, -{69,-41,49}, -{69,-41,50}, -{69,-41,51}, -{69,-41,52}, -{69,-41,53}, -{69,-41,54}, -{69,-41,55}, -{69,-41,56}, -{69,-41,57}, -{69,-41,58}, -{69,-41,59}, -{69,-41,60}, -{69,-41,61}, -{69,-41,62}, -{69,-41,63}, -{69,-41,64}, -{69,-41,65}, -{69,-41,66}, -{69,-41,67}, -{69,-41,68}, -{69,-41,69}, -{69,-40,-8}, -{69,-40,-7}, -{69,-40,-6}, -{69,-40,-5}, -{69,-40,-4}, -{69,-40,-3}, -{69,-40,-2}, -{69,-40,-1}, -{69,-40,0}, -{69,-40,1}, -{69,-40,2}, -{69,-40,3}, -{69,-40,4}, -{69,-40,5}, -{69,-40,6}, -{69,-40,7}, -{69,-40,8}, -{69,-40,9}, -{69,-40,10}, -{69,-40,11}, -{69,-40,12}, -{69,-40,13}, -{69,-40,14}, -{69,-40,15}, -{69,-40,16}, -{69,-40,17}, -{69,-40,18}, -{69,-40,19}, -{69,-40,20}, -{69,-40,21}, -{69,-40,22}, -{69,-40,23}, -{69,-40,24}, -{69,-40,25}, -{69,-40,26}, -{69,-40,27}, -{69,-40,28}, -{69,-40,29}, -{69,-40,30}, -{69,-40,31}, -{69,-40,32}, -{69,-40,33}, -{69,-40,34}, -{69,-40,35}, -{69,-40,36}, -{69,-40,37}, -{69,-40,38}, -{69,-40,39}, -{69,-40,40}, -{69,-40,41}, -{69,-40,42}, -{69,-40,43}, -{69,-40,44}, -{69,-40,45}, -{69,-40,46}, -{69,-40,47}, -{69,-40,48}, -{69,-40,49}, -{69,-40,50}, -{69,-40,51}, -{69,-40,52}, -{69,-40,53}, -{69,-40,54}, -{69,-40,55}, -{69,-40,56}, -{69,-40,57}, -{69,-40,58}, -{69,-40,59}, -{69,-40,60}, -{69,-40,61}, -{69,-40,62}, -{69,-40,63}, -{69,-40,64}, -{69,-40,65}, -{69,-40,66}, -{69,-40,67}, -{69,-40,68}, -{69,-40,69}, -{69,-39,-10}, -{69,-39,-9}, -{69,-39,-8}, -{69,-39,-7}, -{69,-39,-6}, -{69,-39,-5}, -{69,-39,-4}, -{69,-39,-3}, -{69,-39,-2}, -{69,-39,-1}, -{69,-39,0}, -{69,-39,1}, -{69,-39,2}, -{69,-39,3}, -{69,-39,4}, -{69,-39,5}, -{69,-39,6}, -{69,-39,7}, -{69,-39,8}, -{69,-39,9}, -{69,-39,10}, -{69,-39,11}, -{69,-39,12}, -{69,-39,13}, -{69,-39,14}, -{69,-39,15}, -{69,-39,16}, -{69,-39,17}, -{69,-39,18}, -{69,-39,19}, -{69,-39,20}, -{69,-39,21}, -{69,-39,22}, -{69,-39,23}, -{69,-39,24}, -{69,-39,25}, -{69,-39,26}, -{69,-39,27}, -{69,-39,28}, -{69,-39,29}, -{69,-39,30}, -{69,-39,31}, -{69,-39,32}, -{69,-39,33}, -{69,-39,34}, -{69,-39,35}, -{69,-39,36}, -{69,-39,37}, -{69,-39,38}, -{69,-39,39}, -{69,-39,40}, -{69,-39,41}, -{69,-39,42}, -{69,-39,43}, -{69,-39,44}, -{69,-39,45}, -{69,-39,46}, -{69,-39,47}, -{69,-39,48}, -{69,-39,49}, -{69,-39,50}, -{69,-39,51}, -{69,-39,52}, -{69,-39,53}, -{69,-39,54}, -{69,-39,55}, -{69,-39,56}, -{69,-39,57}, -{69,-39,58}, -{69,-39,59}, -{69,-39,60}, -{69,-39,61}, -{69,-39,62}, -{69,-39,63}, -{69,-39,64}, -{69,-39,65}, -{69,-39,66}, -{69,-39,67}, -{69,-39,68}, -{69,-39,69}, -{69,-38,-11}, -{69,-38,-10}, -{69,-38,-9}, -{69,-38,-8}, -{69,-38,-7}, -{69,-38,-6}, -{69,-38,-5}, -{69,-38,-4}, -{69,-38,-3}, -{69,-38,-2}, -{69,-38,-1}, -{69,-38,0}, -{69,-38,1}, -{69,-38,2}, -{69,-38,3}, -{69,-38,4}, -{69,-38,5}, -{69,-38,6}, -{69,-38,7}, -{69,-38,8}, -{69,-38,9}, -{69,-38,10}, -{69,-38,11}, -{69,-38,12}, -{69,-38,13}, -{69,-38,14}, -{69,-38,15}, -{69,-38,16}, -{69,-38,17}, -{69,-38,18}, -{69,-38,19}, -{69,-38,20}, -{69,-38,21}, -{69,-38,22}, -{69,-38,23}, -{69,-38,24}, -{69,-38,25}, -{69,-38,26}, -{69,-38,27}, -{69,-38,28}, -{69,-38,29}, -{69,-38,30}, -{69,-38,31}, -{69,-38,32}, -{69,-38,33}, -{69,-38,34}, -{69,-38,35}, -{69,-38,36}, -{69,-38,37}, -{69,-38,38}, -{69,-38,39}, -{69,-38,40}, -{69,-38,41}, -{69,-38,42}, -{69,-38,43}, -{69,-38,44}, -{69,-38,45}, -{69,-38,46}, -{69,-38,47}, -{69,-38,48}, -{69,-38,49}, -{69,-38,50}, -{69,-38,51}, -{69,-38,52}, -{69,-38,53}, -{69,-38,54}, -{69,-38,55}, -{69,-38,56}, -{69,-38,57}, -{69,-38,58}, -{69,-38,59}, -{69,-38,60}, -{69,-38,61}, -{69,-38,62}, -{69,-38,63}, -{69,-38,64}, -{69,-38,65}, -{69,-38,66}, -{69,-38,67}, -{69,-38,68}, -{69,-38,69}, -{69,-37,-13}, -{69,-37,-12}, -{69,-37,-11}, -{69,-37,-10}, -{69,-37,-9}, -{69,-37,-8}, -{69,-37,-7}, -{69,-37,-6}, -{69,-37,-5}, -{69,-37,-4}, -{69,-37,-3}, -{69,-37,-2}, -{69,-37,-1}, -{69,-37,0}, -{69,-37,1}, -{69,-37,2}, -{69,-37,3}, -{69,-37,4}, -{69,-37,5}, -{69,-37,6}, -{69,-37,7}, -{69,-37,8}, -{69,-37,9}, -{69,-37,10}, -{69,-37,11}, -{69,-37,12}, -{69,-37,13}, -{69,-37,14}, -{69,-37,15}, -{69,-37,16}, -{69,-37,17}, -{69,-37,18}, -{69,-37,19}, -{69,-37,20}, -{69,-37,21}, -{69,-37,22}, -{69,-37,23}, -{69,-37,24}, -{69,-37,25}, -{69,-37,26}, -{69,-37,27}, -{69,-37,28}, -{69,-37,29}, -{69,-37,30}, -{69,-37,31}, -{69,-37,32}, -{69,-37,33}, -{69,-37,34}, -{69,-37,35}, -{69,-37,36}, -{69,-37,37}, -{69,-37,38}, -{69,-37,39}, -{69,-37,40}, -{69,-37,41}, -{69,-37,42}, -{69,-37,43}, -{69,-37,44}, -{69,-37,45}, -{69,-37,46}, -{69,-37,47}, -{69,-37,48}, -{69,-37,49}, -{69,-37,50}, -{69,-37,51}, -{69,-37,52}, -{69,-37,53}, -{69,-37,54}, -{69,-37,55}, -{69,-37,56}, -{69,-37,57}, -{69,-37,58}, -{69,-37,59}, -{69,-37,60}, -{69,-37,61}, -{69,-37,62}, -{69,-37,63}, -{69,-37,64}, -{69,-37,65}, -{69,-37,66}, -{69,-37,67}, -{69,-37,68}, -{69,-37,69}, -{69,-36,-14}, -{69,-36,-13}, -{69,-36,-12}, -{69,-36,-11}, -{69,-36,-10}, -{69,-36,-9}, -{69,-36,-8}, -{69,-36,-7}, -{69,-36,-6}, -{69,-36,-5}, -{69,-36,-4}, -{69,-36,-3}, -{69,-36,-2}, -{69,-36,-1}, -{69,-36,0}, -{69,-36,1}, -{69,-36,2}, -{69,-36,3}, -{69,-36,4}, -{69,-36,5}, -{69,-36,6}, -{69,-36,7}, -{69,-36,8}, -{69,-36,9}, -{69,-36,10}, -{69,-36,11}, -{69,-36,12}, -{69,-36,13}, -{69,-36,14}, -{69,-36,15}, -{69,-36,16}, -{69,-36,17}, -{69,-36,18}, -{69,-36,19}, -{69,-36,20}, -{69,-36,21}, -{69,-36,22}, -{69,-36,23}, -{69,-36,24}, -{69,-36,25}, -{69,-36,26}, -{69,-36,27}, -{69,-36,28}, -{69,-36,29}, -{69,-36,30}, -{69,-36,31}, -{69,-36,32}, -{69,-36,33}, -{69,-36,34}, -{69,-36,35}, -{69,-36,36}, -{69,-36,37}, -{69,-36,38}, -{69,-36,39}, -{69,-36,40}, -{69,-36,41}, -{69,-36,42}, -{69,-36,43}, -{69,-36,44}, -{69,-36,45}, -{69,-36,46}, -{69,-36,47}, -{69,-36,48}, -{69,-36,49}, -{69,-36,50}, -{69,-36,51}, -{69,-36,52}, -{69,-36,53}, -{69,-36,54}, -{69,-36,55}, -{69,-36,56}, -{69,-36,57}, -{69,-36,58}, -{69,-36,59}, -{69,-36,60}, -{69,-36,61}, -{69,-36,62}, -{69,-36,63}, -{69,-36,64}, -{69,-36,65}, -{69,-36,66}, -{69,-36,67}, -{69,-36,68}, -{69,-36,69}, -{69,-35,-16}, -{69,-35,-15}, -{69,-35,-14}, -{69,-35,-13}, -{69,-35,-12}, -{69,-35,-11}, -{69,-35,-10}, -{69,-35,-9}, -{69,-35,-8}, -{69,-35,-7}, -{69,-35,-6}, -{69,-35,-5}, -{69,-35,-4}, -{69,-35,-3}, -{69,-35,-2}, -{69,-35,-1}, -{69,-35,0}, -{69,-35,1}, -{69,-35,2}, -{69,-35,3}, -{69,-35,4}, -{69,-35,5}, -{69,-35,6}, -{69,-35,7}, -{69,-35,8}, -{69,-35,9}, -{69,-35,10}, -{69,-35,11}, -{69,-35,12}, -{69,-35,13}, -{69,-35,14}, -{69,-35,15}, -{69,-35,16}, -{69,-35,17}, -{69,-35,18}, -{69,-35,19}, -{69,-35,20}, -{69,-35,21}, -{69,-35,22}, -{69,-35,23}, -{69,-35,24}, -{69,-35,25}, -{69,-35,26}, -{69,-35,27}, -{69,-35,28}, -{69,-35,29}, -{69,-35,30}, -{69,-35,31}, -{69,-35,32}, -{69,-35,33}, -{69,-35,34}, -{69,-35,35}, -{69,-35,36}, -{69,-35,37}, -{69,-35,38}, -{69,-35,39}, -{69,-35,40}, -{69,-35,41}, -{69,-35,42}, -{69,-35,43}, -{69,-35,44}, -{69,-35,45}, -{69,-35,46}, -{69,-35,47}, -{69,-35,48}, -{69,-35,49}, -{69,-35,50}, -{69,-35,51}, -{69,-35,52}, -{69,-35,53}, -{69,-35,54}, -{69,-35,55}, -{69,-35,56}, -{69,-35,57}, -{69,-35,58}, -{69,-35,59}, -{69,-35,60}, -{69,-35,61}, -{69,-35,62}, -{69,-35,63}, -{69,-35,64}, -{69,-35,65}, -{69,-35,66}, -{69,-35,67}, -{69,-35,68}, -{69,-35,69}, -{69,-35,70}, -{69,-34,-17}, -{69,-34,-16}, -{69,-34,-15}, -{69,-34,-14}, -{69,-34,-13}, -{69,-34,-12}, -{69,-34,-11}, -{69,-34,-10}, -{69,-34,-9}, -{69,-34,-8}, -{69,-34,-7}, -{69,-34,-6}, -{69,-34,-5}, -{69,-34,-4}, -{69,-34,-3}, -{69,-34,-2}, -{69,-34,-1}, -{69,-34,0}, -{69,-34,1}, -{69,-34,2}, -{69,-34,3}, -{69,-34,4}, -{69,-34,5}, -{69,-34,6}, -{69,-34,7}, -{69,-34,8}, -{69,-34,9}, -{69,-34,10}, -{69,-34,11}, -{69,-34,12}, -{69,-34,13}, -{69,-34,14}, -{69,-34,15}, -{69,-34,16}, -{69,-34,17}, -{69,-34,18}, -{69,-34,19}, -{69,-34,20}, -{69,-34,21}, -{69,-34,22}, -{69,-34,23}, -{69,-34,24}, -{69,-34,25}, -{69,-34,26}, -{69,-34,27}, -{69,-34,28}, -{69,-34,29}, -{69,-34,30}, -{69,-34,31}, -{69,-34,32}, -{69,-34,33}, -{69,-34,34}, -{69,-34,35}, -{69,-34,36}, -{69,-34,37}, -{69,-34,38}, -{69,-34,39}, -{69,-34,40}, -{69,-34,41}, -{69,-34,42}, -{69,-34,43}, -{69,-34,44}, -{69,-34,45}, -{69,-34,46}, -{69,-34,47}, -{69,-34,48}, -{69,-34,49}, -{69,-34,50}, -{69,-34,51}, -{69,-34,52}, -{69,-34,53}, -{69,-34,54}, -{69,-34,55}, -{69,-34,56}, -{69,-34,57}, -{69,-34,58}, -{69,-34,59}, -{69,-34,60}, -{69,-34,61}, -{69,-34,62}, -{69,-34,63}, -{69,-34,64}, -{69,-34,65}, -{69,-34,66}, -{69,-34,67}, -{69,-34,68}, -{69,-34,69}, -{69,-34,70}, -{69,-33,-19}, -{69,-33,-18}, -{69,-33,-17}, -{69,-33,-16}, -{69,-33,-15}, -{69,-33,-14}, -{69,-33,-13}, -{69,-33,-12}, -{69,-33,-11}, -{69,-33,-10}, -{69,-33,-9}, -{69,-33,-8}, -{69,-33,-7}, -{69,-33,-6}, -{69,-33,-5}, -{69,-33,-4}, -{69,-33,-3}, -{69,-33,-2}, -{69,-33,-1}, -{69,-33,0}, -{69,-33,1}, -{69,-33,2}, -{69,-33,3}, -{69,-33,4}, -{69,-33,5}, -{69,-33,6}, -{69,-33,7}, -{69,-33,8}, -{69,-33,9}, -{69,-33,10}, -{69,-33,11}, -{69,-33,12}, -{69,-33,13}, -{69,-33,14}, -{69,-33,15}, -{69,-33,16}, -{69,-33,17}, -{69,-33,18}, -{69,-33,19}, -{69,-33,20}, -{69,-33,21}, -{69,-33,22}, -{69,-33,23}, -{69,-33,24}, -{69,-33,25}, -{69,-33,26}, -{69,-33,27}, -{69,-33,28}, -{69,-33,29}, -{69,-33,30}, -{69,-33,31}, -{69,-33,32}, -{69,-33,33}, -{69,-33,34}, -{69,-33,35}, -{69,-33,36}, -{69,-33,37}, -{69,-33,38}, -{69,-33,39}, -{69,-33,40}, -{69,-33,41}, -{69,-33,42}, -{69,-33,43}, -{69,-33,44}, -{69,-33,45}, -{69,-33,46}, -{69,-33,47}, -{69,-33,48}, -{69,-33,49}, -{69,-33,50}, -{69,-33,51}, -{69,-33,52}, -{69,-33,53}, -{69,-33,54}, -{69,-33,55}, -{69,-33,56}, -{69,-33,57}, -{69,-33,58}, -{69,-33,59}, -{69,-33,60}, -{69,-33,61}, -{69,-33,62}, -{69,-33,63}, -{69,-33,64}, -{69,-33,65}, -{69,-33,66}, -{69,-33,67}, -{69,-33,68}, -{69,-33,69}, -{69,-33,70}, -{69,-32,-20}, -{69,-32,-19}, -{69,-32,-18}, -{69,-32,-17}, -{69,-32,-16}, -{69,-32,-15}, -{69,-32,-14}, -{69,-32,-13}, -{69,-32,-12}, -{69,-32,-11}, -{69,-32,-10}, -{69,-32,-9}, -{69,-32,-8}, -{69,-32,-7}, -{69,-32,-6}, -{69,-32,-5}, -{69,-32,-4}, -{69,-32,-3}, -{69,-32,-2}, -{69,-32,-1}, -{69,-32,0}, -{69,-32,1}, -{69,-32,2}, -{69,-32,3}, -{69,-32,4}, -{69,-32,5}, -{69,-32,6}, -{69,-32,7}, -{69,-32,8}, -{69,-32,9}, -{69,-32,10}, -{69,-32,11}, -{69,-32,12}, -{69,-32,13}, -{69,-32,14}, -{69,-32,15}, -{69,-32,16}, -{69,-32,17}, -{69,-32,18}, -{69,-32,19}, -{69,-32,20}, -{69,-32,21}, -{69,-32,22}, -{69,-32,23}, -{69,-32,24}, -{69,-32,25}, -{69,-32,26}, -{69,-32,27}, -{69,-32,28}, -{69,-32,29}, -{69,-32,30}, -{69,-32,31}, -{69,-32,32}, -{69,-32,33}, -{69,-32,34}, -{69,-32,35}, -{69,-32,36}, -{69,-32,37}, -{69,-32,38}, -{69,-32,39}, -{69,-32,40}, -{69,-32,41}, -{69,-32,42}, -{69,-32,43}, -{69,-32,44}, -{69,-32,45}, -{69,-32,46}, -{69,-32,47}, -{69,-32,48}, -{69,-32,49}, -{69,-32,50}, -{69,-32,51}, -{69,-32,52}, -{69,-32,53}, -{69,-32,54}, -{69,-32,55}, -{69,-32,56}, -{69,-32,57}, -{69,-32,58}, -{69,-32,59}, -{69,-32,60}, -{69,-32,61}, -{69,-32,62}, -{69,-32,63}, -{69,-32,64}, -{69,-32,65}, -{69,-32,66}, -{69,-32,67}, -{69,-32,68}, -{69,-32,69}, -{69,-32,70}, -{69,-31,-22}, -{69,-31,-21}, -{69,-31,-20}, -{69,-31,-19}, -{69,-31,-18}, -{69,-31,-17}, -{69,-31,-16}, -{69,-31,-15}, -{69,-31,-14}, -{69,-31,-13}, -{69,-31,-12}, -{69,-31,-11}, -{69,-31,-10}, -{69,-31,-9}, -{69,-31,-8}, -{69,-31,-7}, -{69,-31,-6}, -{69,-31,-5}, -{69,-31,-4}, -{69,-31,-3}, -{69,-31,-2}, -{69,-31,-1}, -{69,-31,0}, -{69,-31,1}, -{69,-31,2}, -{69,-31,3}, -{69,-31,4}, -{69,-31,5}, -{69,-31,6}, -{69,-31,7}, -{69,-31,8}, -{69,-31,9}, -{69,-31,10}, -{69,-31,11}, -{69,-31,12}, -{69,-31,13}, -{69,-31,14}, -{69,-31,15}, -{69,-31,16}, -{69,-31,17}, -{69,-31,18}, -{69,-31,19}, -{69,-31,20}, -{69,-31,21}, -{69,-31,22}, -{69,-31,23}, -{69,-31,24}, -{69,-31,25}, -{69,-31,26}, -{69,-31,27}, -{69,-31,28}, -{69,-31,29}, -{69,-31,30}, -{69,-31,31}, -{69,-31,32}, -{69,-31,33}, -{69,-31,34}, -{69,-31,35}, -{69,-31,36}, -{69,-31,37}, -{69,-31,38}, -{69,-31,39}, -{69,-31,40}, -{69,-31,41}, -{69,-31,42}, -{69,-31,43}, -{69,-31,44}, -{69,-31,45}, -{69,-31,46}, -{69,-31,47}, -{69,-31,48}, -{69,-31,49}, -{69,-31,50}, -{69,-31,51}, -{69,-31,52}, -{69,-31,53}, -{69,-31,54}, -{69,-31,55}, -{69,-31,56}, -{69,-31,57}, -{69,-31,58}, -{69,-31,59}, -{69,-31,60}, -{69,-31,61}, -{69,-31,62}, -{69,-31,63}, -{69,-31,64}, -{69,-31,65}, -{69,-31,66}, -{69,-31,67}, -{69,-31,68}, -{69,-31,69}, -{69,-31,70}, -{69,-30,-23}, -{69,-30,-22}, -{69,-30,-21}, -{69,-30,-20}, -{69,-30,-19}, -{69,-30,-18}, -{69,-30,-17}, -{69,-30,-16}, -{69,-30,-15}, -{69,-30,-14}, -{69,-30,-13}, -{69,-30,-12}, -{69,-30,-11}, -{69,-30,-10}, -{69,-30,-9}, -{69,-30,-8}, -{69,-30,-7}, -{69,-30,-6}, -{69,-30,-5}, -{69,-30,-4}, -{69,-30,-3}, -{69,-30,-2}, -{69,-30,-1}, -{69,-30,0}, -{69,-30,1}, -{69,-30,2}, -{69,-30,3}, -{69,-30,4}, -{69,-30,5}, -{69,-30,6}, -{69,-30,7}, -{69,-30,8}, -{69,-30,9}, -{69,-30,10}, -{69,-30,11}, -{69,-30,12}, -{69,-30,13}, -{69,-30,14}, -{69,-30,15}, -{69,-30,16}, -{69,-30,17}, -{69,-30,18}, -{69,-30,19}, -{69,-30,20}, -{69,-30,21}, -{69,-30,22}, -{69,-30,23}, -{69,-30,24}, -{69,-30,25}, -{69,-30,26}, -{69,-30,27}, -{69,-30,28}, -{69,-30,29}, -{69,-30,30}, -{69,-30,31}, -{69,-30,32}, -{69,-30,33}, -{69,-30,34}, -{69,-30,35}, -{69,-30,36}, -{69,-30,37}, -{69,-30,38}, -{69,-30,39}, -{69,-30,40}, -{69,-30,41}, -{69,-30,42}, -{69,-30,43}, -{69,-30,44}, -{69,-30,45}, -{69,-30,46}, -{69,-30,47}, -{69,-30,48}, -{69,-30,49}, -{69,-30,50}, -{69,-30,51}, -{69,-30,52}, -{69,-30,53}, -{69,-30,54}, -{69,-30,55}, -{69,-30,56}, -{69,-30,57}, -{69,-30,58}, -{69,-30,59}, -{69,-30,60}, -{69,-30,61}, -{69,-30,62}, -{69,-30,63}, -{69,-30,64}, -{69,-30,65}, -{69,-30,66}, -{69,-30,67}, -{69,-30,68}, -{69,-30,69}, -{69,-30,70}, -{69,-29,-25}, -{69,-29,-24}, -{69,-29,-23}, -{69,-29,-22}, -{69,-29,-21}, -{69,-29,-20}, -{69,-29,-19}, -{69,-29,-18}, -{69,-29,-17}, -{69,-29,-16}, -{69,-29,-15}, -{69,-29,-14}, -{69,-29,-13}, -{69,-29,-12}, -{69,-29,-11}, -{69,-29,-10}, -{69,-29,-9}, -{69,-29,-8}, -{69,-29,-7}, -{69,-29,-6}, -{69,-29,-5}, -{69,-29,-4}, -{69,-29,-3}, -{69,-29,-2}, -{69,-29,-1}, -{69,-29,0}, -{69,-29,1}, -{69,-29,2}, -{69,-29,3}, -{69,-29,4}, -{69,-29,5}, -{69,-29,6}, -{69,-29,7}, -{69,-29,8}, -{69,-29,9}, -{69,-29,10}, -{69,-29,11}, -{69,-29,12}, -{69,-29,13}, -{69,-29,14}, -{69,-29,15}, -{69,-29,16}, -{69,-29,17}, -{69,-29,18}, -{69,-29,19}, -{69,-29,20}, -{69,-29,21}, -{69,-29,22}, -{69,-29,23}, -{69,-29,24}, -{69,-29,25}, -{69,-29,26}, -{69,-29,27}, -{69,-29,28}, -{69,-29,29}, -{69,-29,30}, -{69,-29,31}, -{69,-29,32}, -{69,-29,33}, -{69,-29,34}, -{69,-29,35}, -{69,-29,36}, -{69,-29,37}, -{69,-29,38}, -{69,-29,39}, -{69,-29,40}, -{69,-29,41}, -{69,-29,42}, -{69,-29,43}, -{69,-29,44}, -{69,-29,45}, -{69,-29,46}, -{69,-29,47}, -{69,-29,48}, -{69,-29,49}, -{69,-29,50}, -{69,-29,51}, -{69,-29,52}, -{69,-29,53}, -{69,-29,54}, -{69,-29,55}, -{69,-29,56}, -{69,-29,57}, -{69,-29,58}, -{69,-29,59}, -{69,-29,60}, -{69,-29,61}, -{69,-29,62}, -{69,-29,63}, -{69,-29,64}, -{69,-29,65}, -{69,-29,66}, -{69,-29,67}, -{69,-29,68}, -{69,-29,69}, -{69,-29,70}, -{69,-28,-26}, -{69,-28,-25}, -{69,-28,-24}, -{69,-28,-23}, -{69,-28,-22}, -{69,-28,-21}, -{69,-28,-20}, -{69,-28,-19}, -{69,-28,-18}, -{69,-28,-17}, -{69,-28,-16}, -{69,-28,-15}, -{69,-28,-14}, -{69,-28,-13}, -{69,-28,-12}, -{69,-28,-11}, -{69,-28,-10}, -{69,-28,-9}, -{69,-28,-8}, -{69,-28,-7}, -{69,-28,-6}, -{69,-28,-5}, -{69,-28,-4}, -{69,-28,-3}, -{69,-28,-2}, -{69,-28,-1}, -{69,-28,0}, -{69,-28,1}, -{69,-28,2}, -{69,-28,3}, -{69,-28,4}, -{69,-28,5}, -{69,-28,6}, -{69,-28,7}, -{69,-28,8}, -{69,-28,9}, -{69,-28,10}, -{69,-28,11}, -{69,-28,12}, -{69,-28,13}, -{69,-28,14}, -{69,-28,15}, -{69,-28,16}, -{69,-28,17}, -{69,-28,18}, -{69,-28,19}, -{69,-28,20}, -{69,-28,21}, -{69,-28,22}, -{69,-28,23}, -{69,-28,24}, -{69,-28,25}, -{69,-28,26}, -{69,-28,27}, -{69,-28,28}, -{69,-28,29}, -{69,-28,30}, -{69,-28,31}, -{69,-28,32}, -{69,-28,33}, -{69,-28,34}, -{69,-28,35}, -{69,-28,36}, -{69,-28,37}, -{69,-28,38}, -{69,-28,39}, -{69,-28,40}, -{69,-28,41}, -{69,-28,42}, -{69,-28,43}, -{69,-28,44}, -{69,-28,45}, -{69,-28,46}, -{69,-28,47}, -{69,-28,48}, -{69,-28,49}, -{69,-28,50}, -{69,-28,51}, -{69,-28,52}, -{69,-28,53}, -{69,-28,54}, -{69,-28,55}, -{69,-28,56}, -{69,-28,57}, -{69,-28,58}, -{69,-28,59}, -{69,-28,60}, -{69,-28,61}, -{69,-28,62}, -{69,-28,63}, -{69,-28,64}, -{69,-28,65}, -{69,-28,66}, -{69,-28,67}, -{69,-28,68}, -{69,-28,69}, -{69,-28,70}, -{69,-27,-27}, -{69,-27,-26}, -{69,-27,-25}, -{69,-27,-24}, -{69,-27,-23}, -{69,-27,-22}, -{69,-27,-21}, -{69,-27,-20}, -{69,-27,-19}, -{69,-27,-18}, -{69,-27,-17}, -{69,-27,-16}, -{69,-27,-15}, -{69,-27,-14}, -{69,-27,-13}, -{69,-27,-12}, -{69,-27,-11}, -{69,-27,-10}, -{69,-27,-9}, -{69,-27,-8}, -{69,-27,-7}, -{69,-27,-6}, -{69,-27,-5}, -{69,-27,-4}, -{69,-27,-3}, -{69,-27,-2}, -{69,-27,-1}, -{69,-27,0}, -{69,-27,1}, -{69,-27,2}, -{69,-27,3}, -{69,-27,4}, -{69,-27,5}, -{69,-27,6}, -{69,-27,7}, -{69,-27,8}, -{69,-27,9}, -{69,-27,10}, -{69,-27,11}, -{69,-27,12}, -{69,-27,13}, -{69,-27,14}, -{69,-27,15}, -{69,-27,16}, -{69,-27,17}, -{69,-27,18}, -{69,-27,19}, -{69,-27,20}, -{69,-27,21}, -{69,-27,22}, -{69,-27,23}, -{69,-27,24}, -{69,-27,25}, -{69,-27,26}, -{69,-27,27}, -{69,-27,28}, -{69,-27,29}, -{69,-27,30}, -{69,-27,31}, -{69,-27,32}, -{69,-27,33}, -{69,-27,34}, -{69,-27,35}, -{69,-27,36}, -{69,-27,37}, -{69,-27,38}, -{69,-27,39}, -{69,-27,40}, -{69,-27,41}, -{69,-27,42}, -{69,-27,43}, -{69,-27,44}, -{69,-27,45}, -{69,-27,46}, -{69,-27,47}, -{69,-27,48}, -{69,-27,49}, -{69,-27,50}, -{69,-27,51}, -{69,-27,52}, -{69,-27,53}, -{69,-27,54}, -{69,-27,55}, -{69,-27,56}, -{69,-27,57}, -{69,-27,58}, -{69,-27,59}, -{69,-27,60}, -{69,-27,61}, -{69,-27,62}, -{69,-27,63}, -{69,-27,64}, -{69,-27,65}, -{69,-27,66}, -{69,-27,67}, -{69,-27,68}, -{69,-27,69}, -{69,-27,70}, -{69,-26,-29}, -{69,-26,-28}, -{69,-26,-27}, -{69,-26,-26}, -{69,-26,-25}, -{69,-26,-24}, -{69,-26,-23}, -{69,-26,-22}, -{69,-26,-21}, -{69,-26,-20}, -{69,-26,-19}, -{69,-26,-18}, -{69,-26,-17}, -{69,-26,-16}, -{69,-26,-15}, -{69,-26,-14}, -{69,-26,-13}, -{69,-26,-12}, -{69,-26,-11}, -{69,-26,-10}, -{69,-26,-9}, -{69,-26,-8}, -{69,-26,-7}, -{69,-26,-6}, -{69,-26,-5}, -{69,-26,-4}, -{69,-26,-3}, -{69,-26,-2}, -{69,-26,-1}, -{69,-26,0}, -{69,-26,1}, -{69,-26,2}, -{69,-26,3}, -{69,-26,4}, -{69,-26,5}, -{69,-26,6}, -{69,-26,7}, -{69,-26,8}, -{69,-26,9}, -{69,-26,10}, -{69,-26,11}, -{69,-26,12}, -{69,-26,13}, -{69,-26,14}, -{69,-26,15}, -{69,-26,16}, -{69,-26,17}, -{69,-26,18}, -{69,-26,19}, -{69,-26,20}, -{69,-26,21}, -{69,-26,22}, -{69,-26,23}, -{69,-26,24}, -{69,-26,25}, -{69,-26,26}, -{69,-26,27}, -{69,-26,28}, -{69,-26,29}, -{69,-26,30}, -{69,-26,31}, -{69,-26,32}, -{69,-26,33}, -{69,-26,34}, -{69,-26,35}, -{69,-26,36}, -{69,-26,37}, -{69,-26,38}, -{69,-26,39}, -{69,-26,40}, -{69,-26,41}, -{69,-26,42}, -{69,-26,43}, -{69,-26,44}, -{69,-26,45}, -{69,-26,46}, -{69,-26,47}, -{69,-26,48}, -{69,-26,49}, -{69,-26,50}, -{69,-26,51}, -{69,-26,52}, -{69,-26,53}, -{69,-26,54}, -{69,-26,55}, -{69,-26,56}, -{69,-26,57}, -{69,-26,58}, -{69,-26,59}, -{69,-26,60}, -{69,-26,61}, -{69,-26,62}, -{69,-26,63}, -{69,-26,64}, -{69,-26,65}, -{69,-26,66}, -{69,-26,67}, -{69,-26,68}, -{69,-26,69}, -{69,-26,70}, -{69,-25,-30}, -{69,-25,-29}, -{69,-25,-28}, -{69,-25,-27}, -{69,-25,-26}, -{69,-25,-25}, -{69,-25,-24}, -{69,-25,-23}, -{69,-25,-22}, -{69,-25,-21}, -{69,-25,-20}, -{69,-25,-19}, -{69,-25,-18}, -{69,-25,-17}, -{69,-25,-16}, -{69,-25,-15}, -{69,-25,-14}, -{69,-25,-13}, -{69,-25,-12}, -{69,-25,-11}, -{69,-25,-10}, -{69,-25,-9}, -{69,-25,-8}, -{69,-25,-7}, -{69,-25,-6}, -{69,-25,-5}, -{69,-25,-4}, -{69,-25,-3}, -{69,-25,-2}, -{69,-25,-1}, -{69,-25,0}, -{69,-25,1}, -{69,-25,2}, -{69,-25,3}, -{69,-25,4}, -{69,-25,5}, -{69,-25,6}, -{69,-25,7}, -{69,-25,8}, -{69,-25,9}, -{69,-25,10}, -{69,-25,11}, -{69,-25,12}, -{69,-25,13}, -{69,-25,14}, -{69,-25,15}, -{69,-25,16}, -{69,-25,17}, -{69,-25,18}, -{69,-25,19}, -{69,-25,20}, -{69,-25,21}, -{69,-25,22}, -{69,-25,23}, -{69,-25,24}, -{69,-25,25}, -{69,-25,26}, -{69,-25,27}, -{69,-25,28}, -{69,-25,29}, -{69,-25,30}, -{69,-25,31}, -{69,-25,32}, -{69,-25,33}, -{69,-25,34}, -{69,-25,35}, -{69,-25,36}, -{69,-25,37}, -{69,-25,38}, -{69,-25,39}, -{69,-25,40}, -{69,-25,41}, -{69,-25,42}, -{69,-25,43}, -{69,-25,44}, -{69,-25,45}, -{69,-25,46}, -{69,-25,47}, -{69,-25,48}, -{69,-25,49}, -{69,-25,50}, -{69,-25,51}, -{69,-25,52}, -{69,-25,53}, -{69,-25,54}, -{69,-25,55}, -{69,-25,56}, -{69,-25,57}, -{69,-25,58}, -{69,-25,59}, -{69,-25,60}, -{69,-25,61}, -{69,-25,62}, -{69,-25,63}, -{69,-25,64}, -{69,-25,65}, -{69,-25,66}, -{69,-25,67}, -{69,-25,68}, -{69,-25,69}, -{69,-25,70}, -{69,-24,-31}, -{69,-24,-30}, -{69,-24,-29}, -{69,-24,-28}, -{69,-24,-27}, -{69,-24,-26}, -{69,-24,-25}, -{69,-24,-24}, -{69,-24,-23}, -{69,-24,-22}, -{69,-24,-21}, -{69,-24,-20}, -{69,-24,-19}, -{69,-24,-18}, -{69,-24,-17}, -{69,-24,-16}, -{69,-24,-15}, -{69,-24,-14}, -{69,-24,-13}, -{69,-24,-12}, -{69,-24,-11}, -{69,-24,-10}, -{69,-24,-9}, -{69,-24,-8}, -{69,-24,-7}, -{69,-24,-6}, -{69,-24,-5}, -{69,-24,-4}, -{69,-24,-3}, -{69,-24,-2}, -{69,-24,-1}, -{69,-24,0}, -{69,-24,1}, -{69,-24,2}, -{69,-24,3}, -{69,-24,4}, -{69,-24,5}, -{69,-24,6}, -{69,-24,7}, -{69,-24,8}, -{69,-24,9}, -{69,-24,10}, -{69,-24,11}, -{69,-24,12}, -{69,-24,13}, -{69,-24,14}, -{69,-24,15}, -{69,-24,16}, -{69,-24,17}, -{69,-24,18}, -{69,-24,19}, -{69,-24,20}, -{69,-24,21}, -{69,-24,22}, -{69,-24,23}, -{69,-24,24}, -{69,-24,25}, -{69,-24,26}, -{69,-24,27}, -{69,-24,28}, -{69,-24,29}, -{69,-24,30}, -{69,-24,31}, -{69,-24,32}, -{69,-24,33}, -{69,-24,34}, -{69,-24,35}, -{69,-24,36}, -{69,-24,37}, -{69,-24,38}, -{69,-24,39}, -{69,-24,40}, -{69,-24,41}, -{69,-24,42}, -{69,-24,43}, -{69,-24,44}, -{69,-24,45}, -{69,-24,46}, -{69,-24,47}, -{69,-24,48}, -{69,-24,49}, -{69,-24,50}, -{69,-24,51}, -{69,-24,52}, -{69,-24,53}, -{69,-24,54}, -{69,-24,55}, -{69,-24,56}, -{69,-24,57}, -{69,-24,58}, -{69,-24,59}, -{69,-24,60}, -{69,-24,61}, -{69,-24,62}, -{69,-24,63}, -{69,-24,64}, -{69,-24,65}, -{69,-24,66}, -{69,-24,67}, -{69,-24,68}, -{69,-24,69}, -{69,-24,70}, -{69,-23,-33}, -{69,-23,-32}, -{69,-23,-31}, -{69,-23,-30}, -{69,-23,-29}, -{69,-23,-28}, -{69,-23,-27}, -{69,-23,-26}, -{69,-23,-25}, -{69,-23,-24}, -{69,-23,-23}, -{69,-23,-22}, -{69,-23,-21}, -{69,-23,-20}, -{69,-23,-19}, -{69,-23,-18}, -{69,-23,-17}, -{69,-23,-16}, -{69,-23,-15}, -{69,-23,-14}, -{69,-23,-13}, -{69,-23,-12}, -{69,-23,-11}, -{69,-23,-10}, -{69,-23,-9}, -{69,-23,-8}, -{69,-23,-7}, -{69,-23,-6}, -{69,-23,-5}, -{69,-23,-4}, -{69,-23,-3}, -{69,-23,-2}, -{69,-23,-1}, -{69,-23,0}, -{69,-23,1}, -{69,-23,2}, -{69,-23,3}, -{69,-23,4}, -{69,-23,5}, -{69,-23,6}, -{69,-23,7}, -{69,-23,8}, -{69,-23,9}, -{69,-23,10}, -{69,-23,11}, -{69,-23,12}, -{69,-23,13}, -{69,-23,14}, -{69,-23,15}, -{69,-23,16}, -{69,-23,17}, -{69,-23,18}, -{69,-23,19}, -{69,-23,20}, -{69,-23,21}, -{69,-23,22}, -{69,-23,23}, -{69,-23,24}, -{69,-23,25}, -{69,-23,26}, -{69,-23,27}, -{69,-23,28}, -{69,-23,29}, -{69,-23,30}, -{69,-23,31}, -{69,-23,32}, -{69,-23,33}, -{69,-23,34}, -{69,-23,35}, -{69,-23,36}, -{69,-23,37}, -{69,-23,38}, -{69,-23,39}, -{69,-23,40}, -{69,-23,41}, -{69,-23,42}, -{69,-23,43}, -{69,-23,44}, -{69,-23,45}, -{69,-23,46}, -{69,-23,47}, -{69,-23,48}, -{69,-23,49}, -{69,-23,50}, -{69,-23,51}, -{69,-23,52}, -{69,-23,53}, -{69,-23,54}, -{69,-23,55}, -{69,-23,56}, -{69,-23,57}, -{69,-23,58}, -{69,-23,59}, -{69,-23,60}, -{69,-23,61}, -{69,-23,62}, -{69,-23,63}, -{69,-23,64}, -{69,-23,65}, -{69,-23,66}, -{69,-23,67}, -{69,-23,68}, -{69,-23,69}, -{69,-23,70}, -{69,-22,-34}, -{69,-22,-33}, -{69,-22,-32}, -{69,-22,-31}, -{69,-22,-30}, -{69,-22,-29}, -{69,-22,-28}, -{69,-22,-27}, -{69,-22,-26}, -{69,-22,-25}, -{69,-22,-24}, -{69,-22,-23}, -{69,-22,-22}, -{69,-22,-21}, -{69,-22,-20}, -{69,-22,-19}, -{69,-22,-18}, -{69,-22,-17}, -{69,-22,-16}, -{69,-22,-15}, -{69,-22,-14}, -{69,-22,-13}, -{69,-22,-12}, -{69,-22,-11}, -{69,-22,-10}, -{69,-22,-9}, -{69,-22,-8}, -{69,-22,-7}, -{69,-22,-6}, -{69,-22,-5}, -{69,-22,-4}, -{69,-22,-3}, -{69,-22,-2}, -{69,-22,-1}, -{69,-22,0}, -{69,-22,1}, -{69,-22,2}, -{69,-22,3}, -{69,-22,4}, -{69,-22,5}, -{69,-22,6}, -{69,-22,7}, -{69,-22,8}, -{69,-22,9}, -{69,-22,10}, -{69,-22,11}, -{69,-22,12}, -{69,-22,13}, -{69,-22,14}, -{69,-22,15}, -{69,-22,16}, -{69,-22,17}, -{69,-22,18}, -{69,-22,19}, -{69,-22,20}, -{69,-22,21}, -{69,-22,22}, -{69,-22,23}, -{69,-22,24}, -{69,-22,25}, -{69,-22,26}, -{69,-22,27}, -{69,-22,28}, -{69,-22,29}, -{69,-22,30}, -{69,-22,31}, -{69,-22,32}, -{69,-22,33}, -{69,-22,34}, -{69,-22,35}, -{69,-22,36}, -{69,-22,37}, -{69,-22,38}, -{69,-22,39}, -{69,-22,40}, -{69,-22,41}, -{69,-22,42}, -{69,-22,43}, -{69,-22,44}, -{69,-22,45}, -{69,-22,46}, -{69,-22,47}, -{69,-22,48}, -{69,-22,49}, -{69,-22,50}, -{69,-22,51}, -{69,-22,52}, -{69,-22,53}, -{69,-22,54}, -{69,-22,55}, -{69,-22,56}, -{69,-22,57}, -{69,-22,58}, -{69,-22,59}, -{69,-22,60}, -{69,-22,61}, -{69,-22,62}, -{69,-22,63}, -{69,-22,64}, -{69,-22,65}, -{69,-22,66}, -{69,-22,67}, -{69,-22,68}, -{69,-22,69}, -{69,-22,70}, -{69,-21,-35}, -{69,-21,-34}, -{69,-21,-33}, -{69,-21,-32}, -{69,-21,-31}, -{69,-21,-30}, -{69,-21,-29}, -{69,-21,-28}, -{69,-21,-27}, -{69,-21,-26}, -{69,-21,-25}, -{69,-21,-24}, -{69,-21,-23}, -{69,-21,-22}, -{69,-21,-21}, -{69,-21,-20}, -{69,-21,-19}, -{69,-21,-18}, -{69,-21,-17}, -{69,-21,-16}, -{69,-21,-15}, -{69,-21,-14}, -{69,-21,-13}, -{69,-21,-12}, -{69,-21,-11}, -{69,-21,-10}, -{69,-21,-9}, -{69,-21,-8}, -{69,-21,-7}, -{69,-21,-6}, -{69,-21,-5}, -{69,-21,-4}, -{69,-21,-3}, -{69,-21,-2}, -{69,-21,-1}, -{69,-21,0}, -{69,-21,1}, -{69,-21,2}, -{69,-21,3}, -{69,-21,4}, -{69,-21,5}, -{69,-21,6}, -{69,-21,7}, -{69,-21,8}, -{69,-21,9}, -{69,-21,10}, -{69,-21,11}, -{69,-21,12}, -{69,-21,13}, -{69,-21,14}, -{69,-21,15}, -{69,-21,16}, -{69,-21,17}, -{69,-21,18}, -{69,-21,19}, -{69,-21,20}, -{69,-21,21}, -{69,-21,22}, -{69,-21,23}, -{69,-21,24}, -{69,-21,25}, -{69,-21,26}, -{69,-21,27}, -{69,-21,28}, -{69,-21,29}, -{69,-21,30}, -{69,-21,31}, -{69,-21,32}, -{69,-21,33}, -{69,-21,34}, -{69,-21,35}, -{69,-21,36}, -{69,-21,37}, -{69,-21,38}, -{69,-21,39}, -{69,-21,40}, -{69,-21,41}, -{69,-21,42}, -{69,-21,43}, -{69,-21,44}, -{69,-21,45}, -{69,-21,46}, -{69,-21,47}, -{69,-21,48}, -{69,-21,49}, -{69,-21,50}, -{69,-21,51}, -{69,-21,52}, -{69,-21,53}, -{69,-21,54}, -{69,-21,55}, -{69,-21,56}, -{69,-21,57}, -{69,-21,58}, -{69,-21,59}, -{69,-21,60}, -{69,-21,61}, -{69,-21,62}, -{69,-21,63}, -{69,-21,64}, -{69,-21,65}, -{69,-21,66}, -{69,-21,67}, -{69,-21,68}, -{69,-21,69}, -{69,-21,70}, -{69,-20,-37}, -{69,-20,-36}, -{69,-20,-35}, -{69,-20,-34}, -{69,-20,-33}, -{69,-20,-32}, -{69,-20,-31}, -{69,-20,-30}, -{69,-20,-29}, -{69,-20,-28}, -{69,-20,-27}, -{69,-20,-26}, -{69,-20,-25}, -{69,-20,-24}, -{69,-20,-23}, -{69,-20,-22}, -{69,-20,-21}, -{69,-20,-20}, -{69,-20,-19}, -{69,-20,-18}, -{69,-20,-17}, -{69,-20,-16}, -{69,-20,-15}, -{69,-20,-14}, -{69,-20,-13}, -{69,-20,-12}, -{69,-20,-11}, -{69,-20,-10}, -{69,-20,-9}, -{69,-20,-8}, -{69,-20,-7}, -{69,-20,-6}, -{69,-20,-5}, -{69,-20,-4}, -{69,-20,-3}, -{69,-20,-2}, -{69,-20,-1}, -{69,-20,0}, -{69,-20,1}, -{69,-20,2}, -{69,-20,3}, -{69,-20,4}, -{69,-20,5}, -{69,-20,6}, -{69,-20,7}, -{69,-20,8}, -{69,-20,9}, -{69,-20,10}, -{69,-20,11}, -{69,-20,12}, -{69,-20,13}, -{69,-20,14}, -{69,-20,15}, -{69,-20,16}, -{69,-20,17}, -{69,-20,18}, -{69,-20,19}, -{69,-20,20}, -{69,-20,21}, -{69,-20,22}, -{69,-20,23}, -{69,-20,24}, -{69,-20,25}, -{69,-20,26}, -{69,-20,27}, -{69,-20,28}, -{69,-20,29}, -{69,-20,30}, -{69,-20,31}, -{69,-20,32}, -{69,-20,33}, -{69,-20,34}, -{69,-20,35}, -{69,-20,36}, -{69,-20,37}, -{69,-20,38}, -{69,-20,39}, -{69,-20,40}, -{69,-20,41}, -{69,-20,42}, -{69,-20,43}, -{69,-20,44}, -{69,-20,45}, -{69,-20,46}, -{69,-20,47}, -{69,-20,48}, -{69,-20,49}, -{69,-20,50}, -{69,-20,51}, -{69,-20,52}, -{69,-20,53}, -{69,-20,54}, -{69,-20,55}, -{69,-20,56}, -{69,-20,57}, -{69,-20,58}, -{69,-20,59}, -{69,-20,60}, -{69,-20,61}, -{69,-20,62}, -{69,-20,63}, -{69,-20,64}, -{69,-20,65}, -{69,-20,66}, -{69,-20,67}, -{69,-20,68}, -{69,-20,69}, -{69,-20,70}, -{69,-19,-38}, -{69,-19,-37}, -{69,-19,-36}, -{69,-19,-35}, -{69,-19,-34}, -{69,-19,-33}, -{69,-19,-32}, -{69,-19,-31}, -{69,-19,-30}, -{69,-19,-29}, -{69,-19,-28}, -{69,-19,-27}, -{69,-19,-26}, -{69,-19,-25}, -{69,-19,-24}, -{69,-19,-23}, -{69,-19,-22}, -{69,-19,-21}, -{69,-19,-20}, -{69,-19,-19}, -{69,-19,-18}, -{69,-19,-17}, -{69,-19,-16}, -{69,-19,-15}, -{69,-19,-14}, -{69,-19,-13}, -{69,-19,-12}, -{69,-19,-11}, -{69,-19,-10}, -{69,-19,-9}, -{69,-19,-8}, -{69,-19,-7}, -{69,-19,-6}, -{69,-19,-5}, -{69,-19,-4}, -{69,-19,-3}, -{69,-19,-2}, -{69,-19,-1}, -{69,-19,0}, -{69,-19,1}, -{69,-19,2}, -{69,-19,3}, -{69,-19,4}, -{69,-19,5}, -{69,-19,6}, -{69,-19,7}, -{69,-19,8}, -{69,-19,9}, -{69,-19,10}, -{69,-19,11}, -{69,-19,12}, -{69,-19,13}, -{69,-19,14}, -{69,-19,15}, -{69,-19,16}, -{69,-19,17}, -{69,-19,18}, -{69,-19,19}, -{69,-19,20}, -{69,-19,21}, -{69,-19,22}, -{69,-19,23}, -{69,-19,24}, -{69,-19,25}, -{69,-19,26}, -{69,-19,27}, -{69,-19,28}, -{69,-19,29}, -{69,-19,30}, -{69,-19,31}, -{69,-19,32}, -{69,-19,33}, -{69,-19,34}, -{69,-19,35}, -{69,-19,36}, -{69,-19,37}, -{69,-19,38}, -{69,-19,39}, -{69,-19,40}, -{69,-19,41}, -{69,-19,42}, -{69,-19,43}, -{69,-19,44}, -{69,-19,45}, -{69,-19,46}, -{69,-19,47}, -{69,-19,48}, -{69,-19,49}, -{69,-19,50}, -{69,-19,51}, -{69,-19,52}, -{69,-19,53}, -{69,-19,54}, -{69,-19,55}, -{69,-19,56}, -{69,-19,57}, -{69,-19,58}, -{69,-19,59}, -{69,-19,60}, -{69,-19,61}, -{69,-19,62}, -{69,-19,63}, -{69,-19,64}, -{69,-19,65}, -{69,-19,66}, -{69,-19,67}, -{69,-19,68}, -{69,-19,69}, -{69,-19,70}, -{69,-18,-39}, -{69,-18,-38}, -{69,-18,-37}, -{69,-18,-36}, -{69,-18,-35}, -{69,-18,-34}, -{69,-18,-33}, -{69,-18,-32}, -{69,-18,-31}, -{69,-18,-30}, -{69,-18,-29}, -{69,-18,-28}, -{69,-18,-27}, -{69,-18,-26}, -{69,-18,-25}, -{69,-18,-24}, -{69,-18,-23}, -{69,-18,-22}, -{69,-18,-21}, -{69,-18,-20}, -{69,-18,-19}, -{69,-18,-18}, -{69,-18,-17}, -{69,-18,-16}, -{69,-18,-15}, -{69,-18,-14}, -{69,-18,-13}, -{69,-18,-12}, -{69,-18,-11}, -{69,-18,-10}, -{69,-18,-9}, -{69,-18,-8}, -{69,-18,-7}, -{69,-18,-6}, -{69,-18,-5}, -{69,-18,-4}, -{69,-18,-3}, -{69,-18,-2}, -{69,-18,-1}, -{69,-18,0}, -{69,-18,1}, -{69,-18,2}, -{69,-18,3}, -{69,-18,4}, -{69,-18,5}, -{69,-18,6}, -{69,-18,7}, -{69,-18,8}, -{69,-18,9}, -{69,-18,10}, -{69,-18,11}, -{69,-18,12}, -{69,-18,13}, -{69,-18,14}, -{69,-18,15}, -{69,-18,16}, -{69,-18,17}, -{69,-18,18}, -{69,-18,19}, -{69,-18,20}, -{69,-18,21}, -{69,-18,22}, -{69,-18,23}, -{69,-18,24}, -{69,-18,25}, -{69,-18,26}, -{69,-18,27}, -{69,-18,28}, -{69,-18,29}, -{69,-18,30}, -{69,-18,31}, -{69,-18,32}, -{69,-18,33}, -{69,-18,34}, -{69,-18,35}, -{69,-18,36}, -{69,-18,37}, -{69,-18,38}, -{69,-18,39}, -{69,-18,40}, -{69,-18,41}, -{69,-18,42}, -{69,-18,43}, -{69,-18,44}, -{69,-18,45}, -{69,-18,46}, -{69,-18,47}, -{69,-18,48}, -{69,-18,49}, -{69,-18,50}, -{69,-18,51}, -{69,-18,52}, -{69,-18,53}, -{69,-18,54}, -{69,-18,55}, -{69,-18,56}, -{69,-18,57}, -{69,-18,58}, -{69,-18,59}, -{69,-18,60}, -{69,-18,61}, -{69,-18,62}, -{69,-18,63}, -{69,-18,64}, -{69,-18,65}, -{69,-18,66}, -{69,-18,67}, -{69,-18,68}, -{69,-18,69}, -{69,-18,70}, -{69,-18,71}, -{69,-17,-40}, -{69,-17,-39}, -{69,-17,-38}, -{69,-17,-37}, -{69,-17,-36}, -{69,-17,-35}, -{69,-17,-34}, -{69,-17,-33}, -{69,-17,-32}, -{69,-17,-31}, -{69,-17,-30}, -{69,-17,-29}, -{69,-17,-28}, -{69,-17,-27}, -{69,-17,-26}, -{69,-17,-25}, -{69,-17,-24}, -{69,-17,-23}, -{69,-17,-22}, -{69,-17,-21}, -{69,-17,-20}, -{69,-17,-19}, -{69,-17,-18}, -{69,-17,-17}, -{69,-17,-16}, -{69,-17,-15}, -{69,-17,-14}, -{69,-17,-13}, -{69,-17,-12}, -{69,-17,-11}, -{69,-17,-10}, -{69,-17,-9}, -{69,-17,-8}, -{69,-17,-7}, -{69,-17,-6}, -{69,-17,-5}, -{69,-17,-4}, -{69,-17,-3}, -{69,-17,-2}, -{69,-17,-1}, -{69,-17,0}, -{69,-17,1}, -{69,-17,2}, -{69,-17,3}, -{69,-17,4}, -{69,-17,5}, -{69,-17,6}, -{69,-17,7}, -{69,-17,8}, -{69,-17,9}, -{69,-17,10}, -{69,-17,11}, -{69,-17,12}, -{69,-17,13}, -{69,-17,14}, -{69,-17,15}, -{69,-17,16}, -{69,-17,17}, -{69,-17,18}, -{69,-17,19}, -{69,-17,20}, -{69,-17,21}, -{69,-17,22}, -{69,-17,23}, -{69,-17,24}, -{69,-17,25}, -{69,-17,26}, -{69,-17,27}, -{69,-17,28}, -{69,-17,29}, -{69,-17,30}, -{69,-17,31}, -{69,-17,32}, -{69,-17,33}, -{69,-17,34}, -{69,-17,35}, -{69,-17,36}, -{69,-17,37}, -{69,-17,38}, -{69,-17,39}, -{69,-17,40}, -{69,-17,41}, -{69,-17,42}, -{69,-17,43}, -{69,-17,44}, -{69,-17,45}, -{69,-17,46}, -{69,-17,47}, -{69,-17,48}, -{69,-17,49}, -{69,-17,50}, -{69,-17,51}, -{69,-17,52}, -{69,-17,53}, -{69,-17,54}, -{69,-17,55}, -{69,-17,56}, -{69,-17,57}, -{69,-17,58}, -{69,-17,59}, -{69,-17,60}, -{69,-17,61}, -{69,-17,62}, -{69,-17,63}, -{69,-17,64}, -{69,-17,65}, -{69,-17,66}, -{69,-17,67}, -{69,-17,68}, -{69,-17,69}, -{69,-17,70}, -{69,-17,71}, -{69,-16,-42}, -{69,-16,-41}, -{69,-16,-40}, -{69,-16,-39}, -{69,-16,-38}, -{69,-16,-37}, -{69,-16,-36}, -{69,-16,-35}, -{69,-16,-34}, -{69,-16,-33}, -{69,-16,-32}, -{69,-16,-31}, -{69,-16,-30}, -{69,-16,-29}, -{69,-16,-28}, -{69,-16,-27}, -{69,-16,-26}, -{69,-16,-25}, -{69,-16,-24}, -{69,-16,-23}, -{69,-16,-22}, -{69,-16,-21}, -{69,-16,-20}, -{69,-16,-19}, -{69,-16,-18}, -{69,-16,-17}, -{69,-16,-16}, -{69,-16,-15}, -{69,-16,-14}, -{69,-16,-13}, -{69,-16,-12}, -{69,-16,-11}, -{69,-16,-10}, -{69,-16,-9}, -{69,-16,-8}, -{69,-16,-7}, -{69,-16,-6}, -{69,-16,-5}, -{69,-16,-4}, -{69,-16,-3}, -{69,-16,-2}, -{69,-16,-1}, -{69,-16,0}, -{69,-16,1}, -{69,-16,2}, -{69,-16,3}, -{69,-16,4}, -{69,-16,5}, -{69,-16,6}, -{69,-16,7}, -{69,-16,8}, -{69,-16,9}, -{69,-16,10}, -{69,-16,11}, -{69,-16,12}, -{69,-16,13}, -{69,-16,14}, -{69,-16,15}, -{69,-16,16}, -{69,-16,17}, -{69,-16,18}, -{69,-16,19}, -{69,-16,20}, -{69,-16,21}, -{69,-16,22}, -{69,-16,23}, -{69,-16,24}, -{69,-16,25}, -{69,-16,26}, -{69,-16,27}, -{69,-16,28}, -{69,-16,29}, -{69,-16,30}, -{69,-16,31}, -{69,-16,32}, -{69,-16,33}, -{69,-16,34}, -{69,-16,35}, -{69,-16,36}, -{69,-16,37}, -{69,-16,38}, -{69,-16,39}, -{69,-16,40}, -{69,-16,41}, -{69,-16,42}, -{69,-16,43}, -{69,-16,44}, -{69,-16,45}, -{69,-16,46}, -{69,-16,47}, -{69,-16,48}, -{69,-16,49}, -{69,-16,50}, -{69,-16,51}, -{69,-16,52}, -{69,-16,53}, -{69,-16,54}, -{69,-16,55}, -{69,-16,56}, -{69,-16,57}, -{69,-16,58}, -{69,-16,59}, -{69,-16,60}, -{69,-16,61}, -{69,-16,62}, -{69,-16,63}, -{69,-16,64}, -{69,-16,65}, -{69,-16,66}, -{69,-16,67}, -{69,-16,68}, -{69,-16,69}, -{69,-16,70}, -{69,-16,71}, -{69,-15,-43}, -{69,-15,-42}, -{69,-15,-41}, -{69,-15,-40}, -{69,-15,-39}, -{69,-15,-38}, -{69,-15,-37}, -{69,-15,-36}, -{69,-15,-35}, -{69,-15,-34}, -{69,-15,-33}, -{69,-15,-32}, -{69,-15,-31}, -{69,-15,-30}, -{69,-15,-29}, -{69,-15,-28}, -{69,-15,-27}, -{69,-15,-26}, -{69,-15,-25}, -{69,-15,-24}, -{69,-15,-23}, -{69,-15,-22}, -{69,-15,-21}, -{69,-15,-20}, -{69,-15,-19}, -{69,-15,-18}, -{69,-15,-17}, -{69,-15,-16}, -{69,-15,-15}, -{69,-15,-14}, -{69,-15,-13}, -{69,-15,-12}, -{69,-15,-11}, -{69,-15,-10}, -{69,-15,-9}, -{69,-15,-8}, -{69,-15,-7}, -{69,-15,-6}, -{69,-15,-5}, -{69,-15,-4}, -{69,-15,-3}, -{69,-15,-2}, -{69,-15,-1}, -{69,-15,0}, -{69,-15,1}, -{69,-15,2}, -{69,-15,3}, -{69,-15,4}, -{69,-15,5}, -{69,-15,6}, -{69,-15,7}, -{69,-15,8}, -{69,-15,9}, -{69,-15,10}, -{69,-15,11}, -{69,-15,12}, -{69,-15,13}, -{69,-15,14}, -{69,-15,15}, -{69,-15,16}, -{69,-15,17}, -{69,-15,18}, -{69,-15,19}, -{69,-15,20}, -{69,-15,21}, -{69,-15,22}, -{69,-15,23}, -{69,-15,24}, -{69,-15,25}, -{69,-15,26}, -{69,-15,27}, -{69,-15,28}, -{69,-15,29}, -{69,-15,30}, -{69,-15,31}, -{69,-15,32}, -{69,-15,33}, -{69,-15,34}, -{69,-15,35}, -{69,-15,36}, -{69,-15,37}, -{69,-15,38}, -{69,-15,39}, -{69,-15,40}, -{69,-15,41}, -{69,-15,42}, -{69,-15,43}, -{69,-15,44}, -{69,-15,45}, -{69,-15,46}, -{69,-15,47}, -{69,-15,48}, -{69,-15,49}, -{69,-15,50}, -{69,-15,51}, -{69,-15,52}, -{69,-15,53}, -{69,-15,54}, -{69,-15,55}, -{69,-15,56}, -{69,-15,57}, -{69,-15,58}, -{69,-15,59}, -{69,-15,60}, -{69,-15,61}, -{69,-15,62}, -{69,-15,63}, -{69,-15,64}, -{69,-15,65}, -{69,-15,66}, -{69,-15,67}, -{69,-15,68}, -{69,-15,69}, -{69,-15,70}, -{69,-15,71}, -{69,-14,-44}, -{69,-14,-43}, -{69,-14,-42}, -{69,-14,-41}, -{69,-14,-40}, -{69,-14,-39}, -{69,-14,-38}, -{69,-14,-37}, -{69,-14,-36}, -{69,-14,-35}, -{69,-14,-34}, -{69,-14,-33}, -{69,-14,-32}, -{69,-14,-31}, -{69,-14,-30}, -{69,-14,-29}, -{69,-14,-28}, -{69,-14,-27}, -{69,-14,-26}, -{69,-14,-25}, -{69,-14,-24}, -{69,-14,-23}, -{69,-14,-22}, -{69,-14,-21}, -{69,-14,-20}, -{69,-14,-19}, -{69,-14,-18}, -{69,-14,-17}, -{69,-14,-16}, -{69,-14,-15}, -{69,-14,-14}, -{69,-14,-13}, -{69,-14,-12}, -{69,-14,-11}, -{69,-14,-10}, -{69,-14,-9}, -{69,-14,-8}, -{69,-14,-7}, -{69,-14,-6}, -{69,-14,-5}, -{69,-14,-4}, -{69,-14,-3}, -{69,-14,-2}, -{69,-14,-1}, -{69,-14,0}, -{69,-14,1}, -{69,-14,2}, -{69,-14,3}, -{69,-14,4}, -{69,-14,5}, -{69,-14,6}, -{69,-14,7}, -{69,-14,8}, -{69,-14,9}, -{69,-14,10}, -{69,-14,11}, -{69,-14,12}, -{69,-14,13}, -{69,-14,14}, -{69,-14,15}, -{69,-14,16}, -{69,-14,17}, -{69,-14,18}, -{69,-14,19}, -{69,-14,20}, -{69,-14,21}, -{69,-14,22}, -{69,-14,23}, -{69,-14,24}, -{69,-14,25}, -{69,-14,26}, -{69,-14,27}, -{69,-14,28}, -{69,-14,29}, -{69,-14,30}, -{69,-14,31}, -{69,-14,32}, -{69,-14,33}, -{69,-14,34}, -{69,-14,35}, -{69,-14,36}, -{69,-14,37}, -{69,-14,38}, -{69,-14,39}, -{69,-14,40}, -{69,-14,41}, -{69,-14,42}, -{69,-14,43}, -{69,-14,44}, -{69,-14,45}, -{69,-14,46}, -{69,-14,47}, -{69,-14,48}, -{69,-14,49}, -{69,-14,50}, -{69,-14,51}, -{69,-14,52}, -{69,-14,53}, -{69,-14,54}, -{69,-14,55}, -{69,-14,56}, -{69,-14,57}, -{69,-14,58}, -{69,-14,59}, -{69,-14,60}, -{69,-14,61}, -{69,-14,62}, -{69,-14,63}, -{69,-14,64}, -{69,-14,65}, -{69,-14,66}, -{69,-14,67}, -{69,-14,68}, -{69,-14,69}, -{69,-14,70}, -{69,-14,71}, -{69,-13,-45}, -{69,-13,-44}, -{69,-13,-43}, -{69,-13,-42}, -{69,-13,-41}, -{69,-13,-40}, -{69,-13,-39}, -{69,-13,-38}, -{69,-13,-37}, -{69,-13,-36}, -{69,-13,-35}, -{69,-13,-34}, -{69,-13,-33}, -{69,-13,-32}, -{69,-13,-31}, -{69,-13,-30}, -{69,-13,-29}, -{69,-13,-28}, -{69,-13,-27}, -{69,-13,-26}, -{69,-13,-25}, -{69,-13,-24}, -{69,-13,-23}, -{69,-13,-22}, -{69,-13,-21}, -{69,-13,-20}, -{69,-13,-19}, -{69,-13,-18}, -{69,-13,-17}, -{69,-13,-16}, -{69,-13,-15}, -{69,-13,-14}, -{69,-13,-13}, -{69,-13,-12}, -{69,-13,-11}, -{69,-13,-10}, -{69,-13,-9}, -{69,-13,-8}, -{69,-13,-7}, -{69,-13,-6}, -{69,-13,-5}, -{69,-13,-4}, -{69,-13,-3}, -{69,-13,-2}, -{69,-13,-1}, -{69,-13,0}, -{69,-13,1}, -{69,-13,2}, -{69,-13,3}, -{69,-13,4}, -{69,-13,5}, -{69,-13,6}, -{69,-13,7}, -{69,-13,8}, -{69,-13,9}, -{69,-13,10}, -{69,-13,11}, -{69,-13,12}, -{69,-13,13}, -{69,-13,14}, -{69,-13,15}, -{69,-13,16}, -{69,-13,17}, -{69,-13,18}, -{69,-13,19}, -{69,-13,20}, -{69,-13,21}, -{69,-13,22}, -{69,-13,23}, -{69,-13,24}, -{69,-13,25}, -{69,-13,26}, -{69,-13,27}, -{69,-13,28}, -{69,-13,29}, -{69,-13,30}, -{69,-13,31}, -{69,-13,32}, -{69,-13,33}, -{69,-13,34}, -{69,-13,35}, -{69,-13,36}, -{69,-13,37}, -{69,-13,38}, -{69,-13,39}, -{69,-13,40}, -{69,-13,41}, -{69,-13,42}, -{69,-13,43}, -{69,-13,44}, -{69,-13,45}, -{69,-13,46}, -{69,-13,47}, -{69,-13,48}, -{69,-13,49}, -{69,-13,50}, -{69,-13,51}, -{69,-13,52}, -{69,-13,53}, -{69,-13,54}, -{69,-13,55}, -{69,-13,56}, -{69,-13,57}, -{69,-13,58}, -{69,-13,59}, -{69,-13,60}, -{69,-13,61}, -{69,-13,62}, -{69,-13,63}, -{69,-13,64}, -{69,-13,65}, -{69,-13,66}, -{69,-13,67}, -{69,-13,68}, -{69,-13,69}, -{69,-13,70}, -{69,-13,71}, -{69,-12,-47}, -{69,-12,-46}, -{69,-12,-45}, -{69,-12,-44}, -{69,-12,-43}, -{69,-12,-42}, -{69,-12,-41}, -{69,-12,-40}, -{69,-12,-39}, -{69,-12,-38}, -{69,-12,-37}, -{69,-12,-36}, -{69,-12,-35}, -{69,-12,-34}, -{69,-12,-33}, -{69,-12,-32}, -{69,-12,-31}, -{69,-12,-30}, -{69,-12,-29}, -{69,-12,-28}, -{69,-12,-27}, -{69,-12,-26}, -{69,-12,-25}, -{69,-12,-24}, -{69,-12,-23}, -{69,-12,-22}, -{69,-12,-21}, -{69,-12,-20}, -{69,-12,-19}, -{69,-12,-18}, -{69,-12,-17}, -{69,-12,-16}, -{69,-12,-15}, -{69,-12,-14}, -{69,-12,-13}, -{69,-12,-12}, -{69,-12,-11}, -{69,-12,-10}, -{69,-12,-9}, -{69,-12,-8}, -{69,-12,-7}, -{69,-12,-6}, -{69,-12,-5}, -{69,-12,-4}, -{69,-12,-3}, -{69,-12,-2}, -{69,-12,-1}, -{69,-12,0}, -{69,-12,1}, -{69,-12,2}, -{69,-12,3}, -{69,-12,4}, -{69,-12,5}, -{69,-12,6}, -{69,-12,7}, -{69,-12,8}, -{69,-12,9}, -{69,-12,10}, -{69,-12,11}, -{69,-12,12}, -{69,-12,13}, -{69,-12,14}, -{69,-12,15}, -{69,-12,16}, -{69,-12,17}, -{69,-12,18}, -{69,-12,19}, -{69,-12,20}, -{69,-12,21}, -{69,-12,22}, -{69,-12,23}, -{69,-12,24}, -{69,-12,25}, -{69,-12,26}, -{69,-12,27}, -{69,-12,28}, -{69,-12,29}, -{69,-12,30}, -{69,-12,31}, -{69,-12,32}, -{69,-12,33}, -{69,-12,34}, -{69,-12,35}, -{69,-12,36}, -{69,-12,37}, -{69,-12,38}, -{69,-12,39}, -{69,-12,40}, -{69,-12,41}, -{69,-12,42}, -{69,-12,43}, -{69,-12,44}, -{69,-12,45}, -{69,-12,46}, -{69,-12,47}, -{69,-12,48}, -{69,-12,49}, -{69,-12,50}, -{69,-12,51}, -{69,-12,52}, -{69,-12,53}, -{69,-12,54}, -{69,-12,55}, -{69,-12,56}, -{69,-12,57}, -{69,-12,58}, -{69,-12,59}, -{69,-12,60}, -{69,-12,61}, -{69,-12,62}, -{69,-12,63}, -{69,-12,64}, -{69,-12,65}, -{69,-12,66}, -{69,-12,67}, -{69,-12,68}, -{69,-12,69}, -{69,-12,70}, -{69,-12,71}, -{69,-11,-48}, -{69,-11,-47}, -{69,-11,-46}, -{69,-11,-45}, -{69,-11,-44}, -{69,-11,-43}, -{69,-11,-42}, -{69,-11,-41}, -{69,-11,-40}, -{69,-11,-39}, -{69,-11,-38}, -{69,-11,-37}, -{69,-11,-36}, -{69,-11,-35}, -{69,-11,-34}, -{69,-11,-33}, -{69,-11,-32}, -{69,-11,-31}, -{69,-11,-30}, -{69,-11,-29}, -{69,-11,-28}, -{69,-11,-27}, -{69,-11,-26}, -{69,-11,-25}, -{69,-11,-24}, -{69,-11,-23}, -{69,-11,-22}, -{69,-11,-21}, -{69,-11,-20}, -{69,-11,-19}, -{69,-11,-18}, -{69,-11,-17}, -{69,-11,-16}, -{69,-11,-15}, -{69,-11,-14}, -{69,-11,-13}, -{69,-11,-12}, -{69,-11,-11}, -{69,-11,-10}, -{69,-11,-9}, -{69,-11,-8}, -{69,-11,-7}, -{69,-11,-6}, -{69,-11,-5}, -{69,-11,-4}, -{69,-11,-3}, -{69,-11,-2}, -{69,-11,-1}, -{69,-11,0}, -{69,-11,1}, -{69,-11,2}, -{69,-11,3}, -{69,-11,4}, -{69,-11,5}, -{69,-11,6}, -{69,-11,7}, -{69,-11,8}, -{69,-11,9}, -{69,-11,10}, -{69,-11,11}, -{69,-11,12}, -{69,-11,13}, -{69,-11,14}, -{69,-11,15}, -{69,-11,16}, -{69,-11,17}, -{69,-11,18}, -{69,-11,19}, -{69,-11,20}, -{69,-11,21}, -{69,-11,22}, -{69,-11,23}, -{69,-11,24}, -{69,-11,25}, -{69,-11,26}, -{69,-11,27}, -{69,-11,28}, -{69,-11,29}, -{69,-11,30}, -{69,-11,31}, -{69,-11,32}, -{69,-11,33}, -{69,-11,34}, -{69,-11,35}, -{69,-11,36}, -{69,-11,37}, -{69,-11,38}, -{69,-11,39}, -{69,-11,40}, -{69,-11,41}, -{69,-11,42}, -{69,-11,43}, -{69,-11,44}, -{69,-11,45}, -{69,-11,46}, -{69,-11,47}, -{69,-11,48}, -{69,-11,49}, -{69,-11,50}, -{69,-11,51}, -{69,-11,52}, -{69,-11,53}, -{69,-11,54}, -{69,-11,55}, -{69,-11,56}, -{69,-11,57}, -{69,-11,58}, -{69,-11,59}, -{69,-11,60}, -{69,-11,61}, -{69,-11,62}, -{69,-11,63}, -{69,-11,64}, -{69,-11,65}, -{69,-11,66}, -{69,-11,67}, -{69,-11,68}, -{69,-11,69}, -{69,-11,70}, -{69,-11,71}, -{69,-10,-48}, -{69,-10,-47}, -{69,-10,-46}, -{69,-10,-45}, -{69,-10,-44}, -{69,-10,-43}, -{69,-10,-42}, -{69,-10,-41}, -{69,-10,-40}, -{69,-10,-39}, -{69,-10,-38}, -{69,-10,-37}, -{69,-10,-36}, -{69,-10,-35}, -{69,-10,-34}, -{69,-10,-33}, -{69,-10,-32}, -{69,-10,-31}, -{69,-10,-30}, -{69,-10,-29}, -{69,-10,-28}, -{69,-10,-27}, -{69,-10,-26}, -{69,-10,-25}, -{69,-10,-24}, -{69,-10,-23}, -{69,-10,-22}, -{69,-10,-21}, -{69,-10,-20}, -{69,-10,-19}, -{69,-10,-18}, -{69,-10,-17}, -{69,-10,-16}, -{69,-10,-15}, -{69,-10,-14}, -{69,-10,-13}, -{69,-10,-12}, -{69,-10,-11}, -{69,-10,-10}, -{69,-10,-9}, -{69,-10,-8}, -{69,-10,-7}, -{69,-10,-6}, -{69,-10,-5}, -{69,-10,-4}, -{69,-10,-3}, -{69,-10,-2}, -{69,-10,-1}, -{69,-10,0}, -{69,-10,1}, -{69,-10,2}, -{69,-10,3}, -{69,-10,4}, -{69,-10,5}, -{69,-10,6}, -{69,-10,7}, -{69,-10,8}, -{69,-10,9}, -{69,-10,10}, -{69,-10,11}, -{69,-10,12}, -{69,-10,13}, -{69,-10,14}, -{69,-10,15}, -{69,-10,16}, -{69,-10,17}, -{69,-10,18}, -{69,-10,19}, -{69,-10,20}, -{69,-10,21}, -{69,-10,22}, -{69,-10,23}, -{69,-10,24}, -{69,-10,25}, -{69,-10,26}, -{69,-10,27}, -{69,-10,28}, -{69,-10,29}, -{69,-10,30}, -{69,-10,31}, -{69,-10,32}, -{69,-10,33}, -{69,-10,34}, -{69,-10,35}, -{69,-10,36}, -{69,-10,37}, -{69,-10,38}, -{69,-10,39}, -{69,-10,40}, -{69,-10,41}, -{69,-10,42}, -{69,-10,43}, -{69,-10,44}, -{69,-10,45}, -{69,-10,46}, -{69,-10,47}, -{69,-10,48}, -{69,-10,49}, -{69,-10,50}, -{69,-10,51}, -{69,-10,52}, -{69,-10,53}, -{69,-10,54}, -{69,-10,55}, -{69,-10,56}, -{69,-10,57}, -{69,-10,58}, -{69,-10,59}, -{69,-10,60}, -{69,-10,61}, -{69,-10,62}, -{69,-10,63}, -{69,-10,64}, -{69,-10,65}, -{69,-10,66}, -{69,-10,67}, -{69,-10,68}, -{69,-10,69}, -{69,-10,70}, -{69,-10,71}, -{69,-9,-48}, -{69,-9,-47}, -{69,-9,-46}, -{69,-9,-45}, -{69,-9,-44}, -{69,-9,-43}, -{69,-9,-42}, -{69,-9,-41}, -{69,-9,-40}, -{69,-9,-39}, -{69,-9,-38}, -{69,-9,-37}, -{69,-9,-36}, -{69,-9,-35}, -{69,-9,-34}, -{69,-9,-33}, -{69,-9,-32}, -{69,-9,-31}, -{69,-9,-30}, -{69,-9,-29}, -{69,-9,-28}, -{69,-9,-27}, -{69,-9,-26}, -{69,-9,-25}, -{69,-9,-24}, -{69,-9,-23}, -{69,-9,-22}, -{69,-9,-21}, -{69,-9,-20}, -{69,-9,-19}, -{69,-9,-18}, -{69,-9,-17}, -{69,-9,-16}, -{69,-9,-15}, -{69,-9,-14}, -{69,-9,-13}, -{69,-9,-12}, -{69,-9,-11}, -{69,-9,-10}, -{69,-9,-9}, -{69,-9,-8}, -{69,-9,-7}, -{69,-9,-6}, -{69,-9,-5}, -{69,-9,-4}, -{69,-9,-3}, -{69,-9,-2}, -{69,-9,-1}, -{69,-9,0}, -{69,-9,1}, -{69,-9,2}, -{69,-9,3}, -{69,-9,4}, -{69,-9,5}, -{69,-9,6}, -{69,-9,7}, -{69,-9,8}, -{69,-9,9}, -{69,-9,10}, -{69,-9,11}, -{69,-9,12}, -{69,-9,13}, -{69,-9,14}, -{69,-9,15}, -{69,-9,16}, -{69,-9,17}, -{69,-9,18}, -{69,-9,19}, -{69,-9,20}, -{69,-9,21}, -{69,-9,22}, -{69,-9,23}, -{69,-9,24}, -{69,-9,25}, -{69,-9,26}, -{69,-9,27}, -{69,-9,28}, -{69,-9,29}, -{69,-9,30}, -{69,-9,31}, -{69,-9,32}, -{69,-9,33}, -{69,-9,34}, -{69,-9,35}, -{69,-9,36}, -{69,-9,37}, -{69,-9,38}, -{69,-9,39}, -{69,-9,40}, -{69,-9,41}, -{69,-9,42}, -{69,-9,43}, -{69,-9,44}, -{69,-9,45}, -{69,-9,46}, -{69,-9,47}, -{69,-9,48}, -{69,-9,49}, -{69,-9,50}, -{69,-9,51}, -{69,-9,52}, -{69,-9,53}, -{69,-9,54}, -{69,-9,55}, -{69,-9,56}, -{69,-9,57}, -{69,-9,58}, -{69,-9,59}, -{69,-9,60}, -{69,-9,61}, -{69,-9,62}, -{69,-9,63}, -{69,-9,64}, -{69,-9,65}, -{69,-9,66}, -{69,-9,67}, -{69,-9,68}, -{69,-9,69}, -{69,-9,70}, -{69,-9,71}, -{69,-8,-48}, -{69,-8,-47}, -{69,-8,-46}, -{69,-8,-45}, -{69,-8,-44}, -{69,-8,-43}, -{69,-8,-42}, -{69,-8,-41}, -{69,-8,-40}, -{69,-8,-39}, -{69,-8,-38}, -{69,-8,-37}, -{69,-8,-36}, -{69,-8,-35}, -{69,-8,-34}, -{69,-8,-33}, -{69,-8,-32}, -{69,-8,-31}, -{69,-8,-30}, -{69,-8,-29}, -{69,-8,-28}, -{69,-8,-27}, -{69,-8,-26}, -{69,-8,-25}, -{69,-8,-24}, -{69,-8,-23}, -{69,-8,-22}, -{69,-8,-21}, -{69,-8,-20}, -{69,-8,-19}, -{69,-8,-18}, -{69,-8,-17}, -{69,-8,-16}, -{69,-8,-15}, -{69,-8,-14}, -{69,-8,-13}, -{69,-8,-12}, -{69,-8,-11}, -{69,-8,-10}, -{69,-8,-9}, -{69,-8,-8}, -{69,-8,-7}, -{69,-8,-6}, -{69,-8,-5}, -{69,-8,-4}, -{69,-8,-3}, -{69,-8,-2}, -{69,-8,-1}, -{69,-8,0}, -{69,-8,1}, -{69,-8,2}, -{69,-8,3}, -{69,-8,4}, -{69,-8,5}, -{69,-8,6}, -{69,-8,7}, -{69,-8,8}, -{69,-8,9}, -{69,-8,10}, -{69,-8,11}, -{69,-8,12}, -{69,-8,13}, -{69,-8,14}, -{69,-8,15}, -{69,-8,16}, -{69,-8,17}, -{69,-8,18}, -{69,-8,19}, -{69,-8,20}, -{69,-8,21}, -{69,-8,22}, -{69,-8,23}, -{69,-8,24}, -{69,-8,25}, -{69,-8,26}, -{69,-8,27}, -{69,-8,28}, -{69,-8,29}, -{69,-8,30}, -{69,-8,31}, -{69,-8,32}, -{69,-8,33}, -{69,-8,34}, -{69,-8,35}, -{69,-8,36}, -{69,-8,37}, -{69,-8,38}, -{69,-8,39}, -{69,-8,40}, -{69,-8,41}, -{69,-8,42}, -{69,-8,43}, -{69,-8,44}, -{69,-8,45}, -{69,-8,46}, -{69,-8,47}, -{69,-8,48}, -{69,-8,49}, -{69,-8,50}, -{69,-8,51}, -{69,-8,52}, -{69,-8,53}, -{69,-8,54}, -{69,-8,55}, -{69,-8,56}, -{69,-8,57}, -{69,-8,58}, -{69,-8,59}, -{69,-8,60}, -{69,-8,61}, -{69,-8,62}, -{69,-8,63}, -{69,-8,64}, -{69,-8,65}, -{69,-8,66}, -{69,-8,67}, -{69,-8,68}, -{69,-8,69}, -{69,-8,70}, -{69,-8,71}, -{69,-7,-48}, -{69,-7,-47}, -{69,-7,-46}, -{69,-7,-45}, -{69,-7,-44}, -{69,-7,-43}, -{69,-7,-42}, -{69,-7,-41}, -{69,-7,-40}, -{69,-7,-39}, -{69,-7,-38}, -{69,-7,-37}, -{69,-7,-36}, -{69,-7,-35}, -{69,-7,-34}, -{69,-7,-33}, -{69,-7,-32}, -{69,-7,-31}, -{69,-7,-30}, -{69,-7,-29}, -{69,-7,-28}, -{69,-7,-27}, -{69,-7,-26}, -{69,-7,-25}, -{69,-7,-24}, -{69,-7,-23}, -{69,-7,-22}, -{69,-7,-21}, -{69,-7,-20}, -{69,-7,-19}, -{69,-7,-18}, -{69,-7,-17}, -{69,-7,-16}, -{69,-7,-15}, -{69,-7,-14}, -{69,-7,-13}, -{69,-7,-12}, -{69,-7,-11}, -{69,-7,-10}, -{69,-7,-9}, -{69,-7,-8}, -{69,-7,-7}, -{69,-7,-6}, -{69,-7,-5}, -{69,-7,-4}, -{69,-7,-3}, -{69,-7,-2}, -{69,-7,-1}, -{69,-7,0}, -{69,-7,1}, -{69,-7,2}, -{69,-7,3}, -{69,-7,4}, -{69,-7,5}, -{69,-7,6}, -{69,-7,7}, -{69,-7,8}, -{69,-7,9}, -{69,-7,10}, -{69,-7,11}, -{69,-7,12}, -{69,-7,13}, -{69,-7,14}, -{69,-7,15}, -{69,-7,16}, -{69,-7,17}, -{69,-7,18}, -{69,-7,19}, -{69,-7,20}, -{69,-7,21}, -{69,-7,22}, -{69,-7,23}, -{69,-7,24}, -{69,-7,25}, -{69,-7,26}, -{69,-7,27}, -{69,-7,28}, -{69,-7,29}, -{69,-7,30}, -{69,-7,31}, -{69,-7,32}, -{69,-7,33}, -{69,-7,34}, -{69,-7,35}, -{69,-7,36}, -{69,-7,37}, -{69,-7,38}, -{69,-7,39}, -{69,-7,40}, -{69,-7,41}, -{69,-7,42}, -{69,-7,43}, -{69,-7,44}, -{69,-7,45}, -{69,-7,46}, -{69,-7,47}, -{69,-7,48}, -{69,-7,49}, -{69,-7,50}, -{69,-7,51}, -{69,-7,52}, -{69,-7,53}, -{69,-7,54}, -{69,-7,55}, -{69,-7,56}, -{69,-7,57}, -{69,-7,58}, -{69,-7,59}, -{69,-7,60}, -{69,-7,61}, -{69,-7,62}, -{69,-7,63}, -{69,-7,64}, -{69,-7,65}, -{69,-7,66}, -{69,-7,67}, -{69,-7,68}, -{69,-7,69}, -{69,-7,70}, -{69,-7,71}, -{69,-6,-48}, -{69,-6,-47}, -{69,-6,-46}, -{69,-6,-45}, -{69,-6,-44}, -{69,-6,-43}, -{69,-6,-42}, -{69,-6,-41}, -{69,-6,-40}, -{69,-6,-39}, -{69,-6,-38}, -{69,-6,-37}, -{69,-6,-36}, -{69,-6,-35}, -{69,-6,-34}, -{69,-6,-33}, -{69,-6,-32}, -{69,-6,-31}, -{69,-6,-30}, -{69,-6,-29}, -{69,-6,-28}, -{69,-6,-27}, -{69,-6,-26}, -{69,-6,-25}, -{69,-6,-24}, -{69,-6,-23}, -{69,-6,-22}, -{69,-6,-21}, -{69,-6,-20}, -{69,-6,-19}, -{69,-6,-18}, -{69,-6,-17}, -{69,-6,-16}, -{69,-6,-15}, -{69,-6,-14}, -{69,-6,-13}, -{69,-6,-12}, -{69,-6,-11}, -{69,-6,-10}, -{69,-6,-9}, -{69,-6,-8}, -{69,-6,-7}, -{69,-6,-6}, -{69,-6,-5}, -{69,-6,-4}, -{69,-6,-3}, -{69,-6,-2}, -{69,-6,-1}, -{69,-6,0}, -{69,-6,1}, -{69,-6,2}, -{69,-6,3}, -{69,-6,4}, -{69,-6,5}, -{69,-6,6}, -{69,-6,7}, -{69,-6,8}, -{69,-6,9}, -{69,-6,10}, -{69,-6,11}, -{69,-6,12}, -{69,-6,13}, -{69,-6,14}, -{69,-6,15}, -{69,-6,16}, -{69,-6,17}, -{69,-6,18}, -{69,-6,19}, -{69,-6,20}, -{69,-6,21}, -{69,-6,22}, -{69,-6,23}, -{69,-6,24}, -{69,-6,25}, -{69,-6,26}, -{69,-6,27}, -{69,-6,28}, -{69,-6,29}, -{69,-6,30}, -{69,-6,31}, -{69,-6,32}, -{69,-6,33}, -{69,-6,34}, -{69,-6,35}, -{69,-6,36}, -{69,-6,37}, -{69,-6,38}, -{69,-6,39}, -{69,-6,40}, -{69,-6,41}, -{69,-6,42}, -{69,-6,43}, -{69,-6,44}, -{69,-6,45}, -{69,-6,46}, -{69,-6,47}, -{69,-6,48}, -{69,-6,49}, -{69,-6,50}, -{69,-6,51}, -{69,-6,52}, -{69,-6,53}, -{69,-6,54}, -{69,-6,55}, -{69,-6,56}, -{69,-6,57}, -{69,-6,58}, -{69,-6,59}, -{69,-6,60}, -{69,-6,61}, -{69,-6,62}, -{69,-6,63}, -{69,-6,64}, -{69,-6,65}, -{69,-6,66}, -{69,-6,67}, -{69,-6,68}, -{69,-6,69}, -{69,-6,70}, -{69,-6,71}, -{69,-5,-48}, -{69,-5,-47}, -{69,-5,-46}, -{69,-5,-45}, -{69,-5,-44}, -{69,-5,-43}, -{69,-5,-42}, -{69,-5,-41}, -{69,-5,-40}, -{69,-5,-39}, -{69,-5,-38}, -{69,-5,-37}, -{69,-5,-36}, -{69,-5,-35}, -{69,-5,-34}, -{69,-5,-33}, -{69,-5,-32}, -{69,-5,-31}, -{69,-5,-30}, -{69,-5,-29}, -{69,-5,-28}, -{69,-5,-27}, -{69,-5,-26}, -{69,-5,-25}, -{69,-5,-24}, -{69,-5,-23}, -{69,-5,-22}, -{69,-5,-21}, -{69,-5,-20}, -{69,-5,-19}, -{69,-5,-18}, -{69,-5,-17}, -{69,-5,-16}, -{69,-5,-15}, -{69,-5,-14}, -{69,-5,-13}, -{69,-5,-12}, -{69,-5,-11}, -{69,-5,-10}, -{69,-5,-9}, -{69,-5,-8}, -{69,-5,-7}, -{69,-5,-6}, -{69,-5,-5}, -{69,-5,-4}, -{69,-5,-3}, -{69,-5,-2}, -{69,-5,-1}, -{69,-5,0}, -{69,-5,1}, -{69,-5,2}, -{69,-5,3}, -{69,-5,4}, -{69,-5,5}, -{69,-5,6}, -{69,-5,7}, -{69,-5,8}, -{69,-5,9}, -{69,-5,10}, -{69,-5,11}, -{69,-5,12}, -{69,-5,13}, -{69,-5,14}, -{69,-5,15}, -{69,-5,16}, -{69,-5,17}, -{69,-5,18}, -{69,-5,19}, -{69,-5,20}, -{69,-5,21}, -{69,-5,22}, -{69,-5,23}, -{69,-5,24}, -{69,-5,25}, -{69,-5,26}, -{69,-5,27}, -{69,-5,28}, -{69,-5,29}, -{69,-5,30}, -{69,-5,31}, -{69,-5,32}, -{69,-5,33}, -{69,-5,34}, -{69,-5,35}, -{69,-5,36}, -{69,-5,37}, -{69,-5,38}, -{69,-5,39}, -{69,-5,40}, -{69,-5,41}, -{69,-5,42}, -{69,-5,43}, -{69,-5,44}, -{69,-5,45}, -{69,-5,46}, -{69,-5,47}, -{69,-5,48}, -{69,-5,49}, -{69,-5,50}, -{69,-5,51}, -{69,-5,52}, -{69,-5,53}, -{69,-5,54}, -{69,-5,55}, -{69,-5,56}, -{69,-5,57}, -{69,-5,58}, -{69,-5,59}, -{69,-5,60}, -{69,-5,61}, -{69,-5,62}, -{69,-5,63}, -{69,-5,64}, -{69,-5,65}, -{69,-5,66}, -{69,-5,67}, -{69,-5,68}, -{69,-5,69}, -{69,-5,70}, -{69,-5,71}, -{69,-4,-48}, -{69,-4,-47}, -{69,-4,-46}, -{69,-4,-45}, -{69,-4,-44}, -{69,-4,-43}, -{69,-4,-42}, -{69,-4,-41}, -{69,-4,-40}, -{69,-4,-39}, -{69,-4,-38}, -{69,-4,-37}, -{69,-4,-36}, -{69,-4,-35}, -{69,-4,-34}, -{69,-4,-33}, -{69,-4,-32}, -{69,-4,-31}, -{69,-4,-30}, -{69,-4,-29}, -{69,-4,-28}, -{69,-4,-27}, -{69,-4,-26}, -{69,-4,-25}, -{69,-4,-24}, -{69,-4,-23}, -{69,-4,-22}, -{69,-4,-21}, -{69,-4,-20}, -{69,-4,-19}, -{69,-4,-18}, -{69,-4,-17}, -{69,-4,-16}, -{69,-4,-15}, -{69,-4,-14}, -{69,-4,-13}, -{69,-4,-12}, -{69,-4,-11}, -{69,-4,-10}, -{69,-4,-9}, -{69,-4,-8}, -{69,-4,-7}, -{69,-4,-6}, -{69,-4,-5}, -{69,-4,-4}, -{69,-4,-3}, -{69,-4,-2}, -{69,-4,-1}, -{69,-4,0}, -{69,-4,1}, -{69,-4,2}, -{69,-4,3}, -{69,-4,4}, -{69,-4,5}, -{69,-4,6}, -{69,-4,7}, -{69,-4,8}, -{69,-4,9}, -{69,-4,10}, -{69,-4,11}, -{69,-4,12}, -{69,-4,13}, -{69,-4,14}, -{69,-4,15}, -{69,-4,16}, -{69,-4,17}, -{69,-4,18}, -{69,-4,19}, -{69,-4,20}, -{69,-4,21}, -{69,-4,22}, -{69,-4,23}, -{69,-4,24}, -{69,-4,25}, -{69,-4,26}, -{69,-4,27}, -{69,-4,28}, -{69,-4,29}, -{69,-4,30}, -{69,-4,31}, -{69,-4,32}, -{69,-4,33}, -{69,-4,34}, -{69,-4,35}, -{69,-4,36}, -{69,-4,37}, -{69,-4,38}, -{69,-4,39}, -{69,-4,40}, -{69,-4,41}, -{69,-4,42}, -{69,-4,43}, -{69,-4,44}, -{69,-4,45}, -{69,-4,46}, -{69,-4,47}, -{69,-4,48}, -{69,-4,49}, -{69,-4,50}, -{69,-4,51}, -{69,-4,52}, -{69,-4,53}, -{69,-4,54}, -{69,-4,55}, -{69,-4,56}, -{69,-4,57}, -{69,-4,58}, -{69,-4,59}, -{69,-4,60}, -{69,-4,61}, -{69,-4,62}, -{69,-4,63}, -{69,-4,64}, -{69,-4,65}, -{69,-4,66}, -{69,-4,67}, -{69,-4,68}, -{69,-4,69}, -{69,-4,70}, -{69,-4,71}, -{69,-3,-48}, -{69,-3,-47}, -{69,-3,-46}, -{69,-3,-45}, -{69,-3,-44}, -{69,-3,-43}, -{69,-3,-42}, -{69,-3,-41}, -{69,-3,-40}, -{69,-3,-39}, -{69,-3,-38}, -{69,-3,-37}, -{69,-3,-36}, -{69,-3,-35}, -{69,-3,-34}, -{69,-3,-33}, -{69,-3,-32}, -{69,-3,-31}, -{69,-3,-30}, -{69,-3,-29}, -{69,-3,-28}, -{69,-3,-27}, -{69,-3,-26}, -{69,-3,-25}, -{69,-3,-24}, -{69,-3,-23}, -{69,-3,-22}, -{69,-3,-21}, -{69,-3,-20}, -{69,-3,-19}, -{69,-3,-18}, -{69,-3,-17}, -{69,-3,-16}, -{69,-3,-15}, -{69,-3,-14}, -{69,-3,-13}, -{69,-3,-12}, -{69,-3,-11}, -{69,-3,-10}, -{69,-3,-9}, -{69,-3,-8}, -{69,-3,-7}, -{69,-3,-6}, -{69,-3,-5}, -{69,-3,-4}, -{69,-3,-3}, -{69,-3,-2}, -{69,-3,-1}, -{69,-3,0}, -{69,-3,1}, -{69,-3,2}, -{69,-3,3}, -{69,-3,4}, -{69,-3,5}, -{69,-3,6}, -{69,-3,7}, -{69,-3,8}, -{69,-3,9}, -{69,-3,10}, -{69,-3,11}, -{69,-3,12}, -{69,-3,13}, -{69,-3,14}, -{69,-3,15}, -{69,-3,16}, -{69,-3,17}, -{69,-3,18}, -{69,-3,19}, -{69,-3,20}, -{69,-3,21}, -{69,-3,22}, -{69,-3,23}, -{69,-3,24}, -{69,-3,25}, -{69,-3,26}, -{69,-3,27}, -{69,-3,28}, -{69,-3,29}, -{69,-3,30}, -{69,-3,31}, -{69,-3,32}, -{69,-3,33}, -{69,-3,34}, -{69,-3,35}, -{69,-3,36}, -{69,-3,37}, -{69,-3,38}, -{69,-3,39}, -{69,-3,40}, -{69,-3,41}, -{69,-3,42}, -{69,-3,43}, -{69,-3,44}, -{69,-3,45}, -{69,-3,46}, -{69,-3,47}, -{69,-3,48}, -{69,-3,49}, -{69,-3,50}, -{69,-3,51}, -{69,-3,52}, -{69,-3,53}, -{69,-3,54}, -{69,-3,55}, -{69,-3,56}, -{69,-3,57}, -{69,-3,58}, -{69,-3,59}, -{69,-3,60}, -{69,-3,61}, -{69,-3,62}, -{69,-3,63}, -{69,-3,64}, -{69,-3,65}, -{69,-3,66}, -{69,-3,67}, -{69,-3,68}, -{69,-3,69}, -{69,-3,70}, -{69,-3,71}, -{69,-3,72}, -{69,-2,-48}, -{69,-2,-47}, -{69,-2,-46}, -{69,-2,-45}, -{69,-2,-44}, -{69,-2,-43}, -{69,-2,-42}, -{69,-2,-41}, -{69,-2,-40}, -{69,-2,-39}, -{69,-2,-38}, -{69,-2,-37}, -{69,-2,-36}, -{69,-2,-35}, -{69,-2,-34}, -{69,-2,-33}, -{69,-2,-32}, -{69,-2,-31}, -{69,-2,-30}, -{69,-2,-29}, -{69,-2,-28}, -{69,-2,-27}, -{69,-2,-26}, -{69,-2,-25}, -{69,-2,-24}, -{69,-2,-23}, -{69,-2,-22}, -{69,-2,-21}, -{69,-2,-20}, -{69,-2,-19}, -{69,-2,-18}, -{69,-2,-17}, -{69,-2,-16}, -{69,-2,-15}, -{69,-2,-14}, -{69,-2,-13}, -{69,-2,-12}, -{69,-2,-11}, -{69,-2,-10}, -{69,-2,-9}, -{69,-2,-8}, -{69,-2,-7}, -{69,-2,-6}, -{69,-2,-5}, -{69,-2,-4}, -{69,-2,-3}, -{69,-2,-2}, -{69,-2,-1}, -{69,-2,0}, -{69,-2,1}, -{69,-2,2}, -{69,-2,3}, -{69,-2,4}, -{69,-2,5}, -{69,-2,6}, -{69,-2,7}, -{69,-2,8}, -{69,-2,9}, -{69,-2,10}, -{69,-2,11}, -{69,-2,12}, -{69,-2,13}, -{69,-2,14}, -{69,-2,15}, -{69,-2,16}, -{69,-2,17}, -{69,-2,18}, -{69,-2,19}, -{69,-2,20}, -{69,-2,21}, -{69,-2,22}, -{69,-2,23}, -{69,-2,24}, -{69,-2,25}, -{69,-2,26}, -{69,-2,27}, -{69,-2,28}, -{69,-2,29}, -{69,-2,30}, -{69,-2,31}, -{69,-2,32}, -{69,-2,33}, -{69,-2,34}, -{69,-2,35}, -{69,-2,36}, -{69,-2,37}, -{69,-2,38}, -{69,-2,39}, -{69,-2,40}, -{69,-2,41}, -{69,-2,42}, -{69,-2,43}, -{69,-2,44}, -{69,-2,45}, -{69,-2,46}, -{69,-2,47}, -{69,-2,48}, -{69,-2,49}, -{69,-2,50}, -{69,-2,51}, -{69,-2,52}, -{69,-2,53}, -{69,-2,54}, -{69,-2,55}, -{69,-2,56}, -{69,-2,57}, -{69,-2,58}, -{69,-2,59}, -{69,-2,60}, -{69,-2,61}, -{69,-2,62}, -{69,-2,63}, -{69,-2,64}, -{69,-2,65}, -{69,-2,66}, -{69,-2,67}, -{69,-2,68}, -{69,-2,69}, -{69,-2,70}, -{69,-2,71}, -{69,-2,72}, -{69,-1,-48}, -{69,-1,-47}, -{69,-1,-46}, -{69,-1,-45}, -{69,-1,-44}, -{69,-1,-43}, -{69,-1,-42}, -{69,-1,-41}, -{69,-1,-40}, -{69,-1,-39}, -{69,-1,-38}, -{69,-1,-37}, -{69,-1,-36}, -{69,-1,-35}, -{69,-1,-34}, -{69,-1,-33}, -{69,-1,-32}, -{69,-1,-31}, -{69,-1,-30}, -{69,-1,-29}, -{69,-1,-28}, -{69,-1,-27}, -{69,-1,-26}, -{69,-1,-25}, -{69,-1,-24}, -{69,-1,-23}, -{69,-1,-22}, -{69,-1,-21}, -{69,-1,-20}, -{69,-1,-19}, -{69,-1,-18}, -{69,-1,-17}, -{69,-1,-16}, -{69,-1,-15}, -{69,-1,-14}, -{69,-1,-13}, -{69,-1,-12}, -{69,-1,-11}, -{69,-1,-10}, -{69,-1,-9}, -{69,-1,-8}, -{69,-1,-7}, -{69,-1,-6}, -{69,-1,-5}, -{69,-1,-4}, -{69,-1,-3}, -{69,-1,-2}, -{69,-1,-1}, -{69,-1,0}, -{69,-1,1}, -{69,-1,2}, -{69,-1,3}, -{69,-1,4}, -{69,-1,5}, -{69,-1,6}, -{69,-1,7}, -{69,-1,8}, -{69,-1,9}, -{69,-1,10}, -{69,-1,11}, -{69,-1,12}, -{69,-1,13}, -{69,-1,14}, -{69,-1,15}, -{69,-1,16}, -{69,-1,17}, -{69,-1,18}, -{69,-1,19}, -{69,-1,20}, -{69,-1,21}, -{69,-1,22}, -{69,-1,23}, -{69,-1,24}, -{69,-1,25}, -{69,-1,26}, -{69,-1,27}, -{69,-1,28}, -{69,-1,29}, -{69,-1,30}, -{69,-1,31}, -{69,-1,32}, -{69,-1,33}, -{69,-1,34}, -{69,-1,35}, -{69,-1,36}, -{69,-1,37}, -{69,-1,38}, -{69,-1,39}, -{69,-1,40}, -{69,-1,41}, -{69,-1,42}, -{69,-1,43}, -{69,-1,44}, -{69,-1,45}, -{69,-1,46}, -{69,-1,47}, -{69,-1,48}, -{69,-1,49}, -{69,-1,50}, -{69,-1,51}, -{69,-1,52}, -{69,-1,53}, -{69,-1,54}, -{69,-1,55}, -{69,-1,56}, -{69,-1,57}, -{69,-1,58}, -{69,-1,59}, -{69,-1,60}, -{69,-1,61}, -{69,-1,62}, -{69,-1,63}, -{69,-1,64}, -{69,-1,65}, -{69,-1,66}, -{69,-1,67}, -{69,-1,68}, -{69,-1,69}, -{69,-1,70}, -{69,-1,71}, -{69,-1,72}, -{69,0,-48}, -{69,0,-47}, -{69,0,-46}, -{69,0,-45}, -{69,0,-44}, -{69,0,-43}, -{69,0,-42}, -{69,0,-41}, -{69,0,-40}, -{69,0,-39}, -{69,0,-38}, -{69,0,-37}, -{69,0,-36}, -{69,0,-35}, -{69,0,-34}, -{69,0,-33}, -{69,0,-32}, -{69,0,-31}, -{69,0,-30}, -{69,0,-29}, -{69,0,-28}, -{69,0,-27}, -{69,0,-26}, -{69,0,-25}, -{69,0,-24}, -{69,0,-23}, -{69,0,-22}, -{69,0,-21}, -{69,0,-20}, -{69,0,-19}, -{69,0,-18}, -{69,0,-17}, -{69,0,-16}, -{69,0,-15}, -{69,0,-14}, -{69,0,-13}, -{69,0,-12}, -{69,0,-11}, -{69,0,-10}, -{69,0,-9}, -{69,0,-8}, -{69,0,-7}, -{69,0,-6}, -{69,0,-5}, -{69,0,-4}, -{69,0,-3}, -{69,0,-2}, -{69,0,-1}, -{69,0,0}, -{69,0,1}, -{69,0,2}, -{69,0,3}, -{69,0,4}, -{69,0,5}, -{69,0,6}, -{69,0,7}, -{69,0,8}, -{69,0,9}, -{69,0,10}, -{69,0,11}, -{69,0,12}, -{69,0,13}, -{69,0,14}, -{69,0,15}, -{69,0,16}, -{69,0,17}, -{69,0,18}, -{69,0,19}, -{69,0,20}, -{69,0,21}, -{69,0,22}, -{69,0,23}, -{69,0,24}, -{69,0,25}, -{69,0,26}, -{69,0,27}, -{69,0,28}, -{69,0,29}, -{69,0,30}, -{69,0,31}, -{69,0,32}, -{69,0,33}, -{69,0,34}, -{69,0,35}, -{69,0,36}, -{69,0,37}, -{69,0,38}, -{69,0,39}, -{69,0,40}, -{69,0,41}, -{69,0,42}, -{69,0,43}, -{69,0,44}, -{69,0,45}, -{69,0,46}, -{69,0,47}, -{69,0,48}, -{69,0,49}, -{69,0,50}, -{69,0,51}, -{69,0,52}, -{69,0,53}, -{69,0,54}, -{69,0,55}, -{69,0,56}, -{69,0,57}, -{69,0,58}, -{69,0,59}, -{69,0,60}, -{69,0,61}, -{69,0,62}, -{69,0,63}, -{69,0,64}, -{69,0,65}, -{69,0,66}, -{69,0,67}, -{69,0,68}, -{69,0,69}, -{69,0,70}, -{69,0,71}, -{69,0,72}, -{69,1,-48}, -{69,1,-47}, -{69,1,-46}, -{69,1,-45}, -{69,1,-44}, -{69,1,-43}, -{69,1,-42}, -{69,1,-41}, -{69,1,-40}, -{69,1,-39}, -{69,1,-38}, -{69,1,-37}, -{69,1,-36}, -{69,1,-35}, -{69,1,-34}, -{69,1,-33}, -{69,1,-32}, -{69,1,-31}, -{69,1,-30}, -{69,1,-29}, -{69,1,-28}, -{69,1,-27}, -{69,1,-26}, -{69,1,-25}, -{69,1,-24}, -{69,1,-23}, -{69,1,-22}, -{69,1,-21}, -{69,1,-20}, -{69,1,-19}, -{69,1,-18}, -{69,1,-17}, -{69,1,-16}, -{69,1,-15}, -{69,1,-14}, -{69,1,-13}, -{69,1,-12}, -{69,1,-11}, -{69,1,-10}, -{69,1,-9}, -{69,1,-8}, -{69,1,-7}, -{69,1,-6}, -{69,1,-5}, -{69,1,-4}, -{69,1,-3}, -{69,1,-2}, -{69,1,-1}, -{69,1,0}, -{69,1,1}, -{69,1,2}, -{69,1,3}, -{69,1,4}, -{69,1,5}, -{69,1,6}, -{69,1,7}, -{69,1,8}, -{69,1,9}, -{69,1,10}, -{69,1,11}, -{69,1,12}, -{69,1,13}, -{69,1,14}, -{69,1,15}, -{69,1,16}, -{69,1,17}, -{69,1,18}, -{69,1,19}, -{69,1,20}, -{69,1,21}, -{69,1,22}, -{69,1,23}, -{69,1,24}, -{69,1,25}, -{69,1,26}, -{69,1,27}, -{69,1,28}, -{69,1,29}, -{69,1,30}, -{69,1,31}, -{69,1,32}, -{69,1,33}, -{69,1,34}, -{69,1,35}, -{69,1,36}, -{69,1,37}, -{69,1,38}, -{69,1,39}, -{69,1,40}, -{69,1,41}, -{69,1,42}, -{69,1,43}, -{69,1,44}, -{69,1,45}, -{69,1,46}, -{69,1,47}, -{69,1,48}, -{69,1,49}, -{69,1,50}, -{69,1,51}, -{69,1,52}, -{69,1,53}, -{69,1,54}, -{69,1,55}, -{69,1,56}, -{69,1,57}, -{69,1,58}, -{69,1,59}, -{69,1,60}, -{69,1,61}, -{69,1,62}, -{69,1,63}, -{69,1,64}, -{69,1,65}, -{69,1,66}, -{69,1,67}, -{69,1,68}, -{69,1,69}, -{69,1,70}, -{69,1,71}, -{69,1,72}, -{69,2,-48}, -{69,2,-47}, -{69,2,-46}, -{69,2,-45}, -{69,2,-44}, -{69,2,-43}, -{69,2,-42}, -{69,2,-41}, -{69,2,-40}, -{69,2,-39}, -{69,2,-38}, -{69,2,-37}, -{69,2,-36}, -{69,2,-35}, -{69,2,-34}, -{69,2,-33}, -{69,2,-32}, -{69,2,-31}, -{69,2,-30}, -{69,2,-29}, -{69,2,-28}, -{69,2,-27}, -{69,2,-26}, -{69,2,-25}, -{69,2,-24}, -{69,2,-23}, -{69,2,-22}, -{69,2,-21}, -{69,2,-20}, -{69,2,-19}, -{69,2,-18}, -{69,2,-17}, -{69,2,-16}, -{69,2,-15}, -{69,2,-14}, -{69,2,-13}, -{69,2,-12}, -{69,2,-11}, -{69,2,-10}, -{69,2,-9}, -{69,2,-8}, -{69,2,-7}, -{69,2,-6}, -{69,2,-5}, -{69,2,-4}, -{69,2,-3}, -{69,2,-2}, -{69,2,-1}, -{69,2,0}, -{69,2,1}, -{69,2,2}, -{69,2,3}, -{69,2,4}, -{69,2,5}, -{69,2,6}, -{69,2,7}, -{69,2,8}, -{69,2,9}, -{69,2,10}, -{69,2,11}, -{69,2,12}, -{69,2,13}, -{69,2,14}, -{69,2,15}, -{69,2,16}, -{69,2,17}, -{69,2,18}, -{69,2,19}, -{69,2,20}, -{69,2,21}, -{69,2,22}, -{69,2,23}, -{69,2,24}, -{69,2,25}, -{69,2,26}, -{69,2,27}, -{69,2,28}, -{69,2,29}, -{69,2,30}, -{69,2,31}, -{69,2,32}, -{69,2,33}, -{69,2,34}, -{69,2,35}, -{69,2,36}, -{69,2,37}, -{69,2,38}, -{69,2,39}, -{69,2,40}, -{69,2,41}, -{69,2,42}, -{69,2,43}, -{69,2,44}, -{69,2,45}, -{69,2,46}, -{69,2,47}, -{69,2,48}, -{69,2,49}, -{69,2,50}, -{69,2,51}, -{69,2,52}, -{69,2,53}, -{69,2,54}, -{69,2,55}, -{69,2,56}, -{69,2,57}, -{69,2,58}, -{69,2,59}, -{69,2,60}, -{69,2,61}, -{69,2,62}, -{69,2,63}, -{69,2,64}, -{69,2,65}, -{69,2,66}, -{69,2,67}, -{69,2,68}, -{69,2,69}, -{69,2,70}, -{69,2,71}, -{69,2,72}, -{69,3,-48}, -{69,3,-47}, -{69,3,-46}, -{69,3,-45}, -{69,3,-44}, -{69,3,-43}, -{69,3,-42}, -{69,3,-41}, -{69,3,-40}, -{69,3,-39}, -{69,3,-38}, -{69,3,-37}, -{69,3,-36}, -{69,3,-35}, -{69,3,-34}, -{69,3,-33}, -{69,3,-32}, -{69,3,-31}, -{69,3,-30}, -{69,3,-29}, -{69,3,-28}, -{69,3,-27}, -{69,3,-26}, -{69,3,-25}, -{69,3,-24}, -{69,3,-23}, -{69,3,-22}, -{69,3,-21}, -{69,3,-20}, -{69,3,-19}, -{69,3,-18}, -{69,3,-17}, -{69,3,-16}, -{69,3,-15}, -{69,3,-14}, -{69,3,-13}, -{69,3,-12}, -{69,3,-11}, -{69,3,-10}, -{69,3,-9}, -{69,3,-8}, -{69,3,-7}, -{69,3,-6}, -{69,3,-5}, -{69,3,-4}, -{69,3,-3}, -{69,3,-2}, -{69,3,-1}, -{69,3,0}, -{69,3,1}, -{69,3,2}, -{69,3,3}, -{69,3,4}, -{69,3,5}, -{69,3,6}, -{69,3,7}, -{69,3,8}, -{69,3,9}, -{69,3,10}, -{69,3,11}, -{69,3,12}, -{69,3,13}, -{69,3,14}, -{69,3,15}, -{69,3,16}, -{69,3,17}, -{69,3,18}, -{69,3,19}, -{69,3,20}, -{69,3,21}, -{69,3,22}, -{69,3,23}, -{69,3,24}, -{69,3,25}, -{69,3,26}, -{69,3,27}, -{69,3,28}, -{69,3,29}, -{69,3,30}, -{69,3,31}, -{69,3,32}, -{69,3,33}, -{69,3,34}, -{69,3,35}, -{69,3,36}, -{69,3,37}, -{69,3,38}, -{69,3,39}, -{69,3,40}, -{69,3,41}, -{69,3,42}, -{69,3,43}, -{69,3,44}, -{69,3,45}, -{69,3,46}, -{69,3,47}, -{69,3,48}, -{69,3,49}, -{69,3,50}, -{69,3,51}, -{69,3,52}, -{69,3,53}, -{69,3,54}, -{69,3,55}, -{69,3,56}, -{69,3,57}, -{69,3,58}, -{69,3,59}, -{69,3,60}, -{69,3,61}, -{69,3,62}, -{69,3,63}, -{69,3,64}, -{69,3,65}, -{69,3,66}, -{69,3,67}, -{69,3,68}, -{69,3,69}, -{69,3,70}, -{69,3,71}, -{69,3,72}, -{69,4,-48}, -{69,4,-47}, -{69,4,-46}, -{69,4,-45}, -{69,4,-44}, -{69,4,-43}, -{69,4,-42}, -{69,4,-41}, -{69,4,-40}, -{69,4,-39}, -{69,4,-38}, -{69,4,-37}, -{69,4,-36}, -{69,4,-35}, -{69,4,-34}, -{69,4,-33}, -{69,4,-32}, -{69,4,-31}, -{69,4,-30}, -{69,4,-29}, -{69,4,-28}, -{69,4,-27}, -{69,4,-26}, -{69,4,-25}, -{69,4,-24}, -{69,4,-23}, -{69,4,-22}, -{69,4,-21}, -{69,4,-20}, -{69,4,-19}, -{69,4,-18}, -{69,4,-17}, -{69,4,-16}, -{69,4,-15}, -{69,4,-14}, -{69,4,-13}, -{69,4,-12}, -{69,4,-11}, -{69,4,-10}, -{69,4,-9}, -{69,4,-8}, -{69,4,-7}, -{69,4,-6}, -{69,4,-5}, -{69,4,-4}, -{69,4,-3}, -{69,4,-2}, -{69,4,-1}, -{69,4,0}, -{69,4,1}, -{69,4,2}, -{69,4,3}, -{69,4,4}, -{69,4,5}, -{69,4,6}, -{69,4,7}, -{69,4,8}, -{69,4,9}, -{69,4,10}, -{69,4,11}, -{69,4,12}, -{69,4,13}, -{69,4,14}, -{69,4,15}, -{69,4,16}, -{69,4,17}, -{69,4,18}, -{69,4,19}, -{69,4,20}, -{69,4,21}, -{69,4,22}, -{69,4,23}, -{69,4,24}, -{69,4,25}, -{69,4,26}, -{69,4,27}, -{69,4,28}, -{69,4,29}, -{69,4,30}, -{69,4,31}, -{69,4,32}, -{69,4,33}, -{69,4,34}, -{69,4,35}, -{69,4,36}, -{69,4,37}, -{69,4,38}, -{69,4,39}, -{69,4,40}, -{69,4,41}, -{69,4,42}, -{69,4,43}, -{69,4,44}, -{69,4,45}, -{69,4,46}, -{69,4,47}, -{69,4,48}, -{69,4,49}, -{69,4,50}, -{69,4,51}, -{69,4,52}, -{69,4,53}, -{69,4,54}, -{69,4,55}, -{69,4,56}, -{69,4,57}, -{69,4,58}, -{69,4,59}, -{69,4,60}, -{69,4,61}, -{69,4,62}, -{69,4,63}, -{69,4,64}, -{69,4,65}, -{69,4,66}, -{69,4,67}, -{69,4,68}, -{69,4,69}, -{69,4,70}, -{69,4,71}, -{69,4,72}, -{69,5,-48}, -{69,5,-47}, -{69,5,-46}, -{69,5,-45}, -{69,5,-44}, -{69,5,-43}, -{69,5,-42}, -{69,5,-41}, -{69,5,-40}, -{69,5,-39}, -{69,5,-38}, -{69,5,-37}, -{69,5,-36}, -{69,5,-35}, -{69,5,-34}, -{69,5,-33}, -{69,5,-32}, -{69,5,-31}, -{69,5,-30}, -{69,5,-29}, -{69,5,-28}, -{69,5,-27}, -{69,5,-26}, -{69,5,-25}, -{69,5,-24}, -{69,5,-23}, -{69,5,-22}, -{69,5,-21}, -{69,5,-20}, -{69,5,-19}, -{69,5,-18}, -{69,5,-17}, -{69,5,-16}, -{69,5,-15}, -{69,5,-14}, -{69,5,-13}, -{69,5,-12}, -{69,5,-11}, -{69,5,-10}, -{69,5,-9}, -{69,5,-8}, -{69,5,-7}, -{69,5,-6}, -{69,5,-5}, -{69,5,-4}, -{69,5,-3}, -{69,5,-2}, -{69,5,-1}, -{69,5,0}, -{69,5,1}, -{69,5,2}, -{69,5,3}, -{69,5,4}, -{69,5,5}, -{69,5,6}, -{69,5,7}, -{69,5,8}, -{69,5,9}, -{69,5,10}, -{69,5,11}, -{69,5,12}, -{69,5,13}, -{69,5,14}, -{69,5,15}, -{69,5,16}, -{69,5,17}, -{69,5,18}, -{69,5,19}, -{69,5,20}, -{69,5,21}, -{69,5,22}, -{69,5,23}, -{69,5,24}, -{69,5,25}, -{69,5,26}, -{69,5,27}, -{69,5,28}, -{69,5,29}, -{69,5,30}, -{69,5,31}, -{69,5,32}, -{69,5,33}, -{69,5,34}, -{69,5,35}, -{69,5,36}, -{69,5,37}, -{69,5,38}, -{69,5,39}, -{69,5,40}, -{69,5,41}, -{69,5,42}, -{69,5,43}, -{69,5,44}, -{69,5,45}, -{69,5,46}, -{69,5,47}, -{69,5,48}, -{69,5,49}, -{69,5,50}, -{69,5,51}, -{69,5,52}, -{69,5,53}, -{69,5,54}, -{69,5,55}, -{69,5,56}, -{69,5,57}, -{69,5,58}, -{69,5,59}, -{69,5,60}, -{69,5,61}, -{69,5,62}, -{69,5,63}, -{69,5,64}, -{69,5,65}, -{69,5,66}, -{69,5,67}, -{69,5,68}, -{69,5,69}, -{69,5,70}, -{69,5,71}, -{69,5,72}, -{69,6,-48}, -{69,6,-47}, -{69,6,-46}, -{69,6,-45}, -{69,6,-44}, -{69,6,-43}, -{69,6,-42}, -{69,6,-41}, -{69,6,-40}, -{69,6,-39}, -{69,6,-38}, -{69,6,-37}, -{69,6,-36}, -{69,6,-35}, -{69,6,-34}, -{69,6,-33}, -{69,6,-32}, -{69,6,-31}, -{69,6,-30}, -{69,6,-29}, -{69,6,-28}, -{69,6,-27}, -{69,6,-26}, -{69,6,-25}, -{69,6,-24}, -{69,6,-23}, -{69,6,-22}, -{69,6,-21}, -{69,6,-20}, -{69,6,-19}, -{69,6,-18}, -{69,6,-17}, -{69,6,-16}, -{69,6,-15}, -{69,6,-14}, -{69,6,-13}, -{69,6,-12}, -{69,6,-11}, -{69,6,-10}, -{69,6,-9}, -{69,6,-8}, -{69,6,-7}, -{69,6,-6}, -{69,6,-5}, -{69,6,-4}, -{69,6,-3}, -{69,6,-2}, -{69,6,-1}, -{69,6,0}, -{69,6,1}, -{69,6,2}, -{69,6,3}, -{69,6,4}, -{69,6,5}, -{69,6,6}, -{69,6,7}, -{69,6,8}, -{69,6,9}, -{69,6,10}, -{69,6,11}, -{69,6,12}, -{69,6,13}, -{69,6,14}, -{69,6,15}, -{69,6,16}, -{69,6,17}, -{69,6,18}, -{69,6,19}, -{69,6,20}, -{69,6,21}, -{69,6,22}, -{69,6,23}, -{69,6,24}, -{69,6,25}, -{69,6,26}, -{69,6,27}, -{69,6,28}, -{69,6,29}, -{69,6,30}, -{69,6,31}, -{69,6,32}, -{69,6,33}, -{69,6,34}, -{69,6,35}, -{69,6,36}, -{69,6,37}, -{69,6,38}, -{69,6,39}, -{69,6,40}, -{69,6,41}, -{69,6,42}, -{69,6,43}, -{69,6,44}, -{69,6,45}, -{69,6,46}, -{69,6,47}, -{69,6,48}, -{69,6,49}, -{69,6,50}, -{69,6,51}, -{69,6,52}, -{69,6,53}, -{69,6,54}, -{69,6,55}, -{69,6,56}, -{69,6,57}, -{69,6,58}, -{69,6,59}, -{69,6,60}, -{69,6,61}, -{69,6,62}, -{69,6,63}, -{69,6,64}, -{69,6,65}, -{69,6,66}, -{69,6,67}, -{69,6,68}, -{69,6,69}, -{69,6,70}, -{69,6,71}, -{69,6,72}, -{69,7,-48}, -{69,7,-47}, -{69,7,-46}, -{69,7,-45}, -{69,7,-44}, -{69,7,-43}, -{69,7,-42}, -{69,7,-41}, -{69,7,-40}, -{69,7,-39}, -{69,7,-38}, -{69,7,-37}, -{69,7,-36}, -{69,7,-35}, -{69,7,-34}, -{69,7,-33}, -{69,7,-32}, -{69,7,-31}, -{69,7,-30}, -{69,7,-29}, -{69,7,-28}, -{69,7,-27}, -{69,7,-26}, -{69,7,-25}, -{69,7,-24}, -{69,7,-23}, -{69,7,-22}, -{69,7,-21}, -{69,7,-20}, -{69,7,-19}, -{69,7,-18}, -{69,7,-17}, -{69,7,-16}, -{69,7,-15}, -{69,7,-14}, -{69,7,-13}, -{69,7,-12}, -{69,7,-11}, -{69,7,-10}, -{69,7,-9}, -{69,7,-8}, -{69,7,-7}, -{69,7,-6}, -{69,7,-5}, -{69,7,-4}, -{69,7,-3}, -{69,7,-2}, -{69,7,-1}, -{69,7,0}, -{69,7,1}, -{69,7,2}, -{69,7,3}, -{69,7,4}, -{69,7,5}, -{69,7,6}, -{69,7,7}, -{69,7,8}, -{69,7,9}, -{69,7,10}, -{69,7,11}, -{69,7,12}, -{69,7,13}, -{69,7,14}, -{69,7,15}, -{69,7,16}, -{69,7,17}, -{69,7,18}, -{69,7,19}, -{69,7,20}, -{69,7,21}, -{69,7,22}, -{69,7,23}, -{69,7,24}, -{69,7,25}, -{69,7,26}, -{69,7,27}, -{69,7,28}, -{69,7,29}, -{69,7,30}, -{69,7,31}, -{69,7,32}, -{69,7,33}, -{69,7,34}, -{69,7,35}, -{69,7,36}, -{69,7,37}, -{69,7,38}, -{69,7,39}, -{69,7,40}, -{69,7,41}, -{69,7,42}, -{69,7,43}, -{69,7,44}, -{69,7,45}, -{69,7,46}, -{69,7,47}, -{69,7,48}, -{69,7,49}, -{69,7,50}, -{69,7,51}, -{69,7,52}, -{69,7,53}, -{69,7,54}, -{69,7,55}, -{69,7,56}, -{69,7,57}, -{69,7,58}, -{69,7,59}, -{69,7,60}, -{69,7,61}, -{69,7,62}, -{69,7,63}, -{69,7,64}, -{69,7,65}, -{69,7,66}, -{69,7,67}, -{69,7,68}, -{69,7,69}, -{69,7,70}, -{69,7,71}, -{69,7,72}, -{69,8,-48}, -{69,8,-47}, -{69,8,-46}, -{69,8,-45}, -{69,8,-44}, -{69,8,-43}, -{69,8,-42}, -{69,8,-41}, -{69,8,-40}, -{69,8,-39}, -{69,8,-38}, -{69,8,-37}, -{69,8,-36}, -{69,8,-35}, -{69,8,-34}, -{69,8,-33}, -{69,8,-32}, -{69,8,-31}, -{69,8,-30}, -{69,8,-29}, -{69,8,-28}, -{69,8,-27}, -{69,8,-26}, -{69,8,-25}, -{69,8,-24}, -{69,8,-23}, -{69,8,-22}, -{69,8,-21}, -{69,8,-20}, -{69,8,-19}, -{69,8,-18}, -{69,8,-17}, -{69,8,-16}, -{69,8,-15}, -{69,8,-14}, -{69,8,-13}, -{69,8,-12}, -{69,8,-11}, -{69,8,-10}, -{69,8,-9}, -{69,8,-8}, -{69,8,-7}, -{69,8,-6}, -{69,8,-5}, -{69,8,-4}, -{69,8,-3}, -{69,8,-2}, -{69,8,-1}, -{69,8,0}, -{69,8,1}, -{69,8,2}, -{69,8,3}, -{69,8,4}, -{69,8,5}, -{69,8,6}, -{69,8,7}, -{69,8,8}, -{69,8,9}, -{69,8,10}, -{69,8,11}, -{69,8,12}, -{69,8,13}, -{69,8,14}, -{69,8,15}, -{69,8,16}, -{69,8,17}, -{69,8,18}, -{69,8,19}, -{69,8,20}, -{69,8,21}, -{69,8,22}, -{69,8,23}, -{69,8,24}, -{69,8,25}, -{69,8,26}, -{69,8,27}, -{69,8,28}, -{69,8,29}, -{69,8,30}, -{69,8,31}, -{69,8,32}, -{69,8,33}, -{69,8,34}, -{69,8,35}, -{69,8,36}, -{69,8,37}, -{69,8,38}, -{69,8,39}, -{69,8,40}, -{69,8,41}, -{69,8,42}, -{69,8,43}, -{69,8,44}, -{69,8,45}, -{69,8,46}, -{69,8,47}, -{69,8,48}, -{69,8,49}, -{69,8,50}, -{69,8,51}, -{69,8,52}, -{69,8,53}, -{69,8,54}, -{69,8,55}, -{69,8,56}, -{69,8,57}, -{69,8,58}, -{69,8,59}, -{69,8,60}, -{69,8,61}, -{69,8,62}, -{69,8,63}, -{69,8,64}, -{69,8,65}, -{69,8,66}, -{69,8,67}, -{69,8,68}, -{69,8,69}, -{69,8,70}, -{69,8,71}, -{69,8,72}, -{69,9,-48}, -{69,9,-47}, -{69,9,-46}, -{69,9,-45}, -{69,9,-44}, -{69,9,-43}, -{69,9,-42}, -{69,9,-41}, -{69,9,-40}, -{69,9,-39}, -{69,9,-38}, -{69,9,-37}, -{69,9,-36}, -{69,9,-35}, -{69,9,-34}, -{69,9,-33}, -{69,9,-32}, -{69,9,-31}, -{69,9,-30}, -{69,9,-29}, -{69,9,-28}, -{69,9,-27}, -{69,9,-26}, -{69,9,-25}, -{69,9,-24}, -{69,9,-23}, -{69,9,-22}, -{69,9,-21}, -{69,9,-20}, -{69,9,-19}, -{69,9,-18}, -{69,9,-17}, -{69,9,-16}, -{69,9,-15}, -{69,9,-14}, -{69,9,-13}, -{69,9,-12}, -{69,9,-11}, -{69,9,-10}, -{69,9,-9}, -{69,9,-8}, -{69,9,-7}, -{69,9,-6}, -{69,9,-5}, -{69,9,-4}, -{69,9,-3}, -{69,9,-2}, -{69,9,-1}, -{69,9,0}, -{69,9,1}, -{69,9,2}, -{69,9,3}, -{69,9,4}, -{69,9,5}, -{69,9,6}, -{69,9,7}, -{69,9,8}, -{69,9,9}, -{69,9,10}, -{69,9,11}, -{69,9,12}, -{69,9,13}, -{69,9,14}, -{69,9,15}, -{69,9,16}, -{69,9,17}, -{69,9,18}, -{69,9,19}, -{69,9,20}, -{69,9,21}, -{69,9,22}, -{69,9,23}, -{69,9,24}, -{69,9,25}, -{69,9,26}, -{69,9,27}, -{69,9,28}, -{69,9,29}, -{69,9,30}, -{69,9,31}, -{69,9,32}, -{69,9,33}, -{69,9,34}, -{69,9,35}, -{69,9,36}, -{69,9,37}, -{69,9,38}, -{69,9,39}, -{69,9,40}, -{69,9,41}, -{69,9,42}, -{69,9,43}, -{69,9,44}, -{69,9,45}, -{69,9,46}, -{69,9,47}, -{69,9,48}, -{69,9,49}, -{69,9,50}, -{69,9,51}, -{69,9,52}, -{69,9,53}, -{69,9,54}, -{69,9,55}, -{69,9,56}, -{69,9,57}, -{69,9,58}, -{69,9,59}, -{69,9,60}, -{69,9,61}, -{69,9,62}, -{69,9,63}, -{69,9,64}, -{69,9,65}, -{69,9,66}, -{69,9,67}, -{69,9,68}, -{69,9,69}, -{69,9,70}, -{69,9,71}, -{69,9,72}, -{69,10,-48}, -{69,10,-47}, -{69,10,-46}, -{69,10,-45}, -{69,10,-44}, -{69,10,-43}, -{69,10,-42}, -{69,10,-41}, -{69,10,-40}, -{69,10,-39}, -{69,10,-38}, -{69,10,-37}, -{69,10,-36}, -{69,10,-35}, -{69,10,-34}, -{69,10,-33}, -{69,10,-32}, -{69,10,-31}, -{69,10,-30}, -{69,10,-29}, -{69,10,-28}, -{69,10,-27}, -{69,10,-26}, -{69,10,-25}, -{69,10,-24}, -{69,10,-23}, -{69,10,-22}, -{69,10,-21}, -{69,10,-20}, -{69,10,-19}, -{69,10,-18}, -{69,10,-17}, -{69,10,-16}, -{69,10,-15}, -{69,10,-14}, -{69,10,-13}, -{69,10,-12}, -{69,10,-11}, -{69,10,-10}, -{69,10,-9}, -{69,10,-8}, -{69,10,-7}, -{69,10,-6}, -{69,10,-5}, -{69,10,-4}, -{69,10,-3}, -{69,10,-2}, -{69,10,-1}, -{69,10,0}, -{69,10,1}, -{69,10,2}, -{69,10,3}, -{69,10,4}, -{69,10,5}, -{69,10,6}, -{69,10,7}, -{69,10,8}, -{69,10,9}, -{69,10,10}, -{69,10,11}, -{69,10,12}, -{69,10,13}, -{69,10,14}, -{69,10,15}, -{69,10,16}, -{69,10,17}, -{69,10,18}, -{69,10,19}, -{69,10,20}, -{69,10,21}, -{69,10,22}, -{69,10,23}, -{69,10,24}, -{69,10,25}, -{69,10,26}, -{69,10,27}, -{69,10,28}, -{69,10,29}, -{69,10,30}, -{69,10,31}, -{69,10,32}, -{69,10,33}, -{69,10,34}, -{69,10,35}, -{69,10,36}, -{69,10,37}, -{69,10,38}, -{69,10,39}, -{69,10,40}, -{69,10,41}, -{69,10,42}, -{69,10,43}, -{69,10,44}, -{69,10,45}, -{69,10,46}, -{69,10,47}, -{69,10,48}, -{69,10,49}, -{69,10,50}, -{69,10,51}, -{69,10,52}, -{69,10,53}, -{69,10,54}, -{69,10,55}, -{69,10,56}, -{69,10,57}, -{69,10,58}, -{69,10,59}, -{69,10,60}, -{69,10,61}, -{69,10,62}, -{69,10,63}, -{69,10,64}, -{69,10,65}, -{69,10,66}, -{69,10,67}, -{69,10,68}, -{69,10,69}, -{69,10,70}, -{69,10,71}, -{69,10,72}, -{69,10,73}, -{69,11,-48}, -{69,11,-47}, -{69,11,-46}, -{69,11,-45}, -{69,11,-44}, -{69,11,-43}, -{69,11,-42}, -{69,11,-41}, -{69,11,-40}, -{69,11,-39}, -{69,11,-38}, -{69,11,-37}, -{69,11,-36}, -{69,11,-35}, -{69,11,-34}, -{69,11,-33}, -{69,11,-32}, -{69,11,-31}, -{69,11,-30}, -{69,11,-29}, -{69,11,-28}, -{69,11,-27}, -{69,11,-26}, -{69,11,-25}, -{69,11,-24}, -{69,11,-23}, -{69,11,-22}, -{69,11,-21}, -{69,11,-20}, -{69,11,-19}, -{69,11,-18}, -{69,11,-17}, -{69,11,-16}, -{69,11,-15}, -{69,11,-14}, -{69,11,-13}, -{69,11,-12}, -{69,11,-11}, -{69,11,-10}, -{69,11,-9}, -{69,11,-8}, -{69,11,-7}, -{69,11,-6}, -{69,11,-5}, -{69,11,-4}, -{69,11,-3}, -{69,11,-2}, -{69,11,-1}, -{69,11,0}, -{69,11,1}, -{69,11,2}, -{69,11,3}, -{69,11,4}, -{69,11,5}, -{69,11,6}, -{69,11,7}, -{69,11,8}, -{69,11,9}, -{69,11,10}, -{69,11,11}, -{69,11,12}, -{69,11,13}, -{69,11,14}, -{69,11,15}, -{69,11,16}, -{69,11,17}, -{69,11,18}, -{69,11,19}, -{69,11,20}, -{69,11,21}, -{69,11,22}, -{69,11,23}, -{69,11,24}, -{69,11,25}, -{69,11,26}, -{69,11,27}, -{69,11,28}, -{69,11,29}, -{69,11,30}, -{69,11,31}, -{69,11,32}, -{69,11,33}, -{69,11,34}, -{69,11,35}, -{69,11,36}, -{69,11,37}, -{69,11,38}, -{69,11,39}, -{69,11,40}, -{69,11,41}, -{69,11,42}, -{69,11,43}, -{69,11,44}, -{69,11,45}, -{69,11,46}, -{69,11,47}, -{69,11,48}, -{69,11,49}, -{69,11,50}, -{69,11,51}, -{69,11,52}, -{69,11,53}, -{69,11,54}, -{69,11,55}, -{69,11,56}, -{69,11,57}, -{69,11,58}, -{69,11,59}, -{69,11,60}, -{69,11,61}, -{69,11,62}, -{69,11,63}, -{69,11,64}, -{69,11,65}, -{69,11,66}, -{69,11,67}, -{69,11,68}, -{69,11,69}, -{69,11,70}, -{69,11,71}, -{69,11,72}, -{69,11,73}, -{69,12,-48}, -{69,12,-47}, -{69,12,-46}, -{69,12,-45}, -{69,12,-44}, -{69,12,-43}, -{69,12,-42}, -{69,12,-41}, -{69,12,-40}, -{69,12,-39}, -{69,12,-38}, -{69,12,-37}, -{69,12,-36}, -{69,12,-35}, -{69,12,-34}, -{69,12,-33}, -{69,12,-32}, -{69,12,-31}, -{69,12,-30}, -{69,12,-29}, -{69,12,-28}, -{69,12,-27}, -{69,12,-26}, -{69,12,-25}, -{69,12,-24}, -{69,12,-23}, -{69,12,-22}, -{69,12,-21}, -{69,12,-20}, -{69,12,-19}, -{69,12,-18}, -{69,12,-17}, -{69,12,-16}, -{69,12,-15}, -{69,12,-14}, -{69,12,-13}, -{69,12,-12}, -{69,12,-11}, -{69,12,-10}, -{69,12,-9}, -{69,12,-8}, -{69,12,-7}, -{69,12,-6}, -{69,12,-5}, -{69,12,-4}, -{69,12,-3}, -{69,12,-2}, -{69,12,-1}, -{69,12,0}, -{69,12,1}, -{69,12,2}, -{69,12,3}, -{69,12,4}, -{69,12,5}, -{69,12,6}, -{69,12,7}, -{69,12,8}, -{69,12,9}, -{69,12,10}, -{69,12,11}, -{69,12,12}, -{69,12,13}, -{69,12,14}, -{69,12,15}, -{69,12,16}, -{69,12,17}, -{69,12,18}, -{69,12,19}, -{69,12,20}, -{69,12,21}, -{69,12,22}, -{69,12,23}, -{69,12,24}, -{69,12,25}, -{69,12,26}, -{69,12,27}, -{69,12,28}, -{69,12,29}, -{69,12,30}, -{69,12,31}, -{69,12,32}, -{69,12,33}, -{69,12,34}, -{69,12,35}, -{69,12,36}, -{69,12,37}, -{69,12,38}, -{69,12,39}, -{69,12,40}, -{69,12,41}, -{69,12,42}, -{69,12,43}, -{69,12,44}, -{69,12,45}, -{69,12,46}, -{69,12,47}, -{69,12,48}, -{69,12,49}, -{69,12,50}, -{69,12,51}, -{69,12,52}, -{69,12,53}, -{69,12,54}, -{69,12,55}, -{69,12,56}, -{69,12,57}, -{69,12,58}, -{69,12,59}, -{69,12,60}, -{69,12,61}, -{69,12,62}, -{69,12,63}, -{69,12,64}, -{69,12,65}, -{69,12,66}, -{69,12,67}, -{69,12,68}, -{69,12,69}, -{69,12,70}, -{69,12,71}, -{69,12,72}, -{69,12,73}, -{69,13,-47}, -{69,13,-46}, -{69,13,-45}, -{69,13,-44}, -{69,13,-43}, -{69,13,-42}, -{69,13,-41}, -{69,13,-40}, -{69,13,-39}, -{69,13,-38}, -{69,13,-37}, -{69,13,-36}, -{69,13,-35}, -{69,13,-34}, -{69,13,-33}, -{69,13,-32}, -{69,13,-31}, -{69,13,-30}, -{69,13,-29}, -{69,13,-28}, -{69,13,-27}, -{69,13,-26}, -{69,13,-25}, -{69,13,-24}, -{69,13,-23}, -{69,13,-22}, -{69,13,-21}, -{69,13,-20}, -{69,13,-19}, -{69,13,-18}, -{69,13,-17}, -{69,13,-16}, -{69,13,-15}, -{69,13,-14}, -{69,13,-13}, -{69,13,-12}, -{69,13,-11}, -{69,13,-10}, -{69,13,-9}, -{69,13,-8}, -{69,13,-7}, -{69,13,-6}, -{69,13,-5}, -{69,13,-4}, -{69,13,-3}, -{69,13,-2}, -{69,13,-1}, -{69,13,0}, -{69,13,1}, -{69,13,2}, -{69,13,3}, -{69,13,4}, -{69,13,5}, -{69,13,6}, -{69,13,7}, -{69,13,8}, -{69,13,9}, -{69,13,10}, -{69,13,11}, -{69,13,12}, -{69,13,13}, -{69,13,14}, -{69,13,15}, -{69,13,16}, -{69,13,17}, -{69,13,18}, -{69,13,19}, -{69,13,20}, -{69,13,21}, -{69,13,22}, -{69,13,23}, -{69,13,24}, -{69,13,25}, -{69,13,26}, -{69,13,27}, -{69,13,28}, -{69,13,29}, -{69,13,30}, -{69,13,31}, -{69,13,32}, -{69,13,33}, -{69,13,34}, -{69,13,35}, -{69,13,36}, -{69,13,37}, -{69,13,38}, -{69,13,39}, -{69,13,40}, -{69,13,41}, -{69,13,42}, -{69,13,43}, -{69,13,44}, -{69,13,45}, -{69,13,46}, -{69,13,47}, -{69,13,48}, -{69,13,49}, -{69,13,50}, -{69,13,51}, -{69,13,52}, -{69,13,53}, -{69,13,54}, -{69,13,55}, -{69,13,56}, -{69,13,57}, -{69,13,58}, -{69,13,59}, -{69,13,60}, -{69,13,61}, -{69,13,62}, -{69,13,63}, -{69,13,64}, -{69,13,65}, -{69,13,66}, -{69,13,67}, -{69,13,68}, -{69,13,69}, -{69,13,70}, -{69,13,71}, -{69,13,72}, -{69,13,73}, -{69,14,-47}, -{69,14,-46}, -{69,14,-45}, -{69,14,-44}, -{69,14,-43}, -{69,14,-42}, -{69,14,-41}, -{69,14,-40}, -{69,14,-39}, -{69,14,-38}, -{69,14,-37}, -{69,14,-36}, -{69,14,-35}, -{69,14,-34}, -{69,14,-33}, -{69,14,-32}, -{69,14,-31}, -{69,14,-30}, -{69,14,-29}, -{69,14,-28}, -{69,14,-27}, -{69,14,-26}, -{69,14,-25}, -{69,14,-24}, -{69,14,-23}, -{69,14,-22}, -{69,14,-21}, -{69,14,-20}, -{69,14,-19}, -{69,14,-18}, -{69,14,-17}, -{69,14,-16}, -{69,14,-15}, -{69,14,-14}, -{69,14,-13}, -{69,14,-12}, -{69,14,-11}, -{69,14,-10}, -{69,14,-9}, -{69,14,-8}, -{69,14,-7}, -{69,14,-6}, -{69,14,-5}, -{69,14,-4}, -{69,14,-3}, -{69,14,-2}, -{69,14,-1}, -{69,14,0}, -{69,14,1}, -{69,14,2}, -{69,14,3}, -{69,14,4}, -{69,14,5}, -{69,14,6}, -{69,14,7}, -{69,14,8}, -{69,14,9}, -{69,14,10}, -{69,14,11}, -{69,14,12}, -{69,14,13}, -{69,14,14}, -{69,14,15}, -{69,14,16}, -{69,14,17}, -{69,14,18}, -{69,14,19}, -{69,14,20}, -{69,14,21}, -{69,14,22}, -{69,14,23}, -{69,14,24}, -{69,14,25}, -{69,14,26}, -{69,14,27}, -{69,14,28}, -{69,14,29}, -{69,14,30}, -{69,14,31}, -{69,14,32}, -{69,14,33}, -{69,14,34}, -{69,14,35}, -{69,14,36}, -{69,14,37}, -{69,14,38}, -{69,14,39}, -{69,14,40}, -{69,14,41}, -{69,14,42}, -{69,14,43}, -{69,14,44}, -{69,14,45}, -{69,14,46}, -{69,14,47}, -{69,14,48}, -{69,14,49}, -{69,14,50}, -{69,14,51}, -{69,14,52}, -{69,14,53}, -{69,14,54}, -{69,14,55}, -{69,14,56}, -{69,14,57}, -{69,14,58}, -{69,14,59}, -{69,14,60}, -{69,14,61}, -{69,14,62}, -{69,14,63}, -{69,14,64}, -{69,14,65}, -{69,14,66}, -{69,14,67}, -{69,14,68}, -{69,14,69}, -{69,14,70}, -{69,14,71}, -{69,14,72}, -{69,14,73}, -{69,15,-47}, -{69,15,-46}, -{69,15,-45}, -{69,15,-44}, -{69,15,-43}, -{69,15,-42}, -{69,15,-41}, -{69,15,-40}, -{69,15,-39}, -{69,15,-38}, -{69,15,-37}, -{69,15,-36}, -{69,15,-35}, -{69,15,-34}, -{69,15,-33}, -{69,15,-32}, -{69,15,-31}, -{69,15,-30}, -{69,15,-29}, -{69,15,-28}, -{69,15,-27}, -{69,15,-26}, -{69,15,-25}, -{69,15,-24}, -{69,15,-23}, -{69,15,-22}, -{69,15,-21}, -{69,15,-20}, -{69,15,-19}, -{69,15,-18}, -{69,15,-17}, -{69,15,-16}, -{69,15,-15}, -{69,15,-14}, -{69,15,-13}, -{69,15,-12}, -{69,15,-11}, -{69,15,-10}, -{69,15,-9}, -{69,15,-8}, -{69,15,-7}, -{69,15,-6}, -{69,15,-5}, -{69,15,-4}, -{69,15,-3}, -{69,15,-2}, -{69,15,-1}, -{69,15,0}, -{69,15,1}, -{69,15,2}, -{69,15,3}, -{69,15,4}, -{69,15,5}, -{69,15,6}, -{69,15,7}, -{69,15,8}, -{69,15,9}, -{69,15,10}, -{69,15,11}, -{69,15,12}, -{69,15,13}, -{69,15,14}, -{69,15,15}, -{69,15,16}, -{69,15,17}, -{69,15,18}, -{69,15,19}, -{69,15,20}, -{69,15,21}, -{69,15,22}, -{69,15,23}, -{69,15,24}, -{69,15,25}, -{69,15,26}, -{69,15,27}, -{69,15,28}, -{69,15,29}, -{69,15,30}, -{69,15,31}, -{69,15,32}, -{69,15,33}, -{69,15,34}, -{69,15,35}, -{69,15,36}, -{69,15,37}, -{69,15,38}, -{69,15,39}, -{69,15,40}, -{69,15,41}, -{69,15,42}, -{69,15,43}, -{69,15,44}, -{69,15,45}, -{69,15,46}, -{69,15,47}, -{69,15,48}, -{69,15,49}, -{69,15,50}, -{69,15,51}, -{69,15,52}, -{69,15,53}, -{69,15,54}, -{69,15,55}, -{69,15,56}, -{69,15,57}, -{69,15,58}, -{69,15,59}, -{69,15,60}, -{69,15,61}, -{69,15,62}, -{69,15,63}, -{69,15,64}, -{69,15,65}, -{69,15,66}, -{69,15,67}, -{69,15,68}, -{69,15,69}, -{69,15,70}, -{69,15,71}, -{69,15,72}, -{69,15,73}, -{69,16,-47}, -{69,16,-46}, -{69,16,-45}, -{69,16,-44}, -{69,16,-43}, -{69,16,-42}, -{69,16,-41}, -{69,16,-40}, -{69,16,-39}, -{69,16,-38}, -{69,16,-37}, -{69,16,-36}, -{69,16,-35}, -{69,16,-34}, -{69,16,-33}, -{69,16,-32}, -{69,16,-31}, -{69,16,-30}, -{69,16,-29}, -{69,16,-28}, -{69,16,-27}, -{69,16,-26}, -{69,16,-25}, -{69,16,-24}, -{69,16,-23}, -{69,16,-22}, -{69,16,-21}, -{69,16,-20}, -{69,16,-19}, -{69,16,-18}, -{69,16,-17}, -{69,16,-16}, -{69,16,-15}, -{69,16,-14}, -{69,16,-13}, -{69,16,-12}, -{69,16,-11}, -{69,16,-10}, -{69,16,-9}, -{69,16,-8}, -{69,16,-7}, -{69,16,-6}, -{69,16,-5}, -{69,16,-4}, -{69,16,-3}, -{69,16,-2}, -{69,16,-1}, -{69,16,0}, -{69,16,1}, -{69,16,2}, -{69,16,3}, -{69,16,4}, -{69,16,5}, -{69,16,6}, -{69,16,7}, -{69,16,8}, -{69,16,9}, -{69,16,10}, -{69,16,11}, -{69,16,12}, -{69,16,13}, -{69,16,14}, -{69,16,15}, -{69,16,16}, -{69,16,17}, -{69,16,18}, -{69,16,19}, -{69,16,20}, -{69,16,21}, -{69,16,22}, -{69,16,23}, -{69,16,24}, -{69,16,25}, -{69,16,26}, -{69,16,27}, -{69,16,28}, -{69,16,29}, -{69,16,30}, -{69,16,31}, -{69,16,32}, -{69,16,33}, -{69,16,34}, -{69,16,35}, -{69,16,36}, -{69,16,37}, -{69,16,38}, -{69,16,39}, -{69,16,40}, -{69,16,41}, -{69,16,42}, -{69,16,43}, -{69,16,44}, -{69,16,45}, -{69,16,46}, -{69,16,47}, -{69,16,48}, -{69,16,49}, -{69,16,50}, -{69,16,51}, -{69,16,52}, -{69,16,53}, -{69,16,54}, -{69,16,55}, -{69,16,56}, -{69,16,57}, -{69,16,58}, -{69,16,59}, -{69,16,60}, -{69,16,61}, -{69,16,62}, -{69,16,63}, -{69,16,64}, -{69,16,65}, -{69,16,66}, -{69,16,67}, -{69,16,68}, -{69,16,69}, -{69,16,70}, -{69,16,71}, -{69,16,72}, -{69,16,73}, -{69,17,-47}, -{69,17,-46}, -{69,17,-45}, -{69,17,-44}, -{69,17,-43}, -{69,17,-42}, -{69,17,-41}, -{69,17,-40}, -{69,17,-39}, -{69,17,-38}, -{69,17,-37}, -{69,17,-36}, -{69,17,-35}, -{69,17,-34}, -{69,17,-33}, -{69,17,-32}, -{69,17,-31}, -{69,17,-30}, -{69,17,-29}, -{69,17,-28}, -{69,17,-27}, -{69,17,-26}, -{69,17,-25}, -{69,17,-24}, -{69,17,-23}, -{69,17,-22}, -{69,17,-21}, -{69,17,-20}, -{69,17,-19}, -{69,17,-18}, -{69,17,-17}, -{69,17,-16}, -{69,17,-15}, -{69,17,-14}, -{69,17,-13}, -{69,17,-12}, -{69,17,-11}, -{69,17,-10}, -{69,17,-9}, -{69,17,-8}, -{69,17,-7}, -{69,17,-6}, -{69,17,-5}, -{69,17,-4}, -{69,17,-3}, -{69,17,-2}, -{69,17,-1}, -{69,17,0}, -{69,17,1}, -{69,17,2}, -{69,17,3}, -{69,17,4}, -{69,17,5}, -{69,17,6}, -{69,17,7}, -{69,17,8}, -{69,17,9}, -{69,17,10}, -{69,17,11}, -{69,17,12}, -{69,17,13}, -{69,17,14}, -{69,17,15}, -{69,17,16}, -{69,17,17}, -{69,17,18}, -{69,17,19}, -{69,17,20}, -{69,17,21}, -{69,17,22}, -{69,17,23}, -{69,17,24}, -{69,17,25}, -{69,17,26}, -{69,17,27}, -{69,17,28}, -{69,17,29}, -{69,17,30}, -{69,17,31}, -{69,17,32}, -{69,17,33}, -{69,17,34}, -{69,17,35}, -{69,17,36}, -{69,17,37}, -{69,17,38}, -{69,17,39}, -{69,17,40}, -{69,17,41}, -{69,17,42}, -{69,17,43}, -{69,17,44}, -{69,17,45}, -{69,17,46}, -{69,17,47}, -{69,17,48}, -{69,17,49}, -{69,17,50}, -{69,17,51}, -{69,17,52}, -{69,17,53}, -{69,17,54}, -{69,17,55}, -{69,17,56}, -{69,17,57}, -{69,17,58}, -{69,17,59}, -{69,17,60}, -{69,17,61}, -{69,17,62}, -{69,17,63}, -{69,17,64}, -{69,17,65}, -{69,17,66}, -{69,17,67}, -{69,17,68}, -{69,17,69}, -{69,17,70}, -{69,17,71}, -{69,17,72}, -{69,17,73}, -{69,18,-47}, -{69,18,-46}, -{69,18,-45}, -{69,18,-44}, -{69,18,-43}, -{69,18,-42}, -{69,18,-41}, -{69,18,-40}, -{69,18,-39}, -{69,18,-38}, -{69,18,-37}, -{69,18,-36}, -{69,18,-35}, -{69,18,-34}, -{69,18,-33}, -{69,18,-32}, -{69,18,-31}, -{69,18,-30}, -{69,18,-29}, -{69,18,-28}, -{69,18,-27}, -{69,18,-26}, -{69,18,-25}, -{69,18,-24}, -{69,18,-23}, -{69,18,-22}, -{69,18,-21}, -{69,18,-20}, -{69,18,-19}, -{69,18,-18}, -{69,18,-17}, -{69,18,-16}, -{69,18,-15}, -{69,18,-14}, -{69,18,-13}, -{69,18,-12}, -{69,18,-11}, -{69,18,-10}, -{69,18,-9}, -{69,18,-8}, -{69,18,-7}, -{69,18,-6}, -{69,18,-5}, -{69,18,-4}, -{69,18,-3}, -{69,18,-2}, -{69,18,-1}, -{69,18,0}, -{69,18,1}, -{69,18,2}, -{69,18,3}, -{69,18,4}, -{69,18,5}, -{69,18,6}, -{69,18,7}, -{69,18,8}, -{69,18,9}, -{69,18,10}, -{69,18,11}, -{69,18,12}, -{69,18,13}, -{69,18,14}, -{69,18,15}, -{69,18,16}, -{69,18,17}, -{69,18,18}, -{69,18,19}, -{69,18,20}, -{69,18,21}, -{69,18,22}, -{69,18,23}, -{69,18,24}, -{69,18,25}, -{69,18,26}, -{69,18,27}, -{69,18,28}, -{69,18,29}, -{69,18,30}, -{69,18,31}, -{69,18,32}, -{69,18,33}, -{69,18,34}, -{69,18,35}, -{69,18,36}, -{69,18,37}, -{69,18,38}, -{69,18,39}, -{69,18,40}, -{69,18,41}, -{69,18,42}, -{69,18,43}, -{69,18,44}, -{69,18,45}, -{69,18,46}, -{69,18,47}, -{69,18,48}, -{69,18,49}, -{69,18,50}, -{69,18,51}, -{69,18,52}, -{69,18,53}, -{69,18,54}, -{69,18,55}, -{69,18,56}, -{69,18,57}, -{69,18,58}, -{69,18,59}, -{69,18,60}, -{69,18,61}, -{69,18,62}, -{69,18,63}, -{69,18,64}, -{69,18,65}, -{69,18,66}, -{69,18,67}, -{69,18,68}, -{69,18,69}, -{69,18,70}, -{69,18,71}, -{69,18,72}, -{69,18,73}, -{69,19,-47}, -{69,19,-46}, -{69,19,-45}, -{69,19,-44}, -{69,19,-43}, -{69,19,-42}, -{69,19,-41}, -{69,19,-40}, -{69,19,-39}, -{69,19,-38}, -{69,19,-37}, -{69,19,-36}, -{69,19,-35}, -{69,19,-34}, -{69,19,-33}, -{69,19,-32}, -{69,19,-31}, -{69,19,-30}, -{69,19,-29}, -{69,19,-28}, -{69,19,-27}, -{69,19,-26}, -{69,19,-25}, -{69,19,-24}, -{69,19,-23}, -{69,19,-22}, -{69,19,-21}, -{69,19,-20}, -{69,19,-19}, -{69,19,-18}, -{69,19,-17}, -{69,19,-16}, -{69,19,-15}, -{69,19,-14}, -{69,19,-13}, -{69,19,-12}, -{69,19,-11}, -{69,19,-10}, -{69,19,-9}, -{69,19,-8}, -{69,19,-7}, -{69,19,-6}, -{69,19,-5}, -{69,19,-4}, -{69,19,-3}, -{69,19,-2}, -{69,19,-1}, -{69,19,0}, -{69,19,1}, -{69,19,2}, -{69,19,3}, -{69,19,4}, -{69,19,5}, -{69,19,6}, -{69,19,7}, -{69,19,8}, -{69,19,9}, -{69,19,10}, -{69,19,11}, -{69,19,12}, -{69,19,13}, -{69,19,14}, -{69,19,15}, -{69,19,16}, -{69,19,17}, -{69,19,18}, -{69,19,19}, -{69,19,20}, -{69,19,21}, -{69,19,22}, -{69,19,23}, -{69,19,24}, -{69,19,25}, -{69,19,26}, -{69,19,27}, -{69,19,28}, -{69,19,29}, -{69,19,30}, -{69,19,31}, -{69,19,32}, -{69,19,33}, -{69,19,34}, -{69,19,35}, -{69,19,36}, -{69,19,37}, -{69,19,38}, -{69,19,39}, -{69,19,40}, -{69,19,41}, -{69,19,42}, -{69,19,43}, -{69,19,44}, -{69,19,45}, -{69,19,46}, -{69,19,47}, -{69,19,48}, -{69,19,49}, -{69,19,50}, -{69,19,51}, -{69,19,52}, -{69,19,53}, -{69,19,54}, -{69,19,55}, -{69,19,56}, -{69,19,57}, -{69,19,58}, -{69,19,59}, -{69,19,60}, -{69,19,61}, -{69,19,62}, -{69,19,63}, -{69,19,64}, -{69,19,65}, -{69,19,66}, -{69,19,67}, -{69,19,68}, -{69,19,69}, -{69,19,70}, -{69,19,71}, -{69,19,72}, -{69,19,73}, -{69,20,-47}, -{69,20,-46}, -{69,20,-45}, -{69,20,-44}, -{69,20,-43}, -{69,20,-42}, -{69,20,-41}, -{69,20,-40}, -{69,20,-39}, -{69,20,-38}, -{69,20,-37}, -{69,20,-36}, -{69,20,-35}, -{69,20,-34}, -{69,20,-33}, -{69,20,-32}, -{69,20,-31}, -{69,20,-30}, -{69,20,-29}, -{69,20,-28}, -{69,20,-27}, -{69,20,-26}, -{69,20,-25}, -{69,20,-24}, -{69,20,-23}, -{69,20,-22}, -{69,20,-21}, -{69,20,-20}, -{69,20,-19}, -{69,20,-18}, -{69,20,-17}, -{69,20,-16}, -{69,20,-15}, -{69,20,-14}, -{69,20,-13}, -{69,20,-12}, -{69,20,-11}, -{69,20,-10}, -{69,20,-9}, -{69,20,-8}, -{69,20,-7}, -{69,20,-6}, -{69,20,-5}, -{69,20,-4}, -{69,20,-3}, -{69,20,-2}, -{69,20,-1}, -{69,20,0}, -{69,20,1}, -{69,20,2}, -{69,20,3}, -{69,20,4}, -{69,20,5}, -{69,20,6}, -{69,20,7}, -{69,20,8}, -{69,20,9}, -{69,20,10}, -{69,20,11}, -{69,20,12}, -{69,20,13}, -{69,20,14}, -{69,20,15}, -{69,20,16}, -{69,20,17}, -{69,20,18}, -{69,20,19}, -{69,20,20}, -{69,20,21}, -{69,20,22}, -{69,20,23}, -{69,20,24}, -{69,20,25}, -{69,20,26}, -{69,20,27}, -{69,20,28}, -{69,20,29}, -{69,20,30}, -{69,20,31}, -{69,20,32}, -{69,20,33}, -{69,20,34}, -{69,20,35}, -{69,20,36}, -{69,20,37}, -{69,20,38}, -{69,20,39}, -{69,20,40}, -{69,20,41}, -{69,20,42}, -{69,20,43}, -{69,20,44}, -{69,20,45}, -{69,20,46}, -{69,20,47}, -{69,20,48}, -{69,20,49}, -{69,20,50}, -{69,20,51}, -{69,20,52}, -{69,20,53}, -{69,20,54}, -{69,20,55}, -{69,20,56}, -{69,20,57}, -{69,20,58}, -{69,20,59}, -{69,20,60}, -{69,20,61}, -{69,20,62}, -{69,20,63}, -{69,20,64}, -{69,20,65}, -{69,20,66}, -{69,20,67}, -{69,20,68}, -{69,20,69}, -{69,20,70}, -{69,20,71}, -{69,20,72}, -{69,20,73}, -{69,21,-47}, -{69,21,-46}, -{69,21,-45}, -{69,21,-44}, -{69,21,-43}, -{69,21,-42}, -{69,21,-41}, -{69,21,-40}, -{69,21,-39}, -{69,21,-38}, -{69,21,-37}, -{69,21,-36}, -{69,21,-35}, -{69,21,-34}, -{69,21,-33}, -{69,21,-32}, -{69,21,-31}, -{69,21,-30}, -{69,21,-29}, -{69,21,-28}, -{69,21,-27}, -{69,21,-26}, -{69,21,-25}, -{69,21,-24}, -{69,21,-23}, -{69,21,-22}, -{69,21,-21}, -{69,21,-20}, -{69,21,-19}, -{69,21,-18}, -{69,21,-17}, -{69,21,-16}, -{69,21,-15}, -{69,21,-14}, -{69,21,-13}, -{69,21,-12}, -{69,21,-11}, -{69,21,-10}, -{69,21,-9}, -{69,21,-8}, -{69,21,-7}, -{69,21,-6}, -{69,21,-5}, -{69,21,-4}, -{69,21,-3}, -{69,21,-2}, -{69,21,-1}, -{69,21,0}, -{69,21,1}, -{69,21,2}, -{69,21,3}, -{69,21,4}, -{69,21,5}, -{69,21,6}, -{69,21,7}, -{69,21,8}, -{69,21,9}, -{69,21,10}, -{69,21,11}, -{69,21,12}, -{69,21,13}, -{69,21,14}, -{69,21,15}, -{69,21,16}, -{69,21,17}, -{69,21,18}, -{69,21,19}, -{69,21,20}, -{69,21,21}, -{69,21,22}, -{69,21,23}, -{69,21,24}, -{69,21,25}, -{69,21,26}, -{69,21,27}, -{69,21,28}, -{69,21,29}, -{69,21,30}, -{69,21,31}, -{69,21,32}, -{69,21,33}, -{69,21,34}, -{69,21,35}, -{69,21,36}, -{69,21,37}, -{69,21,38}, -{69,21,39}, -{69,21,40}, -{69,21,41}, -{69,21,42}, -{69,21,43}, -{69,21,44}, -{69,21,45}, -{69,21,46}, -{69,21,47}, -{69,21,48}, -{69,21,49}, -{69,21,50}, -{69,21,51}, -{69,21,52}, -{69,21,53}, -{69,21,54}, -{69,21,55}, -{69,21,56}, -{69,21,57}, -{69,21,58}, -{69,21,59}, -{69,21,60}, -{69,21,61}, -{69,21,62}, -{69,21,63}, -{69,21,64}, -{69,21,65}, -{69,21,66}, -{69,21,67}, -{69,21,68}, -{69,21,69}, -{69,21,70}, -{69,21,71}, -{69,21,72}, -{69,21,73}, -{69,22,-47}, -{69,22,-46}, -{69,22,-45}, -{69,22,-44}, -{69,22,-43}, -{69,22,-42}, -{69,22,-41}, -{69,22,-40}, -{69,22,-39}, -{69,22,-38}, -{69,22,-37}, -{69,22,-36}, -{69,22,-35}, -{69,22,-34}, -{69,22,-33}, -{69,22,-32}, -{69,22,-31}, -{69,22,-30}, -{69,22,-29}, -{69,22,-28}, -{69,22,-27}, -{69,22,-26}, -{69,22,-25}, -{69,22,-24}, -{69,22,-23}, -{69,22,-22}, -{69,22,-21}, -{69,22,-20}, -{69,22,-19}, -{69,22,-18}, -{69,22,-17}, -{69,22,-16}, -{69,22,-15}, -{69,22,-14}, -{69,22,-13}, -{69,22,-12}, -{69,22,-11}, -{69,22,-10}, -{69,22,-9}, -{69,22,-8}, -{69,22,-7}, -{69,22,-6}, -{69,22,-5}, -{69,22,-4}, -{69,22,-3}, -{69,22,-2}, -{69,22,-1}, -{69,22,0}, -{69,22,1}, -{69,22,2}, -{69,22,3}, -{69,22,4}, -{69,22,5}, -{69,22,6}, -{69,22,7}, -{69,22,8}, -{69,22,9}, -{69,22,10}, -{69,22,11}, -{69,22,12}, -{69,22,13}, -{69,22,14}, -{69,22,15}, -{69,22,16}, -{69,22,17}, -{69,22,18}, -{69,22,19}, -{69,22,20}, -{69,22,21}, -{69,22,22}, -{69,22,23}, -{69,22,24}, -{69,22,25}, -{69,22,26}, -{69,22,27}, -{69,22,28}, -{69,22,29}, -{69,22,30}, -{69,22,31}, -{69,22,32}, -{69,22,33}, -{69,22,34}, -{69,22,35}, -{69,22,36}, -{69,22,37}, -{69,22,38}, -{69,22,39}, -{69,22,40}, -{69,22,41}, -{69,22,42}, -{69,22,43}, -{69,22,44}, -{69,22,45}, -{69,22,46}, -{69,22,47}, -{69,22,48}, -{69,22,49}, -{69,22,50}, -{69,22,51}, -{69,22,52}, -{69,22,53}, -{69,22,54}, -{69,22,55}, -{69,22,56}, -{69,22,57}, -{69,22,58}, -{69,22,59}, -{69,22,60}, -{69,22,61}, -{69,22,62}, -{69,22,63}, -{69,22,64}, -{69,22,65}, -{69,22,66}, -{69,22,67}, -{69,22,68}, -{69,22,69}, -{69,22,70}, -{69,22,71}, -{69,22,72}, -{69,22,73}, -{69,23,-47}, -{69,23,-46}, -{69,23,-45}, -{69,23,-44}, -{69,23,-43}, -{69,23,-42}, -{69,23,-41}, -{69,23,-40}, -{69,23,-39}, -{69,23,-38}, -{69,23,-37}, -{69,23,-36}, -{69,23,-35}, -{69,23,-34}, -{69,23,-33}, -{69,23,-32}, -{69,23,-31}, -{69,23,-30}, -{69,23,-29}, -{69,23,-28}, -{69,23,-27}, -{69,23,-26}, -{69,23,-25}, -{69,23,-24}, -{69,23,-23}, -{69,23,-22}, -{69,23,-21}, -{69,23,-20}, -{69,23,-19}, -{69,23,-18}, -{69,23,-17}, -{69,23,-16}, -{69,23,-15}, -{69,23,-14}, -{69,23,-13}, -{69,23,-12}, -{69,23,-11}, -{69,23,-10}, -{69,23,-9}, -{69,23,-8}, -{69,23,-7}, -{69,23,-6}, -{69,23,-5}, -{69,23,-4}, -{69,23,-3}, -{69,23,-2}, -{69,23,-1}, -{69,23,0}, -{69,23,1}, -{69,23,2}, -{69,23,3}, -{69,23,4}, -{69,23,5}, -{69,23,6}, -{69,23,7}, -{69,23,8}, -{69,23,9}, -{69,23,10}, -{69,23,11}, -{69,23,12}, -{69,23,13}, -{69,23,14}, -{69,23,15}, -{69,23,16}, -{69,23,17}, -{69,23,18}, -{69,23,19}, -{69,23,20}, -{69,23,21}, -{69,23,22}, -{69,23,23}, -{69,23,24}, -{69,23,25}, -{69,23,26}, -{69,23,27}, -{69,23,28}, -{69,23,29}, -{69,23,30}, -{69,23,31}, -{69,23,32}, -{69,23,33}, -{69,23,34}, -{69,23,35}, -{69,23,36}, -{69,23,37}, -{69,23,38}, -{69,23,39}, -{69,23,40}, -{69,23,41}, -{69,23,42}, -{69,23,43}, -{69,23,44}, -{69,23,45}, -{69,23,46}, -{69,23,47}, -{69,23,48}, -{69,23,49}, -{69,23,50}, -{69,23,51}, -{69,23,52}, -{69,23,53}, -{69,23,54}, -{69,23,55}, -{69,23,56}, -{69,23,57}, -{69,23,58}, -{69,23,59}, -{69,23,60}, -{69,23,61}, -{69,23,62}, -{69,23,63}, -{69,23,64}, -{69,23,65}, -{69,23,66}, -{69,23,67}, -{69,23,68}, -{69,23,69}, -{69,23,70}, -{69,23,71}, -{69,23,72}, -{69,23,73}, -{69,23,74}, -{69,24,-47}, -{69,24,-46}, -{69,24,-45}, -{69,24,-44}, -{69,24,-43}, -{69,24,-42}, -{69,24,-41}, -{69,24,-40}, -{69,24,-39}, -{69,24,-38}, -{69,24,-37}, -{69,24,-36}, -{69,24,-35}, -{69,24,-34}, -{69,24,-33}, -{69,24,-32}, -{69,24,-31}, -{69,24,-30}, -{69,24,-29}, -{69,24,-28}, -{69,24,-27}, -{69,24,-26}, -{69,24,-25}, -{69,24,-24}, -{69,24,-23}, -{69,24,-22}, -{69,24,-21}, -{69,24,-20}, -{69,24,-19}, -{69,24,-18}, -{69,24,-17}, -{69,24,-16}, -{69,24,-15}, -{69,24,-14}, -{69,24,-13}, -{69,24,-12}, -{69,24,-11}, -{69,24,-10}, -{69,24,-9}, -{69,24,-8}, -{69,24,-7}, -{69,24,-6}, -{69,24,-5}, -{69,24,-4}, -{69,24,-3}, -{69,24,-2}, -{69,24,-1}, -{69,24,0}, -{69,24,1}, -{69,24,2}, -{69,24,3}, -{69,24,4}, -{69,24,5}, -{69,24,6}, -{69,24,7}, -{69,24,8}, -{69,24,9}, -{69,24,10}, -{69,24,11}, -{69,24,12}, -{69,24,13}, -{69,24,14}, -{69,24,15}, -{69,24,16}, -{69,24,17}, -{69,24,18}, -{69,24,19}, -{69,24,20}, -{69,24,21}, -{69,24,22}, -{69,24,23}, -{69,24,24}, -{69,24,25}, -{69,24,26}, -{69,24,27}, -{69,24,28}, -{69,24,29}, -{69,24,30}, -{69,24,31}, -{69,24,32}, -{69,24,33}, -{69,24,34}, -{69,24,35}, -{69,24,36}, -{69,24,37}, -{69,24,38}, -{69,24,39}, -{69,24,40}, -{69,24,41}, -{69,24,42}, -{69,24,43}, -{69,24,44}, -{69,24,45}, -{69,24,46}, -{69,24,47}, -{69,24,48}, -{69,24,49}, -{69,24,50}, -{69,24,51}, -{69,24,52}, -{69,24,53}, -{69,24,54}, -{69,24,55}, -{69,24,56}, -{69,24,57}, -{69,24,58}, -{69,24,59}, -{69,24,60}, -{69,24,61}, -{69,24,62}, -{69,24,63}, -{69,24,64}, -{69,24,65}, -{69,24,66}, -{69,24,67}, -{69,24,68}, -{69,24,69}, -{69,24,70}, -{69,24,71}, -{69,24,72}, -{69,24,73}, -{69,24,74}, -{69,25,-47}, -{69,25,-46}, -{69,25,-45}, -{69,25,-44}, -{69,25,-43}, -{69,25,-42}, -{69,25,-41}, -{69,25,-40}, -{69,25,-39}, -{69,25,-38}, -{69,25,-37}, -{69,25,-36}, -{69,25,-35}, -{69,25,-34}, -{69,25,-33}, -{69,25,-32}, -{69,25,-31}, -{69,25,-30}, -{69,25,-29}, -{69,25,-28}, -{69,25,-27}, -{69,25,-26}, -{69,25,-25}, -{69,25,-24}, -{69,25,-23}, -{69,25,-22}, -{69,25,-21}, -{69,25,-20}, -{69,25,-19}, -{69,25,-18}, -{69,25,-17}, -{69,25,-16}, -{69,25,-15}, -{69,25,-14}, -{69,25,-13}, -{69,25,-12}, -{69,25,-11}, -{69,25,-10}, -{69,25,-9}, -{69,25,-8}, -{69,25,-7}, -{69,25,-6}, -{69,25,-5}, -{69,25,-4}, -{69,25,-3}, -{69,25,-2}, -{69,25,-1}, -{69,25,0}, -{69,25,1}, -{69,25,2}, -{69,25,3}, -{69,25,4}, -{69,25,5}, -{69,25,6}, -{69,25,7}, -{69,25,8}, -{69,25,9}, -{69,25,10}, -{69,25,11}, -{69,25,12}, -{69,25,13}, -{69,25,14}, -{69,25,15}, -{69,25,16}, -{69,25,17}, -{69,25,18}, -{69,25,19}, -{69,25,20}, -{69,25,21}, -{69,25,22}, -{69,25,23}, -{69,25,24}, -{69,25,25}, -{69,25,26}, -{69,25,27}, -{69,25,28}, -{69,25,29}, -{69,25,30}, -{69,25,31}, -{69,25,32}, -{69,25,33}, -{69,25,34}, -{69,25,35}, -{69,25,36}, -{69,25,37}, -{69,25,38}, -{69,25,39}, -{69,25,40}, -{69,25,41}, -{69,25,42}, -{69,25,43}, -{69,25,44}, -{69,25,45}, -{69,25,46}, -{69,25,47}, -{69,25,48}, -{69,25,49}, -{69,25,50}, -{69,25,51}, -{69,25,52}, -{69,25,53}, -{69,25,54}, -{69,25,55}, -{69,25,56}, -{69,25,57}, -{69,25,58}, -{69,25,59}, -{69,25,60}, -{69,25,61}, -{69,25,62}, -{69,25,63}, -{69,25,64}, -{69,25,65}, -{69,25,66}, -{69,25,67}, -{69,25,68}, -{69,25,69}, -{69,25,70}, -{69,25,71}, -{69,25,72}, -{69,25,73}, -{69,25,74}, -{69,26,-47}, -{69,26,-46}, -{69,26,-45}, -{69,26,-44}, -{69,26,-43}, -{69,26,-42}, -{69,26,-41}, -{69,26,-40}, -{69,26,-39}, -{69,26,-38}, -{69,26,-37}, -{69,26,-36}, -{69,26,-35}, -{69,26,-34}, -{69,26,-33}, -{69,26,-32}, -{69,26,-31}, -{69,26,-30}, -{69,26,-29}, -{69,26,-28}, -{69,26,-27}, -{69,26,-26}, -{69,26,-25}, -{69,26,-24}, -{69,26,-23}, -{69,26,-22}, -{69,26,-21}, -{69,26,-20}, -{69,26,-19}, -{69,26,-18}, -{69,26,-17}, -{69,26,-16}, -{69,26,-15}, -{69,26,-14}, -{69,26,-13}, -{69,26,-12}, -{69,26,-11}, -{69,26,-10}, -{69,26,-9}, -{69,26,-8}, -{69,26,-7}, -{69,26,-6}, -{69,26,-5}, -{69,26,-4}, -{69,26,-3}, -{69,26,-2}, -{69,26,-1}, -{69,26,0}, -{69,26,1}, -{69,26,2}, -{69,26,3}, -{69,26,4}, -{69,26,5}, -{69,26,6}, -{69,26,7}, -{69,26,8}, -{69,26,9}, -{69,26,10}, -{69,26,11}, -{69,26,12}, -{69,26,13}, -{69,26,14}, -{69,26,15}, -{69,26,16}, -{69,26,17}, -{69,26,18}, -{69,26,19}, -{69,26,20}, -{69,26,21}, -{69,26,22}, -{69,26,23}, -{69,26,24}, -{69,26,25}, -{69,26,26}, -{69,26,27}, -{69,26,28}, -{69,26,29}, -{69,26,30}, -{69,26,31}, -{69,26,32}, -{69,26,33}, -{69,26,34}, -{69,26,35}, -{69,26,36}, -{69,26,37}, -{69,26,38}, -{69,26,39}, -{69,26,40}, -{69,26,41}, -{69,26,42}, -{69,26,43}, -{69,26,44}, -{69,26,45}, -{69,26,46}, -{69,26,47}, -{69,26,48}, -{69,26,49}, -{69,26,50}, -{69,26,51}, -{69,26,52}, -{69,26,53}, -{69,26,54}, -{69,26,55}, -{69,26,56}, -{69,26,57}, -{69,26,58}, -{69,26,59}, -{69,26,60}, -{69,26,61}, -{69,26,62}, -{69,26,63}, -{69,26,64}, -{69,26,65}, -{69,26,66}, -{69,26,67}, -{69,26,68}, -{69,26,69}, -{69,26,70}, -{69,26,71}, -{69,26,72}, -{69,26,73}, -{69,26,74}, -{69,27,-47}, -{69,27,-46}, -{69,27,-45}, -{69,27,-44}, -{69,27,-43}, -{69,27,-42}, -{69,27,-41}, -{69,27,-40}, -{69,27,-39}, -{69,27,-38}, -{69,27,-37}, -{69,27,-36}, -{69,27,-35}, -{69,27,-34}, -{69,27,-33}, -{69,27,-32}, -{69,27,-31}, -{69,27,-30}, -{69,27,-29}, -{69,27,-28}, -{69,27,-27}, -{69,27,-26}, -{69,27,-25}, -{69,27,-24}, -{69,27,-23}, -{69,27,-22}, -{69,27,-21}, -{69,27,-20}, -{69,27,-19}, -{69,27,-18}, -{69,27,-17}, -{69,27,-16}, -{69,27,-15}, -{69,27,-14}, -{69,27,-13}, -{69,27,-12}, -{69,27,-11}, -{69,27,-10}, -{69,27,-9}, -{69,27,-8}, -{69,27,-7}, -{69,27,-6}, -{69,27,-5}, -{69,27,-4}, -{69,27,-3}, -{69,27,-2}, -{69,27,-1}, -{69,27,0}, -{69,27,1}, -{69,27,2}, -{69,27,3}, -{69,27,4}, -{69,27,5}, -{69,27,6}, -{69,27,7}, -{69,27,8}, -{69,27,9}, -{69,27,10}, -{69,27,11}, -{69,27,12}, -{69,27,13}, -{69,27,14}, -{69,27,15}, -{69,27,16}, -{69,27,17}, -{69,27,18}, -{69,27,19}, -{69,27,20}, -{69,27,21}, -{69,27,22}, -{69,27,23}, -{69,27,24}, -{69,27,25}, -{69,27,26}, -{69,27,27}, -{69,27,28}, -{69,27,29}, -{69,27,30}, -{69,27,31}, -{69,27,32}, -{69,27,33}, -{69,27,34}, -{69,27,35}, -{69,27,36}, -{69,27,37}, -{69,27,38}, -{69,27,39}, -{69,27,40}, -{69,27,41}, -{69,27,42}, -{69,27,43}, -{69,27,44}, -{69,27,45}, -{69,27,46}, -{69,27,47}, -{69,27,48}, -{69,27,49}, -{69,27,50}, -{69,27,51}, -{69,27,52}, -{69,27,53}, -{69,27,54}, -{69,27,55}, -{69,27,56}, -{69,27,57}, -{69,27,58}, -{69,27,59}, -{69,27,60}, -{69,27,61}, -{69,27,62}, -{69,27,63}, -{69,27,64}, -{69,27,65}, -{69,27,66}, -{69,27,67}, -{69,27,68}, -{69,27,69}, -{69,27,70}, -{69,27,71}, -{69,27,72}, -{69,27,73}, -{69,27,74}, -{69,28,-47}, -{69,28,-46}, -{69,28,-45}, -{69,28,-44}, -{69,28,-43}, -{69,28,-42}, -{69,28,-41}, -{69,28,-40}, -{69,28,-39}, -{69,28,-38}, -{69,28,-37}, -{69,28,-36}, -{69,28,-35}, -{69,28,-34}, -{69,28,-33}, -{69,28,-32}, -{69,28,-31}, -{69,28,-30}, -{69,28,-29}, -{69,28,-28}, -{69,28,-27}, -{69,28,-26}, -{69,28,-25}, -{69,28,-24}, -{69,28,-23}, -{69,28,-22}, -{69,28,-21}, -{69,28,-20}, -{69,28,-19}, -{69,28,-18}, -{69,28,-17}, -{69,28,-16}, -{69,28,-15}, -{69,28,-14}, -{69,28,-13}, -{69,28,-12}, -{69,28,-11}, -{69,28,-10}, -{69,28,-9}, -{69,28,-8}, -{69,28,-7}, -{69,28,-6}, -{69,28,-5}, -{69,28,-4}, -{69,28,-3}, -{69,28,-2}, -{69,28,-1}, -{69,28,0}, -{69,28,1}, -{69,28,2}, -{69,28,3}, -{69,28,4}, -{69,28,5}, -{69,28,6}, -{69,28,7}, -{69,28,8}, -{69,28,9}, -{69,28,10}, -{69,28,11}, -{69,28,12}, -{69,28,13}, -{69,28,14}, -{69,28,15}, -{69,28,16}, -{69,28,17}, -{69,28,18}, -{69,28,19}, -{69,28,20}, -{69,28,21}, -{69,28,22}, -{69,28,23}, -{69,28,24}, -{69,28,25}, -{69,28,26}, -{69,28,27}, -{69,28,28}, -{69,28,29}, -{69,28,30}, -{69,28,31}, -{69,28,32}, -{69,28,33}, -{69,28,34}, -{69,28,35}, -{69,28,36}, -{69,28,37}, -{69,28,38}, -{69,28,39}, -{69,28,40}, -{69,28,41}, -{69,28,42}, -{69,28,43}, -{69,28,44}, -{69,28,45}, -{69,28,46}, -{69,28,47}, -{69,28,48}, -{69,28,49}, -{69,28,50}, -{69,28,51}, -{69,28,52}, -{69,28,53}, -{69,28,54}, -{69,28,55}, -{69,28,56}, -{69,28,57}, -{69,28,58}, -{69,28,59}, -{69,28,60}, -{69,28,61}, -{69,28,62}, -{69,28,63}, -{69,28,64}, -{69,28,65}, -{69,28,66}, -{69,28,67}, -{69,28,68}, -{69,28,69}, -{69,28,70}, -{69,28,71}, -{69,28,72}, -{69,28,73}, -{69,28,74}, -{69,29,-47}, -{69,29,-46}, -{69,29,-45}, -{69,29,-44}, -{69,29,-43}, -{69,29,-42}, -{69,29,-41}, -{69,29,-40}, -{69,29,-39}, -{69,29,-38}, -{69,29,-37}, -{69,29,-36}, -{69,29,-35}, -{69,29,-34}, -{69,29,-33}, -{69,29,-32}, -{69,29,-31}, -{69,29,-30}, -{69,29,-29}, -{69,29,-28}, -{69,29,-27}, -{69,29,-26}, -{69,29,-25}, -{69,29,-24}, -{69,29,-23}, -{69,29,-22}, -{69,29,-21}, -{69,29,-20}, -{69,29,-19}, -{69,29,-18}, -{69,29,-17}, -{69,29,-16}, -{69,29,-15}, -{69,29,-14}, -{69,29,-13}, -{69,29,-12}, -{69,29,-11}, -{69,29,-10}, -{69,29,-9}, -{69,29,-8}, -{69,29,-7}, -{69,29,-6}, -{69,29,-5}, -{69,29,-4}, -{69,29,-3}, -{69,29,-2}, -{69,29,-1}, -{69,29,0}, -{69,29,1}, -{69,29,2}, -{69,29,3}, -{69,29,4}, -{69,29,5}, -{69,29,6}, -{69,29,7}, -{69,29,8}, -{69,29,9}, -{69,29,10}, -{69,29,11}, -{69,29,12}, -{69,29,13}, -{69,29,14}, -{69,29,15}, -{69,29,16}, -{69,29,17}, -{69,29,18}, -{69,29,19}, -{69,29,20}, -{69,29,21}, -{69,29,22}, -{69,29,23}, -{69,29,24}, -{69,29,25}, -{69,29,26}, -{69,29,27}, -{69,29,28}, -{69,29,29}, -{69,29,30}, -{69,29,31}, -{69,29,32}, -{69,29,33}, -{69,29,34}, -{69,29,35}, -{69,29,36}, -{69,29,37}, -{69,29,38}, -{69,29,39}, -{69,29,40}, -{69,29,41}, -{69,29,42}, -{69,29,43}, -{69,29,44}, -{69,29,45}, -{69,29,46}, -{69,29,47}, -{69,29,48}, -{69,29,49}, -{69,29,50}, -{69,29,51}, -{69,29,52}, -{69,29,53}, -{69,29,54}, -{69,29,55}, -{69,29,56}, -{69,29,57}, -{69,29,58}, -{69,29,59}, -{69,29,60}, -{69,29,61}, -{69,29,62}, -{69,29,63}, -{69,29,64}, -{69,29,65}, -{69,29,66}, -{69,29,67}, -{69,29,68}, -{69,29,69}, -{69,29,70}, -{69,29,71}, -{69,29,72}, -{69,29,73}, -{69,29,74}, -{69,30,-47}, -{69,30,-46}, -{69,30,-45}, -{69,30,-44}, -{69,30,-43}, -{69,30,-42}, -{69,30,-41}, -{69,30,-40}, -{69,30,-39}, -{69,30,-38}, -{69,30,-37}, -{69,30,-36}, -{69,30,-35}, -{69,30,-34}, -{69,30,-33}, -{69,30,-32}, -{69,30,-31}, -{69,30,-30}, -{69,30,-29}, -{69,30,-28}, -{69,30,-27}, -{69,30,-26}, -{69,30,-25}, -{69,30,-24}, -{69,30,-23}, -{69,30,-22}, -{69,30,-21}, -{69,30,-20}, -{69,30,-19}, -{69,30,-18}, -{69,30,-17}, -{69,30,-16}, -{69,30,-15}, -{69,30,-14}, -{69,30,-13}, -{69,30,-12}, -{69,30,-11}, -{69,30,-10}, -{69,30,-9}, -{69,30,-8}, -{69,30,-7}, -{69,30,-6}, -{69,30,-5}, -{69,30,-4}, -{69,30,-3}, -{69,30,-2}, -{69,30,-1}, -{69,30,0}, -{69,30,1}, -{69,30,2}, -{69,30,3}, -{69,30,4}, -{69,30,5}, -{69,30,6}, -{69,30,7}, -{69,30,8}, -{69,30,9}, -{69,30,10}, -{69,30,11}, -{69,30,12}, -{69,30,13}, -{69,30,14}, -{69,30,15}, -{69,30,16}, -{69,30,17}, -{69,30,18}, -{69,30,19}, -{69,30,20}, -{69,30,21}, -{69,30,22}, -{69,30,23}, -{69,30,24}, -{69,30,25}, -{69,30,26}, -{69,30,27}, -{69,30,28}, -{69,30,29}, -{69,30,30}, -{69,30,31}, -{69,30,32}, -{69,30,33}, -{69,30,34}, -{69,30,35}, -{69,30,36}, -{69,30,37}, -{69,30,38}, -{69,30,39}, -{69,30,40}, -{69,30,41}, -{69,30,42}, -{69,30,43}, -{69,30,44}, -{69,30,45}, -{69,30,46}, -{69,30,47}, -{69,30,48}, -{69,30,49}, -{69,30,50}, -{69,30,51}, -{69,30,52}, -{69,30,53}, -{69,30,54}, -{69,30,55}, -{69,30,56}, -{69,30,57}, -{69,30,58}, -{69,30,59}, -{69,30,60}, -{69,30,61}, -{69,30,62}, -{69,30,63}, -{69,30,64}, -{69,30,65}, -{69,30,66}, -{69,30,67}, -{69,30,68}, -{69,30,69}, -{69,30,70}, -{69,30,71}, -{69,30,72}, -{69,30,73}, -{69,30,74}, -{69,31,-47}, -{69,31,-46}, -{69,31,-45}, -{69,31,-44}, -{69,31,-43}, -{69,31,-42}, -{69,31,-41}, -{69,31,-40}, -{69,31,-39}, -{69,31,-38}, -{69,31,-37}, -{69,31,-36}, -{69,31,-35}, -{69,31,-34}, -{69,31,-33}, -{69,31,-32}, -{69,31,-31}, -{69,31,-30}, -{69,31,-29}, -{69,31,-28}, -{69,31,-27}, -{69,31,-26}, -{69,31,-25}, -{69,31,-24}, -{69,31,-23}, -{69,31,-22}, -{69,31,-21}, -{69,31,-20}, -{69,31,-19}, -{69,31,-18}, -{69,31,-17}, -{69,31,-16}, -{69,31,-15}, -{69,31,-14}, -{69,31,-13}, -{69,31,-12}, -{69,31,-11}, -{69,31,-10}, -{69,31,-9}, -{69,31,-8}, -{69,31,-7}, -{69,31,-6}, -{69,31,-5}, -{69,31,-4}, -{69,31,-3}, -{69,31,-2}, -{69,31,-1}, -{69,31,0}, -{69,31,1}, -{69,31,2}, -{69,31,3}, -{69,31,4}, -{69,31,5}, -{69,31,6}, -{69,31,7}, -{69,31,8}, -{69,31,9}, -{69,31,10}, -{69,31,11}, -{69,31,12}, -{69,31,13}, -{69,31,14}, -{69,31,15}, -{69,31,16}, -{69,31,17}, -{69,31,18}, -{69,31,19}, -{69,31,20}, -{69,31,21}, -{69,31,22}, -{69,31,23}, -{69,31,24}, -{69,31,25}, -{69,31,26}, -{69,31,27}, -{69,31,28}, -{69,31,29}, -{69,31,30}, -{69,31,31}, -{69,31,32}, -{69,31,33}, -{69,31,34}, -{69,31,35}, -{69,31,36}, -{69,31,37}, -{69,31,38}, -{69,31,39}, -{69,31,40}, -{69,31,41}, -{69,31,42}, -{69,31,43}, -{69,31,44}, -{69,31,45}, -{69,31,46}, -{69,31,47}, -{69,31,48}, -{69,31,49}, -{69,31,50}, -{69,31,51}, -{69,31,52}, -{69,31,53}, -{69,31,54}, -{69,31,55}, -{69,31,56}, -{69,31,57}, -{69,31,58}, -{69,31,59}, -{69,31,60}, -{69,31,61}, -{69,31,62}, -{69,31,63}, -{69,31,64}, -{69,31,65}, -{69,31,66}, -{69,31,67}, -{69,31,68}, -{69,31,69}, -{69,31,70}, -{69,31,71}, -{69,31,72}, -{69,31,73}, -{69,31,74}, -{69,32,-47}, -{69,32,-46}, -{69,32,-45}, -{69,32,-44}, -{69,32,-43}, -{69,32,-42}, -{69,32,-41}, -{69,32,-40}, -{69,32,-39}, -{69,32,-38}, -{69,32,-37}, -{69,32,-36}, -{69,32,-35}, -{69,32,-34}, -{69,32,-33}, -{69,32,-32}, -{69,32,-31}, -{69,32,-30}, -{69,32,-29}, -{69,32,-28}, -{69,32,-27}, -{69,32,-26}, -{69,32,-25}, -{69,32,-24}, -{69,32,-23}, -{69,32,-22}, -{69,32,-21}, -{69,32,-20}, -{69,32,-19}, -{69,32,-18}, -{69,32,-17}, -{69,32,-16}, -{69,32,-15}, -{69,32,-14}, -{69,32,-13}, -{69,32,-12}, -{69,32,-11}, -{69,32,-10}, -{69,32,-9}, -{69,32,-8}, -{69,32,-7}, -{69,32,-6}, -{69,32,-5}, -{69,32,-4}, -{69,32,-3}, -{69,32,-2}, -{69,32,-1}, -{69,32,0}, -{69,32,1}, -{69,32,2}, -{69,32,3}, -{69,32,4}, -{69,32,5}, -{69,32,6}, -{69,32,7}, -{69,32,8}, -{69,32,9}, -{69,32,10}, -{69,32,11}, -{69,32,12}, -{69,32,13}, -{69,32,14}, -{69,32,15}, -{69,32,16}, -{69,32,17}, -{69,32,18}, -{69,32,19}, -{69,32,20}, -{69,32,21}, -{69,32,22}, -{69,32,23}, -{69,32,24}, -{69,32,25}, -{69,32,26}, -{69,32,27}, -{69,32,28}, -{69,32,29}, -{69,32,30}, -{69,32,31}, -{69,32,32}, -{69,32,33}, -{69,32,34}, -{69,32,35}, -{69,32,36}, -{69,32,37}, -{69,32,38}, -{69,32,39}, -{69,32,40}, -{69,32,41}, -{69,32,42}, -{69,32,43}, -{69,32,44}, -{69,32,45}, -{69,32,46}, -{69,32,47}, -{69,32,48}, -{69,32,49}, -{69,32,50}, -{69,32,51}, -{69,32,52}, -{69,32,53}, -{69,32,54}, -{69,32,55}, -{69,32,56}, -{69,32,57}, -{69,32,58}, -{69,32,59}, -{69,32,60}, -{69,32,61}, -{69,32,62}, -{69,32,63}, -{69,32,64}, -{69,32,65}, -{69,32,66}, -{69,32,67}, -{69,32,68}, -{69,32,69}, -{69,32,70}, -{69,32,71}, -{69,32,72}, -{69,32,73}, -{69,32,74}, -{69,33,-47}, -{69,33,-46}, -{69,33,-45}, -{69,33,-44}, -{69,33,-43}, -{69,33,-42}, -{69,33,-41}, -{69,33,-40}, -{69,33,-39}, -{69,33,-38}, -{69,33,-37}, -{69,33,-36}, -{69,33,-35}, -{69,33,-34}, -{69,33,-33}, -{69,33,-32}, -{69,33,-31}, -{69,33,-30}, -{69,33,-29}, -{69,33,-28}, -{69,33,-27}, -{69,33,-26}, -{69,33,-25}, -{69,33,-24}, -{69,33,-23}, -{69,33,-22}, -{69,33,-21}, -{69,33,-20}, -{69,33,-19}, -{69,33,-18}, -{69,33,-17}, -{69,33,-16}, -{69,33,-15}, -{69,33,-14}, -{69,33,-13}, -{69,33,-12}, -{69,33,-11}, -{69,33,-10}, -{69,33,-9}, -{69,33,-8}, -{69,33,-7}, -{69,33,-6}, -{69,33,-5}, -{69,33,-4}, -{69,33,-3}, -{69,33,-2}, -{69,33,-1}, -{69,33,0}, -{69,33,1}, -{69,33,2}, -{69,33,3}, -{69,33,4}, -{69,33,5}, -{69,33,6}, -{69,33,7}, -{69,33,8}, -{69,33,9}, -{69,33,10}, -{69,33,11}, -{69,33,12}, -{69,33,13}, -{69,33,14}, -{69,33,15}, -{69,33,16}, -{69,33,17}, -{69,33,18}, -{69,33,19}, -{69,33,20}, -{69,33,21}, -{69,33,22}, -{69,33,23}, -{69,33,24}, -{69,33,25}, -{69,33,26}, -{69,33,27}, -{69,33,28}, -{69,33,29}, -{69,33,30}, -{69,33,31}, -{69,33,32}, -{69,33,33}, -{69,33,34}, -{69,33,35}, -{69,33,36}, -{69,33,37}, -{69,33,38}, -{69,33,39}, -{69,33,40}, -{69,33,41}, -{69,33,42}, -{69,33,43}, -{69,33,44}, -{69,33,45}, -{69,33,46}, -{69,33,47}, -{69,33,48}, -{69,33,49}, -{69,33,50}, -{69,33,51}, -{69,33,52}, -{69,33,53}, -{69,33,54}, -{69,33,55}, -{69,33,56}, -{69,33,57}, -{69,33,58}, -{69,33,59}, -{69,33,60}, -{69,33,61}, -{69,33,62}, -{69,33,63}, -{69,33,64}, -{69,33,65}, -{69,33,66}, -{69,33,67}, -{69,33,68}, -{69,33,69}, -{69,33,70}, -{69,33,71}, -{69,33,72}, -{69,33,73}, -{69,33,74}, -{69,34,-47}, -{69,34,-46}, -{69,34,-45}, -{69,34,-44}, -{69,34,-43}, -{69,34,-42}, -{69,34,-41}, -{69,34,-40}, -{69,34,-39}, -{69,34,-38}, -{69,34,-37}, -{69,34,-36}, -{69,34,-35}, -{69,34,-34}, -{69,34,-33}, -{69,34,-32}, -{69,34,-31}, -{69,34,-30}, -{69,34,-29}, -{69,34,-28}, -{69,34,-27}, -{69,34,-26}, -{69,34,-25}, -{69,34,-24}, -{69,34,-23}, -{69,34,-22}, -{69,34,-21}, -{69,34,-20}, -{69,34,-19}, -{69,34,-18}, -{69,34,-17}, -{69,34,-16}, -{69,34,-15}, -{69,34,-14}, -{69,34,-13}, -{69,34,-12}, -{69,34,-11}, -{69,34,-10}, -{69,34,-9}, -{69,34,-8}, -{69,34,-7}, -{69,34,-6}, -{69,34,-5}, -{69,34,-4}, -{69,34,-3}, -{69,34,-2}, -{69,34,-1}, -{69,34,0}, -{69,34,1}, -{69,34,2}, -{69,34,3}, -{69,34,4}, -{69,34,5}, -{69,34,6}, -{69,34,7}, -{69,34,8}, -{69,34,9}, -{69,34,10}, -{69,34,11}, -{69,34,12}, -{69,34,13}, -{69,34,14}, -{69,34,15}, -{69,34,16}, -{69,34,17}, -{69,34,18}, -{69,34,19}, -{69,34,20}, -{69,34,21}, -{69,34,22}, -{69,34,23}, -{69,34,24}, -{69,34,25}, -{69,34,26}, -{69,34,27}, -{69,34,28}, -{69,34,29}, -{69,34,30}, -{69,34,31}, -{69,34,32}, -{69,34,33}, -{69,34,34}, -{69,34,35}, -{69,34,36}, -{69,34,37}, -{69,34,38}, -{69,34,39}, -{69,34,40}, -{69,34,41}, -{69,34,42}, -{69,34,43}, -{69,34,44}, -{69,34,45}, -{69,34,46}, -{69,34,47}, -{69,34,48}, -{69,34,49}, -{69,34,50}, -{69,34,51}, -{69,34,52}, -{69,34,53}, -{69,34,54}, -{69,34,55}, -{69,34,56}, -{69,34,57}, -{69,34,58}, -{69,34,59}, -{69,34,60}, -{69,34,61}, -{69,34,62}, -{69,34,63}, -{69,34,64}, -{69,34,65}, -{69,34,66}, -{69,34,67}, -{69,34,68}, -{69,34,69}, -{69,34,70}, -{69,34,71}, -{69,34,72}, -{69,34,73}, -{69,34,74}, -{69,34,75}, -{69,35,-47}, -{69,35,-46}, -{69,35,-45}, -{69,35,-44}, -{69,35,-43}, -{69,35,-42}, -{69,35,-41}, -{69,35,-40}, -{69,35,-39}, -{69,35,-38}, -{69,35,-37}, -{69,35,-36}, -{69,35,-35}, -{69,35,-34}, -{69,35,-33}, -{69,35,-32}, -{69,35,-31}, -{69,35,-30}, -{69,35,-29}, -{69,35,-28}, -{69,35,-27}, -{69,35,-26}, -{69,35,-25}, -{69,35,-24}, -{69,35,-23}, -{69,35,-22}, -{69,35,-21}, -{69,35,-20}, -{69,35,-19}, -{69,35,-18}, -{69,35,-17}, -{69,35,-16}, -{69,35,-15}, -{69,35,-14}, -{69,35,-13}, -{69,35,-12}, -{69,35,-11}, -{69,35,-10}, -{69,35,-9}, -{69,35,-8}, -{69,35,-7}, -{69,35,-6}, -{69,35,-5}, -{69,35,-4}, -{69,35,-3}, -{69,35,-2}, -{69,35,-1}, -{69,35,0}, -{69,35,1}, -{69,35,2}, -{69,35,3}, -{69,35,4}, -{69,35,5}, -{69,35,6}, -{69,35,7}, -{69,35,8}, -{69,35,9}, -{69,35,10}, -{69,35,11}, -{69,35,12}, -{69,35,13}, -{69,35,14}, -{69,35,15}, -{69,35,16}, -{69,35,17}, -{69,35,18}, -{69,35,19}, -{69,35,20}, -{69,35,21}, -{69,35,22}, -{69,35,23}, -{69,35,24}, -{69,35,25}, -{69,35,26}, -{69,35,27}, -{69,35,28}, -{69,35,29}, -{69,35,30}, -{69,35,31}, -{69,35,32}, -{69,35,33}, -{69,35,34}, -{69,35,35}, -{69,35,36}, -{69,35,37}, -{69,35,38}, -{69,35,39}, -{69,35,40}, -{69,35,41}, -{69,35,42}, -{69,35,43}, -{69,35,44}, -{69,35,45}, -{69,35,46}, -{69,35,47}, -{69,35,48}, -{69,35,49}, -{69,35,50}, -{69,35,51}, -{69,35,52}, -{69,35,53}, -{69,35,54}, -{69,35,55}, -{69,35,56}, -{69,35,57}, -{69,35,58}, -{69,35,59}, -{69,35,60}, -{69,35,61}, -{69,35,62}, -{69,35,63}, -{69,35,64}, -{69,35,65}, -{69,35,66}, -{69,35,67}, -{69,35,68}, -{69,35,69}, -{69,35,70}, -{69,35,71}, -{69,35,72}, -{69,35,73}, -{69,35,74}, -{69,35,75}, -{69,36,-47}, -{69,36,-46}, -{69,36,-45}, -{69,36,-44}, -{69,36,-43}, -{69,36,-42}, -{69,36,-41}, -{69,36,-40}, -{69,36,-39}, -{69,36,-38}, -{69,36,-37}, -{69,36,-36}, -{69,36,-35}, -{69,36,-34}, -{69,36,-33}, -{69,36,-32}, -{69,36,-31}, -{69,36,-30}, -{69,36,-29}, -{69,36,-28}, -{69,36,-27}, -{69,36,-26}, -{69,36,-25}, -{69,36,-24}, -{69,36,-23}, -{69,36,-22}, -{69,36,-21}, -{69,36,-20}, -{69,36,-19}, -{69,36,-18}, -{69,36,-17}, -{69,36,-16}, -{69,36,-15}, -{69,36,-14}, -{69,36,-13}, -{69,36,-12}, -{69,36,-11}, -{69,36,-10}, -{69,36,-9}, -{69,36,-8}, -{69,36,-7}, -{69,36,-6}, -{69,36,-5}, -{69,36,-4}, -{69,36,-3}, -{69,36,-2}, -{69,36,-1}, -{69,36,0}, -{69,36,1}, -{69,36,2}, -{69,36,3}, -{69,36,4}, -{69,36,5}, -{69,36,6}, -{69,36,7}, -{69,36,8}, -{69,36,9}, -{69,36,10}, -{69,36,11}, -{69,36,12}, -{69,36,13}, -{69,36,14}, -{69,36,15}, -{69,36,16}, -{69,36,17}, -{69,36,18}, -{69,36,19}, -{69,36,20}, -{69,36,21}, -{69,36,22}, -{69,36,23}, -{69,36,24}, -{69,36,25}, -{69,36,26}, -{69,36,27}, -{69,36,28}, -{69,36,29}, -{69,36,30}, -{69,36,31}, -{69,36,32}, -{69,36,33}, -{69,36,34}, -{69,36,35}, -{69,36,36}, -{69,36,37}, -{69,36,38}, -{69,36,39}, -{69,36,40}, -{69,36,41}, -{69,36,42}, -{69,36,43}, -{69,36,44}, -{69,36,45}, -{69,36,46}, -{69,36,47}, -{69,36,48}, -{69,36,49}, -{69,36,50}, -{69,36,51}, -{69,36,52}, -{69,36,53}, -{69,36,54}, -{69,36,55}, -{69,36,56}, -{69,36,57}, -{69,36,58}, -{69,36,59}, -{69,36,60}, -{69,36,61}, -{69,36,62}, -{69,36,63}, -{69,36,64}, -{69,36,65}, -{69,36,66}, -{69,36,67}, -{69,36,68}, -{69,36,69}, -{69,36,70}, -{69,36,71}, -{69,36,72}, -{69,36,73}, -{69,36,74}, -{69,36,75}, -{69,37,-47}, -{69,37,-46}, -{69,37,-45}, -{69,37,-44}, -{69,37,-43}, -{69,37,-42}, -{69,37,-41}, -{69,37,-40}, -{69,37,-39}, -{69,37,-38}, -{69,37,-37}, -{69,37,-36}, -{69,37,-35}, -{69,37,-34}, -{69,37,-33}, -{69,37,-32}, -{69,37,-31}, -{69,37,-30}, -{69,37,-29}, -{69,37,-28}, -{69,37,-27}, -{69,37,-26}, -{69,37,-25}, -{69,37,-24}, -{69,37,-23}, -{69,37,-22}, -{69,37,-21}, -{69,37,-20}, -{69,37,-19}, -{69,37,-18}, -{69,37,-17}, -{69,37,-16}, -{69,37,-15}, -{69,37,-14}, -{69,37,-13}, -{69,37,-12}, -{69,37,-11}, -{69,37,-10}, -{69,37,-9}, -{69,37,-8}, -{69,37,-7}, -{69,37,-6}, -{69,37,-5}, -{69,37,-4}, -{69,37,-3}, -{69,37,-2}, -{69,37,-1}, -{69,37,0}, -{69,37,1}, -{69,37,2}, -{69,37,3}, -{69,37,4}, -{69,37,5}, -{69,37,6}, -{69,37,7}, -{69,37,8}, -{69,37,9}, -{69,37,10}, -{69,37,11}, -{69,37,12}, -{69,37,13}, -{69,37,14}, -{69,37,15}, -{69,37,16}, -{69,37,17}, -{69,37,18}, -{69,37,19}, -{69,37,20}, -{69,37,21}, -{69,37,22}, -{69,37,23}, -{69,37,24}, -{69,37,25}, -{69,37,26}, -{69,37,27}, -{69,37,28}, -{69,37,29}, -{69,37,30}, -{69,37,31}, -{69,37,32}, -{69,37,33}, -{69,37,34}, -{69,37,35}, -{69,37,36}, -{69,37,37}, -{69,37,38}, -{69,37,39}, -{69,37,40}, -{69,37,41}, -{69,37,42}, -{69,37,43}, -{69,37,44}, -{69,37,45}, -{69,37,46}, -{69,37,47}, -{69,37,48}, -{69,37,49}, -{69,37,50}, -{69,37,51}, -{69,37,52}, -{69,37,53}, -{69,37,54}, -{69,37,55}, -{69,37,56}, -{69,37,57}, -{69,37,58}, -{69,37,59}, -{69,37,60}, -{69,37,61}, -{69,37,62}, -{69,37,63}, -{69,37,64}, -{69,37,65}, -{69,37,66}, -{69,37,67}, -{69,37,68}, -{69,37,69}, -{69,37,70}, -{69,37,71}, -{69,37,72}, -{69,37,73}, -{69,37,74}, -{69,37,75}, -{69,38,-47}, -{69,38,-46}, -{69,38,-45}, -{69,38,-44}, -{69,38,-43}, -{69,38,-42}, -{69,38,-41}, -{69,38,-40}, -{69,38,-39}, -{69,38,-38}, -{69,38,-37}, -{69,38,-36}, -{69,38,-35}, -{69,38,-34}, -{69,38,-33}, -{69,38,-32}, -{69,38,-31}, -{69,38,-30}, -{69,38,-29}, -{69,38,-28}, -{69,38,-27}, -{69,38,-26}, -{69,38,-25}, -{69,38,-24}, -{69,38,-23}, -{69,38,-22}, -{69,38,-21}, -{69,38,-20}, -{69,38,-19}, -{69,38,-18}, -{69,38,-17}, -{69,38,-16}, -{69,38,-15}, -{69,38,-14}, -{69,38,-13}, -{69,38,-12}, -{69,38,-11}, -{69,38,-10}, -{69,38,-9}, -{69,38,-8}, -{69,38,-7}, -{69,38,-6}, -{69,38,-5}, -{69,38,-4}, -{69,38,-3}, -{69,38,-2}, -{69,38,-1}, -{69,38,0}, -{69,38,1}, -{69,38,2}, -{69,38,3}, -{69,38,4}, -{69,38,5}, -{69,38,6}, -{69,38,7}, -{69,38,8}, -{69,38,9}, -{69,38,10}, -{69,38,11}, -{69,38,12}, -{69,38,13}, -{69,38,14}, -{69,38,15}, -{69,38,16}, -{69,38,17}, -{69,38,18}, -{69,38,19}, -{69,38,20}, -{69,38,21}, -{69,38,22}, -{69,38,23}, -{69,38,24}, -{69,38,25}, -{69,38,26}, -{69,38,27}, -{69,38,28}, -{69,38,29}, -{69,38,30}, -{69,38,31}, -{69,38,32}, -{69,38,33}, -{69,38,34}, -{69,38,35}, -{69,38,36}, -{69,38,37}, -{69,38,38}, -{69,38,39}, -{69,38,40}, -{69,38,41}, -{69,38,42}, -{69,38,43}, -{69,38,44}, -{69,38,45}, -{69,38,46}, -{69,38,47}, -{69,38,48}, -{69,38,49}, -{69,38,50}, -{69,38,51}, -{69,38,52}, -{69,38,53}, -{69,38,54}, -{69,38,55}, -{69,38,56}, -{69,38,57}, -{69,38,58}, -{69,38,59}, -{69,38,60}, -{69,38,61}, -{69,38,62}, -{69,38,63}, -{69,38,64}, -{69,38,65}, -{69,38,66}, -{69,38,67}, -{69,38,68}, -{69,38,69}, -{69,38,70}, -{69,38,71}, -{69,38,72}, -{69,38,73}, -{69,38,74}, -{69,38,75}, -{69,39,-47}, -{69,39,-46}, -{69,39,-45}, -{69,39,-44}, -{69,39,-43}, -{69,39,-42}, -{69,39,-41}, -{69,39,-40}, -{69,39,-39}, -{69,39,-38}, -{69,39,-37}, -{69,39,-36}, -{69,39,-35}, -{69,39,-34}, -{69,39,-33}, -{69,39,-32}, -{69,39,-31}, -{69,39,-30}, -{69,39,-29}, -{69,39,-28}, -{69,39,-27}, -{69,39,-26}, -{69,39,-25}, -{69,39,-24}, -{69,39,-23}, -{69,39,-22}, -{69,39,-21}, -{69,39,-20}, -{69,39,-19}, -{69,39,-18}, -{69,39,-17}, -{69,39,-16}, -{69,39,-15}, -{69,39,-14}, -{69,39,-13}, -{69,39,-12}, -{69,39,-11}, -{69,39,-10}, -{69,39,-9}, -{69,39,-8}, -{69,39,-7}, -{69,39,-6}, -{69,39,-5}, -{69,39,-4}, -{69,39,-3}, -{69,39,-2}, -{69,39,-1}, -{69,39,0}, -{69,39,1}, -{69,39,2}, -{69,39,3}, -{69,39,4}, -{69,39,5}, -{69,39,6}, -{69,39,7}, -{69,39,8}, -{69,39,9}, -{69,39,10}, -{69,39,11}, -{69,39,12}, -{69,39,13}, -{69,39,14}, -{69,39,15}, -{69,39,16}, -{69,39,17}, -{69,39,18}, -{69,39,19}, -{69,39,20}, -{69,39,21}, -{69,39,22}, -{69,39,23}, -{69,39,24}, -{69,39,25}, -{69,39,26}, -{69,39,27}, -{69,39,28}, -{69,39,29}, -{69,39,30}, -{69,39,31}, -{69,39,32}, -{69,39,33}, -{69,39,34}, -{69,39,35}, -{69,39,36}, -{69,39,37}, -{69,39,38}, -{69,39,39}, -{69,39,40}, -{69,39,41}, -{69,39,42}, -{69,39,43}, -{69,39,44}, -{69,39,45}, -{69,39,46}, -{69,39,47}, -{69,39,48}, -{69,39,49}, -{69,39,50}, -{69,39,51}, -{69,39,52}, -{69,39,53}, -{69,39,54}, -{69,39,55}, -{69,39,56}, -{69,39,57}, -{69,39,58}, -{69,39,59}, -{69,39,60}, -{69,39,61}, -{69,39,62}, -{69,39,63}, -{69,39,64}, -{69,39,65}, -{69,39,66}, -{69,40,-47}, -{69,40,-46}, -{69,40,-45}, -{69,40,-44}, -{69,40,-43}, -{69,40,-42}, -{69,40,-41}, -{69,40,-40}, -{69,40,-39}, -{69,40,-38}, -{69,40,-37}, -{69,40,-36}, -{69,40,-35}, -{69,40,-34}, -{69,40,-33}, -{69,40,-32}, -{69,40,-31}, -{69,40,-30}, -{69,40,-29}, -{69,40,-28}, -{69,40,-27}, -{69,40,-26}, -{69,40,-25}, -{69,40,-24}, -{69,40,-23}, -{69,40,-22}, -{69,40,-21}, -{69,40,-20}, -{69,40,-19}, -{69,40,-18}, -{69,40,-17}, -{69,40,-16}, -{69,40,-15}, -{69,40,-14}, -{69,40,-13}, -{69,40,-12}, -{69,40,-11}, -{69,40,-10}, -{69,40,-9}, -{69,40,-8}, -{69,40,-7}, -{69,40,-6}, -{69,40,-5}, -{69,40,-4}, -{69,40,-3}, -{69,40,-2}, -{69,40,-1}, -{69,40,0}, -{69,40,1}, -{69,40,2}, -{69,40,3}, -{69,40,4}, -{69,40,5}, -{69,40,6}, -{69,40,7}, -{69,40,8}, -{69,40,9}, -{69,40,10}, -{69,40,11}, -{69,40,12}, -{69,40,13}, -{69,40,14}, -{69,40,15}, -{69,40,16}, -{69,40,17}, -{69,40,18}, -{69,40,19}, -{69,40,20}, -{69,40,21}, -{69,40,22}, -{69,40,23}, -{69,40,24}, -{69,40,25}, -{69,40,26}, -{69,40,27}, -{69,40,28}, -{69,40,29}, -{69,40,30}, -{69,40,31}, -{69,40,32}, -{69,40,33}, -{69,40,34}, -{69,40,35}, -{69,40,36}, -{69,40,37}, -{69,40,38}, -{69,40,39}, -{69,40,40}, -{69,40,41}, -{69,40,42}, -{69,40,43}, -{69,40,44}, -{69,40,45}, -{69,40,46}, -{69,40,47}, -{69,40,48}, -{69,40,49}, -{69,40,50}, -{69,40,51}, -{69,40,52}, -{69,40,53}, -{69,40,54}, -{69,40,55}, -{69,40,56}, -{69,40,57}, -{69,40,58}, -{69,41,-47}, -{69,41,-46}, -{69,41,-45}, -{69,41,-44}, -{69,41,-43}, -{69,41,-42}, -{69,41,-41}, -{69,41,-40}, -{69,41,-39}, -{69,41,-38}, -{69,41,-37}, -{69,41,-36}, -{69,41,-35}, -{69,41,-34}, -{69,41,-33}, -{69,41,-32}, -{69,41,-31}, -{69,41,-30}, -{69,41,-29}, -{69,41,-28}, -{69,41,-27}, -{69,41,-26}, -{69,41,-25}, -{69,41,-24}, -{69,41,-23}, -{69,41,-22}, -{69,41,-21}, -{69,41,-20}, -{69,41,-19}, -{69,41,-18}, -{69,41,-17}, -{69,41,-16}, -{69,41,-15}, -{69,41,-14}, -{69,41,-13}, -{69,41,-12}, -{69,41,-11}, -{69,41,-10}, -{69,41,-9}, -{69,41,-8}, -{69,41,-7}, -{69,41,-6}, -{69,41,-5}, -{69,41,-4}, -{69,41,-3}, -{69,41,-2}, -{69,41,-1}, -{69,41,0}, -{69,41,1}, -{69,41,2}, -{69,41,3}, -{69,41,4}, -{69,41,5}, -{69,41,6}, -{69,41,7}, -{69,41,8}, -{69,41,9}, -{69,41,10}, -{69,41,11}, -{69,41,12}, -{69,41,13}, -{69,41,14}, -{69,41,15}, -{69,41,16}, -{69,41,17}, -{69,41,18}, -{69,41,19}, -{69,41,20}, -{69,41,21}, -{69,41,22}, -{69,41,23}, -{69,41,24}, -{69,41,25}, -{69,41,26}, -{69,41,27}, -{69,41,28}, -{69,41,29}, -{69,41,30}, -{69,41,31}, -{69,41,32}, -{69,41,33}, -{69,41,34}, -{69,41,35}, -{69,41,36}, -{69,41,37}, -{69,41,38}, -{69,41,39}, -{69,41,40}, -{69,41,41}, -{69,41,42}, -{69,41,43}, -{69,41,44}, -{69,41,45}, -{69,41,46}, -{69,41,47}, -{69,41,48}, -{69,41,49}, -{69,41,50}, -{69,41,51}, -{69,42,-47}, -{69,42,-46}, -{69,42,-45}, -{69,42,-44}, -{69,42,-43}, -{69,42,-42}, -{69,42,-41}, -{69,42,-40}, -{69,42,-39}, -{69,42,-38}, -{69,42,-37}, -{69,42,-36}, -{69,42,-35}, -{69,42,-34}, -{69,42,-33}, -{69,42,-32}, -{69,42,-31}, -{69,42,-30}, -{69,42,-29}, -{69,42,-28}, -{69,42,-27}, -{69,42,-26}, -{69,42,-25}, -{69,42,-24}, -{69,42,-23}, -{69,42,-22}, -{69,42,-21}, -{69,42,-20}, -{69,42,-19}, -{69,42,-18}, -{69,42,-17}, -{69,42,-16}, -{69,42,-15}, -{69,42,-14}, -{69,42,-13}, -{69,42,-12}, -{69,42,-11}, -{69,42,-10}, -{69,42,-9}, -{69,42,-8}, -{69,42,-7}, -{69,42,-6}, -{69,42,-5}, -{69,42,-4}, -{69,42,-3}, -{69,42,-2}, -{69,42,-1}, -{69,42,0}, -{69,42,1}, -{69,42,2}, -{69,42,3}, -{69,42,4}, -{69,42,5}, -{69,42,6}, -{69,42,7}, -{69,42,8}, -{69,42,9}, -{69,42,10}, -{69,42,11}, -{69,42,12}, -{69,42,13}, -{69,42,14}, -{69,42,15}, -{69,42,16}, -{69,42,17}, -{69,42,18}, -{69,42,19}, -{69,42,20}, -{69,42,21}, -{69,42,22}, -{69,42,23}, -{69,42,24}, -{69,42,25}, -{69,42,26}, -{69,42,27}, -{69,42,28}, -{69,42,29}, -{69,42,30}, -{69,42,31}, -{69,42,32}, -{69,42,33}, -{69,42,34}, -{69,42,35}, -{69,42,36}, -{69,42,37}, -{69,42,38}, -{69,42,39}, -{69,42,40}, -{69,42,41}, -{69,42,42}, -{69,42,43}, -{69,42,44}, -{69,42,45}, -{69,43,-47}, -{69,43,-46}, -{69,43,-45}, -{69,43,-44}, -{69,43,-43}, -{69,43,-42}, -{69,43,-41}, -{69,43,-40}, -{69,43,-39}, -{69,43,-38}, -{69,43,-37}, -{69,43,-36}, -{69,43,-35}, -{69,43,-34}, -{69,43,-33}, -{69,43,-32}, -{69,43,-31}, -{69,43,-30}, -{69,43,-29}, -{69,43,-28}, -{69,43,-27}, -{69,43,-26}, -{69,43,-25}, -{69,43,-24}, -{69,43,-23}, -{69,43,-22}, -{69,43,-21}, -{69,43,-20}, -{69,43,-19}, -{69,43,-18}, -{69,43,-17}, -{69,43,-16}, -{69,43,-15}, -{69,43,-14}, -{69,43,-13}, -{69,43,-12}, -{69,43,-11}, -{69,43,-10}, -{69,43,-9}, -{69,43,-8}, -{69,43,-7}, -{69,43,-6}, -{69,43,-5}, -{69,43,-4}, -{69,43,-3}, -{69,43,-2}, -{69,43,-1}, -{69,43,0}, -{69,43,1}, -{69,43,2}, -{69,43,3}, -{69,43,4}, -{69,43,5}, -{69,43,6}, -{69,43,7}, -{69,43,8}, -{69,43,9}, -{69,43,10}, -{69,43,11}, -{69,43,12}, -{69,43,13}, -{69,43,14}, -{69,43,15}, -{69,43,16}, -{69,43,17}, -{69,43,18}, -{69,43,19}, -{69,43,20}, -{69,43,21}, -{69,43,22}, -{69,43,23}, -{69,43,24}, -{69,43,25}, -{69,43,26}, -{69,43,27}, -{69,43,28}, -{69,43,29}, -{69,43,30}, -{69,43,31}, -{69,43,32}, -{69,43,33}, -{69,43,34}, -{69,43,35}, -{69,43,36}, -{69,43,37}, -{69,43,38}, -{69,43,39}, -{69,44,-47}, -{69,44,-46}, -{69,44,-45}, -{69,44,-44}, -{69,44,-43}, -{69,44,-42}, -{69,44,-41}, -{69,44,-40}, -{69,44,-39}, -{69,44,-38}, -{69,44,-37}, -{69,44,-36}, -{69,44,-35}, -{69,44,-34}, -{69,44,-33}, -{69,44,-32}, -{69,44,-31}, -{69,44,-30}, -{69,44,-29}, -{69,44,-28}, -{69,44,-27}, -{69,44,-26}, -{69,44,-25}, -{69,44,-24}, -{69,44,-23}, -{69,44,-22}, -{69,44,-21}, -{69,44,-20}, -{69,44,-19}, -{69,44,-18}, -{69,44,-17}, -{69,44,-16}, -{69,44,-15}, -{69,44,-14}, -{69,44,-13}, -{69,44,-12}, -{69,44,-11}, -{69,44,-10}, -{69,44,-9}, -{69,44,-8}, -{69,44,-7}, -{69,44,-6}, -{69,44,-5}, -{69,44,-4}, -{69,44,-3}, -{69,44,-2}, -{69,44,-1}, -{69,44,0}, -{69,44,1}, -{69,44,2}, -{69,44,3}, -{69,44,4}, -{69,44,5}, -{69,44,6}, -{69,44,7}, -{69,44,8}, -{69,44,9}, -{69,44,10}, -{69,44,11}, -{69,44,12}, -{69,44,13}, -{69,44,14}, -{69,44,15}, -{69,44,16}, -{69,44,17}, -{69,44,18}, -{69,44,19}, -{69,44,20}, -{69,44,21}, -{69,44,22}, -{69,44,23}, -{69,44,24}, -{69,44,25}, -{69,44,26}, -{69,44,27}, -{69,44,28}, -{69,44,29}, -{69,44,30}, -{69,44,31}, -{69,44,32}, -{69,44,33}, -{69,44,34}, -{69,45,-47}, -{69,45,-46}, -{69,45,-45}, -{69,45,-44}, -{69,45,-43}, -{69,45,-42}, -{69,45,-41}, -{69,45,-40}, -{69,45,-39}, -{69,45,-38}, -{69,45,-37}, -{69,45,-36}, -{69,45,-35}, -{69,45,-34}, -{69,45,-33}, -{69,45,-32}, -{69,45,-31}, -{69,45,-30}, -{69,45,-29}, -{69,45,-28}, -{69,45,-27}, -{69,45,-26}, -{69,45,-25}, -{69,45,-24}, -{69,45,-23}, -{69,45,-22}, -{69,45,-21}, -{69,45,-20}, -{69,45,-19}, -{69,45,-18}, -{69,45,-17}, -{69,45,-16}, -{69,45,-15}, -{69,45,-14}, -{69,45,-13}, -{69,45,-12}, -{69,45,-11}, -{69,45,-10}, -{69,45,-9}, -{69,45,-8}, -{69,45,-7}, -{69,45,-6}, -{69,45,-5}, -{69,45,-4}, -{69,45,-3}, -{69,45,-2}, -{69,45,-1}, -{69,45,0}, -{69,45,1}, -{69,45,2}, -{69,45,3}, -{69,45,4}, -{69,45,5}, -{69,45,6}, -{69,45,7}, -{69,45,8}, -{69,45,9}, -{69,45,10}, -{69,45,11}, -{69,45,12}, -{69,45,13}, -{69,45,14}, -{69,45,15}, -{69,45,16}, -{69,45,17}, -{69,45,18}, -{69,45,19}, -{69,45,20}, -{69,45,21}, -{69,45,22}, -{69,45,23}, -{69,45,24}, -{69,45,25}, -{69,45,26}, -{69,45,27}, -{69,45,28}, -{69,45,29}, -{69,46,-47}, -{69,46,-46}, -{69,46,-45}, -{69,46,-44}, -{69,46,-43}, -{69,46,-42}, -{69,46,-41}, -{69,46,-40}, -{69,46,-39}, -{69,46,-38}, -{69,46,-37}, -{69,46,-36}, -{69,46,-35}, -{69,46,-34}, -{69,46,-33}, -{69,46,-32}, -{69,46,-31}, -{69,46,-30}, -{69,46,-29}, -{69,46,-28}, -{69,46,-27}, -{69,46,-26}, -{69,46,-25}, -{69,46,-24}, -{69,46,-23}, -{69,46,-22}, -{69,46,-21}, -{69,46,-20}, -{69,46,-19}, -{69,46,-18}, -{69,46,-17}, -{69,46,-16}, -{69,46,-15}, -{69,46,-14}, -{69,46,-13}, -{69,46,-12}, -{69,46,-11}, -{69,46,-10}, -{69,46,-9}, -{69,46,-8}, -{69,46,-7}, -{69,46,-6}, -{69,46,-5}, -{69,46,-4}, -{69,46,-3}, -{69,46,-2}, -{69,46,-1}, -{69,46,0}, -{69,46,1}, -{69,46,2}, -{69,46,3}, -{69,46,4}, -{69,46,5}, -{69,46,6}, -{69,46,7}, -{69,46,8}, -{69,46,9}, -{69,46,10}, -{69,46,11}, -{69,46,12}, -{69,46,13}, -{69,46,14}, -{69,46,15}, -{69,46,16}, -{69,46,17}, -{69,46,18}, -{69,46,19}, -{69,46,20}, -{69,46,21}, -{69,46,22}, -{69,46,23}, -{69,46,24}, -{69,46,25}, -{69,47,-47}, -{69,47,-46}, -{69,47,-45}, -{69,47,-44}, -{69,47,-43}, -{69,47,-42}, -{69,47,-41}, -{69,47,-40}, -{69,47,-39}, -{69,47,-38}, -{69,47,-37}, -{69,47,-36}, -{69,47,-35}, -{69,47,-34}, -{69,47,-33}, -{69,47,-32}, -{69,47,-31}, -{69,47,-30}, -{69,47,-29}, -{69,47,-28}, -{69,47,-27}, -{69,47,-26}, -{69,47,-25}, -{69,47,-24}, -{69,47,-23}, -{69,47,-22}, -{69,47,-21}, -{69,47,-20}, -{69,47,-19}, -{69,47,-18}, -{69,47,-17}, -{69,47,-16}, -{69,47,-15}, -{69,47,-14}, -{69,47,-13}, -{69,47,-12}, -{69,47,-11}, -{69,47,-10}, -{69,47,-9}, -{69,47,-8}, -{69,47,-7}, -{69,47,-6}, -{69,47,-5}, -{69,47,-4}, -{69,47,-3}, -{69,47,-2}, -{69,47,-1}, -{69,47,0}, -{69,47,1}, -{69,47,2}, -{69,47,3}, -{69,47,4}, -{69,47,5}, -{69,47,6}, -{69,47,7}, -{69,47,8}, -{69,47,9}, -{69,47,10}, -{69,47,11}, -{69,47,12}, -{69,47,13}, -{69,47,14}, -{69,47,15}, -{69,47,16}, -{69,47,17}, -{69,47,18}, -{69,47,19}, -{69,47,20}, -{69,47,21}, -{69,48,-47}, -{69,48,-46}, -{69,48,-45}, -{69,48,-44}, -{69,48,-43}, -{69,48,-42}, -{69,48,-41}, -{69,48,-40}, -{69,48,-39}, -{69,48,-38}, -{69,48,-37}, -{69,48,-36}, -{69,48,-35}, -{69,48,-34}, -{69,48,-33}, -{69,48,-32}, -{69,48,-31}, -{69,48,-30}, -{69,48,-29}, -{69,48,-28}, -{69,48,-27}, -{69,48,-26}, -{69,48,-25}, -{69,48,-24}, -{69,48,-23}, -{69,48,-22}, -{69,48,-21}, -{69,48,-20}, -{69,48,-19}, -{69,48,-18}, -{69,48,-17}, -{69,48,-16}, -{69,48,-15}, -{69,48,-14}, -{69,48,-13}, -{69,48,-12}, -{69,48,-11}, -{69,48,-10}, -{69,48,-9}, -{69,48,-8}, -{69,48,-7}, -{69,48,-6}, -{69,48,-5}, -{69,48,-4}, -{69,48,-3}, -{69,48,-2}, -{69,48,-1}, -{69,48,0}, -{69,48,1}, -{69,48,2}, -{69,48,3}, -{69,48,4}, -{69,48,5}, -{69,48,6}, -{69,48,7}, -{69,48,8}, -{69,48,9}, -{69,48,10}, -{69,48,11}, -{69,48,12}, -{69,48,13}, -{69,48,14}, -{69,48,15}, -{69,48,16}, -{69,48,17}, -{69,49,-47}, -{69,49,-46}, -{69,49,-45}, -{69,49,-44}, -{69,49,-43}, -{69,49,-42}, -{69,49,-41}, -{69,49,-40}, -{69,49,-39}, -{69,49,-38}, -{69,49,-37}, -{69,49,-36}, -{69,49,-35}, -{69,49,-34}, -{69,49,-33}, -{69,49,-32}, -{69,49,-31}, -{69,49,-30}, -{69,49,-29}, -{69,49,-28}, -{69,49,-27}, -{69,49,-26}, -{69,49,-25}, -{69,49,-24}, -{69,49,-23}, -{69,49,-22}, -{69,49,-21}, -{69,49,-20}, -{69,49,-19}, -{69,49,-18}, -{69,49,-17}, -{69,49,-16}, -{69,49,-15}, -{69,49,-14}, -{69,49,-13}, -{69,49,-12}, -{69,49,-11}, -{69,49,-10}, -{69,49,-9}, -{69,49,-8}, -{69,49,-7}, -{69,49,-6}, -{69,49,-5}, -{69,49,-4}, -{69,49,-3}, -{69,49,-2}, -{69,49,-1}, -{69,49,0}, -{69,49,1}, -{69,49,2}, -{69,49,3}, -{69,49,4}, -{69,49,5}, -{69,49,6}, -{69,49,7}, -{69,49,8}, -{69,49,9}, -{69,49,10}, -{69,49,11}, -{69,49,12}, -{69,49,13}, -{69,50,-47}, -{69,50,-46}, -{69,50,-45}, -{69,50,-44}, -{69,50,-43}, -{69,50,-42}, -{69,50,-41}, -{69,50,-40}, -{69,50,-39}, -{69,50,-38}, -{69,50,-37}, -{69,50,-36}, -{69,50,-35}, -{69,50,-34}, -{69,50,-33}, -{69,50,-32}, -{69,50,-31}, -{69,50,-30}, -{69,50,-29}, -{69,50,-28}, -{69,50,-27}, -{69,50,-26}, -{69,50,-25}, -{69,50,-24}, -{69,50,-23}, -{69,50,-22}, -{69,50,-21}, -{69,50,-20}, -{69,50,-19}, -{69,50,-18}, -{69,50,-17}, -{69,50,-16}, -{69,50,-15}, -{69,50,-14}, -{69,50,-13}, -{69,50,-12}, -{69,50,-11}, -{69,50,-10}, -{69,50,-9}, -{69,50,-8}, -{69,50,-7}, -{69,50,-6}, -{69,50,-5}, -{69,50,-4}, -{69,50,-3}, -{69,50,-2}, -{69,50,-1}, -{69,50,0}, -{69,50,1}, -{69,50,2}, -{69,50,3}, -{69,50,4}, -{69,50,5}, -{69,50,6}, -{69,50,7}, -{69,50,8}, -{69,50,9}, -{69,50,10}, -{69,51,-47}, -{69,51,-46}, -{69,51,-45}, -{69,51,-44}, -{69,51,-43}, -{69,51,-42}, -{69,51,-41}, -{69,51,-40}, -{69,51,-39}, -{69,51,-38}, -{69,51,-37}, -{69,51,-36}, -{69,51,-35}, -{69,51,-34}, -{69,51,-33}, -{69,51,-32}, -{69,51,-31}, -{69,51,-30}, -{69,51,-29}, -{69,51,-28}, -{69,51,-27}, -{69,51,-26}, -{69,51,-25}, -{69,51,-24}, -{69,51,-23}, -{69,51,-22}, -{69,51,-21}, -{69,51,-20}, -{69,51,-19}, -{69,51,-18}, -{69,51,-17}, -{69,51,-16}, -{69,51,-15}, -{69,51,-14}, -{69,51,-13}, -{69,51,-12}, -{69,51,-11}, -{69,51,-10}, -{69,51,-9}, -{69,51,-8}, -{69,51,-7}, -{69,51,-6}, -{69,51,-5}, -{69,51,-4}, -{69,51,-3}, -{69,51,-2}, -{69,51,-1}, -{69,51,0}, -{69,51,1}, -{69,51,2}, -{69,51,3}, -{69,51,4}, -{69,51,5}, -{69,51,6}, -{69,51,7}, -{69,52,-47}, -{69,52,-46}, -{69,52,-45}, -{69,52,-44}, -{69,52,-43}, -{69,52,-42}, -{69,52,-41}, -{69,52,-40}, -{69,52,-39}, -{69,52,-38}, -{69,52,-37}, -{69,52,-36}, -{69,52,-35}, -{69,52,-34}, -{69,52,-33}, -{69,52,-32}, -{69,52,-31}, -{69,52,-30}, -{69,52,-29}, -{69,52,-28}, -{69,52,-27}, -{69,52,-26}, -{69,52,-25}, -{69,52,-24}, -{69,52,-23}, -{69,52,-22}, -{69,52,-21}, -{69,52,-20}, -{69,52,-19}, -{69,52,-18}, -{69,52,-17}, -{69,52,-16}, -{69,52,-15}, -{69,52,-14}, -{69,52,-13}, -{69,52,-12}, -{69,52,-11}, -{69,52,-10}, -{69,52,-9}, -{69,52,-8}, -{69,52,-7}, -{69,52,-6}, -{69,52,-5}, -{69,52,-4}, -{69,52,-3}, -{69,52,-2}, -{69,52,-1}, -{69,52,0}, -{69,52,1}, -{69,52,2}, -{69,52,3}, -{69,53,-47}, -{69,53,-46}, -{69,53,-45}, -{69,53,-44}, -{69,53,-43}, -{69,53,-42}, -{69,53,-41}, -{69,53,-40}, -{69,53,-39}, -{69,53,-38}, -{69,53,-37}, -{69,53,-36}, -{69,53,-35}, -{69,53,-34}, -{69,53,-33}, -{69,53,-32}, -{69,53,-31}, -{69,53,-30}, -{69,53,-29}, -{69,53,-28}, -{69,53,-27}, -{69,53,-26}, -{69,53,-25}, -{69,53,-24}, -{69,53,-23}, -{69,53,-22}, -{69,53,-21}, -{69,53,-20}, -{69,53,-19}, -{69,53,-18}, -{69,53,-17}, -{69,53,-16}, -{69,53,-15}, -{69,53,-14}, -{69,53,-13}, -{69,53,-12}, -{69,53,-11}, -{69,53,-10}, -{69,53,-9}, -{69,53,-8}, -{69,53,-7}, -{69,53,-6}, -{69,53,-5}, -{69,53,-4}, -{69,53,-3}, -{69,53,-2}, -{69,53,-1}, -{69,53,0}, -{69,54,-47}, -{69,54,-46}, -{69,54,-45}, -{69,54,-44}, -{69,54,-43}, -{69,54,-42}, -{69,54,-41}, -{69,54,-40}, -{69,54,-39}, -{69,54,-38}, -{69,54,-37}, -{69,54,-36}, -{69,54,-35}, -{69,54,-34}, -{69,54,-33}, -{69,54,-32}, -{69,54,-31}, -{69,54,-30}, -{69,54,-29}, -{69,54,-28}, -{69,54,-27}, -{69,54,-26}, -{69,54,-25}, -{69,54,-24}, -{69,54,-23}, -{69,54,-22}, -{69,54,-21}, -{69,54,-20}, -{69,54,-19}, -{69,54,-18}, -{69,54,-17}, -{69,54,-16}, -{69,54,-15}, -{69,54,-14}, -{69,54,-13}, -{69,54,-12}, -{69,54,-11}, -{69,54,-10}, -{69,54,-9}, -{69,54,-8}, -{69,54,-7}, -{69,54,-6}, -{69,54,-5}, -{69,54,-4}, -{69,54,-3}, -{69,55,-47}, -{69,55,-46}, -{69,55,-45}, -{69,55,-44}, -{69,55,-43}, -{69,55,-42}, -{69,55,-41}, -{69,55,-40}, -{69,55,-39}, -{69,55,-38}, -{69,55,-37}, -{69,55,-36}, -{69,55,-35}, -{69,55,-34}, -{69,55,-33}, -{69,55,-32}, -{69,55,-31}, -{69,55,-30}, -{69,55,-29}, -{69,55,-28}, -{69,55,-27}, -{69,55,-26}, -{69,55,-25}, -{69,55,-24}, -{69,55,-23}, -{69,55,-22}, -{69,55,-21}, -{69,55,-20}, -{69,55,-19}, -{69,55,-18}, -{69,55,-17}, -{69,55,-16}, -{69,55,-15}, -{69,55,-14}, -{69,55,-13}, -{69,55,-12}, -{69,55,-11}, -{69,55,-10}, -{69,55,-9}, -{69,55,-8}, -{69,55,-7}, -{69,55,-6}, -{69,55,-5}, -{69,56,-47}, -{69,56,-46}, -{69,56,-45}, -{69,56,-44}, -{69,56,-43}, -{69,56,-42}, -{69,56,-41}, -{69,56,-40}, -{69,56,-39}, -{69,56,-38}, -{69,56,-37}, -{69,56,-36}, -{69,56,-35}, -{69,56,-34}, -{69,56,-33}, -{69,56,-32}, -{69,56,-31}, -{69,56,-30}, -{69,56,-29}, -{69,56,-28}, -{69,56,-27}, -{69,56,-26}, -{69,56,-25}, -{69,56,-24}, -{69,56,-23}, -{69,56,-22}, -{69,56,-21}, -{69,56,-20}, -{69,56,-19}, -{69,56,-18}, -{69,56,-17}, -{69,56,-16}, -{69,56,-15}, -{69,56,-14}, -{69,56,-13}, -{69,56,-12}, -{69,56,-11}, -{69,56,-10}, -{69,56,-9}, -{69,56,-8}, -{69,57,-47}, -{69,57,-46}, -{69,57,-45}, -{69,57,-44}, -{69,57,-43}, -{69,57,-42}, -{69,57,-41}, -{69,57,-40}, -{69,57,-39}, -{69,57,-38}, -{69,57,-37}, -{69,57,-36}, -{69,57,-35}, -{69,57,-34}, -{69,57,-33}, -{69,57,-32}, -{69,57,-31}, -{69,57,-30}, -{69,57,-29}, -{69,57,-28}, -{69,57,-27}, -{69,57,-26}, -{69,57,-25}, -{69,57,-24}, -{69,57,-23}, -{69,57,-22}, -{69,57,-21}, -{69,57,-20}, -{69,57,-19}, -{69,57,-18}, -{69,57,-17}, -{69,57,-16}, -{69,57,-15}, -{69,57,-14}, -{69,57,-13}, -{69,57,-12}, -{69,57,-11}, -{69,58,-47}, -{69,58,-46}, -{69,58,-45}, -{69,58,-44}, -{69,58,-43}, -{69,58,-42}, -{69,58,-41}, -{69,58,-40}, -{69,58,-39}, -{69,58,-38}, -{69,58,-37}, -{69,58,-36}, -{69,58,-35}, -{69,58,-34}, -{69,58,-33}, -{69,58,-32}, -{69,58,-31}, -{69,58,-30}, -{69,58,-29}, -{69,58,-28}, -{69,58,-27}, -{69,58,-26}, -{69,58,-25}, -{69,58,-24}, -{69,58,-23}, -{69,58,-22}, -{69,58,-21}, -{69,58,-20}, -{69,58,-19}, -{69,58,-18}, -{69,58,-17}, -{69,58,-16}, -{69,58,-15}, -{69,58,-14}, -{69,59,-47}, -{69,59,-46}, -{69,59,-45}, -{69,59,-44}, -{69,59,-43}, -{69,59,-42}, -{69,59,-41}, -{69,59,-40}, -{69,59,-39}, -{69,59,-38}, -{69,59,-37}, -{69,59,-36}, -{69,59,-35}, -{69,59,-34}, -{69,59,-33}, -{69,59,-32}, -{69,59,-31}, -{69,59,-30}, -{69,59,-29}, -{69,59,-28}, -{69,59,-27}, -{69,59,-26}, -{69,59,-25}, -{69,59,-24}, -{69,59,-23}, -{69,59,-22}, -{69,59,-21}, -{69,59,-20}, -{69,59,-19}, -{69,59,-18}, -{69,59,-17}, -{69,59,-16}, -{69,60,-47}, -{69,60,-46}, -{69,60,-45}, -{69,60,-44}, -{69,60,-43}, -{69,60,-42}, -{69,60,-41}, -{69,60,-40}, -{69,60,-39}, -{69,60,-38}, -{69,60,-37}, -{69,60,-36}, -{69,60,-35}, -{69,60,-34}, -{69,60,-33}, -{69,60,-32}, -{69,60,-31}, -{69,60,-30}, -{69,60,-29}, -{69,60,-28}, -{69,60,-27}, -{69,60,-26}, -{69,60,-25}, -{69,60,-24}, -{69,60,-23}, -{69,60,-22}, -{69,60,-21}, -{69,60,-20}, -{69,60,-19}, -{69,61,-47}, -{69,61,-46}, -{69,61,-45}, -{69,61,-44}, -{69,61,-43}, -{69,61,-42}, -{69,61,-41}, -{69,61,-40}, -{69,61,-39}, -{69,61,-38}, -{69,61,-37}, -{69,61,-36}, -{69,61,-35}, -{69,61,-34}, -{69,61,-33}, -{69,61,-32}, -{69,61,-31}, -{69,61,-30}, -{69,61,-29}, -{69,61,-28}, -{69,61,-27}, -{69,61,-26}, -{69,61,-25}, -{69,61,-24}, -{69,61,-23}, -{69,61,-22}, -{69,61,-21}, -{69,62,-47}, -{69,62,-46}, -{69,62,-45}, -{69,62,-44}, -{69,62,-43}, -{69,62,-42}, -{69,62,-41}, -{69,62,-40}, -{69,62,-39}, -{69,62,-38}, -{69,62,-37}, -{69,62,-36}, -{69,62,-35}, -{69,62,-34}, -{69,62,-33}, -{69,62,-32}, -{69,62,-31}, -{69,62,-30}, -{69,62,-29}, -{69,62,-28}, -{69,62,-27}, -{69,62,-26}, -{69,62,-25}, -{69,62,-24}, -{69,62,-23}, -{69,63,-47}, -{69,63,-46}, -{69,63,-45}, -{69,63,-44}, -{69,63,-43}, -{69,63,-42}, -{69,63,-41}, -{69,63,-40}, -{69,63,-39}, -{69,63,-38}, -{69,63,-37}, -{69,63,-36}, -{69,63,-35}, -{69,63,-34}, -{69,63,-33}, -{69,63,-32}, -{69,63,-31}, -{69,63,-30}, -{69,63,-29}, -{69,63,-28}, -{69,63,-27}, -{69,63,-26}, -{69,64,-47}, -{69,64,-46}, -{69,64,-45}, -{69,64,-44}, -{69,64,-43}, -{69,64,-42}, -{69,64,-41}, -{69,64,-40}, -{69,64,-39}, -{69,64,-38}, -{69,64,-37}, -{69,64,-36}, -{69,64,-35}, -{69,64,-34}, -{69,64,-33}, -{69,64,-32}, -{69,64,-31}, -{69,64,-30}, -{69,64,-29}, -{69,64,-28}, -{69,65,-47}, -{69,65,-46}, -{69,65,-45}, -{69,65,-44}, -{69,65,-43}, -{69,65,-42}, -{69,65,-41}, -{69,65,-40}, -{69,65,-39}, -{69,65,-38}, -{69,65,-37}, -{69,65,-36}, -{69,65,-35}, -{69,65,-34}, -{69,65,-33}, -{69,65,-32}, -{69,65,-31}, -{69,65,-30}, -{69,66,-47}, -{69,66,-46}, -{69,66,-45}, -{69,66,-44}, -{69,66,-43}, -{69,66,-42}, -{69,66,-41}, -{69,66,-40}, -{69,66,-39}, -{69,66,-38}, -{69,66,-37}, -{69,66,-36}, -{69,66,-35}, -{69,66,-34}, -{69,66,-33}, -{69,66,-32}, -{69,67,-47}, -{69,67,-46}, -{69,67,-45}, -{69,67,-44}, -{69,67,-43}, -{69,67,-42}, -{69,67,-41}, -{69,67,-40}, -{69,67,-39}, -{69,67,-38}, -{69,67,-37}, -{69,67,-36}, -{69,67,-35}, -{69,67,-34}, -{69,68,-47}, -{69,68,-46}, -{69,68,-45}, -{69,68,-44}, -{69,68,-43}, -{69,68,-42}, -{69,68,-41}, -{69,68,-40}, -{69,68,-39}, -{69,68,-38}, -{69,68,-37}, -{69,68,-36}, -{69,69,-47}, -{69,69,-46}, -{69,69,-45}, -{69,69,-44}, -{69,69,-43}, -{69,69,-42}, -{69,69,-41}, -{69,69,-40}, -{69,69,-39}, -{69,69,-38}, -{69,70,-47}, -{69,70,-46}, -{69,70,-45}, -{69,70,-44}, -{69,70,-43}, -{69,70,-42}, -{69,70,-41}, -{69,70,-40}, -{69,71,-47}, -{69,71,-46}, -{69,71,-45}, -{69,71,-44}, -{69,71,-43}, -{69,71,-42}, -{69,72,-47}, -{69,72,-46}, -{69,72,-45}, -{69,72,-44}, -{69,73,-47}, -{69,73,-46}, -{70,-71,66}, -{70,-71,67}, -{70,-71,68}, -{70,-71,69}, -{70,-70,62}, -{70,-70,63}, -{70,-70,64}, -{70,-70,65}, -{70,-70,66}, -{70,-70,67}, -{70,-70,68}, -{70,-70,69}, -{70,-69,58}, -{70,-69,59}, -{70,-69,60}, -{70,-69,61}, -{70,-69,62}, -{70,-69,63}, -{70,-69,64}, -{70,-69,65}, -{70,-69,66}, -{70,-69,67}, -{70,-69,68}, -{70,-69,69}, -{70,-68,54}, -{70,-68,55}, -{70,-68,56}, -{70,-68,57}, -{70,-68,58}, -{70,-68,59}, -{70,-68,60}, -{70,-68,61}, -{70,-68,62}, -{70,-68,63}, -{70,-68,64}, -{70,-68,65}, -{70,-68,66}, -{70,-68,67}, -{70,-68,68}, -{70,-68,69}, -{70,-67,50}, -{70,-67,51}, -{70,-67,52}, -{70,-67,53}, -{70,-67,54}, -{70,-67,55}, -{70,-67,56}, -{70,-67,57}, -{70,-67,58}, -{70,-67,59}, -{70,-67,60}, -{70,-67,61}, -{70,-67,62}, -{70,-67,63}, -{70,-67,64}, -{70,-67,65}, -{70,-67,66}, -{70,-67,67}, -{70,-67,68}, -{70,-67,69}, -{70,-66,47}, -{70,-66,48}, -{70,-66,49}, -{70,-66,50}, -{70,-66,51}, -{70,-66,52}, -{70,-66,53}, -{70,-66,54}, -{70,-66,55}, -{70,-66,56}, -{70,-66,57}, -{70,-66,58}, -{70,-66,59}, -{70,-66,60}, -{70,-66,61}, -{70,-66,62}, -{70,-66,63}, -{70,-66,64}, -{70,-66,65}, -{70,-66,66}, -{70,-66,67}, -{70,-66,68}, -{70,-66,69}, -{70,-65,44}, -{70,-65,45}, -{70,-65,46}, -{70,-65,47}, -{70,-65,48}, -{70,-65,49}, -{70,-65,50}, -{70,-65,51}, -{70,-65,52}, -{70,-65,53}, -{70,-65,54}, -{70,-65,55}, -{70,-65,56}, -{70,-65,57}, -{70,-65,58}, -{70,-65,59}, -{70,-65,60}, -{70,-65,61}, -{70,-65,62}, -{70,-65,63}, -{70,-65,64}, -{70,-65,65}, -{70,-65,66}, -{70,-65,67}, -{70,-65,68}, -{70,-65,69}, -{70,-64,41}, -{70,-64,42}, -{70,-64,43}, -{70,-64,44}, -{70,-64,45}, -{70,-64,46}, -{70,-64,47}, -{70,-64,48}, -{70,-64,49}, -{70,-64,50}, -{70,-64,51}, -{70,-64,52}, -{70,-64,53}, -{70,-64,54}, -{70,-64,55}, -{70,-64,56}, -{70,-64,57}, -{70,-64,58}, -{70,-64,59}, -{70,-64,60}, -{70,-64,61}, -{70,-64,62}, -{70,-64,63}, -{70,-64,64}, -{70,-64,65}, -{70,-64,66}, -{70,-64,67}, -{70,-64,68}, -{70,-64,69}, -{70,-63,38}, -{70,-63,39}, -{70,-63,40}, -{70,-63,41}, -{70,-63,42}, -{70,-63,43}, -{70,-63,44}, -{70,-63,45}, -{70,-63,46}, -{70,-63,47}, -{70,-63,48}, -{70,-63,49}, -{70,-63,50}, -{70,-63,51}, -{70,-63,52}, -{70,-63,53}, -{70,-63,54}, -{70,-63,55}, -{70,-63,56}, -{70,-63,57}, -{70,-63,58}, -{70,-63,59}, -{70,-63,60}, -{70,-63,61}, -{70,-63,62}, -{70,-63,63}, -{70,-63,64}, -{70,-63,65}, -{70,-63,66}, -{70,-63,67}, -{70,-63,68}, -{70,-63,69}, -{70,-62,35}, -{70,-62,36}, -{70,-62,37}, -{70,-62,38}, -{70,-62,39}, -{70,-62,40}, -{70,-62,41}, -{70,-62,42}, -{70,-62,43}, -{70,-62,44}, -{70,-62,45}, -{70,-62,46}, -{70,-62,47}, -{70,-62,48}, -{70,-62,49}, -{70,-62,50}, -{70,-62,51}, -{70,-62,52}, -{70,-62,53}, -{70,-62,54}, -{70,-62,55}, -{70,-62,56}, -{70,-62,57}, -{70,-62,58}, -{70,-62,59}, -{70,-62,60}, -{70,-62,61}, -{70,-62,62}, -{70,-62,63}, -{70,-62,64}, -{70,-62,65}, -{70,-62,66}, -{70,-62,67}, -{70,-62,68}, -{70,-62,69}, -{70,-61,32}, -{70,-61,33}, -{70,-61,34}, -{70,-61,35}, -{70,-61,36}, -{70,-61,37}, -{70,-61,38}, -{70,-61,39}, -{70,-61,40}, -{70,-61,41}, -{70,-61,42}, -{70,-61,43}, -{70,-61,44}, -{70,-61,45}, -{70,-61,46}, -{70,-61,47}, -{70,-61,48}, -{70,-61,49}, -{70,-61,50}, -{70,-61,51}, -{70,-61,52}, -{70,-61,53}, -{70,-61,54}, -{70,-61,55}, -{70,-61,56}, -{70,-61,57}, -{70,-61,58}, -{70,-61,59}, -{70,-61,60}, -{70,-61,61}, -{70,-61,62}, -{70,-61,63}, -{70,-61,64}, -{70,-61,65}, -{70,-61,66}, -{70,-61,67}, -{70,-61,68}, -{70,-61,69}, -{70,-60,30}, -{70,-60,31}, -{70,-60,32}, -{70,-60,33}, -{70,-60,34}, -{70,-60,35}, -{70,-60,36}, -{70,-60,37}, -{70,-60,38}, -{70,-60,39}, -{70,-60,40}, -{70,-60,41}, -{70,-60,42}, -{70,-60,43}, -{70,-60,44}, -{70,-60,45}, -{70,-60,46}, -{70,-60,47}, -{70,-60,48}, -{70,-60,49}, -{70,-60,50}, -{70,-60,51}, -{70,-60,52}, -{70,-60,53}, -{70,-60,54}, -{70,-60,55}, -{70,-60,56}, -{70,-60,57}, -{70,-60,58}, -{70,-60,59}, -{70,-60,60}, -{70,-60,61}, -{70,-60,62}, -{70,-60,63}, -{70,-60,64}, -{70,-60,65}, -{70,-60,66}, -{70,-60,67}, -{70,-60,68}, -{70,-60,69}, -{70,-59,28}, -{70,-59,29}, -{70,-59,30}, -{70,-59,31}, -{70,-59,32}, -{70,-59,33}, -{70,-59,34}, -{70,-59,35}, -{70,-59,36}, -{70,-59,37}, -{70,-59,38}, -{70,-59,39}, -{70,-59,40}, -{70,-59,41}, -{70,-59,42}, -{70,-59,43}, -{70,-59,44}, -{70,-59,45}, -{70,-59,46}, -{70,-59,47}, -{70,-59,48}, -{70,-59,49}, -{70,-59,50}, -{70,-59,51}, -{70,-59,52}, -{70,-59,53}, -{70,-59,54}, -{70,-59,55}, -{70,-59,56}, -{70,-59,57}, -{70,-59,58}, -{70,-59,59}, -{70,-59,60}, -{70,-59,61}, -{70,-59,62}, -{70,-59,63}, -{70,-59,64}, -{70,-59,65}, -{70,-59,66}, -{70,-59,67}, -{70,-59,68}, -{70,-59,69}, -{70,-58,25}, -{70,-58,26}, -{70,-58,27}, -{70,-58,28}, -{70,-58,29}, -{70,-58,30}, -{70,-58,31}, -{70,-58,32}, -{70,-58,33}, -{70,-58,34}, -{70,-58,35}, -{70,-58,36}, -{70,-58,37}, -{70,-58,38}, -{70,-58,39}, -{70,-58,40}, -{70,-58,41}, -{70,-58,42}, -{70,-58,43}, -{70,-58,44}, -{70,-58,45}, -{70,-58,46}, -{70,-58,47}, -{70,-58,48}, -{70,-58,49}, -{70,-58,50}, -{70,-58,51}, -{70,-58,52}, -{70,-58,53}, -{70,-58,54}, -{70,-58,55}, -{70,-58,56}, -{70,-58,57}, -{70,-58,58}, -{70,-58,59}, -{70,-58,60}, -{70,-58,61}, -{70,-58,62}, -{70,-58,63}, -{70,-58,64}, -{70,-58,65}, -{70,-58,66}, -{70,-58,67}, -{70,-58,68}, -{70,-58,69}, -{70,-57,23}, -{70,-57,24}, -{70,-57,25}, -{70,-57,26}, -{70,-57,27}, -{70,-57,28}, -{70,-57,29}, -{70,-57,30}, -{70,-57,31}, -{70,-57,32}, -{70,-57,33}, -{70,-57,34}, -{70,-57,35}, -{70,-57,36}, -{70,-57,37}, -{70,-57,38}, -{70,-57,39}, -{70,-57,40}, -{70,-57,41}, -{70,-57,42}, -{70,-57,43}, -{70,-57,44}, -{70,-57,45}, -{70,-57,46}, -{70,-57,47}, -{70,-57,48}, -{70,-57,49}, -{70,-57,50}, -{70,-57,51}, -{70,-57,52}, -{70,-57,53}, -{70,-57,54}, -{70,-57,55}, -{70,-57,56}, -{70,-57,57}, -{70,-57,58}, -{70,-57,59}, -{70,-57,60}, -{70,-57,61}, -{70,-57,62}, -{70,-57,63}, -{70,-57,64}, -{70,-57,65}, -{70,-57,66}, -{70,-57,67}, -{70,-57,68}, -{70,-57,69}, -{70,-56,21}, -{70,-56,22}, -{70,-56,23}, -{70,-56,24}, -{70,-56,25}, -{70,-56,26}, -{70,-56,27}, -{70,-56,28}, -{70,-56,29}, -{70,-56,30}, -{70,-56,31}, -{70,-56,32}, -{70,-56,33}, -{70,-56,34}, -{70,-56,35}, -{70,-56,36}, -{70,-56,37}, -{70,-56,38}, -{70,-56,39}, -{70,-56,40}, -{70,-56,41}, -{70,-56,42}, -{70,-56,43}, -{70,-56,44}, -{70,-56,45}, -{70,-56,46}, -{70,-56,47}, -{70,-56,48}, -{70,-56,49}, -{70,-56,50}, -{70,-56,51}, -{70,-56,52}, -{70,-56,53}, -{70,-56,54}, -{70,-56,55}, -{70,-56,56}, -{70,-56,57}, -{70,-56,58}, -{70,-56,59}, -{70,-56,60}, -{70,-56,61}, -{70,-56,62}, -{70,-56,63}, -{70,-56,64}, -{70,-56,65}, -{70,-56,66}, -{70,-56,67}, -{70,-56,68}, -{70,-56,69}, -{70,-55,18}, -{70,-55,19}, -{70,-55,20}, -{70,-55,21}, -{70,-55,22}, -{70,-55,23}, -{70,-55,24}, -{70,-55,25}, -{70,-55,26}, -{70,-55,27}, -{70,-55,28}, -{70,-55,29}, -{70,-55,30}, -{70,-55,31}, -{70,-55,32}, -{70,-55,33}, -{70,-55,34}, -{70,-55,35}, -{70,-55,36}, -{70,-55,37}, -{70,-55,38}, -{70,-55,39}, -{70,-55,40}, -{70,-55,41}, -{70,-55,42}, -{70,-55,43}, -{70,-55,44}, -{70,-55,45}, -{70,-55,46}, -{70,-55,47}, -{70,-55,48}, -{70,-55,49}, -{70,-55,50}, -{70,-55,51}, -{70,-55,52}, -{70,-55,53}, -{70,-55,54}, -{70,-55,55}, -{70,-55,56}, -{70,-55,57}, -{70,-55,58}, -{70,-55,59}, -{70,-55,60}, -{70,-55,61}, -{70,-55,62}, -{70,-55,63}, -{70,-55,64}, -{70,-55,65}, -{70,-55,66}, -{70,-55,67}, -{70,-55,68}, -{70,-55,69}, -{70,-54,16}, -{70,-54,17}, -{70,-54,18}, -{70,-54,19}, -{70,-54,20}, -{70,-54,21}, -{70,-54,22}, -{70,-54,23}, -{70,-54,24}, -{70,-54,25}, -{70,-54,26}, -{70,-54,27}, -{70,-54,28}, -{70,-54,29}, -{70,-54,30}, -{70,-54,31}, -{70,-54,32}, -{70,-54,33}, -{70,-54,34}, -{70,-54,35}, -{70,-54,36}, -{70,-54,37}, -{70,-54,38}, -{70,-54,39}, -{70,-54,40}, -{70,-54,41}, -{70,-54,42}, -{70,-54,43}, -{70,-54,44}, -{70,-54,45}, -{70,-54,46}, -{70,-54,47}, -{70,-54,48}, -{70,-54,49}, -{70,-54,50}, -{70,-54,51}, -{70,-54,52}, -{70,-54,53}, -{70,-54,54}, -{70,-54,55}, -{70,-54,56}, -{70,-54,57}, -{70,-54,58}, -{70,-54,59}, -{70,-54,60}, -{70,-54,61}, -{70,-54,62}, -{70,-54,63}, -{70,-54,64}, -{70,-54,65}, -{70,-54,66}, -{70,-54,67}, -{70,-54,68}, -{70,-54,69}, -{70,-53,14}, -{70,-53,15}, -{70,-53,16}, -{70,-53,17}, -{70,-53,18}, -{70,-53,19}, -{70,-53,20}, -{70,-53,21}, -{70,-53,22}, -{70,-53,23}, -{70,-53,24}, -{70,-53,25}, -{70,-53,26}, -{70,-53,27}, -{70,-53,28}, -{70,-53,29}, -{70,-53,30}, -{70,-53,31}, -{70,-53,32}, -{70,-53,33}, -{70,-53,34}, -{70,-53,35}, -{70,-53,36}, -{70,-53,37}, -{70,-53,38}, -{70,-53,39}, -{70,-53,40}, -{70,-53,41}, -{70,-53,42}, -{70,-53,43}, -{70,-53,44}, -{70,-53,45}, -{70,-53,46}, -{70,-53,47}, -{70,-53,48}, -{70,-53,49}, -{70,-53,50}, -{70,-53,51}, -{70,-53,52}, -{70,-53,53}, -{70,-53,54}, -{70,-53,55}, -{70,-53,56}, -{70,-53,57}, -{70,-53,58}, -{70,-53,59}, -{70,-53,60}, -{70,-53,61}, -{70,-53,62}, -{70,-53,63}, -{70,-53,64}, -{70,-53,65}, -{70,-53,66}, -{70,-53,67}, -{70,-53,68}, -{70,-53,69}, -{70,-52,12}, -{70,-52,13}, -{70,-52,14}, -{70,-52,15}, -{70,-52,16}, -{70,-52,17}, -{70,-52,18}, -{70,-52,19}, -{70,-52,20}, -{70,-52,21}, -{70,-52,22}, -{70,-52,23}, -{70,-52,24}, -{70,-52,25}, -{70,-52,26}, -{70,-52,27}, -{70,-52,28}, -{70,-52,29}, -{70,-52,30}, -{70,-52,31}, -{70,-52,32}, -{70,-52,33}, -{70,-52,34}, -{70,-52,35}, -{70,-52,36}, -{70,-52,37}, -{70,-52,38}, -{70,-52,39}, -{70,-52,40}, -{70,-52,41}, -{70,-52,42}, -{70,-52,43}, -{70,-52,44}, -{70,-52,45}, -{70,-52,46}, -{70,-52,47}, -{70,-52,48}, -{70,-52,49}, -{70,-52,50}, -{70,-52,51}, -{70,-52,52}, -{70,-52,53}, -{70,-52,54}, -{70,-52,55}, -{70,-52,56}, -{70,-52,57}, -{70,-52,58}, -{70,-52,59}, -{70,-52,60}, -{70,-52,61}, -{70,-52,62}, -{70,-52,63}, -{70,-52,64}, -{70,-52,65}, -{70,-52,66}, -{70,-52,67}, -{70,-52,68}, -{70,-52,69}, -{70,-52,70}, -{70,-51,10}, -{70,-51,11}, -{70,-51,12}, -{70,-51,13}, -{70,-51,14}, -{70,-51,15}, -{70,-51,16}, -{70,-51,17}, -{70,-51,18}, -{70,-51,19}, -{70,-51,20}, -{70,-51,21}, -{70,-51,22}, -{70,-51,23}, -{70,-51,24}, -{70,-51,25}, -{70,-51,26}, -{70,-51,27}, -{70,-51,28}, -{70,-51,29}, -{70,-51,30}, -{70,-51,31}, -{70,-51,32}, -{70,-51,33}, -{70,-51,34}, -{70,-51,35}, -{70,-51,36}, -{70,-51,37}, -{70,-51,38}, -{70,-51,39}, -{70,-51,40}, -{70,-51,41}, -{70,-51,42}, -{70,-51,43}, -{70,-51,44}, -{70,-51,45}, -{70,-51,46}, -{70,-51,47}, -{70,-51,48}, -{70,-51,49}, -{70,-51,50}, -{70,-51,51}, -{70,-51,52}, -{70,-51,53}, -{70,-51,54}, -{70,-51,55}, -{70,-51,56}, -{70,-51,57}, -{70,-51,58}, -{70,-51,59}, -{70,-51,60}, -{70,-51,61}, -{70,-51,62}, -{70,-51,63}, -{70,-51,64}, -{70,-51,65}, -{70,-51,66}, -{70,-51,67}, -{70,-51,68}, -{70,-51,69}, -{70,-51,70}, -{70,-50,8}, -{70,-50,9}, -{70,-50,10}, -{70,-50,11}, -{70,-50,12}, -{70,-50,13}, -{70,-50,14}, -{70,-50,15}, -{70,-50,16}, -{70,-50,17}, -{70,-50,18}, -{70,-50,19}, -{70,-50,20}, -{70,-50,21}, -{70,-50,22}, -{70,-50,23}, -{70,-50,24}, -{70,-50,25}, -{70,-50,26}, -{70,-50,27}, -{70,-50,28}, -{70,-50,29}, -{70,-50,30}, -{70,-50,31}, -{70,-50,32}, -{70,-50,33}, -{70,-50,34}, -{70,-50,35}, -{70,-50,36}, -{70,-50,37}, -{70,-50,38}, -{70,-50,39}, -{70,-50,40}, -{70,-50,41}, -{70,-50,42}, -{70,-50,43}, -{70,-50,44}, -{70,-50,45}, -{70,-50,46}, -{70,-50,47}, -{70,-50,48}, -{70,-50,49}, -{70,-50,50}, -{70,-50,51}, -{70,-50,52}, -{70,-50,53}, -{70,-50,54}, -{70,-50,55}, -{70,-50,56}, -{70,-50,57}, -{70,-50,58}, -{70,-50,59}, -{70,-50,60}, -{70,-50,61}, -{70,-50,62}, -{70,-50,63}, -{70,-50,64}, -{70,-50,65}, -{70,-50,66}, -{70,-50,67}, -{70,-50,68}, -{70,-50,69}, -{70,-50,70}, -{70,-49,7}, -{70,-49,8}, -{70,-49,9}, -{70,-49,10}, -{70,-49,11}, -{70,-49,12}, -{70,-49,13}, -{70,-49,14}, -{70,-49,15}, -{70,-49,16}, -{70,-49,17}, -{70,-49,18}, -{70,-49,19}, -{70,-49,20}, -{70,-49,21}, -{70,-49,22}, -{70,-49,23}, -{70,-49,24}, -{70,-49,25}, -{70,-49,26}, -{70,-49,27}, -{70,-49,28}, -{70,-49,29}, -{70,-49,30}, -{70,-49,31}, -{70,-49,32}, -{70,-49,33}, -{70,-49,34}, -{70,-49,35}, -{70,-49,36}, -{70,-49,37}, -{70,-49,38}, -{70,-49,39}, -{70,-49,40}, -{70,-49,41}, -{70,-49,42}, -{70,-49,43}, -{70,-49,44}, -{70,-49,45}, -{70,-49,46}, -{70,-49,47}, -{70,-49,48}, -{70,-49,49}, -{70,-49,50}, -{70,-49,51}, -{70,-49,52}, -{70,-49,53}, -{70,-49,54}, -{70,-49,55}, -{70,-49,56}, -{70,-49,57}, -{70,-49,58}, -{70,-49,59}, -{70,-49,60}, -{70,-49,61}, -{70,-49,62}, -{70,-49,63}, -{70,-49,64}, -{70,-49,65}, -{70,-49,66}, -{70,-49,67}, -{70,-49,68}, -{70,-49,69}, -{70,-49,70}, -{70,-48,5}, -{70,-48,6}, -{70,-48,7}, -{70,-48,8}, -{70,-48,9}, -{70,-48,10}, -{70,-48,11}, -{70,-48,12}, -{70,-48,13}, -{70,-48,14}, -{70,-48,15}, -{70,-48,16}, -{70,-48,17}, -{70,-48,18}, -{70,-48,19}, -{70,-48,20}, -{70,-48,21}, -{70,-48,22}, -{70,-48,23}, -{70,-48,24}, -{70,-48,25}, -{70,-48,26}, -{70,-48,27}, -{70,-48,28}, -{70,-48,29}, -{70,-48,30}, -{70,-48,31}, -{70,-48,32}, -{70,-48,33}, -{70,-48,34}, -{70,-48,35}, -{70,-48,36}, -{70,-48,37}, -{70,-48,38}, -{70,-48,39}, -{70,-48,40}, -{70,-48,41}, -{70,-48,42}, -{70,-48,43}, -{70,-48,44}, -{70,-48,45}, -{70,-48,46}, -{70,-48,47}, -{70,-48,48}, -{70,-48,49}, -{70,-48,50}, -{70,-48,51}, -{70,-48,52}, -{70,-48,53}, -{70,-48,54}, -{70,-48,55}, -{70,-48,56}, -{70,-48,57}, -{70,-48,58}, -{70,-48,59}, -{70,-48,60}, -{70,-48,61}, -{70,-48,62}, -{70,-48,63}, -{70,-48,64}, -{70,-48,65}, -{70,-48,66}, -{70,-48,67}, -{70,-48,68}, -{70,-48,69}, -{70,-48,70}, -{70,-47,3}, -{70,-47,4}, -{70,-47,5}, -{70,-47,6}, -{70,-47,7}, -{70,-47,8}, -{70,-47,9}, -{70,-47,10}, -{70,-47,11}, -{70,-47,12}, -{70,-47,13}, -{70,-47,14}, -{70,-47,15}, -{70,-47,16}, -{70,-47,17}, -{70,-47,18}, -{70,-47,19}, -{70,-47,20}, -{70,-47,21}, -{70,-47,22}, -{70,-47,23}, -{70,-47,24}, -{70,-47,25}, -{70,-47,26}, -{70,-47,27}, -{70,-47,28}, -{70,-47,29}, -{70,-47,30}, -{70,-47,31}, -{70,-47,32}, -{70,-47,33}, -{70,-47,34}, -{70,-47,35}, -{70,-47,36}, -{70,-47,37}, -{70,-47,38}, -{70,-47,39}, -{70,-47,40}, -{70,-47,41}, -{70,-47,42}, -{70,-47,43}, -{70,-47,44}, -{70,-47,45}, -{70,-47,46}, -{70,-47,47}, -{70,-47,48}, -{70,-47,49}, -{70,-47,50}, -{70,-47,51}, -{70,-47,52}, -{70,-47,53}, -{70,-47,54}, -{70,-47,55}, -{70,-47,56}, -{70,-47,57}, -{70,-47,58}, -{70,-47,59}, -{70,-47,60}, -{70,-47,61}, -{70,-47,62}, -{70,-47,63}, -{70,-47,64}, -{70,-47,65}, -{70,-47,66}, -{70,-47,67}, -{70,-47,68}, -{70,-47,69}, -{70,-47,70}, -{70,-46,1}, -{70,-46,2}, -{70,-46,3}, -{70,-46,4}, -{70,-46,5}, -{70,-46,6}, -{70,-46,7}, -{70,-46,8}, -{70,-46,9}, -{70,-46,10}, -{70,-46,11}, -{70,-46,12}, -{70,-46,13}, -{70,-46,14}, -{70,-46,15}, -{70,-46,16}, -{70,-46,17}, -{70,-46,18}, -{70,-46,19}, -{70,-46,20}, -{70,-46,21}, -{70,-46,22}, -{70,-46,23}, -{70,-46,24}, -{70,-46,25}, -{70,-46,26}, -{70,-46,27}, -{70,-46,28}, -{70,-46,29}, -{70,-46,30}, -{70,-46,31}, -{70,-46,32}, -{70,-46,33}, -{70,-46,34}, -{70,-46,35}, -{70,-46,36}, -{70,-46,37}, -{70,-46,38}, -{70,-46,39}, -{70,-46,40}, -{70,-46,41}, -{70,-46,42}, -{70,-46,43}, -{70,-46,44}, -{70,-46,45}, -{70,-46,46}, -{70,-46,47}, -{70,-46,48}, -{70,-46,49}, -{70,-46,50}, -{70,-46,51}, -{70,-46,52}, -{70,-46,53}, -{70,-46,54}, -{70,-46,55}, -{70,-46,56}, -{70,-46,57}, -{70,-46,58}, -{70,-46,59}, -{70,-46,60}, -{70,-46,61}, -{70,-46,62}, -{70,-46,63}, -{70,-46,64}, -{70,-46,65}, -{70,-46,66}, -{70,-46,67}, -{70,-46,68}, -{70,-46,69}, -{70,-46,70}, -{70,-45,-1}, -{70,-45,0}, -{70,-45,1}, -{70,-45,2}, -{70,-45,3}, -{70,-45,4}, -{70,-45,5}, -{70,-45,6}, -{70,-45,7}, -{70,-45,8}, -{70,-45,9}, -{70,-45,10}, -{70,-45,11}, -{70,-45,12}, -{70,-45,13}, -{70,-45,14}, -{70,-45,15}, -{70,-45,16}, -{70,-45,17}, -{70,-45,18}, -{70,-45,19}, -{70,-45,20}, -{70,-45,21}, -{70,-45,22}, -{70,-45,23}, -{70,-45,24}, -{70,-45,25}, -{70,-45,26}, -{70,-45,27}, -{70,-45,28}, -{70,-45,29}, -{70,-45,30}, -{70,-45,31}, -{70,-45,32}, -{70,-45,33}, -{70,-45,34}, -{70,-45,35}, -{70,-45,36}, -{70,-45,37}, -{70,-45,38}, -{70,-45,39}, -{70,-45,40}, -{70,-45,41}, -{70,-45,42}, -{70,-45,43}, -{70,-45,44}, -{70,-45,45}, -{70,-45,46}, -{70,-45,47}, -{70,-45,48}, -{70,-45,49}, -{70,-45,50}, -{70,-45,51}, -{70,-45,52}, -{70,-45,53}, -{70,-45,54}, -{70,-45,55}, -{70,-45,56}, -{70,-45,57}, -{70,-45,58}, -{70,-45,59}, -{70,-45,60}, -{70,-45,61}, -{70,-45,62}, -{70,-45,63}, -{70,-45,64}, -{70,-45,65}, -{70,-45,66}, -{70,-45,67}, -{70,-45,68}, -{70,-45,69}, -{70,-45,70}, -{70,-44,-2}, -{70,-44,-1}, -{70,-44,0}, -{70,-44,1}, -{70,-44,2}, -{70,-44,3}, -{70,-44,4}, -{70,-44,5}, -{70,-44,6}, -{70,-44,7}, -{70,-44,8}, -{70,-44,9}, -{70,-44,10}, -{70,-44,11}, -{70,-44,12}, -{70,-44,13}, -{70,-44,14}, -{70,-44,15}, -{70,-44,16}, -{70,-44,17}, -{70,-44,18}, -{70,-44,19}, -{70,-44,20}, -{70,-44,21}, -{70,-44,22}, -{70,-44,23}, -{70,-44,24}, -{70,-44,25}, -{70,-44,26}, -{70,-44,27}, -{70,-44,28}, -{70,-44,29}, -{70,-44,30}, -{70,-44,31}, -{70,-44,32}, -{70,-44,33}, -{70,-44,34}, -{70,-44,35}, -{70,-44,36}, -{70,-44,37}, -{70,-44,38}, -{70,-44,39}, -{70,-44,40}, -{70,-44,41}, -{70,-44,42}, -{70,-44,43}, -{70,-44,44}, -{70,-44,45}, -{70,-44,46}, -{70,-44,47}, -{70,-44,48}, -{70,-44,49}, -{70,-44,50}, -{70,-44,51}, -{70,-44,52}, -{70,-44,53}, -{70,-44,54}, -{70,-44,55}, -{70,-44,56}, -{70,-44,57}, -{70,-44,58}, -{70,-44,59}, -{70,-44,60}, -{70,-44,61}, -{70,-44,62}, -{70,-44,63}, -{70,-44,64}, -{70,-44,65}, -{70,-44,66}, -{70,-44,67}, -{70,-44,68}, -{70,-44,69}, -{70,-44,70}, -{70,-43,-4}, -{70,-43,-3}, -{70,-43,-2}, -{70,-43,-1}, -{70,-43,0}, -{70,-43,1}, -{70,-43,2}, -{70,-43,3}, -{70,-43,4}, -{70,-43,5}, -{70,-43,6}, -{70,-43,7}, -{70,-43,8}, -{70,-43,9}, -{70,-43,10}, -{70,-43,11}, -{70,-43,12}, -{70,-43,13}, -{70,-43,14}, -{70,-43,15}, -{70,-43,16}, -{70,-43,17}, -{70,-43,18}, -{70,-43,19}, -{70,-43,20}, -{70,-43,21}, -{70,-43,22}, -{70,-43,23}, -{70,-43,24}, -{70,-43,25}, -{70,-43,26}, -{70,-43,27}, -{70,-43,28}, -{70,-43,29}, -{70,-43,30}, -{70,-43,31}, -{70,-43,32}, -{70,-43,33}, -{70,-43,34}, -{70,-43,35}, -{70,-43,36}, -{70,-43,37}, -{70,-43,38}, -{70,-43,39}, -{70,-43,40}, -{70,-43,41}, -{70,-43,42}, -{70,-43,43}, -{70,-43,44}, -{70,-43,45}, -{70,-43,46}, -{70,-43,47}, -{70,-43,48}, -{70,-43,49}, -{70,-43,50}, -{70,-43,51}, -{70,-43,52}, -{70,-43,53}, -{70,-43,54}, -{70,-43,55}, -{70,-43,56}, -{70,-43,57}, -{70,-43,58}, -{70,-43,59}, -{70,-43,60}, -{70,-43,61}, -{70,-43,62}, -{70,-43,63}, -{70,-43,64}, -{70,-43,65}, -{70,-43,66}, -{70,-43,67}, -{70,-43,68}, -{70,-43,69}, -{70,-43,70}, -{70,-42,-6}, -{70,-42,-5}, -{70,-42,-4}, -{70,-42,-3}, -{70,-42,-2}, -{70,-42,-1}, -{70,-42,0}, -{70,-42,1}, -{70,-42,2}, -{70,-42,3}, -{70,-42,4}, -{70,-42,5}, -{70,-42,6}, -{70,-42,7}, -{70,-42,8}, -{70,-42,9}, -{70,-42,10}, -{70,-42,11}, -{70,-42,12}, -{70,-42,13}, -{70,-42,14}, -{70,-42,15}, -{70,-42,16}, -{70,-42,17}, -{70,-42,18}, -{70,-42,19}, -{70,-42,20}, -{70,-42,21}, -{70,-42,22}, -{70,-42,23}, -{70,-42,24}, -{70,-42,25}, -{70,-42,26}, -{70,-42,27}, -{70,-42,28}, -{70,-42,29}, -{70,-42,30}, -{70,-42,31}, -{70,-42,32}, -{70,-42,33}, -{70,-42,34}, -{70,-42,35}, -{70,-42,36}, -{70,-42,37}, -{70,-42,38}, -{70,-42,39}, -{70,-42,40}, -{70,-42,41}, -{70,-42,42}, -{70,-42,43}, -{70,-42,44}, -{70,-42,45}, -{70,-42,46}, -{70,-42,47}, -{70,-42,48}, -{70,-42,49}, -{70,-42,50}, -{70,-42,51}, -{70,-42,52}, -{70,-42,53}, -{70,-42,54}, -{70,-42,55}, -{70,-42,56}, -{70,-42,57}, -{70,-42,58}, -{70,-42,59}, -{70,-42,60}, -{70,-42,61}, -{70,-42,62}, -{70,-42,63}, -{70,-42,64}, -{70,-42,65}, -{70,-42,66}, -{70,-42,67}, -{70,-42,68}, -{70,-42,69}, -{70,-42,70}, -{70,-41,-7}, -{70,-41,-6}, -{70,-41,-5}, -{70,-41,-4}, -{70,-41,-3}, -{70,-41,-2}, -{70,-41,-1}, -{70,-41,0}, -{70,-41,1}, -{70,-41,2}, -{70,-41,3}, -{70,-41,4}, -{70,-41,5}, -{70,-41,6}, -{70,-41,7}, -{70,-41,8}, -{70,-41,9}, -{70,-41,10}, -{70,-41,11}, -{70,-41,12}, -{70,-41,13}, -{70,-41,14}, -{70,-41,15}, -{70,-41,16}, -{70,-41,17}, -{70,-41,18}, -{70,-41,19}, -{70,-41,20}, -{70,-41,21}, -{70,-41,22}, -{70,-41,23}, -{70,-41,24}, -{70,-41,25}, -{70,-41,26}, -{70,-41,27}, -{70,-41,28}, -{70,-41,29}, -{70,-41,30}, -{70,-41,31}, -{70,-41,32}, -{70,-41,33}, -{70,-41,34}, -{70,-41,35}, -{70,-41,36}, -{70,-41,37}, -{70,-41,38}, -{70,-41,39}, -{70,-41,40}, -{70,-41,41}, -{70,-41,42}, -{70,-41,43}, -{70,-41,44}, -{70,-41,45}, -{70,-41,46}, -{70,-41,47}, -{70,-41,48}, -{70,-41,49}, -{70,-41,50}, -{70,-41,51}, -{70,-41,52}, -{70,-41,53}, -{70,-41,54}, -{70,-41,55}, -{70,-41,56}, -{70,-41,57}, -{70,-41,58}, -{70,-41,59}, -{70,-41,60}, -{70,-41,61}, -{70,-41,62}, -{70,-41,63}, -{70,-41,64}, -{70,-41,65}, -{70,-41,66}, -{70,-41,67}, -{70,-41,68}, -{70,-41,69}, -{70,-41,70}, -{70,-40,-9}, -{70,-40,-8}, -{70,-40,-7}, -{70,-40,-6}, -{70,-40,-5}, -{70,-40,-4}, -{70,-40,-3}, -{70,-40,-2}, -{70,-40,-1}, -{70,-40,0}, -{70,-40,1}, -{70,-40,2}, -{70,-40,3}, -{70,-40,4}, -{70,-40,5}, -{70,-40,6}, -{70,-40,7}, -{70,-40,8}, -{70,-40,9}, -{70,-40,10}, -{70,-40,11}, -{70,-40,12}, -{70,-40,13}, -{70,-40,14}, -{70,-40,15}, -{70,-40,16}, -{70,-40,17}, -{70,-40,18}, -{70,-40,19}, -{70,-40,20}, -{70,-40,21}, -{70,-40,22}, -{70,-40,23}, -{70,-40,24}, -{70,-40,25}, -{70,-40,26}, -{70,-40,27}, -{70,-40,28}, -{70,-40,29}, -{70,-40,30}, -{70,-40,31}, -{70,-40,32}, -{70,-40,33}, -{70,-40,34}, -{70,-40,35}, -{70,-40,36}, -{70,-40,37}, -{70,-40,38}, -{70,-40,39}, -{70,-40,40}, -{70,-40,41}, -{70,-40,42}, -{70,-40,43}, -{70,-40,44}, -{70,-40,45}, -{70,-40,46}, -{70,-40,47}, -{70,-40,48}, -{70,-40,49}, -{70,-40,50}, -{70,-40,51}, -{70,-40,52}, -{70,-40,53}, -{70,-40,54}, -{70,-40,55}, -{70,-40,56}, -{70,-40,57}, -{70,-40,58}, -{70,-40,59}, -{70,-40,60}, -{70,-40,61}, -{70,-40,62}, -{70,-40,63}, -{70,-40,64}, -{70,-40,65}, -{70,-40,66}, -{70,-40,67}, -{70,-40,68}, -{70,-40,69}, -{70,-40,70}, -{70,-39,-11}, -{70,-39,-10}, -{70,-39,-9}, -{70,-39,-8}, -{70,-39,-7}, -{70,-39,-6}, -{70,-39,-5}, -{70,-39,-4}, -{70,-39,-3}, -{70,-39,-2}, -{70,-39,-1}, -{70,-39,0}, -{70,-39,1}, -{70,-39,2}, -{70,-39,3}, -{70,-39,4}, -{70,-39,5}, -{70,-39,6}, -{70,-39,7}, -{70,-39,8}, -{70,-39,9}, -{70,-39,10}, -{70,-39,11}, -{70,-39,12}, -{70,-39,13}, -{70,-39,14}, -{70,-39,15}, -{70,-39,16}, -{70,-39,17}, -{70,-39,18}, -{70,-39,19}, -{70,-39,20}, -{70,-39,21}, -{70,-39,22}, -{70,-39,23}, -{70,-39,24}, -{70,-39,25}, -{70,-39,26}, -{70,-39,27}, -{70,-39,28}, -{70,-39,29}, -{70,-39,30}, -{70,-39,31}, -{70,-39,32}, -{70,-39,33}, -{70,-39,34}, -{70,-39,35}, -{70,-39,36}, -{70,-39,37}, -{70,-39,38}, -{70,-39,39}, -{70,-39,40}, -{70,-39,41}, -{70,-39,42}, -{70,-39,43}, -{70,-39,44}, -{70,-39,45}, -{70,-39,46}, -{70,-39,47}, -{70,-39,48}, -{70,-39,49}, -{70,-39,50}, -{70,-39,51}, -{70,-39,52}, -{70,-39,53}, -{70,-39,54}, -{70,-39,55}, -{70,-39,56}, -{70,-39,57}, -{70,-39,58}, -{70,-39,59}, -{70,-39,60}, -{70,-39,61}, -{70,-39,62}, -{70,-39,63}, -{70,-39,64}, -{70,-39,65}, -{70,-39,66}, -{70,-39,67}, -{70,-39,68}, -{70,-39,69}, -{70,-39,70}, -{70,-38,-12}, -{70,-38,-11}, -{70,-38,-10}, -{70,-38,-9}, -{70,-38,-8}, -{70,-38,-7}, -{70,-38,-6}, -{70,-38,-5}, -{70,-38,-4}, -{70,-38,-3}, -{70,-38,-2}, -{70,-38,-1}, -{70,-38,0}, -{70,-38,1}, -{70,-38,2}, -{70,-38,3}, -{70,-38,4}, -{70,-38,5}, -{70,-38,6}, -{70,-38,7}, -{70,-38,8}, -{70,-38,9}, -{70,-38,10}, -{70,-38,11}, -{70,-38,12}, -{70,-38,13}, -{70,-38,14}, -{70,-38,15}, -{70,-38,16}, -{70,-38,17}, -{70,-38,18}, -{70,-38,19}, -{70,-38,20}, -{70,-38,21}, -{70,-38,22}, -{70,-38,23}, -{70,-38,24}, -{70,-38,25}, -{70,-38,26}, -{70,-38,27}, -{70,-38,28}, -{70,-38,29}, -{70,-38,30}, -{70,-38,31}, -{70,-38,32}, -{70,-38,33}, -{70,-38,34}, -{70,-38,35}, -{70,-38,36}, -{70,-38,37}, -{70,-38,38}, -{70,-38,39}, -{70,-38,40}, -{70,-38,41}, -{70,-38,42}, -{70,-38,43}, -{70,-38,44}, -{70,-38,45}, -{70,-38,46}, -{70,-38,47}, -{70,-38,48}, -{70,-38,49}, -{70,-38,50}, -{70,-38,51}, -{70,-38,52}, -{70,-38,53}, -{70,-38,54}, -{70,-38,55}, -{70,-38,56}, -{70,-38,57}, -{70,-38,58}, -{70,-38,59}, -{70,-38,60}, -{70,-38,61}, -{70,-38,62}, -{70,-38,63}, -{70,-38,64}, -{70,-38,65}, -{70,-38,66}, -{70,-38,67}, -{70,-38,68}, -{70,-38,69}, -{70,-38,70}, -{70,-37,-14}, -{70,-37,-13}, -{70,-37,-12}, -{70,-37,-11}, -{70,-37,-10}, -{70,-37,-9}, -{70,-37,-8}, -{70,-37,-7}, -{70,-37,-6}, -{70,-37,-5}, -{70,-37,-4}, -{70,-37,-3}, -{70,-37,-2}, -{70,-37,-1}, -{70,-37,0}, -{70,-37,1}, -{70,-37,2}, -{70,-37,3}, -{70,-37,4}, -{70,-37,5}, -{70,-37,6}, -{70,-37,7}, -{70,-37,8}, -{70,-37,9}, -{70,-37,10}, -{70,-37,11}, -{70,-37,12}, -{70,-37,13}, -{70,-37,14}, -{70,-37,15}, -{70,-37,16}, -{70,-37,17}, -{70,-37,18}, -{70,-37,19}, -{70,-37,20}, -{70,-37,21}, -{70,-37,22}, -{70,-37,23}, -{70,-37,24}, -{70,-37,25}, -{70,-37,26}, -{70,-37,27}, -{70,-37,28}, -{70,-37,29}, -{70,-37,30}, -{70,-37,31}, -{70,-37,32}, -{70,-37,33}, -{70,-37,34}, -{70,-37,35}, -{70,-37,36}, -{70,-37,37}, -{70,-37,38}, -{70,-37,39}, -{70,-37,40}, -{70,-37,41}, -{70,-37,42}, -{70,-37,43}, -{70,-37,44}, -{70,-37,45}, -{70,-37,46}, -{70,-37,47}, -{70,-37,48}, -{70,-37,49}, -{70,-37,50}, -{70,-37,51}, -{70,-37,52}, -{70,-37,53}, -{70,-37,54}, -{70,-37,55}, -{70,-37,56}, -{70,-37,57}, -{70,-37,58}, -{70,-37,59}, -{70,-37,60}, -{70,-37,61}, -{70,-37,62}, -{70,-37,63}, -{70,-37,64}, -{70,-37,65}, -{70,-37,66}, -{70,-37,67}, -{70,-37,68}, -{70,-37,69}, -{70,-37,70}, -{70,-36,-15}, -{70,-36,-14}, -{70,-36,-13}, -{70,-36,-12}, -{70,-36,-11}, -{70,-36,-10}, -{70,-36,-9}, -{70,-36,-8}, -{70,-36,-7}, -{70,-36,-6}, -{70,-36,-5}, -{70,-36,-4}, -{70,-36,-3}, -{70,-36,-2}, -{70,-36,-1}, -{70,-36,0}, -{70,-36,1}, -{70,-36,2}, -{70,-36,3}, -{70,-36,4}, -{70,-36,5}, -{70,-36,6}, -{70,-36,7}, -{70,-36,8}, -{70,-36,9}, -{70,-36,10}, -{70,-36,11}, -{70,-36,12}, -{70,-36,13}, -{70,-36,14}, -{70,-36,15}, -{70,-36,16}, -{70,-36,17}, -{70,-36,18}, -{70,-36,19}, -{70,-36,20}, -{70,-36,21}, -{70,-36,22}, -{70,-36,23}, -{70,-36,24}, -{70,-36,25}, -{70,-36,26}, -{70,-36,27}, -{70,-36,28}, -{70,-36,29}, -{70,-36,30}, -{70,-36,31}, -{70,-36,32}, -{70,-36,33}, -{70,-36,34}, -{70,-36,35}, -{70,-36,36}, -{70,-36,37}, -{70,-36,38}, -{70,-36,39}, -{70,-36,40}, -{70,-36,41}, -{70,-36,42}, -{70,-36,43}, -{70,-36,44}, -{70,-36,45}, -{70,-36,46}, -{70,-36,47}, -{70,-36,48}, -{70,-36,49}, -{70,-36,50}, -{70,-36,51}, -{70,-36,52}, -{70,-36,53}, -{70,-36,54}, -{70,-36,55}, -{70,-36,56}, -{70,-36,57}, -{70,-36,58}, -{70,-36,59}, -{70,-36,60}, -{70,-36,61}, -{70,-36,62}, -{70,-36,63}, -{70,-36,64}, -{70,-36,65}, -{70,-36,66}, -{70,-36,67}, -{70,-36,68}, -{70,-36,69}, -{70,-36,70}, -{70,-35,-17}, -{70,-35,-16}, -{70,-35,-15}, -{70,-35,-14}, -{70,-35,-13}, -{70,-35,-12}, -{70,-35,-11}, -{70,-35,-10}, -{70,-35,-9}, -{70,-35,-8}, -{70,-35,-7}, -{70,-35,-6}, -{70,-35,-5}, -{70,-35,-4}, -{70,-35,-3}, -{70,-35,-2}, -{70,-35,-1}, -{70,-35,0}, -{70,-35,1}, -{70,-35,2}, -{70,-35,3}, -{70,-35,4}, -{70,-35,5}, -{70,-35,6}, -{70,-35,7}, -{70,-35,8}, -{70,-35,9}, -{70,-35,10}, -{70,-35,11}, -{70,-35,12}, -{70,-35,13}, -{70,-35,14}, -{70,-35,15}, -{70,-35,16}, -{70,-35,17}, -{70,-35,18}, -{70,-35,19}, -{70,-35,20}, -{70,-35,21}, -{70,-35,22}, -{70,-35,23}, -{70,-35,24}, -{70,-35,25}, -{70,-35,26}, -{70,-35,27}, -{70,-35,28}, -{70,-35,29}, -{70,-35,30}, -{70,-35,31}, -{70,-35,32}, -{70,-35,33}, -{70,-35,34}, -{70,-35,35}, -{70,-35,36}, -{70,-35,37}, -{70,-35,38}, -{70,-35,39}, -{70,-35,40}, -{70,-35,41}, -{70,-35,42}, -{70,-35,43}, -{70,-35,44}, -{70,-35,45}, -{70,-35,46}, -{70,-35,47}, -{70,-35,48}, -{70,-35,49}, -{70,-35,50}, -{70,-35,51}, -{70,-35,52}, -{70,-35,53}, -{70,-35,54}, -{70,-35,55}, -{70,-35,56}, -{70,-35,57}, -{70,-35,58}, -{70,-35,59}, -{70,-35,60}, -{70,-35,61}, -{70,-35,62}, -{70,-35,63}, -{70,-35,64}, -{70,-35,65}, -{70,-35,66}, -{70,-35,67}, -{70,-35,68}, -{70,-35,69}, -{70,-35,70}, -{70,-34,-18}, -{70,-34,-17}, -{70,-34,-16}, -{70,-34,-15}, -{70,-34,-14}, -{70,-34,-13}, -{70,-34,-12}, -{70,-34,-11}, -{70,-34,-10}, -{70,-34,-9}, -{70,-34,-8}, -{70,-34,-7}, -{70,-34,-6}, -{70,-34,-5}, -{70,-34,-4}, -{70,-34,-3}, -{70,-34,-2}, -{70,-34,-1}, -{70,-34,0}, -{70,-34,1}, -{70,-34,2}, -{70,-34,3}, -{70,-34,4}, -{70,-34,5}, -{70,-34,6}, -{70,-34,7}, -{70,-34,8}, -{70,-34,9}, -{70,-34,10}, -{70,-34,11}, -{70,-34,12}, -{70,-34,13}, -{70,-34,14}, -{70,-34,15}, -{70,-34,16}, -{70,-34,17}, -{70,-34,18}, -{70,-34,19}, -{70,-34,20}, -{70,-34,21}, -{70,-34,22}, -{70,-34,23}, -{70,-34,24}, -{70,-34,25}, -{70,-34,26}, -{70,-34,27}, -{70,-34,28}, -{70,-34,29}, -{70,-34,30}, -{70,-34,31}, -{70,-34,32}, -{70,-34,33}, -{70,-34,34}, -{70,-34,35}, -{70,-34,36}, -{70,-34,37}, -{70,-34,38}, -{70,-34,39}, -{70,-34,40}, -{70,-34,41}, -{70,-34,42}, -{70,-34,43}, -{70,-34,44}, -{70,-34,45}, -{70,-34,46}, -{70,-34,47}, -{70,-34,48}, -{70,-34,49}, -{70,-34,50}, -{70,-34,51}, -{70,-34,52}, -{70,-34,53}, -{70,-34,54}, -{70,-34,55}, -{70,-34,56}, -{70,-34,57}, -{70,-34,58}, -{70,-34,59}, -{70,-34,60}, -{70,-34,61}, -{70,-34,62}, -{70,-34,63}, -{70,-34,64}, -{70,-34,65}, -{70,-34,66}, -{70,-34,67}, -{70,-34,68}, -{70,-34,69}, -{70,-34,70}, -{70,-33,-20}, -{70,-33,-19}, -{70,-33,-18}, -{70,-33,-17}, -{70,-33,-16}, -{70,-33,-15}, -{70,-33,-14}, -{70,-33,-13}, -{70,-33,-12}, -{70,-33,-11}, -{70,-33,-10}, -{70,-33,-9}, -{70,-33,-8}, -{70,-33,-7}, -{70,-33,-6}, -{70,-33,-5}, -{70,-33,-4}, -{70,-33,-3}, -{70,-33,-2}, -{70,-33,-1}, -{70,-33,0}, -{70,-33,1}, -{70,-33,2}, -{70,-33,3}, -{70,-33,4}, -{70,-33,5}, -{70,-33,6}, -{70,-33,7}, -{70,-33,8}, -{70,-33,9}, -{70,-33,10}, -{70,-33,11}, -{70,-33,12}, -{70,-33,13}, -{70,-33,14}, -{70,-33,15}, -{70,-33,16}, -{70,-33,17}, -{70,-33,18}, -{70,-33,19}, -{70,-33,20}, -{70,-33,21}, -{70,-33,22}, -{70,-33,23}, -{70,-33,24}, -{70,-33,25}, -{70,-33,26}, -{70,-33,27}, -{70,-33,28}, -{70,-33,29}, -{70,-33,30}, -{70,-33,31}, -{70,-33,32}, -{70,-33,33}, -{70,-33,34}, -{70,-33,35}, -{70,-33,36}, -{70,-33,37}, -{70,-33,38}, -{70,-33,39}, -{70,-33,40}, -{70,-33,41}, -{70,-33,42}, -{70,-33,43}, -{70,-33,44}, -{70,-33,45}, -{70,-33,46}, -{70,-33,47}, -{70,-33,48}, -{70,-33,49}, -{70,-33,50}, -{70,-33,51}, -{70,-33,52}, -{70,-33,53}, -{70,-33,54}, -{70,-33,55}, -{70,-33,56}, -{70,-33,57}, -{70,-33,58}, -{70,-33,59}, -{70,-33,60}, -{70,-33,61}, -{70,-33,62}, -{70,-33,63}, -{70,-33,64}, -{70,-33,65}, -{70,-33,66}, -{70,-33,67}, -{70,-33,68}, -{70,-33,69}, -{70,-33,70}, -{70,-33,71}, -{70,-32,-21}, -{70,-32,-20}, -{70,-32,-19}, -{70,-32,-18}, -{70,-32,-17}, -{70,-32,-16}, -{70,-32,-15}, -{70,-32,-14}, -{70,-32,-13}, -{70,-32,-12}, -{70,-32,-11}, -{70,-32,-10}, -{70,-32,-9}, -{70,-32,-8}, -{70,-32,-7}, -{70,-32,-6}, -{70,-32,-5}, -{70,-32,-4}, -{70,-32,-3}, -{70,-32,-2}, -{70,-32,-1}, -{70,-32,0}, -{70,-32,1}, -{70,-32,2}, -{70,-32,3}, -{70,-32,4}, -{70,-32,5}, -{70,-32,6}, -{70,-32,7}, -{70,-32,8}, -{70,-32,9}, -{70,-32,10}, -{70,-32,11}, -{70,-32,12}, -{70,-32,13}, -{70,-32,14}, -{70,-32,15}, -{70,-32,16}, -{70,-32,17}, -{70,-32,18}, -{70,-32,19}, -{70,-32,20}, -{70,-32,21}, -{70,-32,22}, -{70,-32,23}, -{70,-32,24}, -{70,-32,25}, -{70,-32,26}, -{70,-32,27}, -{70,-32,28}, -{70,-32,29}, -{70,-32,30}, -{70,-32,31}, -{70,-32,32}, -{70,-32,33}, -{70,-32,34}, -{70,-32,35}, -{70,-32,36}, -{70,-32,37}, -{70,-32,38}, -{70,-32,39}, -{70,-32,40}, -{70,-32,41}, -{70,-32,42}, -{70,-32,43}, -{70,-32,44}, -{70,-32,45}, -{70,-32,46}, -{70,-32,47}, -{70,-32,48}, -{70,-32,49}, -{70,-32,50}, -{70,-32,51}, -{70,-32,52}, -{70,-32,53}, -{70,-32,54}, -{70,-32,55}, -{70,-32,56}, -{70,-32,57}, -{70,-32,58}, -{70,-32,59}, -{70,-32,60}, -{70,-32,61}, -{70,-32,62}, -{70,-32,63}, -{70,-32,64}, -{70,-32,65}, -{70,-32,66}, -{70,-32,67}, -{70,-32,68}, -{70,-32,69}, -{70,-32,70}, -{70,-32,71}, -{70,-31,-22}, -{70,-31,-21}, -{70,-31,-20}, -{70,-31,-19}, -{70,-31,-18}, -{70,-31,-17}, -{70,-31,-16}, -{70,-31,-15}, -{70,-31,-14}, -{70,-31,-13}, -{70,-31,-12}, -{70,-31,-11}, -{70,-31,-10}, -{70,-31,-9}, -{70,-31,-8}, -{70,-31,-7}, -{70,-31,-6}, -{70,-31,-5}, -{70,-31,-4}, -{70,-31,-3}, -{70,-31,-2}, -{70,-31,-1}, -{70,-31,0}, -{70,-31,1}, -{70,-31,2}, -{70,-31,3}, -{70,-31,4}, -{70,-31,5}, -{70,-31,6}, -{70,-31,7}, -{70,-31,8}, -{70,-31,9}, -{70,-31,10}, -{70,-31,11}, -{70,-31,12}, -{70,-31,13}, -{70,-31,14}, -{70,-31,15}, -{70,-31,16}, -{70,-31,17}, -{70,-31,18}, -{70,-31,19}, -{70,-31,20}, -{70,-31,21}, -{70,-31,22}, -{70,-31,23}, -{70,-31,24}, -{70,-31,25}, -{70,-31,26}, -{70,-31,27}, -{70,-31,28}, -{70,-31,29}, -{70,-31,30}, -{70,-31,31}, -{70,-31,32}, -{70,-31,33}, -{70,-31,34}, -{70,-31,35}, -{70,-31,36}, -{70,-31,37}, -{70,-31,38}, -{70,-31,39}, -{70,-31,40}, -{70,-31,41}, -{70,-31,42}, -{70,-31,43}, -{70,-31,44}, -{70,-31,45}, -{70,-31,46}, -{70,-31,47}, -{70,-31,48}, -{70,-31,49}, -{70,-31,50}, -{70,-31,51}, -{70,-31,52}, -{70,-31,53}, -{70,-31,54}, -{70,-31,55}, -{70,-31,56}, -{70,-31,57}, -{70,-31,58}, -{70,-31,59}, -{70,-31,60}, -{70,-31,61}, -{70,-31,62}, -{70,-31,63}, -{70,-31,64}, -{70,-31,65}, -{70,-31,66}, -{70,-31,67}, -{70,-31,68}, -{70,-31,69}, -{70,-31,70}, -{70,-31,71}, -{70,-30,-24}, -{70,-30,-23}, -{70,-30,-22}, -{70,-30,-21}, -{70,-30,-20}, -{70,-30,-19}, -{70,-30,-18}, -{70,-30,-17}, -{70,-30,-16}, -{70,-30,-15}, -{70,-30,-14}, -{70,-30,-13}, -{70,-30,-12}, -{70,-30,-11}, -{70,-30,-10}, -{70,-30,-9}, -{70,-30,-8}, -{70,-30,-7}, -{70,-30,-6}, -{70,-30,-5}, -{70,-30,-4}, -{70,-30,-3}, -{70,-30,-2}, -{70,-30,-1}, -{70,-30,0}, -{70,-30,1}, -{70,-30,2}, -{70,-30,3}, -{70,-30,4}, -{70,-30,5}, -{70,-30,6}, -{70,-30,7}, -{70,-30,8}, -{70,-30,9}, -{70,-30,10}, -{70,-30,11}, -{70,-30,12}, -{70,-30,13}, -{70,-30,14}, -{70,-30,15}, -{70,-30,16}, -{70,-30,17}, -{70,-30,18}, -{70,-30,19}, -{70,-30,20}, -{70,-30,21}, -{70,-30,22}, -{70,-30,23}, -{70,-30,24}, -{70,-30,25}, -{70,-30,26}, -{70,-30,27}, -{70,-30,28}, -{70,-30,29}, -{70,-30,30}, -{70,-30,31}, -{70,-30,32}, -{70,-30,33}, -{70,-30,34}, -{70,-30,35}, -{70,-30,36}, -{70,-30,37}, -{70,-30,38}, -{70,-30,39}, -{70,-30,40}, -{70,-30,41}, -{70,-30,42}, -{70,-30,43}, -{70,-30,44}, -{70,-30,45}, -{70,-30,46}, -{70,-30,47}, -{70,-30,48}, -{70,-30,49}, -{70,-30,50}, -{70,-30,51}, -{70,-30,52}, -{70,-30,53}, -{70,-30,54}, -{70,-30,55}, -{70,-30,56}, -{70,-30,57}, -{70,-30,58}, -{70,-30,59}, -{70,-30,60}, -{70,-30,61}, -{70,-30,62}, -{70,-30,63}, -{70,-30,64}, -{70,-30,65}, -{70,-30,66}, -{70,-30,67}, -{70,-30,68}, -{70,-30,69}, -{70,-30,70}, -{70,-30,71}, -{70,-29,-25}, -{70,-29,-24}, -{70,-29,-23}, -{70,-29,-22}, -{70,-29,-21}, -{70,-29,-20}, -{70,-29,-19}, -{70,-29,-18}, -{70,-29,-17}, -{70,-29,-16}, -{70,-29,-15}, -{70,-29,-14}, -{70,-29,-13}, -{70,-29,-12}, -{70,-29,-11}, -{70,-29,-10}, -{70,-29,-9}, -{70,-29,-8}, -{70,-29,-7}, -{70,-29,-6}, -{70,-29,-5}, -{70,-29,-4}, -{70,-29,-3}, -{70,-29,-2}, -{70,-29,-1}, -{70,-29,0}, -{70,-29,1}, -{70,-29,2}, -{70,-29,3}, -{70,-29,4}, -{70,-29,5}, -{70,-29,6}, -{70,-29,7}, -{70,-29,8}, -{70,-29,9}, -{70,-29,10}, -{70,-29,11}, -{70,-29,12}, -{70,-29,13}, -{70,-29,14}, -{70,-29,15}, -{70,-29,16}, -{70,-29,17}, -{70,-29,18}, -{70,-29,19}, -{70,-29,20}, -{70,-29,21}, -{70,-29,22}, -{70,-29,23}, -{70,-29,24}, -{70,-29,25}, -{70,-29,26}, -{70,-29,27}, -{70,-29,28}, -{70,-29,29}, -{70,-29,30}, -{70,-29,31}, -{70,-29,32}, -{70,-29,33}, -{70,-29,34}, -{70,-29,35}, -{70,-29,36}, -{70,-29,37}, -{70,-29,38}, -{70,-29,39}, -{70,-29,40}, -{70,-29,41}, -{70,-29,42}, -{70,-29,43}, -{70,-29,44}, -{70,-29,45}, -{70,-29,46}, -{70,-29,47}, -{70,-29,48}, -{70,-29,49}, -{70,-29,50}, -{70,-29,51}, -{70,-29,52}, -{70,-29,53}, -{70,-29,54}, -{70,-29,55}, -{70,-29,56}, -{70,-29,57}, -{70,-29,58}, -{70,-29,59}, -{70,-29,60}, -{70,-29,61}, -{70,-29,62}, -{70,-29,63}, -{70,-29,64}, -{70,-29,65}, -{70,-29,66}, -{70,-29,67}, -{70,-29,68}, -{70,-29,69}, -{70,-29,70}, -{70,-29,71}, -{70,-28,-27}, -{70,-28,-26}, -{70,-28,-25}, -{70,-28,-24}, -{70,-28,-23}, -{70,-28,-22}, -{70,-28,-21}, -{70,-28,-20}, -{70,-28,-19}, -{70,-28,-18}, -{70,-28,-17}, -{70,-28,-16}, -{70,-28,-15}, -{70,-28,-14}, -{70,-28,-13}, -{70,-28,-12}, -{70,-28,-11}, -{70,-28,-10}, -{70,-28,-9}, -{70,-28,-8}, -{70,-28,-7}, -{70,-28,-6}, -{70,-28,-5}, -{70,-28,-4}, -{70,-28,-3}, -{70,-28,-2}, -{70,-28,-1}, -{70,-28,0}, -{70,-28,1}, -{70,-28,2}, -{70,-28,3}, -{70,-28,4}, -{70,-28,5}, -{70,-28,6}, -{70,-28,7}, -{70,-28,8}, -{70,-28,9}, -{70,-28,10}, -{70,-28,11}, -{70,-28,12}, -{70,-28,13}, -{70,-28,14}, -{70,-28,15}, -{70,-28,16}, -{70,-28,17}, -{70,-28,18}, -{70,-28,19}, -{70,-28,20}, -{70,-28,21}, -{70,-28,22}, -{70,-28,23}, -{70,-28,24}, -{70,-28,25}, -{70,-28,26}, -{70,-28,27}, -{70,-28,28}, -{70,-28,29}, -{70,-28,30}, -{70,-28,31}, -{70,-28,32}, -{70,-28,33}, -{70,-28,34}, -{70,-28,35}, -{70,-28,36}, -{70,-28,37}, -{70,-28,38}, -{70,-28,39}, -{70,-28,40}, -{70,-28,41}, -{70,-28,42}, -{70,-28,43}, -{70,-28,44}, -{70,-28,45}, -{70,-28,46}, -{70,-28,47}, -{70,-28,48}, -{70,-28,49}, -{70,-28,50}, -{70,-28,51}, -{70,-28,52}, -{70,-28,53}, -{70,-28,54}, -{70,-28,55}, -{70,-28,56}, -{70,-28,57}, -{70,-28,58}, -{70,-28,59}, -{70,-28,60}, -{70,-28,61}, -{70,-28,62}, -{70,-28,63}, -{70,-28,64}, -{70,-28,65}, -{70,-28,66}, -{70,-28,67}, -{70,-28,68}, -{70,-28,69}, -{70,-28,70}, -{70,-28,71}, -{70,-27,-28}, -{70,-27,-27}, -{70,-27,-26}, -{70,-27,-25}, -{70,-27,-24}, -{70,-27,-23}, -{70,-27,-22}, -{70,-27,-21}, -{70,-27,-20}, -{70,-27,-19}, -{70,-27,-18}, -{70,-27,-17}, -{70,-27,-16}, -{70,-27,-15}, -{70,-27,-14}, -{70,-27,-13}, -{70,-27,-12}, -{70,-27,-11}, -{70,-27,-10}, -{70,-27,-9}, -{70,-27,-8}, -{70,-27,-7}, -{70,-27,-6}, -{70,-27,-5}, -{70,-27,-4}, -{70,-27,-3}, -{70,-27,-2}, -{70,-27,-1}, -{70,-27,0}, -{70,-27,1}, -{70,-27,2}, -{70,-27,3}, -{70,-27,4}, -{70,-27,5}, -{70,-27,6}, -{70,-27,7}, -{70,-27,8}, -{70,-27,9}, -{70,-27,10}, -{70,-27,11}, -{70,-27,12}, -{70,-27,13}, -{70,-27,14}, -{70,-27,15}, -{70,-27,16}, -{70,-27,17}, -{70,-27,18}, -{70,-27,19}, -{70,-27,20}, -{70,-27,21}, -{70,-27,22}, -{70,-27,23}, -{70,-27,24}, -{70,-27,25}, -{70,-27,26}, -{70,-27,27}, -{70,-27,28}, -{70,-27,29}, -{70,-27,30}, -{70,-27,31}, -{70,-27,32}, -{70,-27,33}, -{70,-27,34}, -{70,-27,35}, -{70,-27,36}, -{70,-27,37}, -{70,-27,38}, -{70,-27,39}, -{70,-27,40}, -{70,-27,41}, -{70,-27,42}, -{70,-27,43}, -{70,-27,44}, -{70,-27,45}, -{70,-27,46}, -{70,-27,47}, -{70,-27,48}, -{70,-27,49}, -{70,-27,50}, -{70,-27,51}, -{70,-27,52}, -{70,-27,53}, -{70,-27,54}, -{70,-27,55}, -{70,-27,56}, -{70,-27,57}, -{70,-27,58}, -{70,-27,59}, -{70,-27,60}, -{70,-27,61}, -{70,-27,62}, -{70,-27,63}, -{70,-27,64}, -{70,-27,65}, -{70,-27,66}, -{70,-27,67}, -{70,-27,68}, -{70,-27,69}, -{70,-27,70}, -{70,-27,71}, -{70,-26,-29}, -{70,-26,-28}, -{70,-26,-27}, -{70,-26,-26}, -{70,-26,-25}, -{70,-26,-24}, -{70,-26,-23}, -{70,-26,-22}, -{70,-26,-21}, -{70,-26,-20}, -{70,-26,-19}, -{70,-26,-18}, -{70,-26,-17}, -{70,-26,-16}, -{70,-26,-15}, -{70,-26,-14}, -{70,-26,-13}, -{70,-26,-12}, -{70,-26,-11}, -{70,-26,-10}, -{70,-26,-9}, -{70,-26,-8}, -{70,-26,-7}, -{70,-26,-6}, -{70,-26,-5}, -{70,-26,-4}, -{70,-26,-3}, -{70,-26,-2}, -{70,-26,-1}, -{70,-26,0}, -{70,-26,1}, -{70,-26,2}, -{70,-26,3}, -{70,-26,4}, -{70,-26,5}, -{70,-26,6}, -{70,-26,7}, -{70,-26,8}, -{70,-26,9}, -{70,-26,10}, -{70,-26,11}, -{70,-26,12}, -{70,-26,13}, -{70,-26,14}, -{70,-26,15}, -{70,-26,16}, -{70,-26,17}, -{70,-26,18}, -{70,-26,19}, -{70,-26,20}, -{70,-26,21}, -{70,-26,22}, -{70,-26,23}, -{70,-26,24}, -{70,-26,25}, -{70,-26,26}, -{70,-26,27}, -{70,-26,28}, -{70,-26,29}, -{70,-26,30}, -{70,-26,31}, -{70,-26,32}, -{70,-26,33}, -{70,-26,34}, -{70,-26,35}, -{70,-26,36}, -{70,-26,37}, -{70,-26,38}, -{70,-26,39}, -{70,-26,40}, -{70,-26,41}, -{70,-26,42}, -{70,-26,43}, -{70,-26,44}, -{70,-26,45}, -{70,-26,46}, -{70,-26,47}, -{70,-26,48}, -{70,-26,49}, -{70,-26,50}, -{70,-26,51}, -{70,-26,52}, -{70,-26,53}, -{70,-26,54}, -{70,-26,55}, -{70,-26,56}, -{70,-26,57}, -{70,-26,58}, -{70,-26,59}, -{70,-26,60}, -{70,-26,61}, -{70,-26,62}, -{70,-26,63}, -{70,-26,64}, -{70,-26,65}, -{70,-26,66}, -{70,-26,67}, -{70,-26,68}, -{70,-26,69}, -{70,-26,70}, -{70,-26,71}, -{70,-25,-31}, -{70,-25,-30}, -{70,-25,-29}, -{70,-25,-28}, -{70,-25,-27}, -{70,-25,-26}, -{70,-25,-25}, -{70,-25,-24}, -{70,-25,-23}, -{70,-25,-22}, -{70,-25,-21}, -{70,-25,-20}, -{70,-25,-19}, -{70,-25,-18}, -{70,-25,-17}, -{70,-25,-16}, -{70,-25,-15}, -{70,-25,-14}, -{70,-25,-13}, -{70,-25,-12}, -{70,-25,-11}, -{70,-25,-10}, -{70,-25,-9}, -{70,-25,-8}, -{70,-25,-7}, -{70,-25,-6}, -{70,-25,-5}, -{70,-25,-4}, -{70,-25,-3}, -{70,-25,-2}, -{70,-25,-1}, -{70,-25,0}, -{70,-25,1}, -{70,-25,2}, -{70,-25,3}, -{70,-25,4}, -{70,-25,5}, -{70,-25,6}, -{70,-25,7}, -{70,-25,8}, -{70,-25,9}, -{70,-25,10}, -{70,-25,11}, -{70,-25,12}, -{70,-25,13}, -{70,-25,14}, -{70,-25,15}, -{70,-25,16}, -{70,-25,17}, -{70,-25,18}, -{70,-25,19}, -{70,-25,20}, -{70,-25,21}, -{70,-25,22}, -{70,-25,23}, -{70,-25,24}, -{70,-25,25}, -{70,-25,26}, -{70,-25,27}, -{70,-25,28}, -{70,-25,29}, -{70,-25,30}, -{70,-25,31}, -{70,-25,32}, -{70,-25,33}, -{70,-25,34}, -{70,-25,35}, -{70,-25,36}, -{70,-25,37}, -{70,-25,38}, -{70,-25,39}, -{70,-25,40}, -{70,-25,41}, -{70,-25,42}, -{70,-25,43}, -{70,-25,44}, -{70,-25,45}, -{70,-25,46}, -{70,-25,47}, -{70,-25,48}, -{70,-25,49}, -{70,-25,50}, -{70,-25,51}, -{70,-25,52}, -{70,-25,53}, -{70,-25,54}, -{70,-25,55}, -{70,-25,56}, -{70,-25,57}, -{70,-25,58}, -{70,-25,59}, -{70,-25,60}, -{70,-25,61}, -{70,-25,62}, -{70,-25,63}, -{70,-25,64}, -{70,-25,65}, -{70,-25,66}, -{70,-25,67}, -{70,-25,68}, -{70,-25,69}, -{70,-25,70}, -{70,-25,71}, -{70,-24,-32}, -{70,-24,-31}, -{70,-24,-30}, -{70,-24,-29}, -{70,-24,-28}, -{70,-24,-27}, -{70,-24,-26}, -{70,-24,-25}, -{70,-24,-24}, -{70,-24,-23}, -{70,-24,-22}, -{70,-24,-21}, -{70,-24,-20}, -{70,-24,-19}, -{70,-24,-18}, -{70,-24,-17}, -{70,-24,-16}, -{70,-24,-15}, -{70,-24,-14}, -{70,-24,-13}, -{70,-24,-12}, -{70,-24,-11}, -{70,-24,-10}, -{70,-24,-9}, -{70,-24,-8}, -{70,-24,-7}, -{70,-24,-6}, -{70,-24,-5}, -{70,-24,-4}, -{70,-24,-3}, -{70,-24,-2}, -{70,-24,-1}, -{70,-24,0}, -{70,-24,1}, -{70,-24,2}, -{70,-24,3}, -{70,-24,4}, -{70,-24,5}, -{70,-24,6}, -{70,-24,7}, -{70,-24,8}, -{70,-24,9}, -{70,-24,10}, -{70,-24,11}, -{70,-24,12}, -{70,-24,13}, -{70,-24,14}, -{70,-24,15}, -{70,-24,16}, -{70,-24,17}, -{70,-24,18}, -{70,-24,19}, -{70,-24,20}, -{70,-24,21}, -{70,-24,22}, -{70,-24,23}, -{70,-24,24}, -{70,-24,25}, -{70,-24,26}, -{70,-24,27}, -{70,-24,28}, -{70,-24,29}, -{70,-24,30}, -{70,-24,31}, -{70,-24,32}, -{70,-24,33}, -{70,-24,34}, -{70,-24,35}, -{70,-24,36}, -{70,-24,37}, -{70,-24,38}, -{70,-24,39}, -{70,-24,40}, -{70,-24,41}, -{70,-24,42}, -{70,-24,43}, -{70,-24,44}, -{70,-24,45}, -{70,-24,46}, -{70,-24,47}, -{70,-24,48}, -{70,-24,49}, -{70,-24,50}, -{70,-24,51}, -{70,-24,52}, -{70,-24,53}, -{70,-24,54}, -{70,-24,55}, -{70,-24,56}, -{70,-24,57}, -{70,-24,58}, -{70,-24,59}, -{70,-24,60}, -{70,-24,61}, -{70,-24,62}, -{70,-24,63}, -{70,-24,64}, -{70,-24,65}, -{70,-24,66}, -{70,-24,67}, -{70,-24,68}, -{70,-24,69}, -{70,-24,70}, -{70,-24,71}, -{70,-23,-33}, -{70,-23,-32}, -{70,-23,-31}, -{70,-23,-30}, -{70,-23,-29}, -{70,-23,-28}, -{70,-23,-27}, -{70,-23,-26}, -{70,-23,-25}, -{70,-23,-24}, -{70,-23,-23}, -{70,-23,-22}, -{70,-23,-21}, -{70,-23,-20}, -{70,-23,-19}, -{70,-23,-18}, -{70,-23,-17}, -{70,-23,-16}, -{70,-23,-15}, -{70,-23,-14}, -{70,-23,-13}, -{70,-23,-12}, -{70,-23,-11}, -{70,-23,-10}, -{70,-23,-9}, -{70,-23,-8}, -{70,-23,-7}, -{70,-23,-6}, -{70,-23,-5}, -{70,-23,-4}, -{70,-23,-3}, -{70,-23,-2}, -{70,-23,-1}, -{70,-23,0}, -{70,-23,1}, -{70,-23,2}, -{70,-23,3}, -{70,-23,4}, -{70,-23,5}, -{70,-23,6}, -{70,-23,7}, -{70,-23,8}, -{70,-23,9}, -{70,-23,10}, -{70,-23,11}, -{70,-23,12}, -{70,-23,13}, -{70,-23,14}, -{70,-23,15}, -{70,-23,16}, -{70,-23,17}, -{70,-23,18}, -{70,-23,19}, -{70,-23,20}, -{70,-23,21}, -{70,-23,22}, -{70,-23,23}, -{70,-23,24}, -{70,-23,25}, -{70,-23,26}, -{70,-23,27}, -{70,-23,28}, -{70,-23,29}, -{70,-23,30}, -{70,-23,31}, -{70,-23,32}, -{70,-23,33}, -{70,-23,34}, -{70,-23,35}, -{70,-23,36}, -{70,-23,37}, -{70,-23,38}, -{70,-23,39}, -{70,-23,40}, -{70,-23,41}, -{70,-23,42}, -{70,-23,43}, -{70,-23,44}, -{70,-23,45}, -{70,-23,46}, -{70,-23,47}, -{70,-23,48}, -{70,-23,49}, -{70,-23,50}, -{70,-23,51}, -{70,-23,52}, -{70,-23,53}, -{70,-23,54}, -{70,-23,55}, -{70,-23,56}, -{70,-23,57}, -{70,-23,58}, -{70,-23,59}, -{70,-23,60}, -{70,-23,61}, -{70,-23,62}, -{70,-23,63}, -{70,-23,64}, -{70,-23,65}, -{70,-23,66}, -{70,-23,67}, -{70,-23,68}, -{70,-23,69}, -{70,-23,70}, -{70,-23,71}, -{70,-22,-35}, -{70,-22,-34}, -{70,-22,-33}, -{70,-22,-32}, -{70,-22,-31}, -{70,-22,-30}, -{70,-22,-29}, -{70,-22,-28}, -{70,-22,-27}, -{70,-22,-26}, -{70,-22,-25}, -{70,-22,-24}, -{70,-22,-23}, -{70,-22,-22}, -{70,-22,-21}, -{70,-22,-20}, -{70,-22,-19}, -{70,-22,-18}, -{70,-22,-17}, -{70,-22,-16}, -{70,-22,-15}, -{70,-22,-14}, -{70,-22,-13}, -{70,-22,-12}, -{70,-22,-11}, -{70,-22,-10}, -{70,-22,-9}, -{70,-22,-8}, -{70,-22,-7}, -{70,-22,-6}, -{70,-22,-5}, -{70,-22,-4}, -{70,-22,-3}, -{70,-22,-2}, -{70,-22,-1}, -{70,-22,0}, -{70,-22,1}, -{70,-22,2}, -{70,-22,3}, -{70,-22,4}, -{70,-22,5}, -{70,-22,6}, -{70,-22,7}, -{70,-22,8}, -{70,-22,9}, -{70,-22,10}, -{70,-22,11}, -{70,-22,12}, -{70,-22,13}, -{70,-22,14}, -{70,-22,15}, -{70,-22,16}, -{70,-22,17}, -{70,-22,18}, -{70,-22,19}, -{70,-22,20}, -{70,-22,21}, -{70,-22,22}, -{70,-22,23}, -{70,-22,24}, -{70,-22,25}, -{70,-22,26}, -{70,-22,27}, -{70,-22,28}, -{70,-22,29}, -{70,-22,30}, -{70,-22,31}, -{70,-22,32}, -{70,-22,33}, -{70,-22,34}, -{70,-22,35}, -{70,-22,36}, -{70,-22,37}, -{70,-22,38}, -{70,-22,39}, -{70,-22,40}, -{70,-22,41}, -{70,-22,42}, -{70,-22,43}, -{70,-22,44}, -{70,-22,45}, -{70,-22,46}, -{70,-22,47}, -{70,-22,48}, -{70,-22,49}, -{70,-22,50}, -{70,-22,51}, -{70,-22,52}, -{70,-22,53}, -{70,-22,54}, -{70,-22,55}, -{70,-22,56}, -{70,-22,57}, -{70,-22,58}, -{70,-22,59}, -{70,-22,60}, -{70,-22,61}, -{70,-22,62}, -{70,-22,63}, -{70,-22,64}, -{70,-22,65}, -{70,-22,66}, -{70,-22,67}, -{70,-22,68}, -{70,-22,69}, -{70,-22,70}, -{70,-22,71}, -{70,-21,-36}, -{70,-21,-35}, -{70,-21,-34}, -{70,-21,-33}, -{70,-21,-32}, -{70,-21,-31}, -{70,-21,-30}, -{70,-21,-29}, -{70,-21,-28}, -{70,-21,-27}, -{70,-21,-26}, -{70,-21,-25}, -{70,-21,-24}, -{70,-21,-23}, -{70,-21,-22}, -{70,-21,-21}, -{70,-21,-20}, -{70,-21,-19}, -{70,-21,-18}, -{70,-21,-17}, -{70,-21,-16}, -{70,-21,-15}, -{70,-21,-14}, -{70,-21,-13}, -{70,-21,-12}, -{70,-21,-11}, -{70,-21,-10}, -{70,-21,-9}, -{70,-21,-8}, -{70,-21,-7}, -{70,-21,-6}, -{70,-21,-5}, -{70,-21,-4}, -{70,-21,-3}, -{70,-21,-2}, -{70,-21,-1}, -{70,-21,0}, -{70,-21,1}, -{70,-21,2}, -{70,-21,3}, -{70,-21,4}, -{70,-21,5}, -{70,-21,6}, -{70,-21,7}, -{70,-21,8}, -{70,-21,9}, -{70,-21,10}, -{70,-21,11}, -{70,-21,12}, -{70,-21,13}, -{70,-21,14}, -{70,-21,15}, -{70,-21,16}, -{70,-21,17}, -{70,-21,18}, -{70,-21,19}, -{70,-21,20}, -{70,-21,21}, -{70,-21,22}, -{70,-21,23}, -{70,-21,24}, -{70,-21,25}, -{70,-21,26}, -{70,-21,27}, -{70,-21,28}, -{70,-21,29}, -{70,-21,30}, -{70,-21,31}, -{70,-21,32}, -{70,-21,33}, -{70,-21,34}, -{70,-21,35}, -{70,-21,36}, -{70,-21,37}, -{70,-21,38}, -{70,-21,39}, -{70,-21,40}, -{70,-21,41}, -{70,-21,42}, -{70,-21,43}, -{70,-21,44}, -{70,-21,45}, -{70,-21,46}, -{70,-21,47}, -{70,-21,48}, -{70,-21,49}, -{70,-21,50}, -{70,-21,51}, -{70,-21,52}, -{70,-21,53}, -{70,-21,54}, -{70,-21,55}, -{70,-21,56}, -{70,-21,57}, -{70,-21,58}, -{70,-21,59}, -{70,-21,60}, -{70,-21,61}, -{70,-21,62}, -{70,-21,63}, -{70,-21,64}, -{70,-21,65}, -{70,-21,66}, -{70,-21,67}, -{70,-21,68}, -{70,-21,69}, -{70,-21,70}, -{70,-21,71}, -{70,-20,-37}, -{70,-20,-36}, -{70,-20,-35}, -{70,-20,-34}, -{70,-20,-33}, -{70,-20,-32}, -{70,-20,-31}, -{70,-20,-30}, -{70,-20,-29}, -{70,-20,-28}, -{70,-20,-27}, -{70,-20,-26}, -{70,-20,-25}, -{70,-20,-24}, -{70,-20,-23}, -{70,-20,-22}, -{70,-20,-21}, -{70,-20,-20}, -{70,-20,-19}, -{70,-20,-18}, -{70,-20,-17}, -{70,-20,-16}, -{70,-20,-15}, -{70,-20,-14}, -{70,-20,-13}, -{70,-20,-12}, -{70,-20,-11}, -{70,-20,-10}, -{70,-20,-9}, -{70,-20,-8}, -{70,-20,-7}, -{70,-20,-6}, -{70,-20,-5}, -{70,-20,-4}, -{70,-20,-3}, -{70,-20,-2}, -{70,-20,-1}, -{70,-20,0}, -{70,-20,1}, -{70,-20,2}, -{70,-20,3}, -{70,-20,4}, -{70,-20,5}, -{70,-20,6}, -{70,-20,7}, -{70,-20,8}, -{70,-20,9}, -{70,-20,10}, -{70,-20,11}, -{70,-20,12}, -{70,-20,13}, -{70,-20,14}, -{70,-20,15}, -{70,-20,16}, -{70,-20,17}, -{70,-20,18}, -{70,-20,19}, -{70,-20,20}, -{70,-20,21}, -{70,-20,22}, -{70,-20,23}, -{70,-20,24}, -{70,-20,25}, -{70,-20,26}, -{70,-20,27}, -{70,-20,28}, -{70,-20,29}, -{70,-20,30}, -{70,-20,31}, -{70,-20,32}, -{70,-20,33}, -{70,-20,34}, -{70,-20,35}, -{70,-20,36}, -{70,-20,37}, -{70,-20,38}, -{70,-20,39}, -{70,-20,40}, -{70,-20,41}, -{70,-20,42}, -{70,-20,43}, -{70,-20,44}, -{70,-20,45}, -{70,-20,46}, -{70,-20,47}, -{70,-20,48}, -{70,-20,49}, -{70,-20,50}, -{70,-20,51}, -{70,-20,52}, -{70,-20,53}, -{70,-20,54}, -{70,-20,55}, -{70,-20,56}, -{70,-20,57}, -{70,-20,58}, -{70,-20,59}, -{70,-20,60}, -{70,-20,61}, -{70,-20,62}, -{70,-20,63}, -{70,-20,64}, -{70,-20,65}, -{70,-20,66}, -{70,-20,67}, -{70,-20,68}, -{70,-20,69}, -{70,-20,70}, -{70,-20,71}, -{70,-19,-39}, -{70,-19,-38}, -{70,-19,-37}, -{70,-19,-36}, -{70,-19,-35}, -{70,-19,-34}, -{70,-19,-33}, -{70,-19,-32}, -{70,-19,-31}, -{70,-19,-30}, -{70,-19,-29}, -{70,-19,-28}, -{70,-19,-27}, -{70,-19,-26}, -{70,-19,-25}, -{70,-19,-24}, -{70,-19,-23}, -{70,-19,-22}, -{70,-19,-21}, -{70,-19,-20}, -{70,-19,-19}, -{70,-19,-18}, -{70,-19,-17}, -{70,-19,-16}, -{70,-19,-15}, -{70,-19,-14}, -{70,-19,-13}, -{70,-19,-12}, -{70,-19,-11}, -{70,-19,-10}, -{70,-19,-9}, -{70,-19,-8}, -{70,-19,-7}, -{70,-19,-6}, -{70,-19,-5}, -{70,-19,-4}, -{70,-19,-3}, -{70,-19,-2}, -{70,-19,-1}, -{70,-19,0}, -{70,-19,1}, -{70,-19,2}, -{70,-19,3}, -{70,-19,4}, -{70,-19,5}, -{70,-19,6}, -{70,-19,7}, -{70,-19,8}, -{70,-19,9}, -{70,-19,10}, -{70,-19,11}, -{70,-19,12}, -{70,-19,13}, -{70,-19,14}, -{70,-19,15}, -{70,-19,16}, -{70,-19,17}, -{70,-19,18}, -{70,-19,19}, -{70,-19,20}, -{70,-19,21}, -{70,-19,22}, -{70,-19,23}, -{70,-19,24}, -{70,-19,25}, -{70,-19,26}, -{70,-19,27}, -{70,-19,28}, -{70,-19,29}, -{70,-19,30}, -{70,-19,31}, -{70,-19,32}, -{70,-19,33}, -{70,-19,34}, -{70,-19,35}, -{70,-19,36}, -{70,-19,37}, -{70,-19,38}, -{70,-19,39}, -{70,-19,40}, -{70,-19,41}, -{70,-19,42}, -{70,-19,43}, -{70,-19,44}, -{70,-19,45}, -{70,-19,46}, -{70,-19,47}, -{70,-19,48}, -{70,-19,49}, -{70,-19,50}, -{70,-19,51}, -{70,-19,52}, -{70,-19,53}, -{70,-19,54}, -{70,-19,55}, -{70,-19,56}, -{70,-19,57}, -{70,-19,58}, -{70,-19,59}, -{70,-19,60}, -{70,-19,61}, -{70,-19,62}, -{70,-19,63}, -{70,-19,64}, -{70,-19,65}, -{70,-19,66}, -{70,-19,67}, -{70,-19,68}, -{70,-19,69}, -{70,-19,70}, -{70,-19,71}, -{70,-18,-40}, -{70,-18,-39}, -{70,-18,-38}, -{70,-18,-37}, -{70,-18,-36}, -{70,-18,-35}, -{70,-18,-34}, -{70,-18,-33}, -{70,-18,-32}, -{70,-18,-31}, -{70,-18,-30}, -{70,-18,-29}, -{70,-18,-28}, -{70,-18,-27}, -{70,-18,-26}, -{70,-18,-25}, -{70,-18,-24}, -{70,-18,-23}, -{70,-18,-22}, -{70,-18,-21}, -{70,-18,-20}, -{70,-18,-19}, -{70,-18,-18}, -{70,-18,-17}, -{70,-18,-16}, -{70,-18,-15}, -{70,-18,-14}, -{70,-18,-13}, -{70,-18,-12}, -{70,-18,-11}, -{70,-18,-10}, -{70,-18,-9}, -{70,-18,-8}, -{70,-18,-7}, -{70,-18,-6}, -{70,-18,-5}, -{70,-18,-4}, -{70,-18,-3}, -{70,-18,-2}, -{70,-18,-1}, -{70,-18,0}, -{70,-18,1}, -{70,-18,2}, -{70,-18,3}, -{70,-18,4}, -{70,-18,5}, -{70,-18,6}, -{70,-18,7}, -{70,-18,8}, -{70,-18,9}, -{70,-18,10}, -{70,-18,11}, -{70,-18,12}, -{70,-18,13}, -{70,-18,14}, -{70,-18,15}, -{70,-18,16}, -{70,-18,17}, -{70,-18,18}, -{70,-18,19}, -{70,-18,20}, -{70,-18,21}, -{70,-18,22}, -{70,-18,23}, -{70,-18,24}, -{70,-18,25}, -{70,-18,26}, -{70,-18,27}, -{70,-18,28}, -{70,-18,29}, -{70,-18,30}, -{70,-18,31}, -{70,-18,32}, -{70,-18,33}, -{70,-18,34}, -{70,-18,35}, -{70,-18,36}, -{70,-18,37}, -{70,-18,38}, -{70,-18,39}, -{70,-18,40}, -{70,-18,41}, -{70,-18,42}, -{70,-18,43}, -{70,-18,44}, -{70,-18,45}, -{70,-18,46}, -{70,-18,47}, -{70,-18,48}, -{70,-18,49}, -{70,-18,50}, -{70,-18,51}, -{70,-18,52}, -{70,-18,53}, -{70,-18,54}, -{70,-18,55}, -{70,-18,56}, -{70,-18,57}, -{70,-18,58}, -{70,-18,59}, -{70,-18,60}, -{70,-18,61}, -{70,-18,62}, -{70,-18,63}, -{70,-18,64}, -{70,-18,65}, -{70,-18,66}, -{70,-18,67}, -{70,-18,68}, -{70,-18,69}, -{70,-18,70}, -{70,-18,71}, -{70,-17,-41}, -{70,-17,-40}, -{70,-17,-39}, -{70,-17,-38}, -{70,-17,-37}, -{70,-17,-36}, -{70,-17,-35}, -{70,-17,-34}, -{70,-17,-33}, -{70,-17,-32}, -{70,-17,-31}, -{70,-17,-30}, -{70,-17,-29}, -{70,-17,-28}, -{70,-17,-27}, -{70,-17,-26}, -{70,-17,-25}, -{70,-17,-24}, -{70,-17,-23}, -{70,-17,-22}, -{70,-17,-21}, -{70,-17,-20}, -{70,-17,-19}, -{70,-17,-18}, -{70,-17,-17}, -{70,-17,-16}, -{70,-17,-15}, -{70,-17,-14}, -{70,-17,-13}, -{70,-17,-12}, -{70,-17,-11}, -{70,-17,-10}, -{70,-17,-9}, -{70,-17,-8}, -{70,-17,-7}, -{70,-17,-6}, -{70,-17,-5}, -{70,-17,-4}, -{70,-17,-3}, -{70,-17,-2}, -{70,-17,-1}, -{70,-17,0}, -{70,-17,1}, -{70,-17,2}, -{70,-17,3}, -{70,-17,4}, -{70,-17,5}, -{70,-17,6}, -{70,-17,7}, -{70,-17,8}, -{70,-17,9}, -{70,-17,10}, -{70,-17,11}, -{70,-17,12}, -{70,-17,13}, -{70,-17,14}, -{70,-17,15}, -{70,-17,16}, -{70,-17,17}, -{70,-17,18}, -{70,-17,19}, -{70,-17,20}, -{70,-17,21}, -{70,-17,22}, -{70,-17,23}, -{70,-17,24}, -{70,-17,25}, -{70,-17,26}, -{70,-17,27}, -{70,-17,28}, -{70,-17,29}, -{70,-17,30}, -{70,-17,31}, -{70,-17,32}, -{70,-17,33}, -{70,-17,34}, -{70,-17,35}, -{70,-17,36}, -{70,-17,37}, -{70,-17,38}, -{70,-17,39}, -{70,-17,40}, -{70,-17,41}, -{70,-17,42}, -{70,-17,43}, -{70,-17,44}, -{70,-17,45}, -{70,-17,46}, -{70,-17,47}, -{70,-17,48}, -{70,-17,49}, -{70,-17,50}, -{70,-17,51}, -{70,-17,52}, -{70,-17,53}, -{70,-17,54}, -{70,-17,55}, -{70,-17,56}, -{70,-17,57}, -{70,-17,58}, -{70,-17,59}, -{70,-17,60}, -{70,-17,61}, -{70,-17,62}, -{70,-17,63}, -{70,-17,64}, -{70,-17,65}, -{70,-17,66}, -{70,-17,67}, -{70,-17,68}, -{70,-17,69}, -{70,-17,70}, -{70,-17,71}, -{70,-16,-42}, -{70,-16,-41}, -{70,-16,-40}, -{70,-16,-39}, -{70,-16,-38}, -{70,-16,-37}, -{70,-16,-36}, -{70,-16,-35}, -{70,-16,-34}, -{70,-16,-33}, -{70,-16,-32}, -{70,-16,-31}, -{70,-16,-30}, -{70,-16,-29}, -{70,-16,-28}, -{70,-16,-27}, -{70,-16,-26}, -{70,-16,-25}, -{70,-16,-24}, -{70,-16,-23}, -{70,-16,-22}, -{70,-16,-21}, -{70,-16,-20}, -{70,-16,-19}, -{70,-16,-18}, -{70,-16,-17}, -{70,-16,-16}, -{70,-16,-15}, -{70,-16,-14}, -{70,-16,-13}, -{70,-16,-12}, -{70,-16,-11}, -{70,-16,-10}, -{70,-16,-9}, -{70,-16,-8}, -{70,-16,-7}, -{70,-16,-6}, -{70,-16,-5}, -{70,-16,-4}, -{70,-16,-3}, -{70,-16,-2}, -{70,-16,-1}, -{70,-16,0}, -{70,-16,1}, -{70,-16,2}, -{70,-16,3}, -{70,-16,4}, -{70,-16,5}, -{70,-16,6}, -{70,-16,7}, -{70,-16,8}, -{70,-16,9}, -{70,-16,10}, -{70,-16,11}, -{70,-16,12}, -{70,-16,13}, -{70,-16,14}, -{70,-16,15}, -{70,-16,16}, -{70,-16,17}, -{70,-16,18}, -{70,-16,19}, -{70,-16,20}, -{70,-16,21}, -{70,-16,22}, -{70,-16,23}, -{70,-16,24}, -{70,-16,25}, -{70,-16,26}, -{70,-16,27}, -{70,-16,28}, -{70,-16,29}, -{70,-16,30}, -{70,-16,31}, -{70,-16,32}, -{70,-16,33}, -{70,-16,34}, -{70,-16,35}, -{70,-16,36}, -{70,-16,37}, -{70,-16,38}, -{70,-16,39}, -{70,-16,40}, -{70,-16,41}, -{70,-16,42}, -{70,-16,43}, -{70,-16,44}, -{70,-16,45}, -{70,-16,46}, -{70,-16,47}, -{70,-16,48}, -{70,-16,49}, -{70,-16,50}, -{70,-16,51}, -{70,-16,52}, -{70,-16,53}, -{70,-16,54}, -{70,-16,55}, -{70,-16,56}, -{70,-16,57}, -{70,-16,58}, -{70,-16,59}, -{70,-16,60}, -{70,-16,61}, -{70,-16,62}, -{70,-16,63}, -{70,-16,64}, -{70,-16,65}, -{70,-16,66}, -{70,-16,67}, -{70,-16,68}, -{70,-16,69}, -{70,-16,70}, -{70,-16,71}, -{70,-16,72}, -{70,-15,-44}, -{70,-15,-43}, -{70,-15,-42}, -{70,-15,-41}, -{70,-15,-40}, -{70,-15,-39}, -{70,-15,-38}, -{70,-15,-37}, -{70,-15,-36}, -{70,-15,-35}, -{70,-15,-34}, -{70,-15,-33}, -{70,-15,-32}, -{70,-15,-31}, -{70,-15,-30}, -{70,-15,-29}, -{70,-15,-28}, -{70,-15,-27}, -{70,-15,-26}, -{70,-15,-25}, -{70,-15,-24}, -{70,-15,-23}, -{70,-15,-22}, -{70,-15,-21}, -{70,-15,-20}, -{70,-15,-19}, -{70,-15,-18}, -{70,-15,-17}, -{70,-15,-16}, -{70,-15,-15}, -{70,-15,-14}, -{70,-15,-13}, -{70,-15,-12}, -{70,-15,-11}, -{70,-15,-10}, -{70,-15,-9}, -{70,-15,-8}, -{70,-15,-7}, -{70,-15,-6}, -{70,-15,-5}, -{70,-15,-4}, -{70,-15,-3}, -{70,-15,-2}, -{70,-15,-1}, -{70,-15,0}, -{70,-15,1}, -{70,-15,2}, -{70,-15,3}, -{70,-15,4}, -{70,-15,5}, -{70,-15,6}, -{70,-15,7}, -{70,-15,8}, -{70,-15,9}, -{70,-15,10}, -{70,-15,11}, -{70,-15,12}, -{70,-15,13}, -{70,-15,14}, -{70,-15,15}, -{70,-15,16}, -{70,-15,17}, -{70,-15,18}, -{70,-15,19}, -{70,-15,20}, -{70,-15,21}, -{70,-15,22}, -{70,-15,23}, -{70,-15,24}, -{70,-15,25}, -{70,-15,26}, -{70,-15,27}, -{70,-15,28}, -{70,-15,29}, -{70,-15,30}, -{70,-15,31}, -{70,-15,32}, -{70,-15,33}, -{70,-15,34}, -{70,-15,35}, -{70,-15,36}, -{70,-15,37}, -{70,-15,38}, -{70,-15,39}, -{70,-15,40}, -{70,-15,41}, -{70,-15,42}, -{70,-15,43}, -{70,-15,44}, -{70,-15,45}, -{70,-15,46}, -{70,-15,47}, -{70,-15,48}, -{70,-15,49}, -{70,-15,50}, -{70,-15,51}, -{70,-15,52}, -{70,-15,53}, -{70,-15,54}, -{70,-15,55}, -{70,-15,56}, -{70,-15,57}, -{70,-15,58}, -{70,-15,59}, -{70,-15,60}, -{70,-15,61}, -{70,-15,62}, -{70,-15,63}, -{70,-15,64}, -{70,-15,65}, -{70,-15,66}, -{70,-15,67}, -{70,-15,68}, -{70,-15,69}, -{70,-15,70}, -{70,-15,71}, -{70,-15,72}, -{70,-14,-45}, -{70,-14,-44}, -{70,-14,-43}, -{70,-14,-42}, -{70,-14,-41}, -{70,-14,-40}, -{70,-14,-39}, -{70,-14,-38}, -{70,-14,-37}, -{70,-14,-36}, -{70,-14,-35}, -{70,-14,-34}, -{70,-14,-33}, -{70,-14,-32}, -{70,-14,-31}, -{70,-14,-30}, -{70,-14,-29}, -{70,-14,-28}, -{70,-14,-27}, -{70,-14,-26}, -{70,-14,-25}, -{70,-14,-24}, -{70,-14,-23}, -{70,-14,-22}, -{70,-14,-21}, -{70,-14,-20}, -{70,-14,-19}, -{70,-14,-18}, -{70,-14,-17}, -{70,-14,-16}, -{70,-14,-15}, -{70,-14,-14}, -{70,-14,-13}, -{70,-14,-12}, -{70,-14,-11}, -{70,-14,-10}, -{70,-14,-9}, -{70,-14,-8}, -{70,-14,-7}, -{70,-14,-6}, -{70,-14,-5}, -{70,-14,-4}, -{70,-14,-3}, -{70,-14,-2}, -{70,-14,-1}, -{70,-14,0}, -{70,-14,1}, -{70,-14,2}, -{70,-14,3}, -{70,-14,4}, -{70,-14,5}, -{70,-14,6}, -{70,-14,7}, -{70,-14,8}, -{70,-14,9}, -{70,-14,10}, -{70,-14,11}, -{70,-14,12}, -{70,-14,13}, -{70,-14,14}, -{70,-14,15}, -{70,-14,16}, -{70,-14,17}, -{70,-14,18}, -{70,-14,19}, -{70,-14,20}, -{70,-14,21}, -{70,-14,22}, -{70,-14,23}, -{70,-14,24}, -{70,-14,25}, -{70,-14,26}, -{70,-14,27}, -{70,-14,28}, -{70,-14,29}, -{70,-14,30}, -{70,-14,31}, -{70,-14,32}, -{70,-14,33}, -{70,-14,34}, -{70,-14,35}, -{70,-14,36}, -{70,-14,37}, -{70,-14,38}, -{70,-14,39}, -{70,-14,40}, -{70,-14,41}, -{70,-14,42}, -{70,-14,43}, -{70,-14,44}, -{70,-14,45}, -{70,-14,46}, -{70,-14,47}, -{70,-14,48}, -{70,-14,49}, -{70,-14,50}, -{70,-14,51}, -{70,-14,52}, -{70,-14,53}, -{70,-14,54}, -{70,-14,55}, -{70,-14,56}, -{70,-14,57}, -{70,-14,58}, -{70,-14,59}, -{70,-14,60}, -{70,-14,61}, -{70,-14,62}, -{70,-14,63}, -{70,-14,64}, -{70,-14,65}, -{70,-14,66}, -{70,-14,67}, -{70,-14,68}, -{70,-14,69}, -{70,-14,70}, -{70,-14,71}, -{70,-14,72}, -{70,-13,-46}, -{70,-13,-45}, -{70,-13,-44}, -{70,-13,-43}, -{70,-13,-42}, -{70,-13,-41}, -{70,-13,-40}, -{70,-13,-39}, -{70,-13,-38}, -{70,-13,-37}, -{70,-13,-36}, -{70,-13,-35}, -{70,-13,-34}, -{70,-13,-33}, -{70,-13,-32}, -{70,-13,-31}, -{70,-13,-30}, -{70,-13,-29}, -{70,-13,-28}, -{70,-13,-27}, -{70,-13,-26}, -{70,-13,-25}, -{70,-13,-24}, -{70,-13,-23}, -{70,-13,-22}, -{70,-13,-21}, -{70,-13,-20}, -{70,-13,-19}, -{70,-13,-18}, -{70,-13,-17}, -{70,-13,-16}, -{70,-13,-15}, -{70,-13,-14}, -{70,-13,-13}, -{70,-13,-12}, -{70,-13,-11}, -{70,-13,-10}, -{70,-13,-9}, -{70,-13,-8}, -{70,-13,-7}, -{70,-13,-6}, -{70,-13,-5}, -{70,-13,-4}, -{70,-13,-3}, -{70,-13,-2}, -{70,-13,-1}, -{70,-13,0}, -{70,-13,1}, -{70,-13,2}, -{70,-13,3}, -{70,-13,4}, -{70,-13,5}, -{70,-13,6}, -{70,-13,7}, -{70,-13,8}, -{70,-13,9}, -{70,-13,10}, -{70,-13,11}, -{70,-13,12}, -{70,-13,13}, -{70,-13,14}, -{70,-13,15}, -{70,-13,16}, -{70,-13,17}, -{70,-13,18}, -{70,-13,19}, -{70,-13,20}, -{70,-13,21}, -{70,-13,22}, -{70,-13,23}, -{70,-13,24}, -{70,-13,25}, -{70,-13,26}, -{70,-13,27}, -{70,-13,28}, -{70,-13,29}, -{70,-13,30}, -{70,-13,31}, -{70,-13,32}, -{70,-13,33}, -{70,-13,34}, -{70,-13,35}, -{70,-13,36}, -{70,-13,37}, -{70,-13,38}, -{70,-13,39}, -{70,-13,40}, -{70,-13,41}, -{70,-13,42}, -{70,-13,43}, -{70,-13,44}, -{70,-13,45}, -{70,-13,46}, -{70,-13,47}, -{70,-13,48}, -{70,-13,49}, -{70,-13,50}, -{70,-13,51}, -{70,-13,52}, -{70,-13,53}, -{70,-13,54}, -{70,-13,55}, -{70,-13,56}, -{70,-13,57}, -{70,-13,58}, -{70,-13,59}, -{70,-13,60}, -{70,-13,61}, -{70,-13,62}, -{70,-13,63}, -{70,-13,64}, -{70,-13,65}, -{70,-13,66}, -{70,-13,67}, -{70,-13,68}, -{70,-13,69}, -{70,-13,70}, -{70,-13,71}, -{70,-13,72}, -{70,-12,-46}, -{70,-12,-45}, -{70,-12,-44}, -{70,-12,-43}, -{70,-12,-42}, -{70,-12,-41}, -{70,-12,-40}, -{70,-12,-39}, -{70,-12,-38}, -{70,-12,-37}, -{70,-12,-36}, -{70,-12,-35}, -{70,-12,-34}, -{70,-12,-33}, -{70,-12,-32}, -{70,-12,-31}, -{70,-12,-30}, -{70,-12,-29}, -{70,-12,-28}, -{70,-12,-27}, -{70,-12,-26}, -{70,-12,-25}, -{70,-12,-24}, -{70,-12,-23}, -{70,-12,-22}, -{70,-12,-21}, -{70,-12,-20}, -{70,-12,-19}, -{70,-12,-18}, -{70,-12,-17}, -{70,-12,-16}, -{70,-12,-15}, -{70,-12,-14}, -{70,-12,-13}, -{70,-12,-12}, -{70,-12,-11}, -{70,-12,-10}, -{70,-12,-9}, -{70,-12,-8}, -{70,-12,-7}, -{70,-12,-6}, -{70,-12,-5}, -{70,-12,-4}, -{70,-12,-3}, -{70,-12,-2}, -{70,-12,-1}, -{70,-12,0}, -{70,-12,1}, -{70,-12,2}, -{70,-12,3}, -{70,-12,4}, -{70,-12,5}, -{70,-12,6}, -{70,-12,7}, -{70,-12,8}, -{70,-12,9}, -{70,-12,10}, -{70,-12,11}, -{70,-12,12}, -{70,-12,13}, -{70,-12,14}, -{70,-12,15}, -{70,-12,16}, -{70,-12,17}, -{70,-12,18}, -{70,-12,19}, -{70,-12,20}, -{70,-12,21}, -{70,-12,22}, -{70,-12,23}, -{70,-12,24}, -{70,-12,25}, -{70,-12,26}, -{70,-12,27}, -{70,-12,28}, -{70,-12,29}, -{70,-12,30}, -{70,-12,31}, -{70,-12,32}, -{70,-12,33}, -{70,-12,34}, -{70,-12,35}, -{70,-12,36}, -{70,-12,37}, -{70,-12,38}, -{70,-12,39}, -{70,-12,40}, -{70,-12,41}, -{70,-12,42}, -{70,-12,43}, -{70,-12,44}, -{70,-12,45}, -{70,-12,46}, -{70,-12,47}, -{70,-12,48}, -{70,-12,49}, -{70,-12,50}, -{70,-12,51}, -{70,-12,52}, -{70,-12,53}, -{70,-12,54}, -{70,-12,55}, -{70,-12,56}, -{70,-12,57}, -{70,-12,58}, -{70,-12,59}, -{70,-12,60}, -{70,-12,61}, -{70,-12,62}, -{70,-12,63}, -{70,-12,64}, -{70,-12,65}, -{70,-12,66}, -{70,-12,67}, -{70,-12,68}, -{70,-12,69}, -{70,-12,70}, -{70,-12,71}, -{70,-12,72}, -{70,-11,-46}, -{70,-11,-45}, -{70,-11,-44}, -{70,-11,-43}, -{70,-11,-42}, -{70,-11,-41}, -{70,-11,-40}, -{70,-11,-39}, -{70,-11,-38}, -{70,-11,-37}, -{70,-11,-36}, -{70,-11,-35}, -{70,-11,-34}, -{70,-11,-33}, -{70,-11,-32}, -{70,-11,-31}, -{70,-11,-30}, -{70,-11,-29}, -{70,-11,-28}, -{70,-11,-27}, -{70,-11,-26}, -{70,-11,-25}, -{70,-11,-24}, -{70,-11,-23}, -{70,-11,-22}, -{70,-11,-21}, -{70,-11,-20}, -{70,-11,-19}, -{70,-11,-18}, -{70,-11,-17}, -{70,-11,-16}, -{70,-11,-15}, -{70,-11,-14}, -{70,-11,-13}, -{70,-11,-12}, -{70,-11,-11}, -{70,-11,-10}, -{70,-11,-9}, -{70,-11,-8}, -{70,-11,-7}, -{70,-11,-6}, -{70,-11,-5}, -{70,-11,-4}, -{70,-11,-3}, -{70,-11,-2}, -{70,-11,-1}, -{70,-11,0}, -{70,-11,1}, -{70,-11,2}, -{70,-11,3}, -{70,-11,4}, -{70,-11,5}, -{70,-11,6}, -{70,-11,7}, -{70,-11,8}, -{70,-11,9}, -{70,-11,10}, -{70,-11,11}, -{70,-11,12}, -{70,-11,13}, -{70,-11,14}, -{70,-11,15}, -{70,-11,16}, -{70,-11,17}, -{70,-11,18}, -{70,-11,19}, -{70,-11,20}, -{70,-11,21}, -{70,-11,22}, -{70,-11,23}, -{70,-11,24}, -{70,-11,25}, -{70,-11,26}, -{70,-11,27}, -{70,-11,28}, -{70,-11,29}, -{70,-11,30}, -{70,-11,31}, -{70,-11,32}, -{70,-11,33}, -{70,-11,34}, -{70,-11,35}, -{70,-11,36}, -{70,-11,37}, -{70,-11,38}, -{70,-11,39}, -{70,-11,40}, -{70,-11,41}, -{70,-11,42}, -{70,-11,43}, -{70,-11,44}, -{70,-11,45}, -{70,-11,46}, -{70,-11,47}, -{70,-11,48}, -{70,-11,49}, -{70,-11,50}, -{70,-11,51}, -{70,-11,52}, -{70,-11,53}, -{70,-11,54}, -{70,-11,55}, -{70,-11,56}, -{70,-11,57}, -{70,-11,58}, -{70,-11,59}, -{70,-11,60}, -{70,-11,61}, -{70,-11,62}, -{70,-11,63}, -{70,-11,64}, -{70,-11,65}, -{70,-11,66}, -{70,-11,67}, -{70,-11,68}, -{70,-11,69}, -{70,-11,70}, -{70,-11,71}, -{70,-11,72}, -{70,-10,-46}, -{70,-10,-45}, -{70,-10,-44}, -{70,-10,-43}, -{70,-10,-42}, -{70,-10,-41}, -{70,-10,-40}, -{70,-10,-39}, -{70,-10,-38}, -{70,-10,-37}, -{70,-10,-36}, -{70,-10,-35}, -{70,-10,-34}, -{70,-10,-33}, -{70,-10,-32}, -{70,-10,-31}, -{70,-10,-30}, -{70,-10,-29}, -{70,-10,-28}, -{70,-10,-27}, -{70,-10,-26}, -{70,-10,-25}, -{70,-10,-24}, -{70,-10,-23}, -{70,-10,-22}, -{70,-10,-21}, -{70,-10,-20}, -{70,-10,-19}, -{70,-10,-18}, -{70,-10,-17}, -{70,-10,-16}, -{70,-10,-15}, -{70,-10,-14}, -{70,-10,-13}, -{70,-10,-12}, -{70,-10,-11}, -{70,-10,-10}, -{70,-10,-9}, -{70,-10,-8}, -{70,-10,-7}, -{70,-10,-6}, -{70,-10,-5}, -{70,-10,-4}, -{70,-10,-3}, -{70,-10,-2}, -{70,-10,-1}, -{70,-10,0}, -{70,-10,1}, -{70,-10,2}, -{70,-10,3}, -{70,-10,4}, -{70,-10,5}, -{70,-10,6}, -{70,-10,7}, -{70,-10,8}, -{70,-10,9}, -{70,-10,10}, -{70,-10,11}, -{70,-10,12}, -{70,-10,13}, -{70,-10,14}, -{70,-10,15}, -{70,-10,16}, -{70,-10,17}, -{70,-10,18}, -{70,-10,19}, -{70,-10,20}, -{70,-10,21}, -{70,-10,22}, -{70,-10,23}, -{70,-10,24}, -{70,-10,25}, -{70,-10,26}, -{70,-10,27}, -{70,-10,28}, -{70,-10,29}, -{70,-10,30}, -{70,-10,31}, -{70,-10,32}, -{70,-10,33}, -{70,-10,34}, -{70,-10,35}, -{70,-10,36}, -{70,-10,37}, -{70,-10,38}, -{70,-10,39}, -{70,-10,40}, -{70,-10,41}, -{70,-10,42}, -{70,-10,43}, -{70,-10,44}, -{70,-10,45}, -{70,-10,46}, -{70,-10,47}, -{70,-10,48}, -{70,-10,49}, -{70,-10,50}, -{70,-10,51}, -{70,-10,52}, -{70,-10,53}, -{70,-10,54}, -{70,-10,55}, -{70,-10,56}, -{70,-10,57}, -{70,-10,58}, -{70,-10,59}, -{70,-10,60}, -{70,-10,61}, -{70,-10,62}, -{70,-10,63}, -{70,-10,64}, -{70,-10,65}, -{70,-10,66}, -{70,-10,67}, -{70,-10,68}, -{70,-10,69}, -{70,-10,70}, -{70,-10,71}, -{70,-10,72}, -{70,-9,-46}, -{70,-9,-45}, -{70,-9,-44}, -{70,-9,-43}, -{70,-9,-42}, -{70,-9,-41}, -{70,-9,-40}, -{70,-9,-39}, -{70,-9,-38}, -{70,-9,-37}, -{70,-9,-36}, -{70,-9,-35}, -{70,-9,-34}, -{70,-9,-33}, -{70,-9,-32}, -{70,-9,-31}, -{70,-9,-30}, -{70,-9,-29}, -{70,-9,-28}, -{70,-9,-27}, -{70,-9,-26}, -{70,-9,-25}, -{70,-9,-24}, -{70,-9,-23}, -{70,-9,-22}, -{70,-9,-21}, -{70,-9,-20}, -{70,-9,-19}, -{70,-9,-18}, -{70,-9,-17}, -{70,-9,-16}, -{70,-9,-15}, -{70,-9,-14}, -{70,-9,-13}, -{70,-9,-12}, -{70,-9,-11}, -{70,-9,-10}, -{70,-9,-9}, -{70,-9,-8}, -{70,-9,-7}, -{70,-9,-6}, -{70,-9,-5}, -{70,-9,-4}, -{70,-9,-3}, -{70,-9,-2}, -{70,-9,-1}, -{70,-9,0}, -{70,-9,1}, -{70,-9,2}, -{70,-9,3}, -{70,-9,4}, -{70,-9,5}, -{70,-9,6}, -{70,-9,7}, -{70,-9,8}, -{70,-9,9}, -{70,-9,10}, -{70,-9,11}, -{70,-9,12}, -{70,-9,13}, -{70,-9,14}, -{70,-9,15}, -{70,-9,16}, -{70,-9,17}, -{70,-9,18}, -{70,-9,19}, -{70,-9,20}, -{70,-9,21}, -{70,-9,22}, -{70,-9,23}, -{70,-9,24}, -{70,-9,25}, -{70,-9,26}, -{70,-9,27}, -{70,-9,28}, -{70,-9,29}, -{70,-9,30}, -{70,-9,31}, -{70,-9,32}, -{70,-9,33}, -{70,-9,34}, -{70,-9,35}, -{70,-9,36}, -{70,-9,37}, -{70,-9,38}, -{70,-9,39}, -{70,-9,40}, -{70,-9,41}, -{70,-9,42}, -{70,-9,43}, -{70,-9,44}, -{70,-9,45}, -{70,-9,46}, -{70,-9,47}, -{70,-9,48}, -{70,-9,49}, -{70,-9,50}, -{70,-9,51}, -{70,-9,52}, -{70,-9,53}, -{70,-9,54}, -{70,-9,55}, -{70,-9,56}, -{70,-9,57}, -{70,-9,58}, -{70,-9,59}, -{70,-9,60}, -{70,-9,61}, -{70,-9,62}, -{70,-9,63}, -{70,-9,64}, -{70,-9,65}, -{70,-9,66}, -{70,-9,67}, -{70,-9,68}, -{70,-9,69}, -{70,-9,70}, -{70,-9,71}, -{70,-9,72}, -{70,-8,-46}, -{70,-8,-45}, -{70,-8,-44}, -{70,-8,-43}, -{70,-8,-42}, -{70,-8,-41}, -{70,-8,-40}, -{70,-8,-39}, -{70,-8,-38}, -{70,-8,-37}, -{70,-8,-36}, -{70,-8,-35}, -{70,-8,-34}, -{70,-8,-33}, -{70,-8,-32}, -{70,-8,-31}, -{70,-8,-30}, -{70,-8,-29}, -{70,-8,-28}, -{70,-8,-27}, -{70,-8,-26}, -{70,-8,-25}, -{70,-8,-24}, -{70,-8,-23}, -{70,-8,-22}, -{70,-8,-21}, -{70,-8,-20}, -{70,-8,-19}, -{70,-8,-18}, -{70,-8,-17}, -{70,-8,-16}, -{70,-8,-15}, -{70,-8,-14}, -{70,-8,-13}, -{70,-8,-12}, -{70,-8,-11}, -{70,-8,-10}, -{70,-8,-9}, -{70,-8,-8}, -{70,-8,-7}, -{70,-8,-6}, -{70,-8,-5}, -{70,-8,-4}, -{70,-8,-3}, -{70,-8,-2}, -{70,-8,-1}, -{70,-8,0}, -{70,-8,1}, -{70,-8,2}, -{70,-8,3}, -{70,-8,4}, -{70,-8,5}, -{70,-8,6}, -{70,-8,7}, -{70,-8,8}, -{70,-8,9}, -{70,-8,10}, -{70,-8,11}, -{70,-8,12}, -{70,-8,13}, -{70,-8,14}, -{70,-8,15}, -{70,-8,16}, -{70,-8,17}, -{70,-8,18}, -{70,-8,19}, -{70,-8,20}, -{70,-8,21}, -{70,-8,22}, -{70,-8,23}, -{70,-8,24}, -{70,-8,25}, -{70,-8,26}, -{70,-8,27}, -{70,-8,28}, -{70,-8,29}, -{70,-8,30}, -{70,-8,31}, -{70,-8,32}, -{70,-8,33}, -{70,-8,34}, -{70,-8,35}, -{70,-8,36}, -{70,-8,37}, -{70,-8,38}, -{70,-8,39}, -{70,-8,40}, -{70,-8,41}, -{70,-8,42}, -{70,-8,43}, -{70,-8,44}, -{70,-8,45}, -{70,-8,46}, -{70,-8,47}, -{70,-8,48}, -{70,-8,49}, -{70,-8,50}, -{70,-8,51}, -{70,-8,52}, -{70,-8,53}, -{70,-8,54}, -{70,-8,55}, -{70,-8,56}, -{70,-8,57}, -{70,-8,58}, -{70,-8,59}, -{70,-8,60}, -{70,-8,61}, -{70,-8,62}, -{70,-8,63}, -{70,-8,64}, -{70,-8,65}, -{70,-8,66}, -{70,-8,67}, -{70,-8,68}, -{70,-8,69}, -{70,-8,70}, -{70,-8,71}, -{70,-8,72}, -{70,-7,-46}, -{70,-7,-45}, -{70,-7,-44}, -{70,-7,-43}, -{70,-7,-42}, -{70,-7,-41}, -{70,-7,-40}, -{70,-7,-39}, -{70,-7,-38}, -{70,-7,-37}, -{70,-7,-36}, -{70,-7,-35}, -{70,-7,-34}, -{70,-7,-33}, -{70,-7,-32}, -{70,-7,-31}, -{70,-7,-30}, -{70,-7,-29}, -{70,-7,-28}, -{70,-7,-27}, -{70,-7,-26}, -{70,-7,-25}, -{70,-7,-24}, -{70,-7,-23}, -{70,-7,-22}, -{70,-7,-21}, -{70,-7,-20}, -{70,-7,-19}, -{70,-7,-18}, -{70,-7,-17}, -{70,-7,-16}, -{70,-7,-15}, -{70,-7,-14}, -{70,-7,-13}, -{70,-7,-12}, -{70,-7,-11}, -{70,-7,-10}, -{70,-7,-9}, -{70,-7,-8}, -{70,-7,-7}, -{70,-7,-6}, -{70,-7,-5}, -{70,-7,-4}, -{70,-7,-3}, -{70,-7,-2}, -{70,-7,-1}, -{70,-7,0}, -{70,-7,1}, -{70,-7,2}, -{70,-7,3}, -{70,-7,4}, -{70,-7,5}, -{70,-7,6}, -{70,-7,7}, -{70,-7,8}, -{70,-7,9}, -{70,-7,10}, -{70,-7,11}, -{70,-7,12}, -{70,-7,13}, -{70,-7,14}, -{70,-7,15}, -{70,-7,16}, -{70,-7,17}, -{70,-7,18}, -{70,-7,19}, -{70,-7,20}, -{70,-7,21}, -{70,-7,22}, -{70,-7,23}, -{70,-7,24}, -{70,-7,25}, -{70,-7,26}, -{70,-7,27}, -{70,-7,28}, -{70,-7,29}, -{70,-7,30}, -{70,-7,31}, -{70,-7,32}, -{70,-7,33}, -{70,-7,34}, -{70,-7,35}, -{70,-7,36}, -{70,-7,37}, -{70,-7,38}, -{70,-7,39}, -{70,-7,40}, -{70,-7,41}, -{70,-7,42}, -{70,-7,43}, -{70,-7,44}, -{70,-7,45}, -{70,-7,46}, -{70,-7,47}, -{70,-7,48}, -{70,-7,49}, -{70,-7,50}, -{70,-7,51}, -{70,-7,52}, -{70,-7,53}, -{70,-7,54}, -{70,-7,55}, -{70,-7,56}, -{70,-7,57}, -{70,-7,58}, -{70,-7,59}, -{70,-7,60}, -{70,-7,61}, -{70,-7,62}, -{70,-7,63}, -{70,-7,64}, -{70,-7,65}, -{70,-7,66}, -{70,-7,67}, -{70,-7,68}, -{70,-7,69}, -{70,-7,70}, -{70,-7,71}, -{70,-7,72}, -{70,-6,-46}, -{70,-6,-45}, -{70,-6,-44}, -{70,-6,-43}, -{70,-6,-42}, -{70,-6,-41}, -{70,-6,-40}, -{70,-6,-39}, -{70,-6,-38}, -{70,-6,-37}, -{70,-6,-36}, -{70,-6,-35}, -{70,-6,-34}, -{70,-6,-33}, -{70,-6,-32}, -{70,-6,-31}, -{70,-6,-30}, -{70,-6,-29}, -{70,-6,-28}, -{70,-6,-27}, -{70,-6,-26}, -{70,-6,-25}, -{70,-6,-24}, -{70,-6,-23}, -{70,-6,-22}, -{70,-6,-21}, -{70,-6,-20}, -{70,-6,-19}, -{70,-6,-18}, -{70,-6,-17}, -{70,-6,-16}, -{70,-6,-15}, -{70,-6,-14}, -{70,-6,-13}, -{70,-6,-12}, -{70,-6,-11}, -{70,-6,-10}, -{70,-6,-9}, -{70,-6,-8}, -{70,-6,-7}, -{70,-6,-6}, -{70,-6,-5}, -{70,-6,-4}, -{70,-6,-3}, -{70,-6,-2}, -{70,-6,-1}, -{70,-6,0}, -{70,-6,1}, -{70,-6,2}, -{70,-6,3}, -{70,-6,4}, -{70,-6,5}, -{70,-6,6}, -{70,-6,7}, -{70,-6,8}, -{70,-6,9}, -{70,-6,10}, -{70,-6,11}, -{70,-6,12}, -{70,-6,13}, -{70,-6,14}, -{70,-6,15}, -{70,-6,16}, -{70,-6,17}, -{70,-6,18}, -{70,-6,19}, -{70,-6,20}, -{70,-6,21}, -{70,-6,22}, -{70,-6,23}, -{70,-6,24}, -{70,-6,25}, -{70,-6,26}, -{70,-6,27}, -{70,-6,28}, -{70,-6,29}, -{70,-6,30}, -{70,-6,31}, -{70,-6,32}, -{70,-6,33}, -{70,-6,34}, -{70,-6,35}, -{70,-6,36}, -{70,-6,37}, -{70,-6,38}, -{70,-6,39}, -{70,-6,40}, -{70,-6,41}, -{70,-6,42}, -{70,-6,43}, -{70,-6,44}, -{70,-6,45}, -{70,-6,46}, -{70,-6,47}, -{70,-6,48}, -{70,-6,49}, -{70,-6,50}, -{70,-6,51}, -{70,-6,52}, -{70,-6,53}, -{70,-6,54}, -{70,-6,55}, -{70,-6,56}, -{70,-6,57}, -{70,-6,58}, -{70,-6,59}, -{70,-6,60}, -{70,-6,61}, -{70,-6,62}, -{70,-6,63}, -{70,-6,64}, -{70,-6,65}, -{70,-6,66}, -{70,-6,67}, -{70,-6,68}, -{70,-6,69}, -{70,-6,70}, -{70,-6,71}, -{70,-6,72}, -{70,-5,-46}, -{70,-5,-45}, -{70,-5,-44}, -{70,-5,-43}, -{70,-5,-42}, -{70,-5,-41}, -{70,-5,-40}, -{70,-5,-39}, -{70,-5,-38}, -{70,-5,-37}, -{70,-5,-36}, -{70,-5,-35}, -{70,-5,-34}, -{70,-5,-33}, -{70,-5,-32}, -{70,-5,-31}, -{70,-5,-30}, -{70,-5,-29}, -{70,-5,-28}, -{70,-5,-27}, -{70,-5,-26}, -{70,-5,-25}, -{70,-5,-24}, -{70,-5,-23}, -{70,-5,-22}, -{70,-5,-21}, -{70,-5,-20}, -{70,-5,-19}, -{70,-5,-18}, -{70,-5,-17}, -{70,-5,-16}, -{70,-5,-15}, -{70,-5,-14}, -{70,-5,-13}, -{70,-5,-12}, -{70,-5,-11}, -{70,-5,-10}, -{70,-5,-9}, -{70,-5,-8}, -{70,-5,-7}, -{70,-5,-6}, -{70,-5,-5}, -{70,-5,-4}, -{70,-5,-3}, -{70,-5,-2}, -{70,-5,-1}, -{70,-5,0}, -{70,-5,1}, -{70,-5,2}, -{70,-5,3}, -{70,-5,4}, -{70,-5,5}, -{70,-5,6}, -{70,-5,7}, -{70,-5,8}, -{70,-5,9}, -{70,-5,10}, -{70,-5,11}, -{70,-5,12}, -{70,-5,13}, -{70,-5,14}, -{70,-5,15}, -{70,-5,16}, -{70,-5,17}, -{70,-5,18}, -{70,-5,19}, -{70,-5,20}, -{70,-5,21}, -{70,-5,22}, -{70,-5,23}, -{70,-5,24}, -{70,-5,25}, -{70,-5,26}, -{70,-5,27}, -{70,-5,28}, -{70,-5,29}, -{70,-5,30}, -{70,-5,31}, -{70,-5,32}, -{70,-5,33}, -{70,-5,34}, -{70,-5,35}, -{70,-5,36}, -{70,-5,37}, -{70,-5,38}, -{70,-5,39}, -{70,-5,40}, -{70,-5,41}, -{70,-5,42}, -{70,-5,43}, -{70,-5,44}, -{70,-5,45}, -{70,-5,46}, -{70,-5,47}, -{70,-5,48}, -{70,-5,49}, -{70,-5,50}, -{70,-5,51}, -{70,-5,52}, -{70,-5,53}, -{70,-5,54}, -{70,-5,55}, -{70,-5,56}, -{70,-5,57}, -{70,-5,58}, -{70,-5,59}, -{70,-5,60}, -{70,-5,61}, -{70,-5,62}, -{70,-5,63}, -{70,-5,64}, -{70,-5,65}, -{70,-5,66}, -{70,-5,67}, -{70,-5,68}, -{70,-5,69}, -{70,-5,70}, -{70,-5,71}, -{70,-5,72}, -{70,-4,-46}, -{70,-4,-45}, -{70,-4,-44}, -{70,-4,-43}, -{70,-4,-42}, -{70,-4,-41}, -{70,-4,-40}, -{70,-4,-39}, -{70,-4,-38}, -{70,-4,-37}, -{70,-4,-36}, -{70,-4,-35}, -{70,-4,-34}, -{70,-4,-33}, -{70,-4,-32}, -{70,-4,-31}, -{70,-4,-30}, -{70,-4,-29}, -{70,-4,-28}, -{70,-4,-27}, -{70,-4,-26}, -{70,-4,-25}, -{70,-4,-24}, -{70,-4,-23}, -{70,-4,-22}, -{70,-4,-21}, -{70,-4,-20}, -{70,-4,-19}, -{70,-4,-18}, -{70,-4,-17}, -{70,-4,-16}, -{70,-4,-15}, -{70,-4,-14}, -{70,-4,-13}, -{70,-4,-12}, -{70,-4,-11}, -{70,-4,-10}, -{70,-4,-9}, -{70,-4,-8}, -{70,-4,-7}, -{70,-4,-6}, -{70,-4,-5}, -{70,-4,-4}, -{70,-4,-3}, -{70,-4,-2}, -{70,-4,-1}, -{70,-4,0}, -{70,-4,1}, -{70,-4,2}, -{70,-4,3}, -{70,-4,4}, -{70,-4,5}, -{70,-4,6}, -{70,-4,7}, -{70,-4,8}, -{70,-4,9}, -{70,-4,10}, -{70,-4,11}, -{70,-4,12}, -{70,-4,13}, -{70,-4,14}, -{70,-4,15}, -{70,-4,16}, -{70,-4,17}, -{70,-4,18}, -{70,-4,19}, -{70,-4,20}, -{70,-4,21}, -{70,-4,22}, -{70,-4,23}, -{70,-4,24}, -{70,-4,25}, -{70,-4,26}, -{70,-4,27}, -{70,-4,28}, -{70,-4,29}, -{70,-4,30}, -{70,-4,31}, -{70,-4,32}, -{70,-4,33}, -{70,-4,34}, -{70,-4,35}, -{70,-4,36}, -{70,-4,37}, -{70,-4,38}, -{70,-4,39}, -{70,-4,40}, -{70,-4,41}, -{70,-4,42}, -{70,-4,43}, -{70,-4,44}, -{70,-4,45}, -{70,-4,46}, -{70,-4,47}, -{70,-4,48}, -{70,-4,49}, -{70,-4,50}, -{70,-4,51}, -{70,-4,52}, -{70,-4,53}, -{70,-4,54}, -{70,-4,55}, -{70,-4,56}, -{70,-4,57}, -{70,-4,58}, -{70,-4,59}, -{70,-4,60}, -{70,-4,61}, -{70,-4,62}, -{70,-4,63}, -{70,-4,64}, -{70,-4,65}, -{70,-4,66}, -{70,-4,67}, -{70,-4,68}, -{70,-4,69}, -{70,-4,70}, -{70,-4,71}, -{70,-4,72}, -{70,-3,-46}, -{70,-3,-45}, -{70,-3,-44}, -{70,-3,-43}, -{70,-3,-42}, -{70,-3,-41}, -{70,-3,-40}, -{70,-3,-39}, -{70,-3,-38}, -{70,-3,-37}, -{70,-3,-36}, -{70,-3,-35}, -{70,-3,-34}, -{70,-3,-33}, -{70,-3,-32}, -{70,-3,-31}, -{70,-3,-30}, -{70,-3,-29}, -{70,-3,-28}, -{70,-3,-27}, -{70,-3,-26}, -{70,-3,-25}, -{70,-3,-24}, -{70,-3,-23}, -{70,-3,-22}, -{70,-3,-21}, -{70,-3,-20}, -{70,-3,-19}, -{70,-3,-18}, -{70,-3,-17}, -{70,-3,-16}, -{70,-3,-15}, -{70,-3,-14}, -{70,-3,-13}, -{70,-3,-12}, -{70,-3,-11}, -{70,-3,-10}, -{70,-3,-9}, -{70,-3,-8}, -{70,-3,-7}, -{70,-3,-6}, -{70,-3,-5}, -{70,-3,-4}, -{70,-3,-3}, -{70,-3,-2}, -{70,-3,-1}, -{70,-3,0}, -{70,-3,1}, -{70,-3,2}, -{70,-3,3}, -{70,-3,4}, -{70,-3,5}, -{70,-3,6}, -{70,-3,7}, -{70,-3,8}, -{70,-3,9}, -{70,-3,10}, -{70,-3,11}, -{70,-3,12}, -{70,-3,13}, -{70,-3,14}, -{70,-3,15}, -{70,-3,16}, -{70,-3,17}, -{70,-3,18}, -{70,-3,19}, -{70,-3,20}, -{70,-3,21}, -{70,-3,22}, -{70,-3,23}, -{70,-3,24}, -{70,-3,25}, -{70,-3,26}, -{70,-3,27}, -{70,-3,28}, -{70,-3,29}, -{70,-3,30}, -{70,-3,31}, -{70,-3,32}, -{70,-3,33}, -{70,-3,34}, -{70,-3,35}, -{70,-3,36}, -{70,-3,37}, -{70,-3,38}, -{70,-3,39}, -{70,-3,40}, -{70,-3,41}, -{70,-3,42}, -{70,-3,43}, -{70,-3,44}, -{70,-3,45}, -{70,-3,46}, -{70,-3,47}, -{70,-3,48}, -{70,-3,49}, -{70,-3,50}, -{70,-3,51}, -{70,-3,52}, -{70,-3,53}, -{70,-3,54}, -{70,-3,55}, -{70,-3,56}, -{70,-3,57}, -{70,-3,58}, -{70,-3,59}, -{70,-3,60}, -{70,-3,61}, -{70,-3,62}, -{70,-3,63}, -{70,-3,64}, -{70,-3,65}, -{70,-3,66}, -{70,-3,67}, -{70,-3,68}, -{70,-3,69}, -{70,-3,70}, -{70,-3,71}, -{70,-3,72}, -{70,-2,-46}, -{70,-2,-45}, -{70,-2,-44}, -{70,-2,-43}, -{70,-2,-42}, -{70,-2,-41}, -{70,-2,-40}, -{70,-2,-39}, -{70,-2,-38}, -{70,-2,-37}, -{70,-2,-36}, -{70,-2,-35}, -{70,-2,-34}, -{70,-2,-33}, -{70,-2,-32}, -{70,-2,-31}, -{70,-2,-30}, -{70,-2,-29}, -{70,-2,-28}, -{70,-2,-27}, -{70,-2,-26}, -{70,-2,-25}, -{70,-2,-24}, -{70,-2,-23}, -{70,-2,-22}, -{70,-2,-21}, -{70,-2,-20}, -{70,-2,-19}, -{70,-2,-18}, -{70,-2,-17}, -{70,-2,-16}, -{70,-2,-15}, -{70,-2,-14}, -{70,-2,-13}, -{70,-2,-12}, -{70,-2,-11}, -{70,-2,-10}, -{70,-2,-9}, -{70,-2,-8}, -{70,-2,-7}, -{70,-2,-6}, -{70,-2,-5}, -{70,-2,-4}, -{70,-2,-3}, -{70,-2,-2}, -{70,-2,-1}, -{70,-2,0}, -{70,-2,1}, -{70,-2,2}, -{70,-2,3}, -{70,-2,4}, -{70,-2,5}, -{70,-2,6}, -{70,-2,7}, -{70,-2,8}, -{70,-2,9}, -{70,-2,10}, -{70,-2,11}, -{70,-2,12}, -{70,-2,13}, -{70,-2,14}, -{70,-2,15}, -{70,-2,16}, -{70,-2,17}, -{70,-2,18}, -{70,-2,19}, -{70,-2,20}, -{70,-2,21}, -{70,-2,22}, -{70,-2,23}, -{70,-2,24}, -{70,-2,25}, -{70,-2,26}, -{70,-2,27}, -{70,-2,28}, -{70,-2,29}, -{70,-2,30}, -{70,-2,31}, -{70,-2,32}, -{70,-2,33}, -{70,-2,34}, -{70,-2,35}, -{70,-2,36}, -{70,-2,37}, -{70,-2,38}, -{70,-2,39}, -{70,-2,40}, -{70,-2,41}, -{70,-2,42}, -{70,-2,43}, -{70,-2,44}, -{70,-2,45}, -{70,-2,46}, -{70,-2,47}, -{70,-2,48}, -{70,-2,49}, -{70,-2,50}, -{70,-2,51}, -{70,-2,52}, -{70,-2,53}, -{70,-2,54}, -{70,-2,55}, -{70,-2,56}, -{70,-2,57}, -{70,-2,58}, -{70,-2,59}, -{70,-2,60}, -{70,-2,61}, -{70,-2,62}, -{70,-2,63}, -{70,-2,64}, -{70,-2,65}, -{70,-2,66}, -{70,-2,67}, -{70,-2,68}, -{70,-2,69}, -{70,-2,70}, -{70,-2,71}, -{70,-2,72}, -{70,-1,-46}, -{70,-1,-45}, -{70,-1,-44}, -{70,-1,-43}, -{70,-1,-42}, -{70,-1,-41}, -{70,-1,-40}, -{70,-1,-39}, -{70,-1,-38}, -{70,-1,-37}, -{70,-1,-36}, -{70,-1,-35}, -{70,-1,-34}, -{70,-1,-33}, -{70,-1,-32}, -{70,-1,-31}, -{70,-1,-30}, -{70,-1,-29}, -{70,-1,-28}, -{70,-1,-27}, -{70,-1,-26}, -{70,-1,-25}, -{70,-1,-24}, -{70,-1,-23}, -{70,-1,-22}, -{70,-1,-21}, -{70,-1,-20}, -{70,-1,-19}, -{70,-1,-18}, -{70,-1,-17}, -{70,-1,-16}, -{70,-1,-15}, -{70,-1,-14}, -{70,-1,-13}, -{70,-1,-12}, -{70,-1,-11}, -{70,-1,-10}, -{70,-1,-9}, -{70,-1,-8}, -{70,-1,-7}, -{70,-1,-6}, -{70,-1,-5}, -{70,-1,-4}, -{70,-1,-3}, -{70,-1,-2}, -{70,-1,-1}, -{70,-1,0}, -{70,-1,1}, -{70,-1,2}, -{70,-1,3}, -{70,-1,4}, -{70,-1,5}, -{70,-1,6}, -{70,-1,7}, -{70,-1,8}, -{70,-1,9}, -{70,-1,10}, -{70,-1,11}, -{70,-1,12}, -{70,-1,13}, -{70,-1,14}, -{70,-1,15}, -{70,-1,16}, -{70,-1,17}, -{70,-1,18}, -{70,-1,19}, -{70,-1,20}, -{70,-1,21}, -{70,-1,22}, -{70,-1,23}, -{70,-1,24}, -{70,-1,25}, -{70,-1,26}, -{70,-1,27}, -{70,-1,28}, -{70,-1,29}, -{70,-1,30}, -{70,-1,31}, -{70,-1,32}, -{70,-1,33}, -{70,-1,34}, -{70,-1,35}, -{70,-1,36}, -{70,-1,37}, -{70,-1,38}, -{70,-1,39}, -{70,-1,40}, -{70,-1,41}, -{70,-1,42}, -{70,-1,43}, -{70,-1,44}, -{70,-1,45}, -{70,-1,46}, -{70,-1,47}, -{70,-1,48}, -{70,-1,49}, -{70,-1,50}, -{70,-1,51}, -{70,-1,52}, -{70,-1,53}, -{70,-1,54}, -{70,-1,55}, -{70,-1,56}, -{70,-1,57}, -{70,-1,58}, -{70,-1,59}, -{70,-1,60}, -{70,-1,61}, -{70,-1,62}, -{70,-1,63}, -{70,-1,64}, -{70,-1,65}, -{70,-1,66}, -{70,-1,67}, -{70,-1,68}, -{70,-1,69}, -{70,-1,70}, -{70,-1,71}, -{70,-1,72}, -{70,-1,73}, -{70,0,-46}, -{70,0,-45}, -{70,0,-44}, -{70,0,-43}, -{70,0,-42}, -{70,0,-41}, -{70,0,-40}, -{70,0,-39}, -{70,0,-38}, -{70,0,-37}, -{70,0,-36}, -{70,0,-35}, -{70,0,-34}, -{70,0,-33}, -{70,0,-32}, -{70,0,-31}, -{70,0,-30}, -{70,0,-29}, -{70,0,-28}, -{70,0,-27}, -{70,0,-26}, -{70,0,-25}, -{70,0,-24}, -{70,0,-23}, -{70,0,-22}, -{70,0,-21}, -{70,0,-20}, -{70,0,-19}, -{70,0,-18}, -{70,0,-17}, -{70,0,-16}, -{70,0,-15}, -{70,0,-14}, -{70,0,-13}, -{70,0,-12}, -{70,0,-11}, -{70,0,-10}, -{70,0,-9}, -{70,0,-8}, -{70,0,-7}, -{70,0,-6}, -{70,0,-5}, -{70,0,-4}, -{70,0,-3}, -{70,0,-2}, -{70,0,-1}, -{70,0,0}, -{70,0,1}, -{70,0,2}, -{70,0,3}, -{70,0,4}, -{70,0,5}, -{70,0,6}, -{70,0,7}, -{70,0,8}, -{70,0,9}, -{70,0,10}, -{70,0,11}, -{70,0,12}, -{70,0,13}, -{70,0,14}, -{70,0,15}, -{70,0,16}, -{70,0,17}, -{70,0,18}, -{70,0,19}, -{70,0,20}, -{70,0,21}, -{70,0,22}, -{70,0,23}, -{70,0,24}, -{70,0,25}, -{70,0,26}, -{70,0,27}, -{70,0,28}, -{70,0,29}, -{70,0,30}, -{70,0,31}, -{70,0,32}, -{70,0,33}, -{70,0,34}, -{70,0,35}, -{70,0,36}, -{70,0,37}, -{70,0,38}, -{70,0,39}, -{70,0,40}, -{70,0,41}, -{70,0,42}, -{70,0,43}, -{70,0,44}, -{70,0,45}, -{70,0,46}, -{70,0,47}, -{70,0,48}, -{70,0,49}, -{70,0,50}, -{70,0,51}, -{70,0,52}, -{70,0,53}, -{70,0,54}, -{70,0,55}, -{70,0,56}, -{70,0,57}, -{70,0,58}, -{70,0,59}, -{70,0,60}, -{70,0,61}, -{70,0,62}, -{70,0,63}, -{70,0,64}, -{70,0,65}, -{70,0,66}, -{70,0,67}, -{70,0,68}, -{70,0,69}, -{70,0,70}, -{70,0,71}, -{70,0,72}, -{70,0,73}, -{70,1,-46}, -{70,1,-45}, -{70,1,-44}, -{70,1,-43}, -{70,1,-42}, -{70,1,-41}, -{70,1,-40}, -{70,1,-39}, -{70,1,-38}, -{70,1,-37}, -{70,1,-36}, -{70,1,-35}, -{70,1,-34}, -{70,1,-33}, -{70,1,-32}, -{70,1,-31}, -{70,1,-30}, -{70,1,-29}, -{70,1,-28}, -{70,1,-27}, -{70,1,-26}, -{70,1,-25}, -{70,1,-24}, -{70,1,-23}, -{70,1,-22}, -{70,1,-21}, -{70,1,-20}, -{70,1,-19}, -{70,1,-18}, -{70,1,-17}, -{70,1,-16}, -{70,1,-15}, -{70,1,-14}, -{70,1,-13}, -{70,1,-12}, -{70,1,-11}, -{70,1,-10}, -{70,1,-9}, -{70,1,-8}, -{70,1,-7}, -{70,1,-6}, -{70,1,-5}, -{70,1,-4}, -{70,1,-3}, -{70,1,-2}, -{70,1,-1}, -{70,1,0}, -{70,1,1}, -{70,1,2}, -{70,1,3}, -{70,1,4}, -{70,1,5}, -{70,1,6}, -{70,1,7}, -{70,1,8}, -{70,1,9}, -{70,1,10}, -{70,1,11}, -{70,1,12}, -{70,1,13}, -{70,1,14}, -{70,1,15}, -{70,1,16}, -{70,1,17}, -{70,1,18}, -{70,1,19}, -{70,1,20}, -{70,1,21}, -{70,1,22}, -{70,1,23}, -{70,1,24}, -{70,1,25}, -{70,1,26}, -{70,1,27}, -{70,1,28}, -{70,1,29}, -{70,1,30}, -{70,1,31}, -{70,1,32}, -{70,1,33}, -{70,1,34}, -{70,1,35}, -{70,1,36}, -{70,1,37}, -{70,1,38}, -{70,1,39}, -{70,1,40}, -{70,1,41}, -{70,1,42}, -{70,1,43}, -{70,1,44}, -{70,1,45}, -{70,1,46}, -{70,1,47}, -{70,1,48}, -{70,1,49}, -{70,1,50}, -{70,1,51}, -{70,1,52}, -{70,1,53}, -{70,1,54}, -{70,1,55}, -{70,1,56}, -{70,1,57}, -{70,1,58}, -{70,1,59}, -{70,1,60}, -{70,1,61}, -{70,1,62}, -{70,1,63}, -{70,1,64}, -{70,1,65}, -{70,1,66}, -{70,1,67}, -{70,1,68}, -{70,1,69}, -{70,1,70}, -{70,1,71}, -{70,1,72}, -{70,1,73}, -{70,2,-46}, -{70,2,-45}, -{70,2,-44}, -{70,2,-43}, -{70,2,-42}, -{70,2,-41}, -{70,2,-40}, -{70,2,-39}, -{70,2,-38}, -{70,2,-37}, -{70,2,-36}, -{70,2,-35}, -{70,2,-34}, -{70,2,-33}, -{70,2,-32}, -{70,2,-31}, -{70,2,-30}, -{70,2,-29}, -{70,2,-28}, -{70,2,-27}, -{70,2,-26}, -{70,2,-25}, -{70,2,-24}, -{70,2,-23}, -{70,2,-22}, -{70,2,-21}, -{70,2,-20}, -{70,2,-19}, -{70,2,-18}, -{70,2,-17}, -{70,2,-16}, -{70,2,-15}, -{70,2,-14}, -{70,2,-13}, -{70,2,-12}, -{70,2,-11}, -{70,2,-10}, -{70,2,-9}, -{70,2,-8}, -{70,2,-7}, -{70,2,-6}, -{70,2,-5}, -{70,2,-4}, -{70,2,-3}, -{70,2,-2}, -{70,2,-1}, -{70,2,0}, -{70,2,1}, -{70,2,2}, -{70,2,3}, -{70,2,4}, -{70,2,5}, -{70,2,6}, -{70,2,7}, -{70,2,8}, -{70,2,9}, -{70,2,10}, -{70,2,11}, -{70,2,12}, -{70,2,13}, -{70,2,14}, -{70,2,15}, -{70,2,16}, -{70,2,17}, -{70,2,18}, -{70,2,19}, -{70,2,20}, -{70,2,21}, -{70,2,22}, -{70,2,23}, -{70,2,24}, -{70,2,25}, -{70,2,26}, -{70,2,27}, -{70,2,28}, -{70,2,29}, -{70,2,30}, -{70,2,31}, -{70,2,32}, -{70,2,33}, -{70,2,34}, -{70,2,35}, -{70,2,36}, -{70,2,37}, -{70,2,38}, -{70,2,39}, -{70,2,40}, -{70,2,41}, -{70,2,42}, -{70,2,43}, -{70,2,44}, -{70,2,45}, -{70,2,46}, -{70,2,47}, -{70,2,48}, -{70,2,49}, -{70,2,50}, -{70,2,51}, -{70,2,52}, -{70,2,53}, -{70,2,54}, -{70,2,55}, -{70,2,56}, -{70,2,57}, -{70,2,58}, -{70,2,59}, -{70,2,60}, -{70,2,61}, -{70,2,62}, -{70,2,63}, -{70,2,64}, -{70,2,65}, -{70,2,66}, -{70,2,67}, -{70,2,68}, -{70,2,69}, -{70,2,70}, -{70,2,71}, -{70,2,72}, -{70,2,73}, -{70,3,-46}, -{70,3,-45}, -{70,3,-44}, -{70,3,-43}, -{70,3,-42}, -{70,3,-41}, -{70,3,-40}, -{70,3,-39}, -{70,3,-38}, -{70,3,-37}, -{70,3,-36}, -{70,3,-35}, -{70,3,-34}, -{70,3,-33}, -{70,3,-32}, -{70,3,-31}, -{70,3,-30}, -{70,3,-29}, -{70,3,-28}, -{70,3,-27}, -{70,3,-26}, -{70,3,-25}, -{70,3,-24}, -{70,3,-23}, -{70,3,-22}, -{70,3,-21}, -{70,3,-20}, -{70,3,-19}, -{70,3,-18}, -{70,3,-17}, -{70,3,-16}, -{70,3,-15}, -{70,3,-14}, -{70,3,-13}, -{70,3,-12}, -{70,3,-11}, -{70,3,-10}, -{70,3,-9}, -{70,3,-8}, -{70,3,-7}, -{70,3,-6}, -{70,3,-5}, -{70,3,-4}, -{70,3,-3}, -{70,3,-2}, -{70,3,-1}, -{70,3,0}, -{70,3,1}, -{70,3,2}, -{70,3,3}, -{70,3,4}, -{70,3,5}, -{70,3,6}, -{70,3,7}, -{70,3,8}, -{70,3,9}, -{70,3,10}, -{70,3,11}, -{70,3,12}, -{70,3,13}, -{70,3,14}, -{70,3,15}, -{70,3,16}, -{70,3,17}, -{70,3,18}, -{70,3,19}, -{70,3,20}, -{70,3,21}, -{70,3,22}, -{70,3,23}, -{70,3,24}, -{70,3,25}, -{70,3,26}, -{70,3,27}, -{70,3,28}, -{70,3,29}, -{70,3,30}, -{70,3,31}, -{70,3,32}, -{70,3,33}, -{70,3,34}, -{70,3,35}, -{70,3,36}, -{70,3,37}, -{70,3,38}, -{70,3,39}, -{70,3,40}, -{70,3,41}, -{70,3,42}, -{70,3,43}, -{70,3,44}, -{70,3,45}, -{70,3,46}, -{70,3,47}, -{70,3,48}, -{70,3,49}, -{70,3,50}, -{70,3,51}, -{70,3,52}, -{70,3,53}, -{70,3,54}, -{70,3,55}, -{70,3,56}, -{70,3,57}, -{70,3,58}, -{70,3,59}, -{70,3,60}, -{70,3,61}, -{70,3,62}, -{70,3,63}, -{70,3,64}, -{70,3,65}, -{70,3,66}, -{70,3,67}, -{70,3,68}, -{70,3,69}, -{70,3,70}, -{70,3,71}, -{70,3,72}, -{70,3,73}, -{70,4,-46}, -{70,4,-45}, -{70,4,-44}, -{70,4,-43}, -{70,4,-42}, -{70,4,-41}, -{70,4,-40}, -{70,4,-39}, -{70,4,-38}, -{70,4,-37}, -{70,4,-36}, -{70,4,-35}, -{70,4,-34}, -{70,4,-33}, -{70,4,-32}, -{70,4,-31}, -{70,4,-30}, -{70,4,-29}, -{70,4,-28}, -{70,4,-27}, -{70,4,-26}, -{70,4,-25}, -{70,4,-24}, -{70,4,-23}, -{70,4,-22}, -{70,4,-21}, -{70,4,-20}, -{70,4,-19}, -{70,4,-18}, -{70,4,-17}, -{70,4,-16}, -{70,4,-15}, -{70,4,-14}, -{70,4,-13}, -{70,4,-12}, -{70,4,-11}, -{70,4,-10}, -{70,4,-9}, -{70,4,-8}, -{70,4,-7}, -{70,4,-6}, -{70,4,-5}, -{70,4,-4}, -{70,4,-3}, -{70,4,-2}, -{70,4,-1}, -{70,4,0}, -{70,4,1}, -{70,4,2}, -{70,4,3}, -{70,4,4}, -{70,4,5}, -{70,4,6}, -{70,4,7}, -{70,4,8}, -{70,4,9}, -{70,4,10}, -{70,4,11}, -{70,4,12}, -{70,4,13}, -{70,4,14}, -{70,4,15}, -{70,4,16}, -{70,4,17}, -{70,4,18}, -{70,4,19}, -{70,4,20}, -{70,4,21}, -{70,4,22}, -{70,4,23}, -{70,4,24}, -{70,4,25}, -{70,4,26}, -{70,4,27}, -{70,4,28}, -{70,4,29}, -{70,4,30}, -{70,4,31}, -{70,4,32}, -{70,4,33}, -{70,4,34}, -{70,4,35}, -{70,4,36}, -{70,4,37}, -{70,4,38}, -{70,4,39}, -{70,4,40}, -{70,4,41}, -{70,4,42}, -{70,4,43}, -{70,4,44}, -{70,4,45}, -{70,4,46}, -{70,4,47}, -{70,4,48}, -{70,4,49}, -{70,4,50}, -{70,4,51}, -{70,4,52}, -{70,4,53}, -{70,4,54}, -{70,4,55}, -{70,4,56}, -{70,4,57}, -{70,4,58}, -{70,4,59}, -{70,4,60}, -{70,4,61}, -{70,4,62}, -{70,4,63}, -{70,4,64}, -{70,4,65}, -{70,4,66}, -{70,4,67}, -{70,4,68}, -{70,4,69}, -{70,4,70}, -{70,4,71}, -{70,4,72}, -{70,4,73}, -{70,5,-46}, -{70,5,-45}, -{70,5,-44}, -{70,5,-43}, -{70,5,-42}, -{70,5,-41}, -{70,5,-40}, -{70,5,-39}, -{70,5,-38}, -{70,5,-37}, -{70,5,-36}, -{70,5,-35}, -{70,5,-34}, -{70,5,-33}, -{70,5,-32}, -{70,5,-31}, -{70,5,-30}, -{70,5,-29}, -{70,5,-28}, -{70,5,-27}, -{70,5,-26}, -{70,5,-25}, -{70,5,-24}, -{70,5,-23}, -{70,5,-22}, -{70,5,-21}, -{70,5,-20}, -{70,5,-19}, -{70,5,-18}, -{70,5,-17}, -{70,5,-16}, -{70,5,-15}, -{70,5,-14}, -{70,5,-13}, -{70,5,-12}, -{70,5,-11}, -{70,5,-10}, -{70,5,-9}, -{70,5,-8}, -{70,5,-7}, -{70,5,-6}, -{70,5,-5}, -{70,5,-4}, -{70,5,-3}, -{70,5,-2}, -{70,5,-1}, -{70,5,0}, -{70,5,1}, -{70,5,2}, -{70,5,3}, -{70,5,4}, -{70,5,5}, -{70,5,6}, -{70,5,7}, -{70,5,8}, -{70,5,9}, -{70,5,10}, -{70,5,11}, -{70,5,12}, -{70,5,13}, -{70,5,14}, -{70,5,15}, -{70,5,16}, -{70,5,17}, -{70,5,18}, -{70,5,19}, -{70,5,20}, -{70,5,21}, -{70,5,22}, -{70,5,23}, -{70,5,24}, -{70,5,25}, -{70,5,26}, -{70,5,27}, -{70,5,28}, -{70,5,29}, -{70,5,30}, -{70,5,31}, -{70,5,32}, -{70,5,33}, -{70,5,34}, -{70,5,35}, -{70,5,36}, -{70,5,37}, -{70,5,38}, -{70,5,39}, -{70,5,40}, -{70,5,41}, -{70,5,42}, -{70,5,43}, -{70,5,44}, -{70,5,45}, -{70,5,46}, -{70,5,47}, -{70,5,48}, -{70,5,49}, -{70,5,50}, -{70,5,51}, -{70,5,52}, -{70,5,53}, -{70,5,54}, -{70,5,55}, -{70,5,56}, -{70,5,57}, -{70,5,58}, -{70,5,59}, -{70,5,60}, -{70,5,61}, -{70,5,62}, -{70,5,63}, -{70,5,64}, -{70,5,65}, -{70,5,66}, -{70,5,67}, -{70,5,68}, -{70,5,69}, -{70,5,70}, -{70,5,71}, -{70,5,72}, -{70,5,73}, -{70,6,-46}, -{70,6,-45}, -{70,6,-44}, -{70,6,-43}, -{70,6,-42}, -{70,6,-41}, -{70,6,-40}, -{70,6,-39}, -{70,6,-38}, -{70,6,-37}, -{70,6,-36}, -{70,6,-35}, -{70,6,-34}, -{70,6,-33}, -{70,6,-32}, -{70,6,-31}, -{70,6,-30}, -{70,6,-29}, -{70,6,-28}, -{70,6,-27}, -{70,6,-26}, -{70,6,-25}, -{70,6,-24}, -{70,6,-23}, -{70,6,-22}, -{70,6,-21}, -{70,6,-20}, -{70,6,-19}, -{70,6,-18}, -{70,6,-17}, -{70,6,-16}, -{70,6,-15}, -{70,6,-14}, -{70,6,-13}, -{70,6,-12}, -{70,6,-11}, -{70,6,-10}, -{70,6,-9}, -{70,6,-8}, -{70,6,-7}, -{70,6,-6}, -{70,6,-5}, -{70,6,-4}, -{70,6,-3}, -{70,6,-2}, -{70,6,-1}, -{70,6,0}, -{70,6,1}, -{70,6,2}, -{70,6,3}, -{70,6,4}, -{70,6,5}, -{70,6,6}, -{70,6,7}, -{70,6,8}, -{70,6,9}, -{70,6,10}, -{70,6,11}, -{70,6,12}, -{70,6,13}, -{70,6,14}, -{70,6,15}, -{70,6,16}, -{70,6,17}, -{70,6,18}, -{70,6,19}, -{70,6,20}, -{70,6,21}, -{70,6,22}, -{70,6,23}, -{70,6,24}, -{70,6,25}, -{70,6,26}, -{70,6,27}, -{70,6,28}, -{70,6,29}, -{70,6,30}, -{70,6,31}, -{70,6,32}, -{70,6,33}, -{70,6,34}, -{70,6,35}, -{70,6,36}, -{70,6,37}, -{70,6,38}, -{70,6,39}, -{70,6,40}, -{70,6,41}, -{70,6,42}, -{70,6,43}, -{70,6,44}, -{70,6,45}, -{70,6,46}, -{70,6,47}, -{70,6,48}, -{70,6,49}, -{70,6,50}, -{70,6,51}, -{70,6,52}, -{70,6,53}, -{70,6,54}, -{70,6,55}, -{70,6,56}, -{70,6,57}, -{70,6,58}, -{70,6,59}, -{70,6,60}, -{70,6,61}, -{70,6,62}, -{70,6,63}, -{70,6,64}, -{70,6,65}, -{70,6,66}, -{70,6,67}, -{70,6,68}, -{70,6,69}, -{70,6,70}, -{70,6,71}, -{70,6,72}, -{70,6,73}, -{70,7,-46}, -{70,7,-45}, -{70,7,-44}, -{70,7,-43}, -{70,7,-42}, -{70,7,-41}, -{70,7,-40}, -{70,7,-39}, -{70,7,-38}, -{70,7,-37}, -{70,7,-36}, -{70,7,-35}, -{70,7,-34}, -{70,7,-33}, -{70,7,-32}, -{70,7,-31}, -{70,7,-30}, -{70,7,-29}, -{70,7,-28}, -{70,7,-27}, -{70,7,-26}, -{70,7,-25}, -{70,7,-24}, -{70,7,-23}, -{70,7,-22}, -{70,7,-21}, -{70,7,-20}, -{70,7,-19}, -{70,7,-18}, -{70,7,-17}, -{70,7,-16}, -{70,7,-15}, -{70,7,-14}, -{70,7,-13}, -{70,7,-12}, -{70,7,-11}, -{70,7,-10}, -{70,7,-9}, -{70,7,-8}, -{70,7,-7}, -{70,7,-6}, -{70,7,-5}, -{70,7,-4}, -{70,7,-3}, -{70,7,-2}, -{70,7,-1}, -{70,7,0}, -{70,7,1}, -{70,7,2}, -{70,7,3}, -{70,7,4}, -{70,7,5}, -{70,7,6}, -{70,7,7}, -{70,7,8}, -{70,7,9}, -{70,7,10}, -{70,7,11}, -{70,7,12}, -{70,7,13}, -{70,7,14}, -{70,7,15}, -{70,7,16}, -{70,7,17}, -{70,7,18}, -{70,7,19}, -{70,7,20}, -{70,7,21}, -{70,7,22}, -{70,7,23}, -{70,7,24}, -{70,7,25}, -{70,7,26}, -{70,7,27}, -{70,7,28}, -{70,7,29}, -{70,7,30}, -{70,7,31}, -{70,7,32}, -{70,7,33}, -{70,7,34}, -{70,7,35}, -{70,7,36}, -{70,7,37}, -{70,7,38}, -{70,7,39}, -{70,7,40}, -{70,7,41}, -{70,7,42}, -{70,7,43}, -{70,7,44}, -{70,7,45}, -{70,7,46}, -{70,7,47}, -{70,7,48}, -{70,7,49}, -{70,7,50}, -{70,7,51}, -{70,7,52}, -{70,7,53}, -{70,7,54}, -{70,7,55}, -{70,7,56}, -{70,7,57}, -{70,7,58}, -{70,7,59}, -{70,7,60}, -{70,7,61}, -{70,7,62}, -{70,7,63}, -{70,7,64}, -{70,7,65}, -{70,7,66}, -{70,7,67}, -{70,7,68}, -{70,7,69}, -{70,7,70}, -{70,7,71}, -{70,7,72}, -{70,7,73}, -{70,8,-46}, -{70,8,-45}, -{70,8,-44}, -{70,8,-43}, -{70,8,-42}, -{70,8,-41}, -{70,8,-40}, -{70,8,-39}, -{70,8,-38}, -{70,8,-37}, -{70,8,-36}, -{70,8,-35}, -{70,8,-34}, -{70,8,-33}, -{70,8,-32}, -{70,8,-31}, -{70,8,-30}, -{70,8,-29}, -{70,8,-28}, -{70,8,-27}, -{70,8,-26}, -{70,8,-25}, -{70,8,-24}, -{70,8,-23}, -{70,8,-22}, -{70,8,-21}, -{70,8,-20}, -{70,8,-19}, -{70,8,-18}, -{70,8,-17}, -{70,8,-16}, -{70,8,-15}, -{70,8,-14}, -{70,8,-13}, -{70,8,-12}, -{70,8,-11}, -{70,8,-10}, -{70,8,-9}, -{70,8,-8}, -{70,8,-7}, -{70,8,-6}, -{70,8,-5}, -{70,8,-4}, -{70,8,-3}, -{70,8,-2}, -{70,8,-1}, -{70,8,0}, -{70,8,1}, -{70,8,2}, -{70,8,3}, -{70,8,4}, -{70,8,5}, -{70,8,6}, -{70,8,7}, -{70,8,8}, -{70,8,9}, -{70,8,10}, -{70,8,11}, -{70,8,12}, -{70,8,13}, -{70,8,14}, -{70,8,15}, -{70,8,16}, -{70,8,17}, -{70,8,18}, -{70,8,19}, -{70,8,20}, -{70,8,21}, -{70,8,22}, -{70,8,23}, -{70,8,24}, -{70,8,25}, -{70,8,26}, -{70,8,27}, -{70,8,28}, -{70,8,29}, -{70,8,30}, -{70,8,31}, -{70,8,32}, -{70,8,33}, -{70,8,34}, -{70,8,35}, -{70,8,36}, -{70,8,37}, -{70,8,38}, -{70,8,39}, -{70,8,40}, -{70,8,41}, -{70,8,42}, -{70,8,43}, -{70,8,44}, -{70,8,45}, -{70,8,46}, -{70,8,47}, -{70,8,48}, -{70,8,49}, -{70,8,50}, -{70,8,51}, -{70,8,52}, -{70,8,53}, -{70,8,54}, -{70,8,55}, -{70,8,56}, -{70,8,57}, -{70,8,58}, -{70,8,59}, -{70,8,60}, -{70,8,61}, -{70,8,62}, -{70,8,63}, -{70,8,64}, -{70,8,65}, -{70,8,66}, -{70,8,67}, -{70,8,68}, -{70,8,69}, -{70,8,70}, -{70,8,71}, -{70,8,72}, -{70,8,73}, -{70,9,-46}, -{70,9,-45}, -{70,9,-44}, -{70,9,-43}, -{70,9,-42}, -{70,9,-41}, -{70,9,-40}, -{70,9,-39}, -{70,9,-38}, -{70,9,-37}, -{70,9,-36}, -{70,9,-35}, -{70,9,-34}, -{70,9,-33}, -{70,9,-32}, -{70,9,-31}, -{70,9,-30}, -{70,9,-29}, -{70,9,-28}, -{70,9,-27}, -{70,9,-26}, -{70,9,-25}, -{70,9,-24}, -{70,9,-23}, -{70,9,-22}, -{70,9,-21}, -{70,9,-20}, -{70,9,-19}, -{70,9,-18}, -{70,9,-17}, -{70,9,-16}, -{70,9,-15}, -{70,9,-14}, -{70,9,-13}, -{70,9,-12}, -{70,9,-11}, -{70,9,-10}, -{70,9,-9}, -{70,9,-8}, -{70,9,-7}, -{70,9,-6}, -{70,9,-5}, -{70,9,-4}, -{70,9,-3}, -{70,9,-2}, -{70,9,-1}, -{70,9,0}, -{70,9,1}, -{70,9,2}, -{70,9,3}, -{70,9,4}, -{70,9,5}, -{70,9,6}, -{70,9,7}, -{70,9,8}, -{70,9,9}, -{70,9,10}, -{70,9,11}, -{70,9,12}, -{70,9,13}, -{70,9,14}, -{70,9,15}, -{70,9,16}, -{70,9,17}, -{70,9,18}, -{70,9,19}, -{70,9,20}, -{70,9,21}, -{70,9,22}, -{70,9,23}, -{70,9,24}, -{70,9,25}, -{70,9,26}, -{70,9,27}, -{70,9,28}, -{70,9,29}, -{70,9,30}, -{70,9,31}, -{70,9,32}, -{70,9,33}, -{70,9,34}, -{70,9,35}, -{70,9,36}, -{70,9,37}, -{70,9,38}, -{70,9,39}, -{70,9,40}, -{70,9,41}, -{70,9,42}, -{70,9,43}, -{70,9,44}, -{70,9,45}, -{70,9,46}, -{70,9,47}, -{70,9,48}, -{70,9,49}, -{70,9,50}, -{70,9,51}, -{70,9,52}, -{70,9,53}, -{70,9,54}, -{70,9,55}, -{70,9,56}, -{70,9,57}, -{70,9,58}, -{70,9,59}, -{70,9,60}, -{70,9,61}, -{70,9,62}, -{70,9,63}, -{70,9,64}, -{70,9,65}, -{70,9,66}, -{70,9,67}, -{70,9,68}, -{70,9,69}, -{70,9,70}, -{70,9,71}, -{70,9,72}, -{70,9,73}, -{70,10,-46}, -{70,10,-45}, -{70,10,-44}, -{70,10,-43}, -{70,10,-42}, -{70,10,-41}, -{70,10,-40}, -{70,10,-39}, -{70,10,-38}, -{70,10,-37}, -{70,10,-36}, -{70,10,-35}, -{70,10,-34}, -{70,10,-33}, -{70,10,-32}, -{70,10,-31}, -{70,10,-30}, -{70,10,-29}, -{70,10,-28}, -{70,10,-27}, -{70,10,-26}, -{70,10,-25}, -{70,10,-24}, -{70,10,-23}, -{70,10,-22}, -{70,10,-21}, -{70,10,-20}, -{70,10,-19}, -{70,10,-18}, -{70,10,-17}, -{70,10,-16}, -{70,10,-15}, -{70,10,-14}, -{70,10,-13}, -{70,10,-12}, -{70,10,-11}, -{70,10,-10}, -{70,10,-9}, -{70,10,-8}, -{70,10,-7}, -{70,10,-6}, -{70,10,-5}, -{70,10,-4}, -{70,10,-3}, -{70,10,-2}, -{70,10,-1}, -{70,10,0}, -{70,10,1}, -{70,10,2}, -{70,10,3}, -{70,10,4}, -{70,10,5}, -{70,10,6}, -{70,10,7}, -{70,10,8}, -{70,10,9}, -{70,10,10}, -{70,10,11}, -{70,10,12}, -{70,10,13}, -{70,10,14}, -{70,10,15}, -{70,10,16}, -{70,10,17}, -{70,10,18}, -{70,10,19}, -{70,10,20}, -{70,10,21}, -{70,10,22}, -{70,10,23}, -{70,10,24}, -{70,10,25}, -{70,10,26}, -{70,10,27}, -{70,10,28}, -{70,10,29}, -{70,10,30}, -{70,10,31}, -{70,10,32}, -{70,10,33}, -{70,10,34}, -{70,10,35}, -{70,10,36}, -{70,10,37}, -{70,10,38}, -{70,10,39}, -{70,10,40}, -{70,10,41}, -{70,10,42}, -{70,10,43}, -{70,10,44}, -{70,10,45}, -{70,10,46}, -{70,10,47}, -{70,10,48}, -{70,10,49}, -{70,10,50}, -{70,10,51}, -{70,10,52}, -{70,10,53}, -{70,10,54}, -{70,10,55}, -{70,10,56}, -{70,10,57}, -{70,10,58}, -{70,10,59}, -{70,10,60}, -{70,10,61}, -{70,10,62}, -{70,10,63}, -{70,10,64}, -{70,10,65}, -{70,10,66}, -{70,10,67}, -{70,10,68}, -{70,10,69}, -{70,10,70}, -{70,10,71}, -{70,10,72}, -{70,10,73}, -{70,11,-46}, -{70,11,-45}, -{70,11,-44}, -{70,11,-43}, -{70,11,-42}, -{70,11,-41}, -{70,11,-40}, -{70,11,-39}, -{70,11,-38}, -{70,11,-37}, -{70,11,-36}, -{70,11,-35}, -{70,11,-34}, -{70,11,-33}, -{70,11,-32}, -{70,11,-31}, -{70,11,-30}, -{70,11,-29}, -{70,11,-28}, -{70,11,-27}, -{70,11,-26}, -{70,11,-25}, -{70,11,-24}, -{70,11,-23}, -{70,11,-22}, -{70,11,-21}, -{70,11,-20}, -{70,11,-19}, -{70,11,-18}, -{70,11,-17}, -{70,11,-16}, -{70,11,-15}, -{70,11,-14}, -{70,11,-13}, -{70,11,-12}, -{70,11,-11}, -{70,11,-10}, -{70,11,-9}, -{70,11,-8}, -{70,11,-7}, -{70,11,-6}, -{70,11,-5}, -{70,11,-4}, -{70,11,-3}, -{70,11,-2}, -{70,11,-1}, -{70,11,0}, -{70,11,1}, -{70,11,2}, -{70,11,3}, -{70,11,4}, -{70,11,5}, -{70,11,6}, -{70,11,7}, -{70,11,8}, -{70,11,9}, -{70,11,10}, -{70,11,11}, -{70,11,12}, -{70,11,13}, -{70,11,14}, -{70,11,15}, -{70,11,16}, -{70,11,17}, -{70,11,18}, -{70,11,19}, -{70,11,20}, -{70,11,21}, -{70,11,22}, -{70,11,23}, -{70,11,24}, -{70,11,25}, -{70,11,26}, -{70,11,27}, -{70,11,28}, -{70,11,29}, -{70,11,30}, -{70,11,31}, -{70,11,32}, -{70,11,33}, -{70,11,34}, -{70,11,35}, -{70,11,36}, -{70,11,37}, -{70,11,38}, -{70,11,39}, -{70,11,40}, -{70,11,41}, -{70,11,42}, -{70,11,43}, -{70,11,44}, -{70,11,45}, -{70,11,46}, -{70,11,47}, -{70,11,48}, -{70,11,49}, -{70,11,50}, -{70,11,51}, -{70,11,52}, -{70,11,53}, -{70,11,54}, -{70,11,55}, -{70,11,56}, -{70,11,57}, -{70,11,58}, -{70,11,59}, -{70,11,60}, -{70,11,61}, -{70,11,62}, -{70,11,63}, -{70,11,64}, -{70,11,65}, -{70,11,66}, -{70,11,67}, -{70,11,68}, -{70,11,69}, -{70,11,70}, -{70,11,71}, -{70,11,72}, -{70,11,73}, -{70,12,-46}, -{70,12,-45}, -{70,12,-44}, -{70,12,-43}, -{70,12,-42}, -{70,12,-41}, -{70,12,-40}, -{70,12,-39}, -{70,12,-38}, -{70,12,-37}, -{70,12,-36}, -{70,12,-35}, -{70,12,-34}, -{70,12,-33}, -{70,12,-32}, -{70,12,-31}, -{70,12,-30}, -{70,12,-29}, -{70,12,-28}, -{70,12,-27}, -{70,12,-26}, -{70,12,-25}, -{70,12,-24}, -{70,12,-23}, -{70,12,-22}, -{70,12,-21}, -{70,12,-20}, -{70,12,-19}, -{70,12,-18}, -{70,12,-17}, -{70,12,-16}, -{70,12,-15}, -{70,12,-14}, -{70,12,-13}, -{70,12,-12}, -{70,12,-11}, -{70,12,-10}, -{70,12,-9}, -{70,12,-8}, -{70,12,-7}, -{70,12,-6}, -{70,12,-5}, -{70,12,-4}, -{70,12,-3}, -{70,12,-2}, -{70,12,-1}, -{70,12,0}, -{70,12,1}, -{70,12,2}, -{70,12,3}, -{70,12,4}, -{70,12,5}, -{70,12,6}, -{70,12,7}, -{70,12,8}, -{70,12,9}, -{70,12,10}, -{70,12,11}, -{70,12,12}, -{70,12,13}, -{70,12,14}, -{70,12,15}, -{70,12,16}, -{70,12,17}, -{70,12,18}, -{70,12,19}, -{70,12,20}, -{70,12,21}, -{70,12,22}, -{70,12,23}, -{70,12,24}, -{70,12,25}, -{70,12,26}, -{70,12,27}, -{70,12,28}, -{70,12,29}, -{70,12,30}, -{70,12,31}, -{70,12,32}, -{70,12,33}, -{70,12,34}, -{70,12,35}, -{70,12,36}, -{70,12,37}, -{70,12,38}, -{70,12,39}, -{70,12,40}, -{70,12,41}, -{70,12,42}, -{70,12,43}, -{70,12,44}, -{70,12,45}, -{70,12,46}, -{70,12,47}, -{70,12,48}, -{70,12,49}, -{70,12,50}, -{70,12,51}, -{70,12,52}, -{70,12,53}, -{70,12,54}, -{70,12,55}, -{70,12,56}, -{70,12,57}, -{70,12,58}, -{70,12,59}, -{70,12,60}, -{70,12,61}, -{70,12,62}, -{70,12,63}, -{70,12,64}, -{70,12,65}, -{70,12,66}, -{70,12,67}, -{70,12,68}, -{70,12,69}, -{70,12,70}, -{70,12,71}, -{70,12,72}, -{70,12,73}, -{70,12,74}, -{70,13,-46}, -{70,13,-45}, -{70,13,-44}, -{70,13,-43}, -{70,13,-42}, -{70,13,-41}, -{70,13,-40}, -{70,13,-39}, -{70,13,-38}, -{70,13,-37}, -{70,13,-36}, -{70,13,-35}, -{70,13,-34}, -{70,13,-33}, -{70,13,-32}, -{70,13,-31}, -{70,13,-30}, -{70,13,-29}, -{70,13,-28}, -{70,13,-27}, -{70,13,-26}, -{70,13,-25}, -{70,13,-24}, -{70,13,-23}, -{70,13,-22}, -{70,13,-21}, -{70,13,-20}, -{70,13,-19}, -{70,13,-18}, -{70,13,-17}, -{70,13,-16}, -{70,13,-15}, -{70,13,-14}, -{70,13,-13}, -{70,13,-12}, -{70,13,-11}, -{70,13,-10}, -{70,13,-9}, -{70,13,-8}, -{70,13,-7}, -{70,13,-6}, -{70,13,-5}, -{70,13,-4}, -{70,13,-3}, -{70,13,-2}, -{70,13,-1}, -{70,13,0}, -{70,13,1}, -{70,13,2}, -{70,13,3}, -{70,13,4}, -{70,13,5}, -{70,13,6}, -{70,13,7}, -{70,13,8}, -{70,13,9}, -{70,13,10}, -{70,13,11}, -{70,13,12}, -{70,13,13}, -{70,13,14}, -{70,13,15}, -{70,13,16}, -{70,13,17}, -{70,13,18}, -{70,13,19}, -{70,13,20}, -{70,13,21}, -{70,13,22}, -{70,13,23}, -{70,13,24}, -{70,13,25}, -{70,13,26}, -{70,13,27}, -{70,13,28}, -{70,13,29}, -{70,13,30}, -{70,13,31}, -{70,13,32}, -{70,13,33}, -{70,13,34}, -{70,13,35}, -{70,13,36}, -{70,13,37}, -{70,13,38}, -{70,13,39}, -{70,13,40}, -{70,13,41}, -{70,13,42}, -{70,13,43}, -{70,13,44}, -{70,13,45}, -{70,13,46}, -{70,13,47}, -{70,13,48}, -{70,13,49}, -{70,13,50}, -{70,13,51}, -{70,13,52}, -{70,13,53}, -{70,13,54}, -{70,13,55}, -{70,13,56}, -{70,13,57}, -{70,13,58}, -{70,13,59}, -{70,13,60}, -{70,13,61}, -{70,13,62}, -{70,13,63}, -{70,13,64}, -{70,13,65}, -{70,13,66}, -{70,13,67}, -{70,13,68}, -{70,13,69}, -{70,13,70}, -{70,13,71}, -{70,13,72}, -{70,13,73}, -{70,13,74}, -{70,14,-46}, -{70,14,-45}, -{70,14,-44}, -{70,14,-43}, -{70,14,-42}, -{70,14,-41}, -{70,14,-40}, -{70,14,-39}, -{70,14,-38}, -{70,14,-37}, -{70,14,-36}, -{70,14,-35}, -{70,14,-34}, -{70,14,-33}, -{70,14,-32}, -{70,14,-31}, -{70,14,-30}, -{70,14,-29}, -{70,14,-28}, -{70,14,-27}, -{70,14,-26}, -{70,14,-25}, -{70,14,-24}, -{70,14,-23}, -{70,14,-22}, -{70,14,-21}, -{70,14,-20}, -{70,14,-19}, -{70,14,-18}, -{70,14,-17}, -{70,14,-16}, -{70,14,-15}, -{70,14,-14}, -{70,14,-13}, -{70,14,-12}, -{70,14,-11}, -{70,14,-10}, -{70,14,-9}, -{70,14,-8}, -{70,14,-7}, -{70,14,-6}, -{70,14,-5}, -{70,14,-4}, -{70,14,-3}, -{70,14,-2}, -{70,14,-1}, -{70,14,0}, -{70,14,1}, -{70,14,2}, -{70,14,3}, -{70,14,4}, -{70,14,5}, -{70,14,6}, -{70,14,7}, -{70,14,8}, -{70,14,9}, -{70,14,10}, -{70,14,11}, -{70,14,12}, -{70,14,13}, -{70,14,14}, -{70,14,15}, -{70,14,16}, -{70,14,17}, -{70,14,18}, -{70,14,19}, -{70,14,20}, -{70,14,21}, -{70,14,22}, -{70,14,23}, -{70,14,24}, -{70,14,25}, -{70,14,26}, -{70,14,27}, -{70,14,28}, -{70,14,29}, -{70,14,30}, -{70,14,31}, -{70,14,32}, -{70,14,33}, -{70,14,34}, -{70,14,35}, -{70,14,36}, -{70,14,37}, -{70,14,38}, -{70,14,39}, -{70,14,40}, -{70,14,41}, -{70,14,42}, -{70,14,43}, -{70,14,44}, -{70,14,45}, -{70,14,46}, -{70,14,47}, -{70,14,48}, -{70,14,49}, -{70,14,50}, -{70,14,51}, -{70,14,52}, -{70,14,53}, -{70,14,54}, -{70,14,55}, -{70,14,56}, -{70,14,57}, -{70,14,58}, -{70,14,59}, -{70,14,60}, -{70,14,61}, -{70,14,62}, -{70,14,63}, -{70,14,64}, -{70,14,65}, -{70,14,66}, -{70,14,67}, -{70,14,68}, -{70,14,69}, -{70,14,70}, -{70,14,71}, -{70,14,72}, -{70,14,73}, -{70,14,74}, -{70,15,-46}, -{70,15,-45}, -{70,15,-44}, -{70,15,-43}, -{70,15,-42}, -{70,15,-41}, -{70,15,-40}, -{70,15,-39}, -{70,15,-38}, -{70,15,-37}, -{70,15,-36}, -{70,15,-35}, -{70,15,-34}, -{70,15,-33}, -{70,15,-32}, -{70,15,-31}, -{70,15,-30}, -{70,15,-29}, -{70,15,-28}, -{70,15,-27}, -{70,15,-26}, -{70,15,-25}, -{70,15,-24}, -{70,15,-23}, -{70,15,-22}, -{70,15,-21}, -{70,15,-20}, -{70,15,-19}, -{70,15,-18}, -{70,15,-17}, -{70,15,-16}, -{70,15,-15}, -{70,15,-14}, -{70,15,-13}, -{70,15,-12}, -{70,15,-11}, -{70,15,-10}, -{70,15,-9}, -{70,15,-8}, -{70,15,-7}, -{70,15,-6}, -{70,15,-5}, -{70,15,-4}, -{70,15,-3}, -{70,15,-2}, -{70,15,-1}, -{70,15,0}, -{70,15,1}, -{70,15,2}, -{70,15,3}, -{70,15,4}, -{70,15,5}, -{70,15,6}, -{70,15,7}, -{70,15,8}, -{70,15,9}, -{70,15,10}, -{70,15,11}, -{70,15,12}, -{70,15,13}, -{70,15,14}, -{70,15,15}, -{70,15,16}, -{70,15,17}, -{70,15,18}, -{70,15,19}, -{70,15,20}, -{70,15,21}, -{70,15,22}, -{70,15,23}, -{70,15,24}, -{70,15,25}, -{70,15,26}, -{70,15,27}, -{70,15,28}, -{70,15,29}, -{70,15,30}, -{70,15,31}, -{70,15,32}, -{70,15,33}, -{70,15,34}, -{70,15,35}, -{70,15,36}, -{70,15,37}, -{70,15,38}, -{70,15,39}, -{70,15,40}, -{70,15,41}, -{70,15,42}, -{70,15,43}, -{70,15,44}, -{70,15,45}, -{70,15,46}, -{70,15,47}, -{70,15,48}, -{70,15,49}, -{70,15,50}, -{70,15,51}, -{70,15,52}, -{70,15,53}, -{70,15,54}, -{70,15,55}, -{70,15,56}, -{70,15,57}, -{70,15,58}, -{70,15,59}, -{70,15,60}, -{70,15,61}, -{70,15,62}, -{70,15,63}, -{70,15,64}, -{70,15,65}, -{70,15,66}, -{70,15,67}, -{70,15,68}, -{70,15,69}, -{70,15,70}, -{70,15,71}, -{70,15,72}, -{70,15,73}, -{70,15,74}, -{70,16,-46}, -{70,16,-45}, -{70,16,-44}, -{70,16,-43}, -{70,16,-42}, -{70,16,-41}, -{70,16,-40}, -{70,16,-39}, -{70,16,-38}, -{70,16,-37}, -{70,16,-36}, -{70,16,-35}, -{70,16,-34}, -{70,16,-33}, -{70,16,-32}, -{70,16,-31}, -{70,16,-30}, -{70,16,-29}, -{70,16,-28}, -{70,16,-27}, -{70,16,-26}, -{70,16,-25}, -{70,16,-24}, -{70,16,-23}, -{70,16,-22}, -{70,16,-21}, -{70,16,-20}, -{70,16,-19}, -{70,16,-18}, -{70,16,-17}, -{70,16,-16}, -{70,16,-15}, -{70,16,-14}, -{70,16,-13}, -{70,16,-12}, -{70,16,-11}, -{70,16,-10}, -{70,16,-9}, -{70,16,-8}, -{70,16,-7}, -{70,16,-6}, -{70,16,-5}, -{70,16,-4}, -{70,16,-3}, -{70,16,-2}, -{70,16,-1}, -{70,16,0}, -{70,16,1}, -{70,16,2}, -{70,16,3}, -{70,16,4}, -{70,16,5}, -{70,16,6}, -{70,16,7}, -{70,16,8}, -{70,16,9}, -{70,16,10}, -{70,16,11}, -{70,16,12}, -{70,16,13}, -{70,16,14}, -{70,16,15}, -{70,16,16}, -{70,16,17}, -{70,16,18}, -{70,16,19}, -{70,16,20}, -{70,16,21}, -{70,16,22}, -{70,16,23}, -{70,16,24}, -{70,16,25}, -{70,16,26}, -{70,16,27}, -{70,16,28}, -{70,16,29}, -{70,16,30}, -{70,16,31}, -{70,16,32}, -{70,16,33}, -{70,16,34}, -{70,16,35}, -{70,16,36}, -{70,16,37}, -{70,16,38}, -{70,16,39}, -{70,16,40}, -{70,16,41}, -{70,16,42}, -{70,16,43}, -{70,16,44}, -{70,16,45}, -{70,16,46}, -{70,16,47}, -{70,16,48}, -{70,16,49}, -{70,16,50}, -{70,16,51}, -{70,16,52}, -{70,16,53}, -{70,16,54}, -{70,16,55}, -{70,16,56}, -{70,16,57}, -{70,16,58}, -{70,16,59}, -{70,16,60}, -{70,16,61}, -{70,16,62}, -{70,16,63}, -{70,16,64}, -{70,16,65}, -{70,16,66}, -{70,16,67}, -{70,16,68}, -{70,16,69}, -{70,16,70}, -{70,16,71}, -{70,16,72}, -{70,16,73}, -{70,16,74}, -{70,17,-46}, -{70,17,-45}, -{70,17,-44}, -{70,17,-43}, -{70,17,-42}, -{70,17,-41}, -{70,17,-40}, -{70,17,-39}, -{70,17,-38}, -{70,17,-37}, -{70,17,-36}, -{70,17,-35}, -{70,17,-34}, -{70,17,-33}, -{70,17,-32}, -{70,17,-31}, -{70,17,-30}, -{70,17,-29}, -{70,17,-28}, -{70,17,-27}, -{70,17,-26}, -{70,17,-25}, -{70,17,-24}, -{70,17,-23}, -{70,17,-22}, -{70,17,-21}, -{70,17,-20}, -{70,17,-19}, -{70,17,-18}, -{70,17,-17}, -{70,17,-16}, -{70,17,-15}, -{70,17,-14}, -{70,17,-13}, -{70,17,-12}, -{70,17,-11}, -{70,17,-10}, -{70,17,-9}, -{70,17,-8}, -{70,17,-7}, -{70,17,-6}, -{70,17,-5}, -{70,17,-4}, -{70,17,-3}, -{70,17,-2}, -{70,17,-1}, -{70,17,0}, -{70,17,1}, -{70,17,2}, -{70,17,3}, -{70,17,4}, -{70,17,5}, -{70,17,6}, -{70,17,7}, -{70,17,8}, -{70,17,9}, -{70,17,10}, -{70,17,11}, -{70,17,12}, -{70,17,13}, -{70,17,14}, -{70,17,15}, -{70,17,16}, -{70,17,17}, -{70,17,18}, -{70,17,19}, -{70,17,20}, -{70,17,21}, -{70,17,22}, -{70,17,23}, -{70,17,24}, -{70,17,25}, -{70,17,26}, -{70,17,27}, -{70,17,28}, -{70,17,29}, -{70,17,30}, -{70,17,31}, -{70,17,32}, -{70,17,33}, -{70,17,34}, -{70,17,35}, -{70,17,36}, -{70,17,37}, -{70,17,38}, -{70,17,39}, -{70,17,40}, -{70,17,41}, -{70,17,42}, -{70,17,43}, -{70,17,44}, -{70,17,45}, -{70,17,46}, -{70,17,47}, -{70,17,48}, -{70,17,49}, -{70,17,50}, -{70,17,51}, -{70,17,52}, -{70,17,53}, -{70,17,54}, -{70,17,55}, -{70,17,56}, -{70,17,57}, -{70,17,58}, -{70,17,59}, -{70,17,60}, -{70,17,61}, -{70,17,62}, -{70,17,63}, -{70,17,64}, -{70,17,65}, -{70,17,66}, -{70,17,67}, -{70,17,68}, -{70,17,69}, -{70,17,70}, -{70,17,71}, -{70,17,72}, -{70,17,73}, -{70,17,74}, -{70,18,-46}, -{70,18,-45}, -{70,18,-44}, -{70,18,-43}, -{70,18,-42}, -{70,18,-41}, -{70,18,-40}, -{70,18,-39}, -{70,18,-38}, -{70,18,-37}, -{70,18,-36}, -{70,18,-35}, -{70,18,-34}, -{70,18,-33}, -{70,18,-32}, -{70,18,-31}, -{70,18,-30}, -{70,18,-29}, -{70,18,-28}, -{70,18,-27}, -{70,18,-26}, -{70,18,-25}, -{70,18,-24}, -{70,18,-23}, -{70,18,-22}, -{70,18,-21}, -{70,18,-20}, -{70,18,-19}, -{70,18,-18}, -{70,18,-17}, -{70,18,-16}, -{70,18,-15}, -{70,18,-14}, -{70,18,-13}, -{70,18,-12}, -{70,18,-11}, -{70,18,-10}, -{70,18,-9}, -{70,18,-8}, -{70,18,-7}, -{70,18,-6}, -{70,18,-5}, -{70,18,-4}, -{70,18,-3}, -{70,18,-2}, -{70,18,-1}, -{70,18,0}, -{70,18,1}, -{70,18,2}, -{70,18,3}, -{70,18,4}, -{70,18,5}, -{70,18,6}, -{70,18,7}, -{70,18,8}, -{70,18,9}, -{70,18,10}, -{70,18,11}, -{70,18,12}, -{70,18,13}, -{70,18,14}, -{70,18,15}, -{70,18,16}, -{70,18,17}, -{70,18,18}, -{70,18,19}, -{70,18,20}, -{70,18,21}, -{70,18,22}, -{70,18,23}, -{70,18,24}, -{70,18,25}, -{70,18,26}, -{70,18,27}, -{70,18,28}, -{70,18,29}, -{70,18,30}, -{70,18,31}, -{70,18,32}, -{70,18,33}, -{70,18,34}, -{70,18,35}, -{70,18,36}, -{70,18,37}, -{70,18,38}, -{70,18,39}, -{70,18,40}, -{70,18,41}, -{70,18,42}, -{70,18,43}, -{70,18,44}, -{70,18,45}, -{70,18,46}, -{70,18,47}, -{70,18,48}, -{70,18,49}, -{70,18,50}, -{70,18,51}, -{70,18,52}, -{70,18,53}, -{70,18,54}, -{70,18,55}, -{70,18,56}, -{70,18,57}, -{70,18,58}, -{70,18,59}, -{70,18,60}, -{70,18,61}, -{70,18,62}, -{70,18,63}, -{70,18,64}, -{70,18,65}, -{70,18,66}, -{70,18,67}, -{70,18,68}, -{70,18,69}, -{70,18,70}, -{70,18,71}, -{70,18,72}, -{70,18,73}, -{70,18,74}, -{70,19,-46}, -{70,19,-45}, -{70,19,-44}, -{70,19,-43}, -{70,19,-42}, -{70,19,-41}, -{70,19,-40}, -{70,19,-39}, -{70,19,-38}, -{70,19,-37}, -{70,19,-36}, -{70,19,-35}, -{70,19,-34}, -{70,19,-33}, -{70,19,-32}, -{70,19,-31}, -{70,19,-30}, -{70,19,-29}, -{70,19,-28}, -{70,19,-27}, -{70,19,-26}, -{70,19,-25}, -{70,19,-24}, -{70,19,-23}, -{70,19,-22}, -{70,19,-21}, -{70,19,-20}, -{70,19,-19}, -{70,19,-18}, -{70,19,-17}, -{70,19,-16}, -{70,19,-15}, -{70,19,-14}, -{70,19,-13}, -{70,19,-12}, -{70,19,-11}, -{70,19,-10}, -{70,19,-9}, -{70,19,-8}, -{70,19,-7}, -{70,19,-6}, -{70,19,-5}, -{70,19,-4}, -{70,19,-3}, -{70,19,-2}, -{70,19,-1}, -{70,19,0}, -{70,19,1}, -{70,19,2}, -{70,19,3}, -{70,19,4}, -{70,19,5}, -{70,19,6}, -{70,19,7}, -{70,19,8}, -{70,19,9}, -{70,19,10}, -{70,19,11}, -{70,19,12}, -{70,19,13}, -{70,19,14}, -{70,19,15}, -{70,19,16}, -{70,19,17}, -{70,19,18}, -{70,19,19}, -{70,19,20}, -{70,19,21}, -{70,19,22}, -{70,19,23}, -{70,19,24}, -{70,19,25}, -{70,19,26}, -{70,19,27}, -{70,19,28}, -{70,19,29}, -{70,19,30}, -{70,19,31}, -{70,19,32}, -{70,19,33}, -{70,19,34}, -{70,19,35}, -{70,19,36}, -{70,19,37}, -{70,19,38}, -{70,19,39}, -{70,19,40}, -{70,19,41}, -{70,19,42}, -{70,19,43}, -{70,19,44}, -{70,19,45}, -{70,19,46}, -{70,19,47}, -{70,19,48}, -{70,19,49}, -{70,19,50}, -{70,19,51}, -{70,19,52}, -{70,19,53}, -{70,19,54}, -{70,19,55}, -{70,19,56}, -{70,19,57}, -{70,19,58}, -{70,19,59}, -{70,19,60}, -{70,19,61}, -{70,19,62}, -{70,19,63}, -{70,19,64}, -{70,19,65}, -{70,19,66}, -{70,19,67}, -{70,19,68}, -{70,19,69}, -{70,19,70}, -{70,19,71}, -{70,19,72}, -{70,19,73}, -{70,19,74}, -{70,20,-46}, -{70,20,-45}, -{70,20,-44}, -{70,20,-43}, -{70,20,-42}, -{70,20,-41}, -{70,20,-40}, -{70,20,-39}, -{70,20,-38}, -{70,20,-37}, -{70,20,-36}, -{70,20,-35}, -{70,20,-34}, -{70,20,-33}, -{70,20,-32}, -{70,20,-31}, -{70,20,-30}, -{70,20,-29}, -{70,20,-28}, -{70,20,-27}, -{70,20,-26}, -{70,20,-25}, -{70,20,-24}, -{70,20,-23}, -{70,20,-22}, -{70,20,-21}, -{70,20,-20}, -{70,20,-19}, -{70,20,-18}, -{70,20,-17}, -{70,20,-16}, -{70,20,-15}, -{70,20,-14}, -{70,20,-13}, -{70,20,-12}, -{70,20,-11}, -{70,20,-10}, -{70,20,-9}, -{70,20,-8}, -{70,20,-7}, -{70,20,-6}, -{70,20,-5}, -{70,20,-4}, -{70,20,-3}, -{70,20,-2}, -{70,20,-1}, -{70,20,0}, -{70,20,1}, -{70,20,2}, -{70,20,3}, -{70,20,4}, -{70,20,5}, -{70,20,6}, -{70,20,7}, -{70,20,8}, -{70,20,9}, -{70,20,10}, -{70,20,11}, -{70,20,12}, -{70,20,13}, -{70,20,14}, -{70,20,15}, -{70,20,16}, -{70,20,17}, -{70,20,18}, -{70,20,19}, -{70,20,20}, -{70,20,21}, -{70,20,22}, -{70,20,23}, -{70,20,24}, -{70,20,25}, -{70,20,26}, -{70,20,27}, -{70,20,28}, -{70,20,29}, -{70,20,30}, -{70,20,31}, -{70,20,32}, -{70,20,33}, -{70,20,34}, -{70,20,35}, -{70,20,36}, -{70,20,37}, -{70,20,38}, -{70,20,39}, -{70,20,40}, -{70,20,41}, -{70,20,42}, -{70,20,43}, -{70,20,44}, -{70,20,45}, -{70,20,46}, -{70,20,47}, -{70,20,48}, -{70,20,49}, -{70,20,50}, -{70,20,51}, -{70,20,52}, -{70,20,53}, -{70,20,54}, -{70,20,55}, -{70,20,56}, -{70,20,57}, -{70,20,58}, -{70,20,59}, -{70,20,60}, -{70,20,61}, -{70,20,62}, -{70,20,63}, -{70,20,64}, -{70,20,65}, -{70,20,66}, -{70,20,67}, -{70,20,68}, -{70,20,69}, -{70,20,70}, -{70,20,71}, -{70,20,72}, -{70,20,73}, -{70,20,74}, -{70,21,-46}, -{70,21,-45}, -{70,21,-44}, -{70,21,-43}, -{70,21,-42}, -{70,21,-41}, -{70,21,-40}, -{70,21,-39}, -{70,21,-38}, -{70,21,-37}, -{70,21,-36}, -{70,21,-35}, -{70,21,-34}, -{70,21,-33}, -{70,21,-32}, -{70,21,-31}, -{70,21,-30}, -{70,21,-29}, -{70,21,-28}, -{70,21,-27}, -{70,21,-26}, -{70,21,-25}, -{70,21,-24}, -{70,21,-23}, -{70,21,-22}, -{70,21,-21}, -{70,21,-20}, -{70,21,-19}, -{70,21,-18}, -{70,21,-17}, -{70,21,-16}, -{70,21,-15}, -{70,21,-14}, -{70,21,-13}, -{70,21,-12}, -{70,21,-11}, -{70,21,-10}, -{70,21,-9}, -{70,21,-8}, -{70,21,-7}, -{70,21,-6}, -{70,21,-5}, -{70,21,-4}, -{70,21,-3}, -{70,21,-2}, -{70,21,-1}, -{70,21,0}, -{70,21,1}, -{70,21,2}, -{70,21,3}, -{70,21,4}, -{70,21,5}, -{70,21,6}, -{70,21,7}, -{70,21,8}, -{70,21,9}, -{70,21,10}, -{70,21,11}, -{70,21,12}, -{70,21,13}, -{70,21,14}, -{70,21,15}, -{70,21,16}, -{70,21,17}, -{70,21,18}, -{70,21,19}, -{70,21,20}, -{70,21,21}, -{70,21,22}, -{70,21,23}, -{70,21,24}, -{70,21,25}, -{70,21,26}, -{70,21,27}, -{70,21,28}, -{70,21,29}, -{70,21,30}, -{70,21,31}, -{70,21,32}, -{70,21,33}, -{70,21,34}, -{70,21,35}, -{70,21,36}, -{70,21,37}, -{70,21,38}, -{70,21,39}, -{70,21,40}, -{70,21,41}, -{70,21,42}, -{70,21,43}, -{70,21,44}, -{70,21,45}, -{70,21,46}, -{70,21,47}, -{70,21,48}, -{70,21,49}, -{70,21,50}, -{70,21,51}, -{70,21,52}, -{70,21,53}, -{70,21,54}, -{70,21,55}, -{70,21,56}, -{70,21,57}, -{70,21,58}, -{70,21,59}, -{70,21,60}, -{70,21,61}, -{70,21,62}, -{70,21,63}, -{70,21,64}, -{70,21,65}, -{70,21,66}, -{70,21,67}, -{70,21,68}, -{70,21,69}, -{70,21,70}, -{70,21,71}, -{70,21,72}, -{70,21,73}, -{70,21,74}, -{70,22,-46}, -{70,22,-45}, -{70,22,-44}, -{70,22,-43}, -{70,22,-42}, -{70,22,-41}, -{70,22,-40}, -{70,22,-39}, -{70,22,-38}, -{70,22,-37}, -{70,22,-36}, -{70,22,-35}, -{70,22,-34}, -{70,22,-33}, -{70,22,-32}, -{70,22,-31}, -{70,22,-30}, -{70,22,-29}, -{70,22,-28}, -{70,22,-27}, -{70,22,-26}, -{70,22,-25}, -{70,22,-24}, -{70,22,-23}, -{70,22,-22}, -{70,22,-21}, -{70,22,-20}, -{70,22,-19}, -{70,22,-18}, -{70,22,-17}, -{70,22,-16}, -{70,22,-15}, -{70,22,-14}, -{70,22,-13}, -{70,22,-12}, -{70,22,-11}, -{70,22,-10}, -{70,22,-9}, -{70,22,-8}, -{70,22,-7}, -{70,22,-6}, -{70,22,-5}, -{70,22,-4}, -{70,22,-3}, -{70,22,-2}, -{70,22,-1}, -{70,22,0}, -{70,22,1}, -{70,22,2}, -{70,22,3}, -{70,22,4}, -{70,22,5}, -{70,22,6}, -{70,22,7}, -{70,22,8}, -{70,22,9}, -{70,22,10}, -{70,22,11}, -{70,22,12}, -{70,22,13}, -{70,22,14}, -{70,22,15}, -{70,22,16}, -{70,22,17}, -{70,22,18}, -{70,22,19}, -{70,22,20}, -{70,22,21}, -{70,22,22}, -{70,22,23}, -{70,22,24}, -{70,22,25}, -{70,22,26}, -{70,22,27}, -{70,22,28}, -{70,22,29}, -{70,22,30}, -{70,22,31}, -{70,22,32}, -{70,22,33}, -{70,22,34}, -{70,22,35}, -{70,22,36}, -{70,22,37}, -{70,22,38}, -{70,22,39}, -{70,22,40}, -{70,22,41}, -{70,22,42}, -{70,22,43}, -{70,22,44}, -{70,22,45}, -{70,22,46}, -{70,22,47}, -{70,22,48}, -{70,22,49}, -{70,22,50}, -{70,22,51}, -{70,22,52}, -{70,22,53}, -{70,22,54}, -{70,22,55}, -{70,22,56}, -{70,22,57}, -{70,22,58}, -{70,22,59}, -{70,22,60}, -{70,22,61}, -{70,22,62}, -{70,22,63}, -{70,22,64}, -{70,22,65}, -{70,22,66}, -{70,22,67}, -{70,22,68}, -{70,22,69}, -{70,22,70}, -{70,22,71}, -{70,22,72}, -{70,22,73}, -{70,22,74}, -{70,23,-46}, -{70,23,-45}, -{70,23,-44}, -{70,23,-43}, -{70,23,-42}, -{70,23,-41}, -{70,23,-40}, -{70,23,-39}, -{70,23,-38}, -{70,23,-37}, -{70,23,-36}, -{70,23,-35}, -{70,23,-34}, -{70,23,-33}, -{70,23,-32}, -{70,23,-31}, -{70,23,-30}, -{70,23,-29}, -{70,23,-28}, -{70,23,-27}, -{70,23,-26}, -{70,23,-25}, -{70,23,-24}, -{70,23,-23}, -{70,23,-22}, -{70,23,-21}, -{70,23,-20}, -{70,23,-19}, -{70,23,-18}, -{70,23,-17}, -{70,23,-16}, -{70,23,-15}, -{70,23,-14}, -{70,23,-13}, -{70,23,-12}, -{70,23,-11}, -{70,23,-10}, -{70,23,-9}, -{70,23,-8}, -{70,23,-7}, -{70,23,-6}, -{70,23,-5}, -{70,23,-4}, -{70,23,-3}, -{70,23,-2}, -{70,23,-1}, -{70,23,0}, -{70,23,1}, -{70,23,2}, -{70,23,3}, -{70,23,4}, -{70,23,5}, -{70,23,6}, -{70,23,7}, -{70,23,8}, -{70,23,9}, -{70,23,10}, -{70,23,11}, -{70,23,12}, -{70,23,13}, -{70,23,14}, -{70,23,15}, -{70,23,16}, -{70,23,17}, -{70,23,18}, -{70,23,19}, -{70,23,20}, -{70,23,21}, -{70,23,22}, -{70,23,23}, -{70,23,24}, -{70,23,25}, -{70,23,26}, -{70,23,27}, -{70,23,28}, -{70,23,29}, -{70,23,30}, -{70,23,31}, -{70,23,32}, -{70,23,33}, -{70,23,34}, -{70,23,35}, -{70,23,36}, -{70,23,37}, -{70,23,38}, -{70,23,39}, -{70,23,40}, -{70,23,41}, -{70,23,42}, -{70,23,43}, -{70,23,44}, -{70,23,45}, -{70,23,46}, -{70,23,47}, -{70,23,48}, -{70,23,49}, -{70,23,50}, -{70,23,51}, -{70,23,52}, -{70,23,53}, -{70,23,54}, -{70,23,55}, -{70,23,56}, -{70,23,57}, -{70,23,58}, -{70,23,59}, -{70,23,60}, -{70,23,61}, -{70,23,62}, -{70,23,63}, -{70,23,64}, -{70,23,65}, -{70,23,66}, -{70,23,67}, -{70,23,68}, -{70,23,69}, -{70,23,70}, -{70,23,71}, -{70,23,72}, -{70,23,73}, -{70,23,74}, -{70,24,-46}, -{70,24,-45}, -{70,24,-44}, -{70,24,-43}, -{70,24,-42}, -{70,24,-41}, -{70,24,-40}, -{70,24,-39}, -{70,24,-38}, -{70,24,-37}, -{70,24,-36}, -{70,24,-35}, -{70,24,-34}, -{70,24,-33}, -{70,24,-32}, -{70,24,-31}, -{70,24,-30}, -{70,24,-29}, -{70,24,-28}, -{70,24,-27}, -{70,24,-26}, -{70,24,-25}, -{70,24,-24}, -{70,24,-23}, -{70,24,-22}, -{70,24,-21}, -{70,24,-20}, -{70,24,-19}, -{70,24,-18}, -{70,24,-17}, -{70,24,-16}, -{70,24,-15}, -{70,24,-14}, -{70,24,-13}, -{70,24,-12}, -{70,24,-11}, -{70,24,-10}, -{70,24,-9}, -{70,24,-8}, -{70,24,-7}, -{70,24,-6}, -{70,24,-5}, -{70,24,-4}, -{70,24,-3}, -{70,24,-2}, -{70,24,-1}, -{70,24,0}, -{70,24,1}, -{70,24,2}, -{70,24,3}, -{70,24,4}, -{70,24,5}, -{70,24,6}, -{70,24,7}, -{70,24,8}, -{70,24,9}, -{70,24,10}, -{70,24,11}, -{70,24,12}, -{70,24,13}, -{70,24,14}, -{70,24,15}, -{70,24,16}, -{70,24,17}, -{70,24,18}, -{70,24,19}, -{70,24,20}, -{70,24,21}, -{70,24,22}, -{70,24,23}, -{70,24,24}, -{70,24,25}, -{70,24,26}, -{70,24,27}, -{70,24,28}, -{70,24,29}, -{70,24,30}, -{70,24,31}, -{70,24,32}, -{70,24,33}, -{70,24,34}, -{70,24,35}, -{70,24,36}, -{70,24,37}, -{70,24,38}, -{70,24,39}, -{70,24,40}, -{70,24,41}, -{70,24,42}, -{70,24,43}, -{70,24,44}, -{70,24,45}, -{70,24,46}, -{70,24,47}, -{70,24,48}, -{70,24,49}, -{70,24,50}, -{70,24,51}, -{70,24,52}, -{70,24,53}, -{70,24,54}, -{70,24,55}, -{70,24,56}, -{70,24,57}, -{70,24,58}, -{70,24,59}, -{70,24,60}, -{70,24,61}, -{70,24,62}, -{70,24,63}, -{70,24,64}, -{70,24,65}, -{70,24,66}, -{70,24,67}, -{70,24,68}, -{70,24,69}, -{70,24,70}, -{70,24,71}, -{70,24,72}, -{70,24,73}, -{70,24,74}, -{70,25,-46}, -{70,25,-45}, -{70,25,-44}, -{70,25,-43}, -{70,25,-42}, -{70,25,-41}, -{70,25,-40}, -{70,25,-39}, -{70,25,-38}, -{70,25,-37}, -{70,25,-36}, -{70,25,-35}, -{70,25,-34}, -{70,25,-33}, -{70,25,-32}, -{70,25,-31}, -{70,25,-30}, -{70,25,-29}, -{70,25,-28}, -{70,25,-27}, -{70,25,-26}, -{70,25,-25}, -{70,25,-24}, -{70,25,-23}, -{70,25,-22}, -{70,25,-21}, -{70,25,-20}, -{70,25,-19}, -{70,25,-18}, -{70,25,-17}, -{70,25,-16}, -{70,25,-15}, -{70,25,-14}, -{70,25,-13}, -{70,25,-12}, -{70,25,-11}, -{70,25,-10}, -{70,25,-9}, -{70,25,-8}, -{70,25,-7}, -{70,25,-6}, -{70,25,-5}, -{70,25,-4}, -{70,25,-3}, -{70,25,-2}, -{70,25,-1}, -{70,25,0}, -{70,25,1}, -{70,25,2}, -{70,25,3}, -{70,25,4}, -{70,25,5}, -{70,25,6}, -{70,25,7}, -{70,25,8}, -{70,25,9}, -{70,25,10}, -{70,25,11}, -{70,25,12}, -{70,25,13}, -{70,25,14}, -{70,25,15}, -{70,25,16}, -{70,25,17}, -{70,25,18}, -{70,25,19}, -{70,25,20}, -{70,25,21}, -{70,25,22}, -{70,25,23}, -{70,25,24}, -{70,25,25}, -{70,25,26}, -{70,25,27}, -{70,25,28}, -{70,25,29}, -{70,25,30}, -{70,25,31}, -{70,25,32}, -{70,25,33}, -{70,25,34}, -{70,25,35}, -{70,25,36}, -{70,25,37}, -{70,25,38}, -{70,25,39}, -{70,25,40}, -{70,25,41}, -{70,25,42}, -{70,25,43}, -{70,25,44}, -{70,25,45}, -{70,25,46}, -{70,25,47}, -{70,25,48}, -{70,25,49}, -{70,25,50}, -{70,25,51}, -{70,25,52}, -{70,25,53}, -{70,25,54}, -{70,25,55}, -{70,25,56}, -{70,25,57}, -{70,25,58}, -{70,25,59}, -{70,25,60}, -{70,25,61}, -{70,25,62}, -{70,25,63}, -{70,25,64}, -{70,25,65}, -{70,25,66}, -{70,25,67}, -{70,25,68}, -{70,25,69}, -{70,25,70}, -{70,25,71}, -{70,25,72}, -{70,25,73}, -{70,25,74}, -{70,25,75}, -{70,26,-46}, -{70,26,-45}, -{70,26,-44}, -{70,26,-43}, -{70,26,-42}, -{70,26,-41}, -{70,26,-40}, -{70,26,-39}, -{70,26,-38}, -{70,26,-37}, -{70,26,-36}, -{70,26,-35}, -{70,26,-34}, -{70,26,-33}, -{70,26,-32}, -{70,26,-31}, -{70,26,-30}, -{70,26,-29}, -{70,26,-28}, -{70,26,-27}, -{70,26,-26}, -{70,26,-25}, -{70,26,-24}, -{70,26,-23}, -{70,26,-22}, -{70,26,-21}, -{70,26,-20}, -{70,26,-19}, -{70,26,-18}, -{70,26,-17}, -{70,26,-16}, -{70,26,-15}, -{70,26,-14}, -{70,26,-13}, -{70,26,-12}, -{70,26,-11}, -{70,26,-10}, -{70,26,-9}, -{70,26,-8}, -{70,26,-7}, -{70,26,-6}, -{70,26,-5}, -{70,26,-4}, -{70,26,-3}, -{70,26,-2}, -{70,26,-1}, -{70,26,0}, -{70,26,1}, -{70,26,2}, -{70,26,3}, -{70,26,4}, -{70,26,5}, -{70,26,6}, -{70,26,7}, -{70,26,8}, -{70,26,9}, -{70,26,10}, -{70,26,11}, -{70,26,12}, -{70,26,13}, -{70,26,14}, -{70,26,15}, -{70,26,16}, -{70,26,17}, -{70,26,18}, -{70,26,19}, -{70,26,20}, -{70,26,21}, -{70,26,22}, -{70,26,23}, -{70,26,24}, -{70,26,25}, -{70,26,26}, -{70,26,27}, -{70,26,28}, -{70,26,29}, -{70,26,30}, -{70,26,31}, -{70,26,32}, -{70,26,33}, -{70,26,34}, -{70,26,35}, -{70,26,36}, -{70,26,37}, -{70,26,38}, -{70,26,39}, -{70,26,40}, -{70,26,41}, -{70,26,42}, -{70,26,43}, -{70,26,44}, -{70,26,45}, -{70,26,46}, -{70,26,47}, -{70,26,48}, -{70,26,49}, -{70,26,50}, -{70,26,51}, -{70,26,52}, -{70,26,53}, -{70,26,54}, -{70,26,55}, -{70,26,56}, -{70,26,57}, -{70,26,58}, -{70,26,59}, -{70,26,60}, -{70,26,61}, -{70,26,62}, -{70,26,63}, -{70,26,64}, -{70,26,65}, -{70,26,66}, -{70,26,67}, -{70,26,68}, -{70,26,69}, -{70,26,70}, -{70,26,71}, -{70,26,72}, -{70,26,73}, -{70,26,74}, -{70,26,75}, -{70,27,-46}, -{70,27,-45}, -{70,27,-44}, -{70,27,-43}, -{70,27,-42}, -{70,27,-41}, -{70,27,-40}, -{70,27,-39}, -{70,27,-38}, -{70,27,-37}, -{70,27,-36}, -{70,27,-35}, -{70,27,-34}, -{70,27,-33}, -{70,27,-32}, -{70,27,-31}, -{70,27,-30}, -{70,27,-29}, -{70,27,-28}, -{70,27,-27}, -{70,27,-26}, -{70,27,-25}, -{70,27,-24}, -{70,27,-23}, -{70,27,-22}, -{70,27,-21}, -{70,27,-20}, -{70,27,-19}, -{70,27,-18}, -{70,27,-17}, -{70,27,-16}, -{70,27,-15}, -{70,27,-14}, -{70,27,-13}, -{70,27,-12}, -{70,27,-11}, -{70,27,-10}, -{70,27,-9}, -{70,27,-8}, -{70,27,-7}, -{70,27,-6}, -{70,27,-5}, -{70,27,-4}, -{70,27,-3}, -{70,27,-2}, -{70,27,-1}, -{70,27,0}, -{70,27,1}, -{70,27,2}, -{70,27,3}, -{70,27,4}, -{70,27,5}, -{70,27,6}, -{70,27,7}, -{70,27,8}, -{70,27,9}, -{70,27,10}, -{70,27,11}, -{70,27,12}, -{70,27,13}, -{70,27,14}, -{70,27,15}, -{70,27,16}, -{70,27,17}, -{70,27,18}, -{70,27,19}, -{70,27,20}, -{70,27,21}, -{70,27,22}, -{70,27,23}, -{70,27,24}, -{70,27,25}, -{70,27,26}, -{70,27,27}, -{70,27,28}, -{70,27,29}, -{70,27,30}, -{70,27,31}, -{70,27,32}, -{70,27,33}, -{70,27,34}, -{70,27,35}, -{70,27,36}, -{70,27,37}, -{70,27,38}, -{70,27,39}, -{70,27,40}, -{70,27,41}, -{70,27,42}, -{70,27,43}, -{70,27,44}, -{70,27,45}, -{70,27,46}, -{70,27,47}, -{70,27,48}, -{70,27,49}, -{70,27,50}, -{70,27,51}, -{70,27,52}, -{70,27,53}, -{70,27,54}, -{70,27,55}, -{70,27,56}, -{70,27,57}, -{70,27,58}, -{70,27,59}, -{70,27,60}, -{70,27,61}, -{70,27,62}, -{70,27,63}, -{70,27,64}, -{70,27,65}, -{70,27,66}, -{70,27,67}, -{70,27,68}, -{70,27,69}, -{70,27,70}, -{70,27,71}, -{70,27,72}, -{70,27,73}, -{70,27,74}, -{70,27,75}, -{70,28,-46}, -{70,28,-45}, -{70,28,-44}, -{70,28,-43}, -{70,28,-42}, -{70,28,-41}, -{70,28,-40}, -{70,28,-39}, -{70,28,-38}, -{70,28,-37}, -{70,28,-36}, -{70,28,-35}, -{70,28,-34}, -{70,28,-33}, -{70,28,-32}, -{70,28,-31}, -{70,28,-30}, -{70,28,-29}, -{70,28,-28}, -{70,28,-27}, -{70,28,-26}, -{70,28,-25}, -{70,28,-24}, -{70,28,-23}, -{70,28,-22}, -{70,28,-21}, -{70,28,-20}, -{70,28,-19}, -{70,28,-18}, -{70,28,-17}, -{70,28,-16}, -{70,28,-15}, -{70,28,-14}, -{70,28,-13}, -{70,28,-12}, -{70,28,-11}, -{70,28,-10}, -{70,28,-9}, -{70,28,-8}, -{70,28,-7}, -{70,28,-6}, -{70,28,-5}, -{70,28,-4}, -{70,28,-3}, -{70,28,-2}, -{70,28,-1}, -{70,28,0}, -{70,28,1}, -{70,28,2}, -{70,28,3}, -{70,28,4}, -{70,28,5}, -{70,28,6}, -{70,28,7}, -{70,28,8}, -{70,28,9}, -{70,28,10}, -{70,28,11}, -{70,28,12}, -{70,28,13}, -{70,28,14}, -{70,28,15}, -{70,28,16}, -{70,28,17}, -{70,28,18}, -{70,28,19}, -{70,28,20}, -{70,28,21}, -{70,28,22}, -{70,28,23}, -{70,28,24}, -{70,28,25}, -{70,28,26}, -{70,28,27}, -{70,28,28}, -{70,28,29}, -{70,28,30}, -{70,28,31}, -{70,28,32}, -{70,28,33}, -{70,28,34}, -{70,28,35}, -{70,28,36}, -{70,28,37}, -{70,28,38}, -{70,28,39}, -{70,28,40}, -{70,28,41}, -{70,28,42}, -{70,28,43}, -{70,28,44}, -{70,28,45}, -{70,28,46}, -{70,28,47}, -{70,28,48}, -{70,28,49}, -{70,28,50}, -{70,28,51}, -{70,28,52}, -{70,28,53}, -{70,28,54}, -{70,28,55}, -{70,28,56}, -{70,28,57}, -{70,28,58}, -{70,28,59}, -{70,28,60}, -{70,28,61}, -{70,28,62}, -{70,28,63}, -{70,28,64}, -{70,28,65}, -{70,28,66}, -{70,28,67}, -{70,28,68}, -{70,28,69}, -{70,28,70}, -{70,28,71}, -{70,28,72}, -{70,28,73}, -{70,28,74}, -{70,28,75}, -{70,29,-46}, -{70,29,-45}, -{70,29,-44}, -{70,29,-43}, -{70,29,-42}, -{70,29,-41}, -{70,29,-40}, -{70,29,-39}, -{70,29,-38}, -{70,29,-37}, -{70,29,-36}, -{70,29,-35}, -{70,29,-34}, -{70,29,-33}, -{70,29,-32}, -{70,29,-31}, -{70,29,-30}, -{70,29,-29}, -{70,29,-28}, -{70,29,-27}, -{70,29,-26}, -{70,29,-25}, -{70,29,-24}, -{70,29,-23}, -{70,29,-22}, -{70,29,-21}, -{70,29,-20}, -{70,29,-19}, -{70,29,-18}, -{70,29,-17}, -{70,29,-16}, -{70,29,-15}, -{70,29,-14}, -{70,29,-13}, -{70,29,-12}, -{70,29,-11}, -{70,29,-10}, -{70,29,-9}, -{70,29,-8}, -{70,29,-7}, -{70,29,-6}, -{70,29,-5}, -{70,29,-4}, -{70,29,-3}, -{70,29,-2}, -{70,29,-1}, -{70,29,0}, -{70,29,1}, -{70,29,2}, -{70,29,3}, -{70,29,4}, -{70,29,5}, -{70,29,6}, -{70,29,7}, -{70,29,8}, -{70,29,9}, -{70,29,10}, -{70,29,11}, -{70,29,12}, -{70,29,13}, -{70,29,14}, -{70,29,15}, -{70,29,16}, -{70,29,17}, -{70,29,18}, -{70,29,19}, -{70,29,20}, -{70,29,21}, -{70,29,22}, -{70,29,23}, -{70,29,24}, -{70,29,25}, -{70,29,26}, -{70,29,27}, -{70,29,28}, -{70,29,29}, -{70,29,30}, -{70,29,31}, -{70,29,32}, -{70,29,33}, -{70,29,34}, -{70,29,35}, -{70,29,36}, -{70,29,37}, -{70,29,38}, -{70,29,39}, -{70,29,40}, -{70,29,41}, -{70,29,42}, -{70,29,43}, -{70,29,44}, -{70,29,45}, -{70,29,46}, -{70,29,47}, -{70,29,48}, -{70,29,49}, -{70,29,50}, -{70,29,51}, -{70,29,52}, -{70,29,53}, -{70,29,54}, -{70,29,55}, -{70,29,56}, -{70,29,57}, -{70,29,58}, -{70,29,59}, -{70,29,60}, -{70,29,61}, -{70,29,62}, -{70,29,63}, -{70,29,64}, -{70,29,65}, -{70,29,66}, -{70,29,67}, -{70,29,68}, -{70,29,69}, -{70,29,70}, -{70,29,71}, -{70,29,72}, -{70,29,73}, -{70,29,74}, -{70,29,75}, -{70,30,-46}, -{70,30,-45}, -{70,30,-44}, -{70,30,-43}, -{70,30,-42}, -{70,30,-41}, -{70,30,-40}, -{70,30,-39}, -{70,30,-38}, -{70,30,-37}, -{70,30,-36}, -{70,30,-35}, -{70,30,-34}, -{70,30,-33}, -{70,30,-32}, -{70,30,-31}, -{70,30,-30}, -{70,30,-29}, -{70,30,-28}, -{70,30,-27}, -{70,30,-26}, -{70,30,-25}, -{70,30,-24}, -{70,30,-23}, -{70,30,-22}, -{70,30,-21}, -{70,30,-20}, -{70,30,-19}, -{70,30,-18}, -{70,30,-17}, -{70,30,-16}, -{70,30,-15}, -{70,30,-14}, -{70,30,-13}, -{70,30,-12}, -{70,30,-11}, -{70,30,-10}, -{70,30,-9}, -{70,30,-8}, -{70,30,-7}, -{70,30,-6}, -{70,30,-5}, -{70,30,-4}, -{70,30,-3}, -{70,30,-2}, -{70,30,-1}, -{70,30,0}, -{70,30,1}, -{70,30,2}, -{70,30,3}, -{70,30,4}, -{70,30,5}, -{70,30,6}, -{70,30,7}, -{70,30,8}, -{70,30,9}, -{70,30,10}, -{70,30,11}, -{70,30,12}, -{70,30,13}, -{70,30,14}, -{70,30,15}, -{70,30,16}, -{70,30,17}, -{70,30,18}, -{70,30,19}, -{70,30,20}, -{70,30,21}, -{70,30,22}, -{70,30,23}, -{70,30,24}, -{70,30,25}, -{70,30,26}, -{70,30,27}, -{70,30,28}, -{70,30,29}, -{70,30,30}, -{70,30,31}, -{70,30,32}, -{70,30,33}, -{70,30,34}, -{70,30,35}, -{70,30,36}, -{70,30,37}, -{70,30,38}, -{70,30,39}, -{70,30,40}, -{70,30,41}, -{70,30,42}, -{70,30,43}, -{70,30,44}, -{70,30,45}, -{70,30,46}, -{70,30,47}, -{70,30,48}, -{70,30,49}, -{70,30,50}, -{70,30,51}, -{70,30,52}, -{70,30,53}, -{70,30,54}, -{70,30,55}, -{70,30,56}, -{70,30,57}, -{70,30,58}, -{70,30,59}, -{70,30,60}, -{70,30,61}, -{70,30,62}, -{70,30,63}, -{70,30,64}, -{70,30,65}, -{70,30,66}, -{70,30,67}, -{70,30,68}, -{70,30,69}, -{70,30,70}, -{70,30,71}, -{70,30,72}, -{70,30,73}, -{70,30,74}, -{70,30,75}, -{70,31,-46}, -{70,31,-45}, -{70,31,-44}, -{70,31,-43}, -{70,31,-42}, -{70,31,-41}, -{70,31,-40}, -{70,31,-39}, -{70,31,-38}, -{70,31,-37}, -{70,31,-36}, -{70,31,-35}, -{70,31,-34}, -{70,31,-33}, -{70,31,-32}, -{70,31,-31}, -{70,31,-30}, -{70,31,-29}, -{70,31,-28}, -{70,31,-27}, -{70,31,-26}, -{70,31,-25}, -{70,31,-24}, -{70,31,-23}, -{70,31,-22}, -{70,31,-21}, -{70,31,-20}, -{70,31,-19}, -{70,31,-18}, -{70,31,-17}, -{70,31,-16}, -{70,31,-15}, -{70,31,-14}, -{70,31,-13}, -{70,31,-12}, -{70,31,-11}, -{70,31,-10}, -{70,31,-9}, -{70,31,-8}, -{70,31,-7}, -{70,31,-6}, -{70,31,-5}, -{70,31,-4}, -{70,31,-3}, -{70,31,-2}, -{70,31,-1}, -{70,31,0}, -{70,31,1}, -{70,31,2}, -{70,31,3}, -{70,31,4}, -{70,31,5}, -{70,31,6}, -{70,31,7}, -{70,31,8}, -{70,31,9}, -{70,31,10}, -{70,31,11}, -{70,31,12}, -{70,31,13}, -{70,31,14}, -{70,31,15}, -{70,31,16}, -{70,31,17}, -{70,31,18}, -{70,31,19}, -{70,31,20}, -{70,31,21}, -{70,31,22}, -{70,31,23}, -{70,31,24}, -{70,31,25}, -{70,31,26}, -{70,31,27}, -{70,31,28}, -{70,31,29}, -{70,31,30}, -{70,31,31}, -{70,31,32}, -{70,31,33}, -{70,31,34}, -{70,31,35}, -{70,31,36}, -{70,31,37}, -{70,31,38}, -{70,31,39}, -{70,31,40}, -{70,31,41}, -{70,31,42}, -{70,31,43}, -{70,31,44}, -{70,31,45}, -{70,31,46}, -{70,31,47}, -{70,31,48}, -{70,31,49}, -{70,31,50}, -{70,31,51}, -{70,31,52}, -{70,31,53}, -{70,31,54}, -{70,31,55}, -{70,31,56}, -{70,31,57}, -{70,31,58}, -{70,31,59}, -{70,31,60}, -{70,31,61}, -{70,31,62}, -{70,31,63}, -{70,31,64}, -{70,31,65}, -{70,31,66}, -{70,31,67}, -{70,31,68}, -{70,31,69}, -{70,31,70}, -{70,31,71}, -{70,31,72}, -{70,31,73}, -{70,31,74}, -{70,31,75}, -{70,32,-46}, -{70,32,-45}, -{70,32,-44}, -{70,32,-43}, -{70,32,-42}, -{70,32,-41}, -{70,32,-40}, -{70,32,-39}, -{70,32,-38}, -{70,32,-37}, -{70,32,-36}, -{70,32,-35}, -{70,32,-34}, -{70,32,-33}, -{70,32,-32}, -{70,32,-31}, -{70,32,-30}, -{70,32,-29}, -{70,32,-28}, -{70,32,-27}, -{70,32,-26}, -{70,32,-25}, -{70,32,-24}, -{70,32,-23}, -{70,32,-22}, -{70,32,-21}, -{70,32,-20}, -{70,32,-19}, -{70,32,-18}, -{70,32,-17}, -{70,32,-16}, -{70,32,-15}, -{70,32,-14}, -{70,32,-13}, -{70,32,-12}, -{70,32,-11}, -{70,32,-10}, -{70,32,-9}, -{70,32,-8}, -{70,32,-7}, -{70,32,-6}, -{70,32,-5}, -{70,32,-4}, -{70,32,-3}, -{70,32,-2}, -{70,32,-1}, -{70,32,0}, -{70,32,1}, -{70,32,2}, -{70,32,3}, -{70,32,4}, -{70,32,5}, -{70,32,6}, -{70,32,7}, -{70,32,8}, -{70,32,9}, -{70,32,10}, -{70,32,11}, -{70,32,12}, -{70,32,13}, -{70,32,14}, -{70,32,15}, -{70,32,16}, -{70,32,17}, -{70,32,18}, -{70,32,19}, -{70,32,20}, -{70,32,21}, -{70,32,22}, -{70,32,23}, -{70,32,24}, -{70,32,25}, -{70,32,26}, -{70,32,27}, -{70,32,28}, -{70,32,29}, -{70,32,30}, -{70,32,31}, -{70,32,32}, -{70,32,33}, -{70,32,34}, -{70,32,35}, -{70,32,36}, -{70,32,37}, -{70,32,38}, -{70,32,39}, -{70,32,40}, -{70,32,41}, -{70,32,42}, -{70,32,43}, -{70,32,44}, -{70,32,45}, -{70,32,46}, -{70,32,47}, -{70,32,48}, -{70,32,49}, -{70,32,50}, -{70,32,51}, -{70,32,52}, -{70,32,53}, -{70,32,54}, -{70,32,55}, -{70,32,56}, -{70,32,57}, -{70,32,58}, -{70,32,59}, -{70,32,60}, -{70,32,61}, -{70,32,62}, -{70,32,63}, -{70,32,64}, -{70,32,65}, -{70,32,66}, -{70,32,67}, -{70,32,68}, -{70,32,69}, -{70,32,70}, -{70,32,71}, -{70,32,72}, -{70,32,73}, -{70,32,74}, -{70,32,75}, -{70,33,-46}, -{70,33,-45}, -{70,33,-44}, -{70,33,-43}, -{70,33,-42}, -{70,33,-41}, -{70,33,-40}, -{70,33,-39}, -{70,33,-38}, -{70,33,-37}, -{70,33,-36}, -{70,33,-35}, -{70,33,-34}, -{70,33,-33}, -{70,33,-32}, -{70,33,-31}, -{70,33,-30}, -{70,33,-29}, -{70,33,-28}, -{70,33,-27}, -{70,33,-26}, -{70,33,-25}, -{70,33,-24}, -{70,33,-23}, -{70,33,-22}, -{70,33,-21}, -{70,33,-20}, -{70,33,-19}, -{70,33,-18}, -{70,33,-17}, -{70,33,-16}, -{70,33,-15}, -{70,33,-14}, -{70,33,-13}, -{70,33,-12}, -{70,33,-11}, -{70,33,-10}, -{70,33,-9}, -{70,33,-8}, -{70,33,-7}, -{70,33,-6}, -{70,33,-5}, -{70,33,-4}, -{70,33,-3}, -{70,33,-2}, -{70,33,-1}, -{70,33,0}, -{70,33,1}, -{70,33,2}, -{70,33,3}, -{70,33,4}, -{70,33,5}, -{70,33,6}, -{70,33,7}, -{70,33,8}, -{70,33,9}, -{70,33,10}, -{70,33,11}, -{70,33,12}, -{70,33,13}, -{70,33,14}, -{70,33,15}, -{70,33,16}, -{70,33,17}, -{70,33,18}, -{70,33,19}, -{70,33,20}, -{70,33,21}, -{70,33,22}, -{70,33,23}, -{70,33,24}, -{70,33,25}, -{70,33,26}, -{70,33,27}, -{70,33,28}, -{70,33,29}, -{70,33,30}, -{70,33,31}, -{70,33,32}, -{70,33,33}, -{70,33,34}, -{70,33,35}, -{70,33,36}, -{70,33,37}, -{70,33,38}, -{70,33,39}, -{70,33,40}, -{70,33,41}, -{70,33,42}, -{70,33,43}, -{70,33,44}, -{70,33,45}, -{70,33,46}, -{70,33,47}, -{70,33,48}, -{70,33,49}, -{70,33,50}, -{70,33,51}, -{70,33,52}, -{70,33,53}, -{70,33,54}, -{70,33,55}, -{70,33,56}, -{70,33,57}, -{70,33,58}, -{70,33,59}, -{70,33,60}, -{70,33,61}, -{70,33,62}, -{70,33,63}, -{70,33,64}, -{70,33,65}, -{70,33,66}, -{70,33,67}, -{70,33,68}, -{70,33,69}, -{70,33,70}, -{70,33,71}, -{70,33,72}, -{70,33,73}, -{70,33,74}, -{70,33,75}, -{70,34,-46}, -{70,34,-45}, -{70,34,-44}, -{70,34,-43}, -{70,34,-42}, -{70,34,-41}, -{70,34,-40}, -{70,34,-39}, -{70,34,-38}, -{70,34,-37}, -{70,34,-36}, -{70,34,-35}, -{70,34,-34}, -{70,34,-33}, -{70,34,-32}, -{70,34,-31}, -{70,34,-30}, -{70,34,-29}, -{70,34,-28}, -{70,34,-27}, -{70,34,-26}, -{70,34,-25}, -{70,34,-24}, -{70,34,-23}, -{70,34,-22}, -{70,34,-21}, -{70,34,-20}, -{70,34,-19}, -{70,34,-18}, -{70,34,-17}, -{70,34,-16}, -{70,34,-15}, -{70,34,-14}, -{70,34,-13}, -{70,34,-12}, -{70,34,-11}, -{70,34,-10}, -{70,34,-9}, -{70,34,-8}, -{70,34,-7}, -{70,34,-6}, -{70,34,-5}, -{70,34,-4}, -{70,34,-3}, -{70,34,-2}, -{70,34,-1}, -{70,34,0}, -{70,34,1}, -{70,34,2}, -{70,34,3}, -{70,34,4}, -{70,34,5}, -{70,34,6}, -{70,34,7}, -{70,34,8}, -{70,34,9}, -{70,34,10}, -{70,34,11}, -{70,34,12}, -{70,34,13}, -{70,34,14}, -{70,34,15}, -{70,34,16}, -{70,34,17}, -{70,34,18}, -{70,34,19}, -{70,34,20}, -{70,34,21}, -{70,34,22}, -{70,34,23}, -{70,34,24}, -{70,34,25}, -{70,34,26}, -{70,34,27}, -{70,34,28}, -{70,34,29}, -{70,34,30}, -{70,34,31}, -{70,34,32}, -{70,34,33}, -{70,34,34}, -{70,34,35}, -{70,34,36}, -{70,34,37}, -{70,34,38}, -{70,34,39}, -{70,34,40}, -{70,34,41}, -{70,34,42}, -{70,34,43}, -{70,34,44}, -{70,34,45}, -{70,34,46}, -{70,34,47}, -{70,34,48}, -{70,34,49}, -{70,34,50}, -{70,34,51}, -{70,34,52}, -{70,34,53}, -{70,34,54}, -{70,34,55}, -{70,34,56}, -{70,34,57}, -{70,34,58}, -{70,34,59}, -{70,34,60}, -{70,34,61}, -{70,34,62}, -{70,34,63}, -{70,34,64}, -{70,34,65}, -{70,34,66}, -{70,34,67}, -{70,34,68}, -{70,34,69}, -{70,34,70}, -{70,34,71}, -{70,34,72}, -{70,34,73}, -{70,34,74}, -{70,34,75}, -{70,35,-46}, -{70,35,-45}, -{70,35,-44}, -{70,35,-43}, -{70,35,-42}, -{70,35,-41}, -{70,35,-40}, -{70,35,-39}, -{70,35,-38}, -{70,35,-37}, -{70,35,-36}, -{70,35,-35}, -{70,35,-34}, -{70,35,-33}, -{70,35,-32}, -{70,35,-31}, -{70,35,-30}, -{70,35,-29}, -{70,35,-28}, -{70,35,-27}, -{70,35,-26}, -{70,35,-25}, -{70,35,-24}, -{70,35,-23}, -{70,35,-22}, -{70,35,-21}, -{70,35,-20}, -{70,35,-19}, -{70,35,-18}, -{70,35,-17}, -{70,35,-16}, -{70,35,-15}, -{70,35,-14}, -{70,35,-13}, -{70,35,-12}, -{70,35,-11}, -{70,35,-10}, -{70,35,-9}, -{70,35,-8}, -{70,35,-7}, -{70,35,-6}, -{70,35,-5}, -{70,35,-4}, -{70,35,-3}, -{70,35,-2}, -{70,35,-1}, -{70,35,0}, -{70,35,1}, -{70,35,2}, -{70,35,3}, -{70,35,4}, -{70,35,5}, -{70,35,6}, -{70,35,7}, -{70,35,8}, -{70,35,9}, -{70,35,10}, -{70,35,11}, -{70,35,12}, -{70,35,13}, -{70,35,14}, -{70,35,15}, -{70,35,16}, -{70,35,17}, -{70,35,18}, -{70,35,19}, -{70,35,20}, -{70,35,21}, -{70,35,22}, -{70,35,23}, -{70,35,24}, -{70,35,25}, -{70,35,26}, -{70,35,27}, -{70,35,28}, -{70,35,29}, -{70,35,30}, -{70,35,31}, -{70,35,32}, -{70,35,33}, -{70,35,34}, -{70,35,35}, -{70,35,36}, -{70,35,37}, -{70,35,38}, -{70,35,39}, -{70,35,40}, -{70,35,41}, -{70,35,42}, -{70,35,43}, -{70,35,44}, -{70,35,45}, -{70,35,46}, -{70,35,47}, -{70,35,48}, -{70,35,49}, -{70,35,50}, -{70,35,51}, -{70,35,52}, -{70,35,53}, -{70,35,54}, -{70,35,55}, -{70,35,56}, -{70,35,57}, -{70,35,58}, -{70,35,59}, -{70,35,60}, -{70,35,61}, -{70,35,62}, -{70,35,63}, -{70,35,64}, -{70,35,65}, -{70,35,66}, -{70,35,67}, -{70,35,68}, -{70,35,69}, -{70,35,70}, -{70,35,71}, -{70,35,72}, -{70,35,73}, -{70,35,74}, -{70,35,75}, -{70,36,-46}, -{70,36,-45}, -{70,36,-44}, -{70,36,-43}, -{70,36,-42}, -{70,36,-41}, -{70,36,-40}, -{70,36,-39}, -{70,36,-38}, -{70,36,-37}, -{70,36,-36}, -{70,36,-35}, -{70,36,-34}, -{70,36,-33}, -{70,36,-32}, -{70,36,-31}, -{70,36,-30}, -{70,36,-29}, -{70,36,-28}, -{70,36,-27}, -{70,36,-26}, -{70,36,-25}, -{70,36,-24}, -{70,36,-23}, -{70,36,-22}, -{70,36,-21}, -{70,36,-20}, -{70,36,-19}, -{70,36,-18}, -{70,36,-17}, -{70,36,-16}, -{70,36,-15}, -{70,36,-14}, -{70,36,-13}, -{70,36,-12}, -{70,36,-11}, -{70,36,-10}, -{70,36,-9}, -{70,36,-8}, -{70,36,-7}, -{70,36,-6}, -{70,36,-5}, -{70,36,-4}, -{70,36,-3}, -{70,36,-2}, -{70,36,-1}, -{70,36,0}, -{70,36,1}, -{70,36,2}, -{70,36,3}, -{70,36,4}, -{70,36,5}, -{70,36,6}, -{70,36,7}, -{70,36,8}, -{70,36,9}, -{70,36,10}, -{70,36,11}, -{70,36,12}, -{70,36,13}, -{70,36,14}, -{70,36,15}, -{70,36,16}, -{70,36,17}, -{70,36,18}, -{70,36,19}, -{70,36,20}, -{70,36,21}, -{70,36,22}, -{70,36,23}, -{70,36,24}, -{70,36,25}, -{70,36,26}, -{70,36,27}, -{70,36,28}, -{70,36,29}, -{70,36,30}, -{70,36,31}, -{70,36,32}, -{70,36,33}, -{70,36,34}, -{70,36,35}, -{70,36,36}, -{70,36,37}, -{70,36,38}, -{70,36,39}, -{70,36,40}, -{70,36,41}, -{70,36,42}, -{70,36,43}, -{70,36,44}, -{70,36,45}, -{70,36,46}, -{70,36,47}, -{70,36,48}, -{70,36,49}, -{70,36,50}, -{70,36,51}, -{70,36,52}, -{70,36,53}, -{70,36,54}, -{70,36,55}, -{70,36,56}, -{70,36,57}, -{70,36,58}, -{70,36,59}, -{70,36,60}, -{70,36,61}, -{70,36,62}, -{70,36,63}, -{70,36,64}, -{70,36,65}, -{70,36,66}, -{70,36,67}, -{70,36,68}, -{70,36,69}, -{70,36,70}, -{70,36,71}, -{70,36,72}, -{70,36,73}, -{70,37,-46}, -{70,37,-45}, -{70,37,-44}, -{70,37,-43}, -{70,37,-42}, -{70,37,-41}, -{70,37,-40}, -{70,37,-39}, -{70,37,-38}, -{70,37,-37}, -{70,37,-36}, -{70,37,-35}, -{70,37,-34}, -{70,37,-33}, -{70,37,-32}, -{70,37,-31}, -{70,37,-30}, -{70,37,-29}, -{70,37,-28}, -{70,37,-27}, -{70,37,-26}, -{70,37,-25}, -{70,37,-24}, -{70,37,-23}, -{70,37,-22}, -{70,37,-21}, -{70,37,-20}, -{70,37,-19}, -{70,37,-18}, -{70,37,-17}, -{70,37,-16}, -{70,37,-15}, -{70,37,-14}, -{70,37,-13}, -{70,37,-12}, -{70,37,-11}, -{70,37,-10}, -{70,37,-9}, -{70,37,-8}, -{70,37,-7}, -{70,37,-6}, -{70,37,-5}, -{70,37,-4}, -{70,37,-3}, -{70,37,-2}, -{70,37,-1}, -{70,37,0}, -{70,37,1}, -{70,37,2}, -{70,37,3}, -{70,37,4}, -{70,37,5}, -{70,37,6}, -{70,37,7}, -{70,37,8}, -{70,37,9}, -{70,37,10}, -{70,37,11}, -{70,37,12}, -{70,37,13}, -{70,37,14}, -{70,37,15}, -{70,37,16}, -{70,37,17}, -{70,37,18}, -{70,37,19}, -{70,37,20}, -{70,37,21}, -{70,37,22}, -{70,37,23}, -{70,37,24}, -{70,37,25}, -{70,37,26}, -{70,37,27}, -{70,37,28}, -{70,37,29}, -{70,37,30}, -{70,37,31}, -{70,37,32}, -{70,37,33}, -{70,37,34}, -{70,37,35}, -{70,37,36}, -{70,37,37}, -{70,37,38}, -{70,37,39}, -{70,37,40}, -{70,37,41}, -{70,37,42}, -{70,37,43}, -{70,37,44}, -{70,37,45}, -{70,37,46}, -{70,37,47}, -{70,37,48}, -{70,37,49}, -{70,37,50}, -{70,37,51}, -{70,37,52}, -{70,37,53}, -{70,37,54}, -{70,37,55}, -{70,37,56}, -{70,37,57}, -{70,37,58}, -{70,37,59}, -{70,37,60}, -{70,37,61}, -{70,37,62}, -{70,37,63}, -{70,38,-46}, -{70,38,-45}, -{70,38,-44}, -{70,38,-43}, -{70,38,-42}, -{70,38,-41}, -{70,38,-40}, -{70,38,-39}, -{70,38,-38}, -{70,38,-37}, -{70,38,-36}, -{70,38,-35}, -{70,38,-34}, -{70,38,-33}, -{70,38,-32}, -{70,38,-31}, -{70,38,-30}, -{70,38,-29}, -{70,38,-28}, -{70,38,-27}, -{70,38,-26}, -{70,38,-25}, -{70,38,-24}, -{70,38,-23}, -{70,38,-22}, -{70,38,-21}, -{70,38,-20}, -{70,38,-19}, -{70,38,-18}, -{70,38,-17}, -{70,38,-16}, -{70,38,-15}, -{70,38,-14}, -{70,38,-13}, -{70,38,-12}, -{70,38,-11}, -{70,38,-10}, -{70,38,-9}, -{70,38,-8}, -{70,38,-7}, -{70,38,-6}, -{70,38,-5}, -{70,38,-4}, -{70,38,-3}, -{70,38,-2}, -{70,38,-1}, -{70,38,0}, -{70,38,1}, -{70,38,2}, -{70,38,3}, -{70,38,4}, -{70,38,5}, -{70,38,6}, -{70,38,7}, -{70,38,8}, -{70,38,9}, -{70,38,10}, -{70,38,11}, -{70,38,12}, -{70,38,13}, -{70,38,14}, -{70,38,15}, -{70,38,16}, -{70,38,17}, -{70,38,18}, -{70,38,19}, -{70,38,20}, -{70,38,21}, -{70,38,22}, -{70,38,23}, -{70,38,24}, -{70,38,25}, -{70,38,26}, -{70,38,27}, -{70,38,28}, -{70,38,29}, -{70,38,30}, -{70,38,31}, -{70,38,32}, -{70,38,33}, -{70,38,34}, -{70,38,35}, -{70,38,36}, -{70,38,37}, -{70,38,38}, -{70,38,39}, -{70,38,40}, -{70,38,41}, -{70,38,42}, -{70,38,43}, -{70,38,44}, -{70,38,45}, -{70,38,46}, -{70,38,47}, -{70,38,48}, -{70,38,49}, -{70,38,50}, -{70,38,51}, -{70,38,52}, -{70,38,53}, -{70,38,54}, -{70,38,55}, -{70,38,56}, -{70,39,-46}, -{70,39,-45}, -{70,39,-44}, -{70,39,-43}, -{70,39,-42}, -{70,39,-41}, -{70,39,-40}, -{70,39,-39}, -{70,39,-38}, -{70,39,-37}, -{70,39,-36}, -{70,39,-35}, -{70,39,-34}, -{70,39,-33}, -{70,39,-32}, -{70,39,-31}, -{70,39,-30}, -{70,39,-29}, -{70,39,-28}, -{70,39,-27}, -{70,39,-26}, -{70,39,-25}, -{70,39,-24}, -{70,39,-23}, -{70,39,-22}, -{70,39,-21}, -{70,39,-20}, -{70,39,-19}, -{70,39,-18}, -{70,39,-17}, -{70,39,-16}, -{70,39,-15}, -{70,39,-14}, -{70,39,-13}, -{70,39,-12}, -{70,39,-11}, -{70,39,-10}, -{70,39,-9}, -{70,39,-8}, -{70,39,-7}, -{70,39,-6}, -{70,39,-5}, -{70,39,-4}, -{70,39,-3}, -{70,39,-2}, -{70,39,-1}, -{70,39,0}, -{70,39,1}, -{70,39,2}, -{70,39,3}, -{70,39,4}, -{70,39,5}, -{70,39,6}, -{70,39,7}, -{70,39,8}, -{70,39,9}, -{70,39,10}, -{70,39,11}, -{70,39,12}, -{70,39,13}, -{70,39,14}, -{70,39,15}, -{70,39,16}, -{70,39,17}, -{70,39,18}, -{70,39,19}, -{70,39,20}, -{70,39,21}, -{70,39,22}, -{70,39,23}, -{70,39,24}, -{70,39,25}, -{70,39,26}, -{70,39,27}, -{70,39,28}, -{70,39,29}, -{70,39,30}, -{70,39,31}, -{70,39,32}, -{70,39,33}, -{70,39,34}, -{70,39,35}, -{70,39,36}, -{70,39,37}, -{70,39,38}, -{70,39,39}, -{70,39,40}, -{70,39,41}, -{70,39,42}, -{70,39,43}, -{70,39,44}, -{70,39,45}, -{70,39,46}, -{70,39,47}, -{70,39,48}, -{70,39,49}, -{70,40,-46}, -{70,40,-45}, -{70,40,-44}, -{70,40,-43}, -{70,40,-42}, -{70,40,-41}, -{70,40,-40}, -{70,40,-39}, -{70,40,-38}, -{70,40,-37}, -{70,40,-36}, -{70,40,-35}, -{70,40,-34}, -{70,40,-33}, -{70,40,-32}, -{70,40,-31}, -{70,40,-30}, -{70,40,-29}, -{70,40,-28}, -{70,40,-27}, -{70,40,-26}, -{70,40,-25}, -{70,40,-24}, -{70,40,-23}, -{70,40,-22}, -{70,40,-21}, -{70,40,-20}, -{70,40,-19}, -{70,40,-18}, -{70,40,-17}, -{70,40,-16}, -{70,40,-15}, -{70,40,-14}, -{70,40,-13}, -{70,40,-12}, -{70,40,-11}, -{70,40,-10}, -{70,40,-9}, -{70,40,-8}, -{70,40,-7}, -{70,40,-6}, -{70,40,-5}, -{70,40,-4}, -{70,40,-3}, -{70,40,-2}, -{70,40,-1}, -{70,40,0}, -{70,40,1}, -{70,40,2}, -{70,40,3}, -{70,40,4}, -{70,40,5}, -{70,40,6}, -{70,40,7}, -{70,40,8}, -{70,40,9}, -{70,40,10}, -{70,40,11}, -{70,40,12}, -{70,40,13}, -{70,40,14}, -{70,40,15}, -{70,40,16}, -{70,40,17}, -{70,40,18}, -{70,40,19}, -{70,40,20}, -{70,40,21}, -{70,40,22}, -{70,40,23}, -{70,40,24}, -{70,40,25}, -{70,40,26}, -{70,40,27}, -{70,40,28}, -{70,40,29}, -{70,40,30}, -{70,40,31}, -{70,40,32}, -{70,40,33}, -{70,40,34}, -{70,40,35}, -{70,40,36}, -{70,40,37}, -{70,40,38}, -{70,40,39}, -{70,40,40}, -{70,40,41}, -{70,40,42}, -{70,40,43}, -{70,41,-46}, -{70,41,-45}, -{70,41,-44}, -{70,41,-43}, -{70,41,-42}, -{70,41,-41}, -{70,41,-40}, -{70,41,-39}, -{70,41,-38}, -{70,41,-37}, -{70,41,-36}, -{70,41,-35}, -{70,41,-34}, -{70,41,-33}, -{70,41,-32}, -{70,41,-31}, -{70,41,-30}, -{70,41,-29}, -{70,41,-28}, -{70,41,-27}, -{70,41,-26}, -{70,41,-25}, -{70,41,-24}, -{70,41,-23}, -{70,41,-22}, -{70,41,-21}, -{70,41,-20}, -{70,41,-19}, -{70,41,-18}, -{70,41,-17}, -{70,41,-16}, -{70,41,-15}, -{70,41,-14}, -{70,41,-13}, -{70,41,-12}, -{70,41,-11}, -{70,41,-10}, -{70,41,-9}, -{70,41,-8}, -{70,41,-7}, -{70,41,-6}, -{70,41,-5}, -{70,41,-4}, -{70,41,-3}, -{70,41,-2}, -{70,41,-1}, -{70,41,0}, -{70,41,1}, -{70,41,2}, -{70,41,3}, -{70,41,4}, -{70,41,5}, -{70,41,6}, -{70,41,7}, -{70,41,8}, -{70,41,9}, -{70,41,10}, -{70,41,11}, -{70,41,12}, -{70,41,13}, -{70,41,14}, -{70,41,15}, -{70,41,16}, -{70,41,17}, -{70,41,18}, -{70,41,19}, -{70,41,20}, -{70,41,21}, -{70,41,22}, -{70,41,23}, -{70,41,24}, -{70,41,25}, -{70,41,26}, -{70,41,27}, -{70,41,28}, -{70,41,29}, -{70,41,30}, -{70,41,31}, -{70,41,32}, -{70,41,33}, -{70,41,34}, -{70,41,35}, -{70,41,36}, -{70,41,37}, -{70,41,38}, -{70,42,-46}, -{70,42,-45}, -{70,42,-44}, -{70,42,-43}, -{70,42,-42}, -{70,42,-41}, -{70,42,-40}, -{70,42,-39}, -{70,42,-38}, -{70,42,-37}, -{70,42,-36}, -{70,42,-35}, -{70,42,-34}, -{70,42,-33}, -{70,42,-32}, -{70,42,-31}, -{70,42,-30}, -{70,42,-29}, -{70,42,-28}, -{70,42,-27}, -{70,42,-26}, -{70,42,-25}, -{70,42,-24}, -{70,42,-23}, -{70,42,-22}, -{70,42,-21}, -{70,42,-20}, -{70,42,-19}, -{70,42,-18}, -{70,42,-17}, -{70,42,-16}, -{70,42,-15}, -{70,42,-14}, -{70,42,-13}, -{70,42,-12}, -{70,42,-11}, -{70,42,-10}, -{70,42,-9}, -{70,42,-8}, -{70,42,-7}, -{70,42,-6}, -{70,42,-5}, -{70,42,-4}, -{70,42,-3}, -{70,42,-2}, -{70,42,-1}, -{70,42,0}, -{70,42,1}, -{70,42,2}, -{70,42,3}, -{70,42,4}, -{70,42,5}, -{70,42,6}, -{70,42,7}, -{70,42,8}, -{70,42,9}, -{70,42,10}, -{70,42,11}, -{70,42,12}, -{70,42,13}, -{70,42,14}, -{70,42,15}, -{70,42,16}, -{70,42,17}, -{70,42,18}, -{70,42,19}, -{70,42,20}, -{70,42,21}, -{70,42,22}, -{70,42,23}, -{70,42,24}, -{70,42,25}, -{70,42,26}, -{70,42,27}, -{70,42,28}, -{70,42,29}, -{70,42,30}, -{70,42,31}, -{70,42,32}, -{70,42,33}, -{70,43,-46}, -{70,43,-45}, -{70,43,-44}, -{70,43,-43}, -{70,43,-42}, -{70,43,-41}, -{70,43,-40}, -{70,43,-39}, -{70,43,-38}, -{70,43,-37}, -{70,43,-36}, -{70,43,-35}, -{70,43,-34}, -{70,43,-33}, -{70,43,-32}, -{70,43,-31}, -{70,43,-30}, -{70,43,-29}, -{70,43,-28}, -{70,43,-27}, -{70,43,-26}, -{70,43,-25}, -{70,43,-24}, -{70,43,-23}, -{70,43,-22}, -{70,43,-21}, -{70,43,-20}, -{70,43,-19}, -{70,43,-18}, -{70,43,-17}, -{70,43,-16}, -{70,43,-15}, -{70,43,-14}, -{70,43,-13}, -{70,43,-12}, -{70,43,-11}, -{70,43,-10}, -{70,43,-9}, -{70,43,-8}, -{70,43,-7}, -{70,43,-6}, -{70,43,-5}, -{70,43,-4}, -{70,43,-3}, -{70,43,-2}, -{70,43,-1}, -{70,43,0}, -{70,43,1}, -{70,43,2}, -{70,43,3}, -{70,43,4}, -{70,43,5}, -{70,43,6}, -{70,43,7}, -{70,43,8}, -{70,43,9}, -{70,43,10}, -{70,43,11}, -{70,43,12}, -{70,43,13}, -{70,43,14}, -{70,43,15}, -{70,43,16}, -{70,43,17}, -{70,43,18}, -{70,43,19}, -{70,43,20}, -{70,43,21}, -{70,43,22}, -{70,43,23}, -{70,43,24}, -{70,43,25}, -{70,43,26}, -{70,43,27}, -{70,43,28}, -{70,44,-46}, -{70,44,-45}, -{70,44,-44}, -{70,44,-43}, -{70,44,-42}, -{70,44,-41}, -{70,44,-40}, -{70,44,-39}, -{70,44,-38}, -{70,44,-37}, -{70,44,-36}, -{70,44,-35}, -{70,44,-34}, -{70,44,-33}, -{70,44,-32}, -{70,44,-31}, -{70,44,-30}, -{70,44,-29}, -{70,44,-28}, -{70,44,-27}, -{70,44,-26}, -{70,44,-25}, -{70,44,-24}, -{70,44,-23}, -{70,44,-22}, -{70,44,-21}, -{70,44,-20}, -{70,44,-19}, -{70,44,-18}, -{70,44,-17}, -{70,44,-16}, -{70,44,-15}, -{70,44,-14}, -{70,44,-13}, -{70,44,-12}, -{70,44,-11}, -{70,44,-10}, -{70,44,-9}, -{70,44,-8}, -{70,44,-7}, -{70,44,-6}, -{70,44,-5}, -{70,44,-4}, -{70,44,-3}, -{70,44,-2}, -{70,44,-1}, -{70,44,0}, -{70,44,1}, -{70,44,2}, -{70,44,3}, -{70,44,4}, -{70,44,5}, -{70,44,6}, -{70,44,7}, -{70,44,8}, -{70,44,9}, -{70,44,10}, -{70,44,11}, -{70,44,12}, -{70,44,13}, -{70,44,14}, -{70,44,15}, -{70,44,16}, -{70,44,17}, -{70,44,18}, -{70,44,19}, -{70,44,20}, -{70,44,21}, -{70,44,22}, -{70,44,23}, -{70,44,24}, -{70,45,-46}, -{70,45,-45}, -{70,45,-44}, -{70,45,-43}, -{70,45,-42}, -{70,45,-41}, -{70,45,-40}, -{70,45,-39}, -{70,45,-38}, -{70,45,-37}, -{70,45,-36}, -{70,45,-35}, -{70,45,-34}, -{70,45,-33}, -{70,45,-32}, -{70,45,-31}, -{70,45,-30}, -{70,45,-29}, -{70,45,-28}, -{70,45,-27}, -{70,45,-26}, -{70,45,-25}, -{70,45,-24}, -{70,45,-23}, -{70,45,-22}, -{70,45,-21}, -{70,45,-20}, -{70,45,-19}, -{70,45,-18}, -{70,45,-17}, -{70,45,-16}, -{70,45,-15}, -{70,45,-14}, -{70,45,-13}, -{70,45,-12}, -{70,45,-11}, -{70,45,-10}, -{70,45,-9}, -{70,45,-8}, -{70,45,-7}, -{70,45,-6}, -{70,45,-5}, -{70,45,-4}, -{70,45,-3}, -{70,45,-2}, -{70,45,-1}, -{70,45,0}, -{70,45,1}, -{70,45,2}, -{70,45,3}, -{70,45,4}, -{70,45,5}, -{70,45,6}, -{70,45,7}, -{70,45,8}, -{70,45,9}, -{70,45,10}, -{70,45,11}, -{70,45,12}, -{70,45,13}, -{70,45,14}, -{70,45,15}, -{70,45,16}, -{70,45,17}, -{70,45,18}, -{70,45,19}, -{70,45,20}, -{70,46,-46}, -{70,46,-45}, -{70,46,-44}, -{70,46,-43}, -{70,46,-42}, -{70,46,-41}, -{70,46,-40}, -{70,46,-39}, -{70,46,-38}, -{70,46,-37}, -{70,46,-36}, -{70,46,-35}, -{70,46,-34}, -{70,46,-33}, -{70,46,-32}, -{70,46,-31}, -{70,46,-30}, -{70,46,-29}, -{70,46,-28}, -{70,46,-27}, -{70,46,-26}, -{70,46,-25}, -{70,46,-24}, -{70,46,-23}, -{70,46,-22}, -{70,46,-21}, -{70,46,-20}, -{70,46,-19}, -{70,46,-18}, -{70,46,-17}, -{70,46,-16}, -{70,46,-15}, -{70,46,-14}, -{70,46,-13}, -{70,46,-12}, -{70,46,-11}, -{70,46,-10}, -{70,46,-9}, -{70,46,-8}, -{70,46,-7}, -{70,46,-6}, -{70,46,-5}, -{70,46,-4}, -{70,46,-3}, -{70,46,-2}, -{70,46,-1}, -{70,46,0}, -{70,46,1}, -{70,46,2}, -{70,46,3}, -{70,46,4}, -{70,46,5}, -{70,46,6}, -{70,46,7}, -{70,46,8}, -{70,46,9}, -{70,46,10}, -{70,46,11}, -{70,46,12}, -{70,46,13}, -{70,46,14}, -{70,46,15}, -{70,46,16}, -{70,47,-45}, -{70,47,-44}, -{70,47,-43}, -{70,47,-42}, -{70,47,-41}, -{70,47,-40}, -{70,47,-39}, -{70,47,-38}, -{70,47,-37}, -{70,47,-36}, -{70,47,-35}, -{70,47,-34}, -{70,47,-33}, -{70,47,-32}, -{70,47,-31}, -{70,47,-30}, -{70,47,-29}, -{70,47,-28}, -{70,47,-27}, -{70,47,-26}, -{70,47,-25}, -{70,47,-24}, -{70,47,-23}, -{70,47,-22}, -{70,47,-21}, -{70,47,-20}, -{70,47,-19}, -{70,47,-18}, -{70,47,-17}, -{70,47,-16}, -{70,47,-15}, -{70,47,-14}, -{70,47,-13}, -{70,47,-12}, -{70,47,-11}, -{70,47,-10}, -{70,47,-9}, -{70,47,-8}, -{70,47,-7}, -{70,47,-6}, -{70,47,-5}, -{70,47,-4}, -{70,47,-3}, -{70,47,-2}, -{70,47,-1}, -{70,47,0}, -{70,47,1}, -{70,47,2}, -{70,47,3}, -{70,47,4}, -{70,47,5}, -{70,47,6}, -{70,47,7}, -{70,47,8}, -{70,47,9}, -{70,47,10}, -{70,47,11}, -{70,47,12}, -{70,47,13}, -{70,48,-45}, -{70,48,-44}, -{70,48,-43}, -{70,48,-42}, -{70,48,-41}, -{70,48,-40}, -{70,48,-39}, -{70,48,-38}, -{70,48,-37}, -{70,48,-36}, -{70,48,-35}, -{70,48,-34}, -{70,48,-33}, -{70,48,-32}, -{70,48,-31}, -{70,48,-30}, -{70,48,-29}, -{70,48,-28}, -{70,48,-27}, -{70,48,-26}, -{70,48,-25}, -{70,48,-24}, -{70,48,-23}, -{70,48,-22}, -{70,48,-21}, -{70,48,-20}, -{70,48,-19}, -{70,48,-18}, -{70,48,-17}, -{70,48,-16}, -{70,48,-15}, -{70,48,-14}, -{70,48,-13}, -{70,48,-12}, -{70,48,-11}, -{70,48,-10}, -{70,48,-9}, -{70,48,-8}, -{70,48,-7}, -{70,48,-6}, -{70,48,-5}, -{70,48,-4}, -{70,48,-3}, -{70,48,-2}, -{70,48,-1}, -{70,48,0}, -{70,48,1}, -{70,48,2}, -{70,48,3}, -{70,48,4}, -{70,48,5}, -{70,48,6}, -{70,48,7}, -{70,48,8}, -{70,48,9}, -{70,49,-45}, -{70,49,-44}, -{70,49,-43}, -{70,49,-42}, -{70,49,-41}, -{70,49,-40}, -{70,49,-39}, -{70,49,-38}, -{70,49,-37}, -{70,49,-36}, -{70,49,-35}, -{70,49,-34}, -{70,49,-33}, -{70,49,-32}, -{70,49,-31}, -{70,49,-30}, -{70,49,-29}, -{70,49,-28}, -{70,49,-27}, -{70,49,-26}, -{70,49,-25}, -{70,49,-24}, -{70,49,-23}, -{70,49,-22}, -{70,49,-21}, -{70,49,-20}, -{70,49,-19}, -{70,49,-18}, -{70,49,-17}, -{70,49,-16}, -{70,49,-15}, -{70,49,-14}, -{70,49,-13}, -{70,49,-12}, -{70,49,-11}, -{70,49,-10}, -{70,49,-9}, -{70,49,-8}, -{70,49,-7}, -{70,49,-6}, -{70,49,-5}, -{70,49,-4}, -{70,49,-3}, -{70,49,-2}, -{70,49,-1}, -{70,49,0}, -{70,49,1}, -{70,49,2}, -{70,49,3}, -{70,49,4}, -{70,49,5}, -{70,49,6}, -{70,50,-45}, -{70,50,-44}, -{70,50,-43}, -{70,50,-42}, -{70,50,-41}, -{70,50,-40}, -{70,50,-39}, -{70,50,-38}, -{70,50,-37}, -{70,50,-36}, -{70,50,-35}, -{70,50,-34}, -{70,50,-33}, -{70,50,-32}, -{70,50,-31}, -{70,50,-30}, -{70,50,-29}, -{70,50,-28}, -{70,50,-27}, -{70,50,-26}, -{70,50,-25}, -{70,50,-24}, -{70,50,-23}, -{70,50,-22}, -{70,50,-21}, -{70,50,-20}, -{70,50,-19}, -{70,50,-18}, -{70,50,-17}, -{70,50,-16}, -{70,50,-15}, -{70,50,-14}, -{70,50,-13}, -{70,50,-12}, -{70,50,-11}, -{70,50,-10}, -{70,50,-9}, -{70,50,-8}, -{70,50,-7}, -{70,50,-6}, -{70,50,-5}, -{70,50,-4}, -{70,50,-3}, -{70,50,-2}, -{70,50,-1}, -{70,50,0}, -{70,50,1}, -{70,50,2}, -{70,50,3}, -{70,51,-45}, -{70,51,-44}, -{70,51,-43}, -{70,51,-42}, -{70,51,-41}, -{70,51,-40}, -{70,51,-39}, -{70,51,-38}, -{70,51,-37}, -{70,51,-36}, -{70,51,-35}, -{70,51,-34}, -{70,51,-33}, -{70,51,-32}, -{70,51,-31}, -{70,51,-30}, -{70,51,-29}, -{70,51,-28}, -{70,51,-27}, -{70,51,-26}, -{70,51,-25}, -{70,51,-24}, -{70,51,-23}, -{70,51,-22}, -{70,51,-21}, -{70,51,-20}, -{70,51,-19}, -{70,51,-18}, -{70,51,-17}, -{70,51,-16}, -{70,51,-15}, -{70,51,-14}, -{70,51,-13}, -{70,51,-12}, -{70,51,-11}, -{70,51,-10}, -{70,51,-9}, -{70,51,-8}, -{70,51,-7}, -{70,51,-6}, -{70,51,-5}, -{70,51,-4}, -{70,51,-3}, -{70,51,-2}, -{70,51,-1}, -{70,51,0}, -{70,52,-45}, -{70,52,-44}, -{70,52,-43}, -{70,52,-42}, -{70,52,-41}, -{70,52,-40}, -{70,52,-39}, -{70,52,-38}, -{70,52,-37}, -{70,52,-36}, -{70,52,-35}, -{70,52,-34}, -{70,52,-33}, -{70,52,-32}, -{70,52,-31}, -{70,52,-30}, -{70,52,-29}, -{70,52,-28}, -{70,52,-27}, -{70,52,-26}, -{70,52,-25}, -{70,52,-24}, -{70,52,-23}, -{70,52,-22}, -{70,52,-21}, -{70,52,-20}, -{70,52,-19}, -{70,52,-18}, -{70,52,-17}, -{70,52,-16}, -{70,52,-15}, -{70,52,-14}, -{70,52,-13}, -{70,52,-12}, -{70,52,-11}, -{70,52,-10}, -{70,52,-9}, -{70,52,-8}, -{70,52,-7}, -{70,52,-6}, -{70,52,-5}, -{70,52,-4}, -{70,52,-3}, -{70,53,-45}, -{70,53,-44}, -{70,53,-43}, -{70,53,-42}, -{70,53,-41}, -{70,53,-40}, -{70,53,-39}, -{70,53,-38}, -{70,53,-37}, -{70,53,-36}, -{70,53,-35}, -{70,53,-34}, -{70,53,-33}, -{70,53,-32}, -{70,53,-31}, -{70,53,-30}, -{70,53,-29}, -{70,53,-28}, -{70,53,-27}, -{70,53,-26}, -{70,53,-25}, -{70,53,-24}, -{70,53,-23}, -{70,53,-22}, -{70,53,-21}, -{70,53,-20}, -{70,53,-19}, -{70,53,-18}, -{70,53,-17}, -{70,53,-16}, -{70,53,-15}, -{70,53,-14}, -{70,53,-13}, -{70,53,-12}, -{70,53,-11}, -{70,53,-10}, -{70,53,-9}, -{70,53,-8}, -{70,53,-7}, -{70,53,-6}, -{70,54,-45}, -{70,54,-44}, -{70,54,-43}, -{70,54,-42}, -{70,54,-41}, -{70,54,-40}, -{70,54,-39}, -{70,54,-38}, -{70,54,-37}, -{70,54,-36}, -{70,54,-35}, -{70,54,-34}, -{70,54,-33}, -{70,54,-32}, -{70,54,-31}, -{70,54,-30}, -{70,54,-29}, -{70,54,-28}, -{70,54,-27}, -{70,54,-26}, -{70,54,-25}, -{70,54,-24}, -{70,54,-23}, -{70,54,-22}, -{70,54,-21}, -{70,54,-20}, -{70,54,-19}, -{70,54,-18}, -{70,54,-17}, -{70,54,-16}, -{70,54,-15}, -{70,54,-14}, -{70,54,-13}, -{70,54,-12}, -{70,54,-11}, -{70,54,-10}, -{70,54,-9}, -{70,54,-8}, -{70,55,-45}, -{70,55,-44}, -{70,55,-43}, -{70,55,-42}, -{70,55,-41}, -{70,55,-40}, -{70,55,-39}, -{70,55,-38}, -{70,55,-37}, -{70,55,-36}, -{70,55,-35}, -{70,55,-34}, -{70,55,-33}, -{70,55,-32}, -{70,55,-31}, -{70,55,-30}, -{70,55,-29}, -{70,55,-28}, -{70,55,-27}, -{70,55,-26}, -{70,55,-25}, -{70,55,-24}, -{70,55,-23}, -{70,55,-22}, -{70,55,-21}, -{70,55,-20}, -{70,55,-19}, -{70,55,-18}, -{70,55,-17}, -{70,55,-16}, -{70,55,-15}, -{70,55,-14}, -{70,55,-13}, -{70,55,-12}, -{70,55,-11}, -{70,56,-45}, -{70,56,-44}, -{70,56,-43}, -{70,56,-42}, -{70,56,-41}, -{70,56,-40}, -{70,56,-39}, -{70,56,-38}, -{70,56,-37}, -{70,56,-36}, -{70,56,-35}, -{70,56,-34}, -{70,56,-33}, -{70,56,-32}, -{70,56,-31}, -{70,56,-30}, -{70,56,-29}, -{70,56,-28}, -{70,56,-27}, -{70,56,-26}, -{70,56,-25}, -{70,56,-24}, -{70,56,-23}, -{70,56,-22}, -{70,56,-21}, -{70,56,-20}, -{70,56,-19}, -{70,56,-18}, -{70,56,-17}, -{70,56,-16}, -{70,56,-15}, -{70,56,-14}, -{70,57,-45}, -{70,57,-44}, -{70,57,-43}, -{70,57,-42}, -{70,57,-41}, -{70,57,-40}, -{70,57,-39}, -{70,57,-38}, -{70,57,-37}, -{70,57,-36}, -{70,57,-35}, -{70,57,-34}, -{70,57,-33}, -{70,57,-32}, -{70,57,-31}, -{70,57,-30}, -{70,57,-29}, -{70,57,-28}, -{70,57,-27}, -{70,57,-26}, -{70,57,-25}, -{70,57,-24}, -{70,57,-23}, -{70,57,-22}, -{70,57,-21}, -{70,57,-20}, -{70,57,-19}, -{70,57,-18}, -{70,57,-17}, -{70,57,-16}, -{70,58,-45}, -{70,58,-44}, -{70,58,-43}, -{70,58,-42}, -{70,58,-41}, -{70,58,-40}, -{70,58,-39}, -{70,58,-38}, -{70,58,-37}, -{70,58,-36}, -{70,58,-35}, -{70,58,-34}, -{70,58,-33}, -{70,58,-32}, -{70,58,-31}, -{70,58,-30}, -{70,58,-29}, -{70,58,-28}, -{70,58,-27}, -{70,58,-26}, -{70,58,-25}, -{70,58,-24}, -{70,58,-23}, -{70,58,-22}, -{70,58,-21}, -{70,58,-20}, -{70,58,-19}, -{70,59,-45}, -{70,59,-44}, -{70,59,-43}, -{70,59,-42}, -{70,59,-41}, -{70,59,-40}, -{70,59,-39}, -{70,59,-38}, -{70,59,-37}, -{70,59,-36}, -{70,59,-35}, -{70,59,-34}, -{70,59,-33}, -{70,59,-32}, -{70,59,-31}, -{70,59,-30}, -{70,59,-29}, -{70,59,-28}, -{70,59,-27}, -{70,59,-26}, -{70,59,-25}, -{70,59,-24}, -{70,59,-23}, -{70,59,-22}, -{70,59,-21}, -{70,60,-45}, -{70,60,-44}, -{70,60,-43}, -{70,60,-42}, -{70,60,-41}, -{70,60,-40}, -{70,60,-39}, -{70,60,-38}, -{70,60,-37}, -{70,60,-36}, -{70,60,-35}, -{70,60,-34}, -{70,60,-33}, -{70,60,-32}, -{70,60,-31}, -{70,60,-30}, -{70,60,-29}, -{70,60,-28}, -{70,60,-27}, -{70,60,-26}, -{70,60,-25}, -{70,60,-24}, -{70,60,-23}, -{70,61,-45}, -{70,61,-44}, -{70,61,-43}, -{70,61,-42}, -{70,61,-41}, -{70,61,-40}, -{70,61,-39}, -{70,61,-38}, -{70,61,-37}, -{70,61,-36}, -{70,61,-35}, -{70,61,-34}, -{70,61,-33}, -{70,61,-32}, -{70,61,-31}, -{70,61,-30}, -{70,61,-29}, -{70,61,-28}, -{70,61,-27}, -{70,61,-26}, -{70,62,-45}, -{70,62,-44}, -{70,62,-43}, -{70,62,-42}, -{70,62,-41}, -{70,62,-40}, -{70,62,-39}, -{70,62,-38}, -{70,62,-37}, -{70,62,-36}, -{70,62,-35}, -{70,62,-34}, -{70,62,-33}, -{70,62,-32}, -{70,62,-31}, -{70,62,-30}, -{70,62,-29}, -{70,62,-28}, -{70,63,-45}, -{70,63,-44}, -{70,63,-43}, -{70,63,-42}, -{70,63,-41}, -{70,63,-40}, -{70,63,-39}, -{70,63,-38}, -{70,63,-37}, -{70,63,-36}, -{70,63,-35}, -{70,63,-34}, -{70,63,-33}, -{70,63,-32}, -{70,63,-31}, -{70,63,-30}, -{70,64,-45}, -{70,64,-44}, -{70,64,-43}, -{70,64,-42}, -{70,64,-41}, -{70,64,-40}, -{70,64,-39}, -{70,64,-38}, -{70,64,-37}, -{70,64,-36}, -{70,64,-35}, -{70,64,-34}, -{70,64,-33}, -{70,64,-32}, -{70,65,-45}, -{70,65,-44}, -{70,65,-43}, -{70,65,-42}, -{70,65,-41}, -{70,65,-40}, -{70,65,-39}, -{70,65,-38}, -{70,65,-37}, -{70,65,-36}, -{70,65,-35}, -{70,65,-34}, -{70,66,-45}, -{70,66,-44}, -{70,66,-43}, -{70,66,-42}, -{70,66,-41}, -{70,66,-40}, -{70,66,-39}, -{70,66,-38}, -{70,66,-37}, -{70,66,-36}, -{70,67,-45}, -{70,67,-44}, -{70,67,-43}, -{70,67,-42}, -{70,67,-41}, -{70,67,-40}, -{70,67,-39}, -{70,67,-38}, -{70,68,-45}, -{70,68,-44}, -{70,68,-43}, -{70,68,-42}, -{70,68,-41}, -{70,68,-40}, -{70,69,-45}, -{70,69,-44}, -{70,69,-43}, -{70,69,-42}, -{70,70,-45}, -{70,70,-44}, -{71,-72,68}, -{71,-72,69}, -{71,-71,63}, -{71,-71,64}, -{71,-71,65}, -{71,-71,66}, -{71,-71,67}, -{71,-71,68}, -{71,-71,69}, -{71,-70,59}, -{71,-70,60}, -{71,-70,61}, -{71,-70,62}, -{71,-70,63}, -{71,-70,64}, -{71,-70,65}, -{71,-70,66}, -{71,-70,67}, -{71,-70,68}, -{71,-70,69}, -{71,-70,70}, -{71,-69,55}, -{71,-69,56}, -{71,-69,57}, -{71,-69,58}, -{71,-69,59}, -{71,-69,60}, -{71,-69,61}, -{71,-69,62}, -{71,-69,63}, -{71,-69,64}, -{71,-69,65}, -{71,-69,66}, -{71,-69,67}, -{71,-69,68}, -{71,-69,69}, -{71,-69,70}, -{71,-68,52}, -{71,-68,53}, -{71,-68,54}, -{71,-68,55}, -{71,-68,56}, -{71,-68,57}, -{71,-68,58}, -{71,-68,59}, -{71,-68,60}, -{71,-68,61}, -{71,-68,62}, -{71,-68,63}, -{71,-68,64}, -{71,-68,65}, -{71,-68,66}, -{71,-68,67}, -{71,-68,68}, -{71,-68,69}, -{71,-68,70}, -{71,-67,48}, -{71,-67,49}, -{71,-67,50}, -{71,-67,51}, -{71,-67,52}, -{71,-67,53}, -{71,-67,54}, -{71,-67,55}, -{71,-67,56}, -{71,-67,57}, -{71,-67,58}, -{71,-67,59}, -{71,-67,60}, -{71,-67,61}, -{71,-67,62}, -{71,-67,63}, -{71,-67,64}, -{71,-67,65}, -{71,-67,66}, -{71,-67,67}, -{71,-67,68}, -{71,-67,69}, -{71,-67,70}, -{71,-66,45}, -{71,-66,46}, -{71,-66,47}, -{71,-66,48}, -{71,-66,49}, -{71,-66,50}, -{71,-66,51}, -{71,-66,52}, -{71,-66,53}, -{71,-66,54}, -{71,-66,55}, -{71,-66,56}, -{71,-66,57}, -{71,-66,58}, -{71,-66,59}, -{71,-66,60}, -{71,-66,61}, -{71,-66,62}, -{71,-66,63}, -{71,-66,64}, -{71,-66,65}, -{71,-66,66}, -{71,-66,67}, -{71,-66,68}, -{71,-66,69}, -{71,-66,70}, -{71,-65,42}, -{71,-65,43}, -{71,-65,44}, -{71,-65,45}, -{71,-65,46}, -{71,-65,47}, -{71,-65,48}, -{71,-65,49}, -{71,-65,50}, -{71,-65,51}, -{71,-65,52}, -{71,-65,53}, -{71,-65,54}, -{71,-65,55}, -{71,-65,56}, -{71,-65,57}, -{71,-65,58}, -{71,-65,59}, -{71,-65,60}, -{71,-65,61}, -{71,-65,62}, -{71,-65,63}, -{71,-65,64}, -{71,-65,65}, -{71,-65,66}, -{71,-65,67}, -{71,-65,68}, -{71,-65,69}, -{71,-65,70}, -{71,-64,39}, -{71,-64,40}, -{71,-64,41}, -{71,-64,42}, -{71,-64,43}, -{71,-64,44}, -{71,-64,45}, -{71,-64,46}, -{71,-64,47}, -{71,-64,48}, -{71,-64,49}, -{71,-64,50}, -{71,-64,51}, -{71,-64,52}, -{71,-64,53}, -{71,-64,54}, -{71,-64,55}, -{71,-64,56}, -{71,-64,57}, -{71,-64,58}, -{71,-64,59}, -{71,-64,60}, -{71,-64,61}, -{71,-64,62}, -{71,-64,63}, -{71,-64,64}, -{71,-64,65}, -{71,-64,66}, -{71,-64,67}, -{71,-64,68}, -{71,-64,69}, -{71,-64,70}, -{71,-63,36}, -{71,-63,37}, -{71,-63,38}, -{71,-63,39}, -{71,-63,40}, -{71,-63,41}, -{71,-63,42}, -{71,-63,43}, -{71,-63,44}, -{71,-63,45}, -{71,-63,46}, -{71,-63,47}, -{71,-63,48}, -{71,-63,49}, -{71,-63,50}, -{71,-63,51}, -{71,-63,52}, -{71,-63,53}, -{71,-63,54}, -{71,-63,55}, -{71,-63,56}, -{71,-63,57}, -{71,-63,58}, -{71,-63,59}, -{71,-63,60}, -{71,-63,61}, -{71,-63,62}, -{71,-63,63}, -{71,-63,64}, -{71,-63,65}, -{71,-63,66}, -{71,-63,67}, -{71,-63,68}, -{71,-63,69}, -{71,-63,70}, -{71,-62,34}, -{71,-62,35}, -{71,-62,36}, -{71,-62,37}, -{71,-62,38}, -{71,-62,39}, -{71,-62,40}, -{71,-62,41}, -{71,-62,42}, -{71,-62,43}, -{71,-62,44}, -{71,-62,45}, -{71,-62,46}, -{71,-62,47}, -{71,-62,48}, -{71,-62,49}, -{71,-62,50}, -{71,-62,51}, -{71,-62,52}, -{71,-62,53}, -{71,-62,54}, -{71,-62,55}, -{71,-62,56}, -{71,-62,57}, -{71,-62,58}, -{71,-62,59}, -{71,-62,60}, -{71,-62,61}, -{71,-62,62}, -{71,-62,63}, -{71,-62,64}, -{71,-62,65}, -{71,-62,66}, -{71,-62,67}, -{71,-62,68}, -{71,-62,69}, -{71,-62,70}, -{71,-61,31}, -{71,-61,32}, -{71,-61,33}, -{71,-61,34}, -{71,-61,35}, -{71,-61,36}, -{71,-61,37}, -{71,-61,38}, -{71,-61,39}, -{71,-61,40}, -{71,-61,41}, -{71,-61,42}, -{71,-61,43}, -{71,-61,44}, -{71,-61,45}, -{71,-61,46}, -{71,-61,47}, -{71,-61,48}, -{71,-61,49}, -{71,-61,50}, -{71,-61,51}, -{71,-61,52}, -{71,-61,53}, -{71,-61,54}, -{71,-61,55}, -{71,-61,56}, -{71,-61,57}, -{71,-61,58}, -{71,-61,59}, -{71,-61,60}, -{71,-61,61}, -{71,-61,62}, -{71,-61,63}, -{71,-61,64}, -{71,-61,65}, -{71,-61,66}, -{71,-61,67}, -{71,-61,68}, -{71,-61,69}, -{71,-61,70}, -{71,-60,29}, -{71,-60,30}, -{71,-60,31}, -{71,-60,32}, -{71,-60,33}, -{71,-60,34}, -{71,-60,35}, -{71,-60,36}, -{71,-60,37}, -{71,-60,38}, -{71,-60,39}, -{71,-60,40}, -{71,-60,41}, -{71,-60,42}, -{71,-60,43}, -{71,-60,44}, -{71,-60,45}, -{71,-60,46}, -{71,-60,47}, -{71,-60,48}, -{71,-60,49}, -{71,-60,50}, -{71,-60,51}, -{71,-60,52}, -{71,-60,53}, -{71,-60,54}, -{71,-60,55}, -{71,-60,56}, -{71,-60,57}, -{71,-60,58}, -{71,-60,59}, -{71,-60,60}, -{71,-60,61}, -{71,-60,62}, -{71,-60,63}, -{71,-60,64}, -{71,-60,65}, -{71,-60,66}, -{71,-60,67}, -{71,-60,68}, -{71,-60,69}, -{71,-60,70}, -{71,-59,26}, -{71,-59,27}, -{71,-59,28}, -{71,-59,29}, -{71,-59,30}, -{71,-59,31}, -{71,-59,32}, -{71,-59,33}, -{71,-59,34}, -{71,-59,35}, -{71,-59,36}, -{71,-59,37}, -{71,-59,38}, -{71,-59,39}, -{71,-59,40}, -{71,-59,41}, -{71,-59,42}, -{71,-59,43}, -{71,-59,44}, -{71,-59,45}, -{71,-59,46}, -{71,-59,47}, -{71,-59,48}, -{71,-59,49}, -{71,-59,50}, -{71,-59,51}, -{71,-59,52}, -{71,-59,53}, -{71,-59,54}, -{71,-59,55}, -{71,-59,56}, -{71,-59,57}, -{71,-59,58}, -{71,-59,59}, -{71,-59,60}, -{71,-59,61}, -{71,-59,62}, -{71,-59,63}, -{71,-59,64}, -{71,-59,65}, -{71,-59,66}, -{71,-59,67}, -{71,-59,68}, -{71,-59,69}, -{71,-59,70}, -{71,-58,24}, -{71,-58,25}, -{71,-58,26}, -{71,-58,27}, -{71,-58,28}, -{71,-58,29}, -{71,-58,30}, -{71,-58,31}, -{71,-58,32}, -{71,-58,33}, -{71,-58,34}, -{71,-58,35}, -{71,-58,36}, -{71,-58,37}, -{71,-58,38}, -{71,-58,39}, -{71,-58,40}, -{71,-58,41}, -{71,-58,42}, -{71,-58,43}, -{71,-58,44}, -{71,-58,45}, -{71,-58,46}, -{71,-58,47}, -{71,-58,48}, -{71,-58,49}, -{71,-58,50}, -{71,-58,51}, -{71,-58,52}, -{71,-58,53}, -{71,-58,54}, -{71,-58,55}, -{71,-58,56}, -{71,-58,57}, -{71,-58,58}, -{71,-58,59}, -{71,-58,60}, -{71,-58,61}, -{71,-58,62}, -{71,-58,63}, -{71,-58,64}, -{71,-58,65}, -{71,-58,66}, -{71,-58,67}, -{71,-58,68}, -{71,-58,69}, -{71,-58,70}, -{71,-57,22}, -{71,-57,23}, -{71,-57,24}, -{71,-57,25}, -{71,-57,26}, -{71,-57,27}, -{71,-57,28}, -{71,-57,29}, -{71,-57,30}, -{71,-57,31}, -{71,-57,32}, -{71,-57,33}, -{71,-57,34}, -{71,-57,35}, -{71,-57,36}, -{71,-57,37}, -{71,-57,38}, -{71,-57,39}, -{71,-57,40}, -{71,-57,41}, -{71,-57,42}, -{71,-57,43}, -{71,-57,44}, -{71,-57,45}, -{71,-57,46}, -{71,-57,47}, -{71,-57,48}, -{71,-57,49}, -{71,-57,50}, -{71,-57,51}, -{71,-57,52}, -{71,-57,53}, -{71,-57,54}, -{71,-57,55}, -{71,-57,56}, -{71,-57,57}, -{71,-57,58}, -{71,-57,59}, -{71,-57,60}, -{71,-57,61}, -{71,-57,62}, -{71,-57,63}, -{71,-57,64}, -{71,-57,65}, -{71,-57,66}, -{71,-57,67}, -{71,-57,68}, -{71,-57,69}, -{71,-57,70}, -{71,-56,19}, -{71,-56,20}, -{71,-56,21}, -{71,-56,22}, -{71,-56,23}, -{71,-56,24}, -{71,-56,25}, -{71,-56,26}, -{71,-56,27}, -{71,-56,28}, -{71,-56,29}, -{71,-56,30}, -{71,-56,31}, -{71,-56,32}, -{71,-56,33}, -{71,-56,34}, -{71,-56,35}, -{71,-56,36}, -{71,-56,37}, -{71,-56,38}, -{71,-56,39}, -{71,-56,40}, -{71,-56,41}, -{71,-56,42}, -{71,-56,43}, -{71,-56,44}, -{71,-56,45}, -{71,-56,46}, -{71,-56,47}, -{71,-56,48}, -{71,-56,49}, -{71,-56,50}, -{71,-56,51}, -{71,-56,52}, -{71,-56,53}, -{71,-56,54}, -{71,-56,55}, -{71,-56,56}, -{71,-56,57}, -{71,-56,58}, -{71,-56,59}, -{71,-56,60}, -{71,-56,61}, -{71,-56,62}, -{71,-56,63}, -{71,-56,64}, -{71,-56,65}, -{71,-56,66}, -{71,-56,67}, -{71,-56,68}, -{71,-56,69}, -{71,-56,70}, -{71,-55,17}, -{71,-55,18}, -{71,-55,19}, -{71,-55,20}, -{71,-55,21}, -{71,-55,22}, -{71,-55,23}, -{71,-55,24}, -{71,-55,25}, -{71,-55,26}, -{71,-55,27}, -{71,-55,28}, -{71,-55,29}, -{71,-55,30}, -{71,-55,31}, -{71,-55,32}, -{71,-55,33}, -{71,-55,34}, -{71,-55,35}, -{71,-55,36}, -{71,-55,37}, -{71,-55,38}, -{71,-55,39}, -{71,-55,40}, -{71,-55,41}, -{71,-55,42}, -{71,-55,43}, -{71,-55,44}, -{71,-55,45}, -{71,-55,46}, -{71,-55,47}, -{71,-55,48}, -{71,-55,49}, -{71,-55,50}, -{71,-55,51}, -{71,-55,52}, -{71,-55,53}, -{71,-55,54}, -{71,-55,55}, -{71,-55,56}, -{71,-55,57}, -{71,-55,58}, -{71,-55,59}, -{71,-55,60}, -{71,-55,61}, -{71,-55,62}, -{71,-55,63}, -{71,-55,64}, -{71,-55,65}, -{71,-55,66}, -{71,-55,67}, -{71,-55,68}, -{71,-55,69}, -{71,-55,70}, -{71,-54,15}, -{71,-54,16}, -{71,-54,17}, -{71,-54,18}, -{71,-54,19}, -{71,-54,20}, -{71,-54,21}, -{71,-54,22}, -{71,-54,23}, -{71,-54,24}, -{71,-54,25}, -{71,-54,26}, -{71,-54,27}, -{71,-54,28}, -{71,-54,29}, -{71,-54,30}, -{71,-54,31}, -{71,-54,32}, -{71,-54,33}, -{71,-54,34}, -{71,-54,35}, -{71,-54,36}, -{71,-54,37}, -{71,-54,38}, -{71,-54,39}, -{71,-54,40}, -{71,-54,41}, -{71,-54,42}, -{71,-54,43}, -{71,-54,44}, -{71,-54,45}, -{71,-54,46}, -{71,-54,47}, -{71,-54,48}, -{71,-54,49}, -{71,-54,50}, -{71,-54,51}, -{71,-54,52}, -{71,-54,53}, -{71,-54,54}, -{71,-54,55}, -{71,-54,56}, -{71,-54,57}, -{71,-54,58}, -{71,-54,59}, -{71,-54,60}, -{71,-54,61}, -{71,-54,62}, -{71,-54,63}, -{71,-54,64}, -{71,-54,65}, -{71,-54,66}, -{71,-54,67}, -{71,-54,68}, -{71,-54,69}, -{71,-54,70}, -{71,-53,13}, -{71,-53,14}, -{71,-53,15}, -{71,-53,16}, -{71,-53,17}, -{71,-53,18}, -{71,-53,19}, -{71,-53,20}, -{71,-53,21}, -{71,-53,22}, -{71,-53,23}, -{71,-53,24}, -{71,-53,25}, -{71,-53,26}, -{71,-53,27}, -{71,-53,28}, -{71,-53,29}, -{71,-53,30}, -{71,-53,31}, -{71,-53,32}, -{71,-53,33}, -{71,-53,34}, -{71,-53,35}, -{71,-53,36}, -{71,-53,37}, -{71,-53,38}, -{71,-53,39}, -{71,-53,40}, -{71,-53,41}, -{71,-53,42}, -{71,-53,43}, -{71,-53,44}, -{71,-53,45}, -{71,-53,46}, -{71,-53,47}, -{71,-53,48}, -{71,-53,49}, -{71,-53,50}, -{71,-53,51}, -{71,-53,52}, -{71,-53,53}, -{71,-53,54}, -{71,-53,55}, -{71,-53,56}, -{71,-53,57}, -{71,-53,58}, -{71,-53,59}, -{71,-53,60}, -{71,-53,61}, -{71,-53,62}, -{71,-53,63}, -{71,-53,64}, -{71,-53,65}, -{71,-53,66}, -{71,-53,67}, -{71,-53,68}, -{71,-53,69}, -{71,-53,70}, -{71,-52,11}, -{71,-52,12}, -{71,-52,13}, -{71,-52,14}, -{71,-52,15}, -{71,-52,16}, -{71,-52,17}, -{71,-52,18}, -{71,-52,19}, -{71,-52,20}, -{71,-52,21}, -{71,-52,22}, -{71,-52,23}, -{71,-52,24}, -{71,-52,25}, -{71,-52,26}, -{71,-52,27}, -{71,-52,28}, -{71,-52,29}, -{71,-52,30}, -{71,-52,31}, -{71,-52,32}, -{71,-52,33}, -{71,-52,34}, -{71,-52,35}, -{71,-52,36}, -{71,-52,37}, -{71,-52,38}, -{71,-52,39}, -{71,-52,40}, -{71,-52,41}, -{71,-52,42}, -{71,-52,43}, -{71,-52,44}, -{71,-52,45}, -{71,-52,46}, -{71,-52,47}, -{71,-52,48}, -{71,-52,49}, -{71,-52,50}, -{71,-52,51}, -{71,-52,52}, -{71,-52,53}, -{71,-52,54}, -{71,-52,55}, -{71,-52,56}, -{71,-52,57}, -{71,-52,58}, -{71,-52,59}, -{71,-52,60}, -{71,-52,61}, -{71,-52,62}, -{71,-52,63}, -{71,-52,64}, -{71,-52,65}, -{71,-52,66}, -{71,-52,67}, -{71,-52,68}, -{71,-52,69}, -{71,-52,70}, -{71,-51,9}, -{71,-51,10}, -{71,-51,11}, -{71,-51,12}, -{71,-51,13}, -{71,-51,14}, -{71,-51,15}, -{71,-51,16}, -{71,-51,17}, -{71,-51,18}, -{71,-51,19}, -{71,-51,20}, -{71,-51,21}, -{71,-51,22}, -{71,-51,23}, -{71,-51,24}, -{71,-51,25}, -{71,-51,26}, -{71,-51,27}, -{71,-51,28}, -{71,-51,29}, -{71,-51,30}, -{71,-51,31}, -{71,-51,32}, -{71,-51,33}, -{71,-51,34}, -{71,-51,35}, -{71,-51,36}, -{71,-51,37}, -{71,-51,38}, -{71,-51,39}, -{71,-51,40}, -{71,-51,41}, -{71,-51,42}, -{71,-51,43}, -{71,-51,44}, -{71,-51,45}, -{71,-51,46}, -{71,-51,47}, -{71,-51,48}, -{71,-51,49}, -{71,-51,50}, -{71,-51,51}, -{71,-51,52}, -{71,-51,53}, -{71,-51,54}, -{71,-51,55}, -{71,-51,56}, -{71,-51,57}, -{71,-51,58}, -{71,-51,59}, -{71,-51,60}, -{71,-51,61}, -{71,-51,62}, -{71,-51,63}, -{71,-51,64}, -{71,-51,65}, -{71,-51,66}, -{71,-51,67}, -{71,-51,68}, -{71,-51,69}, -{71,-51,70}, -{71,-50,7}, -{71,-50,8}, -{71,-50,9}, -{71,-50,10}, -{71,-50,11}, -{71,-50,12}, -{71,-50,13}, -{71,-50,14}, -{71,-50,15}, -{71,-50,16}, -{71,-50,17}, -{71,-50,18}, -{71,-50,19}, -{71,-50,20}, -{71,-50,21}, -{71,-50,22}, -{71,-50,23}, -{71,-50,24}, -{71,-50,25}, -{71,-50,26}, -{71,-50,27}, -{71,-50,28}, -{71,-50,29}, -{71,-50,30}, -{71,-50,31}, -{71,-50,32}, -{71,-50,33}, -{71,-50,34}, -{71,-50,35}, -{71,-50,36}, -{71,-50,37}, -{71,-50,38}, -{71,-50,39}, -{71,-50,40}, -{71,-50,41}, -{71,-50,42}, -{71,-50,43}, -{71,-50,44}, -{71,-50,45}, -{71,-50,46}, -{71,-50,47}, -{71,-50,48}, -{71,-50,49}, -{71,-50,50}, -{71,-50,51}, -{71,-50,52}, -{71,-50,53}, -{71,-50,54}, -{71,-50,55}, -{71,-50,56}, -{71,-50,57}, -{71,-50,58}, -{71,-50,59}, -{71,-50,60}, -{71,-50,61}, -{71,-50,62}, -{71,-50,63}, -{71,-50,64}, -{71,-50,65}, -{71,-50,66}, -{71,-50,67}, -{71,-50,68}, -{71,-50,69}, -{71,-50,70}, -{71,-49,6}, -{71,-49,7}, -{71,-49,8}, -{71,-49,9}, -{71,-49,10}, -{71,-49,11}, -{71,-49,12}, -{71,-49,13}, -{71,-49,14}, -{71,-49,15}, -{71,-49,16}, -{71,-49,17}, -{71,-49,18}, -{71,-49,19}, -{71,-49,20}, -{71,-49,21}, -{71,-49,22}, -{71,-49,23}, -{71,-49,24}, -{71,-49,25}, -{71,-49,26}, -{71,-49,27}, -{71,-49,28}, -{71,-49,29}, -{71,-49,30}, -{71,-49,31}, -{71,-49,32}, -{71,-49,33}, -{71,-49,34}, -{71,-49,35}, -{71,-49,36}, -{71,-49,37}, -{71,-49,38}, -{71,-49,39}, -{71,-49,40}, -{71,-49,41}, -{71,-49,42}, -{71,-49,43}, -{71,-49,44}, -{71,-49,45}, -{71,-49,46}, -{71,-49,47}, -{71,-49,48}, -{71,-49,49}, -{71,-49,50}, -{71,-49,51}, -{71,-49,52}, -{71,-49,53}, -{71,-49,54}, -{71,-49,55}, -{71,-49,56}, -{71,-49,57}, -{71,-49,58}, -{71,-49,59}, -{71,-49,60}, -{71,-49,61}, -{71,-49,62}, -{71,-49,63}, -{71,-49,64}, -{71,-49,65}, -{71,-49,66}, -{71,-49,67}, -{71,-49,68}, -{71,-49,69}, -{71,-49,70}, -{71,-49,71}, -{71,-48,4}, -{71,-48,5}, -{71,-48,6}, -{71,-48,7}, -{71,-48,8}, -{71,-48,9}, -{71,-48,10}, -{71,-48,11}, -{71,-48,12}, -{71,-48,13}, -{71,-48,14}, -{71,-48,15}, -{71,-48,16}, -{71,-48,17}, -{71,-48,18}, -{71,-48,19}, -{71,-48,20}, -{71,-48,21}, -{71,-48,22}, -{71,-48,23}, -{71,-48,24}, -{71,-48,25}, -{71,-48,26}, -{71,-48,27}, -{71,-48,28}, -{71,-48,29}, -{71,-48,30}, -{71,-48,31}, -{71,-48,32}, -{71,-48,33}, -{71,-48,34}, -{71,-48,35}, -{71,-48,36}, -{71,-48,37}, -{71,-48,38}, -{71,-48,39}, -{71,-48,40}, -{71,-48,41}, -{71,-48,42}, -{71,-48,43}, -{71,-48,44}, -{71,-48,45}, -{71,-48,46}, -{71,-48,47}, -{71,-48,48}, -{71,-48,49}, -{71,-48,50}, -{71,-48,51}, -{71,-48,52}, -{71,-48,53}, -{71,-48,54}, -{71,-48,55}, -{71,-48,56}, -{71,-48,57}, -{71,-48,58}, -{71,-48,59}, -{71,-48,60}, -{71,-48,61}, -{71,-48,62}, -{71,-48,63}, -{71,-48,64}, -{71,-48,65}, -{71,-48,66}, -{71,-48,67}, -{71,-48,68}, -{71,-48,69}, -{71,-48,70}, -{71,-48,71}, -{71,-47,2}, -{71,-47,3}, -{71,-47,4}, -{71,-47,5}, -{71,-47,6}, -{71,-47,7}, -{71,-47,8}, -{71,-47,9}, -{71,-47,10}, -{71,-47,11}, -{71,-47,12}, -{71,-47,13}, -{71,-47,14}, -{71,-47,15}, -{71,-47,16}, -{71,-47,17}, -{71,-47,18}, -{71,-47,19}, -{71,-47,20}, -{71,-47,21}, -{71,-47,22}, -{71,-47,23}, -{71,-47,24}, -{71,-47,25}, -{71,-47,26}, -{71,-47,27}, -{71,-47,28}, -{71,-47,29}, -{71,-47,30}, -{71,-47,31}, -{71,-47,32}, -{71,-47,33}, -{71,-47,34}, -{71,-47,35}, -{71,-47,36}, -{71,-47,37}, -{71,-47,38}, -{71,-47,39}, -{71,-47,40}, -{71,-47,41}, -{71,-47,42}, -{71,-47,43}, -{71,-47,44}, -{71,-47,45}, -{71,-47,46}, -{71,-47,47}, -{71,-47,48}, -{71,-47,49}, -{71,-47,50}, -{71,-47,51}, -{71,-47,52}, -{71,-47,53}, -{71,-47,54}, -{71,-47,55}, -{71,-47,56}, -{71,-47,57}, -{71,-47,58}, -{71,-47,59}, -{71,-47,60}, -{71,-47,61}, -{71,-47,62}, -{71,-47,63}, -{71,-47,64}, -{71,-47,65}, -{71,-47,66}, -{71,-47,67}, -{71,-47,68}, -{71,-47,69}, -{71,-47,70}, -{71,-47,71}, -{71,-46,0}, -{71,-46,1}, -{71,-46,2}, -{71,-46,3}, -{71,-46,4}, -{71,-46,5}, -{71,-46,6}, -{71,-46,7}, -{71,-46,8}, -{71,-46,9}, -{71,-46,10}, -{71,-46,11}, -{71,-46,12}, -{71,-46,13}, -{71,-46,14}, -{71,-46,15}, -{71,-46,16}, -{71,-46,17}, -{71,-46,18}, -{71,-46,19}, -{71,-46,20}, -{71,-46,21}, -{71,-46,22}, -{71,-46,23}, -{71,-46,24}, -{71,-46,25}, -{71,-46,26}, -{71,-46,27}, -{71,-46,28}, -{71,-46,29}, -{71,-46,30}, -{71,-46,31}, -{71,-46,32}, -{71,-46,33}, -{71,-46,34}, -{71,-46,35}, -{71,-46,36}, -{71,-46,37}, -{71,-46,38}, -{71,-46,39}, -{71,-46,40}, -{71,-46,41}, -{71,-46,42}, -{71,-46,43}, -{71,-46,44}, -{71,-46,45}, -{71,-46,46}, -{71,-46,47}, -{71,-46,48}, -{71,-46,49}, -{71,-46,50}, -{71,-46,51}, -{71,-46,52}, -{71,-46,53}, -{71,-46,54}, -{71,-46,55}, -{71,-46,56}, -{71,-46,57}, -{71,-46,58}, -{71,-46,59}, -{71,-46,60}, -{71,-46,61}, -{71,-46,62}, -{71,-46,63}, -{71,-46,64}, -{71,-46,65}, -{71,-46,66}, -{71,-46,67}, -{71,-46,68}, -{71,-46,69}, -{71,-46,70}, -{71,-46,71}, -{71,-45,-2}, -{71,-45,-1}, -{71,-45,0}, -{71,-45,1}, -{71,-45,2}, -{71,-45,3}, -{71,-45,4}, -{71,-45,5}, -{71,-45,6}, -{71,-45,7}, -{71,-45,8}, -{71,-45,9}, -{71,-45,10}, -{71,-45,11}, -{71,-45,12}, -{71,-45,13}, -{71,-45,14}, -{71,-45,15}, -{71,-45,16}, -{71,-45,17}, -{71,-45,18}, -{71,-45,19}, -{71,-45,20}, -{71,-45,21}, -{71,-45,22}, -{71,-45,23}, -{71,-45,24}, -{71,-45,25}, -{71,-45,26}, -{71,-45,27}, -{71,-45,28}, -{71,-45,29}, -{71,-45,30}, -{71,-45,31}, -{71,-45,32}, -{71,-45,33}, -{71,-45,34}, -{71,-45,35}, -{71,-45,36}, -{71,-45,37}, -{71,-45,38}, -{71,-45,39}, -{71,-45,40}, -{71,-45,41}, -{71,-45,42}, -{71,-45,43}, -{71,-45,44}, -{71,-45,45}, -{71,-45,46}, -{71,-45,47}, -{71,-45,48}, -{71,-45,49}, -{71,-45,50}, -{71,-45,51}, -{71,-45,52}, -{71,-45,53}, -{71,-45,54}, -{71,-45,55}, -{71,-45,56}, -{71,-45,57}, -{71,-45,58}, -{71,-45,59}, -{71,-45,60}, -{71,-45,61}, -{71,-45,62}, -{71,-45,63}, -{71,-45,64}, -{71,-45,65}, -{71,-45,66}, -{71,-45,67}, -{71,-45,68}, -{71,-45,69}, -{71,-45,70}, -{71,-45,71}, -{71,-44,-3}, -{71,-44,-2}, -{71,-44,-1}, -{71,-44,0}, -{71,-44,1}, -{71,-44,2}, -{71,-44,3}, -{71,-44,4}, -{71,-44,5}, -{71,-44,6}, -{71,-44,7}, -{71,-44,8}, -{71,-44,9}, -{71,-44,10}, -{71,-44,11}, -{71,-44,12}, -{71,-44,13}, -{71,-44,14}, -{71,-44,15}, -{71,-44,16}, -{71,-44,17}, -{71,-44,18}, -{71,-44,19}, -{71,-44,20}, -{71,-44,21}, -{71,-44,22}, -{71,-44,23}, -{71,-44,24}, -{71,-44,25}, -{71,-44,26}, -{71,-44,27}, -{71,-44,28}, -{71,-44,29}, -{71,-44,30}, -{71,-44,31}, -{71,-44,32}, -{71,-44,33}, -{71,-44,34}, -{71,-44,35}, -{71,-44,36}, -{71,-44,37}, -{71,-44,38}, -{71,-44,39}, -{71,-44,40}, -{71,-44,41}, -{71,-44,42}, -{71,-44,43}, -{71,-44,44}, -{71,-44,45}, -{71,-44,46}, -{71,-44,47}, -{71,-44,48}, -{71,-44,49}, -{71,-44,50}, -{71,-44,51}, -{71,-44,52}, -{71,-44,53}, -{71,-44,54}, -{71,-44,55}, -{71,-44,56}, -{71,-44,57}, -{71,-44,58}, -{71,-44,59}, -{71,-44,60}, -{71,-44,61}, -{71,-44,62}, -{71,-44,63}, -{71,-44,64}, -{71,-44,65}, -{71,-44,66}, -{71,-44,67}, -{71,-44,68}, -{71,-44,69}, -{71,-44,70}, -{71,-44,71}, -{71,-43,-5}, -{71,-43,-4}, -{71,-43,-3}, -{71,-43,-2}, -{71,-43,-1}, -{71,-43,0}, -{71,-43,1}, -{71,-43,2}, -{71,-43,3}, -{71,-43,4}, -{71,-43,5}, -{71,-43,6}, -{71,-43,7}, -{71,-43,8}, -{71,-43,9}, -{71,-43,10}, -{71,-43,11}, -{71,-43,12}, -{71,-43,13}, -{71,-43,14}, -{71,-43,15}, -{71,-43,16}, -{71,-43,17}, -{71,-43,18}, -{71,-43,19}, -{71,-43,20}, -{71,-43,21}, -{71,-43,22}, -{71,-43,23}, -{71,-43,24}, -{71,-43,25}, -{71,-43,26}, -{71,-43,27}, -{71,-43,28}, -{71,-43,29}, -{71,-43,30}, -{71,-43,31}, -{71,-43,32}, -{71,-43,33}, -{71,-43,34}, -{71,-43,35}, -{71,-43,36}, -{71,-43,37}, -{71,-43,38}, -{71,-43,39}, -{71,-43,40}, -{71,-43,41}, -{71,-43,42}, -{71,-43,43}, -{71,-43,44}, -{71,-43,45}, -{71,-43,46}, -{71,-43,47}, -{71,-43,48}, -{71,-43,49}, -{71,-43,50}, -{71,-43,51}, -{71,-43,52}, -{71,-43,53}, -{71,-43,54}, -{71,-43,55}, -{71,-43,56}, -{71,-43,57}, -{71,-43,58}, -{71,-43,59}, -{71,-43,60}, -{71,-43,61}, -{71,-43,62}, -{71,-43,63}, -{71,-43,64}, -{71,-43,65}, -{71,-43,66}, -{71,-43,67}, -{71,-43,68}, -{71,-43,69}, -{71,-43,70}, -{71,-43,71}, -{71,-42,-7}, -{71,-42,-6}, -{71,-42,-5}, -{71,-42,-4}, -{71,-42,-3}, -{71,-42,-2}, -{71,-42,-1}, -{71,-42,0}, -{71,-42,1}, -{71,-42,2}, -{71,-42,3}, -{71,-42,4}, -{71,-42,5}, -{71,-42,6}, -{71,-42,7}, -{71,-42,8}, -{71,-42,9}, -{71,-42,10}, -{71,-42,11}, -{71,-42,12}, -{71,-42,13}, -{71,-42,14}, -{71,-42,15}, -{71,-42,16}, -{71,-42,17}, -{71,-42,18}, -{71,-42,19}, -{71,-42,20}, -{71,-42,21}, -{71,-42,22}, -{71,-42,23}, -{71,-42,24}, -{71,-42,25}, -{71,-42,26}, -{71,-42,27}, -{71,-42,28}, -{71,-42,29}, -{71,-42,30}, -{71,-42,31}, -{71,-42,32}, -{71,-42,33}, -{71,-42,34}, -{71,-42,35}, -{71,-42,36}, -{71,-42,37}, -{71,-42,38}, -{71,-42,39}, -{71,-42,40}, -{71,-42,41}, -{71,-42,42}, -{71,-42,43}, -{71,-42,44}, -{71,-42,45}, -{71,-42,46}, -{71,-42,47}, -{71,-42,48}, -{71,-42,49}, -{71,-42,50}, -{71,-42,51}, -{71,-42,52}, -{71,-42,53}, -{71,-42,54}, -{71,-42,55}, -{71,-42,56}, -{71,-42,57}, -{71,-42,58}, -{71,-42,59}, -{71,-42,60}, -{71,-42,61}, -{71,-42,62}, -{71,-42,63}, -{71,-42,64}, -{71,-42,65}, -{71,-42,66}, -{71,-42,67}, -{71,-42,68}, -{71,-42,69}, -{71,-42,70}, -{71,-42,71}, -{71,-41,-8}, -{71,-41,-7}, -{71,-41,-6}, -{71,-41,-5}, -{71,-41,-4}, -{71,-41,-3}, -{71,-41,-2}, -{71,-41,-1}, -{71,-41,0}, -{71,-41,1}, -{71,-41,2}, -{71,-41,3}, -{71,-41,4}, -{71,-41,5}, -{71,-41,6}, -{71,-41,7}, -{71,-41,8}, -{71,-41,9}, -{71,-41,10}, -{71,-41,11}, -{71,-41,12}, -{71,-41,13}, -{71,-41,14}, -{71,-41,15}, -{71,-41,16}, -{71,-41,17}, -{71,-41,18}, -{71,-41,19}, -{71,-41,20}, -{71,-41,21}, -{71,-41,22}, -{71,-41,23}, -{71,-41,24}, -{71,-41,25}, -{71,-41,26}, -{71,-41,27}, -{71,-41,28}, -{71,-41,29}, -{71,-41,30}, -{71,-41,31}, -{71,-41,32}, -{71,-41,33}, -{71,-41,34}, -{71,-41,35}, -{71,-41,36}, -{71,-41,37}, -{71,-41,38}, -{71,-41,39}, -{71,-41,40}, -{71,-41,41}, -{71,-41,42}, -{71,-41,43}, -{71,-41,44}, -{71,-41,45}, -{71,-41,46}, -{71,-41,47}, -{71,-41,48}, -{71,-41,49}, -{71,-41,50}, -{71,-41,51}, -{71,-41,52}, -{71,-41,53}, -{71,-41,54}, -{71,-41,55}, -{71,-41,56}, -{71,-41,57}, -{71,-41,58}, -{71,-41,59}, -{71,-41,60}, -{71,-41,61}, -{71,-41,62}, -{71,-41,63}, -{71,-41,64}, -{71,-41,65}, -{71,-41,66}, -{71,-41,67}, -{71,-41,68}, -{71,-41,69}, -{71,-41,70}, -{71,-41,71}, -{71,-40,-10}, -{71,-40,-9}, -{71,-40,-8}, -{71,-40,-7}, -{71,-40,-6}, -{71,-40,-5}, -{71,-40,-4}, -{71,-40,-3}, -{71,-40,-2}, -{71,-40,-1}, -{71,-40,0}, -{71,-40,1}, -{71,-40,2}, -{71,-40,3}, -{71,-40,4}, -{71,-40,5}, -{71,-40,6}, -{71,-40,7}, -{71,-40,8}, -{71,-40,9}, -{71,-40,10}, -{71,-40,11}, -{71,-40,12}, -{71,-40,13}, -{71,-40,14}, -{71,-40,15}, -{71,-40,16}, -{71,-40,17}, -{71,-40,18}, -{71,-40,19}, -{71,-40,20}, -{71,-40,21}, -{71,-40,22}, -{71,-40,23}, -{71,-40,24}, -{71,-40,25}, -{71,-40,26}, -{71,-40,27}, -{71,-40,28}, -{71,-40,29}, -{71,-40,30}, -{71,-40,31}, -{71,-40,32}, -{71,-40,33}, -{71,-40,34}, -{71,-40,35}, -{71,-40,36}, -{71,-40,37}, -{71,-40,38}, -{71,-40,39}, -{71,-40,40}, -{71,-40,41}, -{71,-40,42}, -{71,-40,43}, -{71,-40,44}, -{71,-40,45}, -{71,-40,46}, -{71,-40,47}, -{71,-40,48}, -{71,-40,49}, -{71,-40,50}, -{71,-40,51}, -{71,-40,52}, -{71,-40,53}, -{71,-40,54}, -{71,-40,55}, -{71,-40,56}, -{71,-40,57}, -{71,-40,58}, -{71,-40,59}, -{71,-40,60}, -{71,-40,61}, -{71,-40,62}, -{71,-40,63}, -{71,-40,64}, -{71,-40,65}, -{71,-40,66}, -{71,-40,67}, -{71,-40,68}, -{71,-40,69}, -{71,-40,70}, -{71,-40,71}, -{71,-39,-11}, -{71,-39,-10}, -{71,-39,-9}, -{71,-39,-8}, -{71,-39,-7}, -{71,-39,-6}, -{71,-39,-5}, -{71,-39,-4}, -{71,-39,-3}, -{71,-39,-2}, -{71,-39,-1}, -{71,-39,0}, -{71,-39,1}, -{71,-39,2}, -{71,-39,3}, -{71,-39,4}, -{71,-39,5}, -{71,-39,6}, -{71,-39,7}, -{71,-39,8}, -{71,-39,9}, -{71,-39,10}, -{71,-39,11}, -{71,-39,12}, -{71,-39,13}, -{71,-39,14}, -{71,-39,15}, -{71,-39,16}, -{71,-39,17}, -{71,-39,18}, -{71,-39,19}, -{71,-39,20}, -{71,-39,21}, -{71,-39,22}, -{71,-39,23}, -{71,-39,24}, -{71,-39,25}, -{71,-39,26}, -{71,-39,27}, -{71,-39,28}, -{71,-39,29}, -{71,-39,30}, -{71,-39,31}, -{71,-39,32}, -{71,-39,33}, -{71,-39,34}, -{71,-39,35}, -{71,-39,36}, -{71,-39,37}, -{71,-39,38}, -{71,-39,39}, -{71,-39,40}, -{71,-39,41}, -{71,-39,42}, -{71,-39,43}, -{71,-39,44}, -{71,-39,45}, -{71,-39,46}, -{71,-39,47}, -{71,-39,48}, -{71,-39,49}, -{71,-39,50}, -{71,-39,51}, -{71,-39,52}, -{71,-39,53}, -{71,-39,54}, -{71,-39,55}, -{71,-39,56}, -{71,-39,57}, -{71,-39,58}, -{71,-39,59}, -{71,-39,60}, -{71,-39,61}, -{71,-39,62}, -{71,-39,63}, -{71,-39,64}, -{71,-39,65}, -{71,-39,66}, -{71,-39,67}, -{71,-39,68}, -{71,-39,69}, -{71,-39,70}, -{71,-39,71}, -{71,-38,-13}, -{71,-38,-12}, -{71,-38,-11}, -{71,-38,-10}, -{71,-38,-9}, -{71,-38,-8}, -{71,-38,-7}, -{71,-38,-6}, -{71,-38,-5}, -{71,-38,-4}, -{71,-38,-3}, -{71,-38,-2}, -{71,-38,-1}, -{71,-38,0}, -{71,-38,1}, -{71,-38,2}, -{71,-38,3}, -{71,-38,4}, -{71,-38,5}, -{71,-38,6}, -{71,-38,7}, -{71,-38,8}, -{71,-38,9}, -{71,-38,10}, -{71,-38,11}, -{71,-38,12}, -{71,-38,13}, -{71,-38,14}, -{71,-38,15}, -{71,-38,16}, -{71,-38,17}, -{71,-38,18}, -{71,-38,19}, -{71,-38,20}, -{71,-38,21}, -{71,-38,22}, -{71,-38,23}, -{71,-38,24}, -{71,-38,25}, -{71,-38,26}, -{71,-38,27}, -{71,-38,28}, -{71,-38,29}, -{71,-38,30}, -{71,-38,31}, -{71,-38,32}, -{71,-38,33}, -{71,-38,34}, -{71,-38,35}, -{71,-38,36}, -{71,-38,37}, -{71,-38,38}, -{71,-38,39}, -{71,-38,40}, -{71,-38,41}, -{71,-38,42}, -{71,-38,43}, -{71,-38,44}, -{71,-38,45}, -{71,-38,46}, -{71,-38,47}, -{71,-38,48}, -{71,-38,49}, -{71,-38,50}, -{71,-38,51}, -{71,-38,52}, -{71,-38,53}, -{71,-38,54}, -{71,-38,55}, -{71,-38,56}, -{71,-38,57}, -{71,-38,58}, -{71,-38,59}, -{71,-38,60}, -{71,-38,61}, -{71,-38,62}, -{71,-38,63}, -{71,-38,64}, -{71,-38,65}, -{71,-38,66}, -{71,-38,67}, -{71,-38,68}, -{71,-38,69}, -{71,-38,70}, -{71,-38,71}, -{71,-37,-14}, -{71,-37,-13}, -{71,-37,-12}, -{71,-37,-11}, -{71,-37,-10}, -{71,-37,-9}, -{71,-37,-8}, -{71,-37,-7}, -{71,-37,-6}, -{71,-37,-5}, -{71,-37,-4}, -{71,-37,-3}, -{71,-37,-2}, -{71,-37,-1}, -{71,-37,0}, -{71,-37,1}, -{71,-37,2}, -{71,-37,3}, -{71,-37,4}, -{71,-37,5}, -{71,-37,6}, -{71,-37,7}, -{71,-37,8}, -{71,-37,9}, -{71,-37,10}, -{71,-37,11}, -{71,-37,12}, -{71,-37,13}, -{71,-37,14}, -{71,-37,15}, -{71,-37,16}, -{71,-37,17}, -{71,-37,18}, -{71,-37,19}, -{71,-37,20}, -{71,-37,21}, -{71,-37,22}, -{71,-37,23}, -{71,-37,24}, -{71,-37,25}, -{71,-37,26}, -{71,-37,27}, -{71,-37,28}, -{71,-37,29}, -{71,-37,30}, -{71,-37,31}, -{71,-37,32}, -{71,-37,33}, -{71,-37,34}, -{71,-37,35}, -{71,-37,36}, -{71,-37,37}, -{71,-37,38}, -{71,-37,39}, -{71,-37,40}, -{71,-37,41}, -{71,-37,42}, -{71,-37,43}, -{71,-37,44}, -{71,-37,45}, -{71,-37,46}, -{71,-37,47}, -{71,-37,48}, -{71,-37,49}, -{71,-37,50}, -{71,-37,51}, -{71,-37,52}, -{71,-37,53}, -{71,-37,54}, -{71,-37,55}, -{71,-37,56}, -{71,-37,57}, -{71,-37,58}, -{71,-37,59}, -{71,-37,60}, -{71,-37,61}, -{71,-37,62}, -{71,-37,63}, -{71,-37,64}, -{71,-37,65}, -{71,-37,66}, -{71,-37,67}, -{71,-37,68}, -{71,-37,69}, -{71,-37,70}, -{71,-37,71}, -{71,-36,-16}, -{71,-36,-15}, -{71,-36,-14}, -{71,-36,-13}, -{71,-36,-12}, -{71,-36,-11}, -{71,-36,-10}, -{71,-36,-9}, -{71,-36,-8}, -{71,-36,-7}, -{71,-36,-6}, -{71,-36,-5}, -{71,-36,-4}, -{71,-36,-3}, -{71,-36,-2}, -{71,-36,-1}, -{71,-36,0}, -{71,-36,1}, -{71,-36,2}, -{71,-36,3}, -{71,-36,4}, -{71,-36,5}, -{71,-36,6}, -{71,-36,7}, -{71,-36,8}, -{71,-36,9}, -{71,-36,10}, -{71,-36,11}, -{71,-36,12}, -{71,-36,13}, -{71,-36,14}, -{71,-36,15}, -{71,-36,16}, -{71,-36,17}, -{71,-36,18}, -{71,-36,19}, -{71,-36,20}, -{71,-36,21}, -{71,-36,22}, -{71,-36,23}, -{71,-36,24}, -{71,-36,25}, -{71,-36,26}, -{71,-36,27}, -{71,-36,28}, -{71,-36,29}, -{71,-36,30}, -{71,-36,31}, -{71,-36,32}, -{71,-36,33}, -{71,-36,34}, -{71,-36,35}, -{71,-36,36}, -{71,-36,37}, -{71,-36,38}, -{71,-36,39}, -{71,-36,40}, -{71,-36,41}, -{71,-36,42}, -{71,-36,43}, -{71,-36,44}, -{71,-36,45}, -{71,-36,46}, -{71,-36,47}, -{71,-36,48}, -{71,-36,49}, -{71,-36,50}, -{71,-36,51}, -{71,-36,52}, -{71,-36,53}, -{71,-36,54}, -{71,-36,55}, -{71,-36,56}, -{71,-36,57}, -{71,-36,58}, -{71,-36,59}, -{71,-36,60}, -{71,-36,61}, -{71,-36,62}, -{71,-36,63}, -{71,-36,64}, -{71,-36,65}, -{71,-36,66}, -{71,-36,67}, -{71,-36,68}, -{71,-36,69}, -{71,-36,70}, -{71,-36,71}, -{71,-35,-17}, -{71,-35,-16}, -{71,-35,-15}, -{71,-35,-14}, -{71,-35,-13}, -{71,-35,-12}, -{71,-35,-11}, -{71,-35,-10}, -{71,-35,-9}, -{71,-35,-8}, -{71,-35,-7}, -{71,-35,-6}, -{71,-35,-5}, -{71,-35,-4}, -{71,-35,-3}, -{71,-35,-2}, -{71,-35,-1}, -{71,-35,0}, -{71,-35,1}, -{71,-35,2}, -{71,-35,3}, -{71,-35,4}, -{71,-35,5}, -{71,-35,6}, -{71,-35,7}, -{71,-35,8}, -{71,-35,9}, -{71,-35,10}, -{71,-35,11}, -{71,-35,12}, -{71,-35,13}, -{71,-35,14}, -{71,-35,15}, -{71,-35,16}, -{71,-35,17}, -{71,-35,18}, -{71,-35,19}, -{71,-35,20}, -{71,-35,21}, -{71,-35,22}, -{71,-35,23}, -{71,-35,24}, -{71,-35,25}, -{71,-35,26}, -{71,-35,27}, -{71,-35,28}, -{71,-35,29}, -{71,-35,30}, -{71,-35,31}, -{71,-35,32}, -{71,-35,33}, -{71,-35,34}, -{71,-35,35}, -{71,-35,36}, -{71,-35,37}, -{71,-35,38}, -{71,-35,39}, -{71,-35,40}, -{71,-35,41}, -{71,-35,42}, -{71,-35,43}, -{71,-35,44}, -{71,-35,45}, -{71,-35,46}, -{71,-35,47}, -{71,-35,48}, -{71,-35,49}, -{71,-35,50}, -{71,-35,51}, -{71,-35,52}, -{71,-35,53}, -{71,-35,54}, -{71,-35,55}, -{71,-35,56}, -{71,-35,57}, -{71,-35,58}, -{71,-35,59}, -{71,-35,60}, -{71,-35,61}, -{71,-35,62}, -{71,-35,63}, -{71,-35,64}, -{71,-35,65}, -{71,-35,66}, -{71,-35,67}, -{71,-35,68}, -{71,-35,69}, -{71,-35,70}, -{71,-35,71}, -{71,-34,-19}, -{71,-34,-18}, -{71,-34,-17}, -{71,-34,-16}, -{71,-34,-15}, -{71,-34,-14}, -{71,-34,-13}, -{71,-34,-12}, -{71,-34,-11}, -{71,-34,-10}, -{71,-34,-9}, -{71,-34,-8}, -{71,-34,-7}, -{71,-34,-6}, -{71,-34,-5}, -{71,-34,-4}, -{71,-34,-3}, -{71,-34,-2}, -{71,-34,-1}, -{71,-34,0}, -{71,-34,1}, -{71,-34,2}, -{71,-34,3}, -{71,-34,4}, -{71,-34,5}, -{71,-34,6}, -{71,-34,7}, -{71,-34,8}, -{71,-34,9}, -{71,-34,10}, -{71,-34,11}, -{71,-34,12}, -{71,-34,13}, -{71,-34,14}, -{71,-34,15}, -{71,-34,16}, -{71,-34,17}, -{71,-34,18}, -{71,-34,19}, -{71,-34,20}, -{71,-34,21}, -{71,-34,22}, -{71,-34,23}, -{71,-34,24}, -{71,-34,25}, -{71,-34,26}, -{71,-34,27}, -{71,-34,28}, -{71,-34,29}, -{71,-34,30}, -{71,-34,31}, -{71,-34,32}, -{71,-34,33}, -{71,-34,34}, -{71,-34,35}, -{71,-34,36}, -{71,-34,37}, -{71,-34,38}, -{71,-34,39}, -{71,-34,40}, -{71,-34,41}, -{71,-34,42}, -{71,-34,43}, -{71,-34,44}, -{71,-34,45}, -{71,-34,46}, -{71,-34,47}, -{71,-34,48}, -{71,-34,49}, -{71,-34,50}, -{71,-34,51}, -{71,-34,52}, -{71,-34,53}, -{71,-34,54}, -{71,-34,55}, -{71,-34,56}, -{71,-34,57}, -{71,-34,58}, -{71,-34,59}, -{71,-34,60}, -{71,-34,61}, -{71,-34,62}, -{71,-34,63}, -{71,-34,64}, -{71,-34,65}, -{71,-34,66}, -{71,-34,67}, -{71,-34,68}, -{71,-34,69}, -{71,-34,70}, -{71,-34,71}, -{71,-33,-20}, -{71,-33,-19}, -{71,-33,-18}, -{71,-33,-17}, -{71,-33,-16}, -{71,-33,-15}, -{71,-33,-14}, -{71,-33,-13}, -{71,-33,-12}, -{71,-33,-11}, -{71,-33,-10}, -{71,-33,-9}, -{71,-33,-8}, -{71,-33,-7}, -{71,-33,-6}, -{71,-33,-5}, -{71,-33,-4}, -{71,-33,-3}, -{71,-33,-2}, -{71,-33,-1}, -{71,-33,0}, -{71,-33,1}, -{71,-33,2}, -{71,-33,3}, -{71,-33,4}, -{71,-33,5}, -{71,-33,6}, -{71,-33,7}, -{71,-33,8}, -{71,-33,9}, -{71,-33,10}, -{71,-33,11}, -{71,-33,12}, -{71,-33,13}, -{71,-33,14}, -{71,-33,15}, -{71,-33,16}, -{71,-33,17}, -{71,-33,18}, -{71,-33,19}, -{71,-33,20}, -{71,-33,21}, -{71,-33,22}, -{71,-33,23}, -{71,-33,24}, -{71,-33,25}, -{71,-33,26}, -{71,-33,27}, -{71,-33,28}, -{71,-33,29}, -{71,-33,30}, -{71,-33,31}, -{71,-33,32}, -{71,-33,33}, -{71,-33,34}, -{71,-33,35}, -{71,-33,36}, -{71,-33,37}, -{71,-33,38}, -{71,-33,39}, -{71,-33,40}, -{71,-33,41}, -{71,-33,42}, -{71,-33,43}, -{71,-33,44}, -{71,-33,45}, -{71,-33,46}, -{71,-33,47}, -{71,-33,48}, -{71,-33,49}, -{71,-33,50}, -{71,-33,51}, -{71,-33,52}, -{71,-33,53}, -{71,-33,54}, -{71,-33,55}, -{71,-33,56}, -{71,-33,57}, -{71,-33,58}, -{71,-33,59}, -{71,-33,60}, -{71,-33,61}, -{71,-33,62}, -{71,-33,63}, -{71,-33,64}, -{71,-33,65}, -{71,-33,66}, -{71,-33,67}, -{71,-33,68}, -{71,-33,69}, -{71,-33,70}, -{71,-33,71}, -{71,-32,-22}, -{71,-32,-21}, -{71,-32,-20}, -{71,-32,-19}, -{71,-32,-18}, -{71,-32,-17}, -{71,-32,-16}, -{71,-32,-15}, -{71,-32,-14}, -{71,-32,-13}, -{71,-32,-12}, -{71,-32,-11}, -{71,-32,-10}, -{71,-32,-9}, -{71,-32,-8}, -{71,-32,-7}, -{71,-32,-6}, -{71,-32,-5}, -{71,-32,-4}, -{71,-32,-3}, -{71,-32,-2}, -{71,-32,-1}, -{71,-32,0}, -{71,-32,1}, -{71,-32,2}, -{71,-32,3}, -{71,-32,4}, -{71,-32,5}, -{71,-32,6}, -{71,-32,7}, -{71,-32,8}, -{71,-32,9}, -{71,-32,10}, -{71,-32,11}, -{71,-32,12}, -{71,-32,13}, -{71,-32,14}, -{71,-32,15}, -{71,-32,16}, -{71,-32,17}, -{71,-32,18}, -{71,-32,19}, -{71,-32,20}, -{71,-32,21}, -{71,-32,22}, -{71,-32,23}, -{71,-32,24}, -{71,-32,25}, -{71,-32,26}, -{71,-32,27}, -{71,-32,28}, -{71,-32,29}, -{71,-32,30}, -{71,-32,31}, -{71,-32,32}, -{71,-32,33}, -{71,-32,34}, -{71,-32,35}, -{71,-32,36}, -{71,-32,37}, -{71,-32,38}, -{71,-32,39}, -{71,-32,40}, -{71,-32,41}, -{71,-32,42}, -{71,-32,43}, -{71,-32,44}, -{71,-32,45}, -{71,-32,46}, -{71,-32,47}, -{71,-32,48}, -{71,-32,49}, -{71,-32,50}, -{71,-32,51}, -{71,-32,52}, -{71,-32,53}, -{71,-32,54}, -{71,-32,55}, -{71,-32,56}, -{71,-32,57}, -{71,-32,58}, -{71,-32,59}, -{71,-32,60}, -{71,-32,61}, -{71,-32,62}, -{71,-32,63}, -{71,-32,64}, -{71,-32,65}, -{71,-32,66}, -{71,-32,67}, -{71,-32,68}, -{71,-32,69}, -{71,-32,70}, -{71,-32,71}, -{71,-31,-23}, -{71,-31,-22}, -{71,-31,-21}, -{71,-31,-20}, -{71,-31,-19}, -{71,-31,-18}, -{71,-31,-17}, -{71,-31,-16}, -{71,-31,-15}, -{71,-31,-14}, -{71,-31,-13}, -{71,-31,-12}, -{71,-31,-11}, -{71,-31,-10}, -{71,-31,-9}, -{71,-31,-8}, -{71,-31,-7}, -{71,-31,-6}, -{71,-31,-5}, -{71,-31,-4}, -{71,-31,-3}, -{71,-31,-2}, -{71,-31,-1}, -{71,-31,0}, -{71,-31,1}, -{71,-31,2}, -{71,-31,3}, -{71,-31,4}, -{71,-31,5}, -{71,-31,6}, -{71,-31,7}, -{71,-31,8}, -{71,-31,9}, -{71,-31,10}, -{71,-31,11}, -{71,-31,12}, -{71,-31,13}, -{71,-31,14}, -{71,-31,15}, -{71,-31,16}, -{71,-31,17}, -{71,-31,18}, -{71,-31,19}, -{71,-31,20}, -{71,-31,21}, -{71,-31,22}, -{71,-31,23}, -{71,-31,24}, -{71,-31,25}, -{71,-31,26}, -{71,-31,27}, -{71,-31,28}, -{71,-31,29}, -{71,-31,30}, -{71,-31,31}, -{71,-31,32}, -{71,-31,33}, -{71,-31,34}, -{71,-31,35}, -{71,-31,36}, -{71,-31,37}, -{71,-31,38}, -{71,-31,39}, -{71,-31,40}, -{71,-31,41}, -{71,-31,42}, -{71,-31,43}, -{71,-31,44}, -{71,-31,45}, -{71,-31,46}, -{71,-31,47}, -{71,-31,48}, -{71,-31,49}, -{71,-31,50}, -{71,-31,51}, -{71,-31,52}, -{71,-31,53}, -{71,-31,54}, -{71,-31,55}, -{71,-31,56}, -{71,-31,57}, -{71,-31,58}, -{71,-31,59}, -{71,-31,60}, -{71,-31,61}, -{71,-31,62}, -{71,-31,63}, -{71,-31,64}, -{71,-31,65}, -{71,-31,66}, -{71,-31,67}, -{71,-31,68}, -{71,-31,69}, -{71,-31,70}, -{71,-31,71}, -{71,-30,-25}, -{71,-30,-24}, -{71,-30,-23}, -{71,-30,-22}, -{71,-30,-21}, -{71,-30,-20}, -{71,-30,-19}, -{71,-30,-18}, -{71,-30,-17}, -{71,-30,-16}, -{71,-30,-15}, -{71,-30,-14}, -{71,-30,-13}, -{71,-30,-12}, -{71,-30,-11}, -{71,-30,-10}, -{71,-30,-9}, -{71,-30,-8}, -{71,-30,-7}, -{71,-30,-6}, -{71,-30,-5}, -{71,-30,-4}, -{71,-30,-3}, -{71,-30,-2}, -{71,-30,-1}, -{71,-30,0}, -{71,-30,1}, -{71,-30,2}, -{71,-30,3}, -{71,-30,4}, -{71,-30,5}, -{71,-30,6}, -{71,-30,7}, -{71,-30,8}, -{71,-30,9}, -{71,-30,10}, -{71,-30,11}, -{71,-30,12}, -{71,-30,13}, -{71,-30,14}, -{71,-30,15}, -{71,-30,16}, -{71,-30,17}, -{71,-30,18}, -{71,-30,19}, -{71,-30,20}, -{71,-30,21}, -{71,-30,22}, -{71,-30,23}, -{71,-30,24}, -{71,-30,25}, -{71,-30,26}, -{71,-30,27}, -{71,-30,28}, -{71,-30,29}, -{71,-30,30}, -{71,-30,31}, -{71,-30,32}, -{71,-30,33}, -{71,-30,34}, -{71,-30,35}, -{71,-30,36}, -{71,-30,37}, -{71,-30,38}, -{71,-30,39}, -{71,-30,40}, -{71,-30,41}, -{71,-30,42}, -{71,-30,43}, -{71,-30,44}, -{71,-30,45}, -{71,-30,46}, -{71,-30,47}, -{71,-30,48}, -{71,-30,49}, -{71,-30,50}, -{71,-30,51}, -{71,-30,52}, -{71,-30,53}, -{71,-30,54}, -{71,-30,55}, -{71,-30,56}, -{71,-30,57}, -{71,-30,58}, -{71,-30,59}, -{71,-30,60}, -{71,-30,61}, -{71,-30,62}, -{71,-30,63}, -{71,-30,64}, -{71,-30,65}, -{71,-30,66}, -{71,-30,67}, -{71,-30,68}, -{71,-30,69}, -{71,-30,70}, -{71,-30,71}, -{71,-30,72}, -{71,-29,-26}, -{71,-29,-25}, -{71,-29,-24}, -{71,-29,-23}, -{71,-29,-22}, -{71,-29,-21}, -{71,-29,-20}, -{71,-29,-19}, -{71,-29,-18}, -{71,-29,-17}, -{71,-29,-16}, -{71,-29,-15}, -{71,-29,-14}, -{71,-29,-13}, -{71,-29,-12}, -{71,-29,-11}, -{71,-29,-10}, -{71,-29,-9}, -{71,-29,-8}, -{71,-29,-7}, -{71,-29,-6}, -{71,-29,-5}, -{71,-29,-4}, -{71,-29,-3}, -{71,-29,-2}, -{71,-29,-1}, -{71,-29,0}, -{71,-29,1}, -{71,-29,2}, -{71,-29,3}, -{71,-29,4}, -{71,-29,5}, -{71,-29,6}, -{71,-29,7}, -{71,-29,8}, -{71,-29,9}, -{71,-29,10}, -{71,-29,11}, -{71,-29,12}, -{71,-29,13}, -{71,-29,14}, -{71,-29,15}, -{71,-29,16}, -{71,-29,17}, -{71,-29,18}, -{71,-29,19}, -{71,-29,20}, -{71,-29,21}, -{71,-29,22}, -{71,-29,23}, -{71,-29,24}, -{71,-29,25}, -{71,-29,26}, -{71,-29,27}, -{71,-29,28}, -{71,-29,29}, -{71,-29,30}, -{71,-29,31}, -{71,-29,32}, -{71,-29,33}, -{71,-29,34}, -{71,-29,35}, -{71,-29,36}, -{71,-29,37}, -{71,-29,38}, -{71,-29,39}, -{71,-29,40}, -{71,-29,41}, -{71,-29,42}, -{71,-29,43}, -{71,-29,44}, -{71,-29,45}, -{71,-29,46}, -{71,-29,47}, -{71,-29,48}, -{71,-29,49}, -{71,-29,50}, -{71,-29,51}, -{71,-29,52}, -{71,-29,53}, -{71,-29,54}, -{71,-29,55}, -{71,-29,56}, -{71,-29,57}, -{71,-29,58}, -{71,-29,59}, -{71,-29,60}, -{71,-29,61}, -{71,-29,62}, -{71,-29,63}, -{71,-29,64}, -{71,-29,65}, -{71,-29,66}, -{71,-29,67}, -{71,-29,68}, -{71,-29,69}, -{71,-29,70}, -{71,-29,71}, -{71,-29,72}, -{71,-28,-27}, -{71,-28,-26}, -{71,-28,-25}, -{71,-28,-24}, -{71,-28,-23}, -{71,-28,-22}, -{71,-28,-21}, -{71,-28,-20}, -{71,-28,-19}, -{71,-28,-18}, -{71,-28,-17}, -{71,-28,-16}, -{71,-28,-15}, -{71,-28,-14}, -{71,-28,-13}, -{71,-28,-12}, -{71,-28,-11}, -{71,-28,-10}, -{71,-28,-9}, -{71,-28,-8}, -{71,-28,-7}, -{71,-28,-6}, -{71,-28,-5}, -{71,-28,-4}, -{71,-28,-3}, -{71,-28,-2}, -{71,-28,-1}, -{71,-28,0}, -{71,-28,1}, -{71,-28,2}, -{71,-28,3}, -{71,-28,4}, -{71,-28,5}, -{71,-28,6}, -{71,-28,7}, -{71,-28,8}, -{71,-28,9}, -{71,-28,10}, -{71,-28,11}, -{71,-28,12}, -{71,-28,13}, -{71,-28,14}, -{71,-28,15}, -{71,-28,16}, -{71,-28,17}, -{71,-28,18}, -{71,-28,19}, -{71,-28,20}, -{71,-28,21}, -{71,-28,22}, -{71,-28,23}, -{71,-28,24}, -{71,-28,25}, -{71,-28,26}, -{71,-28,27}, -{71,-28,28}, -{71,-28,29}, -{71,-28,30}, -{71,-28,31}, -{71,-28,32}, -{71,-28,33}, -{71,-28,34}, -{71,-28,35}, -{71,-28,36}, -{71,-28,37}, -{71,-28,38}, -{71,-28,39}, -{71,-28,40}, -{71,-28,41}, -{71,-28,42}, -{71,-28,43}, -{71,-28,44}, -{71,-28,45}, -{71,-28,46}, -{71,-28,47}, -{71,-28,48}, -{71,-28,49}, -{71,-28,50}, -{71,-28,51}, -{71,-28,52}, -{71,-28,53}, -{71,-28,54}, -{71,-28,55}, -{71,-28,56}, -{71,-28,57}, -{71,-28,58}, -{71,-28,59}, -{71,-28,60}, -{71,-28,61}, -{71,-28,62}, -{71,-28,63}, -{71,-28,64}, -{71,-28,65}, -{71,-28,66}, -{71,-28,67}, -{71,-28,68}, -{71,-28,69}, -{71,-28,70}, -{71,-28,71}, -{71,-28,72}, -{71,-27,-29}, -{71,-27,-28}, -{71,-27,-27}, -{71,-27,-26}, -{71,-27,-25}, -{71,-27,-24}, -{71,-27,-23}, -{71,-27,-22}, -{71,-27,-21}, -{71,-27,-20}, -{71,-27,-19}, -{71,-27,-18}, -{71,-27,-17}, -{71,-27,-16}, -{71,-27,-15}, -{71,-27,-14}, -{71,-27,-13}, -{71,-27,-12}, -{71,-27,-11}, -{71,-27,-10}, -{71,-27,-9}, -{71,-27,-8}, -{71,-27,-7}, -{71,-27,-6}, -{71,-27,-5}, -{71,-27,-4}, -{71,-27,-3}, -{71,-27,-2}, -{71,-27,-1}, -{71,-27,0}, -{71,-27,1}, -{71,-27,2}, -{71,-27,3}, -{71,-27,4}, -{71,-27,5}, -{71,-27,6}, -{71,-27,7}, -{71,-27,8}, -{71,-27,9}, -{71,-27,10}, -{71,-27,11}, -{71,-27,12}, -{71,-27,13}, -{71,-27,14}, -{71,-27,15}, -{71,-27,16}, -{71,-27,17}, -{71,-27,18}, -{71,-27,19}, -{71,-27,20}, -{71,-27,21}, -{71,-27,22}, -{71,-27,23}, -{71,-27,24}, -{71,-27,25}, -{71,-27,26}, -{71,-27,27}, -{71,-27,28}, -{71,-27,29}, -{71,-27,30}, -{71,-27,31}, -{71,-27,32}, -{71,-27,33}, -{71,-27,34}, -{71,-27,35}, -{71,-27,36}, -{71,-27,37}, -{71,-27,38}, -{71,-27,39}, -{71,-27,40}, -{71,-27,41}, -{71,-27,42}, -{71,-27,43}, -{71,-27,44}, -{71,-27,45}, -{71,-27,46}, -{71,-27,47}, -{71,-27,48}, -{71,-27,49}, -{71,-27,50}, -{71,-27,51}, -{71,-27,52}, -{71,-27,53}, -{71,-27,54}, -{71,-27,55}, -{71,-27,56}, -{71,-27,57}, -{71,-27,58}, -{71,-27,59}, -{71,-27,60}, -{71,-27,61}, -{71,-27,62}, -{71,-27,63}, -{71,-27,64}, -{71,-27,65}, -{71,-27,66}, -{71,-27,67}, -{71,-27,68}, -{71,-27,69}, -{71,-27,70}, -{71,-27,71}, -{71,-27,72}, -{71,-26,-30}, -{71,-26,-29}, -{71,-26,-28}, -{71,-26,-27}, -{71,-26,-26}, -{71,-26,-25}, -{71,-26,-24}, -{71,-26,-23}, -{71,-26,-22}, -{71,-26,-21}, -{71,-26,-20}, -{71,-26,-19}, -{71,-26,-18}, -{71,-26,-17}, -{71,-26,-16}, -{71,-26,-15}, -{71,-26,-14}, -{71,-26,-13}, -{71,-26,-12}, -{71,-26,-11}, -{71,-26,-10}, -{71,-26,-9}, -{71,-26,-8}, -{71,-26,-7}, -{71,-26,-6}, -{71,-26,-5}, -{71,-26,-4}, -{71,-26,-3}, -{71,-26,-2}, -{71,-26,-1}, -{71,-26,0}, -{71,-26,1}, -{71,-26,2}, -{71,-26,3}, -{71,-26,4}, -{71,-26,5}, -{71,-26,6}, -{71,-26,7}, -{71,-26,8}, -{71,-26,9}, -{71,-26,10}, -{71,-26,11}, -{71,-26,12}, -{71,-26,13}, -{71,-26,14}, -{71,-26,15}, -{71,-26,16}, -{71,-26,17}, -{71,-26,18}, -{71,-26,19}, -{71,-26,20}, -{71,-26,21}, -{71,-26,22}, -{71,-26,23}, -{71,-26,24}, -{71,-26,25}, -{71,-26,26}, -{71,-26,27}, -{71,-26,28}, -{71,-26,29}, -{71,-26,30}, -{71,-26,31}, -{71,-26,32}, -{71,-26,33}, -{71,-26,34}, -{71,-26,35}, -{71,-26,36}, -{71,-26,37}, -{71,-26,38}, -{71,-26,39}, -{71,-26,40}, -{71,-26,41}, -{71,-26,42}, -{71,-26,43}, -{71,-26,44}, -{71,-26,45}, -{71,-26,46}, -{71,-26,47}, -{71,-26,48}, -{71,-26,49}, -{71,-26,50}, -{71,-26,51}, -{71,-26,52}, -{71,-26,53}, -{71,-26,54}, -{71,-26,55}, -{71,-26,56}, -{71,-26,57}, -{71,-26,58}, -{71,-26,59}, -{71,-26,60}, -{71,-26,61}, -{71,-26,62}, -{71,-26,63}, -{71,-26,64}, -{71,-26,65}, -{71,-26,66}, -{71,-26,67}, -{71,-26,68}, -{71,-26,69}, -{71,-26,70}, -{71,-26,71}, -{71,-26,72}, -{71,-25,-32}, -{71,-25,-31}, -{71,-25,-30}, -{71,-25,-29}, -{71,-25,-28}, -{71,-25,-27}, -{71,-25,-26}, -{71,-25,-25}, -{71,-25,-24}, -{71,-25,-23}, -{71,-25,-22}, -{71,-25,-21}, -{71,-25,-20}, -{71,-25,-19}, -{71,-25,-18}, -{71,-25,-17}, -{71,-25,-16}, -{71,-25,-15}, -{71,-25,-14}, -{71,-25,-13}, -{71,-25,-12}, -{71,-25,-11}, -{71,-25,-10}, -{71,-25,-9}, -{71,-25,-8}, -{71,-25,-7}, -{71,-25,-6}, -{71,-25,-5}, -{71,-25,-4}, -{71,-25,-3}, -{71,-25,-2}, -{71,-25,-1}, -{71,-25,0}, -{71,-25,1}, -{71,-25,2}, -{71,-25,3}, -{71,-25,4}, -{71,-25,5}, -{71,-25,6}, -{71,-25,7}, -{71,-25,8}, -{71,-25,9}, -{71,-25,10}, -{71,-25,11}, -{71,-25,12}, -{71,-25,13}, -{71,-25,14}, -{71,-25,15}, -{71,-25,16}, -{71,-25,17}, -{71,-25,18}, -{71,-25,19}, -{71,-25,20}, -{71,-25,21}, -{71,-25,22}, -{71,-25,23}, -{71,-25,24}, -{71,-25,25}, -{71,-25,26}, -{71,-25,27}, -{71,-25,28}, -{71,-25,29}, -{71,-25,30}, -{71,-25,31}, -{71,-25,32}, -{71,-25,33}, -{71,-25,34}, -{71,-25,35}, -{71,-25,36}, -{71,-25,37}, -{71,-25,38}, -{71,-25,39}, -{71,-25,40}, -{71,-25,41}, -{71,-25,42}, -{71,-25,43}, -{71,-25,44}, -{71,-25,45}, -{71,-25,46}, -{71,-25,47}, -{71,-25,48}, -{71,-25,49}, -{71,-25,50}, -{71,-25,51}, -{71,-25,52}, -{71,-25,53}, -{71,-25,54}, -{71,-25,55}, -{71,-25,56}, -{71,-25,57}, -{71,-25,58}, -{71,-25,59}, -{71,-25,60}, -{71,-25,61}, -{71,-25,62}, -{71,-25,63}, -{71,-25,64}, -{71,-25,65}, -{71,-25,66}, -{71,-25,67}, -{71,-25,68}, -{71,-25,69}, -{71,-25,70}, -{71,-25,71}, -{71,-25,72}, -{71,-24,-33}, -{71,-24,-32}, -{71,-24,-31}, -{71,-24,-30}, -{71,-24,-29}, -{71,-24,-28}, -{71,-24,-27}, -{71,-24,-26}, -{71,-24,-25}, -{71,-24,-24}, -{71,-24,-23}, -{71,-24,-22}, -{71,-24,-21}, -{71,-24,-20}, -{71,-24,-19}, -{71,-24,-18}, -{71,-24,-17}, -{71,-24,-16}, -{71,-24,-15}, -{71,-24,-14}, -{71,-24,-13}, -{71,-24,-12}, -{71,-24,-11}, -{71,-24,-10}, -{71,-24,-9}, -{71,-24,-8}, -{71,-24,-7}, -{71,-24,-6}, -{71,-24,-5}, -{71,-24,-4}, -{71,-24,-3}, -{71,-24,-2}, -{71,-24,-1}, -{71,-24,0}, -{71,-24,1}, -{71,-24,2}, -{71,-24,3}, -{71,-24,4}, -{71,-24,5}, -{71,-24,6}, -{71,-24,7}, -{71,-24,8}, -{71,-24,9}, -{71,-24,10}, -{71,-24,11}, -{71,-24,12}, -{71,-24,13}, -{71,-24,14}, -{71,-24,15}, -{71,-24,16}, -{71,-24,17}, -{71,-24,18}, -{71,-24,19}, -{71,-24,20}, -{71,-24,21}, -{71,-24,22}, -{71,-24,23}, -{71,-24,24}, -{71,-24,25}, -{71,-24,26}, -{71,-24,27}, -{71,-24,28}, -{71,-24,29}, -{71,-24,30}, -{71,-24,31}, -{71,-24,32}, -{71,-24,33}, -{71,-24,34}, -{71,-24,35}, -{71,-24,36}, -{71,-24,37}, -{71,-24,38}, -{71,-24,39}, -{71,-24,40}, -{71,-24,41}, -{71,-24,42}, -{71,-24,43}, -{71,-24,44}, -{71,-24,45}, -{71,-24,46}, -{71,-24,47}, -{71,-24,48}, -{71,-24,49}, -{71,-24,50}, -{71,-24,51}, -{71,-24,52}, -{71,-24,53}, -{71,-24,54}, -{71,-24,55}, -{71,-24,56}, -{71,-24,57}, -{71,-24,58}, -{71,-24,59}, -{71,-24,60}, -{71,-24,61}, -{71,-24,62}, -{71,-24,63}, -{71,-24,64}, -{71,-24,65}, -{71,-24,66}, -{71,-24,67}, -{71,-24,68}, -{71,-24,69}, -{71,-24,70}, -{71,-24,71}, -{71,-24,72}, -{71,-23,-34}, -{71,-23,-33}, -{71,-23,-32}, -{71,-23,-31}, -{71,-23,-30}, -{71,-23,-29}, -{71,-23,-28}, -{71,-23,-27}, -{71,-23,-26}, -{71,-23,-25}, -{71,-23,-24}, -{71,-23,-23}, -{71,-23,-22}, -{71,-23,-21}, -{71,-23,-20}, -{71,-23,-19}, -{71,-23,-18}, -{71,-23,-17}, -{71,-23,-16}, -{71,-23,-15}, -{71,-23,-14}, -{71,-23,-13}, -{71,-23,-12}, -{71,-23,-11}, -{71,-23,-10}, -{71,-23,-9}, -{71,-23,-8}, -{71,-23,-7}, -{71,-23,-6}, -{71,-23,-5}, -{71,-23,-4}, -{71,-23,-3}, -{71,-23,-2}, -{71,-23,-1}, -{71,-23,0}, -{71,-23,1}, -{71,-23,2}, -{71,-23,3}, -{71,-23,4}, -{71,-23,5}, -{71,-23,6}, -{71,-23,7}, -{71,-23,8}, -{71,-23,9}, -{71,-23,10}, -{71,-23,11}, -{71,-23,12}, -{71,-23,13}, -{71,-23,14}, -{71,-23,15}, -{71,-23,16}, -{71,-23,17}, -{71,-23,18}, -{71,-23,19}, -{71,-23,20}, -{71,-23,21}, -{71,-23,22}, -{71,-23,23}, -{71,-23,24}, -{71,-23,25}, -{71,-23,26}, -{71,-23,27}, -{71,-23,28}, -{71,-23,29}, -{71,-23,30}, -{71,-23,31}, -{71,-23,32}, -{71,-23,33}, -{71,-23,34}, -{71,-23,35}, -{71,-23,36}, -{71,-23,37}, -{71,-23,38}, -{71,-23,39}, -{71,-23,40}, -{71,-23,41}, -{71,-23,42}, -{71,-23,43}, -{71,-23,44}, -{71,-23,45}, -{71,-23,46}, -{71,-23,47}, -{71,-23,48}, -{71,-23,49}, -{71,-23,50}, -{71,-23,51}, -{71,-23,52}, -{71,-23,53}, -{71,-23,54}, -{71,-23,55}, -{71,-23,56}, -{71,-23,57}, -{71,-23,58}, -{71,-23,59}, -{71,-23,60}, -{71,-23,61}, -{71,-23,62}, -{71,-23,63}, -{71,-23,64}, -{71,-23,65}, -{71,-23,66}, -{71,-23,67}, -{71,-23,68}, -{71,-23,69}, -{71,-23,70}, -{71,-23,71}, -{71,-23,72}, -{71,-22,-36}, -{71,-22,-35}, -{71,-22,-34}, -{71,-22,-33}, -{71,-22,-32}, -{71,-22,-31}, -{71,-22,-30}, -{71,-22,-29}, -{71,-22,-28}, -{71,-22,-27}, -{71,-22,-26}, -{71,-22,-25}, -{71,-22,-24}, -{71,-22,-23}, -{71,-22,-22}, -{71,-22,-21}, -{71,-22,-20}, -{71,-22,-19}, -{71,-22,-18}, -{71,-22,-17}, -{71,-22,-16}, -{71,-22,-15}, -{71,-22,-14}, -{71,-22,-13}, -{71,-22,-12}, -{71,-22,-11}, -{71,-22,-10}, -{71,-22,-9}, -{71,-22,-8}, -{71,-22,-7}, -{71,-22,-6}, -{71,-22,-5}, -{71,-22,-4}, -{71,-22,-3}, -{71,-22,-2}, -{71,-22,-1}, -{71,-22,0}, -{71,-22,1}, -{71,-22,2}, -{71,-22,3}, -{71,-22,4}, -{71,-22,5}, -{71,-22,6}, -{71,-22,7}, -{71,-22,8}, -{71,-22,9}, -{71,-22,10}, -{71,-22,11}, -{71,-22,12}, -{71,-22,13}, -{71,-22,14}, -{71,-22,15}, -{71,-22,16}, -{71,-22,17}, -{71,-22,18}, -{71,-22,19}, -{71,-22,20}, -{71,-22,21}, -{71,-22,22}, -{71,-22,23}, -{71,-22,24}, -{71,-22,25}, -{71,-22,26}, -{71,-22,27}, -{71,-22,28}, -{71,-22,29}, -{71,-22,30}, -{71,-22,31}, -{71,-22,32}, -{71,-22,33}, -{71,-22,34}, -{71,-22,35}, -{71,-22,36}, -{71,-22,37}, -{71,-22,38}, -{71,-22,39}, -{71,-22,40}, -{71,-22,41}, -{71,-22,42}, -{71,-22,43}, -{71,-22,44}, -{71,-22,45}, -{71,-22,46}, -{71,-22,47}, -{71,-22,48}, -{71,-22,49}, -{71,-22,50}, -{71,-22,51}, -{71,-22,52}, -{71,-22,53}, -{71,-22,54}, -{71,-22,55}, -{71,-22,56}, -{71,-22,57}, -{71,-22,58}, -{71,-22,59}, -{71,-22,60}, -{71,-22,61}, -{71,-22,62}, -{71,-22,63}, -{71,-22,64}, -{71,-22,65}, -{71,-22,66}, -{71,-22,67}, -{71,-22,68}, -{71,-22,69}, -{71,-22,70}, -{71,-22,71}, -{71,-22,72}, -{71,-21,-37}, -{71,-21,-36}, -{71,-21,-35}, -{71,-21,-34}, -{71,-21,-33}, -{71,-21,-32}, -{71,-21,-31}, -{71,-21,-30}, -{71,-21,-29}, -{71,-21,-28}, -{71,-21,-27}, -{71,-21,-26}, -{71,-21,-25}, -{71,-21,-24}, -{71,-21,-23}, -{71,-21,-22}, -{71,-21,-21}, -{71,-21,-20}, -{71,-21,-19}, -{71,-21,-18}, -{71,-21,-17}, -{71,-21,-16}, -{71,-21,-15}, -{71,-21,-14}, -{71,-21,-13}, -{71,-21,-12}, -{71,-21,-11}, -{71,-21,-10}, -{71,-21,-9}, -{71,-21,-8}, -{71,-21,-7}, -{71,-21,-6}, -{71,-21,-5}, -{71,-21,-4}, -{71,-21,-3}, -{71,-21,-2}, -{71,-21,-1}, -{71,-21,0}, -{71,-21,1}, -{71,-21,2}, -{71,-21,3}, -{71,-21,4}, -{71,-21,5}, -{71,-21,6}, -{71,-21,7}, -{71,-21,8}, -{71,-21,9}, -{71,-21,10}, -{71,-21,11}, -{71,-21,12}, -{71,-21,13}, -{71,-21,14}, -{71,-21,15}, -{71,-21,16}, -{71,-21,17}, -{71,-21,18}, -{71,-21,19}, -{71,-21,20}, -{71,-21,21}, -{71,-21,22}, -{71,-21,23}, -{71,-21,24}, -{71,-21,25}, -{71,-21,26}, -{71,-21,27}, -{71,-21,28}, -{71,-21,29}, -{71,-21,30}, -{71,-21,31}, -{71,-21,32}, -{71,-21,33}, -{71,-21,34}, -{71,-21,35}, -{71,-21,36}, -{71,-21,37}, -{71,-21,38}, -{71,-21,39}, -{71,-21,40}, -{71,-21,41}, -{71,-21,42}, -{71,-21,43}, -{71,-21,44}, -{71,-21,45}, -{71,-21,46}, -{71,-21,47}, -{71,-21,48}, -{71,-21,49}, -{71,-21,50}, -{71,-21,51}, -{71,-21,52}, -{71,-21,53}, -{71,-21,54}, -{71,-21,55}, -{71,-21,56}, -{71,-21,57}, -{71,-21,58}, -{71,-21,59}, -{71,-21,60}, -{71,-21,61}, -{71,-21,62}, -{71,-21,63}, -{71,-21,64}, -{71,-21,65}, -{71,-21,66}, -{71,-21,67}, -{71,-21,68}, -{71,-21,69}, -{71,-21,70}, -{71,-21,71}, -{71,-21,72}, -{71,-20,-38}, -{71,-20,-37}, -{71,-20,-36}, -{71,-20,-35}, -{71,-20,-34}, -{71,-20,-33}, -{71,-20,-32}, -{71,-20,-31}, -{71,-20,-30}, -{71,-20,-29}, -{71,-20,-28}, -{71,-20,-27}, -{71,-20,-26}, -{71,-20,-25}, -{71,-20,-24}, -{71,-20,-23}, -{71,-20,-22}, -{71,-20,-21}, -{71,-20,-20}, -{71,-20,-19}, -{71,-20,-18}, -{71,-20,-17}, -{71,-20,-16}, -{71,-20,-15}, -{71,-20,-14}, -{71,-20,-13}, -{71,-20,-12}, -{71,-20,-11}, -{71,-20,-10}, -{71,-20,-9}, -{71,-20,-8}, -{71,-20,-7}, -{71,-20,-6}, -{71,-20,-5}, -{71,-20,-4}, -{71,-20,-3}, -{71,-20,-2}, -{71,-20,-1}, -{71,-20,0}, -{71,-20,1}, -{71,-20,2}, -{71,-20,3}, -{71,-20,4}, -{71,-20,5}, -{71,-20,6}, -{71,-20,7}, -{71,-20,8}, -{71,-20,9}, -{71,-20,10}, -{71,-20,11}, -{71,-20,12}, -{71,-20,13}, -{71,-20,14}, -{71,-20,15}, -{71,-20,16}, -{71,-20,17}, -{71,-20,18}, -{71,-20,19}, -{71,-20,20}, -{71,-20,21}, -{71,-20,22}, -{71,-20,23}, -{71,-20,24}, -{71,-20,25}, -{71,-20,26}, -{71,-20,27}, -{71,-20,28}, -{71,-20,29}, -{71,-20,30}, -{71,-20,31}, -{71,-20,32}, -{71,-20,33}, -{71,-20,34}, -{71,-20,35}, -{71,-20,36}, -{71,-20,37}, -{71,-20,38}, -{71,-20,39}, -{71,-20,40}, -{71,-20,41}, -{71,-20,42}, -{71,-20,43}, -{71,-20,44}, -{71,-20,45}, -{71,-20,46}, -{71,-20,47}, -{71,-20,48}, -{71,-20,49}, -{71,-20,50}, -{71,-20,51}, -{71,-20,52}, -{71,-20,53}, -{71,-20,54}, -{71,-20,55}, -{71,-20,56}, -{71,-20,57}, -{71,-20,58}, -{71,-20,59}, -{71,-20,60}, -{71,-20,61}, -{71,-20,62}, -{71,-20,63}, -{71,-20,64}, -{71,-20,65}, -{71,-20,66}, -{71,-20,67}, -{71,-20,68}, -{71,-20,69}, -{71,-20,70}, -{71,-20,71}, -{71,-20,72}, -{71,-19,-39}, -{71,-19,-38}, -{71,-19,-37}, -{71,-19,-36}, -{71,-19,-35}, -{71,-19,-34}, -{71,-19,-33}, -{71,-19,-32}, -{71,-19,-31}, -{71,-19,-30}, -{71,-19,-29}, -{71,-19,-28}, -{71,-19,-27}, -{71,-19,-26}, -{71,-19,-25}, -{71,-19,-24}, -{71,-19,-23}, -{71,-19,-22}, -{71,-19,-21}, -{71,-19,-20}, -{71,-19,-19}, -{71,-19,-18}, -{71,-19,-17}, -{71,-19,-16}, -{71,-19,-15}, -{71,-19,-14}, -{71,-19,-13}, -{71,-19,-12}, -{71,-19,-11}, -{71,-19,-10}, -{71,-19,-9}, -{71,-19,-8}, -{71,-19,-7}, -{71,-19,-6}, -{71,-19,-5}, -{71,-19,-4}, -{71,-19,-3}, -{71,-19,-2}, -{71,-19,-1}, -{71,-19,0}, -{71,-19,1}, -{71,-19,2}, -{71,-19,3}, -{71,-19,4}, -{71,-19,5}, -{71,-19,6}, -{71,-19,7}, -{71,-19,8}, -{71,-19,9}, -{71,-19,10}, -{71,-19,11}, -{71,-19,12}, -{71,-19,13}, -{71,-19,14}, -{71,-19,15}, -{71,-19,16}, -{71,-19,17}, -{71,-19,18}, -{71,-19,19}, -{71,-19,20}, -{71,-19,21}, -{71,-19,22}, -{71,-19,23}, -{71,-19,24}, -{71,-19,25}, -{71,-19,26}, -{71,-19,27}, -{71,-19,28}, -{71,-19,29}, -{71,-19,30}, -{71,-19,31}, -{71,-19,32}, -{71,-19,33}, -{71,-19,34}, -{71,-19,35}, -{71,-19,36}, -{71,-19,37}, -{71,-19,38}, -{71,-19,39}, -{71,-19,40}, -{71,-19,41}, -{71,-19,42}, -{71,-19,43}, -{71,-19,44}, -{71,-19,45}, -{71,-19,46}, -{71,-19,47}, -{71,-19,48}, -{71,-19,49}, -{71,-19,50}, -{71,-19,51}, -{71,-19,52}, -{71,-19,53}, -{71,-19,54}, -{71,-19,55}, -{71,-19,56}, -{71,-19,57}, -{71,-19,58}, -{71,-19,59}, -{71,-19,60}, -{71,-19,61}, -{71,-19,62}, -{71,-19,63}, -{71,-19,64}, -{71,-19,65}, -{71,-19,66}, -{71,-19,67}, -{71,-19,68}, -{71,-19,69}, -{71,-19,70}, -{71,-19,71}, -{71,-19,72}, -{71,-18,-41}, -{71,-18,-40}, -{71,-18,-39}, -{71,-18,-38}, -{71,-18,-37}, -{71,-18,-36}, -{71,-18,-35}, -{71,-18,-34}, -{71,-18,-33}, -{71,-18,-32}, -{71,-18,-31}, -{71,-18,-30}, -{71,-18,-29}, -{71,-18,-28}, -{71,-18,-27}, -{71,-18,-26}, -{71,-18,-25}, -{71,-18,-24}, -{71,-18,-23}, -{71,-18,-22}, -{71,-18,-21}, -{71,-18,-20}, -{71,-18,-19}, -{71,-18,-18}, -{71,-18,-17}, -{71,-18,-16}, -{71,-18,-15}, -{71,-18,-14}, -{71,-18,-13}, -{71,-18,-12}, -{71,-18,-11}, -{71,-18,-10}, -{71,-18,-9}, -{71,-18,-8}, -{71,-18,-7}, -{71,-18,-6}, -{71,-18,-5}, -{71,-18,-4}, -{71,-18,-3}, -{71,-18,-2}, -{71,-18,-1}, -{71,-18,0}, -{71,-18,1}, -{71,-18,2}, -{71,-18,3}, -{71,-18,4}, -{71,-18,5}, -{71,-18,6}, -{71,-18,7}, -{71,-18,8}, -{71,-18,9}, -{71,-18,10}, -{71,-18,11}, -{71,-18,12}, -{71,-18,13}, -{71,-18,14}, -{71,-18,15}, -{71,-18,16}, -{71,-18,17}, -{71,-18,18}, -{71,-18,19}, -{71,-18,20}, -{71,-18,21}, -{71,-18,22}, -{71,-18,23}, -{71,-18,24}, -{71,-18,25}, -{71,-18,26}, -{71,-18,27}, -{71,-18,28}, -{71,-18,29}, -{71,-18,30}, -{71,-18,31}, -{71,-18,32}, -{71,-18,33}, -{71,-18,34}, -{71,-18,35}, -{71,-18,36}, -{71,-18,37}, -{71,-18,38}, -{71,-18,39}, -{71,-18,40}, -{71,-18,41}, -{71,-18,42}, -{71,-18,43}, -{71,-18,44}, -{71,-18,45}, -{71,-18,46}, -{71,-18,47}, -{71,-18,48}, -{71,-18,49}, -{71,-18,50}, -{71,-18,51}, -{71,-18,52}, -{71,-18,53}, -{71,-18,54}, -{71,-18,55}, -{71,-18,56}, -{71,-18,57}, -{71,-18,58}, -{71,-18,59}, -{71,-18,60}, -{71,-18,61}, -{71,-18,62}, -{71,-18,63}, -{71,-18,64}, -{71,-18,65}, -{71,-18,66}, -{71,-18,67}, -{71,-18,68}, -{71,-18,69}, -{71,-18,70}, -{71,-18,71}, -{71,-18,72}, -{71,-17,-42}, -{71,-17,-41}, -{71,-17,-40}, -{71,-17,-39}, -{71,-17,-38}, -{71,-17,-37}, -{71,-17,-36}, -{71,-17,-35}, -{71,-17,-34}, -{71,-17,-33}, -{71,-17,-32}, -{71,-17,-31}, -{71,-17,-30}, -{71,-17,-29}, -{71,-17,-28}, -{71,-17,-27}, -{71,-17,-26}, -{71,-17,-25}, -{71,-17,-24}, -{71,-17,-23}, -{71,-17,-22}, -{71,-17,-21}, -{71,-17,-20}, -{71,-17,-19}, -{71,-17,-18}, -{71,-17,-17}, -{71,-17,-16}, -{71,-17,-15}, -{71,-17,-14}, -{71,-17,-13}, -{71,-17,-12}, -{71,-17,-11}, -{71,-17,-10}, -{71,-17,-9}, -{71,-17,-8}, -{71,-17,-7}, -{71,-17,-6}, -{71,-17,-5}, -{71,-17,-4}, -{71,-17,-3}, -{71,-17,-2}, -{71,-17,-1}, -{71,-17,0}, -{71,-17,1}, -{71,-17,2}, -{71,-17,3}, -{71,-17,4}, -{71,-17,5}, -{71,-17,6}, -{71,-17,7}, -{71,-17,8}, -{71,-17,9}, -{71,-17,10}, -{71,-17,11}, -{71,-17,12}, -{71,-17,13}, -{71,-17,14}, -{71,-17,15}, -{71,-17,16}, -{71,-17,17}, -{71,-17,18}, -{71,-17,19}, -{71,-17,20}, -{71,-17,21}, -{71,-17,22}, -{71,-17,23}, -{71,-17,24}, -{71,-17,25}, -{71,-17,26}, -{71,-17,27}, -{71,-17,28}, -{71,-17,29}, -{71,-17,30}, -{71,-17,31}, -{71,-17,32}, -{71,-17,33}, -{71,-17,34}, -{71,-17,35}, -{71,-17,36}, -{71,-17,37}, -{71,-17,38}, -{71,-17,39}, -{71,-17,40}, -{71,-17,41}, -{71,-17,42}, -{71,-17,43}, -{71,-17,44}, -{71,-17,45}, -{71,-17,46}, -{71,-17,47}, -{71,-17,48}, -{71,-17,49}, -{71,-17,50}, -{71,-17,51}, -{71,-17,52}, -{71,-17,53}, -{71,-17,54}, -{71,-17,55}, -{71,-17,56}, -{71,-17,57}, -{71,-17,58}, -{71,-17,59}, -{71,-17,60}, -{71,-17,61}, -{71,-17,62}, -{71,-17,63}, -{71,-17,64}, -{71,-17,65}, -{71,-17,66}, -{71,-17,67}, -{71,-17,68}, -{71,-17,69}, -{71,-17,70}, -{71,-17,71}, -{71,-17,72}, -{71,-16,-43}, -{71,-16,-42}, -{71,-16,-41}, -{71,-16,-40}, -{71,-16,-39}, -{71,-16,-38}, -{71,-16,-37}, -{71,-16,-36}, -{71,-16,-35}, -{71,-16,-34}, -{71,-16,-33}, -{71,-16,-32}, -{71,-16,-31}, -{71,-16,-30}, -{71,-16,-29}, -{71,-16,-28}, -{71,-16,-27}, -{71,-16,-26}, -{71,-16,-25}, -{71,-16,-24}, -{71,-16,-23}, -{71,-16,-22}, -{71,-16,-21}, -{71,-16,-20}, -{71,-16,-19}, -{71,-16,-18}, -{71,-16,-17}, -{71,-16,-16}, -{71,-16,-15}, -{71,-16,-14}, -{71,-16,-13}, -{71,-16,-12}, -{71,-16,-11}, -{71,-16,-10}, -{71,-16,-9}, -{71,-16,-8}, -{71,-16,-7}, -{71,-16,-6}, -{71,-16,-5}, -{71,-16,-4}, -{71,-16,-3}, -{71,-16,-2}, -{71,-16,-1}, -{71,-16,0}, -{71,-16,1}, -{71,-16,2}, -{71,-16,3}, -{71,-16,4}, -{71,-16,5}, -{71,-16,6}, -{71,-16,7}, -{71,-16,8}, -{71,-16,9}, -{71,-16,10}, -{71,-16,11}, -{71,-16,12}, -{71,-16,13}, -{71,-16,14}, -{71,-16,15}, -{71,-16,16}, -{71,-16,17}, -{71,-16,18}, -{71,-16,19}, -{71,-16,20}, -{71,-16,21}, -{71,-16,22}, -{71,-16,23}, -{71,-16,24}, -{71,-16,25}, -{71,-16,26}, -{71,-16,27}, -{71,-16,28}, -{71,-16,29}, -{71,-16,30}, -{71,-16,31}, -{71,-16,32}, -{71,-16,33}, -{71,-16,34}, -{71,-16,35}, -{71,-16,36}, -{71,-16,37}, -{71,-16,38}, -{71,-16,39}, -{71,-16,40}, -{71,-16,41}, -{71,-16,42}, -{71,-16,43}, -{71,-16,44}, -{71,-16,45}, -{71,-16,46}, -{71,-16,47}, -{71,-16,48}, -{71,-16,49}, -{71,-16,50}, -{71,-16,51}, -{71,-16,52}, -{71,-16,53}, -{71,-16,54}, -{71,-16,55}, -{71,-16,56}, -{71,-16,57}, -{71,-16,58}, -{71,-16,59}, -{71,-16,60}, -{71,-16,61}, -{71,-16,62}, -{71,-16,63}, -{71,-16,64}, -{71,-16,65}, -{71,-16,66}, -{71,-16,67}, -{71,-16,68}, -{71,-16,69}, -{71,-16,70}, -{71,-16,71}, -{71,-16,72}, -{71,-15,-44}, -{71,-15,-43}, -{71,-15,-42}, -{71,-15,-41}, -{71,-15,-40}, -{71,-15,-39}, -{71,-15,-38}, -{71,-15,-37}, -{71,-15,-36}, -{71,-15,-35}, -{71,-15,-34}, -{71,-15,-33}, -{71,-15,-32}, -{71,-15,-31}, -{71,-15,-30}, -{71,-15,-29}, -{71,-15,-28}, -{71,-15,-27}, -{71,-15,-26}, -{71,-15,-25}, -{71,-15,-24}, -{71,-15,-23}, -{71,-15,-22}, -{71,-15,-21}, -{71,-15,-20}, -{71,-15,-19}, -{71,-15,-18}, -{71,-15,-17}, -{71,-15,-16}, -{71,-15,-15}, -{71,-15,-14}, -{71,-15,-13}, -{71,-15,-12}, -{71,-15,-11}, -{71,-15,-10}, -{71,-15,-9}, -{71,-15,-8}, -{71,-15,-7}, -{71,-15,-6}, -{71,-15,-5}, -{71,-15,-4}, -{71,-15,-3}, -{71,-15,-2}, -{71,-15,-1}, -{71,-15,0}, -{71,-15,1}, -{71,-15,2}, -{71,-15,3}, -{71,-15,4}, -{71,-15,5}, -{71,-15,6}, -{71,-15,7}, -{71,-15,8}, -{71,-15,9}, -{71,-15,10}, -{71,-15,11}, -{71,-15,12}, -{71,-15,13}, -{71,-15,14}, -{71,-15,15}, -{71,-15,16}, -{71,-15,17}, -{71,-15,18}, -{71,-15,19}, -{71,-15,20}, -{71,-15,21}, -{71,-15,22}, -{71,-15,23}, -{71,-15,24}, -{71,-15,25}, -{71,-15,26}, -{71,-15,27}, -{71,-15,28}, -{71,-15,29}, -{71,-15,30}, -{71,-15,31}, -{71,-15,32}, -{71,-15,33}, -{71,-15,34}, -{71,-15,35}, -{71,-15,36}, -{71,-15,37}, -{71,-15,38}, -{71,-15,39}, -{71,-15,40}, -{71,-15,41}, -{71,-15,42}, -{71,-15,43}, -{71,-15,44}, -{71,-15,45}, -{71,-15,46}, -{71,-15,47}, -{71,-15,48}, -{71,-15,49}, -{71,-15,50}, -{71,-15,51}, -{71,-15,52}, -{71,-15,53}, -{71,-15,54}, -{71,-15,55}, -{71,-15,56}, -{71,-15,57}, -{71,-15,58}, -{71,-15,59}, -{71,-15,60}, -{71,-15,61}, -{71,-15,62}, -{71,-15,63}, -{71,-15,64}, -{71,-15,65}, -{71,-15,66}, -{71,-15,67}, -{71,-15,68}, -{71,-15,69}, -{71,-15,70}, -{71,-15,71}, -{71,-15,72}, -{71,-14,-45}, -{71,-14,-44}, -{71,-14,-43}, -{71,-14,-42}, -{71,-14,-41}, -{71,-14,-40}, -{71,-14,-39}, -{71,-14,-38}, -{71,-14,-37}, -{71,-14,-36}, -{71,-14,-35}, -{71,-14,-34}, -{71,-14,-33}, -{71,-14,-32}, -{71,-14,-31}, -{71,-14,-30}, -{71,-14,-29}, -{71,-14,-28}, -{71,-14,-27}, -{71,-14,-26}, -{71,-14,-25}, -{71,-14,-24}, -{71,-14,-23}, -{71,-14,-22}, -{71,-14,-21}, -{71,-14,-20}, -{71,-14,-19}, -{71,-14,-18}, -{71,-14,-17}, -{71,-14,-16}, -{71,-14,-15}, -{71,-14,-14}, -{71,-14,-13}, -{71,-14,-12}, -{71,-14,-11}, -{71,-14,-10}, -{71,-14,-9}, -{71,-14,-8}, -{71,-14,-7}, -{71,-14,-6}, -{71,-14,-5}, -{71,-14,-4}, -{71,-14,-3}, -{71,-14,-2}, -{71,-14,-1}, -{71,-14,0}, -{71,-14,1}, -{71,-14,2}, -{71,-14,3}, -{71,-14,4}, -{71,-14,5}, -{71,-14,6}, -{71,-14,7}, -{71,-14,8}, -{71,-14,9}, -{71,-14,10}, -{71,-14,11}, -{71,-14,12}, -{71,-14,13}, -{71,-14,14}, -{71,-14,15}, -{71,-14,16}, -{71,-14,17}, -{71,-14,18}, -{71,-14,19}, -{71,-14,20}, -{71,-14,21}, -{71,-14,22}, -{71,-14,23}, -{71,-14,24}, -{71,-14,25}, -{71,-14,26}, -{71,-14,27}, -{71,-14,28}, -{71,-14,29}, -{71,-14,30}, -{71,-14,31}, -{71,-14,32}, -{71,-14,33}, -{71,-14,34}, -{71,-14,35}, -{71,-14,36}, -{71,-14,37}, -{71,-14,38}, -{71,-14,39}, -{71,-14,40}, -{71,-14,41}, -{71,-14,42}, -{71,-14,43}, -{71,-14,44}, -{71,-14,45}, -{71,-14,46}, -{71,-14,47}, -{71,-14,48}, -{71,-14,49}, -{71,-14,50}, -{71,-14,51}, -{71,-14,52}, -{71,-14,53}, -{71,-14,54}, -{71,-14,55}, -{71,-14,56}, -{71,-14,57}, -{71,-14,58}, -{71,-14,59}, -{71,-14,60}, -{71,-14,61}, -{71,-14,62}, -{71,-14,63}, -{71,-14,64}, -{71,-14,65}, -{71,-14,66}, -{71,-14,67}, -{71,-14,68}, -{71,-14,69}, -{71,-14,70}, -{71,-14,71}, -{71,-14,72}, -{71,-14,73}, -{71,-13,-45}, -{71,-13,-44}, -{71,-13,-43}, -{71,-13,-42}, -{71,-13,-41}, -{71,-13,-40}, -{71,-13,-39}, -{71,-13,-38}, -{71,-13,-37}, -{71,-13,-36}, -{71,-13,-35}, -{71,-13,-34}, -{71,-13,-33}, -{71,-13,-32}, -{71,-13,-31}, -{71,-13,-30}, -{71,-13,-29}, -{71,-13,-28}, -{71,-13,-27}, -{71,-13,-26}, -{71,-13,-25}, -{71,-13,-24}, -{71,-13,-23}, -{71,-13,-22}, -{71,-13,-21}, -{71,-13,-20}, -{71,-13,-19}, -{71,-13,-18}, -{71,-13,-17}, -{71,-13,-16}, -{71,-13,-15}, -{71,-13,-14}, -{71,-13,-13}, -{71,-13,-12}, -{71,-13,-11}, -{71,-13,-10}, -{71,-13,-9}, -{71,-13,-8}, -{71,-13,-7}, -{71,-13,-6}, -{71,-13,-5}, -{71,-13,-4}, -{71,-13,-3}, -{71,-13,-2}, -{71,-13,-1}, -{71,-13,0}, -{71,-13,1}, -{71,-13,2}, -{71,-13,3}, -{71,-13,4}, -{71,-13,5}, -{71,-13,6}, -{71,-13,7}, -{71,-13,8}, -{71,-13,9}, -{71,-13,10}, -{71,-13,11}, -{71,-13,12}, -{71,-13,13}, -{71,-13,14}, -{71,-13,15}, -{71,-13,16}, -{71,-13,17}, -{71,-13,18}, -{71,-13,19}, -{71,-13,20}, -{71,-13,21}, -{71,-13,22}, -{71,-13,23}, -{71,-13,24}, -{71,-13,25}, -{71,-13,26}, -{71,-13,27}, -{71,-13,28}, -{71,-13,29}, -{71,-13,30}, -{71,-13,31}, -{71,-13,32}, -{71,-13,33}, -{71,-13,34}, -{71,-13,35}, -{71,-13,36}, -{71,-13,37}, -{71,-13,38}, -{71,-13,39}, -{71,-13,40}, -{71,-13,41}, -{71,-13,42}, -{71,-13,43}, -{71,-13,44}, -{71,-13,45}, -{71,-13,46}, -{71,-13,47}, -{71,-13,48}, -{71,-13,49}, -{71,-13,50}, -{71,-13,51}, -{71,-13,52}, -{71,-13,53}, -{71,-13,54}, -{71,-13,55}, -{71,-13,56}, -{71,-13,57}, -{71,-13,58}, -{71,-13,59}, -{71,-13,60}, -{71,-13,61}, -{71,-13,62}, -{71,-13,63}, -{71,-13,64}, -{71,-13,65}, -{71,-13,66}, -{71,-13,67}, -{71,-13,68}, -{71,-13,69}, -{71,-13,70}, -{71,-13,71}, -{71,-13,72}, -{71,-13,73}, -{71,-12,-45}, -{71,-12,-44}, -{71,-12,-43}, -{71,-12,-42}, -{71,-12,-41}, -{71,-12,-40}, -{71,-12,-39}, -{71,-12,-38}, -{71,-12,-37}, -{71,-12,-36}, -{71,-12,-35}, -{71,-12,-34}, -{71,-12,-33}, -{71,-12,-32}, -{71,-12,-31}, -{71,-12,-30}, -{71,-12,-29}, -{71,-12,-28}, -{71,-12,-27}, -{71,-12,-26}, -{71,-12,-25}, -{71,-12,-24}, -{71,-12,-23}, -{71,-12,-22}, -{71,-12,-21}, -{71,-12,-20}, -{71,-12,-19}, -{71,-12,-18}, -{71,-12,-17}, -{71,-12,-16}, -{71,-12,-15}, -{71,-12,-14}, -{71,-12,-13}, -{71,-12,-12}, -{71,-12,-11}, -{71,-12,-10}, -{71,-12,-9}, -{71,-12,-8}, -{71,-12,-7}, -{71,-12,-6}, -{71,-12,-5}, -{71,-12,-4}, -{71,-12,-3}, -{71,-12,-2}, -{71,-12,-1}, -{71,-12,0}, -{71,-12,1}, -{71,-12,2}, -{71,-12,3}, -{71,-12,4}, -{71,-12,5}, -{71,-12,6}, -{71,-12,7}, -{71,-12,8}, -{71,-12,9}, -{71,-12,10}, -{71,-12,11}, -{71,-12,12}, -{71,-12,13}, -{71,-12,14}, -{71,-12,15}, -{71,-12,16}, -{71,-12,17}, -{71,-12,18}, -{71,-12,19}, -{71,-12,20}, -{71,-12,21}, -{71,-12,22}, -{71,-12,23}, -{71,-12,24}, -{71,-12,25}, -{71,-12,26}, -{71,-12,27}, -{71,-12,28}, -{71,-12,29}, -{71,-12,30}, -{71,-12,31}, -{71,-12,32}, -{71,-12,33}, -{71,-12,34}, -{71,-12,35}, -{71,-12,36}, -{71,-12,37}, -{71,-12,38}, -{71,-12,39}, -{71,-12,40}, -{71,-12,41}, -{71,-12,42}, -{71,-12,43}, -{71,-12,44}, -{71,-12,45}, -{71,-12,46}, -{71,-12,47}, -{71,-12,48}, -{71,-12,49}, -{71,-12,50}, -{71,-12,51}, -{71,-12,52}, -{71,-12,53}, -{71,-12,54}, -{71,-12,55}, -{71,-12,56}, -{71,-12,57}, -{71,-12,58}, -{71,-12,59}, -{71,-12,60}, -{71,-12,61}, -{71,-12,62}, -{71,-12,63}, -{71,-12,64}, -{71,-12,65}, -{71,-12,66}, -{71,-12,67}, -{71,-12,68}, -{71,-12,69}, -{71,-12,70}, -{71,-12,71}, -{71,-12,72}, -{71,-12,73}, -{71,-11,-45}, -{71,-11,-44}, -{71,-11,-43}, -{71,-11,-42}, -{71,-11,-41}, -{71,-11,-40}, -{71,-11,-39}, -{71,-11,-38}, -{71,-11,-37}, -{71,-11,-36}, -{71,-11,-35}, -{71,-11,-34}, -{71,-11,-33}, -{71,-11,-32}, -{71,-11,-31}, -{71,-11,-30}, -{71,-11,-29}, -{71,-11,-28}, -{71,-11,-27}, -{71,-11,-26}, -{71,-11,-25}, -{71,-11,-24}, -{71,-11,-23}, -{71,-11,-22}, -{71,-11,-21}, -{71,-11,-20}, -{71,-11,-19}, -{71,-11,-18}, -{71,-11,-17}, -{71,-11,-16}, -{71,-11,-15}, -{71,-11,-14}, -{71,-11,-13}, -{71,-11,-12}, -{71,-11,-11}, -{71,-11,-10}, -{71,-11,-9}, -{71,-11,-8}, -{71,-11,-7}, -{71,-11,-6}, -{71,-11,-5}, -{71,-11,-4}, -{71,-11,-3}, -{71,-11,-2}, -{71,-11,-1}, -{71,-11,0}, -{71,-11,1}, -{71,-11,2}, -{71,-11,3}, -{71,-11,4}, -{71,-11,5}, -{71,-11,6}, -{71,-11,7}, -{71,-11,8}, -{71,-11,9}, -{71,-11,10}, -{71,-11,11}, -{71,-11,12}, -{71,-11,13}, -{71,-11,14}, -{71,-11,15}, -{71,-11,16}, -{71,-11,17}, -{71,-11,18}, -{71,-11,19}, -{71,-11,20}, -{71,-11,21}, -{71,-11,22}, -{71,-11,23}, -{71,-11,24}, -{71,-11,25}, -{71,-11,26}, -{71,-11,27}, -{71,-11,28}, -{71,-11,29}, -{71,-11,30}, -{71,-11,31}, -{71,-11,32}, -{71,-11,33}, -{71,-11,34}, -{71,-11,35}, -{71,-11,36}, -{71,-11,37}, -{71,-11,38}, -{71,-11,39}, -{71,-11,40}, -{71,-11,41}, -{71,-11,42}, -{71,-11,43}, -{71,-11,44}, -{71,-11,45}, -{71,-11,46}, -{71,-11,47}, -{71,-11,48}, -{71,-11,49}, -{71,-11,50}, -{71,-11,51}, -{71,-11,52}, -{71,-11,53}, -{71,-11,54}, -{71,-11,55}, -{71,-11,56}, -{71,-11,57}, -{71,-11,58}, -{71,-11,59}, -{71,-11,60}, -{71,-11,61}, -{71,-11,62}, -{71,-11,63}, -{71,-11,64}, -{71,-11,65}, -{71,-11,66}, -{71,-11,67}, -{71,-11,68}, -{71,-11,69}, -{71,-11,70}, -{71,-11,71}, -{71,-11,72}, -{71,-11,73}, -{71,-10,-45}, -{71,-10,-44}, -{71,-10,-43}, -{71,-10,-42}, -{71,-10,-41}, -{71,-10,-40}, -{71,-10,-39}, -{71,-10,-38}, -{71,-10,-37}, -{71,-10,-36}, -{71,-10,-35}, -{71,-10,-34}, -{71,-10,-33}, -{71,-10,-32}, -{71,-10,-31}, -{71,-10,-30}, -{71,-10,-29}, -{71,-10,-28}, -{71,-10,-27}, -{71,-10,-26}, -{71,-10,-25}, -{71,-10,-24}, -{71,-10,-23}, -{71,-10,-22}, -{71,-10,-21}, -{71,-10,-20}, -{71,-10,-19}, -{71,-10,-18}, -{71,-10,-17}, -{71,-10,-16}, -{71,-10,-15}, -{71,-10,-14}, -{71,-10,-13}, -{71,-10,-12}, -{71,-10,-11}, -{71,-10,-10}, -{71,-10,-9}, -{71,-10,-8}, -{71,-10,-7}, -{71,-10,-6}, -{71,-10,-5}, -{71,-10,-4}, -{71,-10,-3}, -{71,-10,-2}, -{71,-10,-1}, -{71,-10,0}, -{71,-10,1}, -{71,-10,2}, -{71,-10,3}, -{71,-10,4}, -{71,-10,5}, -{71,-10,6}, -{71,-10,7}, -{71,-10,8}, -{71,-10,9}, -{71,-10,10}, -{71,-10,11}, -{71,-10,12}, -{71,-10,13}, -{71,-10,14}, -{71,-10,15}, -{71,-10,16}, -{71,-10,17}, -{71,-10,18}, -{71,-10,19}, -{71,-10,20}, -{71,-10,21}, -{71,-10,22}, -{71,-10,23}, -{71,-10,24}, -{71,-10,25}, -{71,-10,26}, -{71,-10,27}, -{71,-10,28}, -{71,-10,29}, -{71,-10,30}, -{71,-10,31}, -{71,-10,32}, -{71,-10,33}, -{71,-10,34}, -{71,-10,35}, -{71,-10,36}, -{71,-10,37}, -{71,-10,38}, -{71,-10,39}, -{71,-10,40}, -{71,-10,41}, -{71,-10,42}, -{71,-10,43}, -{71,-10,44}, -{71,-10,45}, -{71,-10,46}, -{71,-10,47}, -{71,-10,48}, -{71,-10,49}, -{71,-10,50}, -{71,-10,51}, -{71,-10,52}, -{71,-10,53}, -{71,-10,54}, -{71,-10,55}, -{71,-10,56}, -{71,-10,57}, -{71,-10,58}, -{71,-10,59}, -{71,-10,60}, -{71,-10,61}, -{71,-10,62}, -{71,-10,63}, -{71,-10,64}, -{71,-10,65}, -{71,-10,66}, -{71,-10,67}, -{71,-10,68}, -{71,-10,69}, -{71,-10,70}, -{71,-10,71}, -{71,-10,72}, -{71,-10,73}, -{71,-9,-45}, -{71,-9,-44}, -{71,-9,-43}, -{71,-9,-42}, -{71,-9,-41}, -{71,-9,-40}, -{71,-9,-39}, -{71,-9,-38}, -{71,-9,-37}, -{71,-9,-36}, -{71,-9,-35}, -{71,-9,-34}, -{71,-9,-33}, -{71,-9,-32}, -{71,-9,-31}, -{71,-9,-30}, -{71,-9,-29}, -{71,-9,-28}, -{71,-9,-27}, -{71,-9,-26}, -{71,-9,-25}, -{71,-9,-24}, -{71,-9,-23}, -{71,-9,-22}, -{71,-9,-21}, -{71,-9,-20}, -{71,-9,-19}, -{71,-9,-18}, -{71,-9,-17}, -{71,-9,-16}, -{71,-9,-15}, -{71,-9,-14}, -{71,-9,-13}, -{71,-9,-12}, -{71,-9,-11}, -{71,-9,-10}, -{71,-9,-9}, -{71,-9,-8}, -{71,-9,-7}, -{71,-9,-6}, -{71,-9,-5}, -{71,-9,-4}, -{71,-9,-3}, -{71,-9,-2}, -{71,-9,-1}, -{71,-9,0}, -{71,-9,1}, -{71,-9,2}, -{71,-9,3}, -{71,-9,4}, -{71,-9,5}, -{71,-9,6}, -{71,-9,7}, -{71,-9,8}, -{71,-9,9}, -{71,-9,10}, -{71,-9,11}, -{71,-9,12}, -{71,-9,13}, -{71,-9,14}, -{71,-9,15}, -{71,-9,16}, -{71,-9,17}, -{71,-9,18}, -{71,-9,19}, -{71,-9,20}, -{71,-9,21}, -{71,-9,22}, -{71,-9,23}, -{71,-9,24}, -{71,-9,25}, -{71,-9,26}, -{71,-9,27}, -{71,-9,28}, -{71,-9,29}, -{71,-9,30}, -{71,-9,31}, -{71,-9,32}, -{71,-9,33}, -{71,-9,34}, -{71,-9,35}, -{71,-9,36}, -{71,-9,37}, -{71,-9,38}, -{71,-9,39}, -{71,-9,40}, -{71,-9,41}, -{71,-9,42}, -{71,-9,43}, -{71,-9,44}, -{71,-9,45}, -{71,-9,46}, -{71,-9,47}, -{71,-9,48}, -{71,-9,49}, -{71,-9,50}, -{71,-9,51}, -{71,-9,52}, -{71,-9,53}, -{71,-9,54}, -{71,-9,55}, -{71,-9,56}, -{71,-9,57}, -{71,-9,58}, -{71,-9,59}, -{71,-9,60}, -{71,-9,61}, -{71,-9,62}, -{71,-9,63}, -{71,-9,64}, -{71,-9,65}, -{71,-9,66}, -{71,-9,67}, -{71,-9,68}, -{71,-9,69}, -{71,-9,70}, -{71,-9,71}, -{71,-9,72}, -{71,-9,73}, -{71,-8,-45}, -{71,-8,-44}, -{71,-8,-43}, -{71,-8,-42}, -{71,-8,-41}, -{71,-8,-40}, -{71,-8,-39}, -{71,-8,-38}, -{71,-8,-37}, -{71,-8,-36}, -{71,-8,-35}, -{71,-8,-34}, -{71,-8,-33}, -{71,-8,-32}, -{71,-8,-31}, -{71,-8,-30}, -{71,-8,-29}, -{71,-8,-28}, -{71,-8,-27}, -{71,-8,-26}, -{71,-8,-25}, -{71,-8,-24}, -{71,-8,-23}, -{71,-8,-22}, -{71,-8,-21}, -{71,-8,-20}, -{71,-8,-19}, -{71,-8,-18}, -{71,-8,-17}, -{71,-8,-16}, -{71,-8,-15}, -{71,-8,-14}, -{71,-8,-13}, -{71,-8,-12}, -{71,-8,-11}, -{71,-8,-10}, -{71,-8,-9}, -{71,-8,-8}, -{71,-8,-7}, -{71,-8,-6}, -{71,-8,-5}, -{71,-8,-4}, -{71,-8,-3}, -{71,-8,-2}, -{71,-8,-1}, -{71,-8,0}, -{71,-8,1}, -{71,-8,2}, -{71,-8,3}, -{71,-8,4}, -{71,-8,5}, -{71,-8,6}, -{71,-8,7}, -{71,-8,8}, -{71,-8,9}, -{71,-8,10}, -{71,-8,11}, -{71,-8,12}, -{71,-8,13}, -{71,-8,14}, -{71,-8,15}, -{71,-8,16}, -{71,-8,17}, -{71,-8,18}, -{71,-8,19}, -{71,-8,20}, -{71,-8,21}, -{71,-8,22}, -{71,-8,23}, -{71,-8,24}, -{71,-8,25}, -{71,-8,26}, -{71,-8,27}, -{71,-8,28}, -{71,-8,29}, -{71,-8,30}, -{71,-8,31}, -{71,-8,32}, -{71,-8,33}, -{71,-8,34}, -{71,-8,35}, -{71,-8,36}, -{71,-8,37}, -{71,-8,38}, -{71,-8,39}, -{71,-8,40}, -{71,-8,41}, -{71,-8,42}, -{71,-8,43}, -{71,-8,44}, -{71,-8,45}, -{71,-8,46}, -{71,-8,47}, -{71,-8,48}, -{71,-8,49}, -{71,-8,50}, -{71,-8,51}, -{71,-8,52}, -{71,-8,53}, -{71,-8,54}, -{71,-8,55}, -{71,-8,56}, -{71,-8,57}, -{71,-8,58}, -{71,-8,59}, -{71,-8,60}, -{71,-8,61}, -{71,-8,62}, -{71,-8,63}, -{71,-8,64}, -{71,-8,65}, -{71,-8,66}, -{71,-8,67}, -{71,-8,68}, -{71,-8,69}, -{71,-8,70}, -{71,-8,71}, -{71,-8,72}, -{71,-8,73}, -{71,-7,-45}, -{71,-7,-44}, -{71,-7,-43}, -{71,-7,-42}, -{71,-7,-41}, -{71,-7,-40}, -{71,-7,-39}, -{71,-7,-38}, -{71,-7,-37}, -{71,-7,-36}, -{71,-7,-35}, -{71,-7,-34}, -{71,-7,-33}, -{71,-7,-32}, -{71,-7,-31}, -{71,-7,-30}, -{71,-7,-29}, -{71,-7,-28}, -{71,-7,-27}, -{71,-7,-26}, -{71,-7,-25}, -{71,-7,-24}, -{71,-7,-23}, -{71,-7,-22}, -{71,-7,-21}, -{71,-7,-20}, -{71,-7,-19}, -{71,-7,-18}, -{71,-7,-17}, -{71,-7,-16}, -{71,-7,-15}, -{71,-7,-14}, -{71,-7,-13}, -{71,-7,-12}, -{71,-7,-11}, -{71,-7,-10}, -{71,-7,-9}, -{71,-7,-8}, -{71,-7,-7}, -{71,-7,-6}, -{71,-7,-5}, -{71,-7,-4}, -{71,-7,-3}, -{71,-7,-2}, -{71,-7,-1}, -{71,-7,0}, -{71,-7,1}, -{71,-7,2}, -{71,-7,3}, -{71,-7,4}, -{71,-7,5}, -{71,-7,6}, -{71,-7,7}, -{71,-7,8}, -{71,-7,9}, -{71,-7,10}, -{71,-7,11}, -{71,-7,12}, -{71,-7,13}, -{71,-7,14}, -{71,-7,15}, -{71,-7,16}, -{71,-7,17}, -{71,-7,18}, -{71,-7,19}, -{71,-7,20}, -{71,-7,21}, -{71,-7,22}, -{71,-7,23}, -{71,-7,24}, -{71,-7,25}, -{71,-7,26}, -{71,-7,27}, -{71,-7,28}, -{71,-7,29}, -{71,-7,30}, -{71,-7,31}, -{71,-7,32}, -{71,-7,33}, -{71,-7,34}, -{71,-7,35}, -{71,-7,36}, -{71,-7,37}, -{71,-7,38}, -{71,-7,39}, -{71,-7,40}, -{71,-7,41}, -{71,-7,42}, -{71,-7,43}, -{71,-7,44}, -{71,-7,45}, -{71,-7,46}, -{71,-7,47}, -{71,-7,48}, -{71,-7,49}, -{71,-7,50}, -{71,-7,51}, -{71,-7,52}, -{71,-7,53}, -{71,-7,54}, -{71,-7,55}, -{71,-7,56}, -{71,-7,57}, -{71,-7,58}, -{71,-7,59}, -{71,-7,60}, -{71,-7,61}, -{71,-7,62}, -{71,-7,63}, -{71,-7,64}, -{71,-7,65}, -{71,-7,66}, -{71,-7,67}, -{71,-7,68}, -{71,-7,69}, -{71,-7,70}, -{71,-7,71}, -{71,-7,72}, -{71,-7,73}, -{71,-6,-45}, -{71,-6,-44}, -{71,-6,-43}, -{71,-6,-42}, -{71,-6,-41}, -{71,-6,-40}, -{71,-6,-39}, -{71,-6,-38}, -{71,-6,-37}, -{71,-6,-36}, -{71,-6,-35}, -{71,-6,-34}, -{71,-6,-33}, -{71,-6,-32}, -{71,-6,-31}, -{71,-6,-30}, -{71,-6,-29}, -{71,-6,-28}, -{71,-6,-27}, -{71,-6,-26}, -{71,-6,-25}, -{71,-6,-24}, -{71,-6,-23}, -{71,-6,-22}, -{71,-6,-21}, -{71,-6,-20}, -{71,-6,-19}, -{71,-6,-18}, -{71,-6,-17}, -{71,-6,-16}, -{71,-6,-15}, -{71,-6,-14}, -{71,-6,-13}, -{71,-6,-12}, -{71,-6,-11}, -{71,-6,-10}, -{71,-6,-9}, -{71,-6,-8}, -{71,-6,-7}, -{71,-6,-6}, -{71,-6,-5}, -{71,-6,-4}, -{71,-6,-3}, -{71,-6,-2}, -{71,-6,-1}, -{71,-6,0}, -{71,-6,1}, -{71,-6,2}, -{71,-6,3}, -{71,-6,4}, -{71,-6,5}, -{71,-6,6}, -{71,-6,7}, -{71,-6,8}, -{71,-6,9}, -{71,-6,10}, -{71,-6,11}, -{71,-6,12}, -{71,-6,13}, -{71,-6,14}, -{71,-6,15}, -{71,-6,16}, -{71,-6,17}, -{71,-6,18}, -{71,-6,19}, -{71,-6,20}, -{71,-6,21}, -{71,-6,22}, -{71,-6,23}, -{71,-6,24}, -{71,-6,25}, -{71,-6,26}, -{71,-6,27}, -{71,-6,28}, -{71,-6,29}, -{71,-6,30}, -{71,-6,31}, -{71,-6,32}, -{71,-6,33}, -{71,-6,34}, -{71,-6,35}, -{71,-6,36}, -{71,-6,37}, -{71,-6,38}, -{71,-6,39}, -{71,-6,40}, -{71,-6,41}, -{71,-6,42}, -{71,-6,43}, -{71,-6,44}, -{71,-6,45}, -{71,-6,46}, -{71,-6,47}, -{71,-6,48}, -{71,-6,49}, -{71,-6,50}, -{71,-6,51}, -{71,-6,52}, -{71,-6,53}, -{71,-6,54}, -{71,-6,55}, -{71,-6,56}, -{71,-6,57}, -{71,-6,58}, -{71,-6,59}, -{71,-6,60}, -{71,-6,61}, -{71,-6,62}, -{71,-6,63}, -{71,-6,64}, -{71,-6,65}, -{71,-6,66}, -{71,-6,67}, -{71,-6,68}, -{71,-6,69}, -{71,-6,70}, -{71,-6,71}, -{71,-6,72}, -{71,-6,73}, -{71,-5,-45}, -{71,-5,-44}, -{71,-5,-43}, -{71,-5,-42}, -{71,-5,-41}, -{71,-5,-40}, -{71,-5,-39}, -{71,-5,-38}, -{71,-5,-37}, -{71,-5,-36}, -{71,-5,-35}, -{71,-5,-34}, -{71,-5,-33}, -{71,-5,-32}, -{71,-5,-31}, -{71,-5,-30}, -{71,-5,-29}, -{71,-5,-28}, -{71,-5,-27}, -{71,-5,-26}, -{71,-5,-25}, -{71,-5,-24}, -{71,-5,-23}, -{71,-5,-22}, -{71,-5,-21}, -{71,-5,-20}, -{71,-5,-19}, -{71,-5,-18}, -{71,-5,-17}, -{71,-5,-16}, -{71,-5,-15}, -{71,-5,-14}, -{71,-5,-13}, -{71,-5,-12}, -{71,-5,-11}, -{71,-5,-10}, -{71,-5,-9}, -{71,-5,-8}, -{71,-5,-7}, -{71,-5,-6}, -{71,-5,-5}, -{71,-5,-4}, -{71,-5,-3}, -{71,-5,-2}, -{71,-5,-1}, -{71,-5,0}, -{71,-5,1}, -{71,-5,2}, -{71,-5,3}, -{71,-5,4}, -{71,-5,5}, -{71,-5,6}, -{71,-5,7}, -{71,-5,8}, -{71,-5,9}, -{71,-5,10}, -{71,-5,11}, -{71,-5,12}, -{71,-5,13}, -{71,-5,14}, -{71,-5,15}, -{71,-5,16}, -{71,-5,17}, -{71,-5,18}, -{71,-5,19}, -{71,-5,20}, -{71,-5,21}, -{71,-5,22}, -{71,-5,23}, -{71,-5,24}, -{71,-5,25}, -{71,-5,26}, -{71,-5,27}, -{71,-5,28}, -{71,-5,29}, -{71,-5,30}, -{71,-5,31}, -{71,-5,32}, -{71,-5,33}, -{71,-5,34}, -{71,-5,35}, -{71,-5,36}, -{71,-5,37}, -{71,-5,38}, -{71,-5,39}, -{71,-5,40}, -{71,-5,41}, -{71,-5,42}, -{71,-5,43}, -{71,-5,44}, -{71,-5,45}, -{71,-5,46}, -{71,-5,47}, -{71,-5,48}, -{71,-5,49}, -{71,-5,50}, -{71,-5,51}, -{71,-5,52}, -{71,-5,53}, -{71,-5,54}, -{71,-5,55}, -{71,-5,56}, -{71,-5,57}, -{71,-5,58}, -{71,-5,59}, -{71,-5,60}, -{71,-5,61}, -{71,-5,62}, -{71,-5,63}, -{71,-5,64}, -{71,-5,65}, -{71,-5,66}, -{71,-5,67}, -{71,-5,68}, -{71,-5,69}, -{71,-5,70}, -{71,-5,71}, -{71,-5,72}, -{71,-5,73}, -{71,-4,-44}, -{71,-4,-43}, -{71,-4,-42}, -{71,-4,-41}, -{71,-4,-40}, -{71,-4,-39}, -{71,-4,-38}, -{71,-4,-37}, -{71,-4,-36}, -{71,-4,-35}, -{71,-4,-34}, -{71,-4,-33}, -{71,-4,-32}, -{71,-4,-31}, -{71,-4,-30}, -{71,-4,-29}, -{71,-4,-28}, -{71,-4,-27}, -{71,-4,-26}, -{71,-4,-25}, -{71,-4,-24}, -{71,-4,-23}, -{71,-4,-22}, -{71,-4,-21}, -{71,-4,-20}, -{71,-4,-19}, -{71,-4,-18}, -{71,-4,-17}, -{71,-4,-16}, -{71,-4,-15}, -{71,-4,-14}, -{71,-4,-13}, -{71,-4,-12}, -{71,-4,-11}, -{71,-4,-10}, -{71,-4,-9}, -{71,-4,-8}, -{71,-4,-7}, -{71,-4,-6}, -{71,-4,-5}, -{71,-4,-4}, -{71,-4,-3}, -{71,-4,-2}, -{71,-4,-1}, -{71,-4,0}, -{71,-4,1}, -{71,-4,2}, -{71,-4,3}, -{71,-4,4}, -{71,-4,5}, -{71,-4,6}, -{71,-4,7}, -{71,-4,8}, -{71,-4,9}, -{71,-4,10}, -{71,-4,11}, -{71,-4,12}, -{71,-4,13}, -{71,-4,14}, -{71,-4,15}, -{71,-4,16}, -{71,-4,17}, -{71,-4,18}, -{71,-4,19}, -{71,-4,20}, -{71,-4,21}, -{71,-4,22}, -{71,-4,23}, -{71,-4,24}, -{71,-4,25}, -{71,-4,26}, -{71,-4,27}, -{71,-4,28}, -{71,-4,29}, -{71,-4,30}, -{71,-4,31}, -{71,-4,32}, -{71,-4,33}, -{71,-4,34}, -{71,-4,35}, -{71,-4,36}, -{71,-4,37}, -{71,-4,38}, -{71,-4,39}, -{71,-4,40}, -{71,-4,41}, -{71,-4,42}, -{71,-4,43}, -{71,-4,44}, -{71,-4,45}, -{71,-4,46}, -{71,-4,47}, -{71,-4,48}, -{71,-4,49}, -{71,-4,50}, -{71,-4,51}, -{71,-4,52}, -{71,-4,53}, -{71,-4,54}, -{71,-4,55}, -{71,-4,56}, -{71,-4,57}, -{71,-4,58}, -{71,-4,59}, -{71,-4,60}, -{71,-4,61}, -{71,-4,62}, -{71,-4,63}, -{71,-4,64}, -{71,-4,65}, -{71,-4,66}, -{71,-4,67}, -{71,-4,68}, -{71,-4,69}, -{71,-4,70}, -{71,-4,71}, -{71,-4,72}, -{71,-4,73}, -{71,-3,-44}, -{71,-3,-43}, -{71,-3,-42}, -{71,-3,-41}, -{71,-3,-40}, -{71,-3,-39}, -{71,-3,-38}, -{71,-3,-37}, -{71,-3,-36}, -{71,-3,-35}, -{71,-3,-34}, -{71,-3,-33}, -{71,-3,-32}, -{71,-3,-31}, -{71,-3,-30}, -{71,-3,-29}, -{71,-3,-28}, -{71,-3,-27}, -{71,-3,-26}, -{71,-3,-25}, -{71,-3,-24}, -{71,-3,-23}, -{71,-3,-22}, -{71,-3,-21}, -{71,-3,-20}, -{71,-3,-19}, -{71,-3,-18}, -{71,-3,-17}, -{71,-3,-16}, -{71,-3,-15}, -{71,-3,-14}, -{71,-3,-13}, -{71,-3,-12}, -{71,-3,-11}, -{71,-3,-10}, -{71,-3,-9}, -{71,-3,-8}, -{71,-3,-7}, -{71,-3,-6}, -{71,-3,-5}, -{71,-3,-4}, -{71,-3,-3}, -{71,-3,-2}, -{71,-3,-1}, -{71,-3,0}, -{71,-3,1}, -{71,-3,2}, -{71,-3,3}, -{71,-3,4}, -{71,-3,5}, -{71,-3,6}, -{71,-3,7}, -{71,-3,8}, -{71,-3,9}, -{71,-3,10}, -{71,-3,11}, -{71,-3,12}, -{71,-3,13}, -{71,-3,14}, -{71,-3,15}, -{71,-3,16}, -{71,-3,17}, -{71,-3,18}, -{71,-3,19}, -{71,-3,20}, -{71,-3,21}, -{71,-3,22}, -{71,-3,23}, -{71,-3,24}, -{71,-3,25}, -{71,-3,26}, -{71,-3,27}, -{71,-3,28}, -{71,-3,29}, -{71,-3,30}, -{71,-3,31}, -{71,-3,32}, -{71,-3,33}, -{71,-3,34}, -{71,-3,35}, -{71,-3,36}, -{71,-3,37}, -{71,-3,38}, -{71,-3,39}, -{71,-3,40}, -{71,-3,41}, -{71,-3,42}, -{71,-3,43}, -{71,-3,44}, -{71,-3,45}, -{71,-3,46}, -{71,-3,47}, -{71,-3,48}, -{71,-3,49}, -{71,-3,50}, -{71,-3,51}, -{71,-3,52}, -{71,-3,53}, -{71,-3,54}, -{71,-3,55}, -{71,-3,56}, -{71,-3,57}, -{71,-3,58}, -{71,-3,59}, -{71,-3,60}, -{71,-3,61}, -{71,-3,62}, -{71,-3,63}, -{71,-3,64}, -{71,-3,65}, -{71,-3,66}, -{71,-3,67}, -{71,-3,68}, -{71,-3,69}, -{71,-3,70}, -{71,-3,71}, -{71,-3,72}, -{71,-3,73}, -{71,-2,-44}, -{71,-2,-43}, -{71,-2,-42}, -{71,-2,-41}, -{71,-2,-40}, -{71,-2,-39}, -{71,-2,-38}, -{71,-2,-37}, -{71,-2,-36}, -{71,-2,-35}, -{71,-2,-34}, -{71,-2,-33}, -{71,-2,-32}, -{71,-2,-31}, -{71,-2,-30}, -{71,-2,-29}, -{71,-2,-28}, -{71,-2,-27}, -{71,-2,-26}, -{71,-2,-25}, -{71,-2,-24}, -{71,-2,-23}, -{71,-2,-22}, -{71,-2,-21}, -{71,-2,-20}, -{71,-2,-19}, -{71,-2,-18}, -{71,-2,-17}, -{71,-2,-16}, -{71,-2,-15}, -{71,-2,-14}, -{71,-2,-13}, -{71,-2,-12}, -{71,-2,-11}, -{71,-2,-10}, -{71,-2,-9}, -{71,-2,-8}, -{71,-2,-7}, -{71,-2,-6}, -{71,-2,-5}, -{71,-2,-4}, -{71,-2,-3}, -{71,-2,-2}, -{71,-2,-1}, -{71,-2,0}, -{71,-2,1}, -{71,-2,2}, -{71,-2,3}, -{71,-2,4}, -{71,-2,5}, -{71,-2,6}, -{71,-2,7}, -{71,-2,8}, -{71,-2,9}, -{71,-2,10}, -{71,-2,11}, -{71,-2,12}, -{71,-2,13}, -{71,-2,14}, -{71,-2,15}, -{71,-2,16}, -{71,-2,17}, -{71,-2,18}, -{71,-2,19}, -{71,-2,20}, -{71,-2,21}, -{71,-2,22}, -{71,-2,23}, -{71,-2,24}, -{71,-2,25}, -{71,-2,26}, -{71,-2,27}, -{71,-2,28}, -{71,-2,29}, -{71,-2,30}, -{71,-2,31}, -{71,-2,32}, -{71,-2,33}, -{71,-2,34}, -{71,-2,35}, -{71,-2,36}, -{71,-2,37}, -{71,-2,38}, -{71,-2,39}, -{71,-2,40}, -{71,-2,41}, -{71,-2,42}, -{71,-2,43}, -{71,-2,44}, -{71,-2,45}, -{71,-2,46}, -{71,-2,47}, -{71,-2,48}, -{71,-2,49}, -{71,-2,50}, -{71,-2,51}, -{71,-2,52}, -{71,-2,53}, -{71,-2,54}, -{71,-2,55}, -{71,-2,56}, -{71,-2,57}, -{71,-2,58}, -{71,-2,59}, -{71,-2,60}, -{71,-2,61}, -{71,-2,62}, -{71,-2,63}, -{71,-2,64}, -{71,-2,65}, -{71,-2,66}, -{71,-2,67}, -{71,-2,68}, -{71,-2,69}, -{71,-2,70}, -{71,-2,71}, -{71,-2,72}, -{71,-2,73}, -{71,-1,-44}, -{71,-1,-43}, -{71,-1,-42}, -{71,-1,-41}, -{71,-1,-40}, -{71,-1,-39}, -{71,-1,-38}, -{71,-1,-37}, -{71,-1,-36}, -{71,-1,-35}, -{71,-1,-34}, -{71,-1,-33}, -{71,-1,-32}, -{71,-1,-31}, -{71,-1,-30}, -{71,-1,-29}, -{71,-1,-28}, -{71,-1,-27}, -{71,-1,-26}, -{71,-1,-25}, -{71,-1,-24}, -{71,-1,-23}, -{71,-1,-22}, -{71,-1,-21}, -{71,-1,-20}, -{71,-1,-19}, -{71,-1,-18}, -{71,-1,-17}, -{71,-1,-16}, -{71,-1,-15}, -{71,-1,-14}, -{71,-1,-13}, -{71,-1,-12}, -{71,-1,-11}, -{71,-1,-10}, -{71,-1,-9}, -{71,-1,-8}, -{71,-1,-7}, -{71,-1,-6}, -{71,-1,-5}, -{71,-1,-4}, -{71,-1,-3}, -{71,-1,-2}, -{71,-1,-1}, -{71,-1,0}, -{71,-1,1}, -{71,-1,2}, -{71,-1,3}, -{71,-1,4}, -{71,-1,5}, -{71,-1,6}, -{71,-1,7}, -{71,-1,8}, -{71,-1,9}, -{71,-1,10}, -{71,-1,11}, -{71,-1,12}, -{71,-1,13}, -{71,-1,14}, -{71,-1,15}, -{71,-1,16}, -{71,-1,17}, -{71,-1,18}, -{71,-1,19}, -{71,-1,20}, -{71,-1,21}, -{71,-1,22}, -{71,-1,23}, -{71,-1,24}, -{71,-1,25}, -{71,-1,26}, -{71,-1,27}, -{71,-1,28}, -{71,-1,29}, -{71,-1,30}, -{71,-1,31}, -{71,-1,32}, -{71,-1,33}, -{71,-1,34}, -{71,-1,35}, -{71,-1,36}, -{71,-1,37}, -{71,-1,38}, -{71,-1,39}, -{71,-1,40}, -{71,-1,41}, -{71,-1,42}, -{71,-1,43}, -{71,-1,44}, -{71,-1,45}, -{71,-1,46}, -{71,-1,47}, -{71,-1,48}, -{71,-1,49}, -{71,-1,50}, -{71,-1,51}, -{71,-1,52}, -{71,-1,53}, -{71,-1,54}, -{71,-1,55}, -{71,-1,56}, -{71,-1,57}, -{71,-1,58}, -{71,-1,59}, -{71,-1,60}, -{71,-1,61}, -{71,-1,62}, -{71,-1,63}, -{71,-1,64}, -{71,-1,65}, -{71,-1,66}, -{71,-1,67}, -{71,-1,68}, -{71,-1,69}, -{71,-1,70}, -{71,-1,71}, -{71,-1,72}, -{71,-1,73}, -{71,0,-44}, -{71,0,-43}, -{71,0,-42}, -{71,0,-41}, -{71,0,-40}, -{71,0,-39}, -{71,0,-38}, -{71,0,-37}, -{71,0,-36}, -{71,0,-35}, -{71,0,-34}, -{71,0,-33}, -{71,0,-32}, -{71,0,-31}, -{71,0,-30}, -{71,0,-29}, -{71,0,-28}, -{71,0,-27}, -{71,0,-26}, -{71,0,-25}, -{71,0,-24}, -{71,0,-23}, -{71,0,-22}, -{71,0,-21}, -{71,0,-20}, -{71,0,-19}, -{71,0,-18}, -{71,0,-17}, -{71,0,-16}, -{71,0,-15}, -{71,0,-14}, -{71,0,-13}, -{71,0,-12}, -{71,0,-11}, -{71,0,-10}, -{71,0,-9}, -{71,0,-8}, -{71,0,-7}, -{71,0,-6}, -{71,0,-5}, -{71,0,-4}, -{71,0,-3}, -{71,0,-2}, -{71,0,-1}, -{71,0,0}, -{71,0,1}, -{71,0,2}, -{71,0,3}, -{71,0,4}, -{71,0,5}, -{71,0,6}, -{71,0,7}, -{71,0,8}, -{71,0,9}, -{71,0,10}, -{71,0,11}, -{71,0,12}, -{71,0,13}, -{71,0,14}, -{71,0,15}, -{71,0,16}, -{71,0,17}, -{71,0,18}, -{71,0,19}, -{71,0,20}, -{71,0,21}, -{71,0,22}, -{71,0,23}, -{71,0,24}, -{71,0,25}, -{71,0,26}, -{71,0,27}, -{71,0,28}, -{71,0,29}, -{71,0,30}, -{71,0,31}, -{71,0,32}, -{71,0,33}, -{71,0,34}, -{71,0,35}, -{71,0,36}, -{71,0,37}, -{71,0,38}, -{71,0,39}, -{71,0,40}, -{71,0,41}, -{71,0,42}, -{71,0,43}, -{71,0,44}, -{71,0,45}, -{71,0,46}, -{71,0,47}, -{71,0,48}, -{71,0,49}, -{71,0,50}, -{71,0,51}, -{71,0,52}, -{71,0,53}, -{71,0,54}, -{71,0,55}, -{71,0,56}, -{71,0,57}, -{71,0,58}, -{71,0,59}, -{71,0,60}, -{71,0,61}, -{71,0,62}, -{71,0,63}, -{71,0,64}, -{71,0,65}, -{71,0,66}, -{71,0,67}, -{71,0,68}, -{71,0,69}, -{71,0,70}, -{71,0,71}, -{71,0,72}, -{71,0,73}, -{71,1,-44}, -{71,1,-43}, -{71,1,-42}, -{71,1,-41}, -{71,1,-40}, -{71,1,-39}, -{71,1,-38}, -{71,1,-37}, -{71,1,-36}, -{71,1,-35}, -{71,1,-34}, -{71,1,-33}, -{71,1,-32}, -{71,1,-31}, -{71,1,-30}, -{71,1,-29}, -{71,1,-28}, -{71,1,-27}, -{71,1,-26}, -{71,1,-25}, -{71,1,-24}, -{71,1,-23}, -{71,1,-22}, -{71,1,-21}, -{71,1,-20}, -{71,1,-19}, -{71,1,-18}, -{71,1,-17}, -{71,1,-16}, -{71,1,-15}, -{71,1,-14}, -{71,1,-13}, -{71,1,-12}, -{71,1,-11}, -{71,1,-10}, -{71,1,-9}, -{71,1,-8}, -{71,1,-7}, -{71,1,-6}, -{71,1,-5}, -{71,1,-4}, -{71,1,-3}, -{71,1,-2}, -{71,1,-1}, -{71,1,0}, -{71,1,1}, -{71,1,2}, -{71,1,3}, -{71,1,4}, -{71,1,5}, -{71,1,6}, -{71,1,7}, -{71,1,8}, -{71,1,9}, -{71,1,10}, -{71,1,11}, -{71,1,12}, -{71,1,13}, -{71,1,14}, -{71,1,15}, -{71,1,16}, -{71,1,17}, -{71,1,18}, -{71,1,19}, -{71,1,20}, -{71,1,21}, -{71,1,22}, -{71,1,23}, -{71,1,24}, -{71,1,25}, -{71,1,26}, -{71,1,27}, -{71,1,28}, -{71,1,29}, -{71,1,30}, -{71,1,31}, -{71,1,32}, -{71,1,33}, -{71,1,34}, -{71,1,35}, -{71,1,36}, -{71,1,37}, -{71,1,38}, -{71,1,39}, -{71,1,40}, -{71,1,41}, -{71,1,42}, -{71,1,43}, -{71,1,44}, -{71,1,45}, -{71,1,46}, -{71,1,47}, -{71,1,48}, -{71,1,49}, -{71,1,50}, -{71,1,51}, -{71,1,52}, -{71,1,53}, -{71,1,54}, -{71,1,55}, -{71,1,56}, -{71,1,57}, -{71,1,58}, -{71,1,59}, -{71,1,60}, -{71,1,61}, -{71,1,62}, -{71,1,63}, -{71,1,64}, -{71,1,65}, -{71,1,66}, -{71,1,67}, -{71,1,68}, -{71,1,69}, -{71,1,70}, -{71,1,71}, -{71,1,72}, -{71,1,73}, -{71,1,74}, -{71,2,-44}, -{71,2,-43}, -{71,2,-42}, -{71,2,-41}, -{71,2,-40}, -{71,2,-39}, -{71,2,-38}, -{71,2,-37}, -{71,2,-36}, -{71,2,-35}, -{71,2,-34}, -{71,2,-33}, -{71,2,-32}, -{71,2,-31}, -{71,2,-30}, -{71,2,-29}, -{71,2,-28}, -{71,2,-27}, -{71,2,-26}, -{71,2,-25}, -{71,2,-24}, -{71,2,-23}, -{71,2,-22}, -{71,2,-21}, -{71,2,-20}, -{71,2,-19}, -{71,2,-18}, -{71,2,-17}, -{71,2,-16}, -{71,2,-15}, -{71,2,-14}, -{71,2,-13}, -{71,2,-12}, -{71,2,-11}, -{71,2,-10}, -{71,2,-9}, -{71,2,-8}, -{71,2,-7}, -{71,2,-6}, -{71,2,-5}, -{71,2,-4}, -{71,2,-3}, -{71,2,-2}, -{71,2,-1}, -{71,2,0}, -{71,2,1}, -{71,2,2}, -{71,2,3}, -{71,2,4}, -{71,2,5}, -{71,2,6}, -{71,2,7}, -{71,2,8}, -{71,2,9}, -{71,2,10}, -{71,2,11}, -{71,2,12}, -{71,2,13}, -{71,2,14}, -{71,2,15}, -{71,2,16}, -{71,2,17}, -{71,2,18}, -{71,2,19}, -{71,2,20}, -{71,2,21}, -{71,2,22}, -{71,2,23}, -{71,2,24}, -{71,2,25}, -{71,2,26}, -{71,2,27}, -{71,2,28}, -{71,2,29}, -{71,2,30}, -{71,2,31}, -{71,2,32}, -{71,2,33}, -{71,2,34}, -{71,2,35}, -{71,2,36}, -{71,2,37}, -{71,2,38}, -{71,2,39}, -{71,2,40}, -{71,2,41}, -{71,2,42}, -{71,2,43}, -{71,2,44}, -{71,2,45}, -{71,2,46}, -{71,2,47}, -{71,2,48}, -{71,2,49}, -{71,2,50}, -{71,2,51}, -{71,2,52}, -{71,2,53}, -{71,2,54}, -{71,2,55}, -{71,2,56}, -{71,2,57}, -{71,2,58}, -{71,2,59}, -{71,2,60}, -{71,2,61}, -{71,2,62}, -{71,2,63}, -{71,2,64}, -{71,2,65}, -{71,2,66}, -{71,2,67}, -{71,2,68}, -{71,2,69}, -{71,2,70}, -{71,2,71}, -{71,2,72}, -{71,2,73}, -{71,2,74}, -{71,3,-44}, -{71,3,-43}, -{71,3,-42}, -{71,3,-41}, -{71,3,-40}, -{71,3,-39}, -{71,3,-38}, -{71,3,-37}, -{71,3,-36}, -{71,3,-35}, -{71,3,-34}, -{71,3,-33}, -{71,3,-32}, -{71,3,-31}, -{71,3,-30}, -{71,3,-29}, -{71,3,-28}, -{71,3,-27}, -{71,3,-26}, -{71,3,-25}, -{71,3,-24}, -{71,3,-23}, -{71,3,-22}, -{71,3,-21}, -{71,3,-20}, -{71,3,-19}, -{71,3,-18}, -{71,3,-17}, -{71,3,-16}, -{71,3,-15}, -{71,3,-14}, -{71,3,-13}, -{71,3,-12}, -{71,3,-11}, -{71,3,-10}, -{71,3,-9}, -{71,3,-8}, -{71,3,-7}, -{71,3,-6}, -{71,3,-5}, -{71,3,-4}, -{71,3,-3}, -{71,3,-2}, -{71,3,-1}, -{71,3,0}, -{71,3,1}, -{71,3,2}, -{71,3,3}, -{71,3,4}, -{71,3,5}, -{71,3,6}, -{71,3,7}, -{71,3,8}, -{71,3,9}, -{71,3,10}, -{71,3,11}, -{71,3,12}, -{71,3,13}, -{71,3,14}, -{71,3,15}, -{71,3,16}, -{71,3,17}, -{71,3,18}, -{71,3,19}, -{71,3,20}, -{71,3,21}, -{71,3,22}, -{71,3,23}, -{71,3,24}, -{71,3,25}, -{71,3,26}, -{71,3,27}, -{71,3,28}, -{71,3,29}, -{71,3,30}, -{71,3,31}, -{71,3,32}, -{71,3,33}, -{71,3,34}, -{71,3,35}, -{71,3,36}, -{71,3,37}, -{71,3,38}, -{71,3,39}, -{71,3,40}, -{71,3,41}, -{71,3,42}, -{71,3,43}, -{71,3,44}, -{71,3,45}, -{71,3,46}, -{71,3,47}, -{71,3,48}, -{71,3,49}, -{71,3,50}, -{71,3,51}, -{71,3,52}, -{71,3,53}, -{71,3,54}, -{71,3,55}, -{71,3,56}, -{71,3,57}, -{71,3,58}, -{71,3,59}, -{71,3,60}, -{71,3,61}, -{71,3,62}, -{71,3,63}, -{71,3,64}, -{71,3,65}, -{71,3,66}, -{71,3,67}, -{71,3,68}, -{71,3,69}, -{71,3,70}, -{71,3,71}, -{71,3,72}, -{71,3,73}, -{71,3,74}, -{71,4,-44}, -{71,4,-43}, -{71,4,-42}, -{71,4,-41}, -{71,4,-40}, -{71,4,-39}, -{71,4,-38}, -{71,4,-37}, -{71,4,-36}, -{71,4,-35}, -{71,4,-34}, -{71,4,-33}, -{71,4,-32}, -{71,4,-31}, -{71,4,-30}, -{71,4,-29}, -{71,4,-28}, -{71,4,-27}, -{71,4,-26}, -{71,4,-25}, -{71,4,-24}, -{71,4,-23}, -{71,4,-22}, -{71,4,-21}, -{71,4,-20}, -{71,4,-19}, -{71,4,-18}, -{71,4,-17}, -{71,4,-16}, -{71,4,-15}, -{71,4,-14}, -{71,4,-13}, -{71,4,-12}, -{71,4,-11}, -{71,4,-10}, -{71,4,-9}, -{71,4,-8}, -{71,4,-7}, -{71,4,-6}, -{71,4,-5}, -{71,4,-4}, -{71,4,-3}, -{71,4,-2}, -{71,4,-1}, -{71,4,0}, -{71,4,1}, -{71,4,2}, -{71,4,3}, -{71,4,4}, -{71,4,5}, -{71,4,6}, -{71,4,7}, -{71,4,8}, -{71,4,9}, -{71,4,10}, -{71,4,11}, -{71,4,12}, -{71,4,13}, -{71,4,14}, -{71,4,15}, -{71,4,16}, -{71,4,17}, -{71,4,18}, -{71,4,19}, -{71,4,20}, -{71,4,21}, -{71,4,22}, -{71,4,23}, -{71,4,24}, -{71,4,25}, -{71,4,26}, -{71,4,27}, -{71,4,28}, -{71,4,29}, -{71,4,30}, -{71,4,31}, -{71,4,32}, -{71,4,33}, -{71,4,34}, -{71,4,35}, -{71,4,36}, -{71,4,37}, -{71,4,38}, -{71,4,39}, -{71,4,40}, -{71,4,41}, -{71,4,42}, -{71,4,43}, -{71,4,44}, -{71,4,45}, -{71,4,46}, -{71,4,47}, -{71,4,48}, -{71,4,49}, -{71,4,50}, -{71,4,51}, -{71,4,52}, -{71,4,53}, -{71,4,54}, -{71,4,55}, -{71,4,56}, -{71,4,57}, -{71,4,58}, -{71,4,59}, -{71,4,60}, -{71,4,61}, -{71,4,62}, -{71,4,63}, -{71,4,64}, -{71,4,65}, -{71,4,66}, -{71,4,67}, -{71,4,68}, -{71,4,69}, -{71,4,70}, -{71,4,71}, -{71,4,72}, -{71,4,73}, -{71,4,74}, -{71,5,-44}, -{71,5,-43}, -{71,5,-42}, -{71,5,-41}, -{71,5,-40}, -{71,5,-39}, -{71,5,-38}, -{71,5,-37}, -{71,5,-36}, -{71,5,-35}, -{71,5,-34}, -{71,5,-33}, -{71,5,-32}, -{71,5,-31}, -{71,5,-30}, -{71,5,-29}, -{71,5,-28}, -{71,5,-27}, -{71,5,-26}, -{71,5,-25}, -{71,5,-24}, -{71,5,-23}, -{71,5,-22}, -{71,5,-21}, -{71,5,-20}, -{71,5,-19}, -{71,5,-18}, -{71,5,-17}, -{71,5,-16}, -{71,5,-15}, -{71,5,-14}, -{71,5,-13}, -{71,5,-12}, -{71,5,-11}, -{71,5,-10}, -{71,5,-9}, -{71,5,-8}, -{71,5,-7}, -{71,5,-6}, -{71,5,-5}, -{71,5,-4}, -{71,5,-3}, -{71,5,-2}, -{71,5,-1}, -{71,5,0}, -{71,5,1}, -{71,5,2}, -{71,5,3}, -{71,5,4}, -{71,5,5}, -{71,5,6}, -{71,5,7}, -{71,5,8}, -{71,5,9}, -{71,5,10}, -{71,5,11}, -{71,5,12}, -{71,5,13}, -{71,5,14}, -{71,5,15}, -{71,5,16}, -{71,5,17}, -{71,5,18}, -{71,5,19}, -{71,5,20}, -{71,5,21}, -{71,5,22}, -{71,5,23}, -{71,5,24}, -{71,5,25}, -{71,5,26}, -{71,5,27}, -{71,5,28}, -{71,5,29}, -{71,5,30}, -{71,5,31}, -{71,5,32}, -{71,5,33}, -{71,5,34}, -{71,5,35}, -{71,5,36}, -{71,5,37}, -{71,5,38}, -{71,5,39}, -{71,5,40}, -{71,5,41}, -{71,5,42}, -{71,5,43}, -{71,5,44}, -{71,5,45}, -{71,5,46}, -{71,5,47}, -{71,5,48}, -{71,5,49}, -{71,5,50}, -{71,5,51}, -{71,5,52}, -{71,5,53}, -{71,5,54}, -{71,5,55}, -{71,5,56}, -{71,5,57}, -{71,5,58}, -{71,5,59}, -{71,5,60}, -{71,5,61}, -{71,5,62}, -{71,5,63}, -{71,5,64}, -{71,5,65}, -{71,5,66}, -{71,5,67}, -{71,5,68}, -{71,5,69}, -{71,5,70}, -{71,5,71}, -{71,5,72}, -{71,5,73}, -{71,5,74}, -{71,6,-44}, -{71,6,-43}, -{71,6,-42}, -{71,6,-41}, -{71,6,-40}, -{71,6,-39}, -{71,6,-38}, -{71,6,-37}, -{71,6,-36}, -{71,6,-35}, -{71,6,-34}, -{71,6,-33}, -{71,6,-32}, -{71,6,-31}, -{71,6,-30}, -{71,6,-29}, -{71,6,-28}, -{71,6,-27}, -{71,6,-26}, -{71,6,-25}, -{71,6,-24}, -{71,6,-23}, -{71,6,-22}, -{71,6,-21}, -{71,6,-20}, -{71,6,-19}, -{71,6,-18}, -{71,6,-17}, -{71,6,-16}, -{71,6,-15}, -{71,6,-14}, -{71,6,-13}, -{71,6,-12}, -{71,6,-11}, -{71,6,-10}, -{71,6,-9}, -{71,6,-8}, -{71,6,-7}, -{71,6,-6}, -{71,6,-5}, -{71,6,-4}, -{71,6,-3}, -{71,6,-2}, -{71,6,-1}, -{71,6,0}, -{71,6,1}, -{71,6,2}, -{71,6,3}, -{71,6,4}, -{71,6,5}, -{71,6,6}, -{71,6,7}, -{71,6,8}, -{71,6,9}, -{71,6,10}, -{71,6,11}, -{71,6,12}, -{71,6,13}, -{71,6,14}, -{71,6,15}, -{71,6,16}, -{71,6,17}, -{71,6,18}, -{71,6,19}, -{71,6,20}, -{71,6,21}, -{71,6,22}, -{71,6,23}, -{71,6,24}, -{71,6,25}, -{71,6,26}, -{71,6,27}, -{71,6,28}, -{71,6,29}, -{71,6,30}, -{71,6,31}, -{71,6,32}, -{71,6,33}, -{71,6,34}, -{71,6,35}, -{71,6,36}, -{71,6,37}, -{71,6,38}, -{71,6,39}, -{71,6,40}, -{71,6,41}, -{71,6,42}, -{71,6,43}, -{71,6,44}, -{71,6,45}, -{71,6,46}, -{71,6,47}, -{71,6,48}, -{71,6,49}, -{71,6,50}, -{71,6,51}, -{71,6,52}, -{71,6,53}, -{71,6,54}, -{71,6,55}, -{71,6,56}, -{71,6,57}, -{71,6,58}, -{71,6,59}, -{71,6,60}, -{71,6,61}, -{71,6,62}, -{71,6,63}, -{71,6,64}, -{71,6,65}, -{71,6,66}, -{71,6,67}, -{71,6,68}, -{71,6,69}, -{71,6,70}, -{71,6,71}, -{71,6,72}, -{71,6,73}, -{71,6,74}, -{71,7,-44}, -{71,7,-43}, -{71,7,-42}, -{71,7,-41}, -{71,7,-40}, -{71,7,-39}, -{71,7,-38}, -{71,7,-37}, -{71,7,-36}, -{71,7,-35}, -{71,7,-34}, -{71,7,-33}, -{71,7,-32}, -{71,7,-31}, -{71,7,-30}, -{71,7,-29}, -{71,7,-28}, -{71,7,-27}, -{71,7,-26}, -{71,7,-25}, -{71,7,-24}, -{71,7,-23}, -{71,7,-22}, -{71,7,-21}, -{71,7,-20}, -{71,7,-19}, -{71,7,-18}, -{71,7,-17}, -{71,7,-16}, -{71,7,-15}, -{71,7,-14}, -{71,7,-13}, -{71,7,-12}, -{71,7,-11}, -{71,7,-10}, -{71,7,-9}, -{71,7,-8}, -{71,7,-7}, -{71,7,-6}, -{71,7,-5}, -{71,7,-4}, -{71,7,-3}, -{71,7,-2}, -{71,7,-1}, -{71,7,0}, -{71,7,1}, -{71,7,2}, -{71,7,3}, -{71,7,4}, -{71,7,5}, -{71,7,6}, -{71,7,7}, -{71,7,8}, -{71,7,9}, -{71,7,10}, -{71,7,11}, -{71,7,12}, -{71,7,13}, -{71,7,14}, -{71,7,15}, -{71,7,16}, -{71,7,17}, -{71,7,18}, -{71,7,19}, -{71,7,20}, -{71,7,21}, -{71,7,22}, -{71,7,23}, -{71,7,24}, -{71,7,25}, -{71,7,26}, -{71,7,27}, -{71,7,28}, -{71,7,29}, -{71,7,30}, -{71,7,31}, -{71,7,32}, -{71,7,33}, -{71,7,34}, -{71,7,35}, -{71,7,36}, -{71,7,37}, -{71,7,38}, -{71,7,39}, -{71,7,40}, -{71,7,41}, -{71,7,42}, -{71,7,43}, -{71,7,44}, -{71,7,45}, -{71,7,46}, -{71,7,47}, -{71,7,48}, -{71,7,49}, -{71,7,50}, -{71,7,51}, -{71,7,52}, -{71,7,53}, -{71,7,54}, -{71,7,55}, -{71,7,56}, -{71,7,57}, -{71,7,58}, -{71,7,59}, -{71,7,60}, -{71,7,61}, -{71,7,62}, -{71,7,63}, -{71,7,64}, -{71,7,65}, -{71,7,66}, -{71,7,67}, -{71,7,68}, -{71,7,69}, -{71,7,70}, -{71,7,71}, -{71,7,72}, -{71,7,73}, -{71,7,74}, -{71,8,-44}, -{71,8,-43}, -{71,8,-42}, -{71,8,-41}, -{71,8,-40}, -{71,8,-39}, -{71,8,-38}, -{71,8,-37}, -{71,8,-36}, -{71,8,-35}, -{71,8,-34}, -{71,8,-33}, -{71,8,-32}, -{71,8,-31}, -{71,8,-30}, -{71,8,-29}, -{71,8,-28}, -{71,8,-27}, -{71,8,-26}, -{71,8,-25}, -{71,8,-24}, -{71,8,-23}, -{71,8,-22}, -{71,8,-21}, -{71,8,-20}, -{71,8,-19}, -{71,8,-18}, -{71,8,-17}, -{71,8,-16}, -{71,8,-15}, -{71,8,-14}, -{71,8,-13}, -{71,8,-12}, -{71,8,-11}, -{71,8,-10}, -{71,8,-9}, -{71,8,-8}, -{71,8,-7}, -{71,8,-6}, -{71,8,-5}, -{71,8,-4}, -{71,8,-3}, -{71,8,-2}, -{71,8,-1}, -{71,8,0}, -{71,8,1}, -{71,8,2}, -{71,8,3}, -{71,8,4}, -{71,8,5}, -{71,8,6}, -{71,8,7}, -{71,8,8}, -{71,8,9}, -{71,8,10}, -{71,8,11}, -{71,8,12}, -{71,8,13}, -{71,8,14}, -{71,8,15}, -{71,8,16}, -{71,8,17}, -{71,8,18}, -{71,8,19}, -{71,8,20}, -{71,8,21}, -{71,8,22}, -{71,8,23}, -{71,8,24}, -{71,8,25}, -{71,8,26}, -{71,8,27}, -{71,8,28}, -{71,8,29}, -{71,8,30}, -{71,8,31}, -{71,8,32}, -{71,8,33}, -{71,8,34}, -{71,8,35}, -{71,8,36}, -{71,8,37}, -{71,8,38}, -{71,8,39}, -{71,8,40}, -{71,8,41}, -{71,8,42}, -{71,8,43}, -{71,8,44}, -{71,8,45}, -{71,8,46}, -{71,8,47}, -{71,8,48}, -{71,8,49}, -{71,8,50}, -{71,8,51}, -{71,8,52}, -{71,8,53}, -{71,8,54}, -{71,8,55}, -{71,8,56}, -{71,8,57}, -{71,8,58}, -{71,8,59}, -{71,8,60}, -{71,8,61}, -{71,8,62}, -{71,8,63}, -{71,8,64}, -{71,8,65}, -{71,8,66}, -{71,8,67}, -{71,8,68}, -{71,8,69}, -{71,8,70}, -{71,8,71}, -{71,8,72}, -{71,8,73}, -{71,8,74}, -{71,9,-44}, -{71,9,-43}, -{71,9,-42}, -{71,9,-41}, -{71,9,-40}, -{71,9,-39}, -{71,9,-38}, -{71,9,-37}, -{71,9,-36}, -{71,9,-35}, -{71,9,-34}, -{71,9,-33}, -{71,9,-32}, -{71,9,-31}, -{71,9,-30}, -{71,9,-29}, -{71,9,-28}, -{71,9,-27}, -{71,9,-26}, -{71,9,-25}, -{71,9,-24}, -{71,9,-23}, -{71,9,-22}, -{71,9,-21}, -{71,9,-20}, -{71,9,-19}, -{71,9,-18}, -{71,9,-17}, -{71,9,-16}, -{71,9,-15}, -{71,9,-14}, -{71,9,-13}, -{71,9,-12}, -{71,9,-11}, -{71,9,-10}, -{71,9,-9}, -{71,9,-8}, -{71,9,-7}, -{71,9,-6}, -{71,9,-5}, -{71,9,-4}, -{71,9,-3}, -{71,9,-2}, -{71,9,-1}, -{71,9,0}, -{71,9,1}, -{71,9,2}, -{71,9,3}, -{71,9,4}, -{71,9,5}, -{71,9,6}, -{71,9,7}, -{71,9,8}, -{71,9,9}, -{71,9,10}, -{71,9,11}, -{71,9,12}, -{71,9,13}, -{71,9,14}, -{71,9,15}, -{71,9,16}, -{71,9,17}, -{71,9,18}, -{71,9,19}, -{71,9,20}, -{71,9,21}, -{71,9,22}, -{71,9,23}, -{71,9,24}, -{71,9,25}, -{71,9,26}, -{71,9,27}, -{71,9,28}, -{71,9,29}, -{71,9,30}, -{71,9,31}, -{71,9,32}, -{71,9,33}, -{71,9,34}, -{71,9,35}, -{71,9,36}, -{71,9,37}, -{71,9,38}, -{71,9,39}, -{71,9,40}, -{71,9,41}, -{71,9,42}, -{71,9,43}, -{71,9,44}, -{71,9,45}, -{71,9,46}, -{71,9,47}, -{71,9,48}, -{71,9,49}, -{71,9,50}, -{71,9,51}, -{71,9,52}, -{71,9,53}, -{71,9,54}, -{71,9,55}, -{71,9,56}, -{71,9,57}, -{71,9,58}, -{71,9,59}, -{71,9,60}, -{71,9,61}, -{71,9,62}, -{71,9,63}, -{71,9,64}, -{71,9,65}, -{71,9,66}, -{71,9,67}, -{71,9,68}, -{71,9,69}, -{71,9,70}, -{71,9,71}, -{71,9,72}, -{71,9,73}, -{71,9,74}, -{71,10,-44}, -{71,10,-43}, -{71,10,-42}, -{71,10,-41}, -{71,10,-40}, -{71,10,-39}, -{71,10,-38}, -{71,10,-37}, -{71,10,-36}, -{71,10,-35}, -{71,10,-34}, -{71,10,-33}, -{71,10,-32}, -{71,10,-31}, -{71,10,-30}, -{71,10,-29}, -{71,10,-28}, -{71,10,-27}, -{71,10,-26}, -{71,10,-25}, -{71,10,-24}, -{71,10,-23}, -{71,10,-22}, -{71,10,-21}, -{71,10,-20}, -{71,10,-19}, -{71,10,-18}, -{71,10,-17}, -{71,10,-16}, -{71,10,-15}, -{71,10,-14}, -{71,10,-13}, -{71,10,-12}, -{71,10,-11}, -{71,10,-10}, -{71,10,-9}, -{71,10,-8}, -{71,10,-7}, -{71,10,-6}, -{71,10,-5}, -{71,10,-4}, -{71,10,-3}, -{71,10,-2}, -{71,10,-1}, -{71,10,0}, -{71,10,1}, -{71,10,2}, -{71,10,3}, -{71,10,4}, -{71,10,5}, -{71,10,6}, -{71,10,7}, -{71,10,8}, -{71,10,9}, -{71,10,10}, -{71,10,11}, -{71,10,12}, -{71,10,13}, -{71,10,14}, -{71,10,15}, -{71,10,16}, -{71,10,17}, -{71,10,18}, -{71,10,19}, -{71,10,20}, -{71,10,21}, -{71,10,22}, -{71,10,23}, -{71,10,24}, -{71,10,25}, -{71,10,26}, -{71,10,27}, -{71,10,28}, -{71,10,29}, -{71,10,30}, -{71,10,31}, -{71,10,32}, -{71,10,33}, -{71,10,34}, -{71,10,35}, -{71,10,36}, -{71,10,37}, -{71,10,38}, -{71,10,39}, -{71,10,40}, -{71,10,41}, -{71,10,42}, -{71,10,43}, -{71,10,44}, -{71,10,45}, -{71,10,46}, -{71,10,47}, -{71,10,48}, -{71,10,49}, -{71,10,50}, -{71,10,51}, -{71,10,52}, -{71,10,53}, -{71,10,54}, -{71,10,55}, -{71,10,56}, -{71,10,57}, -{71,10,58}, -{71,10,59}, -{71,10,60}, -{71,10,61}, -{71,10,62}, -{71,10,63}, -{71,10,64}, -{71,10,65}, -{71,10,66}, -{71,10,67}, -{71,10,68}, -{71,10,69}, -{71,10,70}, -{71,10,71}, -{71,10,72}, -{71,10,73}, -{71,10,74}, -{71,11,-44}, -{71,11,-43}, -{71,11,-42}, -{71,11,-41}, -{71,11,-40}, -{71,11,-39}, -{71,11,-38}, -{71,11,-37}, -{71,11,-36}, -{71,11,-35}, -{71,11,-34}, -{71,11,-33}, -{71,11,-32}, -{71,11,-31}, -{71,11,-30}, -{71,11,-29}, -{71,11,-28}, -{71,11,-27}, -{71,11,-26}, -{71,11,-25}, -{71,11,-24}, -{71,11,-23}, -{71,11,-22}, -{71,11,-21}, -{71,11,-20}, -{71,11,-19}, -{71,11,-18}, -{71,11,-17}, -{71,11,-16}, -{71,11,-15}, -{71,11,-14}, -{71,11,-13}, -{71,11,-12}, -{71,11,-11}, -{71,11,-10}, -{71,11,-9}, -{71,11,-8}, -{71,11,-7}, -{71,11,-6}, -{71,11,-5}, -{71,11,-4}, -{71,11,-3}, -{71,11,-2}, -{71,11,-1}, -{71,11,0}, -{71,11,1}, -{71,11,2}, -{71,11,3}, -{71,11,4}, -{71,11,5}, -{71,11,6}, -{71,11,7}, -{71,11,8}, -{71,11,9}, -{71,11,10}, -{71,11,11}, -{71,11,12}, -{71,11,13}, -{71,11,14}, -{71,11,15}, -{71,11,16}, -{71,11,17}, -{71,11,18}, -{71,11,19}, -{71,11,20}, -{71,11,21}, -{71,11,22}, -{71,11,23}, -{71,11,24}, -{71,11,25}, -{71,11,26}, -{71,11,27}, -{71,11,28}, -{71,11,29}, -{71,11,30}, -{71,11,31}, -{71,11,32}, -{71,11,33}, -{71,11,34}, -{71,11,35}, -{71,11,36}, -{71,11,37}, -{71,11,38}, -{71,11,39}, -{71,11,40}, -{71,11,41}, -{71,11,42}, -{71,11,43}, -{71,11,44}, -{71,11,45}, -{71,11,46}, -{71,11,47}, -{71,11,48}, -{71,11,49}, -{71,11,50}, -{71,11,51}, -{71,11,52}, -{71,11,53}, -{71,11,54}, -{71,11,55}, -{71,11,56}, -{71,11,57}, -{71,11,58}, -{71,11,59}, -{71,11,60}, -{71,11,61}, -{71,11,62}, -{71,11,63}, -{71,11,64}, -{71,11,65}, -{71,11,66}, -{71,11,67}, -{71,11,68}, -{71,11,69}, -{71,11,70}, -{71,11,71}, -{71,11,72}, -{71,11,73}, -{71,11,74}, -{71,12,-44}, -{71,12,-43}, -{71,12,-42}, -{71,12,-41}, -{71,12,-40}, -{71,12,-39}, -{71,12,-38}, -{71,12,-37}, -{71,12,-36}, -{71,12,-35}, -{71,12,-34}, -{71,12,-33}, -{71,12,-32}, -{71,12,-31}, -{71,12,-30}, -{71,12,-29}, -{71,12,-28}, -{71,12,-27}, -{71,12,-26}, -{71,12,-25}, -{71,12,-24}, -{71,12,-23}, -{71,12,-22}, -{71,12,-21}, -{71,12,-20}, -{71,12,-19}, -{71,12,-18}, -{71,12,-17}, -{71,12,-16}, -{71,12,-15}, -{71,12,-14}, -{71,12,-13}, -{71,12,-12}, -{71,12,-11}, -{71,12,-10}, -{71,12,-9}, -{71,12,-8}, -{71,12,-7}, -{71,12,-6}, -{71,12,-5}, -{71,12,-4}, -{71,12,-3}, -{71,12,-2}, -{71,12,-1}, -{71,12,0}, -{71,12,1}, -{71,12,2}, -{71,12,3}, -{71,12,4}, -{71,12,5}, -{71,12,6}, -{71,12,7}, -{71,12,8}, -{71,12,9}, -{71,12,10}, -{71,12,11}, -{71,12,12}, -{71,12,13}, -{71,12,14}, -{71,12,15}, -{71,12,16}, -{71,12,17}, -{71,12,18}, -{71,12,19}, -{71,12,20}, -{71,12,21}, -{71,12,22}, -{71,12,23}, -{71,12,24}, -{71,12,25}, -{71,12,26}, -{71,12,27}, -{71,12,28}, -{71,12,29}, -{71,12,30}, -{71,12,31}, -{71,12,32}, -{71,12,33}, -{71,12,34}, -{71,12,35}, -{71,12,36}, -{71,12,37}, -{71,12,38}, -{71,12,39}, -{71,12,40}, -{71,12,41}, -{71,12,42}, -{71,12,43}, -{71,12,44}, -{71,12,45}, -{71,12,46}, -{71,12,47}, -{71,12,48}, -{71,12,49}, -{71,12,50}, -{71,12,51}, -{71,12,52}, -{71,12,53}, -{71,12,54}, -{71,12,55}, -{71,12,56}, -{71,12,57}, -{71,12,58}, -{71,12,59}, -{71,12,60}, -{71,12,61}, -{71,12,62}, -{71,12,63}, -{71,12,64}, -{71,12,65}, -{71,12,66}, -{71,12,67}, -{71,12,68}, -{71,12,69}, -{71,12,70}, -{71,12,71}, -{71,12,72}, -{71,12,73}, -{71,12,74}, -{71,13,-44}, -{71,13,-43}, -{71,13,-42}, -{71,13,-41}, -{71,13,-40}, -{71,13,-39}, -{71,13,-38}, -{71,13,-37}, -{71,13,-36}, -{71,13,-35}, -{71,13,-34}, -{71,13,-33}, -{71,13,-32}, -{71,13,-31}, -{71,13,-30}, -{71,13,-29}, -{71,13,-28}, -{71,13,-27}, -{71,13,-26}, -{71,13,-25}, -{71,13,-24}, -{71,13,-23}, -{71,13,-22}, -{71,13,-21}, -{71,13,-20}, -{71,13,-19}, -{71,13,-18}, -{71,13,-17}, -{71,13,-16}, -{71,13,-15}, -{71,13,-14}, -{71,13,-13}, -{71,13,-12}, -{71,13,-11}, -{71,13,-10}, -{71,13,-9}, -{71,13,-8}, -{71,13,-7}, -{71,13,-6}, -{71,13,-5}, -{71,13,-4}, -{71,13,-3}, -{71,13,-2}, -{71,13,-1}, -{71,13,0}, -{71,13,1}, -{71,13,2}, -{71,13,3}, -{71,13,4}, -{71,13,5}, -{71,13,6}, -{71,13,7}, -{71,13,8}, -{71,13,9}, -{71,13,10}, -{71,13,11}, -{71,13,12}, -{71,13,13}, -{71,13,14}, -{71,13,15}, -{71,13,16}, -{71,13,17}, -{71,13,18}, -{71,13,19}, -{71,13,20}, -{71,13,21}, -{71,13,22}, -{71,13,23}, -{71,13,24}, -{71,13,25}, -{71,13,26}, -{71,13,27}, -{71,13,28}, -{71,13,29}, -{71,13,30}, -{71,13,31}, -{71,13,32}, -{71,13,33}, -{71,13,34}, -{71,13,35}, -{71,13,36}, -{71,13,37}, -{71,13,38}, -{71,13,39}, -{71,13,40}, -{71,13,41}, -{71,13,42}, -{71,13,43}, -{71,13,44}, -{71,13,45}, -{71,13,46}, -{71,13,47}, -{71,13,48}, -{71,13,49}, -{71,13,50}, -{71,13,51}, -{71,13,52}, -{71,13,53}, -{71,13,54}, -{71,13,55}, -{71,13,56}, -{71,13,57}, -{71,13,58}, -{71,13,59}, -{71,13,60}, -{71,13,61}, -{71,13,62}, -{71,13,63}, -{71,13,64}, -{71,13,65}, -{71,13,66}, -{71,13,67}, -{71,13,68}, -{71,13,69}, -{71,13,70}, -{71,13,71}, -{71,13,72}, -{71,13,73}, -{71,13,74}, -{71,14,-44}, -{71,14,-43}, -{71,14,-42}, -{71,14,-41}, -{71,14,-40}, -{71,14,-39}, -{71,14,-38}, -{71,14,-37}, -{71,14,-36}, -{71,14,-35}, -{71,14,-34}, -{71,14,-33}, -{71,14,-32}, -{71,14,-31}, -{71,14,-30}, -{71,14,-29}, -{71,14,-28}, -{71,14,-27}, -{71,14,-26}, -{71,14,-25}, -{71,14,-24}, -{71,14,-23}, -{71,14,-22}, -{71,14,-21}, -{71,14,-20}, -{71,14,-19}, -{71,14,-18}, -{71,14,-17}, -{71,14,-16}, -{71,14,-15}, -{71,14,-14}, -{71,14,-13}, -{71,14,-12}, -{71,14,-11}, -{71,14,-10}, -{71,14,-9}, -{71,14,-8}, -{71,14,-7}, -{71,14,-6}, -{71,14,-5}, -{71,14,-4}, -{71,14,-3}, -{71,14,-2}, -{71,14,-1}, -{71,14,0}, -{71,14,1}, -{71,14,2}, -{71,14,3}, -{71,14,4}, -{71,14,5}, -{71,14,6}, -{71,14,7}, -{71,14,8}, -{71,14,9}, -{71,14,10}, -{71,14,11}, -{71,14,12}, -{71,14,13}, -{71,14,14}, -{71,14,15}, -{71,14,16}, -{71,14,17}, -{71,14,18}, -{71,14,19}, -{71,14,20}, -{71,14,21}, -{71,14,22}, -{71,14,23}, -{71,14,24}, -{71,14,25}, -{71,14,26}, -{71,14,27}, -{71,14,28}, -{71,14,29}, -{71,14,30}, -{71,14,31}, -{71,14,32}, -{71,14,33}, -{71,14,34}, -{71,14,35}, -{71,14,36}, -{71,14,37}, -{71,14,38}, -{71,14,39}, -{71,14,40}, -{71,14,41}, -{71,14,42}, -{71,14,43}, -{71,14,44}, -{71,14,45}, -{71,14,46}, -{71,14,47}, -{71,14,48}, -{71,14,49}, -{71,14,50}, -{71,14,51}, -{71,14,52}, -{71,14,53}, -{71,14,54}, -{71,14,55}, -{71,14,56}, -{71,14,57}, -{71,14,58}, -{71,14,59}, -{71,14,60}, -{71,14,61}, -{71,14,62}, -{71,14,63}, -{71,14,64}, -{71,14,65}, -{71,14,66}, -{71,14,67}, -{71,14,68}, -{71,14,69}, -{71,14,70}, -{71,14,71}, -{71,14,72}, -{71,14,73}, -{71,14,74}, -{71,14,75}, -{71,15,-44}, -{71,15,-43}, -{71,15,-42}, -{71,15,-41}, -{71,15,-40}, -{71,15,-39}, -{71,15,-38}, -{71,15,-37}, -{71,15,-36}, -{71,15,-35}, -{71,15,-34}, -{71,15,-33}, -{71,15,-32}, -{71,15,-31}, -{71,15,-30}, -{71,15,-29}, -{71,15,-28}, -{71,15,-27}, -{71,15,-26}, -{71,15,-25}, -{71,15,-24}, -{71,15,-23}, -{71,15,-22}, -{71,15,-21}, -{71,15,-20}, -{71,15,-19}, -{71,15,-18}, -{71,15,-17}, -{71,15,-16}, -{71,15,-15}, -{71,15,-14}, -{71,15,-13}, -{71,15,-12}, -{71,15,-11}, -{71,15,-10}, -{71,15,-9}, -{71,15,-8}, -{71,15,-7}, -{71,15,-6}, -{71,15,-5}, -{71,15,-4}, -{71,15,-3}, -{71,15,-2}, -{71,15,-1}, -{71,15,0}, -{71,15,1}, -{71,15,2}, -{71,15,3}, -{71,15,4}, -{71,15,5}, -{71,15,6}, -{71,15,7}, -{71,15,8}, -{71,15,9}, -{71,15,10}, -{71,15,11}, -{71,15,12}, -{71,15,13}, -{71,15,14}, -{71,15,15}, -{71,15,16}, -{71,15,17}, -{71,15,18}, -{71,15,19}, -{71,15,20}, -{71,15,21}, -{71,15,22}, -{71,15,23}, -{71,15,24}, -{71,15,25}, -{71,15,26}, -{71,15,27}, -{71,15,28}, -{71,15,29}, -{71,15,30}, -{71,15,31}, -{71,15,32}, -{71,15,33}, -{71,15,34}, -{71,15,35}, -{71,15,36}, -{71,15,37}, -{71,15,38}, -{71,15,39}, -{71,15,40}, -{71,15,41}, -{71,15,42}, -{71,15,43}, -{71,15,44}, -{71,15,45}, -{71,15,46}, -{71,15,47}, -{71,15,48}, -{71,15,49}, -{71,15,50}, -{71,15,51}, -{71,15,52}, -{71,15,53}, -{71,15,54}, -{71,15,55}, -{71,15,56}, -{71,15,57}, -{71,15,58}, -{71,15,59}, -{71,15,60}, -{71,15,61}, -{71,15,62}, -{71,15,63}, -{71,15,64}, -{71,15,65}, -{71,15,66}, -{71,15,67}, -{71,15,68}, -{71,15,69}, -{71,15,70}, -{71,15,71}, -{71,15,72}, -{71,15,73}, -{71,15,74}, -{71,15,75}, -{71,16,-44}, -{71,16,-43}, -{71,16,-42}, -{71,16,-41}, -{71,16,-40}, -{71,16,-39}, -{71,16,-38}, -{71,16,-37}, -{71,16,-36}, -{71,16,-35}, -{71,16,-34}, -{71,16,-33}, -{71,16,-32}, -{71,16,-31}, -{71,16,-30}, -{71,16,-29}, -{71,16,-28}, -{71,16,-27}, -{71,16,-26}, -{71,16,-25}, -{71,16,-24}, -{71,16,-23}, -{71,16,-22}, -{71,16,-21}, -{71,16,-20}, -{71,16,-19}, -{71,16,-18}, -{71,16,-17}, -{71,16,-16}, -{71,16,-15}, -{71,16,-14}, -{71,16,-13}, -{71,16,-12}, -{71,16,-11}, -{71,16,-10}, -{71,16,-9}, -{71,16,-8}, -{71,16,-7}, -{71,16,-6}, -{71,16,-5}, -{71,16,-4}, -{71,16,-3}, -{71,16,-2}, -{71,16,-1}, -{71,16,0}, -{71,16,1}, -{71,16,2}, -{71,16,3}, -{71,16,4}, -{71,16,5}, -{71,16,6}, -{71,16,7}, -{71,16,8}, -{71,16,9}, -{71,16,10}, -{71,16,11}, -{71,16,12}, -{71,16,13}, -{71,16,14}, -{71,16,15}, -{71,16,16}, -{71,16,17}, -{71,16,18}, -{71,16,19}, -{71,16,20}, -{71,16,21}, -{71,16,22}, -{71,16,23}, -{71,16,24}, -{71,16,25}, -{71,16,26}, -{71,16,27}, -{71,16,28}, -{71,16,29}, -{71,16,30}, -{71,16,31}, -{71,16,32}, -{71,16,33}, -{71,16,34}, -{71,16,35}, -{71,16,36}, -{71,16,37}, -{71,16,38}, -{71,16,39}, -{71,16,40}, -{71,16,41}, -{71,16,42}, -{71,16,43}, -{71,16,44}, -{71,16,45}, -{71,16,46}, -{71,16,47}, -{71,16,48}, -{71,16,49}, -{71,16,50}, -{71,16,51}, -{71,16,52}, -{71,16,53}, -{71,16,54}, -{71,16,55}, -{71,16,56}, -{71,16,57}, -{71,16,58}, -{71,16,59}, -{71,16,60}, -{71,16,61}, -{71,16,62}, -{71,16,63}, -{71,16,64}, -{71,16,65}, -{71,16,66}, -{71,16,67}, -{71,16,68}, -{71,16,69}, -{71,16,70}, -{71,16,71}, -{71,16,72}, -{71,16,73}, -{71,16,74}, -{71,16,75}, -{71,17,-44}, -{71,17,-43}, -{71,17,-42}, -{71,17,-41}, -{71,17,-40}, -{71,17,-39}, -{71,17,-38}, -{71,17,-37}, -{71,17,-36}, -{71,17,-35}, -{71,17,-34}, -{71,17,-33}, -{71,17,-32}, -{71,17,-31}, -{71,17,-30}, -{71,17,-29}, -{71,17,-28}, -{71,17,-27}, -{71,17,-26}, -{71,17,-25}, -{71,17,-24}, -{71,17,-23}, -{71,17,-22}, -{71,17,-21}, -{71,17,-20}, -{71,17,-19}, -{71,17,-18}, -{71,17,-17}, -{71,17,-16}, -{71,17,-15}, -{71,17,-14}, -{71,17,-13}, -{71,17,-12}, -{71,17,-11}, -{71,17,-10}, -{71,17,-9}, -{71,17,-8}, -{71,17,-7}, -{71,17,-6}, -{71,17,-5}, -{71,17,-4}, -{71,17,-3}, -{71,17,-2}, -{71,17,-1}, -{71,17,0}, -{71,17,1}, -{71,17,2}, -{71,17,3}, -{71,17,4}, -{71,17,5}, -{71,17,6}, -{71,17,7}, -{71,17,8}, -{71,17,9}, -{71,17,10}, -{71,17,11}, -{71,17,12}, -{71,17,13}, -{71,17,14}, -{71,17,15}, -{71,17,16}, -{71,17,17}, -{71,17,18}, -{71,17,19}, -{71,17,20}, -{71,17,21}, -{71,17,22}, -{71,17,23}, -{71,17,24}, -{71,17,25}, -{71,17,26}, -{71,17,27}, -{71,17,28}, -{71,17,29}, -{71,17,30}, -{71,17,31}, -{71,17,32}, -{71,17,33}, -{71,17,34}, -{71,17,35}, -{71,17,36}, -{71,17,37}, -{71,17,38}, -{71,17,39}, -{71,17,40}, -{71,17,41}, -{71,17,42}, -{71,17,43}, -{71,17,44}, -{71,17,45}, -{71,17,46}, -{71,17,47}, -{71,17,48}, -{71,17,49}, -{71,17,50}, -{71,17,51}, -{71,17,52}, -{71,17,53}, -{71,17,54}, -{71,17,55}, -{71,17,56}, -{71,17,57}, -{71,17,58}, -{71,17,59}, -{71,17,60}, -{71,17,61}, -{71,17,62}, -{71,17,63}, -{71,17,64}, -{71,17,65}, -{71,17,66}, -{71,17,67}, -{71,17,68}, -{71,17,69}, -{71,17,70}, -{71,17,71}, -{71,17,72}, -{71,17,73}, -{71,17,74}, -{71,17,75}, -{71,18,-44}, -{71,18,-43}, -{71,18,-42}, -{71,18,-41}, -{71,18,-40}, -{71,18,-39}, -{71,18,-38}, -{71,18,-37}, -{71,18,-36}, -{71,18,-35}, -{71,18,-34}, -{71,18,-33}, -{71,18,-32}, -{71,18,-31}, -{71,18,-30}, -{71,18,-29}, -{71,18,-28}, -{71,18,-27}, -{71,18,-26}, -{71,18,-25}, -{71,18,-24}, -{71,18,-23}, -{71,18,-22}, -{71,18,-21}, -{71,18,-20}, -{71,18,-19}, -{71,18,-18}, -{71,18,-17}, -{71,18,-16}, -{71,18,-15}, -{71,18,-14}, -{71,18,-13}, -{71,18,-12}, -{71,18,-11}, -{71,18,-10}, -{71,18,-9}, -{71,18,-8}, -{71,18,-7}, -{71,18,-6}, -{71,18,-5}, -{71,18,-4}, -{71,18,-3}, -{71,18,-2}, -{71,18,-1}, -{71,18,0}, -{71,18,1}, -{71,18,2}, -{71,18,3}, -{71,18,4}, -{71,18,5}, -{71,18,6}, -{71,18,7}, -{71,18,8}, -{71,18,9}, -{71,18,10}, -{71,18,11}, -{71,18,12}, -{71,18,13}, -{71,18,14}, -{71,18,15}, -{71,18,16}, -{71,18,17}, -{71,18,18}, -{71,18,19}, -{71,18,20}, -{71,18,21}, -{71,18,22}, -{71,18,23}, -{71,18,24}, -{71,18,25}, -{71,18,26}, -{71,18,27}, -{71,18,28}, -{71,18,29}, -{71,18,30}, -{71,18,31}, -{71,18,32}, -{71,18,33}, -{71,18,34}, -{71,18,35}, -{71,18,36}, -{71,18,37}, -{71,18,38}, -{71,18,39}, -{71,18,40}, -{71,18,41}, -{71,18,42}, -{71,18,43}, -{71,18,44}, -{71,18,45}, -{71,18,46}, -{71,18,47}, -{71,18,48}, -{71,18,49}, -{71,18,50}, -{71,18,51}, -{71,18,52}, -{71,18,53}, -{71,18,54}, -{71,18,55}, -{71,18,56}, -{71,18,57}, -{71,18,58}, -{71,18,59}, -{71,18,60}, -{71,18,61}, -{71,18,62}, -{71,18,63}, -{71,18,64}, -{71,18,65}, -{71,18,66}, -{71,18,67}, -{71,18,68}, -{71,18,69}, -{71,18,70}, -{71,18,71}, -{71,18,72}, -{71,18,73}, -{71,18,74}, -{71,18,75}, -{71,19,-44}, -{71,19,-43}, -{71,19,-42}, -{71,19,-41}, -{71,19,-40}, -{71,19,-39}, -{71,19,-38}, -{71,19,-37}, -{71,19,-36}, -{71,19,-35}, -{71,19,-34}, -{71,19,-33}, -{71,19,-32}, -{71,19,-31}, -{71,19,-30}, -{71,19,-29}, -{71,19,-28}, -{71,19,-27}, -{71,19,-26}, -{71,19,-25}, -{71,19,-24}, -{71,19,-23}, -{71,19,-22}, -{71,19,-21}, -{71,19,-20}, -{71,19,-19}, -{71,19,-18}, -{71,19,-17}, -{71,19,-16}, -{71,19,-15}, -{71,19,-14}, -{71,19,-13}, -{71,19,-12}, -{71,19,-11}, -{71,19,-10}, -{71,19,-9}, -{71,19,-8}, -{71,19,-7}, -{71,19,-6}, -{71,19,-5}, -{71,19,-4}, -{71,19,-3}, -{71,19,-2}, -{71,19,-1}, -{71,19,0}, -{71,19,1}, -{71,19,2}, -{71,19,3}, -{71,19,4}, -{71,19,5}, -{71,19,6}, -{71,19,7}, -{71,19,8}, -{71,19,9}, -{71,19,10}, -{71,19,11}, -{71,19,12}, -{71,19,13}, -{71,19,14}, -{71,19,15}, -{71,19,16}, -{71,19,17}, -{71,19,18}, -{71,19,19}, -{71,19,20}, -{71,19,21}, -{71,19,22}, -{71,19,23}, -{71,19,24}, -{71,19,25}, -{71,19,26}, -{71,19,27}, -{71,19,28}, -{71,19,29}, -{71,19,30}, -{71,19,31}, -{71,19,32}, -{71,19,33}, -{71,19,34}, -{71,19,35}, -{71,19,36}, -{71,19,37}, -{71,19,38}, -{71,19,39}, -{71,19,40}, -{71,19,41}, -{71,19,42}, -{71,19,43}, -{71,19,44}, -{71,19,45}, -{71,19,46}, -{71,19,47}, -{71,19,48}, -{71,19,49}, -{71,19,50}, -{71,19,51}, -{71,19,52}, -{71,19,53}, -{71,19,54}, -{71,19,55}, -{71,19,56}, -{71,19,57}, -{71,19,58}, -{71,19,59}, -{71,19,60}, -{71,19,61}, -{71,19,62}, -{71,19,63}, -{71,19,64}, -{71,19,65}, -{71,19,66}, -{71,19,67}, -{71,19,68}, -{71,19,69}, -{71,19,70}, -{71,19,71}, -{71,19,72}, -{71,19,73}, -{71,19,74}, -{71,19,75}, -{71,20,-44}, -{71,20,-43}, -{71,20,-42}, -{71,20,-41}, -{71,20,-40}, -{71,20,-39}, -{71,20,-38}, -{71,20,-37}, -{71,20,-36}, -{71,20,-35}, -{71,20,-34}, -{71,20,-33}, -{71,20,-32}, -{71,20,-31}, -{71,20,-30}, -{71,20,-29}, -{71,20,-28}, -{71,20,-27}, -{71,20,-26}, -{71,20,-25}, -{71,20,-24}, -{71,20,-23}, -{71,20,-22}, -{71,20,-21}, -{71,20,-20}, -{71,20,-19}, -{71,20,-18}, -{71,20,-17}, -{71,20,-16}, -{71,20,-15}, -{71,20,-14}, -{71,20,-13}, -{71,20,-12}, -{71,20,-11}, -{71,20,-10}, -{71,20,-9}, -{71,20,-8}, -{71,20,-7}, -{71,20,-6}, -{71,20,-5}, -{71,20,-4}, -{71,20,-3}, -{71,20,-2}, -{71,20,-1}, -{71,20,0}, -{71,20,1}, -{71,20,2}, -{71,20,3}, -{71,20,4}, -{71,20,5}, -{71,20,6}, -{71,20,7}, -{71,20,8}, -{71,20,9}, -{71,20,10}, -{71,20,11}, -{71,20,12}, -{71,20,13}, -{71,20,14}, -{71,20,15}, -{71,20,16}, -{71,20,17}, -{71,20,18}, -{71,20,19}, -{71,20,20}, -{71,20,21}, -{71,20,22}, -{71,20,23}, -{71,20,24}, -{71,20,25}, -{71,20,26}, -{71,20,27}, -{71,20,28}, -{71,20,29}, -{71,20,30}, -{71,20,31}, -{71,20,32}, -{71,20,33}, -{71,20,34}, -{71,20,35}, -{71,20,36}, -{71,20,37}, -{71,20,38}, -{71,20,39}, -{71,20,40}, -{71,20,41}, -{71,20,42}, -{71,20,43}, -{71,20,44}, -{71,20,45}, -{71,20,46}, -{71,20,47}, -{71,20,48}, -{71,20,49}, -{71,20,50}, -{71,20,51}, -{71,20,52}, -{71,20,53}, -{71,20,54}, -{71,20,55}, -{71,20,56}, -{71,20,57}, -{71,20,58}, -{71,20,59}, -{71,20,60}, -{71,20,61}, -{71,20,62}, -{71,20,63}, -{71,20,64}, -{71,20,65}, -{71,20,66}, -{71,20,67}, -{71,20,68}, -{71,20,69}, -{71,20,70}, -{71,20,71}, -{71,20,72}, -{71,20,73}, -{71,20,74}, -{71,20,75}, -{71,21,-44}, -{71,21,-43}, -{71,21,-42}, -{71,21,-41}, -{71,21,-40}, -{71,21,-39}, -{71,21,-38}, -{71,21,-37}, -{71,21,-36}, -{71,21,-35}, -{71,21,-34}, -{71,21,-33}, -{71,21,-32}, -{71,21,-31}, -{71,21,-30}, -{71,21,-29}, -{71,21,-28}, -{71,21,-27}, -{71,21,-26}, -{71,21,-25}, -{71,21,-24}, -{71,21,-23}, -{71,21,-22}, -{71,21,-21}, -{71,21,-20}, -{71,21,-19}, -{71,21,-18}, -{71,21,-17}, -{71,21,-16}, -{71,21,-15}, -{71,21,-14}, -{71,21,-13}, -{71,21,-12}, -{71,21,-11}, -{71,21,-10}, -{71,21,-9}, -{71,21,-8}, -{71,21,-7}, -{71,21,-6}, -{71,21,-5}, -{71,21,-4}, -{71,21,-3}, -{71,21,-2}, -{71,21,-1}, -{71,21,0}, -{71,21,1}, -{71,21,2}, -{71,21,3}, -{71,21,4}, -{71,21,5}, -{71,21,6}, -{71,21,7}, -{71,21,8}, -{71,21,9}, -{71,21,10}, -{71,21,11}, -{71,21,12}, -{71,21,13}, -{71,21,14}, -{71,21,15}, -{71,21,16}, -{71,21,17}, -{71,21,18}, -{71,21,19}, -{71,21,20}, -{71,21,21}, -{71,21,22}, -{71,21,23}, -{71,21,24}, -{71,21,25}, -{71,21,26}, -{71,21,27}, -{71,21,28}, -{71,21,29}, -{71,21,30}, -{71,21,31}, -{71,21,32}, -{71,21,33}, -{71,21,34}, -{71,21,35}, -{71,21,36}, -{71,21,37}, -{71,21,38}, -{71,21,39}, -{71,21,40}, -{71,21,41}, -{71,21,42}, -{71,21,43}, -{71,21,44}, -{71,21,45}, -{71,21,46}, -{71,21,47}, -{71,21,48}, -{71,21,49}, -{71,21,50}, -{71,21,51}, -{71,21,52}, -{71,21,53}, -{71,21,54}, -{71,21,55}, -{71,21,56}, -{71,21,57}, -{71,21,58}, -{71,21,59}, -{71,21,60}, -{71,21,61}, -{71,21,62}, -{71,21,63}, -{71,21,64}, -{71,21,65}, -{71,21,66}, -{71,21,67}, -{71,21,68}, -{71,21,69}, -{71,21,70}, -{71,21,71}, -{71,21,72}, -{71,21,73}, -{71,21,74}, -{71,21,75}, -{71,22,-44}, -{71,22,-43}, -{71,22,-42}, -{71,22,-41}, -{71,22,-40}, -{71,22,-39}, -{71,22,-38}, -{71,22,-37}, -{71,22,-36}, -{71,22,-35}, -{71,22,-34}, -{71,22,-33}, -{71,22,-32}, -{71,22,-31}, -{71,22,-30}, -{71,22,-29}, -{71,22,-28}, -{71,22,-27}, -{71,22,-26}, -{71,22,-25}, -{71,22,-24}, -{71,22,-23}, -{71,22,-22}, -{71,22,-21}, -{71,22,-20}, -{71,22,-19}, -{71,22,-18}, -{71,22,-17}, -{71,22,-16}, -{71,22,-15}, -{71,22,-14}, -{71,22,-13}, -{71,22,-12}, -{71,22,-11}, -{71,22,-10}, -{71,22,-9}, -{71,22,-8}, -{71,22,-7}, -{71,22,-6}, -{71,22,-5}, -{71,22,-4}, -{71,22,-3}, -{71,22,-2}, -{71,22,-1}, -{71,22,0}, -{71,22,1}, -{71,22,2}, -{71,22,3}, -{71,22,4}, -{71,22,5}, -{71,22,6}, -{71,22,7}, -{71,22,8}, -{71,22,9}, -{71,22,10}, -{71,22,11}, -{71,22,12}, -{71,22,13}, -{71,22,14}, -{71,22,15}, -{71,22,16}, -{71,22,17}, -{71,22,18}, -{71,22,19}, -{71,22,20}, -{71,22,21}, -{71,22,22}, -{71,22,23}, -{71,22,24}, -{71,22,25}, -{71,22,26}, -{71,22,27}, -{71,22,28}, -{71,22,29}, -{71,22,30}, -{71,22,31}, -{71,22,32}, -{71,22,33}, -{71,22,34}, -{71,22,35}, -{71,22,36}, -{71,22,37}, -{71,22,38}, -{71,22,39}, -{71,22,40}, -{71,22,41}, -{71,22,42}, -{71,22,43}, -{71,22,44}, -{71,22,45}, -{71,22,46}, -{71,22,47}, -{71,22,48}, -{71,22,49}, -{71,22,50}, -{71,22,51}, -{71,22,52}, -{71,22,53}, -{71,22,54}, -{71,22,55}, -{71,22,56}, -{71,22,57}, -{71,22,58}, -{71,22,59}, -{71,22,60}, -{71,22,61}, -{71,22,62}, -{71,22,63}, -{71,22,64}, -{71,22,65}, -{71,22,66}, -{71,22,67}, -{71,22,68}, -{71,22,69}, -{71,22,70}, -{71,22,71}, -{71,22,72}, -{71,22,73}, -{71,22,74}, -{71,22,75}, -{71,23,-44}, -{71,23,-43}, -{71,23,-42}, -{71,23,-41}, -{71,23,-40}, -{71,23,-39}, -{71,23,-38}, -{71,23,-37}, -{71,23,-36}, -{71,23,-35}, -{71,23,-34}, -{71,23,-33}, -{71,23,-32}, -{71,23,-31}, -{71,23,-30}, -{71,23,-29}, -{71,23,-28}, -{71,23,-27}, -{71,23,-26}, -{71,23,-25}, -{71,23,-24}, -{71,23,-23}, -{71,23,-22}, -{71,23,-21}, -{71,23,-20}, -{71,23,-19}, -{71,23,-18}, -{71,23,-17}, -{71,23,-16}, -{71,23,-15}, -{71,23,-14}, -{71,23,-13}, -{71,23,-12}, -{71,23,-11}, -{71,23,-10}, -{71,23,-9}, -{71,23,-8}, -{71,23,-7}, -{71,23,-6}, -{71,23,-5}, -{71,23,-4}, -{71,23,-3}, -{71,23,-2}, -{71,23,-1}, -{71,23,0}, -{71,23,1}, -{71,23,2}, -{71,23,3}, -{71,23,4}, -{71,23,5}, -{71,23,6}, -{71,23,7}, -{71,23,8}, -{71,23,9}, -{71,23,10}, -{71,23,11}, -{71,23,12}, -{71,23,13}, -{71,23,14}, -{71,23,15}, -{71,23,16}, -{71,23,17}, -{71,23,18}, -{71,23,19}, -{71,23,20}, -{71,23,21}, -{71,23,22}, -{71,23,23}, -{71,23,24}, -{71,23,25}, -{71,23,26}, -{71,23,27}, -{71,23,28}, -{71,23,29}, -{71,23,30}, -{71,23,31}, -{71,23,32}, -{71,23,33}, -{71,23,34}, -{71,23,35}, -{71,23,36}, -{71,23,37}, -{71,23,38}, -{71,23,39}, -{71,23,40}, -{71,23,41}, -{71,23,42}, -{71,23,43}, -{71,23,44}, -{71,23,45}, -{71,23,46}, -{71,23,47}, -{71,23,48}, -{71,23,49}, -{71,23,50}, -{71,23,51}, -{71,23,52}, -{71,23,53}, -{71,23,54}, -{71,23,55}, -{71,23,56}, -{71,23,57}, -{71,23,58}, -{71,23,59}, -{71,23,60}, -{71,23,61}, -{71,23,62}, -{71,23,63}, -{71,23,64}, -{71,23,65}, -{71,23,66}, -{71,23,67}, -{71,23,68}, -{71,23,69}, -{71,23,70}, -{71,23,71}, -{71,23,72}, -{71,23,73}, -{71,23,74}, -{71,23,75}, -{71,24,-44}, -{71,24,-43}, -{71,24,-42}, -{71,24,-41}, -{71,24,-40}, -{71,24,-39}, -{71,24,-38}, -{71,24,-37}, -{71,24,-36}, -{71,24,-35}, -{71,24,-34}, -{71,24,-33}, -{71,24,-32}, -{71,24,-31}, -{71,24,-30}, -{71,24,-29}, -{71,24,-28}, -{71,24,-27}, -{71,24,-26}, -{71,24,-25}, -{71,24,-24}, -{71,24,-23}, -{71,24,-22}, -{71,24,-21}, -{71,24,-20}, -{71,24,-19}, -{71,24,-18}, -{71,24,-17}, -{71,24,-16}, -{71,24,-15}, -{71,24,-14}, -{71,24,-13}, -{71,24,-12}, -{71,24,-11}, -{71,24,-10}, -{71,24,-9}, -{71,24,-8}, -{71,24,-7}, -{71,24,-6}, -{71,24,-5}, -{71,24,-4}, -{71,24,-3}, -{71,24,-2}, -{71,24,-1}, -{71,24,0}, -{71,24,1}, -{71,24,2}, -{71,24,3}, -{71,24,4}, -{71,24,5}, -{71,24,6}, -{71,24,7}, -{71,24,8}, -{71,24,9}, -{71,24,10}, -{71,24,11}, -{71,24,12}, -{71,24,13}, -{71,24,14}, -{71,24,15}, -{71,24,16}, -{71,24,17}, -{71,24,18}, -{71,24,19}, -{71,24,20}, -{71,24,21}, -{71,24,22}, -{71,24,23}, -{71,24,24}, -{71,24,25}, -{71,24,26}, -{71,24,27}, -{71,24,28}, -{71,24,29}, -{71,24,30}, -{71,24,31}, -{71,24,32}, -{71,24,33}, -{71,24,34}, -{71,24,35}, -{71,24,36}, -{71,24,37}, -{71,24,38}, -{71,24,39}, -{71,24,40}, -{71,24,41}, -{71,24,42}, -{71,24,43}, -{71,24,44}, -{71,24,45}, -{71,24,46}, -{71,24,47}, -{71,24,48}, -{71,24,49}, -{71,24,50}, -{71,24,51}, -{71,24,52}, -{71,24,53}, -{71,24,54}, -{71,24,55}, -{71,24,56}, -{71,24,57}, -{71,24,58}, -{71,24,59}, -{71,24,60}, -{71,24,61}, -{71,24,62}, -{71,24,63}, -{71,24,64}, -{71,24,65}, -{71,24,66}, -{71,24,67}, -{71,24,68}, -{71,24,69}, -{71,24,70}, -{71,24,71}, -{71,24,72}, -{71,24,73}, -{71,24,74}, -{71,24,75}, -{71,25,-44}, -{71,25,-43}, -{71,25,-42}, -{71,25,-41}, -{71,25,-40}, -{71,25,-39}, -{71,25,-38}, -{71,25,-37}, -{71,25,-36}, -{71,25,-35}, -{71,25,-34}, -{71,25,-33}, -{71,25,-32}, -{71,25,-31}, -{71,25,-30}, -{71,25,-29}, -{71,25,-28}, -{71,25,-27}, -{71,25,-26}, -{71,25,-25}, -{71,25,-24}, -{71,25,-23}, -{71,25,-22}, -{71,25,-21}, -{71,25,-20}, -{71,25,-19}, -{71,25,-18}, -{71,25,-17}, -{71,25,-16}, -{71,25,-15}, -{71,25,-14}, -{71,25,-13}, -{71,25,-12}, -{71,25,-11}, -{71,25,-10}, -{71,25,-9}, -{71,25,-8}, -{71,25,-7}, -{71,25,-6}, -{71,25,-5}, -{71,25,-4}, -{71,25,-3}, -{71,25,-2}, -{71,25,-1}, -{71,25,0}, -{71,25,1}, -{71,25,2}, -{71,25,3}, -{71,25,4}, -{71,25,5}, -{71,25,6}, -{71,25,7}, -{71,25,8}, -{71,25,9}, -{71,25,10}, -{71,25,11}, -{71,25,12}, -{71,25,13}, -{71,25,14}, -{71,25,15}, -{71,25,16}, -{71,25,17}, -{71,25,18}, -{71,25,19}, -{71,25,20}, -{71,25,21}, -{71,25,22}, -{71,25,23}, -{71,25,24}, -{71,25,25}, -{71,25,26}, -{71,25,27}, -{71,25,28}, -{71,25,29}, -{71,25,30}, -{71,25,31}, -{71,25,32}, -{71,25,33}, -{71,25,34}, -{71,25,35}, -{71,25,36}, -{71,25,37}, -{71,25,38}, -{71,25,39}, -{71,25,40}, -{71,25,41}, -{71,25,42}, -{71,25,43}, -{71,25,44}, -{71,25,45}, -{71,25,46}, -{71,25,47}, -{71,25,48}, -{71,25,49}, -{71,25,50}, -{71,25,51}, -{71,25,52}, -{71,25,53}, -{71,25,54}, -{71,25,55}, -{71,25,56}, -{71,25,57}, -{71,25,58}, -{71,25,59}, -{71,25,60}, -{71,25,61}, -{71,25,62}, -{71,25,63}, -{71,25,64}, -{71,25,65}, -{71,25,66}, -{71,25,67}, -{71,25,68}, -{71,25,69}, -{71,25,70}, -{71,25,71}, -{71,25,72}, -{71,25,73}, -{71,25,74}, -{71,25,75}, -{71,26,-44}, -{71,26,-43}, -{71,26,-42}, -{71,26,-41}, -{71,26,-40}, -{71,26,-39}, -{71,26,-38}, -{71,26,-37}, -{71,26,-36}, -{71,26,-35}, -{71,26,-34}, -{71,26,-33}, -{71,26,-32}, -{71,26,-31}, -{71,26,-30}, -{71,26,-29}, -{71,26,-28}, -{71,26,-27}, -{71,26,-26}, -{71,26,-25}, -{71,26,-24}, -{71,26,-23}, -{71,26,-22}, -{71,26,-21}, -{71,26,-20}, -{71,26,-19}, -{71,26,-18}, -{71,26,-17}, -{71,26,-16}, -{71,26,-15}, -{71,26,-14}, -{71,26,-13}, -{71,26,-12}, -{71,26,-11}, -{71,26,-10}, -{71,26,-9}, -{71,26,-8}, -{71,26,-7}, -{71,26,-6}, -{71,26,-5}, -{71,26,-4}, -{71,26,-3}, -{71,26,-2}, -{71,26,-1}, -{71,26,0}, -{71,26,1}, -{71,26,2}, -{71,26,3}, -{71,26,4}, -{71,26,5}, -{71,26,6}, -{71,26,7}, -{71,26,8}, -{71,26,9}, -{71,26,10}, -{71,26,11}, -{71,26,12}, -{71,26,13}, -{71,26,14}, -{71,26,15}, -{71,26,16}, -{71,26,17}, -{71,26,18}, -{71,26,19}, -{71,26,20}, -{71,26,21}, -{71,26,22}, -{71,26,23}, -{71,26,24}, -{71,26,25}, -{71,26,26}, -{71,26,27}, -{71,26,28}, -{71,26,29}, -{71,26,30}, -{71,26,31}, -{71,26,32}, -{71,26,33}, -{71,26,34}, -{71,26,35}, -{71,26,36}, -{71,26,37}, -{71,26,38}, -{71,26,39}, -{71,26,40}, -{71,26,41}, -{71,26,42}, -{71,26,43}, -{71,26,44}, -{71,26,45}, -{71,26,46}, -{71,26,47}, -{71,26,48}, -{71,26,49}, -{71,26,50}, -{71,26,51}, -{71,26,52}, -{71,26,53}, -{71,26,54}, -{71,26,55}, -{71,26,56}, -{71,26,57}, -{71,26,58}, -{71,26,59}, -{71,26,60}, -{71,26,61}, -{71,26,62}, -{71,26,63}, -{71,26,64}, -{71,26,65}, -{71,26,66}, -{71,26,67}, -{71,26,68}, -{71,26,69}, -{71,26,70}, -{71,26,71}, -{71,26,72}, -{71,26,73}, -{71,26,74}, -{71,26,75}, -{71,27,-44}, -{71,27,-43}, -{71,27,-42}, -{71,27,-41}, -{71,27,-40}, -{71,27,-39}, -{71,27,-38}, -{71,27,-37}, -{71,27,-36}, -{71,27,-35}, -{71,27,-34}, -{71,27,-33}, -{71,27,-32}, -{71,27,-31}, -{71,27,-30}, -{71,27,-29}, -{71,27,-28}, -{71,27,-27}, -{71,27,-26}, -{71,27,-25}, -{71,27,-24}, -{71,27,-23}, -{71,27,-22}, -{71,27,-21}, -{71,27,-20}, -{71,27,-19}, -{71,27,-18}, -{71,27,-17}, -{71,27,-16}, -{71,27,-15}, -{71,27,-14}, -{71,27,-13}, -{71,27,-12}, -{71,27,-11}, -{71,27,-10}, -{71,27,-9}, -{71,27,-8}, -{71,27,-7}, -{71,27,-6}, -{71,27,-5}, -{71,27,-4}, -{71,27,-3}, -{71,27,-2}, -{71,27,-1}, -{71,27,0}, -{71,27,1}, -{71,27,2}, -{71,27,3}, -{71,27,4}, -{71,27,5}, -{71,27,6}, -{71,27,7}, -{71,27,8}, -{71,27,9}, -{71,27,10}, -{71,27,11}, -{71,27,12}, -{71,27,13}, -{71,27,14}, -{71,27,15}, -{71,27,16}, -{71,27,17}, -{71,27,18}, -{71,27,19}, -{71,27,20}, -{71,27,21}, -{71,27,22}, -{71,27,23}, -{71,27,24}, -{71,27,25}, -{71,27,26}, -{71,27,27}, -{71,27,28}, -{71,27,29}, -{71,27,30}, -{71,27,31}, -{71,27,32}, -{71,27,33}, -{71,27,34}, -{71,27,35}, -{71,27,36}, -{71,27,37}, -{71,27,38}, -{71,27,39}, -{71,27,40}, -{71,27,41}, -{71,27,42}, -{71,27,43}, -{71,27,44}, -{71,27,45}, -{71,27,46}, -{71,27,47}, -{71,27,48}, -{71,27,49}, -{71,27,50}, -{71,27,51}, -{71,27,52}, -{71,27,53}, -{71,27,54}, -{71,27,55}, -{71,27,56}, -{71,27,57}, -{71,27,58}, -{71,27,59}, -{71,27,60}, -{71,27,61}, -{71,27,62}, -{71,27,63}, -{71,27,64}, -{71,27,65}, -{71,27,66}, -{71,27,67}, -{71,27,68}, -{71,27,69}, -{71,27,70}, -{71,27,71}, -{71,27,72}, -{71,27,73}, -{71,27,74}, -{71,27,75}, -{71,27,76}, -{71,28,-44}, -{71,28,-43}, -{71,28,-42}, -{71,28,-41}, -{71,28,-40}, -{71,28,-39}, -{71,28,-38}, -{71,28,-37}, -{71,28,-36}, -{71,28,-35}, -{71,28,-34}, -{71,28,-33}, -{71,28,-32}, -{71,28,-31}, -{71,28,-30}, -{71,28,-29}, -{71,28,-28}, -{71,28,-27}, -{71,28,-26}, -{71,28,-25}, -{71,28,-24}, -{71,28,-23}, -{71,28,-22}, -{71,28,-21}, -{71,28,-20}, -{71,28,-19}, -{71,28,-18}, -{71,28,-17}, -{71,28,-16}, -{71,28,-15}, -{71,28,-14}, -{71,28,-13}, -{71,28,-12}, -{71,28,-11}, -{71,28,-10}, -{71,28,-9}, -{71,28,-8}, -{71,28,-7}, -{71,28,-6}, -{71,28,-5}, -{71,28,-4}, -{71,28,-3}, -{71,28,-2}, -{71,28,-1}, -{71,28,0}, -{71,28,1}, -{71,28,2}, -{71,28,3}, -{71,28,4}, -{71,28,5}, -{71,28,6}, -{71,28,7}, -{71,28,8}, -{71,28,9}, -{71,28,10}, -{71,28,11}, -{71,28,12}, -{71,28,13}, -{71,28,14}, -{71,28,15}, -{71,28,16}, -{71,28,17}, -{71,28,18}, -{71,28,19}, -{71,28,20}, -{71,28,21}, -{71,28,22}, -{71,28,23}, -{71,28,24}, -{71,28,25}, -{71,28,26}, -{71,28,27}, -{71,28,28}, -{71,28,29}, -{71,28,30}, -{71,28,31}, -{71,28,32}, -{71,28,33}, -{71,28,34}, -{71,28,35}, -{71,28,36}, -{71,28,37}, -{71,28,38}, -{71,28,39}, -{71,28,40}, -{71,28,41}, -{71,28,42}, -{71,28,43}, -{71,28,44}, -{71,28,45}, -{71,28,46}, -{71,28,47}, -{71,28,48}, -{71,28,49}, -{71,28,50}, -{71,28,51}, -{71,28,52}, -{71,28,53}, -{71,28,54}, -{71,28,55}, -{71,28,56}, -{71,28,57}, -{71,28,58}, -{71,28,59}, -{71,28,60}, -{71,28,61}, -{71,28,62}, -{71,28,63}, -{71,28,64}, -{71,28,65}, -{71,28,66}, -{71,28,67}, -{71,28,68}, -{71,28,69}, -{71,28,70}, -{71,28,71}, -{71,28,72}, -{71,28,73}, -{71,28,74}, -{71,28,75}, -{71,28,76}, -{71,29,-44}, -{71,29,-43}, -{71,29,-42}, -{71,29,-41}, -{71,29,-40}, -{71,29,-39}, -{71,29,-38}, -{71,29,-37}, -{71,29,-36}, -{71,29,-35}, -{71,29,-34}, -{71,29,-33}, -{71,29,-32}, -{71,29,-31}, -{71,29,-30}, -{71,29,-29}, -{71,29,-28}, -{71,29,-27}, -{71,29,-26}, -{71,29,-25}, -{71,29,-24}, -{71,29,-23}, -{71,29,-22}, -{71,29,-21}, -{71,29,-20}, -{71,29,-19}, -{71,29,-18}, -{71,29,-17}, -{71,29,-16}, -{71,29,-15}, -{71,29,-14}, -{71,29,-13}, -{71,29,-12}, -{71,29,-11}, -{71,29,-10}, -{71,29,-9}, -{71,29,-8}, -{71,29,-7}, -{71,29,-6}, -{71,29,-5}, -{71,29,-4}, -{71,29,-3}, -{71,29,-2}, -{71,29,-1}, -{71,29,0}, -{71,29,1}, -{71,29,2}, -{71,29,3}, -{71,29,4}, -{71,29,5}, -{71,29,6}, -{71,29,7}, -{71,29,8}, -{71,29,9}, -{71,29,10}, -{71,29,11}, -{71,29,12}, -{71,29,13}, -{71,29,14}, -{71,29,15}, -{71,29,16}, -{71,29,17}, -{71,29,18}, -{71,29,19}, -{71,29,20}, -{71,29,21}, -{71,29,22}, -{71,29,23}, -{71,29,24}, -{71,29,25}, -{71,29,26}, -{71,29,27}, -{71,29,28}, -{71,29,29}, -{71,29,30}, -{71,29,31}, -{71,29,32}, -{71,29,33}, -{71,29,34}, -{71,29,35}, -{71,29,36}, -{71,29,37}, -{71,29,38}, -{71,29,39}, -{71,29,40}, -{71,29,41}, -{71,29,42}, -{71,29,43}, -{71,29,44}, -{71,29,45}, -{71,29,46}, -{71,29,47}, -{71,29,48}, -{71,29,49}, -{71,29,50}, -{71,29,51}, -{71,29,52}, -{71,29,53}, -{71,29,54}, -{71,29,55}, -{71,29,56}, -{71,29,57}, -{71,29,58}, -{71,29,59}, -{71,29,60}, -{71,29,61}, -{71,29,62}, -{71,29,63}, -{71,29,64}, -{71,29,65}, -{71,29,66}, -{71,29,67}, -{71,29,68}, -{71,29,69}, -{71,29,70}, -{71,29,71}, -{71,29,72}, -{71,29,73}, -{71,29,74}, -{71,29,75}, -{71,29,76}, -{71,30,-44}, -{71,30,-43}, -{71,30,-42}, -{71,30,-41}, -{71,30,-40}, -{71,30,-39}, -{71,30,-38}, -{71,30,-37}, -{71,30,-36}, -{71,30,-35}, -{71,30,-34}, -{71,30,-33}, -{71,30,-32}, -{71,30,-31}, -{71,30,-30}, -{71,30,-29}, -{71,30,-28}, -{71,30,-27}, -{71,30,-26}, -{71,30,-25}, -{71,30,-24}, -{71,30,-23}, -{71,30,-22}, -{71,30,-21}, -{71,30,-20}, -{71,30,-19}, -{71,30,-18}, -{71,30,-17}, -{71,30,-16}, -{71,30,-15}, -{71,30,-14}, -{71,30,-13}, -{71,30,-12}, -{71,30,-11}, -{71,30,-10}, -{71,30,-9}, -{71,30,-8}, -{71,30,-7}, -{71,30,-6}, -{71,30,-5}, -{71,30,-4}, -{71,30,-3}, -{71,30,-2}, -{71,30,-1}, -{71,30,0}, -{71,30,1}, -{71,30,2}, -{71,30,3}, -{71,30,4}, -{71,30,5}, -{71,30,6}, -{71,30,7}, -{71,30,8}, -{71,30,9}, -{71,30,10}, -{71,30,11}, -{71,30,12}, -{71,30,13}, -{71,30,14}, -{71,30,15}, -{71,30,16}, -{71,30,17}, -{71,30,18}, -{71,30,19}, -{71,30,20}, -{71,30,21}, -{71,30,22}, -{71,30,23}, -{71,30,24}, -{71,30,25}, -{71,30,26}, -{71,30,27}, -{71,30,28}, -{71,30,29}, -{71,30,30}, -{71,30,31}, -{71,30,32}, -{71,30,33}, -{71,30,34}, -{71,30,35}, -{71,30,36}, -{71,30,37}, -{71,30,38}, -{71,30,39}, -{71,30,40}, -{71,30,41}, -{71,30,42}, -{71,30,43}, -{71,30,44}, -{71,30,45}, -{71,30,46}, -{71,30,47}, -{71,30,48}, -{71,30,49}, -{71,30,50}, -{71,30,51}, -{71,30,52}, -{71,30,53}, -{71,30,54}, -{71,30,55}, -{71,30,56}, -{71,30,57}, -{71,30,58}, -{71,30,59}, -{71,30,60}, -{71,30,61}, -{71,30,62}, -{71,30,63}, -{71,30,64}, -{71,30,65}, -{71,30,66}, -{71,30,67}, -{71,30,68}, -{71,30,69}, -{71,30,70}, -{71,30,71}, -{71,30,72}, -{71,30,73}, -{71,30,74}, -{71,30,75}, -{71,30,76}, -{71,31,-44}, -{71,31,-43}, -{71,31,-42}, -{71,31,-41}, -{71,31,-40}, -{71,31,-39}, -{71,31,-38}, -{71,31,-37}, -{71,31,-36}, -{71,31,-35}, -{71,31,-34}, -{71,31,-33}, -{71,31,-32}, -{71,31,-31}, -{71,31,-30}, -{71,31,-29}, -{71,31,-28}, -{71,31,-27}, -{71,31,-26}, -{71,31,-25}, -{71,31,-24}, -{71,31,-23}, -{71,31,-22}, -{71,31,-21}, -{71,31,-20}, -{71,31,-19}, -{71,31,-18}, -{71,31,-17}, -{71,31,-16}, -{71,31,-15}, -{71,31,-14}, -{71,31,-13}, -{71,31,-12}, -{71,31,-11}, -{71,31,-10}, -{71,31,-9}, -{71,31,-8}, -{71,31,-7}, -{71,31,-6}, -{71,31,-5}, -{71,31,-4}, -{71,31,-3}, -{71,31,-2}, -{71,31,-1}, -{71,31,0}, -{71,31,1}, -{71,31,2}, -{71,31,3}, -{71,31,4}, -{71,31,5}, -{71,31,6}, -{71,31,7}, -{71,31,8}, -{71,31,9}, -{71,31,10}, -{71,31,11}, -{71,31,12}, -{71,31,13}, -{71,31,14}, -{71,31,15}, -{71,31,16}, -{71,31,17}, -{71,31,18}, -{71,31,19}, -{71,31,20}, -{71,31,21}, -{71,31,22}, -{71,31,23}, -{71,31,24}, -{71,31,25}, -{71,31,26}, -{71,31,27}, -{71,31,28}, -{71,31,29}, -{71,31,30}, -{71,31,31}, -{71,31,32}, -{71,31,33}, -{71,31,34}, -{71,31,35}, -{71,31,36}, -{71,31,37}, -{71,31,38}, -{71,31,39}, -{71,31,40}, -{71,31,41}, -{71,31,42}, -{71,31,43}, -{71,31,44}, -{71,31,45}, -{71,31,46}, -{71,31,47}, -{71,31,48}, -{71,31,49}, -{71,31,50}, -{71,31,51}, -{71,31,52}, -{71,31,53}, -{71,31,54}, -{71,31,55}, -{71,31,56}, -{71,31,57}, -{71,31,58}, -{71,31,59}, -{71,31,60}, -{71,31,61}, -{71,31,62}, -{71,31,63}, -{71,31,64}, -{71,31,65}, -{71,31,66}, -{71,31,67}, -{71,31,68}, -{71,31,69}, -{71,31,70}, -{71,31,71}, -{71,31,72}, -{71,31,73}, -{71,31,74}, -{71,31,75}, -{71,31,76}, -{71,32,-44}, -{71,32,-43}, -{71,32,-42}, -{71,32,-41}, -{71,32,-40}, -{71,32,-39}, -{71,32,-38}, -{71,32,-37}, -{71,32,-36}, -{71,32,-35}, -{71,32,-34}, -{71,32,-33}, -{71,32,-32}, -{71,32,-31}, -{71,32,-30}, -{71,32,-29}, -{71,32,-28}, -{71,32,-27}, -{71,32,-26}, -{71,32,-25}, -{71,32,-24}, -{71,32,-23}, -{71,32,-22}, -{71,32,-21}, -{71,32,-20}, -{71,32,-19}, -{71,32,-18}, -{71,32,-17}, -{71,32,-16}, -{71,32,-15}, -{71,32,-14}, -{71,32,-13}, -{71,32,-12}, -{71,32,-11}, -{71,32,-10}, -{71,32,-9}, -{71,32,-8}, -{71,32,-7}, -{71,32,-6}, -{71,32,-5}, -{71,32,-4}, -{71,32,-3}, -{71,32,-2}, -{71,32,-1}, -{71,32,0}, -{71,32,1}, -{71,32,2}, -{71,32,3}, -{71,32,4}, -{71,32,5}, -{71,32,6}, -{71,32,7}, -{71,32,8}, -{71,32,9}, -{71,32,10}, -{71,32,11}, -{71,32,12}, -{71,32,13}, -{71,32,14}, -{71,32,15}, -{71,32,16}, -{71,32,17}, -{71,32,18}, -{71,32,19}, -{71,32,20}, -{71,32,21}, -{71,32,22}, -{71,32,23}, -{71,32,24}, -{71,32,25}, -{71,32,26}, -{71,32,27}, -{71,32,28}, -{71,32,29}, -{71,32,30}, -{71,32,31}, -{71,32,32}, -{71,32,33}, -{71,32,34}, -{71,32,35}, -{71,32,36}, -{71,32,37}, -{71,32,38}, -{71,32,39}, -{71,32,40}, -{71,32,41}, -{71,32,42}, -{71,32,43}, -{71,32,44}, -{71,32,45}, -{71,32,46}, -{71,32,47}, -{71,32,48}, -{71,32,49}, -{71,32,50}, -{71,32,51}, -{71,32,52}, -{71,32,53}, -{71,32,54}, -{71,32,55}, -{71,32,56}, -{71,32,57}, -{71,32,58}, -{71,32,59}, -{71,32,60}, -{71,32,61}, -{71,32,62}, -{71,32,63}, -{71,32,64}, -{71,32,65}, -{71,32,66}, -{71,32,67}, -{71,32,68}, -{71,32,69}, -{71,32,70}, -{71,32,71}, -{71,32,72}, -{71,32,73}, -{71,32,74}, -{71,32,75}, -{71,32,76}, -{71,33,-44}, -{71,33,-43}, -{71,33,-42}, -{71,33,-41}, -{71,33,-40}, -{71,33,-39}, -{71,33,-38}, -{71,33,-37}, -{71,33,-36}, -{71,33,-35}, -{71,33,-34}, -{71,33,-33}, -{71,33,-32}, -{71,33,-31}, -{71,33,-30}, -{71,33,-29}, -{71,33,-28}, -{71,33,-27}, -{71,33,-26}, -{71,33,-25}, -{71,33,-24}, -{71,33,-23}, -{71,33,-22}, -{71,33,-21}, -{71,33,-20}, -{71,33,-19}, -{71,33,-18}, -{71,33,-17}, -{71,33,-16}, -{71,33,-15}, -{71,33,-14}, -{71,33,-13}, -{71,33,-12}, -{71,33,-11}, -{71,33,-10}, -{71,33,-9}, -{71,33,-8}, -{71,33,-7}, -{71,33,-6}, -{71,33,-5}, -{71,33,-4}, -{71,33,-3}, -{71,33,-2}, -{71,33,-1}, -{71,33,0}, -{71,33,1}, -{71,33,2}, -{71,33,3}, -{71,33,4}, -{71,33,5}, -{71,33,6}, -{71,33,7}, -{71,33,8}, -{71,33,9}, -{71,33,10}, -{71,33,11}, -{71,33,12}, -{71,33,13}, -{71,33,14}, -{71,33,15}, -{71,33,16}, -{71,33,17}, -{71,33,18}, -{71,33,19}, -{71,33,20}, -{71,33,21}, -{71,33,22}, -{71,33,23}, -{71,33,24}, -{71,33,25}, -{71,33,26}, -{71,33,27}, -{71,33,28}, -{71,33,29}, -{71,33,30}, -{71,33,31}, -{71,33,32}, -{71,33,33}, -{71,33,34}, -{71,33,35}, -{71,33,36}, -{71,33,37}, -{71,33,38}, -{71,33,39}, -{71,33,40}, -{71,33,41}, -{71,33,42}, -{71,33,43}, -{71,33,44}, -{71,33,45}, -{71,33,46}, -{71,33,47}, -{71,33,48}, -{71,33,49}, -{71,33,50}, -{71,33,51}, -{71,33,52}, -{71,33,53}, -{71,33,54}, -{71,33,55}, -{71,33,56}, -{71,33,57}, -{71,33,58}, -{71,33,59}, -{71,33,60}, -{71,33,61}, -{71,33,62}, -{71,33,63}, -{71,33,64}, -{71,33,65}, -{71,33,66}, -{71,33,67}, -{71,33,68}, -{71,33,69}, -{71,33,70}, -{71,33,71}, -{71,33,72}, -{71,33,73}, -{71,33,74}, -{71,33,75}, -{71,33,76}, -{71,34,-44}, -{71,34,-43}, -{71,34,-42}, -{71,34,-41}, -{71,34,-40}, -{71,34,-39}, -{71,34,-38}, -{71,34,-37}, -{71,34,-36}, -{71,34,-35}, -{71,34,-34}, -{71,34,-33}, -{71,34,-32}, -{71,34,-31}, -{71,34,-30}, -{71,34,-29}, -{71,34,-28}, -{71,34,-27}, -{71,34,-26}, -{71,34,-25}, -{71,34,-24}, -{71,34,-23}, -{71,34,-22}, -{71,34,-21}, -{71,34,-20}, -{71,34,-19}, -{71,34,-18}, -{71,34,-17}, -{71,34,-16}, -{71,34,-15}, -{71,34,-14}, -{71,34,-13}, -{71,34,-12}, -{71,34,-11}, -{71,34,-10}, -{71,34,-9}, -{71,34,-8}, -{71,34,-7}, -{71,34,-6}, -{71,34,-5}, -{71,34,-4}, -{71,34,-3}, -{71,34,-2}, -{71,34,-1}, -{71,34,0}, -{71,34,1}, -{71,34,2}, -{71,34,3}, -{71,34,4}, -{71,34,5}, -{71,34,6}, -{71,34,7}, -{71,34,8}, -{71,34,9}, -{71,34,10}, -{71,34,11}, -{71,34,12}, -{71,34,13}, -{71,34,14}, -{71,34,15}, -{71,34,16}, -{71,34,17}, -{71,34,18}, -{71,34,19}, -{71,34,20}, -{71,34,21}, -{71,34,22}, -{71,34,23}, -{71,34,24}, -{71,34,25}, -{71,34,26}, -{71,34,27}, -{71,34,28}, -{71,34,29}, -{71,34,30}, -{71,34,31}, -{71,34,32}, -{71,34,33}, -{71,34,34}, -{71,34,35}, -{71,34,36}, -{71,34,37}, -{71,34,38}, -{71,34,39}, -{71,34,40}, -{71,34,41}, -{71,34,42}, -{71,34,43}, -{71,34,44}, -{71,34,45}, -{71,34,46}, -{71,34,47}, -{71,34,48}, -{71,34,49}, -{71,34,50}, -{71,34,51}, -{71,34,52}, -{71,34,53}, -{71,34,54}, -{71,34,55}, -{71,34,56}, -{71,34,57}, -{71,34,58}, -{71,34,59}, -{71,34,60}, -{71,34,61}, -{71,34,62}, -{71,34,63}, -{71,34,64}, -{71,34,65}, -{71,34,66}, -{71,34,67}, -{71,34,68}, -{71,34,69}, -{71,35,-44}, -{71,35,-43}, -{71,35,-42}, -{71,35,-41}, -{71,35,-40}, -{71,35,-39}, -{71,35,-38}, -{71,35,-37}, -{71,35,-36}, -{71,35,-35}, -{71,35,-34}, -{71,35,-33}, -{71,35,-32}, -{71,35,-31}, -{71,35,-30}, -{71,35,-29}, -{71,35,-28}, -{71,35,-27}, -{71,35,-26}, -{71,35,-25}, -{71,35,-24}, -{71,35,-23}, -{71,35,-22}, -{71,35,-21}, -{71,35,-20}, -{71,35,-19}, -{71,35,-18}, -{71,35,-17}, -{71,35,-16}, -{71,35,-15}, -{71,35,-14}, -{71,35,-13}, -{71,35,-12}, -{71,35,-11}, -{71,35,-10}, -{71,35,-9}, -{71,35,-8}, -{71,35,-7}, -{71,35,-6}, -{71,35,-5}, -{71,35,-4}, -{71,35,-3}, -{71,35,-2}, -{71,35,-1}, -{71,35,0}, -{71,35,1}, -{71,35,2}, -{71,35,3}, -{71,35,4}, -{71,35,5}, -{71,35,6}, -{71,35,7}, -{71,35,8}, -{71,35,9}, -{71,35,10}, -{71,35,11}, -{71,35,12}, -{71,35,13}, -{71,35,14}, -{71,35,15}, -{71,35,16}, -{71,35,17}, -{71,35,18}, -{71,35,19}, -{71,35,20}, -{71,35,21}, -{71,35,22}, -{71,35,23}, -{71,35,24}, -{71,35,25}, -{71,35,26}, -{71,35,27}, -{71,35,28}, -{71,35,29}, -{71,35,30}, -{71,35,31}, -{71,35,32}, -{71,35,33}, -{71,35,34}, -{71,35,35}, -{71,35,36}, -{71,35,37}, -{71,35,38}, -{71,35,39}, -{71,35,40}, -{71,35,41}, -{71,35,42}, -{71,35,43}, -{71,35,44}, -{71,35,45}, -{71,35,46}, -{71,35,47}, -{71,35,48}, -{71,35,49}, -{71,35,50}, -{71,35,51}, -{71,35,52}, -{71,35,53}, -{71,35,54}, -{71,35,55}, -{71,35,56}, -{71,35,57}, -{71,35,58}, -{71,35,59}, -{71,35,60}, -{71,35,61}, -{71,36,-44}, -{71,36,-43}, -{71,36,-42}, -{71,36,-41}, -{71,36,-40}, -{71,36,-39}, -{71,36,-38}, -{71,36,-37}, -{71,36,-36}, -{71,36,-35}, -{71,36,-34}, -{71,36,-33}, -{71,36,-32}, -{71,36,-31}, -{71,36,-30}, -{71,36,-29}, -{71,36,-28}, -{71,36,-27}, -{71,36,-26}, -{71,36,-25}, -{71,36,-24}, -{71,36,-23}, -{71,36,-22}, -{71,36,-21}, -{71,36,-20}, -{71,36,-19}, -{71,36,-18}, -{71,36,-17}, -{71,36,-16}, -{71,36,-15}, -{71,36,-14}, -{71,36,-13}, -{71,36,-12}, -{71,36,-11}, -{71,36,-10}, -{71,36,-9}, -{71,36,-8}, -{71,36,-7}, -{71,36,-6}, -{71,36,-5}, -{71,36,-4}, -{71,36,-3}, -{71,36,-2}, -{71,36,-1}, -{71,36,0}, -{71,36,1}, -{71,36,2}, -{71,36,3}, -{71,36,4}, -{71,36,5}, -{71,36,6}, -{71,36,7}, -{71,36,8}, -{71,36,9}, -{71,36,10}, -{71,36,11}, -{71,36,12}, -{71,36,13}, -{71,36,14}, -{71,36,15}, -{71,36,16}, -{71,36,17}, -{71,36,18}, -{71,36,19}, -{71,36,20}, -{71,36,21}, -{71,36,22}, -{71,36,23}, -{71,36,24}, -{71,36,25}, -{71,36,26}, -{71,36,27}, -{71,36,28}, -{71,36,29}, -{71,36,30}, -{71,36,31}, -{71,36,32}, -{71,36,33}, -{71,36,34}, -{71,36,35}, -{71,36,36}, -{71,36,37}, -{71,36,38}, -{71,36,39}, -{71,36,40}, -{71,36,41}, -{71,36,42}, -{71,36,43}, -{71,36,44}, -{71,36,45}, -{71,36,46}, -{71,36,47}, -{71,36,48}, -{71,36,49}, -{71,36,50}, -{71,36,51}, -{71,36,52}, -{71,36,53}, -{71,36,54}, -{71,37,-44}, -{71,37,-43}, -{71,37,-42}, -{71,37,-41}, -{71,37,-40}, -{71,37,-39}, -{71,37,-38}, -{71,37,-37}, -{71,37,-36}, -{71,37,-35}, -{71,37,-34}, -{71,37,-33}, -{71,37,-32}, -{71,37,-31}, -{71,37,-30}, -{71,37,-29}, -{71,37,-28}, -{71,37,-27}, -{71,37,-26}, -{71,37,-25}, -{71,37,-24}, -{71,37,-23}, -{71,37,-22}, -{71,37,-21}, -{71,37,-20}, -{71,37,-19}, -{71,37,-18}, -{71,37,-17}, -{71,37,-16}, -{71,37,-15}, -{71,37,-14}, -{71,37,-13}, -{71,37,-12}, -{71,37,-11}, -{71,37,-10}, -{71,37,-9}, -{71,37,-8}, -{71,37,-7}, -{71,37,-6}, -{71,37,-5}, -{71,37,-4}, -{71,37,-3}, -{71,37,-2}, -{71,37,-1}, -{71,37,0}, -{71,37,1}, -{71,37,2}, -{71,37,3}, -{71,37,4}, -{71,37,5}, -{71,37,6}, -{71,37,7}, -{71,37,8}, -{71,37,9}, -{71,37,10}, -{71,37,11}, -{71,37,12}, -{71,37,13}, -{71,37,14}, -{71,37,15}, -{71,37,16}, -{71,37,17}, -{71,37,18}, -{71,37,19}, -{71,37,20}, -{71,37,21}, -{71,37,22}, -{71,37,23}, -{71,37,24}, -{71,37,25}, -{71,37,26}, -{71,37,27}, -{71,37,28}, -{71,37,29}, -{71,37,30}, -{71,37,31}, -{71,37,32}, -{71,37,33}, -{71,37,34}, -{71,37,35}, -{71,37,36}, -{71,37,37}, -{71,37,38}, -{71,37,39}, -{71,37,40}, -{71,37,41}, -{71,37,42}, -{71,37,43}, -{71,37,44}, -{71,37,45}, -{71,37,46}, -{71,37,47}, -{71,38,-44}, -{71,38,-43}, -{71,38,-42}, -{71,38,-41}, -{71,38,-40}, -{71,38,-39}, -{71,38,-38}, -{71,38,-37}, -{71,38,-36}, -{71,38,-35}, -{71,38,-34}, -{71,38,-33}, -{71,38,-32}, -{71,38,-31}, -{71,38,-30}, -{71,38,-29}, -{71,38,-28}, -{71,38,-27}, -{71,38,-26}, -{71,38,-25}, -{71,38,-24}, -{71,38,-23}, -{71,38,-22}, -{71,38,-21}, -{71,38,-20}, -{71,38,-19}, -{71,38,-18}, -{71,38,-17}, -{71,38,-16}, -{71,38,-15}, -{71,38,-14}, -{71,38,-13}, -{71,38,-12}, -{71,38,-11}, -{71,38,-10}, -{71,38,-9}, -{71,38,-8}, -{71,38,-7}, -{71,38,-6}, -{71,38,-5}, -{71,38,-4}, -{71,38,-3}, -{71,38,-2}, -{71,38,-1}, -{71,38,0}, -{71,38,1}, -{71,38,2}, -{71,38,3}, -{71,38,4}, -{71,38,5}, -{71,38,6}, -{71,38,7}, -{71,38,8}, -{71,38,9}, -{71,38,10}, -{71,38,11}, -{71,38,12}, -{71,38,13}, -{71,38,14}, -{71,38,15}, -{71,38,16}, -{71,38,17}, -{71,38,18}, -{71,38,19}, -{71,38,20}, -{71,38,21}, -{71,38,22}, -{71,38,23}, -{71,38,24}, -{71,38,25}, -{71,38,26}, -{71,38,27}, -{71,38,28}, -{71,38,29}, -{71,38,30}, -{71,38,31}, -{71,38,32}, -{71,38,33}, -{71,38,34}, -{71,38,35}, -{71,38,36}, -{71,38,37}, -{71,38,38}, -{71,38,39}, -{71,38,40}, -{71,38,41}, -{71,38,42}, -{71,39,-44}, -{71,39,-43}, -{71,39,-42}, -{71,39,-41}, -{71,39,-40}, -{71,39,-39}, -{71,39,-38}, -{71,39,-37}, -{71,39,-36}, -{71,39,-35}, -{71,39,-34}, -{71,39,-33}, -{71,39,-32}, -{71,39,-31}, -{71,39,-30}, -{71,39,-29}, -{71,39,-28}, -{71,39,-27}, -{71,39,-26}, -{71,39,-25}, -{71,39,-24}, -{71,39,-23}, -{71,39,-22}, -{71,39,-21}, -{71,39,-20}, -{71,39,-19}, -{71,39,-18}, -{71,39,-17}, -{71,39,-16}, -{71,39,-15}, -{71,39,-14}, -{71,39,-13}, -{71,39,-12}, -{71,39,-11}, -{71,39,-10}, -{71,39,-9}, -{71,39,-8}, -{71,39,-7}, -{71,39,-6}, -{71,39,-5}, -{71,39,-4}, -{71,39,-3}, -{71,39,-2}, -{71,39,-1}, -{71,39,0}, -{71,39,1}, -{71,39,2}, -{71,39,3}, -{71,39,4}, -{71,39,5}, -{71,39,6}, -{71,39,7}, -{71,39,8}, -{71,39,9}, -{71,39,10}, -{71,39,11}, -{71,39,12}, -{71,39,13}, -{71,39,14}, -{71,39,15}, -{71,39,16}, -{71,39,17}, -{71,39,18}, -{71,39,19}, -{71,39,20}, -{71,39,21}, -{71,39,22}, -{71,39,23}, -{71,39,24}, -{71,39,25}, -{71,39,26}, -{71,39,27}, -{71,39,28}, -{71,39,29}, -{71,39,30}, -{71,39,31}, -{71,39,32}, -{71,39,33}, -{71,39,34}, -{71,39,35}, -{71,39,36}, -{71,39,37}, -{71,40,-44}, -{71,40,-43}, -{71,40,-42}, -{71,40,-41}, -{71,40,-40}, -{71,40,-39}, -{71,40,-38}, -{71,40,-37}, -{71,40,-36}, -{71,40,-35}, -{71,40,-34}, -{71,40,-33}, -{71,40,-32}, -{71,40,-31}, -{71,40,-30}, -{71,40,-29}, -{71,40,-28}, -{71,40,-27}, -{71,40,-26}, -{71,40,-25}, -{71,40,-24}, -{71,40,-23}, -{71,40,-22}, -{71,40,-21}, -{71,40,-20}, -{71,40,-19}, -{71,40,-18}, -{71,40,-17}, -{71,40,-16}, -{71,40,-15}, -{71,40,-14}, -{71,40,-13}, -{71,40,-12}, -{71,40,-11}, -{71,40,-10}, -{71,40,-9}, -{71,40,-8}, -{71,40,-7}, -{71,40,-6}, -{71,40,-5}, -{71,40,-4}, -{71,40,-3}, -{71,40,-2}, -{71,40,-1}, -{71,40,0}, -{71,40,1}, -{71,40,2}, -{71,40,3}, -{71,40,4}, -{71,40,5}, -{71,40,6}, -{71,40,7}, -{71,40,8}, -{71,40,9}, -{71,40,10}, -{71,40,11}, -{71,40,12}, -{71,40,13}, -{71,40,14}, -{71,40,15}, -{71,40,16}, -{71,40,17}, -{71,40,18}, -{71,40,19}, -{71,40,20}, -{71,40,21}, -{71,40,22}, -{71,40,23}, -{71,40,24}, -{71,40,25}, -{71,40,26}, -{71,40,27}, -{71,40,28}, -{71,40,29}, -{71,40,30}, -{71,40,31}, -{71,40,32}, -{71,41,-44}, -{71,41,-43}, -{71,41,-42}, -{71,41,-41}, -{71,41,-40}, -{71,41,-39}, -{71,41,-38}, -{71,41,-37}, -{71,41,-36}, -{71,41,-35}, -{71,41,-34}, -{71,41,-33}, -{71,41,-32}, -{71,41,-31}, -{71,41,-30}, -{71,41,-29}, -{71,41,-28}, -{71,41,-27}, -{71,41,-26}, -{71,41,-25}, -{71,41,-24}, -{71,41,-23}, -{71,41,-22}, -{71,41,-21}, -{71,41,-20}, -{71,41,-19}, -{71,41,-18}, -{71,41,-17}, -{71,41,-16}, -{71,41,-15}, -{71,41,-14}, -{71,41,-13}, -{71,41,-12}, -{71,41,-11}, -{71,41,-10}, -{71,41,-9}, -{71,41,-8}, -{71,41,-7}, -{71,41,-6}, -{71,41,-5}, -{71,41,-4}, -{71,41,-3}, -{71,41,-2}, -{71,41,-1}, -{71,41,0}, -{71,41,1}, -{71,41,2}, -{71,41,3}, -{71,41,4}, -{71,41,5}, -{71,41,6}, -{71,41,7}, -{71,41,8}, -{71,41,9}, -{71,41,10}, -{71,41,11}, -{71,41,12}, -{71,41,13}, -{71,41,14}, -{71,41,15}, -{71,41,16}, -{71,41,17}, -{71,41,18}, -{71,41,19}, -{71,41,20}, -{71,41,21}, -{71,41,22}, -{71,41,23}, -{71,41,24}, -{71,41,25}, -{71,41,26}, -{71,41,27}, -{71,41,28}, -{71,42,-44}, -{71,42,-43}, -{71,42,-42}, -{71,42,-41}, -{71,42,-40}, -{71,42,-39}, -{71,42,-38}, -{71,42,-37}, -{71,42,-36}, -{71,42,-35}, -{71,42,-34}, -{71,42,-33}, -{71,42,-32}, -{71,42,-31}, -{71,42,-30}, -{71,42,-29}, -{71,42,-28}, -{71,42,-27}, -{71,42,-26}, -{71,42,-25}, -{71,42,-24}, -{71,42,-23}, -{71,42,-22}, -{71,42,-21}, -{71,42,-20}, -{71,42,-19}, -{71,42,-18}, -{71,42,-17}, -{71,42,-16}, -{71,42,-15}, -{71,42,-14}, -{71,42,-13}, -{71,42,-12}, -{71,42,-11}, -{71,42,-10}, -{71,42,-9}, -{71,42,-8}, -{71,42,-7}, -{71,42,-6}, -{71,42,-5}, -{71,42,-4}, -{71,42,-3}, -{71,42,-2}, -{71,42,-1}, -{71,42,0}, -{71,42,1}, -{71,42,2}, -{71,42,3}, -{71,42,4}, -{71,42,5}, -{71,42,6}, -{71,42,7}, -{71,42,8}, -{71,42,9}, -{71,42,10}, -{71,42,11}, -{71,42,12}, -{71,42,13}, -{71,42,14}, -{71,42,15}, -{71,42,16}, -{71,42,17}, -{71,42,18}, -{71,42,19}, -{71,42,20}, -{71,42,21}, -{71,42,22}, -{71,42,23}, -{71,42,24}, -{71,43,-44}, -{71,43,-43}, -{71,43,-42}, -{71,43,-41}, -{71,43,-40}, -{71,43,-39}, -{71,43,-38}, -{71,43,-37}, -{71,43,-36}, -{71,43,-35}, -{71,43,-34}, -{71,43,-33}, -{71,43,-32}, -{71,43,-31}, -{71,43,-30}, -{71,43,-29}, -{71,43,-28}, -{71,43,-27}, -{71,43,-26}, -{71,43,-25}, -{71,43,-24}, -{71,43,-23}, -{71,43,-22}, -{71,43,-21}, -{71,43,-20}, -{71,43,-19}, -{71,43,-18}, -{71,43,-17}, -{71,43,-16}, -{71,43,-15}, -{71,43,-14}, -{71,43,-13}, -{71,43,-12}, -{71,43,-11}, -{71,43,-10}, -{71,43,-9}, -{71,43,-8}, -{71,43,-7}, -{71,43,-6}, -{71,43,-5}, -{71,43,-4}, -{71,43,-3}, -{71,43,-2}, -{71,43,-1}, -{71,43,0}, -{71,43,1}, -{71,43,2}, -{71,43,3}, -{71,43,4}, -{71,43,5}, -{71,43,6}, -{71,43,7}, -{71,43,8}, -{71,43,9}, -{71,43,10}, -{71,43,11}, -{71,43,12}, -{71,43,13}, -{71,43,14}, -{71,43,15}, -{71,43,16}, -{71,43,17}, -{71,43,18}, -{71,43,19}, -{71,43,20}, -{71,44,-44}, -{71,44,-43}, -{71,44,-42}, -{71,44,-41}, -{71,44,-40}, -{71,44,-39}, -{71,44,-38}, -{71,44,-37}, -{71,44,-36}, -{71,44,-35}, -{71,44,-34}, -{71,44,-33}, -{71,44,-32}, -{71,44,-31}, -{71,44,-30}, -{71,44,-29}, -{71,44,-28}, -{71,44,-27}, -{71,44,-26}, -{71,44,-25}, -{71,44,-24}, -{71,44,-23}, -{71,44,-22}, -{71,44,-21}, -{71,44,-20}, -{71,44,-19}, -{71,44,-18}, -{71,44,-17}, -{71,44,-16}, -{71,44,-15}, -{71,44,-14}, -{71,44,-13}, -{71,44,-12}, -{71,44,-11}, -{71,44,-10}, -{71,44,-9}, -{71,44,-8}, -{71,44,-7}, -{71,44,-6}, -{71,44,-5}, -{71,44,-4}, -{71,44,-3}, -{71,44,-2}, -{71,44,-1}, -{71,44,0}, -{71,44,1}, -{71,44,2}, -{71,44,3}, -{71,44,4}, -{71,44,5}, -{71,44,6}, -{71,44,7}, -{71,44,8}, -{71,44,9}, -{71,44,10}, -{71,44,11}, -{71,44,12}, -{71,44,13}, -{71,44,14}, -{71,44,15}, -{71,44,16}, -{71,45,-44}, -{71,45,-43}, -{71,45,-42}, -{71,45,-41}, -{71,45,-40}, -{71,45,-39}, -{71,45,-38}, -{71,45,-37}, -{71,45,-36}, -{71,45,-35}, -{71,45,-34}, -{71,45,-33}, -{71,45,-32}, -{71,45,-31}, -{71,45,-30}, -{71,45,-29}, -{71,45,-28}, -{71,45,-27}, -{71,45,-26}, -{71,45,-25}, -{71,45,-24}, -{71,45,-23}, -{71,45,-22}, -{71,45,-21}, -{71,45,-20}, -{71,45,-19}, -{71,45,-18}, -{71,45,-17}, -{71,45,-16}, -{71,45,-15}, -{71,45,-14}, -{71,45,-13}, -{71,45,-12}, -{71,45,-11}, -{71,45,-10}, -{71,45,-9}, -{71,45,-8}, -{71,45,-7}, -{71,45,-6}, -{71,45,-5}, -{71,45,-4}, -{71,45,-3}, -{71,45,-2}, -{71,45,-1}, -{71,45,0}, -{71,45,1}, -{71,45,2}, -{71,45,3}, -{71,45,4}, -{71,45,5}, -{71,45,6}, -{71,45,7}, -{71,45,8}, -{71,45,9}, -{71,45,10}, -{71,45,11}, -{71,45,12}, -{71,45,13}, -{71,46,-44}, -{71,46,-43}, -{71,46,-42}, -{71,46,-41}, -{71,46,-40}, -{71,46,-39}, -{71,46,-38}, -{71,46,-37}, -{71,46,-36}, -{71,46,-35}, -{71,46,-34}, -{71,46,-33}, -{71,46,-32}, -{71,46,-31}, -{71,46,-30}, -{71,46,-29}, -{71,46,-28}, -{71,46,-27}, -{71,46,-26}, -{71,46,-25}, -{71,46,-24}, -{71,46,-23}, -{71,46,-22}, -{71,46,-21}, -{71,46,-20}, -{71,46,-19}, -{71,46,-18}, -{71,46,-17}, -{71,46,-16}, -{71,46,-15}, -{71,46,-14}, -{71,46,-13}, -{71,46,-12}, -{71,46,-11}, -{71,46,-10}, -{71,46,-9}, -{71,46,-8}, -{71,46,-7}, -{71,46,-6}, -{71,46,-5}, -{71,46,-4}, -{71,46,-3}, -{71,46,-2}, -{71,46,-1}, -{71,46,0}, -{71,46,1}, -{71,46,2}, -{71,46,3}, -{71,46,4}, -{71,46,5}, -{71,46,6}, -{71,46,7}, -{71,46,8}, -{71,46,9}, -{71,47,-44}, -{71,47,-43}, -{71,47,-42}, -{71,47,-41}, -{71,47,-40}, -{71,47,-39}, -{71,47,-38}, -{71,47,-37}, -{71,47,-36}, -{71,47,-35}, -{71,47,-34}, -{71,47,-33}, -{71,47,-32}, -{71,47,-31}, -{71,47,-30}, -{71,47,-29}, -{71,47,-28}, -{71,47,-27}, -{71,47,-26}, -{71,47,-25}, -{71,47,-24}, -{71,47,-23}, -{71,47,-22}, -{71,47,-21}, -{71,47,-20}, -{71,47,-19}, -{71,47,-18}, -{71,47,-17}, -{71,47,-16}, -{71,47,-15}, -{71,47,-14}, -{71,47,-13}, -{71,47,-12}, -{71,47,-11}, -{71,47,-10}, -{71,47,-9}, -{71,47,-8}, -{71,47,-7}, -{71,47,-6}, -{71,47,-5}, -{71,47,-4}, -{71,47,-3}, -{71,47,-2}, -{71,47,-1}, -{71,47,0}, -{71,47,1}, -{71,47,2}, -{71,47,3}, -{71,47,4}, -{71,47,5}, -{71,47,6}, -{71,48,-44}, -{71,48,-43}, -{71,48,-42}, -{71,48,-41}, -{71,48,-40}, -{71,48,-39}, -{71,48,-38}, -{71,48,-37}, -{71,48,-36}, -{71,48,-35}, -{71,48,-34}, -{71,48,-33}, -{71,48,-32}, -{71,48,-31}, -{71,48,-30}, -{71,48,-29}, -{71,48,-28}, -{71,48,-27}, -{71,48,-26}, -{71,48,-25}, -{71,48,-24}, -{71,48,-23}, -{71,48,-22}, -{71,48,-21}, -{71,48,-20}, -{71,48,-19}, -{71,48,-18}, -{71,48,-17}, -{71,48,-16}, -{71,48,-15}, -{71,48,-14}, -{71,48,-13}, -{71,48,-12}, -{71,48,-11}, -{71,48,-10}, -{71,48,-9}, -{71,48,-8}, -{71,48,-7}, -{71,48,-6}, -{71,48,-5}, -{71,48,-4}, -{71,48,-3}, -{71,48,-2}, -{71,48,-1}, -{71,48,0}, -{71,48,1}, -{71,48,2}, -{71,48,3}, -{71,49,-44}, -{71,49,-43}, -{71,49,-42}, -{71,49,-41}, -{71,49,-40}, -{71,49,-39}, -{71,49,-38}, -{71,49,-37}, -{71,49,-36}, -{71,49,-35}, -{71,49,-34}, -{71,49,-33}, -{71,49,-32}, -{71,49,-31}, -{71,49,-30}, -{71,49,-29}, -{71,49,-28}, -{71,49,-27}, -{71,49,-26}, -{71,49,-25}, -{71,49,-24}, -{71,49,-23}, -{71,49,-22}, -{71,49,-21}, -{71,49,-20}, -{71,49,-19}, -{71,49,-18}, -{71,49,-17}, -{71,49,-16}, -{71,49,-15}, -{71,49,-14}, -{71,49,-13}, -{71,49,-12}, -{71,49,-11}, -{71,49,-10}, -{71,49,-9}, -{71,49,-8}, -{71,49,-7}, -{71,49,-6}, -{71,49,-5}, -{71,49,-4}, -{71,49,-3}, -{71,49,-2}, -{71,49,-1}, -{71,49,0}, -{71,50,-44}, -{71,50,-43}, -{71,50,-42}, -{71,50,-41}, -{71,50,-40}, -{71,50,-39}, -{71,50,-38}, -{71,50,-37}, -{71,50,-36}, -{71,50,-35}, -{71,50,-34}, -{71,50,-33}, -{71,50,-32}, -{71,50,-31}, -{71,50,-30}, -{71,50,-29}, -{71,50,-28}, -{71,50,-27}, -{71,50,-26}, -{71,50,-25}, -{71,50,-24}, -{71,50,-23}, -{71,50,-22}, -{71,50,-21}, -{71,50,-20}, -{71,50,-19}, -{71,50,-18}, -{71,50,-17}, -{71,50,-16}, -{71,50,-15}, -{71,50,-14}, -{71,50,-13}, -{71,50,-12}, -{71,50,-11}, -{71,50,-10}, -{71,50,-9}, -{71,50,-8}, -{71,50,-7}, -{71,50,-6}, -{71,50,-5}, -{71,50,-4}, -{71,50,-3}, -{71,51,-44}, -{71,51,-43}, -{71,51,-42}, -{71,51,-41}, -{71,51,-40}, -{71,51,-39}, -{71,51,-38}, -{71,51,-37}, -{71,51,-36}, -{71,51,-35}, -{71,51,-34}, -{71,51,-33}, -{71,51,-32}, -{71,51,-31}, -{71,51,-30}, -{71,51,-29}, -{71,51,-28}, -{71,51,-27}, -{71,51,-26}, -{71,51,-25}, -{71,51,-24}, -{71,51,-23}, -{71,51,-22}, -{71,51,-21}, -{71,51,-20}, -{71,51,-19}, -{71,51,-18}, -{71,51,-17}, -{71,51,-16}, -{71,51,-15}, -{71,51,-14}, -{71,51,-13}, -{71,51,-12}, -{71,51,-11}, -{71,51,-10}, -{71,51,-9}, -{71,51,-8}, -{71,51,-7}, -{71,51,-6}, -{71,52,-44}, -{71,52,-43}, -{71,52,-42}, -{71,52,-41}, -{71,52,-40}, -{71,52,-39}, -{71,52,-38}, -{71,52,-37}, -{71,52,-36}, -{71,52,-35}, -{71,52,-34}, -{71,52,-33}, -{71,52,-32}, -{71,52,-31}, -{71,52,-30}, -{71,52,-29}, -{71,52,-28}, -{71,52,-27}, -{71,52,-26}, -{71,52,-25}, -{71,52,-24}, -{71,52,-23}, -{71,52,-22}, -{71,52,-21}, -{71,52,-20}, -{71,52,-19}, -{71,52,-18}, -{71,52,-17}, -{71,52,-16}, -{71,52,-15}, -{71,52,-14}, -{71,52,-13}, -{71,52,-12}, -{71,52,-11}, -{71,52,-10}, -{71,52,-9}, -{71,52,-8}, -{71,53,-44}, -{71,53,-43}, -{71,53,-42}, -{71,53,-41}, -{71,53,-40}, -{71,53,-39}, -{71,53,-38}, -{71,53,-37}, -{71,53,-36}, -{71,53,-35}, -{71,53,-34}, -{71,53,-33}, -{71,53,-32}, -{71,53,-31}, -{71,53,-30}, -{71,53,-29}, -{71,53,-28}, -{71,53,-27}, -{71,53,-26}, -{71,53,-25}, -{71,53,-24}, -{71,53,-23}, -{71,53,-22}, -{71,53,-21}, -{71,53,-20}, -{71,53,-19}, -{71,53,-18}, -{71,53,-17}, -{71,53,-16}, -{71,53,-15}, -{71,53,-14}, -{71,53,-13}, -{71,53,-12}, -{71,53,-11}, -{71,54,-44}, -{71,54,-43}, -{71,54,-42}, -{71,54,-41}, -{71,54,-40}, -{71,54,-39}, -{71,54,-38}, -{71,54,-37}, -{71,54,-36}, -{71,54,-35}, -{71,54,-34}, -{71,54,-33}, -{71,54,-32}, -{71,54,-31}, -{71,54,-30}, -{71,54,-29}, -{71,54,-28}, -{71,54,-27}, -{71,54,-26}, -{71,54,-25}, -{71,54,-24}, -{71,54,-23}, -{71,54,-22}, -{71,54,-21}, -{71,54,-20}, -{71,54,-19}, -{71,54,-18}, -{71,54,-17}, -{71,54,-16}, -{71,54,-15}, -{71,54,-14}, -{71,55,-44}, -{71,55,-43}, -{71,55,-42}, -{71,55,-41}, -{71,55,-40}, -{71,55,-39}, -{71,55,-38}, -{71,55,-37}, -{71,55,-36}, -{71,55,-35}, -{71,55,-34}, -{71,55,-33}, -{71,55,-32}, -{71,55,-31}, -{71,55,-30}, -{71,55,-29}, -{71,55,-28}, -{71,55,-27}, -{71,55,-26}, -{71,55,-25}, -{71,55,-24}, -{71,55,-23}, -{71,55,-22}, -{71,55,-21}, -{71,55,-20}, -{71,55,-19}, -{71,55,-18}, -{71,55,-17}, -{71,55,-16}, -{71,56,-44}, -{71,56,-43}, -{71,56,-42}, -{71,56,-41}, -{71,56,-40}, -{71,56,-39}, -{71,56,-38}, -{71,56,-37}, -{71,56,-36}, -{71,56,-35}, -{71,56,-34}, -{71,56,-33}, -{71,56,-32}, -{71,56,-31}, -{71,56,-30}, -{71,56,-29}, -{71,56,-28}, -{71,56,-27}, -{71,56,-26}, -{71,56,-25}, -{71,56,-24}, -{71,56,-23}, -{71,56,-22}, -{71,56,-21}, -{71,56,-20}, -{71,56,-19}, -{71,56,-18}, -{71,57,-44}, -{71,57,-43}, -{71,57,-42}, -{71,57,-41}, -{71,57,-40}, -{71,57,-39}, -{71,57,-38}, -{71,57,-37}, -{71,57,-36}, -{71,57,-35}, -{71,57,-34}, -{71,57,-33}, -{71,57,-32}, -{71,57,-31}, -{71,57,-30}, -{71,57,-29}, -{71,57,-28}, -{71,57,-27}, -{71,57,-26}, -{71,57,-25}, -{71,57,-24}, -{71,57,-23}, -{71,57,-22}, -{71,57,-21}, -{71,58,-44}, -{71,58,-43}, -{71,58,-42}, -{71,58,-41}, -{71,58,-40}, -{71,58,-39}, -{71,58,-38}, -{71,58,-37}, -{71,58,-36}, -{71,58,-35}, -{71,58,-34}, -{71,58,-33}, -{71,58,-32}, -{71,58,-31}, -{71,58,-30}, -{71,58,-29}, -{71,58,-28}, -{71,58,-27}, -{71,58,-26}, -{71,58,-25}, -{71,58,-24}, -{71,58,-23}, -{71,59,-44}, -{71,59,-43}, -{71,59,-42}, -{71,59,-41}, -{71,59,-40}, -{71,59,-39}, -{71,59,-38}, -{71,59,-37}, -{71,59,-36}, -{71,59,-35}, -{71,59,-34}, -{71,59,-33}, -{71,59,-32}, -{71,59,-31}, -{71,59,-30}, -{71,59,-29}, -{71,59,-28}, -{71,59,-27}, -{71,59,-26}, -{71,59,-25}, -{71,60,-44}, -{71,60,-43}, -{71,60,-42}, -{71,60,-41}, -{71,60,-40}, -{71,60,-39}, -{71,60,-38}, -{71,60,-37}, -{71,60,-36}, -{71,60,-35}, -{71,60,-34}, -{71,60,-33}, -{71,60,-32}, -{71,60,-31}, -{71,60,-30}, -{71,60,-29}, -{71,60,-28}, -{71,61,-44}, -{71,61,-43}, -{71,61,-42}, -{71,61,-41}, -{71,61,-40}, -{71,61,-39}, -{71,61,-38}, -{71,61,-37}, -{71,61,-36}, -{71,61,-35}, -{71,61,-34}, -{71,61,-33}, -{71,61,-32}, -{71,61,-31}, -{71,61,-30}, -{71,62,-44}, -{71,62,-43}, -{71,62,-42}, -{71,62,-41}, -{71,62,-40}, -{71,62,-39}, -{71,62,-38}, -{71,62,-37}, -{71,62,-36}, -{71,62,-35}, -{71,62,-34}, -{71,62,-33}, -{71,62,-32}, -{71,63,-44}, -{71,63,-43}, -{71,63,-42}, -{71,63,-41}, -{71,63,-40}, -{71,63,-39}, -{71,63,-38}, -{71,63,-37}, -{71,63,-36}, -{71,63,-35}, -{71,63,-34}, -{71,64,-44}, -{71,64,-43}, -{71,64,-42}, -{71,64,-41}, -{71,64,-40}, -{71,64,-39}, -{71,64,-38}, -{71,64,-37}, -{71,64,-36}, -{71,65,-44}, -{71,65,-43}, -{71,65,-42}, -{71,65,-41}, -{71,65,-40}, -{71,65,-39}, -{71,65,-38}, -{71,66,-44}, -{71,66,-43}, -{71,66,-42}, -{71,66,-41}, -{71,66,-40}, -{71,67,-44}, -{71,67,-43}, -{71,67,-42}, -{71,68,-44}, -{72,-73,70}, -{72,-72,65}, -{72,-72,66}, -{72,-72,67}, -{72,-72,68}, -{72,-72,69}, -{72,-72,70}, -{72,-71,61}, -{72,-71,62}, -{72,-71,63}, -{72,-71,64}, -{72,-71,65}, -{72,-71,66}, -{72,-71,67}, -{72,-71,68}, -{72,-71,69}, -{72,-71,70}, -{72,-70,57}, -{72,-70,58}, -{72,-70,59}, -{72,-70,60}, -{72,-70,61}, -{72,-70,62}, -{72,-70,63}, -{72,-70,64}, -{72,-70,65}, -{72,-70,66}, -{72,-70,67}, -{72,-70,68}, -{72,-70,69}, -{72,-70,70}, -{72,-69,53}, -{72,-69,54}, -{72,-69,55}, -{72,-69,56}, -{72,-69,57}, -{72,-69,58}, -{72,-69,59}, -{72,-69,60}, -{72,-69,61}, -{72,-69,62}, -{72,-69,63}, -{72,-69,64}, -{72,-69,65}, -{72,-69,66}, -{72,-69,67}, -{72,-69,68}, -{72,-69,69}, -{72,-69,70}, -{72,-68,50}, -{72,-68,51}, -{72,-68,52}, -{72,-68,53}, -{72,-68,54}, -{72,-68,55}, -{72,-68,56}, -{72,-68,57}, -{72,-68,58}, -{72,-68,59}, -{72,-68,60}, -{72,-68,61}, -{72,-68,62}, -{72,-68,63}, -{72,-68,64}, -{72,-68,65}, -{72,-68,66}, -{72,-68,67}, -{72,-68,68}, -{72,-68,69}, -{72,-68,70}, -{72,-67,46}, -{72,-67,47}, -{72,-67,48}, -{72,-67,49}, -{72,-67,50}, -{72,-67,51}, -{72,-67,52}, -{72,-67,53}, -{72,-67,54}, -{72,-67,55}, -{72,-67,56}, -{72,-67,57}, -{72,-67,58}, -{72,-67,59}, -{72,-67,60}, -{72,-67,61}, -{72,-67,62}, -{72,-67,63}, -{72,-67,64}, -{72,-67,65}, -{72,-67,66}, -{72,-67,67}, -{72,-67,68}, -{72,-67,69}, -{72,-67,70}, -{72,-66,43}, -{72,-66,44}, -{72,-66,45}, -{72,-66,46}, -{72,-66,47}, -{72,-66,48}, -{72,-66,49}, -{72,-66,50}, -{72,-66,51}, -{72,-66,52}, -{72,-66,53}, -{72,-66,54}, -{72,-66,55}, -{72,-66,56}, -{72,-66,57}, -{72,-66,58}, -{72,-66,59}, -{72,-66,60}, -{72,-66,61}, -{72,-66,62}, -{72,-66,63}, -{72,-66,64}, -{72,-66,65}, -{72,-66,66}, -{72,-66,67}, -{72,-66,68}, -{72,-66,69}, -{72,-66,70}, -{72,-66,71}, -{72,-65,40}, -{72,-65,41}, -{72,-65,42}, -{72,-65,43}, -{72,-65,44}, -{72,-65,45}, -{72,-65,46}, -{72,-65,47}, -{72,-65,48}, -{72,-65,49}, -{72,-65,50}, -{72,-65,51}, -{72,-65,52}, -{72,-65,53}, -{72,-65,54}, -{72,-65,55}, -{72,-65,56}, -{72,-65,57}, -{72,-65,58}, -{72,-65,59}, -{72,-65,60}, -{72,-65,61}, -{72,-65,62}, -{72,-65,63}, -{72,-65,64}, -{72,-65,65}, -{72,-65,66}, -{72,-65,67}, -{72,-65,68}, -{72,-65,69}, -{72,-65,70}, -{72,-65,71}, -{72,-64,37}, -{72,-64,38}, -{72,-64,39}, -{72,-64,40}, -{72,-64,41}, -{72,-64,42}, -{72,-64,43}, -{72,-64,44}, -{72,-64,45}, -{72,-64,46}, -{72,-64,47}, -{72,-64,48}, -{72,-64,49}, -{72,-64,50}, -{72,-64,51}, -{72,-64,52}, -{72,-64,53}, -{72,-64,54}, -{72,-64,55}, -{72,-64,56}, -{72,-64,57}, -{72,-64,58}, -{72,-64,59}, -{72,-64,60}, -{72,-64,61}, -{72,-64,62}, -{72,-64,63}, -{72,-64,64}, -{72,-64,65}, -{72,-64,66}, -{72,-64,67}, -{72,-64,68}, -{72,-64,69}, -{72,-64,70}, -{72,-64,71}, -{72,-63,35}, -{72,-63,36}, -{72,-63,37}, -{72,-63,38}, -{72,-63,39}, -{72,-63,40}, -{72,-63,41}, -{72,-63,42}, -{72,-63,43}, -{72,-63,44}, -{72,-63,45}, -{72,-63,46}, -{72,-63,47}, -{72,-63,48}, -{72,-63,49}, -{72,-63,50}, -{72,-63,51}, -{72,-63,52}, -{72,-63,53}, -{72,-63,54}, -{72,-63,55}, -{72,-63,56}, -{72,-63,57}, -{72,-63,58}, -{72,-63,59}, -{72,-63,60}, -{72,-63,61}, -{72,-63,62}, -{72,-63,63}, -{72,-63,64}, -{72,-63,65}, -{72,-63,66}, -{72,-63,67}, -{72,-63,68}, -{72,-63,69}, -{72,-63,70}, -{72,-63,71}, -{72,-62,32}, -{72,-62,33}, -{72,-62,34}, -{72,-62,35}, -{72,-62,36}, -{72,-62,37}, -{72,-62,38}, -{72,-62,39}, -{72,-62,40}, -{72,-62,41}, -{72,-62,42}, -{72,-62,43}, -{72,-62,44}, -{72,-62,45}, -{72,-62,46}, -{72,-62,47}, -{72,-62,48}, -{72,-62,49}, -{72,-62,50}, -{72,-62,51}, -{72,-62,52}, -{72,-62,53}, -{72,-62,54}, -{72,-62,55}, -{72,-62,56}, -{72,-62,57}, -{72,-62,58}, -{72,-62,59}, -{72,-62,60}, -{72,-62,61}, -{72,-62,62}, -{72,-62,63}, -{72,-62,64}, -{72,-62,65}, -{72,-62,66}, -{72,-62,67}, -{72,-62,68}, -{72,-62,69}, -{72,-62,70}, -{72,-62,71}, -{72,-61,30}, -{72,-61,31}, -{72,-61,32}, -{72,-61,33}, -{72,-61,34}, -{72,-61,35}, -{72,-61,36}, -{72,-61,37}, -{72,-61,38}, -{72,-61,39}, -{72,-61,40}, -{72,-61,41}, -{72,-61,42}, -{72,-61,43}, -{72,-61,44}, -{72,-61,45}, -{72,-61,46}, -{72,-61,47}, -{72,-61,48}, -{72,-61,49}, -{72,-61,50}, -{72,-61,51}, -{72,-61,52}, -{72,-61,53}, -{72,-61,54}, -{72,-61,55}, -{72,-61,56}, -{72,-61,57}, -{72,-61,58}, -{72,-61,59}, -{72,-61,60}, -{72,-61,61}, -{72,-61,62}, -{72,-61,63}, -{72,-61,64}, -{72,-61,65}, -{72,-61,66}, -{72,-61,67}, -{72,-61,68}, -{72,-61,69}, -{72,-61,70}, -{72,-61,71}, -{72,-60,27}, -{72,-60,28}, -{72,-60,29}, -{72,-60,30}, -{72,-60,31}, -{72,-60,32}, -{72,-60,33}, -{72,-60,34}, -{72,-60,35}, -{72,-60,36}, -{72,-60,37}, -{72,-60,38}, -{72,-60,39}, -{72,-60,40}, -{72,-60,41}, -{72,-60,42}, -{72,-60,43}, -{72,-60,44}, -{72,-60,45}, -{72,-60,46}, -{72,-60,47}, -{72,-60,48}, -{72,-60,49}, -{72,-60,50}, -{72,-60,51}, -{72,-60,52}, -{72,-60,53}, -{72,-60,54}, -{72,-60,55}, -{72,-60,56}, -{72,-60,57}, -{72,-60,58}, -{72,-60,59}, -{72,-60,60}, -{72,-60,61}, -{72,-60,62}, -{72,-60,63}, -{72,-60,64}, -{72,-60,65}, -{72,-60,66}, -{72,-60,67}, -{72,-60,68}, -{72,-60,69}, -{72,-60,70}, -{72,-60,71}, -{72,-59,25}, -{72,-59,26}, -{72,-59,27}, -{72,-59,28}, -{72,-59,29}, -{72,-59,30}, -{72,-59,31}, -{72,-59,32}, -{72,-59,33}, -{72,-59,34}, -{72,-59,35}, -{72,-59,36}, -{72,-59,37}, -{72,-59,38}, -{72,-59,39}, -{72,-59,40}, -{72,-59,41}, -{72,-59,42}, -{72,-59,43}, -{72,-59,44}, -{72,-59,45}, -{72,-59,46}, -{72,-59,47}, -{72,-59,48}, -{72,-59,49}, -{72,-59,50}, -{72,-59,51}, -{72,-59,52}, -{72,-59,53}, -{72,-59,54}, -{72,-59,55}, -{72,-59,56}, -{72,-59,57}, -{72,-59,58}, -{72,-59,59}, -{72,-59,60}, -{72,-59,61}, -{72,-59,62}, -{72,-59,63}, -{72,-59,64}, -{72,-59,65}, -{72,-59,66}, -{72,-59,67}, -{72,-59,68}, -{72,-59,69}, -{72,-59,70}, -{72,-59,71}, -{72,-58,23}, -{72,-58,24}, -{72,-58,25}, -{72,-58,26}, -{72,-58,27}, -{72,-58,28}, -{72,-58,29}, -{72,-58,30}, -{72,-58,31}, -{72,-58,32}, -{72,-58,33}, -{72,-58,34}, -{72,-58,35}, -{72,-58,36}, -{72,-58,37}, -{72,-58,38}, -{72,-58,39}, -{72,-58,40}, -{72,-58,41}, -{72,-58,42}, -{72,-58,43}, -{72,-58,44}, -{72,-58,45}, -{72,-58,46}, -{72,-58,47}, -{72,-58,48}, -{72,-58,49}, -{72,-58,50}, -{72,-58,51}, -{72,-58,52}, -{72,-58,53}, -{72,-58,54}, -{72,-58,55}, -{72,-58,56}, -{72,-58,57}, -{72,-58,58}, -{72,-58,59}, -{72,-58,60}, -{72,-58,61}, -{72,-58,62}, -{72,-58,63}, -{72,-58,64}, -{72,-58,65}, -{72,-58,66}, -{72,-58,67}, -{72,-58,68}, -{72,-58,69}, -{72,-58,70}, -{72,-58,71}, -{72,-57,20}, -{72,-57,21}, -{72,-57,22}, -{72,-57,23}, -{72,-57,24}, -{72,-57,25}, -{72,-57,26}, -{72,-57,27}, -{72,-57,28}, -{72,-57,29}, -{72,-57,30}, -{72,-57,31}, -{72,-57,32}, -{72,-57,33}, -{72,-57,34}, -{72,-57,35}, -{72,-57,36}, -{72,-57,37}, -{72,-57,38}, -{72,-57,39}, -{72,-57,40}, -{72,-57,41}, -{72,-57,42}, -{72,-57,43}, -{72,-57,44}, -{72,-57,45}, -{72,-57,46}, -{72,-57,47}, -{72,-57,48}, -{72,-57,49}, -{72,-57,50}, -{72,-57,51}, -{72,-57,52}, -{72,-57,53}, -{72,-57,54}, -{72,-57,55}, -{72,-57,56}, -{72,-57,57}, -{72,-57,58}, -{72,-57,59}, -{72,-57,60}, -{72,-57,61}, -{72,-57,62}, -{72,-57,63}, -{72,-57,64}, -{72,-57,65}, -{72,-57,66}, -{72,-57,67}, -{72,-57,68}, -{72,-57,69}, -{72,-57,70}, -{72,-57,71}, -{72,-56,18}, -{72,-56,19}, -{72,-56,20}, -{72,-56,21}, -{72,-56,22}, -{72,-56,23}, -{72,-56,24}, -{72,-56,25}, -{72,-56,26}, -{72,-56,27}, -{72,-56,28}, -{72,-56,29}, -{72,-56,30}, -{72,-56,31}, -{72,-56,32}, -{72,-56,33}, -{72,-56,34}, -{72,-56,35}, -{72,-56,36}, -{72,-56,37}, -{72,-56,38}, -{72,-56,39}, -{72,-56,40}, -{72,-56,41}, -{72,-56,42}, -{72,-56,43}, -{72,-56,44}, -{72,-56,45}, -{72,-56,46}, -{72,-56,47}, -{72,-56,48}, -{72,-56,49}, -{72,-56,50}, -{72,-56,51}, -{72,-56,52}, -{72,-56,53}, -{72,-56,54}, -{72,-56,55}, -{72,-56,56}, -{72,-56,57}, -{72,-56,58}, -{72,-56,59}, -{72,-56,60}, -{72,-56,61}, -{72,-56,62}, -{72,-56,63}, -{72,-56,64}, -{72,-56,65}, -{72,-56,66}, -{72,-56,67}, -{72,-56,68}, -{72,-56,69}, -{72,-56,70}, -{72,-56,71}, -{72,-55,16}, -{72,-55,17}, -{72,-55,18}, -{72,-55,19}, -{72,-55,20}, -{72,-55,21}, -{72,-55,22}, -{72,-55,23}, -{72,-55,24}, -{72,-55,25}, -{72,-55,26}, -{72,-55,27}, -{72,-55,28}, -{72,-55,29}, -{72,-55,30}, -{72,-55,31}, -{72,-55,32}, -{72,-55,33}, -{72,-55,34}, -{72,-55,35}, -{72,-55,36}, -{72,-55,37}, -{72,-55,38}, -{72,-55,39}, -{72,-55,40}, -{72,-55,41}, -{72,-55,42}, -{72,-55,43}, -{72,-55,44}, -{72,-55,45}, -{72,-55,46}, -{72,-55,47}, -{72,-55,48}, -{72,-55,49}, -{72,-55,50}, -{72,-55,51}, -{72,-55,52}, -{72,-55,53}, -{72,-55,54}, -{72,-55,55}, -{72,-55,56}, -{72,-55,57}, -{72,-55,58}, -{72,-55,59}, -{72,-55,60}, -{72,-55,61}, -{72,-55,62}, -{72,-55,63}, -{72,-55,64}, -{72,-55,65}, -{72,-55,66}, -{72,-55,67}, -{72,-55,68}, -{72,-55,69}, -{72,-55,70}, -{72,-55,71}, -{72,-54,14}, -{72,-54,15}, -{72,-54,16}, -{72,-54,17}, -{72,-54,18}, -{72,-54,19}, -{72,-54,20}, -{72,-54,21}, -{72,-54,22}, -{72,-54,23}, -{72,-54,24}, -{72,-54,25}, -{72,-54,26}, -{72,-54,27}, -{72,-54,28}, -{72,-54,29}, -{72,-54,30}, -{72,-54,31}, -{72,-54,32}, -{72,-54,33}, -{72,-54,34}, -{72,-54,35}, -{72,-54,36}, -{72,-54,37}, -{72,-54,38}, -{72,-54,39}, -{72,-54,40}, -{72,-54,41}, -{72,-54,42}, -{72,-54,43}, -{72,-54,44}, -{72,-54,45}, -{72,-54,46}, -{72,-54,47}, -{72,-54,48}, -{72,-54,49}, -{72,-54,50}, -{72,-54,51}, -{72,-54,52}, -{72,-54,53}, -{72,-54,54}, -{72,-54,55}, -{72,-54,56}, -{72,-54,57}, -{72,-54,58}, -{72,-54,59}, -{72,-54,60}, -{72,-54,61}, -{72,-54,62}, -{72,-54,63}, -{72,-54,64}, -{72,-54,65}, -{72,-54,66}, -{72,-54,67}, -{72,-54,68}, -{72,-54,69}, -{72,-54,70}, -{72,-54,71}, -{72,-53,12}, -{72,-53,13}, -{72,-53,14}, -{72,-53,15}, -{72,-53,16}, -{72,-53,17}, -{72,-53,18}, -{72,-53,19}, -{72,-53,20}, -{72,-53,21}, -{72,-53,22}, -{72,-53,23}, -{72,-53,24}, -{72,-53,25}, -{72,-53,26}, -{72,-53,27}, -{72,-53,28}, -{72,-53,29}, -{72,-53,30}, -{72,-53,31}, -{72,-53,32}, -{72,-53,33}, -{72,-53,34}, -{72,-53,35}, -{72,-53,36}, -{72,-53,37}, -{72,-53,38}, -{72,-53,39}, -{72,-53,40}, -{72,-53,41}, -{72,-53,42}, -{72,-53,43}, -{72,-53,44}, -{72,-53,45}, -{72,-53,46}, -{72,-53,47}, -{72,-53,48}, -{72,-53,49}, -{72,-53,50}, -{72,-53,51}, -{72,-53,52}, -{72,-53,53}, -{72,-53,54}, -{72,-53,55}, -{72,-53,56}, -{72,-53,57}, -{72,-53,58}, -{72,-53,59}, -{72,-53,60}, -{72,-53,61}, -{72,-53,62}, -{72,-53,63}, -{72,-53,64}, -{72,-53,65}, -{72,-53,66}, -{72,-53,67}, -{72,-53,68}, -{72,-53,69}, -{72,-53,70}, -{72,-53,71}, -{72,-52,10}, -{72,-52,11}, -{72,-52,12}, -{72,-52,13}, -{72,-52,14}, -{72,-52,15}, -{72,-52,16}, -{72,-52,17}, -{72,-52,18}, -{72,-52,19}, -{72,-52,20}, -{72,-52,21}, -{72,-52,22}, -{72,-52,23}, -{72,-52,24}, -{72,-52,25}, -{72,-52,26}, -{72,-52,27}, -{72,-52,28}, -{72,-52,29}, -{72,-52,30}, -{72,-52,31}, -{72,-52,32}, -{72,-52,33}, -{72,-52,34}, -{72,-52,35}, -{72,-52,36}, -{72,-52,37}, -{72,-52,38}, -{72,-52,39}, -{72,-52,40}, -{72,-52,41}, -{72,-52,42}, -{72,-52,43}, -{72,-52,44}, -{72,-52,45}, -{72,-52,46}, -{72,-52,47}, -{72,-52,48}, -{72,-52,49}, -{72,-52,50}, -{72,-52,51}, -{72,-52,52}, -{72,-52,53}, -{72,-52,54}, -{72,-52,55}, -{72,-52,56}, -{72,-52,57}, -{72,-52,58}, -{72,-52,59}, -{72,-52,60}, -{72,-52,61}, -{72,-52,62}, -{72,-52,63}, -{72,-52,64}, -{72,-52,65}, -{72,-52,66}, -{72,-52,67}, -{72,-52,68}, -{72,-52,69}, -{72,-52,70}, -{72,-52,71}, -{72,-51,8}, -{72,-51,9}, -{72,-51,10}, -{72,-51,11}, -{72,-51,12}, -{72,-51,13}, -{72,-51,14}, -{72,-51,15}, -{72,-51,16}, -{72,-51,17}, -{72,-51,18}, -{72,-51,19}, -{72,-51,20}, -{72,-51,21}, -{72,-51,22}, -{72,-51,23}, -{72,-51,24}, -{72,-51,25}, -{72,-51,26}, -{72,-51,27}, -{72,-51,28}, -{72,-51,29}, -{72,-51,30}, -{72,-51,31}, -{72,-51,32}, -{72,-51,33}, -{72,-51,34}, -{72,-51,35}, -{72,-51,36}, -{72,-51,37}, -{72,-51,38}, -{72,-51,39}, -{72,-51,40}, -{72,-51,41}, -{72,-51,42}, -{72,-51,43}, -{72,-51,44}, -{72,-51,45}, -{72,-51,46}, -{72,-51,47}, -{72,-51,48}, -{72,-51,49}, -{72,-51,50}, -{72,-51,51}, -{72,-51,52}, -{72,-51,53}, -{72,-51,54}, -{72,-51,55}, -{72,-51,56}, -{72,-51,57}, -{72,-51,58}, -{72,-51,59}, -{72,-51,60}, -{72,-51,61}, -{72,-51,62}, -{72,-51,63}, -{72,-51,64}, -{72,-51,65}, -{72,-51,66}, -{72,-51,67}, -{72,-51,68}, -{72,-51,69}, -{72,-51,70}, -{72,-51,71}, -{72,-50,6}, -{72,-50,7}, -{72,-50,8}, -{72,-50,9}, -{72,-50,10}, -{72,-50,11}, -{72,-50,12}, -{72,-50,13}, -{72,-50,14}, -{72,-50,15}, -{72,-50,16}, -{72,-50,17}, -{72,-50,18}, -{72,-50,19}, -{72,-50,20}, -{72,-50,21}, -{72,-50,22}, -{72,-50,23}, -{72,-50,24}, -{72,-50,25}, -{72,-50,26}, -{72,-50,27}, -{72,-50,28}, -{72,-50,29}, -{72,-50,30}, -{72,-50,31}, -{72,-50,32}, -{72,-50,33}, -{72,-50,34}, -{72,-50,35}, -{72,-50,36}, -{72,-50,37}, -{72,-50,38}, -{72,-50,39}, -{72,-50,40}, -{72,-50,41}, -{72,-50,42}, -{72,-50,43}, -{72,-50,44}, -{72,-50,45}, -{72,-50,46}, -{72,-50,47}, -{72,-50,48}, -{72,-50,49}, -{72,-50,50}, -{72,-50,51}, -{72,-50,52}, -{72,-50,53}, -{72,-50,54}, -{72,-50,55}, -{72,-50,56}, -{72,-50,57}, -{72,-50,58}, -{72,-50,59}, -{72,-50,60}, -{72,-50,61}, -{72,-50,62}, -{72,-50,63}, -{72,-50,64}, -{72,-50,65}, -{72,-50,66}, -{72,-50,67}, -{72,-50,68}, -{72,-50,69}, -{72,-50,70}, -{72,-50,71}, -{72,-49,5}, -{72,-49,6}, -{72,-49,7}, -{72,-49,8}, -{72,-49,9}, -{72,-49,10}, -{72,-49,11}, -{72,-49,12}, -{72,-49,13}, -{72,-49,14}, -{72,-49,15}, -{72,-49,16}, -{72,-49,17}, -{72,-49,18}, -{72,-49,19}, -{72,-49,20}, -{72,-49,21}, -{72,-49,22}, -{72,-49,23}, -{72,-49,24}, -{72,-49,25}, -{72,-49,26}, -{72,-49,27}, -{72,-49,28}, -{72,-49,29}, -{72,-49,30}, -{72,-49,31}, -{72,-49,32}, -{72,-49,33}, -{72,-49,34}, -{72,-49,35}, -{72,-49,36}, -{72,-49,37}, -{72,-49,38}, -{72,-49,39}, -{72,-49,40}, -{72,-49,41}, -{72,-49,42}, -{72,-49,43}, -{72,-49,44}, -{72,-49,45}, -{72,-49,46}, -{72,-49,47}, -{72,-49,48}, -{72,-49,49}, -{72,-49,50}, -{72,-49,51}, -{72,-49,52}, -{72,-49,53}, -{72,-49,54}, -{72,-49,55}, -{72,-49,56}, -{72,-49,57}, -{72,-49,58}, -{72,-49,59}, -{72,-49,60}, -{72,-49,61}, -{72,-49,62}, -{72,-49,63}, -{72,-49,64}, -{72,-49,65}, -{72,-49,66}, -{72,-49,67}, -{72,-49,68}, -{72,-49,69}, -{72,-49,70}, -{72,-49,71}, -{72,-48,3}, -{72,-48,4}, -{72,-48,5}, -{72,-48,6}, -{72,-48,7}, -{72,-48,8}, -{72,-48,9}, -{72,-48,10}, -{72,-48,11}, -{72,-48,12}, -{72,-48,13}, -{72,-48,14}, -{72,-48,15}, -{72,-48,16}, -{72,-48,17}, -{72,-48,18}, -{72,-48,19}, -{72,-48,20}, -{72,-48,21}, -{72,-48,22}, -{72,-48,23}, -{72,-48,24}, -{72,-48,25}, -{72,-48,26}, -{72,-48,27}, -{72,-48,28}, -{72,-48,29}, -{72,-48,30}, -{72,-48,31}, -{72,-48,32}, -{72,-48,33}, -{72,-48,34}, -{72,-48,35}, -{72,-48,36}, -{72,-48,37}, -{72,-48,38}, -{72,-48,39}, -{72,-48,40}, -{72,-48,41}, -{72,-48,42}, -{72,-48,43}, -{72,-48,44}, -{72,-48,45}, -{72,-48,46}, -{72,-48,47}, -{72,-48,48}, -{72,-48,49}, -{72,-48,50}, -{72,-48,51}, -{72,-48,52}, -{72,-48,53}, -{72,-48,54}, -{72,-48,55}, -{72,-48,56}, -{72,-48,57}, -{72,-48,58}, -{72,-48,59}, -{72,-48,60}, -{72,-48,61}, -{72,-48,62}, -{72,-48,63}, -{72,-48,64}, -{72,-48,65}, -{72,-48,66}, -{72,-48,67}, -{72,-48,68}, -{72,-48,69}, -{72,-48,70}, -{72,-48,71}, -{72,-47,1}, -{72,-47,2}, -{72,-47,3}, -{72,-47,4}, -{72,-47,5}, -{72,-47,6}, -{72,-47,7}, -{72,-47,8}, -{72,-47,9}, -{72,-47,10}, -{72,-47,11}, -{72,-47,12}, -{72,-47,13}, -{72,-47,14}, -{72,-47,15}, -{72,-47,16}, -{72,-47,17}, -{72,-47,18}, -{72,-47,19}, -{72,-47,20}, -{72,-47,21}, -{72,-47,22}, -{72,-47,23}, -{72,-47,24}, -{72,-47,25}, -{72,-47,26}, -{72,-47,27}, -{72,-47,28}, -{72,-47,29}, -{72,-47,30}, -{72,-47,31}, -{72,-47,32}, -{72,-47,33}, -{72,-47,34}, -{72,-47,35}, -{72,-47,36}, -{72,-47,37}, -{72,-47,38}, -{72,-47,39}, -{72,-47,40}, -{72,-47,41}, -{72,-47,42}, -{72,-47,43}, -{72,-47,44}, -{72,-47,45}, -{72,-47,46}, -{72,-47,47}, -{72,-47,48}, -{72,-47,49}, -{72,-47,50}, -{72,-47,51}, -{72,-47,52}, -{72,-47,53}, -{72,-47,54}, -{72,-47,55}, -{72,-47,56}, -{72,-47,57}, -{72,-47,58}, -{72,-47,59}, -{72,-47,60}, -{72,-47,61}, -{72,-47,62}, -{72,-47,63}, -{72,-47,64}, -{72,-47,65}, -{72,-47,66}, -{72,-47,67}, -{72,-47,68}, -{72,-47,69}, -{72,-47,70}, -{72,-47,71}, -{72,-46,-1}, -{72,-46,0}, -{72,-46,1}, -{72,-46,2}, -{72,-46,3}, -{72,-46,4}, -{72,-46,5}, -{72,-46,6}, -{72,-46,7}, -{72,-46,8}, -{72,-46,9}, -{72,-46,10}, -{72,-46,11}, -{72,-46,12}, -{72,-46,13}, -{72,-46,14}, -{72,-46,15}, -{72,-46,16}, -{72,-46,17}, -{72,-46,18}, -{72,-46,19}, -{72,-46,20}, -{72,-46,21}, -{72,-46,22}, -{72,-46,23}, -{72,-46,24}, -{72,-46,25}, -{72,-46,26}, -{72,-46,27}, -{72,-46,28}, -{72,-46,29}, -{72,-46,30}, -{72,-46,31}, -{72,-46,32}, -{72,-46,33}, -{72,-46,34}, -{72,-46,35}, -{72,-46,36}, -{72,-46,37}, -{72,-46,38}, -{72,-46,39}, -{72,-46,40}, -{72,-46,41}, -{72,-46,42}, -{72,-46,43}, -{72,-46,44}, -{72,-46,45}, -{72,-46,46}, -{72,-46,47}, -{72,-46,48}, -{72,-46,49}, -{72,-46,50}, -{72,-46,51}, -{72,-46,52}, -{72,-46,53}, -{72,-46,54}, -{72,-46,55}, -{72,-46,56}, -{72,-46,57}, -{72,-46,58}, -{72,-46,59}, -{72,-46,60}, -{72,-46,61}, -{72,-46,62}, -{72,-46,63}, -{72,-46,64}, -{72,-46,65}, -{72,-46,66}, -{72,-46,67}, -{72,-46,68}, -{72,-46,69}, -{72,-46,70}, -{72,-46,71}, -{72,-45,-2}, -{72,-45,-1}, -{72,-45,0}, -{72,-45,1}, -{72,-45,2}, -{72,-45,3}, -{72,-45,4}, -{72,-45,5}, -{72,-45,6}, -{72,-45,7}, -{72,-45,8}, -{72,-45,9}, -{72,-45,10}, -{72,-45,11}, -{72,-45,12}, -{72,-45,13}, -{72,-45,14}, -{72,-45,15}, -{72,-45,16}, -{72,-45,17}, -{72,-45,18}, -{72,-45,19}, -{72,-45,20}, -{72,-45,21}, -{72,-45,22}, -{72,-45,23}, -{72,-45,24}, -{72,-45,25}, -{72,-45,26}, -{72,-45,27}, -{72,-45,28}, -{72,-45,29}, -{72,-45,30}, -{72,-45,31}, -{72,-45,32}, -{72,-45,33}, -{72,-45,34}, -{72,-45,35}, -{72,-45,36}, -{72,-45,37}, -{72,-45,38}, -{72,-45,39}, -{72,-45,40}, -{72,-45,41}, -{72,-45,42}, -{72,-45,43}, -{72,-45,44}, -{72,-45,45}, -{72,-45,46}, -{72,-45,47}, -{72,-45,48}, -{72,-45,49}, -{72,-45,50}, -{72,-45,51}, -{72,-45,52}, -{72,-45,53}, -{72,-45,54}, -{72,-45,55}, -{72,-45,56}, -{72,-45,57}, -{72,-45,58}, -{72,-45,59}, -{72,-45,60}, -{72,-45,61}, -{72,-45,62}, -{72,-45,63}, -{72,-45,64}, -{72,-45,65}, -{72,-45,66}, -{72,-45,67}, -{72,-45,68}, -{72,-45,69}, -{72,-45,70}, -{72,-45,71}, -{72,-45,72}, -{72,-44,-4}, -{72,-44,-3}, -{72,-44,-2}, -{72,-44,-1}, -{72,-44,0}, -{72,-44,1}, -{72,-44,2}, -{72,-44,3}, -{72,-44,4}, -{72,-44,5}, -{72,-44,6}, -{72,-44,7}, -{72,-44,8}, -{72,-44,9}, -{72,-44,10}, -{72,-44,11}, -{72,-44,12}, -{72,-44,13}, -{72,-44,14}, -{72,-44,15}, -{72,-44,16}, -{72,-44,17}, -{72,-44,18}, -{72,-44,19}, -{72,-44,20}, -{72,-44,21}, -{72,-44,22}, -{72,-44,23}, -{72,-44,24}, -{72,-44,25}, -{72,-44,26}, -{72,-44,27}, -{72,-44,28}, -{72,-44,29}, -{72,-44,30}, -{72,-44,31}, -{72,-44,32}, -{72,-44,33}, -{72,-44,34}, -{72,-44,35}, -{72,-44,36}, -{72,-44,37}, -{72,-44,38}, -{72,-44,39}, -{72,-44,40}, -{72,-44,41}, -{72,-44,42}, -{72,-44,43}, -{72,-44,44}, -{72,-44,45}, -{72,-44,46}, -{72,-44,47}, -{72,-44,48}, -{72,-44,49}, -{72,-44,50}, -{72,-44,51}, -{72,-44,52}, -{72,-44,53}, -{72,-44,54}, -{72,-44,55}, -{72,-44,56}, -{72,-44,57}, -{72,-44,58}, -{72,-44,59}, -{72,-44,60}, -{72,-44,61}, -{72,-44,62}, -{72,-44,63}, -{72,-44,64}, -{72,-44,65}, -{72,-44,66}, -{72,-44,67}, -{72,-44,68}, -{72,-44,69}, -{72,-44,70}, -{72,-44,71}, -{72,-44,72}, -{72,-43,-6}, -{72,-43,-5}, -{72,-43,-4}, -{72,-43,-3}, -{72,-43,-2}, -{72,-43,-1}, -{72,-43,0}, -{72,-43,1}, -{72,-43,2}, -{72,-43,3}, -{72,-43,4}, -{72,-43,5}, -{72,-43,6}, -{72,-43,7}, -{72,-43,8}, -{72,-43,9}, -{72,-43,10}, -{72,-43,11}, -{72,-43,12}, -{72,-43,13}, -{72,-43,14}, -{72,-43,15}, -{72,-43,16}, -{72,-43,17}, -{72,-43,18}, -{72,-43,19}, -{72,-43,20}, -{72,-43,21}, -{72,-43,22}, -{72,-43,23}, -{72,-43,24}, -{72,-43,25}, -{72,-43,26}, -{72,-43,27}, -{72,-43,28}, -{72,-43,29}, -{72,-43,30}, -{72,-43,31}, -{72,-43,32}, -{72,-43,33}, -{72,-43,34}, -{72,-43,35}, -{72,-43,36}, -{72,-43,37}, -{72,-43,38}, -{72,-43,39}, -{72,-43,40}, -{72,-43,41}, -{72,-43,42}, -{72,-43,43}, -{72,-43,44}, -{72,-43,45}, -{72,-43,46}, -{72,-43,47}, -{72,-43,48}, -{72,-43,49}, -{72,-43,50}, -{72,-43,51}, -{72,-43,52}, -{72,-43,53}, -{72,-43,54}, -{72,-43,55}, -{72,-43,56}, -{72,-43,57}, -{72,-43,58}, -{72,-43,59}, -{72,-43,60}, -{72,-43,61}, -{72,-43,62}, -{72,-43,63}, -{72,-43,64}, -{72,-43,65}, -{72,-43,66}, -{72,-43,67}, -{72,-43,68}, -{72,-43,69}, -{72,-43,70}, -{72,-43,71}, -{72,-43,72}, -{72,-42,-7}, -{72,-42,-6}, -{72,-42,-5}, -{72,-42,-4}, -{72,-42,-3}, -{72,-42,-2}, -{72,-42,-1}, -{72,-42,0}, -{72,-42,1}, -{72,-42,2}, -{72,-42,3}, -{72,-42,4}, -{72,-42,5}, -{72,-42,6}, -{72,-42,7}, -{72,-42,8}, -{72,-42,9}, -{72,-42,10}, -{72,-42,11}, -{72,-42,12}, -{72,-42,13}, -{72,-42,14}, -{72,-42,15}, -{72,-42,16}, -{72,-42,17}, -{72,-42,18}, -{72,-42,19}, -{72,-42,20}, -{72,-42,21}, -{72,-42,22}, -{72,-42,23}, -{72,-42,24}, -{72,-42,25}, -{72,-42,26}, -{72,-42,27}, -{72,-42,28}, -{72,-42,29}, -{72,-42,30}, -{72,-42,31}, -{72,-42,32}, -{72,-42,33}, -{72,-42,34}, -{72,-42,35}, -{72,-42,36}, -{72,-42,37}, -{72,-42,38}, -{72,-42,39}, -{72,-42,40}, -{72,-42,41}, -{72,-42,42}, -{72,-42,43}, -{72,-42,44}, -{72,-42,45}, -{72,-42,46}, -{72,-42,47}, -{72,-42,48}, -{72,-42,49}, -{72,-42,50}, -{72,-42,51}, -{72,-42,52}, -{72,-42,53}, -{72,-42,54}, -{72,-42,55}, -{72,-42,56}, -{72,-42,57}, -{72,-42,58}, -{72,-42,59}, -{72,-42,60}, -{72,-42,61}, -{72,-42,62}, -{72,-42,63}, -{72,-42,64}, -{72,-42,65}, -{72,-42,66}, -{72,-42,67}, -{72,-42,68}, -{72,-42,69}, -{72,-42,70}, -{72,-42,71}, -{72,-42,72}, -{72,-41,-9}, -{72,-41,-8}, -{72,-41,-7}, -{72,-41,-6}, -{72,-41,-5}, -{72,-41,-4}, -{72,-41,-3}, -{72,-41,-2}, -{72,-41,-1}, -{72,-41,0}, -{72,-41,1}, -{72,-41,2}, -{72,-41,3}, -{72,-41,4}, -{72,-41,5}, -{72,-41,6}, -{72,-41,7}, -{72,-41,8}, -{72,-41,9}, -{72,-41,10}, -{72,-41,11}, -{72,-41,12}, -{72,-41,13}, -{72,-41,14}, -{72,-41,15}, -{72,-41,16}, -{72,-41,17}, -{72,-41,18}, -{72,-41,19}, -{72,-41,20}, -{72,-41,21}, -{72,-41,22}, -{72,-41,23}, -{72,-41,24}, -{72,-41,25}, -{72,-41,26}, -{72,-41,27}, -{72,-41,28}, -{72,-41,29}, -{72,-41,30}, -{72,-41,31}, -{72,-41,32}, -{72,-41,33}, -{72,-41,34}, -{72,-41,35}, -{72,-41,36}, -{72,-41,37}, -{72,-41,38}, -{72,-41,39}, -{72,-41,40}, -{72,-41,41}, -{72,-41,42}, -{72,-41,43}, -{72,-41,44}, -{72,-41,45}, -{72,-41,46}, -{72,-41,47}, -{72,-41,48}, -{72,-41,49}, -{72,-41,50}, -{72,-41,51}, -{72,-41,52}, -{72,-41,53}, -{72,-41,54}, -{72,-41,55}, -{72,-41,56}, -{72,-41,57}, -{72,-41,58}, -{72,-41,59}, -{72,-41,60}, -{72,-41,61}, -{72,-41,62}, -{72,-41,63}, -{72,-41,64}, -{72,-41,65}, -{72,-41,66}, -{72,-41,67}, -{72,-41,68}, -{72,-41,69}, -{72,-41,70}, -{72,-41,71}, -{72,-41,72}, -{72,-40,-11}, -{72,-40,-10}, -{72,-40,-9}, -{72,-40,-8}, -{72,-40,-7}, -{72,-40,-6}, -{72,-40,-5}, -{72,-40,-4}, -{72,-40,-3}, -{72,-40,-2}, -{72,-40,-1}, -{72,-40,0}, -{72,-40,1}, -{72,-40,2}, -{72,-40,3}, -{72,-40,4}, -{72,-40,5}, -{72,-40,6}, -{72,-40,7}, -{72,-40,8}, -{72,-40,9}, -{72,-40,10}, -{72,-40,11}, -{72,-40,12}, -{72,-40,13}, -{72,-40,14}, -{72,-40,15}, -{72,-40,16}, -{72,-40,17}, -{72,-40,18}, -{72,-40,19}, -{72,-40,20}, -{72,-40,21}, -{72,-40,22}, -{72,-40,23}, -{72,-40,24}, -{72,-40,25}, -{72,-40,26}, -{72,-40,27}, -{72,-40,28}, -{72,-40,29}, -{72,-40,30}, -{72,-40,31}, -{72,-40,32}, -{72,-40,33}, -{72,-40,34}, -{72,-40,35}, -{72,-40,36}, -{72,-40,37}, -{72,-40,38}, -{72,-40,39}, -{72,-40,40}, -{72,-40,41}, -{72,-40,42}, -{72,-40,43}, -{72,-40,44}, -{72,-40,45}, -{72,-40,46}, -{72,-40,47}, -{72,-40,48}, -{72,-40,49}, -{72,-40,50}, -{72,-40,51}, -{72,-40,52}, -{72,-40,53}, -{72,-40,54}, -{72,-40,55}, -{72,-40,56}, -{72,-40,57}, -{72,-40,58}, -{72,-40,59}, -{72,-40,60}, -{72,-40,61}, -{72,-40,62}, -{72,-40,63}, -{72,-40,64}, -{72,-40,65}, -{72,-40,66}, -{72,-40,67}, -{72,-40,68}, -{72,-40,69}, -{72,-40,70}, -{72,-40,71}, -{72,-40,72}, -{72,-39,-12}, -{72,-39,-11}, -{72,-39,-10}, -{72,-39,-9}, -{72,-39,-8}, -{72,-39,-7}, -{72,-39,-6}, -{72,-39,-5}, -{72,-39,-4}, -{72,-39,-3}, -{72,-39,-2}, -{72,-39,-1}, -{72,-39,0}, -{72,-39,1}, -{72,-39,2}, -{72,-39,3}, -{72,-39,4}, -{72,-39,5}, -{72,-39,6}, -{72,-39,7}, -{72,-39,8}, -{72,-39,9}, -{72,-39,10}, -{72,-39,11}, -{72,-39,12}, -{72,-39,13}, -{72,-39,14}, -{72,-39,15}, -{72,-39,16}, -{72,-39,17}, -{72,-39,18}, -{72,-39,19}, -{72,-39,20}, -{72,-39,21}, -{72,-39,22}, -{72,-39,23}, -{72,-39,24}, -{72,-39,25}, -{72,-39,26}, -{72,-39,27}, -{72,-39,28}, -{72,-39,29}, -{72,-39,30}, -{72,-39,31}, -{72,-39,32}, -{72,-39,33}, -{72,-39,34}, -{72,-39,35}, -{72,-39,36}, -{72,-39,37}, -{72,-39,38}, -{72,-39,39}, -{72,-39,40}, -{72,-39,41}, -{72,-39,42}, -{72,-39,43}, -{72,-39,44}, -{72,-39,45}, -{72,-39,46}, -{72,-39,47}, -{72,-39,48}, -{72,-39,49}, -{72,-39,50}, -{72,-39,51}, -{72,-39,52}, -{72,-39,53}, -{72,-39,54}, -{72,-39,55}, -{72,-39,56}, -{72,-39,57}, -{72,-39,58}, -{72,-39,59}, -{72,-39,60}, -{72,-39,61}, -{72,-39,62}, -{72,-39,63}, -{72,-39,64}, -{72,-39,65}, -{72,-39,66}, -{72,-39,67}, -{72,-39,68}, -{72,-39,69}, -{72,-39,70}, -{72,-39,71}, -{72,-39,72}, -{72,-38,-14}, -{72,-38,-13}, -{72,-38,-12}, -{72,-38,-11}, -{72,-38,-10}, -{72,-38,-9}, -{72,-38,-8}, -{72,-38,-7}, -{72,-38,-6}, -{72,-38,-5}, -{72,-38,-4}, -{72,-38,-3}, -{72,-38,-2}, -{72,-38,-1}, -{72,-38,0}, -{72,-38,1}, -{72,-38,2}, -{72,-38,3}, -{72,-38,4}, -{72,-38,5}, -{72,-38,6}, -{72,-38,7}, -{72,-38,8}, -{72,-38,9}, -{72,-38,10}, -{72,-38,11}, -{72,-38,12}, -{72,-38,13}, -{72,-38,14}, -{72,-38,15}, -{72,-38,16}, -{72,-38,17}, -{72,-38,18}, -{72,-38,19}, -{72,-38,20}, -{72,-38,21}, -{72,-38,22}, -{72,-38,23}, -{72,-38,24}, -{72,-38,25}, -{72,-38,26}, -{72,-38,27}, -{72,-38,28}, -{72,-38,29}, -{72,-38,30}, -{72,-38,31}, -{72,-38,32}, -{72,-38,33}, -{72,-38,34}, -{72,-38,35}, -{72,-38,36}, -{72,-38,37}, -{72,-38,38}, -{72,-38,39}, -{72,-38,40}, -{72,-38,41}, -{72,-38,42}, -{72,-38,43}, -{72,-38,44}, -{72,-38,45}, -{72,-38,46}, -{72,-38,47}, -{72,-38,48}, -{72,-38,49}, -{72,-38,50}, -{72,-38,51}, -{72,-38,52}, -{72,-38,53}, -{72,-38,54}, -{72,-38,55}, -{72,-38,56}, -{72,-38,57}, -{72,-38,58}, -{72,-38,59}, -{72,-38,60}, -{72,-38,61}, -{72,-38,62}, -{72,-38,63}, -{72,-38,64}, -{72,-38,65}, -{72,-38,66}, -{72,-38,67}, -{72,-38,68}, -{72,-38,69}, -{72,-38,70}, -{72,-38,71}, -{72,-38,72}, -{72,-37,-15}, -{72,-37,-14}, -{72,-37,-13}, -{72,-37,-12}, -{72,-37,-11}, -{72,-37,-10}, -{72,-37,-9}, -{72,-37,-8}, -{72,-37,-7}, -{72,-37,-6}, -{72,-37,-5}, -{72,-37,-4}, -{72,-37,-3}, -{72,-37,-2}, -{72,-37,-1}, -{72,-37,0}, -{72,-37,1}, -{72,-37,2}, -{72,-37,3}, -{72,-37,4}, -{72,-37,5}, -{72,-37,6}, -{72,-37,7}, -{72,-37,8}, -{72,-37,9}, -{72,-37,10}, -{72,-37,11}, -{72,-37,12}, -{72,-37,13}, -{72,-37,14}, -{72,-37,15}, -{72,-37,16}, -{72,-37,17}, -{72,-37,18}, -{72,-37,19}, -{72,-37,20}, -{72,-37,21}, -{72,-37,22}, -{72,-37,23}, -{72,-37,24}, -{72,-37,25}, -{72,-37,26}, -{72,-37,27}, -{72,-37,28}, -{72,-37,29}, -{72,-37,30}, -{72,-37,31}, -{72,-37,32}, -{72,-37,33}, -{72,-37,34}, -{72,-37,35}, -{72,-37,36}, -{72,-37,37}, -{72,-37,38}, -{72,-37,39}, -{72,-37,40}, -{72,-37,41}, -{72,-37,42}, -{72,-37,43}, -{72,-37,44}, -{72,-37,45}, -{72,-37,46}, -{72,-37,47}, -{72,-37,48}, -{72,-37,49}, -{72,-37,50}, -{72,-37,51}, -{72,-37,52}, -{72,-37,53}, -{72,-37,54}, -{72,-37,55}, -{72,-37,56}, -{72,-37,57}, -{72,-37,58}, -{72,-37,59}, -{72,-37,60}, -{72,-37,61}, -{72,-37,62}, -{72,-37,63}, -{72,-37,64}, -{72,-37,65}, -{72,-37,66}, -{72,-37,67}, -{72,-37,68}, -{72,-37,69}, -{72,-37,70}, -{72,-37,71}, -{72,-37,72}, -{72,-36,-17}, -{72,-36,-16}, -{72,-36,-15}, -{72,-36,-14}, -{72,-36,-13}, -{72,-36,-12}, -{72,-36,-11}, -{72,-36,-10}, -{72,-36,-9}, -{72,-36,-8}, -{72,-36,-7}, -{72,-36,-6}, -{72,-36,-5}, -{72,-36,-4}, -{72,-36,-3}, -{72,-36,-2}, -{72,-36,-1}, -{72,-36,0}, -{72,-36,1}, -{72,-36,2}, -{72,-36,3}, -{72,-36,4}, -{72,-36,5}, -{72,-36,6}, -{72,-36,7}, -{72,-36,8}, -{72,-36,9}, -{72,-36,10}, -{72,-36,11}, -{72,-36,12}, -{72,-36,13}, -{72,-36,14}, -{72,-36,15}, -{72,-36,16}, -{72,-36,17}, -{72,-36,18}, -{72,-36,19}, -{72,-36,20}, -{72,-36,21}, -{72,-36,22}, -{72,-36,23}, -{72,-36,24}, -{72,-36,25}, -{72,-36,26}, -{72,-36,27}, -{72,-36,28}, -{72,-36,29}, -{72,-36,30}, -{72,-36,31}, -{72,-36,32}, -{72,-36,33}, -{72,-36,34}, -{72,-36,35}, -{72,-36,36}, -{72,-36,37}, -{72,-36,38}, -{72,-36,39}, -{72,-36,40}, -{72,-36,41}, -{72,-36,42}, -{72,-36,43}, -{72,-36,44}, -{72,-36,45}, -{72,-36,46}, -{72,-36,47}, -{72,-36,48}, -{72,-36,49}, -{72,-36,50}, -{72,-36,51}, -{72,-36,52}, -{72,-36,53}, -{72,-36,54}, -{72,-36,55}, -{72,-36,56}, -{72,-36,57}, -{72,-36,58}, -{72,-36,59}, -{72,-36,60}, -{72,-36,61}, -{72,-36,62}, -{72,-36,63}, -{72,-36,64}, -{72,-36,65}, -{72,-36,66}, -{72,-36,67}, -{72,-36,68}, -{72,-36,69}, -{72,-36,70}, -{72,-36,71}, -{72,-36,72}, -{72,-35,-18}, -{72,-35,-17}, -{72,-35,-16}, -{72,-35,-15}, -{72,-35,-14}, -{72,-35,-13}, -{72,-35,-12}, -{72,-35,-11}, -{72,-35,-10}, -{72,-35,-9}, -{72,-35,-8}, -{72,-35,-7}, -{72,-35,-6}, -{72,-35,-5}, -{72,-35,-4}, -{72,-35,-3}, -{72,-35,-2}, -{72,-35,-1}, -{72,-35,0}, -{72,-35,1}, -{72,-35,2}, -{72,-35,3}, -{72,-35,4}, -{72,-35,5}, -{72,-35,6}, -{72,-35,7}, -{72,-35,8}, -{72,-35,9}, -{72,-35,10}, -{72,-35,11}, -{72,-35,12}, -{72,-35,13}, -{72,-35,14}, -{72,-35,15}, -{72,-35,16}, -{72,-35,17}, -{72,-35,18}, -{72,-35,19}, -{72,-35,20}, -{72,-35,21}, -{72,-35,22}, -{72,-35,23}, -{72,-35,24}, -{72,-35,25}, -{72,-35,26}, -{72,-35,27}, -{72,-35,28}, -{72,-35,29}, -{72,-35,30}, -{72,-35,31}, -{72,-35,32}, -{72,-35,33}, -{72,-35,34}, -{72,-35,35}, -{72,-35,36}, -{72,-35,37}, -{72,-35,38}, -{72,-35,39}, -{72,-35,40}, -{72,-35,41}, -{72,-35,42}, -{72,-35,43}, -{72,-35,44}, -{72,-35,45}, -{72,-35,46}, -{72,-35,47}, -{72,-35,48}, -{72,-35,49}, -{72,-35,50}, -{72,-35,51}, -{72,-35,52}, -{72,-35,53}, -{72,-35,54}, -{72,-35,55}, -{72,-35,56}, -{72,-35,57}, -{72,-35,58}, -{72,-35,59}, -{72,-35,60}, -{72,-35,61}, -{72,-35,62}, -{72,-35,63}, -{72,-35,64}, -{72,-35,65}, -{72,-35,66}, -{72,-35,67}, -{72,-35,68}, -{72,-35,69}, -{72,-35,70}, -{72,-35,71}, -{72,-35,72}, -{72,-34,-20}, -{72,-34,-19}, -{72,-34,-18}, -{72,-34,-17}, -{72,-34,-16}, -{72,-34,-15}, -{72,-34,-14}, -{72,-34,-13}, -{72,-34,-12}, -{72,-34,-11}, -{72,-34,-10}, -{72,-34,-9}, -{72,-34,-8}, -{72,-34,-7}, -{72,-34,-6}, -{72,-34,-5}, -{72,-34,-4}, -{72,-34,-3}, -{72,-34,-2}, -{72,-34,-1}, -{72,-34,0}, -{72,-34,1}, -{72,-34,2}, -{72,-34,3}, -{72,-34,4}, -{72,-34,5}, -{72,-34,6}, -{72,-34,7}, -{72,-34,8}, -{72,-34,9}, -{72,-34,10}, -{72,-34,11}, -{72,-34,12}, -{72,-34,13}, -{72,-34,14}, -{72,-34,15}, -{72,-34,16}, -{72,-34,17}, -{72,-34,18}, -{72,-34,19}, -{72,-34,20}, -{72,-34,21}, -{72,-34,22}, -{72,-34,23}, -{72,-34,24}, -{72,-34,25}, -{72,-34,26}, -{72,-34,27}, -{72,-34,28}, -{72,-34,29}, -{72,-34,30}, -{72,-34,31}, -{72,-34,32}, -{72,-34,33}, -{72,-34,34}, -{72,-34,35}, -{72,-34,36}, -{72,-34,37}, -{72,-34,38}, -{72,-34,39}, -{72,-34,40}, -{72,-34,41}, -{72,-34,42}, -{72,-34,43}, -{72,-34,44}, -{72,-34,45}, -{72,-34,46}, -{72,-34,47}, -{72,-34,48}, -{72,-34,49}, -{72,-34,50}, -{72,-34,51}, -{72,-34,52}, -{72,-34,53}, -{72,-34,54}, -{72,-34,55}, -{72,-34,56}, -{72,-34,57}, -{72,-34,58}, -{72,-34,59}, -{72,-34,60}, -{72,-34,61}, -{72,-34,62}, -{72,-34,63}, -{72,-34,64}, -{72,-34,65}, -{72,-34,66}, -{72,-34,67}, -{72,-34,68}, -{72,-34,69}, -{72,-34,70}, -{72,-34,71}, -{72,-34,72}, -{72,-33,-21}, -{72,-33,-20}, -{72,-33,-19}, -{72,-33,-18}, -{72,-33,-17}, -{72,-33,-16}, -{72,-33,-15}, -{72,-33,-14}, -{72,-33,-13}, -{72,-33,-12}, -{72,-33,-11}, -{72,-33,-10}, -{72,-33,-9}, -{72,-33,-8}, -{72,-33,-7}, -{72,-33,-6}, -{72,-33,-5}, -{72,-33,-4}, -{72,-33,-3}, -{72,-33,-2}, -{72,-33,-1}, -{72,-33,0}, -{72,-33,1}, -{72,-33,2}, -{72,-33,3}, -{72,-33,4}, -{72,-33,5}, -{72,-33,6}, -{72,-33,7}, -{72,-33,8}, -{72,-33,9}, -{72,-33,10}, -{72,-33,11}, -{72,-33,12}, -{72,-33,13}, -{72,-33,14}, -{72,-33,15}, -{72,-33,16}, -{72,-33,17}, -{72,-33,18}, -{72,-33,19}, -{72,-33,20}, -{72,-33,21}, -{72,-33,22}, -{72,-33,23}, -{72,-33,24}, -{72,-33,25}, -{72,-33,26}, -{72,-33,27}, -{72,-33,28}, -{72,-33,29}, -{72,-33,30}, -{72,-33,31}, -{72,-33,32}, -{72,-33,33}, -{72,-33,34}, -{72,-33,35}, -{72,-33,36}, -{72,-33,37}, -{72,-33,38}, -{72,-33,39}, -{72,-33,40}, -{72,-33,41}, -{72,-33,42}, -{72,-33,43}, -{72,-33,44}, -{72,-33,45}, -{72,-33,46}, -{72,-33,47}, -{72,-33,48}, -{72,-33,49}, -{72,-33,50}, -{72,-33,51}, -{72,-33,52}, -{72,-33,53}, -{72,-33,54}, -{72,-33,55}, -{72,-33,56}, -{72,-33,57}, -{72,-33,58}, -{72,-33,59}, -{72,-33,60}, -{72,-33,61}, -{72,-33,62}, -{72,-33,63}, -{72,-33,64}, -{72,-33,65}, -{72,-33,66}, -{72,-33,67}, -{72,-33,68}, -{72,-33,69}, -{72,-33,70}, -{72,-33,71}, -{72,-33,72}, -{72,-32,-23}, -{72,-32,-22}, -{72,-32,-21}, -{72,-32,-20}, -{72,-32,-19}, -{72,-32,-18}, -{72,-32,-17}, -{72,-32,-16}, -{72,-32,-15}, -{72,-32,-14}, -{72,-32,-13}, -{72,-32,-12}, -{72,-32,-11}, -{72,-32,-10}, -{72,-32,-9}, -{72,-32,-8}, -{72,-32,-7}, -{72,-32,-6}, -{72,-32,-5}, -{72,-32,-4}, -{72,-32,-3}, -{72,-32,-2}, -{72,-32,-1}, -{72,-32,0}, -{72,-32,1}, -{72,-32,2}, -{72,-32,3}, -{72,-32,4}, -{72,-32,5}, -{72,-32,6}, -{72,-32,7}, -{72,-32,8}, -{72,-32,9}, -{72,-32,10}, -{72,-32,11}, -{72,-32,12}, -{72,-32,13}, -{72,-32,14}, -{72,-32,15}, -{72,-32,16}, -{72,-32,17}, -{72,-32,18}, -{72,-32,19}, -{72,-32,20}, -{72,-32,21}, -{72,-32,22}, -{72,-32,23}, -{72,-32,24}, -{72,-32,25}, -{72,-32,26}, -{72,-32,27}, -{72,-32,28}, -{72,-32,29}, -{72,-32,30}, -{72,-32,31}, -{72,-32,32}, -{72,-32,33}, -{72,-32,34}, -{72,-32,35}, -{72,-32,36}, -{72,-32,37}, -{72,-32,38}, -{72,-32,39}, -{72,-32,40}, -{72,-32,41}, -{72,-32,42}, -{72,-32,43}, -{72,-32,44}, -{72,-32,45}, -{72,-32,46}, -{72,-32,47}, -{72,-32,48}, -{72,-32,49}, -{72,-32,50}, -{72,-32,51}, -{72,-32,52}, -{72,-32,53}, -{72,-32,54}, -{72,-32,55}, -{72,-32,56}, -{72,-32,57}, -{72,-32,58}, -{72,-32,59}, -{72,-32,60}, -{72,-32,61}, -{72,-32,62}, -{72,-32,63}, -{72,-32,64}, -{72,-32,65}, -{72,-32,66}, -{72,-32,67}, -{72,-32,68}, -{72,-32,69}, -{72,-32,70}, -{72,-32,71}, -{72,-32,72}, -{72,-31,-24}, -{72,-31,-23}, -{72,-31,-22}, -{72,-31,-21}, -{72,-31,-20}, -{72,-31,-19}, -{72,-31,-18}, -{72,-31,-17}, -{72,-31,-16}, -{72,-31,-15}, -{72,-31,-14}, -{72,-31,-13}, -{72,-31,-12}, -{72,-31,-11}, -{72,-31,-10}, -{72,-31,-9}, -{72,-31,-8}, -{72,-31,-7}, -{72,-31,-6}, -{72,-31,-5}, -{72,-31,-4}, -{72,-31,-3}, -{72,-31,-2}, -{72,-31,-1}, -{72,-31,0}, -{72,-31,1}, -{72,-31,2}, -{72,-31,3}, -{72,-31,4}, -{72,-31,5}, -{72,-31,6}, -{72,-31,7}, -{72,-31,8}, -{72,-31,9}, -{72,-31,10}, -{72,-31,11}, -{72,-31,12}, -{72,-31,13}, -{72,-31,14}, -{72,-31,15}, -{72,-31,16}, -{72,-31,17}, -{72,-31,18}, -{72,-31,19}, -{72,-31,20}, -{72,-31,21}, -{72,-31,22}, -{72,-31,23}, -{72,-31,24}, -{72,-31,25}, -{72,-31,26}, -{72,-31,27}, -{72,-31,28}, -{72,-31,29}, -{72,-31,30}, -{72,-31,31}, -{72,-31,32}, -{72,-31,33}, -{72,-31,34}, -{72,-31,35}, -{72,-31,36}, -{72,-31,37}, -{72,-31,38}, -{72,-31,39}, -{72,-31,40}, -{72,-31,41}, -{72,-31,42}, -{72,-31,43}, -{72,-31,44}, -{72,-31,45}, -{72,-31,46}, -{72,-31,47}, -{72,-31,48}, -{72,-31,49}, -{72,-31,50}, -{72,-31,51}, -{72,-31,52}, -{72,-31,53}, -{72,-31,54}, -{72,-31,55}, -{72,-31,56}, -{72,-31,57}, -{72,-31,58}, -{72,-31,59}, -{72,-31,60}, -{72,-31,61}, -{72,-31,62}, -{72,-31,63}, -{72,-31,64}, -{72,-31,65}, -{72,-31,66}, -{72,-31,67}, -{72,-31,68}, -{72,-31,69}, -{72,-31,70}, -{72,-31,71}, -{72,-31,72}, -{72,-30,-25}, -{72,-30,-24}, -{72,-30,-23}, -{72,-30,-22}, -{72,-30,-21}, -{72,-30,-20}, -{72,-30,-19}, -{72,-30,-18}, -{72,-30,-17}, -{72,-30,-16}, -{72,-30,-15}, -{72,-30,-14}, -{72,-30,-13}, -{72,-30,-12}, -{72,-30,-11}, -{72,-30,-10}, -{72,-30,-9}, -{72,-30,-8}, -{72,-30,-7}, -{72,-30,-6}, -{72,-30,-5}, -{72,-30,-4}, -{72,-30,-3}, -{72,-30,-2}, -{72,-30,-1}, -{72,-30,0}, -{72,-30,1}, -{72,-30,2}, -{72,-30,3}, -{72,-30,4}, -{72,-30,5}, -{72,-30,6}, -{72,-30,7}, -{72,-30,8}, -{72,-30,9}, -{72,-30,10}, -{72,-30,11}, -{72,-30,12}, -{72,-30,13}, -{72,-30,14}, -{72,-30,15}, -{72,-30,16}, -{72,-30,17}, -{72,-30,18}, -{72,-30,19}, -{72,-30,20}, -{72,-30,21}, -{72,-30,22}, -{72,-30,23}, -{72,-30,24}, -{72,-30,25}, -{72,-30,26}, -{72,-30,27}, -{72,-30,28}, -{72,-30,29}, -{72,-30,30}, -{72,-30,31}, -{72,-30,32}, -{72,-30,33}, -{72,-30,34}, -{72,-30,35}, -{72,-30,36}, -{72,-30,37}, -{72,-30,38}, -{72,-30,39}, -{72,-30,40}, -{72,-30,41}, -{72,-30,42}, -{72,-30,43}, -{72,-30,44}, -{72,-30,45}, -{72,-30,46}, -{72,-30,47}, -{72,-30,48}, -{72,-30,49}, -{72,-30,50}, -{72,-30,51}, -{72,-30,52}, -{72,-30,53}, -{72,-30,54}, -{72,-30,55}, -{72,-30,56}, -{72,-30,57}, -{72,-30,58}, -{72,-30,59}, -{72,-30,60}, -{72,-30,61}, -{72,-30,62}, -{72,-30,63}, -{72,-30,64}, -{72,-30,65}, -{72,-30,66}, -{72,-30,67}, -{72,-30,68}, -{72,-30,69}, -{72,-30,70}, -{72,-30,71}, -{72,-30,72}, -{72,-29,-27}, -{72,-29,-26}, -{72,-29,-25}, -{72,-29,-24}, -{72,-29,-23}, -{72,-29,-22}, -{72,-29,-21}, -{72,-29,-20}, -{72,-29,-19}, -{72,-29,-18}, -{72,-29,-17}, -{72,-29,-16}, -{72,-29,-15}, -{72,-29,-14}, -{72,-29,-13}, -{72,-29,-12}, -{72,-29,-11}, -{72,-29,-10}, -{72,-29,-9}, -{72,-29,-8}, -{72,-29,-7}, -{72,-29,-6}, -{72,-29,-5}, -{72,-29,-4}, -{72,-29,-3}, -{72,-29,-2}, -{72,-29,-1}, -{72,-29,0}, -{72,-29,1}, -{72,-29,2}, -{72,-29,3}, -{72,-29,4}, -{72,-29,5}, -{72,-29,6}, -{72,-29,7}, -{72,-29,8}, -{72,-29,9}, -{72,-29,10}, -{72,-29,11}, -{72,-29,12}, -{72,-29,13}, -{72,-29,14}, -{72,-29,15}, -{72,-29,16}, -{72,-29,17}, -{72,-29,18}, -{72,-29,19}, -{72,-29,20}, -{72,-29,21}, -{72,-29,22}, -{72,-29,23}, -{72,-29,24}, -{72,-29,25}, -{72,-29,26}, -{72,-29,27}, -{72,-29,28}, -{72,-29,29}, -{72,-29,30}, -{72,-29,31}, -{72,-29,32}, -{72,-29,33}, -{72,-29,34}, -{72,-29,35}, -{72,-29,36}, -{72,-29,37}, -{72,-29,38}, -{72,-29,39}, -{72,-29,40}, -{72,-29,41}, -{72,-29,42}, -{72,-29,43}, -{72,-29,44}, -{72,-29,45}, -{72,-29,46}, -{72,-29,47}, -{72,-29,48}, -{72,-29,49}, -{72,-29,50}, -{72,-29,51}, -{72,-29,52}, -{72,-29,53}, -{72,-29,54}, -{72,-29,55}, -{72,-29,56}, -{72,-29,57}, -{72,-29,58}, -{72,-29,59}, -{72,-29,60}, -{72,-29,61}, -{72,-29,62}, -{72,-29,63}, -{72,-29,64}, -{72,-29,65}, -{72,-29,66}, -{72,-29,67}, -{72,-29,68}, -{72,-29,69}, -{72,-29,70}, -{72,-29,71}, -{72,-29,72}, -{72,-28,-28}, -{72,-28,-27}, -{72,-28,-26}, -{72,-28,-25}, -{72,-28,-24}, -{72,-28,-23}, -{72,-28,-22}, -{72,-28,-21}, -{72,-28,-20}, -{72,-28,-19}, -{72,-28,-18}, -{72,-28,-17}, -{72,-28,-16}, -{72,-28,-15}, -{72,-28,-14}, -{72,-28,-13}, -{72,-28,-12}, -{72,-28,-11}, -{72,-28,-10}, -{72,-28,-9}, -{72,-28,-8}, -{72,-28,-7}, -{72,-28,-6}, -{72,-28,-5}, -{72,-28,-4}, -{72,-28,-3}, -{72,-28,-2}, -{72,-28,-1}, -{72,-28,0}, -{72,-28,1}, -{72,-28,2}, -{72,-28,3}, -{72,-28,4}, -{72,-28,5}, -{72,-28,6}, -{72,-28,7}, -{72,-28,8}, -{72,-28,9}, -{72,-28,10}, -{72,-28,11}, -{72,-28,12}, -{72,-28,13}, -{72,-28,14}, -{72,-28,15}, -{72,-28,16}, -{72,-28,17}, -{72,-28,18}, -{72,-28,19}, -{72,-28,20}, -{72,-28,21}, -{72,-28,22}, -{72,-28,23}, -{72,-28,24}, -{72,-28,25}, -{72,-28,26}, -{72,-28,27}, -{72,-28,28}, -{72,-28,29}, -{72,-28,30}, -{72,-28,31}, -{72,-28,32}, -{72,-28,33}, -{72,-28,34}, -{72,-28,35}, -{72,-28,36}, -{72,-28,37}, -{72,-28,38}, -{72,-28,39}, -{72,-28,40}, -{72,-28,41}, -{72,-28,42}, -{72,-28,43}, -{72,-28,44}, -{72,-28,45}, -{72,-28,46}, -{72,-28,47}, -{72,-28,48}, -{72,-28,49}, -{72,-28,50}, -{72,-28,51}, -{72,-28,52}, -{72,-28,53}, -{72,-28,54}, -{72,-28,55}, -{72,-28,56}, -{72,-28,57}, -{72,-28,58}, -{72,-28,59}, -{72,-28,60}, -{72,-28,61}, -{72,-28,62}, -{72,-28,63}, -{72,-28,64}, -{72,-28,65}, -{72,-28,66}, -{72,-28,67}, -{72,-28,68}, -{72,-28,69}, -{72,-28,70}, -{72,-28,71}, -{72,-28,72}, -{72,-27,-30}, -{72,-27,-29}, -{72,-27,-28}, -{72,-27,-27}, -{72,-27,-26}, -{72,-27,-25}, -{72,-27,-24}, -{72,-27,-23}, -{72,-27,-22}, -{72,-27,-21}, -{72,-27,-20}, -{72,-27,-19}, -{72,-27,-18}, -{72,-27,-17}, -{72,-27,-16}, -{72,-27,-15}, -{72,-27,-14}, -{72,-27,-13}, -{72,-27,-12}, -{72,-27,-11}, -{72,-27,-10}, -{72,-27,-9}, -{72,-27,-8}, -{72,-27,-7}, -{72,-27,-6}, -{72,-27,-5}, -{72,-27,-4}, -{72,-27,-3}, -{72,-27,-2}, -{72,-27,-1}, -{72,-27,0}, -{72,-27,1}, -{72,-27,2}, -{72,-27,3}, -{72,-27,4}, -{72,-27,5}, -{72,-27,6}, -{72,-27,7}, -{72,-27,8}, -{72,-27,9}, -{72,-27,10}, -{72,-27,11}, -{72,-27,12}, -{72,-27,13}, -{72,-27,14}, -{72,-27,15}, -{72,-27,16}, -{72,-27,17}, -{72,-27,18}, -{72,-27,19}, -{72,-27,20}, -{72,-27,21}, -{72,-27,22}, -{72,-27,23}, -{72,-27,24}, -{72,-27,25}, -{72,-27,26}, -{72,-27,27}, -{72,-27,28}, -{72,-27,29}, -{72,-27,30}, -{72,-27,31}, -{72,-27,32}, -{72,-27,33}, -{72,-27,34}, -{72,-27,35}, -{72,-27,36}, -{72,-27,37}, -{72,-27,38}, -{72,-27,39}, -{72,-27,40}, -{72,-27,41}, -{72,-27,42}, -{72,-27,43}, -{72,-27,44}, -{72,-27,45}, -{72,-27,46}, -{72,-27,47}, -{72,-27,48}, -{72,-27,49}, -{72,-27,50}, -{72,-27,51}, -{72,-27,52}, -{72,-27,53}, -{72,-27,54}, -{72,-27,55}, -{72,-27,56}, -{72,-27,57}, -{72,-27,58}, -{72,-27,59}, -{72,-27,60}, -{72,-27,61}, -{72,-27,62}, -{72,-27,63}, -{72,-27,64}, -{72,-27,65}, -{72,-27,66}, -{72,-27,67}, -{72,-27,68}, -{72,-27,69}, -{72,-27,70}, -{72,-27,71}, -{72,-27,72}, -{72,-27,73}, -{72,-26,-31}, -{72,-26,-30}, -{72,-26,-29}, -{72,-26,-28}, -{72,-26,-27}, -{72,-26,-26}, -{72,-26,-25}, -{72,-26,-24}, -{72,-26,-23}, -{72,-26,-22}, -{72,-26,-21}, -{72,-26,-20}, -{72,-26,-19}, -{72,-26,-18}, -{72,-26,-17}, -{72,-26,-16}, -{72,-26,-15}, -{72,-26,-14}, -{72,-26,-13}, -{72,-26,-12}, -{72,-26,-11}, -{72,-26,-10}, -{72,-26,-9}, -{72,-26,-8}, -{72,-26,-7}, -{72,-26,-6}, -{72,-26,-5}, -{72,-26,-4}, -{72,-26,-3}, -{72,-26,-2}, -{72,-26,-1}, -{72,-26,0}, -{72,-26,1}, -{72,-26,2}, -{72,-26,3}, -{72,-26,4}, -{72,-26,5}, -{72,-26,6}, -{72,-26,7}, -{72,-26,8}, -{72,-26,9}, -{72,-26,10}, -{72,-26,11}, -{72,-26,12}, -{72,-26,13}, -{72,-26,14}, -{72,-26,15}, -{72,-26,16}, -{72,-26,17}, -{72,-26,18}, -{72,-26,19}, -{72,-26,20}, -{72,-26,21}, -{72,-26,22}, -{72,-26,23}, -{72,-26,24}, -{72,-26,25}, -{72,-26,26}, -{72,-26,27}, -{72,-26,28}, -{72,-26,29}, -{72,-26,30}, -{72,-26,31}, -{72,-26,32}, -{72,-26,33}, -{72,-26,34}, -{72,-26,35}, -{72,-26,36}, -{72,-26,37}, -{72,-26,38}, -{72,-26,39}, -{72,-26,40}, -{72,-26,41}, -{72,-26,42}, -{72,-26,43}, -{72,-26,44}, -{72,-26,45}, -{72,-26,46}, -{72,-26,47}, -{72,-26,48}, -{72,-26,49}, -{72,-26,50}, -{72,-26,51}, -{72,-26,52}, -{72,-26,53}, -{72,-26,54}, -{72,-26,55}, -{72,-26,56}, -{72,-26,57}, -{72,-26,58}, -{72,-26,59}, -{72,-26,60}, -{72,-26,61}, -{72,-26,62}, -{72,-26,63}, -{72,-26,64}, -{72,-26,65}, -{72,-26,66}, -{72,-26,67}, -{72,-26,68}, -{72,-26,69}, -{72,-26,70}, -{72,-26,71}, -{72,-26,72}, -{72,-26,73}, -{72,-25,-32}, -{72,-25,-31}, -{72,-25,-30}, -{72,-25,-29}, -{72,-25,-28}, -{72,-25,-27}, -{72,-25,-26}, -{72,-25,-25}, -{72,-25,-24}, -{72,-25,-23}, -{72,-25,-22}, -{72,-25,-21}, -{72,-25,-20}, -{72,-25,-19}, -{72,-25,-18}, -{72,-25,-17}, -{72,-25,-16}, -{72,-25,-15}, -{72,-25,-14}, -{72,-25,-13}, -{72,-25,-12}, -{72,-25,-11}, -{72,-25,-10}, -{72,-25,-9}, -{72,-25,-8}, -{72,-25,-7}, -{72,-25,-6}, -{72,-25,-5}, -{72,-25,-4}, -{72,-25,-3}, -{72,-25,-2}, -{72,-25,-1}, -{72,-25,0}, -{72,-25,1}, -{72,-25,2}, -{72,-25,3}, -{72,-25,4}, -{72,-25,5}, -{72,-25,6}, -{72,-25,7}, -{72,-25,8}, -{72,-25,9}, -{72,-25,10}, -{72,-25,11}, -{72,-25,12}, -{72,-25,13}, -{72,-25,14}, -{72,-25,15}, -{72,-25,16}, -{72,-25,17}, -{72,-25,18}, -{72,-25,19}, -{72,-25,20}, -{72,-25,21}, -{72,-25,22}, -{72,-25,23}, -{72,-25,24}, -{72,-25,25}, -{72,-25,26}, -{72,-25,27}, -{72,-25,28}, -{72,-25,29}, -{72,-25,30}, -{72,-25,31}, -{72,-25,32}, -{72,-25,33}, -{72,-25,34}, -{72,-25,35}, -{72,-25,36}, -{72,-25,37}, -{72,-25,38}, -{72,-25,39}, -{72,-25,40}, -{72,-25,41}, -{72,-25,42}, -{72,-25,43}, -{72,-25,44}, -{72,-25,45}, -{72,-25,46}, -{72,-25,47}, -{72,-25,48}, -{72,-25,49}, -{72,-25,50}, -{72,-25,51}, -{72,-25,52}, -{72,-25,53}, -{72,-25,54}, -{72,-25,55}, -{72,-25,56}, -{72,-25,57}, -{72,-25,58}, -{72,-25,59}, -{72,-25,60}, -{72,-25,61}, -{72,-25,62}, -{72,-25,63}, -{72,-25,64}, -{72,-25,65}, -{72,-25,66}, -{72,-25,67}, -{72,-25,68}, -{72,-25,69}, -{72,-25,70}, -{72,-25,71}, -{72,-25,72}, -{72,-25,73}, -{72,-24,-34}, -{72,-24,-33}, -{72,-24,-32}, -{72,-24,-31}, -{72,-24,-30}, -{72,-24,-29}, -{72,-24,-28}, -{72,-24,-27}, -{72,-24,-26}, -{72,-24,-25}, -{72,-24,-24}, -{72,-24,-23}, -{72,-24,-22}, -{72,-24,-21}, -{72,-24,-20}, -{72,-24,-19}, -{72,-24,-18}, -{72,-24,-17}, -{72,-24,-16}, -{72,-24,-15}, -{72,-24,-14}, -{72,-24,-13}, -{72,-24,-12}, -{72,-24,-11}, -{72,-24,-10}, -{72,-24,-9}, -{72,-24,-8}, -{72,-24,-7}, -{72,-24,-6}, -{72,-24,-5}, -{72,-24,-4}, -{72,-24,-3}, -{72,-24,-2}, -{72,-24,-1}, -{72,-24,0}, -{72,-24,1}, -{72,-24,2}, -{72,-24,3}, -{72,-24,4}, -{72,-24,5}, -{72,-24,6}, -{72,-24,7}, -{72,-24,8}, -{72,-24,9}, -{72,-24,10}, -{72,-24,11}, -{72,-24,12}, -{72,-24,13}, -{72,-24,14}, -{72,-24,15}, -{72,-24,16}, -{72,-24,17}, -{72,-24,18}, -{72,-24,19}, -{72,-24,20}, -{72,-24,21}, -{72,-24,22}, -{72,-24,23}, -{72,-24,24}, -{72,-24,25}, -{72,-24,26}, -{72,-24,27}, -{72,-24,28}, -{72,-24,29}, -{72,-24,30}, -{72,-24,31}, -{72,-24,32}, -{72,-24,33}, -{72,-24,34}, -{72,-24,35}, -{72,-24,36}, -{72,-24,37}, -{72,-24,38}, -{72,-24,39}, -{72,-24,40}, -{72,-24,41}, -{72,-24,42}, -{72,-24,43}, -{72,-24,44}, -{72,-24,45}, -{72,-24,46}, -{72,-24,47}, -{72,-24,48}, -{72,-24,49}, -{72,-24,50}, -{72,-24,51}, -{72,-24,52}, -{72,-24,53}, -{72,-24,54}, -{72,-24,55}, -{72,-24,56}, -{72,-24,57}, -{72,-24,58}, -{72,-24,59}, -{72,-24,60}, -{72,-24,61}, -{72,-24,62}, -{72,-24,63}, -{72,-24,64}, -{72,-24,65}, -{72,-24,66}, -{72,-24,67}, -{72,-24,68}, -{72,-24,69}, -{72,-24,70}, -{72,-24,71}, -{72,-24,72}, -{72,-24,73}, -{72,-23,-35}, -{72,-23,-34}, -{72,-23,-33}, -{72,-23,-32}, -{72,-23,-31}, -{72,-23,-30}, -{72,-23,-29}, -{72,-23,-28}, -{72,-23,-27}, -{72,-23,-26}, -{72,-23,-25}, -{72,-23,-24}, -{72,-23,-23}, -{72,-23,-22}, -{72,-23,-21}, -{72,-23,-20}, -{72,-23,-19}, -{72,-23,-18}, -{72,-23,-17}, -{72,-23,-16}, -{72,-23,-15}, -{72,-23,-14}, -{72,-23,-13}, -{72,-23,-12}, -{72,-23,-11}, -{72,-23,-10}, -{72,-23,-9}, -{72,-23,-8}, -{72,-23,-7}, -{72,-23,-6}, -{72,-23,-5}, -{72,-23,-4}, -{72,-23,-3}, -{72,-23,-2}, -{72,-23,-1}, -{72,-23,0}, -{72,-23,1}, -{72,-23,2}, -{72,-23,3}, -{72,-23,4}, -{72,-23,5}, -{72,-23,6}, -{72,-23,7}, -{72,-23,8}, -{72,-23,9}, -{72,-23,10}, -{72,-23,11}, -{72,-23,12}, -{72,-23,13}, -{72,-23,14}, -{72,-23,15}, -{72,-23,16}, -{72,-23,17}, -{72,-23,18}, -{72,-23,19}, -{72,-23,20}, -{72,-23,21}, -{72,-23,22}, -{72,-23,23}, -{72,-23,24}, -{72,-23,25}, -{72,-23,26}, -{72,-23,27}, -{72,-23,28}, -{72,-23,29}, -{72,-23,30}, -{72,-23,31}, -{72,-23,32}, -{72,-23,33}, -{72,-23,34}, -{72,-23,35}, -{72,-23,36}, -{72,-23,37}, -{72,-23,38}, -{72,-23,39}, -{72,-23,40}, -{72,-23,41}, -{72,-23,42}, -{72,-23,43}, -{72,-23,44}, -{72,-23,45}, -{72,-23,46}, -{72,-23,47}, -{72,-23,48}, -{72,-23,49}, -{72,-23,50}, -{72,-23,51}, -{72,-23,52}, -{72,-23,53}, -{72,-23,54}, -{72,-23,55}, -{72,-23,56}, -{72,-23,57}, -{72,-23,58}, -{72,-23,59}, -{72,-23,60}, -{72,-23,61}, -{72,-23,62}, -{72,-23,63}, -{72,-23,64}, -{72,-23,65}, -{72,-23,66}, -{72,-23,67}, -{72,-23,68}, -{72,-23,69}, -{72,-23,70}, -{72,-23,71}, -{72,-23,72}, -{72,-23,73}, -{72,-22,-36}, -{72,-22,-35}, -{72,-22,-34}, -{72,-22,-33}, -{72,-22,-32}, -{72,-22,-31}, -{72,-22,-30}, -{72,-22,-29}, -{72,-22,-28}, -{72,-22,-27}, -{72,-22,-26}, -{72,-22,-25}, -{72,-22,-24}, -{72,-22,-23}, -{72,-22,-22}, -{72,-22,-21}, -{72,-22,-20}, -{72,-22,-19}, -{72,-22,-18}, -{72,-22,-17}, -{72,-22,-16}, -{72,-22,-15}, -{72,-22,-14}, -{72,-22,-13}, -{72,-22,-12}, -{72,-22,-11}, -{72,-22,-10}, -{72,-22,-9}, -{72,-22,-8}, -{72,-22,-7}, -{72,-22,-6}, -{72,-22,-5}, -{72,-22,-4}, -{72,-22,-3}, -{72,-22,-2}, -{72,-22,-1}, -{72,-22,0}, -{72,-22,1}, -{72,-22,2}, -{72,-22,3}, -{72,-22,4}, -{72,-22,5}, -{72,-22,6}, -{72,-22,7}, -{72,-22,8}, -{72,-22,9}, -{72,-22,10}, -{72,-22,11}, -{72,-22,12}, -{72,-22,13}, -{72,-22,14}, -{72,-22,15}, -{72,-22,16}, -{72,-22,17}, -{72,-22,18}, -{72,-22,19}, -{72,-22,20}, -{72,-22,21}, -{72,-22,22}, -{72,-22,23}, -{72,-22,24}, -{72,-22,25}, -{72,-22,26}, -{72,-22,27}, -{72,-22,28}, -{72,-22,29}, -{72,-22,30}, -{72,-22,31}, -{72,-22,32}, -{72,-22,33}, -{72,-22,34}, -{72,-22,35}, -{72,-22,36}, -{72,-22,37}, -{72,-22,38}, -{72,-22,39}, -{72,-22,40}, -{72,-22,41}, -{72,-22,42}, -{72,-22,43}, -{72,-22,44}, -{72,-22,45}, -{72,-22,46}, -{72,-22,47}, -{72,-22,48}, -{72,-22,49}, -{72,-22,50}, -{72,-22,51}, -{72,-22,52}, -{72,-22,53}, -{72,-22,54}, -{72,-22,55}, -{72,-22,56}, -{72,-22,57}, -{72,-22,58}, -{72,-22,59}, -{72,-22,60}, -{72,-22,61}, -{72,-22,62}, -{72,-22,63}, -{72,-22,64}, -{72,-22,65}, -{72,-22,66}, -{72,-22,67}, -{72,-22,68}, -{72,-22,69}, -{72,-22,70}, -{72,-22,71}, -{72,-22,72}, -{72,-22,73}, -{72,-21,-38}, -{72,-21,-37}, -{72,-21,-36}, -{72,-21,-35}, -{72,-21,-34}, -{72,-21,-33}, -{72,-21,-32}, -{72,-21,-31}, -{72,-21,-30}, -{72,-21,-29}, -{72,-21,-28}, -{72,-21,-27}, -{72,-21,-26}, -{72,-21,-25}, -{72,-21,-24}, -{72,-21,-23}, -{72,-21,-22}, -{72,-21,-21}, -{72,-21,-20}, -{72,-21,-19}, -{72,-21,-18}, -{72,-21,-17}, -{72,-21,-16}, -{72,-21,-15}, -{72,-21,-14}, -{72,-21,-13}, -{72,-21,-12}, -{72,-21,-11}, -{72,-21,-10}, -{72,-21,-9}, -{72,-21,-8}, -{72,-21,-7}, -{72,-21,-6}, -{72,-21,-5}, -{72,-21,-4}, -{72,-21,-3}, -{72,-21,-2}, -{72,-21,-1}, -{72,-21,0}, -{72,-21,1}, -{72,-21,2}, -{72,-21,3}, -{72,-21,4}, -{72,-21,5}, -{72,-21,6}, -{72,-21,7}, -{72,-21,8}, -{72,-21,9}, -{72,-21,10}, -{72,-21,11}, -{72,-21,12}, -{72,-21,13}, -{72,-21,14}, -{72,-21,15}, -{72,-21,16}, -{72,-21,17}, -{72,-21,18}, -{72,-21,19}, -{72,-21,20}, -{72,-21,21}, -{72,-21,22}, -{72,-21,23}, -{72,-21,24}, -{72,-21,25}, -{72,-21,26}, -{72,-21,27}, -{72,-21,28}, -{72,-21,29}, -{72,-21,30}, -{72,-21,31}, -{72,-21,32}, -{72,-21,33}, -{72,-21,34}, -{72,-21,35}, -{72,-21,36}, -{72,-21,37}, -{72,-21,38}, -{72,-21,39}, -{72,-21,40}, -{72,-21,41}, -{72,-21,42}, -{72,-21,43}, -{72,-21,44}, -{72,-21,45}, -{72,-21,46}, -{72,-21,47}, -{72,-21,48}, -{72,-21,49}, -{72,-21,50}, -{72,-21,51}, -{72,-21,52}, -{72,-21,53}, -{72,-21,54}, -{72,-21,55}, -{72,-21,56}, -{72,-21,57}, -{72,-21,58}, -{72,-21,59}, -{72,-21,60}, -{72,-21,61}, -{72,-21,62}, -{72,-21,63}, -{72,-21,64}, -{72,-21,65}, -{72,-21,66}, -{72,-21,67}, -{72,-21,68}, -{72,-21,69}, -{72,-21,70}, -{72,-21,71}, -{72,-21,72}, -{72,-21,73}, -{72,-20,-39}, -{72,-20,-38}, -{72,-20,-37}, -{72,-20,-36}, -{72,-20,-35}, -{72,-20,-34}, -{72,-20,-33}, -{72,-20,-32}, -{72,-20,-31}, -{72,-20,-30}, -{72,-20,-29}, -{72,-20,-28}, -{72,-20,-27}, -{72,-20,-26}, -{72,-20,-25}, -{72,-20,-24}, -{72,-20,-23}, -{72,-20,-22}, -{72,-20,-21}, -{72,-20,-20}, -{72,-20,-19}, -{72,-20,-18}, -{72,-20,-17}, -{72,-20,-16}, -{72,-20,-15}, -{72,-20,-14}, -{72,-20,-13}, -{72,-20,-12}, -{72,-20,-11}, -{72,-20,-10}, -{72,-20,-9}, -{72,-20,-8}, -{72,-20,-7}, -{72,-20,-6}, -{72,-20,-5}, -{72,-20,-4}, -{72,-20,-3}, -{72,-20,-2}, -{72,-20,-1}, -{72,-20,0}, -{72,-20,1}, -{72,-20,2}, -{72,-20,3}, -{72,-20,4}, -{72,-20,5}, -{72,-20,6}, -{72,-20,7}, -{72,-20,8}, -{72,-20,9}, -{72,-20,10}, -{72,-20,11}, -{72,-20,12}, -{72,-20,13}, -{72,-20,14}, -{72,-20,15}, -{72,-20,16}, -{72,-20,17}, -{72,-20,18}, -{72,-20,19}, -{72,-20,20}, -{72,-20,21}, -{72,-20,22}, -{72,-20,23}, -{72,-20,24}, -{72,-20,25}, -{72,-20,26}, -{72,-20,27}, -{72,-20,28}, -{72,-20,29}, -{72,-20,30}, -{72,-20,31}, -{72,-20,32}, -{72,-20,33}, -{72,-20,34}, -{72,-20,35}, -{72,-20,36}, -{72,-20,37}, -{72,-20,38}, -{72,-20,39}, -{72,-20,40}, -{72,-20,41}, -{72,-20,42}, -{72,-20,43}, -{72,-20,44}, -{72,-20,45}, -{72,-20,46}, -{72,-20,47}, -{72,-20,48}, -{72,-20,49}, -{72,-20,50}, -{72,-20,51}, -{72,-20,52}, -{72,-20,53}, -{72,-20,54}, -{72,-20,55}, -{72,-20,56}, -{72,-20,57}, -{72,-20,58}, -{72,-20,59}, -{72,-20,60}, -{72,-20,61}, -{72,-20,62}, -{72,-20,63}, -{72,-20,64}, -{72,-20,65}, -{72,-20,66}, -{72,-20,67}, -{72,-20,68}, -{72,-20,69}, -{72,-20,70}, -{72,-20,71}, -{72,-20,72}, -{72,-20,73}, -{72,-19,-40}, -{72,-19,-39}, -{72,-19,-38}, -{72,-19,-37}, -{72,-19,-36}, -{72,-19,-35}, -{72,-19,-34}, -{72,-19,-33}, -{72,-19,-32}, -{72,-19,-31}, -{72,-19,-30}, -{72,-19,-29}, -{72,-19,-28}, -{72,-19,-27}, -{72,-19,-26}, -{72,-19,-25}, -{72,-19,-24}, -{72,-19,-23}, -{72,-19,-22}, -{72,-19,-21}, -{72,-19,-20}, -{72,-19,-19}, -{72,-19,-18}, -{72,-19,-17}, -{72,-19,-16}, -{72,-19,-15}, -{72,-19,-14}, -{72,-19,-13}, -{72,-19,-12}, -{72,-19,-11}, -{72,-19,-10}, -{72,-19,-9}, -{72,-19,-8}, -{72,-19,-7}, -{72,-19,-6}, -{72,-19,-5}, -{72,-19,-4}, -{72,-19,-3}, -{72,-19,-2}, -{72,-19,-1}, -{72,-19,0}, -{72,-19,1}, -{72,-19,2}, -{72,-19,3}, -{72,-19,4}, -{72,-19,5}, -{72,-19,6}, -{72,-19,7}, -{72,-19,8}, -{72,-19,9}, -{72,-19,10}, -{72,-19,11}, -{72,-19,12}, -{72,-19,13}, -{72,-19,14}, -{72,-19,15}, -{72,-19,16}, -{72,-19,17}, -{72,-19,18}, -{72,-19,19}, -{72,-19,20}, -{72,-19,21}, -{72,-19,22}, -{72,-19,23}, -{72,-19,24}, -{72,-19,25}, -{72,-19,26}, -{72,-19,27}, -{72,-19,28}, -{72,-19,29}, -{72,-19,30}, -{72,-19,31}, -{72,-19,32}, -{72,-19,33}, -{72,-19,34}, -{72,-19,35}, -{72,-19,36}, -{72,-19,37}, -{72,-19,38}, -{72,-19,39}, -{72,-19,40}, -{72,-19,41}, -{72,-19,42}, -{72,-19,43}, -{72,-19,44}, -{72,-19,45}, -{72,-19,46}, -{72,-19,47}, -{72,-19,48}, -{72,-19,49}, -{72,-19,50}, -{72,-19,51}, -{72,-19,52}, -{72,-19,53}, -{72,-19,54}, -{72,-19,55}, -{72,-19,56}, -{72,-19,57}, -{72,-19,58}, -{72,-19,59}, -{72,-19,60}, -{72,-19,61}, -{72,-19,62}, -{72,-19,63}, -{72,-19,64}, -{72,-19,65}, -{72,-19,66}, -{72,-19,67}, -{72,-19,68}, -{72,-19,69}, -{72,-19,70}, -{72,-19,71}, -{72,-19,72}, -{72,-19,73}, -{72,-18,-41}, -{72,-18,-40}, -{72,-18,-39}, -{72,-18,-38}, -{72,-18,-37}, -{72,-18,-36}, -{72,-18,-35}, -{72,-18,-34}, -{72,-18,-33}, -{72,-18,-32}, -{72,-18,-31}, -{72,-18,-30}, -{72,-18,-29}, -{72,-18,-28}, -{72,-18,-27}, -{72,-18,-26}, -{72,-18,-25}, -{72,-18,-24}, -{72,-18,-23}, -{72,-18,-22}, -{72,-18,-21}, -{72,-18,-20}, -{72,-18,-19}, -{72,-18,-18}, -{72,-18,-17}, -{72,-18,-16}, -{72,-18,-15}, -{72,-18,-14}, -{72,-18,-13}, -{72,-18,-12}, -{72,-18,-11}, -{72,-18,-10}, -{72,-18,-9}, -{72,-18,-8}, -{72,-18,-7}, -{72,-18,-6}, -{72,-18,-5}, -{72,-18,-4}, -{72,-18,-3}, -{72,-18,-2}, -{72,-18,-1}, -{72,-18,0}, -{72,-18,1}, -{72,-18,2}, -{72,-18,3}, -{72,-18,4}, -{72,-18,5}, -{72,-18,6}, -{72,-18,7}, -{72,-18,8}, -{72,-18,9}, -{72,-18,10}, -{72,-18,11}, -{72,-18,12}, -{72,-18,13}, -{72,-18,14}, -{72,-18,15}, -{72,-18,16}, -{72,-18,17}, -{72,-18,18}, -{72,-18,19}, -{72,-18,20}, -{72,-18,21}, -{72,-18,22}, -{72,-18,23}, -{72,-18,24}, -{72,-18,25}, -{72,-18,26}, -{72,-18,27}, -{72,-18,28}, -{72,-18,29}, -{72,-18,30}, -{72,-18,31}, -{72,-18,32}, -{72,-18,33}, -{72,-18,34}, -{72,-18,35}, -{72,-18,36}, -{72,-18,37}, -{72,-18,38}, -{72,-18,39}, -{72,-18,40}, -{72,-18,41}, -{72,-18,42}, -{72,-18,43}, -{72,-18,44}, -{72,-18,45}, -{72,-18,46}, -{72,-18,47}, -{72,-18,48}, -{72,-18,49}, -{72,-18,50}, -{72,-18,51}, -{72,-18,52}, -{72,-18,53}, -{72,-18,54}, -{72,-18,55}, -{72,-18,56}, -{72,-18,57}, -{72,-18,58}, -{72,-18,59}, -{72,-18,60}, -{72,-18,61}, -{72,-18,62}, -{72,-18,63}, -{72,-18,64}, -{72,-18,65}, -{72,-18,66}, -{72,-18,67}, -{72,-18,68}, -{72,-18,69}, -{72,-18,70}, -{72,-18,71}, -{72,-18,72}, -{72,-18,73}, -{72,-17,-43}, -{72,-17,-42}, -{72,-17,-41}, -{72,-17,-40}, -{72,-17,-39}, -{72,-17,-38}, -{72,-17,-37}, -{72,-17,-36}, -{72,-17,-35}, -{72,-17,-34}, -{72,-17,-33}, -{72,-17,-32}, -{72,-17,-31}, -{72,-17,-30}, -{72,-17,-29}, -{72,-17,-28}, -{72,-17,-27}, -{72,-17,-26}, -{72,-17,-25}, -{72,-17,-24}, -{72,-17,-23}, -{72,-17,-22}, -{72,-17,-21}, -{72,-17,-20}, -{72,-17,-19}, -{72,-17,-18}, -{72,-17,-17}, -{72,-17,-16}, -{72,-17,-15}, -{72,-17,-14}, -{72,-17,-13}, -{72,-17,-12}, -{72,-17,-11}, -{72,-17,-10}, -{72,-17,-9}, -{72,-17,-8}, -{72,-17,-7}, -{72,-17,-6}, -{72,-17,-5}, -{72,-17,-4}, -{72,-17,-3}, -{72,-17,-2}, -{72,-17,-1}, -{72,-17,0}, -{72,-17,1}, -{72,-17,2}, -{72,-17,3}, -{72,-17,4}, -{72,-17,5}, -{72,-17,6}, -{72,-17,7}, -{72,-17,8}, -{72,-17,9}, -{72,-17,10}, -{72,-17,11}, -{72,-17,12}, -{72,-17,13}, -{72,-17,14}, -{72,-17,15}, -{72,-17,16}, -{72,-17,17}, -{72,-17,18}, -{72,-17,19}, -{72,-17,20}, -{72,-17,21}, -{72,-17,22}, -{72,-17,23}, -{72,-17,24}, -{72,-17,25}, -{72,-17,26}, -{72,-17,27}, -{72,-17,28}, -{72,-17,29}, -{72,-17,30}, -{72,-17,31}, -{72,-17,32}, -{72,-17,33}, -{72,-17,34}, -{72,-17,35}, -{72,-17,36}, -{72,-17,37}, -{72,-17,38}, -{72,-17,39}, -{72,-17,40}, -{72,-17,41}, -{72,-17,42}, -{72,-17,43}, -{72,-17,44}, -{72,-17,45}, -{72,-17,46}, -{72,-17,47}, -{72,-17,48}, -{72,-17,49}, -{72,-17,50}, -{72,-17,51}, -{72,-17,52}, -{72,-17,53}, -{72,-17,54}, -{72,-17,55}, -{72,-17,56}, -{72,-17,57}, -{72,-17,58}, -{72,-17,59}, -{72,-17,60}, -{72,-17,61}, -{72,-17,62}, -{72,-17,63}, -{72,-17,64}, -{72,-17,65}, -{72,-17,66}, -{72,-17,67}, -{72,-17,68}, -{72,-17,69}, -{72,-17,70}, -{72,-17,71}, -{72,-17,72}, -{72,-17,73}, -{72,-16,-43}, -{72,-16,-42}, -{72,-16,-41}, -{72,-16,-40}, -{72,-16,-39}, -{72,-16,-38}, -{72,-16,-37}, -{72,-16,-36}, -{72,-16,-35}, -{72,-16,-34}, -{72,-16,-33}, -{72,-16,-32}, -{72,-16,-31}, -{72,-16,-30}, -{72,-16,-29}, -{72,-16,-28}, -{72,-16,-27}, -{72,-16,-26}, -{72,-16,-25}, -{72,-16,-24}, -{72,-16,-23}, -{72,-16,-22}, -{72,-16,-21}, -{72,-16,-20}, -{72,-16,-19}, -{72,-16,-18}, -{72,-16,-17}, -{72,-16,-16}, -{72,-16,-15}, -{72,-16,-14}, -{72,-16,-13}, -{72,-16,-12}, -{72,-16,-11}, -{72,-16,-10}, -{72,-16,-9}, -{72,-16,-8}, -{72,-16,-7}, -{72,-16,-6}, -{72,-16,-5}, -{72,-16,-4}, -{72,-16,-3}, -{72,-16,-2}, -{72,-16,-1}, -{72,-16,0}, -{72,-16,1}, -{72,-16,2}, -{72,-16,3}, -{72,-16,4}, -{72,-16,5}, -{72,-16,6}, -{72,-16,7}, -{72,-16,8}, -{72,-16,9}, -{72,-16,10}, -{72,-16,11}, -{72,-16,12}, -{72,-16,13}, -{72,-16,14}, -{72,-16,15}, -{72,-16,16}, -{72,-16,17}, -{72,-16,18}, -{72,-16,19}, -{72,-16,20}, -{72,-16,21}, -{72,-16,22}, -{72,-16,23}, -{72,-16,24}, -{72,-16,25}, -{72,-16,26}, -{72,-16,27}, -{72,-16,28}, -{72,-16,29}, -{72,-16,30}, -{72,-16,31}, -{72,-16,32}, -{72,-16,33}, -{72,-16,34}, -{72,-16,35}, -{72,-16,36}, -{72,-16,37}, -{72,-16,38}, -{72,-16,39}, -{72,-16,40}, -{72,-16,41}, -{72,-16,42}, -{72,-16,43}, -{72,-16,44}, -{72,-16,45}, -{72,-16,46}, -{72,-16,47}, -{72,-16,48}, -{72,-16,49}, -{72,-16,50}, -{72,-16,51}, -{72,-16,52}, -{72,-16,53}, -{72,-16,54}, -{72,-16,55}, -{72,-16,56}, -{72,-16,57}, -{72,-16,58}, -{72,-16,59}, -{72,-16,60}, -{72,-16,61}, -{72,-16,62}, -{72,-16,63}, -{72,-16,64}, -{72,-16,65}, -{72,-16,66}, -{72,-16,67}, -{72,-16,68}, -{72,-16,69}, -{72,-16,70}, -{72,-16,71}, -{72,-16,72}, -{72,-16,73}, -{72,-15,-43}, -{72,-15,-42}, -{72,-15,-41}, -{72,-15,-40}, -{72,-15,-39}, -{72,-15,-38}, -{72,-15,-37}, -{72,-15,-36}, -{72,-15,-35}, -{72,-15,-34}, -{72,-15,-33}, -{72,-15,-32}, -{72,-15,-31}, -{72,-15,-30}, -{72,-15,-29}, -{72,-15,-28}, -{72,-15,-27}, -{72,-15,-26}, -{72,-15,-25}, -{72,-15,-24}, -{72,-15,-23}, -{72,-15,-22}, -{72,-15,-21}, -{72,-15,-20}, -{72,-15,-19}, -{72,-15,-18}, -{72,-15,-17}, -{72,-15,-16}, -{72,-15,-15}, -{72,-15,-14}, -{72,-15,-13}, -{72,-15,-12}, -{72,-15,-11}, -{72,-15,-10}, -{72,-15,-9}, -{72,-15,-8}, -{72,-15,-7}, -{72,-15,-6}, -{72,-15,-5}, -{72,-15,-4}, -{72,-15,-3}, -{72,-15,-2}, -{72,-15,-1}, -{72,-15,0}, -{72,-15,1}, -{72,-15,2}, -{72,-15,3}, -{72,-15,4}, -{72,-15,5}, -{72,-15,6}, -{72,-15,7}, -{72,-15,8}, -{72,-15,9}, -{72,-15,10}, -{72,-15,11}, -{72,-15,12}, -{72,-15,13}, -{72,-15,14}, -{72,-15,15}, -{72,-15,16}, -{72,-15,17}, -{72,-15,18}, -{72,-15,19}, -{72,-15,20}, -{72,-15,21}, -{72,-15,22}, -{72,-15,23}, -{72,-15,24}, -{72,-15,25}, -{72,-15,26}, -{72,-15,27}, -{72,-15,28}, -{72,-15,29}, -{72,-15,30}, -{72,-15,31}, -{72,-15,32}, -{72,-15,33}, -{72,-15,34}, -{72,-15,35}, -{72,-15,36}, -{72,-15,37}, -{72,-15,38}, -{72,-15,39}, -{72,-15,40}, -{72,-15,41}, -{72,-15,42}, -{72,-15,43}, -{72,-15,44}, -{72,-15,45}, -{72,-15,46}, -{72,-15,47}, -{72,-15,48}, -{72,-15,49}, -{72,-15,50}, -{72,-15,51}, -{72,-15,52}, -{72,-15,53}, -{72,-15,54}, -{72,-15,55}, -{72,-15,56}, -{72,-15,57}, -{72,-15,58}, -{72,-15,59}, -{72,-15,60}, -{72,-15,61}, -{72,-15,62}, -{72,-15,63}, -{72,-15,64}, -{72,-15,65}, -{72,-15,66}, -{72,-15,67}, -{72,-15,68}, -{72,-15,69}, -{72,-15,70}, -{72,-15,71}, -{72,-15,72}, -{72,-15,73}, -{72,-14,-43}, -{72,-14,-42}, -{72,-14,-41}, -{72,-14,-40}, -{72,-14,-39}, -{72,-14,-38}, -{72,-14,-37}, -{72,-14,-36}, -{72,-14,-35}, -{72,-14,-34}, -{72,-14,-33}, -{72,-14,-32}, -{72,-14,-31}, -{72,-14,-30}, -{72,-14,-29}, -{72,-14,-28}, -{72,-14,-27}, -{72,-14,-26}, -{72,-14,-25}, -{72,-14,-24}, -{72,-14,-23}, -{72,-14,-22}, -{72,-14,-21}, -{72,-14,-20}, -{72,-14,-19}, -{72,-14,-18}, -{72,-14,-17}, -{72,-14,-16}, -{72,-14,-15}, -{72,-14,-14}, -{72,-14,-13}, -{72,-14,-12}, -{72,-14,-11}, -{72,-14,-10}, -{72,-14,-9}, -{72,-14,-8}, -{72,-14,-7}, -{72,-14,-6}, -{72,-14,-5}, -{72,-14,-4}, -{72,-14,-3}, -{72,-14,-2}, -{72,-14,-1}, -{72,-14,0}, -{72,-14,1}, -{72,-14,2}, -{72,-14,3}, -{72,-14,4}, -{72,-14,5}, -{72,-14,6}, -{72,-14,7}, -{72,-14,8}, -{72,-14,9}, -{72,-14,10}, -{72,-14,11}, -{72,-14,12}, -{72,-14,13}, -{72,-14,14}, -{72,-14,15}, -{72,-14,16}, -{72,-14,17}, -{72,-14,18}, -{72,-14,19}, -{72,-14,20}, -{72,-14,21}, -{72,-14,22}, -{72,-14,23}, -{72,-14,24}, -{72,-14,25}, -{72,-14,26}, -{72,-14,27}, -{72,-14,28}, -{72,-14,29}, -{72,-14,30}, -{72,-14,31}, -{72,-14,32}, -{72,-14,33}, -{72,-14,34}, -{72,-14,35}, -{72,-14,36}, -{72,-14,37}, -{72,-14,38}, -{72,-14,39}, -{72,-14,40}, -{72,-14,41}, -{72,-14,42}, -{72,-14,43}, -{72,-14,44}, -{72,-14,45}, -{72,-14,46}, -{72,-14,47}, -{72,-14,48}, -{72,-14,49}, -{72,-14,50}, -{72,-14,51}, -{72,-14,52}, -{72,-14,53}, -{72,-14,54}, -{72,-14,55}, -{72,-14,56}, -{72,-14,57}, -{72,-14,58}, -{72,-14,59}, -{72,-14,60}, -{72,-14,61}, -{72,-14,62}, -{72,-14,63}, -{72,-14,64}, -{72,-14,65}, -{72,-14,66}, -{72,-14,67}, -{72,-14,68}, -{72,-14,69}, -{72,-14,70}, -{72,-14,71}, -{72,-14,72}, -{72,-14,73}, -{72,-13,-43}, -{72,-13,-42}, -{72,-13,-41}, -{72,-13,-40}, -{72,-13,-39}, -{72,-13,-38}, -{72,-13,-37}, -{72,-13,-36}, -{72,-13,-35}, -{72,-13,-34}, -{72,-13,-33}, -{72,-13,-32}, -{72,-13,-31}, -{72,-13,-30}, -{72,-13,-29}, -{72,-13,-28}, -{72,-13,-27}, -{72,-13,-26}, -{72,-13,-25}, -{72,-13,-24}, -{72,-13,-23}, -{72,-13,-22}, -{72,-13,-21}, -{72,-13,-20}, -{72,-13,-19}, -{72,-13,-18}, -{72,-13,-17}, -{72,-13,-16}, -{72,-13,-15}, -{72,-13,-14}, -{72,-13,-13}, -{72,-13,-12}, -{72,-13,-11}, -{72,-13,-10}, -{72,-13,-9}, -{72,-13,-8}, -{72,-13,-7}, -{72,-13,-6}, -{72,-13,-5}, -{72,-13,-4}, -{72,-13,-3}, -{72,-13,-2}, -{72,-13,-1}, -{72,-13,0}, -{72,-13,1}, -{72,-13,2}, -{72,-13,3}, -{72,-13,4}, -{72,-13,5}, -{72,-13,6}, -{72,-13,7}, -{72,-13,8}, -{72,-13,9}, -{72,-13,10}, -{72,-13,11}, -{72,-13,12}, -{72,-13,13}, -{72,-13,14}, -{72,-13,15}, -{72,-13,16}, -{72,-13,17}, -{72,-13,18}, -{72,-13,19}, -{72,-13,20}, -{72,-13,21}, -{72,-13,22}, -{72,-13,23}, -{72,-13,24}, -{72,-13,25}, -{72,-13,26}, -{72,-13,27}, -{72,-13,28}, -{72,-13,29}, -{72,-13,30}, -{72,-13,31}, -{72,-13,32}, -{72,-13,33}, -{72,-13,34}, -{72,-13,35}, -{72,-13,36}, -{72,-13,37}, -{72,-13,38}, -{72,-13,39}, -{72,-13,40}, -{72,-13,41}, -{72,-13,42}, -{72,-13,43}, -{72,-13,44}, -{72,-13,45}, -{72,-13,46}, -{72,-13,47}, -{72,-13,48}, -{72,-13,49}, -{72,-13,50}, -{72,-13,51}, -{72,-13,52}, -{72,-13,53}, -{72,-13,54}, -{72,-13,55}, -{72,-13,56}, -{72,-13,57}, -{72,-13,58}, -{72,-13,59}, -{72,-13,60}, -{72,-13,61}, -{72,-13,62}, -{72,-13,63}, -{72,-13,64}, -{72,-13,65}, -{72,-13,66}, -{72,-13,67}, -{72,-13,68}, -{72,-13,69}, -{72,-13,70}, -{72,-13,71}, -{72,-13,72}, -{72,-13,73}, -{72,-12,-43}, -{72,-12,-42}, -{72,-12,-41}, -{72,-12,-40}, -{72,-12,-39}, -{72,-12,-38}, -{72,-12,-37}, -{72,-12,-36}, -{72,-12,-35}, -{72,-12,-34}, -{72,-12,-33}, -{72,-12,-32}, -{72,-12,-31}, -{72,-12,-30}, -{72,-12,-29}, -{72,-12,-28}, -{72,-12,-27}, -{72,-12,-26}, -{72,-12,-25}, -{72,-12,-24}, -{72,-12,-23}, -{72,-12,-22}, -{72,-12,-21}, -{72,-12,-20}, -{72,-12,-19}, -{72,-12,-18}, -{72,-12,-17}, -{72,-12,-16}, -{72,-12,-15}, -{72,-12,-14}, -{72,-12,-13}, -{72,-12,-12}, -{72,-12,-11}, -{72,-12,-10}, -{72,-12,-9}, -{72,-12,-8}, -{72,-12,-7}, -{72,-12,-6}, -{72,-12,-5}, -{72,-12,-4}, -{72,-12,-3}, -{72,-12,-2}, -{72,-12,-1}, -{72,-12,0}, -{72,-12,1}, -{72,-12,2}, -{72,-12,3}, -{72,-12,4}, -{72,-12,5}, -{72,-12,6}, -{72,-12,7}, -{72,-12,8}, -{72,-12,9}, -{72,-12,10}, -{72,-12,11}, -{72,-12,12}, -{72,-12,13}, -{72,-12,14}, -{72,-12,15}, -{72,-12,16}, -{72,-12,17}, -{72,-12,18}, -{72,-12,19}, -{72,-12,20}, -{72,-12,21}, -{72,-12,22}, -{72,-12,23}, -{72,-12,24}, -{72,-12,25}, -{72,-12,26}, -{72,-12,27}, -{72,-12,28}, -{72,-12,29}, -{72,-12,30}, -{72,-12,31}, -{72,-12,32}, -{72,-12,33}, -{72,-12,34}, -{72,-12,35}, -{72,-12,36}, -{72,-12,37}, -{72,-12,38}, -{72,-12,39}, -{72,-12,40}, -{72,-12,41}, -{72,-12,42}, -{72,-12,43}, -{72,-12,44}, -{72,-12,45}, -{72,-12,46}, -{72,-12,47}, -{72,-12,48}, -{72,-12,49}, -{72,-12,50}, -{72,-12,51}, -{72,-12,52}, -{72,-12,53}, -{72,-12,54}, -{72,-12,55}, -{72,-12,56}, -{72,-12,57}, -{72,-12,58}, -{72,-12,59}, -{72,-12,60}, -{72,-12,61}, -{72,-12,62}, -{72,-12,63}, -{72,-12,64}, -{72,-12,65}, -{72,-12,66}, -{72,-12,67}, -{72,-12,68}, -{72,-12,69}, -{72,-12,70}, -{72,-12,71}, -{72,-12,72}, -{72,-12,73}, -{72,-11,-43}, -{72,-11,-42}, -{72,-11,-41}, -{72,-11,-40}, -{72,-11,-39}, -{72,-11,-38}, -{72,-11,-37}, -{72,-11,-36}, -{72,-11,-35}, -{72,-11,-34}, -{72,-11,-33}, -{72,-11,-32}, -{72,-11,-31}, -{72,-11,-30}, -{72,-11,-29}, -{72,-11,-28}, -{72,-11,-27}, -{72,-11,-26}, -{72,-11,-25}, -{72,-11,-24}, -{72,-11,-23}, -{72,-11,-22}, -{72,-11,-21}, -{72,-11,-20}, -{72,-11,-19}, -{72,-11,-18}, -{72,-11,-17}, -{72,-11,-16}, -{72,-11,-15}, -{72,-11,-14}, -{72,-11,-13}, -{72,-11,-12}, -{72,-11,-11}, -{72,-11,-10}, -{72,-11,-9}, -{72,-11,-8}, -{72,-11,-7}, -{72,-11,-6}, -{72,-11,-5}, -{72,-11,-4}, -{72,-11,-3}, -{72,-11,-2}, -{72,-11,-1}, -{72,-11,0}, -{72,-11,1}, -{72,-11,2}, -{72,-11,3}, -{72,-11,4}, -{72,-11,5}, -{72,-11,6}, -{72,-11,7}, -{72,-11,8}, -{72,-11,9}, -{72,-11,10}, -{72,-11,11}, -{72,-11,12}, -{72,-11,13}, -{72,-11,14}, -{72,-11,15}, -{72,-11,16}, -{72,-11,17}, -{72,-11,18}, -{72,-11,19}, -{72,-11,20}, -{72,-11,21}, -{72,-11,22}, -{72,-11,23}, -{72,-11,24}, -{72,-11,25}, -{72,-11,26}, -{72,-11,27}, -{72,-11,28}, -{72,-11,29}, -{72,-11,30}, -{72,-11,31}, -{72,-11,32}, -{72,-11,33}, -{72,-11,34}, -{72,-11,35}, -{72,-11,36}, -{72,-11,37}, -{72,-11,38}, -{72,-11,39}, -{72,-11,40}, -{72,-11,41}, -{72,-11,42}, -{72,-11,43}, -{72,-11,44}, -{72,-11,45}, -{72,-11,46}, -{72,-11,47}, -{72,-11,48}, -{72,-11,49}, -{72,-11,50}, -{72,-11,51}, -{72,-11,52}, -{72,-11,53}, -{72,-11,54}, -{72,-11,55}, -{72,-11,56}, -{72,-11,57}, -{72,-11,58}, -{72,-11,59}, -{72,-11,60}, -{72,-11,61}, -{72,-11,62}, -{72,-11,63}, -{72,-11,64}, -{72,-11,65}, -{72,-11,66}, -{72,-11,67}, -{72,-11,68}, -{72,-11,69}, -{72,-11,70}, -{72,-11,71}, -{72,-11,72}, -{72,-11,73}, -{72,-11,74}, -{72,-10,-43}, -{72,-10,-42}, -{72,-10,-41}, -{72,-10,-40}, -{72,-10,-39}, -{72,-10,-38}, -{72,-10,-37}, -{72,-10,-36}, -{72,-10,-35}, -{72,-10,-34}, -{72,-10,-33}, -{72,-10,-32}, -{72,-10,-31}, -{72,-10,-30}, -{72,-10,-29}, -{72,-10,-28}, -{72,-10,-27}, -{72,-10,-26}, -{72,-10,-25}, -{72,-10,-24}, -{72,-10,-23}, -{72,-10,-22}, -{72,-10,-21}, -{72,-10,-20}, -{72,-10,-19}, -{72,-10,-18}, -{72,-10,-17}, -{72,-10,-16}, -{72,-10,-15}, -{72,-10,-14}, -{72,-10,-13}, -{72,-10,-12}, -{72,-10,-11}, -{72,-10,-10}, -{72,-10,-9}, -{72,-10,-8}, -{72,-10,-7}, -{72,-10,-6}, -{72,-10,-5}, -{72,-10,-4}, -{72,-10,-3}, -{72,-10,-2}, -{72,-10,-1}, -{72,-10,0}, -{72,-10,1}, -{72,-10,2}, -{72,-10,3}, -{72,-10,4}, -{72,-10,5}, -{72,-10,6}, -{72,-10,7}, -{72,-10,8}, -{72,-10,9}, -{72,-10,10}, -{72,-10,11}, -{72,-10,12}, -{72,-10,13}, -{72,-10,14}, -{72,-10,15}, -{72,-10,16}, -{72,-10,17}, -{72,-10,18}, -{72,-10,19}, -{72,-10,20}, -{72,-10,21}, -{72,-10,22}, -{72,-10,23}, -{72,-10,24}, -{72,-10,25}, -{72,-10,26}, -{72,-10,27}, -{72,-10,28}, -{72,-10,29}, -{72,-10,30}, -{72,-10,31}, -{72,-10,32}, -{72,-10,33}, -{72,-10,34}, -{72,-10,35}, -{72,-10,36}, -{72,-10,37}, -{72,-10,38}, -{72,-10,39}, -{72,-10,40}, -{72,-10,41}, -{72,-10,42}, -{72,-10,43}, -{72,-10,44}, -{72,-10,45}, -{72,-10,46}, -{72,-10,47}, -{72,-10,48}, -{72,-10,49}, -{72,-10,50}, -{72,-10,51}, -{72,-10,52}, -{72,-10,53}, -{72,-10,54}, -{72,-10,55}, -{72,-10,56}, -{72,-10,57}, -{72,-10,58}, -{72,-10,59}, -{72,-10,60}, -{72,-10,61}, -{72,-10,62}, -{72,-10,63}, -{72,-10,64}, -{72,-10,65}, -{72,-10,66}, -{72,-10,67}, -{72,-10,68}, -{72,-10,69}, -{72,-10,70}, -{72,-10,71}, -{72,-10,72}, -{72,-10,73}, -{72,-10,74}, -{72,-9,-43}, -{72,-9,-42}, -{72,-9,-41}, -{72,-9,-40}, -{72,-9,-39}, -{72,-9,-38}, -{72,-9,-37}, -{72,-9,-36}, -{72,-9,-35}, -{72,-9,-34}, -{72,-9,-33}, -{72,-9,-32}, -{72,-9,-31}, -{72,-9,-30}, -{72,-9,-29}, -{72,-9,-28}, -{72,-9,-27}, -{72,-9,-26}, -{72,-9,-25}, -{72,-9,-24}, -{72,-9,-23}, -{72,-9,-22}, -{72,-9,-21}, -{72,-9,-20}, -{72,-9,-19}, -{72,-9,-18}, -{72,-9,-17}, -{72,-9,-16}, -{72,-9,-15}, -{72,-9,-14}, -{72,-9,-13}, -{72,-9,-12}, -{72,-9,-11}, -{72,-9,-10}, -{72,-9,-9}, -{72,-9,-8}, -{72,-9,-7}, -{72,-9,-6}, -{72,-9,-5}, -{72,-9,-4}, -{72,-9,-3}, -{72,-9,-2}, -{72,-9,-1}, -{72,-9,0}, -{72,-9,1}, -{72,-9,2}, -{72,-9,3}, -{72,-9,4}, -{72,-9,5}, -{72,-9,6}, -{72,-9,7}, -{72,-9,8}, -{72,-9,9}, -{72,-9,10}, -{72,-9,11}, -{72,-9,12}, -{72,-9,13}, -{72,-9,14}, -{72,-9,15}, -{72,-9,16}, -{72,-9,17}, -{72,-9,18}, -{72,-9,19}, -{72,-9,20}, -{72,-9,21}, -{72,-9,22}, -{72,-9,23}, -{72,-9,24}, -{72,-9,25}, -{72,-9,26}, -{72,-9,27}, -{72,-9,28}, -{72,-9,29}, -{72,-9,30}, -{72,-9,31}, -{72,-9,32}, -{72,-9,33}, -{72,-9,34}, -{72,-9,35}, -{72,-9,36}, -{72,-9,37}, -{72,-9,38}, -{72,-9,39}, -{72,-9,40}, -{72,-9,41}, -{72,-9,42}, -{72,-9,43}, -{72,-9,44}, -{72,-9,45}, -{72,-9,46}, -{72,-9,47}, -{72,-9,48}, -{72,-9,49}, -{72,-9,50}, -{72,-9,51}, -{72,-9,52}, -{72,-9,53}, -{72,-9,54}, -{72,-9,55}, -{72,-9,56}, -{72,-9,57}, -{72,-9,58}, -{72,-9,59}, -{72,-9,60}, -{72,-9,61}, -{72,-9,62}, -{72,-9,63}, -{72,-9,64}, -{72,-9,65}, -{72,-9,66}, -{72,-9,67}, -{72,-9,68}, -{72,-9,69}, -{72,-9,70}, -{72,-9,71}, -{72,-9,72}, -{72,-9,73}, -{72,-9,74}, -{72,-8,-43}, -{72,-8,-42}, -{72,-8,-41}, -{72,-8,-40}, -{72,-8,-39}, -{72,-8,-38}, -{72,-8,-37}, -{72,-8,-36}, -{72,-8,-35}, -{72,-8,-34}, -{72,-8,-33}, -{72,-8,-32}, -{72,-8,-31}, -{72,-8,-30}, -{72,-8,-29}, -{72,-8,-28}, -{72,-8,-27}, -{72,-8,-26}, -{72,-8,-25}, -{72,-8,-24}, -{72,-8,-23}, -{72,-8,-22}, -{72,-8,-21}, -{72,-8,-20}, -{72,-8,-19}, -{72,-8,-18}, -{72,-8,-17}, -{72,-8,-16}, -{72,-8,-15}, -{72,-8,-14}, -{72,-8,-13}, -{72,-8,-12}, -{72,-8,-11}, -{72,-8,-10}, -{72,-8,-9}, -{72,-8,-8}, -{72,-8,-7}, -{72,-8,-6}, -{72,-8,-5}, -{72,-8,-4}, -{72,-8,-3}, -{72,-8,-2}, -{72,-8,-1}, -{72,-8,0}, -{72,-8,1}, -{72,-8,2}, -{72,-8,3}, -{72,-8,4}, -{72,-8,5}, -{72,-8,6}, -{72,-8,7}, -{72,-8,8}, -{72,-8,9}, -{72,-8,10}, -{72,-8,11}, -{72,-8,12}, -{72,-8,13}, -{72,-8,14}, -{72,-8,15}, -{72,-8,16}, -{72,-8,17}, -{72,-8,18}, -{72,-8,19}, -{72,-8,20}, -{72,-8,21}, -{72,-8,22}, -{72,-8,23}, -{72,-8,24}, -{72,-8,25}, -{72,-8,26}, -{72,-8,27}, -{72,-8,28}, -{72,-8,29}, -{72,-8,30}, -{72,-8,31}, -{72,-8,32}, -{72,-8,33}, -{72,-8,34}, -{72,-8,35}, -{72,-8,36}, -{72,-8,37}, -{72,-8,38}, -{72,-8,39}, -{72,-8,40}, -{72,-8,41}, -{72,-8,42}, -{72,-8,43}, -{72,-8,44}, -{72,-8,45}, -{72,-8,46}, -{72,-8,47}, -{72,-8,48}, -{72,-8,49}, -{72,-8,50}, -{72,-8,51}, -{72,-8,52}, -{72,-8,53}, -{72,-8,54}, -{72,-8,55}, -{72,-8,56}, -{72,-8,57}, -{72,-8,58}, -{72,-8,59}, -{72,-8,60}, -{72,-8,61}, -{72,-8,62}, -{72,-8,63}, -{72,-8,64}, -{72,-8,65}, -{72,-8,66}, -{72,-8,67}, -{72,-8,68}, -{72,-8,69}, -{72,-8,70}, -{72,-8,71}, -{72,-8,72}, -{72,-8,73}, -{72,-8,74}, -{72,-7,-43}, -{72,-7,-42}, -{72,-7,-41}, -{72,-7,-40}, -{72,-7,-39}, -{72,-7,-38}, -{72,-7,-37}, -{72,-7,-36}, -{72,-7,-35}, -{72,-7,-34}, -{72,-7,-33}, -{72,-7,-32}, -{72,-7,-31}, -{72,-7,-30}, -{72,-7,-29}, -{72,-7,-28}, -{72,-7,-27}, -{72,-7,-26}, -{72,-7,-25}, -{72,-7,-24}, -{72,-7,-23}, -{72,-7,-22}, -{72,-7,-21}, -{72,-7,-20}, -{72,-7,-19}, -{72,-7,-18}, -{72,-7,-17}, -{72,-7,-16}, -{72,-7,-15}, -{72,-7,-14}, -{72,-7,-13}, -{72,-7,-12}, -{72,-7,-11}, -{72,-7,-10}, -{72,-7,-9}, -{72,-7,-8}, -{72,-7,-7}, -{72,-7,-6}, -{72,-7,-5}, -{72,-7,-4}, -{72,-7,-3}, -{72,-7,-2}, -{72,-7,-1}, -{72,-7,0}, -{72,-7,1}, -{72,-7,2}, -{72,-7,3}, -{72,-7,4}, -{72,-7,5}, -{72,-7,6}, -{72,-7,7}, -{72,-7,8}, -{72,-7,9}, -{72,-7,10}, -{72,-7,11}, -{72,-7,12}, -{72,-7,13}, -{72,-7,14}, -{72,-7,15}, -{72,-7,16}, -{72,-7,17}, -{72,-7,18}, -{72,-7,19}, -{72,-7,20}, -{72,-7,21}, -{72,-7,22}, -{72,-7,23}, -{72,-7,24}, -{72,-7,25}, -{72,-7,26}, -{72,-7,27}, -{72,-7,28}, -{72,-7,29}, -{72,-7,30}, -{72,-7,31}, -{72,-7,32}, -{72,-7,33}, -{72,-7,34}, -{72,-7,35}, -{72,-7,36}, -{72,-7,37}, -{72,-7,38}, -{72,-7,39}, -{72,-7,40}, -{72,-7,41}, -{72,-7,42}, -{72,-7,43}, -{72,-7,44}, -{72,-7,45}, -{72,-7,46}, -{72,-7,47}, -{72,-7,48}, -{72,-7,49}, -{72,-7,50}, -{72,-7,51}, -{72,-7,52}, -{72,-7,53}, -{72,-7,54}, -{72,-7,55}, -{72,-7,56}, -{72,-7,57}, -{72,-7,58}, -{72,-7,59}, -{72,-7,60}, -{72,-7,61}, -{72,-7,62}, -{72,-7,63}, -{72,-7,64}, -{72,-7,65}, -{72,-7,66}, -{72,-7,67}, -{72,-7,68}, -{72,-7,69}, -{72,-7,70}, -{72,-7,71}, -{72,-7,72}, -{72,-7,73}, -{72,-7,74}, -{72,-6,-43}, -{72,-6,-42}, -{72,-6,-41}, -{72,-6,-40}, -{72,-6,-39}, -{72,-6,-38}, -{72,-6,-37}, -{72,-6,-36}, -{72,-6,-35}, -{72,-6,-34}, -{72,-6,-33}, -{72,-6,-32}, -{72,-6,-31}, -{72,-6,-30}, -{72,-6,-29}, -{72,-6,-28}, -{72,-6,-27}, -{72,-6,-26}, -{72,-6,-25}, -{72,-6,-24}, -{72,-6,-23}, -{72,-6,-22}, -{72,-6,-21}, -{72,-6,-20}, -{72,-6,-19}, -{72,-6,-18}, -{72,-6,-17}, -{72,-6,-16}, -{72,-6,-15}, -{72,-6,-14}, -{72,-6,-13}, -{72,-6,-12}, -{72,-6,-11}, -{72,-6,-10}, -{72,-6,-9}, -{72,-6,-8}, -{72,-6,-7}, -{72,-6,-6}, -{72,-6,-5}, -{72,-6,-4}, -{72,-6,-3}, -{72,-6,-2}, -{72,-6,-1}, -{72,-6,0}, -{72,-6,1}, -{72,-6,2}, -{72,-6,3}, -{72,-6,4}, -{72,-6,5}, -{72,-6,6}, -{72,-6,7}, -{72,-6,8}, -{72,-6,9}, -{72,-6,10}, -{72,-6,11}, -{72,-6,12}, -{72,-6,13}, -{72,-6,14}, -{72,-6,15}, -{72,-6,16}, -{72,-6,17}, -{72,-6,18}, -{72,-6,19}, -{72,-6,20}, -{72,-6,21}, -{72,-6,22}, -{72,-6,23}, -{72,-6,24}, -{72,-6,25}, -{72,-6,26}, -{72,-6,27}, -{72,-6,28}, -{72,-6,29}, -{72,-6,30}, -{72,-6,31}, -{72,-6,32}, -{72,-6,33}, -{72,-6,34}, -{72,-6,35}, -{72,-6,36}, -{72,-6,37}, -{72,-6,38}, -{72,-6,39}, -{72,-6,40}, -{72,-6,41}, -{72,-6,42}, -{72,-6,43}, -{72,-6,44}, -{72,-6,45}, -{72,-6,46}, -{72,-6,47}, -{72,-6,48}, -{72,-6,49}, -{72,-6,50}, -{72,-6,51}, -{72,-6,52}, -{72,-6,53}, -{72,-6,54}, -{72,-6,55}, -{72,-6,56}, -{72,-6,57}, -{72,-6,58}, -{72,-6,59}, -{72,-6,60}, -{72,-6,61}, -{72,-6,62}, -{72,-6,63}, -{72,-6,64}, -{72,-6,65}, -{72,-6,66}, -{72,-6,67}, -{72,-6,68}, -{72,-6,69}, -{72,-6,70}, -{72,-6,71}, -{72,-6,72}, -{72,-6,73}, -{72,-6,74}, -{72,-5,-43}, -{72,-5,-42}, -{72,-5,-41}, -{72,-5,-40}, -{72,-5,-39}, -{72,-5,-38}, -{72,-5,-37}, -{72,-5,-36}, -{72,-5,-35}, -{72,-5,-34}, -{72,-5,-33}, -{72,-5,-32}, -{72,-5,-31}, -{72,-5,-30}, -{72,-5,-29}, -{72,-5,-28}, -{72,-5,-27}, -{72,-5,-26}, -{72,-5,-25}, -{72,-5,-24}, -{72,-5,-23}, -{72,-5,-22}, -{72,-5,-21}, -{72,-5,-20}, -{72,-5,-19}, -{72,-5,-18}, -{72,-5,-17}, -{72,-5,-16}, -{72,-5,-15}, -{72,-5,-14}, -{72,-5,-13}, -{72,-5,-12}, -{72,-5,-11}, -{72,-5,-10}, -{72,-5,-9}, -{72,-5,-8}, -{72,-5,-7}, -{72,-5,-6}, -{72,-5,-5}, -{72,-5,-4}, -{72,-5,-3}, -{72,-5,-2}, -{72,-5,-1}, -{72,-5,0}, -{72,-5,1}, -{72,-5,2}, -{72,-5,3}, -{72,-5,4}, -{72,-5,5}, -{72,-5,6}, -{72,-5,7}, -{72,-5,8}, -{72,-5,9}, -{72,-5,10}, -{72,-5,11}, -{72,-5,12}, -{72,-5,13}, -{72,-5,14}, -{72,-5,15}, -{72,-5,16}, -{72,-5,17}, -{72,-5,18}, -{72,-5,19}, -{72,-5,20}, -{72,-5,21}, -{72,-5,22}, -{72,-5,23}, -{72,-5,24}, -{72,-5,25}, -{72,-5,26}, -{72,-5,27}, -{72,-5,28}, -{72,-5,29}, -{72,-5,30}, -{72,-5,31}, -{72,-5,32}, -{72,-5,33}, -{72,-5,34}, -{72,-5,35}, -{72,-5,36}, -{72,-5,37}, -{72,-5,38}, -{72,-5,39}, -{72,-5,40}, -{72,-5,41}, -{72,-5,42}, -{72,-5,43}, -{72,-5,44}, -{72,-5,45}, -{72,-5,46}, -{72,-5,47}, -{72,-5,48}, -{72,-5,49}, -{72,-5,50}, -{72,-5,51}, -{72,-5,52}, -{72,-5,53}, -{72,-5,54}, -{72,-5,55}, -{72,-5,56}, -{72,-5,57}, -{72,-5,58}, -{72,-5,59}, -{72,-5,60}, -{72,-5,61}, -{72,-5,62}, -{72,-5,63}, -{72,-5,64}, -{72,-5,65}, -{72,-5,66}, -{72,-5,67}, -{72,-5,68}, -{72,-5,69}, -{72,-5,70}, -{72,-5,71}, -{72,-5,72}, -{72,-5,73}, -{72,-5,74}, -{72,-4,-43}, -{72,-4,-42}, -{72,-4,-41}, -{72,-4,-40}, -{72,-4,-39}, -{72,-4,-38}, -{72,-4,-37}, -{72,-4,-36}, -{72,-4,-35}, -{72,-4,-34}, -{72,-4,-33}, -{72,-4,-32}, -{72,-4,-31}, -{72,-4,-30}, -{72,-4,-29}, -{72,-4,-28}, -{72,-4,-27}, -{72,-4,-26}, -{72,-4,-25}, -{72,-4,-24}, -{72,-4,-23}, -{72,-4,-22}, -{72,-4,-21}, -{72,-4,-20}, -{72,-4,-19}, -{72,-4,-18}, -{72,-4,-17}, -{72,-4,-16}, -{72,-4,-15}, -{72,-4,-14}, -{72,-4,-13}, -{72,-4,-12}, -{72,-4,-11}, -{72,-4,-10}, -{72,-4,-9}, -{72,-4,-8}, -{72,-4,-7}, -{72,-4,-6}, -{72,-4,-5}, -{72,-4,-4}, -{72,-4,-3}, -{72,-4,-2}, -{72,-4,-1}, -{72,-4,0}, -{72,-4,1}, -{72,-4,2}, -{72,-4,3}, -{72,-4,4}, -{72,-4,5}, -{72,-4,6}, -{72,-4,7}, -{72,-4,8}, -{72,-4,9}, -{72,-4,10}, -{72,-4,11}, -{72,-4,12}, -{72,-4,13}, -{72,-4,14}, -{72,-4,15}, -{72,-4,16}, -{72,-4,17}, -{72,-4,18}, -{72,-4,19}, -{72,-4,20}, -{72,-4,21}, -{72,-4,22}, -{72,-4,23}, -{72,-4,24}, -{72,-4,25}, -{72,-4,26}, -{72,-4,27}, -{72,-4,28}, -{72,-4,29}, -{72,-4,30}, -{72,-4,31}, -{72,-4,32}, -{72,-4,33}, -{72,-4,34}, -{72,-4,35}, -{72,-4,36}, -{72,-4,37}, -{72,-4,38}, -{72,-4,39}, -{72,-4,40}, -{72,-4,41}, -{72,-4,42}, -{72,-4,43}, -{72,-4,44}, -{72,-4,45}, -{72,-4,46}, -{72,-4,47}, -{72,-4,48}, -{72,-4,49}, -{72,-4,50}, -{72,-4,51}, -{72,-4,52}, -{72,-4,53}, -{72,-4,54}, -{72,-4,55}, -{72,-4,56}, -{72,-4,57}, -{72,-4,58}, -{72,-4,59}, -{72,-4,60}, -{72,-4,61}, -{72,-4,62}, -{72,-4,63}, -{72,-4,64}, -{72,-4,65}, -{72,-4,66}, -{72,-4,67}, -{72,-4,68}, -{72,-4,69}, -{72,-4,70}, -{72,-4,71}, -{72,-4,72}, -{72,-4,73}, -{72,-4,74}, -{72,-3,-43}, -{72,-3,-42}, -{72,-3,-41}, -{72,-3,-40}, -{72,-3,-39}, -{72,-3,-38}, -{72,-3,-37}, -{72,-3,-36}, -{72,-3,-35}, -{72,-3,-34}, -{72,-3,-33}, -{72,-3,-32}, -{72,-3,-31}, -{72,-3,-30}, -{72,-3,-29}, -{72,-3,-28}, -{72,-3,-27}, -{72,-3,-26}, -{72,-3,-25}, -{72,-3,-24}, -{72,-3,-23}, -{72,-3,-22}, -{72,-3,-21}, -{72,-3,-20}, -{72,-3,-19}, -{72,-3,-18}, -{72,-3,-17}, -{72,-3,-16}, -{72,-3,-15}, -{72,-3,-14}, -{72,-3,-13}, -{72,-3,-12}, -{72,-3,-11}, -{72,-3,-10}, -{72,-3,-9}, -{72,-3,-8}, -{72,-3,-7}, -{72,-3,-6}, -{72,-3,-5}, -{72,-3,-4}, -{72,-3,-3}, -{72,-3,-2}, -{72,-3,-1}, -{72,-3,0}, -{72,-3,1}, -{72,-3,2}, -{72,-3,3}, -{72,-3,4}, -{72,-3,5}, -{72,-3,6}, -{72,-3,7}, -{72,-3,8}, -{72,-3,9}, -{72,-3,10}, -{72,-3,11}, -{72,-3,12}, -{72,-3,13}, -{72,-3,14}, -{72,-3,15}, -{72,-3,16}, -{72,-3,17}, -{72,-3,18}, -{72,-3,19}, -{72,-3,20}, -{72,-3,21}, -{72,-3,22}, -{72,-3,23}, -{72,-3,24}, -{72,-3,25}, -{72,-3,26}, -{72,-3,27}, -{72,-3,28}, -{72,-3,29}, -{72,-3,30}, -{72,-3,31}, -{72,-3,32}, -{72,-3,33}, -{72,-3,34}, -{72,-3,35}, -{72,-3,36}, -{72,-3,37}, -{72,-3,38}, -{72,-3,39}, -{72,-3,40}, -{72,-3,41}, -{72,-3,42}, -{72,-3,43}, -{72,-3,44}, -{72,-3,45}, -{72,-3,46}, -{72,-3,47}, -{72,-3,48}, -{72,-3,49}, -{72,-3,50}, -{72,-3,51}, -{72,-3,52}, -{72,-3,53}, -{72,-3,54}, -{72,-3,55}, -{72,-3,56}, -{72,-3,57}, -{72,-3,58}, -{72,-3,59}, -{72,-3,60}, -{72,-3,61}, -{72,-3,62}, -{72,-3,63}, -{72,-3,64}, -{72,-3,65}, -{72,-3,66}, -{72,-3,67}, -{72,-3,68}, -{72,-3,69}, -{72,-3,70}, -{72,-3,71}, -{72,-3,72}, -{72,-3,73}, -{72,-3,74}, -{72,-2,-43}, -{72,-2,-42}, -{72,-2,-41}, -{72,-2,-40}, -{72,-2,-39}, -{72,-2,-38}, -{72,-2,-37}, -{72,-2,-36}, -{72,-2,-35}, -{72,-2,-34}, -{72,-2,-33}, -{72,-2,-32}, -{72,-2,-31}, -{72,-2,-30}, -{72,-2,-29}, -{72,-2,-28}, -{72,-2,-27}, -{72,-2,-26}, -{72,-2,-25}, -{72,-2,-24}, -{72,-2,-23}, -{72,-2,-22}, -{72,-2,-21}, -{72,-2,-20}, -{72,-2,-19}, -{72,-2,-18}, -{72,-2,-17}, -{72,-2,-16}, -{72,-2,-15}, -{72,-2,-14}, -{72,-2,-13}, -{72,-2,-12}, -{72,-2,-11}, -{72,-2,-10}, -{72,-2,-9}, -{72,-2,-8}, -{72,-2,-7}, -{72,-2,-6}, -{72,-2,-5}, -{72,-2,-4}, -{72,-2,-3}, -{72,-2,-2}, -{72,-2,-1}, -{72,-2,0}, -{72,-2,1}, -{72,-2,2}, -{72,-2,3}, -{72,-2,4}, -{72,-2,5}, -{72,-2,6}, -{72,-2,7}, -{72,-2,8}, -{72,-2,9}, -{72,-2,10}, -{72,-2,11}, -{72,-2,12}, -{72,-2,13}, -{72,-2,14}, -{72,-2,15}, -{72,-2,16}, -{72,-2,17}, -{72,-2,18}, -{72,-2,19}, -{72,-2,20}, -{72,-2,21}, -{72,-2,22}, -{72,-2,23}, -{72,-2,24}, -{72,-2,25}, -{72,-2,26}, -{72,-2,27}, -{72,-2,28}, -{72,-2,29}, -{72,-2,30}, -{72,-2,31}, -{72,-2,32}, -{72,-2,33}, -{72,-2,34}, -{72,-2,35}, -{72,-2,36}, -{72,-2,37}, -{72,-2,38}, -{72,-2,39}, -{72,-2,40}, -{72,-2,41}, -{72,-2,42}, -{72,-2,43}, -{72,-2,44}, -{72,-2,45}, -{72,-2,46}, -{72,-2,47}, -{72,-2,48}, -{72,-2,49}, -{72,-2,50}, -{72,-2,51}, -{72,-2,52}, -{72,-2,53}, -{72,-2,54}, -{72,-2,55}, -{72,-2,56}, -{72,-2,57}, -{72,-2,58}, -{72,-2,59}, -{72,-2,60}, -{72,-2,61}, -{72,-2,62}, -{72,-2,63}, -{72,-2,64}, -{72,-2,65}, -{72,-2,66}, -{72,-2,67}, -{72,-2,68}, -{72,-2,69}, -{72,-2,70}, -{72,-2,71}, -{72,-2,72}, -{72,-2,73}, -{72,-2,74}, -{72,-1,-43}, -{72,-1,-42}, -{72,-1,-41}, -{72,-1,-40}, -{72,-1,-39}, -{72,-1,-38}, -{72,-1,-37}, -{72,-1,-36}, -{72,-1,-35}, -{72,-1,-34}, -{72,-1,-33}, -{72,-1,-32}, -{72,-1,-31}, -{72,-1,-30}, -{72,-1,-29}, -{72,-1,-28}, -{72,-1,-27}, -{72,-1,-26}, -{72,-1,-25}, -{72,-1,-24}, -{72,-1,-23}, -{72,-1,-22}, -{72,-1,-21}, -{72,-1,-20}, -{72,-1,-19}, -{72,-1,-18}, -{72,-1,-17}, -{72,-1,-16}, -{72,-1,-15}, -{72,-1,-14}, -{72,-1,-13}, -{72,-1,-12}, -{72,-1,-11}, -{72,-1,-10}, -{72,-1,-9}, -{72,-1,-8}, -{72,-1,-7}, -{72,-1,-6}, -{72,-1,-5}, -{72,-1,-4}, -{72,-1,-3}, -{72,-1,-2}, -{72,-1,-1}, -{72,-1,0}, -{72,-1,1}, -{72,-1,2}, -{72,-1,3}, -{72,-1,4}, -{72,-1,5}, -{72,-1,6}, -{72,-1,7}, -{72,-1,8}, -{72,-1,9}, -{72,-1,10}, -{72,-1,11}, -{72,-1,12}, -{72,-1,13}, -{72,-1,14}, -{72,-1,15}, -{72,-1,16}, -{72,-1,17}, -{72,-1,18}, -{72,-1,19}, -{72,-1,20}, -{72,-1,21}, -{72,-1,22}, -{72,-1,23}, -{72,-1,24}, -{72,-1,25}, -{72,-1,26}, -{72,-1,27}, -{72,-1,28}, -{72,-1,29}, -{72,-1,30}, -{72,-1,31}, -{72,-1,32}, -{72,-1,33}, -{72,-1,34}, -{72,-1,35}, -{72,-1,36}, -{72,-1,37}, -{72,-1,38}, -{72,-1,39}, -{72,-1,40}, -{72,-1,41}, -{72,-1,42}, -{72,-1,43}, -{72,-1,44}, -{72,-1,45}, -{72,-1,46}, -{72,-1,47}, -{72,-1,48}, -{72,-1,49}, -{72,-1,50}, -{72,-1,51}, -{72,-1,52}, -{72,-1,53}, -{72,-1,54}, -{72,-1,55}, -{72,-1,56}, -{72,-1,57}, -{72,-1,58}, -{72,-1,59}, -{72,-1,60}, -{72,-1,61}, -{72,-1,62}, -{72,-1,63}, -{72,-1,64}, -{72,-1,65}, -{72,-1,66}, -{72,-1,67}, -{72,-1,68}, -{72,-1,69}, -{72,-1,70}, -{72,-1,71}, -{72,-1,72}, -{72,-1,73}, -{72,-1,74}, -{72,0,-43}, -{72,0,-42}, -{72,0,-41}, -{72,0,-40}, -{72,0,-39}, -{72,0,-38}, -{72,0,-37}, -{72,0,-36}, -{72,0,-35}, -{72,0,-34}, -{72,0,-33}, -{72,0,-32}, -{72,0,-31}, -{72,0,-30}, -{72,0,-29}, -{72,0,-28}, -{72,0,-27}, -{72,0,-26}, -{72,0,-25}, -{72,0,-24}, -{72,0,-23}, -{72,0,-22}, -{72,0,-21}, -{72,0,-20}, -{72,0,-19}, -{72,0,-18}, -{72,0,-17}, -{72,0,-16}, -{72,0,-15}, -{72,0,-14}, -{72,0,-13}, -{72,0,-12}, -{72,0,-11}, -{72,0,-10}, -{72,0,-9}, -{72,0,-8}, -{72,0,-7}, -{72,0,-6}, -{72,0,-5}, -{72,0,-4}, -{72,0,-3}, -{72,0,-2}, -{72,0,-1}, -{72,0,0}, -{72,0,1}, -{72,0,2}, -{72,0,3}, -{72,0,4}, -{72,0,5}, -{72,0,6}, -{72,0,7}, -{72,0,8}, -{72,0,9}, -{72,0,10}, -{72,0,11}, -{72,0,12}, -{72,0,13}, -{72,0,14}, -{72,0,15}, -{72,0,16}, -{72,0,17}, -{72,0,18}, -{72,0,19}, -{72,0,20}, -{72,0,21}, -{72,0,22}, -{72,0,23}, -{72,0,24}, -{72,0,25}, -{72,0,26}, -{72,0,27}, -{72,0,28}, -{72,0,29}, -{72,0,30}, -{72,0,31}, -{72,0,32}, -{72,0,33}, -{72,0,34}, -{72,0,35}, -{72,0,36}, -{72,0,37}, -{72,0,38}, -{72,0,39}, -{72,0,40}, -{72,0,41}, -{72,0,42}, -{72,0,43}, -{72,0,44}, -{72,0,45}, -{72,0,46}, -{72,0,47}, -{72,0,48}, -{72,0,49}, -{72,0,50}, -{72,0,51}, -{72,0,52}, -{72,0,53}, -{72,0,54}, -{72,0,55}, -{72,0,56}, -{72,0,57}, -{72,0,58}, -{72,0,59}, -{72,0,60}, -{72,0,61}, -{72,0,62}, -{72,0,63}, -{72,0,64}, -{72,0,65}, -{72,0,66}, -{72,0,67}, -{72,0,68}, -{72,0,69}, -{72,0,70}, -{72,0,71}, -{72,0,72}, -{72,0,73}, -{72,0,74}, -{72,1,-43}, -{72,1,-42}, -{72,1,-41}, -{72,1,-40}, -{72,1,-39}, -{72,1,-38}, -{72,1,-37}, -{72,1,-36}, -{72,1,-35}, -{72,1,-34}, -{72,1,-33}, -{72,1,-32}, -{72,1,-31}, -{72,1,-30}, -{72,1,-29}, -{72,1,-28}, -{72,1,-27}, -{72,1,-26}, -{72,1,-25}, -{72,1,-24}, -{72,1,-23}, -{72,1,-22}, -{72,1,-21}, -{72,1,-20}, -{72,1,-19}, -{72,1,-18}, -{72,1,-17}, -{72,1,-16}, -{72,1,-15}, -{72,1,-14}, -{72,1,-13}, -{72,1,-12}, -{72,1,-11}, -{72,1,-10}, -{72,1,-9}, -{72,1,-8}, -{72,1,-7}, -{72,1,-6}, -{72,1,-5}, -{72,1,-4}, -{72,1,-3}, -{72,1,-2}, -{72,1,-1}, -{72,1,0}, -{72,1,1}, -{72,1,2}, -{72,1,3}, -{72,1,4}, -{72,1,5}, -{72,1,6}, -{72,1,7}, -{72,1,8}, -{72,1,9}, -{72,1,10}, -{72,1,11}, -{72,1,12}, -{72,1,13}, -{72,1,14}, -{72,1,15}, -{72,1,16}, -{72,1,17}, -{72,1,18}, -{72,1,19}, -{72,1,20}, -{72,1,21}, -{72,1,22}, -{72,1,23}, -{72,1,24}, -{72,1,25}, -{72,1,26}, -{72,1,27}, -{72,1,28}, -{72,1,29}, -{72,1,30}, -{72,1,31}, -{72,1,32}, -{72,1,33}, -{72,1,34}, -{72,1,35}, -{72,1,36}, -{72,1,37}, -{72,1,38}, -{72,1,39}, -{72,1,40}, -{72,1,41}, -{72,1,42}, -{72,1,43}, -{72,1,44}, -{72,1,45}, -{72,1,46}, -{72,1,47}, -{72,1,48}, -{72,1,49}, -{72,1,50}, -{72,1,51}, -{72,1,52}, -{72,1,53}, -{72,1,54}, -{72,1,55}, -{72,1,56}, -{72,1,57}, -{72,1,58}, -{72,1,59}, -{72,1,60}, -{72,1,61}, -{72,1,62}, -{72,1,63}, -{72,1,64}, -{72,1,65}, -{72,1,66}, -{72,1,67}, -{72,1,68}, -{72,1,69}, -{72,1,70}, -{72,1,71}, -{72,1,72}, -{72,1,73}, -{72,1,74}, -{72,2,-43}, -{72,2,-42}, -{72,2,-41}, -{72,2,-40}, -{72,2,-39}, -{72,2,-38}, -{72,2,-37}, -{72,2,-36}, -{72,2,-35}, -{72,2,-34}, -{72,2,-33}, -{72,2,-32}, -{72,2,-31}, -{72,2,-30}, -{72,2,-29}, -{72,2,-28}, -{72,2,-27}, -{72,2,-26}, -{72,2,-25}, -{72,2,-24}, -{72,2,-23}, -{72,2,-22}, -{72,2,-21}, -{72,2,-20}, -{72,2,-19}, -{72,2,-18}, -{72,2,-17}, -{72,2,-16}, -{72,2,-15}, -{72,2,-14}, -{72,2,-13}, -{72,2,-12}, -{72,2,-11}, -{72,2,-10}, -{72,2,-9}, -{72,2,-8}, -{72,2,-7}, -{72,2,-6}, -{72,2,-5}, -{72,2,-4}, -{72,2,-3}, -{72,2,-2}, -{72,2,-1}, -{72,2,0}, -{72,2,1}, -{72,2,2}, -{72,2,3}, -{72,2,4}, -{72,2,5}, -{72,2,6}, -{72,2,7}, -{72,2,8}, -{72,2,9}, -{72,2,10}, -{72,2,11}, -{72,2,12}, -{72,2,13}, -{72,2,14}, -{72,2,15}, -{72,2,16}, -{72,2,17}, -{72,2,18}, -{72,2,19}, -{72,2,20}, -{72,2,21}, -{72,2,22}, -{72,2,23}, -{72,2,24}, -{72,2,25}, -{72,2,26}, -{72,2,27}, -{72,2,28}, -{72,2,29}, -{72,2,30}, -{72,2,31}, -{72,2,32}, -{72,2,33}, -{72,2,34}, -{72,2,35}, -{72,2,36}, -{72,2,37}, -{72,2,38}, -{72,2,39}, -{72,2,40}, -{72,2,41}, -{72,2,42}, -{72,2,43}, -{72,2,44}, -{72,2,45}, -{72,2,46}, -{72,2,47}, -{72,2,48}, -{72,2,49}, -{72,2,50}, -{72,2,51}, -{72,2,52}, -{72,2,53}, -{72,2,54}, -{72,2,55}, -{72,2,56}, -{72,2,57}, -{72,2,58}, -{72,2,59}, -{72,2,60}, -{72,2,61}, -{72,2,62}, -{72,2,63}, -{72,2,64}, -{72,2,65}, -{72,2,66}, -{72,2,67}, -{72,2,68}, -{72,2,69}, -{72,2,70}, -{72,2,71}, -{72,2,72}, -{72,2,73}, -{72,2,74}, -{72,3,-43}, -{72,3,-42}, -{72,3,-41}, -{72,3,-40}, -{72,3,-39}, -{72,3,-38}, -{72,3,-37}, -{72,3,-36}, -{72,3,-35}, -{72,3,-34}, -{72,3,-33}, -{72,3,-32}, -{72,3,-31}, -{72,3,-30}, -{72,3,-29}, -{72,3,-28}, -{72,3,-27}, -{72,3,-26}, -{72,3,-25}, -{72,3,-24}, -{72,3,-23}, -{72,3,-22}, -{72,3,-21}, -{72,3,-20}, -{72,3,-19}, -{72,3,-18}, -{72,3,-17}, -{72,3,-16}, -{72,3,-15}, -{72,3,-14}, -{72,3,-13}, -{72,3,-12}, -{72,3,-11}, -{72,3,-10}, -{72,3,-9}, -{72,3,-8}, -{72,3,-7}, -{72,3,-6}, -{72,3,-5}, -{72,3,-4}, -{72,3,-3}, -{72,3,-2}, -{72,3,-1}, -{72,3,0}, -{72,3,1}, -{72,3,2}, -{72,3,3}, -{72,3,4}, -{72,3,5}, -{72,3,6}, -{72,3,7}, -{72,3,8}, -{72,3,9}, -{72,3,10}, -{72,3,11}, -{72,3,12}, -{72,3,13}, -{72,3,14}, -{72,3,15}, -{72,3,16}, -{72,3,17}, -{72,3,18}, -{72,3,19}, -{72,3,20}, -{72,3,21}, -{72,3,22}, -{72,3,23}, -{72,3,24}, -{72,3,25}, -{72,3,26}, -{72,3,27}, -{72,3,28}, -{72,3,29}, -{72,3,30}, -{72,3,31}, -{72,3,32}, -{72,3,33}, -{72,3,34}, -{72,3,35}, -{72,3,36}, -{72,3,37}, -{72,3,38}, -{72,3,39}, -{72,3,40}, -{72,3,41}, -{72,3,42}, -{72,3,43}, -{72,3,44}, -{72,3,45}, -{72,3,46}, -{72,3,47}, -{72,3,48}, -{72,3,49}, -{72,3,50}, -{72,3,51}, -{72,3,52}, -{72,3,53}, -{72,3,54}, -{72,3,55}, -{72,3,56}, -{72,3,57}, -{72,3,58}, -{72,3,59}, -{72,3,60}, -{72,3,61}, -{72,3,62}, -{72,3,63}, -{72,3,64}, -{72,3,65}, -{72,3,66}, -{72,3,67}, -{72,3,68}, -{72,3,69}, -{72,3,70}, -{72,3,71}, -{72,3,72}, -{72,3,73}, -{72,3,74}, -{72,3,75}, -{72,4,-43}, -{72,4,-42}, -{72,4,-41}, -{72,4,-40}, -{72,4,-39}, -{72,4,-38}, -{72,4,-37}, -{72,4,-36}, -{72,4,-35}, -{72,4,-34}, -{72,4,-33}, -{72,4,-32}, -{72,4,-31}, -{72,4,-30}, -{72,4,-29}, -{72,4,-28}, -{72,4,-27}, -{72,4,-26}, -{72,4,-25}, -{72,4,-24}, -{72,4,-23}, -{72,4,-22}, -{72,4,-21}, -{72,4,-20}, -{72,4,-19}, -{72,4,-18}, -{72,4,-17}, -{72,4,-16}, -{72,4,-15}, -{72,4,-14}, -{72,4,-13}, -{72,4,-12}, -{72,4,-11}, -{72,4,-10}, -{72,4,-9}, -{72,4,-8}, -{72,4,-7}, -{72,4,-6}, -{72,4,-5}, -{72,4,-4}, -{72,4,-3}, -{72,4,-2}, -{72,4,-1}, -{72,4,0}, -{72,4,1}, -{72,4,2}, -{72,4,3}, -{72,4,4}, -{72,4,5}, -{72,4,6}, -{72,4,7}, -{72,4,8}, -{72,4,9}, -{72,4,10}, -{72,4,11}, -{72,4,12}, -{72,4,13}, -{72,4,14}, -{72,4,15}, -{72,4,16}, -{72,4,17}, -{72,4,18}, -{72,4,19}, -{72,4,20}, -{72,4,21}, -{72,4,22}, -{72,4,23}, -{72,4,24}, -{72,4,25}, -{72,4,26}, -{72,4,27}, -{72,4,28}, -{72,4,29}, -{72,4,30}, -{72,4,31}, -{72,4,32}, -{72,4,33}, -{72,4,34}, -{72,4,35}, -{72,4,36}, -{72,4,37}, -{72,4,38}, -{72,4,39}, -{72,4,40}, -{72,4,41}, -{72,4,42}, -{72,4,43}, -{72,4,44}, -{72,4,45}, -{72,4,46}, -{72,4,47}, -{72,4,48}, -{72,4,49}, -{72,4,50}, -{72,4,51}, -{72,4,52}, -{72,4,53}, -{72,4,54}, -{72,4,55}, -{72,4,56}, -{72,4,57}, -{72,4,58}, -{72,4,59}, -{72,4,60}, -{72,4,61}, -{72,4,62}, -{72,4,63}, -{72,4,64}, -{72,4,65}, -{72,4,66}, -{72,4,67}, -{72,4,68}, -{72,4,69}, -{72,4,70}, -{72,4,71}, -{72,4,72}, -{72,4,73}, -{72,4,74}, -{72,4,75}, -{72,5,-43}, -{72,5,-42}, -{72,5,-41}, -{72,5,-40}, -{72,5,-39}, -{72,5,-38}, -{72,5,-37}, -{72,5,-36}, -{72,5,-35}, -{72,5,-34}, -{72,5,-33}, -{72,5,-32}, -{72,5,-31}, -{72,5,-30}, -{72,5,-29}, -{72,5,-28}, -{72,5,-27}, -{72,5,-26}, -{72,5,-25}, -{72,5,-24}, -{72,5,-23}, -{72,5,-22}, -{72,5,-21}, -{72,5,-20}, -{72,5,-19}, -{72,5,-18}, -{72,5,-17}, -{72,5,-16}, -{72,5,-15}, -{72,5,-14}, -{72,5,-13}, -{72,5,-12}, -{72,5,-11}, -{72,5,-10}, -{72,5,-9}, -{72,5,-8}, -{72,5,-7}, -{72,5,-6}, -{72,5,-5}, -{72,5,-4}, -{72,5,-3}, -{72,5,-2}, -{72,5,-1}, -{72,5,0}, -{72,5,1}, -{72,5,2}, -{72,5,3}, -{72,5,4}, -{72,5,5}, -{72,5,6}, -{72,5,7}, -{72,5,8}, -{72,5,9}, -{72,5,10}, -{72,5,11}, -{72,5,12}, -{72,5,13}, -{72,5,14}, -{72,5,15}, -{72,5,16}, -{72,5,17}, -{72,5,18}, -{72,5,19}, -{72,5,20}, -{72,5,21}, -{72,5,22}, -{72,5,23}, -{72,5,24}, -{72,5,25}, -{72,5,26}, -{72,5,27}, -{72,5,28}, -{72,5,29}, -{72,5,30}, -{72,5,31}, -{72,5,32}, -{72,5,33}, -{72,5,34}, -{72,5,35}, -{72,5,36}, -{72,5,37}, -{72,5,38}, -{72,5,39}, -{72,5,40}, -{72,5,41}, -{72,5,42}, -{72,5,43}, -{72,5,44}, -{72,5,45}, -{72,5,46}, -{72,5,47}, -{72,5,48}, -{72,5,49}, -{72,5,50}, -{72,5,51}, -{72,5,52}, -{72,5,53}, -{72,5,54}, -{72,5,55}, -{72,5,56}, -{72,5,57}, -{72,5,58}, -{72,5,59}, -{72,5,60}, -{72,5,61}, -{72,5,62}, -{72,5,63}, -{72,5,64}, -{72,5,65}, -{72,5,66}, -{72,5,67}, -{72,5,68}, -{72,5,69}, -{72,5,70}, -{72,5,71}, -{72,5,72}, -{72,5,73}, -{72,5,74}, -{72,5,75}, -{72,6,-43}, -{72,6,-42}, -{72,6,-41}, -{72,6,-40}, -{72,6,-39}, -{72,6,-38}, -{72,6,-37}, -{72,6,-36}, -{72,6,-35}, -{72,6,-34}, -{72,6,-33}, -{72,6,-32}, -{72,6,-31}, -{72,6,-30}, -{72,6,-29}, -{72,6,-28}, -{72,6,-27}, -{72,6,-26}, -{72,6,-25}, -{72,6,-24}, -{72,6,-23}, -{72,6,-22}, -{72,6,-21}, -{72,6,-20}, -{72,6,-19}, -{72,6,-18}, -{72,6,-17}, -{72,6,-16}, -{72,6,-15}, -{72,6,-14}, -{72,6,-13}, -{72,6,-12}, -{72,6,-11}, -{72,6,-10}, -{72,6,-9}, -{72,6,-8}, -{72,6,-7}, -{72,6,-6}, -{72,6,-5}, -{72,6,-4}, -{72,6,-3}, -{72,6,-2}, -{72,6,-1}, -{72,6,0}, -{72,6,1}, -{72,6,2}, -{72,6,3}, -{72,6,4}, -{72,6,5}, -{72,6,6}, -{72,6,7}, -{72,6,8}, -{72,6,9}, -{72,6,10}, -{72,6,11}, -{72,6,12}, -{72,6,13}, -{72,6,14}, -{72,6,15}, -{72,6,16}, -{72,6,17}, -{72,6,18}, -{72,6,19}, -{72,6,20}, -{72,6,21}, -{72,6,22}, -{72,6,23}, -{72,6,24}, -{72,6,25}, -{72,6,26}, -{72,6,27}, -{72,6,28}, -{72,6,29}, -{72,6,30}, -{72,6,31}, -{72,6,32}, -{72,6,33}, -{72,6,34}, -{72,6,35}, -{72,6,36}, -{72,6,37}, -{72,6,38}, -{72,6,39}, -{72,6,40}, -{72,6,41}, -{72,6,42}, -{72,6,43}, -{72,6,44}, -{72,6,45}, -{72,6,46}, -{72,6,47}, -{72,6,48}, -{72,6,49}, -{72,6,50}, -{72,6,51}, -{72,6,52}, -{72,6,53}, -{72,6,54}, -{72,6,55}, -{72,6,56}, -{72,6,57}, -{72,6,58}, -{72,6,59}, -{72,6,60}, -{72,6,61}, -{72,6,62}, -{72,6,63}, -{72,6,64}, -{72,6,65}, -{72,6,66}, -{72,6,67}, -{72,6,68}, -{72,6,69}, -{72,6,70}, -{72,6,71}, -{72,6,72}, -{72,6,73}, -{72,6,74}, -{72,6,75}, -{72,7,-43}, -{72,7,-42}, -{72,7,-41}, -{72,7,-40}, -{72,7,-39}, -{72,7,-38}, -{72,7,-37}, -{72,7,-36}, -{72,7,-35}, -{72,7,-34}, -{72,7,-33}, -{72,7,-32}, -{72,7,-31}, -{72,7,-30}, -{72,7,-29}, -{72,7,-28}, -{72,7,-27}, -{72,7,-26}, -{72,7,-25}, -{72,7,-24}, -{72,7,-23}, -{72,7,-22}, -{72,7,-21}, -{72,7,-20}, -{72,7,-19}, -{72,7,-18}, -{72,7,-17}, -{72,7,-16}, -{72,7,-15}, -{72,7,-14}, -{72,7,-13}, -{72,7,-12}, -{72,7,-11}, -{72,7,-10}, -{72,7,-9}, -{72,7,-8}, -{72,7,-7}, -{72,7,-6}, -{72,7,-5}, -{72,7,-4}, -{72,7,-3}, -{72,7,-2}, -{72,7,-1}, -{72,7,0}, -{72,7,1}, -{72,7,2}, -{72,7,3}, -{72,7,4}, -{72,7,5}, -{72,7,6}, -{72,7,7}, -{72,7,8}, -{72,7,9}, -{72,7,10}, -{72,7,11}, -{72,7,12}, -{72,7,13}, -{72,7,14}, -{72,7,15}, -{72,7,16}, -{72,7,17}, -{72,7,18}, -{72,7,19}, -{72,7,20}, -{72,7,21}, -{72,7,22}, -{72,7,23}, -{72,7,24}, -{72,7,25}, -{72,7,26}, -{72,7,27}, -{72,7,28}, -{72,7,29}, -{72,7,30}, -{72,7,31}, -{72,7,32}, -{72,7,33}, -{72,7,34}, -{72,7,35}, -{72,7,36}, -{72,7,37}, -{72,7,38}, -{72,7,39}, -{72,7,40}, -{72,7,41}, -{72,7,42}, -{72,7,43}, -{72,7,44}, -{72,7,45}, -{72,7,46}, -{72,7,47}, -{72,7,48}, -{72,7,49}, -{72,7,50}, -{72,7,51}, -{72,7,52}, -{72,7,53}, -{72,7,54}, -{72,7,55}, -{72,7,56}, -{72,7,57}, -{72,7,58}, -{72,7,59}, -{72,7,60}, -{72,7,61}, -{72,7,62}, -{72,7,63}, -{72,7,64}, -{72,7,65}, -{72,7,66}, -{72,7,67}, -{72,7,68}, -{72,7,69}, -{72,7,70}, -{72,7,71}, -{72,7,72}, -{72,7,73}, -{72,7,74}, -{72,7,75}, -{72,8,-43}, -{72,8,-42}, -{72,8,-41}, -{72,8,-40}, -{72,8,-39}, -{72,8,-38}, -{72,8,-37}, -{72,8,-36}, -{72,8,-35}, -{72,8,-34}, -{72,8,-33}, -{72,8,-32}, -{72,8,-31}, -{72,8,-30}, -{72,8,-29}, -{72,8,-28}, -{72,8,-27}, -{72,8,-26}, -{72,8,-25}, -{72,8,-24}, -{72,8,-23}, -{72,8,-22}, -{72,8,-21}, -{72,8,-20}, -{72,8,-19}, -{72,8,-18}, -{72,8,-17}, -{72,8,-16}, -{72,8,-15}, -{72,8,-14}, -{72,8,-13}, -{72,8,-12}, -{72,8,-11}, -{72,8,-10}, -{72,8,-9}, -{72,8,-8}, -{72,8,-7}, -{72,8,-6}, -{72,8,-5}, -{72,8,-4}, -{72,8,-3}, -{72,8,-2}, -{72,8,-1}, -{72,8,0}, -{72,8,1}, -{72,8,2}, -{72,8,3}, -{72,8,4}, -{72,8,5}, -{72,8,6}, -{72,8,7}, -{72,8,8}, -{72,8,9}, -{72,8,10}, -{72,8,11}, -{72,8,12}, -{72,8,13}, -{72,8,14}, -{72,8,15}, -{72,8,16}, -{72,8,17}, -{72,8,18}, -{72,8,19}, -{72,8,20}, -{72,8,21}, -{72,8,22}, -{72,8,23}, -{72,8,24}, -{72,8,25}, -{72,8,26}, -{72,8,27}, -{72,8,28}, -{72,8,29}, -{72,8,30}, -{72,8,31}, -{72,8,32}, -{72,8,33}, -{72,8,34}, -{72,8,35}, -{72,8,36}, -{72,8,37}, -{72,8,38}, -{72,8,39}, -{72,8,40}, -{72,8,41}, -{72,8,42}, -{72,8,43}, -{72,8,44}, -{72,8,45}, -{72,8,46}, -{72,8,47}, -{72,8,48}, -{72,8,49}, -{72,8,50}, -{72,8,51}, -{72,8,52}, -{72,8,53}, -{72,8,54}, -{72,8,55}, -{72,8,56}, -{72,8,57}, -{72,8,58}, -{72,8,59}, -{72,8,60}, -{72,8,61}, -{72,8,62}, -{72,8,63}, -{72,8,64}, -{72,8,65}, -{72,8,66}, -{72,8,67}, -{72,8,68}, -{72,8,69}, -{72,8,70}, -{72,8,71}, -{72,8,72}, -{72,8,73}, -{72,8,74}, -{72,8,75}, -{72,9,-43}, -{72,9,-42}, -{72,9,-41}, -{72,9,-40}, -{72,9,-39}, -{72,9,-38}, -{72,9,-37}, -{72,9,-36}, -{72,9,-35}, -{72,9,-34}, -{72,9,-33}, -{72,9,-32}, -{72,9,-31}, -{72,9,-30}, -{72,9,-29}, -{72,9,-28}, -{72,9,-27}, -{72,9,-26}, -{72,9,-25}, -{72,9,-24}, -{72,9,-23}, -{72,9,-22}, -{72,9,-21}, -{72,9,-20}, -{72,9,-19}, -{72,9,-18}, -{72,9,-17}, -{72,9,-16}, -{72,9,-15}, -{72,9,-14}, -{72,9,-13}, -{72,9,-12}, -{72,9,-11}, -{72,9,-10}, -{72,9,-9}, -{72,9,-8}, -{72,9,-7}, -{72,9,-6}, -{72,9,-5}, -{72,9,-4}, -{72,9,-3}, -{72,9,-2}, -{72,9,-1}, -{72,9,0}, -{72,9,1}, -{72,9,2}, -{72,9,3}, -{72,9,4}, -{72,9,5}, -{72,9,6}, -{72,9,7}, -{72,9,8}, -{72,9,9}, -{72,9,10}, -{72,9,11}, -{72,9,12}, -{72,9,13}, -{72,9,14}, -{72,9,15}, -{72,9,16}, -{72,9,17}, -{72,9,18}, -{72,9,19}, -{72,9,20}, -{72,9,21}, -{72,9,22}, -{72,9,23}, -{72,9,24}, -{72,9,25}, -{72,9,26}, -{72,9,27}, -{72,9,28}, -{72,9,29}, -{72,9,30}, -{72,9,31}, -{72,9,32}, -{72,9,33}, -{72,9,34}, -{72,9,35}, -{72,9,36}, -{72,9,37}, -{72,9,38}, -{72,9,39}, -{72,9,40}, -{72,9,41}, -{72,9,42}, -{72,9,43}, -{72,9,44}, -{72,9,45}, -{72,9,46}, -{72,9,47}, -{72,9,48}, -{72,9,49}, -{72,9,50}, -{72,9,51}, -{72,9,52}, -{72,9,53}, -{72,9,54}, -{72,9,55}, -{72,9,56}, -{72,9,57}, -{72,9,58}, -{72,9,59}, -{72,9,60}, -{72,9,61}, -{72,9,62}, -{72,9,63}, -{72,9,64}, -{72,9,65}, -{72,9,66}, -{72,9,67}, -{72,9,68}, -{72,9,69}, -{72,9,70}, -{72,9,71}, -{72,9,72}, -{72,9,73}, -{72,9,74}, -{72,9,75}, -{72,10,-43}, -{72,10,-42}, -{72,10,-41}, -{72,10,-40}, -{72,10,-39}, -{72,10,-38}, -{72,10,-37}, -{72,10,-36}, -{72,10,-35}, -{72,10,-34}, -{72,10,-33}, -{72,10,-32}, -{72,10,-31}, -{72,10,-30}, -{72,10,-29}, -{72,10,-28}, -{72,10,-27}, -{72,10,-26}, -{72,10,-25}, -{72,10,-24}, -{72,10,-23}, -{72,10,-22}, -{72,10,-21}, -{72,10,-20}, -{72,10,-19}, -{72,10,-18}, -{72,10,-17}, -{72,10,-16}, -{72,10,-15}, -{72,10,-14}, -{72,10,-13}, -{72,10,-12}, -{72,10,-11}, -{72,10,-10}, -{72,10,-9}, -{72,10,-8}, -{72,10,-7}, -{72,10,-6}, -{72,10,-5}, -{72,10,-4}, -{72,10,-3}, -{72,10,-2}, -{72,10,-1}, -{72,10,0}, -{72,10,1}, -{72,10,2}, -{72,10,3}, -{72,10,4}, -{72,10,5}, -{72,10,6}, -{72,10,7}, -{72,10,8}, -{72,10,9}, -{72,10,10}, -{72,10,11}, -{72,10,12}, -{72,10,13}, -{72,10,14}, -{72,10,15}, -{72,10,16}, -{72,10,17}, -{72,10,18}, -{72,10,19}, -{72,10,20}, -{72,10,21}, -{72,10,22}, -{72,10,23}, -{72,10,24}, -{72,10,25}, -{72,10,26}, -{72,10,27}, -{72,10,28}, -{72,10,29}, -{72,10,30}, -{72,10,31}, -{72,10,32}, -{72,10,33}, -{72,10,34}, -{72,10,35}, -{72,10,36}, -{72,10,37}, -{72,10,38}, -{72,10,39}, -{72,10,40}, -{72,10,41}, -{72,10,42}, -{72,10,43}, -{72,10,44}, -{72,10,45}, -{72,10,46}, -{72,10,47}, -{72,10,48}, -{72,10,49}, -{72,10,50}, -{72,10,51}, -{72,10,52}, -{72,10,53}, -{72,10,54}, -{72,10,55}, -{72,10,56}, -{72,10,57}, -{72,10,58}, -{72,10,59}, -{72,10,60}, -{72,10,61}, -{72,10,62}, -{72,10,63}, -{72,10,64}, -{72,10,65}, -{72,10,66}, -{72,10,67}, -{72,10,68}, -{72,10,69}, -{72,10,70}, -{72,10,71}, -{72,10,72}, -{72,10,73}, -{72,10,74}, -{72,10,75}, -{72,11,-43}, -{72,11,-42}, -{72,11,-41}, -{72,11,-40}, -{72,11,-39}, -{72,11,-38}, -{72,11,-37}, -{72,11,-36}, -{72,11,-35}, -{72,11,-34}, -{72,11,-33}, -{72,11,-32}, -{72,11,-31}, -{72,11,-30}, -{72,11,-29}, -{72,11,-28}, -{72,11,-27}, -{72,11,-26}, -{72,11,-25}, -{72,11,-24}, -{72,11,-23}, -{72,11,-22}, -{72,11,-21}, -{72,11,-20}, -{72,11,-19}, -{72,11,-18}, -{72,11,-17}, -{72,11,-16}, -{72,11,-15}, -{72,11,-14}, -{72,11,-13}, -{72,11,-12}, -{72,11,-11}, -{72,11,-10}, -{72,11,-9}, -{72,11,-8}, -{72,11,-7}, -{72,11,-6}, -{72,11,-5}, -{72,11,-4}, -{72,11,-3}, -{72,11,-2}, -{72,11,-1}, -{72,11,0}, -{72,11,1}, -{72,11,2}, -{72,11,3}, -{72,11,4}, -{72,11,5}, -{72,11,6}, -{72,11,7}, -{72,11,8}, -{72,11,9}, -{72,11,10}, -{72,11,11}, -{72,11,12}, -{72,11,13}, -{72,11,14}, -{72,11,15}, -{72,11,16}, -{72,11,17}, -{72,11,18}, -{72,11,19}, -{72,11,20}, -{72,11,21}, -{72,11,22}, -{72,11,23}, -{72,11,24}, -{72,11,25}, -{72,11,26}, -{72,11,27}, -{72,11,28}, -{72,11,29}, -{72,11,30}, -{72,11,31}, -{72,11,32}, -{72,11,33}, -{72,11,34}, -{72,11,35}, -{72,11,36}, -{72,11,37}, -{72,11,38}, -{72,11,39}, -{72,11,40}, -{72,11,41}, -{72,11,42}, -{72,11,43}, -{72,11,44}, -{72,11,45}, -{72,11,46}, -{72,11,47}, -{72,11,48}, -{72,11,49}, -{72,11,50}, -{72,11,51}, -{72,11,52}, -{72,11,53}, -{72,11,54}, -{72,11,55}, -{72,11,56}, -{72,11,57}, -{72,11,58}, -{72,11,59}, -{72,11,60}, -{72,11,61}, -{72,11,62}, -{72,11,63}, -{72,11,64}, -{72,11,65}, -{72,11,66}, -{72,11,67}, -{72,11,68}, -{72,11,69}, -{72,11,70}, -{72,11,71}, -{72,11,72}, -{72,11,73}, -{72,11,74}, -{72,11,75}, -{72,12,-43}, -{72,12,-42}, -{72,12,-41}, -{72,12,-40}, -{72,12,-39}, -{72,12,-38}, -{72,12,-37}, -{72,12,-36}, -{72,12,-35}, -{72,12,-34}, -{72,12,-33}, -{72,12,-32}, -{72,12,-31}, -{72,12,-30}, -{72,12,-29}, -{72,12,-28}, -{72,12,-27}, -{72,12,-26}, -{72,12,-25}, -{72,12,-24}, -{72,12,-23}, -{72,12,-22}, -{72,12,-21}, -{72,12,-20}, -{72,12,-19}, -{72,12,-18}, -{72,12,-17}, -{72,12,-16}, -{72,12,-15}, -{72,12,-14}, -{72,12,-13}, -{72,12,-12}, -{72,12,-11}, -{72,12,-10}, -{72,12,-9}, -{72,12,-8}, -{72,12,-7}, -{72,12,-6}, -{72,12,-5}, -{72,12,-4}, -{72,12,-3}, -{72,12,-2}, -{72,12,-1}, -{72,12,0}, -{72,12,1}, -{72,12,2}, -{72,12,3}, -{72,12,4}, -{72,12,5}, -{72,12,6}, -{72,12,7}, -{72,12,8}, -{72,12,9}, -{72,12,10}, -{72,12,11}, -{72,12,12}, -{72,12,13}, -{72,12,14}, -{72,12,15}, -{72,12,16}, -{72,12,17}, -{72,12,18}, -{72,12,19}, -{72,12,20}, -{72,12,21}, -{72,12,22}, -{72,12,23}, -{72,12,24}, -{72,12,25}, -{72,12,26}, -{72,12,27}, -{72,12,28}, -{72,12,29}, -{72,12,30}, -{72,12,31}, -{72,12,32}, -{72,12,33}, -{72,12,34}, -{72,12,35}, -{72,12,36}, -{72,12,37}, -{72,12,38}, -{72,12,39}, -{72,12,40}, -{72,12,41}, -{72,12,42}, -{72,12,43}, -{72,12,44}, -{72,12,45}, -{72,12,46}, -{72,12,47}, -{72,12,48}, -{72,12,49}, -{72,12,50}, -{72,12,51}, -{72,12,52}, -{72,12,53}, -{72,12,54}, -{72,12,55}, -{72,12,56}, -{72,12,57}, -{72,12,58}, -{72,12,59}, -{72,12,60}, -{72,12,61}, -{72,12,62}, -{72,12,63}, -{72,12,64}, -{72,12,65}, -{72,12,66}, -{72,12,67}, -{72,12,68}, -{72,12,69}, -{72,12,70}, -{72,12,71}, -{72,12,72}, -{72,12,73}, -{72,12,74}, -{72,12,75}, -{72,13,-43}, -{72,13,-42}, -{72,13,-41}, -{72,13,-40}, -{72,13,-39}, -{72,13,-38}, -{72,13,-37}, -{72,13,-36}, -{72,13,-35}, -{72,13,-34}, -{72,13,-33}, -{72,13,-32}, -{72,13,-31}, -{72,13,-30}, -{72,13,-29}, -{72,13,-28}, -{72,13,-27}, -{72,13,-26}, -{72,13,-25}, -{72,13,-24}, -{72,13,-23}, -{72,13,-22}, -{72,13,-21}, -{72,13,-20}, -{72,13,-19}, -{72,13,-18}, -{72,13,-17}, -{72,13,-16}, -{72,13,-15}, -{72,13,-14}, -{72,13,-13}, -{72,13,-12}, -{72,13,-11}, -{72,13,-10}, -{72,13,-9}, -{72,13,-8}, -{72,13,-7}, -{72,13,-6}, -{72,13,-5}, -{72,13,-4}, -{72,13,-3}, -{72,13,-2}, -{72,13,-1}, -{72,13,0}, -{72,13,1}, -{72,13,2}, -{72,13,3}, -{72,13,4}, -{72,13,5}, -{72,13,6}, -{72,13,7}, -{72,13,8}, -{72,13,9}, -{72,13,10}, -{72,13,11}, -{72,13,12}, -{72,13,13}, -{72,13,14}, -{72,13,15}, -{72,13,16}, -{72,13,17}, -{72,13,18}, -{72,13,19}, -{72,13,20}, -{72,13,21}, -{72,13,22}, -{72,13,23}, -{72,13,24}, -{72,13,25}, -{72,13,26}, -{72,13,27}, -{72,13,28}, -{72,13,29}, -{72,13,30}, -{72,13,31}, -{72,13,32}, -{72,13,33}, -{72,13,34}, -{72,13,35}, -{72,13,36}, -{72,13,37}, -{72,13,38}, -{72,13,39}, -{72,13,40}, -{72,13,41}, -{72,13,42}, -{72,13,43}, -{72,13,44}, -{72,13,45}, -{72,13,46}, -{72,13,47}, -{72,13,48}, -{72,13,49}, -{72,13,50}, -{72,13,51}, -{72,13,52}, -{72,13,53}, -{72,13,54}, -{72,13,55}, -{72,13,56}, -{72,13,57}, -{72,13,58}, -{72,13,59}, -{72,13,60}, -{72,13,61}, -{72,13,62}, -{72,13,63}, -{72,13,64}, -{72,13,65}, -{72,13,66}, -{72,13,67}, -{72,13,68}, -{72,13,69}, -{72,13,70}, -{72,13,71}, -{72,13,72}, -{72,13,73}, -{72,13,74}, -{72,13,75}, -{72,14,-43}, -{72,14,-42}, -{72,14,-41}, -{72,14,-40}, -{72,14,-39}, -{72,14,-38}, -{72,14,-37}, -{72,14,-36}, -{72,14,-35}, -{72,14,-34}, -{72,14,-33}, -{72,14,-32}, -{72,14,-31}, -{72,14,-30}, -{72,14,-29}, -{72,14,-28}, -{72,14,-27}, -{72,14,-26}, -{72,14,-25}, -{72,14,-24}, -{72,14,-23}, -{72,14,-22}, -{72,14,-21}, -{72,14,-20}, -{72,14,-19}, -{72,14,-18}, -{72,14,-17}, -{72,14,-16}, -{72,14,-15}, -{72,14,-14}, -{72,14,-13}, -{72,14,-12}, -{72,14,-11}, -{72,14,-10}, -{72,14,-9}, -{72,14,-8}, -{72,14,-7}, -{72,14,-6}, -{72,14,-5}, -{72,14,-4}, -{72,14,-3}, -{72,14,-2}, -{72,14,-1}, -{72,14,0}, -{72,14,1}, -{72,14,2}, -{72,14,3}, -{72,14,4}, -{72,14,5}, -{72,14,6}, -{72,14,7}, -{72,14,8}, -{72,14,9}, -{72,14,10}, -{72,14,11}, -{72,14,12}, -{72,14,13}, -{72,14,14}, -{72,14,15}, -{72,14,16}, -{72,14,17}, -{72,14,18}, -{72,14,19}, -{72,14,20}, -{72,14,21}, -{72,14,22}, -{72,14,23}, -{72,14,24}, -{72,14,25}, -{72,14,26}, -{72,14,27}, -{72,14,28}, -{72,14,29}, -{72,14,30}, -{72,14,31}, -{72,14,32}, -{72,14,33}, -{72,14,34}, -{72,14,35}, -{72,14,36}, -{72,14,37}, -{72,14,38}, -{72,14,39}, -{72,14,40}, -{72,14,41}, -{72,14,42}, -{72,14,43}, -{72,14,44}, -{72,14,45}, -{72,14,46}, -{72,14,47}, -{72,14,48}, -{72,14,49}, -{72,14,50}, -{72,14,51}, -{72,14,52}, -{72,14,53}, -{72,14,54}, -{72,14,55}, -{72,14,56}, -{72,14,57}, -{72,14,58}, -{72,14,59}, -{72,14,60}, -{72,14,61}, -{72,14,62}, -{72,14,63}, -{72,14,64}, -{72,14,65}, -{72,14,66}, -{72,14,67}, -{72,14,68}, -{72,14,69}, -{72,14,70}, -{72,14,71}, -{72,14,72}, -{72,14,73}, -{72,14,74}, -{72,14,75}, -{72,15,-43}, -{72,15,-42}, -{72,15,-41}, -{72,15,-40}, -{72,15,-39}, -{72,15,-38}, -{72,15,-37}, -{72,15,-36}, -{72,15,-35}, -{72,15,-34}, -{72,15,-33}, -{72,15,-32}, -{72,15,-31}, -{72,15,-30}, -{72,15,-29}, -{72,15,-28}, -{72,15,-27}, -{72,15,-26}, -{72,15,-25}, -{72,15,-24}, -{72,15,-23}, -{72,15,-22}, -{72,15,-21}, -{72,15,-20}, -{72,15,-19}, -{72,15,-18}, -{72,15,-17}, -{72,15,-16}, -{72,15,-15}, -{72,15,-14}, -{72,15,-13}, -{72,15,-12}, -{72,15,-11}, -{72,15,-10}, -{72,15,-9}, -{72,15,-8}, -{72,15,-7}, -{72,15,-6}, -{72,15,-5}, -{72,15,-4}, -{72,15,-3}, -{72,15,-2}, -{72,15,-1}, -{72,15,0}, -{72,15,1}, -{72,15,2}, -{72,15,3}, -{72,15,4}, -{72,15,5}, -{72,15,6}, -{72,15,7}, -{72,15,8}, -{72,15,9}, -{72,15,10}, -{72,15,11}, -{72,15,12}, -{72,15,13}, -{72,15,14}, -{72,15,15}, -{72,15,16}, -{72,15,17}, -{72,15,18}, -{72,15,19}, -{72,15,20}, -{72,15,21}, -{72,15,22}, -{72,15,23}, -{72,15,24}, -{72,15,25}, -{72,15,26}, -{72,15,27}, -{72,15,28}, -{72,15,29}, -{72,15,30}, -{72,15,31}, -{72,15,32}, -{72,15,33}, -{72,15,34}, -{72,15,35}, -{72,15,36}, -{72,15,37}, -{72,15,38}, -{72,15,39}, -{72,15,40}, -{72,15,41}, -{72,15,42}, -{72,15,43}, -{72,15,44}, -{72,15,45}, -{72,15,46}, -{72,15,47}, -{72,15,48}, -{72,15,49}, -{72,15,50}, -{72,15,51}, -{72,15,52}, -{72,15,53}, -{72,15,54}, -{72,15,55}, -{72,15,56}, -{72,15,57}, -{72,15,58}, -{72,15,59}, -{72,15,60}, -{72,15,61}, -{72,15,62}, -{72,15,63}, -{72,15,64}, -{72,15,65}, -{72,15,66}, -{72,15,67}, -{72,15,68}, -{72,15,69}, -{72,15,70}, -{72,15,71}, -{72,15,72}, -{72,15,73}, -{72,15,74}, -{72,15,75}, -{72,16,-43}, -{72,16,-42}, -{72,16,-41}, -{72,16,-40}, -{72,16,-39}, -{72,16,-38}, -{72,16,-37}, -{72,16,-36}, -{72,16,-35}, -{72,16,-34}, -{72,16,-33}, -{72,16,-32}, -{72,16,-31}, -{72,16,-30}, -{72,16,-29}, -{72,16,-28}, -{72,16,-27}, -{72,16,-26}, -{72,16,-25}, -{72,16,-24}, -{72,16,-23}, -{72,16,-22}, -{72,16,-21}, -{72,16,-20}, -{72,16,-19}, -{72,16,-18}, -{72,16,-17}, -{72,16,-16}, -{72,16,-15}, -{72,16,-14}, -{72,16,-13}, -{72,16,-12}, -{72,16,-11}, -{72,16,-10}, -{72,16,-9}, -{72,16,-8}, -{72,16,-7}, -{72,16,-6}, -{72,16,-5}, -{72,16,-4}, -{72,16,-3}, -{72,16,-2}, -{72,16,-1}, -{72,16,0}, -{72,16,1}, -{72,16,2}, -{72,16,3}, -{72,16,4}, -{72,16,5}, -{72,16,6}, -{72,16,7}, -{72,16,8}, -{72,16,9}, -{72,16,10}, -{72,16,11}, -{72,16,12}, -{72,16,13}, -{72,16,14}, -{72,16,15}, -{72,16,16}, -{72,16,17}, -{72,16,18}, -{72,16,19}, -{72,16,20}, -{72,16,21}, -{72,16,22}, -{72,16,23}, -{72,16,24}, -{72,16,25}, -{72,16,26}, -{72,16,27}, -{72,16,28}, -{72,16,29}, -{72,16,30}, -{72,16,31}, -{72,16,32}, -{72,16,33}, -{72,16,34}, -{72,16,35}, -{72,16,36}, -{72,16,37}, -{72,16,38}, -{72,16,39}, -{72,16,40}, -{72,16,41}, -{72,16,42}, -{72,16,43}, -{72,16,44}, -{72,16,45}, -{72,16,46}, -{72,16,47}, -{72,16,48}, -{72,16,49}, -{72,16,50}, -{72,16,51}, -{72,16,52}, -{72,16,53}, -{72,16,54}, -{72,16,55}, -{72,16,56}, -{72,16,57}, -{72,16,58}, -{72,16,59}, -{72,16,60}, -{72,16,61}, -{72,16,62}, -{72,16,63}, -{72,16,64}, -{72,16,65}, -{72,16,66}, -{72,16,67}, -{72,16,68}, -{72,16,69}, -{72,16,70}, -{72,16,71}, -{72,16,72}, -{72,16,73}, -{72,16,74}, -{72,16,75}, -{72,16,76}, -{72,17,-43}, -{72,17,-42}, -{72,17,-41}, -{72,17,-40}, -{72,17,-39}, -{72,17,-38}, -{72,17,-37}, -{72,17,-36}, -{72,17,-35}, -{72,17,-34}, -{72,17,-33}, -{72,17,-32}, -{72,17,-31}, -{72,17,-30}, -{72,17,-29}, -{72,17,-28}, -{72,17,-27}, -{72,17,-26}, -{72,17,-25}, -{72,17,-24}, -{72,17,-23}, -{72,17,-22}, -{72,17,-21}, -{72,17,-20}, -{72,17,-19}, -{72,17,-18}, -{72,17,-17}, -{72,17,-16}, -{72,17,-15}, -{72,17,-14}, -{72,17,-13}, -{72,17,-12}, -{72,17,-11}, -{72,17,-10}, -{72,17,-9}, -{72,17,-8}, -{72,17,-7}, -{72,17,-6}, -{72,17,-5}, -{72,17,-4}, -{72,17,-3}, -{72,17,-2}, -{72,17,-1}, -{72,17,0}, -{72,17,1}, -{72,17,2}, -{72,17,3}, -{72,17,4}, -{72,17,5}, -{72,17,6}, -{72,17,7}, -{72,17,8}, -{72,17,9}, -{72,17,10}, -{72,17,11}, -{72,17,12}, -{72,17,13}, -{72,17,14}, -{72,17,15}, -{72,17,16}, -{72,17,17}, -{72,17,18}, -{72,17,19}, -{72,17,20}, -{72,17,21}, -{72,17,22}, -{72,17,23}, -{72,17,24}, -{72,17,25}, -{72,17,26}, -{72,17,27}, -{72,17,28}, -{72,17,29}, -{72,17,30}, -{72,17,31}, -{72,17,32}, -{72,17,33}, -{72,17,34}, -{72,17,35}, -{72,17,36}, -{72,17,37}, -{72,17,38}, -{72,17,39}, -{72,17,40}, -{72,17,41}, -{72,17,42}, -{72,17,43}, -{72,17,44}, -{72,17,45}, -{72,17,46}, -{72,17,47}, -{72,17,48}, -{72,17,49}, -{72,17,50}, -{72,17,51}, -{72,17,52}, -{72,17,53}, -{72,17,54}, -{72,17,55}, -{72,17,56}, -{72,17,57}, -{72,17,58}, -{72,17,59}, -{72,17,60}, -{72,17,61}, -{72,17,62}, -{72,17,63}, -{72,17,64}, -{72,17,65}, -{72,17,66}, -{72,17,67}, -{72,17,68}, -{72,17,69}, -{72,17,70}, -{72,17,71}, -{72,17,72}, -{72,17,73}, -{72,17,74}, -{72,17,75}, -{72,17,76}, -{72,18,-43}, -{72,18,-42}, -{72,18,-41}, -{72,18,-40}, -{72,18,-39}, -{72,18,-38}, -{72,18,-37}, -{72,18,-36}, -{72,18,-35}, -{72,18,-34}, -{72,18,-33}, -{72,18,-32}, -{72,18,-31}, -{72,18,-30}, -{72,18,-29}, -{72,18,-28}, -{72,18,-27}, -{72,18,-26}, -{72,18,-25}, -{72,18,-24}, -{72,18,-23}, -{72,18,-22}, -{72,18,-21}, -{72,18,-20}, -{72,18,-19}, -{72,18,-18}, -{72,18,-17}, -{72,18,-16}, -{72,18,-15}, -{72,18,-14}, -{72,18,-13}, -{72,18,-12}, -{72,18,-11}, -{72,18,-10}, -{72,18,-9}, -{72,18,-8}, -{72,18,-7}, -{72,18,-6}, -{72,18,-5}, -{72,18,-4}, -{72,18,-3}, -{72,18,-2}, -{72,18,-1}, -{72,18,0}, -{72,18,1}, -{72,18,2}, -{72,18,3}, -{72,18,4}, -{72,18,5}, -{72,18,6}, -{72,18,7}, -{72,18,8}, -{72,18,9}, -{72,18,10}, -{72,18,11}, -{72,18,12}, -{72,18,13}, -{72,18,14}, -{72,18,15}, -{72,18,16}, -{72,18,17}, -{72,18,18}, -{72,18,19}, -{72,18,20}, -{72,18,21}, -{72,18,22}, -{72,18,23}, -{72,18,24}, -{72,18,25}, -{72,18,26}, -{72,18,27}, -{72,18,28}, -{72,18,29}, -{72,18,30}, -{72,18,31}, -{72,18,32}, -{72,18,33}, -{72,18,34}, -{72,18,35}, -{72,18,36}, -{72,18,37}, -{72,18,38}, -{72,18,39}, -{72,18,40}, -{72,18,41}, -{72,18,42}, -{72,18,43}, -{72,18,44}, -{72,18,45}, -{72,18,46}, -{72,18,47}, -{72,18,48}, -{72,18,49}, -{72,18,50}, -{72,18,51}, -{72,18,52}, -{72,18,53}, -{72,18,54}, -{72,18,55}, -{72,18,56}, -{72,18,57}, -{72,18,58}, -{72,18,59}, -{72,18,60}, -{72,18,61}, -{72,18,62}, -{72,18,63}, -{72,18,64}, -{72,18,65}, -{72,18,66}, -{72,18,67}, -{72,18,68}, -{72,18,69}, -{72,18,70}, -{72,18,71}, -{72,18,72}, -{72,18,73}, -{72,18,74}, -{72,18,75}, -{72,18,76}, -{72,19,-43}, -{72,19,-42}, -{72,19,-41}, -{72,19,-40}, -{72,19,-39}, -{72,19,-38}, -{72,19,-37}, -{72,19,-36}, -{72,19,-35}, -{72,19,-34}, -{72,19,-33}, -{72,19,-32}, -{72,19,-31}, -{72,19,-30}, -{72,19,-29}, -{72,19,-28}, -{72,19,-27}, -{72,19,-26}, -{72,19,-25}, -{72,19,-24}, -{72,19,-23}, -{72,19,-22}, -{72,19,-21}, -{72,19,-20}, -{72,19,-19}, -{72,19,-18}, -{72,19,-17}, -{72,19,-16}, -{72,19,-15}, -{72,19,-14}, -{72,19,-13}, -{72,19,-12}, -{72,19,-11}, -{72,19,-10}, -{72,19,-9}, -{72,19,-8}, -{72,19,-7}, -{72,19,-6}, -{72,19,-5}, -{72,19,-4}, -{72,19,-3}, -{72,19,-2}, -{72,19,-1}, -{72,19,0}, -{72,19,1}, -{72,19,2}, -{72,19,3}, -{72,19,4}, -{72,19,5}, -{72,19,6}, -{72,19,7}, -{72,19,8}, -{72,19,9}, -{72,19,10}, -{72,19,11}, -{72,19,12}, -{72,19,13}, -{72,19,14}, -{72,19,15}, -{72,19,16}, -{72,19,17}, -{72,19,18}, -{72,19,19}, -{72,19,20}, -{72,19,21}, -{72,19,22}, -{72,19,23}, -{72,19,24}, -{72,19,25}, -{72,19,26}, -{72,19,27}, -{72,19,28}, -{72,19,29}, -{72,19,30}, -{72,19,31}, -{72,19,32}, -{72,19,33}, -{72,19,34}, -{72,19,35}, -{72,19,36}, -{72,19,37}, -{72,19,38}, -{72,19,39}, -{72,19,40}, -{72,19,41}, -{72,19,42}, -{72,19,43}, -{72,19,44}, -{72,19,45}, -{72,19,46}, -{72,19,47}, -{72,19,48}, -{72,19,49}, -{72,19,50}, -{72,19,51}, -{72,19,52}, -{72,19,53}, -{72,19,54}, -{72,19,55}, -{72,19,56}, -{72,19,57}, -{72,19,58}, -{72,19,59}, -{72,19,60}, -{72,19,61}, -{72,19,62}, -{72,19,63}, -{72,19,64}, -{72,19,65}, -{72,19,66}, -{72,19,67}, -{72,19,68}, -{72,19,69}, -{72,19,70}, -{72,19,71}, -{72,19,72}, -{72,19,73}, -{72,19,74}, -{72,19,75}, -{72,19,76}, -{72,20,-43}, -{72,20,-42}, -{72,20,-41}, -{72,20,-40}, -{72,20,-39}, -{72,20,-38}, -{72,20,-37}, -{72,20,-36}, -{72,20,-35}, -{72,20,-34}, -{72,20,-33}, -{72,20,-32}, -{72,20,-31}, -{72,20,-30}, -{72,20,-29}, -{72,20,-28}, -{72,20,-27}, -{72,20,-26}, -{72,20,-25}, -{72,20,-24}, -{72,20,-23}, -{72,20,-22}, -{72,20,-21}, -{72,20,-20}, -{72,20,-19}, -{72,20,-18}, -{72,20,-17}, -{72,20,-16}, -{72,20,-15}, -{72,20,-14}, -{72,20,-13}, -{72,20,-12}, -{72,20,-11}, -{72,20,-10}, -{72,20,-9}, -{72,20,-8}, -{72,20,-7}, -{72,20,-6}, -{72,20,-5}, -{72,20,-4}, -{72,20,-3}, -{72,20,-2}, -{72,20,-1}, -{72,20,0}, -{72,20,1}, -{72,20,2}, -{72,20,3}, -{72,20,4}, -{72,20,5}, -{72,20,6}, -{72,20,7}, -{72,20,8}, -{72,20,9}, -{72,20,10}, -{72,20,11}, -{72,20,12}, -{72,20,13}, -{72,20,14}, -{72,20,15}, -{72,20,16}, -{72,20,17}, -{72,20,18}, -{72,20,19}, -{72,20,20}, -{72,20,21}, -{72,20,22}, -{72,20,23}, -{72,20,24}, -{72,20,25}, -{72,20,26}, -{72,20,27}, -{72,20,28}, -{72,20,29}, -{72,20,30}, -{72,20,31}, -{72,20,32}, -{72,20,33}, -{72,20,34}, -{72,20,35}, -{72,20,36}, -{72,20,37}, -{72,20,38}, -{72,20,39}, -{72,20,40}, -{72,20,41}, -{72,20,42}, -{72,20,43}, -{72,20,44}, -{72,20,45}, -{72,20,46}, -{72,20,47}, -{72,20,48}, -{72,20,49}, -{72,20,50}, -{72,20,51}, -{72,20,52}, -{72,20,53}, -{72,20,54}, -{72,20,55}, -{72,20,56}, -{72,20,57}, -{72,20,58}, -{72,20,59}, -{72,20,60}, -{72,20,61}, -{72,20,62}, -{72,20,63}, -{72,20,64}, -{72,20,65}, -{72,20,66}, -{72,20,67}, -{72,20,68}, -{72,20,69}, -{72,20,70}, -{72,20,71}, -{72,20,72}, -{72,20,73}, -{72,20,74}, -{72,20,75}, -{72,20,76}, -{72,21,-43}, -{72,21,-42}, -{72,21,-41}, -{72,21,-40}, -{72,21,-39}, -{72,21,-38}, -{72,21,-37}, -{72,21,-36}, -{72,21,-35}, -{72,21,-34}, -{72,21,-33}, -{72,21,-32}, -{72,21,-31}, -{72,21,-30}, -{72,21,-29}, -{72,21,-28}, -{72,21,-27}, -{72,21,-26}, -{72,21,-25}, -{72,21,-24}, -{72,21,-23}, -{72,21,-22}, -{72,21,-21}, -{72,21,-20}, -{72,21,-19}, -{72,21,-18}, -{72,21,-17}, -{72,21,-16}, -{72,21,-15}, -{72,21,-14}, -{72,21,-13}, -{72,21,-12}, -{72,21,-11}, -{72,21,-10}, -{72,21,-9}, -{72,21,-8}, -{72,21,-7}, -{72,21,-6}, -{72,21,-5}, -{72,21,-4}, -{72,21,-3}, -{72,21,-2}, -{72,21,-1}, -{72,21,0}, -{72,21,1}, -{72,21,2}, -{72,21,3}, -{72,21,4}, -{72,21,5}, -{72,21,6}, -{72,21,7}, -{72,21,8}, -{72,21,9}, -{72,21,10}, -{72,21,11}, -{72,21,12}, -{72,21,13}, -{72,21,14}, -{72,21,15}, -{72,21,16}, -{72,21,17}, -{72,21,18}, -{72,21,19}, -{72,21,20}, -{72,21,21}, -{72,21,22}, -{72,21,23}, -{72,21,24}, -{72,21,25}, -{72,21,26}, -{72,21,27}, -{72,21,28}, -{72,21,29}, -{72,21,30}, -{72,21,31}, -{72,21,32}, -{72,21,33}, -{72,21,34}, -{72,21,35}, -{72,21,36}, -{72,21,37}, -{72,21,38}, -{72,21,39}, -{72,21,40}, -{72,21,41}, -{72,21,42}, -{72,21,43}, -{72,21,44}, -{72,21,45}, -{72,21,46}, -{72,21,47}, -{72,21,48}, -{72,21,49}, -{72,21,50}, -{72,21,51}, -{72,21,52}, -{72,21,53}, -{72,21,54}, -{72,21,55}, -{72,21,56}, -{72,21,57}, -{72,21,58}, -{72,21,59}, -{72,21,60}, -{72,21,61}, -{72,21,62}, -{72,21,63}, -{72,21,64}, -{72,21,65}, -{72,21,66}, -{72,21,67}, -{72,21,68}, -{72,21,69}, -{72,21,70}, -{72,21,71}, -{72,21,72}, -{72,21,73}, -{72,21,74}, -{72,21,75}, -{72,21,76}, -{72,22,-43}, -{72,22,-42}, -{72,22,-41}, -{72,22,-40}, -{72,22,-39}, -{72,22,-38}, -{72,22,-37}, -{72,22,-36}, -{72,22,-35}, -{72,22,-34}, -{72,22,-33}, -{72,22,-32}, -{72,22,-31}, -{72,22,-30}, -{72,22,-29}, -{72,22,-28}, -{72,22,-27}, -{72,22,-26}, -{72,22,-25}, -{72,22,-24}, -{72,22,-23}, -{72,22,-22}, -{72,22,-21}, -{72,22,-20}, -{72,22,-19}, -{72,22,-18}, -{72,22,-17}, -{72,22,-16}, -{72,22,-15}, -{72,22,-14}, -{72,22,-13}, -{72,22,-12}, -{72,22,-11}, -{72,22,-10}, -{72,22,-9}, -{72,22,-8}, -{72,22,-7}, -{72,22,-6}, -{72,22,-5}, -{72,22,-4}, -{72,22,-3}, -{72,22,-2}, -{72,22,-1}, -{72,22,0}, -{72,22,1}, -{72,22,2}, -{72,22,3}, -{72,22,4}, -{72,22,5}, -{72,22,6}, -{72,22,7}, -{72,22,8}, -{72,22,9}, -{72,22,10}, -{72,22,11}, -{72,22,12}, -{72,22,13}, -{72,22,14}, -{72,22,15}, -{72,22,16}, -{72,22,17}, -{72,22,18}, -{72,22,19}, -{72,22,20}, -{72,22,21}, -{72,22,22}, -{72,22,23}, -{72,22,24}, -{72,22,25}, -{72,22,26}, -{72,22,27}, -{72,22,28}, -{72,22,29}, -{72,22,30}, -{72,22,31}, -{72,22,32}, -{72,22,33}, -{72,22,34}, -{72,22,35}, -{72,22,36}, -{72,22,37}, -{72,22,38}, -{72,22,39}, -{72,22,40}, -{72,22,41}, -{72,22,42}, -{72,22,43}, -{72,22,44}, -{72,22,45}, -{72,22,46}, -{72,22,47}, -{72,22,48}, -{72,22,49}, -{72,22,50}, -{72,22,51}, -{72,22,52}, -{72,22,53}, -{72,22,54}, -{72,22,55}, -{72,22,56}, -{72,22,57}, -{72,22,58}, -{72,22,59}, -{72,22,60}, -{72,22,61}, -{72,22,62}, -{72,22,63}, -{72,22,64}, -{72,22,65}, -{72,22,66}, -{72,22,67}, -{72,22,68}, -{72,22,69}, -{72,22,70}, -{72,22,71}, -{72,22,72}, -{72,22,73}, -{72,22,74}, -{72,22,75}, -{72,22,76}, -{72,23,-43}, -{72,23,-42}, -{72,23,-41}, -{72,23,-40}, -{72,23,-39}, -{72,23,-38}, -{72,23,-37}, -{72,23,-36}, -{72,23,-35}, -{72,23,-34}, -{72,23,-33}, -{72,23,-32}, -{72,23,-31}, -{72,23,-30}, -{72,23,-29}, -{72,23,-28}, -{72,23,-27}, -{72,23,-26}, -{72,23,-25}, -{72,23,-24}, -{72,23,-23}, -{72,23,-22}, -{72,23,-21}, -{72,23,-20}, -{72,23,-19}, -{72,23,-18}, -{72,23,-17}, -{72,23,-16}, -{72,23,-15}, -{72,23,-14}, -{72,23,-13}, -{72,23,-12}, -{72,23,-11}, -{72,23,-10}, -{72,23,-9}, -{72,23,-8}, -{72,23,-7}, -{72,23,-6}, -{72,23,-5}, -{72,23,-4}, -{72,23,-3}, -{72,23,-2}, -{72,23,-1}, -{72,23,0}, -{72,23,1}, -{72,23,2}, -{72,23,3}, -{72,23,4}, -{72,23,5}, -{72,23,6}, -{72,23,7}, -{72,23,8}, -{72,23,9}, -{72,23,10}, -{72,23,11}, -{72,23,12}, -{72,23,13}, -{72,23,14}, -{72,23,15}, -{72,23,16}, -{72,23,17}, -{72,23,18}, -{72,23,19}, -{72,23,20}, -{72,23,21}, -{72,23,22}, -{72,23,23}, -{72,23,24}, -{72,23,25}, -{72,23,26}, -{72,23,27}, -{72,23,28}, -{72,23,29}, -{72,23,30}, -{72,23,31}, -{72,23,32}, -{72,23,33}, -{72,23,34}, -{72,23,35}, -{72,23,36}, -{72,23,37}, -{72,23,38}, -{72,23,39}, -{72,23,40}, -{72,23,41}, -{72,23,42}, -{72,23,43}, -{72,23,44}, -{72,23,45}, -{72,23,46}, -{72,23,47}, -{72,23,48}, -{72,23,49}, -{72,23,50}, -{72,23,51}, -{72,23,52}, -{72,23,53}, -{72,23,54}, -{72,23,55}, -{72,23,56}, -{72,23,57}, -{72,23,58}, -{72,23,59}, -{72,23,60}, -{72,23,61}, -{72,23,62}, -{72,23,63}, -{72,23,64}, -{72,23,65}, -{72,23,66}, -{72,23,67}, -{72,23,68}, -{72,23,69}, -{72,23,70}, -{72,23,71}, -{72,23,72}, -{72,23,73}, -{72,23,74}, -{72,23,75}, -{72,23,76}, -{72,24,-43}, -{72,24,-42}, -{72,24,-41}, -{72,24,-40}, -{72,24,-39}, -{72,24,-38}, -{72,24,-37}, -{72,24,-36}, -{72,24,-35}, -{72,24,-34}, -{72,24,-33}, -{72,24,-32}, -{72,24,-31}, -{72,24,-30}, -{72,24,-29}, -{72,24,-28}, -{72,24,-27}, -{72,24,-26}, -{72,24,-25}, -{72,24,-24}, -{72,24,-23}, -{72,24,-22}, -{72,24,-21}, -{72,24,-20}, -{72,24,-19}, -{72,24,-18}, -{72,24,-17}, -{72,24,-16}, -{72,24,-15}, -{72,24,-14}, -{72,24,-13}, -{72,24,-12}, -{72,24,-11}, -{72,24,-10}, -{72,24,-9}, -{72,24,-8}, -{72,24,-7}, -{72,24,-6}, -{72,24,-5}, -{72,24,-4}, -{72,24,-3}, -{72,24,-2}, -{72,24,-1}, -{72,24,0}, -{72,24,1}, -{72,24,2}, -{72,24,3}, -{72,24,4}, -{72,24,5}, -{72,24,6}, -{72,24,7}, -{72,24,8}, -{72,24,9}, -{72,24,10}, -{72,24,11}, -{72,24,12}, -{72,24,13}, -{72,24,14}, -{72,24,15}, -{72,24,16}, -{72,24,17}, -{72,24,18}, -{72,24,19}, -{72,24,20}, -{72,24,21}, -{72,24,22}, -{72,24,23}, -{72,24,24}, -{72,24,25}, -{72,24,26}, -{72,24,27}, -{72,24,28}, -{72,24,29}, -{72,24,30}, -{72,24,31}, -{72,24,32}, -{72,24,33}, -{72,24,34}, -{72,24,35}, -{72,24,36}, -{72,24,37}, -{72,24,38}, -{72,24,39}, -{72,24,40}, -{72,24,41}, -{72,24,42}, -{72,24,43}, -{72,24,44}, -{72,24,45}, -{72,24,46}, -{72,24,47}, -{72,24,48}, -{72,24,49}, -{72,24,50}, -{72,24,51}, -{72,24,52}, -{72,24,53}, -{72,24,54}, -{72,24,55}, -{72,24,56}, -{72,24,57}, -{72,24,58}, -{72,24,59}, -{72,24,60}, -{72,24,61}, -{72,24,62}, -{72,24,63}, -{72,24,64}, -{72,24,65}, -{72,24,66}, -{72,24,67}, -{72,24,68}, -{72,24,69}, -{72,24,70}, -{72,24,71}, -{72,24,72}, -{72,24,73}, -{72,24,74}, -{72,24,75}, -{72,24,76}, -{72,25,-43}, -{72,25,-42}, -{72,25,-41}, -{72,25,-40}, -{72,25,-39}, -{72,25,-38}, -{72,25,-37}, -{72,25,-36}, -{72,25,-35}, -{72,25,-34}, -{72,25,-33}, -{72,25,-32}, -{72,25,-31}, -{72,25,-30}, -{72,25,-29}, -{72,25,-28}, -{72,25,-27}, -{72,25,-26}, -{72,25,-25}, -{72,25,-24}, -{72,25,-23}, -{72,25,-22}, -{72,25,-21}, -{72,25,-20}, -{72,25,-19}, -{72,25,-18}, -{72,25,-17}, -{72,25,-16}, -{72,25,-15}, -{72,25,-14}, -{72,25,-13}, -{72,25,-12}, -{72,25,-11}, -{72,25,-10}, -{72,25,-9}, -{72,25,-8}, -{72,25,-7}, -{72,25,-6}, -{72,25,-5}, -{72,25,-4}, -{72,25,-3}, -{72,25,-2}, -{72,25,-1}, -{72,25,0}, -{72,25,1}, -{72,25,2}, -{72,25,3}, -{72,25,4}, -{72,25,5}, -{72,25,6}, -{72,25,7}, -{72,25,8}, -{72,25,9}, -{72,25,10}, -{72,25,11}, -{72,25,12}, -{72,25,13}, -{72,25,14}, -{72,25,15}, -{72,25,16}, -{72,25,17}, -{72,25,18}, -{72,25,19}, -{72,25,20}, -{72,25,21}, -{72,25,22}, -{72,25,23}, -{72,25,24}, -{72,25,25}, -{72,25,26}, -{72,25,27}, -{72,25,28}, -{72,25,29}, -{72,25,30}, -{72,25,31}, -{72,25,32}, -{72,25,33}, -{72,25,34}, -{72,25,35}, -{72,25,36}, -{72,25,37}, -{72,25,38}, -{72,25,39}, -{72,25,40}, -{72,25,41}, -{72,25,42}, -{72,25,43}, -{72,25,44}, -{72,25,45}, -{72,25,46}, -{72,25,47}, -{72,25,48}, -{72,25,49}, -{72,25,50}, -{72,25,51}, -{72,25,52}, -{72,25,53}, -{72,25,54}, -{72,25,55}, -{72,25,56}, -{72,25,57}, -{72,25,58}, -{72,25,59}, -{72,25,60}, -{72,25,61}, -{72,25,62}, -{72,25,63}, -{72,25,64}, -{72,25,65}, -{72,25,66}, -{72,25,67}, -{72,25,68}, -{72,25,69}, -{72,25,70}, -{72,25,71}, -{72,25,72}, -{72,25,73}, -{72,25,74}, -{72,25,75}, -{72,25,76}, -{72,26,-43}, -{72,26,-42}, -{72,26,-41}, -{72,26,-40}, -{72,26,-39}, -{72,26,-38}, -{72,26,-37}, -{72,26,-36}, -{72,26,-35}, -{72,26,-34}, -{72,26,-33}, -{72,26,-32}, -{72,26,-31}, -{72,26,-30}, -{72,26,-29}, -{72,26,-28}, -{72,26,-27}, -{72,26,-26}, -{72,26,-25}, -{72,26,-24}, -{72,26,-23}, -{72,26,-22}, -{72,26,-21}, -{72,26,-20}, -{72,26,-19}, -{72,26,-18}, -{72,26,-17}, -{72,26,-16}, -{72,26,-15}, -{72,26,-14}, -{72,26,-13}, -{72,26,-12}, -{72,26,-11}, -{72,26,-10}, -{72,26,-9}, -{72,26,-8}, -{72,26,-7}, -{72,26,-6}, -{72,26,-5}, -{72,26,-4}, -{72,26,-3}, -{72,26,-2}, -{72,26,-1}, -{72,26,0}, -{72,26,1}, -{72,26,2}, -{72,26,3}, -{72,26,4}, -{72,26,5}, -{72,26,6}, -{72,26,7}, -{72,26,8}, -{72,26,9}, -{72,26,10}, -{72,26,11}, -{72,26,12}, -{72,26,13}, -{72,26,14}, -{72,26,15}, -{72,26,16}, -{72,26,17}, -{72,26,18}, -{72,26,19}, -{72,26,20}, -{72,26,21}, -{72,26,22}, -{72,26,23}, -{72,26,24}, -{72,26,25}, -{72,26,26}, -{72,26,27}, -{72,26,28}, -{72,26,29}, -{72,26,30}, -{72,26,31}, -{72,26,32}, -{72,26,33}, -{72,26,34}, -{72,26,35}, -{72,26,36}, -{72,26,37}, -{72,26,38}, -{72,26,39}, -{72,26,40}, -{72,26,41}, -{72,26,42}, -{72,26,43}, -{72,26,44}, -{72,26,45}, -{72,26,46}, -{72,26,47}, -{72,26,48}, -{72,26,49}, -{72,26,50}, -{72,26,51}, -{72,26,52}, -{72,26,53}, -{72,26,54}, -{72,26,55}, -{72,26,56}, -{72,26,57}, -{72,26,58}, -{72,26,59}, -{72,26,60}, -{72,26,61}, -{72,26,62}, -{72,26,63}, -{72,26,64}, -{72,26,65}, -{72,26,66}, -{72,26,67}, -{72,26,68}, -{72,26,69}, -{72,26,70}, -{72,26,71}, -{72,26,72}, -{72,26,73}, -{72,26,74}, -{72,26,75}, -{72,26,76}, -{72,27,-43}, -{72,27,-42}, -{72,27,-41}, -{72,27,-40}, -{72,27,-39}, -{72,27,-38}, -{72,27,-37}, -{72,27,-36}, -{72,27,-35}, -{72,27,-34}, -{72,27,-33}, -{72,27,-32}, -{72,27,-31}, -{72,27,-30}, -{72,27,-29}, -{72,27,-28}, -{72,27,-27}, -{72,27,-26}, -{72,27,-25}, -{72,27,-24}, -{72,27,-23}, -{72,27,-22}, -{72,27,-21}, -{72,27,-20}, -{72,27,-19}, -{72,27,-18}, -{72,27,-17}, -{72,27,-16}, -{72,27,-15}, -{72,27,-14}, -{72,27,-13}, -{72,27,-12}, -{72,27,-11}, -{72,27,-10}, -{72,27,-9}, -{72,27,-8}, -{72,27,-7}, -{72,27,-6}, -{72,27,-5}, -{72,27,-4}, -{72,27,-3}, -{72,27,-2}, -{72,27,-1}, -{72,27,0}, -{72,27,1}, -{72,27,2}, -{72,27,3}, -{72,27,4}, -{72,27,5}, -{72,27,6}, -{72,27,7}, -{72,27,8}, -{72,27,9}, -{72,27,10}, -{72,27,11}, -{72,27,12}, -{72,27,13}, -{72,27,14}, -{72,27,15}, -{72,27,16}, -{72,27,17}, -{72,27,18}, -{72,27,19}, -{72,27,20}, -{72,27,21}, -{72,27,22}, -{72,27,23}, -{72,27,24}, -{72,27,25}, -{72,27,26}, -{72,27,27}, -{72,27,28}, -{72,27,29}, -{72,27,30}, -{72,27,31}, -{72,27,32}, -{72,27,33}, -{72,27,34}, -{72,27,35}, -{72,27,36}, -{72,27,37}, -{72,27,38}, -{72,27,39}, -{72,27,40}, -{72,27,41}, -{72,27,42}, -{72,27,43}, -{72,27,44}, -{72,27,45}, -{72,27,46}, -{72,27,47}, -{72,27,48}, -{72,27,49}, -{72,27,50}, -{72,27,51}, -{72,27,52}, -{72,27,53}, -{72,27,54}, -{72,27,55}, -{72,27,56}, -{72,27,57}, -{72,27,58}, -{72,27,59}, -{72,27,60}, -{72,27,61}, -{72,27,62}, -{72,27,63}, -{72,27,64}, -{72,27,65}, -{72,27,66}, -{72,27,67}, -{72,27,68}, -{72,27,69}, -{72,27,70}, -{72,27,71}, -{72,27,72}, -{72,27,73}, -{72,27,74}, -{72,27,75}, -{72,27,76}, -{72,28,-43}, -{72,28,-42}, -{72,28,-41}, -{72,28,-40}, -{72,28,-39}, -{72,28,-38}, -{72,28,-37}, -{72,28,-36}, -{72,28,-35}, -{72,28,-34}, -{72,28,-33}, -{72,28,-32}, -{72,28,-31}, -{72,28,-30}, -{72,28,-29}, -{72,28,-28}, -{72,28,-27}, -{72,28,-26}, -{72,28,-25}, -{72,28,-24}, -{72,28,-23}, -{72,28,-22}, -{72,28,-21}, -{72,28,-20}, -{72,28,-19}, -{72,28,-18}, -{72,28,-17}, -{72,28,-16}, -{72,28,-15}, -{72,28,-14}, -{72,28,-13}, -{72,28,-12}, -{72,28,-11}, -{72,28,-10}, -{72,28,-9}, -{72,28,-8}, -{72,28,-7}, -{72,28,-6}, -{72,28,-5}, -{72,28,-4}, -{72,28,-3}, -{72,28,-2}, -{72,28,-1}, -{72,28,0}, -{72,28,1}, -{72,28,2}, -{72,28,3}, -{72,28,4}, -{72,28,5}, -{72,28,6}, -{72,28,7}, -{72,28,8}, -{72,28,9}, -{72,28,10}, -{72,28,11}, -{72,28,12}, -{72,28,13}, -{72,28,14}, -{72,28,15}, -{72,28,16}, -{72,28,17}, -{72,28,18}, -{72,28,19}, -{72,28,20}, -{72,28,21}, -{72,28,22}, -{72,28,23}, -{72,28,24}, -{72,28,25}, -{72,28,26}, -{72,28,27}, -{72,28,28}, -{72,28,29}, -{72,28,30}, -{72,28,31}, -{72,28,32}, -{72,28,33}, -{72,28,34}, -{72,28,35}, -{72,28,36}, -{72,28,37}, -{72,28,38}, -{72,28,39}, -{72,28,40}, -{72,28,41}, -{72,28,42}, -{72,28,43}, -{72,28,44}, -{72,28,45}, -{72,28,46}, -{72,28,47}, -{72,28,48}, -{72,28,49}, -{72,28,50}, -{72,28,51}, -{72,28,52}, -{72,28,53}, -{72,28,54}, -{72,28,55}, -{72,28,56}, -{72,28,57}, -{72,28,58}, -{72,28,59}, -{72,28,60}, -{72,28,61}, -{72,28,62}, -{72,28,63}, -{72,28,64}, -{72,28,65}, -{72,28,66}, -{72,28,67}, -{72,28,68}, -{72,28,69}, -{72,28,70}, -{72,28,71}, -{72,28,72}, -{72,28,73}, -{72,28,74}, -{72,28,75}, -{72,28,76}, -{72,28,77}, -{72,29,-43}, -{72,29,-42}, -{72,29,-41}, -{72,29,-40}, -{72,29,-39}, -{72,29,-38}, -{72,29,-37}, -{72,29,-36}, -{72,29,-35}, -{72,29,-34}, -{72,29,-33}, -{72,29,-32}, -{72,29,-31}, -{72,29,-30}, -{72,29,-29}, -{72,29,-28}, -{72,29,-27}, -{72,29,-26}, -{72,29,-25}, -{72,29,-24}, -{72,29,-23}, -{72,29,-22}, -{72,29,-21}, -{72,29,-20}, -{72,29,-19}, -{72,29,-18}, -{72,29,-17}, -{72,29,-16}, -{72,29,-15}, -{72,29,-14}, -{72,29,-13}, -{72,29,-12}, -{72,29,-11}, -{72,29,-10}, -{72,29,-9}, -{72,29,-8}, -{72,29,-7}, -{72,29,-6}, -{72,29,-5}, -{72,29,-4}, -{72,29,-3}, -{72,29,-2}, -{72,29,-1}, -{72,29,0}, -{72,29,1}, -{72,29,2}, -{72,29,3}, -{72,29,4}, -{72,29,5}, -{72,29,6}, -{72,29,7}, -{72,29,8}, -{72,29,9}, -{72,29,10}, -{72,29,11}, -{72,29,12}, -{72,29,13}, -{72,29,14}, -{72,29,15}, -{72,29,16}, -{72,29,17}, -{72,29,18}, -{72,29,19}, -{72,29,20}, -{72,29,21}, -{72,29,22}, -{72,29,23}, -{72,29,24}, -{72,29,25}, -{72,29,26}, -{72,29,27}, -{72,29,28}, -{72,29,29}, -{72,29,30}, -{72,29,31}, -{72,29,32}, -{72,29,33}, -{72,29,34}, -{72,29,35}, -{72,29,36}, -{72,29,37}, -{72,29,38}, -{72,29,39}, -{72,29,40}, -{72,29,41}, -{72,29,42}, -{72,29,43}, -{72,29,44}, -{72,29,45}, -{72,29,46}, -{72,29,47}, -{72,29,48}, -{72,29,49}, -{72,29,50}, -{72,29,51}, -{72,29,52}, -{72,29,53}, -{72,29,54}, -{72,29,55}, -{72,29,56}, -{72,29,57}, -{72,29,58}, -{72,29,59}, -{72,29,60}, -{72,29,61}, -{72,29,62}, -{72,29,63}, -{72,29,64}, -{72,29,65}, -{72,29,66}, -{72,29,67}, -{72,29,68}, -{72,29,69}, -{72,29,70}, -{72,29,71}, -{72,29,72}, -{72,29,73}, -{72,29,74}, -{72,29,75}, -{72,29,76}, -{72,29,77}, -{72,30,-43}, -{72,30,-42}, -{72,30,-41}, -{72,30,-40}, -{72,30,-39}, -{72,30,-38}, -{72,30,-37}, -{72,30,-36}, -{72,30,-35}, -{72,30,-34}, -{72,30,-33}, -{72,30,-32}, -{72,30,-31}, -{72,30,-30}, -{72,30,-29}, -{72,30,-28}, -{72,30,-27}, -{72,30,-26}, -{72,30,-25}, -{72,30,-24}, -{72,30,-23}, -{72,30,-22}, -{72,30,-21}, -{72,30,-20}, -{72,30,-19}, -{72,30,-18}, -{72,30,-17}, -{72,30,-16}, -{72,30,-15}, -{72,30,-14}, -{72,30,-13}, -{72,30,-12}, -{72,30,-11}, -{72,30,-10}, -{72,30,-9}, -{72,30,-8}, -{72,30,-7}, -{72,30,-6}, -{72,30,-5}, -{72,30,-4}, -{72,30,-3}, -{72,30,-2}, -{72,30,-1}, -{72,30,0}, -{72,30,1}, -{72,30,2}, -{72,30,3}, -{72,30,4}, -{72,30,5}, -{72,30,6}, -{72,30,7}, -{72,30,8}, -{72,30,9}, -{72,30,10}, -{72,30,11}, -{72,30,12}, -{72,30,13}, -{72,30,14}, -{72,30,15}, -{72,30,16}, -{72,30,17}, -{72,30,18}, -{72,30,19}, -{72,30,20}, -{72,30,21}, -{72,30,22}, -{72,30,23}, -{72,30,24}, -{72,30,25}, -{72,30,26}, -{72,30,27}, -{72,30,28}, -{72,30,29}, -{72,30,30}, -{72,30,31}, -{72,30,32}, -{72,30,33}, -{72,30,34}, -{72,30,35}, -{72,30,36}, -{72,30,37}, -{72,30,38}, -{72,30,39}, -{72,30,40}, -{72,30,41}, -{72,30,42}, -{72,30,43}, -{72,30,44}, -{72,30,45}, -{72,30,46}, -{72,30,47}, -{72,30,48}, -{72,30,49}, -{72,30,50}, -{72,30,51}, -{72,30,52}, -{72,30,53}, -{72,30,54}, -{72,30,55}, -{72,30,56}, -{72,30,57}, -{72,30,58}, -{72,30,59}, -{72,30,60}, -{72,30,61}, -{72,30,62}, -{72,30,63}, -{72,30,64}, -{72,30,65}, -{72,30,66}, -{72,30,67}, -{72,30,68}, -{72,30,69}, -{72,30,70}, -{72,30,71}, -{72,30,72}, -{72,30,73}, -{72,30,74}, -{72,30,75}, -{72,30,76}, -{72,30,77}, -{72,31,-42}, -{72,31,-41}, -{72,31,-40}, -{72,31,-39}, -{72,31,-38}, -{72,31,-37}, -{72,31,-36}, -{72,31,-35}, -{72,31,-34}, -{72,31,-33}, -{72,31,-32}, -{72,31,-31}, -{72,31,-30}, -{72,31,-29}, -{72,31,-28}, -{72,31,-27}, -{72,31,-26}, -{72,31,-25}, -{72,31,-24}, -{72,31,-23}, -{72,31,-22}, -{72,31,-21}, -{72,31,-20}, -{72,31,-19}, -{72,31,-18}, -{72,31,-17}, -{72,31,-16}, -{72,31,-15}, -{72,31,-14}, -{72,31,-13}, -{72,31,-12}, -{72,31,-11}, -{72,31,-10}, -{72,31,-9}, -{72,31,-8}, -{72,31,-7}, -{72,31,-6}, -{72,31,-5}, -{72,31,-4}, -{72,31,-3}, -{72,31,-2}, -{72,31,-1}, -{72,31,0}, -{72,31,1}, -{72,31,2}, -{72,31,3}, -{72,31,4}, -{72,31,5}, -{72,31,6}, -{72,31,7}, -{72,31,8}, -{72,31,9}, -{72,31,10}, -{72,31,11}, -{72,31,12}, -{72,31,13}, -{72,31,14}, -{72,31,15}, -{72,31,16}, -{72,31,17}, -{72,31,18}, -{72,31,19}, -{72,31,20}, -{72,31,21}, -{72,31,22}, -{72,31,23}, -{72,31,24}, -{72,31,25}, -{72,31,26}, -{72,31,27}, -{72,31,28}, -{72,31,29}, -{72,31,30}, -{72,31,31}, -{72,31,32}, -{72,31,33}, -{72,31,34}, -{72,31,35}, -{72,31,36}, -{72,31,37}, -{72,31,38}, -{72,31,39}, -{72,31,40}, -{72,31,41}, -{72,31,42}, -{72,31,43}, -{72,31,44}, -{72,31,45}, -{72,31,46}, -{72,31,47}, -{72,31,48}, -{72,31,49}, -{72,31,50}, -{72,31,51}, -{72,31,52}, -{72,31,53}, -{72,31,54}, -{72,31,55}, -{72,31,56}, -{72,31,57}, -{72,31,58}, -{72,31,59}, -{72,31,60}, -{72,31,61}, -{72,31,62}, -{72,31,63}, -{72,31,64}, -{72,31,65}, -{72,31,66}, -{72,31,67}, -{72,31,68}, -{72,31,69}, -{72,31,70}, -{72,31,71}, -{72,31,72}, -{72,31,73}, -{72,31,74}, -{72,31,75}, -{72,31,76}, -{72,32,-42}, -{72,32,-41}, -{72,32,-40}, -{72,32,-39}, -{72,32,-38}, -{72,32,-37}, -{72,32,-36}, -{72,32,-35}, -{72,32,-34}, -{72,32,-33}, -{72,32,-32}, -{72,32,-31}, -{72,32,-30}, -{72,32,-29}, -{72,32,-28}, -{72,32,-27}, -{72,32,-26}, -{72,32,-25}, -{72,32,-24}, -{72,32,-23}, -{72,32,-22}, -{72,32,-21}, -{72,32,-20}, -{72,32,-19}, -{72,32,-18}, -{72,32,-17}, -{72,32,-16}, -{72,32,-15}, -{72,32,-14}, -{72,32,-13}, -{72,32,-12}, -{72,32,-11}, -{72,32,-10}, -{72,32,-9}, -{72,32,-8}, -{72,32,-7}, -{72,32,-6}, -{72,32,-5}, -{72,32,-4}, -{72,32,-3}, -{72,32,-2}, -{72,32,-1}, -{72,32,0}, -{72,32,1}, -{72,32,2}, -{72,32,3}, -{72,32,4}, -{72,32,5}, -{72,32,6}, -{72,32,7}, -{72,32,8}, -{72,32,9}, -{72,32,10}, -{72,32,11}, -{72,32,12}, -{72,32,13}, -{72,32,14}, -{72,32,15}, -{72,32,16}, -{72,32,17}, -{72,32,18}, -{72,32,19}, -{72,32,20}, -{72,32,21}, -{72,32,22}, -{72,32,23}, -{72,32,24}, -{72,32,25}, -{72,32,26}, -{72,32,27}, -{72,32,28}, -{72,32,29}, -{72,32,30}, -{72,32,31}, -{72,32,32}, -{72,32,33}, -{72,32,34}, -{72,32,35}, -{72,32,36}, -{72,32,37}, -{72,32,38}, -{72,32,39}, -{72,32,40}, -{72,32,41}, -{72,32,42}, -{72,32,43}, -{72,32,44}, -{72,32,45}, -{72,32,46}, -{72,32,47}, -{72,32,48}, -{72,32,49}, -{72,32,50}, -{72,32,51}, -{72,32,52}, -{72,32,53}, -{72,32,54}, -{72,32,55}, -{72,32,56}, -{72,32,57}, -{72,32,58}, -{72,32,59}, -{72,32,60}, -{72,32,61}, -{72,32,62}, -{72,32,63}, -{72,32,64}, -{72,32,65}, -{72,32,66}, -{72,32,67}, -{72,33,-42}, -{72,33,-41}, -{72,33,-40}, -{72,33,-39}, -{72,33,-38}, -{72,33,-37}, -{72,33,-36}, -{72,33,-35}, -{72,33,-34}, -{72,33,-33}, -{72,33,-32}, -{72,33,-31}, -{72,33,-30}, -{72,33,-29}, -{72,33,-28}, -{72,33,-27}, -{72,33,-26}, -{72,33,-25}, -{72,33,-24}, -{72,33,-23}, -{72,33,-22}, -{72,33,-21}, -{72,33,-20}, -{72,33,-19}, -{72,33,-18}, -{72,33,-17}, -{72,33,-16}, -{72,33,-15}, -{72,33,-14}, -{72,33,-13}, -{72,33,-12}, -{72,33,-11}, -{72,33,-10}, -{72,33,-9}, -{72,33,-8}, -{72,33,-7}, -{72,33,-6}, -{72,33,-5}, -{72,33,-4}, -{72,33,-3}, -{72,33,-2}, -{72,33,-1}, -{72,33,0}, -{72,33,1}, -{72,33,2}, -{72,33,3}, -{72,33,4}, -{72,33,5}, -{72,33,6}, -{72,33,7}, -{72,33,8}, -{72,33,9}, -{72,33,10}, -{72,33,11}, -{72,33,12}, -{72,33,13}, -{72,33,14}, -{72,33,15}, -{72,33,16}, -{72,33,17}, -{72,33,18}, -{72,33,19}, -{72,33,20}, -{72,33,21}, -{72,33,22}, -{72,33,23}, -{72,33,24}, -{72,33,25}, -{72,33,26}, -{72,33,27}, -{72,33,28}, -{72,33,29}, -{72,33,30}, -{72,33,31}, -{72,33,32}, -{72,33,33}, -{72,33,34}, -{72,33,35}, -{72,33,36}, -{72,33,37}, -{72,33,38}, -{72,33,39}, -{72,33,40}, -{72,33,41}, -{72,33,42}, -{72,33,43}, -{72,33,44}, -{72,33,45}, -{72,33,46}, -{72,33,47}, -{72,33,48}, -{72,33,49}, -{72,33,50}, -{72,33,51}, -{72,33,52}, -{72,33,53}, -{72,33,54}, -{72,33,55}, -{72,33,56}, -{72,33,57}, -{72,33,58}, -{72,33,59}, -{72,34,-42}, -{72,34,-41}, -{72,34,-40}, -{72,34,-39}, -{72,34,-38}, -{72,34,-37}, -{72,34,-36}, -{72,34,-35}, -{72,34,-34}, -{72,34,-33}, -{72,34,-32}, -{72,34,-31}, -{72,34,-30}, -{72,34,-29}, -{72,34,-28}, -{72,34,-27}, -{72,34,-26}, -{72,34,-25}, -{72,34,-24}, -{72,34,-23}, -{72,34,-22}, -{72,34,-21}, -{72,34,-20}, -{72,34,-19}, -{72,34,-18}, -{72,34,-17}, -{72,34,-16}, -{72,34,-15}, -{72,34,-14}, -{72,34,-13}, -{72,34,-12}, -{72,34,-11}, -{72,34,-10}, -{72,34,-9}, -{72,34,-8}, -{72,34,-7}, -{72,34,-6}, -{72,34,-5}, -{72,34,-4}, -{72,34,-3}, -{72,34,-2}, -{72,34,-1}, -{72,34,0}, -{72,34,1}, -{72,34,2}, -{72,34,3}, -{72,34,4}, -{72,34,5}, -{72,34,6}, -{72,34,7}, -{72,34,8}, -{72,34,9}, -{72,34,10}, -{72,34,11}, -{72,34,12}, -{72,34,13}, -{72,34,14}, -{72,34,15}, -{72,34,16}, -{72,34,17}, -{72,34,18}, -{72,34,19}, -{72,34,20}, -{72,34,21}, -{72,34,22}, -{72,34,23}, -{72,34,24}, -{72,34,25}, -{72,34,26}, -{72,34,27}, -{72,34,28}, -{72,34,29}, -{72,34,30}, -{72,34,31}, -{72,34,32}, -{72,34,33}, -{72,34,34}, -{72,34,35}, -{72,34,36}, -{72,34,37}, -{72,34,38}, -{72,34,39}, -{72,34,40}, -{72,34,41}, -{72,34,42}, -{72,34,43}, -{72,34,44}, -{72,34,45}, -{72,34,46}, -{72,34,47}, -{72,34,48}, -{72,34,49}, -{72,34,50}, -{72,34,51}, -{72,34,52}, -{72,35,-42}, -{72,35,-41}, -{72,35,-40}, -{72,35,-39}, -{72,35,-38}, -{72,35,-37}, -{72,35,-36}, -{72,35,-35}, -{72,35,-34}, -{72,35,-33}, -{72,35,-32}, -{72,35,-31}, -{72,35,-30}, -{72,35,-29}, -{72,35,-28}, -{72,35,-27}, -{72,35,-26}, -{72,35,-25}, -{72,35,-24}, -{72,35,-23}, -{72,35,-22}, -{72,35,-21}, -{72,35,-20}, -{72,35,-19}, -{72,35,-18}, -{72,35,-17}, -{72,35,-16}, -{72,35,-15}, -{72,35,-14}, -{72,35,-13}, -{72,35,-12}, -{72,35,-11}, -{72,35,-10}, -{72,35,-9}, -{72,35,-8}, -{72,35,-7}, -{72,35,-6}, -{72,35,-5}, -{72,35,-4}, -{72,35,-3}, -{72,35,-2}, -{72,35,-1}, -{72,35,0}, -{72,35,1}, -{72,35,2}, -{72,35,3}, -{72,35,4}, -{72,35,5}, -{72,35,6}, -{72,35,7}, -{72,35,8}, -{72,35,9}, -{72,35,10}, -{72,35,11}, -{72,35,12}, -{72,35,13}, -{72,35,14}, -{72,35,15}, -{72,35,16}, -{72,35,17}, -{72,35,18}, -{72,35,19}, -{72,35,20}, -{72,35,21}, -{72,35,22}, -{72,35,23}, -{72,35,24}, -{72,35,25}, -{72,35,26}, -{72,35,27}, -{72,35,28}, -{72,35,29}, -{72,35,30}, -{72,35,31}, -{72,35,32}, -{72,35,33}, -{72,35,34}, -{72,35,35}, -{72,35,36}, -{72,35,37}, -{72,35,38}, -{72,35,39}, -{72,35,40}, -{72,35,41}, -{72,35,42}, -{72,35,43}, -{72,35,44}, -{72,35,45}, -{72,35,46}, -{72,36,-42}, -{72,36,-41}, -{72,36,-40}, -{72,36,-39}, -{72,36,-38}, -{72,36,-37}, -{72,36,-36}, -{72,36,-35}, -{72,36,-34}, -{72,36,-33}, -{72,36,-32}, -{72,36,-31}, -{72,36,-30}, -{72,36,-29}, -{72,36,-28}, -{72,36,-27}, -{72,36,-26}, -{72,36,-25}, -{72,36,-24}, -{72,36,-23}, -{72,36,-22}, -{72,36,-21}, -{72,36,-20}, -{72,36,-19}, -{72,36,-18}, -{72,36,-17}, -{72,36,-16}, -{72,36,-15}, -{72,36,-14}, -{72,36,-13}, -{72,36,-12}, -{72,36,-11}, -{72,36,-10}, -{72,36,-9}, -{72,36,-8}, -{72,36,-7}, -{72,36,-6}, -{72,36,-5}, -{72,36,-4}, -{72,36,-3}, -{72,36,-2}, -{72,36,-1}, -{72,36,0}, -{72,36,1}, -{72,36,2}, -{72,36,3}, -{72,36,4}, -{72,36,5}, -{72,36,6}, -{72,36,7}, -{72,36,8}, -{72,36,9}, -{72,36,10}, -{72,36,11}, -{72,36,12}, -{72,36,13}, -{72,36,14}, -{72,36,15}, -{72,36,16}, -{72,36,17}, -{72,36,18}, -{72,36,19}, -{72,36,20}, -{72,36,21}, -{72,36,22}, -{72,36,23}, -{72,36,24}, -{72,36,25}, -{72,36,26}, -{72,36,27}, -{72,36,28}, -{72,36,29}, -{72,36,30}, -{72,36,31}, -{72,36,32}, -{72,36,33}, -{72,36,34}, -{72,36,35}, -{72,36,36}, -{72,36,37}, -{72,36,38}, -{72,36,39}, -{72,36,40}, -{72,36,41}, -{72,37,-42}, -{72,37,-41}, -{72,37,-40}, -{72,37,-39}, -{72,37,-38}, -{72,37,-37}, -{72,37,-36}, -{72,37,-35}, -{72,37,-34}, -{72,37,-33}, -{72,37,-32}, -{72,37,-31}, -{72,37,-30}, -{72,37,-29}, -{72,37,-28}, -{72,37,-27}, -{72,37,-26}, -{72,37,-25}, -{72,37,-24}, -{72,37,-23}, -{72,37,-22}, -{72,37,-21}, -{72,37,-20}, -{72,37,-19}, -{72,37,-18}, -{72,37,-17}, -{72,37,-16}, -{72,37,-15}, -{72,37,-14}, -{72,37,-13}, -{72,37,-12}, -{72,37,-11}, -{72,37,-10}, -{72,37,-9}, -{72,37,-8}, -{72,37,-7}, -{72,37,-6}, -{72,37,-5}, -{72,37,-4}, -{72,37,-3}, -{72,37,-2}, -{72,37,-1}, -{72,37,0}, -{72,37,1}, -{72,37,2}, -{72,37,3}, -{72,37,4}, -{72,37,5}, -{72,37,6}, -{72,37,7}, -{72,37,8}, -{72,37,9}, -{72,37,10}, -{72,37,11}, -{72,37,12}, -{72,37,13}, -{72,37,14}, -{72,37,15}, -{72,37,16}, -{72,37,17}, -{72,37,18}, -{72,37,19}, -{72,37,20}, -{72,37,21}, -{72,37,22}, -{72,37,23}, -{72,37,24}, -{72,37,25}, -{72,37,26}, -{72,37,27}, -{72,37,28}, -{72,37,29}, -{72,37,30}, -{72,37,31}, -{72,37,32}, -{72,37,33}, -{72,37,34}, -{72,37,35}, -{72,37,36}, -{72,38,-42}, -{72,38,-41}, -{72,38,-40}, -{72,38,-39}, -{72,38,-38}, -{72,38,-37}, -{72,38,-36}, -{72,38,-35}, -{72,38,-34}, -{72,38,-33}, -{72,38,-32}, -{72,38,-31}, -{72,38,-30}, -{72,38,-29}, -{72,38,-28}, -{72,38,-27}, -{72,38,-26}, -{72,38,-25}, -{72,38,-24}, -{72,38,-23}, -{72,38,-22}, -{72,38,-21}, -{72,38,-20}, -{72,38,-19}, -{72,38,-18}, -{72,38,-17}, -{72,38,-16}, -{72,38,-15}, -{72,38,-14}, -{72,38,-13}, -{72,38,-12}, -{72,38,-11}, -{72,38,-10}, -{72,38,-9}, -{72,38,-8}, -{72,38,-7}, -{72,38,-6}, -{72,38,-5}, -{72,38,-4}, -{72,38,-3}, -{72,38,-2}, -{72,38,-1}, -{72,38,0}, -{72,38,1}, -{72,38,2}, -{72,38,3}, -{72,38,4}, -{72,38,5}, -{72,38,6}, -{72,38,7}, -{72,38,8}, -{72,38,9}, -{72,38,10}, -{72,38,11}, -{72,38,12}, -{72,38,13}, -{72,38,14}, -{72,38,15}, -{72,38,16}, -{72,38,17}, -{72,38,18}, -{72,38,19}, -{72,38,20}, -{72,38,21}, -{72,38,22}, -{72,38,23}, -{72,38,24}, -{72,38,25}, -{72,38,26}, -{72,38,27}, -{72,38,28}, -{72,38,29}, -{72,38,30}, -{72,38,31}, -{72,39,-42}, -{72,39,-41}, -{72,39,-40}, -{72,39,-39}, -{72,39,-38}, -{72,39,-37}, -{72,39,-36}, -{72,39,-35}, -{72,39,-34}, -{72,39,-33}, -{72,39,-32}, -{72,39,-31}, -{72,39,-30}, -{72,39,-29}, -{72,39,-28}, -{72,39,-27}, -{72,39,-26}, -{72,39,-25}, -{72,39,-24}, -{72,39,-23}, -{72,39,-22}, -{72,39,-21}, -{72,39,-20}, -{72,39,-19}, -{72,39,-18}, -{72,39,-17}, -{72,39,-16}, -{72,39,-15}, -{72,39,-14}, -{72,39,-13}, -{72,39,-12}, -{72,39,-11}, -{72,39,-10}, -{72,39,-9}, -{72,39,-8}, -{72,39,-7}, -{72,39,-6}, -{72,39,-5}, -{72,39,-4}, -{72,39,-3}, -{72,39,-2}, -{72,39,-1}, -{72,39,0}, -{72,39,1}, -{72,39,2}, -{72,39,3}, -{72,39,4}, -{72,39,5}, -{72,39,6}, -{72,39,7}, -{72,39,8}, -{72,39,9}, -{72,39,10}, -{72,39,11}, -{72,39,12}, -{72,39,13}, -{72,39,14}, -{72,39,15}, -{72,39,16}, -{72,39,17}, -{72,39,18}, -{72,39,19}, -{72,39,20}, -{72,39,21}, -{72,39,22}, -{72,39,23}, -{72,39,24}, -{72,39,25}, -{72,39,26}, -{72,39,27}, -{72,40,-42}, -{72,40,-41}, -{72,40,-40}, -{72,40,-39}, -{72,40,-38}, -{72,40,-37}, -{72,40,-36}, -{72,40,-35}, -{72,40,-34}, -{72,40,-33}, -{72,40,-32}, -{72,40,-31}, -{72,40,-30}, -{72,40,-29}, -{72,40,-28}, -{72,40,-27}, -{72,40,-26}, -{72,40,-25}, -{72,40,-24}, -{72,40,-23}, -{72,40,-22}, -{72,40,-21}, -{72,40,-20}, -{72,40,-19}, -{72,40,-18}, -{72,40,-17}, -{72,40,-16}, -{72,40,-15}, -{72,40,-14}, -{72,40,-13}, -{72,40,-12}, -{72,40,-11}, -{72,40,-10}, -{72,40,-9}, -{72,40,-8}, -{72,40,-7}, -{72,40,-6}, -{72,40,-5}, -{72,40,-4}, -{72,40,-3}, -{72,40,-2}, -{72,40,-1}, -{72,40,0}, -{72,40,1}, -{72,40,2}, -{72,40,3}, -{72,40,4}, -{72,40,5}, -{72,40,6}, -{72,40,7}, -{72,40,8}, -{72,40,9}, -{72,40,10}, -{72,40,11}, -{72,40,12}, -{72,40,13}, -{72,40,14}, -{72,40,15}, -{72,40,16}, -{72,40,17}, -{72,40,18}, -{72,40,19}, -{72,40,20}, -{72,40,21}, -{72,40,22}, -{72,40,23}, -{72,41,-42}, -{72,41,-41}, -{72,41,-40}, -{72,41,-39}, -{72,41,-38}, -{72,41,-37}, -{72,41,-36}, -{72,41,-35}, -{72,41,-34}, -{72,41,-33}, -{72,41,-32}, -{72,41,-31}, -{72,41,-30}, -{72,41,-29}, -{72,41,-28}, -{72,41,-27}, -{72,41,-26}, -{72,41,-25}, -{72,41,-24}, -{72,41,-23}, -{72,41,-22}, -{72,41,-21}, -{72,41,-20}, -{72,41,-19}, -{72,41,-18}, -{72,41,-17}, -{72,41,-16}, -{72,41,-15}, -{72,41,-14}, -{72,41,-13}, -{72,41,-12}, -{72,41,-11}, -{72,41,-10}, -{72,41,-9}, -{72,41,-8}, -{72,41,-7}, -{72,41,-6}, -{72,41,-5}, -{72,41,-4}, -{72,41,-3}, -{72,41,-2}, -{72,41,-1}, -{72,41,0}, -{72,41,1}, -{72,41,2}, -{72,41,3}, -{72,41,4}, -{72,41,5}, -{72,41,6}, -{72,41,7}, -{72,41,8}, -{72,41,9}, -{72,41,10}, -{72,41,11}, -{72,41,12}, -{72,41,13}, -{72,41,14}, -{72,41,15}, -{72,41,16}, -{72,41,17}, -{72,41,18}, -{72,41,19}, -{72,42,-42}, -{72,42,-41}, -{72,42,-40}, -{72,42,-39}, -{72,42,-38}, -{72,42,-37}, -{72,42,-36}, -{72,42,-35}, -{72,42,-34}, -{72,42,-33}, -{72,42,-32}, -{72,42,-31}, -{72,42,-30}, -{72,42,-29}, -{72,42,-28}, -{72,42,-27}, -{72,42,-26}, -{72,42,-25}, -{72,42,-24}, -{72,42,-23}, -{72,42,-22}, -{72,42,-21}, -{72,42,-20}, -{72,42,-19}, -{72,42,-18}, -{72,42,-17}, -{72,42,-16}, -{72,42,-15}, -{72,42,-14}, -{72,42,-13}, -{72,42,-12}, -{72,42,-11}, -{72,42,-10}, -{72,42,-9}, -{72,42,-8}, -{72,42,-7}, -{72,42,-6}, -{72,42,-5}, -{72,42,-4}, -{72,42,-3}, -{72,42,-2}, -{72,42,-1}, -{72,42,0}, -{72,42,1}, -{72,42,2}, -{72,42,3}, -{72,42,4}, -{72,42,5}, -{72,42,6}, -{72,42,7}, -{72,42,8}, -{72,42,9}, -{72,42,10}, -{72,42,11}, -{72,42,12}, -{72,42,13}, -{72,42,14}, -{72,42,15}, -{72,42,16}, -{72,43,-42}, -{72,43,-41}, -{72,43,-40}, -{72,43,-39}, -{72,43,-38}, -{72,43,-37}, -{72,43,-36}, -{72,43,-35}, -{72,43,-34}, -{72,43,-33}, -{72,43,-32}, -{72,43,-31}, -{72,43,-30}, -{72,43,-29}, -{72,43,-28}, -{72,43,-27}, -{72,43,-26}, -{72,43,-25}, -{72,43,-24}, -{72,43,-23}, -{72,43,-22}, -{72,43,-21}, -{72,43,-20}, -{72,43,-19}, -{72,43,-18}, -{72,43,-17}, -{72,43,-16}, -{72,43,-15}, -{72,43,-14}, -{72,43,-13}, -{72,43,-12}, -{72,43,-11}, -{72,43,-10}, -{72,43,-9}, -{72,43,-8}, -{72,43,-7}, -{72,43,-6}, -{72,43,-5}, -{72,43,-4}, -{72,43,-3}, -{72,43,-2}, -{72,43,-1}, -{72,43,0}, -{72,43,1}, -{72,43,2}, -{72,43,3}, -{72,43,4}, -{72,43,5}, -{72,43,6}, -{72,43,7}, -{72,43,8}, -{72,43,9}, -{72,43,10}, -{72,43,11}, -{72,43,12}, -{72,44,-42}, -{72,44,-41}, -{72,44,-40}, -{72,44,-39}, -{72,44,-38}, -{72,44,-37}, -{72,44,-36}, -{72,44,-35}, -{72,44,-34}, -{72,44,-33}, -{72,44,-32}, -{72,44,-31}, -{72,44,-30}, -{72,44,-29}, -{72,44,-28}, -{72,44,-27}, -{72,44,-26}, -{72,44,-25}, -{72,44,-24}, -{72,44,-23}, -{72,44,-22}, -{72,44,-21}, -{72,44,-20}, -{72,44,-19}, -{72,44,-18}, -{72,44,-17}, -{72,44,-16}, -{72,44,-15}, -{72,44,-14}, -{72,44,-13}, -{72,44,-12}, -{72,44,-11}, -{72,44,-10}, -{72,44,-9}, -{72,44,-8}, -{72,44,-7}, -{72,44,-6}, -{72,44,-5}, -{72,44,-4}, -{72,44,-3}, -{72,44,-2}, -{72,44,-1}, -{72,44,0}, -{72,44,1}, -{72,44,2}, -{72,44,3}, -{72,44,4}, -{72,44,5}, -{72,44,6}, -{72,44,7}, -{72,44,8}, -{72,44,9}, -{72,45,-42}, -{72,45,-41}, -{72,45,-40}, -{72,45,-39}, -{72,45,-38}, -{72,45,-37}, -{72,45,-36}, -{72,45,-35}, -{72,45,-34}, -{72,45,-33}, -{72,45,-32}, -{72,45,-31}, -{72,45,-30}, -{72,45,-29}, -{72,45,-28}, -{72,45,-27}, -{72,45,-26}, -{72,45,-25}, -{72,45,-24}, -{72,45,-23}, -{72,45,-22}, -{72,45,-21}, -{72,45,-20}, -{72,45,-19}, -{72,45,-18}, -{72,45,-17}, -{72,45,-16}, -{72,45,-15}, -{72,45,-14}, -{72,45,-13}, -{72,45,-12}, -{72,45,-11}, -{72,45,-10}, -{72,45,-9}, -{72,45,-8}, -{72,45,-7}, -{72,45,-6}, -{72,45,-5}, -{72,45,-4}, -{72,45,-3}, -{72,45,-2}, -{72,45,-1}, -{72,45,0}, -{72,45,1}, -{72,45,2}, -{72,45,3}, -{72,45,4}, -{72,45,5}, -{72,45,6}, -{72,46,-42}, -{72,46,-41}, -{72,46,-40}, -{72,46,-39}, -{72,46,-38}, -{72,46,-37}, -{72,46,-36}, -{72,46,-35}, -{72,46,-34}, -{72,46,-33}, -{72,46,-32}, -{72,46,-31}, -{72,46,-30}, -{72,46,-29}, -{72,46,-28}, -{72,46,-27}, -{72,46,-26}, -{72,46,-25}, -{72,46,-24}, -{72,46,-23}, -{72,46,-22}, -{72,46,-21}, -{72,46,-20}, -{72,46,-19}, -{72,46,-18}, -{72,46,-17}, -{72,46,-16}, -{72,46,-15}, -{72,46,-14}, -{72,46,-13}, -{72,46,-12}, -{72,46,-11}, -{72,46,-10}, -{72,46,-9}, -{72,46,-8}, -{72,46,-7}, -{72,46,-6}, -{72,46,-5}, -{72,46,-4}, -{72,46,-3}, -{72,46,-2}, -{72,46,-1}, -{72,46,0}, -{72,46,1}, -{72,46,2}, -{72,46,3}, -{72,47,-42}, -{72,47,-41}, -{72,47,-40}, -{72,47,-39}, -{72,47,-38}, -{72,47,-37}, -{72,47,-36}, -{72,47,-35}, -{72,47,-34}, -{72,47,-33}, -{72,47,-32}, -{72,47,-31}, -{72,47,-30}, -{72,47,-29}, -{72,47,-28}, -{72,47,-27}, -{72,47,-26}, -{72,47,-25}, -{72,47,-24}, -{72,47,-23}, -{72,47,-22}, -{72,47,-21}, -{72,47,-20}, -{72,47,-19}, -{72,47,-18}, -{72,47,-17}, -{72,47,-16}, -{72,47,-15}, -{72,47,-14}, -{72,47,-13}, -{72,47,-12}, -{72,47,-11}, -{72,47,-10}, -{72,47,-9}, -{72,47,-8}, -{72,47,-7}, -{72,47,-6}, -{72,47,-5}, -{72,47,-4}, -{72,47,-3}, -{72,47,-2}, -{72,47,-1}, -{72,47,0}, -{72,48,-42}, -{72,48,-41}, -{72,48,-40}, -{72,48,-39}, -{72,48,-38}, -{72,48,-37}, -{72,48,-36}, -{72,48,-35}, -{72,48,-34}, -{72,48,-33}, -{72,48,-32}, -{72,48,-31}, -{72,48,-30}, -{72,48,-29}, -{72,48,-28}, -{72,48,-27}, -{72,48,-26}, -{72,48,-25}, -{72,48,-24}, -{72,48,-23}, -{72,48,-22}, -{72,48,-21}, -{72,48,-20}, -{72,48,-19}, -{72,48,-18}, -{72,48,-17}, -{72,48,-16}, -{72,48,-15}, -{72,48,-14}, -{72,48,-13}, -{72,48,-12}, -{72,48,-11}, -{72,48,-10}, -{72,48,-9}, -{72,48,-8}, -{72,48,-7}, -{72,48,-6}, -{72,48,-5}, -{72,48,-4}, -{72,48,-3}, -{72,49,-42}, -{72,49,-41}, -{72,49,-40}, -{72,49,-39}, -{72,49,-38}, -{72,49,-37}, -{72,49,-36}, -{72,49,-35}, -{72,49,-34}, -{72,49,-33}, -{72,49,-32}, -{72,49,-31}, -{72,49,-30}, -{72,49,-29}, -{72,49,-28}, -{72,49,-27}, -{72,49,-26}, -{72,49,-25}, -{72,49,-24}, -{72,49,-23}, -{72,49,-22}, -{72,49,-21}, -{72,49,-20}, -{72,49,-19}, -{72,49,-18}, -{72,49,-17}, -{72,49,-16}, -{72,49,-15}, -{72,49,-14}, -{72,49,-13}, -{72,49,-12}, -{72,49,-11}, -{72,49,-10}, -{72,49,-9}, -{72,49,-8}, -{72,49,-7}, -{72,49,-6}, -{72,50,-42}, -{72,50,-41}, -{72,50,-40}, -{72,50,-39}, -{72,50,-38}, -{72,50,-37}, -{72,50,-36}, -{72,50,-35}, -{72,50,-34}, -{72,50,-33}, -{72,50,-32}, -{72,50,-31}, -{72,50,-30}, -{72,50,-29}, -{72,50,-28}, -{72,50,-27}, -{72,50,-26}, -{72,50,-25}, -{72,50,-24}, -{72,50,-23}, -{72,50,-22}, -{72,50,-21}, -{72,50,-20}, -{72,50,-19}, -{72,50,-18}, -{72,50,-17}, -{72,50,-16}, -{72,50,-15}, -{72,50,-14}, -{72,50,-13}, -{72,50,-12}, -{72,50,-11}, -{72,50,-10}, -{72,50,-9}, -{72,50,-8}, -{72,51,-42}, -{72,51,-41}, -{72,51,-40}, -{72,51,-39}, -{72,51,-38}, -{72,51,-37}, -{72,51,-36}, -{72,51,-35}, -{72,51,-34}, -{72,51,-33}, -{72,51,-32}, -{72,51,-31}, -{72,51,-30}, -{72,51,-29}, -{72,51,-28}, -{72,51,-27}, -{72,51,-26}, -{72,51,-25}, -{72,51,-24}, -{72,51,-23}, -{72,51,-22}, -{72,51,-21}, -{72,51,-20}, -{72,51,-19}, -{72,51,-18}, -{72,51,-17}, -{72,51,-16}, -{72,51,-15}, -{72,51,-14}, -{72,51,-13}, -{72,51,-12}, -{72,51,-11}, -{72,52,-42}, -{72,52,-41}, -{72,52,-40}, -{72,52,-39}, -{72,52,-38}, -{72,52,-37}, -{72,52,-36}, -{72,52,-35}, -{72,52,-34}, -{72,52,-33}, -{72,52,-32}, -{72,52,-31}, -{72,52,-30}, -{72,52,-29}, -{72,52,-28}, -{72,52,-27}, -{72,52,-26}, -{72,52,-25}, -{72,52,-24}, -{72,52,-23}, -{72,52,-22}, -{72,52,-21}, -{72,52,-20}, -{72,52,-19}, -{72,52,-18}, -{72,52,-17}, -{72,52,-16}, -{72,52,-15}, -{72,52,-14}, -{72,52,-13}, -{72,53,-42}, -{72,53,-41}, -{72,53,-40}, -{72,53,-39}, -{72,53,-38}, -{72,53,-37}, -{72,53,-36}, -{72,53,-35}, -{72,53,-34}, -{72,53,-33}, -{72,53,-32}, -{72,53,-31}, -{72,53,-30}, -{72,53,-29}, -{72,53,-28}, -{72,53,-27}, -{72,53,-26}, -{72,53,-25}, -{72,53,-24}, -{72,53,-23}, -{72,53,-22}, -{72,53,-21}, -{72,53,-20}, -{72,53,-19}, -{72,53,-18}, -{72,53,-17}, -{72,53,-16}, -{72,54,-42}, -{72,54,-41}, -{72,54,-40}, -{72,54,-39}, -{72,54,-38}, -{72,54,-37}, -{72,54,-36}, -{72,54,-35}, -{72,54,-34}, -{72,54,-33}, -{72,54,-32}, -{72,54,-31}, -{72,54,-30}, -{72,54,-29}, -{72,54,-28}, -{72,54,-27}, -{72,54,-26}, -{72,54,-25}, -{72,54,-24}, -{72,54,-23}, -{72,54,-22}, -{72,54,-21}, -{72,54,-20}, -{72,54,-19}, -{72,54,-18}, -{72,55,-42}, -{72,55,-41}, -{72,55,-40}, -{72,55,-39}, -{72,55,-38}, -{72,55,-37}, -{72,55,-36}, -{72,55,-35}, -{72,55,-34}, -{72,55,-33}, -{72,55,-32}, -{72,55,-31}, -{72,55,-30}, -{72,55,-29}, -{72,55,-28}, -{72,55,-27}, -{72,55,-26}, -{72,55,-25}, -{72,55,-24}, -{72,55,-23}, -{72,55,-22}, -{72,55,-21}, -{72,56,-42}, -{72,56,-41}, -{72,56,-40}, -{72,56,-39}, -{72,56,-38}, -{72,56,-37}, -{72,56,-36}, -{72,56,-35}, -{72,56,-34}, -{72,56,-33}, -{72,56,-32}, -{72,56,-31}, -{72,56,-30}, -{72,56,-29}, -{72,56,-28}, -{72,56,-27}, -{72,56,-26}, -{72,56,-25}, -{72,56,-24}, -{72,56,-23}, -{72,57,-42}, -{72,57,-41}, -{72,57,-40}, -{72,57,-39}, -{72,57,-38}, -{72,57,-37}, -{72,57,-36}, -{72,57,-35}, -{72,57,-34}, -{72,57,-33}, -{72,57,-32}, -{72,57,-31}, -{72,57,-30}, -{72,57,-29}, -{72,57,-28}, -{72,57,-27}, -{72,57,-26}, -{72,57,-25}, -{72,58,-42}, -{72,58,-41}, -{72,58,-40}, -{72,58,-39}, -{72,58,-38}, -{72,58,-37}, -{72,58,-36}, -{72,58,-35}, -{72,58,-34}, -{72,58,-33}, -{72,58,-32}, -{72,58,-31}, -{72,58,-30}, -{72,58,-29}, -{72,58,-28}, -{72,58,-27}, -{72,59,-42}, -{72,59,-41}, -{72,59,-40}, -{72,59,-39}, -{72,59,-38}, -{72,59,-37}, -{72,59,-36}, -{72,59,-35}, -{72,59,-34}, -{72,59,-33}, -{72,59,-32}, -{72,59,-31}, -{72,59,-30}, -{72,60,-42}, -{72,60,-41}, -{72,60,-40}, -{72,60,-39}, -{72,60,-38}, -{72,60,-37}, -{72,60,-36}, -{72,60,-35}, -{72,60,-34}, -{72,60,-33}, -{72,60,-32}, -{72,61,-42}, -{72,61,-41}, -{72,61,-40}, -{72,61,-39}, -{72,61,-38}, -{72,61,-37}, -{72,61,-36}, -{72,61,-35}, -{72,61,-34}, -{72,62,-42}, -{72,62,-41}, -{72,62,-40}, -{72,62,-39}, -{72,62,-38}, -{72,62,-37}, -{72,62,-36}, -{72,63,-42}, -{72,63,-41}, -{72,63,-40}, -{72,63,-39}, -{72,63,-38}, -{72,64,-42}, -{72,64,-41}, -{72,64,-40}, -{72,65,-42}, -{73,-74,71}, -{73,-73,66}, -{73,-73,67}, -{73,-73,68}, -{73,-73,69}, -{73,-73,70}, -{73,-73,71}, -{73,-72,62}, -{73,-72,63}, -{73,-72,64}, -{73,-72,65}, -{73,-72,66}, -{73,-72,67}, -{73,-72,68}, -{73,-72,69}, -{73,-72,70}, -{73,-72,71}, -{73,-71,58}, -{73,-71,59}, -{73,-71,60}, -{73,-71,61}, -{73,-71,62}, -{73,-71,63}, -{73,-71,64}, -{73,-71,65}, -{73,-71,66}, -{73,-71,67}, -{73,-71,68}, -{73,-71,69}, -{73,-71,70}, -{73,-71,71}, -{73,-70,54}, -{73,-70,55}, -{73,-70,56}, -{73,-70,57}, -{73,-70,58}, -{73,-70,59}, -{73,-70,60}, -{73,-70,61}, -{73,-70,62}, -{73,-70,63}, -{73,-70,64}, -{73,-70,65}, -{73,-70,66}, -{73,-70,67}, -{73,-70,68}, -{73,-70,69}, -{73,-70,70}, -{73,-70,71}, -{73,-69,51}, -{73,-69,52}, -{73,-69,53}, -{73,-69,54}, -{73,-69,55}, -{73,-69,56}, -{73,-69,57}, -{73,-69,58}, -{73,-69,59}, -{73,-69,60}, -{73,-69,61}, -{73,-69,62}, -{73,-69,63}, -{73,-69,64}, -{73,-69,65}, -{73,-69,66}, -{73,-69,67}, -{73,-69,68}, -{73,-69,69}, -{73,-69,70}, -{73,-69,71}, -{73,-68,48}, -{73,-68,49}, -{73,-68,50}, -{73,-68,51}, -{73,-68,52}, -{73,-68,53}, -{73,-68,54}, -{73,-68,55}, -{73,-68,56}, -{73,-68,57}, -{73,-68,58}, -{73,-68,59}, -{73,-68,60}, -{73,-68,61}, -{73,-68,62}, -{73,-68,63}, -{73,-68,64}, -{73,-68,65}, -{73,-68,66}, -{73,-68,67}, -{73,-68,68}, -{73,-68,69}, -{73,-68,70}, -{73,-68,71}, -{73,-67,44}, -{73,-67,45}, -{73,-67,46}, -{73,-67,47}, -{73,-67,48}, -{73,-67,49}, -{73,-67,50}, -{73,-67,51}, -{73,-67,52}, -{73,-67,53}, -{73,-67,54}, -{73,-67,55}, -{73,-67,56}, -{73,-67,57}, -{73,-67,58}, -{73,-67,59}, -{73,-67,60}, -{73,-67,61}, -{73,-67,62}, -{73,-67,63}, -{73,-67,64}, -{73,-67,65}, -{73,-67,66}, -{73,-67,67}, -{73,-67,68}, -{73,-67,69}, -{73,-67,70}, -{73,-67,71}, -{73,-66,41}, -{73,-66,42}, -{73,-66,43}, -{73,-66,44}, -{73,-66,45}, -{73,-66,46}, -{73,-66,47}, -{73,-66,48}, -{73,-66,49}, -{73,-66,50}, -{73,-66,51}, -{73,-66,52}, -{73,-66,53}, -{73,-66,54}, -{73,-66,55}, -{73,-66,56}, -{73,-66,57}, -{73,-66,58}, -{73,-66,59}, -{73,-66,60}, -{73,-66,61}, -{73,-66,62}, -{73,-66,63}, -{73,-66,64}, -{73,-66,65}, -{73,-66,66}, -{73,-66,67}, -{73,-66,68}, -{73,-66,69}, -{73,-66,70}, -{73,-66,71}, -{73,-65,39}, -{73,-65,40}, -{73,-65,41}, -{73,-65,42}, -{73,-65,43}, -{73,-65,44}, -{73,-65,45}, -{73,-65,46}, -{73,-65,47}, -{73,-65,48}, -{73,-65,49}, -{73,-65,50}, -{73,-65,51}, -{73,-65,52}, -{73,-65,53}, -{73,-65,54}, -{73,-65,55}, -{73,-65,56}, -{73,-65,57}, -{73,-65,58}, -{73,-65,59}, -{73,-65,60}, -{73,-65,61}, -{73,-65,62}, -{73,-65,63}, -{73,-65,64}, -{73,-65,65}, -{73,-65,66}, -{73,-65,67}, -{73,-65,68}, -{73,-65,69}, -{73,-65,70}, -{73,-65,71}, -{73,-64,36}, -{73,-64,37}, -{73,-64,38}, -{73,-64,39}, -{73,-64,40}, -{73,-64,41}, -{73,-64,42}, -{73,-64,43}, -{73,-64,44}, -{73,-64,45}, -{73,-64,46}, -{73,-64,47}, -{73,-64,48}, -{73,-64,49}, -{73,-64,50}, -{73,-64,51}, -{73,-64,52}, -{73,-64,53}, -{73,-64,54}, -{73,-64,55}, -{73,-64,56}, -{73,-64,57}, -{73,-64,58}, -{73,-64,59}, -{73,-64,60}, -{73,-64,61}, -{73,-64,62}, -{73,-64,63}, -{73,-64,64}, -{73,-64,65}, -{73,-64,66}, -{73,-64,67}, -{73,-64,68}, -{73,-64,69}, -{73,-64,70}, -{73,-64,71}, -{73,-63,33}, -{73,-63,34}, -{73,-63,35}, -{73,-63,36}, -{73,-63,37}, -{73,-63,38}, -{73,-63,39}, -{73,-63,40}, -{73,-63,41}, -{73,-63,42}, -{73,-63,43}, -{73,-63,44}, -{73,-63,45}, -{73,-63,46}, -{73,-63,47}, -{73,-63,48}, -{73,-63,49}, -{73,-63,50}, -{73,-63,51}, -{73,-63,52}, -{73,-63,53}, -{73,-63,54}, -{73,-63,55}, -{73,-63,56}, -{73,-63,57}, -{73,-63,58}, -{73,-63,59}, -{73,-63,60}, -{73,-63,61}, -{73,-63,62}, -{73,-63,63}, -{73,-63,64}, -{73,-63,65}, -{73,-63,66}, -{73,-63,67}, -{73,-63,68}, -{73,-63,69}, -{73,-63,70}, -{73,-63,71}, -{73,-63,72}, -{73,-62,31}, -{73,-62,32}, -{73,-62,33}, -{73,-62,34}, -{73,-62,35}, -{73,-62,36}, -{73,-62,37}, -{73,-62,38}, -{73,-62,39}, -{73,-62,40}, -{73,-62,41}, -{73,-62,42}, -{73,-62,43}, -{73,-62,44}, -{73,-62,45}, -{73,-62,46}, -{73,-62,47}, -{73,-62,48}, -{73,-62,49}, -{73,-62,50}, -{73,-62,51}, -{73,-62,52}, -{73,-62,53}, -{73,-62,54}, -{73,-62,55}, -{73,-62,56}, -{73,-62,57}, -{73,-62,58}, -{73,-62,59}, -{73,-62,60}, -{73,-62,61}, -{73,-62,62}, -{73,-62,63}, -{73,-62,64}, -{73,-62,65}, -{73,-62,66}, -{73,-62,67}, -{73,-62,68}, -{73,-62,69}, -{73,-62,70}, -{73,-62,71}, -{73,-62,72}, -{73,-61,28}, -{73,-61,29}, -{73,-61,30}, -{73,-61,31}, -{73,-61,32}, -{73,-61,33}, -{73,-61,34}, -{73,-61,35}, -{73,-61,36}, -{73,-61,37}, -{73,-61,38}, -{73,-61,39}, -{73,-61,40}, -{73,-61,41}, -{73,-61,42}, -{73,-61,43}, -{73,-61,44}, -{73,-61,45}, -{73,-61,46}, -{73,-61,47}, -{73,-61,48}, -{73,-61,49}, -{73,-61,50}, -{73,-61,51}, -{73,-61,52}, -{73,-61,53}, -{73,-61,54}, -{73,-61,55}, -{73,-61,56}, -{73,-61,57}, -{73,-61,58}, -{73,-61,59}, -{73,-61,60}, -{73,-61,61}, -{73,-61,62}, -{73,-61,63}, -{73,-61,64}, -{73,-61,65}, -{73,-61,66}, -{73,-61,67}, -{73,-61,68}, -{73,-61,69}, -{73,-61,70}, -{73,-61,71}, -{73,-61,72}, -{73,-60,26}, -{73,-60,27}, -{73,-60,28}, -{73,-60,29}, -{73,-60,30}, -{73,-60,31}, -{73,-60,32}, -{73,-60,33}, -{73,-60,34}, -{73,-60,35}, -{73,-60,36}, -{73,-60,37}, -{73,-60,38}, -{73,-60,39}, -{73,-60,40}, -{73,-60,41}, -{73,-60,42}, -{73,-60,43}, -{73,-60,44}, -{73,-60,45}, -{73,-60,46}, -{73,-60,47}, -{73,-60,48}, -{73,-60,49}, -{73,-60,50}, -{73,-60,51}, -{73,-60,52}, -{73,-60,53}, -{73,-60,54}, -{73,-60,55}, -{73,-60,56}, -{73,-60,57}, -{73,-60,58}, -{73,-60,59}, -{73,-60,60}, -{73,-60,61}, -{73,-60,62}, -{73,-60,63}, -{73,-60,64}, -{73,-60,65}, -{73,-60,66}, -{73,-60,67}, -{73,-60,68}, -{73,-60,69}, -{73,-60,70}, -{73,-60,71}, -{73,-60,72}, -{73,-59,24}, -{73,-59,25}, -{73,-59,26}, -{73,-59,27}, -{73,-59,28}, -{73,-59,29}, -{73,-59,30}, -{73,-59,31}, -{73,-59,32}, -{73,-59,33}, -{73,-59,34}, -{73,-59,35}, -{73,-59,36}, -{73,-59,37}, -{73,-59,38}, -{73,-59,39}, -{73,-59,40}, -{73,-59,41}, -{73,-59,42}, -{73,-59,43}, -{73,-59,44}, -{73,-59,45}, -{73,-59,46}, -{73,-59,47}, -{73,-59,48}, -{73,-59,49}, -{73,-59,50}, -{73,-59,51}, -{73,-59,52}, -{73,-59,53}, -{73,-59,54}, -{73,-59,55}, -{73,-59,56}, -{73,-59,57}, -{73,-59,58}, -{73,-59,59}, -{73,-59,60}, -{73,-59,61}, -{73,-59,62}, -{73,-59,63}, -{73,-59,64}, -{73,-59,65}, -{73,-59,66}, -{73,-59,67}, -{73,-59,68}, -{73,-59,69}, -{73,-59,70}, -{73,-59,71}, -{73,-59,72}, -{73,-58,21}, -{73,-58,22}, -{73,-58,23}, -{73,-58,24}, -{73,-58,25}, -{73,-58,26}, -{73,-58,27}, -{73,-58,28}, -{73,-58,29}, -{73,-58,30}, -{73,-58,31}, -{73,-58,32}, -{73,-58,33}, -{73,-58,34}, -{73,-58,35}, -{73,-58,36}, -{73,-58,37}, -{73,-58,38}, -{73,-58,39}, -{73,-58,40}, -{73,-58,41}, -{73,-58,42}, -{73,-58,43}, -{73,-58,44}, -{73,-58,45}, -{73,-58,46}, -{73,-58,47}, -{73,-58,48}, -{73,-58,49}, -{73,-58,50}, -{73,-58,51}, -{73,-58,52}, -{73,-58,53}, -{73,-58,54}, -{73,-58,55}, -{73,-58,56}, -{73,-58,57}, -{73,-58,58}, -{73,-58,59}, -{73,-58,60}, -{73,-58,61}, -{73,-58,62}, -{73,-58,63}, -{73,-58,64}, -{73,-58,65}, -{73,-58,66}, -{73,-58,67}, -{73,-58,68}, -{73,-58,69}, -{73,-58,70}, -{73,-58,71}, -{73,-58,72}, -{73,-57,19}, -{73,-57,20}, -{73,-57,21}, -{73,-57,22}, -{73,-57,23}, -{73,-57,24}, -{73,-57,25}, -{73,-57,26}, -{73,-57,27}, -{73,-57,28}, -{73,-57,29}, -{73,-57,30}, -{73,-57,31}, -{73,-57,32}, -{73,-57,33}, -{73,-57,34}, -{73,-57,35}, -{73,-57,36}, -{73,-57,37}, -{73,-57,38}, -{73,-57,39}, -{73,-57,40}, -{73,-57,41}, -{73,-57,42}, -{73,-57,43}, -{73,-57,44}, -{73,-57,45}, -{73,-57,46}, -{73,-57,47}, -{73,-57,48}, -{73,-57,49}, -{73,-57,50}, -{73,-57,51}, -{73,-57,52}, -{73,-57,53}, -{73,-57,54}, -{73,-57,55}, -{73,-57,56}, -{73,-57,57}, -{73,-57,58}, -{73,-57,59}, -{73,-57,60}, -{73,-57,61}, -{73,-57,62}, -{73,-57,63}, -{73,-57,64}, -{73,-57,65}, -{73,-57,66}, -{73,-57,67}, -{73,-57,68}, -{73,-57,69}, -{73,-57,70}, -{73,-57,71}, -{73,-57,72}, -{73,-56,17}, -{73,-56,18}, -{73,-56,19}, -{73,-56,20}, -{73,-56,21}, -{73,-56,22}, -{73,-56,23}, -{73,-56,24}, -{73,-56,25}, -{73,-56,26}, -{73,-56,27}, -{73,-56,28}, -{73,-56,29}, -{73,-56,30}, -{73,-56,31}, -{73,-56,32}, -{73,-56,33}, -{73,-56,34}, -{73,-56,35}, -{73,-56,36}, -{73,-56,37}, -{73,-56,38}, -{73,-56,39}, -{73,-56,40}, -{73,-56,41}, -{73,-56,42}, -{73,-56,43}, -{73,-56,44}, -{73,-56,45}, -{73,-56,46}, -{73,-56,47}, -{73,-56,48}, -{73,-56,49}, -{73,-56,50}, -{73,-56,51}, -{73,-56,52}, -{73,-56,53}, -{73,-56,54}, -{73,-56,55}, -{73,-56,56}, -{73,-56,57}, -{73,-56,58}, -{73,-56,59}, -{73,-56,60}, -{73,-56,61}, -{73,-56,62}, -{73,-56,63}, -{73,-56,64}, -{73,-56,65}, -{73,-56,66}, -{73,-56,67}, -{73,-56,68}, -{73,-56,69}, -{73,-56,70}, -{73,-56,71}, -{73,-56,72}, -{73,-55,15}, -{73,-55,16}, -{73,-55,17}, -{73,-55,18}, -{73,-55,19}, -{73,-55,20}, -{73,-55,21}, -{73,-55,22}, -{73,-55,23}, -{73,-55,24}, -{73,-55,25}, -{73,-55,26}, -{73,-55,27}, -{73,-55,28}, -{73,-55,29}, -{73,-55,30}, -{73,-55,31}, -{73,-55,32}, -{73,-55,33}, -{73,-55,34}, -{73,-55,35}, -{73,-55,36}, -{73,-55,37}, -{73,-55,38}, -{73,-55,39}, -{73,-55,40}, -{73,-55,41}, -{73,-55,42}, -{73,-55,43}, -{73,-55,44}, -{73,-55,45}, -{73,-55,46}, -{73,-55,47}, -{73,-55,48}, -{73,-55,49}, -{73,-55,50}, -{73,-55,51}, -{73,-55,52}, -{73,-55,53}, -{73,-55,54}, -{73,-55,55}, -{73,-55,56}, -{73,-55,57}, -{73,-55,58}, -{73,-55,59}, -{73,-55,60}, -{73,-55,61}, -{73,-55,62}, -{73,-55,63}, -{73,-55,64}, -{73,-55,65}, -{73,-55,66}, -{73,-55,67}, -{73,-55,68}, -{73,-55,69}, -{73,-55,70}, -{73,-55,71}, -{73,-55,72}, -{73,-54,13}, -{73,-54,14}, -{73,-54,15}, -{73,-54,16}, -{73,-54,17}, -{73,-54,18}, -{73,-54,19}, -{73,-54,20}, -{73,-54,21}, -{73,-54,22}, -{73,-54,23}, -{73,-54,24}, -{73,-54,25}, -{73,-54,26}, -{73,-54,27}, -{73,-54,28}, -{73,-54,29}, -{73,-54,30}, -{73,-54,31}, -{73,-54,32}, -{73,-54,33}, -{73,-54,34}, -{73,-54,35}, -{73,-54,36}, -{73,-54,37}, -{73,-54,38}, -{73,-54,39}, -{73,-54,40}, -{73,-54,41}, -{73,-54,42}, -{73,-54,43}, -{73,-54,44}, -{73,-54,45}, -{73,-54,46}, -{73,-54,47}, -{73,-54,48}, -{73,-54,49}, -{73,-54,50}, -{73,-54,51}, -{73,-54,52}, -{73,-54,53}, -{73,-54,54}, -{73,-54,55}, -{73,-54,56}, -{73,-54,57}, -{73,-54,58}, -{73,-54,59}, -{73,-54,60}, -{73,-54,61}, -{73,-54,62}, -{73,-54,63}, -{73,-54,64}, -{73,-54,65}, -{73,-54,66}, -{73,-54,67}, -{73,-54,68}, -{73,-54,69}, -{73,-54,70}, -{73,-54,71}, -{73,-54,72}, -{73,-53,11}, -{73,-53,12}, -{73,-53,13}, -{73,-53,14}, -{73,-53,15}, -{73,-53,16}, -{73,-53,17}, -{73,-53,18}, -{73,-53,19}, -{73,-53,20}, -{73,-53,21}, -{73,-53,22}, -{73,-53,23}, -{73,-53,24}, -{73,-53,25}, -{73,-53,26}, -{73,-53,27}, -{73,-53,28}, -{73,-53,29}, -{73,-53,30}, -{73,-53,31}, -{73,-53,32}, -{73,-53,33}, -{73,-53,34}, -{73,-53,35}, -{73,-53,36}, -{73,-53,37}, -{73,-53,38}, -{73,-53,39}, -{73,-53,40}, -{73,-53,41}, -{73,-53,42}, -{73,-53,43}, -{73,-53,44}, -{73,-53,45}, -{73,-53,46}, -{73,-53,47}, -{73,-53,48}, -{73,-53,49}, -{73,-53,50}, -{73,-53,51}, -{73,-53,52}, -{73,-53,53}, -{73,-53,54}, -{73,-53,55}, -{73,-53,56}, -{73,-53,57}, -{73,-53,58}, -{73,-53,59}, -{73,-53,60}, -{73,-53,61}, -{73,-53,62}, -{73,-53,63}, -{73,-53,64}, -{73,-53,65}, -{73,-53,66}, -{73,-53,67}, -{73,-53,68}, -{73,-53,69}, -{73,-53,70}, -{73,-53,71}, -{73,-53,72}, -{73,-52,9}, -{73,-52,10}, -{73,-52,11}, -{73,-52,12}, -{73,-52,13}, -{73,-52,14}, -{73,-52,15}, -{73,-52,16}, -{73,-52,17}, -{73,-52,18}, -{73,-52,19}, -{73,-52,20}, -{73,-52,21}, -{73,-52,22}, -{73,-52,23}, -{73,-52,24}, -{73,-52,25}, -{73,-52,26}, -{73,-52,27}, -{73,-52,28}, -{73,-52,29}, -{73,-52,30}, -{73,-52,31}, -{73,-52,32}, -{73,-52,33}, -{73,-52,34}, -{73,-52,35}, -{73,-52,36}, -{73,-52,37}, -{73,-52,38}, -{73,-52,39}, -{73,-52,40}, -{73,-52,41}, -{73,-52,42}, -{73,-52,43}, -{73,-52,44}, -{73,-52,45}, -{73,-52,46}, -{73,-52,47}, -{73,-52,48}, -{73,-52,49}, -{73,-52,50}, -{73,-52,51}, -{73,-52,52}, -{73,-52,53}, -{73,-52,54}, -{73,-52,55}, -{73,-52,56}, -{73,-52,57}, -{73,-52,58}, -{73,-52,59}, -{73,-52,60}, -{73,-52,61}, -{73,-52,62}, -{73,-52,63}, -{73,-52,64}, -{73,-52,65}, -{73,-52,66}, -{73,-52,67}, -{73,-52,68}, -{73,-52,69}, -{73,-52,70}, -{73,-52,71}, -{73,-52,72}, -{73,-51,7}, -{73,-51,8}, -{73,-51,9}, -{73,-51,10}, -{73,-51,11}, -{73,-51,12}, -{73,-51,13}, -{73,-51,14}, -{73,-51,15}, -{73,-51,16}, -{73,-51,17}, -{73,-51,18}, -{73,-51,19}, -{73,-51,20}, -{73,-51,21}, -{73,-51,22}, -{73,-51,23}, -{73,-51,24}, -{73,-51,25}, -{73,-51,26}, -{73,-51,27}, -{73,-51,28}, -{73,-51,29}, -{73,-51,30}, -{73,-51,31}, -{73,-51,32}, -{73,-51,33}, -{73,-51,34}, -{73,-51,35}, -{73,-51,36}, -{73,-51,37}, -{73,-51,38}, -{73,-51,39}, -{73,-51,40}, -{73,-51,41}, -{73,-51,42}, -{73,-51,43}, -{73,-51,44}, -{73,-51,45}, -{73,-51,46}, -{73,-51,47}, -{73,-51,48}, -{73,-51,49}, -{73,-51,50}, -{73,-51,51}, -{73,-51,52}, -{73,-51,53}, -{73,-51,54}, -{73,-51,55}, -{73,-51,56}, -{73,-51,57}, -{73,-51,58}, -{73,-51,59}, -{73,-51,60}, -{73,-51,61}, -{73,-51,62}, -{73,-51,63}, -{73,-51,64}, -{73,-51,65}, -{73,-51,66}, -{73,-51,67}, -{73,-51,68}, -{73,-51,69}, -{73,-51,70}, -{73,-51,71}, -{73,-51,72}, -{73,-50,5}, -{73,-50,6}, -{73,-50,7}, -{73,-50,8}, -{73,-50,9}, -{73,-50,10}, -{73,-50,11}, -{73,-50,12}, -{73,-50,13}, -{73,-50,14}, -{73,-50,15}, -{73,-50,16}, -{73,-50,17}, -{73,-50,18}, -{73,-50,19}, -{73,-50,20}, -{73,-50,21}, -{73,-50,22}, -{73,-50,23}, -{73,-50,24}, -{73,-50,25}, -{73,-50,26}, -{73,-50,27}, -{73,-50,28}, -{73,-50,29}, -{73,-50,30}, -{73,-50,31}, -{73,-50,32}, -{73,-50,33}, -{73,-50,34}, -{73,-50,35}, -{73,-50,36}, -{73,-50,37}, -{73,-50,38}, -{73,-50,39}, -{73,-50,40}, -{73,-50,41}, -{73,-50,42}, -{73,-50,43}, -{73,-50,44}, -{73,-50,45}, -{73,-50,46}, -{73,-50,47}, -{73,-50,48}, -{73,-50,49}, -{73,-50,50}, -{73,-50,51}, -{73,-50,52}, -{73,-50,53}, -{73,-50,54}, -{73,-50,55}, -{73,-50,56}, -{73,-50,57}, -{73,-50,58}, -{73,-50,59}, -{73,-50,60}, -{73,-50,61}, -{73,-50,62}, -{73,-50,63}, -{73,-50,64}, -{73,-50,65}, -{73,-50,66}, -{73,-50,67}, -{73,-50,68}, -{73,-50,69}, -{73,-50,70}, -{73,-50,71}, -{73,-50,72}, -{73,-49,4}, -{73,-49,5}, -{73,-49,6}, -{73,-49,7}, -{73,-49,8}, -{73,-49,9}, -{73,-49,10}, -{73,-49,11}, -{73,-49,12}, -{73,-49,13}, -{73,-49,14}, -{73,-49,15}, -{73,-49,16}, -{73,-49,17}, -{73,-49,18}, -{73,-49,19}, -{73,-49,20}, -{73,-49,21}, -{73,-49,22}, -{73,-49,23}, -{73,-49,24}, -{73,-49,25}, -{73,-49,26}, -{73,-49,27}, -{73,-49,28}, -{73,-49,29}, -{73,-49,30}, -{73,-49,31}, -{73,-49,32}, -{73,-49,33}, -{73,-49,34}, -{73,-49,35}, -{73,-49,36}, -{73,-49,37}, -{73,-49,38}, -{73,-49,39}, -{73,-49,40}, -{73,-49,41}, -{73,-49,42}, -{73,-49,43}, -{73,-49,44}, -{73,-49,45}, -{73,-49,46}, -{73,-49,47}, -{73,-49,48}, -{73,-49,49}, -{73,-49,50}, -{73,-49,51}, -{73,-49,52}, -{73,-49,53}, -{73,-49,54}, -{73,-49,55}, -{73,-49,56}, -{73,-49,57}, -{73,-49,58}, -{73,-49,59}, -{73,-49,60}, -{73,-49,61}, -{73,-49,62}, -{73,-49,63}, -{73,-49,64}, -{73,-49,65}, -{73,-49,66}, -{73,-49,67}, -{73,-49,68}, -{73,-49,69}, -{73,-49,70}, -{73,-49,71}, -{73,-49,72}, -{73,-48,2}, -{73,-48,3}, -{73,-48,4}, -{73,-48,5}, -{73,-48,6}, -{73,-48,7}, -{73,-48,8}, -{73,-48,9}, -{73,-48,10}, -{73,-48,11}, -{73,-48,12}, -{73,-48,13}, -{73,-48,14}, -{73,-48,15}, -{73,-48,16}, -{73,-48,17}, -{73,-48,18}, -{73,-48,19}, -{73,-48,20}, -{73,-48,21}, -{73,-48,22}, -{73,-48,23}, -{73,-48,24}, -{73,-48,25}, -{73,-48,26}, -{73,-48,27}, -{73,-48,28}, -{73,-48,29}, -{73,-48,30}, -{73,-48,31}, -{73,-48,32}, -{73,-48,33}, -{73,-48,34}, -{73,-48,35}, -{73,-48,36}, -{73,-48,37}, -{73,-48,38}, -{73,-48,39}, -{73,-48,40}, -{73,-48,41}, -{73,-48,42}, -{73,-48,43}, -{73,-48,44}, -{73,-48,45}, -{73,-48,46}, -{73,-48,47}, -{73,-48,48}, -{73,-48,49}, -{73,-48,50}, -{73,-48,51}, -{73,-48,52}, -{73,-48,53}, -{73,-48,54}, -{73,-48,55}, -{73,-48,56}, -{73,-48,57}, -{73,-48,58}, -{73,-48,59}, -{73,-48,60}, -{73,-48,61}, -{73,-48,62}, -{73,-48,63}, -{73,-48,64}, -{73,-48,65}, -{73,-48,66}, -{73,-48,67}, -{73,-48,68}, -{73,-48,69}, -{73,-48,70}, -{73,-48,71}, -{73,-48,72}, -{73,-47,0}, -{73,-47,1}, -{73,-47,2}, -{73,-47,3}, -{73,-47,4}, -{73,-47,5}, -{73,-47,6}, -{73,-47,7}, -{73,-47,8}, -{73,-47,9}, -{73,-47,10}, -{73,-47,11}, -{73,-47,12}, -{73,-47,13}, -{73,-47,14}, -{73,-47,15}, -{73,-47,16}, -{73,-47,17}, -{73,-47,18}, -{73,-47,19}, -{73,-47,20}, -{73,-47,21}, -{73,-47,22}, -{73,-47,23}, -{73,-47,24}, -{73,-47,25}, -{73,-47,26}, -{73,-47,27}, -{73,-47,28}, -{73,-47,29}, -{73,-47,30}, -{73,-47,31}, -{73,-47,32}, -{73,-47,33}, -{73,-47,34}, -{73,-47,35}, -{73,-47,36}, -{73,-47,37}, -{73,-47,38}, -{73,-47,39}, -{73,-47,40}, -{73,-47,41}, -{73,-47,42}, -{73,-47,43}, -{73,-47,44}, -{73,-47,45}, -{73,-47,46}, -{73,-47,47}, -{73,-47,48}, -{73,-47,49}, -{73,-47,50}, -{73,-47,51}, -{73,-47,52}, -{73,-47,53}, -{73,-47,54}, -{73,-47,55}, -{73,-47,56}, -{73,-47,57}, -{73,-47,58}, -{73,-47,59}, -{73,-47,60}, -{73,-47,61}, -{73,-47,62}, -{73,-47,63}, -{73,-47,64}, -{73,-47,65}, -{73,-47,66}, -{73,-47,67}, -{73,-47,68}, -{73,-47,69}, -{73,-47,70}, -{73,-47,71}, -{73,-47,72}, -{73,-46,-2}, -{73,-46,-1}, -{73,-46,0}, -{73,-46,1}, -{73,-46,2}, -{73,-46,3}, -{73,-46,4}, -{73,-46,5}, -{73,-46,6}, -{73,-46,7}, -{73,-46,8}, -{73,-46,9}, -{73,-46,10}, -{73,-46,11}, -{73,-46,12}, -{73,-46,13}, -{73,-46,14}, -{73,-46,15}, -{73,-46,16}, -{73,-46,17}, -{73,-46,18}, -{73,-46,19}, -{73,-46,20}, -{73,-46,21}, -{73,-46,22}, -{73,-46,23}, -{73,-46,24}, -{73,-46,25}, -{73,-46,26}, -{73,-46,27}, -{73,-46,28}, -{73,-46,29}, -{73,-46,30}, -{73,-46,31}, -{73,-46,32}, -{73,-46,33}, -{73,-46,34}, -{73,-46,35}, -{73,-46,36}, -{73,-46,37}, -{73,-46,38}, -{73,-46,39}, -{73,-46,40}, -{73,-46,41}, -{73,-46,42}, -{73,-46,43}, -{73,-46,44}, -{73,-46,45}, -{73,-46,46}, -{73,-46,47}, -{73,-46,48}, -{73,-46,49}, -{73,-46,50}, -{73,-46,51}, -{73,-46,52}, -{73,-46,53}, -{73,-46,54}, -{73,-46,55}, -{73,-46,56}, -{73,-46,57}, -{73,-46,58}, -{73,-46,59}, -{73,-46,60}, -{73,-46,61}, -{73,-46,62}, -{73,-46,63}, -{73,-46,64}, -{73,-46,65}, -{73,-46,66}, -{73,-46,67}, -{73,-46,68}, -{73,-46,69}, -{73,-46,70}, -{73,-46,71}, -{73,-46,72}, -{73,-45,-3}, -{73,-45,-2}, -{73,-45,-1}, -{73,-45,0}, -{73,-45,1}, -{73,-45,2}, -{73,-45,3}, -{73,-45,4}, -{73,-45,5}, -{73,-45,6}, -{73,-45,7}, -{73,-45,8}, -{73,-45,9}, -{73,-45,10}, -{73,-45,11}, -{73,-45,12}, -{73,-45,13}, -{73,-45,14}, -{73,-45,15}, -{73,-45,16}, -{73,-45,17}, -{73,-45,18}, -{73,-45,19}, -{73,-45,20}, -{73,-45,21}, -{73,-45,22}, -{73,-45,23}, -{73,-45,24}, -{73,-45,25}, -{73,-45,26}, -{73,-45,27}, -{73,-45,28}, -{73,-45,29}, -{73,-45,30}, -{73,-45,31}, -{73,-45,32}, -{73,-45,33}, -{73,-45,34}, -{73,-45,35}, -{73,-45,36}, -{73,-45,37}, -{73,-45,38}, -{73,-45,39}, -{73,-45,40}, -{73,-45,41}, -{73,-45,42}, -{73,-45,43}, -{73,-45,44}, -{73,-45,45}, -{73,-45,46}, -{73,-45,47}, -{73,-45,48}, -{73,-45,49}, -{73,-45,50}, -{73,-45,51}, -{73,-45,52}, -{73,-45,53}, -{73,-45,54}, -{73,-45,55}, -{73,-45,56}, -{73,-45,57}, -{73,-45,58}, -{73,-45,59}, -{73,-45,60}, -{73,-45,61}, -{73,-45,62}, -{73,-45,63}, -{73,-45,64}, -{73,-45,65}, -{73,-45,66}, -{73,-45,67}, -{73,-45,68}, -{73,-45,69}, -{73,-45,70}, -{73,-45,71}, -{73,-45,72}, -{73,-44,-5}, -{73,-44,-4}, -{73,-44,-3}, -{73,-44,-2}, -{73,-44,-1}, -{73,-44,0}, -{73,-44,1}, -{73,-44,2}, -{73,-44,3}, -{73,-44,4}, -{73,-44,5}, -{73,-44,6}, -{73,-44,7}, -{73,-44,8}, -{73,-44,9}, -{73,-44,10}, -{73,-44,11}, -{73,-44,12}, -{73,-44,13}, -{73,-44,14}, -{73,-44,15}, -{73,-44,16}, -{73,-44,17}, -{73,-44,18}, -{73,-44,19}, -{73,-44,20}, -{73,-44,21}, -{73,-44,22}, -{73,-44,23}, -{73,-44,24}, -{73,-44,25}, -{73,-44,26}, -{73,-44,27}, -{73,-44,28}, -{73,-44,29}, -{73,-44,30}, -{73,-44,31}, -{73,-44,32}, -{73,-44,33}, -{73,-44,34}, -{73,-44,35}, -{73,-44,36}, -{73,-44,37}, -{73,-44,38}, -{73,-44,39}, -{73,-44,40}, -{73,-44,41}, -{73,-44,42}, -{73,-44,43}, -{73,-44,44}, -{73,-44,45}, -{73,-44,46}, -{73,-44,47}, -{73,-44,48}, -{73,-44,49}, -{73,-44,50}, -{73,-44,51}, -{73,-44,52}, -{73,-44,53}, -{73,-44,54}, -{73,-44,55}, -{73,-44,56}, -{73,-44,57}, -{73,-44,58}, -{73,-44,59}, -{73,-44,60}, -{73,-44,61}, -{73,-44,62}, -{73,-44,63}, -{73,-44,64}, -{73,-44,65}, -{73,-44,66}, -{73,-44,67}, -{73,-44,68}, -{73,-44,69}, -{73,-44,70}, -{73,-44,71}, -{73,-44,72}, -{73,-43,-7}, -{73,-43,-6}, -{73,-43,-5}, -{73,-43,-4}, -{73,-43,-3}, -{73,-43,-2}, -{73,-43,-1}, -{73,-43,0}, -{73,-43,1}, -{73,-43,2}, -{73,-43,3}, -{73,-43,4}, -{73,-43,5}, -{73,-43,6}, -{73,-43,7}, -{73,-43,8}, -{73,-43,9}, -{73,-43,10}, -{73,-43,11}, -{73,-43,12}, -{73,-43,13}, -{73,-43,14}, -{73,-43,15}, -{73,-43,16}, -{73,-43,17}, -{73,-43,18}, -{73,-43,19}, -{73,-43,20}, -{73,-43,21}, -{73,-43,22}, -{73,-43,23}, -{73,-43,24}, -{73,-43,25}, -{73,-43,26}, -{73,-43,27}, -{73,-43,28}, -{73,-43,29}, -{73,-43,30}, -{73,-43,31}, -{73,-43,32}, -{73,-43,33}, -{73,-43,34}, -{73,-43,35}, -{73,-43,36}, -{73,-43,37}, -{73,-43,38}, -{73,-43,39}, -{73,-43,40}, -{73,-43,41}, -{73,-43,42}, -{73,-43,43}, -{73,-43,44}, -{73,-43,45}, -{73,-43,46}, -{73,-43,47}, -{73,-43,48}, -{73,-43,49}, -{73,-43,50}, -{73,-43,51}, -{73,-43,52}, -{73,-43,53}, -{73,-43,54}, -{73,-43,55}, -{73,-43,56}, -{73,-43,57}, -{73,-43,58}, -{73,-43,59}, -{73,-43,60}, -{73,-43,61}, -{73,-43,62}, -{73,-43,63}, -{73,-43,64}, -{73,-43,65}, -{73,-43,66}, -{73,-43,67}, -{73,-43,68}, -{73,-43,69}, -{73,-43,70}, -{73,-43,71}, -{73,-43,72}, -{73,-42,-8}, -{73,-42,-7}, -{73,-42,-6}, -{73,-42,-5}, -{73,-42,-4}, -{73,-42,-3}, -{73,-42,-2}, -{73,-42,-1}, -{73,-42,0}, -{73,-42,1}, -{73,-42,2}, -{73,-42,3}, -{73,-42,4}, -{73,-42,5}, -{73,-42,6}, -{73,-42,7}, -{73,-42,8}, -{73,-42,9}, -{73,-42,10}, -{73,-42,11}, -{73,-42,12}, -{73,-42,13}, -{73,-42,14}, -{73,-42,15}, -{73,-42,16}, -{73,-42,17}, -{73,-42,18}, -{73,-42,19}, -{73,-42,20}, -{73,-42,21}, -{73,-42,22}, -{73,-42,23}, -{73,-42,24}, -{73,-42,25}, -{73,-42,26}, -{73,-42,27}, -{73,-42,28}, -{73,-42,29}, -{73,-42,30}, -{73,-42,31}, -{73,-42,32}, -{73,-42,33}, -{73,-42,34}, -{73,-42,35}, -{73,-42,36}, -{73,-42,37}, -{73,-42,38}, -{73,-42,39}, -{73,-42,40}, -{73,-42,41}, -{73,-42,42}, -{73,-42,43}, -{73,-42,44}, -{73,-42,45}, -{73,-42,46}, -{73,-42,47}, -{73,-42,48}, -{73,-42,49}, -{73,-42,50}, -{73,-42,51}, -{73,-42,52}, -{73,-42,53}, -{73,-42,54}, -{73,-42,55}, -{73,-42,56}, -{73,-42,57}, -{73,-42,58}, -{73,-42,59}, -{73,-42,60}, -{73,-42,61}, -{73,-42,62}, -{73,-42,63}, -{73,-42,64}, -{73,-42,65}, -{73,-42,66}, -{73,-42,67}, -{73,-42,68}, -{73,-42,69}, -{73,-42,70}, -{73,-42,71}, -{73,-42,72}, -{73,-42,73}, -{73,-41,-10}, -{73,-41,-9}, -{73,-41,-8}, -{73,-41,-7}, -{73,-41,-6}, -{73,-41,-5}, -{73,-41,-4}, -{73,-41,-3}, -{73,-41,-2}, -{73,-41,-1}, -{73,-41,0}, -{73,-41,1}, -{73,-41,2}, -{73,-41,3}, -{73,-41,4}, -{73,-41,5}, -{73,-41,6}, -{73,-41,7}, -{73,-41,8}, -{73,-41,9}, -{73,-41,10}, -{73,-41,11}, -{73,-41,12}, -{73,-41,13}, -{73,-41,14}, -{73,-41,15}, -{73,-41,16}, -{73,-41,17}, -{73,-41,18}, -{73,-41,19}, -{73,-41,20}, -{73,-41,21}, -{73,-41,22}, -{73,-41,23}, -{73,-41,24}, -{73,-41,25}, -{73,-41,26}, -{73,-41,27}, -{73,-41,28}, -{73,-41,29}, -{73,-41,30}, -{73,-41,31}, -{73,-41,32}, -{73,-41,33}, -{73,-41,34}, -{73,-41,35}, -{73,-41,36}, -{73,-41,37}, -{73,-41,38}, -{73,-41,39}, -{73,-41,40}, -{73,-41,41}, -{73,-41,42}, -{73,-41,43}, -{73,-41,44}, -{73,-41,45}, -{73,-41,46}, -{73,-41,47}, -{73,-41,48}, -{73,-41,49}, -{73,-41,50}, -{73,-41,51}, -{73,-41,52}, -{73,-41,53}, -{73,-41,54}, -{73,-41,55}, -{73,-41,56}, -{73,-41,57}, -{73,-41,58}, -{73,-41,59}, -{73,-41,60}, -{73,-41,61}, -{73,-41,62}, -{73,-41,63}, -{73,-41,64}, -{73,-41,65}, -{73,-41,66}, -{73,-41,67}, -{73,-41,68}, -{73,-41,69}, -{73,-41,70}, -{73,-41,71}, -{73,-41,72}, -{73,-41,73}, -{73,-40,-11}, -{73,-40,-10}, -{73,-40,-9}, -{73,-40,-8}, -{73,-40,-7}, -{73,-40,-6}, -{73,-40,-5}, -{73,-40,-4}, -{73,-40,-3}, -{73,-40,-2}, -{73,-40,-1}, -{73,-40,0}, -{73,-40,1}, -{73,-40,2}, -{73,-40,3}, -{73,-40,4}, -{73,-40,5}, -{73,-40,6}, -{73,-40,7}, -{73,-40,8}, -{73,-40,9}, -{73,-40,10}, -{73,-40,11}, -{73,-40,12}, -{73,-40,13}, -{73,-40,14}, -{73,-40,15}, -{73,-40,16}, -{73,-40,17}, -{73,-40,18}, -{73,-40,19}, -{73,-40,20}, -{73,-40,21}, -{73,-40,22}, -{73,-40,23}, -{73,-40,24}, -{73,-40,25}, -{73,-40,26}, -{73,-40,27}, -{73,-40,28}, -{73,-40,29}, -{73,-40,30}, -{73,-40,31}, -{73,-40,32}, -{73,-40,33}, -{73,-40,34}, -{73,-40,35}, -{73,-40,36}, -{73,-40,37}, -{73,-40,38}, -{73,-40,39}, -{73,-40,40}, -{73,-40,41}, -{73,-40,42}, -{73,-40,43}, -{73,-40,44}, -{73,-40,45}, -{73,-40,46}, -{73,-40,47}, -{73,-40,48}, -{73,-40,49}, -{73,-40,50}, -{73,-40,51}, -{73,-40,52}, -{73,-40,53}, -{73,-40,54}, -{73,-40,55}, -{73,-40,56}, -{73,-40,57}, -{73,-40,58}, -{73,-40,59}, -{73,-40,60}, -{73,-40,61}, -{73,-40,62}, -{73,-40,63}, -{73,-40,64}, -{73,-40,65}, -{73,-40,66}, -{73,-40,67}, -{73,-40,68}, -{73,-40,69}, -{73,-40,70}, -{73,-40,71}, -{73,-40,72}, -{73,-40,73}, -{73,-39,-13}, -{73,-39,-12}, -{73,-39,-11}, -{73,-39,-10}, -{73,-39,-9}, -{73,-39,-8}, -{73,-39,-7}, -{73,-39,-6}, -{73,-39,-5}, -{73,-39,-4}, -{73,-39,-3}, -{73,-39,-2}, -{73,-39,-1}, -{73,-39,0}, -{73,-39,1}, -{73,-39,2}, -{73,-39,3}, -{73,-39,4}, -{73,-39,5}, -{73,-39,6}, -{73,-39,7}, -{73,-39,8}, -{73,-39,9}, -{73,-39,10}, -{73,-39,11}, -{73,-39,12}, -{73,-39,13}, -{73,-39,14}, -{73,-39,15}, -{73,-39,16}, -{73,-39,17}, -{73,-39,18}, -{73,-39,19}, -{73,-39,20}, -{73,-39,21}, -{73,-39,22}, -{73,-39,23}, -{73,-39,24}, -{73,-39,25}, -{73,-39,26}, -{73,-39,27}, -{73,-39,28}, -{73,-39,29}, -{73,-39,30}, -{73,-39,31}, -{73,-39,32}, -{73,-39,33}, -{73,-39,34}, -{73,-39,35}, -{73,-39,36}, -{73,-39,37}, -{73,-39,38}, -{73,-39,39}, -{73,-39,40}, -{73,-39,41}, -{73,-39,42}, -{73,-39,43}, -{73,-39,44}, -{73,-39,45}, -{73,-39,46}, -{73,-39,47}, -{73,-39,48}, -{73,-39,49}, -{73,-39,50}, -{73,-39,51}, -{73,-39,52}, -{73,-39,53}, -{73,-39,54}, -{73,-39,55}, -{73,-39,56}, -{73,-39,57}, -{73,-39,58}, -{73,-39,59}, -{73,-39,60}, -{73,-39,61}, -{73,-39,62}, -{73,-39,63}, -{73,-39,64}, -{73,-39,65}, -{73,-39,66}, -{73,-39,67}, -{73,-39,68}, -{73,-39,69}, -{73,-39,70}, -{73,-39,71}, -{73,-39,72}, -{73,-39,73}, -{73,-38,-15}, -{73,-38,-14}, -{73,-38,-13}, -{73,-38,-12}, -{73,-38,-11}, -{73,-38,-10}, -{73,-38,-9}, -{73,-38,-8}, -{73,-38,-7}, -{73,-38,-6}, -{73,-38,-5}, -{73,-38,-4}, -{73,-38,-3}, -{73,-38,-2}, -{73,-38,-1}, -{73,-38,0}, -{73,-38,1}, -{73,-38,2}, -{73,-38,3}, -{73,-38,4}, -{73,-38,5}, -{73,-38,6}, -{73,-38,7}, -{73,-38,8}, -{73,-38,9}, -{73,-38,10}, -{73,-38,11}, -{73,-38,12}, -{73,-38,13}, -{73,-38,14}, -{73,-38,15}, -{73,-38,16}, -{73,-38,17}, -{73,-38,18}, -{73,-38,19}, -{73,-38,20}, -{73,-38,21}, -{73,-38,22}, -{73,-38,23}, -{73,-38,24}, -{73,-38,25}, -{73,-38,26}, -{73,-38,27}, -{73,-38,28}, -{73,-38,29}, -{73,-38,30}, -{73,-38,31}, -{73,-38,32}, -{73,-38,33}, -{73,-38,34}, -{73,-38,35}, -{73,-38,36}, -{73,-38,37}, -{73,-38,38}, -{73,-38,39}, -{73,-38,40}, -{73,-38,41}, -{73,-38,42}, -{73,-38,43}, -{73,-38,44}, -{73,-38,45}, -{73,-38,46}, -{73,-38,47}, -{73,-38,48}, -{73,-38,49}, -{73,-38,50}, -{73,-38,51}, -{73,-38,52}, -{73,-38,53}, -{73,-38,54}, -{73,-38,55}, -{73,-38,56}, -{73,-38,57}, -{73,-38,58}, -{73,-38,59}, -{73,-38,60}, -{73,-38,61}, -{73,-38,62}, -{73,-38,63}, -{73,-38,64}, -{73,-38,65}, -{73,-38,66}, -{73,-38,67}, -{73,-38,68}, -{73,-38,69}, -{73,-38,70}, -{73,-38,71}, -{73,-38,72}, -{73,-38,73}, -{73,-37,-16}, -{73,-37,-15}, -{73,-37,-14}, -{73,-37,-13}, -{73,-37,-12}, -{73,-37,-11}, -{73,-37,-10}, -{73,-37,-9}, -{73,-37,-8}, -{73,-37,-7}, -{73,-37,-6}, -{73,-37,-5}, -{73,-37,-4}, -{73,-37,-3}, -{73,-37,-2}, -{73,-37,-1}, -{73,-37,0}, -{73,-37,1}, -{73,-37,2}, -{73,-37,3}, -{73,-37,4}, -{73,-37,5}, -{73,-37,6}, -{73,-37,7}, -{73,-37,8}, -{73,-37,9}, -{73,-37,10}, -{73,-37,11}, -{73,-37,12}, -{73,-37,13}, -{73,-37,14}, -{73,-37,15}, -{73,-37,16}, -{73,-37,17}, -{73,-37,18}, -{73,-37,19}, -{73,-37,20}, -{73,-37,21}, -{73,-37,22}, -{73,-37,23}, -{73,-37,24}, -{73,-37,25}, -{73,-37,26}, -{73,-37,27}, -{73,-37,28}, -{73,-37,29}, -{73,-37,30}, -{73,-37,31}, -{73,-37,32}, -{73,-37,33}, -{73,-37,34}, -{73,-37,35}, -{73,-37,36}, -{73,-37,37}, -{73,-37,38}, -{73,-37,39}, -{73,-37,40}, -{73,-37,41}, -{73,-37,42}, -{73,-37,43}, -{73,-37,44}, -{73,-37,45}, -{73,-37,46}, -{73,-37,47}, -{73,-37,48}, -{73,-37,49}, -{73,-37,50}, -{73,-37,51}, -{73,-37,52}, -{73,-37,53}, -{73,-37,54}, -{73,-37,55}, -{73,-37,56}, -{73,-37,57}, -{73,-37,58}, -{73,-37,59}, -{73,-37,60}, -{73,-37,61}, -{73,-37,62}, -{73,-37,63}, -{73,-37,64}, -{73,-37,65}, -{73,-37,66}, -{73,-37,67}, -{73,-37,68}, -{73,-37,69}, -{73,-37,70}, -{73,-37,71}, -{73,-37,72}, -{73,-37,73}, -{73,-36,-18}, -{73,-36,-17}, -{73,-36,-16}, -{73,-36,-15}, -{73,-36,-14}, -{73,-36,-13}, -{73,-36,-12}, -{73,-36,-11}, -{73,-36,-10}, -{73,-36,-9}, -{73,-36,-8}, -{73,-36,-7}, -{73,-36,-6}, -{73,-36,-5}, -{73,-36,-4}, -{73,-36,-3}, -{73,-36,-2}, -{73,-36,-1}, -{73,-36,0}, -{73,-36,1}, -{73,-36,2}, -{73,-36,3}, -{73,-36,4}, -{73,-36,5}, -{73,-36,6}, -{73,-36,7}, -{73,-36,8}, -{73,-36,9}, -{73,-36,10}, -{73,-36,11}, -{73,-36,12}, -{73,-36,13}, -{73,-36,14}, -{73,-36,15}, -{73,-36,16}, -{73,-36,17}, -{73,-36,18}, -{73,-36,19}, -{73,-36,20}, -{73,-36,21}, -{73,-36,22}, -{73,-36,23}, -{73,-36,24}, -{73,-36,25}, -{73,-36,26}, -{73,-36,27}, -{73,-36,28}, -{73,-36,29}, -{73,-36,30}, -{73,-36,31}, -{73,-36,32}, -{73,-36,33}, -{73,-36,34}, -{73,-36,35}, -{73,-36,36}, -{73,-36,37}, -{73,-36,38}, -{73,-36,39}, -{73,-36,40}, -{73,-36,41}, -{73,-36,42}, -{73,-36,43}, -{73,-36,44}, -{73,-36,45}, -{73,-36,46}, -{73,-36,47}, -{73,-36,48}, -{73,-36,49}, -{73,-36,50}, -{73,-36,51}, -{73,-36,52}, -{73,-36,53}, -{73,-36,54}, -{73,-36,55}, -{73,-36,56}, -{73,-36,57}, -{73,-36,58}, -{73,-36,59}, -{73,-36,60}, -{73,-36,61}, -{73,-36,62}, -{73,-36,63}, -{73,-36,64}, -{73,-36,65}, -{73,-36,66}, -{73,-36,67}, -{73,-36,68}, -{73,-36,69}, -{73,-36,70}, -{73,-36,71}, -{73,-36,72}, -{73,-36,73}, -{73,-35,-19}, -{73,-35,-18}, -{73,-35,-17}, -{73,-35,-16}, -{73,-35,-15}, -{73,-35,-14}, -{73,-35,-13}, -{73,-35,-12}, -{73,-35,-11}, -{73,-35,-10}, -{73,-35,-9}, -{73,-35,-8}, -{73,-35,-7}, -{73,-35,-6}, -{73,-35,-5}, -{73,-35,-4}, -{73,-35,-3}, -{73,-35,-2}, -{73,-35,-1}, -{73,-35,0}, -{73,-35,1}, -{73,-35,2}, -{73,-35,3}, -{73,-35,4}, -{73,-35,5}, -{73,-35,6}, -{73,-35,7}, -{73,-35,8}, -{73,-35,9}, -{73,-35,10}, -{73,-35,11}, -{73,-35,12}, -{73,-35,13}, -{73,-35,14}, -{73,-35,15}, -{73,-35,16}, -{73,-35,17}, -{73,-35,18}, -{73,-35,19}, -{73,-35,20}, -{73,-35,21}, -{73,-35,22}, -{73,-35,23}, -{73,-35,24}, -{73,-35,25}, -{73,-35,26}, -{73,-35,27}, -{73,-35,28}, -{73,-35,29}, -{73,-35,30}, -{73,-35,31}, -{73,-35,32}, -{73,-35,33}, -{73,-35,34}, -{73,-35,35}, -{73,-35,36}, -{73,-35,37}, -{73,-35,38}, -{73,-35,39}, -{73,-35,40}, -{73,-35,41}, -{73,-35,42}, -{73,-35,43}, -{73,-35,44}, -{73,-35,45}, -{73,-35,46}, -{73,-35,47}, -{73,-35,48}, -{73,-35,49}, -{73,-35,50}, -{73,-35,51}, -{73,-35,52}, -{73,-35,53}, -{73,-35,54}, -{73,-35,55}, -{73,-35,56}, -{73,-35,57}, -{73,-35,58}, -{73,-35,59}, -{73,-35,60}, -{73,-35,61}, -{73,-35,62}, -{73,-35,63}, -{73,-35,64}, -{73,-35,65}, -{73,-35,66}, -{73,-35,67}, -{73,-35,68}, -{73,-35,69}, -{73,-35,70}, -{73,-35,71}, -{73,-35,72}, -{73,-35,73}, -{73,-34,-21}, -{73,-34,-20}, -{73,-34,-19}, -{73,-34,-18}, -{73,-34,-17}, -{73,-34,-16}, -{73,-34,-15}, -{73,-34,-14}, -{73,-34,-13}, -{73,-34,-12}, -{73,-34,-11}, -{73,-34,-10}, -{73,-34,-9}, -{73,-34,-8}, -{73,-34,-7}, -{73,-34,-6}, -{73,-34,-5}, -{73,-34,-4}, -{73,-34,-3}, -{73,-34,-2}, -{73,-34,-1}, -{73,-34,0}, -{73,-34,1}, -{73,-34,2}, -{73,-34,3}, -{73,-34,4}, -{73,-34,5}, -{73,-34,6}, -{73,-34,7}, -{73,-34,8}, -{73,-34,9}, -{73,-34,10}, -{73,-34,11}, -{73,-34,12}, -{73,-34,13}, -{73,-34,14}, -{73,-34,15}, -{73,-34,16}, -{73,-34,17}, -{73,-34,18}, -{73,-34,19}, -{73,-34,20}, -{73,-34,21}, -{73,-34,22}, -{73,-34,23}, -{73,-34,24}, -{73,-34,25}, -{73,-34,26}, -{73,-34,27}, -{73,-34,28}, -{73,-34,29}, -{73,-34,30}, -{73,-34,31}, -{73,-34,32}, -{73,-34,33}, -{73,-34,34}, -{73,-34,35}, -{73,-34,36}, -{73,-34,37}, -{73,-34,38}, -{73,-34,39}, -{73,-34,40}, -{73,-34,41}, -{73,-34,42}, -{73,-34,43}, -{73,-34,44}, -{73,-34,45}, -{73,-34,46}, -{73,-34,47}, -{73,-34,48}, -{73,-34,49}, -{73,-34,50}, -{73,-34,51}, -{73,-34,52}, -{73,-34,53}, -{73,-34,54}, -{73,-34,55}, -{73,-34,56}, -{73,-34,57}, -{73,-34,58}, -{73,-34,59}, -{73,-34,60}, -{73,-34,61}, -{73,-34,62}, -{73,-34,63}, -{73,-34,64}, -{73,-34,65}, -{73,-34,66}, -{73,-34,67}, -{73,-34,68}, -{73,-34,69}, -{73,-34,70}, -{73,-34,71}, -{73,-34,72}, -{73,-34,73}, -{73,-33,-22}, -{73,-33,-21}, -{73,-33,-20}, -{73,-33,-19}, -{73,-33,-18}, -{73,-33,-17}, -{73,-33,-16}, -{73,-33,-15}, -{73,-33,-14}, -{73,-33,-13}, -{73,-33,-12}, -{73,-33,-11}, -{73,-33,-10}, -{73,-33,-9}, -{73,-33,-8}, -{73,-33,-7}, -{73,-33,-6}, -{73,-33,-5}, -{73,-33,-4}, -{73,-33,-3}, -{73,-33,-2}, -{73,-33,-1}, -{73,-33,0}, -{73,-33,1}, -{73,-33,2}, -{73,-33,3}, -{73,-33,4}, -{73,-33,5}, -{73,-33,6}, -{73,-33,7}, -{73,-33,8}, -{73,-33,9}, -{73,-33,10}, -{73,-33,11}, -{73,-33,12}, -{73,-33,13}, -{73,-33,14}, -{73,-33,15}, -{73,-33,16}, -{73,-33,17}, -{73,-33,18}, -{73,-33,19}, -{73,-33,20}, -{73,-33,21}, -{73,-33,22}, -{73,-33,23}, -{73,-33,24}, -{73,-33,25}, -{73,-33,26}, -{73,-33,27}, -{73,-33,28}, -{73,-33,29}, -{73,-33,30}, -{73,-33,31}, -{73,-33,32}, -{73,-33,33}, -{73,-33,34}, -{73,-33,35}, -{73,-33,36}, -{73,-33,37}, -{73,-33,38}, -{73,-33,39}, -{73,-33,40}, -{73,-33,41}, -{73,-33,42}, -{73,-33,43}, -{73,-33,44}, -{73,-33,45}, -{73,-33,46}, -{73,-33,47}, -{73,-33,48}, -{73,-33,49}, -{73,-33,50}, -{73,-33,51}, -{73,-33,52}, -{73,-33,53}, -{73,-33,54}, -{73,-33,55}, -{73,-33,56}, -{73,-33,57}, -{73,-33,58}, -{73,-33,59}, -{73,-33,60}, -{73,-33,61}, -{73,-33,62}, -{73,-33,63}, -{73,-33,64}, -{73,-33,65}, -{73,-33,66}, -{73,-33,67}, -{73,-33,68}, -{73,-33,69}, -{73,-33,70}, -{73,-33,71}, -{73,-33,72}, -{73,-33,73}, -{73,-32,-23}, -{73,-32,-22}, -{73,-32,-21}, -{73,-32,-20}, -{73,-32,-19}, -{73,-32,-18}, -{73,-32,-17}, -{73,-32,-16}, -{73,-32,-15}, -{73,-32,-14}, -{73,-32,-13}, -{73,-32,-12}, -{73,-32,-11}, -{73,-32,-10}, -{73,-32,-9}, -{73,-32,-8}, -{73,-32,-7}, -{73,-32,-6}, -{73,-32,-5}, -{73,-32,-4}, -{73,-32,-3}, -{73,-32,-2}, -{73,-32,-1}, -{73,-32,0}, -{73,-32,1}, -{73,-32,2}, -{73,-32,3}, -{73,-32,4}, -{73,-32,5}, -{73,-32,6}, -{73,-32,7}, -{73,-32,8}, -{73,-32,9}, -{73,-32,10}, -{73,-32,11}, -{73,-32,12}, -{73,-32,13}, -{73,-32,14}, -{73,-32,15}, -{73,-32,16}, -{73,-32,17}, -{73,-32,18}, -{73,-32,19}, -{73,-32,20}, -{73,-32,21}, -{73,-32,22}, -{73,-32,23}, -{73,-32,24}, -{73,-32,25}, -{73,-32,26}, -{73,-32,27}, -{73,-32,28}, -{73,-32,29}, -{73,-32,30}, -{73,-32,31}, -{73,-32,32}, -{73,-32,33}, -{73,-32,34}, -{73,-32,35}, -{73,-32,36}, -{73,-32,37}, -{73,-32,38}, -{73,-32,39}, -{73,-32,40}, -{73,-32,41}, -{73,-32,42}, -{73,-32,43}, -{73,-32,44}, -{73,-32,45}, -{73,-32,46}, -{73,-32,47}, -{73,-32,48}, -{73,-32,49}, -{73,-32,50}, -{73,-32,51}, -{73,-32,52}, -{73,-32,53}, -{73,-32,54}, -{73,-32,55}, -{73,-32,56}, -{73,-32,57}, -{73,-32,58}, -{73,-32,59}, -{73,-32,60}, -{73,-32,61}, -{73,-32,62}, -{73,-32,63}, -{73,-32,64}, -{73,-32,65}, -{73,-32,66}, -{73,-32,67}, -{73,-32,68}, -{73,-32,69}, -{73,-32,70}, -{73,-32,71}, -{73,-32,72}, -{73,-32,73}, -{73,-31,-25}, -{73,-31,-24}, -{73,-31,-23}, -{73,-31,-22}, -{73,-31,-21}, -{73,-31,-20}, -{73,-31,-19}, -{73,-31,-18}, -{73,-31,-17}, -{73,-31,-16}, -{73,-31,-15}, -{73,-31,-14}, -{73,-31,-13}, -{73,-31,-12}, -{73,-31,-11}, -{73,-31,-10}, -{73,-31,-9}, -{73,-31,-8}, -{73,-31,-7}, -{73,-31,-6}, -{73,-31,-5}, -{73,-31,-4}, -{73,-31,-3}, -{73,-31,-2}, -{73,-31,-1}, -{73,-31,0}, -{73,-31,1}, -{73,-31,2}, -{73,-31,3}, -{73,-31,4}, -{73,-31,5}, -{73,-31,6}, -{73,-31,7}, -{73,-31,8}, -{73,-31,9}, -{73,-31,10}, -{73,-31,11}, -{73,-31,12}, -{73,-31,13}, -{73,-31,14}, -{73,-31,15}, -{73,-31,16}, -{73,-31,17}, -{73,-31,18}, -{73,-31,19}, -{73,-31,20}, -{73,-31,21}, -{73,-31,22}, -{73,-31,23}, -{73,-31,24}, -{73,-31,25}, -{73,-31,26}, -{73,-31,27}, -{73,-31,28}, -{73,-31,29}, -{73,-31,30}, -{73,-31,31}, -{73,-31,32}, -{73,-31,33}, -{73,-31,34}, -{73,-31,35}, -{73,-31,36}, -{73,-31,37}, -{73,-31,38}, -{73,-31,39}, -{73,-31,40}, -{73,-31,41}, -{73,-31,42}, -{73,-31,43}, -{73,-31,44}, -{73,-31,45}, -{73,-31,46}, -{73,-31,47}, -{73,-31,48}, -{73,-31,49}, -{73,-31,50}, -{73,-31,51}, -{73,-31,52}, -{73,-31,53}, -{73,-31,54}, -{73,-31,55}, -{73,-31,56}, -{73,-31,57}, -{73,-31,58}, -{73,-31,59}, -{73,-31,60}, -{73,-31,61}, -{73,-31,62}, -{73,-31,63}, -{73,-31,64}, -{73,-31,65}, -{73,-31,66}, -{73,-31,67}, -{73,-31,68}, -{73,-31,69}, -{73,-31,70}, -{73,-31,71}, -{73,-31,72}, -{73,-31,73}, -{73,-30,-26}, -{73,-30,-25}, -{73,-30,-24}, -{73,-30,-23}, -{73,-30,-22}, -{73,-30,-21}, -{73,-30,-20}, -{73,-30,-19}, -{73,-30,-18}, -{73,-30,-17}, -{73,-30,-16}, -{73,-30,-15}, -{73,-30,-14}, -{73,-30,-13}, -{73,-30,-12}, -{73,-30,-11}, -{73,-30,-10}, -{73,-30,-9}, -{73,-30,-8}, -{73,-30,-7}, -{73,-30,-6}, -{73,-30,-5}, -{73,-30,-4}, -{73,-30,-3}, -{73,-30,-2}, -{73,-30,-1}, -{73,-30,0}, -{73,-30,1}, -{73,-30,2}, -{73,-30,3}, -{73,-30,4}, -{73,-30,5}, -{73,-30,6}, -{73,-30,7}, -{73,-30,8}, -{73,-30,9}, -{73,-30,10}, -{73,-30,11}, -{73,-30,12}, -{73,-30,13}, -{73,-30,14}, -{73,-30,15}, -{73,-30,16}, -{73,-30,17}, -{73,-30,18}, -{73,-30,19}, -{73,-30,20}, -{73,-30,21}, -{73,-30,22}, -{73,-30,23}, -{73,-30,24}, -{73,-30,25}, -{73,-30,26}, -{73,-30,27}, -{73,-30,28}, -{73,-30,29}, -{73,-30,30}, -{73,-30,31}, -{73,-30,32}, -{73,-30,33}, -{73,-30,34}, -{73,-30,35}, -{73,-30,36}, -{73,-30,37}, -{73,-30,38}, -{73,-30,39}, -{73,-30,40}, -{73,-30,41}, -{73,-30,42}, -{73,-30,43}, -{73,-30,44}, -{73,-30,45}, -{73,-30,46}, -{73,-30,47}, -{73,-30,48}, -{73,-30,49}, -{73,-30,50}, -{73,-30,51}, -{73,-30,52}, -{73,-30,53}, -{73,-30,54}, -{73,-30,55}, -{73,-30,56}, -{73,-30,57}, -{73,-30,58}, -{73,-30,59}, -{73,-30,60}, -{73,-30,61}, -{73,-30,62}, -{73,-30,63}, -{73,-30,64}, -{73,-30,65}, -{73,-30,66}, -{73,-30,67}, -{73,-30,68}, -{73,-30,69}, -{73,-30,70}, -{73,-30,71}, -{73,-30,72}, -{73,-30,73}, -{73,-29,-28}, -{73,-29,-27}, -{73,-29,-26}, -{73,-29,-25}, -{73,-29,-24}, -{73,-29,-23}, -{73,-29,-22}, -{73,-29,-21}, -{73,-29,-20}, -{73,-29,-19}, -{73,-29,-18}, -{73,-29,-17}, -{73,-29,-16}, -{73,-29,-15}, -{73,-29,-14}, -{73,-29,-13}, -{73,-29,-12}, -{73,-29,-11}, -{73,-29,-10}, -{73,-29,-9}, -{73,-29,-8}, -{73,-29,-7}, -{73,-29,-6}, -{73,-29,-5}, -{73,-29,-4}, -{73,-29,-3}, -{73,-29,-2}, -{73,-29,-1}, -{73,-29,0}, -{73,-29,1}, -{73,-29,2}, -{73,-29,3}, -{73,-29,4}, -{73,-29,5}, -{73,-29,6}, -{73,-29,7}, -{73,-29,8}, -{73,-29,9}, -{73,-29,10}, -{73,-29,11}, -{73,-29,12}, -{73,-29,13}, -{73,-29,14}, -{73,-29,15}, -{73,-29,16}, -{73,-29,17}, -{73,-29,18}, -{73,-29,19}, -{73,-29,20}, -{73,-29,21}, -{73,-29,22}, -{73,-29,23}, -{73,-29,24}, -{73,-29,25}, -{73,-29,26}, -{73,-29,27}, -{73,-29,28}, -{73,-29,29}, -{73,-29,30}, -{73,-29,31}, -{73,-29,32}, -{73,-29,33}, -{73,-29,34}, -{73,-29,35}, -{73,-29,36}, -{73,-29,37}, -{73,-29,38}, -{73,-29,39}, -{73,-29,40}, -{73,-29,41}, -{73,-29,42}, -{73,-29,43}, -{73,-29,44}, -{73,-29,45}, -{73,-29,46}, -{73,-29,47}, -{73,-29,48}, -{73,-29,49}, -{73,-29,50}, -{73,-29,51}, -{73,-29,52}, -{73,-29,53}, -{73,-29,54}, -{73,-29,55}, -{73,-29,56}, -{73,-29,57}, -{73,-29,58}, -{73,-29,59}, -{73,-29,60}, -{73,-29,61}, -{73,-29,62}, -{73,-29,63}, -{73,-29,64}, -{73,-29,65}, -{73,-29,66}, -{73,-29,67}, -{73,-29,68}, -{73,-29,69}, -{73,-29,70}, -{73,-29,71}, -{73,-29,72}, -{73,-29,73}, -{73,-28,-29}, -{73,-28,-28}, -{73,-28,-27}, -{73,-28,-26}, -{73,-28,-25}, -{73,-28,-24}, -{73,-28,-23}, -{73,-28,-22}, -{73,-28,-21}, -{73,-28,-20}, -{73,-28,-19}, -{73,-28,-18}, -{73,-28,-17}, -{73,-28,-16}, -{73,-28,-15}, -{73,-28,-14}, -{73,-28,-13}, -{73,-28,-12}, -{73,-28,-11}, -{73,-28,-10}, -{73,-28,-9}, -{73,-28,-8}, -{73,-28,-7}, -{73,-28,-6}, -{73,-28,-5}, -{73,-28,-4}, -{73,-28,-3}, -{73,-28,-2}, -{73,-28,-1}, -{73,-28,0}, -{73,-28,1}, -{73,-28,2}, -{73,-28,3}, -{73,-28,4}, -{73,-28,5}, -{73,-28,6}, -{73,-28,7}, -{73,-28,8}, -{73,-28,9}, -{73,-28,10}, -{73,-28,11}, -{73,-28,12}, -{73,-28,13}, -{73,-28,14}, -{73,-28,15}, -{73,-28,16}, -{73,-28,17}, -{73,-28,18}, -{73,-28,19}, -{73,-28,20}, -{73,-28,21}, -{73,-28,22}, -{73,-28,23}, -{73,-28,24}, -{73,-28,25}, -{73,-28,26}, -{73,-28,27}, -{73,-28,28}, -{73,-28,29}, -{73,-28,30}, -{73,-28,31}, -{73,-28,32}, -{73,-28,33}, -{73,-28,34}, -{73,-28,35}, -{73,-28,36}, -{73,-28,37}, -{73,-28,38}, -{73,-28,39}, -{73,-28,40}, -{73,-28,41}, -{73,-28,42}, -{73,-28,43}, -{73,-28,44}, -{73,-28,45}, -{73,-28,46}, -{73,-28,47}, -{73,-28,48}, -{73,-28,49}, -{73,-28,50}, -{73,-28,51}, -{73,-28,52}, -{73,-28,53}, -{73,-28,54}, -{73,-28,55}, -{73,-28,56}, -{73,-28,57}, -{73,-28,58}, -{73,-28,59}, -{73,-28,60}, -{73,-28,61}, -{73,-28,62}, -{73,-28,63}, -{73,-28,64}, -{73,-28,65}, -{73,-28,66}, -{73,-28,67}, -{73,-28,68}, -{73,-28,69}, -{73,-28,70}, -{73,-28,71}, -{73,-28,72}, -{73,-28,73}, -{73,-27,-30}, -{73,-27,-29}, -{73,-27,-28}, -{73,-27,-27}, -{73,-27,-26}, -{73,-27,-25}, -{73,-27,-24}, -{73,-27,-23}, -{73,-27,-22}, -{73,-27,-21}, -{73,-27,-20}, -{73,-27,-19}, -{73,-27,-18}, -{73,-27,-17}, -{73,-27,-16}, -{73,-27,-15}, -{73,-27,-14}, -{73,-27,-13}, -{73,-27,-12}, -{73,-27,-11}, -{73,-27,-10}, -{73,-27,-9}, -{73,-27,-8}, -{73,-27,-7}, -{73,-27,-6}, -{73,-27,-5}, -{73,-27,-4}, -{73,-27,-3}, -{73,-27,-2}, -{73,-27,-1}, -{73,-27,0}, -{73,-27,1}, -{73,-27,2}, -{73,-27,3}, -{73,-27,4}, -{73,-27,5}, -{73,-27,6}, -{73,-27,7}, -{73,-27,8}, -{73,-27,9}, -{73,-27,10}, -{73,-27,11}, -{73,-27,12}, -{73,-27,13}, -{73,-27,14}, -{73,-27,15}, -{73,-27,16}, -{73,-27,17}, -{73,-27,18}, -{73,-27,19}, -{73,-27,20}, -{73,-27,21}, -{73,-27,22}, -{73,-27,23}, -{73,-27,24}, -{73,-27,25}, -{73,-27,26}, -{73,-27,27}, -{73,-27,28}, -{73,-27,29}, -{73,-27,30}, -{73,-27,31}, -{73,-27,32}, -{73,-27,33}, -{73,-27,34}, -{73,-27,35}, -{73,-27,36}, -{73,-27,37}, -{73,-27,38}, -{73,-27,39}, -{73,-27,40}, -{73,-27,41}, -{73,-27,42}, -{73,-27,43}, -{73,-27,44}, -{73,-27,45}, -{73,-27,46}, -{73,-27,47}, -{73,-27,48}, -{73,-27,49}, -{73,-27,50}, -{73,-27,51}, -{73,-27,52}, -{73,-27,53}, -{73,-27,54}, -{73,-27,55}, -{73,-27,56}, -{73,-27,57}, -{73,-27,58}, -{73,-27,59}, -{73,-27,60}, -{73,-27,61}, -{73,-27,62}, -{73,-27,63}, -{73,-27,64}, -{73,-27,65}, -{73,-27,66}, -{73,-27,67}, -{73,-27,68}, -{73,-27,69}, -{73,-27,70}, -{73,-27,71}, -{73,-27,72}, -{73,-27,73}, -{73,-26,-32}, -{73,-26,-31}, -{73,-26,-30}, -{73,-26,-29}, -{73,-26,-28}, -{73,-26,-27}, -{73,-26,-26}, -{73,-26,-25}, -{73,-26,-24}, -{73,-26,-23}, -{73,-26,-22}, -{73,-26,-21}, -{73,-26,-20}, -{73,-26,-19}, -{73,-26,-18}, -{73,-26,-17}, -{73,-26,-16}, -{73,-26,-15}, -{73,-26,-14}, -{73,-26,-13}, -{73,-26,-12}, -{73,-26,-11}, -{73,-26,-10}, -{73,-26,-9}, -{73,-26,-8}, -{73,-26,-7}, -{73,-26,-6}, -{73,-26,-5}, -{73,-26,-4}, -{73,-26,-3}, -{73,-26,-2}, -{73,-26,-1}, -{73,-26,0}, -{73,-26,1}, -{73,-26,2}, -{73,-26,3}, -{73,-26,4}, -{73,-26,5}, -{73,-26,6}, -{73,-26,7}, -{73,-26,8}, -{73,-26,9}, -{73,-26,10}, -{73,-26,11}, -{73,-26,12}, -{73,-26,13}, -{73,-26,14}, -{73,-26,15}, -{73,-26,16}, -{73,-26,17}, -{73,-26,18}, -{73,-26,19}, -{73,-26,20}, -{73,-26,21}, -{73,-26,22}, -{73,-26,23}, -{73,-26,24}, -{73,-26,25}, -{73,-26,26}, -{73,-26,27}, -{73,-26,28}, -{73,-26,29}, -{73,-26,30}, -{73,-26,31}, -{73,-26,32}, -{73,-26,33}, -{73,-26,34}, -{73,-26,35}, -{73,-26,36}, -{73,-26,37}, -{73,-26,38}, -{73,-26,39}, -{73,-26,40}, -{73,-26,41}, -{73,-26,42}, -{73,-26,43}, -{73,-26,44}, -{73,-26,45}, -{73,-26,46}, -{73,-26,47}, -{73,-26,48}, -{73,-26,49}, -{73,-26,50}, -{73,-26,51}, -{73,-26,52}, -{73,-26,53}, -{73,-26,54}, -{73,-26,55}, -{73,-26,56}, -{73,-26,57}, -{73,-26,58}, -{73,-26,59}, -{73,-26,60}, -{73,-26,61}, -{73,-26,62}, -{73,-26,63}, -{73,-26,64}, -{73,-26,65}, -{73,-26,66}, -{73,-26,67}, -{73,-26,68}, -{73,-26,69}, -{73,-26,70}, -{73,-26,71}, -{73,-26,72}, -{73,-26,73}, -{73,-25,-33}, -{73,-25,-32}, -{73,-25,-31}, -{73,-25,-30}, -{73,-25,-29}, -{73,-25,-28}, -{73,-25,-27}, -{73,-25,-26}, -{73,-25,-25}, -{73,-25,-24}, -{73,-25,-23}, -{73,-25,-22}, -{73,-25,-21}, -{73,-25,-20}, -{73,-25,-19}, -{73,-25,-18}, -{73,-25,-17}, -{73,-25,-16}, -{73,-25,-15}, -{73,-25,-14}, -{73,-25,-13}, -{73,-25,-12}, -{73,-25,-11}, -{73,-25,-10}, -{73,-25,-9}, -{73,-25,-8}, -{73,-25,-7}, -{73,-25,-6}, -{73,-25,-5}, -{73,-25,-4}, -{73,-25,-3}, -{73,-25,-2}, -{73,-25,-1}, -{73,-25,0}, -{73,-25,1}, -{73,-25,2}, -{73,-25,3}, -{73,-25,4}, -{73,-25,5}, -{73,-25,6}, -{73,-25,7}, -{73,-25,8}, -{73,-25,9}, -{73,-25,10}, -{73,-25,11}, -{73,-25,12}, -{73,-25,13}, -{73,-25,14}, -{73,-25,15}, -{73,-25,16}, -{73,-25,17}, -{73,-25,18}, -{73,-25,19}, -{73,-25,20}, -{73,-25,21}, -{73,-25,22}, -{73,-25,23}, -{73,-25,24}, -{73,-25,25}, -{73,-25,26}, -{73,-25,27}, -{73,-25,28}, -{73,-25,29}, -{73,-25,30}, -{73,-25,31}, -{73,-25,32}, -{73,-25,33}, -{73,-25,34}, -{73,-25,35}, -{73,-25,36}, -{73,-25,37}, -{73,-25,38}, -{73,-25,39}, -{73,-25,40}, -{73,-25,41}, -{73,-25,42}, -{73,-25,43}, -{73,-25,44}, -{73,-25,45}, -{73,-25,46}, -{73,-25,47}, -{73,-25,48}, -{73,-25,49}, -{73,-25,50}, -{73,-25,51}, -{73,-25,52}, -{73,-25,53}, -{73,-25,54}, -{73,-25,55}, -{73,-25,56}, -{73,-25,57}, -{73,-25,58}, -{73,-25,59}, -{73,-25,60}, -{73,-25,61}, -{73,-25,62}, -{73,-25,63}, -{73,-25,64}, -{73,-25,65}, -{73,-25,66}, -{73,-25,67}, -{73,-25,68}, -{73,-25,69}, -{73,-25,70}, -{73,-25,71}, -{73,-25,72}, -{73,-25,73}, -{73,-25,74}, -{73,-24,-34}, -{73,-24,-33}, -{73,-24,-32}, -{73,-24,-31}, -{73,-24,-30}, -{73,-24,-29}, -{73,-24,-28}, -{73,-24,-27}, -{73,-24,-26}, -{73,-24,-25}, -{73,-24,-24}, -{73,-24,-23}, -{73,-24,-22}, -{73,-24,-21}, -{73,-24,-20}, -{73,-24,-19}, -{73,-24,-18}, -{73,-24,-17}, -{73,-24,-16}, -{73,-24,-15}, -{73,-24,-14}, -{73,-24,-13}, -{73,-24,-12}, -{73,-24,-11}, -{73,-24,-10}, -{73,-24,-9}, -{73,-24,-8}, -{73,-24,-7}, -{73,-24,-6}, -{73,-24,-5}, -{73,-24,-4}, -{73,-24,-3}, -{73,-24,-2}, -{73,-24,-1}, -{73,-24,0}, -{73,-24,1}, -{73,-24,2}, -{73,-24,3}, -{73,-24,4}, -{73,-24,5}, -{73,-24,6}, -{73,-24,7}, -{73,-24,8}, -{73,-24,9}, -{73,-24,10}, -{73,-24,11}, -{73,-24,12}, -{73,-24,13}, -{73,-24,14}, -{73,-24,15}, -{73,-24,16}, -{73,-24,17}, -{73,-24,18}, -{73,-24,19}, -{73,-24,20}, -{73,-24,21}, -{73,-24,22}, -{73,-24,23}, -{73,-24,24}, -{73,-24,25}, -{73,-24,26}, -{73,-24,27}, -{73,-24,28}, -{73,-24,29}, -{73,-24,30}, -{73,-24,31}, -{73,-24,32}, -{73,-24,33}, -{73,-24,34}, -{73,-24,35}, -{73,-24,36}, -{73,-24,37}, -{73,-24,38}, -{73,-24,39}, -{73,-24,40}, -{73,-24,41}, -{73,-24,42}, -{73,-24,43}, -{73,-24,44}, -{73,-24,45}, -{73,-24,46}, -{73,-24,47}, -{73,-24,48}, -{73,-24,49}, -{73,-24,50}, -{73,-24,51}, -{73,-24,52}, -{73,-24,53}, -{73,-24,54}, -{73,-24,55}, -{73,-24,56}, -{73,-24,57}, -{73,-24,58}, -{73,-24,59}, -{73,-24,60}, -{73,-24,61}, -{73,-24,62}, -{73,-24,63}, -{73,-24,64}, -{73,-24,65}, -{73,-24,66}, -{73,-24,67}, -{73,-24,68}, -{73,-24,69}, -{73,-24,70}, -{73,-24,71}, -{73,-24,72}, -{73,-24,73}, -{73,-24,74}, -{73,-23,-36}, -{73,-23,-35}, -{73,-23,-34}, -{73,-23,-33}, -{73,-23,-32}, -{73,-23,-31}, -{73,-23,-30}, -{73,-23,-29}, -{73,-23,-28}, -{73,-23,-27}, -{73,-23,-26}, -{73,-23,-25}, -{73,-23,-24}, -{73,-23,-23}, -{73,-23,-22}, -{73,-23,-21}, -{73,-23,-20}, -{73,-23,-19}, -{73,-23,-18}, -{73,-23,-17}, -{73,-23,-16}, -{73,-23,-15}, -{73,-23,-14}, -{73,-23,-13}, -{73,-23,-12}, -{73,-23,-11}, -{73,-23,-10}, -{73,-23,-9}, -{73,-23,-8}, -{73,-23,-7}, -{73,-23,-6}, -{73,-23,-5}, -{73,-23,-4}, -{73,-23,-3}, -{73,-23,-2}, -{73,-23,-1}, -{73,-23,0}, -{73,-23,1}, -{73,-23,2}, -{73,-23,3}, -{73,-23,4}, -{73,-23,5}, -{73,-23,6}, -{73,-23,7}, -{73,-23,8}, -{73,-23,9}, -{73,-23,10}, -{73,-23,11}, -{73,-23,12}, -{73,-23,13}, -{73,-23,14}, -{73,-23,15}, -{73,-23,16}, -{73,-23,17}, -{73,-23,18}, -{73,-23,19}, -{73,-23,20}, -{73,-23,21}, -{73,-23,22}, -{73,-23,23}, -{73,-23,24}, -{73,-23,25}, -{73,-23,26}, -{73,-23,27}, -{73,-23,28}, -{73,-23,29}, -{73,-23,30}, -{73,-23,31}, -{73,-23,32}, -{73,-23,33}, -{73,-23,34}, -{73,-23,35}, -{73,-23,36}, -{73,-23,37}, -{73,-23,38}, -{73,-23,39}, -{73,-23,40}, -{73,-23,41}, -{73,-23,42}, -{73,-23,43}, -{73,-23,44}, -{73,-23,45}, -{73,-23,46}, -{73,-23,47}, -{73,-23,48}, -{73,-23,49}, -{73,-23,50}, -{73,-23,51}, -{73,-23,52}, -{73,-23,53}, -{73,-23,54}, -{73,-23,55}, -{73,-23,56}, -{73,-23,57}, -{73,-23,58}, -{73,-23,59}, -{73,-23,60}, -{73,-23,61}, -{73,-23,62}, -{73,-23,63}, -{73,-23,64}, -{73,-23,65}, -{73,-23,66}, -{73,-23,67}, -{73,-23,68}, -{73,-23,69}, -{73,-23,70}, -{73,-23,71}, -{73,-23,72}, -{73,-23,73}, -{73,-23,74}, -{73,-22,-37}, -{73,-22,-36}, -{73,-22,-35}, -{73,-22,-34}, -{73,-22,-33}, -{73,-22,-32}, -{73,-22,-31}, -{73,-22,-30}, -{73,-22,-29}, -{73,-22,-28}, -{73,-22,-27}, -{73,-22,-26}, -{73,-22,-25}, -{73,-22,-24}, -{73,-22,-23}, -{73,-22,-22}, -{73,-22,-21}, -{73,-22,-20}, -{73,-22,-19}, -{73,-22,-18}, -{73,-22,-17}, -{73,-22,-16}, -{73,-22,-15}, -{73,-22,-14}, -{73,-22,-13}, -{73,-22,-12}, -{73,-22,-11}, -{73,-22,-10}, -{73,-22,-9}, -{73,-22,-8}, -{73,-22,-7}, -{73,-22,-6}, -{73,-22,-5}, -{73,-22,-4}, -{73,-22,-3}, -{73,-22,-2}, -{73,-22,-1}, -{73,-22,0}, -{73,-22,1}, -{73,-22,2}, -{73,-22,3}, -{73,-22,4}, -{73,-22,5}, -{73,-22,6}, -{73,-22,7}, -{73,-22,8}, -{73,-22,9}, -{73,-22,10}, -{73,-22,11}, -{73,-22,12}, -{73,-22,13}, -{73,-22,14}, -{73,-22,15}, -{73,-22,16}, -{73,-22,17}, -{73,-22,18}, -{73,-22,19}, -{73,-22,20}, -{73,-22,21}, -{73,-22,22}, -{73,-22,23}, -{73,-22,24}, -{73,-22,25}, -{73,-22,26}, -{73,-22,27}, -{73,-22,28}, -{73,-22,29}, -{73,-22,30}, -{73,-22,31}, -{73,-22,32}, -{73,-22,33}, -{73,-22,34}, -{73,-22,35}, -{73,-22,36}, -{73,-22,37}, -{73,-22,38}, -{73,-22,39}, -{73,-22,40}, -{73,-22,41}, -{73,-22,42}, -{73,-22,43}, -{73,-22,44}, -{73,-22,45}, -{73,-22,46}, -{73,-22,47}, -{73,-22,48}, -{73,-22,49}, -{73,-22,50}, -{73,-22,51}, -{73,-22,52}, -{73,-22,53}, -{73,-22,54}, -{73,-22,55}, -{73,-22,56}, -{73,-22,57}, -{73,-22,58}, -{73,-22,59}, -{73,-22,60}, -{73,-22,61}, -{73,-22,62}, -{73,-22,63}, -{73,-22,64}, -{73,-22,65}, -{73,-22,66}, -{73,-22,67}, -{73,-22,68}, -{73,-22,69}, -{73,-22,70}, -{73,-22,71}, -{73,-22,72}, -{73,-22,73}, -{73,-22,74}, -{73,-21,-38}, -{73,-21,-37}, -{73,-21,-36}, -{73,-21,-35}, -{73,-21,-34}, -{73,-21,-33}, -{73,-21,-32}, -{73,-21,-31}, -{73,-21,-30}, -{73,-21,-29}, -{73,-21,-28}, -{73,-21,-27}, -{73,-21,-26}, -{73,-21,-25}, -{73,-21,-24}, -{73,-21,-23}, -{73,-21,-22}, -{73,-21,-21}, -{73,-21,-20}, -{73,-21,-19}, -{73,-21,-18}, -{73,-21,-17}, -{73,-21,-16}, -{73,-21,-15}, -{73,-21,-14}, -{73,-21,-13}, -{73,-21,-12}, -{73,-21,-11}, -{73,-21,-10}, -{73,-21,-9}, -{73,-21,-8}, -{73,-21,-7}, -{73,-21,-6}, -{73,-21,-5}, -{73,-21,-4}, -{73,-21,-3}, -{73,-21,-2}, -{73,-21,-1}, -{73,-21,0}, -{73,-21,1}, -{73,-21,2}, -{73,-21,3}, -{73,-21,4}, -{73,-21,5}, -{73,-21,6}, -{73,-21,7}, -{73,-21,8}, -{73,-21,9}, -{73,-21,10}, -{73,-21,11}, -{73,-21,12}, -{73,-21,13}, -{73,-21,14}, -{73,-21,15}, -{73,-21,16}, -{73,-21,17}, -{73,-21,18}, -{73,-21,19}, -{73,-21,20}, -{73,-21,21}, -{73,-21,22}, -{73,-21,23}, -{73,-21,24}, -{73,-21,25}, -{73,-21,26}, -{73,-21,27}, -{73,-21,28}, -{73,-21,29}, -{73,-21,30}, -{73,-21,31}, -{73,-21,32}, -{73,-21,33}, -{73,-21,34}, -{73,-21,35}, -{73,-21,36}, -{73,-21,37}, -{73,-21,38}, -{73,-21,39}, -{73,-21,40}, -{73,-21,41}, -{73,-21,42}, -{73,-21,43}, -{73,-21,44}, -{73,-21,45}, -{73,-21,46}, -{73,-21,47}, -{73,-21,48}, -{73,-21,49}, -{73,-21,50}, -{73,-21,51}, -{73,-21,52}, -{73,-21,53}, -{73,-21,54}, -{73,-21,55}, -{73,-21,56}, -{73,-21,57}, -{73,-21,58}, -{73,-21,59}, -{73,-21,60}, -{73,-21,61}, -{73,-21,62}, -{73,-21,63}, -{73,-21,64}, -{73,-21,65}, -{73,-21,66}, -{73,-21,67}, -{73,-21,68}, -{73,-21,69}, -{73,-21,70}, -{73,-21,71}, -{73,-21,72}, -{73,-21,73}, -{73,-21,74}, -{73,-20,-40}, -{73,-20,-39}, -{73,-20,-38}, -{73,-20,-37}, -{73,-20,-36}, -{73,-20,-35}, -{73,-20,-34}, -{73,-20,-33}, -{73,-20,-32}, -{73,-20,-31}, -{73,-20,-30}, -{73,-20,-29}, -{73,-20,-28}, -{73,-20,-27}, -{73,-20,-26}, -{73,-20,-25}, -{73,-20,-24}, -{73,-20,-23}, -{73,-20,-22}, -{73,-20,-21}, -{73,-20,-20}, -{73,-20,-19}, -{73,-20,-18}, -{73,-20,-17}, -{73,-20,-16}, -{73,-20,-15}, -{73,-20,-14}, -{73,-20,-13}, -{73,-20,-12}, -{73,-20,-11}, -{73,-20,-10}, -{73,-20,-9}, -{73,-20,-8}, -{73,-20,-7}, -{73,-20,-6}, -{73,-20,-5}, -{73,-20,-4}, -{73,-20,-3}, -{73,-20,-2}, -{73,-20,-1}, -{73,-20,0}, -{73,-20,1}, -{73,-20,2}, -{73,-20,3}, -{73,-20,4}, -{73,-20,5}, -{73,-20,6}, -{73,-20,7}, -{73,-20,8}, -{73,-20,9}, -{73,-20,10}, -{73,-20,11}, -{73,-20,12}, -{73,-20,13}, -{73,-20,14}, -{73,-20,15}, -{73,-20,16}, -{73,-20,17}, -{73,-20,18}, -{73,-20,19}, -{73,-20,20}, -{73,-20,21}, -{73,-20,22}, -{73,-20,23}, -{73,-20,24}, -{73,-20,25}, -{73,-20,26}, -{73,-20,27}, -{73,-20,28}, -{73,-20,29}, -{73,-20,30}, -{73,-20,31}, -{73,-20,32}, -{73,-20,33}, -{73,-20,34}, -{73,-20,35}, -{73,-20,36}, -{73,-20,37}, -{73,-20,38}, -{73,-20,39}, -{73,-20,40}, -{73,-20,41}, -{73,-20,42}, -{73,-20,43}, -{73,-20,44}, -{73,-20,45}, -{73,-20,46}, -{73,-20,47}, -{73,-20,48}, -{73,-20,49}, -{73,-20,50}, -{73,-20,51}, -{73,-20,52}, -{73,-20,53}, -{73,-20,54}, -{73,-20,55}, -{73,-20,56}, -{73,-20,57}, -{73,-20,58}, -{73,-20,59}, -{73,-20,60}, -{73,-20,61}, -{73,-20,62}, -{73,-20,63}, -{73,-20,64}, -{73,-20,65}, -{73,-20,66}, -{73,-20,67}, -{73,-20,68}, -{73,-20,69}, -{73,-20,70}, -{73,-20,71}, -{73,-20,72}, -{73,-20,73}, -{73,-20,74}, -{73,-19,-41}, -{73,-19,-40}, -{73,-19,-39}, -{73,-19,-38}, -{73,-19,-37}, -{73,-19,-36}, -{73,-19,-35}, -{73,-19,-34}, -{73,-19,-33}, -{73,-19,-32}, -{73,-19,-31}, -{73,-19,-30}, -{73,-19,-29}, -{73,-19,-28}, -{73,-19,-27}, -{73,-19,-26}, -{73,-19,-25}, -{73,-19,-24}, -{73,-19,-23}, -{73,-19,-22}, -{73,-19,-21}, -{73,-19,-20}, -{73,-19,-19}, -{73,-19,-18}, -{73,-19,-17}, -{73,-19,-16}, -{73,-19,-15}, -{73,-19,-14}, -{73,-19,-13}, -{73,-19,-12}, -{73,-19,-11}, -{73,-19,-10}, -{73,-19,-9}, -{73,-19,-8}, -{73,-19,-7}, -{73,-19,-6}, -{73,-19,-5}, -{73,-19,-4}, -{73,-19,-3}, -{73,-19,-2}, -{73,-19,-1}, -{73,-19,0}, -{73,-19,1}, -{73,-19,2}, -{73,-19,3}, -{73,-19,4}, -{73,-19,5}, -{73,-19,6}, -{73,-19,7}, -{73,-19,8}, -{73,-19,9}, -{73,-19,10}, -{73,-19,11}, -{73,-19,12}, -{73,-19,13}, -{73,-19,14}, -{73,-19,15}, -{73,-19,16}, -{73,-19,17}, -{73,-19,18}, -{73,-19,19}, -{73,-19,20}, -{73,-19,21}, -{73,-19,22}, -{73,-19,23}, -{73,-19,24}, -{73,-19,25}, -{73,-19,26}, -{73,-19,27}, -{73,-19,28}, -{73,-19,29}, -{73,-19,30}, -{73,-19,31}, -{73,-19,32}, -{73,-19,33}, -{73,-19,34}, -{73,-19,35}, -{73,-19,36}, -{73,-19,37}, -{73,-19,38}, -{73,-19,39}, -{73,-19,40}, -{73,-19,41}, -{73,-19,42}, -{73,-19,43}, -{73,-19,44}, -{73,-19,45}, -{73,-19,46}, -{73,-19,47}, -{73,-19,48}, -{73,-19,49}, -{73,-19,50}, -{73,-19,51}, -{73,-19,52}, -{73,-19,53}, -{73,-19,54}, -{73,-19,55}, -{73,-19,56}, -{73,-19,57}, -{73,-19,58}, -{73,-19,59}, -{73,-19,60}, -{73,-19,61}, -{73,-19,62}, -{73,-19,63}, -{73,-19,64}, -{73,-19,65}, -{73,-19,66}, -{73,-19,67}, -{73,-19,68}, -{73,-19,69}, -{73,-19,70}, -{73,-19,71}, -{73,-19,72}, -{73,-19,73}, -{73,-19,74}, -{73,-18,-41}, -{73,-18,-40}, -{73,-18,-39}, -{73,-18,-38}, -{73,-18,-37}, -{73,-18,-36}, -{73,-18,-35}, -{73,-18,-34}, -{73,-18,-33}, -{73,-18,-32}, -{73,-18,-31}, -{73,-18,-30}, -{73,-18,-29}, -{73,-18,-28}, -{73,-18,-27}, -{73,-18,-26}, -{73,-18,-25}, -{73,-18,-24}, -{73,-18,-23}, -{73,-18,-22}, -{73,-18,-21}, -{73,-18,-20}, -{73,-18,-19}, -{73,-18,-18}, -{73,-18,-17}, -{73,-18,-16}, -{73,-18,-15}, -{73,-18,-14}, -{73,-18,-13}, -{73,-18,-12}, -{73,-18,-11}, -{73,-18,-10}, -{73,-18,-9}, -{73,-18,-8}, -{73,-18,-7}, -{73,-18,-6}, -{73,-18,-5}, -{73,-18,-4}, -{73,-18,-3}, -{73,-18,-2}, -{73,-18,-1}, -{73,-18,0}, -{73,-18,1}, -{73,-18,2}, -{73,-18,3}, -{73,-18,4}, -{73,-18,5}, -{73,-18,6}, -{73,-18,7}, -{73,-18,8}, -{73,-18,9}, -{73,-18,10}, -{73,-18,11}, -{73,-18,12}, -{73,-18,13}, -{73,-18,14}, -{73,-18,15}, -{73,-18,16}, -{73,-18,17}, -{73,-18,18}, -{73,-18,19}, -{73,-18,20}, -{73,-18,21}, -{73,-18,22}, -{73,-18,23}, -{73,-18,24}, -{73,-18,25}, -{73,-18,26}, -{73,-18,27}, -{73,-18,28}, -{73,-18,29}, -{73,-18,30}, -{73,-18,31}, -{73,-18,32}, -{73,-18,33}, -{73,-18,34}, -{73,-18,35}, -{73,-18,36}, -{73,-18,37}, -{73,-18,38}, -{73,-18,39}, -{73,-18,40}, -{73,-18,41}, -{73,-18,42}, -{73,-18,43}, -{73,-18,44}, -{73,-18,45}, -{73,-18,46}, -{73,-18,47}, -{73,-18,48}, -{73,-18,49}, -{73,-18,50}, -{73,-18,51}, -{73,-18,52}, -{73,-18,53}, -{73,-18,54}, -{73,-18,55}, -{73,-18,56}, -{73,-18,57}, -{73,-18,58}, -{73,-18,59}, -{73,-18,60}, -{73,-18,61}, -{73,-18,62}, -{73,-18,63}, -{73,-18,64}, -{73,-18,65}, -{73,-18,66}, -{73,-18,67}, -{73,-18,68}, -{73,-18,69}, -{73,-18,70}, -{73,-18,71}, -{73,-18,72}, -{73,-18,73}, -{73,-18,74}, -{73,-17,-41}, -{73,-17,-40}, -{73,-17,-39}, -{73,-17,-38}, -{73,-17,-37}, -{73,-17,-36}, -{73,-17,-35}, -{73,-17,-34}, -{73,-17,-33}, -{73,-17,-32}, -{73,-17,-31}, -{73,-17,-30}, -{73,-17,-29}, -{73,-17,-28}, -{73,-17,-27}, -{73,-17,-26}, -{73,-17,-25}, -{73,-17,-24}, -{73,-17,-23}, -{73,-17,-22}, -{73,-17,-21}, -{73,-17,-20}, -{73,-17,-19}, -{73,-17,-18}, -{73,-17,-17}, -{73,-17,-16}, -{73,-17,-15}, -{73,-17,-14}, -{73,-17,-13}, -{73,-17,-12}, -{73,-17,-11}, -{73,-17,-10}, -{73,-17,-9}, -{73,-17,-8}, -{73,-17,-7}, -{73,-17,-6}, -{73,-17,-5}, -{73,-17,-4}, -{73,-17,-3}, -{73,-17,-2}, -{73,-17,-1}, -{73,-17,0}, -{73,-17,1}, -{73,-17,2}, -{73,-17,3}, -{73,-17,4}, -{73,-17,5}, -{73,-17,6}, -{73,-17,7}, -{73,-17,8}, -{73,-17,9}, -{73,-17,10}, -{73,-17,11}, -{73,-17,12}, -{73,-17,13}, -{73,-17,14}, -{73,-17,15}, -{73,-17,16}, -{73,-17,17}, -{73,-17,18}, -{73,-17,19}, -{73,-17,20}, -{73,-17,21}, -{73,-17,22}, -{73,-17,23}, -{73,-17,24}, -{73,-17,25}, -{73,-17,26}, -{73,-17,27}, -{73,-17,28}, -{73,-17,29}, -{73,-17,30}, -{73,-17,31}, -{73,-17,32}, -{73,-17,33}, -{73,-17,34}, -{73,-17,35}, -{73,-17,36}, -{73,-17,37}, -{73,-17,38}, -{73,-17,39}, -{73,-17,40}, -{73,-17,41}, -{73,-17,42}, -{73,-17,43}, -{73,-17,44}, -{73,-17,45}, -{73,-17,46}, -{73,-17,47}, -{73,-17,48}, -{73,-17,49}, -{73,-17,50}, -{73,-17,51}, -{73,-17,52}, -{73,-17,53}, -{73,-17,54}, -{73,-17,55}, -{73,-17,56}, -{73,-17,57}, -{73,-17,58}, -{73,-17,59}, -{73,-17,60}, -{73,-17,61}, -{73,-17,62}, -{73,-17,63}, -{73,-17,64}, -{73,-17,65}, -{73,-17,66}, -{73,-17,67}, -{73,-17,68}, -{73,-17,69}, -{73,-17,70}, -{73,-17,71}, -{73,-17,72}, -{73,-17,73}, -{73,-17,74}, -{73,-16,-41}, -{73,-16,-40}, -{73,-16,-39}, -{73,-16,-38}, -{73,-16,-37}, -{73,-16,-36}, -{73,-16,-35}, -{73,-16,-34}, -{73,-16,-33}, -{73,-16,-32}, -{73,-16,-31}, -{73,-16,-30}, -{73,-16,-29}, -{73,-16,-28}, -{73,-16,-27}, -{73,-16,-26}, -{73,-16,-25}, -{73,-16,-24}, -{73,-16,-23}, -{73,-16,-22}, -{73,-16,-21}, -{73,-16,-20}, -{73,-16,-19}, -{73,-16,-18}, -{73,-16,-17}, -{73,-16,-16}, -{73,-16,-15}, -{73,-16,-14}, -{73,-16,-13}, -{73,-16,-12}, -{73,-16,-11}, -{73,-16,-10}, -{73,-16,-9}, -{73,-16,-8}, -{73,-16,-7}, -{73,-16,-6}, -{73,-16,-5}, -{73,-16,-4}, -{73,-16,-3}, -{73,-16,-2}, -{73,-16,-1}, -{73,-16,0}, -{73,-16,1}, -{73,-16,2}, -{73,-16,3}, -{73,-16,4}, -{73,-16,5}, -{73,-16,6}, -{73,-16,7}, -{73,-16,8}, -{73,-16,9}, -{73,-16,10}, -{73,-16,11}, -{73,-16,12}, -{73,-16,13}, -{73,-16,14}, -{73,-16,15}, -{73,-16,16}, -{73,-16,17}, -{73,-16,18}, -{73,-16,19}, -{73,-16,20}, -{73,-16,21}, -{73,-16,22}, -{73,-16,23}, -{73,-16,24}, -{73,-16,25}, -{73,-16,26}, -{73,-16,27}, -{73,-16,28}, -{73,-16,29}, -{73,-16,30}, -{73,-16,31}, -{73,-16,32}, -{73,-16,33}, -{73,-16,34}, -{73,-16,35}, -{73,-16,36}, -{73,-16,37}, -{73,-16,38}, -{73,-16,39}, -{73,-16,40}, -{73,-16,41}, -{73,-16,42}, -{73,-16,43}, -{73,-16,44}, -{73,-16,45}, -{73,-16,46}, -{73,-16,47}, -{73,-16,48}, -{73,-16,49}, -{73,-16,50}, -{73,-16,51}, -{73,-16,52}, -{73,-16,53}, -{73,-16,54}, -{73,-16,55}, -{73,-16,56}, -{73,-16,57}, -{73,-16,58}, -{73,-16,59}, -{73,-16,60}, -{73,-16,61}, -{73,-16,62}, -{73,-16,63}, -{73,-16,64}, -{73,-16,65}, -{73,-16,66}, -{73,-16,67}, -{73,-16,68}, -{73,-16,69}, -{73,-16,70}, -{73,-16,71}, -{73,-16,72}, -{73,-16,73}, -{73,-16,74}, -{73,-15,-41}, -{73,-15,-40}, -{73,-15,-39}, -{73,-15,-38}, -{73,-15,-37}, -{73,-15,-36}, -{73,-15,-35}, -{73,-15,-34}, -{73,-15,-33}, -{73,-15,-32}, -{73,-15,-31}, -{73,-15,-30}, -{73,-15,-29}, -{73,-15,-28}, -{73,-15,-27}, -{73,-15,-26}, -{73,-15,-25}, -{73,-15,-24}, -{73,-15,-23}, -{73,-15,-22}, -{73,-15,-21}, -{73,-15,-20}, -{73,-15,-19}, -{73,-15,-18}, -{73,-15,-17}, -{73,-15,-16}, -{73,-15,-15}, -{73,-15,-14}, -{73,-15,-13}, -{73,-15,-12}, -{73,-15,-11}, -{73,-15,-10}, -{73,-15,-9}, -{73,-15,-8}, -{73,-15,-7}, -{73,-15,-6}, -{73,-15,-5}, -{73,-15,-4}, -{73,-15,-3}, -{73,-15,-2}, -{73,-15,-1}, -{73,-15,0}, -{73,-15,1}, -{73,-15,2}, -{73,-15,3}, -{73,-15,4}, -{73,-15,5}, -{73,-15,6}, -{73,-15,7}, -{73,-15,8}, -{73,-15,9}, -{73,-15,10}, -{73,-15,11}, -{73,-15,12}, -{73,-15,13}, -{73,-15,14}, -{73,-15,15}, -{73,-15,16}, -{73,-15,17}, -{73,-15,18}, -{73,-15,19}, -{73,-15,20}, -{73,-15,21}, -{73,-15,22}, -{73,-15,23}, -{73,-15,24}, -{73,-15,25}, -{73,-15,26}, -{73,-15,27}, -{73,-15,28}, -{73,-15,29}, -{73,-15,30}, -{73,-15,31}, -{73,-15,32}, -{73,-15,33}, -{73,-15,34}, -{73,-15,35}, -{73,-15,36}, -{73,-15,37}, -{73,-15,38}, -{73,-15,39}, -{73,-15,40}, -{73,-15,41}, -{73,-15,42}, -{73,-15,43}, -{73,-15,44}, -{73,-15,45}, -{73,-15,46}, -{73,-15,47}, -{73,-15,48}, -{73,-15,49}, -{73,-15,50}, -{73,-15,51}, -{73,-15,52}, -{73,-15,53}, -{73,-15,54}, -{73,-15,55}, -{73,-15,56}, -{73,-15,57}, -{73,-15,58}, -{73,-15,59}, -{73,-15,60}, -{73,-15,61}, -{73,-15,62}, -{73,-15,63}, -{73,-15,64}, -{73,-15,65}, -{73,-15,66}, -{73,-15,67}, -{73,-15,68}, -{73,-15,69}, -{73,-15,70}, -{73,-15,71}, -{73,-15,72}, -{73,-15,73}, -{73,-15,74}, -{73,-14,-41}, -{73,-14,-40}, -{73,-14,-39}, -{73,-14,-38}, -{73,-14,-37}, -{73,-14,-36}, -{73,-14,-35}, -{73,-14,-34}, -{73,-14,-33}, -{73,-14,-32}, -{73,-14,-31}, -{73,-14,-30}, -{73,-14,-29}, -{73,-14,-28}, -{73,-14,-27}, -{73,-14,-26}, -{73,-14,-25}, -{73,-14,-24}, -{73,-14,-23}, -{73,-14,-22}, -{73,-14,-21}, -{73,-14,-20}, -{73,-14,-19}, -{73,-14,-18}, -{73,-14,-17}, -{73,-14,-16}, -{73,-14,-15}, -{73,-14,-14}, -{73,-14,-13}, -{73,-14,-12}, -{73,-14,-11}, -{73,-14,-10}, -{73,-14,-9}, -{73,-14,-8}, -{73,-14,-7}, -{73,-14,-6}, -{73,-14,-5}, -{73,-14,-4}, -{73,-14,-3}, -{73,-14,-2}, -{73,-14,-1}, -{73,-14,0}, -{73,-14,1}, -{73,-14,2}, -{73,-14,3}, -{73,-14,4}, -{73,-14,5}, -{73,-14,6}, -{73,-14,7}, -{73,-14,8}, -{73,-14,9}, -{73,-14,10}, -{73,-14,11}, -{73,-14,12}, -{73,-14,13}, -{73,-14,14}, -{73,-14,15}, -{73,-14,16}, -{73,-14,17}, -{73,-14,18}, -{73,-14,19}, -{73,-14,20}, -{73,-14,21}, -{73,-14,22}, -{73,-14,23}, -{73,-14,24}, -{73,-14,25}, -{73,-14,26}, -{73,-14,27}, -{73,-14,28}, -{73,-14,29}, -{73,-14,30}, -{73,-14,31}, -{73,-14,32}, -{73,-14,33}, -{73,-14,34}, -{73,-14,35}, -{73,-14,36}, -{73,-14,37}, -{73,-14,38}, -{73,-14,39}, -{73,-14,40}, -{73,-14,41}, -{73,-14,42}, -{73,-14,43}, -{73,-14,44}, -{73,-14,45}, -{73,-14,46}, -{73,-14,47}, -{73,-14,48}, -{73,-14,49}, -{73,-14,50}, -{73,-14,51}, -{73,-14,52}, -{73,-14,53}, -{73,-14,54}, -{73,-14,55}, -{73,-14,56}, -{73,-14,57}, -{73,-14,58}, -{73,-14,59}, -{73,-14,60}, -{73,-14,61}, -{73,-14,62}, -{73,-14,63}, -{73,-14,64}, -{73,-14,65}, -{73,-14,66}, -{73,-14,67}, -{73,-14,68}, -{73,-14,69}, -{73,-14,70}, -{73,-14,71}, -{73,-14,72}, -{73,-14,73}, -{73,-14,74}, -{73,-13,-41}, -{73,-13,-40}, -{73,-13,-39}, -{73,-13,-38}, -{73,-13,-37}, -{73,-13,-36}, -{73,-13,-35}, -{73,-13,-34}, -{73,-13,-33}, -{73,-13,-32}, -{73,-13,-31}, -{73,-13,-30}, -{73,-13,-29}, -{73,-13,-28}, -{73,-13,-27}, -{73,-13,-26}, -{73,-13,-25}, -{73,-13,-24}, -{73,-13,-23}, -{73,-13,-22}, -{73,-13,-21}, -{73,-13,-20}, -{73,-13,-19}, -{73,-13,-18}, -{73,-13,-17}, -{73,-13,-16}, -{73,-13,-15}, -{73,-13,-14}, -{73,-13,-13}, -{73,-13,-12}, -{73,-13,-11}, -{73,-13,-10}, -{73,-13,-9}, -{73,-13,-8}, -{73,-13,-7}, -{73,-13,-6}, -{73,-13,-5}, -{73,-13,-4}, -{73,-13,-3}, -{73,-13,-2}, -{73,-13,-1}, -{73,-13,0}, -{73,-13,1}, -{73,-13,2}, -{73,-13,3}, -{73,-13,4}, -{73,-13,5}, -{73,-13,6}, -{73,-13,7}, -{73,-13,8}, -{73,-13,9}, -{73,-13,10}, -{73,-13,11}, -{73,-13,12}, -{73,-13,13}, -{73,-13,14}, -{73,-13,15}, -{73,-13,16}, -{73,-13,17}, -{73,-13,18}, -{73,-13,19}, -{73,-13,20}, -{73,-13,21}, -{73,-13,22}, -{73,-13,23}, -{73,-13,24}, -{73,-13,25}, -{73,-13,26}, -{73,-13,27}, -{73,-13,28}, -{73,-13,29}, -{73,-13,30}, -{73,-13,31}, -{73,-13,32}, -{73,-13,33}, -{73,-13,34}, -{73,-13,35}, -{73,-13,36}, -{73,-13,37}, -{73,-13,38}, -{73,-13,39}, -{73,-13,40}, -{73,-13,41}, -{73,-13,42}, -{73,-13,43}, -{73,-13,44}, -{73,-13,45}, -{73,-13,46}, -{73,-13,47}, -{73,-13,48}, -{73,-13,49}, -{73,-13,50}, -{73,-13,51}, -{73,-13,52}, -{73,-13,53}, -{73,-13,54}, -{73,-13,55}, -{73,-13,56}, -{73,-13,57}, -{73,-13,58}, -{73,-13,59}, -{73,-13,60}, -{73,-13,61}, -{73,-13,62}, -{73,-13,63}, -{73,-13,64}, -{73,-13,65}, -{73,-13,66}, -{73,-13,67}, -{73,-13,68}, -{73,-13,69}, -{73,-13,70}, -{73,-13,71}, -{73,-13,72}, -{73,-13,73}, -{73,-13,74}, -{73,-12,-41}, -{73,-12,-40}, -{73,-12,-39}, -{73,-12,-38}, -{73,-12,-37}, -{73,-12,-36}, -{73,-12,-35}, -{73,-12,-34}, -{73,-12,-33}, -{73,-12,-32}, -{73,-12,-31}, -{73,-12,-30}, -{73,-12,-29}, -{73,-12,-28}, -{73,-12,-27}, -{73,-12,-26}, -{73,-12,-25}, -{73,-12,-24}, -{73,-12,-23}, -{73,-12,-22}, -{73,-12,-21}, -{73,-12,-20}, -{73,-12,-19}, -{73,-12,-18}, -{73,-12,-17}, -{73,-12,-16}, -{73,-12,-15}, -{73,-12,-14}, -{73,-12,-13}, -{73,-12,-12}, -{73,-12,-11}, -{73,-12,-10}, -{73,-12,-9}, -{73,-12,-8}, -{73,-12,-7}, -{73,-12,-6}, -{73,-12,-5}, -{73,-12,-4}, -{73,-12,-3}, -{73,-12,-2}, -{73,-12,-1}, -{73,-12,0}, -{73,-12,1}, -{73,-12,2}, -{73,-12,3}, -{73,-12,4}, -{73,-12,5}, -{73,-12,6}, -{73,-12,7}, -{73,-12,8}, -{73,-12,9}, -{73,-12,10}, -{73,-12,11}, -{73,-12,12}, -{73,-12,13}, -{73,-12,14}, -{73,-12,15}, -{73,-12,16}, -{73,-12,17}, -{73,-12,18}, -{73,-12,19}, -{73,-12,20}, -{73,-12,21}, -{73,-12,22}, -{73,-12,23}, -{73,-12,24}, -{73,-12,25}, -{73,-12,26}, -{73,-12,27}, -{73,-12,28}, -{73,-12,29}, -{73,-12,30}, -{73,-12,31}, -{73,-12,32}, -{73,-12,33}, -{73,-12,34}, -{73,-12,35}, -{73,-12,36}, -{73,-12,37}, -{73,-12,38}, -{73,-12,39}, -{73,-12,40}, -{73,-12,41}, -{73,-12,42}, -{73,-12,43}, -{73,-12,44}, -{73,-12,45}, -{73,-12,46}, -{73,-12,47}, -{73,-12,48}, -{73,-12,49}, -{73,-12,50}, -{73,-12,51}, -{73,-12,52}, -{73,-12,53}, -{73,-12,54}, -{73,-12,55}, -{73,-12,56}, -{73,-12,57}, -{73,-12,58}, -{73,-12,59}, -{73,-12,60}, -{73,-12,61}, -{73,-12,62}, -{73,-12,63}, -{73,-12,64}, -{73,-12,65}, -{73,-12,66}, -{73,-12,67}, -{73,-12,68}, -{73,-12,69}, -{73,-12,70}, -{73,-12,71}, -{73,-12,72}, -{73,-12,73}, -{73,-12,74}, -{73,-11,-41}, -{73,-11,-40}, -{73,-11,-39}, -{73,-11,-38}, -{73,-11,-37}, -{73,-11,-36}, -{73,-11,-35}, -{73,-11,-34}, -{73,-11,-33}, -{73,-11,-32}, -{73,-11,-31}, -{73,-11,-30}, -{73,-11,-29}, -{73,-11,-28}, -{73,-11,-27}, -{73,-11,-26}, -{73,-11,-25}, -{73,-11,-24}, -{73,-11,-23}, -{73,-11,-22}, -{73,-11,-21}, -{73,-11,-20}, -{73,-11,-19}, -{73,-11,-18}, -{73,-11,-17}, -{73,-11,-16}, -{73,-11,-15}, -{73,-11,-14}, -{73,-11,-13}, -{73,-11,-12}, -{73,-11,-11}, -{73,-11,-10}, -{73,-11,-9}, -{73,-11,-8}, -{73,-11,-7}, -{73,-11,-6}, -{73,-11,-5}, -{73,-11,-4}, -{73,-11,-3}, -{73,-11,-2}, -{73,-11,-1}, -{73,-11,0}, -{73,-11,1}, -{73,-11,2}, -{73,-11,3}, -{73,-11,4}, -{73,-11,5}, -{73,-11,6}, -{73,-11,7}, -{73,-11,8}, -{73,-11,9}, -{73,-11,10}, -{73,-11,11}, -{73,-11,12}, -{73,-11,13}, -{73,-11,14}, -{73,-11,15}, -{73,-11,16}, -{73,-11,17}, -{73,-11,18}, -{73,-11,19}, -{73,-11,20}, -{73,-11,21}, -{73,-11,22}, -{73,-11,23}, -{73,-11,24}, -{73,-11,25}, -{73,-11,26}, -{73,-11,27}, -{73,-11,28}, -{73,-11,29}, -{73,-11,30}, -{73,-11,31}, -{73,-11,32}, -{73,-11,33}, -{73,-11,34}, -{73,-11,35}, -{73,-11,36}, -{73,-11,37}, -{73,-11,38}, -{73,-11,39}, -{73,-11,40}, -{73,-11,41}, -{73,-11,42}, -{73,-11,43}, -{73,-11,44}, -{73,-11,45}, -{73,-11,46}, -{73,-11,47}, -{73,-11,48}, -{73,-11,49}, -{73,-11,50}, -{73,-11,51}, -{73,-11,52}, -{73,-11,53}, -{73,-11,54}, -{73,-11,55}, -{73,-11,56}, -{73,-11,57}, -{73,-11,58}, -{73,-11,59}, -{73,-11,60}, -{73,-11,61}, -{73,-11,62}, -{73,-11,63}, -{73,-11,64}, -{73,-11,65}, -{73,-11,66}, -{73,-11,67}, -{73,-11,68}, -{73,-11,69}, -{73,-11,70}, -{73,-11,71}, -{73,-11,72}, -{73,-11,73}, -{73,-11,74}, -{73,-10,-41}, -{73,-10,-40}, -{73,-10,-39}, -{73,-10,-38}, -{73,-10,-37}, -{73,-10,-36}, -{73,-10,-35}, -{73,-10,-34}, -{73,-10,-33}, -{73,-10,-32}, -{73,-10,-31}, -{73,-10,-30}, -{73,-10,-29}, -{73,-10,-28}, -{73,-10,-27}, -{73,-10,-26}, -{73,-10,-25}, -{73,-10,-24}, -{73,-10,-23}, -{73,-10,-22}, -{73,-10,-21}, -{73,-10,-20}, -{73,-10,-19}, -{73,-10,-18}, -{73,-10,-17}, -{73,-10,-16}, -{73,-10,-15}, -{73,-10,-14}, -{73,-10,-13}, -{73,-10,-12}, -{73,-10,-11}, -{73,-10,-10}, -{73,-10,-9}, -{73,-10,-8}, -{73,-10,-7}, -{73,-10,-6}, -{73,-10,-5}, -{73,-10,-4}, -{73,-10,-3}, -{73,-10,-2}, -{73,-10,-1}, -{73,-10,0}, -{73,-10,1}, -{73,-10,2}, -{73,-10,3}, -{73,-10,4}, -{73,-10,5}, -{73,-10,6}, -{73,-10,7}, -{73,-10,8}, -{73,-10,9}, -{73,-10,10}, -{73,-10,11}, -{73,-10,12}, -{73,-10,13}, -{73,-10,14}, -{73,-10,15}, -{73,-10,16}, -{73,-10,17}, -{73,-10,18}, -{73,-10,19}, -{73,-10,20}, -{73,-10,21}, -{73,-10,22}, -{73,-10,23}, -{73,-10,24}, -{73,-10,25}, -{73,-10,26}, -{73,-10,27}, -{73,-10,28}, -{73,-10,29}, -{73,-10,30}, -{73,-10,31}, -{73,-10,32}, -{73,-10,33}, -{73,-10,34}, -{73,-10,35}, -{73,-10,36}, -{73,-10,37}, -{73,-10,38}, -{73,-10,39}, -{73,-10,40}, -{73,-10,41}, -{73,-10,42}, -{73,-10,43}, -{73,-10,44}, -{73,-10,45}, -{73,-10,46}, -{73,-10,47}, -{73,-10,48}, -{73,-10,49}, -{73,-10,50}, -{73,-10,51}, -{73,-10,52}, -{73,-10,53}, -{73,-10,54}, -{73,-10,55}, -{73,-10,56}, -{73,-10,57}, -{73,-10,58}, -{73,-10,59}, -{73,-10,60}, -{73,-10,61}, -{73,-10,62}, -{73,-10,63}, -{73,-10,64}, -{73,-10,65}, -{73,-10,66}, -{73,-10,67}, -{73,-10,68}, -{73,-10,69}, -{73,-10,70}, -{73,-10,71}, -{73,-10,72}, -{73,-10,73}, -{73,-10,74}, -{73,-9,-41}, -{73,-9,-40}, -{73,-9,-39}, -{73,-9,-38}, -{73,-9,-37}, -{73,-9,-36}, -{73,-9,-35}, -{73,-9,-34}, -{73,-9,-33}, -{73,-9,-32}, -{73,-9,-31}, -{73,-9,-30}, -{73,-9,-29}, -{73,-9,-28}, -{73,-9,-27}, -{73,-9,-26}, -{73,-9,-25}, -{73,-9,-24}, -{73,-9,-23}, -{73,-9,-22}, -{73,-9,-21}, -{73,-9,-20}, -{73,-9,-19}, -{73,-9,-18}, -{73,-9,-17}, -{73,-9,-16}, -{73,-9,-15}, -{73,-9,-14}, -{73,-9,-13}, -{73,-9,-12}, -{73,-9,-11}, -{73,-9,-10}, -{73,-9,-9}, -{73,-9,-8}, -{73,-9,-7}, -{73,-9,-6}, -{73,-9,-5}, -{73,-9,-4}, -{73,-9,-3}, -{73,-9,-2}, -{73,-9,-1}, -{73,-9,0}, -{73,-9,1}, -{73,-9,2}, -{73,-9,3}, -{73,-9,4}, -{73,-9,5}, -{73,-9,6}, -{73,-9,7}, -{73,-9,8}, -{73,-9,9}, -{73,-9,10}, -{73,-9,11}, -{73,-9,12}, -{73,-9,13}, -{73,-9,14}, -{73,-9,15}, -{73,-9,16}, -{73,-9,17}, -{73,-9,18}, -{73,-9,19}, -{73,-9,20}, -{73,-9,21}, -{73,-9,22}, -{73,-9,23}, -{73,-9,24}, -{73,-9,25}, -{73,-9,26}, -{73,-9,27}, -{73,-9,28}, -{73,-9,29}, -{73,-9,30}, -{73,-9,31}, -{73,-9,32}, -{73,-9,33}, -{73,-9,34}, -{73,-9,35}, -{73,-9,36}, -{73,-9,37}, -{73,-9,38}, -{73,-9,39}, -{73,-9,40}, -{73,-9,41}, -{73,-9,42}, -{73,-9,43}, -{73,-9,44}, -{73,-9,45}, -{73,-9,46}, -{73,-9,47}, -{73,-9,48}, -{73,-9,49}, -{73,-9,50}, -{73,-9,51}, -{73,-9,52}, -{73,-9,53}, -{73,-9,54}, -{73,-9,55}, -{73,-9,56}, -{73,-9,57}, -{73,-9,58}, -{73,-9,59}, -{73,-9,60}, -{73,-9,61}, -{73,-9,62}, -{73,-9,63}, -{73,-9,64}, -{73,-9,65}, -{73,-9,66}, -{73,-9,67}, -{73,-9,68}, -{73,-9,69}, -{73,-9,70}, -{73,-9,71}, -{73,-9,72}, -{73,-9,73}, -{73,-9,74}, -{73,-9,75}, -{73,-8,-41}, -{73,-8,-40}, -{73,-8,-39}, -{73,-8,-38}, -{73,-8,-37}, -{73,-8,-36}, -{73,-8,-35}, -{73,-8,-34}, -{73,-8,-33}, -{73,-8,-32}, -{73,-8,-31}, -{73,-8,-30}, -{73,-8,-29}, -{73,-8,-28}, -{73,-8,-27}, -{73,-8,-26}, -{73,-8,-25}, -{73,-8,-24}, -{73,-8,-23}, -{73,-8,-22}, -{73,-8,-21}, -{73,-8,-20}, -{73,-8,-19}, -{73,-8,-18}, -{73,-8,-17}, -{73,-8,-16}, -{73,-8,-15}, -{73,-8,-14}, -{73,-8,-13}, -{73,-8,-12}, -{73,-8,-11}, -{73,-8,-10}, -{73,-8,-9}, -{73,-8,-8}, -{73,-8,-7}, -{73,-8,-6}, -{73,-8,-5}, -{73,-8,-4}, -{73,-8,-3}, -{73,-8,-2}, -{73,-8,-1}, -{73,-8,0}, -{73,-8,1}, -{73,-8,2}, -{73,-8,3}, -{73,-8,4}, -{73,-8,5}, -{73,-8,6}, -{73,-8,7}, -{73,-8,8}, -{73,-8,9}, -{73,-8,10}, -{73,-8,11}, -{73,-8,12}, -{73,-8,13}, -{73,-8,14}, -{73,-8,15}, -{73,-8,16}, -{73,-8,17}, -{73,-8,18}, -{73,-8,19}, -{73,-8,20}, -{73,-8,21}, -{73,-8,22}, -{73,-8,23}, -{73,-8,24}, -{73,-8,25}, -{73,-8,26}, -{73,-8,27}, -{73,-8,28}, -{73,-8,29}, -{73,-8,30}, -{73,-8,31}, -{73,-8,32}, -{73,-8,33}, -{73,-8,34}, -{73,-8,35}, -{73,-8,36}, -{73,-8,37}, -{73,-8,38}, -{73,-8,39}, -{73,-8,40}, -{73,-8,41}, -{73,-8,42}, -{73,-8,43}, -{73,-8,44}, -{73,-8,45}, -{73,-8,46}, -{73,-8,47}, -{73,-8,48}, -{73,-8,49}, -{73,-8,50}, -{73,-8,51}, -{73,-8,52}, -{73,-8,53}, -{73,-8,54}, -{73,-8,55}, -{73,-8,56}, -{73,-8,57}, -{73,-8,58}, -{73,-8,59}, -{73,-8,60}, -{73,-8,61}, -{73,-8,62}, -{73,-8,63}, -{73,-8,64}, -{73,-8,65}, -{73,-8,66}, -{73,-8,67}, -{73,-8,68}, -{73,-8,69}, -{73,-8,70}, -{73,-8,71}, -{73,-8,72}, -{73,-8,73}, -{73,-8,74}, -{73,-8,75}, -{73,-7,-41}, -{73,-7,-40}, -{73,-7,-39}, -{73,-7,-38}, -{73,-7,-37}, -{73,-7,-36}, -{73,-7,-35}, -{73,-7,-34}, -{73,-7,-33}, -{73,-7,-32}, -{73,-7,-31}, -{73,-7,-30}, -{73,-7,-29}, -{73,-7,-28}, -{73,-7,-27}, -{73,-7,-26}, -{73,-7,-25}, -{73,-7,-24}, -{73,-7,-23}, -{73,-7,-22}, -{73,-7,-21}, -{73,-7,-20}, -{73,-7,-19}, -{73,-7,-18}, -{73,-7,-17}, -{73,-7,-16}, -{73,-7,-15}, -{73,-7,-14}, -{73,-7,-13}, -{73,-7,-12}, -{73,-7,-11}, -{73,-7,-10}, -{73,-7,-9}, -{73,-7,-8}, -{73,-7,-7}, -{73,-7,-6}, -{73,-7,-5}, -{73,-7,-4}, -{73,-7,-3}, -{73,-7,-2}, -{73,-7,-1}, -{73,-7,0}, -{73,-7,1}, -{73,-7,2}, -{73,-7,3}, -{73,-7,4}, -{73,-7,5}, -{73,-7,6}, -{73,-7,7}, -{73,-7,8}, -{73,-7,9}, -{73,-7,10}, -{73,-7,11}, -{73,-7,12}, -{73,-7,13}, -{73,-7,14}, -{73,-7,15}, -{73,-7,16}, -{73,-7,17}, -{73,-7,18}, -{73,-7,19}, -{73,-7,20}, -{73,-7,21}, -{73,-7,22}, -{73,-7,23}, -{73,-7,24}, -{73,-7,25}, -{73,-7,26}, -{73,-7,27}, -{73,-7,28}, -{73,-7,29}, -{73,-7,30}, -{73,-7,31}, -{73,-7,32}, -{73,-7,33}, -{73,-7,34}, -{73,-7,35}, -{73,-7,36}, -{73,-7,37}, -{73,-7,38}, -{73,-7,39}, -{73,-7,40}, -{73,-7,41}, -{73,-7,42}, -{73,-7,43}, -{73,-7,44}, -{73,-7,45}, -{73,-7,46}, -{73,-7,47}, -{73,-7,48}, -{73,-7,49}, -{73,-7,50}, -{73,-7,51}, -{73,-7,52}, -{73,-7,53}, -{73,-7,54}, -{73,-7,55}, -{73,-7,56}, -{73,-7,57}, -{73,-7,58}, -{73,-7,59}, -{73,-7,60}, -{73,-7,61}, -{73,-7,62}, -{73,-7,63}, -{73,-7,64}, -{73,-7,65}, -{73,-7,66}, -{73,-7,67}, -{73,-7,68}, -{73,-7,69}, -{73,-7,70}, -{73,-7,71}, -{73,-7,72}, -{73,-7,73}, -{73,-7,74}, -{73,-7,75}, -{73,-6,-41}, -{73,-6,-40}, -{73,-6,-39}, -{73,-6,-38}, -{73,-6,-37}, -{73,-6,-36}, -{73,-6,-35}, -{73,-6,-34}, -{73,-6,-33}, -{73,-6,-32}, -{73,-6,-31}, -{73,-6,-30}, -{73,-6,-29}, -{73,-6,-28}, -{73,-6,-27}, -{73,-6,-26}, -{73,-6,-25}, -{73,-6,-24}, -{73,-6,-23}, -{73,-6,-22}, -{73,-6,-21}, -{73,-6,-20}, -{73,-6,-19}, -{73,-6,-18}, -{73,-6,-17}, -{73,-6,-16}, -{73,-6,-15}, -{73,-6,-14}, -{73,-6,-13}, -{73,-6,-12}, -{73,-6,-11}, -{73,-6,-10}, -{73,-6,-9}, -{73,-6,-8}, -{73,-6,-7}, -{73,-6,-6}, -{73,-6,-5}, -{73,-6,-4}, -{73,-6,-3}, -{73,-6,-2}, -{73,-6,-1}, -{73,-6,0}, -{73,-6,1}, -{73,-6,2}, -{73,-6,3}, -{73,-6,4}, -{73,-6,5}, -{73,-6,6}, -{73,-6,7}, -{73,-6,8}, -{73,-6,9}, -{73,-6,10}, -{73,-6,11}, -{73,-6,12}, -{73,-6,13}, -{73,-6,14}, -{73,-6,15}, -{73,-6,16}, -{73,-6,17}, -{73,-6,18}, -{73,-6,19}, -{73,-6,20}, -{73,-6,21}, -{73,-6,22}, -{73,-6,23}, -{73,-6,24}, -{73,-6,25}, -{73,-6,26}, -{73,-6,27}, -{73,-6,28}, -{73,-6,29}, -{73,-6,30}, -{73,-6,31}, -{73,-6,32}, -{73,-6,33}, -{73,-6,34}, -{73,-6,35}, -{73,-6,36}, -{73,-6,37}, -{73,-6,38}, -{73,-6,39}, -{73,-6,40}, -{73,-6,41}, -{73,-6,42}, -{73,-6,43}, -{73,-6,44}, -{73,-6,45}, -{73,-6,46}, -{73,-6,47}, -{73,-6,48}, -{73,-6,49}, -{73,-6,50}, -{73,-6,51}, -{73,-6,52}, -{73,-6,53}, -{73,-6,54}, -{73,-6,55}, -{73,-6,56}, -{73,-6,57}, -{73,-6,58}, -{73,-6,59}, -{73,-6,60}, -{73,-6,61}, -{73,-6,62}, -{73,-6,63}, -{73,-6,64}, -{73,-6,65}, -{73,-6,66}, -{73,-6,67}, -{73,-6,68}, -{73,-6,69}, -{73,-6,70}, -{73,-6,71}, -{73,-6,72}, -{73,-6,73}, -{73,-6,74}, -{73,-6,75}, -{73,-5,-41}, -{73,-5,-40}, -{73,-5,-39}, -{73,-5,-38}, -{73,-5,-37}, -{73,-5,-36}, -{73,-5,-35}, -{73,-5,-34}, -{73,-5,-33}, -{73,-5,-32}, -{73,-5,-31}, -{73,-5,-30}, -{73,-5,-29}, -{73,-5,-28}, -{73,-5,-27}, -{73,-5,-26}, -{73,-5,-25}, -{73,-5,-24}, -{73,-5,-23}, -{73,-5,-22}, -{73,-5,-21}, -{73,-5,-20}, -{73,-5,-19}, -{73,-5,-18}, -{73,-5,-17}, -{73,-5,-16}, -{73,-5,-15}, -{73,-5,-14}, -{73,-5,-13}, -{73,-5,-12}, -{73,-5,-11}, -{73,-5,-10}, -{73,-5,-9}, -{73,-5,-8}, -{73,-5,-7}, -{73,-5,-6}, -{73,-5,-5}, -{73,-5,-4}, -{73,-5,-3}, -{73,-5,-2}, -{73,-5,-1}, -{73,-5,0}, -{73,-5,1}, -{73,-5,2}, -{73,-5,3}, -{73,-5,4}, -{73,-5,5}, -{73,-5,6}, -{73,-5,7}, -{73,-5,8}, -{73,-5,9}, -{73,-5,10}, -{73,-5,11}, -{73,-5,12}, -{73,-5,13}, -{73,-5,14}, -{73,-5,15}, -{73,-5,16}, -{73,-5,17}, -{73,-5,18}, -{73,-5,19}, -{73,-5,20}, -{73,-5,21}, -{73,-5,22}, -{73,-5,23}, -{73,-5,24}, -{73,-5,25}, -{73,-5,26}, -{73,-5,27}, -{73,-5,28}, -{73,-5,29}, -{73,-5,30}, -{73,-5,31}, -{73,-5,32}, -{73,-5,33}, -{73,-5,34}, -{73,-5,35}, -{73,-5,36}, -{73,-5,37}, -{73,-5,38}, -{73,-5,39}, -{73,-5,40}, -{73,-5,41}, -{73,-5,42}, -{73,-5,43}, -{73,-5,44}, -{73,-5,45}, -{73,-5,46}, -{73,-5,47}, -{73,-5,48}, -{73,-5,49}, -{73,-5,50}, -{73,-5,51}, -{73,-5,52}, -{73,-5,53}, -{73,-5,54}, -{73,-5,55}, -{73,-5,56}, -{73,-5,57}, -{73,-5,58}, -{73,-5,59}, -{73,-5,60}, -{73,-5,61}, -{73,-5,62}, -{73,-5,63}, -{73,-5,64}, -{73,-5,65}, -{73,-5,66}, -{73,-5,67}, -{73,-5,68}, -{73,-5,69}, -{73,-5,70}, -{73,-5,71}, -{73,-5,72}, -{73,-5,73}, -{73,-5,74}, -{73,-5,75}, -{73,-4,-41}, -{73,-4,-40}, -{73,-4,-39}, -{73,-4,-38}, -{73,-4,-37}, -{73,-4,-36}, -{73,-4,-35}, -{73,-4,-34}, -{73,-4,-33}, -{73,-4,-32}, -{73,-4,-31}, -{73,-4,-30}, -{73,-4,-29}, -{73,-4,-28}, -{73,-4,-27}, -{73,-4,-26}, -{73,-4,-25}, -{73,-4,-24}, -{73,-4,-23}, -{73,-4,-22}, -{73,-4,-21}, -{73,-4,-20}, -{73,-4,-19}, -{73,-4,-18}, -{73,-4,-17}, -{73,-4,-16}, -{73,-4,-15}, -{73,-4,-14}, -{73,-4,-13}, -{73,-4,-12}, -{73,-4,-11}, -{73,-4,-10}, -{73,-4,-9}, -{73,-4,-8}, -{73,-4,-7}, -{73,-4,-6}, -{73,-4,-5}, -{73,-4,-4}, -{73,-4,-3}, -{73,-4,-2}, -{73,-4,-1}, -{73,-4,0}, -{73,-4,1}, -{73,-4,2}, -{73,-4,3}, -{73,-4,4}, -{73,-4,5}, -{73,-4,6}, -{73,-4,7}, -{73,-4,8}, -{73,-4,9}, -{73,-4,10}, -{73,-4,11}, -{73,-4,12}, -{73,-4,13}, -{73,-4,14}, -{73,-4,15}, -{73,-4,16}, -{73,-4,17}, -{73,-4,18}, -{73,-4,19}, -{73,-4,20}, -{73,-4,21}, -{73,-4,22}, -{73,-4,23}, -{73,-4,24}, -{73,-4,25}, -{73,-4,26}, -{73,-4,27}, -{73,-4,28}, -{73,-4,29}, -{73,-4,30}, -{73,-4,31}, -{73,-4,32}, -{73,-4,33}, -{73,-4,34}, -{73,-4,35}, -{73,-4,36}, -{73,-4,37}, -{73,-4,38}, -{73,-4,39}, -{73,-4,40}, -{73,-4,41}, -{73,-4,42}, -{73,-4,43}, -{73,-4,44}, -{73,-4,45}, -{73,-4,46}, -{73,-4,47}, -{73,-4,48}, -{73,-4,49}, -{73,-4,50}, -{73,-4,51}, -{73,-4,52}, -{73,-4,53}, -{73,-4,54}, -{73,-4,55}, -{73,-4,56}, -{73,-4,57}, -{73,-4,58}, -{73,-4,59}, -{73,-4,60}, -{73,-4,61}, -{73,-4,62}, -{73,-4,63}, -{73,-4,64}, -{73,-4,65}, -{73,-4,66}, -{73,-4,67}, -{73,-4,68}, -{73,-4,69}, -{73,-4,70}, -{73,-4,71}, -{73,-4,72}, -{73,-4,73}, -{73,-4,74}, -{73,-4,75}, -{73,-3,-41}, -{73,-3,-40}, -{73,-3,-39}, -{73,-3,-38}, -{73,-3,-37}, -{73,-3,-36}, -{73,-3,-35}, -{73,-3,-34}, -{73,-3,-33}, -{73,-3,-32}, -{73,-3,-31}, -{73,-3,-30}, -{73,-3,-29}, -{73,-3,-28}, -{73,-3,-27}, -{73,-3,-26}, -{73,-3,-25}, -{73,-3,-24}, -{73,-3,-23}, -{73,-3,-22}, -{73,-3,-21}, -{73,-3,-20}, -{73,-3,-19}, -{73,-3,-18}, -{73,-3,-17}, -{73,-3,-16}, -{73,-3,-15}, -{73,-3,-14}, -{73,-3,-13}, -{73,-3,-12}, -{73,-3,-11}, -{73,-3,-10}, -{73,-3,-9}, -{73,-3,-8}, -{73,-3,-7}, -{73,-3,-6}, -{73,-3,-5}, -{73,-3,-4}, -{73,-3,-3}, -{73,-3,-2}, -{73,-3,-1}, -{73,-3,0}, -{73,-3,1}, -{73,-3,2}, -{73,-3,3}, -{73,-3,4}, -{73,-3,5}, -{73,-3,6}, -{73,-3,7}, -{73,-3,8}, -{73,-3,9}, -{73,-3,10}, -{73,-3,11}, -{73,-3,12}, -{73,-3,13}, -{73,-3,14}, -{73,-3,15}, -{73,-3,16}, -{73,-3,17}, -{73,-3,18}, -{73,-3,19}, -{73,-3,20}, -{73,-3,21}, -{73,-3,22}, -{73,-3,23}, -{73,-3,24}, -{73,-3,25}, -{73,-3,26}, -{73,-3,27}, -{73,-3,28}, -{73,-3,29}, -{73,-3,30}, -{73,-3,31}, -{73,-3,32}, -{73,-3,33}, -{73,-3,34}, -{73,-3,35}, -{73,-3,36}, -{73,-3,37}, -{73,-3,38}, -{73,-3,39}, -{73,-3,40}, -{73,-3,41}, -{73,-3,42}, -{73,-3,43}, -{73,-3,44}, -{73,-3,45}, -{73,-3,46}, -{73,-3,47}, -{73,-3,48}, -{73,-3,49}, -{73,-3,50}, -{73,-3,51}, -{73,-3,52}, -{73,-3,53}, -{73,-3,54}, -{73,-3,55}, -{73,-3,56}, -{73,-3,57}, -{73,-3,58}, -{73,-3,59}, -{73,-3,60}, -{73,-3,61}, -{73,-3,62}, -{73,-3,63}, -{73,-3,64}, -{73,-3,65}, -{73,-3,66}, -{73,-3,67}, -{73,-3,68}, -{73,-3,69}, -{73,-3,70}, -{73,-3,71}, -{73,-3,72}, -{73,-3,73}, -{73,-3,74}, -{73,-3,75}, -{73,-2,-41}, -{73,-2,-40}, -{73,-2,-39}, -{73,-2,-38}, -{73,-2,-37}, -{73,-2,-36}, -{73,-2,-35}, -{73,-2,-34}, -{73,-2,-33}, -{73,-2,-32}, -{73,-2,-31}, -{73,-2,-30}, -{73,-2,-29}, -{73,-2,-28}, -{73,-2,-27}, -{73,-2,-26}, -{73,-2,-25}, -{73,-2,-24}, -{73,-2,-23}, -{73,-2,-22}, -{73,-2,-21}, -{73,-2,-20}, -{73,-2,-19}, -{73,-2,-18}, -{73,-2,-17}, -{73,-2,-16}, -{73,-2,-15}, -{73,-2,-14}, -{73,-2,-13}, -{73,-2,-12}, -{73,-2,-11}, -{73,-2,-10}, -{73,-2,-9}, -{73,-2,-8}, -{73,-2,-7}, -{73,-2,-6}, -{73,-2,-5}, -{73,-2,-4}, -{73,-2,-3}, -{73,-2,-2}, -{73,-2,-1}, -{73,-2,0}, -{73,-2,1}, -{73,-2,2}, -{73,-2,3}, -{73,-2,4}, -{73,-2,5}, -{73,-2,6}, -{73,-2,7}, -{73,-2,8}, -{73,-2,9}, -{73,-2,10}, -{73,-2,11}, -{73,-2,12}, -{73,-2,13}, -{73,-2,14}, -{73,-2,15}, -{73,-2,16}, -{73,-2,17}, -{73,-2,18}, -{73,-2,19}, -{73,-2,20}, -{73,-2,21}, -{73,-2,22}, -{73,-2,23}, -{73,-2,24}, -{73,-2,25}, -{73,-2,26}, -{73,-2,27}, -{73,-2,28}, -{73,-2,29}, -{73,-2,30}, -{73,-2,31}, -{73,-2,32}, -{73,-2,33}, -{73,-2,34}, -{73,-2,35}, -{73,-2,36}, -{73,-2,37}, -{73,-2,38}, -{73,-2,39}, -{73,-2,40}, -{73,-2,41}, -{73,-2,42}, -{73,-2,43}, -{73,-2,44}, -{73,-2,45}, -{73,-2,46}, -{73,-2,47}, -{73,-2,48}, -{73,-2,49}, -{73,-2,50}, -{73,-2,51}, -{73,-2,52}, -{73,-2,53}, -{73,-2,54}, -{73,-2,55}, -{73,-2,56}, -{73,-2,57}, -{73,-2,58}, -{73,-2,59}, -{73,-2,60}, -{73,-2,61}, -{73,-2,62}, -{73,-2,63}, -{73,-2,64}, -{73,-2,65}, -{73,-2,66}, -{73,-2,67}, -{73,-2,68}, -{73,-2,69}, -{73,-2,70}, -{73,-2,71}, -{73,-2,72}, -{73,-2,73}, -{73,-2,74}, -{73,-2,75}, -{73,-1,-41}, -{73,-1,-40}, -{73,-1,-39}, -{73,-1,-38}, -{73,-1,-37}, -{73,-1,-36}, -{73,-1,-35}, -{73,-1,-34}, -{73,-1,-33}, -{73,-1,-32}, -{73,-1,-31}, -{73,-1,-30}, -{73,-1,-29}, -{73,-1,-28}, -{73,-1,-27}, -{73,-1,-26}, -{73,-1,-25}, -{73,-1,-24}, -{73,-1,-23}, -{73,-1,-22}, -{73,-1,-21}, -{73,-1,-20}, -{73,-1,-19}, -{73,-1,-18}, -{73,-1,-17}, -{73,-1,-16}, -{73,-1,-15}, -{73,-1,-14}, -{73,-1,-13}, -{73,-1,-12}, -{73,-1,-11}, -{73,-1,-10}, -{73,-1,-9}, -{73,-1,-8}, -{73,-1,-7}, -{73,-1,-6}, -{73,-1,-5}, -{73,-1,-4}, -{73,-1,-3}, -{73,-1,-2}, -{73,-1,-1}, -{73,-1,0}, -{73,-1,1}, -{73,-1,2}, -{73,-1,3}, -{73,-1,4}, -{73,-1,5}, -{73,-1,6}, -{73,-1,7}, -{73,-1,8}, -{73,-1,9}, -{73,-1,10}, -{73,-1,11}, -{73,-1,12}, -{73,-1,13}, -{73,-1,14}, -{73,-1,15}, -{73,-1,16}, -{73,-1,17}, -{73,-1,18}, -{73,-1,19}, -{73,-1,20}, -{73,-1,21}, -{73,-1,22}, -{73,-1,23}, -{73,-1,24}, -{73,-1,25}, -{73,-1,26}, -{73,-1,27}, -{73,-1,28}, -{73,-1,29}, -{73,-1,30}, -{73,-1,31}, -{73,-1,32}, -{73,-1,33}, -{73,-1,34}, -{73,-1,35}, -{73,-1,36}, -{73,-1,37}, -{73,-1,38}, -{73,-1,39}, -{73,-1,40}, -{73,-1,41}, -{73,-1,42}, -{73,-1,43}, -{73,-1,44}, -{73,-1,45}, -{73,-1,46}, -{73,-1,47}, -{73,-1,48}, -{73,-1,49}, -{73,-1,50}, -{73,-1,51}, -{73,-1,52}, -{73,-1,53}, -{73,-1,54}, -{73,-1,55}, -{73,-1,56}, -{73,-1,57}, -{73,-1,58}, -{73,-1,59}, -{73,-1,60}, -{73,-1,61}, -{73,-1,62}, -{73,-1,63}, -{73,-1,64}, -{73,-1,65}, -{73,-1,66}, -{73,-1,67}, -{73,-1,68}, -{73,-1,69}, -{73,-1,70}, -{73,-1,71}, -{73,-1,72}, -{73,-1,73}, -{73,-1,74}, -{73,-1,75}, -{73,0,-41}, -{73,0,-40}, -{73,0,-39}, -{73,0,-38}, -{73,0,-37}, -{73,0,-36}, -{73,0,-35}, -{73,0,-34}, -{73,0,-33}, -{73,0,-32}, -{73,0,-31}, -{73,0,-30}, -{73,0,-29}, -{73,0,-28}, -{73,0,-27}, -{73,0,-26}, -{73,0,-25}, -{73,0,-24}, -{73,0,-23}, -{73,0,-22}, -{73,0,-21}, -{73,0,-20}, -{73,0,-19}, -{73,0,-18}, -{73,0,-17}, -{73,0,-16}, -{73,0,-15}, -{73,0,-14}, -{73,0,-13}, -{73,0,-12}, -{73,0,-11}, -{73,0,-10}, -{73,0,-9}, -{73,0,-8}, -{73,0,-7}, -{73,0,-6}, -{73,0,-5}, -{73,0,-4}, -{73,0,-3}, -{73,0,-2}, -{73,0,-1}, -{73,0,0}, -{73,0,1}, -{73,0,2}, -{73,0,3}, -{73,0,4}, -{73,0,5}, -{73,0,6}, -{73,0,7}, -{73,0,8}, -{73,0,9}, -{73,0,10}, -{73,0,11}, -{73,0,12}, -{73,0,13}, -{73,0,14}, -{73,0,15}, -{73,0,16}, -{73,0,17}, -{73,0,18}, -{73,0,19}, -{73,0,20}, -{73,0,21}, -{73,0,22}, -{73,0,23}, -{73,0,24}, -{73,0,25}, -{73,0,26}, -{73,0,27}, -{73,0,28}, -{73,0,29}, -{73,0,30}, -{73,0,31}, -{73,0,32}, -{73,0,33}, -{73,0,34}, -{73,0,35}, -{73,0,36}, -{73,0,37}, -{73,0,38}, -{73,0,39}, -{73,0,40}, -{73,0,41}, -{73,0,42}, -{73,0,43}, -{73,0,44}, -{73,0,45}, -{73,0,46}, -{73,0,47}, -{73,0,48}, -{73,0,49}, -{73,0,50}, -{73,0,51}, -{73,0,52}, -{73,0,53}, -{73,0,54}, -{73,0,55}, -{73,0,56}, -{73,0,57}, -{73,0,58}, -{73,0,59}, -{73,0,60}, -{73,0,61}, -{73,0,62}, -{73,0,63}, -{73,0,64}, -{73,0,65}, -{73,0,66}, -{73,0,67}, -{73,0,68}, -{73,0,69}, -{73,0,70}, -{73,0,71}, -{73,0,72}, -{73,0,73}, -{73,0,74}, -{73,0,75}, -{73,1,-41}, -{73,1,-40}, -{73,1,-39}, -{73,1,-38}, -{73,1,-37}, -{73,1,-36}, -{73,1,-35}, -{73,1,-34}, -{73,1,-33}, -{73,1,-32}, -{73,1,-31}, -{73,1,-30}, -{73,1,-29}, -{73,1,-28}, -{73,1,-27}, -{73,1,-26}, -{73,1,-25}, -{73,1,-24}, -{73,1,-23}, -{73,1,-22}, -{73,1,-21}, -{73,1,-20}, -{73,1,-19}, -{73,1,-18}, -{73,1,-17}, -{73,1,-16}, -{73,1,-15}, -{73,1,-14}, -{73,1,-13}, -{73,1,-12}, -{73,1,-11}, -{73,1,-10}, -{73,1,-9}, -{73,1,-8}, -{73,1,-7}, -{73,1,-6}, -{73,1,-5}, -{73,1,-4}, -{73,1,-3}, -{73,1,-2}, -{73,1,-1}, -{73,1,0}, -{73,1,1}, -{73,1,2}, -{73,1,3}, -{73,1,4}, -{73,1,5}, -{73,1,6}, -{73,1,7}, -{73,1,8}, -{73,1,9}, -{73,1,10}, -{73,1,11}, -{73,1,12}, -{73,1,13}, -{73,1,14}, -{73,1,15}, -{73,1,16}, -{73,1,17}, -{73,1,18}, -{73,1,19}, -{73,1,20}, -{73,1,21}, -{73,1,22}, -{73,1,23}, -{73,1,24}, -{73,1,25}, -{73,1,26}, -{73,1,27}, -{73,1,28}, -{73,1,29}, -{73,1,30}, -{73,1,31}, -{73,1,32}, -{73,1,33}, -{73,1,34}, -{73,1,35}, -{73,1,36}, -{73,1,37}, -{73,1,38}, -{73,1,39}, -{73,1,40}, -{73,1,41}, -{73,1,42}, -{73,1,43}, -{73,1,44}, -{73,1,45}, -{73,1,46}, -{73,1,47}, -{73,1,48}, -{73,1,49}, -{73,1,50}, -{73,1,51}, -{73,1,52}, -{73,1,53}, -{73,1,54}, -{73,1,55}, -{73,1,56}, -{73,1,57}, -{73,1,58}, -{73,1,59}, -{73,1,60}, -{73,1,61}, -{73,1,62}, -{73,1,63}, -{73,1,64}, -{73,1,65}, -{73,1,66}, -{73,1,67}, -{73,1,68}, -{73,1,69}, -{73,1,70}, -{73,1,71}, -{73,1,72}, -{73,1,73}, -{73,1,74}, -{73,1,75}, -{73,2,-41}, -{73,2,-40}, -{73,2,-39}, -{73,2,-38}, -{73,2,-37}, -{73,2,-36}, -{73,2,-35}, -{73,2,-34}, -{73,2,-33}, -{73,2,-32}, -{73,2,-31}, -{73,2,-30}, -{73,2,-29}, -{73,2,-28}, -{73,2,-27}, -{73,2,-26}, -{73,2,-25}, -{73,2,-24}, -{73,2,-23}, -{73,2,-22}, -{73,2,-21}, -{73,2,-20}, -{73,2,-19}, -{73,2,-18}, -{73,2,-17}, -{73,2,-16}, -{73,2,-15}, -{73,2,-14}, -{73,2,-13}, -{73,2,-12}, -{73,2,-11}, -{73,2,-10}, -{73,2,-9}, -{73,2,-8}, -{73,2,-7}, -{73,2,-6}, -{73,2,-5}, -{73,2,-4}, -{73,2,-3}, -{73,2,-2}, -{73,2,-1}, -{73,2,0}, -{73,2,1}, -{73,2,2}, -{73,2,3}, -{73,2,4}, -{73,2,5}, -{73,2,6}, -{73,2,7}, -{73,2,8}, -{73,2,9}, -{73,2,10}, -{73,2,11}, -{73,2,12}, -{73,2,13}, -{73,2,14}, -{73,2,15}, -{73,2,16}, -{73,2,17}, -{73,2,18}, -{73,2,19}, -{73,2,20}, -{73,2,21}, -{73,2,22}, -{73,2,23}, -{73,2,24}, -{73,2,25}, -{73,2,26}, -{73,2,27}, -{73,2,28}, -{73,2,29}, -{73,2,30}, -{73,2,31}, -{73,2,32}, -{73,2,33}, -{73,2,34}, -{73,2,35}, -{73,2,36}, -{73,2,37}, -{73,2,38}, -{73,2,39}, -{73,2,40}, -{73,2,41}, -{73,2,42}, -{73,2,43}, -{73,2,44}, -{73,2,45}, -{73,2,46}, -{73,2,47}, -{73,2,48}, -{73,2,49}, -{73,2,50}, -{73,2,51}, -{73,2,52}, -{73,2,53}, -{73,2,54}, -{73,2,55}, -{73,2,56}, -{73,2,57}, -{73,2,58}, -{73,2,59}, -{73,2,60}, -{73,2,61}, -{73,2,62}, -{73,2,63}, -{73,2,64}, -{73,2,65}, -{73,2,66}, -{73,2,67}, -{73,2,68}, -{73,2,69}, -{73,2,70}, -{73,2,71}, -{73,2,72}, -{73,2,73}, -{73,2,74}, -{73,2,75}, -{73,3,-41}, -{73,3,-40}, -{73,3,-39}, -{73,3,-38}, -{73,3,-37}, -{73,3,-36}, -{73,3,-35}, -{73,3,-34}, -{73,3,-33}, -{73,3,-32}, -{73,3,-31}, -{73,3,-30}, -{73,3,-29}, -{73,3,-28}, -{73,3,-27}, -{73,3,-26}, -{73,3,-25}, -{73,3,-24}, -{73,3,-23}, -{73,3,-22}, -{73,3,-21}, -{73,3,-20}, -{73,3,-19}, -{73,3,-18}, -{73,3,-17}, -{73,3,-16}, -{73,3,-15}, -{73,3,-14}, -{73,3,-13}, -{73,3,-12}, -{73,3,-11}, -{73,3,-10}, -{73,3,-9}, -{73,3,-8}, -{73,3,-7}, -{73,3,-6}, -{73,3,-5}, -{73,3,-4}, -{73,3,-3}, -{73,3,-2}, -{73,3,-1}, -{73,3,0}, -{73,3,1}, -{73,3,2}, -{73,3,3}, -{73,3,4}, -{73,3,5}, -{73,3,6}, -{73,3,7}, -{73,3,8}, -{73,3,9}, -{73,3,10}, -{73,3,11}, -{73,3,12}, -{73,3,13}, -{73,3,14}, -{73,3,15}, -{73,3,16}, -{73,3,17}, -{73,3,18}, -{73,3,19}, -{73,3,20}, -{73,3,21}, -{73,3,22}, -{73,3,23}, -{73,3,24}, -{73,3,25}, -{73,3,26}, -{73,3,27}, -{73,3,28}, -{73,3,29}, -{73,3,30}, -{73,3,31}, -{73,3,32}, -{73,3,33}, -{73,3,34}, -{73,3,35}, -{73,3,36}, -{73,3,37}, -{73,3,38}, -{73,3,39}, -{73,3,40}, -{73,3,41}, -{73,3,42}, -{73,3,43}, -{73,3,44}, -{73,3,45}, -{73,3,46}, -{73,3,47}, -{73,3,48}, -{73,3,49}, -{73,3,50}, -{73,3,51}, -{73,3,52}, -{73,3,53}, -{73,3,54}, -{73,3,55}, -{73,3,56}, -{73,3,57}, -{73,3,58}, -{73,3,59}, -{73,3,60}, -{73,3,61}, -{73,3,62}, -{73,3,63}, -{73,3,64}, -{73,3,65}, -{73,3,66}, -{73,3,67}, -{73,3,68}, -{73,3,69}, -{73,3,70}, -{73,3,71}, -{73,3,72}, -{73,3,73}, -{73,3,74}, -{73,3,75}, -{73,4,-41}, -{73,4,-40}, -{73,4,-39}, -{73,4,-38}, -{73,4,-37}, -{73,4,-36}, -{73,4,-35}, -{73,4,-34}, -{73,4,-33}, -{73,4,-32}, -{73,4,-31}, -{73,4,-30}, -{73,4,-29}, -{73,4,-28}, -{73,4,-27}, -{73,4,-26}, -{73,4,-25}, -{73,4,-24}, -{73,4,-23}, -{73,4,-22}, -{73,4,-21}, -{73,4,-20}, -{73,4,-19}, -{73,4,-18}, -{73,4,-17}, -{73,4,-16}, -{73,4,-15}, -{73,4,-14}, -{73,4,-13}, -{73,4,-12}, -{73,4,-11}, -{73,4,-10}, -{73,4,-9}, -{73,4,-8}, -{73,4,-7}, -{73,4,-6}, -{73,4,-5}, -{73,4,-4}, -{73,4,-3}, -{73,4,-2}, -{73,4,-1}, -{73,4,0}, -{73,4,1}, -{73,4,2}, -{73,4,3}, -{73,4,4}, -{73,4,5}, -{73,4,6}, -{73,4,7}, -{73,4,8}, -{73,4,9}, -{73,4,10}, -{73,4,11}, -{73,4,12}, -{73,4,13}, -{73,4,14}, -{73,4,15}, -{73,4,16}, -{73,4,17}, -{73,4,18}, -{73,4,19}, -{73,4,20}, -{73,4,21}, -{73,4,22}, -{73,4,23}, -{73,4,24}, -{73,4,25}, -{73,4,26}, -{73,4,27}, -{73,4,28}, -{73,4,29}, -{73,4,30}, -{73,4,31}, -{73,4,32}, -{73,4,33}, -{73,4,34}, -{73,4,35}, -{73,4,36}, -{73,4,37}, -{73,4,38}, -{73,4,39}, -{73,4,40}, -{73,4,41}, -{73,4,42}, -{73,4,43}, -{73,4,44}, -{73,4,45}, -{73,4,46}, -{73,4,47}, -{73,4,48}, -{73,4,49}, -{73,4,50}, -{73,4,51}, -{73,4,52}, -{73,4,53}, -{73,4,54}, -{73,4,55}, -{73,4,56}, -{73,4,57}, -{73,4,58}, -{73,4,59}, -{73,4,60}, -{73,4,61}, -{73,4,62}, -{73,4,63}, -{73,4,64}, -{73,4,65}, -{73,4,66}, -{73,4,67}, -{73,4,68}, -{73,4,69}, -{73,4,70}, -{73,4,71}, -{73,4,72}, -{73,4,73}, -{73,4,74}, -{73,4,75}, -{73,5,-41}, -{73,5,-40}, -{73,5,-39}, -{73,5,-38}, -{73,5,-37}, -{73,5,-36}, -{73,5,-35}, -{73,5,-34}, -{73,5,-33}, -{73,5,-32}, -{73,5,-31}, -{73,5,-30}, -{73,5,-29}, -{73,5,-28}, -{73,5,-27}, -{73,5,-26}, -{73,5,-25}, -{73,5,-24}, -{73,5,-23}, -{73,5,-22}, -{73,5,-21}, -{73,5,-20}, -{73,5,-19}, -{73,5,-18}, -{73,5,-17}, -{73,5,-16}, -{73,5,-15}, -{73,5,-14}, -{73,5,-13}, -{73,5,-12}, -{73,5,-11}, -{73,5,-10}, -{73,5,-9}, -{73,5,-8}, -{73,5,-7}, -{73,5,-6}, -{73,5,-5}, -{73,5,-4}, -{73,5,-3}, -{73,5,-2}, -{73,5,-1}, -{73,5,0}, -{73,5,1}, -{73,5,2}, -{73,5,3}, -{73,5,4}, -{73,5,5}, -{73,5,6}, -{73,5,7}, -{73,5,8}, -{73,5,9}, -{73,5,10}, -{73,5,11}, -{73,5,12}, -{73,5,13}, -{73,5,14}, -{73,5,15}, -{73,5,16}, -{73,5,17}, -{73,5,18}, -{73,5,19}, -{73,5,20}, -{73,5,21}, -{73,5,22}, -{73,5,23}, -{73,5,24}, -{73,5,25}, -{73,5,26}, -{73,5,27}, -{73,5,28}, -{73,5,29}, -{73,5,30}, -{73,5,31}, -{73,5,32}, -{73,5,33}, -{73,5,34}, -{73,5,35}, -{73,5,36}, -{73,5,37}, -{73,5,38}, -{73,5,39}, -{73,5,40}, -{73,5,41}, -{73,5,42}, -{73,5,43}, -{73,5,44}, -{73,5,45}, -{73,5,46}, -{73,5,47}, -{73,5,48}, -{73,5,49}, -{73,5,50}, -{73,5,51}, -{73,5,52}, -{73,5,53}, -{73,5,54}, -{73,5,55}, -{73,5,56}, -{73,5,57}, -{73,5,58}, -{73,5,59}, -{73,5,60}, -{73,5,61}, -{73,5,62}, -{73,5,63}, -{73,5,64}, -{73,5,65}, -{73,5,66}, -{73,5,67}, -{73,5,68}, -{73,5,69}, -{73,5,70}, -{73,5,71}, -{73,5,72}, -{73,5,73}, -{73,5,74}, -{73,5,75}, -{73,5,76}, -{73,6,-41}, -{73,6,-40}, -{73,6,-39}, -{73,6,-38}, -{73,6,-37}, -{73,6,-36}, -{73,6,-35}, -{73,6,-34}, -{73,6,-33}, -{73,6,-32}, -{73,6,-31}, -{73,6,-30}, -{73,6,-29}, -{73,6,-28}, -{73,6,-27}, -{73,6,-26}, -{73,6,-25}, -{73,6,-24}, -{73,6,-23}, -{73,6,-22}, -{73,6,-21}, -{73,6,-20}, -{73,6,-19}, -{73,6,-18}, -{73,6,-17}, -{73,6,-16}, -{73,6,-15}, -{73,6,-14}, -{73,6,-13}, -{73,6,-12}, -{73,6,-11}, -{73,6,-10}, -{73,6,-9}, -{73,6,-8}, -{73,6,-7}, -{73,6,-6}, -{73,6,-5}, -{73,6,-4}, -{73,6,-3}, -{73,6,-2}, -{73,6,-1}, -{73,6,0}, -{73,6,1}, -{73,6,2}, -{73,6,3}, -{73,6,4}, -{73,6,5}, -{73,6,6}, -{73,6,7}, -{73,6,8}, -{73,6,9}, -{73,6,10}, -{73,6,11}, -{73,6,12}, -{73,6,13}, -{73,6,14}, -{73,6,15}, -{73,6,16}, -{73,6,17}, -{73,6,18}, -{73,6,19}, -{73,6,20}, -{73,6,21}, -{73,6,22}, -{73,6,23}, -{73,6,24}, -{73,6,25}, -{73,6,26}, -{73,6,27}, -{73,6,28}, -{73,6,29}, -{73,6,30}, -{73,6,31}, -{73,6,32}, -{73,6,33}, -{73,6,34}, -{73,6,35}, -{73,6,36}, -{73,6,37}, -{73,6,38}, -{73,6,39}, -{73,6,40}, -{73,6,41}, -{73,6,42}, -{73,6,43}, -{73,6,44}, -{73,6,45}, -{73,6,46}, -{73,6,47}, -{73,6,48}, -{73,6,49}, -{73,6,50}, -{73,6,51}, -{73,6,52}, -{73,6,53}, -{73,6,54}, -{73,6,55}, -{73,6,56}, -{73,6,57}, -{73,6,58}, -{73,6,59}, -{73,6,60}, -{73,6,61}, -{73,6,62}, -{73,6,63}, -{73,6,64}, -{73,6,65}, -{73,6,66}, -{73,6,67}, -{73,6,68}, -{73,6,69}, -{73,6,70}, -{73,6,71}, -{73,6,72}, -{73,6,73}, -{73,6,74}, -{73,6,75}, -{73,6,76}, -{73,7,-41}, -{73,7,-40}, -{73,7,-39}, -{73,7,-38}, -{73,7,-37}, -{73,7,-36}, -{73,7,-35}, -{73,7,-34}, -{73,7,-33}, -{73,7,-32}, -{73,7,-31}, -{73,7,-30}, -{73,7,-29}, -{73,7,-28}, -{73,7,-27}, -{73,7,-26}, -{73,7,-25}, -{73,7,-24}, -{73,7,-23}, -{73,7,-22}, -{73,7,-21}, -{73,7,-20}, -{73,7,-19}, -{73,7,-18}, -{73,7,-17}, -{73,7,-16}, -{73,7,-15}, -{73,7,-14}, -{73,7,-13}, -{73,7,-12}, -{73,7,-11}, -{73,7,-10}, -{73,7,-9}, -{73,7,-8}, -{73,7,-7}, -{73,7,-6}, -{73,7,-5}, -{73,7,-4}, -{73,7,-3}, -{73,7,-2}, -{73,7,-1}, -{73,7,0}, -{73,7,1}, -{73,7,2}, -{73,7,3}, -{73,7,4}, -{73,7,5}, -{73,7,6}, -{73,7,7}, -{73,7,8}, -{73,7,9}, -{73,7,10}, -{73,7,11}, -{73,7,12}, -{73,7,13}, -{73,7,14}, -{73,7,15}, -{73,7,16}, -{73,7,17}, -{73,7,18}, -{73,7,19}, -{73,7,20}, -{73,7,21}, -{73,7,22}, -{73,7,23}, -{73,7,24}, -{73,7,25}, -{73,7,26}, -{73,7,27}, -{73,7,28}, -{73,7,29}, -{73,7,30}, -{73,7,31}, -{73,7,32}, -{73,7,33}, -{73,7,34}, -{73,7,35}, -{73,7,36}, -{73,7,37}, -{73,7,38}, -{73,7,39}, -{73,7,40}, -{73,7,41}, -{73,7,42}, -{73,7,43}, -{73,7,44}, -{73,7,45}, -{73,7,46}, -{73,7,47}, -{73,7,48}, -{73,7,49}, -{73,7,50}, -{73,7,51}, -{73,7,52}, -{73,7,53}, -{73,7,54}, -{73,7,55}, -{73,7,56}, -{73,7,57}, -{73,7,58}, -{73,7,59}, -{73,7,60}, -{73,7,61}, -{73,7,62}, -{73,7,63}, -{73,7,64}, -{73,7,65}, -{73,7,66}, -{73,7,67}, -{73,7,68}, -{73,7,69}, -{73,7,70}, -{73,7,71}, -{73,7,72}, -{73,7,73}, -{73,7,74}, -{73,7,75}, -{73,7,76}, -{73,8,-41}, -{73,8,-40}, -{73,8,-39}, -{73,8,-38}, -{73,8,-37}, -{73,8,-36}, -{73,8,-35}, -{73,8,-34}, -{73,8,-33}, -{73,8,-32}, -{73,8,-31}, -{73,8,-30}, -{73,8,-29}, -{73,8,-28}, -{73,8,-27}, -{73,8,-26}, -{73,8,-25}, -{73,8,-24}, -{73,8,-23}, -{73,8,-22}, -{73,8,-21}, -{73,8,-20}, -{73,8,-19}, -{73,8,-18}, -{73,8,-17}, -{73,8,-16}, -{73,8,-15}, -{73,8,-14}, -{73,8,-13}, -{73,8,-12}, -{73,8,-11}, -{73,8,-10}, -{73,8,-9}, -{73,8,-8}, -{73,8,-7}, -{73,8,-6}, -{73,8,-5}, -{73,8,-4}, -{73,8,-3}, -{73,8,-2}, -{73,8,-1}, -{73,8,0}, -{73,8,1}, -{73,8,2}, -{73,8,3}, -{73,8,4}, -{73,8,5}, -{73,8,6}, -{73,8,7}, -{73,8,8}, -{73,8,9}, -{73,8,10}, -{73,8,11}, -{73,8,12}, -{73,8,13}, -{73,8,14}, -{73,8,15}, -{73,8,16}, -{73,8,17}, -{73,8,18}, -{73,8,19}, -{73,8,20}, -{73,8,21}, -{73,8,22}, -{73,8,23}, -{73,8,24}, -{73,8,25}, -{73,8,26}, -{73,8,27}, -{73,8,28}, -{73,8,29}, -{73,8,30}, -{73,8,31}, -{73,8,32}, -{73,8,33}, -{73,8,34}, -{73,8,35}, -{73,8,36}, -{73,8,37}, -{73,8,38}, -{73,8,39}, -{73,8,40}, -{73,8,41}, -{73,8,42}, -{73,8,43}, -{73,8,44}, -{73,8,45}, -{73,8,46}, -{73,8,47}, -{73,8,48}, -{73,8,49}, -{73,8,50}, -{73,8,51}, -{73,8,52}, -{73,8,53}, -{73,8,54}, -{73,8,55}, -{73,8,56}, -{73,8,57}, -{73,8,58}, -{73,8,59}, -{73,8,60}, -{73,8,61}, -{73,8,62}, -{73,8,63}, -{73,8,64}, -{73,8,65}, -{73,8,66}, -{73,8,67}, -{73,8,68}, -{73,8,69}, -{73,8,70}, -{73,8,71}, -{73,8,72}, -{73,8,73}, -{73,8,74}, -{73,8,75}, -{73,8,76}, -{73,9,-41}, -{73,9,-40}, -{73,9,-39}, -{73,9,-38}, -{73,9,-37}, -{73,9,-36}, -{73,9,-35}, -{73,9,-34}, -{73,9,-33}, -{73,9,-32}, -{73,9,-31}, -{73,9,-30}, -{73,9,-29}, -{73,9,-28}, -{73,9,-27}, -{73,9,-26}, -{73,9,-25}, -{73,9,-24}, -{73,9,-23}, -{73,9,-22}, -{73,9,-21}, -{73,9,-20}, -{73,9,-19}, -{73,9,-18}, -{73,9,-17}, -{73,9,-16}, -{73,9,-15}, -{73,9,-14}, -{73,9,-13}, -{73,9,-12}, -{73,9,-11}, -{73,9,-10}, -{73,9,-9}, -{73,9,-8}, -{73,9,-7}, -{73,9,-6}, -{73,9,-5}, -{73,9,-4}, -{73,9,-3}, -{73,9,-2}, -{73,9,-1}, -{73,9,0}, -{73,9,1}, -{73,9,2}, -{73,9,3}, -{73,9,4}, -{73,9,5}, -{73,9,6}, -{73,9,7}, -{73,9,8}, -{73,9,9}, -{73,9,10}, -{73,9,11}, -{73,9,12}, -{73,9,13}, -{73,9,14}, -{73,9,15}, -{73,9,16}, -{73,9,17}, -{73,9,18}, -{73,9,19}, -{73,9,20}, -{73,9,21}, -{73,9,22}, -{73,9,23}, -{73,9,24}, -{73,9,25}, -{73,9,26}, -{73,9,27}, -{73,9,28}, -{73,9,29}, -{73,9,30}, -{73,9,31}, -{73,9,32}, -{73,9,33}, -{73,9,34}, -{73,9,35}, -{73,9,36}, -{73,9,37}, -{73,9,38}, -{73,9,39}, -{73,9,40}, -{73,9,41}, -{73,9,42}, -{73,9,43}, -{73,9,44}, -{73,9,45}, -{73,9,46}, -{73,9,47}, -{73,9,48}, -{73,9,49}, -{73,9,50}, -{73,9,51}, -{73,9,52}, -{73,9,53}, -{73,9,54}, -{73,9,55}, -{73,9,56}, -{73,9,57}, -{73,9,58}, -{73,9,59}, -{73,9,60}, -{73,9,61}, -{73,9,62}, -{73,9,63}, -{73,9,64}, -{73,9,65}, -{73,9,66}, -{73,9,67}, -{73,9,68}, -{73,9,69}, -{73,9,70}, -{73,9,71}, -{73,9,72}, -{73,9,73}, -{73,9,74}, -{73,9,75}, -{73,9,76}, -{73,10,-41}, -{73,10,-40}, -{73,10,-39}, -{73,10,-38}, -{73,10,-37}, -{73,10,-36}, -{73,10,-35}, -{73,10,-34}, -{73,10,-33}, -{73,10,-32}, -{73,10,-31}, -{73,10,-30}, -{73,10,-29}, -{73,10,-28}, -{73,10,-27}, -{73,10,-26}, -{73,10,-25}, -{73,10,-24}, -{73,10,-23}, -{73,10,-22}, -{73,10,-21}, -{73,10,-20}, -{73,10,-19}, -{73,10,-18}, -{73,10,-17}, -{73,10,-16}, -{73,10,-15}, -{73,10,-14}, -{73,10,-13}, -{73,10,-12}, -{73,10,-11}, -{73,10,-10}, -{73,10,-9}, -{73,10,-8}, -{73,10,-7}, -{73,10,-6}, -{73,10,-5}, -{73,10,-4}, -{73,10,-3}, -{73,10,-2}, -{73,10,-1}, -{73,10,0}, -{73,10,1}, -{73,10,2}, -{73,10,3}, -{73,10,4}, -{73,10,5}, -{73,10,6}, -{73,10,7}, -{73,10,8}, -{73,10,9}, -{73,10,10}, -{73,10,11}, -{73,10,12}, -{73,10,13}, -{73,10,14}, -{73,10,15}, -{73,10,16}, -{73,10,17}, -{73,10,18}, -{73,10,19}, -{73,10,20}, -{73,10,21}, -{73,10,22}, -{73,10,23}, -{73,10,24}, -{73,10,25}, -{73,10,26}, -{73,10,27}, -{73,10,28}, -{73,10,29}, -{73,10,30}, -{73,10,31}, -{73,10,32}, -{73,10,33}, -{73,10,34}, -{73,10,35}, -{73,10,36}, -{73,10,37}, -{73,10,38}, -{73,10,39}, -{73,10,40}, -{73,10,41}, -{73,10,42}, -{73,10,43}, -{73,10,44}, -{73,10,45}, -{73,10,46}, -{73,10,47}, -{73,10,48}, -{73,10,49}, -{73,10,50}, -{73,10,51}, -{73,10,52}, -{73,10,53}, -{73,10,54}, -{73,10,55}, -{73,10,56}, -{73,10,57}, -{73,10,58}, -{73,10,59}, -{73,10,60}, -{73,10,61}, -{73,10,62}, -{73,10,63}, -{73,10,64}, -{73,10,65}, -{73,10,66}, -{73,10,67}, -{73,10,68}, -{73,10,69}, -{73,10,70}, -{73,10,71}, -{73,10,72}, -{73,10,73}, -{73,10,74}, -{73,10,75}, -{73,10,76}, -{73,11,-41}, -{73,11,-40}, -{73,11,-39}, -{73,11,-38}, -{73,11,-37}, -{73,11,-36}, -{73,11,-35}, -{73,11,-34}, -{73,11,-33}, -{73,11,-32}, -{73,11,-31}, -{73,11,-30}, -{73,11,-29}, -{73,11,-28}, -{73,11,-27}, -{73,11,-26}, -{73,11,-25}, -{73,11,-24}, -{73,11,-23}, -{73,11,-22}, -{73,11,-21}, -{73,11,-20}, -{73,11,-19}, -{73,11,-18}, -{73,11,-17}, -{73,11,-16}, -{73,11,-15}, -{73,11,-14}, -{73,11,-13}, -{73,11,-12}, -{73,11,-11}, -{73,11,-10}, -{73,11,-9}, -{73,11,-8}, -{73,11,-7}, -{73,11,-6}, -{73,11,-5}, -{73,11,-4}, -{73,11,-3}, -{73,11,-2}, -{73,11,-1}, -{73,11,0}, -{73,11,1}, -{73,11,2}, -{73,11,3}, -{73,11,4}, -{73,11,5}, -{73,11,6}, -{73,11,7}, -{73,11,8}, -{73,11,9}, -{73,11,10}, -{73,11,11}, -{73,11,12}, -{73,11,13}, -{73,11,14}, -{73,11,15}, -{73,11,16}, -{73,11,17}, -{73,11,18}, -{73,11,19}, -{73,11,20}, -{73,11,21}, -{73,11,22}, -{73,11,23}, -{73,11,24}, -{73,11,25}, -{73,11,26}, -{73,11,27}, -{73,11,28}, -{73,11,29}, -{73,11,30}, -{73,11,31}, -{73,11,32}, -{73,11,33}, -{73,11,34}, -{73,11,35}, -{73,11,36}, -{73,11,37}, -{73,11,38}, -{73,11,39}, -{73,11,40}, -{73,11,41}, -{73,11,42}, -{73,11,43}, -{73,11,44}, -{73,11,45}, -{73,11,46}, -{73,11,47}, -{73,11,48}, -{73,11,49}, -{73,11,50}, -{73,11,51}, -{73,11,52}, -{73,11,53}, -{73,11,54}, -{73,11,55}, -{73,11,56}, -{73,11,57}, -{73,11,58}, -{73,11,59}, -{73,11,60}, -{73,11,61}, -{73,11,62}, -{73,11,63}, -{73,11,64}, -{73,11,65}, -{73,11,66}, -{73,11,67}, -{73,11,68}, -{73,11,69}, -{73,11,70}, -{73,11,71}, -{73,11,72}, -{73,11,73}, -{73,11,74}, -{73,11,75}, -{73,11,76}, -{73,12,-41}, -{73,12,-40}, -{73,12,-39}, -{73,12,-38}, -{73,12,-37}, -{73,12,-36}, -{73,12,-35}, -{73,12,-34}, -{73,12,-33}, -{73,12,-32}, -{73,12,-31}, -{73,12,-30}, -{73,12,-29}, -{73,12,-28}, -{73,12,-27}, -{73,12,-26}, -{73,12,-25}, -{73,12,-24}, -{73,12,-23}, -{73,12,-22}, -{73,12,-21}, -{73,12,-20}, -{73,12,-19}, -{73,12,-18}, -{73,12,-17}, -{73,12,-16}, -{73,12,-15}, -{73,12,-14}, -{73,12,-13}, -{73,12,-12}, -{73,12,-11}, -{73,12,-10}, -{73,12,-9}, -{73,12,-8}, -{73,12,-7}, -{73,12,-6}, -{73,12,-5}, -{73,12,-4}, -{73,12,-3}, -{73,12,-2}, -{73,12,-1}, -{73,12,0}, -{73,12,1}, -{73,12,2}, -{73,12,3}, -{73,12,4}, -{73,12,5}, -{73,12,6}, -{73,12,7}, -{73,12,8}, -{73,12,9}, -{73,12,10}, -{73,12,11}, -{73,12,12}, -{73,12,13}, -{73,12,14}, -{73,12,15}, -{73,12,16}, -{73,12,17}, -{73,12,18}, -{73,12,19}, -{73,12,20}, -{73,12,21}, -{73,12,22}, -{73,12,23}, -{73,12,24}, -{73,12,25}, -{73,12,26}, -{73,12,27}, -{73,12,28}, -{73,12,29}, -{73,12,30}, -{73,12,31}, -{73,12,32}, -{73,12,33}, -{73,12,34}, -{73,12,35}, -{73,12,36}, -{73,12,37}, -{73,12,38}, -{73,12,39}, -{73,12,40}, -{73,12,41}, -{73,12,42}, -{73,12,43}, -{73,12,44}, -{73,12,45}, -{73,12,46}, -{73,12,47}, -{73,12,48}, -{73,12,49}, -{73,12,50}, -{73,12,51}, -{73,12,52}, -{73,12,53}, -{73,12,54}, -{73,12,55}, -{73,12,56}, -{73,12,57}, -{73,12,58}, -{73,12,59}, -{73,12,60}, -{73,12,61}, -{73,12,62}, -{73,12,63}, -{73,12,64}, -{73,12,65}, -{73,12,66}, -{73,12,67}, -{73,12,68}, -{73,12,69}, -{73,12,70}, -{73,12,71}, -{73,12,72}, -{73,12,73}, -{73,12,74}, -{73,12,75}, -{73,12,76}, -{73,13,-41}, -{73,13,-40}, -{73,13,-39}, -{73,13,-38}, -{73,13,-37}, -{73,13,-36}, -{73,13,-35}, -{73,13,-34}, -{73,13,-33}, -{73,13,-32}, -{73,13,-31}, -{73,13,-30}, -{73,13,-29}, -{73,13,-28}, -{73,13,-27}, -{73,13,-26}, -{73,13,-25}, -{73,13,-24}, -{73,13,-23}, -{73,13,-22}, -{73,13,-21}, -{73,13,-20}, -{73,13,-19}, -{73,13,-18}, -{73,13,-17}, -{73,13,-16}, -{73,13,-15}, -{73,13,-14}, -{73,13,-13}, -{73,13,-12}, -{73,13,-11}, -{73,13,-10}, -{73,13,-9}, -{73,13,-8}, -{73,13,-7}, -{73,13,-6}, -{73,13,-5}, -{73,13,-4}, -{73,13,-3}, -{73,13,-2}, -{73,13,-1}, -{73,13,0}, -{73,13,1}, -{73,13,2}, -{73,13,3}, -{73,13,4}, -{73,13,5}, -{73,13,6}, -{73,13,7}, -{73,13,8}, -{73,13,9}, -{73,13,10}, -{73,13,11}, -{73,13,12}, -{73,13,13}, -{73,13,14}, -{73,13,15}, -{73,13,16}, -{73,13,17}, -{73,13,18}, -{73,13,19}, -{73,13,20}, -{73,13,21}, -{73,13,22}, -{73,13,23}, -{73,13,24}, -{73,13,25}, -{73,13,26}, -{73,13,27}, -{73,13,28}, -{73,13,29}, -{73,13,30}, -{73,13,31}, -{73,13,32}, -{73,13,33}, -{73,13,34}, -{73,13,35}, -{73,13,36}, -{73,13,37}, -{73,13,38}, -{73,13,39}, -{73,13,40}, -{73,13,41}, -{73,13,42}, -{73,13,43}, -{73,13,44}, -{73,13,45}, -{73,13,46}, -{73,13,47}, -{73,13,48}, -{73,13,49}, -{73,13,50}, -{73,13,51}, -{73,13,52}, -{73,13,53}, -{73,13,54}, -{73,13,55}, -{73,13,56}, -{73,13,57}, -{73,13,58}, -{73,13,59}, -{73,13,60}, -{73,13,61}, -{73,13,62}, -{73,13,63}, -{73,13,64}, -{73,13,65}, -{73,13,66}, -{73,13,67}, -{73,13,68}, -{73,13,69}, -{73,13,70}, -{73,13,71}, -{73,13,72}, -{73,13,73}, -{73,13,74}, -{73,13,75}, -{73,13,76}, -{73,14,-41}, -{73,14,-40}, -{73,14,-39}, -{73,14,-38}, -{73,14,-37}, -{73,14,-36}, -{73,14,-35}, -{73,14,-34}, -{73,14,-33}, -{73,14,-32}, -{73,14,-31}, -{73,14,-30}, -{73,14,-29}, -{73,14,-28}, -{73,14,-27}, -{73,14,-26}, -{73,14,-25}, -{73,14,-24}, -{73,14,-23}, -{73,14,-22}, -{73,14,-21}, -{73,14,-20}, -{73,14,-19}, -{73,14,-18}, -{73,14,-17}, -{73,14,-16}, -{73,14,-15}, -{73,14,-14}, -{73,14,-13}, -{73,14,-12}, -{73,14,-11}, -{73,14,-10}, -{73,14,-9}, -{73,14,-8}, -{73,14,-7}, -{73,14,-6}, -{73,14,-5}, -{73,14,-4}, -{73,14,-3}, -{73,14,-2}, -{73,14,-1}, -{73,14,0}, -{73,14,1}, -{73,14,2}, -{73,14,3}, -{73,14,4}, -{73,14,5}, -{73,14,6}, -{73,14,7}, -{73,14,8}, -{73,14,9}, -{73,14,10}, -{73,14,11}, -{73,14,12}, -{73,14,13}, -{73,14,14}, -{73,14,15}, -{73,14,16}, -{73,14,17}, -{73,14,18}, -{73,14,19}, -{73,14,20}, -{73,14,21}, -{73,14,22}, -{73,14,23}, -{73,14,24}, -{73,14,25}, -{73,14,26}, -{73,14,27}, -{73,14,28}, -{73,14,29}, -{73,14,30}, -{73,14,31}, -{73,14,32}, -{73,14,33}, -{73,14,34}, -{73,14,35}, -{73,14,36}, -{73,14,37}, -{73,14,38}, -{73,14,39}, -{73,14,40}, -{73,14,41}, -{73,14,42}, -{73,14,43}, -{73,14,44}, -{73,14,45}, -{73,14,46}, -{73,14,47}, -{73,14,48}, -{73,14,49}, -{73,14,50}, -{73,14,51}, -{73,14,52}, -{73,14,53}, -{73,14,54}, -{73,14,55}, -{73,14,56}, -{73,14,57}, -{73,14,58}, -{73,14,59}, -{73,14,60}, -{73,14,61}, -{73,14,62}, -{73,14,63}, -{73,14,64}, -{73,14,65}, -{73,14,66}, -{73,14,67}, -{73,14,68}, -{73,14,69}, -{73,14,70}, -{73,14,71}, -{73,14,72}, -{73,14,73}, -{73,14,74}, -{73,14,75}, -{73,14,76}, -{73,15,-41}, -{73,15,-40}, -{73,15,-39}, -{73,15,-38}, -{73,15,-37}, -{73,15,-36}, -{73,15,-35}, -{73,15,-34}, -{73,15,-33}, -{73,15,-32}, -{73,15,-31}, -{73,15,-30}, -{73,15,-29}, -{73,15,-28}, -{73,15,-27}, -{73,15,-26}, -{73,15,-25}, -{73,15,-24}, -{73,15,-23}, -{73,15,-22}, -{73,15,-21}, -{73,15,-20}, -{73,15,-19}, -{73,15,-18}, -{73,15,-17}, -{73,15,-16}, -{73,15,-15}, -{73,15,-14}, -{73,15,-13}, -{73,15,-12}, -{73,15,-11}, -{73,15,-10}, -{73,15,-9}, -{73,15,-8}, -{73,15,-7}, -{73,15,-6}, -{73,15,-5}, -{73,15,-4}, -{73,15,-3}, -{73,15,-2}, -{73,15,-1}, -{73,15,0}, -{73,15,1}, -{73,15,2}, -{73,15,3}, -{73,15,4}, -{73,15,5}, -{73,15,6}, -{73,15,7}, -{73,15,8}, -{73,15,9}, -{73,15,10}, -{73,15,11}, -{73,15,12}, -{73,15,13}, -{73,15,14}, -{73,15,15}, -{73,15,16}, -{73,15,17}, -{73,15,18}, -{73,15,19}, -{73,15,20}, -{73,15,21}, -{73,15,22}, -{73,15,23}, -{73,15,24}, -{73,15,25}, -{73,15,26}, -{73,15,27}, -{73,15,28}, -{73,15,29}, -{73,15,30}, -{73,15,31}, -{73,15,32}, -{73,15,33}, -{73,15,34}, -{73,15,35}, -{73,15,36}, -{73,15,37}, -{73,15,38}, -{73,15,39}, -{73,15,40}, -{73,15,41}, -{73,15,42}, -{73,15,43}, -{73,15,44}, -{73,15,45}, -{73,15,46}, -{73,15,47}, -{73,15,48}, -{73,15,49}, -{73,15,50}, -{73,15,51}, -{73,15,52}, -{73,15,53}, -{73,15,54}, -{73,15,55}, -{73,15,56}, -{73,15,57}, -{73,15,58}, -{73,15,59}, -{73,15,60}, -{73,15,61}, -{73,15,62}, -{73,15,63}, -{73,15,64}, -{73,15,65}, -{73,15,66}, -{73,15,67}, -{73,15,68}, -{73,15,69}, -{73,15,70}, -{73,15,71}, -{73,15,72}, -{73,15,73}, -{73,15,74}, -{73,15,75}, -{73,15,76}, -{73,16,-41}, -{73,16,-40}, -{73,16,-39}, -{73,16,-38}, -{73,16,-37}, -{73,16,-36}, -{73,16,-35}, -{73,16,-34}, -{73,16,-33}, -{73,16,-32}, -{73,16,-31}, -{73,16,-30}, -{73,16,-29}, -{73,16,-28}, -{73,16,-27}, -{73,16,-26}, -{73,16,-25}, -{73,16,-24}, -{73,16,-23}, -{73,16,-22}, -{73,16,-21}, -{73,16,-20}, -{73,16,-19}, -{73,16,-18}, -{73,16,-17}, -{73,16,-16}, -{73,16,-15}, -{73,16,-14}, -{73,16,-13}, -{73,16,-12}, -{73,16,-11}, -{73,16,-10}, -{73,16,-9}, -{73,16,-8}, -{73,16,-7}, -{73,16,-6}, -{73,16,-5}, -{73,16,-4}, -{73,16,-3}, -{73,16,-2}, -{73,16,-1}, -{73,16,0}, -{73,16,1}, -{73,16,2}, -{73,16,3}, -{73,16,4}, -{73,16,5}, -{73,16,6}, -{73,16,7}, -{73,16,8}, -{73,16,9}, -{73,16,10}, -{73,16,11}, -{73,16,12}, -{73,16,13}, -{73,16,14}, -{73,16,15}, -{73,16,16}, -{73,16,17}, -{73,16,18}, -{73,16,19}, -{73,16,20}, -{73,16,21}, -{73,16,22}, -{73,16,23}, -{73,16,24}, -{73,16,25}, -{73,16,26}, -{73,16,27}, -{73,16,28}, -{73,16,29}, -{73,16,30}, -{73,16,31}, -{73,16,32}, -{73,16,33}, -{73,16,34}, -{73,16,35}, -{73,16,36}, -{73,16,37}, -{73,16,38}, -{73,16,39}, -{73,16,40}, -{73,16,41}, -{73,16,42}, -{73,16,43}, -{73,16,44}, -{73,16,45}, -{73,16,46}, -{73,16,47}, -{73,16,48}, -{73,16,49}, -{73,16,50}, -{73,16,51}, -{73,16,52}, -{73,16,53}, -{73,16,54}, -{73,16,55}, -{73,16,56}, -{73,16,57}, -{73,16,58}, -{73,16,59}, -{73,16,60}, -{73,16,61}, -{73,16,62}, -{73,16,63}, -{73,16,64}, -{73,16,65}, -{73,16,66}, -{73,16,67}, -{73,16,68}, -{73,16,69}, -{73,16,70}, -{73,16,71}, -{73,16,72}, -{73,16,73}, -{73,16,74}, -{73,16,75}, -{73,16,76}, -{73,17,-41}, -{73,17,-40}, -{73,17,-39}, -{73,17,-38}, -{73,17,-37}, -{73,17,-36}, -{73,17,-35}, -{73,17,-34}, -{73,17,-33}, -{73,17,-32}, -{73,17,-31}, -{73,17,-30}, -{73,17,-29}, -{73,17,-28}, -{73,17,-27}, -{73,17,-26}, -{73,17,-25}, -{73,17,-24}, -{73,17,-23}, -{73,17,-22}, -{73,17,-21}, -{73,17,-20}, -{73,17,-19}, -{73,17,-18}, -{73,17,-17}, -{73,17,-16}, -{73,17,-15}, -{73,17,-14}, -{73,17,-13}, -{73,17,-12}, -{73,17,-11}, -{73,17,-10}, -{73,17,-9}, -{73,17,-8}, -{73,17,-7}, -{73,17,-6}, -{73,17,-5}, -{73,17,-4}, -{73,17,-3}, -{73,17,-2}, -{73,17,-1}, -{73,17,0}, -{73,17,1}, -{73,17,2}, -{73,17,3}, -{73,17,4}, -{73,17,5}, -{73,17,6}, -{73,17,7}, -{73,17,8}, -{73,17,9}, -{73,17,10}, -{73,17,11}, -{73,17,12}, -{73,17,13}, -{73,17,14}, -{73,17,15}, -{73,17,16}, -{73,17,17}, -{73,17,18}, -{73,17,19}, -{73,17,20}, -{73,17,21}, -{73,17,22}, -{73,17,23}, -{73,17,24}, -{73,17,25}, -{73,17,26}, -{73,17,27}, -{73,17,28}, -{73,17,29}, -{73,17,30}, -{73,17,31}, -{73,17,32}, -{73,17,33}, -{73,17,34}, -{73,17,35}, -{73,17,36}, -{73,17,37}, -{73,17,38}, -{73,17,39}, -{73,17,40}, -{73,17,41}, -{73,17,42}, -{73,17,43}, -{73,17,44}, -{73,17,45}, -{73,17,46}, -{73,17,47}, -{73,17,48}, -{73,17,49}, -{73,17,50}, -{73,17,51}, -{73,17,52}, -{73,17,53}, -{73,17,54}, -{73,17,55}, -{73,17,56}, -{73,17,57}, -{73,17,58}, -{73,17,59}, -{73,17,60}, -{73,17,61}, -{73,17,62}, -{73,17,63}, -{73,17,64}, -{73,17,65}, -{73,17,66}, -{73,17,67}, -{73,17,68}, -{73,17,69}, -{73,17,70}, -{73,17,71}, -{73,17,72}, -{73,17,73}, -{73,17,74}, -{73,17,75}, -{73,17,76}, -{73,18,-41}, -{73,18,-40}, -{73,18,-39}, -{73,18,-38}, -{73,18,-37}, -{73,18,-36}, -{73,18,-35}, -{73,18,-34}, -{73,18,-33}, -{73,18,-32}, -{73,18,-31}, -{73,18,-30}, -{73,18,-29}, -{73,18,-28}, -{73,18,-27}, -{73,18,-26}, -{73,18,-25}, -{73,18,-24}, -{73,18,-23}, -{73,18,-22}, -{73,18,-21}, -{73,18,-20}, -{73,18,-19}, -{73,18,-18}, -{73,18,-17}, -{73,18,-16}, -{73,18,-15}, -{73,18,-14}, -{73,18,-13}, -{73,18,-12}, -{73,18,-11}, -{73,18,-10}, -{73,18,-9}, -{73,18,-8}, -{73,18,-7}, -{73,18,-6}, -{73,18,-5}, -{73,18,-4}, -{73,18,-3}, -{73,18,-2}, -{73,18,-1}, -{73,18,0}, -{73,18,1}, -{73,18,2}, -{73,18,3}, -{73,18,4}, -{73,18,5}, -{73,18,6}, -{73,18,7}, -{73,18,8}, -{73,18,9}, -{73,18,10}, -{73,18,11}, -{73,18,12}, -{73,18,13}, -{73,18,14}, -{73,18,15}, -{73,18,16}, -{73,18,17}, -{73,18,18}, -{73,18,19}, -{73,18,20}, -{73,18,21}, -{73,18,22}, -{73,18,23}, -{73,18,24}, -{73,18,25}, -{73,18,26}, -{73,18,27}, -{73,18,28}, -{73,18,29}, -{73,18,30}, -{73,18,31}, -{73,18,32}, -{73,18,33}, -{73,18,34}, -{73,18,35}, -{73,18,36}, -{73,18,37}, -{73,18,38}, -{73,18,39}, -{73,18,40}, -{73,18,41}, -{73,18,42}, -{73,18,43}, -{73,18,44}, -{73,18,45}, -{73,18,46}, -{73,18,47}, -{73,18,48}, -{73,18,49}, -{73,18,50}, -{73,18,51}, -{73,18,52}, -{73,18,53}, -{73,18,54}, -{73,18,55}, -{73,18,56}, -{73,18,57}, -{73,18,58}, -{73,18,59}, -{73,18,60}, -{73,18,61}, -{73,18,62}, -{73,18,63}, -{73,18,64}, -{73,18,65}, -{73,18,66}, -{73,18,67}, -{73,18,68}, -{73,18,69}, -{73,18,70}, -{73,18,71}, -{73,18,72}, -{73,18,73}, -{73,18,74}, -{73,18,75}, -{73,18,76}, -{73,18,77}, -{73,19,-41}, -{73,19,-40}, -{73,19,-39}, -{73,19,-38}, -{73,19,-37}, -{73,19,-36}, -{73,19,-35}, -{73,19,-34}, -{73,19,-33}, -{73,19,-32}, -{73,19,-31}, -{73,19,-30}, -{73,19,-29}, -{73,19,-28}, -{73,19,-27}, -{73,19,-26}, -{73,19,-25}, -{73,19,-24}, -{73,19,-23}, -{73,19,-22}, -{73,19,-21}, -{73,19,-20}, -{73,19,-19}, -{73,19,-18}, -{73,19,-17}, -{73,19,-16}, -{73,19,-15}, -{73,19,-14}, -{73,19,-13}, -{73,19,-12}, -{73,19,-11}, -{73,19,-10}, -{73,19,-9}, -{73,19,-8}, -{73,19,-7}, -{73,19,-6}, -{73,19,-5}, -{73,19,-4}, -{73,19,-3}, -{73,19,-2}, -{73,19,-1}, -{73,19,0}, -{73,19,1}, -{73,19,2}, -{73,19,3}, -{73,19,4}, -{73,19,5}, -{73,19,6}, -{73,19,7}, -{73,19,8}, -{73,19,9}, -{73,19,10}, -{73,19,11}, -{73,19,12}, -{73,19,13}, -{73,19,14}, -{73,19,15}, -{73,19,16}, -{73,19,17}, -{73,19,18}, -{73,19,19}, -{73,19,20}, -{73,19,21}, -{73,19,22}, -{73,19,23}, -{73,19,24}, -{73,19,25}, -{73,19,26}, -{73,19,27}, -{73,19,28}, -{73,19,29}, -{73,19,30}, -{73,19,31}, -{73,19,32}, -{73,19,33}, -{73,19,34}, -{73,19,35}, -{73,19,36}, -{73,19,37}, -{73,19,38}, -{73,19,39}, -{73,19,40}, -{73,19,41}, -{73,19,42}, -{73,19,43}, -{73,19,44}, -{73,19,45}, -{73,19,46}, -{73,19,47}, -{73,19,48}, -{73,19,49}, -{73,19,50}, -{73,19,51}, -{73,19,52}, -{73,19,53}, -{73,19,54}, -{73,19,55}, -{73,19,56}, -{73,19,57}, -{73,19,58}, -{73,19,59}, -{73,19,60}, -{73,19,61}, -{73,19,62}, -{73,19,63}, -{73,19,64}, -{73,19,65}, -{73,19,66}, -{73,19,67}, -{73,19,68}, -{73,19,69}, -{73,19,70}, -{73,19,71}, -{73,19,72}, -{73,19,73}, -{73,19,74}, -{73,19,75}, -{73,19,76}, -{73,19,77}, -{73,20,-41}, -{73,20,-40}, -{73,20,-39}, -{73,20,-38}, -{73,20,-37}, -{73,20,-36}, -{73,20,-35}, -{73,20,-34}, -{73,20,-33}, -{73,20,-32}, -{73,20,-31}, -{73,20,-30}, -{73,20,-29}, -{73,20,-28}, -{73,20,-27}, -{73,20,-26}, -{73,20,-25}, -{73,20,-24}, -{73,20,-23}, -{73,20,-22}, -{73,20,-21}, -{73,20,-20}, -{73,20,-19}, -{73,20,-18}, -{73,20,-17}, -{73,20,-16}, -{73,20,-15}, -{73,20,-14}, -{73,20,-13}, -{73,20,-12}, -{73,20,-11}, -{73,20,-10}, -{73,20,-9}, -{73,20,-8}, -{73,20,-7}, -{73,20,-6}, -{73,20,-5}, -{73,20,-4}, -{73,20,-3}, -{73,20,-2}, -{73,20,-1}, -{73,20,0}, -{73,20,1}, -{73,20,2}, -{73,20,3}, -{73,20,4}, -{73,20,5}, -{73,20,6}, -{73,20,7}, -{73,20,8}, -{73,20,9}, -{73,20,10}, -{73,20,11}, -{73,20,12}, -{73,20,13}, -{73,20,14}, -{73,20,15}, -{73,20,16}, -{73,20,17}, -{73,20,18}, -{73,20,19}, -{73,20,20}, -{73,20,21}, -{73,20,22}, -{73,20,23}, -{73,20,24}, -{73,20,25}, -{73,20,26}, -{73,20,27}, -{73,20,28}, -{73,20,29}, -{73,20,30}, -{73,20,31}, -{73,20,32}, -{73,20,33}, -{73,20,34}, -{73,20,35}, -{73,20,36}, -{73,20,37}, -{73,20,38}, -{73,20,39}, -{73,20,40}, -{73,20,41}, -{73,20,42}, -{73,20,43}, -{73,20,44}, -{73,20,45}, -{73,20,46}, -{73,20,47}, -{73,20,48}, -{73,20,49}, -{73,20,50}, -{73,20,51}, -{73,20,52}, -{73,20,53}, -{73,20,54}, -{73,20,55}, -{73,20,56}, -{73,20,57}, -{73,20,58}, -{73,20,59}, -{73,20,60}, -{73,20,61}, -{73,20,62}, -{73,20,63}, -{73,20,64}, -{73,20,65}, -{73,20,66}, -{73,20,67}, -{73,20,68}, -{73,20,69}, -{73,20,70}, -{73,20,71}, -{73,20,72}, -{73,20,73}, -{73,20,74}, -{73,20,75}, -{73,20,76}, -{73,20,77}, -{73,21,-41}, -{73,21,-40}, -{73,21,-39}, -{73,21,-38}, -{73,21,-37}, -{73,21,-36}, -{73,21,-35}, -{73,21,-34}, -{73,21,-33}, -{73,21,-32}, -{73,21,-31}, -{73,21,-30}, -{73,21,-29}, -{73,21,-28}, -{73,21,-27}, -{73,21,-26}, -{73,21,-25}, -{73,21,-24}, -{73,21,-23}, -{73,21,-22}, -{73,21,-21}, -{73,21,-20}, -{73,21,-19}, -{73,21,-18}, -{73,21,-17}, -{73,21,-16}, -{73,21,-15}, -{73,21,-14}, -{73,21,-13}, -{73,21,-12}, -{73,21,-11}, -{73,21,-10}, -{73,21,-9}, -{73,21,-8}, -{73,21,-7}, -{73,21,-6}, -{73,21,-5}, -{73,21,-4}, -{73,21,-3}, -{73,21,-2}, -{73,21,-1}, -{73,21,0}, -{73,21,1}, -{73,21,2}, -{73,21,3}, -{73,21,4}, -{73,21,5}, -{73,21,6}, -{73,21,7}, -{73,21,8}, -{73,21,9}, -{73,21,10}, -{73,21,11}, -{73,21,12}, -{73,21,13}, -{73,21,14}, -{73,21,15}, -{73,21,16}, -{73,21,17}, -{73,21,18}, -{73,21,19}, -{73,21,20}, -{73,21,21}, -{73,21,22}, -{73,21,23}, -{73,21,24}, -{73,21,25}, -{73,21,26}, -{73,21,27}, -{73,21,28}, -{73,21,29}, -{73,21,30}, -{73,21,31}, -{73,21,32}, -{73,21,33}, -{73,21,34}, -{73,21,35}, -{73,21,36}, -{73,21,37}, -{73,21,38}, -{73,21,39}, -{73,21,40}, -{73,21,41}, -{73,21,42}, -{73,21,43}, -{73,21,44}, -{73,21,45}, -{73,21,46}, -{73,21,47}, -{73,21,48}, -{73,21,49}, -{73,21,50}, -{73,21,51}, -{73,21,52}, -{73,21,53}, -{73,21,54}, -{73,21,55}, -{73,21,56}, -{73,21,57}, -{73,21,58}, -{73,21,59}, -{73,21,60}, -{73,21,61}, -{73,21,62}, -{73,21,63}, -{73,21,64}, -{73,21,65}, -{73,21,66}, -{73,21,67}, -{73,21,68}, -{73,21,69}, -{73,21,70}, -{73,21,71}, -{73,21,72}, -{73,21,73}, -{73,21,74}, -{73,21,75}, -{73,21,76}, -{73,21,77}, -{73,22,-41}, -{73,22,-40}, -{73,22,-39}, -{73,22,-38}, -{73,22,-37}, -{73,22,-36}, -{73,22,-35}, -{73,22,-34}, -{73,22,-33}, -{73,22,-32}, -{73,22,-31}, -{73,22,-30}, -{73,22,-29}, -{73,22,-28}, -{73,22,-27}, -{73,22,-26}, -{73,22,-25}, -{73,22,-24}, -{73,22,-23}, -{73,22,-22}, -{73,22,-21}, -{73,22,-20}, -{73,22,-19}, -{73,22,-18}, -{73,22,-17}, -{73,22,-16}, -{73,22,-15}, -{73,22,-14}, -{73,22,-13}, -{73,22,-12}, -{73,22,-11}, -{73,22,-10}, -{73,22,-9}, -{73,22,-8}, -{73,22,-7}, -{73,22,-6}, -{73,22,-5}, -{73,22,-4}, -{73,22,-3}, -{73,22,-2}, -{73,22,-1}, -{73,22,0}, -{73,22,1}, -{73,22,2}, -{73,22,3}, -{73,22,4}, -{73,22,5}, -{73,22,6}, -{73,22,7}, -{73,22,8}, -{73,22,9}, -{73,22,10}, -{73,22,11}, -{73,22,12}, -{73,22,13}, -{73,22,14}, -{73,22,15}, -{73,22,16}, -{73,22,17}, -{73,22,18}, -{73,22,19}, -{73,22,20}, -{73,22,21}, -{73,22,22}, -{73,22,23}, -{73,22,24}, -{73,22,25}, -{73,22,26}, -{73,22,27}, -{73,22,28}, -{73,22,29}, -{73,22,30}, -{73,22,31}, -{73,22,32}, -{73,22,33}, -{73,22,34}, -{73,22,35}, -{73,22,36}, -{73,22,37}, -{73,22,38}, -{73,22,39}, -{73,22,40}, -{73,22,41}, -{73,22,42}, -{73,22,43}, -{73,22,44}, -{73,22,45}, -{73,22,46}, -{73,22,47}, -{73,22,48}, -{73,22,49}, -{73,22,50}, -{73,22,51}, -{73,22,52}, -{73,22,53}, -{73,22,54}, -{73,22,55}, -{73,22,56}, -{73,22,57}, -{73,22,58}, -{73,22,59}, -{73,22,60}, -{73,22,61}, -{73,22,62}, -{73,22,63}, -{73,22,64}, -{73,22,65}, -{73,22,66}, -{73,22,67}, -{73,22,68}, -{73,22,69}, -{73,22,70}, -{73,22,71}, -{73,22,72}, -{73,22,73}, -{73,22,74}, -{73,22,75}, -{73,22,76}, -{73,22,77}, -{73,23,-41}, -{73,23,-40}, -{73,23,-39}, -{73,23,-38}, -{73,23,-37}, -{73,23,-36}, -{73,23,-35}, -{73,23,-34}, -{73,23,-33}, -{73,23,-32}, -{73,23,-31}, -{73,23,-30}, -{73,23,-29}, -{73,23,-28}, -{73,23,-27}, -{73,23,-26}, -{73,23,-25}, -{73,23,-24}, -{73,23,-23}, -{73,23,-22}, -{73,23,-21}, -{73,23,-20}, -{73,23,-19}, -{73,23,-18}, -{73,23,-17}, -{73,23,-16}, -{73,23,-15}, -{73,23,-14}, -{73,23,-13}, -{73,23,-12}, -{73,23,-11}, -{73,23,-10}, -{73,23,-9}, -{73,23,-8}, -{73,23,-7}, -{73,23,-6}, -{73,23,-5}, -{73,23,-4}, -{73,23,-3}, -{73,23,-2}, -{73,23,-1}, -{73,23,0}, -{73,23,1}, -{73,23,2}, -{73,23,3}, -{73,23,4}, -{73,23,5}, -{73,23,6}, -{73,23,7}, -{73,23,8}, -{73,23,9}, -{73,23,10}, -{73,23,11}, -{73,23,12}, -{73,23,13}, -{73,23,14}, -{73,23,15}, -{73,23,16}, -{73,23,17}, -{73,23,18}, -{73,23,19}, -{73,23,20}, -{73,23,21}, -{73,23,22}, -{73,23,23}, -{73,23,24}, -{73,23,25}, -{73,23,26}, -{73,23,27}, -{73,23,28}, -{73,23,29}, -{73,23,30}, -{73,23,31}, -{73,23,32}, -{73,23,33}, -{73,23,34}, -{73,23,35}, -{73,23,36}, -{73,23,37}, -{73,23,38}, -{73,23,39}, -{73,23,40}, -{73,23,41}, -{73,23,42}, -{73,23,43}, -{73,23,44}, -{73,23,45}, -{73,23,46}, -{73,23,47}, -{73,23,48}, -{73,23,49}, -{73,23,50}, -{73,23,51}, -{73,23,52}, -{73,23,53}, -{73,23,54}, -{73,23,55}, -{73,23,56}, -{73,23,57}, -{73,23,58}, -{73,23,59}, -{73,23,60}, -{73,23,61}, -{73,23,62}, -{73,23,63}, -{73,23,64}, -{73,23,65}, -{73,23,66}, -{73,23,67}, -{73,23,68}, -{73,23,69}, -{73,23,70}, -{73,23,71}, -{73,23,72}, -{73,23,73}, -{73,23,74}, -{73,23,75}, -{73,23,76}, -{73,23,77}, -{73,24,-41}, -{73,24,-40}, -{73,24,-39}, -{73,24,-38}, -{73,24,-37}, -{73,24,-36}, -{73,24,-35}, -{73,24,-34}, -{73,24,-33}, -{73,24,-32}, -{73,24,-31}, -{73,24,-30}, -{73,24,-29}, -{73,24,-28}, -{73,24,-27}, -{73,24,-26}, -{73,24,-25}, -{73,24,-24}, -{73,24,-23}, -{73,24,-22}, -{73,24,-21}, -{73,24,-20}, -{73,24,-19}, -{73,24,-18}, -{73,24,-17}, -{73,24,-16}, -{73,24,-15}, -{73,24,-14}, -{73,24,-13}, -{73,24,-12}, -{73,24,-11}, -{73,24,-10}, -{73,24,-9}, -{73,24,-8}, -{73,24,-7}, -{73,24,-6}, -{73,24,-5}, -{73,24,-4}, -{73,24,-3}, -{73,24,-2}, -{73,24,-1}, -{73,24,0}, -{73,24,1}, -{73,24,2}, -{73,24,3}, -{73,24,4}, -{73,24,5}, -{73,24,6}, -{73,24,7}, -{73,24,8}, -{73,24,9}, -{73,24,10}, -{73,24,11}, -{73,24,12}, -{73,24,13}, -{73,24,14}, -{73,24,15}, -{73,24,16}, -{73,24,17}, -{73,24,18}, -{73,24,19}, -{73,24,20}, -{73,24,21}, -{73,24,22}, -{73,24,23}, -{73,24,24}, -{73,24,25}, -{73,24,26}, -{73,24,27}, -{73,24,28}, -{73,24,29}, -{73,24,30}, -{73,24,31}, -{73,24,32}, -{73,24,33}, -{73,24,34}, -{73,24,35}, -{73,24,36}, -{73,24,37}, -{73,24,38}, -{73,24,39}, -{73,24,40}, -{73,24,41}, -{73,24,42}, -{73,24,43}, -{73,24,44}, -{73,24,45}, -{73,24,46}, -{73,24,47}, -{73,24,48}, -{73,24,49}, -{73,24,50}, -{73,24,51}, -{73,24,52}, -{73,24,53}, -{73,24,54}, -{73,24,55}, -{73,24,56}, -{73,24,57}, -{73,24,58}, -{73,24,59}, -{73,24,60}, -{73,24,61}, -{73,24,62}, -{73,24,63}, -{73,24,64}, -{73,24,65}, -{73,24,66}, -{73,24,67}, -{73,24,68}, -{73,24,69}, -{73,24,70}, -{73,24,71}, -{73,24,72}, -{73,24,73}, -{73,24,74}, -{73,24,75}, -{73,24,76}, -{73,24,77}, -{73,25,-41}, -{73,25,-40}, -{73,25,-39}, -{73,25,-38}, -{73,25,-37}, -{73,25,-36}, -{73,25,-35}, -{73,25,-34}, -{73,25,-33}, -{73,25,-32}, -{73,25,-31}, -{73,25,-30}, -{73,25,-29}, -{73,25,-28}, -{73,25,-27}, -{73,25,-26}, -{73,25,-25}, -{73,25,-24}, -{73,25,-23}, -{73,25,-22}, -{73,25,-21}, -{73,25,-20}, -{73,25,-19}, -{73,25,-18}, -{73,25,-17}, -{73,25,-16}, -{73,25,-15}, -{73,25,-14}, -{73,25,-13}, -{73,25,-12}, -{73,25,-11}, -{73,25,-10}, -{73,25,-9}, -{73,25,-8}, -{73,25,-7}, -{73,25,-6}, -{73,25,-5}, -{73,25,-4}, -{73,25,-3}, -{73,25,-2}, -{73,25,-1}, -{73,25,0}, -{73,25,1}, -{73,25,2}, -{73,25,3}, -{73,25,4}, -{73,25,5}, -{73,25,6}, -{73,25,7}, -{73,25,8}, -{73,25,9}, -{73,25,10}, -{73,25,11}, -{73,25,12}, -{73,25,13}, -{73,25,14}, -{73,25,15}, -{73,25,16}, -{73,25,17}, -{73,25,18}, -{73,25,19}, -{73,25,20}, -{73,25,21}, -{73,25,22}, -{73,25,23}, -{73,25,24}, -{73,25,25}, -{73,25,26}, -{73,25,27}, -{73,25,28}, -{73,25,29}, -{73,25,30}, -{73,25,31}, -{73,25,32}, -{73,25,33}, -{73,25,34}, -{73,25,35}, -{73,25,36}, -{73,25,37}, -{73,25,38}, -{73,25,39}, -{73,25,40}, -{73,25,41}, -{73,25,42}, -{73,25,43}, -{73,25,44}, -{73,25,45}, -{73,25,46}, -{73,25,47}, -{73,25,48}, -{73,25,49}, -{73,25,50}, -{73,25,51}, -{73,25,52}, -{73,25,53}, -{73,25,54}, -{73,25,55}, -{73,25,56}, -{73,25,57}, -{73,25,58}, -{73,25,59}, -{73,25,60}, -{73,25,61}, -{73,25,62}, -{73,25,63}, -{73,25,64}, -{73,25,65}, -{73,25,66}, -{73,25,67}, -{73,25,68}, -{73,25,69}, -{73,25,70}, -{73,25,71}, -{73,25,72}, -{73,25,73}, -{73,25,74}, -{73,25,75}, -{73,25,76}, -{73,25,77}, -{73,26,-41}, -{73,26,-40}, -{73,26,-39}, -{73,26,-38}, -{73,26,-37}, -{73,26,-36}, -{73,26,-35}, -{73,26,-34}, -{73,26,-33}, -{73,26,-32}, -{73,26,-31}, -{73,26,-30}, -{73,26,-29}, -{73,26,-28}, -{73,26,-27}, -{73,26,-26}, -{73,26,-25}, -{73,26,-24}, -{73,26,-23}, -{73,26,-22}, -{73,26,-21}, -{73,26,-20}, -{73,26,-19}, -{73,26,-18}, -{73,26,-17}, -{73,26,-16}, -{73,26,-15}, -{73,26,-14}, -{73,26,-13}, -{73,26,-12}, -{73,26,-11}, -{73,26,-10}, -{73,26,-9}, -{73,26,-8}, -{73,26,-7}, -{73,26,-6}, -{73,26,-5}, -{73,26,-4}, -{73,26,-3}, -{73,26,-2}, -{73,26,-1}, -{73,26,0}, -{73,26,1}, -{73,26,2}, -{73,26,3}, -{73,26,4}, -{73,26,5}, -{73,26,6}, -{73,26,7}, -{73,26,8}, -{73,26,9}, -{73,26,10}, -{73,26,11}, -{73,26,12}, -{73,26,13}, -{73,26,14}, -{73,26,15}, -{73,26,16}, -{73,26,17}, -{73,26,18}, -{73,26,19}, -{73,26,20}, -{73,26,21}, -{73,26,22}, -{73,26,23}, -{73,26,24}, -{73,26,25}, -{73,26,26}, -{73,26,27}, -{73,26,28}, -{73,26,29}, -{73,26,30}, -{73,26,31}, -{73,26,32}, -{73,26,33}, -{73,26,34}, -{73,26,35}, -{73,26,36}, -{73,26,37}, -{73,26,38}, -{73,26,39}, -{73,26,40}, -{73,26,41}, -{73,26,42}, -{73,26,43}, -{73,26,44}, -{73,26,45}, -{73,26,46}, -{73,26,47}, -{73,26,48}, -{73,26,49}, -{73,26,50}, -{73,26,51}, -{73,26,52}, -{73,26,53}, -{73,26,54}, -{73,26,55}, -{73,26,56}, -{73,26,57}, -{73,26,58}, -{73,26,59}, -{73,26,60}, -{73,26,61}, -{73,26,62}, -{73,26,63}, -{73,26,64}, -{73,26,65}, -{73,26,66}, -{73,26,67}, -{73,26,68}, -{73,26,69}, -{73,26,70}, -{73,26,71}, -{73,26,72}, -{73,26,73}, -{73,26,74}, -{73,26,75}, -{73,26,76}, -{73,26,77}, -{73,27,-41}, -{73,27,-40}, -{73,27,-39}, -{73,27,-38}, -{73,27,-37}, -{73,27,-36}, -{73,27,-35}, -{73,27,-34}, -{73,27,-33}, -{73,27,-32}, -{73,27,-31}, -{73,27,-30}, -{73,27,-29}, -{73,27,-28}, -{73,27,-27}, -{73,27,-26}, -{73,27,-25}, -{73,27,-24}, -{73,27,-23}, -{73,27,-22}, -{73,27,-21}, -{73,27,-20}, -{73,27,-19}, -{73,27,-18}, -{73,27,-17}, -{73,27,-16}, -{73,27,-15}, -{73,27,-14}, -{73,27,-13}, -{73,27,-12}, -{73,27,-11}, -{73,27,-10}, -{73,27,-9}, -{73,27,-8}, -{73,27,-7}, -{73,27,-6}, -{73,27,-5}, -{73,27,-4}, -{73,27,-3}, -{73,27,-2}, -{73,27,-1}, -{73,27,0}, -{73,27,1}, -{73,27,2}, -{73,27,3}, -{73,27,4}, -{73,27,5}, -{73,27,6}, -{73,27,7}, -{73,27,8}, -{73,27,9}, -{73,27,10}, -{73,27,11}, -{73,27,12}, -{73,27,13}, -{73,27,14}, -{73,27,15}, -{73,27,16}, -{73,27,17}, -{73,27,18}, -{73,27,19}, -{73,27,20}, -{73,27,21}, -{73,27,22}, -{73,27,23}, -{73,27,24}, -{73,27,25}, -{73,27,26}, -{73,27,27}, -{73,27,28}, -{73,27,29}, -{73,27,30}, -{73,27,31}, -{73,27,32}, -{73,27,33}, -{73,27,34}, -{73,27,35}, -{73,27,36}, -{73,27,37}, -{73,27,38}, -{73,27,39}, -{73,27,40}, -{73,27,41}, -{73,27,42}, -{73,27,43}, -{73,27,44}, -{73,27,45}, -{73,27,46}, -{73,27,47}, -{73,27,48}, -{73,27,49}, -{73,27,50}, -{73,27,51}, -{73,27,52}, -{73,27,53}, -{73,27,54}, -{73,27,55}, -{73,27,56}, -{73,27,57}, -{73,27,58}, -{73,27,59}, -{73,27,60}, -{73,27,61}, -{73,27,62}, -{73,27,63}, -{73,27,64}, -{73,27,65}, -{73,27,66}, -{73,27,67}, -{73,27,68}, -{73,27,69}, -{73,27,70}, -{73,27,71}, -{73,27,72}, -{73,27,73}, -{73,27,74}, -{73,27,75}, -{73,27,76}, -{73,27,77}, -{73,28,-41}, -{73,28,-40}, -{73,28,-39}, -{73,28,-38}, -{73,28,-37}, -{73,28,-36}, -{73,28,-35}, -{73,28,-34}, -{73,28,-33}, -{73,28,-32}, -{73,28,-31}, -{73,28,-30}, -{73,28,-29}, -{73,28,-28}, -{73,28,-27}, -{73,28,-26}, -{73,28,-25}, -{73,28,-24}, -{73,28,-23}, -{73,28,-22}, -{73,28,-21}, -{73,28,-20}, -{73,28,-19}, -{73,28,-18}, -{73,28,-17}, -{73,28,-16}, -{73,28,-15}, -{73,28,-14}, -{73,28,-13}, -{73,28,-12}, -{73,28,-11}, -{73,28,-10}, -{73,28,-9}, -{73,28,-8}, -{73,28,-7}, -{73,28,-6}, -{73,28,-5}, -{73,28,-4}, -{73,28,-3}, -{73,28,-2}, -{73,28,-1}, -{73,28,0}, -{73,28,1}, -{73,28,2}, -{73,28,3}, -{73,28,4}, -{73,28,5}, -{73,28,6}, -{73,28,7}, -{73,28,8}, -{73,28,9}, -{73,28,10}, -{73,28,11}, -{73,28,12}, -{73,28,13}, -{73,28,14}, -{73,28,15}, -{73,28,16}, -{73,28,17}, -{73,28,18}, -{73,28,19}, -{73,28,20}, -{73,28,21}, -{73,28,22}, -{73,28,23}, -{73,28,24}, -{73,28,25}, -{73,28,26}, -{73,28,27}, -{73,28,28}, -{73,28,29}, -{73,28,30}, -{73,28,31}, -{73,28,32}, -{73,28,33}, -{73,28,34}, -{73,28,35}, -{73,28,36}, -{73,28,37}, -{73,28,38}, -{73,28,39}, -{73,28,40}, -{73,28,41}, -{73,28,42}, -{73,28,43}, -{73,28,44}, -{73,28,45}, -{73,28,46}, -{73,28,47}, -{73,28,48}, -{73,28,49}, -{73,28,50}, -{73,28,51}, -{73,28,52}, -{73,28,53}, -{73,28,54}, -{73,28,55}, -{73,28,56}, -{73,28,57}, -{73,28,58}, -{73,28,59}, -{73,28,60}, -{73,28,61}, -{73,28,62}, -{73,28,63}, -{73,28,64}, -{73,28,65}, -{73,28,66}, -{73,28,67}, -{73,28,68}, -{73,28,69}, -{73,28,70}, -{73,28,71}, -{73,28,72}, -{73,28,73}, -{73,28,74}, -{73,28,75}, -{73,28,76}, -{73,28,77}, -{73,29,-41}, -{73,29,-40}, -{73,29,-39}, -{73,29,-38}, -{73,29,-37}, -{73,29,-36}, -{73,29,-35}, -{73,29,-34}, -{73,29,-33}, -{73,29,-32}, -{73,29,-31}, -{73,29,-30}, -{73,29,-29}, -{73,29,-28}, -{73,29,-27}, -{73,29,-26}, -{73,29,-25}, -{73,29,-24}, -{73,29,-23}, -{73,29,-22}, -{73,29,-21}, -{73,29,-20}, -{73,29,-19}, -{73,29,-18}, -{73,29,-17}, -{73,29,-16}, -{73,29,-15}, -{73,29,-14}, -{73,29,-13}, -{73,29,-12}, -{73,29,-11}, -{73,29,-10}, -{73,29,-9}, -{73,29,-8}, -{73,29,-7}, -{73,29,-6}, -{73,29,-5}, -{73,29,-4}, -{73,29,-3}, -{73,29,-2}, -{73,29,-1}, -{73,29,0}, -{73,29,1}, -{73,29,2}, -{73,29,3}, -{73,29,4}, -{73,29,5}, -{73,29,6}, -{73,29,7}, -{73,29,8}, -{73,29,9}, -{73,29,10}, -{73,29,11}, -{73,29,12}, -{73,29,13}, -{73,29,14}, -{73,29,15}, -{73,29,16}, -{73,29,17}, -{73,29,18}, -{73,29,19}, -{73,29,20}, -{73,29,21}, -{73,29,22}, -{73,29,23}, -{73,29,24}, -{73,29,25}, -{73,29,26}, -{73,29,27}, -{73,29,28}, -{73,29,29}, -{73,29,30}, -{73,29,31}, -{73,29,32}, -{73,29,33}, -{73,29,34}, -{73,29,35}, -{73,29,36}, -{73,29,37}, -{73,29,38}, -{73,29,39}, -{73,29,40}, -{73,29,41}, -{73,29,42}, -{73,29,43}, -{73,29,44}, -{73,29,45}, -{73,29,46}, -{73,29,47}, -{73,29,48}, -{73,29,49}, -{73,29,50}, -{73,29,51}, -{73,29,52}, -{73,29,53}, -{73,29,54}, -{73,29,55}, -{73,29,56}, -{73,29,57}, -{73,29,58}, -{73,29,59}, -{73,29,60}, -{73,29,61}, -{73,29,62}, -{73,29,63}, -{73,29,64}, -{73,29,65}, -{73,29,66}, -{73,29,67}, -{73,29,68}, -{73,29,69}, -{73,29,70}, -{73,29,71}, -{73,29,72}, -{73,29,73}, -{73,30,-41}, -{73,30,-40}, -{73,30,-39}, -{73,30,-38}, -{73,30,-37}, -{73,30,-36}, -{73,30,-35}, -{73,30,-34}, -{73,30,-33}, -{73,30,-32}, -{73,30,-31}, -{73,30,-30}, -{73,30,-29}, -{73,30,-28}, -{73,30,-27}, -{73,30,-26}, -{73,30,-25}, -{73,30,-24}, -{73,30,-23}, -{73,30,-22}, -{73,30,-21}, -{73,30,-20}, -{73,30,-19}, -{73,30,-18}, -{73,30,-17}, -{73,30,-16}, -{73,30,-15}, -{73,30,-14}, -{73,30,-13}, -{73,30,-12}, -{73,30,-11}, -{73,30,-10}, -{73,30,-9}, -{73,30,-8}, -{73,30,-7}, -{73,30,-6}, -{73,30,-5}, -{73,30,-4}, -{73,30,-3}, -{73,30,-2}, -{73,30,-1}, -{73,30,0}, -{73,30,1}, -{73,30,2}, -{73,30,3}, -{73,30,4}, -{73,30,5}, -{73,30,6}, -{73,30,7}, -{73,30,8}, -{73,30,9}, -{73,30,10}, -{73,30,11}, -{73,30,12}, -{73,30,13}, -{73,30,14}, -{73,30,15}, -{73,30,16}, -{73,30,17}, -{73,30,18}, -{73,30,19}, -{73,30,20}, -{73,30,21}, -{73,30,22}, -{73,30,23}, -{73,30,24}, -{73,30,25}, -{73,30,26}, -{73,30,27}, -{73,30,28}, -{73,30,29}, -{73,30,30}, -{73,30,31}, -{73,30,32}, -{73,30,33}, -{73,30,34}, -{73,30,35}, -{73,30,36}, -{73,30,37}, -{73,30,38}, -{73,30,39}, -{73,30,40}, -{73,30,41}, -{73,30,42}, -{73,30,43}, -{73,30,44}, -{73,30,45}, -{73,30,46}, -{73,30,47}, -{73,30,48}, -{73,30,49}, -{73,30,50}, -{73,30,51}, -{73,30,52}, -{73,30,53}, -{73,30,54}, -{73,30,55}, -{73,30,56}, -{73,30,57}, -{73,30,58}, -{73,30,59}, -{73,30,60}, -{73,30,61}, -{73,30,62}, -{73,30,63}, -{73,30,64}, -{73,30,65}, -{73,31,-41}, -{73,31,-40}, -{73,31,-39}, -{73,31,-38}, -{73,31,-37}, -{73,31,-36}, -{73,31,-35}, -{73,31,-34}, -{73,31,-33}, -{73,31,-32}, -{73,31,-31}, -{73,31,-30}, -{73,31,-29}, -{73,31,-28}, -{73,31,-27}, -{73,31,-26}, -{73,31,-25}, -{73,31,-24}, -{73,31,-23}, -{73,31,-22}, -{73,31,-21}, -{73,31,-20}, -{73,31,-19}, -{73,31,-18}, -{73,31,-17}, -{73,31,-16}, -{73,31,-15}, -{73,31,-14}, -{73,31,-13}, -{73,31,-12}, -{73,31,-11}, -{73,31,-10}, -{73,31,-9}, -{73,31,-8}, -{73,31,-7}, -{73,31,-6}, -{73,31,-5}, -{73,31,-4}, -{73,31,-3}, -{73,31,-2}, -{73,31,-1}, -{73,31,0}, -{73,31,1}, -{73,31,2}, -{73,31,3}, -{73,31,4}, -{73,31,5}, -{73,31,6}, -{73,31,7}, -{73,31,8}, -{73,31,9}, -{73,31,10}, -{73,31,11}, -{73,31,12}, -{73,31,13}, -{73,31,14}, -{73,31,15}, -{73,31,16}, -{73,31,17}, -{73,31,18}, -{73,31,19}, -{73,31,20}, -{73,31,21}, -{73,31,22}, -{73,31,23}, -{73,31,24}, -{73,31,25}, -{73,31,26}, -{73,31,27}, -{73,31,28}, -{73,31,29}, -{73,31,30}, -{73,31,31}, -{73,31,32}, -{73,31,33}, -{73,31,34}, -{73,31,35}, -{73,31,36}, -{73,31,37}, -{73,31,38}, -{73,31,39}, -{73,31,40}, -{73,31,41}, -{73,31,42}, -{73,31,43}, -{73,31,44}, -{73,31,45}, -{73,31,46}, -{73,31,47}, -{73,31,48}, -{73,31,49}, -{73,31,50}, -{73,31,51}, -{73,31,52}, -{73,31,53}, -{73,31,54}, -{73,31,55}, -{73,31,56}, -{73,31,57}, -{73,32,-41}, -{73,32,-40}, -{73,32,-39}, -{73,32,-38}, -{73,32,-37}, -{73,32,-36}, -{73,32,-35}, -{73,32,-34}, -{73,32,-33}, -{73,32,-32}, -{73,32,-31}, -{73,32,-30}, -{73,32,-29}, -{73,32,-28}, -{73,32,-27}, -{73,32,-26}, -{73,32,-25}, -{73,32,-24}, -{73,32,-23}, -{73,32,-22}, -{73,32,-21}, -{73,32,-20}, -{73,32,-19}, -{73,32,-18}, -{73,32,-17}, -{73,32,-16}, -{73,32,-15}, -{73,32,-14}, -{73,32,-13}, -{73,32,-12}, -{73,32,-11}, -{73,32,-10}, -{73,32,-9}, -{73,32,-8}, -{73,32,-7}, -{73,32,-6}, -{73,32,-5}, -{73,32,-4}, -{73,32,-3}, -{73,32,-2}, -{73,32,-1}, -{73,32,0}, -{73,32,1}, -{73,32,2}, -{73,32,3}, -{73,32,4}, -{73,32,5}, -{73,32,6}, -{73,32,7}, -{73,32,8}, -{73,32,9}, -{73,32,10}, -{73,32,11}, -{73,32,12}, -{73,32,13}, -{73,32,14}, -{73,32,15}, -{73,32,16}, -{73,32,17}, -{73,32,18}, -{73,32,19}, -{73,32,20}, -{73,32,21}, -{73,32,22}, -{73,32,23}, -{73,32,24}, -{73,32,25}, -{73,32,26}, -{73,32,27}, -{73,32,28}, -{73,32,29}, -{73,32,30}, -{73,32,31}, -{73,32,32}, -{73,32,33}, -{73,32,34}, -{73,32,35}, -{73,32,36}, -{73,32,37}, -{73,32,38}, -{73,32,39}, -{73,32,40}, -{73,32,41}, -{73,32,42}, -{73,32,43}, -{73,32,44}, -{73,32,45}, -{73,32,46}, -{73,32,47}, -{73,32,48}, -{73,32,49}, -{73,32,50}, -{73,32,51}, -{73,33,-41}, -{73,33,-40}, -{73,33,-39}, -{73,33,-38}, -{73,33,-37}, -{73,33,-36}, -{73,33,-35}, -{73,33,-34}, -{73,33,-33}, -{73,33,-32}, -{73,33,-31}, -{73,33,-30}, -{73,33,-29}, -{73,33,-28}, -{73,33,-27}, -{73,33,-26}, -{73,33,-25}, -{73,33,-24}, -{73,33,-23}, -{73,33,-22}, -{73,33,-21}, -{73,33,-20}, -{73,33,-19}, -{73,33,-18}, -{73,33,-17}, -{73,33,-16}, -{73,33,-15}, -{73,33,-14}, -{73,33,-13}, -{73,33,-12}, -{73,33,-11}, -{73,33,-10}, -{73,33,-9}, -{73,33,-8}, -{73,33,-7}, -{73,33,-6}, -{73,33,-5}, -{73,33,-4}, -{73,33,-3}, -{73,33,-2}, -{73,33,-1}, -{73,33,0}, -{73,33,1}, -{73,33,2}, -{73,33,3}, -{73,33,4}, -{73,33,5}, -{73,33,6}, -{73,33,7}, -{73,33,8}, -{73,33,9}, -{73,33,10}, -{73,33,11}, -{73,33,12}, -{73,33,13}, -{73,33,14}, -{73,33,15}, -{73,33,16}, -{73,33,17}, -{73,33,18}, -{73,33,19}, -{73,33,20}, -{73,33,21}, -{73,33,22}, -{73,33,23}, -{73,33,24}, -{73,33,25}, -{73,33,26}, -{73,33,27}, -{73,33,28}, -{73,33,29}, -{73,33,30}, -{73,33,31}, -{73,33,32}, -{73,33,33}, -{73,33,34}, -{73,33,35}, -{73,33,36}, -{73,33,37}, -{73,33,38}, -{73,33,39}, -{73,33,40}, -{73,33,41}, -{73,33,42}, -{73,33,43}, -{73,33,44}, -{73,33,45}, -{73,34,-41}, -{73,34,-40}, -{73,34,-39}, -{73,34,-38}, -{73,34,-37}, -{73,34,-36}, -{73,34,-35}, -{73,34,-34}, -{73,34,-33}, -{73,34,-32}, -{73,34,-31}, -{73,34,-30}, -{73,34,-29}, -{73,34,-28}, -{73,34,-27}, -{73,34,-26}, -{73,34,-25}, -{73,34,-24}, -{73,34,-23}, -{73,34,-22}, -{73,34,-21}, -{73,34,-20}, -{73,34,-19}, -{73,34,-18}, -{73,34,-17}, -{73,34,-16}, -{73,34,-15}, -{73,34,-14}, -{73,34,-13}, -{73,34,-12}, -{73,34,-11}, -{73,34,-10}, -{73,34,-9}, -{73,34,-8}, -{73,34,-7}, -{73,34,-6}, -{73,34,-5}, -{73,34,-4}, -{73,34,-3}, -{73,34,-2}, -{73,34,-1}, -{73,34,0}, -{73,34,1}, -{73,34,2}, -{73,34,3}, -{73,34,4}, -{73,34,5}, -{73,34,6}, -{73,34,7}, -{73,34,8}, -{73,34,9}, -{73,34,10}, -{73,34,11}, -{73,34,12}, -{73,34,13}, -{73,34,14}, -{73,34,15}, -{73,34,16}, -{73,34,17}, -{73,34,18}, -{73,34,19}, -{73,34,20}, -{73,34,21}, -{73,34,22}, -{73,34,23}, -{73,34,24}, -{73,34,25}, -{73,34,26}, -{73,34,27}, -{73,34,28}, -{73,34,29}, -{73,34,30}, -{73,34,31}, -{73,34,32}, -{73,34,33}, -{73,34,34}, -{73,34,35}, -{73,34,36}, -{73,34,37}, -{73,34,38}, -{73,34,39}, -{73,34,40}, -{73,35,-41}, -{73,35,-40}, -{73,35,-39}, -{73,35,-38}, -{73,35,-37}, -{73,35,-36}, -{73,35,-35}, -{73,35,-34}, -{73,35,-33}, -{73,35,-32}, -{73,35,-31}, -{73,35,-30}, -{73,35,-29}, -{73,35,-28}, -{73,35,-27}, -{73,35,-26}, -{73,35,-25}, -{73,35,-24}, -{73,35,-23}, -{73,35,-22}, -{73,35,-21}, -{73,35,-20}, -{73,35,-19}, -{73,35,-18}, -{73,35,-17}, -{73,35,-16}, -{73,35,-15}, -{73,35,-14}, -{73,35,-13}, -{73,35,-12}, -{73,35,-11}, -{73,35,-10}, -{73,35,-9}, -{73,35,-8}, -{73,35,-7}, -{73,35,-6}, -{73,35,-5}, -{73,35,-4}, -{73,35,-3}, -{73,35,-2}, -{73,35,-1}, -{73,35,0}, -{73,35,1}, -{73,35,2}, -{73,35,3}, -{73,35,4}, -{73,35,5}, -{73,35,6}, -{73,35,7}, -{73,35,8}, -{73,35,9}, -{73,35,10}, -{73,35,11}, -{73,35,12}, -{73,35,13}, -{73,35,14}, -{73,35,15}, -{73,35,16}, -{73,35,17}, -{73,35,18}, -{73,35,19}, -{73,35,20}, -{73,35,21}, -{73,35,22}, -{73,35,23}, -{73,35,24}, -{73,35,25}, -{73,35,26}, -{73,35,27}, -{73,35,28}, -{73,35,29}, -{73,35,30}, -{73,35,31}, -{73,35,32}, -{73,35,33}, -{73,35,34}, -{73,35,35}, -{73,36,-41}, -{73,36,-40}, -{73,36,-39}, -{73,36,-38}, -{73,36,-37}, -{73,36,-36}, -{73,36,-35}, -{73,36,-34}, -{73,36,-33}, -{73,36,-32}, -{73,36,-31}, -{73,36,-30}, -{73,36,-29}, -{73,36,-28}, -{73,36,-27}, -{73,36,-26}, -{73,36,-25}, -{73,36,-24}, -{73,36,-23}, -{73,36,-22}, -{73,36,-21}, -{73,36,-20}, -{73,36,-19}, -{73,36,-18}, -{73,36,-17}, -{73,36,-16}, -{73,36,-15}, -{73,36,-14}, -{73,36,-13}, -{73,36,-12}, -{73,36,-11}, -{73,36,-10}, -{73,36,-9}, -{73,36,-8}, -{73,36,-7}, -{73,36,-6}, -{73,36,-5}, -{73,36,-4}, -{73,36,-3}, -{73,36,-2}, -{73,36,-1}, -{73,36,0}, -{73,36,1}, -{73,36,2}, -{73,36,3}, -{73,36,4}, -{73,36,5}, -{73,36,6}, -{73,36,7}, -{73,36,8}, -{73,36,9}, -{73,36,10}, -{73,36,11}, -{73,36,12}, -{73,36,13}, -{73,36,14}, -{73,36,15}, -{73,36,16}, -{73,36,17}, -{73,36,18}, -{73,36,19}, -{73,36,20}, -{73,36,21}, -{73,36,22}, -{73,36,23}, -{73,36,24}, -{73,36,25}, -{73,36,26}, -{73,36,27}, -{73,36,28}, -{73,36,29}, -{73,36,30}, -{73,36,31}, -{73,37,-41}, -{73,37,-40}, -{73,37,-39}, -{73,37,-38}, -{73,37,-37}, -{73,37,-36}, -{73,37,-35}, -{73,37,-34}, -{73,37,-33}, -{73,37,-32}, -{73,37,-31}, -{73,37,-30}, -{73,37,-29}, -{73,37,-28}, -{73,37,-27}, -{73,37,-26}, -{73,37,-25}, -{73,37,-24}, -{73,37,-23}, -{73,37,-22}, -{73,37,-21}, -{73,37,-20}, -{73,37,-19}, -{73,37,-18}, -{73,37,-17}, -{73,37,-16}, -{73,37,-15}, -{73,37,-14}, -{73,37,-13}, -{73,37,-12}, -{73,37,-11}, -{73,37,-10}, -{73,37,-9}, -{73,37,-8}, -{73,37,-7}, -{73,37,-6}, -{73,37,-5}, -{73,37,-4}, -{73,37,-3}, -{73,37,-2}, -{73,37,-1}, -{73,37,0}, -{73,37,1}, -{73,37,2}, -{73,37,3}, -{73,37,4}, -{73,37,5}, -{73,37,6}, -{73,37,7}, -{73,37,8}, -{73,37,9}, -{73,37,10}, -{73,37,11}, -{73,37,12}, -{73,37,13}, -{73,37,14}, -{73,37,15}, -{73,37,16}, -{73,37,17}, -{73,37,18}, -{73,37,19}, -{73,37,20}, -{73,37,21}, -{73,37,22}, -{73,37,23}, -{73,37,24}, -{73,37,25}, -{73,37,26}, -{73,37,27}, -{73,38,-41}, -{73,38,-40}, -{73,38,-39}, -{73,38,-38}, -{73,38,-37}, -{73,38,-36}, -{73,38,-35}, -{73,38,-34}, -{73,38,-33}, -{73,38,-32}, -{73,38,-31}, -{73,38,-30}, -{73,38,-29}, -{73,38,-28}, -{73,38,-27}, -{73,38,-26}, -{73,38,-25}, -{73,38,-24}, -{73,38,-23}, -{73,38,-22}, -{73,38,-21}, -{73,38,-20}, -{73,38,-19}, -{73,38,-18}, -{73,38,-17}, -{73,38,-16}, -{73,38,-15}, -{73,38,-14}, -{73,38,-13}, -{73,38,-12}, -{73,38,-11}, -{73,38,-10}, -{73,38,-9}, -{73,38,-8}, -{73,38,-7}, -{73,38,-6}, -{73,38,-5}, -{73,38,-4}, -{73,38,-3}, -{73,38,-2}, -{73,38,-1}, -{73,38,0}, -{73,38,1}, -{73,38,2}, -{73,38,3}, -{73,38,4}, -{73,38,5}, -{73,38,6}, -{73,38,7}, -{73,38,8}, -{73,38,9}, -{73,38,10}, -{73,38,11}, -{73,38,12}, -{73,38,13}, -{73,38,14}, -{73,38,15}, -{73,38,16}, -{73,38,17}, -{73,38,18}, -{73,38,19}, -{73,38,20}, -{73,38,21}, -{73,38,22}, -{73,38,23}, -{73,39,-41}, -{73,39,-40}, -{73,39,-39}, -{73,39,-38}, -{73,39,-37}, -{73,39,-36}, -{73,39,-35}, -{73,39,-34}, -{73,39,-33}, -{73,39,-32}, -{73,39,-31}, -{73,39,-30}, -{73,39,-29}, -{73,39,-28}, -{73,39,-27}, -{73,39,-26}, -{73,39,-25}, -{73,39,-24}, -{73,39,-23}, -{73,39,-22}, -{73,39,-21}, -{73,39,-20}, -{73,39,-19}, -{73,39,-18}, -{73,39,-17}, -{73,39,-16}, -{73,39,-15}, -{73,39,-14}, -{73,39,-13}, -{73,39,-12}, -{73,39,-11}, -{73,39,-10}, -{73,39,-9}, -{73,39,-8}, -{73,39,-7}, -{73,39,-6}, -{73,39,-5}, -{73,39,-4}, -{73,39,-3}, -{73,39,-2}, -{73,39,-1}, -{73,39,0}, -{73,39,1}, -{73,39,2}, -{73,39,3}, -{73,39,4}, -{73,39,5}, -{73,39,6}, -{73,39,7}, -{73,39,8}, -{73,39,9}, -{73,39,10}, -{73,39,11}, -{73,39,12}, -{73,39,13}, -{73,39,14}, -{73,39,15}, -{73,39,16}, -{73,39,17}, -{73,39,18}, -{73,39,19}, -{73,40,-41}, -{73,40,-40}, -{73,40,-39}, -{73,40,-38}, -{73,40,-37}, -{73,40,-36}, -{73,40,-35}, -{73,40,-34}, -{73,40,-33}, -{73,40,-32}, -{73,40,-31}, -{73,40,-30}, -{73,40,-29}, -{73,40,-28}, -{73,40,-27}, -{73,40,-26}, -{73,40,-25}, -{73,40,-24}, -{73,40,-23}, -{73,40,-22}, -{73,40,-21}, -{73,40,-20}, -{73,40,-19}, -{73,40,-18}, -{73,40,-17}, -{73,40,-16}, -{73,40,-15}, -{73,40,-14}, -{73,40,-13}, -{73,40,-12}, -{73,40,-11}, -{73,40,-10}, -{73,40,-9}, -{73,40,-8}, -{73,40,-7}, -{73,40,-6}, -{73,40,-5}, -{73,40,-4}, -{73,40,-3}, -{73,40,-2}, -{73,40,-1}, -{73,40,0}, -{73,40,1}, -{73,40,2}, -{73,40,3}, -{73,40,4}, -{73,40,5}, -{73,40,6}, -{73,40,7}, -{73,40,8}, -{73,40,9}, -{73,40,10}, -{73,40,11}, -{73,40,12}, -{73,40,13}, -{73,40,14}, -{73,40,15}, -{73,41,-41}, -{73,41,-40}, -{73,41,-39}, -{73,41,-38}, -{73,41,-37}, -{73,41,-36}, -{73,41,-35}, -{73,41,-34}, -{73,41,-33}, -{73,41,-32}, -{73,41,-31}, -{73,41,-30}, -{73,41,-29}, -{73,41,-28}, -{73,41,-27}, -{73,41,-26}, -{73,41,-25}, -{73,41,-24}, -{73,41,-23}, -{73,41,-22}, -{73,41,-21}, -{73,41,-20}, -{73,41,-19}, -{73,41,-18}, -{73,41,-17}, -{73,41,-16}, -{73,41,-15}, -{73,41,-14}, -{73,41,-13}, -{73,41,-12}, -{73,41,-11}, -{73,41,-10}, -{73,41,-9}, -{73,41,-8}, -{73,41,-7}, -{73,41,-6}, -{73,41,-5}, -{73,41,-4}, -{73,41,-3}, -{73,41,-2}, -{73,41,-1}, -{73,41,0}, -{73,41,1}, -{73,41,2}, -{73,41,3}, -{73,41,4}, -{73,41,5}, -{73,41,6}, -{73,41,7}, -{73,41,8}, -{73,41,9}, -{73,41,10}, -{73,41,11}, -{73,41,12}, -{73,42,-41}, -{73,42,-40}, -{73,42,-39}, -{73,42,-38}, -{73,42,-37}, -{73,42,-36}, -{73,42,-35}, -{73,42,-34}, -{73,42,-33}, -{73,42,-32}, -{73,42,-31}, -{73,42,-30}, -{73,42,-29}, -{73,42,-28}, -{73,42,-27}, -{73,42,-26}, -{73,42,-25}, -{73,42,-24}, -{73,42,-23}, -{73,42,-22}, -{73,42,-21}, -{73,42,-20}, -{73,42,-19}, -{73,42,-18}, -{73,42,-17}, -{73,42,-16}, -{73,42,-15}, -{73,42,-14}, -{73,42,-13}, -{73,42,-12}, -{73,42,-11}, -{73,42,-10}, -{73,42,-9}, -{73,42,-8}, -{73,42,-7}, -{73,42,-6}, -{73,42,-5}, -{73,42,-4}, -{73,42,-3}, -{73,42,-2}, -{73,42,-1}, -{73,42,0}, -{73,42,1}, -{73,42,2}, -{73,42,3}, -{73,42,4}, -{73,42,5}, -{73,42,6}, -{73,42,7}, -{73,42,8}, -{73,42,9}, -{73,43,-41}, -{73,43,-40}, -{73,43,-39}, -{73,43,-38}, -{73,43,-37}, -{73,43,-36}, -{73,43,-35}, -{73,43,-34}, -{73,43,-33}, -{73,43,-32}, -{73,43,-31}, -{73,43,-30}, -{73,43,-29}, -{73,43,-28}, -{73,43,-27}, -{73,43,-26}, -{73,43,-25}, -{73,43,-24}, -{73,43,-23}, -{73,43,-22}, -{73,43,-21}, -{73,43,-20}, -{73,43,-19}, -{73,43,-18}, -{73,43,-17}, -{73,43,-16}, -{73,43,-15}, -{73,43,-14}, -{73,43,-13}, -{73,43,-12}, -{73,43,-11}, -{73,43,-10}, -{73,43,-9}, -{73,43,-8}, -{73,43,-7}, -{73,43,-6}, -{73,43,-5}, -{73,43,-4}, -{73,43,-3}, -{73,43,-2}, -{73,43,-1}, -{73,43,0}, -{73,43,1}, -{73,43,2}, -{73,43,3}, -{73,43,4}, -{73,43,5}, -{73,43,6}, -{73,44,-41}, -{73,44,-40}, -{73,44,-39}, -{73,44,-38}, -{73,44,-37}, -{73,44,-36}, -{73,44,-35}, -{73,44,-34}, -{73,44,-33}, -{73,44,-32}, -{73,44,-31}, -{73,44,-30}, -{73,44,-29}, -{73,44,-28}, -{73,44,-27}, -{73,44,-26}, -{73,44,-25}, -{73,44,-24}, -{73,44,-23}, -{73,44,-22}, -{73,44,-21}, -{73,44,-20}, -{73,44,-19}, -{73,44,-18}, -{73,44,-17}, -{73,44,-16}, -{73,44,-15}, -{73,44,-14}, -{73,44,-13}, -{73,44,-12}, -{73,44,-11}, -{73,44,-10}, -{73,44,-9}, -{73,44,-8}, -{73,44,-7}, -{73,44,-6}, -{73,44,-5}, -{73,44,-4}, -{73,44,-3}, -{73,44,-2}, -{73,44,-1}, -{73,44,0}, -{73,44,1}, -{73,44,2}, -{73,44,3}, -{73,45,-41}, -{73,45,-40}, -{73,45,-39}, -{73,45,-38}, -{73,45,-37}, -{73,45,-36}, -{73,45,-35}, -{73,45,-34}, -{73,45,-33}, -{73,45,-32}, -{73,45,-31}, -{73,45,-30}, -{73,45,-29}, -{73,45,-28}, -{73,45,-27}, -{73,45,-26}, -{73,45,-25}, -{73,45,-24}, -{73,45,-23}, -{73,45,-22}, -{73,45,-21}, -{73,45,-20}, -{73,45,-19}, -{73,45,-18}, -{73,45,-17}, -{73,45,-16}, -{73,45,-15}, -{73,45,-14}, -{73,45,-13}, -{73,45,-12}, -{73,45,-11}, -{73,45,-10}, -{73,45,-9}, -{73,45,-8}, -{73,45,-7}, -{73,45,-6}, -{73,45,-5}, -{73,45,-4}, -{73,45,-3}, -{73,45,-2}, -{73,45,-1}, -{73,45,0}, -{73,46,-41}, -{73,46,-40}, -{73,46,-39}, -{73,46,-38}, -{73,46,-37}, -{73,46,-36}, -{73,46,-35}, -{73,46,-34}, -{73,46,-33}, -{73,46,-32}, -{73,46,-31}, -{73,46,-30}, -{73,46,-29}, -{73,46,-28}, -{73,46,-27}, -{73,46,-26}, -{73,46,-25}, -{73,46,-24}, -{73,46,-23}, -{73,46,-22}, -{73,46,-21}, -{73,46,-20}, -{73,46,-19}, -{73,46,-18}, -{73,46,-17}, -{73,46,-16}, -{73,46,-15}, -{73,46,-14}, -{73,46,-13}, -{73,46,-12}, -{73,46,-11}, -{73,46,-10}, -{73,46,-9}, -{73,46,-8}, -{73,46,-7}, -{73,46,-6}, -{73,46,-5}, -{73,46,-4}, -{73,46,-3}, -{73,47,-41}, -{73,47,-40}, -{73,47,-39}, -{73,47,-38}, -{73,47,-37}, -{73,47,-36}, -{73,47,-35}, -{73,47,-34}, -{73,47,-33}, -{73,47,-32}, -{73,47,-31}, -{73,47,-30}, -{73,47,-29}, -{73,47,-28}, -{73,47,-27}, -{73,47,-26}, -{73,47,-25}, -{73,47,-24}, -{73,47,-23}, -{73,47,-22}, -{73,47,-21}, -{73,47,-20}, -{73,47,-19}, -{73,47,-18}, -{73,47,-17}, -{73,47,-16}, -{73,47,-15}, -{73,47,-14}, -{73,47,-13}, -{73,47,-12}, -{73,47,-11}, -{73,47,-10}, -{73,47,-9}, -{73,47,-8}, -{73,47,-7}, -{73,47,-6}, -{73,48,-41}, -{73,48,-40}, -{73,48,-39}, -{73,48,-38}, -{73,48,-37}, -{73,48,-36}, -{73,48,-35}, -{73,48,-34}, -{73,48,-33}, -{73,48,-32}, -{73,48,-31}, -{73,48,-30}, -{73,48,-29}, -{73,48,-28}, -{73,48,-27}, -{73,48,-26}, -{73,48,-25}, -{73,48,-24}, -{73,48,-23}, -{73,48,-22}, -{73,48,-21}, -{73,48,-20}, -{73,48,-19}, -{73,48,-18}, -{73,48,-17}, -{73,48,-16}, -{73,48,-15}, -{73,48,-14}, -{73,48,-13}, -{73,48,-12}, -{73,48,-11}, -{73,48,-10}, -{73,48,-9}, -{73,48,-8}, -{73,49,-41}, -{73,49,-40}, -{73,49,-39}, -{73,49,-38}, -{73,49,-37}, -{73,49,-36}, -{73,49,-35}, -{73,49,-34}, -{73,49,-33}, -{73,49,-32}, -{73,49,-31}, -{73,49,-30}, -{73,49,-29}, -{73,49,-28}, -{73,49,-27}, -{73,49,-26}, -{73,49,-25}, -{73,49,-24}, -{73,49,-23}, -{73,49,-22}, -{73,49,-21}, -{73,49,-20}, -{73,49,-19}, -{73,49,-18}, -{73,49,-17}, -{73,49,-16}, -{73,49,-15}, -{73,49,-14}, -{73,49,-13}, -{73,49,-12}, -{73,49,-11}, -{73,50,-41}, -{73,50,-40}, -{73,50,-39}, -{73,50,-38}, -{73,50,-37}, -{73,50,-36}, -{73,50,-35}, -{73,50,-34}, -{73,50,-33}, -{73,50,-32}, -{73,50,-31}, -{73,50,-30}, -{73,50,-29}, -{73,50,-28}, -{73,50,-27}, -{73,50,-26}, -{73,50,-25}, -{73,50,-24}, -{73,50,-23}, -{73,50,-22}, -{73,50,-21}, -{73,50,-20}, -{73,50,-19}, -{73,50,-18}, -{73,50,-17}, -{73,50,-16}, -{73,50,-15}, -{73,50,-14}, -{73,50,-13}, -{73,51,-41}, -{73,51,-40}, -{73,51,-39}, -{73,51,-38}, -{73,51,-37}, -{73,51,-36}, -{73,51,-35}, -{73,51,-34}, -{73,51,-33}, -{73,51,-32}, -{73,51,-31}, -{73,51,-30}, -{73,51,-29}, -{73,51,-28}, -{73,51,-27}, -{73,51,-26}, -{73,51,-25}, -{73,51,-24}, -{73,51,-23}, -{73,51,-22}, -{73,51,-21}, -{73,51,-20}, -{73,51,-19}, -{73,51,-18}, -{73,51,-17}, -{73,51,-16}, -{73,52,-41}, -{73,52,-40}, -{73,52,-39}, -{73,52,-38}, -{73,52,-37}, -{73,52,-36}, -{73,52,-35}, -{73,52,-34}, -{73,52,-33}, -{73,52,-32}, -{73,52,-31}, -{73,52,-30}, -{73,52,-29}, -{73,52,-28}, -{73,52,-27}, -{73,52,-26}, -{73,52,-25}, -{73,52,-24}, -{73,52,-23}, -{73,52,-22}, -{73,52,-21}, -{73,52,-20}, -{73,52,-19}, -{73,52,-18}, -{73,53,-41}, -{73,53,-40}, -{73,53,-39}, -{73,53,-38}, -{73,53,-37}, -{73,53,-36}, -{73,53,-35}, -{73,53,-34}, -{73,53,-33}, -{73,53,-32}, -{73,53,-31}, -{73,53,-30}, -{73,53,-29}, -{73,53,-28}, -{73,53,-27}, -{73,53,-26}, -{73,53,-25}, -{73,53,-24}, -{73,53,-23}, -{73,53,-22}, -{73,53,-21}, -{73,53,-20}, -{73,54,-41}, -{73,54,-40}, -{73,54,-39}, -{73,54,-38}, -{73,54,-37}, -{73,54,-36}, -{73,54,-35}, -{73,54,-34}, -{73,54,-33}, -{73,54,-32}, -{73,54,-31}, -{73,54,-30}, -{73,54,-29}, -{73,54,-28}, -{73,54,-27}, -{73,54,-26}, -{73,54,-25}, -{73,54,-24}, -{73,54,-23}, -{73,55,-41}, -{73,55,-40}, -{73,55,-39}, -{73,55,-38}, -{73,55,-37}, -{73,55,-36}, -{73,55,-35}, -{73,55,-34}, -{73,55,-33}, -{73,55,-32}, -{73,55,-31}, -{73,55,-30}, -{73,55,-29}, -{73,55,-28}, -{73,55,-27}, -{73,55,-26}, -{73,55,-25}, -{73,56,-41}, -{73,56,-40}, -{73,56,-39}, -{73,56,-38}, -{73,56,-37}, -{73,56,-36}, -{73,56,-35}, -{73,56,-34}, -{73,56,-33}, -{73,56,-32}, -{73,56,-31}, -{73,56,-30}, -{73,56,-29}, -{73,56,-28}, -{73,56,-27}, -{73,57,-41}, -{73,57,-40}, -{73,57,-39}, -{73,57,-38}, -{73,57,-37}, -{73,57,-36}, -{73,57,-35}, -{73,57,-34}, -{73,57,-33}, -{73,57,-32}, -{73,57,-31}, -{73,57,-30}, -{73,57,-29}, -{73,58,-41}, -{73,58,-40}, -{73,58,-39}, -{73,58,-38}, -{73,58,-37}, -{73,58,-36}, -{73,58,-35}, -{73,58,-34}, -{73,58,-33}, -{73,58,-32}, -{73,58,-31}, -{73,59,-41}, -{73,59,-40}, -{73,59,-39}, -{73,59,-38}, -{73,59,-37}, -{73,59,-36}, -{73,59,-35}, -{73,59,-34}, -{73,59,-33}, -{73,60,-41}, -{73,60,-40}, -{73,60,-39}, -{73,60,-38}, -{73,60,-37}, -{73,60,-36}, -{73,60,-35}, -{73,61,-40}, -{73,61,-39}, -{73,61,-38}, -{73,61,-37}, -{73,62,-40}, -{73,62,-39}, -{74,-74,68}, -{74,-74,69}, -{74,-74,70}, -{74,-74,71}, -{74,-74,72}, -{74,-73,64}, -{74,-73,65}, -{74,-73,66}, -{74,-73,67}, -{74,-73,68}, -{74,-73,69}, -{74,-73,70}, -{74,-73,71}, -{74,-73,72}, -{74,-72,59}, -{74,-72,60}, -{74,-72,61}, -{74,-72,62}, -{74,-72,63}, -{74,-72,64}, -{74,-72,65}, -{74,-72,66}, -{74,-72,67}, -{74,-72,68}, -{74,-72,69}, -{74,-72,70}, -{74,-72,71}, -{74,-72,72}, -{74,-71,56}, -{74,-71,57}, -{74,-71,58}, -{74,-71,59}, -{74,-71,60}, -{74,-71,61}, -{74,-71,62}, -{74,-71,63}, -{74,-71,64}, -{74,-71,65}, -{74,-71,66}, -{74,-71,67}, -{74,-71,68}, -{74,-71,69}, -{74,-71,70}, -{74,-71,71}, -{74,-71,72}, -{74,-70,52}, -{74,-70,53}, -{74,-70,54}, -{74,-70,55}, -{74,-70,56}, -{74,-70,57}, -{74,-70,58}, -{74,-70,59}, -{74,-70,60}, -{74,-70,61}, -{74,-70,62}, -{74,-70,63}, -{74,-70,64}, -{74,-70,65}, -{74,-70,66}, -{74,-70,67}, -{74,-70,68}, -{74,-70,69}, -{74,-70,70}, -{74,-70,71}, -{74,-70,72}, -{74,-69,49}, -{74,-69,50}, -{74,-69,51}, -{74,-69,52}, -{74,-69,53}, -{74,-69,54}, -{74,-69,55}, -{74,-69,56}, -{74,-69,57}, -{74,-69,58}, -{74,-69,59}, -{74,-69,60}, -{74,-69,61}, -{74,-69,62}, -{74,-69,63}, -{74,-69,64}, -{74,-69,65}, -{74,-69,66}, -{74,-69,67}, -{74,-69,68}, -{74,-69,69}, -{74,-69,70}, -{74,-69,71}, -{74,-69,72}, -{74,-68,46}, -{74,-68,47}, -{74,-68,48}, -{74,-68,49}, -{74,-68,50}, -{74,-68,51}, -{74,-68,52}, -{74,-68,53}, -{74,-68,54}, -{74,-68,55}, -{74,-68,56}, -{74,-68,57}, -{74,-68,58}, -{74,-68,59}, -{74,-68,60}, -{74,-68,61}, -{74,-68,62}, -{74,-68,63}, -{74,-68,64}, -{74,-68,65}, -{74,-68,66}, -{74,-68,67}, -{74,-68,68}, -{74,-68,69}, -{74,-68,70}, -{74,-68,71}, -{74,-68,72}, -{74,-67,43}, -{74,-67,44}, -{74,-67,45}, -{74,-67,46}, -{74,-67,47}, -{74,-67,48}, -{74,-67,49}, -{74,-67,50}, -{74,-67,51}, -{74,-67,52}, -{74,-67,53}, -{74,-67,54}, -{74,-67,55}, -{74,-67,56}, -{74,-67,57}, -{74,-67,58}, -{74,-67,59}, -{74,-67,60}, -{74,-67,61}, -{74,-67,62}, -{74,-67,63}, -{74,-67,64}, -{74,-67,65}, -{74,-67,66}, -{74,-67,67}, -{74,-67,68}, -{74,-67,69}, -{74,-67,70}, -{74,-67,71}, -{74,-67,72}, -{74,-66,40}, -{74,-66,41}, -{74,-66,42}, -{74,-66,43}, -{74,-66,44}, -{74,-66,45}, -{74,-66,46}, -{74,-66,47}, -{74,-66,48}, -{74,-66,49}, -{74,-66,50}, -{74,-66,51}, -{74,-66,52}, -{74,-66,53}, -{74,-66,54}, -{74,-66,55}, -{74,-66,56}, -{74,-66,57}, -{74,-66,58}, -{74,-66,59}, -{74,-66,60}, -{74,-66,61}, -{74,-66,62}, -{74,-66,63}, -{74,-66,64}, -{74,-66,65}, -{74,-66,66}, -{74,-66,67}, -{74,-66,68}, -{74,-66,69}, -{74,-66,70}, -{74,-66,71}, -{74,-66,72}, -{74,-65,37}, -{74,-65,38}, -{74,-65,39}, -{74,-65,40}, -{74,-65,41}, -{74,-65,42}, -{74,-65,43}, -{74,-65,44}, -{74,-65,45}, -{74,-65,46}, -{74,-65,47}, -{74,-65,48}, -{74,-65,49}, -{74,-65,50}, -{74,-65,51}, -{74,-65,52}, -{74,-65,53}, -{74,-65,54}, -{74,-65,55}, -{74,-65,56}, -{74,-65,57}, -{74,-65,58}, -{74,-65,59}, -{74,-65,60}, -{74,-65,61}, -{74,-65,62}, -{74,-65,63}, -{74,-65,64}, -{74,-65,65}, -{74,-65,66}, -{74,-65,67}, -{74,-65,68}, -{74,-65,69}, -{74,-65,70}, -{74,-65,71}, -{74,-65,72}, -{74,-64,34}, -{74,-64,35}, -{74,-64,36}, -{74,-64,37}, -{74,-64,38}, -{74,-64,39}, -{74,-64,40}, -{74,-64,41}, -{74,-64,42}, -{74,-64,43}, -{74,-64,44}, -{74,-64,45}, -{74,-64,46}, -{74,-64,47}, -{74,-64,48}, -{74,-64,49}, -{74,-64,50}, -{74,-64,51}, -{74,-64,52}, -{74,-64,53}, -{74,-64,54}, -{74,-64,55}, -{74,-64,56}, -{74,-64,57}, -{74,-64,58}, -{74,-64,59}, -{74,-64,60}, -{74,-64,61}, -{74,-64,62}, -{74,-64,63}, -{74,-64,64}, -{74,-64,65}, -{74,-64,66}, -{74,-64,67}, -{74,-64,68}, -{74,-64,69}, -{74,-64,70}, -{74,-64,71}, -{74,-64,72}, -{74,-63,32}, -{74,-63,33}, -{74,-63,34}, -{74,-63,35}, -{74,-63,36}, -{74,-63,37}, -{74,-63,38}, -{74,-63,39}, -{74,-63,40}, -{74,-63,41}, -{74,-63,42}, -{74,-63,43}, -{74,-63,44}, -{74,-63,45}, -{74,-63,46}, -{74,-63,47}, -{74,-63,48}, -{74,-63,49}, -{74,-63,50}, -{74,-63,51}, -{74,-63,52}, -{74,-63,53}, -{74,-63,54}, -{74,-63,55}, -{74,-63,56}, -{74,-63,57}, -{74,-63,58}, -{74,-63,59}, -{74,-63,60}, -{74,-63,61}, -{74,-63,62}, -{74,-63,63}, -{74,-63,64}, -{74,-63,65}, -{74,-63,66}, -{74,-63,67}, -{74,-63,68}, -{74,-63,69}, -{74,-63,70}, -{74,-63,71}, -{74,-63,72}, -{74,-62,29}, -{74,-62,30}, -{74,-62,31}, -{74,-62,32}, -{74,-62,33}, -{74,-62,34}, -{74,-62,35}, -{74,-62,36}, -{74,-62,37}, -{74,-62,38}, -{74,-62,39}, -{74,-62,40}, -{74,-62,41}, -{74,-62,42}, -{74,-62,43}, -{74,-62,44}, -{74,-62,45}, -{74,-62,46}, -{74,-62,47}, -{74,-62,48}, -{74,-62,49}, -{74,-62,50}, -{74,-62,51}, -{74,-62,52}, -{74,-62,53}, -{74,-62,54}, -{74,-62,55}, -{74,-62,56}, -{74,-62,57}, -{74,-62,58}, -{74,-62,59}, -{74,-62,60}, -{74,-62,61}, -{74,-62,62}, -{74,-62,63}, -{74,-62,64}, -{74,-62,65}, -{74,-62,66}, -{74,-62,67}, -{74,-62,68}, -{74,-62,69}, -{74,-62,70}, -{74,-62,71}, -{74,-62,72}, -{74,-61,27}, -{74,-61,28}, -{74,-61,29}, -{74,-61,30}, -{74,-61,31}, -{74,-61,32}, -{74,-61,33}, -{74,-61,34}, -{74,-61,35}, -{74,-61,36}, -{74,-61,37}, -{74,-61,38}, -{74,-61,39}, -{74,-61,40}, -{74,-61,41}, -{74,-61,42}, -{74,-61,43}, -{74,-61,44}, -{74,-61,45}, -{74,-61,46}, -{74,-61,47}, -{74,-61,48}, -{74,-61,49}, -{74,-61,50}, -{74,-61,51}, -{74,-61,52}, -{74,-61,53}, -{74,-61,54}, -{74,-61,55}, -{74,-61,56}, -{74,-61,57}, -{74,-61,58}, -{74,-61,59}, -{74,-61,60}, -{74,-61,61}, -{74,-61,62}, -{74,-61,63}, -{74,-61,64}, -{74,-61,65}, -{74,-61,66}, -{74,-61,67}, -{74,-61,68}, -{74,-61,69}, -{74,-61,70}, -{74,-61,71}, -{74,-61,72}, -{74,-60,25}, -{74,-60,26}, -{74,-60,27}, -{74,-60,28}, -{74,-60,29}, -{74,-60,30}, -{74,-60,31}, -{74,-60,32}, -{74,-60,33}, -{74,-60,34}, -{74,-60,35}, -{74,-60,36}, -{74,-60,37}, -{74,-60,38}, -{74,-60,39}, -{74,-60,40}, -{74,-60,41}, -{74,-60,42}, -{74,-60,43}, -{74,-60,44}, -{74,-60,45}, -{74,-60,46}, -{74,-60,47}, -{74,-60,48}, -{74,-60,49}, -{74,-60,50}, -{74,-60,51}, -{74,-60,52}, -{74,-60,53}, -{74,-60,54}, -{74,-60,55}, -{74,-60,56}, -{74,-60,57}, -{74,-60,58}, -{74,-60,59}, -{74,-60,60}, -{74,-60,61}, -{74,-60,62}, -{74,-60,63}, -{74,-60,64}, -{74,-60,65}, -{74,-60,66}, -{74,-60,67}, -{74,-60,68}, -{74,-60,69}, -{74,-60,70}, -{74,-60,71}, -{74,-60,72}, -{74,-59,22}, -{74,-59,23}, -{74,-59,24}, -{74,-59,25}, -{74,-59,26}, -{74,-59,27}, -{74,-59,28}, -{74,-59,29}, -{74,-59,30}, -{74,-59,31}, -{74,-59,32}, -{74,-59,33}, -{74,-59,34}, -{74,-59,35}, -{74,-59,36}, -{74,-59,37}, -{74,-59,38}, -{74,-59,39}, -{74,-59,40}, -{74,-59,41}, -{74,-59,42}, -{74,-59,43}, -{74,-59,44}, -{74,-59,45}, -{74,-59,46}, -{74,-59,47}, -{74,-59,48}, -{74,-59,49}, -{74,-59,50}, -{74,-59,51}, -{74,-59,52}, -{74,-59,53}, -{74,-59,54}, -{74,-59,55}, -{74,-59,56}, -{74,-59,57}, -{74,-59,58}, -{74,-59,59}, -{74,-59,60}, -{74,-59,61}, -{74,-59,62}, -{74,-59,63}, -{74,-59,64}, -{74,-59,65}, -{74,-59,66}, -{74,-59,67}, -{74,-59,68}, -{74,-59,69}, -{74,-59,70}, -{74,-59,71}, -{74,-59,72}, -{74,-59,73}, -{74,-58,20}, -{74,-58,21}, -{74,-58,22}, -{74,-58,23}, -{74,-58,24}, -{74,-58,25}, -{74,-58,26}, -{74,-58,27}, -{74,-58,28}, -{74,-58,29}, -{74,-58,30}, -{74,-58,31}, -{74,-58,32}, -{74,-58,33}, -{74,-58,34}, -{74,-58,35}, -{74,-58,36}, -{74,-58,37}, -{74,-58,38}, -{74,-58,39}, -{74,-58,40}, -{74,-58,41}, -{74,-58,42}, -{74,-58,43}, -{74,-58,44}, -{74,-58,45}, -{74,-58,46}, -{74,-58,47}, -{74,-58,48}, -{74,-58,49}, -{74,-58,50}, -{74,-58,51}, -{74,-58,52}, -{74,-58,53}, -{74,-58,54}, -{74,-58,55}, -{74,-58,56}, -{74,-58,57}, -{74,-58,58}, -{74,-58,59}, -{74,-58,60}, -{74,-58,61}, -{74,-58,62}, -{74,-58,63}, -{74,-58,64}, -{74,-58,65}, -{74,-58,66}, -{74,-58,67}, -{74,-58,68}, -{74,-58,69}, -{74,-58,70}, -{74,-58,71}, -{74,-58,72}, -{74,-58,73}, -{74,-57,18}, -{74,-57,19}, -{74,-57,20}, -{74,-57,21}, -{74,-57,22}, -{74,-57,23}, -{74,-57,24}, -{74,-57,25}, -{74,-57,26}, -{74,-57,27}, -{74,-57,28}, -{74,-57,29}, -{74,-57,30}, -{74,-57,31}, -{74,-57,32}, -{74,-57,33}, -{74,-57,34}, -{74,-57,35}, -{74,-57,36}, -{74,-57,37}, -{74,-57,38}, -{74,-57,39}, -{74,-57,40}, -{74,-57,41}, -{74,-57,42}, -{74,-57,43}, -{74,-57,44}, -{74,-57,45}, -{74,-57,46}, -{74,-57,47}, -{74,-57,48}, -{74,-57,49}, -{74,-57,50}, -{74,-57,51}, -{74,-57,52}, -{74,-57,53}, -{74,-57,54}, -{74,-57,55}, -{74,-57,56}, -{74,-57,57}, -{74,-57,58}, -{74,-57,59}, -{74,-57,60}, -{74,-57,61}, -{74,-57,62}, -{74,-57,63}, -{74,-57,64}, -{74,-57,65}, -{74,-57,66}, -{74,-57,67}, -{74,-57,68}, -{74,-57,69}, -{74,-57,70}, -{74,-57,71}, -{74,-57,72}, -{74,-57,73}, -{74,-56,16}, -{74,-56,17}, -{74,-56,18}, -{74,-56,19}, -{74,-56,20}, -{74,-56,21}, -{74,-56,22}, -{74,-56,23}, -{74,-56,24}, -{74,-56,25}, -{74,-56,26}, -{74,-56,27}, -{74,-56,28}, -{74,-56,29}, -{74,-56,30}, -{74,-56,31}, -{74,-56,32}, -{74,-56,33}, -{74,-56,34}, -{74,-56,35}, -{74,-56,36}, -{74,-56,37}, -{74,-56,38}, -{74,-56,39}, -{74,-56,40}, -{74,-56,41}, -{74,-56,42}, -{74,-56,43}, -{74,-56,44}, -{74,-56,45}, -{74,-56,46}, -{74,-56,47}, -{74,-56,48}, -{74,-56,49}, -{74,-56,50}, -{74,-56,51}, -{74,-56,52}, -{74,-56,53}, -{74,-56,54}, -{74,-56,55}, -{74,-56,56}, -{74,-56,57}, -{74,-56,58}, -{74,-56,59}, -{74,-56,60}, -{74,-56,61}, -{74,-56,62}, -{74,-56,63}, -{74,-56,64}, -{74,-56,65}, -{74,-56,66}, -{74,-56,67}, -{74,-56,68}, -{74,-56,69}, -{74,-56,70}, -{74,-56,71}, -{74,-56,72}, -{74,-56,73}, -{74,-55,14}, -{74,-55,15}, -{74,-55,16}, -{74,-55,17}, -{74,-55,18}, -{74,-55,19}, -{74,-55,20}, -{74,-55,21}, -{74,-55,22}, -{74,-55,23}, -{74,-55,24}, -{74,-55,25}, -{74,-55,26}, -{74,-55,27}, -{74,-55,28}, -{74,-55,29}, -{74,-55,30}, -{74,-55,31}, -{74,-55,32}, -{74,-55,33}, -{74,-55,34}, -{74,-55,35}, -{74,-55,36}, -{74,-55,37}, -{74,-55,38}, -{74,-55,39}, -{74,-55,40}, -{74,-55,41}, -{74,-55,42}, -{74,-55,43}, -{74,-55,44}, -{74,-55,45}, -{74,-55,46}, -{74,-55,47}, -{74,-55,48}, -{74,-55,49}, -{74,-55,50}, -{74,-55,51}, -{74,-55,52}, -{74,-55,53}, -{74,-55,54}, -{74,-55,55}, -{74,-55,56}, -{74,-55,57}, -{74,-55,58}, -{74,-55,59}, -{74,-55,60}, -{74,-55,61}, -{74,-55,62}, -{74,-55,63}, -{74,-55,64}, -{74,-55,65}, -{74,-55,66}, -{74,-55,67}, -{74,-55,68}, -{74,-55,69}, -{74,-55,70}, -{74,-55,71}, -{74,-55,72}, -{74,-55,73}, -{74,-54,12}, -{74,-54,13}, -{74,-54,14}, -{74,-54,15}, -{74,-54,16}, -{74,-54,17}, -{74,-54,18}, -{74,-54,19}, -{74,-54,20}, -{74,-54,21}, -{74,-54,22}, -{74,-54,23}, -{74,-54,24}, -{74,-54,25}, -{74,-54,26}, -{74,-54,27}, -{74,-54,28}, -{74,-54,29}, -{74,-54,30}, -{74,-54,31}, -{74,-54,32}, -{74,-54,33}, -{74,-54,34}, -{74,-54,35}, -{74,-54,36}, -{74,-54,37}, -{74,-54,38}, -{74,-54,39}, -{74,-54,40}, -{74,-54,41}, -{74,-54,42}, -{74,-54,43}, -{74,-54,44}, -{74,-54,45}, -{74,-54,46}, -{74,-54,47}, -{74,-54,48}, -{74,-54,49}, -{74,-54,50}, -{74,-54,51}, -{74,-54,52}, -{74,-54,53}, -{74,-54,54}, -{74,-54,55}, -{74,-54,56}, -{74,-54,57}, -{74,-54,58}, -{74,-54,59}, -{74,-54,60}, -{74,-54,61}, -{74,-54,62}, -{74,-54,63}, -{74,-54,64}, -{74,-54,65}, -{74,-54,66}, -{74,-54,67}, -{74,-54,68}, -{74,-54,69}, -{74,-54,70}, -{74,-54,71}, -{74,-54,72}, -{74,-54,73}, -{74,-53,10}, -{74,-53,11}, -{74,-53,12}, -{74,-53,13}, -{74,-53,14}, -{74,-53,15}, -{74,-53,16}, -{74,-53,17}, -{74,-53,18}, -{74,-53,19}, -{74,-53,20}, -{74,-53,21}, -{74,-53,22}, -{74,-53,23}, -{74,-53,24}, -{74,-53,25}, -{74,-53,26}, -{74,-53,27}, -{74,-53,28}, -{74,-53,29}, -{74,-53,30}, -{74,-53,31}, -{74,-53,32}, -{74,-53,33}, -{74,-53,34}, -{74,-53,35}, -{74,-53,36}, -{74,-53,37}, -{74,-53,38}, -{74,-53,39}, -{74,-53,40}, -{74,-53,41}, -{74,-53,42}, -{74,-53,43}, -{74,-53,44}, -{74,-53,45}, -{74,-53,46}, -{74,-53,47}, -{74,-53,48}, -{74,-53,49}, -{74,-53,50}, -{74,-53,51}, -{74,-53,52}, -{74,-53,53}, -{74,-53,54}, -{74,-53,55}, -{74,-53,56}, -{74,-53,57}, -{74,-53,58}, -{74,-53,59}, -{74,-53,60}, -{74,-53,61}, -{74,-53,62}, -{74,-53,63}, -{74,-53,64}, -{74,-53,65}, -{74,-53,66}, -{74,-53,67}, -{74,-53,68}, -{74,-53,69}, -{74,-53,70}, -{74,-53,71}, -{74,-53,72}, -{74,-53,73}, -{74,-52,8}, -{74,-52,9}, -{74,-52,10}, -{74,-52,11}, -{74,-52,12}, -{74,-52,13}, -{74,-52,14}, -{74,-52,15}, -{74,-52,16}, -{74,-52,17}, -{74,-52,18}, -{74,-52,19}, -{74,-52,20}, -{74,-52,21}, -{74,-52,22}, -{74,-52,23}, -{74,-52,24}, -{74,-52,25}, -{74,-52,26}, -{74,-52,27}, -{74,-52,28}, -{74,-52,29}, -{74,-52,30}, -{74,-52,31}, -{74,-52,32}, -{74,-52,33}, -{74,-52,34}, -{74,-52,35}, -{74,-52,36}, -{74,-52,37}, -{74,-52,38}, -{74,-52,39}, -{74,-52,40}, -{74,-52,41}, -{74,-52,42}, -{74,-52,43}, -{74,-52,44}, -{74,-52,45}, -{74,-52,46}, -{74,-52,47}, -{74,-52,48}, -{74,-52,49}, -{74,-52,50}, -{74,-52,51}, -{74,-52,52}, -{74,-52,53}, -{74,-52,54}, -{74,-52,55}, -{74,-52,56}, -{74,-52,57}, -{74,-52,58}, -{74,-52,59}, -{74,-52,60}, -{74,-52,61}, -{74,-52,62}, -{74,-52,63}, -{74,-52,64}, -{74,-52,65}, -{74,-52,66}, -{74,-52,67}, -{74,-52,68}, -{74,-52,69}, -{74,-52,70}, -{74,-52,71}, -{74,-52,72}, -{74,-52,73}, -{74,-51,6}, -{74,-51,7}, -{74,-51,8}, -{74,-51,9}, -{74,-51,10}, -{74,-51,11}, -{74,-51,12}, -{74,-51,13}, -{74,-51,14}, -{74,-51,15}, -{74,-51,16}, -{74,-51,17}, -{74,-51,18}, -{74,-51,19}, -{74,-51,20}, -{74,-51,21}, -{74,-51,22}, -{74,-51,23}, -{74,-51,24}, -{74,-51,25}, -{74,-51,26}, -{74,-51,27}, -{74,-51,28}, -{74,-51,29}, -{74,-51,30}, -{74,-51,31}, -{74,-51,32}, -{74,-51,33}, -{74,-51,34}, -{74,-51,35}, -{74,-51,36}, -{74,-51,37}, -{74,-51,38}, -{74,-51,39}, -{74,-51,40}, -{74,-51,41}, -{74,-51,42}, -{74,-51,43}, -{74,-51,44}, -{74,-51,45}, -{74,-51,46}, -{74,-51,47}, -{74,-51,48}, -{74,-51,49}, -{74,-51,50}, -{74,-51,51}, -{74,-51,52}, -{74,-51,53}, -{74,-51,54}, -{74,-51,55}, -{74,-51,56}, -{74,-51,57}, -{74,-51,58}, -{74,-51,59}, -{74,-51,60}, -{74,-51,61}, -{74,-51,62}, -{74,-51,63}, -{74,-51,64}, -{74,-51,65}, -{74,-51,66}, -{74,-51,67}, -{74,-51,68}, -{74,-51,69}, -{74,-51,70}, -{74,-51,71}, -{74,-51,72}, -{74,-51,73}, -{74,-50,4}, -{74,-50,5}, -{74,-50,6}, -{74,-50,7}, -{74,-50,8}, -{74,-50,9}, -{74,-50,10}, -{74,-50,11}, -{74,-50,12}, -{74,-50,13}, -{74,-50,14}, -{74,-50,15}, -{74,-50,16}, -{74,-50,17}, -{74,-50,18}, -{74,-50,19}, -{74,-50,20}, -{74,-50,21}, -{74,-50,22}, -{74,-50,23}, -{74,-50,24}, -{74,-50,25}, -{74,-50,26}, -{74,-50,27}, -{74,-50,28}, -{74,-50,29}, -{74,-50,30}, -{74,-50,31}, -{74,-50,32}, -{74,-50,33}, -{74,-50,34}, -{74,-50,35}, -{74,-50,36}, -{74,-50,37}, -{74,-50,38}, -{74,-50,39}, -{74,-50,40}, -{74,-50,41}, -{74,-50,42}, -{74,-50,43}, -{74,-50,44}, -{74,-50,45}, -{74,-50,46}, -{74,-50,47}, -{74,-50,48}, -{74,-50,49}, -{74,-50,50}, -{74,-50,51}, -{74,-50,52}, -{74,-50,53}, -{74,-50,54}, -{74,-50,55}, -{74,-50,56}, -{74,-50,57}, -{74,-50,58}, -{74,-50,59}, -{74,-50,60}, -{74,-50,61}, -{74,-50,62}, -{74,-50,63}, -{74,-50,64}, -{74,-50,65}, -{74,-50,66}, -{74,-50,67}, -{74,-50,68}, -{74,-50,69}, -{74,-50,70}, -{74,-50,71}, -{74,-50,72}, -{74,-50,73}, -{74,-49,3}, -{74,-49,4}, -{74,-49,5}, -{74,-49,6}, -{74,-49,7}, -{74,-49,8}, -{74,-49,9}, -{74,-49,10}, -{74,-49,11}, -{74,-49,12}, -{74,-49,13}, -{74,-49,14}, -{74,-49,15}, -{74,-49,16}, -{74,-49,17}, -{74,-49,18}, -{74,-49,19}, -{74,-49,20}, -{74,-49,21}, -{74,-49,22}, -{74,-49,23}, -{74,-49,24}, -{74,-49,25}, -{74,-49,26}, -{74,-49,27}, -{74,-49,28}, -{74,-49,29}, -{74,-49,30}, -{74,-49,31}, -{74,-49,32}, -{74,-49,33}, -{74,-49,34}, -{74,-49,35}, -{74,-49,36}, -{74,-49,37}, -{74,-49,38}, -{74,-49,39}, -{74,-49,40}, -{74,-49,41}, -{74,-49,42}, -{74,-49,43}, -{74,-49,44}, -{74,-49,45}, -{74,-49,46}, -{74,-49,47}, -{74,-49,48}, -{74,-49,49}, -{74,-49,50}, -{74,-49,51}, -{74,-49,52}, -{74,-49,53}, -{74,-49,54}, -{74,-49,55}, -{74,-49,56}, -{74,-49,57}, -{74,-49,58}, -{74,-49,59}, -{74,-49,60}, -{74,-49,61}, -{74,-49,62}, -{74,-49,63}, -{74,-49,64}, -{74,-49,65}, -{74,-49,66}, -{74,-49,67}, -{74,-49,68}, -{74,-49,69}, -{74,-49,70}, -{74,-49,71}, -{74,-49,72}, -{74,-49,73}, -{74,-48,1}, -{74,-48,2}, -{74,-48,3}, -{74,-48,4}, -{74,-48,5}, -{74,-48,6}, -{74,-48,7}, -{74,-48,8}, -{74,-48,9}, -{74,-48,10}, -{74,-48,11}, -{74,-48,12}, -{74,-48,13}, -{74,-48,14}, -{74,-48,15}, -{74,-48,16}, -{74,-48,17}, -{74,-48,18}, -{74,-48,19}, -{74,-48,20}, -{74,-48,21}, -{74,-48,22}, -{74,-48,23}, -{74,-48,24}, -{74,-48,25}, -{74,-48,26}, -{74,-48,27}, -{74,-48,28}, -{74,-48,29}, -{74,-48,30}, -{74,-48,31}, -{74,-48,32}, -{74,-48,33}, -{74,-48,34}, -{74,-48,35}, -{74,-48,36}, -{74,-48,37}, -{74,-48,38}, -{74,-48,39}, -{74,-48,40}, -{74,-48,41}, -{74,-48,42}, -{74,-48,43}, -{74,-48,44}, -{74,-48,45}, -{74,-48,46}, -{74,-48,47}, -{74,-48,48}, -{74,-48,49}, -{74,-48,50}, -{74,-48,51}, -{74,-48,52}, -{74,-48,53}, -{74,-48,54}, -{74,-48,55}, -{74,-48,56}, -{74,-48,57}, -{74,-48,58}, -{74,-48,59}, -{74,-48,60}, -{74,-48,61}, -{74,-48,62}, -{74,-48,63}, -{74,-48,64}, -{74,-48,65}, -{74,-48,66}, -{74,-48,67}, -{74,-48,68}, -{74,-48,69}, -{74,-48,70}, -{74,-48,71}, -{74,-48,72}, -{74,-48,73}, -{74,-47,-1}, -{74,-47,0}, -{74,-47,1}, -{74,-47,2}, -{74,-47,3}, -{74,-47,4}, -{74,-47,5}, -{74,-47,6}, -{74,-47,7}, -{74,-47,8}, -{74,-47,9}, -{74,-47,10}, -{74,-47,11}, -{74,-47,12}, -{74,-47,13}, -{74,-47,14}, -{74,-47,15}, -{74,-47,16}, -{74,-47,17}, -{74,-47,18}, -{74,-47,19}, -{74,-47,20}, -{74,-47,21}, -{74,-47,22}, -{74,-47,23}, -{74,-47,24}, -{74,-47,25}, -{74,-47,26}, -{74,-47,27}, -{74,-47,28}, -{74,-47,29}, -{74,-47,30}, -{74,-47,31}, -{74,-47,32}, -{74,-47,33}, -{74,-47,34}, -{74,-47,35}, -{74,-47,36}, -{74,-47,37}, -{74,-47,38}, -{74,-47,39}, -{74,-47,40}, -{74,-47,41}, -{74,-47,42}, -{74,-47,43}, -{74,-47,44}, -{74,-47,45}, -{74,-47,46}, -{74,-47,47}, -{74,-47,48}, -{74,-47,49}, -{74,-47,50}, -{74,-47,51}, -{74,-47,52}, -{74,-47,53}, -{74,-47,54}, -{74,-47,55}, -{74,-47,56}, -{74,-47,57}, -{74,-47,58}, -{74,-47,59}, -{74,-47,60}, -{74,-47,61}, -{74,-47,62}, -{74,-47,63}, -{74,-47,64}, -{74,-47,65}, -{74,-47,66}, -{74,-47,67}, -{74,-47,68}, -{74,-47,69}, -{74,-47,70}, -{74,-47,71}, -{74,-47,72}, -{74,-47,73}, -{74,-46,-3}, -{74,-46,-2}, -{74,-46,-1}, -{74,-46,0}, -{74,-46,1}, -{74,-46,2}, -{74,-46,3}, -{74,-46,4}, -{74,-46,5}, -{74,-46,6}, -{74,-46,7}, -{74,-46,8}, -{74,-46,9}, -{74,-46,10}, -{74,-46,11}, -{74,-46,12}, -{74,-46,13}, -{74,-46,14}, -{74,-46,15}, -{74,-46,16}, -{74,-46,17}, -{74,-46,18}, -{74,-46,19}, -{74,-46,20}, -{74,-46,21}, -{74,-46,22}, -{74,-46,23}, -{74,-46,24}, -{74,-46,25}, -{74,-46,26}, -{74,-46,27}, -{74,-46,28}, -{74,-46,29}, -{74,-46,30}, -{74,-46,31}, -{74,-46,32}, -{74,-46,33}, -{74,-46,34}, -{74,-46,35}, -{74,-46,36}, -{74,-46,37}, -{74,-46,38}, -{74,-46,39}, -{74,-46,40}, -{74,-46,41}, -{74,-46,42}, -{74,-46,43}, -{74,-46,44}, -{74,-46,45}, -{74,-46,46}, -{74,-46,47}, -{74,-46,48}, -{74,-46,49}, -{74,-46,50}, -{74,-46,51}, -{74,-46,52}, -{74,-46,53}, -{74,-46,54}, -{74,-46,55}, -{74,-46,56}, -{74,-46,57}, -{74,-46,58}, -{74,-46,59}, -{74,-46,60}, -{74,-46,61}, -{74,-46,62}, -{74,-46,63}, -{74,-46,64}, -{74,-46,65}, -{74,-46,66}, -{74,-46,67}, -{74,-46,68}, -{74,-46,69}, -{74,-46,70}, -{74,-46,71}, -{74,-46,72}, -{74,-46,73}, -{74,-45,-4}, -{74,-45,-3}, -{74,-45,-2}, -{74,-45,-1}, -{74,-45,0}, -{74,-45,1}, -{74,-45,2}, -{74,-45,3}, -{74,-45,4}, -{74,-45,5}, -{74,-45,6}, -{74,-45,7}, -{74,-45,8}, -{74,-45,9}, -{74,-45,10}, -{74,-45,11}, -{74,-45,12}, -{74,-45,13}, -{74,-45,14}, -{74,-45,15}, -{74,-45,16}, -{74,-45,17}, -{74,-45,18}, -{74,-45,19}, -{74,-45,20}, -{74,-45,21}, -{74,-45,22}, -{74,-45,23}, -{74,-45,24}, -{74,-45,25}, -{74,-45,26}, -{74,-45,27}, -{74,-45,28}, -{74,-45,29}, -{74,-45,30}, -{74,-45,31}, -{74,-45,32}, -{74,-45,33}, -{74,-45,34}, -{74,-45,35}, -{74,-45,36}, -{74,-45,37}, -{74,-45,38}, -{74,-45,39}, -{74,-45,40}, -{74,-45,41}, -{74,-45,42}, -{74,-45,43}, -{74,-45,44}, -{74,-45,45}, -{74,-45,46}, -{74,-45,47}, -{74,-45,48}, -{74,-45,49}, -{74,-45,50}, -{74,-45,51}, -{74,-45,52}, -{74,-45,53}, -{74,-45,54}, -{74,-45,55}, -{74,-45,56}, -{74,-45,57}, -{74,-45,58}, -{74,-45,59}, -{74,-45,60}, -{74,-45,61}, -{74,-45,62}, -{74,-45,63}, -{74,-45,64}, -{74,-45,65}, -{74,-45,66}, -{74,-45,67}, -{74,-45,68}, -{74,-45,69}, -{74,-45,70}, -{74,-45,71}, -{74,-45,72}, -{74,-45,73}, -{74,-44,-6}, -{74,-44,-5}, -{74,-44,-4}, -{74,-44,-3}, -{74,-44,-2}, -{74,-44,-1}, -{74,-44,0}, -{74,-44,1}, -{74,-44,2}, -{74,-44,3}, -{74,-44,4}, -{74,-44,5}, -{74,-44,6}, -{74,-44,7}, -{74,-44,8}, -{74,-44,9}, -{74,-44,10}, -{74,-44,11}, -{74,-44,12}, -{74,-44,13}, -{74,-44,14}, -{74,-44,15}, -{74,-44,16}, -{74,-44,17}, -{74,-44,18}, -{74,-44,19}, -{74,-44,20}, -{74,-44,21}, -{74,-44,22}, -{74,-44,23}, -{74,-44,24}, -{74,-44,25}, -{74,-44,26}, -{74,-44,27}, -{74,-44,28}, -{74,-44,29}, -{74,-44,30}, -{74,-44,31}, -{74,-44,32}, -{74,-44,33}, -{74,-44,34}, -{74,-44,35}, -{74,-44,36}, -{74,-44,37}, -{74,-44,38}, -{74,-44,39}, -{74,-44,40}, -{74,-44,41}, -{74,-44,42}, -{74,-44,43}, -{74,-44,44}, -{74,-44,45}, -{74,-44,46}, -{74,-44,47}, -{74,-44,48}, -{74,-44,49}, -{74,-44,50}, -{74,-44,51}, -{74,-44,52}, -{74,-44,53}, -{74,-44,54}, -{74,-44,55}, -{74,-44,56}, -{74,-44,57}, -{74,-44,58}, -{74,-44,59}, -{74,-44,60}, -{74,-44,61}, -{74,-44,62}, -{74,-44,63}, -{74,-44,64}, -{74,-44,65}, -{74,-44,66}, -{74,-44,67}, -{74,-44,68}, -{74,-44,69}, -{74,-44,70}, -{74,-44,71}, -{74,-44,72}, -{74,-44,73}, -{74,-43,-8}, -{74,-43,-7}, -{74,-43,-6}, -{74,-43,-5}, -{74,-43,-4}, -{74,-43,-3}, -{74,-43,-2}, -{74,-43,-1}, -{74,-43,0}, -{74,-43,1}, -{74,-43,2}, -{74,-43,3}, -{74,-43,4}, -{74,-43,5}, -{74,-43,6}, -{74,-43,7}, -{74,-43,8}, -{74,-43,9}, -{74,-43,10}, -{74,-43,11}, -{74,-43,12}, -{74,-43,13}, -{74,-43,14}, -{74,-43,15}, -{74,-43,16}, -{74,-43,17}, -{74,-43,18}, -{74,-43,19}, -{74,-43,20}, -{74,-43,21}, -{74,-43,22}, -{74,-43,23}, -{74,-43,24}, -{74,-43,25}, -{74,-43,26}, -{74,-43,27}, -{74,-43,28}, -{74,-43,29}, -{74,-43,30}, -{74,-43,31}, -{74,-43,32}, -{74,-43,33}, -{74,-43,34}, -{74,-43,35}, -{74,-43,36}, -{74,-43,37}, -{74,-43,38}, -{74,-43,39}, -{74,-43,40}, -{74,-43,41}, -{74,-43,42}, -{74,-43,43}, -{74,-43,44}, -{74,-43,45}, -{74,-43,46}, -{74,-43,47}, -{74,-43,48}, -{74,-43,49}, -{74,-43,50}, -{74,-43,51}, -{74,-43,52}, -{74,-43,53}, -{74,-43,54}, -{74,-43,55}, -{74,-43,56}, -{74,-43,57}, -{74,-43,58}, -{74,-43,59}, -{74,-43,60}, -{74,-43,61}, -{74,-43,62}, -{74,-43,63}, -{74,-43,64}, -{74,-43,65}, -{74,-43,66}, -{74,-43,67}, -{74,-43,68}, -{74,-43,69}, -{74,-43,70}, -{74,-43,71}, -{74,-43,72}, -{74,-43,73}, -{74,-42,-9}, -{74,-42,-8}, -{74,-42,-7}, -{74,-42,-6}, -{74,-42,-5}, -{74,-42,-4}, -{74,-42,-3}, -{74,-42,-2}, -{74,-42,-1}, -{74,-42,0}, -{74,-42,1}, -{74,-42,2}, -{74,-42,3}, -{74,-42,4}, -{74,-42,5}, -{74,-42,6}, -{74,-42,7}, -{74,-42,8}, -{74,-42,9}, -{74,-42,10}, -{74,-42,11}, -{74,-42,12}, -{74,-42,13}, -{74,-42,14}, -{74,-42,15}, -{74,-42,16}, -{74,-42,17}, -{74,-42,18}, -{74,-42,19}, -{74,-42,20}, -{74,-42,21}, -{74,-42,22}, -{74,-42,23}, -{74,-42,24}, -{74,-42,25}, -{74,-42,26}, -{74,-42,27}, -{74,-42,28}, -{74,-42,29}, -{74,-42,30}, -{74,-42,31}, -{74,-42,32}, -{74,-42,33}, -{74,-42,34}, -{74,-42,35}, -{74,-42,36}, -{74,-42,37}, -{74,-42,38}, -{74,-42,39}, -{74,-42,40}, -{74,-42,41}, -{74,-42,42}, -{74,-42,43}, -{74,-42,44}, -{74,-42,45}, -{74,-42,46}, -{74,-42,47}, -{74,-42,48}, -{74,-42,49}, -{74,-42,50}, -{74,-42,51}, -{74,-42,52}, -{74,-42,53}, -{74,-42,54}, -{74,-42,55}, -{74,-42,56}, -{74,-42,57}, -{74,-42,58}, -{74,-42,59}, -{74,-42,60}, -{74,-42,61}, -{74,-42,62}, -{74,-42,63}, -{74,-42,64}, -{74,-42,65}, -{74,-42,66}, -{74,-42,67}, -{74,-42,68}, -{74,-42,69}, -{74,-42,70}, -{74,-42,71}, -{74,-42,72}, -{74,-42,73}, -{74,-41,-11}, -{74,-41,-10}, -{74,-41,-9}, -{74,-41,-8}, -{74,-41,-7}, -{74,-41,-6}, -{74,-41,-5}, -{74,-41,-4}, -{74,-41,-3}, -{74,-41,-2}, -{74,-41,-1}, -{74,-41,0}, -{74,-41,1}, -{74,-41,2}, -{74,-41,3}, -{74,-41,4}, -{74,-41,5}, -{74,-41,6}, -{74,-41,7}, -{74,-41,8}, -{74,-41,9}, -{74,-41,10}, -{74,-41,11}, -{74,-41,12}, -{74,-41,13}, -{74,-41,14}, -{74,-41,15}, -{74,-41,16}, -{74,-41,17}, -{74,-41,18}, -{74,-41,19}, -{74,-41,20}, -{74,-41,21}, -{74,-41,22}, -{74,-41,23}, -{74,-41,24}, -{74,-41,25}, -{74,-41,26}, -{74,-41,27}, -{74,-41,28}, -{74,-41,29}, -{74,-41,30}, -{74,-41,31}, -{74,-41,32}, -{74,-41,33}, -{74,-41,34}, -{74,-41,35}, -{74,-41,36}, -{74,-41,37}, -{74,-41,38}, -{74,-41,39}, -{74,-41,40}, -{74,-41,41}, -{74,-41,42}, -{74,-41,43}, -{74,-41,44}, -{74,-41,45}, -{74,-41,46}, -{74,-41,47}, -{74,-41,48}, -{74,-41,49}, -{74,-41,50}, -{74,-41,51}, -{74,-41,52}, -{74,-41,53}, -{74,-41,54}, -{74,-41,55}, -{74,-41,56}, -{74,-41,57}, -{74,-41,58}, -{74,-41,59}, -{74,-41,60}, -{74,-41,61}, -{74,-41,62}, -{74,-41,63}, -{74,-41,64}, -{74,-41,65}, -{74,-41,66}, -{74,-41,67}, -{74,-41,68}, -{74,-41,69}, -{74,-41,70}, -{74,-41,71}, -{74,-41,72}, -{74,-41,73}, -{74,-40,-12}, -{74,-40,-11}, -{74,-40,-10}, -{74,-40,-9}, -{74,-40,-8}, -{74,-40,-7}, -{74,-40,-6}, -{74,-40,-5}, -{74,-40,-4}, -{74,-40,-3}, -{74,-40,-2}, -{74,-40,-1}, -{74,-40,0}, -{74,-40,1}, -{74,-40,2}, -{74,-40,3}, -{74,-40,4}, -{74,-40,5}, -{74,-40,6}, -{74,-40,7}, -{74,-40,8}, -{74,-40,9}, -{74,-40,10}, -{74,-40,11}, -{74,-40,12}, -{74,-40,13}, -{74,-40,14}, -{74,-40,15}, -{74,-40,16}, -{74,-40,17}, -{74,-40,18}, -{74,-40,19}, -{74,-40,20}, -{74,-40,21}, -{74,-40,22}, -{74,-40,23}, -{74,-40,24}, -{74,-40,25}, -{74,-40,26}, -{74,-40,27}, -{74,-40,28}, -{74,-40,29}, -{74,-40,30}, -{74,-40,31}, -{74,-40,32}, -{74,-40,33}, -{74,-40,34}, -{74,-40,35}, -{74,-40,36}, -{74,-40,37}, -{74,-40,38}, -{74,-40,39}, -{74,-40,40}, -{74,-40,41}, -{74,-40,42}, -{74,-40,43}, -{74,-40,44}, -{74,-40,45}, -{74,-40,46}, -{74,-40,47}, -{74,-40,48}, -{74,-40,49}, -{74,-40,50}, -{74,-40,51}, -{74,-40,52}, -{74,-40,53}, -{74,-40,54}, -{74,-40,55}, -{74,-40,56}, -{74,-40,57}, -{74,-40,58}, -{74,-40,59}, -{74,-40,60}, -{74,-40,61}, -{74,-40,62}, -{74,-40,63}, -{74,-40,64}, -{74,-40,65}, -{74,-40,66}, -{74,-40,67}, -{74,-40,68}, -{74,-40,69}, -{74,-40,70}, -{74,-40,71}, -{74,-40,72}, -{74,-40,73}, -{74,-40,74}, -{74,-39,-14}, -{74,-39,-13}, -{74,-39,-12}, -{74,-39,-11}, -{74,-39,-10}, -{74,-39,-9}, -{74,-39,-8}, -{74,-39,-7}, -{74,-39,-6}, -{74,-39,-5}, -{74,-39,-4}, -{74,-39,-3}, -{74,-39,-2}, -{74,-39,-1}, -{74,-39,0}, -{74,-39,1}, -{74,-39,2}, -{74,-39,3}, -{74,-39,4}, -{74,-39,5}, -{74,-39,6}, -{74,-39,7}, -{74,-39,8}, -{74,-39,9}, -{74,-39,10}, -{74,-39,11}, -{74,-39,12}, -{74,-39,13}, -{74,-39,14}, -{74,-39,15}, -{74,-39,16}, -{74,-39,17}, -{74,-39,18}, -{74,-39,19}, -{74,-39,20}, -{74,-39,21}, -{74,-39,22}, -{74,-39,23}, -{74,-39,24}, -{74,-39,25}, -{74,-39,26}, -{74,-39,27}, -{74,-39,28}, -{74,-39,29}, -{74,-39,30}, -{74,-39,31}, -{74,-39,32}, -{74,-39,33}, -{74,-39,34}, -{74,-39,35}, -{74,-39,36}, -{74,-39,37}, -{74,-39,38}, -{74,-39,39}, -{74,-39,40}, -{74,-39,41}, -{74,-39,42}, -{74,-39,43}, -{74,-39,44}, -{74,-39,45}, -{74,-39,46}, -{74,-39,47}, -{74,-39,48}, -{74,-39,49}, -{74,-39,50}, -{74,-39,51}, -{74,-39,52}, -{74,-39,53}, -{74,-39,54}, -{74,-39,55}, -{74,-39,56}, -{74,-39,57}, -{74,-39,58}, -{74,-39,59}, -{74,-39,60}, -{74,-39,61}, -{74,-39,62}, -{74,-39,63}, -{74,-39,64}, -{74,-39,65}, -{74,-39,66}, -{74,-39,67}, -{74,-39,68}, -{74,-39,69}, -{74,-39,70}, -{74,-39,71}, -{74,-39,72}, -{74,-39,73}, -{74,-39,74}, -{74,-38,-15}, -{74,-38,-14}, -{74,-38,-13}, -{74,-38,-12}, -{74,-38,-11}, -{74,-38,-10}, -{74,-38,-9}, -{74,-38,-8}, -{74,-38,-7}, -{74,-38,-6}, -{74,-38,-5}, -{74,-38,-4}, -{74,-38,-3}, -{74,-38,-2}, -{74,-38,-1}, -{74,-38,0}, -{74,-38,1}, -{74,-38,2}, -{74,-38,3}, -{74,-38,4}, -{74,-38,5}, -{74,-38,6}, -{74,-38,7}, -{74,-38,8}, -{74,-38,9}, -{74,-38,10}, -{74,-38,11}, -{74,-38,12}, -{74,-38,13}, -{74,-38,14}, -{74,-38,15}, -{74,-38,16}, -{74,-38,17}, -{74,-38,18}, -{74,-38,19}, -{74,-38,20}, -{74,-38,21}, -{74,-38,22}, -{74,-38,23}, -{74,-38,24}, -{74,-38,25}, -{74,-38,26}, -{74,-38,27}, -{74,-38,28}, -{74,-38,29}, -{74,-38,30}, -{74,-38,31}, -{74,-38,32}, -{74,-38,33}, -{74,-38,34}, -{74,-38,35}, -{74,-38,36}, -{74,-38,37}, -{74,-38,38}, -{74,-38,39}, -{74,-38,40}, -{74,-38,41}, -{74,-38,42}, -{74,-38,43}, -{74,-38,44}, -{74,-38,45}, -{74,-38,46}, -{74,-38,47}, -{74,-38,48}, -{74,-38,49}, -{74,-38,50}, -{74,-38,51}, -{74,-38,52}, -{74,-38,53}, -{74,-38,54}, -{74,-38,55}, -{74,-38,56}, -{74,-38,57}, -{74,-38,58}, -{74,-38,59}, -{74,-38,60}, -{74,-38,61}, -{74,-38,62}, -{74,-38,63}, -{74,-38,64}, -{74,-38,65}, -{74,-38,66}, -{74,-38,67}, -{74,-38,68}, -{74,-38,69}, -{74,-38,70}, -{74,-38,71}, -{74,-38,72}, -{74,-38,73}, -{74,-38,74}, -{74,-37,-17}, -{74,-37,-16}, -{74,-37,-15}, -{74,-37,-14}, -{74,-37,-13}, -{74,-37,-12}, -{74,-37,-11}, -{74,-37,-10}, -{74,-37,-9}, -{74,-37,-8}, -{74,-37,-7}, -{74,-37,-6}, -{74,-37,-5}, -{74,-37,-4}, -{74,-37,-3}, -{74,-37,-2}, -{74,-37,-1}, -{74,-37,0}, -{74,-37,1}, -{74,-37,2}, -{74,-37,3}, -{74,-37,4}, -{74,-37,5}, -{74,-37,6}, -{74,-37,7}, -{74,-37,8}, -{74,-37,9}, -{74,-37,10}, -{74,-37,11}, -{74,-37,12}, -{74,-37,13}, -{74,-37,14}, -{74,-37,15}, -{74,-37,16}, -{74,-37,17}, -{74,-37,18}, -{74,-37,19}, -{74,-37,20}, -{74,-37,21}, -{74,-37,22}, -{74,-37,23}, -{74,-37,24}, -{74,-37,25}, -{74,-37,26}, -{74,-37,27}, -{74,-37,28}, -{74,-37,29}, -{74,-37,30}, -{74,-37,31}, -{74,-37,32}, -{74,-37,33}, -{74,-37,34}, -{74,-37,35}, -{74,-37,36}, -{74,-37,37}, -{74,-37,38}, -{74,-37,39}, -{74,-37,40}, -{74,-37,41}, -{74,-37,42}, -{74,-37,43}, -{74,-37,44}, -{74,-37,45}, -{74,-37,46}, -{74,-37,47}, -{74,-37,48}, -{74,-37,49}, -{74,-37,50}, -{74,-37,51}, -{74,-37,52}, -{74,-37,53}, -{74,-37,54}, -{74,-37,55}, -{74,-37,56}, -{74,-37,57}, -{74,-37,58}, -{74,-37,59}, -{74,-37,60}, -{74,-37,61}, -{74,-37,62}, -{74,-37,63}, -{74,-37,64}, -{74,-37,65}, -{74,-37,66}, -{74,-37,67}, -{74,-37,68}, -{74,-37,69}, -{74,-37,70}, -{74,-37,71}, -{74,-37,72}, -{74,-37,73}, -{74,-37,74}, -{74,-36,-18}, -{74,-36,-17}, -{74,-36,-16}, -{74,-36,-15}, -{74,-36,-14}, -{74,-36,-13}, -{74,-36,-12}, -{74,-36,-11}, -{74,-36,-10}, -{74,-36,-9}, -{74,-36,-8}, -{74,-36,-7}, -{74,-36,-6}, -{74,-36,-5}, -{74,-36,-4}, -{74,-36,-3}, -{74,-36,-2}, -{74,-36,-1}, -{74,-36,0}, -{74,-36,1}, -{74,-36,2}, -{74,-36,3}, -{74,-36,4}, -{74,-36,5}, -{74,-36,6}, -{74,-36,7}, -{74,-36,8}, -{74,-36,9}, -{74,-36,10}, -{74,-36,11}, -{74,-36,12}, -{74,-36,13}, -{74,-36,14}, -{74,-36,15}, -{74,-36,16}, -{74,-36,17}, -{74,-36,18}, -{74,-36,19}, -{74,-36,20}, -{74,-36,21}, -{74,-36,22}, -{74,-36,23}, -{74,-36,24}, -{74,-36,25}, -{74,-36,26}, -{74,-36,27}, -{74,-36,28}, -{74,-36,29}, -{74,-36,30}, -{74,-36,31}, -{74,-36,32}, -{74,-36,33}, -{74,-36,34}, -{74,-36,35}, -{74,-36,36}, -{74,-36,37}, -{74,-36,38}, -{74,-36,39}, -{74,-36,40}, -{74,-36,41}, -{74,-36,42}, -{74,-36,43}, -{74,-36,44}, -{74,-36,45}, -{74,-36,46}, -{74,-36,47}, -{74,-36,48}, -{74,-36,49}, -{74,-36,50}, -{74,-36,51}, -{74,-36,52}, -{74,-36,53}, -{74,-36,54}, -{74,-36,55}, -{74,-36,56}, -{74,-36,57}, -{74,-36,58}, -{74,-36,59}, -{74,-36,60}, -{74,-36,61}, -{74,-36,62}, -{74,-36,63}, -{74,-36,64}, -{74,-36,65}, -{74,-36,66}, -{74,-36,67}, -{74,-36,68}, -{74,-36,69}, -{74,-36,70}, -{74,-36,71}, -{74,-36,72}, -{74,-36,73}, -{74,-36,74}, -{74,-35,-20}, -{74,-35,-19}, -{74,-35,-18}, -{74,-35,-17}, -{74,-35,-16}, -{74,-35,-15}, -{74,-35,-14}, -{74,-35,-13}, -{74,-35,-12}, -{74,-35,-11}, -{74,-35,-10}, -{74,-35,-9}, -{74,-35,-8}, -{74,-35,-7}, -{74,-35,-6}, -{74,-35,-5}, -{74,-35,-4}, -{74,-35,-3}, -{74,-35,-2}, -{74,-35,-1}, -{74,-35,0}, -{74,-35,1}, -{74,-35,2}, -{74,-35,3}, -{74,-35,4}, -{74,-35,5}, -{74,-35,6}, -{74,-35,7}, -{74,-35,8}, -{74,-35,9}, -{74,-35,10}, -{74,-35,11}, -{74,-35,12}, -{74,-35,13}, -{74,-35,14}, -{74,-35,15}, -{74,-35,16}, -{74,-35,17}, -{74,-35,18}, -{74,-35,19}, -{74,-35,20}, -{74,-35,21}, -{74,-35,22}, -{74,-35,23}, -{74,-35,24}, -{74,-35,25}, -{74,-35,26}, -{74,-35,27}, -{74,-35,28}, -{74,-35,29}, -{74,-35,30}, -{74,-35,31}, -{74,-35,32}, -{74,-35,33}, -{74,-35,34}, -{74,-35,35}, -{74,-35,36}, -{74,-35,37}, -{74,-35,38}, -{74,-35,39}, -{74,-35,40}, -{74,-35,41}, -{74,-35,42}, -{74,-35,43}, -{74,-35,44}, -{74,-35,45}, -{74,-35,46}, -{74,-35,47}, -{74,-35,48}, -{74,-35,49}, -{74,-35,50}, -{74,-35,51}, -{74,-35,52}, -{74,-35,53}, -{74,-35,54}, -{74,-35,55}, -{74,-35,56}, -{74,-35,57}, -{74,-35,58}, -{74,-35,59}, -{74,-35,60}, -{74,-35,61}, -{74,-35,62}, -{74,-35,63}, -{74,-35,64}, -{74,-35,65}, -{74,-35,66}, -{74,-35,67}, -{74,-35,68}, -{74,-35,69}, -{74,-35,70}, -{74,-35,71}, -{74,-35,72}, -{74,-35,73}, -{74,-35,74}, -{74,-34,-21}, -{74,-34,-20}, -{74,-34,-19}, -{74,-34,-18}, -{74,-34,-17}, -{74,-34,-16}, -{74,-34,-15}, -{74,-34,-14}, -{74,-34,-13}, -{74,-34,-12}, -{74,-34,-11}, -{74,-34,-10}, -{74,-34,-9}, -{74,-34,-8}, -{74,-34,-7}, -{74,-34,-6}, -{74,-34,-5}, -{74,-34,-4}, -{74,-34,-3}, -{74,-34,-2}, -{74,-34,-1}, -{74,-34,0}, -{74,-34,1}, -{74,-34,2}, -{74,-34,3}, -{74,-34,4}, -{74,-34,5}, -{74,-34,6}, -{74,-34,7}, -{74,-34,8}, -{74,-34,9}, -{74,-34,10}, -{74,-34,11}, -{74,-34,12}, -{74,-34,13}, -{74,-34,14}, -{74,-34,15}, -{74,-34,16}, -{74,-34,17}, -{74,-34,18}, -{74,-34,19}, -{74,-34,20}, -{74,-34,21}, -{74,-34,22}, -{74,-34,23}, -{74,-34,24}, -{74,-34,25}, -{74,-34,26}, -{74,-34,27}, -{74,-34,28}, -{74,-34,29}, -{74,-34,30}, -{74,-34,31}, -{74,-34,32}, -{74,-34,33}, -{74,-34,34}, -{74,-34,35}, -{74,-34,36}, -{74,-34,37}, -{74,-34,38}, -{74,-34,39}, -{74,-34,40}, -{74,-34,41}, -{74,-34,42}, -{74,-34,43}, -{74,-34,44}, -{74,-34,45}, -{74,-34,46}, -{74,-34,47}, -{74,-34,48}, -{74,-34,49}, -{74,-34,50}, -{74,-34,51}, -{74,-34,52}, -{74,-34,53}, -{74,-34,54}, -{74,-34,55}, -{74,-34,56}, -{74,-34,57}, -{74,-34,58}, -{74,-34,59}, -{74,-34,60}, -{74,-34,61}, -{74,-34,62}, -{74,-34,63}, -{74,-34,64}, -{74,-34,65}, -{74,-34,66}, -{74,-34,67}, -{74,-34,68}, -{74,-34,69}, -{74,-34,70}, -{74,-34,71}, -{74,-34,72}, -{74,-34,73}, -{74,-34,74}, -{74,-33,-23}, -{74,-33,-22}, -{74,-33,-21}, -{74,-33,-20}, -{74,-33,-19}, -{74,-33,-18}, -{74,-33,-17}, -{74,-33,-16}, -{74,-33,-15}, -{74,-33,-14}, -{74,-33,-13}, -{74,-33,-12}, -{74,-33,-11}, -{74,-33,-10}, -{74,-33,-9}, -{74,-33,-8}, -{74,-33,-7}, -{74,-33,-6}, -{74,-33,-5}, -{74,-33,-4}, -{74,-33,-3}, -{74,-33,-2}, -{74,-33,-1}, -{74,-33,0}, -{74,-33,1}, -{74,-33,2}, -{74,-33,3}, -{74,-33,4}, -{74,-33,5}, -{74,-33,6}, -{74,-33,7}, -{74,-33,8}, -{74,-33,9}, -{74,-33,10}, -{74,-33,11}, -{74,-33,12}, -{74,-33,13}, -{74,-33,14}, -{74,-33,15}, -{74,-33,16}, -{74,-33,17}, -{74,-33,18}, -{74,-33,19}, -{74,-33,20}, -{74,-33,21}, -{74,-33,22}, -{74,-33,23}, -{74,-33,24}, -{74,-33,25}, -{74,-33,26}, -{74,-33,27}, -{74,-33,28}, -{74,-33,29}, -{74,-33,30}, -{74,-33,31}, -{74,-33,32}, -{74,-33,33}, -{74,-33,34}, -{74,-33,35}, -{74,-33,36}, -{74,-33,37}, -{74,-33,38}, -{74,-33,39}, -{74,-33,40}, -{74,-33,41}, -{74,-33,42}, -{74,-33,43}, -{74,-33,44}, -{74,-33,45}, -{74,-33,46}, -{74,-33,47}, -{74,-33,48}, -{74,-33,49}, -{74,-33,50}, -{74,-33,51}, -{74,-33,52}, -{74,-33,53}, -{74,-33,54}, -{74,-33,55}, -{74,-33,56}, -{74,-33,57}, -{74,-33,58}, -{74,-33,59}, -{74,-33,60}, -{74,-33,61}, -{74,-33,62}, -{74,-33,63}, -{74,-33,64}, -{74,-33,65}, -{74,-33,66}, -{74,-33,67}, -{74,-33,68}, -{74,-33,69}, -{74,-33,70}, -{74,-33,71}, -{74,-33,72}, -{74,-33,73}, -{74,-33,74}, -{74,-32,-24}, -{74,-32,-23}, -{74,-32,-22}, -{74,-32,-21}, -{74,-32,-20}, -{74,-32,-19}, -{74,-32,-18}, -{74,-32,-17}, -{74,-32,-16}, -{74,-32,-15}, -{74,-32,-14}, -{74,-32,-13}, -{74,-32,-12}, -{74,-32,-11}, -{74,-32,-10}, -{74,-32,-9}, -{74,-32,-8}, -{74,-32,-7}, -{74,-32,-6}, -{74,-32,-5}, -{74,-32,-4}, -{74,-32,-3}, -{74,-32,-2}, -{74,-32,-1}, -{74,-32,0}, -{74,-32,1}, -{74,-32,2}, -{74,-32,3}, -{74,-32,4}, -{74,-32,5}, -{74,-32,6}, -{74,-32,7}, -{74,-32,8}, -{74,-32,9}, -{74,-32,10}, -{74,-32,11}, -{74,-32,12}, -{74,-32,13}, -{74,-32,14}, -{74,-32,15}, -{74,-32,16}, -{74,-32,17}, -{74,-32,18}, -{74,-32,19}, -{74,-32,20}, -{74,-32,21}, -{74,-32,22}, -{74,-32,23}, -{74,-32,24}, -{74,-32,25}, -{74,-32,26}, -{74,-32,27}, -{74,-32,28}, -{74,-32,29}, -{74,-32,30}, -{74,-32,31}, -{74,-32,32}, -{74,-32,33}, -{74,-32,34}, -{74,-32,35}, -{74,-32,36}, -{74,-32,37}, -{74,-32,38}, -{74,-32,39}, -{74,-32,40}, -{74,-32,41}, -{74,-32,42}, -{74,-32,43}, -{74,-32,44}, -{74,-32,45}, -{74,-32,46}, -{74,-32,47}, -{74,-32,48}, -{74,-32,49}, -{74,-32,50}, -{74,-32,51}, -{74,-32,52}, -{74,-32,53}, -{74,-32,54}, -{74,-32,55}, -{74,-32,56}, -{74,-32,57}, -{74,-32,58}, -{74,-32,59}, -{74,-32,60}, -{74,-32,61}, -{74,-32,62}, -{74,-32,63}, -{74,-32,64}, -{74,-32,65}, -{74,-32,66}, -{74,-32,67}, -{74,-32,68}, -{74,-32,69}, -{74,-32,70}, -{74,-32,71}, -{74,-32,72}, -{74,-32,73}, -{74,-32,74}, -{74,-31,-26}, -{74,-31,-25}, -{74,-31,-24}, -{74,-31,-23}, -{74,-31,-22}, -{74,-31,-21}, -{74,-31,-20}, -{74,-31,-19}, -{74,-31,-18}, -{74,-31,-17}, -{74,-31,-16}, -{74,-31,-15}, -{74,-31,-14}, -{74,-31,-13}, -{74,-31,-12}, -{74,-31,-11}, -{74,-31,-10}, -{74,-31,-9}, -{74,-31,-8}, -{74,-31,-7}, -{74,-31,-6}, -{74,-31,-5}, -{74,-31,-4}, -{74,-31,-3}, -{74,-31,-2}, -{74,-31,-1}, -{74,-31,0}, -{74,-31,1}, -{74,-31,2}, -{74,-31,3}, -{74,-31,4}, -{74,-31,5}, -{74,-31,6}, -{74,-31,7}, -{74,-31,8}, -{74,-31,9}, -{74,-31,10}, -{74,-31,11}, -{74,-31,12}, -{74,-31,13}, -{74,-31,14}, -{74,-31,15}, -{74,-31,16}, -{74,-31,17}, -{74,-31,18}, -{74,-31,19}, -{74,-31,20}, -{74,-31,21}, -{74,-31,22}, -{74,-31,23}, -{74,-31,24}, -{74,-31,25}, -{74,-31,26}, -{74,-31,27}, -{74,-31,28}, -{74,-31,29}, -{74,-31,30}, -{74,-31,31}, -{74,-31,32}, -{74,-31,33}, -{74,-31,34}, -{74,-31,35}, -{74,-31,36}, -{74,-31,37}, -{74,-31,38}, -{74,-31,39}, -{74,-31,40}, -{74,-31,41}, -{74,-31,42}, -{74,-31,43}, -{74,-31,44}, -{74,-31,45}, -{74,-31,46}, -{74,-31,47}, -{74,-31,48}, -{74,-31,49}, -{74,-31,50}, -{74,-31,51}, -{74,-31,52}, -{74,-31,53}, -{74,-31,54}, -{74,-31,55}, -{74,-31,56}, -{74,-31,57}, -{74,-31,58}, -{74,-31,59}, -{74,-31,60}, -{74,-31,61}, -{74,-31,62}, -{74,-31,63}, -{74,-31,64}, -{74,-31,65}, -{74,-31,66}, -{74,-31,67}, -{74,-31,68}, -{74,-31,69}, -{74,-31,70}, -{74,-31,71}, -{74,-31,72}, -{74,-31,73}, -{74,-31,74}, -{74,-30,-27}, -{74,-30,-26}, -{74,-30,-25}, -{74,-30,-24}, -{74,-30,-23}, -{74,-30,-22}, -{74,-30,-21}, -{74,-30,-20}, -{74,-30,-19}, -{74,-30,-18}, -{74,-30,-17}, -{74,-30,-16}, -{74,-30,-15}, -{74,-30,-14}, -{74,-30,-13}, -{74,-30,-12}, -{74,-30,-11}, -{74,-30,-10}, -{74,-30,-9}, -{74,-30,-8}, -{74,-30,-7}, -{74,-30,-6}, -{74,-30,-5}, -{74,-30,-4}, -{74,-30,-3}, -{74,-30,-2}, -{74,-30,-1}, -{74,-30,0}, -{74,-30,1}, -{74,-30,2}, -{74,-30,3}, -{74,-30,4}, -{74,-30,5}, -{74,-30,6}, -{74,-30,7}, -{74,-30,8}, -{74,-30,9}, -{74,-30,10}, -{74,-30,11}, -{74,-30,12}, -{74,-30,13}, -{74,-30,14}, -{74,-30,15}, -{74,-30,16}, -{74,-30,17}, -{74,-30,18}, -{74,-30,19}, -{74,-30,20}, -{74,-30,21}, -{74,-30,22}, -{74,-30,23}, -{74,-30,24}, -{74,-30,25}, -{74,-30,26}, -{74,-30,27}, -{74,-30,28}, -{74,-30,29}, -{74,-30,30}, -{74,-30,31}, -{74,-30,32}, -{74,-30,33}, -{74,-30,34}, -{74,-30,35}, -{74,-30,36}, -{74,-30,37}, -{74,-30,38}, -{74,-30,39}, -{74,-30,40}, -{74,-30,41}, -{74,-30,42}, -{74,-30,43}, -{74,-30,44}, -{74,-30,45}, -{74,-30,46}, -{74,-30,47}, -{74,-30,48}, -{74,-30,49}, -{74,-30,50}, -{74,-30,51}, -{74,-30,52}, -{74,-30,53}, -{74,-30,54}, -{74,-30,55}, -{74,-30,56}, -{74,-30,57}, -{74,-30,58}, -{74,-30,59}, -{74,-30,60}, -{74,-30,61}, -{74,-30,62}, -{74,-30,63}, -{74,-30,64}, -{74,-30,65}, -{74,-30,66}, -{74,-30,67}, -{74,-30,68}, -{74,-30,69}, -{74,-30,70}, -{74,-30,71}, -{74,-30,72}, -{74,-30,73}, -{74,-30,74}, -{74,-29,-28}, -{74,-29,-27}, -{74,-29,-26}, -{74,-29,-25}, -{74,-29,-24}, -{74,-29,-23}, -{74,-29,-22}, -{74,-29,-21}, -{74,-29,-20}, -{74,-29,-19}, -{74,-29,-18}, -{74,-29,-17}, -{74,-29,-16}, -{74,-29,-15}, -{74,-29,-14}, -{74,-29,-13}, -{74,-29,-12}, -{74,-29,-11}, -{74,-29,-10}, -{74,-29,-9}, -{74,-29,-8}, -{74,-29,-7}, -{74,-29,-6}, -{74,-29,-5}, -{74,-29,-4}, -{74,-29,-3}, -{74,-29,-2}, -{74,-29,-1}, -{74,-29,0}, -{74,-29,1}, -{74,-29,2}, -{74,-29,3}, -{74,-29,4}, -{74,-29,5}, -{74,-29,6}, -{74,-29,7}, -{74,-29,8}, -{74,-29,9}, -{74,-29,10}, -{74,-29,11}, -{74,-29,12}, -{74,-29,13}, -{74,-29,14}, -{74,-29,15}, -{74,-29,16}, -{74,-29,17}, -{74,-29,18}, -{74,-29,19}, -{74,-29,20}, -{74,-29,21}, -{74,-29,22}, -{74,-29,23}, -{74,-29,24}, -{74,-29,25}, -{74,-29,26}, -{74,-29,27}, -{74,-29,28}, -{74,-29,29}, -{74,-29,30}, -{74,-29,31}, -{74,-29,32}, -{74,-29,33}, -{74,-29,34}, -{74,-29,35}, -{74,-29,36}, -{74,-29,37}, -{74,-29,38}, -{74,-29,39}, -{74,-29,40}, -{74,-29,41}, -{74,-29,42}, -{74,-29,43}, -{74,-29,44}, -{74,-29,45}, -{74,-29,46}, -{74,-29,47}, -{74,-29,48}, -{74,-29,49}, -{74,-29,50}, -{74,-29,51}, -{74,-29,52}, -{74,-29,53}, -{74,-29,54}, -{74,-29,55}, -{74,-29,56}, -{74,-29,57}, -{74,-29,58}, -{74,-29,59}, -{74,-29,60}, -{74,-29,61}, -{74,-29,62}, -{74,-29,63}, -{74,-29,64}, -{74,-29,65}, -{74,-29,66}, -{74,-29,67}, -{74,-29,68}, -{74,-29,69}, -{74,-29,70}, -{74,-29,71}, -{74,-29,72}, -{74,-29,73}, -{74,-29,74}, -{74,-28,-30}, -{74,-28,-29}, -{74,-28,-28}, -{74,-28,-27}, -{74,-28,-26}, -{74,-28,-25}, -{74,-28,-24}, -{74,-28,-23}, -{74,-28,-22}, -{74,-28,-21}, -{74,-28,-20}, -{74,-28,-19}, -{74,-28,-18}, -{74,-28,-17}, -{74,-28,-16}, -{74,-28,-15}, -{74,-28,-14}, -{74,-28,-13}, -{74,-28,-12}, -{74,-28,-11}, -{74,-28,-10}, -{74,-28,-9}, -{74,-28,-8}, -{74,-28,-7}, -{74,-28,-6}, -{74,-28,-5}, -{74,-28,-4}, -{74,-28,-3}, -{74,-28,-2}, -{74,-28,-1}, -{74,-28,0}, -{74,-28,1}, -{74,-28,2}, -{74,-28,3}, -{74,-28,4}, -{74,-28,5}, -{74,-28,6}, -{74,-28,7}, -{74,-28,8}, -{74,-28,9}, -{74,-28,10}, -{74,-28,11}, -{74,-28,12}, -{74,-28,13}, -{74,-28,14}, -{74,-28,15}, -{74,-28,16}, -{74,-28,17}, -{74,-28,18}, -{74,-28,19}, -{74,-28,20}, -{74,-28,21}, -{74,-28,22}, -{74,-28,23}, -{74,-28,24}, -{74,-28,25}, -{74,-28,26}, -{74,-28,27}, -{74,-28,28}, -{74,-28,29}, -{74,-28,30}, -{74,-28,31}, -{74,-28,32}, -{74,-28,33}, -{74,-28,34}, -{74,-28,35}, -{74,-28,36}, -{74,-28,37}, -{74,-28,38}, -{74,-28,39}, -{74,-28,40}, -{74,-28,41}, -{74,-28,42}, -{74,-28,43}, -{74,-28,44}, -{74,-28,45}, -{74,-28,46}, -{74,-28,47}, -{74,-28,48}, -{74,-28,49}, -{74,-28,50}, -{74,-28,51}, -{74,-28,52}, -{74,-28,53}, -{74,-28,54}, -{74,-28,55}, -{74,-28,56}, -{74,-28,57}, -{74,-28,58}, -{74,-28,59}, -{74,-28,60}, -{74,-28,61}, -{74,-28,62}, -{74,-28,63}, -{74,-28,64}, -{74,-28,65}, -{74,-28,66}, -{74,-28,67}, -{74,-28,68}, -{74,-28,69}, -{74,-28,70}, -{74,-28,71}, -{74,-28,72}, -{74,-28,73}, -{74,-28,74}, -{74,-27,-31}, -{74,-27,-30}, -{74,-27,-29}, -{74,-27,-28}, -{74,-27,-27}, -{74,-27,-26}, -{74,-27,-25}, -{74,-27,-24}, -{74,-27,-23}, -{74,-27,-22}, -{74,-27,-21}, -{74,-27,-20}, -{74,-27,-19}, -{74,-27,-18}, -{74,-27,-17}, -{74,-27,-16}, -{74,-27,-15}, -{74,-27,-14}, -{74,-27,-13}, -{74,-27,-12}, -{74,-27,-11}, -{74,-27,-10}, -{74,-27,-9}, -{74,-27,-8}, -{74,-27,-7}, -{74,-27,-6}, -{74,-27,-5}, -{74,-27,-4}, -{74,-27,-3}, -{74,-27,-2}, -{74,-27,-1}, -{74,-27,0}, -{74,-27,1}, -{74,-27,2}, -{74,-27,3}, -{74,-27,4}, -{74,-27,5}, -{74,-27,6}, -{74,-27,7}, -{74,-27,8}, -{74,-27,9}, -{74,-27,10}, -{74,-27,11}, -{74,-27,12}, -{74,-27,13}, -{74,-27,14}, -{74,-27,15}, -{74,-27,16}, -{74,-27,17}, -{74,-27,18}, -{74,-27,19}, -{74,-27,20}, -{74,-27,21}, -{74,-27,22}, -{74,-27,23}, -{74,-27,24}, -{74,-27,25}, -{74,-27,26}, -{74,-27,27}, -{74,-27,28}, -{74,-27,29}, -{74,-27,30}, -{74,-27,31}, -{74,-27,32}, -{74,-27,33}, -{74,-27,34}, -{74,-27,35}, -{74,-27,36}, -{74,-27,37}, -{74,-27,38}, -{74,-27,39}, -{74,-27,40}, -{74,-27,41}, -{74,-27,42}, -{74,-27,43}, -{74,-27,44}, -{74,-27,45}, -{74,-27,46}, -{74,-27,47}, -{74,-27,48}, -{74,-27,49}, -{74,-27,50}, -{74,-27,51}, -{74,-27,52}, -{74,-27,53}, -{74,-27,54}, -{74,-27,55}, -{74,-27,56}, -{74,-27,57}, -{74,-27,58}, -{74,-27,59}, -{74,-27,60}, -{74,-27,61}, -{74,-27,62}, -{74,-27,63}, -{74,-27,64}, -{74,-27,65}, -{74,-27,66}, -{74,-27,67}, -{74,-27,68}, -{74,-27,69}, -{74,-27,70}, -{74,-27,71}, -{74,-27,72}, -{74,-27,73}, -{74,-27,74}, -{74,-26,-32}, -{74,-26,-31}, -{74,-26,-30}, -{74,-26,-29}, -{74,-26,-28}, -{74,-26,-27}, -{74,-26,-26}, -{74,-26,-25}, -{74,-26,-24}, -{74,-26,-23}, -{74,-26,-22}, -{74,-26,-21}, -{74,-26,-20}, -{74,-26,-19}, -{74,-26,-18}, -{74,-26,-17}, -{74,-26,-16}, -{74,-26,-15}, -{74,-26,-14}, -{74,-26,-13}, -{74,-26,-12}, -{74,-26,-11}, -{74,-26,-10}, -{74,-26,-9}, -{74,-26,-8}, -{74,-26,-7}, -{74,-26,-6}, -{74,-26,-5}, -{74,-26,-4}, -{74,-26,-3}, -{74,-26,-2}, -{74,-26,-1}, -{74,-26,0}, -{74,-26,1}, -{74,-26,2}, -{74,-26,3}, -{74,-26,4}, -{74,-26,5}, -{74,-26,6}, -{74,-26,7}, -{74,-26,8}, -{74,-26,9}, -{74,-26,10}, -{74,-26,11}, -{74,-26,12}, -{74,-26,13}, -{74,-26,14}, -{74,-26,15}, -{74,-26,16}, -{74,-26,17}, -{74,-26,18}, -{74,-26,19}, -{74,-26,20}, -{74,-26,21}, -{74,-26,22}, -{74,-26,23}, -{74,-26,24}, -{74,-26,25}, -{74,-26,26}, -{74,-26,27}, -{74,-26,28}, -{74,-26,29}, -{74,-26,30}, -{74,-26,31}, -{74,-26,32}, -{74,-26,33}, -{74,-26,34}, -{74,-26,35}, -{74,-26,36}, -{74,-26,37}, -{74,-26,38}, -{74,-26,39}, -{74,-26,40}, -{74,-26,41}, -{74,-26,42}, -{74,-26,43}, -{74,-26,44}, -{74,-26,45}, -{74,-26,46}, -{74,-26,47}, -{74,-26,48}, -{74,-26,49}, -{74,-26,50}, -{74,-26,51}, -{74,-26,52}, -{74,-26,53}, -{74,-26,54}, -{74,-26,55}, -{74,-26,56}, -{74,-26,57}, -{74,-26,58}, -{74,-26,59}, -{74,-26,60}, -{74,-26,61}, -{74,-26,62}, -{74,-26,63}, -{74,-26,64}, -{74,-26,65}, -{74,-26,66}, -{74,-26,67}, -{74,-26,68}, -{74,-26,69}, -{74,-26,70}, -{74,-26,71}, -{74,-26,72}, -{74,-26,73}, -{74,-26,74}, -{74,-25,-34}, -{74,-25,-33}, -{74,-25,-32}, -{74,-25,-31}, -{74,-25,-30}, -{74,-25,-29}, -{74,-25,-28}, -{74,-25,-27}, -{74,-25,-26}, -{74,-25,-25}, -{74,-25,-24}, -{74,-25,-23}, -{74,-25,-22}, -{74,-25,-21}, -{74,-25,-20}, -{74,-25,-19}, -{74,-25,-18}, -{74,-25,-17}, -{74,-25,-16}, -{74,-25,-15}, -{74,-25,-14}, -{74,-25,-13}, -{74,-25,-12}, -{74,-25,-11}, -{74,-25,-10}, -{74,-25,-9}, -{74,-25,-8}, -{74,-25,-7}, -{74,-25,-6}, -{74,-25,-5}, -{74,-25,-4}, -{74,-25,-3}, -{74,-25,-2}, -{74,-25,-1}, -{74,-25,0}, -{74,-25,1}, -{74,-25,2}, -{74,-25,3}, -{74,-25,4}, -{74,-25,5}, -{74,-25,6}, -{74,-25,7}, -{74,-25,8}, -{74,-25,9}, -{74,-25,10}, -{74,-25,11}, -{74,-25,12}, -{74,-25,13}, -{74,-25,14}, -{74,-25,15}, -{74,-25,16}, -{74,-25,17}, -{74,-25,18}, -{74,-25,19}, -{74,-25,20}, -{74,-25,21}, -{74,-25,22}, -{74,-25,23}, -{74,-25,24}, -{74,-25,25}, -{74,-25,26}, -{74,-25,27}, -{74,-25,28}, -{74,-25,29}, -{74,-25,30}, -{74,-25,31}, -{74,-25,32}, -{74,-25,33}, -{74,-25,34}, -{74,-25,35}, -{74,-25,36}, -{74,-25,37}, -{74,-25,38}, -{74,-25,39}, -{74,-25,40}, -{74,-25,41}, -{74,-25,42}, -{74,-25,43}, -{74,-25,44}, -{74,-25,45}, -{74,-25,46}, -{74,-25,47}, -{74,-25,48}, -{74,-25,49}, -{74,-25,50}, -{74,-25,51}, -{74,-25,52}, -{74,-25,53}, -{74,-25,54}, -{74,-25,55}, -{74,-25,56}, -{74,-25,57}, -{74,-25,58}, -{74,-25,59}, -{74,-25,60}, -{74,-25,61}, -{74,-25,62}, -{74,-25,63}, -{74,-25,64}, -{74,-25,65}, -{74,-25,66}, -{74,-25,67}, -{74,-25,68}, -{74,-25,69}, -{74,-25,70}, -{74,-25,71}, -{74,-25,72}, -{74,-25,73}, -{74,-25,74}, -{74,-24,-35}, -{74,-24,-34}, -{74,-24,-33}, -{74,-24,-32}, -{74,-24,-31}, -{74,-24,-30}, -{74,-24,-29}, -{74,-24,-28}, -{74,-24,-27}, -{74,-24,-26}, -{74,-24,-25}, -{74,-24,-24}, -{74,-24,-23}, -{74,-24,-22}, -{74,-24,-21}, -{74,-24,-20}, -{74,-24,-19}, -{74,-24,-18}, -{74,-24,-17}, -{74,-24,-16}, -{74,-24,-15}, -{74,-24,-14}, -{74,-24,-13}, -{74,-24,-12}, -{74,-24,-11}, -{74,-24,-10}, -{74,-24,-9}, -{74,-24,-8}, -{74,-24,-7}, -{74,-24,-6}, -{74,-24,-5}, -{74,-24,-4}, -{74,-24,-3}, -{74,-24,-2}, -{74,-24,-1}, -{74,-24,0}, -{74,-24,1}, -{74,-24,2}, -{74,-24,3}, -{74,-24,4}, -{74,-24,5}, -{74,-24,6}, -{74,-24,7}, -{74,-24,8}, -{74,-24,9}, -{74,-24,10}, -{74,-24,11}, -{74,-24,12}, -{74,-24,13}, -{74,-24,14}, -{74,-24,15}, -{74,-24,16}, -{74,-24,17}, -{74,-24,18}, -{74,-24,19}, -{74,-24,20}, -{74,-24,21}, -{74,-24,22}, -{74,-24,23}, -{74,-24,24}, -{74,-24,25}, -{74,-24,26}, -{74,-24,27}, -{74,-24,28}, -{74,-24,29}, -{74,-24,30}, -{74,-24,31}, -{74,-24,32}, -{74,-24,33}, -{74,-24,34}, -{74,-24,35}, -{74,-24,36}, -{74,-24,37}, -{74,-24,38}, -{74,-24,39}, -{74,-24,40}, -{74,-24,41}, -{74,-24,42}, -{74,-24,43}, -{74,-24,44}, -{74,-24,45}, -{74,-24,46}, -{74,-24,47}, -{74,-24,48}, -{74,-24,49}, -{74,-24,50}, -{74,-24,51}, -{74,-24,52}, -{74,-24,53}, -{74,-24,54}, -{74,-24,55}, -{74,-24,56}, -{74,-24,57}, -{74,-24,58}, -{74,-24,59}, -{74,-24,60}, -{74,-24,61}, -{74,-24,62}, -{74,-24,63}, -{74,-24,64}, -{74,-24,65}, -{74,-24,66}, -{74,-24,67}, -{74,-24,68}, -{74,-24,69}, -{74,-24,70}, -{74,-24,71}, -{74,-24,72}, -{74,-24,73}, -{74,-24,74}, -{74,-23,-36}, -{74,-23,-35}, -{74,-23,-34}, -{74,-23,-33}, -{74,-23,-32}, -{74,-23,-31}, -{74,-23,-30}, -{74,-23,-29}, -{74,-23,-28}, -{74,-23,-27}, -{74,-23,-26}, -{74,-23,-25}, -{74,-23,-24}, -{74,-23,-23}, -{74,-23,-22}, -{74,-23,-21}, -{74,-23,-20}, -{74,-23,-19}, -{74,-23,-18}, -{74,-23,-17}, -{74,-23,-16}, -{74,-23,-15}, -{74,-23,-14}, -{74,-23,-13}, -{74,-23,-12}, -{74,-23,-11}, -{74,-23,-10}, -{74,-23,-9}, -{74,-23,-8}, -{74,-23,-7}, -{74,-23,-6}, -{74,-23,-5}, -{74,-23,-4}, -{74,-23,-3}, -{74,-23,-2}, -{74,-23,-1}, -{74,-23,0}, -{74,-23,1}, -{74,-23,2}, -{74,-23,3}, -{74,-23,4}, -{74,-23,5}, -{74,-23,6}, -{74,-23,7}, -{74,-23,8}, -{74,-23,9}, -{74,-23,10}, -{74,-23,11}, -{74,-23,12}, -{74,-23,13}, -{74,-23,14}, -{74,-23,15}, -{74,-23,16}, -{74,-23,17}, -{74,-23,18}, -{74,-23,19}, -{74,-23,20}, -{74,-23,21}, -{74,-23,22}, -{74,-23,23}, -{74,-23,24}, -{74,-23,25}, -{74,-23,26}, -{74,-23,27}, -{74,-23,28}, -{74,-23,29}, -{74,-23,30}, -{74,-23,31}, -{74,-23,32}, -{74,-23,33}, -{74,-23,34}, -{74,-23,35}, -{74,-23,36}, -{74,-23,37}, -{74,-23,38}, -{74,-23,39}, -{74,-23,40}, -{74,-23,41}, -{74,-23,42}, -{74,-23,43}, -{74,-23,44}, -{74,-23,45}, -{74,-23,46}, -{74,-23,47}, -{74,-23,48}, -{74,-23,49}, -{74,-23,50}, -{74,-23,51}, -{74,-23,52}, -{74,-23,53}, -{74,-23,54}, -{74,-23,55}, -{74,-23,56}, -{74,-23,57}, -{74,-23,58}, -{74,-23,59}, -{74,-23,60}, -{74,-23,61}, -{74,-23,62}, -{74,-23,63}, -{74,-23,64}, -{74,-23,65}, -{74,-23,66}, -{74,-23,67}, -{74,-23,68}, -{74,-23,69}, -{74,-23,70}, -{74,-23,71}, -{74,-23,72}, -{74,-23,73}, -{74,-23,74}, -{74,-22,-38}, -{74,-22,-37}, -{74,-22,-36}, -{74,-22,-35}, -{74,-22,-34}, -{74,-22,-33}, -{74,-22,-32}, -{74,-22,-31}, -{74,-22,-30}, -{74,-22,-29}, -{74,-22,-28}, -{74,-22,-27}, -{74,-22,-26}, -{74,-22,-25}, -{74,-22,-24}, -{74,-22,-23}, -{74,-22,-22}, -{74,-22,-21}, -{74,-22,-20}, -{74,-22,-19}, -{74,-22,-18}, -{74,-22,-17}, -{74,-22,-16}, -{74,-22,-15}, -{74,-22,-14}, -{74,-22,-13}, -{74,-22,-12}, -{74,-22,-11}, -{74,-22,-10}, -{74,-22,-9}, -{74,-22,-8}, -{74,-22,-7}, -{74,-22,-6}, -{74,-22,-5}, -{74,-22,-4}, -{74,-22,-3}, -{74,-22,-2}, -{74,-22,-1}, -{74,-22,0}, -{74,-22,1}, -{74,-22,2}, -{74,-22,3}, -{74,-22,4}, -{74,-22,5}, -{74,-22,6}, -{74,-22,7}, -{74,-22,8}, -{74,-22,9}, -{74,-22,10}, -{74,-22,11}, -{74,-22,12}, -{74,-22,13}, -{74,-22,14}, -{74,-22,15}, -{74,-22,16}, -{74,-22,17}, -{74,-22,18}, -{74,-22,19}, -{74,-22,20}, -{74,-22,21}, -{74,-22,22}, -{74,-22,23}, -{74,-22,24}, -{74,-22,25}, -{74,-22,26}, -{74,-22,27}, -{74,-22,28}, -{74,-22,29}, -{74,-22,30}, -{74,-22,31}, -{74,-22,32}, -{74,-22,33}, -{74,-22,34}, -{74,-22,35}, -{74,-22,36}, -{74,-22,37}, -{74,-22,38}, -{74,-22,39}, -{74,-22,40}, -{74,-22,41}, -{74,-22,42}, -{74,-22,43}, -{74,-22,44}, -{74,-22,45}, -{74,-22,46}, -{74,-22,47}, -{74,-22,48}, -{74,-22,49}, -{74,-22,50}, -{74,-22,51}, -{74,-22,52}, -{74,-22,53}, -{74,-22,54}, -{74,-22,55}, -{74,-22,56}, -{74,-22,57}, -{74,-22,58}, -{74,-22,59}, -{74,-22,60}, -{74,-22,61}, -{74,-22,62}, -{74,-22,63}, -{74,-22,64}, -{74,-22,65}, -{74,-22,66}, -{74,-22,67}, -{74,-22,68}, -{74,-22,69}, -{74,-22,70}, -{74,-22,71}, -{74,-22,72}, -{74,-22,73}, -{74,-22,74}, -{74,-22,75}, -{74,-21,-39}, -{74,-21,-38}, -{74,-21,-37}, -{74,-21,-36}, -{74,-21,-35}, -{74,-21,-34}, -{74,-21,-33}, -{74,-21,-32}, -{74,-21,-31}, -{74,-21,-30}, -{74,-21,-29}, -{74,-21,-28}, -{74,-21,-27}, -{74,-21,-26}, -{74,-21,-25}, -{74,-21,-24}, -{74,-21,-23}, -{74,-21,-22}, -{74,-21,-21}, -{74,-21,-20}, -{74,-21,-19}, -{74,-21,-18}, -{74,-21,-17}, -{74,-21,-16}, -{74,-21,-15}, -{74,-21,-14}, -{74,-21,-13}, -{74,-21,-12}, -{74,-21,-11}, -{74,-21,-10}, -{74,-21,-9}, -{74,-21,-8}, -{74,-21,-7}, -{74,-21,-6}, -{74,-21,-5}, -{74,-21,-4}, -{74,-21,-3}, -{74,-21,-2}, -{74,-21,-1}, -{74,-21,0}, -{74,-21,1}, -{74,-21,2}, -{74,-21,3}, -{74,-21,4}, -{74,-21,5}, -{74,-21,6}, -{74,-21,7}, -{74,-21,8}, -{74,-21,9}, -{74,-21,10}, -{74,-21,11}, -{74,-21,12}, -{74,-21,13}, -{74,-21,14}, -{74,-21,15}, -{74,-21,16}, -{74,-21,17}, -{74,-21,18}, -{74,-21,19}, -{74,-21,20}, -{74,-21,21}, -{74,-21,22}, -{74,-21,23}, -{74,-21,24}, -{74,-21,25}, -{74,-21,26}, -{74,-21,27}, -{74,-21,28}, -{74,-21,29}, -{74,-21,30}, -{74,-21,31}, -{74,-21,32}, -{74,-21,33}, -{74,-21,34}, -{74,-21,35}, -{74,-21,36}, -{74,-21,37}, -{74,-21,38}, -{74,-21,39}, -{74,-21,40}, -{74,-21,41}, -{74,-21,42}, -{74,-21,43}, -{74,-21,44}, -{74,-21,45}, -{74,-21,46}, -{74,-21,47}, -{74,-21,48}, -{74,-21,49}, -{74,-21,50}, -{74,-21,51}, -{74,-21,52}, -{74,-21,53}, -{74,-21,54}, -{74,-21,55}, -{74,-21,56}, -{74,-21,57}, -{74,-21,58}, -{74,-21,59}, -{74,-21,60}, -{74,-21,61}, -{74,-21,62}, -{74,-21,63}, -{74,-21,64}, -{74,-21,65}, -{74,-21,66}, -{74,-21,67}, -{74,-21,68}, -{74,-21,69}, -{74,-21,70}, -{74,-21,71}, -{74,-21,72}, -{74,-21,73}, -{74,-21,74}, -{74,-21,75}, -{74,-20,-40}, -{74,-20,-39}, -{74,-20,-38}, -{74,-20,-37}, -{74,-20,-36}, -{74,-20,-35}, -{74,-20,-34}, -{74,-20,-33}, -{74,-20,-32}, -{74,-20,-31}, -{74,-20,-30}, -{74,-20,-29}, -{74,-20,-28}, -{74,-20,-27}, -{74,-20,-26}, -{74,-20,-25}, -{74,-20,-24}, -{74,-20,-23}, -{74,-20,-22}, -{74,-20,-21}, -{74,-20,-20}, -{74,-20,-19}, -{74,-20,-18}, -{74,-20,-17}, -{74,-20,-16}, -{74,-20,-15}, -{74,-20,-14}, -{74,-20,-13}, -{74,-20,-12}, -{74,-20,-11}, -{74,-20,-10}, -{74,-20,-9}, -{74,-20,-8}, -{74,-20,-7}, -{74,-20,-6}, -{74,-20,-5}, -{74,-20,-4}, -{74,-20,-3}, -{74,-20,-2}, -{74,-20,-1}, -{74,-20,0}, -{74,-20,1}, -{74,-20,2}, -{74,-20,3}, -{74,-20,4}, -{74,-20,5}, -{74,-20,6}, -{74,-20,7}, -{74,-20,8}, -{74,-20,9}, -{74,-20,10}, -{74,-20,11}, -{74,-20,12}, -{74,-20,13}, -{74,-20,14}, -{74,-20,15}, -{74,-20,16}, -{74,-20,17}, -{74,-20,18}, -{74,-20,19}, -{74,-20,20}, -{74,-20,21}, -{74,-20,22}, -{74,-20,23}, -{74,-20,24}, -{74,-20,25}, -{74,-20,26}, -{74,-20,27}, -{74,-20,28}, -{74,-20,29}, -{74,-20,30}, -{74,-20,31}, -{74,-20,32}, -{74,-20,33}, -{74,-20,34}, -{74,-20,35}, -{74,-20,36}, -{74,-20,37}, -{74,-20,38}, -{74,-20,39}, -{74,-20,40}, -{74,-20,41}, -{74,-20,42}, -{74,-20,43}, -{74,-20,44}, -{74,-20,45}, -{74,-20,46}, -{74,-20,47}, -{74,-20,48}, -{74,-20,49}, -{74,-20,50}, -{74,-20,51}, -{74,-20,52}, -{74,-20,53}, -{74,-20,54}, -{74,-20,55}, -{74,-20,56}, -{74,-20,57}, -{74,-20,58}, -{74,-20,59}, -{74,-20,60}, -{74,-20,61}, -{74,-20,62}, -{74,-20,63}, -{74,-20,64}, -{74,-20,65}, -{74,-20,66}, -{74,-20,67}, -{74,-20,68}, -{74,-20,69}, -{74,-20,70}, -{74,-20,71}, -{74,-20,72}, -{74,-20,73}, -{74,-20,74}, -{74,-20,75}, -{74,-19,-40}, -{74,-19,-39}, -{74,-19,-38}, -{74,-19,-37}, -{74,-19,-36}, -{74,-19,-35}, -{74,-19,-34}, -{74,-19,-33}, -{74,-19,-32}, -{74,-19,-31}, -{74,-19,-30}, -{74,-19,-29}, -{74,-19,-28}, -{74,-19,-27}, -{74,-19,-26}, -{74,-19,-25}, -{74,-19,-24}, -{74,-19,-23}, -{74,-19,-22}, -{74,-19,-21}, -{74,-19,-20}, -{74,-19,-19}, -{74,-19,-18}, -{74,-19,-17}, -{74,-19,-16}, -{74,-19,-15}, -{74,-19,-14}, -{74,-19,-13}, -{74,-19,-12}, -{74,-19,-11}, -{74,-19,-10}, -{74,-19,-9}, -{74,-19,-8}, -{74,-19,-7}, -{74,-19,-6}, -{74,-19,-5}, -{74,-19,-4}, -{74,-19,-3}, -{74,-19,-2}, -{74,-19,-1}, -{74,-19,0}, -{74,-19,1}, -{74,-19,2}, -{74,-19,3}, -{74,-19,4}, -{74,-19,5}, -{74,-19,6}, -{74,-19,7}, -{74,-19,8}, -{74,-19,9}, -{74,-19,10}, -{74,-19,11}, -{74,-19,12}, -{74,-19,13}, -{74,-19,14}, -{74,-19,15}, -{74,-19,16}, -{74,-19,17}, -{74,-19,18}, -{74,-19,19}, -{74,-19,20}, -{74,-19,21}, -{74,-19,22}, -{74,-19,23}, -{74,-19,24}, -{74,-19,25}, -{74,-19,26}, -{74,-19,27}, -{74,-19,28}, -{74,-19,29}, -{74,-19,30}, -{74,-19,31}, -{74,-19,32}, -{74,-19,33}, -{74,-19,34}, -{74,-19,35}, -{74,-19,36}, -{74,-19,37}, -{74,-19,38}, -{74,-19,39}, -{74,-19,40}, -{74,-19,41}, -{74,-19,42}, -{74,-19,43}, -{74,-19,44}, -{74,-19,45}, -{74,-19,46}, -{74,-19,47}, -{74,-19,48}, -{74,-19,49}, -{74,-19,50}, -{74,-19,51}, -{74,-19,52}, -{74,-19,53}, -{74,-19,54}, -{74,-19,55}, -{74,-19,56}, -{74,-19,57}, -{74,-19,58}, -{74,-19,59}, -{74,-19,60}, -{74,-19,61}, -{74,-19,62}, -{74,-19,63}, -{74,-19,64}, -{74,-19,65}, -{74,-19,66}, -{74,-19,67}, -{74,-19,68}, -{74,-19,69}, -{74,-19,70}, -{74,-19,71}, -{74,-19,72}, -{74,-19,73}, -{74,-19,74}, -{74,-19,75}, -{74,-18,-40}, -{74,-18,-39}, -{74,-18,-38}, -{74,-18,-37}, -{74,-18,-36}, -{74,-18,-35}, -{74,-18,-34}, -{74,-18,-33}, -{74,-18,-32}, -{74,-18,-31}, -{74,-18,-30}, -{74,-18,-29}, -{74,-18,-28}, -{74,-18,-27}, -{74,-18,-26}, -{74,-18,-25}, -{74,-18,-24}, -{74,-18,-23}, -{74,-18,-22}, -{74,-18,-21}, -{74,-18,-20}, -{74,-18,-19}, -{74,-18,-18}, -{74,-18,-17}, -{74,-18,-16}, -{74,-18,-15}, -{74,-18,-14}, -{74,-18,-13}, -{74,-18,-12}, -{74,-18,-11}, -{74,-18,-10}, -{74,-18,-9}, -{74,-18,-8}, -{74,-18,-7}, -{74,-18,-6}, -{74,-18,-5}, -{74,-18,-4}, -{74,-18,-3}, -{74,-18,-2}, -{74,-18,-1}, -{74,-18,0}, -{74,-18,1}, -{74,-18,2}, -{74,-18,3}, -{74,-18,4}, -{74,-18,5}, -{74,-18,6}, -{74,-18,7}, -{74,-18,8}, -{74,-18,9}, -{74,-18,10}, -{74,-18,11}, -{74,-18,12}, -{74,-18,13}, -{74,-18,14}, -{74,-18,15}, -{74,-18,16}, -{74,-18,17}, -{74,-18,18}, -{74,-18,19}, -{74,-18,20}, -{74,-18,21}, -{74,-18,22}, -{74,-18,23}, -{74,-18,24}, -{74,-18,25}, -{74,-18,26}, -{74,-18,27}, -{74,-18,28}, -{74,-18,29}, -{74,-18,30}, -{74,-18,31}, -{74,-18,32}, -{74,-18,33}, -{74,-18,34}, -{74,-18,35}, -{74,-18,36}, -{74,-18,37}, -{74,-18,38}, -{74,-18,39}, -{74,-18,40}, -{74,-18,41}, -{74,-18,42}, -{74,-18,43}, -{74,-18,44}, -{74,-18,45}, -{74,-18,46}, -{74,-18,47}, -{74,-18,48}, -{74,-18,49}, -{74,-18,50}, -{74,-18,51}, -{74,-18,52}, -{74,-18,53}, -{74,-18,54}, -{74,-18,55}, -{74,-18,56}, -{74,-18,57}, -{74,-18,58}, -{74,-18,59}, -{74,-18,60}, -{74,-18,61}, -{74,-18,62}, -{74,-18,63}, -{74,-18,64}, -{74,-18,65}, -{74,-18,66}, -{74,-18,67}, -{74,-18,68}, -{74,-18,69}, -{74,-18,70}, -{74,-18,71}, -{74,-18,72}, -{74,-18,73}, -{74,-18,74}, -{74,-18,75}, -{74,-17,-40}, -{74,-17,-39}, -{74,-17,-38}, -{74,-17,-37}, -{74,-17,-36}, -{74,-17,-35}, -{74,-17,-34}, -{74,-17,-33}, -{74,-17,-32}, -{74,-17,-31}, -{74,-17,-30}, -{74,-17,-29}, -{74,-17,-28}, -{74,-17,-27}, -{74,-17,-26}, -{74,-17,-25}, -{74,-17,-24}, -{74,-17,-23}, -{74,-17,-22}, -{74,-17,-21}, -{74,-17,-20}, -{74,-17,-19}, -{74,-17,-18}, -{74,-17,-17}, -{74,-17,-16}, -{74,-17,-15}, -{74,-17,-14}, -{74,-17,-13}, -{74,-17,-12}, -{74,-17,-11}, -{74,-17,-10}, -{74,-17,-9}, -{74,-17,-8}, -{74,-17,-7}, -{74,-17,-6}, -{74,-17,-5}, -{74,-17,-4}, -{74,-17,-3}, -{74,-17,-2}, -{74,-17,-1}, -{74,-17,0}, -{74,-17,1}, -{74,-17,2}, -{74,-17,3}, -{74,-17,4}, -{74,-17,5}, -{74,-17,6}, -{74,-17,7}, -{74,-17,8}, -{74,-17,9}, -{74,-17,10}, -{74,-17,11}, -{74,-17,12}, -{74,-17,13}, -{74,-17,14}, -{74,-17,15}, -{74,-17,16}, -{74,-17,17}, -{74,-17,18}, -{74,-17,19}, -{74,-17,20}, -{74,-17,21}, -{74,-17,22}, -{74,-17,23}, -{74,-17,24}, -{74,-17,25}, -{74,-17,26}, -{74,-17,27}, -{74,-17,28}, -{74,-17,29}, -{74,-17,30}, -{74,-17,31}, -{74,-17,32}, -{74,-17,33}, -{74,-17,34}, -{74,-17,35}, -{74,-17,36}, -{74,-17,37}, -{74,-17,38}, -{74,-17,39}, -{74,-17,40}, -{74,-17,41}, -{74,-17,42}, -{74,-17,43}, -{74,-17,44}, -{74,-17,45}, -{74,-17,46}, -{74,-17,47}, -{74,-17,48}, -{74,-17,49}, -{74,-17,50}, -{74,-17,51}, -{74,-17,52}, -{74,-17,53}, -{74,-17,54}, -{74,-17,55}, -{74,-17,56}, -{74,-17,57}, -{74,-17,58}, -{74,-17,59}, -{74,-17,60}, -{74,-17,61}, -{74,-17,62}, -{74,-17,63}, -{74,-17,64}, -{74,-17,65}, -{74,-17,66}, -{74,-17,67}, -{74,-17,68}, -{74,-17,69}, -{74,-17,70}, -{74,-17,71}, -{74,-17,72}, -{74,-17,73}, -{74,-17,74}, -{74,-17,75}, -{74,-16,-40}, -{74,-16,-39}, -{74,-16,-38}, -{74,-16,-37}, -{74,-16,-36}, -{74,-16,-35}, -{74,-16,-34}, -{74,-16,-33}, -{74,-16,-32}, -{74,-16,-31}, -{74,-16,-30}, -{74,-16,-29}, -{74,-16,-28}, -{74,-16,-27}, -{74,-16,-26}, -{74,-16,-25}, -{74,-16,-24}, -{74,-16,-23}, -{74,-16,-22}, -{74,-16,-21}, -{74,-16,-20}, -{74,-16,-19}, -{74,-16,-18}, -{74,-16,-17}, -{74,-16,-16}, -{74,-16,-15}, -{74,-16,-14}, -{74,-16,-13}, -{74,-16,-12}, -{74,-16,-11}, -{74,-16,-10}, -{74,-16,-9}, -{74,-16,-8}, -{74,-16,-7}, -{74,-16,-6}, -{74,-16,-5}, -{74,-16,-4}, -{74,-16,-3}, -{74,-16,-2}, -{74,-16,-1}, -{74,-16,0}, -{74,-16,1}, -{74,-16,2}, -{74,-16,3}, -{74,-16,4}, -{74,-16,5}, -{74,-16,6}, -{74,-16,7}, -{74,-16,8}, -{74,-16,9}, -{74,-16,10}, -{74,-16,11}, -{74,-16,12}, -{74,-16,13}, -{74,-16,14}, -{74,-16,15}, -{74,-16,16}, -{74,-16,17}, -{74,-16,18}, -{74,-16,19}, -{74,-16,20}, -{74,-16,21}, -{74,-16,22}, -{74,-16,23}, -{74,-16,24}, -{74,-16,25}, -{74,-16,26}, -{74,-16,27}, -{74,-16,28}, -{74,-16,29}, -{74,-16,30}, -{74,-16,31}, -{74,-16,32}, -{74,-16,33}, -{74,-16,34}, -{74,-16,35}, -{74,-16,36}, -{74,-16,37}, -{74,-16,38}, -{74,-16,39}, -{74,-16,40}, -{74,-16,41}, -{74,-16,42}, -{74,-16,43}, -{74,-16,44}, -{74,-16,45}, -{74,-16,46}, -{74,-16,47}, -{74,-16,48}, -{74,-16,49}, -{74,-16,50}, -{74,-16,51}, -{74,-16,52}, -{74,-16,53}, -{74,-16,54}, -{74,-16,55}, -{74,-16,56}, -{74,-16,57}, -{74,-16,58}, -{74,-16,59}, -{74,-16,60}, -{74,-16,61}, -{74,-16,62}, -{74,-16,63}, -{74,-16,64}, -{74,-16,65}, -{74,-16,66}, -{74,-16,67}, -{74,-16,68}, -{74,-16,69}, -{74,-16,70}, -{74,-16,71}, -{74,-16,72}, -{74,-16,73}, -{74,-16,74}, -{74,-16,75}, -{74,-15,-40}, -{74,-15,-39}, -{74,-15,-38}, -{74,-15,-37}, -{74,-15,-36}, -{74,-15,-35}, -{74,-15,-34}, -{74,-15,-33}, -{74,-15,-32}, -{74,-15,-31}, -{74,-15,-30}, -{74,-15,-29}, -{74,-15,-28}, -{74,-15,-27}, -{74,-15,-26}, -{74,-15,-25}, -{74,-15,-24}, -{74,-15,-23}, -{74,-15,-22}, -{74,-15,-21}, -{74,-15,-20}, -{74,-15,-19}, -{74,-15,-18}, -{74,-15,-17}, -{74,-15,-16}, -{74,-15,-15}, -{74,-15,-14}, -{74,-15,-13}, -{74,-15,-12}, -{74,-15,-11}, -{74,-15,-10}, -{74,-15,-9}, -{74,-15,-8}, -{74,-15,-7}, -{74,-15,-6}, -{74,-15,-5}, -{74,-15,-4}, -{74,-15,-3}, -{74,-15,-2}, -{74,-15,-1}, -{74,-15,0}, -{74,-15,1}, -{74,-15,2}, -{74,-15,3}, -{74,-15,4}, -{74,-15,5}, -{74,-15,6}, -{74,-15,7}, -{74,-15,8}, -{74,-15,9}, -{74,-15,10}, -{74,-15,11}, -{74,-15,12}, -{74,-15,13}, -{74,-15,14}, -{74,-15,15}, -{74,-15,16}, -{74,-15,17}, -{74,-15,18}, -{74,-15,19}, -{74,-15,20}, -{74,-15,21}, -{74,-15,22}, -{74,-15,23}, -{74,-15,24}, -{74,-15,25}, -{74,-15,26}, -{74,-15,27}, -{74,-15,28}, -{74,-15,29}, -{74,-15,30}, -{74,-15,31}, -{74,-15,32}, -{74,-15,33}, -{74,-15,34}, -{74,-15,35}, -{74,-15,36}, -{74,-15,37}, -{74,-15,38}, -{74,-15,39}, -{74,-15,40}, -{74,-15,41}, -{74,-15,42}, -{74,-15,43}, -{74,-15,44}, -{74,-15,45}, -{74,-15,46}, -{74,-15,47}, -{74,-15,48}, -{74,-15,49}, -{74,-15,50}, -{74,-15,51}, -{74,-15,52}, -{74,-15,53}, -{74,-15,54}, -{74,-15,55}, -{74,-15,56}, -{74,-15,57}, -{74,-15,58}, -{74,-15,59}, -{74,-15,60}, -{74,-15,61}, -{74,-15,62}, -{74,-15,63}, -{74,-15,64}, -{74,-15,65}, -{74,-15,66}, -{74,-15,67}, -{74,-15,68}, -{74,-15,69}, -{74,-15,70}, -{74,-15,71}, -{74,-15,72}, -{74,-15,73}, -{74,-15,74}, -{74,-15,75}, -{74,-14,-40}, -{74,-14,-39}, -{74,-14,-38}, -{74,-14,-37}, -{74,-14,-36}, -{74,-14,-35}, -{74,-14,-34}, -{74,-14,-33}, -{74,-14,-32}, -{74,-14,-31}, -{74,-14,-30}, -{74,-14,-29}, -{74,-14,-28}, -{74,-14,-27}, -{74,-14,-26}, -{74,-14,-25}, -{74,-14,-24}, -{74,-14,-23}, -{74,-14,-22}, -{74,-14,-21}, -{74,-14,-20}, -{74,-14,-19}, -{74,-14,-18}, -{74,-14,-17}, -{74,-14,-16}, -{74,-14,-15}, -{74,-14,-14}, -{74,-14,-13}, -{74,-14,-12}, -{74,-14,-11}, -{74,-14,-10}, -{74,-14,-9}, -{74,-14,-8}, -{74,-14,-7}, -{74,-14,-6}, -{74,-14,-5}, -{74,-14,-4}, -{74,-14,-3}, -{74,-14,-2}, -{74,-14,-1}, -{74,-14,0}, -{74,-14,1}, -{74,-14,2}, -{74,-14,3}, -{74,-14,4}, -{74,-14,5}, -{74,-14,6}, -{74,-14,7}, -{74,-14,8}, -{74,-14,9}, -{74,-14,10}, -{74,-14,11}, -{74,-14,12}, -{74,-14,13}, -{74,-14,14}, -{74,-14,15}, -{74,-14,16}, -{74,-14,17}, -{74,-14,18}, -{74,-14,19}, -{74,-14,20}, -{74,-14,21}, -{74,-14,22}, -{74,-14,23}, -{74,-14,24}, -{74,-14,25}, -{74,-14,26}, -{74,-14,27}, -{74,-14,28}, -{74,-14,29}, -{74,-14,30}, -{74,-14,31}, -{74,-14,32}, -{74,-14,33}, -{74,-14,34}, -{74,-14,35}, -{74,-14,36}, -{74,-14,37}, -{74,-14,38}, -{74,-14,39}, -{74,-14,40}, -{74,-14,41}, -{74,-14,42}, -{74,-14,43}, -{74,-14,44}, -{74,-14,45}, -{74,-14,46}, -{74,-14,47}, -{74,-14,48}, -{74,-14,49}, -{74,-14,50}, -{74,-14,51}, -{74,-14,52}, -{74,-14,53}, -{74,-14,54}, -{74,-14,55}, -{74,-14,56}, -{74,-14,57}, -{74,-14,58}, -{74,-14,59}, -{74,-14,60}, -{74,-14,61}, -{74,-14,62}, -{74,-14,63}, -{74,-14,64}, -{74,-14,65}, -{74,-14,66}, -{74,-14,67}, -{74,-14,68}, -{74,-14,69}, -{74,-14,70}, -{74,-14,71}, -{74,-14,72}, -{74,-14,73}, -{74,-14,74}, -{74,-14,75}, -{74,-13,-40}, -{74,-13,-39}, -{74,-13,-38}, -{74,-13,-37}, -{74,-13,-36}, -{74,-13,-35}, -{74,-13,-34}, -{74,-13,-33}, -{74,-13,-32}, -{74,-13,-31}, -{74,-13,-30}, -{74,-13,-29}, -{74,-13,-28}, -{74,-13,-27}, -{74,-13,-26}, -{74,-13,-25}, -{74,-13,-24}, -{74,-13,-23}, -{74,-13,-22}, -{74,-13,-21}, -{74,-13,-20}, -{74,-13,-19}, -{74,-13,-18}, -{74,-13,-17}, -{74,-13,-16}, -{74,-13,-15}, -{74,-13,-14}, -{74,-13,-13}, -{74,-13,-12}, -{74,-13,-11}, -{74,-13,-10}, -{74,-13,-9}, -{74,-13,-8}, -{74,-13,-7}, -{74,-13,-6}, -{74,-13,-5}, -{74,-13,-4}, -{74,-13,-3}, -{74,-13,-2}, -{74,-13,-1}, -{74,-13,0}, -{74,-13,1}, -{74,-13,2}, -{74,-13,3}, -{74,-13,4}, -{74,-13,5}, -{74,-13,6}, -{74,-13,7}, -{74,-13,8}, -{74,-13,9}, -{74,-13,10}, -{74,-13,11}, -{74,-13,12}, -{74,-13,13}, -{74,-13,14}, -{74,-13,15}, -{74,-13,16}, -{74,-13,17}, -{74,-13,18}, -{74,-13,19}, -{74,-13,20}, -{74,-13,21}, -{74,-13,22}, -{74,-13,23}, -{74,-13,24}, -{74,-13,25}, -{74,-13,26}, -{74,-13,27}, -{74,-13,28}, -{74,-13,29}, -{74,-13,30}, -{74,-13,31}, -{74,-13,32}, -{74,-13,33}, -{74,-13,34}, -{74,-13,35}, -{74,-13,36}, -{74,-13,37}, -{74,-13,38}, -{74,-13,39}, -{74,-13,40}, -{74,-13,41}, -{74,-13,42}, -{74,-13,43}, -{74,-13,44}, -{74,-13,45}, -{74,-13,46}, -{74,-13,47}, -{74,-13,48}, -{74,-13,49}, -{74,-13,50}, -{74,-13,51}, -{74,-13,52}, -{74,-13,53}, -{74,-13,54}, -{74,-13,55}, -{74,-13,56}, -{74,-13,57}, -{74,-13,58}, -{74,-13,59}, -{74,-13,60}, -{74,-13,61}, -{74,-13,62}, -{74,-13,63}, -{74,-13,64}, -{74,-13,65}, -{74,-13,66}, -{74,-13,67}, -{74,-13,68}, -{74,-13,69}, -{74,-13,70}, -{74,-13,71}, -{74,-13,72}, -{74,-13,73}, -{74,-13,74}, -{74,-13,75}, -{74,-12,-40}, -{74,-12,-39}, -{74,-12,-38}, -{74,-12,-37}, -{74,-12,-36}, -{74,-12,-35}, -{74,-12,-34}, -{74,-12,-33}, -{74,-12,-32}, -{74,-12,-31}, -{74,-12,-30}, -{74,-12,-29}, -{74,-12,-28}, -{74,-12,-27}, -{74,-12,-26}, -{74,-12,-25}, -{74,-12,-24}, -{74,-12,-23}, -{74,-12,-22}, -{74,-12,-21}, -{74,-12,-20}, -{74,-12,-19}, -{74,-12,-18}, -{74,-12,-17}, -{74,-12,-16}, -{74,-12,-15}, -{74,-12,-14}, -{74,-12,-13}, -{74,-12,-12}, -{74,-12,-11}, -{74,-12,-10}, -{74,-12,-9}, -{74,-12,-8}, -{74,-12,-7}, -{74,-12,-6}, -{74,-12,-5}, -{74,-12,-4}, -{74,-12,-3}, -{74,-12,-2}, -{74,-12,-1}, -{74,-12,0}, -{74,-12,1}, -{74,-12,2}, -{74,-12,3}, -{74,-12,4}, -{74,-12,5}, -{74,-12,6}, -{74,-12,7}, -{74,-12,8}, -{74,-12,9}, -{74,-12,10}, -{74,-12,11}, -{74,-12,12}, -{74,-12,13}, -{74,-12,14}, -{74,-12,15}, -{74,-12,16}, -{74,-12,17}, -{74,-12,18}, -{74,-12,19}, -{74,-12,20}, -{74,-12,21}, -{74,-12,22}, -{74,-12,23}, -{74,-12,24}, -{74,-12,25}, -{74,-12,26}, -{74,-12,27}, -{74,-12,28}, -{74,-12,29}, -{74,-12,30}, -{74,-12,31}, -{74,-12,32}, -{74,-12,33}, -{74,-12,34}, -{74,-12,35}, -{74,-12,36}, -{74,-12,37}, -{74,-12,38}, -{74,-12,39}, -{74,-12,40}, -{74,-12,41}, -{74,-12,42}, -{74,-12,43}, -{74,-12,44}, -{74,-12,45}, -{74,-12,46}, -{74,-12,47}, -{74,-12,48}, -{74,-12,49}, -{74,-12,50}, -{74,-12,51}, -{74,-12,52}, -{74,-12,53}, -{74,-12,54}, -{74,-12,55}, -{74,-12,56}, -{74,-12,57}, -{74,-12,58}, -{74,-12,59}, -{74,-12,60}, -{74,-12,61}, -{74,-12,62}, -{74,-12,63}, -{74,-12,64}, -{74,-12,65}, -{74,-12,66}, -{74,-12,67}, -{74,-12,68}, -{74,-12,69}, -{74,-12,70}, -{74,-12,71}, -{74,-12,72}, -{74,-12,73}, -{74,-12,74}, -{74,-12,75}, -{74,-11,-40}, -{74,-11,-39}, -{74,-11,-38}, -{74,-11,-37}, -{74,-11,-36}, -{74,-11,-35}, -{74,-11,-34}, -{74,-11,-33}, -{74,-11,-32}, -{74,-11,-31}, -{74,-11,-30}, -{74,-11,-29}, -{74,-11,-28}, -{74,-11,-27}, -{74,-11,-26}, -{74,-11,-25}, -{74,-11,-24}, -{74,-11,-23}, -{74,-11,-22}, -{74,-11,-21}, -{74,-11,-20}, -{74,-11,-19}, -{74,-11,-18}, -{74,-11,-17}, -{74,-11,-16}, -{74,-11,-15}, -{74,-11,-14}, -{74,-11,-13}, -{74,-11,-12}, -{74,-11,-11}, -{74,-11,-10}, -{74,-11,-9}, -{74,-11,-8}, -{74,-11,-7}, -{74,-11,-6}, -{74,-11,-5}, -{74,-11,-4}, -{74,-11,-3}, -{74,-11,-2}, -{74,-11,-1}, -{74,-11,0}, -{74,-11,1}, -{74,-11,2}, -{74,-11,3}, -{74,-11,4}, -{74,-11,5}, -{74,-11,6}, -{74,-11,7}, -{74,-11,8}, -{74,-11,9}, -{74,-11,10}, -{74,-11,11}, -{74,-11,12}, -{74,-11,13}, -{74,-11,14}, -{74,-11,15}, -{74,-11,16}, -{74,-11,17}, -{74,-11,18}, -{74,-11,19}, -{74,-11,20}, -{74,-11,21}, -{74,-11,22}, -{74,-11,23}, -{74,-11,24}, -{74,-11,25}, -{74,-11,26}, -{74,-11,27}, -{74,-11,28}, -{74,-11,29}, -{74,-11,30}, -{74,-11,31}, -{74,-11,32}, -{74,-11,33}, -{74,-11,34}, -{74,-11,35}, -{74,-11,36}, -{74,-11,37}, -{74,-11,38}, -{74,-11,39}, -{74,-11,40}, -{74,-11,41}, -{74,-11,42}, -{74,-11,43}, -{74,-11,44}, -{74,-11,45}, -{74,-11,46}, -{74,-11,47}, -{74,-11,48}, -{74,-11,49}, -{74,-11,50}, -{74,-11,51}, -{74,-11,52}, -{74,-11,53}, -{74,-11,54}, -{74,-11,55}, -{74,-11,56}, -{74,-11,57}, -{74,-11,58}, -{74,-11,59}, -{74,-11,60}, -{74,-11,61}, -{74,-11,62}, -{74,-11,63}, -{74,-11,64}, -{74,-11,65}, -{74,-11,66}, -{74,-11,67}, -{74,-11,68}, -{74,-11,69}, -{74,-11,70}, -{74,-11,71}, -{74,-11,72}, -{74,-11,73}, -{74,-11,74}, -{74,-11,75}, -{74,-10,-40}, -{74,-10,-39}, -{74,-10,-38}, -{74,-10,-37}, -{74,-10,-36}, -{74,-10,-35}, -{74,-10,-34}, -{74,-10,-33}, -{74,-10,-32}, -{74,-10,-31}, -{74,-10,-30}, -{74,-10,-29}, -{74,-10,-28}, -{74,-10,-27}, -{74,-10,-26}, -{74,-10,-25}, -{74,-10,-24}, -{74,-10,-23}, -{74,-10,-22}, -{74,-10,-21}, -{74,-10,-20}, -{74,-10,-19}, -{74,-10,-18}, -{74,-10,-17}, -{74,-10,-16}, -{74,-10,-15}, -{74,-10,-14}, -{74,-10,-13}, -{74,-10,-12}, -{74,-10,-11}, -{74,-10,-10}, -{74,-10,-9}, -{74,-10,-8}, -{74,-10,-7}, -{74,-10,-6}, -{74,-10,-5}, -{74,-10,-4}, -{74,-10,-3}, -{74,-10,-2}, -{74,-10,-1}, -{74,-10,0}, -{74,-10,1}, -{74,-10,2}, -{74,-10,3}, -{74,-10,4}, -{74,-10,5}, -{74,-10,6}, -{74,-10,7}, -{74,-10,8}, -{74,-10,9}, -{74,-10,10}, -{74,-10,11}, -{74,-10,12}, -{74,-10,13}, -{74,-10,14}, -{74,-10,15}, -{74,-10,16}, -{74,-10,17}, -{74,-10,18}, -{74,-10,19}, -{74,-10,20}, -{74,-10,21}, -{74,-10,22}, -{74,-10,23}, -{74,-10,24}, -{74,-10,25}, -{74,-10,26}, -{74,-10,27}, -{74,-10,28}, -{74,-10,29}, -{74,-10,30}, -{74,-10,31}, -{74,-10,32}, -{74,-10,33}, -{74,-10,34}, -{74,-10,35}, -{74,-10,36}, -{74,-10,37}, -{74,-10,38}, -{74,-10,39}, -{74,-10,40}, -{74,-10,41}, -{74,-10,42}, -{74,-10,43}, -{74,-10,44}, -{74,-10,45}, -{74,-10,46}, -{74,-10,47}, -{74,-10,48}, -{74,-10,49}, -{74,-10,50}, -{74,-10,51}, -{74,-10,52}, -{74,-10,53}, -{74,-10,54}, -{74,-10,55}, -{74,-10,56}, -{74,-10,57}, -{74,-10,58}, -{74,-10,59}, -{74,-10,60}, -{74,-10,61}, -{74,-10,62}, -{74,-10,63}, -{74,-10,64}, -{74,-10,65}, -{74,-10,66}, -{74,-10,67}, -{74,-10,68}, -{74,-10,69}, -{74,-10,70}, -{74,-10,71}, -{74,-10,72}, -{74,-10,73}, -{74,-10,74}, -{74,-10,75}, -{74,-9,-40}, -{74,-9,-39}, -{74,-9,-38}, -{74,-9,-37}, -{74,-9,-36}, -{74,-9,-35}, -{74,-9,-34}, -{74,-9,-33}, -{74,-9,-32}, -{74,-9,-31}, -{74,-9,-30}, -{74,-9,-29}, -{74,-9,-28}, -{74,-9,-27}, -{74,-9,-26}, -{74,-9,-25}, -{74,-9,-24}, -{74,-9,-23}, -{74,-9,-22}, -{74,-9,-21}, -{74,-9,-20}, -{74,-9,-19}, -{74,-9,-18}, -{74,-9,-17}, -{74,-9,-16}, -{74,-9,-15}, -{74,-9,-14}, -{74,-9,-13}, -{74,-9,-12}, -{74,-9,-11}, -{74,-9,-10}, -{74,-9,-9}, -{74,-9,-8}, -{74,-9,-7}, -{74,-9,-6}, -{74,-9,-5}, -{74,-9,-4}, -{74,-9,-3}, -{74,-9,-2}, -{74,-9,-1}, -{74,-9,0}, -{74,-9,1}, -{74,-9,2}, -{74,-9,3}, -{74,-9,4}, -{74,-9,5}, -{74,-9,6}, -{74,-9,7}, -{74,-9,8}, -{74,-9,9}, -{74,-9,10}, -{74,-9,11}, -{74,-9,12}, -{74,-9,13}, -{74,-9,14}, -{74,-9,15}, -{74,-9,16}, -{74,-9,17}, -{74,-9,18}, -{74,-9,19}, -{74,-9,20}, -{74,-9,21}, -{74,-9,22}, -{74,-9,23}, -{74,-9,24}, -{74,-9,25}, -{74,-9,26}, -{74,-9,27}, -{74,-9,28}, -{74,-9,29}, -{74,-9,30}, -{74,-9,31}, -{74,-9,32}, -{74,-9,33}, -{74,-9,34}, -{74,-9,35}, -{74,-9,36}, -{74,-9,37}, -{74,-9,38}, -{74,-9,39}, -{74,-9,40}, -{74,-9,41}, -{74,-9,42}, -{74,-9,43}, -{74,-9,44}, -{74,-9,45}, -{74,-9,46}, -{74,-9,47}, -{74,-9,48}, -{74,-9,49}, -{74,-9,50}, -{74,-9,51}, -{74,-9,52}, -{74,-9,53}, -{74,-9,54}, -{74,-9,55}, -{74,-9,56}, -{74,-9,57}, -{74,-9,58}, -{74,-9,59}, -{74,-9,60}, -{74,-9,61}, -{74,-9,62}, -{74,-9,63}, -{74,-9,64}, -{74,-9,65}, -{74,-9,66}, -{74,-9,67}, -{74,-9,68}, -{74,-9,69}, -{74,-9,70}, -{74,-9,71}, -{74,-9,72}, -{74,-9,73}, -{74,-9,74}, -{74,-9,75}, -{74,-8,-40}, -{74,-8,-39}, -{74,-8,-38}, -{74,-8,-37}, -{74,-8,-36}, -{74,-8,-35}, -{74,-8,-34}, -{74,-8,-33}, -{74,-8,-32}, -{74,-8,-31}, -{74,-8,-30}, -{74,-8,-29}, -{74,-8,-28}, -{74,-8,-27}, -{74,-8,-26}, -{74,-8,-25}, -{74,-8,-24}, -{74,-8,-23}, -{74,-8,-22}, -{74,-8,-21}, -{74,-8,-20}, -{74,-8,-19}, -{74,-8,-18}, -{74,-8,-17}, -{74,-8,-16}, -{74,-8,-15}, -{74,-8,-14}, -{74,-8,-13}, -{74,-8,-12}, -{74,-8,-11}, -{74,-8,-10}, -{74,-8,-9}, -{74,-8,-8}, -{74,-8,-7}, -{74,-8,-6}, -{74,-8,-5}, -{74,-8,-4}, -{74,-8,-3}, -{74,-8,-2}, -{74,-8,-1}, -{74,-8,0}, -{74,-8,1}, -{74,-8,2}, -{74,-8,3}, -{74,-8,4}, -{74,-8,5}, -{74,-8,6}, -{74,-8,7}, -{74,-8,8}, -{74,-8,9}, -{74,-8,10}, -{74,-8,11}, -{74,-8,12}, -{74,-8,13}, -{74,-8,14}, -{74,-8,15}, -{74,-8,16}, -{74,-8,17}, -{74,-8,18}, -{74,-8,19}, -{74,-8,20}, -{74,-8,21}, -{74,-8,22}, -{74,-8,23}, -{74,-8,24}, -{74,-8,25}, -{74,-8,26}, -{74,-8,27}, -{74,-8,28}, -{74,-8,29}, -{74,-8,30}, -{74,-8,31}, -{74,-8,32}, -{74,-8,33}, -{74,-8,34}, -{74,-8,35}, -{74,-8,36}, -{74,-8,37}, -{74,-8,38}, -{74,-8,39}, -{74,-8,40}, -{74,-8,41}, -{74,-8,42}, -{74,-8,43}, -{74,-8,44}, -{74,-8,45}, -{74,-8,46}, -{74,-8,47}, -{74,-8,48}, -{74,-8,49}, -{74,-8,50}, -{74,-8,51}, -{74,-8,52}, -{74,-8,53}, -{74,-8,54}, -{74,-8,55}, -{74,-8,56}, -{74,-8,57}, -{74,-8,58}, -{74,-8,59}, -{74,-8,60}, -{74,-8,61}, -{74,-8,62}, -{74,-8,63}, -{74,-8,64}, -{74,-8,65}, -{74,-8,66}, -{74,-8,67}, -{74,-8,68}, -{74,-8,69}, -{74,-8,70}, -{74,-8,71}, -{74,-8,72}, -{74,-8,73}, -{74,-8,74}, -{74,-8,75}, -{74,-7,-40}, -{74,-7,-39}, -{74,-7,-38}, -{74,-7,-37}, -{74,-7,-36}, -{74,-7,-35}, -{74,-7,-34}, -{74,-7,-33}, -{74,-7,-32}, -{74,-7,-31}, -{74,-7,-30}, -{74,-7,-29}, -{74,-7,-28}, -{74,-7,-27}, -{74,-7,-26}, -{74,-7,-25}, -{74,-7,-24}, -{74,-7,-23}, -{74,-7,-22}, -{74,-7,-21}, -{74,-7,-20}, -{74,-7,-19}, -{74,-7,-18}, -{74,-7,-17}, -{74,-7,-16}, -{74,-7,-15}, -{74,-7,-14}, -{74,-7,-13}, -{74,-7,-12}, -{74,-7,-11}, -{74,-7,-10}, -{74,-7,-9}, -{74,-7,-8}, -{74,-7,-7}, -{74,-7,-6}, -{74,-7,-5}, -{74,-7,-4}, -{74,-7,-3}, -{74,-7,-2}, -{74,-7,-1}, -{74,-7,0}, -{74,-7,1}, -{74,-7,2}, -{74,-7,3}, -{74,-7,4}, -{74,-7,5}, -{74,-7,6}, -{74,-7,7}, -{74,-7,8}, -{74,-7,9}, -{74,-7,10}, -{74,-7,11}, -{74,-7,12}, -{74,-7,13}, -{74,-7,14}, -{74,-7,15}, -{74,-7,16}, -{74,-7,17}, -{74,-7,18}, -{74,-7,19}, -{74,-7,20}, -{74,-7,21}, -{74,-7,22}, -{74,-7,23}, -{74,-7,24}, -{74,-7,25}, -{74,-7,26}, -{74,-7,27}, -{74,-7,28}, -{74,-7,29}, -{74,-7,30}, -{74,-7,31}, -{74,-7,32}, -{74,-7,33}, -{74,-7,34}, -{74,-7,35}, -{74,-7,36}, -{74,-7,37}, -{74,-7,38}, -{74,-7,39}, -{74,-7,40}, -{74,-7,41}, -{74,-7,42}, -{74,-7,43}, -{74,-7,44}, -{74,-7,45}, -{74,-7,46}, -{74,-7,47}, -{74,-7,48}, -{74,-7,49}, -{74,-7,50}, -{74,-7,51}, -{74,-7,52}, -{74,-7,53}, -{74,-7,54}, -{74,-7,55}, -{74,-7,56}, -{74,-7,57}, -{74,-7,58}, -{74,-7,59}, -{74,-7,60}, -{74,-7,61}, -{74,-7,62}, -{74,-7,63}, -{74,-7,64}, -{74,-7,65}, -{74,-7,66}, -{74,-7,67}, -{74,-7,68}, -{74,-7,69}, -{74,-7,70}, -{74,-7,71}, -{74,-7,72}, -{74,-7,73}, -{74,-7,74}, -{74,-7,75}, -{74,-7,76}, -{74,-6,-40}, -{74,-6,-39}, -{74,-6,-38}, -{74,-6,-37}, -{74,-6,-36}, -{74,-6,-35}, -{74,-6,-34}, -{74,-6,-33}, -{74,-6,-32}, -{74,-6,-31}, -{74,-6,-30}, -{74,-6,-29}, -{74,-6,-28}, -{74,-6,-27}, -{74,-6,-26}, -{74,-6,-25}, -{74,-6,-24}, -{74,-6,-23}, -{74,-6,-22}, -{74,-6,-21}, -{74,-6,-20}, -{74,-6,-19}, -{74,-6,-18}, -{74,-6,-17}, -{74,-6,-16}, -{74,-6,-15}, -{74,-6,-14}, -{74,-6,-13}, -{74,-6,-12}, -{74,-6,-11}, -{74,-6,-10}, -{74,-6,-9}, -{74,-6,-8}, -{74,-6,-7}, -{74,-6,-6}, -{74,-6,-5}, -{74,-6,-4}, -{74,-6,-3}, -{74,-6,-2}, -{74,-6,-1}, -{74,-6,0}, -{74,-6,1}, -{74,-6,2}, -{74,-6,3}, -{74,-6,4}, -{74,-6,5}, -{74,-6,6}, -{74,-6,7}, -{74,-6,8}, -{74,-6,9}, -{74,-6,10}, -{74,-6,11}, -{74,-6,12}, -{74,-6,13}, -{74,-6,14}, -{74,-6,15}, -{74,-6,16}, -{74,-6,17}, -{74,-6,18}, -{74,-6,19}, -{74,-6,20}, -{74,-6,21}, -{74,-6,22}, -{74,-6,23}, -{74,-6,24}, -{74,-6,25}, -{74,-6,26}, -{74,-6,27}, -{74,-6,28}, -{74,-6,29}, -{74,-6,30}, -{74,-6,31}, -{74,-6,32}, -{74,-6,33}, -{74,-6,34}, -{74,-6,35}, -{74,-6,36}, -{74,-6,37}, -{74,-6,38}, -{74,-6,39}, -{74,-6,40}, -{74,-6,41}, -{74,-6,42}, -{74,-6,43}, -{74,-6,44}, -{74,-6,45}, -{74,-6,46}, -{74,-6,47}, -{74,-6,48}, -{74,-6,49}, -{74,-6,50}, -{74,-6,51}, -{74,-6,52}, -{74,-6,53}, -{74,-6,54}, -{74,-6,55}, -{74,-6,56}, -{74,-6,57}, -{74,-6,58}, -{74,-6,59}, -{74,-6,60}, -{74,-6,61}, -{74,-6,62}, -{74,-6,63}, -{74,-6,64}, -{74,-6,65}, -{74,-6,66}, -{74,-6,67}, -{74,-6,68}, -{74,-6,69}, -{74,-6,70}, -{74,-6,71}, -{74,-6,72}, -{74,-6,73}, -{74,-6,74}, -{74,-6,75}, -{74,-6,76}, -{74,-5,-40}, -{74,-5,-39}, -{74,-5,-38}, -{74,-5,-37}, -{74,-5,-36}, -{74,-5,-35}, -{74,-5,-34}, -{74,-5,-33}, -{74,-5,-32}, -{74,-5,-31}, -{74,-5,-30}, -{74,-5,-29}, -{74,-5,-28}, -{74,-5,-27}, -{74,-5,-26}, -{74,-5,-25}, -{74,-5,-24}, -{74,-5,-23}, -{74,-5,-22}, -{74,-5,-21}, -{74,-5,-20}, -{74,-5,-19}, -{74,-5,-18}, -{74,-5,-17}, -{74,-5,-16}, -{74,-5,-15}, -{74,-5,-14}, -{74,-5,-13}, -{74,-5,-12}, -{74,-5,-11}, -{74,-5,-10}, -{74,-5,-9}, -{74,-5,-8}, -{74,-5,-7}, -{74,-5,-6}, -{74,-5,-5}, -{74,-5,-4}, -{74,-5,-3}, -{74,-5,-2}, -{74,-5,-1}, -{74,-5,0}, -{74,-5,1}, -{74,-5,2}, -{74,-5,3}, -{74,-5,4}, -{74,-5,5}, -{74,-5,6}, -{74,-5,7}, -{74,-5,8}, -{74,-5,9}, -{74,-5,10}, -{74,-5,11}, -{74,-5,12}, -{74,-5,13}, -{74,-5,14}, -{74,-5,15}, -{74,-5,16}, -{74,-5,17}, -{74,-5,18}, -{74,-5,19}, -{74,-5,20}, -{74,-5,21}, -{74,-5,22}, -{74,-5,23}, -{74,-5,24}, -{74,-5,25}, -{74,-5,26}, -{74,-5,27}, -{74,-5,28}, -{74,-5,29}, -{74,-5,30}, -{74,-5,31}, -{74,-5,32}, -{74,-5,33}, -{74,-5,34}, -{74,-5,35}, -{74,-5,36}, -{74,-5,37}, -{74,-5,38}, -{74,-5,39}, -{74,-5,40}, -{74,-5,41}, -{74,-5,42}, -{74,-5,43}, -{74,-5,44}, -{74,-5,45}, -{74,-5,46}, -{74,-5,47}, -{74,-5,48}, -{74,-5,49}, -{74,-5,50}, -{74,-5,51}, -{74,-5,52}, -{74,-5,53}, -{74,-5,54}, -{74,-5,55}, -{74,-5,56}, -{74,-5,57}, -{74,-5,58}, -{74,-5,59}, -{74,-5,60}, -{74,-5,61}, -{74,-5,62}, -{74,-5,63}, -{74,-5,64}, -{74,-5,65}, -{74,-5,66}, -{74,-5,67}, -{74,-5,68}, -{74,-5,69}, -{74,-5,70}, -{74,-5,71}, -{74,-5,72}, -{74,-5,73}, -{74,-5,74}, -{74,-5,75}, -{74,-5,76}, -{74,-4,-40}, -{74,-4,-39}, -{74,-4,-38}, -{74,-4,-37}, -{74,-4,-36}, -{74,-4,-35}, -{74,-4,-34}, -{74,-4,-33}, -{74,-4,-32}, -{74,-4,-31}, -{74,-4,-30}, -{74,-4,-29}, -{74,-4,-28}, -{74,-4,-27}, -{74,-4,-26}, -{74,-4,-25}, -{74,-4,-24}, -{74,-4,-23}, -{74,-4,-22}, -{74,-4,-21}, -{74,-4,-20}, -{74,-4,-19}, -{74,-4,-18}, -{74,-4,-17}, -{74,-4,-16}, -{74,-4,-15}, -{74,-4,-14}, -{74,-4,-13}, -{74,-4,-12}, -{74,-4,-11}, -{74,-4,-10}, -{74,-4,-9}, -{74,-4,-8}, -{74,-4,-7}, -{74,-4,-6}, -{74,-4,-5}, -{74,-4,-4}, -{74,-4,-3}, -{74,-4,-2}, -{74,-4,-1}, -{74,-4,0}, -{74,-4,1}, -{74,-4,2}, -{74,-4,3}, -{74,-4,4}, -{74,-4,5}, -{74,-4,6}, -{74,-4,7}, -{74,-4,8}, -{74,-4,9}, -{74,-4,10}, -{74,-4,11}, -{74,-4,12}, -{74,-4,13}, -{74,-4,14}, -{74,-4,15}, -{74,-4,16}, -{74,-4,17}, -{74,-4,18}, -{74,-4,19}, -{74,-4,20}, -{74,-4,21}, -{74,-4,22}, -{74,-4,23}, -{74,-4,24}, -{74,-4,25}, -{74,-4,26}, -{74,-4,27}, -{74,-4,28}, -{74,-4,29}, -{74,-4,30}, -{74,-4,31}, -{74,-4,32}, -{74,-4,33}, -{74,-4,34}, -{74,-4,35}, -{74,-4,36}, -{74,-4,37}, -{74,-4,38}, -{74,-4,39}, -{74,-4,40}, -{74,-4,41}, -{74,-4,42}, -{74,-4,43}, -{74,-4,44}, -{74,-4,45}, -{74,-4,46}, -{74,-4,47}, -{74,-4,48}, -{74,-4,49}, -{74,-4,50}, -{74,-4,51}, -{74,-4,52}, -{74,-4,53}, -{74,-4,54}, -{74,-4,55}, -{74,-4,56}, -{74,-4,57}, -{74,-4,58}, -{74,-4,59}, -{74,-4,60}, -{74,-4,61}, -{74,-4,62}, -{74,-4,63}, -{74,-4,64}, -{74,-4,65}, -{74,-4,66}, -{74,-4,67}, -{74,-4,68}, -{74,-4,69}, -{74,-4,70}, -{74,-4,71}, -{74,-4,72}, -{74,-4,73}, -{74,-4,74}, -{74,-4,75}, -{74,-4,76}, -{74,-3,-40}, -{74,-3,-39}, -{74,-3,-38}, -{74,-3,-37}, -{74,-3,-36}, -{74,-3,-35}, -{74,-3,-34}, -{74,-3,-33}, -{74,-3,-32}, -{74,-3,-31}, -{74,-3,-30}, -{74,-3,-29}, -{74,-3,-28}, -{74,-3,-27}, -{74,-3,-26}, -{74,-3,-25}, -{74,-3,-24}, -{74,-3,-23}, -{74,-3,-22}, -{74,-3,-21}, -{74,-3,-20}, -{74,-3,-19}, -{74,-3,-18}, -{74,-3,-17}, -{74,-3,-16}, -{74,-3,-15}, -{74,-3,-14}, -{74,-3,-13}, -{74,-3,-12}, -{74,-3,-11}, -{74,-3,-10}, -{74,-3,-9}, -{74,-3,-8}, -{74,-3,-7}, -{74,-3,-6}, -{74,-3,-5}, -{74,-3,-4}, -{74,-3,-3}, -{74,-3,-2}, -{74,-3,-1}, -{74,-3,0}, -{74,-3,1}, -{74,-3,2}, -{74,-3,3}, -{74,-3,4}, -{74,-3,5}, -{74,-3,6}, -{74,-3,7}, -{74,-3,8}, -{74,-3,9}, -{74,-3,10}, -{74,-3,11}, -{74,-3,12}, -{74,-3,13}, -{74,-3,14}, -{74,-3,15}, -{74,-3,16}, -{74,-3,17}, -{74,-3,18}, -{74,-3,19}, -{74,-3,20}, -{74,-3,21}, -{74,-3,22}, -{74,-3,23}, -{74,-3,24}, -{74,-3,25}, -{74,-3,26}, -{74,-3,27}, -{74,-3,28}, -{74,-3,29}, -{74,-3,30}, -{74,-3,31}, -{74,-3,32}, -{74,-3,33}, -{74,-3,34}, -{74,-3,35}, -{74,-3,36}, -{74,-3,37}, -{74,-3,38}, -{74,-3,39}, -{74,-3,40}, -{74,-3,41}, -{74,-3,42}, -{74,-3,43}, -{74,-3,44}, -{74,-3,45}, -{74,-3,46}, -{74,-3,47}, -{74,-3,48}, -{74,-3,49}, -{74,-3,50}, -{74,-3,51}, -{74,-3,52}, -{74,-3,53}, -{74,-3,54}, -{74,-3,55}, -{74,-3,56}, -{74,-3,57}, -{74,-3,58}, -{74,-3,59}, -{74,-3,60}, -{74,-3,61}, -{74,-3,62}, -{74,-3,63}, -{74,-3,64}, -{74,-3,65}, -{74,-3,66}, -{74,-3,67}, -{74,-3,68}, -{74,-3,69}, -{74,-3,70}, -{74,-3,71}, -{74,-3,72}, -{74,-3,73}, -{74,-3,74}, -{74,-3,75}, -{74,-3,76}, -{74,-2,-40}, -{74,-2,-39}, -{74,-2,-38}, -{74,-2,-37}, -{74,-2,-36}, -{74,-2,-35}, -{74,-2,-34}, -{74,-2,-33}, -{74,-2,-32}, -{74,-2,-31}, -{74,-2,-30}, -{74,-2,-29}, -{74,-2,-28}, -{74,-2,-27}, -{74,-2,-26}, -{74,-2,-25}, -{74,-2,-24}, -{74,-2,-23}, -{74,-2,-22}, -{74,-2,-21}, -{74,-2,-20}, -{74,-2,-19}, -{74,-2,-18}, -{74,-2,-17}, -{74,-2,-16}, -{74,-2,-15}, -{74,-2,-14}, -{74,-2,-13}, -{74,-2,-12}, -{74,-2,-11}, -{74,-2,-10}, -{74,-2,-9}, -{74,-2,-8}, -{74,-2,-7}, -{74,-2,-6}, -{74,-2,-5}, -{74,-2,-4}, -{74,-2,-3}, -{74,-2,-2}, -{74,-2,-1}, -{74,-2,0}, -{74,-2,1}, -{74,-2,2}, -{74,-2,3}, -{74,-2,4}, -{74,-2,5}, -{74,-2,6}, -{74,-2,7}, -{74,-2,8}, -{74,-2,9}, -{74,-2,10}, -{74,-2,11}, -{74,-2,12}, -{74,-2,13}, -{74,-2,14}, -{74,-2,15}, -{74,-2,16}, -{74,-2,17}, -{74,-2,18}, -{74,-2,19}, -{74,-2,20}, -{74,-2,21}, -{74,-2,22}, -{74,-2,23}, -{74,-2,24}, -{74,-2,25}, -{74,-2,26}, -{74,-2,27}, -{74,-2,28}, -{74,-2,29}, -{74,-2,30}, -{74,-2,31}, -{74,-2,32}, -{74,-2,33}, -{74,-2,34}, -{74,-2,35}, -{74,-2,36}, -{74,-2,37}, -{74,-2,38}, -{74,-2,39}, -{74,-2,40}, -{74,-2,41}, -{74,-2,42}, -{74,-2,43}, -{74,-2,44}, -{74,-2,45}, -{74,-2,46}, -{74,-2,47}, -{74,-2,48}, -{74,-2,49}, -{74,-2,50}, -{74,-2,51}, -{74,-2,52}, -{74,-2,53}, -{74,-2,54}, -{74,-2,55}, -{74,-2,56}, -{74,-2,57}, -{74,-2,58}, -{74,-2,59}, -{74,-2,60}, -{74,-2,61}, -{74,-2,62}, -{74,-2,63}, -{74,-2,64}, -{74,-2,65}, -{74,-2,66}, -{74,-2,67}, -{74,-2,68}, -{74,-2,69}, -{74,-2,70}, -{74,-2,71}, -{74,-2,72}, -{74,-2,73}, -{74,-2,74}, -{74,-2,75}, -{74,-2,76}, -{74,-1,-40}, -{74,-1,-39}, -{74,-1,-38}, -{74,-1,-37}, -{74,-1,-36}, -{74,-1,-35}, -{74,-1,-34}, -{74,-1,-33}, -{74,-1,-32}, -{74,-1,-31}, -{74,-1,-30}, -{74,-1,-29}, -{74,-1,-28}, -{74,-1,-27}, -{74,-1,-26}, -{74,-1,-25}, -{74,-1,-24}, -{74,-1,-23}, -{74,-1,-22}, -{74,-1,-21}, -{74,-1,-20}, -{74,-1,-19}, -{74,-1,-18}, -{74,-1,-17}, -{74,-1,-16}, -{74,-1,-15}, -{74,-1,-14}, -{74,-1,-13}, -{74,-1,-12}, -{74,-1,-11}, -{74,-1,-10}, -{74,-1,-9}, -{74,-1,-8}, -{74,-1,-7}, -{74,-1,-6}, -{74,-1,-5}, -{74,-1,-4}, -{74,-1,-3}, -{74,-1,-2}, -{74,-1,-1}, -{74,-1,0}, -{74,-1,1}, -{74,-1,2}, -{74,-1,3}, -{74,-1,4}, -{74,-1,5}, -{74,-1,6}, -{74,-1,7}, -{74,-1,8}, -{74,-1,9}, -{74,-1,10}, -{74,-1,11}, -{74,-1,12}, -{74,-1,13}, -{74,-1,14}, -{74,-1,15}, -{74,-1,16}, -{74,-1,17}, -{74,-1,18}, -{74,-1,19}, -{74,-1,20}, -{74,-1,21}, -{74,-1,22}, -{74,-1,23}, -{74,-1,24}, -{74,-1,25}, -{74,-1,26}, -{74,-1,27}, -{74,-1,28}, -{74,-1,29}, -{74,-1,30}, -{74,-1,31}, -{74,-1,32}, -{74,-1,33}, -{74,-1,34}, -{74,-1,35}, -{74,-1,36}, -{74,-1,37}, -{74,-1,38}, -{74,-1,39}, -{74,-1,40}, -{74,-1,41}, -{74,-1,42}, -{74,-1,43}, -{74,-1,44}, -{74,-1,45}, -{74,-1,46}, -{74,-1,47}, -{74,-1,48}, -{74,-1,49}, -{74,-1,50}, -{74,-1,51}, -{74,-1,52}, -{74,-1,53}, -{74,-1,54}, -{74,-1,55}, -{74,-1,56}, -{74,-1,57}, -{74,-1,58}, -{74,-1,59}, -{74,-1,60}, -{74,-1,61}, -{74,-1,62}, -{74,-1,63}, -{74,-1,64}, -{74,-1,65}, -{74,-1,66}, -{74,-1,67}, -{74,-1,68}, -{74,-1,69}, -{74,-1,70}, -{74,-1,71}, -{74,-1,72}, -{74,-1,73}, -{74,-1,74}, -{74,-1,75}, -{74,-1,76}, -{74,0,-40}, -{74,0,-39}, -{74,0,-38}, -{74,0,-37}, -{74,0,-36}, -{74,0,-35}, -{74,0,-34}, -{74,0,-33}, -{74,0,-32}, -{74,0,-31}, -{74,0,-30}, -{74,0,-29}, -{74,0,-28}, -{74,0,-27}, -{74,0,-26}, -{74,0,-25}, -{74,0,-24}, -{74,0,-23}, -{74,0,-22}, -{74,0,-21}, -{74,0,-20}, -{74,0,-19}, -{74,0,-18}, -{74,0,-17}, -{74,0,-16}, -{74,0,-15}, -{74,0,-14}, -{74,0,-13}, -{74,0,-12}, -{74,0,-11}, -{74,0,-10}, -{74,0,-9}, -{74,0,-8}, -{74,0,-7}, -{74,0,-6}, -{74,0,-5}, -{74,0,-4}, -{74,0,-3}, -{74,0,-2}, -{74,0,-1}, -{74,0,0}, -{74,0,1}, -{74,0,2}, -{74,0,3}, -{74,0,4}, -{74,0,5}, -{74,0,6}, -{74,0,7}, -{74,0,8}, -{74,0,9}, -{74,0,10}, -{74,0,11}, -{74,0,12}, -{74,0,13}, -{74,0,14}, -{74,0,15}, -{74,0,16}, -{74,0,17}, -{74,0,18}, -{74,0,19}, -{74,0,20}, -{74,0,21}, -{74,0,22}, -{74,0,23}, -{74,0,24}, -{74,0,25}, -{74,0,26}, -{74,0,27}, -{74,0,28}, -{74,0,29}, -{74,0,30}, -{74,0,31}, -{74,0,32}, -{74,0,33}, -{74,0,34}, -{74,0,35}, -{74,0,36}, -{74,0,37}, -{74,0,38}, -{74,0,39}, -{74,0,40}, -{74,0,41}, -{74,0,42}, -{74,0,43}, -{74,0,44}, -{74,0,45}, -{74,0,46}, -{74,0,47}, -{74,0,48}, -{74,0,49}, -{74,0,50}, -{74,0,51}, -{74,0,52}, -{74,0,53}, -{74,0,54}, -{74,0,55}, -{74,0,56}, -{74,0,57}, -{74,0,58}, -{74,0,59}, -{74,0,60}, -{74,0,61}, -{74,0,62}, -{74,0,63}, -{74,0,64}, -{74,0,65}, -{74,0,66}, -{74,0,67}, -{74,0,68}, -{74,0,69}, -{74,0,70}, -{74,0,71}, -{74,0,72}, -{74,0,73}, -{74,0,74}, -{74,0,75}, -{74,0,76}, -{74,1,-40}, -{74,1,-39}, -{74,1,-38}, -{74,1,-37}, -{74,1,-36}, -{74,1,-35}, -{74,1,-34}, -{74,1,-33}, -{74,1,-32}, -{74,1,-31}, -{74,1,-30}, -{74,1,-29}, -{74,1,-28}, -{74,1,-27}, -{74,1,-26}, -{74,1,-25}, -{74,1,-24}, -{74,1,-23}, -{74,1,-22}, -{74,1,-21}, -{74,1,-20}, -{74,1,-19}, -{74,1,-18}, -{74,1,-17}, -{74,1,-16}, -{74,1,-15}, -{74,1,-14}, -{74,1,-13}, -{74,1,-12}, -{74,1,-11}, -{74,1,-10}, -{74,1,-9}, -{74,1,-8}, -{74,1,-7}, -{74,1,-6}, -{74,1,-5}, -{74,1,-4}, -{74,1,-3}, -{74,1,-2}, -{74,1,-1}, -{74,1,0}, -{74,1,1}, -{74,1,2}, -{74,1,3}, -{74,1,4}, -{74,1,5}, -{74,1,6}, -{74,1,7}, -{74,1,8}, -{74,1,9}, -{74,1,10}, -{74,1,11}, -{74,1,12}, -{74,1,13}, -{74,1,14}, -{74,1,15}, -{74,1,16}, -{74,1,17}, -{74,1,18}, -{74,1,19}, -{74,1,20}, -{74,1,21}, -{74,1,22}, -{74,1,23}, -{74,1,24}, -{74,1,25}, -{74,1,26}, -{74,1,27}, -{74,1,28}, -{74,1,29}, -{74,1,30}, -{74,1,31}, -{74,1,32}, -{74,1,33}, -{74,1,34}, -{74,1,35}, -{74,1,36}, -{74,1,37}, -{74,1,38}, -{74,1,39}, -{74,1,40}, -{74,1,41}, -{74,1,42}, -{74,1,43}, -{74,1,44}, -{74,1,45}, -{74,1,46}, -{74,1,47}, -{74,1,48}, -{74,1,49}, -{74,1,50}, -{74,1,51}, -{74,1,52}, -{74,1,53}, -{74,1,54}, -{74,1,55}, -{74,1,56}, -{74,1,57}, -{74,1,58}, -{74,1,59}, -{74,1,60}, -{74,1,61}, -{74,1,62}, -{74,1,63}, -{74,1,64}, -{74,1,65}, -{74,1,66}, -{74,1,67}, -{74,1,68}, -{74,1,69}, -{74,1,70}, -{74,1,71}, -{74,1,72}, -{74,1,73}, -{74,1,74}, -{74,1,75}, -{74,1,76}, -{74,2,-40}, -{74,2,-39}, -{74,2,-38}, -{74,2,-37}, -{74,2,-36}, -{74,2,-35}, -{74,2,-34}, -{74,2,-33}, -{74,2,-32}, -{74,2,-31}, -{74,2,-30}, -{74,2,-29}, -{74,2,-28}, -{74,2,-27}, -{74,2,-26}, -{74,2,-25}, -{74,2,-24}, -{74,2,-23}, -{74,2,-22}, -{74,2,-21}, -{74,2,-20}, -{74,2,-19}, -{74,2,-18}, -{74,2,-17}, -{74,2,-16}, -{74,2,-15}, -{74,2,-14}, -{74,2,-13}, -{74,2,-12}, -{74,2,-11}, -{74,2,-10}, -{74,2,-9}, -{74,2,-8}, -{74,2,-7}, -{74,2,-6}, -{74,2,-5}, -{74,2,-4}, -{74,2,-3}, -{74,2,-2}, -{74,2,-1}, -{74,2,0}, -{74,2,1}, -{74,2,2}, -{74,2,3}, -{74,2,4}, -{74,2,5}, -{74,2,6}, -{74,2,7}, -{74,2,8}, -{74,2,9}, -{74,2,10}, -{74,2,11}, -{74,2,12}, -{74,2,13}, -{74,2,14}, -{74,2,15}, -{74,2,16}, -{74,2,17}, -{74,2,18}, -{74,2,19}, -{74,2,20}, -{74,2,21}, -{74,2,22}, -{74,2,23}, -{74,2,24}, -{74,2,25}, -{74,2,26}, -{74,2,27}, -{74,2,28}, -{74,2,29}, -{74,2,30}, -{74,2,31}, -{74,2,32}, -{74,2,33}, -{74,2,34}, -{74,2,35}, -{74,2,36}, -{74,2,37}, -{74,2,38}, -{74,2,39}, -{74,2,40}, -{74,2,41}, -{74,2,42}, -{74,2,43}, -{74,2,44}, -{74,2,45}, -{74,2,46}, -{74,2,47}, -{74,2,48}, -{74,2,49}, -{74,2,50}, -{74,2,51}, -{74,2,52}, -{74,2,53}, -{74,2,54}, -{74,2,55}, -{74,2,56}, -{74,2,57}, -{74,2,58}, -{74,2,59}, -{74,2,60}, -{74,2,61}, -{74,2,62}, -{74,2,63}, -{74,2,64}, -{74,2,65}, -{74,2,66}, -{74,2,67}, -{74,2,68}, -{74,2,69}, -{74,2,70}, -{74,2,71}, -{74,2,72}, -{74,2,73}, -{74,2,74}, -{74,2,75}, -{74,2,76}, -{74,3,-40}, -{74,3,-39}, -{74,3,-38}, -{74,3,-37}, -{74,3,-36}, -{74,3,-35}, -{74,3,-34}, -{74,3,-33}, -{74,3,-32}, -{74,3,-31}, -{74,3,-30}, -{74,3,-29}, -{74,3,-28}, -{74,3,-27}, -{74,3,-26}, -{74,3,-25}, -{74,3,-24}, -{74,3,-23}, -{74,3,-22}, -{74,3,-21}, -{74,3,-20}, -{74,3,-19}, -{74,3,-18}, -{74,3,-17}, -{74,3,-16}, -{74,3,-15}, -{74,3,-14}, -{74,3,-13}, -{74,3,-12}, -{74,3,-11}, -{74,3,-10}, -{74,3,-9}, -{74,3,-8}, -{74,3,-7}, -{74,3,-6}, -{74,3,-5}, -{74,3,-4}, -{74,3,-3}, -{74,3,-2}, -{74,3,-1}, -{74,3,0}, -{74,3,1}, -{74,3,2}, -{74,3,3}, -{74,3,4}, -{74,3,5}, -{74,3,6}, -{74,3,7}, -{74,3,8}, -{74,3,9}, -{74,3,10}, -{74,3,11}, -{74,3,12}, -{74,3,13}, -{74,3,14}, -{74,3,15}, -{74,3,16}, -{74,3,17}, -{74,3,18}, -{74,3,19}, -{74,3,20}, -{74,3,21}, -{74,3,22}, -{74,3,23}, -{74,3,24}, -{74,3,25}, -{74,3,26}, -{74,3,27}, -{74,3,28}, -{74,3,29}, -{74,3,30}, -{74,3,31}, -{74,3,32}, -{74,3,33}, -{74,3,34}, -{74,3,35}, -{74,3,36}, -{74,3,37}, -{74,3,38}, -{74,3,39}, -{74,3,40}, -{74,3,41}, -{74,3,42}, -{74,3,43}, -{74,3,44}, -{74,3,45}, -{74,3,46}, -{74,3,47}, -{74,3,48}, -{74,3,49}, -{74,3,50}, -{74,3,51}, -{74,3,52}, -{74,3,53}, -{74,3,54}, -{74,3,55}, -{74,3,56}, -{74,3,57}, -{74,3,58}, -{74,3,59}, -{74,3,60}, -{74,3,61}, -{74,3,62}, -{74,3,63}, -{74,3,64}, -{74,3,65}, -{74,3,66}, -{74,3,67}, -{74,3,68}, -{74,3,69}, -{74,3,70}, -{74,3,71}, -{74,3,72}, -{74,3,73}, -{74,3,74}, -{74,3,75}, -{74,3,76}, -{74,4,-40}, -{74,4,-39}, -{74,4,-38}, -{74,4,-37}, -{74,4,-36}, -{74,4,-35}, -{74,4,-34}, -{74,4,-33}, -{74,4,-32}, -{74,4,-31}, -{74,4,-30}, -{74,4,-29}, -{74,4,-28}, -{74,4,-27}, -{74,4,-26}, -{74,4,-25}, -{74,4,-24}, -{74,4,-23}, -{74,4,-22}, -{74,4,-21}, -{74,4,-20}, -{74,4,-19}, -{74,4,-18}, -{74,4,-17}, -{74,4,-16}, -{74,4,-15}, -{74,4,-14}, -{74,4,-13}, -{74,4,-12}, -{74,4,-11}, -{74,4,-10}, -{74,4,-9}, -{74,4,-8}, -{74,4,-7}, -{74,4,-6}, -{74,4,-5}, -{74,4,-4}, -{74,4,-3}, -{74,4,-2}, -{74,4,-1}, -{74,4,0}, -{74,4,1}, -{74,4,2}, -{74,4,3}, -{74,4,4}, -{74,4,5}, -{74,4,6}, -{74,4,7}, -{74,4,8}, -{74,4,9}, -{74,4,10}, -{74,4,11}, -{74,4,12}, -{74,4,13}, -{74,4,14}, -{74,4,15}, -{74,4,16}, -{74,4,17}, -{74,4,18}, -{74,4,19}, -{74,4,20}, -{74,4,21}, -{74,4,22}, -{74,4,23}, -{74,4,24}, -{74,4,25}, -{74,4,26}, -{74,4,27}, -{74,4,28}, -{74,4,29}, -{74,4,30}, -{74,4,31}, -{74,4,32}, -{74,4,33}, -{74,4,34}, -{74,4,35}, -{74,4,36}, -{74,4,37}, -{74,4,38}, -{74,4,39}, -{74,4,40}, -{74,4,41}, -{74,4,42}, -{74,4,43}, -{74,4,44}, -{74,4,45}, -{74,4,46}, -{74,4,47}, -{74,4,48}, -{74,4,49}, -{74,4,50}, -{74,4,51}, -{74,4,52}, -{74,4,53}, -{74,4,54}, -{74,4,55}, -{74,4,56}, -{74,4,57}, -{74,4,58}, -{74,4,59}, -{74,4,60}, -{74,4,61}, -{74,4,62}, -{74,4,63}, -{74,4,64}, -{74,4,65}, -{74,4,66}, -{74,4,67}, -{74,4,68}, -{74,4,69}, -{74,4,70}, -{74,4,71}, -{74,4,72}, -{74,4,73}, -{74,4,74}, -{74,4,75}, -{74,4,76}, -{74,5,-40}, -{74,5,-39}, -{74,5,-38}, -{74,5,-37}, -{74,5,-36}, -{74,5,-35}, -{74,5,-34}, -{74,5,-33}, -{74,5,-32}, -{74,5,-31}, -{74,5,-30}, -{74,5,-29}, -{74,5,-28}, -{74,5,-27}, -{74,5,-26}, -{74,5,-25}, -{74,5,-24}, -{74,5,-23}, -{74,5,-22}, -{74,5,-21}, -{74,5,-20}, -{74,5,-19}, -{74,5,-18}, -{74,5,-17}, -{74,5,-16}, -{74,5,-15}, -{74,5,-14}, -{74,5,-13}, -{74,5,-12}, -{74,5,-11}, -{74,5,-10}, -{74,5,-9}, -{74,5,-8}, -{74,5,-7}, -{74,5,-6}, -{74,5,-5}, -{74,5,-4}, -{74,5,-3}, -{74,5,-2}, -{74,5,-1}, -{74,5,0}, -{74,5,1}, -{74,5,2}, -{74,5,3}, -{74,5,4}, -{74,5,5}, -{74,5,6}, -{74,5,7}, -{74,5,8}, -{74,5,9}, -{74,5,10}, -{74,5,11}, -{74,5,12}, -{74,5,13}, -{74,5,14}, -{74,5,15}, -{74,5,16}, -{74,5,17}, -{74,5,18}, -{74,5,19}, -{74,5,20}, -{74,5,21}, -{74,5,22}, -{74,5,23}, -{74,5,24}, -{74,5,25}, -{74,5,26}, -{74,5,27}, -{74,5,28}, -{74,5,29}, -{74,5,30}, -{74,5,31}, -{74,5,32}, -{74,5,33}, -{74,5,34}, -{74,5,35}, -{74,5,36}, -{74,5,37}, -{74,5,38}, -{74,5,39}, -{74,5,40}, -{74,5,41}, -{74,5,42}, -{74,5,43}, -{74,5,44}, -{74,5,45}, -{74,5,46}, -{74,5,47}, -{74,5,48}, -{74,5,49}, -{74,5,50}, -{74,5,51}, -{74,5,52}, -{74,5,53}, -{74,5,54}, -{74,5,55}, -{74,5,56}, -{74,5,57}, -{74,5,58}, -{74,5,59}, -{74,5,60}, -{74,5,61}, -{74,5,62}, -{74,5,63}, -{74,5,64}, -{74,5,65}, -{74,5,66}, -{74,5,67}, -{74,5,68}, -{74,5,69}, -{74,5,70}, -{74,5,71}, -{74,5,72}, -{74,5,73}, -{74,5,74}, -{74,5,75}, -{74,5,76}, -{74,6,-40}, -{74,6,-39}, -{74,6,-38}, -{74,6,-37}, -{74,6,-36}, -{74,6,-35}, -{74,6,-34}, -{74,6,-33}, -{74,6,-32}, -{74,6,-31}, -{74,6,-30}, -{74,6,-29}, -{74,6,-28}, -{74,6,-27}, -{74,6,-26}, -{74,6,-25}, -{74,6,-24}, -{74,6,-23}, -{74,6,-22}, -{74,6,-21}, -{74,6,-20}, -{74,6,-19}, -{74,6,-18}, -{74,6,-17}, -{74,6,-16}, -{74,6,-15}, -{74,6,-14}, -{74,6,-13}, -{74,6,-12}, -{74,6,-11}, -{74,6,-10}, -{74,6,-9}, -{74,6,-8}, -{74,6,-7}, -{74,6,-6}, -{74,6,-5}, -{74,6,-4}, -{74,6,-3}, -{74,6,-2}, -{74,6,-1}, -{74,6,0}, -{74,6,1}, -{74,6,2}, -{74,6,3}, -{74,6,4}, -{74,6,5}, -{74,6,6}, -{74,6,7}, -{74,6,8}, -{74,6,9}, -{74,6,10}, -{74,6,11}, -{74,6,12}, -{74,6,13}, -{74,6,14}, -{74,6,15}, -{74,6,16}, -{74,6,17}, -{74,6,18}, -{74,6,19}, -{74,6,20}, -{74,6,21}, -{74,6,22}, -{74,6,23}, -{74,6,24}, -{74,6,25}, -{74,6,26}, -{74,6,27}, -{74,6,28}, -{74,6,29}, -{74,6,30}, -{74,6,31}, -{74,6,32}, -{74,6,33}, -{74,6,34}, -{74,6,35}, -{74,6,36}, -{74,6,37}, -{74,6,38}, -{74,6,39}, -{74,6,40}, -{74,6,41}, -{74,6,42}, -{74,6,43}, -{74,6,44}, -{74,6,45}, -{74,6,46}, -{74,6,47}, -{74,6,48}, -{74,6,49}, -{74,6,50}, -{74,6,51}, -{74,6,52}, -{74,6,53}, -{74,6,54}, -{74,6,55}, -{74,6,56}, -{74,6,57}, -{74,6,58}, -{74,6,59}, -{74,6,60}, -{74,6,61}, -{74,6,62}, -{74,6,63}, -{74,6,64}, -{74,6,65}, -{74,6,66}, -{74,6,67}, -{74,6,68}, -{74,6,69}, -{74,6,70}, -{74,6,71}, -{74,6,72}, -{74,6,73}, -{74,6,74}, -{74,6,75}, -{74,6,76}, -{74,7,-40}, -{74,7,-39}, -{74,7,-38}, -{74,7,-37}, -{74,7,-36}, -{74,7,-35}, -{74,7,-34}, -{74,7,-33}, -{74,7,-32}, -{74,7,-31}, -{74,7,-30}, -{74,7,-29}, -{74,7,-28}, -{74,7,-27}, -{74,7,-26}, -{74,7,-25}, -{74,7,-24}, -{74,7,-23}, -{74,7,-22}, -{74,7,-21}, -{74,7,-20}, -{74,7,-19}, -{74,7,-18}, -{74,7,-17}, -{74,7,-16}, -{74,7,-15}, -{74,7,-14}, -{74,7,-13}, -{74,7,-12}, -{74,7,-11}, -{74,7,-10}, -{74,7,-9}, -{74,7,-8}, -{74,7,-7}, -{74,7,-6}, -{74,7,-5}, -{74,7,-4}, -{74,7,-3}, -{74,7,-2}, -{74,7,-1}, -{74,7,0}, -{74,7,1}, -{74,7,2}, -{74,7,3}, -{74,7,4}, -{74,7,5}, -{74,7,6}, -{74,7,7}, -{74,7,8}, -{74,7,9}, -{74,7,10}, -{74,7,11}, -{74,7,12}, -{74,7,13}, -{74,7,14}, -{74,7,15}, -{74,7,16}, -{74,7,17}, -{74,7,18}, -{74,7,19}, -{74,7,20}, -{74,7,21}, -{74,7,22}, -{74,7,23}, -{74,7,24}, -{74,7,25}, -{74,7,26}, -{74,7,27}, -{74,7,28}, -{74,7,29}, -{74,7,30}, -{74,7,31}, -{74,7,32}, -{74,7,33}, -{74,7,34}, -{74,7,35}, -{74,7,36}, -{74,7,37}, -{74,7,38}, -{74,7,39}, -{74,7,40}, -{74,7,41}, -{74,7,42}, -{74,7,43}, -{74,7,44}, -{74,7,45}, -{74,7,46}, -{74,7,47}, -{74,7,48}, -{74,7,49}, -{74,7,50}, -{74,7,51}, -{74,7,52}, -{74,7,53}, -{74,7,54}, -{74,7,55}, -{74,7,56}, -{74,7,57}, -{74,7,58}, -{74,7,59}, -{74,7,60}, -{74,7,61}, -{74,7,62}, -{74,7,63}, -{74,7,64}, -{74,7,65}, -{74,7,66}, -{74,7,67}, -{74,7,68}, -{74,7,69}, -{74,7,70}, -{74,7,71}, -{74,7,72}, -{74,7,73}, -{74,7,74}, -{74,7,75}, -{74,7,76}, -{74,7,77}, -{74,8,-40}, -{74,8,-39}, -{74,8,-38}, -{74,8,-37}, -{74,8,-36}, -{74,8,-35}, -{74,8,-34}, -{74,8,-33}, -{74,8,-32}, -{74,8,-31}, -{74,8,-30}, -{74,8,-29}, -{74,8,-28}, -{74,8,-27}, -{74,8,-26}, -{74,8,-25}, -{74,8,-24}, -{74,8,-23}, -{74,8,-22}, -{74,8,-21}, -{74,8,-20}, -{74,8,-19}, -{74,8,-18}, -{74,8,-17}, -{74,8,-16}, -{74,8,-15}, -{74,8,-14}, -{74,8,-13}, -{74,8,-12}, -{74,8,-11}, -{74,8,-10}, -{74,8,-9}, -{74,8,-8}, -{74,8,-7}, -{74,8,-6}, -{74,8,-5}, -{74,8,-4}, -{74,8,-3}, -{74,8,-2}, -{74,8,-1}, -{74,8,0}, -{74,8,1}, -{74,8,2}, -{74,8,3}, -{74,8,4}, -{74,8,5}, -{74,8,6}, -{74,8,7}, -{74,8,8}, -{74,8,9}, -{74,8,10}, -{74,8,11}, -{74,8,12}, -{74,8,13}, -{74,8,14}, -{74,8,15}, -{74,8,16}, -{74,8,17}, -{74,8,18}, -{74,8,19}, -{74,8,20}, -{74,8,21}, -{74,8,22}, -{74,8,23}, -{74,8,24}, -{74,8,25}, -{74,8,26}, -{74,8,27}, -{74,8,28}, -{74,8,29}, -{74,8,30}, -{74,8,31}, -{74,8,32}, -{74,8,33}, -{74,8,34}, -{74,8,35}, -{74,8,36}, -{74,8,37}, -{74,8,38}, -{74,8,39}, -{74,8,40}, -{74,8,41}, -{74,8,42}, -{74,8,43}, -{74,8,44}, -{74,8,45}, -{74,8,46}, -{74,8,47}, -{74,8,48}, -{74,8,49}, -{74,8,50}, -{74,8,51}, -{74,8,52}, -{74,8,53}, -{74,8,54}, -{74,8,55}, -{74,8,56}, -{74,8,57}, -{74,8,58}, -{74,8,59}, -{74,8,60}, -{74,8,61}, -{74,8,62}, -{74,8,63}, -{74,8,64}, -{74,8,65}, -{74,8,66}, -{74,8,67}, -{74,8,68}, -{74,8,69}, -{74,8,70}, -{74,8,71}, -{74,8,72}, -{74,8,73}, -{74,8,74}, -{74,8,75}, -{74,8,76}, -{74,8,77}, -{74,9,-40}, -{74,9,-39}, -{74,9,-38}, -{74,9,-37}, -{74,9,-36}, -{74,9,-35}, -{74,9,-34}, -{74,9,-33}, -{74,9,-32}, -{74,9,-31}, -{74,9,-30}, -{74,9,-29}, -{74,9,-28}, -{74,9,-27}, -{74,9,-26}, -{74,9,-25}, -{74,9,-24}, -{74,9,-23}, -{74,9,-22}, -{74,9,-21}, -{74,9,-20}, -{74,9,-19}, -{74,9,-18}, -{74,9,-17}, -{74,9,-16}, -{74,9,-15}, -{74,9,-14}, -{74,9,-13}, -{74,9,-12}, -{74,9,-11}, -{74,9,-10}, -{74,9,-9}, -{74,9,-8}, -{74,9,-7}, -{74,9,-6}, -{74,9,-5}, -{74,9,-4}, -{74,9,-3}, -{74,9,-2}, -{74,9,-1}, -{74,9,0}, -{74,9,1}, -{74,9,2}, -{74,9,3}, -{74,9,4}, -{74,9,5}, -{74,9,6}, -{74,9,7}, -{74,9,8}, -{74,9,9}, -{74,9,10}, -{74,9,11}, -{74,9,12}, -{74,9,13}, -{74,9,14}, -{74,9,15}, -{74,9,16}, -{74,9,17}, -{74,9,18}, -{74,9,19}, -{74,9,20}, -{74,9,21}, -{74,9,22}, -{74,9,23}, -{74,9,24}, -{74,9,25}, -{74,9,26}, -{74,9,27}, -{74,9,28}, -{74,9,29}, -{74,9,30}, -{74,9,31}, -{74,9,32}, -{74,9,33}, -{74,9,34}, -{74,9,35}, -{74,9,36}, -{74,9,37}, -{74,9,38}, -{74,9,39}, -{74,9,40}, -{74,9,41}, -{74,9,42}, -{74,9,43}, -{74,9,44}, -{74,9,45}, -{74,9,46}, -{74,9,47}, -{74,9,48}, -{74,9,49}, -{74,9,50}, -{74,9,51}, -{74,9,52}, -{74,9,53}, -{74,9,54}, -{74,9,55}, -{74,9,56}, -{74,9,57}, -{74,9,58}, -{74,9,59}, -{74,9,60}, -{74,9,61}, -{74,9,62}, -{74,9,63}, -{74,9,64}, -{74,9,65}, -{74,9,66}, -{74,9,67}, -{74,9,68}, -{74,9,69}, -{74,9,70}, -{74,9,71}, -{74,9,72}, -{74,9,73}, -{74,9,74}, -{74,9,75}, -{74,9,76}, -{74,9,77}, -{74,10,-40}, -{74,10,-39}, -{74,10,-38}, -{74,10,-37}, -{74,10,-36}, -{74,10,-35}, -{74,10,-34}, -{74,10,-33}, -{74,10,-32}, -{74,10,-31}, -{74,10,-30}, -{74,10,-29}, -{74,10,-28}, -{74,10,-27}, -{74,10,-26}, -{74,10,-25}, -{74,10,-24}, -{74,10,-23}, -{74,10,-22}, -{74,10,-21}, -{74,10,-20}, -{74,10,-19}, -{74,10,-18}, -{74,10,-17}, -{74,10,-16}, -{74,10,-15}, -{74,10,-14}, -{74,10,-13}, -{74,10,-12}, -{74,10,-11}, -{74,10,-10}, -{74,10,-9}, -{74,10,-8}, -{74,10,-7}, -{74,10,-6}, -{74,10,-5}, -{74,10,-4}, -{74,10,-3}, -{74,10,-2}, -{74,10,-1}, -{74,10,0}, -{74,10,1}, -{74,10,2}, -{74,10,3}, -{74,10,4}, -{74,10,5}, -{74,10,6}, -{74,10,7}, -{74,10,8}, -{74,10,9}, -{74,10,10}, -{74,10,11}, -{74,10,12}, -{74,10,13}, -{74,10,14}, -{74,10,15}, -{74,10,16}, -{74,10,17}, -{74,10,18}, -{74,10,19}, -{74,10,20}, -{74,10,21}, -{74,10,22}, -{74,10,23}, -{74,10,24}, -{74,10,25}, -{74,10,26}, -{74,10,27}, -{74,10,28}, -{74,10,29}, -{74,10,30}, -{74,10,31}, -{74,10,32}, -{74,10,33}, -{74,10,34}, -{74,10,35}, -{74,10,36}, -{74,10,37}, -{74,10,38}, -{74,10,39}, -{74,10,40}, -{74,10,41}, -{74,10,42}, -{74,10,43}, -{74,10,44}, -{74,10,45}, -{74,10,46}, -{74,10,47}, -{74,10,48}, -{74,10,49}, -{74,10,50}, -{74,10,51}, -{74,10,52}, -{74,10,53}, -{74,10,54}, -{74,10,55}, -{74,10,56}, -{74,10,57}, -{74,10,58}, -{74,10,59}, -{74,10,60}, -{74,10,61}, -{74,10,62}, -{74,10,63}, -{74,10,64}, -{74,10,65}, -{74,10,66}, -{74,10,67}, -{74,10,68}, -{74,10,69}, -{74,10,70}, -{74,10,71}, -{74,10,72}, -{74,10,73}, -{74,10,74}, -{74,10,75}, -{74,10,76}, -{74,10,77}, -{74,11,-40}, -{74,11,-39}, -{74,11,-38}, -{74,11,-37}, -{74,11,-36}, -{74,11,-35}, -{74,11,-34}, -{74,11,-33}, -{74,11,-32}, -{74,11,-31}, -{74,11,-30}, -{74,11,-29}, -{74,11,-28}, -{74,11,-27}, -{74,11,-26}, -{74,11,-25}, -{74,11,-24}, -{74,11,-23}, -{74,11,-22}, -{74,11,-21}, -{74,11,-20}, -{74,11,-19}, -{74,11,-18}, -{74,11,-17}, -{74,11,-16}, -{74,11,-15}, -{74,11,-14}, -{74,11,-13}, -{74,11,-12}, -{74,11,-11}, -{74,11,-10}, -{74,11,-9}, -{74,11,-8}, -{74,11,-7}, -{74,11,-6}, -{74,11,-5}, -{74,11,-4}, -{74,11,-3}, -{74,11,-2}, -{74,11,-1}, -{74,11,0}, -{74,11,1}, -{74,11,2}, -{74,11,3}, -{74,11,4}, -{74,11,5}, -{74,11,6}, -{74,11,7}, -{74,11,8}, -{74,11,9}, -{74,11,10}, -{74,11,11}, -{74,11,12}, -{74,11,13}, -{74,11,14}, -{74,11,15}, -{74,11,16}, -{74,11,17}, -{74,11,18}, -{74,11,19}, -{74,11,20}, -{74,11,21}, -{74,11,22}, -{74,11,23}, -{74,11,24}, -{74,11,25}, -{74,11,26}, -{74,11,27}, -{74,11,28}, -{74,11,29}, -{74,11,30}, -{74,11,31}, -{74,11,32}, -{74,11,33}, -{74,11,34}, -{74,11,35}, -{74,11,36}, -{74,11,37}, -{74,11,38}, -{74,11,39}, -{74,11,40}, -{74,11,41}, -{74,11,42}, -{74,11,43}, -{74,11,44}, -{74,11,45}, -{74,11,46}, -{74,11,47}, -{74,11,48}, -{74,11,49}, -{74,11,50}, -{74,11,51}, -{74,11,52}, -{74,11,53}, -{74,11,54}, -{74,11,55}, -{74,11,56}, -{74,11,57}, -{74,11,58}, -{74,11,59}, -{74,11,60}, -{74,11,61}, -{74,11,62}, -{74,11,63}, -{74,11,64}, -{74,11,65}, -{74,11,66}, -{74,11,67}, -{74,11,68}, -{74,11,69}, -{74,11,70}, -{74,11,71}, -{74,11,72}, -{74,11,73}, -{74,11,74}, -{74,11,75}, -{74,11,76}, -{74,11,77}, -{74,12,-40}, -{74,12,-39}, -{74,12,-38}, -{74,12,-37}, -{74,12,-36}, -{74,12,-35}, -{74,12,-34}, -{74,12,-33}, -{74,12,-32}, -{74,12,-31}, -{74,12,-30}, -{74,12,-29}, -{74,12,-28}, -{74,12,-27}, -{74,12,-26}, -{74,12,-25}, -{74,12,-24}, -{74,12,-23}, -{74,12,-22}, -{74,12,-21}, -{74,12,-20}, -{74,12,-19}, -{74,12,-18}, -{74,12,-17}, -{74,12,-16}, -{74,12,-15}, -{74,12,-14}, -{74,12,-13}, -{74,12,-12}, -{74,12,-11}, -{74,12,-10}, -{74,12,-9}, -{74,12,-8}, -{74,12,-7}, -{74,12,-6}, -{74,12,-5}, -{74,12,-4}, -{74,12,-3}, -{74,12,-2}, -{74,12,-1}, -{74,12,0}, -{74,12,1}, -{74,12,2}, -{74,12,3}, -{74,12,4}, -{74,12,5}, -{74,12,6}, -{74,12,7}, -{74,12,8}, -{74,12,9}, -{74,12,10}, -{74,12,11}, -{74,12,12}, -{74,12,13}, -{74,12,14}, -{74,12,15}, -{74,12,16}, -{74,12,17}, -{74,12,18}, -{74,12,19}, -{74,12,20}, -{74,12,21}, -{74,12,22}, -{74,12,23}, -{74,12,24}, -{74,12,25}, -{74,12,26}, -{74,12,27}, -{74,12,28}, -{74,12,29}, -{74,12,30}, -{74,12,31}, -{74,12,32}, -{74,12,33}, -{74,12,34}, -{74,12,35}, -{74,12,36}, -{74,12,37}, -{74,12,38}, -{74,12,39}, -{74,12,40}, -{74,12,41}, -{74,12,42}, -{74,12,43}, -{74,12,44}, -{74,12,45}, -{74,12,46}, -{74,12,47}, -{74,12,48}, -{74,12,49}, -{74,12,50}, -{74,12,51}, -{74,12,52}, -{74,12,53}, -{74,12,54}, -{74,12,55}, -{74,12,56}, -{74,12,57}, -{74,12,58}, -{74,12,59}, -{74,12,60}, -{74,12,61}, -{74,12,62}, -{74,12,63}, -{74,12,64}, -{74,12,65}, -{74,12,66}, -{74,12,67}, -{74,12,68}, -{74,12,69}, -{74,12,70}, -{74,12,71}, -{74,12,72}, -{74,12,73}, -{74,12,74}, -{74,12,75}, -{74,12,76}, -{74,12,77}, -{74,13,-40}, -{74,13,-39}, -{74,13,-38}, -{74,13,-37}, -{74,13,-36}, -{74,13,-35}, -{74,13,-34}, -{74,13,-33}, -{74,13,-32}, -{74,13,-31}, -{74,13,-30}, -{74,13,-29}, -{74,13,-28}, -{74,13,-27}, -{74,13,-26}, -{74,13,-25}, -{74,13,-24}, -{74,13,-23}, -{74,13,-22}, -{74,13,-21}, -{74,13,-20}, -{74,13,-19}, -{74,13,-18}, -{74,13,-17}, -{74,13,-16}, -{74,13,-15}, -{74,13,-14}, -{74,13,-13}, -{74,13,-12}, -{74,13,-11}, -{74,13,-10}, -{74,13,-9}, -{74,13,-8}, -{74,13,-7}, -{74,13,-6}, -{74,13,-5}, -{74,13,-4}, -{74,13,-3}, -{74,13,-2}, -{74,13,-1}, -{74,13,0}, -{74,13,1}, -{74,13,2}, -{74,13,3}, -{74,13,4}, -{74,13,5}, -{74,13,6}, -{74,13,7}, -{74,13,8}, -{74,13,9}, -{74,13,10}, -{74,13,11}, -{74,13,12}, -{74,13,13}, -{74,13,14}, -{74,13,15}, -{74,13,16}, -{74,13,17}, -{74,13,18}, -{74,13,19}, -{74,13,20}, -{74,13,21}, -{74,13,22}, -{74,13,23}, -{74,13,24}, -{74,13,25}, -{74,13,26}, -{74,13,27}, -{74,13,28}, -{74,13,29}, -{74,13,30}, -{74,13,31}, -{74,13,32}, -{74,13,33}, -{74,13,34}, -{74,13,35}, -{74,13,36}, -{74,13,37}, -{74,13,38}, -{74,13,39}, -{74,13,40}, -{74,13,41}, -{74,13,42}, -{74,13,43}, -{74,13,44}, -{74,13,45}, -{74,13,46}, -{74,13,47}, -{74,13,48}, -{74,13,49}, -{74,13,50}, -{74,13,51}, -{74,13,52}, -{74,13,53}, -{74,13,54}, -{74,13,55}, -{74,13,56}, -{74,13,57}, -{74,13,58}, -{74,13,59}, -{74,13,60}, -{74,13,61}, -{74,13,62}, -{74,13,63}, -{74,13,64}, -{74,13,65}, -{74,13,66}, -{74,13,67}, -{74,13,68}, -{74,13,69}, -{74,13,70}, -{74,13,71}, -{74,13,72}, -{74,13,73}, -{74,13,74}, -{74,13,75}, -{74,13,76}, -{74,13,77}, -{74,14,-40}, -{74,14,-39}, -{74,14,-38}, -{74,14,-37}, -{74,14,-36}, -{74,14,-35}, -{74,14,-34}, -{74,14,-33}, -{74,14,-32}, -{74,14,-31}, -{74,14,-30}, -{74,14,-29}, -{74,14,-28}, -{74,14,-27}, -{74,14,-26}, -{74,14,-25}, -{74,14,-24}, -{74,14,-23}, -{74,14,-22}, -{74,14,-21}, -{74,14,-20}, -{74,14,-19}, -{74,14,-18}, -{74,14,-17}, -{74,14,-16}, -{74,14,-15}, -{74,14,-14}, -{74,14,-13}, -{74,14,-12}, -{74,14,-11}, -{74,14,-10}, -{74,14,-9}, -{74,14,-8}, -{74,14,-7}, -{74,14,-6}, -{74,14,-5}, -{74,14,-4}, -{74,14,-3}, -{74,14,-2}, -{74,14,-1}, -{74,14,0}, -{74,14,1}, -{74,14,2}, -{74,14,3}, -{74,14,4}, -{74,14,5}, -{74,14,6}, -{74,14,7}, -{74,14,8}, -{74,14,9}, -{74,14,10}, -{74,14,11}, -{74,14,12}, -{74,14,13}, -{74,14,14}, -{74,14,15}, -{74,14,16}, -{74,14,17}, -{74,14,18}, -{74,14,19}, -{74,14,20}, -{74,14,21}, -{74,14,22}, -{74,14,23}, -{74,14,24}, -{74,14,25}, -{74,14,26}, -{74,14,27}, -{74,14,28}, -{74,14,29}, -{74,14,30}, -{74,14,31}, -{74,14,32}, -{74,14,33}, -{74,14,34}, -{74,14,35}, -{74,14,36}, -{74,14,37}, -{74,14,38}, -{74,14,39}, -{74,14,40}, -{74,14,41}, -{74,14,42}, -{74,14,43}, -{74,14,44}, -{74,14,45}, -{74,14,46}, -{74,14,47}, -{74,14,48}, -{74,14,49}, -{74,14,50}, -{74,14,51}, -{74,14,52}, -{74,14,53}, -{74,14,54}, -{74,14,55}, -{74,14,56}, -{74,14,57}, -{74,14,58}, -{74,14,59}, -{74,14,60}, -{74,14,61}, -{74,14,62}, -{74,14,63}, -{74,14,64}, -{74,14,65}, -{74,14,66}, -{74,14,67}, -{74,14,68}, -{74,14,69}, -{74,14,70}, -{74,14,71}, -{74,14,72}, -{74,14,73}, -{74,14,74}, -{74,14,75}, -{74,14,76}, -{74,14,77}, -{74,15,-40}, -{74,15,-39}, -{74,15,-38}, -{74,15,-37}, -{74,15,-36}, -{74,15,-35}, -{74,15,-34}, -{74,15,-33}, -{74,15,-32}, -{74,15,-31}, -{74,15,-30}, -{74,15,-29}, -{74,15,-28}, -{74,15,-27}, -{74,15,-26}, -{74,15,-25}, -{74,15,-24}, -{74,15,-23}, -{74,15,-22}, -{74,15,-21}, -{74,15,-20}, -{74,15,-19}, -{74,15,-18}, -{74,15,-17}, -{74,15,-16}, -{74,15,-15}, -{74,15,-14}, -{74,15,-13}, -{74,15,-12}, -{74,15,-11}, -{74,15,-10}, -{74,15,-9}, -{74,15,-8}, -{74,15,-7}, -{74,15,-6}, -{74,15,-5}, -{74,15,-4}, -{74,15,-3}, -{74,15,-2}, -{74,15,-1}, -{74,15,0}, -{74,15,1}, -{74,15,2}, -{74,15,3}, -{74,15,4}, -{74,15,5}, -{74,15,6}, -{74,15,7}, -{74,15,8}, -{74,15,9}, -{74,15,10}, -{74,15,11}, -{74,15,12}, -{74,15,13}, -{74,15,14}, -{74,15,15}, -{74,15,16}, -{74,15,17}, -{74,15,18}, -{74,15,19}, -{74,15,20}, -{74,15,21}, -{74,15,22}, -{74,15,23}, -{74,15,24}, -{74,15,25}, -{74,15,26}, -{74,15,27}, -{74,15,28}, -{74,15,29}, -{74,15,30}, -{74,15,31}, -{74,15,32}, -{74,15,33}, -{74,15,34}, -{74,15,35}, -{74,15,36}, -{74,15,37}, -{74,15,38}, -{74,15,39}, -{74,15,40}, -{74,15,41}, -{74,15,42}, -{74,15,43}, -{74,15,44}, -{74,15,45}, -{74,15,46}, -{74,15,47}, -{74,15,48}, -{74,15,49}, -{74,15,50}, -{74,15,51}, -{74,15,52}, -{74,15,53}, -{74,15,54}, -{74,15,55}, -{74,15,56}, -{74,15,57}, -{74,15,58}, -{74,15,59}, -{74,15,60}, -{74,15,61}, -{74,15,62}, -{74,15,63}, -{74,15,64}, -{74,15,65}, -{74,15,66}, -{74,15,67}, -{74,15,68}, -{74,15,69}, -{74,15,70}, -{74,15,71}, -{74,15,72}, -{74,15,73}, -{74,15,74}, -{74,15,75}, -{74,15,76}, -{74,15,77}, -{74,16,-40}, -{74,16,-39}, -{74,16,-38}, -{74,16,-37}, -{74,16,-36}, -{74,16,-35}, -{74,16,-34}, -{74,16,-33}, -{74,16,-32}, -{74,16,-31}, -{74,16,-30}, -{74,16,-29}, -{74,16,-28}, -{74,16,-27}, -{74,16,-26}, -{74,16,-25}, -{74,16,-24}, -{74,16,-23}, -{74,16,-22}, -{74,16,-21}, -{74,16,-20}, -{74,16,-19}, -{74,16,-18}, -{74,16,-17}, -{74,16,-16}, -{74,16,-15}, -{74,16,-14}, -{74,16,-13}, -{74,16,-12}, -{74,16,-11}, -{74,16,-10}, -{74,16,-9}, -{74,16,-8}, -{74,16,-7}, -{74,16,-6}, -{74,16,-5}, -{74,16,-4}, -{74,16,-3}, -{74,16,-2}, -{74,16,-1}, -{74,16,0}, -{74,16,1}, -{74,16,2}, -{74,16,3}, -{74,16,4}, -{74,16,5}, -{74,16,6}, -{74,16,7}, -{74,16,8}, -{74,16,9}, -{74,16,10}, -{74,16,11}, -{74,16,12}, -{74,16,13}, -{74,16,14}, -{74,16,15}, -{74,16,16}, -{74,16,17}, -{74,16,18}, -{74,16,19}, -{74,16,20}, -{74,16,21}, -{74,16,22}, -{74,16,23}, -{74,16,24}, -{74,16,25}, -{74,16,26}, -{74,16,27}, -{74,16,28}, -{74,16,29}, -{74,16,30}, -{74,16,31}, -{74,16,32}, -{74,16,33}, -{74,16,34}, -{74,16,35}, -{74,16,36}, -{74,16,37}, -{74,16,38}, -{74,16,39}, -{74,16,40}, -{74,16,41}, -{74,16,42}, -{74,16,43}, -{74,16,44}, -{74,16,45}, -{74,16,46}, -{74,16,47}, -{74,16,48}, -{74,16,49}, -{74,16,50}, -{74,16,51}, -{74,16,52}, -{74,16,53}, -{74,16,54}, -{74,16,55}, -{74,16,56}, -{74,16,57}, -{74,16,58}, -{74,16,59}, -{74,16,60}, -{74,16,61}, -{74,16,62}, -{74,16,63}, -{74,16,64}, -{74,16,65}, -{74,16,66}, -{74,16,67}, -{74,16,68}, -{74,16,69}, -{74,16,70}, -{74,16,71}, -{74,16,72}, -{74,16,73}, -{74,16,74}, -{74,16,75}, -{74,16,76}, -{74,16,77}, -{74,17,-39}, -{74,17,-38}, -{74,17,-37}, -{74,17,-36}, -{74,17,-35}, -{74,17,-34}, -{74,17,-33}, -{74,17,-32}, -{74,17,-31}, -{74,17,-30}, -{74,17,-29}, -{74,17,-28}, -{74,17,-27}, -{74,17,-26}, -{74,17,-25}, -{74,17,-24}, -{74,17,-23}, -{74,17,-22}, -{74,17,-21}, -{74,17,-20}, -{74,17,-19}, -{74,17,-18}, -{74,17,-17}, -{74,17,-16}, -{74,17,-15}, -{74,17,-14}, -{74,17,-13}, -{74,17,-12}, -{74,17,-11}, -{74,17,-10}, -{74,17,-9}, -{74,17,-8}, -{74,17,-7}, -{74,17,-6}, -{74,17,-5}, -{74,17,-4}, -{74,17,-3}, -{74,17,-2}, -{74,17,-1}, -{74,17,0}, -{74,17,1}, -{74,17,2}, -{74,17,3}, -{74,17,4}, -{74,17,5}, -{74,17,6}, -{74,17,7}, -{74,17,8}, -{74,17,9}, -{74,17,10}, -{74,17,11}, -{74,17,12}, -{74,17,13}, -{74,17,14}, -{74,17,15}, -{74,17,16}, -{74,17,17}, -{74,17,18}, -{74,17,19}, -{74,17,20}, -{74,17,21}, -{74,17,22}, -{74,17,23}, -{74,17,24}, -{74,17,25}, -{74,17,26}, -{74,17,27}, -{74,17,28}, -{74,17,29}, -{74,17,30}, -{74,17,31}, -{74,17,32}, -{74,17,33}, -{74,17,34}, -{74,17,35}, -{74,17,36}, -{74,17,37}, -{74,17,38}, -{74,17,39}, -{74,17,40}, -{74,17,41}, -{74,17,42}, -{74,17,43}, -{74,17,44}, -{74,17,45}, -{74,17,46}, -{74,17,47}, -{74,17,48}, -{74,17,49}, -{74,17,50}, -{74,17,51}, -{74,17,52}, -{74,17,53}, -{74,17,54}, -{74,17,55}, -{74,17,56}, -{74,17,57}, -{74,17,58}, -{74,17,59}, -{74,17,60}, -{74,17,61}, -{74,17,62}, -{74,17,63}, -{74,17,64}, -{74,17,65}, -{74,17,66}, -{74,17,67}, -{74,17,68}, -{74,17,69}, -{74,17,70}, -{74,17,71}, -{74,17,72}, -{74,17,73}, -{74,17,74}, -{74,17,75}, -{74,17,76}, -{74,17,77}, -{74,18,-39}, -{74,18,-38}, -{74,18,-37}, -{74,18,-36}, -{74,18,-35}, -{74,18,-34}, -{74,18,-33}, -{74,18,-32}, -{74,18,-31}, -{74,18,-30}, -{74,18,-29}, -{74,18,-28}, -{74,18,-27}, -{74,18,-26}, -{74,18,-25}, -{74,18,-24}, -{74,18,-23}, -{74,18,-22}, -{74,18,-21}, -{74,18,-20}, -{74,18,-19}, -{74,18,-18}, -{74,18,-17}, -{74,18,-16}, -{74,18,-15}, -{74,18,-14}, -{74,18,-13}, -{74,18,-12}, -{74,18,-11}, -{74,18,-10}, -{74,18,-9}, -{74,18,-8}, -{74,18,-7}, -{74,18,-6}, -{74,18,-5}, -{74,18,-4}, -{74,18,-3}, -{74,18,-2}, -{74,18,-1}, -{74,18,0}, -{74,18,1}, -{74,18,2}, -{74,18,3}, -{74,18,4}, -{74,18,5}, -{74,18,6}, -{74,18,7}, -{74,18,8}, -{74,18,9}, -{74,18,10}, -{74,18,11}, -{74,18,12}, -{74,18,13}, -{74,18,14}, -{74,18,15}, -{74,18,16}, -{74,18,17}, -{74,18,18}, -{74,18,19}, -{74,18,20}, -{74,18,21}, -{74,18,22}, -{74,18,23}, -{74,18,24}, -{74,18,25}, -{74,18,26}, -{74,18,27}, -{74,18,28}, -{74,18,29}, -{74,18,30}, -{74,18,31}, -{74,18,32}, -{74,18,33}, -{74,18,34}, -{74,18,35}, -{74,18,36}, -{74,18,37}, -{74,18,38}, -{74,18,39}, -{74,18,40}, -{74,18,41}, -{74,18,42}, -{74,18,43}, -{74,18,44}, -{74,18,45}, -{74,18,46}, -{74,18,47}, -{74,18,48}, -{74,18,49}, -{74,18,50}, -{74,18,51}, -{74,18,52}, -{74,18,53}, -{74,18,54}, -{74,18,55}, -{74,18,56}, -{74,18,57}, -{74,18,58}, -{74,18,59}, -{74,18,60}, -{74,18,61}, -{74,18,62}, -{74,18,63}, -{74,18,64}, -{74,18,65}, -{74,18,66}, -{74,18,67}, -{74,18,68}, -{74,18,69}, -{74,18,70}, -{74,18,71}, -{74,18,72}, -{74,18,73}, -{74,18,74}, -{74,18,75}, -{74,18,76}, -{74,18,77}, -{74,19,-39}, -{74,19,-38}, -{74,19,-37}, -{74,19,-36}, -{74,19,-35}, -{74,19,-34}, -{74,19,-33}, -{74,19,-32}, -{74,19,-31}, -{74,19,-30}, -{74,19,-29}, -{74,19,-28}, -{74,19,-27}, -{74,19,-26}, -{74,19,-25}, -{74,19,-24}, -{74,19,-23}, -{74,19,-22}, -{74,19,-21}, -{74,19,-20}, -{74,19,-19}, -{74,19,-18}, -{74,19,-17}, -{74,19,-16}, -{74,19,-15}, -{74,19,-14}, -{74,19,-13}, -{74,19,-12}, -{74,19,-11}, -{74,19,-10}, -{74,19,-9}, -{74,19,-8}, -{74,19,-7}, -{74,19,-6}, -{74,19,-5}, -{74,19,-4}, -{74,19,-3}, -{74,19,-2}, -{74,19,-1}, -{74,19,0}, -{74,19,1}, -{74,19,2}, -{74,19,3}, -{74,19,4}, -{74,19,5}, -{74,19,6}, -{74,19,7}, -{74,19,8}, -{74,19,9}, -{74,19,10}, -{74,19,11}, -{74,19,12}, -{74,19,13}, -{74,19,14}, -{74,19,15}, -{74,19,16}, -{74,19,17}, -{74,19,18}, -{74,19,19}, -{74,19,20}, -{74,19,21}, -{74,19,22}, -{74,19,23}, -{74,19,24}, -{74,19,25}, -{74,19,26}, -{74,19,27}, -{74,19,28}, -{74,19,29}, -{74,19,30}, -{74,19,31}, -{74,19,32}, -{74,19,33}, -{74,19,34}, -{74,19,35}, -{74,19,36}, -{74,19,37}, -{74,19,38}, -{74,19,39}, -{74,19,40}, -{74,19,41}, -{74,19,42}, -{74,19,43}, -{74,19,44}, -{74,19,45}, -{74,19,46}, -{74,19,47}, -{74,19,48}, -{74,19,49}, -{74,19,50}, -{74,19,51}, -{74,19,52}, -{74,19,53}, -{74,19,54}, -{74,19,55}, -{74,19,56}, -{74,19,57}, -{74,19,58}, -{74,19,59}, -{74,19,60}, -{74,19,61}, -{74,19,62}, -{74,19,63}, -{74,19,64}, -{74,19,65}, -{74,19,66}, -{74,19,67}, -{74,19,68}, -{74,19,69}, -{74,19,70}, -{74,19,71}, -{74,19,72}, -{74,19,73}, -{74,19,74}, -{74,19,75}, -{74,19,76}, -{74,19,77}, -{74,20,-39}, -{74,20,-38}, -{74,20,-37}, -{74,20,-36}, -{74,20,-35}, -{74,20,-34}, -{74,20,-33}, -{74,20,-32}, -{74,20,-31}, -{74,20,-30}, -{74,20,-29}, -{74,20,-28}, -{74,20,-27}, -{74,20,-26}, -{74,20,-25}, -{74,20,-24}, -{74,20,-23}, -{74,20,-22}, -{74,20,-21}, -{74,20,-20}, -{74,20,-19}, -{74,20,-18}, -{74,20,-17}, -{74,20,-16}, -{74,20,-15}, -{74,20,-14}, -{74,20,-13}, -{74,20,-12}, -{74,20,-11}, -{74,20,-10}, -{74,20,-9}, -{74,20,-8}, -{74,20,-7}, -{74,20,-6}, -{74,20,-5}, -{74,20,-4}, -{74,20,-3}, -{74,20,-2}, -{74,20,-1}, -{74,20,0}, -{74,20,1}, -{74,20,2}, -{74,20,3}, -{74,20,4}, -{74,20,5}, -{74,20,6}, -{74,20,7}, -{74,20,8}, -{74,20,9}, -{74,20,10}, -{74,20,11}, -{74,20,12}, -{74,20,13}, -{74,20,14}, -{74,20,15}, -{74,20,16}, -{74,20,17}, -{74,20,18}, -{74,20,19}, -{74,20,20}, -{74,20,21}, -{74,20,22}, -{74,20,23}, -{74,20,24}, -{74,20,25}, -{74,20,26}, -{74,20,27}, -{74,20,28}, -{74,20,29}, -{74,20,30}, -{74,20,31}, -{74,20,32}, -{74,20,33}, -{74,20,34}, -{74,20,35}, -{74,20,36}, -{74,20,37}, -{74,20,38}, -{74,20,39}, -{74,20,40}, -{74,20,41}, -{74,20,42}, -{74,20,43}, -{74,20,44}, -{74,20,45}, -{74,20,46}, -{74,20,47}, -{74,20,48}, -{74,20,49}, -{74,20,50}, -{74,20,51}, -{74,20,52}, -{74,20,53}, -{74,20,54}, -{74,20,55}, -{74,20,56}, -{74,20,57}, -{74,20,58}, -{74,20,59}, -{74,20,60}, -{74,20,61}, -{74,20,62}, -{74,20,63}, -{74,20,64}, -{74,20,65}, -{74,20,66}, -{74,20,67}, -{74,20,68}, -{74,20,69}, -{74,20,70}, -{74,20,71}, -{74,20,72}, -{74,20,73}, -{74,20,74}, -{74,20,75}, -{74,20,76}, -{74,20,77}, -{74,20,78}, -{74,21,-39}, -{74,21,-38}, -{74,21,-37}, -{74,21,-36}, -{74,21,-35}, -{74,21,-34}, -{74,21,-33}, -{74,21,-32}, -{74,21,-31}, -{74,21,-30}, -{74,21,-29}, -{74,21,-28}, -{74,21,-27}, -{74,21,-26}, -{74,21,-25}, -{74,21,-24}, -{74,21,-23}, -{74,21,-22}, -{74,21,-21}, -{74,21,-20}, -{74,21,-19}, -{74,21,-18}, -{74,21,-17}, -{74,21,-16}, -{74,21,-15}, -{74,21,-14}, -{74,21,-13}, -{74,21,-12}, -{74,21,-11}, -{74,21,-10}, -{74,21,-9}, -{74,21,-8}, -{74,21,-7}, -{74,21,-6}, -{74,21,-5}, -{74,21,-4}, -{74,21,-3}, -{74,21,-2}, -{74,21,-1}, -{74,21,0}, -{74,21,1}, -{74,21,2}, -{74,21,3}, -{74,21,4}, -{74,21,5}, -{74,21,6}, -{74,21,7}, -{74,21,8}, -{74,21,9}, -{74,21,10}, -{74,21,11}, -{74,21,12}, -{74,21,13}, -{74,21,14}, -{74,21,15}, -{74,21,16}, -{74,21,17}, -{74,21,18}, -{74,21,19}, -{74,21,20}, -{74,21,21}, -{74,21,22}, -{74,21,23}, -{74,21,24}, -{74,21,25}, -{74,21,26}, -{74,21,27}, -{74,21,28}, -{74,21,29}, -{74,21,30}, -{74,21,31}, -{74,21,32}, -{74,21,33}, -{74,21,34}, -{74,21,35}, -{74,21,36}, -{74,21,37}, -{74,21,38}, -{74,21,39}, -{74,21,40}, -{74,21,41}, -{74,21,42}, -{74,21,43}, -{74,21,44}, -{74,21,45}, -{74,21,46}, -{74,21,47}, -{74,21,48}, -{74,21,49}, -{74,21,50}, -{74,21,51}, -{74,21,52}, -{74,21,53}, -{74,21,54}, -{74,21,55}, -{74,21,56}, -{74,21,57}, -{74,21,58}, -{74,21,59}, -{74,21,60}, -{74,21,61}, -{74,21,62}, -{74,21,63}, -{74,21,64}, -{74,21,65}, -{74,21,66}, -{74,21,67}, -{74,21,68}, -{74,21,69}, -{74,21,70}, -{74,21,71}, -{74,21,72}, -{74,21,73}, -{74,21,74}, -{74,21,75}, -{74,21,76}, -{74,21,77}, -{74,21,78}, -{74,22,-39}, -{74,22,-38}, -{74,22,-37}, -{74,22,-36}, -{74,22,-35}, -{74,22,-34}, -{74,22,-33}, -{74,22,-32}, -{74,22,-31}, -{74,22,-30}, -{74,22,-29}, -{74,22,-28}, -{74,22,-27}, -{74,22,-26}, -{74,22,-25}, -{74,22,-24}, -{74,22,-23}, -{74,22,-22}, -{74,22,-21}, -{74,22,-20}, -{74,22,-19}, -{74,22,-18}, -{74,22,-17}, -{74,22,-16}, -{74,22,-15}, -{74,22,-14}, -{74,22,-13}, -{74,22,-12}, -{74,22,-11}, -{74,22,-10}, -{74,22,-9}, -{74,22,-8}, -{74,22,-7}, -{74,22,-6}, -{74,22,-5}, -{74,22,-4}, -{74,22,-3}, -{74,22,-2}, -{74,22,-1}, -{74,22,0}, -{74,22,1}, -{74,22,2}, -{74,22,3}, -{74,22,4}, -{74,22,5}, -{74,22,6}, -{74,22,7}, -{74,22,8}, -{74,22,9}, -{74,22,10}, -{74,22,11}, -{74,22,12}, -{74,22,13}, -{74,22,14}, -{74,22,15}, -{74,22,16}, -{74,22,17}, -{74,22,18}, -{74,22,19}, -{74,22,20}, -{74,22,21}, -{74,22,22}, -{74,22,23}, -{74,22,24}, -{74,22,25}, -{74,22,26}, -{74,22,27}, -{74,22,28}, -{74,22,29}, -{74,22,30}, -{74,22,31}, -{74,22,32}, -{74,22,33}, -{74,22,34}, -{74,22,35}, -{74,22,36}, -{74,22,37}, -{74,22,38}, -{74,22,39}, -{74,22,40}, -{74,22,41}, -{74,22,42}, -{74,22,43}, -{74,22,44}, -{74,22,45}, -{74,22,46}, -{74,22,47}, -{74,22,48}, -{74,22,49}, -{74,22,50}, -{74,22,51}, -{74,22,52}, -{74,22,53}, -{74,22,54}, -{74,22,55}, -{74,22,56}, -{74,22,57}, -{74,22,58}, -{74,22,59}, -{74,22,60}, -{74,22,61}, -{74,22,62}, -{74,22,63}, -{74,22,64}, -{74,22,65}, -{74,22,66}, -{74,22,67}, -{74,22,68}, -{74,22,69}, -{74,22,70}, -{74,22,71}, -{74,22,72}, -{74,22,73}, -{74,22,74}, -{74,22,75}, -{74,22,76}, -{74,22,77}, -{74,22,78}, -{74,23,-39}, -{74,23,-38}, -{74,23,-37}, -{74,23,-36}, -{74,23,-35}, -{74,23,-34}, -{74,23,-33}, -{74,23,-32}, -{74,23,-31}, -{74,23,-30}, -{74,23,-29}, -{74,23,-28}, -{74,23,-27}, -{74,23,-26}, -{74,23,-25}, -{74,23,-24}, -{74,23,-23}, -{74,23,-22}, -{74,23,-21}, -{74,23,-20}, -{74,23,-19}, -{74,23,-18}, -{74,23,-17}, -{74,23,-16}, -{74,23,-15}, -{74,23,-14}, -{74,23,-13}, -{74,23,-12}, -{74,23,-11}, -{74,23,-10}, -{74,23,-9}, -{74,23,-8}, -{74,23,-7}, -{74,23,-6}, -{74,23,-5}, -{74,23,-4}, -{74,23,-3}, -{74,23,-2}, -{74,23,-1}, -{74,23,0}, -{74,23,1}, -{74,23,2}, -{74,23,3}, -{74,23,4}, -{74,23,5}, -{74,23,6}, -{74,23,7}, -{74,23,8}, -{74,23,9}, -{74,23,10}, -{74,23,11}, -{74,23,12}, -{74,23,13}, -{74,23,14}, -{74,23,15}, -{74,23,16}, -{74,23,17}, -{74,23,18}, -{74,23,19}, -{74,23,20}, -{74,23,21}, -{74,23,22}, -{74,23,23}, -{74,23,24}, -{74,23,25}, -{74,23,26}, -{74,23,27}, -{74,23,28}, -{74,23,29}, -{74,23,30}, -{74,23,31}, -{74,23,32}, -{74,23,33}, -{74,23,34}, -{74,23,35}, -{74,23,36}, -{74,23,37}, -{74,23,38}, -{74,23,39}, -{74,23,40}, -{74,23,41}, -{74,23,42}, -{74,23,43}, -{74,23,44}, -{74,23,45}, -{74,23,46}, -{74,23,47}, -{74,23,48}, -{74,23,49}, -{74,23,50}, -{74,23,51}, -{74,23,52}, -{74,23,53}, -{74,23,54}, -{74,23,55}, -{74,23,56}, -{74,23,57}, -{74,23,58}, -{74,23,59}, -{74,23,60}, -{74,23,61}, -{74,23,62}, -{74,23,63}, -{74,23,64}, -{74,23,65}, -{74,23,66}, -{74,23,67}, -{74,23,68}, -{74,23,69}, -{74,23,70}, -{74,23,71}, -{74,23,72}, -{74,23,73}, -{74,23,74}, -{74,23,75}, -{74,23,76}, -{74,23,77}, -{74,23,78}, -{74,24,-39}, -{74,24,-38}, -{74,24,-37}, -{74,24,-36}, -{74,24,-35}, -{74,24,-34}, -{74,24,-33}, -{74,24,-32}, -{74,24,-31}, -{74,24,-30}, -{74,24,-29}, -{74,24,-28}, -{74,24,-27}, -{74,24,-26}, -{74,24,-25}, -{74,24,-24}, -{74,24,-23}, -{74,24,-22}, -{74,24,-21}, -{74,24,-20}, -{74,24,-19}, -{74,24,-18}, -{74,24,-17}, -{74,24,-16}, -{74,24,-15}, -{74,24,-14}, -{74,24,-13}, -{74,24,-12}, -{74,24,-11}, -{74,24,-10}, -{74,24,-9}, -{74,24,-8}, -{74,24,-7}, -{74,24,-6}, -{74,24,-5}, -{74,24,-4}, -{74,24,-3}, -{74,24,-2}, -{74,24,-1}, -{74,24,0}, -{74,24,1}, -{74,24,2}, -{74,24,3}, -{74,24,4}, -{74,24,5}, -{74,24,6}, -{74,24,7}, -{74,24,8}, -{74,24,9}, -{74,24,10}, -{74,24,11}, -{74,24,12}, -{74,24,13}, -{74,24,14}, -{74,24,15}, -{74,24,16}, -{74,24,17}, -{74,24,18}, -{74,24,19}, -{74,24,20}, -{74,24,21}, -{74,24,22}, -{74,24,23}, -{74,24,24}, -{74,24,25}, -{74,24,26}, -{74,24,27}, -{74,24,28}, -{74,24,29}, -{74,24,30}, -{74,24,31}, -{74,24,32}, -{74,24,33}, -{74,24,34}, -{74,24,35}, -{74,24,36}, -{74,24,37}, -{74,24,38}, -{74,24,39}, -{74,24,40}, -{74,24,41}, -{74,24,42}, -{74,24,43}, -{74,24,44}, -{74,24,45}, -{74,24,46}, -{74,24,47}, -{74,24,48}, -{74,24,49}, -{74,24,50}, -{74,24,51}, -{74,24,52}, -{74,24,53}, -{74,24,54}, -{74,24,55}, -{74,24,56}, -{74,24,57}, -{74,24,58}, -{74,24,59}, -{74,24,60}, -{74,24,61}, -{74,24,62}, -{74,24,63}, -{74,24,64}, -{74,24,65}, -{74,24,66}, -{74,24,67}, -{74,24,68}, -{74,24,69}, -{74,24,70}, -{74,24,71}, -{74,24,72}, -{74,24,73}, -{74,24,74}, -{74,24,75}, -{74,24,76}, -{74,24,77}, -{74,24,78}, -{74,25,-39}, -{74,25,-38}, -{74,25,-37}, -{74,25,-36}, -{74,25,-35}, -{74,25,-34}, -{74,25,-33}, -{74,25,-32}, -{74,25,-31}, -{74,25,-30}, -{74,25,-29}, -{74,25,-28}, -{74,25,-27}, -{74,25,-26}, -{74,25,-25}, -{74,25,-24}, -{74,25,-23}, -{74,25,-22}, -{74,25,-21}, -{74,25,-20}, -{74,25,-19}, -{74,25,-18}, -{74,25,-17}, -{74,25,-16}, -{74,25,-15}, -{74,25,-14}, -{74,25,-13}, -{74,25,-12}, -{74,25,-11}, -{74,25,-10}, -{74,25,-9}, -{74,25,-8}, -{74,25,-7}, -{74,25,-6}, -{74,25,-5}, -{74,25,-4}, -{74,25,-3}, -{74,25,-2}, -{74,25,-1}, -{74,25,0}, -{74,25,1}, -{74,25,2}, -{74,25,3}, -{74,25,4}, -{74,25,5}, -{74,25,6}, -{74,25,7}, -{74,25,8}, -{74,25,9}, -{74,25,10}, -{74,25,11}, -{74,25,12}, -{74,25,13}, -{74,25,14}, -{74,25,15}, -{74,25,16}, -{74,25,17}, -{74,25,18}, -{74,25,19}, -{74,25,20}, -{74,25,21}, -{74,25,22}, -{74,25,23}, -{74,25,24}, -{74,25,25}, -{74,25,26}, -{74,25,27}, -{74,25,28}, -{74,25,29}, -{74,25,30}, -{74,25,31}, -{74,25,32}, -{74,25,33}, -{74,25,34}, -{74,25,35}, -{74,25,36}, -{74,25,37}, -{74,25,38}, -{74,25,39}, -{74,25,40}, -{74,25,41}, -{74,25,42}, -{74,25,43}, -{74,25,44}, -{74,25,45}, -{74,25,46}, -{74,25,47}, -{74,25,48}, -{74,25,49}, -{74,25,50}, -{74,25,51}, -{74,25,52}, -{74,25,53}, -{74,25,54}, -{74,25,55}, -{74,25,56}, -{74,25,57}, -{74,25,58}, -{74,25,59}, -{74,25,60}, -{74,25,61}, -{74,25,62}, -{74,25,63}, -{74,25,64}, -{74,25,65}, -{74,25,66}, -{74,25,67}, -{74,25,68}, -{74,25,69}, -{74,25,70}, -{74,25,71}, -{74,25,72}, -{74,25,73}, -{74,25,74}, -{74,25,75}, -{74,25,76}, -{74,25,77}, -{74,25,78}, -{74,26,-39}, -{74,26,-38}, -{74,26,-37}, -{74,26,-36}, -{74,26,-35}, -{74,26,-34}, -{74,26,-33}, -{74,26,-32}, -{74,26,-31}, -{74,26,-30}, -{74,26,-29}, -{74,26,-28}, -{74,26,-27}, -{74,26,-26}, -{74,26,-25}, -{74,26,-24}, -{74,26,-23}, -{74,26,-22}, -{74,26,-21}, -{74,26,-20}, -{74,26,-19}, -{74,26,-18}, -{74,26,-17}, -{74,26,-16}, -{74,26,-15}, -{74,26,-14}, -{74,26,-13}, -{74,26,-12}, -{74,26,-11}, -{74,26,-10}, -{74,26,-9}, -{74,26,-8}, -{74,26,-7}, -{74,26,-6}, -{74,26,-5}, -{74,26,-4}, -{74,26,-3}, -{74,26,-2}, -{74,26,-1}, -{74,26,0}, -{74,26,1}, -{74,26,2}, -{74,26,3}, -{74,26,4}, -{74,26,5}, -{74,26,6}, -{74,26,7}, -{74,26,8}, -{74,26,9}, -{74,26,10}, -{74,26,11}, -{74,26,12}, -{74,26,13}, -{74,26,14}, -{74,26,15}, -{74,26,16}, -{74,26,17}, -{74,26,18}, -{74,26,19}, -{74,26,20}, -{74,26,21}, -{74,26,22}, -{74,26,23}, -{74,26,24}, -{74,26,25}, -{74,26,26}, -{74,26,27}, -{74,26,28}, -{74,26,29}, -{74,26,30}, -{74,26,31}, -{74,26,32}, -{74,26,33}, -{74,26,34}, -{74,26,35}, -{74,26,36}, -{74,26,37}, -{74,26,38}, -{74,26,39}, -{74,26,40}, -{74,26,41}, -{74,26,42}, -{74,26,43}, -{74,26,44}, -{74,26,45}, -{74,26,46}, -{74,26,47}, -{74,26,48}, -{74,26,49}, -{74,26,50}, -{74,26,51}, -{74,26,52}, -{74,26,53}, -{74,26,54}, -{74,26,55}, -{74,26,56}, -{74,26,57}, -{74,26,58}, -{74,26,59}, -{74,26,60}, -{74,26,61}, -{74,26,62}, -{74,26,63}, -{74,26,64}, -{74,26,65}, -{74,26,66}, -{74,26,67}, -{74,26,68}, -{74,26,69}, -{74,26,70}, -{74,26,71}, -{74,26,72}, -{74,26,73}, -{74,26,74}, -{74,26,75}, -{74,26,76}, -{74,26,77}, -{74,26,78}, -{74,27,-39}, -{74,27,-38}, -{74,27,-37}, -{74,27,-36}, -{74,27,-35}, -{74,27,-34}, -{74,27,-33}, -{74,27,-32}, -{74,27,-31}, -{74,27,-30}, -{74,27,-29}, -{74,27,-28}, -{74,27,-27}, -{74,27,-26}, -{74,27,-25}, -{74,27,-24}, -{74,27,-23}, -{74,27,-22}, -{74,27,-21}, -{74,27,-20}, -{74,27,-19}, -{74,27,-18}, -{74,27,-17}, -{74,27,-16}, -{74,27,-15}, -{74,27,-14}, -{74,27,-13}, -{74,27,-12}, -{74,27,-11}, -{74,27,-10}, -{74,27,-9}, -{74,27,-8}, -{74,27,-7}, -{74,27,-6}, -{74,27,-5}, -{74,27,-4}, -{74,27,-3}, -{74,27,-2}, -{74,27,-1}, -{74,27,0}, -{74,27,1}, -{74,27,2}, -{74,27,3}, -{74,27,4}, -{74,27,5}, -{74,27,6}, -{74,27,7}, -{74,27,8}, -{74,27,9}, -{74,27,10}, -{74,27,11}, -{74,27,12}, -{74,27,13}, -{74,27,14}, -{74,27,15}, -{74,27,16}, -{74,27,17}, -{74,27,18}, -{74,27,19}, -{74,27,20}, -{74,27,21}, -{74,27,22}, -{74,27,23}, -{74,27,24}, -{74,27,25}, -{74,27,26}, -{74,27,27}, -{74,27,28}, -{74,27,29}, -{74,27,30}, -{74,27,31}, -{74,27,32}, -{74,27,33}, -{74,27,34}, -{74,27,35}, -{74,27,36}, -{74,27,37}, -{74,27,38}, -{74,27,39}, -{74,27,40}, -{74,27,41}, -{74,27,42}, -{74,27,43}, -{74,27,44}, -{74,27,45}, -{74,27,46}, -{74,27,47}, -{74,27,48}, -{74,27,49}, -{74,27,50}, -{74,27,51}, -{74,27,52}, -{74,27,53}, -{74,27,54}, -{74,27,55}, -{74,27,56}, -{74,27,57}, -{74,27,58}, -{74,27,59}, -{74,27,60}, -{74,27,61}, -{74,27,62}, -{74,27,63}, -{74,27,64}, -{74,27,65}, -{74,27,66}, -{74,27,67}, -{74,27,68}, -{74,27,69}, -{74,27,70}, -{74,27,71}, -{74,28,-39}, -{74,28,-38}, -{74,28,-37}, -{74,28,-36}, -{74,28,-35}, -{74,28,-34}, -{74,28,-33}, -{74,28,-32}, -{74,28,-31}, -{74,28,-30}, -{74,28,-29}, -{74,28,-28}, -{74,28,-27}, -{74,28,-26}, -{74,28,-25}, -{74,28,-24}, -{74,28,-23}, -{74,28,-22}, -{74,28,-21}, -{74,28,-20}, -{74,28,-19}, -{74,28,-18}, -{74,28,-17}, -{74,28,-16}, -{74,28,-15}, -{74,28,-14}, -{74,28,-13}, -{74,28,-12}, -{74,28,-11}, -{74,28,-10}, -{74,28,-9}, -{74,28,-8}, -{74,28,-7}, -{74,28,-6}, -{74,28,-5}, -{74,28,-4}, -{74,28,-3}, -{74,28,-2}, -{74,28,-1}, -{74,28,0}, -{74,28,1}, -{74,28,2}, -{74,28,3}, -{74,28,4}, -{74,28,5}, -{74,28,6}, -{74,28,7}, -{74,28,8}, -{74,28,9}, -{74,28,10}, -{74,28,11}, -{74,28,12}, -{74,28,13}, -{74,28,14}, -{74,28,15}, -{74,28,16}, -{74,28,17}, -{74,28,18}, -{74,28,19}, -{74,28,20}, -{74,28,21}, -{74,28,22}, -{74,28,23}, -{74,28,24}, -{74,28,25}, -{74,28,26}, -{74,28,27}, -{74,28,28}, -{74,28,29}, -{74,28,30}, -{74,28,31}, -{74,28,32}, -{74,28,33}, -{74,28,34}, -{74,28,35}, -{74,28,36}, -{74,28,37}, -{74,28,38}, -{74,28,39}, -{74,28,40}, -{74,28,41}, -{74,28,42}, -{74,28,43}, -{74,28,44}, -{74,28,45}, -{74,28,46}, -{74,28,47}, -{74,28,48}, -{74,28,49}, -{74,28,50}, -{74,28,51}, -{74,28,52}, -{74,28,53}, -{74,28,54}, -{74,28,55}, -{74,28,56}, -{74,28,57}, -{74,28,58}, -{74,28,59}, -{74,28,60}, -{74,28,61}, -{74,28,62}, -{74,28,63}, -{74,29,-39}, -{74,29,-38}, -{74,29,-37}, -{74,29,-36}, -{74,29,-35}, -{74,29,-34}, -{74,29,-33}, -{74,29,-32}, -{74,29,-31}, -{74,29,-30}, -{74,29,-29}, -{74,29,-28}, -{74,29,-27}, -{74,29,-26}, -{74,29,-25}, -{74,29,-24}, -{74,29,-23}, -{74,29,-22}, -{74,29,-21}, -{74,29,-20}, -{74,29,-19}, -{74,29,-18}, -{74,29,-17}, -{74,29,-16}, -{74,29,-15}, -{74,29,-14}, -{74,29,-13}, -{74,29,-12}, -{74,29,-11}, -{74,29,-10}, -{74,29,-9}, -{74,29,-8}, -{74,29,-7}, -{74,29,-6}, -{74,29,-5}, -{74,29,-4}, -{74,29,-3}, -{74,29,-2}, -{74,29,-1}, -{74,29,0}, -{74,29,1}, -{74,29,2}, -{74,29,3}, -{74,29,4}, -{74,29,5}, -{74,29,6}, -{74,29,7}, -{74,29,8}, -{74,29,9}, -{74,29,10}, -{74,29,11}, -{74,29,12}, -{74,29,13}, -{74,29,14}, -{74,29,15}, -{74,29,16}, -{74,29,17}, -{74,29,18}, -{74,29,19}, -{74,29,20}, -{74,29,21}, -{74,29,22}, -{74,29,23}, -{74,29,24}, -{74,29,25}, -{74,29,26}, -{74,29,27}, -{74,29,28}, -{74,29,29}, -{74,29,30}, -{74,29,31}, -{74,29,32}, -{74,29,33}, -{74,29,34}, -{74,29,35}, -{74,29,36}, -{74,29,37}, -{74,29,38}, -{74,29,39}, -{74,29,40}, -{74,29,41}, -{74,29,42}, -{74,29,43}, -{74,29,44}, -{74,29,45}, -{74,29,46}, -{74,29,47}, -{74,29,48}, -{74,29,49}, -{74,29,50}, -{74,29,51}, -{74,29,52}, -{74,29,53}, -{74,29,54}, -{74,29,55}, -{74,29,56}, -{74,30,-39}, -{74,30,-38}, -{74,30,-37}, -{74,30,-36}, -{74,30,-35}, -{74,30,-34}, -{74,30,-33}, -{74,30,-32}, -{74,30,-31}, -{74,30,-30}, -{74,30,-29}, -{74,30,-28}, -{74,30,-27}, -{74,30,-26}, -{74,30,-25}, -{74,30,-24}, -{74,30,-23}, -{74,30,-22}, -{74,30,-21}, -{74,30,-20}, -{74,30,-19}, -{74,30,-18}, -{74,30,-17}, -{74,30,-16}, -{74,30,-15}, -{74,30,-14}, -{74,30,-13}, -{74,30,-12}, -{74,30,-11}, -{74,30,-10}, -{74,30,-9}, -{74,30,-8}, -{74,30,-7}, -{74,30,-6}, -{74,30,-5}, -{74,30,-4}, -{74,30,-3}, -{74,30,-2}, -{74,30,-1}, -{74,30,0}, -{74,30,1}, -{74,30,2}, -{74,30,3}, -{74,30,4}, -{74,30,5}, -{74,30,6}, -{74,30,7}, -{74,30,8}, -{74,30,9}, -{74,30,10}, -{74,30,11}, -{74,30,12}, -{74,30,13}, -{74,30,14}, -{74,30,15}, -{74,30,16}, -{74,30,17}, -{74,30,18}, -{74,30,19}, -{74,30,20}, -{74,30,21}, -{74,30,22}, -{74,30,23}, -{74,30,24}, -{74,30,25}, -{74,30,26}, -{74,30,27}, -{74,30,28}, -{74,30,29}, -{74,30,30}, -{74,30,31}, -{74,30,32}, -{74,30,33}, -{74,30,34}, -{74,30,35}, -{74,30,36}, -{74,30,37}, -{74,30,38}, -{74,30,39}, -{74,30,40}, -{74,30,41}, -{74,30,42}, -{74,30,43}, -{74,30,44}, -{74,30,45}, -{74,30,46}, -{74,30,47}, -{74,30,48}, -{74,30,49}, -{74,30,50}, -{74,31,-39}, -{74,31,-38}, -{74,31,-37}, -{74,31,-36}, -{74,31,-35}, -{74,31,-34}, -{74,31,-33}, -{74,31,-32}, -{74,31,-31}, -{74,31,-30}, -{74,31,-29}, -{74,31,-28}, -{74,31,-27}, -{74,31,-26}, -{74,31,-25}, -{74,31,-24}, -{74,31,-23}, -{74,31,-22}, -{74,31,-21}, -{74,31,-20}, -{74,31,-19}, -{74,31,-18}, -{74,31,-17}, -{74,31,-16}, -{74,31,-15}, -{74,31,-14}, -{74,31,-13}, -{74,31,-12}, -{74,31,-11}, -{74,31,-10}, -{74,31,-9}, -{74,31,-8}, -{74,31,-7}, -{74,31,-6}, -{74,31,-5}, -{74,31,-4}, -{74,31,-3}, -{74,31,-2}, -{74,31,-1}, -{74,31,0}, -{74,31,1}, -{74,31,2}, -{74,31,3}, -{74,31,4}, -{74,31,5}, -{74,31,6}, -{74,31,7}, -{74,31,8}, -{74,31,9}, -{74,31,10}, -{74,31,11}, -{74,31,12}, -{74,31,13}, -{74,31,14}, -{74,31,15}, -{74,31,16}, -{74,31,17}, -{74,31,18}, -{74,31,19}, -{74,31,20}, -{74,31,21}, -{74,31,22}, -{74,31,23}, -{74,31,24}, -{74,31,25}, -{74,31,26}, -{74,31,27}, -{74,31,28}, -{74,31,29}, -{74,31,30}, -{74,31,31}, -{74,31,32}, -{74,31,33}, -{74,31,34}, -{74,31,35}, -{74,31,36}, -{74,31,37}, -{74,31,38}, -{74,31,39}, -{74,31,40}, -{74,31,41}, -{74,31,42}, -{74,31,43}, -{74,31,44}, -{74,32,-39}, -{74,32,-38}, -{74,32,-37}, -{74,32,-36}, -{74,32,-35}, -{74,32,-34}, -{74,32,-33}, -{74,32,-32}, -{74,32,-31}, -{74,32,-30}, -{74,32,-29}, -{74,32,-28}, -{74,32,-27}, -{74,32,-26}, -{74,32,-25}, -{74,32,-24}, -{74,32,-23}, -{74,32,-22}, -{74,32,-21}, -{74,32,-20}, -{74,32,-19}, -{74,32,-18}, -{74,32,-17}, -{74,32,-16}, -{74,32,-15}, -{74,32,-14}, -{74,32,-13}, -{74,32,-12}, -{74,32,-11}, -{74,32,-10}, -{74,32,-9}, -{74,32,-8}, -{74,32,-7}, -{74,32,-6}, -{74,32,-5}, -{74,32,-4}, -{74,32,-3}, -{74,32,-2}, -{74,32,-1}, -{74,32,0}, -{74,32,1}, -{74,32,2}, -{74,32,3}, -{74,32,4}, -{74,32,5}, -{74,32,6}, -{74,32,7}, -{74,32,8}, -{74,32,9}, -{74,32,10}, -{74,32,11}, -{74,32,12}, -{74,32,13}, -{74,32,14}, -{74,32,15}, -{74,32,16}, -{74,32,17}, -{74,32,18}, -{74,32,19}, -{74,32,20}, -{74,32,21}, -{74,32,22}, -{74,32,23}, -{74,32,24}, -{74,32,25}, -{74,32,26}, -{74,32,27}, -{74,32,28}, -{74,32,29}, -{74,32,30}, -{74,32,31}, -{74,32,32}, -{74,32,33}, -{74,32,34}, -{74,32,35}, -{74,32,36}, -{74,32,37}, -{74,32,38}, -{74,32,39}, -{74,33,-39}, -{74,33,-38}, -{74,33,-37}, -{74,33,-36}, -{74,33,-35}, -{74,33,-34}, -{74,33,-33}, -{74,33,-32}, -{74,33,-31}, -{74,33,-30}, -{74,33,-29}, -{74,33,-28}, -{74,33,-27}, -{74,33,-26}, -{74,33,-25}, -{74,33,-24}, -{74,33,-23}, -{74,33,-22}, -{74,33,-21}, -{74,33,-20}, -{74,33,-19}, -{74,33,-18}, -{74,33,-17}, -{74,33,-16}, -{74,33,-15}, -{74,33,-14}, -{74,33,-13}, -{74,33,-12}, -{74,33,-11}, -{74,33,-10}, -{74,33,-9}, -{74,33,-8}, -{74,33,-7}, -{74,33,-6}, -{74,33,-5}, -{74,33,-4}, -{74,33,-3}, -{74,33,-2}, -{74,33,-1}, -{74,33,0}, -{74,33,1}, -{74,33,2}, -{74,33,3}, -{74,33,4}, -{74,33,5}, -{74,33,6}, -{74,33,7}, -{74,33,8}, -{74,33,9}, -{74,33,10}, -{74,33,11}, -{74,33,12}, -{74,33,13}, -{74,33,14}, -{74,33,15}, -{74,33,16}, -{74,33,17}, -{74,33,18}, -{74,33,19}, -{74,33,20}, -{74,33,21}, -{74,33,22}, -{74,33,23}, -{74,33,24}, -{74,33,25}, -{74,33,26}, -{74,33,27}, -{74,33,28}, -{74,33,29}, -{74,33,30}, -{74,33,31}, -{74,33,32}, -{74,33,33}, -{74,33,34}, -{74,33,35}, -{74,34,-39}, -{74,34,-38}, -{74,34,-37}, -{74,34,-36}, -{74,34,-35}, -{74,34,-34}, -{74,34,-33}, -{74,34,-32}, -{74,34,-31}, -{74,34,-30}, -{74,34,-29}, -{74,34,-28}, -{74,34,-27}, -{74,34,-26}, -{74,34,-25}, -{74,34,-24}, -{74,34,-23}, -{74,34,-22}, -{74,34,-21}, -{74,34,-20}, -{74,34,-19}, -{74,34,-18}, -{74,34,-17}, -{74,34,-16}, -{74,34,-15}, -{74,34,-14}, -{74,34,-13}, -{74,34,-12}, -{74,34,-11}, -{74,34,-10}, -{74,34,-9}, -{74,34,-8}, -{74,34,-7}, -{74,34,-6}, -{74,34,-5}, -{74,34,-4}, -{74,34,-3}, -{74,34,-2}, -{74,34,-1}, -{74,34,0}, -{74,34,1}, -{74,34,2}, -{74,34,3}, -{74,34,4}, -{74,34,5}, -{74,34,6}, -{74,34,7}, -{74,34,8}, -{74,34,9}, -{74,34,10}, -{74,34,11}, -{74,34,12}, -{74,34,13}, -{74,34,14}, -{74,34,15}, -{74,34,16}, -{74,34,17}, -{74,34,18}, -{74,34,19}, -{74,34,20}, -{74,34,21}, -{74,34,22}, -{74,34,23}, -{74,34,24}, -{74,34,25}, -{74,34,26}, -{74,34,27}, -{74,34,28}, -{74,34,29}, -{74,34,30}, -{74,35,-39}, -{74,35,-38}, -{74,35,-37}, -{74,35,-36}, -{74,35,-35}, -{74,35,-34}, -{74,35,-33}, -{74,35,-32}, -{74,35,-31}, -{74,35,-30}, -{74,35,-29}, -{74,35,-28}, -{74,35,-27}, -{74,35,-26}, -{74,35,-25}, -{74,35,-24}, -{74,35,-23}, -{74,35,-22}, -{74,35,-21}, -{74,35,-20}, -{74,35,-19}, -{74,35,-18}, -{74,35,-17}, -{74,35,-16}, -{74,35,-15}, -{74,35,-14}, -{74,35,-13}, -{74,35,-12}, -{74,35,-11}, -{74,35,-10}, -{74,35,-9}, -{74,35,-8}, -{74,35,-7}, -{74,35,-6}, -{74,35,-5}, -{74,35,-4}, -{74,35,-3}, -{74,35,-2}, -{74,35,-1}, -{74,35,0}, -{74,35,1}, -{74,35,2}, -{74,35,3}, -{74,35,4}, -{74,35,5}, -{74,35,6}, -{74,35,7}, -{74,35,8}, -{74,35,9}, -{74,35,10}, -{74,35,11}, -{74,35,12}, -{74,35,13}, -{74,35,14}, -{74,35,15}, -{74,35,16}, -{74,35,17}, -{74,35,18}, -{74,35,19}, -{74,35,20}, -{74,35,21}, -{74,35,22}, -{74,35,23}, -{74,35,24}, -{74,35,25}, -{74,35,26}, -{74,36,-39}, -{74,36,-38}, -{74,36,-37}, -{74,36,-36}, -{74,36,-35}, -{74,36,-34}, -{74,36,-33}, -{74,36,-32}, -{74,36,-31}, -{74,36,-30}, -{74,36,-29}, -{74,36,-28}, -{74,36,-27}, -{74,36,-26}, -{74,36,-25}, -{74,36,-24}, -{74,36,-23}, -{74,36,-22}, -{74,36,-21}, -{74,36,-20}, -{74,36,-19}, -{74,36,-18}, -{74,36,-17}, -{74,36,-16}, -{74,36,-15}, -{74,36,-14}, -{74,36,-13}, -{74,36,-12}, -{74,36,-11}, -{74,36,-10}, -{74,36,-9}, -{74,36,-8}, -{74,36,-7}, -{74,36,-6}, -{74,36,-5}, -{74,36,-4}, -{74,36,-3}, -{74,36,-2}, -{74,36,-1}, -{74,36,0}, -{74,36,1}, -{74,36,2}, -{74,36,3}, -{74,36,4}, -{74,36,5}, -{74,36,6}, -{74,36,7}, -{74,36,8}, -{74,36,9}, -{74,36,10}, -{74,36,11}, -{74,36,12}, -{74,36,13}, -{74,36,14}, -{74,36,15}, -{74,36,16}, -{74,36,17}, -{74,36,18}, -{74,36,19}, -{74,36,20}, -{74,36,21}, -{74,36,22}, -{74,37,-39}, -{74,37,-38}, -{74,37,-37}, -{74,37,-36}, -{74,37,-35}, -{74,37,-34}, -{74,37,-33}, -{74,37,-32}, -{74,37,-31}, -{74,37,-30}, -{74,37,-29}, -{74,37,-28}, -{74,37,-27}, -{74,37,-26}, -{74,37,-25}, -{74,37,-24}, -{74,37,-23}, -{74,37,-22}, -{74,37,-21}, -{74,37,-20}, -{74,37,-19}, -{74,37,-18}, -{74,37,-17}, -{74,37,-16}, -{74,37,-15}, -{74,37,-14}, -{74,37,-13}, -{74,37,-12}, -{74,37,-11}, -{74,37,-10}, -{74,37,-9}, -{74,37,-8}, -{74,37,-7}, -{74,37,-6}, -{74,37,-5}, -{74,37,-4}, -{74,37,-3}, -{74,37,-2}, -{74,37,-1}, -{74,37,0}, -{74,37,1}, -{74,37,2}, -{74,37,3}, -{74,37,4}, -{74,37,5}, -{74,37,6}, -{74,37,7}, -{74,37,8}, -{74,37,9}, -{74,37,10}, -{74,37,11}, -{74,37,12}, -{74,37,13}, -{74,37,14}, -{74,37,15}, -{74,37,16}, -{74,37,17}, -{74,37,18}, -{74,37,19}, -{74,38,-39}, -{74,38,-38}, -{74,38,-37}, -{74,38,-36}, -{74,38,-35}, -{74,38,-34}, -{74,38,-33}, -{74,38,-32}, -{74,38,-31}, -{74,38,-30}, -{74,38,-29}, -{74,38,-28}, -{74,38,-27}, -{74,38,-26}, -{74,38,-25}, -{74,38,-24}, -{74,38,-23}, -{74,38,-22}, -{74,38,-21}, -{74,38,-20}, -{74,38,-19}, -{74,38,-18}, -{74,38,-17}, -{74,38,-16}, -{74,38,-15}, -{74,38,-14}, -{74,38,-13}, -{74,38,-12}, -{74,38,-11}, -{74,38,-10}, -{74,38,-9}, -{74,38,-8}, -{74,38,-7}, -{74,38,-6}, -{74,38,-5}, -{74,38,-4}, -{74,38,-3}, -{74,38,-2}, -{74,38,-1}, -{74,38,0}, -{74,38,1}, -{74,38,2}, -{74,38,3}, -{74,38,4}, -{74,38,5}, -{74,38,6}, -{74,38,7}, -{74,38,8}, -{74,38,9}, -{74,38,10}, -{74,38,11}, -{74,38,12}, -{74,38,13}, -{74,38,14}, -{74,38,15}, -{74,39,-39}, -{74,39,-38}, -{74,39,-37}, -{74,39,-36}, -{74,39,-35}, -{74,39,-34}, -{74,39,-33}, -{74,39,-32}, -{74,39,-31}, -{74,39,-30}, -{74,39,-29}, -{74,39,-28}, -{74,39,-27}, -{74,39,-26}, -{74,39,-25}, -{74,39,-24}, -{74,39,-23}, -{74,39,-22}, -{74,39,-21}, -{74,39,-20}, -{74,39,-19}, -{74,39,-18}, -{74,39,-17}, -{74,39,-16}, -{74,39,-15}, -{74,39,-14}, -{74,39,-13}, -{74,39,-12}, -{74,39,-11}, -{74,39,-10}, -{74,39,-9}, -{74,39,-8}, -{74,39,-7}, -{74,39,-6}, -{74,39,-5}, -{74,39,-4}, -{74,39,-3}, -{74,39,-2}, -{74,39,-1}, -{74,39,0}, -{74,39,1}, -{74,39,2}, -{74,39,3}, -{74,39,4}, -{74,39,5}, -{74,39,6}, -{74,39,7}, -{74,39,8}, -{74,39,9}, -{74,39,10}, -{74,39,11}, -{74,39,12}, -{74,40,-39}, -{74,40,-38}, -{74,40,-37}, -{74,40,-36}, -{74,40,-35}, -{74,40,-34}, -{74,40,-33}, -{74,40,-32}, -{74,40,-31}, -{74,40,-30}, -{74,40,-29}, -{74,40,-28}, -{74,40,-27}, -{74,40,-26}, -{74,40,-25}, -{74,40,-24}, -{74,40,-23}, -{74,40,-22}, -{74,40,-21}, -{74,40,-20}, -{74,40,-19}, -{74,40,-18}, -{74,40,-17}, -{74,40,-16}, -{74,40,-15}, -{74,40,-14}, -{74,40,-13}, -{74,40,-12}, -{74,40,-11}, -{74,40,-10}, -{74,40,-9}, -{74,40,-8}, -{74,40,-7}, -{74,40,-6}, -{74,40,-5}, -{74,40,-4}, -{74,40,-3}, -{74,40,-2}, -{74,40,-1}, -{74,40,0}, -{74,40,1}, -{74,40,2}, -{74,40,3}, -{74,40,4}, -{74,40,5}, -{74,40,6}, -{74,40,7}, -{74,40,8}, -{74,40,9}, -{74,41,-39}, -{74,41,-38}, -{74,41,-37}, -{74,41,-36}, -{74,41,-35}, -{74,41,-34}, -{74,41,-33}, -{74,41,-32}, -{74,41,-31}, -{74,41,-30}, -{74,41,-29}, -{74,41,-28}, -{74,41,-27}, -{74,41,-26}, -{74,41,-25}, -{74,41,-24}, -{74,41,-23}, -{74,41,-22}, -{74,41,-21}, -{74,41,-20}, -{74,41,-19}, -{74,41,-18}, -{74,41,-17}, -{74,41,-16}, -{74,41,-15}, -{74,41,-14}, -{74,41,-13}, -{74,41,-12}, -{74,41,-11}, -{74,41,-10}, -{74,41,-9}, -{74,41,-8}, -{74,41,-7}, -{74,41,-6}, -{74,41,-5}, -{74,41,-4}, -{74,41,-3}, -{74,41,-2}, -{74,41,-1}, -{74,41,0}, -{74,41,1}, -{74,41,2}, -{74,41,3}, -{74,41,4}, -{74,41,5}, -{74,41,6}, -{74,42,-39}, -{74,42,-38}, -{74,42,-37}, -{74,42,-36}, -{74,42,-35}, -{74,42,-34}, -{74,42,-33}, -{74,42,-32}, -{74,42,-31}, -{74,42,-30}, -{74,42,-29}, -{74,42,-28}, -{74,42,-27}, -{74,42,-26}, -{74,42,-25}, -{74,42,-24}, -{74,42,-23}, -{74,42,-22}, -{74,42,-21}, -{74,42,-20}, -{74,42,-19}, -{74,42,-18}, -{74,42,-17}, -{74,42,-16}, -{74,42,-15}, -{74,42,-14}, -{74,42,-13}, -{74,42,-12}, -{74,42,-11}, -{74,42,-10}, -{74,42,-9}, -{74,42,-8}, -{74,42,-7}, -{74,42,-6}, -{74,42,-5}, -{74,42,-4}, -{74,42,-3}, -{74,42,-2}, -{74,42,-1}, -{74,42,0}, -{74,42,1}, -{74,42,2}, -{74,42,3}, -{74,43,-39}, -{74,43,-38}, -{74,43,-37}, -{74,43,-36}, -{74,43,-35}, -{74,43,-34}, -{74,43,-33}, -{74,43,-32}, -{74,43,-31}, -{74,43,-30}, -{74,43,-29}, -{74,43,-28}, -{74,43,-27}, -{74,43,-26}, -{74,43,-25}, -{74,43,-24}, -{74,43,-23}, -{74,43,-22}, -{74,43,-21}, -{74,43,-20}, -{74,43,-19}, -{74,43,-18}, -{74,43,-17}, -{74,43,-16}, -{74,43,-15}, -{74,43,-14}, -{74,43,-13}, -{74,43,-12}, -{74,43,-11}, -{74,43,-10}, -{74,43,-9}, -{74,43,-8}, -{74,43,-7}, -{74,43,-6}, -{74,43,-5}, -{74,43,-4}, -{74,43,-3}, -{74,43,-2}, -{74,43,-1}, -{74,43,0}, -{74,44,-39}, -{74,44,-38}, -{74,44,-37}, -{74,44,-36}, -{74,44,-35}, -{74,44,-34}, -{74,44,-33}, -{74,44,-32}, -{74,44,-31}, -{74,44,-30}, -{74,44,-29}, -{74,44,-28}, -{74,44,-27}, -{74,44,-26}, -{74,44,-25}, -{74,44,-24}, -{74,44,-23}, -{74,44,-22}, -{74,44,-21}, -{74,44,-20}, -{74,44,-19}, -{74,44,-18}, -{74,44,-17}, -{74,44,-16}, -{74,44,-15}, -{74,44,-14}, -{74,44,-13}, -{74,44,-12}, -{74,44,-11}, -{74,44,-10}, -{74,44,-9}, -{74,44,-8}, -{74,44,-7}, -{74,44,-6}, -{74,44,-5}, -{74,44,-4}, -{74,44,-3}, -{74,45,-39}, -{74,45,-38}, -{74,45,-37}, -{74,45,-36}, -{74,45,-35}, -{74,45,-34}, -{74,45,-33}, -{74,45,-32}, -{74,45,-31}, -{74,45,-30}, -{74,45,-29}, -{74,45,-28}, -{74,45,-27}, -{74,45,-26}, -{74,45,-25}, -{74,45,-24}, -{74,45,-23}, -{74,45,-22}, -{74,45,-21}, -{74,45,-20}, -{74,45,-19}, -{74,45,-18}, -{74,45,-17}, -{74,45,-16}, -{74,45,-15}, -{74,45,-14}, -{74,45,-13}, -{74,45,-12}, -{74,45,-11}, -{74,45,-10}, -{74,45,-9}, -{74,45,-8}, -{74,45,-7}, -{74,45,-6}, -{74,45,-5}, -{74,46,-39}, -{74,46,-38}, -{74,46,-37}, -{74,46,-36}, -{74,46,-35}, -{74,46,-34}, -{74,46,-33}, -{74,46,-32}, -{74,46,-31}, -{74,46,-30}, -{74,46,-29}, -{74,46,-28}, -{74,46,-27}, -{74,46,-26}, -{74,46,-25}, -{74,46,-24}, -{74,46,-23}, -{74,46,-22}, -{74,46,-21}, -{74,46,-20}, -{74,46,-19}, -{74,46,-18}, -{74,46,-17}, -{74,46,-16}, -{74,46,-15}, -{74,46,-14}, -{74,46,-13}, -{74,46,-12}, -{74,46,-11}, -{74,46,-10}, -{74,46,-9}, -{74,46,-8}, -{74,47,-39}, -{74,47,-38}, -{74,47,-37}, -{74,47,-36}, -{74,47,-35}, -{74,47,-34}, -{74,47,-33}, -{74,47,-32}, -{74,47,-31}, -{74,47,-30}, -{74,47,-29}, -{74,47,-28}, -{74,47,-27}, -{74,47,-26}, -{74,47,-25}, -{74,47,-24}, -{74,47,-23}, -{74,47,-22}, -{74,47,-21}, -{74,47,-20}, -{74,47,-19}, -{74,47,-18}, -{74,47,-17}, -{74,47,-16}, -{74,47,-15}, -{74,47,-14}, -{74,47,-13}, -{74,47,-12}, -{74,47,-11}, -{74,48,-39}, -{74,48,-38}, -{74,48,-37}, -{74,48,-36}, -{74,48,-35}, -{74,48,-34}, -{74,48,-33}, -{74,48,-32}, -{74,48,-31}, -{74,48,-30}, -{74,48,-29}, -{74,48,-28}, -{74,48,-27}, -{74,48,-26}, -{74,48,-25}, -{74,48,-24}, -{74,48,-23}, -{74,48,-22}, -{74,48,-21}, -{74,48,-20}, -{74,48,-19}, -{74,48,-18}, -{74,48,-17}, -{74,48,-16}, -{74,48,-15}, -{74,48,-14}, -{74,48,-13}, -{74,49,-39}, -{74,49,-38}, -{74,49,-37}, -{74,49,-36}, -{74,49,-35}, -{74,49,-34}, -{74,49,-33}, -{74,49,-32}, -{74,49,-31}, -{74,49,-30}, -{74,49,-29}, -{74,49,-28}, -{74,49,-27}, -{74,49,-26}, -{74,49,-25}, -{74,49,-24}, -{74,49,-23}, -{74,49,-22}, -{74,49,-21}, -{74,49,-20}, -{74,49,-19}, -{74,49,-18}, -{74,49,-17}, -{74,49,-16}, -{74,50,-39}, -{74,50,-38}, -{74,50,-37}, -{74,50,-36}, -{74,50,-35}, -{74,50,-34}, -{74,50,-33}, -{74,50,-32}, -{74,50,-31}, -{74,50,-30}, -{74,50,-29}, -{74,50,-28}, -{74,50,-27}, -{74,50,-26}, -{74,50,-25}, -{74,50,-24}, -{74,50,-23}, -{74,50,-22}, -{74,50,-21}, -{74,50,-20}, -{74,50,-19}, -{74,50,-18}, -{74,51,-39}, -{74,51,-38}, -{74,51,-37}, -{74,51,-36}, -{74,51,-35}, -{74,51,-34}, -{74,51,-33}, -{74,51,-32}, -{74,51,-31}, -{74,51,-30}, -{74,51,-29}, -{74,51,-28}, -{74,51,-27}, -{74,51,-26}, -{74,51,-25}, -{74,51,-24}, -{74,51,-23}, -{74,51,-22}, -{74,51,-21}, -{74,51,-20}, -{74,52,-39}, -{74,52,-38}, -{74,52,-37}, -{74,52,-36}, -{74,52,-35}, -{74,52,-34}, -{74,52,-33}, -{74,52,-32}, -{74,52,-31}, -{74,52,-30}, -{74,52,-29}, -{74,52,-28}, -{74,52,-27}, -{74,52,-26}, -{74,52,-25}, -{74,52,-24}, -{74,52,-23}, -{74,52,-22}, -{74,53,-39}, -{74,53,-38}, -{74,53,-37}, -{74,53,-36}, -{74,53,-35}, -{74,53,-34}, -{74,53,-33}, -{74,53,-32}, -{74,53,-31}, -{74,53,-30}, -{74,53,-29}, -{74,53,-28}, -{74,53,-27}, -{74,53,-26}, -{74,53,-25}, -{74,54,-39}, -{74,54,-38}, -{74,54,-37}, -{74,54,-36}, -{74,54,-35}, -{74,54,-34}, -{74,54,-33}, -{74,54,-32}, -{74,54,-31}, -{74,54,-30}, -{74,54,-29}, -{74,54,-28}, -{74,54,-27}, -{74,55,-39}, -{74,55,-38}, -{74,55,-37}, -{74,55,-36}, -{74,55,-35}, -{74,55,-34}, -{74,55,-33}, -{74,55,-32}, -{74,55,-31}, -{74,55,-30}, -{74,55,-29}, -{74,56,-39}, -{74,56,-38}, -{74,56,-37}, -{74,56,-36}, -{74,56,-35}, -{74,56,-34}, -{74,56,-33}, -{74,56,-32}, -{74,56,-31}, -{74,57,-39}, -{74,57,-38}, -{74,57,-37}, -{74,57,-36}, -{74,57,-35}, -{74,57,-34}, -{74,57,-33}, -{74,58,-39}, -{74,58,-38}, -{74,58,-37}, -{74,58,-36}, -{74,58,-35}, -{74,59,-39}, -{74,59,-38}, -{74,59,-37}, -{74,60,-39}, -{75,-75,70}, -{75,-75,71}, -{75,-75,72}, -{75,-75,73}, -{75,-74,65}, -{75,-74,66}, -{75,-74,67}, -{75,-74,68}, -{75,-74,69}, -{75,-74,70}, -{75,-74,71}, -{75,-74,72}, -{75,-74,73}, -{75,-73,61}, -{75,-73,62}, -{75,-73,63}, -{75,-73,64}, -{75,-73,65}, -{75,-73,66}, -{75,-73,67}, -{75,-73,68}, -{75,-73,69}, -{75,-73,70}, -{75,-73,71}, -{75,-73,72}, -{75,-73,73}, -{75,-72,57}, -{75,-72,58}, -{75,-72,59}, -{75,-72,60}, -{75,-72,61}, -{75,-72,62}, -{75,-72,63}, -{75,-72,64}, -{75,-72,65}, -{75,-72,66}, -{75,-72,67}, -{75,-72,68}, -{75,-72,69}, -{75,-72,70}, -{75,-72,71}, -{75,-72,72}, -{75,-72,73}, -{75,-71,54}, -{75,-71,55}, -{75,-71,56}, -{75,-71,57}, -{75,-71,58}, -{75,-71,59}, -{75,-71,60}, -{75,-71,61}, -{75,-71,62}, -{75,-71,63}, -{75,-71,64}, -{75,-71,65}, -{75,-71,66}, -{75,-71,67}, -{75,-71,68}, -{75,-71,69}, -{75,-71,70}, -{75,-71,71}, -{75,-71,72}, -{75,-71,73}, -{75,-70,50}, -{75,-70,51}, -{75,-70,52}, -{75,-70,53}, -{75,-70,54}, -{75,-70,55}, -{75,-70,56}, -{75,-70,57}, -{75,-70,58}, -{75,-70,59}, -{75,-70,60}, -{75,-70,61}, -{75,-70,62}, -{75,-70,63}, -{75,-70,64}, -{75,-70,65}, -{75,-70,66}, -{75,-70,67}, -{75,-70,68}, -{75,-70,69}, -{75,-70,70}, -{75,-70,71}, -{75,-70,72}, -{75,-70,73}, -{75,-69,47}, -{75,-69,48}, -{75,-69,49}, -{75,-69,50}, -{75,-69,51}, -{75,-69,52}, -{75,-69,53}, -{75,-69,54}, -{75,-69,55}, -{75,-69,56}, -{75,-69,57}, -{75,-69,58}, -{75,-69,59}, -{75,-69,60}, -{75,-69,61}, -{75,-69,62}, -{75,-69,63}, -{75,-69,64}, -{75,-69,65}, -{75,-69,66}, -{75,-69,67}, -{75,-69,68}, -{75,-69,69}, -{75,-69,70}, -{75,-69,71}, -{75,-69,72}, -{75,-69,73}, -{75,-68,44}, -{75,-68,45}, -{75,-68,46}, -{75,-68,47}, -{75,-68,48}, -{75,-68,49}, -{75,-68,50}, -{75,-68,51}, -{75,-68,52}, -{75,-68,53}, -{75,-68,54}, -{75,-68,55}, -{75,-68,56}, -{75,-68,57}, -{75,-68,58}, -{75,-68,59}, -{75,-68,60}, -{75,-68,61}, -{75,-68,62}, -{75,-68,63}, -{75,-68,64}, -{75,-68,65}, -{75,-68,66}, -{75,-68,67}, -{75,-68,68}, -{75,-68,69}, -{75,-68,70}, -{75,-68,71}, -{75,-68,72}, -{75,-68,73}, -{75,-67,41}, -{75,-67,42}, -{75,-67,43}, -{75,-67,44}, -{75,-67,45}, -{75,-67,46}, -{75,-67,47}, -{75,-67,48}, -{75,-67,49}, -{75,-67,50}, -{75,-67,51}, -{75,-67,52}, -{75,-67,53}, -{75,-67,54}, -{75,-67,55}, -{75,-67,56}, -{75,-67,57}, -{75,-67,58}, -{75,-67,59}, -{75,-67,60}, -{75,-67,61}, -{75,-67,62}, -{75,-67,63}, -{75,-67,64}, -{75,-67,65}, -{75,-67,66}, -{75,-67,67}, -{75,-67,68}, -{75,-67,69}, -{75,-67,70}, -{75,-67,71}, -{75,-67,72}, -{75,-67,73}, -{75,-66,38}, -{75,-66,39}, -{75,-66,40}, -{75,-66,41}, -{75,-66,42}, -{75,-66,43}, -{75,-66,44}, -{75,-66,45}, -{75,-66,46}, -{75,-66,47}, -{75,-66,48}, -{75,-66,49}, -{75,-66,50}, -{75,-66,51}, -{75,-66,52}, -{75,-66,53}, -{75,-66,54}, -{75,-66,55}, -{75,-66,56}, -{75,-66,57}, -{75,-66,58}, -{75,-66,59}, -{75,-66,60}, -{75,-66,61}, -{75,-66,62}, -{75,-66,63}, -{75,-66,64}, -{75,-66,65}, -{75,-66,66}, -{75,-66,67}, -{75,-66,68}, -{75,-66,69}, -{75,-66,70}, -{75,-66,71}, -{75,-66,72}, -{75,-66,73}, -{75,-65,36}, -{75,-65,37}, -{75,-65,38}, -{75,-65,39}, -{75,-65,40}, -{75,-65,41}, -{75,-65,42}, -{75,-65,43}, -{75,-65,44}, -{75,-65,45}, -{75,-65,46}, -{75,-65,47}, -{75,-65,48}, -{75,-65,49}, -{75,-65,50}, -{75,-65,51}, -{75,-65,52}, -{75,-65,53}, -{75,-65,54}, -{75,-65,55}, -{75,-65,56}, -{75,-65,57}, -{75,-65,58}, -{75,-65,59}, -{75,-65,60}, -{75,-65,61}, -{75,-65,62}, -{75,-65,63}, -{75,-65,64}, -{75,-65,65}, -{75,-65,66}, -{75,-65,67}, -{75,-65,68}, -{75,-65,69}, -{75,-65,70}, -{75,-65,71}, -{75,-65,72}, -{75,-65,73}, -{75,-64,33}, -{75,-64,34}, -{75,-64,35}, -{75,-64,36}, -{75,-64,37}, -{75,-64,38}, -{75,-64,39}, -{75,-64,40}, -{75,-64,41}, -{75,-64,42}, -{75,-64,43}, -{75,-64,44}, -{75,-64,45}, -{75,-64,46}, -{75,-64,47}, -{75,-64,48}, -{75,-64,49}, -{75,-64,50}, -{75,-64,51}, -{75,-64,52}, -{75,-64,53}, -{75,-64,54}, -{75,-64,55}, -{75,-64,56}, -{75,-64,57}, -{75,-64,58}, -{75,-64,59}, -{75,-64,60}, -{75,-64,61}, -{75,-64,62}, -{75,-64,63}, -{75,-64,64}, -{75,-64,65}, -{75,-64,66}, -{75,-64,67}, -{75,-64,68}, -{75,-64,69}, -{75,-64,70}, -{75,-64,71}, -{75,-64,72}, -{75,-64,73}, -{75,-63,30}, -{75,-63,31}, -{75,-63,32}, -{75,-63,33}, -{75,-63,34}, -{75,-63,35}, -{75,-63,36}, -{75,-63,37}, -{75,-63,38}, -{75,-63,39}, -{75,-63,40}, -{75,-63,41}, -{75,-63,42}, -{75,-63,43}, -{75,-63,44}, -{75,-63,45}, -{75,-63,46}, -{75,-63,47}, -{75,-63,48}, -{75,-63,49}, -{75,-63,50}, -{75,-63,51}, -{75,-63,52}, -{75,-63,53}, -{75,-63,54}, -{75,-63,55}, -{75,-63,56}, -{75,-63,57}, -{75,-63,58}, -{75,-63,59}, -{75,-63,60}, -{75,-63,61}, -{75,-63,62}, -{75,-63,63}, -{75,-63,64}, -{75,-63,65}, -{75,-63,66}, -{75,-63,67}, -{75,-63,68}, -{75,-63,69}, -{75,-63,70}, -{75,-63,71}, -{75,-63,72}, -{75,-63,73}, -{75,-62,28}, -{75,-62,29}, -{75,-62,30}, -{75,-62,31}, -{75,-62,32}, -{75,-62,33}, -{75,-62,34}, -{75,-62,35}, -{75,-62,36}, -{75,-62,37}, -{75,-62,38}, -{75,-62,39}, -{75,-62,40}, -{75,-62,41}, -{75,-62,42}, -{75,-62,43}, -{75,-62,44}, -{75,-62,45}, -{75,-62,46}, -{75,-62,47}, -{75,-62,48}, -{75,-62,49}, -{75,-62,50}, -{75,-62,51}, -{75,-62,52}, -{75,-62,53}, -{75,-62,54}, -{75,-62,55}, -{75,-62,56}, -{75,-62,57}, -{75,-62,58}, -{75,-62,59}, -{75,-62,60}, -{75,-62,61}, -{75,-62,62}, -{75,-62,63}, -{75,-62,64}, -{75,-62,65}, -{75,-62,66}, -{75,-62,67}, -{75,-62,68}, -{75,-62,69}, -{75,-62,70}, -{75,-62,71}, -{75,-62,72}, -{75,-62,73}, -{75,-61,26}, -{75,-61,27}, -{75,-61,28}, -{75,-61,29}, -{75,-61,30}, -{75,-61,31}, -{75,-61,32}, -{75,-61,33}, -{75,-61,34}, -{75,-61,35}, -{75,-61,36}, -{75,-61,37}, -{75,-61,38}, -{75,-61,39}, -{75,-61,40}, -{75,-61,41}, -{75,-61,42}, -{75,-61,43}, -{75,-61,44}, -{75,-61,45}, -{75,-61,46}, -{75,-61,47}, -{75,-61,48}, -{75,-61,49}, -{75,-61,50}, -{75,-61,51}, -{75,-61,52}, -{75,-61,53}, -{75,-61,54}, -{75,-61,55}, -{75,-61,56}, -{75,-61,57}, -{75,-61,58}, -{75,-61,59}, -{75,-61,60}, -{75,-61,61}, -{75,-61,62}, -{75,-61,63}, -{75,-61,64}, -{75,-61,65}, -{75,-61,66}, -{75,-61,67}, -{75,-61,68}, -{75,-61,69}, -{75,-61,70}, -{75,-61,71}, -{75,-61,72}, -{75,-61,73}, -{75,-60,23}, -{75,-60,24}, -{75,-60,25}, -{75,-60,26}, -{75,-60,27}, -{75,-60,28}, -{75,-60,29}, -{75,-60,30}, -{75,-60,31}, -{75,-60,32}, -{75,-60,33}, -{75,-60,34}, -{75,-60,35}, -{75,-60,36}, -{75,-60,37}, -{75,-60,38}, -{75,-60,39}, -{75,-60,40}, -{75,-60,41}, -{75,-60,42}, -{75,-60,43}, -{75,-60,44}, -{75,-60,45}, -{75,-60,46}, -{75,-60,47}, -{75,-60,48}, -{75,-60,49}, -{75,-60,50}, -{75,-60,51}, -{75,-60,52}, -{75,-60,53}, -{75,-60,54}, -{75,-60,55}, -{75,-60,56}, -{75,-60,57}, -{75,-60,58}, -{75,-60,59}, -{75,-60,60}, -{75,-60,61}, -{75,-60,62}, -{75,-60,63}, -{75,-60,64}, -{75,-60,65}, -{75,-60,66}, -{75,-60,67}, -{75,-60,68}, -{75,-60,69}, -{75,-60,70}, -{75,-60,71}, -{75,-60,72}, -{75,-60,73}, -{75,-59,21}, -{75,-59,22}, -{75,-59,23}, -{75,-59,24}, -{75,-59,25}, -{75,-59,26}, -{75,-59,27}, -{75,-59,28}, -{75,-59,29}, -{75,-59,30}, -{75,-59,31}, -{75,-59,32}, -{75,-59,33}, -{75,-59,34}, -{75,-59,35}, -{75,-59,36}, -{75,-59,37}, -{75,-59,38}, -{75,-59,39}, -{75,-59,40}, -{75,-59,41}, -{75,-59,42}, -{75,-59,43}, -{75,-59,44}, -{75,-59,45}, -{75,-59,46}, -{75,-59,47}, -{75,-59,48}, -{75,-59,49}, -{75,-59,50}, -{75,-59,51}, -{75,-59,52}, -{75,-59,53}, -{75,-59,54}, -{75,-59,55}, -{75,-59,56}, -{75,-59,57}, -{75,-59,58}, -{75,-59,59}, -{75,-59,60}, -{75,-59,61}, -{75,-59,62}, -{75,-59,63}, -{75,-59,64}, -{75,-59,65}, -{75,-59,66}, -{75,-59,67}, -{75,-59,68}, -{75,-59,69}, -{75,-59,70}, -{75,-59,71}, -{75,-59,72}, -{75,-59,73}, -{75,-58,19}, -{75,-58,20}, -{75,-58,21}, -{75,-58,22}, -{75,-58,23}, -{75,-58,24}, -{75,-58,25}, -{75,-58,26}, -{75,-58,27}, -{75,-58,28}, -{75,-58,29}, -{75,-58,30}, -{75,-58,31}, -{75,-58,32}, -{75,-58,33}, -{75,-58,34}, -{75,-58,35}, -{75,-58,36}, -{75,-58,37}, -{75,-58,38}, -{75,-58,39}, -{75,-58,40}, -{75,-58,41}, -{75,-58,42}, -{75,-58,43}, -{75,-58,44}, -{75,-58,45}, -{75,-58,46}, -{75,-58,47}, -{75,-58,48}, -{75,-58,49}, -{75,-58,50}, -{75,-58,51}, -{75,-58,52}, -{75,-58,53}, -{75,-58,54}, -{75,-58,55}, -{75,-58,56}, -{75,-58,57}, -{75,-58,58}, -{75,-58,59}, -{75,-58,60}, -{75,-58,61}, -{75,-58,62}, -{75,-58,63}, -{75,-58,64}, -{75,-58,65}, -{75,-58,66}, -{75,-58,67}, -{75,-58,68}, -{75,-58,69}, -{75,-58,70}, -{75,-58,71}, -{75,-58,72}, -{75,-58,73}, -{75,-57,17}, -{75,-57,18}, -{75,-57,19}, -{75,-57,20}, -{75,-57,21}, -{75,-57,22}, -{75,-57,23}, -{75,-57,24}, -{75,-57,25}, -{75,-57,26}, -{75,-57,27}, -{75,-57,28}, -{75,-57,29}, -{75,-57,30}, -{75,-57,31}, -{75,-57,32}, -{75,-57,33}, -{75,-57,34}, -{75,-57,35}, -{75,-57,36}, -{75,-57,37}, -{75,-57,38}, -{75,-57,39}, -{75,-57,40}, -{75,-57,41}, -{75,-57,42}, -{75,-57,43}, -{75,-57,44}, -{75,-57,45}, -{75,-57,46}, -{75,-57,47}, -{75,-57,48}, -{75,-57,49}, -{75,-57,50}, -{75,-57,51}, -{75,-57,52}, -{75,-57,53}, -{75,-57,54}, -{75,-57,55}, -{75,-57,56}, -{75,-57,57}, -{75,-57,58}, -{75,-57,59}, -{75,-57,60}, -{75,-57,61}, -{75,-57,62}, -{75,-57,63}, -{75,-57,64}, -{75,-57,65}, -{75,-57,66}, -{75,-57,67}, -{75,-57,68}, -{75,-57,69}, -{75,-57,70}, -{75,-57,71}, -{75,-57,72}, -{75,-57,73}, -{75,-56,15}, -{75,-56,16}, -{75,-56,17}, -{75,-56,18}, -{75,-56,19}, -{75,-56,20}, -{75,-56,21}, -{75,-56,22}, -{75,-56,23}, -{75,-56,24}, -{75,-56,25}, -{75,-56,26}, -{75,-56,27}, -{75,-56,28}, -{75,-56,29}, -{75,-56,30}, -{75,-56,31}, -{75,-56,32}, -{75,-56,33}, -{75,-56,34}, -{75,-56,35}, -{75,-56,36}, -{75,-56,37}, -{75,-56,38}, -{75,-56,39}, -{75,-56,40}, -{75,-56,41}, -{75,-56,42}, -{75,-56,43}, -{75,-56,44}, -{75,-56,45}, -{75,-56,46}, -{75,-56,47}, -{75,-56,48}, -{75,-56,49}, -{75,-56,50}, -{75,-56,51}, -{75,-56,52}, -{75,-56,53}, -{75,-56,54}, -{75,-56,55}, -{75,-56,56}, -{75,-56,57}, -{75,-56,58}, -{75,-56,59}, -{75,-56,60}, -{75,-56,61}, -{75,-56,62}, -{75,-56,63}, -{75,-56,64}, -{75,-56,65}, -{75,-56,66}, -{75,-56,67}, -{75,-56,68}, -{75,-56,69}, -{75,-56,70}, -{75,-56,71}, -{75,-56,72}, -{75,-56,73}, -{75,-56,74}, -{75,-55,13}, -{75,-55,14}, -{75,-55,15}, -{75,-55,16}, -{75,-55,17}, -{75,-55,18}, -{75,-55,19}, -{75,-55,20}, -{75,-55,21}, -{75,-55,22}, -{75,-55,23}, -{75,-55,24}, -{75,-55,25}, -{75,-55,26}, -{75,-55,27}, -{75,-55,28}, -{75,-55,29}, -{75,-55,30}, -{75,-55,31}, -{75,-55,32}, -{75,-55,33}, -{75,-55,34}, -{75,-55,35}, -{75,-55,36}, -{75,-55,37}, -{75,-55,38}, -{75,-55,39}, -{75,-55,40}, -{75,-55,41}, -{75,-55,42}, -{75,-55,43}, -{75,-55,44}, -{75,-55,45}, -{75,-55,46}, -{75,-55,47}, -{75,-55,48}, -{75,-55,49}, -{75,-55,50}, -{75,-55,51}, -{75,-55,52}, -{75,-55,53}, -{75,-55,54}, -{75,-55,55}, -{75,-55,56}, -{75,-55,57}, -{75,-55,58}, -{75,-55,59}, -{75,-55,60}, -{75,-55,61}, -{75,-55,62}, -{75,-55,63}, -{75,-55,64}, -{75,-55,65}, -{75,-55,66}, -{75,-55,67}, -{75,-55,68}, -{75,-55,69}, -{75,-55,70}, -{75,-55,71}, -{75,-55,72}, -{75,-55,73}, -{75,-55,74}, -{75,-54,11}, -{75,-54,12}, -{75,-54,13}, -{75,-54,14}, -{75,-54,15}, -{75,-54,16}, -{75,-54,17}, -{75,-54,18}, -{75,-54,19}, -{75,-54,20}, -{75,-54,21}, -{75,-54,22}, -{75,-54,23}, -{75,-54,24}, -{75,-54,25}, -{75,-54,26}, -{75,-54,27}, -{75,-54,28}, -{75,-54,29}, -{75,-54,30}, -{75,-54,31}, -{75,-54,32}, -{75,-54,33}, -{75,-54,34}, -{75,-54,35}, -{75,-54,36}, -{75,-54,37}, -{75,-54,38}, -{75,-54,39}, -{75,-54,40}, -{75,-54,41}, -{75,-54,42}, -{75,-54,43}, -{75,-54,44}, -{75,-54,45}, -{75,-54,46}, -{75,-54,47}, -{75,-54,48}, -{75,-54,49}, -{75,-54,50}, -{75,-54,51}, -{75,-54,52}, -{75,-54,53}, -{75,-54,54}, -{75,-54,55}, -{75,-54,56}, -{75,-54,57}, -{75,-54,58}, -{75,-54,59}, -{75,-54,60}, -{75,-54,61}, -{75,-54,62}, -{75,-54,63}, -{75,-54,64}, -{75,-54,65}, -{75,-54,66}, -{75,-54,67}, -{75,-54,68}, -{75,-54,69}, -{75,-54,70}, -{75,-54,71}, -{75,-54,72}, -{75,-54,73}, -{75,-54,74}, -{75,-53,9}, -{75,-53,10}, -{75,-53,11}, -{75,-53,12}, -{75,-53,13}, -{75,-53,14}, -{75,-53,15}, -{75,-53,16}, -{75,-53,17}, -{75,-53,18}, -{75,-53,19}, -{75,-53,20}, -{75,-53,21}, -{75,-53,22}, -{75,-53,23}, -{75,-53,24}, -{75,-53,25}, -{75,-53,26}, -{75,-53,27}, -{75,-53,28}, -{75,-53,29}, -{75,-53,30}, -{75,-53,31}, -{75,-53,32}, -{75,-53,33}, -{75,-53,34}, -{75,-53,35}, -{75,-53,36}, -{75,-53,37}, -{75,-53,38}, -{75,-53,39}, -{75,-53,40}, -{75,-53,41}, -{75,-53,42}, -{75,-53,43}, -{75,-53,44}, -{75,-53,45}, -{75,-53,46}, -{75,-53,47}, -{75,-53,48}, -{75,-53,49}, -{75,-53,50}, -{75,-53,51}, -{75,-53,52}, -{75,-53,53}, -{75,-53,54}, -{75,-53,55}, -{75,-53,56}, -{75,-53,57}, -{75,-53,58}, -{75,-53,59}, -{75,-53,60}, -{75,-53,61}, -{75,-53,62}, -{75,-53,63}, -{75,-53,64}, -{75,-53,65}, -{75,-53,66}, -{75,-53,67}, -{75,-53,68}, -{75,-53,69}, -{75,-53,70}, -{75,-53,71}, -{75,-53,72}, -{75,-53,73}, -{75,-53,74}, -{75,-52,7}, -{75,-52,8}, -{75,-52,9}, -{75,-52,10}, -{75,-52,11}, -{75,-52,12}, -{75,-52,13}, -{75,-52,14}, -{75,-52,15}, -{75,-52,16}, -{75,-52,17}, -{75,-52,18}, -{75,-52,19}, -{75,-52,20}, -{75,-52,21}, -{75,-52,22}, -{75,-52,23}, -{75,-52,24}, -{75,-52,25}, -{75,-52,26}, -{75,-52,27}, -{75,-52,28}, -{75,-52,29}, -{75,-52,30}, -{75,-52,31}, -{75,-52,32}, -{75,-52,33}, -{75,-52,34}, -{75,-52,35}, -{75,-52,36}, -{75,-52,37}, -{75,-52,38}, -{75,-52,39}, -{75,-52,40}, -{75,-52,41}, -{75,-52,42}, -{75,-52,43}, -{75,-52,44}, -{75,-52,45}, -{75,-52,46}, -{75,-52,47}, -{75,-52,48}, -{75,-52,49}, -{75,-52,50}, -{75,-52,51}, -{75,-52,52}, -{75,-52,53}, -{75,-52,54}, -{75,-52,55}, -{75,-52,56}, -{75,-52,57}, -{75,-52,58}, -{75,-52,59}, -{75,-52,60}, -{75,-52,61}, -{75,-52,62}, -{75,-52,63}, -{75,-52,64}, -{75,-52,65}, -{75,-52,66}, -{75,-52,67}, -{75,-52,68}, -{75,-52,69}, -{75,-52,70}, -{75,-52,71}, -{75,-52,72}, -{75,-52,73}, -{75,-52,74}, -{75,-51,5}, -{75,-51,6}, -{75,-51,7}, -{75,-51,8}, -{75,-51,9}, -{75,-51,10}, -{75,-51,11}, -{75,-51,12}, -{75,-51,13}, -{75,-51,14}, -{75,-51,15}, -{75,-51,16}, -{75,-51,17}, -{75,-51,18}, -{75,-51,19}, -{75,-51,20}, -{75,-51,21}, -{75,-51,22}, -{75,-51,23}, -{75,-51,24}, -{75,-51,25}, -{75,-51,26}, -{75,-51,27}, -{75,-51,28}, -{75,-51,29}, -{75,-51,30}, -{75,-51,31}, -{75,-51,32}, -{75,-51,33}, -{75,-51,34}, -{75,-51,35}, -{75,-51,36}, -{75,-51,37}, -{75,-51,38}, -{75,-51,39}, -{75,-51,40}, -{75,-51,41}, -{75,-51,42}, -{75,-51,43}, -{75,-51,44}, -{75,-51,45}, -{75,-51,46}, -{75,-51,47}, -{75,-51,48}, -{75,-51,49}, -{75,-51,50}, -{75,-51,51}, -{75,-51,52}, -{75,-51,53}, -{75,-51,54}, -{75,-51,55}, -{75,-51,56}, -{75,-51,57}, -{75,-51,58}, -{75,-51,59}, -{75,-51,60}, -{75,-51,61}, -{75,-51,62}, -{75,-51,63}, -{75,-51,64}, -{75,-51,65}, -{75,-51,66}, -{75,-51,67}, -{75,-51,68}, -{75,-51,69}, -{75,-51,70}, -{75,-51,71}, -{75,-51,72}, -{75,-51,73}, -{75,-51,74}, -{75,-50,4}, -{75,-50,5}, -{75,-50,6}, -{75,-50,7}, -{75,-50,8}, -{75,-50,9}, -{75,-50,10}, -{75,-50,11}, -{75,-50,12}, -{75,-50,13}, -{75,-50,14}, -{75,-50,15}, -{75,-50,16}, -{75,-50,17}, -{75,-50,18}, -{75,-50,19}, -{75,-50,20}, -{75,-50,21}, -{75,-50,22}, -{75,-50,23}, -{75,-50,24}, -{75,-50,25}, -{75,-50,26}, -{75,-50,27}, -{75,-50,28}, -{75,-50,29}, -{75,-50,30}, -{75,-50,31}, -{75,-50,32}, -{75,-50,33}, -{75,-50,34}, -{75,-50,35}, -{75,-50,36}, -{75,-50,37}, -{75,-50,38}, -{75,-50,39}, -{75,-50,40}, -{75,-50,41}, -{75,-50,42}, -{75,-50,43}, -{75,-50,44}, -{75,-50,45}, -{75,-50,46}, -{75,-50,47}, -{75,-50,48}, -{75,-50,49}, -{75,-50,50}, -{75,-50,51}, -{75,-50,52}, -{75,-50,53}, -{75,-50,54}, -{75,-50,55}, -{75,-50,56}, -{75,-50,57}, -{75,-50,58}, -{75,-50,59}, -{75,-50,60}, -{75,-50,61}, -{75,-50,62}, -{75,-50,63}, -{75,-50,64}, -{75,-50,65}, -{75,-50,66}, -{75,-50,67}, -{75,-50,68}, -{75,-50,69}, -{75,-50,70}, -{75,-50,71}, -{75,-50,72}, -{75,-50,73}, -{75,-50,74}, -{75,-49,2}, -{75,-49,3}, -{75,-49,4}, -{75,-49,5}, -{75,-49,6}, -{75,-49,7}, -{75,-49,8}, -{75,-49,9}, -{75,-49,10}, -{75,-49,11}, -{75,-49,12}, -{75,-49,13}, -{75,-49,14}, -{75,-49,15}, -{75,-49,16}, -{75,-49,17}, -{75,-49,18}, -{75,-49,19}, -{75,-49,20}, -{75,-49,21}, -{75,-49,22}, -{75,-49,23}, -{75,-49,24}, -{75,-49,25}, -{75,-49,26}, -{75,-49,27}, -{75,-49,28}, -{75,-49,29}, -{75,-49,30}, -{75,-49,31}, -{75,-49,32}, -{75,-49,33}, -{75,-49,34}, -{75,-49,35}, -{75,-49,36}, -{75,-49,37}, -{75,-49,38}, -{75,-49,39}, -{75,-49,40}, -{75,-49,41}, -{75,-49,42}, -{75,-49,43}, -{75,-49,44}, -{75,-49,45}, -{75,-49,46}, -{75,-49,47}, -{75,-49,48}, -{75,-49,49}, -{75,-49,50}, -{75,-49,51}, -{75,-49,52}, -{75,-49,53}, -{75,-49,54}, -{75,-49,55}, -{75,-49,56}, -{75,-49,57}, -{75,-49,58}, -{75,-49,59}, -{75,-49,60}, -{75,-49,61}, -{75,-49,62}, -{75,-49,63}, -{75,-49,64}, -{75,-49,65}, -{75,-49,66}, -{75,-49,67}, -{75,-49,68}, -{75,-49,69}, -{75,-49,70}, -{75,-49,71}, -{75,-49,72}, -{75,-49,73}, -{75,-49,74}, -{75,-48,0}, -{75,-48,1}, -{75,-48,2}, -{75,-48,3}, -{75,-48,4}, -{75,-48,5}, -{75,-48,6}, -{75,-48,7}, -{75,-48,8}, -{75,-48,9}, -{75,-48,10}, -{75,-48,11}, -{75,-48,12}, -{75,-48,13}, -{75,-48,14}, -{75,-48,15}, -{75,-48,16}, -{75,-48,17}, -{75,-48,18}, -{75,-48,19}, -{75,-48,20}, -{75,-48,21}, -{75,-48,22}, -{75,-48,23}, -{75,-48,24}, -{75,-48,25}, -{75,-48,26}, -{75,-48,27}, -{75,-48,28}, -{75,-48,29}, -{75,-48,30}, -{75,-48,31}, -{75,-48,32}, -{75,-48,33}, -{75,-48,34}, -{75,-48,35}, -{75,-48,36}, -{75,-48,37}, -{75,-48,38}, -{75,-48,39}, -{75,-48,40}, -{75,-48,41}, -{75,-48,42}, -{75,-48,43}, -{75,-48,44}, -{75,-48,45}, -{75,-48,46}, -{75,-48,47}, -{75,-48,48}, -{75,-48,49}, -{75,-48,50}, -{75,-48,51}, -{75,-48,52}, -{75,-48,53}, -{75,-48,54}, -{75,-48,55}, -{75,-48,56}, -{75,-48,57}, -{75,-48,58}, -{75,-48,59}, -{75,-48,60}, -{75,-48,61}, -{75,-48,62}, -{75,-48,63}, -{75,-48,64}, -{75,-48,65}, -{75,-48,66}, -{75,-48,67}, -{75,-48,68}, -{75,-48,69}, -{75,-48,70}, -{75,-48,71}, -{75,-48,72}, -{75,-48,73}, -{75,-48,74}, -{75,-47,-2}, -{75,-47,-1}, -{75,-47,0}, -{75,-47,1}, -{75,-47,2}, -{75,-47,3}, -{75,-47,4}, -{75,-47,5}, -{75,-47,6}, -{75,-47,7}, -{75,-47,8}, -{75,-47,9}, -{75,-47,10}, -{75,-47,11}, -{75,-47,12}, -{75,-47,13}, -{75,-47,14}, -{75,-47,15}, -{75,-47,16}, -{75,-47,17}, -{75,-47,18}, -{75,-47,19}, -{75,-47,20}, -{75,-47,21}, -{75,-47,22}, -{75,-47,23}, -{75,-47,24}, -{75,-47,25}, -{75,-47,26}, -{75,-47,27}, -{75,-47,28}, -{75,-47,29}, -{75,-47,30}, -{75,-47,31}, -{75,-47,32}, -{75,-47,33}, -{75,-47,34}, -{75,-47,35}, -{75,-47,36}, -{75,-47,37}, -{75,-47,38}, -{75,-47,39}, -{75,-47,40}, -{75,-47,41}, -{75,-47,42}, -{75,-47,43}, -{75,-47,44}, -{75,-47,45}, -{75,-47,46}, -{75,-47,47}, -{75,-47,48}, -{75,-47,49}, -{75,-47,50}, -{75,-47,51}, -{75,-47,52}, -{75,-47,53}, -{75,-47,54}, -{75,-47,55}, -{75,-47,56}, -{75,-47,57}, -{75,-47,58}, -{75,-47,59}, -{75,-47,60}, -{75,-47,61}, -{75,-47,62}, -{75,-47,63}, -{75,-47,64}, -{75,-47,65}, -{75,-47,66}, -{75,-47,67}, -{75,-47,68}, -{75,-47,69}, -{75,-47,70}, -{75,-47,71}, -{75,-47,72}, -{75,-47,73}, -{75,-47,74}, -{75,-46,-3}, -{75,-46,-2}, -{75,-46,-1}, -{75,-46,0}, -{75,-46,1}, -{75,-46,2}, -{75,-46,3}, -{75,-46,4}, -{75,-46,5}, -{75,-46,6}, -{75,-46,7}, -{75,-46,8}, -{75,-46,9}, -{75,-46,10}, -{75,-46,11}, -{75,-46,12}, -{75,-46,13}, -{75,-46,14}, -{75,-46,15}, -{75,-46,16}, -{75,-46,17}, -{75,-46,18}, -{75,-46,19}, -{75,-46,20}, -{75,-46,21}, -{75,-46,22}, -{75,-46,23}, -{75,-46,24}, -{75,-46,25}, -{75,-46,26}, -{75,-46,27}, -{75,-46,28}, -{75,-46,29}, -{75,-46,30}, -{75,-46,31}, -{75,-46,32}, -{75,-46,33}, -{75,-46,34}, -{75,-46,35}, -{75,-46,36}, -{75,-46,37}, -{75,-46,38}, -{75,-46,39}, -{75,-46,40}, -{75,-46,41}, -{75,-46,42}, -{75,-46,43}, -{75,-46,44}, -{75,-46,45}, -{75,-46,46}, -{75,-46,47}, -{75,-46,48}, -{75,-46,49}, -{75,-46,50}, -{75,-46,51}, -{75,-46,52}, -{75,-46,53}, -{75,-46,54}, -{75,-46,55}, -{75,-46,56}, -{75,-46,57}, -{75,-46,58}, -{75,-46,59}, -{75,-46,60}, -{75,-46,61}, -{75,-46,62}, -{75,-46,63}, -{75,-46,64}, -{75,-46,65}, -{75,-46,66}, -{75,-46,67}, -{75,-46,68}, -{75,-46,69}, -{75,-46,70}, -{75,-46,71}, -{75,-46,72}, -{75,-46,73}, -{75,-46,74}, -{75,-45,-5}, -{75,-45,-4}, -{75,-45,-3}, -{75,-45,-2}, -{75,-45,-1}, -{75,-45,0}, -{75,-45,1}, -{75,-45,2}, -{75,-45,3}, -{75,-45,4}, -{75,-45,5}, -{75,-45,6}, -{75,-45,7}, -{75,-45,8}, -{75,-45,9}, -{75,-45,10}, -{75,-45,11}, -{75,-45,12}, -{75,-45,13}, -{75,-45,14}, -{75,-45,15}, -{75,-45,16}, -{75,-45,17}, -{75,-45,18}, -{75,-45,19}, -{75,-45,20}, -{75,-45,21}, -{75,-45,22}, -{75,-45,23}, -{75,-45,24}, -{75,-45,25}, -{75,-45,26}, -{75,-45,27}, -{75,-45,28}, -{75,-45,29}, -{75,-45,30}, -{75,-45,31}, -{75,-45,32}, -{75,-45,33}, -{75,-45,34}, -{75,-45,35}, -{75,-45,36}, -{75,-45,37}, -{75,-45,38}, -{75,-45,39}, -{75,-45,40}, -{75,-45,41}, -{75,-45,42}, -{75,-45,43}, -{75,-45,44}, -{75,-45,45}, -{75,-45,46}, -{75,-45,47}, -{75,-45,48}, -{75,-45,49}, -{75,-45,50}, -{75,-45,51}, -{75,-45,52}, -{75,-45,53}, -{75,-45,54}, -{75,-45,55}, -{75,-45,56}, -{75,-45,57}, -{75,-45,58}, -{75,-45,59}, -{75,-45,60}, -{75,-45,61}, -{75,-45,62}, -{75,-45,63}, -{75,-45,64}, -{75,-45,65}, -{75,-45,66}, -{75,-45,67}, -{75,-45,68}, -{75,-45,69}, -{75,-45,70}, -{75,-45,71}, -{75,-45,72}, -{75,-45,73}, -{75,-45,74}, -{75,-44,-7}, -{75,-44,-6}, -{75,-44,-5}, -{75,-44,-4}, -{75,-44,-3}, -{75,-44,-2}, -{75,-44,-1}, -{75,-44,0}, -{75,-44,1}, -{75,-44,2}, -{75,-44,3}, -{75,-44,4}, -{75,-44,5}, -{75,-44,6}, -{75,-44,7}, -{75,-44,8}, -{75,-44,9}, -{75,-44,10}, -{75,-44,11}, -{75,-44,12}, -{75,-44,13}, -{75,-44,14}, -{75,-44,15}, -{75,-44,16}, -{75,-44,17}, -{75,-44,18}, -{75,-44,19}, -{75,-44,20}, -{75,-44,21}, -{75,-44,22}, -{75,-44,23}, -{75,-44,24}, -{75,-44,25}, -{75,-44,26}, -{75,-44,27}, -{75,-44,28}, -{75,-44,29}, -{75,-44,30}, -{75,-44,31}, -{75,-44,32}, -{75,-44,33}, -{75,-44,34}, -{75,-44,35}, -{75,-44,36}, -{75,-44,37}, -{75,-44,38}, -{75,-44,39}, -{75,-44,40}, -{75,-44,41}, -{75,-44,42}, -{75,-44,43}, -{75,-44,44}, -{75,-44,45}, -{75,-44,46}, -{75,-44,47}, -{75,-44,48}, -{75,-44,49}, -{75,-44,50}, -{75,-44,51}, -{75,-44,52}, -{75,-44,53}, -{75,-44,54}, -{75,-44,55}, -{75,-44,56}, -{75,-44,57}, -{75,-44,58}, -{75,-44,59}, -{75,-44,60}, -{75,-44,61}, -{75,-44,62}, -{75,-44,63}, -{75,-44,64}, -{75,-44,65}, -{75,-44,66}, -{75,-44,67}, -{75,-44,68}, -{75,-44,69}, -{75,-44,70}, -{75,-44,71}, -{75,-44,72}, -{75,-44,73}, -{75,-44,74}, -{75,-43,-8}, -{75,-43,-7}, -{75,-43,-6}, -{75,-43,-5}, -{75,-43,-4}, -{75,-43,-3}, -{75,-43,-2}, -{75,-43,-1}, -{75,-43,0}, -{75,-43,1}, -{75,-43,2}, -{75,-43,3}, -{75,-43,4}, -{75,-43,5}, -{75,-43,6}, -{75,-43,7}, -{75,-43,8}, -{75,-43,9}, -{75,-43,10}, -{75,-43,11}, -{75,-43,12}, -{75,-43,13}, -{75,-43,14}, -{75,-43,15}, -{75,-43,16}, -{75,-43,17}, -{75,-43,18}, -{75,-43,19}, -{75,-43,20}, -{75,-43,21}, -{75,-43,22}, -{75,-43,23}, -{75,-43,24}, -{75,-43,25}, -{75,-43,26}, -{75,-43,27}, -{75,-43,28}, -{75,-43,29}, -{75,-43,30}, -{75,-43,31}, -{75,-43,32}, -{75,-43,33}, -{75,-43,34}, -{75,-43,35}, -{75,-43,36}, -{75,-43,37}, -{75,-43,38}, -{75,-43,39}, -{75,-43,40}, -{75,-43,41}, -{75,-43,42}, -{75,-43,43}, -{75,-43,44}, -{75,-43,45}, -{75,-43,46}, -{75,-43,47}, -{75,-43,48}, -{75,-43,49}, -{75,-43,50}, -{75,-43,51}, -{75,-43,52}, -{75,-43,53}, -{75,-43,54}, -{75,-43,55}, -{75,-43,56}, -{75,-43,57}, -{75,-43,58}, -{75,-43,59}, -{75,-43,60}, -{75,-43,61}, -{75,-43,62}, -{75,-43,63}, -{75,-43,64}, -{75,-43,65}, -{75,-43,66}, -{75,-43,67}, -{75,-43,68}, -{75,-43,69}, -{75,-43,70}, -{75,-43,71}, -{75,-43,72}, -{75,-43,73}, -{75,-43,74}, -{75,-42,-10}, -{75,-42,-9}, -{75,-42,-8}, -{75,-42,-7}, -{75,-42,-6}, -{75,-42,-5}, -{75,-42,-4}, -{75,-42,-3}, -{75,-42,-2}, -{75,-42,-1}, -{75,-42,0}, -{75,-42,1}, -{75,-42,2}, -{75,-42,3}, -{75,-42,4}, -{75,-42,5}, -{75,-42,6}, -{75,-42,7}, -{75,-42,8}, -{75,-42,9}, -{75,-42,10}, -{75,-42,11}, -{75,-42,12}, -{75,-42,13}, -{75,-42,14}, -{75,-42,15}, -{75,-42,16}, -{75,-42,17}, -{75,-42,18}, -{75,-42,19}, -{75,-42,20}, -{75,-42,21}, -{75,-42,22}, -{75,-42,23}, -{75,-42,24}, -{75,-42,25}, -{75,-42,26}, -{75,-42,27}, -{75,-42,28}, -{75,-42,29}, -{75,-42,30}, -{75,-42,31}, -{75,-42,32}, -{75,-42,33}, -{75,-42,34}, -{75,-42,35}, -{75,-42,36}, -{75,-42,37}, -{75,-42,38}, -{75,-42,39}, -{75,-42,40}, -{75,-42,41}, -{75,-42,42}, -{75,-42,43}, -{75,-42,44}, -{75,-42,45}, -{75,-42,46}, -{75,-42,47}, -{75,-42,48}, -{75,-42,49}, -{75,-42,50}, -{75,-42,51}, -{75,-42,52}, -{75,-42,53}, -{75,-42,54}, -{75,-42,55}, -{75,-42,56}, -{75,-42,57}, -{75,-42,58}, -{75,-42,59}, -{75,-42,60}, -{75,-42,61}, -{75,-42,62}, -{75,-42,63}, -{75,-42,64}, -{75,-42,65}, -{75,-42,66}, -{75,-42,67}, -{75,-42,68}, -{75,-42,69}, -{75,-42,70}, -{75,-42,71}, -{75,-42,72}, -{75,-42,73}, -{75,-42,74}, -{75,-41,-12}, -{75,-41,-11}, -{75,-41,-10}, -{75,-41,-9}, -{75,-41,-8}, -{75,-41,-7}, -{75,-41,-6}, -{75,-41,-5}, -{75,-41,-4}, -{75,-41,-3}, -{75,-41,-2}, -{75,-41,-1}, -{75,-41,0}, -{75,-41,1}, -{75,-41,2}, -{75,-41,3}, -{75,-41,4}, -{75,-41,5}, -{75,-41,6}, -{75,-41,7}, -{75,-41,8}, -{75,-41,9}, -{75,-41,10}, -{75,-41,11}, -{75,-41,12}, -{75,-41,13}, -{75,-41,14}, -{75,-41,15}, -{75,-41,16}, -{75,-41,17}, -{75,-41,18}, -{75,-41,19}, -{75,-41,20}, -{75,-41,21}, -{75,-41,22}, -{75,-41,23}, -{75,-41,24}, -{75,-41,25}, -{75,-41,26}, -{75,-41,27}, -{75,-41,28}, -{75,-41,29}, -{75,-41,30}, -{75,-41,31}, -{75,-41,32}, -{75,-41,33}, -{75,-41,34}, -{75,-41,35}, -{75,-41,36}, -{75,-41,37}, -{75,-41,38}, -{75,-41,39}, -{75,-41,40}, -{75,-41,41}, -{75,-41,42}, -{75,-41,43}, -{75,-41,44}, -{75,-41,45}, -{75,-41,46}, -{75,-41,47}, -{75,-41,48}, -{75,-41,49}, -{75,-41,50}, -{75,-41,51}, -{75,-41,52}, -{75,-41,53}, -{75,-41,54}, -{75,-41,55}, -{75,-41,56}, -{75,-41,57}, -{75,-41,58}, -{75,-41,59}, -{75,-41,60}, -{75,-41,61}, -{75,-41,62}, -{75,-41,63}, -{75,-41,64}, -{75,-41,65}, -{75,-41,66}, -{75,-41,67}, -{75,-41,68}, -{75,-41,69}, -{75,-41,70}, -{75,-41,71}, -{75,-41,72}, -{75,-41,73}, -{75,-41,74}, -{75,-40,-13}, -{75,-40,-12}, -{75,-40,-11}, -{75,-40,-10}, -{75,-40,-9}, -{75,-40,-8}, -{75,-40,-7}, -{75,-40,-6}, -{75,-40,-5}, -{75,-40,-4}, -{75,-40,-3}, -{75,-40,-2}, -{75,-40,-1}, -{75,-40,0}, -{75,-40,1}, -{75,-40,2}, -{75,-40,3}, -{75,-40,4}, -{75,-40,5}, -{75,-40,6}, -{75,-40,7}, -{75,-40,8}, -{75,-40,9}, -{75,-40,10}, -{75,-40,11}, -{75,-40,12}, -{75,-40,13}, -{75,-40,14}, -{75,-40,15}, -{75,-40,16}, -{75,-40,17}, -{75,-40,18}, -{75,-40,19}, -{75,-40,20}, -{75,-40,21}, -{75,-40,22}, -{75,-40,23}, -{75,-40,24}, -{75,-40,25}, -{75,-40,26}, -{75,-40,27}, -{75,-40,28}, -{75,-40,29}, -{75,-40,30}, -{75,-40,31}, -{75,-40,32}, -{75,-40,33}, -{75,-40,34}, -{75,-40,35}, -{75,-40,36}, -{75,-40,37}, -{75,-40,38}, -{75,-40,39}, -{75,-40,40}, -{75,-40,41}, -{75,-40,42}, -{75,-40,43}, -{75,-40,44}, -{75,-40,45}, -{75,-40,46}, -{75,-40,47}, -{75,-40,48}, -{75,-40,49}, -{75,-40,50}, -{75,-40,51}, -{75,-40,52}, -{75,-40,53}, -{75,-40,54}, -{75,-40,55}, -{75,-40,56}, -{75,-40,57}, -{75,-40,58}, -{75,-40,59}, -{75,-40,60}, -{75,-40,61}, -{75,-40,62}, -{75,-40,63}, -{75,-40,64}, -{75,-40,65}, -{75,-40,66}, -{75,-40,67}, -{75,-40,68}, -{75,-40,69}, -{75,-40,70}, -{75,-40,71}, -{75,-40,72}, -{75,-40,73}, -{75,-40,74}, -{75,-39,-15}, -{75,-39,-14}, -{75,-39,-13}, -{75,-39,-12}, -{75,-39,-11}, -{75,-39,-10}, -{75,-39,-9}, -{75,-39,-8}, -{75,-39,-7}, -{75,-39,-6}, -{75,-39,-5}, -{75,-39,-4}, -{75,-39,-3}, -{75,-39,-2}, -{75,-39,-1}, -{75,-39,0}, -{75,-39,1}, -{75,-39,2}, -{75,-39,3}, -{75,-39,4}, -{75,-39,5}, -{75,-39,6}, -{75,-39,7}, -{75,-39,8}, -{75,-39,9}, -{75,-39,10}, -{75,-39,11}, -{75,-39,12}, -{75,-39,13}, -{75,-39,14}, -{75,-39,15}, -{75,-39,16}, -{75,-39,17}, -{75,-39,18}, -{75,-39,19}, -{75,-39,20}, -{75,-39,21}, -{75,-39,22}, -{75,-39,23}, -{75,-39,24}, -{75,-39,25}, -{75,-39,26}, -{75,-39,27}, -{75,-39,28}, -{75,-39,29}, -{75,-39,30}, -{75,-39,31}, -{75,-39,32}, -{75,-39,33}, -{75,-39,34}, -{75,-39,35}, -{75,-39,36}, -{75,-39,37}, -{75,-39,38}, -{75,-39,39}, -{75,-39,40}, -{75,-39,41}, -{75,-39,42}, -{75,-39,43}, -{75,-39,44}, -{75,-39,45}, -{75,-39,46}, -{75,-39,47}, -{75,-39,48}, -{75,-39,49}, -{75,-39,50}, -{75,-39,51}, -{75,-39,52}, -{75,-39,53}, -{75,-39,54}, -{75,-39,55}, -{75,-39,56}, -{75,-39,57}, -{75,-39,58}, -{75,-39,59}, -{75,-39,60}, -{75,-39,61}, -{75,-39,62}, -{75,-39,63}, -{75,-39,64}, -{75,-39,65}, -{75,-39,66}, -{75,-39,67}, -{75,-39,68}, -{75,-39,69}, -{75,-39,70}, -{75,-39,71}, -{75,-39,72}, -{75,-39,73}, -{75,-39,74}, -{75,-38,-16}, -{75,-38,-15}, -{75,-38,-14}, -{75,-38,-13}, -{75,-38,-12}, -{75,-38,-11}, -{75,-38,-10}, -{75,-38,-9}, -{75,-38,-8}, -{75,-38,-7}, -{75,-38,-6}, -{75,-38,-5}, -{75,-38,-4}, -{75,-38,-3}, -{75,-38,-2}, -{75,-38,-1}, -{75,-38,0}, -{75,-38,1}, -{75,-38,2}, -{75,-38,3}, -{75,-38,4}, -{75,-38,5}, -{75,-38,6}, -{75,-38,7}, -{75,-38,8}, -{75,-38,9}, -{75,-38,10}, -{75,-38,11}, -{75,-38,12}, -{75,-38,13}, -{75,-38,14}, -{75,-38,15}, -{75,-38,16}, -{75,-38,17}, -{75,-38,18}, -{75,-38,19}, -{75,-38,20}, -{75,-38,21}, -{75,-38,22}, -{75,-38,23}, -{75,-38,24}, -{75,-38,25}, -{75,-38,26}, -{75,-38,27}, -{75,-38,28}, -{75,-38,29}, -{75,-38,30}, -{75,-38,31}, -{75,-38,32}, -{75,-38,33}, -{75,-38,34}, -{75,-38,35}, -{75,-38,36}, -{75,-38,37}, -{75,-38,38}, -{75,-38,39}, -{75,-38,40}, -{75,-38,41}, -{75,-38,42}, -{75,-38,43}, -{75,-38,44}, -{75,-38,45}, -{75,-38,46}, -{75,-38,47}, -{75,-38,48}, -{75,-38,49}, -{75,-38,50}, -{75,-38,51}, -{75,-38,52}, -{75,-38,53}, -{75,-38,54}, -{75,-38,55}, -{75,-38,56}, -{75,-38,57}, -{75,-38,58}, -{75,-38,59}, -{75,-38,60}, -{75,-38,61}, -{75,-38,62}, -{75,-38,63}, -{75,-38,64}, -{75,-38,65}, -{75,-38,66}, -{75,-38,67}, -{75,-38,68}, -{75,-38,69}, -{75,-38,70}, -{75,-38,71}, -{75,-38,72}, -{75,-38,73}, -{75,-38,74}, -{75,-37,-18}, -{75,-37,-17}, -{75,-37,-16}, -{75,-37,-15}, -{75,-37,-14}, -{75,-37,-13}, -{75,-37,-12}, -{75,-37,-11}, -{75,-37,-10}, -{75,-37,-9}, -{75,-37,-8}, -{75,-37,-7}, -{75,-37,-6}, -{75,-37,-5}, -{75,-37,-4}, -{75,-37,-3}, -{75,-37,-2}, -{75,-37,-1}, -{75,-37,0}, -{75,-37,1}, -{75,-37,2}, -{75,-37,3}, -{75,-37,4}, -{75,-37,5}, -{75,-37,6}, -{75,-37,7}, -{75,-37,8}, -{75,-37,9}, -{75,-37,10}, -{75,-37,11}, -{75,-37,12}, -{75,-37,13}, -{75,-37,14}, -{75,-37,15}, -{75,-37,16}, -{75,-37,17}, -{75,-37,18}, -{75,-37,19}, -{75,-37,20}, -{75,-37,21}, -{75,-37,22}, -{75,-37,23}, -{75,-37,24}, -{75,-37,25}, -{75,-37,26}, -{75,-37,27}, -{75,-37,28}, -{75,-37,29}, -{75,-37,30}, -{75,-37,31}, -{75,-37,32}, -{75,-37,33}, -{75,-37,34}, -{75,-37,35}, -{75,-37,36}, -{75,-37,37}, -{75,-37,38}, -{75,-37,39}, -{75,-37,40}, -{75,-37,41}, -{75,-37,42}, -{75,-37,43}, -{75,-37,44}, -{75,-37,45}, -{75,-37,46}, -{75,-37,47}, -{75,-37,48}, -{75,-37,49}, -{75,-37,50}, -{75,-37,51}, -{75,-37,52}, -{75,-37,53}, -{75,-37,54}, -{75,-37,55}, -{75,-37,56}, -{75,-37,57}, -{75,-37,58}, -{75,-37,59}, -{75,-37,60}, -{75,-37,61}, -{75,-37,62}, -{75,-37,63}, -{75,-37,64}, -{75,-37,65}, -{75,-37,66}, -{75,-37,67}, -{75,-37,68}, -{75,-37,69}, -{75,-37,70}, -{75,-37,71}, -{75,-37,72}, -{75,-37,73}, -{75,-37,74}, -{75,-37,75}, -{75,-36,-19}, -{75,-36,-18}, -{75,-36,-17}, -{75,-36,-16}, -{75,-36,-15}, -{75,-36,-14}, -{75,-36,-13}, -{75,-36,-12}, -{75,-36,-11}, -{75,-36,-10}, -{75,-36,-9}, -{75,-36,-8}, -{75,-36,-7}, -{75,-36,-6}, -{75,-36,-5}, -{75,-36,-4}, -{75,-36,-3}, -{75,-36,-2}, -{75,-36,-1}, -{75,-36,0}, -{75,-36,1}, -{75,-36,2}, -{75,-36,3}, -{75,-36,4}, -{75,-36,5}, -{75,-36,6}, -{75,-36,7}, -{75,-36,8}, -{75,-36,9}, -{75,-36,10}, -{75,-36,11}, -{75,-36,12}, -{75,-36,13}, -{75,-36,14}, -{75,-36,15}, -{75,-36,16}, -{75,-36,17}, -{75,-36,18}, -{75,-36,19}, -{75,-36,20}, -{75,-36,21}, -{75,-36,22}, -{75,-36,23}, -{75,-36,24}, -{75,-36,25}, -{75,-36,26}, -{75,-36,27}, -{75,-36,28}, -{75,-36,29}, -{75,-36,30}, -{75,-36,31}, -{75,-36,32}, -{75,-36,33}, -{75,-36,34}, -{75,-36,35}, -{75,-36,36}, -{75,-36,37}, -{75,-36,38}, -{75,-36,39}, -{75,-36,40}, -{75,-36,41}, -{75,-36,42}, -{75,-36,43}, -{75,-36,44}, -{75,-36,45}, -{75,-36,46}, -{75,-36,47}, -{75,-36,48}, -{75,-36,49}, -{75,-36,50}, -{75,-36,51}, -{75,-36,52}, -{75,-36,53}, -{75,-36,54}, -{75,-36,55}, -{75,-36,56}, -{75,-36,57}, -{75,-36,58}, -{75,-36,59}, -{75,-36,60}, -{75,-36,61}, -{75,-36,62}, -{75,-36,63}, -{75,-36,64}, -{75,-36,65}, -{75,-36,66}, -{75,-36,67}, -{75,-36,68}, -{75,-36,69}, -{75,-36,70}, -{75,-36,71}, -{75,-36,72}, -{75,-36,73}, -{75,-36,74}, -{75,-36,75}, -{75,-35,-21}, -{75,-35,-20}, -{75,-35,-19}, -{75,-35,-18}, -{75,-35,-17}, -{75,-35,-16}, -{75,-35,-15}, -{75,-35,-14}, -{75,-35,-13}, -{75,-35,-12}, -{75,-35,-11}, -{75,-35,-10}, -{75,-35,-9}, -{75,-35,-8}, -{75,-35,-7}, -{75,-35,-6}, -{75,-35,-5}, -{75,-35,-4}, -{75,-35,-3}, -{75,-35,-2}, -{75,-35,-1}, -{75,-35,0}, -{75,-35,1}, -{75,-35,2}, -{75,-35,3}, -{75,-35,4}, -{75,-35,5}, -{75,-35,6}, -{75,-35,7}, -{75,-35,8}, -{75,-35,9}, -{75,-35,10}, -{75,-35,11}, -{75,-35,12}, -{75,-35,13}, -{75,-35,14}, -{75,-35,15}, -{75,-35,16}, -{75,-35,17}, -{75,-35,18}, -{75,-35,19}, -{75,-35,20}, -{75,-35,21}, -{75,-35,22}, -{75,-35,23}, -{75,-35,24}, -{75,-35,25}, -{75,-35,26}, -{75,-35,27}, -{75,-35,28}, -{75,-35,29}, -{75,-35,30}, -{75,-35,31}, -{75,-35,32}, -{75,-35,33}, -{75,-35,34}, -{75,-35,35}, -{75,-35,36}, -{75,-35,37}, -{75,-35,38}, -{75,-35,39}, -{75,-35,40}, -{75,-35,41}, -{75,-35,42}, -{75,-35,43}, -{75,-35,44}, -{75,-35,45}, -{75,-35,46}, -{75,-35,47}, -{75,-35,48}, -{75,-35,49}, -{75,-35,50}, -{75,-35,51}, -{75,-35,52}, -{75,-35,53}, -{75,-35,54}, -{75,-35,55}, -{75,-35,56}, -{75,-35,57}, -{75,-35,58}, -{75,-35,59}, -{75,-35,60}, -{75,-35,61}, -{75,-35,62}, -{75,-35,63}, -{75,-35,64}, -{75,-35,65}, -{75,-35,66}, -{75,-35,67}, -{75,-35,68}, -{75,-35,69}, -{75,-35,70}, -{75,-35,71}, -{75,-35,72}, -{75,-35,73}, -{75,-35,74}, -{75,-35,75}, -{75,-34,-22}, -{75,-34,-21}, -{75,-34,-20}, -{75,-34,-19}, -{75,-34,-18}, -{75,-34,-17}, -{75,-34,-16}, -{75,-34,-15}, -{75,-34,-14}, -{75,-34,-13}, -{75,-34,-12}, -{75,-34,-11}, -{75,-34,-10}, -{75,-34,-9}, -{75,-34,-8}, -{75,-34,-7}, -{75,-34,-6}, -{75,-34,-5}, -{75,-34,-4}, -{75,-34,-3}, -{75,-34,-2}, -{75,-34,-1}, -{75,-34,0}, -{75,-34,1}, -{75,-34,2}, -{75,-34,3}, -{75,-34,4}, -{75,-34,5}, -{75,-34,6}, -{75,-34,7}, -{75,-34,8}, -{75,-34,9}, -{75,-34,10}, -{75,-34,11}, -{75,-34,12}, -{75,-34,13}, -{75,-34,14}, -{75,-34,15}, -{75,-34,16}, -{75,-34,17}, -{75,-34,18}, -{75,-34,19}, -{75,-34,20}, -{75,-34,21}, -{75,-34,22}, -{75,-34,23}, -{75,-34,24}, -{75,-34,25}, -{75,-34,26}, -{75,-34,27}, -{75,-34,28}, -{75,-34,29}, -{75,-34,30}, -{75,-34,31}, -{75,-34,32}, -{75,-34,33}, -{75,-34,34}, -{75,-34,35}, -{75,-34,36}, -{75,-34,37}, -{75,-34,38}, -{75,-34,39}, -{75,-34,40}, -{75,-34,41}, -{75,-34,42}, -{75,-34,43}, -{75,-34,44}, -{75,-34,45}, -{75,-34,46}, -{75,-34,47}, -{75,-34,48}, -{75,-34,49}, -{75,-34,50}, -{75,-34,51}, -{75,-34,52}, -{75,-34,53}, -{75,-34,54}, -{75,-34,55}, -{75,-34,56}, -{75,-34,57}, -{75,-34,58}, -{75,-34,59}, -{75,-34,60}, -{75,-34,61}, -{75,-34,62}, -{75,-34,63}, -{75,-34,64}, -{75,-34,65}, -{75,-34,66}, -{75,-34,67}, -{75,-34,68}, -{75,-34,69}, -{75,-34,70}, -{75,-34,71}, -{75,-34,72}, -{75,-34,73}, -{75,-34,74}, -{75,-34,75}, -{75,-33,-24}, -{75,-33,-23}, -{75,-33,-22}, -{75,-33,-21}, -{75,-33,-20}, -{75,-33,-19}, -{75,-33,-18}, -{75,-33,-17}, -{75,-33,-16}, -{75,-33,-15}, -{75,-33,-14}, -{75,-33,-13}, -{75,-33,-12}, -{75,-33,-11}, -{75,-33,-10}, -{75,-33,-9}, -{75,-33,-8}, -{75,-33,-7}, -{75,-33,-6}, -{75,-33,-5}, -{75,-33,-4}, -{75,-33,-3}, -{75,-33,-2}, -{75,-33,-1}, -{75,-33,0}, -{75,-33,1}, -{75,-33,2}, -{75,-33,3}, -{75,-33,4}, -{75,-33,5}, -{75,-33,6}, -{75,-33,7}, -{75,-33,8}, -{75,-33,9}, -{75,-33,10}, -{75,-33,11}, -{75,-33,12}, -{75,-33,13}, -{75,-33,14}, -{75,-33,15}, -{75,-33,16}, -{75,-33,17}, -{75,-33,18}, -{75,-33,19}, -{75,-33,20}, -{75,-33,21}, -{75,-33,22}, -{75,-33,23}, -{75,-33,24}, -{75,-33,25}, -{75,-33,26}, -{75,-33,27}, -{75,-33,28}, -{75,-33,29}, -{75,-33,30}, -{75,-33,31}, -{75,-33,32}, -{75,-33,33}, -{75,-33,34}, -{75,-33,35}, -{75,-33,36}, -{75,-33,37}, -{75,-33,38}, -{75,-33,39}, -{75,-33,40}, -{75,-33,41}, -{75,-33,42}, -{75,-33,43}, -{75,-33,44}, -{75,-33,45}, -{75,-33,46}, -{75,-33,47}, -{75,-33,48}, -{75,-33,49}, -{75,-33,50}, -{75,-33,51}, -{75,-33,52}, -{75,-33,53}, -{75,-33,54}, -{75,-33,55}, -{75,-33,56}, -{75,-33,57}, -{75,-33,58}, -{75,-33,59}, -{75,-33,60}, -{75,-33,61}, -{75,-33,62}, -{75,-33,63}, -{75,-33,64}, -{75,-33,65}, -{75,-33,66}, -{75,-33,67}, -{75,-33,68}, -{75,-33,69}, -{75,-33,70}, -{75,-33,71}, -{75,-33,72}, -{75,-33,73}, -{75,-33,74}, -{75,-33,75}, -{75,-32,-25}, -{75,-32,-24}, -{75,-32,-23}, -{75,-32,-22}, -{75,-32,-21}, -{75,-32,-20}, -{75,-32,-19}, -{75,-32,-18}, -{75,-32,-17}, -{75,-32,-16}, -{75,-32,-15}, -{75,-32,-14}, -{75,-32,-13}, -{75,-32,-12}, -{75,-32,-11}, -{75,-32,-10}, -{75,-32,-9}, -{75,-32,-8}, -{75,-32,-7}, -{75,-32,-6}, -{75,-32,-5}, -{75,-32,-4}, -{75,-32,-3}, -{75,-32,-2}, -{75,-32,-1}, -{75,-32,0}, -{75,-32,1}, -{75,-32,2}, -{75,-32,3}, -{75,-32,4}, -{75,-32,5}, -{75,-32,6}, -{75,-32,7}, -{75,-32,8}, -{75,-32,9}, -{75,-32,10}, -{75,-32,11}, -{75,-32,12}, -{75,-32,13}, -{75,-32,14}, -{75,-32,15}, -{75,-32,16}, -{75,-32,17}, -{75,-32,18}, -{75,-32,19}, -{75,-32,20}, -{75,-32,21}, -{75,-32,22}, -{75,-32,23}, -{75,-32,24}, -{75,-32,25}, -{75,-32,26}, -{75,-32,27}, -{75,-32,28}, -{75,-32,29}, -{75,-32,30}, -{75,-32,31}, -{75,-32,32}, -{75,-32,33}, -{75,-32,34}, -{75,-32,35}, -{75,-32,36}, -{75,-32,37}, -{75,-32,38}, -{75,-32,39}, -{75,-32,40}, -{75,-32,41}, -{75,-32,42}, -{75,-32,43}, -{75,-32,44}, -{75,-32,45}, -{75,-32,46}, -{75,-32,47}, -{75,-32,48}, -{75,-32,49}, -{75,-32,50}, -{75,-32,51}, -{75,-32,52}, -{75,-32,53}, -{75,-32,54}, -{75,-32,55}, -{75,-32,56}, -{75,-32,57}, -{75,-32,58}, -{75,-32,59}, -{75,-32,60}, -{75,-32,61}, -{75,-32,62}, -{75,-32,63}, -{75,-32,64}, -{75,-32,65}, -{75,-32,66}, -{75,-32,67}, -{75,-32,68}, -{75,-32,69}, -{75,-32,70}, -{75,-32,71}, -{75,-32,72}, -{75,-32,73}, -{75,-32,74}, -{75,-32,75}, -{75,-31,-26}, -{75,-31,-25}, -{75,-31,-24}, -{75,-31,-23}, -{75,-31,-22}, -{75,-31,-21}, -{75,-31,-20}, -{75,-31,-19}, -{75,-31,-18}, -{75,-31,-17}, -{75,-31,-16}, -{75,-31,-15}, -{75,-31,-14}, -{75,-31,-13}, -{75,-31,-12}, -{75,-31,-11}, -{75,-31,-10}, -{75,-31,-9}, -{75,-31,-8}, -{75,-31,-7}, -{75,-31,-6}, -{75,-31,-5}, -{75,-31,-4}, -{75,-31,-3}, -{75,-31,-2}, -{75,-31,-1}, -{75,-31,0}, -{75,-31,1}, -{75,-31,2}, -{75,-31,3}, -{75,-31,4}, -{75,-31,5}, -{75,-31,6}, -{75,-31,7}, -{75,-31,8}, -{75,-31,9}, -{75,-31,10}, -{75,-31,11}, -{75,-31,12}, -{75,-31,13}, -{75,-31,14}, -{75,-31,15}, -{75,-31,16}, -{75,-31,17}, -{75,-31,18}, -{75,-31,19}, -{75,-31,20}, -{75,-31,21}, -{75,-31,22}, -{75,-31,23}, -{75,-31,24}, -{75,-31,25}, -{75,-31,26}, -{75,-31,27}, -{75,-31,28}, -{75,-31,29}, -{75,-31,30}, -{75,-31,31}, -{75,-31,32}, -{75,-31,33}, -{75,-31,34}, -{75,-31,35}, -{75,-31,36}, -{75,-31,37}, -{75,-31,38}, -{75,-31,39}, -{75,-31,40}, -{75,-31,41}, -{75,-31,42}, -{75,-31,43}, -{75,-31,44}, -{75,-31,45}, -{75,-31,46}, -{75,-31,47}, -{75,-31,48}, -{75,-31,49}, -{75,-31,50}, -{75,-31,51}, -{75,-31,52}, -{75,-31,53}, -{75,-31,54}, -{75,-31,55}, -{75,-31,56}, -{75,-31,57}, -{75,-31,58}, -{75,-31,59}, -{75,-31,60}, -{75,-31,61}, -{75,-31,62}, -{75,-31,63}, -{75,-31,64}, -{75,-31,65}, -{75,-31,66}, -{75,-31,67}, -{75,-31,68}, -{75,-31,69}, -{75,-31,70}, -{75,-31,71}, -{75,-31,72}, -{75,-31,73}, -{75,-31,74}, -{75,-31,75}, -{75,-30,-28}, -{75,-30,-27}, -{75,-30,-26}, -{75,-30,-25}, -{75,-30,-24}, -{75,-30,-23}, -{75,-30,-22}, -{75,-30,-21}, -{75,-30,-20}, -{75,-30,-19}, -{75,-30,-18}, -{75,-30,-17}, -{75,-30,-16}, -{75,-30,-15}, -{75,-30,-14}, -{75,-30,-13}, -{75,-30,-12}, -{75,-30,-11}, -{75,-30,-10}, -{75,-30,-9}, -{75,-30,-8}, -{75,-30,-7}, -{75,-30,-6}, -{75,-30,-5}, -{75,-30,-4}, -{75,-30,-3}, -{75,-30,-2}, -{75,-30,-1}, -{75,-30,0}, -{75,-30,1}, -{75,-30,2}, -{75,-30,3}, -{75,-30,4}, -{75,-30,5}, -{75,-30,6}, -{75,-30,7}, -{75,-30,8}, -{75,-30,9}, -{75,-30,10}, -{75,-30,11}, -{75,-30,12}, -{75,-30,13}, -{75,-30,14}, -{75,-30,15}, -{75,-30,16}, -{75,-30,17}, -{75,-30,18}, -{75,-30,19}, -{75,-30,20}, -{75,-30,21}, -{75,-30,22}, -{75,-30,23}, -{75,-30,24}, -{75,-30,25}, -{75,-30,26}, -{75,-30,27}, -{75,-30,28}, -{75,-30,29}, -{75,-30,30}, -{75,-30,31}, -{75,-30,32}, -{75,-30,33}, -{75,-30,34}, -{75,-30,35}, -{75,-30,36}, -{75,-30,37}, -{75,-30,38}, -{75,-30,39}, -{75,-30,40}, -{75,-30,41}, -{75,-30,42}, -{75,-30,43}, -{75,-30,44}, -{75,-30,45}, -{75,-30,46}, -{75,-30,47}, -{75,-30,48}, -{75,-30,49}, -{75,-30,50}, -{75,-30,51}, -{75,-30,52}, -{75,-30,53}, -{75,-30,54}, -{75,-30,55}, -{75,-30,56}, -{75,-30,57}, -{75,-30,58}, -{75,-30,59}, -{75,-30,60}, -{75,-30,61}, -{75,-30,62}, -{75,-30,63}, -{75,-30,64}, -{75,-30,65}, -{75,-30,66}, -{75,-30,67}, -{75,-30,68}, -{75,-30,69}, -{75,-30,70}, -{75,-30,71}, -{75,-30,72}, -{75,-30,73}, -{75,-30,74}, -{75,-30,75}, -{75,-29,-29}, -{75,-29,-28}, -{75,-29,-27}, -{75,-29,-26}, -{75,-29,-25}, -{75,-29,-24}, -{75,-29,-23}, -{75,-29,-22}, -{75,-29,-21}, -{75,-29,-20}, -{75,-29,-19}, -{75,-29,-18}, -{75,-29,-17}, -{75,-29,-16}, -{75,-29,-15}, -{75,-29,-14}, -{75,-29,-13}, -{75,-29,-12}, -{75,-29,-11}, -{75,-29,-10}, -{75,-29,-9}, -{75,-29,-8}, -{75,-29,-7}, -{75,-29,-6}, -{75,-29,-5}, -{75,-29,-4}, -{75,-29,-3}, -{75,-29,-2}, -{75,-29,-1}, -{75,-29,0}, -{75,-29,1}, -{75,-29,2}, -{75,-29,3}, -{75,-29,4}, -{75,-29,5}, -{75,-29,6}, -{75,-29,7}, -{75,-29,8}, -{75,-29,9}, -{75,-29,10}, -{75,-29,11}, -{75,-29,12}, -{75,-29,13}, -{75,-29,14}, -{75,-29,15}, -{75,-29,16}, -{75,-29,17}, -{75,-29,18}, -{75,-29,19}, -{75,-29,20}, -{75,-29,21}, -{75,-29,22}, -{75,-29,23}, -{75,-29,24}, -{75,-29,25}, -{75,-29,26}, -{75,-29,27}, -{75,-29,28}, -{75,-29,29}, -{75,-29,30}, -{75,-29,31}, -{75,-29,32}, -{75,-29,33}, -{75,-29,34}, -{75,-29,35}, -{75,-29,36}, -{75,-29,37}, -{75,-29,38}, -{75,-29,39}, -{75,-29,40}, -{75,-29,41}, -{75,-29,42}, -{75,-29,43}, -{75,-29,44}, -{75,-29,45}, -{75,-29,46}, -{75,-29,47}, -{75,-29,48}, -{75,-29,49}, -{75,-29,50}, -{75,-29,51}, -{75,-29,52}, -{75,-29,53}, -{75,-29,54}, -{75,-29,55}, -{75,-29,56}, -{75,-29,57}, -{75,-29,58}, -{75,-29,59}, -{75,-29,60}, -{75,-29,61}, -{75,-29,62}, -{75,-29,63}, -{75,-29,64}, -{75,-29,65}, -{75,-29,66}, -{75,-29,67}, -{75,-29,68}, -{75,-29,69}, -{75,-29,70}, -{75,-29,71}, -{75,-29,72}, -{75,-29,73}, -{75,-29,74}, -{75,-29,75}, -{75,-28,-31}, -{75,-28,-30}, -{75,-28,-29}, -{75,-28,-28}, -{75,-28,-27}, -{75,-28,-26}, -{75,-28,-25}, -{75,-28,-24}, -{75,-28,-23}, -{75,-28,-22}, -{75,-28,-21}, -{75,-28,-20}, -{75,-28,-19}, -{75,-28,-18}, -{75,-28,-17}, -{75,-28,-16}, -{75,-28,-15}, -{75,-28,-14}, -{75,-28,-13}, -{75,-28,-12}, -{75,-28,-11}, -{75,-28,-10}, -{75,-28,-9}, -{75,-28,-8}, -{75,-28,-7}, -{75,-28,-6}, -{75,-28,-5}, -{75,-28,-4}, -{75,-28,-3}, -{75,-28,-2}, -{75,-28,-1}, -{75,-28,0}, -{75,-28,1}, -{75,-28,2}, -{75,-28,3}, -{75,-28,4}, -{75,-28,5}, -{75,-28,6}, -{75,-28,7}, -{75,-28,8}, -{75,-28,9}, -{75,-28,10}, -{75,-28,11}, -{75,-28,12}, -{75,-28,13}, -{75,-28,14}, -{75,-28,15}, -{75,-28,16}, -{75,-28,17}, -{75,-28,18}, -{75,-28,19}, -{75,-28,20}, -{75,-28,21}, -{75,-28,22}, -{75,-28,23}, -{75,-28,24}, -{75,-28,25}, -{75,-28,26}, -{75,-28,27}, -{75,-28,28}, -{75,-28,29}, -{75,-28,30}, -{75,-28,31}, -{75,-28,32}, -{75,-28,33}, -{75,-28,34}, -{75,-28,35}, -{75,-28,36}, -{75,-28,37}, -{75,-28,38}, -{75,-28,39}, -{75,-28,40}, -{75,-28,41}, -{75,-28,42}, -{75,-28,43}, -{75,-28,44}, -{75,-28,45}, -{75,-28,46}, -{75,-28,47}, -{75,-28,48}, -{75,-28,49}, -{75,-28,50}, -{75,-28,51}, -{75,-28,52}, -{75,-28,53}, -{75,-28,54}, -{75,-28,55}, -{75,-28,56}, -{75,-28,57}, -{75,-28,58}, -{75,-28,59}, -{75,-28,60}, -{75,-28,61}, -{75,-28,62}, -{75,-28,63}, -{75,-28,64}, -{75,-28,65}, -{75,-28,66}, -{75,-28,67}, -{75,-28,68}, -{75,-28,69}, -{75,-28,70}, -{75,-28,71}, -{75,-28,72}, -{75,-28,73}, -{75,-28,74}, -{75,-28,75}, -{75,-27,-32}, -{75,-27,-31}, -{75,-27,-30}, -{75,-27,-29}, -{75,-27,-28}, -{75,-27,-27}, -{75,-27,-26}, -{75,-27,-25}, -{75,-27,-24}, -{75,-27,-23}, -{75,-27,-22}, -{75,-27,-21}, -{75,-27,-20}, -{75,-27,-19}, -{75,-27,-18}, -{75,-27,-17}, -{75,-27,-16}, -{75,-27,-15}, -{75,-27,-14}, -{75,-27,-13}, -{75,-27,-12}, -{75,-27,-11}, -{75,-27,-10}, -{75,-27,-9}, -{75,-27,-8}, -{75,-27,-7}, -{75,-27,-6}, -{75,-27,-5}, -{75,-27,-4}, -{75,-27,-3}, -{75,-27,-2}, -{75,-27,-1}, -{75,-27,0}, -{75,-27,1}, -{75,-27,2}, -{75,-27,3}, -{75,-27,4}, -{75,-27,5}, -{75,-27,6}, -{75,-27,7}, -{75,-27,8}, -{75,-27,9}, -{75,-27,10}, -{75,-27,11}, -{75,-27,12}, -{75,-27,13}, -{75,-27,14}, -{75,-27,15}, -{75,-27,16}, -{75,-27,17}, -{75,-27,18}, -{75,-27,19}, -{75,-27,20}, -{75,-27,21}, -{75,-27,22}, -{75,-27,23}, -{75,-27,24}, -{75,-27,25}, -{75,-27,26}, -{75,-27,27}, -{75,-27,28}, -{75,-27,29}, -{75,-27,30}, -{75,-27,31}, -{75,-27,32}, -{75,-27,33}, -{75,-27,34}, -{75,-27,35}, -{75,-27,36}, -{75,-27,37}, -{75,-27,38}, -{75,-27,39}, -{75,-27,40}, -{75,-27,41}, -{75,-27,42}, -{75,-27,43}, -{75,-27,44}, -{75,-27,45}, -{75,-27,46}, -{75,-27,47}, -{75,-27,48}, -{75,-27,49}, -{75,-27,50}, -{75,-27,51}, -{75,-27,52}, -{75,-27,53}, -{75,-27,54}, -{75,-27,55}, -{75,-27,56}, -{75,-27,57}, -{75,-27,58}, -{75,-27,59}, -{75,-27,60}, -{75,-27,61}, -{75,-27,62}, -{75,-27,63}, -{75,-27,64}, -{75,-27,65}, -{75,-27,66}, -{75,-27,67}, -{75,-27,68}, -{75,-27,69}, -{75,-27,70}, -{75,-27,71}, -{75,-27,72}, -{75,-27,73}, -{75,-27,74}, -{75,-27,75}, -{75,-26,-33}, -{75,-26,-32}, -{75,-26,-31}, -{75,-26,-30}, -{75,-26,-29}, -{75,-26,-28}, -{75,-26,-27}, -{75,-26,-26}, -{75,-26,-25}, -{75,-26,-24}, -{75,-26,-23}, -{75,-26,-22}, -{75,-26,-21}, -{75,-26,-20}, -{75,-26,-19}, -{75,-26,-18}, -{75,-26,-17}, -{75,-26,-16}, -{75,-26,-15}, -{75,-26,-14}, -{75,-26,-13}, -{75,-26,-12}, -{75,-26,-11}, -{75,-26,-10}, -{75,-26,-9}, -{75,-26,-8}, -{75,-26,-7}, -{75,-26,-6}, -{75,-26,-5}, -{75,-26,-4}, -{75,-26,-3}, -{75,-26,-2}, -{75,-26,-1}, -{75,-26,0}, -{75,-26,1}, -{75,-26,2}, -{75,-26,3}, -{75,-26,4}, -{75,-26,5}, -{75,-26,6}, -{75,-26,7}, -{75,-26,8}, -{75,-26,9}, -{75,-26,10}, -{75,-26,11}, -{75,-26,12}, -{75,-26,13}, -{75,-26,14}, -{75,-26,15}, -{75,-26,16}, -{75,-26,17}, -{75,-26,18}, -{75,-26,19}, -{75,-26,20}, -{75,-26,21}, -{75,-26,22}, -{75,-26,23}, -{75,-26,24}, -{75,-26,25}, -{75,-26,26}, -{75,-26,27}, -{75,-26,28}, -{75,-26,29}, -{75,-26,30}, -{75,-26,31}, -{75,-26,32}, -{75,-26,33}, -{75,-26,34}, -{75,-26,35}, -{75,-26,36}, -{75,-26,37}, -{75,-26,38}, -{75,-26,39}, -{75,-26,40}, -{75,-26,41}, -{75,-26,42}, -{75,-26,43}, -{75,-26,44}, -{75,-26,45}, -{75,-26,46}, -{75,-26,47}, -{75,-26,48}, -{75,-26,49}, -{75,-26,50}, -{75,-26,51}, -{75,-26,52}, -{75,-26,53}, -{75,-26,54}, -{75,-26,55}, -{75,-26,56}, -{75,-26,57}, -{75,-26,58}, -{75,-26,59}, -{75,-26,60}, -{75,-26,61}, -{75,-26,62}, -{75,-26,63}, -{75,-26,64}, -{75,-26,65}, -{75,-26,66}, -{75,-26,67}, -{75,-26,68}, -{75,-26,69}, -{75,-26,70}, -{75,-26,71}, -{75,-26,72}, -{75,-26,73}, -{75,-26,74}, -{75,-26,75}, -{75,-25,-35}, -{75,-25,-34}, -{75,-25,-33}, -{75,-25,-32}, -{75,-25,-31}, -{75,-25,-30}, -{75,-25,-29}, -{75,-25,-28}, -{75,-25,-27}, -{75,-25,-26}, -{75,-25,-25}, -{75,-25,-24}, -{75,-25,-23}, -{75,-25,-22}, -{75,-25,-21}, -{75,-25,-20}, -{75,-25,-19}, -{75,-25,-18}, -{75,-25,-17}, -{75,-25,-16}, -{75,-25,-15}, -{75,-25,-14}, -{75,-25,-13}, -{75,-25,-12}, -{75,-25,-11}, -{75,-25,-10}, -{75,-25,-9}, -{75,-25,-8}, -{75,-25,-7}, -{75,-25,-6}, -{75,-25,-5}, -{75,-25,-4}, -{75,-25,-3}, -{75,-25,-2}, -{75,-25,-1}, -{75,-25,0}, -{75,-25,1}, -{75,-25,2}, -{75,-25,3}, -{75,-25,4}, -{75,-25,5}, -{75,-25,6}, -{75,-25,7}, -{75,-25,8}, -{75,-25,9}, -{75,-25,10}, -{75,-25,11}, -{75,-25,12}, -{75,-25,13}, -{75,-25,14}, -{75,-25,15}, -{75,-25,16}, -{75,-25,17}, -{75,-25,18}, -{75,-25,19}, -{75,-25,20}, -{75,-25,21}, -{75,-25,22}, -{75,-25,23}, -{75,-25,24}, -{75,-25,25}, -{75,-25,26}, -{75,-25,27}, -{75,-25,28}, -{75,-25,29}, -{75,-25,30}, -{75,-25,31}, -{75,-25,32}, -{75,-25,33}, -{75,-25,34}, -{75,-25,35}, -{75,-25,36}, -{75,-25,37}, -{75,-25,38}, -{75,-25,39}, -{75,-25,40}, -{75,-25,41}, -{75,-25,42}, -{75,-25,43}, -{75,-25,44}, -{75,-25,45}, -{75,-25,46}, -{75,-25,47}, -{75,-25,48}, -{75,-25,49}, -{75,-25,50}, -{75,-25,51}, -{75,-25,52}, -{75,-25,53}, -{75,-25,54}, -{75,-25,55}, -{75,-25,56}, -{75,-25,57}, -{75,-25,58}, -{75,-25,59}, -{75,-25,60}, -{75,-25,61}, -{75,-25,62}, -{75,-25,63}, -{75,-25,64}, -{75,-25,65}, -{75,-25,66}, -{75,-25,67}, -{75,-25,68}, -{75,-25,69}, -{75,-25,70}, -{75,-25,71}, -{75,-25,72}, -{75,-25,73}, -{75,-25,74}, -{75,-25,75}, -{75,-24,-36}, -{75,-24,-35}, -{75,-24,-34}, -{75,-24,-33}, -{75,-24,-32}, -{75,-24,-31}, -{75,-24,-30}, -{75,-24,-29}, -{75,-24,-28}, -{75,-24,-27}, -{75,-24,-26}, -{75,-24,-25}, -{75,-24,-24}, -{75,-24,-23}, -{75,-24,-22}, -{75,-24,-21}, -{75,-24,-20}, -{75,-24,-19}, -{75,-24,-18}, -{75,-24,-17}, -{75,-24,-16}, -{75,-24,-15}, -{75,-24,-14}, -{75,-24,-13}, -{75,-24,-12}, -{75,-24,-11}, -{75,-24,-10}, -{75,-24,-9}, -{75,-24,-8}, -{75,-24,-7}, -{75,-24,-6}, -{75,-24,-5}, -{75,-24,-4}, -{75,-24,-3}, -{75,-24,-2}, -{75,-24,-1}, -{75,-24,0}, -{75,-24,1}, -{75,-24,2}, -{75,-24,3}, -{75,-24,4}, -{75,-24,5}, -{75,-24,6}, -{75,-24,7}, -{75,-24,8}, -{75,-24,9}, -{75,-24,10}, -{75,-24,11}, -{75,-24,12}, -{75,-24,13}, -{75,-24,14}, -{75,-24,15}, -{75,-24,16}, -{75,-24,17}, -{75,-24,18}, -{75,-24,19}, -{75,-24,20}, -{75,-24,21}, -{75,-24,22}, -{75,-24,23}, -{75,-24,24}, -{75,-24,25}, -{75,-24,26}, -{75,-24,27}, -{75,-24,28}, -{75,-24,29}, -{75,-24,30}, -{75,-24,31}, -{75,-24,32}, -{75,-24,33}, -{75,-24,34}, -{75,-24,35}, -{75,-24,36}, -{75,-24,37}, -{75,-24,38}, -{75,-24,39}, -{75,-24,40}, -{75,-24,41}, -{75,-24,42}, -{75,-24,43}, -{75,-24,44}, -{75,-24,45}, -{75,-24,46}, -{75,-24,47}, -{75,-24,48}, -{75,-24,49}, -{75,-24,50}, -{75,-24,51}, -{75,-24,52}, -{75,-24,53}, -{75,-24,54}, -{75,-24,55}, -{75,-24,56}, -{75,-24,57}, -{75,-24,58}, -{75,-24,59}, -{75,-24,60}, -{75,-24,61}, -{75,-24,62}, -{75,-24,63}, -{75,-24,64}, -{75,-24,65}, -{75,-24,66}, -{75,-24,67}, -{75,-24,68}, -{75,-24,69}, -{75,-24,70}, -{75,-24,71}, -{75,-24,72}, -{75,-24,73}, -{75,-24,74}, -{75,-24,75}, -{75,-23,-37}, -{75,-23,-36}, -{75,-23,-35}, -{75,-23,-34}, -{75,-23,-33}, -{75,-23,-32}, -{75,-23,-31}, -{75,-23,-30}, -{75,-23,-29}, -{75,-23,-28}, -{75,-23,-27}, -{75,-23,-26}, -{75,-23,-25}, -{75,-23,-24}, -{75,-23,-23}, -{75,-23,-22}, -{75,-23,-21}, -{75,-23,-20}, -{75,-23,-19}, -{75,-23,-18}, -{75,-23,-17}, -{75,-23,-16}, -{75,-23,-15}, -{75,-23,-14}, -{75,-23,-13}, -{75,-23,-12}, -{75,-23,-11}, -{75,-23,-10}, -{75,-23,-9}, -{75,-23,-8}, -{75,-23,-7}, -{75,-23,-6}, -{75,-23,-5}, -{75,-23,-4}, -{75,-23,-3}, -{75,-23,-2}, -{75,-23,-1}, -{75,-23,0}, -{75,-23,1}, -{75,-23,2}, -{75,-23,3}, -{75,-23,4}, -{75,-23,5}, -{75,-23,6}, -{75,-23,7}, -{75,-23,8}, -{75,-23,9}, -{75,-23,10}, -{75,-23,11}, -{75,-23,12}, -{75,-23,13}, -{75,-23,14}, -{75,-23,15}, -{75,-23,16}, -{75,-23,17}, -{75,-23,18}, -{75,-23,19}, -{75,-23,20}, -{75,-23,21}, -{75,-23,22}, -{75,-23,23}, -{75,-23,24}, -{75,-23,25}, -{75,-23,26}, -{75,-23,27}, -{75,-23,28}, -{75,-23,29}, -{75,-23,30}, -{75,-23,31}, -{75,-23,32}, -{75,-23,33}, -{75,-23,34}, -{75,-23,35}, -{75,-23,36}, -{75,-23,37}, -{75,-23,38}, -{75,-23,39}, -{75,-23,40}, -{75,-23,41}, -{75,-23,42}, -{75,-23,43}, -{75,-23,44}, -{75,-23,45}, -{75,-23,46}, -{75,-23,47}, -{75,-23,48}, -{75,-23,49}, -{75,-23,50}, -{75,-23,51}, -{75,-23,52}, -{75,-23,53}, -{75,-23,54}, -{75,-23,55}, -{75,-23,56}, -{75,-23,57}, -{75,-23,58}, -{75,-23,59}, -{75,-23,60}, -{75,-23,61}, -{75,-23,62}, -{75,-23,63}, -{75,-23,64}, -{75,-23,65}, -{75,-23,66}, -{75,-23,67}, -{75,-23,68}, -{75,-23,69}, -{75,-23,70}, -{75,-23,71}, -{75,-23,72}, -{75,-23,73}, -{75,-23,74}, -{75,-23,75}, -{75,-22,-38}, -{75,-22,-37}, -{75,-22,-36}, -{75,-22,-35}, -{75,-22,-34}, -{75,-22,-33}, -{75,-22,-32}, -{75,-22,-31}, -{75,-22,-30}, -{75,-22,-29}, -{75,-22,-28}, -{75,-22,-27}, -{75,-22,-26}, -{75,-22,-25}, -{75,-22,-24}, -{75,-22,-23}, -{75,-22,-22}, -{75,-22,-21}, -{75,-22,-20}, -{75,-22,-19}, -{75,-22,-18}, -{75,-22,-17}, -{75,-22,-16}, -{75,-22,-15}, -{75,-22,-14}, -{75,-22,-13}, -{75,-22,-12}, -{75,-22,-11}, -{75,-22,-10}, -{75,-22,-9}, -{75,-22,-8}, -{75,-22,-7}, -{75,-22,-6}, -{75,-22,-5}, -{75,-22,-4}, -{75,-22,-3}, -{75,-22,-2}, -{75,-22,-1}, -{75,-22,0}, -{75,-22,1}, -{75,-22,2}, -{75,-22,3}, -{75,-22,4}, -{75,-22,5}, -{75,-22,6}, -{75,-22,7}, -{75,-22,8}, -{75,-22,9}, -{75,-22,10}, -{75,-22,11}, -{75,-22,12}, -{75,-22,13}, -{75,-22,14}, -{75,-22,15}, -{75,-22,16}, -{75,-22,17}, -{75,-22,18}, -{75,-22,19}, -{75,-22,20}, -{75,-22,21}, -{75,-22,22}, -{75,-22,23}, -{75,-22,24}, -{75,-22,25}, -{75,-22,26}, -{75,-22,27}, -{75,-22,28}, -{75,-22,29}, -{75,-22,30}, -{75,-22,31}, -{75,-22,32}, -{75,-22,33}, -{75,-22,34}, -{75,-22,35}, -{75,-22,36}, -{75,-22,37}, -{75,-22,38}, -{75,-22,39}, -{75,-22,40}, -{75,-22,41}, -{75,-22,42}, -{75,-22,43}, -{75,-22,44}, -{75,-22,45}, -{75,-22,46}, -{75,-22,47}, -{75,-22,48}, -{75,-22,49}, -{75,-22,50}, -{75,-22,51}, -{75,-22,52}, -{75,-22,53}, -{75,-22,54}, -{75,-22,55}, -{75,-22,56}, -{75,-22,57}, -{75,-22,58}, -{75,-22,59}, -{75,-22,60}, -{75,-22,61}, -{75,-22,62}, -{75,-22,63}, -{75,-22,64}, -{75,-22,65}, -{75,-22,66}, -{75,-22,67}, -{75,-22,68}, -{75,-22,69}, -{75,-22,70}, -{75,-22,71}, -{75,-22,72}, -{75,-22,73}, -{75,-22,74}, -{75,-22,75}, -{75,-21,-38}, -{75,-21,-37}, -{75,-21,-36}, -{75,-21,-35}, -{75,-21,-34}, -{75,-21,-33}, -{75,-21,-32}, -{75,-21,-31}, -{75,-21,-30}, -{75,-21,-29}, -{75,-21,-28}, -{75,-21,-27}, -{75,-21,-26}, -{75,-21,-25}, -{75,-21,-24}, -{75,-21,-23}, -{75,-21,-22}, -{75,-21,-21}, -{75,-21,-20}, -{75,-21,-19}, -{75,-21,-18}, -{75,-21,-17}, -{75,-21,-16}, -{75,-21,-15}, -{75,-21,-14}, -{75,-21,-13}, -{75,-21,-12}, -{75,-21,-11}, -{75,-21,-10}, -{75,-21,-9}, -{75,-21,-8}, -{75,-21,-7}, -{75,-21,-6}, -{75,-21,-5}, -{75,-21,-4}, -{75,-21,-3}, -{75,-21,-2}, -{75,-21,-1}, -{75,-21,0}, -{75,-21,1}, -{75,-21,2}, -{75,-21,3}, -{75,-21,4}, -{75,-21,5}, -{75,-21,6}, -{75,-21,7}, -{75,-21,8}, -{75,-21,9}, -{75,-21,10}, -{75,-21,11}, -{75,-21,12}, -{75,-21,13}, -{75,-21,14}, -{75,-21,15}, -{75,-21,16}, -{75,-21,17}, -{75,-21,18}, -{75,-21,19}, -{75,-21,20}, -{75,-21,21}, -{75,-21,22}, -{75,-21,23}, -{75,-21,24}, -{75,-21,25}, -{75,-21,26}, -{75,-21,27}, -{75,-21,28}, -{75,-21,29}, -{75,-21,30}, -{75,-21,31}, -{75,-21,32}, -{75,-21,33}, -{75,-21,34}, -{75,-21,35}, -{75,-21,36}, -{75,-21,37}, -{75,-21,38}, -{75,-21,39}, -{75,-21,40}, -{75,-21,41}, -{75,-21,42}, -{75,-21,43}, -{75,-21,44}, -{75,-21,45}, -{75,-21,46}, -{75,-21,47}, -{75,-21,48}, -{75,-21,49}, -{75,-21,50}, -{75,-21,51}, -{75,-21,52}, -{75,-21,53}, -{75,-21,54}, -{75,-21,55}, -{75,-21,56}, -{75,-21,57}, -{75,-21,58}, -{75,-21,59}, -{75,-21,60}, -{75,-21,61}, -{75,-21,62}, -{75,-21,63}, -{75,-21,64}, -{75,-21,65}, -{75,-21,66}, -{75,-21,67}, -{75,-21,68}, -{75,-21,69}, -{75,-21,70}, -{75,-21,71}, -{75,-21,72}, -{75,-21,73}, -{75,-21,74}, -{75,-21,75}, -{75,-20,-38}, -{75,-20,-37}, -{75,-20,-36}, -{75,-20,-35}, -{75,-20,-34}, -{75,-20,-33}, -{75,-20,-32}, -{75,-20,-31}, -{75,-20,-30}, -{75,-20,-29}, -{75,-20,-28}, -{75,-20,-27}, -{75,-20,-26}, -{75,-20,-25}, -{75,-20,-24}, -{75,-20,-23}, -{75,-20,-22}, -{75,-20,-21}, -{75,-20,-20}, -{75,-20,-19}, -{75,-20,-18}, -{75,-20,-17}, -{75,-20,-16}, -{75,-20,-15}, -{75,-20,-14}, -{75,-20,-13}, -{75,-20,-12}, -{75,-20,-11}, -{75,-20,-10}, -{75,-20,-9}, -{75,-20,-8}, -{75,-20,-7}, -{75,-20,-6}, -{75,-20,-5}, -{75,-20,-4}, -{75,-20,-3}, -{75,-20,-2}, -{75,-20,-1}, -{75,-20,0}, -{75,-20,1}, -{75,-20,2}, -{75,-20,3}, -{75,-20,4}, -{75,-20,5}, -{75,-20,6}, -{75,-20,7}, -{75,-20,8}, -{75,-20,9}, -{75,-20,10}, -{75,-20,11}, -{75,-20,12}, -{75,-20,13}, -{75,-20,14}, -{75,-20,15}, -{75,-20,16}, -{75,-20,17}, -{75,-20,18}, -{75,-20,19}, -{75,-20,20}, -{75,-20,21}, -{75,-20,22}, -{75,-20,23}, -{75,-20,24}, -{75,-20,25}, -{75,-20,26}, -{75,-20,27}, -{75,-20,28}, -{75,-20,29}, -{75,-20,30}, -{75,-20,31}, -{75,-20,32}, -{75,-20,33}, -{75,-20,34}, -{75,-20,35}, -{75,-20,36}, -{75,-20,37}, -{75,-20,38}, -{75,-20,39}, -{75,-20,40}, -{75,-20,41}, -{75,-20,42}, -{75,-20,43}, -{75,-20,44}, -{75,-20,45}, -{75,-20,46}, -{75,-20,47}, -{75,-20,48}, -{75,-20,49}, -{75,-20,50}, -{75,-20,51}, -{75,-20,52}, -{75,-20,53}, -{75,-20,54}, -{75,-20,55}, -{75,-20,56}, -{75,-20,57}, -{75,-20,58}, -{75,-20,59}, -{75,-20,60}, -{75,-20,61}, -{75,-20,62}, -{75,-20,63}, -{75,-20,64}, -{75,-20,65}, -{75,-20,66}, -{75,-20,67}, -{75,-20,68}, -{75,-20,69}, -{75,-20,70}, -{75,-20,71}, -{75,-20,72}, -{75,-20,73}, -{75,-20,74}, -{75,-20,75}, -{75,-20,76}, -{75,-19,-38}, -{75,-19,-37}, -{75,-19,-36}, -{75,-19,-35}, -{75,-19,-34}, -{75,-19,-33}, -{75,-19,-32}, -{75,-19,-31}, -{75,-19,-30}, -{75,-19,-29}, -{75,-19,-28}, -{75,-19,-27}, -{75,-19,-26}, -{75,-19,-25}, -{75,-19,-24}, -{75,-19,-23}, -{75,-19,-22}, -{75,-19,-21}, -{75,-19,-20}, -{75,-19,-19}, -{75,-19,-18}, -{75,-19,-17}, -{75,-19,-16}, -{75,-19,-15}, -{75,-19,-14}, -{75,-19,-13}, -{75,-19,-12}, -{75,-19,-11}, -{75,-19,-10}, -{75,-19,-9}, -{75,-19,-8}, -{75,-19,-7}, -{75,-19,-6}, -{75,-19,-5}, -{75,-19,-4}, -{75,-19,-3}, -{75,-19,-2}, -{75,-19,-1}, -{75,-19,0}, -{75,-19,1}, -{75,-19,2}, -{75,-19,3}, -{75,-19,4}, -{75,-19,5}, -{75,-19,6}, -{75,-19,7}, -{75,-19,8}, -{75,-19,9}, -{75,-19,10}, -{75,-19,11}, -{75,-19,12}, -{75,-19,13}, -{75,-19,14}, -{75,-19,15}, -{75,-19,16}, -{75,-19,17}, -{75,-19,18}, -{75,-19,19}, -{75,-19,20}, -{75,-19,21}, -{75,-19,22}, -{75,-19,23}, -{75,-19,24}, -{75,-19,25}, -{75,-19,26}, -{75,-19,27}, -{75,-19,28}, -{75,-19,29}, -{75,-19,30}, -{75,-19,31}, -{75,-19,32}, -{75,-19,33}, -{75,-19,34}, -{75,-19,35}, -{75,-19,36}, -{75,-19,37}, -{75,-19,38}, -{75,-19,39}, -{75,-19,40}, -{75,-19,41}, -{75,-19,42}, -{75,-19,43}, -{75,-19,44}, -{75,-19,45}, -{75,-19,46}, -{75,-19,47}, -{75,-19,48}, -{75,-19,49}, -{75,-19,50}, -{75,-19,51}, -{75,-19,52}, -{75,-19,53}, -{75,-19,54}, -{75,-19,55}, -{75,-19,56}, -{75,-19,57}, -{75,-19,58}, -{75,-19,59}, -{75,-19,60}, -{75,-19,61}, -{75,-19,62}, -{75,-19,63}, -{75,-19,64}, -{75,-19,65}, -{75,-19,66}, -{75,-19,67}, -{75,-19,68}, -{75,-19,69}, -{75,-19,70}, -{75,-19,71}, -{75,-19,72}, -{75,-19,73}, -{75,-19,74}, -{75,-19,75}, -{75,-19,76}, -{75,-18,-38}, -{75,-18,-37}, -{75,-18,-36}, -{75,-18,-35}, -{75,-18,-34}, -{75,-18,-33}, -{75,-18,-32}, -{75,-18,-31}, -{75,-18,-30}, -{75,-18,-29}, -{75,-18,-28}, -{75,-18,-27}, -{75,-18,-26}, -{75,-18,-25}, -{75,-18,-24}, -{75,-18,-23}, -{75,-18,-22}, -{75,-18,-21}, -{75,-18,-20}, -{75,-18,-19}, -{75,-18,-18}, -{75,-18,-17}, -{75,-18,-16}, -{75,-18,-15}, -{75,-18,-14}, -{75,-18,-13}, -{75,-18,-12}, -{75,-18,-11}, -{75,-18,-10}, -{75,-18,-9}, -{75,-18,-8}, -{75,-18,-7}, -{75,-18,-6}, -{75,-18,-5}, -{75,-18,-4}, -{75,-18,-3}, -{75,-18,-2}, -{75,-18,-1}, -{75,-18,0}, -{75,-18,1}, -{75,-18,2}, -{75,-18,3}, -{75,-18,4}, -{75,-18,5}, -{75,-18,6}, -{75,-18,7}, -{75,-18,8}, -{75,-18,9}, -{75,-18,10}, -{75,-18,11}, -{75,-18,12}, -{75,-18,13}, -{75,-18,14}, -{75,-18,15}, -{75,-18,16}, -{75,-18,17}, -{75,-18,18}, -{75,-18,19}, -{75,-18,20}, -{75,-18,21}, -{75,-18,22}, -{75,-18,23}, -{75,-18,24}, -{75,-18,25}, -{75,-18,26}, -{75,-18,27}, -{75,-18,28}, -{75,-18,29}, -{75,-18,30}, -{75,-18,31}, -{75,-18,32}, -{75,-18,33}, -{75,-18,34}, -{75,-18,35}, -{75,-18,36}, -{75,-18,37}, -{75,-18,38}, -{75,-18,39}, -{75,-18,40}, -{75,-18,41}, -{75,-18,42}, -{75,-18,43}, -{75,-18,44}, -{75,-18,45}, -{75,-18,46}, -{75,-18,47}, -{75,-18,48}, -{75,-18,49}, -{75,-18,50}, -{75,-18,51}, -{75,-18,52}, -{75,-18,53}, -{75,-18,54}, -{75,-18,55}, -{75,-18,56}, -{75,-18,57}, -{75,-18,58}, -{75,-18,59}, -{75,-18,60}, -{75,-18,61}, -{75,-18,62}, -{75,-18,63}, -{75,-18,64}, -{75,-18,65}, -{75,-18,66}, -{75,-18,67}, -{75,-18,68}, -{75,-18,69}, -{75,-18,70}, -{75,-18,71}, -{75,-18,72}, -{75,-18,73}, -{75,-18,74}, -{75,-18,75}, -{75,-18,76}, -{75,-17,-38}, -{75,-17,-37}, -{75,-17,-36}, -{75,-17,-35}, -{75,-17,-34}, -{75,-17,-33}, -{75,-17,-32}, -{75,-17,-31}, -{75,-17,-30}, -{75,-17,-29}, -{75,-17,-28}, -{75,-17,-27}, -{75,-17,-26}, -{75,-17,-25}, -{75,-17,-24}, -{75,-17,-23}, -{75,-17,-22}, -{75,-17,-21}, -{75,-17,-20}, -{75,-17,-19}, -{75,-17,-18}, -{75,-17,-17}, -{75,-17,-16}, -{75,-17,-15}, -{75,-17,-14}, -{75,-17,-13}, -{75,-17,-12}, -{75,-17,-11}, -{75,-17,-10}, -{75,-17,-9}, -{75,-17,-8}, -{75,-17,-7}, -{75,-17,-6}, -{75,-17,-5}, -{75,-17,-4}, -{75,-17,-3}, -{75,-17,-2}, -{75,-17,-1}, -{75,-17,0}, -{75,-17,1}, -{75,-17,2}, -{75,-17,3}, -{75,-17,4}, -{75,-17,5}, -{75,-17,6}, -{75,-17,7}, -{75,-17,8}, -{75,-17,9}, -{75,-17,10}, -{75,-17,11}, -{75,-17,12}, -{75,-17,13}, -{75,-17,14}, -{75,-17,15}, -{75,-17,16}, -{75,-17,17}, -{75,-17,18}, -{75,-17,19}, -{75,-17,20}, -{75,-17,21}, -{75,-17,22}, -{75,-17,23}, -{75,-17,24}, -{75,-17,25}, -{75,-17,26}, -{75,-17,27}, -{75,-17,28}, -{75,-17,29}, -{75,-17,30}, -{75,-17,31}, -{75,-17,32}, -{75,-17,33}, -{75,-17,34}, -{75,-17,35}, -{75,-17,36}, -{75,-17,37}, -{75,-17,38}, -{75,-17,39}, -{75,-17,40}, -{75,-17,41}, -{75,-17,42}, -{75,-17,43}, -{75,-17,44}, -{75,-17,45}, -{75,-17,46}, -{75,-17,47}, -{75,-17,48}, -{75,-17,49}, -{75,-17,50}, -{75,-17,51}, -{75,-17,52}, -{75,-17,53}, -{75,-17,54}, -{75,-17,55}, -{75,-17,56}, -{75,-17,57}, -{75,-17,58}, -{75,-17,59}, -{75,-17,60}, -{75,-17,61}, -{75,-17,62}, -{75,-17,63}, -{75,-17,64}, -{75,-17,65}, -{75,-17,66}, -{75,-17,67}, -{75,-17,68}, -{75,-17,69}, -{75,-17,70}, -{75,-17,71}, -{75,-17,72}, -{75,-17,73}, -{75,-17,74}, -{75,-17,75}, -{75,-17,76}, -{75,-16,-38}, -{75,-16,-37}, -{75,-16,-36}, -{75,-16,-35}, -{75,-16,-34}, -{75,-16,-33}, -{75,-16,-32}, -{75,-16,-31}, -{75,-16,-30}, -{75,-16,-29}, -{75,-16,-28}, -{75,-16,-27}, -{75,-16,-26}, -{75,-16,-25}, -{75,-16,-24}, -{75,-16,-23}, -{75,-16,-22}, -{75,-16,-21}, -{75,-16,-20}, -{75,-16,-19}, -{75,-16,-18}, -{75,-16,-17}, -{75,-16,-16}, -{75,-16,-15}, -{75,-16,-14}, -{75,-16,-13}, -{75,-16,-12}, -{75,-16,-11}, -{75,-16,-10}, -{75,-16,-9}, -{75,-16,-8}, -{75,-16,-7}, -{75,-16,-6}, -{75,-16,-5}, -{75,-16,-4}, -{75,-16,-3}, -{75,-16,-2}, -{75,-16,-1}, -{75,-16,0}, -{75,-16,1}, -{75,-16,2}, -{75,-16,3}, -{75,-16,4}, -{75,-16,5}, -{75,-16,6}, -{75,-16,7}, -{75,-16,8}, -{75,-16,9}, -{75,-16,10}, -{75,-16,11}, -{75,-16,12}, -{75,-16,13}, -{75,-16,14}, -{75,-16,15}, -{75,-16,16}, -{75,-16,17}, -{75,-16,18}, -{75,-16,19}, -{75,-16,20}, -{75,-16,21}, -{75,-16,22}, -{75,-16,23}, -{75,-16,24}, -{75,-16,25}, -{75,-16,26}, -{75,-16,27}, -{75,-16,28}, -{75,-16,29}, -{75,-16,30}, -{75,-16,31}, -{75,-16,32}, -{75,-16,33}, -{75,-16,34}, -{75,-16,35}, -{75,-16,36}, -{75,-16,37}, -{75,-16,38}, -{75,-16,39}, -{75,-16,40}, -{75,-16,41}, -{75,-16,42}, -{75,-16,43}, -{75,-16,44}, -{75,-16,45}, -{75,-16,46}, -{75,-16,47}, -{75,-16,48}, -{75,-16,49}, -{75,-16,50}, -{75,-16,51}, -{75,-16,52}, -{75,-16,53}, -{75,-16,54}, -{75,-16,55}, -{75,-16,56}, -{75,-16,57}, -{75,-16,58}, -{75,-16,59}, -{75,-16,60}, -{75,-16,61}, -{75,-16,62}, -{75,-16,63}, -{75,-16,64}, -{75,-16,65}, -{75,-16,66}, -{75,-16,67}, -{75,-16,68}, -{75,-16,69}, -{75,-16,70}, -{75,-16,71}, -{75,-16,72}, -{75,-16,73}, -{75,-16,74}, -{75,-16,75}, -{75,-16,76}, -{75,-15,-38}, -{75,-15,-37}, -{75,-15,-36}, -{75,-15,-35}, -{75,-15,-34}, -{75,-15,-33}, -{75,-15,-32}, -{75,-15,-31}, -{75,-15,-30}, -{75,-15,-29}, -{75,-15,-28}, -{75,-15,-27}, -{75,-15,-26}, -{75,-15,-25}, -{75,-15,-24}, -{75,-15,-23}, -{75,-15,-22}, -{75,-15,-21}, -{75,-15,-20}, -{75,-15,-19}, -{75,-15,-18}, -{75,-15,-17}, -{75,-15,-16}, -{75,-15,-15}, -{75,-15,-14}, -{75,-15,-13}, -{75,-15,-12}, -{75,-15,-11}, -{75,-15,-10}, -{75,-15,-9}, -{75,-15,-8}, -{75,-15,-7}, -{75,-15,-6}, -{75,-15,-5}, -{75,-15,-4}, -{75,-15,-3}, -{75,-15,-2}, -{75,-15,-1}, -{75,-15,0}, -{75,-15,1}, -{75,-15,2}, -{75,-15,3}, -{75,-15,4}, -{75,-15,5}, -{75,-15,6}, -{75,-15,7}, -{75,-15,8}, -{75,-15,9}, -{75,-15,10}, -{75,-15,11}, -{75,-15,12}, -{75,-15,13}, -{75,-15,14}, -{75,-15,15}, -{75,-15,16}, -{75,-15,17}, -{75,-15,18}, -{75,-15,19}, -{75,-15,20}, -{75,-15,21}, -{75,-15,22}, -{75,-15,23}, -{75,-15,24}, -{75,-15,25}, -{75,-15,26}, -{75,-15,27}, -{75,-15,28}, -{75,-15,29}, -{75,-15,30}, -{75,-15,31}, -{75,-15,32}, -{75,-15,33}, -{75,-15,34}, -{75,-15,35}, -{75,-15,36}, -{75,-15,37}, -{75,-15,38}, -{75,-15,39}, -{75,-15,40}, -{75,-15,41}, -{75,-15,42}, -{75,-15,43}, -{75,-15,44}, -{75,-15,45}, -{75,-15,46}, -{75,-15,47}, -{75,-15,48}, -{75,-15,49}, -{75,-15,50}, -{75,-15,51}, -{75,-15,52}, -{75,-15,53}, -{75,-15,54}, -{75,-15,55}, -{75,-15,56}, -{75,-15,57}, -{75,-15,58}, -{75,-15,59}, -{75,-15,60}, -{75,-15,61}, -{75,-15,62}, -{75,-15,63}, -{75,-15,64}, -{75,-15,65}, -{75,-15,66}, -{75,-15,67}, -{75,-15,68}, -{75,-15,69}, -{75,-15,70}, -{75,-15,71}, -{75,-15,72}, -{75,-15,73}, -{75,-15,74}, -{75,-15,75}, -{75,-15,76}, -{75,-14,-38}, -{75,-14,-37}, -{75,-14,-36}, -{75,-14,-35}, -{75,-14,-34}, -{75,-14,-33}, -{75,-14,-32}, -{75,-14,-31}, -{75,-14,-30}, -{75,-14,-29}, -{75,-14,-28}, -{75,-14,-27}, -{75,-14,-26}, -{75,-14,-25}, -{75,-14,-24}, -{75,-14,-23}, -{75,-14,-22}, -{75,-14,-21}, -{75,-14,-20}, -{75,-14,-19}, -{75,-14,-18}, -{75,-14,-17}, -{75,-14,-16}, -{75,-14,-15}, -{75,-14,-14}, -{75,-14,-13}, -{75,-14,-12}, -{75,-14,-11}, -{75,-14,-10}, -{75,-14,-9}, -{75,-14,-8}, -{75,-14,-7}, -{75,-14,-6}, -{75,-14,-5}, -{75,-14,-4}, -{75,-14,-3}, -{75,-14,-2}, -{75,-14,-1}, -{75,-14,0}, -{75,-14,1}, -{75,-14,2}, -{75,-14,3}, -{75,-14,4}, -{75,-14,5}, -{75,-14,6}, -{75,-14,7}, -{75,-14,8}, -{75,-14,9}, -{75,-14,10}, -{75,-14,11}, -{75,-14,12}, -{75,-14,13}, -{75,-14,14}, -{75,-14,15}, -{75,-14,16}, -{75,-14,17}, -{75,-14,18}, -{75,-14,19}, -{75,-14,20}, -{75,-14,21}, -{75,-14,22}, -{75,-14,23}, -{75,-14,24}, -{75,-14,25}, -{75,-14,26}, -{75,-14,27}, -{75,-14,28}, -{75,-14,29}, -{75,-14,30}, -{75,-14,31}, -{75,-14,32}, -{75,-14,33}, -{75,-14,34}, -{75,-14,35}, -{75,-14,36}, -{75,-14,37}, -{75,-14,38}, -{75,-14,39}, -{75,-14,40}, -{75,-14,41}, -{75,-14,42}, -{75,-14,43}, -{75,-14,44}, -{75,-14,45}, -{75,-14,46}, -{75,-14,47}, -{75,-14,48}, -{75,-14,49}, -{75,-14,50}, -{75,-14,51}, -{75,-14,52}, -{75,-14,53}, -{75,-14,54}, -{75,-14,55}, -{75,-14,56}, -{75,-14,57}, -{75,-14,58}, -{75,-14,59}, -{75,-14,60}, -{75,-14,61}, -{75,-14,62}, -{75,-14,63}, -{75,-14,64}, -{75,-14,65}, -{75,-14,66}, -{75,-14,67}, -{75,-14,68}, -{75,-14,69}, -{75,-14,70}, -{75,-14,71}, -{75,-14,72}, -{75,-14,73}, -{75,-14,74}, -{75,-14,75}, -{75,-14,76}, -{75,-13,-38}, -{75,-13,-37}, -{75,-13,-36}, -{75,-13,-35}, -{75,-13,-34}, -{75,-13,-33}, -{75,-13,-32}, -{75,-13,-31}, -{75,-13,-30}, -{75,-13,-29}, -{75,-13,-28}, -{75,-13,-27}, -{75,-13,-26}, -{75,-13,-25}, -{75,-13,-24}, -{75,-13,-23}, -{75,-13,-22}, -{75,-13,-21}, -{75,-13,-20}, -{75,-13,-19}, -{75,-13,-18}, -{75,-13,-17}, -{75,-13,-16}, -{75,-13,-15}, -{75,-13,-14}, -{75,-13,-13}, -{75,-13,-12}, -{75,-13,-11}, -{75,-13,-10}, -{75,-13,-9}, -{75,-13,-8}, -{75,-13,-7}, -{75,-13,-6}, -{75,-13,-5}, -{75,-13,-4}, -{75,-13,-3}, -{75,-13,-2}, -{75,-13,-1}, -{75,-13,0}, -{75,-13,1}, -{75,-13,2}, -{75,-13,3}, -{75,-13,4}, -{75,-13,5}, -{75,-13,6}, -{75,-13,7}, -{75,-13,8}, -{75,-13,9}, -{75,-13,10}, -{75,-13,11}, -{75,-13,12}, -{75,-13,13}, -{75,-13,14}, -{75,-13,15}, -{75,-13,16}, -{75,-13,17}, -{75,-13,18}, -{75,-13,19}, -{75,-13,20}, -{75,-13,21}, -{75,-13,22}, -{75,-13,23}, -{75,-13,24}, -{75,-13,25}, -{75,-13,26}, -{75,-13,27}, -{75,-13,28}, -{75,-13,29}, -{75,-13,30}, -{75,-13,31}, -{75,-13,32}, -{75,-13,33}, -{75,-13,34}, -{75,-13,35}, -{75,-13,36}, -{75,-13,37}, -{75,-13,38}, -{75,-13,39}, -{75,-13,40}, -{75,-13,41}, -{75,-13,42}, -{75,-13,43}, -{75,-13,44}, -{75,-13,45}, -{75,-13,46}, -{75,-13,47}, -{75,-13,48}, -{75,-13,49}, -{75,-13,50}, -{75,-13,51}, -{75,-13,52}, -{75,-13,53}, -{75,-13,54}, -{75,-13,55}, -{75,-13,56}, -{75,-13,57}, -{75,-13,58}, -{75,-13,59}, -{75,-13,60}, -{75,-13,61}, -{75,-13,62}, -{75,-13,63}, -{75,-13,64}, -{75,-13,65}, -{75,-13,66}, -{75,-13,67}, -{75,-13,68}, -{75,-13,69}, -{75,-13,70}, -{75,-13,71}, -{75,-13,72}, -{75,-13,73}, -{75,-13,74}, -{75,-13,75}, -{75,-13,76}, -{75,-12,-38}, -{75,-12,-37}, -{75,-12,-36}, -{75,-12,-35}, -{75,-12,-34}, -{75,-12,-33}, -{75,-12,-32}, -{75,-12,-31}, -{75,-12,-30}, -{75,-12,-29}, -{75,-12,-28}, -{75,-12,-27}, -{75,-12,-26}, -{75,-12,-25}, -{75,-12,-24}, -{75,-12,-23}, -{75,-12,-22}, -{75,-12,-21}, -{75,-12,-20}, -{75,-12,-19}, -{75,-12,-18}, -{75,-12,-17}, -{75,-12,-16}, -{75,-12,-15}, -{75,-12,-14}, -{75,-12,-13}, -{75,-12,-12}, -{75,-12,-11}, -{75,-12,-10}, -{75,-12,-9}, -{75,-12,-8}, -{75,-12,-7}, -{75,-12,-6}, -{75,-12,-5}, -{75,-12,-4}, -{75,-12,-3}, -{75,-12,-2}, -{75,-12,-1}, -{75,-12,0}, -{75,-12,1}, -{75,-12,2}, -{75,-12,3}, -{75,-12,4}, -{75,-12,5}, -{75,-12,6}, -{75,-12,7}, -{75,-12,8}, -{75,-12,9}, -{75,-12,10}, -{75,-12,11}, -{75,-12,12}, -{75,-12,13}, -{75,-12,14}, -{75,-12,15}, -{75,-12,16}, -{75,-12,17}, -{75,-12,18}, -{75,-12,19}, -{75,-12,20}, -{75,-12,21}, -{75,-12,22}, -{75,-12,23}, -{75,-12,24}, -{75,-12,25}, -{75,-12,26}, -{75,-12,27}, -{75,-12,28}, -{75,-12,29}, -{75,-12,30}, -{75,-12,31}, -{75,-12,32}, -{75,-12,33}, -{75,-12,34}, -{75,-12,35}, -{75,-12,36}, -{75,-12,37}, -{75,-12,38}, -{75,-12,39}, -{75,-12,40}, -{75,-12,41}, -{75,-12,42}, -{75,-12,43}, -{75,-12,44}, -{75,-12,45}, -{75,-12,46}, -{75,-12,47}, -{75,-12,48}, -{75,-12,49}, -{75,-12,50}, -{75,-12,51}, -{75,-12,52}, -{75,-12,53}, -{75,-12,54}, -{75,-12,55}, -{75,-12,56}, -{75,-12,57}, -{75,-12,58}, -{75,-12,59}, -{75,-12,60}, -{75,-12,61}, -{75,-12,62}, -{75,-12,63}, -{75,-12,64}, -{75,-12,65}, -{75,-12,66}, -{75,-12,67}, -{75,-12,68}, -{75,-12,69}, -{75,-12,70}, -{75,-12,71}, -{75,-12,72}, -{75,-12,73}, -{75,-12,74}, -{75,-12,75}, -{75,-12,76}, -{75,-11,-38}, -{75,-11,-37}, -{75,-11,-36}, -{75,-11,-35}, -{75,-11,-34}, -{75,-11,-33}, -{75,-11,-32}, -{75,-11,-31}, -{75,-11,-30}, -{75,-11,-29}, -{75,-11,-28}, -{75,-11,-27}, -{75,-11,-26}, -{75,-11,-25}, -{75,-11,-24}, -{75,-11,-23}, -{75,-11,-22}, -{75,-11,-21}, -{75,-11,-20}, -{75,-11,-19}, -{75,-11,-18}, -{75,-11,-17}, -{75,-11,-16}, -{75,-11,-15}, -{75,-11,-14}, -{75,-11,-13}, -{75,-11,-12}, -{75,-11,-11}, -{75,-11,-10}, -{75,-11,-9}, -{75,-11,-8}, -{75,-11,-7}, -{75,-11,-6}, -{75,-11,-5}, -{75,-11,-4}, -{75,-11,-3}, -{75,-11,-2}, -{75,-11,-1}, -{75,-11,0}, -{75,-11,1}, -{75,-11,2}, -{75,-11,3}, -{75,-11,4}, -{75,-11,5}, -{75,-11,6}, -{75,-11,7}, -{75,-11,8}, -{75,-11,9}, -{75,-11,10}, -{75,-11,11}, -{75,-11,12}, -{75,-11,13}, -{75,-11,14}, -{75,-11,15}, -{75,-11,16}, -{75,-11,17}, -{75,-11,18}, -{75,-11,19}, -{75,-11,20}, -{75,-11,21}, -{75,-11,22}, -{75,-11,23}, -{75,-11,24}, -{75,-11,25}, -{75,-11,26}, -{75,-11,27}, -{75,-11,28}, -{75,-11,29}, -{75,-11,30}, -{75,-11,31}, -{75,-11,32}, -{75,-11,33}, -{75,-11,34}, -{75,-11,35}, -{75,-11,36}, -{75,-11,37}, -{75,-11,38}, -{75,-11,39}, -{75,-11,40}, -{75,-11,41}, -{75,-11,42}, -{75,-11,43}, -{75,-11,44}, -{75,-11,45}, -{75,-11,46}, -{75,-11,47}, -{75,-11,48}, -{75,-11,49}, -{75,-11,50}, -{75,-11,51}, -{75,-11,52}, -{75,-11,53}, -{75,-11,54}, -{75,-11,55}, -{75,-11,56}, -{75,-11,57}, -{75,-11,58}, -{75,-11,59}, -{75,-11,60}, -{75,-11,61}, -{75,-11,62}, -{75,-11,63}, -{75,-11,64}, -{75,-11,65}, -{75,-11,66}, -{75,-11,67}, -{75,-11,68}, -{75,-11,69}, -{75,-11,70}, -{75,-11,71}, -{75,-11,72}, -{75,-11,73}, -{75,-11,74}, -{75,-11,75}, -{75,-11,76}, -{75,-10,-38}, -{75,-10,-37}, -{75,-10,-36}, -{75,-10,-35}, -{75,-10,-34}, -{75,-10,-33}, -{75,-10,-32}, -{75,-10,-31}, -{75,-10,-30}, -{75,-10,-29}, -{75,-10,-28}, -{75,-10,-27}, -{75,-10,-26}, -{75,-10,-25}, -{75,-10,-24}, -{75,-10,-23}, -{75,-10,-22}, -{75,-10,-21}, -{75,-10,-20}, -{75,-10,-19}, -{75,-10,-18}, -{75,-10,-17}, -{75,-10,-16}, -{75,-10,-15}, -{75,-10,-14}, -{75,-10,-13}, -{75,-10,-12}, -{75,-10,-11}, -{75,-10,-10}, -{75,-10,-9}, -{75,-10,-8}, -{75,-10,-7}, -{75,-10,-6}, -{75,-10,-5}, -{75,-10,-4}, -{75,-10,-3}, -{75,-10,-2}, -{75,-10,-1}, -{75,-10,0}, -{75,-10,1}, -{75,-10,2}, -{75,-10,3}, -{75,-10,4}, -{75,-10,5}, -{75,-10,6}, -{75,-10,7}, -{75,-10,8}, -{75,-10,9}, -{75,-10,10}, -{75,-10,11}, -{75,-10,12}, -{75,-10,13}, -{75,-10,14}, -{75,-10,15}, -{75,-10,16}, -{75,-10,17}, -{75,-10,18}, -{75,-10,19}, -{75,-10,20}, -{75,-10,21}, -{75,-10,22}, -{75,-10,23}, -{75,-10,24}, -{75,-10,25}, -{75,-10,26}, -{75,-10,27}, -{75,-10,28}, -{75,-10,29}, -{75,-10,30}, -{75,-10,31}, -{75,-10,32}, -{75,-10,33}, -{75,-10,34}, -{75,-10,35}, -{75,-10,36}, -{75,-10,37}, -{75,-10,38}, -{75,-10,39}, -{75,-10,40}, -{75,-10,41}, -{75,-10,42}, -{75,-10,43}, -{75,-10,44}, -{75,-10,45}, -{75,-10,46}, -{75,-10,47}, -{75,-10,48}, -{75,-10,49}, -{75,-10,50}, -{75,-10,51}, -{75,-10,52}, -{75,-10,53}, -{75,-10,54}, -{75,-10,55}, -{75,-10,56}, -{75,-10,57}, -{75,-10,58}, -{75,-10,59}, -{75,-10,60}, -{75,-10,61}, -{75,-10,62}, -{75,-10,63}, -{75,-10,64}, -{75,-10,65}, -{75,-10,66}, -{75,-10,67}, -{75,-10,68}, -{75,-10,69}, -{75,-10,70}, -{75,-10,71}, -{75,-10,72}, -{75,-10,73}, -{75,-10,74}, -{75,-10,75}, -{75,-10,76}, -{75,-9,-38}, -{75,-9,-37}, -{75,-9,-36}, -{75,-9,-35}, -{75,-9,-34}, -{75,-9,-33}, -{75,-9,-32}, -{75,-9,-31}, -{75,-9,-30}, -{75,-9,-29}, -{75,-9,-28}, -{75,-9,-27}, -{75,-9,-26}, -{75,-9,-25}, -{75,-9,-24}, -{75,-9,-23}, -{75,-9,-22}, -{75,-9,-21}, -{75,-9,-20}, -{75,-9,-19}, -{75,-9,-18}, -{75,-9,-17}, -{75,-9,-16}, -{75,-9,-15}, -{75,-9,-14}, -{75,-9,-13}, -{75,-9,-12}, -{75,-9,-11}, -{75,-9,-10}, -{75,-9,-9}, -{75,-9,-8}, -{75,-9,-7}, -{75,-9,-6}, -{75,-9,-5}, -{75,-9,-4}, -{75,-9,-3}, -{75,-9,-2}, -{75,-9,-1}, -{75,-9,0}, -{75,-9,1}, -{75,-9,2}, -{75,-9,3}, -{75,-9,4}, -{75,-9,5}, -{75,-9,6}, -{75,-9,7}, -{75,-9,8}, -{75,-9,9}, -{75,-9,10}, -{75,-9,11}, -{75,-9,12}, -{75,-9,13}, -{75,-9,14}, -{75,-9,15}, -{75,-9,16}, -{75,-9,17}, -{75,-9,18}, -{75,-9,19}, -{75,-9,20}, -{75,-9,21}, -{75,-9,22}, -{75,-9,23}, -{75,-9,24}, -{75,-9,25}, -{75,-9,26}, -{75,-9,27}, -{75,-9,28}, -{75,-9,29}, -{75,-9,30}, -{75,-9,31}, -{75,-9,32}, -{75,-9,33}, -{75,-9,34}, -{75,-9,35}, -{75,-9,36}, -{75,-9,37}, -{75,-9,38}, -{75,-9,39}, -{75,-9,40}, -{75,-9,41}, -{75,-9,42}, -{75,-9,43}, -{75,-9,44}, -{75,-9,45}, -{75,-9,46}, -{75,-9,47}, -{75,-9,48}, -{75,-9,49}, -{75,-9,50}, -{75,-9,51}, -{75,-9,52}, -{75,-9,53}, -{75,-9,54}, -{75,-9,55}, -{75,-9,56}, -{75,-9,57}, -{75,-9,58}, -{75,-9,59}, -{75,-9,60}, -{75,-9,61}, -{75,-9,62}, -{75,-9,63}, -{75,-9,64}, -{75,-9,65}, -{75,-9,66}, -{75,-9,67}, -{75,-9,68}, -{75,-9,69}, -{75,-9,70}, -{75,-9,71}, -{75,-9,72}, -{75,-9,73}, -{75,-9,74}, -{75,-9,75}, -{75,-9,76}, -{75,-8,-38}, -{75,-8,-37}, -{75,-8,-36}, -{75,-8,-35}, -{75,-8,-34}, -{75,-8,-33}, -{75,-8,-32}, -{75,-8,-31}, -{75,-8,-30}, -{75,-8,-29}, -{75,-8,-28}, -{75,-8,-27}, -{75,-8,-26}, -{75,-8,-25}, -{75,-8,-24}, -{75,-8,-23}, -{75,-8,-22}, -{75,-8,-21}, -{75,-8,-20}, -{75,-8,-19}, -{75,-8,-18}, -{75,-8,-17}, -{75,-8,-16}, -{75,-8,-15}, -{75,-8,-14}, -{75,-8,-13}, -{75,-8,-12}, -{75,-8,-11}, -{75,-8,-10}, -{75,-8,-9}, -{75,-8,-8}, -{75,-8,-7}, -{75,-8,-6}, -{75,-8,-5}, -{75,-8,-4}, -{75,-8,-3}, -{75,-8,-2}, -{75,-8,-1}, -{75,-8,0}, -{75,-8,1}, -{75,-8,2}, -{75,-8,3}, -{75,-8,4}, -{75,-8,5}, -{75,-8,6}, -{75,-8,7}, -{75,-8,8}, -{75,-8,9}, -{75,-8,10}, -{75,-8,11}, -{75,-8,12}, -{75,-8,13}, -{75,-8,14}, -{75,-8,15}, -{75,-8,16}, -{75,-8,17}, -{75,-8,18}, -{75,-8,19}, -{75,-8,20}, -{75,-8,21}, -{75,-8,22}, -{75,-8,23}, -{75,-8,24}, -{75,-8,25}, -{75,-8,26}, -{75,-8,27}, -{75,-8,28}, -{75,-8,29}, -{75,-8,30}, -{75,-8,31}, -{75,-8,32}, -{75,-8,33}, -{75,-8,34}, -{75,-8,35}, -{75,-8,36}, -{75,-8,37}, -{75,-8,38}, -{75,-8,39}, -{75,-8,40}, -{75,-8,41}, -{75,-8,42}, -{75,-8,43}, -{75,-8,44}, -{75,-8,45}, -{75,-8,46}, -{75,-8,47}, -{75,-8,48}, -{75,-8,49}, -{75,-8,50}, -{75,-8,51}, -{75,-8,52}, -{75,-8,53}, -{75,-8,54}, -{75,-8,55}, -{75,-8,56}, -{75,-8,57}, -{75,-8,58}, -{75,-8,59}, -{75,-8,60}, -{75,-8,61}, -{75,-8,62}, -{75,-8,63}, -{75,-8,64}, -{75,-8,65}, -{75,-8,66}, -{75,-8,67}, -{75,-8,68}, -{75,-8,69}, -{75,-8,70}, -{75,-8,71}, -{75,-8,72}, -{75,-8,73}, -{75,-8,74}, -{75,-8,75}, -{75,-8,76}, -{75,-7,-38}, -{75,-7,-37}, -{75,-7,-36}, -{75,-7,-35}, -{75,-7,-34}, -{75,-7,-33}, -{75,-7,-32}, -{75,-7,-31}, -{75,-7,-30}, -{75,-7,-29}, -{75,-7,-28}, -{75,-7,-27}, -{75,-7,-26}, -{75,-7,-25}, -{75,-7,-24}, -{75,-7,-23}, -{75,-7,-22}, -{75,-7,-21}, -{75,-7,-20}, -{75,-7,-19}, -{75,-7,-18}, -{75,-7,-17}, -{75,-7,-16}, -{75,-7,-15}, -{75,-7,-14}, -{75,-7,-13}, -{75,-7,-12}, -{75,-7,-11}, -{75,-7,-10}, -{75,-7,-9}, -{75,-7,-8}, -{75,-7,-7}, -{75,-7,-6}, -{75,-7,-5}, -{75,-7,-4}, -{75,-7,-3}, -{75,-7,-2}, -{75,-7,-1}, -{75,-7,0}, -{75,-7,1}, -{75,-7,2}, -{75,-7,3}, -{75,-7,4}, -{75,-7,5}, -{75,-7,6}, -{75,-7,7}, -{75,-7,8}, -{75,-7,9}, -{75,-7,10}, -{75,-7,11}, -{75,-7,12}, -{75,-7,13}, -{75,-7,14}, -{75,-7,15}, -{75,-7,16}, -{75,-7,17}, -{75,-7,18}, -{75,-7,19}, -{75,-7,20}, -{75,-7,21}, -{75,-7,22}, -{75,-7,23}, -{75,-7,24}, -{75,-7,25}, -{75,-7,26}, -{75,-7,27}, -{75,-7,28}, -{75,-7,29}, -{75,-7,30}, -{75,-7,31}, -{75,-7,32}, -{75,-7,33}, -{75,-7,34}, -{75,-7,35}, -{75,-7,36}, -{75,-7,37}, -{75,-7,38}, -{75,-7,39}, -{75,-7,40}, -{75,-7,41}, -{75,-7,42}, -{75,-7,43}, -{75,-7,44}, -{75,-7,45}, -{75,-7,46}, -{75,-7,47}, -{75,-7,48}, -{75,-7,49}, -{75,-7,50}, -{75,-7,51}, -{75,-7,52}, -{75,-7,53}, -{75,-7,54}, -{75,-7,55}, -{75,-7,56}, -{75,-7,57}, -{75,-7,58}, -{75,-7,59}, -{75,-7,60}, -{75,-7,61}, -{75,-7,62}, -{75,-7,63}, -{75,-7,64}, -{75,-7,65}, -{75,-7,66}, -{75,-7,67}, -{75,-7,68}, -{75,-7,69}, -{75,-7,70}, -{75,-7,71}, -{75,-7,72}, -{75,-7,73}, -{75,-7,74}, -{75,-7,75}, -{75,-7,76}, -{75,-6,-38}, -{75,-6,-37}, -{75,-6,-36}, -{75,-6,-35}, -{75,-6,-34}, -{75,-6,-33}, -{75,-6,-32}, -{75,-6,-31}, -{75,-6,-30}, -{75,-6,-29}, -{75,-6,-28}, -{75,-6,-27}, -{75,-6,-26}, -{75,-6,-25}, -{75,-6,-24}, -{75,-6,-23}, -{75,-6,-22}, -{75,-6,-21}, -{75,-6,-20}, -{75,-6,-19}, -{75,-6,-18}, -{75,-6,-17}, -{75,-6,-16}, -{75,-6,-15}, -{75,-6,-14}, -{75,-6,-13}, -{75,-6,-12}, -{75,-6,-11}, -{75,-6,-10}, -{75,-6,-9}, -{75,-6,-8}, -{75,-6,-7}, -{75,-6,-6}, -{75,-6,-5}, -{75,-6,-4}, -{75,-6,-3}, -{75,-6,-2}, -{75,-6,-1}, -{75,-6,0}, -{75,-6,1}, -{75,-6,2}, -{75,-6,3}, -{75,-6,4}, -{75,-6,5}, -{75,-6,6}, -{75,-6,7}, -{75,-6,8}, -{75,-6,9}, -{75,-6,10}, -{75,-6,11}, -{75,-6,12}, -{75,-6,13}, -{75,-6,14}, -{75,-6,15}, -{75,-6,16}, -{75,-6,17}, -{75,-6,18}, -{75,-6,19}, -{75,-6,20}, -{75,-6,21}, -{75,-6,22}, -{75,-6,23}, -{75,-6,24}, -{75,-6,25}, -{75,-6,26}, -{75,-6,27}, -{75,-6,28}, -{75,-6,29}, -{75,-6,30}, -{75,-6,31}, -{75,-6,32}, -{75,-6,33}, -{75,-6,34}, -{75,-6,35}, -{75,-6,36}, -{75,-6,37}, -{75,-6,38}, -{75,-6,39}, -{75,-6,40}, -{75,-6,41}, -{75,-6,42}, -{75,-6,43}, -{75,-6,44}, -{75,-6,45}, -{75,-6,46}, -{75,-6,47}, -{75,-6,48}, -{75,-6,49}, -{75,-6,50}, -{75,-6,51}, -{75,-6,52}, -{75,-6,53}, -{75,-6,54}, -{75,-6,55}, -{75,-6,56}, -{75,-6,57}, -{75,-6,58}, -{75,-6,59}, -{75,-6,60}, -{75,-6,61}, -{75,-6,62}, -{75,-6,63}, -{75,-6,64}, -{75,-6,65}, -{75,-6,66}, -{75,-6,67}, -{75,-6,68}, -{75,-6,69}, -{75,-6,70}, -{75,-6,71}, -{75,-6,72}, -{75,-6,73}, -{75,-6,74}, -{75,-6,75}, -{75,-6,76}, -{75,-5,-38}, -{75,-5,-37}, -{75,-5,-36}, -{75,-5,-35}, -{75,-5,-34}, -{75,-5,-33}, -{75,-5,-32}, -{75,-5,-31}, -{75,-5,-30}, -{75,-5,-29}, -{75,-5,-28}, -{75,-5,-27}, -{75,-5,-26}, -{75,-5,-25}, -{75,-5,-24}, -{75,-5,-23}, -{75,-5,-22}, -{75,-5,-21}, -{75,-5,-20}, -{75,-5,-19}, -{75,-5,-18}, -{75,-5,-17}, -{75,-5,-16}, -{75,-5,-15}, -{75,-5,-14}, -{75,-5,-13}, -{75,-5,-12}, -{75,-5,-11}, -{75,-5,-10}, -{75,-5,-9}, -{75,-5,-8}, -{75,-5,-7}, -{75,-5,-6}, -{75,-5,-5}, -{75,-5,-4}, -{75,-5,-3}, -{75,-5,-2}, -{75,-5,-1}, -{75,-5,0}, -{75,-5,1}, -{75,-5,2}, -{75,-5,3}, -{75,-5,4}, -{75,-5,5}, -{75,-5,6}, -{75,-5,7}, -{75,-5,8}, -{75,-5,9}, -{75,-5,10}, -{75,-5,11}, -{75,-5,12}, -{75,-5,13}, -{75,-5,14}, -{75,-5,15}, -{75,-5,16}, -{75,-5,17}, -{75,-5,18}, -{75,-5,19}, -{75,-5,20}, -{75,-5,21}, -{75,-5,22}, -{75,-5,23}, -{75,-5,24}, -{75,-5,25}, -{75,-5,26}, -{75,-5,27}, -{75,-5,28}, -{75,-5,29}, -{75,-5,30}, -{75,-5,31}, -{75,-5,32}, -{75,-5,33}, -{75,-5,34}, -{75,-5,35}, -{75,-5,36}, -{75,-5,37}, -{75,-5,38}, -{75,-5,39}, -{75,-5,40}, -{75,-5,41}, -{75,-5,42}, -{75,-5,43}, -{75,-5,44}, -{75,-5,45}, -{75,-5,46}, -{75,-5,47}, -{75,-5,48}, -{75,-5,49}, -{75,-5,50}, -{75,-5,51}, -{75,-5,52}, -{75,-5,53}, -{75,-5,54}, -{75,-5,55}, -{75,-5,56}, -{75,-5,57}, -{75,-5,58}, -{75,-5,59}, -{75,-5,60}, -{75,-5,61}, -{75,-5,62}, -{75,-5,63}, -{75,-5,64}, -{75,-5,65}, -{75,-5,66}, -{75,-5,67}, -{75,-5,68}, -{75,-5,69}, -{75,-5,70}, -{75,-5,71}, -{75,-5,72}, -{75,-5,73}, -{75,-5,74}, -{75,-5,75}, -{75,-5,76}, -{75,-4,-38}, -{75,-4,-37}, -{75,-4,-36}, -{75,-4,-35}, -{75,-4,-34}, -{75,-4,-33}, -{75,-4,-32}, -{75,-4,-31}, -{75,-4,-30}, -{75,-4,-29}, -{75,-4,-28}, -{75,-4,-27}, -{75,-4,-26}, -{75,-4,-25}, -{75,-4,-24}, -{75,-4,-23}, -{75,-4,-22}, -{75,-4,-21}, -{75,-4,-20}, -{75,-4,-19}, -{75,-4,-18}, -{75,-4,-17}, -{75,-4,-16}, -{75,-4,-15}, -{75,-4,-14}, -{75,-4,-13}, -{75,-4,-12}, -{75,-4,-11}, -{75,-4,-10}, -{75,-4,-9}, -{75,-4,-8}, -{75,-4,-7}, -{75,-4,-6}, -{75,-4,-5}, -{75,-4,-4}, -{75,-4,-3}, -{75,-4,-2}, -{75,-4,-1}, -{75,-4,0}, -{75,-4,1}, -{75,-4,2}, -{75,-4,3}, -{75,-4,4}, -{75,-4,5}, -{75,-4,6}, -{75,-4,7}, -{75,-4,8}, -{75,-4,9}, -{75,-4,10}, -{75,-4,11}, -{75,-4,12}, -{75,-4,13}, -{75,-4,14}, -{75,-4,15}, -{75,-4,16}, -{75,-4,17}, -{75,-4,18}, -{75,-4,19}, -{75,-4,20}, -{75,-4,21}, -{75,-4,22}, -{75,-4,23}, -{75,-4,24}, -{75,-4,25}, -{75,-4,26}, -{75,-4,27}, -{75,-4,28}, -{75,-4,29}, -{75,-4,30}, -{75,-4,31}, -{75,-4,32}, -{75,-4,33}, -{75,-4,34}, -{75,-4,35}, -{75,-4,36}, -{75,-4,37}, -{75,-4,38}, -{75,-4,39}, -{75,-4,40}, -{75,-4,41}, -{75,-4,42}, -{75,-4,43}, -{75,-4,44}, -{75,-4,45}, -{75,-4,46}, -{75,-4,47}, -{75,-4,48}, -{75,-4,49}, -{75,-4,50}, -{75,-4,51}, -{75,-4,52}, -{75,-4,53}, -{75,-4,54}, -{75,-4,55}, -{75,-4,56}, -{75,-4,57}, -{75,-4,58}, -{75,-4,59}, -{75,-4,60}, -{75,-4,61}, -{75,-4,62}, -{75,-4,63}, -{75,-4,64}, -{75,-4,65}, -{75,-4,66}, -{75,-4,67}, -{75,-4,68}, -{75,-4,69}, -{75,-4,70}, -{75,-4,71}, -{75,-4,72}, -{75,-4,73}, -{75,-4,74}, -{75,-4,75}, -{75,-4,76}, -{75,-4,77}, -{75,-3,-38}, -{75,-3,-37}, -{75,-3,-36}, -{75,-3,-35}, -{75,-3,-34}, -{75,-3,-33}, -{75,-3,-32}, -{75,-3,-31}, -{75,-3,-30}, -{75,-3,-29}, -{75,-3,-28}, -{75,-3,-27}, -{75,-3,-26}, -{75,-3,-25}, -{75,-3,-24}, -{75,-3,-23}, -{75,-3,-22}, -{75,-3,-21}, -{75,-3,-20}, -{75,-3,-19}, -{75,-3,-18}, -{75,-3,-17}, -{75,-3,-16}, -{75,-3,-15}, -{75,-3,-14}, -{75,-3,-13}, -{75,-3,-12}, -{75,-3,-11}, -{75,-3,-10}, -{75,-3,-9}, -{75,-3,-8}, -{75,-3,-7}, -{75,-3,-6}, -{75,-3,-5}, -{75,-3,-4}, -{75,-3,-3}, -{75,-3,-2}, -{75,-3,-1}, -{75,-3,0}, -{75,-3,1}, -{75,-3,2}, -{75,-3,3}, -{75,-3,4}, -{75,-3,5}, -{75,-3,6}, -{75,-3,7}, -{75,-3,8}, -{75,-3,9}, -{75,-3,10}, -{75,-3,11}, -{75,-3,12}, -{75,-3,13}, -{75,-3,14}, -{75,-3,15}, -{75,-3,16}, -{75,-3,17}, -{75,-3,18}, -{75,-3,19}, -{75,-3,20}, -{75,-3,21}, -{75,-3,22}, -{75,-3,23}, -{75,-3,24}, -{75,-3,25}, -{75,-3,26}, -{75,-3,27}, -{75,-3,28}, -{75,-3,29}, -{75,-3,30}, -{75,-3,31}, -{75,-3,32}, -{75,-3,33}, -{75,-3,34}, -{75,-3,35}, -{75,-3,36}, -{75,-3,37}, -{75,-3,38}, -{75,-3,39}, -{75,-3,40}, -{75,-3,41}, -{75,-3,42}, -{75,-3,43}, -{75,-3,44}, -{75,-3,45}, -{75,-3,46}, -{75,-3,47}, -{75,-3,48}, -{75,-3,49}, -{75,-3,50}, -{75,-3,51}, -{75,-3,52}, -{75,-3,53}, -{75,-3,54}, -{75,-3,55}, -{75,-3,56}, -{75,-3,57}, -{75,-3,58}, -{75,-3,59}, -{75,-3,60}, -{75,-3,61}, -{75,-3,62}, -{75,-3,63}, -{75,-3,64}, -{75,-3,65}, -{75,-3,66}, -{75,-3,67}, -{75,-3,68}, -{75,-3,69}, -{75,-3,70}, -{75,-3,71}, -{75,-3,72}, -{75,-3,73}, -{75,-3,74}, -{75,-3,75}, -{75,-3,76}, -{75,-3,77}, -{75,-2,-38}, -{75,-2,-37}, -{75,-2,-36}, -{75,-2,-35}, -{75,-2,-34}, -{75,-2,-33}, -{75,-2,-32}, -{75,-2,-31}, -{75,-2,-30}, -{75,-2,-29}, -{75,-2,-28}, -{75,-2,-27}, -{75,-2,-26}, -{75,-2,-25}, -{75,-2,-24}, -{75,-2,-23}, -{75,-2,-22}, -{75,-2,-21}, -{75,-2,-20}, -{75,-2,-19}, -{75,-2,-18}, -{75,-2,-17}, -{75,-2,-16}, -{75,-2,-15}, -{75,-2,-14}, -{75,-2,-13}, -{75,-2,-12}, -{75,-2,-11}, -{75,-2,-10}, -{75,-2,-9}, -{75,-2,-8}, -{75,-2,-7}, -{75,-2,-6}, -{75,-2,-5}, -{75,-2,-4}, -{75,-2,-3}, -{75,-2,-2}, -{75,-2,-1}, -{75,-2,0}, -{75,-2,1}, -{75,-2,2}, -{75,-2,3}, -{75,-2,4}, -{75,-2,5}, -{75,-2,6}, -{75,-2,7}, -{75,-2,8}, -{75,-2,9}, -{75,-2,10}, -{75,-2,11}, -{75,-2,12}, -{75,-2,13}, -{75,-2,14}, -{75,-2,15}, -{75,-2,16}, -{75,-2,17}, -{75,-2,18}, -{75,-2,19}, -{75,-2,20}, -{75,-2,21}, -{75,-2,22}, -{75,-2,23}, -{75,-2,24}, -{75,-2,25}, -{75,-2,26}, -{75,-2,27}, -{75,-2,28}, -{75,-2,29}, -{75,-2,30}, -{75,-2,31}, -{75,-2,32}, -{75,-2,33}, -{75,-2,34}, -{75,-2,35}, -{75,-2,36}, -{75,-2,37}, -{75,-2,38}, -{75,-2,39}, -{75,-2,40}, -{75,-2,41}, -{75,-2,42}, -{75,-2,43}, -{75,-2,44}, -{75,-2,45}, -{75,-2,46}, -{75,-2,47}, -{75,-2,48}, -{75,-2,49}, -{75,-2,50}, -{75,-2,51}, -{75,-2,52}, -{75,-2,53}, -{75,-2,54}, -{75,-2,55}, -{75,-2,56}, -{75,-2,57}, -{75,-2,58}, -{75,-2,59}, -{75,-2,60}, -{75,-2,61}, -{75,-2,62}, -{75,-2,63}, -{75,-2,64}, -{75,-2,65}, -{75,-2,66}, -{75,-2,67}, -{75,-2,68}, -{75,-2,69}, -{75,-2,70}, -{75,-2,71}, -{75,-2,72}, -{75,-2,73}, -{75,-2,74}, -{75,-2,75}, -{75,-2,76}, -{75,-2,77}, -{75,-1,-38}, -{75,-1,-37}, -{75,-1,-36}, -{75,-1,-35}, -{75,-1,-34}, -{75,-1,-33}, -{75,-1,-32}, -{75,-1,-31}, -{75,-1,-30}, -{75,-1,-29}, -{75,-1,-28}, -{75,-1,-27}, -{75,-1,-26}, -{75,-1,-25}, -{75,-1,-24}, -{75,-1,-23}, -{75,-1,-22}, -{75,-1,-21}, -{75,-1,-20}, -{75,-1,-19}, -{75,-1,-18}, -{75,-1,-17}, -{75,-1,-16}, -{75,-1,-15}, -{75,-1,-14}, -{75,-1,-13}, -{75,-1,-12}, -{75,-1,-11}, -{75,-1,-10}, -{75,-1,-9}, -{75,-1,-8}, -{75,-1,-7}, -{75,-1,-6}, -{75,-1,-5}, -{75,-1,-4}, -{75,-1,-3}, -{75,-1,-2}, -{75,-1,-1}, -{75,-1,0}, -{75,-1,1}, -{75,-1,2}, -{75,-1,3}, -{75,-1,4}, -{75,-1,5}, -{75,-1,6}, -{75,-1,7}, -{75,-1,8}, -{75,-1,9}, -{75,-1,10}, -{75,-1,11}, -{75,-1,12}, -{75,-1,13}, -{75,-1,14}, -{75,-1,15}, -{75,-1,16}, -{75,-1,17}, -{75,-1,18}, -{75,-1,19}, -{75,-1,20}, -{75,-1,21}, -{75,-1,22}, -{75,-1,23}, -{75,-1,24}, -{75,-1,25}, -{75,-1,26}, -{75,-1,27}, -{75,-1,28}, -{75,-1,29}, -{75,-1,30}, -{75,-1,31}, -{75,-1,32}, -{75,-1,33}, -{75,-1,34}, -{75,-1,35}, -{75,-1,36}, -{75,-1,37}, -{75,-1,38}, -{75,-1,39}, -{75,-1,40}, -{75,-1,41}, -{75,-1,42}, -{75,-1,43}, -{75,-1,44}, -{75,-1,45}, -{75,-1,46}, -{75,-1,47}, -{75,-1,48}, -{75,-1,49}, -{75,-1,50}, -{75,-1,51}, -{75,-1,52}, -{75,-1,53}, -{75,-1,54}, -{75,-1,55}, -{75,-1,56}, -{75,-1,57}, -{75,-1,58}, -{75,-1,59}, -{75,-1,60}, -{75,-1,61}, -{75,-1,62}, -{75,-1,63}, -{75,-1,64}, -{75,-1,65}, -{75,-1,66}, -{75,-1,67}, -{75,-1,68}, -{75,-1,69}, -{75,-1,70}, -{75,-1,71}, -{75,-1,72}, -{75,-1,73}, -{75,-1,74}, -{75,-1,75}, -{75,-1,76}, -{75,-1,77}, -{75,0,-38}, -{75,0,-37}, -{75,0,-36}, -{75,0,-35}, -{75,0,-34}, -{75,0,-33}, -{75,0,-32}, -{75,0,-31}, -{75,0,-30}, -{75,0,-29}, -{75,0,-28}, -{75,0,-27}, -{75,0,-26}, -{75,0,-25}, -{75,0,-24}, -{75,0,-23}, -{75,0,-22}, -{75,0,-21}, -{75,0,-20}, -{75,0,-19}, -{75,0,-18}, -{75,0,-17}, -{75,0,-16}, -{75,0,-15}, -{75,0,-14}, -{75,0,-13}, -{75,0,-12}, -{75,0,-11}, -{75,0,-10}, -{75,0,-9}, -{75,0,-8}, -{75,0,-7}, -{75,0,-6}, -{75,0,-5}, -{75,0,-4}, -{75,0,-3}, -{75,0,-2}, -{75,0,-1}, -{75,0,0}, -{75,0,1}, -{75,0,2}, -{75,0,3}, -{75,0,4}, -{75,0,5}, -{75,0,6}, -{75,0,7}, -{75,0,8}, -{75,0,9}, -{75,0,10}, -{75,0,11}, -{75,0,12}, -{75,0,13}, -{75,0,14}, -{75,0,15}, -{75,0,16}, -{75,0,17}, -{75,0,18}, -{75,0,19}, -{75,0,20}, -{75,0,21}, -{75,0,22}, -{75,0,23}, -{75,0,24}, -{75,0,25}, -{75,0,26}, -{75,0,27}, -{75,0,28}, -{75,0,29}, -{75,0,30}, -{75,0,31}, -{75,0,32}, -{75,0,33}, -{75,0,34}, -{75,0,35}, -{75,0,36}, -{75,0,37}, -{75,0,38}, -{75,0,39}, -{75,0,40}, -{75,0,41}, -{75,0,42}, -{75,0,43}, -{75,0,44}, -{75,0,45}, -{75,0,46}, -{75,0,47}, -{75,0,48}, -{75,0,49}, -{75,0,50}, -{75,0,51}, -{75,0,52}, -{75,0,53}, -{75,0,54}, -{75,0,55}, -{75,0,56}, -{75,0,57}, -{75,0,58}, -{75,0,59}, -{75,0,60}, -{75,0,61}, -{75,0,62}, -{75,0,63}, -{75,0,64}, -{75,0,65}, -{75,0,66}, -{75,0,67}, -{75,0,68}, -{75,0,69}, -{75,0,70}, -{75,0,71}, -{75,0,72}, -{75,0,73}, -{75,0,74}, -{75,0,75}, -{75,0,76}, -{75,0,77}, -{75,1,-38}, -{75,1,-37}, -{75,1,-36}, -{75,1,-35}, -{75,1,-34}, -{75,1,-33}, -{75,1,-32}, -{75,1,-31}, -{75,1,-30}, -{75,1,-29}, -{75,1,-28}, -{75,1,-27}, -{75,1,-26}, -{75,1,-25}, -{75,1,-24}, -{75,1,-23}, -{75,1,-22}, -{75,1,-21}, -{75,1,-20}, -{75,1,-19}, -{75,1,-18}, -{75,1,-17}, -{75,1,-16}, -{75,1,-15}, -{75,1,-14}, -{75,1,-13}, -{75,1,-12}, -{75,1,-11}, -{75,1,-10}, -{75,1,-9}, -{75,1,-8}, -{75,1,-7}, -{75,1,-6}, -{75,1,-5}, -{75,1,-4}, -{75,1,-3}, -{75,1,-2}, -{75,1,-1}, -{75,1,0}, -{75,1,1}, -{75,1,2}, -{75,1,3}, -{75,1,4}, -{75,1,5}, -{75,1,6}, -{75,1,7}, -{75,1,8}, -{75,1,9}, -{75,1,10}, -{75,1,11}, -{75,1,12}, -{75,1,13}, -{75,1,14}, -{75,1,15}, -{75,1,16}, -{75,1,17}, -{75,1,18}, -{75,1,19}, -{75,1,20}, -{75,1,21}, -{75,1,22}, -{75,1,23}, -{75,1,24}, -{75,1,25}, -{75,1,26}, -{75,1,27}, -{75,1,28}, -{75,1,29}, -{75,1,30}, -{75,1,31}, -{75,1,32}, -{75,1,33}, -{75,1,34}, -{75,1,35}, -{75,1,36}, -{75,1,37}, -{75,1,38}, -{75,1,39}, -{75,1,40}, -{75,1,41}, -{75,1,42}, -{75,1,43}, -{75,1,44}, -{75,1,45}, -{75,1,46}, -{75,1,47}, -{75,1,48}, -{75,1,49}, -{75,1,50}, -{75,1,51}, -{75,1,52}, -{75,1,53}, -{75,1,54}, -{75,1,55}, -{75,1,56}, -{75,1,57}, -{75,1,58}, -{75,1,59}, -{75,1,60}, -{75,1,61}, -{75,1,62}, -{75,1,63}, -{75,1,64}, -{75,1,65}, -{75,1,66}, -{75,1,67}, -{75,1,68}, -{75,1,69}, -{75,1,70}, -{75,1,71}, -{75,1,72}, -{75,1,73}, -{75,1,74}, -{75,1,75}, -{75,1,76}, -{75,1,77}, -{75,2,-38}, -{75,2,-37}, -{75,2,-36}, -{75,2,-35}, -{75,2,-34}, -{75,2,-33}, -{75,2,-32}, -{75,2,-31}, -{75,2,-30}, -{75,2,-29}, -{75,2,-28}, -{75,2,-27}, -{75,2,-26}, -{75,2,-25}, -{75,2,-24}, -{75,2,-23}, -{75,2,-22}, -{75,2,-21}, -{75,2,-20}, -{75,2,-19}, -{75,2,-18}, -{75,2,-17}, -{75,2,-16}, -{75,2,-15}, -{75,2,-14}, -{75,2,-13}, -{75,2,-12}, -{75,2,-11}, -{75,2,-10}, -{75,2,-9}, -{75,2,-8}, -{75,2,-7}, -{75,2,-6}, -{75,2,-5}, -{75,2,-4}, -{75,2,-3}, -{75,2,-2}, -{75,2,-1}, -{75,2,0}, -{75,2,1}, -{75,2,2}, -{75,2,3}, -{75,2,4}, -{75,2,5}, -{75,2,6}, -{75,2,7}, -{75,2,8}, -{75,2,9}, -{75,2,10}, -{75,2,11}, -{75,2,12}, -{75,2,13}, -{75,2,14}, -{75,2,15}, -{75,2,16}, -{75,2,17}, -{75,2,18}, -{75,2,19}, -{75,2,20}, -{75,2,21}, -{75,2,22}, -{75,2,23}, -{75,2,24}, -{75,2,25}, -{75,2,26}, -{75,2,27}, -{75,2,28}, -{75,2,29}, -{75,2,30}, -{75,2,31}, -{75,2,32}, -{75,2,33}, -{75,2,34}, -{75,2,35}, -{75,2,36}, -{75,2,37}, -{75,2,38}, -{75,2,39}, -{75,2,40}, -{75,2,41}, -{75,2,42}, -{75,2,43}, -{75,2,44}, -{75,2,45}, -{75,2,46}, -{75,2,47}, -{75,2,48}, -{75,2,49}, -{75,2,50}, -{75,2,51}, -{75,2,52}, -{75,2,53}, -{75,2,54}, -{75,2,55}, -{75,2,56}, -{75,2,57}, -{75,2,58}, -{75,2,59}, -{75,2,60}, -{75,2,61}, -{75,2,62}, -{75,2,63}, -{75,2,64}, -{75,2,65}, -{75,2,66}, -{75,2,67}, -{75,2,68}, -{75,2,69}, -{75,2,70}, -{75,2,71}, -{75,2,72}, -{75,2,73}, -{75,2,74}, -{75,2,75}, -{75,2,76}, -{75,2,77}, -{75,3,-38}, -{75,3,-37}, -{75,3,-36}, -{75,3,-35}, -{75,3,-34}, -{75,3,-33}, -{75,3,-32}, -{75,3,-31}, -{75,3,-30}, -{75,3,-29}, -{75,3,-28}, -{75,3,-27}, -{75,3,-26}, -{75,3,-25}, -{75,3,-24}, -{75,3,-23}, -{75,3,-22}, -{75,3,-21}, -{75,3,-20}, -{75,3,-19}, -{75,3,-18}, -{75,3,-17}, -{75,3,-16}, -{75,3,-15}, -{75,3,-14}, -{75,3,-13}, -{75,3,-12}, -{75,3,-11}, -{75,3,-10}, -{75,3,-9}, -{75,3,-8}, -{75,3,-7}, -{75,3,-6}, -{75,3,-5}, -{75,3,-4}, -{75,3,-3}, -{75,3,-2}, -{75,3,-1}, -{75,3,0}, -{75,3,1}, -{75,3,2}, -{75,3,3}, -{75,3,4}, -{75,3,5}, -{75,3,6}, -{75,3,7}, -{75,3,8}, -{75,3,9}, -{75,3,10}, -{75,3,11}, -{75,3,12}, -{75,3,13}, -{75,3,14}, -{75,3,15}, -{75,3,16}, -{75,3,17}, -{75,3,18}, -{75,3,19}, -{75,3,20}, -{75,3,21}, -{75,3,22}, -{75,3,23}, -{75,3,24}, -{75,3,25}, -{75,3,26}, -{75,3,27}, -{75,3,28}, -{75,3,29}, -{75,3,30}, -{75,3,31}, -{75,3,32}, -{75,3,33}, -{75,3,34}, -{75,3,35}, -{75,3,36}, -{75,3,37}, -{75,3,38}, -{75,3,39}, -{75,3,40}, -{75,3,41}, -{75,3,42}, -{75,3,43}, -{75,3,44}, -{75,3,45}, -{75,3,46}, -{75,3,47}, -{75,3,48}, -{75,3,49}, -{75,3,50}, -{75,3,51}, -{75,3,52}, -{75,3,53}, -{75,3,54}, -{75,3,55}, -{75,3,56}, -{75,3,57}, -{75,3,58}, -{75,3,59}, -{75,3,60}, -{75,3,61}, -{75,3,62}, -{75,3,63}, -{75,3,64}, -{75,3,65}, -{75,3,66}, -{75,3,67}, -{75,3,68}, -{75,3,69}, -{75,3,70}, -{75,3,71}, -{75,3,72}, -{75,3,73}, -{75,3,74}, -{75,3,75}, -{75,3,76}, -{75,3,77}, -{75,4,-38}, -{75,4,-37}, -{75,4,-36}, -{75,4,-35}, -{75,4,-34}, -{75,4,-33}, -{75,4,-32}, -{75,4,-31}, -{75,4,-30}, -{75,4,-29}, -{75,4,-28}, -{75,4,-27}, -{75,4,-26}, -{75,4,-25}, -{75,4,-24}, -{75,4,-23}, -{75,4,-22}, -{75,4,-21}, -{75,4,-20}, -{75,4,-19}, -{75,4,-18}, -{75,4,-17}, -{75,4,-16}, -{75,4,-15}, -{75,4,-14}, -{75,4,-13}, -{75,4,-12}, -{75,4,-11}, -{75,4,-10}, -{75,4,-9}, -{75,4,-8}, -{75,4,-7}, -{75,4,-6}, -{75,4,-5}, -{75,4,-4}, -{75,4,-3}, -{75,4,-2}, -{75,4,-1}, -{75,4,0}, -{75,4,1}, -{75,4,2}, -{75,4,3}, -{75,4,4}, -{75,4,5}, -{75,4,6}, -{75,4,7}, -{75,4,8}, -{75,4,9}, -{75,4,10}, -{75,4,11}, -{75,4,12}, -{75,4,13}, -{75,4,14}, -{75,4,15}, -{75,4,16}, -{75,4,17}, -{75,4,18}, -{75,4,19}, -{75,4,20}, -{75,4,21}, -{75,4,22}, -{75,4,23}, -{75,4,24}, -{75,4,25}, -{75,4,26}, -{75,4,27}, -{75,4,28}, -{75,4,29}, -{75,4,30}, -{75,4,31}, -{75,4,32}, -{75,4,33}, -{75,4,34}, -{75,4,35}, -{75,4,36}, -{75,4,37}, -{75,4,38}, -{75,4,39}, -{75,4,40}, -{75,4,41}, -{75,4,42}, -{75,4,43}, -{75,4,44}, -{75,4,45}, -{75,4,46}, -{75,4,47}, -{75,4,48}, -{75,4,49}, -{75,4,50}, -{75,4,51}, -{75,4,52}, -{75,4,53}, -{75,4,54}, -{75,4,55}, -{75,4,56}, -{75,4,57}, -{75,4,58}, -{75,4,59}, -{75,4,60}, -{75,4,61}, -{75,4,62}, -{75,4,63}, -{75,4,64}, -{75,4,65}, -{75,4,66}, -{75,4,67}, -{75,4,68}, -{75,4,69}, -{75,4,70}, -{75,4,71}, -{75,4,72}, -{75,4,73}, -{75,4,74}, -{75,4,75}, -{75,4,76}, -{75,4,77}, -{75,5,-38}, -{75,5,-37}, -{75,5,-36}, -{75,5,-35}, -{75,5,-34}, -{75,5,-33}, -{75,5,-32}, -{75,5,-31}, -{75,5,-30}, -{75,5,-29}, -{75,5,-28}, -{75,5,-27}, -{75,5,-26}, -{75,5,-25}, -{75,5,-24}, -{75,5,-23}, -{75,5,-22}, -{75,5,-21}, -{75,5,-20}, -{75,5,-19}, -{75,5,-18}, -{75,5,-17}, -{75,5,-16}, -{75,5,-15}, -{75,5,-14}, -{75,5,-13}, -{75,5,-12}, -{75,5,-11}, -{75,5,-10}, -{75,5,-9}, -{75,5,-8}, -{75,5,-7}, -{75,5,-6}, -{75,5,-5}, -{75,5,-4}, -{75,5,-3}, -{75,5,-2}, -{75,5,-1}, -{75,5,0}, -{75,5,1}, -{75,5,2}, -{75,5,3}, -{75,5,4}, -{75,5,5}, -{75,5,6}, -{75,5,7}, -{75,5,8}, -{75,5,9}, -{75,5,10}, -{75,5,11}, -{75,5,12}, -{75,5,13}, -{75,5,14}, -{75,5,15}, -{75,5,16}, -{75,5,17}, -{75,5,18}, -{75,5,19}, -{75,5,20}, -{75,5,21}, -{75,5,22}, -{75,5,23}, -{75,5,24}, -{75,5,25}, -{75,5,26}, -{75,5,27}, -{75,5,28}, -{75,5,29}, -{75,5,30}, -{75,5,31}, -{75,5,32}, -{75,5,33}, -{75,5,34}, -{75,5,35}, -{75,5,36}, -{75,5,37}, -{75,5,38}, -{75,5,39}, -{75,5,40}, -{75,5,41}, -{75,5,42}, -{75,5,43}, -{75,5,44}, -{75,5,45}, -{75,5,46}, -{75,5,47}, -{75,5,48}, -{75,5,49}, -{75,5,50}, -{75,5,51}, -{75,5,52}, -{75,5,53}, -{75,5,54}, -{75,5,55}, -{75,5,56}, -{75,5,57}, -{75,5,58}, -{75,5,59}, -{75,5,60}, -{75,5,61}, -{75,5,62}, -{75,5,63}, -{75,5,64}, -{75,5,65}, -{75,5,66}, -{75,5,67}, -{75,5,68}, -{75,5,69}, -{75,5,70}, -{75,5,71}, -{75,5,72}, -{75,5,73}, -{75,5,74}, -{75,5,75}, -{75,5,76}, -{75,5,77}, -{75,6,-38}, -{75,6,-37}, -{75,6,-36}, -{75,6,-35}, -{75,6,-34}, -{75,6,-33}, -{75,6,-32}, -{75,6,-31}, -{75,6,-30}, -{75,6,-29}, -{75,6,-28}, -{75,6,-27}, -{75,6,-26}, -{75,6,-25}, -{75,6,-24}, -{75,6,-23}, -{75,6,-22}, -{75,6,-21}, -{75,6,-20}, -{75,6,-19}, -{75,6,-18}, -{75,6,-17}, -{75,6,-16}, -{75,6,-15}, -{75,6,-14}, -{75,6,-13}, -{75,6,-12}, -{75,6,-11}, -{75,6,-10}, -{75,6,-9}, -{75,6,-8}, -{75,6,-7}, -{75,6,-6}, -{75,6,-5}, -{75,6,-4}, -{75,6,-3}, -{75,6,-2}, -{75,6,-1}, -{75,6,0}, -{75,6,1}, -{75,6,2}, -{75,6,3}, -{75,6,4}, -{75,6,5}, -{75,6,6}, -{75,6,7}, -{75,6,8}, -{75,6,9}, -{75,6,10}, -{75,6,11}, -{75,6,12}, -{75,6,13}, -{75,6,14}, -{75,6,15}, -{75,6,16}, -{75,6,17}, -{75,6,18}, -{75,6,19}, -{75,6,20}, -{75,6,21}, -{75,6,22}, -{75,6,23}, -{75,6,24}, -{75,6,25}, -{75,6,26}, -{75,6,27}, -{75,6,28}, -{75,6,29}, -{75,6,30}, -{75,6,31}, -{75,6,32}, -{75,6,33}, -{75,6,34}, -{75,6,35}, -{75,6,36}, -{75,6,37}, -{75,6,38}, -{75,6,39}, -{75,6,40}, -{75,6,41}, -{75,6,42}, -{75,6,43}, -{75,6,44}, -{75,6,45}, -{75,6,46}, -{75,6,47}, -{75,6,48}, -{75,6,49}, -{75,6,50}, -{75,6,51}, -{75,6,52}, -{75,6,53}, -{75,6,54}, -{75,6,55}, -{75,6,56}, -{75,6,57}, -{75,6,58}, -{75,6,59}, -{75,6,60}, -{75,6,61}, -{75,6,62}, -{75,6,63}, -{75,6,64}, -{75,6,65}, -{75,6,66}, -{75,6,67}, -{75,6,68}, -{75,6,69}, -{75,6,70}, -{75,6,71}, -{75,6,72}, -{75,6,73}, -{75,6,74}, -{75,6,75}, -{75,6,76}, -{75,6,77}, -{75,7,-38}, -{75,7,-37}, -{75,7,-36}, -{75,7,-35}, -{75,7,-34}, -{75,7,-33}, -{75,7,-32}, -{75,7,-31}, -{75,7,-30}, -{75,7,-29}, -{75,7,-28}, -{75,7,-27}, -{75,7,-26}, -{75,7,-25}, -{75,7,-24}, -{75,7,-23}, -{75,7,-22}, -{75,7,-21}, -{75,7,-20}, -{75,7,-19}, -{75,7,-18}, -{75,7,-17}, -{75,7,-16}, -{75,7,-15}, -{75,7,-14}, -{75,7,-13}, -{75,7,-12}, -{75,7,-11}, -{75,7,-10}, -{75,7,-9}, -{75,7,-8}, -{75,7,-7}, -{75,7,-6}, -{75,7,-5}, -{75,7,-4}, -{75,7,-3}, -{75,7,-2}, -{75,7,-1}, -{75,7,0}, -{75,7,1}, -{75,7,2}, -{75,7,3}, -{75,7,4}, -{75,7,5}, -{75,7,6}, -{75,7,7}, -{75,7,8}, -{75,7,9}, -{75,7,10}, -{75,7,11}, -{75,7,12}, -{75,7,13}, -{75,7,14}, -{75,7,15}, -{75,7,16}, -{75,7,17}, -{75,7,18}, -{75,7,19}, -{75,7,20}, -{75,7,21}, -{75,7,22}, -{75,7,23}, -{75,7,24}, -{75,7,25}, -{75,7,26}, -{75,7,27}, -{75,7,28}, -{75,7,29}, -{75,7,30}, -{75,7,31}, -{75,7,32}, -{75,7,33}, -{75,7,34}, -{75,7,35}, -{75,7,36}, -{75,7,37}, -{75,7,38}, -{75,7,39}, -{75,7,40}, -{75,7,41}, -{75,7,42}, -{75,7,43}, -{75,7,44}, -{75,7,45}, -{75,7,46}, -{75,7,47}, -{75,7,48}, -{75,7,49}, -{75,7,50}, -{75,7,51}, -{75,7,52}, -{75,7,53}, -{75,7,54}, -{75,7,55}, -{75,7,56}, -{75,7,57}, -{75,7,58}, -{75,7,59}, -{75,7,60}, -{75,7,61}, -{75,7,62}, -{75,7,63}, -{75,7,64}, -{75,7,65}, -{75,7,66}, -{75,7,67}, -{75,7,68}, -{75,7,69}, -{75,7,70}, -{75,7,71}, -{75,7,72}, -{75,7,73}, -{75,7,74}, -{75,7,75}, -{75,7,76}, -{75,7,77}, -{75,8,-38}, -{75,8,-37}, -{75,8,-36}, -{75,8,-35}, -{75,8,-34}, -{75,8,-33}, -{75,8,-32}, -{75,8,-31}, -{75,8,-30}, -{75,8,-29}, -{75,8,-28}, -{75,8,-27}, -{75,8,-26}, -{75,8,-25}, -{75,8,-24}, -{75,8,-23}, -{75,8,-22}, -{75,8,-21}, -{75,8,-20}, -{75,8,-19}, -{75,8,-18}, -{75,8,-17}, -{75,8,-16}, -{75,8,-15}, -{75,8,-14}, -{75,8,-13}, -{75,8,-12}, -{75,8,-11}, -{75,8,-10}, -{75,8,-9}, -{75,8,-8}, -{75,8,-7}, -{75,8,-6}, -{75,8,-5}, -{75,8,-4}, -{75,8,-3}, -{75,8,-2}, -{75,8,-1}, -{75,8,0}, -{75,8,1}, -{75,8,2}, -{75,8,3}, -{75,8,4}, -{75,8,5}, -{75,8,6}, -{75,8,7}, -{75,8,8}, -{75,8,9}, -{75,8,10}, -{75,8,11}, -{75,8,12}, -{75,8,13}, -{75,8,14}, -{75,8,15}, -{75,8,16}, -{75,8,17}, -{75,8,18}, -{75,8,19}, -{75,8,20}, -{75,8,21}, -{75,8,22}, -{75,8,23}, -{75,8,24}, -{75,8,25}, -{75,8,26}, -{75,8,27}, -{75,8,28}, -{75,8,29}, -{75,8,30}, -{75,8,31}, -{75,8,32}, -{75,8,33}, -{75,8,34}, -{75,8,35}, -{75,8,36}, -{75,8,37}, -{75,8,38}, -{75,8,39}, -{75,8,40}, -{75,8,41}, -{75,8,42}, -{75,8,43}, -{75,8,44}, -{75,8,45}, -{75,8,46}, -{75,8,47}, -{75,8,48}, -{75,8,49}, -{75,8,50}, -{75,8,51}, -{75,8,52}, -{75,8,53}, -{75,8,54}, -{75,8,55}, -{75,8,56}, -{75,8,57}, -{75,8,58}, -{75,8,59}, -{75,8,60}, -{75,8,61}, -{75,8,62}, -{75,8,63}, -{75,8,64}, -{75,8,65}, -{75,8,66}, -{75,8,67}, -{75,8,68}, -{75,8,69}, -{75,8,70}, -{75,8,71}, -{75,8,72}, -{75,8,73}, -{75,8,74}, -{75,8,75}, -{75,8,76}, -{75,8,77}, -{75,9,-38}, -{75,9,-37}, -{75,9,-36}, -{75,9,-35}, -{75,9,-34}, -{75,9,-33}, -{75,9,-32}, -{75,9,-31}, -{75,9,-30}, -{75,9,-29}, -{75,9,-28}, -{75,9,-27}, -{75,9,-26}, -{75,9,-25}, -{75,9,-24}, -{75,9,-23}, -{75,9,-22}, -{75,9,-21}, -{75,9,-20}, -{75,9,-19}, -{75,9,-18}, -{75,9,-17}, -{75,9,-16}, -{75,9,-15}, -{75,9,-14}, -{75,9,-13}, -{75,9,-12}, -{75,9,-11}, -{75,9,-10}, -{75,9,-9}, -{75,9,-8}, -{75,9,-7}, -{75,9,-6}, -{75,9,-5}, -{75,9,-4}, -{75,9,-3}, -{75,9,-2}, -{75,9,-1}, -{75,9,0}, -{75,9,1}, -{75,9,2}, -{75,9,3}, -{75,9,4}, -{75,9,5}, -{75,9,6}, -{75,9,7}, -{75,9,8}, -{75,9,9}, -{75,9,10}, -{75,9,11}, -{75,9,12}, -{75,9,13}, -{75,9,14}, -{75,9,15}, -{75,9,16}, -{75,9,17}, -{75,9,18}, -{75,9,19}, -{75,9,20}, -{75,9,21}, -{75,9,22}, -{75,9,23}, -{75,9,24}, -{75,9,25}, -{75,9,26}, -{75,9,27}, -{75,9,28}, -{75,9,29}, -{75,9,30}, -{75,9,31}, -{75,9,32}, -{75,9,33}, -{75,9,34}, -{75,9,35}, -{75,9,36}, -{75,9,37}, -{75,9,38}, -{75,9,39}, -{75,9,40}, -{75,9,41}, -{75,9,42}, -{75,9,43}, -{75,9,44}, -{75,9,45}, -{75,9,46}, -{75,9,47}, -{75,9,48}, -{75,9,49}, -{75,9,50}, -{75,9,51}, -{75,9,52}, -{75,9,53}, -{75,9,54}, -{75,9,55}, -{75,9,56}, -{75,9,57}, -{75,9,58}, -{75,9,59}, -{75,9,60}, -{75,9,61}, -{75,9,62}, -{75,9,63}, -{75,9,64}, -{75,9,65}, -{75,9,66}, -{75,9,67}, -{75,9,68}, -{75,9,69}, -{75,9,70}, -{75,9,71}, -{75,9,72}, -{75,9,73}, -{75,9,74}, -{75,9,75}, -{75,9,76}, -{75,9,77}, -{75,9,78}, -{75,10,-38}, -{75,10,-37}, -{75,10,-36}, -{75,10,-35}, -{75,10,-34}, -{75,10,-33}, -{75,10,-32}, -{75,10,-31}, -{75,10,-30}, -{75,10,-29}, -{75,10,-28}, -{75,10,-27}, -{75,10,-26}, -{75,10,-25}, -{75,10,-24}, -{75,10,-23}, -{75,10,-22}, -{75,10,-21}, -{75,10,-20}, -{75,10,-19}, -{75,10,-18}, -{75,10,-17}, -{75,10,-16}, -{75,10,-15}, -{75,10,-14}, -{75,10,-13}, -{75,10,-12}, -{75,10,-11}, -{75,10,-10}, -{75,10,-9}, -{75,10,-8}, -{75,10,-7}, -{75,10,-6}, -{75,10,-5}, -{75,10,-4}, -{75,10,-3}, -{75,10,-2}, -{75,10,-1}, -{75,10,0}, -{75,10,1}, -{75,10,2}, -{75,10,3}, -{75,10,4}, -{75,10,5}, -{75,10,6}, -{75,10,7}, -{75,10,8}, -{75,10,9}, -{75,10,10}, -{75,10,11}, -{75,10,12}, -{75,10,13}, -{75,10,14}, -{75,10,15}, -{75,10,16}, -{75,10,17}, -{75,10,18}, -{75,10,19}, -{75,10,20}, -{75,10,21}, -{75,10,22}, -{75,10,23}, -{75,10,24}, -{75,10,25}, -{75,10,26}, -{75,10,27}, -{75,10,28}, -{75,10,29}, -{75,10,30}, -{75,10,31}, -{75,10,32}, -{75,10,33}, -{75,10,34}, -{75,10,35}, -{75,10,36}, -{75,10,37}, -{75,10,38}, -{75,10,39}, -{75,10,40}, -{75,10,41}, -{75,10,42}, -{75,10,43}, -{75,10,44}, -{75,10,45}, -{75,10,46}, -{75,10,47}, -{75,10,48}, -{75,10,49}, -{75,10,50}, -{75,10,51}, -{75,10,52}, -{75,10,53}, -{75,10,54}, -{75,10,55}, -{75,10,56}, -{75,10,57}, -{75,10,58}, -{75,10,59}, -{75,10,60}, -{75,10,61}, -{75,10,62}, -{75,10,63}, -{75,10,64}, -{75,10,65}, -{75,10,66}, -{75,10,67}, -{75,10,68}, -{75,10,69}, -{75,10,70}, -{75,10,71}, -{75,10,72}, -{75,10,73}, -{75,10,74}, -{75,10,75}, -{75,10,76}, -{75,10,77}, -{75,10,78}, -{75,11,-38}, -{75,11,-37}, -{75,11,-36}, -{75,11,-35}, -{75,11,-34}, -{75,11,-33}, -{75,11,-32}, -{75,11,-31}, -{75,11,-30}, -{75,11,-29}, -{75,11,-28}, -{75,11,-27}, -{75,11,-26}, -{75,11,-25}, -{75,11,-24}, -{75,11,-23}, -{75,11,-22}, -{75,11,-21}, -{75,11,-20}, -{75,11,-19}, -{75,11,-18}, -{75,11,-17}, -{75,11,-16}, -{75,11,-15}, -{75,11,-14}, -{75,11,-13}, -{75,11,-12}, -{75,11,-11}, -{75,11,-10}, -{75,11,-9}, -{75,11,-8}, -{75,11,-7}, -{75,11,-6}, -{75,11,-5}, -{75,11,-4}, -{75,11,-3}, -{75,11,-2}, -{75,11,-1}, -{75,11,0}, -{75,11,1}, -{75,11,2}, -{75,11,3}, -{75,11,4}, -{75,11,5}, -{75,11,6}, -{75,11,7}, -{75,11,8}, -{75,11,9}, -{75,11,10}, -{75,11,11}, -{75,11,12}, -{75,11,13}, -{75,11,14}, -{75,11,15}, -{75,11,16}, -{75,11,17}, -{75,11,18}, -{75,11,19}, -{75,11,20}, -{75,11,21}, -{75,11,22}, -{75,11,23}, -{75,11,24}, -{75,11,25}, -{75,11,26}, -{75,11,27}, -{75,11,28}, -{75,11,29}, -{75,11,30}, -{75,11,31}, -{75,11,32}, -{75,11,33}, -{75,11,34}, -{75,11,35}, -{75,11,36}, -{75,11,37}, -{75,11,38}, -{75,11,39}, -{75,11,40}, -{75,11,41}, -{75,11,42}, -{75,11,43}, -{75,11,44}, -{75,11,45}, -{75,11,46}, -{75,11,47}, -{75,11,48}, -{75,11,49}, -{75,11,50}, -{75,11,51}, -{75,11,52}, -{75,11,53}, -{75,11,54}, -{75,11,55}, -{75,11,56}, -{75,11,57}, -{75,11,58}, -{75,11,59}, -{75,11,60}, -{75,11,61}, -{75,11,62}, -{75,11,63}, -{75,11,64}, -{75,11,65}, -{75,11,66}, -{75,11,67}, -{75,11,68}, -{75,11,69}, -{75,11,70}, -{75,11,71}, -{75,11,72}, -{75,11,73}, -{75,11,74}, -{75,11,75}, -{75,11,76}, -{75,11,77}, -{75,11,78}, -{75,12,-38}, -{75,12,-37}, -{75,12,-36}, -{75,12,-35}, -{75,12,-34}, -{75,12,-33}, -{75,12,-32}, -{75,12,-31}, -{75,12,-30}, -{75,12,-29}, -{75,12,-28}, -{75,12,-27}, -{75,12,-26}, -{75,12,-25}, -{75,12,-24}, -{75,12,-23}, -{75,12,-22}, -{75,12,-21}, -{75,12,-20}, -{75,12,-19}, -{75,12,-18}, -{75,12,-17}, -{75,12,-16}, -{75,12,-15}, -{75,12,-14}, -{75,12,-13}, -{75,12,-12}, -{75,12,-11}, -{75,12,-10}, -{75,12,-9}, -{75,12,-8}, -{75,12,-7}, -{75,12,-6}, -{75,12,-5}, -{75,12,-4}, -{75,12,-3}, -{75,12,-2}, -{75,12,-1}, -{75,12,0}, -{75,12,1}, -{75,12,2}, -{75,12,3}, -{75,12,4}, -{75,12,5}, -{75,12,6}, -{75,12,7}, -{75,12,8}, -{75,12,9}, -{75,12,10}, -{75,12,11}, -{75,12,12}, -{75,12,13}, -{75,12,14}, -{75,12,15}, -{75,12,16}, -{75,12,17}, -{75,12,18}, -{75,12,19}, -{75,12,20}, -{75,12,21}, -{75,12,22}, -{75,12,23}, -{75,12,24}, -{75,12,25}, -{75,12,26}, -{75,12,27}, -{75,12,28}, -{75,12,29}, -{75,12,30}, -{75,12,31}, -{75,12,32}, -{75,12,33}, -{75,12,34}, -{75,12,35}, -{75,12,36}, -{75,12,37}, -{75,12,38}, -{75,12,39}, -{75,12,40}, -{75,12,41}, -{75,12,42}, -{75,12,43}, -{75,12,44}, -{75,12,45}, -{75,12,46}, -{75,12,47}, -{75,12,48}, -{75,12,49}, -{75,12,50}, -{75,12,51}, -{75,12,52}, -{75,12,53}, -{75,12,54}, -{75,12,55}, -{75,12,56}, -{75,12,57}, -{75,12,58}, -{75,12,59}, -{75,12,60}, -{75,12,61}, -{75,12,62}, -{75,12,63}, -{75,12,64}, -{75,12,65}, -{75,12,66}, -{75,12,67}, -{75,12,68}, -{75,12,69}, -{75,12,70}, -{75,12,71}, -{75,12,72}, -{75,12,73}, -{75,12,74}, -{75,12,75}, -{75,12,76}, -{75,12,77}, -{75,12,78}, -{75,13,-38}, -{75,13,-37}, -{75,13,-36}, -{75,13,-35}, -{75,13,-34}, -{75,13,-33}, -{75,13,-32}, -{75,13,-31}, -{75,13,-30}, -{75,13,-29}, -{75,13,-28}, -{75,13,-27}, -{75,13,-26}, -{75,13,-25}, -{75,13,-24}, -{75,13,-23}, -{75,13,-22}, -{75,13,-21}, -{75,13,-20}, -{75,13,-19}, -{75,13,-18}, -{75,13,-17}, -{75,13,-16}, -{75,13,-15}, -{75,13,-14}, -{75,13,-13}, -{75,13,-12}, -{75,13,-11}, -{75,13,-10}, -{75,13,-9}, -{75,13,-8}, -{75,13,-7}, -{75,13,-6}, -{75,13,-5}, -{75,13,-4}, -{75,13,-3}, -{75,13,-2}, -{75,13,-1}, -{75,13,0}, -{75,13,1}, -{75,13,2}, -{75,13,3}, -{75,13,4}, -{75,13,5}, -{75,13,6}, -{75,13,7}, -{75,13,8}, -{75,13,9}, -{75,13,10}, -{75,13,11}, -{75,13,12}, -{75,13,13}, -{75,13,14}, -{75,13,15}, -{75,13,16}, -{75,13,17}, -{75,13,18}, -{75,13,19}, -{75,13,20}, -{75,13,21}, -{75,13,22}, -{75,13,23}, -{75,13,24}, -{75,13,25}, -{75,13,26}, -{75,13,27}, -{75,13,28}, -{75,13,29}, -{75,13,30}, -{75,13,31}, -{75,13,32}, -{75,13,33}, -{75,13,34}, -{75,13,35}, -{75,13,36}, -{75,13,37}, -{75,13,38}, -{75,13,39}, -{75,13,40}, -{75,13,41}, -{75,13,42}, -{75,13,43}, -{75,13,44}, -{75,13,45}, -{75,13,46}, -{75,13,47}, -{75,13,48}, -{75,13,49}, -{75,13,50}, -{75,13,51}, -{75,13,52}, -{75,13,53}, -{75,13,54}, -{75,13,55}, -{75,13,56}, -{75,13,57}, -{75,13,58}, -{75,13,59}, -{75,13,60}, -{75,13,61}, -{75,13,62}, -{75,13,63}, -{75,13,64}, -{75,13,65}, -{75,13,66}, -{75,13,67}, -{75,13,68}, -{75,13,69}, -{75,13,70}, -{75,13,71}, -{75,13,72}, -{75,13,73}, -{75,13,74}, -{75,13,75}, -{75,13,76}, -{75,13,77}, -{75,13,78}, -{75,14,-38}, -{75,14,-37}, -{75,14,-36}, -{75,14,-35}, -{75,14,-34}, -{75,14,-33}, -{75,14,-32}, -{75,14,-31}, -{75,14,-30}, -{75,14,-29}, -{75,14,-28}, -{75,14,-27}, -{75,14,-26}, -{75,14,-25}, -{75,14,-24}, -{75,14,-23}, -{75,14,-22}, -{75,14,-21}, -{75,14,-20}, -{75,14,-19}, -{75,14,-18}, -{75,14,-17}, -{75,14,-16}, -{75,14,-15}, -{75,14,-14}, -{75,14,-13}, -{75,14,-12}, -{75,14,-11}, -{75,14,-10}, -{75,14,-9}, -{75,14,-8}, -{75,14,-7}, -{75,14,-6}, -{75,14,-5}, -{75,14,-4}, -{75,14,-3}, -{75,14,-2}, -{75,14,-1}, -{75,14,0}, -{75,14,1}, -{75,14,2}, -{75,14,3}, -{75,14,4}, -{75,14,5}, -{75,14,6}, -{75,14,7}, -{75,14,8}, -{75,14,9}, -{75,14,10}, -{75,14,11}, -{75,14,12}, -{75,14,13}, -{75,14,14}, -{75,14,15}, -{75,14,16}, -{75,14,17}, -{75,14,18}, -{75,14,19}, -{75,14,20}, -{75,14,21}, -{75,14,22}, -{75,14,23}, -{75,14,24}, -{75,14,25}, -{75,14,26}, -{75,14,27}, -{75,14,28}, -{75,14,29}, -{75,14,30}, -{75,14,31}, -{75,14,32}, -{75,14,33}, -{75,14,34}, -{75,14,35}, -{75,14,36}, -{75,14,37}, -{75,14,38}, -{75,14,39}, -{75,14,40}, -{75,14,41}, -{75,14,42}, -{75,14,43}, -{75,14,44}, -{75,14,45}, -{75,14,46}, -{75,14,47}, -{75,14,48}, -{75,14,49}, -{75,14,50}, -{75,14,51}, -{75,14,52}, -{75,14,53}, -{75,14,54}, -{75,14,55}, -{75,14,56}, -{75,14,57}, -{75,14,58}, -{75,14,59}, -{75,14,60}, -{75,14,61}, -{75,14,62}, -{75,14,63}, -{75,14,64}, -{75,14,65}, -{75,14,66}, -{75,14,67}, -{75,14,68}, -{75,14,69}, -{75,14,70}, -{75,14,71}, -{75,14,72}, -{75,14,73}, -{75,14,74}, -{75,14,75}, -{75,14,76}, -{75,14,77}, -{75,14,78}, -{75,15,-38}, -{75,15,-37}, -{75,15,-36}, -{75,15,-35}, -{75,15,-34}, -{75,15,-33}, -{75,15,-32}, -{75,15,-31}, -{75,15,-30}, -{75,15,-29}, -{75,15,-28}, -{75,15,-27}, -{75,15,-26}, -{75,15,-25}, -{75,15,-24}, -{75,15,-23}, -{75,15,-22}, -{75,15,-21}, -{75,15,-20}, -{75,15,-19}, -{75,15,-18}, -{75,15,-17}, -{75,15,-16}, -{75,15,-15}, -{75,15,-14}, -{75,15,-13}, -{75,15,-12}, -{75,15,-11}, -{75,15,-10}, -{75,15,-9}, -{75,15,-8}, -{75,15,-7}, -{75,15,-6}, -{75,15,-5}, -{75,15,-4}, -{75,15,-3}, -{75,15,-2}, -{75,15,-1}, -{75,15,0}, -{75,15,1}, -{75,15,2}, -{75,15,3}, -{75,15,4}, -{75,15,5}, -{75,15,6}, -{75,15,7}, -{75,15,8}, -{75,15,9}, -{75,15,10}, -{75,15,11}, -{75,15,12}, -{75,15,13}, -{75,15,14}, -{75,15,15}, -{75,15,16}, -{75,15,17}, -{75,15,18}, -{75,15,19}, -{75,15,20}, -{75,15,21}, -{75,15,22}, -{75,15,23}, -{75,15,24}, -{75,15,25}, -{75,15,26}, -{75,15,27}, -{75,15,28}, -{75,15,29}, -{75,15,30}, -{75,15,31}, -{75,15,32}, -{75,15,33}, -{75,15,34}, -{75,15,35}, -{75,15,36}, -{75,15,37}, -{75,15,38}, -{75,15,39}, -{75,15,40}, -{75,15,41}, -{75,15,42}, -{75,15,43}, -{75,15,44}, -{75,15,45}, -{75,15,46}, -{75,15,47}, -{75,15,48}, -{75,15,49}, -{75,15,50}, -{75,15,51}, -{75,15,52}, -{75,15,53}, -{75,15,54}, -{75,15,55}, -{75,15,56}, -{75,15,57}, -{75,15,58}, -{75,15,59}, -{75,15,60}, -{75,15,61}, -{75,15,62}, -{75,15,63}, -{75,15,64}, -{75,15,65}, -{75,15,66}, -{75,15,67}, -{75,15,68}, -{75,15,69}, -{75,15,70}, -{75,15,71}, -{75,15,72}, -{75,15,73}, -{75,15,74}, -{75,15,75}, -{75,15,76}, -{75,15,77}, -{75,15,78}, -{75,16,-38}, -{75,16,-37}, -{75,16,-36}, -{75,16,-35}, -{75,16,-34}, -{75,16,-33}, -{75,16,-32}, -{75,16,-31}, -{75,16,-30}, -{75,16,-29}, -{75,16,-28}, -{75,16,-27}, -{75,16,-26}, -{75,16,-25}, -{75,16,-24}, -{75,16,-23}, -{75,16,-22}, -{75,16,-21}, -{75,16,-20}, -{75,16,-19}, -{75,16,-18}, -{75,16,-17}, -{75,16,-16}, -{75,16,-15}, -{75,16,-14}, -{75,16,-13}, -{75,16,-12}, -{75,16,-11}, -{75,16,-10}, -{75,16,-9}, -{75,16,-8}, -{75,16,-7}, -{75,16,-6}, -{75,16,-5}, -{75,16,-4}, -{75,16,-3}, -{75,16,-2}, -{75,16,-1}, -{75,16,0}, -{75,16,1}, -{75,16,2}, -{75,16,3}, -{75,16,4}, -{75,16,5}, -{75,16,6}, -{75,16,7}, -{75,16,8}, -{75,16,9}, -{75,16,10}, -{75,16,11}, -{75,16,12}, -{75,16,13}, -{75,16,14}, -{75,16,15}, -{75,16,16}, -{75,16,17}, -{75,16,18}, -{75,16,19}, -{75,16,20}, -{75,16,21}, -{75,16,22}, -{75,16,23}, -{75,16,24}, -{75,16,25}, -{75,16,26}, -{75,16,27}, -{75,16,28}, -{75,16,29}, -{75,16,30}, -{75,16,31}, -{75,16,32}, -{75,16,33}, -{75,16,34}, -{75,16,35}, -{75,16,36}, -{75,16,37}, -{75,16,38}, -{75,16,39}, -{75,16,40}, -{75,16,41}, -{75,16,42}, -{75,16,43}, -{75,16,44}, -{75,16,45}, -{75,16,46}, -{75,16,47}, -{75,16,48}, -{75,16,49}, -{75,16,50}, -{75,16,51}, -{75,16,52}, -{75,16,53}, -{75,16,54}, -{75,16,55}, -{75,16,56}, -{75,16,57}, -{75,16,58}, -{75,16,59}, -{75,16,60}, -{75,16,61}, -{75,16,62}, -{75,16,63}, -{75,16,64}, -{75,16,65}, -{75,16,66}, -{75,16,67}, -{75,16,68}, -{75,16,69}, -{75,16,70}, -{75,16,71}, -{75,16,72}, -{75,16,73}, -{75,16,74}, -{75,16,75}, -{75,16,76}, -{75,16,77}, -{75,16,78}, -{75,17,-38}, -{75,17,-37}, -{75,17,-36}, -{75,17,-35}, -{75,17,-34}, -{75,17,-33}, -{75,17,-32}, -{75,17,-31}, -{75,17,-30}, -{75,17,-29}, -{75,17,-28}, -{75,17,-27}, -{75,17,-26}, -{75,17,-25}, -{75,17,-24}, -{75,17,-23}, -{75,17,-22}, -{75,17,-21}, -{75,17,-20}, -{75,17,-19}, -{75,17,-18}, -{75,17,-17}, -{75,17,-16}, -{75,17,-15}, -{75,17,-14}, -{75,17,-13}, -{75,17,-12}, -{75,17,-11}, -{75,17,-10}, -{75,17,-9}, -{75,17,-8}, -{75,17,-7}, -{75,17,-6}, -{75,17,-5}, -{75,17,-4}, -{75,17,-3}, -{75,17,-2}, -{75,17,-1}, -{75,17,0}, -{75,17,1}, -{75,17,2}, -{75,17,3}, -{75,17,4}, -{75,17,5}, -{75,17,6}, -{75,17,7}, -{75,17,8}, -{75,17,9}, -{75,17,10}, -{75,17,11}, -{75,17,12}, -{75,17,13}, -{75,17,14}, -{75,17,15}, -{75,17,16}, -{75,17,17}, -{75,17,18}, -{75,17,19}, -{75,17,20}, -{75,17,21}, -{75,17,22}, -{75,17,23}, -{75,17,24}, -{75,17,25}, -{75,17,26}, -{75,17,27}, -{75,17,28}, -{75,17,29}, -{75,17,30}, -{75,17,31}, -{75,17,32}, -{75,17,33}, -{75,17,34}, -{75,17,35}, -{75,17,36}, -{75,17,37}, -{75,17,38}, -{75,17,39}, -{75,17,40}, -{75,17,41}, -{75,17,42}, -{75,17,43}, -{75,17,44}, -{75,17,45}, -{75,17,46}, -{75,17,47}, -{75,17,48}, -{75,17,49}, -{75,17,50}, -{75,17,51}, -{75,17,52}, -{75,17,53}, -{75,17,54}, -{75,17,55}, -{75,17,56}, -{75,17,57}, -{75,17,58}, -{75,17,59}, -{75,17,60}, -{75,17,61}, -{75,17,62}, -{75,17,63}, -{75,17,64}, -{75,17,65}, -{75,17,66}, -{75,17,67}, -{75,17,68}, -{75,17,69}, -{75,17,70}, -{75,17,71}, -{75,17,72}, -{75,17,73}, -{75,17,74}, -{75,17,75}, -{75,17,76}, -{75,17,77}, -{75,17,78}, -{75,18,-38}, -{75,18,-37}, -{75,18,-36}, -{75,18,-35}, -{75,18,-34}, -{75,18,-33}, -{75,18,-32}, -{75,18,-31}, -{75,18,-30}, -{75,18,-29}, -{75,18,-28}, -{75,18,-27}, -{75,18,-26}, -{75,18,-25}, -{75,18,-24}, -{75,18,-23}, -{75,18,-22}, -{75,18,-21}, -{75,18,-20}, -{75,18,-19}, -{75,18,-18}, -{75,18,-17}, -{75,18,-16}, -{75,18,-15}, -{75,18,-14}, -{75,18,-13}, -{75,18,-12}, -{75,18,-11}, -{75,18,-10}, -{75,18,-9}, -{75,18,-8}, -{75,18,-7}, -{75,18,-6}, -{75,18,-5}, -{75,18,-4}, -{75,18,-3}, -{75,18,-2}, -{75,18,-1}, -{75,18,0}, -{75,18,1}, -{75,18,2}, -{75,18,3}, -{75,18,4}, -{75,18,5}, -{75,18,6}, -{75,18,7}, -{75,18,8}, -{75,18,9}, -{75,18,10}, -{75,18,11}, -{75,18,12}, -{75,18,13}, -{75,18,14}, -{75,18,15}, -{75,18,16}, -{75,18,17}, -{75,18,18}, -{75,18,19}, -{75,18,20}, -{75,18,21}, -{75,18,22}, -{75,18,23}, -{75,18,24}, -{75,18,25}, -{75,18,26}, -{75,18,27}, -{75,18,28}, -{75,18,29}, -{75,18,30}, -{75,18,31}, -{75,18,32}, -{75,18,33}, -{75,18,34}, -{75,18,35}, -{75,18,36}, -{75,18,37}, -{75,18,38}, -{75,18,39}, -{75,18,40}, -{75,18,41}, -{75,18,42}, -{75,18,43}, -{75,18,44}, -{75,18,45}, -{75,18,46}, -{75,18,47}, -{75,18,48}, -{75,18,49}, -{75,18,50}, -{75,18,51}, -{75,18,52}, -{75,18,53}, -{75,18,54}, -{75,18,55}, -{75,18,56}, -{75,18,57}, -{75,18,58}, -{75,18,59}, -{75,18,60}, -{75,18,61}, -{75,18,62}, -{75,18,63}, -{75,18,64}, -{75,18,65}, -{75,18,66}, -{75,18,67}, -{75,18,68}, -{75,18,69}, -{75,18,70}, -{75,18,71}, -{75,18,72}, -{75,18,73}, -{75,18,74}, -{75,18,75}, -{75,18,76}, -{75,18,77}, -{75,18,78}, -{75,19,-38}, -{75,19,-37}, -{75,19,-36}, -{75,19,-35}, -{75,19,-34}, -{75,19,-33}, -{75,19,-32}, -{75,19,-31}, -{75,19,-30}, -{75,19,-29}, -{75,19,-28}, -{75,19,-27}, -{75,19,-26}, -{75,19,-25}, -{75,19,-24}, -{75,19,-23}, -{75,19,-22}, -{75,19,-21}, -{75,19,-20}, -{75,19,-19}, -{75,19,-18}, -{75,19,-17}, -{75,19,-16}, -{75,19,-15}, -{75,19,-14}, -{75,19,-13}, -{75,19,-12}, -{75,19,-11}, -{75,19,-10}, -{75,19,-9}, -{75,19,-8}, -{75,19,-7}, -{75,19,-6}, -{75,19,-5}, -{75,19,-4}, -{75,19,-3}, -{75,19,-2}, -{75,19,-1}, -{75,19,0}, -{75,19,1}, -{75,19,2}, -{75,19,3}, -{75,19,4}, -{75,19,5}, -{75,19,6}, -{75,19,7}, -{75,19,8}, -{75,19,9}, -{75,19,10}, -{75,19,11}, -{75,19,12}, -{75,19,13}, -{75,19,14}, -{75,19,15}, -{75,19,16}, -{75,19,17}, -{75,19,18}, -{75,19,19}, -{75,19,20}, -{75,19,21}, -{75,19,22}, -{75,19,23}, -{75,19,24}, -{75,19,25}, -{75,19,26}, -{75,19,27}, -{75,19,28}, -{75,19,29}, -{75,19,30}, -{75,19,31}, -{75,19,32}, -{75,19,33}, -{75,19,34}, -{75,19,35}, -{75,19,36}, -{75,19,37}, -{75,19,38}, -{75,19,39}, -{75,19,40}, -{75,19,41}, -{75,19,42}, -{75,19,43}, -{75,19,44}, -{75,19,45}, -{75,19,46}, -{75,19,47}, -{75,19,48}, -{75,19,49}, -{75,19,50}, -{75,19,51}, -{75,19,52}, -{75,19,53}, -{75,19,54}, -{75,19,55}, -{75,19,56}, -{75,19,57}, -{75,19,58}, -{75,19,59}, -{75,19,60}, -{75,19,61}, -{75,19,62}, -{75,19,63}, -{75,19,64}, -{75,19,65}, -{75,19,66}, -{75,19,67}, -{75,19,68}, -{75,19,69}, -{75,19,70}, -{75,19,71}, -{75,19,72}, -{75,19,73}, -{75,19,74}, -{75,19,75}, -{75,19,76}, -{75,19,77}, -{75,19,78}, -{75,20,-38}, -{75,20,-37}, -{75,20,-36}, -{75,20,-35}, -{75,20,-34}, -{75,20,-33}, -{75,20,-32}, -{75,20,-31}, -{75,20,-30}, -{75,20,-29}, -{75,20,-28}, -{75,20,-27}, -{75,20,-26}, -{75,20,-25}, -{75,20,-24}, -{75,20,-23}, -{75,20,-22}, -{75,20,-21}, -{75,20,-20}, -{75,20,-19}, -{75,20,-18}, -{75,20,-17}, -{75,20,-16}, -{75,20,-15}, -{75,20,-14}, -{75,20,-13}, -{75,20,-12}, -{75,20,-11}, -{75,20,-10}, -{75,20,-9}, -{75,20,-8}, -{75,20,-7}, -{75,20,-6}, -{75,20,-5}, -{75,20,-4}, -{75,20,-3}, -{75,20,-2}, -{75,20,-1}, -{75,20,0}, -{75,20,1}, -{75,20,2}, -{75,20,3}, -{75,20,4}, -{75,20,5}, -{75,20,6}, -{75,20,7}, -{75,20,8}, -{75,20,9}, -{75,20,10}, -{75,20,11}, -{75,20,12}, -{75,20,13}, -{75,20,14}, -{75,20,15}, -{75,20,16}, -{75,20,17}, -{75,20,18}, -{75,20,19}, -{75,20,20}, -{75,20,21}, -{75,20,22}, -{75,20,23}, -{75,20,24}, -{75,20,25}, -{75,20,26}, -{75,20,27}, -{75,20,28}, -{75,20,29}, -{75,20,30}, -{75,20,31}, -{75,20,32}, -{75,20,33}, -{75,20,34}, -{75,20,35}, -{75,20,36}, -{75,20,37}, -{75,20,38}, -{75,20,39}, -{75,20,40}, -{75,20,41}, -{75,20,42}, -{75,20,43}, -{75,20,44}, -{75,20,45}, -{75,20,46}, -{75,20,47}, -{75,20,48}, -{75,20,49}, -{75,20,50}, -{75,20,51}, -{75,20,52}, -{75,20,53}, -{75,20,54}, -{75,20,55}, -{75,20,56}, -{75,20,57}, -{75,20,58}, -{75,20,59}, -{75,20,60}, -{75,20,61}, -{75,20,62}, -{75,20,63}, -{75,20,64}, -{75,20,65}, -{75,20,66}, -{75,20,67}, -{75,20,68}, -{75,20,69}, -{75,20,70}, -{75,20,71}, -{75,20,72}, -{75,20,73}, -{75,20,74}, -{75,20,75}, -{75,20,76}, -{75,20,77}, -{75,20,78}, -{75,21,-38}, -{75,21,-37}, -{75,21,-36}, -{75,21,-35}, -{75,21,-34}, -{75,21,-33}, -{75,21,-32}, -{75,21,-31}, -{75,21,-30}, -{75,21,-29}, -{75,21,-28}, -{75,21,-27}, -{75,21,-26}, -{75,21,-25}, -{75,21,-24}, -{75,21,-23}, -{75,21,-22}, -{75,21,-21}, -{75,21,-20}, -{75,21,-19}, -{75,21,-18}, -{75,21,-17}, -{75,21,-16}, -{75,21,-15}, -{75,21,-14}, -{75,21,-13}, -{75,21,-12}, -{75,21,-11}, -{75,21,-10}, -{75,21,-9}, -{75,21,-8}, -{75,21,-7}, -{75,21,-6}, -{75,21,-5}, -{75,21,-4}, -{75,21,-3}, -{75,21,-2}, -{75,21,-1}, -{75,21,0}, -{75,21,1}, -{75,21,2}, -{75,21,3}, -{75,21,4}, -{75,21,5}, -{75,21,6}, -{75,21,7}, -{75,21,8}, -{75,21,9}, -{75,21,10}, -{75,21,11}, -{75,21,12}, -{75,21,13}, -{75,21,14}, -{75,21,15}, -{75,21,16}, -{75,21,17}, -{75,21,18}, -{75,21,19}, -{75,21,20}, -{75,21,21}, -{75,21,22}, -{75,21,23}, -{75,21,24}, -{75,21,25}, -{75,21,26}, -{75,21,27}, -{75,21,28}, -{75,21,29}, -{75,21,30}, -{75,21,31}, -{75,21,32}, -{75,21,33}, -{75,21,34}, -{75,21,35}, -{75,21,36}, -{75,21,37}, -{75,21,38}, -{75,21,39}, -{75,21,40}, -{75,21,41}, -{75,21,42}, -{75,21,43}, -{75,21,44}, -{75,21,45}, -{75,21,46}, -{75,21,47}, -{75,21,48}, -{75,21,49}, -{75,21,50}, -{75,21,51}, -{75,21,52}, -{75,21,53}, -{75,21,54}, -{75,21,55}, -{75,21,56}, -{75,21,57}, -{75,21,58}, -{75,21,59}, -{75,21,60}, -{75,21,61}, -{75,21,62}, -{75,21,63}, -{75,21,64}, -{75,21,65}, -{75,21,66}, -{75,21,67}, -{75,21,68}, -{75,21,69}, -{75,21,70}, -{75,21,71}, -{75,21,72}, -{75,21,73}, -{75,21,74}, -{75,21,75}, -{75,21,76}, -{75,21,77}, -{75,21,78}, -{75,22,-38}, -{75,22,-37}, -{75,22,-36}, -{75,22,-35}, -{75,22,-34}, -{75,22,-33}, -{75,22,-32}, -{75,22,-31}, -{75,22,-30}, -{75,22,-29}, -{75,22,-28}, -{75,22,-27}, -{75,22,-26}, -{75,22,-25}, -{75,22,-24}, -{75,22,-23}, -{75,22,-22}, -{75,22,-21}, -{75,22,-20}, -{75,22,-19}, -{75,22,-18}, -{75,22,-17}, -{75,22,-16}, -{75,22,-15}, -{75,22,-14}, -{75,22,-13}, -{75,22,-12}, -{75,22,-11}, -{75,22,-10}, -{75,22,-9}, -{75,22,-8}, -{75,22,-7}, -{75,22,-6}, -{75,22,-5}, -{75,22,-4}, -{75,22,-3}, -{75,22,-2}, -{75,22,-1}, -{75,22,0}, -{75,22,1}, -{75,22,2}, -{75,22,3}, -{75,22,4}, -{75,22,5}, -{75,22,6}, -{75,22,7}, -{75,22,8}, -{75,22,9}, -{75,22,10}, -{75,22,11}, -{75,22,12}, -{75,22,13}, -{75,22,14}, -{75,22,15}, -{75,22,16}, -{75,22,17}, -{75,22,18}, -{75,22,19}, -{75,22,20}, -{75,22,21}, -{75,22,22}, -{75,22,23}, -{75,22,24}, -{75,22,25}, -{75,22,26}, -{75,22,27}, -{75,22,28}, -{75,22,29}, -{75,22,30}, -{75,22,31}, -{75,22,32}, -{75,22,33}, -{75,22,34}, -{75,22,35}, -{75,22,36}, -{75,22,37}, -{75,22,38}, -{75,22,39}, -{75,22,40}, -{75,22,41}, -{75,22,42}, -{75,22,43}, -{75,22,44}, -{75,22,45}, -{75,22,46}, -{75,22,47}, -{75,22,48}, -{75,22,49}, -{75,22,50}, -{75,22,51}, -{75,22,52}, -{75,22,53}, -{75,22,54}, -{75,22,55}, -{75,22,56}, -{75,22,57}, -{75,22,58}, -{75,22,59}, -{75,22,60}, -{75,22,61}, -{75,22,62}, -{75,22,63}, -{75,22,64}, -{75,22,65}, -{75,22,66}, -{75,22,67}, -{75,22,68}, -{75,22,69}, -{75,22,70}, -{75,22,71}, -{75,22,72}, -{75,22,73}, -{75,22,74}, -{75,22,75}, -{75,22,76}, -{75,22,77}, -{75,22,78}, -{75,22,79}, -{75,23,-38}, -{75,23,-37}, -{75,23,-36}, -{75,23,-35}, -{75,23,-34}, -{75,23,-33}, -{75,23,-32}, -{75,23,-31}, -{75,23,-30}, -{75,23,-29}, -{75,23,-28}, -{75,23,-27}, -{75,23,-26}, -{75,23,-25}, -{75,23,-24}, -{75,23,-23}, -{75,23,-22}, -{75,23,-21}, -{75,23,-20}, -{75,23,-19}, -{75,23,-18}, -{75,23,-17}, -{75,23,-16}, -{75,23,-15}, -{75,23,-14}, -{75,23,-13}, -{75,23,-12}, -{75,23,-11}, -{75,23,-10}, -{75,23,-9}, -{75,23,-8}, -{75,23,-7}, -{75,23,-6}, -{75,23,-5}, -{75,23,-4}, -{75,23,-3}, -{75,23,-2}, -{75,23,-1}, -{75,23,0}, -{75,23,1}, -{75,23,2}, -{75,23,3}, -{75,23,4}, -{75,23,5}, -{75,23,6}, -{75,23,7}, -{75,23,8}, -{75,23,9}, -{75,23,10}, -{75,23,11}, -{75,23,12}, -{75,23,13}, -{75,23,14}, -{75,23,15}, -{75,23,16}, -{75,23,17}, -{75,23,18}, -{75,23,19}, -{75,23,20}, -{75,23,21}, -{75,23,22}, -{75,23,23}, -{75,23,24}, -{75,23,25}, -{75,23,26}, -{75,23,27}, -{75,23,28}, -{75,23,29}, -{75,23,30}, -{75,23,31}, -{75,23,32}, -{75,23,33}, -{75,23,34}, -{75,23,35}, -{75,23,36}, -{75,23,37}, -{75,23,38}, -{75,23,39}, -{75,23,40}, -{75,23,41}, -{75,23,42}, -{75,23,43}, -{75,23,44}, -{75,23,45}, -{75,23,46}, -{75,23,47}, -{75,23,48}, -{75,23,49}, -{75,23,50}, -{75,23,51}, -{75,23,52}, -{75,23,53}, -{75,23,54}, -{75,23,55}, -{75,23,56}, -{75,23,57}, -{75,23,58}, -{75,23,59}, -{75,23,60}, -{75,23,61}, -{75,23,62}, -{75,23,63}, -{75,23,64}, -{75,23,65}, -{75,23,66}, -{75,23,67}, -{75,23,68}, -{75,23,69}, -{75,23,70}, -{75,23,71}, -{75,23,72}, -{75,23,73}, -{75,23,74}, -{75,23,75}, -{75,23,76}, -{75,23,77}, -{75,23,78}, -{75,23,79}, -{75,24,-38}, -{75,24,-37}, -{75,24,-36}, -{75,24,-35}, -{75,24,-34}, -{75,24,-33}, -{75,24,-32}, -{75,24,-31}, -{75,24,-30}, -{75,24,-29}, -{75,24,-28}, -{75,24,-27}, -{75,24,-26}, -{75,24,-25}, -{75,24,-24}, -{75,24,-23}, -{75,24,-22}, -{75,24,-21}, -{75,24,-20}, -{75,24,-19}, -{75,24,-18}, -{75,24,-17}, -{75,24,-16}, -{75,24,-15}, -{75,24,-14}, -{75,24,-13}, -{75,24,-12}, -{75,24,-11}, -{75,24,-10}, -{75,24,-9}, -{75,24,-8}, -{75,24,-7}, -{75,24,-6}, -{75,24,-5}, -{75,24,-4}, -{75,24,-3}, -{75,24,-2}, -{75,24,-1}, -{75,24,0}, -{75,24,1}, -{75,24,2}, -{75,24,3}, -{75,24,4}, -{75,24,5}, -{75,24,6}, -{75,24,7}, -{75,24,8}, -{75,24,9}, -{75,24,10}, -{75,24,11}, -{75,24,12}, -{75,24,13}, -{75,24,14}, -{75,24,15}, -{75,24,16}, -{75,24,17}, -{75,24,18}, -{75,24,19}, -{75,24,20}, -{75,24,21}, -{75,24,22}, -{75,24,23}, -{75,24,24}, -{75,24,25}, -{75,24,26}, -{75,24,27}, -{75,24,28}, -{75,24,29}, -{75,24,30}, -{75,24,31}, -{75,24,32}, -{75,24,33}, -{75,24,34}, -{75,24,35}, -{75,24,36}, -{75,24,37}, -{75,24,38}, -{75,24,39}, -{75,24,40}, -{75,24,41}, -{75,24,42}, -{75,24,43}, -{75,24,44}, -{75,24,45}, -{75,24,46}, -{75,24,47}, -{75,24,48}, -{75,24,49}, -{75,24,50}, -{75,24,51}, -{75,24,52}, -{75,24,53}, -{75,24,54}, -{75,24,55}, -{75,24,56}, -{75,24,57}, -{75,24,58}, -{75,24,59}, -{75,24,60}, -{75,24,61}, -{75,24,62}, -{75,24,63}, -{75,24,64}, -{75,24,65}, -{75,24,66}, -{75,24,67}, -{75,24,68}, -{75,24,69}, -{75,24,70}, -{75,24,71}, -{75,24,72}, -{75,24,73}, -{75,24,74}, -{75,24,75}, -{75,24,76}, -{75,24,77}, -{75,24,78}, -{75,25,-38}, -{75,25,-37}, -{75,25,-36}, -{75,25,-35}, -{75,25,-34}, -{75,25,-33}, -{75,25,-32}, -{75,25,-31}, -{75,25,-30}, -{75,25,-29}, -{75,25,-28}, -{75,25,-27}, -{75,25,-26}, -{75,25,-25}, -{75,25,-24}, -{75,25,-23}, -{75,25,-22}, -{75,25,-21}, -{75,25,-20}, -{75,25,-19}, -{75,25,-18}, -{75,25,-17}, -{75,25,-16}, -{75,25,-15}, -{75,25,-14}, -{75,25,-13}, -{75,25,-12}, -{75,25,-11}, -{75,25,-10}, -{75,25,-9}, -{75,25,-8}, -{75,25,-7}, -{75,25,-6}, -{75,25,-5}, -{75,25,-4}, -{75,25,-3}, -{75,25,-2}, -{75,25,-1}, -{75,25,0}, -{75,25,1}, -{75,25,2}, -{75,25,3}, -{75,25,4}, -{75,25,5}, -{75,25,6}, -{75,25,7}, -{75,25,8}, -{75,25,9}, -{75,25,10}, -{75,25,11}, -{75,25,12}, -{75,25,13}, -{75,25,14}, -{75,25,15}, -{75,25,16}, -{75,25,17}, -{75,25,18}, -{75,25,19}, -{75,25,20}, -{75,25,21}, -{75,25,22}, -{75,25,23}, -{75,25,24}, -{75,25,25}, -{75,25,26}, -{75,25,27}, -{75,25,28}, -{75,25,29}, -{75,25,30}, -{75,25,31}, -{75,25,32}, -{75,25,33}, -{75,25,34}, -{75,25,35}, -{75,25,36}, -{75,25,37}, -{75,25,38}, -{75,25,39}, -{75,25,40}, -{75,25,41}, -{75,25,42}, -{75,25,43}, -{75,25,44}, -{75,25,45}, -{75,25,46}, -{75,25,47}, -{75,25,48}, -{75,25,49}, -{75,25,50}, -{75,25,51}, -{75,25,52}, -{75,25,53}, -{75,25,54}, -{75,25,55}, -{75,25,56}, -{75,25,57}, -{75,25,58}, -{75,25,59}, -{75,25,60}, -{75,25,61}, -{75,25,62}, -{75,25,63}, -{75,25,64}, -{75,25,65}, -{75,25,66}, -{75,25,67}, -{75,25,68}, -{75,25,69}, -{75,26,-38}, -{75,26,-37}, -{75,26,-36}, -{75,26,-35}, -{75,26,-34}, -{75,26,-33}, -{75,26,-32}, -{75,26,-31}, -{75,26,-30}, -{75,26,-29}, -{75,26,-28}, -{75,26,-27}, -{75,26,-26}, -{75,26,-25}, -{75,26,-24}, -{75,26,-23}, -{75,26,-22}, -{75,26,-21}, -{75,26,-20}, -{75,26,-19}, -{75,26,-18}, -{75,26,-17}, -{75,26,-16}, -{75,26,-15}, -{75,26,-14}, -{75,26,-13}, -{75,26,-12}, -{75,26,-11}, -{75,26,-10}, -{75,26,-9}, -{75,26,-8}, -{75,26,-7}, -{75,26,-6}, -{75,26,-5}, -{75,26,-4}, -{75,26,-3}, -{75,26,-2}, -{75,26,-1}, -{75,26,0}, -{75,26,1}, -{75,26,2}, -{75,26,3}, -{75,26,4}, -{75,26,5}, -{75,26,6}, -{75,26,7}, -{75,26,8}, -{75,26,9}, -{75,26,10}, -{75,26,11}, -{75,26,12}, -{75,26,13}, -{75,26,14}, -{75,26,15}, -{75,26,16}, -{75,26,17}, -{75,26,18}, -{75,26,19}, -{75,26,20}, -{75,26,21}, -{75,26,22}, -{75,26,23}, -{75,26,24}, -{75,26,25}, -{75,26,26}, -{75,26,27}, -{75,26,28}, -{75,26,29}, -{75,26,30}, -{75,26,31}, -{75,26,32}, -{75,26,33}, -{75,26,34}, -{75,26,35}, -{75,26,36}, -{75,26,37}, -{75,26,38}, -{75,26,39}, -{75,26,40}, -{75,26,41}, -{75,26,42}, -{75,26,43}, -{75,26,44}, -{75,26,45}, -{75,26,46}, -{75,26,47}, -{75,26,48}, -{75,26,49}, -{75,26,50}, -{75,26,51}, -{75,26,52}, -{75,26,53}, -{75,26,54}, -{75,26,55}, -{75,26,56}, -{75,26,57}, -{75,26,58}, -{75,26,59}, -{75,26,60}, -{75,26,61}, -{75,27,-38}, -{75,27,-37}, -{75,27,-36}, -{75,27,-35}, -{75,27,-34}, -{75,27,-33}, -{75,27,-32}, -{75,27,-31}, -{75,27,-30}, -{75,27,-29}, -{75,27,-28}, -{75,27,-27}, -{75,27,-26}, -{75,27,-25}, -{75,27,-24}, -{75,27,-23}, -{75,27,-22}, -{75,27,-21}, -{75,27,-20}, -{75,27,-19}, -{75,27,-18}, -{75,27,-17}, -{75,27,-16}, -{75,27,-15}, -{75,27,-14}, -{75,27,-13}, -{75,27,-12}, -{75,27,-11}, -{75,27,-10}, -{75,27,-9}, -{75,27,-8}, -{75,27,-7}, -{75,27,-6}, -{75,27,-5}, -{75,27,-4}, -{75,27,-3}, -{75,27,-2}, -{75,27,-1}, -{75,27,0}, -{75,27,1}, -{75,27,2}, -{75,27,3}, -{75,27,4}, -{75,27,5}, -{75,27,6}, -{75,27,7}, -{75,27,8}, -{75,27,9}, -{75,27,10}, -{75,27,11}, -{75,27,12}, -{75,27,13}, -{75,27,14}, -{75,27,15}, -{75,27,16}, -{75,27,17}, -{75,27,18}, -{75,27,19}, -{75,27,20}, -{75,27,21}, -{75,27,22}, -{75,27,23}, -{75,27,24}, -{75,27,25}, -{75,27,26}, -{75,27,27}, -{75,27,28}, -{75,27,29}, -{75,27,30}, -{75,27,31}, -{75,27,32}, -{75,27,33}, -{75,27,34}, -{75,27,35}, -{75,27,36}, -{75,27,37}, -{75,27,38}, -{75,27,39}, -{75,27,40}, -{75,27,41}, -{75,27,42}, -{75,27,43}, -{75,27,44}, -{75,27,45}, -{75,27,46}, -{75,27,47}, -{75,27,48}, -{75,27,49}, -{75,27,50}, -{75,27,51}, -{75,27,52}, -{75,27,53}, -{75,27,54}, -{75,27,55}, -{75,28,-38}, -{75,28,-37}, -{75,28,-36}, -{75,28,-35}, -{75,28,-34}, -{75,28,-33}, -{75,28,-32}, -{75,28,-31}, -{75,28,-30}, -{75,28,-29}, -{75,28,-28}, -{75,28,-27}, -{75,28,-26}, -{75,28,-25}, -{75,28,-24}, -{75,28,-23}, -{75,28,-22}, -{75,28,-21}, -{75,28,-20}, -{75,28,-19}, -{75,28,-18}, -{75,28,-17}, -{75,28,-16}, -{75,28,-15}, -{75,28,-14}, -{75,28,-13}, -{75,28,-12}, -{75,28,-11}, -{75,28,-10}, -{75,28,-9}, -{75,28,-8}, -{75,28,-7}, -{75,28,-6}, -{75,28,-5}, -{75,28,-4}, -{75,28,-3}, -{75,28,-2}, -{75,28,-1}, -{75,28,0}, -{75,28,1}, -{75,28,2}, -{75,28,3}, -{75,28,4}, -{75,28,5}, -{75,28,6}, -{75,28,7}, -{75,28,8}, -{75,28,9}, -{75,28,10}, -{75,28,11}, -{75,28,12}, -{75,28,13}, -{75,28,14}, -{75,28,15}, -{75,28,16}, -{75,28,17}, -{75,28,18}, -{75,28,19}, -{75,28,20}, -{75,28,21}, -{75,28,22}, -{75,28,23}, -{75,28,24}, -{75,28,25}, -{75,28,26}, -{75,28,27}, -{75,28,28}, -{75,28,29}, -{75,28,30}, -{75,28,31}, -{75,28,32}, -{75,28,33}, -{75,28,34}, -{75,28,35}, -{75,28,36}, -{75,28,37}, -{75,28,38}, -{75,28,39}, -{75,28,40}, -{75,28,41}, -{75,28,42}, -{75,28,43}, -{75,28,44}, -{75,28,45}, -{75,28,46}, -{75,28,47}, -{75,28,48}, -{75,28,49}, -{75,29,-38}, -{75,29,-37}, -{75,29,-36}, -{75,29,-35}, -{75,29,-34}, -{75,29,-33}, -{75,29,-32}, -{75,29,-31}, -{75,29,-30}, -{75,29,-29}, -{75,29,-28}, -{75,29,-27}, -{75,29,-26}, -{75,29,-25}, -{75,29,-24}, -{75,29,-23}, -{75,29,-22}, -{75,29,-21}, -{75,29,-20}, -{75,29,-19}, -{75,29,-18}, -{75,29,-17}, -{75,29,-16}, -{75,29,-15}, -{75,29,-14}, -{75,29,-13}, -{75,29,-12}, -{75,29,-11}, -{75,29,-10}, -{75,29,-9}, -{75,29,-8}, -{75,29,-7}, -{75,29,-6}, -{75,29,-5}, -{75,29,-4}, -{75,29,-3}, -{75,29,-2}, -{75,29,-1}, -{75,29,0}, -{75,29,1}, -{75,29,2}, -{75,29,3}, -{75,29,4}, -{75,29,5}, -{75,29,6}, -{75,29,7}, -{75,29,8}, -{75,29,9}, -{75,29,10}, -{75,29,11}, -{75,29,12}, -{75,29,13}, -{75,29,14}, -{75,29,15}, -{75,29,16}, -{75,29,17}, -{75,29,18}, -{75,29,19}, -{75,29,20}, -{75,29,21}, -{75,29,22}, -{75,29,23}, -{75,29,24}, -{75,29,25}, -{75,29,26}, -{75,29,27}, -{75,29,28}, -{75,29,29}, -{75,29,30}, -{75,29,31}, -{75,29,32}, -{75,29,33}, -{75,29,34}, -{75,29,35}, -{75,29,36}, -{75,29,37}, -{75,29,38}, -{75,29,39}, -{75,29,40}, -{75,29,41}, -{75,29,42}, -{75,29,43}, -{75,29,44}, -{75,30,-38}, -{75,30,-37}, -{75,30,-36}, -{75,30,-35}, -{75,30,-34}, -{75,30,-33}, -{75,30,-32}, -{75,30,-31}, -{75,30,-30}, -{75,30,-29}, -{75,30,-28}, -{75,30,-27}, -{75,30,-26}, -{75,30,-25}, -{75,30,-24}, -{75,30,-23}, -{75,30,-22}, -{75,30,-21}, -{75,30,-20}, -{75,30,-19}, -{75,30,-18}, -{75,30,-17}, -{75,30,-16}, -{75,30,-15}, -{75,30,-14}, -{75,30,-13}, -{75,30,-12}, -{75,30,-11}, -{75,30,-10}, -{75,30,-9}, -{75,30,-8}, -{75,30,-7}, -{75,30,-6}, -{75,30,-5}, -{75,30,-4}, -{75,30,-3}, -{75,30,-2}, -{75,30,-1}, -{75,30,0}, -{75,30,1}, -{75,30,2}, -{75,30,3}, -{75,30,4}, -{75,30,5}, -{75,30,6}, -{75,30,7}, -{75,30,8}, -{75,30,9}, -{75,30,10}, -{75,30,11}, -{75,30,12}, -{75,30,13}, -{75,30,14}, -{75,30,15}, -{75,30,16}, -{75,30,17}, -{75,30,18}, -{75,30,19}, -{75,30,20}, -{75,30,21}, -{75,30,22}, -{75,30,23}, -{75,30,24}, -{75,30,25}, -{75,30,26}, -{75,30,27}, -{75,30,28}, -{75,30,29}, -{75,30,30}, -{75,30,31}, -{75,30,32}, -{75,30,33}, -{75,30,34}, -{75,30,35}, -{75,30,36}, -{75,30,37}, -{75,30,38}, -{75,30,39}, -{75,31,-38}, -{75,31,-37}, -{75,31,-36}, -{75,31,-35}, -{75,31,-34}, -{75,31,-33}, -{75,31,-32}, -{75,31,-31}, -{75,31,-30}, -{75,31,-29}, -{75,31,-28}, -{75,31,-27}, -{75,31,-26}, -{75,31,-25}, -{75,31,-24}, -{75,31,-23}, -{75,31,-22}, -{75,31,-21}, -{75,31,-20}, -{75,31,-19}, -{75,31,-18}, -{75,31,-17}, -{75,31,-16}, -{75,31,-15}, -{75,31,-14}, -{75,31,-13}, -{75,31,-12}, -{75,31,-11}, -{75,31,-10}, -{75,31,-9}, -{75,31,-8}, -{75,31,-7}, -{75,31,-6}, -{75,31,-5}, -{75,31,-4}, -{75,31,-3}, -{75,31,-2}, -{75,31,-1}, -{75,31,0}, -{75,31,1}, -{75,31,2}, -{75,31,3}, -{75,31,4}, -{75,31,5}, -{75,31,6}, -{75,31,7}, -{75,31,8}, -{75,31,9}, -{75,31,10}, -{75,31,11}, -{75,31,12}, -{75,31,13}, -{75,31,14}, -{75,31,15}, -{75,31,16}, -{75,31,17}, -{75,31,18}, -{75,31,19}, -{75,31,20}, -{75,31,21}, -{75,31,22}, -{75,31,23}, -{75,31,24}, -{75,31,25}, -{75,31,26}, -{75,31,27}, -{75,31,28}, -{75,31,29}, -{75,31,30}, -{75,31,31}, -{75,31,32}, -{75,31,33}, -{75,31,34}, -{75,32,-38}, -{75,32,-37}, -{75,32,-36}, -{75,32,-35}, -{75,32,-34}, -{75,32,-33}, -{75,32,-32}, -{75,32,-31}, -{75,32,-30}, -{75,32,-29}, -{75,32,-28}, -{75,32,-27}, -{75,32,-26}, -{75,32,-25}, -{75,32,-24}, -{75,32,-23}, -{75,32,-22}, -{75,32,-21}, -{75,32,-20}, -{75,32,-19}, -{75,32,-18}, -{75,32,-17}, -{75,32,-16}, -{75,32,-15}, -{75,32,-14}, -{75,32,-13}, -{75,32,-12}, -{75,32,-11}, -{75,32,-10}, -{75,32,-9}, -{75,32,-8}, -{75,32,-7}, -{75,32,-6}, -{75,32,-5}, -{75,32,-4}, -{75,32,-3}, -{75,32,-2}, -{75,32,-1}, -{75,32,0}, -{75,32,1}, -{75,32,2}, -{75,32,3}, -{75,32,4}, -{75,32,5}, -{75,32,6}, -{75,32,7}, -{75,32,8}, -{75,32,9}, -{75,32,10}, -{75,32,11}, -{75,32,12}, -{75,32,13}, -{75,32,14}, -{75,32,15}, -{75,32,16}, -{75,32,17}, -{75,32,18}, -{75,32,19}, -{75,32,20}, -{75,32,21}, -{75,32,22}, -{75,32,23}, -{75,32,24}, -{75,32,25}, -{75,32,26}, -{75,32,27}, -{75,32,28}, -{75,32,29}, -{75,32,30}, -{75,33,-38}, -{75,33,-37}, -{75,33,-36}, -{75,33,-35}, -{75,33,-34}, -{75,33,-33}, -{75,33,-32}, -{75,33,-31}, -{75,33,-30}, -{75,33,-29}, -{75,33,-28}, -{75,33,-27}, -{75,33,-26}, -{75,33,-25}, -{75,33,-24}, -{75,33,-23}, -{75,33,-22}, -{75,33,-21}, -{75,33,-20}, -{75,33,-19}, -{75,33,-18}, -{75,33,-17}, -{75,33,-16}, -{75,33,-15}, -{75,33,-14}, -{75,33,-13}, -{75,33,-12}, -{75,33,-11}, -{75,33,-10}, -{75,33,-9}, -{75,33,-8}, -{75,33,-7}, -{75,33,-6}, -{75,33,-5}, -{75,33,-4}, -{75,33,-3}, -{75,33,-2}, -{75,33,-1}, -{75,33,0}, -{75,33,1}, -{75,33,2}, -{75,33,3}, -{75,33,4}, -{75,33,5}, -{75,33,6}, -{75,33,7}, -{75,33,8}, -{75,33,9}, -{75,33,10}, -{75,33,11}, -{75,33,12}, -{75,33,13}, -{75,33,14}, -{75,33,15}, -{75,33,16}, -{75,33,17}, -{75,33,18}, -{75,33,19}, -{75,33,20}, -{75,33,21}, -{75,33,22}, -{75,33,23}, -{75,33,24}, -{75,33,25}, -{75,33,26}, -{75,34,-38}, -{75,34,-37}, -{75,34,-36}, -{75,34,-35}, -{75,34,-34}, -{75,34,-33}, -{75,34,-32}, -{75,34,-31}, -{75,34,-30}, -{75,34,-29}, -{75,34,-28}, -{75,34,-27}, -{75,34,-26}, -{75,34,-25}, -{75,34,-24}, -{75,34,-23}, -{75,34,-22}, -{75,34,-21}, -{75,34,-20}, -{75,34,-19}, -{75,34,-18}, -{75,34,-17}, -{75,34,-16}, -{75,34,-15}, -{75,34,-14}, -{75,34,-13}, -{75,34,-12}, -{75,34,-11}, -{75,34,-10}, -{75,34,-9}, -{75,34,-8}, -{75,34,-7}, -{75,34,-6}, -{75,34,-5}, -{75,34,-4}, -{75,34,-3}, -{75,34,-2}, -{75,34,-1}, -{75,34,0}, -{75,34,1}, -{75,34,2}, -{75,34,3}, -{75,34,4}, -{75,34,5}, -{75,34,6}, -{75,34,7}, -{75,34,8}, -{75,34,9}, -{75,34,10}, -{75,34,11}, -{75,34,12}, -{75,34,13}, -{75,34,14}, -{75,34,15}, -{75,34,16}, -{75,34,17}, -{75,34,18}, -{75,34,19}, -{75,34,20}, -{75,34,21}, -{75,34,22}, -{75,35,-38}, -{75,35,-37}, -{75,35,-36}, -{75,35,-35}, -{75,35,-34}, -{75,35,-33}, -{75,35,-32}, -{75,35,-31}, -{75,35,-30}, -{75,35,-29}, -{75,35,-28}, -{75,35,-27}, -{75,35,-26}, -{75,35,-25}, -{75,35,-24}, -{75,35,-23}, -{75,35,-22}, -{75,35,-21}, -{75,35,-20}, -{75,35,-19}, -{75,35,-18}, -{75,35,-17}, -{75,35,-16}, -{75,35,-15}, -{75,35,-14}, -{75,35,-13}, -{75,35,-12}, -{75,35,-11}, -{75,35,-10}, -{75,35,-9}, -{75,35,-8}, -{75,35,-7}, -{75,35,-6}, -{75,35,-5}, -{75,35,-4}, -{75,35,-3}, -{75,35,-2}, -{75,35,-1}, -{75,35,0}, -{75,35,1}, -{75,35,2}, -{75,35,3}, -{75,35,4}, -{75,35,5}, -{75,35,6}, -{75,35,7}, -{75,35,8}, -{75,35,9}, -{75,35,10}, -{75,35,11}, -{75,35,12}, -{75,35,13}, -{75,35,14}, -{75,35,15}, -{75,35,16}, -{75,35,17}, -{75,35,18}, -{75,35,19}, -{75,36,-38}, -{75,36,-37}, -{75,36,-36}, -{75,36,-35}, -{75,36,-34}, -{75,36,-33}, -{75,36,-32}, -{75,36,-31}, -{75,36,-30}, -{75,36,-29}, -{75,36,-28}, -{75,36,-27}, -{75,36,-26}, -{75,36,-25}, -{75,36,-24}, -{75,36,-23}, -{75,36,-22}, -{75,36,-21}, -{75,36,-20}, -{75,36,-19}, -{75,36,-18}, -{75,36,-17}, -{75,36,-16}, -{75,36,-15}, -{75,36,-14}, -{75,36,-13}, -{75,36,-12}, -{75,36,-11}, -{75,36,-10}, -{75,36,-9}, -{75,36,-8}, -{75,36,-7}, -{75,36,-6}, -{75,36,-5}, -{75,36,-4}, -{75,36,-3}, -{75,36,-2}, -{75,36,-1}, -{75,36,0}, -{75,36,1}, -{75,36,2}, -{75,36,3}, -{75,36,4}, -{75,36,5}, -{75,36,6}, -{75,36,7}, -{75,36,8}, -{75,36,9}, -{75,36,10}, -{75,36,11}, -{75,36,12}, -{75,36,13}, -{75,36,14}, -{75,36,15}, -{75,37,-38}, -{75,37,-37}, -{75,37,-36}, -{75,37,-35}, -{75,37,-34}, -{75,37,-33}, -{75,37,-32}, -{75,37,-31}, -{75,37,-30}, -{75,37,-29}, -{75,37,-28}, -{75,37,-27}, -{75,37,-26}, -{75,37,-25}, -{75,37,-24}, -{75,37,-23}, -{75,37,-22}, -{75,37,-21}, -{75,37,-20}, -{75,37,-19}, -{75,37,-18}, -{75,37,-17}, -{75,37,-16}, -{75,37,-15}, -{75,37,-14}, -{75,37,-13}, -{75,37,-12}, -{75,37,-11}, -{75,37,-10}, -{75,37,-9}, -{75,37,-8}, -{75,37,-7}, -{75,37,-6}, -{75,37,-5}, -{75,37,-4}, -{75,37,-3}, -{75,37,-2}, -{75,37,-1}, -{75,37,0}, -{75,37,1}, -{75,37,2}, -{75,37,3}, -{75,37,4}, -{75,37,5}, -{75,37,6}, -{75,37,7}, -{75,37,8}, -{75,37,9}, -{75,37,10}, -{75,37,11}, -{75,37,12}, -{75,38,-38}, -{75,38,-37}, -{75,38,-36}, -{75,38,-35}, -{75,38,-34}, -{75,38,-33}, -{75,38,-32}, -{75,38,-31}, -{75,38,-30}, -{75,38,-29}, -{75,38,-28}, -{75,38,-27}, -{75,38,-26}, -{75,38,-25}, -{75,38,-24}, -{75,38,-23}, -{75,38,-22}, -{75,38,-21}, -{75,38,-20}, -{75,38,-19}, -{75,38,-18}, -{75,38,-17}, -{75,38,-16}, -{75,38,-15}, -{75,38,-14}, -{75,38,-13}, -{75,38,-12}, -{75,38,-11}, -{75,38,-10}, -{75,38,-9}, -{75,38,-8}, -{75,38,-7}, -{75,38,-6}, -{75,38,-5}, -{75,38,-4}, -{75,38,-3}, -{75,38,-2}, -{75,38,-1}, -{75,38,0}, -{75,38,1}, -{75,38,2}, -{75,38,3}, -{75,38,4}, -{75,38,5}, -{75,38,6}, -{75,38,7}, -{75,38,8}, -{75,38,9}, -{75,39,-38}, -{75,39,-37}, -{75,39,-36}, -{75,39,-35}, -{75,39,-34}, -{75,39,-33}, -{75,39,-32}, -{75,39,-31}, -{75,39,-30}, -{75,39,-29}, -{75,39,-28}, -{75,39,-27}, -{75,39,-26}, -{75,39,-25}, -{75,39,-24}, -{75,39,-23}, -{75,39,-22}, -{75,39,-21}, -{75,39,-20}, -{75,39,-19}, -{75,39,-18}, -{75,39,-17}, -{75,39,-16}, -{75,39,-15}, -{75,39,-14}, -{75,39,-13}, -{75,39,-12}, -{75,39,-11}, -{75,39,-10}, -{75,39,-9}, -{75,39,-8}, -{75,39,-7}, -{75,39,-6}, -{75,39,-5}, -{75,39,-4}, -{75,39,-3}, -{75,39,-2}, -{75,39,-1}, -{75,39,0}, -{75,39,1}, -{75,39,2}, -{75,39,3}, -{75,39,4}, -{75,39,5}, -{75,39,6}, -{75,40,-38}, -{75,40,-37}, -{75,40,-36}, -{75,40,-35}, -{75,40,-34}, -{75,40,-33}, -{75,40,-32}, -{75,40,-31}, -{75,40,-30}, -{75,40,-29}, -{75,40,-28}, -{75,40,-27}, -{75,40,-26}, -{75,40,-25}, -{75,40,-24}, -{75,40,-23}, -{75,40,-22}, -{75,40,-21}, -{75,40,-20}, -{75,40,-19}, -{75,40,-18}, -{75,40,-17}, -{75,40,-16}, -{75,40,-15}, -{75,40,-14}, -{75,40,-13}, -{75,40,-12}, -{75,40,-11}, -{75,40,-10}, -{75,40,-9}, -{75,40,-8}, -{75,40,-7}, -{75,40,-6}, -{75,40,-5}, -{75,40,-4}, -{75,40,-3}, -{75,40,-2}, -{75,40,-1}, -{75,40,0}, -{75,40,1}, -{75,40,2}, -{75,40,3}, -{75,41,-38}, -{75,41,-37}, -{75,41,-36}, -{75,41,-35}, -{75,41,-34}, -{75,41,-33}, -{75,41,-32}, -{75,41,-31}, -{75,41,-30}, -{75,41,-29}, -{75,41,-28}, -{75,41,-27}, -{75,41,-26}, -{75,41,-25}, -{75,41,-24}, -{75,41,-23}, -{75,41,-22}, -{75,41,-21}, -{75,41,-20}, -{75,41,-19}, -{75,41,-18}, -{75,41,-17}, -{75,41,-16}, -{75,41,-15}, -{75,41,-14}, -{75,41,-13}, -{75,41,-12}, -{75,41,-11}, -{75,41,-10}, -{75,41,-9}, -{75,41,-8}, -{75,41,-7}, -{75,41,-6}, -{75,41,-5}, -{75,41,-4}, -{75,41,-3}, -{75,41,-2}, -{75,41,-1}, -{75,41,0}, -{75,42,-38}, -{75,42,-37}, -{75,42,-36}, -{75,42,-35}, -{75,42,-34}, -{75,42,-33}, -{75,42,-32}, -{75,42,-31}, -{75,42,-30}, -{75,42,-29}, -{75,42,-28}, -{75,42,-27}, -{75,42,-26}, -{75,42,-25}, -{75,42,-24}, -{75,42,-23}, -{75,42,-22}, -{75,42,-21}, -{75,42,-20}, -{75,42,-19}, -{75,42,-18}, -{75,42,-17}, -{75,42,-16}, -{75,42,-15}, -{75,42,-14}, -{75,42,-13}, -{75,42,-12}, -{75,42,-11}, -{75,42,-10}, -{75,42,-9}, -{75,42,-8}, -{75,42,-7}, -{75,42,-6}, -{75,42,-5}, -{75,42,-4}, -{75,42,-3}, -{75,43,-38}, -{75,43,-37}, -{75,43,-36}, -{75,43,-35}, -{75,43,-34}, -{75,43,-33}, -{75,43,-32}, -{75,43,-31}, -{75,43,-30}, -{75,43,-29}, -{75,43,-28}, -{75,43,-27}, -{75,43,-26}, -{75,43,-25}, -{75,43,-24}, -{75,43,-23}, -{75,43,-22}, -{75,43,-21}, -{75,43,-20}, -{75,43,-19}, -{75,43,-18}, -{75,43,-17}, -{75,43,-16}, -{75,43,-15}, -{75,43,-14}, -{75,43,-13}, -{75,43,-12}, -{75,43,-11}, -{75,43,-10}, -{75,43,-9}, -{75,43,-8}, -{75,43,-7}, -{75,43,-6}, -{75,43,-5}, -{75,44,-38}, -{75,44,-37}, -{75,44,-36}, -{75,44,-35}, -{75,44,-34}, -{75,44,-33}, -{75,44,-32}, -{75,44,-31}, -{75,44,-30}, -{75,44,-29}, -{75,44,-28}, -{75,44,-27}, -{75,44,-26}, -{75,44,-25}, -{75,44,-24}, -{75,44,-23}, -{75,44,-22}, -{75,44,-21}, -{75,44,-20}, -{75,44,-19}, -{75,44,-18}, -{75,44,-17}, -{75,44,-16}, -{75,44,-15}, -{75,44,-14}, -{75,44,-13}, -{75,44,-12}, -{75,44,-11}, -{75,44,-10}, -{75,44,-9}, -{75,44,-8}, -{75,45,-38}, -{75,45,-37}, -{75,45,-36}, -{75,45,-35}, -{75,45,-34}, -{75,45,-33}, -{75,45,-32}, -{75,45,-31}, -{75,45,-30}, -{75,45,-29}, -{75,45,-28}, -{75,45,-27}, -{75,45,-26}, -{75,45,-25}, -{75,45,-24}, -{75,45,-23}, -{75,45,-22}, -{75,45,-21}, -{75,45,-20}, -{75,45,-19}, -{75,45,-18}, -{75,45,-17}, -{75,45,-16}, -{75,45,-15}, -{75,45,-14}, -{75,45,-13}, -{75,45,-12}, -{75,45,-11}, -{75,45,-10}, -{75,46,-38}, -{75,46,-37}, -{75,46,-36}, -{75,46,-35}, -{75,46,-34}, -{75,46,-33}, -{75,46,-32}, -{75,46,-31}, -{75,46,-30}, -{75,46,-29}, -{75,46,-28}, -{75,46,-27}, -{75,46,-26}, -{75,46,-25}, -{75,46,-24}, -{75,46,-23}, -{75,46,-22}, -{75,46,-21}, -{75,46,-20}, -{75,46,-19}, -{75,46,-18}, -{75,46,-17}, -{75,46,-16}, -{75,46,-15}, -{75,46,-14}, -{75,46,-13}, -{75,47,-38}, -{75,47,-37}, -{75,47,-36}, -{75,47,-35}, -{75,47,-34}, -{75,47,-33}, -{75,47,-32}, -{75,47,-31}, -{75,47,-30}, -{75,47,-29}, -{75,47,-28}, -{75,47,-27}, -{75,47,-26}, -{75,47,-25}, -{75,47,-24}, -{75,47,-23}, -{75,47,-22}, -{75,47,-21}, -{75,47,-20}, -{75,47,-19}, -{75,47,-18}, -{75,47,-17}, -{75,47,-16}, -{75,47,-15}, -{75,48,-37}, -{75,48,-36}, -{75,48,-35}, -{75,48,-34}, -{75,48,-33}, -{75,48,-32}, -{75,48,-31}, -{75,48,-30}, -{75,48,-29}, -{75,48,-28}, -{75,48,-27}, -{75,48,-26}, -{75,48,-25}, -{75,48,-24}, -{75,48,-23}, -{75,48,-22}, -{75,48,-21}, -{75,48,-20}, -{75,48,-19}, -{75,48,-18}, -{75,49,-37}, -{75,49,-36}, -{75,49,-35}, -{75,49,-34}, -{75,49,-33}, -{75,49,-32}, -{75,49,-31}, -{75,49,-30}, -{75,49,-29}, -{75,49,-28}, -{75,49,-27}, -{75,49,-26}, -{75,49,-25}, -{75,49,-24}, -{75,49,-23}, -{75,49,-22}, -{75,49,-21}, -{75,49,-20}, -{75,50,-37}, -{75,50,-36}, -{75,50,-35}, -{75,50,-34}, -{75,50,-33}, -{75,50,-32}, -{75,50,-31}, -{75,50,-30}, -{75,50,-29}, -{75,50,-28}, -{75,50,-27}, -{75,50,-26}, -{75,50,-25}, -{75,50,-24}, -{75,50,-23}, -{75,50,-22}, -{75,51,-37}, -{75,51,-36}, -{75,51,-35}, -{75,51,-34}, -{75,51,-33}, -{75,51,-32}, -{75,51,-31}, -{75,51,-30}, -{75,51,-29}, -{75,51,-28}, -{75,51,-27}, -{75,51,-26}, -{75,51,-25}, -{75,51,-24}, -{75,52,-37}, -{75,52,-36}, -{75,52,-35}, -{75,52,-34}, -{75,52,-33}, -{75,52,-32}, -{75,52,-31}, -{75,52,-30}, -{75,52,-29}, -{75,52,-28}, -{75,52,-27}, -{75,53,-37}, -{75,53,-36}, -{75,53,-35}, -{75,53,-34}, -{75,53,-33}, -{75,53,-32}, -{75,53,-31}, -{75,53,-30}, -{75,53,-29}, -{75,54,-37}, -{75,54,-36}, -{75,54,-35}, -{75,54,-34}, -{75,54,-33}, -{75,54,-32}, -{75,54,-31}, -{75,55,-37}, -{75,55,-36}, -{75,55,-35}, -{75,55,-34}, -{75,55,-33}, -{75,56,-37}, -{75,56,-36}, -{75,56,-35}, -{75,57,-37}, -{76,-76,71}, -{76,-76,72}, -{76,-76,73}, -{76,-75,67}, -{76,-75,68}, -{76,-75,69}, -{76,-75,70}, -{76,-75,71}, -{76,-75,72}, -{76,-75,73}, -{76,-75,74}, -{76,-74,62}, -{76,-74,63}, -{76,-74,64}, -{76,-74,65}, -{76,-74,66}, -{76,-74,67}, -{76,-74,68}, -{76,-74,69}, -{76,-74,70}, -{76,-74,71}, -{76,-74,72}, -{76,-74,73}, -{76,-74,74}, -{76,-73,59}, -{76,-73,60}, -{76,-73,61}, -{76,-73,62}, -{76,-73,63}, -{76,-73,64}, -{76,-73,65}, -{76,-73,66}, -{76,-73,67}, -{76,-73,68}, -{76,-73,69}, -{76,-73,70}, -{76,-73,71}, -{76,-73,72}, -{76,-73,73}, -{76,-73,74}, -{76,-72,55}, -{76,-72,56}, -{76,-72,57}, -{76,-72,58}, -{76,-72,59}, -{76,-72,60}, -{76,-72,61}, -{76,-72,62}, -{76,-72,63}, -{76,-72,64}, -{76,-72,65}, -{76,-72,66}, -{76,-72,67}, -{76,-72,68}, -{76,-72,69}, -{76,-72,70}, -{76,-72,71}, -{76,-72,72}, -{76,-72,73}, -{76,-72,74}, -{76,-71,51}, -{76,-71,52}, -{76,-71,53}, -{76,-71,54}, -{76,-71,55}, -{76,-71,56}, -{76,-71,57}, -{76,-71,58}, -{76,-71,59}, -{76,-71,60}, -{76,-71,61}, -{76,-71,62}, -{76,-71,63}, -{76,-71,64}, -{76,-71,65}, -{76,-71,66}, -{76,-71,67}, -{76,-71,68}, -{76,-71,69}, -{76,-71,70}, -{76,-71,71}, -{76,-71,72}, -{76,-71,73}, -{76,-71,74}, -{76,-70,48}, -{76,-70,49}, -{76,-70,50}, -{76,-70,51}, -{76,-70,52}, -{76,-70,53}, -{76,-70,54}, -{76,-70,55}, -{76,-70,56}, -{76,-70,57}, -{76,-70,58}, -{76,-70,59}, -{76,-70,60}, -{76,-70,61}, -{76,-70,62}, -{76,-70,63}, -{76,-70,64}, -{76,-70,65}, -{76,-70,66}, -{76,-70,67}, -{76,-70,68}, -{76,-70,69}, -{76,-70,70}, -{76,-70,71}, -{76,-70,72}, -{76,-70,73}, -{76,-70,74}, -{76,-69,45}, -{76,-69,46}, -{76,-69,47}, -{76,-69,48}, -{76,-69,49}, -{76,-69,50}, -{76,-69,51}, -{76,-69,52}, -{76,-69,53}, -{76,-69,54}, -{76,-69,55}, -{76,-69,56}, -{76,-69,57}, -{76,-69,58}, -{76,-69,59}, -{76,-69,60}, -{76,-69,61}, -{76,-69,62}, -{76,-69,63}, -{76,-69,64}, -{76,-69,65}, -{76,-69,66}, -{76,-69,67}, -{76,-69,68}, -{76,-69,69}, -{76,-69,70}, -{76,-69,71}, -{76,-69,72}, -{76,-69,73}, -{76,-69,74}, -{76,-68,42}, -{76,-68,43}, -{76,-68,44}, -{76,-68,45}, -{76,-68,46}, -{76,-68,47}, -{76,-68,48}, -{76,-68,49}, -{76,-68,50}, -{76,-68,51}, -{76,-68,52}, -{76,-68,53}, -{76,-68,54}, -{76,-68,55}, -{76,-68,56}, -{76,-68,57}, -{76,-68,58}, -{76,-68,59}, -{76,-68,60}, -{76,-68,61}, -{76,-68,62}, -{76,-68,63}, -{76,-68,64}, -{76,-68,65}, -{76,-68,66}, -{76,-68,67}, -{76,-68,68}, -{76,-68,69}, -{76,-68,70}, -{76,-68,71}, -{76,-68,72}, -{76,-68,73}, -{76,-68,74}, -{76,-67,39}, -{76,-67,40}, -{76,-67,41}, -{76,-67,42}, -{76,-67,43}, -{76,-67,44}, -{76,-67,45}, -{76,-67,46}, -{76,-67,47}, -{76,-67,48}, -{76,-67,49}, -{76,-67,50}, -{76,-67,51}, -{76,-67,52}, -{76,-67,53}, -{76,-67,54}, -{76,-67,55}, -{76,-67,56}, -{76,-67,57}, -{76,-67,58}, -{76,-67,59}, -{76,-67,60}, -{76,-67,61}, -{76,-67,62}, -{76,-67,63}, -{76,-67,64}, -{76,-67,65}, -{76,-67,66}, -{76,-67,67}, -{76,-67,68}, -{76,-67,69}, -{76,-67,70}, -{76,-67,71}, -{76,-67,72}, -{76,-67,73}, -{76,-67,74}, -{76,-66,37}, -{76,-66,38}, -{76,-66,39}, -{76,-66,40}, -{76,-66,41}, -{76,-66,42}, -{76,-66,43}, -{76,-66,44}, -{76,-66,45}, -{76,-66,46}, -{76,-66,47}, -{76,-66,48}, -{76,-66,49}, -{76,-66,50}, -{76,-66,51}, -{76,-66,52}, -{76,-66,53}, -{76,-66,54}, -{76,-66,55}, -{76,-66,56}, -{76,-66,57}, -{76,-66,58}, -{76,-66,59}, -{76,-66,60}, -{76,-66,61}, -{76,-66,62}, -{76,-66,63}, -{76,-66,64}, -{76,-66,65}, -{76,-66,66}, -{76,-66,67}, -{76,-66,68}, -{76,-66,69}, -{76,-66,70}, -{76,-66,71}, -{76,-66,72}, -{76,-66,73}, -{76,-66,74}, -{76,-65,34}, -{76,-65,35}, -{76,-65,36}, -{76,-65,37}, -{76,-65,38}, -{76,-65,39}, -{76,-65,40}, -{76,-65,41}, -{76,-65,42}, -{76,-65,43}, -{76,-65,44}, -{76,-65,45}, -{76,-65,46}, -{76,-65,47}, -{76,-65,48}, -{76,-65,49}, -{76,-65,50}, -{76,-65,51}, -{76,-65,52}, -{76,-65,53}, -{76,-65,54}, -{76,-65,55}, -{76,-65,56}, -{76,-65,57}, -{76,-65,58}, -{76,-65,59}, -{76,-65,60}, -{76,-65,61}, -{76,-65,62}, -{76,-65,63}, -{76,-65,64}, -{76,-65,65}, -{76,-65,66}, -{76,-65,67}, -{76,-65,68}, -{76,-65,69}, -{76,-65,70}, -{76,-65,71}, -{76,-65,72}, -{76,-65,73}, -{76,-65,74}, -{76,-64,32}, -{76,-64,33}, -{76,-64,34}, -{76,-64,35}, -{76,-64,36}, -{76,-64,37}, -{76,-64,38}, -{76,-64,39}, -{76,-64,40}, -{76,-64,41}, -{76,-64,42}, -{76,-64,43}, -{76,-64,44}, -{76,-64,45}, -{76,-64,46}, -{76,-64,47}, -{76,-64,48}, -{76,-64,49}, -{76,-64,50}, -{76,-64,51}, -{76,-64,52}, -{76,-64,53}, -{76,-64,54}, -{76,-64,55}, -{76,-64,56}, -{76,-64,57}, -{76,-64,58}, -{76,-64,59}, -{76,-64,60}, -{76,-64,61}, -{76,-64,62}, -{76,-64,63}, -{76,-64,64}, -{76,-64,65}, -{76,-64,66}, -{76,-64,67}, -{76,-64,68}, -{76,-64,69}, -{76,-64,70}, -{76,-64,71}, -{76,-64,72}, -{76,-64,73}, -{76,-64,74}, -{76,-63,29}, -{76,-63,30}, -{76,-63,31}, -{76,-63,32}, -{76,-63,33}, -{76,-63,34}, -{76,-63,35}, -{76,-63,36}, -{76,-63,37}, -{76,-63,38}, -{76,-63,39}, -{76,-63,40}, -{76,-63,41}, -{76,-63,42}, -{76,-63,43}, -{76,-63,44}, -{76,-63,45}, -{76,-63,46}, -{76,-63,47}, -{76,-63,48}, -{76,-63,49}, -{76,-63,50}, -{76,-63,51}, -{76,-63,52}, -{76,-63,53}, -{76,-63,54}, -{76,-63,55}, -{76,-63,56}, -{76,-63,57}, -{76,-63,58}, -{76,-63,59}, -{76,-63,60}, -{76,-63,61}, -{76,-63,62}, -{76,-63,63}, -{76,-63,64}, -{76,-63,65}, -{76,-63,66}, -{76,-63,67}, -{76,-63,68}, -{76,-63,69}, -{76,-63,70}, -{76,-63,71}, -{76,-63,72}, -{76,-63,73}, -{76,-63,74}, -{76,-62,27}, -{76,-62,28}, -{76,-62,29}, -{76,-62,30}, -{76,-62,31}, -{76,-62,32}, -{76,-62,33}, -{76,-62,34}, -{76,-62,35}, -{76,-62,36}, -{76,-62,37}, -{76,-62,38}, -{76,-62,39}, -{76,-62,40}, -{76,-62,41}, -{76,-62,42}, -{76,-62,43}, -{76,-62,44}, -{76,-62,45}, -{76,-62,46}, -{76,-62,47}, -{76,-62,48}, -{76,-62,49}, -{76,-62,50}, -{76,-62,51}, -{76,-62,52}, -{76,-62,53}, -{76,-62,54}, -{76,-62,55}, -{76,-62,56}, -{76,-62,57}, -{76,-62,58}, -{76,-62,59}, -{76,-62,60}, -{76,-62,61}, -{76,-62,62}, -{76,-62,63}, -{76,-62,64}, -{76,-62,65}, -{76,-62,66}, -{76,-62,67}, -{76,-62,68}, -{76,-62,69}, -{76,-62,70}, -{76,-62,71}, -{76,-62,72}, -{76,-62,73}, -{76,-62,74}, -{76,-61,25}, -{76,-61,26}, -{76,-61,27}, -{76,-61,28}, -{76,-61,29}, -{76,-61,30}, -{76,-61,31}, -{76,-61,32}, -{76,-61,33}, -{76,-61,34}, -{76,-61,35}, -{76,-61,36}, -{76,-61,37}, -{76,-61,38}, -{76,-61,39}, -{76,-61,40}, -{76,-61,41}, -{76,-61,42}, -{76,-61,43}, -{76,-61,44}, -{76,-61,45}, -{76,-61,46}, -{76,-61,47}, -{76,-61,48}, -{76,-61,49}, -{76,-61,50}, -{76,-61,51}, -{76,-61,52}, -{76,-61,53}, -{76,-61,54}, -{76,-61,55}, -{76,-61,56}, -{76,-61,57}, -{76,-61,58}, -{76,-61,59}, -{76,-61,60}, -{76,-61,61}, -{76,-61,62}, -{76,-61,63}, -{76,-61,64}, -{76,-61,65}, -{76,-61,66}, -{76,-61,67}, -{76,-61,68}, -{76,-61,69}, -{76,-61,70}, -{76,-61,71}, -{76,-61,72}, -{76,-61,73}, -{76,-61,74}, -{76,-60,22}, -{76,-60,23}, -{76,-60,24}, -{76,-60,25}, -{76,-60,26}, -{76,-60,27}, -{76,-60,28}, -{76,-60,29}, -{76,-60,30}, -{76,-60,31}, -{76,-60,32}, -{76,-60,33}, -{76,-60,34}, -{76,-60,35}, -{76,-60,36}, -{76,-60,37}, -{76,-60,38}, -{76,-60,39}, -{76,-60,40}, -{76,-60,41}, -{76,-60,42}, -{76,-60,43}, -{76,-60,44}, -{76,-60,45}, -{76,-60,46}, -{76,-60,47}, -{76,-60,48}, -{76,-60,49}, -{76,-60,50}, -{76,-60,51}, -{76,-60,52}, -{76,-60,53}, -{76,-60,54}, -{76,-60,55}, -{76,-60,56}, -{76,-60,57}, -{76,-60,58}, -{76,-60,59}, -{76,-60,60}, -{76,-60,61}, -{76,-60,62}, -{76,-60,63}, -{76,-60,64}, -{76,-60,65}, -{76,-60,66}, -{76,-60,67}, -{76,-60,68}, -{76,-60,69}, -{76,-60,70}, -{76,-60,71}, -{76,-60,72}, -{76,-60,73}, -{76,-60,74}, -{76,-59,20}, -{76,-59,21}, -{76,-59,22}, -{76,-59,23}, -{76,-59,24}, -{76,-59,25}, -{76,-59,26}, -{76,-59,27}, -{76,-59,28}, -{76,-59,29}, -{76,-59,30}, -{76,-59,31}, -{76,-59,32}, -{76,-59,33}, -{76,-59,34}, -{76,-59,35}, -{76,-59,36}, -{76,-59,37}, -{76,-59,38}, -{76,-59,39}, -{76,-59,40}, -{76,-59,41}, -{76,-59,42}, -{76,-59,43}, -{76,-59,44}, -{76,-59,45}, -{76,-59,46}, -{76,-59,47}, -{76,-59,48}, -{76,-59,49}, -{76,-59,50}, -{76,-59,51}, -{76,-59,52}, -{76,-59,53}, -{76,-59,54}, -{76,-59,55}, -{76,-59,56}, -{76,-59,57}, -{76,-59,58}, -{76,-59,59}, -{76,-59,60}, -{76,-59,61}, -{76,-59,62}, -{76,-59,63}, -{76,-59,64}, -{76,-59,65}, -{76,-59,66}, -{76,-59,67}, -{76,-59,68}, -{76,-59,69}, -{76,-59,70}, -{76,-59,71}, -{76,-59,72}, -{76,-59,73}, -{76,-59,74}, -{76,-58,18}, -{76,-58,19}, -{76,-58,20}, -{76,-58,21}, -{76,-58,22}, -{76,-58,23}, -{76,-58,24}, -{76,-58,25}, -{76,-58,26}, -{76,-58,27}, -{76,-58,28}, -{76,-58,29}, -{76,-58,30}, -{76,-58,31}, -{76,-58,32}, -{76,-58,33}, -{76,-58,34}, -{76,-58,35}, -{76,-58,36}, -{76,-58,37}, -{76,-58,38}, -{76,-58,39}, -{76,-58,40}, -{76,-58,41}, -{76,-58,42}, -{76,-58,43}, -{76,-58,44}, -{76,-58,45}, -{76,-58,46}, -{76,-58,47}, -{76,-58,48}, -{76,-58,49}, -{76,-58,50}, -{76,-58,51}, -{76,-58,52}, -{76,-58,53}, -{76,-58,54}, -{76,-58,55}, -{76,-58,56}, -{76,-58,57}, -{76,-58,58}, -{76,-58,59}, -{76,-58,60}, -{76,-58,61}, -{76,-58,62}, -{76,-58,63}, -{76,-58,64}, -{76,-58,65}, -{76,-58,66}, -{76,-58,67}, -{76,-58,68}, -{76,-58,69}, -{76,-58,70}, -{76,-58,71}, -{76,-58,72}, -{76,-58,73}, -{76,-58,74}, -{76,-57,16}, -{76,-57,17}, -{76,-57,18}, -{76,-57,19}, -{76,-57,20}, -{76,-57,21}, -{76,-57,22}, -{76,-57,23}, -{76,-57,24}, -{76,-57,25}, -{76,-57,26}, -{76,-57,27}, -{76,-57,28}, -{76,-57,29}, -{76,-57,30}, -{76,-57,31}, -{76,-57,32}, -{76,-57,33}, -{76,-57,34}, -{76,-57,35}, -{76,-57,36}, -{76,-57,37}, -{76,-57,38}, -{76,-57,39}, -{76,-57,40}, -{76,-57,41}, -{76,-57,42}, -{76,-57,43}, -{76,-57,44}, -{76,-57,45}, -{76,-57,46}, -{76,-57,47}, -{76,-57,48}, -{76,-57,49}, -{76,-57,50}, -{76,-57,51}, -{76,-57,52}, -{76,-57,53}, -{76,-57,54}, -{76,-57,55}, -{76,-57,56}, -{76,-57,57}, -{76,-57,58}, -{76,-57,59}, -{76,-57,60}, -{76,-57,61}, -{76,-57,62}, -{76,-57,63}, -{76,-57,64}, -{76,-57,65}, -{76,-57,66}, -{76,-57,67}, -{76,-57,68}, -{76,-57,69}, -{76,-57,70}, -{76,-57,71}, -{76,-57,72}, -{76,-57,73}, -{76,-57,74}, -{76,-56,14}, -{76,-56,15}, -{76,-56,16}, -{76,-56,17}, -{76,-56,18}, -{76,-56,19}, -{76,-56,20}, -{76,-56,21}, -{76,-56,22}, -{76,-56,23}, -{76,-56,24}, -{76,-56,25}, -{76,-56,26}, -{76,-56,27}, -{76,-56,28}, -{76,-56,29}, -{76,-56,30}, -{76,-56,31}, -{76,-56,32}, -{76,-56,33}, -{76,-56,34}, -{76,-56,35}, -{76,-56,36}, -{76,-56,37}, -{76,-56,38}, -{76,-56,39}, -{76,-56,40}, -{76,-56,41}, -{76,-56,42}, -{76,-56,43}, -{76,-56,44}, -{76,-56,45}, -{76,-56,46}, -{76,-56,47}, -{76,-56,48}, -{76,-56,49}, -{76,-56,50}, -{76,-56,51}, -{76,-56,52}, -{76,-56,53}, -{76,-56,54}, -{76,-56,55}, -{76,-56,56}, -{76,-56,57}, -{76,-56,58}, -{76,-56,59}, -{76,-56,60}, -{76,-56,61}, -{76,-56,62}, -{76,-56,63}, -{76,-56,64}, -{76,-56,65}, -{76,-56,66}, -{76,-56,67}, -{76,-56,68}, -{76,-56,69}, -{76,-56,70}, -{76,-56,71}, -{76,-56,72}, -{76,-56,73}, -{76,-56,74}, -{76,-55,12}, -{76,-55,13}, -{76,-55,14}, -{76,-55,15}, -{76,-55,16}, -{76,-55,17}, -{76,-55,18}, -{76,-55,19}, -{76,-55,20}, -{76,-55,21}, -{76,-55,22}, -{76,-55,23}, -{76,-55,24}, -{76,-55,25}, -{76,-55,26}, -{76,-55,27}, -{76,-55,28}, -{76,-55,29}, -{76,-55,30}, -{76,-55,31}, -{76,-55,32}, -{76,-55,33}, -{76,-55,34}, -{76,-55,35}, -{76,-55,36}, -{76,-55,37}, -{76,-55,38}, -{76,-55,39}, -{76,-55,40}, -{76,-55,41}, -{76,-55,42}, -{76,-55,43}, -{76,-55,44}, -{76,-55,45}, -{76,-55,46}, -{76,-55,47}, -{76,-55,48}, -{76,-55,49}, -{76,-55,50}, -{76,-55,51}, -{76,-55,52}, -{76,-55,53}, -{76,-55,54}, -{76,-55,55}, -{76,-55,56}, -{76,-55,57}, -{76,-55,58}, -{76,-55,59}, -{76,-55,60}, -{76,-55,61}, -{76,-55,62}, -{76,-55,63}, -{76,-55,64}, -{76,-55,65}, -{76,-55,66}, -{76,-55,67}, -{76,-55,68}, -{76,-55,69}, -{76,-55,70}, -{76,-55,71}, -{76,-55,72}, -{76,-55,73}, -{76,-55,74}, -{76,-54,10}, -{76,-54,11}, -{76,-54,12}, -{76,-54,13}, -{76,-54,14}, -{76,-54,15}, -{76,-54,16}, -{76,-54,17}, -{76,-54,18}, -{76,-54,19}, -{76,-54,20}, -{76,-54,21}, -{76,-54,22}, -{76,-54,23}, -{76,-54,24}, -{76,-54,25}, -{76,-54,26}, -{76,-54,27}, -{76,-54,28}, -{76,-54,29}, -{76,-54,30}, -{76,-54,31}, -{76,-54,32}, -{76,-54,33}, -{76,-54,34}, -{76,-54,35}, -{76,-54,36}, -{76,-54,37}, -{76,-54,38}, -{76,-54,39}, -{76,-54,40}, -{76,-54,41}, -{76,-54,42}, -{76,-54,43}, -{76,-54,44}, -{76,-54,45}, -{76,-54,46}, -{76,-54,47}, -{76,-54,48}, -{76,-54,49}, -{76,-54,50}, -{76,-54,51}, -{76,-54,52}, -{76,-54,53}, -{76,-54,54}, -{76,-54,55}, -{76,-54,56}, -{76,-54,57}, -{76,-54,58}, -{76,-54,59}, -{76,-54,60}, -{76,-54,61}, -{76,-54,62}, -{76,-54,63}, -{76,-54,64}, -{76,-54,65}, -{76,-54,66}, -{76,-54,67}, -{76,-54,68}, -{76,-54,69}, -{76,-54,70}, -{76,-54,71}, -{76,-54,72}, -{76,-54,73}, -{76,-54,74}, -{76,-53,8}, -{76,-53,9}, -{76,-53,10}, -{76,-53,11}, -{76,-53,12}, -{76,-53,13}, -{76,-53,14}, -{76,-53,15}, -{76,-53,16}, -{76,-53,17}, -{76,-53,18}, -{76,-53,19}, -{76,-53,20}, -{76,-53,21}, -{76,-53,22}, -{76,-53,23}, -{76,-53,24}, -{76,-53,25}, -{76,-53,26}, -{76,-53,27}, -{76,-53,28}, -{76,-53,29}, -{76,-53,30}, -{76,-53,31}, -{76,-53,32}, -{76,-53,33}, -{76,-53,34}, -{76,-53,35}, -{76,-53,36}, -{76,-53,37}, -{76,-53,38}, -{76,-53,39}, -{76,-53,40}, -{76,-53,41}, -{76,-53,42}, -{76,-53,43}, -{76,-53,44}, -{76,-53,45}, -{76,-53,46}, -{76,-53,47}, -{76,-53,48}, -{76,-53,49}, -{76,-53,50}, -{76,-53,51}, -{76,-53,52}, -{76,-53,53}, -{76,-53,54}, -{76,-53,55}, -{76,-53,56}, -{76,-53,57}, -{76,-53,58}, -{76,-53,59}, -{76,-53,60}, -{76,-53,61}, -{76,-53,62}, -{76,-53,63}, -{76,-53,64}, -{76,-53,65}, -{76,-53,66}, -{76,-53,67}, -{76,-53,68}, -{76,-53,69}, -{76,-53,70}, -{76,-53,71}, -{76,-53,72}, -{76,-53,73}, -{76,-53,74}, -{76,-53,75}, -{76,-52,6}, -{76,-52,7}, -{76,-52,8}, -{76,-52,9}, -{76,-52,10}, -{76,-52,11}, -{76,-52,12}, -{76,-52,13}, -{76,-52,14}, -{76,-52,15}, -{76,-52,16}, -{76,-52,17}, -{76,-52,18}, -{76,-52,19}, -{76,-52,20}, -{76,-52,21}, -{76,-52,22}, -{76,-52,23}, -{76,-52,24}, -{76,-52,25}, -{76,-52,26}, -{76,-52,27}, -{76,-52,28}, -{76,-52,29}, -{76,-52,30}, -{76,-52,31}, -{76,-52,32}, -{76,-52,33}, -{76,-52,34}, -{76,-52,35}, -{76,-52,36}, -{76,-52,37}, -{76,-52,38}, -{76,-52,39}, -{76,-52,40}, -{76,-52,41}, -{76,-52,42}, -{76,-52,43}, -{76,-52,44}, -{76,-52,45}, -{76,-52,46}, -{76,-52,47}, -{76,-52,48}, -{76,-52,49}, -{76,-52,50}, -{76,-52,51}, -{76,-52,52}, -{76,-52,53}, -{76,-52,54}, -{76,-52,55}, -{76,-52,56}, -{76,-52,57}, -{76,-52,58}, -{76,-52,59}, -{76,-52,60}, -{76,-52,61}, -{76,-52,62}, -{76,-52,63}, -{76,-52,64}, -{76,-52,65}, -{76,-52,66}, -{76,-52,67}, -{76,-52,68}, -{76,-52,69}, -{76,-52,70}, -{76,-52,71}, -{76,-52,72}, -{76,-52,73}, -{76,-52,74}, -{76,-52,75}, -{76,-51,4}, -{76,-51,5}, -{76,-51,6}, -{76,-51,7}, -{76,-51,8}, -{76,-51,9}, -{76,-51,10}, -{76,-51,11}, -{76,-51,12}, -{76,-51,13}, -{76,-51,14}, -{76,-51,15}, -{76,-51,16}, -{76,-51,17}, -{76,-51,18}, -{76,-51,19}, -{76,-51,20}, -{76,-51,21}, -{76,-51,22}, -{76,-51,23}, -{76,-51,24}, -{76,-51,25}, -{76,-51,26}, -{76,-51,27}, -{76,-51,28}, -{76,-51,29}, -{76,-51,30}, -{76,-51,31}, -{76,-51,32}, -{76,-51,33}, -{76,-51,34}, -{76,-51,35}, -{76,-51,36}, -{76,-51,37}, -{76,-51,38}, -{76,-51,39}, -{76,-51,40}, -{76,-51,41}, -{76,-51,42}, -{76,-51,43}, -{76,-51,44}, -{76,-51,45}, -{76,-51,46}, -{76,-51,47}, -{76,-51,48}, -{76,-51,49}, -{76,-51,50}, -{76,-51,51}, -{76,-51,52}, -{76,-51,53}, -{76,-51,54}, -{76,-51,55}, -{76,-51,56}, -{76,-51,57}, -{76,-51,58}, -{76,-51,59}, -{76,-51,60}, -{76,-51,61}, -{76,-51,62}, -{76,-51,63}, -{76,-51,64}, -{76,-51,65}, -{76,-51,66}, -{76,-51,67}, -{76,-51,68}, -{76,-51,69}, -{76,-51,70}, -{76,-51,71}, -{76,-51,72}, -{76,-51,73}, -{76,-51,74}, -{76,-51,75}, -{76,-50,3}, -{76,-50,4}, -{76,-50,5}, -{76,-50,6}, -{76,-50,7}, -{76,-50,8}, -{76,-50,9}, -{76,-50,10}, -{76,-50,11}, -{76,-50,12}, -{76,-50,13}, -{76,-50,14}, -{76,-50,15}, -{76,-50,16}, -{76,-50,17}, -{76,-50,18}, -{76,-50,19}, -{76,-50,20}, -{76,-50,21}, -{76,-50,22}, -{76,-50,23}, -{76,-50,24}, -{76,-50,25}, -{76,-50,26}, -{76,-50,27}, -{76,-50,28}, -{76,-50,29}, -{76,-50,30}, -{76,-50,31}, -{76,-50,32}, -{76,-50,33}, -{76,-50,34}, -{76,-50,35}, -{76,-50,36}, -{76,-50,37}, -{76,-50,38}, -{76,-50,39}, -{76,-50,40}, -{76,-50,41}, -{76,-50,42}, -{76,-50,43}, -{76,-50,44}, -{76,-50,45}, -{76,-50,46}, -{76,-50,47}, -{76,-50,48}, -{76,-50,49}, -{76,-50,50}, -{76,-50,51}, -{76,-50,52}, -{76,-50,53}, -{76,-50,54}, -{76,-50,55}, -{76,-50,56}, -{76,-50,57}, -{76,-50,58}, -{76,-50,59}, -{76,-50,60}, -{76,-50,61}, -{76,-50,62}, -{76,-50,63}, -{76,-50,64}, -{76,-50,65}, -{76,-50,66}, -{76,-50,67}, -{76,-50,68}, -{76,-50,69}, -{76,-50,70}, -{76,-50,71}, -{76,-50,72}, -{76,-50,73}, -{76,-50,74}, -{76,-50,75}, -{76,-49,1}, -{76,-49,2}, -{76,-49,3}, -{76,-49,4}, -{76,-49,5}, -{76,-49,6}, -{76,-49,7}, -{76,-49,8}, -{76,-49,9}, -{76,-49,10}, -{76,-49,11}, -{76,-49,12}, -{76,-49,13}, -{76,-49,14}, -{76,-49,15}, -{76,-49,16}, -{76,-49,17}, -{76,-49,18}, -{76,-49,19}, -{76,-49,20}, -{76,-49,21}, -{76,-49,22}, -{76,-49,23}, -{76,-49,24}, -{76,-49,25}, -{76,-49,26}, -{76,-49,27}, -{76,-49,28}, -{76,-49,29}, -{76,-49,30}, -{76,-49,31}, -{76,-49,32}, -{76,-49,33}, -{76,-49,34}, -{76,-49,35}, -{76,-49,36}, -{76,-49,37}, -{76,-49,38}, -{76,-49,39}, -{76,-49,40}, -{76,-49,41}, -{76,-49,42}, -{76,-49,43}, -{76,-49,44}, -{76,-49,45}, -{76,-49,46}, -{76,-49,47}, -{76,-49,48}, -{76,-49,49}, -{76,-49,50}, -{76,-49,51}, -{76,-49,52}, -{76,-49,53}, -{76,-49,54}, -{76,-49,55}, -{76,-49,56}, -{76,-49,57}, -{76,-49,58}, -{76,-49,59}, -{76,-49,60}, -{76,-49,61}, -{76,-49,62}, -{76,-49,63}, -{76,-49,64}, -{76,-49,65}, -{76,-49,66}, -{76,-49,67}, -{76,-49,68}, -{76,-49,69}, -{76,-49,70}, -{76,-49,71}, -{76,-49,72}, -{76,-49,73}, -{76,-49,74}, -{76,-49,75}, -{76,-48,-1}, -{76,-48,0}, -{76,-48,1}, -{76,-48,2}, -{76,-48,3}, -{76,-48,4}, -{76,-48,5}, -{76,-48,6}, -{76,-48,7}, -{76,-48,8}, -{76,-48,9}, -{76,-48,10}, -{76,-48,11}, -{76,-48,12}, -{76,-48,13}, -{76,-48,14}, -{76,-48,15}, -{76,-48,16}, -{76,-48,17}, -{76,-48,18}, -{76,-48,19}, -{76,-48,20}, -{76,-48,21}, -{76,-48,22}, -{76,-48,23}, -{76,-48,24}, -{76,-48,25}, -{76,-48,26}, -{76,-48,27}, -{76,-48,28}, -{76,-48,29}, -{76,-48,30}, -{76,-48,31}, -{76,-48,32}, -{76,-48,33}, -{76,-48,34}, -{76,-48,35}, -{76,-48,36}, -{76,-48,37}, -{76,-48,38}, -{76,-48,39}, -{76,-48,40}, -{76,-48,41}, -{76,-48,42}, -{76,-48,43}, -{76,-48,44}, -{76,-48,45}, -{76,-48,46}, -{76,-48,47}, -{76,-48,48}, -{76,-48,49}, -{76,-48,50}, -{76,-48,51}, -{76,-48,52}, -{76,-48,53}, -{76,-48,54}, -{76,-48,55}, -{76,-48,56}, -{76,-48,57}, -{76,-48,58}, -{76,-48,59}, -{76,-48,60}, -{76,-48,61}, -{76,-48,62}, -{76,-48,63}, -{76,-48,64}, -{76,-48,65}, -{76,-48,66}, -{76,-48,67}, -{76,-48,68}, -{76,-48,69}, -{76,-48,70}, -{76,-48,71}, -{76,-48,72}, -{76,-48,73}, -{76,-48,74}, -{76,-48,75}, -{76,-47,-3}, -{76,-47,-2}, -{76,-47,-1}, -{76,-47,0}, -{76,-47,1}, -{76,-47,2}, -{76,-47,3}, -{76,-47,4}, -{76,-47,5}, -{76,-47,6}, -{76,-47,7}, -{76,-47,8}, -{76,-47,9}, -{76,-47,10}, -{76,-47,11}, -{76,-47,12}, -{76,-47,13}, -{76,-47,14}, -{76,-47,15}, -{76,-47,16}, -{76,-47,17}, -{76,-47,18}, -{76,-47,19}, -{76,-47,20}, -{76,-47,21}, -{76,-47,22}, -{76,-47,23}, -{76,-47,24}, -{76,-47,25}, -{76,-47,26}, -{76,-47,27}, -{76,-47,28}, -{76,-47,29}, -{76,-47,30}, -{76,-47,31}, -{76,-47,32}, -{76,-47,33}, -{76,-47,34}, -{76,-47,35}, -{76,-47,36}, -{76,-47,37}, -{76,-47,38}, -{76,-47,39}, -{76,-47,40}, -{76,-47,41}, -{76,-47,42}, -{76,-47,43}, -{76,-47,44}, -{76,-47,45}, -{76,-47,46}, -{76,-47,47}, -{76,-47,48}, -{76,-47,49}, -{76,-47,50}, -{76,-47,51}, -{76,-47,52}, -{76,-47,53}, -{76,-47,54}, -{76,-47,55}, -{76,-47,56}, -{76,-47,57}, -{76,-47,58}, -{76,-47,59}, -{76,-47,60}, -{76,-47,61}, -{76,-47,62}, -{76,-47,63}, -{76,-47,64}, -{76,-47,65}, -{76,-47,66}, -{76,-47,67}, -{76,-47,68}, -{76,-47,69}, -{76,-47,70}, -{76,-47,71}, -{76,-47,72}, -{76,-47,73}, -{76,-47,74}, -{76,-47,75}, -{76,-46,-4}, -{76,-46,-3}, -{76,-46,-2}, -{76,-46,-1}, -{76,-46,0}, -{76,-46,1}, -{76,-46,2}, -{76,-46,3}, -{76,-46,4}, -{76,-46,5}, -{76,-46,6}, -{76,-46,7}, -{76,-46,8}, -{76,-46,9}, -{76,-46,10}, -{76,-46,11}, -{76,-46,12}, -{76,-46,13}, -{76,-46,14}, -{76,-46,15}, -{76,-46,16}, -{76,-46,17}, -{76,-46,18}, -{76,-46,19}, -{76,-46,20}, -{76,-46,21}, -{76,-46,22}, -{76,-46,23}, -{76,-46,24}, -{76,-46,25}, -{76,-46,26}, -{76,-46,27}, -{76,-46,28}, -{76,-46,29}, -{76,-46,30}, -{76,-46,31}, -{76,-46,32}, -{76,-46,33}, -{76,-46,34}, -{76,-46,35}, -{76,-46,36}, -{76,-46,37}, -{76,-46,38}, -{76,-46,39}, -{76,-46,40}, -{76,-46,41}, -{76,-46,42}, -{76,-46,43}, -{76,-46,44}, -{76,-46,45}, -{76,-46,46}, -{76,-46,47}, -{76,-46,48}, -{76,-46,49}, -{76,-46,50}, -{76,-46,51}, -{76,-46,52}, -{76,-46,53}, -{76,-46,54}, -{76,-46,55}, -{76,-46,56}, -{76,-46,57}, -{76,-46,58}, -{76,-46,59}, -{76,-46,60}, -{76,-46,61}, -{76,-46,62}, -{76,-46,63}, -{76,-46,64}, -{76,-46,65}, -{76,-46,66}, -{76,-46,67}, -{76,-46,68}, -{76,-46,69}, -{76,-46,70}, -{76,-46,71}, -{76,-46,72}, -{76,-46,73}, -{76,-46,74}, -{76,-46,75}, -{76,-45,-6}, -{76,-45,-5}, -{76,-45,-4}, -{76,-45,-3}, -{76,-45,-2}, -{76,-45,-1}, -{76,-45,0}, -{76,-45,1}, -{76,-45,2}, -{76,-45,3}, -{76,-45,4}, -{76,-45,5}, -{76,-45,6}, -{76,-45,7}, -{76,-45,8}, -{76,-45,9}, -{76,-45,10}, -{76,-45,11}, -{76,-45,12}, -{76,-45,13}, -{76,-45,14}, -{76,-45,15}, -{76,-45,16}, -{76,-45,17}, -{76,-45,18}, -{76,-45,19}, -{76,-45,20}, -{76,-45,21}, -{76,-45,22}, -{76,-45,23}, -{76,-45,24}, -{76,-45,25}, -{76,-45,26}, -{76,-45,27}, -{76,-45,28}, -{76,-45,29}, -{76,-45,30}, -{76,-45,31}, -{76,-45,32}, -{76,-45,33}, -{76,-45,34}, -{76,-45,35}, -{76,-45,36}, -{76,-45,37}, -{76,-45,38}, -{76,-45,39}, -{76,-45,40}, -{76,-45,41}, -{76,-45,42}, -{76,-45,43}, -{76,-45,44}, -{76,-45,45}, -{76,-45,46}, -{76,-45,47}, -{76,-45,48}, -{76,-45,49}, -{76,-45,50}, -{76,-45,51}, -{76,-45,52}, -{76,-45,53}, -{76,-45,54}, -{76,-45,55}, -{76,-45,56}, -{76,-45,57}, -{76,-45,58}, -{76,-45,59}, -{76,-45,60}, -{76,-45,61}, -{76,-45,62}, -{76,-45,63}, -{76,-45,64}, -{76,-45,65}, -{76,-45,66}, -{76,-45,67}, -{76,-45,68}, -{76,-45,69}, -{76,-45,70}, -{76,-45,71}, -{76,-45,72}, -{76,-45,73}, -{76,-45,74}, -{76,-45,75}, -{76,-44,-8}, -{76,-44,-7}, -{76,-44,-6}, -{76,-44,-5}, -{76,-44,-4}, -{76,-44,-3}, -{76,-44,-2}, -{76,-44,-1}, -{76,-44,0}, -{76,-44,1}, -{76,-44,2}, -{76,-44,3}, -{76,-44,4}, -{76,-44,5}, -{76,-44,6}, -{76,-44,7}, -{76,-44,8}, -{76,-44,9}, -{76,-44,10}, -{76,-44,11}, -{76,-44,12}, -{76,-44,13}, -{76,-44,14}, -{76,-44,15}, -{76,-44,16}, -{76,-44,17}, -{76,-44,18}, -{76,-44,19}, -{76,-44,20}, -{76,-44,21}, -{76,-44,22}, -{76,-44,23}, -{76,-44,24}, -{76,-44,25}, -{76,-44,26}, -{76,-44,27}, -{76,-44,28}, -{76,-44,29}, -{76,-44,30}, -{76,-44,31}, -{76,-44,32}, -{76,-44,33}, -{76,-44,34}, -{76,-44,35}, -{76,-44,36}, -{76,-44,37}, -{76,-44,38}, -{76,-44,39}, -{76,-44,40}, -{76,-44,41}, -{76,-44,42}, -{76,-44,43}, -{76,-44,44}, -{76,-44,45}, -{76,-44,46}, -{76,-44,47}, -{76,-44,48}, -{76,-44,49}, -{76,-44,50}, -{76,-44,51}, -{76,-44,52}, -{76,-44,53}, -{76,-44,54}, -{76,-44,55}, -{76,-44,56}, -{76,-44,57}, -{76,-44,58}, -{76,-44,59}, -{76,-44,60}, -{76,-44,61}, -{76,-44,62}, -{76,-44,63}, -{76,-44,64}, -{76,-44,65}, -{76,-44,66}, -{76,-44,67}, -{76,-44,68}, -{76,-44,69}, -{76,-44,70}, -{76,-44,71}, -{76,-44,72}, -{76,-44,73}, -{76,-44,74}, -{76,-44,75}, -{76,-43,-9}, -{76,-43,-8}, -{76,-43,-7}, -{76,-43,-6}, -{76,-43,-5}, -{76,-43,-4}, -{76,-43,-3}, -{76,-43,-2}, -{76,-43,-1}, -{76,-43,0}, -{76,-43,1}, -{76,-43,2}, -{76,-43,3}, -{76,-43,4}, -{76,-43,5}, -{76,-43,6}, -{76,-43,7}, -{76,-43,8}, -{76,-43,9}, -{76,-43,10}, -{76,-43,11}, -{76,-43,12}, -{76,-43,13}, -{76,-43,14}, -{76,-43,15}, -{76,-43,16}, -{76,-43,17}, -{76,-43,18}, -{76,-43,19}, -{76,-43,20}, -{76,-43,21}, -{76,-43,22}, -{76,-43,23}, -{76,-43,24}, -{76,-43,25}, -{76,-43,26}, -{76,-43,27}, -{76,-43,28}, -{76,-43,29}, -{76,-43,30}, -{76,-43,31}, -{76,-43,32}, -{76,-43,33}, -{76,-43,34}, -{76,-43,35}, -{76,-43,36}, -{76,-43,37}, -{76,-43,38}, -{76,-43,39}, -{76,-43,40}, -{76,-43,41}, -{76,-43,42}, -{76,-43,43}, -{76,-43,44}, -{76,-43,45}, -{76,-43,46}, -{76,-43,47}, -{76,-43,48}, -{76,-43,49}, -{76,-43,50}, -{76,-43,51}, -{76,-43,52}, -{76,-43,53}, -{76,-43,54}, -{76,-43,55}, -{76,-43,56}, -{76,-43,57}, -{76,-43,58}, -{76,-43,59}, -{76,-43,60}, -{76,-43,61}, -{76,-43,62}, -{76,-43,63}, -{76,-43,64}, -{76,-43,65}, -{76,-43,66}, -{76,-43,67}, -{76,-43,68}, -{76,-43,69}, -{76,-43,70}, -{76,-43,71}, -{76,-43,72}, -{76,-43,73}, -{76,-43,74}, -{76,-43,75}, -{76,-42,-11}, -{76,-42,-10}, -{76,-42,-9}, -{76,-42,-8}, -{76,-42,-7}, -{76,-42,-6}, -{76,-42,-5}, -{76,-42,-4}, -{76,-42,-3}, -{76,-42,-2}, -{76,-42,-1}, -{76,-42,0}, -{76,-42,1}, -{76,-42,2}, -{76,-42,3}, -{76,-42,4}, -{76,-42,5}, -{76,-42,6}, -{76,-42,7}, -{76,-42,8}, -{76,-42,9}, -{76,-42,10}, -{76,-42,11}, -{76,-42,12}, -{76,-42,13}, -{76,-42,14}, -{76,-42,15}, -{76,-42,16}, -{76,-42,17}, -{76,-42,18}, -{76,-42,19}, -{76,-42,20}, -{76,-42,21}, -{76,-42,22}, -{76,-42,23}, -{76,-42,24}, -{76,-42,25}, -{76,-42,26}, -{76,-42,27}, -{76,-42,28}, -{76,-42,29}, -{76,-42,30}, -{76,-42,31}, -{76,-42,32}, -{76,-42,33}, -{76,-42,34}, -{76,-42,35}, -{76,-42,36}, -{76,-42,37}, -{76,-42,38}, -{76,-42,39}, -{76,-42,40}, -{76,-42,41}, -{76,-42,42}, -{76,-42,43}, -{76,-42,44}, -{76,-42,45}, -{76,-42,46}, -{76,-42,47}, -{76,-42,48}, -{76,-42,49}, -{76,-42,50}, -{76,-42,51}, -{76,-42,52}, -{76,-42,53}, -{76,-42,54}, -{76,-42,55}, -{76,-42,56}, -{76,-42,57}, -{76,-42,58}, -{76,-42,59}, -{76,-42,60}, -{76,-42,61}, -{76,-42,62}, -{76,-42,63}, -{76,-42,64}, -{76,-42,65}, -{76,-42,66}, -{76,-42,67}, -{76,-42,68}, -{76,-42,69}, -{76,-42,70}, -{76,-42,71}, -{76,-42,72}, -{76,-42,73}, -{76,-42,74}, -{76,-42,75}, -{76,-41,-12}, -{76,-41,-11}, -{76,-41,-10}, -{76,-41,-9}, -{76,-41,-8}, -{76,-41,-7}, -{76,-41,-6}, -{76,-41,-5}, -{76,-41,-4}, -{76,-41,-3}, -{76,-41,-2}, -{76,-41,-1}, -{76,-41,0}, -{76,-41,1}, -{76,-41,2}, -{76,-41,3}, -{76,-41,4}, -{76,-41,5}, -{76,-41,6}, -{76,-41,7}, -{76,-41,8}, -{76,-41,9}, -{76,-41,10}, -{76,-41,11}, -{76,-41,12}, -{76,-41,13}, -{76,-41,14}, -{76,-41,15}, -{76,-41,16}, -{76,-41,17}, -{76,-41,18}, -{76,-41,19}, -{76,-41,20}, -{76,-41,21}, -{76,-41,22}, -{76,-41,23}, -{76,-41,24}, -{76,-41,25}, -{76,-41,26}, -{76,-41,27}, -{76,-41,28}, -{76,-41,29}, -{76,-41,30}, -{76,-41,31}, -{76,-41,32}, -{76,-41,33}, -{76,-41,34}, -{76,-41,35}, -{76,-41,36}, -{76,-41,37}, -{76,-41,38}, -{76,-41,39}, -{76,-41,40}, -{76,-41,41}, -{76,-41,42}, -{76,-41,43}, -{76,-41,44}, -{76,-41,45}, -{76,-41,46}, -{76,-41,47}, -{76,-41,48}, -{76,-41,49}, -{76,-41,50}, -{76,-41,51}, -{76,-41,52}, -{76,-41,53}, -{76,-41,54}, -{76,-41,55}, -{76,-41,56}, -{76,-41,57}, -{76,-41,58}, -{76,-41,59}, -{76,-41,60}, -{76,-41,61}, -{76,-41,62}, -{76,-41,63}, -{76,-41,64}, -{76,-41,65}, -{76,-41,66}, -{76,-41,67}, -{76,-41,68}, -{76,-41,69}, -{76,-41,70}, -{76,-41,71}, -{76,-41,72}, -{76,-41,73}, -{76,-41,74}, -{76,-41,75}, -{76,-40,-14}, -{76,-40,-13}, -{76,-40,-12}, -{76,-40,-11}, -{76,-40,-10}, -{76,-40,-9}, -{76,-40,-8}, -{76,-40,-7}, -{76,-40,-6}, -{76,-40,-5}, -{76,-40,-4}, -{76,-40,-3}, -{76,-40,-2}, -{76,-40,-1}, -{76,-40,0}, -{76,-40,1}, -{76,-40,2}, -{76,-40,3}, -{76,-40,4}, -{76,-40,5}, -{76,-40,6}, -{76,-40,7}, -{76,-40,8}, -{76,-40,9}, -{76,-40,10}, -{76,-40,11}, -{76,-40,12}, -{76,-40,13}, -{76,-40,14}, -{76,-40,15}, -{76,-40,16}, -{76,-40,17}, -{76,-40,18}, -{76,-40,19}, -{76,-40,20}, -{76,-40,21}, -{76,-40,22}, -{76,-40,23}, -{76,-40,24}, -{76,-40,25}, -{76,-40,26}, -{76,-40,27}, -{76,-40,28}, -{76,-40,29}, -{76,-40,30}, -{76,-40,31}, -{76,-40,32}, -{76,-40,33}, -{76,-40,34}, -{76,-40,35}, -{76,-40,36}, -{76,-40,37}, -{76,-40,38}, -{76,-40,39}, -{76,-40,40}, -{76,-40,41}, -{76,-40,42}, -{76,-40,43}, -{76,-40,44}, -{76,-40,45}, -{76,-40,46}, -{76,-40,47}, -{76,-40,48}, -{76,-40,49}, -{76,-40,50}, -{76,-40,51}, -{76,-40,52}, -{76,-40,53}, -{76,-40,54}, -{76,-40,55}, -{76,-40,56}, -{76,-40,57}, -{76,-40,58}, -{76,-40,59}, -{76,-40,60}, -{76,-40,61}, -{76,-40,62}, -{76,-40,63}, -{76,-40,64}, -{76,-40,65}, -{76,-40,66}, -{76,-40,67}, -{76,-40,68}, -{76,-40,69}, -{76,-40,70}, -{76,-40,71}, -{76,-40,72}, -{76,-40,73}, -{76,-40,74}, -{76,-40,75}, -{76,-39,-15}, -{76,-39,-14}, -{76,-39,-13}, -{76,-39,-12}, -{76,-39,-11}, -{76,-39,-10}, -{76,-39,-9}, -{76,-39,-8}, -{76,-39,-7}, -{76,-39,-6}, -{76,-39,-5}, -{76,-39,-4}, -{76,-39,-3}, -{76,-39,-2}, -{76,-39,-1}, -{76,-39,0}, -{76,-39,1}, -{76,-39,2}, -{76,-39,3}, -{76,-39,4}, -{76,-39,5}, -{76,-39,6}, -{76,-39,7}, -{76,-39,8}, -{76,-39,9}, -{76,-39,10}, -{76,-39,11}, -{76,-39,12}, -{76,-39,13}, -{76,-39,14}, -{76,-39,15}, -{76,-39,16}, -{76,-39,17}, -{76,-39,18}, -{76,-39,19}, -{76,-39,20}, -{76,-39,21}, -{76,-39,22}, -{76,-39,23}, -{76,-39,24}, -{76,-39,25}, -{76,-39,26}, -{76,-39,27}, -{76,-39,28}, -{76,-39,29}, -{76,-39,30}, -{76,-39,31}, -{76,-39,32}, -{76,-39,33}, -{76,-39,34}, -{76,-39,35}, -{76,-39,36}, -{76,-39,37}, -{76,-39,38}, -{76,-39,39}, -{76,-39,40}, -{76,-39,41}, -{76,-39,42}, -{76,-39,43}, -{76,-39,44}, -{76,-39,45}, -{76,-39,46}, -{76,-39,47}, -{76,-39,48}, -{76,-39,49}, -{76,-39,50}, -{76,-39,51}, -{76,-39,52}, -{76,-39,53}, -{76,-39,54}, -{76,-39,55}, -{76,-39,56}, -{76,-39,57}, -{76,-39,58}, -{76,-39,59}, -{76,-39,60}, -{76,-39,61}, -{76,-39,62}, -{76,-39,63}, -{76,-39,64}, -{76,-39,65}, -{76,-39,66}, -{76,-39,67}, -{76,-39,68}, -{76,-39,69}, -{76,-39,70}, -{76,-39,71}, -{76,-39,72}, -{76,-39,73}, -{76,-39,74}, -{76,-39,75}, -{76,-38,-17}, -{76,-38,-16}, -{76,-38,-15}, -{76,-38,-14}, -{76,-38,-13}, -{76,-38,-12}, -{76,-38,-11}, -{76,-38,-10}, -{76,-38,-9}, -{76,-38,-8}, -{76,-38,-7}, -{76,-38,-6}, -{76,-38,-5}, -{76,-38,-4}, -{76,-38,-3}, -{76,-38,-2}, -{76,-38,-1}, -{76,-38,0}, -{76,-38,1}, -{76,-38,2}, -{76,-38,3}, -{76,-38,4}, -{76,-38,5}, -{76,-38,6}, -{76,-38,7}, -{76,-38,8}, -{76,-38,9}, -{76,-38,10}, -{76,-38,11}, -{76,-38,12}, -{76,-38,13}, -{76,-38,14}, -{76,-38,15}, -{76,-38,16}, -{76,-38,17}, -{76,-38,18}, -{76,-38,19}, -{76,-38,20}, -{76,-38,21}, -{76,-38,22}, -{76,-38,23}, -{76,-38,24}, -{76,-38,25}, -{76,-38,26}, -{76,-38,27}, -{76,-38,28}, -{76,-38,29}, -{76,-38,30}, -{76,-38,31}, -{76,-38,32}, -{76,-38,33}, -{76,-38,34}, -{76,-38,35}, -{76,-38,36}, -{76,-38,37}, -{76,-38,38}, -{76,-38,39}, -{76,-38,40}, -{76,-38,41}, -{76,-38,42}, -{76,-38,43}, -{76,-38,44}, -{76,-38,45}, -{76,-38,46}, -{76,-38,47}, -{76,-38,48}, -{76,-38,49}, -{76,-38,50}, -{76,-38,51}, -{76,-38,52}, -{76,-38,53}, -{76,-38,54}, -{76,-38,55}, -{76,-38,56}, -{76,-38,57}, -{76,-38,58}, -{76,-38,59}, -{76,-38,60}, -{76,-38,61}, -{76,-38,62}, -{76,-38,63}, -{76,-38,64}, -{76,-38,65}, -{76,-38,66}, -{76,-38,67}, -{76,-38,68}, -{76,-38,69}, -{76,-38,70}, -{76,-38,71}, -{76,-38,72}, -{76,-38,73}, -{76,-38,74}, -{76,-38,75}, -{76,-37,-18}, -{76,-37,-17}, -{76,-37,-16}, -{76,-37,-15}, -{76,-37,-14}, -{76,-37,-13}, -{76,-37,-12}, -{76,-37,-11}, -{76,-37,-10}, -{76,-37,-9}, -{76,-37,-8}, -{76,-37,-7}, -{76,-37,-6}, -{76,-37,-5}, -{76,-37,-4}, -{76,-37,-3}, -{76,-37,-2}, -{76,-37,-1}, -{76,-37,0}, -{76,-37,1}, -{76,-37,2}, -{76,-37,3}, -{76,-37,4}, -{76,-37,5}, -{76,-37,6}, -{76,-37,7}, -{76,-37,8}, -{76,-37,9}, -{76,-37,10}, -{76,-37,11}, -{76,-37,12}, -{76,-37,13}, -{76,-37,14}, -{76,-37,15}, -{76,-37,16}, -{76,-37,17}, -{76,-37,18}, -{76,-37,19}, -{76,-37,20}, -{76,-37,21}, -{76,-37,22}, -{76,-37,23}, -{76,-37,24}, -{76,-37,25}, -{76,-37,26}, -{76,-37,27}, -{76,-37,28}, -{76,-37,29}, -{76,-37,30}, -{76,-37,31}, -{76,-37,32}, -{76,-37,33}, -{76,-37,34}, -{76,-37,35}, -{76,-37,36}, -{76,-37,37}, -{76,-37,38}, -{76,-37,39}, -{76,-37,40}, -{76,-37,41}, -{76,-37,42}, -{76,-37,43}, -{76,-37,44}, -{76,-37,45}, -{76,-37,46}, -{76,-37,47}, -{76,-37,48}, -{76,-37,49}, -{76,-37,50}, -{76,-37,51}, -{76,-37,52}, -{76,-37,53}, -{76,-37,54}, -{76,-37,55}, -{76,-37,56}, -{76,-37,57}, -{76,-37,58}, -{76,-37,59}, -{76,-37,60}, -{76,-37,61}, -{76,-37,62}, -{76,-37,63}, -{76,-37,64}, -{76,-37,65}, -{76,-37,66}, -{76,-37,67}, -{76,-37,68}, -{76,-37,69}, -{76,-37,70}, -{76,-37,71}, -{76,-37,72}, -{76,-37,73}, -{76,-37,74}, -{76,-37,75}, -{76,-36,-20}, -{76,-36,-19}, -{76,-36,-18}, -{76,-36,-17}, -{76,-36,-16}, -{76,-36,-15}, -{76,-36,-14}, -{76,-36,-13}, -{76,-36,-12}, -{76,-36,-11}, -{76,-36,-10}, -{76,-36,-9}, -{76,-36,-8}, -{76,-36,-7}, -{76,-36,-6}, -{76,-36,-5}, -{76,-36,-4}, -{76,-36,-3}, -{76,-36,-2}, -{76,-36,-1}, -{76,-36,0}, -{76,-36,1}, -{76,-36,2}, -{76,-36,3}, -{76,-36,4}, -{76,-36,5}, -{76,-36,6}, -{76,-36,7}, -{76,-36,8}, -{76,-36,9}, -{76,-36,10}, -{76,-36,11}, -{76,-36,12}, -{76,-36,13}, -{76,-36,14}, -{76,-36,15}, -{76,-36,16}, -{76,-36,17}, -{76,-36,18}, -{76,-36,19}, -{76,-36,20}, -{76,-36,21}, -{76,-36,22}, -{76,-36,23}, -{76,-36,24}, -{76,-36,25}, -{76,-36,26}, -{76,-36,27}, -{76,-36,28}, -{76,-36,29}, -{76,-36,30}, -{76,-36,31}, -{76,-36,32}, -{76,-36,33}, -{76,-36,34}, -{76,-36,35}, -{76,-36,36}, -{76,-36,37}, -{76,-36,38}, -{76,-36,39}, -{76,-36,40}, -{76,-36,41}, -{76,-36,42}, -{76,-36,43}, -{76,-36,44}, -{76,-36,45}, -{76,-36,46}, -{76,-36,47}, -{76,-36,48}, -{76,-36,49}, -{76,-36,50}, -{76,-36,51}, -{76,-36,52}, -{76,-36,53}, -{76,-36,54}, -{76,-36,55}, -{76,-36,56}, -{76,-36,57}, -{76,-36,58}, -{76,-36,59}, -{76,-36,60}, -{76,-36,61}, -{76,-36,62}, -{76,-36,63}, -{76,-36,64}, -{76,-36,65}, -{76,-36,66}, -{76,-36,67}, -{76,-36,68}, -{76,-36,69}, -{76,-36,70}, -{76,-36,71}, -{76,-36,72}, -{76,-36,73}, -{76,-36,74}, -{76,-36,75}, -{76,-35,-21}, -{76,-35,-20}, -{76,-35,-19}, -{76,-35,-18}, -{76,-35,-17}, -{76,-35,-16}, -{76,-35,-15}, -{76,-35,-14}, -{76,-35,-13}, -{76,-35,-12}, -{76,-35,-11}, -{76,-35,-10}, -{76,-35,-9}, -{76,-35,-8}, -{76,-35,-7}, -{76,-35,-6}, -{76,-35,-5}, -{76,-35,-4}, -{76,-35,-3}, -{76,-35,-2}, -{76,-35,-1}, -{76,-35,0}, -{76,-35,1}, -{76,-35,2}, -{76,-35,3}, -{76,-35,4}, -{76,-35,5}, -{76,-35,6}, -{76,-35,7}, -{76,-35,8}, -{76,-35,9}, -{76,-35,10}, -{76,-35,11}, -{76,-35,12}, -{76,-35,13}, -{76,-35,14}, -{76,-35,15}, -{76,-35,16}, -{76,-35,17}, -{76,-35,18}, -{76,-35,19}, -{76,-35,20}, -{76,-35,21}, -{76,-35,22}, -{76,-35,23}, -{76,-35,24}, -{76,-35,25}, -{76,-35,26}, -{76,-35,27}, -{76,-35,28}, -{76,-35,29}, -{76,-35,30}, -{76,-35,31}, -{76,-35,32}, -{76,-35,33}, -{76,-35,34}, -{76,-35,35}, -{76,-35,36}, -{76,-35,37}, -{76,-35,38}, -{76,-35,39}, -{76,-35,40}, -{76,-35,41}, -{76,-35,42}, -{76,-35,43}, -{76,-35,44}, -{76,-35,45}, -{76,-35,46}, -{76,-35,47}, -{76,-35,48}, -{76,-35,49}, -{76,-35,50}, -{76,-35,51}, -{76,-35,52}, -{76,-35,53}, -{76,-35,54}, -{76,-35,55}, -{76,-35,56}, -{76,-35,57}, -{76,-35,58}, -{76,-35,59}, -{76,-35,60}, -{76,-35,61}, -{76,-35,62}, -{76,-35,63}, -{76,-35,64}, -{76,-35,65}, -{76,-35,66}, -{76,-35,67}, -{76,-35,68}, -{76,-35,69}, -{76,-35,70}, -{76,-35,71}, -{76,-35,72}, -{76,-35,73}, -{76,-35,74}, -{76,-35,75}, -{76,-34,-23}, -{76,-34,-22}, -{76,-34,-21}, -{76,-34,-20}, -{76,-34,-19}, -{76,-34,-18}, -{76,-34,-17}, -{76,-34,-16}, -{76,-34,-15}, -{76,-34,-14}, -{76,-34,-13}, -{76,-34,-12}, -{76,-34,-11}, -{76,-34,-10}, -{76,-34,-9}, -{76,-34,-8}, -{76,-34,-7}, -{76,-34,-6}, -{76,-34,-5}, -{76,-34,-4}, -{76,-34,-3}, -{76,-34,-2}, -{76,-34,-1}, -{76,-34,0}, -{76,-34,1}, -{76,-34,2}, -{76,-34,3}, -{76,-34,4}, -{76,-34,5}, -{76,-34,6}, -{76,-34,7}, -{76,-34,8}, -{76,-34,9}, -{76,-34,10}, -{76,-34,11}, -{76,-34,12}, -{76,-34,13}, -{76,-34,14}, -{76,-34,15}, -{76,-34,16}, -{76,-34,17}, -{76,-34,18}, -{76,-34,19}, -{76,-34,20}, -{76,-34,21}, -{76,-34,22}, -{76,-34,23}, -{76,-34,24}, -{76,-34,25}, -{76,-34,26}, -{76,-34,27}, -{76,-34,28}, -{76,-34,29}, -{76,-34,30}, -{76,-34,31}, -{76,-34,32}, -{76,-34,33}, -{76,-34,34}, -{76,-34,35}, -{76,-34,36}, -{76,-34,37}, -{76,-34,38}, -{76,-34,39}, -{76,-34,40}, -{76,-34,41}, -{76,-34,42}, -{76,-34,43}, -{76,-34,44}, -{76,-34,45}, -{76,-34,46}, -{76,-34,47}, -{76,-34,48}, -{76,-34,49}, -{76,-34,50}, -{76,-34,51}, -{76,-34,52}, -{76,-34,53}, -{76,-34,54}, -{76,-34,55}, -{76,-34,56}, -{76,-34,57}, -{76,-34,58}, -{76,-34,59}, -{76,-34,60}, -{76,-34,61}, -{76,-34,62}, -{76,-34,63}, -{76,-34,64}, -{76,-34,65}, -{76,-34,66}, -{76,-34,67}, -{76,-34,68}, -{76,-34,69}, -{76,-34,70}, -{76,-34,71}, -{76,-34,72}, -{76,-34,73}, -{76,-34,74}, -{76,-34,75}, -{76,-34,76}, -{76,-33,-24}, -{76,-33,-23}, -{76,-33,-22}, -{76,-33,-21}, -{76,-33,-20}, -{76,-33,-19}, -{76,-33,-18}, -{76,-33,-17}, -{76,-33,-16}, -{76,-33,-15}, -{76,-33,-14}, -{76,-33,-13}, -{76,-33,-12}, -{76,-33,-11}, -{76,-33,-10}, -{76,-33,-9}, -{76,-33,-8}, -{76,-33,-7}, -{76,-33,-6}, -{76,-33,-5}, -{76,-33,-4}, -{76,-33,-3}, -{76,-33,-2}, -{76,-33,-1}, -{76,-33,0}, -{76,-33,1}, -{76,-33,2}, -{76,-33,3}, -{76,-33,4}, -{76,-33,5}, -{76,-33,6}, -{76,-33,7}, -{76,-33,8}, -{76,-33,9}, -{76,-33,10}, -{76,-33,11}, -{76,-33,12}, -{76,-33,13}, -{76,-33,14}, -{76,-33,15}, -{76,-33,16}, -{76,-33,17}, -{76,-33,18}, -{76,-33,19}, -{76,-33,20}, -{76,-33,21}, -{76,-33,22}, -{76,-33,23}, -{76,-33,24}, -{76,-33,25}, -{76,-33,26}, -{76,-33,27}, -{76,-33,28}, -{76,-33,29}, -{76,-33,30}, -{76,-33,31}, -{76,-33,32}, -{76,-33,33}, -{76,-33,34}, -{76,-33,35}, -{76,-33,36}, -{76,-33,37}, -{76,-33,38}, -{76,-33,39}, -{76,-33,40}, -{76,-33,41}, -{76,-33,42}, -{76,-33,43}, -{76,-33,44}, -{76,-33,45}, -{76,-33,46}, -{76,-33,47}, -{76,-33,48}, -{76,-33,49}, -{76,-33,50}, -{76,-33,51}, -{76,-33,52}, -{76,-33,53}, -{76,-33,54}, -{76,-33,55}, -{76,-33,56}, -{76,-33,57}, -{76,-33,58}, -{76,-33,59}, -{76,-33,60}, -{76,-33,61}, -{76,-33,62}, -{76,-33,63}, -{76,-33,64}, -{76,-33,65}, -{76,-33,66}, -{76,-33,67}, -{76,-33,68}, -{76,-33,69}, -{76,-33,70}, -{76,-33,71}, -{76,-33,72}, -{76,-33,73}, -{76,-33,74}, -{76,-33,75}, -{76,-33,76}, -{76,-32,-26}, -{76,-32,-25}, -{76,-32,-24}, -{76,-32,-23}, -{76,-32,-22}, -{76,-32,-21}, -{76,-32,-20}, -{76,-32,-19}, -{76,-32,-18}, -{76,-32,-17}, -{76,-32,-16}, -{76,-32,-15}, -{76,-32,-14}, -{76,-32,-13}, -{76,-32,-12}, -{76,-32,-11}, -{76,-32,-10}, -{76,-32,-9}, -{76,-32,-8}, -{76,-32,-7}, -{76,-32,-6}, -{76,-32,-5}, -{76,-32,-4}, -{76,-32,-3}, -{76,-32,-2}, -{76,-32,-1}, -{76,-32,0}, -{76,-32,1}, -{76,-32,2}, -{76,-32,3}, -{76,-32,4}, -{76,-32,5}, -{76,-32,6}, -{76,-32,7}, -{76,-32,8}, -{76,-32,9}, -{76,-32,10}, -{76,-32,11}, -{76,-32,12}, -{76,-32,13}, -{76,-32,14}, -{76,-32,15}, -{76,-32,16}, -{76,-32,17}, -{76,-32,18}, -{76,-32,19}, -{76,-32,20}, -{76,-32,21}, -{76,-32,22}, -{76,-32,23}, -{76,-32,24}, -{76,-32,25}, -{76,-32,26}, -{76,-32,27}, -{76,-32,28}, -{76,-32,29}, -{76,-32,30}, -{76,-32,31}, -{76,-32,32}, -{76,-32,33}, -{76,-32,34}, -{76,-32,35}, -{76,-32,36}, -{76,-32,37}, -{76,-32,38}, -{76,-32,39}, -{76,-32,40}, -{76,-32,41}, -{76,-32,42}, -{76,-32,43}, -{76,-32,44}, -{76,-32,45}, -{76,-32,46}, -{76,-32,47}, -{76,-32,48}, -{76,-32,49}, -{76,-32,50}, -{76,-32,51}, -{76,-32,52}, -{76,-32,53}, -{76,-32,54}, -{76,-32,55}, -{76,-32,56}, -{76,-32,57}, -{76,-32,58}, -{76,-32,59}, -{76,-32,60}, -{76,-32,61}, -{76,-32,62}, -{76,-32,63}, -{76,-32,64}, -{76,-32,65}, -{76,-32,66}, -{76,-32,67}, -{76,-32,68}, -{76,-32,69}, -{76,-32,70}, -{76,-32,71}, -{76,-32,72}, -{76,-32,73}, -{76,-32,74}, -{76,-32,75}, -{76,-32,76}, -{76,-31,-27}, -{76,-31,-26}, -{76,-31,-25}, -{76,-31,-24}, -{76,-31,-23}, -{76,-31,-22}, -{76,-31,-21}, -{76,-31,-20}, -{76,-31,-19}, -{76,-31,-18}, -{76,-31,-17}, -{76,-31,-16}, -{76,-31,-15}, -{76,-31,-14}, -{76,-31,-13}, -{76,-31,-12}, -{76,-31,-11}, -{76,-31,-10}, -{76,-31,-9}, -{76,-31,-8}, -{76,-31,-7}, -{76,-31,-6}, -{76,-31,-5}, -{76,-31,-4}, -{76,-31,-3}, -{76,-31,-2}, -{76,-31,-1}, -{76,-31,0}, -{76,-31,1}, -{76,-31,2}, -{76,-31,3}, -{76,-31,4}, -{76,-31,5}, -{76,-31,6}, -{76,-31,7}, -{76,-31,8}, -{76,-31,9}, -{76,-31,10}, -{76,-31,11}, -{76,-31,12}, -{76,-31,13}, -{76,-31,14}, -{76,-31,15}, -{76,-31,16}, -{76,-31,17}, -{76,-31,18}, -{76,-31,19}, -{76,-31,20}, -{76,-31,21}, -{76,-31,22}, -{76,-31,23}, -{76,-31,24}, -{76,-31,25}, -{76,-31,26}, -{76,-31,27}, -{76,-31,28}, -{76,-31,29}, -{76,-31,30}, -{76,-31,31}, -{76,-31,32}, -{76,-31,33}, -{76,-31,34}, -{76,-31,35}, -{76,-31,36}, -{76,-31,37}, -{76,-31,38}, -{76,-31,39}, -{76,-31,40}, -{76,-31,41}, -{76,-31,42}, -{76,-31,43}, -{76,-31,44}, -{76,-31,45}, -{76,-31,46}, -{76,-31,47}, -{76,-31,48}, -{76,-31,49}, -{76,-31,50}, -{76,-31,51}, -{76,-31,52}, -{76,-31,53}, -{76,-31,54}, -{76,-31,55}, -{76,-31,56}, -{76,-31,57}, -{76,-31,58}, -{76,-31,59}, -{76,-31,60}, -{76,-31,61}, -{76,-31,62}, -{76,-31,63}, -{76,-31,64}, -{76,-31,65}, -{76,-31,66}, -{76,-31,67}, -{76,-31,68}, -{76,-31,69}, -{76,-31,70}, -{76,-31,71}, -{76,-31,72}, -{76,-31,73}, -{76,-31,74}, -{76,-31,75}, -{76,-31,76}, -{76,-30,-29}, -{76,-30,-28}, -{76,-30,-27}, -{76,-30,-26}, -{76,-30,-25}, -{76,-30,-24}, -{76,-30,-23}, -{76,-30,-22}, -{76,-30,-21}, -{76,-30,-20}, -{76,-30,-19}, -{76,-30,-18}, -{76,-30,-17}, -{76,-30,-16}, -{76,-30,-15}, -{76,-30,-14}, -{76,-30,-13}, -{76,-30,-12}, -{76,-30,-11}, -{76,-30,-10}, -{76,-30,-9}, -{76,-30,-8}, -{76,-30,-7}, -{76,-30,-6}, -{76,-30,-5}, -{76,-30,-4}, -{76,-30,-3}, -{76,-30,-2}, -{76,-30,-1}, -{76,-30,0}, -{76,-30,1}, -{76,-30,2}, -{76,-30,3}, -{76,-30,4}, -{76,-30,5}, -{76,-30,6}, -{76,-30,7}, -{76,-30,8}, -{76,-30,9}, -{76,-30,10}, -{76,-30,11}, -{76,-30,12}, -{76,-30,13}, -{76,-30,14}, -{76,-30,15}, -{76,-30,16}, -{76,-30,17}, -{76,-30,18}, -{76,-30,19}, -{76,-30,20}, -{76,-30,21}, -{76,-30,22}, -{76,-30,23}, -{76,-30,24}, -{76,-30,25}, -{76,-30,26}, -{76,-30,27}, -{76,-30,28}, -{76,-30,29}, -{76,-30,30}, -{76,-30,31}, -{76,-30,32}, -{76,-30,33}, -{76,-30,34}, -{76,-30,35}, -{76,-30,36}, -{76,-30,37}, -{76,-30,38}, -{76,-30,39}, -{76,-30,40}, -{76,-30,41}, -{76,-30,42}, -{76,-30,43}, -{76,-30,44}, -{76,-30,45}, -{76,-30,46}, -{76,-30,47}, -{76,-30,48}, -{76,-30,49}, -{76,-30,50}, -{76,-30,51}, -{76,-30,52}, -{76,-30,53}, -{76,-30,54}, -{76,-30,55}, -{76,-30,56}, -{76,-30,57}, -{76,-30,58}, -{76,-30,59}, -{76,-30,60}, -{76,-30,61}, -{76,-30,62}, -{76,-30,63}, -{76,-30,64}, -{76,-30,65}, -{76,-30,66}, -{76,-30,67}, -{76,-30,68}, -{76,-30,69}, -{76,-30,70}, -{76,-30,71}, -{76,-30,72}, -{76,-30,73}, -{76,-30,74}, -{76,-30,75}, -{76,-30,76}, -{76,-29,-30}, -{76,-29,-29}, -{76,-29,-28}, -{76,-29,-27}, -{76,-29,-26}, -{76,-29,-25}, -{76,-29,-24}, -{76,-29,-23}, -{76,-29,-22}, -{76,-29,-21}, -{76,-29,-20}, -{76,-29,-19}, -{76,-29,-18}, -{76,-29,-17}, -{76,-29,-16}, -{76,-29,-15}, -{76,-29,-14}, -{76,-29,-13}, -{76,-29,-12}, -{76,-29,-11}, -{76,-29,-10}, -{76,-29,-9}, -{76,-29,-8}, -{76,-29,-7}, -{76,-29,-6}, -{76,-29,-5}, -{76,-29,-4}, -{76,-29,-3}, -{76,-29,-2}, -{76,-29,-1}, -{76,-29,0}, -{76,-29,1}, -{76,-29,2}, -{76,-29,3}, -{76,-29,4}, -{76,-29,5}, -{76,-29,6}, -{76,-29,7}, -{76,-29,8}, -{76,-29,9}, -{76,-29,10}, -{76,-29,11}, -{76,-29,12}, -{76,-29,13}, -{76,-29,14}, -{76,-29,15}, -{76,-29,16}, -{76,-29,17}, -{76,-29,18}, -{76,-29,19}, -{76,-29,20}, -{76,-29,21}, -{76,-29,22}, -{76,-29,23}, -{76,-29,24}, -{76,-29,25}, -{76,-29,26}, -{76,-29,27}, -{76,-29,28}, -{76,-29,29}, -{76,-29,30}, -{76,-29,31}, -{76,-29,32}, -{76,-29,33}, -{76,-29,34}, -{76,-29,35}, -{76,-29,36}, -{76,-29,37}, -{76,-29,38}, -{76,-29,39}, -{76,-29,40}, -{76,-29,41}, -{76,-29,42}, -{76,-29,43}, -{76,-29,44}, -{76,-29,45}, -{76,-29,46}, -{76,-29,47}, -{76,-29,48}, -{76,-29,49}, -{76,-29,50}, -{76,-29,51}, -{76,-29,52}, -{76,-29,53}, -{76,-29,54}, -{76,-29,55}, -{76,-29,56}, -{76,-29,57}, -{76,-29,58}, -{76,-29,59}, -{76,-29,60}, -{76,-29,61}, -{76,-29,62}, -{76,-29,63}, -{76,-29,64}, -{76,-29,65}, -{76,-29,66}, -{76,-29,67}, -{76,-29,68}, -{76,-29,69}, -{76,-29,70}, -{76,-29,71}, -{76,-29,72}, -{76,-29,73}, -{76,-29,74}, -{76,-29,75}, -{76,-29,76}, -{76,-28,-31}, -{76,-28,-30}, -{76,-28,-29}, -{76,-28,-28}, -{76,-28,-27}, -{76,-28,-26}, -{76,-28,-25}, -{76,-28,-24}, -{76,-28,-23}, -{76,-28,-22}, -{76,-28,-21}, -{76,-28,-20}, -{76,-28,-19}, -{76,-28,-18}, -{76,-28,-17}, -{76,-28,-16}, -{76,-28,-15}, -{76,-28,-14}, -{76,-28,-13}, -{76,-28,-12}, -{76,-28,-11}, -{76,-28,-10}, -{76,-28,-9}, -{76,-28,-8}, -{76,-28,-7}, -{76,-28,-6}, -{76,-28,-5}, -{76,-28,-4}, -{76,-28,-3}, -{76,-28,-2}, -{76,-28,-1}, -{76,-28,0}, -{76,-28,1}, -{76,-28,2}, -{76,-28,3}, -{76,-28,4}, -{76,-28,5}, -{76,-28,6}, -{76,-28,7}, -{76,-28,8}, -{76,-28,9}, -{76,-28,10}, -{76,-28,11}, -{76,-28,12}, -{76,-28,13}, -{76,-28,14}, -{76,-28,15}, -{76,-28,16}, -{76,-28,17}, -{76,-28,18}, -{76,-28,19}, -{76,-28,20}, -{76,-28,21}, -{76,-28,22}, -{76,-28,23}, -{76,-28,24}, -{76,-28,25}, -{76,-28,26}, -{76,-28,27}, -{76,-28,28}, -{76,-28,29}, -{76,-28,30}, -{76,-28,31}, -{76,-28,32}, -{76,-28,33}, -{76,-28,34}, -{76,-28,35}, -{76,-28,36}, -{76,-28,37}, -{76,-28,38}, -{76,-28,39}, -{76,-28,40}, -{76,-28,41}, -{76,-28,42}, -{76,-28,43}, -{76,-28,44}, -{76,-28,45}, -{76,-28,46}, -{76,-28,47}, -{76,-28,48}, -{76,-28,49}, -{76,-28,50}, -{76,-28,51}, -{76,-28,52}, -{76,-28,53}, -{76,-28,54}, -{76,-28,55}, -{76,-28,56}, -{76,-28,57}, -{76,-28,58}, -{76,-28,59}, -{76,-28,60}, -{76,-28,61}, -{76,-28,62}, -{76,-28,63}, -{76,-28,64}, -{76,-28,65}, -{76,-28,66}, -{76,-28,67}, -{76,-28,68}, -{76,-28,69}, -{76,-28,70}, -{76,-28,71}, -{76,-28,72}, -{76,-28,73}, -{76,-28,74}, -{76,-28,75}, -{76,-28,76}, -{76,-27,-33}, -{76,-27,-32}, -{76,-27,-31}, -{76,-27,-30}, -{76,-27,-29}, -{76,-27,-28}, -{76,-27,-27}, -{76,-27,-26}, -{76,-27,-25}, -{76,-27,-24}, -{76,-27,-23}, -{76,-27,-22}, -{76,-27,-21}, -{76,-27,-20}, -{76,-27,-19}, -{76,-27,-18}, -{76,-27,-17}, -{76,-27,-16}, -{76,-27,-15}, -{76,-27,-14}, -{76,-27,-13}, -{76,-27,-12}, -{76,-27,-11}, -{76,-27,-10}, -{76,-27,-9}, -{76,-27,-8}, -{76,-27,-7}, -{76,-27,-6}, -{76,-27,-5}, -{76,-27,-4}, -{76,-27,-3}, -{76,-27,-2}, -{76,-27,-1}, -{76,-27,0}, -{76,-27,1}, -{76,-27,2}, -{76,-27,3}, -{76,-27,4}, -{76,-27,5}, -{76,-27,6}, -{76,-27,7}, -{76,-27,8}, -{76,-27,9}, -{76,-27,10}, -{76,-27,11}, -{76,-27,12}, -{76,-27,13}, -{76,-27,14}, -{76,-27,15}, -{76,-27,16}, -{76,-27,17}, -{76,-27,18}, -{76,-27,19}, -{76,-27,20}, -{76,-27,21}, -{76,-27,22}, -{76,-27,23}, -{76,-27,24}, -{76,-27,25}, -{76,-27,26}, -{76,-27,27}, -{76,-27,28}, -{76,-27,29}, -{76,-27,30}, -{76,-27,31}, -{76,-27,32}, -{76,-27,33}, -{76,-27,34}, -{76,-27,35}, -{76,-27,36}, -{76,-27,37}, -{76,-27,38}, -{76,-27,39}, -{76,-27,40}, -{76,-27,41}, -{76,-27,42}, -{76,-27,43}, -{76,-27,44}, -{76,-27,45}, -{76,-27,46}, -{76,-27,47}, -{76,-27,48}, -{76,-27,49}, -{76,-27,50}, -{76,-27,51}, -{76,-27,52}, -{76,-27,53}, -{76,-27,54}, -{76,-27,55}, -{76,-27,56}, -{76,-27,57}, -{76,-27,58}, -{76,-27,59}, -{76,-27,60}, -{76,-27,61}, -{76,-27,62}, -{76,-27,63}, -{76,-27,64}, -{76,-27,65}, -{76,-27,66}, -{76,-27,67}, -{76,-27,68}, -{76,-27,69}, -{76,-27,70}, -{76,-27,71}, -{76,-27,72}, -{76,-27,73}, -{76,-27,74}, -{76,-27,75}, -{76,-27,76}, -{76,-26,-34}, -{76,-26,-33}, -{76,-26,-32}, -{76,-26,-31}, -{76,-26,-30}, -{76,-26,-29}, -{76,-26,-28}, -{76,-26,-27}, -{76,-26,-26}, -{76,-26,-25}, -{76,-26,-24}, -{76,-26,-23}, -{76,-26,-22}, -{76,-26,-21}, -{76,-26,-20}, -{76,-26,-19}, -{76,-26,-18}, -{76,-26,-17}, -{76,-26,-16}, -{76,-26,-15}, -{76,-26,-14}, -{76,-26,-13}, -{76,-26,-12}, -{76,-26,-11}, -{76,-26,-10}, -{76,-26,-9}, -{76,-26,-8}, -{76,-26,-7}, -{76,-26,-6}, -{76,-26,-5}, -{76,-26,-4}, -{76,-26,-3}, -{76,-26,-2}, -{76,-26,-1}, -{76,-26,0}, -{76,-26,1}, -{76,-26,2}, -{76,-26,3}, -{76,-26,4}, -{76,-26,5}, -{76,-26,6}, -{76,-26,7}, -{76,-26,8}, -{76,-26,9}, -{76,-26,10}, -{76,-26,11}, -{76,-26,12}, -{76,-26,13}, -{76,-26,14}, -{76,-26,15}, -{76,-26,16}, -{76,-26,17}, -{76,-26,18}, -{76,-26,19}, -{76,-26,20}, -{76,-26,21}, -{76,-26,22}, -{76,-26,23}, -{76,-26,24}, -{76,-26,25}, -{76,-26,26}, -{76,-26,27}, -{76,-26,28}, -{76,-26,29}, -{76,-26,30}, -{76,-26,31}, -{76,-26,32}, -{76,-26,33}, -{76,-26,34}, -{76,-26,35}, -{76,-26,36}, -{76,-26,37}, -{76,-26,38}, -{76,-26,39}, -{76,-26,40}, -{76,-26,41}, -{76,-26,42}, -{76,-26,43}, -{76,-26,44}, -{76,-26,45}, -{76,-26,46}, -{76,-26,47}, -{76,-26,48}, -{76,-26,49}, -{76,-26,50}, -{76,-26,51}, -{76,-26,52}, -{76,-26,53}, -{76,-26,54}, -{76,-26,55}, -{76,-26,56}, -{76,-26,57}, -{76,-26,58}, -{76,-26,59}, -{76,-26,60}, -{76,-26,61}, -{76,-26,62}, -{76,-26,63}, -{76,-26,64}, -{76,-26,65}, -{76,-26,66}, -{76,-26,67}, -{76,-26,68}, -{76,-26,69}, -{76,-26,70}, -{76,-26,71}, -{76,-26,72}, -{76,-26,73}, -{76,-26,74}, -{76,-26,75}, -{76,-26,76}, -{76,-25,-35}, -{76,-25,-34}, -{76,-25,-33}, -{76,-25,-32}, -{76,-25,-31}, -{76,-25,-30}, -{76,-25,-29}, -{76,-25,-28}, -{76,-25,-27}, -{76,-25,-26}, -{76,-25,-25}, -{76,-25,-24}, -{76,-25,-23}, -{76,-25,-22}, -{76,-25,-21}, -{76,-25,-20}, -{76,-25,-19}, -{76,-25,-18}, -{76,-25,-17}, -{76,-25,-16}, -{76,-25,-15}, -{76,-25,-14}, -{76,-25,-13}, -{76,-25,-12}, -{76,-25,-11}, -{76,-25,-10}, -{76,-25,-9}, -{76,-25,-8}, -{76,-25,-7}, -{76,-25,-6}, -{76,-25,-5}, -{76,-25,-4}, -{76,-25,-3}, -{76,-25,-2}, -{76,-25,-1}, -{76,-25,0}, -{76,-25,1}, -{76,-25,2}, -{76,-25,3}, -{76,-25,4}, -{76,-25,5}, -{76,-25,6}, -{76,-25,7}, -{76,-25,8}, -{76,-25,9}, -{76,-25,10}, -{76,-25,11}, -{76,-25,12}, -{76,-25,13}, -{76,-25,14}, -{76,-25,15}, -{76,-25,16}, -{76,-25,17}, -{76,-25,18}, -{76,-25,19}, -{76,-25,20}, -{76,-25,21}, -{76,-25,22}, -{76,-25,23}, -{76,-25,24}, -{76,-25,25}, -{76,-25,26}, -{76,-25,27}, -{76,-25,28}, -{76,-25,29}, -{76,-25,30}, -{76,-25,31}, -{76,-25,32}, -{76,-25,33}, -{76,-25,34}, -{76,-25,35}, -{76,-25,36}, -{76,-25,37}, -{76,-25,38}, -{76,-25,39}, -{76,-25,40}, -{76,-25,41}, -{76,-25,42}, -{76,-25,43}, -{76,-25,44}, -{76,-25,45}, -{76,-25,46}, -{76,-25,47}, -{76,-25,48}, -{76,-25,49}, -{76,-25,50}, -{76,-25,51}, -{76,-25,52}, -{76,-25,53}, -{76,-25,54}, -{76,-25,55}, -{76,-25,56}, -{76,-25,57}, -{76,-25,58}, -{76,-25,59}, -{76,-25,60}, -{76,-25,61}, -{76,-25,62}, -{76,-25,63}, -{76,-25,64}, -{76,-25,65}, -{76,-25,66}, -{76,-25,67}, -{76,-25,68}, -{76,-25,69}, -{76,-25,70}, -{76,-25,71}, -{76,-25,72}, -{76,-25,73}, -{76,-25,74}, -{76,-25,75}, -{76,-25,76}, -{76,-24,-37}, -{76,-24,-36}, -{76,-24,-35}, -{76,-24,-34}, -{76,-24,-33}, -{76,-24,-32}, -{76,-24,-31}, -{76,-24,-30}, -{76,-24,-29}, -{76,-24,-28}, -{76,-24,-27}, -{76,-24,-26}, -{76,-24,-25}, -{76,-24,-24}, -{76,-24,-23}, -{76,-24,-22}, -{76,-24,-21}, -{76,-24,-20}, -{76,-24,-19}, -{76,-24,-18}, -{76,-24,-17}, -{76,-24,-16}, -{76,-24,-15}, -{76,-24,-14}, -{76,-24,-13}, -{76,-24,-12}, -{76,-24,-11}, -{76,-24,-10}, -{76,-24,-9}, -{76,-24,-8}, -{76,-24,-7}, -{76,-24,-6}, -{76,-24,-5}, -{76,-24,-4}, -{76,-24,-3}, -{76,-24,-2}, -{76,-24,-1}, -{76,-24,0}, -{76,-24,1}, -{76,-24,2}, -{76,-24,3}, -{76,-24,4}, -{76,-24,5}, -{76,-24,6}, -{76,-24,7}, -{76,-24,8}, -{76,-24,9}, -{76,-24,10}, -{76,-24,11}, -{76,-24,12}, -{76,-24,13}, -{76,-24,14}, -{76,-24,15}, -{76,-24,16}, -{76,-24,17}, -{76,-24,18}, -{76,-24,19}, -{76,-24,20}, -{76,-24,21}, -{76,-24,22}, -{76,-24,23}, -{76,-24,24}, -{76,-24,25}, -{76,-24,26}, -{76,-24,27}, -{76,-24,28}, -{76,-24,29}, -{76,-24,30}, -{76,-24,31}, -{76,-24,32}, -{76,-24,33}, -{76,-24,34}, -{76,-24,35}, -{76,-24,36}, -{76,-24,37}, -{76,-24,38}, -{76,-24,39}, -{76,-24,40}, -{76,-24,41}, -{76,-24,42}, -{76,-24,43}, -{76,-24,44}, -{76,-24,45}, -{76,-24,46}, -{76,-24,47}, -{76,-24,48}, -{76,-24,49}, -{76,-24,50}, -{76,-24,51}, -{76,-24,52}, -{76,-24,53}, -{76,-24,54}, -{76,-24,55}, -{76,-24,56}, -{76,-24,57}, -{76,-24,58}, -{76,-24,59}, -{76,-24,60}, -{76,-24,61}, -{76,-24,62}, -{76,-24,63}, -{76,-24,64}, -{76,-24,65}, -{76,-24,66}, -{76,-24,67}, -{76,-24,68}, -{76,-24,69}, -{76,-24,70}, -{76,-24,71}, -{76,-24,72}, -{76,-24,73}, -{76,-24,74}, -{76,-24,75}, -{76,-24,76}, -{76,-23,-37}, -{76,-23,-36}, -{76,-23,-35}, -{76,-23,-34}, -{76,-23,-33}, -{76,-23,-32}, -{76,-23,-31}, -{76,-23,-30}, -{76,-23,-29}, -{76,-23,-28}, -{76,-23,-27}, -{76,-23,-26}, -{76,-23,-25}, -{76,-23,-24}, -{76,-23,-23}, -{76,-23,-22}, -{76,-23,-21}, -{76,-23,-20}, -{76,-23,-19}, -{76,-23,-18}, -{76,-23,-17}, -{76,-23,-16}, -{76,-23,-15}, -{76,-23,-14}, -{76,-23,-13}, -{76,-23,-12}, -{76,-23,-11}, -{76,-23,-10}, -{76,-23,-9}, -{76,-23,-8}, -{76,-23,-7}, -{76,-23,-6}, -{76,-23,-5}, -{76,-23,-4}, -{76,-23,-3}, -{76,-23,-2}, -{76,-23,-1}, -{76,-23,0}, -{76,-23,1}, -{76,-23,2}, -{76,-23,3}, -{76,-23,4}, -{76,-23,5}, -{76,-23,6}, -{76,-23,7}, -{76,-23,8}, -{76,-23,9}, -{76,-23,10}, -{76,-23,11}, -{76,-23,12}, -{76,-23,13}, -{76,-23,14}, -{76,-23,15}, -{76,-23,16}, -{76,-23,17}, -{76,-23,18}, -{76,-23,19}, -{76,-23,20}, -{76,-23,21}, -{76,-23,22}, -{76,-23,23}, -{76,-23,24}, -{76,-23,25}, -{76,-23,26}, -{76,-23,27}, -{76,-23,28}, -{76,-23,29}, -{76,-23,30}, -{76,-23,31}, -{76,-23,32}, -{76,-23,33}, -{76,-23,34}, -{76,-23,35}, -{76,-23,36}, -{76,-23,37}, -{76,-23,38}, -{76,-23,39}, -{76,-23,40}, -{76,-23,41}, -{76,-23,42}, -{76,-23,43}, -{76,-23,44}, -{76,-23,45}, -{76,-23,46}, -{76,-23,47}, -{76,-23,48}, -{76,-23,49}, -{76,-23,50}, -{76,-23,51}, -{76,-23,52}, -{76,-23,53}, -{76,-23,54}, -{76,-23,55}, -{76,-23,56}, -{76,-23,57}, -{76,-23,58}, -{76,-23,59}, -{76,-23,60}, -{76,-23,61}, -{76,-23,62}, -{76,-23,63}, -{76,-23,64}, -{76,-23,65}, -{76,-23,66}, -{76,-23,67}, -{76,-23,68}, -{76,-23,69}, -{76,-23,70}, -{76,-23,71}, -{76,-23,72}, -{76,-23,73}, -{76,-23,74}, -{76,-23,75}, -{76,-23,76}, -{76,-22,-37}, -{76,-22,-36}, -{76,-22,-35}, -{76,-22,-34}, -{76,-22,-33}, -{76,-22,-32}, -{76,-22,-31}, -{76,-22,-30}, -{76,-22,-29}, -{76,-22,-28}, -{76,-22,-27}, -{76,-22,-26}, -{76,-22,-25}, -{76,-22,-24}, -{76,-22,-23}, -{76,-22,-22}, -{76,-22,-21}, -{76,-22,-20}, -{76,-22,-19}, -{76,-22,-18}, -{76,-22,-17}, -{76,-22,-16}, -{76,-22,-15}, -{76,-22,-14}, -{76,-22,-13}, -{76,-22,-12}, -{76,-22,-11}, -{76,-22,-10}, -{76,-22,-9}, -{76,-22,-8}, -{76,-22,-7}, -{76,-22,-6}, -{76,-22,-5}, -{76,-22,-4}, -{76,-22,-3}, -{76,-22,-2}, -{76,-22,-1}, -{76,-22,0}, -{76,-22,1}, -{76,-22,2}, -{76,-22,3}, -{76,-22,4}, -{76,-22,5}, -{76,-22,6}, -{76,-22,7}, -{76,-22,8}, -{76,-22,9}, -{76,-22,10}, -{76,-22,11}, -{76,-22,12}, -{76,-22,13}, -{76,-22,14}, -{76,-22,15}, -{76,-22,16}, -{76,-22,17}, -{76,-22,18}, -{76,-22,19}, -{76,-22,20}, -{76,-22,21}, -{76,-22,22}, -{76,-22,23}, -{76,-22,24}, -{76,-22,25}, -{76,-22,26}, -{76,-22,27}, -{76,-22,28}, -{76,-22,29}, -{76,-22,30}, -{76,-22,31}, -{76,-22,32}, -{76,-22,33}, -{76,-22,34}, -{76,-22,35}, -{76,-22,36}, -{76,-22,37}, -{76,-22,38}, -{76,-22,39}, -{76,-22,40}, -{76,-22,41}, -{76,-22,42}, -{76,-22,43}, -{76,-22,44}, -{76,-22,45}, -{76,-22,46}, -{76,-22,47}, -{76,-22,48}, -{76,-22,49}, -{76,-22,50}, -{76,-22,51}, -{76,-22,52}, -{76,-22,53}, -{76,-22,54}, -{76,-22,55}, -{76,-22,56}, -{76,-22,57}, -{76,-22,58}, -{76,-22,59}, -{76,-22,60}, -{76,-22,61}, -{76,-22,62}, -{76,-22,63}, -{76,-22,64}, -{76,-22,65}, -{76,-22,66}, -{76,-22,67}, -{76,-22,68}, -{76,-22,69}, -{76,-22,70}, -{76,-22,71}, -{76,-22,72}, -{76,-22,73}, -{76,-22,74}, -{76,-22,75}, -{76,-22,76}, -{76,-21,-37}, -{76,-21,-36}, -{76,-21,-35}, -{76,-21,-34}, -{76,-21,-33}, -{76,-21,-32}, -{76,-21,-31}, -{76,-21,-30}, -{76,-21,-29}, -{76,-21,-28}, -{76,-21,-27}, -{76,-21,-26}, -{76,-21,-25}, -{76,-21,-24}, -{76,-21,-23}, -{76,-21,-22}, -{76,-21,-21}, -{76,-21,-20}, -{76,-21,-19}, -{76,-21,-18}, -{76,-21,-17}, -{76,-21,-16}, -{76,-21,-15}, -{76,-21,-14}, -{76,-21,-13}, -{76,-21,-12}, -{76,-21,-11}, -{76,-21,-10}, -{76,-21,-9}, -{76,-21,-8}, -{76,-21,-7}, -{76,-21,-6}, -{76,-21,-5}, -{76,-21,-4}, -{76,-21,-3}, -{76,-21,-2}, -{76,-21,-1}, -{76,-21,0}, -{76,-21,1}, -{76,-21,2}, -{76,-21,3}, -{76,-21,4}, -{76,-21,5}, -{76,-21,6}, -{76,-21,7}, -{76,-21,8}, -{76,-21,9}, -{76,-21,10}, -{76,-21,11}, -{76,-21,12}, -{76,-21,13}, -{76,-21,14}, -{76,-21,15}, -{76,-21,16}, -{76,-21,17}, -{76,-21,18}, -{76,-21,19}, -{76,-21,20}, -{76,-21,21}, -{76,-21,22}, -{76,-21,23}, -{76,-21,24}, -{76,-21,25}, -{76,-21,26}, -{76,-21,27}, -{76,-21,28}, -{76,-21,29}, -{76,-21,30}, -{76,-21,31}, -{76,-21,32}, -{76,-21,33}, -{76,-21,34}, -{76,-21,35}, -{76,-21,36}, -{76,-21,37}, -{76,-21,38}, -{76,-21,39}, -{76,-21,40}, -{76,-21,41}, -{76,-21,42}, -{76,-21,43}, -{76,-21,44}, -{76,-21,45}, -{76,-21,46}, -{76,-21,47}, -{76,-21,48}, -{76,-21,49}, -{76,-21,50}, -{76,-21,51}, -{76,-21,52}, -{76,-21,53}, -{76,-21,54}, -{76,-21,55}, -{76,-21,56}, -{76,-21,57}, -{76,-21,58}, -{76,-21,59}, -{76,-21,60}, -{76,-21,61}, -{76,-21,62}, -{76,-21,63}, -{76,-21,64}, -{76,-21,65}, -{76,-21,66}, -{76,-21,67}, -{76,-21,68}, -{76,-21,69}, -{76,-21,70}, -{76,-21,71}, -{76,-21,72}, -{76,-21,73}, -{76,-21,74}, -{76,-21,75}, -{76,-21,76}, -{76,-20,-37}, -{76,-20,-36}, -{76,-20,-35}, -{76,-20,-34}, -{76,-20,-33}, -{76,-20,-32}, -{76,-20,-31}, -{76,-20,-30}, -{76,-20,-29}, -{76,-20,-28}, -{76,-20,-27}, -{76,-20,-26}, -{76,-20,-25}, -{76,-20,-24}, -{76,-20,-23}, -{76,-20,-22}, -{76,-20,-21}, -{76,-20,-20}, -{76,-20,-19}, -{76,-20,-18}, -{76,-20,-17}, -{76,-20,-16}, -{76,-20,-15}, -{76,-20,-14}, -{76,-20,-13}, -{76,-20,-12}, -{76,-20,-11}, -{76,-20,-10}, -{76,-20,-9}, -{76,-20,-8}, -{76,-20,-7}, -{76,-20,-6}, -{76,-20,-5}, -{76,-20,-4}, -{76,-20,-3}, -{76,-20,-2}, -{76,-20,-1}, -{76,-20,0}, -{76,-20,1}, -{76,-20,2}, -{76,-20,3}, -{76,-20,4}, -{76,-20,5}, -{76,-20,6}, -{76,-20,7}, -{76,-20,8}, -{76,-20,9}, -{76,-20,10}, -{76,-20,11}, -{76,-20,12}, -{76,-20,13}, -{76,-20,14}, -{76,-20,15}, -{76,-20,16}, -{76,-20,17}, -{76,-20,18}, -{76,-20,19}, -{76,-20,20}, -{76,-20,21}, -{76,-20,22}, -{76,-20,23}, -{76,-20,24}, -{76,-20,25}, -{76,-20,26}, -{76,-20,27}, -{76,-20,28}, -{76,-20,29}, -{76,-20,30}, -{76,-20,31}, -{76,-20,32}, -{76,-20,33}, -{76,-20,34}, -{76,-20,35}, -{76,-20,36}, -{76,-20,37}, -{76,-20,38}, -{76,-20,39}, -{76,-20,40}, -{76,-20,41}, -{76,-20,42}, -{76,-20,43}, -{76,-20,44}, -{76,-20,45}, -{76,-20,46}, -{76,-20,47}, -{76,-20,48}, -{76,-20,49}, -{76,-20,50}, -{76,-20,51}, -{76,-20,52}, -{76,-20,53}, -{76,-20,54}, -{76,-20,55}, -{76,-20,56}, -{76,-20,57}, -{76,-20,58}, -{76,-20,59}, -{76,-20,60}, -{76,-20,61}, -{76,-20,62}, -{76,-20,63}, -{76,-20,64}, -{76,-20,65}, -{76,-20,66}, -{76,-20,67}, -{76,-20,68}, -{76,-20,69}, -{76,-20,70}, -{76,-20,71}, -{76,-20,72}, -{76,-20,73}, -{76,-20,74}, -{76,-20,75}, -{76,-20,76}, -{76,-19,-37}, -{76,-19,-36}, -{76,-19,-35}, -{76,-19,-34}, -{76,-19,-33}, -{76,-19,-32}, -{76,-19,-31}, -{76,-19,-30}, -{76,-19,-29}, -{76,-19,-28}, -{76,-19,-27}, -{76,-19,-26}, -{76,-19,-25}, -{76,-19,-24}, -{76,-19,-23}, -{76,-19,-22}, -{76,-19,-21}, -{76,-19,-20}, -{76,-19,-19}, -{76,-19,-18}, -{76,-19,-17}, -{76,-19,-16}, -{76,-19,-15}, -{76,-19,-14}, -{76,-19,-13}, -{76,-19,-12}, -{76,-19,-11}, -{76,-19,-10}, -{76,-19,-9}, -{76,-19,-8}, -{76,-19,-7}, -{76,-19,-6}, -{76,-19,-5}, -{76,-19,-4}, -{76,-19,-3}, -{76,-19,-2}, -{76,-19,-1}, -{76,-19,0}, -{76,-19,1}, -{76,-19,2}, -{76,-19,3}, -{76,-19,4}, -{76,-19,5}, -{76,-19,6}, -{76,-19,7}, -{76,-19,8}, -{76,-19,9}, -{76,-19,10}, -{76,-19,11}, -{76,-19,12}, -{76,-19,13}, -{76,-19,14}, -{76,-19,15}, -{76,-19,16}, -{76,-19,17}, -{76,-19,18}, -{76,-19,19}, -{76,-19,20}, -{76,-19,21}, -{76,-19,22}, -{76,-19,23}, -{76,-19,24}, -{76,-19,25}, -{76,-19,26}, -{76,-19,27}, -{76,-19,28}, -{76,-19,29}, -{76,-19,30}, -{76,-19,31}, -{76,-19,32}, -{76,-19,33}, -{76,-19,34}, -{76,-19,35}, -{76,-19,36}, -{76,-19,37}, -{76,-19,38}, -{76,-19,39}, -{76,-19,40}, -{76,-19,41}, -{76,-19,42}, -{76,-19,43}, -{76,-19,44}, -{76,-19,45}, -{76,-19,46}, -{76,-19,47}, -{76,-19,48}, -{76,-19,49}, -{76,-19,50}, -{76,-19,51}, -{76,-19,52}, -{76,-19,53}, -{76,-19,54}, -{76,-19,55}, -{76,-19,56}, -{76,-19,57}, -{76,-19,58}, -{76,-19,59}, -{76,-19,60}, -{76,-19,61}, -{76,-19,62}, -{76,-19,63}, -{76,-19,64}, -{76,-19,65}, -{76,-19,66}, -{76,-19,67}, -{76,-19,68}, -{76,-19,69}, -{76,-19,70}, -{76,-19,71}, -{76,-19,72}, -{76,-19,73}, -{76,-19,74}, -{76,-19,75}, -{76,-19,76}, -{76,-18,-37}, -{76,-18,-36}, -{76,-18,-35}, -{76,-18,-34}, -{76,-18,-33}, -{76,-18,-32}, -{76,-18,-31}, -{76,-18,-30}, -{76,-18,-29}, -{76,-18,-28}, -{76,-18,-27}, -{76,-18,-26}, -{76,-18,-25}, -{76,-18,-24}, -{76,-18,-23}, -{76,-18,-22}, -{76,-18,-21}, -{76,-18,-20}, -{76,-18,-19}, -{76,-18,-18}, -{76,-18,-17}, -{76,-18,-16}, -{76,-18,-15}, -{76,-18,-14}, -{76,-18,-13}, -{76,-18,-12}, -{76,-18,-11}, -{76,-18,-10}, -{76,-18,-9}, -{76,-18,-8}, -{76,-18,-7}, -{76,-18,-6}, -{76,-18,-5}, -{76,-18,-4}, -{76,-18,-3}, -{76,-18,-2}, -{76,-18,-1}, -{76,-18,0}, -{76,-18,1}, -{76,-18,2}, -{76,-18,3}, -{76,-18,4}, -{76,-18,5}, -{76,-18,6}, -{76,-18,7}, -{76,-18,8}, -{76,-18,9}, -{76,-18,10}, -{76,-18,11}, -{76,-18,12}, -{76,-18,13}, -{76,-18,14}, -{76,-18,15}, -{76,-18,16}, -{76,-18,17}, -{76,-18,18}, -{76,-18,19}, -{76,-18,20}, -{76,-18,21}, -{76,-18,22}, -{76,-18,23}, -{76,-18,24}, -{76,-18,25}, -{76,-18,26}, -{76,-18,27}, -{76,-18,28}, -{76,-18,29}, -{76,-18,30}, -{76,-18,31}, -{76,-18,32}, -{76,-18,33}, -{76,-18,34}, -{76,-18,35}, -{76,-18,36}, -{76,-18,37}, -{76,-18,38}, -{76,-18,39}, -{76,-18,40}, -{76,-18,41}, -{76,-18,42}, -{76,-18,43}, -{76,-18,44}, -{76,-18,45}, -{76,-18,46}, -{76,-18,47}, -{76,-18,48}, -{76,-18,49}, -{76,-18,50}, -{76,-18,51}, -{76,-18,52}, -{76,-18,53}, -{76,-18,54}, -{76,-18,55}, -{76,-18,56}, -{76,-18,57}, -{76,-18,58}, -{76,-18,59}, -{76,-18,60}, -{76,-18,61}, -{76,-18,62}, -{76,-18,63}, -{76,-18,64}, -{76,-18,65}, -{76,-18,66}, -{76,-18,67}, -{76,-18,68}, -{76,-18,69}, -{76,-18,70}, -{76,-18,71}, -{76,-18,72}, -{76,-18,73}, -{76,-18,74}, -{76,-18,75}, -{76,-18,76}, -{76,-17,-37}, -{76,-17,-36}, -{76,-17,-35}, -{76,-17,-34}, -{76,-17,-33}, -{76,-17,-32}, -{76,-17,-31}, -{76,-17,-30}, -{76,-17,-29}, -{76,-17,-28}, -{76,-17,-27}, -{76,-17,-26}, -{76,-17,-25}, -{76,-17,-24}, -{76,-17,-23}, -{76,-17,-22}, -{76,-17,-21}, -{76,-17,-20}, -{76,-17,-19}, -{76,-17,-18}, -{76,-17,-17}, -{76,-17,-16}, -{76,-17,-15}, -{76,-17,-14}, -{76,-17,-13}, -{76,-17,-12}, -{76,-17,-11}, -{76,-17,-10}, -{76,-17,-9}, -{76,-17,-8}, -{76,-17,-7}, -{76,-17,-6}, -{76,-17,-5}, -{76,-17,-4}, -{76,-17,-3}, -{76,-17,-2}, -{76,-17,-1}, -{76,-17,0}, -{76,-17,1}, -{76,-17,2}, -{76,-17,3}, -{76,-17,4}, -{76,-17,5}, -{76,-17,6}, -{76,-17,7}, -{76,-17,8}, -{76,-17,9}, -{76,-17,10}, -{76,-17,11}, -{76,-17,12}, -{76,-17,13}, -{76,-17,14}, -{76,-17,15}, -{76,-17,16}, -{76,-17,17}, -{76,-17,18}, -{76,-17,19}, -{76,-17,20}, -{76,-17,21}, -{76,-17,22}, -{76,-17,23}, -{76,-17,24}, -{76,-17,25}, -{76,-17,26}, -{76,-17,27}, -{76,-17,28}, -{76,-17,29}, -{76,-17,30}, -{76,-17,31}, -{76,-17,32}, -{76,-17,33}, -{76,-17,34}, -{76,-17,35}, -{76,-17,36}, -{76,-17,37}, -{76,-17,38}, -{76,-17,39}, -{76,-17,40}, -{76,-17,41}, -{76,-17,42}, -{76,-17,43}, -{76,-17,44}, -{76,-17,45}, -{76,-17,46}, -{76,-17,47}, -{76,-17,48}, -{76,-17,49}, -{76,-17,50}, -{76,-17,51}, -{76,-17,52}, -{76,-17,53}, -{76,-17,54}, -{76,-17,55}, -{76,-17,56}, -{76,-17,57}, -{76,-17,58}, -{76,-17,59}, -{76,-17,60}, -{76,-17,61}, -{76,-17,62}, -{76,-17,63}, -{76,-17,64}, -{76,-17,65}, -{76,-17,66}, -{76,-17,67}, -{76,-17,68}, -{76,-17,69}, -{76,-17,70}, -{76,-17,71}, -{76,-17,72}, -{76,-17,73}, -{76,-17,74}, -{76,-17,75}, -{76,-17,76}, -{76,-17,77}, -{76,-16,-37}, -{76,-16,-36}, -{76,-16,-35}, -{76,-16,-34}, -{76,-16,-33}, -{76,-16,-32}, -{76,-16,-31}, -{76,-16,-30}, -{76,-16,-29}, -{76,-16,-28}, -{76,-16,-27}, -{76,-16,-26}, -{76,-16,-25}, -{76,-16,-24}, -{76,-16,-23}, -{76,-16,-22}, -{76,-16,-21}, -{76,-16,-20}, -{76,-16,-19}, -{76,-16,-18}, -{76,-16,-17}, -{76,-16,-16}, -{76,-16,-15}, -{76,-16,-14}, -{76,-16,-13}, -{76,-16,-12}, -{76,-16,-11}, -{76,-16,-10}, -{76,-16,-9}, -{76,-16,-8}, -{76,-16,-7}, -{76,-16,-6}, -{76,-16,-5}, -{76,-16,-4}, -{76,-16,-3}, -{76,-16,-2}, -{76,-16,-1}, -{76,-16,0}, -{76,-16,1}, -{76,-16,2}, -{76,-16,3}, -{76,-16,4}, -{76,-16,5}, -{76,-16,6}, -{76,-16,7}, -{76,-16,8}, -{76,-16,9}, -{76,-16,10}, -{76,-16,11}, -{76,-16,12}, -{76,-16,13}, -{76,-16,14}, -{76,-16,15}, -{76,-16,16}, -{76,-16,17}, -{76,-16,18}, -{76,-16,19}, -{76,-16,20}, -{76,-16,21}, -{76,-16,22}, -{76,-16,23}, -{76,-16,24}, -{76,-16,25}, -{76,-16,26}, -{76,-16,27}, -{76,-16,28}, -{76,-16,29}, -{76,-16,30}, -{76,-16,31}, -{76,-16,32}, -{76,-16,33}, -{76,-16,34}, -{76,-16,35}, -{76,-16,36}, -{76,-16,37}, -{76,-16,38}, -{76,-16,39}, -{76,-16,40}, -{76,-16,41}, -{76,-16,42}, -{76,-16,43}, -{76,-16,44}, -{76,-16,45}, -{76,-16,46}, -{76,-16,47}, -{76,-16,48}, -{76,-16,49}, -{76,-16,50}, -{76,-16,51}, -{76,-16,52}, -{76,-16,53}, -{76,-16,54}, -{76,-16,55}, -{76,-16,56}, -{76,-16,57}, -{76,-16,58}, -{76,-16,59}, -{76,-16,60}, -{76,-16,61}, -{76,-16,62}, -{76,-16,63}, -{76,-16,64}, -{76,-16,65}, -{76,-16,66}, -{76,-16,67}, -{76,-16,68}, -{76,-16,69}, -{76,-16,70}, -{76,-16,71}, -{76,-16,72}, -{76,-16,73}, -{76,-16,74}, -{76,-16,75}, -{76,-16,76}, -{76,-16,77}, -{76,-15,-37}, -{76,-15,-36}, -{76,-15,-35}, -{76,-15,-34}, -{76,-15,-33}, -{76,-15,-32}, -{76,-15,-31}, -{76,-15,-30}, -{76,-15,-29}, -{76,-15,-28}, -{76,-15,-27}, -{76,-15,-26}, -{76,-15,-25}, -{76,-15,-24}, -{76,-15,-23}, -{76,-15,-22}, -{76,-15,-21}, -{76,-15,-20}, -{76,-15,-19}, -{76,-15,-18}, -{76,-15,-17}, -{76,-15,-16}, -{76,-15,-15}, -{76,-15,-14}, -{76,-15,-13}, -{76,-15,-12}, -{76,-15,-11}, -{76,-15,-10}, -{76,-15,-9}, -{76,-15,-8}, -{76,-15,-7}, -{76,-15,-6}, -{76,-15,-5}, -{76,-15,-4}, -{76,-15,-3}, -{76,-15,-2}, -{76,-15,-1}, -{76,-15,0}, -{76,-15,1}, -{76,-15,2}, -{76,-15,3}, -{76,-15,4}, -{76,-15,5}, -{76,-15,6}, -{76,-15,7}, -{76,-15,8}, -{76,-15,9}, -{76,-15,10}, -{76,-15,11}, -{76,-15,12}, -{76,-15,13}, -{76,-15,14}, -{76,-15,15}, -{76,-15,16}, -{76,-15,17}, -{76,-15,18}, -{76,-15,19}, -{76,-15,20}, -{76,-15,21}, -{76,-15,22}, -{76,-15,23}, -{76,-15,24}, -{76,-15,25}, -{76,-15,26}, -{76,-15,27}, -{76,-15,28}, -{76,-15,29}, -{76,-15,30}, -{76,-15,31}, -{76,-15,32}, -{76,-15,33}, -{76,-15,34}, -{76,-15,35}, -{76,-15,36}, -{76,-15,37}, -{76,-15,38}, -{76,-15,39}, -{76,-15,40}, -{76,-15,41}, -{76,-15,42}, -{76,-15,43}, -{76,-15,44}, -{76,-15,45}, -{76,-15,46}, -{76,-15,47}, -{76,-15,48}, -{76,-15,49}, -{76,-15,50}, -{76,-15,51}, -{76,-15,52}, -{76,-15,53}, -{76,-15,54}, -{76,-15,55}, -{76,-15,56}, -{76,-15,57}, -{76,-15,58}, -{76,-15,59}, -{76,-15,60}, -{76,-15,61}, -{76,-15,62}, -{76,-15,63}, -{76,-15,64}, -{76,-15,65}, -{76,-15,66}, -{76,-15,67}, -{76,-15,68}, -{76,-15,69}, -{76,-15,70}, -{76,-15,71}, -{76,-15,72}, -{76,-15,73}, -{76,-15,74}, -{76,-15,75}, -{76,-15,76}, -{76,-15,77}, -{76,-14,-37}, -{76,-14,-36}, -{76,-14,-35}, -{76,-14,-34}, -{76,-14,-33}, -{76,-14,-32}, -{76,-14,-31}, -{76,-14,-30}, -{76,-14,-29}, -{76,-14,-28}, -{76,-14,-27}, -{76,-14,-26}, -{76,-14,-25}, -{76,-14,-24}, -{76,-14,-23}, -{76,-14,-22}, -{76,-14,-21}, -{76,-14,-20}, -{76,-14,-19}, -{76,-14,-18}, -{76,-14,-17}, -{76,-14,-16}, -{76,-14,-15}, -{76,-14,-14}, -{76,-14,-13}, -{76,-14,-12}, -{76,-14,-11}, -{76,-14,-10}, -{76,-14,-9}, -{76,-14,-8}, -{76,-14,-7}, -{76,-14,-6}, -{76,-14,-5}, -{76,-14,-4}, -{76,-14,-3}, -{76,-14,-2}, -{76,-14,-1}, -{76,-14,0}, -{76,-14,1}, -{76,-14,2}, -{76,-14,3}, -{76,-14,4}, -{76,-14,5}, -{76,-14,6}, -{76,-14,7}, -{76,-14,8}, -{76,-14,9}, -{76,-14,10}, -{76,-14,11}, -{76,-14,12}, -{76,-14,13}, -{76,-14,14}, -{76,-14,15}, -{76,-14,16}, -{76,-14,17}, -{76,-14,18}, -{76,-14,19}, -{76,-14,20}, -{76,-14,21}, -{76,-14,22}, -{76,-14,23}, -{76,-14,24}, -{76,-14,25}, -{76,-14,26}, -{76,-14,27}, -{76,-14,28}, -{76,-14,29}, -{76,-14,30}, -{76,-14,31}, -{76,-14,32}, -{76,-14,33}, -{76,-14,34}, -{76,-14,35}, -{76,-14,36}, -{76,-14,37}, -{76,-14,38}, -{76,-14,39}, -{76,-14,40}, -{76,-14,41}, -{76,-14,42}, -{76,-14,43}, -{76,-14,44}, -{76,-14,45}, -{76,-14,46}, -{76,-14,47}, -{76,-14,48}, -{76,-14,49}, -{76,-14,50}, -{76,-14,51}, -{76,-14,52}, -{76,-14,53}, -{76,-14,54}, -{76,-14,55}, -{76,-14,56}, -{76,-14,57}, -{76,-14,58}, -{76,-14,59}, -{76,-14,60}, -{76,-14,61}, -{76,-14,62}, -{76,-14,63}, -{76,-14,64}, -{76,-14,65}, -{76,-14,66}, -{76,-14,67}, -{76,-14,68}, -{76,-14,69}, -{76,-14,70}, -{76,-14,71}, -{76,-14,72}, -{76,-14,73}, -{76,-14,74}, -{76,-14,75}, -{76,-14,76}, -{76,-14,77}, -{76,-13,-37}, -{76,-13,-36}, -{76,-13,-35}, -{76,-13,-34}, -{76,-13,-33}, -{76,-13,-32}, -{76,-13,-31}, -{76,-13,-30}, -{76,-13,-29}, -{76,-13,-28}, -{76,-13,-27}, -{76,-13,-26}, -{76,-13,-25}, -{76,-13,-24}, -{76,-13,-23}, -{76,-13,-22}, -{76,-13,-21}, -{76,-13,-20}, -{76,-13,-19}, -{76,-13,-18}, -{76,-13,-17}, -{76,-13,-16}, -{76,-13,-15}, -{76,-13,-14}, -{76,-13,-13}, -{76,-13,-12}, -{76,-13,-11}, -{76,-13,-10}, -{76,-13,-9}, -{76,-13,-8}, -{76,-13,-7}, -{76,-13,-6}, -{76,-13,-5}, -{76,-13,-4}, -{76,-13,-3}, -{76,-13,-2}, -{76,-13,-1}, -{76,-13,0}, -{76,-13,1}, -{76,-13,2}, -{76,-13,3}, -{76,-13,4}, -{76,-13,5}, -{76,-13,6}, -{76,-13,7}, -{76,-13,8}, -{76,-13,9}, -{76,-13,10}, -{76,-13,11}, -{76,-13,12}, -{76,-13,13}, -{76,-13,14}, -{76,-13,15}, -{76,-13,16}, -{76,-13,17}, -{76,-13,18}, -{76,-13,19}, -{76,-13,20}, -{76,-13,21}, -{76,-13,22}, -{76,-13,23}, -{76,-13,24}, -{76,-13,25}, -{76,-13,26}, -{76,-13,27}, -{76,-13,28}, -{76,-13,29}, -{76,-13,30}, -{76,-13,31}, -{76,-13,32}, -{76,-13,33}, -{76,-13,34}, -{76,-13,35}, -{76,-13,36}, -{76,-13,37}, -{76,-13,38}, -{76,-13,39}, -{76,-13,40}, -{76,-13,41}, -{76,-13,42}, -{76,-13,43}, -{76,-13,44}, -{76,-13,45}, -{76,-13,46}, -{76,-13,47}, -{76,-13,48}, -{76,-13,49}, -{76,-13,50}, -{76,-13,51}, -{76,-13,52}, -{76,-13,53}, -{76,-13,54}, -{76,-13,55}, -{76,-13,56}, -{76,-13,57}, -{76,-13,58}, -{76,-13,59}, -{76,-13,60}, -{76,-13,61}, -{76,-13,62}, -{76,-13,63}, -{76,-13,64}, -{76,-13,65}, -{76,-13,66}, -{76,-13,67}, -{76,-13,68}, -{76,-13,69}, -{76,-13,70}, -{76,-13,71}, -{76,-13,72}, -{76,-13,73}, -{76,-13,74}, -{76,-13,75}, -{76,-13,76}, -{76,-13,77}, -{76,-12,-37}, -{76,-12,-36}, -{76,-12,-35}, -{76,-12,-34}, -{76,-12,-33}, -{76,-12,-32}, -{76,-12,-31}, -{76,-12,-30}, -{76,-12,-29}, -{76,-12,-28}, -{76,-12,-27}, -{76,-12,-26}, -{76,-12,-25}, -{76,-12,-24}, -{76,-12,-23}, -{76,-12,-22}, -{76,-12,-21}, -{76,-12,-20}, -{76,-12,-19}, -{76,-12,-18}, -{76,-12,-17}, -{76,-12,-16}, -{76,-12,-15}, -{76,-12,-14}, -{76,-12,-13}, -{76,-12,-12}, -{76,-12,-11}, -{76,-12,-10}, -{76,-12,-9}, -{76,-12,-8}, -{76,-12,-7}, -{76,-12,-6}, -{76,-12,-5}, -{76,-12,-4}, -{76,-12,-3}, -{76,-12,-2}, -{76,-12,-1}, -{76,-12,0}, -{76,-12,1}, -{76,-12,2}, -{76,-12,3}, -{76,-12,4}, -{76,-12,5}, -{76,-12,6}, -{76,-12,7}, -{76,-12,8}, -{76,-12,9}, -{76,-12,10}, -{76,-12,11}, -{76,-12,12}, -{76,-12,13}, -{76,-12,14}, -{76,-12,15}, -{76,-12,16}, -{76,-12,17}, -{76,-12,18}, -{76,-12,19}, -{76,-12,20}, -{76,-12,21}, -{76,-12,22}, -{76,-12,23}, -{76,-12,24}, -{76,-12,25}, -{76,-12,26}, -{76,-12,27}, -{76,-12,28}, -{76,-12,29}, -{76,-12,30}, -{76,-12,31}, -{76,-12,32}, -{76,-12,33}, -{76,-12,34}, -{76,-12,35}, -{76,-12,36}, -{76,-12,37}, -{76,-12,38}, -{76,-12,39}, -{76,-12,40}, -{76,-12,41}, -{76,-12,42}, -{76,-12,43}, -{76,-12,44}, -{76,-12,45}, -{76,-12,46}, -{76,-12,47}, -{76,-12,48}, -{76,-12,49}, -{76,-12,50}, -{76,-12,51}, -{76,-12,52}, -{76,-12,53}, -{76,-12,54}, -{76,-12,55}, -{76,-12,56}, -{76,-12,57}, -{76,-12,58}, -{76,-12,59}, -{76,-12,60}, -{76,-12,61}, -{76,-12,62}, -{76,-12,63}, -{76,-12,64}, -{76,-12,65}, -{76,-12,66}, -{76,-12,67}, -{76,-12,68}, -{76,-12,69}, -{76,-12,70}, -{76,-12,71}, -{76,-12,72}, -{76,-12,73}, -{76,-12,74}, -{76,-12,75}, -{76,-12,76}, -{76,-12,77}, -{76,-11,-37}, -{76,-11,-36}, -{76,-11,-35}, -{76,-11,-34}, -{76,-11,-33}, -{76,-11,-32}, -{76,-11,-31}, -{76,-11,-30}, -{76,-11,-29}, -{76,-11,-28}, -{76,-11,-27}, -{76,-11,-26}, -{76,-11,-25}, -{76,-11,-24}, -{76,-11,-23}, -{76,-11,-22}, -{76,-11,-21}, -{76,-11,-20}, -{76,-11,-19}, -{76,-11,-18}, -{76,-11,-17}, -{76,-11,-16}, -{76,-11,-15}, -{76,-11,-14}, -{76,-11,-13}, -{76,-11,-12}, -{76,-11,-11}, -{76,-11,-10}, -{76,-11,-9}, -{76,-11,-8}, -{76,-11,-7}, -{76,-11,-6}, -{76,-11,-5}, -{76,-11,-4}, -{76,-11,-3}, -{76,-11,-2}, -{76,-11,-1}, -{76,-11,0}, -{76,-11,1}, -{76,-11,2}, -{76,-11,3}, -{76,-11,4}, -{76,-11,5}, -{76,-11,6}, -{76,-11,7}, -{76,-11,8}, -{76,-11,9}, -{76,-11,10}, -{76,-11,11}, -{76,-11,12}, -{76,-11,13}, -{76,-11,14}, -{76,-11,15}, -{76,-11,16}, -{76,-11,17}, -{76,-11,18}, -{76,-11,19}, -{76,-11,20}, -{76,-11,21}, -{76,-11,22}, -{76,-11,23}, -{76,-11,24}, -{76,-11,25}, -{76,-11,26}, -{76,-11,27}, -{76,-11,28}, -{76,-11,29}, -{76,-11,30}, -{76,-11,31}, -{76,-11,32}, -{76,-11,33}, -{76,-11,34}, -{76,-11,35}, -{76,-11,36}, -{76,-11,37}, -{76,-11,38}, -{76,-11,39}, -{76,-11,40}, -{76,-11,41}, -{76,-11,42}, -{76,-11,43}, -{76,-11,44}, -{76,-11,45}, -{76,-11,46}, -{76,-11,47}, -{76,-11,48}, -{76,-11,49}, -{76,-11,50}, -{76,-11,51}, -{76,-11,52}, -{76,-11,53}, -{76,-11,54}, -{76,-11,55}, -{76,-11,56}, -{76,-11,57}, -{76,-11,58}, -{76,-11,59}, -{76,-11,60}, -{76,-11,61}, -{76,-11,62}, -{76,-11,63}, -{76,-11,64}, -{76,-11,65}, -{76,-11,66}, -{76,-11,67}, -{76,-11,68}, -{76,-11,69}, -{76,-11,70}, -{76,-11,71}, -{76,-11,72}, -{76,-11,73}, -{76,-11,74}, -{76,-11,75}, -{76,-11,76}, -{76,-11,77}, -{76,-10,-37}, -{76,-10,-36}, -{76,-10,-35}, -{76,-10,-34}, -{76,-10,-33}, -{76,-10,-32}, -{76,-10,-31}, -{76,-10,-30}, -{76,-10,-29}, -{76,-10,-28}, -{76,-10,-27}, -{76,-10,-26}, -{76,-10,-25}, -{76,-10,-24}, -{76,-10,-23}, -{76,-10,-22}, -{76,-10,-21}, -{76,-10,-20}, -{76,-10,-19}, -{76,-10,-18}, -{76,-10,-17}, -{76,-10,-16}, -{76,-10,-15}, -{76,-10,-14}, -{76,-10,-13}, -{76,-10,-12}, -{76,-10,-11}, -{76,-10,-10}, -{76,-10,-9}, -{76,-10,-8}, -{76,-10,-7}, -{76,-10,-6}, -{76,-10,-5}, -{76,-10,-4}, -{76,-10,-3}, -{76,-10,-2}, -{76,-10,-1}, -{76,-10,0}, -{76,-10,1}, -{76,-10,2}, -{76,-10,3}, -{76,-10,4}, -{76,-10,5}, -{76,-10,6}, -{76,-10,7}, -{76,-10,8}, -{76,-10,9}, -{76,-10,10}, -{76,-10,11}, -{76,-10,12}, -{76,-10,13}, -{76,-10,14}, -{76,-10,15}, -{76,-10,16}, -{76,-10,17}, -{76,-10,18}, -{76,-10,19}, -{76,-10,20}, -{76,-10,21}, -{76,-10,22}, -{76,-10,23}, -{76,-10,24}, -{76,-10,25}, -{76,-10,26}, -{76,-10,27}, -{76,-10,28}, -{76,-10,29}, -{76,-10,30}, -{76,-10,31}, -{76,-10,32}, -{76,-10,33}, -{76,-10,34}, -{76,-10,35}, -{76,-10,36}, -{76,-10,37}, -{76,-10,38}, -{76,-10,39}, -{76,-10,40}, -{76,-10,41}, -{76,-10,42}, -{76,-10,43}, -{76,-10,44}, -{76,-10,45}, -{76,-10,46}, -{76,-10,47}, -{76,-10,48}, -{76,-10,49}, -{76,-10,50}, -{76,-10,51}, -{76,-10,52}, -{76,-10,53}, -{76,-10,54}, -{76,-10,55}, -{76,-10,56}, -{76,-10,57}, -{76,-10,58}, -{76,-10,59}, -{76,-10,60}, -{76,-10,61}, -{76,-10,62}, -{76,-10,63}, -{76,-10,64}, -{76,-10,65}, -{76,-10,66}, -{76,-10,67}, -{76,-10,68}, -{76,-10,69}, -{76,-10,70}, -{76,-10,71}, -{76,-10,72}, -{76,-10,73}, -{76,-10,74}, -{76,-10,75}, -{76,-10,76}, -{76,-10,77}, -{76,-9,-37}, -{76,-9,-36}, -{76,-9,-35}, -{76,-9,-34}, -{76,-9,-33}, -{76,-9,-32}, -{76,-9,-31}, -{76,-9,-30}, -{76,-9,-29}, -{76,-9,-28}, -{76,-9,-27}, -{76,-9,-26}, -{76,-9,-25}, -{76,-9,-24}, -{76,-9,-23}, -{76,-9,-22}, -{76,-9,-21}, -{76,-9,-20}, -{76,-9,-19}, -{76,-9,-18}, -{76,-9,-17}, -{76,-9,-16}, -{76,-9,-15}, -{76,-9,-14}, -{76,-9,-13}, -{76,-9,-12}, -{76,-9,-11}, -{76,-9,-10}, -{76,-9,-9}, -{76,-9,-8}, -{76,-9,-7}, -{76,-9,-6}, -{76,-9,-5}, -{76,-9,-4}, -{76,-9,-3}, -{76,-9,-2}, -{76,-9,-1}, -{76,-9,0}, -{76,-9,1}, -{76,-9,2}, -{76,-9,3}, -{76,-9,4}, -{76,-9,5}, -{76,-9,6}, -{76,-9,7}, -{76,-9,8}, -{76,-9,9}, -{76,-9,10}, -{76,-9,11}, -{76,-9,12}, -{76,-9,13}, -{76,-9,14}, -{76,-9,15}, -{76,-9,16}, -{76,-9,17}, -{76,-9,18}, -{76,-9,19}, -{76,-9,20}, -{76,-9,21}, -{76,-9,22}, -{76,-9,23}, -{76,-9,24}, -{76,-9,25}, -{76,-9,26}, -{76,-9,27}, -{76,-9,28}, -{76,-9,29}, -{76,-9,30}, -{76,-9,31}, -{76,-9,32}, -{76,-9,33}, -{76,-9,34}, -{76,-9,35}, -{76,-9,36}, -{76,-9,37}, -{76,-9,38}, -{76,-9,39}, -{76,-9,40}, -{76,-9,41}, -{76,-9,42}, -{76,-9,43}, -{76,-9,44}, -{76,-9,45}, -{76,-9,46}, -{76,-9,47}, -{76,-9,48}, -{76,-9,49}, -{76,-9,50}, -{76,-9,51}, -{76,-9,52}, -{76,-9,53}, -{76,-9,54}, -{76,-9,55}, -{76,-9,56}, -{76,-9,57}, -{76,-9,58}, -{76,-9,59}, -{76,-9,60}, -{76,-9,61}, -{76,-9,62}, -{76,-9,63}, -{76,-9,64}, -{76,-9,65}, -{76,-9,66}, -{76,-9,67}, -{76,-9,68}, -{76,-9,69}, -{76,-9,70}, -{76,-9,71}, -{76,-9,72}, -{76,-9,73}, -{76,-9,74}, -{76,-9,75}, -{76,-9,76}, -{76,-9,77}, -{76,-8,-37}, -{76,-8,-36}, -{76,-8,-35}, -{76,-8,-34}, -{76,-8,-33}, -{76,-8,-32}, -{76,-8,-31}, -{76,-8,-30}, -{76,-8,-29}, -{76,-8,-28}, -{76,-8,-27}, -{76,-8,-26}, -{76,-8,-25}, -{76,-8,-24}, -{76,-8,-23}, -{76,-8,-22}, -{76,-8,-21}, -{76,-8,-20}, -{76,-8,-19}, -{76,-8,-18}, -{76,-8,-17}, -{76,-8,-16}, -{76,-8,-15}, -{76,-8,-14}, -{76,-8,-13}, -{76,-8,-12}, -{76,-8,-11}, -{76,-8,-10}, -{76,-8,-9}, -{76,-8,-8}, -{76,-8,-7}, -{76,-8,-6}, -{76,-8,-5}, -{76,-8,-4}, -{76,-8,-3}, -{76,-8,-2}, -{76,-8,-1}, -{76,-8,0}, -{76,-8,1}, -{76,-8,2}, -{76,-8,3}, -{76,-8,4}, -{76,-8,5}, -{76,-8,6}, -{76,-8,7}, -{76,-8,8}, -{76,-8,9}, -{76,-8,10}, -{76,-8,11}, -{76,-8,12}, -{76,-8,13}, -{76,-8,14}, -{76,-8,15}, -{76,-8,16}, -{76,-8,17}, -{76,-8,18}, -{76,-8,19}, -{76,-8,20}, -{76,-8,21}, -{76,-8,22}, -{76,-8,23}, -{76,-8,24}, -{76,-8,25}, -{76,-8,26}, -{76,-8,27}, -{76,-8,28}, -{76,-8,29}, -{76,-8,30}, -{76,-8,31}, -{76,-8,32}, -{76,-8,33}, -{76,-8,34}, -{76,-8,35}, -{76,-8,36}, -{76,-8,37}, -{76,-8,38}, -{76,-8,39}, -{76,-8,40}, -{76,-8,41}, -{76,-8,42}, -{76,-8,43}, -{76,-8,44}, -{76,-8,45}, -{76,-8,46}, -{76,-8,47}, -{76,-8,48}, -{76,-8,49}, -{76,-8,50}, -{76,-8,51}, -{76,-8,52}, -{76,-8,53}, -{76,-8,54}, -{76,-8,55}, -{76,-8,56}, -{76,-8,57}, -{76,-8,58}, -{76,-8,59}, -{76,-8,60}, -{76,-8,61}, -{76,-8,62}, -{76,-8,63}, -{76,-8,64}, -{76,-8,65}, -{76,-8,66}, -{76,-8,67}, -{76,-8,68}, -{76,-8,69}, -{76,-8,70}, -{76,-8,71}, -{76,-8,72}, -{76,-8,73}, -{76,-8,74}, -{76,-8,75}, -{76,-8,76}, -{76,-8,77}, -{76,-7,-37}, -{76,-7,-36}, -{76,-7,-35}, -{76,-7,-34}, -{76,-7,-33}, -{76,-7,-32}, -{76,-7,-31}, -{76,-7,-30}, -{76,-7,-29}, -{76,-7,-28}, -{76,-7,-27}, -{76,-7,-26}, -{76,-7,-25}, -{76,-7,-24}, -{76,-7,-23}, -{76,-7,-22}, -{76,-7,-21}, -{76,-7,-20}, -{76,-7,-19}, -{76,-7,-18}, -{76,-7,-17}, -{76,-7,-16}, -{76,-7,-15}, -{76,-7,-14}, -{76,-7,-13}, -{76,-7,-12}, -{76,-7,-11}, -{76,-7,-10}, -{76,-7,-9}, -{76,-7,-8}, -{76,-7,-7}, -{76,-7,-6}, -{76,-7,-5}, -{76,-7,-4}, -{76,-7,-3}, -{76,-7,-2}, -{76,-7,-1}, -{76,-7,0}, -{76,-7,1}, -{76,-7,2}, -{76,-7,3}, -{76,-7,4}, -{76,-7,5}, -{76,-7,6}, -{76,-7,7}, -{76,-7,8}, -{76,-7,9}, -{76,-7,10}, -{76,-7,11}, -{76,-7,12}, -{76,-7,13}, -{76,-7,14}, -{76,-7,15}, -{76,-7,16}, -{76,-7,17}, -{76,-7,18}, -{76,-7,19}, -{76,-7,20}, -{76,-7,21}, -{76,-7,22}, -{76,-7,23}, -{76,-7,24}, -{76,-7,25}, -{76,-7,26}, -{76,-7,27}, -{76,-7,28}, -{76,-7,29}, -{76,-7,30}, -{76,-7,31}, -{76,-7,32}, -{76,-7,33}, -{76,-7,34}, -{76,-7,35}, -{76,-7,36}, -{76,-7,37}, -{76,-7,38}, -{76,-7,39}, -{76,-7,40}, -{76,-7,41}, -{76,-7,42}, -{76,-7,43}, -{76,-7,44}, -{76,-7,45}, -{76,-7,46}, -{76,-7,47}, -{76,-7,48}, -{76,-7,49}, -{76,-7,50}, -{76,-7,51}, -{76,-7,52}, -{76,-7,53}, -{76,-7,54}, -{76,-7,55}, -{76,-7,56}, -{76,-7,57}, -{76,-7,58}, -{76,-7,59}, -{76,-7,60}, -{76,-7,61}, -{76,-7,62}, -{76,-7,63}, -{76,-7,64}, -{76,-7,65}, -{76,-7,66}, -{76,-7,67}, -{76,-7,68}, -{76,-7,69}, -{76,-7,70}, -{76,-7,71}, -{76,-7,72}, -{76,-7,73}, -{76,-7,74}, -{76,-7,75}, -{76,-7,76}, -{76,-7,77}, -{76,-6,-37}, -{76,-6,-36}, -{76,-6,-35}, -{76,-6,-34}, -{76,-6,-33}, -{76,-6,-32}, -{76,-6,-31}, -{76,-6,-30}, -{76,-6,-29}, -{76,-6,-28}, -{76,-6,-27}, -{76,-6,-26}, -{76,-6,-25}, -{76,-6,-24}, -{76,-6,-23}, -{76,-6,-22}, -{76,-6,-21}, -{76,-6,-20}, -{76,-6,-19}, -{76,-6,-18}, -{76,-6,-17}, -{76,-6,-16}, -{76,-6,-15}, -{76,-6,-14}, -{76,-6,-13}, -{76,-6,-12}, -{76,-6,-11}, -{76,-6,-10}, -{76,-6,-9}, -{76,-6,-8}, -{76,-6,-7}, -{76,-6,-6}, -{76,-6,-5}, -{76,-6,-4}, -{76,-6,-3}, -{76,-6,-2}, -{76,-6,-1}, -{76,-6,0}, -{76,-6,1}, -{76,-6,2}, -{76,-6,3}, -{76,-6,4}, -{76,-6,5}, -{76,-6,6}, -{76,-6,7}, -{76,-6,8}, -{76,-6,9}, -{76,-6,10}, -{76,-6,11}, -{76,-6,12}, -{76,-6,13}, -{76,-6,14}, -{76,-6,15}, -{76,-6,16}, -{76,-6,17}, -{76,-6,18}, -{76,-6,19}, -{76,-6,20}, -{76,-6,21}, -{76,-6,22}, -{76,-6,23}, -{76,-6,24}, -{76,-6,25}, -{76,-6,26}, -{76,-6,27}, -{76,-6,28}, -{76,-6,29}, -{76,-6,30}, -{76,-6,31}, -{76,-6,32}, -{76,-6,33}, -{76,-6,34}, -{76,-6,35}, -{76,-6,36}, -{76,-6,37}, -{76,-6,38}, -{76,-6,39}, -{76,-6,40}, -{76,-6,41}, -{76,-6,42}, -{76,-6,43}, -{76,-6,44}, -{76,-6,45}, -{76,-6,46}, -{76,-6,47}, -{76,-6,48}, -{76,-6,49}, -{76,-6,50}, -{76,-6,51}, -{76,-6,52}, -{76,-6,53}, -{76,-6,54}, -{76,-6,55}, -{76,-6,56}, -{76,-6,57}, -{76,-6,58}, -{76,-6,59}, -{76,-6,60}, -{76,-6,61}, -{76,-6,62}, -{76,-6,63}, -{76,-6,64}, -{76,-6,65}, -{76,-6,66}, -{76,-6,67}, -{76,-6,68}, -{76,-6,69}, -{76,-6,70}, -{76,-6,71}, -{76,-6,72}, -{76,-6,73}, -{76,-6,74}, -{76,-6,75}, -{76,-6,76}, -{76,-6,77}, -{76,-5,-37}, -{76,-5,-36}, -{76,-5,-35}, -{76,-5,-34}, -{76,-5,-33}, -{76,-5,-32}, -{76,-5,-31}, -{76,-5,-30}, -{76,-5,-29}, -{76,-5,-28}, -{76,-5,-27}, -{76,-5,-26}, -{76,-5,-25}, -{76,-5,-24}, -{76,-5,-23}, -{76,-5,-22}, -{76,-5,-21}, -{76,-5,-20}, -{76,-5,-19}, -{76,-5,-18}, -{76,-5,-17}, -{76,-5,-16}, -{76,-5,-15}, -{76,-5,-14}, -{76,-5,-13}, -{76,-5,-12}, -{76,-5,-11}, -{76,-5,-10}, -{76,-5,-9}, -{76,-5,-8}, -{76,-5,-7}, -{76,-5,-6}, -{76,-5,-5}, -{76,-5,-4}, -{76,-5,-3}, -{76,-5,-2}, -{76,-5,-1}, -{76,-5,0}, -{76,-5,1}, -{76,-5,2}, -{76,-5,3}, -{76,-5,4}, -{76,-5,5}, -{76,-5,6}, -{76,-5,7}, -{76,-5,8}, -{76,-5,9}, -{76,-5,10}, -{76,-5,11}, -{76,-5,12}, -{76,-5,13}, -{76,-5,14}, -{76,-5,15}, -{76,-5,16}, -{76,-5,17}, -{76,-5,18}, -{76,-5,19}, -{76,-5,20}, -{76,-5,21}, -{76,-5,22}, -{76,-5,23}, -{76,-5,24}, -{76,-5,25}, -{76,-5,26}, -{76,-5,27}, -{76,-5,28}, -{76,-5,29}, -{76,-5,30}, -{76,-5,31}, -{76,-5,32}, -{76,-5,33}, -{76,-5,34}, -{76,-5,35}, -{76,-5,36}, -{76,-5,37}, -{76,-5,38}, -{76,-5,39}, -{76,-5,40}, -{76,-5,41}, -{76,-5,42}, -{76,-5,43}, -{76,-5,44}, -{76,-5,45}, -{76,-5,46}, -{76,-5,47}, -{76,-5,48}, -{76,-5,49}, -{76,-5,50}, -{76,-5,51}, -{76,-5,52}, -{76,-5,53}, -{76,-5,54}, -{76,-5,55}, -{76,-5,56}, -{76,-5,57}, -{76,-5,58}, -{76,-5,59}, -{76,-5,60}, -{76,-5,61}, -{76,-5,62}, -{76,-5,63}, -{76,-5,64}, -{76,-5,65}, -{76,-5,66}, -{76,-5,67}, -{76,-5,68}, -{76,-5,69}, -{76,-5,70}, -{76,-5,71}, -{76,-5,72}, -{76,-5,73}, -{76,-5,74}, -{76,-5,75}, -{76,-5,76}, -{76,-5,77}, -{76,-4,-37}, -{76,-4,-36}, -{76,-4,-35}, -{76,-4,-34}, -{76,-4,-33}, -{76,-4,-32}, -{76,-4,-31}, -{76,-4,-30}, -{76,-4,-29}, -{76,-4,-28}, -{76,-4,-27}, -{76,-4,-26}, -{76,-4,-25}, -{76,-4,-24}, -{76,-4,-23}, -{76,-4,-22}, -{76,-4,-21}, -{76,-4,-20}, -{76,-4,-19}, -{76,-4,-18}, -{76,-4,-17}, -{76,-4,-16}, -{76,-4,-15}, -{76,-4,-14}, -{76,-4,-13}, -{76,-4,-12}, -{76,-4,-11}, -{76,-4,-10}, -{76,-4,-9}, -{76,-4,-8}, -{76,-4,-7}, -{76,-4,-6}, -{76,-4,-5}, -{76,-4,-4}, -{76,-4,-3}, -{76,-4,-2}, -{76,-4,-1}, -{76,-4,0}, -{76,-4,1}, -{76,-4,2}, -{76,-4,3}, -{76,-4,4}, -{76,-4,5}, -{76,-4,6}, -{76,-4,7}, -{76,-4,8}, -{76,-4,9}, -{76,-4,10}, -{76,-4,11}, -{76,-4,12}, -{76,-4,13}, -{76,-4,14}, -{76,-4,15}, -{76,-4,16}, -{76,-4,17}, -{76,-4,18}, -{76,-4,19}, -{76,-4,20}, -{76,-4,21}, -{76,-4,22}, -{76,-4,23}, -{76,-4,24}, -{76,-4,25}, -{76,-4,26}, -{76,-4,27}, -{76,-4,28}, -{76,-4,29}, -{76,-4,30}, -{76,-4,31}, -{76,-4,32}, -{76,-4,33}, -{76,-4,34}, -{76,-4,35}, -{76,-4,36}, -{76,-4,37}, -{76,-4,38}, -{76,-4,39}, -{76,-4,40}, -{76,-4,41}, -{76,-4,42}, -{76,-4,43}, -{76,-4,44}, -{76,-4,45}, -{76,-4,46}, -{76,-4,47}, -{76,-4,48}, -{76,-4,49}, -{76,-4,50}, -{76,-4,51}, -{76,-4,52}, -{76,-4,53}, -{76,-4,54}, -{76,-4,55}, -{76,-4,56}, -{76,-4,57}, -{76,-4,58}, -{76,-4,59}, -{76,-4,60}, -{76,-4,61}, -{76,-4,62}, -{76,-4,63}, -{76,-4,64}, -{76,-4,65}, -{76,-4,66}, -{76,-4,67}, -{76,-4,68}, -{76,-4,69}, -{76,-4,70}, -{76,-4,71}, -{76,-4,72}, -{76,-4,73}, -{76,-4,74}, -{76,-4,75}, -{76,-4,76}, -{76,-4,77}, -{76,-3,-37}, -{76,-3,-36}, -{76,-3,-35}, -{76,-3,-34}, -{76,-3,-33}, -{76,-3,-32}, -{76,-3,-31}, -{76,-3,-30}, -{76,-3,-29}, -{76,-3,-28}, -{76,-3,-27}, -{76,-3,-26}, -{76,-3,-25}, -{76,-3,-24}, -{76,-3,-23}, -{76,-3,-22}, -{76,-3,-21}, -{76,-3,-20}, -{76,-3,-19}, -{76,-3,-18}, -{76,-3,-17}, -{76,-3,-16}, -{76,-3,-15}, -{76,-3,-14}, -{76,-3,-13}, -{76,-3,-12}, -{76,-3,-11}, -{76,-3,-10}, -{76,-3,-9}, -{76,-3,-8}, -{76,-3,-7}, -{76,-3,-6}, -{76,-3,-5}, -{76,-3,-4}, -{76,-3,-3}, -{76,-3,-2}, -{76,-3,-1}, -{76,-3,0}, -{76,-3,1}, -{76,-3,2}, -{76,-3,3}, -{76,-3,4}, -{76,-3,5}, -{76,-3,6}, -{76,-3,7}, -{76,-3,8}, -{76,-3,9}, -{76,-3,10}, -{76,-3,11}, -{76,-3,12}, -{76,-3,13}, -{76,-3,14}, -{76,-3,15}, -{76,-3,16}, -{76,-3,17}, -{76,-3,18}, -{76,-3,19}, -{76,-3,20}, -{76,-3,21}, -{76,-3,22}, -{76,-3,23}, -{76,-3,24}, -{76,-3,25}, -{76,-3,26}, -{76,-3,27}, -{76,-3,28}, -{76,-3,29}, -{76,-3,30}, -{76,-3,31}, -{76,-3,32}, -{76,-3,33}, -{76,-3,34}, -{76,-3,35}, -{76,-3,36}, -{76,-3,37}, -{76,-3,38}, -{76,-3,39}, -{76,-3,40}, -{76,-3,41}, -{76,-3,42}, -{76,-3,43}, -{76,-3,44}, -{76,-3,45}, -{76,-3,46}, -{76,-3,47}, -{76,-3,48}, -{76,-3,49}, -{76,-3,50}, -{76,-3,51}, -{76,-3,52}, -{76,-3,53}, -{76,-3,54}, -{76,-3,55}, -{76,-3,56}, -{76,-3,57}, -{76,-3,58}, -{76,-3,59}, -{76,-3,60}, -{76,-3,61}, -{76,-3,62}, -{76,-3,63}, -{76,-3,64}, -{76,-3,65}, -{76,-3,66}, -{76,-3,67}, -{76,-3,68}, -{76,-3,69}, -{76,-3,70}, -{76,-3,71}, -{76,-3,72}, -{76,-3,73}, -{76,-3,74}, -{76,-3,75}, -{76,-3,76}, -{76,-3,77}, -{76,-2,-37}, -{76,-2,-36}, -{76,-2,-35}, -{76,-2,-34}, -{76,-2,-33}, -{76,-2,-32}, -{76,-2,-31}, -{76,-2,-30}, -{76,-2,-29}, -{76,-2,-28}, -{76,-2,-27}, -{76,-2,-26}, -{76,-2,-25}, -{76,-2,-24}, -{76,-2,-23}, -{76,-2,-22}, -{76,-2,-21}, -{76,-2,-20}, -{76,-2,-19}, -{76,-2,-18}, -{76,-2,-17}, -{76,-2,-16}, -{76,-2,-15}, -{76,-2,-14}, -{76,-2,-13}, -{76,-2,-12}, -{76,-2,-11}, -{76,-2,-10}, -{76,-2,-9}, -{76,-2,-8}, -{76,-2,-7}, -{76,-2,-6}, -{76,-2,-5}, -{76,-2,-4}, -{76,-2,-3}, -{76,-2,-2}, -{76,-2,-1}, -{76,-2,0}, -{76,-2,1}, -{76,-2,2}, -{76,-2,3}, -{76,-2,4}, -{76,-2,5}, -{76,-2,6}, -{76,-2,7}, -{76,-2,8}, -{76,-2,9}, -{76,-2,10}, -{76,-2,11}, -{76,-2,12}, -{76,-2,13}, -{76,-2,14}, -{76,-2,15}, -{76,-2,16}, -{76,-2,17}, -{76,-2,18}, -{76,-2,19}, -{76,-2,20}, -{76,-2,21}, -{76,-2,22}, -{76,-2,23}, -{76,-2,24}, -{76,-2,25}, -{76,-2,26}, -{76,-2,27}, -{76,-2,28}, -{76,-2,29}, -{76,-2,30}, -{76,-2,31}, -{76,-2,32}, -{76,-2,33}, -{76,-2,34}, -{76,-2,35}, -{76,-2,36}, -{76,-2,37}, -{76,-2,38}, -{76,-2,39}, -{76,-2,40}, -{76,-2,41}, -{76,-2,42}, -{76,-2,43}, -{76,-2,44}, -{76,-2,45}, -{76,-2,46}, -{76,-2,47}, -{76,-2,48}, -{76,-2,49}, -{76,-2,50}, -{76,-2,51}, -{76,-2,52}, -{76,-2,53}, -{76,-2,54}, -{76,-2,55}, -{76,-2,56}, -{76,-2,57}, -{76,-2,58}, -{76,-2,59}, -{76,-2,60}, -{76,-2,61}, -{76,-2,62}, -{76,-2,63}, -{76,-2,64}, -{76,-2,65}, -{76,-2,66}, -{76,-2,67}, -{76,-2,68}, -{76,-2,69}, -{76,-2,70}, -{76,-2,71}, -{76,-2,72}, -{76,-2,73}, -{76,-2,74}, -{76,-2,75}, -{76,-2,76}, -{76,-2,77}, -{76,-2,78}, -{76,-1,-37}, -{76,-1,-36}, -{76,-1,-35}, -{76,-1,-34}, -{76,-1,-33}, -{76,-1,-32}, -{76,-1,-31}, -{76,-1,-30}, -{76,-1,-29}, -{76,-1,-28}, -{76,-1,-27}, -{76,-1,-26}, -{76,-1,-25}, -{76,-1,-24}, -{76,-1,-23}, -{76,-1,-22}, -{76,-1,-21}, -{76,-1,-20}, -{76,-1,-19}, -{76,-1,-18}, -{76,-1,-17}, -{76,-1,-16}, -{76,-1,-15}, -{76,-1,-14}, -{76,-1,-13}, -{76,-1,-12}, -{76,-1,-11}, -{76,-1,-10}, -{76,-1,-9}, -{76,-1,-8}, -{76,-1,-7}, -{76,-1,-6}, -{76,-1,-5}, -{76,-1,-4}, -{76,-1,-3}, -{76,-1,-2}, -{76,-1,-1}, -{76,-1,0}, -{76,-1,1}, -{76,-1,2}, -{76,-1,3}, -{76,-1,4}, -{76,-1,5}, -{76,-1,6}, -{76,-1,7}, -{76,-1,8}, -{76,-1,9}, -{76,-1,10}, -{76,-1,11}, -{76,-1,12}, -{76,-1,13}, -{76,-1,14}, -{76,-1,15}, -{76,-1,16}, -{76,-1,17}, -{76,-1,18}, -{76,-1,19}, -{76,-1,20}, -{76,-1,21}, -{76,-1,22}, -{76,-1,23}, -{76,-1,24}, -{76,-1,25}, -{76,-1,26}, -{76,-1,27}, -{76,-1,28}, -{76,-1,29}, -{76,-1,30}, -{76,-1,31}, -{76,-1,32}, -{76,-1,33}, -{76,-1,34}, -{76,-1,35}, -{76,-1,36}, -{76,-1,37}, -{76,-1,38}, -{76,-1,39}, -{76,-1,40}, -{76,-1,41}, -{76,-1,42}, -{76,-1,43}, -{76,-1,44}, -{76,-1,45}, -{76,-1,46}, -{76,-1,47}, -{76,-1,48}, -{76,-1,49}, -{76,-1,50}, -{76,-1,51}, -{76,-1,52}, -{76,-1,53}, -{76,-1,54}, -{76,-1,55}, -{76,-1,56}, -{76,-1,57}, -{76,-1,58}, -{76,-1,59}, -{76,-1,60}, -{76,-1,61}, -{76,-1,62}, -{76,-1,63}, -{76,-1,64}, -{76,-1,65}, -{76,-1,66}, -{76,-1,67}, -{76,-1,68}, -{76,-1,69}, -{76,-1,70}, -{76,-1,71}, -{76,-1,72}, -{76,-1,73}, -{76,-1,74}, -{76,-1,75}, -{76,-1,76}, -{76,-1,77}, -{76,-1,78}, -{76,0,-37}, -{76,0,-36}, -{76,0,-35}, -{76,0,-34}, -{76,0,-33}, -{76,0,-32}, -{76,0,-31}, -{76,0,-30}, -{76,0,-29}, -{76,0,-28}, -{76,0,-27}, -{76,0,-26}, -{76,0,-25}, -{76,0,-24}, -{76,0,-23}, -{76,0,-22}, -{76,0,-21}, -{76,0,-20}, -{76,0,-19}, -{76,0,-18}, -{76,0,-17}, -{76,0,-16}, -{76,0,-15}, -{76,0,-14}, -{76,0,-13}, -{76,0,-12}, -{76,0,-11}, -{76,0,-10}, -{76,0,-9}, -{76,0,-8}, -{76,0,-7}, -{76,0,-6}, -{76,0,-5}, -{76,0,-4}, -{76,0,-3}, -{76,0,-2}, -{76,0,-1}, -{76,0,0}, -{76,0,1}, -{76,0,2}, -{76,0,3}, -{76,0,4}, -{76,0,5}, -{76,0,6}, -{76,0,7}, -{76,0,8}, -{76,0,9}, -{76,0,10}, -{76,0,11}, -{76,0,12}, -{76,0,13}, -{76,0,14}, -{76,0,15}, -{76,0,16}, -{76,0,17}, -{76,0,18}, -{76,0,19}, -{76,0,20}, -{76,0,21}, -{76,0,22}, -{76,0,23}, -{76,0,24}, -{76,0,25}, -{76,0,26}, -{76,0,27}, -{76,0,28}, -{76,0,29}, -{76,0,30}, -{76,0,31}, -{76,0,32}, -{76,0,33}, -{76,0,34}, -{76,0,35}, -{76,0,36}, -{76,0,37}, -{76,0,38}, -{76,0,39}, -{76,0,40}, -{76,0,41}, -{76,0,42}, -{76,0,43}, -{76,0,44}, -{76,0,45}, -{76,0,46}, -{76,0,47}, -{76,0,48}, -{76,0,49}, -{76,0,50}, -{76,0,51}, -{76,0,52}, -{76,0,53}, -{76,0,54}, -{76,0,55}, -{76,0,56}, -{76,0,57}, -{76,0,58}, -{76,0,59}, -{76,0,60}, -{76,0,61}, -{76,0,62}, -{76,0,63}, -{76,0,64}, -{76,0,65}, -{76,0,66}, -{76,0,67}, -{76,0,68}, -{76,0,69}, -{76,0,70}, -{76,0,71}, -{76,0,72}, -{76,0,73}, -{76,0,74}, -{76,0,75}, -{76,0,76}, -{76,0,77}, -{76,0,78}, -{76,1,-37}, -{76,1,-36}, -{76,1,-35}, -{76,1,-34}, -{76,1,-33}, -{76,1,-32}, -{76,1,-31}, -{76,1,-30}, -{76,1,-29}, -{76,1,-28}, -{76,1,-27}, -{76,1,-26}, -{76,1,-25}, -{76,1,-24}, -{76,1,-23}, -{76,1,-22}, -{76,1,-21}, -{76,1,-20}, -{76,1,-19}, -{76,1,-18}, -{76,1,-17}, -{76,1,-16}, -{76,1,-15}, -{76,1,-14}, -{76,1,-13}, -{76,1,-12}, -{76,1,-11}, -{76,1,-10}, -{76,1,-9}, -{76,1,-8}, -{76,1,-7}, -{76,1,-6}, -{76,1,-5}, -{76,1,-4}, -{76,1,-3}, -{76,1,-2}, -{76,1,-1}, -{76,1,0}, -{76,1,1}, -{76,1,2}, -{76,1,3}, -{76,1,4}, -{76,1,5}, -{76,1,6}, -{76,1,7}, -{76,1,8}, -{76,1,9}, -{76,1,10}, -{76,1,11}, -{76,1,12}, -{76,1,13}, -{76,1,14}, -{76,1,15}, -{76,1,16}, -{76,1,17}, -{76,1,18}, -{76,1,19}, -{76,1,20}, -{76,1,21}, -{76,1,22}, -{76,1,23}, -{76,1,24}, -{76,1,25}, -{76,1,26}, -{76,1,27}, -{76,1,28}, -{76,1,29}, -{76,1,30}, -{76,1,31}, -{76,1,32}, -{76,1,33}, -{76,1,34}, -{76,1,35}, -{76,1,36}, -{76,1,37}, -{76,1,38}, -{76,1,39}, -{76,1,40}, -{76,1,41}, -{76,1,42}, -{76,1,43}, -{76,1,44}, -{76,1,45}, -{76,1,46}, -{76,1,47}, -{76,1,48}, -{76,1,49}, -{76,1,50}, -{76,1,51}, -{76,1,52}, -{76,1,53}, -{76,1,54}, -{76,1,55}, -{76,1,56}, -{76,1,57}, -{76,1,58}, -{76,1,59}, -{76,1,60}, -{76,1,61}, -{76,1,62}, -{76,1,63}, -{76,1,64}, -{76,1,65}, -{76,1,66}, -{76,1,67}, -{76,1,68}, -{76,1,69}, -{76,1,70}, -{76,1,71}, -{76,1,72}, -{76,1,73}, -{76,1,74}, -{76,1,75}, -{76,1,76}, -{76,1,77}, -{76,1,78}, -{76,2,-37}, -{76,2,-36}, -{76,2,-35}, -{76,2,-34}, -{76,2,-33}, -{76,2,-32}, -{76,2,-31}, -{76,2,-30}, -{76,2,-29}, -{76,2,-28}, -{76,2,-27}, -{76,2,-26}, -{76,2,-25}, -{76,2,-24}, -{76,2,-23}, -{76,2,-22}, -{76,2,-21}, -{76,2,-20}, -{76,2,-19}, -{76,2,-18}, -{76,2,-17}, -{76,2,-16}, -{76,2,-15}, -{76,2,-14}, -{76,2,-13}, -{76,2,-12}, -{76,2,-11}, -{76,2,-10}, -{76,2,-9}, -{76,2,-8}, -{76,2,-7}, -{76,2,-6}, -{76,2,-5}, -{76,2,-4}, -{76,2,-3}, -{76,2,-2}, -{76,2,-1}, -{76,2,0}, -{76,2,1}, -{76,2,2}, -{76,2,3}, -{76,2,4}, -{76,2,5}, -{76,2,6}, -{76,2,7}, -{76,2,8}, -{76,2,9}, -{76,2,10}, -{76,2,11}, -{76,2,12}, -{76,2,13}, -{76,2,14}, -{76,2,15}, -{76,2,16}, -{76,2,17}, -{76,2,18}, -{76,2,19}, -{76,2,20}, -{76,2,21}, -{76,2,22}, -{76,2,23}, -{76,2,24}, -{76,2,25}, -{76,2,26}, -{76,2,27}, -{76,2,28}, -{76,2,29}, -{76,2,30}, -{76,2,31}, -{76,2,32}, -{76,2,33}, -{76,2,34}, -{76,2,35}, -{76,2,36}, -{76,2,37}, -{76,2,38}, -{76,2,39}, -{76,2,40}, -{76,2,41}, -{76,2,42}, -{76,2,43}, -{76,2,44}, -{76,2,45}, -{76,2,46}, -{76,2,47}, -{76,2,48}, -{76,2,49}, -{76,2,50}, -{76,2,51}, -{76,2,52}, -{76,2,53}, -{76,2,54}, -{76,2,55}, -{76,2,56}, -{76,2,57}, -{76,2,58}, -{76,2,59}, -{76,2,60}, -{76,2,61}, -{76,2,62}, -{76,2,63}, -{76,2,64}, -{76,2,65}, -{76,2,66}, -{76,2,67}, -{76,2,68}, -{76,2,69}, -{76,2,70}, -{76,2,71}, -{76,2,72}, -{76,2,73}, -{76,2,74}, -{76,2,75}, -{76,2,76}, -{76,2,77}, -{76,2,78}, -{76,3,-37}, -{76,3,-36}, -{76,3,-35}, -{76,3,-34}, -{76,3,-33}, -{76,3,-32}, -{76,3,-31}, -{76,3,-30}, -{76,3,-29}, -{76,3,-28}, -{76,3,-27}, -{76,3,-26}, -{76,3,-25}, -{76,3,-24}, -{76,3,-23}, -{76,3,-22}, -{76,3,-21}, -{76,3,-20}, -{76,3,-19}, -{76,3,-18}, -{76,3,-17}, -{76,3,-16}, -{76,3,-15}, -{76,3,-14}, -{76,3,-13}, -{76,3,-12}, -{76,3,-11}, -{76,3,-10}, -{76,3,-9}, -{76,3,-8}, -{76,3,-7}, -{76,3,-6}, -{76,3,-5}, -{76,3,-4}, -{76,3,-3}, -{76,3,-2}, -{76,3,-1}, -{76,3,0}, -{76,3,1}, -{76,3,2}, -{76,3,3}, -{76,3,4}, -{76,3,5}, -{76,3,6}, -{76,3,7}, -{76,3,8}, -{76,3,9}, -{76,3,10}, -{76,3,11}, -{76,3,12}, -{76,3,13}, -{76,3,14}, -{76,3,15}, -{76,3,16}, -{76,3,17}, -{76,3,18}, -{76,3,19}, -{76,3,20}, -{76,3,21}, -{76,3,22}, -{76,3,23}, -{76,3,24}, -{76,3,25}, -{76,3,26}, -{76,3,27}, -{76,3,28}, -{76,3,29}, -{76,3,30}, -{76,3,31}, -{76,3,32}, -{76,3,33}, -{76,3,34}, -{76,3,35}, -{76,3,36}, -{76,3,37}, -{76,3,38}, -{76,3,39}, -{76,3,40}, -{76,3,41}, -{76,3,42}, -{76,3,43}, -{76,3,44}, -{76,3,45}, -{76,3,46}, -{76,3,47}, -{76,3,48}, -{76,3,49}, -{76,3,50}, -{76,3,51}, -{76,3,52}, -{76,3,53}, -{76,3,54}, -{76,3,55}, -{76,3,56}, -{76,3,57}, -{76,3,58}, -{76,3,59}, -{76,3,60}, -{76,3,61}, -{76,3,62}, -{76,3,63}, -{76,3,64}, -{76,3,65}, -{76,3,66}, -{76,3,67}, -{76,3,68}, -{76,3,69}, -{76,3,70}, -{76,3,71}, -{76,3,72}, -{76,3,73}, -{76,3,74}, -{76,3,75}, -{76,3,76}, -{76,3,77}, -{76,3,78}, -{76,4,-36}, -{76,4,-35}, -{76,4,-34}, -{76,4,-33}, -{76,4,-32}, -{76,4,-31}, -{76,4,-30}, -{76,4,-29}, -{76,4,-28}, -{76,4,-27}, -{76,4,-26}, -{76,4,-25}, -{76,4,-24}, -{76,4,-23}, -{76,4,-22}, -{76,4,-21}, -{76,4,-20}, -{76,4,-19}, -{76,4,-18}, -{76,4,-17}, -{76,4,-16}, -{76,4,-15}, -{76,4,-14}, -{76,4,-13}, -{76,4,-12}, -{76,4,-11}, -{76,4,-10}, -{76,4,-9}, -{76,4,-8}, -{76,4,-7}, -{76,4,-6}, -{76,4,-5}, -{76,4,-4}, -{76,4,-3}, -{76,4,-2}, -{76,4,-1}, -{76,4,0}, -{76,4,1}, -{76,4,2}, -{76,4,3}, -{76,4,4}, -{76,4,5}, -{76,4,6}, -{76,4,7}, -{76,4,8}, -{76,4,9}, -{76,4,10}, -{76,4,11}, -{76,4,12}, -{76,4,13}, -{76,4,14}, -{76,4,15}, -{76,4,16}, -{76,4,17}, -{76,4,18}, -{76,4,19}, -{76,4,20}, -{76,4,21}, -{76,4,22}, -{76,4,23}, -{76,4,24}, -{76,4,25}, -{76,4,26}, -{76,4,27}, -{76,4,28}, -{76,4,29}, -{76,4,30}, -{76,4,31}, -{76,4,32}, -{76,4,33}, -{76,4,34}, -{76,4,35}, -{76,4,36}, -{76,4,37}, -{76,4,38}, -{76,4,39}, -{76,4,40}, -{76,4,41}, -{76,4,42}, -{76,4,43}, -{76,4,44}, -{76,4,45}, -{76,4,46}, -{76,4,47}, -{76,4,48}, -{76,4,49}, -{76,4,50}, -{76,4,51}, -{76,4,52}, -{76,4,53}, -{76,4,54}, -{76,4,55}, -{76,4,56}, -{76,4,57}, -{76,4,58}, -{76,4,59}, -{76,4,60}, -{76,4,61}, -{76,4,62}, -{76,4,63}, -{76,4,64}, -{76,4,65}, -{76,4,66}, -{76,4,67}, -{76,4,68}, -{76,4,69}, -{76,4,70}, -{76,4,71}, -{76,4,72}, -{76,4,73}, -{76,4,74}, -{76,4,75}, -{76,4,76}, -{76,4,77}, -{76,4,78}, -{76,5,-36}, -{76,5,-35}, -{76,5,-34}, -{76,5,-33}, -{76,5,-32}, -{76,5,-31}, -{76,5,-30}, -{76,5,-29}, -{76,5,-28}, -{76,5,-27}, -{76,5,-26}, -{76,5,-25}, -{76,5,-24}, -{76,5,-23}, -{76,5,-22}, -{76,5,-21}, -{76,5,-20}, -{76,5,-19}, -{76,5,-18}, -{76,5,-17}, -{76,5,-16}, -{76,5,-15}, -{76,5,-14}, -{76,5,-13}, -{76,5,-12}, -{76,5,-11}, -{76,5,-10}, -{76,5,-9}, -{76,5,-8}, -{76,5,-7}, -{76,5,-6}, -{76,5,-5}, -{76,5,-4}, -{76,5,-3}, -{76,5,-2}, -{76,5,-1}, -{76,5,0}, -{76,5,1}, -{76,5,2}, -{76,5,3}, -{76,5,4}, -{76,5,5}, -{76,5,6}, -{76,5,7}, -{76,5,8}, -{76,5,9}, -{76,5,10}, -{76,5,11}, -{76,5,12}, -{76,5,13}, -{76,5,14}, -{76,5,15}, -{76,5,16}, -{76,5,17}, -{76,5,18}, -{76,5,19}, -{76,5,20}, -{76,5,21}, -{76,5,22}, -{76,5,23}, -{76,5,24}, -{76,5,25}, -{76,5,26}, -{76,5,27}, -{76,5,28}, -{76,5,29}, -{76,5,30}, -{76,5,31}, -{76,5,32}, -{76,5,33}, -{76,5,34}, -{76,5,35}, -{76,5,36}, -{76,5,37}, -{76,5,38}, -{76,5,39}, -{76,5,40}, -{76,5,41}, -{76,5,42}, -{76,5,43}, -{76,5,44}, -{76,5,45}, -{76,5,46}, -{76,5,47}, -{76,5,48}, -{76,5,49}, -{76,5,50}, -{76,5,51}, -{76,5,52}, -{76,5,53}, -{76,5,54}, -{76,5,55}, -{76,5,56}, -{76,5,57}, -{76,5,58}, -{76,5,59}, -{76,5,60}, -{76,5,61}, -{76,5,62}, -{76,5,63}, -{76,5,64}, -{76,5,65}, -{76,5,66}, -{76,5,67}, -{76,5,68}, -{76,5,69}, -{76,5,70}, -{76,5,71}, -{76,5,72}, -{76,5,73}, -{76,5,74}, -{76,5,75}, -{76,5,76}, -{76,5,77}, -{76,5,78}, -{76,6,-36}, -{76,6,-35}, -{76,6,-34}, -{76,6,-33}, -{76,6,-32}, -{76,6,-31}, -{76,6,-30}, -{76,6,-29}, -{76,6,-28}, -{76,6,-27}, -{76,6,-26}, -{76,6,-25}, -{76,6,-24}, -{76,6,-23}, -{76,6,-22}, -{76,6,-21}, -{76,6,-20}, -{76,6,-19}, -{76,6,-18}, -{76,6,-17}, -{76,6,-16}, -{76,6,-15}, -{76,6,-14}, -{76,6,-13}, -{76,6,-12}, -{76,6,-11}, -{76,6,-10}, -{76,6,-9}, -{76,6,-8}, -{76,6,-7}, -{76,6,-6}, -{76,6,-5}, -{76,6,-4}, -{76,6,-3}, -{76,6,-2}, -{76,6,-1}, -{76,6,0}, -{76,6,1}, -{76,6,2}, -{76,6,3}, -{76,6,4}, -{76,6,5}, -{76,6,6}, -{76,6,7}, -{76,6,8}, -{76,6,9}, -{76,6,10}, -{76,6,11}, -{76,6,12}, -{76,6,13}, -{76,6,14}, -{76,6,15}, -{76,6,16}, -{76,6,17}, -{76,6,18}, -{76,6,19}, -{76,6,20}, -{76,6,21}, -{76,6,22}, -{76,6,23}, -{76,6,24}, -{76,6,25}, -{76,6,26}, -{76,6,27}, -{76,6,28}, -{76,6,29}, -{76,6,30}, -{76,6,31}, -{76,6,32}, -{76,6,33}, -{76,6,34}, -{76,6,35}, -{76,6,36}, -{76,6,37}, -{76,6,38}, -{76,6,39}, -{76,6,40}, -{76,6,41}, -{76,6,42}, -{76,6,43}, -{76,6,44}, -{76,6,45}, -{76,6,46}, -{76,6,47}, -{76,6,48}, -{76,6,49}, -{76,6,50}, -{76,6,51}, -{76,6,52}, -{76,6,53}, -{76,6,54}, -{76,6,55}, -{76,6,56}, -{76,6,57}, -{76,6,58}, -{76,6,59}, -{76,6,60}, -{76,6,61}, -{76,6,62}, -{76,6,63}, -{76,6,64}, -{76,6,65}, -{76,6,66}, -{76,6,67}, -{76,6,68}, -{76,6,69}, -{76,6,70}, -{76,6,71}, -{76,6,72}, -{76,6,73}, -{76,6,74}, -{76,6,75}, -{76,6,76}, -{76,6,77}, -{76,6,78}, -{76,7,-36}, -{76,7,-35}, -{76,7,-34}, -{76,7,-33}, -{76,7,-32}, -{76,7,-31}, -{76,7,-30}, -{76,7,-29}, -{76,7,-28}, -{76,7,-27}, -{76,7,-26}, -{76,7,-25}, -{76,7,-24}, -{76,7,-23}, -{76,7,-22}, -{76,7,-21}, -{76,7,-20}, -{76,7,-19}, -{76,7,-18}, -{76,7,-17}, -{76,7,-16}, -{76,7,-15}, -{76,7,-14}, -{76,7,-13}, -{76,7,-12}, -{76,7,-11}, -{76,7,-10}, -{76,7,-9}, -{76,7,-8}, -{76,7,-7}, -{76,7,-6}, -{76,7,-5}, -{76,7,-4}, -{76,7,-3}, -{76,7,-2}, -{76,7,-1}, -{76,7,0}, -{76,7,1}, -{76,7,2}, -{76,7,3}, -{76,7,4}, -{76,7,5}, -{76,7,6}, -{76,7,7}, -{76,7,8}, -{76,7,9}, -{76,7,10}, -{76,7,11}, -{76,7,12}, -{76,7,13}, -{76,7,14}, -{76,7,15}, -{76,7,16}, -{76,7,17}, -{76,7,18}, -{76,7,19}, -{76,7,20}, -{76,7,21}, -{76,7,22}, -{76,7,23}, -{76,7,24}, -{76,7,25}, -{76,7,26}, -{76,7,27}, -{76,7,28}, -{76,7,29}, -{76,7,30}, -{76,7,31}, -{76,7,32}, -{76,7,33}, -{76,7,34}, -{76,7,35}, -{76,7,36}, -{76,7,37}, -{76,7,38}, -{76,7,39}, -{76,7,40}, -{76,7,41}, -{76,7,42}, -{76,7,43}, -{76,7,44}, -{76,7,45}, -{76,7,46}, -{76,7,47}, -{76,7,48}, -{76,7,49}, -{76,7,50}, -{76,7,51}, -{76,7,52}, -{76,7,53}, -{76,7,54}, -{76,7,55}, -{76,7,56}, -{76,7,57}, -{76,7,58}, -{76,7,59}, -{76,7,60}, -{76,7,61}, -{76,7,62}, -{76,7,63}, -{76,7,64}, -{76,7,65}, -{76,7,66}, -{76,7,67}, -{76,7,68}, -{76,7,69}, -{76,7,70}, -{76,7,71}, -{76,7,72}, -{76,7,73}, -{76,7,74}, -{76,7,75}, -{76,7,76}, -{76,7,77}, -{76,7,78}, -{76,8,-36}, -{76,8,-35}, -{76,8,-34}, -{76,8,-33}, -{76,8,-32}, -{76,8,-31}, -{76,8,-30}, -{76,8,-29}, -{76,8,-28}, -{76,8,-27}, -{76,8,-26}, -{76,8,-25}, -{76,8,-24}, -{76,8,-23}, -{76,8,-22}, -{76,8,-21}, -{76,8,-20}, -{76,8,-19}, -{76,8,-18}, -{76,8,-17}, -{76,8,-16}, -{76,8,-15}, -{76,8,-14}, -{76,8,-13}, -{76,8,-12}, -{76,8,-11}, -{76,8,-10}, -{76,8,-9}, -{76,8,-8}, -{76,8,-7}, -{76,8,-6}, -{76,8,-5}, -{76,8,-4}, -{76,8,-3}, -{76,8,-2}, -{76,8,-1}, -{76,8,0}, -{76,8,1}, -{76,8,2}, -{76,8,3}, -{76,8,4}, -{76,8,5}, -{76,8,6}, -{76,8,7}, -{76,8,8}, -{76,8,9}, -{76,8,10}, -{76,8,11}, -{76,8,12}, -{76,8,13}, -{76,8,14}, -{76,8,15}, -{76,8,16}, -{76,8,17}, -{76,8,18}, -{76,8,19}, -{76,8,20}, -{76,8,21}, -{76,8,22}, -{76,8,23}, -{76,8,24}, -{76,8,25}, -{76,8,26}, -{76,8,27}, -{76,8,28}, -{76,8,29}, -{76,8,30}, -{76,8,31}, -{76,8,32}, -{76,8,33}, -{76,8,34}, -{76,8,35}, -{76,8,36}, -{76,8,37}, -{76,8,38}, -{76,8,39}, -{76,8,40}, -{76,8,41}, -{76,8,42}, -{76,8,43}, -{76,8,44}, -{76,8,45}, -{76,8,46}, -{76,8,47}, -{76,8,48}, -{76,8,49}, -{76,8,50}, -{76,8,51}, -{76,8,52}, -{76,8,53}, -{76,8,54}, -{76,8,55}, -{76,8,56}, -{76,8,57}, -{76,8,58}, -{76,8,59}, -{76,8,60}, -{76,8,61}, -{76,8,62}, -{76,8,63}, -{76,8,64}, -{76,8,65}, -{76,8,66}, -{76,8,67}, -{76,8,68}, -{76,8,69}, -{76,8,70}, -{76,8,71}, -{76,8,72}, -{76,8,73}, -{76,8,74}, -{76,8,75}, -{76,8,76}, -{76,8,77}, -{76,8,78}, -{76,9,-36}, -{76,9,-35}, -{76,9,-34}, -{76,9,-33}, -{76,9,-32}, -{76,9,-31}, -{76,9,-30}, -{76,9,-29}, -{76,9,-28}, -{76,9,-27}, -{76,9,-26}, -{76,9,-25}, -{76,9,-24}, -{76,9,-23}, -{76,9,-22}, -{76,9,-21}, -{76,9,-20}, -{76,9,-19}, -{76,9,-18}, -{76,9,-17}, -{76,9,-16}, -{76,9,-15}, -{76,9,-14}, -{76,9,-13}, -{76,9,-12}, -{76,9,-11}, -{76,9,-10}, -{76,9,-9}, -{76,9,-8}, -{76,9,-7}, -{76,9,-6}, -{76,9,-5}, -{76,9,-4}, -{76,9,-3}, -{76,9,-2}, -{76,9,-1}, -{76,9,0}, -{76,9,1}, -{76,9,2}, -{76,9,3}, -{76,9,4}, -{76,9,5}, -{76,9,6}, -{76,9,7}, -{76,9,8}, -{76,9,9}, -{76,9,10}, -{76,9,11}, -{76,9,12}, -{76,9,13}, -{76,9,14}, -{76,9,15}, -{76,9,16}, -{76,9,17}, -{76,9,18}, -{76,9,19}, -{76,9,20}, -{76,9,21}, -{76,9,22}, -{76,9,23}, -{76,9,24}, -{76,9,25}, -{76,9,26}, -{76,9,27}, -{76,9,28}, -{76,9,29}, -{76,9,30}, -{76,9,31}, -{76,9,32}, -{76,9,33}, -{76,9,34}, -{76,9,35}, -{76,9,36}, -{76,9,37}, -{76,9,38}, -{76,9,39}, -{76,9,40}, -{76,9,41}, -{76,9,42}, -{76,9,43}, -{76,9,44}, -{76,9,45}, -{76,9,46}, -{76,9,47}, -{76,9,48}, -{76,9,49}, -{76,9,50}, -{76,9,51}, -{76,9,52}, -{76,9,53}, -{76,9,54}, -{76,9,55}, -{76,9,56}, -{76,9,57}, -{76,9,58}, -{76,9,59}, -{76,9,60}, -{76,9,61}, -{76,9,62}, -{76,9,63}, -{76,9,64}, -{76,9,65}, -{76,9,66}, -{76,9,67}, -{76,9,68}, -{76,9,69}, -{76,9,70}, -{76,9,71}, -{76,9,72}, -{76,9,73}, -{76,9,74}, -{76,9,75}, -{76,9,76}, -{76,9,77}, -{76,9,78}, -{76,10,-36}, -{76,10,-35}, -{76,10,-34}, -{76,10,-33}, -{76,10,-32}, -{76,10,-31}, -{76,10,-30}, -{76,10,-29}, -{76,10,-28}, -{76,10,-27}, -{76,10,-26}, -{76,10,-25}, -{76,10,-24}, -{76,10,-23}, -{76,10,-22}, -{76,10,-21}, -{76,10,-20}, -{76,10,-19}, -{76,10,-18}, -{76,10,-17}, -{76,10,-16}, -{76,10,-15}, -{76,10,-14}, -{76,10,-13}, -{76,10,-12}, -{76,10,-11}, -{76,10,-10}, -{76,10,-9}, -{76,10,-8}, -{76,10,-7}, -{76,10,-6}, -{76,10,-5}, -{76,10,-4}, -{76,10,-3}, -{76,10,-2}, -{76,10,-1}, -{76,10,0}, -{76,10,1}, -{76,10,2}, -{76,10,3}, -{76,10,4}, -{76,10,5}, -{76,10,6}, -{76,10,7}, -{76,10,8}, -{76,10,9}, -{76,10,10}, -{76,10,11}, -{76,10,12}, -{76,10,13}, -{76,10,14}, -{76,10,15}, -{76,10,16}, -{76,10,17}, -{76,10,18}, -{76,10,19}, -{76,10,20}, -{76,10,21}, -{76,10,22}, -{76,10,23}, -{76,10,24}, -{76,10,25}, -{76,10,26}, -{76,10,27}, -{76,10,28}, -{76,10,29}, -{76,10,30}, -{76,10,31}, -{76,10,32}, -{76,10,33}, -{76,10,34}, -{76,10,35}, -{76,10,36}, -{76,10,37}, -{76,10,38}, -{76,10,39}, -{76,10,40}, -{76,10,41}, -{76,10,42}, -{76,10,43}, -{76,10,44}, -{76,10,45}, -{76,10,46}, -{76,10,47}, -{76,10,48}, -{76,10,49}, -{76,10,50}, -{76,10,51}, -{76,10,52}, -{76,10,53}, -{76,10,54}, -{76,10,55}, -{76,10,56}, -{76,10,57}, -{76,10,58}, -{76,10,59}, -{76,10,60}, -{76,10,61}, -{76,10,62}, -{76,10,63}, -{76,10,64}, -{76,10,65}, -{76,10,66}, -{76,10,67}, -{76,10,68}, -{76,10,69}, -{76,10,70}, -{76,10,71}, -{76,10,72}, -{76,10,73}, -{76,10,74}, -{76,10,75}, -{76,10,76}, -{76,10,77}, -{76,10,78}, -{76,11,-36}, -{76,11,-35}, -{76,11,-34}, -{76,11,-33}, -{76,11,-32}, -{76,11,-31}, -{76,11,-30}, -{76,11,-29}, -{76,11,-28}, -{76,11,-27}, -{76,11,-26}, -{76,11,-25}, -{76,11,-24}, -{76,11,-23}, -{76,11,-22}, -{76,11,-21}, -{76,11,-20}, -{76,11,-19}, -{76,11,-18}, -{76,11,-17}, -{76,11,-16}, -{76,11,-15}, -{76,11,-14}, -{76,11,-13}, -{76,11,-12}, -{76,11,-11}, -{76,11,-10}, -{76,11,-9}, -{76,11,-8}, -{76,11,-7}, -{76,11,-6}, -{76,11,-5}, -{76,11,-4}, -{76,11,-3}, -{76,11,-2}, -{76,11,-1}, -{76,11,0}, -{76,11,1}, -{76,11,2}, -{76,11,3}, -{76,11,4}, -{76,11,5}, -{76,11,6}, -{76,11,7}, -{76,11,8}, -{76,11,9}, -{76,11,10}, -{76,11,11}, -{76,11,12}, -{76,11,13}, -{76,11,14}, -{76,11,15}, -{76,11,16}, -{76,11,17}, -{76,11,18}, -{76,11,19}, -{76,11,20}, -{76,11,21}, -{76,11,22}, -{76,11,23}, -{76,11,24}, -{76,11,25}, -{76,11,26}, -{76,11,27}, -{76,11,28}, -{76,11,29}, -{76,11,30}, -{76,11,31}, -{76,11,32}, -{76,11,33}, -{76,11,34}, -{76,11,35}, -{76,11,36}, -{76,11,37}, -{76,11,38}, -{76,11,39}, -{76,11,40}, -{76,11,41}, -{76,11,42}, -{76,11,43}, -{76,11,44}, -{76,11,45}, -{76,11,46}, -{76,11,47}, -{76,11,48}, -{76,11,49}, -{76,11,50}, -{76,11,51}, -{76,11,52}, -{76,11,53}, -{76,11,54}, -{76,11,55}, -{76,11,56}, -{76,11,57}, -{76,11,58}, -{76,11,59}, -{76,11,60}, -{76,11,61}, -{76,11,62}, -{76,11,63}, -{76,11,64}, -{76,11,65}, -{76,11,66}, -{76,11,67}, -{76,11,68}, -{76,11,69}, -{76,11,70}, -{76,11,71}, -{76,11,72}, -{76,11,73}, -{76,11,74}, -{76,11,75}, -{76,11,76}, -{76,11,77}, -{76,11,78}, -{76,11,79}, -{76,12,-36}, -{76,12,-35}, -{76,12,-34}, -{76,12,-33}, -{76,12,-32}, -{76,12,-31}, -{76,12,-30}, -{76,12,-29}, -{76,12,-28}, -{76,12,-27}, -{76,12,-26}, -{76,12,-25}, -{76,12,-24}, -{76,12,-23}, -{76,12,-22}, -{76,12,-21}, -{76,12,-20}, -{76,12,-19}, -{76,12,-18}, -{76,12,-17}, -{76,12,-16}, -{76,12,-15}, -{76,12,-14}, -{76,12,-13}, -{76,12,-12}, -{76,12,-11}, -{76,12,-10}, -{76,12,-9}, -{76,12,-8}, -{76,12,-7}, -{76,12,-6}, -{76,12,-5}, -{76,12,-4}, -{76,12,-3}, -{76,12,-2}, -{76,12,-1}, -{76,12,0}, -{76,12,1}, -{76,12,2}, -{76,12,3}, -{76,12,4}, -{76,12,5}, -{76,12,6}, -{76,12,7}, -{76,12,8}, -{76,12,9}, -{76,12,10}, -{76,12,11}, -{76,12,12}, -{76,12,13}, -{76,12,14}, -{76,12,15}, -{76,12,16}, -{76,12,17}, -{76,12,18}, -{76,12,19}, -{76,12,20}, -{76,12,21}, -{76,12,22}, -{76,12,23}, -{76,12,24}, -{76,12,25}, -{76,12,26}, -{76,12,27}, -{76,12,28}, -{76,12,29}, -{76,12,30}, -{76,12,31}, -{76,12,32}, -{76,12,33}, -{76,12,34}, -{76,12,35}, -{76,12,36}, -{76,12,37}, -{76,12,38}, -{76,12,39}, -{76,12,40}, -{76,12,41}, -{76,12,42}, -{76,12,43}, -{76,12,44}, -{76,12,45}, -{76,12,46}, -{76,12,47}, -{76,12,48}, -{76,12,49}, -{76,12,50}, -{76,12,51}, -{76,12,52}, -{76,12,53}, -{76,12,54}, -{76,12,55}, -{76,12,56}, -{76,12,57}, -{76,12,58}, -{76,12,59}, -{76,12,60}, -{76,12,61}, -{76,12,62}, -{76,12,63}, -{76,12,64}, -{76,12,65}, -{76,12,66}, -{76,12,67}, -{76,12,68}, -{76,12,69}, -{76,12,70}, -{76,12,71}, -{76,12,72}, -{76,12,73}, -{76,12,74}, -{76,12,75}, -{76,12,76}, -{76,12,77}, -{76,12,78}, -{76,12,79}, -{76,13,-36}, -{76,13,-35}, -{76,13,-34}, -{76,13,-33}, -{76,13,-32}, -{76,13,-31}, -{76,13,-30}, -{76,13,-29}, -{76,13,-28}, -{76,13,-27}, -{76,13,-26}, -{76,13,-25}, -{76,13,-24}, -{76,13,-23}, -{76,13,-22}, -{76,13,-21}, -{76,13,-20}, -{76,13,-19}, -{76,13,-18}, -{76,13,-17}, -{76,13,-16}, -{76,13,-15}, -{76,13,-14}, -{76,13,-13}, -{76,13,-12}, -{76,13,-11}, -{76,13,-10}, -{76,13,-9}, -{76,13,-8}, -{76,13,-7}, -{76,13,-6}, -{76,13,-5}, -{76,13,-4}, -{76,13,-3}, -{76,13,-2}, -{76,13,-1}, -{76,13,0}, -{76,13,1}, -{76,13,2}, -{76,13,3}, -{76,13,4}, -{76,13,5}, -{76,13,6}, -{76,13,7}, -{76,13,8}, -{76,13,9}, -{76,13,10}, -{76,13,11}, -{76,13,12}, -{76,13,13}, -{76,13,14}, -{76,13,15}, -{76,13,16}, -{76,13,17}, -{76,13,18}, -{76,13,19}, -{76,13,20}, -{76,13,21}, -{76,13,22}, -{76,13,23}, -{76,13,24}, -{76,13,25}, -{76,13,26}, -{76,13,27}, -{76,13,28}, -{76,13,29}, -{76,13,30}, -{76,13,31}, -{76,13,32}, -{76,13,33}, -{76,13,34}, -{76,13,35}, -{76,13,36}, -{76,13,37}, -{76,13,38}, -{76,13,39}, -{76,13,40}, -{76,13,41}, -{76,13,42}, -{76,13,43}, -{76,13,44}, -{76,13,45}, -{76,13,46}, -{76,13,47}, -{76,13,48}, -{76,13,49}, -{76,13,50}, -{76,13,51}, -{76,13,52}, -{76,13,53}, -{76,13,54}, -{76,13,55}, -{76,13,56}, -{76,13,57}, -{76,13,58}, -{76,13,59}, -{76,13,60}, -{76,13,61}, -{76,13,62}, -{76,13,63}, -{76,13,64}, -{76,13,65}, -{76,13,66}, -{76,13,67}, -{76,13,68}, -{76,13,69}, -{76,13,70}, -{76,13,71}, -{76,13,72}, -{76,13,73}, -{76,13,74}, -{76,13,75}, -{76,13,76}, -{76,13,77}, -{76,13,78}, -{76,13,79}, -{76,14,-36}, -{76,14,-35}, -{76,14,-34}, -{76,14,-33}, -{76,14,-32}, -{76,14,-31}, -{76,14,-30}, -{76,14,-29}, -{76,14,-28}, -{76,14,-27}, -{76,14,-26}, -{76,14,-25}, -{76,14,-24}, -{76,14,-23}, -{76,14,-22}, -{76,14,-21}, -{76,14,-20}, -{76,14,-19}, -{76,14,-18}, -{76,14,-17}, -{76,14,-16}, -{76,14,-15}, -{76,14,-14}, -{76,14,-13}, -{76,14,-12}, -{76,14,-11}, -{76,14,-10}, -{76,14,-9}, -{76,14,-8}, -{76,14,-7}, -{76,14,-6}, -{76,14,-5}, -{76,14,-4}, -{76,14,-3}, -{76,14,-2}, -{76,14,-1}, -{76,14,0}, -{76,14,1}, -{76,14,2}, -{76,14,3}, -{76,14,4}, -{76,14,5}, -{76,14,6}, -{76,14,7}, -{76,14,8}, -{76,14,9}, -{76,14,10}, -{76,14,11}, -{76,14,12}, -{76,14,13}, -{76,14,14}, -{76,14,15}, -{76,14,16}, -{76,14,17}, -{76,14,18}, -{76,14,19}, -{76,14,20}, -{76,14,21}, -{76,14,22}, -{76,14,23}, -{76,14,24}, -{76,14,25}, -{76,14,26}, -{76,14,27}, -{76,14,28}, -{76,14,29}, -{76,14,30}, -{76,14,31}, -{76,14,32}, -{76,14,33}, -{76,14,34}, -{76,14,35}, -{76,14,36}, -{76,14,37}, -{76,14,38}, -{76,14,39}, -{76,14,40}, -{76,14,41}, -{76,14,42}, -{76,14,43}, -{76,14,44}, -{76,14,45}, -{76,14,46}, -{76,14,47}, -{76,14,48}, -{76,14,49}, -{76,14,50}, -{76,14,51}, -{76,14,52}, -{76,14,53}, -{76,14,54}, -{76,14,55}, -{76,14,56}, -{76,14,57}, -{76,14,58}, -{76,14,59}, -{76,14,60}, -{76,14,61}, -{76,14,62}, -{76,14,63}, -{76,14,64}, -{76,14,65}, -{76,14,66}, -{76,14,67}, -{76,14,68}, -{76,14,69}, -{76,14,70}, -{76,14,71}, -{76,14,72}, -{76,14,73}, -{76,14,74}, -{76,14,75}, -{76,14,76}, -{76,14,77}, -{76,14,78}, -{76,14,79}, -{76,15,-36}, -{76,15,-35}, -{76,15,-34}, -{76,15,-33}, -{76,15,-32}, -{76,15,-31}, -{76,15,-30}, -{76,15,-29}, -{76,15,-28}, -{76,15,-27}, -{76,15,-26}, -{76,15,-25}, -{76,15,-24}, -{76,15,-23}, -{76,15,-22}, -{76,15,-21}, -{76,15,-20}, -{76,15,-19}, -{76,15,-18}, -{76,15,-17}, -{76,15,-16}, -{76,15,-15}, -{76,15,-14}, -{76,15,-13}, -{76,15,-12}, -{76,15,-11}, -{76,15,-10}, -{76,15,-9}, -{76,15,-8}, -{76,15,-7}, -{76,15,-6}, -{76,15,-5}, -{76,15,-4}, -{76,15,-3}, -{76,15,-2}, -{76,15,-1}, -{76,15,0}, -{76,15,1}, -{76,15,2}, -{76,15,3}, -{76,15,4}, -{76,15,5}, -{76,15,6}, -{76,15,7}, -{76,15,8}, -{76,15,9}, -{76,15,10}, -{76,15,11}, -{76,15,12}, -{76,15,13}, -{76,15,14}, -{76,15,15}, -{76,15,16}, -{76,15,17}, -{76,15,18}, -{76,15,19}, -{76,15,20}, -{76,15,21}, -{76,15,22}, -{76,15,23}, -{76,15,24}, -{76,15,25}, -{76,15,26}, -{76,15,27}, -{76,15,28}, -{76,15,29}, -{76,15,30}, -{76,15,31}, -{76,15,32}, -{76,15,33}, -{76,15,34}, -{76,15,35}, -{76,15,36}, -{76,15,37}, -{76,15,38}, -{76,15,39}, -{76,15,40}, -{76,15,41}, -{76,15,42}, -{76,15,43}, -{76,15,44}, -{76,15,45}, -{76,15,46}, -{76,15,47}, -{76,15,48}, -{76,15,49}, -{76,15,50}, -{76,15,51}, -{76,15,52}, -{76,15,53}, -{76,15,54}, -{76,15,55}, -{76,15,56}, -{76,15,57}, -{76,15,58}, -{76,15,59}, -{76,15,60}, -{76,15,61}, -{76,15,62}, -{76,15,63}, -{76,15,64}, -{76,15,65}, -{76,15,66}, -{76,15,67}, -{76,15,68}, -{76,15,69}, -{76,15,70}, -{76,15,71}, -{76,15,72}, -{76,15,73}, -{76,15,74}, -{76,15,75}, -{76,15,76}, -{76,15,77}, -{76,15,78}, -{76,15,79}, -{76,16,-36}, -{76,16,-35}, -{76,16,-34}, -{76,16,-33}, -{76,16,-32}, -{76,16,-31}, -{76,16,-30}, -{76,16,-29}, -{76,16,-28}, -{76,16,-27}, -{76,16,-26}, -{76,16,-25}, -{76,16,-24}, -{76,16,-23}, -{76,16,-22}, -{76,16,-21}, -{76,16,-20}, -{76,16,-19}, -{76,16,-18}, -{76,16,-17}, -{76,16,-16}, -{76,16,-15}, -{76,16,-14}, -{76,16,-13}, -{76,16,-12}, -{76,16,-11}, -{76,16,-10}, -{76,16,-9}, -{76,16,-8}, -{76,16,-7}, -{76,16,-6}, -{76,16,-5}, -{76,16,-4}, -{76,16,-3}, -{76,16,-2}, -{76,16,-1}, -{76,16,0}, -{76,16,1}, -{76,16,2}, -{76,16,3}, -{76,16,4}, -{76,16,5}, -{76,16,6}, -{76,16,7}, -{76,16,8}, -{76,16,9}, -{76,16,10}, -{76,16,11}, -{76,16,12}, -{76,16,13}, -{76,16,14}, -{76,16,15}, -{76,16,16}, -{76,16,17}, -{76,16,18}, -{76,16,19}, -{76,16,20}, -{76,16,21}, -{76,16,22}, -{76,16,23}, -{76,16,24}, -{76,16,25}, -{76,16,26}, -{76,16,27}, -{76,16,28}, -{76,16,29}, -{76,16,30}, -{76,16,31}, -{76,16,32}, -{76,16,33}, -{76,16,34}, -{76,16,35}, -{76,16,36}, -{76,16,37}, -{76,16,38}, -{76,16,39}, -{76,16,40}, -{76,16,41}, -{76,16,42}, -{76,16,43}, -{76,16,44}, -{76,16,45}, -{76,16,46}, -{76,16,47}, -{76,16,48}, -{76,16,49}, -{76,16,50}, -{76,16,51}, -{76,16,52}, -{76,16,53}, -{76,16,54}, -{76,16,55}, -{76,16,56}, -{76,16,57}, -{76,16,58}, -{76,16,59}, -{76,16,60}, -{76,16,61}, -{76,16,62}, -{76,16,63}, -{76,16,64}, -{76,16,65}, -{76,16,66}, -{76,16,67}, -{76,16,68}, -{76,16,69}, -{76,16,70}, -{76,16,71}, -{76,16,72}, -{76,16,73}, -{76,16,74}, -{76,16,75}, -{76,16,76}, -{76,16,77}, -{76,16,78}, -{76,16,79}, -{76,17,-36}, -{76,17,-35}, -{76,17,-34}, -{76,17,-33}, -{76,17,-32}, -{76,17,-31}, -{76,17,-30}, -{76,17,-29}, -{76,17,-28}, -{76,17,-27}, -{76,17,-26}, -{76,17,-25}, -{76,17,-24}, -{76,17,-23}, -{76,17,-22}, -{76,17,-21}, -{76,17,-20}, -{76,17,-19}, -{76,17,-18}, -{76,17,-17}, -{76,17,-16}, -{76,17,-15}, -{76,17,-14}, -{76,17,-13}, -{76,17,-12}, -{76,17,-11}, -{76,17,-10}, -{76,17,-9}, -{76,17,-8}, -{76,17,-7}, -{76,17,-6}, -{76,17,-5}, -{76,17,-4}, -{76,17,-3}, -{76,17,-2}, -{76,17,-1}, -{76,17,0}, -{76,17,1}, -{76,17,2}, -{76,17,3}, -{76,17,4}, -{76,17,5}, -{76,17,6}, -{76,17,7}, -{76,17,8}, -{76,17,9}, -{76,17,10}, -{76,17,11}, -{76,17,12}, -{76,17,13}, -{76,17,14}, -{76,17,15}, -{76,17,16}, -{76,17,17}, -{76,17,18}, -{76,17,19}, -{76,17,20}, -{76,17,21}, -{76,17,22}, -{76,17,23}, -{76,17,24}, -{76,17,25}, -{76,17,26}, -{76,17,27}, -{76,17,28}, -{76,17,29}, -{76,17,30}, -{76,17,31}, -{76,17,32}, -{76,17,33}, -{76,17,34}, -{76,17,35}, -{76,17,36}, -{76,17,37}, -{76,17,38}, -{76,17,39}, -{76,17,40}, -{76,17,41}, -{76,17,42}, -{76,17,43}, -{76,17,44}, -{76,17,45}, -{76,17,46}, -{76,17,47}, -{76,17,48}, -{76,17,49}, -{76,17,50}, -{76,17,51}, -{76,17,52}, -{76,17,53}, -{76,17,54}, -{76,17,55}, -{76,17,56}, -{76,17,57}, -{76,17,58}, -{76,17,59}, -{76,17,60}, -{76,17,61}, -{76,17,62}, -{76,17,63}, -{76,17,64}, -{76,17,65}, -{76,17,66}, -{76,17,67}, -{76,17,68}, -{76,17,69}, -{76,17,70}, -{76,17,71}, -{76,17,72}, -{76,17,73}, -{76,17,74}, -{76,17,75}, -{76,17,76}, -{76,17,77}, -{76,17,78}, -{76,17,79}, -{76,18,-36}, -{76,18,-35}, -{76,18,-34}, -{76,18,-33}, -{76,18,-32}, -{76,18,-31}, -{76,18,-30}, -{76,18,-29}, -{76,18,-28}, -{76,18,-27}, -{76,18,-26}, -{76,18,-25}, -{76,18,-24}, -{76,18,-23}, -{76,18,-22}, -{76,18,-21}, -{76,18,-20}, -{76,18,-19}, -{76,18,-18}, -{76,18,-17}, -{76,18,-16}, -{76,18,-15}, -{76,18,-14}, -{76,18,-13}, -{76,18,-12}, -{76,18,-11}, -{76,18,-10}, -{76,18,-9}, -{76,18,-8}, -{76,18,-7}, -{76,18,-6}, -{76,18,-5}, -{76,18,-4}, -{76,18,-3}, -{76,18,-2}, -{76,18,-1}, -{76,18,0}, -{76,18,1}, -{76,18,2}, -{76,18,3}, -{76,18,4}, -{76,18,5}, -{76,18,6}, -{76,18,7}, -{76,18,8}, -{76,18,9}, -{76,18,10}, -{76,18,11}, -{76,18,12}, -{76,18,13}, -{76,18,14}, -{76,18,15}, -{76,18,16}, -{76,18,17}, -{76,18,18}, -{76,18,19}, -{76,18,20}, -{76,18,21}, -{76,18,22}, -{76,18,23}, -{76,18,24}, -{76,18,25}, -{76,18,26}, -{76,18,27}, -{76,18,28}, -{76,18,29}, -{76,18,30}, -{76,18,31}, -{76,18,32}, -{76,18,33}, -{76,18,34}, -{76,18,35}, -{76,18,36}, -{76,18,37}, -{76,18,38}, -{76,18,39}, -{76,18,40}, -{76,18,41}, -{76,18,42}, -{76,18,43}, -{76,18,44}, -{76,18,45}, -{76,18,46}, -{76,18,47}, -{76,18,48}, -{76,18,49}, -{76,18,50}, -{76,18,51}, -{76,18,52}, -{76,18,53}, -{76,18,54}, -{76,18,55}, -{76,18,56}, -{76,18,57}, -{76,18,58}, -{76,18,59}, -{76,18,60}, -{76,18,61}, -{76,18,62}, -{76,18,63}, -{76,18,64}, -{76,18,65}, -{76,18,66}, -{76,18,67}, -{76,18,68}, -{76,18,69}, -{76,18,70}, -{76,18,71}, -{76,18,72}, -{76,18,73}, -{76,18,74}, -{76,18,75}, -{76,18,76}, -{76,18,77}, -{76,18,78}, -{76,18,79}, -{76,19,-36}, -{76,19,-35}, -{76,19,-34}, -{76,19,-33}, -{76,19,-32}, -{76,19,-31}, -{76,19,-30}, -{76,19,-29}, -{76,19,-28}, -{76,19,-27}, -{76,19,-26}, -{76,19,-25}, -{76,19,-24}, -{76,19,-23}, -{76,19,-22}, -{76,19,-21}, -{76,19,-20}, -{76,19,-19}, -{76,19,-18}, -{76,19,-17}, -{76,19,-16}, -{76,19,-15}, -{76,19,-14}, -{76,19,-13}, -{76,19,-12}, -{76,19,-11}, -{76,19,-10}, -{76,19,-9}, -{76,19,-8}, -{76,19,-7}, -{76,19,-6}, -{76,19,-5}, -{76,19,-4}, -{76,19,-3}, -{76,19,-2}, -{76,19,-1}, -{76,19,0}, -{76,19,1}, -{76,19,2}, -{76,19,3}, -{76,19,4}, -{76,19,5}, -{76,19,6}, -{76,19,7}, -{76,19,8}, -{76,19,9}, -{76,19,10}, -{76,19,11}, -{76,19,12}, -{76,19,13}, -{76,19,14}, -{76,19,15}, -{76,19,16}, -{76,19,17}, -{76,19,18}, -{76,19,19}, -{76,19,20}, -{76,19,21}, -{76,19,22}, -{76,19,23}, -{76,19,24}, -{76,19,25}, -{76,19,26}, -{76,19,27}, -{76,19,28}, -{76,19,29}, -{76,19,30}, -{76,19,31}, -{76,19,32}, -{76,19,33}, -{76,19,34}, -{76,19,35}, -{76,19,36}, -{76,19,37}, -{76,19,38}, -{76,19,39}, -{76,19,40}, -{76,19,41}, -{76,19,42}, -{76,19,43}, -{76,19,44}, -{76,19,45}, -{76,19,46}, -{76,19,47}, -{76,19,48}, -{76,19,49}, -{76,19,50}, -{76,19,51}, -{76,19,52}, -{76,19,53}, -{76,19,54}, -{76,19,55}, -{76,19,56}, -{76,19,57}, -{76,19,58}, -{76,19,59}, -{76,19,60}, -{76,19,61}, -{76,19,62}, -{76,19,63}, -{76,19,64}, -{76,19,65}, -{76,19,66}, -{76,19,67}, -{76,19,68}, -{76,19,69}, -{76,19,70}, -{76,19,71}, -{76,19,72}, -{76,19,73}, -{76,19,74}, -{76,19,75}, -{76,19,76}, -{76,19,77}, -{76,19,78}, -{76,19,79}, -{76,20,-36}, -{76,20,-35}, -{76,20,-34}, -{76,20,-33}, -{76,20,-32}, -{76,20,-31}, -{76,20,-30}, -{76,20,-29}, -{76,20,-28}, -{76,20,-27}, -{76,20,-26}, -{76,20,-25}, -{76,20,-24}, -{76,20,-23}, -{76,20,-22}, -{76,20,-21}, -{76,20,-20}, -{76,20,-19}, -{76,20,-18}, -{76,20,-17}, -{76,20,-16}, -{76,20,-15}, -{76,20,-14}, -{76,20,-13}, -{76,20,-12}, -{76,20,-11}, -{76,20,-10}, -{76,20,-9}, -{76,20,-8}, -{76,20,-7}, -{76,20,-6}, -{76,20,-5}, -{76,20,-4}, -{76,20,-3}, -{76,20,-2}, -{76,20,-1}, -{76,20,0}, -{76,20,1}, -{76,20,2}, -{76,20,3}, -{76,20,4}, -{76,20,5}, -{76,20,6}, -{76,20,7}, -{76,20,8}, -{76,20,9}, -{76,20,10}, -{76,20,11}, -{76,20,12}, -{76,20,13}, -{76,20,14}, -{76,20,15}, -{76,20,16}, -{76,20,17}, -{76,20,18}, -{76,20,19}, -{76,20,20}, -{76,20,21}, -{76,20,22}, -{76,20,23}, -{76,20,24}, -{76,20,25}, -{76,20,26}, -{76,20,27}, -{76,20,28}, -{76,20,29}, -{76,20,30}, -{76,20,31}, -{76,20,32}, -{76,20,33}, -{76,20,34}, -{76,20,35}, -{76,20,36}, -{76,20,37}, -{76,20,38}, -{76,20,39}, -{76,20,40}, -{76,20,41}, -{76,20,42}, -{76,20,43}, -{76,20,44}, -{76,20,45}, -{76,20,46}, -{76,20,47}, -{76,20,48}, -{76,20,49}, -{76,20,50}, -{76,20,51}, -{76,20,52}, -{76,20,53}, -{76,20,54}, -{76,20,55}, -{76,20,56}, -{76,20,57}, -{76,20,58}, -{76,20,59}, -{76,20,60}, -{76,20,61}, -{76,20,62}, -{76,20,63}, -{76,20,64}, -{76,20,65}, -{76,20,66}, -{76,20,67}, -{76,20,68}, -{76,20,69}, -{76,20,70}, -{76,20,71}, -{76,20,72}, -{76,20,73}, -{76,20,74}, -{76,20,75}, -{76,20,76}, -{76,20,77}, -{76,20,78}, -{76,20,79}, -{76,21,-36}, -{76,21,-35}, -{76,21,-34}, -{76,21,-33}, -{76,21,-32}, -{76,21,-31}, -{76,21,-30}, -{76,21,-29}, -{76,21,-28}, -{76,21,-27}, -{76,21,-26}, -{76,21,-25}, -{76,21,-24}, -{76,21,-23}, -{76,21,-22}, -{76,21,-21}, -{76,21,-20}, -{76,21,-19}, -{76,21,-18}, -{76,21,-17}, -{76,21,-16}, -{76,21,-15}, -{76,21,-14}, -{76,21,-13}, -{76,21,-12}, -{76,21,-11}, -{76,21,-10}, -{76,21,-9}, -{76,21,-8}, -{76,21,-7}, -{76,21,-6}, -{76,21,-5}, -{76,21,-4}, -{76,21,-3}, -{76,21,-2}, -{76,21,-1}, -{76,21,0}, -{76,21,1}, -{76,21,2}, -{76,21,3}, -{76,21,4}, -{76,21,5}, -{76,21,6}, -{76,21,7}, -{76,21,8}, -{76,21,9}, -{76,21,10}, -{76,21,11}, -{76,21,12}, -{76,21,13}, -{76,21,14}, -{76,21,15}, -{76,21,16}, -{76,21,17}, -{76,21,18}, -{76,21,19}, -{76,21,20}, -{76,21,21}, -{76,21,22}, -{76,21,23}, -{76,21,24}, -{76,21,25}, -{76,21,26}, -{76,21,27}, -{76,21,28}, -{76,21,29}, -{76,21,30}, -{76,21,31}, -{76,21,32}, -{76,21,33}, -{76,21,34}, -{76,21,35}, -{76,21,36}, -{76,21,37}, -{76,21,38}, -{76,21,39}, -{76,21,40}, -{76,21,41}, -{76,21,42}, -{76,21,43}, -{76,21,44}, -{76,21,45}, -{76,21,46}, -{76,21,47}, -{76,21,48}, -{76,21,49}, -{76,21,50}, -{76,21,51}, -{76,21,52}, -{76,21,53}, -{76,21,54}, -{76,21,55}, -{76,21,56}, -{76,21,57}, -{76,21,58}, -{76,21,59}, -{76,21,60}, -{76,21,61}, -{76,21,62}, -{76,21,63}, -{76,21,64}, -{76,21,65}, -{76,21,66}, -{76,21,67}, -{76,21,68}, -{76,21,69}, -{76,21,70}, -{76,21,71}, -{76,21,72}, -{76,21,73}, -{76,21,74}, -{76,21,75}, -{76,21,76}, -{76,21,77}, -{76,21,78}, -{76,21,79}, -{76,22,-36}, -{76,22,-35}, -{76,22,-34}, -{76,22,-33}, -{76,22,-32}, -{76,22,-31}, -{76,22,-30}, -{76,22,-29}, -{76,22,-28}, -{76,22,-27}, -{76,22,-26}, -{76,22,-25}, -{76,22,-24}, -{76,22,-23}, -{76,22,-22}, -{76,22,-21}, -{76,22,-20}, -{76,22,-19}, -{76,22,-18}, -{76,22,-17}, -{76,22,-16}, -{76,22,-15}, -{76,22,-14}, -{76,22,-13}, -{76,22,-12}, -{76,22,-11}, -{76,22,-10}, -{76,22,-9}, -{76,22,-8}, -{76,22,-7}, -{76,22,-6}, -{76,22,-5}, -{76,22,-4}, -{76,22,-3}, -{76,22,-2}, -{76,22,-1}, -{76,22,0}, -{76,22,1}, -{76,22,2}, -{76,22,3}, -{76,22,4}, -{76,22,5}, -{76,22,6}, -{76,22,7}, -{76,22,8}, -{76,22,9}, -{76,22,10}, -{76,22,11}, -{76,22,12}, -{76,22,13}, -{76,22,14}, -{76,22,15}, -{76,22,16}, -{76,22,17}, -{76,22,18}, -{76,22,19}, -{76,22,20}, -{76,22,21}, -{76,22,22}, -{76,22,23}, -{76,22,24}, -{76,22,25}, -{76,22,26}, -{76,22,27}, -{76,22,28}, -{76,22,29}, -{76,22,30}, -{76,22,31}, -{76,22,32}, -{76,22,33}, -{76,22,34}, -{76,22,35}, -{76,22,36}, -{76,22,37}, -{76,22,38}, -{76,22,39}, -{76,22,40}, -{76,22,41}, -{76,22,42}, -{76,22,43}, -{76,22,44}, -{76,22,45}, -{76,22,46}, -{76,22,47}, -{76,22,48}, -{76,22,49}, -{76,22,50}, -{76,22,51}, -{76,22,52}, -{76,22,53}, -{76,22,54}, -{76,22,55}, -{76,22,56}, -{76,22,57}, -{76,22,58}, -{76,22,59}, -{76,22,60}, -{76,22,61}, -{76,22,62}, -{76,22,63}, -{76,22,64}, -{76,22,65}, -{76,22,66}, -{76,22,67}, -{76,22,68}, -{76,22,69}, -{76,22,70}, -{76,22,71}, -{76,22,72}, -{76,22,73}, -{76,22,74}, -{76,22,75}, -{76,22,76}, -{76,23,-36}, -{76,23,-35}, -{76,23,-34}, -{76,23,-33}, -{76,23,-32}, -{76,23,-31}, -{76,23,-30}, -{76,23,-29}, -{76,23,-28}, -{76,23,-27}, -{76,23,-26}, -{76,23,-25}, -{76,23,-24}, -{76,23,-23}, -{76,23,-22}, -{76,23,-21}, -{76,23,-20}, -{76,23,-19}, -{76,23,-18}, -{76,23,-17}, -{76,23,-16}, -{76,23,-15}, -{76,23,-14}, -{76,23,-13}, -{76,23,-12}, -{76,23,-11}, -{76,23,-10}, -{76,23,-9}, -{76,23,-8}, -{76,23,-7}, -{76,23,-6}, -{76,23,-5}, -{76,23,-4}, -{76,23,-3}, -{76,23,-2}, -{76,23,-1}, -{76,23,0}, -{76,23,1}, -{76,23,2}, -{76,23,3}, -{76,23,4}, -{76,23,5}, -{76,23,6}, -{76,23,7}, -{76,23,8}, -{76,23,9}, -{76,23,10}, -{76,23,11}, -{76,23,12}, -{76,23,13}, -{76,23,14}, -{76,23,15}, -{76,23,16}, -{76,23,17}, -{76,23,18}, -{76,23,19}, -{76,23,20}, -{76,23,21}, -{76,23,22}, -{76,23,23}, -{76,23,24}, -{76,23,25}, -{76,23,26}, -{76,23,27}, -{76,23,28}, -{76,23,29}, -{76,23,30}, -{76,23,31}, -{76,23,32}, -{76,23,33}, -{76,23,34}, -{76,23,35}, -{76,23,36}, -{76,23,37}, -{76,23,38}, -{76,23,39}, -{76,23,40}, -{76,23,41}, -{76,23,42}, -{76,23,43}, -{76,23,44}, -{76,23,45}, -{76,23,46}, -{76,23,47}, -{76,23,48}, -{76,23,49}, -{76,23,50}, -{76,23,51}, -{76,23,52}, -{76,23,53}, -{76,23,54}, -{76,23,55}, -{76,23,56}, -{76,23,57}, -{76,23,58}, -{76,23,59}, -{76,23,60}, -{76,23,61}, -{76,23,62}, -{76,23,63}, -{76,23,64}, -{76,23,65}, -{76,23,66}, -{76,23,67}, -{76,23,68}, -{76,24,-36}, -{76,24,-35}, -{76,24,-34}, -{76,24,-33}, -{76,24,-32}, -{76,24,-31}, -{76,24,-30}, -{76,24,-29}, -{76,24,-28}, -{76,24,-27}, -{76,24,-26}, -{76,24,-25}, -{76,24,-24}, -{76,24,-23}, -{76,24,-22}, -{76,24,-21}, -{76,24,-20}, -{76,24,-19}, -{76,24,-18}, -{76,24,-17}, -{76,24,-16}, -{76,24,-15}, -{76,24,-14}, -{76,24,-13}, -{76,24,-12}, -{76,24,-11}, -{76,24,-10}, -{76,24,-9}, -{76,24,-8}, -{76,24,-7}, -{76,24,-6}, -{76,24,-5}, -{76,24,-4}, -{76,24,-3}, -{76,24,-2}, -{76,24,-1}, -{76,24,0}, -{76,24,1}, -{76,24,2}, -{76,24,3}, -{76,24,4}, -{76,24,5}, -{76,24,6}, -{76,24,7}, -{76,24,8}, -{76,24,9}, -{76,24,10}, -{76,24,11}, -{76,24,12}, -{76,24,13}, -{76,24,14}, -{76,24,15}, -{76,24,16}, -{76,24,17}, -{76,24,18}, -{76,24,19}, -{76,24,20}, -{76,24,21}, -{76,24,22}, -{76,24,23}, -{76,24,24}, -{76,24,25}, -{76,24,26}, -{76,24,27}, -{76,24,28}, -{76,24,29}, -{76,24,30}, -{76,24,31}, -{76,24,32}, -{76,24,33}, -{76,24,34}, -{76,24,35}, -{76,24,36}, -{76,24,37}, -{76,24,38}, -{76,24,39}, -{76,24,40}, -{76,24,41}, -{76,24,42}, -{76,24,43}, -{76,24,44}, -{76,24,45}, -{76,24,46}, -{76,24,47}, -{76,24,48}, -{76,24,49}, -{76,24,50}, -{76,24,51}, -{76,24,52}, -{76,24,53}, -{76,24,54}, -{76,24,55}, -{76,24,56}, -{76,24,57}, -{76,24,58}, -{76,24,59}, -{76,24,60}, -{76,25,-36}, -{76,25,-35}, -{76,25,-34}, -{76,25,-33}, -{76,25,-32}, -{76,25,-31}, -{76,25,-30}, -{76,25,-29}, -{76,25,-28}, -{76,25,-27}, -{76,25,-26}, -{76,25,-25}, -{76,25,-24}, -{76,25,-23}, -{76,25,-22}, -{76,25,-21}, -{76,25,-20}, -{76,25,-19}, -{76,25,-18}, -{76,25,-17}, -{76,25,-16}, -{76,25,-15}, -{76,25,-14}, -{76,25,-13}, -{76,25,-12}, -{76,25,-11}, -{76,25,-10}, -{76,25,-9}, -{76,25,-8}, -{76,25,-7}, -{76,25,-6}, -{76,25,-5}, -{76,25,-4}, -{76,25,-3}, -{76,25,-2}, -{76,25,-1}, -{76,25,0}, -{76,25,1}, -{76,25,2}, -{76,25,3}, -{76,25,4}, -{76,25,5}, -{76,25,6}, -{76,25,7}, -{76,25,8}, -{76,25,9}, -{76,25,10}, -{76,25,11}, -{76,25,12}, -{76,25,13}, -{76,25,14}, -{76,25,15}, -{76,25,16}, -{76,25,17}, -{76,25,18}, -{76,25,19}, -{76,25,20}, -{76,25,21}, -{76,25,22}, -{76,25,23}, -{76,25,24}, -{76,25,25}, -{76,25,26}, -{76,25,27}, -{76,25,28}, -{76,25,29}, -{76,25,30}, -{76,25,31}, -{76,25,32}, -{76,25,33}, -{76,25,34}, -{76,25,35}, -{76,25,36}, -{76,25,37}, -{76,25,38}, -{76,25,39}, -{76,25,40}, -{76,25,41}, -{76,25,42}, -{76,25,43}, -{76,25,44}, -{76,25,45}, -{76,25,46}, -{76,25,47}, -{76,25,48}, -{76,25,49}, -{76,25,50}, -{76,25,51}, -{76,25,52}, -{76,25,53}, -{76,25,54}, -{76,26,-36}, -{76,26,-35}, -{76,26,-34}, -{76,26,-33}, -{76,26,-32}, -{76,26,-31}, -{76,26,-30}, -{76,26,-29}, -{76,26,-28}, -{76,26,-27}, -{76,26,-26}, -{76,26,-25}, -{76,26,-24}, -{76,26,-23}, -{76,26,-22}, -{76,26,-21}, -{76,26,-20}, -{76,26,-19}, -{76,26,-18}, -{76,26,-17}, -{76,26,-16}, -{76,26,-15}, -{76,26,-14}, -{76,26,-13}, -{76,26,-12}, -{76,26,-11}, -{76,26,-10}, -{76,26,-9}, -{76,26,-8}, -{76,26,-7}, -{76,26,-6}, -{76,26,-5}, -{76,26,-4}, -{76,26,-3}, -{76,26,-2}, -{76,26,-1}, -{76,26,0}, -{76,26,1}, -{76,26,2}, -{76,26,3}, -{76,26,4}, -{76,26,5}, -{76,26,6}, -{76,26,7}, -{76,26,8}, -{76,26,9}, -{76,26,10}, -{76,26,11}, -{76,26,12}, -{76,26,13}, -{76,26,14}, -{76,26,15}, -{76,26,16}, -{76,26,17}, -{76,26,18}, -{76,26,19}, -{76,26,20}, -{76,26,21}, -{76,26,22}, -{76,26,23}, -{76,26,24}, -{76,26,25}, -{76,26,26}, -{76,26,27}, -{76,26,28}, -{76,26,29}, -{76,26,30}, -{76,26,31}, -{76,26,32}, -{76,26,33}, -{76,26,34}, -{76,26,35}, -{76,26,36}, -{76,26,37}, -{76,26,38}, -{76,26,39}, -{76,26,40}, -{76,26,41}, -{76,26,42}, -{76,26,43}, -{76,26,44}, -{76,26,45}, -{76,26,46}, -{76,26,47}, -{76,26,48}, -{76,27,-36}, -{76,27,-35}, -{76,27,-34}, -{76,27,-33}, -{76,27,-32}, -{76,27,-31}, -{76,27,-30}, -{76,27,-29}, -{76,27,-28}, -{76,27,-27}, -{76,27,-26}, -{76,27,-25}, -{76,27,-24}, -{76,27,-23}, -{76,27,-22}, -{76,27,-21}, -{76,27,-20}, -{76,27,-19}, -{76,27,-18}, -{76,27,-17}, -{76,27,-16}, -{76,27,-15}, -{76,27,-14}, -{76,27,-13}, -{76,27,-12}, -{76,27,-11}, -{76,27,-10}, -{76,27,-9}, -{76,27,-8}, -{76,27,-7}, -{76,27,-6}, -{76,27,-5}, -{76,27,-4}, -{76,27,-3}, -{76,27,-2}, -{76,27,-1}, -{76,27,0}, -{76,27,1}, -{76,27,2}, -{76,27,3}, -{76,27,4}, -{76,27,5}, -{76,27,6}, -{76,27,7}, -{76,27,8}, -{76,27,9}, -{76,27,10}, -{76,27,11}, -{76,27,12}, -{76,27,13}, -{76,27,14}, -{76,27,15}, -{76,27,16}, -{76,27,17}, -{76,27,18}, -{76,27,19}, -{76,27,20}, -{76,27,21}, -{76,27,22}, -{76,27,23}, -{76,27,24}, -{76,27,25}, -{76,27,26}, -{76,27,27}, -{76,27,28}, -{76,27,29}, -{76,27,30}, -{76,27,31}, -{76,27,32}, -{76,27,33}, -{76,27,34}, -{76,27,35}, -{76,27,36}, -{76,27,37}, -{76,27,38}, -{76,27,39}, -{76,27,40}, -{76,27,41}, -{76,27,42}, -{76,27,43}, -{76,28,-36}, -{76,28,-35}, -{76,28,-34}, -{76,28,-33}, -{76,28,-32}, -{76,28,-31}, -{76,28,-30}, -{76,28,-29}, -{76,28,-28}, -{76,28,-27}, -{76,28,-26}, -{76,28,-25}, -{76,28,-24}, -{76,28,-23}, -{76,28,-22}, -{76,28,-21}, -{76,28,-20}, -{76,28,-19}, -{76,28,-18}, -{76,28,-17}, -{76,28,-16}, -{76,28,-15}, -{76,28,-14}, -{76,28,-13}, -{76,28,-12}, -{76,28,-11}, -{76,28,-10}, -{76,28,-9}, -{76,28,-8}, -{76,28,-7}, -{76,28,-6}, -{76,28,-5}, -{76,28,-4}, -{76,28,-3}, -{76,28,-2}, -{76,28,-1}, -{76,28,0}, -{76,28,1}, -{76,28,2}, -{76,28,3}, -{76,28,4}, -{76,28,5}, -{76,28,6}, -{76,28,7}, -{76,28,8}, -{76,28,9}, -{76,28,10}, -{76,28,11}, -{76,28,12}, -{76,28,13}, -{76,28,14}, -{76,28,15}, -{76,28,16}, -{76,28,17}, -{76,28,18}, -{76,28,19}, -{76,28,20}, -{76,28,21}, -{76,28,22}, -{76,28,23}, -{76,28,24}, -{76,28,25}, -{76,28,26}, -{76,28,27}, -{76,28,28}, -{76,28,29}, -{76,28,30}, -{76,28,31}, -{76,28,32}, -{76,28,33}, -{76,28,34}, -{76,28,35}, -{76,28,36}, -{76,28,37}, -{76,28,38}, -{76,28,39}, -{76,29,-36}, -{76,29,-35}, -{76,29,-34}, -{76,29,-33}, -{76,29,-32}, -{76,29,-31}, -{76,29,-30}, -{76,29,-29}, -{76,29,-28}, -{76,29,-27}, -{76,29,-26}, -{76,29,-25}, -{76,29,-24}, -{76,29,-23}, -{76,29,-22}, -{76,29,-21}, -{76,29,-20}, -{76,29,-19}, -{76,29,-18}, -{76,29,-17}, -{76,29,-16}, -{76,29,-15}, -{76,29,-14}, -{76,29,-13}, -{76,29,-12}, -{76,29,-11}, -{76,29,-10}, -{76,29,-9}, -{76,29,-8}, -{76,29,-7}, -{76,29,-6}, -{76,29,-5}, -{76,29,-4}, -{76,29,-3}, -{76,29,-2}, -{76,29,-1}, -{76,29,0}, -{76,29,1}, -{76,29,2}, -{76,29,3}, -{76,29,4}, -{76,29,5}, -{76,29,6}, -{76,29,7}, -{76,29,8}, -{76,29,9}, -{76,29,10}, -{76,29,11}, -{76,29,12}, -{76,29,13}, -{76,29,14}, -{76,29,15}, -{76,29,16}, -{76,29,17}, -{76,29,18}, -{76,29,19}, -{76,29,20}, -{76,29,21}, -{76,29,22}, -{76,29,23}, -{76,29,24}, -{76,29,25}, -{76,29,26}, -{76,29,27}, -{76,29,28}, -{76,29,29}, -{76,29,30}, -{76,29,31}, -{76,29,32}, -{76,29,33}, -{76,29,34}, -{76,30,-36}, -{76,30,-35}, -{76,30,-34}, -{76,30,-33}, -{76,30,-32}, -{76,30,-31}, -{76,30,-30}, -{76,30,-29}, -{76,30,-28}, -{76,30,-27}, -{76,30,-26}, -{76,30,-25}, -{76,30,-24}, -{76,30,-23}, -{76,30,-22}, -{76,30,-21}, -{76,30,-20}, -{76,30,-19}, -{76,30,-18}, -{76,30,-17}, -{76,30,-16}, -{76,30,-15}, -{76,30,-14}, -{76,30,-13}, -{76,30,-12}, -{76,30,-11}, -{76,30,-10}, -{76,30,-9}, -{76,30,-8}, -{76,30,-7}, -{76,30,-6}, -{76,30,-5}, -{76,30,-4}, -{76,30,-3}, -{76,30,-2}, -{76,30,-1}, -{76,30,0}, -{76,30,1}, -{76,30,2}, -{76,30,3}, -{76,30,4}, -{76,30,5}, -{76,30,6}, -{76,30,7}, -{76,30,8}, -{76,30,9}, -{76,30,10}, -{76,30,11}, -{76,30,12}, -{76,30,13}, -{76,30,14}, -{76,30,15}, -{76,30,16}, -{76,30,17}, -{76,30,18}, -{76,30,19}, -{76,30,20}, -{76,30,21}, -{76,30,22}, -{76,30,23}, -{76,30,24}, -{76,30,25}, -{76,30,26}, -{76,30,27}, -{76,30,28}, -{76,30,29}, -{76,30,30}, -{76,31,-36}, -{76,31,-35}, -{76,31,-34}, -{76,31,-33}, -{76,31,-32}, -{76,31,-31}, -{76,31,-30}, -{76,31,-29}, -{76,31,-28}, -{76,31,-27}, -{76,31,-26}, -{76,31,-25}, -{76,31,-24}, -{76,31,-23}, -{76,31,-22}, -{76,31,-21}, -{76,31,-20}, -{76,31,-19}, -{76,31,-18}, -{76,31,-17}, -{76,31,-16}, -{76,31,-15}, -{76,31,-14}, -{76,31,-13}, -{76,31,-12}, -{76,31,-11}, -{76,31,-10}, -{76,31,-9}, -{76,31,-8}, -{76,31,-7}, -{76,31,-6}, -{76,31,-5}, -{76,31,-4}, -{76,31,-3}, -{76,31,-2}, -{76,31,-1}, -{76,31,0}, -{76,31,1}, -{76,31,2}, -{76,31,3}, -{76,31,4}, -{76,31,5}, -{76,31,6}, -{76,31,7}, -{76,31,8}, -{76,31,9}, -{76,31,10}, -{76,31,11}, -{76,31,12}, -{76,31,13}, -{76,31,14}, -{76,31,15}, -{76,31,16}, -{76,31,17}, -{76,31,18}, -{76,31,19}, -{76,31,20}, -{76,31,21}, -{76,31,22}, -{76,31,23}, -{76,31,24}, -{76,31,25}, -{76,31,26}, -{76,32,-36}, -{76,32,-35}, -{76,32,-34}, -{76,32,-33}, -{76,32,-32}, -{76,32,-31}, -{76,32,-30}, -{76,32,-29}, -{76,32,-28}, -{76,32,-27}, -{76,32,-26}, -{76,32,-25}, -{76,32,-24}, -{76,32,-23}, -{76,32,-22}, -{76,32,-21}, -{76,32,-20}, -{76,32,-19}, -{76,32,-18}, -{76,32,-17}, -{76,32,-16}, -{76,32,-15}, -{76,32,-14}, -{76,32,-13}, -{76,32,-12}, -{76,32,-11}, -{76,32,-10}, -{76,32,-9}, -{76,32,-8}, -{76,32,-7}, -{76,32,-6}, -{76,32,-5}, -{76,32,-4}, -{76,32,-3}, -{76,32,-2}, -{76,32,-1}, -{76,32,0}, -{76,32,1}, -{76,32,2}, -{76,32,3}, -{76,32,4}, -{76,32,5}, -{76,32,6}, -{76,32,7}, -{76,32,8}, -{76,32,9}, -{76,32,10}, -{76,32,11}, -{76,32,12}, -{76,32,13}, -{76,32,14}, -{76,32,15}, -{76,32,16}, -{76,32,17}, -{76,32,18}, -{76,32,19}, -{76,32,20}, -{76,32,21}, -{76,32,22}, -{76,33,-36}, -{76,33,-35}, -{76,33,-34}, -{76,33,-33}, -{76,33,-32}, -{76,33,-31}, -{76,33,-30}, -{76,33,-29}, -{76,33,-28}, -{76,33,-27}, -{76,33,-26}, -{76,33,-25}, -{76,33,-24}, -{76,33,-23}, -{76,33,-22}, -{76,33,-21}, -{76,33,-20}, -{76,33,-19}, -{76,33,-18}, -{76,33,-17}, -{76,33,-16}, -{76,33,-15}, -{76,33,-14}, -{76,33,-13}, -{76,33,-12}, -{76,33,-11}, -{76,33,-10}, -{76,33,-9}, -{76,33,-8}, -{76,33,-7}, -{76,33,-6}, -{76,33,-5}, -{76,33,-4}, -{76,33,-3}, -{76,33,-2}, -{76,33,-1}, -{76,33,0}, -{76,33,1}, -{76,33,2}, -{76,33,3}, -{76,33,4}, -{76,33,5}, -{76,33,6}, -{76,33,7}, -{76,33,8}, -{76,33,9}, -{76,33,10}, -{76,33,11}, -{76,33,12}, -{76,33,13}, -{76,33,14}, -{76,33,15}, -{76,33,16}, -{76,33,17}, -{76,33,18}, -{76,33,19}, -{76,34,-36}, -{76,34,-35}, -{76,34,-34}, -{76,34,-33}, -{76,34,-32}, -{76,34,-31}, -{76,34,-30}, -{76,34,-29}, -{76,34,-28}, -{76,34,-27}, -{76,34,-26}, -{76,34,-25}, -{76,34,-24}, -{76,34,-23}, -{76,34,-22}, -{76,34,-21}, -{76,34,-20}, -{76,34,-19}, -{76,34,-18}, -{76,34,-17}, -{76,34,-16}, -{76,34,-15}, -{76,34,-14}, -{76,34,-13}, -{76,34,-12}, -{76,34,-11}, -{76,34,-10}, -{76,34,-9}, -{76,34,-8}, -{76,34,-7}, -{76,34,-6}, -{76,34,-5}, -{76,34,-4}, -{76,34,-3}, -{76,34,-2}, -{76,34,-1}, -{76,34,0}, -{76,34,1}, -{76,34,2}, -{76,34,3}, -{76,34,4}, -{76,34,5}, -{76,34,6}, -{76,34,7}, -{76,34,8}, -{76,34,9}, -{76,34,10}, -{76,34,11}, -{76,34,12}, -{76,34,13}, -{76,34,14}, -{76,34,15}, -{76,35,-36}, -{76,35,-35}, -{76,35,-34}, -{76,35,-33}, -{76,35,-32}, -{76,35,-31}, -{76,35,-30}, -{76,35,-29}, -{76,35,-28}, -{76,35,-27}, -{76,35,-26}, -{76,35,-25}, -{76,35,-24}, -{76,35,-23}, -{76,35,-22}, -{76,35,-21}, -{76,35,-20}, -{76,35,-19}, -{76,35,-18}, -{76,35,-17}, -{76,35,-16}, -{76,35,-15}, -{76,35,-14}, -{76,35,-13}, -{76,35,-12}, -{76,35,-11}, -{76,35,-10}, -{76,35,-9}, -{76,35,-8}, -{76,35,-7}, -{76,35,-6}, -{76,35,-5}, -{76,35,-4}, -{76,35,-3}, -{76,35,-2}, -{76,35,-1}, -{76,35,0}, -{76,35,1}, -{76,35,2}, -{76,35,3}, -{76,35,4}, -{76,35,5}, -{76,35,6}, -{76,35,7}, -{76,35,8}, -{76,35,9}, -{76,35,10}, -{76,35,11}, -{76,35,12}, -{76,36,-36}, -{76,36,-35}, -{76,36,-34}, -{76,36,-33}, -{76,36,-32}, -{76,36,-31}, -{76,36,-30}, -{76,36,-29}, -{76,36,-28}, -{76,36,-27}, -{76,36,-26}, -{76,36,-25}, -{76,36,-24}, -{76,36,-23}, -{76,36,-22}, -{76,36,-21}, -{76,36,-20}, -{76,36,-19}, -{76,36,-18}, -{76,36,-17}, -{76,36,-16}, -{76,36,-15}, -{76,36,-14}, -{76,36,-13}, -{76,36,-12}, -{76,36,-11}, -{76,36,-10}, -{76,36,-9}, -{76,36,-8}, -{76,36,-7}, -{76,36,-6}, -{76,36,-5}, -{76,36,-4}, -{76,36,-3}, -{76,36,-2}, -{76,36,-1}, -{76,36,0}, -{76,36,1}, -{76,36,2}, -{76,36,3}, -{76,36,4}, -{76,36,5}, -{76,36,6}, -{76,36,7}, -{76,36,8}, -{76,36,9}, -{76,37,-36}, -{76,37,-35}, -{76,37,-34}, -{76,37,-33}, -{76,37,-32}, -{76,37,-31}, -{76,37,-30}, -{76,37,-29}, -{76,37,-28}, -{76,37,-27}, -{76,37,-26}, -{76,37,-25}, -{76,37,-24}, -{76,37,-23}, -{76,37,-22}, -{76,37,-21}, -{76,37,-20}, -{76,37,-19}, -{76,37,-18}, -{76,37,-17}, -{76,37,-16}, -{76,37,-15}, -{76,37,-14}, -{76,37,-13}, -{76,37,-12}, -{76,37,-11}, -{76,37,-10}, -{76,37,-9}, -{76,37,-8}, -{76,37,-7}, -{76,37,-6}, -{76,37,-5}, -{76,37,-4}, -{76,37,-3}, -{76,37,-2}, -{76,37,-1}, -{76,37,0}, -{76,37,1}, -{76,37,2}, -{76,37,3}, -{76,37,4}, -{76,37,5}, -{76,37,6}, -{76,38,-36}, -{76,38,-35}, -{76,38,-34}, -{76,38,-33}, -{76,38,-32}, -{76,38,-31}, -{76,38,-30}, -{76,38,-29}, -{76,38,-28}, -{76,38,-27}, -{76,38,-26}, -{76,38,-25}, -{76,38,-24}, -{76,38,-23}, -{76,38,-22}, -{76,38,-21}, -{76,38,-20}, -{76,38,-19}, -{76,38,-18}, -{76,38,-17}, -{76,38,-16}, -{76,38,-15}, -{76,38,-14}, -{76,38,-13}, -{76,38,-12}, -{76,38,-11}, -{76,38,-10}, -{76,38,-9}, -{76,38,-8}, -{76,38,-7}, -{76,38,-6}, -{76,38,-5}, -{76,38,-4}, -{76,38,-3}, -{76,38,-2}, -{76,38,-1}, -{76,38,0}, -{76,38,1}, -{76,38,2}, -{76,38,3}, -{76,39,-36}, -{76,39,-35}, -{76,39,-34}, -{76,39,-33}, -{76,39,-32}, -{76,39,-31}, -{76,39,-30}, -{76,39,-29}, -{76,39,-28}, -{76,39,-27}, -{76,39,-26}, -{76,39,-25}, -{76,39,-24}, -{76,39,-23}, -{76,39,-22}, -{76,39,-21}, -{76,39,-20}, -{76,39,-19}, -{76,39,-18}, -{76,39,-17}, -{76,39,-16}, -{76,39,-15}, -{76,39,-14}, -{76,39,-13}, -{76,39,-12}, -{76,39,-11}, -{76,39,-10}, -{76,39,-9}, -{76,39,-8}, -{76,39,-7}, -{76,39,-6}, -{76,39,-5}, -{76,39,-4}, -{76,39,-3}, -{76,39,-2}, -{76,39,-1}, -{76,39,0}, -{76,40,-36}, -{76,40,-35}, -{76,40,-34}, -{76,40,-33}, -{76,40,-32}, -{76,40,-31}, -{76,40,-30}, -{76,40,-29}, -{76,40,-28}, -{76,40,-27}, -{76,40,-26}, -{76,40,-25}, -{76,40,-24}, -{76,40,-23}, -{76,40,-22}, -{76,40,-21}, -{76,40,-20}, -{76,40,-19}, -{76,40,-18}, -{76,40,-17}, -{76,40,-16}, -{76,40,-15}, -{76,40,-14}, -{76,40,-13}, -{76,40,-12}, -{76,40,-11}, -{76,40,-10}, -{76,40,-9}, -{76,40,-8}, -{76,40,-7}, -{76,40,-6}, -{76,40,-5}, -{76,40,-4}, -{76,40,-3}, -{76,40,-2}, -{76,41,-36}, -{76,41,-35}, -{76,41,-34}, -{76,41,-33}, -{76,41,-32}, -{76,41,-31}, -{76,41,-30}, -{76,41,-29}, -{76,41,-28}, -{76,41,-27}, -{76,41,-26}, -{76,41,-25}, -{76,41,-24}, -{76,41,-23}, -{76,41,-22}, -{76,41,-21}, -{76,41,-20}, -{76,41,-19}, -{76,41,-18}, -{76,41,-17}, -{76,41,-16}, -{76,41,-15}, -{76,41,-14}, -{76,41,-13}, -{76,41,-12}, -{76,41,-11}, -{76,41,-10}, -{76,41,-9}, -{76,41,-8}, -{76,41,-7}, -{76,41,-6}, -{76,41,-5}, -{76,42,-36}, -{76,42,-35}, -{76,42,-34}, -{76,42,-33}, -{76,42,-32}, -{76,42,-31}, -{76,42,-30}, -{76,42,-29}, -{76,42,-28}, -{76,42,-27}, -{76,42,-26}, -{76,42,-25}, -{76,42,-24}, -{76,42,-23}, -{76,42,-22}, -{76,42,-21}, -{76,42,-20}, -{76,42,-19}, -{76,42,-18}, -{76,42,-17}, -{76,42,-16}, -{76,42,-15}, -{76,42,-14}, -{76,42,-13}, -{76,42,-12}, -{76,42,-11}, -{76,42,-10}, -{76,42,-9}, -{76,42,-8}, -{76,43,-36}, -{76,43,-35}, -{76,43,-34}, -{76,43,-33}, -{76,43,-32}, -{76,43,-31}, -{76,43,-30}, -{76,43,-29}, -{76,43,-28}, -{76,43,-27}, -{76,43,-26}, -{76,43,-25}, -{76,43,-24}, -{76,43,-23}, -{76,43,-22}, -{76,43,-21}, -{76,43,-20}, -{76,43,-19}, -{76,43,-18}, -{76,43,-17}, -{76,43,-16}, -{76,43,-15}, -{76,43,-14}, -{76,43,-13}, -{76,43,-12}, -{76,43,-11}, -{76,43,-10}, -{76,44,-36}, -{76,44,-35}, -{76,44,-34}, -{76,44,-33}, -{76,44,-32}, -{76,44,-31}, -{76,44,-30}, -{76,44,-29}, -{76,44,-28}, -{76,44,-27}, -{76,44,-26}, -{76,44,-25}, -{76,44,-24}, -{76,44,-23}, -{76,44,-22}, -{76,44,-21}, -{76,44,-20}, -{76,44,-19}, -{76,44,-18}, -{76,44,-17}, -{76,44,-16}, -{76,44,-15}, -{76,44,-14}, -{76,44,-13}, -{76,45,-36}, -{76,45,-35}, -{76,45,-34}, -{76,45,-33}, -{76,45,-32}, -{76,45,-31}, -{76,45,-30}, -{76,45,-29}, -{76,45,-28}, -{76,45,-27}, -{76,45,-26}, -{76,45,-25}, -{76,45,-24}, -{76,45,-23}, -{76,45,-22}, -{76,45,-21}, -{76,45,-20}, -{76,45,-19}, -{76,45,-18}, -{76,45,-17}, -{76,45,-16}, -{76,45,-15}, -{76,46,-36}, -{76,46,-35}, -{76,46,-34}, -{76,46,-33}, -{76,46,-32}, -{76,46,-31}, -{76,46,-30}, -{76,46,-29}, -{76,46,-28}, -{76,46,-27}, -{76,46,-26}, -{76,46,-25}, -{76,46,-24}, -{76,46,-23}, -{76,46,-22}, -{76,46,-21}, -{76,46,-20}, -{76,46,-19}, -{76,46,-18}, -{76,46,-17}, -{76,47,-36}, -{76,47,-35}, -{76,47,-34}, -{76,47,-33}, -{76,47,-32}, -{76,47,-31}, -{76,47,-30}, -{76,47,-29}, -{76,47,-28}, -{76,47,-27}, -{76,47,-26}, -{76,47,-25}, -{76,47,-24}, -{76,47,-23}, -{76,47,-22}, -{76,47,-21}, -{76,47,-20}, -{76,48,-36}, -{76,48,-35}, -{76,48,-34}, -{76,48,-33}, -{76,48,-32}, -{76,48,-31}, -{76,48,-30}, -{76,48,-29}, -{76,48,-28}, -{76,48,-27}, -{76,48,-26}, -{76,48,-25}, -{76,48,-24}, -{76,48,-23}, -{76,48,-22}, -{76,49,-36}, -{76,49,-35}, -{76,49,-34}, -{76,49,-33}, -{76,49,-32}, -{76,49,-31}, -{76,49,-30}, -{76,49,-29}, -{76,49,-28}, -{76,49,-27}, -{76,49,-26}, -{76,49,-25}, -{76,49,-24}, -{76,50,-36}, -{76,50,-35}, -{76,50,-34}, -{76,50,-33}, -{76,50,-32}, -{76,50,-31}, -{76,50,-30}, -{76,50,-29}, -{76,50,-28}, -{76,50,-27}, -{76,50,-26}, -{76,51,-36}, -{76,51,-35}, -{76,51,-34}, -{76,51,-33}, -{76,51,-32}, -{76,51,-31}, -{76,51,-30}, -{76,51,-29}, -{76,51,-28}, -{76,52,-36}, -{76,52,-35}, -{76,52,-34}, -{76,52,-33}, -{76,52,-32}, -{76,52,-31}, -{76,52,-30}, -{76,53,-36}, -{76,53,-35}, -{76,53,-34}, -{76,53,-33}, -{76,53,-32}, -{76,54,-36}, -{76,54,-35}, -{76,54,-34}, -{76,55,-36}, -{77,-77,73}, -{77,-77,74}, -{77,-76,68}, -{77,-76,69}, -{77,-76,70}, -{77,-76,71}, -{77,-76,72}, -{77,-76,73}, -{77,-76,74}, -{77,-75,64}, -{77,-75,65}, -{77,-75,66}, -{77,-75,67}, -{77,-75,68}, -{77,-75,69}, -{77,-75,70}, -{77,-75,71}, -{77,-75,72}, -{77,-75,73}, -{77,-75,74}, -{77,-74,60}, -{77,-74,61}, -{77,-74,62}, -{77,-74,63}, -{77,-74,64}, -{77,-74,65}, -{77,-74,66}, -{77,-74,67}, -{77,-74,68}, -{77,-74,69}, -{77,-74,70}, -{77,-74,71}, -{77,-74,72}, -{77,-74,73}, -{77,-74,74}, -{77,-73,56}, -{77,-73,57}, -{77,-73,58}, -{77,-73,59}, -{77,-73,60}, -{77,-73,61}, -{77,-73,62}, -{77,-73,63}, -{77,-73,64}, -{77,-73,65}, -{77,-73,66}, -{77,-73,67}, -{77,-73,68}, -{77,-73,69}, -{77,-73,70}, -{77,-73,71}, -{77,-73,72}, -{77,-73,73}, -{77,-73,74}, -{77,-72,53}, -{77,-72,54}, -{77,-72,55}, -{77,-72,56}, -{77,-72,57}, -{77,-72,58}, -{77,-72,59}, -{77,-72,60}, -{77,-72,61}, -{77,-72,62}, -{77,-72,63}, -{77,-72,64}, -{77,-72,65}, -{77,-72,66}, -{77,-72,67}, -{77,-72,68}, -{77,-72,69}, -{77,-72,70}, -{77,-72,71}, -{77,-72,72}, -{77,-72,73}, -{77,-72,74}, -{77,-71,50}, -{77,-71,51}, -{77,-71,52}, -{77,-71,53}, -{77,-71,54}, -{77,-71,55}, -{77,-71,56}, -{77,-71,57}, -{77,-71,58}, -{77,-71,59}, -{77,-71,60}, -{77,-71,61}, -{77,-71,62}, -{77,-71,63}, -{77,-71,64}, -{77,-71,65}, -{77,-71,66}, -{77,-71,67}, -{77,-71,68}, -{77,-71,69}, -{77,-71,70}, -{77,-71,71}, -{77,-71,72}, -{77,-71,73}, -{77,-71,74}, -{77,-71,75}, -{77,-70,46}, -{77,-70,47}, -{77,-70,48}, -{77,-70,49}, -{77,-70,50}, -{77,-70,51}, -{77,-70,52}, -{77,-70,53}, -{77,-70,54}, -{77,-70,55}, -{77,-70,56}, -{77,-70,57}, -{77,-70,58}, -{77,-70,59}, -{77,-70,60}, -{77,-70,61}, -{77,-70,62}, -{77,-70,63}, -{77,-70,64}, -{77,-70,65}, -{77,-70,66}, -{77,-70,67}, -{77,-70,68}, -{77,-70,69}, -{77,-70,70}, -{77,-70,71}, -{77,-70,72}, -{77,-70,73}, -{77,-70,74}, -{77,-70,75}, -{77,-69,43}, -{77,-69,44}, -{77,-69,45}, -{77,-69,46}, -{77,-69,47}, -{77,-69,48}, -{77,-69,49}, -{77,-69,50}, -{77,-69,51}, -{77,-69,52}, -{77,-69,53}, -{77,-69,54}, -{77,-69,55}, -{77,-69,56}, -{77,-69,57}, -{77,-69,58}, -{77,-69,59}, -{77,-69,60}, -{77,-69,61}, -{77,-69,62}, -{77,-69,63}, -{77,-69,64}, -{77,-69,65}, -{77,-69,66}, -{77,-69,67}, -{77,-69,68}, -{77,-69,69}, -{77,-69,70}, -{77,-69,71}, -{77,-69,72}, -{77,-69,73}, -{77,-69,74}, -{77,-69,75}, -{77,-68,41}, -{77,-68,42}, -{77,-68,43}, -{77,-68,44}, -{77,-68,45}, -{77,-68,46}, -{77,-68,47}, -{77,-68,48}, -{77,-68,49}, -{77,-68,50}, -{77,-68,51}, -{77,-68,52}, -{77,-68,53}, -{77,-68,54}, -{77,-68,55}, -{77,-68,56}, -{77,-68,57}, -{77,-68,58}, -{77,-68,59}, -{77,-68,60}, -{77,-68,61}, -{77,-68,62}, -{77,-68,63}, -{77,-68,64}, -{77,-68,65}, -{77,-68,66}, -{77,-68,67}, -{77,-68,68}, -{77,-68,69}, -{77,-68,70}, -{77,-68,71}, -{77,-68,72}, -{77,-68,73}, -{77,-68,74}, -{77,-68,75}, -{77,-67,38}, -{77,-67,39}, -{77,-67,40}, -{77,-67,41}, -{77,-67,42}, -{77,-67,43}, -{77,-67,44}, -{77,-67,45}, -{77,-67,46}, -{77,-67,47}, -{77,-67,48}, -{77,-67,49}, -{77,-67,50}, -{77,-67,51}, -{77,-67,52}, -{77,-67,53}, -{77,-67,54}, -{77,-67,55}, -{77,-67,56}, -{77,-67,57}, -{77,-67,58}, -{77,-67,59}, -{77,-67,60}, -{77,-67,61}, -{77,-67,62}, -{77,-67,63}, -{77,-67,64}, -{77,-67,65}, -{77,-67,66}, -{77,-67,67}, -{77,-67,68}, -{77,-67,69}, -{77,-67,70}, -{77,-67,71}, -{77,-67,72}, -{77,-67,73}, -{77,-67,74}, -{77,-67,75}, -{77,-66,35}, -{77,-66,36}, -{77,-66,37}, -{77,-66,38}, -{77,-66,39}, -{77,-66,40}, -{77,-66,41}, -{77,-66,42}, -{77,-66,43}, -{77,-66,44}, -{77,-66,45}, -{77,-66,46}, -{77,-66,47}, -{77,-66,48}, -{77,-66,49}, -{77,-66,50}, -{77,-66,51}, -{77,-66,52}, -{77,-66,53}, -{77,-66,54}, -{77,-66,55}, -{77,-66,56}, -{77,-66,57}, -{77,-66,58}, -{77,-66,59}, -{77,-66,60}, -{77,-66,61}, -{77,-66,62}, -{77,-66,63}, -{77,-66,64}, -{77,-66,65}, -{77,-66,66}, -{77,-66,67}, -{77,-66,68}, -{77,-66,69}, -{77,-66,70}, -{77,-66,71}, -{77,-66,72}, -{77,-66,73}, -{77,-66,74}, -{77,-66,75}, -{77,-65,33}, -{77,-65,34}, -{77,-65,35}, -{77,-65,36}, -{77,-65,37}, -{77,-65,38}, -{77,-65,39}, -{77,-65,40}, -{77,-65,41}, -{77,-65,42}, -{77,-65,43}, -{77,-65,44}, -{77,-65,45}, -{77,-65,46}, -{77,-65,47}, -{77,-65,48}, -{77,-65,49}, -{77,-65,50}, -{77,-65,51}, -{77,-65,52}, -{77,-65,53}, -{77,-65,54}, -{77,-65,55}, -{77,-65,56}, -{77,-65,57}, -{77,-65,58}, -{77,-65,59}, -{77,-65,60}, -{77,-65,61}, -{77,-65,62}, -{77,-65,63}, -{77,-65,64}, -{77,-65,65}, -{77,-65,66}, -{77,-65,67}, -{77,-65,68}, -{77,-65,69}, -{77,-65,70}, -{77,-65,71}, -{77,-65,72}, -{77,-65,73}, -{77,-65,74}, -{77,-65,75}, -{77,-64,30}, -{77,-64,31}, -{77,-64,32}, -{77,-64,33}, -{77,-64,34}, -{77,-64,35}, -{77,-64,36}, -{77,-64,37}, -{77,-64,38}, -{77,-64,39}, -{77,-64,40}, -{77,-64,41}, -{77,-64,42}, -{77,-64,43}, -{77,-64,44}, -{77,-64,45}, -{77,-64,46}, -{77,-64,47}, -{77,-64,48}, -{77,-64,49}, -{77,-64,50}, -{77,-64,51}, -{77,-64,52}, -{77,-64,53}, -{77,-64,54}, -{77,-64,55}, -{77,-64,56}, -{77,-64,57}, -{77,-64,58}, -{77,-64,59}, -{77,-64,60}, -{77,-64,61}, -{77,-64,62}, -{77,-64,63}, -{77,-64,64}, -{77,-64,65}, -{77,-64,66}, -{77,-64,67}, -{77,-64,68}, -{77,-64,69}, -{77,-64,70}, -{77,-64,71}, -{77,-64,72}, -{77,-64,73}, -{77,-64,74}, -{77,-64,75}, -{77,-63,28}, -{77,-63,29}, -{77,-63,30}, -{77,-63,31}, -{77,-63,32}, -{77,-63,33}, -{77,-63,34}, -{77,-63,35}, -{77,-63,36}, -{77,-63,37}, -{77,-63,38}, -{77,-63,39}, -{77,-63,40}, -{77,-63,41}, -{77,-63,42}, -{77,-63,43}, -{77,-63,44}, -{77,-63,45}, -{77,-63,46}, -{77,-63,47}, -{77,-63,48}, -{77,-63,49}, -{77,-63,50}, -{77,-63,51}, -{77,-63,52}, -{77,-63,53}, -{77,-63,54}, -{77,-63,55}, -{77,-63,56}, -{77,-63,57}, -{77,-63,58}, -{77,-63,59}, -{77,-63,60}, -{77,-63,61}, -{77,-63,62}, -{77,-63,63}, -{77,-63,64}, -{77,-63,65}, -{77,-63,66}, -{77,-63,67}, -{77,-63,68}, -{77,-63,69}, -{77,-63,70}, -{77,-63,71}, -{77,-63,72}, -{77,-63,73}, -{77,-63,74}, -{77,-63,75}, -{77,-62,26}, -{77,-62,27}, -{77,-62,28}, -{77,-62,29}, -{77,-62,30}, -{77,-62,31}, -{77,-62,32}, -{77,-62,33}, -{77,-62,34}, -{77,-62,35}, -{77,-62,36}, -{77,-62,37}, -{77,-62,38}, -{77,-62,39}, -{77,-62,40}, -{77,-62,41}, -{77,-62,42}, -{77,-62,43}, -{77,-62,44}, -{77,-62,45}, -{77,-62,46}, -{77,-62,47}, -{77,-62,48}, -{77,-62,49}, -{77,-62,50}, -{77,-62,51}, -{77,-62,52}, -{77,-62,53}, -{77,-62,54}, -{77,-62,55}, -{77,-62,56}, -{77,-62,57}, -{77,-62,58}, -{77,-62,59}, -{77,-62,60}, -{77,-62,61}, -{77,-62,62}, -{77,-62,63}, -{77,-62,64}, -{77,-62,65}, -{77,-62,66}, -{77,-62,67}, -{77,-62,68}, -{77,-62,69}, -{77,-62,70}, -{77,-62,71}, -{77,-62,72}, -{77,-62,73}, -{77,-62,74}, -{77,-62,75}, -{77,-61,23}, -{77,-61,24}, -{77,-61,25}, -{77,-61,26}, -{77,-61,27}, -{77,-61,28}, -{77,-61,29}, -{77,-61,30}, -{77,-61,31}, -{77,-61,32}, -{77,-61,33}, -{77,-61,34}, -{77,-61,35}, -{77,-61,36}, -{77,-61,37}, -{77,-61,38}, -{77,-61,39}, -{77,-61,40}, -{77,-61,41}, -{77,-61,42}, -{77,-61,43}, -{77,-61,44}, -{77,-61,45}, -{77,-61,46}, -{77,-61,47}, -{77,-61,48}, -{77,-61,49}, -{77,-61,50}, -{77,-61,51}, -{77,-61,52}, -{77,-61,53}, -{77,-61,54}, -{77,-61,55}, -{77,-61,56}, -{77,-61,57}, -{77,-61,58}, -{77,-61,59}, -{77,-61,60}, -{77,-61,61}, -{77,-61,62}, -{77,-61,63}, -{77,-61,64}, -{77,-61,65}, -{77,-61,66}, -{77,-61,67}, -{77,-61,68}, -{77,-61,69}, -{77,-61,70}, -{77,-61,71}, -{77,-61,72}, -{77,-61,73}, -{77,-61,74}, -{77,-61,75}, -{77,-60,21}, -{77,-60,22}, -{77,-60,23}, -{77,-60,24}, -{77,-60,25}, -{77,-60,26}, -{77,-60,27}, -{77,-60,28}, -{77,-60,29}, -{77,-60,30}, -{77,-60,31}, -{77,-60,32}, -{77,-60,33}, -{77,-60,34}, -{77,-60,35}, -{77,-60,36}, -{77,-60,37}, -{77,-60,38}, -{77,-60,39}, -{77,-60,40}, -{77,-60,41}, -{77,-60,42}, -{77,-60,43}, -{77,-60,44}, -{77,-60,45}, -{77,-60,46}, -{77,-60,47}, -{77,-60,48}, -{77,-60,49}, -{77,-60,50}, -{77,-60,51}, -{77,-60,52}, -{77,-60,53}, -{77,-60,54}, -{77,-60,55}, -{77,-60,56}, -{77,-60,57}, -{77,-60,58}, -{77,-60,59}, -{77,-60,60}, -{77,-60,61}, -{77,-60,62}, -{77,-60,63}, -{77,-60,64}, -{77,-60,65}, -{77,-60,66}, -{77,-60,67}, -{77,-60,68}, -{77,-60,69}, -{77,-60,70}, -{77,-60,71}, -{77,-60,72}, -{77,-60,73}, -{77,-60,74}, -{77,-60,75}, -{77,-59,19}, -{77,-59,20}, -{77,-59,21}, -{77,-59,22}, -{77,-59,23}, -{77,-59,24}, -{77,-59,25}, -{77,-59,26}, -{77,-59,27}, -{77,-59,28}, -{77,-59,29}, -{77,-59,30}, -{77,-59,31}, -{77,-59,32}, -{77,-59,33}, -{77,-59,34}, -{77,-59,35}, -{77,-59,36}, -{77,-59,37}, -{77,-59,38}, -{77,-59,39}, -{77,-59,40}, -{77,-59,41}, -{77,-59,42}, -{77,-59,43}, -{77,-59,44}, -{77,-59,45}, -{77,-59,46}, -{77,-59,47}, -{77,-59,48}, -{77,-59,49}, -{77,-59,50}, -{77,-59,51}, -{77,-59,52}, -{77,-59,53}, -{77,-59,54}, -{77,-59,55}, -{77,-59,56}, -{77,-59,57}, -{77,-59,58}, -{77,-59,59}, -{77,-59,60}, -{77,-59,61}, -{77,-59,62}, -{77,-59,63}, -{77,-59,64}, -{77,-59,65}, -{77,-59,66}, -{77,-59,67}, -{77,-59,68}, -{77,-59,69}, -{77,-59,70}, -{77,-59,71}, -{77,-59,72}, -{77,-59,73}, -{77,-59,74}, -{77,-59,75}, -{77,-58,17}, -{77,-58,18}, -{77,-58,19}, -{77,-58,20}, -{77,-58,21}, -{77,-58,22}, -{77,-58,23}, -{77,-58,24}, -{77,-58,25}, -{77,-58,26}, -{77,-58,27}, -{77,-58,28}, -{77,-58,29}, -{77,-58,30}, -{77,-58,31}, -{77,-58,32}, -{77,-58,33}, -{77,-58,34}, -{77,-58,35}, -{77,-58,36}, -{77,-58,37}, -{77,-58,38}, -{77,-58,39}, -{77,-58,40}, -{77,-58,41}, -{77,-58,42}, -{77,-58,43}, -{77,-58,44}, -{77,-58,45}, -{77,-58,46}, -{77,-58,47}, -{77,-58,48}, -{77,-58,49}, -{77,-58,50}, -{77,-58,51}, -{77,-58,52}, -{77,-58,53}, -{77,-58,54}, -{77,-58,55}, -{77,-58,56}, -{77,-58,57}, -{77,-58,58}, -{77,-58,59}, -{77,-58,60}, -{77,-58,61}, -{77,-58,62}, -{77,-58,63}, -{77,-58,64}, -{77,-58,65}, -{77,-58,66}, -{77,-58,67}, -{77,-58,68}, -{77,-58,69}, -{77,-58,70}, -{77,-58,71}, -{77,-58,72}, -{77,-58,73}, -{77,-58,74}, -{77,-58,75}, -{77,-57,15}, -{77,-57,16}, -{77,-57,17}, -{77,-57,18}, -{77,-57,19}, -{77,-57,20}, -{77,-57,21}, -{77,-57,22}, -{77,-57,23}, -{77,-57,24}, -{77,-57,25}, -{77,-57,26}, -{77,-57,27}, -{77,-57,28}, -{77,-57,29}, -{77,-57,30}, -{77,-57,31}, -{77,-57,32}, -{77,-57,33}, -{77,-57,34}, -{77,-57,35}, -{77,-57,36}, -{77,-57,37}, -{77,-57,38}, -{77,-57,39}, -{77,-57,40}, -{77,-57,41}, -{77,-57,42}, -{77,-57,43}, -{77,-57,44}, -{77,-57,45}, -{77,-57,46}, -{77,-57,47}, -{77,-57,48}, -{77,-57,49}, -{77,-57,50}, -{77,-57,51}, -{77,-57,52}, -{77,-57,53}, -{77,-57,54}, -{77,-57,55}, -{77,-57,56}, -{77,-57,57}, -{77,-57,58}, -{77,-57,59}, -{77,-57,60}, -{77,-57,61}, -{77,-57,62}, -{77,-57,63}, -{77,-57,64}, -{77,-57,65}, -{77,-57,66}, -{77,-57,67}, -{77,-57,68}, -{77,-57,69}, -{77,-57,70}, -{77,-57,71}, -{77,-57,72}, -{77,-57,73}, -{77,-57,74}, -{77,-57,75}, -{77,-56,13}, -{77,-56,14}, -{77,-56,15}, -{77,-56,16}, -{77,-56,17}, -{77,-56,18}, -{77,-56,19}, -{77,-56,20}, -{77,-56,21}, -{77,-56,22}, -{77,-56,23}, -{77,-56,24}, -{77,-56,25}, -{77,-56,26}, -{77,-56,27}, -{77,-56,28}, -{77,-56,29}, -{77,-56,30}, -{77,-56,31}, -{77,-56,32}, -{77,-56,33}, -{77,-56,34}, -{77,-56,35}, -{77,-56,36}, -{77,-56,37}, -{77,-56,38}, -{77,-56,39}, -{77,-56,40}, -{77,-56,41}, -{77,-56,42}, -{77,-56,43}, -{77,-56,44}, -{77,-56,45}, -{77,-56,46}, -{77,-56,47}, -{77,-56,48}, -{77,-56,49}, -{77,-56,50}, -{77,-56,51}, -{77,-56,52}, -{77,-56,53}, -{77,-56,54}, -{77,-56,55}, -{77,-56,56}, -{77,-56,57}, -{77,-56,58}, -{77,-56,59}, -{77,-56,60}, -{77,-56,61}, -{77,-56,62}, -{77,-56,63}, -{77,-56,64}, -{77,-56,65}, -{77,-56,66}, -{77,-56,67}, -{77,-56,68}, -{77,-56,69}, -{77,-56,70}, -{77,-56,71}, -{77,-56,72}, -{77,-56,73}, -{77,-56,74}, -{77,-56,75}, -{77,-55,11}, -{77,-55,12}, -{77,-55,13}, -{77,-55,14}, -{77,-55,15}, -{77,-55,16}, -{77,-55,17}, -{77,-55,18}, -{77,-55,19}, -{77,-55,20}, -{77,-55,21}, -{77,-55,22}, -{77,-55,23}, -{77,-55,24}, -{77,-55,25}, -{77,-55,26}, -{77,-55,27}, -{77,-55,28}, -{77,-55,29}, -{77,-55,30}, -{77,-55,31}, -{77,-55,32}, -{77,-55,33}, -{77,-55,34}, -{77,-55,35}, -{77,-55,36}, -{77,-55,37}, -{77,-55,38}, -{77,-55,39}, -{77,-55,40}, -{77,-55,41}, -{77,-55,42}, -{77,-55,43}, -{77,-55,44}, -{77,-55,45}, -{77,-55,46}, -{77,-55,47}, -{77,-55,48}, -{77,-55,49}, -{77,-55,50}, -{77,-55,51}, -{77,-55,52}, -{77,-55,53}, -{77,-55,54}, -{77,-55,55}, -{77,-55,56}, -{77,-55,57}, -{77,-55,58}, -{77,-55,59}, -{77,-55,60}, -{77,-55,61}, -{77,-55,62}, -{77,-55,63}, -{77,-55,64}, -{77,-55,65}, -{77,-55,66}, -{77,-55,67}, -{77,-55,68}, -{77,-55,69}, -{77,-55,70}, -{77,-55,71}, -{77,-55,72}, -{77,-55,73}, -{77,-55,74}, -{77,-55,75}, -{77,-54,9}, -{77,-54,10}, -{77,-54,11}, -{77,-54,12}, -{77,-54,13}, -{77,-54,14}, -{77,-54,15}, -{77,-54,16}, -{77,-54,17}, -{77,-54,18}, -{77,-54,19}, -{77,-54,20}, -{77,-54,21}, -{77,-54,22}, -{77,-54,23}, -{77,-54,24}, -{77,-54,25}, -{77,-54,26}, -{77,-54,27}, -{77,-54,28}, -{77,-54,29}, -{77,-54,30}, -{77,-54,31}, -{77,-54,32}, -{77,-54,33}, -{77,-54,34}, -{77,-54,35}, -{77,-54,36}, -{77,-54,37}, -{77,-54,38}, -{77,-54,39}, -{77,-54,40}, -{77,-54,41}, -{77,-54,42}, -{77,-54,43}, -{77,-54,44}, -{77,-54,45}, -{77,-54,46}, -{77,-54,47}, -{77,-54,48}, -{77,-54,49}, -{77,-54,50}, -{77,-54,51}, -{77,-54,52}, -{77,-54,53}, -{77,-54,54}, -{77,-54,55}, -{77,-54,56}, -{77,-54,57}, -{77,-54,58}, -{77,-54,59}, -{77,-54,60}, -{77,-54,61}, -{77,-54,62}, -{77,-54,63}, -{77,-54,64}, -{77,-54,65}, -{77,-54,66}, -{77,-54,67}, -{77,-54,68}, -{77,-54,69}, -{77,-54,70}, -{77,-54,71}, -{77,-54,72}, -{77,-54,73}, -{77,-54,74}, -{77,-54,75}, -{77,-53,7}, -{77,-53,8}, -{77,-53,9}, -{77,-53,10}, -{77,-53,11}, -{77,-53,12}, -{77,-53,13}, -{77,-53,14}, -{77,-53,15}, -{77,-53,16}, -{77,-53,17}, -{77,-53,18}, -{77,-53,19}, -{77,-53,20}, -{77,-53,21}, -{77,-53,22}, -{77,-53,23}, -{77,-53,24}, -{77,-53,25}, -{77,-53,26}, -{77,-53,27}, -{77,-53,28}, -{77,-53,29}, -{77,-53,30}, -{77,-53,31}, -{77,-53,32}, -{77,-53,33}, -{77,-53,34}, -{77,-53,35}, -{77,-53,36}, -{77,-53,37}, -{77,-53,38}, -{77,-53,39}, -{77,-53,40}, -{77,-53,41}, -{77,-53,42}, -{77,-53,43}, -{77,-53,44}, -{77,-53,45}, -{77,-53,46}, -{77,-53,47}, -{77,-53,48}, -{77,-53,49}, -{77,-53,50}, -{77,-53,51}, -{77,-53,52}, -{77,-53,53}, -{77,-53,54}, -{77,-53,55}, -{77,-53,56}, -{77,-53,57}, -{77,-53,58}, -{77,-53,59}, -{77,-53,60}, -{77,-53,61}, -{77,-53,62}, -{77,-53,63}, -{77,-53,64}, -{77,-53,65}, -{77,-53,66}, -{77,-53,67}, -{77,-53,68}, -{77,-53,69}, -{77,-53,70}, -{77,-53,71}, -{77,-53,72}, -{77,-53,73}, -{77,-53,74}, -{77,-53,75}, -{77,-52,5}, -{77,-52,6}, -{77,-52,7}, -{77,-52,8}, -{77,-52,9}, -{77,-52,10}, -{77,-52,11}, -{77,-52,12}, -{77,-52,13}, -{77,-52,14}, -{77,-52,15}, -{77,-52,16}, -{77,-52,17}, -{77,-52,18}, -{77,-52,19}, -{77,-52,20}, -{77,-52,21}, -{77,-52,22}, -{77,-52,23}, -{77,-52,24}, -{77,-52,25}, -{77,-52,26}, -{77,-52,27}, -{77,-52,28}, -{77,-52,29}, -{77,-52,30}, -{77,-52,31}, -{77,-52,32}, -{77,-52,33}, -{77,-52,34}, -{77,-52,35}, -{77,-52,36}, -{77,-52,37}, -{77,-52,38}, -{77,-52,39}, -{77,-52,40}, -{77,-52,41}, -{77,-52,42}, -{77,-52,43}, -{77,-52,44}, -{77,-52,45}, -{77,-52,46}, -{77,-52,47}, -{77,-52,48}, -{77,-52,49}, -{77,-52,50}, -{77,-52,51}, -{77,-52,52}, -{77,-52,53}, -{77,-52,54}, -{77,-52,55}, -{77,-52,56}, -{77,-52,57}, -{77,-52,58}, -{77,-52,59}, -{77,-52,60}, -{77,-52,61}, -{77,-52,62}, -{77,-52,63}, -{77,-52,64}, -{77,-52,65}, -{77,-52,66}, -{77,-52,67}, -{77,-52,68}, -{77,-52,69}, -{77,-52,70}, -{77,-52,71}, -{77,-52,72}, -{77,-52,73}, -{77,-52,74}, -{77,-52,75}, -{77,-51,3}, -{77,-51,4}, -{77,-51,5}, -{77,-51,6}, -{77,-51,7}, -{77,-51,8}, -{77,-51,9}, -{77,-51,10}, -{77,-51,11}, -{77,-51,12}, -{77,-51,13}, -{77,-51,14}, -{77,-51,15}, -{77,-51,16}, -{77,-51,17}, -{77,-51,18}, -{77,-51,19}, -{77,-51,20}, -{77,-51,21}, -{77,-51,22}, -{77,-51,23}, -{77,-51,24}, -{77,-51,25}, -{77,-51,26}, -{77,-51,27}, -{77,-51,28}, -{77,-51,29}, -{77,-51,30}, -{77,-51,31}, -{77,-51,32}, -{77,-51,33}, -{77,-51,34}, -{77,-51,35}, -{77,-51,36}, -{77,-51,37}, -{77,-51,38}, -{77,-51,39}, -{77,-51,40}, -{77,-51,41}, -{77,-51,42}, -{77,-51,43}, -{77,-51,44}, -{77,-51,45}, -{77,-51,46}, -{77,-51,47}, -{77,-51,48}, -{77,-51,49}, -{77,-51,50}, -{77,-51,51}, -{77,-51,52}, -{77,-51,53}, -{77,-51,54}, -{77,-51,55}, -{77,-51,56}, -{77,-51,57}, -{77,-51,58}, -{77,-51,59}, -{77,-51,60}, -{77,-51,61}, -{77,-51,62}, -{77,-51,63}, -{77,-51,64}, -{77,-51,65}, -{77,-51,66}, -{77,-51,67}, -{77,-51,68}, -{77,-51,69}, -{77,-51,70}, -{77,-51,71}, -{77,-51,72}, -{77,-51,73}, -{77,-51,74}, -{77,-51,75}, -{77,-50,2}, -{77,-50,3}, -{77,-50,4}, -{77,-50,5}, -{77,-50,6}, -{77,-50,7}, -{77,-50,8}, -{77,-50,9}, -{77,-50,10}, -{77,-50,11}, -{77,-50,12}, -{77,-50,13}, -{77,-50,14}, -{77,-50,15}, -{77,-50,16}, -{77,-50,17}, -{77,-50,18}, -{77,-50,19}, -{77,-50,20}, -{77,-50,21}, -{77,-50,22}, -{77,-50,23}, -{77,-50,24}, -{77,-50,25}, -{77,-50,26}, -{77,-50,27}, -{77,-50,28}, -{77,-50,29}, -{77,-50,30}, -{77,-50,31}, -{77,-50,32}, -{77,-50,33}, -{77,-50,34}, -{77,-50,35}, -{77,-50,36}, -{77,-50,37}, -{77,-50,38}, -{77,-50,39}, -{77,-50,40}, -{77,-50,41}, -{77,-50,42}, -{77,-50,43}, -{77,-50,44}, -{77,-50,45}, -{77,-50,46}, -{77,-50,47}, -{77,-50,48}, -{77,-50,49}, -{77,-50,50}, -{77,-50,51}, -{77,-50,52}, -{77,-50,53}, -{77,-50,54}, -{77,-50,55}, -{77,-50,56}, -{77,-50,57}, -{77,-50,58}, -{77,-50,59}, -{77,-50,60}, -{77,-50,61}, -{77,-50,62}, -{77,-50,63}, -{77,-50,64}, -{77,-50,65}, -{77,-50,66}, -{77,-50,67}, -{77,-50,68}, -{77,-50,69}, -{77,-50,70}, -{77,-50,71}, -{77,-50,72}, -{77,-50,73}, -{77,-50,74}, -{77,-50,75}, -{77,-50,76}, -{77,-49,0}, -{77,-49,1}, -{77,-49,2}, -{77,-49,3}, -{77,-49,4}, -{77,-49,5}, -{77,-49,6}, -{77,-49,7}, -{77,-49,8}, -{77,-49,9}, -{77,-49,10}, -{77,-49,11}, -{77,-49,12}, -{77,-49,13}, -{77,-49,14}, -{77,-49,15}, -{77,-49,16}, -{77,-49,17}, -{77,-49,18}, -{77,-49,19}, -{77,-49,20}, -{77,-49,21}, -{77,-49,22}, -{77,-49,23}, -{77,-49,24}, -{77,-49,25}, -{77,-49,26}, -{77,-49,27}, -{77,-49,28}, -{77,-49,29}, -{77,-49,30}, -{77,-49,31}, -{77,-49,32}, -{77,-49,33}, -{77,-49,34}, -{77,-49,35}, -{77,-49,36}, -{77,-49,37}, -{77,-49,38}, -{77,-49,39}, -{77,-49,40}, -{77,-49,41}, -{77,-49,42}, -{77,-49,43}, -{77,-49,44}, -{77,-49,45}, -{77,-49,46}, -{77,-49,47}, -{77,-49,48}, -{77,-49,49}, -{77,-49,50}, -{77,-49,51}, -{77,-49,52}, -{77,-49,53}, -{77,-49,54}, -{77,-49,55}, -{77,-49,56}, -{77,-49,57}, -{77,-49,58}, -{77,-49,59}, -{77,-49,60}, -{77,-49,61}, -{77,-49,62}, -{77,-49,63}, -{77,-49,64}, -{77,-49,65}, -{77,-49,66}, -{77,-49,67}, -{77,-49,68}, -{77,-49,69}, -{77,-49,70}, -{77,-49,71}, -{77,-49,72}, -{77,-49,73}, -{77,-49,74}, -{77,-49,75}, -{77,-49,76}, -{77,-48,-2}, -{77,-48,-1}, -{77,-48,0}, -{77,-48,1}, -{77,-48,2}, -{77,-48,3}, -{77,-48,4}, -{77,-48,5}, -{77,-48,6}, -{77,-48,7}, -{77,-48,8}, -{77,-48,9}, -{77,-48,10}, -{77,-48,11}, -{77,-48,12}, -{77,-48,13}, -{77,-48,14}, -{77,-48,15}, -{77,-48,16}, -{77,-48,17}, -{77,-48,18}, -{77,-48,19}, -{77,-48,20}, -{77,-48,21}, -{77,-48,22}, -{77,-48,23}, -{77,-48,24}, -{77,-48,25}, -{77,-48,26}, -{77,-48,27}, -{77,-48,28}, -{77,-48,29}, -{77,-48,30}, -{77,-48,31}, -{77,-48,32}, -{77,-48,33}, -{77,-48,34}, -{77,-48,35}, -{77,-48,36}, -{77,-48,37}, -{77,-48,38}, -{77,-48,39}, -{77,-48,40}, -{77,-48,41}, -{77,-48,42}, -{77,-48,43}, -{77,-48,44}, -{77,-48,45}, -{77,-48,46}, -{77,-48,47}, -{77,-48,48}, -{77,-48,49}, -{77,-48,50}, -{77,-48,51}, -{77,-48,52}, -{77,-48,53}, -{77,-48,54}, -{77,-48,55}, -{77,-48,56}, -{77,-48,57}, -{77,-48,58}, -{77,-48,59}, -{77,-48,60}, -{77,-48,61}, -{77,-48,62}, -{77,-48,63}, -{77,-48,64}, -{77,-48,65}, -{77,-48,66}, -{77,-48,67}, -{77,-48,68}, -{77,-48,69}, -{77,-48,70}, -{77,-48,71}, -{77,-48,72}, -{77,-48,73}, -{77,-48,74}, -{77,-48,75}, -{77,-48,76}, -{77,-47,-4}, -{77,-47,-3}, -{77,-47,-2}, -{77,-47,-1}, -{77,-47,0}, -{77,-47,1}, -{77,-47,2}, -{77,-47,3}, -{77,-47,4}, -{77,-47,5}, -{77,-47,6}, -{77,-47,7}, -{77,-47,8}, -{77,-47,9}, -{77,-47,10}, -{77,-47,11}, -{77,-47,12}, -{77,-47,13}, -{77,-47,14}, -{77,-47,15}, -{77,-47,16}, -{77,-47,17}, -{77,-47,18}, -{77,-47,19}, -{77,-47,20}, -{77,-47,21}, -{77,-47,22}, -{77,-47,23}, -{77,-47,24}, -{77,-47,25}, -{77,-47,26}, -{77,-47,27}, -{77,-47,28}, -{77,-47,29}, -{77,-47,30}, -{77,-47,31}, -{77,-47,32}, -{77,-47,33}, -{77,-47,34}, -{77,-47,35}, -{77,-47,36}, -{77,-47,37}, -{77,-47,38}, -{77,-47,39}, -{77,-47,40}, -{77,-47,41}, -{77,-47,42}, -{77,-47,43}, -{77,-47,44}, -{77,-47,45}, -{77,-47,46}, -{77,-47,47}, -{77,-47,48}, -{77,-47,49}, -{77,-47,50}, -{77,-47,51}, -{77,-47,52}, -{77,-47,53}, -{77,-47,54}, -{77,-47,55}, -{77,-47,56}, -{77,-47,57}, -{77,-47,58}, -{77,-47,59}, -{77,-47,60}, -{77,-47,61}, -{77,-47,62}, -{77,-47,63}, -{77,-47,64}, -{77,-47,65}, -{77,-47,66}, -{77,-47,67}, -{77,-47,68}, -{77,-47,69}, -{77,-47,70}, -{77,-47,71}, -{77,-47,72}, -{77,-47,73}, -{77,-47,74}, -{77,-47,75}, -{77,-47,76}, -{77,-46,-5}, -{77,-46,-4}, -{77,-46,-3}, -{77,-46,-2}, -{77,-46,-1}, -{77,-46,0}, -{77,-46,1}, -{77,-46,2}, -{77,-46,3}, -{77,-46,4}, -{77,-46,5}, -{77,-46,6}, -{77,-46,7}, -{77,-46,8}, -{77,-46,9}, -{77,-46,10}, -{77,-46,11}, -{77,-46,12}, -{77,-46,13}, -{77,-46,14}, -{77,-46,15}, -{77,-46,16}, -{77,-46,17}, -{77,-46,18}, -{77,-46,19}, -{77,-46,20}, -{77,-46,21}, -{77,-46,22}, -{77,-46,23}, -{77,-46,24}, -{77,-46,25}, -{77,-46,26}, -{77,-46,27}, -{77,-46,28}, -{77,-46,29}, -{77,-46,30}, -{77,-46,31}, -{77,-46,32}, -{77,-46,33}, -{77,-46,34}, -{77,-46,35}, -{77,-46,36}, -{77,-46,37}, -{77,-46,38}, -{77,-46,39}, -{77,-46,40}, -{77,-46,41}, -{77,-46,42}, -{77,-46,43}, -{77,-46,44}, -{77,-46,45}, -{77,-46,46}, -{77,-46,47}, -{77,-46,48}, -{77,-46,49}, -{77,-46,50}, -{77,-46,51}, -{77,-46,52}, -{77,-46,53}, -{77,-46,54}, -{77,-46,55}, -{77,-46,56}, -{77,-46,57}, -{77,-46,58}, -{77,-46,59}, -{77,-46,60}, -{77,-46,61}, -{77,-46,62}, -{77,-46,63}, -{77,-46,64}, -{77,-46,65}, -{77,-46,66}, -{77,-46,67}, -{77,-46,68}, -{77,-46,69}, -{77,-46,70}, -{77,-46,71}, -{77,-46,72}, -{77,-46,73}, -{77,-46,74}, -{77,-46,75}, -{77,-46,76}, -{77,-45,-7}, -{77,-45,-6}, -{77,-45,-5}, -{77,-45,-4}, -{77,-45,-3}, -{77,-45,-2}, -{77,-45,-1}, -{77,-45,0}, -{77,-45,1}, -{77,-45,2}, -{77,-45,3}, -{77,-45,4}, -{77,-45,5}, -{77,-45,6}, -{77,-45,7}, -{77,-45,8}, -{77,-45,9}, -{77,-45,10}, -{77,-45,11}, -{77,-45,12}, -{77,-45,13}, -{77,-45,14}, -{77,-45,15}, -{77,-45,16}, -{77,-45,17}, -{77,-45,18}, -{77,-45,19}, -{77,-45,20}, -{77,-45,21}, -{77,-45,22}, -{77,-45,23}, -{77,-45,24}, -{77,-45,25}, -{77,-45,26}, -{77,-45,27}, -{77,-45,28}, -{77,-45,29}, -{77,-45,30}, -{77,-45,31}, -{77,-45,32}, -{77,-45,33}, -{77,-45,34}, -{77,-45,35}, -{77,-45,36}, -{77,-45,37}, -{77,-45,38}, -{77,-45,39}, -{77,-45,40}, -{77,-45,41}, -{77,-45,42}, -{77,-45,43}, -{77,-45,44}, -{77,-45,45}, -{77,-45,46}, -{77,-45,47}, -{77,-45,48}, -{77,-45,49}, -{77,-45,50}, -{77,-45,51}, -{77,-45,52}, -{77,-45,53}, -{77,-45,54}, -{77,-45,55}, -{77,-45,56}, -{77,-45,57}, -{77,-45,58}, -{77,-45,59}, -{77,-45,60}, -{77,-45,61}, -{77,-45,62}, -{77,-45,63}, -{77,-45,64}, -{77,-45,65}, -{77,-45,66}, -{77,-45,67}, -{77,-45,68}, -{77,-45,69}, -{77,-45,70}, -{77,-45,71}, -{77,-45,72}, -{77,-45,73}, -{77,-45,74}, -{77,-45,75}, -{77,-45,76}, -{77,-44,-8}, -{77,-44,-7}, -{77,-44,-6}, -{77,-44,-5}, -{77,-44,-4}, -{77,-44,-3}, -{77,-44,-2}, -{77,-44,-1}, -{77,-44,0}, -{77,-44,1}, -{77,-44,2}, -{77,-44,3}, -{77,-44,4}, -{77,-44,5}, -{77,-44,6}, -{77,-44,7}, -{77,-44,8}, -{77,-44,9}, -{77,-44,10}, -{77,-44,11}, -{77,-44,12}, -{77,-44,13}, -{77,-44,14}, -{77,-44,15}, -{77,-44,16}, -{77,-44,17}, -{77,-44,18}, -{77,-44,19}, -{77,-44,20}, -{77,-44,21}, -{77,-44,22}, -{77,-44,23}, -{77,-44,24}, -{77,-44,25}, -{77,-44,26}, -{77,-44,27}, -{77,-44,28}, -{77,-44,29}, -{77,-44,30}, -{77,-44,31}, -{77,-44,32}, -{77,-44,33}, -{77,-44,34}, -{77,-44,35}, -{77,-44,36}, -{77,-44,37}, -{77,-44,38}, -{77,-44,39}, -{77,-44,40}, -{77,-44,41}, -{77,-44,42}, -{77,-44,43}, -{77,-44,44}, -{77,-44,45}, -{77,-44,46}, -{77,-44,47}, -{77,-44,48}, -{77,-44,49}, -{77,-44,50}, -{77,-44,51}, -{77,-44,52}, -{77,-44,53}, -{77,-44,54}, -{77,-44,55}, -{77,-44,56}, -{77,-44,57}, -{77,-44,58}, -{77,-44,59}, -{77,-44,60}, -{77,-44,61}, -{77,-44,62}, -{77,-44,63}, -{77,-44,64}, -{77,-44,65}, -{77,-44,66}, -{77,-44,67}, -{77,-44,68}, -{77,-44,69}, -{77,-44,70}, -{77,-44,71}, -{77,-44,72}, -{77,-44,73}, -{77,-44,74}, -{77,-44,75}, -{77,-44,76}, -{77,-43,-10}, -{77,-43,-9}, -{77,-43,-8}, -{77,-43,-7}, -{77,-43,-6}, -{77,-43,-5}, -{77,-43,-4}, -{77,-43,-3}, -{77,-43,-2}, -{77,-43,-1}, -{77,-43,0}, -{77,-43,1}, -{77,-43,2}, -{77,-43,3}, -{77,-43,4}, -{77,-43,5}, -{77,-43,6}, -{77,-43,7}, -{77,-43,8}, -{77,-43,9}, -{77,-43,10}, -{77,-43,11}, -{77,-43,12}, -{77,-43,13}, -{77,-43,14}, -{77,-43,15}, -{77,-43,16}, -{77,-43,17}, -{77,-43,18}, -{77,-43,19}, -{77,-43,20}, -{77,-43,21}, -{77,-43,22}, -{77,-43,23}, -{77,-43,24}, -{77,-43,25}, -{77,-43,26}, -{77,-43,27}, -{77,-43,28}, -{77,-43,29}, -{77,-43,30}, -{77,-43,31}, -{77,-43,32}, -{77,-43,33}, -{77,-43,34}, -{77,-43,35}, -{77,-43,36}, -{77,-43,37}, -{77,-43,38}, -{77,-43,39}, -{77,-43,40}, -{77,-43,41}, -{77,-43,42}, -{77,-43,43}, -{77,-43,44}, -{77,-43,45}, -{77,-43,46}, -{77,-43,47}, -{77,-43,48}, -{77,-43,49}, -{77,-43,50}, -{77,-43,51}, -{77,-43,52}, -{77,-43,53}, -{77,-43,54}, -{77,-43,55}, -{77,-43,56}, -{77,-43,57}, -{77,-43,58}, -{77,-43,59}, -{77,-43,60}, -{77,-43,61}, -{77,-43,62}, -{77,-43,63}, -{77,-43,64}, -{77,-43,65}, -{77,-43,66}, -{77,-43,67}, -{77,-43,68}, -{77,-43,69}, -{77,-43,70}, -{77,-43,71}, -{77,-43,72}, -{77,-43,73}, -{77,-43,74}, -{77,-43,75}, -{77,-43,76}, -{77,-42,-12}, -{77,-42,-11}, -{77,-42,-10}, -{77,-42,-9}, -{77,-42,-8}, -{77,-42,-7}, -{77,-42,-6}, -{77,-42,-5}, -{77,-42,-4}, -{77,-42,-3}, -{77,-42,-2}, -{77,-42,-1}, -{77,-42,0}, -{77,-42,1}, -{77,-42,2}, -{77,-42,3}, -{77,-42,4}, -{77,-42,5}, -{77,-42,6}, -{77,-42,7}, -{77,-42,8}, -{77,-42,9}, -{77,-42,10}, -{77,-42,11}, -{77,-42,12}, -{77,-42,13}, -{77,-42,14}, -{77,-42,15}, -{77,-42,16}, -{77,-42,17}, -{77,-42,18}, -{77,-42,19}, -{77,-42,20}, -{77,-42,21}, -{77,-42,22}, -{77,-42,23}, -{77,-42,24}, -{77,-42,25}, -{77,-42,26}, -{77,-42,27}, -{77,-42,28}, -{77,-42,29}, -{77,-42,30}, -{77,-42,31}, -{77,-42,32}, -{77,-42,33}, -{77,-42,34}, -{77,-42,35}, -{77,-42,36}, -{77,-42,37}, -{77,-42,38}, -{77,-42,39}, -{77,-42,40}, -{77,-42,41}, -{77,-42,42}, -{77,-42,43}, -{77,-42,44}, -{77,-42,45}, -{77,-42,46}, -{77,-42,47}, -{77,-42,48}, -{77,-42,49}, -{77,-42,50}, -{77,-42,51}, -{77,-42,52}, -{77,-42,53}, -{77,-42,54}, -{77,-42,55}, -{77,-42,56}, -{77,-42,57}, -{77,-42,58}, -{77,-42,59}, -{77,-42,60}, -{77,-42,61}, -{77,-42,62}, -{77,-42,63}, -{77,-42,64}, -{77,-42,65}, -{77,-42,66}, -{77,-42,67}, -{77,-42,68}, -{77,-42,69}, -{77,-42,70}, -{77,-42,71}, -{77,-42,72}, -{77,-42,73}, -{77,-42,74}, -{77,-42,75}, -{77,-42,76}, -{77,-41,-13}, -{77,-41,-12}, -{77,-41,-11}, -{77,-41,-10}, -{77,-41,-9}, -{77,-41,-8}, -{77,-41,-7}, -{77,-41,-6}, -{77,-41,-5}, -{77,-41,-4}, -{77,-41,-3}, -{77,-41,-2}, -{77,-41,-1}, -{77,-41,0}, -{77,-41,1}, -{77,-41,2}, -{77,-41,3}, -{77,-41,4}, -{77,-41,5}, -{77,-41,6}, -{77,-41,7}, -{77,-41,8}, -{77,-41,9}, -{77,-41,10}, -{77,-41,11}, -{77,-41,12}, -{77,-41,13}, -{77,-41,14}, -{77,-41,15}, -{77,-41,16}, -{77,-41,17}, -{77,-41,18}, -{77,-41,19}, -{77,-41,20}, -{77,-41,21}, -{77,-41,22}, -{77,-41,23}, -{77,-41,24}, -{77,-41,25}, -{77,-41,26}, -{77,-41,27}, -{77,-41,28}, -{77,-41,29}, -{77,-41,30}, -{77,-41,31}, -{77,-41,32}, -{77,-41,33}, -{77,-41,34}, -{77,-41,35}, -{77,-41,36}, -{77,-41,37}, -{77,-41,38}, -{77,-41,39}, -{77,-41,40}, -{77,-41,41}, -{77,-41,42}, -{77,-41,43}, -{77,-41,44}, -{77,-41,45}, -{77,-41,46}, -{77,-41,47}, -{77,-41,48}, -{77,-41,49}, -{77,-41,50}, -{77,-41,51}, -{77,-41,52}, -{77,-41,53}, -{77,-41,54}, -{77,-41,55}, -{77,-41,56}, -{77,-41,57}, -{77,-41,58}, -{77,-41,59}, -{77,-41,60}, -{77,-41,61}, -{77,-41,62}, -{77,-41,63}, -{77,-41,64}, -{77,-41,65}, -{77,-41,66}, -{77,-41,67}, -{77,-41,68}, -{77,-41,69}, -{77,-41,70}, -{77,-41,71}, -{77,-41,72}, -{77,-41,73}, -{77,-41,74}, -{77,-41,75}, -{77,-41,76}, -{77,-40,-15}, -{77,-40,-14}, -{77,-40,-13}, -{77,-40,-12}, -{77,-40,-11}, -{77,-40,-10}, -{77,-40,-9}, -{77,-40,-8}, -{77,-40,-7}, -{77,-40,-6}, -{77,-40,-5}, -{77,-40,-4}, -{77,-40,-3}, -{77,-40,-2}, -{77,-40,-1}, -{77,-40,0}, -{77,-40,1}, -{77,-40,2}, -{77,-40,3}, -{77,-40,4}, -{77,-40,5}, -{77,-40,6}, -{77,-40,7}, -{77,-40,8}, -{77,-40,9}, -{77,-40,10}, -{77,-40,11}, -{77,-40,12}, -{77,-40,13}, -{77,-40,14}, -{77,-40,15}, -{77,-40,16}, -{77,-40,17}, -{77,-40,18}, -{77,-40,19}, -{77,-40,20}, -{77,-40,21}, -{77,-40,22}, -{77,-40,23}, -{77,-40,24}, -{77,-40,25}, -{77,-40,26}, -{77,-40,27}, -{77,-40,28}, -{77,-40,29}, -{77,-40,30}, -{77,-40,31}, -{77,-40,32}, -{77,-40,33}, -{77,-40,34}, -{77,-40,35}, -{77,-40,36}, -{77,-40,37}, -{77,-40,38}, -{77,-40,39}, -{77,-40,40}, -{77,-40,41}, -{77,-40,42}, -{77,-40,43}, -{77,-40,44}, -{77,-40,45}, -{77,-40,46}, -{77,-40,47}, -{77,-40,48}, -{77,-40,49}, -{77,-40,50}, -{77,-40,51}, -{77,-40,52}, -{77,-40,53}, -{77,-40,54}, -{77,-40,55}, -{77,-40,56}, -{77,-40,57}, -{77,-40,58}, -{77,-40,59}, -{77,-40,60}, -{77,-40,61}, -{77,-40,62}, -{77,-40,63}, -{77,-40,64}, -{77,-40,65}, -{77,-40,66}, -{77,-40,67}, -{77,-40,68}, -{77,-40,69}, -{77,-40,70}, -{77,-40,71}, -{77,-40,72}, -{77,-40,73}, -{77,-40,74}, -{77,-40,75}, -{77,-40,76}, -{77,-39,-16}, -{77,-39,-15}, -{77,-39,-14}, -{77,-39,-13}, -{77,-39,-12}, -{77,-39,-11}, -{77,-39,-10}, -{77,-39,-9}, -{77,-39,-8}, -{77,-39,-7}, -{77,-39,-6}, -{77,-39,-5}, -{77,-39,-4}, -{77,-39,-3}, -{77,-39,-2}, -{77,-39,-1}, -{77,-39,0}, -{77,-39,1}, -{77,-39,2}, -{77,-39,3}, -{77,-39,4}, -{77,-39,5}, -{77,-39,6}, -{77,-39,7}, -{77,-39,8}, -{77,-39,9}, -{77,-39,10}, -{77,-39,11}, -{77,-39,12}, -{77,-39,13}, -{77,-39,14}, -{77,-39,15}, -{77,-39,16}, -{77,-39,17}, -{77,-39,18}, -{77,-39,19}, -{77,-39,20}, -{77,-39,21}, -{77,-39,22}, -{77,-39,23}, -{77,-39,24}, -{77,-39,25}, -{77,-39,26}, -{77,-39,27}, -{77,-39,28}, -{77,-39,29}, -{77,-39,30}, -{77,-39,31}, -{77,-39,32}, -{77,-39,33}, -{77,-39,34}, -{77,-39,35}, -{77,-39,36}, -{77,-39,37}, -{77,-39,38}, -{77,-39,39}, -{77,-39,40}, -{77,-39,41}, -{77,-39,42}, -{77,-39,43}, -{77,-39,44}, -{77,-39,45}, -{77,-39,46}, -{77,-39,47}, -{77,-39,48}, -{77,-39,49}, -{77,-39,50}, -{77,-39,51}, -{77,-39,52}, -{77,-39,53}, -{77,-39,54}, -{77,-39,55}, -{77,-39,56}, -{77,-39,57}, -{77,-39,58}, -{77,-39,59}, -{77,-39,60}, -{77,-39,61}, -{77,-39,62}, -{77,-39,63}, -{77,-39,64}, -{77,-39,65}, -{77,-39,66}, -{77,-39,67}, -{77,-39,68}, -{77,-39,69}, -{77,-39,70}, -{77,-39,71}, -{77,-39,72}, -{77,-39,73}, -{77,-39,74}, -{77,-39,75}, -{77,-39,76}, -{77,-38,-18}, -{77,-38,-17}, -{77,-38,-16}, -{77,-38,-15}, -{77,-38,-14}, -{77,-38,-13}, -{77,-38,-12}, -{77,-38,-11}, -{77,-38,-10}, -{77,-38,-9}, -{77,-38,-8}, -{77,-38,-7}, -{77,-38,-6}, -{77,-38,-5}, -{77,-38,-4}, -{77,-38,-3}, -{77,-38,-2}, -{77,-38,-1}, -{77,-38,0}, -{77,-38,1}, -{77,-38,2}, -{77,-38,3}, -{77,-38,4}, -{77,-38,5}, -{77,-38,6}, -{77,-38,7}, -{77,-38,8}, -{77,-38,9}, -{77,-38,10}, -{77,-38,11}, -{77,-38,12}, -{77,-38,13}, -{77,-38,14}, -{77,-38,15}, -{77,-38,16}, -{77,-38,17}, -{77,-38,18}, -{77,-38,19}, -{77,-38,20}, -{77,-38,21}, -{77,-38,22}, -{77,-38,23}, -{77,-38,24}, -{77,-38,25}, -{77,-38,26}, -{77,-38,27}, -{77,-38,28}, -{77,-38,29}, -{77,-38,30}, -{77,-38,31}, -{77,-38,32}, -{77,-38,33}, -{77,-38,34}, -{77,-38,35}, -{77,-38,36}, -{77,-38,37}, -{77,-38,38}, -{77,-38,39}, -{77,-38,40}, -{77,-38,41}, -{77,-38,42}, -{77,-38,43}, -{77,-38,44}, -{77,-38,45}, -{77,-38,46}, -{77,-38,47}, -{77,-38,48}, -{77,-38,49}, -{77,-38,50}, -{77,-38,51}, -{77,-38,52}, -{77,-38,53}, -{77,-38,54}, -{77,-38,55}, -{77,-38,56}, -{77,-38,57}, -{77,-38,58}, -{77,-38,59}, -{77,-38,60}, -{77,-38,61}, -{77,-38,62}, -{77,-38,63}, -{77,-38,64}, -{77,-38,65}, -{77,-38,66}, -{77,-38,67}, -{77,-38,68}, -{77,-38,69}, -{77,-38,70}, -{77,-38,71}, -{77,-38,72}, -{77,-38,73}, -{77,-38,74}, -{77,-38,75}, -{77,-38,76}, -{77,-37,-19}, -{77,-37,-18}, -{77,-37,-17}, -{77,-37,-16}, -{77,-37,-15}, -{77,-37,-14}, -{77,-37,-13}, -{77,-37,-12}, -{77,-37,-11}, -{77,-37,-10}, -{77,-37,-9}, -{77,-37,-8}, -{77,-37,-7}, -{77,-37,-6}, -{77,-37,-5}, -{77,-37,-4}, -{77,-37,-3}, -{77,-37,-2}, -{77,-37,-1}, -{77,-37,0}, -{77,-37,1}, -{77,-37,2}, -{77,-37,3}, -{77,-37,4}, -{77,-37,5}, -{77,-37,6}, -{77,-37,7}, -{77,-37,8}, -{77,-37,9}, -{77,-37,10}, -{77,-37,11}, -{77,-37,12}, -{77,-37,13}, -{77,-37,14}, -{77,-37,15}, -{77,-37,16}, -{77,-37,17}, -{77,-37,18}, -{77,-37,19}, -{77,-37,20}, -{77,-37,21}, -{77,-37,22}, -{77,-37,23}, -{77,-37,24}, -{77,-37,25}, -{77,-37,26}, -{77,-37,27}, -{77,-37,28}, -{77,-37,29}, -{77,-37,30}, -{77,-37,31}, -{77,-37,32}, -{77,-37,33}, -{77,-37,34}, -{77,-37,35}, -{77,-37,36}, -{77,-37,37}, -{77,-37,38}, -{77,-37,39}, -{77,-37,40}, -{77,-37,41}, -{77,-37,42}, -{77,-37,43}, -{77,-37,44}, -{77,-37,45}, -{77,-37,46}, -{77,-37,47}, -{77,-37,48}, -{77,-37,49}, -{77,-37,50}, -{77,-37,51}, -{77,-37,52}, -{77,-37,53}, -{77,-37,54}, -{77,-37,55}, -{77,-37,56}, -{77,-37,57}, -{77,-37,58}, -{77,-37,59}, -{77,-37,60}, -{77,-37,61}, -{77,-37,62}, -{77,-37,63}, -{77,-37,64}, -{77,-37,65}, -{77,-37,66}, -{77,-37,67}, -{77,-37,68}, -{77,-37,69}, -{77,-37,70}, -{77,-37,71}, -{77,-37,72}, -{77,-37,73}, -{77,-37,74}, -{77,-37,75}, -{77,-37,76}, -{77,-36,-21}, -{77,-36,-20}, -{77,-36,-19}, -{77,-36,-18}, -{77,-36,-17}, -{77,-36,-16}, -{77,-36,-15}, -{77,-36,-14}, -{77,-36,-13}, -{77,-36,-12}, -{77,-36,-11}, -{77,-36,-10}, -{77,-36,-9}, -{77,-36,-8}, -{77,-36,-7}, -{77,-36,-6}, -{77,-36,-5}, -{77,-36,-4}, -{77,-36,-3}, -{77,-36,-2}, -{77,-36,-1}, -{77,-36,0}, -{77,-36,1}, -{77,-36,2}, -{77,-36,3}, -{77,-36,4}, -{77,-36,5}, -{77,-36,6}, -{77,-36,7}, -{77,-36,8}, -{77,-36,9}, -{77,-36,10}, -{77,-36,11}, -{77,-36,12}, -{77,-36,13}, -{77,-36,14}, -{77,-36,15}, -{77,-36,16}, -{77,-36,17}, -{77,-36,18}, -{77,-36,19}, -{77,-36,20}, -{77,-36,21}, -{77,-36,22}, -{77,-36,23}, -{77,-36,24}, -{77,-36,25}, -{77,-36,26}, -{77,-36,27}, -{77,-36,28}, -{77,-36,29}, -{77,-36,30}, -{77,-36,31}, -{77,-36,32}, -{77,-36,33}, -{77,-36,34}, -{77,-36,35}, -{77,-36,36}, -{77,-36,37}, -{77,-36,38}, -{77,-36,39}, -{77,-36,40}, -{77,-36,41}, -{77,-36,42}, -{77,-36,43}, -{77,-36,44}, -{77,-36,45}, -{77,-36,46}, -{77,-36,47}, -{77,-36,48}, -{77,-36,49}, -{77,-36,50}, -{77,-36,51}, -{77,-36,52}, -{77,-36,53}, -{77,-36,54}, -{77,-36,55}, -{77,-36,56}, -{77,-36,57}, -{77,-36,58}, -{77,-36,59}, -{77,-36,60}, -{77,-36,61}, -{77,-36,62}, -{77,-36,63}, -{77,-36,64}, -{77,-36,65}, -{77,-36,66}, -{77,-36,67}, -{77,-36,68}, -{77,-36,69}, -{77,-36,70}, -{77,-36,71}, -{77,-36,72}, -{77,-36,73}, -{77,-36,74}, -{77,-36,75}, -{77,-36,76}, -{77,-35,-22}, -{77,-35,-21}, -{77,-35,-20}, -{77,-35,-19}, -{77,-35,-18}, -{77,-35,-17}, -{77,-35,-16}, -{77,-35,-15}, -{77,-35,-14}, -{77,-35,-13}, -{77,-35,-12}, -{77,-35,-11}, -{77,-35,-10}, -{77,-35,-9}, -{77,-35,-8}, -{77,-35,-7}, -{77,-35,-6}, -{77,-35,-5}, -{77,-35,-4}, -{77,-35,-3}, -{77,-35,-2}, -{77,-35,-1}, -{77,-35,0}, -{77,-35,1}, -{77,-35,2}, -{77,-35,3}, -{77,-35,4}, -{77,-35,5}, -{77,-35,6}, -{77,-35,7}, -{77,-35,8}, -{77,-35,9}, -{77,-35,10}, -{77,-35,11}, -{77,-35,12}, -{77,-35,13}, -{77,-35,14}, -{77,-35,15}, -{77,-35,16}, -{77,-35,17}, -{77,-35,18}, -{77,-35,19}, -{77,-35,20}, -{77,-35,21}, -{77,-35,22}, -{77,-35,23}, -{77,-35,24}, -{77,-35,25}, -{77,-35,26}, -{77,-35,27}, -{77,-35,28}, -{77,-35,29}, -{77,-35,30}, -{77,-35,31}, -{77,-35,32}, -{77,-35,33}, -{77,-35,34}, -{77,-35,35}, -{77,-35,36}, -{77,-35,37}, -{77,-35,38}, -{77,-35,39}, -{77,-35,40}, -{77,-35,41}, -{77,-35,42}, -{77,-35,43}, -{77,-35,44}, -{77,-35,45}, -{77,-35,46}, -{77,-35,47}, -{77,-35,48}, -{77,-35,49}, -{77,-35,50}, -{77,-35,51}, -{77,-35,52}, -{77,-35,53}, -{77,-35,54}, -{77,-35,55}, -{77,-35,56}, -{77,-35,57}, -{77,-35,58}, -{77,-35,59}, -{77,-35,60}, -{77,-35,61}, -{77,-35,62}, -{77,-35,63}, -{77,-35,64}, -{77,-35,65}, -{77,-35,66}, -{77,-35,67}, -{77,-35,68}, -{77,-35,69}, -{77,-35,70}, -{77,-35,71}, -{77,-35,72}, -{77,-35,73}, -{77,-35,74}, -{77,-35,75}, -{77,-35,76}, -{77,-34,-24}, -{77,-34,-23}, -{77,-34,-22}, -{77,-34,-21}, -{77,-34,-20}, -{77,-34,-19}, -{77,-34,-18}, -{77,-34,-17}, -{77,-34,-16}, -{77,-34,-15}, -{77,-34,-14}, -{77,-34,-13}, -{77,-34,-12}, -{77,-34,-11}, -{77,-34,-10}, -{77,-34,-9}, -{77,-34,-8}, -{77,-34,-7}, -{77,-34,-6}, -{77,-34,-5}, -{77,-34,-4}, -{77,-34,-3}, -{77,-34,-2}, -{77,-34,-1}, -{77,-34,0}, -{77,-34,1}, -{77,-34,2}, -{77,-34,3}, -{77,-34,4}, -{77,-34,5}, -{77,-34,6}, -{77,-34,7}, -{77,-34,8}, -{77,-34,9}, -{77,-34,10}, -{77,-34,11}, -{77,-34,12}, -{77,-34,13}, -{77,-34,14}, -{77,-34,15}, -{77,-34,16}, -{77,-34,17}, -{77,-34,18}, -{77,-34,19}, -{77,-34,20}, -{77,-34,21}, -{77,-34,22}, -{77,-34,23}, -{77,-34,24}, -{77,-34,25}, -{77,-34,26}, -{77,-34,27}, -{77,-34,28}, -{77,-34,29}, -{77,-34,30}, -{77,-34,31}, -{77,-34,32}, -{77,-34,33}, -{77,-34,34}, -{77,-34,35}, -{77,-34,36}, -{77,-34,37}, -{77,-34,38}, -{77,-34,39}, -{77,-34,40}, -{77,-34,41}, -{77,-34,42}, -{77,-34,43}, -{77,-34,44}, -{77,-34,45}, -{77,-34,46}, -{77,-34,47}, -{77,-34,48}, -{77,-34,49}, -{77,-34,50}, -{77,-34,51}, -{77,-34,52}, -{77,-34,53}, -{77,-34,54}, -{77,-34,55}, -{77,-34,56}, -{77,-34,57}, -{77,-34,58}, -{77,-34,59}, -{77,-34,60}, -{77,-34,61}, -{77,-34,62}, -{77,-34,63}, -{77,-34,64}, -{77,-34,65}, -{77,-34,66}, -{77,-34,67}, -{77,-34,68}, -{77,-34,69}, -{77,-34,70}, -{77,-34,71}, -{77,-34,72}, -{77,-34,73}, -{77,-34,74}, -{77,-34,75}, -{77,-34,76}, -{77,-33,-25}, -{77,-33,-24}, -{77,-33,-23}, -{77,-33,-22}, -{77,-33,-21}, -{77,-33,-20}, -{77,-33,-19}, -{77,-33,-18}, -{77,-33,-17}, -{77,-33,-16}, -{77,-33,-15}, -{77,-33,-14}, -{77,-33,-13}, -{77,-33,-12}, -{77,-33,-11}, -{77,-33,-10}, -{77,-33,-9}, -{77,-33,-8}, -{77,-33,-7}, -{77,-33,-6}, -{77,-33,-5}, -{77,-33,-4}, -{77,-33,-3}, -{77,-33,-2}, -{77,-33,-1}, -{77,-33,0}, -{77,-33,1}, -{77,-33,2}, -{77,-33,3}, -{77,-33,4}, -{77,-33,5}, -{77,-33,6}, -{77,-33,7}, -{77,-33,8}, -{77,-33,9}, -{77,-33,10}, -{77,-33,11}, -{77,-33,12}, -{77,-33,13}, -{77,-33,14}, -{77,-33,15}, -{77,-33,16}, -{77,-33,17}, -{77,-33,18}, -{77,-33,19}, -{77,-33,20}, -{77,-33,21}, -{77,-33,22}, -{77,-33,23}, -{77,-33,24}, -{77,-33,25}, -{77,-33,26}, -{77,-33,27}, -{77,-33,28}, -{77,-33,29}, -{77,-33,30}, -{77,-33,31}, -{77,-33,32}, -{77,-33,33}, -{77,-33,34}, -{77,-33,35}, -{77,-33,36}, -{77,-33,37}, -{77,-33,38}, -{77,-33,39}, -{77,-33,40}, -{77,-33,41}, -{77,-33,42}, -{77,-33,43}, -{77,-33,44}, -{77,-33,45}, -{77,-33,46}, -{77,-33,47}, -{77,-33,48}, -{77,-33,49}, -{77,-33,50}, -{77,-33,51}, -{77,-33,52}, -{77,-33,53}, -{77,-33,54}, -{77,-33,55}, -{77,-33,56}, -{77,-33,57}, -{77,-33,58}, -{77,-33,59}, -{77,-33,60}, -{77,-33,61}, -{77,-33,62}, -{77,-33,63}, -{77,-33,64}, -{77,-33,65}, -{77,-33,66}, -{77,-33,67}, -{77,-33,68}, -{77,-33,69}, -{77,-33,70}, -{77,-33,71}, -{77,-33,72}, -{77,-33,73}, -{77,-33,74}, -{77,-33,75}, -{77,-33,76}, -{77,-32,-27}, -{77,-32,-26}, -{77,-32,-25}, -{77,-32,-24}, -{77,-32,-23}, -{77,-32,-22}, -{77,-32,-21}, -{77,-32,-20}, -{77,-32,-19}, -{77,-32,-18}, -{77,-32,-17}, -{77,-32,-16}, -{77,-32,-15}, -{77,-32,-14}, -{77,-32,-13}, -{77,-32,-12}, -{77,-32,-11}, -{77,-32,-10}, -{77,-32,-9}, -{77,-32,-8}, -{77,-32,-7}, -{77,-32,-6}, -{77,-32,-5}, -{77,-32,-4}, -{77,-32,-3}, -{77,-32,-2}, -{77,-32,-1}, -{77,-32,0}, -{77,-32,1}, -{77,-32,2}, -{77,-32,3}, -{77,-32,4}, -{77,-32,5}, -{77,-32,6}, -{77,-32,7}, -{77,-32,8}, -{77,-32,9}, -{77,-32,10}, -{77,-32,11}, -{77,-32,12}, -{77,-32,13}, -{77,-32,14}, -{77,-32,15}, -{77,-32,16}, -{77,-32,17}, -{77,-32,18}, -{77,-32,19}, -{77,-32,20}, -{77,-32,21}, -{77,-32,22}, -{77,-32,23}, -{77,-32,24}, -{77,-32,25}, -{77,-32,26}, -{77,-32,27}, -{77,-32,28}, -{77,-32,29}, -{77,-32,30}, -{77,-32,31}, -{77,-32,32}, -{77,-32,33}, -{77,-32,34}, -{77,-32,35}, -{77,-32,36}, -{77,-32,37}, -{77,-32,38}, -{77,-32,39}, -{77,-32,40}, -{77,-32,41}, -{77,-32,42}, -{77,-32,43}, -{77,-32,44}, -{77,-32,45}, -{77,-32,46}, -{77,-32,47}, -{77,-32,48}, -{77,-32,49}, -{77,-32,50}, -{77,-32,51}, -{77,-32,52}, -{77,-32,53}, -{77,-32,54}, -{77,-32,55}, -{77,-32,56}, -{77,-32,57}, -{77,-32,58}, -{77,-32,59}, -{77,-32,60}, -{77,-32,61}, -{77,-32,62}, -{77,-32,63}, -{77,-32,64}, -{77,-32,65}, -{77,-32,66}, -{77,-32,67}, -{77,-32,68}, -{77,-32,69}, -{77,-32,70}, -{77,-32,71}, -{77,-32,72}, -{77,-32,73}, -{77,-32,74}, -{77,-32,75}, -{77,-32,76}, -{77,-31,-28}, -{77,-31,-27}, -{77,-31,-26}, -{77,-31,-25}, -{77,-31,-24}, -{77,-31,-23}, -{77,-31,-22}, -{77,-31,-21}, -{77,-31,-20}, -{77,-31,-19}, -{77,-31,-18}, -{77,-31,-17}, -{77,-31,-16}, -{77,-31,-15}, -{77,-31,-14}, -{77,-31,-13}, -{77,-31,-12}, -{77,-31,-11}, -{77,-31,-10}, -{77,-31,-9}, -{77,-31,-8}, -{77,-31,-7}, -{77,-31,-6}, -{77,-31,-5}, -{77,-31,-4}, -{77,-31,-3}, -{77,-31,-2}, -{77,-31,-1}, -{77,-31,0}, -{77,-31,1}, -{77,-31,2}, -{77,-31,3}, -{77,-31,4}, -{77,-31,5}, -{77,-31,6}, -{77,-31,7}, -{77,-31,8}, -{77,-31,9}, -{77,-31,10}, -{77,-31,11}, -{77,-31,12}, -{77,-31,13}, -{77,-31,14}, -{77,-31,15}, -{77,-31,16}, -{77,-31,17}, -{77,-31,18}, -{77,-31,19}, -{77,-31,20}, -{77,-31,21}, -{77,-31,22}, -{77,-31,23}, -{77,-31,24}, -{77,-31,25}, -{77,-31,26}, -{77,-31,27}, -{77,-31,28}, -{77,-31,29}, -{77,-31,30}, -{77,-31,31}, -{77,-31,32}, -{77,-31,33}, -{77,-31,34}, -{77,-31,35}, -{77,-31,36}, -{77,-31,37}, -{77,-31,38}, -{77,-31,39}, -{77,-31,40}, -{77,-31,41}, -{77,-31,42}, -{77,-31,43}, -{77,-31,44}, -{77,-31,45}, -{77,-31,46}, -{77,-31,47}, -{77,-31,48}, -{77,-31,49}, -{77,-31,50}, -{77,-31,51}, -{77,-31,52}, -{77,-31,53}, -{77,-31,54}, -{77,-31,55}, -{77,-31,56}, -{77,-31,57}, -{77,-31,58}, -{77,-31,59}, -{77,-31,60}, -{77,-31,61}, -{77,-31,62}, -{77,-31,63}, -{77,-31,64}, -{77,-31,65}, -{77,-31,66}, -{77,-31,67}, -{77,-31,68}, -{77,-31,69}, -{77,-31,70}, -{77,-31,71}, -{77,-31,72}, -{77,-31,73}, -{77,-31,74}, -{77,-31,75}, -{77,-31,76}, -{77,-31,77}, -{77,-30,-29}, -{77,-30,-28}, -{77,-30,-27}, -{77,-30,-26}, -{77,-30,-25}, -{77,-30,-24}, -{77,-30,-23}, -{77,-30,-22}, -{77,-30,-21}, -{77,-30,-20}, -{77,-30,-19}, -{77,-30,-18}, -{77,-30,-17}, -{77,-30,-16}, -{77,-30,-15}, -{77,-30,-14}, -{77,-30,-13}, -{77,-30,-12}, -{77,-30,-11}, -{77,-30,-10}, -{77,-30,-9}, -{77,-30,-8}, -{77,-30,-7}, -{77,-30,-6}, -{77,-30,-5}, -{77,-30,-4}, -{77,-30,-3}, -{77,-30,-2}, -{77,-30,-1}, -{77,-30,0}, -{77,-30,1}, -{77,-30,2}, -{77,-30,3}, -{77,-30,4}, -{77,-30,5}, -{77,-30,6}, -{77,-30,7}, -{77,-30,8}, -{77,-30,9}, -{77,-30,10}, -{77,-30,11}, -{77,-30,12}, -{77,-30,13}, -{77,-30,14}, -{77,-30,15}, -{77,-30,16}, -{77,-30,17}, -{77,-30,18}, -{77,-30,19}, -{77,-30,20}, -{77,-30,21}, -{77,-30,22}, -{77,-30,23}, -{77,-30,24}, -{77,-30,25}, -{77,-30,26}, -{77,-30,27}, -{77,-30,28}, -{77,-30,29}, -{77,-30,30}, -{77,-30,31}, -{77,-30,32}, -{77,-30,33}, -{77,-30,34}, -{77,-30,35}, -{77,-30,36}, -{77,-30,37}, -{77,-30,38}, -{77,-30,39}, -{77,-30,40}, -{77,-30,41}, -{77,-30,42}, -{77,-30,43}, -{77,-30,44}, -{77,-30,45}, -{77,-30,46}, -{77,-30,47}, -{77,-30,48}, -{77,-30,49}, -{77,-30,50}, -{77,-30,51}, -{77,-30,52}, -{77,-30,53}, -{77,-30,54}, -{77,-30,55}, -{77,-30,56}, -{77,-30,57}, -{77,-30,58}, -{77,-30,59}, -{77,-30,60}, -{77,-30,61}, -{77,-30,62}, -{77,-30,63}, -{77,-30,64}, -{77,-30,65}, -{77,-30,66}, -{77,-30,67}, -{77,-30,68}, -{77,-30,69}, -{77,-30,70}, -{77,-30,71}, -{77,-30,72}, -{77,-30,73}, -{77,-30,74}, -{77,-30,75}, -{77,-30,76}, -{77,-30,77}, -{77,-29,-31}, -{77,-29,-30}, -{77,-29,-29}, -{77,-29,-28}, -{77,-29,-27}, -{77,-29,-26}, -{77,-29,-25}, -{77,-29,-24}, -{77,-29,-23}, -{77,-29,-22}, -{77,-29,-21}, -{77,-29,-20}, -{77,-29,-19}, -{77,-29,-18}, -{77,-29,-17}, -{77,-29,-16}, -{77,-29,-15}, -{77,-29,-14}, -{77,-29,-13}, -{77,-29,-12}, -{77,-29,-11}, -{77,-29,-10}, -{77,-29,-9}, -{77,-29,-8}, -{77,-29,-7}, -{77,-29,-6}, -{77,-29,-5}, -{77,-29,-4}, -{77,-29,-3}, -{77,-29,-2}, -{77,-29,-1}, -{77,-29,0}, -{77,-29,1}, -{77,-29,2}, -{77,-29,3}, -{77,-29,4}, -{77,-29,5}, -{77,-29,6}, -{77,-29,7}, -{77,-29,8}, -{77,-29,9}, -{77,-29,10}, -{77,-29,11}, -{77,-29,12}, -{77,-29,13}, -{77,-29,14}, -{77,-29,15}, -{77,-29,16}, -{77,-29,17}, -{77,-29,18}, -{77,-29,19}, -{77,-29,20}, -{77,-29,21}, -{77,-29,22}, -{77,-29,23}, -{77,-29,24}, -{77,-29,25}, -{77,-29,26}, -{77,-29,27}, -{77,-29,28}, -{77,-29,29}, -{77,-29,30}, -{77,-29,31}, -{77,-29,32}, -{77,-29,33}, -{77,-29,34}, -{77,-29,35}, -{77,-29,36}, -{77,-29,37}, -{77,-29,38}, -{77,-29,39}, -{77,-29,40}, -{77,-29,41}, -{77,-29,42}, -{77,-29,43}, -{77,-29,44}, -{77,-29,45}, -{77,-29,46}, -{77,-29,47}, -{77,-29,48}, -{77,-29,49}, -{77,-29,50}, -{77,-29,51}, -{77,-29,52}, -{77,-29,53}, -{77,-29,54}, -{77,-29,55}, -{77,-29,56}, -{77,-29,57}, -{77,-29,58}, -{77,-29,59}, -{77,-29,60}, -{77,-29,61}, -{77,-29,62}, -{77,-29,63}, -{77,-29,64}, -{77,-29,65}, -{77,-29,66}, -{77,-29,67}, -{77,-29,68}, -{77,-29,69}, -{77,-29,70}, -{77,-29,71}, -{77,-29,72}, -{77,-29,73}, -{77,-29,74}, -{77,-29,75}, -{77,-29,76}, -{77,-29,77}, -{77,-28,-32}, -{77,-28,-31}, -{77,-28,-30}, -{77,-28,-29}, -{77,-28,-28}, -{77,-28,-27}, -{77,-28,-26}, -{77,-28,-25}, -{77,-28,-24}, -{77,-28,-23}, -{77,-28,-22}, -{77,-28,-21}, -{77,-28,-20}, -{77,-28,-19}, -{77,-28,-18}, -{77,-28,-17}, -{77,-28,-16}, -{77,-28,-15}, -{77,-28,-14}, -{77,-28,-13}, -{77,-28,-12}, -{77,-28,-11}, -{77,-28,-10}, -{77,-28,-9}, -{77,-28,-8}, -{77,-28,-7}, -{77,-28,-6}, -{77,-28,-5}, -{77,-28,-4}, -{77,-28,-3}, -{77,-28,-2}, -{77,-28,-1}, -{77,-28,0}, -{77,-28,1}, -{77,-28,2}, -{77,-28,3}, -{77,-28,4}, -{77,-28,5}, -{77,-28,6}, -{77,-28,7}, -{77,-28,8}, -{77,-28,9}, -{77,-28,10}, -{77,-28,11}, -{77,-28,12}, -{77,-28,13}, -{77,-28,14}, -{77,-28,15}, -{77,-28,16}, -{77,-28,17}, -{77,-28,18}, -{77,-28,19}, -{77,-28,20}, -{77,-28,21}, -{77,-28,22}, -{77,-28,23}, -{77,-28,24}, -{77,-28,25}, -{77,-28,26}, -{77,-28,27}, -{77,-28,28}, -{77,-28,29}, -{77,-28,30}, -{77,-28,31}, -{77,-28,32}, -{77,-28,33}, -{77,-28,34}, -{77,-28,35}, -{77,-28,36}, -{77,-28,37}, -{77,-28,38}, -{77,-28,39}, -{77,-28,40}, -{77,-28,41}, -{77,-28,42}, -{77,-28,43}, -{77,-28,44}, -{77,-28,45}, -{77,-28,46}, -{77,-28,47}, -{77,-28,48}, -{77,-28,49}, -{77,-28,50}, -{77,-28,51}, -{77,-28,52}, -{77,-28,53}, -{77,-28,54}, -{77,-28,55}, -{77,-28,56}, -{77,-28,57}, -{77,-28,58}, -{77,-28,59}, -{77,-28,60}, -{77,-28,61}, -{77,-28,62}, -{77,-28,63}, -{77,-28,64}, -{77,-28,65}, -{77,-28,66}, -{77,-28,67}, -{77,-28,68}, -{77,-28,69}, -{77,-28,70}, -{77,-28,71}, -{77,-28,72}, -{77,-28,73}, -{77,-28,74}, -{77,-28,75}, -{77,-28,76}, -{77,-28,77}, -{77,-27,-33}, -{77,-27,-32}, -{77,-27,-31}, -{77,-27,-30}, -{77,-27,-29}, -{77,-27,-28}, -{77,-27,-27}, -{77,-27,-26}, -{77,-27,-25}, -{77,-27,-24}, -{77,-27,-23}, -{77,-27,-22}, -{77,-27,-21}, -{77,-27,-20}, -{77,-27,-19}, -{77,-27,-18}, -{77,-27,-17}, -{77,-27,-16}, -{77,-27,-15}, -{77,-27,-14}, -{77,-27,-13}, -{77,-27,-12}, -{77,-27,-11}, -{77,-27,-10}, -{77,-27,-9}, -{77,-27,-8}, -{77,-27,-7}, -{77,-27,-6}, -{77,-27,-5}, -{77,-27,-4}, -{77,-27,-3}, -{77,-27,-2}, -{77,-27,-1}, -{77,-27,0}, -{77,-27,1}, -{77,-27,2}, -{77,-27,3}, -{77,-27,4}, -{77,-27,5}, -{77,-27,6}, -{77,-27,7}, -{77,-27,8}, -{77,-27,9}, -{77,-27,10}, -{77,-27,11}, -{77,-27,12}, -{77,-27,13}, -{77,-27,14}, -{77,-27,15}, -{77,-27,16}, -{77,-27,17}, -{77,-27,18}, -{77,-27,19}, -{77,-27,20}, -{77,-27,21}, -{77,-27,22}, -{77,-27,23}, -{77,-27,24}, -{77,-27,25}, -{77,-27,26}, -{77,-27,27}, -{77,-27,28}, -{77,-27,29}, -{77,-27,30}, -{77,-27,31}, -{77,-27,32}, -{77,-27,33}, -{77,-27,34}, -{77,-27,35}, -{77,-27,36}, -{77,-27,37}, -{77,-27,38}, -{77,-27,39}, -{77,-27,40}, -{77,-27,41}, -{77,-27,42}, -{77,-27,43}, -{77,-27,44}, -{77,-27,45}, -{77,-27,46}, -{77,-27,47}, -{77,-27,48}, -{77,-27,49}, -{77,-27,50}, -{77,-27,51}, -{77,-27,52}, -{77,-27,53}, -{77,-27,54}, -{77,-27,55}, -{77,-27,56}, -{77,-27,57}, -{77,-27,58}, -{77,-27,59}, -{77,-27,60}, -{77,-27,61}, -{77,-27,62}, -{77,-27,63}, -{77,-27,64}, -{77,-27,65}, -{77,-27,66}, -{77,-27,67}, -{77,-27,68}, -{77,-27,69}, -{77,-27,70}, -{77,-27,71}, -{77,-27,72}, -{77,-27,73}, -{77,-27,74}, -{77,-27,75}, -{77,-27,76}, -{77,-27,77}, -{77,-26,-35}, -{77,-26,-34}, -{77,-26,-33}, -{77,-26,-32}, -{77,-26,-31}, -{77,-26,-30}, -{77,-26,-29}, -{77,-26,-28}, -{77,-26,-27}, -{77,-26,-26}, -{77,-26,-25}, -{77,-26,-24}, -{77,-26,-23}, -{77,-26,-22}, -{77,-26,-21}, -{77,-26,-20}, -{77,-26,-19}, -{77,-26,-18}, -{77,-26,-17}, -{77,-26,-16}, -{77,-26,-15}, -{77,-26,-14}, -{77,-26,-13}, -{77,-26,-12}, -{77,-26,-11}, -{77,-26,-10}, -{77,-26,-9}, -{77,-26,-8}, -{77,-26,-7}, -{77,-26,-6}, -{77,-26,-5}, -{77,-26,-4}, -{77,-26,-3}, -{77,-26,-2}, -{77,-26,-1}, -{77,-26,0}, -{77,-26,1}, -{77,-26,2}, -{77,-26,3}, -{77,-26,4}, -{77,-26,5}, -{77,-26,6}, -{77,-26,7}, -{77,-26,8}, -{77,-26,9}, -{77,-26,10}, -{77,-26,11}, -{77,-26,12}, -{77,-26,13}, -{77,-26,14}, -{77,-26,15}, -{77,-26,16}, -{77,-26,17}, -{77,-26,18}, -{77,-26,19}, -{77,-26,20}, -{77,-26,21}, -{77,-26,22}, -{77,-26,23}, -{77,-26,24}, -{77,-26,25}, -{77,-26,26}, -{77,-26,27}, -{77,-26,28}, -{77,-26,29}, -{77,-26,30}, -{77,-26,31}, -{77,-26,32}, -{77,-26,33}, -{77,-26,34}, -{77,-26,35}, -{77,-26,36}, -{77,-26,37}, -{77,-26,38}, -{77,-26,39}, -{77,-26,40}, -{77,-26,41}, -{77,-26,42}, -{77,-26,43}, -{77,-26,44}, -{77,-26,45}, -{77,-26,46}, -{77,-26,47}, -{77,-26,48}, -{77,-26,49}, -{77,-26,50}, -{77,-26,51}, -{77,-26,52}, -{77,-26,53}, -{77,-26,54}, -{77,-26,55}, -{77,-26,56}, -{77,-26,57}, -{77,-26,58}, -{77,-26,59}, -{77,-26,60}, -{77,-26,61}, -{77,-26,62}, -{77,-26,63}, -{77,-26,64}, -{77,-26,65}, -{77,-26,66}, -{77,-26,67}, -{77,-26,68}, -{77,-26,69}, -{77,-26,70}, -{77,-26,71}, -{77,-26,72}, -{77,-26,73}, -{77,-26,74}, -{77,-26,75}, -{77,-26,76}, -{77,-26,77}, -{77,-25,-35}, -{77,-25,-34}, -{77,-25,-33}, -{77,-25,-32}, -{77,-25,-31}, -{77,-25,-30}, -{77,-25,-29}, -{77,-25,-28}, -{77,-25,-27}, -{77,-25,-26}, -{77,-25,-25}, -{77,-25,-24}, -{77,-25,-23}, -{77,-25,-22}, -{77,-25,-21}, -{77,-25,-20}, -{77,-25,-19}, -{77,-25,-18}, -{77,-25,-17}, -{77,-25,-16}, -{77,-25,-15}, -{77,-25,-14}, -{77,-25,-13}, -{77,-25,-12}, -{77,-25,-11}, -{77,-25,-10}, -{77,-25,-9}, -{77,-25,-8}, -{77,-25,-7}, -{77,-25,-6}, -{77,-25,-5}, -{77,-25,-4}, -{77,-25,-3}, -{77,-25,-2}, -{77,-25,-1}, -{77,-25,0}, -{77,-25,1}, -{77,-25,2}, -{77,-25,3}, -{77,-25,4}, -{77,-25,5}, -{77,-25,6}, -{77,-25,7}, -{77,-25,8}, -{77,-25,9}, -{77,-25,10}, -{77,-25,11}, -{77,-25,12}, -{77,-25,13}, -{77,-25,14}, -{77,-25,15}, -{77,-25,16}, -{77,-25,17}, -{77,-25,18}, -{77,-25,19}, -{77,-25,20}, -{77,-25,21}, -{77,-25,22}, -{77,-25,23}, -{77,-25,24}, -{77,-25,25}, -{77,-25,26}, -{77,-25,27}, -{77,-25,28}, -{77,-25,29}, -{77,-25,30}, -{77,-25,31}, -{77,-25,32}, -{77,-25,33}, -{77,-25,34}, -{77,-25,35}, -{77,-25,36}, -{77,-25,37}, -{77,-25,38}, -{77,-25,39}, -{77,-25,40}, -{77,-25,41}, -{77,-25,42}, -{77,-25,43}, -{77,-25,44}, -{77,-25,45}, -{77,-25,46}, -{77,-25,47}, -{77,-25,48}, -{77,-25,49}, -{77,-25,50}, -{77,-25,51}, -{77,-25,52}, -{77,-25,53}, -{77,-25,54}, -{77,-25,55}, -{77,-25,56}, -{77,-25,57}, -{77,-25,58}, -{77,-25,59}, -{77,-25,60}, -{77,-25,61}, -{77,-25,62}, -{77,-25,63}, -{77,-25,64}, -{77,-25,65}, -{77,-25,66}, -{77,-25,67}, -{77,-25,68}, -{77,-25,69}, -{77,-25,70}, -{77,-25,71}, -{77,-25,72}, -{77,-25,73}, -{77,-25,74}, -{77,-25,75}, -{77,-25,76}, -{77,-25,77}, -{77,-24,-35}, -{77,-24,-34}, -{77,-24,-33}, -{77,-24,-32}, -{77,-24,-31}, -{77,-24,-30}, -{77,-24,-29}, -{77,-24,-28}, -{77,-24,-27}, -{77,-24,-26}, -{77,-24,-25}, -{77,-24,-24}, -{77,-24,-23}, -{77,-24,-22}, -{77,-24,-21}, -{77,-24,-20}, -{77,-24,-19}, -{77,-24,-18}, -{77,-24,-17}, -{77,-24,-16}, -{77,-24,-15}, -{77,-24,-14}, -{77,-24,-13}, -{77,-24,-12}, -{77,-24,-11}, -{77,-24,-10}, -{77,-24,-9}, -{77,-24,-8}, -{77,-24,-7}, -{77,-24,-6}, -{77,-24,-5}, -{77,-24,-4}, -{77,-24,-3}, -{77,-24,-2}, -{77,-24,-1}, -{77,-24,0}, -{77,-24,1}, -{77,-24,2}, -{77,-24,3}, -{77,-24,4}, -{77,-24,5}, -{77,-24,6}, -{77,-24,7}, -{77,-24,8}, -{77,-24,9}, -{77,-24,10}, -{77,-24,11}, -{77,-24,12}, -{77,-24,13}, -{77,-24,14}, -{77,-24,15}, -{77,-24,16}, -{77,-24,17}, -{77,-24,18}, -{77,-24,19}, -{77,-24,20}, -{77,-24,21}, -{77,-24,22}, -{77,-24,23}, -{77,-24,24}, -{77,-24,25}, -{77,-24,26}, -{77,-24,27}, -{77,-24,28}, -{77,-24,29}, -{77,-24,30}, -{77,-24,31}, -{77,-24,32}, -{77,-24,33}, -{77,-24,34}, -{77,-24,35}, -{77,-24,36}, -{77,-24,37}, -{77,-24,38}, -{77,-24,39}, -{77,-24,40}, -{77,-24,41}, -{77,-24,42}, -{77,-24,43}, -{77,-24,44}, -{77,-24,45}, -{77,-24,46}, -{77,-24,47}, -{77,-24,48}, -{77,-24,49}, -{77,-24,50}, -{77,-24,51}, -{77,-24,52}, -{77,-24,53}, -{77,-24,54}, -{77,-24,55}, -{77,-24,56}, -{77,-24,57}, -{77,-24,58}, -{77,-24,59}, -{77,-24,60}, -{77,-24,61}, -{77,-24,62}, -{77,-24,63}, -{77,-24,64}, -{77,-24,65}, -{77,-24,66}, -{77,-24,67}, -{77,-24,68}, -{77,-24,69}, -{77,-24,70}, -{77,-24,71}, -{77,-24,72}, -{77,-24,73}, -{77,-24,74}, -{77,-24,75}, -{77,-24,76}, -{77,-24,77}, -{77,-23,-35}, -{77,-23,-34}, -{77,-23,-33}, -{77,-23,-32}, -{77,-23,-31}, -{77,-23,-30}, -{77,-23,-29}, -{77,-23,-28}, -{77,-23,-27}, -{77,-23,-26}, -{77,-23,-25}, -{77,-23,-24}, -{77,-23,-23}, -{77,-23,-22}, -{77,-23,-21}, -{77,-23,-20}, -{77,-23,-19}, -{77,-23,-18}, -{77,-23,-17}, -{77,-23,-16}, -{77,-23,-15}, -{77,-23,-14}, -{77,-23,-13}, -{77,-23,-12}, -{77,-23,-11}, -{77,-23,-10}, -{77,-23,-9}, -{77,-23,-8}, -{77,-23,-7}, -{77,-23,-6}, -{77,-23,-5}, -{77,-23,-4}, -{77,-23,-3}, -{77,-23,-2}, -{77,-23,-1}, -{77,-23,0}, -{77,-23,1}, -{77,-23,2}, -{77,-23,3}, -{77,-23,4}, -{77,-23,5}, -{77,-23,6}, -{77,-23,7}, -{77,-23,8}, -{77,-23,9}, -{77,-23,10}, -{77,-23,11}, -{77,-23,12}, -{77,-23,13}, -{77,-23,14}, -{77,-23,15}, -{77,-23,16}, -{77,-23,17}, -{77,-23,18}, -{77,-23,19}, -{77,-23,20}, -{77,-23,21}, -{77,-23,22}, -{77,-23,23}, -{77,-23,24}, -{77,-23,25}, -{77,-23,26}, -{77,-23,27}, -{77,-23,28}, -{77,-23,29}, -{77,-23,30}, -{77,-23,31}, -{77,-23,32}, -{77,-23,33}, -{77,-23,34}, -{77,-23,35}, -{77,-23,36}, -{77,-23,37}, -{77,-23,38}, -{77,-23,39}, -{77,-23,40}, -{77,-23,41}, -{77,-23,42}, -{77,-23,43}, -{77,-23,44}, -{77,-23,45}, -{77,-23,46}, -{77,-23,47}, -{77,-23,48}, -{77,-23,49}, -{77,-23,50}, -{77,-23,51}, -{77,-23,52}, -{77,-23,53}, -{77,-23,54}, -{77,-23,55}, -{77,-23,56}, -{77,-23,57}, -{77,-23,58}, -{77,-23,59}, -{77,-23,60}, -{77,-23,61}, -{77,-23,62}, -{77,-23,63}, -{77,-23,64}, -{77,-23,65}, -{77,-23,66}, -{77,-23,67}, -{77,-23,68}, -{77,-23,69}, -{77,-23,70}, -{77,-23,71}, -{77,-23,72}, -{77,-23,73}, -{77,-23,74}, -{77,-23,75}, -{77,-23,76}, -{77,-23,77}, -{77,-22,-35}, -{77,-22,-34}, -{77,-22,-33}, -{77,-22,-32}, -{77,-22,-31}, -{77,-22,-30}, -{77,-22,-29}, -{77,-22,-28}, -{77,-22,-27}, -{77,-22,-26}, -{77,-22,-25}, -{77,-22,-24}, -{77,-22,-23}, -{77,-22,-22}, -{77,-22,-21}, -{77,-22,-20}, -{77,-22,-19}, -{77,-22,-18}, -{77,-22,-17}, -{77,-22,-16}, -{77,-22,-15}, -{77,-22,-14}, -{77,-22,-13}, -{77,-22,-12}, -{77,-22,-11}, -{77,-22,-10}, -{77,-22,-9}, -{77,-22,-8}, -{77,-22,-7}, -{77,-22,-6}, -{77,-22,-5}, -{77,-22,-4}, -{77,-22,-3}, -{77,-22,-2}, -{77,-22,-1}, -{77,-22,0}, -{77,-22,1}, -{77,-22,2}, -{77,-22,3}, -{77,-22,4}, -{77,-22,5}, -{77,-22,6}, -{77,-22,7}, -{77,-22,8}, -{77,-22,9}, -{77,-22,10}, -{77,-22,11}, -{77,-22,12}, -{77,-22,13}, -{77,-22,14}, -{77,-22,15}, -{77,-22,16}, -{77,-22,17}, -{77,-22,18}, -{77,-22,19}, -{77,-22,20}, -{77,-22,21}, -{77,-22,22}, -{77,-22,23}, -{77,-22,24}, -{77,-22,25}, -{77,-22,26}, -{77,-22,27}, -{77,-22,28}, -{77,-22,29}, -{77,-22,30}, -{77,-22,31}, -{77,-22,32}, -{77,-22,33}, -{77,-22,34}, -{77,-22,35}, -{77,-22,36}, -{77,-22,37}, -{77,-22,38}, -{77,-22,39}, -{77,-22,40}, -{77,-22,41}, -{77,-22,42}, -{77,-22,43}, -{77,-22,44}, -{77,-22,45}, -{77,-22,46}, -{77,-22,47}, -{77,-22,48}, -{77,-22,49}, -{77,-22,50}, -{77,-22,51}, -{77,-22,52}, -{77,-22,53}, -{77,-22,54}, -{77,-22,55}, -{77,-22,56}, -{77,-22,57}, -{77,-22,58}, -{77,-22,59}, -{77,-22,60}, -{77,-22,61}, -{77,-22,62}, -{77,-22,63}, -{77,-22,64}, -{77,-22,65}, -{77,-22,66}, -{77,-22,67}, -{77,-22,68}, -{77,-22,69}, -{77,-22,70}, -{77,-22,71}, -{77,-22,72}, -{77,-22,73}, -{77,-22,74}, -{77,-22,75}, -{77,-22,76}, -{77,-22,77}, -{77,-21,-35}, -{77,-21,-34}, -{77,-21,-33}, -{77,-21,-32}, -{77,-21,-31}, -{77,-21,-30}, -{77,-21,-29}, -{77,-21,-28}, -{77,-21,-27}, -{77,-21,-26}, -{77,-21,-25}, -{77,-21,-24}, -{77,-21,-23}, -{77,-21,-22}, -{77,-21,-21}, -{77,-21,-20}, -{77,-21,-19}, -{77,-21,-18}, -{77,-21,-17}, -{77,-21,-16}, -{77,-21,-15}, -{77,-21,-14}, -{77,-21,-13}, -{77,-21,-12}, -{77,-21,-11}, -{77,-21,-10}, -{77,-21,-9}, -{77,-21,-8}, -{77,-21,-7}, -{77,-21,-6}, -{77,-21,-5}, -{77,-21,-4}, -{77,-21,-3}, -{77,-21,-2}, -{77,-21,-1}, -{77,-21,0}, -{77,-21,1}, -{77,-21,2}, -{77,-21,3}, -{77,-21,4}, -{77,-21,5}, -{77,-21,6}, -{77,-21,7}, -{77,-21,8}, -{77,-21,9}, -{77,-21,10}, -{77,-21,11}, -{77,-21,12}, -{77,-21,13}, -{77,-21,14}, -{77,-21,15}, -{77,-21,16}, -{77,-21,17}, -{77,-21,18}, -{77,-21,19}, -{77,-21,20}, -{77,-21,21}, -{77,-21,22}, -{77,-21,23}, -{77,-21,24}, -{77,-21,25}, -{77,-21,26}, -{77,-21,27}, -{77,-21,28}, -{77,-21,29}, -{77,-21,30}, -{77,-21,31}, -{77,-21,32}, -{77,-21,33}, -{77,-21,34}, -{77,-21,35}, -{77,-21,36}, -{77,-21,37}, -{77,-21,38}, -{77,-21,39}, -{77,-21,40}, -{77,-21,41}, -{77,-21,42}, -{77,-21,43}, -{77,-21,44}, -{77,-21,45}, -{77,-21,46}, -{77,-21,47}, -{77,-21,48}, -{77,-21,49}, -{77,-21,50}, -{77,-21,51}, -{77,-21,52}, -{77,-21,53}, -{77,-21,54}, -{77,-21,55}, -{77,-21,56}, -{77,-21,57}, -{77,-21,58}, -{77,-21,59}, -{77,-21,60}, -{77,-21,61}, -{77,-21,62}, -{77,-21,63}, -{77,-21,64}, -{77,-21,65}, -{77,-21,66}, -{77,-21,67}, -{77,-21,68}, -{77,-21,69}, -{77,-21,70}, -{77,-21,71}, -{77,-21,72}, -{77,-21,73}, -{77,-21,74}, -{77,-21,75}, -{77,-21,76}, -{77,-21,77}, -{77,-20,-35}, -{77,-20,-34}, -{77,-20,-33}, -{77,-20,-32}, -{77,-20,-31}, -{77,-20,-30}, -{77,-20,-29}, -{77,-20,-28}, -{77,-20,-27}, -{77,-20,-26}, -{77,-20,-25}, -{77,-20,-24}, -{77,-20,-23}, -{77,-20,-22}, -{77,-20,-21}, -{77,-20,-20}, -{77,-20,-19}, -{77,-20,-18}, -{77,-20,-17}, -{77,-20,-16}, -{77,-20,-15}, -{77,-20,-14}, -{77,-20,-13}, -{77,-20,-12}, -{77,-20,-11}, -{77,-20,-10}, -{77,-20,-9}, -{77,-20,-8}, -{77,-20,-7}, -{77,-20,-6}, -{77,-20,-5}, -{77,-20,-4}, -{77,-20,-3}, -{77,-20,-2}, -{77,-20,-1}, -{77,-20,0}, -{77,-20,1}, -{77,-20,2}, -{77,-20,3}, -{77,-20,4}, -{77,-20,5}, -{77,-20,6}, -{77,-20,7}, -{77,-20,8}, -{77,-20,9}, -{77,-20,10}, -{77,-20,11}, -{77,-20,12}, -{77,-20,13}, -{77,-20,14}, -{77,-20,15}, -{77,-20,16}, -{77,-20,17}, -{77,-20,18}, -{77,-20,19}, -{77,-20,20}, -{77,-20,21}, -{77,-20,22}, -{77,-20,23}, -{77,-20,24}, -{77,-20,25}, -{77,-20,26}, -{77,-20,27}, -{77,-20,28}, -{77,-20,29}, -{77,-20,30}, -{77,-20,31}, -{77,-20,32}, -{77,-20,33}, -{77,-20,34}, -{77,-20,35}, -{77,-20,36}, -{77,-20,37}, -{77,-20,38}, -{77,-20,39}, -{77,-20,40}, -{77,-20,41}, -{77,-20,42}, -{77,-20,43}, -{77,-20,44}, -{77,-20,45}, -{77,-20,46}, -{77,-20,47}, -{77,-20,48}, -{77,-20,49}, -{77,-20,50}, -{77,-20,51}, -{77,-20,52}, -{77,-20,53}, -{77,-20,54}, -{77,-20,55}, -{77,-20,56}, -{77,-20,57}, -{77,-20,58}, -{77,-20,59}, -{77,-20,60}, -{77,-20,61}, -{77,-20,62}, -{77,-20,63}, -{77,-20,64}, -{77,-20,65}, -{77,-20,66}, -{77,-20,67}, -{77,-20,68}, -{77,-20,69}, -{77,-20,70}, -{77,-20,71}, -{77,-20,72}, -{77,-20,73}, -{77,-20,74}, -{77,-20,75}, -{77,-20,76}, -{77,-20,77}, -{77,-19,-35}, -{77,-19,-34}, -{77,-19,-33}, -{77,-19,-32}, -{77,-19,-31}, -{77,-19,-30}, -{77,-19,-29}, -{77,-19,-28}, -{77,-19,-27}, -{77,-19,-26}, -{77,-19,-25}, -{77,-19,-24}, -{77,-19,-23}, -{77,-19,-22}, -{77,-19,-21}, -{77,-19,-20}, -{77,-19,-19}, -{77,-19,-18}, -{77,-19,-17}, -{77,-19,-16}, -{77,-19,-15}, -{77,-19,-14}, -{77,-19,-13}, -{77,-19,-12}, -{77,-19,-11}, -{77,-19,-10}, -{77,-19,-9}, -{77,-19,-8}, -{77,-19,-7}, -{77,-19,-6}, -{77,-19,-5}, -{77,-19,-4}, -{77,-19,-3}, -{77,-19,-2}, -{77,-19,-1}, -{77,-19,0}, -{77,-19,1}, -{77,-19,2}, -{77,-19,3}, -{77,-19,4}, -{77,-19,5}, -{77,-19,6}, -{77,-19,7}, -{77,-19,8}, -{77,-19,9}, -{77,-19,10}, -{77,-19,11}, -{77,-19,12}, -{77,-19,13}, -{77,-19,14}, -{77,-19,15}, -{77,-19,16}, -{77,-19,17}, -{77,-19,18}, -{77,-19,19}, -{77,-19,20}, -{77,-19,21}, -{77,-19,22}, -{77,-19,23}, -{77,-19,24}, -{77,-19,25}, -{77,-19,26}, -{77,-19,27}, -{77,-19,28}, -{77,-19,29}, -{77,-19,30}, -{77,-19,31}, -{77,-19,32}, -{77,-19,33}, -{77,-19,34}, -{77,-19,35}, -{77,-19,36}, -{77,-19,37}, -{77,-19,38}, -{77,-19,39}, -{77,-19,40}, -{77,-19,41}, -{77,-19,42}, -{77,-19,43}, -{77,-19,44}, -{77,-19,45}, -{77,-19,46}, -{77,-19,47}, -{77,-19,48}, -{77,-19,49}, -{77,-19,50}, -{77,-19,51}, -{77,-19,52}, -{77,-19,53}, -{77,-19,54}, -{77,-19,55}, -{77,-19,56}, -{77,-19,57}, -{77,-19,58}, -{77,-19,59}, -{77,-19,60}, -{77,-19,61}, -{77,-19,62}, -{77,-19,63}, -{77,-19,64}, -{77,-19,65}, -{77,-19,66}, -{77,-19,67}, -{77,-19,68}, -{77,-19,69}, -{77,-19,70}, -{77,-19,71}, -{77,-19,72}, -{77,-19,73}, -{77,-19,74}, -{77,-19,75}, -{77,-19,76}, -{77,-19,77}, -{77,-18,-35}, -{77,-18,-34}, -{77,-18,-33}, -{77,-18,-32}, -{77,-18,-31}, -{77,-18,-30}, -{77,-18,-29}, -{77,-18,-28}, -{77,-18,-27}, -{77,-18,-26}, -{77,-18,-25}, -{77,-18,-24}, -{77,-18,-23}, -{77,-18,-22}, -{77,-18,-21}, -{77,-18,-20}, -{77,-18,-19}, -{77,-18,-18}, -{77,-18,-17}, -{77,-18,-16}, -{77,-18,-15}, -{77,-18,-14}, -{77,-18,-13}, -{77,-18,-12}, -{77,-18,-11}, -{77,-18,-10}, -{77,-18,-9}, -{77,-18,-8}, -{77,-18,-7}, -{77,-18,-6}, -{77,-18,-5}, -{77,-18,-4}, -{77,-18,-3}, -{77,-18,-2}, -{77,-18,-1}, -{77,-18,0}, -{77,-18,1}, -{77,-18,2}, -{77,-18,3}, -{77,-18,4}, -{77,-18,5}, -{77,-18,6}, -{77,-18,7}, -{77,-18,8}, -{77,-18,9}, -{77,-18,10}, -{77,-18,11}, -{77,-18,12}, -{77,-18,13}, -{77,-18,14}, -{77,-18,15}, -{77,-18,16}, -{77,-18,17}, -{77,-18,18}, -{77,-18,19}, -{77,-18,20}, -{77,-18,21}, -{77,-18,22}, -{77,-18,23}, -{77,-18,24}, -{77,-18,25}, -{77,-18,26}, -{77,-18,27}, -{77,-18,28}, -{77,-18,29}, -{77,-18,30}, -{77,-18,31}, -{77,-18,32}, -{77,-18,33}, -{77,-18,34}, -{77,-18,35}, -{77,-18,36}, -{77,-18,37}, -{77,-18,38}, -{77,-18,39}, -{77,-18,40}, -{77,-18,41}, -{77,-18,42}, -{77,-18,43}, -{77,-18,44}, -{77,-18,45}, -{77,-18,46}, -{77,-18,47}, -{77,-18,48}, -{77,-18,49}, -{77,-18,50}, -{77,-18,51}, -{77,-18,52}, -{77,-18,53}, -{77,-18,54}, -{77,-18,55}, -{77,-18,56}, -{77,-18,57}, -{77,-18,58}, -{77,-18,59}, -{77,-18,60}, -{77,-18,61}, -{77,-18,62}, -{77,-18,63}, -{77,-18,64}, -{77,-18,65}, -{77,-18,66}, -{77,-18,67}, -{77,-18,68}, -{77,-18,69}, -{77,-18,70}, -{77,-18,71}, -{77,-18,72}, -{77,-18,73}, -{77,-18,74}, -{77,-18,75}, -{77,-18,76}, -{77,-18,77}, -{77,-17,-35}, -{77,-17,-34}, -{77,-17,-33}, -{77,-17,-32}, -{77,-17,-31}, -{77,-17,-30}, -{77,-17,-29}, -{77,-17,-28}, -{77,-17,-27}, -{77,-17,-26}, -{77,-17,-25}, -{77,-17,-24}, -{77,-17,-23}, -{77,-17,-22}, -{77,-17,-21}, -{77,-17,-20}, -{77,-17,-19}, -{77,-17,-18}, -{77,-17,-17}, -{77,-17,-16}, -{77,-17,-15}, -{77,-17,-14}, -{77,-17,-13}, -{77,-17,-12}, -{77,-17,-11}, -{77,-17,-10}, -{77,-17,-9}, -{77,-17,-8}, -{77,-17,-7}, -{77,-17,-6}, -{77,-17,-5}, -{77,-17,-4}, -{77,-17,-3}, -{77,-17,-2}, -{77,-17,-1}, -{77,-17,0}, -{77,-17,1}, -{77,-17,2}, -{77,-17,3}, -{77,-17,4}, -{77,-17,5}, -{77,-17,6}, -{77,-17,7}, -{77,-17,8}, -{77,-17,9}, -{77,-17,10}, -{77,-17,11}, -{77,-17,12}, -{77,-17,13}, -{77,-17,14}, -{77,-17,15}, -{77,-17,16}, -{77,-17,17}, -{77,-17,18}, -{77,-17,19}, -{77,-17,20}, -{77,-17,21}, -{77,-17,22}, -{77,-17,23}, -{77,-17,24}, -{77,-17,25}, -{77,-17,26}, -{77,-17,27}, -{77,-17,28}, -{77,-17,29}, -{77,-17,30}, -{77,-17,31}, -{77,-17,32}, -{77,-17,33}, -{77,-17,34}, -{77,-17,35}, -{77,-17,36}, -{77,-17,37}, -{77,-17,38}, -{77,-17,39}, -{77,-17,40}, -{77,-17,41}, -{77,-17,42}, -{77,-17,43}, -{77,-17,44}, -{77,-17,45}, -{77,-17,46}, -{77,-17,47}, -{77,-17,48}, -{77,-17,49}, -{77,-17,50}, -{77,-17,51}, -{77,-17,52}, -{77,-17,53}, -{77,-17,54}, -{77,-17,55}, -{77,-17,56}, -{77,-17,57}, -{77,-17,58}, -{77,-17,59}, -{77,-17,60}, -{77,-17,61}, -{77,-17,62}, -{77,-17,63}, -{77,-17,64}, -{77,-17,65}, -{77,-17,66}, -{77,-17,67}, -{77,-17,68}, -{77,-17,69}, -{77,-17,70}, -{77,-17,71}, -{77,-17,72}, -{77,-17,73}, -{77,-17,74}, -{77,-17,75}, -{77,-17,76}, -{77,-17,77}, -{77,-16,-35}, -{77,-16,-34}, -{77,-16,-33}, -{77,-16,-32}, -{77,-16,-31}, -{77,-16,-30}, -{77,-16,-29}, -{77,-16,-28}, -{77,-16,-27}, -{77,-16,-26}, -{77,-16,-25}, -{77,-16,-24}, -{77,-16,-23}, -{77,-16,-22}, -{77,-16,-21}, -{77,-16,-20}, -{77,-16,-19}, -{77,-16,-18}, -{77,-16,-17}, -{77,-16,-16}, -{77,-16,-15}, -{77,-16,-14}, -{77,-16,-13}, -{77,-16,-12}, -{77,-16,-11}, -{77,-16,-10}, -{77,-16,-9}, -{77,-16,-8}, -{77,-16,-7}, -{77,-16,-6}, -{77,-16,-5}, -{77,-16,-4}, -{77,-16,-3}, -{77,-16,-2}, -{77,-16,-1}, -{77,-16,0}, -{77,-16,1}, -{77,-16,2}, -{77,-16,3}, -{77,-16,4}, -{77,-16,5}, -{77,-16,6}, -{77,-16,7}, -{77,-16,8}, -{77,-16,9}, -{77,-16,10}, -{77,-16,11}, -{77,-16,12}, -{77,-16,13}, -{77,-16,14}, -{77,-16,15}, -{77,-16,16}, -{77,-16,17}, -{77,-16,18}, -{77,-16,19}, -{77,-16,20}, -{77,-16,21}, -{77,-16,22}, -{77,-16,23}, -{77,-16,24}, -{77,-16,25}, -{77,-16,26}, -{77,-16,27}, -{77,-16,28}, -{77,-16,29}, -{77,-16,30}, -{77,-16,31}, -{77,-16,32}, -{77,-16,33}, -{77,-16,34}, -{77,-16,35}, -{77,-16,36}, -{77,-16,37}, -{77,-16,38}, -{77,-16,39}, -{77,-16,40}, -{77,-16,41}, -{77,-16,42}, -{77,-16,43}, -{77,-16,44}, -{77,-16,45}, -{77,-16,46}, -{77,-16,47}, -{77,-16,48}, -{77,-16,49}, -{77,-16,50}, -{77,-16,51}, -{77,-16,52}, -{77,-16,53}, -{77,-16,54}, -{77,-16,55}, -{77,-16,56}, -{77,-16,57}, -{77,-16,58}, -{77,-16,59}, -{77,-16,60}, -{77,-16,61}, -{77,-16,62}, -{77,-16,63}, -{77,-16,64}, -{77,-16,65}, -{77,-16,66}, -{77,-16,67}, -{77,-16,68}, -{77,-16,69}, -{77,-16,70}, -{77,-16,71}, -{77,-16,72}, -{77,-16,73}, -{77,-16,74}, -{77,-16,75}, -{77,-16,76}, -{77,-16,77}, -{77,-15,-35}, -{77,-15,-34}, -{77,-15,-33}, -{77,-15,-32}, -{77,-15,-31}, -{77,-15,-30}, -{77,-15,-29}, -{77,-15,-28}, -{77,-15,-27}, -{77,-15,-26}, -{77,-15,-25}, -{77,-15,-24}, -{77,-15,-23}, -{77,-15,-22}, -{77,-15,-21}, -{77,-15,-20}, -{77,-15,-19}, -{77,-15,-18}, -{77,-15,-17}, -{77,-15,-16}, -{77,-15,-15}, -{77,-15,-14}, -{77,-15,-13}, -{77,-15,-12}, -{77,-15,-11}, -{77,-15,-10}, -{77,-15,-9}, -{77,-15,-8}, -{77,-15,-7}, -{77,-15,-6}, -{77,-15,-5}, -{77,-15,-4}, -{77,-15,-3}, -{77,-15,-2}, -{77,-15,-1}, -{77,-15,0}, -{77,-15,1}, -{77,-15,2}, -{77,-15,3}, -{77,-15,4}, -{77,-15,5}, -{77,-15,6}, -{77,-15,7}, -{77,-15,8}, -{77,-15,9}, -{77,-15,10}, -{77,-15,11}, -{77,-15,12}, -{77,-15,13}, -{77,-15,14}, -{77,-15,15}, -{77,-15,16}, -{77,-15,17}, -{77,-15,18}, -{77,-15,19}, -{77,-15,20}, -{77,-15,21}, -{77,-15,22}, -{77,-15,23}, -{77,-15,24}, -{77,-15,25}, -{77,-15,26}, -{77,-15,27}, -{77,-15,28}, -{77,-15,29}, -{77,-15,30}, -{77,-15,31}, -{77,-15,32}, -{77,-15,33}, -{77,-15,34}, -{77,-15,35}, -{77,-15,36}, -{77,-15,37}, -{77,-15,38}, -{77,-15,39}, -{77,-15,40}, -{77,-15,41}, -{77,-15,42}, -{77,-15,43}, -{77,-15,44}, -{77,-15,45}, -{77,-15,46}, -{77,-15,47}, -{77,-15,48}, -{77,-15,49}, -{77,-15,50}, -{77,-15,51}, -{77,-15,52}, -{77,-15,53}, -{77,-15,54}, -{77,-15,55}, -{77,-15,56}, -{77,-15,57}, -{77,-15,58}, -{77,-15,59}, -{77,-15,60}, -{77,-15,61}, -{77,-15,62}, -{77,-15,63}, -{77,-15,64}, -{77,-15,65}, -{77,-15,66}, -{77,-15,67}, -{77,-15,68}, -{77,-15,69}, -{77,-15,70}, -{77,-15,71}, -{77,-15,72}, -{77,-15,73}, -{77,-15,74}, -{77,-15,75}, -{77,-15,76}, -{77,-15,77}, -{77,-15,78}, -{77,-14,-35}, -{77,-14,-34}, -{77,-14,-33}, -{77,-14,-32}, -{77,-14,-31}, -{77,-14,-30}, -{77,-14,-29}, -{77,-14,-28}, -{77,-14,-27}, -{77,-14,-26}, -{77,-14,-25}, -{77,-14,-24}, -{77,-14,-23}, -{77,-14,-22}, -{77,-14,-21}, -{77,-14,-20}, -{77,-14,-19}, -{77,-14,-18}, -{77,-14,-17}, -{77,-14,-16}, -{77,-14,-15}, -{77,-14,-14}, -{77,-14,-13}, -{77,-14,-12}, -{77,-14,-11}, -{77,-14,-10}, -{77,-14,-9}, -{77,-14,-8}, -{77,-14,-7}, -{77,-14,-6}, -{77,-14,-5}, -{77,-14,-4}, -{77,-14,-3}, -{77,-14,-2}, -{77,-14,-1}, -{77,-14,0}, -{77,-14,1}, -{77,-14,2}, -{77,-14,3}, -{77,-14,4}, -{77,-14,5}, -{77,-14,6}, -{77,-14,7}, -{77,-14,8}, -{77,-14,9}, -{77,-14,10}, -{77,-14,11}, -{77,-14,12}, -{77,-14,13}, -{77,-14,14}, -{77,-14,15}, -{77,-14,16}, -{77,-14,17}, -{77,-14,18}, -{77,-14,19}, -{77,-14,20}, -{77,-14,21}, -{77,-14,22}, -{77,-14,23}, -{77,-14,24}, -{77,-14,25}, -{77,-14,26}, -{77,-14,27}, -{77,-14,28}, -{77,-14,29}, -{77,-14,30}, -{77,-14,31}, -{77,-14,32}, -{77,-14,33}, -{77,-14,34}, -{77,-14,35}, -{77,-14,36}, -{77,-14,37}, -{77,-14,38}, -{77,-14,39}, -{77,-14,40}, -{77,-14,41}, -{77,-14,42}, -{77,-14,43}, -{77,-14,44}, -{77,-14,45}, -{77,-14,46}, -{77,-14,47}, -{77,-14,48}, -{77,-14,49}, -{77,-14,50}, -{77,-14,51}, -{77,-14,52}, -{77,-14,53}, -{77,-14,54}, -{77,-14,55}, -{77,-14,56}, -{77,-14,57}, -{77,-14,58}, -{77,-14,59}, -{77,-14,60}, -{77,-14,61}, -{77,-14,62}, -{77,-14,63}, -{77,-14,64}, -{77,-14,65}, -{77,-14,66}, -{77,-14,67}, -{77,-14,68}, -{77,-14,69}, -{77,-14,70}, -{77,-14,71}, -{77,-14,72}, -{77,-14,73}, -{77,-14,74}, -{77,-14,75}, -{77,-14,76}, -{77,-14,77}, -{77,-14,78}, -{77,-13,-35}, -{77,-13,-34}, -{77,-13,-33}, -{77,-13,-32}, -{77,-13,-31}, -{77,-13,-30}, -{77,-13,-29}, -{77,-13,-28}, -{77,-13,-27}, -{77,-13,-26}, -{77,-13,-25}, -{77,-13,-24}, -{77,-13,-23}, -{77,-13,-22}, -{77,-13,-21}, -{77,-13,-20}, -{77,-13,-19}, -{77,-13,-18}, -{77,-13,-17}, -{77,-13,-16}, -{77,-13,-15}, -{77,-13,-14}, -{77,-13,-13}, -{77,-13,-12}, -{77,-13,-11}, -{77,-13,-10}, -{77,-13,-9}, -{77,-13,-8}, -{77,-13,-7}, -{77,-13,-6}, -{77,-13,-5}, -{77,-13,-4}, -{77,-13,-3}, -{77,-13,-2}, -{77,-13,-1}, -{77,-13,0}, -{77,-13,1}, -{77,-13,2}, -{77,-13,3}, -{77,-13,4}, -{77,-13,5}, -{77,-13,6}, -{77,-13,7}, -{77,-13,8}, -{77,-13,9}, -{77,-13,10}, -{77,-13,11}, -{77,-13,12}, -{77,-13,13}, -{77,-13,14}, -{77,-13,15}, -{77,-13,16}, -{77,-13,17}, -{77,-13,18}, -{77,-13,19}, -{77,-13,20}, -{77,-13,21}, -{77,-13,22}, -{77,-13,23}, -{77,-13,24}, -{77,-13,25}, -{77,-13,26}, -{77,-13,27}, -{77,-13,28}, -{77,-13,29}, -{77,-13,30}, -{77,-13,31}, -{77,-13,32}, -{77,-13,33}, -{77,-13,34}, -{77,-13,35}, -{77,-13,36}, -{77,-13,37}, -{77,-13,38}, -{77,-13,39}, -{77,-13,40}, -{77,-13,41}, -{77,-13,42}, -{77,-13,43}, -{77,-13,44}, -{77,-13,45}, -{77,-13,46}, -{77,-13,47}, -{77,-13,48}, -{77,-13,49}, -{77,-13,50}, -{77,-13,51}, -{77,-13,52}, -{77,-13,53}, -{77,-13,54}, -{77,-13,55}, -{77,-13,56}, -{77,-13,57}, -{77,-13,58}, -{77,-13,59}, -{77,-13,60}, -{77,-13,61}, -{77,-13,62}, -{77,-13,63}, -{77,-13,64}, -{77,-13,65}, -{77,-13,66}, -{77,-13,67}, -{77,-13,68}, -{77,-13,69}, -{77,-13,70}, -{77,-13,71}, -{77,-13,72}, -{77,-13,73}, -{77,-13,74}, -{77,-13,75}, -{77,-13,76}, -{77,-13,77}, -{77,-13,78}, -{77,-12,-35}, -{77,-12,-34}, -{77,-12,-33}, -{77,-12,-32}, -{77,-12,-31}, -{77,-12,-30}, -{77,-12,-29}, -{77,-12,-28}, -{77,-12,-27}, -{77,-12,-26}, -{77,-12,-25}, -{77,-12,-24}, -{77,-12,-23}, -{77,-12,-22}, -{77,-12,-21}, -{77,-12,-20}, -{77,-12,-19}, -{77,-12,-18}, -{77,-12,-17}, -{77,-12,-16}, -{77,-12,-15}, -{77,-12,-14}, -{77,-12,-13}, -{77,-12,-12}, -{77,-12,-11}, -{77,-12,-10}, -{77,-12,-9}, -{77,-12,-8}, -{77,-12,-7}, -{77,-12,-6}, -{77,-12,-5}, -{77,-12,-4}, -{77,-12,-3}, -{77,-12,-2}, -{77,-12,-1}, -{77,-12,0}, -{77,-12,1}, -{77,-12,2}, -{77,-12,3}, -{77,-12,4}, -{77,-12,5}, -{77,-12,6}, -{77,-12,7}, -{77,-12,8}, -{77,-12,9}, -{77,-12,10}, -{77,-12,11}, -{77,-12,12}, -{77,-12,13}, -{77,-12,14}, -{77,-12,15}, -{77,-12,16}, -{77,-12,17}, -{77,-12,18}, -{77,-12,19}, -{77,-12,20}, -{77,-12,21}, -{77,-12,22}, -{77,-12,23}, -{77,-12,24}, -{77,-12,25}, -{77,-12,26}, -{77,-12,27}, -{77,-12,28}, -{77,-12,29}, -{77,-12,30}, -{77,-12,31}, -{77,-12,32}, -{77,-12,33}, -{77,-12,34}, -{77,-12,35}, -{77,-12,36}, -{77,-12,37}, -{77,-12,38}, -{77,-12,39}, -{77,-12,40}, -{77,-12,41}, -{77,-12,42}, -{77,-12,43}, -{77,-12,44}, -{77,-12,45}, -{77,-12,46}, -{77,-12,47}, -{77,-12,48}, -{77,-12,49}, -{77,-12,50}, -{77,-12,51}, -{77,-12,52}, -{77,-12,53}, -{77,-12,54}, -{77,-12,55}, -{77,-12,56}, -{77,-12,57}, -{77,-12,58}, -{77,-12,59}, -{77,-12,60}, -{77,-12,61}, -{77,-12,62}, -{77,-12,63}, -{77,-12,64}, -{77,-12,65}, -{77,-12,66}, -{77,-12,67}, -{77,-12,68}, -{77,-12,69}, -{77,-12,70}, -{77,-12,71}, -{77,-12,72}, -{77,-12,73}, -{77,-12,74}, -{77,-12,75}, -{77,-12,76}, -{77,-12,77}, -{77,-12,78}, -{77,-11,-35}, -{77,-11,-34}, -{77,-11,-33}, -{77,-11,-32}, -{77,-11,-31}, -{77,-11,-30}, -{77,-11,-29}, -{77,-11,-28}, -{77,-11,-27}, -{77,-11,-26}, -{77,-11,-25}, -{77,-11,-24}, -{77,-11,-23}, -{77,-11,-22}, -{77,-11,-21}, -{77,-11,-20}, -{77,-11,-19}, -{77,-11,-18}, -{77,-11,-17}, -{77,-11,-16}, -{77,-11,-15}, -{77,-11,-14}, -{77,-11,-13}, -{77,-11,-12}, -{77,-11,-11}, -{77,-11,-10}, -{77,-11,-9}, -{77,-11,-8}, -{77,-11,-7}, -{77,-11,-6}, -{77,-11,-5}, -{77,-11,-4}, -{77,-11,-3}, -{77,-11,-2}, -{77,-11,-1}, -{77,-11,0}, -{77,-11,1}, -{77,-11,2}, -{77,-11,3}, -{77,-11,4}, -{77,-11,5}, -{77,-11,6}, -{77,-11,7}, -{77,-11,8}, -{77,-11,9}, -{77,-11,10}, -{77,-11,11}, -{77,-11,12}, -{77,-11,13}, -{77,-11,14}, -{77,-11,15}, -{77,-11,16}, -{77,-11,17}, -{77,-11,18}, -{77,-11,19}, -{77,-11,20}, -{77,-11,21}, -{77,-11,22}, -{77,-11,23}, -{77,-11,24}, -{77,-11,25}, -{77,-11,26}, -{77,-11,27}, -{77,-11,28}, -{77,-11,29}, -{77,-11,30}, -{77,-11,31}, -{77,-11,32}, -{77,-11,33}, -{77,-11,34}, -{77,-11,35}, -{77,-11,36}, -{77,-11,37}, -{77,-11,38}, -{77,-11,39}, -{77,-11,40}, -{77,-11,41}, -{77,-11,42}, -{77,-11,43}, -{77,-11,44}, -{77,-11,45}, -{77,-11,46}, -{77,-11,47}, -{77,-11,48}, -{77,-11,49}, -{77,-11,50}, -{77,-11,51}, -{77,-11,52}, -{77,-11,53}, -{77,-11,54}, -{77,-11,55}, -{77,-11,56}, -{77,-11,57}, -{77,-11,58}, -{77,-11,59}, -{77,-11,60}, -{77,-11,61}, -{77,-11,62}, -{77,-11,63}, -{77,-11,64}, -{77,-11,65}, -{77,-11,66}, -{77,-11,67}, -{77,-11,68}, -{77,-11,69}, -{77,-11,70}, -{77,-11,71}, -{77,-11,72}, -{77,-11,73}, -{77,-11,74}, -{77,-11,75}, -{77,-11,76}, -{77,-11,77}, -{77,-11,78}, -{77,-10,-35}, -{77,-10,-34}, -{77,-10,-33}, -{77,-10,-32}, -{77,-10,-31}, -{77,-10,-30}, -{77,-10,-29}, -{77,-10,-28}, -{77,-10,-27}, -{77,-10,-26}, -{77,-10,-25}, -{77,-10,-24}, -{77,-10,-23}, -{77,-10,-22}, -{77,-10,-21}, -{77,-10,-20}, -{77,-10,-19}, -{77,-10,-18}, -{77,-10,-17}, -{77,-10,-16}, -{77,-10,-15}, -{77,-10,-14}, -{77,-10,-13}, -{77,-10,-12}, -{77,-10,-11}, -{77,-10,-10}, -{77,-10,-9}, -{77,-10,-8}, -{77,-10,-7}, -{77,-10,-6}, -{77,-10,-5}, -{77,-10,-4}, -{77,-10,-3}, -{77,-10,-2}, -{77,-10,-1}, -{77,-10,0}, -{77,-10,1}, -{77,-10,2}, -{77,-10,3}, -{77,-10,4}, -{77,-10,5}, -{77,-10,6}, -{77,-10,7}, -{77,-10,8}, -{77,-10,9}, -{77,-10,10}, -{77,-10,11}, -{77,-10,12}, -{77,-10,13}, -{77,-10,14}, -{77,-10,15}, -{77,-10,16}, -{77,-10,17}, -{77,-10,18}, -{77,-10,19}, -{77,-10,20}, -{77,-10,21}, -{77,-10,22}, -{77,-10,23}, -{77,-10,24}, -{77,-10,25}, -{77,-10,26}, -{77,-10,27}, -{77,-10,28}, -{77,-10,29}, -{77,-10,30}, -{77,-10,31}, -{77,-10,32}, -{77,-10,33}, -{77,-10,34}, -{77,-10,35}, -{77,-10,36}, -{77,-10,37}, -{77,-10,38}, -{77,-10,39}, -{77,-10,40}, -{77,-10,41}, -{77,-10,42}, -{77,-10,43}, -{77,-10,44}, -{77,-10,45}, -{77,-10,46}, -{77,-10,47}, -{77,-10,48}, -{77,-10,49}, -{77,-10,50}, -{77,-10,51}, -{77,-10,52}, -{77,-10,53}, -{77,-10,54}, -{77,-10,55}, -{77,-10,56}, -{77,-10,57}, -{77,-10,58}, -{77,-10,59}, -{77,-10,60}, -{77,-10,61}, -{77,-10,62}, -{77,-10,63}, -{77,-10,64}, -{77,-10,65}, -{77,-10,66}, -{77,-10,67}, -{77,-10,68}, -{77,-10,69}, -{77,-10,70}, -{77,-10,71}, -{77,-10,72}, -{77,-10,73}, -{77,-10,74}, -{77,-10,75}, -{77,-10,76}, -{77,-10,77}, -{77,-10,78}, -{77,-9,-35}, -{77,-9,-34}, -{77,-9,-33}, -{77,-9,-32}, -{77,-9,-31}, -{77,-9,-30}, -{77,-9,-29}, -{77,-9,-28}, -{77,-9,-27}, -{77,-9,-26}, -{77,-9,-25}, -{77,-9,-24}, -{77,-9,-23}, -{77,-9,-22}, -{77,-9,-21}, -{77,-9,-20}, -{77,-9,-19}, -{77,-9,-18}, -{77,-9,-17}, -{77,-9,-16}, -{77,-9,-15}, -{77,-9,-14}, -{77,-9,-13}, -{77,-9,-12}, -{77,-9,-11}, -{77,-9,-10}, -{77,-9,-9}, -{77,-9,-8}, -{77,-9,-7}, -{77,-9,-6}, -{77,-9,-5}, -{77,-9,-4}, -{77,-9,-3}, -{77,-9,-2}, -{77,-9,-1}, -{77,-9,0}, -{77,-9,1}, -{77,-9,2}, -{77,-9,3}, -{77,-9,4}, -{77,-9,5}, -{77,-9,6}, -{77,-9,7}, -{77,-9,8}, -{77,-9,9}, -{77,-9,10}, -{77,-9,11}, -{77,-9,12}, -{77,-9,13}, -{77,-9,14}, -{77,-9,15}, -{77,-9,16}, -{77,-9,17}, -{77,-9,18}, -{77,-9,19}, -{77,-9,20}, -{77,-9,21}, -{77,-9,22}, -{77,-9,23}, -{77,-9,24}, -{77,-9,25}, -{77,-9,26}, -{77,-9,27}, -{77,-9,28}, -{77,-9,29}, -{77,-9,30}, -{77,-9,31}, -{77,-9,32}, -{77,-9,33}, -{77,-9,34}, -{77,-9,35}, -{77,-9,36}, -{77,-9,37}, -{77,-9,38}, -{77,-9,39}, -{77,-9,40}, -{77,-9,41}, -{77,-9,42}, -{77,-9,43}, -{77,-9,44}, -{77,-9,45}, -{77,-9,46}, -{77,-9,47}, -{77,-9,48}, -{77,-9,49}, -{77,-9,50}, -{77,-9,51}, -{77,-9,52}, -{77,-9,53}, -{77,-9,54}, -{77,-9,55}, -{77,-9,56}, -{77,-9,57}, -{77,-9,58}, -{77,-9,59}, -{77,-9,60}, -{77,-9,61}, -{77,-9,62}, -{77,-9,63}, -{77,-9,64}, -{77,-9,65}, -{77,-9,66}, -{77,-9,67}, -{77,-9,68}, -{77,-9,69}, -{77,-9,70}, -{77,-9,71}, -{77,-9,72}, -{77,-9,73}, -{77,-9,74}, -{77,-9,75}, -{77,-9,76}, -{77,-9,77}, -{77,-9,78}, -{77,-8,-35}, -{77,-8,-34}, -{77,-8,-33}, -{77,-8,-32}, -{77,-8,-31}, -{77,-8,-30}, -{77,-8,-29}, -{77,-8,-28}, -{77,-8,-27}, -{77,-8,-26}, -{77,-8,-25}, -{77,-8,-24}, -{77,-8,-23}, -{77,-8,-22}, -{77,-8,-21}, -{77,-8,-20}, -{77,-8,-19}, -{77,-8,-18}, -{77,-8,-17}, -{77,-8,-16}, -{77,-8,-15}, -{77,-8,-14}, -{77,-8,-13}, -{77,-8,-12}, -{77,-8,-11}, -{77,-8,-10}, -{77,-8,-9}, -{77,-8,-8}, -{77,-8,-7}, -{77,-8,-6}, -{77,-8,-5}, -{77,-8,-4}, -{77,-8,-3}, -{77,-8,-2}, -{77,-8,-1}, -{77,-8,0}, -{77,-8,1}, -{77,-8,2}, -{77,-8,3}, -{77,-8,4}, -{77,-8,5}, -{77,-8,6}, -{77,-8,7}, -{77,-8,8}, -{77,-8,9}, -{77,-8,10}, -{77,-8,11}, -{77,-8,12}, -{77,-8,13}, -{77,-8,14}, -{77,-8,15}, -{77,-8,16}, -{77,-8,17}, -{77,-8,18}, -{77,-8,19}, -{77,-8,20}, -{77,-8,21}, -{77,-8,22}, -{77,-8,23}, -{77,-8,24}, -{77,-8,25}, -{77,-8,26}, -{77,-8,27}, -{77,-8,28}, -{77,-8,29}, -{77,-8,30}, -{77,-8,31}, -{77,-8,32}, -{77,-8,33}, -{77,-8,34}, -{77,-8,35}, -{77,-8,36}, -{77,-8,37}, -{77,-8,38}, -{77,-8,39}, -{77,-8,40}, -{77,-8,41}, -{77,-8,42}, -{77,-8,43}, -{77,-8,44}, -{77,-8,45}, -{77,-8,46}, -{77,-8,47}, -{77,-8,48}, -{77,-8,49}, -{77,-8,50}, -{77,-8,51}, -{77,-8,52}, -{77,-8,53}, -{77,-8,54}, -{77,-8,55}, -{77,-8,56}, -{77,-8,57}, -{77,-8,58}, -{77,-8,59}, -{77,-8,60}, -{77,-8,61}, -{77,-8,62}, -{77,-8,63}, -{77,-8,64}, -{77,-8,65}, -{77,-8,66}, -{77,-8,67}, -{77,-8,68}, -{77,-8,69}, -{77,-8,70}, -{77,-8,71}, -{77,-8,72}, -{77,-8,73}, -{77,-8,74}, -{77,-8,75}, -{77,-8,76}, -{77,-8,77}, -{77,-8,78}, -{77,-7,-35}, -{77,-7,-34}, -{77,-7,-33}, -{77,-7,-32}, -{77,-7,-31}, -{77,-7,-30}, -{77,-7,-29}, -{77,-7,-28}, -{77,-7,-27}, -{77,-7,-26}, -{77,-7,-25}, -{77,-7,-24}, -{77,-7,-23}, -{77,-7,-22}, -{77,-7,-21}, -{77,-7,-20}, -{77,-7,-19}, -{77,-7,-18}, -{77,-7,-17}, -{77,-7,-16}, -{77,-7,-15}, -{77,-7,-14}, -{77,-7,-13}, -{77,-7,-12}, -{77,-7,-11}, -{77,-7,-10}, -{77,-7,-9}, -{77,-7,-8}, -{77,-7,-7}, -{77,-7,-6}, -{77,-7,-5}, -{77,-7,-4}, -{77,-7,-3}, -{77,-7,-2}, -{77,-7,-1}, -{77,-7,0}, -{77,-7,1}, -{77,-7,2}, -{77,-7,3}, -{77,-7,4}, -{77,-7,5}, -{77,-7,6}, -{77,-7,7}, -{77,-7,8}, -{77,-7,9}, -{77,-7,10}, -{77,-7,11}, -{77,-7,12}, -{77,-7,13}, -{77,-7,14}, -{77,-7,15}, -{77,-7,16}, -{77,-7,17}, -{77,-7,18}, -{77,-7,19}, -{77,-7,20}, -{77,-7,21}, -{77,-7,22}, -{77,-7,23}, -{77,-7,24}, -{77,-7,25}, -{77,-7,26}, -{77,-7,27}, -{77,-7,28}, -{77,-7,29}, -{77,-7,30}, -{77,-7,31}, -{77,-7,32}, -{77,-7,33}, -{77,-7,34}, -{77,-7,35}, -{77,-7,36}, -{77,-7,37}, -{77,-7,38}, -{77,-7,39}, -{77,-7,40}, -{77,-7,41}, -{77,-7,42}, -{77,-7,43}, -{77,-7,44}, -{77,-7,45}, -{77,-7,46}, -{77,-7,47}, -{77,-7,48}, -{77,-7,49}, -{77,-7,50}, -{77,-7,51}, -{77,-7,52}, -{77,-7,53}, -{77,-7,54}, -{77,-7,55}, -{77,-7,56}, -{77,-7,57}, -{77,-7,58}, -{77,-7,59}, -{77,-7,60}, -{77,-7,61}, -{77,-7,62}, -{77,-7,63}, -{77,-7,64}, -{77,-7,65}, -{77,-7,66}, -{77,-7,67}, -{77,-7,68}, -{77,-7,69}, -{77,-7,70}, -{77,-7,71}, -{77,-7,72}, -{77,-7,73}, -{77,-7,74}, -{77,-7,75}, -{77,-7,76}, -{77,-7,77}, -{77,-7,78}, -{77,-6,-35}, -{77,-6,-34}, -{77,-6,-33}, -{77,-6,-32}, -{77,-6,-31}, -{77,-6,-30}, -{77,-6,-29}, -{77,-6,-28}, -{77,-6,-27}, -{77,-6,-26}, -{77,-6,-25}, -{77,-6,-24}, -{77,-6,-23}, -{77,-6,-22}, -{77,-6,-21}, -{77,-6,-20}, -{77,-6,-19}, -{77,-6,-18}, -{77,-6,-17}, -{77,-6,-16}, -{77,-6,-15}, -{77,-6,-14}, -{77,-6,-13}, -{77,-6,-12}, -{77,-6,-11}, -{77,-6,-10}, -{77,-6,-9}, -{77,-6,-8}, -{77,-6,-7}, -{77,-6,-6}, -{77,-6,-5}, -{77,-6,-4}, -{77,-6,-3}, -{77,-6,-2}, -{77,-6,-1}, -{77,-6,0}, -{77,-6,1}, -{77,-6,2}, -{77,-6,3}, -{77,-6,4}, -{77,-6,5}, -{77,-6,6}, -{77,-6,7}, -{77,-6,8}, -{77,-6,9}, -{77,-6,10}, -{77,-6,11}, -{77,-6,12}, -{77,-6,13}, -{77,-6,14}, -{77,-6,15}, -{77,-6,16}, -{77,-6,17}, -{77,-6,18}, -{77,-6,19}, -{77,-6,20}, -{77,-6,21}, -{77,-6,22}, -{77,-6,23}, -{77,-6,24}, -{77,-6,25}, -{77,-6,26}, -{77,-6,27}, -{77,-6,28}, -{77,-6,29}, -{77,-6,30}, -{77,-6,31}, -{77,-6,32}, -{77,-6,33}, -{77,-6,34}, -{77,-6,35}, -{77,-6,36}, -{77,-6,37}, -{77,-6,38}, -{77,-6,39}, -{77,-6,40}, -{77,-6,41}, -{77,-6,42}, -{77,-6,43}, -{77,-6,44}, -{77,-6,45}, -{77,-6,46}, -{77,-6,47}, -{77,-6,48}, -{77,-6,49}, -{77,-6,50}, -{77,-6,51}, -{77,-6,52}, -{77,-6,53}, -{77,-6,54}, -{77,-6,55}, -{77,-6,56}, -{77,-6,57}, -{77,-6,58}, -{77,-6,59}, -{77,-6,60}, -{77,-6,61}, -{77,-6,62}, -{77,-6,63}, -{77,-6,64}, -{77,-6,65}, -{77,-6,66}, -{77,-6,67}, -{77,-6,68}, -{77,-6,69}, -{77,-6,70}, -{77,-6,71}, -{77,-6,72}, -{77,-6,73}, -{77,-6,74}, -{77,-6,75}, -{77,-6,76}, -{77,-6,77}, -{77,-6,78}, -{77,-5,-35}, -{77,-5,-34}, -{77,-5,-33}, -{77,-5,-32}, -{77,-5,-31}, -{77,-5,-30}, -{77,-5,-29}, -{77,-5,-28}, -{77,-5,-27}, -{77,-5,-26}, -{77,-5,-25}, -{77,-5,-24}, -{77,-5,-23}, -{77,-5,-22}, -{77,-5,-21}, -{77,-5,-20}, -{77,-5,-19}, -{77,-5,-18}, -{77,-5,-17}, -{77,-5,-16}, -{77,-5,-15}, -{77,-5,-14}, -{77,-5,-13}, -{77,-5,-12}, -{77,-5,-11}, -{77,-5,-10}, -{77,-5,-9}, -{77,-5,-8}, -{77,-5,-7}, -{77,-5,-6}, -{77,-5,-5}, -{77,-5,-4}, -{77,-5,-3}, -{77,-5,-2}, -{77,-5,-1}, -{77,-5,0}, -{77,-5,1}, -{77,-5,2}, -{77,-5,3}, -{77,-5,4}, -{77,-5,5}, -{77,-5,6}, -{77,-5,7}, -{77,-5,8}, -{77,-5,9}, -{77,-5,10}, -{77,-5,11}, -{77,-5,12}, -{77,-5,13}, -{77,-5,14}, -{77,-5,15}, -{77,-5,16}, -{77,-5,17}, -{77,-5,18}, -{77,-5,19}, -{77,-5,20}, -{77,-5,21}, -{77,-5,22}, -{77,-5,23}, -{77,-5,24}, -{77,-5,25}, -{77,-5,26}, -{77,-5,27}, -{77,-5,28}, -{77,-5,29}, -{77,-5,30}, -{77,-5,31}, -{77,-5,32}, -{77,-5,33}, -{77,-5,34}, -{77,-5,35}, -{77,-5,36}, -{77,-5,37}, -{77,-5,38}, -{77,-5,39}, -{77,-5,40}, -{77,-5,41}, -{77,-5,42}, -{77,-5,43}, -{77,-5,44}, -{77,-5,45}, -{77,-5,46}, -{77,-5,47}, -{77,-5,48}, -{77,-5,49}, -{77,-5,50}, -{77,-5,51}, -{77,-5,52}, -{77,-5,53}, -{77,-5,54}, -{77,-5,55}, -{77,-5,56}, -{77,-5,57}, -{77,-5,58}, -{77,-5,59}, -{77,-5,60}, -{77,-5,61}, -{77,-5,62}, -{77,-5,63}, -{77,-5,64}, -{77,-5,65}, -{77,-5,66}, -{77,-5,67}, -{77,-5,68}, -{77,-5,69}, -{77,-5,70}, -{77,-5,71}, -{77,-5,72}, -{77,-5,73}, -{77,-5,74}, -{77,-5,75}, -{77,-5,76}, -{77,-5,77}, -{77,-5,78}, -{77,-4,-35}, -{77,-4,-34}, -{77,-4,-33}, -{77,-4,-32}, -{77,-4,-31}, -{77,-4,-30}, -{77,-4,-29}, -{77,-4,-28}, -{77,-4,-27}, -{77,-4,-26}, -{77,-4,-25}, -{77,-4,-24}, -{77,-4,-23}, -{77,-4,-22}, -{77,-4,-21}, -{77,-4,-20}, -{77,-4,-19}, -{77,-4,-18}, -{77,-4,-17}, -{77,-4,-16}, -{77,-4,-15}, -{77,-4,-14}, -{77,-4,-13}, -{77,-4,-12}, -{77,-4,-11}, -{77,-4,-10}, -{77,-4,-9}, -{77,-4,-8}, -{77,-4,-7}, -{77,-4,-6}, -{77,-4,-5}, -{77,-4,-4}, -{77,-4,-3}, -{77,-4,-2}, -{77,-4,-1}, -{77,-4,0}, -{77,-4,1}, -{77,-4,2}, -{77,-4,3}, -{77,-4,4}, -{77,-4,5}, -{77,-4,6}, -{77,-4,7}, -{77,-4,8}, -{77,-4,9}, -{77,-4,10}, -{77,-4,11}, -{77,-4,12}, -{77,-4,13}, -{77,-4,14}, -{77,-4,15}, -{77,-4,16}, -{77,-4,17}, -{77,-4,18}, -{77,-4,19}, -{77,-4,20}, -{77,-4,21}, -{77,-4,22}, -{77,-4,23}, -{77,-4,24}, -{77,-4,25}, -{77,-4,26}, -{77,-4,27}, -{77,-4,28}, -{77,-4,29}, -{77,-4,30}, -{77,-4,31}, -{77,-4,32}, -{77,-4,33}, -{77,-4,34}, -{77,-4,35}, -{77,-4,36}, -{77,-4,37}, -{77,-4,38}, -{77,-4,39}, -{77,-4,40}, -{77,-4,41}, -{77,-4,42}, -{77,-4,43}, -{77,-4,44}, -{77,-4,45}, -{77,-4,46}, -{77,-4,47}, -{77,-4,48}, -{77,-4,49}, -{77,-4,50}, -{77,-4,51}, -{77,-4,52}, -{77,-4,53}, -{77,-4,54}, -{77,-4,55}, -{77,-4,56}, -{77,-4,57}, -{77,-4,58}, -{77,-4,59}, -{77,-4,60}, -{77,-4,61}, -{77,-4,62}, -{77,-4,63}, -{77,-4,64}, -{77,-4,65}, -{77,-4,66}, -{77,-4,67}, -{77,-4,68}, -{77,-4,69}, -{77,-4,70}, -{77,-4,71}, -{77,-4,72}, -{77,-4,73}, -{77,-4,74}, -{77,-4,75}, -{77,-4,76}, -{77,-4,77}, -{77,-4,78}, -{77,-3,-35}, -{77,-3,-34}, -{77,-3,-33}, -{77,-3,-32}, -{77,-3,-31}, -{77,-3,-30}, -{77,-3,-29}, -{77,-3,-28}, -{77,-3,-27}, -{77,-3,-26}, -{77,-3,-25}, -{77,-3,-24}, -{77,-3,-23}, -{77,-3,-22}, -{77,-3,-21}, -{77,-3,-20}, -{77,-3,-19}, -{77,-3,-18}, -{77,-3,-17}, -{77,-3,-16}, -{77,-3,-15}, -{77,-3,-14}, -{77,-3,-13}, -{77,-3,-12}, -{77,-3,-11}, -{77,-3,-10}, -{77,-3,-9}, -{77,-3,-8}, -{77,-3,-7}, -{77,-3,-6}, -{77,-3,-5}, -{77,-3,-4}, -{77,-3,-3}, -{77,-3,-2}, -{77,-3,-1}, -{77,-3,0}, -{77,-3,1}, -{77,-3,2}, -{77,-3,3}, -{77,-3,4}, -{77,-3,5}, -{77,-3,6}, -{77,-3,7}, -{77,-3,8}, -{77,-3,9}, -{77,-3,10}, -{77,-3,11}, -{77,-3,12}, -{77,-3,13}, -{77,-3,14}, -{77,-3,15}, -{77,-3,16}, -{77,-3,17}, -{77,-3,18}, -{77,-3,19}, -{77,-3,20}, -{77,-3,21}, -{77,-3,22}, -{77,-3,23}, -{77,-3,24}, -{77,-3,25}, -{77,-3,26}, -{77,-3,27}, -{77,-3,28}, -{77,-3,29}, -{77,-3,30}, -{77,-3,31}, -{77,-3,32}, -{77,-3,33}, -{77,-3,34}, -{77,-3,35}, -{77,-3,36}, -{77,-3,37}, -{77,-3,38}, -{77,-3,39}, -{77,-3,40}, -{77,-3,41}, -{77,-3,42}, -{77,-3,43}, -{77,-3,44}, -{77,-3,45}, -{77,-3,46}, -{77,-3,47}, -{77,-3,48}, -{77,-3,49}, -{77,-3,50}, -{77,-3,51}, -{77,-3,52}, -{77,-3,53}, -{77,-3,54}, -{77,-3,55}, -{77,-3,56}, -{77,-3,57}, -{77,-3,58}, -{77,-3,59}, -{77,-3,60}, -{77,-3,61}, -{77,-3,62}, -{77,-3,63}, -{77,-3,64}, -{77,-3,65}, -{77,-3,66}, -{77,-3,67}, -{77,-3,68}, -{77,-3,69}, -{77,-3,70}, -{77,-3,71}, -{77,-3,72}, -{77,-3,73}, -{77,-3,74}, -{77,-3,75}, -{77,-3,76}, -{77,-3,77}, -{77,-3,78}, -{77,-2,-35}, -{77,-2,-34}, -{77,-2,-33}, -{77,-2,-32}, -{77,-2,-31}, -{77,-2,-30}, -{77,-2,-29}, -{77,-2,-28}, -{77,-2,-27}, -{77,-2,-26}, -{77,-2,-25}, -{77,-2,-24}, -{77,-2,-23}, -{77,-2,-22}, -{77,-2,-21}, -{77,-2,-20}, -{77,-2,-19}, -{77,-2,-18}, -{77,-2,-17}, -{77,-2,-16}, -{77,-2,-15}, -{77,-2,-14}, -{77,-2,-13}, -{77,-2,-12}, -{77,-2,-11}, -{77,-2,-10}, -{77,-2,-9}, -{77,-2,-8}, -{77,-2,-7}, -{77,-2,-6}, -{77,-2,-5}, -{77,-2,-4}, -{77,-2,-3}, -{77,-2,-2}, -{77,-2,-1}, -{77,-2,0}, -{77,-2,1}, -{77,-2,2}, -{77,-2,3}, -{77,-2,4}, -{77,-2,5}, -{77,-2,6}, -{77,-2,7}, -{77,-2,8}, -{77,-2,9}, -{77,-2,10}, -{77,-2,11}, -{77,-2,12}, -{77,-2,13}, -{77,-2,14}, -{77,-2,15}, -{77,-2,16}, -{77,-2,17}, -{77,-2,18}, -{77,-2,19}, -{77,-2,20}, -{77,-2,21}, -{77,-2,22}, -{77,-2,23}, -{77,-2,24}, -{77,-2,25}, -{77,-2,26}, -{77,-2,27}, -{77,-2,28}, -{77,-2,29}, -{77,-2,30}, -{77,-2,31}, -{77,-2,32}, -{77,-2,33}, -{77,-2,34}, -{77,-2,35}, -{77,-2,36}, -{77,-2,37}, -{77,-2,38}, -{77,-2,39}, -{77,-2,40}, -{77,-2,41}, -{77,-2,42}, -{77,-2,43}, -{77,-2,44}, -{77,-2,45}, -{77,-2,46}, -{77,-2,47}, -{77,-2,48}, -{77,-2,49}, -{77,-2,50}, -{77,-2,51}, -{77,-2,52}, -{77,-2,53}, -{77,-2,54}, -{77,-2,55}, -{77,-2,56}, -{77,-2,57}, -{77,-2,58}, -{77,-2,59}, -{77,-2,60}, -{77,-2,61}, -{77,-2,62}, -{77,-2,63}, -{77,-2,64}, -{77,-2,65}, -{77,-2,66}, -{77,-2,67}, -{77,-2,68}, -{77,-2,69}, -{77,-2,70}, -{77,-2,71}, -{77,-2,72}, -{77,-2,73}, -{77,-2,74}, -{77,-2,75}, -{77,-2,76}, -{77,-2,77}, -{77,-2,78}, -{77,-1,-35}, -{77,-1,-34}, -{77,-1,-33}, -{77,-1,-32}, -{77,-1,-31}, -{77,-1,-30}, -{77,-1,-29}, -{77,-1,-28}, -{77,-1,-27}, -{77,-1,-26}, -{77,-1,-25}, -{77,-1,-24}, -{77,-1,-23}, -{77,-1,-22}, -{77,-1,-21}, -{77,-1,-20}, -{77,-1,-19}, -{77,-1,-18}, -{77,-1,-17}, -{77,-1,-16}, -{77,-1,-15}, -{77,-1,-14}, -{77,-1,-13}, -{77,-1,-12}, -{77,-1,-11}, -{77,-1,-10}, -{77,-1,-9}, -{77,-1,-8}, -{77,-1,-7}, -{77,-1,-6}, -{77,-1,-5}, -{77,-1,-4}, -{77,-1,-3}, -{77,-1,-2}, -{77,-1,-1}, -{77,-1,0}, -{77,-1,1}, -{77,-1,2}, -{77,-1,3}, -{77,-1,4}, -{77,-1,5}, -{77,-1,6}, -{77,-1,7}, -{77,-1,8}, -{77,-1,9}, -{77,-1,10}, -{77,-1,11}, -{77,-1,12}, -{77,-1,13}, -{77,-1,14}, -{77,-1,15}, -{77,-1,16}, -{77,-1,17}, -{77,-1,18}, -{77,-1,19}, -{77,-1,20}, -{77,-1,21}, -{77,-1,22}, -{77,-1,23}, -{77,-1,24}, -{77,-1,25}, -{77,-1,26}, -{77,-1,27}, -{77,-1,28}, -{77,-1,29}, -{77,-1,30}, -{77,-1,31}, -{77,-1,32}, -{77,-1,33}, -{77,-1,34}, -{77,-1,35}, -{77,-1,36}, -{77,-1,37}, -{77,-1,38}, -{77,-1,39}, -{77,-1,40}, -{77,-1,41}, -{77,-1,42}, -{77,-1,43}, -{77,-1,44}, -{77,-1,45}, -{77,-1,46}, -{77,-1,47}, -{77,-1,48}, -{77,-1,49}, -{77,-1,50}, -{77,-1,51}, -{77,-1,52}, -{77,-1,53}, -{77,-1,54}, -{77,-1,55}, -{77,-1,56}, -{77,-1,57}, -{77,-1,58}, -{77,-1,59}, -{77,-1,60}, -{77,-1,61}, -{77,-1,62}, -{77,-1,63}, -{77,-1,64}, -{77,-1,65}, -{77,-1,66}, -{77,-1,67}, -{77,-1,68}, -{77,-1,69}, -{77,-1,70}, -{77,-1,71}, -{77,-1,72}, -{77,-1,73}, -{77,-1,74}, -{77,-1,75}, -{77,-1,76}, -{77,-1,77}, -{77,-1,78}, -{77,0,-35}, -{77,0,-34}, -{77,0,-33}, -{77,0,-32}, -{77,0,-31}, -{77,0,-30}, -{77,0,-29}, -{77,0,-28}, -{77,0,-27}, -{77,0,-26}, -{77,0,-25}, -{77,0,-24}, -{77,0,-23}, -{77,0,-22}, -{77,0,-21}, -{77,0,-20}, -{77,0,-19}, -{77,0,-18}, -{77,0,-17}, -{77,0,-16}, -{77,0,-15}, -{77,0,-14}, -{77,0,-13}, -{77,0,-12}, -{77,0,-11}, -{77,0,-10}, -{77,0,-9}, -{77,0,-8}, -{77,0,-7}, -{77,0,-6}, -{77,0,-5}, -{77,0,-4}, -{77,0,-3}, -{77,0,-2}, -{77,0,-1}, -{77,0,0}, -{77,0,1}, -{77,0,2}, -{77,0,3}, -{77,0,4}, -{77,0,5}, -{77,0,6}, -{77,0,7}, -{77,0,8}, -{77,0,9}, -{77,0,10}, -{77,0,11}, -{77,0,12}, -{77,0,13}, -{77,0,14}, -{77,0,15}, -{77,0,16}, -{77,0,17}, -{77,0,18}, -{77,0,19}, -{77,0,20}, -{77,0,21}, -{77,0,22}, -{77,0,23}, -{77,0,24}, -{77,0,25}, -{77,0,26}, -{77,0,27}, -{77,0,28}, -{77,0,29}, -{77,0,30}, -{77,0,31}, -{77,0,32}, -{77,0,33}, -{77,0,34}, -{77,0,35}, -{77,0,36}, -{77,0,37}, -{77,0,38}, -{77,0,39}, -{77,0,40}, -{77,0,41}, -{77,0,42}, -{77,0,43}, -{77,0,44}, -{77,0,45}, -{77,0,46}, -{77,0,47}, -{77,0,48}, -{77,0,49}, -{77,0,50}, -{77,0,51}, -{77,0,52}, -{77,0,53}, -{77,0,54}, -{77,0,55}, -{77,0,56}, -{77,0,57}, -{77,0,58}, -{77,0,59}, -{77,0,60}, -{77,0,61}, -{77,0,62}, -{77,0,63}, -{77,0,64}, -{77,0,65}, -{77,0,66}, -{77,0,67}, -{77,0,68}, -{77,0,69}, -{77,0,70}, -{77,0,71}, -{77,0,72}, -{77,0,73}, -{77,0,74}, -{77,0,75}, -{77,0,76}, -{77,0,77}, -{77,0,78}, -{77,0,79}, -{77,1,-35}, -{77,1,-34}, -{77,1,-33}, -{77,1,-32}, -{77,1,-31}, -{77,1,-30}, -{77,1,-29}, -{77,1,-28}, -{77,1,-27}, -{77,1,-26}, -{77,1,-25}, -{77,1,-24}, -{77,1,-23}, -{77,1,-22}, -{77,1,-21}, -{77,1,-20}, -{77,1,-19}, -{77,1,-18}, -{77,1,-17}, -{77,1,-16}, -{77,1,-15}, -{77,1,-14}, -{77,1,-13}, -{77,1,-12}, -{77,1,-11}, -{77,1,-10}, -{77,1,-9}, -{77,1,-8}, -{77,1,-7}, -{77,1,-6}, -{77,1,-5}, -{77,1,-4}, -{77,1,-3}, -{77,1,-2}, -{77,1,-1}, -{77,1,0}, -{77,1,1}, -{77,1,2}, -{77,1,3}, -{77,1,4}, -{77,1,5}, -{77,1,6}, -{77,1,7}, -{77,1,8}, -{77,1,9}, -{77,1,10}, -{77,1,11}, -{77,1,12}, -{77,1,13}, -{77,1,14}, -{77,1,15}, -{77,1,16}, -{77,1,17}, -{77,1,18}, -{77,1,19}, -{77,1,20}, -{77,1,21}, -{77,1,22}, -{77,1,23}, -{77,1,24}, -{77,1,25}, -{77,1,26}, -{77,1,27}, -{77,1,28}, -{77,1,29}, -{77,1,30}, -{77,1,31}, -{77,1,32}, -{77,1,33}, -{77,1,34}, -{77,1,35}, -{77,1,36}, -{77,1,37}, -{77,1,38}, -{77,1,39}, -{77,1,40}, -{77,1,41}, -{77,1,42}, -{77,1,43}, -{77,1,44}, -{77,1,45}, -{77,1,46}, -{77,1,47}, -{77,1,48}, -{77,1,49}, -{77,1,50}, -{77,1,51}, -{77,1,52}, -{77,1,53}, -{77,1,54}, -{77,1,55}, -{77,1,56}, -{77,1,57}, -{77,1,58}, -{77,1,59}, -{77,1,60}, -{77,1,61}, -{77,1,62}, -{77,1,63}, -{77,1,64}, -{77,1,65}, -{77,1,66}, -{77,1,67}, -{77,1,68}, -{77,1,69}, -{77,1,70}, -{77,1,71}, -{77,1,72}, -{77,1,73}, -{77,1,74}, -{77,1,75}, -{77,1,76}, -{77,1,77}, -{77,1,78}, -{77,1,79}, -{77,2,-35}, -{77,2,-34}, -{77,2,-33}, -{77,2,-32}, -{77,2,-31}, -{77,2,-30}, -{77,2,-29}, -{77,2,-28}, -{77,2,-27}, -{77,2,-26}, -{77,2,-25}, -{77,2,-24}, -{77,2,-23}, -{77,2,-22}, -{77,2,-21}, -{77,2,-20}, -{77,2,-19}, -{77,2,-18}, -{77,2,-17}, -{77,2,-16}, -{77,2,-15}, -{77,2,-14}, -{77,2,-13}, -{77,2,-12}, -{77,2,-11}, -{77,2,-10}, -{77,2,-9}, -{77,2,-8}, -{77,2,-7}, -{77,2,-6}, -{77,2,-5}, -{77,2,-4}, -{77,2,-3}, -{77,2,-2}, -{77,2,-1}, -{77,2,0}, -{77,2,1}, -{77,2,2}, -{77,2,3}, -{77,2,4}, -{77,2,5}, -{77,2,6}, -{77,2,7}, -{77,2,8}, -{77,2,9}, -{77,2,10}, -{77,2,11}, -{77,2,12}, -{77,2,13}, -{77,2,14}, -{77,2,15}, -{77,2,16}, -{77,2,17}, -{77,2,18}, -{77,2,19}, -{77,2,20}, -{77,2,21}, -{77,2,22}, -{77,2,23}, -{77,2,24}, -{77,2,25}, -{77,2,26}, -{77,2,27}, -{77,2,28}, -{77,2,29}, -{77,2,30}, -{77,2,31}, -{77,2,32}, -{77,2,33}, -{77,2,34}, -{77,2,35}, -{77,2,36}, -{77,2,37}, -{77,2,38}, -{77,2,39}, -{77,2,40}, -{77,2,41}, -{77,2,42}, -{77,2,43}, -{77,2,44}, -{77,2,45}, -{77,2,46}, -{77,2,47}, -{77,2,48}, -{77,2,49}, -{77,2,50}, -{77,2,51}, -{77,2,52}, -{77,2,53}, -{77,2,54}, -{77,2,55}, -{77,2,56}, -{77,2,57}, -{77,2,58}, -{77,2,59}, -{77,2,60}, -{77,2,61}, -{77,2,62}, -{77,2,63}, -{77,2,64}, -{77,2,65}, -{77,2,66}, -{77,2,67}, -{77,2,68}, -{77,2,69}, -{77,2,70}, -{77,2,71}, -{77,2,72}, -{77,2,73}, -{77,2,74}, -{77,2,75}, -{77,2,76}, -{77,2,77}, -{77,2,78}, -{77,2,79}, -{77,3,-35}, -{77,3,-34}, -{77,3,-33}, -{77,3,-32}, -{77,3,-31}, -{77,3,-30}, -{77,3,-29}, -{77,3,-28}, -{77,3,-27}, -{77,3,-26}, -{77,3,-25}, -{77,3,-24}, -{77,3,-23}, -{77,3,-22}, -{77,3,-21}, -{77,3,-20}, -{77,3,-19}, -{77,3,-18}, -{77,3,-17}, -{77,3,-16}, -{77,3,-15}, -{77,3,-14}, -{77,3,-13}, -{77,3,-12}, -{77,3,-11}, -{77,3,-10}, -{77,3,-9}, -{77,3,-8}, -{77,3,-7}, -{77,3,-6}, -{77,3,-5}, -{77,3,-4}, -{77,3,-3}, -{77,3,-2}, -{77,3,-1}, -{77,3,0}, -{77,3,1}, -{77,3,2}, -{77,3,3}, -{77,3,4}, -{77,3,5}, -{77,3,6}, -{77,3,7}, -{77,3,8}, -{77,3,9}, -{77,3,10}, -{77,3,11}, -{77,3,12}, -{77,3,13}, -{77,3,14}, -{77,3,15}, -{77,3,16}, -{77,3,17}, -{77,3,18}, -{77,3,19}, -{77,3,20}, -{77,3,21}, -{77,3,22}, -{77,3,23}, -{77,3,24}, -{77,3,25}, -{77,3,26}, -{77,3,27}, -{77,3,28}, -{77,3,29}, -{77,3,30}, -{77,3,31}, -{77,3,32}, -{77,3,33}, -{77,3,34}, -{77,3,35}, -{77,3,36}, -{77,3,37}, -{77,3,38}, -{77,3,39}, -{77,3,40}, -{77,3,41}, -{77,3,42}, -{77,3,43}, -{77,3,44}, -{77,3,45}, -{77,3,46}, -{77,3,47}, -{77,3,48}, -{77,3,49}, -{77,3,50}, -{77,3,51}, -{77,3,52}, -{77,3,53}, -{77,3,54}, -{77,3,55}, -{77,3,56}, -{77,3,57}, -{77,3,58}, -{77,3,59}, -{77,3,60}, -{77,3,61}, -{77,3,62}, -{77,3,63}, -{77,3,64}, -{77,3,65}, -{77,3,66}, -{77,3,67}, -{77,3,68}, -{77,3,69}, -{77,3,70}, -{77,3,71}, -{77,3,72}, -{77,3,73}, -{77,3,74}, -{77,3,75}, -{77,3,76}, -{77,3,77}, -{77,3,78}, -{77,3,79}, -{77,4,-35}, -{77,4,-34}, -{77,4,-33}, -{77,4,-32}, -{77,4,-31}, -{77,4,-30}, -{77,4,-29}, -{77,4,-28}, -{77,4,-27}, -{77,4,-26}, -{77,4,-25}, -{77,4,-24}, -{77,4,-23}, -{77,4,-22}, -{77,4,-21}, -{77,4,-20}, -{77,4,-19}, -{77,4,-18}, -{77,4,-17}, -{77,4,-16}, -{77,4,-15}, -{77,4,-14}, -{77,4,-13}, -{77,4,-12}, -{77,4,-11}, -{77,4,-10}, -{77,4,-9}, -{77,4,-8}, -{77,4,-7}, -{77,4,-6}, -{77,4,-5}, -{77,4,-4}, -{77,4,-3}, -{77,4,-2}, -{77,4,-1}, -{77,4,0}, -{77,4,1}, -{77,4,2}, -{77,4,3}, -{77,4,4}, -{77,4,5}, -{77,4,6}, -{77,4,7}, -{77,4,8}, -{77,4,9}, -{77,4,10}, -{77,4,11}, -{77,4,12}, -{77,4,13}, -{77,4,14}, -{77,4,15}, -{77,4,16}, -{77,4,17}, -{77,4,18}, -{77,4,19}, -{77,4,20}, -{77,4,21}, -{77,4,22}, -{77,4,23}, -{77,4,24}, -{77,4,25}, -{77,4,26}, -{77,4,27}, -{77,4,28}, -{77,4,29}, -{77,4,30}, -{77,4,31}, -{77,4,32}, -{77,4,33}, -{77,4,34}, -{77,4,35}, -{77,4,36}, -{77,4,37}, -{77,4,38}, -{77,4,39}, -{77,4,40}, -{77,4,41}, -{77,4,42}, -{77,4,43}, -{77,4,44}, -{77,4,45}, -{77,4,46}, -{77,4,47}, -{77,4,48}, -{77,4,49}, -{77,4,50}, -{77,4,51}, -{77,4,52}, -{77,4,53}, -{77,4,54}, -{77,4,55}, -{77,4,56}, -{77,4,57}, -{77,4,58}, -{77,4,59}, -{77,4,60}, -{77,4,61}, -{77,4,62}, -{77,4,63}, -{77,4,64}, -{77,4,65}, -{77,4,66}, -{77,4,67}, -{77,4,68}, -{77,4,69}, -{77,4,70}, -{77,4,71}, -{77,4,72}, -{77,4,73}, -{77,4,74}, -{77,4,75}, -{77,4,76}, -{77,4,77}, -{77,4,78}, -{77,4,79}, -{77,5,-35}, -{77,5,-34}, -{77,5,-33}, -{77,5,-32}, -{77,5,-31}, -{77,5,-30}, -{77,5,-29}, -{77,5,-28}, -{77,5,-27}, -{77,5,-26}, -{77,5,-25}, -{77,5,-24}, -{77,5,-23}, -{77,5,-22}, -{77,5,-21}, -{77,5,-20}, -{77,5,-19}, -{77,5,-18}, -{77,5,-17}, -{77,5,-16}, -{77,5,-15}, -{77,5,-14}, -{77,5,-13}, -{77,5,-12}, -{77,5,-11}, -{77,5,-10}, -{77,5,-9}, -{77,5,-8}, -{77,5,-7}, -{77,5,-6}, -{77,5,-5}, -{77,5,-4}, -{77,5,-3}, -{77,5,-2}, -{77,5,-1}, -{77,5,0}, -{77,5,1}, -{77,5,2}, -{77,5,3}, -{77,5,4}, -{77,5,5}, -{77,5,6}, -{77,5,7}, -{77,5,8}, -{77,5,9}, -{77,5,10}, -{77,5,11}, -{77,5,12}, -{77,5,13}, -{77,5,14}, -{77,5,15}, -{77,5,16}, -{77,5,17}, -{77,5,18}, -{77,5,19}, -{77,5,20}, -{77,5,21}, -{77,5,22}, -{77,5,23}, -{77,5,24}, -{77,5,25}, -{77,5,26}, -{77,5,27}, -{77,5,28}, -{77,5,29}, -{77,5,30}, -{77,5,31}, -{77,5,32}, -{77,5,33}, -{77,5,34}, -{77,5,35}, -{77,5,36}, -{77,5,37}, -{77,5,38}, -{77,5,39}, -{77,5,40}, -{77,5,41}, -{77,5,42}, -{77,5,43}, -{77,5,44}, -{77,5,45}, -{77,5,46}, -{77,5,47}, -{77,5,48}, -{77,5,49}, -{77,5,50}, -{77,5,51}, -{77,5,52}, -{77,5,53}, -{77,5,54}, -{77,5,55}, -{77,5,56}, -{77,5,57}, -{77,5,58}, -{77,5,59}, -{77,5,60}, -{77,5,61}, -{77,5,62}, -{77,5,63}, -{77,5,64}, -{77,5,65}, -{77,5,66}, -{77,5,67}, -{77,5,68}, -{77,5,69}, -{77,5,70}, -{77,5,71}, -{77,5,72}, -{77,5,73}, -{77,5,74}, -{77,5,75}, -{77,5,76}, -{77,5,77}, -{77,5,78}, -{77,5,79}, -{77,6,-35}, -{77,6,-34}, -{77,6,-33}, -{77,6,-32}, -{77,6,-31}, -{77,6,-30}, -{77,6,-29}, -{77,6,-28}, -{77,6,-27}, -{77,6,-26}, -{77,6,-25}, -{77,6,-24}, -{77,6,-23}, -{77,6,-22}, -{77,6,-21}, -{77,6,-20}, -{77,6,-19}, -{77,6,-18}, -{77,6,-17}, -{77,6,-16}, -{77,6,-15}, -{77,6,-14}, -{77,6,-13}, -{77,6,-12}, -{77,6,-11}, -{77,6,-10}, -{77,6,-9}, -{77,6,-8}, -{77,6,-7}, -{77,6,-6}, -{77,6,-5}, -{77,6,-4}, -{77,6,-3}, -{77,6,-2}, -{77,6,-1}, -{77,6,0}, -{77,6,1}, -{77,6,2}, -{77,6,3}, -{77,6,4}, -{77,6,5}, -{77,6,6}, -{77,6,7}, -{77,6,8}, -{77,6,9}, -{77,6,10}, -{77,6,11}, -{77,6,12}, -{77,6,13}, -{77,6,14}, -{77,6,15}, -{77,6,16}, -{77,6,17}, -{77,6,18}, -{77,6,19}, -{77,6,20}, -{77,6,21}, -{77,6,22}, -{77,6,23}, -{77,6,24}, -{77,6,25}, -{77,6,26}, -{77,6,27}, -{77,6,28}, -{77,6,29}, -{77,6,30}, -{77,6,31}, -{77,6,32}, -{77,6,33}, -{77,6,34}, -{77,6,35}, -{77,6,36}, -{77,6,37}, -{77,6,38}, -{77,6,39}, -{77,6,40}, -{77,6,41}, -{77,6,42}, -{77,6,43}, -{77,6,44}, -{77,6,45}, -{77,6,46}, -{77,6,47}, -{77,6,48}, -{77,6,49}, -{77,6,50}, -{77,6,51}, -{77,6,52}, -{77,6,53}, -{77,6,54}, -{77,6,55}, -{77,6,56}, -{77,6,57}, -{77,6,58}, -{77,6,59}, -{77,6,60}, -{77,6,61}, -{77,6,62}, -{77,6,63}, -{77,6,64}, -{77,6,65}, -{77,6,66}, -{77,6,67}, -{77,6,68}, -{77,6,69}, -{77,6,70}, -{77,6,71}, -{77,6,72}, -{77,6,73}, -{77,6,74}, -{77,6,75}, -{77,6,76}, -{77,6,77}, -{77,6,78}, -{77,6,79}, -{77,7,-35}, -{77,7,-34}, -{77,7,-33}, -{77,7,-32}, -{77,7,-31}, -{77,7,-30}, -{77,7,-29}, -{77,7,-28}, -{77,7,-27}, -{77,7,-26}, -{77,7,-25}, -{77,7,-24}, -{77,7,-23}, -{77,7,-22}, -{77,7,-21}, -{77,7,-20}, -{77,7,-19}, -{77,7,-18}, -{77,7,-17}, -{77,7,-16}, -{77,7,-15}, -{77,7,-14}, -{77,7,-13}, -{77,7,-12}, -{77,7,-11}, -{77,7,-10}, -{77,7,-9}, -{77,7,-8}, -{77,7,-7}, -{77,7,-6}, -{77,7,-5}, -{77,7,-4}, -{77,7,-3}, -{77,7,-2}, -{77,7,-1}, -{77,7,0}, -{77,7,1}, -{77,7,2}, -{77,7,3}, -{77,7,4}, -{77,7,5}, -{77,7,6}, -{77,7,7}, -{77,7,8}, -{77,7,9}, -{77,7,10}, -{77,7,11}, -{77,7,12}, -{77,7,13}, -{77,7,14}, -{77,7,15}, -{77,7,16}, -{77,7,17}, -{77,7,18}, -{77,7,19}, -{77,7,20}, -{77,7,21}, -{77,7,22}, -{77,7,23}, -{77,7,24}, -{77,7,25}, -{77,7,26}, -{77,7,27}, -{77,7,28}, -{77,7,29}, -{77,7,30}, -{77,7,31}, -{77,7,32}, -{77,7,33}, -{77,7,34}, -{77,7,35}, -{77,7,36}, -{77,7,37}, -{77,7,38}, -{77,7,39}, -{77,7,40}, -{77,7,41}, -{77,7,42}, -{77,7,43}, -{77,7,44}, -{77,7,45}, -{77,7,46}, -{77,7,47}, -{77,7,48}, -{77,7,49}, -{77,7,50}, -{77,7,51}, -{77,7,52}, -{77,7,53}, -{77,7,54}, -{77,7,55}, -{77,7,56}, -{77,7,57}, -{77,7,58}, -{77,7,59}, -{77,7,60}, -{77,7,61}, -{77,7,62}, -{77,7,63}, -{77,7,64}, -{77,7,65}, -{77,7,66}, -{77,7,67}, -{77,7,68}, -{77,7,69}, -{77,7,70}, -{77,7,71}, -{77,7,72}, -{77,7,73}, -{77,7,74}, -{77,7,75}, -{77,7,76}, -{77,7,77}, -{77,7,78}, -{77,7,79}, -{77,8,-35}, -{77,8,-34}, -{77,8,-33}, -{77,8,-32}, -{77,8,-31}, -{77,8,-30}, -{77,8,-29}, -{77,8,-28}, -{77,8,-27}, -{77,8,-26}, -{77,8,-25}, -{77,8,-24}, -{77,8,-23}, -{77,8,-22}, -{77,8,-21}, -{77,8,-20}, -{77,8,-19}, -{77,8,-18}, -{77,8,-17}, -{77,8,-16}, -{77,8,-15}, -{77,8,-14}, -{77,8,-13}, -{77,8,-12}, -{77,8,-11}, -{77,8,-10}, -{77,8,-9}, -{77,8,-8}, -{77,8,-7}, -{77,8,-6}, -{77,8,-5}, -{77,8,-4}, -{77,8,-3}, -{77,8,-2}, -{77,8,-1}, -{77,8,0}, -{77,8,1}, -{77,8,2}, -{77,8,3}, -{77,8,4}, -{77,8,5}, -{77,8,6}, -{77,8,7}, -{77,8,8}, -{77,8,9}, -{77,8,10}, -{77,8,11}, -{77,8,12}, -{77,8,13}, -{77,8,14}, -{77,8,15}, -{77,8,16}, -{77,8,17}, -{77,8,18}, -{77,8,19}, -{77,8,20}, -{77,8,21}, -{77,8,22}, -{77,8,23}, -{77,8,24}, -{77,8,25}, -{77,8,26}, -{77,8,27}, -{77,8,28}, -{77,8,29}, -{77,8,30}, -{77,8,31}, -{77,8,32}, -{77,8,33}, -{77,8,34}, -{77,8,35}, -{77,8,36}, -{77,8,37}, -{77,8,38}, -{77,8,39}, -{77,8,40}, -{77,8,41}, -{77,8,42}, -{77,8,43}, -{77,8,44}, -{77,8,45}, -{77,8,46}, -{77,8,47}, -{77,8,48}, -{77,8,49}, -{77,8,50}, -{77,8,51}, -{77,8,52}, -{77,8,53}, -{77,8,54}, -{77,8,55}, -{77,8,56}, -{77,8,57}, -{77,8,58}, -{77,8,59}, -{77,8,60}, -{77,8,61}, -{77,8,62}, -{77,8,63}, -{77,8,64}, -{77,8,65}, -{77,8,66}, -{77,8,67}, -{77,8,68}, -{77,8,69}, -{77,8,70}, -{77,8,71}, -{77,8,72}, -{77,8,73}, -{77,8,74}, -{77,8,75}, -{77,8,76}, -{77,8,77}, -{77,8,78}, -{77,8,79}, -{77,9,-35}, -{77,9,-34}, -{77,9,-33}, -{77,9,-32}, -{77,9,-31}, -{77,9,-30}, -{77,9,-29}, -{77,9,-28}, -{77,9,-27}, -{77,9,-26}, -{77,9,-25}, -{77,9,-24}, -{77,9,-23}, -{77,9,-22}, -{77,9,-21}, -{77,9,-20}, -{77,9,-19}, -{77,9,-18}, -{77,9,-17}, -{77,9,-16}, -{77,9,-15}, -{77,9,-14}, -{77,9,-13}, -{77,9,-12}, -{77,9,-11}, -{77,9,-10}, -{77,9,-9}, -{77,9,-8}, -{77,9,-7}, -{77,9,-6}, -{77,9,-5}, -{77,9,-4}, -{77,9,-3}, -{77,9,-2}, -{77,9,-1}, -{77,9,0}, -{77,9,1}, -{77,9,2}, -{77,9,3}, -{77,9,4}, -{77,9,5}, -{77,9,6}, -{77,9,7}, -{77,9,8}, -{77,9,9}, -{77,9,10}, -{77,9,11}, -{77,9,12}, -{77,9,13}, -{77,9,14}, -{77,9,15}, -{77,9,16}, -{77,9,17}, -{77,9,18}, -{77,9,19}, -{77,9,20}, -{77,9,21}, -{77,9,22}, -{77,9,23}, -{77,9,24}, -{77,9,25}, -{77,9,26}, -{77,9,27}, -{77,9,28}, -{77,9,29}, -{77,9,30}, -{77,9,31}, -{77,9,32}, -{77,9,33}, -{77,9,34}, -{77,9,35}, -{77,9,36}, -{77,9,37}, -{77,9,38}, -{77,9,39}, -{77,9,40}, -{77,9,41}, -{77,9,42}, -{77,9,43}, -{77,9,44}, -{77,9,45}, -{77,9,46}, -{77,9,47}, -{77,9,48}, -{77,9,49}, -{77,9,50}, -{77,9,51}, -{77,9,52}, -{77,9,53}, -{77,9,54}, -{77,9,55}, -{77,9,56}, -{77,9,57}, -{77,9,58}, -{77,9,59}, -{77,9,60}, -{77,9,61}, -{77,9,62}, -{77,9,63}, -{77,9,64}, -{77,9,65}, -{77,9,66}, -{77,9,67}, -{77,9,68}, -{77,9,69}, -{77,9,70}, -{77,9,71}, -{77,9,72}, -{77,9,73}, -{77,9,74}, -{77,9,75}, -{77,9,76}, -{77,9,77}, -{77,9,78}, -{77,9,79}, -{77,10,-35}, -{77,10,-34}, -{77,10,-33}, -{77,10,-32}, -{77,10,-31}, -{77,10,-30}, -{77,10,-29}, -{77,10,-28}, -{77,10,-27}, -{77,10,-26}, -{77,10,-25}, -{77,10,-24}, -{77,10,-23}, -{77,10,-22}, -{77,10,-21}, -{77,10,-20}, -{77,10,-19}, -{77,10,-18}, -{77,10,-17}, -{77,10,-16}, -{77,10,-15}, -{77,10,-14}, -{77,10,-13}, -{77,10,-12}, -{77,10,-11}, -{77,10,-10}, -{77,10,-9}, -{77,10,-8}, -{77,10,-7}, -{77,10,-6}, -{77,10,-5}, -{77,10,-4}, -{77,10,-3}, -{77,10,-2}, -{77,10,-1}, -{77,10,0}, -{77,10,1}, -{77,10,2}, -{77,10,3}, -{77,10,4}, -{77,10,5}, -{77,10,6}, -{77,10,7}, -{77,10,8}, -{77,10,9}, -{77,10,10}, -{77,10,11}, -{77,10,12}, -{77,10,13}, -{77,10,14}, -{77,10,15}, -{77,10,16}, -{77,10,17}, -{77,10,18}, -{77,10,19}, -{77,10,20}, -{77,10,21}, -{77,10,22}, -{77,10,23}, -{77,10,24}, -{77,10,25}, -{77,10,26}, -{77,10,27}, -{77,10,28}, -{77,10,29}, -{77,10,30}, -{77,10,31}, -{77,10,32}, -{77,10,33}, -{77,10,34}, -{77,10,35}, -{77,10,36}, -{77,10,37}, -{77,10,38}, -{77,10,39}, -{77,10,40}, -{77,10,41}, -{77,10,42}, -{77,10,43}, -{77,10,44}, -{77,10,45}, -{77,10,46}, -{77,10,47}, -{77,10,48}, -{77,10,49}, -{77,10,50}, -{77,10,51}, -{77,10,52}, -{77,10,53}, -{77,10,54}, -{77,10,55}, -{77,10,56}, -{77,10,57}, -{77,10,58}, -{77,10,59}, -{77,10,60}, -{77,10,61}, -{77,10,62}, -{77,10,63}, -{77,10,64}, -{77,10,65}, -{77,10,66}, -{77,10,67}, -{77,10,68}, -{77,10,69}, -{77,10,70}, -{77,10,71}, -{77,10,72}, -{77,10,73}, -{77,10,74}, -{77,10,75}, -{77,10,76}, -{77,10,77}, -{77,10,78}, -{77,10,79}, -{77,11,-35}, -{77,11,-34}, -{77,11,-33}, -{77,11,-32}, -{77,11,-31}, -{77,11,-30}, -{77,11,-29}, -{77,11,-28}, -{77,11,-27}, -{77,11,-26}, -{77,11,-25}, -{77,11,-24}, -{77,11,-23}, -{77,11,-22}, -{77,11,-21}, -{77,11,-20}, -{77,11,-19}, -{77,11,-18}, -{77,11,-17}, -{77,11,-16}, -{77,11,-15}, -{77,11,-14}, -{77,11,-13}, -{77,11,-12}, -{77,11,-11}, -{77,11,-10}, -{77,11,-9}, -{77,11,-8}, -{77,11,-7}, -{77,11,-6}, -{77,11,-5}, -{77,11,-4}, -{77,11,-3}, -{77,11,-2}, -{77,11,-1}, -{77,11,0}, -{77,11,1}, -{77,11,2}, -{77,11,3}, -{77,11,4}, -{77,11,5}, -{77,11,6}, -{77,11,7}, -{77,11,8}, -{77,11,9}, -{77,11,10}, -{77,11,11}, -{77,11,12}, -{77,11,13}, -{77,11,14}, -{77,11,15}, -{77,11,16}, -{77,11,17}, -{77,11,18}, -{77,11,19}, -{77,11,20}, -{77,11,21}, -{77,11,22}, -{77,11,23}, -{77,11,24}, -{77,11,25}, -{77,11,26}, -{77,11,27}, -{77,11,28}, -{77,11,29}, -{77,11,30}, -{77,11,31}, -{77,11,32}, -{77,11,33}, -{77,11,34}, -{77,11,35}, -{77,11,36}, -{77,11,37}, -{77,11,38}, -{77,11,39}, -{77,11,40}, -{77,11,41}, -{77,11,42}, -{77,11,43}, -{77,11,44}, -{77,11,45}, -{77,11,46}, -{77,11,47}, -{77,11,48}, -{77,11,49}, -{77,11,50}, -{77,11,51}, -{77,11,52}, -{77,11,53}, -{77,11,54}, -{77,11,55}, -{77,11,56}, -{77,11,57}, -{77,11,58}, -{77,11,59}, -{77,11,60}, -{77,11,61}, -{77,11,62}, -{77,11,63}, -{77,11,64}, -{77,11,65}, -{77,11,66}, -{77,11,67}, -{77,11,68}, -{77,11,69}, -{77,11,70}, -{77,11,71}, -{77,11,72}, -{77,11,73}, -{77,11,74}, -{77,11,75}, -{77,11,76}, -{77,11,77}, -{77,11,78}, -{77,11,79}, -{77,12,-35}, -{77,12,-34}, -{77,12,-33}, -{77,12,-32}, -{77,12,-31}, -{77,12,-30}, -{77,12,-29}, -{77,12,-28}, -{77,12,-27}, -{77,12,-26}, -{77,12,-25}, -{77,12,-24}, -{77,12,-23}, -{77,12,-22}, -{77,12,-21}, -{77,12,-20}, -{77,12,-19}, -{77,12,-18}, -{77,12,-17}, -{77,12,-16}, -{77,12,-15}, -{77,12,-14}, -{77,12,-13}, -{77,12,-12}, -{77,12,-11}, -{77,12,-10}, -{77,12,-9}, -{77,12,-8}, -{77,12,-7}, -{77,12,-6}, -{77,12,-5}, -{77,12,-4}, -{77,12,-3}, -{77,12,-2}, -{77,12,-1}, -{77,12,0}, -{77,12,1}, -{77,12,2}, -{77,12,3}, -{77,12,4}, -{77,12,5}, -{77,12,6}, -{77,12,7}, -{77,12,8}, -{77,12,9}, -{77,12,10}, -{77,12,11}, -{77,12,12}, -{77,12,13}, -{77,12,14}, -{77,12,15}, -{77,12,16}, -{77,12,17}, -{77,12,18}, -{77,12,19}, -{77,12,20}, -{77,12,21}, -{77,12,22}, -{77,12,23}, -{77,12,24}, -{77,12,25}, -{77,12,26}, -{77,12,27}, -{77,12,28}, -{77,12,29}, -{77,12,30}, -{77,12,31}, -{77,12,32}, -{77,12,33}, -{77,12,34}, -{77,12,35}, -{77,12,36}, -{77,12,37}, -{77,12,38}, -{77,12,39}, -{77,12,40}, -{77,12,41}, -{77,12,42}, -{77,12,43}, -{77,12,44}, -{77,12,45}, -{77,12,46}, -{77,12,47}, -{77,12,48}, -{77,12,49}, -{77,12,50}, -{77,12,51}, -{77,12,52}, -{77,12,53}, -{77,12,54}, -{77,12,55}, -{77,12,56}, -{77,12,57}, -{77,12,58}, -{77,12,59}, -{77,12,60}, -{77,12,61}, -{77,12,62}, -{77,12,63}, -{77,12,64}, -{77,12,65}, -{77,12,66}, -{77,12,67}, -{77,12,68}, -{77,12,69}, -{77,12,70}, -{77,12,71}, -{77,12,72}, -{77,12,73}, -{77,12,74}, -{77,12,75}, -{77,12,76}, -{77,12,77}, -{77,12,78}, -{77,12,79}, -{77,13,-35}, -{77,13,-34}, -{77,13,-33}, -{77,13,-32}, -{77,13,-31}, -{77,13,-30}, -{77,13,-29}, -{77,13,-28}, -{77,13,-27}, -{77,13,-26}, -{77,13,-25}, -{77,13,-24}, -{77,13,-23}, -{77,13,-22}, -{77,13,-21}, -{77,13,-20}, -{77,13,-19}, -{77,13,-18}, -{77,13,-17}, -{77,13,-16}, -{77,13,-15}, -{77,13,-14}, -{77,13,-13}, -{77,13,-12}, -{77,13,-11}, -{77,13,-10}, -{77,13,-9}, -{77,13,-8}, -{77,13,-7}, -{77,13,-6}, -{77,13,-5}, -{77,13,-4}, -{77,13,-3}, -{77,13,-2}, -{77,13,-1}, -{77,13,0}, -{77,13,1}, -{77,13,2}, -{77,13,3}, -{77,13,4}, -{77,13,5}, -{77,13,6}, -{77,13,7}, -{77,13,8}, -{77,13,9}, -{77,13,10}, -{77,13,11}, -{77,13,12}, -{77,13,13}, -{77,13,14}, -{77,13,15}, -{77,13,16}, -{77,13,17}, -{77,13,18}, -{77,13,19}, -{77,13,20}, -{77,13,21}, -{77,13,22}, -{77,13,23}, -{77,13,24}, -{77,13,25}, -{77,13,26}, -{77,13,27}, -{77,13,28}, -{77,13,29}, -{77,13,30}, -{77,13,31}, -{77,13,32}, -{77,13,33}, -{77,13,34}, -{77,13,35}, -{77,13,36}, -{77,13,37}, -{77,13,38}, -{77,13,39}, -{77,13,40}, -{77,13,41}, -{77,13,42}, -{77,13,43}, -{77,13,44}, -{77,13,45}, -{77,13,46}, -{77,13,47}, -{77,13,48}, -{77,13,49}, -{77,13,50}, -{77,13,51}, -{77,13,52}, -{77,13,53}, -{77,13,54}, -{77,13,55}, -{77,13,56}, -{77,13,57}, -{77,13,58}, -{77,13,59}, -{77,13,60}, -{77,13,61}, -{77,13,62}, -{77,13,63}, -{77,13,64}, -{77,13,65}, -{77,13,66}, -{77,13,67}, -{77,13,68}, -{77,13,69}, -{77,13,70}, -{77,13,71}, -{77,13,72}, -{77,13,73}, -{77,13,74}, -{77,13,75}, -{77,13,76}, -{77,13,77}, -{77,13,78}, -{77,13,79}, -{77,13,80}, -{77,14,-35}, -{77,14,-34}, -{77,14,-33}, -{77,14,-32}, -{77,14,-31}, -{77,14,-30}, -{77,14,-29}, -{77,14,-28}, -{77,14,-27}, -{77,14,-26}, -{77,14,-25}, -{77,14,-24}, -{77,14,-23}, -{77,14,-22}, -{77,14,-21}, -{77,14,-20}, -{77,14,-19}, -{77,14,-18}, -{77,14,-17}, -{77,14,-16}, -{77,14,-15}, -{77,14,-14}, -{77,14,-13}, -{77,14,-12}, -{77,14,-11}, -{77,14,-10}, -{77,14,-9}, -{77,14,-8}, -{77,14,-7}, -{77,14,-6}, -{77,14,-5}, -{77,14,-4}, -{77,14,-3}, -{77,14,-2}, -{77,14,-1}, -{77,14,0}, -{77,14,1}, -{77,14,2}, -{77,14,3}, -{77,14,4}, -{77,14,5}, -{77,14,6}, -{77,14,7}, -{77,14,8}, -{77,14,9}, -{77,14,10}, -{77,14,11}, -{77,14,12}, -{77,14,13}, -{77,14,14}, -{77,14,15}, -{77,14,16}, -{77,14,17}, -{77,14,18}, -{77,14,19}, -{77,14,20}, -{77,14,21}, -{77,14,22}, -{77,14,23}, -{77,14,24}, -{77,14,25}, -{77,14,26}, -{77,14,27}, -{77,14,28}, -{77,14,29}, -{77,14,30}, -{77,14,31}, -{77,14,32}, -{77,14,33}, -{77,14,34}, -{77,14,35}, -{77,14,36}, -{77,14,37}, -{77,14,38}, -{77,14,39}, -{77,14,40}, -{77,14,41}, -{77,14,42}, -{77,14,43}, -{77,14,44}, -{77,14,45}, -{77,14,46}, -{77,14,47}, -{77,14,48}, -{77,14,49}, -{77,14,50}, -{77,14,51}, -{77,14,52}, -{77,14,53}, -{77,14,54}, -{77,14,55}, -{77,14,56}, -{77,14,57}, -{77,14,58}, -{77,14,59}, -{77,14,60}, -{77,14,61}, -{77,14,62}, -{77,14,63}, -{77,14,64}, -{77,14,65}, -{77,14,66}, -{77,14,67}, -{77,14,68}, -{77,14,69}, -{77,14,70}, -{77,14,71}, -{77,14,72}, -{77,14,73}, -{77,14,74}, -{77,14,75}, -{77,14,76}, -{77,14,77}, -{77,14,78}, -{77,14,79}, -{77,14,80}, -{77,15,-35}, -{77,15,-34}, -{77,15,-33}, -{77,15,-32}, -{77,15,-31}, -{77,15,-30}, -{77,15,-29}, -{77,15,-28}, -{77,15,-27}, -{77,15,-26}, -{77,15,-25}, -{77,15,-24}, -{77,15,-23}, -{77,15,-22}, -{77,15,-21}, -{77,15,-20}, -{77,15,-19}, -{77,15,-18}, -{77,15,-17}, -{77,15,-16}, -{77,15,-15}, -{77,15,-14}, -{77,15,-13}, -{77,15,-12}, -{77,15,-11}, -{77,15,-10}, -{77,15,-9}, -{77,15,-8}, -{77,15,-7}, -{77,15,-6}, -{77,15,-5}, -{77,15,-4}, -{77,15,-3}, -{77,15,-2}, -{77,15,-1}, -{77,15,0}, -{77,15,1}, -{77,15,2}, -{77,15,3}, -{77,15,4}, -{77,15,5}, -{77,15,6}, -{77,15,7}, -{77,15,8}, -{77,15,9}, -{77,15,10}, -{77,15,11}, -{77,15,12}, -{77,15,13}, -{77,15,14}, -{77,15,15}, -{77,15,16}, -{77,15,17}, -{77,15,18}, -{77,15,19}, -{77,15,20}, -{77,15,21}, -{77,15,22}, -{77,15,23}, -{77,15,24}, -{77,15,25}, -{77,15,26}, -{77,15,27}, -{77,15,28}, -{77,15,29}, -{77,15,30}, -{77,15,31}, -{77,15,32}, -{77,15,33}, -{77,15,34}, -{77,15,35}, -{77,15,36}, -{77,15,37}, -{77,15,38}, -{77,15,39}, -{77,15,40}, -{77,15,41}, -{77,15,42}, -{77,15,43}, -{77,15,44}, -{77,15,45}, -{77,15,46}, -{77,15,47}, -{77,15,48}, -{77,15,49}, -{77,15,50}, -{77,15,51}, -{77,15,52}, -{77,15,53}, -{77,15,54}, -{77,15,55}, -{77,15,56}, -{77,15,57}, -{77,15,58}, -{77,15,59}, -{77,15,60}, -{77,15,61}, -{77,15,62}, -{77,15,63}, -{77,15,64}, -{77,15,65}, -{77,15,66}, -{77,15,67}, -{77,15,68}, -{77,15,69}, -{77,15,70}, -{77,15,71}, -{77,15,72}, -{77,15,73}, -{77,15,74}, -{77,15,75}, -{77,15,76}, -{77,15,77}, -{77,15,78}, -{77,15,79}, -{77,15,80}, -{77,16,-35}, -{77,16,-34}, -{77,16,-33}, -{77,16,-32}, -{77,16,-31}, -{77,16,-30}, -{77,16,-29}, -{77,16,-28}, -{77,16,-27}, -{77,16,-26}, -{77,16,-25}, -{77,16,-24}, -{77,16,-23}, -{77,16,-22}, -{77,16,-21}, -{77,16,-20}, -{77,16,-19}, -{77,16,-18}, -{77,16,-17}, -{77,16,-16}, -{77,16,-15}, -{77,16,-14}, -{77,16,-13}, -{77,16,-12}, -{77,16,-11}, -{77,16,-10}, -{77,16,-9}, -{77,16,-8}, -{77,16,-7}, -{77,16,-6}, -{77,16,-5}, -{77,16,-4}, -{77,16,-3}, -{77,16,-2}, -{77,16,-1}, -{77,16,0}, -{77,16,1}, -{77,16,2}, -{77,16,3}, -{77,16,4}, -{77,16,5}, -{77,16,6}, -{77,16,7}, -{77,16,8}, -{77,16,9}, -{77,16,10}, -{77,16,11}, -{77,16,12}, -{77,16,13}, -{77,16,14}, -{77,16,15}, -{77,16,16}, -{77,16,17}, -{77,16,18}, -{77,16,19}, -{77,16,20}, -{77,16,21}, -{77,16,22}, -{77,16,23}, -{77,16,24}, -{77,16,25}, -{77,16,26}, -{77,16,27}, -{77,16,28}, -{77,16,29}, -{77,16,30}, -{77,16,31}, -{77,16,32}, -{77,16,33}, -{77,16,34}, -{77,16,35}, -{77,16,36}, -{77,16,37}, -{77,16,38}, -{77,16,39}, -{77,16,40}, -{77,16,41}, -{77,16,42}, -{77,16,43}, -{77,16,44}, -{77,16,45}, -{77,16,46}, -{77,16,47}, -{77,16,48}, -{77,16,49}, -{77,16,50}, -{77,16,51}, -{77,16,52}, -{77,16,53}, -{77,16,54}, -{77,16,55}, -{77,16,56}, -{77,16,57}, -{77,16,58}, -{77,16,59}, -{77,16,60}, -{77,16,61}, -{77,16,62}, -{77,16,63}, -{77,16,64}, -{77,16,65}, -{77,16,66}, -{77,16,67}, -{77,16,68}, -{77,16,69}, -{77,16,70}, -{77,16,71}, -{77,16,72}, -{77,16,73}, -{77,16,74}, -{77,16,75}, -{77,16,76}, -{77,16,77}, -{77,16,78}, -{77,16,79}, -{77,16,80}, -{77,17,-35}, -{77,17,-34}, -{77,17,-33}, -{77,17,-32}, -{77,17,-31}, -{77,17,-30}, -{77,17,-29}, -{77,17,-28}, -{77,17,-27}, -{77,17,-26}, -{77,17,-25}, -{77,17,-24}, -{77,17,-23}, -{77,17,-22}, -{77,17,-21}, -{77,17,-20}, -{77,17,-19}, -{77,17,-18}, -{77,17,-17}, -{77,17,-16}, -{77,17,-15}, -{77,17,-14}, -{77,17,-13}, -{77,17,-12}, -{77,17,-11}, -{77,17,-10}, -{77,17,-9}, -{77,17,-8}, -{77,17,-7}, -{77,17,-6}, -{77,17,-5}, -{77,17,-4}, -{77,17,-3}, -{77,17,-2}, -{77,17,-1}, -{77,17,0}, -{77,17,1}, -{77,17,2}, -{77,17,3}, -{77,17,4}, -{77,17,5}, -{77,17,6}, -{77,17,7}, -{77,17,8}, -{77,17,9}, -{77,17,10}, -{77,17,11}, -{77,17,12}, -{77,17,13}, -{77,17,14}, -{77,17,15}, -{77,17,16}, -{77,17,17}, -{77,17,18}, -{77,17,19}, -{77,17,20}, -{77,17,21}, -{77,17,22}, -{77,17,23}, -{77,17,24}, -{77,17,25}, -{77,17,26}, -{77,17,27}, -{77,17,28}, -{77,17,29}, -{77,17,30}, -{77,17,31}, -{77,17,32}, -{77,17,33}, -{77,17,34}, -{77,17,35}, -{77,17,36}, -{77,17,37}, -{77,17,38}, -{77,17,39}, -{77,17,40}, -{77,17,41}, -{77,17,42}, -{77,17,43}, -{77,17,44}, -{77,17,45}, -{77,17,46}, -{77,17,47}, -{77,17,48}, -{77,17,49}, -{77,17,50}, -{77,17,51}, -{77,17,52}, -{77,17,53}, -{77,17,54}, -{77,17,55}, -{77,17,56}, -{77,17,57}, -{77,17,58}, -{77,17,59}, -{77,17,60}, -{77,17,61}, -{77,17,62}, -{77,17,63}, -{77,17,64}, -{77,17,65}, -{77,17,66}, -{77,17,67}, -{77,17,68}, -{77,17,69}, -{77,17,70}, -{77,17,71}, -{77,17,72}, -{77,17,73}, -{77,17,74}, -{77,17,75}, -{77,17,76}, -{77,17,77}, -{77,17,78}, -{77,17,79}, -{77,17,80}, -{77,18,-35}, -{77,18,-34}, -{77,18,-33}, -{77,18,-32}, -{77,18,-31}, -{77,18,-30}, -{77,18,-29}, -{77,18,-28}, -{77,18,-27}, -{77,18,-26}, -{77,18,-25}, -{77,18,-24}, -{77,18,-23}, -{77,18,-22}, -{77,18,-21}, -{77,18,-20}, -{77,18,-19}, -{77,18,-18}, -{77,18,-17}, -{77,18,-16}, -{77,18,-15}, -{77,18,-14}, -{77,18,-13}, -{77,18,-12}, -{77,18,-11}, -{77,18,-10}, -{77,18,-9}, -{77,18,-8}, -{77,18,-7}, -{77,18,-6}, -{77,18,-5}, -{77,18,-4}, -{77,18,-3}, -{77,18,-2}, -{77,18,-1}, -{77,18,0}, -{77,18,1}, -{77,18,2}, -{77,18,3}, -{77,18,4}, -{77,18,5}, -{77,18,6}, -{77,18,7}, -{77,18,8}, -{77,18,9}, -{77,18,10}, -{77,18,11}, -{77,18,12}, -{77,18,13}, -{77,18,14}, -{77,18,15}, -{77,18,16}, -{77,18,17}, -{77,18,18}, -{77,18,19}, -{77,18,20}, -{77,18,21}, -{77,18,22}, -{77,18,23}, -{77,18,24}, -{77,18,25}, -{77,18,26}, -{77,18,27}, -{77,18,28}, -{77,18,29}, -{77,18,30}, -{77,18,31}, -{77,18,32}, -{77,18,33}, -{77,18,34}, -{77,18,35}, -{77,18,36}, -{77,18,37}, -{77,18,38}, -{77,18,39}, -{77,18,40}, -{77,18,41}, -{77,18,42}, -{77,18,43}, -{77,18,44}, -{77,18,45}, -{77,18,46}, -{77,18,47}, -{77,18,48}, -{77,18,49}, -{77,18,50}, -{77,18,51}, -{77,18,52}, -{77,18,53}, -{77,18,54}, -{77,18,55}, -{77,18,56}, -{77,18,57}, -{77,18,58}, -{77,18,59}, -{77,18,60}, -{77,18,61}, -{77,18,62}, -{77,18,63}, -{77,18,64}, -{77,18,65}, -{77,18,66}, -{77,18,67}, -{77,18,68}, -{77,18,69}, -{77,18,70}, -{77,18,71}, -{77,18,72}, -{77,18,73}, -{77,18,74}, -{77,18,75}, -{77,18,76}, -{77,18,77}, -{77,18,78}, -{77,18,79}, -{77,18,80}, -{77,19,-35}, -{77,19,-34}, -{77,19,-33}, -{77,19,-32}, -{77,19,-31}, -{77,19,-30}, -{77,19,-29}, -{77,19,-28}, -{77,19,-27}, -{77,19,-26}, -{77,19,-25}, -{77,19,-24}, -{77,19,-23}, -{77,19,-22}, -{77,19,-21}, -{77,19,-20}, -{77,19,-19}, -{77,19,-18}, -{77,19,-17}, -{77,19,-16}, -{77,19,-15}, -{77,19,-14}, -{77,19,-13}, -{77,19,-12}, -{77,19,-11}, -{77,19,-10}, -{77,19,-9}, -{77,19,-8}, -{77,19,-7}, -{77,19,-6}, -{77,19,-5}, -{77,19,-4}, -{77,19,-3}, -{77,19,-2}, -{77,19,-1}, -{77,19,0}, -{77,19,1}, -{77,19,2}, -{77,19,3}, -{77,19,4}, -{77,19,5}, -{77,19,6}, -{77,19,7}, -{77,19,8}, -{77,19,9}, -{77,19,10}, -{77,19,11}, -{77,19,12}, -{77,19,13}, -{77,19,14}, -{77,19,15}, -{77,19,16}, -{77,19,17}, -{77,19,18}, -{77,19,19}, -{77,19,20}, -{77,19,21}, -{77,19,22}, -{77,19,23}, -{77,19,24}, -{77,19,25}, -{77,19,26}, -{77,19,27}, -{77,19,28}, -{77,19,29}, -{77,19,30}, -{77,19,31}, -{77,19,32}, -{77,19,33}, -{77,19,34}, -{77,19,35}, -{77,19,36}, -{77,19,37}, -{77,19,38}, -{77,19,39}, -{77,19,40}, -{77,19,41}, -{77,19,42}, -{77,19,43}, -{77,19,44}, -{77,19,45}, -{77,19,46}, -{77,19,47}, -{77,19,48}, -{77,19,49}, -{77,19,50}, -{77,19,51}, -{77,19,52}, -{77,19,53}, -{77,19,54}, -{77,19,55}, -{77,19,56}, -{77,19,57}, -{77,19,58}, -{77,19,59}, -{77,19,60}, -{77,19,61}, -{77,19,62}, -{77,19,63}, -{77,19,64}, -{77,19,65}, -{77,19,66}, -{77,19,67}, -{77,19,68}, -{77,19,69}, -{77,19,70}, -{77,19,71}, -{77,19,72}, -{77,19,73}, -{77,19,74}, -{77,19,75}, -{77,19,76}, -{77,19,77}, -{77,19,78}, -{77,19,79}, -{77,19,80}, -{77,20,-35}, -{77,20,-34}, -{77,20,-33}, -{77,20,-32}, -{77,20,-31}, -{77,20,-30}, -{77,20,-29}, -{77,20,-28}, -{77,20,-27}, -{77,20,-26}, -{77,20,-25}, -{77,20,-24}, -{77,20,-23}, -{77,20,-22}, -{77,20,-21}, -{77,20,-20}, -{77,20,-19}, -{77,20,-18}, -{77,20,-17}, -{77,20,-16}, -{77,20,-15}, -{77,20,-14}, -{77,20,-13}, -{77,20,-12}, -{77,20,-11}, -{77,20,-10}, -{77,20,-9}, -{77,20,-8}, -{77,20,-7}, -{77,20,-6}, -{77,20,-5}, -{77,20,-4}, -{77,20,-3}, -{77,20,-2}, -{77,20,-1}, -{77,20,0}, -{77,20,1}, -{77,20,2}, -{77,20,3}, -{77,20,4}, -{77,20,5}, -{77,20,6}, -{77,20,7}, -{77,20,8}, -{77,20,9}, -{77,20,10}, -{77,20,11}, -{77,20,12}, -{77,20,13}, -{77,20,14}, -{77,20,15}, -{77,20,16}, -{77,20,17}, -{77,20,18}, -{77,20,19}, -{77,20,20}, -{77,20,21}, -{77,20,22}, -{77,20,23}, -{77,20,24}, -{77,20,25}, -{77,20,26}, -{77,20,27}, -{77,20,28}, -{77,20,29}, -{77,20,30}, -{77,20,31}, -{77,20,32}, -{77,20,33}, -{77,20,34}, -{77,20,35}, -{77,20,36}, -{77,20,37}, -{77,20,38}, -{77,20,39}, -{77,20,40}, -{77,20,41}, -{77,20,42}, -{77,20,43}, -{77,20,44}, -{77,20,45}, -{77,20,46}, -{77,20,47}, -{77,20,48}, -{77,20,49}, -{77,20,50}, -{77,20,51}, -{77,20,52}, -{77,20,53}, -{77,20,54}, -{77,20,55}, -{77,20,56}, -{77,20,57}, -{77,20,58}, -{77,20,59}, -{77,20,60}, -{77,20,61}, -{77,20,62}, -{77,20,63}, -{77,20,64}, -{77,20,65}, -{77,20,66}, -{77,20,67}, -{77,20,68}, -{77,20,69}, -{77,20,70}, -{77,20,71}, -{77,20,72}, -{77,20,73}, -{77,20,74}, -{77,20,75}, -{77,21,-35}, -{77,21,-34}, -{77,21,-33}, -{77,21,-32}, -{77,21,-31}, -{77,21,-30}, -{77,21,-29}, -{77,21,-28}, -{77,21,-27}, -{77,21,-26}, -{77,21,-25}, -{77,21,-24}, -{77,21,-23}, -{77,21,-22}, -{77,21,-21}, -{77,21,-20}, -{77,21,-19}, -{77,21,-18}, -{77,21,-17}, -{77,21,-16}, -{77,21,-15}, -{77,21,-14}, -{77,21,-13}, -{77,21,-12}, -{77,21,-11}, -{77,21,-10}, -{77,21,-9}, -{77,21,-8}, -{77,21,-7}, -{77,21,-6}, -{77,21,-5}, -{77,21,-4}, -{77,21,-3}, -{77,21,-2}, -{77,21,-1}, -{77,21,0}, -{77,21,1}, -{77,21,2}, -{77,21,3}, -{77,21,4}, -{77,21,5}, -{77,21,6}, -{77,21,7}, -{77,21,8}, -{77,21,9}, -{77,21,10}, -{77,21,11}, -{77,21,12}, -{77,21,13}, -{77,21,14}, -{77,21,15}, -{77,21,16}, -{77,21,17}, -{77,21,18}, -{77,21,19}, -{77,21,20}, -{77,21,21}, -{77,21,22}, -{77,21,23}, -{77,21,24}, -{77,21,25}, -{77,21,26}, -{77,21,27}, -{77,21,28}, -{77,21,29}, -{77,21,30}, -{77,21,31}, -{77,21,32}, -{77,21,33}, -{77,21,34}, -{77,21,35}, -{77,21,36}, -{77,21,37}, -{77,21,38}, -{77,21,39}, -{77,21,40}, -{77,21,41}, -{77,21,42}, -{77,21,43}, -{77,21,44}, -{77,21,45}, -{77,21,46}, -{77,21,47}, -{77,21,48}, -{77,21,49}, -{77,21,50}, -{77,21,51}, -{77,21,52}, -{77,21,53}, -{77,21,54}, -{77,21,55}, -{77,21,56}, -{77,21,57}, -{77,21,58}, -{77,21,59}, -{77,21,60}, -{77,21,61}, -{77,21,62}, -{77,21,63}, -{77,21,64}, -{77,21,65}, -{77,21,66}, -{77,22,-35}, -{77,22,-34}, -{77,22,-33}, -{77,22,-32}, -{77,22,-31}, -{77,22,-30}, -{77,22,-29}, -{77,22,-28}, -{77,22,-27}, -{77,22,-26}, -{77,22,-25}, -{77,22,-24}, -{77,22,-23}, -{77,22,-22}, -{77,22,-21}, -{77,22,-20}, -{77,22,-19}, -{77,22,-18}, -{77,22,-17}, -{77,22,-16}, -{77,22,-15}, -{77,22,-14}, -{77,22,-13}, -{77,22,-12}, -{77,22,-11}, -{77,22,-10}, -{77,22,-9}, -{77,22,-8}, -{77,22,-7}, -{77,22,-6}, -{77,22,-5}, -{77,22,-4}, -{77,22,-3}, -{77,22,-2}, -{77,22,-1}, -{77,22,0}, -{77,22,1}, -{77,22,2}, -{77,22,3}, -{77,22,4}, -{77,22,5}, -{77,22,6}, -{77,22,7}, -{77,22,8}, -{77,22,9}, -{77,22,10}, -{77,22,11}, -{77,22,12}, -{77,22,13}, -{77,22,14}, -{77,22,15}, -{77,22,16}, -{77,22,17}, -{77,22,18}, -{77,22,19}, -{77,22,20}, -{77,22,21}, -{77,22,22}, -{77,22,23}, -{77,22,24}, -{77,22,25}, -{77,22,26}, -{77,22,27}, -{77,22,28}, -{77,22,29}, -{77,22,30}, -{77,22,31}, -{77,22,32}, -{77,22,33}, -{77,22,34}, -{77,22,35}, -{77,22,36}, -{77,22,37}, -{77,22,38}, -{77,22,39}, -{77,22,40}, -{77,22,41}, -{77,22,42}, -{77,22,43}, -{77,22,44}, -{77,22,45}, -{77,22,46}, -{77,22,47}, -{77,22,48}, -{77,22,49}, -{77,22,50}, -{77,22,51}, -{77,22,52}, -{77,22,53}, -{77,22,54}, -{77,22,55}, -{77,22,56}, -{77,22,57}, -{77,22,58}, -{77,22,59}, -{77,22,60}, -{77,23,-35}, -{77,23,-34}, -{77,23,-33}, -{77,23,-32}, -{77,23,-31}, -{77,23,-30}, -{77,23,-29}, -{77,23,-28}, -{77,23,-27}, -{77,23,-26}, -{77,23,-25}, -{77,23,-24}, -{77,23,-23}, -{77,23,-22}, -{77,23,-21}, -{77,23,-20}, -{77,23,-19}, -{77,23,-18}, -{77,23,-17}, -{77,23,-16}, -{77,23,-15}, -{77,23,-14}, -{77,23,-13}, -{77,23,-12}, -{77,23,-11}, -{77,23,-10}, -{77,23,-9}, -{77,23,-8}, -{77,23,-7}, -{77,23,-6}, -{77,23,-5}, -{77,23,-4}, -{77,23,-3}, -{77,23,-2}, -{77,23,-1}, -{77,23,0}, -{77,23,1}, -{77,23,2}, -{77,23,3}, -{77,23,4}, -{77,23,5}, -{77,23,6}, -{77,23,7}, -{77,23,8}, -{77,23,9}, -{77,23,10}, -{77,23,11}, -{77,23,12}, -{77,23,13}, -{77,23,14}, -{77,23,15}, -{77,23,16}, -{77,23,17}, -{77,23,18}, -{77,23,19}, -{77,23,20}, -{77,23,21}, -{77,23,22}, -{77,23,23}, -{77,23,24}, -{77,23,25}, -{77,23,26}, -{77,23,27}, -{77,23,28}, -{77,23,29}, -{77,23,30}, -{77,23,31}, -{77,23,32}, -{77,23,33}, -{77,23,34}, -{77,23,35}, -{77,23,36}, -{77,23,37}, -{77,23,38}, -{77,23,39}, -{77,23,40}, -{77,23,41}, -{77,23,42}, -{77,23,43}, -{77,23,44}, -{77,23,45}, -{77,23,46}, -{77,23,47}, -{77,23,48}, -{77,23,49}, -{77,23,50}, -{77,23,51}, -{77,23,52}, -{77,23,53}, -{77,24,-35}, -{77,24,-34}, -{77,24,-33}, -{77,24,-32}, -{77,24,-31}, -{77,24,-30}, -{77,24,-29}, -{77,24,-28}, -{77,24,-27}, -{77,24,-26}, -{77,24,-25}, -{77,24,-24}, -{77,24,-23}, -{77,24,-22}, -{77,24,-21}, -{77,24,-20}, -{77,24,-19}, -{77,24,-18}, -{77,24,-17}, -{77,24,-16}, -{77,24,-15}, -{77,24,-14}, -{77,24,-13}, -{77,24,-12}, -{77,24,-11}, -{77,24,-10}, -{77,24,-9}, -{77,24,-8}, -{77,24,-7}, -{77,24,-6}, -{77,24,-5}, -{77,24,-4}, -{77,24,-3}, -{77,24,-2}, -{77,24,-1}, -{77,24,0}, -{77,24,1}, -{77,24,2}, -{77,24,3}, -{77,24,4}, -{77,24,5}, -{77,24,6}, -{77,24,7}, -{77,24,8}, -{77,24,9}, -{77,24,10}, -{77,24,11}, -{77,24,12}, -{77,24,13}, -{77,24,14}, -{77,24,15}, -{77,24,16}, -{77,24,17}, -{77,24,18}, -{77,24,19}, -{77,24,20}, -{77,24,21}, -{77,24,22}, -{77,24,23}, -{77,24,24}, -{77,24,25}, -{77,24,26}, -{77,24,27}, -{77,24,28}, -{77,24,29}, -{77,24,30}, -{77,24,31}, -{77,24,32}, -{77,24,33}, -{77,24,34}, -{77,24,35}, -{77,24,36}, -{77,24,37}, -{77,24,38}, -{77,24,39}, -{77,24,40}, -{77,24,41}, -{77,24,42}, -{77,24,43}, -{77,24,44}, -{77,24,45}, -{77,24,46}, -{77,24,47}, -{77,24,48}, -{77,25,-35}, -{77,25,-34}, -{77,25,-33}, -{77,25,-32}, -{77,25,-31}, -{77,25,-30}, -{77,25,-29}, -{77,25,-28}, -{77,25,-27}, -{77,25,-26}, -{77,25,-25}, -{77,25,-24}, -{77,25,-23}, -{77,25,-22}, -{77,25,-21}, -{77,25,-20}, -{77,25,-19}, -{77,25,-18}, -{77,25,-17}, -{77,25,-16}, -{77,25,-15}, -{77,25,-14}, -{77,25,-13}, -{77,25,-12}, -{77,25,-11}, -{77,25,-10}, -{77,25,-9}, -{77,25,-8}, -{77,25,-7}, -{77,25,-6}, -{77,25,-5}, -{77,25,-4}, -{77,25,-3}, -{77,25,-2}, -{77,25,-1}, -{77,25,0}, -{77,25,1}, -{77,25,2}, -{77,25,3}, -{77,25,4}, -{77,25,5}, -{77,25,6}, -{77,25,7}, -{77,25,8}, -{77,25,9}, -{77,25,10}, -{77,25,11}, -{77,25,12}, -{77,25,13}, -{77,25,14}, -{77,25,15}, -{77,25,16}, -{77,25,17}, -{77,25,18}, -{77,25,19}, -{77,25,20}, -{77,25,21}, -{77,25,22}, -{77,25,23}, -{77,25,24}, -{77,25,25}, -{77,25,26}, -{77,25,27}, -{77,25,28}, -{77,25,29}, -{77,25,30}, -{77,25,31}, -{77,25,32}, -{77,25,33}, -{77,25,34}, -{77,25,35}, -{77,25,36}, -{77,25,37}, -{77,25,38}, -{77,25,39}, -{77,25,40}, -{77,25,41}, -{77,25,42}, -{77,25,43}, -{77,26,-35}, -{77,26,-34}, -{77,26,-33}, -{77,26,-32}, -{77,26,-31}, -{77,26,-30}, -{77,26,-29}, -{77,26,-28}, -{77,26,-27}, -{77,26,-26}, -{77,26,-25}, -{77,26,-24}, -{77,26,-23}, -{77,26,-22}, -{77,26,-21}, -{77,26,-20}, -{77,26,-19}, -{77,26,-18}, -{77,26,-17}, -{77,26,-16}, -{77,26,-15}, -{77,26,-14}, -{77,26,-13}, -{77,26,-12}, -{77,26,-11}, -{77,26,-10}, -{77,26,-9}, -{77,26,-8}, -{77,26,-7}, -{77,26,-6}, -{77,26,-5}, -{77,26,-4}, -{77,26,-3}, -{77,26,-2}, -{77,26,-1}, -{77,26,0}, -{77,26,1}, -{77,26,2}, -{77,26,3}, -{77,26,4}, -{77,26,5}, -{77,26,6}, -{77,26,7}, -{77,26,8}, -{77,26,9}, -{77,26,10}, -{77,26,11}, -{77,26,12}, -{77,26,13}, -{77,26,14}, -{77,26,15}, -{77,26,16}, -{77,26,17}, -{77,26,18}, -{77,26,19}, -{77,26,20}, -{77,26,21}, -{77,26,22}, -{77,26,23}, -{77,26,24}, -{77,26,25}, -{77,26,26}, -{77,26,27}, -{77,26,28}, -{77,26,29}, -{77,26,30}, -{77,26,31}, -{77,26,32}, -{77,26,33}, -{77,26,34}, -{77,26,35}, -{77,26,36}, -{77,26,37}, -{77,26,38}, -{77,27,-35}, -{77,27,-34}, -{77,27,-33}, -{77,27,-32}, -{77,27,-31}, -{77,27,-30}, -{77,27,-29}, -{77,27,-28}, -{77,27,-27}, -{77,27,-26}, -{77,27,-25}, -{77,27,-24}, -{77,27,-23}, -{77,27,-22}, -{77,27,-21}, -{77,27,-20}, -{77,27,-19}, -{77,27,-18}, -{77,27,-17}, -{77,27,-16}, -{77,27,-15}, -{77,27,-14}, -{77,27,-13}, -{77,27,-12}, -{77,27,-11}, -{77,27,-10}, -{77,27,-9}, -{77,27,-8}, -{77,27,-7}, -{77,27,-6}, -{77,27,-5}, -{77,27,-4}, -{77,27,-3}, -{77,27,-2}, -{77,27,-1}, -{77,27,0}, -{77,27,1}, -{77,27,2}, -{77,27,3}, -{77,27,4}, -{77,27,5}, -{77,27,6}, -{77,27,7}, -{77,27,8}, -{77,27,9}, -{77,27,10}, -{77,27,11}, -{77,27,12}, -{77,27,13}, -{77,27,14}, -{77,27,15}, -{77,27,16}, -{77,27,17}, -{77,27,18}, -{77,27,19}, -{77,27,20}, -{77,27,21}, -{77,27,22}, -{77,27,23}, -{77,27,24}, -{77,27,25}, -{77,27,26}, -{77,27,27}, -{77,27,28}, -{77,27,29}, -{77,27,30}, -{77,27,31}, -{77,27,32}, -{77,27,33}, -{77,27,34}, -{77,28,-35}, -{77,28,-34}, -{77,28,-33}, -{77,28,-32}, -{77,28,-31}, -{77,28,-30}, -{77,28,-29}, -{77,28,-28}, -{77,28,-27}, -{77,28,-26}, -{77,28,-25}, -{77,28,-24}, -{77,28,-23}, -{77,28,-22}, -{77,28,-21}, -{77,28,-20}, -{77,28,-19}, -{77,28,-18}, -{77,28,-17}, -{77,28,-16}, -{77,28,-15}, -{77,28,-14}, -{77,28,-13}, -{77,28,-12}, -{77,28,-11}, -{77,28,-10}, -{77,28,-9}, -{77,28,-8}, -{77,28,-7}, -{77,28,-6}, -{77,28,-5}, -{77,28,-4}, -{77,28,-3}, -{77,28,-2}, -{77,28,-1}, -{77,28,0}, -{77,28,1}, -{77,28,2}, -{77,28,3}, -{77,28,4}, -{77,28,5}, -{77,28,6}, -{77,28,7}, -{77,28,8}, -{77,28,9}, -{77,28,10}, -{77,28,11}, -{77,28,12}, -{77,28,13}, -{77,28,14}, -{77,28,15}, -{77,28,16}, -{77,28,17}, -{77,28,18}, -{77,28,19}, -{77,28,20}, -{77,28,21}, -{77,28,22}, -{77,28,23}, -{77,28,24}, -{77,28,25}, -{77,28,26}, -{77,28,27}, -{77,28,28}, -{77,28,29}, -{77,28,30}, -{77,29,-35}, -{77,29,-34}, -{77,29,-33}, -{77,29,-32}, -{77,29,-31}, -{77,29,-30}, -{77,29,-29}, -{77,29,-28}, -{77,29,-27}, -{77,29,-26}, -{77,29,-25}, -{77,29,-24}, -{77,29,-23}, -{77,29,-22}, -{77,29,-21}, -{77,29,-20}, -{77,29,-19}, -{77,29,-18}, -{77,29,-17}, -{77,29,-16}, -{77,29,-15}, -{77,29,-14}, -{77,29,-13}, -{77,29,-12}, -{77,29,-11}, -{77,29,-10}, -{77,29,-9}, -{77,29,-8}, -{77,29,-7}, -{77,29,-6}, -{77,29,-5}, -{77,29,-4}, -{77,29,-3}, -{77,29,-2}, -{77,29,-1}, -{77,29,0}, -{77,29,1}, -{77,29,2}, -{77,29,3}, -{77,29,4}, -{77,29,5}, -{77,29,6}, -{77,29,7}, -{77,29,8}, -{77,29,9}, -{77,29,10}, -{77,29,11}, -{77,29,12}, -{77,29,13}, -{77,29,14}, -{77,29,15}, -{77,29,16}, -{77,29,17}, -{77,29,18}, -{77,29,19}, -{77,29,20}, -{77,29,21}, -{77,29,22}, -{77,29,23}, -{77,29,24}, -{77,29,25}, -{77,29,26}, -{77,30,-35}, -{77,30,-34}, -{77,30,-33}, -{77,30,-32}, -{77,30,-31}, -{77,30,-30}, -{77,30,-29}, -{77,30,-28}, -{77,30,-27}, -{77,30,-26}, -{77,30,-25}, -{77,30,-24}, -{77,30,-23}, -{77,30,-22}, -{77,30,-21}, -{77,30,-20}, -{77,30,-19}, -{77,30,-18}, -{77,30,-17}, -{77,30,-16}, -{77,30,-15}, -{77,30,-14}, -{77,30,-13}, -{77,30,-12}, -{77,30,-11}, -{77,30,-10}, -{77,30,-9}, -{77,30,-8}, -{77,30,-7}, -{77,30,-6}, -{77,30,-5}, -{77,30,-4}, -{77,30,-3}, -{77,30,-2}, -{77,30,-1}, -{77,30,0}, -{77,30,1}, -{77,30,2}, -{77,30,3}, -{77,30,4}, -{77,30,5}, -{77,30,6}, -{77,30,7}, -{77,30,8}, -{77,30,9}, -{77,30,10}, -{77,30,11}, -{77,30,12}, -{77,30,13}, -{77,30,14}, -{77,30,15}, -{77,30,16}, -{77,30,17}, -{77,30,18}, -{77,30,19}, -{77,30,20}, -{77,30,21}, -{77,30,22}, -{77,31,-35}, -{77,31,-34}, -{77,31,-33}, -{77,31,-32}, -{77,31,-31}, -{77,31,-30}, -{77,31,-29}, -{77,31,-28}, -{77,31,-27}, -{77,31,-26}, -{77,31,-25}, -{77,31,-24}, -{77,31,-23}, -{77,31,-22}, -{77,31,-21}, -{77,31,-20}, -{77,31,-19}, -{77,31,-18}, -{77,31,-17}, -{77,31,-16}, -{77,31,-15}, -{77,31,-14}, -{77,31,-13}, -{77,31,-12}, -{77,31,-11}, -{77,31,-10}, -{77,31,-9}, -{77,31,-8}, -{77,31,-7}, -{77,31,-6}, -{77,31,-5}, -{77,31,-4}, -{77,31,-3}, -{77,31,-2}, -{77,31,-1}, -{77,31,0}, -{77,31,1}, -{77,31,2}, -{77,31,3}, -{77,31,4}, -{77,31,5}, -{77,31,6}, -{77,31,7}, -{77,31,8}, -{77,31,9}, -{77,31,10}, -{77,31,11}, -{77,31,12}, -{77,31,13}, -{77,31,14}, -{77,31,15}, -{77,31,16}, -{77,31,17}, -{77,31,18}, -{77,31,19}, -{77,32,-35}, -{77,32,-34}, -{77,32,-33}, -{77,32,-32}, -{77,32,-31}, -{77,32,-30}, -{77,32,-29}, -{77,32,-28}, -{77,32,-27}, -{77,32,-26}, -{77,32,-25}, -{77,32,-24}, -{77,32,-23}, -{77,32,-22}, -{77,32,-21}, -{77,32,-20}, -{77,32,-19}, -{77,32,-18}, -{77,32,-17}, -{77,32,-16}, -{77,32,-15}, -{77,32,-14}, -{77,32,-13}, -{77,32,-12}, -{77,32,-11}, -{77,32,-10}, -{77,32,-9}, -{77,32,-8}, -{77,32,-7}, -{77,32,-6}, -{77,32,-5}, -{77,32,-4}, -{77,32,-3}, -{77,32,-2}, -{77,32,-1}, -{77,32,0}, -{77,32,1}, -{77,32,2}, -{77,32,3}, -{77,32,4}, -{77,32,5}, -{77,32,6}, -{77,32,7}, -{77,32,8}, -{77,32,9}, -{77,32,10}, -{77,32,11}, -{77,32,12}, -{77,32,13}, -{77,32,14}, -{77,32,15}, -{77,32,16}, -{77,33,-35}, -{77,33,-34}, -{77,33,-33}, -{77,33,-32}, -{77,33,-31}, -{77,33,-30}, -{77,33,-29}, -{77,33,-28}, -{77,33,-27}, -{77,33,-26}, -{77,33,-25}, -{77,33,-24}, -{77,33,-23}, -{77,33,-22}, -{77,33,-21}, -{77,33,-20}, -{77,33,-19}, -{77,33,-18}, -{77,33,-17}, -{77,33,-16}, -{77,33,-15}, -{77,33,-14}, -{77,33,-13}, -{77,33,-12}, -{77,33,-11}, -{77,33,-10}, -{77,33,-9}, -{77,33,-8}, -{77,33,-7}, -{77,33,-6}, -{77,33,-5}, -{77,33,-4}, -{77,33,-3}, -{77,33,-2}, -{77,33,-1}, -{77,33,0}, -{77,33,1}, -{77,33,2}, -{77,33,3}, -{77,33,4}, -{77,33,5}, -{77,33,6}, -{77,33,7}, -{77,33,8}, -{77,33,9}, -{77,33,10}, -{77,33,11}, -{77,33,12}, -{77,34,-35}, -{77,34,-34}, -{77,34,-33}, -{77,34,-32}, -{77,34,-31}, -{77,34,-30}, -{77,34,-29}, -{77,34,-28}, -{77,34,-27}, -{77,34,-26}, -{77,34,-25}, -{77,34,-24}, -{77,34,-23}, -{77,34,-22}, -{77,34,-21}, -{77,34,-20}, -{77,34,-19}, -{77,34,-18}, -{77,34,-17}, -{77,34,-16}, -{77,34,-15}, -{77,34,-14}, -{77,34,-13}, -{77,34,-12}, -{77,34,-11}, -{77,34,-10}, -{77,34,-9}, -{77,34,-8}, -{77,34,-7}, -{77,34,-6}, -{77,34,-5}, -{77,34,-4}, -{77,34,-3}, -{77,34,-2}, -{77,34,-1}, -{77,34,0}, -{77,34,1}, -{77,34,2}, -{77,34,3}, -{77,34,4}, -{77,34,5}, -{77,34,6}, -{77,34,7}, -{77,34,8}, -{77,34,9}, -{77,35,-35}, -{77,35,-34}, -{77,35,-33}, -{77,35,-32}, -{77,35,-31}, -{77,35,-30}, -{77,35,-29}, -{77,35,-28}, -{77,35,-27}, -{77,35,-26}, -{77,35,-25}, -{77,35,-24}, -{77,35,-23}, -{77,35,-22}, -{77,35,-21}, -{77,35,-20}, -{77,35,-19}, -{77,35,-18}, -{77,35,-17}, -{77,35,-16}, -{77,35,-15}, -{77,35,-14}, -{77,35,-13}, -{77,35,-12}, -{77,35,-11}, -{77,35,-10}, -{77,35,-9}, -{77,35,-8}, -{77,35,-7}, -{77,35,-6}, -{77,35,-5}, -{77,35,-4}, -{77,35,-3}, -{77,35,-2}, -{77,35,-1}, -{77,35,0}, -{77,35,1}, -{77,35,2}, -{77,35,3}, -{77,35,4}, -{77,35,5}, -{77,35,6}, -{77,36,-34}, -{77,36,-33}, -{77,36,-32}, -{77,36,-31}, -{77,36,-30}, -{77,36,-29}, -{77,36,-28}, -{77,36,-27}, -{77,36,-26}, -{77,36,-25}, -{77,36,-24}, -{77,36,-23}, -{77,36,-22}, -{77,36,-21}, -{77,36,-20}, -{77,36,-19}, -{77,36,-18}, -{77,36,-17}, -{77,36,-16}, -{77,36,-15}, -{77,36,-14}, -{77,36,-13}, -{77,36,-12}, -{77,36,-11}, -{77,36,-10}, -{77,36,-9}, -{77,36,-8}, -{77,36,-7}, -{77,36,-6}, -{77,36,-5}, -{77,36,-4}, -{77,36,-3}, -{77,36,-2}, -{77,36,-1}, -{77,36,0}, -{77,36,1}, -{77,36,2}, -{77,36,3}, -{77,37,-34}, -{77,37,-33}, -{77,37,-32}, -{77,37,-31}, -{77,37,-30}, -{77,37,-29}, -{77,37,-28}, -{77,37,-27}, -{77,37,-26}, -{77,37,-25}, -{77,37,-24}, -{77,37,-23}, -{77,37,-22}, -{77,37,-21}, -{77,37,-20}, -{77,37,-19}, -{77,37,-18}, -{77,37,-17}, -{77,37,-16}, -{77,37,-15}, -{77,37,-14}, -{77,37,-13}, -{77,37,-12}, -{77,37,-11}, -{77,37,-10}, -{77,37,-9}, -{77,37,-8}, -{77,37,-7}, -{77,37,-6}, -{77,37,-5}, -{77,37,-4}, -{77,37,-3}, -{77,37,-2}, -{77,37,-1}, -{77,37,0}, -{77,37,1}, -{77,38,-34}, -{77,38,-33}, -{77,38,-32}, -{77,38,-31}, -{77,38,-30}, -{77,38,-29}, -{77,38,-28}, -{77,38,-27}, -{77,38,-26}, -{77,38,-25}, -{77,38,-24}, -{77,38,-23}, -{77,38,-22}, -{77,38,-21}, -{77,38,-20}, -{77,38,-19}, -{77,38,-18}, -{77,38,-17}, -{77,38,-16}, -{77,38,-15}, -{77,38,-14}, -{77,38,-13}, -{77,38,-12}, -{77,38,-11}, -{77,38,-10}, -{77,38,-9}, -{77,38,-8}, -{77,38,-7}, -{77,38,-6}, -{77,38,-5}, -{77,38,-4}, -{77,38,-3}, -{77,38,-2}, -{77,39,-34}, -{77,39,-33}, -{77,39,-32}, -{77,39,-31}, -{77,39,-30}, -{77,39,-29}, -{77,39,-28}, -{77,39,-27}, -{77,39,-26}, -{77,39,-25}, -{77,39,-24}, -{77,39,-23}, -{77,39,-22}, -{77,39,-21}, -{77,39,-20}, -{77,39,-19}, -{77,39,-18}, -{77,39,-17}, -{77,39,-16}, -{77,39,-15}, -{77,39,-14}, -{77,39,-13}, -{77,39,-12}, -{77,39,-11}, -{77,39,-10}, -{77,39,-9}, -{77,39,-8}, -{77,39,-7}, -{77,39,-6}, -{77,39,-5}, -{77,40,-34}, -{77,40,-33}, -{77,40,-32}, -{77,40,-31}, -{77,40,-30}, -{77,40,-29}, -{77,40,-28}, -{77,40,-27}, -{77,40,-26}, -{77,40,-25}, -{77,40,-24}, -{77,40,-23}, -{77,40,-22}, -{77,40,-21}, -{77,40,-20}, -{77,40,-19}, -{77,40,-18}, -{77,40,-17}, -{77,40,-16}, -{77,40,-15}, -{77,40,-14}, -{77,40,-13}, -{77,40,-12}, -{77,40,-11}, -{77,40,-10}, -{77,40,-9}, -{77,40,-8}, -{77,40,-7}, -{77,41,-34}, -{77,41,-33}, -{77,41,-32}, -{77,41,-31}, -{77,41,-30}, -{77,41,-29}, -{77,41,-28}, -{77,41,-27}, -{77,41,-26}, -{77,41,-25}, -{77,41,-24}, -{77,41,-23}, -{77,41,-22}, -{77,41,-21}, -{77,41,-20}, -{77,41,-19}, -{77,41,-18}, -{77,41,-17}, -{77,41,-16}, -{77,41,-15}, -{77,41,-14}, -{77,41,-13}, -{77,41,-12}, -{77,41,-11}, -{77,41,-10}, -{77,42,-34}, -{77,42,-33}, -{77,42,-32}, -{77,42,-31}, -{77,42,-30}, -{77,42,-29}, -{77,42,-28}, -{77,42,-27}, -{77,42,-26}, -{77,42,-25}, -{77,42,-24}, -{77,42,-23}, -{77,42,-22}, -{77,42,-21}, -{77,42,-20}, -{77,42,-19}, -{77,42,-18}, -{77,42,-17}, -{77,42,-16}, -{77,42,-15}, -{77,42,-14}, -{77,42,-13}, -{77,42,-12}, -{77,43,-34}, -{77,43,-33}, -{77,43,-32}, -{77,43,-31}, -{77,43,-30}, -{77,43,-29}, -{77,43,-28}, -{77,43,-27}, -{77,43,-26}, -{77,43,-25}, -{77,43,-24}, -{77,43,-23}, -{77,43,-22}, -{77,43,-21}, -{77,43,-20}, -{77,43,-19}, -{77,43,-18}, -{77,43,-17}, -{77,43,-16}, -{77,43,-15}, -{77,44,-34}, -{77,44,-33}, -{77,44,-32}, -{77,44,-31}, -{77,44,-30}, -{77,44,-29}, -{77,44,-28}, -{77,44,-27}, -{77,44,-26}, -{77,44,-25}, -{77,44,-24}, -{77,44,-23}, -{77,44,-22}, -{77,44,-21}, -{77,44,-20}, -{77,44,-19}, -{77,44,-18}, -{77,44,-17}, -{77,45,-34}, -{77,45,-33}, -{77,45,-32}, -{77,45,-31}, -{77,45,-30}, -{77,45,-29}, -{77,45,-28}, -{77,45,-27}, -{77,45,-26}, -{77,45,-25}, -{77,45,-24}, -{77,45,-23}, -{77,45,-22}, -{77,45,-21}, -{77,45,-20}, -{77,45,-19}, -{77,46,-34}, -{77,46,-33}, -{77,46,-32}, -{77,46,-31}, -{77,46,-30}, -{77,46,-29}, -{77,46,-28}, -{77,46,-27}, -{77,46,-26}, -{77,46,-25}, -{77,46,-24}, -{77,46,-23}, -{77,46,-22}, -{77,46,-21}, -{77,47,-34}, -{77,47,-33}, -{77,47,-32}, -{77,47,-31}, -{77,47,-30}, -{77,47,-29}, -{77,47,-28}, -{77,47,-27}, -{77,47,-26}, -{77,47,-25}, -{77,47,-24}, -{77,48,-34}, -{77,48,-33}, -{77,48,-32}, -{77,48,-31}, -{77,48,-30}, -{77,48,-29}, -{77,48,-28}, -{77,48,-27}, -{77,48,-26}, -{77,49,-34}, -{77,49,-33}, -{77,49,-32}, -{77,49,-31}, -{77,49,-30}, -{77,49,-29}, -{77,49,-28}, -{77,50,-34}, -{77,50,-33}, -{77,50,-32}, -{77,50,-31}, -{77,50,-30}, -{77,51,-34}, -{77,51,-33}, -{77,51,-32}, -{77,52,-34}, -{78,-78,74}, -{78,-78,75}, -{78,-77,70}, -{78,-77,71}, -{78,-77,72}, -{78,-77,73}, -{78,-77,74}, -{78,-77,75}, -{78,-76,65}, -{78,-76,66}, -{78,-76,67}, -{78,-76,68}, -{78,-76,69}, -{78,-76,70}, -{78,-76,71}, -{78,-76,72}, -{78,-76,73}, -{78,-76,74}, -{78,-76,75}, -{78,-75,61}, -{78,-75,62}, -{78,-75,63}, -{78,-75,64}, -{78,-75,65}, -{78,-75,66}, -{78,-75,67}, -{78,-75,68}, -{78,-75,69}, -{78,-75,70}, -{78,-75,71}, -{78,-75,72}, -{78,-75,73}, -{78,-75,74}, -{78,-75,75}, -{78,-74,58}, -{78,-74,59}, -{78,-74,60}, -{78,-74,61}, -{78,-74,62}, -{78,-74,63}, -{78,-74,64}, -{78,-74,65}, -{78,-74,66}, -{78,-74,67}, -{78,-74,68}, -{78,-74,69}, -{78,-74,70}, -{78,-74,71}, -{78,-74,72}, -{78,-74,73}, -{78,-74,74}, -{78,-74,75}, -{78,-73,54}, -{78,-73,55}, -{78,-73,56}, -{78,-73,57}, -{78,-73,58}, -{78,-73,59}, -{78,-73,60}, -{78,-73,61}, -{78,-73,62}, -{78,-73,63}, -{78,-73,64}, -{78,-73,65}, -{78,-73,66}, -{78,-73,67}, -{78,-73,68}, -{78,-73,69}, -{78,-73,70}, -{78,-73,71}, -{78,-73,72}, -{78,-73,73}, -{78,-73,74}, -{78,-73,75}, -{78,-72,51}, -{78,-72,52}, -{78,-72,53}, -{78,-72,54}, -{78,-72,55}, -{78,-72,56}, -{78,-72,57}, -{78,-72,58}, -{78,-72,59}, -{78,-72,60}, -{78,-72,61}, -{78,-72,62}, -{78,-72,63}, -{78,-72,64}, -{78,-72,65}, -{78,-72,66}, -{78,-72,67}, -{78,-72,68}, -{78,-72,69}, -{78,-72,70}, -{78,-72,71}, -{78,-72,72}, -{78,-72,73}, -{78,-72,74}, -{78,-72,75}, -{78,-71,48}, -{78,-71,49}, -{78,-71,50}, -{78,-71,51}, -{78,-71,52}, -{78,-71,53}, -{78,-71,54}, -{78,-71,55}, -{78,-71,56}, -{78,-71,57}, -{78,-71,58}, -{78,-71,59}, -{78,-71,60}, -{78,-71,61}, -{78,-71,62}, -{78,-71,63}, -{78,-71,64}, -{78,-71,65}, -{78,-71,66}, -{78,-71,67}, -{78,-71,68}, -{78,-71,69}, -{78,-71,70}, -{78,-71,71}, -{78,-71,72}, -{78,-71,73}, -{78,-71,74}, -{78,-71,75}, -{78,-70,45}, -{78,-70,46}, -{78,-70,47}, -{78,-70,48}, -{78,-70,49}, -{78,-70,50}, -{78,-70,51}, -{78,-70,52}, -{78,-70,53}, -{78,-70,54}, -{78,-70,55}, -{78,-70,56}, -{78,-70,57}, -{78,-70,58}, -{78,-70,59}, -{78,-70,60}, -{78,-70,61}, -{78,-70,62}, -{78,-70,63}, -{78,-70,64}, -{78,-70,65}, -{78,-70,66}, -{78,-70,67}, -{78,-70,68}, -{78,-70,69}, -{78,-70,70}, -{78,-70,71}, -{78,-70,72}, -{78,-70,73}, -{78,-70,74}, -{78,-70,75}, -{78,-69,42}, -{78,-69,43}, -{78,-69,44}, -{78,-69,45}, -{78,-69,46}, -{78,-69,47}, -{78,-69,48}, -{78,-69,49}, -{78,-69,50}, -{78,-69,51}, -{78,-69,52}, -{78,-69,53}, -{78,-69,54}, -{78,-69,55}, -{78,-69,56}, -{78,-69,57}, -{78,-69,58}, -{78,-69,59}, -{78,-69,60}, -{78,-69,61}, -{78,-69,62}, -{78,-69,63}, -{78,-69,64}, -{78,-69,65}, -{78,-69,66}, -{78,-69,67}, -{78,-69,68}, -{78,-69,69}, -{78,-69,70}, -{78,-69,71}, -{78,-69,72}, -{78,-69,73}, -{78,-69,74}, -{78,-69,75}, -{78,-68,39}, -{78,-68,40}, -{78,-68,41}, -{78,-68,42}, -{78,-68,43}, -{78,-68,44}, -{78,-68,45}, -{78,-68,46}, -{78,-68,47}, -{78,-68,48}, -{78,-68,49}, -{78,-68,50}, -{78,-68,51}, -{78,-68,52}, -{78,-68,53}, -{78,-68,54}, -{78,-68,55}, -{78,-68,56}, -{78,-68,57}, -{78,-68,58}, -{78,-68,59}, -{78,-68,60}, -{78,-68,61}, -{78,-68,62}, -{78,-68,63}, -{78,-68,64}, -{78,-68,65}, -{78,-68,66}, -{78,-68,67}, -{78,-68,68}, -{78,-68,69}, -{78,-68,70}, -{78,-68,71}, -{78,-68,72}, -{78,-68,73}, -{78,-68,74}, -{78,-68,75}, -{78,-67,36}, -{78,-67,37}, -{78,-67,38}, -{78,-67,39}, -{78,-67,40}, -{78,-67,41}, -{78,-67,42}, -{78,-67,43}, -{78,-67,44}, -{78,-67,45}, -{78,-67,46}, -{78,-67,47}, -{78,-67,48}, -{78,-67,49}, -{78,-67,50}, -{78,-67,51}, -{78,-67,52}, -{78,-67,53}, -{78,-67,54}, -{78,-67,55}, -{78,-67,56}, -{78,-67,57}, -{78,-67,58}, -{78,-67,59}, -{78,-67,60}, -{78,-67,61}, -{78,-67,62}, -{78,-67,63}, -{78,-67,64}, -{78,-67,65}, -{78,-67,66}, -{78,-67,67}, -{78,-67,68}, -{78,-67,69}, -{78,-67,70}, -{78,-67,71}, -{78,-67,72}, -{78,-67,73}, -{78,-67,74}, -{78,-67,75}, -{78,-67,76}, -{78,-66,34}, -{78,-66,35}, -{78,-66,36}, -{78,-66,37}, -{78,-66,38}, -{78,-66,39}, -{78,-66,40}, -{78,-66,41}, -{78,-66,42}, -{78,-66,43}, -{78,-66,44}, -{78,-66,45}, -{78,-66,46}, -{78,-66,47}, -{78,-66,48}, -{78,-66,49}, -{78,-66,50}, -{78,-66,51}, -{78,-66,52}, -{78,-66,53}, -{78,-66,54}, -{78,-66,55}, -{78,-66,56}, -{78,-66,57}, -{78,-66,58}, -{78,-66,59}, -{78,-66,60}, -{78,-66,61}, -{78,-66,62}, -{78,-66,63}, -{78,-66,64}, -{78,-66,65}, -{78,-66,66}, -{78,-66,67}, -{78,-66,68}, -{78,-66,69}, -{78,-66,70}, -{78,-66,71}, -{78,-66,72}, -{78,-66,73}, -{78,-66,74}, -{78,-66,75}, -{78,-66,76}, -{78,-65,31}, -{78,-65,32}, -{78,-65,33}, -{78,-65,34}, -{78,-65,35}, -{78,-65,36}, -{78,-65,37}, -{78,-65,38}, -{78,-65,39}, -{78,-65,40}, -{78,-65,41}, -{78,-65,42}, -{78,-65,43}, -{78,-65,44}, -{78,-65,45}, -{78,-65,46}, -{78,-65,47}, -{78,-65,48}, -{78,-65,49}, -{78,-65,50}, -{78,-65,51}, -{78,-65,52}, -{78,-65,53}, -{78,-65,54}, -{78,-65,55}, -{78,-65,56}, -{78,-65,57}, -{78,-65,58}, -{78,-65,59}, -{78,-65,60}, -{78,-65,61}, -{78,-65,62}, -{78,-65,63}, -{78,-65,64}, -{78,-65,65}, -{78,-65,66}, -{78,-65,67}, -{78,-65,68}, -{78,-65,69}, -{78,-65,70}, -{78,-65,71}, -{78,-65,72}, -{78,-65,73}, -{78,-65,74}, -{78,-65,75}, -{78,-65,76}, -{78,-64,29}, -{78,-64,30}, -{78,-64,31}, -{78,-64,32}, -{78,-64,33}, -{78,-64,34}, -{78,-64,35}, -{78,-64,36}, -{78,-64,37}, -{78,-64,38}, -{78,-64,39}, -{78,-64,40}, -{78,-64,41}, -{78,-64,42}, -{78,-64,43}, -{78,-64,44}, -{78,-64,45}, -{78,-64,46}, -{78,-64,47}, -{78,-64,48}, -{78,-64,49}, -{78,-64,50}, -{78,-64,51}, -{78,-64,52}, -{78,-64,53}, -{78,-64,54}, -{78,-64,55}, -{78,-64,56}, -{78,-64,57}, -{78,-64,58}, -{78,-64,59}, -{78,-64,60}, -{78,-64,61}, -{78,-64,62}, -{78,-64,63}, -{78,-64,64}, -{78,-64,65}, -{78,-64,66}, -{78,-64,67}, -{78,-64,68}, -{78,-64,69}, -{78,-64,70}, -{78,-64,71}, -{78,-64,72}, -{78,-64,73}, -{78,-64,74}, -{78,-64,75}, -{78,-64,76}, -{78,-63,27}, -{78,-63,28}, -{78,-63,29}, -{78,-63,30}, -{78,-63,31}, -{78,-63,32}, -{78,-63,33}, -{78,-63,34}, -{78,-63,35}, -{78,-63,36}, -{78,-63,37}, -{78,-63,38}, -{78,-63,39}, -{78,-63,40}, -{78,-63,41}, -{78,-63,42}, -{78,-63,43}, -{78,-63,44}, -{78,-63,45}, -{78,-63,46}, -{78,-63,47}, -{78,-63,48}, -{78,-63,49}, -{78,-63,50}, -{78,-63,51}, -{78,-63,52}, -{78,-63,53}, -{78,-63,54}, -{78,-63,55}, -{78,-63,56}, -{78,-63,57}, -{78,-63,58}, -{78,-63,59}, -{78,-63,60}, -{78,-63,61}, -{78,-63,62}, -{78,-63,63}, -{78,-63,64}, -{78,-63,65}, -{78,-63,66}, -{78,-63,67}, -{78,-63,68}, -{78,-63,69}, -{78,-63,70}, -{78,-63,71}, -{78,-63,72}, -{78,-63,73}, -{78,-63,74}, -{78,-63,75}, -{78,-63,76}, -{78,-62,24}, -{78,-62,25}, -{78,-62,26}, -{78,-62,27}, -{78,-62,28}, -{78,-62,29}, -{78,-62,30}, -{78,-62,31}, -{78,-62,32}, -{78,-62,33}, -{78,-62,34}, -{78,-62,35}, -{78,-62,36}, -{78,-62,37}, -{78,-62,38}, -{78,-62,39}, -{78,-62,40}, -{78,-62,41}, -{78,-62,42}, -{78,-62,43}, -{78,-62,44}, -{78,-62,45}, -{78,-62,46}, -{78,-62,47}, -{78,-62,48}, -{78,-62,49}, -{78,-62,50}, -{78,-62,51}, -{78,-62,52}, -{78,-62,53}, -{78,-62,54}, -{78,-62,55}, -{78,-62,56}, -{78,-62,57}, -{78,-62,58}, -{78,-62,59}, -{78,-62,60}, -{78,-62,61}, -{78,-62,62}, -{78,-62,63}, -{78,-62,64}, -{78,-62,65}, -{78,-62,66}, -{78,-62,67}, -{78,-62,68}, -{78,-62,69}, -{78,-62,70}, -{78,-62,71}, -{78,-62,72}, -{78,-62,73}, -{78,-62,74}, -{78,-62,75}, -{78,-62,76}, -{78,-61,22}, -{78,-61,23}, -{78,-61,24}, -{78,-61,25}, -{78,-61,26}, -{78,-61,27}, -{78,-61,28}, -{78,-61,29}, -{78,-61,30}, -{78,-61,31}, -{78,-61,32}, -{78,-61,33}, -{78,-61,34}, -{78,-61,35}, -{78,-61,36}, -{78,-61,37}, -{78,-61,38}, -{78,-61,39}, -{78,-61,40}, -{78,-61,41}, -{78,-61,42}, -{78,-61,43}, -{78,-61,44}, -{78,-61,45}, -{78,-61,46}, -{78,-61,47}, -{78,-61,48}, -{78,-61,49}, -{78,-61,50}, -{78,-61,51}, -{78,-61,52}, -{78,-61,53}, -{78,-61,54}, -{78,-61,55}, -{78,-61,56}, -{78,-61,57}, -{78,-61,58}, -{78,-61,59}, -{78,-61,60}, -{78,-61,61}, -{78,-61,62}, -{78,-61,63}, -{78,-61,64}, -{78,-61,65}, -{78,-61,66}, -{78,-61,67}, -{78,-61,68}, -{78,-61,69}, -{78,-61,70}, -{78,-61,71}, -{78,-61,72}, -{78,-61,73}, -{78,-61,74}, -{78,-61,75}, -{78,-61,76}, -{78,-60,20}, -{78,-60,21}, -{78,-60,22}, -{78,-60,23}, -{78,-60,24}, -{78,-60,25}, -{78,-60,26}, -{78,-60,27}, -{78,-60,28}, -{78,-60,29}, -{78,-60,30}, -{78,-60,31}, -{78,-60,32}, -{78,-60,33}, -{78,-60,34}, -{78,-60,35}, -{78,-60,36}, -{78,-60,37}, -{78,-60,38}, -{78,-60,39}, -{78,-60,40}, -{78,-60,41}, -{78,-60,42}, -{78,-60,43}, -{78,-60,44}, -{78,-60,45}, -{78,-60,46}, -{78,-60,47}, -{78,-60,48}, -{78,-60,49}, -{78,-60,50}, -{78,-60,51}, -{78,-60,52}, -{78,-60,53}, -{78,-60,54}, -{78,-60,55}, -{78,-60,56}, -{78,-60,57}, -{78,-60,58}, -{78,-60,59}, -{78,-60,60}, -{78,-60,61}, -{78,-60,62}, -{78,-60,63}, -{78,-60,64}, -{78,-60,65}, -{78,-60,66}, -{78,-60,67}, -{78,-60,68}, -{78,-60,69}, -{78,-60,70}, -{78,-60,71}, -{78,-60,72}, -{78,-60,73}, -{78,-60,74}, -{78,-60,75}, -{78,-60,76}, -{78,-59,18}, -{78,-59,19}, -{78,-59,20}, -{78,-59,21}, -{78,-59,22}, -{78,-59,23}, -{78,-59,24}, -{78,-59,25}, -{78,-59,26}, -{78,-59,27}, -{78,-59,28}, -{78,-59,29}, -{78,-59,30}, -{78,-59,31}, -{78,-59,32}, -{78,-59,33}, -{78,-59,34}, -{78,-59,35}, -{78,-59,36}, -{78,-59,37}, -{78,-59,38}, -{78,-59,39}, -{78,-59,40}, -{78,-59,41}, -{78,-59,42}, -{78,-59,43}, -{78,-59,44}, -{78,-59,45}, -{78,-59,46}, -{78,-59,47}, -{78,-59,48}, -{78,-59,49}, -{78,-59,50}, -{78,-59,51}, -{78,-59,52}, -{78,-59,53}, -{78,-59,54}, -{78,-59,55}, -{78,-59,56}, -{78,-59,57}, -{78,-59,58}, -{78,-59,59}, -{78,-59,60}, -{78,-59,61}, -{78,-59,62}, -{78,-59,63}, -{78,-59,64}, -{78,-59,65}, -{78,-59,66}, -{78,-59,67}, -{78,-59,68}, -{78,-59,69}, -{78,-59,70}, -{78,-59,71}, -{78,-59,72}, -{78,-59,73}, -{78,-59,74}, -{78,-59,75}, -{78,-59,76}, -{78,-58,16}, -{78,-58,17}, -{78,-58,18}, -{78,-58,19}, -{78,-58,20}, -{78,-58,21}, -{78,-58,22}, -{78,-58,23}, -{78,-58,24}, -{78,-58,25}, -{78,-58,26}, -{78,-58,27}, -{78,-58,28}, -{78,-58,29}, -{78,-58,30}, -{78,-58,31}, -{78,-58,32}, -{78,-58,33}, -{78,-58,34}, -{78,-58,35}, -{78,-58,36}, -{78,-58,37}, -{78,-58,38}, -{78,-58,39}, -{78,-58,40}, -{78,-58,41}, -{78,-58,42}, -{78,-58,43}, -{78,-58,44}, -{78,-58,45}, -{78,-58,46}, -{78,-58,47}, -{78,-58,48}, -{78,-58,49}, -{78,-58,50}, -{78,-58,51}, -{78,-58,52}, -{78,-58,53}, -{78,-58,54}, -{78,-58,55}, -{78,-58,56}, -{78,-58,57}, -{78,-58,58}, -{78,-58,59}, -{78,-58,60}, -{78,-58,61}, -{78,-58,62}, -{78,-58,63}, -{78,-58,64}, -{78,-58,65}, -{78,-58,66}, -{78,-58,67}, -{78,-58,68}, -{78,-58,69}, -{78,-58,70}, -{78,-58,71}, -{78,-58,72}, -{78,-58,73}, -{78,-58,74}, -{78,-58,75}, -{78,-58,76}, -{78,-57,14}, -{78,-57,15}, -{78,-57,16}, -{78,-57,17}, -{78,-57,18}, -{78,-57,19}, -{78,-57,20}, -{78,-57,21}, -{78,-57,22}, -{78,-57,23}, -{78,-57,24}, -{78,-57,25}, -{78,-57,26}, -{78,-57,27}, -{78,-57,28}, -{78,-57,29}, -{78,-57,30}, -{78,-57,31}, -{78,-57,32}, -{78,-57,33}, -{78,-57,34}, -{78,-57,35}, -{78,-57,36}, -{78,-57,37}, -{78,-57,38}, -{78,-57,39}, -{78,-57,40}, -{78,-57,41}, -{78,-57,42}, -{78,-57,43}, -{78,-57,44}, -{78,-57,45}, -{78,-57,46}, -{78,-57,47}, -{78,-57,48}, -{78,-57,49}, -{78,-57,50}, -{78,-57,51}, -{78,-57,52}, -{78,-57,53}, -{78,-57,54}, -{78,-57,55}, -{78,-57,56}, -{78,-57,57}, -{78,-57,58}, -{78,-57,59}, -{78,-57,60}, -{78,-57,61}, -{78,-57,62}, -{78,-57,63}, -{78,-57,64}, -{78,-57,65}, -{78,-57,66}, -{78,-57,67}, -{78,-57,68}, -{78,-57,69}, -{78,-57,70}, -{78,-57,71}, -{78,-57,72}, -{78,-57,73}, -{78,-57,74}, -{78,-57,75}, -{78,-57,76}, -{78,-56,12}, -{78,-56,13}, -{78,-56,14}, -{78,-56,15}, -{78,-56,16}, -{78,-56,17}, -{78,-56,18}, -{78,-56,19}, -{78,-56,20}, -{78,-56,21}, -{78,-56,22}, -{78,-56,23}, -{78,-56,24}, -{78,-56,25}, -{78,-56,26}, -{78,-56,27}, -{78,-56,28}, -{78,-56,29}, -{78,-56,30}, -{78,-56,31}, -{78,-56,32}, -{78,-56,33}, -{78,-56,34}, -{78,-56,35}, -{78,-56,36}, -{78,-56,37}, -{78,-56,38}, -{78,-56,39}, -{78,-56,40}, -{78,-56,41}, -{78,-56,42}, -{78,-56,43}, -{78,-56,44}, -{78,-56,45}, -{78,-56,46}, -{78,-56,47}, -{78,-56,48}, -{78,-56,49}, -{78,-56,50}, -{78,-56,51}, -{78,-56,52}, -{78,-56,53}, -{78,-56,54}, -{78,-56,55}, -{78,-56,56}, -{78,-56,57}, -{78,-56,58}, -{78,-56,59}, -{78,-56,60}, -{78,-56,61}, -{78,-56,62}, -{78,-56,63}, -{78,-56,64}, -{78,-56,65}, -{78,-56,66}, -{78,-56,67}, -{78,-56,68}, -{78,-56,69}, -{78,-56,70}, -{78,-56,71}, -{78,-56,72}, -{78,-56,73}, -{78,-56,74}, -{78,-56,75}, -{78,-56,76}, -{78,-55,10}, -{78,-55,11}, -{78,-55,12}, -{78,-55,13}, -{78,-55,14}, -{78,-55,15}, -{78,-55,16}, -{78,-55,17}, -{78,-55,18}, -{78,-55,19}, -{78,-55,20}, -{78,-55,21}, -{78,-55,22}, -{78,-55,23}, -{78,-55,24}, -{78,-55,25}, -{78,-55,26}, -{78,-55,27}, -{78,-55,28}, -{78,-55,29}, -{78,-55,30}, -{78,-55,31}, -{78,-55,32}, -{78,-55,33}, -{78,-55,34}, -{78,-55,35}, -{78,-55,36}, -{78,-55,37}, -{78,-55,38}, -{78,-55,39}, -{78,-55,40}, -{78,-55,41}, -{78,-55,42}, -{78,-55,43}, -{78,-55,44}, -{78,-55,45}, -{78,-55,46}, -{78,-55,47}, -{78,-55,48}, -{78,-55,49}, -{78,-55,50}, -{78,-55,51}, -{78,-55,52}, -{78,-55,53}, -{78,-55,54}, -{78,-55,55}, -{78,-55,56}, -{78,-55,57}, -{78,-55,58}, -{78,-55,59}, -{78,-55,60}, -{78,-55,61}, -{78,-55,62}, -{78,-55,63}, -{78,-55,64}, -{78,-55,65}, -{78,-55,66}, -{78,-55,67}, -{78,-55,68}, -{78,-55,69}, -{78,-55,70}, -{78,-55,71}, -{78,-55,72}, -{78,-55,73}, -{78,-55,74}, -{78,-55,75}, -{78,-55,76}, -{78,-54,8}, -{78,-54,9}, -{78,-54,10}, -{78,-54,11}, -{78,-54,12}, -{78,-54,13}, -{78,-54,14}, -{78,-54,15}, -{78,-54,16}, -{78,-54,17}, -{78,-54,18}, -{78,-54,19}, -{78,-54,20}, -{78,-54,21}, -{78,-54,22}, -{78,-54,23}, -{78,-54,24}, -{78,-54,25}, -{78,-54,26}, -{78,-54,27}, -{78,-54,28}, -{78,-54,29}, -{78,-54,30}, -{78,-54,31}, -{78,-54,32}, -{78,-54,33}, -{78,-54,34}, -{78,-54,35}, -{78,-54,36}, -{78,-54,37}, -{78,-54,38}, -{78,-54,39}, -{78,-54,40}, -{78,-54,41}, -{78,-54,42}, -{78,-54,43}, -{78,-54,44}, -{78,-54,45}, -{78,-54,46}, -{78,-54,47}, -{78,-54,48}, -{78,-54,49}, -{78,-54,50}, -{78,-54,51}, -{78,-54,52}, -{78,-54,53}, -{78,-54,54}, -{78,-54,55}, -{78,-54,56}, -{78,-54,57}, -{78,-54,58}, -{78,-54,59}, -{78,-54,60}, -{78,-54,61}, -{78,-54,62}, -{78,-54,63}, -{78,-54,64}, -{78,-54,65}, -{78,-54,66}, -{78,-54,67}, -{78,-54,68}, -{78,-54,69}, -{78,-54,70}, -{78,-54,71}, -{78,-54,72}, -{78,-54,73}, -{78,-54,74}, -{78,-54,75}, -{78,-54,76}, -{78,-53,6}, -{78,-53,7}, -{78,-53,8}, -{78,-53,9}, -{78,-53,10}, -{78,-53,11}, -{78,-53,12}, -{78,-53,13}, -{78,-53,14}, -{78,-53,15}, -{78,-53,16}, -{78,-53,17}, -{78,-53,18}, -{78,-53,19}, -{78,-53,20}, -{78,-53,21}, -{78,-53,22}, -{78,-53,23}, -{78,-53,24}, -{78,-53,25}, -{78,-53,26}, -{78,-53,27}, -{78,-53,28}, -{78,-53,29}, -{78,-53,30}, -{78,-53,31}, -{78,-53,32}, -{78,-53,33}, -{78,-53,34}, -{78,-53,35}, -{78,-53,36}, -{78,-53,37}, -{78,-53,38}, -{78,-53,39}, -{78,-53,40}, -{78,-53,41}, -{78,-53,42}, -{78,-53,43}, -{78,-53,44}, -{78,-53,45}, -{78,-53,46}, -{78,-53,47}, -{78,-53,48}, -{78,-53,49}, -{78,-53,50}, -{78,-53,51}, -{78,-53,52}, -{78,-53,53}, -{78,-53,54}, -{78,-53,55}, -{78,-53,56}, -{78,-53,57}, -{78,-53,58}, -{78,-53,59}, -{78,-53,60}, -{78,-53,61}, -{78,-53,62}, -{78,-53,63}, -{78,-53,64}, -{78,-53,65}, -{78,-53,66}, -{78,-53,67}, -{78,-53,68}, -{78,-53,69}, -{78,-53,70}, -{78,-53,71}, -{78,-53,72}, -{78,-53,73}, -{78,-53,74}, -{78,-53,75}, -{78,-53,76}, -{78,-52,4}, -{78,-52,5}, -{78,-52,6}, -{78,-52,7}, -{78,-52,8}, -{78,-52,9}, -{78,-52,10}, -{78,-52,11}, -{78,-52,12}, -{78,-52,13}, -{78,-52,14}, -{78,-52,15}, -{78,-52,16}, -{78,-52,17}, -{78,-52,18}, -{78,-52,19}, -{78,-52,20}, -{78,-52,21}, -{78,-52,22}, -{78,-52,23}, -{78,-52,24}, -{78,-52,25}, -{78,-52,26}, -{78,-52,27}, -{78,-52,28}, -{78,-52,29}, -{78,-52,30}, -{78,-52,31}, -{78,-52,32}, -{78,-52,33}, -{78,-52,34}, -{78,-52,35}, -{78,-52,36}, -{78,-52,37}, -{78,-52,38}, -{78,-52,39}, -{78,-52,40}, -{78,-52,41}, -{78,-52,42}, -{78,-52,43}, -{78,-52,44}, -{78,-52,45}, -{78,-52,46}, -{78,-52,47}, -{78,-52,48}, -{78,-52,49}, -{78,-52,50}, -{78,-52,51}, -{78,-52,52}, -{78,-52,53}, -{78,-52,54}, -{78,-52,55}, -{78,-52,56}, -{78,-52,57}, -{78,-52,58}, -{78,-52,59}, -{78,-52,60}, -{78,-52,61}, -{78,-52,62}, -{78,-52,63}, -{78,-52,64}, -{78,-52,65}, -{78,-52,66}, -{78,-52,67}, -{78,-52,68}, -{78,-52,69}, -{78,-52,70}, -{78,-52,71}, -{78,-52,72}, -{78,-52,73}, -{78,-52,74}, -{78,-52,75}, -{78,-52,76}, -{78,-51,2}, -{78,-51,3}, -{78,-51,4}, -{78,-51,5}, -{78,-51,6}, -{78,-51,7}, -{78,-51,8}, -{78,-51,9}, -{78,-51,10}, -{78,-51,11}, -{78,-51,12}, -{78,-51,13}, -{78,-51,14}, -{78,-51,15}, -{78,-51,16}, -{78,-51,17}, -{78,-51,18}, -{78,-51,19}, -{78,-51,20}, -{78,-51,21}, -{78,-51,22}, -{78,-51,23}, -{78,-51,24}, -{78,-51,25}, -{78,-51,26}, -{78,-51,27}, -{78,-51,28}, -{78,-51,29}, -{78,-51,30}, -{78,-51,31}, -{78,-51,32}, -{78,-51,33}, -{78,-51,34}, -{78,-51,35}, -{78,-51,36}, -{78,-51,37}, -{78,-51,38}, -{78,-51,39}, -{78,-51,40}, -{78,-51,41}, -{78,-51,42}, -{78,-51,43}, -{78,-51,44}, -{78,-51,45}, -{78,-51,46}, -{78,-51,47}, -{78,-51,48}, -{78,-51,49}, -{78,-51,50}, -{78,-51,51}, -{78,-51,52}, -{78,-51,53}, -{78,-51,54}, -{78,-51,55}, -{78,-51,56}, -{78,-51,57}, -{78,-51,58}, -{78,-51,59}, -{78,-51,60}, -{78,-51,61}, -{78,-51,62}, -{78,-51,63}, -{78,-51,64}, -{78,-51,65}, -{78,-51,66}, -{78,-51,67}, -{78,-51,68}, -{78,-51,69}, -{78,-51,70}, -{78,-51,71}, -{78,-51,72}, -{78,-51,73}, -{78,-51,74}, -{78,-51,75}, -{78,-51,76}, -{78,-50,1}, -{78,-50,2}, -{78,-50,3}, -{78,-50,4}, -{78,-50,5}, -{78,-50,6}, -{78,-50,7}, -{78,-50,8}, -{78,-50,9}, -{78,-50,10}, -{78,-50,11}, -{78,-50,12}, -{78,-50,13}, -{78,-50,14}, -{78,-50,15}, -{78,-50,16}, -{78,-50,17}, -{78,-50,18}, -{78,-50,19}, -{78,-50,20}, -{78,-50,21}, -{78,-50,22}, -{78,-50,23}, -{78,-50,24}, -{78,-50,25}, -{78,-50,26}, -{78,-50,27}, -{78,-50,28}, -{78,-50,29}, -{78,-50,30}, -{78,-50,31}, -{78,-50,32}, -{78,-50,33}, -{78,-50,34}, -{78,-50,35}, -{78,-50,36}, -{78,-50,37}, -{78,-50,38}, -{78,-50,39}, -{78,-50,40}, -{78,-50,41}, -{78,-50,42}, -{78,-50,43}, -{78,-50,44}, -{78,-50,45}, -{78,-50,46}, -{78,-50,47}, -{78,-50,48}, -{78,-50,49}, -{78,-50,50}, -{78,-50,51}, -{78,-50,52}, -{78,-50,53}, -{78,-50,54}, -{78,-50,55}, -{78,-50,56}, -{78,-50,57}, -{78,-50,58}, -{78,-50,59}, -{78,-50,60}, -{78,-50,61}, -{78,-50,62}, -{78,-50,63}, -{78,-50,64}, -{78,-50,65}, -{78,-50,66}, -{78,-50,67}, -{78,-50,68}, -{78,-50,69}, -{78,-50,70}, -{78,-50,71}, -{78,-50,72}, -{78,-50,73}, -{78,-50,74}, -{78,-50,75}, -{78,-50,76}, -{78,-49,-1}, -{78,-49,0}, -{78,-49,1}, -{78,-49,2}, -{78,-49,3}, -{78,-49,4}, -{78,-49,5}, -{78,-49,6}, -{78,-49,7}, -{78,-49,8}, -{78,-49,9}, -{78,-49,10}, -{78,-49,11}, -{78,-49,12}, -{78,-49,13}, -{78,-49,14}, -{78,-49,15}, -{78,-49,16}, -{78,-49,17}, -{78,-49,18}, -{78,-49,19}, -{78,-49,20}, -{78,-49,21}, -{78,-49,22}, -{78,-49,23}, -{78,-49,24}, -{78,-49,25}, -{78,-49,26}, -{78,-49,27}, -{78,-49,28}, -{78,-49,29}, -{78,-49,30}, -{78,-49,31}, -{78,-49,32}, -{78,-49,33}, -{78,-49,34}, -{78,-49,35}, -{78,-49,36}, -{78,-49,37}, -{78,-49,38}, -{78,-49,39}, -{78,-49,40}, -{78,-49,41}, -{78,-49,42}, -{78,-49,43}, -{78,-49,44}, -{78,-49,45}, -{78,-49,46}, -{78,-49,47}, -{78,-49,48}, -{78,-49,49}, -{78,-49,50}, -{78,-49,51}, -{78,-49,52}, -{78,-49,53}, -{78,-49,54}, -{78,-49,55}, -{78,-49,56}, -{78,-49,57}, -{78,-49,58}, -{78,-49,59}, -{78,-49,60}, -{78,-49,61}, -{78,-49,62}, -{78,-49,63}, -{78,-49,64}, -{78,-49,65}, -{78,-49,66}, -{78,-49,67}, -{78,-49,68}, -{78,-49,69}, -{78,-49,70}, -{78,-49,71}, -{78,-49,72}, -{78,-49,73}, -{78,-49,74}, -{78,-49,75}, -{78,-49,76}, -{78,-48,-3}, -{78,-48,-2}, -{78,-48,-1}, -{78,-48,0}, -{78,-48,1}, -{78,-48,2}, -{78,-48,3}, -{78,-48,4}, -{78,-48,5}, -{78,-48,6}, -{78,-48,7}, -{78,-48,8}, -{78,-48,9}, -{78,-48,10}, -{78,-48,11}, -{78,-48,12}, -{78,-48,13}, -{78,-48,14}, -{78,-48,15}, -{78,-48,16}, -{78,-48,17}, -{78,-48,18}, -{78,-48,19}, -{78,-48,20}, -{78,-48,21}, -{78,-48,22}, -{78,-48,23}, -{78,-48,24}, -{78,-48,25}, -{78,-48,26}, -{78,-48,27}, -{78,-48,28}, -{78,-48,29}, -{78,-48,30}, -{78,-48,31}, -{78,-48,32}, -{78,-48,33}, -{78,-48,34}, -{78,-48,35}, -{78,-48,36}, -{78,-48,37}, -{78,-48,38}, -{78,-48,39}, -{78,-48,40}, -{78,-48,41}, -{78,-48,42}, -{78,-48,43}, -{78,-48,44}, -{78,-48,45}, -{78,-48,46}, -{78,-48,47}, -{78,-48,48}, -{78,-48,49}, -{78,-48,50}, -{78,-48,51}, -{78,-48,52}, -{78,-48,53}, -{78,-48,54}, -{78,-48,55}, -{78,-48,56}, -{78,-48,57}, -{78,-48,58}, -{78,-48,59}, -{78,-48,60}, -{78,-48,61}, -{78,-48,62}, -{78,-48,63}, -{78,-48,64}, -{78,-48,65}, -{78,-48,66}, -{78,-48,67}, -{78,-48,68}, -{78,-48,69}, -{78,-48,70}, -{78,-48,71}, -{78,-48,72}, -{78,-48,73}, -{78,-48,74}, -{78,-48,75}, -{78,-48,76}, -{78,-47,-4}, -{78,-47,-3}, -{78,-47,-2}, -{78,-47,-1}, -{78,-47,0}, -{78,-47,1}, -{78,-47,2}, -{78,-47,3}, -{78,-47,4}, -{78,-47,5}, -{78,-47,6}, -{78,-47,7}, -{78,-47,8}, -{78,-47,9}, -{78,-47,10}, -{78,-47,11}, -{78,-47,12}, -{78,-47,13}, -{78,-47,14}, -{78,-47,15}, -{78,-47,16}, -{78,-47,17}, -{78,-47,18}, -{78,-47,19}, -{78,-47,20}, -{78,-47,21}, -{78,-47,22}, -{78,-47,23}, -{78,-47,24}, -{78,-47,25}, -{78,-47,26}, -{78,-47,27}, -{78,-47,28}, -{78,-47,29}, -{78,-47,30}, -{78,-47,31}, -{78,-47,32}, -{78,-47,33}, -{78,-47,34}, -{78,-47,35}, -{78,-47,36}, -{78,-47,37}, -{78,-47,38}, -{78,-47,39}, -{78,-47,40}, -{78,-47,41}, -{78,-47,42}, -{78,-47,43}, -{78,-47,44}, -{78,-47,45}, -{78,-47,46}, -{78,-47,47}, -{78,-47,48}, -{78,-47,49}, -{78,-47,50}, -{78,-47,51}, -{78,-47,52}, -{78,-47,53}, -{78,-47,54}, -{78,-47,55}, -{78,-47,56}, -{78,-47,57}, -{78,-47,58}, -{78,-47,59}, -{78,-47,60}, -{78,-47,61}, -{78,-47,62}, -{78,-47,63}, -{78,-47,64}, -{78,-47,65}, -{78,-47,66}, -{78,-47,67}, -{78,-47,68}, -{78,-47,69}, -{78,-47,70}, -{78,-47,71}, -{78,-47,72}, -{78,-47,73}, -{78,-47,74}, -{78,-47,75}, -{78,-47,76}, -{78,-47,77}, -{78,-46,-6}, -{78,-46,-5}, -{78,-46,-4}, -{78,-46,-3}, -{78,-46,-2}, -{78,-46,-1}, -{78,-46,0}, -{78,-46,1}, -{78,-46,2}, -{78,-46,3}, -{78,-46,4}, -{78,-46,5}, -{78,-46,6}, -{78,-46,7}, -{78,-46,8}, -{78,-46,9}, -{78,-46,10}, -{78,-46,11}, -{78,-46,12}, -{78,-46,13}, -{78,-46,14}, -{78,-46,15}, -{78,-46,16}, -{78,-46,17}, -{78,-46,18}, -{78,-46,19}, -{78,-46,20}, -{78,-46,21}, -{78,-46,22}, -{78,-46,23}, -{78,-46,24}, -{78,-46,25}, -{78,-46,26}, -{78,-46,27}, -{78,-46,28}, -{78,-46,29}, -{78,-46,30}, -{78,-46,31}, -{78,-46,32}, -{78,-46,33}, -{78,-46,34}, -{78,-46,35}, -{78,-46,36}, -{78,-46,37}, -{78,-46,38}, -{78,-46,39}, -{78,-46,40}, -{78,-46,41}, -{78,-46,42}, -{78,-46,43}, -{78,-46,44}, -{78,-46,45}, -{78,-46,46}, -{78,-46,47}, -{78,-46,48}, -{78,-46,49}, -{78,-46,50}, -{78,-46,51}, -{78,-46,52}, -{78,-46,53}, -{78,-46,54}, -{78,-46,55}, -{78,-46,56}, -{78,-46,57}, -{78,-46,58}, -{78,-46,59}, -{78,-46,60}, -{78,-46,61}, -{78,-46,62}, -{78,-46,63}, -{78,-46,64}, -{78,-46,65}, -{78,-46,66}, -{78,-46,67}, -{78,-46,68}, -{78,-46,69}, -{78,-46,70}, -{78,-46,71}, -{78,-46,72}, -{78,-46,73}, -{78,-46,74}, -{78,-46,75}, -{78,-46,76}, -{78,-46,77}, -{78,-45,-8}, -{78,-45,-7}, -{78,-45,-6}, -{78,-45,-5}, -{78,-45,-4}, -{78,-45,-3}, -{78,-45,-2}, -{78,-45,-1}, -{78,-45,0}, -{78,-45,1}, -{78,-45,2}, -{78,-45,3}, -{78,-45,4}, -{78,-45,5}, -{78,-45,6}, -{78,-45,7}, -{78,-45,8}, -{78,-45,9}, -{78,-45,10}, -{78,-45,11}, -{78,-45,12}, -{78,-45,13}, -{78,-45,14}, -{78,-45,15}, -{78,-45,16}, -{78,-45,17}, -{78,-45,18}, -{78,-45,19}, -{78,-45,20}, -{78,-45,21}, -{78,-45,22}, -{78,-45,23}, -{78,-45,24}, -{78,-45,25}, -{78,-45,26}, -{78,-45,27}, -{78,-45,28}, -{78,-45,29}, -{78,-45,30}, -{78,-45,31}, -{78,-45,32}, -{78,-45,33}, -{78,-45,34}, -{78,-45,35}, -{78,-45,36}, -{78,-45,37}, -{78,-45,38}, -{78,-45,39}, -{78,-45,40}, -{78,-45,41}, -{78,-45,42}, -{78,-45,43}, -{78,-45,44}, -{78,-45,45}, -{78,-45,46}, -{78,-45,47}, -{78,-45,48}, -{78,-45,49}, -{78,-45,50}, -{78,-45,51}, -{78,-45,52}, -{78,-45,53}, -{78,-45,54}, -{78,-45,55}, -{78,-45,56}, -{78,-45,57}, -{78,-45,58}, -{78,-45,59}, -{78,-45,60}, -{78,-45,61}, -{78,-45,62}, -{78,-45,63}, -{78,-45,64}, -{78,-45,65}, -{78,-45,66}, -{78,-45,67}, -{78,-45,68}, -{78,-45,69}, -{78,-45,70}, -{78,-45,71}, -{78,-45,72}, -{78,-45,73}, -{78,-45,74}, -{78,-45,75}, -{78,-45,76}, -{78,-45,77}, -{78,-44,-9}, -{78,-44,-8}, -{78,-44,-7}, -{78,-44,-6}, -{78,-44,-5}, -{78,-44,-4}, -{78,-44,-3}, -{78,-44,-2}, -{78,-44,-1}, -{78,-44,0}, -{78,-44,1}, -{78,-44,2}, -{78,-44,3}, -{78,-44,4}, -{78,-44,5}, -{78,-44,6}, -{78,-44,7}, -{78,-44,8}, -{78,-44,9}, -{78,-44,10}, -{78,-44,11}, -{78,-44,12}, -{78,-44,13}, -{78,-44,14}, -{78,-44,15}, -{78,-44,16}, -{78,-44,17}, -{78,-44,18}, -{78,-44,19}, -{78,-44,20}, -{78,-44,21}, -{78,-44,22}, -{78,-44,23}, -{78,-44,24}, -{78,-44,25}, -{78,-44,26}, -{78,-44,27}, -{78,-44,28}, -{78,-44,29}, -{78,-44,30}, -{78,-44,31}, -{78,-44,32}, -{78,-44,33}, -{78,-44,34}, -{78,-44,35}, -{78,-44,36}, -{78,-44,37}, -{78,-44,38}, -{78,-44,39}, -{78,-44,40}, -{78,-44,41}, -{78,-44,42}, -{78,-44,43}, -{78,-44,44}, -{78,-44,45}, -{78,-44,46}, -{78,-44,47}, -{78,-44,48}, -{78,-44,49}, -{78,-44,50}, -{78,-44,51}, -{78,-44,52}, -{78,-44,53}, -{78,-44,54}, -{78,-44,55}, -{78,-44,56}, -{78,-44,57}, -{78,-44,58}, -{78,-44,59}, -{78,-44,60}, -{78,-44,61}, -{78,-44,62}, -{78,-44,63}, -{78,-44,64}, -{78,-44,65}, -{78,-44,66}, -{78,-44,67}, -{78,-44,68}, -{78,-44,69}, -{78,-44,70}, -{78,-44,71}, -{78,-44,72}, -{78,-44,73}, -{78,-44,74}, -{78,-44,75}, -{78,-44,76}, -{78,-44,77}, -{78,-43,-11}, -{78,-43,-10}, -{78,-43,-9}, -{78,-43,-8}, -{78,-43,-7}, -{78,-43,-6}, -{78,-43,-5}, -{78,-43,-4}, -{78,-43,-3}, -{78,-43,-2}, -{78,-43,-1}, -{78,-43,0}, -{78,-43,1}, -{78,-43,2}, -{78,-43,3}, -{78,-43,4}, -{78,-43,5}, -{78,-43,6}, -{78,-43,7}, -{78,-43,8}, -{78,-43,9}, -{78,-43,10}, -{78,-43,11}, -{78,-43,12}, -{78,-43,13}, -{78,-43,14}, -{78,-43,15}, -{78,-43,16}, -{78,-43,17}, -{78,-43,18}, -{78,-43,19}, -{78,-43,20}, -{78,-43,21}, -{78,-43,22}, -{78,-43,23}, -{78,-43,24}, -{78,-43,25}, -{78,-43,26}, -{78,-43,27}, -{78,-43,28}, -{78,-43,29}, -{78,-43,30}, -{78,-43,31}, -{78,-43,32}, -{78,-43,33}, -{78,-43,34}, -{78,-43,35}, -{78,-43,36}, -{78,-43,37}, -{78,-43,38}, -{78,-43,39}, -{78,-43,40}, -{78,-43,41}, -{78,-43,42}, -{78,-43,43}, -{78,-43,44}, -{78,-43,45}, -{78,-43,46}, -{78,-43,47}, -{78,-43,48}, -{78,-43,49}, -{78,-43,50}, -{78,-43,51}, -{78,-43,52}, -{78,-43,53}, -{78,-43,54}, -{78,-43,55}, -{78,-43,56}, -{78,-43,57}, -{78,-43,58}, -{78,-43,59}, -{78,-43,60}, -{78,-43,61}, -{78,-43,62}, -{78,-43,63}, -{78,-43,64}, -{78,-43,65}, -{78,-43,66}, -{78,-43,67}, -{78,-43,68}, -{78,-43,69}, -{78,-43,70}, -{78,-43,71}, -{78,-43,72}, -{78,-43,73}, -{78,-43,74}, -{78,-43,75}, -{78,-43,76}, -{78,-43,77}, -{78,-42,-12}, -{78,-42,-11}, -{78,-42,-10}, -{78,-42,-9}, -{78,-42,-8}, -{78,-42,-7}, -{78,-42,-6}, -{78,-42,-5}, -{78,-42,-4}, -{78,-42,-3}, -{78,-42,-2}, -{78,-42,-1}, -{78,-42,0}, -{78,-42,1}, -{78,-42,2}, -{78,-42,3}, -{78,-42,4}, -{78,-42,5}, -{78,-42,6}, -{78,-42,7}, -{78,-42,8}, -{78,-42,9}, -{78,-42,10}, -{78,-42,11}, -{78,-42,12}, -{78,-42,13}, -{78,-42,14}, -{78,-42,15}, -{78,-42,16}, -{78,-42,17}, -{78,-42,18}, -{78,-42,19}, -{78,-42,20}, -{78,-42,21}, -{78,-42,22}, -{78,-42,23}, -{78,-42,24}, -{78,-42,25}, -{78,-42,26}, -{78,-42,27}, -{78,-42,28}, -{78,-42,29}, -{78,-42,30}, -{78,-42,31}, -{78,-42,32}, -{78,-42,33}, -{78,-42,34}, -{78,-42,35}, -{78,-42,36}, -{78,-42,37}, -{78,-42,38}, -{78,-42,39}, -{78,-42,40}, -{78,-42,41}, -{78,-42,42}, -{78,-42,43}, -{78,-42,44}, -{78,-42,45}, -{78,-42,46}, -{78,-42,47}, -{78,-42,48}, -{78,-42,49}, -{78,-42,50}, -{78,-42,51}, -{78,-42,52}, -{78,-42,53}, -{78,-42,54}, -{78,-42,55}, -{78,-42,56}, -{78,-42,57}, -{78,-42,58}, -{78,-42,59}, -{78,-42,60}, -{78,-42,61}, -{78,-42,62}, -{78,-42,63}, -{78,-42,64}, -{78,-42,65}, -{78,-42,66}, -{78,-42,67}, -{78,-42,68}, -{78,-42,69}, -{78,-42,70}, -{78,-42,71}, -{78,-42,72}, -{78,-42,73}, -{78,-42,74}, -{78,-42,75}, -{78,-42,76}, -{78,-42,77}, -{78,-41,-14}, -{78,-41,-13}, -{78,-41,-12}, -{78,-41,-11}, -{78,-41,-10}, -{78,-41,-9}, -{78,-41,-8}, -{78,-41,-7}, -{78,-41,-6}, -{78,-41,-5}, -{78,-41,-4}, -{78,-41,-3}, -{78,-41,-2}, -{78,-41,-1}, -{78,-41,0}, -{78,-41,1}, -{78,-41,2}, -{78,-41,3}, -{78,-41,4}, -{78,-41,5}, -{78,-41,6}, -{78,-41,7}, -{78,-41,8}, -{78,-41,9}, -{78,-41,10}, -{78,-41,11}, -{78,-41,12}, -{78,-41,13}, -{78,-41,14}, -{78,-41,15}, -{78,-41,16}, -{78,-41,17}, -{78,-41,18}, -{78,-41,19}, -{78,-41,20}, -{78,-41,21}, -{78,-41,22}, -{78,-41,23}, -{78,-41,24}, -{78,-41,25}, -{78,-41,26}, -{78,-41,27}, -{78,-41,28}, -{78,-41,29}, -{78,-41,30}, -{78,-41,31}, -{78,-41,32}, -{78,-41,33}, -{78,-41,34}, -{78,-41,35}, -{78,-41,36}, -{78,-41,37}, -{78,-41,38}, -{78,-41,39}, -{78,-41,40}, -{78,-41,41}, -{78,-41,42}, -{78,-41,43}, -{78,-41,44}, -{78,-41,45}, -{78,-41,46}, -{78,-41,47}, -{78,-41,48}, -{78,-41,49}, -{78,-41,50}, -{78,-41,51}, -{78,-41,52}, -{78,-41,53}, -{78,-41,54}, -{78,-41,55}, -{78,-41,56}, -{78,-41,57}, -{78,-41,58}, -{78,-41,59}, -{78,-41,60}, -{78,-41,61}, -{78,-41,62}, -{78,-41,63}, -{78,-41,64}, -{78,-41,65}, -{78,-41,66}, -{78,-41,67}, -{78,-41,68}, -{78,-41,69}, -{78,-41,70}, -{78,-41,71}, -{78,-41,72}, -{78,-41,73}, -{78,-41,74}, -{78,-41,75}, -{78,-41,76}, -{78,-41,77}, -{78,-40,-16}, -{78,-40,-15}, -{78,-40,-14}, -{78,-40,-13}, -{78,-40,-12}, -{78,-40,-11}, -{78,-40,-10}, -{78,-40,-9}, -{78,-40,-8}, -{78,-40,-7}, -{78,-40,-6}, -{78,-40,-5}, -{78,-40,-4}, -{78,-40,-3}, -{78,-40,-2}, -{78,-40,-1}, -{78,-40,0}, -{78,-40,1}, -{78,-40,2}, -{78,-40,3}, -{78,-40,4}, -{78,-40,5}, -{78,-40,6}, -{78,-40,7}, -{78,-40,8}, -{78,-40,9}, -{78,-40,10}, -{78,-40,11}, -{78,-40,12}, -{78,-40,13}, -{78,-40,14}, -{78,-40,15}, -{78,-40,16}, -{78,-40,17}, -{78,-40,18}, -{78,-40,19}, -{78,-40,20}, -{78,-40,21}, -{78,-40,22}, -{78,-40,23}, -{78,-40,24}, -{78,-40,25}, -{78,-40,26}, -{78,-40,27}, -{78,-40,28}, -{78,-40,29}, -{78,-40,30}, -{78,-40,31}, -{78,-40,32}, -{78,-40,33}, -{78,-40,34}, -{78,-40,35}, -{78,-40,36}, -{78,-40,37}, -{78,-40,38}, -{78,-40,39}, -{78,-40,40}, -{78,-40,41}, -{78,-40,42}, -{78,-40,43}, -{78,-40,44}, -{78,-40,45}, -{78,-40,46}, -{78,-40,47}, -{78,-40,48}, -{78,-40,49}, -{78,-40,50}, -{78,-40,51}, -{78,-40,52}, -{78,-40,53}, -{78,-40,54}, -{78,-40,55}, -{78,-40,56}, -{78,-40,57}, -{78,-40,58}, -{78,-40,59}, -{78,-40,60}, -{78,-40,61}, -{78,-40,62}, -{78,-40,63}, -{78,-40,64}, -{78,-40,65}, -{78,-40,66}, -{78,-40,67}, -{78,-40,68}, -{78,-40,69}, -{78,-40,70}, -{78,-40,71}, -{78,-40,72}, -{78,-40,73}, -{78,-40,74}, -{78,-40,75}, -{78,-40,76}, -{78,-40,77}, -{78,-39,-17}, -{78,-39,-16}, -{78,-39,-15}, -{78,-39,-14}, -{78,-39,-13}, -{78,-39,-12}, -{78,-39,-11}, -{78,-39,-10}, -{78,-39,-9}, -{78,-39,-8}, -{78,-39,-7}, -{78,-39,-6}, -{78,-39,-5}, -{78,-39,-4}, -{78,-39,-3}, -{78,-39,-2}, -{78,-39,-1}, -{78,-39,0}, -{78,-39,1}, -{78,-39,2}, -{78,-39,3}, -{78,-39,4}, -{78,-39,5}, -{78,-39,6}, -{78,-39,7}, -{78,-39,8}, -{78,-39,9}, -{78,-39,10}, -{78,-39,11}, -{78,-39,12}, -{78,-39,13}, -{78,-39,14}, -{78,-39,15}, -{78,-39,16}, -{78,-39,17}, -{78,-39,18}, -{78,-39,19}, -{78,-39,20}, -{78,-39,21}, -{78,-39,22}, -{78,-39,23}, -{78,-39,24}, -{78,-39,25}, -{78,-39,26}, -{78,-39,27}, -{78,-39,28}, -{78,-39,29}, -{78,-39,30}, -{78,-39,31}, -{78,-39,32}, -{78,-39,33}, -{78,-39,34}, -{78,-39,35}, -{78,-39,36}, -{78,-39,37}, -{78,-39,38}, -{78,-39,39}, -{78,-39,40}, -{78,-39,41}, -{78,-39,42}, -{78,-39,43}, -{78,-39,44}, -{78,-39,45}, -{78,-39,46}, -{78,-39,47}, -{78,-39,48}, -{78,-39,49}, -{78,-39,50}, -{78,-39,51}, -{78,-39,52}, -{78,-39,53}, -{78,-39,54}, -{78,-39,55}, -{78,-39,56}, -{78,-39,57}, -{78,-39,58}, -{78,-39,59}, -{78,-39,60}, -{78,-39,61}, -{78,-39,62}, -{78,-39,63}, -{78,-39,64}, -{78,-39,65}, -{78,-39,66}, -{78,-39,67}, -{78,-39,68}, -{78,-39,69}, -{78,-39,70}, -{78,-39,71}, -{78,-39,72}, -{78,-39,73}, -{78,-39,74}, -{78,-39,75}, -{78,-39,76}, -{78,-39,77}, -{78,-38,-19}, -{78,-38,-18}, -{78,-38,-17}, -{78,-38,-16}, -{78,-38,-15}, -{78,-38,-14}, -{78,-38,-13}, -{78,-38,-12}, -{78,-38,-11}, -{78,-38,-10}, -{78,-38,-9}, -{78,-38,-8}, -{78,-38,-7}, -{78,-38,-6}, -{78,-38,-5}, -{78,-38,-4}, -{78,-38,-3}, -{78,-38,-2}, -{78,-38,-1}, -{78,-38,0}, -{78,-38,1}, -{78,-38,2}, -{78,-38,3}, -{78,-38,4}, -{78,-38,5}, -{78,-38,6}, -{78,-38,7}, -{78,-38,8}, -{78,-38,9}, -{78,-38,10}, -{78,-38,11}, -{78,-38,12}, -{78,-38,13}, -{78,-38,14}, -{78,-38,15}, -{78,-38,16}, -{78,-38,17}, -{78,-38,18}, -{78,-38,19}, -{78,-38,20}, -{78,-38,21}, -{78,-38,22}, -{78,-38,23}, -{78,-38,24}, -{78,-38,25}, -{78,-38,26}, -{78,-38,27}, -{78,-38,28}, -{78,-38,29}, -{78,-38,30}, -{78,-38,31}, -{78,-38,32}, -{78,-38,33}, -{78,-38,34}, -{78,-38,35}, -{78,-38,36}, -{78,-38,37}, -{78,-38,38}, -{78,-38,39}, -{78,-38,40}, -{78,-38,41}, -{78,-38,42}, -{78,-38,43}, -{78,-38,44}, -{78,-38,45}, -{78,-38,46}, -{78,-38,47}, -{78,-38,48}, -{78,-38,49}, -{78,-38,50}, -{78,-38,51}, -{78,-38,52}, -{78,-38,53}, -{78,-38,54}, -{78,-38,55}, -{78,-38,56}, -{78,-38,57}, -{78,-38,58}, -{78,-38,59}, -{78,-38,60}, -{78,-38,61}, -{78,-38,62}, -{78,-38,63}, -{78,-38,64}, -{78,-38,65}, -{78,-38,66}, -{78,-38,67}, -{78,-38,68}, -{78,-38,69}, -{78,-38,70}, -{78,-38,71}, -{78,-38,72}, -{78,-38,73}, -{78,-38,74}, -{78,-38,75}, -{78,-38,76}, -{78,-38,77}, -{78,-37,-20}, -{78,-37,-19}, -{78,-37,-18}, -{78,-37,-17}, -{78,-37,-16}, -{78,-37,-15}, -{78,-37,-14}, -{78,-37,-13}, -{78,-37,-12}, -{78,-37,-11}, -{78,-37,-10}, -{78,-37,-9}, -{78,-37,-8}, -{78,-37,-7}, -{78,-37,-6}, -{78,-37,-5}, -{78,-37,-4}, -{78,-37,-3}, -{78,-37,-2}, -{78,-37,-1}, -{78,-37,0}, -{78,-37,1}, -{78,-37,2}, -{78,-37,3}, -{78,-37,4}, -{78,-37,5}, -{78,-37,6}, -{78,-37,7}, -{78,-37,8}, -{78,-37,9}, -{78,-37,10}, -{78,-37,11}, -{78,-37,12}, -{78,-37,13}, -{78,-37,14}, -{78,-37,15}, -{78,-37,16}, -{78,-37,17}, -{78,-37,18}, -{78,-37,19}, -{78,-37,20}, -{78,-37,21}, -{78,-37,22}, -{78,-37,23}, -{78,-37,24}, -{78,-37,25}, -{78,-37,26}, -{78,-37,27}, -{78,-37,28}, -{78,-37,29}, -{78,-37,30}, -{78,-37,31}, -{78,-37,32}, -{78,-37,33}, -{78,-37,34}, -{78,-37,35}, -{78,-37,36}, -{78,-37,37}, -{78,-37,38}, -{78,-37,39}, -{78,-37,40}, -{78,-37,41}, -{78,-37,42}, -{78,-37,43}, -{78,-37,44}, -{78,-37,45}, -{78,-37,46}, -{78,-37,47}, -{78,-37,48}, -{78,-37,49}, -{78,-37,50}, -{78,-37,51}, -{78,-37,52}, -{78,-37,53}, -{78,-37,54}, -{78,-37,55}, -{78,-37,56}, -{78,-37,57}, -{78,-37,58}, -{78,-37,59}, -{78,-37,60}, -{78,-37,61}, -{78,-37,62}, -{78,-37,63}, -{78,-37,64}, -{78,-37,65}, -{78,-37,66}, -{78,-37,67}, -{78,-37,68}, -{78,-37,69}, -{78,-37,70}, -{78,-37,71}, -{78,-37,72}, -{78,-37,73}, -{78,-37,74}, -{78,-37,75}, -{78,-37,76}, -{78,-37,77}, -{78,-36,-22}, -{78,-36,-21}, -{78,-36,-20}, -{78,-36,-19}, -{78,-36,-18}, -{78,-36,-17}, -{78,-36,-16}, -{78,-36,-15}, -{78,-36,-14}, -{78,-36,-13}, -{78,-36,-12}, -{78,-36,-11}, -{78,-36,-10}, -{78,-36,-9}, -{78,-36,-8}, -{78,-36,-7}, -{78,-36,-6}, -{78,-36,-5}, -{78,-36,-4}, -{78,-36,-3}, -{78,-36,-2}, -{78,-36,-1}, -{78,-36,0}, -{78,-36,1}, -{78,-36,2}, -{78,-36,3}, -{78,-36,4}, -{78,-36,5}, -{78,-36,6}, -{78,-36,7}, -{78,-36,8}, -{78,-36,9}, -{78,-36,10}, -{78,-36,11}, -{78,-36,12}, -{78,-36,13}, -{78,-36,14}, -{78,-36,15}, -{78,-36,16}, -{78,-36,17}, -{78,-36,18}, -{78,-36,19}, -{78,-36,20}, -{78,-36,21}, -{78,-36,22}, -{78,-36,23}, -{78,-36,24}, -{78,-36,25}, -{78,-36,26}, -{78,-36,27}, -{78,-36,28}, -{78,-36,29}, -{78,-36,30}, -{78,-36,31}, -{78,-36,32}, -{78,-36,33}, -{78,-36,34}, -{78,-36,35}, -{78,-36,36}, -{78,-36,37}, -{78,-36,38}, -{78,-36,39}, -{78,-36,40}, -{78,-36,41}, -{78,-36,42}, -{78,-36,43}, -{78,-36,44}, -{78,-36,45}, -{78,-36,46}, -{78,-36,47}, -{78,-36,48}, -{78,-36,49}, -{78,-36,50}, -{78,-36,51}, -{78,-36,52}, -{78,-36,53}, -{78,-36,54}, -{78,-36,55}, -{78,-36,56}, -{78,-36,57}, -{78,-36,58}, -{78,-36,59}, -{78,-36,60}, -{78,-36,61}, -{78,-36,62}, -{78,-36,63}, -{78,-36,64}, -{78,-36,65}, -{78,-36,66}, -{78,-36,67}, -{78,-36,68}, -{78,-36,69}, -{78,-36,70}, -{78,-36,71}, -{78,-36,72}, -{78,-36,73}, -{78,-36,74}, -{78,-36,75}, -{78,-36,76}, -{78,-36,77}, -{78,-35,-23}, -{78,-35,-22}, -{78,-35,-21}, -{78,-35,-20}, -{78,-35,-19}, -{78,-35,-18}, -{78,-35,-17}, -{78,-35,-16}, -{78,-35,-15}, -{78,-35,-14}, -{78,-35,-13}, -{78,-35,-12}, -{78,-35,-11}, -{78,-35,-10}, -{78,-35,-9}, -{78,-35,-8}, -{78,-35,-7}, -{78,-35,-6}, -{78,-35,-5}, -{78,-35,-4}, -{78,-35,-3}, -{78,-35,-2}, -{78,-35,-1}, -{78,-35,0}, -{78,-35,1}, -{78,-35,2}, -{78,-35,3}, -{78,-35,4}, -{78,-35,5}, -{78,-35,6}, -{78,-35,7}, -{78,-35,8}, -{78,-35,9}, -{78,-35,10}, -{78,-35,11}, -{78,-35,12}, -{78,-35,13}, -{78,-35,14}, -{78,-35,15}, -{78,-35,16}, -{78,-35,17}, -{78,-35,18}, -{78,-35,19}, -{78,-35,20}, -{78,-35,21}, -{78,-35,22}, -{78,-35,23}, -{78,-35,24}, -{78,-35,25}, -{78,-35,26}, -{78,-35,27}, -{78,-35,28}, -{78,-35,29}, -{78,-35,30}, -{78,-35,31}, -{78,-35,32}, -{78,-35,33}, -{78,-35,34}, -{78,-35,35}, -{78,-35,36}, -{78,-35,37}, -{78,-35,38}, -{78,-35,39}, -{78,-35,40}, -{78,-35,41}, -{78,-35,42}, -{78,-35,43}, -{78,-35,44}, -{78,-35,45}, -{78,-35,46}, -{78,-35,47}, -{78,-35,48}, -{78,-35,49}, -{78,-35,50}, -{78,-35,51}, -{78,-35,52}, -{78,-35,53}, -{78,-35,54}, -{78,-35,55}, -{78,-35,56}, -{78,-35,57}, -{78,-35,58}, -{78,-35,59}, -{78,-35,60}, -{78,-35,61}, -{78,-35,62}, -{78,-35,63}, -{78,-35,64}, -{78,-35,65}, -{78,-35,66}, -{78,-35,67}, -{78,-35,68}, -{78,-35,69}, -{78,-35,70}, -{78,-35,71}, -{78,-35,72}, -{78,-35,73}, -{78,-35,74}, -{78,-35,75}, -{78,-35,76}, -{78,-35,77}, -{78,-34,-24}, -{78,-34,-23}, -{78,-34,-22}, -{78,-34,-21}, -{78,-34,-20}, -{78,-34,-19}, -{78,-34,-18}, -{78,-34,-17}, -{78,-34,-16}, -{78,-34,-15}, -{78,-34,-14}, -{78,-34,-13}, -{78,-34,-12}, -{78,-34,-11}, -{78,-34,-10}, -{78,-34,-9}, -{78,-34,-8}, -{78,-34,-7}, -{78,-34,-6}, -{78,-34,-5}, -{78,-34,-4}, -{78,-34,-3}, -{78,-34,-2}, -{78,-34,-1}, -{78,-34,0}, -{78,-34,1}, -{78,-34,2}, -{78,-34,3}, -{78,-34,4}, -{78,-34,5}, -{78,-34,6}, -{78,-34,7}, -{78,-34,8}, -{78,-34,9}, -{78,-34,10}, -{78,-34,11}, -{78,-34,12}, -{78,-34,13}, -{78,-34,14}, -{78,-34,15}, -{78,-34,16}, -{78,-34,17}, -{78,-34,18}, -{78,-34,19}, -{78,-34,20}, -{78,-34,21}, -{78,-34,22}, -{78,-34,23}, -{78,-34,24}, -{78,-34,25}, -{78,-34,26}, -{78,-34,27}, -{78,-34,28}, -{78,-34,29}, -{78,-34,30}, -{78,-34,31}, -{78,-34,32}, -{78,-34,33}, -{78,-34,34}, -{78,-34,35}, -{78,-34,36}, -{78,-34,37}, -{78,-34,38}, -{78,-34,39}, -{78,-34,40}, -{78,-34,41}, -{78,-34,42}, -{78,-34,43}, -{78,-34,44}, -{78,-34,45}, -{78,-34,46}, -{78,-34,47}, -{78,-34,48}, -{78,-34,49}, -{78,-34,50}, -{78,-34,51}, -{78,-34,52}, -{78,-34,53}, -{78,-34,54}, -{78,-34,55}, -{78,-34,56}, -{78,-34,57}, -{78,-34,58}, -{78,-34,59}, -{78,-34,60}, -{78,-34,61}, -{78,-34,62}, -{78,-34,63}, -{78,-34,64}, -{78,-34,65}, -{78,-34,66}, -{78,-34,67}, -{78,-34,68}, -{78,-34,69}, -{78,-34,70}, -{78,-34,71}, -{78,-34,72}, -{78,-34,73}, -{78,-34,74}, -{78,-34,75}, -{78,-34,76}, -{78,-34,77}, -{78,-33,-26}, -{78,-33,-25}, -{78,-33,-24}, -{78,-33,-23}, -{78,-33,-22}, -{78,-33,-21}, -{78,-33,-20}, -{78,-33,-19}, -{78,-33,-18}, -{78,-33,-17}, -{78,-33,-16}, -{78,-33,-15}, -{78,-33,-14}, -{78,-33,-13}, -{78,-33,-12}, -{78,-33,-11}, -{78,-33,-10}, -{78,-33,-9}, -{78,-33,-8}, -{78,-33,-7}, -{78,-33,-6}, -{78,-33,-5}, -{78,-33,-4}, -{78,-33,-3}, -{78,-33,-2}, -{78,-33,-1}, -{78,-33,0}, -{78,-33,1}, -{78,-33,2}, -{78,-33,3}, -{78,-33,4}, -{78,-33,5}, -{78,-33,6}, -{78,-33,7}, -{78,-33,8}, -{78,-33,9}, -{78,-33,10}, -{78,-33,11}, -{78,-33,12}, -{78,-33,13}, -{78,-33,14}, -{78,-33,15}, -{78,-33,16}, -{78,-33,17}, -{78,-33,18}, -{78,-33,19}, -{78,-33,20}, -{78,-33,21}, -{78,-33,22}, -{78,-33,23}, -{78,-33,24}, -{78,-33,25}, -{78,-33,26}, -{78,-33,27}, -{78,-33,28}, -{78,-33,29}, -{78,-33,30}, -{78,-33,31}, -{78,-33,32}, -{78,-33,33}, -{78,-33,34}, -{78,-33,35}, -{78,-33,36}, -{78,-33,37}, -{78,-33,38}, -{78,-33,39}, -{78,-33,40}, -{78,-33,41}, -{78,-33,42}, -{78,-33,43}, -{78,-33,44}, -{78,-33,45}, -{78,-33,46}, -{78,-33,47}, -{78,-33,48}, -{78,-33,49}, -{78,-33,50}, -{78,-33,51}, -{78,-33,52}, -{78,-33,53}, -{78,-33,54}, -{78,-33,55}, -{78,-33,56}, -{78,-33,57}, -{78,-33,58}, -{78,-33,59}, -{78,-33,60}, -{78,-33,61}, -{78,-33,62}, -{78,-33,63}, -{78,-33,64}, -{78,-33,65}, -{78,-33,66}, -{78,-33,67}, -{78,-33,68}, -{78,-33,69}, -{78,-33,70}, -{78,-33,71}, -{78,-33,72}, -{78,-33,73}, -{78,-33,74}, -{78,-33,75}, -{78,-33,76}, -{78,-33,77}, -{78,-32,-27}, -{78,-32,-26}, -{78,-32,-25}, -{78,-32,-24}, -{78,-32,-23}, -{78,-32,-22}, -{78,-32,-21}, -{78,-32,-20}, -{78,-32,-19}, -{78,-32,-18}, -{78,-32,-17}, -{78,-32,-16}, -{78,-32,-15}, -{78,-32,-14}, -{78,-32,-13}, -{78,-32,-12}, -{78,-32,-11}, -{78,-32,-10}, -{78,-32,-9}, -{78,-32,-8}, -{78,-32,-7}, -{78,-32,-6}, -{78,-32,-5}, -{78,-32,-4}, -{78,-32,-3}, -{78,-32,-2}, -{78,-32,-1}, -{78,-32,0}, -{78,-32,1}, -{78,-32,2}, -{78,-32,3}, -{78,-32,4}, -{78,-32,5}, -{78,-32,6}, -{78,-32,7}, -{78,-32,8}, -{78,-32,9}, -{78,-32,10}, -{78,-32,11}, -{78,-32,12}, -{78,-32,13}, -{78,-32,14}, -{78,-32,15}, -{78,-32,16}, -{78,-32,17}, -{78,-32,18}, -{78,-32,19}, -{78,-32,20}, -{78,-32,21}, -{78,-32,22}, -{78,-32,23}, -{78,-32,24}, -{78,-32,25}, -{78,-32,26}, -{78,-32,27}, -{78,-32,28}, -{78,-32,29}, -{78,-32,30}, -{78,-32,31}, -{78,-32,32}, -{78,-32,33}, -{78,-32,34}, -{78,-32,35}, -{78,-32,36}, -{78,-32,37}, -{78,-32,38}, -{78,-32,39}, -{78,-32,40}, -{78,-32,41}, -{78,-32,42}, -{78,-32,43}, -{78,-32,44}, -{78,-32,45}, -{78,-32,46}, -{78,-32,47}, -{78,-32,48}, -{78,-32,49}, -{78,-32,50}, -{78,-32,51}, -{78,-32,52}, -{78,-32,53}, -{78,-32,54}, -{78,-32,55}, -{78,-32,56}, -{78,-32,57}, -{78,-32,58}, -{78,-32,59}, -{78,-32,60}, -{78,-32,61}, -{78,-32,62}, -{78,-32,63}, -{78,-32,64}, -{78,-32,65}, -{78,-32,66}, -{78,-32,67}, -{78,-32,68}, -{78,-32,69}, -{78,-32,70}, -{78,-32,71}, -{78,-32,72}, -{78,-32,73}, -{78,-32,74}, -{78,-32,75}, -{78,-32,76}, -{78,-32,77}, -{78,-31,-29}, -{78,-31,-28}, -{78,-31,-27}, -{78,-31,-26}, -{78,-31,-25}, -{78,-31,-24}, -{78,-31,-23}, -{78,-31,-22}, -{78,-31,-21}, -{78,-31,-20}, -{78,-31,-19}, -{78,-31,-18}, -{78,-31,-17}, -{78,-31,-16}, -{78,-31,-15}, -{78,-31,-14}, -{78,-31,-13}, -{78,-31,-12}, -{78,-31,-11}, -{78,-31,-10}, -{78,-31,-9}, -{78,-31,-8}, -{78,-31,-7}, -{78,-31,-6}, -{78,-31,-5}, -{78,-31,-4}, -{78,-31,-3}, -{78,-31,-2}, -{78,-31,-1}, -{78,-31,0}, -{78,-31,1}, -{78,-31,2}, -{78,-31,3}, -{78,-31,4}, -{78,-31,5}, -{78,-31,6}, -{78,-31,7}, -{78,-31,8}, -{78,-31,9}, -{78,-31,10}, -{78,-31,11}, -{78,-31,12}, -{78,-31,13}, -{78,-31,14}, -{78,-31,15}, -{78,-31,16}, -{78,-31,17}, -{78,-31,18}, -{78,-31,19}, -{78,-31,20}, -{78,-31,21}, -{78,-31,22}, -{78,-31,23}, -{78,-31,24}, -{78,-31,25}, -{78,-31,26}, -{78,-31,27}, -{78,-31,28}, -{78,-31,29}, -{78,-31,30}, -{78,-31,31}, -{78,-31,32}, -{78,-31,33}, -{78,-31,34}, -{78,-31,35}, -{78,-31,36}, -{78,-31,37}, -{78,-31,38}, -{78,-31,39}, -{78,-31,40}, -{78,-31,41}, -{78,-31,42}, -{78,-31,43}, -{78,-31,44}, -{78,-31,45}, -{78,-31,46}, -{78,-31,47}, -{78,-31,48}, -{78,-31,49}, -{78,-31,50}, -{78,-31,51}, -{78,-31,52}, -{78,-31,53}, -{78,-31,54}, -{78,-31,55}, -{78,-31,56}, -{78,-31,57}, -{78,-31,58}, -{78,-31,59}, -{78,-31,60}, -{78,-31,61}, -{78,-31,62}, -{78,-31,63}, -{78,-31,64}, -{78,-31,65}, -{78,-31,66}, -{78,-31,67}, -{78,-31,68}, -{78,-31,69}, -{78,-31,70}, -{78,-31,71}, -{78,-31,72}, -{78,-31,73}, -{78,-31,74}, -{78,-31,75}, -{78,-31,76}, -{78,-31,77}, -{78,-30,-30}, -{78,-30,-29}, -{78,-30,-28}, -{78,-30,-27}, -{78,-30,-26}, -{78,-30,-25}, -{78,-30,-24}, -{78,-30,-23}, -{78,-30,-22}, -{78,-30,-21}, -{78,-30,-20}, -{78,-30,-19}, -{78,-30,-18}, -{78,-30,-17}, -{78,-30,-16}, -{78,-30,-15}, -{78,-30,-14}, -{78,-30,-13}, -{78,-30,-12}, -{78,-30,-11}, -{78,-30,-10}, -{78,-30,-9}, -{78,-30,-8}, -{78,-30,-7}, -{78,-30,-6}, -{78,-30,-5}, -{78,-30,-4}, -{78,-30,-3}, -{78,-30,-2}, -{78,-30,-1}, -{78,-30,0}, -{78,-30,1}, -{78,-30,2}, -{78,-30,3}, -{78,-30,4}, -{78,-30,5}, -{78,-30,6}, -{78,-30,7}, -{78,-30,8}, -{78,-30,9}, -{78,-30,10}, -{78,-30,11}, -{78,-30,12}, -{78,-30,13}, -{78,-30,14}, -{78,-30,15}, -{78,-30,16}, -{78,-30,17}, -{78,-30,18}, -{78,-30,19}, -{78,-30,20}, -{78,-30,21}, -{78,-30,22}, -{78,-30,23}, -{78,-30,24}, -{78,-30,25}, -{78,-30,26}, -{78,-30,27}, -{78,-30,28}, -{78,-30,29}, -{78,-30,30}, -{78,-30,31}, -{78,-30,32}, -{78,-30,33}, -{78,-30,34}, -{78,-30,35}, -{78,-30,36}, -{78,-30,37}, -{78,-30,38}, -{78,-30,39}, -{78,-30,40}, -{78,-30,41}, -{78,-30,42}, -{78,-30,43}, -{78,-30,44}, -{78,-30,45}, -{78,-30,46}, -{78,-30,47}, -{78,-30,48}, -{78,-30,49}, -{78,-30,50}, -{78,-30,51}, -{78,-30,52}, -{78,-30,53}, -{78,-30,54}, -{78,-30,55}, -{78,-30,56}, -{78,-30,57}, -{78,-30,58}, -{78,-30,59}, -{78,-30,60}, -{78,-30,61}, -{78,-30,62}, -{78,-30,63}, -{78,-30,64}, -{78,-30,65}, -{78,-30,66}, -{78,-30,67}, -{78,-30,68}, -{78,-30,69}, -{78,-30,70}, -{78,-30,71}, -{78,-30,72}, -{78,-30,73}, -{78,-30,74}, -{78,-30,75}, -{78,-30,76}, -{78,-30,77}, -{78,-29,-31}, -{78,-29,-30}, -{78,-29,-29}, -{78,-29,-28}, -{78,-29,-27}, -{78,-29,-26}, -{78,-29,-25}, -{78,-29,-24}, -{78,-29,-23}, -{78,-29,-22}, -{78,-29,-21}, -{78,-29,-20}, -{78,-29,-19}, -{78,-29,-18}, -{78,-29,-17}, -{78,-29,-16}, -{78,-29,-15}, -{78,-29,-14}, -{78,-29,-13}, -{78,-29,-12}, -{78,-29,-11}, -{78,-29,-10}, -{78,-29,-9}, -{78,-29,-8}, -{78,-29,-7}, -{78,-29,-6}, -{78,-29,-5}, -{78,-29,-4}, -{78,-29,-3}, -{78,-29,-2}, -{78,-29,-1}, -{78,-29,0}, -{78,-29,1}, -{78,-29,2}, -{78,-29,3}, -{78,-29,4}, -{78,-29,5}, -{78,-29,6}, -{78,-29,7}, -{78,-29,8}, -{78,-29,9}, -{78,-29,10}, -{78,-29,11}, -{78,-29,12}, -{78,-29,13}, -{78,-29,14}, -{78,-29,15}, -{78,-29,16}, -{78,-29,17}, -{78,-29,18}, -{78,-29,19}, -{78,-29,20}, -{78,-29,21}, -{78,-29,22}, -{78,-29,23}, -{78,-29,24}, -{78,-29,25}, -{78,-29,26}, -{78,-29,27}, -{78,-29,28}, -{78,-29,29}, -{78,-29,30}, -{78,-29,31}, -{78,-29,32}, -{78,-29,33}, -{78,-29,34}, -{78,-29,35}, -{78,-29,36}, -{78,-29,37}, -{78,-29,38}, -{78,-29,39}, -{78,-29,40}, -{78,-29,41}, -{78,-29,42}, -{78,-29,43}, -{78,-29,44}, -{78,-29,45}, -{78,-29,46}, -{78,-29,47}, -{78,-29,48}, -{78,-29,49}, -{78,-29,50}, -{78,-29,51}, -{78,-29,52}, -{78,-29,53}, -{78,-29,54}, -{78,-29,55}, -{78,-29,56}, -{78,-29,57}, -{78,-29,58}, -{78,-29,59}, -{78,-29,60}, -{78,-29,61}, -{78,-29,62}, -{78,-29,63}, -{78,-29,64}, -{78,-29,65}, -{78,-29,66}, -{78,-29,67}, -{78,-29,68}, -{78,-29,69}, -{78,-29,70}, -{78,-29,71}, -{78,-29,72}, -{78,-29,73}, -{78,-29,74}, -{78,-29,75}, -{78,-29,76}, -{78,-29,77}, -{78,-29,78}, -{78,-28,-33}, -{78,-28,-32}, -{78,-28,-31}, -{78,-28,-30}, -{78,-28,-29}, -{78,-28,-28}, -{78,-28,-27}, -{78,-28,-26}, -{78,-28,-25}, -{78,-28,-24}, -{78,-28,-23}, -{78,-28,-22}, -{78,-28,-21}, -{78,-28,-20}, -{78,-28,-19}, -{78,-28,-18}, -{78,-28,-17}, -{78,-28,-16}, -{78,-28,-15}, -{78,-28,-14}, -{78,-28,-13}, -{78,-28,-12}, -{78,-28,-11}, -{78,-28,-10}, -{78,-28,-9}, -{78,-28,-8}, -{78,-28,-7}, -{78,-28,-6}, -{78,-28,-5}, -{78,-28,-4}, -{78,-28,-3}, -{78,-28,-2}, -{78,-28,-1}, -{78,-28,0}, -{78,-28,1}, -{78,-28,2}, -{78,-28,3}, -{78,-28,4}, -{78,-28,5}, -{78,-28,6}, -{78,-28,7}, -{78,-28,8}, -{78,-28,9}, -{78,-28,10}, -{78,-28,11}, -{78,-28,12}, -{78,-28,13}, -{78,-28,14}, -{78,-28,15}, -{78,-28,16}, -{78,-28,17}, -{78,-28,18}, -{78,-28,19}, -{78,-28,20}, -{78,-28,21}, -{78,-28,22}, -{78,-28,23}, -{78,-28,24}, -{78,-28,25}, -{78,-28,26}, -{78,-28,27}, -{78,-28,28}, -{78,-28,29}, -{78,-28,30}, -{78,-28,31}, -{78,-28,32}, -{78,-28,33}, -{78,-28,34}, -{78,-28,35}, -{78,-28,36}, -{78,-28,37}, -{78,-28,38}, -{78,-28,39}, -{78,-28,40}, -{78,-28,41}, -{78,-28,42}, -{78,-28,43}, -{78,-28,44}, -{78,-28,45}, -{78,-28,46}, -{78,-28,47}, -{78,-28,48}, -{78,-28,49}, -{78,-28,50}, -{78,-28,51}, -{78,-28,52}, -{78,-28,53}, -{78,-28,54}, -{78,-28,55}, -{78,-28,56}, -{78,-28,57}, -{78,-28,58}, -{78,-28,59}, -{78,-28,60}, -{78,-28,61}, -{78,-28,62}, -{78,-28,63}, -{78,-28,64}, -{78,-28,65}, -{78,-28,66}, -{78,-28,67}, -{78,-28,68}, -{78,-28,69}, -{78,-28,70}, -{78,-28,71}, -{78,-28,72}, -{78,-28,73}, -{78,-28,74}, -{78,-28,75}, -{78,-28,76}, -{78,-28,77}, -{78,-28,78}, -{78,-27,-34}, -{78,-27,-33}, -{78,-27,-32}, -{78,-27,-31}, -{78,-27,-30}, -{78,-27,-29}, -{78,-27,-28}, -{78,-27,-27}, -{78,-27,-26}, -{78,-27,-25}, -{78,-27,-24}, -{78,-27,-23}, -{78,-27,-22}, -{78,-27,-21}, -{78,-27,-20}, -{78,-27,-19}, -{78,-27,-18}, -{78,-27,-17}, -{78,-27,-16}, -{78,-27,-15}, -{78,-27,-14}, -{78,-27,-13}, -{78,-27,-12}, -{78,-27,-11}, -{78,-27,-10}, -{78,-27,-9}, -{78,-27,-8}, -{78,-27,-7}, -{78,-27,-6}, -{78,-27,-5}, -{78,-27,-4}, -{78,-27,-3}, -{78,-27,-2}, -{78,-27,-1}, -{78,-27,0}, -{78,-27,1}, -{78,-27,2}, -{78,-27,3}, -{78,-27,4}, -{78,-27,5}, -{78,-27,6}, -{78,-27,7}, -{78,-27,8}, -{78,-27,9}, -{78,-27,10}, -{78,-27,11}, -{78,-27,12}, -{78,-27,13}, -{78,-27,14}, -{78,-27,15}, -{78,-27,16}, -{78,-27,17}, -{78,-27,18}, -{78,-27,19}, -{78,-27,20}, -{78,-27,21}, -{78,-27,22}, -{78,-27,23}, -{78,-27,24}, -{78,-27,25}, -{78,-27,26}, -{78,-27,27}, -{78,-27,28}, -{78,-27,29}, -{78,-27,30}, -{78,-27,31}, -{78,-27,32}, -{78,-27,33}, -{78,-27,34}, -{78,-27,35}, -{78,-27,36}, -{78,-27,37}, -{78,-27,38}, -{78,-27,39}, -{78,-27,40}, -{78,-27,41}, -{78,-27,42}, -{78,-27,43}, -{78,-27,44}, -{78,-27,45}, -{78,-27,46}, -{78,-27,47}, -{78,-27,48}, -{78,-27,49}, -{78,-27,50}, -{78,-27,51}, -{78,-27,52}, -{78,-27,53}, -{78,-27,54}, -{78,-27,55}, -{78,-27,56}, -{78,-27,57}, -{78,-27,58}, -{78,-27,59}, -{78,-27,60}, -{78,-27,61}, -{78,-27,62}, -{78,-27,63}, -{78,-27,64}, -{78,-27,65}, -{78,-27,66}, -{78,-27,67}, -{78,-27,68}, -{78,-27,69}, -{78,-27,70}, -{78,-27,71}, -{78,-27,72}, -{78,-27,73}, -{78,-27,74}, -{78,-27,75}, -{78,-27,76}, -{78,-27,77}, -{78,-27,78}, -{78,-26,-34}, -{78,-26,-33}, -{78,-26,-32}, -{78,-26,-31}, -{78,-26,-30}, -{78,-26,-29}, -{78,-26,-28}, -{78,-26,-27}, -{78,-26,-26}, -{78,-26,-25}, -{78,-26,-24}, -{78,-26,-23}, -{78,-26,-22}, -{78,-26,-21}, -{78,-26,-20}, -{78,-26,-19}, -{78,-26,-18}, -{78,-26,-17}, -{78,-26,-16}, -{78,-26,-15}, -{78,-26,-14}, -{78,-26,-13}, -{78,-26,-12}, -{78,-26,-11}, -{78,-26,-10}, -{78,-26,-9}, -{78,-26,-8}, -{78,-26,-7}, -{78,-26,-6}, -{78,-26,-5}, -{78,-26,-4}, -{78,-26,-3}, -{78,-26,-2}, -{78,-26,-1}, -{78,-26,0}, -{78,-26,1}, -{78,-26,2}, -{78,-26,3}, -{78,-26,4}, -{78,-26,5}, -{78,-26,6}, -{78,-26,7}, -{78,-26,8}, -{78,-26,9}, -{78,-26,10}, -{78,-26,11}, -{78,-26,12}, -{78,-26,13}, -{78,-26,14}, -{78,-26,15}, -{78,-26,16}, -{78,-26,17}, -{78,-26,18}, -{78,-26,19}, -{78,-26,20}, -{78,-26,21}, -{78,-26,22}, -{78,-26,23}, -{78,-26,24}, -{78,-26,25}, -{78,-26,26}, -{78,-26,27}, -{78,-26,28}, -{78,-26,29}, -{78,-26,30}, -{78,-26,31}, -{78,-26,32}, -{78,-26,33}, -{78,-26,34}, -{78,-26,35}, -{78,-26,36}, -{78,-26,37}, -{78,-26,38}, -{78,-26,39}, -{78,-26,40}, -{78,-26,41}, -{78,-26,42}, -{78,-26,43}, -{78,-26,44}, -{78,-26,45}, -{78,-26,46}, -{78,-26,47}, -{78,-26,48}, -{78,-26,49}, -{78,-26,50}, -{78,-26,51}, -{78,-26,52}, -{78,-26,53}, -{78,-26,54}, -{78,-26,55}, -{78,-26,56}, -{78,-26,57}, -{78,-26,58}, -{78,-26,59}, -{78,-26,60}, -{78,-26,61}, -{78,-26,62}, -{78,-26,63}, -{78,-26,64}, -{78,-26,65}, -{78,-26,66}, -{78,-26,67}, -{78,-26,68}, -{78,-26,69}, -{78,-26,70}, -{78,-26,71}, -{78,-26,72}, -{78,-26,73}, -{78,-26,74}, -{78,-26,75}, -{78,-26,76}, -{78,-26,77}, -{78,-26,78}, -{78,-25,-34}, -{78,-25,-33}, -{78,-25,-32}, -{78,-25,-31}, -{78,-25,-30}, -{78,-25,-29}, -{78,-25,-28}, -{78,-25,-27}, -{78,-25,-26}, -{78,-25,-25}, -{78,-25,-24}, -{78,-25,-23}, -{78,-25,-22}, -{78,-25,-21}, -{78,-25,-20}, -{78,-25,-19}, -{78,-25,-18}, -{78,-25,-17}, -{78,-25,-16}, -{78,-25,-15}, -{78,-25,-14}, -{78,-25,-13}, -{78,-25,-12}, -{78,-25,-11}, -{78,-25,-10}, -{78,-25,-9}, -{78,-25,-8}, -{78,-25,-7}, -{78,-25,-6}, -{78,-25,-5}, -{78,-25,-4}, -{78,-25,-3}, -{78,-25,-2}, -{78,-25,-1}, -{78,-25,0}, -{78,-25,1}, -{78,-25,2}, -{78,-25,3}, -{78,-25,4}, -{78,-25,5}, -{78,-25,6}, -{78,-25,7}, -{78,-25,8}, -{78,-25,9}, -{78,-25,10}, -{78,-25,11}, -{78,-25,12}, -{78,-25,13}, -{78,-25,14}, -{78,-25,15}, -{78,-25,16}, -{78,-25,17}, -{78,-25,18}, -{78,-25,19}, -{78,-25,20}, -{78,-25,21}, -{78,-25,22}, -{78,-25,23}, -{78,-25,24}, -{78,-25,25}, -{78,-25,26}, -{78,-25,27}, -{78,-25,28}, -{78,-25,29}, -{78,-25,30}, -{78,-25,31}, -{78,-25,32}, -{78,-25,33}, -{78,-25,34}, -{78,-25,35}, -{78,-25,36}, -{78,-25,37}, -{78,-25,38}, -{78,-25,39}, -{78,-25,40}, -{78,-25,41}, -{78,-25,42}, -{78,-25,43}, -{78,-25,44}, -{78,-25,45}, -{78,-25,46}, -{78,-25,47}, -{78,-25,48}, -{78,-25,49}, -{78,-25,50}, -{78,-25,51}, -{78,-25,52}, -{78,-25,53}, -{78,-25,54}, -{78,-25,55}, -{78,-25,56}, -{78,-25,57}, -{78,-25,58}, -{78,-25,59}, -{78,-25,60}, -{78,-25,61}, -{78,-25,62}, -{78,-25,63}, -{78,-25,64}, -{78,-25,65}, -{78,-25,66}, -{78,-25,67}, -{78,-25,68}, -{78,-25,69}, -{78,-25,70}, -{78,-25,71}, -{78,-25,72}, -{78,-25,73}, -{78,-25,74}, -{78,-25,75}, -{78,-25,76}, -{78,-25,77}, -{78,-25,78}, -{78,-24,-34}, -{78,-24,-33}, -{78,-24,-32}, -{78,-24,-31}, -{78,-24,-30}, -{78,-24,-29}, -{78,-24,-28}, -{78,-24,-27}, -{78,-24,-26}, -{78,-24,-25}, -{78,-24,-24}, -{78,-24,-23}, -{78,-24,-22}, -{78,-24,-21}, -{78,-24,-20}, -{78,-24,-19}, -{78,-24,-18}, -{78,-24,-17}, -{78,-24,-16}, -{78,-24,-15}, -{78,-24,-14}, -{78,-24,-13}, -{78,-24,-12}, -{78,-24,-11}, -{78,-24,-10}, -{78,-24,-9}, -{78,-24,-8}, -{78,-24,-7}, -{78,-24,-6}, -{78,-24,-5}, -{78,-24,-4}, -{78,-24,-3}, -{78,-24,-2}, -{78,-24,-1}, -{78,-24,0}, -{78,-24,1}, -{78,-24,2}, -{78,-24,3}, -{78,-24,4}, -{78,-24,5}, -{78,-24,6}, -{78,-24,7}, -{78,-24,8}, -{78,-24,9}, -{78,-24,10}, -{78,-24,11}, -{78,-24,12}, -{78,-24,13}, -{78,-24,14}, -{78,-24,15}, -{78,-24,16}, -{78,-24,17}, -{78,-24,18}, -{78,-24,19}, -{78,-24,20}, -{78,-24,21}, -{78,-24,22}, -{78,-24,23}, -{78,-24,24}, -{78,-24,25}, -{78,-24,26}, -{78,-24,27}, -{78,-24,28}, -{78,-24,29}, -{78,-24,30}, -{78,-24,31}, -{78,-24,32}, -{78,-24,33}, -{78,-24,34}, -{78,-24,35}, -{78,-24,36}, -{78,-24,37}, -{78,-24,38}, -{78,-24,39}, -{78,-24,40}, -{78,-24,41}, -{78,-24,42}, -{78,-24,43}, -{78,-24,44}, -{78,-24,45}, -{78,-24,46}, -{78,-24,47}, -{78,-24,48}, -{78,-24,49}, -{78,-24,50}, -{78,-24,51}, -{78,-24,52}, -{78,-24,53}, -{78,-24,54}, -{78,-24,55}, -{78,-24,56}, -{78,-24,57}, -{78,-24,58}, -{78,-24,59}, -{78,-24,60}, -{78,-24,61}, -{78,-24,62}, -{78,-24,63}, -{78,-24,64}, -{78,-24,65}, -{78,-24,66}, -{78,-24,67}, -{78,-24,68}, -{78,-24,69}, -{78,-24,70}, -{78,-24,71}, -{78,-24,72}, -{78,-24,73}, -{78,-24,74}, -{78,-24,75}, -{78,-24,76}, -{78,-24,77}, -{78,-24,78}, -{78,-23,-34}, -{78,-23,-33}, -{78,-23,-32}, -{78,-23,-31}, -{78,-23,-30}, -{78,-23,-29}, -{78,-23,-28}, -{78,-23,-27}, -{78,-23,-26}, -{78,-23,-25}, -{78,-23,-24}, -{78,-23,-23}, -{78,-23,-22}, -{78,-23,-21}, -{78,-23,-20}, -{78,-23,-19}, -{78,-23,-18}, -{78,-23,-17}, -{78,-23,-16}, -{78,-23,-15}, -{78,-23,-14}, -{78,-23,-13}, -{78,-23,-12}, -{78,-23,-11}, -{78,-23,-10}, -{78,-23,-9}, -{78,-23,-8}, -{78,-23,-7}, -{78,-23,-6}, -{78,-23,-5}, -{78,-23,-4}, -{78,-23,-3}, -{78,-23,-2}, -{78,-23,-1}, -{78,-23,0}, -{78,-23,1}, -{78,-23,2}, -{78,-23,3}, -{78,-23,4}, -{78,-23,5}, -{78,-23,6}, -{78,-23,7}, -{78,-23,8}, -{78,-23,9}, -{78,-23,10}, -{78,-23,11}, -{78,-23,12}, -{78,-23,13}, -{78,-23,14}, -{78,-23,15}, -{78,-23,16}, -{78,-23,17}, -{78,-23,18}, -{78,-23,19}, -{78,-23,20}, -{78,-23,21}, -{78,-23,22}, -{78,-23,23}, -{78,-23,24}, -{78,-23,25}, -{78,-23,26}, -{78,-23,27}, -{78,-23,28}, -{78,-23,29}, -{78,-23,30}, -{78,-23,31}, -{78,-23,32}, -{78,-23,33}, -{78,-23,34}, -{78,-23,35}, -{78,-23,36}, -{78,-23,37}, -{78,-23,38}, -{78,-23,39}, -{78,-23,40}, -{78,-23,41}, -{78,-23,42}, -{78,-23,43}, -{78,-23,44}, -{78,-23,45}, -{78,-23,46}, -{78,-23,47}, -{78,-23,48}, -{78,-23,49}, -{78,-23,50}, -{78,-23,51}, -{78,-23,52}, -{78,-23,53}, -{78,-23,54}, -{78,-23,55}, -{78,-23,56}, -{78,-23,57}, -{78,-23,58}, -{78,-23,59}, -{78,-23,60}, -{78,-23,61}, -{78,-23,62}, -{78,-23,63}, -{78,-23,64}, -{78,-23,65}, -{78,-23,66}, -{78,-23,67}, -{78,-23,68}, -{78,-23,69}, -{78,-23,70}, -{78,-23,71}, -{78,-23,72}, -{78,-23,73}, -{78,-23,74}, -{78,-23,75}, -{78,-23,76}, -{78,-23,77}, -{78,-23,78}, -{78,-22,-34}, -{78,-22,-33}, -{78,-22,-32}, -{78,-22,-31}, -{78,-22,-30}, -{78,-22,-29}, -{78,-22,-28}, -{78,-22,-27}, -{78,-22,-26}, -{78,-22,-25}, -{78,-22,-24}, -{78,-22,-23}, -{78,-22,-22}, -{78,-22,-21}, -{78,-22,-20}, -{78,-22,-19}, -{78,-22,-18}, -{78,-22,-17}, -{78,-22,-16}, -{78,-22,-15}, -{78,-22,-14}, -{78,-22,-13}, -{78,-22,-12}, -{78,-22,-11}, -{78,-22,-10}, -{78,-22,-9}, -{78,-22,-8}, -{78,-22,-7}, -{78,-22,-6}, -{78,-22,-5}, -{78,-22,-4}, -{78,-22,-3}, -{78,-22,-2}, -{78,-22,-1}, -{78,-22,0}, -{78,-22,1}, -{78,-22,2}, -{78,-22,3}, -{78,-22,4}, -{78,-22,5}, -{78,-22,6}, -{78,-22,7}, -{78,-22,8}, -{78,-22,9}, -{78,-22,10}, -{78,-22,11}, -{78,-22,12}, -{78,-22,13}, -{78,-22,14}, -{78,-22,15}, -{78,-22,16}, -{78,-22,17}, -{78,-22,18}, -{78,-22,19}, -{78,-22,20}, -{78,-22,21}, -{78,-22,22}, -{78,-22,23}, -{78,-22,24}, -{78,-22,25}, -{78,-22,26}, -{78,-22,27}, -{78,-22,28}, -{78,-22,29}, -{78,-22,30}, -{78,-22,31}, -{78,-22,32}, -{78,-22,33}, -{78,-22,34}, -{78,-22,35}, -{78,-22,36}, -{78,-22,37}, -{78,-22,38}, -{78,-22,39}, -{78,-22,40}, -{78,-22,41}, -{78,-22,42}, -{78,-22,43}, -{78,-22,44}, -{78,-22,45}, -{78,-22,46}, -{78,-22,47}, -{78,-22,48}, -{78,-22,49}, -{78,-22,50}, -{78,-22,51}, -{78,-22,52}, -{78,-22,53}, -{78,-22,54}, -{78,-22,55}, -{78,-22,56}, -{78,-22,57}, -{78,-22,58}, -{78,-22,59}, -{78,-22,60}, -{78,-22,61}, -{78,-22,62}, -{78,-22,63}, -{78,-22,64}, -{78,-22,65}, -{78,-22,66}, -{78,-22,67}, -{78,-22,68}, -{78,-22,69}, -{78,-22,70}, -{78,-22,71}, -{78,-22,72}, -{78,-22,73}, -{78,-22,74}, -{78,-22,75}, -{78,-22,76}, -{78,-22,77}, -{78,-22,78}, -{78,-21,-34}, -{78,-21,-33}, -{78,-21,-32}, -{78,-21,-31}, -{78,-21,-30}, -{78,-21,-29}, -{78,-21,-28}, -{78,-21,-27}, -{78,-21,-26}, -{78,-21,-25}, -{78,-21,-24}, -{78,-21,-23}, -{78,-21,-22}, -{78,-21,-21}, -{78,-21,-20}, -{78,-21,-19}, -{78,-21,-18}, -{78,-21,-17}, -{78,-21,-16}, -{78,-21,-15}, -{78,-21,-14}, -{78,-21,-13}, -{78,-21,-12}, -{78,-21,-11}, -{78,-21,-10}, -{78,-21,-9}, -{78,-21,-8}, -{78,-21,-7}, -{78,-21,-6}, -{78,-21,-5}, -{78,-21,-4}, -{78,-21,-3}, -{78,-21,-2}, -{78,-21,-1}, -{78,-21,0}, -{78,-21,1}, -{78,-21,2}, -{78,-21,3}, -{78,-21,4}, -{78,-21,5}, -{78,-21,6}, -{78,-21,7}, -{78,-21,8}, -{78,-21,9}, -{78,-21,10}, -{78,-21,11}, -{78,-21,12}, -{78,-21,13}, -{78,-21,14}, -{78,-21,15}, -{78,-21,16}, -{78,-21,17}, -{78,-21,18}, -{78,-21,19}, -{78,-21,20}, -{78,-21,21}, -{78,-21,22}, -{78,-21,23}, -{78,-21,24}, -{78,-21,25}, -{78,-21,26}, -{78,-21,27}, -{78,-21,28}, -{78,-21,29}, -{78,-21,30}, -{78,-21,31}, -{78,-21,32}, -{78,-21,33}, -{78,-21,34}, -{78,-21,35}, -{78,-21,36}, -{78,-21,37}, -{78,-21,38}, -{78,-21,39}, -{78,-21,40}, -{78,-21,41}, -{78,-21,42}, -{78,-21,43}, -{78,-21,44}, -{78,-21,45}, -{78,-21,46}, -{78,-21,47}, -{78,-21,48}, -{78,-21,49}, -{78,-21,50}, -{78,-21,51}, -{78,-21,52}, -{78,-21,53}, -{78,-21,54}, -{78,-21,55}, -{78,-21,56}, -{78,-21,57}, -{78,-21,58}, -{78,-21,59}, -{78,-21,60}, -{78,-21,61}, -{78,-21,62}, -{78,-21,63}, -{78,-21,64}, -{78,-21,65}, -{78,-21,66}, -{78,-21,67}, -{78,-21,68}, -{78,-21,69}, -{78,-21,70}, -{78,-21,71}, -{78,-21,72}, -{78,-21,73}, -{78,-21,74}, -{78,-21,75}, -{78,-21,76}, -{78,-21,77}, -{78,-21,78}, -{78,-20,-34}, -{78,-20,-33}, -{78,-20,-32}, -{78,-20,-31}, -{78,-20,-30}, -{78,-20,-29}, -{78,-20,-28}, -{78,-20,-27}, -{78,-20,-26}, -{78,-20,-25}, -{78,-20,-24}, -{78,-20,-23}, -{78,-20,-22}, -{78,-20,-21}, -{78,-20,-20}, -{78,-20,-19}, -{78,-20,-18}, -{78,-20,-17}, -{78,-20,-16}, -{78,-20,-15}, -{78,-20,-14}, -{78,-20,-13}, -{78,-20,-12}, -{78,-20,-11}, -{78,-20,-10}, -{78,-20,-9}, -{78,-20,-8}, -{78,-20,-7}, -{78,-20,-6}, -{78,-20,-5}, -{78,-20,-4}, -{78,-20,-3}, -{78,-20,-2}, -{78,-20,-1}, -{78,-20,0}, -{78,-20,1}, -{78,-20,2}, -{78,-20,3}, -{78,-20,4}, -{78,-20,5}, -{78,-20,6}, -{78,-20,7}, -{78,-20,8}, -{78,-20,9}, -{78,-20,10}, -{78,-20,11}, -{78,-20,12}, -{78,-20,13}, -{78,-20,14}, -{78,-20,15}, -{78,-20,16}, -{78,-20,17}, -{78,-20,18}, -{78,-20,19}, -{78,-20,20}, -{78,-20,21}, -{78,-20,22}, -{78,-20,23}, -{78,-20,24}, -{78,-20,25}, -{78,-20,26}, -{78,-20,27}, -{78,-20,28}, -{78,-20,29}, -{78,-20,30}, -{78,-20,31}, -{78,-20,32}, -{78,-20,33}, -{78,-20,34}, -{78,-20,35}, -{78,-20,36}, -{78,-20,37}, -{78,-20,38}, -{78,-20,39}, -{78,-20,40}, -{78,-20,41}, -{78,-20,42}, -{78,-20,43}, -{78,-20,44}, -{78,-20,45}, -{78,-20,46}, -{78,-20,47}, -{78,-20,48}, -{78,-20,49}, -{78,-20,50}, -{78,-20,51}, -{78,-20,52}, -{78,-20,53}, -{78,-20,54}, -{78,-20,55}, -{78,-20,56}, -{78,-20,57}, -{78,-20,58}, -{78,-20,59}, -{78,-20,60}, -{78,-20,61}, -{78,-20,62}, -{78,-20,63}, -{78,-20,64}, -{78,-20,65}, -{78,-20,66}, -{78,-20,67}, -{78,-20,68}, -{78,-20,69}, -{78,-20,70}, -{78,-20,71}, -{78,-20,72}, -{78,-20,73}, -{78,-20,74}, -{78,-20,75}, -{78,-20,76}, -{78,-20,77}, -{78,-20,78}, -{78,-19,-34}, -{78,-19,-33}, -{78,-19,-32}, -{78,-19,-31}, -{78,-19,-30}, -{78,-19,-29}, -{78,-19,-28}, -{78,-19,-27}, -{78,-19,-26}, -{78,-19,-25}, -{78,-19,-24}, -{78,-19,-23}, -{78,-19,-22}, -{78,-19,-21}, -{78,-19,-20}, -{78,-19,-19}, -{78,-19,-18}, -{78,-19,-17}, -{78,-19,-16}, -{78,-19,-15}, -{78,-19,-14}, -{78,-19,-13}, -{78,-19,-12}, -{78,-19,-11}, -{78,-19,-10}, -{78,-19,-9}, -{78,-19,-8}, -{78,-19,-7}, -{78,-19,-6}, -{78,-19,-5}, -{78,-19,-4}, -{78,-19,-3}, -{78,-19,-2}, -{78,-19,-1}, -{78,-19,0}, -{78,-19,1}, -{78,-19,2}, -{78,-19,3}, -{78,-19,4}, -{78,-19,5}, -{78,-19,6}, -{78,-19,7}, -{78,-19,8}, -{78,-19,9}, -{78,-19,10}, -{78,-19,11}, -{78,-19,12}, -{78,-19,13}, -{78,-19,14}, -{78,-19,15}, -{78,-19,16}, -{78,-19,17}, -{78,-19,18}, -{78,-19,19}, -{78,-19,20}, -{78,-19,21}, -{78,-19,22}, -{78,-19,23}, -{78,-19,24}, -{78,-19,25}, -{78,-19,26}, -{78,-19,27}, -{78,-19,28}, -{78,-19,29}, -{78,-19,30}, -{78,-19,31}, -{78,-19,32}, -{78,-19,33}, -{78,-19,34}, -{78,-19,35}, -{78,-19,36}, -{78,-19,37}, -{78,-19,38}, -{78,-19,39}, -{78,-19,40}, -{78,-19,41}, -{78,-19,42}, -{78,-19,43}, -{78,-19,44}, -{78,-19,45}, -{78,-19,46}, -{78,-19,47}, -{78,-19,48}, -{78,-19,49}, -{78,-19,50}, -{78,-19,51}, -{78,-19,52}, -{78,-19,53}, -{78,-19,54}, -{78,-19,55}, -{78,-19,56}, -{78,-19,57}, -{78,-19,58}, -{78,-19,59}, -{78,-19,60}, -{78,-19,61}, -{78,-19,62}, -{78,-19,63}, -{78,-19,64}, -{78,-19,65}, -{78,-19,66}, -{78,-19,67}, -{78,-19,68}, -{78,-19,69}, -{78,-19,70}, -{78,-19,71}, -{78,-19,72}, -{78,-19,73}, -{78,-19,74}, -{78,-19,75}, -{78,-19,76}, -{78,-19,77}, -{78,-19,78}, -{78,-18,-34}, -{78,-18,-33}, -{78,-18,-32}, -{78,-18,-31}, -{78,-18,-30}, -{78,-18,-29}, -{78,-18,-28}, -{78,-18,-27}, -{78,-18,-26}, -{78,-18,-25}, -{78,-18,-24}, -{78,-18,-23}, -{78,-18,-22}, -{78,-18,-21}, -{78,-18,-20}, -{78,-18,-19}, -{78,-18,-18}, -{78,-18,-17}, -{78,-18,-16}, -{78,-18,-15}, -{78,-18,-14}, -{78,-18,-13}, -{78,-18,-12}, -{78,-18,-11}, -{78,-18,-10}, -{78,-18,-9}, -{78,-18,-8}, -{78,-18,-7}, -{78,-18,-6}, -{78,-18,-5}, -{78,-18,-4}, -{78,-18,-3}, -{78,-18,-2}, -{78,-18,-1}, -{78,-18,0}, -{78,-18,1}, -{78,-18,2}, -{78,-18,3}, -{78,-18,4}, -{78,-18,5}, -{78,-18,6}, -{78,-18,7}, -{78,-18,8}, -{78,-18,9}, -{78,-18,10}, -{78,-18,11}, -{78,-18,12}, -{78,-18,13}, -{78,-18,14}, -{78,-18,15}, -{78,-18,16}, -{78,-18,17}, -{78,-18,18}, -{78,-18,19}, -{78,-18,20}, -{78,-18,21}, -{78,-18,22}, -{78,-18,23}, -{78,-18,24}, -{78,-18,25}, -{78,-18,26}, -{78,-18,27}, -{78,-18,28}, -{78,-18,29}, -{78,-18,30}, -{78,-18,31}, -{78,-18,32}, -{78,-18,33}, -{78,-18,34}, -{78,-18,35}, -{78,-18,36}, -{78,-18,37}, -{78,-18,38}, -{78,-18,39}, -{78,-18,40}, -{78,-18,41}, -{78,-18,42}, -{78,-18,43}, -{78,-18,44}, -{78,-18,45}, -{78,-18,46}, -{78,-18,47}, -{78,-18,48}, -{78,-18,49}, -{78,-18,50}, -{78,-18,51}, -{78,-18,52}, -{78,-18,53}, -{78,-18,54}, -{78,-18,55}, -{78,-18,56}, -{78,-18,57}, -{78,-18,58}, -{78,-18,59}, -{78,-18,60}, -{78,-18,61}, -{78,-18,62}, -{78,-18,63}, -{78,-18,64}, -{78,-18,65}, -{78,-18,66}, -{78,-18,67}, -{78,-18,68}, -{78,-18,69}, -{78,-18,70}, -{78,-18,71}, -{78,-18,72}, -{78,-18,73}, -{78,-18,74}, -{78,-18,75}, -{78,-18,76}, -{78,-18,77}, -{78,-18,78}, -{78,-17,-34}, -{78,-17,-33}, -{78,-17,-32}, -{78,-17,-31}, -{78,-17,-30}, -{78,-17,-29}, -{78,-17,-28}, -{78,-17,-27}, -{78,-17,-26}, -{78,-17,-25}, -{78,-17,-24}, -{78,-17,-23}, -{78,-17,-22}, -{78,-17,-21}, -{78,-17,-20}, -{78,-17,-19}, -{78,-17,-18}, -{78,-17,-17}, -{78,-17,-16}, -{78,-17,-15}, -{78,-17,-14}, -{78,-17,-13}, -{78,-17,-12}, -{78,-17,-11}, -{78,-17,-10}, -{78,-17,-9}, -{78,-17,-8}, -{78,-17,-7}, -{78,-17,-6}, -{78,-17,-5}, -{78,-17,-4}, -{78,-17,-3}, -{78,-17,-2}, -{78,-17,-1}, -{78,-17,0}, -{78,-17,1}, -{78,-17,2}, -{78,-17,3}, -{78,-17,4}, -{78,-17,5}, -{78,-17,6}, -{78,-17,7}, -{78,-17,8}, -{78,-17,9}, -{78,-17,10}, -{78,-17,11}, -{78,-17,12}, -{78,-17,13}, -{78,-17,14}, -{78,-17,15}, -{78,-17,16}, -{78,-17,17}, -{78,-17,18}, -{78,-17,19}, -{78,-17,20}, -{78,-17,21}, -{78,-17,22}, -{78,-17,23}, -{78,-17,24}, -{78,-17,25}, -{78,-17,26}, -{78,-17,27}, -{78,-17,28}, -{78,-17,29}, -{78,-17,30}, -{78,-17,31}, -{78,-17,32}, -{78,-17,33}, -{78,-17,34}, -{78,-17,35}, -{78,-17,36}, -{78,-17,37}, -{78,-17,38}, -{78,-17,39}, -{78,-17,40}, -{78,-17,41}, -{78,-17,42}, -{78,-17,43}, -{78,-17,44}, -{78,-17,45}, -{78,-17,46}, -{78,-17,47}, -{78,-17,48}, -{78,-17,49}, -{78,-17,50}, -{78,-17,51}, -{78,-17,52}, -{78,-17,53}, -{78,-17,54}, -{78,-17,55}, -{78,-17,56}, -{78,-17,57}, -{78,-17,58}, -{78,-17,59}, -{78,-17,60}, -{78,-17,61}, -{78,-17,62}, -{78,-17,63}, -{78,-17,64}, -{78,-17,65}, -{78,-17,66}, -{78,-17,67}, -{78,-17,68}, -{78,-17,69}, -{78,-17,70}, -{78,-17,71}, -{78,-17,72}, -{78,-17,73}, -{78,-17,74}, -{78,-17,75}, -{78,-17,76}, -{78,-17,77}, -{78,-17,78}, -{78,-16,-34}, -{78,-16,-33}, -{78,-16,-32}, -{78,-16,-31}, -{78,-16,-30}, -{78,-16,-29}, -{78,-16,-28}, -{78,-16,-27}, -{78,-16,-26}, -{78,-16,-25}, -{78,-16,-24}, -{78,-16,-23}, -{78,-16,-22}, -{78,-16,-21}, -{78,-16,-20}, -{78,-16,-19}, -{78,-16,-18}, -{78,-16,-17}, -{78,-16,-16}, -{78,-16,-15}, -{78,-16,-14}, -{78,-16,-13}, -{78,-16,-12}, -{78,-16,-11}, -{78,-16,-10}, -{78,-16,-9}, -{78,-16,-8}, -{78,-16,-7}, -{78,-16,-6}, -{78,-16,-5}, -{78,-16,-4}, -{78,-16,-3}, -{78,-16,-2}, -{78,-16,-1}, -{78,-16,0}, -{78,-16,1}, -{78,-16,2}, -{78,-16,3}, -{78,-16,4}, -{78,-16,5}, -{78,-16,6}, -{78,-16,7}, -{78,-16,8}, -{78,-16,9}, -{78,-16,10}, -{78,-16,11}, -{78,-16,12}, -{78,-16,13}, -{78,-16,14}, -{78,-16,15}, -{78,-16,16}, -{78,-16,17}, -{78,-16,18}, -{78,-16,19}, -{78,-16,20}, -{78,-16,21}, -{78,-16,22}, -{78,-16,23}, -{78,-16,24}, -{78,-16,25}, -{78,-16,26}, -{78,-16,27}, -{78,-16,28}, -{78,-16,29}, -{78,-16,30}, -{78,-16,31}, -{78,-16,32}, -{78,-16,33}, -{78,-16,34}, -{78,-16,35}, -{78,-16,36}, -{78,-16,37}, -{78,-16,38}, -{78,-16,39}, -{78,-16,40}, -{78,-16,41}, -{78,-16,42}, -{78,-16,43}, -{78,-16,44}, -{78,-16,45}, -{78,-16,46}, -{78,-16,47}, -{78,-16,48}, -{78,-16,49}, -{78,-16,50}, -{78,-16,51}, -{78,-16,52}, -{78,-16,53}, -{78,-16,54}, -{78,-16,55}, -{78,-16,56}, -{78,-16,57}, -{78,-16,58}, -{78,-16,59}, -{78,-16,60}, -{78,-16,61}, -{78,-16,62}, -{78,-16,63}, -{78,-16,64}, -{78,-16,65}, -{78,-16,66}, -{78,-16,67}, -{78,-16,68}, -{78,-16,69}, -{78,-16,70}, -{78,-16,71}, -{78,-16,72}, -{78,-16,73}, -{78,-16,74}, -{78,-16,75}, -{78,-16,76}, -{78,-16,77}, -{78,-16,78}, -{78,-15,-34}, -{78,-15,-33}, -{78,-15,-32}, -{78,-15,-31}, -{78,-15,-30}, -{78,-15,-29}, -{78,-15,-28}, -{78,-15,-27}, -{78,-15,-26}, -{78,-15,-25}, -{78,-15,-24}, -{78,-15,-23}, -{78,-15,-22}, -{78,-15,-21}, -{78,-15,-20}, -{78,-15,-19}, -{78,-15,-18}, -{78,-15,-17}, -{78,-15,-16}, -{78,-15,-15}, -{78,-15,-14}, -{78,-15,-13}, -{78,-15,-12}, -{78,-15,-11}, -{78,-15,-10}, -{78,-15,-9}, -{78,-15,-8}, -{78,-15,-7}, -{78,-15,-6}, -{78,-15,-5}, -{78,-15,-4}, -{78,-15,-3}, -{78,-15,-2}, -{78,-15,-1}, -{78,-15,0}, -{78,-15,1}, -{78,-15,2}, -{78,-15,3}, -{78,-15,4}, -{78,-15,5}, -{78,-15,6}, -{78,-15,7}, -{78,-15,8}, -{78,-15,9}, -{78,-15,10}, -{78,-15,11}, -{78,-15,12}, -{78,-15,13}, -{78,-15,14}, -{78,-15,15}, -{78,-15,16}, -{78,-15,17}, -{78,-15,18}, -{78,-15,19}, -{78,-15,20}, -{78,-15,21}, -{78,-15,22}, -{78,-15,23}, -{78,-15,24}, -{78,-15,25}, -{78,-15,26}, -{78,-15,27}, -{78,-15,28}, -{78,-15,29}, -{78,-15,30}, -{78,-15,31}, -{78,-15,32}, -{78,-15,33}, -{78,-15,34}, -{78,-15,35}, -{78,-15,36}, -{78,-15,37}, -{78,-15,38}, -{78,-15,39}, -{78,-15,40}, -{78,-15,41}, -{78,-15,42}, -{78,-15,43}, -{78,-15,44}, -{78,-15,45}, -{78,-15,46}, -{78,-15,47}, -{78,-15,48}, -{78,-15,49}, -{78,-15,50}, -{78,-15,51}, -{78,-15,52}, -{78,-15,53}, -{78,-15,54}, -{78,-15,55}, -{78,-15,56}, -{78,-15,57}, -{78,-15,58}, -{78,-15,59}, -{78,-15,60}, -{78,-15,61}, -{78,-15,62}, -{78,-15,63}, -{78,-15,64}, -{78,-15,65}, -{78,-15,66}, -{78,-15,67}, -{78,-15,68}, -{78,-15,69}, -{78,-15,70}, -{78,-15,71}, -{78,-15,72}, -{78,-15,73}, -{78,-15,74}, -{78,-15,75}, -{78,-15,76}, -{78,-15,77}, -{78,-15,78}, -{78,-14,-34}, -{78,-14,-33}, -{78,-14,-32}, -{78,-14,-31}, -{78,-14,-30}, -{78,-14,-29}, -{78,-14,-28}, -{78,-14,-27}, -{78,-14,-26}, -{78,-14,-25}, -{78,-14,-24}, -{78,-14,-23}, -{78,-14,-22}, -{78,-14,-21}, -{78,-14,-20}, -{78,-14,-19}, -{78,-14,-18}, -{78,-14,-17}, -{78,-14,-16}, -{78,-14,-15}, -{78,-14,-14}, -{78,-14,-13}, -{78,-14,-12}, -{78,-14,-11}, -{78,-14,-10}, -{78,-14,-9}, -{78,-14,-8}, -{78,-14,-7}, -{78,-14,-6}, -{78,-14,-5}, -{78,-14,-4}, -{78,-14,-3}, -{78,-14,-2}, -{78,-14,-1}, -{78,-14,0}, -{78,-14,1}, -{78,-14,2}, -{78,-14,3}, -{78,-14,4}, -{78,-14,5}, -{78,-14,6}, -{78,-14,7}, -{78,-14,8}, -{78,-14,9}, -{78,-14,10}, -{78,-14,11}, -{78,-14,12}, -{78,-14,13}, -{78,-14,14}, -{78,-14,15}, -{78,-14,16}, -{78,-14,17}, -{78,-14,18}, -{78,-14,19}, -{78,-14,20}, -{78,-14,21}, -{78,-14,22}, -{78,-14,23}, -{78,-14,24}, -{78,-14,25}, -{78,-14,26}, -{78,-14,27}, -{78,-14,28}, -{78,-14,29}, -{78,-14,30}, -{78,-14,31}, -{78,-14,32}, -{78,-14,33}, -{78,-14,34}, -{78,-14,35}, -{78,-14,36}, -{78,-14,37}, -{78,-14,38}, -{78,-14,39}, -{78,-14,40}, -{78,-14,41}, -{78,-14,42}, -{78,-14,43}, -{78,-14,44}, -{78,-14,45}, -{78,-14,46}, -{78,-14,47}, -{78,-14,48}, -{78,-14,49}, -{78,-14,50}, -{78,-14,51}, -{78,-14,52}, -{78,-14,53}, -{78,-14,54}, -{78,-14,55}, -{78,-14,56}, -{78,-14,57}, -{78,-14,58}, -{78,-14,59}, -{78,-14,60}, -{78,-14,61}, -{78,-14,62}, -{78,-14,63}, -{78,-14,64}, -{78,-14,65}, -{78,-14,66}, -{78,-14,67}, -{78,-14,68}, -{78,-14,69}, -{78,-14,70}, -{78,-14,71}, -{78,-14,72}, -{78,-14,73}, -{78,-14,74}, -{78,-14,75}, -{78,-14,76}, -{78,-14,77}, -{78,-14,78}, -{78,-13,-34}, -{78,-13,-33}, -{78,-13,-32}, -{78,-13,-31}, -{78,-13,-30}, -{78,-13,-29}, -{78,-13,-28}, -{78,-13,-27}, -{78,-13,-26}, -{78,-13,-25}, -{78,-13,-24}, -{78,-13,-23}, -{78,-13,-22}, -{78,-13,-21}, -{78,-13,-20}, -{78,-13,-19}, -{78,-13,-18}, -{78,-13,-17}, -{78,-13,-16}, -{78,-13,-15}, -{78,-13,-14}, -{78,-13,-13}, -{78,-13,-12}, -{78,-13,-11}, -{78,-13,-10}, -{78,-13,-9}, -{78,-13,-8}, -{78,-13,-7}, -{78,-13,-6}, -{78,-13,-5}, -{78,-13,-4}, -{78,-13,-3}, -{78,-13,-2}, -{78,-13,-1}, -{78,-13,0}, -{78,-13,1}, -{78,-13,2}, -{78,-13,3}, -{78,-13,4}, -{78,-13,5}, -{78,-13,6}, -{78,-13,7}, -{78,-13,8}, -{78,-13,9}, -{78,-13,10}, -{78,-13,11}, -{78,-13,12}, -{78,-13,13}, -{78,-13,14}, -{78,-13,15}, -{78,-13,16}, -{78,-13,17}, -{78,-13,18}, -{78,-13,19}, -{78,-13,20}, -{78,-13,21}, -{78,-13,22}, -{78,-13,23}, -{78,-13,24}, -{78,-13,25}, -{78,-13,26}, -{78,-13,27}, -{78,-13,28}, -{78,-13,29}, -{78,-13,30}, -{78,-13,31}, -{78,-13,32}, -{78,-13,33}, -{78,-13,34}, -{78,-13,35}, -{78,-13,36}, -{78,-13,37}, -{78,-13,38}, -{78,-13,39}, -{78,-13,40}, -{78,-13,41}, -{78,-13,42}, -{78,-13,43}, -{78,-13,44}, -{78,-13,45}, -{78,-13,46}, -{78,-13,47}, -{78,-13,48}, -{78,-13,49}, -{78,-13,50}, -{78,-13,51}, -{78,-13,52}, -{78,-13,53}, -{78,-13,54}, -{78,-13,55}, -{78,-13,56}, -{78,-13,57}, -{78,-13,58}, -{78,-13,59}, -{78,-13,60}, -{78,-13,61}, -{78,-13,62}, -{78,-13,63}, -{78,-13,64}, -{78,-13,65}, -{78,-13,66}, -{78,-13,67}, -{78,-13,68}, -{78,-13,69}, -{78,-13,70}, -{78,-13,71}, -{78,-13,72}, -{78,-13,73}, -{78,-13,74}, -{78,-13,75}, -{78,-13,76}, -{78,-13,77}, -{78,-13,78}, -{78,-13,79}, -{78,-12,-34}, -{78,-12,-33}, -{78,-12,-32}, -{78,-12,-31}, -{78,-12,-30}, -{78,-12,-29}, -{78,-12,-28}, -{78,-12,-27}, -{78,-12,-26}, -{78,-12,-25}, -{78,-12,-24}, -{78,-12,-23}, -{78,-12,-22}, -{78,-12,-21}, -{78,-12,-20}, -{78,-12,-19}, -{78,-12,-18}, -{78,-12,-17}, -{78,-12,-16}, -{78,-12,-15}, -{78,-12,-14}, -{78,-12,-13}, -{78,-12,-12}, -{78,-12,-11}, -{78,-12,-10}, -{78,-12,-9}, -{78,-12,-8}, -{78,-12,-7}, -{78,-12,-6}, -{78,-12,-5}, -{78,-12,-4}, -{78,-12,-3}, -{78,-12,-2}, -{78,-12,-1}, -{78,-12,0}, -{78,-12,1}, -{78,-12,2}, -{78,-12,3}, -{78,-12,4}, -{78,-12,5}, -{78,-12,6}, -{78,-12,7}, -{78,-12,8}, -{78,-12,9}, -{78,-12,10}, -{78,-12,11}, -{78,-12,12}, -{78,-12,13}, -{78,-12,14}, -{78,-12,15}, -{78,-12,16}, -{78,-12,17}, -{78,-12,18}, -{78,-12,19}, -{78,-12,20}, -{78,-12,21}, -{78,-12,22}, -{78,-12,23}, -{78,-12,24}, -{78,-12,25}, -{78,-12,26}, -{78,-12,27}, -{78,-12,28}, -{78,-12,29}, -{78,-12,30}, -{78,-12,31}, -{78,-12,32}, -{78,-12,33}, -{78,-12,34}, -{78,-12,35}, -{78,-12,36}, -{78,-12,37}, -{78,-12,38}, -{78,-12,39}, -{78,-12,40}, -{78,-12,41}, -{78,-12,42}, -{78,-12,43}, -{78,-12,44}, -{78,-12,45}, -{78,-12,46}, -{78,-12,47}, -{78,-12,48}, -{78,-12,49}, -{78,-12,50}, -{78,-12,51}, -{78,-12,52}, -{78,-12,53}, -{78,-12,54}, -{78,-12,55}, -{78,-12,56}, -{78,-12,57}, -{78,-12,58}, -{78,-12,59}, -{78,-12,60}, -{78,-12,61}, -{78,-12,62}, -{78,-12,63}, -{78,-12,64}, -{78,-12,65}, -{78,-12,66}, -{78,-12,67}, -{78,-12,68}, -{78,-12,69}, -{78,-12,70}, -{78,-12,71}, -{78,-12,72}, -{78,-12,73}, -{78,-12,74}, -{78,-12,75}, -{78,-12,76}, -{78,-12,77}, -{78,-12,78}, -{78,-12,79}, -{78,-11,-34}, -{78,-11,-33}, -{78,-11,-32}, -{78,-11,-31}, -{78,-11,-30}, -{78,-11,-29}, -{78,-11,-28}, -{78,-11,-27}, -{78,-11,-26}, -{78,-11,-25}, -{78,-11,-24}, -{78,-11,-23}, -{78,-11,-22}, -{78,-11,-21}, -{78,-11,-20}, -{78,-11,-19}, -{78,-11,-18}, -{78,-11,-17}, -{78,-11,-16}, -{78,-11,-15}, -{78,-11,-14}, -{78,-11,-13}, -{78,-11,-12}, -{78,-11,-11}, -{78,-11,-10}, -{78,-11,-9}, -{78,-11,-8}, -{78,-11,-7}, -{78,-11,-6}, -{78,-11,-5}, -{78,-11,-4}, -{78,-11,-3}, -{78,-11,-2}, -{78,-11,-1}, -{78,-11,0}, -{78,-11,1}, -{78,-11,2}, -{78,-11,3}, -{78,-11,4}, -{78,-11,5}, -{78,-11,6}, -{78,-11,7}, -{78,-11,8}, -{78,-11,9}, -{78,-11,10}, -{78,-11,11}, -{78,-11,12}, -{78,-11,13}, -{78,-11,14}, -{78,-11,15}, -{78,-11,16}, -{78,-11,17}, -{78,-11,18}, -{78,-11,19}, -{78,-11,20}, -{78,-11,21}, -{78,-11,22}, -{78,-11,23}, -{78,-11,24}, -{78,-11,25}, -{78,-11,26}, -{78,-11,27}, -{78,-11,28}, -{78,-11,29}, -{78,-11,30}, -{78,-11,31}, -{78,-11,32}, -{78,-11,33}, -{78,-11,34}, -{78,-11,35}, -{78,-11,36}, -{78,-11,37}, -{78,-11,38}, -{78,-11,39}, -{78,-11,40}, -{78,-11,41}, -{78,-11,42}, -{78,-11,43}, -{78,-11,44}, -{78,-11,45}, -{78,-11,46}, -{78,-11,47}, -{78,-11,48}, -{78,-11,49}, -{78,-11,50}, -{78,-11,51}, -{78,-11,52}, -{78,-11,53}, -{78,-11,54}, -{78,-11,55}, -{78,-11,56}, -{78,-11,57}, -{78,-11,58}, -{78,-11,59}, -{78,-11,60}, -{78,-11,61}, -{78,-11,62}, -{78,-11,63}, -{78,-11,64}, -{78,-11,65}, -{78,-11,66}, -{78,-11,67}, -{78,-11,68}, -{78,-11,69}, -{78,-11,70}, -{78,-11,71}, -{78,-11,72}, -{78,-11,73}, -{78,-11,74}, -{78,-11,75}, -{78,-11,76}, -{78,-11,77}, -{78,-11,78}, -{78,-11,79}, -{78,-10,-34}, -{78,-10,-33}, -{78,-10,-32}, -{78,-10,-31}, -{78,-10,-30}, -{78,-10,-29}, -{78,-10,-28}, -{78,-10,-27}, -{78,-10,-26}, -{78,-10,-25}, -{78,-10,-24}, -{78,-10,-23}, -{78,-10,-22}, -{78,-10,-21}, -{78,-10,-20}, -{78,-10,-19}, -{78,-10,-18}, -{78,-10,-17}, -{78,-10,-16}, -{78,-10,-15}, -{78,-10,-14}, -{78,-10,-13}, -{78,-10,-12}, -{78,-10,-11}, -{78,-10,-10}, -{78,-10,-9}, -{78,-10,-8}, -{78,-10,-7}, -{78,-10,-6}, -{78,-10,-5}, -{78,-10,-4}, -{78,-10,-3}, -{78,-10,-2}, -{78,-10,-1}, -{78,-10,0}, -{78,-10,1}, -{78,-10,2}, -{78,-10,3}, -{78,-10,4}, -{78,-10,5}, -{78,-10,6}, -{78,-10,7}, -{78,-10,8}, -{78,-10,9}, -{78,-10,10}, -{78,-10,11}, -{78,-10,12}, -{78,-10,13}, -{78,-10,14}, -{78,-10,15}, -{78,-10,16}, -{78,-10,17}, -{78,-10,18}, -{78,-10,19}, -{78,-10,20}, -{78,-10,21}, -{78,-10,22}, -{78,-10,23}, -{78,-10,24}, -{78,-10,25}, -{78,-10,26}, -{78,-10,27}, -{78,-10,28}, -{78,-10,29}, -{78,-10,30}, -{78,-10,31}, -{78,-10,32}, -{78,-10,33}, -{78,-10,34}, -{78,-10,35}, -{78,-10,36}, -{78,-10,37}, -{78,-10,38}, -{78,-10,39}, -{78,-10,40}, -{78,-10,41}, -{78,-10,42}, -{78,-10,43}, -{78,-10,44}, -{78,-10,45}, -{78,-10,46}, -{78,-10,47}, -{78,-10,48}, -{78,-10,49}, -{78,-10,50}, -{78,-10,51}, -{78,-10,52}, -{78,-10,53}, -{78,-10,54}, -{78,-10,55}, -{78,-10,56}, -{78,-10,57}, -{78,-10,58}, -{78,-10,59}, -{78,-10,60}, -{78,-10,61}, -{78,-10,62}, -{78,-10,63}, -{78,-10,64}, -{78,-10,65}, -{78,-10,66}, -{78,-10,67}, -{78,-10,68}, -{78,-10,69}, -{78,-10,70}, -{78,-10,71}, -{78,-10,72}, -{78,-10,73}, -{78,-10,74}, -{78,-10,75}, -{78,-10,76}, -{78,-10,77}, -{78,-10,78}, -{78,-10,79}, -{78,-9,-34}, -{78,-9,-33}, -{78,-9,-32}, -{78,-9,-31}, -{78,-9,-30}, -{78,-9,-29}, -{78,-9,-28}, -{78,-9,-27}, -{78,-9,-26}, -{78,-9,-25}, -{78,-9,-24}, -{78,-9,-23}, -{78,-9,-22}, -{78,-9,-21}, -{78,-9,-20}, -{78,-9,-19}, -{78,-9,-18}, -{78,-9,-17}, -{78,-9,-16}, -{78,-9,-15}, -{78,-9,-14}, -{78,-9,-13}, -{78,-9,-12}, -{78,-9,-11}, -{78,-9,-10}, -{78,-9,-9}, -{78,-9,-8}, -{78,-9,-7}, -{78,-9,-6}, -{78,-9,-5}, -{78,-9,-4}, -{78,-9,-3}, -{78,-9,-2}, -{78,-9,-1}, -{78,-9,0}, -{78,-9,1}, -{78,-9,2}, -{78,-9,3}, -{78,-9,4}, -{78,-9,5}, -{78,-9,6}, -{78,-9,7}, -{78,-9,8}, -{78,-9,9}, -{78,-9,10}, -{78,-9,11}, -{78,-9,12}, -{78,-9,13}, -{78,-9,14}, -{78,-9,15}, -{78,-9,16}, -{78,-9,17}, -{78,-9,18}, -{78,-9,19}, -{78,-9,20}, -{78,-9,21}, -{78,-9,22}, -{78,-9,23}, -{78,-9,24}, -{78,-9,25}, -{78,-9,26}, -{78,-9,27}, -{78,-9,28}, -{78,-9,29}, -{78,-9,30}, -{78,-9,31}, -{78,-9,32}, -{78,-9,33}, -{78,-9,34}, -{78,-9,35}, -{78,-9,36}, -{78,-9,37}, -{78,-9,38}, -{78,-9,39}, -{78,-9,40}, -{78,-9,41}, -{78,-9,42}, -{78,-9,43}, -{78,-9,44}, -{78,-9,45}, -{78,-9,46}, -{78,-9,47}, -{78,-9,48}, -{78,-9,49}, -{78,-9,50}, -{78,-9,51}, -{78,-9,52}, -{78,-9,53}, -{78,-9,54}, -{78,-9,55}, -{78,-9,56}, -{78,-9,57}, -{78,-9,58}, -{78,-9,59}, -{78,-9,60}, -{78,-9,61}, -{78,-9,62}, -{78,-9,63}, -{78,-9,64}, -{78,-9,65}, -{78,-9,66}, -{78,-9,67}, -{78,-9,68}, -{78,-9,69}, -{78,-9,70}, -{78,-9,71}, -{78,-9,72}, -{78,-9,73}, -{78,-9,74}, -{78,-9,75}, -{78,-9,76}, -{78,-9,77}, -{78,-9,78}, -{78,-9,79}, -{78,-8,-33}, -{78,-8,-32}, -{78,-8,-31}, -{78,-8,-30}, -{78,-8,-29}, -{78,-8,-28}, -{78,-8,-27}, -{78,-8,-26}, -{78,-8,-25}, -{78,-8,-24}, -{78,-8,-23}, -{78,-8,-22}, -{78,-8,-21}, -{78,-8,-20}, -{78,-8,-19}, -{78,-8,-18}, -{78,-8,-17}, -{78,-8,-16}, -{78,-8,-15}, -{78,-8,-14}, -{78,-8,-13}, -{78,-8,-12}, -{78,-8,-11}, -{78,-8,-10}, -{78,-8,-9}, -{78,-8,-8}, -{78,-8,-7}, -{78,-8,-6}, -{78,-8,-5}, -{78,-8,-4}, -{78,-8,-3}, -{78,-8,-2}, -{78,-8,-1}, -{78,-8,0}, -{78,-8,1}, -{78,-8,2}, -{78,-8,3}, -{78,-8,4}, -{78,-8,5}, -{78,-8,6}, -{78,-8,7}, -{78,-8,8}, -{78,-8,9}, -{78,-8,10}, -{78,-8,11}, -{78,-8,12}, -{78,-8,13}, -{78,-8,14}, -{78,-8,15}, -{78,-8,16}, -{78,-8,17}, -{78,-8,18}, -{78,-8,19}, -{78,-8,20}, -{78,-8,21}, -{78,-8,22}, -{78,-8,23}, -{78,-8,24}, -{78,-8,25}, -{78,-8,26}, -{78,-8,27}, -{78,-8,28}, -{78,-8,29}, -{78,-8,30}, -{78,-8,31}, -{78,-8,32}, -{78,-8,33}, -{78,-8,34}, -{78,-8,35}, -{78,-8,36}, -{78,-8,37}, -{78,-8,38}, -{78,-8,39}, -{78,-8,40}, -{78,-8,41}, -{78,-8,42}, -{78,-8,43}, -{78,-8,44}, -{78,-8,45}, -{78,-8,46}, -{78,-8,47}, -{78,-8,48}, -{78,-8,49}, -{78,-8,50}, -{78,-8,51}, -{78,-8,52}, -{78,-8,53}, -{78,-8,54}, -{78,-8,55}, -{78,-8,56}, -{78,-8,57}, -{78,-8,58}, -{78,-8,59}, -{78,-8,60}, -{78,-8,61}, -{78,-8,62}, -{78,-8,63}, -{78,-8,64}, -{78,-8,65}, -{78,-8,66}, -{78,-8,67}, -{78,-8,68}, -{78,-8,69}, -{78,-8,70}, -{78,-8,71}, -{78,-8,72}, -{78,-8,73}, -{78,-8,74}, -{78,-8,75}, -{78,-8,76}, -{78,-8,77}, -{78,-8,78}, -{78,-8,79}, -{78,-7,-33}, -{78,-7,-32}, -{78,-7,-31}, -{78,-7,-30}, -{78,-7,-29}, -{78,-7,-28}, -{78,-7,-27}, -{78,-7,-26}, -{78,-7,-25}, -{78,-7,-24}, -{78,-7,-23}, -{78,-7,-22}, -{78,-7,-21}, -{78,-7,-20}, -{78,-7,-19}, -{78,-7,-18}, -{78,-7,-17}, -{78,-7,-16}, -{78,-7,-15}, -{78,-7,-14}, -{78,-7,-13}, -{78,-7,-12}, -{78,-7,-11}, -{78,-7,-10}, -{78,-7,-9}, -{78,-7,-8}, -{78,-7,-7}, -{78,-7,-6}, -{78,-7,-5}, -{78,-7,-4}, -{78,-7,-3}, -{78,-7,-2}, -{78,-7,-1}, -{78,-7,0}, -{78,-7,1}, -{78,-7,2}, -{78,-7,3}, -{78,-7,4}, -{78,-7,5}, -{78,-7,6}, -{78,-7,7}, -{78,-7,8}, -{78,-7,9}, -{78,-7,10}, -{78,-7,11}, -{78,-7,12}, -{78,-7,13}, -{78,-7,14}, -{78,-7,15}, -{78,-7,16}, -{78,-7,17}, -{78,-7,18}, -{78,-7,19}, -{78,-7,20}, -{78,-7,21}, -{78,-7,22}, -{78,-7,23}, -{78,-7,24}, -{78,-7,25}, -{78,-7,26}, -{78,-7,27}, -{78,-7,28}, -{78,-7,29}, -{78,-7,30}, -{78,-7,31}, -{78,-7,32}, -{78,-7,33}, -{78,-7,34}, -{78,-7,35}, -{78,-7,36}, -{78,-7,37}, -{78,-7,38}, -{78,-7,39}, -{78,-7,40}, -{78,-7,41}, -{78,-7,42}, -{78,-7,43}, -{78,-7,44}, -{78,-7,45}, -{78,-7,46}, -{78,-7,47}, -{78,-7,48}, -{78,-7,49}, -{78,-7,50}, -{78,-7,51}, -{78,-7,52}, -{78,-7,53}, -{78,-7,54}, -{78,-7,55}, -{78,-7,56}, -{78,-7,57}, -{78,-7,58}, -{78,-7,59}, -{78,-7,60}, -{78,-7,61}, -{78,-7,62}, -{78,-7,63}, -{78,-7,64}, -{78,-7,65}, -{78,-7,66}, -{78,-7,67}, -{78,-7,68}, -{78,-7,69}, -{78,-7,70}, -{78,-7,71}, -{78,-7,72}, -{78,-7,73}, -{78,-7,74}, -{78,-7,75}, -{78,-7,76}, -{78,-7,77}, -{78,-7,78}, -{78,-7,79}, -{78,-6,-33}, -{78,-6,-32}, -{78,-6,-31}, -{78,-6,-30}, -{78,-6,-29}, -{78,-6,-28}, -{78,-6,-27}, -{78,-6,-26}, -{78,-6,-25}, -{78,-6,-24}, -{78,-6,-23}, -{78,-6,-22}, -{78,-6,-21}, -{78,-6,-20}, -{78,-6,-19}, -{78,-6,-18}, -{78,-6,-17}, -{78,-6,-16}, -{78,-6,-15}, -{78,-6,-14}, -{78,-6,-13}, -{78,-6,-12}, -{78,-6,-11}, -{78,-6,-10}, -{78,-6,-9}, -{78,-6,-8}, -{78,-6,-7}, -{78,-6,-6}, -{78,-6,-5}, -{78,-6,-4}, -{78,-6,-3}, -{78,-6,-2}, -{78,-6,-1}, -{78,-6,0}, -{78,-6,1}, -{78,-6,2}, -{78,-6,3}, -{78,-6,4}, -{78,-6,5}, -{78,-6,6}, -{78,-6,7}, -{78,-6,8}, -{78,-6,9}, -{78,-6,10}, -{78,-6,11}, -{78,-6,12}, -{78,-6,13}, -{78,-6,14}, -{78,-6,15}, -{78,-6,16}, -{78,-6,17}, -{78,-6,18}, -{78,-6,19}, -{78,-6,20}, -{78,-6,21}, -{78,-6,22}, -{78,-6,23}, -{78,-6,24}, -{78,-6,25}, -{78,-6,26}, -{78,-6,27}, -{78,-6,28}, -{78,-6,29}, -{78,-6,30}, -{78,-6,31}, -{78,-6,32}, -{78,-6,33}, -{78,-6,34}, -{78,-6,35}, -{78,-6,36}, -{78,-6,37}, -{78,-6,38}, -{78,-6,39}, -{78,-6,40}, -{78,-6,41}, -{78,-6,42}, -{78,-6,43}, -{78,-6,44}, -{78,-6,45}, -{78,-6,46}, -{78,-6,47}, -{78,-6,48}, -{78,-6,49}, -{78,-6,50}, -{78,-6,51}, -{78,-6,52}, -{78,-6,53}, -{78,-6,54}, -{78,-6,55}, -{78,-6,56}, -{78,-6,57}, -{78,-6,58}, -{78,-6,59}, -{78,-6,60}, -{78,-6,61}, -{78,-6,62}, -{78,-6,63}, -{78,-6,64}, -{78,-6,65}, -{78,-6,66}, -{78,-6,67}, -{78,-6,68}, -{78,-6,69}, -{78,-6,70}, -{78,-6,71}, -{78,-6,72}, -{78,-6,73}, -{78,-6,74}, -{78,-6,75}, -{78,-6,76}, -{78,-6,77}, -{78,-6,78}, -{78,-6,79}, -{78,-5,-33}, -{78,-5,-32}, -{78,-5,-31}, -{78,-5,-30}, -{78,-5,-29}, -{78,-5,-28}, -{78,-5,-27}, -{78,-5,-26}, -{78,-5,-25}, -{78,-5,-24}, -{78,-5,-23}, -{78,-5,-22}, -{78,-5,-21}, -{78,-5,-20}, -{78,-5,-19}, -{78,-5,-18}, -{78,-5,-17}, -{78,-5,-16}, -{78,-5,-15}, -{78,-5,-14}, -{78,-5,-13}, -{78,-5,-12}, -{78,-5,-11}, -{78,-5,-10}, -{78,-5,-9}, -{78,-5,-8}, -{78,-5,-7}, -{78,-5,-6}, -{78,-5,-5}, -{78,-5,-4}, -{78,-5,-3}, -{78,-5,-2}, -{78,-5,-1}, -{78,-5,0}, -{78,-5,1}, -{78,-5,2}, -{78,-5,3}, -{78,-5,4}, -{78,-5,5}, -{78,-5,6}, -{78,-5,7}, -{78,-5,8}, -{78,-5,9}, -{78,-5,10}, -{78,-5,11}, -{78,-5,12}, -{78,-5,13}, -{78,-5,14}, -{78,-5,15}, -{78,-5,16}, -{78,-5,17}, -{78,-5,18}, -{78,-5,19}, -{78,-5,20}, -{78,-5,21}, -{78,-5,22}, -{78,-5,23}, -{78,-5,24}, -{78,-5,25}, -{78,-5,26}, -{78,-5,27}, -{78,-5,28}, -{78,-5,29}, -{78,-5,30}, -{78,-5,31}, -{78,-5,32}, -{78,-5,33}, -{78,-5,34}, -{78,-5,35}, -{78,-5,36}, -{78,-5,37}, -{78,-5,38}, -{78,-5,39}, -{78,-5,40}, -{78,-5,41}, -{78,-5,42}, -{78,-5,43}, -{78,-5,44}, -{78,-5,45}, -{78,-5,46}, -{78,-5,47}, -{78,-5,48}, -{78,-5,49}, -{78,-5,50}, -{78,-5,51}, -{78,-5,52}, -{78,-5,53}, -{78,-5,54}, -{78,-5,55}, -{78,-5,56}, -{78,-5,57}, -{78,-5,58}, -{78,-5,59}, -{78,-5,60}, -{78,-5,61}, -{78,-5,62}, -{78,-5,63}, -{78,-5,64}, -{78,-5,65}, -{78,-5,66}, -{78,-5,67}, -{78,-5,68}, -{78,-5,69}, -{78,-5,70}, -{78,-5,71}, -{78,-5,72}, -{78,-5,73}, -{78,-5,74}, -{78,-5,75}, -{78,-5,76}, -{78,-5,77}, -{78,-5,78}, -{78,-5,79}, -{78,-4,-33}, -{78,-4,-32}, -{78,-4,-31}, -{78,-4,-30}, -{78,-4,-29}, -{78,-4,-28}, -{78,-4,-27}, -{78,-4,-26}, -{78,-4,-25}, -{78,-4,-24}, -{78,-4,-23}, -{78,-4,-22}, -{78,-4,-21}, -{78,-4,-20}, -{78,-4,-19}, -{78,-4,-18}, -{78,-4,-17}, -{78,-4,-16}, -{78,-4,-15}, -{78,-4,-14}, -{78,-4,-13}, -{78,-4,-12}, -{78,-4,-11}, -{78,-4,-10}, -{78,-4,-9}, -{78,-4,-8}, -{78,-4,-7}, -{78,-4,-6}, -{78,-4,-5}, -{78,-4,-4}, -{78,-4,-3}, -{78,-4,-2}, -{78,-4,-1}, -{78,-4,0}, -{78,-4,1}, -{78,-4,2}, -{78,-4,3}, -{78,-4,4}, -{78,-4,5}, -{78,-4,6}, -{78,-4,7}, -{78,-4,8}, -{78,-4,9}, -{78,-4,10}, -{78,-4,11}, -{78,-4,12}, -{78,-4,13}, -{78,-4,14}, -{78,-4,15}, -{78,-4,16}, -{78,-4,17}, -{78,-4,18}, -{78,-4,19}, -{78,-4,20}, -{78,-4,21}, -{78,-4,22}, -{78,-4,23}, -{78,-4,24}, -{78,-4,25}, -{78,-4,26}, -{78,-4,27}, -{78,-4,28}, -{78,-4,29}, -{78,-4,30}, -{78,-4,31}, -{78,-4,32}, -{78,-4,33}, -{78,-4,34}, -{78,-4,35}, -{78,-4,36}, -{78,-4,37}, -{78,-4,38}, -{78,-4,39}, -{78,-4,40}, -{78,-4,41}, -{78,-4,42}, -{78,-4,43}, -{78,-4,44}, -{78,-4,45}, -{78,-4,46}, -{78,-4,47}, -{78,-4,48}, -{78,-4,49}, -{78,-4,50}, -{78,-4,51}, -{78,-4,52}, -{78,-4,53}, -{78,-4,54}, -{78,-4,55}, -{78,-4,56}, -{78,-4,57}, -{78,-4,58}, -{78,-4,59}, -{78,-4,60}, -{78,-4,61}, -{78,-4,62}, -{78,-4,63}, -{78,-4,64}, -{78,-4,65}, -{78,-4,66}, -{78,-4,67}, -{78,-4,68}, -{78,-4,69}, -{78,-4,70}, -{78,-4,71}, -{78,-4,72}, -{78,-4,73}, -{78,-4,74}, -{78,-4,75}, -{78,-4,76}, -{78,-4,77}, -{78,-4,78}, -{78,-4,79}, -{78,-3,-33}, -{78,-3,-32}, -{78,-3,-31}, -{78,-3,-30}, -{78,-3,-29}, -{78,-3,-28}, -{78,-3,-27}, -{78,-3,-26}, -{78,-3,-25}, -{78,-3,-24}, -{78,-3,-23}, -{78,-3,-22}, -{78,-3,-21}, -{78,-3,-20}, -{78,-3,-19}, -{78,-3,-18}, -{78,-3,-17}, -{78,-3,-16}, -{78,-3,-15}, -{78,-3,-14}, -{78,-3,-13}, -{78,-3,-12}, -{78,-3,-11}, -{78,-3,-10}, -{78,-3,-9}, -{78,-3,-8}, -{78,-3,-7}, -{78,-3,-6}, -{78,-3,-5}, -{78,-3,-4}, -{78,-3,-3}, -{78,-3,-2}, -{78,-3,-1}, -{78,-3,0}, -{78,-3,1}, -{78,-3,2}, -{78,-3,3}, -{78,-3,4}, -{78,-3,5}, -{78,-3,6}, -{78,-3,7}, -{78,-3,8}, -{78,-3,9}, -{78,-3,10}, -{78,-3,11}, -{78,-3,12}, -{78,-3,13}, -{78,-3,14}, -{78,-3,15}, -{78,-3,16}, -{78,-3,17}, -{78,-3,18}, -{78,-3,19}, -{78,-3,20}, -{78,-3,21}, -{78,-3,22}, -{78,-3,23}, -{78,-3,24}, -{78,-3,25}, -{78,-3,26}, -{78,-3,27}, -{78,-3,28}, -{78,-3,29}, -{78,-3,30}, -{78,-3,31}, -{78,-3,32}, -{78,-3,33}, -{78,-3,34}, -{78,-3,35}, -{78,-3,36}, -{78,-3,37}, -{78,-3,38}, -{78,-3,39}, -{78,-3,40}, -{78,-3,41}, -{78,-3,42}, -{78,-3,43}, -{78,-3,44}, -{78,-3,45}, -{78,-3,46}, -{78,-3,47}, -{78,-3,48}, -{78,-3,49}, -{78,-3,50}, -{78,-3,51}, -{78,-3,52}, -{78,-3,53}, -{78,-3,54}, -{78,-3,55}, -{78,-3,56}, -{78,-3,57}, -{78,-3,58}, -{78,-3,59}, -{78,-3,60}, -{78,-3,61}, -{78,-3,62}, -{78,-3,63}, -{78,-3,64}, -{78,-3,65}, -{78,-3,66}, -{78,-3,67}, -{78,-3,68}, -{78,-3,69}, -{78,-3,70}, -{78,-3,71}, -{78,-3,72}, -{78,-3,73}, -{78,-3,74}, -{78,-3,75}, -{78,-3,76}, -{78,-3,77}, -{78,-3,78}, -{78,-3,79}, -{78,-2,-33}, -{78,-2,-32}, -{78,-2,-31}, -{78,-2,-30}, -{78,-2,-29}, -{78,-2,-28}, -{78,-2,-27}, -{78,-2,-26}, -{78,-2,-25}, -{78,-2,-24}, -{78,-2,-23}, -{78,-2,-22}, -{78,-2,-21}, -{78,-2,-20}, -{78,-2,-19}, -{78,-2,-18}, -{78,-2,-17}, -{78,-2,-16}, -{78,-2,-15}, -{78,-2,-14}, -{78,-2,-13}, -{78,-2,-12}, -{78,-2,-11}, -{78,-2,-10}, -{78,-2,-9}, -{78,-2,-8}, -{78,-2,-7}, -{78,-2,-6}, -{78,-2,-5}, -{78,-2,-4}, -{78,-2,-3}, -{78,-2,-2}, -{78,-2,-1}, -{78,-2,0}, -{78,-2,1}, -{78,-2,2}, -{78,-2,3}, -{78,-2,4}, -{78,-2,5}, -{78,-2,6}, -{78,-2,7}, -{78,-2,8}, -{78,-2,9}, -{78,-2,10}, -{78,-2,11}, -{78,-2,12}, -{78,-2,13}, -{78,-2,14}, -{78,-2,15}, -{78,-2,16}, -{78,-2,17}, -{78,-2,18}, -{78,-2,19}, -{78,-2,20}, -{78,-2,21}, -{78,-2,22}, -{78,-2,23}, -{78,-2,24}, -{78,-2,25}, -{78,-2,26}, -{78,-2,27}, -{78,-2,28}, -{78,-2,29}, -{78,-2,30}, -{78,-2,31}, -{78,-2,32}, -{78,-2,33}, -{78,-2,34}, -{78,-2,35}, -{78,-2,36}, -{78,-2,37}, -{78,-2,38}, -{78,-2,39}, -{78,-2,40}, -{78,-2,41}, -{78,-2,42}, -{78,-2,43}, -{78,-2,44}, -{78,-2,45}, -{78,-2,46}, -{78,-2,47}, -{78,-2,48}, -{78,-2,49}, -{78,-2,50}, -{78,-2,51}, -{78,-2,52}, -{78,-2,53}, -{78,-2,54}, -{78,-2,55}, -{78,-2,56}, -{78,-2,57}, -{78,-2,58}, -{78,-2,59}, -{78,-2,60}, -{78,-2,61}, -{78,-2,62}, -{78,-2,63}, -{78,-2,64}, -{78,-2,65}, -{78,-2,66}, -{78,-2,67}, -{78,-2,68}, -{78,-2,69}, -{78,-2,70}, -{78,-2,71}, -{78,-2,72}, -{78,-2,73}, -{78,-2,74}, -{78,-2,75}, -{78,-2,76}, -{78,-2,77}, -{78,-2,78}, -{78,-2,79}, -{78,-1,-33}, -{78,-1,-32}, -{78,-1,-31}, -{78,-1,-30}, -{78,-1,-29}, -{78,-1,-28}, -{78,-1,-27}, -{78,-1,-26}, -{78,-1,-25}, -{78,-1,-24}, -{78,-1,-23}, -{78,-1,-22}, -{78,-1,-21}, -{78,-1,-20}, -{78,-1,-19}, -{78,-1,-18}, -{78,-1,-17}, -{78,-1,-16}, -{78,-1,-15}, -{78,-1,-14}, -{78,-1,-13}, -{78,-1,-12}, -{78,-1,-11}, -{78,-1,-10}, -{78,-1,-9}, -{78,-1,-8}, -{78,-1,-7}, -{78,-1,-6}, -{78,-1,-5}, -{78,-1,-4}, -{78,-1,-3}, -{78,-1,-2}, -{78,-1,-1}, -{78,-1,0}, -{78,-1,1}, -{78,-1,2}, -{78,-1,3}, -{78,-1,4}, -{78,-1,5}, -{78,-1,6}, -{78,-1,7}, -{78,-1,8}, -{78,-1,9}, -{78,-1,10}, -{78,-1,11}, -{78,-1,12}, -{78,-1,13}, -{78,-1,14}, -{78,-1,15}, -{78,-1,16}, -{78,-1,17}, -{78,-1,18}, -{78,-1,19}, -{78,-1,20}, -{78,-1,21}, -{78,-1,22}, -{78,-1,23}, -{78,-1,24}, -{78,-1,25}, -{78,-1,26}, -{78,-1,27}, -{78,-1,28}, -{78,-1,29}, -{78,-1,30}, -{78,-1,31}, -{78,-1,32}, -{78,-1,33}, -{78,-1,34}, -{78,-1,35}, -{78,-1,36}, -{78,-1,37}, -{78,-1,38}, -{78,-1,39}, -{78,-1,40}, -{78,-1,41}, -{78,-1,42}, -{78,-1,43}, -{78,-1,44}, -{78,-1,45}, -{78,-1,46}, -{78,-1,47}, -{78,-1,48}, -{78,-1,49}, -{78,-1,50}, -{78,-1,51}, -{78,-1,52}, -{78,-1,53}, -{78,-1,54}, -{78,-1,55}, -{78,-1,56}, -{78,-1,57}, -{78,-1,58}, -{78,-1,59}, -{78,-1,60}, -{78,-1,61}, -{78,-1,62}, -{78,-1,63}, -{78,-1,64}, -{78,-1,65}, -{78,-1,66}, -{78,-1,67}, -{78,-1,68}, -{78,-1,69}, -{78,-1,70}, -{78,-1,71}, -{78,-1,72}, -{78,-1,73}, -{78,-1,74}, -{78,-1,75}, -{78,-1,76}, -{78,-1,77}, -{78,-1,78}, -{78,-1,79}, -{78,0,-33}, -{78,0,-32}, -{78,0,-31}, -{78,0,-30}, -{78,0,-29}, -{78,0,-28}, -{78,0,-27}, -{78,0,-26}, -{78,0,-25}, -{78,0,-24}, -{78,0,-23}, -{78,0,-22}, -{78,0,-21}, -{78,0,-20}, -{78,0,-19}, -{78,0,-18}, -{78,0,-17}, -{78,0,-16}, -{78,0,-15}, -{78,0,-14}, -{78,0,-13}, -{78,0,-12}, -{78,0,-11}, -{78,0,-10}, -{78,0,-9}, -{78,0,-8}, -{78,0,-7}, -{78,0,-6}, -{78,0,-5}, -{78,0,-4}, -{78,0,-3}, -{78,0,-2}, -{78,0,-1}, -{78,0,0}, -{78,0,1}, -{78,0,2}, -{78,0,3}, -{78,0,4}, -{78,0,5}, -{78,0,6}, -{78,0,7}, -{78,0,8}, -{78,0,9}, -{78,0,10}, -{78,0,11}, -{78,0,12}, -{78,0,13}, -{78,0,14}, -{78,0,15}, -{78,0,16}, -{78,0,17}, -{78,0,18}, -{78,0,19}, -{78,0,20}, -{78,0,21}, -{78,0,22}, -{78,0,23}, -{78,0,24}, -{78,0,25}, -{78,0,26}, -{78,0,27}, -{78,0,28}, -{78,0,29}, -{78,0,30}, -{78,0,31}, -{78,0,32}, -{78,0,33}, -{78,0,34}, -{78,0,35}, -{78,0,36}, -{78,0,37}, -{78,0,38}, -{78,0,39}, -{78,0,40}, -{78,0,41}, -{78,0,42}, -{78,0,43}, -{78,0,44}, -{78,0,45}, -{78,0,46}, -{78,0,47}, -{78,0,48}, -{78,0,49}, -{78,0,50}, -{78,0,51}, -{78,0,52}, -{78,0,53}, -{78,0,54}, -{78,0,55}, -{78,0,56}, -{78,0,57}, -{78,0,58}, -{78,0,59}, -{78,0,60}, -{78,0,61}, -{78,0,62}, -{78,0,63}, -{78,0,64}, -{78,0,65}, -{78,0,66}, -{78,0,67}, -{78,0,68}, -{78,0,69}, -{78,0,70}, -{78,0,71}, -{78,0,72}, -{78,0,73}, -{78,0,74}, -{78,0,75}, -{78,0,76}, -{78,0,77}, -{78,0,78}, -{78,0,79}, -{78,1,-33}, -{78,1,-32}, -{78,1,-31}, -{78,1,-30}, -{78,1,-29}, -{78,1,-28}, -{78,1,-27}, -{78,1,-26}, -{78,1,-25}, -{78,1,-24}, -{78,1,-23}, -{78,1,-22}, -{78,1,-21}, -{78,1,-20}, -{78,1,-19}, -{78,1,-18}, -{78,1,-17}, -{78,1,-16}, -{78,1,-15}, -{78,1,-14}, -{78,1,-13}, -{78,1,-12}, -{78,1,-11}, -{78,1,-10}, -{78,1,-9}, -{78,1,-8}, -{78,1,-7}, -{78,1,-6}, -{78,1,-5}, -{78,1,-4}, -{78,1,-3}, -{78,1,-2}, -{78,1,-1}, -{78,1,0}, -{78,1,1}, -{78,1,2}, -{78,1,3}, -{78,1,4}, -{78,1,5}, -{78,1,6}, -{78,1,7}, -{78,1,8}, -{78,1,9}, -{78,1,10}, -{78,1,11}, -{78,1,12}, -{78,1,13}, -{78,1,14}, -{78,1,15}, -{78,1,16}, -{78,1,17}, -{78,1,18}, -{78,1,19}, -{78,1,20}, -{78,1,21}, -{78,1,22}, -{78,1,23}, -{78,1,24}, -{78,1,25}, -{78,1,26}, -{78,1,27}, -{78,1,28}, -{78,1,29}, -{78,1,30}, -{78,1,31}, -{78,1,32}, -{78,1,33}, -{78,1,34}, -{78,1,35}, -{78,1,36}, -{78,1,37}, -{78,1,38}, -{78,1,39}, -{78,1,40}, -{78,1,41}, -{78,1,42}, -{78,1,43}, -{78,1,44}, -{78,1,45}, -{78,1,46}, -{78,1,47}, -{78,1,48}, -{78,1,49}, -{78,1,50}, -{78,1,51}, -{78,1,52}, -{78,1,53}, -{78,1,54}, -{78,1,55}, -{78,1,56}, -{78,1,57}, -{78,1,58}, -{78,1,59}, -{78,1,60}, -{78,1,61}, -{78,1,62}, -{78,1,63}, -{78,1,64}, -{78,1,65}, -{78,1,66}, -{78,1,67}, -{78,1,68}, -{78,1,69}, -{78,1,70}, -{78,1,71}, -{78,1,72}, -{78,1,73}, -{78,1,74}, -{78,1,75}, -{78,1,76}, -{78,1,77}, -{78,1,78}, -{78,1,79}, -{78,2,-33}, -{78,2,-32}, -{78,2,-31}, -{78,2,-30}, -{78,2,-29}, -{78,2,-28}, -{78,2,-27}, -{78,2,-26}, -{78,2,-25}, -{78,2,-24}, -{78,2,-23}, -{78,2,-22}, -{78,2,-21}, -{78,2,-20}, -{78,2,-19}, -{78,2,-18}, -{78,2,-17}, -{78,2,-16}, -{78,2,-15}, -{78,2,-14}, -{78,2,-13}, -{78,2,-12}, -{78,2,-11}, -{78,2,-10}, -{78,2,-9}, -{78,2,-8}, -{78,2,-7}, -{78,2,-6}, -{78,2,-5}, -{78,2,-4}, -{78,2,-3}, -{78,2,-2}, -{78,2,-1}, -{78,2,0}, -{78,2,1}, -{78,2,2}, -{78,2,3}, -{78,2,4}, -{78,2,5}, -{78,2,6}, -{78,2,7}, -{78,2,8}, -{78,2,9}, -{78,2,10}, -{78,2,11}, -{78,2,12}, -{78,2,13}, -{78,2,14}, -{78,2,15}, -{78,2,16}, -{78,2,17}, -{78,2,18}, -{78,2,19}, -{78,2,20}, -{78,2,21}, -{78,2,22}, -{78,2,23}, -{78,2,24}, -{78,2,25}, -{78,2,26}, -{78,2,27}, -{78,2,28}, -{78,2,29}, -{78,2,30}, -{78,2,31}, -{78,2,32}, -{78,2,33}, -{78,2,34}, -{78,2,35}, -{78,2,36}, -{78,2,37}, -{78,2,38}, -{78,2,39}, -{78,2,40}, -{78,2,41}, -{78,2,42}, -{78,2,43}, -{78,2,44}, -{78,2,45}, -{78,2,46}, -{78,2,47}, -{78,2,48}, -{78,2,49}, -{78,2,50}, -{78,2,51}, -{78,2,52}, -{78,2,53}, -{78,2,54}, -{78,2,55}, -{78,2,56}, -{78,2,57}, -{78,2,58}, -{78,2,59}, -{78,2,60}, -{78,2,61}, -{78,2,62}, -{78,2,63}, -{78,2,64}, -{78,2,65}, -{78,2,66}, -{78,2,67}, -{78,2,68}, -{78,2,69}, -{78,2,70}, -{78,2,71}, -{78,2,72}, -{78,2,73}, -{78,2,74}, -{78,2,75}, -{78,2,76}, -{78,2,77}, -{78,2,78}, -{78,2,79}, -{78,2,80}, -{78,3,-33}, -{78,3,-32}, -{78,3,-31}, -{78,3,-30}, -{78,3,-29}, -{78,3,-28}, -{78,3,-27}, -{78,3,-26}, -{78,3,-25}, -{78,3,-24}, -{78,3,-23}, -{78,3,-22}, -{78,3,-21}, -{78,3,-20}, -{78,3,-19}, -{78,3,-18}, -{78,3,-17}, -{78,3,-16}, -{78,3,-15}, -{78,3,-14}, -{78,3,-13}, -{78,3,-12}, -{78,3,-11}, -{78,3,-10}, -{78,3,-9}, -{78,3,-8}, -{78,3,-7}, -{78,3,-6}, -{78,3,-5}, -{78,3,-4}, -{78,3,-3}, -{78,3,-2}, -{78,3,-1}, -{78,3,0}, -{78,3,1}, -{78,3,2}, -{78,3,3}, -{78,3,4}, -{78,3,5}, -{78,3,6}, -{78,3,7}, -{78,3,8}, -{78,3,9}, -{78,3,10}, -{78,3,11}, -{78,3,12}, -{78,3,13}, -{78,3,14}, -{78,3,15}, -{78,3,16}, -{78,3,17}, -{78,3,18}, -{78,3,19}, -{78,3,20}, -{78,3,21}, -{78,3,22}, -{78,3,23}, -{78,3,24}, -{78,3,25}, -{78,3,26}, -{78,3,27}, -{78,3,28}, -{78,3,29}, -{78,3,30}, -{78,3,31}, -{78,3,32}, -{78,3,33}, -{78,3,34}, -{78,3,35}, -{78,3,36}, -{78,3,37}, -{78,3,38}, -{78,3,39}, -{78,3,40}, -{78,3,41}, -{78,3,42}, -{78,3,43}, -{78,3,44}, -{78,3,45}, -{78,3,46}, -{78,3,47}, -{78,3,48}, -{78,3,49}, -{78,3,50}, -{78,3,51}, -{78,3,52}, -{78,3,53}, -{78,3,54}, -{78,3,55}, -{78,3,56}, -{78,3,57}, -{78,3,58}, -{78,3,59}, -{78,3,60}, -{78,3,61}, -{78,3,62}, -{78,3,63}, -{78,3,64}, -{78,3,65}, -{78,3,66}, -{78,3,67}, -{78,3,68}, -{78,3,69}, -{78,3,70}, -{78,3,71}, -{78,3,72}, -{78,3,73}, -{78,3,74}, -{78,3,75}, -{78,3,76}, -{78,3,77}, -{78,3,78}, -{78,3,79}, -{78,3,80}, -{78,4,-33}, -{78,4,-32}, -{78,4,-31}, -{78,4,-30}, -{78,4,-29}, -{78,4,-28}, -{78,4,-27}, -{78,4,-26}, -{78,4,-25}, -{78,4,-24}, -{78,4,-23}, -{78,4,-22}, -{78,4,-21}, -{78,4,-20}, -{78,4,-19}, -{78,4,-18}, -{78,4,-17}, -{78,4,-16}, -{78,4,-15}, -{78,4,-14}, -{78,4,-13}, -{78,4,-12}, -{78,4,-11}, -{78,4,-10}, -{78,4,-9}, -{78,4,-8}, -{78,4,-7}, -{78,4,-6}, -{78,4,-5}, -{78,4,-4}, -{78,4,-3}, -{78,4,-2}, -{78,4,-1}, -{78,4,0}, -{78,4,1}, -{78,4,2}, -{78,4,3}, -{78,4,4}, -{78,4,5}, -{78,4,6}, -{78,4,7}, -{78,4,8}, -{78,4,9}, -{78,4,10}, -{78,4,11}, -{78,4,12}, -{78,4,13}, -{78,4,14}, -{78,4,15}, -{78,4,16}, -{78,4,17}, -{78,4,18}, -{78,4,19}, -{78,4,20}, -{78,4,21}, -{78,4,22}, -{78,4,23}, -{78,4,24}, -{78,4,25}, -{78,4,26}, -{78,4,27}, -{78,4,28}, -{78,4,29}, -{78,4,30}, -{78,4,31}, -{78,4,32}, -{78,4,33}, -{78,4,34}, -{78,4,35}, -{78,4,36}, -{78,4,37}, -{78,4,38}, -{78,4,39}, -{78,4,40}, -{78,4,41}, -{78,4,42}, -{78,4,43}, -{78,4,44}, -{78,4,45}, -{78,4,46}, -{78,4,47}, -{78,4,48}, -{78,4,49}, -{78,4,50}, -{78,4,51}, -{78,4,52}, -{78,4,53}, -{78,4,54}, -{78,4,55}, -{78,4,56}, -{78,4,57}, -{78,4,58}, -{78,4,59}, -{78,4,60}, -{78,4,61}, -{78,4,62}, -{78,4,63}, -{78,4,64}, -{78,4,65}, -{78,4,66}, -{78,4,67}, -{78,4,68}, -{78,4,69}, -{78,4,70}, -{78,4,71}, -{78,4,72}, -{78,4,73}, -{78,4,74}, -{78,4,75}, -{78,4,76}, -{78,4,77}, -{78,4,78}, -{78,4,79}, -{78,4,80}, -{78,5,-33}, -{78,5,-32}, -{78,5,-31}, -{78,5,-30}, -{78,5,-29}, -{78,5,-28}, -{78,5,-27}, -{78,5,-26}, -{78,5,-25}, -{78,5,-24}, -{78,5,-23}, -{78,5,-22}, -{78,5,-21}, -{78,5,-20}, -{78,5,-19}, -{78,5,-18}, -{78,5,-17}, -{78,5,-16}, -{78,5,-15}, -{78,5,-14}, -{78,5,-13}, -{78,5,-12}, -{78,5,-11}, -{78,5,-10}, -{78,5,-9}, -{78,5,-8}, -{78,5,-7}, -{78,5,-6}, -{78,5,-5}, -{78,5,-4}, -{78,5,-3}, -{78,5,-2}, -{78,5,-1}, -{78,5,0}, -{78,5,1}, -{78,5,2}, -{78,5,3}, -{78,5,4}, -{78,5,5}, -{78,5,6}, -{78,5,7}, -{78,5,8}, -{78,5,9}, -{78,5,10}, -{78,5,11}, -{78,5,12}, -{78,5,13}, -{78,5,14}, -{78,5,15}, -{78,5,16}, -{78,5,17}, -{78,5,18}, -{78,5,19}, -{78,5,20}, -{78,5,21}, -{78,5,22}, -{78,5,23}, -{78,5,24}, -{78,5,25}, -{78,5,26}, -{78,5,27}, -{78,5,28}, -{78,5,29}, -{78,5,30}, -{78,5,31}, -{78,5,32}, -{78,5,33}, -{78,5,34}, -{78,5,35}, -{78,5,36}, -{78,5,37}, -{78,5,38}, -{78,5,39}, -{78,5,40}, -{78,5,41}, -{78,5,42}, -{78,5,43}, -{78,5,44}, -{78,5,45}, -{78,5,46}, -{78,5,47}, -{78,5,48}, -{78,5,49}, -{78,5,50}, -{78,5,51}, -{78,5,52}, -{78,5,53}, -{78,5,54}, -{78,5,55}, -{78,5,56}, -{78,5,57}, -{78,5,58}, -{78,5,59}, -{78,5,60}, -{78,5,61}, -{78,5,62}, -{78,5,63}, -{78,5,64}, -{78,5,65}, -{78,5,66}, -{78,5,67}, -{78,5,68}, -{78,5,69}, -{78,5,70}, -{78,5,71}, -{78,5,72}, -{78,5,73}, -{78,5,74}, -{78,5,75}, -{78,5,76}, -{78,5,77}, -{78,5,78}, -{78,5,79}, -{78,5,80}, -{78,6,-33}, -{78,6,-32}, -{78,6,-31}, -{78,6,-30}, -{78,6,-29}, -{78,6,-28}, -{78,6,-27}, -{78,6,-26}, -{78,6,-25}, -{78,6,-24}, -{78,6,-23}, -{78,6,-22}, -{78,6,-21}, -{78,6,-20}, -{78,6,-19}, -{78,6,-18}, -{78,6,-17}, -{78,6,-16}, -{78,6,-15}, -{78,6,-14}, -{78,6,-13}, -{78,6,-12}, -{78,6,-11}, -{78,6,-10}, -{78,6,-9}, -{78,6,-8}, -{78,6,-7}, -{78,6,-6}, -{78,6,-5}, -{78,6,-4}, -{78,6,-3}, -{78,6,-2}, -{78,6,-1}, -{78,6,0}, -{78,6,1}, -{78,6,2}, -{78,6,3}, -{78,6,4}, -{78,6,5}, -{78,6,6}, -{78,6,7}, -{78,6,8}, -{78,6,9}, -{78,6,10}, -{78,6,11}, -{78,6,12}, -{78,6,13}, -{78,6,14}, -{78,6,15}, -{78,6,16}, -{78,6,17}, -{78,6,18}, -{78,6,19}, -{78,6,20}, -{78,6,21}, -{78,6,22}, -{78,6,23}, -{78,6,24}, -{78,6,25}, -{78,6,26}, -{78,6,27}, -{78,6,28}, -{78,6,29}, -{78,6,30}, -{78,6,31}, -{78,6,32}, -{78,6,33}, -{78,6,34}, -{78,6,35}, -{78,6,36}, -{78,6,37}, -{78,6,38}, -{78,6,39}, -{78,6,40}, -{78,6,41}, -{78,6,42}, -{78,6,43}, -{78,6,44}, -{78,6,45}, -{78,6,46}, -{78,6,47}, -{78,6,48}, -{78,6,49}, -{78,6,50}, -{78,6,51}, -{78,6,52}, -{78,6,53}, -{78,6,54}, -{78,6,55}, -{78,6,56}, -{78,6,57}, -{78,6,58}, -{78,6,59}, -{78,6,60}, -{78,6,61}, -{78,6,62}, -{78,6,63}, -{78,6,64}, -{78,6,65}, -{78,6,66}, -{78,6,67}, -{78,6,68}, -{78,6,69}, -{78,6,70}, -{78,6,71}, -{78,6,72}, -{78,6,73}, -{78,6,74}, -{78,6,75}, -{78,6,76}, -{78,6,77}, -{78,6,78}, -{78,6,79}, -{78,6,80}, -{78,7,-33}, -{78,7,-32}, -{78,7,-31}, -{78,7,-30}, -{78,7,-29}, -{78,7,-28}, -{78,7,-27}, -{78,7,-26}, -{78,7,-25}, -{78,7,-24}, -{78,7,-23}, -{78,7,-22}, -{78,7,-21}, -{78,7,-20}, -{78,7,-19}, -{78,7,-18}, -{78,7,-17}, -{78,7,-16}, -{78,7,-15}, -{78,7,-14}, -{78,7,-13}, -{78,7,-12}, -{78,7,-11}, -{78,7,-10}, -{78,7,-9}, -{78,7,-8}, -{78,7,-7}, -{78,7,-6}, -{78,7,-5}, -{78,7,-4}, -{78,7,-3}, -{78,7,-2}, -{78,7,-1}, -{78,7,0}, -{78,7,1}, -{78,7,2}, -{78,7,3}, -{78,7,4}, -{78,7,5}, -{78,7,6}, -{78,7,7}, -{78,7,8}, -{78,7,9}, -{78,7,10}, -{78,7,11}, -{78,7,12}, -{78,7,13}, -{78,7,14}, -{78,7,15}, -{78,7,16}, -{78,7,17}, -{78,7,18}, -{78,7,19}, -{78,7,20}, -{78,7,21}, -{78,7,22}, -{78,7,23}, -{78,7,24}, -{78,7,25}, -{78,7,26}, -{78,7,27}, -{78,7,28}, -{78,7,29}, -{78,7,30}, -{78,7,31}, -{78,7,32}, -{78,7,33}, -{78,7,34}, -{78,7,35}, -{78,7,36}, -{78,7,37}, -{78,7,38}, -{78,7,39}, -{78,7,40}, -{78,7,41}, -{78,7,42}, -{78,7,43}, -{78,7,44}, -{78,7,45}, -{78,7,46}, -{78,7,47}, -{78,7,48}, -{78,7,49}, -{78,7,50}, -{78,7,51}, -{78,7,52}, -{78,7,53}, -{78,7,54}, -{78,7,55}, -{78,7,56}, -{78,7,57}, -{78,7,58}, -{78,7,59}, -{78,7,60}, -{78,7,61}, -{78,7,62}, -{78,7,63}, -{78,7,64}, -{78,7,65}, -{78,7,66}, -{78,7,67}, -{78,7,68}, -{78,7,69}, -{78,7,70}, -{78,7,71}, -{78,7,72}, -{78,7,73}, -{78,7,74}, -{78,7,75}, -{78,7,76}, -{78,7,77}, -{78,7,78}, -{78,7,79}, -{78,7,80}, -{78,8,-33}, -{78,8,-32}, -{78,8,-31}, -{78,8,-30}, -{78,8,-29}, -{78,8,-28}, -{78,8,-27}, -{78,8,-26}, -{78,8,-25}, -{78,8,-24}, -{78,8,-23}, -{78,8,-22}, -{78,8,-21}, -{78,8,-20}, -{78,8,-19}, -{78,8,-18}, -{78,8,-17}, -{78,8,-16}, -{78,8,-15}, -{78,8,-14}, -{78,8,-13}, -{78,8,-12}, -{78,8,-11}, -{78,8,-10}, -{78,8,-9}, -{78,8,-8}, -{78,8,-7}, -{78,8,-6}, -{78,8,-5}, -{78,8,-4}, -{78,8,-3}, -{78,8,-2}, -{78,8,-1}, -{78,8,0}, -{78,8,1}, -{78,8,2}, -{78,8,3}, -{78,8,4}, -{78,8,5}, -{78,8,6}, -{78,8,7}, -{78,8,8}, -{78,8,9}, -{78,8,10}, -{78,8,11}, -{78,8,12}, -{78,8,13}, -{78,8,14}, -{78,8,15}, -{78,8,16}, -{78,8,17}, -{78,8,18}, -{78,8,19}, -{78,8,20}, -{78,8,21}, -{78,8,22}, -{78,8,23}, -{78,8,24}, -{78,8,25}, -{78,8,26}, -{78,8,27}, -{78,8,28}, -{78,8,29}, -{78,8,30}, -{78,8,31}, -{78,8,32}, -{78,8,33}, -{78,8,34}, -{78,8,35}, -{78,8,36}, -{78,8,37}, -{78,8,38}, -{78,8,39}, -{78,8,40}, -{78,8,41}, -{78,8,42}, -{78,8,43}, -{78,8,44}, -{78,8,45}, -{78,8,46}, -{78,8,47}, -{78,8,48}, -{78,8,49}, -{78,8,50}, -{78,8,51}, -{78,8,52}, -{78,8,53}, -{78,8,54}, -{78,8,55}, -{78,8,56}, -{78,8,57}, -{78,8,58}, -{78,8,59}, -{78,8,60}, -{78,8,61}, -{78,8,62}, -{78,8,63}, -{78,8,64}, -{78,8,65}, -{78,8,66}, -{78,8,67}, -{78,8,68}, -{78,8,69}, -{78,8,70}, -{78,8,71}, -{78,8,72}, -{78,8,73}, -{78,8,74}, -{78,8,75}, -{78,8,76}, -{78,8,77}, -{78,8,78}, -{78,8,79}, -{78,8,80}, -{78,9,-33}, -{78,9,-32}, -{78,9,-31}, -{78,9,-30}, -{78,9,-29}, -{78,9,-28}, -{78,9,-27}, -{78,9,-26}, -{78,9,-25}, -{78,9,-24}, -{78,9,-23}, -{78,9,-22}, -{78,9,-21}, -{78,9,-20}, -{78,9,-19}, -{78,9,-18}, -{78,9,-17}, -{78,9,-16}, -{78,9,-15}, -{78,9,-14}, -{78,9,-13}, -{78,9,-12}, -{78,9,-11}, -{78,9,-10}, -{78,9,-9}, -{78,9,-8}, -{78,9,-7}, -{78,9,-6}, -{78,9,-5}, -{78,9,-4}, -{78,9,-3}, -{78,9,-2}, -{78,9,-1}, -{78,9,0}, -{78,9,1}, -{78,9,2}, -{78,9,3}, -{78,9,4}, -{78,9,5}, -{78,9,6}, -{78,9,7}, -{78,9,8}, -{78,9,9}, -{78,9,10}, -{78,9,11}, -{78,9,12}, -{78,9,13}, -{78,9,14}, -{78,9,15}, -{78,9,16}, -{78,9,17}, -{78,9,18}, -{78,9,19}, -{78,9,20}, -{78,9,21}, -{78,9,22}, -{78,9,23}, -{78,9,24}, -{78,9,25}, -{78,9,26}, -{78,9,27}, -{78,9,28}, -{78,9,29}, -{78,9,30}, -{78,9,31}, -{78,9,32}, -{78,9,33}, -{78,9,34}, -{78,9,35}, -{78,9,36}, -{78,9,37}, -{78,9,38}, -{78,9,39}, -{78,9,40}, -{78,9,41}, -{78,9,42}, -{78,9,43}, -{78,9,44}, -{78,9,45}, -{78,9,46}, -{78,9,47}, -{78,9,48}, -{78,9,49}, -{78,9,50}, -{78,9,51}, -{78,9,52}, -{78,9,53}, -{78,9,54}, -{78,9,55}, -{78,9,56}, -{78,9,57}, -{78,9,58}, -{78,9,59}, -{78,9,60}, -{78,9,61}, -{78,9,62}, -{78,9,63}, -{78,9,64}, -{78,9,65}, -{78,9,66}, -{78,9,67}, -{78,9,68}, -{78,9,69}, -{78,9,70}, -{78,9,71}, -{78,9,72}, -{78,9,73}, -{78,9,74}, -{78,9,75}, -{78,9,76}, -{78,9,77}, -{78,9,78}, -{78,9,79}, -{78,9,80}, -{78,10,-33}, -{78,10,-32}, -{78,10,-31}, -{78,10,-30}, -{78,10,-29}, -{78,10,-28}, -{78,10,-27}, -{78,10,-26}, -{78,10,-25}, -{78,10,-24}, -{78,10,-23}, -{78,10,-22}, -{78,10,-21}, -{78,10,-20}, -{78,10,-19}, -{78,10,-18}, -{78,10,-17}, -{78,10,-16}, -{78,10,-15}, -{78,10,-14}, -{78,10,-13}, -{78,10,-12}, -{78,10,-11}, -{78,10,-10}, -{78,10,-9}, -{78,10,-8}, -{78,10,-7}, -{78,10,-6}, -{78,10,-5}, -{78,10,-4}, -{78,10,-3}, -{78,10,-2}, -{78,10,-1}, -{78,10,0}, -{78,10,1}, -{78,10,2}, -{78,10,3}, -{78,10,4}, -{78,10,5}, -{78,10,6}, -{78,10,7}, -{78,10,8}, -{78,10,9}, -{78,10,10}, -{78,10,11}, -{78,10,12}, -{78,10,13}, -{78,10,14}, -{78,10,15}, -{78,10,16}, -{78,10,17}, -{78,10,18}, -{78,10,19}, -{78,10,20}, -{78,10,21}, -{78,10,22}, -{78,10,23}, -{78,10,24}, -{78,10,25}, -{78,10,26}, -{78,10,27}, -{78,10,28}, -{78,10,29}, -{78,10,30}, -{78,10,31}, -{78,10,32}, -{78,10,33}, -{78,10,34}, -{78,10,35}, -{78,10,36}, -{78,10,37}, -{78,10,38}, -{78,10,39}, -{78,10,40}, -{78,10,41}, -{78,10,42}, -{78,10,43}, -{78,10,44}, -{78,10,45}, -{78,10,46}, -{78,10,47}, -{78,10,48}, -{78,10,49}, -{78,10,50}, -{78,10,51}, -{78,10,52}, -{78,10,53}, -{78,10,54}, -{78,10,55}, -{78,10,56}, -{78,10,57}, -{78,10,58}, -{78,10,59}, -{78,10,60}, -{78,10,61}, -{78,10,62}, -{78,10,63}, -{78,10,64}, -{78,10,65}, -{78,10,66}, -{78,10,67}, -{78,10,68}, -{78,10,69}, -{78,10,70}, -{78,10,71}, -{78,10,72}, -{78,10,73}, -{78,10,74}, -{78,10,75}, -{78,10,76}, -{78,10,77}, -{78,10,78}, -{78,10,79}, -{78,10,80}, -{78,11,-33}, -{78,11,-32}, -{78,11,-31}, -{78,11,-30}, -{78,11,-29}, -{78,11,-28}, -{78,11,-27}, -{78,11,-26}, -{78,11,-25}, -{78,11,-24}, -{78,11,-23}, -{78,11,-22}, -{78,11,-21}, -{78,11,-20}, -{78,11,-19}, -{78,11,-18}, -{78,11,-17}, -{78,11,-16}, -{78,11,-15}, -{78,11,-14}, -{78,11,-13}, -{78,11,-12}, -{78,11,-11}, -{78,11,-10}, -{78,11,-9}, -{78,11,-8}, -{78,11,-7}, -{78,11,-6}, -{78,11,-5}, -{78,11,-4}, -{78,11,-3}, -{78,11,-2}, -{78,11,-1}, -{78,11,0}, -{78,11,1}, -{78,11,2}, -{78,11,3}, -{78,11,4}, -{78,11,5}, -{78,11,6}, -{78,11,7}, -{78,11,8}, -{78,11,9}, -{78,11,10}, -{78,11,11}, -{78,11,12}, -{78,11,13}, -{78,11,14}, -{78,11,15}, -{78,11,16}, -{78,11,17}, -{78,11,18}, -{78,11,19}, -{78,11,20}, -{78,11,21}, -{78,11,22}, -{78,11,23}, -{78,11,24}, -{78,11,25}, -{78,11,26}, -{78,11,27}, -{78,11,28}, -{78,11,29}, -{78,11,30}, -{78,11,31}, -{78,11,32}, -{78,11,33}, -{78,11,34}, -{78,11,35}, -{78,11,36}, -{78,11,37}, -{78,11,38}, -{78,11,39}, -{78,11,40}, -{78,11,41}, -{78,11,42}, -{78,11,43}, -{78,11,44}, -{78,11,45}, -{78,11,46}, -{78,11,47}, -{78,11,48}, -{78,11,49}, -{78,11,50}, -{78,11,51}, -{78,11,52}, -{78,11,53}, -{78,11,54}, -{78,11,55}, -{78,11,56}, -{78,11,57}, -{78,11,58}, -{78,11,59}, -{78,11,60}, -{78,11,61}, -{78,11,62}, -{78,11,63}, -{78,11,64}, -{78,11,65}, -{78,11,66}, -{78,11,67}, -{78,11,68}, -{78,11,69}, -{78,11,70}, -{78,11,71}, -{78,11,72}, -{78,11,73}, -{78,11,74}, -{78,11,75}, -{78,11,76}, -{78,11,77}, -{78,11,78}, -{78,11,79}, -{78,11,80}, -{78,12,-33}, -{78,12,-32}, -{78,12,-31}, -{78,12,-30}, -{78,12,-29}, -{78,12,-28}, -{78,12,-27}, -{78,12,-26}, -{78,12,-25}, -{78,12,-24}, -{78,12,-23}, -{78,12,-22}, -{78,12,-21}, -{78,12,-20}, -{78,12,-19}, -{78,12,-18}, -{78,12,-17}, -{78,12,-16}, -{78,12,-15}, -{78,12,-14}, -{78,12,-13}, -{78,12,-12}, -{78,12,-11}, -{78,12,-10}, -{78,12,-9}, -{78,12,-8}, -{78,12,-7}, -{78,12,-6}, -{78,12,-5}, -{78,12,-4}, -{78,12,-3}, -{78,12,-2}, -{78,12,-1}, -{78,12,0}, -{78,12,1}, -{78,12,2}, -{78,12,3}, -{78,12,4}, -{78,12,5}, -{78,12,6}, -{78,12,7}, -{78,12,8}, -{78,12,9}, -{78,12,10}, -{78,12,11}, -{78,12,12}, -{78,12,13}, -{78,12,14}, -{78,12,15}, -{78,12,16}, -{78,12,17}, -{78,12,18}, -{78,12,19}, -{78,12,20}, -{78,12,21}, -{78,12,22}, -{78,12,23}, -{78,12,24}, -{78,12,25}, -{78,12,26}, -{78,12,27}, -{78,12,28}, -{78,12,29}, -{78,12,30}, -{78,12,31}, -{78,12,32}, -{78,12,33}, -{78,12,34}, -{78,12,35}, -{78,12,36}, -{78,12,37}, -{78,12,38}, -{78,12,39}, -{78,12,40}, -{78,12,41}, -{78,12,42}, -{78,12,43}, -{78,12,44}, -{78,12,45}, -{78,12,46}, -{78,12,47}, -{78,12,48}, -{78,12,49}, -{78,12,50}, -{78,12,51}, -{78,12,52}, -{78,12,53}, -{78,12,54}, -{78,12,55}, -{78,12,56}, -{78,12,57}, -{78,12,58}, -{78,12,59}, -{78,12,60}, -{78,12,61}, -{78,12,62}, -{78,12,63}, -{78,12,64}, -{78,12,65}, -{78,12,66}, -{78,12,67}, -{78,12,68}, -{78,12,69}, -{78,12,70}, -{78,12,71}, -{78,12,72}, -{78,12,73}, -{78,12,74}, -{78,12,75}, -{78,12,76}, -{78,12,77}, -{78,12,78}, -{78,12,79}, -{78,12,80}, -{78,13,-33}, -{78,13,-32}, -{78,13,-31}, -{78,13,-30}, -{78,13,-29}, -{78,13,-28}, -{78,13,-27}, -{78,13,-26}, -{78,13,-25}, -{78,13,-24}, -{78,13,-23}, -{78,13,-22}, -{78,13,-21}, -{78,13,-20}, -{78,13,-19}, -{78,13,-18}, -{78,13,-17}, -{78,13,-16}, -{78,13,-15}, -{78,13,-14}, -{78,13,-13}, -{78,13,-12}, -{78,13,-11}, -{78,13,-10}, -{78,13,-9}, -{78,13,-8}, -{78,13,-7}, -{78,13,-6}, -{78,13,-5}, -{78,13,-4}, -{78,13,-3}, -{78,13,-2}, -{78,13,-1}, -{78,13,0}, -{78,13,1}, -{78,13,2}, -{78,13,3}, -{78,13,4}, -{78,13,5}, -{78,13,6}, -{78,13,7}, -{78,13,8}, -{78,13,9}, -{78,13,10}, -{78,13,11}, -{78,13,12}, -{78,13,13}, -{78,13,14}, -{78,13,15}, -{78,13,16}, -{78,13,17}, -{78,13,18}, -{78,13,19}, -{78,13,20}, -{78,13,21}, -{78,13,22}, -{78,13,23}, -{78,13,24}, -{78,13,25}, -{78,13,26}, -{78,13,27}, -{78,13,28}, -{78,13,29}, -{78,13,30}, -{78,13,31}, -{78,13,32}, -{78,13,33}, -{78,13,34}, -{78,13,35}, -{78,13,36}, -{78,13,37}, -{78,13,38}, -{78,13,39}, -{78,13,40}, -{78,13,41}, -{78,13,42}, -{78,13,43}, -{78,13,44}, -{78,13,45}, -{78,13,46}, -{78,13,47}, -{78,13,48}, -{78,13,49}, -{78,13,50}, -{78,13,51}, -{78,13,52}, -{78,13,53}, -{78,13,54}, -{78,13,55}, -{78,13,56}, -{78,13,57}, -{78,13,58}, -{78,13,59}, -{78,13,60}, -{78,13,61}, -{78,13,62}, -{78,13,63}, -{78,13,64}, -{78,13,65}, -{78,13,66}, -{78,13,67}, -{78,13,68}, -{78,13,69}, -{78,13,70}, -{78,13,71}, -{78,13,72}, -{78,13,73}, -{78,13,74}, -{78,13,75}, -{78,13,76}, -{78,13,77}, -{78,13,78}, -{78,13,79}, -{78,13,80}, -{78,14,-33}, -{78,14,-32}, -{78,14,-31}, -{78,14,-30}, -{78,14,-29}, -{78,14,-28}, -{78,14,-27}, -{78,14,-26}, -{78,14,-25}, -{78,14,-24}, -{78,14,-23}, -{78,14,-22}, -{78,14,-21}, -{78,14,-20}, -{78,14,-19}, -{78,14,-18}, -{78,14,-17}, -{78,14,-16}, -{78,14,-15}, -{78,14,-14}, -{78,14,-13}, -{78,14,-12}, -{78,14,-11}, -{78,14,-10}, -{78,14,-9}, -{78,14,-8}, -{78,14,-7}, -{78,14,-6}, -{78,14,-5}, -{78,14,-4}, -{78,14,-3}, -{78,14,-2}, -{78,14,-1}, -{78,14,0}, -{78,14,1}, -{78,14,2}, -{78,14,3}, -{78,14,4}, -{78,14,5}, -{78,14,6}, -{78,14,7}, -{78,14,8}, -{78,14,9}, -{78,14,10}, -{78,14,11}, -{78,14,12}, -{78,14,13}, -{78,14,14}, -{78,14,15}, -{78,14,16}, -{78,14,17}, -{78,14,18}, -{78,14,19}, -{78,14,20}, -{78,14,21}, -{78,14,22}, -{78,14,23}, -{78,14,24}, -{78,14,25}, -{78,14,26}, -{78,14,27}, -{78,14,28}, -{78,14,29}, -{78,14,30}, -{78,14,31}, -{78,14,32}, -{78,14,33}, -{78,14,34}, -{78,14,35}, -{78,14,36}, -{78,14,37}, -{78,14,38}, -{78,14,39}, -{78,14,40}, -{78,14,41}, -{78,14,42}, -{78,14,43}, -{78,14,44}, -{78,14,45}, -{78,14,46}, -{78,14,47}, -{78,14,48}, -{78,14,49}, -{78,14,50}, -{78,14,51}, -{78,14,52}, -{78,14,53}, -{78,14,54}, -{78,14,55}, -{78,14,56}, -{78,14,57}, -{78,14,58}, -{78,14,59}, -{78,14,60}, -{78,14,61}, -{78,14,62}, -{78,14,63}, -{78,14,64}, -{78,14,65}, -{78,14,66}, -{78,14,67}, -{78,14,68}, -{78,14,69}, -{78,14,70}, -{78,14,71}, -{78,14,72}, -{78,14,73}, -{78,14,74}, -{78,14,75}, -{78,14,76}, -{78,14,77}, -{78,14,78}, -{78,14,79}, -{78,14,80}, -{78,15,-33}, -{78,15,-32}, -{78,15,-31}, -{78,15,-30}, -{78,15,-29}, -{78,15,-28}, -{78,15,-27}, -{78,15,-26}, -{78,15,-25}, -{78,15,-24}, -{78,15,-23}, -{78,15,-22}, -{78,15,-21}, -{78,15,-20}, -{78,15,-19}, -{78,15,-18}, -{78,15,-17}, -{78,15,-16}, -{78,15,-15}, -{78,15,-14}, -{78,15,-13}, -{78,15,-12}, -{78,15,-11}, -{78,15,-10}, -{78,15,-9}, -{78,15,-8}, -{78,15,-7}, -{78,15,-6}, -{78,15,-5}, -{78,15,-4}, -{78,15,-3}, -{78,15,-2}, -{78,15,-1}, -{78,15,0}, -{78,15,1}, -{78,15,2}, -{78,15,3}, -{78,15,4}, -{78,15,5}, -{78,15,6}, -{78,15,7}, -{78,15,8}, -{78,15,9}, -{78,15,10}, -{78,15,11}, -{78,15,12}, -{78,15,13}, -{78,15,14}, -{78,15,15}, -{78,15,16}, -{78,15,17}, -{78,15,18}, -{78,15,19}, -{78,15,20}, -{78,15,21}, -{78,15,22}, -{78,15,23}, -{78,15,24}, -{78,15,25}, -{78,15,26}, -{78,15,27}, -{78,15,28}, -{78,15,29}, -{78,15,30}, -{78,15,31}, -{78,15,32}, -{78,15,33}, -{78,15,34}, -{78,15,35}, -{78,15,36}, -{78,15,37}, -{78,15,38}, -{78,15,39}, -{78,15,40}, -{78,15,41}, -{78,15,42}, -{78,15,43}, -{78,15,44}, -{78,15,45}, -{78,15,46}, -{78,15,47}, -{78,15,48}, -{78,15,49}, -{78,15,50}, -{78,15,51}, -{78,15,52}, -{78,15,53}, -{78,15,54}, -{78,15,55}, -{78,15,56}, -{78,15,57}, -{78,15,58}, -{78,15,59}, -{78,15,60}, -{78,15,61}, -{78,15,62}, -{78,15,63}, -{78,15,64}, -{78,15,65}, -{78,15,66}, -{78,15,67}, -{78,15,68}, -{78,15,69}, -{78,15,70}, -{78,15,71}, -{78,15,72}, -{78,15,73}, -{78,15,74}, -{78,15,75}, -{78,15,76}, -{78,15,77}, -{78,15,78}, -{78,15,79}, -{78,15,80}, -{78,15,81}, -{78,16,-33}, -{78,16,-32}, -{78,16,-31}, -{78,16,-30}, -{78,16,-29}, -{78,16,-28}, -{78,16,-27}, -{78,16,-26}, -{78,16,-25}, -{78,16,-24}, -{78,16,-23}, -{78,16,-22}, -{78,16,-21}, -{78,16,-20}, -{78,16,-19}, -{78,16,-18}, -{78,16,-17}, -{78,16,-16}, -{78,16,-15}, -{78,16,-14}, -{78,16,-13}, -{78,16,-12}, -{78,16,-11}, -{78,16,-10}, -{78,16,-9}, -{78,16,-8}, -{78,16,-7}, -{78,16,-6}, -{78,16,-5}, -{78,16,-4}, -{78,16,-3}, -{78,16,-2}, -{78,16,-1}, -{78,16,0}, -{78,16,1}, -{78,16,2}, -{78,16,3}, -{78,16,4}, -{78,16,5}, -{78,16,6}, -{78,16,7}, -{78,16,8}, -{78,16,9}, -{78,16,10}, -{78,16,11}, -{78,16,12}, -{78,16,13}, -{78,16,14}, -{78,16,15}, -{78,16,16}, -{78,16,17}, -{78,16,18}, -{78,16,19}, -{78,16,20}, -{78,16,21}, -{78,16,22}, -{78,16,23}, -{78,16,24}, -{78,16,25}, -{78,16,26}, -{78,16,27}, -{78,16,28}, -{78,16,29}, -{78,16,30}, -{78,16,31}, -{78,16,32}, -{78,16,33}, -{78,16,34}, -{78,16,35}, -{78,16,36}, -{78,16,37}, -{78,16,38}, -{78,16,39}, -{78,16,40}, -{78,16,41}, -{78,16,42}, -{78,16,43}, -{78,16,44}, -{78,16,45}, -{78,16,46}, -{78,16,47}, -{78,16,48}, -{78,16,49}, -{78,16,50}, -{78,16,51}, -{78,16,52}, -{78,16,53}, -{78,16,54}, -{78,16,55}, -{78,16,56}, -{78,16,57}, -{78,16,58}, -{78,16,59}, -{78,16,60}, -{78,16,61}, -{78,16,62}, -{78,16,63}, -{78,16,64}, -{78,16,65}, -{78,16,66}, -{78,16,67}, -{78,16,68}, -{78,16,69}, -{78,16,70}, -{78,16,71}, -{78,16,72}, -{78,16,73}, -{78,16,74}, -{78,16,75}, -{78,16,76}, -{78,16,77}, -{78,16,78}, -{78,16,79}, -{78,16,80}, -{78,16,81}, -{78,17,-33}, -{78,17,-32}, -{78,17,-31}, -{78,17,-30}, -{78,17,-29}, -{78,17,-28}, -{78,17,-27}, -{78,17,-26}, -{78,17,-25}, -{78,17,-24}, -{78,17,-23}, -{78,17,-22}, -{78,17,-21}, -{78,17,-20}, -{78,17,-19}, -{78,17,-18}, -{78,17,-17}, -{78,17,-16}, -{78,17,-15}, -{78,17,-14}, -{78,17,-13}, -{78,17,-12}, -{78,17,-11}, -{78,17,-10}, -{78,17,-9}, -{78,17,-8}, -{78,17,-7}, -{78,17,-6}, -{78,17,-5}, -{78,17,-4}, -{78,17,-3}, -{78,17,-2}, -{78,17,-1}, -{78,17,0}, -{78,17,1}, -{78,17,2}, -{78,17,3}, -{78,17,4}, -{78,17,5}, -{78,17,6}, -{78,17,7}, -{78,17,8}, -{78,17,9}, -{78,17,10}, -{78,17,11}, -{78,17,12}, -{78,17,13}, -{78,17,14}, -{78,17,15}, -{78,17,16}, -{78,17,17}, -{78,17,18}, -{78,17,19}, -{78,17,20}, -{78,17,21}, -{78,17,22}, -{78,17,23}, -{78,17,24}, -{78,17,25}, -{78,17,26}, -{78,17,27}, -{78,17,28}, -{78,17,29}, -{78,17,30}, -{78,17,31}, -{78,17,32}, -{78,17,33}, -{78,17,34}, -{78,17,35}, -{78,17,36}, -{78,17,37}, -{78,17,38}, -{78,17,39}, -{78,17,40}, -{78,17,41}, -{78,17,42}, -{78,17,43}, -{78,17,44}, -{78,17,45}, -{78,17,46}, -{78,17,47}, -{78,17,48}, -{78,17,49}, -{78,17,50}, -{78,17,51}, -{78,17,52}, -{78,17,53}, -{78,17,54}, -{78,17,55}, -{78,17,56}, -{78,17,57}, -{78,17,58}, -{78,17,59}, -{78,17,60}, -{78,17,61}, -{78,17,62}, -{78,17,63}, -{78,17,64}, -{78,17,65}, -{78,17,66}, -{78,17,67}, -{78,17,68}, -{78,17,69}, -{78,17,70}, -{78,17,71}, -{78,17,72}, -{78,17,73}, -{78,17,74}, -{78,17,75}, -{78,17,76}, -{78,17,77}, -{78,17,78}, -{78,17,79}, -{78,17,80}, -{78,17,81}, -{78,18,-33}, -{78,18,-32}, -{78,18,-31}, -{78,18,-30}, -{78,18,-29}, -{78,18,-28}, -{78,18,-27}, -{78,18,-26}, -{78,18,-25}, -{78,18,-24}, -{78,18,-23}, -{78,18,-22}, -{78,18,-21}, -{78,18,-20}, -{78,18,-19}, -{78,18,-18}, -{78,18,-17}, -{78,18,-16}, -{78,18,-15}, -{78,18,-14}, -{78,18,-13}, -{78,18,-12}, -{78,18,-11}, -{78,18,-10}, -{78,18,-9}, -{78,18,-8}, -{78,18,-7}, -{78,18,-6}, -{78,18,-5}, -{78,18,-4}, -{78,18,-3}, -{78,18,-2}, -{78,18,-1}, -{78,18,0}, -{78,18,1}, -{78,18,2}, -{78,18,3}, -{78,18,4}, -{78,18,5}, -{78,18,6}, -{78,18,7}, -{78,18,8}, -{78,18,9}, -{78,18,10}, -{78,18,11}, -{78,18,12}, -{78,18,13}, -{78,18,14}, -{78,18,15}, -{78,18,16}, -{78,18,17}, -{78,18,18}, -{78,18,19}, -{78,18,20}, -{78,18,21}, -{78,18,22}, -{78,18,23}, -{78,18,24}, -{78,18,25}, -{78,18,26}, -{78,18,27}, -{78,18,28}, -{78,18,29}, -{78,18,30}, -{78,18,31}, -{78,18,32}, -{78,18,33}, -{78,18,34}, -{78,18,35}, -{78,18,36}, -{78,18,37}, -{78,18,38}, -{78,18,39}, -{78,18,40}, -{78,18,41}, -{78,18,42}, -{78,18,43}, -{78,18,44}, -{78,18,45}, -{78,18,46}, -{78,18,47}, -{78,18,48}, -{78,18,49}, -{78,18,50}, -{78,18,51}, -{78,18,52}, -{78,18,53}, -{78,18,54}, -{78,18,55}, -{78,18,56}, -{78,18,57}, -{78,18,58}, -{78,18,59}, -{78,18,60}, -{78,18,61}, -{78,18,62}, -{78,18,63}, -{78,18,64}, -{78,18,65}, -{78,18,66}, -{78,18,67}, -{78,18,68}, -{78,18,69}, -{78,18,70}, -{78,18,71}, -{78,18,72}, -{78,18,73}, -{78,19,-33}, -{78,19,-32}, -{78,19,-31}, -{78,19,-30}, -{78,19,-29}, -{78,19,-28}, -{78,19,-27}, -{78,19,-26}, -{78,19,-25}, -{78,19,-24}, -{78,19,-23}, -{78,19,-22}, -{78,19,-21}, -{78,19,-20}, -{78,19,-19}, -{78,19,-18}, -{78,19,-17}, -{78,19,-16}, -{78,19,-15}, -{78,19,-14}, -{78,19,-13}, -{78,19,-12}, -{78,19,-11}, -{78,19,-10}, -{78,19,-9}, -{78,19,-8}, -{78,19,-7}, -{78,19,-6}, -{78,19,-5}, -{78,19,-4}, -{78,19,-3}, -{78,19,-2}, -{78,19,-1}, -{78,19,0}, -{78,19,1}, -{78,19,2}, -{78,19,3}, -{78,19,4}, -{78,19,5}, -{78,19,6}, -{78,19,7}, -{78,19,8}, -{78,19,9}, -{78,19,10}, -{78,19,11}, -{78,19,12}, -{78,19,13}, -{78,19,14}, -{78,19,15}, -{78,19,16}, -{78,19,17}, -{78,19,18}, -{78,19,19}, -{78,19,20}, -{78,19,21}, -{78,19,22}, -{78,19,23}, -{78,19,24}, -{78,19,25}, -{78,19,26}, -{78,19,27}, -{78,19,28}, -{78,19,29}, -{78,19,30}, -{78,19,31}, -{78,19,32}, -{78,19,33}, -{78,19,34}, -{78,19,35}, -{78,19,36}, -{78,19,37}, -{78,19,38}, -{78,19,39}, -{78,19,40}, -{78,19,41}, -{78,19,42}, -{78,19,43}, -{78,19,44}, -{78,19,45}, -{78,19,46}, -{78,19,47}, -{78,19,48}, -{78,19,49}, -{78,19,50}, -{78,19,51}, -{78,19,52}, -{78,19,53}, -{78,19,54}, -{78,19,55}, -{78,19,56}, -{78,19,57}, -{78,19,58}, -{78,19,59}, -{78,19,60}, -{78,19,61}, -{78,19,62}, -{78,19,63}, -{78,19,64}, -{78,19,65}, -{78,19,66}, -{78,20,-33}, -{78,20,-32}, -{78,20,-31}, -{78,20,-30}, -{78,20,-29}, -{78,20,-28}, -{78,20,-27}, -{78,20,-26}, -{78,20,-25}, -{78,20,-24}, -{78,20,-23}, -{78,20,-22}, -{78,20,-21}, -{78,20,-20}, -{78,20,-19}, -{78,20,-18}, -{78,20,-17}, -{78,20,-16}, -{78,20,-15}, -{78,20,-14}, -{78,20,-13}, -{78,20,-12}, -{78,20,-11}, -{78,20,-10}, -{78,20,-9}, -{78,20,-8}, -{78,20,-7}, -{78,20,-6}, -{78,20,-5}, -{78,20,-4}, -{78,20,-3}, -{78,20,-2}, -{78,20,-1}, -{78,20,0}, -{78,20,1}, -{78,20,2}, -{78,20,3}, -{78,20,4}, -{78,20,5}, -{78,20,6}, -{78,20,7}, -{78,20,8}, -{78,20,9}, -{78,20,10}, -{78,20,11}, -{78,20,12}, -{78,20,13}, -{78,20,14}, -{78,20,15}, -{78,20,16}, -{78,20,17}, -{78,20,18}, -{78,20,19}, -{78,20,20}, -{78,20,21}, -{78,20,22}, -{78,20,23}, -{78,20,24}, -{78,20,25}, -{78,20,26}, -{78,20,27}, -{78,20,28}, -{78,20,29}, -{78,20,30}, -{78,20,31}, -{78,20,32}, -{78,20,33}, -{78,20,34}, -{78,20,35}, -{78,20,36}, -{78,20,37}, -{78,20,38}, -{78,20,39}, -{78,20,40}, -{78,20,41}, -{78,20,42}, -{78,20,43}, -{78,20,44}, -{78,20,45}, -{78,20,46}, -{78,20,47}, -{78,20,48}, -{78,20,49}, -{78,20,50}, -{78,20,51}, -{78,20,52}, -{78,20,53}, -{78,20,54}, -{78,20,55}, -{78,20,56}, -{78,20,57}, -{78,20,58}, -{78,20,59}, -{78,21,-33}, -{78,21,-32}, -{78,21,-31}, -{78,21,-30}, -{78,21,-29}, -{78,21,-28}, -{78,21,-27}, -{78,21,-26}, -{78,21,-25}, -{78,21,-24}, -{78,21,-23}, -{78,21,-22}, -{78,21,-21}, -{78,21,-20}, -{78,21,-19}, -{78,21,-18}, -{78,21,-17}, -{78,21,-16}, -{78,21,-15}, -{78,21,-14}, -{78,21,-13}, -{78,21,-12}, -{78,21,-11}, -{78,21,-10}, -{78,21,-9}, -{78,21,-8}, -{78,21,-7}, -{78,21,-6}, -{78,21,-5}, -{78,21,-4}, -{78,21,-3}, -{78,21,-2}, -{78,21,-1}, -{78,21,0}, -{78,21,1}, -{78,21,2}, -{78,21,3}, -{78,21,4}, -{78,21,5}, -{78,21,6}, -{78,21,7}, -{78,21,8}, -{78,21,9}, -{78,21,10}, -{78,21,11}, -{78,21,12}, -{78,21,13}, -{78,21,14}, -{78,21,15}, -{78,21,16}, -{78,21,17}, -{78,21,18}, -{78,21,19}, -{78,21,20}, -{78,21,21}, -{78,21,22}, -{78,21,23}, -{78,21,24}, -{78,21,25}, -{78,21,26}, -{78,21,27}, -{78,21,28}, -{78,21,29}, -{78,21,30}, -{78,21,31}, -{78,21,32}, -{78,21,33}, -{78,21,34}, -{78,21,35}, -{78,21,36}, -{78,21,37}, -{78,21,38}, -{78,21,39}, -{78,21,40}, -{78,21,41}, -{78,21,42}, -{78,21,43}, -{78,21,44}, -{78,21,45}, -{78,21,46}, -{78,21,47}, -{78,21,48}, -{78,21,49}, -{78,21,50}, -{78,21,51}, -{78,21,52}, -{78,21,53}, -{78,22,-33}, -{78,22,-32}, -{78,22,-31}, -{78,22,-30}, -{78,22,-29}, -{78,22,-28}, -{78,22,-27}, -{78,22,-26}, -{78,22,-25}, -{78,22,-24}, -{78,22,-23}, -{78,22,-22}, -{78,22,-21}, -{78,22,-20}, -{78,22,-19}, -{78,22,-18}, -{78,22,-17}, -{78,22,-16}, -{78,22,-15}, -{78,22,-14}, -{78,22,-13}, -{78,22,-12}, -{78,22,-11}, -{78,22,-10}, -{78,22,-9}, -{78,22,-8}, -{78,22,-7}, -{78,22,-6}, -{78,22,-5}, -{78,22,-4}, -{78,22,-3}, -{78,22,-2}, -{78,22,-1}, -{78,22,0}, -{78,22,1}, -{78,22,2}, -{78,22,3}, -{78,22,4}, -{78,22,5}, -{78,22,6}, -{78,22,7}, -{78,22,8}, -{78,22,9}, -{78,22,10}, -{78,22,11}, -{78,22,12}, -{78,22,13}, -{78,22,14}, -{78,22,15}, -{78,22,16}, -{78,22,17}, -{78,22,18}, -{78,22,19}, -{78,22,20}, -{78,22,21}, -{78,22,22}, -{78,22,23}, -{78,22,24}, -{78,22,25}, -{78,22,26}, -{78,22,27}, -{78,22,28}, -{78,22,29}, -{78,22,30}, -{78,22,31}, -{78,22,32}, -{78,22,33}, -{78,22,34}, -{78,22,35}, -{78,22,36}, -{78,22,37}, -{78,22,38}, -{78,22,39}, -{78,22,40}, -{78,22,41}, -{78,22,42}, -{78,22,43}, -{78,22,44}, -{78,22,45}, -{78,22,46}, -{78,22,47}, -{78,22,48}, -{78,23,-33}, -{78,23,-32}, -{78,23,-31}, -{78,23,-30}, -{78,23,-29}, -{78,23,-28}, -{78,23,-27}, -{78,23,-26}, -{78,23,-25}, -{78,23,-24}, -{78,23,-23}, -{78,23,-22}, -{78,23,-21}, -{78,23,-20}, -{78,23,-19}, -{78,23,-18}, -{78,23,-17}, -{78,23,-16}, -{78,23,-15}, -{78,23,-14}, -{78,23,-13}, -{78,23,-12}, -{78,23,-11}, -{78,23,-10}, -{78,23,-9}, -{78,23,-8}, -{78,23,-7}, -{78,23,-6}, -{78,23,-5}, -{78,23,-4}, -{78,23,-3}, -{78,23,-2}, -{78,23,-1}, -{78,23,0}, -{78,23,1}, -{78,23,2}, -{78,23,3}, -{78,23,4}, -{78,23,5}, -{78,23,6}, -{78,23,7}, -{78,23,8}, -{78,23,9}, -{78,23,10}, -{78,23,11}, -{78,23,12}, -{78,23,13}, -{78,23,14}, -{78,23,15}, -{78,23,16}, -{78,23,17}, -{78,23,18}, -{78,23,19}, -{78,23,20}, -{78,23,21}, -{78,23,22}, -{78,23,23}, -{78,23,24}, -{78,23,25}, -{78,23,26}, -{78,23,27}, -{78,23,28}, -{78,23,29}, -{78,23,30}, -{78,23,31}, -{78,23,32}, -{78,23,33}, -{78,23,34}, -{78,23,35}, -{78,23,36}, -{78,23,37}, -{78,23,38}, -{78,23,39}, -{78,23,40}, -{78,23,41}, -{78,23,42}, -{78,23,43}, -{78,24,-33}, -{78,24,-32}, -{78,24,-31}, -{78,24,-30}, -{78,24,-29}, -{78,24,-28}, -{78,24,-27}, -{78,24,-26}, -{78,24,-25}, -{78,24,-24}, -{78,24,-23}, -{78,24,-22}, -{78,24,-21}, -{78,24,-20}, -{78,24,-19}, -{78,24,-18}, -{78,24,-17}, -{78,24,-16}, -{78,24,-15}, -{78,24,-14}, -{78,24,-13}, -{78,24,-12}, -{78,24,-11}, -{78,24,-10}, -{78,24,-9}, -{78,24,-8}, -{78,24,-7}, -{78,24,-6}, -{78,24,-5}, -{78,24,-4}, -{78,24,-3}, -{78,24,-2}, -{78,24,-1}, -{78,24,0}, -{78,24,1}, -{78,24,2}, -{78,24,3}, -{78,24,4}, -{78,24,5}, -{78,24,6}, -{78,24,7}, -{78,24,8}, -{78,24,9}, -{78,24,10}, -{78,24,11}, -{78,24,12}, -{78,24,13}, -{78,24,14}, -{78,24,15}, -{78,24,16}, -{78,24,17}, -{78,24,18}, -{78,24,19}, -{78,24,20}, -{78,24,21}, -{78,24,22}, -{78,24,23}, -{78,24,24}, -{78,24,25}, -{78,24,26}, -{78,24,27}, -{78,24,28}, -{78,24,29}, -{78,24,30}, -{78,24,31}, -{78,24,32}, -{78,24,33}, -{78,24,34}, -{78,24,35}, -{78,24,36}, -{78,24,37}, -{78,24,38}, -{78,25,-33}, -{78,25,-32}, -{78,25,-31}, -{78,25,-30}, -{78,25,-29}, -{78,25,-28}, -{78,25,-27}, -{78,25,-26}, -{78,25,-25}, -{78,25,-24}, -{78,25,-23}, -{78,25,-22}, -{78,25,-21}, -{78,25,-20}, -{78,25,-19}, -{78,25,-18}, -{78,25,-17}, -{78,25,-16}, -{78,25,-15}, -{78,25,-14}, -{78,25,-13}, -{78,25,-12}, -{78,25,-11}, -{78,25,-10}, -{78,25,-9}, -{78,25,-8}, -{78,25,-7}, -{78,25,-6}, -{78,25,-5}, -{78,25,-4}, -{78,25,-3}, -{78,25,-2}, -{78,25,-1}, -{78,25,0}, -{78,25,1}, -{78,25,2}, -{78,25,3}, -{78,25,4}, -{78,25,5}, -{78,25,6}, -{78,25,7}, -{78,25,8}, -{78,25,9}, -{78,25,10}, -{78,25,11}, -{78,25,12}, -{78,25,13}, -{78,25,14}, -{78,25,15}, -{78,25,16}, -{78,25,17}, -{78,25,18}, -{78,25,19}, -{78,25,20}, -{78,25,21}, -{78,25,22}, -{78,25,23}, -{78,25,24}, -{78,25,25}, -{78,25,26}, -{78,25,27}, -{78,25,28}, -{78,25,29}, -{78,25,30}, -{78,25,31}, -{78,25,32}, -{78,25,33}, -{78,25,34}, -{78,26,-33}, -{78,26,-32}, -{78,26,-31}, -{78,26,-30}, -{78,26,-29}, -{78,26,-28}, -{78,26,-27}, -{78,26,-26}, -{78,26,-25}, -{78,26,-24}, -{78,26,-23}, -{78,26,-22}, -{78,26,-21}, -{78,26,-20}, -{78,26,-19}, -{78,26,-18}, -{78,26,-17}, -{78,26,-16}, -{78,26,-15}, -{78,26,-14}, -{78,26,-13}, -{78,26,-12}, -{78,26,-11}, -{78,26,-10}, -{78,26,-9}, -{78,26,-8}, -{78,26,-7}, -{78,26,-6}, -{78,26,-5}, -{78,26,-4}, -{78,26,-3}, -{78,26,-2}, -{78,26,-1}, -{78,26,0}, -{78,26,1}, -{78,26,2}, -{78,26,3}, -{78,26,4}, -{78,26,5}, -{78,26,6}, -{78,26,7}, -{78,26,8}, -{78,26,9}, -{78,26,10}, -{78,26,11}, -{78,26,12}, -{78,26,13}, -{78,26,14}, -{78,26,15}, -{78,26,16}, -{78,26,17}, -{78,26,18}, -{78,26,19}, -{78,26,20}, -{78,26,21}, -{78,26,22}, -{78,26,23}, -{78,26,24}, -{78,26,25}, -{78,26,26}, -{78,26,27}, -{78,26,28}, -{78,26,29}, -{78,26,30}, -{78,27,-33}, -{78,27,-32}, -{78,27,-31}, -{78,27,-30}, -{78,27,-29}, -{78,27,-28}, -{78,27,-27}, -{78,27,-26}, -{78,27,-25}, -{78,27,-24}, -{78,27,-23}, -{78,27,-22}, -{78,27,-21}, -{78,27,-20}, -{78,27,-19}, -{78,27,-18}, -{78,27,-17}, -{78,27,-16}, -{78,27,-15}, -{78,27,-14}, -{78,27,-13}, -{78,27,-12}, -{78,27,-11}, -{78,27,-10}, -{78,27,-9}, -{78,27,-8}, -{78,27,-7}, -{78,27,-6}, -{78,27,-5}, -{78,27,-4}, -{78,27,-3}, -{78,27,-2}, -{78,27,-1}, -{78,27,0}, -{78,27,1}, -{78,27,2}, -{78,27,3}, -{78,27,4}, -{78,27,5}, -{78,27,6}, -{78,27,7}, -{78,27,8}, -{78,27,9}, -{78,27,10}, -{78,27,11}, -{78,27,12}, -{78,27,13}, -{78,27,14}, -{78,27,15}, -{78,27,16}, -{78,27,17}, -{78,27,18}, -{78,27,19}, -{78,27,20}, -{78,27,21}, -{78,27,22}, -{78,27,23}, -{78,27,24}, -{78,27,25}, -{78,27,26}, -{78,28,-33}, -{78,28,-32}, -{78,28,-31}, -{78,28,-30}, -{78,28,-29}, -{78,28,-28}, -{78,28,-27}, -{78,28,-26}, -{78,28,-25}, -{78,28,-24}, -{78,28,-23}, -{78,28,-22}, -{78,28,-21}, -{78,28,-20}, -{78,28,-19}, -{78,28,-18}, -{78,28,-17}, -{78,28,-16}, -{78,28,-15}, -{78,28,-14}, -{78,28,-13}, -{78,28,-12}, -{78,28,-11}, -{78,28,-10}, -{78,28,-9}, -{78,28,-8}, -{78,28,-7}, -{78,28,-6}, -{78,28,-5}, -{78,28,-4}, -{78,28,-3}, -{78,28,-2}, -{78,28,-1}, -{78,28,0}, -{78,28,1}, -{78,28,2}, -{78,28,3}, -{78,28,4}, -{78,28,5}, -{78,28,6}, -{78,28,7}, -{78,28,8}, -{78,28,9}, -{78,28,10}, -{78,28,11}, -{78,28,12}, -{78,28,13}, -{78,28,14}, -{78,28,15}, -{78,28,16}, -{78,28,17}, -{78,28,18}, -{78,28,19}, -{78,28,20}, -{78,28,21}, -{78,28,22}, -{78,28,23}, -{78,29,-33}, -{78,29,-32}, -{78,29,-31}, -{78,29,-30}, -{78,29,-29}, -{78,29,-28}, -{78,29,-27}, -{78,29,-26}, -{78,29,-25}, -{78,29,-24}, -{78,29,-23}, -{78,29,-22}, -{78,29,-21}, -{78,29,-20}, -{78,29,-19}, -{78,29,-18}, -{78,29,-17}, -{78,29,-16}, -{78,29,-15}, -{78,29,-14}, -{78,29,-13}, -{78,29,-12}, -{78,29,-11}, -{78,29,-10}, -{78,29,-9}, -{78,29,-8}, -{78,29,-7}, -{78,29,-6}, -{78,29,-5}, -{78,29,-4}, -{78,29,-3}, -{78,29,-2}, -{78,29,-1}, -{78,29,0}, -{78,29,1}, -{78,29,2}, -{78,29,3}, -{78,29,4}, -{78,29,5}, -{78,29,6}, -{78,29,7}, -{78,29,8}, -{78,29,9}, -{78,29,10}, -{78,29,11}, -{78,29,12}, -{78,29,13}, -{78,29,14}, -{78,29,15}, -{78,29,16}, -{78,29,17}, -{78,29,18}, -{78,29,19}, -{78,30,-33}, -{78,30,-32}, -{78,30,-31}, -{78,30,-30}, -{78,30,-29}, -{78,30,-28}, -{78,30,-27}, -{78,30,-26}, -{78,30,-25}, -{78,30,-24}, -{78,30,-23}, -{78,30,-22}, -{78,30,-21}, -{78,30,-20}, -{78,30,-19}, -{78,30,-18}, -{78,30,-17}, -{78,30,-16}, -{78,30,-15}, -{78,30,-14}, -{78,30,-13}, -{78,30,-12}, -{78,30,-11}, -{78,30,-10}, -{78,30,-9}, -{78,30,-8}, -{78,30,-7}, -{78,30,-6}, -{78,30,-5}, -{78,30,-4}, -{78,30,-3}, -{78,30,-2}, -{78,30,-1}, -{78,30,0}, -{78,30,1}, -{78,30,2}, -{78,30,3}, -{78,30,4}, -{78,30,5}, -{78,30,6}, -{78,30,7}, -{78,30,8}, -{78,30,9}, -{78,30,10}, -{78,30,11}, -{78,30,12}, -{78,30,13}, -{78,30,14}, -{78,30,15}, -{78,30,16}, -{78,31,-33}, -{78,31,-32}, -{78,31,-31}, -{78,31,-30}, -{78,31,-29}, -{78,31,-28}, -{78,31,-27}, -{78,31,-26}, -{78,31,-25}, -{78,31,-24}, -{78,31,-23}, -{78,31,-22}, -{78,31,-21}, -{78,31,-20}, -{78,31,-19}, -{78,31,-18}, -{78,31,-17}, -{78,31,-16}, -{78,31,-15}, -{78,31,-14}, -{78,31,-13}, -{78,31,-12}, -{78,31,-11}, -{78,31,-10}, -{78,31,-9}, -{78,31,-8}, -{78,31,-7}, -{78,31,-6}, -{78,31,-5}, -{78,31,-4}, -{78,31,-3}, -{78,31,-2}, -{78,31,-1}, -{78,31,0}, -{78,31,1}, -{78,31,2}, -{78,31,3}, -{78,31,4}, -{78,31,5}, -{78,31,6}, -{78,31,7}, -{78,31,8}, -{78,31,9}, -{78,31,10}, -{78,31,11}, -{78,31,12}, -{78,31,13}, -{78,32,-33}, -{78,32,-32}, -{78,32,-31}, -{78,32,-30}, -{78,32,-29}, -{78,32,-28}, -{78,32,-27}, -{78,32,-26}, -{78,32,-25}, -{78,32,-24}, -{78,32,-23}, -{78,32,-22}, -{78,32,-21}, -{78,32,-20}, -{78,32,-19}, -{78,32,-18}, -{78,32,-17}, -{78,32,-16}, -{78,32,-15}, -{78,32,-14}, -{78,32,-13}, -{78,32,-12}, -{78,32,-11}, -{78,32,-10}, -{78,32,-9}, -{78,32,-8}, -{78,32,-7}, -{78,32,-6}, -{78,32,-5}, -{78,32,-4}, -{78,32,-3}, -{78,32,-2}, -{78,32,-1}, -{78,32,0}, -{78,32,1}, -{78,32,2}, -{78,32,3}, -{78,32,4}, -{78,32,5}, -{78,32,6}, -{78,32,7}, -{78,32,8}, -{78,32,9}, -{78,32,10}, -{78,33,-33}, -{78,33,-32}, -{78,33,-31}, -{78,33,-30}, -{78,33,-29}, -{78,33,-28}, -{78,33,-27}, -{78,33,-26}, -{78,33,-25}, -{78,33,-24}, -{78,33,-23}, -{78,33,-22}, -{78,33,-21}, -{78,33,-20}, -{78,33,-19}, -{78,33,-18}, -{78,33,-17}, -{78,33,-16}, -{78,33,-15}, -{78,33,-14}, -{78,33,-13}, -{78,33,-12}, -{78,33,-11}, -{78,33,-10}, -{78,33,-9}, -{78,33,-8}, -{78,33,-7}, -{78,33,-6}, -{78,33,-5}, -{78,33,-4}, -{78,33,-3}, -{78,33,-2}, -{78,33,-1}, -{78,33,0}, -{78,33,1}, -{78,33,2}, -{78,33,3}, -{78,33,4}, -{78,33,5}, -{78,33,6}, -{78,33,7}, -{78,34,-33}, -{78,34,-32}, -{78,34,-31}, -{78,34,-30}, -{78,34,-29}, -{78,34,-28}, -{78,34,-27}, -{78,34,-26}, -{78,34,-25}, -{78,34,-24}, -{78,34,-23}, -{78,34,-22}, -{78,34,-21}, -{78,34,-20}, -{78,34,-19}, -{78,34,-18}, -{78,34,-17}, -{78,34,-16}, -{78,34,-15}, -{78,34,-14}, -{78,34,-13}, -{78,34,-12}, -{78,34,-11}, -{78,34,-10}, -{78,34,-9}, -{78,34,-8}, -{78,34,-7}, -{78,34,-6}, -{78,34,-5}, -{78,34,-4}, -{78,34,-3}, -{78,34,-2}, -{78,34,-1}, -{78,34,0}, -{78,34,1}, -{78,34,2}, -{78,34,3}, -{78,34,4}, -{78,35,-33}, -{78,35,-32}, -{78,35,-31}, -{78,35,-30}, -{78,35,-29}, -{78,35,-28}, -{78,35,-27}, -{78,35,-26}, -{78,35,-25}, -{78,35,-24}, -{78,35,-23}, -{78,35,-22}, -{78,35,-21}, -{78,35,-20}, -{78,35,-19}, -{78,35,-18}, -{78,35,-17}, -{78,35,-16}, -{78,35,-15}, -{78,35,-14}, -{78,35,-13}, -{78,35,-12}, -{78,35,-11}, -{78,35,-10}, -{78,35,-9}, -{78,35,-8}, -{78,35,-7}, -{78,35,-6}, -{78,35,-5}, -{78,35,-4}, -{78,35,-3}, -{78,35,-2}, -{78,35,-1}, -{78,35,0}, -{78,35,1}, -{78,36,-33}, -{78,36,-32}, -{78,36,-31}, -{78,36,-30}, -{78,36,-29}, -{78,36,-28}, -{78,36,-27}, -{78,36,-26}, -{78,36,-25}, -{78,36,-24}, -{78,36,-23}, -{78,36,-22}, -{78,36,-21}, -{78,36,-20}, -{78,36,-19}, -{78,36,-18}, -{78,36,-17}, -{78,36,-16}, -{78,36,-15}, -{78,36,-14}, -{78,36,-13}, -{78,36,-12}, -{78,36,-11}, -{78,36,-10}, -{78,36,-9}, -{78,36,-8}, -{78,36,-7}, -{78,36,-6}, -{78,36,-5}, -{78,36,-4}, -{78,36,-3}, -{78,36,-2}, -{78,37,-33}, -{78,37,-32}, -{78,37,-31}, -{78,37,-30}, -{78,37,-29}, -{78,37,-28}, -{78,37,-27}, -{78,37,-26}, -{78,37,-25}, -{78,37,-24}, -{78,37,-23}, -{78,37,-22}, -{78,37,-21}, -{78,37,-20}, -{78,37,-19}, -{78,37,-18}, -{78,37,-17}, -{78,37,-16}, -{78,37,-15}, -{78,37,-14}, -{78,37,-13}, -{78,37,-12}, -{78,37,-11}, -{78,37,-10}, -{78,37,-9}, -{78,37,-8}, -{78,37,-7}, -{78,37,-6}, -{78,37,-5}, -{78,37,-4}, -{78,38,-33}, -{78,38,-32}, -{78,38,-31}, -{78,38,-30}, -{78,38,-29}, -{78,38,-28}, -{78,38,-27}, -{78,38,-26}, -{78,38,-25}, -{78,38,-24}, -{78,38,-23}, -{78,38,-22}, -{78,38,-21}, -{78,38,-20}, -{78,38,-19}, -{78,38,-18}, -{78,38,-17}, -{78,38,-16}, -{78,38,-15}, -{78,38,-14}, -{78,38,-13}, -{78,38,-12}, -{78,38,-11}, -{78,38,-10}, -{78,38,-9}, -{78,38,-8}, -{78,38,-7}, -{78,39,-33}, -{78,39,-32}, -{78,39,-31}, -{78,39,-30}, -{78,39,-29}, -{78,39,-28}, -{78,39,-27}, -{78,39,-26}, -{78,39,-25}, -{78,39,-24}, -{78,39,-23}, -{78,39,-22}, -{78,39,-21}, -{78,39,-20}, -{78,39,-19}, -{78,39,-18}, -{78,39,-17}, -{78,39,-16}, -{78,39,-15}, -{78,39,-14}, -{78,39,-13}, -{78,39,-12}, -{78,39,-11}, -{78,39,-10}, -{78,39,-9}, -{78,40,-33}, -{78,40,-32}, -{78,40,-31}, -{78,40,-30}, -{78,40,-29}, -{78,40,-28}, -{78,40,-27}, -{78,40,-26}, -{78,40,-25}, -{78,40,-24}, -{78,40,-23}, -{78,40,-22}, -{78,40,-21}, -{78,40,-20}, -{78,40,-19}, -{78,40,-18}, -{78,40,-17}, -{78,40,-16}, -{78,40,-15}, -{78,40,-14}, -{78,40,-13}, -{78,40,-12}, -{78,41,-33}, -{78,41,-32}, -{78,41,-31}, -{78,41,-30}, -{78,41,-29}, -{78,41,-28}, -{78,41,-27}, -{78,41,-26}, -{78,41,-25}, -{78,41,-24}, -{78,41,-23}, -{78,41,-22}, -{78,41,-21}, -{78,41,-20}, -{78,41,-19}, -{78,41,-18}, -{78,41,-17}, -{78,41,-16}, -{78,41,-15}, -{78,41,-14}, -{78,42,-33}, -{78,42,-32}, -{78,42,-31}, -{78,42,-30}, -{78,42,-29}, -{78,42,-28}, -{78,42,-27}, -{78,42,-26}, -{78,42,-25}, -{78,42,-24}, -{78,42,-23}, -{78,42,-22}, -{78,42,-21}, -{78,42,-20}, -{78,42,-19}, -{78,42,-18}, -{78,42,-17}, -{78,42,-16}, -{78,43,-33}, -{78,43,-32}, -{78,43,-31}, -{78,43,-30}, -{78,43,-29}, -{78,43,-28}, -{78,43,-27}, -{78,43,-26}, -{78,43,-25}, -{78,43,-24}, -{78,43,-23}, -{78,43,-22}, -{78,43,-21}, -{78,43,-20}, -{78,43,-19}, -{78,44,-33}, -{78,44,-32}, -{78,44,-31}, -{78,44,-30}, -{78,44,-29}, -{78,44,-28}, -{78,44,-27}, -{78,44,-26}, -{78,44,-25}, -{78,44,-24}, -{78,44,-23}, -{78,44,-22}, -{78,44,-21}, -{78,45,-33}, -{78,45,-32}, -{78,45,-31}, -{78,45,-30}, -{78,45,-29}, -{78,45,-28}, -{78,45,-27}, -{78,45,-26}, -{78,45,-25}, -{78,45,-24}, -{78,45,-23}, -{78,46,-33}, -{78,46,-32}, -{78,46,-31}, -{78,46,-30}, -{78,46,-29}, -{78,46,-28}, -{78,46,-27}, -{78,46,-26}, -{78,46,-25}, -{78,47,-33}, -{78,47,-32}, -{78,47,-31}, -{78,47,-30}, -{78,47,-29}, -{78,47,-28}, -{78,47,-27}, -{78,48,-33}, -{78,48,-32}, -{78,48,-31}, -{78,48,-30}, -{78,48,-29}, -{78,49,-33}, -{78,49,-32}, -{78,49,-31}, -{78,50,-33}, -{79,-79,76}, -{79,-78,71}, -{79,-78,72}, -{79,-78,73}, -{79,-78,74}, -{79,-78,75}, -{79,-78,76}, -{79,-77,67}, -{79,-77,68}, -{79,-77,69}, -{79,-77,70}, -{79,-77,71}, -{79,-77,72}, -{79,-77,73}, -{79,-77,74}, -{79,-77,75}, -{79,-77,76}, -{79,-76,63}, -{79,-76,64}, -{79,-76,65}, -{79,-76,66}, -{79,-76,67}, -{79,-76,68}, -{79,-76,69}, -{79,-76,70}, -{79,-76,71}, -{79,-76,72}, -{79,-76,73}, -{79,-76,74}, -{79,-76,75}, -{79,-76,76}, -{79,-75,59}, -{79,-75,60}, -{79,-75,61}, -{79,-75,62}, -{79,-75,63}, -{79,-75,64}, -{79,-75,65}, -{79,-75,66}, -{79,-75,67}, -{79,-75,68}, -{79,-75,69}, -{79,-75,70}, -{79,-75,71}, -{79,-75,72}, -{79,-75,73}, -{79,-75,74}, -{79,-75,75}, -{79,-75,76}, -{79,-74,55}, -{79,-74,56}, -{79,-74,57}, -{79,-74,58}, -{79,-74,59}, -{79,-74,60}, -{79,-74,61}, -{79,-74,62}, -{79,-74,63}, -{79,-74,64}, -{79,-74,65}, -{79,-74,66}, -{79,-74,67}, -{79,-74,68}, -{79,-74,69}, -{79,-74,70}, -{79,-74,71}, -{79,-74,72}, -{79,-74,73}, -{79,-74,74}, -{79,-74,75}, -{79,-74,76}, -{79,-73,52}, -{79,-73,53}, -{79,-73,54}, -{79,-73,55}, -{79,-73,56}, -{79,-73,57}, -{79,-73,58}, -{79,-73,59}, -{79,-73,60}, -{79,-73,61}, -{79,-73,62}, -{79,-73,63}, -{79,-73,64}, -{79,-73,65}, -{79,-73,66}, -{79,-73,67}, -{79,-73,68}, -{79,-73,69}, -{79,-73,70}, -{79,-73,71}, -{79,-73,72}, -{79,-73,73}, -{79,-73,74}, -{79,-73,75}, -{79,-73,76}, -{79,-72,49}, -{79,-72,50}, -{79,-72,51}, -{79,-72,52}, -{79,-72,53}, -{79,-72,54}, -{79,-72,55}, -{79,-72,56}, -{79,-72,57}, -{79,-72,58}, -{79,-72,59}, -{79,-72,60}, -{79,-72,61}, -{79,-72,62}, -{79,-72,63}, -{79,-72,64}, -{79,-72,65}, -{79,-72,66}, -{79,-72,67}, -{79,-72,68}, -{79,-72,69}, -{79,-72,70}, -{79,-72,71}, -{79,-72,72}, -{79,-72,73}, -{79,-72,74}, -{79,-72,75}, -{79,-72,76}, -{79,-71,46}, -{79,-71,47}, -{79,-71,48}, -{79,-71,49}, -{79,-71,50}, -{79,-71,51}, -{79,-71,52}, -{79,-71,53}, -{79,-71,54}, -{79,-71,55}, -{79,-71,56}, -{79,-71,57}, -{79,-71,58}, -{79,-71,59}, -{79,-71,60}, -{79,-71,61}, -{79,-71,62}, -{79,-71,63}, -{79,-71,64}, -{79,-71,65}, -{79,-71,66}, -{79,-71,67}, -{79,-71,68}, -{79,-71,69}, -{79,-71,70}, -{79,-71,71}, -{79,-71,72}, -{79,-71,73}, -{79,-71,74}, -{79,-71,75}, -{79,-71,76}, -{79,-70,43}, -{79,-70,44}, -{79,-70,45}, -{79,-70,46}, -{79,-70,47}, -{79,-70,48}, -{79,-70,49}, -{79,-70,50}, -{79,-70,51}, -{79,-70,52}, -{79,-70,53}, -{79,-70,54}, -{79,-70,55}, -{79,-70,56}, -{79,-70,57}, -{79,-70,58}, -{79,-70,59}, -{79,-70,60}, -{79,-70,61}, -{79,-70,62}, -{79,-70,63}, -{79,-70,64}, -{79,-70,65}, -{79,-70,66}, -{79,-70,67}, -{79,-70,68}, -{79,-70,69}, -{79,-70,70}, -{79,-70,71}, -{79,-70,72}, -{79,-70,73}, -{79,-70,74}, -{79,-70,75}, -{79,-70,76}, -{79,-69,40}, -{79,-69,41}, -{79,-69,42}, -{79,-69,43}, -{79,-69,44}, -{79,-69,45}, -{79,-69,46}, -{79,-69,47}, -{79,-69,48}, -{79,-69,49}, -{79,-69,50}, -{79,-69,51}, -{79,-69,52}, -{79,-69,53}, -{79,-69,54}, -{79,-69,55}, -{79,-69,56}, -{79,-69,57}, -{79,-69,58}, -{79,-69,59}, -{79,-69,60}, -{79,-69,61}, -{79,-69,62}, -{79,-69,63}, -{79,-69,64}, -{79,-69,65}, -{79,-69,66}, -{79,-69,67}, -{79,-69,68}, -{79,-69,69}, -{79,-69,70}, -{79,-69,71}, -{79,-69,72}, -{79,-69,73}, -{79,-69,74}, -{79,-69,75}, -{79,-69,76}, -{79,-68,37}, -{79,-68,38}, -{79,-68,39}, -{79,-68,40}, -{79,-68,41}, -{79,-68,42}, -{79,-68,43}, -{79,-68,44}, -{79,-68,45}, -{79,-68,46}, -{79,-68,47}, -{79,-68,48}, -{79,-68,49}, -{79,-68,50}, -{79,-68,51}, -{79,-68,52}, -{79,-68,53}, -{79,-68,54}, -{79,-68,55}, -{79,-68,56}, -{79,-68,57}, -{79,-68,58}, -{79,-68,59}, -{79,-68,60}, -{79,-68,61}, -{79,-68,62}, -{79,-68,63}, -{79,-68,64}, -{79,-68,65}, -{79,-68,66}, -{79,-68,67}, -{79,-68,68}, -{79,-68,69}, -{79,-68,70}, -{79,-68,71}, -{79,-68,72}, -{79,-68,73}, -{79,-68,74}, -{79,-68,75}, -{79,-68,76}, -{79,-67,35}, -{79,-67,36}, -{79,-67,37}, -{79,-67,38}, -{79,-67,39}, -{79,-67,40}, -{79,-67,41}, -{79,-67,42}, -{79,-67,43}, -{79,-67,44}, -{79,-67,45}, -{79,-67,46}, -{79,-67,47}, -{79,-67,48}, -{79,-67,49}, -{79,-67,50}, -{79,-67,51}, -{79,-67,52}, -{79,-67,53}, -{79,-67,54}, -{79,-67,55}, -{79,-67,56}, -{79,-67,57}, -{79,-67,58}, -{79,-67,59}, -{79,-67,60}, -{79,-67,61}, -{79,-67,62}, -{79,-67,63}, -{79,-67,64}, -{79,-67,65}, -{79,-67,66}, -{79,-67,67}, -{79,-67,68}, -{79,-67,69}, -{79,-67,70}, -{79,-67,71}, -{79,-67,72}, -{79,-67,73}, -{79,-67,74}, -{79,-67,75}, -{79,-67,76}, -{79,-66,32}, -{79,-66,33}, -{79,-66,34}, -{79,-66,35}, -{79,-66,36}, -{79,-66,37}, -{79,-66,38}, -{79,-66,39}, -{79,-66,40}, -{79,-66,41}, -{79,-66,42}, -{79,-66,43}, -{79,-66,44}, -{79,-66,45}, -{79,-66,46}, -{79,-66,47}, -{79,-66,48}, -{79,-66,49}, -{79,-66,50}, -{79,-66,51}, -{79,-66,52}, -{79,-66,53}, -{79,-66,54}, -{79,-66,55}, -{79,-66,56}, -{79,-66,57}, -{79,-66,58}, -{79,-66,59}, -{79,-66,60}, -{79,-66,61}, -{79,-66,62}, -{79,-66,63}, -{79,-66,64}, -{79,-66,65}, -{79,-66,66}, -{79,-66,67}, -{79,-66,68}, -{79,-66,69}, -{79,-66,70}, -{79,-66,71}, -{79,-66,72}, -{79,-66,73}, -{79,-66,74}, -{79,-66,75}, -{79,-66,76}, -{79,-65,30}, -{79,-65,31}, -{79,-65,32}, -{79,-65,33}, -{79,-65,34}, -{79,-65,35}, -{79,-65,36}, -{79,-65,37}, -{79,-65,38}, -{79,-65,39}, -{79,-65,40}, -{79,-65,41}, -{79,-65,42}, -{79,-65,43}, -{79,-65,44}, -{79,-65,45}, -{79,-65,46}, -{79,-65,47}, -{79,-65,48}, -{79,-65,49}, -{79,-65,50}, -{79,-65,51}, -{79,-65,52}, -{79,-65,53}, -{79,-65,54}, -{79,-65,55}, -{79,-65,56}, -{79,-65,57}, -{79,-65,58}, -{79,-65,59}, -{79,-65,60}, -{79,-65,61}, -{79,-65,62}, -{79,-65,63}, -{79,-65,64}, -{79,-65,65}, -{79,-65,66}, -{79,-65,67}, -{79,-65,68}, -{79,-65,69}, -{79,-65,70}, -{79,-65,71}, -{79,-65,72}, -{79,-65,73}, -{79,-65,74}, -{79,-65,75}, -{79,-65,76}, -{79,-64,28}, -{79,-64,29}, -{79,-64,30}, -{79,-64,31}, -{79,-64,32}, -{79,-64,33}, -{79,-64,34}, -{79,-64,35}, -{79,-64,36}, -{79,-64,37}, -{79,-64,38}, -{79,-64,39}, -{79,-64,40}, -{79,-64,41}, -{79,-64,42}, -{79,-64,43}, -{79,-64,44}, -{79,-64,45}, -{79,-64,46}, -{79,-64,47}, -{79,-64,48}, -{79,-64,49}, -{79,-64,50}, -{79,-64,51}, -{79,-64,52}, -{79,-64,53}, -{79,-64,54}, -{79,-64,55}, -{79,-64,56}, -{79,-64,57}, -{79,-64,58}, -{79,-64,59}, -{79,-64,60}, -{79,-64,61}, -{79,-64,62}, -{79,-64,63}, -{79,-64,64}, -{79,-64,65}, -{79,-64,66}, -{79,-64,67}, -{79,-64,68}, -{79,-64,69}, -{79,-64,70}, -{79,-64,71}, -{79,-64,72}, -{79,-64,73}, -{79,-64,74}, -{79,-64,75}, -{79,-64,76}, -{79,-64,77}, -{79,-63,25}, -{79,-63,26}, -{79,-63,27}, -{79,-63,28}, -{79,-63,29}, -{79,-63,30}, -{79,-63,31}, -{79,-63,32}, -{79,-63,33}, -{79,-63,34}, -{79,-63,35}, -{79,-63,36}, -{79,-63,37}, -{79,-63,38}, -{79,-63,39}, -{79,-63,40}, -{79,-63,41}, -{79,-63,42}, -{79,-63,43}, -{79,-63,44}, -{79,-63,45}, -{79,-63,46}, -{79,-63,47}, -{79,-63,48}, -{79,-63,49}, -{79,-63,50}, -{79,-63,51}, -{79,-63,52}, -{79,-63,53}, -{79,-63,54}, -{79,-63,55}, -{79,-63,56}, -{79,-63,57}, -{79,-63,58}, -{79,-63,59}, -{79,-63,60}, -{79,-63,61}, -{79,-63,62}, -{79,-63,63}, -{79,-63,64}, -{79,-63,65}, -{79,-63,66}, -{79,-63,67}, -{79,-63,68}, -{79,-63,69}, -{79,-63,70}, -{79,-63,71}, -{79,-63,72}, -{79,-63,73}, -{79,-63,74}, -{79,-63,75}, -{79,-63,76}, -{79,-63,77}, -{79,-62,23}, -{79,-62,24}, -{79,-62,25}, -{79,-62,26}, -{79,-62,27}, -{79,-62,28}, -{79,-62,29}, -{79,-62,30}, -{79,-62,31}, -{79,-62,32}, -{79,-62,33}, -{79,-62,34}, -{79,-62,35}, -{79,-62,36}, -{79,-62,37}, -{79,-62,38}, -{79,-62,39}, -{79,-62,40}, -{79,-62,41}, -{79,-62,42}, -{79,-62,43}, -{79,-62,44}, -{79,-62,45}, -{79,-62,46}, -{79,-62,47}, -{79,-62,48}, -{79,-62,49}, -{79,-62,50}, -{79,-62,51}, -{79,-62,52}, -{79,-62,53}, -{79,-62,54}, -{79,-62,55}, -{79,-62,56}, -{79,-62,57}, -{79,-62,58}, -{79,-62,59}, -{79,-62,60}, -{79,-62,61}, -{79,-62,62}, -{79,-62,63}, -{79,-62,64}, -{79,-62,65}, -{79,-62,66}, -{79,-62,67}, -{79,-62,68}, -{79,-62,69}, -{79,-62,70}, -{79,-62,71}, -{79,-62,72}, -{79,-62,73}, -{79,-62,74}, -{79,-62,75}, -{79,-62,76}, -{79,-62,77}, -{79,-61,21}, -{79,-61,22}, -{79,-61,23}, -{79,-61,24}, -{79,-61,25}, -{79,-61,26}, -{79,-61,27}, -{79,-61,28}, -{79,-61,29}, -{79,-61,30}, -{79,-61,31}, -{79,-61,32}, -{79,-61,33}, -{79,-61,34}, -{79,-61,35}, -{79,-61,36}, -{79,-61,37}, -{79,-61,38}, -{79,-61,39}, -{79,-61,40}, -{79,-61,41}, -{79,-61,42}, -{79,-61,43}, -{79,-61,44}, -{79,-61,45}, -{79,-61,46}, -{79,-61,47}, -{79,-61,48}, -{79,-61,49}, -{79,-61,50}, -{79,-61,51}, -{79,-61,52}, -{79,-61,53}, -{79,-61,54}, -{79,-61,55}, -{79,-61,56}, -{79,-61,57}, -{79,-61,58}, -{79,-61,59}, -{79,-61,60}, -{79,-61,61}, -{79,-61,62}, -{79,-61,63}, -{79,-61,64}, -{79,-61,65}, -{79,-61,66}, -{79,-61,67}, -{79,-61,68}, -{79,-61,69}, -{79,-61,70}, -{79,-61,71}, -{79,-61,72}, -{79,-61,73}, -{79,-61,74}, -{79,-61,75}, -{79,-61,76}, -{79,-61,77}, -{79,-60,19}, -{79,-60,20}, -{79,-60,21}, -{79,-60,22}, -{79,-60,23}, -{79,-60,24}, -{79,-60,25}, -{79,-60,26}, -{79,-60,27}, -{79,-60,28}, -{79,-60,29}, -{79,-60,30}, -{79,-60,31}, -{79,-60,32}, -{79,-60,33}, -{79,-60,34}, -{79,-60,35}, -{79,-60,36}, -{79,-60,37}, -{79,-60,38}, -{79,-60,39}, -{79,-60,40}, -{79,-60,41}, -{79,-60,42}, -{79,-60,43}, -{79,-60,44}, -{79,-60,45}, -{79,-60,46}, -{79,-60,47}, -{79,-60,48}, -{79,-60,49}, -{79,-60,50}, -{79,-60,51}, -{79,-60,52}, -{79,-60,53}, -{79,-60,54}, -{79,-60,55}, -{79,-60,56}, -{79,-60,57}, -{79,-60,58}, -{79,-60,59}, -{79,-60,60}, -{79,-60,61}, -{79,-60,62}, -{79,-60,63}, -{79,-60,64}, -{79,-60,65}, -{79,-60,66}, -{79,-60,67}, -{79,-60,68}, -{79,-60,69}, -{79,-60,70}, -{79,-60,71}, -{79,-60,72}, -{79,-60,73}, -{79,-60,74}, -{79,-60,75}, -{79,-60,76}, -{79,-60,77}, -{79,-59,17}, -{79,-59,18}, -{79,-59,19}, -{79,-59,20}, -{79,-59,21}, -{79,-59,22}, -{79,-59,23}, -{79,-59,24}, -{79,-59,25}, -{79,-59,26}, -{79,-59,27}, -{79,-59,28}, -{79,-59,29}, -{79,-59,30}, -{79,-59,31}, -{79,-59,32}, -{79,-59,33}, -{79,-59,34}, -{79,-59,35}, -{79,-59,36}, -{79,-59,37}, -{79,-59,38}, -{79,-59,39}, -{79,-59,40}, -{79,-59,41}, -{79,-59,42}, -{79,-59,43}, -{79,-59,44}, -{79,-59,45}, -{79,-59,46}, -{79,-59,47}, -{79,-59,48}, -{79,-59,49}, -{79,-59,50}, -{79,-59,51}, -{79,-59,52}, -{79,-59,53}, -{79,-59,54}, -{79,-59,55}, -{79,-59,56}, -{79,-59,57}, -{79,-59,58}, -{79,-59,59}, -{79,-59,60}, -{79,-59,61}, -{79,-59,62}, -{79,-59,63}, -{79,-59,64}, -{79,-59,65}, -{79,-59,66}, -{79,-59,67}, -{79,-59,68}, -{79,-59,69}, -{79,-59,70}, -{79,-59,71}, -{79,-59,72}, -{79,-59,73}, -{79,-59,74}, -{79,-59,75}, -{79,-59,76}, -{79,-59,77}, -{79,-58,15}, -{79,-58,16}, -{79,-58,17}, -{79,-58,18}, -{79,-58,19}, -{79,-58,20}, -{79,-58,21}, -{79,-58,22}, -{79,-58,23}, -{79,-58,24}, -{79,-58,25}, -{79,-58,26}, -{79,-58,27}, -{79,-58,28}, -{79,-58,29}, -{79,-58,30}, -{79,-58,31}, -{79,-58,32}, -{79,-58,33}, -{79,-58,34}, -{79,-58,35}, -{79,-58,36}, -{79,-58,37}, -{79,-58,38}, -{79,-58,39}, -{79,-58,40}, -{79,-58,41}, -{79,-58,42}, -{79,-58,43}, -{79,-58,44}, -{79,-58,45}, -{79,-58,46}, -{79,-58,47}, -{79,-58,48}, -{79,-58,49}, -{79,-58,50}, -{79,-58,51}, -{79,-58,52}, -{79,-58,53}, -{79,-58,54}, -{79,-58,55}, -{79,-58,56}, -{79,-58,57}, -{79,-58,58}, -{79,-58,59}, -{79,-58,60}, -{79,-58,61}, -{79,-58,62}, -{79,-58,63}, -{79,-58,64}, -{79,-58,65}, -{79,-58,66}, -{79,-58,67}, -{79,-58,68}, -{79,-58,69}, -{79,-58,70}, -{79,-58,71}, -{79,-58,72}, -{79,-58,73}, -{79,-58,74}, -{79,-58,75}, -{79,-58,76}, -{79,-58,77}, -{79,-57,13}, -{79,-57,14}, -{79,-57,15}, -{79,-57,16}, -{79,-57,17}, -{79,-57,18}, -{79,-57,19}, -{79,-57,20}, -{79,-57,21}, -{79,-57,22}, -{79,-57,23}, -{79,-57,24}, -{79,-57,25}, -{79,-57,26}, -{79,-57,27}, -{79,-57,28}, -{79,-57,29}, -{79,-57,30}, -{79,-57,31}, -{79,-57,32}, -{79,-57,33}, -{79,-57,34}, -{79,-57,35}, -{79,-57,36}, -{79,-57,37}, -{79,-57,38}, -{79,-57,39}, -{79,-57,40}, -{79,-57,41}, -{79,-57,42}, -{79,-57,43}, -{79,-57,44}, -{79,-57,45}, -{79,-57,46}, -{79,-57,47}, -{79,-57,48}, -{79,-57,49}, -{79,-57,50}, -{79,-57,51}, -{79,-57,52}, -{79,-57,53}, -{79,-57,54}, -{79,-57,55}, -{79,-57,56}, -{79,-57,57}, -{79,-57,58}, -{79,-57,59}, -{79,-57,60}, -{79,-57,61}, -{79,-57,62}, -{79,-57,63}, -{79,-57,64}, -{79,-57,65}, -{79,-57,66}, -{79,-57,67}, -{79,-57,68}, -{79,-57,69}, -{79,-57,70}, -{79,-57,71}, -{79,-57,72}, -{79,-57,73}, -{79,-57,74}, -{79,-57,75}, -{79,-57,76}, -{79,-57,77}, -{79,-56,11}, -{79,-56,12}, -{79,-56,13}, -{79,-56,14}, -{79,-56,15}, -{79,-56,16}, -{79,-56,17}, -{79,-56,18}, -{79,-56,19}, -{79,-56,20}, -{79,-56,21}, -{79,-56,22}, -{79,-56,23}, -{79,-56,24}, -{79,-56,25}, -{79,-56,26}, -{79,-56,27}, -{79,-56,28}, -{79,-56,29}, -{79,-56,30}, -{79,-56,31}, -{79,-56,32}, -{79,-56,33}, -{79,-56,34}, -{79,-56,35}, -{79,-56,36}, -{79,-56,37}, -{79,-56,38}, -{79,-56,39}, -{79,-56,40}, -{79,-56,41}, -{79,-56,42}, -{79,-56,43}, -{79,-56,44}, -{79,-56,45}, -{79,-56,46}, -{79,-56,47}, -{79,-56,48}, -{79,-56,49}, -{79,-56,50}, -{79,-56,51}, -{79,-56,52}, -{79,-56,53}, -{79,-56,54}, -{79,-56,55}, -{79,-56,56}, -{79,-56,57}, -{79,-56,58}, -{79,-56,59}, -{79,-56,60}, -{79,-56,61}, -{79,-56,62}, -{79,-56,63}, -{79,-56,64}, -{79,-56,65}, -{79,-56,66}, -{79,-56,67}, -{79,-56,68}, -{79,-56,69}, -{79,-56,70}, -{79,-56,71}, -{79,-56,72}, -{79,-56,73}, -{79,-56,74}, -{79,-56,75}, -{79,-56,76}, -{79,-56,77}, -{79,-55,9}, -{79,-55,10}, -{79,-55,11}, -{79,-55,12}, -{79,-55,13}, -{79,-55,14}, -{79,-55,15}, -{79,-55,16}, -{79,-55,17}, -{79,-55,18}, -{79,-55,19}, -{79,-55,20}, -{79,-55,21}, -{79,-55,22}, -{79,-55,23}, -{79,-55,24}, -{79,-55,25}, -{79,-55,26}, -{79,-55,27}, -{79,-55,28}, -{79,-55,29}, -{79,-55,30}, -{79,-55,31}, -{79,-55,32}, -{79,-55,33}, -{79,-55,34}, -{79,-55,35}, -{79,-55,36}, -{79,-55,37}, -{79,-55,38}, -{79,-55,39}, -{79,-55,40}, -{79,-55,41}, -{79,-55,42}, -{79,-55,43}, -{79,-55,44}, -{79,-55,45}, -{79,-55,46}, -{79,-55,47}, -{79,-55,48}, -{79,-55,49}, -{79,-55,50}, -{79,-55,51}, -{79,-55,52}, -{79,-55,53}, -{79,-55,54}, -{79,-55,55}, -{79,-55,56}, -{79,-55,57}, -{79,-55,58}, -{79,-55,59}, -{79,-55,60}, -{79,-55,61}, -{79,-55,62}, -{79,-55,63}, -{79,-55,64}, -{79,-55,65}, -{79,-55,66}, -{79,-55,67}, -{79,-55,68}, -{79,-55,69}, -{79,-55,70}, -{79,-55,71}, -{79,-55,72}, -{79,-55,73}, -{79,-55,74}, -{79,-55,75}, -{79,-55,76}, -{79,-55,77}, -{79,-54,7}, -{79,-54,8}, -{79,-54,9}, -{79,-54,10}, -{79,-54,11}, -{79,-54,12}, -{79,-54,13}, -{79,-54,14}, -{79,-54,15}, -{79,-54,16}, -{79,-54,17}, -{79,-54,18}, -{79,-54,19}, -{79,-54,20}, -{79,-54,21}, -{79,-54,22}, -{79,-54,23}, -{79,-54,24}, -{79,-54,25}, -{79,-54,26}, -{79,-54,27}, -{79,-54,28}, -{79,-54,29}, -{79,-54,30}, -{79,-54,31}, -{79,-54,32}, -{79,-54,33}, -{79,-54,34}, -{79,-54,35}, -{79,-54,36}, -{79,-54,37}, -{79,-54,38}, -{79,-54,39}, -{79,-54,40}, -{79,-54,41}, -{79,-54,42}, -{79,-54,43}, -{79,-54,44}, -{79,-54,45}, -{79,-54,46}, -{79,-54,47}, -{79,-54,48}, -{79,-54,49}, -{79,-54,50}, -{79,-54,51}, -{79,-54,52}, -{79,-54,53}, -{79,-54,54}, -{79,-54,55}, -{79,-54,56}, -{79,-54,57}, -{79,-54,58}, -{79,-54,59}, -{79,-54,60}, -{79,-54,61}, -{79,-54,62}, -{79,-54,63}, -{79,-54,64}, -{79,-54,65}, -{79,-54,66}, -{79,-54,67}, -{79,-54,68}, -{79,-54,69}, -{79,-54,70}, -{79,-54,71}, -{79,-54,72}, -{79,-54,73}, -{79,-54,74}, -{79,-54,75}, -{79,-54,76}, -{79,-54,77}, -{79,-53,5}, -{79,-53,6}, -{79,-53,7}, -{79,-53,8}, -{79,-53,9}, -{79,-53,10}, -{79,-53,11}, -{79,-53,12}, -{79,-53,13}, -{79,-53,14}, -{79,-53,15}, -{79,-53,16}, -{79,-53,17}, -{79,-53,18}, -{79,-53,19}, -{79,-53,20}, -{79,-53,21}, -{79,-53,22}, -{79,-53,23}, -{79,-53,24}, -{79,-53,25}, -{79,-53,26}, -{79,-53,27}, -{79,-53,28}, -{79,-53,29}, -{79,-53,30}, -{79,-53,31}, -{79,-53,32}, -{79,-53,33}, -{79,-53,34}, -{79,-53,35}, -{79,-53,36}, -{79,-53,37}, -{79,-53,38}, -{79,-53,39}, -{79,-53,40}, -{79,-53,41}, -{79,-53,42}, -{79,-53,43}, -{79,-53,44}, -{79,-53,45}, -{79,-53,46}, -{79,-53,47}, -{79,-53,48}, -{79,-53,49}, -{79,-53,50}, -{79,-53,51}, -{79,-53,52}, -{79,-53,53}, -{79,-53,54}, -{79,-53,55}, -{79,-53,56}, -{79,-53,57}, -{79,-53,58}, -{79,-53,59}, -{79,-53,60}, -{79,-53,61}, -{79,-53,62}, -{79,-53,63}, -{79,-53,64}, -{79,-53,65}, -{79,-53,66}, -{79,-53,67}, -{79,-53,68}, -{79,-53,69}, -{79,-53,70}, -{79,-53,71}, -{79,-53,72}, -{79,-53,73}, -{79,-53,74}, -{79,-53,75}, -{79,-53,76}, -{79,-53,77}, -{79,-52,3}, -{79,-52,4}, -{79,-52,5}, -{79,-52,6}, -{79,-52,7}, -{79,-52,8}, -{79,-52,9}, -{79,-52,10}, -{79,-52,11}, -{79,-52,12}, -{79,-52,13}, -{79,-52,14}, -{79,-52,15}, -{79,-52,16}, -{79,-52,17}, -{79,-52,18}, -{79,-52,19}, -{79,-52,20}, -{79,-52,21}, -{79,-52,22}, -{79,-52,23}, -{79,-52,24}, -{79,-52,25}, -{79,-52,26}, -{79,-52,27}, -{79,-52,28}, -{79,-52,29}, -{79,-52,30}, -{79,-52,31}, -{79,-52,32}, -{79,-52,33}, -{79,-52,34}, -{79,-52,35}, -{79,-52,36}, -{79,-52,37}, -{79,-52,38}, -{79,-52,39}, -{79,-52,40}, -{79,-52,41}, -{79,-52,42}, -{79,-52,43}, -{79,-52,44}, -{79,-52,45}, -{79,-52,46}, -{79,-52,47}, -{79,-52,48}, -{79,-52,49}, -{79,-52,50}, -{79,-52,51}, -{79,-52,52}, -{79,-52,53}, -{79,-52,54}, -{79,-52,55}, -{79,-52,56}, -{79,-52,57}, -{79,-52,58}, -{79,-52,59}, -{79,-52,60}, -{79,-52,61}, -{79,-52,62}, -{79,-52,63}, -{79,-52,64}, -{79,-52,65}, -{79,-52,66}, -{79,-52,67}, -{79,-52,68}, -{79,-52,69}, -{79,-52,70}, -{79,-52,71}, -{79,-52,72}, -{79,-52,73}, -{79,-52,74}, -{79,-52,75}, -{79,-52,76}, -{79,-52,77}, -{79,-51,2}, -{79,-51,3}, -{79,-51,4}, -{79,-51,5}, -{79,-51,6}, -{79,-51,7}, -{79,-51,8}, -{79,-51,9}, -{79,-51,10}, -{79,-51,11}, -{79,-51,12}, -{79,-51,13}, -{79,-51,14}, -{79,-51,15}, -{79,-51,16}, -{79,-51,17}, -{79,-51,18}, -{79,-51,19}, -{79,-51,20}, -{79,-51,21}, -{79,-51,22}, -{79,-51,23}, -{79,-51,24}, -{79,-51,25}, -{79,-51,26}, -{79,-51,27}, -{79,-51,28}, -{79,-51,29}, -{79,-51,30}, -{79,-51,31}, -{79,-51,32}, -{79,-51,33}, -{79,-51,34}, -{79,-51,35}, -{79,-51,36}, -{79,-51,37}, -{79,-51,38}, -{79,-51,39}, -{79,-51,40}, -{79,-51,41}, -{79,-51,42}, -{79,-51,43}, -{79,-51,44}, -{79,-51,45}, -{79,-51,46}, -{79,-51,47}, -{79,-51,48}, -{79,-51,49}, -{79,-51,50}, -{79,-51,51}, -{79,-51,52}, -{79,-51,53}, -{79,-51,54}, -{79,-51,55}, -{79,-51,56}, -{79,-51,57}, -{79,-51,58}, -{79,-51,59}, -{79,-51,60}, -{79,-51,61}, -{79,-51,62}, -{79,-51,63}, -{79,-51,64}, -{79,-51,65}, -{79,-51,66}, -{79,-51,67}, -{79,-51,68}, -{79,-51,69}, -{79,-51,70}, -{79,-51,71}, -{79,-51,72}, -{79,-51,73}, -{79,-51,74}, -{79,-51,75}, -{79,-51,76}, -{79,-51,77}, -{79,-50,0}, -{79,-50,1}, -{79,-50,2}, -{79,-50,3}, -{79,-50,4}, -{79,-50,5}, -{79,-50,6}, -{79,-50,7}, -{79,-50,8}, -{79,-50,9}, -{79,-50,10}, -{79,-50,11}, -{79,-50,12}, -{79,-50,13}, -{79,-50,14}, -{79,-50,15}, -{79,-50,16}, -{79,-50,17}, -{79,-50,18}, -{79,-50,19}, -{79,-50,20}, -{79,-50,21}, -{79,-50,22}, -{79,-50,23}, -{79,-50,24}, -{79,-50,25}, -{79,-50,26}, -{79,-50,27}, -{79,-50,28}, -{79,-50,29}, -{79,-50,30}, -{79,-50,31}, -{79,-50,32}, -{79,-50,33}, -{79,-50,34}, -{79,-50,35}, -{79,-50,36}, -{79,-50,37}, -{79,-50,38}, -{79,-50,39}, -{79,-50,40}, -{79,-50,41}, -{79,-50,42}, -{79,-50,43}, -{79,-50,44}, -{79,-50,45}, -{79,-50,46}, -{79,-50,47}, -{79,-50,48}, -{79,-50,49}, -{79,-50,50}, -{79,-50,51}, -{79,-50,52}, -{79,-50,53}, -{79,-50,54}, -{79,-50,55}, -{79,-50,56}, -{79,-50,57}, -{79,-50,58}, -{79,-50,59}, -{79,-50,60}, -{79,-50,61}, -{79,-50,62}, -{79,-50,63}, -{79,-50,64}, -{79,-50,65}, -{79,-50,66}, -{79,-50,67}, -{79,-50,68}, -{79,-50,69}, -{79,-50,70}, -{79,-50,71}, -{79,-50,72}, -{79,-50,73}, -{79,-50,74}, -{79,-50,75}, -{79,-50,76}, -{79,-50,77}, -{79,-49,-2}, -{79,-49,-1}, -{79,-49,0}, -{79,-49,1}, -{79,-49,2}, -{79,-49,3}, -{79,-49,4}, -{79,-49,5}, -{79,-49,6}, -{79,-49,7}, -{79,-49,8}, -{79,-49,9}, -{79,-49,10}, -{79,-49,11}, -{79,-49,12}, -{79,-49,13}, -{79,-49,14}, -{79,-49,15}, -{79,-49,16}, -{79,-49,17}, -{79,-49,18}, -{79,-49,19}, -{79,-49,20}, -{79,-49,21}, -{79,-49,22}, -{79,-49,23}, -{79,-49,24}, -{79,-49,25}, -{79,-49,26}, -{79,-49,27}, -{79,-49,28}, -{79,-49,29}, -{79,-49,30}, -{79,-49,31}, -{79,-49,32}, -{79,-49,33}, -{79,-49,34}, -{79,-49,35}, -{79,-49,36}, -{79,-49,37}, -{79,-49,38}, -{79,-49,39}, -{79,-49,40}, -{79,-49,41}, -{79,-49,42}, -{79,-49,43}, -{79,-49,44}, -{79,-49,45}, -{79,-49,46}, -{79,-49,47}, -{79,-49,48}, -{79,-49,49}, -{79,-49,50}, -{79,-49,51}, -{79,-49,52}, -{79,-49,53}, -{79,-49,54}, -{79,-49,55}, -{79,-49,56}, -{79,-49,57}, -{79,-49,58}, -{79,-49,59}, -{79,-49,60}, -{79,-49,61}, -{79,-49,62}, -{79,-49,63}, -{79,-49,64}, -{79,-49,65}, -{79,-49,66}, -{79,-49,67}, -{79,-49,68}, -{79,-49,69}, -{79,-49,70}, -{79,-49,71}, -{79,-49,72}, -{79,-49,73}, -{79,-49,74}, -{79,-49,75}, -{79,-49,76}, -{79,-49,77}, -{79,-48,-4}, -{79,-48,-3}, -{79,-48,-2}, -{79,-48,-1}, -{79,-48,0}, -{79,-48,1}, -{79,-48,2}, -{79,-48,3}, -{79,-48,4}, -{79,-48,5}, -{79,-48,6}, -{79,-48,7}, -{79,-48,8}, -{79,-48,9}, -{79,-48,10}, -{79,-48,11}, -{79,-48,12}, -{79,-48,13}, -{79,-48,14}, -{79,-48,15}, -{79,-48,16}, -{79,-48,17}, -{79,-48,18}, -{79,-48,19}, -{79,-48,20}, -{79,-48,21}, -{79,-48,22}, -{79,-48,23}, -{79,-48,24}, -{79,-48,25}, -{79,-48,26}, -{79,-48,27}, -{79,-48,28}, -{79,-48,29}, -{79,-48,30}, -{79,-48,31}, -{79,-48,32}, -{79,-48,33}, -{79,-48,34}, -{79,-48,35}, -{79,-48,36}, -{79,-48,37}, -{79,-48,38}, -{79,-48,39}, -{79,-48,40}, -{79,-48,41}, -{79,-48,42}, -{79,-48,43}, -{79,-48,44}, -{79,-48,45}, -{79,-48,46}, -{79,-48,47}, -{79,-48,48}, -{79,-48,49}, -{79,-48,50}, -{79,-48,51}, -{79,-48,52}, -{79,-48,53}, -{79,-48,54}, -{79,-48,55}, -{79,-48,56}, -{79,-48,57}, -{79,-48,58}, -{79,-48,59}, -{79,-48,60}, -{79,-48,61}, -{79,-48,62}, -{79,-48,63}, -{79,-48,64}, -{79,-48,65}, -{79,-48,66}, -{79,-48,67}, -{79,-48,68}, -{79,-48,69}, -{79,-48,70}, -{79,-48,71}, -{79,-48,72}, -{79,-48,73}, -{79,-48,74}, -{79,-48,75}, -{79,-48,76}, -{79,-48,77}, -{79,-47,-5}, -{79,-47,-4}, -{79,-47,-3}, -{79,-47,-2}, -{79,-47,-1}, -{79,-47,0}, -{79,-47,1}, -{79,-47,2}, -{79,-47,3}, -{79,-47,4}, -{79,-47,5}, -{79,-47,6}, -{79,-47,7}, -{79,-47,8}, -{79,-47,9}, -{79,-47,10}, -{79,-47,11}, -{79,-47,12}, -{79,-47,13}, -{79,-47,14}, -{79,-47,15}, -{79,-47,16}, -{79,-47,17}, -{79,-47,18}, -{79,-47,19}, -{79,-47,20}, -{79,-47,21}, -{79,-47,22}, -{79,-47,23}, -{79,-47,24}, -{79,-47,25}, -{79,-47,26}, -{79,-47,27}, -{79,-47,28}, -{79,-47,29}, -{79,-47,30}, -{79,-47,31}, -{79,-47,32}, -{79,-47,33}, -{79,-47,34}, -{79,-47,35}, -{79,-47,36}, -{79,-47,37}, -{79,-47,38}, -{79,-47,39}, -{79,-47,40}, -{79,-47,41}, -{79,-47,42}, -{79,-47,43}, -{79,-47,44}, -{79,-47,45}, -{79,-47,46}, -{79,-47,47}, -{79,-47,48}, -{79,-47,49}, -{79,-47,50}, -{79,-47,51}, -{79,-47,52}, -{79,-47,53}, -{79,-47,54}, -{79,-47,55}, -{79,-47,56}, -{79,-47,57}, -{79,-47,58}, -{79,-47,59}, -{79,-47,60}, -{79,-47,61}, -{79,-47,62}, -{79,-47,63}, -{79,-47,64}, -{79,-47,65}, -{79,-47,66}, -{79,-47,67}, -{79,-47,68}, -{79,-47,69}, -{79,-47,70}, -{79,-47,71}, -{79,-47,72}, -{79,-47,73}, -{79,-47,74}, -{79,-47,75}, -{79,-47,76}, -{79,-47,77}, -{79,-46,-7}, -{79,-46,-6}, -{79,-46,-5}, -{79,-46,-4}, -{79,-46,-3}, -{79,-46,-2}, -{79,-46,-1}, -{79,-46,0}, -{79,-46,1}, -{79,-46,2}, -{79,-46,3}, -{79,-46,4}, -{79,-46,5}, -{79,-46,6}, -{79,-46,7}, -{79,-46,8}, -{79,-46,9}, -{79,-46,10}, -{79,-46,11}, -{79,-46,12}, -{79,-46,13}, -{79,-46,14}, -{79,-46,15}, -{79,-46,16}, -{79,-46,17}, -{79,-46,18}, -{79,-46,19}, -{79,-46,20}, -{79,-46,21}, -{79,-46,22}, -{79,-46,23}, -{79,-46,24}, -{79,-46,25}, -{79,-46,26}, -{79,-46,27}, -{79,-46,28}, -{79,-46,29}, -{79,-46,30}, -{79,-46,31}, -{79,-46,32}, -{79,-46,33}, -{79,-46,34}, -{79,-46,35}, -{79,-46,36}, -{79,-46,37}, -{79,-46,38}, -{79,-46,39}, -{79,-46,40}, -{79,-46,41}, -{79,-46,42}, -{79,-46,43}, -{79,-46,44}, -{79,-46,45}, -{79,-46,46}, -{79,-46,47}, -{79,-46,48}, -{79,-46,49}, -{79,-46,50}, -{79,-46,51}, -{79,-46,52}, -{79,-46,53}, -{79,-46,54}, -{79,-46,55}, -{79,-46,56}, -{79,-46,57}, -{79,-46,58}, -{79,-46,59}, -{79,-46,60}, -{79,-46,61}, -{79,-46,62}, -{79,-46,63}, -{79,-46,64}, -{79,-46,65}, -{79,-46,66}, -{79,-46,67}, -{79,-46,68}, -{79,-46,69}, -{79,-46,70}, -{79,-46,71}, -{79,-46,72}, -{79,-46,73}, -{79,-46,74}, -{79,-46,75}, -{79,-46,76}, -{79,-46,77}, -{79,-45,-9}, -{79,-45,-8}, -{79,-45,-7}, -{79,-45,-6}, -{79,-45,-5}, -{79,-45,-4}, -{79,-45,-3}, -{79,-45,-2}, -{79,-45,-1}, -{79,-45,0}, -{79,-45,1}, -{79,-45,2}, -{79,-45,3}, -{79,-45,4}, -{79,-45,5}, -{79,-45,6}, -{79,-45,7}, -{79,-45,8}, -{79,-45,9}, -{79,-45,10}, -{79,-45,11}, -{79,-45,12}, -{79,-45,13}, -{79,-45,14}, -{79,-45,15}, -{79,-45,16}, -{79,-45,17}, -{79,-45,18}, -{79,-45,19}, -{79,-45,20}, -{79,-45,21}, -{79,-45,22}, -{79,-45,23}, -{79,-45,24}, -{79,-45,25}, -{79,-45,26}, -{79,-45,27}, -{79,-45,28}, -{79,-45,29}, -{79,-45,30}, -{79,-45,31}, -{79,-45,32}, -{79,-45,33}, -{79,-45,34}, -{79,-45,35}, -{79,-45,36}, -{79,-45,37}, -{79,-45,38}, -{79,-45,39}, -{79,-45,40}, -{79,-45,41}, -{79,-45,42}, -{79,-45,43}, -{79,-45,44}, -{79,-45,45}, -{79,-45,46}, -{79,-45,47}, -{79,-45,48}, -{79,-45,49}, -{79,-45,50}, -{79,-45,51}, -{79,-45,52}, -{79,-45,53}, -{79,-45,54}, -{79,-45,55}, -{79,-45,56}, -{79,-45,57}, -{79,-45,58}, -{79,-45,59}, -{79,-45,60}, -{79,-45,61}, -{79,-45,62}, -{79,-45,63}, -{79,-45,64}, -{79,-45,65}, -{79,-45,66}, -{79,-45,67}, -{79,-45,68}, -{79,-45,69}, -{79,-45,70}, -{79,-45,71}, -{79,-45,72}, -{79,-45,73}, -{79,-45,74}, -{79,-45,75}, -{79,-45,76}, -{79,-45,77}, -{79,-44,-10}, -{79,-44,-9}, -{79,-44,-8}, -{79,-44,-7}, -{79,-44,-6}, -{79,-44,-5}, -{79,-44,-4}, -{79,-44,-3}, -{79,-44,-2}, -{79,-44,-1}, -{79,-44,0}, -{79,-44,1}, -{79,-44,2}, -{79,-44,3}, -{79,-44,4}, -{79,-44,5}, -{79,-44,6}, -{79,-44,7}, -{79,-44,8}, -{79,-44,9}, -{79,-44,10}, -{79,-44,11}, -{79,-44,12}, -{79,-44,13}, -{79,-44,14}, -{79,-44,15}, -{79,-44,16}, -{79,-44,17}, -{79,-44,18}, -{79,-44,19}, -{79,-44,20}, -{79,-44,21}, -{79,-44,22}, -{79,-44,23}, -{79,-44,24}, -{79,-44,25}, -{79,-44,26}, -{79,-44,27}, -{79,-44,28}, -{79,-44,29}, -{79,-44,30}, -{79,-44,31}, -{79,-44,32}, -{79,-44,33}, -{79,-44,34}, -{79,-44,35}, -{79,-44,36}, -{79,-44,37}, -{79,-44,38}, -{79,-44,39}, -{79,-44,40}, -{79,-44,41}, -{79,-44,42}, -{79,-44,43}, -{79,-44,44}, -{79,-44,45}, -{79,-44,46}, -{79,-44,47}, -{79,-44,48}, -{79,-44,49}, -{79,-44,50}, -{79,-44,51}, -{79,-44,52}, -{79,-44,53}, -{79,-44,54}, -{79,-44,55}, -{79,-44,56}, -{79,-44,57}, -{79,-44,58}, -{79,-44,59}, -{79,-44,60}, -{79,-44,61}, -{79,-44,62}, -{79,-44,63}, -{79,-44,64}, -{79,-44,65}, -{79,-44,66}, -{79,-44,67}, -{79,-44,68}, -{79,-44,69}, -{79,-44,70}, -{79,-44,71}, -{79,-44,72}, -{79,-44,73}, -{79,-44,74}, -{79,-44,75}, -{79,-44,76}, -{79,-44,77}, -{79,-44,78}, -{79,-43,-12}, -{79,-43,-11}, -{79,-43,-10}, -{79,-43,-9}, -{79,-43,-8}, -{79,-43,-7}, -{79,-43,-6}, -{79,-43,-5}, -{79,-43,-4}, -{79,-43,-3}, -{79,-43,-2}, -{79,-43,-1}, -{79,-43,0}, -{79,-43,1}, -{79,-43,2}, -{79,-43,3}, -{79,-43,4}, -{79,-43,5}, -{79,-43,6}, -{79,-43,7}, -{79,-43,8}, -{79,-43,9}, -{79,-43,10}, -{79,-43,11}, -{79,-43,12}, -{79,-43,13}, -{79,-43,14}, -{79,-43,15}, -{79,-43,16}, -{79,-43,17}, -{79,-43,18}, -{79,-43,19}, -{79,-43,20}, -{79,-43,21}, -{79,-43,22}, -{79,-43,23}, -{79,-43,24}, -{79,-43,25}, -{79,-43,26}, -{79,-43,27}, -{79,-43,28}, -{79,-43,29}, -{79,-43,30}, -{79,-43,31}, -{79,-43,32}, -{79,-43,33}, -{79,-43,34}, -{79,-43,35}, -{79,-43,36}, -{79,-43,37}, -{79,-43,38}, -{79,-43,39}, -{79,-43,40}, -{79,-43,41}, -{79,-43,42}, -{79,-43,43}, -{79,-43,44}, -{79,-43,45}, -{79,-43,46}, -{79,-43,47}, -{79,-43,48}, -{79,-43,49}, -{79,-43,50}, -{79,-43,51}, -{79,-43,52}, -{79,-43,53}, -{79,-43,54}, -{79,-43,55}, -{79,-43,56}, -{79,-43,57}, -{79,-43,58}, -{79,-43,59}, -{79,-43,60}, -{79,-43,61}, -{79,-43,62}, -{79,-43,63}, -{79,-43,64}, -{79,-43,65}, -{79,-43,66}, -{79,-43,67}, -{79,-43,68}, -{79,-43,69}, -{79,-43,70}, -{79,-43,71}, -{79,-43,72}, -{79,-43,73}, -{79,-43,74}, -{79,-43,75}, -{79,-43,76}, -{79,-43,77}, -{79,-43,78}, -{79,-42,-13}, -{79,-42,-12}, -{79,-42,-11}, -{79,-42,-10}, -{79,-42,-9}, -{79,-42,-8}, -{79,-42,-7}, -{79,-42,-6}, -{79,-42,-5}, -{79,-42,-4}, -{79,-42,-3}, -{79,-42,-2}, -{79,-42,-1}, -{79,-42,0}, -{79,-42,1}, -{79,-42,2}, -{79,-42,3}, -{79,-42,4}, -{79,-42,5}, -{79,-42,6}, -{79,-42,7}, -{79,-42,8}, -{79,-42,9}, -{79,-42,10}, -{79,-42,11}, -{79,-42,12}, -{79,-42,13}, -{79,-42,14}, -{79,-42,15}, -{79,-42,16}, -{79,-42,17}, -{79,-42,18}, -{79,-42,19}, -{79,-42,20}, -{79,-42,21}, -{79,-42,22}, -{79,-42,23}, -{79,-42,24}, -{79,-42,25}, -{79,-42,26}, -{79,-42,27}, -{79,-42,28}, -{79,-42,29}, -{79,-42,30}, -{79,-42,31}, -{79,-42,32}, -{79,-42,33}, -{79,-42,34}, -{79,-42,35}, -{79,-42,36}, -{79,-42,37}, -{79,-42,38}, -{79,-42,39}, -{79,-42,40}, -{79,-42,41}, -{79,-42,42}, -{79,-42,43}, -{79,-42,44}, -{79,-42,45}, -{79,-42,46}, -{79,-42,47}, -{79,-42,48}, -{79,-42,49}, -{79,-42,50}, -{79,-42,51}, -{79,-42,52}, -{79,-42,53}, -{79,-42,54}, -{79,-42,55}, -{79,-42,56}, -{79,-42,57}, -{79,-42,58}, -{79,-42,59}, -{79,-42,60}, -{79,-42,61}, -{79,-42,62}, -{79,-42,63}, -{79,-42,64}, -{79,-42,65}, -{79,-42,66}, -{79,-42,67}, -{79,-42,68}, -{79,-42,69}, -{79,-42,70}, -{79,-42,71}, -{79,-42,72}, -{79,-42,73}, -{79,-42,74}, -{79,-42,75}, -{79,-42,76}, -{79,-42,77}, -{79,-42,78}, -{79,-41,-15}, -{79,-41,-14}, -{79,-41,-13}, -{79,-41,-12}, -{79,-41,-11}, -{79,-41,-10}, -{79,-41,-9}, -{79,-41,-8}, -{79,-41,-7}, -{79,-41,-6}, -{79,-41,-5}, -{79,-41,-4}, -{79,-41,-3}, -{79,-41,-2}, -{79,-41,-1}, -{79,-41,0}, -{79,-41,1}, -{79,-41,2}, -{79,-41,3}, -{79,-41,4}, -{79,-41,5}, -{79,-41,6}, -{79,-41,7}, -{79,-41,8}, -{79,-41,9}, -{79,-41,10}, -{79,-41,11}, -{79,-41,12}, -{79,-41,13}, -{79,-41,14}, -{79,-41,15}, -{79,-41,16}, -{79,-41,17}, -{79,-41,18}, -{79,-41,19}, -{79,-41,20}, -{79,-41,21}, -{79,-41,22}, -{79,-41,23}, -{79,-41,24}, -{79,-41,25}, -{79,-41,26}, -{79,-41,27}, -{79,-41,28}, -{79,-41,29}, -{79,-41,30}, -{79,-41,31}, -{79,-41,32}, -{79,-41,33}, -{79,-41,34}, -{79,-41,35}, -{79,-41,36}, -{79,-41,37}, -{79,-41,38}, -{79,-41,39}, -{79,-41,40}, -{79,-41,41}, -{79,-41,42}, -{79,-41,43}, -{79,-41,44}, -{79,-41,45}, -{79,-41,46}, -{79,-41,47}, -{79,-41,48}, -{79,-41,49}, -{79,-41,50}, -{79,-41,51}, -{79,-41,52}, -{79,-41,53}, -{79,-41,54}, -{79,-41,55}, -{79,-41,56}, -{79,-41,57}, -{79,-41,58}, -{79,-41,59}, -{79,-41,60}, -{79,-41,61}, -{79,-41,62}, -{79,-41,63}, -{79,-41,64}, -{79,-41,65}, -{79,-41,66}, -{79,-41,67}, -{79,-41,68}, -{79,-41,69}, -{79,-41,70}, -{79,-41,71}, -{79,-41,72}, -{79,-41,73}, -{79,-41,74}, -{79,-41,75}, -{79,-41,76}, -{79,-41,77}, -{79,-41,78}, -{79,-40,-16}, -{79,-40,-15}, -{79,-40,-14}, -{79,-40,-13}, -{79,-40,-12}, -{79,-40,-11}, -{79,-40,-10}, -{79,-40,-9}, -{79,-40,-8}, -{79,-40,-7}, -{79,-40,-6}, -{79,-40,-5}, -{79,-40,-4}, -{79,-40,-3}, -{79,-40,-2}, -{79,-40,-1}, -{79,-40,0}, -{79,-40,1}, -{79,-40,2}, -{79,-40,3}, -{79,-40,4}, -{79,-40,5}, -{79,-40,6}, -{79,-40,7}, -{79,-40,8}, -{79,-40,9}, -{79,-40,10}, -{79,-40,11}, -{79,-40,12}, -{79,-40,13}, -{79,-40,14}, -{79,-40,15}, -{79,-40,16}, -{79,-40,17}, -{79,-40,18}, -{79,-40,19}, -{79,-40,20}, -{79,-40,21}, -{79,-40,22}, -{79,-40,23}, -{79,-40,24}, -{79,-40,25}, -{79,-40,26}, -{79,-40,27}, -{79,-40,28}, -{79,-40,29}, -{79,-40,30}, -{79,-40,31}, -{79,-40,32}, -{79,-40,33}, -{79,-40,34}, -{79,-40,35}, -{79,-40,36}, -{79,-40,37}, -{79,-40,38}, -{79,-40,39}, -{79,-40,40}, -{79,-40,41}, -{79,-40,42}, -{79,-40,43}, -{79,-40,44}, -{79,-40,45}, -{79,-40,46}, -{79,-40,47}, -{79,-40,48}, -{79,-40,49}, -{79,-40,50}, -{79,-40,51}, -{79,-40,52}, -{79,-40,53}, -{79,-40,54}, -{79,-40,55}, -{79,-40,56}, -{79,-40,57}, -{79,-40,58}, -{79,-40,59}, -{79,-40,60}, -{79,-40,61}, -{79,-40,62}, -{79,-40,63}, -{79,-40,64}, -{79,-40,65}, -{79,-40,66}, -{79,-40,67}, -{79,-40,68}, -{79,-40,69}, -{79,-40,70}, -{79,-40,71}, -{79,-40,72}, -{79,-40,73}, -{79,-40,74}, -{79,-40,75}, -{79,-40,76}, -{79,-40,77}, -{79,-40,78}, -{79,-39,-18}, -{79,-39,-17}, -{79,-39,-16}, -{79,-39,-15}, -{79,-39,-14}, -{79,-39,-13}, -{79,-39,-12}, -{79,-39,-11}, -{79,-39,-10}, -{79,-39,-9}, -{79,-39,-8}, -{79,-39,-7}, -{79,-39,-6}, -{79,-39,-5}, -{79,-39,-4}, -{79,-39,-3}, -{79,-39,-2}, -{79,-39,-1}, -{79,-39,0}, -{79,-39,1}, -{79,-39,2}, -{79,-39,3}, -{79,-39,4}, -{79,-39,5}, -{79,-39,6}, -{79,-39,7}, -{79,-39,8}, -{79,-39,9}, -{79,-39,10}, -{79,-39,11}, -{79,-39,12}, -{79,-39,13}, -{79,-39,14}, -{79,-39,15}, -{79,-39,16}, -{79,-39,17}, -{79,-39,18}, -{79,-39,19}, -{79,-39,20}, -{79,-39,21}, -{79,-39,22}, -{79,-39,23}, -{79,-39,24}, -{79,-39,25}, -{79,-39,26}, -{79,-39,27}, -{79,-39,28}, -{79,-39,29}, -{79,-39,30}, -{79,-39,31}, -{79,-39,32}, -{79,-39,33}, -{79,-39,34}, -{79,-39,35}, -{79,-39,36}, -{79,-39,37}, -{79,-39,38}, -{79,-39,39}, -{79,-39,40}, -{79,-39,41}, -{79,-39,42}, -{79,-39,43}, -{79,-39,44}, -{79,-39,45}, -{79,-39,46}, -{79,-39,47}, -{79,-39,48}, -{79,-39,49}, -{79,-39,50}, -{79,-39,51}, -{79,-39,52}, -{79,-39,53}, -{79,-39,54}, -{79,-39,55}, -{79,-39,56}, -{79,-39,57}, -{79,-39,58}, -{79,-39,59}, -{79,-39,60}, -{79,-39,61}, -{79,-39,62}, -{79,-39,63}, -{79,-39,64}, -{79,-39,65}, -{79,-39,66}, -{79,-39,67}, -{79,-39,68}, -{79,-39,69}, -{79,-39,70}, -{79,-39,71}, -{79,-39,72}, -{79,-39,73}, -{79,-39,74}, -{79,-39,75}, -{79,-39,76}, -{79,-39,77}, -{79,-39,78}, -{79,-38,-19}, -{79,-38,-18}, -{79,-38,-17}, -{79,-38,-16}, -{79,-38,-15}, -{79,-38,-14}, -{79,-38,-13}, -{79,-38,-12}, -{79,-38,-11}, -{79,-38,-10}, -{79,-38,-9}, -{79,-38,-8}, -{79,-38,-7}, -{79,-38,-6}, -{79,-38,-5}, -{79,-38,-4}, -{79,-38,-3}, -{79,-38,-2}, -{79,-38,-1}, -{79,-38,0}, -{79,-38,1}, -{79,-38,2}, -{79,-38,3}, -{79,-38,4}, -{79,-38,5}, -{79,-38,6}, -{79,-38,7}, -{79,-38,8}, -{79,-38,9}, -{79,-38,10}, -{79,-38,11}, -{79,-38,12}, -{79,-38,13}, -{79,-38,14}, -{79,-38,15}, -{79,-38,16}, -{79,-38,17}, -{79,-38,18}, -{79,-38,19}, -{79,-38,20}, -{79,-38,21}, -{79,-38,22}, -{79,-38,23}, -{79,-38,24}, -{79,-38,25}, -{79,-38,26}, -{79,-38,27}, -{79,-38,28}, -{79,-38,29}, -{79,-38,30}, -{79,-38,31}, -{79,-38,32}, -{79,-38,33}, -{79,-38,34}, -{79,-38,35}, -{79,-38,36}, -{79,-38,37}, -{79,-38,38}, -{79,-38,39}, -{79,-38,40}, -{79,-38,41}, -{79,-38,42}, -{79,-38,43}, -{79,-38,44}, -{79,-38,45}, -{79,-38,46}, -{79,-38,47}, -{79,-38,48}, -{79,-38,49}, -{79,-38,50}, -{79,-38,51}, -{79,-38,52}, -{79,-38,53}, -{79,-38,54}, -{79,-38,55}, -{79,-38,56}, -{79,-38,57}, -{79,-38,58}, -{79,-38,59}, -{79,-38,60}, -{79,-38,61}, -{79,-38,62}, -{79,-38,63}, -{79,-38,64}, -{79,-38,65}, -{79,-38,66}, -{79,-38,67}, -{79,-38,68}, -{79,-38,69}, -{79,-38,70}, -{79,-38,71}, -{79,-38,72}, -{79,-38,73}, -{79,-38,74}, -{79,-38,75}, -{79,-38,76}, -{79,-38,77}, -{79,-38,78}, -{79,-37,-21}, -{79,-37,-20}, -{79,-37,-19}, -{79,-37,-18}, -{79,-37,-17}, -{79,-37,-16}, -{79,-37,-15}, -{79,-37,-14}, -{79,-37,-13}, -{79,-37,-12}, -{79,-37,-11}, -{79,-37,-10}, -{79,-37,-9}, -{79,-37,-8}, -{79,-37,-7}, -{79,-37,-6}, -{79,-37,-5}, -{79,-37,-4}, -{79,-37,-3}, -{79,-37,-2}, -{79,-37,-1}, -{79,-37,0}, -{79,-37,1}, -{79,-37,2}, -{79,-37,3}, -{79,-37,4}, -{79,-37,5}, -{79,-37,6}, -{79,-37,7}, -{79,-37,8}, -{79,-37,9}, -{79,-37,10}, -{79,-37,11}, -{79,-37,12}, -{79,-37,13}, -{79,-37,14}, -{79,-37,15}, -{79,-37,16}, -{79,-37,17}, -{79,-37,18}, -{79,-37,19}, -{79,-37,20}, -{79,-37,21}, -{79,-37,22}, -{79,-37,23}, -{79,-37,24}, -{79,-37,25}, -{79,-37,26}, -{79,-37,27}, -{79,-37,28}, -{79,-37,29}, -{79,-37,30}, -{79,-37,31}, -{79,-37,32}, -{79,-37,33}, -{79,-37,34}, -{79,-37,35}, -{79,-37,36}, -{79,-37,37}, -{79,-37,38}, -{79,-37,39}, -{79,-37,40}, -{79,-37,41}, -{79,-37,42}, -{79,-37,43}, -{79,-37,44}, -{79,-37,45}, -{79,-37,46}, -{79,-37,47}, -{79,-37,48}, -{79,-37,49}, -{79,-37,50}, -{79,-37,51}, -{79,-37,52}, -{79,-37,53}, -{79,-37,54}, -{79,-37,55}, -{79,-37,56}, -{79,-37,57}, -{79,-37,58}, -{79,-37,59}, -{79,-37,60}, -{79,-37,61}, -{79,-37,62}, -{79,-37,63}, -{79,-37,64}, -{79,-37,65}, -{79,-37,66}, -{79,-37,67}, -{79,-37,68}, -{79,-37,69}, -{79,-37,70}, -{79,-37,71}, -{79,-37,72}, -{79,-37,73}, -{79,-37,74}, -{79,-37,75}, -{79,-37,76}, -{79,-37,77}, -{79,-37,78}, -{79,-36,-22}, -{79,-36,-21}, -{79,-36,-20}, -{79,-36,-19}, -{79,-36,-18}, -{79,-36,-17}, -{79,-36,-16}, -{79,-36,-15}, -{79,-36,-14}, -{79,-36,-13}, -{79,-36,-12}, -{79,-36,-11}, -{79,-36,-10}, -{79,-36,-9}, -{79,-36,-8}, -{79,-36,-7}, -{79,-36,-6}, -{79,-36,-5}, -{79,-36,-4}, -{79,-36,-3}, -{79,-36,-2}, -{79,-36,-1}, -{79,-36,0}, -{79,-36,1}, -{79,-36,2}, -{79,-36,3}, -{79,-36,4}, -{79,-36,5}, -{79,-36,6}, -{79,-36,7}, -{79,-36,8}, -{79,-36,9}, -{79,-36,10}, -{79,-36,11}, -{79,-36,12}, -{79,-36,13}, -{79,-36,14}, -{79,-36,15}, -{79,-36,16}, -{79,-36,17}, -{79,-36,18}, -{79,-36,19}, -{79,-36,20}, -{79,-36,21}, -{79,-36,22}, -{79,-36,23}, -{79,-36,24}, -{79,-36,25}, -{79,-36,26}, -{79,-36,27}, -{79,-36,28}, -{79,-36,29}, -{79,-36,30}, -{79,-36,31}, -{79,-36,32}, -{79,-36,33}, -{79,-36,34}, -{79,-36,35}, -{79,-36,36}, -{79,-36,37}, -{79,-36,38}, -{79,-36,39}, -{79,-36,40}, -{79,-36,41}, -{79,-36,42}, -{79,-36,43}, -{79,-36,44}, -{79,-36,45}, -{79,-36,46}, -{79,-36,47}, -{79,-36,48}, -{79,-36,49}, -{79,-36,50}, -{79,-36,51}, -{79,-36,52}, -{79,-36,53}, -{79,-36,54}, -{79,-36,55}, -{79,-36,56}, -{79,-36,57}, -{79,-36,58}, -{79,-36,59}, -{79,-36,60}, -{79,-36,61}, -{79,-36,62}, -{79,-36,63}, -{79,-36,64}, -{79,-36,65}, -{79,-36,66}, -{79,-36,67}, -{79,-36,68}, -{79,-36,69}, -{79,-36,70}, -{79,-36,71}, -{79,-36,72}, -{79,-36,73}, -{79,-36,74}, -{79,-36,75}, -{79,-36,76}, -{79,-36,77}, -{79,-36,78}, -{79,-35,-24}, -{79,-35,-23}, -{79,-35,-22}, -{79,-35,-21}, -{79,-35,-20}, -{79,-35,-19}, -{79,-35,-18}, -{79,-35,-17}, -{79,-35,-16}, -{79,-35,-15}, -{79,-35,-14}, -{79,-35,-13}, -{79,-35,-12}, -{79,-35,-11}, -{79,-35,-10}, -{79,-35,-9}, -{79,-35,-8}, -{79,-35,-7}, -{79,-35,-6}, -{79,-35,-5}, -{79,-35,-4}, -{79,-35,-3}, -{79,-35,-2}, -{79,-35,-1}, -{79,-35,0}, -{79,-35,1}, -{79,-35,2}, -{79,-35,3}, -{79,-35,4}, -{79,-35,5}, -{79,-35,6}, -{79,-35,7}, -{79,-35,8}, -{79,-35,9}, -{79,-35,10}, -{79,-35,11}, -{79,-35,12}, -{79,-35,13}, -{79,-35,14}, -{79,-35,15}, -{79,-35,16}, -{79,-35,17}, -{79,-35,18}, -{79,-35,19}, -{79,-35,20}, -{79,-35,21}, -{79,-35,22}, -{79,-35,23}, -{79,-35,24}, -{79,-35,25}, -{79,-35,26}, -{79,-35,27}, -{79,-35,28}, -{79,-35,29}, -{79,-35,30}, -{79,-35,31}, -{79,-35,32}, -{79,-35,33}, -{79,-35,34}, -{79,-35,35}, -{79,-35,36}, -{79,-35,37}, -{79,-35,38}, -{79,-35,39}, -{79,-35,40}, -{79,-35,41}, -{79,-35,42}, -{79,-35,43}, -{79,-35,44}, -{79,-35,45}, -{79,-35,46}, -{79,-35,47}, -{79,-35,48}, -{79,-35,49}, -{79,-35,50}, -{79,-35,51}, -{79,-35,52}, -{79,-35,53}, -{79,-35,54}, -{79,-35,55}, -{79,-35,56}, -{79,-35,57}, -{79,-35,58}, -{79,-35,59}, -{79,-35,60}, -{79,-35,61}, -{79,-35,62}, -{79,-35,63}, -{79,-35,64}, -{79,-35,65}, -{79,-35,66}, -{79,-35,67}, -{79,-35,68}, -{79,-35,69}, -{79,-35,70}, -{79,-35,71}, -{79,-35,72}, -{79,-35,73}, -{79,-35,74}, -{79,-35,75}, -{79,-35,76}, -{79,-35,77}, -{79,-35,78}, -{79,-34,-25}, -{79,-34,-24}, -{79,-34,-23}, -{79,-34,-22}, -{79,-34,-21}, -{79,-34,-20}, -{79,-34,-19}, -{79,-34,-18}, -{79,-34,-17}, -{79,-34,-16}, -{79,-34,-15}, -{79,-34,-14}, -{79,-34,-13}, -{79,-34,-12}, -{79,-34,-11}, -{79,-34,-10}, -{79,-34,-9}, -{79,-34,-8}, -{79,-34,-7}, -{79,-34,-6}, -{79,-34,-5}, -{79,-34,-4}, -{79,-34,-3}, -{79,-34,-2}, -{79,-34,-1}, -{79,-34,0}, -{79,-34,1}, -{79,-34,2}, -{79,-34,3}, -{79,-34,4}, -{79,-34,5}, -{79,-34,6}, -{79,-34,7}, -{79,-34,8}, -{79,-34,9}, -{79,-34,10}, -{79,-34,11}, -{79,-34,12}, -{79,-34,13}, -{79,-34,14}, -{79,-34,15}, -{79,-34,16}, -{79,-34,17}, -{79,-34,18}, -{79,-34,19}, -{79,-34,20}, -{79,-34,21}, -{79,-34,22}, -{79,-34,23}, -{79,-34,24}, -{79,-34,25}, -{79,-34,26}, -{79,-34,27}, -{79,-34,28}, -{79,-34,29}, -{79,-34,30}, -{79,-34,31}, -{79,-34,32}, -{79,-34,33}, -{79,-34,34}, -{79,-34,35}, -{79,-34,36}, -{79,-34,37}, -{79,-34,38}, -{79,-34,39}, -{79,-34,40}, -{79,-34,41}, -{79,-34,42}, -{79,-34,43}, -{79,-34,44}, -{79,-34,45}, -{79,-34,46}, -{79,-34,47}, -{79,-34,48}, -{79,-34,49}, -{79,-34,50}, -{79,-34,51}, -{79,-34,52}, -{79,-34,53}, -{79,-34,54}, -{79,-34,55}, -{79,-34,56}, -{79,-34,57}, -{79,-34,58}, -{79,-34,59}, -{79,-34,60}, -{79,-34,61}, -{79,-34,62}, -{79,-34,63}, -{79,-34,64}, -{79,-34,65}, -{79,-34,66}, -{79,-34,67}, -{79,-34,68}, -{79,-34,69}, -{79,-34,70}, -{79,-34,71}, -{79,-34,72}, -{79,-34,73}, -{79,-34,74}, -{79,-34,75}, -{79,-34,76}, -{79,-34,77}, -{79,-34,78}, -{79,-33,-27}, -{79,-33,-26}, -{79,-33,-25}, -{79,-33,-24}, -{79,-33,-23}, -{79,-33,-22}, -{79,-33,-21}, -{79,-33,-20}, -{79,-33,-19}, -{79,-33,-18}, -{79,-33,-17}, -{79,-33,-16}, -{79,-33,-15}, -{79,-33,-14}, -{79,-33,-13}, -{79,-33,-12}, -{79,-33,-11}, -{79,-33,-10}, -{79,-33,-9}, -{79,-33,-8}, -{79,-33,-7}, -{79,-33,-6}, -{79,-33,-5}, -{79,-33,-4}, -{79,-33,-3}, -{79,-33,-2}, -{79,-33,-1}, -{79,-33,0}, -{79,-33,1}, -{79,-33,2}, -{79,-33,3}, -{79,-33,4}, -{79,-33,5}, -{79,-33,6}, -{79,-33,7}, -{79,-33,8}, -{79,-33,9}, -{79,-33,10}, -{79,-33,11}, -{79,-33,12}, -{79,-33,13}, -{79,-33,14}, -{79,-33,15}, -{79,-33,16}, -{79,-33,17}, -{79,-33,18}, -{79,-33,19}, -{79,-33,20}, -{79,-33,21}, -{79,-33,22}, -{79,-33,23}, -{79,-33,24}, -{79,-33,25}, -{79,-33,26}, -{79,-33,27}, -{79,-33,28}, -{79,-33,29}, -{79,-33,30}, -{79,-33,31}, -{79,-33,32}, -{79,-33,33}, -{79,-33,34}, -{79,-33,35}, -{79,-33,36}, -{79,-33,37}, -{79,-33,38}, -{79,-33,39}, -{79,-33,40}, -{79,-33,41}, -{79,-33,42}, -{79,-33,43}, -{79,-33,44}, -{79,-33,45}, -{79,-33,46}, -{79,-33,47}, -{79,-33,48}, -{79,-33,49}, -{79,-33,50}, -{79,-33,51}, -{79,-33,52}, -{79,-33,53}, -{79,-33,54}, -{79,-33,55}, -{79,-33,56}, -{79,-33,57}, -{79,-33,58}, -{79,-33,59}, -{79,-33,60}, -{79,-33,61}, -{79,-33,62}, -{79,-33,63}, -{79,-33,64}, -{79,-33,65}, -{79,-33,66}, -{79,-33,67}, -{79,-33,68}, -{79,-33,69}, -{79,-33,70}, -{79,-33,71}, -{79,-33,72}, -{79,-33,73}, -{79,-33,74}, -{79,-33,75}, -{79,-33,76}, -{79,-33,77}, -{79,-33,78}, -{79,-32,-28}, -{79,-32,-27}, -{79,-32,-26}, -{79,-32,-25}, -{79,-32,-24}, -{79,-32,-23}, -{79,-32,-22}, -{79,-32,-21}, -{79,-32,-20}, -{79,-32,-19}, -{79,-32,-18}, -{79,-32,-17}, -{79,-32,-16}, -{79,-32,-15}, -{79,-32,-14}, -{79,-32,-13}, -{79,-32,-12}, -{79,-32,-11}, -{79,-32,-10}, -{79,-32,-9}, -{79,-32,-8}, -{79,-32,-7}, -{79,-32,-6}, -{79,-32,-5}, -{79,-32,-4}, -{79,-32,-3}, -{79,-32,-2}, -{79,-32,-1}, -{79,-32,0}, -{79,-32,1}, -{79,-32,2}, -{79,-32,3}, -{79,-32,4}, -{79,-32,5}, -{79,-32,6}, -{79,-32,7}, -{79,-32,8}, -{79,-32,9}, -{79,-32,10}, -{79,-32,11}, -{79,-32,12}, -{79,-32,13}, -{79,-32,14}, -{79,-32,15}, -{79,-32,16}, -{79,-32,17}, -{79,-32,18}, -{79,-32,19}, -{79,-32,20}, -{79,-32,21}, -{79,-32,22}, -{79,-32,23}, -{79,-32,24}, -{79,-32,25}, -{79,-32,26}, -{79,-32,27}, -{79,-32,28}, -{79,-32,29}, -{79,-32,30}, -{79,-32,31}, -{79,-32,32}, -{79,-32,33}, -{79,-32,34}, -{79,-32,35}, -{79,-32,36}, -{79,-32,37}, -{79,-32,38}, -{79,-32,39}, -{79,-32,40}, -{79,-32,41}, -{79,-32,42}, -{79,-32,43}, -{79,-32,44}, -{79,-32,45}, -{79,-32,46}, -{79,-32,47}, -{79,-32,48}, -{79,-32,49}, -{79,-32,50}, -{79,-32,51}, -{79,-32,52}, -{79,-32,53}, -{79,-32,54}, -{79,-32,55}, -{79,-32,56}, -{79,-32,57}, -{79,-32,58}, -{79,-32,59}, -{79,-32,60}, -{79,-32,61}, -{79,-32,62}, -{79,-32,63}, -{79,-32,64}, -{79,-32,65}, -{79,-32,66}, -{79,-32,67}, -{79,-32,68}, -{79,-32,69}, -{79,-32,70}, -{79,-32,71}, -{79,-32,72}, -{79,-32,73}, -{79,-32,74}, -{79,-32,75}, -{79,-32,76}, -{79,-32,77}, -{79,-32,78}, -{79,-31,-29}, -{79,-31,-28}, -{79,-31,-27}, -{79,-31,-26}, -{79,-31,-25}, -{79,-31,-24}, -{79,-31,-23}, -{79,-31,-22}, -{79,-31,-21}, -{79,-31,-20}, -{79,-31,-19}, -{79,-31,-18}, -{79,-31,-17}, -{79,-31,-16}, -{79,-31,-15}, -{79,-31,-14}, -{79,-31,-13}, -{79,-31,-12}, -{79,-31,-11}, -{79,-31,-10}, -{79,-31,-9}, -{79,-31,-8}, -{79,-31,-7}, -{79,-31,-6}, -{79,-31,-5}, -{79,-31,-4}, -{79,-31,-3}, -{79,-31,-2}, -{79,-31,-1}, -{79,-31,0}, -{79,-31,1}, -{79,-31,2}, -{79,-31,3}, -{79,-31,4}, -{79,-31,5}, -{79,-31,6}, -{79,-31,7}, -{79,-31,8}, -{79,-31,9}, -{79,-31,10}, -{79,-31,11}, -{79,-31,12}, -{79,-31,13}, -{79,-31,14}, -{79,-31,15}, -{79,-31,16}, -{79,-31,17}, -{79,-31,18}, -{79,-31,19}, -{79,-31,20}, -{79,-31,21}, -{79,-31,22}, -{79,-31,23}, -{79,-31,24}, -{79,-31,25}, -{79,-31,26}, -{79,-31,27}, -{79,-31,28}, -{79,-31,29}, -{79,-31,30}, -{79,-31,31}, -{79,-31,32}, -{79,-31,33}, -{79,-31,34}, -{79,-31,35}, -{79,-31,36}, -{79,-31,37}, -{79,-31,38}, -{79,-31,39}, -{79,-31,40}, -{79,-31,41}, -{79,-31,42}, -{79,-31,43}, -{79,-31,44}, -{79,-31,45}, -{79,-31,46}, -{79,-31,47}, -{79,-31,48}, -{79,-31,49}, -{79,-31,50}, -{79,-31,51}, -{79,-31,52}, -{79,-31,53}, -{79,-31,54}, -{79,-31,55}, -{79,-31,56}, -{79,-31,57}, -{79,-31,58}, -{79,-31,59}, -{79,-31,60}, -{79,-31,61}, -{79,-31,62}, -{79,-31,63}, -{79,-31,64}, -{79,-31,65}, -{79,-31,66}, -{79,-31,67}, -{79,-31,68}, -{79,-31,69}, -{79,-31,70}, -{79,-31,71}, -{79,-31,72}, -{79,-31,73}, -{79,-31,74}, -{79,-31,75}, -{79,-31,76}, -{79,-31,77}, -{79,-31,78}, -{79,-30,-31}, -{79,-30,-30}, -{79,-30,-29}, -{79,-30,-28}, -{79,-30,-27}, -{79,-30,-26}, -{79,-30,-25}, -{79,-30,-24}, -{79,-30,-23}, -{79,-30,-22}, -{79,-30,-21}, -{79,-30,-20}, -{79,-30,-19}, -{79,-30,-18}, -{79,-30,-17}, -{79,-30,-16}, -{79,-30,-15}, -{79,-30,-14}, -{79,-30,-13}, -{79,-30,-12}, -{79,-30,-11}, -{79,-30,-10}, -{79,-30,-9}, -{79,-30,-8}, -{79,-30,-7}, -{79,-30,-6}, -{79,-30,-5}, -{79,-30,-4}, -{79,-30,-3}, -{79,-30,-2}, -{79,-30,-1}, -{79,-30,0}, -{79,-30,1}, -{79,-30,2}, -{79,-30,3}, -{79,-30,4}, -{79,-30,5}, -{79,-30,6}, -{79,-30,7}, -{79,-30,8}, -{79,-30,9}, -{79,-30,10}, -{79,-30,11}, -{79,-30,12}, -{79,-30,13}, -{79,-30,14}, -{79,-30,15}, -{79,-30,16}, -{79,-30,17}, -{79,-30,18}, -{79,-30,19}, -{79,-30,20}, -{79,-30,21}, -{79,-30,22}, -{79,-30,23}, -{79,-30,24}, -{79,-30,25}, -{79,-30,26}, -{79,-30,27}, -{79,-30,28}, -{79,-30,29}, -{79,-30,30}, -{79,-30,31}, -{79,-30,32}, -{79,-30,33}, -{79,-30,34}, -{79,-30,35}, -{79,-30,36}, -{79,-30,37}, -{79,-30,38}, -{79,-30,39}, -{79,-30,40}, -{79,-30,41}, -{79,-30,42}, -{79,-30,43}, -{79,-30,44}, -{79,-30,45}, -{79,-30,46}, -{79,-30,47}, -{79,-30,48}, -{79,-30,49}, -{79,-30,50}, -{79,-30,51}, -{79,-30,52}, -{79,-30,53}, -{79,-30,54}, -{79,-30,55}, -{79,-30,56}, -{79,-30,57}, -{79,-30,58}, -{79,-30,59}, -{79,-30,60}, -{79,-30,61}, -{79,-30,62}, -{79,-30,63}, -{79,-30,64}, -{79,-30,65}, -{79,-30,66}, -{79,-30,67}, -{79,-30,68}, -{79,-30,69}, -{79,-30,70}, -{79,-30,71}, -{79,-30,72}, -{79,-30,73}, -{79,-30,74}, -{79,-30,75}, -{79,-30,76}, -{79,-30,77}, -{79,-30,78}, -{79,-29,-32}, -{79,-29,-31}, -{79,-29,-30}, -{79,-29,-29}, -{79,-29,-28}, -{79,-29,-27}, -{79,-29,-26}, -{79,-29,-25}, -{79,-29,-24}, -{79,-29,-23}, -{79,-29,-22}, -{79,-29,-21}, -{79,-29,-20}, -{79,-29,-19}, -{79,-29,-18}, -{79,-29,-17}, -{79,-29,-16}, -{79,-29,-15}, -{79,-29,-14}, -{79,-29,-13}, -{79,-29,-12}, -{79,-29,-11}, -{79,-29,-10}, -{79,-29,-9}, -{79,-29,-8}, -{79,-29,-7}, -{79,-29,-6}, -{79,-29,-5}, -{79,-29,-4}, -{79,-29,-3}, -{79,-29,-2}, -{79,-29,-1}, -{79,-29,0}, -{79,-29,1}, -{79,-29,2}, -{79,-29,3}, -{79,-29,4}, -{79,-29,5}, -{79,-29,6}, -{79,-29,7}, -{79,-29,8}, -{79,-29,9}, -{79,-29,10}, -{79,-29,11}, -{79,-29,12}, -{79,-29,13}, -{79,-29,14}, -{79,-29,15}, -{79,-29,16}, -{79,-29,17}, -{79,-29,18}, -{79,-29,19}, -{79,-29,20}, -{79,-29,21}, -{79,-29,22}, -{79,-29,23}, -{79,-29,24}, -{79,-29,25}, -{79,-29,26}, -{79,-29,27}, -{79,-29,28}, -{79,-29,29}, -{79,-29,30}, -{79,-29,31}, -{79,-29,32}, -{79,-29,33}, -{79,-29,34}, -{79,-29,35}, -{79,-29,36}, -{79,-29,37}, -{79,-29,38}, -{79,-29,39}, -{79,-29,40}, -{79,-29,41}, -{79,-29,42}, -{79,-29,43}, -{79,-29,44}, -{79,-29,45}, -{79,-29,46}, -{79,-29,47}, -{79,-29,48}, -{79,-29,49}, -{79,-29,50}, -{79,-29,51}, -{79,-29,52}, -{79,-29,53}, -{79,-29,54}, -{79,-29,55}, -{79,-29,56}, -{79,-29,57}, -{79,-29,58}, -{79,-29,59}, -{79,-29,60}, -{79,-29,61}, -{79,-29,62}, -{79,-29,63}, -{79,-29,64}, -{79,-29,65}, -{79,-29,66}, -{79,-29,67}, -{79,-29,68}, -{79,-29,69}, -{79,-29,70}, -{79,-29,71}, -{79,-29,72}, -{79,-29,73}, -{79,-29,74}, -{79,-29,75}, -{79,-29,76}, -{79,-29,77}, -{79,-29,78}, -{79,-28,-32}, -{79,-28,-31}, -{79,-28,-30}, -{79,-28,-29}, -{79,-28,-28}, -{79,-28,-27}, -{79,-28,-26}, -{79,-28,-25}, -{79,-28,-24}, -{79,-28,-23}, -{79,-28,-22}, -{79,-28,-21}, -{79,-28,-20}, -{79,-28,-19}, -{79,-28,-18}, -{79,-28,-17}, -{79,-28,-16}, -{79,-28,-15}, -{79,-28,-14}, -{79,-28,-13}, -{79,-28,-12}, -{79,-28,-11}, -{79,-28,-10}, -{79,-28,-9}, -{79,-28,-8}, -{79,-28,-7}, -{79,-28,-6}, -{79,-28,-5}, -{79,-28,-4}, -{79,-28,-3}, -{79,-28,-2}, -{79,-28,-1}, -{79,-28,0}, -{79,-28,1}, -{79,-28,2}, -{79,-28,3}, -{79,-28,4}, -{79,-28,5}, -{79,-28,6}, -{79,-28,7}, -{79,-28,8}, -{79,-28,9}, -{79,-28,10}, -{79,-28,11}, -{79,-28,12}, -{79,-28,13}, -{79,-28,14}, -{79,-28,15}, -{79,-28,16}, -{79,-28,17}, -{79,-28,18}, -{79,-28,19}, -{79,-28,20}, -{79,-28,21}, -{79,-28,22}, -{79,-28,23}, -{79,-28,24}, -{79,-28,25}, -{79,-28,26}, -{79,-28,27}, -{79,-28,28}, -{79,-28,29}, -{79,-28,30}, -{79,-28,31}, -{79,-28,32}, -{79,-28,33}, -{79,-28,34}, -{79,-28,35}, -{79,-28,36}, -{79,-28,37}, -{79,-28,38}, -{79,-28,39}, -{79,-28,40}, -{79,-28,41}, -{79,-28,42}, -{79,-28,43}, -{79,-28,44}, -{79,-28,45}, -{79,-28,46}, -{79,-28,47}, -{79,-28,48}, -{79,-28,49}, -{79,-28,50}, -{79,-28,51}, -{79,-28,52}, -{79,-28,53}, -{79,-28,54}, -{79,-28,55}, -{79,-28,56}, -{79,-28,57}, -{79,-28,58}, -{79,-28,59}, -{79,-28,60}, -{79,-28,61}, -{79,-28,62}, -{79,-28,63}, -{79,-28,64}, -{79,-28,65}, -{79,-28,66}, -{79,-28,67}, -{79,-28,68}, -{79,-28,69}, -{79,-28,70}, -{79,-28,71}, -{79,-28,72}, -{79,-28,73}, -{79,-28,74}, -{79,-28,75}, -{79,-28,76}, -{79,-28,77}, -{79,-28,78}, -{79,-27,-32}, -{79,-27,-31}, -{79,-27,-30}, -{79,-27,-29}, -{79,-27,-28}, -{79,-27,-27}, -{79,-27,-26}, -{79,-27,-25}, -{79,-27,-24}, -{79,-27,-23}, -{79,-27,-22}, -{79,-27,-21}, -{79,-27,-20}, -{79,-27,-19}, -{79,-27,-18}, -{79,-27,-17}, -{79,-27,-16}, -{79,-27,-15}, -{79,-27,-14}, -{79,-27,-13}, -{79,-27,-12}, -{79,-27,-11}, -{79,-27,-10}, -{79,-27,-9}, -{79,-27,-8}, -{79,-27,-7}, -{79,-27,-6}, -{79,-27,-5}, -{79,-27,-4}, -{79,-27,-3}, -{79,-27,-2}, -{79,-27,-1}, -{79,-27,0}, -{79,-27,1}, -{79,-27,2}, -{79,-27,3}, -{79,-27,4}, -{79,-27,5}, -{79,-27,6}, -{79,-27,7}, -{79,-27,8}, -{79,-27,9}, -{79,-27,10}, -{79,-27,11}, -{79,-27,12}, -{79,-27,13}, -{79,-27,14}, -{79,-27,15}, -{79,-27,16}, -{79,-27,17}, -{79,-27,18}, -{79,-27,19}, -{79,-27,20}, -{79,-27,21}, -{79,-27,22}, -{79,-27,23}, -{79,-27,24}, -{79,-27,25}, -{79,-27,26}, -{79,-27,27}, -{79,-27,28}, -{79,-27,29}, -{79,-27,30}, -{79,-27,31}, -{79,-27,32}, -{79,-27,33}, -{79,-27,34}, -{79,-27,35}, -{79,-27,36}, -{79,-27,37}, -{79,-27,38}, -{79,-27,39}, -{79,-27,40}, -{79,-27,41}, -{79,-27,42}, -{79,-27,43}, -{79,-27,44}, -{79,-27,45}, -{79,-27,46}, -{79,-27,47}, -{79,-27,48}, -{79,-27,49}, -{79,-27,50}, -{79,-27,51}, -{79,-27,52}, -{79,-27,53}, -{79,-27,54}, -{79,-27,55}, -{79,-27,56}, -{79,-27,57}, -{79,-27,58}, -{79,-27,59}, -{79,-27,60}, -{79,-27,61}, -{79,-27,62}, -{79,-27,63}, -{79,-27,64}, -{79,-27,65}, -{79,-27,66}, -{79,-27,67}, -{79,-27,68}, -{79,-27,69}, -{79,-27,70}, -{79,-27,71}, -{79,-27,72}, -{79,-27,73}, -{79,-27,74}, -{79,-27,75}, -{79,-27,76}, -{79,-27,77}, -{79,-27,78}, -{79,-26,-32}, -{79,-26,-31}, -{79,-26,-30}, -{79,-26,-29}, -{79,-26,-28}, -{79,-26,-27}, -{79,-26,-26}, -{79,-26,-25}, -{79,-26,-24}, -{79,-26,-23}, -{79,-26,-22}, -{79,-26,-21}, -{79,-26,-20}, -{79,-26,-19}, -{79,-26,-18}, -{79,-26,-17}, -{79,-26,-16}, -{79,-26,-15}, -{79,-26,-14}, -{79,-26,-13}, -{79,-26,-12}, -{79,-26,-11}, -{79,-26,-10}, -{79,-26,-9}, -{79,-26,-8}, -{79,-26,-7}, -{79,-26,-6}, -{79,-26,-5}, -{79,-26,-4}, -{79,-26,-3}, -{79,-26,-2}, -{79,-26,-1}, -{79,-26,0}, -{79,-26,1}, -{79,-26,2}, -{79,-26,3}, -{79,-26,4}, -{79,-26,5}, -{79,-26,6}, -{79,-26,7}, -{79,-26,8}, -{79,-26,9}, -{79,-26,10}, -{79,-26,11}, -{79,-26,12}, -{79,-26,13}, -{79,-26,14}, -{79,-26,15}, -{79,-26,16}, -{79,-26,17}, -{79,-26,18}, -{79,-26,19}, -{79,-26,20}, -{79,-26,21}, -{79,-26,22}, -{79,-26,23}, -{79,-26,24}, -{79,-26,25}, -{79,-26,26}, -{79,-26,27}, -{79,-26,28}, -{79,-26,29}, -{79,-26,30}, -{79,-26,31}, -{79,-26,32}, -{79,-26,33}, -{79,-26,34}, -{79,-26,35}, -{79,-26,36}, -{79,-26,37}, -{79,-26,38}, -{79,-26,39}, -{79,-26,40}, -{79,-26,41}, -{79,-26,42}, -{79,-26,43}, -{79,-26,44}, -{79,-26,45}, -{79,-26,46}, -{79,-26,47}, -{79,-26,48}, -{79,-26,49}, -{79,-26,50}, -{79,-26,51}, -{79,-26,52}, -{79,-26,53}, -{79,-26,54}, -{79,-26,55}, -{79,-26,56}, -{79,-26,57}, -{79,-26,58}, -{79,-26,59}, -{79,-26,60}, -{79,-26,61}, -{79,-26,62}, -{79,-26,63}, -{79,-26,64}, -{79,-26,65}, -{79,-26,66}, -{79,-26,67}, -{79,-26,68}, -{79,-26,69}, -{79,-26,70}, -{79,-26,71}, -{79,-26,72}, -{79,-26,73}, -{79,-26,74}, -{79,-26,75}, -{79,-26,76}, -{79,-26,77}, -{79,-26,78}, -{79,-26,79}, -{79,-25,-32}, -{79,-25,-31}, -{79,-25,-30}, -{79,-25,-29}, -{79,-25,-28}, -{79,-25,-27}, -{79,-25,-26}, -{79,-25,-25}, -{79,-25,-24}, -{79,-25,-23}, -{79,-25,-22}, -{79,-25,-21}, -{79,-25,-20}, -{79,-25,-19}, -{79,-25,-18}, -{79,-25,-17}, -{79,-25,-16}, -{79,-25,-15}, -{79,-25,-14}, -{79,-25,-13}, -{79,-25,-12}, -{79,-25,-11}, -{79,-25,-10}, -{79,-25,-9}, -{79,-25,-8}, -{79,-25,-7}, -{79,-25,-6}, -{79,-25,-5}, -{79,-25,-4}, -{79,-25,-3}, -{79,-25,-2}, -{79,-25,-1}, -{79,-25,0}, -{79,-25,1}, -{79,-25,2}, -{79,-25,3}, -{79,-25,4}, -{79,-25,5}, -{79,-25,6}, -{79,-25,7}, -{79,-25,8}, -{79,-25,9}, -{79,-25,10}, -{79,-25,11}, -{79,-25,12}, -{79,-25,13}, -{79,-25,14}, -{79,-25,15}, -{79,-25,16}, -{79,-25,17}, -{79,-25,18}, -{79,-25,19}, -{79,-25,20}, -{79,-25,21}, -{79,-25,22}, -{79,-25,23}, -{79,-25,24}, -{79,-25,25}, -{79,-25,26}, -{79,-25,27}, -{79,-25,28}, -{79,-25,29}, -{79,-25,30}, -{79,-25,31}, -{79,-25,32}, -{79,-25,33}, -{79,-25,34}, -{79,-25,35}, -{79,-25,36}, -{79,-25,37}, -{79,-25,38}, -{79,-25,39}, -{79,-25,40}, -{79,-25,41}, -{79,-25,42}, -{79,-25,43}, -{79,-25,44}, -{79,-25,45}, -{79,-25,46}, -{79,-25,47}, -{79,-25,48}, -{79,-25,49}, -{79,-25,50}, -{79,-25,51}, -{79,-25,52}, -{79,-25,53}, -{79,-25,54}, -{79,-25,55}, -{79,-25,56}, -{79,-25,57}, -{79,-25,58}, -{79,-25,59}, -{79,-25,60}, -{79,-25,61}, -{79,-25,62}, -{79,-25,63}, -{79,-25,64}, -{79,-25,65}, -{79,-25,66}, -{79,-25,67}, -{79,-25,68}, -{79,-25,69}, -{79,-25,70}, -{79,-25,71}, -{79,-25,72}, -{79,-25,73}, -{79,-25,74}, -{79,-25,75}, -{79,-25,76}, -{79,-25,77}, -{79,-25,78}, -{79,-25,79}, -{79,-24,-32}, -{79,-24,-31}, -{79,-24,-30}, -{79,-24,-29}, -{79,-24,-28}, -{79,-24,-27}, -{79,-24,-26}, -{79,-24,-25}, -{79,-24,-24}, -{79,-24,-23}, -{79,-24,-22}, -{79,-24,-21}, -{79,-24,-20}, -{79,-24,-19}, -{79,-24,-18}, -{79,-24,-17}, -{79,-24,-16}, -{79,-24,-15}, -{79,-24,-14}, -{79,-24,-13}, -{79,-24,-12}, -{79,-24,-11}, -{79,-24,-10}, -{79,-24,-9}, -{79,-24,-8}, -{79,-24,-7}, -{79,-24,-6}, -{79,-24,-5}, -{79,-24,-4}, -{79,-24,-3}, -{79,-24,-2}, -{79,-24,-1}, -{79,-24,0}, -{79,-24,1}, -{79,-24,2}, -{79,-24,3}, -{79,-24,4}, -{79,-24,5}, -{79,-24,6}, -{79,-24,7}, -{79,-24,8}, -{79,-24,9}, -{79,-24,10}, -{79,-24,11}, -{79,-24,12}, -{79,-24,13}, -{79,-24,14}, -{79,-24,15}, -{79,-24,16}, -{79,-24,17}, -{79,-24,18}, -{79,-24,19}, -{79,-24,20}, -{79,-24,21}, -{79,-24,22}, -{79,-24,23}, -{79,-24,24}, -{79,-24,25}, -{79,-24,26}, -{79,-24,27}, -{79,-24,28}, -{79,-24,29}, -{79,-24,30}, -{79,-24,31}, -{79,-24,32}, -{79,-24,33}, -{79,-24,34}, -{79,-24,35}, -{79,-24,36}, -{79,-24,37}, -{79,-24,38}, -{79,-24,39}, -{79,-24,40}, -{79,-24,41}, -{79,-24,42}, -{79,-24,43}, -{79,-24,44}, -{79,-24,45}, -{79,-24,46}, -{79,-24,47}, -{79,-24,48}, -{79,-24,49}, -{79,-24,50}, -{79,-24,51}, -{79,-24,52}, -{79,-24,53}, -{79,-24,54}, -{79,-24,55}, -{79,-24,56}, -{79,-24,57}, -{79,-24,58}, -{79,-24,59}, -{79,-24,60}, -{79,-24,61}, -{79,-24,62}, -{79,-24,63}, -{79,-24,64}, -{79,-24,65}, -{79,-24,66}, -{79,-24,67}, -{79,-24,68}, -{79,-24,69}, -{79,-24,70}, -{79,-24,71}, -{79,-24,72}, -{79,-24,73}, -{79,-24,74}, -{79,-24,75}, -{79,-24,76}, -{79,-24,77}, -{79,-24,78}, -{79,-24,79}, -{79,-23,-32}, -{79,-23,-31}, -{79,-23,-30}, -{79,-23,-29}, -{79,-23,-28}, -{79,-23,-27}, -{79,-23,-26}, -{79,-23,-25}, -{79,-23,-24}, -{79,-23,-23}, -{79,-23,-22}, -{79,-23,-21}, -{79,-23,-20}, -{79,-23,-19}, -{79,-23,-18}, -{79,-23,-17}, -{79,-23,-16}, -{79,-23,-15}, -{79,-23,-14}, -{79,-23,-13}, -{79,-23,-12}, -{79,-23,-11}, -{79,-23,-10}, -{79,-23,-9}, -{79,-23,-8}, -{79,-23,-7}, -{79,-23,-6}, -{79,-23,-5}, -{79,-23,-4}, -{79,-23,-3}, -{79,-23,-2}, -{79,-23,-1}, -{79,-23,0}, -{79,-23,1}, -{79,-23,2}, -{79,-23,3}, -{79,-23,4}, -{79,-23,5}, -{79,-23,6}, -{79,-23,7}, -{79,-23,8}, -{79,-23,9}, -{79,-23,10}, -{79,-23,11}, -{79,-23,12}, -{79,-23,13}, -{79,-23,14}, -{79,-23,15}, -{79,-23,16}, -{79,-23,17}, -{79,-23,18}, -{79,-23,19}, -{79,-23,20}, -{79,-23,21}, -{79,-23,22}, -{79,-23,23}, -{79,-23,24}, -{79,-23,25}, -{79,-23,26}, -{79,-23,27}, -{79,-23,28}, -{79,-23,29}, -{79,-23,30}, -{79,-23,31}, -{79,-23,32}, -{79,-23,33}, -{79,-23,34}, -{79,-23,35}, -{79,-23,36}, -{79,-23,37}, -{79,-23,38}, -{79,-23,39}, -{79,-23,40}, -{79,-23,41}, -{79,-23,42}, -{79,-23,43}, -{79,-23,44}, -{79,-23,45}, -{79,-23,46}, -{79,-23,47}, -{79,-23,48}, -{79,-23,49}, -{79,-23,50}, -{79,-23,51}, -{79,-23,52}, -{79,-23,53}, -{79,-23,54}, -{79,-23,55}, -{79,-23,56}, -{79,-23,57}, -{79,-23,58}, -{79,-23,59}, -{79,-23,60}, -{79,-23,61}, -{79,-23,62}, -{79,-23,63}, -{79,-23,64}, -{79,-23,65}, -{79,-23,66}, -{79,-23,67}, -{79,-23,68}, -{79,-23,69}, -{79,-23,70}, -{79,-23,71}, -{79,-23,72}, -{79,-23,73}, -{79,-23,74}, -{79,-23,75}, -{79,-23,76}, -{79,-23,77}, -{79,-23,78}, -{79,-23,79}, -{79,-22,-32}, -{79,-22,-31}, -{79,-22,-30}, -{79,-22,-29}, -{79,-22,-28}, -{79,-22,-27}, -{79,-22,-26}, -{79,-22,-25}, -{79,-22,-24}, -{79,-22,-23}, -{79,-22,-22}, -{79,-22,-21}, -{79,-22,-20}, -{79,-22,-19}, -{79,-22,-18}, -{79,-22,-17}, -{79,-22,-16}, -{79,-22,-15}, -{79,-22,-14}, -{79,-22,-13}, -{79,-22,-12}, -{79,-22,-11}, -{79,-22,-10}, -{79,-22,-9}, -{79,-22,-8}, -{79,-22,-7}, -{79,-22,-6}, -{79,-22,-5}, -{79,-22,-4}, -{79,-22,-3}, -{79,-22,-2}, -{79,-22,-1}, -{79,-22,0}, -{79,-22,1}, -{79,-22,2}, -{79,-22,3}, -{79,-22,4}, -{79,-22,5}, -{79,-22,6}, -{79,-22,7}, -{79,-22,8}, -{79,-22,9}, -{79,-22,10}, -{79,-22,11}, -{79,-22,12}, -{79,-22,13}, -{79,-22,14}, -{79,-22,15}, -{79,-22,16}, -{79,-22,17}, -{79,-22,18}, -{79,-22,19}, -{79,-22,20}, -{79,-22,21}, -{79,-22,22}, -{79,-22,23}, -{79,-22,24}, -{79,-22,25}, -{79,-22,26}, -{79,-22,27}, -{79,-22,28}, -{79,-22,29}, -{79,-22,30}, -{79,-22,31}, -{79,-22,32}, -{79,-22,33}, -{79,-22,34}, -{79,-22,35}, -{79,-22,36}, -{79,-22,37}, -{79,-22,38}, -{79,-22,39}, -{79,-22,40}, -{79,-22,41}, -{79,-22,42}, -{79,-22,43}, -{79,-22,44}, -{79,-22,45}, -{79,-22,46}, -{79,-22,47}, -{79,-22,48}, -{79,-22,49}, -{79,-22,50}, -{79,-22,51}, -{79,-22,52}, -{79,-22,53}, -{79,-22,54}, -{79,-22,55}, -{79,-22,56}, -{79,-22,57}, -{79,-22,58}, -{79,-22,59}, -{79,-22,60}, -{79,-22,61}, -{79,-22,62}, -{79,-22,63}, -{79,-22,64}, -{79,-22,65}, -{79,-22,66}, -{79,-22,67}, -{79,-22,68}, -{79,-22,69}, -{79,-22,70}, -{79,-22,71}, -{79,-22,72}, -{79,-22,73}, -{79,-22,74}, -{79,-22,75}, -{79,-22,76}, -{79,-22,77}, -{79,-22,78}, -{79,-22,79}, -{79,-21,-32}, -{79,-21,-31}, -{79,-21,-30}, -{79,-21,-29}, -{79,-21,-28}, -{79,-21,-27}, -{79,-21,-26}, -{79,-21,-25}, -{79,-21,-24}, -{79,-21,-23}, -{79,-21,-22}, -{79,-21,-21}, -{79,-21,-20}, -{79,-21,-19}, -{79,-21,-18}, -{79,-21,-17}, -{79,-21,-16}, -{79,-21,-15}, -{79,-21,-14}, -{79,-21,-13}, -{79,-21,-12}, -{79,-21,-11}, -{79,-21,-10}, -{79,-21,-9}, -{79,-21,-8}, -{79,-21,-7}, -{79,-21,-6}, -{79,-21,-5}, -{79,-21,-4}, -{79,-21,-3}, -{79,-21,-2}, -{79,-21,-1}, -{79,-21,0}, -{79,-21,1}, -{79,-21,2}, -{79,-21,3}, -{79,-21,4}, -{79,-21,5}, -{79,-21,6}, -{79,-21,7}, -{79,-21,8}, -{79,-21,9}, -{79,-21,10}, -{79,-21,11}, -{79,-21,12}, -{79,-21,13}, -{79,-21,14}, -{79,-21,15}, -{79,-21,16}, -{79,-21,17}, -{79,-21,18}, -{79,-21,19}, -{79,-21,20}, -{79,-21,21}, -{79,-21,22}, -{79,-21,23}, -{79,-21,24}, -{79,-21,25}, -{79,-21,26}, -{79,-21,27}, -{79,-21,28}, -{79,-21,29}, -{79,-21,30}, -{79,-21,31}, -{79,-21,32}, -{79,-21,33}, -{79,-21,34}, -{79,-21,35}, -{79,-21,36}, -{79,-21,37}, -{79,-21,38}, -{79,-21,39}, -{79,-21,40}, -{79,-21,41}, -{79,-21,42}, -{79,-21,43}, -{79,-21,44}, -{79,-21,45}, -{79,-21,46}, -{79,-21,47}, -{79,-21,48}, -{79,-21,49}, -{79,-21,50}, -{79,-21,51}, -{79,-21,52}, -{79,-21,53}, -{79,-21,54}, -{79,-21,55}, -{79,-21,56}, -{79,-21,57}, -{79,-21,58}, -{79,-21,59}, -{79,-21,60}, -{79,-21,61}, -{79,-21,62}, -{79,-21,63}, -{79,-21,64}, -{79,-21,65}, -{79,-21,66}, -{79,-21,67}, -{79,-21,68}, -{79,-21,69}, -{79,-21,70}, -{79,-21,71}, -{79,-21,72}, -{79,-21,73}, -{79,-21,74}, -{79,-21,75}, -{79,-21,76}, -{79,-21,77}, -{79,-21,78}, -{79,-21,79}, -{79,-20,-32}, -{79,-20,-31}, -{79,-20,-30}, -{79,-20,-29}, -{79,-20,-28}, -{79,-20,-27}, -{79,-20,-26}, -{79,-20,-25}, -{79,-20,-24}, -{79,-20,-23}, -{79,-20,-22}, -{79,-20,-21}, -{79,-20,-20}, -{79,-20,-19}, -{79,-20,-18}, -{79,-20,-17}, -{79,-20,-16}, -{79,-20,-15}, -{79,-20,-14}, -{79,-20,-13}, -{79,-20,-12}, -{79,-20,-11}, -{79,-20,-10}, -{79,-20,-9}, -{79,-20,-8}, -{79,-20,-7}, -{79,-20,-6}, -{79,-20,-5}, -{79,-20,-4}, -{79,-20,-3}, -{79,-20,-2}, -{79,-20,-1}, -{79,-20,0}, -{79,-20,1}, -{79,-20,2}, -{79,-20,3}, -{79,-20,4}, -{79,-20,5}, -{79,-20,6}, -{79,-20,7}, -{79,-20,8}, -{79,-20,9}, -{79,-20,10}, -{79,-20,11}, -{79,-20,12}, -{79,-20,13}, -{79,-20,14}, -{79,-20,15}, -{79,-20,16}, -{79,-20,17}, -{79,-20,18}, -{79,-20,19}, -{79,-20,20}, -{79,-20,21}, -{79,-20,22}, -{79,-20,23}, -{79,-20,24}, -{79,-20,25}, -{79,-20,26}, -{79,-20,27}, -{79,-20,28}, -{79,-20,29}, -{79,-20,30}, -{79,-20,31}, -{79,-20,32}, -{79,-20,33}, -{79,-20,34}, -{79,-20,35}, -{79,-20,36}, -{79,-20,37}, -{79,-20,38}, -{79,-20,39}, -{79,-20,40}, -{79,-20,41}, -{79,-20,42}, -{79,-20,43}, -{79,-20,44}, -{79,-20,45}, -{79,-20,46}, -{79,-20,47}, -{79,-20,48}, -{79,-20,49}, -{79,-20,50}, -{79,-20,51}, -{79,-20,52}, -{79,-20,53}, -{79,-20,54}, -{79,-20,55}, -{79,-20,56}, -{79,-20,57}, -{79,-20,58}, -{79,-20,59}, -{79,-20,60}, -{79,-20,61}, -{79,-20,62}, -{79,-20,63}, -{79,-20,64}, -{79,-20,65}, -{79,-20,66}, -{79,-20,67}, -{79,-20,68}, -{79,-20,69}, -{79,-20,70}, -{79,-20,71}, -{79,-20,72}, -{79,-20,73}, -{79,-20,74}, -{79,-20,75}, -{79,-20,76}, -{79,-20,77}, -{79,-20,78}, -{79,-20,79}, -{79,-19,-32}, -{79,-19,-31}, -{79,-19,-30}, -{79,-19,-29}, -{79,-19,-28}, -{79,-19,-27}, -{79,-19,-26}, -{79,-19,-25}, -{79,-19,-24}, -{79,-19,-23}, -{79,-19,-22}, -{79,-19,-21}, -{79,-19,-20}, -{79,-19,-19}, -{79,-19,-18}, -{79,-19,-17}, -{79,-19,-16}, -{79,-19,-15}, -{79,-19,-14}, -{79,-19,-13}, -{79,-19,-12}, -{79,-19,-11}, -{79,-19,-10}, -{79,-19,-9}, -{79,-19,-8}, -{79,-19,-7}, -{79,-19,-6}, -{79,-19,-5}, -{79,-19,-4}, -{79,-19,-3}, -{79,-19,-2}, -{79,-19,-1}, -{79,-19,0}, -{79,-19,1}, -{79,-19,2}, -{79,-19,3}, -{79,-19,4}, -{79,-19,5}, -{79,-19,6}, -{79,-19,7}, -{79,-19,8}, -{79,-19,9}, -{79,-19,10}, -{79,-19,11}, -{79,-19,12}, -{79,-19,13}, -{79,-19,14}, -{79,-19,15}, -{79,-19,16}, -{79,-19,17}, -{79,-19,18}, -{79,-19,19}, -{79,-19,20}, -{79,-19,21}, -{79,-19,22}, -{79,-19,23}, -{79,-19,24}, -{79,-19,25}, -{79,-19,26}, -{79,-19,27}, -{79,-19,28}, -{79,-19,29}, -{79,-19,30}, -{79,-19,31}, -{79,-19,32}, -{79,-19,33}, -{79,-19,34}, -{79,-19,35}, -{79,-19,36}, -{79,-19,37}, -{79,-19,38}, -{79,-19,39}, -{79,-19,40}, -{79,-19,41}, -{79,-19,42}, -{79,-19,43}, -{79,-19,44}, -{79,-19,45}, -{79,-19,46}, -{79,-19,47}, -{79,-19,48}, -{79,-19,49}, -{79,-19,50}, -{79,-19,51}, -{79,-19,52}, -{79,-19,53}, -{79,-19,54}, -{79,-19,55}, -{79,-19,56}, -{79,-19,57}, -{79,-19,58}, -{79,-19,59}, -{79,-19,60}, -{79,-19,61}, -{79,-19,62}, -{79,-19,63}, -{79,-19,64}, -{79,-19,65}, -{79,-19,66}, -{79,-19,67}, -{79,-19,68}, -{79,-19,69}, -{79,-19,70}, -{79,-19,71}, -{79,-19,72}, -{79,-19,73}, -{79,-19,74}, -{79,-19,75}, -{79,-19,76}, -{79,-19,77}, -{79,-19,78}, -{79,-19,79}, -{79,-18,-32}, -{79,-18,-31}, -{79,-18,-30}, -{79,-18,-29}, -{79,-18,-28}, -{79,-18,-27}, -{79,-18,-26}, -{79,-18,-25}, -{79,-18,-24}, -{79,-18,-23}, -{79,-18,-22}, -{79,-18,-21}, -{79,-18,-20}, -{79,-18,-19}, -{79,-18,-18}, -{79,-18,-17}, -{79,-18,-16}, -{79,-18,-15}, -{79,-18,-14}, -{79,-18,-13}, -{79,-18,-12}, -{79,-18,-11}, -{79,-18,-10}, -{79,-18,-9}, -{79,-18,-8}, -{79,-18,-7}, -{79,-18,-6}, -{79,-18,-5}, -{79,-18,-4}, -{79,-18,-3}, -{79,-18,-2}, -{79,-18,-1}, -{79,-18,0}, -{79,-18,1}, -{79,-18,2}, -{79,-18,3}, -{79,-18,4}, -{79,-18,5}, -{79,-18,6}, -{79,-18,7}, -{79,-18,8}, -{79,-18,9}, -{79,-18,10}, -{79,-18,11}, -{79,-18,12}, -{79,-18,13}, -{79,-18,14}, -{79,-18,15}, -{79,-18,16}, -{79,-18,17}, -{79,-18,18}, -{79,-18,19}, -{79,-18,20}, -{79,-18,21}, -{79,-18,22}, -{79,-18,23}, -{79,-18,24}, -{79,-18,25}, -{79,-18,26}, -{79,-18,27}, -{79,-18,28}, -{79,-18,29}, -{79,-18,30}, -{79,-18,31}, -{79,-18,32}, -{79,-18,33}, -{79,-18,34}, -{79,-18,35}, -{79,-18,36}, -{79,-18,37}, -{79,-18,38}, -{79,-18,39}, -{79,-18,40}, -{79,-18,41}, -{79,-18,42}, -{79,-18,43}, -{79,-18,44}, -{79,-18,45}, -{79,-18,46}, -{79,-18,47}, -{79,-18,48}, -{79,-18,49}, -{79,-18,50}, -{79,-18,51}, -{79,-18,52}, -{79,-18,53}, -{79,-18,54}, -{79,-18,55}, -{79,-18,56}, -{79,-18,57}, -{79,-18,58}, -{79,-18,59}, -{79,-18,60}, -{79,-18,61}, -{79,-18,62}, -{79,-18,63}, -{79,-18,64}, -{79,-18,65}, -{79,-18,66}, -{79,-18,67}, -{79,-18,68}, -{79,-18,69}, -{79,-18,70}, -{79,-18,71}, -{79,-18,72}, -{79,-18,73}, -{79,-18,74}, -{79,-18,75}, -{79,-18,76}, -{79,-18,77}, -{79,-18,78}, -{79,-18,79}, -{79,-17,-32}, -{79,-17,-31}, -{79,-17,-30}, -{79,-17,-29}, -{79,-17,-28}, -{79,-17,-27}, -{79,-17,-26}, -{79,-17,-25}, -{79,-17,-24}, -{79,-17,-23}, -{79,-17,-22}, -{79,-17,-21}, -{79,-17,-20}, -{79,-17,-19}, -{79,-17,-18}, -{79,-17,-17}, -{79,-17,-16}, -{79,-17,-15}, -{79,-17,-14}, -{79,-17,-13}, -{79,-17,-12}, -{79,-17,-11}, -{79,-17,-10}, -{79,-17,-9}, -{79,-17,-8}, -{79,-17,-7}, -{79,-17,-6}, -{79,-17,-5}, -{79,-17,-4}, -{79,-17,-3}, -{79,-17,-2}, -{79,-17,-1}, -{79,-17,0}, -{79,-17,1}, -{79,-17,2}, -{79,-17,3}, -{79,-17,4}, -{79,-17,5}, -{79,-17,6}, -{79,-17,7}, -{79,-17,8}, -{79,-17,9}, -{79,-17,10}, -{79,-17,11}, -{79,-17,12}, -{79,-17,13}, -{79,-17,14}, -{79,-17,15}, -{79,-17,16}, -{79,-17,17}, -{79,-17,18}, -{79,-17,19}, -{79,-17,20}, -{79,-17,21}, -{79,-17,22}, -{79,-17,23}, -{79,-17,24}, -{79,-17,25}, -{79,-17,26}, -{79,-17,27}, -{79,-17,28}, -{79,-17,29}, -{79,-17,30}, -{79,-17,31}, -{79,-17,32}, -{79,-17,33}, -{79,-17,34}, -{79,-17,35}, -{79,-17,36}, -{79,-17,37}, -{79,-17,38}, -{79,-17,39}, -{79,-17,40}, -{79,-17,41}, -{79,-17,42}, -{79,-17,43}, -{79,-17,44}, -{79,-17,45}, -{79,-17,46}, -{79,-17,47}, -{79,-17,48}, -{79,-17,49}, -{79,-17,50}, -{79,-17,51}, -{79,-17,52}, -{79,-17,53}, -{79,-17,54}, -{79,-17,55}, -{79,-17,56}, -{79,-17,57}, -{79,-17,58}, -{79,-17,59}, -{79,-17,60}, -{79,-17,61}, -{79,-17,62}, -{79,-17,63}, -{79,-17,64}, -{79,-17,65}, -{79,-17,66}, -{79,-17,67}, -{79,-17,68}, -{79,-17,69}, -{79,-17,70}, -{79,-17,71}, -{79,-17,72}, -{79,-17,73}, -{79,-17,74}, -{79,-17,75}, -{79,-17,76}, -{79,-17,77}, -{79,-17,78}, -{79,-17,79}, -{79,-16,-32}, -{79,-16,-31}, -{79,-16,-30}, -{79,-16,-29}, -{79,-16,-28}, -{79,-16,-27}, -{79,-16,-26}, -{79,-16,-25}, -{79,-16,-24}, -{79,-16,-23}, -{79,-16,-22}, -{79,-16,-21}, -{79,-16,-20}, -{79,-16,-19}, -{79,-16,-18}, -{79,-16,-17}, -{79,-16,-16}, -{79,-16,-15}, -{79,-16,-14}, -{79,-16,-13}, -{79,-16,-12}, -{79,-16,-11}, -{79,-16,-10}, -{79,-16,-9}, -{79,-16,-8}, -{79,-16,-7}, -{79,-16,-6}, -{79,-16,-5}, -{79,-16,-4}, -{79,-16,-3}, -{79,-16,-2}, -{79,-16,-1}, -{79,-16,0}, -{79,-16,1}, -{79,-16,2}, -{79,-16,3}, -{79,-16,4}, -{79,-16,5}, -{79,-16,6}, -{79,-16,7}, -{79,-16,8}, -{79,-16,9}, -{79,-16,10}, -{79,-16,11}, -{79,-16,12}, -{79,-16,13}, -{79,-16,14}, -{79,-16,15}, -{79,-16,16}, -{79,-16,17}, -{79,-16,18}, -{79,-16,19}, -{79,-16,20}, -{79,-16,21}, -{79,-16,22}, -{79,-16,23}, -{79,-16,24}, -{79,-16,25}, -{79,-16,26}, -{79,-16,27}, -{79,-16,28}, -{79,-16,29}, -{79,-16,30}, -{79,-16,31}, -{79,-16,32}, -{79,-16,33}, -{79,-16,34}, -{79,-16,35}, -{79,-16,36}, -{79,-16,37}, -{79,-16,38}, -{79,-16,39}, -{79,-16,40}, -{79,-16,41}, -{79,-16,42}, -{79,-16,43}, -{79,-16,44}, -{79,-16,45}, -{79,-16,46}, -{79,-16,47}, -{79,-16,48}, -{79,-16,49}, -{79,-16,50}, -{79,-16,51}, -{79,-16,52}, -{79,-16,53}, -{79,-16,54}, -{79,-16,55}, -{79,-16,56}, -{79,-16,57}, -{79,-16,58}, -{79,-16,59}, -{79,-16,60}, -{79,-16,61}, -{79,-16,62}, -{79,-16,63}, -{79,-16,64}, -{79,-16,65}, -{79,-16,66}, -{79,-16,67}, -{79,-16,68}, -{79,-16,69}, -{79,-16,70}, -{79,-16,71}, -{79,-16,72}, -{79,-16,73}, -{79,-16,74}, -{79,-16,75}, -{79,-16,76}, -{79,-16,77}, -{79,-16,78}, -{79,-16,79}, -{79,-15,-32}, -{79,-15,-31}, -{79,-15,-30}, -{79,-15,-29}, -{79,-15,-28}, -{79,-15,-27}, -{79,-15,-26}, -{79,-15,-25}, -{79,-15,-24}, -{79,-15,-23}, -{79,-15,-22}, -{79,-15,-21}, -{79,-15,-20}, -{79,-15,-19}, -{79,-15,-18}, -{79,-15,-17}, -{79,-15,-16}, -{79,-15,-15}, -{79,-15,-14}, -{79,-15,-13}, -{79,-15,-12}, -{79,-15,-11}, -{79,-15,-10}, -{79,-15,-9}, -{79,-15,-8}, -{79,-15,-7}, -{79,-15,-6}, -{79,-15,-5}, -{79,-15,-4}, -{79,-15,-3}, -{79,-15,-2}, -{79,-15,-1}, -{79,-15,0}, -{79,-15,1}, -{79,-15,2}, -{79,-15,3}, -{79,-15,4}, -{79,-15,5}, -{79,-15,6}, -{79,-15,7}, -{79,-15,8}, -{79,-15,9}, -{79,-15,10}, -{79,-15,11}, -{79,-15,12}, -{79,-15,13}, -{79,-15,14}, -{79,-15,15}, -{79,-15,16}, -{79,-15,17}, -{79,-15,18}, -{79,-15,19}, -{79,-15,20}, -{79,-15,21}, -{79,-15,22}, -{79,-15,23}, -{79,-15,24}, -{79,-15,25}, -{79,-15,26}, -{79,-15,27}, -{79,-15,28}, -{79,-15,29}, -{79,-15,30}, -{79,-15,31}, -{79,-15,32}, -{79,-15,33}, -{79,-15,34}, -{79,-15,35}, -{79,-15,36}, -{79,-15,37}, -{79,-15,38}, -{79,-15,39}, -{79,-15,40}, -{79,-15,41}, -{79,-15,42}, -{79,-15,43}, -{79,-15,44}, -{79,-15,45}, -{79,-15,46}, -{79,-15,47}, -{79,-15,48}, -{79,-15,49}, -{79,-15,50}, -{79,-15,51}, -{79,-15,52}, -{79,-15,53}, -{79,-15,54}, -{79,-15,55}, -{79,-15,56}, -{79,-15,57}, -{79,-15,58}, -{79,-15,59}, -{79,-15,60}, -{79,-15,61}, -{79,-15,62}, -{79,-15,63}, -{79,-15,64}, -{79,-15,65}, -{79,-15,66}, -{79,-15,67}, -{79,-15,68}, -{79,-15,69}, -{79,-15,70}, -{79,-15,71}, -{79,-15,72}, -{79,-15,73}, -{79,-15,74}, -{79,-15,75}, -{79,-15,76}, -{79,-15,77}, -{79,-15,78}, -{79,-15,79}, -{79,-14,-32}, -{79,-14,-31}, -{79,-14,-30}, -{79,-14,-29}, -{79,-14,-28}, -{79,-14,-27}, -{79,-14,-26}, -{79,-14,-25}, -{79,-14,-24}, -{79,-14,-23}, -{79,-14,-22}, -{79,-14,-21}, -{79,-14,-20}, -{79,-14,-19}, -{79,-14,-18}, -{79,-14,-17}, -{79,-14,-16}, -{79,-14,-15}, -{79,-14,-14}, -{79,-14,-13}, -{79,-14,-12}, -{79,-14,-11}, -{79,-14,-10}, -{79,-14,-9}, -{79,-14,-8}, -{79,-14,-7}, -{79,-14,-6}, -{79,-14,-5}, -{79,-14,-4}, -{79,-14,-3}, -{79,-14,-2}, -{79,-14,-1}, -{79,-14,0}, -{79,-14,1}, -{79,-14,2}, -{79,-14,3}, -{79,-14,4}, -{79,-14,5}, -{79,-14,6}, -{79,-14,7}, -{79,-14,8}, -{79,-14,9}, -{79,-14,10}, -{79,-14,11}, -{79,-14,12}, -{79,-14,13}, -{79,-14,14}, -{79,-14,15}, -{79,-14,16}, -{79,-14,17}, -{79,-14,18}, -{79,-14,19}, -{79,-14,20}, -{79,-14,21}, -{79,-14,22}, -{79,-14,23}, -{79,-14,24}, -{79,-14,25}, -{79,-14,26}, -{79,-14,27}, -{79,-14,28}, -{79,-14,29}, -{79,-14,30}, -{79,-14,31}, -{79,-14,32}, -{79,-14,33}, -{79,-14,34}, -{79,-14,35}, -{79,-14,36}, -{79,-14,37}, -{79,-14,38}, -{79,-14,39}, -{79,-14,40}, -{79,-14,41}, -{79,-14,42}, -{79,-14,43}, -{79,-14,44}, -{79,-14,45}, -{79,-14,46}, -{79,-14,47}, -{79,-14,48}, -{79,-14,49}, -{79,-14,50}, -{79,-14,51}, -{79,-14,52}, -{79,-14,53}, -{79,-14,54}, -{79,-14,55}, -{79,-14,56}, -{79,-14,57}, -{79,-14,58}, -{79,-14,59}, -{79,-14,60}, -{79,-14,61}, -{79,-14,62}, -{79,-14,63}, -{79,-14,64}, -{79,-14,65}, -{79,-14,66}, -{79,-14,67}, -{79,-14,68}, -{79,-14,69}, -{79,-14,70}, -{79,-14,71}, -{79,-14,72}, -{79,-14,73}, -{79,-14,74}, -{79,-14,75}, -{79,-14,76}, -{79,-14,77}, -{79,-14,78}, -{79,-14,79}, -{79,-13,-32}, -{79,-13,-31}, -{79,-13,-30}, -{79,-13,-29}, -{79,-13,-28}, -{79,-13,-27}, -{79,-13,-26}, -{79,-13,-25}, -{79,-13,-24}, -{79,-13,-23}, -{79,-13,-22}, -{79,-13,-21}, -{79,-13,-20}, -{79,-13,-19}, -{79,-13,-18}, -{79,-13,-17}, -{79,-13,-16}, -{79,-13,-15}, -{79,-13,-14}, -{79,-13,-13}, -{79,-13,-12}, -{79,-13,-11}, -{79,-13,-10}, -{79,-13,-9}, -{79,-13,-8}, -{79,-13,-7}, -{79,-13,-6}, -{79,-13,-5}, -{79,-13,-4}, -{79,-13,-3}, -{79,-13,-2}, -{79,-13,-1}, -{79,-13,0}, -{79,-13,1}, -{79,-13,2}, -{79,-13,3}, -{79,-13,4}, -{79,-13,5}, -{79,-13,6}, -{79,-13,7}, -{79,-13,8}, -{79,-13,9}, -{79,-13,10}, -{79,-13,11}, -{79,-13,12}, -{79,-13,13}, -{79,-13,14}, -{79,-13,15}, -{79,-13,16}, -{79,-13,17}, -{79,-13,18}, -{79,-13,19}, -{79,-13,20}, -{79,-13,21}, -{79,-13,22}, -{79,-13,23}, -{79,-13,24}, -{79,-13,25}, -{79,-13,26}, -{79,-13,27}, -{79,-13,28}, -{79,-13,29}, -{79,-13,30}, -{79,-13,31}, -{79,-13,32}, -{79,-13,33}, -{79,-13,34}, -{79,-13,35}, -{79,-13,36}, -{79,-13,37}, -{79,-13,38}, -{79,-13,39}, -{79,-13,40}, -{79,-13,41}, -{79,-13,42}, -{79,-13,43}, -{79,-13,44}, -{79,-13,45}, -{79,-13,46}, -{79,-13,47}, -{79,-13,48}, -{79,-13,49}, -{79,-13,50}, -{79,-13,51}, -{79,-13,52}, -{79,-13,53}, -{79,-13,54}, -{79,-13,55}, -{79,-13,56}, -{79,-13,57}, -{79,-13,58}, -{79,-13,59}, -{79,-13,60}, -{79,-13,61}, -{79,-13,62}, -{79,-13,63}, -{79,-13,64}, -{79,-13,65}, -{79,-13,66}, -{79,-13,67}, -{79,-13,68}, -{79,-13,69}, -{79,-13,70}, -{79,-13,71}, -{79,-13,72}, -{79,-13,73}, -{79,-13,74}, -{79,-13,75}, -{79,-13,76}, -{79,-13,77}, -{79,-13,78}, -{79,-13,79}, -{79,-12,-32}, -{79,-12,-31}, -{79,-12,-30}, -{79,-12,-29}, -{79,-12,-28}, -{79,-12,-27}, -{79,-12,-26}, -{79,-12,-25}, -{79,-12,-24}, -{79,-12,-23}, -{79,-12,-22}, -{79,-12,-21}, -{79,-12,-20}, -{79,-12,-19}, -{79,-12,-18}, -{79,-12,-17}, -{79,-12,-16}, -{79,-12,-15}, -{79,-12,-14}, -{79,-12,-13}, -{79,-12,-12}, -{79,-12,-11}, -{79,-12,-10}, -{79,-12,-9}, -{79,-12,-8}, -{79,-12,-7}, -{79,-12,-6}, -{79,-12,-5}, -{79,-12,-4}, -{79,-12,-3}, -{79,-12,-2}, -{79,-12,-1}, -{79,-12,0}, -{79,-12,1}, -{79,-12,2}, -{79,-12,3}, -{79,-12,4}, -{79,-12,5}, -{79,-12,6}, -{79,-12,7}, -{79,-12,8}, -{79,-12,9}, -{79,-12,10}, -{79,-12,11}, -{79,-12,12}, -{79,-12,13}, -{79,-12,14}, -{79,-12,15}, -{79,-12,16}, -{79,-12,17}, -{79,-12,18}, -{79,-12,19}, -{79,-12,20}, -{79,-12,21}, -{79,-12,22}, -{79,-12,23}, -{79,-12,24}, -{79,-12,25}, -{79,-12,26}, -{79,-12,27}, -{79,-12,28}, -{79,-12,29}, -{79,-12,30}, -{79,-12,31}, -{79,-12,32}, -{79,-12,33}, -{79,-12,34}, -{79,-12,35}, -{79,-12,36}, -{79,-12,37}, -{79,-12,38}, -{79,-12,39}, -{79,-12,40}, -{79,-12,41}, -{79,-12,42}, -{79,-12,43}, -{79,-12,44}, -{79,-12,45}, -{79,-12,46}, -{79,-12,47}, -{79,-12,48}, -{79,-12,49}, -{79,-12,50}, -{79,-12,51}, -{79,-12,52}, -{79,-12,53}, -{79,-12,54}, -{79,-12,55}, -{79,-12,56}, -{79,-12,57}, -{79,-12,58}, -{79,-12,59}, -{79,-12,60}, -{79,-12,61}, -{79,-12,62}, -{79,-12,63}, -{79,-12,64}, -{79,-12,65}, -{79,-12,66}, -{79,-12,67}, -{79,-12,68}, -{79,-12,69}, -{79,-12,70}, -{79,-12,71}, -{79,-12,72}, -{79,-12,73}, -{79,-12,74}, -{79,-12,75}, -{79,-12,76}, -{79,-12,77}, -{79,-12,78}, -{79,-12,79}, -{79,-11,-32}, -{79,-11,-31}, -{79,-11,-30}, -{79,-11,-29}, -{79,-11,-28}, -{79,-11,-27}, -{79,-11,-26}, -{79,-11,-25}, -{79,-11,-24}, -{79,-11,-23}, -{79,-11,-22}, -{79,-11,-21}, -{79,-11,-20}, -{79,-11,-19}, -{79,-11,-18}, -{79,-11,-17}, -{79,-11,-16}, -{79,-11,-15}, -{79,-11,-14}, -{79,-11,-13}, -{79,-11,-12}, -{79,-11,-11}, -{79,-11,-10}, -{79,-11,-9}, -{79,-11,-8}, -{79,-11,-7}, -{79,-11,-6}, -{79,-11,-5}, -{79,-11,-4}, -{79,-11,-3}, -{79,-11,-2}, -{79,-11,-1}, -{79,-11,0}, -{79,-11,1}, -{79,-11,2}, -{79,-11,3}, -{79,-11,4}, -{79,-11,5}, -{79,-11,6}, -{79,-11,7}, -{79,-11,8}, -{79,-11,9}, -{79,-11,10}, -{79,-11,11}, -{79,-11,12}, -{79,-11,13}, -{79,-11,14}, -{79,-11,15}, -{79,-11,16}, -{79,-11,17}, -{79,-11,18}, -{79,-11,19}, -{79,-11,20}, -{79,-11,21}, -{79,-11,22}, -{79,-11,23}, -{79,-11,24}, -{79,-11,25}, -{79,-11,26}, -{79,-11,27}, -{79,-11,28}, -{79,-11,29}, -{79,-11,30}, -{79,-11,31}, -{79,-11,32}, -{79,-11,33}, -{79,-11,34}, -{79,-11,35}, -{79,-11,36}, -{79,-11,37}, -{79,-11,38}, -{79,-11,39}, -{79,-11,40}, -{79,-11,41}, -{79,-11,42}, -{79,-11,43}, -{79,-11,44}, -{79,-11,45}, -{79,-11,46}, -{79,-11,47}, -{79,-11,48}, -{79,-11,49}, -{79,-11,50}, -{79,-11,51}, -{79,-11,52}, -{79,-11,53}, -{79,-11,54}, -{79,-11,55}, -{79,-11,56}, -{79,-11,57}, -{79,-11,58}, -{79,-11,59}, -{79,-11,60}, -{79,-11,61}, -{79,-11,62}, -{79,-11,63}, -{79,-11,64}, -{79,-11,65}, -{79,-11,66}, -{79,-11,67}, -{79,-11,68}, -{79,-11,69}, -{79,-11,70}, -{79,-11,71}, -{79,-11,72}, -{79,-11,73}, -{79,-11,74}, -{79,-11,75}, -{79,-11,76}, -{79,-11,77}, -{79,-11,78}, -{79,-11,79}, -{79,-10,-32}, -{79,-10,-31}, -{79,-10,-30}, -{79,-10,-29}, -{79,-10,-28}, -{79,-10,-27}, -{79,-10,-26}, -{79,-10,-25}, -{79,-10,-24}, -{79,-10,-23}, -{79,-10,-22}, -{79,-10,-21}, -{79,-10,-20}, -{79,-10,-19}, -{79,-10,-18}, -{79,-10,-17}, -{79,-10,-16}, -{79,-10,-15}, -{79,-10,-14}, -{79,-10,-13}, -{79,-10,-12}, -{79,-10,-11}, -{79,-10,-10}, -{79,-10,-9}, -{79,-10,-8}, -{79,-10,-7}, -{79,-10,-6}, -{79,-10,-5}, -{79,-10,-4}, -{79,-10,-3}, -{79,-10,-2}, -{79,-10,-1}, -{79,-10,0}, -{79,-10,1}, -{79,-10,2}, -{79,-10,3}, -{79,-10,4}, -{79,-10,5}, -{79,-10,6}, -{79,-10,7}, -{79,-10,8}, -{79,-10,9}, -{79,-10,10}, -{79,-10,11}, -{79,-10,12}, -{79,-10,13}, -{79,-10,14}, -{79,-10,15}, -{79,-10,16}, -{79,-10,17}, -{79,-10,18}, -{79,-10,19}, -{79,-10,20}, -{79,-10,21}, -{79,-10,22}, -{79,-10,23}, -{79,-10,24}, -{79,-10,25}, -{79,-10,26}, -{79,-10,27}, -{79,-10,28}, -{79,-10,29}, -{79,-10,30}, -{79,-10,31}, -{79,-10,32}, -{79,-10,33}, -{79,-10,34}, -{79,-10,35}, -{79,-10,36}, -{79,-10,37}, -{79,-10,38}, -{79,-10,39}, -{79,-10,40}, -{79,-10,41}, -{79,-10,42}, -{79,-10,43}, -{79,-10,44}, -{79,-10,45}, -{79,-10,46}, -{79,-10,47}, -{79,-10,48}, -{79,-10,49}, -{79,-10,50}, -{79,-10,51}, -{79,-10,52}, -{79,-10,53}, -{79,-10,54}, -{79,-10,55}, -{79,-10,56}, -{79,-10,57}, -{79,-10,58}, -{79,-10,59}, -{79,-10,60}, -{79,-10,61}, -{79,-10,62}, -{79,-10,63}, -{79,-10,64}, -{79,-10,65}, -{79,-10,66}, -{79,-10,67}, -{79,-10,68}, -{79,-10,69}, -{79,-10,70}, -{79,-10,71}, -{79,-10,72}, -{79,-10,73}, -{79,-10,74}, -{79,-10,75}, -{79,-10,76}, -{79,-10,77}, -{79,-10,78}, -{79,-10,79}, -{79,-10,80}, -{79,-9,-32}, -{79,-9,-31}, -{79,-9,-30}, -{79,-9,-29}, -{79,-9,-28}, -{79,-9,-27}, -{79,-9,-26}, -{79,-9,-25}, -{79,-9,-24}, -{79,-9,-23}, -{79,-9,-22}, -{79,-9,-21}, -{79,-9,-20}, -{79,-9,-19}, -{79,-9,-18}, -{79,-9,-17}, -{79,-9,-16}, -{79,-9,-15}, -{79,-9,-14}, -{79,-9,-13}, -{79,-9,-12}, -{79,-9,-11}, -{79,-9,-10}, -{79,-9,-9}, -{79,-9,-8}, -{79,-9,-7}, -{79,-9,-6}, -{79,-9,-5}, -{79,-9,-4}, -{79,-9,-3}, -{79,-9,-2}, -{79,-9,-1}, -{79,-9,0}, -{79,-9,1}, -{79,-9,2}, -{79,-9,3}, -{79,-9,4}, -{79,-9,5}, -{79,-9,6}, -{79,-9,7}, -{79,-9,8}, -{79,-9,9}, -{79,-9,10}, -{79,-9,11}, -{79,-9,12}, -{79,-9,13}, -{79,-9,14}, -{79,-9,15}, -{79,-9,16}, -{79,-9,17}, -{79,-9,18}, -{79,-9,19}, -{79,-9,20}, -{79,-9,21}, -{79,-9,22}, -{79,-9,23}, -{79,-9,24}, -{79,-9,25}, -{79,-9,26}, -{79,-9,27}, -{79,-9,28}, -{79,-9,29}, -{79,-9,30}, -{79,-9,31}, -{79,-9,32}, -{79,-9,33}, -{79,-9,34}, -{79,-9,35}, -{79,-9,36}, -{79,-9,37}, -{79,-9,38}, -{79,-9,39}, -{79,-9,40}, -{79,-9,41}, -{79,-9,42}, -{79,-9,43}, -{79,-9,44}, -{79,-9,45}, -{79,-9,46}, -{79,-9,47}, -{79,-9,48}, -{79,-9,49}, -{79,-9,50}, -{79,-9,51}, -{79,-9,52}, -{79,-9,53}, -{79,-9,54}, -{79,-9,55}, -{79,-9,56}, -{79,-9,57}, -{79,-9,58}, -{79,-9,59}, -{79,-9,60}, -{79,-9,61}, -{79,-9,62}, -{79,-9,63}, -{79,-9,64}, -{79,-9,65}, -{79,-9,66}, -{79,-9,67}, -{79,-9,68}, -{79,-9,69}, -{79,-9,70}, -{79,-9,71}, -{79,-9,72}, -{79,-9,73}, -{79,-9,74}, -{79,-9,75}, -{79,-9,76}, -{79,-9,77}, -{79,-9,78}, -{79,-9,79}, -{79,-9,80}, -{79,-8,-32}, -{79,-8,-31}, -{79,-8,-30}, -{79,-8,-29}, -{79,-8,-28}, -{79,-8,-27}, -{79,-8,-26}, -{79,-8,-25}, -{79,-8,-24}, -{79,-8,-23}, -{79,-8,-22}, -{79,-8,-21}, -{79,-8,-20}, -{79,-8,-19}, -{79,-8,-18}, -{79,-8,-17}, -{79,-8,-16}, -{79,-8,-15}, -{79,-8,-14}, -{79,-8,-13}, -{79,-8,-12}, -{79,-8,-11}, -{79,-8,-10}, -{79,-8,-9}, -{79,-8,-8}, -{79,-8,-7}, -{79,-8,-6}, -{79,-8,-5}, -{79,-8,-4}, -{79,-8,-3}, -{79,-8,-2}, -{79,-8,-1}, -{79,-8,0}, -{79,-8,1}, -{79,-8,2}, -{79,-8,3}, -{79,-8,4}, -{79,-8,5}, -{79,-8,6}, -{79,-8,7}, -{79,-8,8}, -{79,-8,9}, -{79,-8,10}, -{79,-8,11}, -{79,-8,12}, -{79,-8,13}, -{79,-8,14}, -{79,-8,15}, -{79,-8,16}, -{79,-8,17}, -{79,-8,18}, -{79,-8,19}, -{79,-8,20}, -{79,-8,21}, -{79,-8,22}, -{79,-8,23}, -{79,-8,24}, -{79,-8,25}, -{79,-8,26}, -{79,-8,27}, -{79,-8,28}, -{79,-8,29}, -{79,-8,30}, -{79,-8,31}, -{79,-8,32}, -{79,-8,33}, -{79,-8,34}, -{79,-8,35}, -{79,-8,36}, -{79,-8,37}, -{79,-8,38}, -{79,-8,39}, -{79,-8,40}, -{79,-8,41}, -{79,-8,42}, -{79,-8,43}, -{79,-8,44}, -{79,-8,45}, -{79,-8,46}, -{79,-8,47}, -{79,-8,48}, -{79,-8,49}, -{79,-8,50}, -{79,-8,51}, -{79,-8,52}, -{79,-8,53}, -{79,-8,54}, -{79,-8,55}, -{79,-8,56}, -{79,-8,57}, -{79,-8,58}, -{79,-8,59}, -{79,-8,60}, -{79,-8,61}, -{79,-8,62}, -{79,-8,63}, -{79,-8,64}, -{79,-8,65}, -{79,-8,66}, -{79,-8,67}, -{79,-8,68}, -{79,-8,69}, -{79,-8,70}, -{79,-8,71}, -{79,-8,72}, -{79,-8,73}, -{79,-8,74}, -{79,-8,75}, -{79,-8,76}, -{79,-8,77}, -{79,-8,78}, -{79,-8,79}, -{79,-8,80}, -{79,-7,-32}, -{79,-7,-31}, -{79,-7,-30}, -{79,-7,-29}, -{79,-7,-28}, -{79,-7,-27}, -{79,-7,-26}, -{79,-7,-25}, -{79,-7,-24}, -{79,-7,-23}, -{79,-7,-22}, -{79,-7,-21}, -{79,-7,-20}, -{79,-7,-19}, -{79,-7,-18}, -{79,-7,-17}, -{79,-7,-16}, -{79,-7,-15}, -{79,-7,-14}, -{79,-7,-13}, -{79,-7,-12}, -{79,-7,-11}, -{79,-7,-10}, -{79,-7,-9}, -{79,-7,-8}, -{79,-7,-7}, -{79,-7,-6}, -{79,-7,-5}, -{79,-7,-4}, -{79,-7,-3}, -{79,-7,-2}, -{79,-7,-1}, -{79,-7,0}, -{79,-7,1}, -{79,-7,2}, -{79,-7,3}, -{79,-7,4}, -{79,-7,5}, -{79,-7,6}, -{79,-7,7}, -{79,-7,8}, -{79,-7,9}, -{79,-7,10}, -{79,-7,11}, -{79,-7,12}, -{79,-7,13}, -{79,-7,14}, -{79,-7,15}, -{79,-7,16}, -{79,-7,17}, -{79,-7,18}, -{79,-7,19}, -{79,-7,20}, -{79,-7,21}, -{79,-7,22}, -{79,-7,23}, -{79,-7,24}, -{79,-7,25}, -{79,-7,26}, -{79,-7,27}, -{79,-7,28}, -{79,-7,29}, -{79,-7,30}, -{79,-7,31}, -{79,-7,32}, -{79,-7,33}, -{79,-7,34}, -{79,-7,35}, -{79,-7,36}, -{79,-7,37}, -{79,-7,38}, -{79,-7,39}, -{79,-7,40}, -{79,-7,41}, -{79,-7,42}, -{79,-7,43}, -{79,-7,44}, -{79,-7,45}, -{79,-7,46}, -{79,-7,47}, -{79,-7,48}, -{79,-7,49}, -{79,-7,50}, -{79,-7,51}, -{79,-7,52}, -{79,-7,53}, -{79,-7,54}, -{79,-7,55}, -{79,-7,56}, -{79,-7,57}, -{79,-7,58}, -{79,-7,59}, -{79,-7,60}, -{79,-7,61}, -{79,-7,62}, -{79,-7,63}, -{79,-7,64}, -{79,-7,65}, -{79,-7,66}, -{79,-7,67}, -{79,-7,68}, -{79,-7,69}, -{79,-7,70}, -{79,-7,71}, -{79,-7,72}, -{79,-7,73}, -{79,-7,74}, -{79,-7,75}, -{79,-7,76}, -{79,-7,77}, -{79,-7,78}, -{79,-7,79}, -{79,-7,80}, -{79,-6,-32}, -{79,-6,-31}, -{79,-6,-30}, -{79,-6,-29}, -{79,-6,-28}, -{79,-6,-27}, -{79,-6,-26}, -{79,-6,-25}, -{79,-6,-24}, -{79,-6,-23}, -{79,-6,-22}, -{79,-6,-21}, -{79,-6,-20}, -{79,-6,-19}, -{79,-6,-18}, -{79,-6,-17}, -{79,-6,-16}, -{79,-6,-15}, -{79,-6,-14}, -{79,-6,-13}, -{79,-6,-12}, -{79,-6,-11}, -{79,-6,-10}, -{79,-6,-9}, -{79,-6,-8}, -{79,-6,-7}, -{79,-6,-6}, -{79,-6,-5}, -{79,-6,-4}, -{79,-6,-3}, -{79,-6,-2}, -{79,-6,-1}, -{79,-6,0}, -{79,-6,1}, -{79,-6,2}, -{79,-6,3}, -{79,-6,4}, -{79,-6,5}, -{79,-6,6}, -{79,-6,7}, -{79,-6,8}, -{79,-6,9}, -{79,-6,10}, -{79,-6,11}, -{79,-6,12}, -{79,-6,13}, -{79,-6,14}, -{79,-6,15}, -{79,-6,16}, -{79,-6,17}, -{79,-6,18}, -{79,-6,19}, -{79,-6,20}, -{79,-6,21}, -{79,-6,22}, -{79,-6,23}, -{79,-6,24}, -{79,-6,25}, -{79,-6,26}, -{79,-6,27}, -{79,-6,28}, -{79,-6,29}, -{79,-6,30}, -{79,-6,31}, -{79,-6,32}, -{79,-6,33}, -{79,-6,34}, -{79,-6,35}, -{79,-6,36}, -{79,-6,37}, -{79,-6,38}, -{79,-6,39}, -{79,-6,40}, -{79,-6,41}, -{79,-6,42}, -{79,-6,43}, -{79,-6,44}, -{79,-6,45}, -{79,-6,46}, -{79,-6,47}, -{79,-6,48}, -{79,-6,49}, -{79,-6,50}, -{79,-6,51}, -{79,-6,52}, -{79,-6,53}, -{79,-6,54}, -{79,-6,55}, -{79,-6,56}, -{79,-6,57}, -{79,-6,58}, -{79,-6,59}, -{79,-6,60}, -{79,-6,61}, -{79,-6,62}, -{79,-6,63}, -{79,-6,64}, -{79,-6,65}, -{79,-6,66}, -{79,-6,67}, -{79,-6,68}, -{79,-6,69}, -{79,-6,70}, -{79,-6,71}, -{79,-6,72}, -{79,-6,73}, -{79,-6,74}, -{79,-6,75}, -{79,-6,76}, -{79,-6,77}, -{79,-6,78}, -{79,-6,79}, -{79,-6,80}, -{79,-5,-32}, -{79,-5,-31}, -{79,-5,-30}, -{79,-5,-29}, -{79,-5,-28}, -{79,-5,-27}, -{79,-5,-26}, -{79,-5,-25}, -{79,-5,-24}, -{79,-5,-23}, -{79,-5,-22}, -{79,-5,-21}, -{79,-5,-20}, -{79,-5,-19}, -{79,-5,-18}, -{79,-5,-17}, -{79,-5,-16}, -{79,-5,-15}, -{79,-5,-14}, -{79,-5,-13}, -{79,-5,-12}, -{79,-5,-11}, -{79,-5,-10}, -{79,-5,-9}, -{79,-5,-8}, -{79,-5,-7}, -{79,-5,-6}, -{79,-5,-5}, -{79,-5,-4}, -{79,-5,-3}, -{79,-5,-2}, -{79,-5,-1}, -{79,-5,0}, -{79,-5,1}, -{79,-5,2}, -{79,-5,3}, -{79,-5,4}, -{79,-5,5}, -{79,-5,6}, -{79,-5,7}, -{79,-5,8}, -{79,-5,9}, -{79,-5,10}, -{79,-5,11}, -{79,-5,12}, -{79,-5,13}, -{79,-5,14}, -{79,-5,15}, -{79,-5,16}, -{79,-5,17}, -{79,-5,18}, -{79,-5,19}, -{79,-5,20}, -{79,-5,21}, -{79,-5,22}, -{79,-5,23}, -{79,-5,24}, -{79,-5,25}, -{79,-5,26}, -{79,-5,27}, -{79,-5,28}, -{79,-5,29}, -{79,-5,30}, -{79,-5,31}, -{79,-5,32}, -{79,-5,33}, -{79,-5,34}, -{79,-5,35}, -{79,-5,36}, -{79,-5,37}, -{79,-5,38}, -{79,-5,39}, -{79,-5,40}, -{79,-5,41}, -{79,-5,42}, -{79,-5,43}, -{79,-5,44}, -{79,-5,45}, -{79,-5,46}, -{79,-5,47}, -{79,-5,48}, -{79,-5,49}, -{79,-5,50}, -{79,-5,51}, -{79,-5,52}, -{79,-5,53}, -{79,-5,54}, -{79,-5,55}, -{79,-5,56}, -{79,-5,57}, -{79,-5,58}, -{79,-5,59}, -{79,-5,60}, -{79,-5,61}, -{79,-5,62}, -{79,-5,63}, -{79,-5,64}, -{79,-5,65}, -{79,-5,66}, -{79,-5,67}, -{79,-5,68}, -{79,-5,69}, -{79,-5,70}, -{79,-5,71}, -{79,-5,72}, -{79,-5,73}, -{79,-5,74}, -{79,-5,75}, -{79,-5,76}, -{79,-5,77}, -{79,-5,78}, -{79,-5,79}, -{79,-5,80}, -{79,-4,-32}, -{79,-4,-31}, -{79,-4,-30}, -{79,-4,-29}, -{79,-4,-28}, -{79,-4,-27}, -{79,-4,-26}, -{79,-4,-25}, -{79,-4,-24}, -{79,-4,-23}, -{79,-4,-22}, -{79,-4,-21}, -{79,-4,-20}, -{79,-4,-19}, -{79,-4,-18}, -{79,-4,-17}, -{79,-4,-16}, -{79,-4,-15}, -{79,-4,-14}, -{79,-4,-13}, -{79,-4,-12}, -{79,-4,-11}, -{79,-4,-10}, -{79,-4,-9}, -{79,-4,-8}, -{79,-4,-7}, -{79,-4,-6}, -{79,-4,-5}, -{79,-4,-4}, -{79,-4,-3}, -{79,-4,-2}, -{79,-4,-1}, -{79,-4,0}, -{79,-4,1}, -{79,-4,2}, -{79,-4,3}, -{79,-4,4}, -{79,-4,5}, -{79,-4,6}, -{79,-4,7}, -{79,-4,8}, -{79,-4,9}, -{79,-4,10}, -{79,-4,11}, -{79,-4,12}, -{79,-4,13}, -{79,-4,14}, -{79,-4,15}, -{79,-4,16}, -{79,-4,17}, -{79,-4,18}, -{79,-4,19}, -{79,-4,20}, -{79,-4,21}, -{79,-4,22}, -{79,-4,23}, -{79,-4,24}, -{79,-4,25}, -{79,-4,26}, -{79,-4,27}, -{79,-4,28}, -{79,-4,29}, -{79,-4,30}, -{79,-4,31}, -{79,-4,32}, -{79,-4,33}, -{79,-4,34}, -{79,-4,35}, -{79,-4,36}, -{79,-4,37}, -{79,-4,38}, -{79,-4,39}, -{79,-4,40}, -{79,-4,41}, -{79,-4,42}, -{79,-4,43}, -{79,-4,44}, -{79,-4,45}, -{79,-4,46}, -{79,-4,47}, -{79,-4,48}, -{79,-4,49}, -{79,-4,50}, -{79,-4,51}, -{79,-4,52}, -{79,-4,53}, -{79,-4,54}, -{79,-4,55}, -{79,-4,56}, -{79,-4,57}, -{79,-4,58}, -{79,-4,59}, -{79,-4,60}, -{79,-4,61}, -{79,-4,62}, -{79,-4,63}, -{79,-4,64}, -{79,-4,65}, -{79,-4,66}, -{79,-4,67}, -{79,-4,68}, -{79,-4,69}, -{79,-4,70}, -{79,-4,71}, -{79,-4,72}, -{79,-4,73}, -{79,-4,74}, -{79,-4,75}, -{79,-4,76}, -{79,-4,77}, -{79,-4,78}, -{79,-4,79}, -{79,-4,80}, -{79,-3,-32}, -{79,-3,-31}, -{79,-3,-30}, -{79,-3,-29}, -{79,-3,-28}, -{79,-3,-27}, -{79,-3,-26}, -{79,-3,-25}, -{79,-3,-24}, -{79,-3,-23}, -{79,-3,-22}, -{79,-3,-21}, -{79,-3,-20}, -{79,-3,-19}, -{79,-3,-18}, -{79,-3,-17}, -{79,-3,-16}, -{79,-3,-15}, -{79,-3,-14}, -{79,-3,-13}, -{79,-3,-12}, -{79,-3,-11}, -{79,-3,-10}, -{79,-3,-9}, -{79,-3,-8}, -{79,-3,-7}, -{79,-3,-6}, -{79,-3,-5}, -{79,-3,-4}, -{79,-3,-3}, -{79,-3,-2}, -{79,-3,-1}, -{79,-3,0}, -{79,-3,1}, -{79,-3,2}, -{79,-3,3}, -{79,-3,4}, -{79,-3,5}, -{79,-3,6}, -{79,-3,7}, -{79,-3,8}, -{79,-3,9}, -{79,-3,10}, -{79,-3,11}, -{79,-3,12}, -{79,-3,13}, -{79,-3,14}, -{79,-3,15}, -{79,-3,16}, -{79,-3,17}, -{79,-3,18}, -{79,-3,19}, -{79,-3,20}, -{79,-3,21}, -{79,-3,22}, -{79,-3,23}, -{79,-3,24}, -{79,-3,25}, -{79,-3,26}, -{79,-3,27}, -{79,-3,28}, -{79,-3,29}, -{79,-3,30}, -{79,-3,31}, -{79,-3,32}, -{79,-3,33}, -{79,-3,34}, -{79,-3,35}, -{79,-3,36}, -{79,-3,37}, -{79,-3,38}, -{79,-3,39}, -{79,-3,40}, -{79,-3,41}, -{79,-3,42}, -{79,-3,43}, -{79,-3,44}, -{79,-3,45}, -{79,-3,46}, -{79,-3,47}, -{79,-3,48}, -{79,-3,49}, -{79,-3,50}, -{79,-3,51}, -{79,-3,52}, -{79,-3,53}, -{79,-3,54}, -{79,-3,55}, -{79,-3,56}, -{79,-3,57}, -{79,-3,58}, -{79,-3,59}, -{79,-3,60}, -{79,-3,61}, -{79,-3,62}, -{79,-3,63}, -{79,-3,64}, -{79,-3,65}, -{79,-3,66}, -{79,-3,67}, -{79,-3,68}, -{79,-3,69}, -{79,-3,70}, -{79,-3,71}, -{79,-3,72}, -{79,-3,73}, -{79,-3,74}, -{79,-3,75}, -{79,-3,76}, -{79,-3,77}, -{79,-3,78}, -{79,-3,79}, -{79,-3,80}, -{79,-2,-32}, -{79,-2,-31}, -{79,-2,-30}, -{79,-2,-29}, -{79,-2,-28}, -{79,-2,-27}, -{79,-2,-26}, -{79,-2,-25}, -{79,-2,-24}, -{79,-2,-23}, -{79,-2,-22}, -{79,-2,-21}, -{79,-2,-20}, -{79,-2,-19}, -{79,-2,-18}, -{79,-2,-17}, -{79,-2,-16}, -{79,-2,-15}, -{79,-2,-14}, -{79,-2,-13}, -{79,-2,-12}, -{79,-2,-11}, -{79,-2,-10}, -{79,-2,-9}, -{79,-2,-8}, -{79,-2,-7}, -{79,-2,-6}, -{79,-2,-5}, -{79,-2,-4}, -{79,-2,-3}, -{79,-2,-2}, -{79,-2,-1}, -{79,-2,0}, -{79,-2,1}, -{79,-2,2}, -{79,-2,3}, -{79,-2,4}, -{79,-2,5}, -{79,-2,6}, -{79,-2,7}, -{79,-2,8}, -{79,-2,9}, -{79,-2,10}, -{79,-2,11}, -{79,-2,12}, -{79,-2,13}, -{79,-2,14}, -{79,-2,15}, -{79,-2,16}, -{79,-2,17}, -{79,-2,18}, -{79,-2,19}, -{79,-2,20}, -{79,-2,21}, -{79,-2,22}, -{79,-2,23}, -{79,-2,24}, -{79,-2,25}, -{79,-2,26}, -{79,-2,27}, -{79,-2,28}, -{79,-2,29}, -{79,-2,30}, -{79,-2,31}, -{79,-2,32}, -{79,-2,33}, -{79,-2,34}, -{79,-2,35}, -{79,-2,36}, -{79,-2,37}, -{79,-2,38}, -{79,-2,39}, -{79,-2,40}, -{79,-2,41}, -{79,-2,42}, -{79,-2,43}, -{79,-2,44}, -{79,-2,45}, -{79,-2,46}, -{79,-2,47}, -{79,-2,48}, -{79,-2,49}, -{79,-2,50}, -{79,-2,51}, -{79,-2,52}, -{79,-2,53}, -{79,-2,54}, -{79,-2,55}, -{79,-2,56}, -{79,-2,57}, -{79,-2,58}, -{79,-2,59}, -{79,-2,60}, -{79,-2,61}, -{79,-2,62}, -{79,-2,63}, -{79,-2,64}, -{79,-2,65}, -{79,-2,66}, -{79,-2,67}, -{79,-2,68}, -{79,-2,69}, -{79,-2,70}, -{79,-2,71}, -{79,-2,72}, -{79,-2,73}, -{79,-2,74}, -{79,-2,75}, -{79,-2,76}, -{79,-2,77}, -{79,-2,78}, -{79,-2,79}, -{79,-2,80}, -{79,-1,-32}, -{79,-1,-31}, -{79,-1,-30}, -{79,-1,-29}, -{79,-1,-28}, -{79,-1,-27}, -{79,-1,-26}, -{79,-1,-25}, -{79,-1,-24}, -{79,-1,-23}, -{79,-1,-22}, -{79,-1,-21}, -{79,-1,-20}, -{79,-1,-19}, -{79,-1,-18}, -{79,-1,-17}, -{79,-1,-16}, -{79,-1,-15}, -{79,-1,-14}, -{79,-1,-13}, -{79,-1,-12}, -{79,-1,-11}, -{79,-1,-10}, -{79,-1,-9}, -{79,-1,-8}, -{79,-1,-7}, -{79,-1,-6}, -{79,-1,-5}, -{79,-1,-4}, -{79,-1,-3}, -{79,-1,-2}, -{79,-1,-1}, -{79,-1,0}, -{79,-1,1}, -{79,-1,2}, -{79,-1,3}, -{79,-1,4}, -{79,-1,5}, -{79,-1,6}, -{79,-1,7}, -{79,-1,8}, -{79,-1,9}, -{79,-1,10}, -{79,-1,11}, -{79,-1,12}, -{79,-1,13}, -{79,-1,14}, -{79,-1,15}, -{79,-1,16}, -{79,-1,17}, -{79,-1,18}, -{79,-1,19}, -{79,-1,20}, -{79,-1,21}, -{79,-1,22}, -{79,-1,23}, -{79,-1,24}, -{79,-1,25}, -{79,-1,26}, -{79,-1,27}, -{79,-1,28}, -{79,-1,29}, -{79,-1,30}, -{79,-1,31}, -{79,-1,32}, -{79,-1,33}, -{79,-1,34}, -{79,-1,35}, -{79,-1,36}, -{79,-1,37}, -{79,-1,38}, -{79,-1,39}, -{79,-1,40}, -{79,-1,41}, -{79,-1,42}, -{79,-1,43}, -{79,-1,44}, -{79,-1,45}, -{79,-1,46}, -{79,-1,47}, -{79,-1,48}, -{79,-1,49}, -{79,-1,50}, -{79,-1,51}, -{79,-1,52}, -{79,-1,53}, -{79,-1,54}, -{79,-1,55}, -{79,-1,56}, -{79,-1,57}, -{79,-1,58}, -{79,-1,59}, -{79,-1,60}, -{79,-1,61}, -{79,-1,62}, -{79,-1,63}, -{79,-1,64}, -{79,-1,65}, -{79,-1,66}, -{79,-1,67}, -{79,-1,68}, -{79,-1,69}, -{79,-1,70}, -{79,-1,71}, -{79,-1,72}, -{79,-1,73}, -{79,-1,74}, -{79,-1,75}, -{79,-1,76}, -{79,-1,77}, -{79,-1,78}, -{79,-1,79}, -{79,-1,80}, -{79,0,-32}, -{79,0,-31}, -{79,0,-30}, -{79,0,-29}, -{79,0,-28}, -{79,0,-27}, -{79,0,-26}, -{79,0,-25}, -{79,0,-24}, -{79,0,-23}, -{79,0,-22}, -{79,0,-21}, -{79,0,-20}, -{79,0,-19}, -{79,0,-18}, -{79,0,-17}, -{79,0,-16}, -{79,0,-15}, -{79,0,-14}, -{79,0,-13}, -{79,0,-12}, -{79,0,-11}, -{79,0,-10}, -{79,0,-9}, -{79,0,-8}, -{79,0,-7}, -{79,0,-6}, -{79,0,-5}, -{79,0,-4}, -{79,0,-3}, -{79,0,-2}, -{79,0,-1}, -{79,0,0}, -{79,0,1}, -{79,0,2}, -{79,0,3}, -{79,0,4}, -{79,0,5}, -{79,0,6}, -{79,0,7}, -{79,0,8}, -{79,0,9}, -{79,0,10}, -{79,0,11}, -{79,0,12}, -{79,0,13}, -{79,0,14}, -{79,0,15}, -{79,0,16}, -{79,0,17}, -{79,0,18}, -{79,0,19}, -{79,0,20}, -{79,0,21}, -{79,0,22}, -{79,0,23}, -{79,0,24}, -{79,0,25}, -{79,0,26}, -{79,0,27}, -{79,0,28}, -{79,0,29}, -{79,0,30}, -{79,0,31}, -{79,0,32}, -{79,0,33}, -{79,0,34}, -{79,0,35}, -{79,0,36}, -{79,0,37}, -{79,0,38}, -{79,0,39}, -{79,0,40}, -{79,0,41}, -{79,0,42}, -{79,0,43}, -{79,0,44}, -{79,0,45}, -{79,0,46}, -{79,0,47}, -{79,0,48}, -{79,0,49}, -{79,0,50}, -{79,0,51}, -{79,0,52}, -{79,0,53}, -{79,0,54}, -{79,0,55}, -{79,0,56}, -{79,0,57}, -{79,0,58}, -{79,0,59}, -{79,0,60}, -{79,0,61}, -{79,0,62}, -{79,0,63}, -{79,0,64}, -{79,0,65}, -{79,0,66}, -{79,0,67}, -{79,0,68}, -{79,0,69}, -{79,0,70}, -{79,0,71}, -{79,0,72}, -{79,0,73}, -{79,0,74}, -{79,0,75}, -{79,0,76}, -{79,0,77}, -{79,0,78}, -{79,0,79}, -{79,0,80}, -{79,1,-32}, -{79,1,-31}, -{79,1,-30}, -{79,1,-29}, -{79,1,-28}, -{79,1,-27}, -{79,1,-26}, -{79,1,-25}, -{79,1,-24}, -{79,1,-23}, -{79,1,-22}, -{79,1,-21}, -{79,1,-20}, -{79,1,-19}, -{79,1,-18}, -{79,1,-17}, -{79,1,-16}, -{79,1,-15}, -{79,1,-14}, -{79,1,-13}, -{79,1,-12}, -{79,1,-11}, -{79,1,-10}, -{79,1,-9}, -{79,1,-8}, -{79,1,-7}, -{79,1,-6}, -{79,1,-5}, -{79,1,-4}, -{79,1,-3}, -{79,1,-2}, -{79,1,-1}, -{79,1,0}, -{79,1,1}, -{79,1,2}, -{79,1,3}, -{79,1,4}, -{79,1,5}, -{79,1,6}, -{79,1,7}, -{79,1,8}, -{79,1,9}, -{79,1,10}, -{79,1,11}, -{79,1,12}, -{79,1,13}, -{79,1,14}, -{79,1,15}, -{79,1,16}, -{79,1,17}, -{79,1,18}, -{79,1,19}, -{79,1,20}, -{79,1,21}, -{79,1,22}, -{79,1,23}, -{79,1,24}, -{79,1,25}, -{79,1,26}, -{79,1,27}, -{79,1,28}, -{79,1,29}, -{79,1,30}, -{79,1,31}, -{79,1,32}, -{79,1,33}, -{79,1,34}, -{79,1,35}, -{79,1,36}, -{79,1,37}, -{79,1,38}, -{79,1,39}, -{79,1,40}, -{79,1,41}, -{79,1,42}, -{79,1,43}, -{79,1,44}, -{79,1,45}, -{79,1,46}, -{79,1,47}, -{79,1,48}, -{79,1,49}, -{79,1,50}, -{79,1,51}, -{79,1,52}, -{79,1,53}, -{79,1,54}, -{79,1,55}, -{79,1,56}, -{79,1,57}, -{79,1,58}, -{79,1,59}, -{79,1,60}, -{79,1,61}, -{79,1,62}, -{79,1,63}, -{79,1,64}, -{79,1,65}, -{79,1,66}, -{79,1,67}, -{79,1,68}, -{79,1,69}, -{79,1,70}, -{79,1,71}, -{79,1,72}, -{79,1,73}, -{79,1,74}, -{79,1,75}, -{79,1,76}, -{79,1,77}, -{79,1,78}, -{79,1,79}, -{79,1,80}, -{79,2,-32}, -{79,2,-31}, -{79,2,-30}, -{79,2,-29}, -{79,2,-28}, -{79,2,-27}, -{79,2,-26}, -{79,2,-25}, -{79,2,-24}, -{79,2,-23}, -{79,2,-22}, -{79,2,-21}, -{79,2,-20}, -{79,2,-19}, -{79,2,-18}, -{79,2,-17}, -{79,2,-16}, -{79,2,-15}, -{79,2,-14}, -{79,2,-13}, -{79,2,-12}, -{79,2,-11}, -{79,2,-10}, -{79,2,-9}, -{79,2,-8}, -{79,2,-7}, -{79,2,-6}, -{79,2,-5}, -{79,2,-4}, -{79,2,-3}, -{79,2,-2}, -{79,2,-1}, -{79,2,0}, -{79,2,1}, -{79,2,2}, -{79,2,3}, -{79,2,4}, -{79,2,5}, -{79,2,6}, -{79,2,7}, -{79,2,8}, -{79,2,9}, -{79,2,10}, -{79,2,11}, -{79,2,12}, -{79,2,13}, -{79,2,14}, -{79,2,15}, -{79,2,16}, -{79,2,17}, -{79,2,18}, -{79,2,19}, -{79,2,20}, -{79,2,21}, -{79,2,22}, -{79,2,23}, -{79,2,24}, -{79,2,25}, -{79,2,26}, -{79,2,27}, -{79,2,28}, -{79,2,29}, -{79,2,30}, -{79,2,31}, -{79,2,32}, -{79,2,33}, -{79,2,34}, -{79,2,35}, -{79,2,36}, -{79,2,37}, -{79,2,38}, -{79,2,39}, -{79,2,40}, -{79,2,41}, -{79,2,42}, -{79,2,43}, -{79,2,44}, -{79,2,45}, -{79,2,46}, -{79,2,47}, -{79,2,48}, -{79,2,49}, -{79,2,50}, -{79,2,51}, -{79,2,52}, -{79,2,53}, -{79,2,54}, -{79,2,55}, -{79,2,56}, -{79,2,57}, -{79,2,58}, -{79,2,59}, -{79,2,60}, -{79,2,61}, -{79,2,62}, -{79,2,63}, -{79,2,64}, -{79,2,65}, -{79,2,66}, -{79,2,67}, -{79,2,68}, -{79,2,69}, -{79,2,70}, -{79,2,71}, -{79,2,72}, -{79,2,73}, -{79,2,74}, -{79,2,75}, -{79,2,76}, -{79,2,77}, -{79,2,78}, -{79,2,79}, -{79,2,80}, -{79,3,-32}, -{79,3,-31}, -{79,3,-30}, -{79,3,-29}, -{79,3,-28}, -{79,3,-27}, -{79,3,-26}, -{79,3,-25}, -{79,3,-24}, -{79,3,-23}, -{79,3,-22}, -{79,3,-21}, -{79,3,-20}, -{79,3,-19}, -{79,3,-18}, -{79,3,-17}, -{79,3,-16}, -{79,3,-15}, -{79,3,-14}, -{79,3,-13}, -{79,3,-12}, -{79,3,-11}, -{79,3,-10}, -{79,3,-9}, -{79,3,-8}, -{79,3,-7}, -{79,3,-6}, -{79,3,-5}, -{79,3,-4}, -{79,3,-3}, -{79,3,-2}, -{79,3,-1}, -{79,3,0}, -{79,3,1}, -{79,3,2}, -{79,3,3}, -{79,3,4}, -{79,3,5}, -{79,3,6}, -{79,3,7}, -{79,3,8}, -{79,3,9}, -{79,3,10}, -{79,3,11}, -{79,3,12}, -{79,3,13}, -{79,3,14}, -{79,3,15}, -{79,3,16}, -{79,3,17}, -{79,3,18}, -{79,3,19}, -{79,3,20}, -{79,3,21}, -{79,3,22}, -{79,3,23}, -{79,3,24}, -{79,3,25}, -{79,3,26}, -{79,3,27}, -{79,3,28}, -{79,3,29}, -{79,3,30}, -{79,3,31}, -{79,3,32}, -{79,3,33}, -{79,3,34}, -{79,3,35}, -{79,3,36}, -{79,3,37}, -{79,3,38}, -{79,3,39}, -{79,3,40}, -{79,3,41}, -{79,3,42}, -{79,3,43}, -{79,3,44}, -{79,3,45}, -{79,3,46}, -{79,3,47}, -{79,3,48}, -{79,3,49}, -{79,3,50}, -{79,3,51}, -{79,3,52}, -{79,3,53}, -{79,3,54}, -{79,3,55}, -{79,3,56}, -{79,3,57}, -{79,3,58}, -{79,3,59}, -{79,3,60}, -{79,3,61}, -{79,3,62}, -{79,3,63}, -{79,3,64}, -{79,3,65}, -{79,3,66}, -{79,3,67}, -{79,3,68}, -{79,3,69}, -{79,3,70}, -{79,3,71}, -{79,3,72}, -{79,3,73}, -{79,3,74}, -{79,3,75}, -{79,3,76}, -{79,3,77}, -{79,3,78}, -{79,3,79}, -{79,3,80}, -{79,4,-32}, -{79,4,-31}, -{79,4,-30}, -{79,4,-29}, -{79,4,-28}, -{79,4,-27}, -{79,4,-26}, -{79,4,-25}, -{79,4,-24}, -{79,4,-23}, -{79,4,-22}, -{79,4,-21}, -{79,4,-20}, -{79,4,-19}, -{79,4,-18}, -{79,4,-17}, -{79,4,-16}, -{79,4,-15}, -{79,4,-14}, -{79,4,-13}, -{79,4,-12}, -{79,4,-11}, -{79,4,-10}, -{79,4,-9}, -{79,4,-8}, -{79,4,-7}, -{79,4,-6}, -{79,4,-5}, -{79,4,-4}, -{79,4,-3}, -{79,4,-2}, -{79,4,-1}, -{79,4,0}, -{79,4,1}, -{79,4,2}, -{79,4,3}, -{79,4,4}, -{79,4,5}, -{79,4,6}, -{79,4,7}, -{79,4,8}, -{79,4,9}, -{79,4,10}, -{79,4,11}, -{79,4,12}, -{79,4,13}, -{79,4,14}, -{79,4,15}, -{79,4,16}, -{79,4,17}, -{79,4,18}, -{79,4,19}, -{79,4,20}, -{79,4,21}, -{79,4,22}, -{79,4,23}, -{79,4,24}, -{79,4,25}, -{79,4,26}, -{79,4,27}, -{79,4,28}, -{79,4,29}, -{79,4,30}, -{79,4,31}, -{79,4,32}, -{79,4,33}, -{79,4,34}, -{79,4,35}, -{79,4,36}, -{79,4,37}, -{79,4,38}, -{79,4,39}, -{79,4,40}, -{79,4,41}, -{79,4,42}, -{79,4,43}, -{79,4,44}, -{79,4,45}, -{79,4,46}, -{79,4,47}, -{79,4,48}, -{79,4,49}, -{79,4,50}, -{79,4,51}, -{79,4,52}, -{79,4,53}, -{79,4,54}, -{79,4,55}, -{79,4,56}, -{79,4,57}, -{79,4,58}, -{79,4,59}, -{79,4,60}, -{79,4,61}, -{79,4,62}, -{79,4,63}, -{79,4,64}, -{79,4,65}, -{79,4,66}, -{79,4,67}, -{79,4,68}, -{79,4,69}, -{79,4,70}, -{79,4,71}, -{79,4,72}, -{79,4,73}, -{79,4,74}, -{79,4,75}, -{79,4,76}, -{79,4,77}, -{79,4,78}, -{79,4,79}, -{79,4,80}, -{79,4,81}, -{79,5,-32}, -{79,5,-31}, -{79,5,-30}, -{79,5,-29}, -{79,5,-28}, -{79,5,-27}, -{79,5,-26}, -{79,5,-25}, -{79,5,-24}, -{79,5,-23}, -{79,5,-22}, -{79,5,-21}, -{79,5,-20}, -{79,5,-19}, -{79,5,-18}, -{79,5,-17}, -{79,5,-16}, -{79,5,-15}, -{79,5,-14}, -{79,5,-13}, -{79,5,-12}, -{79,5,-11}, -{79,5,-10}, -{79,5,-9}, -{79,5,-8}, -{79,5,-7}, -{79,5,-6}, -{79,5,-5}, -{79,5,-4}, -{79,5,-3}, -{79,5,-2}, -{79,5,-1}, -{79,5,0}, -{79,5,1}, -{79,5,2}, -{79,5,3}, -{79,5,4}, -{79,5,5}, -{79,5,6}, -{79,5,7}, -{79,5,8}, -{79,5,9}, -{79,5,10}, -{79,5,11}, -{79,5,12}, -{79,5,13}, -{79,5,14}, -{79,5,15}, -{79,5,16}, -{79,5,17}, -{79,5,18}, -{79,5,19}, -{79,5,20}, -{79,5,21}, -{79,5,22}, -{79,5,23}, -{79,5,24}, -{79,5,25}, -{79,5,26}, -{79,5,27}, -{79,5,28}, -{79,5,29}, -{79,5,30}, -{79,5,31}, -{79,5,32}, -{79,5,33}, -{79,5,34}, -{79,5,35}, -{79,5,36}, -{79,5,37}, -{79,5,38}, -{79,5,39}, -{79,5,40}, -{79,5,41}, -{79,5,42}, -{79,5,43}, -{79,5,44}, -{79,5,45}, -{79,5,46}, -{79,5,47}, -{79,5,48}, -{79,5,49}, -{79,5,50}, -{79,5,51}, -{79,5,52}, -{79,5,53}, -{79,5,54}, -{79,5,55}, -{79,5,56}, -{79,5,57}, -{79,5,58}, -{79,5,59}, -{79,5,60}, -{79,5,61}, -{79,5,62}, -{79,5,63}, -{79,5,64}, -{79,5,65}, -{79,5,66}, -{79,5,67}, -{79,5,68}, -{79,5,69}, -{79,5,70}, -{79,5,71}, -{79,5,72}, -{79,5,73}, -{79,5,74}, -{79,5,75}, -{79,5,76}, -{79,5,77}, -{79,5,78}, -{79,5,79}, -{79,5,80}, -{79,5,81}, -{79,6,-32}, -{79,6,-31}, -{79,6,-30}, -{79,6,-29}, -{79,6,-28}, -{79,6,-27}, -{79,6,-26}, -{79,6,-25}, -{79,6,-24}, -{79,6,-23}, -{79,6,-22}, -{79,6,-21}, -{79,6,-20}, -{79,6,-19}, -{79,6,-18}, -{79,6,-17}, -{79,6,-16}, -{79,6,-15}, -{79,6,-14}, -{79,6,-13}, -{79,6,-12}, -{79,6,-11}, -{79,6,-10}, -{79,6,-9}, -{79,6,-8}, -{79,6,-7}, -{79,6,-6}, -{79,6,-5}, -{79,6,-4}, -{79,6,-3}, -{79,6,-2}, -{79,6,-1}, -{79,6,0}, -{79,6,1}, -{79,6,2}, -{79,6,3}, -{79,6,4}, -{79,6,5}, -{79,6,6}, -{79,6,7}, -{79,6,8}, -{79,6,9}, -{79,6,10}, -{79,6,11}, -{79,6,12}, -{79,6,13}, -{79,6,14}, -{79,6,15}, -{79,6,16}, -{79,6,17}, -{79,6,18}, -{79,6,19}, -{79,6,20}, -{79,6,21}, -{79,6,22}, -{79,6,23}, -{79,6,24}, -{79,6,25}, -{79,6,26}, -{79,6,27}, -{79,6,28}, -{79,6,29}, -{79,6,30}, -{79,6,31}, -{79,6,32}, -{79,6,33}, -{79,6,34}, -{79,6,35}, -{79,6,36}, -{79,6,37}, -{79,6,38}, -{79,6,39}, -{79,6,40}, -{79,6,41}, -{79,6,42}, -{79,6,43}, -{79,6,44}, -{79,6,45}, -{79,6,46}, -{79,6,47}, -{79,6,48}, -{79,6,49}, -{79,6,50}, -{79,6,51}, -{79,6,52}, -{79,6,53}, -{79,6,54}, -{79,6,55}, -{79,6,56}, -{79,6,57}, -{79,6,58}, -{79,6,59}, -{79,6,60}, -{79,6,61}, -{79,6,62}, -{79,6,63}, -{79,6,64}, -{79,6,65}, -{79,6,66}, -{79,6,67}, -{79,6,68}, -{79,6,69}, -{79,6,70}, -{79,6,71}, -{79,6,72}, -{79,6,73}, -{79,6,74}, -{79,6,75}, -{79,6,76}, -{79,6,77}, -{79,6,78}, -{79,6,79}, -{79,6,80}, -{79,6,81}, -{79,7,-32}, -{79,7,-31}, -{79,7,-30}, -{79,7,-29}, -{79,7,-28}, -{79,7,-27}, -{79,7,-26}, -{79,7,-25}, -{79,7,-24}, -{79,7,-23}, -{79,7,-22}, -{79,7,-21}, -{79,7,-20}, -{79,7,-19}, -{79,7,-18}, -{79,7,-17}, -{79,7,-16}, -{79,7,-15}, -{79,7,-14}, -{79,7,-13}, -{79,7,-12}, -{79,7,-11}, -{79,7,-10}, -{79,7,-9}, -{79,7,-8}, -{79,7,-7}, -{79,7,-6}, -{79,7,-5}, -{79,7,-4}, -{79,7,-3}, -{79,7,-2}, -{79,7,-1}, -{79,7,0}, -{79,7,1}, -{79,7,2}, -{79,7,3}, -{79,7,4}, -{79,7,5}, -{79,7,6}, -{79,7,7}, -{79,7,8}, -{79,7,9}, -{79,7,10}, -{79,7,11}, -{79,7,12}, -{79,7,13}, -{79,7,14}, -{79,7,15}, -{79,7,16}, -{79,7,17}, -{79,7,18}, -{79,7,19}, -{79,7,20}, -{79,7,21}, -{79,7,22}, -{79,7,23}, -{79,7,24}, -{79,7,25}, -{79,7,26}, -{79,7,27}, -{79,7,28}, -{79,7,29}, -{79,7,30}, -{79,7,31}, -{79,7,32}, -{79,7,33}, -{79,7,34}, -{79,7,35}, -{79,7,36}, -{79,7,37}, -{79,7,38}, -{79,7,39}, -{79,7,40}, -{79,7,41}, -{79,7,42}, -{79,7,43}, -{79,7,44}, -{79,7,45}, -{79,7,46}, -{79,7,47}, -{79,7,48}, -{79,7,49}, -{79,7,50}, -{79,7,51}, -{79,7,52}, -{79,7,53}, -{79,7,54}, -{79,7,55}, -{79,7,56}, -{79,7,57}, -{79,7,58}, -{79,7,59}, -{79,7,60}, -{79,7,61}, -{79,7,62}, -{79,7,63}, -{79,7,64}, -{79,7,65}, -{79,7,66}, -{79,7,67}, -{79,7,68}, -{79,7,69}, -{79,7,70}, -{79,7,71}, -{79,7,72}, -{79,7,73}, -{79,7,74}, -{79,7,75}, -{79,7,76}, -{79,7,77}, -{79,7,78}, -{79,7,79}, -{79,7,80}, -{79,7,81}, -{79,8,-32}, -{79,8,-31}, -{79,8,-30}, -{79,8,-29}, -{79,8,-28}, -{79,8,-27}, -{79,8,-26}, -{79,8,-25}, -{79,8,-24}, -{79,8,-23}, -{79,8,-22}, -{79,8,-21}, -{79,8,-20}, -{79,8,-19}, -{79,8,-18}, -{79,8,-17}, -{79,8,-16}, -{79,8,-15}, -{79,8,-14}, -{79,8,-13}, -{79,8,-12}, -{79,8,-11}, -{79,8,-10}, -{79,8,-9}, -{79,8,-8}, -{79,8,-7}, -{79,8,-6}, -{79,8,-5}, -{79,8,-4}, -{79,8,-3}, -{79,8,-2}, -{79,8,-1}, -{79,8,0}, -{79,8,1}, -{79,8,2}, -{79,8,3}, -{79,8,4}, -{79,8,5}, -{79,8,6}, -{79,8,7}, -{79,8,8}, -{79,8,9}, -{79,8,10}, -{79,8,11}, -{79,8,12}, -{79,8,13}, -{79,8,14}, -{79,8,15}, -{79,8,16}, -{79,8,17}, -{79,8,18}, -{79,8,19}, -{79,8,20}, -{79,8,21}, -{79,8,22}, -{79,8,23}, -{79,8,24}, -{79,8,25}, -{79,8,26}, -{79,8,27}, -{79,8,28}, -{79,8,29}, -{79,8,30}, -{79,8,31}, -{79,8,32}, -{79,8,33}, -{79,8,34}, -{79,8,35}, -{79,8,36}, -{79,8,37}, -{79,8,38}, -{79,8,39}, -{79,8,40}, -{79,8,41}, -{79,8,42}, -{79,8,43}, -{79,8,44}, -{79,8,45}, -{79,8,46}, -{79,8,47}, -{79,8,48}, -{79,8,49}, -{79,8,50}, -{79,8,51}, -{79,8,52}, -{79,8,53}, -{79,8,54}, -{79,8,55}, -{79,8,56}, -{79,8,57}, -{79,8,58}, -{79,8,59}, -{79,8,60}, -{79,8,61}, -{79,8,62}, -{79,8,63}, -{79,8,64}, -{79,8,65}, -{79,8,66}, -{79,8,67}, -{79,8,68}, -{79,8,69}, -{79,8,70}, -{79,8,71}, -{79,8,72}, -{79,8,73}, -{79,8,74}, -{79,8,75}, -{79,8,76}, -{79,8,77}, -{79,8,78}, -{79,8,79}, -{79,8,80}, -{79,8,81}, -{79,9,-32}, -{79,9,-31}, -{79,9,-30}, -{79,9,-29}, -{79,9,-28}, -{79,9,-27}, -{79,9,-26}, -{79,9,-25}, -{79,9,-24}, -{79,9,-23}, -{79,9,-22}, -{79,9,-21}, -{79,9,-20}, -{79,9,-19}, -{79,9,-18}, -{79,9,-17}, -{79,9,-16}, -{79,9,-15}, -{79,9,-14}, -{79,9,-13}, -{79,9,-12}, -{79,9,-11}, -{79,9,-10}, -{79,9,-9}, -{79,9,-8}, -{79,9,-7}, -{79,9,-6}, -{79,9,-5}, -{79,9,-4}, -{79,9,-3}, -{79,9,-2}, -{79,9,-1}, -{79,9,0}, -{79,9,1}, -{79,9,2}, -{79,9,3}, -{79,9,4}, -{79,9,5}, -{79,9,6}, -{79,9,7}, -{79,9,8}, -{79,9,9}, -{79,9,10}, -{79,9,11}, -{79,9,12}, -{79,9,13}, -{79,9,14}, -{79,9,15}, -{79,9,16}, -{79,9,17}, -{79,9,18}, -{79,9,19}, -{79,9,20}, -{79,9,21}, -{79,9,22}, -{79,9,23}, -{79,9,24}, -{79,9,25}, -{79,9,26}, -{79,9,27}, -{79,9,28}, -{79,9,29}, -{79,9,30}, -{79,9,31}, -{79,9,32}, -{79,9,33}, -{79,9,34}, -{79,9,35}, -{79,9,36}, -{79,9,37}, -{79,9,38}, -{79,9,39}, -{79,9,40}, -{79,9,41}, -{79,9,42}, -{79,9,43}, -{79,9,44}, -{79,9,45}, -{79,9,46}, -{79,9,47}, -{79,9,48}, -{79,9,49}, -{79,9,50}, -{79,9,51}, -{79,9,52}, -{79,9,53}, -{79,9,54}, -{79,9,55}, -{79,9,56}, -{79,9,57}, -{79,9,58}, -{79,9,59}, -{79,9,60}, -{79,9,61}, -{79,9,62}, -{79,9,63}, -{79,9,64}, -{79,9,65}, -{79,9,66}, -{79,9,67}, -{79,9,68}, -{79,9,69}, -{79,9,70}, -{79,9,71}, -{79,9,72}, -{79,9,73}, -{79,9,74}, -{79,9,75}, -{79,9,76}, -{79,9,77}, -{79,9,78}, -{79,9,79}, -{79,9,80}, -{79,9,81}, -{79,10,-32}, -{79,10,-31}, -{79,10,-30}, -{79,10,-29}, -{79,10,-28}, -{79,10,-27}, -{79,10,-26}, -{79,10,-25}, -{79,10,-24}, -{79,10,-23}, -{79,10,-22}, -{79,10,-21}, -{79,10,-20}, -{79,10,-19}, -{79,10,-18}, -{79,10,-17}, -{79,10,-16}, -{79,10,-15}, -{79,10,-14}, -{79,10,-13}, -{79,10,-12}, -{79,10,-11}, -{79,10,-10}, -{79,10,-9}, -{79,10,-8}, -{79,10,-7}, -{79,10,-6}, -{79,10,-5}, -{79,10,-4}, -{79,10,-3}, -{79,10,-2}, -{79,10,-1}, -{79,10,0}, -{79,10,1}, -{79,10,2}, -{79,10,3}, -{79,10,4}, -{79,10,5}, -{79,10,6}, -{79,10,7}, -{79,10,8}, -{79,10,9}, -{79,10,10}, -{79,10,11}, -{79,10,12}, -{79,10,13}, -{79,10,14}, -{79,10,15}, -{79,10,16}, -{79,10,17}, -{79,10,18}, -{79,10,19}, -{79,10,20}, -{79,10,21}, -{79,10,22}, -{79,10,23}, -{79,10,24}, -{79,10,25}, -{79,10,26}, -{79,10,27}, -{79,10,28}, -{79,10,29}, -{79,10,30}, -{79,10,31}, -{79,10,32}, -{79,10,33}, -{79,10,34}, -{79,10,35}, -{79,10,36}, -{79,10,37}, -{79,10,38}, -{79,10,39}, -{79,10,40}, -{79,10,41}, -{79,10,42}, -{79,10,43}, -{79,10,44}, -{79,10,45}, -{79,10,46}, -{79,10,47}, -{79,10,48}, -{79,10,49}, -{79,10,50}, -{79,10,51}, -{79,10,52}, -{79,10,53}, -{79,10,54}, -{79,10,55}, -{79,10,56}, -{79,10,57}, -{79,10,58}, -{79,10,59}, -{79,10,60}, -{79,10,61}, -{79,10,62}, -{79,10,63}, -{79,10,64}, -{79,10,65}, -{79,10,66}, -{79,10,67}, -{79,10,68}, -{79,10,69}, -{79,10,70}, -{79,10,71}, -{79,10,72}, -{79,10,73}, -{79,10,74}, -{79,10,75}, -{79,10,76}, -{79,10,77}, -{79,10,78}, -{79,10,79}, -{79,10,80}, -{79,10,81}, -{79,11,-32}, -{79,11,-31}, -{79,11,-30}, -{79,11,-29}, -{79,11,-28}, -{79,11,-27}, -{79,11,-26}, -{79,11,-25}, -{79,11,-24}, -{79,11,-23}, -{79,11,-22}, -{79,11,-21}, -{79,11,-20}, -{79,11,-19}, -{79,11,-18}, -{79,11,-17}, -{79,11,-16}, -{79,11,-15}, -{79,11,-14}, -{79,11,-13}, -{79,11,-12}, -{79,11,-11}, -{79,11,-10}, -{79,11,-9}, -{79,11,-8}, -{79,11,-7}, -{79,11,-6}, -{79,11,-5}, -{79,11,-4}, -{79,11,-3}, -{79,11,-2}, -{79,11,-1}, -{79,11,0}, -{79,11,1}, -{79,11,2}, -{79,11,3}, -{79,11,4}, -{79,11,5}, -{79,11,6}, -{79,11,7}, -{79,11,8}, -{79,11,9}, -{79,11,10}, -{79,11,11}, -{79,11,12}, -{79,11,13}, -{79,11,14}, -{79,11,15}, -{79,11,16}, -{79,11,17}, -{79,11,18}, -{79,11,19}, -{79,11,20}, -{79,11,21}, -{79,11,22}, -{79,11,23}, -{79,11,24}, -{79,11,25}, -{79,11,26}, -{79,11,27}, -{79,11,28}, -{79,11,29}, -{79,11,30}, -{79,11,31}, -{79,11,32}, -{79,11,33}, -{79,11,34}, -{79,11,35}, -{79,11,36}, -{79,11,37}, -{79,11,38}, -{79,11,39}, -{79,11,40}, -{79,11,41}, -{79,11,42}, -{79,11,43}, -{79,11,44}, -{79,11,45}, -{79,11,46}, -{79,11,47}, -{79,11,48}, -{79,11,49}, -{79,11,50}, -{79,11,51}, -{79,11,52}, -{79,11,53}, -{79,11,54}, -{79,11,55}, -{79,11,56}, -{79,11,57}, -{79,11,58}, -{79,11,59}, -{79,11,60}, -{79,11,61}, -{79,11,62}, -{79,11,63}, -{79,11,64}, -{79,11,65}, -{79,11,66}, -{79,11,67}, -{79,11,68}, -{79,11,69}, -{79,11,70}, -{79,11,71}, -{79,11,72}, -{79,11,73}, -{79,11,74}, -{79,11,75}, -{79,11,76}, -{79,11,77}, -{79,11,78}, -{79,11,79}, -{79,11,80}, -{79,11,81}, -{79,12,-32}, -{79,12,-31}, -{79,12,-30}, -{79,12,-29}, -{79,12,-28}, -{79,12,-27}, -{79,12,-26}, -{79,12,-25}, -{79,12,-24}, -{79,12,-23}, -{79,12,-22}, -{79,12,-21}, -{79,12,-20}, -{79,12,-19}, -{79,12,-18}, -{79,12,-17}, -{79,12,-16}, -{79,12,-15}, -{79,12,-14}, -{79,12,-13}, -{79,12,-12}, -{79,12,-11}, -{79,12,-10}, -{79,12,-9}, -{79,12,-8}, -{79,12,-7}, -{79,12,-6}, -{79,12,-5}, -{79,12,-4}, -{79,12,-3}, -{79,12,-2}, -{79,12,-1}, -{79,12,0}, -{79,12,1}, -{79,12,2}, -{79,12,3}, -{79,12,4}, -{79,12,5}, -{79,12,6}, -{79,12,7}, -{79,12,8}, -{79,12,9}, -{79,12,10}, -{79,12,11}, -{79,12,12}, -{79,12,13}, -{79,12,14}, -{79,12,15}, -{79,12,16}, -{79,12,17}, -{79,12,18}, -{79,12,19}, -{79,12,20}, -{79,12,21}, -{79,12,22}, -{79,12,23}, -{79,12,24}, -{79,12,25}, -{79,12,26}, -{79,12,27}, -{79,12,28}, -{79,12,29}, -{79,12,30}, -{79,12,31}, -{79,12,32}, -{79,12,33}, -{79,12,34}, -{79,12,35}, -{79,12,36}, -{79,12,37}, -{79,12,38}, -{79,12,39}, -{79,12,40}, -{79,12,41}, -{79,12,42}, -{79,12,43}, -{79,12,44}, -{79,12,45}, -{79,12,46}, -{79,12,47}, -{79,12,48}, -{79,12,49}, -{79,12,50}, -{79,12,51}, -{79,12,52}, -{79,12,53}, -{79,12,54}, -{79,12,55}, -{79,12,56}, -{79,12,57}, -{79,12,58}, -{79,12,59}, -{79,12,60}, -{79,12,61}, -{79,12,62}, -{79,12,63}, -{79,12,64}, -{79,12,65}, -{79,12,66}, -{79,12,67}, -{79,12,68}, -{79,12,69}, -{79,12,70}, -{79,12,71}, -{79,12,72}, -{79,12,73}, -{79,12,74}, -{79,12,75}, -{79,12,76}, -{79,12,77}, -{79,12,78}, -{79,12,79}, -{79,12,80}, -{79,12,81}, -{79,13,-32}, -{79,13,-31}, -{79,13,-30}, -{79,13,-29}, -{79,13,-28}, -{79,13,-27}, -{79,13,-26}, -{79,13,-25}, -{79,13,-24}, -{79,13,-23}, -{79,13,-22}, -{79,13,-21}, -{79,13,-20}, -{79,13,-19}, -{79,13,-18}, -{79,13,-17}, -{79,13,-16}, -{79,13,-15}, -{79,13,-14}, -{79,13,-13}, -{79,13,-12}, -{79,13,-11}, -{79,13,-10}, -{79,13,-9}, -{79,13,-8}, -{79,13,-7}, -{79,13,-6}, -{79,13,-5}, -{79,13,-4}, -{79,13,-3}, -{79,13,-2}, -{79,13,-1}, -{79,13,0}, -{79,13,1}, -{79,13,2}, -{79,13,3}, -{79,13,4}, -{79,13,5}, -{79,13,6}, -{79,13,7}, -{79,13,8}, -{79,13,9}, -{79,13,10}, -{79,13,11}, -{79,13,12}, -{79,13,13}, -{79,13,14}, -{79,13,15}, -{79,13,16}, -{79,13,17}, -{79,13,18}, -{79,13,19}, -{79,13,20}, -{79,13,21}, -{79,13,22}, -{79,13,23}, -{79,13,24}, -{79,13,25}, -{79,13,26}, -{79,13,27}, -{79,13,28}, -{79,13,29}, -{79,13,30}, -{79,13,31}, -{79,13,32}, -{79,13,33}, -{79,13,34}, -{79,13,35}, -{79,13,36}, -{79,13,37}, -{79,13,38}, -{79,13,39}, -{79,13,40}, -{79,13,41}, -{79,13,42}, -{79,13,43}, -{79,13,44}, -{79,13,45}, -{79,13,46}, -{79,13,47}, -{79,13,48}, -{79,13,49}, -{79,13,50}, -{79,13,51}, -{79,13,52}, -{79,13,53}, -{79,13,54}, -{79,13,55}, -{79,13,56}, -{79,13,57}, -{79,13,58}, -{79,13,59}, -{79,13,60}, -{79,13,61}, -{79,13,62}, -{79,13,63}, -{79,13,64}, -{79,13,65}, -{79,13,66}, -{79,13,67}, -{79,13,68}, -{79,13,69}, -{79,13,70}, -{79,13,71}, -{79,13,72}, -{79,13,73}, -{79,13,74}, -{79,13,75}, -{79,13,76}, -{79,13,77}, -{79,13,78}, -{79,13,79}, -{79,13,80}, -{79,13,81}, -{79,14,-32}, -{79,14,-31}, -{79,14,-30}, -{79,14,-29}, -{79,14,-28}, -{79,14,-27}, -{79,14,-26}, -{79,14,-25}, -{79,14,-24}, -{79,14,-23}, -{79,14,-22}, -{79,14,-21}, -{79,14,-20}, -{79,14,-19}, -{79,14,-18}, -{79,14,-17}, -{79,14,-16}, -{79,14,-15}, -{79,14,-14}, -{79,14,-13}, -{79,14,-12}, -{79,14,-11}, -{79,14,-10}, -{79,14,-9}, -{79,14,-8}, -{79,14,-7}, -{79,14,-6}, -{79,14,-5}, -{79,14,-4}, -{79,14,-3}, -{79,14,-2}, -{79,14,-1}, -{79,14,0}, -{79,14,1}, -{79,14,2}, -{79,14,3}, -{79,14,4}, -{79,14,5}, -{79,14,6}, -{79,14,7}, -{79,14,8}, -{79,14,9}, -{79,14,10}, -{79,14,11}, -{79,14,12}, -{79,14,13}, -{79,14,14}, -{79,14,15}, -{79,14,16}, -{79,14,17}, -{79,14,18}, -{79,14,19}, -{79,14,20}, -{79,14,21}, -{79,14,22}, -{79,14,23}, -{79,14,24}, -{79,14,25}, -{79,14,26}, -{79,14,27}, -{79,14,28}, -{79,14,29}, -{79,14,30}, -{79,14,31}, -{79,14,32}, -{79,14,33}, -{79,14,34}, -{79,14,35}, -{79,14,36}, -{79,14,37}, -{79,14,38}, -{79,14,39}, -{79,14,40}, -{79,14,41}, -{79,14,42}, -{79,14,43}, -{79,14,44}, -{79,14,45}, -{79,14,46}, -{79,14,47}, -{79,14,48}, -{79,14,49}, -{79,14,50}, -{79,14,51}, -{79,14,52}, -{79,14,53}, -{79,14,54}, -{79,14,55}, -{79,14,56}, -{79,14,57}, -{79,14,58}, -{79,14,59}, -{79,14,60}, -{79,14,61}, -{79,14,62}, -{79,14,63}, -{79,14,64}, -{79,14,65}, -{79,14,66}, -{79,14,67}, -{79,14,68}, -{79,14,69}, -{79,14,70}, -{79,14,71}, -{79,14,72}, -{79,14,73}, -{79,14,74}, -{79,14,75}, -{79,14,76}, -{79,14,77}, -{79,14,78}, -{79,14,79}, -{79,14,80}, -{79,14,81}, -{79,15,-32}, -{79,15,-31}, -{79,15,-30}, -{79,15,-29}, -{79,15,-28}, -{79,15,-27}, -{79,15,-26}, -{79,15,-25}, -{79,15,-24}, -{79,15,-23}, -{79,15,-22}, -{79,15,-21}, -{79,15,-20}, -{79,15,-19}, -{79,15,-18}, -{79,15,-17}, -{79,15,-16}, -{79,15,-15}, -{79,15,-14}, -{79,15,-13}, -{79,15,-12}, -{79,15,-11}, -{79,15,-10}, -{79,15,-9}, -{79,15,-8}, -{79,15,-7}, -{79,15,-6}, -{79,15,-5}, -{79,15,-4}, -{79,15,-3}, -{79,15,-2}, -{79,15,-1}, -{79,15,0}, -{79,15,1}, -{79,15,2}, -{79,15,3}, -{79,15,4}, -{79,15,5}, -{79,15,6}, -{79,15,7}, -{79,15,8}, -{79,15,9}, -{79,15,10}, -{79,15,11}, -{79,15,12}, -{79,15,13}, -{79,15,14}, -{79,15,15}, -{79,15,16}, -{79,15,17}, -{79,15,18}, -{79,15,19}, -{79,15,20}, -{79,15,21}, -{79,15,22}, -{79,15,23}, -{79,15,24}, -{79,15,25}, -{79,15,26}, -{79,15,27}, -{79,15,28}, -{79,15,29}, -{79,15,30}, -{79,15,31}, -{79,15,32}, -{79,15,33}, -{79,15,34}, -{79,15,35}, -{79,15,36}, -{79,15,37}, -{79,15,38}, -{79,15,39}, -{79,15,40}, -{79,15,41}, -{79,15,42}, -{79,15,43}, -{79,15,44}, -{79,15,45}, -{79,15,46}, -{79,15,47}, -{79,15,48}, -{79,15,49}, -{79,15,50}, -{79,15,51}, -{79,15,52}, -{79,15,53}, -{79,15,54}, -{79,15,55}, -{79,15,56}, -{79,15,57}, -{79,15,58}, -{79,15,59}, -{79,15,60}, -{79,15,61}, -{79,15,62}, -{79,15,63}, -{79,15,64}, -{79,15,65}, -{79,15,66}, -{79,15,67}, -{79,15,68}, -{79,15,69}, -{79,15,70}, -{79,15,71}, -{79,15,72}, -{79,15,73}, -{79,15,74}, -{79,15,75}, -{79,15,76}, -{79,15,77}, -{79,15,78}, -{79,15,79}, -{79,15,80}, -{79,15,81}, -{79,16,-32}, -{79,16,-31}, -{79,16,-30}, -{79,16,-29}, -{79,16,-28}, -{79,16,-27}, -{79,16,-26}, -{79,16,-25}, -{79,16,-24}, -{79,16,-23}, -{79,16,-22}, -{79,16,-21}, -{79,16,-20}, -{79,16,-19}, -{79,16,-18}, -{79,16,-17}, -{79,16,-16}, -{79,16,-15}, -{79,16,-14}, -{79,16,-13}, -{79,16,-12}, -{79,16,-11}, -{79,16,-10}, -{79,16,-9}, -{79,16,-8}, -{79,16,-7}, -{79,16,-6}, -{79,16,-5}, -{79,16,-4}, -{79,16,-3}, -{79,16,-2}, -{79,16,-1}, -{79,16,0}, -{79,16,1}, -{79,16,2}, -{79,16,3}, -{79,16,4}, -{79,16,5}, -{79,16,6}, -{79,16,7}, -{79,16,8}, -{79,16,9}, -{79,16,10}, -{79,16,11}, -{79,16,12}, -{79,16,13}, -{79,16,14}, -{79,16,15}, -{79,16,16}, -{79,16,17}, -{79,16,18}, -{79,16,19}, -{79,16,20}, -{79,16,21}, -{79,16,22}, -{79,16,23}, -{79,16,24}, -{79,16,25}, -{79,16,26}, -{79,16,27}, -{79,16,28}, -{79,16,29}, -{79,16,30}, -{79,16,31}, -{79,16,32}, -{79,16,33}, -{79,16,34}, -{79,16,35}, -{79,16,36}, -{79,16,37}, -{79,16,38}, -{79,16,39}, -{79,16,40}, -{79,16,41}, -{79,16,42}, -{79,16,43}, -{79,16,44}, -{79,16,45}, -{79,16,46}, -{79,16,47}, -{79,16,48}, -{79,16,49}, -{79,16,50}, -{79,16,51}, -{79,16,52}, -{79,16,53}, -{79,16,54}, -{79,16,55}, -{79,16,56}, -{79,16,57}, -{79,16,58}, -{79,16,59}, -{79,16,60}, -{79,16,61}, -{79,16,62}, -{79,16,63}, -{79,16,64}, -{79,16,65}, -{79,16,66}, -{79,16,67}, -{79,16,68}, -{79,16,69}, -{79,16,70}, -{79,16,71}, -{79,16,72}, -{79,17,-32}, -{79,17,-31}, -{79,17,-30}, -{79,17,-29}, -{79,17,-28}, -{79,17,-27}, -{79,17,-26}, -{79,17,-25}, -{79,17,-24}, -{79,17,-23}, -{79,17,-22}, -{79,17,-21}, -{79,17,-20}, -{79,17,-19}, -{79,17,-18}, -{79,17,-17}, -{79,17,-16}, -{79,17,-15}, -{79,17,-14}, -{79,17,-13}, -{79,17,-12}, -{79,17,-11}, -{79,17,-10}, -{79,17,-9}, -{79,17,-8}, -{79,17,-7}, -{79,17,-6}, -{79,17,-5}, -{79,17,-4}, -{79,17,-3}, -{79,17,-2}, -{79,17,-1}, -{79,17,0}, -{79,17,1}, -{79,17,2}, -{79,17,3}, -{79,17,4}, -{79,17,5}, -{79,17,6}, -{79,17,7}, -{79,17,8}, -{79,17,9}, -{79,17,10}, -{79,17,11}, -{79,17,12}, -{79,17,13}, -{79,17,14}, -{79,17,15}, -{79,17,16}, -{79,17,17}, -{79,17,18}, -{79,17,19}, -{79,17,20}, -{79,17,21}, -{79,17,22}, -{79,17,23}, -{79,17,24}, -{79,17,25}, -{79,17,26}, -{79,17,27}, -{79,17,28}, -{79,17,29}, -{79,17,30}, -{79,17,31}, -{79,17,32}, -{79,17,33}, -{79,17,34}, -{79,17,35}, -{79,17,36}, -{79,17,37}, -{79,17,38}, -{79,17,39}, -{79,17,40}, -{79,17,41}, -{79,17,42}, -{79,17,43}, -{79,17,44}, -{79,17,45}, -{79,17,46}, -{79,17,47}, -{79,17,48}, -{79,17,49}, -{79,17,50}, -{79,17,51}, -{79,17,52}, -{79,17,53}, -{79,17,54}, -{79,17,55}, -{79,17,56}, -{79,17,57}, -{79,17,58}, -{79,17,59}, -{79,17,60}, -{79,17,61}, -{79,17,62}, -{79,17,63}, -{79,17,64}, -{79,17,65}, -{79,18,-32}, -{79,18,-31}, -{79,18,-30}, -{79,18,-29}, -{79,18,-28}, -{79,18,-27}, -{79,18,-26}, -{79,18,-25}, -{79,18,-24}, -{79,18,-23}, -{79,18,-22}, -{79,18,-21}, -{79,18,-20}, -{79,18,-19}, -{79,18,-18}, -{79,18,-17}, -{79,18,-16}, -{79,18,-15}, -{79,18,-14}, -{79,18,-13}, -{79,18,-12}, -{79,18,-11}, -{79,18,-10}, -{79,18,-9}, -{79,18,-8}, -{79,18,-7}, -{79,18,-6}, -{79,18,-5}, -{79,18,-4}, -{79,18,-3}, -{79,18,-2}, -{79,18,-1}, -{79,18,0}, -{79,18,1}, -{79,18,2}, -{79,18,3}, -{79,18,4}, -{79,18,5}, -{79,18,6}, -{79,18,7}, -{79,18,8}, -{79,18,9}, -{79,18,10}, -{79,18,11}, -{79,18,12}, -{79,18,13}, -{79,18,14}, -{79,18,15}, -{79,18,16}, -{79,18,17}, -{79,18,18}, -{79,18,19}, -{79,18,20}, -{79,18,21}, -{79,18,22}, -{79,18,23}, -{79,18,24}, -{79,18,25}, -{79,18,26}, -{79,18,27}, -{79,18,28}, -{79,18,29}, -{79,18,30}, -{79,18,31}, -{79,18,32}, -{79,18,33}, -{79,18,34}, -{79,18,35}, -{79,18,36}, -{79,18,37}, -{79,18,38}, -{79,18,39}, -{79,18,40}, -{79,18,41}, -{79,18,42}, -{79,18,43}, -{79,18,44}, -{79,18,45}, -{79,18,46}, -{79,18,47}, -{79,18,48}, -{79,18,49}, -{79,18,50}, -{79,18,51}, -{79,18,52}, -{79,18,53}, -{79,18,54}, -{79,18,55}, -{79,18,56}, -{79,18,57}, -{79,18,58}, -{79,18,59}, -{79,19,-32}, -{79,19,-31}, -{79,19,-30}, -{79,19,-29}, -{79,19,-28}, -{79,19,-27}, -{79,19,-26}, -{79,19,-25}, -{79,19,-24}, -{79,19,-23}, -{79,19,-22}, -{79,19,-21}, -{79,19,-20}, -{79,19,-19}, -{79,19,-18}, -{79,19,-17}, -{79,19,-16}, -{79,19,-15}, -{79,19,-14}, -{79,19,-13}, -{79,19,-12}, -{79,19,-11}, -{79,19,-10}, -{79,19,-9}, -{79,19,-8}, -{79,19,-7}, -{79,19,-6}, -{79,19,-5}, -{79,19,-4}, -{79,19,-3}, -{79,19,-2}, -{79,19,-1}, -{79,19,0}, -{79,19,1}, -{79,19,2}, -{79,19,3}, -{79,19,4}, -{79,19,5}, -{79,19,6}, -{79,19,7}, -{79,19,8}, -{79,19,9}, -{79,19,10}, -{79,19,11}, -{79,19,12}, -{79,19,13}, -{79,19,14}, -{79,19,15}, -{79,19,16}, -{79,19,17}, -{79,19,18}, -{79,19,19}, -{79,19,20}, -{79,19,21}, -{79,19,22}, -{79,19,23}, -{79,19,24}, -{79,19,25}, -{79,19,26}, -{79,19,27}, -{79,19,28}, -{79,19,29}, -{79,19,30}, -{79,19,31}, -{79,19,32}, -{79,19,33}, -{79,19,34}, -{79,19,35}, -{79,19,36}, -{79,19,37}, -{79,19,38}, -{79,19,39}, -{79,19,40}, -{79,19,41}, -{79,19,42}, -{79,19,43}, -{79,19,44}, -{79,19,45}, -{79,19,46}, -{79,19,47}, -{79,19,48}, -{79,19,49}, -{79,19,50}, -{79,19,51}, -{79,19,52}, -{79,19,53}, -{79,20,-32}, -{79,20,-31}, -{79,20,-30}, -{79,20,-29}, -{79,20,-28}, -{79,20,-27}, -{79,20,-26}, -{79,20,-25}, -{79,20,-24}, -{79,20,-23}, -{79,20,-22}, -{79,20,-21}, -{79,20,-20}, -{79,20,-19}, -{79,20,-18}, -{79,20,-17}, -{79,20,-16}, -{79,20,-15}, -{79,20,-14}, -{79,20,-13}, -{79,20,-12}, -{79,20,-11}, -{79,20,-10}, -{79,20,-9}, -{79,20,-8}, -{79,20,-7}, -{79,20,-6}, -{79,20,-5}, -{79,20,-4}, -{79,20,-3}, -{79,20,-2}, -{79,20,-1}, -{79,20,0}, -{79,20,1}, -{79,20,2}, -{79,20,3}, -{79,20,4}, -{79,20,5}, -{79,20,6}, -{79,20,7}, -{79,20,8}, -{79,20,9}, -{79,20,10}, -{79,20,11}, -{79,20,12}, -{79,20,13}, -{79,20,14}, -{79,20,15}, -{79,20,16}, -{79,20,17}, -{79,20,18}, -{79,20,19}, -{79,20,20}, -{79,20,21}, -{79,20,22}, -{79,20,23}, -{79,20,24}, -{79,20,25}, -{79,20,26}, -{79,20,27}, -{79,20,28}, -{79,20,29}, -{79,20,30}, -{79,20,31}, -{79,20,32}, -{79,20,33}, -{79,20,34}, -{79,20,35}, -{79,20,36}, -{79,20,37}, -{79,20,38}, -{79,20,39}, -{79,20,40}, -{79,20,41}, -{79,20,42}, -{79,20,43}, -{79,20,44}, -{79,20,45}, -{79,20,46}, -{79,20,47}, -{79,20,48}, -{79,21,-32}, -{79,21,-31}, -{79,21,-30}, -{79,21,-29}, -{79,21,-28}, -{79,21,-27}, -{79,21,-26}, -{79,21,-25}, -{79,21,-24}, -{79,21,-23}, -{79,21,-22}, -{79,21,-21}, -{79,21,-20}, -{79,21,-19}, -{79,21,-18}, -{79,21,-17}, -{79,21,-16}, -{79,21,-15}, -{79,21,-14}, -{79,21,-13}, -{79,21,-12}, -{79,21,-11}, -{79,21,-10}, -{79,21,-9}, -{79,21,-8}, -{79,21,-7}, -{79,21,-6}, -{79,21,-5}, -{79,21,-4}, -{79,21,-3}, -{79,21,-2}, -{79,21,-1}, -{79,21,0}, -{79,21,1}, -{79,21,2}, -{79,21,3}, -{79,21,4}, -{79,21,5}, -{79,21,6}, -{79,21,7}, -{79,21,8}, -{79,21,9}, -{79,21,10}, -{79,21,11}, -{79,21,12}, -{79,21,13}, -{79,21,14}, -{79,21,15}, -{79,21,16}, -{79,21,17}, -{79,21,18}, -{79,21,19}, -{79,21,20}, -{79,21,21}, -{79,21,22}, -{79,21,23}, -{79,21,24}, -{79,21,25}, -{79,21,26}, -{79,21,27}, -{79,21,28}, -{79,21,29}, -{79,21,30}, -{79,21,31}, -{79,21,32}, -{79,21,33}, -{79,21,34}, -{79,21,35}, -{79,21,36}, -{79,21,37}, -{79,21,38}, -{79,21,39}, -{79,21,40}, -{79,21,41}, -{79,21,42}, -{79,21,43}, -{79,22,-32}, -{79,22,-31}, -{79,22,-30}, -{79,22,-29}, -{79,22,-28}, -{79,22,-27}, -{79,22,-26}, -{79,22,-25}, -{79,22,-24}, -{79,22,-23}, -{79,22,-22}, -{79,22,-21}, -{79,22,-20}, -{79,22,-19}, -{79,22,-18}, -{79,22,-17}, -{79,22,-16}, -{79,22,-15}, -{79,22,-14}, -{79,22,-13}, -{79,22,-12}, -{79,22,-11}, -{79,22,-10}, -{79,22,-9}, -{79,22,-8}, -{79,22,-7}, -{79,22,-6}, -{79,22,-5}, -{79,22,-4}, -{79,22,-3}, -{79,22,-2}, -{79,22,-1}, -{79,22,0}, -{79,22,1}, -{79,22,2}, -{79,22,3}, -{79,22,4}, -{79,22,5}, -{79,22,6}, -{79,22,7}, -{79,22,8}, -{79,22,9}, -{79,22,10}, -{79,22,11}, -{79,22,12}, -{79,22,13}, -{79,22,14}, -{79,22,15}, -{79,22,16}, -{79,22,17}, -{79,22,18}, -{79,22,19}, -{79,22,20}, -{79,22,21}, -{79,22,22}, -{79,22,23}, -{79,22,24}, -{79,22,25}, -{79,22,26}, -{79,22,27}, -{79,22,28}, -{79,22,29}, -{79,22,30}, -{79,22,31}, -{79,22,32}, -{79,22,33}, -{79,22,34}, -{79,22,35}, -{79,22,36}, -{79,22,37}, -{79,22,38}, -{79,23,-32}, -{79,23,-31}, -{79,23,-30}, -{79,23,-29}, -{79,23,-28}, -{79,23,-27}, -{79,23,-26}, -{79,23,-25}, -{79,23,-24}, -{79,23,-23}, -{79,23,-22}, -{79,23,-21}, -{79,23,-20}, -{79,23,-19}, -{79,23,-18}, -{79,23,-17}, -{79,23,-16}, -{79,23,-15}, -{79,23,-14}, -{79,23,-13}, -{79,23,-12}, -{79,23,-11}, -{79,23,-10}, -{79,23,-9}, -{79,23,-8}, -{79,23,-7}, -{79,23,-6}, -{79,23,-5}, -{79,23,-4}, -{79,23,-3}, -{79,23,-2}, -{79,23,-1}, -{79,23,0}, -{79,23,1}, -{79,23,2}, -{79,23,3}, -{79,23,4}, -{79,23,5}, -{79,23,6}, -{79,23,7}, -{79,23,8}, -{79,23,9}, -{79,23,10}, -{79,23,11}, -{79,23,12}, -{79,23,13}, -{79,23,14}, -{79,23,15}, -{79,23,16}, -{79,23,17}, -{79,23,18}, -{79,23,19}, -{79,23,20}, -{79,23,21}, -{79,23,22}, -{79,23,23}, -{79,23,24}, -{79,23,25}, -{79,23,26}, -{79,23,27}, -{79,23,28}, -{79,23,29}, -{79,23,30}, -{79,23,31}, -{79,23,32}, -{79,23,33}, -{79,23,34}, -{79,24,-32}, -{79,24,-31}, -{79,24,-30}, -{79,24,-29}, -{79,24,-28}, -{79,24,-27}, -{79,24,-26}, -{79,24,-25}, -{79,24,-24}, -{79,24,-23}, -{79,24,-22}, -{79,24,-21}, -{79,24,-20}, -{79,24,-19}, -{79,24,-18}, -{79,24,-17}, -{79,24,-16}, -{79,24,-15}, -{79,24,-14}, -{79,24,-13}, -{79,24,-12}, -{79,24,-11}, -{79,24,-10}, -{79,24,-9}, -{79,24,-8}, -{79,24,-7}, -{79,24,-6}, -{79,24,-5}, -{79,24,-4}, -{79,24,-3}, -{79,24,-2}, -{79,24,-1}, -{79,24,0}, -{79,24,1}, -{79,24,2}, -{79,24,3}, -{79,24,4}, -{79,24,5}, -{79,24,6}, -{79,24,7}, -{79,24,8}, -{79,24,9}, -{79,24,10}, -{79,24,11}, -{79,24,12}, -{79,24,13}, -{79,24,14}, -{79,24,15}, -{79,24,16}, -{79,24,17}, -{79,24,18}, -{79,24,19}, -{79,24,20}, -{79,24,21}, -{79,24,22}, -{79,24,23}, -{79,24,24}, -{79,24,25}, -{79,24,26}, -{79,24,27}, -{79,24,28}, -{79,24,29}, -{79,24,30}, -{79,25,-31}, -{79,25,-30}, -{79,25,-29}, -{79,25,-28}, -{79,25,-27}, -{79,25,-26}, -{79,25,-25}, -{79,25,-24}, -{79,25,-23}, -{79,25,-22}, -{79,25,-21}, -{79,25,-20}, -{79,25,-19}, -{79,25,-18}, -{79,25,-17}, -{79,25,-16}, -{79,25,-15}, -{79,25,-14}, -{79,25,-13}, -{79,25,-12}, -{79,25,-11}, -{79,25,-10}, -{79,25,-9}, -{79,25,-8}, -{79,25,-7}, -{79,25,-6}, -{79,25,-5}, -{79,25,-4}, -{79,25,-3}, -{79,25,-2}, -{79,25,-1}, -{79,25,0}, -{79,25,1}, -{79,25,2}, -{79,25,3}, -{79,25,4}, -{79,25,5}, -{79,25,6}, -{79,25,7}, -{79,25,8}, -{79,25,9}, -{79,25,10}, -{79,25,11}, -{79,25,12}, -{79,25,13}, -{79,25,14}, -{79,25,15}, -{79,25,16}, -{79,25,17}, -{79,25,18}, -{79,25,19}, -{79,25,20}, -{79,25,21}, -{79,25,22}, -{79,25,23}, -{79,25,24}, -{79,25,25}, -{79,25,26}, -{79,26,-31}, -{79,26,-30}, -{79,26,-29}, -{79,26,-28}, -{79,26,-27}, -{79,26,-26}, -{79,26,-25}, -{79,26,-24}, -{79,26,-23}, -{79,26,-22}, -{79,26,-21}, -{79,26,-20}, -{79,26,-19}, -{79,26,-18}, -{79,26,-17}, -{79,26,-16}, -{79,26,-15}, -{79,26,-14}, -{79,26,-13}, -{79,26,-12}, -{79,26,-11}, -{79,26,-10}, -{79,26,-9}, -{79,26,-8}, -{79,26,-7}, -{79,26,-6}, -{79,26,-5}, -{79,26,-4}, -{79,26,-3}, -{79,26,-2}, -{79,26,-1}, -{79,26,0}, -{79,26,1}, -{79,26,2}, -{79,26,3}, -{79,26,4}, -{79,26,5}, -{79,26,6}, -{79,26,7}, -{79,26,8}, -{79,26,9}, -{79,26,10}, -{79,26,11}, -{79,26,12}, -{79,26,13}, -{79,26,14}, -{79,26,15}, -{79,26,16}, -{79,26,17}, -{79,26,18}, -{79,26,19}, -{79,26,20}, -{79,26,21}, -{79,26,22}, -{79,26,23}, -{79,27,-31}, -{79,27,-30}, -{79,27,-29}, -{79,27,-28}, -{79,27,-27}, -{79,27,-26}, -{79,27,-25}, -{79,27,-24}, -{79,27,-23}, -{79,27,-22}, -{79,27,-21}, -{79,27,-20}, -{79,27,-19}, -{79,27,-18}, -{79,27,-17}, -{79,27,-16}, -{79,27,-15}, -{79,27,-14}, -{79,27,-13}, -{79,27,-12}, -{79,27,-11}, -{79,27,-10}, -{79,27,-9}, -{79,27,-8}, -{79,27,-7}, -{79,27,-6}, -{79,27,-5}, -{79,27,-4}, -{79,27,-3}, -{79,27,-2}, -{79,27,-1}, -{79,27,0}, -{79,27,1}, -{79,27,2}, -{79,27,3}, -{79,27,4}, -{79,27,5}, -{79,27,6}, -{79,27,7}, -{79,27,8}, -{79,27,9}, -{79,27,10}, -{79,27,11}, -{79,27,12}, -{79,27,13}, -{79,27,14}, -{79,27,15}, -{79,27,16}, -{79,27,17}, -{79,27,18}, -{79,27,19}, -{79,28,-31}, -{79,28,-30}, -{79,28,-29}, -{79,28,-28}, -{79,28,-27}, -{79,28,-26}, -{79,28,-25}, -{79,28,-24}, -{79,28,-23}, -{79,28,-22}, -{79,28,-21}, -{79,28,-20}, -{79,28,-19}, -{79,28,-18}, -{79,28,-17}, -{79,28,-16}, -{79,28,-15}, -{79,28,-14}, -{79,28,-13}, -{79,28,-12}, -{79,28,-11}, -{79,28,-10}, -{79,28,-9}, -{79,28,-8}, -{79,28,-7}, -{79,28,-6}, -{79,28,-5}, -{79,28,-4}, -{79,28,-3}, -{79,28,-2}, -{79,28,-1}, -{79,28,0}, -{79,28,1}, -{79,28,2}, -{79,28,3}, -{79,28,4}, -{79,28,5}, -{79,28,6}, -{79,28,7}, -{79,28,8}, -{79,28,9}, -{79,28,10}, -{79,28,11}, -{79,28,12}, -{79,28,13}, -{79,28,14}, -{79,28,15}, -{79,28,16}, -{79,29,-31}, -{79,29,-30}, -{79,29,-29}, -{79,29,-28}, -{79,29,-27}, -{79,29,-26}, -{79,29,-25}, -{79,29,-24}, -{79,29,-23}, -{79,29,-22}, -{79,29,-21}, -{79,29,-20}, -{79,29,-19}, -{79,29,-18}, -{79,29,-17}, -{79,29,-16}, -{79,29,-15}, -{79,29,-14}, -{79,29,-13}, -{79,29,-12}, -{79,29,-11}, -{79,29,-10}, -{79,29,-9}, -{79,29,-8}, -{79,29,-7}, -{79,29,-6}, -{79,29,-5}, -{79,29,-4}, -{79,29,-3}, -{79,29,-2}, -{79,29,-1}, -{79,29,0}, -{79,29,1}, -{79,29,2}, -{79,29,3}, -{79,29,4}, -{79,29,5}, -{79,29,6}, -{79,29,7}, -{79,29,8}, -{79,29,9}, -{79,29,10}, -{79,29,11}, -{79,29,12}, -{79,29,13}, -{79,30,-31}, -{79,30,-30}, -{79,30,-29}, -{79,30,-28}, -{79,30,-27}, -{79,30,-26}, -{79,30,-25}, -{79,30,-24}, -{79,30,-23}, -{79,30,-22}, -{79,30,-21}, -{79,30,-20}, -{79,30,-19}, -{79,30,-18}, -{79,30,-17}, -{79,30,-16}, -{79,30,-15}, -{79,30,-14}, -{79,30,-13}, -{79,30,-12}, -{79,30,-11}, -{79,30,-10}, -{79,30,-9}, -{79,30,-8}, -{79,30,-7}, -{79,30,-6}, -{79,30,-5}, -{79,30,-4}, -{79,30,-3}, -{79,30,-2}, -{79,30,-1}, -{79,30,0}, -{79,30,1}, -{79,30,2}, -{79,30,3}, -{79,30,4}, -{79,30,5}, -{79,30,6}, -{79,30,7}, -{79,30,8}, -{79,30,9}, -{79,30,10}, -{79,31,-31}, -{79,31,-30}, -{79,31,-29}, -{79,31,-28}, -{79,31,-27}, -{79,31,-26}, -{79,31,-25}, -{79,31,-24}, -{79,31,-23}, -{79,31,-22}, -{79,31,-21}, -{79,31,-20}, -{79,31,-19}, -{79,31,-18}, -{79,31,-17}, -{79,31,-16}, -{79,31,-15}, -{79,31,-14}, -{79,31,-13}, -{79,31,-12}, -{79,31,-11}, -{79,31,-10}, -{79,31,-9}, -{79,31,-8}, -{79,31,-7}, -{79,31,-6}, -{79,31,-5}, -{79,31,-4}, -{79,31,-3}, -{79,31,-2}, -{79,31,-1}, -{79,31,0}, -{79,31,1}, -{79,31,2}, -{79,31,3}, -{79,31,4}, -{79,31,5}, -{79,31,6}, -{79,31,7}, -{79,32,-31}, -{79,32,-30}, -{79,32,-29}, -{79,32,-28}, -{79,32,-27}, -{79,32,-26}, -{79,32,-25}, -{79,32,-24}, -{79,32,-23}, -{79,32,-22}, -{79,32,-21}, -{79,32,-20}, -{79,32,-19}, -{79,32,-18}, -{79,32,-17}, -{79,32,-16}, -{79,32,-15}, -{79,32,-14}, -{79,32,-13}, -{79,32,-12}, -{79,32,-11}, -{79,32,-10}, -{79,32,-9}, -{79,32,-8}, -{79,32,-7}, -{79,32,-6}, -{79,32,-5}, -{79,32,-4}, -{79,32,-3}, -{79,32,-2}, -{79,32,-1}, -{79,32,0}, -{79,32,1}, -{79,32,2}, -{79,32,3}, -{79,32,4}, -{79,33,-31}, -{79,33,-30}, -{79,33,-29}, -{79,33,-28}, -{79,33,-27}, -{79,33,-26}, -{79,33,-25}, -{79,33,-24}, -{79,33,-23}, -{79,33,-22}, -{79,33,-21}, -{79,33,-20}, -{79,33,-19}, -{79,33,-18}, -{79,33,-17}, -{79,33,-16}, -{79,33,-15}, -{79,33,-14}, -{79,33,-13}, -{79,33,-12}, -{79,33,-11}, -{79,33,-10}, -{79,33,-9}, -{79,33,-8}, -{79,33,-7}, -{79,33,-6}, -{79,33,-5}, -{79,33,-4}, -{79,33,-3}, -{79,33,-2}, -{79,33,-1}, -{79,33,0}, -{79,33,1}, -{79,34,-31}, -{79,34,-30}, -{79,34,-29}, -{79,34,-28}, -{79,34,-27}, -{79,34,-26}, -{79,34,-25}, -{79,34,-24}, -{79,34,-23}, -{79,34,-22}, -{79,34,-21}, -{79,34,-20}, -{79,34,-19}, -{79,34,-18}, -{79,34,-17}, -{79,34,-16}, -{79,34,-15}, -{79,34,-14}, -{79,34,-13}, -{79,34,-12}, -{79,34,-11}, -{79,34,-10}, -{79,34,-9}, -{79,34,-8}, -{79,34,-7}, -{79,34,-6}, -{79,34,-5}, -{79,34,-4}, -{79,34,-3}, -{79,34,-2}, -{79,34,-1}, -{79,35,-31}, -{79,35,-30}, -{79,35,-29}, -{79,35,-28}, -{79,35,-27}, -{79,35,-26}, -{79,35,-25}, -{79,35,-24}, -{79,35,-23}, -{79,35,-22}, -{79,35,-21}, -{79,35,-20}, -{79,35,-19}, -{79,35,-18}, -{79,35,-17}, -{79,35,-16}, -{79,35,-15}, -{79,35,-14}, -{79,35,-13}, -{79,35,-12}, -{79,35,-11}, -{79,35,-10}, -{79,35,-9}, -{79,35,-8}, -{79,35,-7}, -{79,35,-6}, -{79,35,-5}, -{79,35,-4}, -{79,36,-31}, -{79,36,-30}, -{79,36,-29}, -{79,36,-28}, -{79,36,-27}, -{79,36,-26}, -{79,36,-25}, -{79,36,-24}, -{79,36,-23}, -{79,36,-22}, -{79,36,-21}, -{79,36,-20}, -{79,36,-19}, -{79,36,-18}, -{79,36,-17}, -{79,36,-16}, -{79,36,-15}, -{79,36,-14}, -{79,36,-13}, -{79,36,-12}, -{79,36,-11}, -{79,36,-10}, -{79,36,-9}, -{79,36,-8}, -{79,36,-7}, -{79,36,-6}, -{79,37,-31}, -{79,37,-30}, -{79,37,-29}, -{79,37,-28}, -{79,37,-27}, -{79,37,-26}, -{79,37,-25}, -{79,37,-24}, -{79,37,-23}, -{79,37,-22}, -{79,37,-21}, -{79,37,-20}, -{79,37,-19}, -{79,37,-18}, -{79,37,-17}, -{79,37,-16}, -{79,37,-15}, -{79,37,-14}, -{79,37,-13}, -{79,37,-12}, -{79,37,-11}, -{79,37,-10}, -{79,37,-9}, -{79,38,-31}, -{79,38,-30}, -{79,38,-29}, -{79,38,-28}, -{79,38,-27}, -{79,38,-26}, -{79,38,-25}, -{79,38,-24}, -{79,38,-23}, -{79,38,-22}, -{79,38,-21}, -{79,38,-20}, -{79,38,-19}, -{79,38,-18}, -{79,38,-17}, -{79,38,-16}, -{79,38,-15}, -{79,38,-14}, -{79,38,-13}, -{79,38,-12}, -{79,38,-11}, -{79,39,-31}, -{79,39,-30}, -{79,39,-29}, -{79,39,-28}, -{79,39,-27}, -{79,39,-26}, -{79,39,-25}, -{79,39,-24}, -{79,39,-23}, -{79,39,-22}, -{79,39,-21}, -{79,39,-20}, -{79,39,-19}, -{79,39,-18}, -{79,39,-17}, -{79,39,-16}, -{79,39,-15}, -{79,39,-14}, -{79,40,-31}, -{79,40,-30}, -{79,40,-29}, -{79,40,-28}, -{79,40,-27}, -{79,40,-26}, -{79,40,-25}, -{79,40,-24}, -{79,40,-23}, -{79,40,-22}, -{79,40,-21}, -{79,40,-20}, -{79,40,-19}, -{79,40,-18}, -{79,40,-17}, -{79,40,-16}, -{79,41,-31}, -{79,41,-30}, -{79,41,-29}, -{79,41,-28}, -{79,41,-27}, -{79,41,-26}, -{79,41,-25}, -{79,41,-24}, -{79,41,-23}, -{79,41,-22}, -{79,41,-21}, -{79,41,-20}, -{79,41,-19}, -{79,41,-18}, -{79,42,-31}, -{79,42,-30}, -{79,42,-29}, -{79,42,-28}, -{79,42,-27}, -{79,42,-26}, -{79,42,-25}, -{79,42,-24}, -{79,42,-23}, -{79,42,-22}, -{79,42,-21}, -{79,42,-20}, -{79,43,-31}, -{79,43,-30}, -{79,43,-29}, -{79,43,-28}, -{79,43,-27}, -{79,43,-26}, -{79,43,-25}, -{79,43,-24}, -{79,43,-23}, -{79,44,-31}, -{79,44,-30}, -{79,44,-29}, -{79,44,-28}, -{79,44,-27}, -{79,44,-26}, -{79,44,-25}, -{79,45,-31}, -{79,45,-30}, -{79,45,-29}, -{79,45,-28}, -{79,45,-27}, -{79,46,-31}, -{79,46,-30}, -{79,46,-29}, -{79,47,-31}, -{80,-79,73}, -{80,-79,74}, -{80,-79,75}, -{80,-79,76}, -{80,-79,77}, -{80,-78,68}, -{80,-78,69}, -{80,-78,70}, -{80,-78,71}, -{80,-78,72}, -{80,-78,73}, -{80,-78,74}, -{80,-78,75}, -{80,-78,76}, -{80,-78,77}, -{80,-77,64}, -{80,-77,65}, -{80,-77,66}, -{80,-77,67}, -{80,-77,68}, -{80,-77,69}, -{80,-77,70}, -{80,-77,71}, -{80,-77,72}, -{80,-77,73}, -{80,-77,74}, -{80,-77,75}, -{80,-77,76}, -{80,-77,77}, -{80,-76,60}, -{80,-76,61}, -{80,-76,62}, -{80,-76,63}, -{80,-76,64}, -{80,-76,65}, -{80,-76,66}, -{80,-76,67}, -{80,-76,68}, -{80,-76,69}, -{80,-76,70}, -{80,-76,71}, -{80,-76,72}, -{80,-76,73}, -{80,-76,74}, -{80,-76,75}, -{80,-76,76}, -{80,-76,77}, -{80,-75,57}, -{80,-75,58}, -{80,-75,59}, -{80,-75,60}, -{80,-75,61}, -{80,-75,62}, -{80,-75,63}, -{80,-75,64}, -{80,-75,65}, -{80,-75,66}, -{80,-75,67}, -{80,-75,68}, -{80,-75,69}, -{80,-75,70}, -{80,-75,71}, -{80,-75,72}, -{80,-75,73}, -{80,-75,74}, -{80,-75,75}, -{80,-75,76}, -{80,-75,77}, -{80,-74,53}, -{80,-74,54}, -{80,-74,55}, -{80,-74,56}, -{80,-74,57}, -{80,-74,58}, -{80,-74,59}, -{80,-74,60}, -{80,-74,61}, -{80,-74,62}, -{80,-74,63}, -{80,-74,64}, -{80,-74,65}, -{80,-74,66}, -{80,-74,67}, -{80,-74,68}, -{80,-74,69}, -{80,-74,70}, -{80,-74,71}, -{80,-74,72}, -{80,-74,73}, -{80,-74,74}, -{80,-74,75}, -{80,-74,76}, -{80,-74,77}, -{80,-73,50}, -{80,-73,51}, -{80,-73,52}, -{80,-73,53}, -{80,-73,54}, -{80,-73,55}, -{80,-73,56}, -{80,-73,57}, -{80,-73,58}, -{80,-73,59}, -{80,-73,60}, -{80,-73,61}, -{80,-73,62}, -{80,-73,63}, -{80,-73,64}, -{80,-73,65}, -{80,-73,66}, -{80,-73,67}, -{80,-73,68}, -{80,-73,69}, -{80,-73,70}, -{80,-73,71}, -{80,-73,72}, -{80,-73,73}, -{80,-73,74}, -{80,-73,75}, -{80,-73,76}, -{80,-73,77}, -{80,-72,47}, -{80,-72,48}, -{80,-72,49}, -{80,-72,50}, -{80,-72,51}, -{80,-72,52}, -{80,-72,53}, -{80,-72,54}, -{80,-72,55}, -{80,-72,56}, -{80,-72,57}, -{80,-72,58}, -{80,-72,59}, -{80,-72,60}, -{80,-72,61}, -{80,-72,62}, -{80,-72,63}, -{80,-72,64}, -{80,-72,65}, -{80,-72,66}, -{80,-72,67}, -{80,-72,68}, -{80,-72,69}, -{80,-72,70}, -{80,-72,71}, -{80,-72,72}, -{80,-72,73}, -{80,-72,74}, -{80,-72,75}, -{80,-72,76}, -{80,-72,77}, -{80,-71,44}, -{80,-71,45}, -{80,-71,46}, -{80,-71,47}, -{80,-71,48}, -{80,-71,49}, -{80,-71,50}, -{80,-71,51}, -{80,-71,52}, -{80,-71,53}, -{80,-71,54}, -{80,-71,55}, -{80,-71,56}, -{80,-71,57}, -{80,-71,58}, -{80,-71,59}, -{80,-71,60}, -{80,-71,61}, -{80,-71,62}, -{80,-71,63}, -{80,-71,64}, -{80,-71,65}, -{80,-71,66}, -{80,-71,67}, -{80,-71,68}, -{80,-71,69}, -{80,-71,70}, -{80,-71,71}, -{80,-71,72}, -{80,-71,73}, -{80,-71,74}, -{80,-71,75}, -{80,-71,76}, -{80,-71,77}, -{80,-70,41}, -{80,-70,42}, -{80,-70,43}, -{80,-70,44}, -{80,-70,45}, -{80,-70,46}, -{80,-70,47}, -{80,-70,48}, -{80,-70,49}, -{80,-70,50}, -{80,-70,51}, -{80,-70,52}, -{80,-70,53}, -{80,-70,54}, -{80,-70,55}, -{80,-70,56}, -{80,-70,57}, -{80,-70,58}, -{80,-70,59}, -{80,-70,60}, -{80,-70,61}, -{80,-70,62}, -{80,-70,63}, -{80,-70,64}, -{80,-70,65}, -{80,-70,66}, -{80,-70,67}, -{80,-70,68}, -{80,-70,69}, -{80,-70,70}, -{80,-70,71}, -{80,-70,72}, -{80,-70,73}, -{80,-70,74}, -{80,-70,75}, -{80,-70,76}, -{80,-70,77}, -{80,-69,39}, -{80,-69,40}, -{80,-69,41}, -{80,-69,42}, -{80,-69,43}, -{80,-69,44}, -{80,-69,45}, -{80,-69,46}, -{80,-69,47}, -{80,-69,48}, -{80,-69,49}, -{80,-69,50}, -{80,-69,51}, -{80,-69,52}, -{80,-69,53}, -{80,-69,54}, -{80,-69,55}, -{80,-69,56}, -{80,-69,57}, -{80,-69,58}, -{80,-69,59}, -{80,-69,60}, -{80,-69,61}, -{80,-69,62}, -{80,-69,63}, -{80,-69,64}, -{80,-69,65}, -{80,-69,66}, -{80,-69,67}, -{80,-69,68}, -{80,-69,69}, -{80,-69,70}, -{80,-69,71}, -{80,-69,72}, -{80,-69,73}, -{80,-69,74}, -{80,-69,75}, -{80,-69,76}, -{80,-69,77}, -{80,-68,36}, -{80,-68,37}, -{80,-68,38}, -{80,-68,39}, -{80,-68,40}, -{80,-68,41}, -{80,-68,42}, -{80,-68,43}, -{80,-68,44}, -{80,-68,45}, -{80,-68,46}, -{80,-68,47}, -{80,-68,48}, -{80,-68,49}, -{80,-68,50}, -{80,-68,51}, -{80,-68,52}, -{80,-68,53}, -{80,-68,54}, -{80,-68,55}, -{80,-68,56}, -{80,-68,57}, -{80,-68,58}, -{80,-68,59}, -{80,-68,60}, -{80,-68,61}, -{80,-68,62}, -{80,-68,63}, -{80,-68,64}, -{80,-68,65}, -{80,-68,66}, -{80,-68,67}, -{80,-68,68}, -{80,-68,69}, -{80,-68,70}, -{80,-68,71}, -{80,-68,72}, -{80,-68,73}, -{80,-68,74}, -{80,-68,75}, -{80,-68,76}, -{80,-68,77}, -{80,-67,33}, -{80,-67,34}, -{80,-67,35}, -{80,-67,36}, -{80,-67,37}, -{80,-67,38}, -{80,-67,39}, -{80,-67,40}, -{80,-67,41}, -{80,-67,42}, -{80,-67,43}, -{80,-67,44}, -{80,-67,45}, -{80,-67,46}, -{80,-67,47}, -{80,-67,48}, -{80,-67,49}, -{80,-67,50}, -{80,-67,51}, -{80,-67,52}, -{80,-67,53}, -{80,-67,54}, -{80,-67,55}, -{80,-67,56}, -{80,-67,57}, -{80,-67,58}, -{80,-67,59}, -{80,-67,60}, -{80,-67,61}, -{80,-67,62}, -{80,-67,63}, -{80,-67,64}, -{80,-67,65}, -{80,-67,66}, -{80,-67,67}, -{80,-67,68}, -{80,-67,69}, -{80,-67,70}, -{80,-67,71}, -{80,-67,72}, -{80,-67,73}, -{80,-67,74}, -{80,-67,75}, -{80,-67,76}, -{80,-67,77}, -{80,-66,31}, -{80,-66,32}, -{80,-66,33}, -{80,-66,34}, -{80,-66,35}, -{80,-66,36}, -{80,-66,37}, -{80,-66,38}, -{80,-66,39}, -{80,-66,40}, -{80,-66,41}, -{80,-66,42}, -{80,-66,43}, -{80,-66,44}, -{80,-66,45}, -{80,-66,46}, -{80,-66,47}, -{80,-66,48}, -{80,-66,49}, -{80,-66,50}, -{80,-66,51}, -{80,-66,52}, -{80,-66,53}, -{80,-66,54}, -{80,-66,55}, -{80,-66,56}, -{80,-66,57}, -{80,-66,58}, -{80,-66,59}, -{80,-66,60}, -{80,-66,61}, -{80,-66,62}, -{80,-66,63}, -{80,-66,64}, -{80,-66,65}, -{80,-66,66}, -{80,-66,67}, -{80,-66,68}, -{80,-66,69}, -{80,-66,70}, -{80,-66,71}, -{80,-66,72}, -{80,-66,73}, -{80,-66,74}, -{80,-66,75}, -{80,-66,76}, -{80,-66,77}, -{80,-65,29}, -{80,-65,30}, -{80,-65,31}, -{80,-65,32}, -{80,-65,33}, -{80,-65,34}, -{80,-65,35}, -{80,-65,36}, -{80,-65,37}, -{80,-65,38}, -{80,-65,39}, -{80,-65,40}, -{80,-65,41}, -{80,-65,42}, -{80,-65,43}, -{80,-65,44}, -{80,-65,45}, -{80,-65,46}, -{80,-65,47}, -{80,-65,48}, -{80,-65,49}, -{80,-65,50}, -{80,-65,51}, -{80,-65,52}, -{80,-65,53}, -{80,-65,54}, -{80,-65,55}, -{80,-65,56}, -{80,-65,57}, -{80,-65,58}, -{80,-65,59}, -{80,-65,60}, -{80,-65,61}, -{80,-65,62}, -{80,-65,63}, -{80,-65,64}, -{80,-65,65}, -{80,-65,66}, -{80,-65,67}, -{80,-65,68}, -{80,-65,69}, -{80,-65,70}, -{80,-65,71}, -{80,-65,72}, -{80,-65,73}, -{80,-65,74}, -{80,-65,75}, -{80,-65,76}, -{80,-65,77}, -{80,-64,26}, -{80,-64,27}, -{80,-64,28}, -{80,-64,29}, -{80,-64,30}, -{80,-64,31}, -{80,-64,32}, -{80,-64,33}, -{80,-64,34}, -{80,-64,35}, -{80,-64,36}, -{80,-64,37}, -{80,-64,38}, -{80,-64,39}, -{80,-64,40}, -{80,-64,41}, -{80,-64,42}, -{80,-64,43}, -{80,-64,44}, -{80,-64,45}, -{80,-64,46}, -{80,-64,47}, -{80,-64,48}, -{80,-64,49}, -{80,-64,50}, -{80,-64,51}, -{80,-64,52}, -{80,-64,53}, -{80,-64,54}, -{80,-64,55}, -{80,-64,56}, -{80,-64,57}, -{80,-64,58}, -{80,-64,59}, -{80,-64,60}, -{80,-64,61}, -{80,-64,62}, -{80,-64,63}, -{80,-64,64}, -{80,-64,65}, -{80,-64,66}, -{80,-64,67}, -{80,-64,68}, -{80,-64,69}, -{80,-64,70}, -{80,-64,71}, -{80,-64,72}, -{80,-64,73}, -{80,-64,74}, -{80,-64,75}, -{80,-64,76}, -{80,-64,77}, -{80,-63,24}, -{80,-63,25}, -{80,-63,26}, -{80,-63,27}, -{80,-63,28}, -{80,-63,29}, -{80,-63,30}, -{80,-63,31}, -{80,-63,32}, -{80,-63,33}, -{80,-63,34}, -{80,-63,35}, -{80,-63,36}, -{80,-63,37}, -{80,-63,38}, -{80,-63,39}, -{80,-63,40}, -{80,-63,41}, -{80,-63,42}, -{80,-63,43}, -{80,-63,44}, -{80,-63,45}, -{80,-63,46}, -{80,-63,47}, -{80,-63,48}, -{80,-63,49}, -{80,-63,50}, -{80,-63,51}, -{80,-63,52}, -{80,-63,53}, -{80,-63,54}, -{80,-63,55}, -{80,-63,56}, -{80,-63,57}, -{80,-63,58}, -{80,-63,59}, -{80,-63,60}, -{80,-63,61}, -{80,-63,62}, -{80,-63,63}, -{80,-63,64}, -{80,-63,65}, -{80,-63,66}, -{80,-63,67}, -{80,-63,68}, -{80,-63,69}, -{80,-63,70}, -{80,-63,71}, -{80,-63,72}, -{80,-63,73}, -{80,-63,74}, -{80,-63,75}, -{80,-63,76}, -{80,-63,77}, -{80,-62,22}, -{80,-62,23}, -{80,-62,24}, -{80,-62,25}, -{80,-62,26}, -{80,-62,27}, -{80,-62,28}, -{80,-62,29}, -{80,-62,30}, -{80,-62,31}, -{80,-62,32}, -{80,-62,33}, -{80,-62,34}, -{80,-62,35}, -{80,-62,36}, -{80,-62,37}, -{80,-62,38}, -{80,-62,39}, -{80,-62,40}, -{80,-62,41}, -{80,-62,42}, -{80,-62,43}, -{80,-62,44}, -{80,-62,45}, -{80,-62,46}, -{80,-62,47}, -{80,-62,48}, -{80,-62,49}, -{80,-62,50}, -{80,-62,51}, -{80,-62,52}, -{80,-62,53}, -{80,-62,54}, -{80,-62,55}, -{80,-62,56}, -{80,-62,57}, -{80,-62,58}, -{80,-62,59}, -{80,-62,60}, -{80,-62,61}, -{80,-62,62}, -{80,-62,63}, -{80,-62,64}, -{80,-62,65}, -{80,-62,66}, -{80,-62,67}, -{80,-62,68}, -{80,-62,69}, -{80,-62,70}, -{80,-62,71}, -{80,-62,72}, -{80,-62,73}, -{80,-62,74}, -{80,-62,75}, -{80,-62,76}, -{80,-62,77}, -{80,-61,20}, -{80,-61,21}, -{80,-61,22}, -{80,-61,23}, -{80,-61,24}, -{80,-61,25}, -{80,-61,26}, -{80,-61,27}, -{80,-61,28}, -{80,-61,29}, -{80,-61,30}, -{80,-61,31}, -{80,-61,32}, -{80,-61,33}, -{80,-61,34}, -{80,-61,35}, -{80,-61,36}, -{80,-61,37}, -{80,-61,38}, -{80,-61,39}, -{80,-61,40}, -{80,-61,41}, -{80,-61,42}, -{80,-61,43}, -{80,-61,44}, -{80,-61,45}, -{80,-61,46}, -{80,-61,47}, -{80,-61,48}, -{80,-61,49}, -{80,-61,50}, -{80,-61,51}, -{80,-61,52}, -{80,-61,53}, -{80,-61,54}, -{80,-61,55}, -{80,-61,56}, -{80,-61,57}, -{80,-61,58}, -{80,-61,59}, -{80,-61,60}, -{80,-61,61}, -{80,-61,62}, -{80,-61,63}, -{80,-61,64}, -{80,-61,65}, -{80,-61,66}, -{80,-61,67}, -{80,-61,68}, -{80,-61,69}, -{80,-61,70}, -{80,-61,71}, -{80,-61,72}, -{80,-61,73}, -{80,-61,74}, -{80,-61,75}, -{80,-61,76}, -{80,-61,77}, -{80,-60,18}, -{80,-60,19}, -{80,-60,20}, -{80,-60,21}, -{80,-60,22}, -{80,-60,23}, -{80,-60,24}, -{80,-60,25}, -{80,-60,26}, -{80,-60,27}, -{80,-60,28}, -{80,-60,29}, -{80,-60,30}, -{80,-60,31}, -{80,-60,32}, -{80,-60,33}, -{80,-60,34}, -{80,-60,35}, -{80,-60,36}, -{80,-60,37}, -{80,-60,38}, -{80,-60,39}, -{80,-60,40}, -{80,-60,41}, -{80,-60,42}, -{80,-60,43}, -{80,-60,44}, -{80,-60,45}, -{80,-60,46}, -{80,-60,47}, -{80,-60,48}, -{80,-60,49}, -{80,-60,50}, -{80,-60,51}, -{80,-60,52}, -{80,-60,53}, -{80,-60,54}, -{80,-60,55}, -{80,-60,56}, -{80,-60,57}, -{80,-60,58}, -{80,-60,59}, -{80,-60,60}, -{80,-60,61}, -{80,-60,62}, -{80,-60,63}, -{80,-60,64}, -{80,-60,65}, -{80,-60,66}, -{80,-60,67}, -{80,-60,68}, -{80,-60,69}, -{80,-60,70}, -{80,-60,71}, -{80,-60,72}, -{80,-60,73}, -{80,-60,74}, -{80,-60,75}, -{80,-60,76}, -{80,-60,77}, -{80,-60,78}, -{80,-59,16}, -{80,-59,17}, -{80,-59,18}, -{80,-59,19}, -{80,-59,20}, -{80,-59,21}, -{80,-59,22}, -{80,-59,23}, -{80,-59,24}, -{80,-59,25}, -{80,-59,26}, -{80,-59,27}, -{80,-59,28}, -{80,-59,29}, -{80,-59,30}, -{80,-59,31}, -{80,-59,32}, -{80,-59,33}, -{80,-59,34}, -{80,-59,35}, -{80,-59,36}, -{80,-59,37}, -{80,-59,38}, -{80,-59,39}, -{80,-59,40}, -{80,-59,41}, -{80,-59,42}, -{80,-59,43}, -{80,-59,44}, -{80,-59,45}, -{80,-59,46}, -{80,-59,47}, -{80,-59,48}, -{80,-59,49}, -{80,-59,50}, -{80,-59,51}, -{80,-59,52}, -{80,-59,53}, -{80,-59,54}, -{80,-59,55}, -{80,-59,56}, -{80,-59,57}, -{80,-59,58}, -{80,-59,59}, -{80,-59,60}, -{80,-59,61}, -{80,-59,62}, -{80,-59,63}, -{80,-59,64}, -{80,-59,65}, -{80,-59,66}, -{80,-59,67}, -{80,-59,68}, -{80,-59,69}, -{80,-59,70}, -{80,-59,71}, -{80,-59,72}, -{80,-59,73}, -{80,-59,74}, -{80,-59,75}, -{80,-59,76}, -{80,-59,77}, -{80,-59,78}, -{80,-58,14}, -{80,-58,15}, -{80,-58,16}, -{80,-58,17}, -{80,-58,18}, -{80,-58,19}, -{80,-58,20}, -{80,-58,21}, -{80,-58,22}, -{80,-58,23}, -{80,-58,24}, -{80,-58,25}, -{80,-58,26}, -{80,-58,27}, -{80,-58,28}, -{80,-58,29}, -{80,-58,30}, -{80,-58,31}, -{80,-58,32}, -{80,-58,33}, -{80,-58,34}, -{80,-58,35}, -{80,-58,36}, -{80,-58,37}, -{80,-58,38}, -{80,-58,39}, -{80,-58,40}, -{80,-58,41}, -{80,-58,42}, -{80,-58,43}, -{80,-58,44}, -{80,-58,45}, -{80,-58,46}, -{80,-58,47}, -{80,-58,48}, -{80,-58,49}, -{80,-58,50}, -{80,-58,51}, -{80,-58,52}, -{80,-58,53}, -{80,-58,54}, -{80,-58,55}, -{80,-58,56}, -{80,-58,57}, -{80,-58,58}, -{80,-58,59}, -{80,-58,60}, -{80,-58,61}, -{80,-58,62}, -{80,-58,63}, -{80,-58,64}, -{80,-58,65}, -{80,-58,66}, -{80,-58,67}, -{80,-58,68}, -{80,-58,69}, -{80,-58,70}, -{80,-58,71}, -{80,-58,72}, -{80,-58,73}, -{80,-58,74}, -{80,-58,75}, -{80,-58,76}, -{80,-58,77}, -{80,-58,78}, -{80,-57,12}, -{80,-57,13}, -{80,-57,14}, -{80,-57,15}, -{80,-57,16}, -{80,-57,17}, -{80,-57,18}, -{80,-57,19}, -{80,-57,20}, -{80,-57,21}, -{80,-57,22}, -{80,-57,23}, -{80,-57,24}, -{80,-57,25}, -{80,-57,26}, -{80,-57,27}, -{80,-57,28}, -{80,-57,29}, -{80,-57,30}, -{80,-57,31}, -{80,-57,32}, -{80,-57,33}, -{80,-57,34}, -{80,-57,35}, -{80,-57,36}, -{80,-57,37}, -{80,-57,38}, -{80,-57,39}, -{80,-57,40}, -{80,-57,41}, -{80,-57,42}, -{80,-57,43}, -{80,-57,44}, -{80,-57,45}, -{80,-57,46}, -{80,-57,47}, -{80,-57,48}, -{80,-57,49}, -{80,-57,50}, -{80,-57,51}, -{80,-57,52}, -{80,-57,53}, -{80,-57,54}, -{80,-57,55}, -{80,-57,56}, -{80,-57,57}, -{80,-57,58}, -{80,-57,59}, -{80,-57,60}, -{80,-57,61}, -{80,-57,62}, -{80,-57,63}, -{80,-57,64}, -{80,-57,65}, -{80,-57,66}, -{80,-57,67}, -{80,-57,68}, -{80,-57,69}, -{80,-57,70}, -{80,-57,71}, -{80,-57,72}, -{80,-57,73}, -{80,-57,74}, -{80,-57,75}, -{80,-57,76}, -{80,-57,77}, -{80,-57,78}, -{80,-56,10}, -{80,-56,11}, -{80,-56,12}, -{80,-56,13}, -{80,-56,14}, -{80,-56,15}, -{80,-56,16}, -{80,-56,17}, -{80,-56,18}, -{80,-56,19}, -{80,-56,20}, -{80,-56,21}, -{80,-56,22}, -{80,-56,23}, -{80,-56,24}, -{80,-56,25}, -{80,-56,26}, -{80,-56,27}, -{80,-56,28}, -{80,-56,29}, -{80,-56,30}, -{80,-56,31}, -{80,-56,32}, -{80,-56,33}, -{80,-56,34}, -{80,-56,35}, -{80,-56,36}, -{80,-56,37}, -{80,-56,38}, -{80,-56,39}, -{80,-56,40}, -{80,-56,41}, -{80,-56,42}, -{80,-56,43}, -{80,-56,44}, -{80,-56,45}, -{80,-56,46}, -{80,-56,47}, -{80,-56,48}, -{80,-56,49}, -{80,-56,50}, -{80,-56,51}, -{80,-56,52}, -{80,-56,53}, -{80,-56,54}, -{80,-56,55}, -{80,-56,56}, -{80,-56,57}, -{80,-56,58}, -{80,-56,59}, -{80,-56,60}, -{80,-56,61}, -{80,-56,62}, -{80,-56,63}, -{80,-56,64}, -{80,-56,65}, -{80,-56,66}, -{80,-56,67}, -{80,-56,68}, -{80,-56,69}, -{80,-56,70}, -{80,-56,71}, -{80,-56,72}, -{80,-56,73}, -{80,-56,74}, -{80,-56,75}, -{80,-56,76}, -{80,-56,77}, -{80,-56,78}, -{80,-55,8}, -{80,-55,9}, -{80,-55,10}, -{80,-55,11}, -{80,-55,12}, -{80,-55,13}, -{80,-55,14}, -{80,-55,15}, -{80,-55,16}, -{80,-55,17}, -{80,-55,18}, -{80,-55,19}, -{80,-55,20}, -{80,-55,21}, -{80,-55,22}, -{80,-55,23}, -{80,-55,24}, -{80,-55,25}, -{80,-55,26}, -{80,-55,27}, -{80,-55,28}, -{80,-55,29}, -{80,-55,30}, -{80,-55,31}, -{80,-55,32}, -{80,-55,33}, -{80,-55,34}, -{80,-55,35}, -{80,-55,36}, -{80,-55,37}, -{80,-55,38}, -{80,-55,39}, -{80,-55,40}, -{80,-55,41}, -{80,-55,42}, -{80,-55,43}, -{80,-55,44}, -{80,-55,45}, -{80,-55,46}, -{80,-55,47}, -{80,-55,48}, -{80,-55,49}, -{80,-55,50}, -{80,-55,51}, -{80,-55,52}, -{80,-55,53}, -{80,-55,54}, -{80,-55,55}, -{80,-55,56}, -{80,-55,57}, -{80,-55,58}, -{80,-55,59}, -{80,-55,60}, -{80,-55,61}, -{80,-55,62}, -{80,-55,63}, -{80,-55,64}, -{80,-55,65}, -{80,-55,66}, -{80,-55,67}, -{80,-55,68}, -{80,-55,69}, -{80,-55,70}, -{80,-55,71}, -{80,-55,72}, -{80,-55,73}, -{80,-55,74}, -{80,-55,75}, -{80,-55,76}, -{80,-55,77}, -{80,-55,78}, -{80,-54,6}, -{80,-54,7}, -{80,-54,8}, -{80,-54,9}, -{80,-54,10}, -{80,-54,11}, -{80,-54,12}, -{80,-54,13}, -{80,-54,14}, -{80,-54,15}, -{80,-54,16}, -{80,-54,17}, -{80,-54,18}, -{80,-54,19}, -{80,-54,20}, -{80,-54,21}, -{80,-54,22}, -{80,-54,23}, -{80,-54,24}, -{80,-54,25}, -{80,-54,26}, -{80,-54,27}, -{80,-54,28}, -{80,-54,29}, -{80,-54,30}, -{80,-54,31}, -{80,-54,32}, -{80,-54,33}, -{80,-54,34}, -{80,-54,35}, -{80,-54,36}, -{80,-54,37}, -{80,-54,38}, -{80,-54,39}, -{80,-54,40}, -{80,-54,41}, -{80,-54,42}, -{80,-54,43}, -{80,-54,44}, -{80,-54,45}, -{80,-54,46}, -{80,-54,47}, -{80,-54,48}, -{80,-54,49}, -{80,-54,50}, -{80,-54,51}, -{80,-54,52}, -{80,-54,53}, -{80,-54,54}, -{80,-54,55}, -{80,-54,56}, -{80,-54,57}, -{80,-54,58}, -{80,-54,59}, -{80,-54,60}, -{80,-54,61}, -{80,-54,62}, -{80,-54,63}, -{80,-54,64}, -{80,-54,65}, -{80,-54,66}, -{80,-54,67}, -{80,-54,68}, -{80,-54,69}, -{80,-54,70}, -{80,-54,71}, -{80,-54,72}, -{80,-54,73}, -{80,-54,74}, -{80,-54,75}, -{80,-54,76}, -{80,-54,77}, -{80,-54,78}, -{80,-53,4}, -{80,-53,5}, -{80,-53,6}, -{80,-53,7}, -{80,-53,8}, -{80,-53,9}, -{80,-53,10}, -{80,-53,11}, -{80,-53,12}, -{80,-53,13}, -{80,-53,14}, -{80,-53,15}, -{80,-53,16}, -{80,-53,17}, -{80,-53,18}, -{80,-53,19}, -{80,-53,20}, -{80,-53,21}, -{80,-53,22}, -{80,-53,23}, -{80,-53,24}, -{80,-53,25}, -{80,-53,26}, -{80,-53,27}, -{80,-53,28}, -{80,-53,29}, -{80,-53,30}, -{80,-53,31}, -{80,-53,32}, -{80,-53,33}, -{80,-53,34}, -{80,-53,35}, -{80,-53,36}, -{80,-53,37}, -{80,-53,38}, -{80,-53,39}, -{80,-53,40}, -{80,-53,41}, -{80,-53,42}, -{80,-53,43}, -{80,-53,44}, -{80,-53,45}, -{80,-53,46}, -{80,-53,47}, -{80,-53,48}, -{80,-53,49}, -{80,-53,50}, -{80,-53,51}, -{80,-53,52}, -{80,-53,53}, -{80,-53,54}, -{80,-53,55}, -{80,-53,56}, -{80,-53,57}, -{80,-53,58}, -{80,-53,59}, -{80,-53,60}, -{80,-53,61}, -{80,-53,62}, -{80,-53,63}, -{80,-53,64}, -{80,-53,65}, -{80,-53,66}, -{80,-53,67}, -{80,-53,68}, -{80,-53,69}, -{80,-53,70}, -{80,-53,71}, -{80,-53,72}, -{80,-53,73}, -{80,-53,74}, -{80,-53,75}, -{80,-53,76}, -{80,-53,77}, -{80,-53,78}, -{80,-52,2}, -{80,-52,3}, -{80,-52,4}, -{80,-52,5}, -{80,-52,6}, -{80,-52,7}, -{80,-52,8}, -{80,-52,9}, -{80,-52,10}, -{80,-52,11}, -{80,-52,12}, -{80,-52,13}, -{80,-52,14}, -{80,-52,15}, -{80,-52,16}, -{80,-52,17}, -{80,-52,18}, -{80,-52,19}, -{80,-52,20}, -{80,-52,21}, -{80,-52,22}, -{80,-52,23}, -{80,-52,24}, -{80,-52,25}, -{80,-52,26}, -{80,-52,27}, -{80,-52,28}, -{80,-52,29}, -{80,-52,30}, -{80,-52,31}, -{80,-52,32}, -{80,-52,33}, -{80,-52,34}, -{80,-52,35}, -{80,-52,36}, -{80,-52,37}, -{80,-52,38}, -{80,-52,39}, -{80,-52,40}, -{80,-52,41}, -{80,-52,42}, -{80,-52,43}, -{80,-52,44}, -{80,-52,45}, -{80,-52,46}, -{80,-52,47}, -{80,-52,48}, -{80,-52,49}, -{80,-52,50}, -{80,-52,51}, -{80,-52,52}, -{80,-52,53}, -{80,-52,54}, -{80,-52,55}, -{80,-52,56}, -{80,-52,57}, -{80,-52,58}, -{80,-52,59}, -{80,-52,60}, -{80,-52,61}, -{80,-52,62}, -{80,-52,63}, -{80,-52,64}, -{80,-52,65}, -{80,-52,66}, -{80,-52,67}, -{80,-52,68}, -{80,-52,69}, -{80,-52,70}, -{80,-52,71}, -{80,-52,72}, -{80,-52,73}, -{80,-52,74}, -{80,-52,75}, -{80,-52,76}, -{80,-52,77}, -{80,-52,78}, -{80,-51,1}, -{80,-51,2}, -{80,-51,3}, -{80,-51,4}, -{80,-51,5}, -{80,-51,6}, -{80,-51,7}, -{80,-51,8}, -{80,-51,9}, -{80,-51,10}, -{80,-51,11}, -{80,-51,12}, -{80,-51,13}, -{80,-51,14}, -{80,-51,15}, -{80,-51,16}, -{80,-51,17}, -{80,-51,18}, -{80,-51,19}, -{80,-51,20}, -{80,-51,21}, -{80,-51,22}, -{80,-51,23}, -{80,-51,24}, -{80,-51,25}, -{80,-51,26}, -{80,-51,27}, -{80,-51,28}, -{80,-51,29}, -{80,-51,30}, -{80,-51,31}, -{80,-51,32}, -{80,-51,33}, -{80,-51,34}, -{80,-51,35}, -{80,-51,36}, -{80,-51,37}, -{80,-51,38}, -{80,-51,39}, -{80,-51,40}, -{80,-51,41}, -{80,-51,42}, -{80,-51,43}, -{80,-51,44}, -{80,-51,45}, -{80,-51,46}, -{80,-51,47}, -{80,-51,48}, -{80,-51,49}, -{80,-51,50}, -{80,-51,51}, -{80,-51,52}, -{80,-51,53}, -{80,-51,54}, -{80,-51,55}, -{80,-51,56}, -{80,-51,57}, -{80,-51,58}, -{80,-51,59}, -{80,-51,60}, -{80,-51,61}, -{80,-51,62}, -{80,-51,63}, -{80,-51,64}, -{80,-51,65}, -{80,-51,66}, -{80,-51,67}, -{80,-51,68}, -{80,-51,69}, -{80,-51,70}, -{80,-51,71}, -{80,-51,72}, -{80,-51,73}, -{80,-51,74}, -{80,-51,75}, -{80,-51,76}, -{80,-51,77}, -{80,-51,78}, -{80,-50,-1}, -{80,-50,0}, -{80,-50,1}, -{80,-50,2}, -{80,-50,3}, -{80,-50,4}, -{80,-50,5}, -{80,-50,6}, -{80,-50,7}, -{80,-50,8}, -{80,-50,9}, -{80,-50,10}, -{80,-50,11}, -{80,-50,12}, -{80,-50,13}, -{80,-50,14}, -{80,-50,15}, -{80,-50,16}, -{80,-50,17}, -{80,-50,18}, -{80,-50,19}, -{80,-50,20}, -{80,-50,21}, -{80,-50,22}, -{80,-50,23}, -{80,-50,24}, -{80,-50,25}, -{80,-50,26}, -{80,-50,27}, -{80,-50,28}, -{80,-50,29}, -{80,-50,30}, -{80,-50,31}, -{80,-50,32}, -{80,-50,33}, -{80,-50,34}, -{80,-50,35}, -{80,-50,36}, -{80,-50,37}, -{80,-50,38}, -{80,-50,39}, -{80,-50,40}, -{80,-50,41}, -{80,-50,42}, -{80,-50,43}, -{80,-50,44}, -{80,-50,45}, -{80,-50,46}, -{80,-50,47}, -{80,-50,48}, -{80,-50,49}, -{80,-50,50}, -{80,-50,51}, -{80,-50,52}, -{80,-50,53}, -{80,-50,54}, -{80,-50,55}, -{80,-50,56}, -{80,-50,57}, -{80,-50,58}, -{80,-50,59}, -{80,-50,60}, -{80,-50,61}, -{80,-50,62}, -{80,-50,63}, -{80,-50,64}, -{80,-50,65}, -{80,-50,66}, -{80,-50,67}, -{80,-50,68}, -{80,-50,69}, -{80,-50,70}, -{80,-50,71}, -{80,-50,72}, -{80,-50,73}, -{80,-50,74}, -{80,-50,75}, -{80,-50,76}, -{80,-50,77}, -{80,-50,78}, -{80,-49,-3}, -{80,-49,-2}, -{80,-49,-1}, -{80,-49,0}, -{80,-49,1}, -{80,-49,2}, -{80,-49,3}, -{80,-49,4}, -{80,-49,5}, -{80,-49,6}, -{80,-49,7}, -{80,-49,8}, -{80,-49,9}, -{80,-49,10}, -{80,-49,11}, -{80,-49,12}, -{80,-49,13}, -{80,-49,14}, -{80,-49,15}, -{80,-49,16}, -{80,-49,17}, -{80,-49,18}, -{80,-49,19}, -{80,-49,20}, -{80,-49,21}, -{80,-49,22}, -{80,-49,23}, -{80,-49,24}, -{80,-49,25}, -{80,-49,26}, -{80,-49,27}, -{80,-49,28}, -{80,-49,29}, -{80,-49,30}, -{80,-49,31}, -{80,-49,32}, -{80,-49,33}, -{80,-49,34}, -{80,-49,35}, -{80,-49,36}, -{80,-49,37}, -{80,-49,38}, -{80,-49,39}, -{80,-49,40}, -{80,-49,41}, -{80,-49,42}, -{80,-49,43}, -{80,-49,44}, -{80,-49,45}, -{80,-49,46}, -{80,-49,47}, -{80,-49,48}, -{80,-49,49}, -{80,-49,50}, -{80,-49,51}, -{80,-49,52}, -{80,-49,53}, -{80,-49,54}, -{80,-49,55}, -{80,-49,56}, -{80,-49,57}, -{80,-49,58}, -{80,-49,59}, -{80,-49,60}, -{80,-49,61}, -{80,-49,62}, -{80,-49,63}, -{80,-49,64}, -{80,-49,65}, -{80,-49,66}, -{80,-49,67}, -{80,-49,68}, -{80,-49,69}, -{80,-49,70}, -{80,-49,71}, -{80,-49,72}, -{80,-49,73}, -{80,-49,74}, -{80,-49,75}, -{80,-49,76}, -{80,-49,77}, -{80,-49,78}, -{80,-48,-5}, -{80,-48,-4}, -{80,-48,-3}, -{80,-48,-2}, -{80,-48,-1}, -{80,-48,0}, -{80,-48,1}, -{80,-48,2}, -{80,-48,3}, -{80,-48,4}, -{80,-48,5}, -{80,-48,6}, -{80,-48,7}, -{80,-48,8}, -{80,-48,9}, -{80,-48,10}, -{80,-48,11}, -{80,-48,12}, -{80,-48,13}, -{80,-48,14}, -{80,-48,15}, -{80,-48,16}, -{80,-48,17}, -{80,-48,18}, -{80,-48,19}, -{80,-48,20}, -{80,-48,21}, -{80,-48,22}, -{80,-48,23}, -{80,-48,24}, -{80,-48,25}, -{80,-48,26}, -{80,-48,27}, -{80,-48,28}, -{80,-48,29}, -{80,-48,30}, -{80,-48,31}, -{80,-48,32}, -{80,-48,33}, -{80,-48,34}, -{80,-48,35}, -{80,-48,36}, -{80,-48,37}, -{80,-48,38}, -{80,-48,39}, -{80,-48,40}, -{80,-48,41}, -{80,-48,42}, -{80,-48,43}, -{80,-48,44}, -{80,-48,45}, -{80,-48,46}, -{80,-48,47}, -{80,-48,48}, -{80,-48,49}, -{80,-48,50}, -{80,-48,51}, -{80,-48,52}, -{80,-48,53}, -{80,-48,54}, -{80,-48,55}, -{80,-48,56}, -{80,-48,57}, -{80,-48,58}, -{80,-48,59}, -{80,-48,60}, -{80,-48,61}, -{80,-48,62}, -{80,-48,63}, -{80,-48,64}, -{80,-48,65}, -{80,-48,66}, -{80,-48,67}, -{80,-48,68}, -{80,-48,69}, -{80,-48,70}, -{80,-48,71}, -{80,-48,72}, -{80,-48,73}, -{80,-48,74}, -{80,-48,75}, -{80,-48,76}, -{80,-48,77}, -{80,-48,78}, -{80,-47,-6}, -{80,-47,-5}, -{80,-47,-4}, -{80,-47,-3}, -{80,-47,-2}, -{80,-47,-1}, -{80,-47,0}, -{80,-47,1}, -{80,-47,2}, -{80,-47,3}, -{80,-47,4}, -{80,-47,5}, -{80,-47,6}, -{80,-47,7}, -{80,-47,8}, -{80,-47,9}, -{80,-47,10}, -{80,-47,11}, -{80,-47,12}, -{80,-47,13}, -{80,-47,14}, -{80,-47,15}, -{80,-47,16}, -{80,-47,17}, -{80,-47,18}, -{80,-47,19}, -{80,-47,20}, -{80,-47,21}, -{80,-47,22}, -{80,-47,23}, -{80,-47,24}, -{80,-47,25}, -{80,-47,26}, -{80,-47,27}, -{80,-47,28}, -{80,-47,29}, -{80,-47,30}, -{80,-47,31}, -{80,-47,32}, -{80,-47,33}, -{80,-47,34}, -{80,-47,35}, -{80,-47,36}, -{80,-47,37}, -{80,-47,38}, -{80,-47,39}, -{80,-47,40}, -{80,-47,41}, -{80,-47,42}, -{80,-47,43}, -{80,-47,44}, -{80,-47,45}, -{80,-47,46}, -{80,-47,47}, -{80,-47,48}, -{80,-47,49}, -{80,-47,50}, -{80,-47,51}, -{80,-47,52}, -{80,-47,53}, -{80,-47,54}, -{80,-47,55}, -{80,-47,56}, -{80,-47,57}, -{80,-47,58}, -{80,-47,59}, -{80,-47,60}, -{80,-47,61}, -{80,-47,62}, -{80,-47,63}, -{80,-47,64}, -{80,-47,65}, -{80,-47,66}, -{80,-47,67}, -{80,-47,68}, -{80,-47,69}, -{80,-47,70}, -{80,-47,71}, -{80,-47,72}, -{80,-47,73}, -{80,-47,74}, -{80,-47,75}, -{80,-47,76}, -{80,-47,77}, -{80,-47,78}, -{80,-46,-8}, -{80,-46,-7}, -{80,-46,-6}, -{80,-46,-5}, -{80,-46,-4}, -{80,-46,-3}, -{80,-46,-2}, -{80,-46,-1}, -{80,-46,0}, -{80,-46,1}, -{80,-46,2}, -{80,-46,3}, -{80,-46,4}, -{80,-46,5}, -{80,-46,6}, -{80,-46,7}, -{80,-46,8}, -{80,-46,9}, -{80,-46,10}, -{80,-46,11}, -{80,-46,12}, -{80,-46,13}, -{80,-46,14}, -{80,-46,15}, -{80,-46,16}, -{80,-46,17}, -{80,-46,18}, -{80,-46,19}, -{80,-46,20}, -{80,-46,21}, -{80,-46,22}, -{80,-46,23}, -{80,-46,24}, -{80,-46,25}, -{80,-46,26}, -{80,-46,27}, -{80,-46,28}, -{80,-46,29}, -{80,-46,30}, -{80,-46,31}, -{80,-46,32}, -{80,-46,33}, -{80,-46,34}, -{80,-46,35}, -{80,-46,36}, -{80,-46,37}, -{80,-46,38}, -{80,-46,39}, -{80,-46,40}, -{80,-46,41}, -{80,-46,42}, -{80,-46,43}, -{80,-46,44}, -{80,-46,45}, -{80,-46,46}, -{80,-46,47}, -{80,-46,48}, -{80,-46,49}, -{80,-46,50}, -{80,-46,51}, -{80,-46,52}, -{80,-46,53}, -{80,-46,54}, -{80,-46,55}, -{80,-46,56}, -{80,-46,57}, -{80,-46,58}, -{80,-46,59}, -{80,-46,60}, -{80,-46,61}, -{80,-46,62}, -{80,-46,63}, -{80,-46,64}, -{80,-46,65}, -{80,-46,66}, -{80,-46,67}, -{80,-46,68}, -{80,-46,69}, -{80,-46,70}, -{80,-46,71}, -{80,-46,72}, -{80,-46,73}, -{80,-46,74}, -{80,-46,75}, -{80,-46,76}, -{80,-46,77}, -{80,-46,78}, -{80,-45,-9}, -{80,-45,-8}, -{80,-45,-7}, -{80,-45,-6}, -{80,-45,-5}, -{80,-45,-4}, -{80,-45,-3}, -{80,-45,-2}, -{80,-45,-1}, -{80,-45,0}, -{80,-45,1}, -{80,-45,2}, -{80,-45,3}, -{80,-45,4}, -{80,-45,5}, -{80,-45,6}, -{80,-45,7}, -{80,-45,8}, -{80,-45,9}, -{80,-45,10}, -{80,-45,11}, -{80,-45,12}, -{80,-45,13}, -{80,-45,14}, -{80,-45,15}, -{80,-45,16}, -{80,-45,17}, -{80,-45,18}, -{80,-45,19}, -{80,-45,20}, -{80,-45,21}, -{80,-45,22}, -{80,-45,23}, -{80,-45,24}, -{80,-45,25}, -{80,-45,26}, -{80,-45,27}, -{80,-45,28}, -{80,-45,29}, -{80,-45,30}, -{80,-45,31}, -{80,-45,32}, -{80,-45,33}, -{80,-45,34}, -{80,-45,35}, -{80,-45,36}, -{80,-45,37}, -{80,-45,38}, -{80,-45,39}, -{80,-45,40}, -{80,-45,41}, -{80,-45,42}, -{80,-45,43}, -{80,-45,44}, -{80,-45,45}, -{80,-45,46}, -{80,-45,47}, -{80,-45,48}, -{80,-45,49}, -{80,-45,50}, -{80,-45,51}, -{80,-45,52}, -{80,-45,53}, -{80,-45,54}, -{80,-45,55}, -{80,-45,56}, -{80,-45,57}, -{80,-45,58}, -{80,-45,59}, -{80,-45,60}, -{80,-45,61}, -{80,-45,62}, -{80,-45,63}, -{80,-45,64}, -{80,-45,65}, -{80,-45,66}, -{80,-45,67}, -{80,-45,68}, -{80,-45,69}, -{80,-45,70}, -{80,-45,71}, -{80,-45,72}, -{80,-45,73}, -{80,-45,74}, -{80,-45,75}, -{80,-45,76}, -{80,-45,77}, -{80,-45,78}, -{80,-44,-11}, -{80,-44,-10}, -{80,-44,-9}, -{80,-44,-8}, -{80,-44,-7}, -{80,-44,-6}, -{80,-44,-5}, -{80,-44,-4}, -{80,-44,-3}, -{80,-44,-2}, -{80,-44,-1}, -{80,-44,0}, -{80,-44,1}, -{80,-44,2}, -{80,-44,3}, -{80,-44,4}, -{80,-44,5}, -{80,-44,6}, -{80,-44,7}, -{80,-44,8}, -{80,-44,9}, -{80,-44,10}, -{80,-44,11}, -{80,-44,12}, -{80,-44,13}, -{80,-44,14}, -{80,-44,15}, -{80,-44,16}, -{80,-44,17}, -{80,-44,18}, -{80,-44,19}, -{80,-44,20}, -{80,-44,21}, -{80,-44,22}, -{80,-44,23}, -{80,-44,24}, -{80,-44,25}, -{80,-44,26}, -{80,-44,27}, -{80,-44,28}, -{80,-44,29}, -{80,-44,30}, -{80,-44,31}, -{80,-44,32}, -{80,-44,33}, -{80,-44,34}, -{80,-44,35}, -{80,-44,36}, -{80,-44,37}, -{80,-44,38}, -{80,-44,39}, -{80,-44,40}, -{80,-44,41}, -{80,-44,42}, -{80,-44,43}, -{80,-44,44}, -{80,-44,45}, -{80,-44,46}, -{80,-44,47}, -{80,-44,48}, -{80,-44,49}, -{80,-44,50}, -{80,-44,51}, -{80,-44,52}, -{80,-44,53}, -{80,-44,54}, -{80,-44,55}, -{80,-44,56}, -{80,-44,57}, -{80,-44,58}, -{80,-44,59}, -{80,-44,60}, -{80,-44,61}, -{80,-44,62}, -{80,-44,63}, -{80,-44,64}, -{80,-44,65}, -{80,-44,66}, -{80,-44,67}, -{80,-44,68}, -{80,-44,69}, -{80,-44,70}, -{80,-44,71}, -{80,-44,72}, -{80,-44,73}, -{80,-44,74}, -{80,-44,75}, -{80,-44,76}, -{80,-44,77}, -{80,-44,78}, -{80,-43,-13}, -{80,-43,-12}, -{80,-43,-11}, -{80,-43,-10}, -{80,-43,-9}, -{80,-43,-8}, -{80,-43,-7}, -{80,-43,-6}, -{80,-43,-5}, -{80,-43,-4}, -{80,-43,-3}, -{80,-43,-2}, -{80,-43,-1}, -{80,-43,0}, -{80,-43,1}, -{80,-43,2}, -{80,-43,3}, -{80,-43,4}, -{80,-43,5}, -{80,-43,6}, -{80,-43,7}, -{80,-43,8}, -{80,-43,9}, -{80,-43,10}, -{80,-43,11}, -{80,-43,12}, -{80,-43,13}, -{80,-43,14}, -{80,-43,15}, -{80,-43,16}, -{80,-43,17}, -{80,-43,18}, -{80,-43,19}, -{80,-43,20}, -{80,-43,21}, -{80,-43,22}, -{80,-43,23}, -{80,-43,24}, -{80,-43,25}, -{80,-43,26}, -{80,-43,27}, -{80,-43,28}, -{80,-43,29}, -{80,-43,30}, -{80,-43,31}, -{80,-43,32}, -{80,-43,33}, -{80,-43,34}, -{80,-43,35}, -{80,-43,36}, -{80,-43,37}, -{80,-43,38}, -{80,-43,39}, -{80,-43,40}, -{80,-43,41}, -{80,-43,42}, -{80,-43,43}, -{80,-43,44}, -{80,-43,45}, -{80,-43,46}, -{80,-43,47}, -{80,-43,48}, -{80,-43,49}, -{80,-43,50}, -{80,-43,51}, -{80,-43,52}, -{80,-43,53}, -{80,-43,54}, -{80,-43,55}, -{80,-43,56}, -{80,-43,57}, -{80,-43,58}, -{80,-43,59}, -{80,-43,60}, -{80,-43,61}, -{80,-43,62}, -{80,-43,63}, -{80,-43,64}, -{80,-43,65}, -{80,-43,66}, -{80,-43,67}, -{80,-43,68}, -{80,-43,69}, -{80,-43,70}, -{80,-43,71}, -{80,-43,72}, -{80,-43,73}, -{80,-43,74}, -{80,-43,75}, -{80,-43,76}, -{80,-43,77}, -{80,-43,78}, -{80,-42,-14}, -{80,-42,-13}, -{80,-42,-12}, -{80,-42,-11}, -{80,-42,-10}, -{80,-42,-9}, -{80,-42,-8}, -{80,-42,-7}, -{80,-42,-6}, -{80,-42,-5}, -{80,-42,-4}, -{80,-42,-3}, -{80,-42,-2}, -{80,-42,-1}, -{80,-42,0}, -{80,-42,1}, -{80,-42,2}, -{80,-42,3}, -{80,-42,4}, -{80,-42,5}, -{80,-42,6}, -{80,-42,7}, -{80,-42,8}, -{80,-42,9}, -{80,-42,10}, -{80,-42,11}, -{80,-42,12}, -{80,-42,13}, -{80,-42,14}, -{80,-42,15}, -{80,-42,16}, -{80,-42,17}, -{80,-42,18}, -{80,-42,19}, -{80,-42,20}, -{80,-42,21}, -{80,-42,22}, -{80,-42,23}, -{80,-42,24}, -{80,-42,25}, -{80,-42,26}, -{80,-42,27}, -{80,-42,28}, -{80,-42,29}, -{80,-42,30}, -{80,-42,31}, -{80,-42,32}, -{80,-42,33}, -{80,-42,34}, -{80,-42,35}, -{80,-42,36}, -{80,-42,37}, -{80,-42,38}, -{80,-42,39}, -{80,-42,40}, -{80,-42,41}, -{80,-42,42}, -{80,-42,43}, -{80,-42,44}, -{80,-42,45}, -{80,-42,46}, -{80,-42,47}, -{80,-42,48}, -{80,-42,49}, -{80,-42,50}, -{80,-42,51}, -{80,-42,52}, -{80,-42,53}, -{80,-42,54}, -{80,-42,55}, -{80,-42,56}, -{80,-42,57}, -{80,-42,58}, -{80,-42,59}, -{80,-42,60}, -{80,-42,61}, -{80,-42,62}, -{80,-42,63}, -{80,-42,64}, -{80,-42,65}, -{80,-42,66}, -{80,-42,67}, -{80,-42,68}, -{80,-42,69}, -{80,-42,70}, -{80,-42,71}, -{80,-42,72}, -{80,-42,73}, -{80,-42,74}, -{80,-42,75}, -{80,-42,76}, -{80,-42,77}, -{80,-42,78}, -{80,-41,-16}, -{80,-41,-15}, -{80,-41,-14}, -{80,-41,-13}, -{80,-41,-12}, -{80,-41,-11}, -{80,-41,-10}, -{80,-41,-9}, -{80,-41,-8}, -{80,-41,-7}, -{80,-41,-6}, -{80,-41,-5}, -{80,-41,-4}, -{80,-41,-3}, -{80,-41,-2}, -{80,-41,-1}, -{80,-41,0}, -{80,-41,1}, -{80,-41,2}, -{80,-41,3}, -{80,-41,4}, -{80,-41,5}, -{80,-41,6}, -{80,-41,7}, -{80,-41,8}, -{80,-41,9}, -{80,-41,10}, -{80,-41,11}, -{80,-41,12}, -{80,-41,13}, -{80,-41,14}, -{80,-41,15}, -{80,-41,16}, -{80,-41,17}, -{80,-41,18}, -{80,-41,19}, -{80,-41,20}, -{80,-41,21}, -{80,-41,22}, -{80,-41,23}, -{80,-41,24}, -{80,-41,25}, -{80,-41,26}, -{80,-41,27}, -{80,-41,28}, -{80,-41,29}, -{80,-41,30}, -{80,-41,31}, -{80,-41,32}, -{80,-41,33}, -{80,-41,34}, -{80,-41,35}, -{80,-41,36}, -{80,-41,37}, -{80,-41,38}, -{80,-41,39}, -{80,-41,40}, -{80,-41,41}, -{80,-41,42}, -{80,-41,43}, -{80,-41,44}, -{80,-41,45}, -{80,-41,46}, -{80,-41,47}, -{80,-41,48}, -{80,-41,49}, -{80,-41,50}, -{80,-41,51}, -{80,-41,52}, -{80,-41,53}, -{80,-41,54}, -{80,-41,55}, -{80,-41,56}, -{80,-41,57}, -{80,-41,58}, -{80,-41,59}, -{80,-41,60}, -{80,-41,61}, -{80,-41,62}, -{80,-41,63}, -{80,-41,64}, -{80,-41,65}, -{80,-41,66}, -{80,-41,67}, -{80,-41,68}, -{80,-41,69}, -{80,-41,70}, -{80,-41,71}, -{80,-41,72}, -{80,-41,73}, -{80,-41,74}, -{80,-41,75}, -{80,-41,76}, -{80,-41,77}, -{80,-41,78}, -{80,-41,79}, -{80,-40,-17}, -{80,-40,-16}, -{80,-40,-15}, -{80,-40,-14}, -{80,-40,-13}, -{80,-40,-12}, -{80,-40,-11}, -{80,-40,-10}, -{80,-40,-9}, -{80,-40,-8}, -{80,-40,-7}, -{80,-40,-6}, -{80,-40,-5}, -{80,-40,-4}, -{80,-40,-3}, -{80,-40,-2}, -{80,-40,-1}, -{80,-40,0}, -{80,-40,1}, -{80,-40,2}, -{80,-40,3}, -{80,-40,4}, -{80,-40,5}, -{80,-40,6}, -{80,-40,7}, -{80,-40,8}, -{80,-40,9}, -{80,-40,10}, -{80,-40,11}, -{80,-40,12}, -{80,-40,13}, -{80,-40,14}, -{80,-40,15}, -{80,-40,16}, -{80,-40,17}, -{80,-40,18}, -{80,-40,19}, -{80,-40,20}, -{80,-40,21}, -{80,-40,22}, -{80,-40,23}, -{80,-40,24}, -{80,-40,25}, -{80,-40,26}, -{80,-40,27}, -{80,-40,28}, -{80,-40,29}, -{80,-40,30}, -{80,-40,31}, -{80,-40,32}, -{80,-40,33}, -{80,-40,34}, -{80,-40,35}, -{80,-40,36}, -{80,-40,37}, -{80,-40,38}, -{80,-40,39}, -{80,-40,40}, -{80,-40,41}, -{80,-40,42}, -{80,-40,43}, -{80,-40,44}, -{80,-40,45}, -{80,-40,46}, -{80,-40,47}, -{80,-40,48}, -{80,-40,49}, -{80,-40,50}, -{80,-40,51}, -{80,-40,52}, -{80,-40,53}, -{80,-40,54}, -{80,-40,55}, -{80,-40,56}, -{80,-40,57}, -{80,-40,58}, -{80,-40,59}, -{80,-40,60}, -{80,-40,61}, -{80,-40,62}, -{80,-40,63}, -{80,-40,64}, -{80,-40,65}, -{80,-40,66}, -{80,-40,67}, -{80,-40,68}, -{80,-40,69}, -{80,-40,70}, -{80,-40,71}, -{80,-40,72}, -{80,-40,73}, -{80,-40,74}, -{80,-40,75}, -{80,-40,76}, -{80,-40,77}, -{80,-40,78}, -{80,-40,79}, -{80,-39,-19}, -{80,-39,-18}, -{80,-39,-17}, -{80,-39,-16}, -{80,-39,-15}, -{80,-39,-14}, -{80,-39,-13}, -{80,-39,-12}, -{80,-39,-11}, -{80,-39,-10}, -{80,-39,-9}, -{80,-39,-8}, -{80,-39,-7}, -{80,-39,-6}, -{80,-39,-5}, -{80,-39,-4}, -{80,-39,-3}, -{80,-39,-2}, -{80,-39,-1}, -{80,-39,0}, -{80,-39,1}, -{80,-39,2}, -{80,-39,3}, -{80,-39,4}, -{80,-39,5}, -{80,-39,6}, -{80,-39,7}, -{80,-39,8}, -{80,-39,9}, -{80,-39,10}, -{80,-39,11}, -{80,-39,12}, -{80,-39,13}, -{80,-39,14}, -{80,-39,15}, -{80,-39,16}, -{80,-39,17}, -{80,-39,18}, -{80,-39,19}, -{80,-39,20}, -{80,-39,21}, -{80,-39,22}, -{80,-39,23}, -{80,-39,24}, -{80,-39,25}, -{80,-39,26}, -{80,-39,27}, -{80,-39,28}, -{80,-39,29}, -{80,-39,30}, -{80,-39,31}, -{80,-39,32}, -{80,-39,33}, -{80,-39,34}, -{80,-39,35}, -{80,-39,36}, -{80,-39,37}, -{80,-39,38}, -{80,-39,39}, -{80,-39,40}, -{80,-39,41}, -{80,-39,42}, -{80,-39,43}, -{80,-39,44}, -{80,-39,45}, -{80,-39,46}, -{80,-39,47}, -{80,-39,48}, -{80,-39,49}, -{80,-39,50}, -{80,-39,51}, -{80,-39,52}, -{80,-39,53}, -{80,-39,54}, -{80,-39,55}, -{80,-39,56}, -{80,-39,57}, -{80,-39,58}, -{80,-39,59}, -{80,-39,60}, -{80,-39,61}, -{80,-39,62}, -{80,-39,63}, -{80,-39,64}, -{80,-39,65}, -{80,-39,66}, -{80,-39,67}, -{80,-39,68}, -{80,-39,69}, -{80,-39,70}, -{80,-39,71}, -{80,-39,72}, -{80,-39,73}, -{80,-39,74}, -{80,-39,75}, -{80,-39,76}, -{80,-39,77}, -{80,-39,78}, -{80,-39,79}, -{80,-38,-20}, -{80,-38,-19}, -{80,-38,-18}, -{80,-38,-17}, -{80,-38,-16}, -{80,-38,-15}, -{80,-38,-14}, -{80,-38,-13}, -{80,-38,-12}, -{80,-38,-11}, -{80,-38,-10}, -{80,-38,-9}, -{80,-38,-8}, -{80,-38,-7}, -{80,-38,-6}, -{80,-38,-5}, -{80,-38,-4}, -{80,-38,-3}, -{80,-38,-2}, -{80,-38,-1}, -{80,-38,0}, -{80,-38,1}, -{80,-38,2}, -{80,-38,3}, -{80,-38,4}, -{80,-38,5}, -{80,-38,6}, -{80,-38,7}, -{80,-38,8}, -{80,-38,9}, -{80,-38,10}, -{80,-38,11}, -{80,-38,12}, -{80,-38,13}, -{80,-38,14}, -{80,-38,15}, -{80,-38,16}, -{80,-38,17}, -{80,-38,18}, -{80,-38,19}, -{80,-38,20}, -{80,-38,21}, -{80,-38,22}, -{80,-38,23}, -{80,-38,24}, -{80,-38,25}, -{80,-38,26}, -{80,-38,27}, -{80,-38,28}, -{80,-38,29}, -{80,-38,30}, -{80,-38,31}, -{80,-38,32}, -{80,-38,33}, -{80,-38,34}, -{80,-38,35}, -{80,-38,36}, -{80,-38,37}, -{80,-38,38}, -{80,-38,39}, -{80,-38,40}, -{80,-38,41}, -{80,-38,42}, -{80,-38,43}, -{80,-38,44}, -{80,-38,45}, -{80,-38,46}, -{80,-38,47}, -{80,-38,48}, -{80,-38,49}, -{80,-38,50}, -{80,-38,51}, -{80,-38,52}, -{80,-38,53}, -{80,-38,54}, -{80,-38,55}, -{80,-38,56}, -{80,-38,57}, -{80,-38,58}, -{80,-38,59}, -{80,-38,60}, -{80,-38,61}, -{80,-38,62}, -{80,-38,63}, -{80,-38,64}, -{80,-38,65}, -{80,-38,66}, -{80,-38,67}, -{80,-38,68}, -{80,-38,69}, -{80,-38,70}, -{80,-38,71}, -{80,-38,72}, -{80,-38,73}, -{80,-38,74}, -{80,-38,75}, -{80,-38,76}, -{80,-38,77}, -{80,-38,78}, -{80,-38,79}, -{80,-37,-22}, -{80,-37,-21}, -{80,-37,-20}, -{80,-37,-19}, -{80,-37,-18}, -{80,-37,-17}, -{80,-37,-16}, -{80,-37,-15}, -{80,-37,-14}, -{80,-37,-13}, -{80,-37,-12}, -{80,-37,-11}, -{80,-37,-10}, -{80,-37,-9}, -{80,-37,-8}, -{80,-37,-7}, -{80,-37,-6}, -{80,-37,-5}, -{80,-37,-4}, -{80,-37,-3}, -{80,-37,-2}, -{80,-37,-1}, -{80,-37,0}, -{80,-37,1}, -{80,-37,2}, -{80,-37,3}, -{80,-37,4}, -{80,-37,5}, -{80,-37,6}, -{80,-37,7}, -{80,-37,8}, -{80,-37,9}, -{80,-37,10}, -{80,-37,11}, -{80,-37,12}, -{80,-37,13}, -{80,-37,14}, -{80,-37,15}, -{80,-37,16}, -{80,-37,17}, -{80,-37,18}, -{80,-37,19}, -{80,-37,20}, -{80,-37,21}, -{80,-37,22}, -{80,-37,23}, -{80,-37,24}, -{80,-37,25}, -{80,-37,26}, -{80,-37,27}, -{80,-37,28}, -{80,-37,29}, -{80,-37,30}, -{80,-37,31}, -{80,-37,32}, -{80,-37,33}, -{80,-37,34}, -{80,-37,35}, -{80,-37,36}, -{80,-37,37}, -{80,-37,38}, -{80,-37,39}, -{80,-37,40}, -{80,-37,41}, -{80,-37,42}, -{80,-37,43}, -{80,-37,44}, -{80,-37,45}, -{80,-37,46}, -{80,-37,47}, -{80,-37,48}, -{80,-37,49}, -{80,-37,50}, -{80,-37,51}, -{80,-37,52}, -{80,-37,53}, -{80,-37,54}, -{80,-37,55}, -{80,-37,56}, -{80,-37,57}, -{80,-37,58}, -{80,-37,59}, -{80,-37,60}, -{80,-37,61}, -{80,-37,62}, -{80,-37,63}, -{80,-37,64}, -{80,-37,65}, -{80,-37,66}, -{80,-37,67}, -{80,-37,68}, -{80,-37,69}, -{80,-37,70}, -{80,-37,71}, -{80,-37,72}, -{80,-37,73}, -{80,-37,74}, -{80,-37,75}, -{80,-37,76}, -{80,-37,77}, -{80,-37,78}, -{80,-37,79}, -{80,-36,-23}, -{80,-36,-22}, -{80,-36,-21}, -{80,-36,-20}, -{80,-36,-19}, -{80,-36,-18}, -{80,-36,-17}, -{80,-36,-16}, -{80,-36,-15}, -{80,-36,-14}, -{80,-36,-13}, -{80,-36,-12}, -{80,-36,-11}, -{80,-36,-10}, -{80,-36,-9}, -{80,-36,-8}, -{80,-36,-7}, -{80,-36,-6}, -{80,-36,-5}, -{80,-36,-4}, -{80,-36,-3}, -{80,-36,-2}, -{80,-36,-1}, -{80,-36,0}, -{80,-36,1}, -{80,-36,2}, -{80,-36,3}, -{80,-36,4}, -{80,-36,5}, -{80,-36,6}, -{80,-36,7}, -{80,-36,8}, -{80,-36,9}, -{80,-36,10}, -{80,-36,11}, -{80,-36,12}, -{80,-36,13}, -{80,-36,14}, -{80,-36,15}, -{80,-36,16}, -{80,-36,17}, -{80,-36,18}, -{80,-36,19}, -{80,-36,20}, -{80,-36,21}, -{80,-36,22}, -{80,-36,23}, -{80,-36,24}, -{80,-36,25}, -{80,-36,26}, -{80,-36,27}, -{80,-36,28}, -{80,-36,29}, -{80,-36,30}, -{80,-36,31}, -{80,-36,32}, -{80,-36,33}, -{80,-36,34}, -{80,-36,35}, -{80,-36,36}, -{80,-36,37}, -{80,-36,38}, -{80,-36,39}, -{80,-36,40}, -{80,-36,41}, -{80,-36,42}, -{80,-36,43}, -{80,-36,44}, -{80,-36,45}, -{80,-36,46}, -{80,-36,47}, -{80,-36,48}, -{80,-36,49}, -{80,-36,50}, -{80,-36,51}, -{80,-36,52}, -{80,-36,53}, -{80,-36,54}, -{80,-36,55}, -{80,-36,56}, -{80,-36,57}, -{80,-36,58}, -{80,-36,59}, -{80,-36,60}, -{80,-36,61}, -{80,-36,62}, -{80,-36,63}, -{80,-36,64}, -{80,-36,65}, -{80,-36,66}, -{80,-36,67}, -{80,-36,68}, -{80,-36,69}, -{80,-36,70}, -{80,-36,71}, -{80,-36,72}, -{80,-36,73}, -{80,-36,74}, -{80,-36,75}, -{80,-36,76}, -{80,-36,77}, -{80,-36,78}, -{80,-36,79}, -{80,-35,-25}, -{80,-35,-24}, -{80,-35,-23}, -{80,-35,-22}, -{80,-35,-21}, -{80,-35,-20}, -{80,-35,-19}, -{80,-35,-18}, -{80,-35,-17}, -{80,-35,-16}, -{80,-35,-15}, -{80,-35,-14}, -{80,-35,-13}, -{80,-35,-12}, -{80,-35,-11}, -{80,-35,-10}, -{80,-35,-9}, -{80,-35,-8}, -{80,-35,-7}, -{80,-35,-6}, -{80,-35,-5}, -{80,-35,-4}, -{80,-35,-3}, -{80,-35,-2}, -{80,-35,-1}, -{80,-35,0}, -{80,-35,1}, -{80,-35,2}, -{80,-35,3}, -{80,-35,4}, -{80,-35,5}, -{80,-35,6}, -{80,-35,7}, -{80,-35,8}, -{80,-35,9}, -{80,-35,10}, -{80,-35,11}, -{80,-35,12}, -{80,-35,13}, -{80,-35,14}, -{80,-35,15}, -{80,-35,16}, -{80,-35,17}, -{80,-35,18}, -{80,-35,19}, -{80,-35,20}, -{80,-35,21}, -{80,-35,22}, -{80,-35,23}, -{80,-35,24}, -{80,-35,25}, -{80,-35,26}, -{80,-35,27}, -{80,-35,28}, -{80,-35,29}, -{80,-35,30}, -{80,-35,31}, -{80,-35,32}, -{80,-35,33}, -{80,-35,34}, -{80,-35,35}, -{80,-35,36}, -{80,-35,37}, -{80,-35,38}, -{80,-35,39}, -{80,-35,40}, -{80,-35,41}, -{80,-35,42}, -{80,-35,43}, -{80,-35,44}, -{80,-35,45}, -{80,-35,46}, -{80,-35,47}, -{80,-35,48}, -{80,-35,49}, -{80,-35,50}, -{80,-35,51}, -{80,-35,52}, -{80,-35,53}, -{80,-35,54}, -{80,-35,55}, -{80,-35,56}, -{80,-35,57}, -{80,-35,58}, -{80,-35,59}, -{80,-35,60}, -{80,-35,61}, -{80,-35,62}, -{80,-35,63}, -{80,-35,64}, -{80,-35,65}, -{80,-35,66}, -{80,-35,67}, -{80,-35,68}, -{80,-35,69}, -{80,-35,70}, -{80,-35,71}, -{80,-35,72}, -{80,-35,73}, -{80,-35,74}, -{80,-35,75}, -{80,-35,76}, -{80,-35,77}, -{80,-35,78}, -{80,-35,79}, -{80,-34,-26}, -{80,-34,-25}, -{80,-34,-24}, -{80,-34,-23}, -{80,-34,-22}, -{80,-34,-21}, -{80,-34,-20}, -{80,-34,-19}, -{80,-34,-18}, -{80,-34,-17}, -{80,-34,-16}, -{80,-34,-15}, -{80,-34,-14}, -{80,-34,-13}, -{80,-34,-12}, -{80,-34,-11}, -{80,-34,-10}, -{80,-34,-9}, -{80,-34,-8}, -{80,-34,-7}, -{80,-34,-6}, -{80,-34,-5}, -{80,-34,-4}, -{80,-34,-3}, -{80,-34,-2}, -{80,-34,-1}, -{80,-34,0}, -{80,-34,1}, -{80,-34,2}, -{80,-34,3}, -{80,-34,4}, -{80,-34,5}, -{80,-34,6}, -{80,-34,7}, -{80,-34,8}, -{80,-34,9}, -{80,-34,10}, -{80,-34,11}, -{80,-34,12}, -{80,-34,13}, -{80,-34,14}, -{80,-34,15}, -{80,-34,16}, -{80,-34,17}, -{80,-34,18}, -{80,-34,19}, -{80,-34,20}, -{80,-34,21}, -{80,-34,22}, -{80,-34,23}, -{80,-34,24}, -{80,-34,25}, -{80,-34,26}, -{80,-34,27}, -{80,-34,28}, -{80,-34,29}, -{80,-34,30}, -{80,-34,31}, -{80,-34,32}, -{80,-34,33}, -{80,-34,34}, -{80,-34,35}, -{80,-34,36}, -{80,-34,37}, -{80,-34,38}, -{80,-34,39}, -{80,-34,40}, -{80,-34,41}, -{80,-34,42}, -{80,-34,43}, -{80,-34,44}, -{80,-34,45}, -{80,-34,46}, -{80,-34,47}, -{80,-34,48}, -{80,-34,49}, -{80,-34,50}, -{80,-34,51}, -{80,-34,52}, -{80,-34,53}, -{80,-34,54}, -{80,-34,55}, -{80,-34,56}, -{80,-34,57}, -{80,-34,58}, -{80,-34,59}, -{80,-34,60}, -{80,-34,61}, -{80,-34,62}, -{80,-34,63}, -{80,-34,64}, -{80,-34,65}, -{80,-34,66}, -{80,-34,67}, -{80,-34,68}, -{80,-34,69}, -{80,-34,70}, -{80,-34,71}, -{80,-34,72}, -{80,-34,73}, -{80,-34,74}, -{80,-34,75}, -{80,-34,76}, -{80,-34,77}, -{80,-34,78}, -{80,-34,79}, -{80,-33,-27}, -{80,-33,-26}, -{80,-33,-25}, -{80,-33,-24}, -{80,-33,-23}, -{80,-33,-22}, -{80,-33,-21}, -{80,-33,-20}, -{80,-33,-19}, -{80,-33,-18}, -{80,-33,-17}, -{80,-33,-16}, -{80,-33,-15}, -{80,-33,-14}, -{80,-33,-13}, -{80,-33,-12}, -{80,-33,-11}, -{80,-33,-10}, -{80,-33,-9}, -{80,-33,-8}, -{80,-33,-7}, -{80,-33,-6}, -{80,-33,-5}, -{80,-33,-4}, -{80,-33,-3}, -{80,-33,-2}, -{80,-33,-1}, -{80,-33,0}, -{80,-33,1}, -{80,-33,2}, -{80,-33,3}, -{80,-33,4}, -{80,-33,5}, -{80,-33,6}, -{80,-33,7}, -{80,-33,8}, -{80,-33,9}, -{80,-33,10}, -{80,-33,11}, -{80,-33,12}, -{80,-33,13}, -{80,-33,14}, -{80,-33,15}, -{80,-33,16}, -{80,-33,17}, -{80,-33,18}, -{80,-33,19}, -{80,-33,20}, -{80,-33,21}, -{80,-33,22}, -{80,-33,23}, -{80,-33,24}, -{80,-33,25}, -{80,-33,26}, -{80,-33,27}, -{80,-33,28}, -{80,-33,29}, -{80,-33,30}, -{80,-33,31}, -{80,-33,32}, -{80,-33,33}, -{80,-33,34}, -{80,-33,35}, -{80,-33,36}, -{80,-33,37}, -{80,-33,38}, -{80,-33,39}, -{80,-33,40}, -{80,-33,41}, -{80,-33,42}, -{80,-33,43}, -{80,-33,44}, -{80,-33,45}, -{80,-33,46}, -{80,-33,47}, -{80,-33,48}, -{80,-33,49}, -{80,-33,50}, -{80,-33,51}, -{80,-33,52}, -{80,-33,53}, -{80,-33,54}, -{80,-33,55}, -{80,-33,56}, -{80,-33,57}, -{80,-33,58}, -{80,-33,59}, -{80,-33,60}, -{80,-33,61}, -{80,-33,62}, -{80,-33,63}, -{80,-33,64}, -{80,-33,65}, -{80,-33,66}, -{80,-33,67}, -{80,-33,68}, -{80,-33,69}, -{80,-33,70}, -{80,-33,71}, -{80,-33,72}, -{80,-33,73}, -{80,-33,74}, -{80,-33,75}, -{80,-33,76}, -{80,-33,77}, -{80,-33,78}, -{80,-33,79}, -{80,-32,-29}, -{80,-32,-28}, -{80,-32,-27}, -{80,-32,-26}, -{80,-32,-25}, -{80,-32,-24}, -{80,-32,-23}, -{80,-32,-22}, -{80,-32,-21}, -{80,-32,-20}, -{80,-32,-19}, -{80,-32,-18}, -{80,-32,-17}, -{80,-32,-16}, -{80,-32,-15}, -{80,-32,-14}, -{80,-32,-13}, -{80,-32,-12}, -{80,-32,-11}, -{80,-32,-10}, -{80,-32,-9}, -{80,-32,-8}, -{80,-32,-7}, -{80,-32,-6}, -{80,-32,-5}, -{80,-32,-4}, -{80,-32,-3}, -{80,-32,-2}, -{80,-32,-1}, -{80,-32,0}, -{80,-32,1}, -{80,-32,2}, -{80,-32,3}, -{80,-32,4}, -{80,-32,5}, -{80,-32,6}, -{80,-32,7}, -{80,-32,8}, -{80,-32,9}, -{80,-32,10}, -{80,-32,11}, -{80,-32,12}, -{80,-32,13}, -{80,-32,14}, -{80,-32,15}, -{80,-32,16}, -{80,-32,17}, -{80,-32,18}, -{80,-32,19}, -{80,-32,20}, -{80,-32,21}, -{80,-32,22}, -{80,-32,23}, -{80,-32,24}, -{80,-32,25}, -{80,-32,26}, -{80,-32,27}, -{80,-32,28}, -{80,-32,29}, -{80,-32,30}, -{80,-32,31}, -{80,-32,32}, -{80,-32,33}, -{80,-32,34}, -{80,-32,35}, -{80,-32,36}, -{80,-32,37}, -{80,-32,38}, -{80,-32,39}, -{80,-32,40}, -{80,-32,41}, -{80,-32,42}, -{80,-32,43}, -{80,-32,44}, -{80,-32,45}, -{80,-32,46}, -{80,-32,47}, -{80,-32,48}, -{80,-32,49}, -{80,-32,50}, -{80,-32,51}, -{80,-32,52}, -{80,-32,53}, -{80,-32,54}, -{80,-32,55}, -{80,-32,56}, -{80,-32,57}, -{80,-32,58}, -{80,-32,59}, -{80,-32,60}, -{80,-32,61}, -{80,-32,62}, -{80,-32,63}, -{80,-32,64}, -{80,-32,65}, -{80,-32,66}, -{80,-32,67}, -{80,-32,68}, -{80,-32,69}, -{80,-32,70}, -{80,-32,71}, -{80,-32,72}, -{80,-32,73}, -{80,-32,74}, -{80,-32,75}, -{80,-32,76}, -{80,-32,77}, -{80,-32,78}, -{80,-32,79}, -{80,-31,-30}, -{80,-31,-29}, -{80,-31,-28}, -{80,-31,-27}, -{80,-31,-26}, -{80,-31,-25}, -{80,-31,-24}, -{80,-31,-23}, -{80,-31,-22}, -{80,-31,-21}, -{80,-31,-20}, -{80,-31,-19}, -{80,-31,-18}, -{80,-31,-17}, -{80,-31,-16}, -{80,-31,-15}, -{80,-31,-14}, -{80,-31,-13}, -{80,-31,-12}, -{80,-31,-11}, -{80,-31,-10}, -{80,-31,-9}, -{80,-31,-8}, -{80,-31,-7}, -{80,-31,-6}, -{80,-31,-5}, -{80,-31,-4}, -{80,-31,-3}, -{80,-31,-2}, -{80,-31,-1}, -{80,-31,0}, -{80,-31,1}, -{80,-31,2}, -{80,-31,3}, -{80,-31,4}, -{80,-31,5}, -{80,-31,6}, -{80,-31,7}, -{80,-31,8}, -{80,-31,9}, -{80,-31,10}, -{80,-31,11}, -{80,-31,12}, -{80,-31,13}, -{80,-31,14}, -{80,-31,15}, -{80,-31,16}, -{80,-31,17}, -{80,-31,18}, -{80,-31,19}, -{80,-31,20}, -{80,-31,21}, -{80,-31,22}, -{80,-31,23}, -{80,-31,24}, -{80,-31,25}, -{80,-31,26}, -{80,-31,27}, -{80,-31,28}, -{80,-31,29}, -{80,-31,30}, -{80,-31,31}, -{80,-31,32}, -{80,-31,33}, -{80,-31,34}, -{80,-31,35}, -{80,-31,36}, -{80,-31,37}, -{80,-31,38}, -{80,-31,39}, -{80,-31,40}, -{80,-31,41}, -{80,-31,42}, -{80,-31,43}, -{80,-31,44}, -{80,-31,45}, -{80,-31,46}, -{80,-31,47}, -{80,-31,48}, -{80,-31,49}, -{80,-31,50}, -{80,-31,51}, -{80,-31,52}, -{80,-31,53}, -{80,-31,54}, -{80,-31,55}, -{80,-31,56}, -{80,-31,57}, -{80,-31,58}, -{80,-31,59}, -{80,-31,60}, -{80,-31,61}, -{80,-31,62}, -{80,-31,63}, -{80,-31,64}, -{80,-31,65}, -{80,-31,66}, -{80,-31,67}, -{80,-31,68}, -{80,-31,69}, -{80,-31,70}, -{80,-31,71}, -{80,-31,72}, -{80,-31,73}, -{80,-31,74}, -{80,-31,75}, -{80,-31,76}, -{80,-31,77}, -{80,-31,78}, -{80,-31,79}, -{80,-30,-31}, -{80,-30,-30}, -{80,-30,-29}, -{80,-30,-28}, -{80,-30,-27}, -{80,-30,-26}, -{80,-30,-25}, -{80,-30,-24}, -{80,-30,-23}, -{80,-30,-22}, -{80,-30,-21}, -{80,-30,-20}, -{80,-30,-19}, -{80,-30,-18}, -{80,-30,-17}, -{80,-30,-16}, -{80,-30,-15}, -{80,-30,-14}, -{80,-30,-13}, -{80,-30,-12}, -{80,-30,-11}, -{80,-30,-10}, -{80,-30,-9}, -{80,-30,-8}, -{80,-30,-7}, -{80,-30,-6}, -{80,-30,-5}, -{80,-30,-4}, -{80,-30,-3}, -{80,-30,-2}, -{80,-30,-1}, -{80,-30,0}, -{80,-30,1}, -{80,-30,2}, -{80,-30,3}, -{80,-30,4}, -{80,-30,5}, -{80,-30,6}, -{80,-30,7}, -{80,-30,8}, -{80,-30,9}, -{80,-30,10}, -{80,-30,11}, -{80,-30,12}, -{80,-30,13}, -{80,-30,14}, -{80,-30,15}, -{80,-30,16}, -{80,-30,17}, -{80,-30,18}, -{80,-30,19}, -{80,-30,20}, -{80,-30,21}, -{80,-30,22}, -{80,-30,23}, -{80,-30,24}, -{80,-30,25}, -{80,-30,26}, -{80,-30,27}, -{80,-30,28}, -{80,-30,29}, -{80,-30,30}, -{80,-30,31}, -{80,-30,32}, -{80,-30,33}, -{80,-30,34}, -{80,-30,35}, -{80,-30,36}, -{80,-30,37}, -{80,-30,38}, -{80,-30,39}, -{80,-30,40}, -{80,-30,41}, -{80,-30,42}, -{80,-30,43}, -{80,-30,44}, -{80,-30,45}, -{80,-30,46}, -{80,-30,47}, -{80,-30,48}, -{80,-30,49}, -{80,-30,50}, -{80,-30,51}, -{80,-30,52}, -{80,-30,53}, -{80,-30,54}, -{80,-30,55}, -{80,-30,56}, -{80,-30,57}, -{80,-30,58}, -{80,-30,59}, -{80,-30,60}, -{80,-30,61}, -{80,-30,62}, -{80,-30,63}, -{80,-30,64}, -{80,-30,65}, -{80,-30,66}, -{80,-30,67}, -{80,-30,68}, -{80,-30,69}, -{80,-30,70}, -{80,-30,71}, -{80,-30,72}, -{80,-30,73}, -{80,-30,74}, -{80,-30,75}, -{80,-30,76}, -{80,-30,77}, -{80,-30,78}, -{80,-30,79}, -{80,-29,-31}, -{80,-29,-30}, -{80,-29,-29}, -{80,-29,-28}, -{80,-29,-27}, -{80,-29,-26}, -{80,-29,-25}, -{80,-29,-24}, -{80,-29,-23}, -{80,-29,-22}, -{80,-29,-21}, -{80,-29,-20}, -{80,-29,-19}, -{80,-29,-18}, -{80,-29,-17}, -{80,-29,-16}, -{80,-29,-15}, -{80,-29,-14}, -{80,-29,-13}, -{80,-29,-12}, -{80,-29,-11}, -{80,-29,-10}, -{80,-29,-9}, -{80,-29,-8}, -{80,-29,-7}, -{80,-29,-6}, -{80,-29,-5}, -{80,-29,-4}, -{80,-29,-3}, -{80,-29,-2}, -{80,-29,-1}, -{80,-29,0}, -{80,-29,1}, -{80,-29,2}, -{80,-29,3}, -{80,-29,4}, -{80,-29,5}, -{80,-29,6}, -{80,-29,7}, -{80,-29,8}, -{80,-29,9}, -{80,-29,10}, -{80,-29,11}, -{80,-29,12}, -{80,-29,13}, -{80,-29,14}, -{80,-29,15}, -{80,-29,16}, -{80,-29,17}, -{80,-29,18}, -{80,-29,19}, -{80,-29,20}, -{80,-29,21}, -{80,-29,22}, -{80,-29,23}, -{80,-29,24}, -{80,-29,25}, -{80,-29,26}, -{80,-29,27}, -{80,-29,28}, -{80,-29,29}, -{80,-29,30}, -{80,-29,31}, -{80,-29,32}, -{80,-29,33}, -{80,-29,34}, -{80,-29,35}, -{80,-29,36}, -{80,-29,37}, -{80,-29,38}, -{80,-29,39}, -{80,-29,40}, -{80,-29,41}, -{80,-29,42}, -{80,-29,43}, -{80,-29,44}, -{80,-29,45}, -{80,-29,46}, -{80,-29,47}, -{80,-29,48}, -{80,-29,49}, -{80,-29,50}, -{80,-29,51}, -{80,-29,52}, -{80,-29,53}, -{80,-29,54}, -{80,-29,55}, -{80,-29,56}, -{80,-29,57}, -{80,-29,58}, -{80,-29,59}, -{80,-29,60}, -{80,-29,61}, -{80,-29,62}, -{80,-29,63}, -{80,-29,64}, -{80,-29,65}, -{80,-29,66}, -{80,-29,67}, -{80,-29,68}, -{80,-29,69}, -{80,-29,70}, -{80,-29,71}, -{80,-29,72}, -{80,-29,73}, -{80,-29,74}, -{80,-29,75}, -{80,-29,76}, -{80,-29,77}, -{80,-29,78}, -{80,-29,79}, -{80,-28,-31}, -{80,-28,-30}, -{80,-28,-29}, -{80,-28,-28}, -{80,-28,-27}, -{80,-28,-26}, -{80,-28,-25}, -{80,-28,-24}, -{80,-28,-23}, -{80,-28,-22}, -{80,-28,-21}, -{80,-28,-20}, -{80,-28,-19}, -{80,-28,-18}, -{80,-28,-17}, -{80,-28,-16}, -{80,-28,-15}, -{80,-28,-14}, -{80,-28,-13}, -{80,-28,-12}, -{80,-28,-11}, -{80,-28,-10}, -{80,-28,-9}, -{80,-28,-8}, -{80,-28,-7}, -{80,-28,-6}, -{80,-28,-5}, -{80,-28,-4}, -{80,-28,-3}, -{80,-28,-2}, -{80,-28,-1}, -{80,-28,0}, -{80,-28,1}, -{80,-28,2}, -{80,-28,3}, -{80,-28,4}, -{80,-28,5}, -{80,-28,6}, -{80,-28,7}, -{80,-28,8}, -{80,-28,9}, -{80,-28,10}, -{80,-28,11}, -{80,-28,12}, -{80,-28,13}, -{80,-28,14}, -{80,-28,15}, -{80,-28,16}, -{80,-28,17}, -{80,-28,18}, -{80,-28,19}, -{80,-28,20}, -{80,-28,21}, -{80,-28,22}, -{80,-28,23}, -{80,-28,24}, -{80,-28,25}, -{80,-28,26}, -{80,-28,27}, -{80,-28,28}, -{80,-28,29}, -{80,-28,30}, -{80,-28,31}, -{80,-28,32}, -{80,-28,33}, -{80,-28,34}, -{80,-28,35}, -{80,-28,36}, -{80,-28,37}, -{80,-28,38}, -{80,-28,39}, -{80,-28,40}, -{80,-28,41}, -{80,-28,42}, -{80,-28,43}, -{80,-28,44}, -{80,-28,45}, -{80,-28,46}, -{80,-28,47}, -{80,-28,48}, -{80,-28,49}, -{80,-28,50}, -{80,-28,51}, -{80,-28,52}, -{80,-28,53}, -{80,-28,54}, -{80,-28,55}, -{80,-28,56}, -{80,-28,57}, -{80,-28,58}, -{80,-28,59}, -{80,-28,60}, -{80,-28,61}, -{80,-28,62}, -{80,-28,63}, -{80,-28,64}, -{80,-28,65}, -{80,-28,66}, -{80,-28,67}, -{80,-28,68}, -{80,-28,69}, -{80,-28,70}, -{80,-28,71}, -{80,-28,72}, -{80,-28,73}, -{80,-28,74}, -{80,-28,75}, -{80,-28,76}, -{80,-28,77}, -{80,-28,78}, -{80,-28,79}, -{80,-27,-31}, -{80,-27,-30}, -{80,-27,-29}, -{80,-27,-28}, -{80,-27,-27}, -{80,-27,-26}, -{80,-27,-25}, -{80,-27,-24}, -{80,-27,-23}, -{80,-27,-22}, -{80,-27,-21}, -{80,-27,-20}, -{80,-27,-19}, -{80,-27,-18}, -{80,-27,-17}, -{80,-27,-16}, -{80,-27,-15}, -{80,-27,-14}, -{80,-27,-13}, -{80,-27,-12}, -{80,-27,-11}, -{80,-27,-10}, -{80,-27,-9}, -{80,-27,-8}, -{80,-27,-7}, -{80,-27,-6}, -{80,-27,-5}, -{80,-27,-4}, -{80,-27,-3}, -{80,-27,-2}, -{80,-27,-1}, -{80,-27,0}, -{80,-27,1}, -{80,-27,2}, -{80,-27,3}, -{80,-27,4}, -{80,-27,5}, -{80,-27,6}, -{80,-27,7}, -{80,-27,8}, -{80,-27,9}, -{80,-27,10}, -{80,-27,11}, -{80,-27,12}, -{80,-27,13}, -{80,-27,14}, -{80,-27,15}, -{80,-27,16}, -{80,-27,17}, -{80,-27,18}, -{80,-27,19}, -{80,-27,20}, -{80,-27,21}, -{80,-27,22}, -{80,-27,23}, -{80,-27,24}, -{80,-27,25}, -{80,-27,26}, -{80,-27,27}, -{80,-27,28}, -{80,-27,29}, -{80,-27,30}, -{80,-27,31}, -{80,-27,32}, -{80,-27,33}, -{80,-27,34}, -{80,-27,35}, -{80,-27,36}, -{80,-27,37}, -{80,-27,38}, -{80,-27,39}, -{80,-27,40}, -{80,-27,41}, -{80,-27,42}, -{80,-27,43}, -{80,-27,44}, -{80,-27,45}, -{80,-27,46}, -{80,-27,47}, -{80,-27,48}, -{80,-27,49}, -{80,-27,50}, -{80,-27,51}, -{80,-27,52}, -{80,-27,53}, -{80,-27,54}, -{80,-27,55}, -{80,-27,56}, -{80,-27,57}, -{80,-27,58}, -{80,-27,59}, -{80,-27,60}, -{80,-27,61}, -{80,-27,62}, -{80,-27,63}, -{80,-27,64}, -{80,-27,65}, -{80,-27,66}, -{80,-27,67}, -{80,-27,68}, -{80,-27,69}, -{80,-27,70}, -{80,-27,71}, -{80,-27,72}, -{80,-27,73}, -{80,-27,74}, -{80,-27,75}, -{80,-27,76}, -{80,-27,77}, -{80,-27,78}, -{80,-27,79}, -{80,-26,-31}, -{80,-26,-30}, -{80,-26,-29}, -{80,-26,-28}, -{80,-26,-27}, -{80,-26,-26}, -{80,-26,-25}, -{80,-26,-24}, -{80,-26,-23}, -{80,-26,-22}, -{80,-26,-21}, -{80,-26,-20}, -{80,-26,-19}, -{80,-26,-18}, -{80,-26,-17}, -{80,-26,-16}, -{80,-26,-15}, -{80,-26,-14}, -{80,-26,-13}, -{80,-26,-12}, -{80,-26,-11}, -{80,-26,-10}, -{80,-26,-9}, -{80,-26,-8}, -{80,-26,-7}, -{80,-26,-6}, -{80,-26,-5}, -{80,-26,-4}, -{80,-26,-3}, -{80,-26,-2}, -{80,-26,-1}, -{80,-26,0}, -{80,-26,1}, -{80,-26,2}, -{80,-26,3}, -{80,-26,4}, -{80,-26,5}, -{80,-26,6}, -{80,-26,7}, -{80,-26,8}, -{80,-26,9}, -{80,-26,10}, -{80,-26,11}, -{80,-26,12}, -{80,-26,13}, -{80,-26,14}, -{80,-26,15}, -{80,-26,16}, -{80,-26,17}, -{80,-26,18}, -{80,-26,19}, -{80,-26,20}, -{80,-26,21}, -{80,-26,22}, -{80,-26,23}, -{80,-26,24}, -{80,-26,25}, -{80,-26,26}, -{80,-26,27}, -{80,-26,28}, -{80,-26,29}, -{80,-26,30}, -{80,-26,31}, -{80,-26,32}, -{80,-26,33}, -{80,-26,34}, -{80,-26,35}, -{80,-26,36}, -{80,-26,37}, -{80,-26,38}, -{80,-26,39}, -{80,-26,40}, -{80,-26,41}, -{80,-26,42}, -{80,-26,43}, -{80,-26,44}, -{80,-26,45}, -{80,-26,46}, -{80,-26,47}, -{80,-26,48}, -{80,-26,49}, -{80,-26,50}, -{80,-26,51}, -{80,-26,52}, -{80,-26,53}, -{80,-26,54}, -{80,-26,55}, -{80,-26,56}, -{80,-26,57}, -{80,-26,58}, -{80,-26,59}, -{80,-26,60}, -{80,-26,61}, -{80,-26,62}, -{80,-26,63}, -{80,-26,64}, -{80,-26,65}, -{80,-26,66}, -{80,-26,67}, -{80,-26,68}, -{80,-26,69}, -{80,-26,70}, -{80,-26,71}, -{80,-26,72}, -{80,-26,73}, -{80,-26,74}, -{80,-26,75}, -{80,-26,76}, -{80,-26,77}, -{80,-26,78}, -{80,-26,79}, -{80,-25,-31}, -{80,-25,-30}, -{80,-25,-29}, -{80,-25,-28}, -{80,-25,-27}, -{80,-25,-26}, -{80,-25,-25}, -{80,-25,-24}, -{80,-25,-23}, -{80,-25,-22}, -{80,-25,-21}, -{80,-25,-20}, -{80,-25,-19}, -{80,-25,-18}, -{80,-25,-17}, -{80,-25,-16}, -{80,-25,-15}, -{80,-25,-14}, -{80,-25,-13}, -{80,-25,-12}, -{80,-25,-11}, -{80,-25,-10}, -{80,-25,-9}, -{80,-25,-8}, -{80,-25,-7}, -{80,-25,-6}, -{80,-25,-5}, -{80,-25,-4}, -{80,-25,-3}, -{80,-25,-2}, -{80,-25,-1}, -{80,-25,0}, -{80,-25,1}, -{80,-25,2}, -{80,-25,3}, -{80,-25,4}, -{80,-25,5}, -{80,-25,6}, -{80,-25,7}, -{80,-25,8}, -{80,-25,9}, -{80,-25,10}, -{80,-25,11}, -{80,-25,12}, -{80,-25,13}, -{80,-25,14}, -{80,-25,15}, -{80,-25,16}, -{80,-25,17}, -{80,-25,18}, -{80,-25,19}, -{80,-25,20}, -{80,-25,21}, -{80,-25,22}, -{80,-25,23}, -{80,-25,24}, -{80,-25,25}, -{80,-25,26}, -{80,-25,27}, -{80,-25,28}, -{80,-25,29}, -{80,-25,30}, -{80,-25,31}, -{80,-25,32}, -{80,-25,33}, -{80,-25,34}, -{80,-25,35}, -{80,-25,36}, -{80,-25,37}, -{80,-25,38}, -{80,-25,39}, -{80,-25,40}, -{80,-25,41}, -{80,-25,42}, -{80,-25,43}, -{80,-25,44}, -{80,-25,45}, -{80,-25,46}, -{80,-25,47}, -{80,-25,48}, -{80,-25,49}, -{80,-25,50}, -{80,-25,51}, -{80,-25,52}, -{80,-25,53}, -{80,-25,54}, -{80,-25,55}, -{80,-25,56}, -{80,-25,57}, -{80,-25,58}, -{80,-25,59}, -{80,-25,60}, -{80,-25,61}, -{80,-25,62}, -{80,-25,63}, -{80,-25,64}, -{80,-25,65}, -{80,-25,66}, -{80,-25,67}, -{80,-25,68}, -{80,-25,69}, -{80,-25,70}, -{80,-25,71}, -{80,-25,72}, -{80,-25,73}, -{80,-25,74}, -{80,-25,75}, -{80,-25,76}, -{80,-25,77}, -{80,-25,78}, -{80,-25,79}, -{80,-24,-31}, -{80,-24,-30}, -{80,-24,-29}, -{80,-24,-28}, -{80,-24,-27}, -{80,-24,-26}, -{80,-24,-25}, -{80,-24,-24}, -{80,-24,-23}, -{80,-24,-22}, -{80,-24,-21}, -{80,-24,-20}, -{80,-24,-19}, -{80,-24,-18}, -{80,-24,-17}, -{80,-24,-16}, -{80,-24,-15}, -{80,-24,-14}, -{80,-24,-13}, -{80,-24,-12}, -{80,-24,-11}, -{80,-24,-10}, -{80,-24,-9}, -{80,-24,-8}, -{80,-24,-7}, -{80,-24,-6}, -{80,-24,-5}, -{80,-24,-4}, -{80,-24,-3}, -{80,-24,-2}, -{80,-24,-1}, -{80,-24,0}, -{80,-24,1}, -{80,-24,2}, -{80,-24,3}, -{80,-24,4}, -{80,-24,5}, -{80,-24,6}, -{80,-24,7}, -{80,-24,8}, -{80,-24,9}, -{80,-24,10}, -{80,-24,11}, -{80,-24,12}, -{80,-24,13}, -{80,-24,14}, -{80,-24,15}, -{80,-24,16}, -{80,-24,17}, -{80,-24,18}, -{80,-24,19}, -{80,-24,20}, -{80,-24,21}, -{80,-24,22}, -{80,-24,23}, -{80,-24,24}, -{80,-24,25}, -{80,-24,26}, -{80,-24,27}, -{80,-24,28}, -{80,-24,29}, -{80,-24,30}, -{80,-24,31}, -{80,-24,32}, -{80,-24,33}, -{80,-24,34}, -{80,-24,35}, -{80,-24,36}, -{80,-24,37}, -{80,-24,38}, -{80,-24,39}, -{80,-24,40}, -{80,-24,41}, -{80,-24,42}, -{80,-24,43}, -{80,-24,44}, -{80,-24,45}, -{80,-24,46}, -{80,-24,47}, -{80,-24,48}, -{80,-24,49}, -{80,-24,50}, -{80,-24,51}, -{80,-24,52}, -{80,-24,53}, -{80,-24,54}, -{80,-24,55}, -{80,-24,56}, -{80,-24,57}, -{80,-24,58}, -{80,-24,59}, -{80,-24,60}, -{80,-24,61}, -{80,-24,62}, -{80,-24,63}, -{80,-24,64}, -{80,-24,65}, -{80,-24,66}, -{80,-24,67}, -{80,-24,68}, -{80,-24,69}, -{80,-24,70}, -{80,-24,71}, -{80,-24,72}, -{80,-24,73}, -{80,-24,74}, -{80,-24,75}, -{80,-24,76}, -{80,-24,77}, -{80,-24,78}, -{80,-24,79}, -{80,-23,-31}, -{80,-23,-30}, -{80,-23,-29}, -{80,-23,-28}, -{80,-23,-27}, -{80,-23,-26}, -{80,-23,-25}, -{80,-23,-24}, -{80,-23,-23}, -{80,-23,-22}, -{80,-23,-21}, -{80,-23,-20}, -{80,-23,-19}, -{80,-23,-18}, -{80,-23,-17}, -{80,-23,-16}, -{80,-23,-15}, -{80,-23,-14}, -{80,-23,-13}, -{80,-23,-12}, -{80,-23,-11}, -{80,-23,-10}, -{80,-23,-9}, -{80,-23,-8}, -{80,-23,-7}, -{80,-23,-6}, -{80,-23,-5}, -{80,-23,-4}, -{80,-23,-3}, -{80,-23,-2}, -{80,-23,-1}, -{80,-23,0}, -{80,-23,1}, -{80,-23,2}, -{80,-23,3}, -{80,-23,4}, -{80,-23,5}, -{80,-23,6}, -{80,-23,7}, -{80,-23,8}, -{80,-23,9}, -{80,-23,10}, -{80,-23,11}, -{80,-23,12}, -{80,-23,13}, -{80,-23,14}, -{80,-23,15}, -{80,-23,16}, -{80,-23,17}, -{80,-23,18}, -{80,-23,19}, -{80,-23,20}, -{80,-23,21}, -{80,-23,22}, -{80,-23,23}, -{80,-23,24}, -{80,-23,25}, -{80,-23,26}, -{80,-23,27}, -{80,-23,28}, -{80,-23,29}, -{80,-23,30}, -{80,-23,31}, -{80,-23,32}, -{80,-23,33}, -{80,-23,34}, -{80,-23,35}, -{80,-23,36}, -{80,-23,37}, -{80,-23,38}, -{80,-23,39}, -{80,-23,40}, -{80,-23,41}, -{80,-23,42}, -{80,-23,43}, -{80,-23,44}, -{80,-23,45}, -{80,-23,46}, -{80,-23,47}, -{80,-23,48}, -{80,-23,49}, -{80,-23,50}, -{80,-23,51}, -{80,-23,52}, -{80,-23,53}, -{80,-23,54}, -{80,-23,55}, -{80,-23,56}, -{80,-23,57}, -{80,-23,58}, -{80,-23,59}, -{80,-23,60}, -{80,-23,61}, -{80,-23,62}, -{80,-23,63}, -{80,-23,64}, -{80,-23,65}, -{80,-23,66}, -{80,-23,67}, -{80,-23,68}, -{80,-23,69}, -{80,-23,70}, -{80,-23,71}, -{80,-23,72}, -{80,-23,73}, -{80,-23,74}, -{80,-23,75}, -{80,-23,76}, -{80,-23,77}, -{80,-23,78}, -{80,-23,79}, -{80,-23,80}, -{80,-22,-31}, -{80,-22,-30}, -{80,-22,-29}, -{80,-22,-28}, -{80,-22,-27}, -{80,-22,-26}, -{80,-22,-25}, -{80,-22,-24}, -{80,-22,-23}, -{80,-22,-22}, -{80,-22,-21}, -{80,-22,-20}, -{80,-22,-19}, -{80,-22,-18}, -{80,-22,-17}, -{80,-22,-16}, -{80,-22,-15}, -{80,-22,-14}, -{80,-22,-13}, -{80,-22,-12}, -{80,-22,-11}, -{80,-22,-10}, -{80,-22,-9}, -{80,-22,-8}, -{80,-22,-7}, -{80,-22,-6}, -{80,-22,-5}, -{80,-22,-4}, -{80,-22,-3}, -{80,-22,-2}, -{80,-22,-1}, -{80,-22,0}, -{80,-22,1}, -{80,-22,2}, -{80,-22,3}, -{80,-22,4}, -{80,-22,5}, -{80,-22,6}, -{80,-22,7}, -{80,-22,8}, -{80,-22,9}, -{80,-22,10}, -{80,-22,11}, -{80,-22,12}, -{80,-22,13}, -{80,-22,14}, -{80,-22,15}, -{80,-22,16}, -{80,-22,17}, -{80,-22,18}, -{80,-22,19}, -{80,-22,20}, -{80,-22,21}, -{80,-22,22}, -{80,-22,23}, -{80,-22,24}, -{80,-22,25}, -{80,-22,26}, -{80,-22,27}, -{80,-22,28}, -{80,-22,29}, -{80,-22,30}, -{80,-22,31}, -{80,-22,32}, -{80,-22,33}, -{80,-22,34}, -{80,-22,35}, -{80,-22,36}, -{80,-22,37}, -{80,-22,38}, -{80,-22,39}, -{80,-22,40}, -{80,-22,41}, -{80,-22,42}, -{80,-22,43}, -{80,-22,44}, -{80,-22,45}, -{80,-22,46}, -{80,-22,47}, -{80,-22,48}, -{80,-22,49}, -{80,-22,50}, -{80,-22,51}, -{80,-22,52}, -{80,-22,53}, -{80,-22,54}, -{80,-22,55}, -{80,-22,56}, -{80,-22,57}, -{80,-22,58}, -{80,-22,59}, -{80,-22,60}, -{80,-22,61}, -{80,-22,62}, -{80,-22,63}, -{80,-22,64}, -{80,-22,65}, -{80,-22,66}, -{80,-22,67}, -{80,-22,68}, -{80,-22,69}, -{80,-22,70}, -{80,-22,71}, -{80,-22,72}, -{80,-22,73}, -{80,-22,74}, -{80,-22,75}, -{80,-22,76}, -{80,-22,77}, -{80,-22,78}, -{80,-22,79}, -{80,-22,80}, -{80,-21,-31}, -{80,-21,-30}, -{80,-21,-29}, -{80,-21,-28}, -{80,-21,-27}, -{80,-21,-26}, -{80,-21,-25}, -{80,-21,-24}, -{80,-21,-23}, -{80,-21,-22}, -{80,-21,-21}, -{80,-21,-20}, -{80,-21,-19}, -{80,-21,-18}, -{80,-21,-17}, -{80,-21,-16}, -{80,-21,-15}, -{80,-21,-14}, -{80,-21,-13}, -{80,-21,-12}, -{80,-21,-11}, -{80,-21,-10}, -{80,-21,-9}, -{80,-21,-8}, -{80,-21,-7}, -{80,-21,-6}, -{80,-21,-5}, -{80,-21,-4}, -{80,-21,-3}, -{80,-21,-2}, -{80,-21,-1}, -{80,-21,0}, -{80,-21,1}, -{80,-21,2}, -{80,-21,3}, -{80,-21,4}, -{80,-21,5}, -{80,-21,6}, -{80,-21,7}, -{80,-21,8}, -{80,-21,9}, -{80,-21,10}, -{80,-21,11}, -{80,-21,12}, -{80,-21,13}, -{80,-21,14}, -{80,-21,15}, -{80,-21,16}, -{80,-21,17}, -{80,-21,18}, -{80,-21,19}, -{80,-21,20}, -{80,-21,21}, -{80,-21,22}, -{80,-21,23}, -{80,-21,24}, -{80,-21,25}, -{80,-21,26}, -{80,-21,27}, -{80,-21,28}, -{80,-21,29}, -{80,-21,30}, -{80,-21,31}, -{80,-21,32}, -{80,-21,33}, -{80,-21,34}, -{80,-21,35}, -{80,-21,36}, -{80,-21,37}, -{80,-21,38}, -{80,-21,39}, -{80,-21,40}, -{80,-21,41}, -{80,-21,42}, -{80,-21,43}, -{80,-21,44}, -{80,-21,45}, -{80,-21,46}, -{80,-21,47}, -{80,-21,48}, -{80,-21,49}, -{80,-21,50}, -{80,-21,51}, -{80,-21,52}, -{80,-21,53}, -{80,-21,54}, -{80,-21,55}, -{80,-21,56}, -{80,-21,57}, -{80,-21,58}, -{80,-21,59}, -{80,-21,60}, -{80,-21,61}, -{80,-21,62}, -{80,-21,63}, -{80,-21,64}, -{80,-21,65}, -{80,-21,66}, -{80,-21,67}, -{80,-21,68}, -{80,-21,69}, -{80,-21,70}, -{80,-21,71}, -{80,-21,72}, -{80,-21,73}, -{80,-21,74}, -{80,-21,75}, -{80,-21,76}, -{80,-21,77}, -{80,-21,78}, -{80,-21,79}, -{80,-21,80}, -{80,-20,-31}, -{80,-20,-30}, -{80,-20,-29}, -{80,-20,-28}, -{80,-20,-27}, -{80,-20,-26}, -{80,-20,-25}, -{80,-20,-24}, -{80,-20,-23}, -{80,-20,-22}, -{80,-20,-21}, -{80,-20,-20}, -{80,-20,-19}, -{80,-20,-18}, -{80,-20,-17}, -{80,-20,-16}, -{80,-20,-15}, -{80,-20,-14}, -{80,-20,-13}, -{80,-20,-12}, -{80,-20,-11}, -{80,-20,-10}, -{80,-20,-9}, -{80,-20,-8}, -{80,-20,-7}, -{80,-20,-6}, -{80,-20,-5}, -{80,-20,-4}, -{80,-20,-3}, -{80,-20,-2}, -{80,-20,-1}, -{80,-20,0}, -{80,-20,1}, -{80,-20,2}, -{80,-20,3}, -{80,-20,4}, -{80,-20,5}, -{80,-20,6}, -{80,-20,7}, -{80,-20,8}, -{80,-20,9}, -{80,-20,10}, -{80,-20,11}, -{80,-20,12}, -{80,-20,13}, -{80,-20,14}, -{80,-20,15}, -{80,-20,16}, -{80,-20,17}, -{80,-20,18}, -{80,-20,19}, -{80,-20,20}, -{80,-20,21}, -{80,-20,22}, -{80,-20,23}, -{80,-20,24}, -{80,-20,25}, -{80,-20,26}, -{80,-20,27}, -{80,-20,28}, -{80,-20,29}, -{80,-20,30}, -{80,-20,31}, -{80,-20,32}, -{80,-20,33}, -{80,-20,34}, -{80,-20,35}, -{80,-20,36}, -{80,-20,37}, -{80,-20,38}, -{80,-20,39}, -{80,-20,40}, -{80,-20,41}, -{80,-20,42}, -{80,-20,43}, -{80,-20,44}, -{80,-20,45}, -{80,-20,46}, -{80,-20,47}, -{80,-20,48}, -{80,-20,49}, -{80,-20,50}, -{80,-20,51}, -{80,-20,52}, -{80,-20,53}, -{80,-20,54}, -{80,-20,55}, -{80,-20,56}, -{80,-20,57}, -{80,-20,58}, -{80,-20,59}, -{80,-20,60}, -{80,-20,61}, -{80,-20,62}, -{80,-20,63}, -{80,-20,64}, -{80,-20,65}, -{80,-20,66}, -{80,-20,67}, -{80,-20,68}, -{80,-20,69}, -{80,-20,70}, -{80,-20,71}, -{80,-20,72}, -{80,-20,73}, -{80,-20,74}, -{80,-20,75}, -{80,-20,76}, -{80,-20,77}, -{80,-20,78}, -{80,-20,79}, -{80,-20,80}, -{80,-19,-30}, -{80,-19,-29}, -{80,-19,-28}, -{80,-19,-27}, -{80,-19,-26}, -{80,-19,-25}, -{80,-19,-24}, -{80,-19,-23}, -{80,-19,-22}, -{80,-19,-21}, -{80,-19,-20}, -{80,-19,-19}, -{80,-19,-18}, -{80,-19,-17}, -{80,-19,-16}, -{80,-19,-15}, -{80,-19,-14}, -{80,-19,-13}, -{80,-19,-12}, -{80,-19,-11}, -{80,-19,-10}, -{80,-19,-9}, -{80,-19,-8}, -{80,-19,-7}, -{80,-19,-6}, -{80,-19,-5}, -{80,-19,-4}, -{80,-19,-3}, -{80,-19,-2}, -{80,-19,-1}, -{80,-19,0}, -{80,-19,1}, -{80,-19,2}, -{80,-19,3}, -{80,-19,4}, -{80,-19,5}, -{80,-19,6}, -{80,-19,7}, -{80,-19,8}, -{80,-19,9}, -{80,-19,10}, -{80,-19,11}, -{80,-19,12}, -{80,-19,13}, -{80,-19,14}, -{80,-19,15}, -{80,-19,16}, -{80,-19,17}, -{80,-19,18}, -{80,-19,19}, -{80,-19,20}, -{80,-19,21}, -{80,-19,22}, -{80,-19,23}, -{80,-19,24}, -{80,-19,25}, -{80,-19,26}, -{80,-19,27}, -{80,-19,28}, -{80,-19,29}, -{80,-19,30}, -{80,-19,31}, -{80,-19,32}, -{80,-19,33}, -{80,-19,34}, -{80,-19,35}, -{80,-19,36}, -{80,-19,37}, -{80,-19,38}, -{80,-19,39}, -{80,-19,40}, -{80,-19,41}, -{80,-19,42}, -{80,-19,43}, -{80,-19,44}, -{80,-19,45}, -{80,-19,46}, -{80,-19,47}, -{80,-19,48}, -{80,-19,49}, -{80,-19,50}, -{80,-19,51}, -{80,-19,52}, -{80,-19,53}, -{80,-19,54}, -{80,-19,55}, -{80,-19,56}, -{80,-19,57}, -{80,-19,58}, -{80,-19,59}, -{80,-19,60}, -{80,-19,61}, -{80,-19,62}, -{80,-19,63}, -{80,-19,64}, -{80,-19,65}, -{80,-19,66}, -{80,-19,67}, -{80,-19,68}, -{80,-19,69}, -{80,-19,70}, -{80,-19,71}, -{80,-19,72}, -{80,-19,73}, -{80,-19,74}, -{80,-19,75}, -{80,-19,76}, -{80,-19,77}, -{80,-19,78}, -{80,-19,79}, -{80,-19,80}, -{80,-18,-30}, -{80,-18,-29}, -{80,-18,-28}, -{80,-18,-27}, -{80,-18,-26}, -{80,-18,-25}, -{80,-18,-24}, -{80,-18,-23}, -{80,-18,-22}, -{80,-18,-21}, -{80,-18,-20}, -{80,-18,-19}, -{80,-18,-18}, -{80,-18,-17}, -{80,-18,-16}, -{80,-18,-15}, -{80,-18,-14}, -{80,-18,-13}, -{80,-18,-12}, -{80,-18,-11}, -{80,-18,-10}, -{80,-18,-9}, -{80,-18,-8}, -{80,-18,-7}, -{80,-18,-6}, -{80,-18,-5}, -{80,-18,-4}, -{80,-18,-3}, -{80,-18,-2}, -{80,-18,-1}, -{80,-18,0}, -{80,-18,1}, -{80,-18,2}, -{80,-18,3}, -{80,-18,4}, -{80,-18,5}, -{80,-18,6}, -{80,-18,7}, -{80,-18,8}, -{80,-18,9}, -{80,-18,10}, -{80,-18,11}, -{80,-18,12}, -{80,-18,13}, -{80,-18,14}, -{80,-18,15}, -{80,-18,16}, -{80,-18,17}, -{80,-18,18}, -{80,-18,19}, -{80,-18,20}, -{80,-18,21}, -{80,-18,22}, -{80,-18,23}, -{80,-18,24}, -{80,-18,25}, -{80,-18,26}, -{80,-18,27}, -{80,-18,28}, -{80,-18,29}, -{80,-18,30}, -{80,-18,31}, -{80,-18,32}, -{80,-18,33}, -{80,-18,34}, -{80,-18,35}, -{80,-18,36}, -{80,-18,37}, -{80,-18,38}, -{80,-18,39}, -{80,-18,40}, -{80,-18,41}, -{80,-18,42}, -{80,-18,43}, -{80,-18,44}, -{80,-18,45}, -{80,-18,46}, -{80,-18,47}, -{80,-18,48}, -{80,-18,49}, -{80,-18,50}, -{80,-18,51}, -{80,-18,52}, -{80,-18,53}, -{80,-18,54}, -{80,-18,55}, -{80,-18,56}, -{80,-18,57}, -{80,-18,58}, -{80,-18,59}, -{80,-18,60}, -{80,-18,61}, -{80,-18,62}, -{80,-18,63}, -{80,-18,64}, -{80,-18,65}, -{80,-18,66}, -{80,-18,67}, -{80,-18,68}, -{80,-18,69}, -{80,-18,70}, -{80,-18,71}, -{80,-18,72}, -{80,-18,73}, -{80,-18,74}, -{80,-18,75}, -{80,-18,76}, -{80,-18,77}, -{80,-18,78}, -{80,-18,79}, -{80,-18,80}, -{80,-17,-30}, -{80,-17,-29}, -{80,-17,-28}, -{80,-17,-27}, -{80,-17,-26}, -{80,-17,-25}, -{80,-17,-24}, -{80,-17,-23}, -{80,-17,-22}, -{80,-17,-21}, -{80,-17,-20}, -{80,-17,-19}, -{80,-17,-18}, -{80,-17,-17}, -{80,-17,-16}, -{80,-17,-15}, -{80,-17,-14}, -{80,-17,-13}, -{80,-17,-12}, -{80,-17,-11}, -{80,-17,-10}, -{80,-17,-9}, -{80,-17,-8}, -{80,-17,-7}, -{80,-17,-6}, -{80,-17,-5}, -{80,-17,-4}, -{80,-17,-3}, -{80,-17,-2}, -{80,-17,-1}, -{80,-17,0}, -{80,-17,1}, -{80,-17,2}, -{80,-17,3}, -{80,-17,4}, -{80,-17,5}, -{80,-17,6}, -{80,-17,7}, -{80,-17,8}, -{80,-17,9}, -{80,-17,10}, -{80,-17,11}, -{80,-17,12}, -{80,-17,13}, -{80,-17,14}, -{80,-17,15}, -{80,-17,16}, -{80,-17,17}, -{80,-17,18}, -{80,-17,19}, -{80,-17,20}, -{80,-17,21}, -{80,-17,22}, -{80,-17,23}, -{80,-17,24}, -{80,-17,25}, -{80,-17,26}, -{80,-17,27}, -{80,-17,28}, -{80,-17,29}, -{80,-17,30}, -{80,-17,31}, -{80,-17,32}, -{80,-17,33}, -{80,-17,34}, -{80,-17,35}, -{80,-17,36}, -{80,-17,37}, -{80,-17,38}, -{80,-17,39}, -{80,-17,40}, -{80,-17,41}, -{80,-17,42}, -{80,-17,43}, -{80,-17,44}, -{80,-17,45}, -{80,-17,46}, -{80,-17,47}, -{80,-17,48}, -{80,-17,49}, -{80,-17,50}, -{80,-17,51}, -{80,-17,52}, -{80,-17,53}, -{80,-17,54}, -{80,-17,55}, -{80,-17,56}, -{80,-17,57}, -{80,-17,58}, -{80,-17,59}, -{80,-17,60}, -{80,-17,61}, -{80,-17,62}, -{80,-17,63}, -{80,-17,64}, -{80,-17,65}, -{80,-17,66}, -{80,-17,67}, -{80,-17,68}, -{80,-17,69}, -{80,-17,70}, -{80,-17,71}, -{80,-17,72}, -{80,-17,73}, -{80,-17,74}, -{80,-17,75}, -{80,-17,76}, -{80,-17,77}, -{80,-17,78}, -{80,-17,79}, -{80,-17,80}, -{80,-16,-30}, -{80,-16,-29}, -{80,-16,-28}, -{80,-16,-27}, -{80,-16,-26}, -{80,-16,-25}, -{80,-16,-24}, -{80,-16,-23}, -{80,-16,-22}, -{80,-16,-21}, -{80,-16,-20}, -{80,-16,-19}, -{80,-16,-18}, -{80,-16,-17}, -{80,-16,-16}, -{80,-16,-15}, -{80,-16,-14}, -{80,-16,-13}, -{80,-16,-12}, -{80,-16,-11}, -{80,-16,-10}, -{80,-16,-9}, -{80,-16,-8}, -{80,-16,-7}, -{80,-16,-6}, -{80,-16,-5}, -{80,-16,-4}, -{80,-16,-3}, -{80,-16,-2}, -{80,-16,-1}, -{80,-16,0}, -{80,-16,1}, -{80,-16,2}, -{80,-16,3}, -{80,-16,4}, -{80,-16,5}, -{80,-16,6}, -{80,-16,7}, -{80,-16,8}, -{80,-16,9}, -{80,-16,10}, -{80,-16,11}, -{80,-16,12}, -{80,-16,13}, -{80,-16,14}, -{80,-16,15}, -{80,-16,16}, -{80,-16,17}, -{80,-16,18}, -{80,-16,19}, -{80,-16,20}, -{80,-16,21}, -{80,-16,22}, -{80,-16,23}, -{80,-16,24}, -{80,-16,25}, -{80,-16,26}, -{80,-16,27}, -{80,-16,28}, -{80,-16,29}, -{80,-16,30}, -{80,-16,31}, -{80,-16,32}, -{80,-16,33}, -{80,-16,34}, -{80,-16,35}, -{80,-16,36}, -{80,-16,37}, -{80,-16,38}, -{80,-16,39}, -{80,-16,40}, -{80,-16,41}, -{80,-16,42}, -{80,-16,43}, -{80,-16,44}, -{80,-16,45}, -{80,-16,46}, -{80,-16,47}, -{80,-16,48}, -{80,-16,49}, -{80,-16,50}, -{80,-16,51}, -{80,-16,52}, -{80,-16,53}, -{80,-16,54}, -{80,-16,55}, -{80,-16,56}, -{80,-16,57}, -{80,-16,58}, -{80,-16,59}, -{80,-16,60}, -{80,-16,61}, -{80,-16,62}, -{80,-16,63}, -{80,-16,64}, -{80,-16,65}, -{80,-16,66}, -{80,-16,67}, -{80,-16,68}, -{80,-16,69}, -{80,-16,70}, -{80,-16,71}, -{80,-16,72}, -{80,-16,73}, -{80,-16,74}, -{80,-16,75}, -{80,-16,76}, -{80,-16,77}, -{80,-16,78}, -{80,-16,79}, -{80,-16,80}, -{80,-15,-30}, -{80,-15,-29}, -{80,-15,-28}, -{80,-15,-27}, -{80,-15,-26}, -{80,-15,-25}, -{80,-15,-24}, -{80,-15,-23}, -{80,-15,-22}, -{80,-15,-21}, -{80,-15,-20}, -{80,-15,-19}, -{80,-15,-18}, -{80,-15,-17}, -{80,-15,-16}, -{80,-15,-15}, -{80,-15,-14}, -{80,-15,-13}, -{80,-15,-12}, -{80,-15,-11}, -{80,-15,-10}, -{80,-15,-9}, -{80,-15,-8}, -{80,-15,-7}, -{80,-15,-6}, -{80,-15,-5}, -{80,-15,-4}, -{80,-15,-3}, -{80,-15,-2}, -{80,-15,-1}, -{80,-15,0}, -{80,-15,1}, -{80,-15,2}, -{80,-15,3}, -{80,-15,4}, -{80,-15,5}, -{80,-15,6}, -{80,-15,7}, -{80,-15,8}, -{80,-15,9}, -{80,-15,10}, -{80,-15,11}, -{80,-15,12}, -{80,-15,13}, -{80,-15,14}, -{80,-15,15}, -{80,-15,16}, -{80,-15,17}, -{80,-15,18}, -{80,-15,19}, -{80,-15,20}, -{80,-15,21}, -{80,-15,22}, -{80,-15,23}, -{80,-15,24}, -{80,-15,25}, -{80,-15,26}, -{80,-15,27}, -{80,-15,28}, -{80,-15,29}, -{80,-15,30}, -{80,-15,31}, -{80,-15,32}, -{80,-15,33}, -{80,-15,34}, -{80,-15,35}, -{80,-15,36}, -{80,-15,37}, -{80,-15,38}, -{80,-15,39}, -{80,-15,40}, -{80,-15,41}, -{80,-15,42}, -{80,-15,43}, -{80,-15,44}, -{80,-15,45}, -{80,-15,46}, -{80,-15,47}, -{80,-15,48}, -{80,-15,49}, -{80,-15,50}, -{80,-15,51}, -{80,-15,52}, -{80,-15,53}, -{80,-15,54}, -{80,-15,55}, -{80,-15,56}, -{80,-15,57}, -{80,-15,58}, -{80,-15,59}, -{80,-15,60}, -{80,-15,61}, -{80,-15,62}, -{80,-15,63}, -{80,-15,64}, -{80,-15,65}, -{80,-15,66}, -{80,-15,67}, -{80,-15,68}, -{80,-15,69}, -{80,-15,70}, -{80,-15,71}, -{80,-15,72}, -{80,-15,73}, -{80,-15,74}, -{80,-15,75}, -{80,-15,76}, -{80,-15,77}, -{80,-15,78}, -{80,-15,79}, -{80,-15,80}, -{80,-14,-30}, -{80,-14,-29}, -{80,-14,-28}, -{80,-14,-27}, -{80,-14,-26}, -{80,-14,-25}, -{80,-14,-24}, -{80,-14,-23}, -{80,-14,-22}, -{80,-14,-21}, -{80,-14,-20}, -{80,-14,-19}, -{80,-14,-18}, -{80,-14,-17}, -{80,-14,-16}, -{80,-14,-15}, -{80,-14,-14}, -{80,-14,-13}, -{80,-14,-12}, -{80,-14,-11}, -{80,-14,-10}, -{80,-14,-9}, -{80,-14,-8}, -{80,-14,-7}, -{80,-14,-6}, -{80,-14,-5}, -{80,-14,-4}, -{80,-14,-3}, -{80,-14,-2}, -{80,-14,-1}, -{80,-14,0}, -{80,-14,1}, -{80,-14,2}, -{80,-14,3}, -{80,-14,4}, -{80,-14,5}, -{80,-14,6}, -{80,-14,7}, -{80,-14,8}, -{80,-14,9}, -{80,-14,10}, -{80,-14,11}, -{80,-14,12}, -{80,-14,13}, -{80,-14,14}, -{80,-14,15}, -{80,-14,16}, -{80,-14,17}, -{80,-14,18}, -{80,-14,19}, -{80,-14,20}, -{80,-14,21}, -{80,-14,22}, -{80,-14,23}, -{80,-14,24}, -{80,-14,25}, -{80,-14,26}, -{80,-14,27}, -{80,-14,28}, -{80,-14,29}, -{80,-14,30}, -{80,-14,31}, -{80,-14,32}, -{80,-14,33}, -{80,-14,34}, -{80,-14,35}, -{80,-14,36}, -{80,-14,37}, -{80,-14,38}, -{80,-14,39}, -{80,-14,40}, -{80,-14,41}, -{80,-14,42}, -{80,-14,43}, -{80,-14,44}, -{80,-14,45}, -{80,-14,46}, -{80,-14,47}, -{80,-14,48}, -{80,-14,49}, -{80,-14,50}, -{80,-14,51}, -{80,-14,52}, -{80,-14,53}, -{80,-14,54}, -{80,-14,55}, -{80,-14,56}, -{80,-14,57}, -{80,-14,58}, -{80,-14,59}, -{80,-14,60}, -{80,-14,61}, -{80,-14,62}, -{80,-14,63}, -{80,-14,64}, -{80,-14,65}, -{80,-14,66}, -{80,-14,67}, -{80,-14,68}, -{80,-14,69}, -{80,-14,70}, -{80,-14,71}, -{80,-14,72}, -{80,-14,73}, -{80,-14,74}, -{80,-14,75}, -{80,-14,76}, -{80,-14,77}, -{80,-14,78}, -{80,-14,79}, -{80,-14,80}, -{80,-13,-30}, -{80,-13,-29}, -{80,-13,-28}, -{80,-13,-27}, -{80,-13,-26}, -{80,-13,-25}, -{80,-13,-24}, -{80,-13,-23}, -{80,-13,-22}, -{80,-13,-21}, -{80,-13,-20}, -{80,-13,-19}, -{80,-13,-18}, -{80,-13,-17}, -{80,-13,-16}, -{80,-13,-15}, -{80,-13,-14}, -{80,-13,-13}, -{80,-13,-12}, -{80,-13,-11}, -{80,-13,-10}, -{80,-13,-9}, -{80,-13,-8}, -{80,-13,-7}, -{80,-13,-6}, -{80,-13,-5}, -{80,-13,-4}, -{80,-13,-3}, -{80,-13,-2}, -{80,-13,-1}, -{80,-13,0}, -{80,-13,1}, -{80,-13,2}, -{80,-13,3}, -{80,-13,4}, -{80,-13,5}, -{80,-13,6}, -{80,-13,7}, -{80,-13,8}, -{80,-13,9}, -{80,-13,10}, -{80,-13,11}, -{80,-13,12}, -{80,-13,13}, -{80,-13,14}, -{80,-13,15}, -{80,-13,16}, -{80,-13,17}, -{80,-13,18}, -{80,-13,19}, -{80,-13,20}, -{80,-13,21}, -{80,-13,22}, -{80,-13,23}, -{80,-13,24}, -{80,-13,25}, -{80,-13,26}, -{80,-13,27}, -{80,-13,28}, -{80,-13,29}, -{80,-13,30}, -{80,-13,31}, -{80,-13,32}, -{80,-13,33}, -{80,-13,34}, -{80,-13,35}, -{80,-13,36}, -{80,-13,37}, -{80,-13,38}, -{80,-13,39}, -{80,-13,40}, -{80,-13,41}, -{80,-13,42}, -{80,-13,43}, -{80,-13,44}, -{80,-13,45}, -{80,-13,46}, -{80,-13,47}, -{80,-13,48}, -{80,-13,49}, -{80,-13,50}, -{80,-13,51}, -{80,-13,52}, -{80,-13,53}, -{80,-13,54}, -{80,-13,55}, -{80,-13,56}, -{80,-13,57}, -{80,-13,58}, -{80,-13,59}, -{80,-13,60}, -{80,-13,61}, -{80,-13,62}, -{80,-13,63}, -{80,-13,64}, -{80,-13,65}, -{80,-13,66}, -{80,-13,67}, -{80,-13,68}, -{80,-13,69}, -{80,-13,70}, -{80,-13,71}, -{80,-13,72}, -{80,-13,73}, -{80,-13,74}, -{80,-13,75}, -{80,-13,76}, -{80,-13,77}, -{80,-13,78}, -{80,-13,79}, -{80,-13,80}, -{80,-12,-30}, -{80,-12,-29}, -{80,-12,-28}, -{80,-12,-27}, -{80,-12,-26}, -{80,-12,-25}, -{80,-12,-24}, -{80,-12,-23}, -{80,-12,-22}, -{80,-12,-21}, -{80,-12,-20}, -{80,-12,-19}, -{80,-12,-18}, -{80,-12,-17}, -{80,-12,-16}, -{80,-12,-15}, -{80,-12,-14}, -{80,-12,-13}, -{80,-12,-12}, -{80,-12,-11}, -{80,-12,-10}, -{80,-12,-9}, -{80,-12,-8}, -{80,-12,-7}, -{80,-12,-6}, -{80,-12,-5}, -{80,-12,-4}, -{80,-12,-3}, -{80,-12,-2}, -{80,-12,-1}, -{80,-12,0}, -{80,-12,1}, -{80,-12,2}, -{80,-12,3}, -{80,-12,4}, -{80,-12,5}, -{80,-12,6}, -{80,-12,7}, -{80,-12,8}, -{80,-12,9}, -{80,-12,10}, -{80,-12,11}, -{80,-12,12}, -{80,-12,13}, -{80,-12,14}, -{80,-12,15}, -{80,-12,16}, -{80,-12,17}, -{80,-12,18}, -{80,-12,19}, -{80,-12,20}, -{80,-12,21}, -{80,-12,22}, -{80,-12,23}, -{80,-12,24}, -{80,-12,25}, -{80,-12,26}, -{80,-12,27}, -{80,-12,28}, -{80,-12,29}, -{80,-12,30}, -{80,-12,31}, -{80,-12,32}, -{80,-12,33}, -{80,-12,34}, -{80,-12,35}, -{80,-12,36}, -{80,-12,37}, -{80,-12,38}, -{80,-12,39}, -{80,-12,40}, -{80,-12,41}, -{80,-12,42}, -{80,-12,43}, -{80,-12,44}, -{80,-12,45}, -{80,-12,46}, -{80,-12,47}, -{80,-12,48}, -{80,-12,49}, -{80,-12,50}, -{80,-12,51}, -{80,-12,52}, -{80,-12,53}, -{80,-12,54}, -{80,-12,55}, -{80,-12,56}, -{80,-12,57}, -{80,-12,58}, -{80,-12,59}, -{80,-12,60}, -{80,-12,61}, -{80,-12,62}, -{80,-12,63}, -{80,-12,64}, -{80,-12,65}, -{80,-12,66}, -{80,-12,67}, -{80,-12,68}, -{80,-12,69}, -{80,-12,70}, -{80,-12,71}, -{80,-12,72}, -{80,-12,73}, -{80,-12,74}, -{80,-12,75}, -{80,-12,76}, -{80,-12,77}, -{80,-12,78}, -{80,-12,79}, -{80,-12,80}, -{80,-11,-30}, -{80,-11,-29}, -{80,-11,-28}, -{80,-11,-27}, -{80,-11,-26}, -{80,-11,-25}, -{80,-11,-24}, -{80,-11,-23}, -{80,-11,-22}, -{80,-11,-21}, -{80,-11,-20}, -{80,-11,-19}, -{80,-11,-18}, -{80,-11,-17}, -{80,-11,-16}, -{80,-11,-15}, -{80,-11,-14}, -{80,-11,-13}, -{80,-11,-12}, -{80,-11,-11}, -{80,-11,-10}, -{80,-11,-9}, -{80,-11,-8}, -{80,-11,-7}, -{80,-11,-6}, -{80,-11,-5}, -{80,-11,-4}, -{80,-11,-3}, -{80,-11,-2}, -{80,-11,-1}, -{80,-11,0}, -{80,-11,1}, -{80,-11,2}, -{80,-11,3}, -{80,-11,4}, -{80,-11,5}, -{80,-11,6}, -{80,-11,7}, -{80,-11,8}, -{80,-11,9}, -{80,-11,10}, -{80,-11,11}, -{80,-11,12}, -{80,-11,13}, -{80,-11,14}, -{80,-11,15}, -{80,-11,16}, -{80,-11,17}, -{80,-11,18}, -{80,-11,19}, -{80,-11,20}, -{80,-11,21}, -{80,-11,22}, -{80,-11,23}, -{80,-11,24}, -{80,-11,25}, -{80,-11,26}, -{80,-11,27}, -{80,-11,28}, -{80,-11,29}, -{80,-11,30}, -{80,-11,31}, -{80,-11,32}, -{80,-11,33}, -{80,-11,34}, -{80,-11,35}, -{80,-11,36}, -{80,-11,37}, -{80,-11,38}, -{80,-11,39}, -{80,-11,40}, -{80,-11,41}, -{80,-11,42}, -{80,-11,43}, -{80,-11,44}, -{80,-11,45}, -{80,-11,46}, -{80,-11,47}, -{80,-11,48}, -{80,-11,49}, -{80,-11,50}, -{80,-11,51}, -{80,-11,52}, -{80,-11,53}, -{80,-11,54}, -{80,-11,55}, -{80,-11,56}, -{80,-11,57}, -{80,-11,58}, -{80,-11,59}, -{80,-11,60}, -{80,-11,61}, -{80,-11,62}, -{80,-11,63}, -{80,-11,64}, -{80,-11,65}, -{80,-11,66}, -{80,-11,67}, -{80,-11,68}, -{80,-11,69}, -{80,-11,70}, -{80,-11,71}, -{80,-11,72}, -{80,-11,73}, -{80,-11,74}, -{80,-11,75}, -{80,-11,76}, -{80,-11,77}, -{80,-11,78}, -{80,-11,79}, -{80,-11,80}, -{80,-10,-30}, -{80,-10,-29}, -{80,-10,-28}, -{80,-10,-27}, -{80,-10,-26}, -{80,-10,-25}, -{80,-10,-24}, -{80,-10,-23}, -{80,-10,-22}, -{80,-10,-21}, -{80,-10,-20}, -{80,-10,-19}, -{80,-10,-18}, -{80,-10,-17}, -{80,-10,-16}, -{80,-10,-15}, -{80,-10,-14}, -{80,-10,-13}, -{80,-10,-12}, -{80,-10,-11}, -{80,-10,-10}, -{80,-10,-9}, -{80,-10,-8}, -{80,-10,-7}, -{80,-10,-6}, -{80,-10,-5}, -{80,-10,-4}, -{80,-10,-3}, -{80,-10,-2}, -{80,-10,-1}, -{80,-10,0}, -{80,-10,1}, -{80,-10,2}, -{80,-10,3}, -{80,-10,4}, -{80,-10,5}, -{80,-10,6}, -{80,-10,7}, -{80,-10,8}, -{80,-10,9}, -{80,-10,10}, -{80,-10,11}, -{80,-10,12}, -{80,-10,13}, -{80,-10,14}, -{80,-10,15}, -{80,-10,16}, -{80,-10,17}, -{80,-10,18}, -{80,-10,19}, -{80,-10,20}, -{80,-10,21}, -{80,-10,22}, -{80,-10,23}, -{80,-10,24}, -{80,-10,25}, -{80,-10,26}, -{80,-10,27}, -{80,-10,28}, -{80,-10,29}, -{80,-10,30}, -{80,-10,31}, -{80,-10,32}, -{80,-10,33}, -{80,-10,34}, -{80,-10,35}, -{80,-10,36}, -{80,-10,37}, -{80,-10,38}, -{80,-10,39}, -{80,-10,40}, -{80,-10,41}, -{80,-10,42}, -{80,-10,43}, -{80,-10,44}, -{80,-10,45}, -{80,-10,46}, -{80,-10,47}, -{80,-10,48}, -{80,-10,49}, -{80,-10,50}, -{80,-10,51}, -{80,-10,52}, -{80,-10,53}, -{80,-10,54}, -{80,-10,55}, -{80,-10,56}, -{80,-10,57}, -{80,-10,58}, -{80,-10,59}, -{80,-10,60}, -{80,-10,61}, -{80,-10,62}, -{80,-10,63}, -{80,-10,64}, -{80,-10,65}, -{80,-10,66}, -{80,-10,67}, -{80,-10,68}, -{80,-10,69}, -{80,-10,70}, -{80,-10,71}, -{80,-10,72}, -{80,-10,73}, -{80,-10,74}, -{80,-10,75}, -{80,-10,76}, -{80,-10,77}, -{80,-10,78}, -{80,-10,79}, -{80,-10,80}, -{80,-9,-30}, -{80,-9,-29}, -{80,-9,-28}, -{80,-9,-27}, -{80,-9,-26}, -{80,-9,-25}, -{80,-9,-24}, -{80,-9,-23}, -{80,-9,-22}, -{80,-9,-21}, -{80,-9,-20}, -{80,-9,-19}, -{80,-9,-18}, -{80,-9,-17}, -{80,-9,-16}, -{80,-9,-15}, -{80,-9,-14}, -{80,-9,-13}, -{80,-9,-12}, -{80,-9,-11}, -{80,-9,-10}, -{80,-9,-9}, -{80,-9,-8}, -{80,-9,-7}, -{80,-9,-6}, -{80,-9,-5}, -{80,-9,-4}, -{80,-9,-3}, -{80,-9,-2}, -{80,-9,-1}, -{80,-9,0}, -{80,-9,1}, -{80,-9,2}, -{80,-9,3}, -{80,-9,4}, -{80,-9,5}, -{80,-9,6}, -{80,-9,7}, -{80,-9,8}, -{80,-9,9}, -{80,-9,10}, -{80,-9,11}, -{80,-9,12}, -{80,-9,13}, -{80,-9,14}, -{80,-9,15}, -{80,-9,16}, -{80,-9,17}, -{80,-9,18}, -{80,-9,19}, -{80,-9,20}, -{80,-9,21}, -{80,-9,22}, -{80,-9,23}, -{80,-9,24}, -{80,-9,25}, -{80,-9,26}, -{80,-9,27}, -{80,-9,28}, -{80,-9,29}, -{80,-9,30}, -{80,-9,31}, -{80,-9,32}, -{80,-9,33}, -{80,-9,34}, -{80,-9,35}, -{80,-9,36}, -{80,-9,37}, -{80,-9,38}, -{80,-9,39}, -{80,-9,40}, -{80,-9,41}, -{80,-9,42}, -{80,-9,43}, -{80,-9,44}, -{80,-9,45}, -{80,-9,46}, -{80,-9,47}, -{80,-9,48}, -{80,-9,49}, -{80,-9,50}, -{80,-9,51}, -{80,-9,52}, -{80,-9,53}, -{80,-9,54}, -{80,-9,55}, -{80,-9,56}, -{80,-9,57}, -{80,-9,58}, -{80,-9,59}, -{80,-9,60}, -{80,-9,61}, -{80,-9,62}, -{80,-9,63}, -{80,-9,64}, -{80,-9,65}, -{80,-9,66}, -{80,-9,67}, -{80,-9,68}, -{80,-9,69}, -{80,-9,70}, -{80,-9,71}, -{80,-9,72}, -{80,-9,73}, -{80,-9,74}, -{80,-9,75}, -{80,-9,76}, -{80,-9,77}, -{80,-9,78}, -{80,-9,79}, -{80,-9,80}, -{80,-8,-30}, -{80,-8,-29}, -{80,-8,-28}, -{80,-8,-27}, -{80,-8,-26}, -{80,-8,-25}, -{80,-8,-24}, -{80,-8,-23}, -{80,-8,-22}, -{80,-8,-21}, -{80,-8,-20}, -{80,-8,-19}, -{80,-8,-18}, -{80,-8,-17}, -{80,-8,-16}, -{80,-8,-15}, -{80,-8,-14}, -{80,-8,-13}, -{80,-8,-12}, -{80,-8,-11}, -{80,-8,-10}, -{80,-8,-9}, -{80,-8,-8}, -{80,-8,-7}, -{80,-8,-6}, -{80,-8,-5}, -{80,-8,-4}, -{80,-8,-3}, -{80,-8,-2}, -{80,-8,-1}, -{80,-8,0}, -{80,-8,1}, -{80,-8,2}, -{80,-8,3}, -{80,-8,4}, -{80,-8,5}, -{80,-8,6}, -{80,-8,7}, -{80,-8,8}, -{80,-8,9}, -{80,-8,10}, -{80,-8,11}, -{80,-8,12}, -{80,-8,13}, -{80,-8,14}, -{80,-8,15}, -{80,-8,16}, -{80,-8,17}, -{80,-8,18}, -{80,-8,19}, -{80,-8,20}, -{80,-8,21}, -{80,-8,22}, -{80,-8,23}, -{80,-8,24}, -{80,-8,25}, -{80,-8,26}, -{80,-8,27}, -{80,-8,28}, -{80,-8,29}, -{80,-8,30}, -{80,-8,31}, -{80,-8,32}, -{80,-8,33}, -{80,-8,34}, -{80,-8,35}, -{80,-8,36}, -{80,-8,37}, -{80,-8,38}, -{80,-8,39}, -{80,-8,40}, -{80,-8,41}, -{80,-8,42}, -{80,-8,43}, -{80,-8,44}, -{80,-8,45}, -{80,-8,46}, -{80,-8,47}, -{80,-8,48}, -{80,-8,49}, -{80,-8,50}, -{80,-8,51}, -{80,-8,52}, -{80,-8,53}, -{80,-8,54}, -{80,-8,55}, -{80,-8,56}, -{80,-8,57}, -{80,-8,58}, -{80,-8,59}, -{80,-8,60}, -{80,-8,61}, -{80,-8,62}, -{80,-8,63}, -{80,-8,64}, -{80,-8,65}, -{80,-8,66}, -{80,-8,67}, -{80,-8,68}, -{80,-8,69}, -{80,-8,70}, -{80,-8,71}, -{80,-8,72}, -{80,-8,73}, -{80,-8,74}, -{80,-8,75}, -{80,-8,76}, -{80,-8,77}, -{80,-8,78}, -{80,-8,79}, -{80,-8,80}, -{80,-8,81}, -{80,-7,-30}, -{80,-7,-29}, -{80,-7,-28}, -{80,-7,-27}, -{80,-7,-26}, -{80,-7,-25}, -{80,-7,-24}, -{80,-7,-23}, -{80,-7,-22}, -{80,-7,-21}, -{80,-7,-20}, -{80,-7,-19}, -{80,-7,-18}, -{80,-7,-17}, -{80,-7,-16}, -{80,-7,-15}, -{80,-7,-14}, -{80,-7,-13}, -{80,-7,-12}, -{80,-7,-11}, -{80,-7,-10}, -{80,-7,-9}, -{80,-7,-8}, -{80,-7,-7}, -{80,-7,-6}, -{80,-7,-5}, -{80,-7,-4}, -{80,-7,-3}, -{80,-7,-2}, -{80,-7,-1}, -{80,-7,0}, -{80,-7,1}, -{80,-7,2}, -{80,-7,3}, -{80,-7,4}, -{80,-7,5}, -{80,-7,6}, -{80,-7,7}, -{80,-7,8}, -{80,-7,9}, -{80,-7,10}, -{80,-7,11}, -{80,-7,12}, -{80,-7,13}, -{80,-7,14}, -{80,-7,15}, -{80,-7,16}, -{80,-7,17}, -{80,-7,18}, -{80,-7,19}, -{80,-7,20}, -{80,-7,21}, -{80,-7,22}, -{80,-7,23}, -{80,-7,24}, -{80,-7,25}, -{80,-7,26}, -{80,-7,27}, -{80,-7,28}, -{80,-7,29}, -{80,-7,30}, -{80,-7,31}, -{80,-7,32}, -{80,-7,33}, -{80,-7,34}, -{80,-7,35}, -{80,-7,36}, -{80,-7,37}, -{80,-7,38}, -{80,-7,39}, -{80,-7,40}, -{80,-7,41}, -{80,-7,42}, -{80,-7,43}, -{80,-7,44}, -{80,-7,45}, -{80,-7,46}, -{80,-7,47}, -{80,-7,48}, -{80,-7,49}, -{80,-7,50}, -{80,-7,51}, -{80,-7,52}, -{80,-7,53}, -{80,-7,54}, -{80,-7,55}, -{80,-7,56}, -{80,-7,57}, -{80,-7,58}, -{80,-7,59}, -{80,-7,60}, -{80,-7,61}, -{80,-7,62}, -{80,-7,63}, -{80,-7,64}, -{80,-7,65}, -{80,-7,66}, -{80,-7,67}, -{80,-7,68}, -{80,-7,69}, -{80,-7,70}, -{80,-7,71}, -{80,-7,72}, -{80,-7,73}, -{80,-7,74}, -{80,-7,75}, -{80,-7,76}, -{80,-7,77}, -{80,-7,78}, -{80,-7,79}, -{80,-7,80}, -{80,-7,81}, -{80,-6,-30}, -{80,-6,-29}, -{80,-6,-28}, -{80,-6,-27}, -{80,-6,-26}, -{80,-6,-25}, -{80,-6,-24}, -{80,-6,-23}, -{80,-6,-22}, -{80,-6,-21}, -{80,-6,-20}, -{80,-6,-19}, -{80,-6,-18}, -{80,-6,-17}, -{80,-6,-16}, -{80,-6,-15}, -{80,-6,-14}, -{80,-6,-13}, -{80,-6,-12}, -{80,-6,-11}, -{80,-6,-10}, -{80,-6,-9}, -{80,-6,-8}, -{80,-6,-7}, -{80,-6,-6}, -{80,-6,-5}, -{80,-6,-4}, -{80,-6,-3}, -{80,-6,-2}, -{80,-6,-1}, -{80,-6,0}, -{80,-6,1}, -{80,-6,2}, -{80,-6,3}, -{80,-6,4}, -{80,-6,5}, -{80,-6,6}, -{80,-6,7}, -{80,-6,8}, -{80,-6,9}, -{80,-6,10}, -{80,-6,11}, -{80,-6,12}, -{80,-6,13}, -{80,-6,14}, -{80,-6,15}, -{80,-6,16}, -{80,-6,17}, -{80,-6,18}, -{80,-6,19}, -{80,-6,20}, -{80,-6,21}, -{80,-6,22}, -{80,-6,23}, -{80,-6,24}, -{80,-6,25}, -{80,-6,26}, -{80,-6,27}, -{80,-6,28}, -{80,-6,29}, -{80,-6,30}, -{80,-6,31}, -{80,-6,32}, -{80,-6,33}, -{80,-6,34}, -{80,-6,35}, -{80,-6,36}, -{80,-6,37}, -{80,-6,38}, -{80,-6,39}, -{80,-6,40}, -{80,-6,41}, -{80,-6,42}, -{80,-6,43}, -{80,-6,44}, -{80,-6,45}, -{80,-6,46}, -{80,-6,47}, -{80,-6,48}, -{80,-6,49}, -{80,-6,50}, -{80,-6,51}, -{80,-6,52}, -{80,-6,53}, -{80,-6,54}, -{80,-6,55}, -{80,-6,56}, -{80,-6,57}, -{80,-6,58}, -{80,-6,59}, -{80,-6,60}, -{80,-6,61}, -{80,-6,62}, -{80,-6,63}, -{80,-6,64}, -{80,-6,65}, -{80,-6,66}, -{80,-6,67}, -{80,-6,68}, -{80,-6,69}, -{80,-6,70}, -{80,-6,71}, -{80,-6,72}, -{80,-6,73}, -{80,-6,74}, -{80,-6,75}, -{80,-6,76}, -{80,-6,77}, -{80,-6,78}, -{80,-6,79}, -{80,-6,80}, -{80,-6,81}, -{80,-5,-30}, -{80,-5,-29}, -{80,-5,-28}, -{80,-5,-27}, -{80,-5,-26}, -{80,-5,-25}, -{80,-5,-24}, -{80,-5,-23}, -{80,-5,-22}, -{80,-5,-21}, -{80,-5,-20}, -{80,-5,-19}, -{80,-5,-18}, -{80,-5,-17}, -{80,-5,-16}, -{80,-5,-15}, -{80,-5,-14}, -{80,-5,-13}, -{80,-5,-12}, -{80,-5,-11}, -{80,-5,-10}, -{80,-5,-9}, -{80,-5,-8}, -{80,-5,-7}, -{80,-5,-6}, -{80,-5,-5}, -{80,-5,-4}, -{80,-5,-3}, -{80,-5,-2}, -{80,-5,-1}, -{80,-5,0}, -{80,-5,1}, -{80,-5,2}, -{80,-5,3}, -{80,-5,4}, -{80,-5,5}, -{80,-5,6}, -{80,-5,7}, -{80,-5,8}, -{80,-5,9}, -{80,-5,10}, -{80,-5,11}, -{80,-5,12}, -{80,-5,13}, -{80,-5,14}, -{80,-5,15}, -{80,-5,16}, -{80,-5,17}, -{80,-5,18}, -{80,-5,19}, -{80,-5,20}, -{80,-5,21}, -{80,-5,22}, -{80,-5,23}, -{80,-5,24}, -{80,-5,25}, -{80,-5,26}, -{80,-5,27}, -{80,-5,28}, -{80,-5,29}, -{80,-5,30}, -{80,-5,31}, -{80,-5,32}, -{80,-5,33}, -{80,-5,34}, -{80,-5,35}, -{80,-5,36}, -{80,-5,37}, -{80,-5,38}, -{80,-5,39}, -{80,-5,40}, -{80,-5,41}, -{80,-5,42}, -{80,-5,43}, -{80,-5,44}, -{80,-5,45}, -{80,-5,46}, -{80,-5,47}, -{80,-5,48}, -{80,-5,49}, -{80,-5,50}, -{80,-5,51}, -{80,-5,52}, -{80,-5,53}, -{80,-5,54}, -{80,-5,55}, -{80,-5,56}, -{80,-5,57}, -{80,-5,58}, -{80,-5,59}, -{80,-5,60}, -{80,-5,61}, -{80,-5,62}, -{80,-5,63}, -{80,-5,64}, -{80,-5,65}, -{80,-5,66}, -{80,-5,67}, -{80,-5,68}, -{80,-5,69}, -{80,-5,70}, -{80,-5,71}, -{80,-5,72}, -{80,-5,73}, -{80,-5,74}, -{80,-5,75}, -{80,-5,76}, -{80,-5,77}, -{80,-5,78}, -{80,-5,79}, -{80,-5,80}, -{80,-5,81}, -{80,-4,-30}, -{80,-4,-29}, -{80,-4,-28}, -{80,-4,-27}, -{80,-4,-26}, -{80,-4,-25}, -{80,-4,-24}, -{80,-4,-23}, -{80,-4,-22}, -{80,-4,-21}, -{80,-4,-20}, -{80,-4,-19}, -{80,-4,-18}, -{80,-4,-17}, -{80,-4,-16}, -{80,-4,-15}, -{80,-4,-14}, -{80,-4,-13}, -{80,-4,-12}, -{80,-4,-11}, -{80,-4,-10}, -{80,-4,-9}, -{80,-4,-8}, -{80,-4,-7}, -{80,-4,-6}, -{80,-4,-5}, -{80,-4,-4}, -{80,-4,-3}, -{80,-4,-2}, -{80,-4,-1}, -{80,-4,0}, -{80,-4,1}, -{80,-4,2}, -{80,-4,3}, -{80,-4,4}, -{80,-4,5}, -{80,-4,6}, -{80,-4,7}, -{80,-4,8}, -{80,-4,9}, -{80,-4,10}, -{80,-4,11}, -{80,-4,12}, -{80,-4,13}, -{80,-4,14}, -{80,-4,15}, -{80,-4,16}, -{80,-4,17}, -{80,-4,18}, -{80,-4,19}, -{80,-4,20}, -{80,-4,21}, -{80,-4,22}, -{80,-4,23}, -{80,-4,24}, -{80,-4,25}, -{80,-4,26}, -{80,-4,27}, -{80,-4,28}, -{80,-4,29}, -{80,-4,30}, -{80,-4,31}, -{80,-4,32}, -{80,-4,33}, -{80,-4,34}, -{80,-4,35}, -{80,-4,36}, -{80,-4,37}, -{80,-4,38}, -{80,-4,39}, -{80,-4,40}, -{80,-4,41}, -{80,-4,42}, -{80,-4,43}, -{80,-4,44}, -{80,-4,45}, -{80,-4,46}, -{80,-4,47}, -{80,-4,48}, -{80,-4,49}, -{80,-4,50}, -{80,-4,51}, -{80,-4,52}, -{80,-4,53}, -{80,-4,54}, -{80,-4,55}, -{80,-4,56}, -{80,-4,57}, -{80,-4,58}, -{80,-4,59}, -{80,-4,60}, -{80,-4,61}, -{80,-4,62}, -{80,-4,63}, -{80,-4,64}, -{80,-4,65}, -{80,-4,66}, -{80,-4,67}, -{80,-4,68}, -{80,-4,69}, -{80,-4,70}, -{80,-4,71}, -{80,-4,72}, -{80,-4,73}, -{80,-4,74}, -{80,-4,75}, -{80,-4,76}, -{80,-4,77}, -{80,-4,78}, -{80,-4,79}, -{80,-4,80}, -{80,-4,81}, -{80,-3,-30}, -{80,-3,-29}, -{80,-3,-28}, -{80,-3,-27}, -{80,-3,-26}, -{80,-3,-25}, -{80,-3,-24}, -{80,-3,-23}, -{80,-3,-22}, -{80,-3,-21}, -{80,-3,-20}, -{80,-3,-19}, -{80,-3,-18}, -{80,-3,-17}, -{80,-3,-16}, -{80,-3,-15}, -{80,-3,-14}, -{80,-3,-13}, -{80,-3,-12}, -{80,-3,-11}, -{80,-3,-10}, -{80,-3,-9}, -{80,-3,-8}, -{80,-3,-7}, -{80,-3,-6}, -{80,-3,-5}, -{80,-3,-4}, -{80,-3,-3}, -{80,-3,-2}, -{80,-3,-1}, -{80,-3,0}, -{80,-3,1}, -{80,-3,2}, -{80,-3,3}, -{80,-3,4}, -{80,-3,5}, -{80,-3,6}, -{80,-3,7}, -{80,-3,8}, -{80,-3,9}, -{80,-3,10}, -{80,-3,11}, -{80,-3,12}, -{80,-3,13}, -{80,-3,14}, -{80,-3,15}, -{80,-3,16}, -{80,-3,17}, -{80,-3,18}, -{80,-3,19}, -{80,-3,20}, -{80,-3,21}, -{80,-3,22}, -{80,-3,23}, -{80,-3,24}, -{80,-3,25}, -{80,-3,26}, -{80,-3,27}, -{80,-3,28}, -{80,-3,29}, -{80,-3,30}, -{80,-3,31}, -{80,-3,32}, -{80,-3,33}, -{80,-3,34}, -{80,-3,35}, -{80,-3,36}, -{80,-3,37}, -{80,-3,38}, -{80,-3,39}, -{80,-3,40}, -{80,-3,41}, -{80,-3,42}, -{80,-3,43}, -{80,-3,44}, -{80,-3,45}, -{80,-3,46}, -{80,-3,47}, -{80,-3,48}, -{80,-3,49}, -{80,-3,50}, -{80,-3,51}, -{80,-3,52}, -{80,-3,53}, -{80,-3,54}, -{80,-3,55}, -{80,-3,56}, -{80,-3,57}, -{80,-3,58}, -{80,-3,59}, -{80,-3,60}, -{80,-3,61}, -{80,-3,62}, -{80,-3,63}, -{80,-3,64}, -{80,-3,65}, -{80,-3,66}, -{80,-3,67}, -{80,-3,68}, -{80,-3,69}, -{80,-3,70}, -{80,-3,71}, -{80,-3,72}, -{80,-3,73}, -{80,-3,74}, -{80,-3,75}, -{80,-3,76}, -{80,-3,77}, -{80,-3,78}, -{80,-3,79}, -{80,-3,80}, -{80,-3,81}, -{80,-2,-30}, -{80,-2,-29}, -{80,-2,-28}, -{80,-2,-27}, -{80,-2,-26}, -{80,-2,-25}, -{80,-2,-24}, -{80,-2,-23}, -{80,-2,-22}, -{80,-2,-21}, -{80,-2,-20}, -{80,-2,-19}, -{80,-2,-18}, -{80,-2,-17}, -{80,-2,-16}, -{80,-2,-15}, -{80,-2,-14}, -{80,-2,-13}, -{80,-2,-12}, -{80,-2,-11}, -{80,-2,-10}, -{80,-2,-9}, -{80,-2,-8}, -{80,-2,-7}, -{80,-2,-6}, -{80,-2,-5}, -{80,-2,-4}, -{80,-2,-3}, -{80,-2,-2}, -{80,-2,-1}, -{80,-2,0}, -{80,-2,1}, -{80,-2,2}, -{80,-2,3}, -{80,-2,4}, -{80,-2,5}, -{80,-2,6}, -{80,-2,7}, -{80,-2,8}, -{80,-2,9}, -{80,-2,10}, -{80,-2,11}, -{80,-2,12}, -{80,-2,13}, -{80,-2,14}, -{80,-2,15}, -{80,-2,16}, -{80,-2,17}, -{80,-2,18}, -{80,-2,19}, -{80,-2,20}, -{80,-2,21}, -{80,-2,22}, -{80,-2,23}, -{80,-2,24}, -{80,-2,25}, -{80,-2,26}, -{80,-2,27}, -{80,-2,28}, -{80,-2,29}, -{80,-2,30}, -{80,-2,31}, -{80,-2,32}, -{80,-2,33}, -{80,-2,34}, -{80,-2,35}, -{80,-2,36}, -{80,-2,37}, -{80,-2,38}, -{80,-2,39}, -{80,-2,40}, -{80,-2,41}, -{80,-2,42}, -{80,-2,43}, -{80,-2,44}, -{80,-2,45}, -{80,-2,46}, -{80,-2,47}, -{80,-2,48}, -{80,-2,49}, -{80,-2,50}, -{80,-2,51}, -{80,-2,52}, -{80,-2,53}, -{80,-2,54}, -{80,-2,55}, -{80,-2,56}, -{80,-2,57}, -{80,-2,58}, -{80,-2,59}, -{80,-2,60}, -{80,-2,61}, -{80,-2,62}, -{80,-2,63}, -{80,-2,64}, -{80,-2,65}, -{80,-2,66}, -{80,-2,67}, -{80,-2,68}, -{80,-2,69}, -{80,-2,70}, -{80,-2,71}, -{80,-2,72}, -{80,-2,73}, -{80,-2,74}, -{80,-2,75}, -{80,-2,76}, -{80,-2,77}, -{80,-2,78}, -{80,-2,79}, -{80,-2,80}, -{80,-2,81}, -{80,-1,-30}, -{80,-1,-29}, -{80,-1,-28}, -{80,-1,-27}, -{80,-1,-26}, -{80,-1,-25}, -{80,-1,-24}, -{80,-1,-23}, -{80,-1,-22}, -{80,-1,-21}, -{80,-1,-20}, -{80,-1,-19}, -{80,-1,-18}, -{80,-1,-17}, -{80,-1,-16}, -{80,-1,-15}, -{80,-1,-14}, -{80,-1,-13}, -{80,-1,-12}, -{80,-1,-11}, -{80,-1,-10}, -{80,-1,-9}, -{80,-1,-8}, -{80,-1,-7}, -{80,-1,-6}, -{80,-1,-5}, -{80,-1,-4}, -{80,-1,-3}, -{80,-1,-2}, -{80,-1,-1}, -{80,-1,0}, -{80,-1,1}, -{80,-1,2}, -{80,-1,3}, -{80,-1,4}, -{80,-1,5}, -{80,-1,6}, -{80,-1,7}, -{80,-1,8}, -{80,-1,9}, -{80,-1,10}, -{80,-1,11}, -{80,-1,12}, -{80,-1,13}, -{80,-1,14}, -{80,-1,15}, -{80,-1,16}, -{80,-1,17}, -{80,-1,18}, -{80,-1,19}, -{80,-1,20}, -{80,-1,21}, -{80,-1,22}, -{80,-1,23}, -{80,-1,24}, -{80,-1,25}, -{80,-1,26}, -{80,-1,27}, -{80,-1,28}, -{80,-1,29}, -{80,-1,30}, -{80,-1,31}, -{80,-1,32}, -{80,-1,33}, -{80,-1,34}, -{80,-1,35}, -{80,-1,36}, -{80,-1,37}, -{80,-1,38}, -{80,-1,39}, -{80,-1,40}, -{80,-1,41}, -{80,-1,42}, -{80,-1,43}, -{80,-1,44}, -{80,-1,45}, -{80,-1,46}, -{80,-1,47}, -{80,-1,48}, -{80,-1,49}, -{80,-1,50}, -{80,-1,51}, -{80,-1,52}, -{80,-1,53}, -{80,-1,54}, -{80,-1,55}, -{80,-1,56}, -{80,-1,57}, -{80,-1,58}, -{80,-1,59}, -{80,-1,60}, -{80,-1,61}, -{80,-1,62}, -{80,-1,63}, -{80,-1,64}, -{80,-1,65}, -{80,-1,66}, -{80,-1,67}, -{80,-1,68}, -{80,-1,69}, -{80,-1,70}, -{80,-1,71}, -{80,-1,72}, -{80,-1,73}, -{80,-1,74}, -{80,-1,75}, -{80,-1,76}, -{80,-1,77}, -{80,-1,78}, -{80,-1,79}, -{80,-1,80}, -{80,-1,81}, -{80,0,-30}, -{80,0,-29}, -{80,0,-28}, -{80,0,-27}, -{80,0,-26}, -{80,0,-25}, -{80,0,-24}, -{80,0,-23}, -{80,0,-22}, -{80,0,-21}, -{80,0,-20}, -{80,0,-19}, -{80,0,-18}, -{80,0,-17}, -{80,0,-16}, -{80,0,-15}, -{80,0,-14}, -{80,0,-13}, -{80,0,-12}, -{80,0,-11}, -{80,0,-10}, -{80,0,-9}, -{80,0,-8}, -{80,0,-7}, -{80,0,-6}, -{80,0,-5}, -{80,0,-4}, -{80,0,-3}, -{80,0,-2}, -{80,0,-1}, -{80,0,0}, -{80,0,1}, -{80,0,2}, -{80,0,3}, -{80,0,4}, -{80,0,5}, -{80,0,6}, -{80,0,7}, -{80,0,8}, -{80,0,9}, -{80,0,10}, -{80,0,11}, -{80,0,12}, -{80,0,13}, -{80,0,14}, -{80,0,15}, -{80,0,16}, -{80,0,17}, -{80,0,18}, -{80,0,19}, -{80,0,20}, -{80,0,21}, -{80,0,22}, -{80,0,23}, -{80,0,24}, -{80,0,25}, -{80,0,26}, -{80,0,27}, -{80,0,28}, -{80,0,29}, -{80,0,30}, -{80,0,31}, -{80,0,32}, -{80,0,33}, -{80,0,34}, -{80,0,35}, -{80,0,36}, -{80,0,37}, -{80,0,38}, -{80,0,39}, -{80,0,40}, -{80,0,41}, -{80,0,42}, -{80,0,43}, -{80,0,44}, -{80,0,45}, -{80,0,46}, -{80,0,47}, -{80,0,48}, -{80,0,49}, -{80,0,50}, -{80,0,51}, -{80,0,52}, -{80,0,53}, -{80,0,54}, -{80,0,55}, -{80,0,56}, -{80,0,57}, -{80,0,58}, -{80,0,59}, -{80,0,60}, -{80,0,61}, -{80,0,62}, -{80,0,63}, -{80,0,64}, -{80,0,65}, -{80,0,66}, -{80,0,67}, -{80,0,68}, -{80,0,69}, -{80,0,70}, -{80,0,71}, -{80,0,72}, -{80,0,73}, -{80,0,74}, -{80,0,75}, -{80,0,76}, -{80,0,77}, -{80,0,78}, -{80,0,79}, -{80,0,80}, -{80,0,81}, -{80,1,-30}, -{80,1,-29}, -{80,1,-28}, -{80,1,-27}, -{80,1,-26}, -{80,1,-25}, -{80,1,-24}, -{80,1,-23}, -{80,1,-22}, -{80,1,-21}, -{80,1,-20}, -{80,1,-19}, -{80,1,-18}, -{80,1,-17}, -{80,1,-16}, -{80,1,-15}, -{80,1,-14}, -{80,1,-13}, -{80,1,-12}, -{80,1,-11}, -{80,1,-10}, -{80,1,-9}, -{80,1,-8}, -{80,1,-7}, -{80,1,-6}, -{80,1,-5}, -{80,1,-4}, -{80,1,-3}, -{80,1,-2}, -{80,1,-1}, -{80,1,0}, -{80,1,1}, -{80,1,2}, -{80,1,3}, -{80,1,4}, -{80,1,5}, -{80,1,6}, -{80,1,7}, -{80,1,8}, -{80,1,9}, -{80,1,10}, -{80,1,11}, -{80,1,12}, -{80,1,13}, -{80,1,14}, -{80,1,15}, -{80,1,16}, -{80,1,17}, -{80,1,18}, -{80,1,19}, -{80,1,20}, -{80,1,21}, -{80,1,22}, -{80,1,23}, -{80,1,24}, -{80,1,25}, -{80,1,26}, -{80,1,27}, -{80,1,28}, -{80,1,29}, -{80,1,30}, -{80,1,31}, -{80,1,32}, -{80,1,33}, -{80,1,34}, -{80,1,35}, -{80,1,36}, -{80,1,37}, -{80,1,38}, -{80,1,39}, -{80,1,40}, -{80,1,41}, -{80,1,42}, -{80,1,43}, -{80,1,44}, -{80,1,45}, -{80,1,46}, -{80,1,47}, -{80,1,48}, -{80,1,49}, -{80,1,50}, -{80,1,51}, -{80,1,52}, -{80,1,53}, -{80,1,54}, -{80,1,55}, -{80,1,56}, -{80,1,57}, -{80,1,58}, -{80,1,59}, -{80,1,60}, -{80,1,61}, -{80,1,62}, -{80,1,63}, -{80,1,64}, -{80,1,65}, -{80,1,66}, -{80,1,67}, -{80,1,68}, -{80,1,69}, -{80,1,70}, -{80,1,71}, -{80,1,72}, -{80,1,73}, -{80,1,74}, -{80,1,75}, -{80,1,76}, -{80,1,77}, -{80,1,78}, -{80,1,79}, -{80,1,80}, -{80,1,81}, -{80,2,-30}, -{80,2,-29}, -{80,2,-28}, -{80,2,-27}, -{80,2,-26}, -{80,2,-25}, -{80,2,-24}, -{80,2,-23}, -{80,2,-22}, -{80,2,-21}, -{80,2,-20}, -{80,2,-19}, -{80,2,-18}, -{80,2,-17}, -{80,2,-16}, -{80,2,-15}, -{80,2,-14}, -{80,2,-13}, -{80,2,-12}, -{80,2,-11}, -{80,2,-10}, -{80,2,-9}, -{80,2,-8}, -{80,2,-7}, -{80,2,-6}, -{80,2,-5}, -{80,2,-4}, -{80,2,-3}, -{80,2,-2}, -{80,2,-1}, -{80,2,0}, -{80,2,1}, -{80,2,2}, -{80,2,3}, -{80,2,4}, -{80,2,5}, -{80,2,6}, -{80,2,7}, -{80,2,8}, -{80,2,9}, -{80,2,10}, -{80,2,11}, -{80,2,12}, -{80,2,13}, -{80,2,14}, -{80,2,15}, -{80,2,16}, -{80,2,17}, -{80,2,18}, -{80,2,19}, -{80,2,20}, -{80,2,21}, -{80,2,22}, -{80,2,23}, -{80,2,24}, -{80,2,25}, -{80,2,26}, -{80,2,27}, -{80,2,28}, -{80,2,29}, -{80,2,30}, -{80,2,31}, -{80,2,32}, -{80,2,33}, -{80,2,34}, -{80,2,35}, -{80,2,36}, -{80,2,37}, -{80,2,38}, -{80,2,39}, -{80,2,40}, -{80,2,41}, -{80,2,42}, -{80,2,43}, -{80,2,44}, -{80,2,45}, -{80,2,46}, -{80,2,47}, -{80,2,48}, -{80,2,49}, -{80,2,50}, -{80,2,51}, -{80,2,52}, -{80,2,53}, -{80,2,54}, -{80,2,55}, -{80,2,56}, -{80,2,57}, -{80,2,58}, -{80,2,59}, -{80,2,60}, -{80,2,61}, -{80,2,62}, -{80,2,63}, -{80,2,64}, -{80,2,65}, -{80,2,66}, -{80,2,67}, -{80,2,68}, -{80,2,69}, -{80,2,70}, -{80,2,71}, -{80,2,72}, -{80,2,73}, -{80,2,74}, -{80,2,75}, -{80,2,76}, -{80,2,77}, -{80,2,78}, -{80,2,79}, -{80,2,80}, -{80,2,81}, -{80,3,-30}, -{80,3,-29}, -{80,3,-28}, -{80,3,-27}, -{80,3,-26}, -{80,3,-25}, -{80,3,-24}, -{80,3,-23}, -{80,3,-22}, -{80,3,-21}, -{80,3,-20}, -{80,3,-19}, -{80,3,-18}, -{80,3,-17}, -{80,3,-16}, -{80,3,-15}, -{80,3,-14}, -{80,3,-13}, -{80,3,-12}, -{80,3,-11}, -{80,3,-10}, -{80,3,-9}, -{80,3,-8}, -{80,3,-7}, -{80,3,-6}, -{80,3,-5}, -{80,3,-4}, -{80,3,-3}, -{80,3,-2}, -{80,3,-1}, -{80,3,0}, -{80,3,1}, -{80,3,2}, -{80,3,3}, -{80,3,4}, -{80,3,5}, -{80,3,6}, -{80,3,7}, -{80,3,8}, -{80,3,9}, -{80,3,10}, -{80,3,11}, -{80,3,12}, -{80,3,13}, -{80,3,14}, -{80,3,15}, -{80,3,16}, -{80,3,17}, -{80,3,18}, -{80,3,19}, -{80,3,20}, -{80,3,21}, -{80,3,22}, -{80,3,23}, -{80,3,24}, -{80,3,25}, -{80,3,26}, -{80,3,27}, -{80,3,28}, -{80,3,29}, -{80,3,30}, -{80,3,31}, -{80,3,32}, -{80,3,33}, -{80,3,34}, -{80,3,35}, -{80,3,36}, -{80,3,37}, -{80,3,38}, -{80,3,39}, -{80,3,40}, -{80,3,41}, -{80,3,42}, -{80,3,43}, -{80,3,44}, -{80,3,45}, -{80,3,46}, -{80,3,47}, -{80,3,48}, -{80,3,49}, -{80,3,50}, -{80,3,51}, -{80,3,52}, -{80,3,53}, -{80,3,54}, -{80,3,55}, -{80,3,56}, -{80,3,57}, -{80,3,58}, -{80,3,59}, -{80,3,60}, -{80,3,61}, -{80,3,62}, -{80,3,63}, -{80,3,64}, -{80,3,65}, -{80,3,66}, -{80,3,67}, -{80,3,68}, -{80,3,69}, -{80,3,70}, -{80,3,71}, -{80,3,72}, -{80,3,73}, -{80,3,74}, -{80,3,75}, -{80,3,76}, -{80,3,77}, -{80,3,78}, -{80,3,79}, -{80,3,80}, -{80,3,81}, -{80,4,-30}, -{80,4,-29}, -{80,4,-28}, -{80,4,-27}, -{80,4,-26}, -{80,4,-25}, -{80,4,-24}, -{80,4,-23}, -{80,4,-22}, -{80,4,-21}, -{80,4,-20}, -{80,4,-19}, -{80,4,-18}, -{80,4,-17}, -{80,4,-16}, -{80,4,-15}, -{80,4,-14}, -{80,4,-13}, -{80,4,-12}, -{80,4,-11}, -{80,4,-10}, -{80,4,-9}, -{80,4,-8}, -{80,4,-7}, -{80,4,-6}, -{80,4,-5}, -{80,4,-4}, -{80,4,-3}, -{80,4,-2}, -{80,4,-1}, -{80,4,0}, -{80,4,1}, -{80,4,2}, -{80,4,3}, -{80,4,4}, -{80,4,5}, -{80,4,6}, -{80,4,7}, -{80,4,8}, -{80,4,9}, -{80,4,10}, -{80,4,11}, -{80,4,12}, -{80,4,13}, -{80,4,14}, -{80,4,15}, -{80,4,16}, -{80,4,17}, -{80,4,18}, -{80,4,19}, -{80,4,20}, -{80,4,21}, -{80,4,22}, -{80,4,23}, -{80,4,24}, -{80,4,25}, -{80,4,26}, -{80,4,27}, -{80,4,28}, -{80,4,29}, -{80,4,30}, -{80,4,31}, -{80,4,32}, -{80,4,33}, -{80,4,34}, -{80,4,35}, -{80,4,36}, -{80,4,37}, -{80,4,38}, -{80,4,39}, -{80,4,40}, -{80,4,41}, -{80,4,42}, -{80,4,43}, -{80,4,44}, -{80,4,45}, -{80,4,46}, -{80,4,47}, -{80,4,48}, -{80,4,49}, -{80,4,50}, -{80,4,51}, -{80,4,52}, -{80,4,53}, -{80,4,54}, -{80,4,55}, -{80,4,56}, -{80,4,57}, -{80,4,58}, -{80,4,59}, -{80,4,60}, -{80,4,61}, -{80,4,62}, -{80,4,63}, -{80,4,64}, -{80,4,65}, -{80,4,66}, -{80,4,67}, -{80,4,68}, -{80,4,69}, -{80,4,70}, -{80,4,71}, -{80,4,72}, -{80,4,73}, -{80,4,74}, -{80,4,75}, -{80,4,76}, -{80,4,77}, -{80,4,78}, -{80,4,79}, -{80,4,80}, -{80,4,81}, -{80,5,-30}, -{80,5,-29}, -{80,5,-28}, -{80,5,-27}, -{80,5,-26}, -{80,5,-25}, -{80,5,-24}, -{80,5,-23}, -{80,5,-22}, -{80,5,-21}, -{80,5,-20}, -{80,5,-19}, -{80,5,-18}, -{80,5,-17}, -{80,5,-16}, -{80,5,-15}, -{80,5,-14}, -{80,5,-13}, -{80,5,-12}, -{80,5,-11}, -{80,5,-10}, -{80,5,-9}, -{80,5,-8}, -{80,5,-7}, -{80,5,-6}, -{80,5,-5}, -{80,5,-4}, -{80,5,-3}, -{80,5,-2}, -{80,5,-1}, -{80,5,0}, -{80,5,1}, -{80,5,2}, -{80,5,3}, -{80,5,4}, -{80,5,5}, -{80,5,6}, -{80,5,7}, -{80,5,8}, -{80,5,9}, -{80,5,10}, -{80,5,11}, -{80,5,12}, -{80,5,13}, -{80,5,14}, -{80,5,15}, -{80,5,16}, -{80,5,17}, -{80,5,18}, -{80,5,19}, -{80,5,20}, -{80,5,21}, -{80,5,22}, -{80,5,23}, -{80,5,24}, -{80,5,25}, -{80,5,26}, -{80,5,27}, -{80,5,28}, -{80,5,29}, -{80,5,30}, -{80,5,31}, -{80,5,32}, -{80,5,33}, -{80,5,34}, -{80,5,35}, -{80,5,36}, -{80,5,37}, -{80,5,38}, -{80,5,39}, -{80,5,40}, -{80,5,41}, -{80,5,42}, -{80,5,43}, -{80,5,44}, -{80,5,45}, -{80,5,46}, -{80,5,47}, -{80,5,48}, -{80,5,49}, -{80,5,50}, -{80,5,51}, -{80,5,52}, -{80,5,53}, -{80,5,54}, -{80,5,55}, -{80,5,56}, -{80,5,57}, -{80,5,58}, -{80,5,59}, -{80,5,60}, -{80,5,61}, -{80,5,62}, -{80,5,63}, -{80,5,64}, -{80,5,65}, -{80,5,66}, -{80,5,67}, -{80,5,68}, -{80,5,69}, -{80,5,70}, -{80,5,71}, -{80,5,72}, -{80,5,73}, -{80,5,74}, -{80,5,75}, -{80,5,76}, -{80,5,77}, -{80,5,78}, -{80,5,79}, -{80,5,80}, -{80,5,81}, -{80,6,-30}, -{80,6,-29}, -{80,6,-28}, -{80,6,-27}, -{80,6,-26}, -{80,6,-25}, -{80,6,-24}, -{80,6,-23}, -{80,6,-22}, -{80,6,-21}, -{80,6,-20}, -{80,6,-19}, -{80,6,-18}, -{80,6,-17}, -{80,6,-16}, -{80,6,-15}, -{80,6,-14}, -{80,6,-13}, -{80,6,-12}, -{80,6,-11}, -{80,6,-10}, -{80,6,-9}, -{80,6,-8}, -{80,6,-7}, -{80,6,-6}, -{80,6,-5}, -{80,6,-4}, -{80,6,-3}, -{80,6,-2}, -{80,6,-1}, -{80,6,0}, -{80,6,1}, -{80,6,2}, -{80,6,3}, -{80,6,4}, -{80,6,5}, -{80,6,6}, -{80,6,7}, -{80,6,8}, -{80,6,9}, -{80,6,10}, -{80,6,11}, -{80,6,12}, -{80,6,13}, -{80,6,14}, -{80,6,15}, -{80,6,16}, -{80,6,17}, -{80,6,18}, -{80,6,19}, -{80,6,20}, -{80,6,21}, -{80,6,22}, -{80,6,23}, -{80,6,24}, -{80,6,25}, -{80,6,26}, -{80,6,27}, -{80,6,28}, -{80,6,29}, -{80,6,30}, -{80,6,31}, -{80,6,32}, -{80,6,33}, -{80,6,34}, -{80,6,35}, -{80,6,36}, -{80,6,37}, -{80,6,38}, -{80,6,39}, -{80,6,40}, -{80,6,41}, -{80,6,42}, -{80,6,43}, -{80,6,44}, -{80,6,45}, -{80,6,46}, -{80,6,47}, -{80,6,48}, -{80,6,49}, -{80,6,50}, -{80,6,51}, -{80,6,52}, -{80,6,53}, -{80,6,54}, -{80,6,55}, -{80,6,56}, -{80,6,57}, -{80,6,58}, -{80,6,59}, -{80,6,60}, -{80,6,61}, -{80,6,62}, -{80,6,63}, -{80,6,64}, -{80,6,65}, -{80,6,66}, -{80,6,67}, -{80,6,68}, -{80,6,69}, -{80,6,70}, -{80,6,71}, -{80,6,72}, -{80,6,73}, -{80,6,74}, -{80,6,75}, -{80,6,76}, -{80,6,77}, -{80,6,78}, -{80,6,79}, -{80,6,80}, -{80,6,81}, -{80,6,82}, -{80,7,-30}, -{80,7,-29}, -{80,7,-28}, -{80,7,-27}, -{80,7,-26}, -{80,7,-25}, -{80,7,-24}, -{80,7,-23}, -{80,7,-22}, -{80,7,-21}, -{80,7,-20}, -{80,7,-19}, -{80,7,-18}, -{80,7,-17}, -{80,7,-16}, -{80,7,-15}, -{80,7,-14}, -{80,7,-13}, -{80,7,-12}, -{80,7,-11}, -{80,7,-10}, -{80,7,-9}, -{80,7,-8}, -{80,7,-7}, -{80,7,-6}, -{80,7,-5}, -{80,7,-4}, -{80,7,-3}, -{80,7,-2}, -{80,7,-1}, -{80,7,0}, -{80,7,1}, -{80,7,2}, -{80,7,3}, -{80,7,4}, -{80,7,5}, -{80,7,6}, -{80,7,7}, -{80,7,8}, -{80,7,9}, -{80,7,10}, -{80,7,11}, -{80,7,12}, -{80,7,13}, -{80,7,14}, -{80,7,15}, -{80,7,16}, -{80,7,17}, -{80,7,18}, -{80,7,19}, -{80,7,20}, -{80,7,21}, -{80,7,22}, -{80,7,23}, -{80,7,24}, -{80,7,25}, -{80,7,26}, -{80,7,27}, -{80,7,28}, -{80,7,29}, -{80,7,30}, -{80,7,31}, -{80,7,32}, -{80,7,33}, -{80,7,34}, -{80,7,35}, -{80,7,36}, -{80,7,37}, -{80,7,38}, -{80,7,39}, -{80,7,40}, -{80,7,41}, -{80,7,42}, -{80,7,43}, -{80,7,44}, -{80,7,45}, -{80,7,46}, -{80,7,47}, -{80,7,48}, -{80,7,49}, -{80,7,50}, -{80,7,51}, -{80,7,52}, -{80,7,53}, -{80,7,54}, -{80,7,55}, -{80,7,56}, -{80,7,57}, -{80,7,58}, -{80,7,59}, -{80,7,60}, -{80,7,61}, -{80,7,62}, -{80,7,63}, -{80,7,64}, -{80,7,65}, -{80,7,66}, -{80,7,67}, -{80,7,68}, -{80,7,69}, -{80,7,70}, -{80,7,71}, -{80,7,72}, -{80,7,73}, -{80,7,74}, -{80,7,75}, -{80,7,76}, -{80,7,77}, -{80,7,78}, -{80,7,79}, -{80,7,80}, -{80,7,81}, -{80,7,82}, -{80,8,-30}, -{80,8,-29}, -{80,8,-28}, -{80,8,-27}, -{80,8,-26}, -{80,8,-25}, -{80,8,-24}, -{80,8,-23}, -{80,8,-22}, -{80,8,-21}, -{80,8,-20}, -{80,8,-19}, -{80,8,-18}, -{80,8,-17}, -{80,8,-16}, -{80,8,-15}, -{80,8,-14}, -{80,8,-13}, -{80,8,-12}, -{80,8,-11}, -{80,8,-10}, -{80,8,-9}, -{80,8,-8}, -{80,8,-7}, -{80,8,-6}, -{80,8,-5}, -{80,8,-4}, -{80,8,-3}, -{80,8,-2}, -{80,8,-1}, -{80,8,0}, -{80,8,1}, -{80,8,2}, -{80,8,3}, -{80,8,4}, -{80,8,5}, -{80,8,6}, -{80,8,7}, -{80,8,8}, -{80,8,9}, -{80,8,10}, -{80,8,11}, -{80,8,12}, -{80,8,13}, -{80,8,14}, -{80,8,15}, -{80,8,16}, -{80,8,17}, -{80,8,18}, -{80,8,19}, -{80,8,20}, -{80,8,21}, -{80,8,22}, -{80,8,23}, -{80,8,24}, -{80,8,25}, -{80,8,26}, -{80,8,27}, -{80,8,28}, -{80,8,29}, -{80,8,30}, -{80,8,31}, -{80,8,32}, -{80,8,33}, -{80,8,34}, -{80,8,35}, -{80,8,36}, -{80,8,37}, -{80,8,38}, -{80,8,39}, -{80,8,40}, -{80,8,41}, -{80,8,42}, -{80,8,43}, -{80,8,44}, -{80,8,45}, -{80,8,46}, -{80,8,47}, -{80,8,48}, -{80,8,49}, -{80,8,50}, -{80,8,51}, -{80,8,52}, -{80,8,53}, -{80,8,54}, -{80,8,55}, -{80,8,56}, -{80,8,57}, -{80,8,58}, -{80,8,59}, -{80,8,60}, -{80,8,61}, -{80,8,62}, -{80,8,63}, -{80,8,64}, -{80,8,65}, -{80,8,66}, -{80,8,67}, -{80,8,68}, -{80,8,69}, -{80,8,70}, -{80,8,71}, -{80,8,72}, -{80,8,73}, -{80,8,74}, -{80,8,75}, -{80,8,76}, -{80,8,77}, -{80,8,78}, -{80,8,79}, -{80,8,80}, -{80,8,81}, -{80,8,82}, -{80,9,-30}, -{80,9,-29}, -{80,9,-28}, -{80,9,-27}, -{80,9,-26}, -{80,9,-25}, -{80,9,-24}, -{80,9,-23}, -{80,9,-22}, -{80,9,-21}, -{80,9,-20}, -{80,9,-19}, -{80,9,-18}, -{80,9,-17}, -{80,9,-16}, -{80,9,-15}, -{80,9,-14}, -{80,9,-13}, -{80,9,-12}, -{80,9,-11}, -{80,9,-10}, -{80,9,-9}, -{80,9,-8}, -{80,9,-7}, -{80,9,-6}, -{80,9,-5}, -{80,9,-4}, -{80,9,-3}, -{80,9,-2}, -{80,9,-1}, -{80,9,0}, -{80,9,1}, -{80,9,2}, -{80,9,3}, -{80,9,4}, -{80,9,5}, -{80,9,6}, -{80,9,7}, -{80,9,8}, -{80,9,9}, -{80,9,10}, -{80,9,11}, -{80,9,12}, -{80,9,13}, -{80,9,14}, -{80,9,15}, -{80,9,16}, -{80,9,17}, -{80,9,18}, -{80,9,19}, -{80,9,20}, -{80,9,21}, -{80,9,22}, -{80,9,23}, -{80,9,24}, -{80,9,25}, -{80,9,26}, -{80,9,27}, -{80,9,28}, -{80,9,29}, -{80,9,30}, -{80,9,31}, -{80,9,32}, -{80,9,33}, -{80,9,34}, -{80,9,35}, -{80,9,36}, -{80,9,37}, -{80,9,38}, -{80,9,39}, -{80,9,40}, -{80,9,41}, -{80,9,42}, -{80,9,43}, -{80,9,44}, -{80,9,45}, -{80,9,46}, -{80,9,47}, -{80,9,48}, -{80,9,49}, -{80,9,50}, -{80,9,51}, -{80,9,52}, -{80,9,53}, -{80,9,54}, -{80,9,55}, -{80,9,56}, -{80,9,57}, -{80,9,58}, -{80,9,59}, -{80,9,60}, -{80,9,61}, -{80,9,62}, -{80,9,63}, -{80,9,64}, -{80,9,65}, -{80,9,66}, -{80,9,67}, -{80,9,68}, -{80,9,69}, -{80,9,70}, -{80,9,71}, -{80,9,72}, -{80,9,73}, -{80,9,74}, -{80,9,75}, -{80,9,76}, -{80,9,77}, -{80,9,78}, -{80,9,79}, -{80,9,80}, -{80,9,81}, -{80,9,82}, -{80,10,-30}, -{80,10,-29}, -{80,10,-28}, -{80,10,-27}, -{80,10,-26}, -{80,10,-25}, -{80,10,-24}, -{80,10,-23}, -{80,10,-22}, -{80,10,-21}, -{80,10,-20}, -{80,10,-19}, -{80,10,-18}, -{80,10,-17}, -{80,10,-16}, -{80,10,-15}, -{80,10,-14}, -{80,10,-13}, -{80,10,-12}, -{80,10,-11}, -{80,10,-10}, -{80,10,-9}, -{80,10,-8}, -{80,10,-7}, -{80,10,-6}, -{80,10,-5}, -{80,10,-4}, -{80,10,-3}, -{80,10,-2}, -{80,10,-1}, -{80,10,0}, -{80,10,1}, -{80,10,2}, -{80,10,3}, -{80,10,4}, -{80,10,5}, -{80,10,6}, -{80,10,7}, -{80,10,8}, -{80,10,9}, -{80,10,10}, -{80,10,11}, -{80,10,12}, -{80,10,13}, -{80,10,14}, -{80,10,15}, -{80,10,16}, -{80,10,17}, -{80,10,18}, -{80,10,19}, -{80,10,20}, -{80,10,21}, -{80,10,22}, -{80,10,23}, -{80,10,24}, -{80,10,25}, -{80,10,26}, -{80,10,27}, -{80,10,28}, -{80,10,29}, -{80,10,30}, -{80,10,31}, -{80,10,32}, -{80,10,33}, -{80,10,34}, -{80,10,35}, -{80,10,36}, -{80,10,37}, -{80,10,38}, -{80,10,39}, -{80,10,40}, -{80,10,41}, -{80,10,42}, -{80,10,43}, -{80,10,44}, -{80,10,45}, -{80,10,46}, -{80,10,47}, -{80,10,48}, -{80,10,49}, -{80,10,50}, -{80,10,51}, -{80,10,52}, -{80,10,53}, -{80,10,54}, -{80,10,55}, -{80,10,56}, -{80,10,57}, -{80,10,58}, -{80,10,59}, -{80,10,60}, -{80,10,61}, -{80,10,62}, -{80,10,63}, -{80,10,64}, -{80,10,65}, -{80,10,66}, -{80,10,67}, -{80,10,68}, -{80,10,69}, -{80,10,70}, -{80,10,71}, -{80,10,72}, -{80,10,73}, -{80,10,74}, -{80,10,75}, -{80,10,76}, -{80,10,77}, -{80,10,78}, -{80,10,79}, -{80,10,80}, -{80,10,81}, -{80,10,82}, -{80,11,-30}, -{80,11,-29}, -{80,11,-28}, -{80,11,-27}, -{80,11,-26}, -{80,11,-25}, -{80,11,-24}, -{80,11,-23}, -{80,11,-22}, -{80,11,-21}, -{80,11,-20}, -{80,11,-19}, -{80,11,-18}, -{80,11,-17}, -{80,11,-16}, -{80,11,-15}, -{80,11,-14}, -{80,11,-13}, -{80,11,-12}, -{80,11,-11}, -{80,11,-10}, -{80,11,-9}, -{80,11,-8}, -{80,11,-7}, -{80,11,-6}, -{80,11,-5}, -{80,11,-4}, -{80,11,-3}, -{80,11,-2}, -{80,11,-1}, -{80,11,0}, -{80,11,1}, -{80,11,2}, -{80,11,3}, -{80,11,4}, -{80,11,5}, -{80,11,6}, -{80,11,7}, -{80,11,8}, -{80,11,9}, -{80,11,10}, -{80,11,11}, -{80,11,12}, -{80,11,13}, -{80,11,14}, -{80,11,15}, -{80,11,16}, -{80,11,17}, -{80,11,18}, -{80,11,19}, -{80,11,20}, -{80,11,21}, -{80,11,22}, -{80,11,23}, -{80,11,24}, -{80,11,25}, -{80,11,26}, -{80,11,27}, -{80,11,28}, -{80,11,29}, -{80,11,30}, -{80,11,31}, -{80,11,32}, -{80,11,33}, -{80,11,34}, -{80,11,35}, -{80,11,36}, -{80,11,37}, -{80,11,38}, -{80,11,39}, -{80,11,40}, -{80,11,41}, -{80,11,42}, -{80,11,43}, -{80,11,44}, -{80,11,45}, -{80,11,46}, -{80,11,47}, -{80,11,48}, -{80,11,49}, -{80,11,50}, -{80,11,51}, -{80,11,52}, -{80,11,53}, -{80,11,54}, -{80,11,55}, -{80,11,56}, -{80,11,57}, -{80,11,58}, -{80,11,59}, -{80,11,60}, -{80,11,61}, -{80,11,62}, -{80,11,63}, -{80,11,64}, -{80,11,65}, -{80,11,66}, -{80,11,67}, -{80,11,68}, -{80,11,69}, -{80,11,70}, -{80,11,71}, -{80,11,72}, -{80,11,73}, -{80,11,74}, -{80,11,75}, -{80,11,76}, -{80,11,77}, -{80,11,78}, -{80,11,79}, -{80,11,80}, -{80,11,81}, -{80,11,82}, -{80,12,-30}, -{80,12,-29}, -{80,12,-28}, -{80,12,-27}, -{80,12,-26}, -{80,12,-25}, -{80,12,-24}, -{80,12,-23}, -{80,12,-22}, -{80,12,-21}, -{80,12,-20}, -{80,12,-19}, -{80,12,-18}, -{80,12,-17}, -{80,12,-16}, -{80,12,-15}, -{80,12,-14}, -{80,12,-13}, -{80,12,-12}, -{80,12,-11}, -{80,12,-10}, -{80,12,-9}, -{80,12,-8}, -{80,12,-7}, -{80,12,-6}, -{80,12,-5}, -{80,12,-4}, -{80,12,-3}, -{80,12,-2}, -{80,12,-1}, -{80,12,0}, -{80,12,1}, -{80,12,2}, -{80,12,3}, -{80,12,4}, -{80,12,5}, -{80,12,6}, -{80,12,7}, -{80,12,8}, -{80,12,9}, -{80,12,10}, -{80,12,11}, -{80,12,12}, -{80,12,13}, -{80,12,14}, -{80,12,15}, -{80,12,16}, -{80,12,17}, -{80,12,18}, -{80,12,19}, -{80,12,20}, -{80,12,21}, -{80,12,22}, -{80,12,23}, -{80,12,24}, -{80,12,25}, -{80,12,26}, -{80,12,27}, -{80,12,28}, -{80,12,29}, -{80,12,30}, -{80,12,31}, -{80,12,32}, -{80,12,33}, -{80,12,34}, -{80,12,35}, -{80,12,36}, -{80,12,37}, -{80,12,38}, -{80,12,39}, -{80,12,40}, -{80,12,41}, -{80,12,42}, -{80,12,43}, -{80,12,44}, -{80,12,45}, -{80,12,46}, -{80,12,47}, -{80,12,48}, -{80,12,49}, -{80,12,50}, -{80,12,51}, -{80,12,52}, -{80,12,53}, -{80,12,54}, -{80,12,55}, -{80,12,56}, -{80,12,57}, -{80,12,58}, -{80,12,59}, -{80,12,60}, -{80,12,61}, -{80,12,62}, -{80,12,63}, -{80,12,64}, -{80,12,65}, -{80,12,66}, -{80,12,67}, -{80,12,68}, -{80,12,69}, -{80,12,70}, -{80,12,71}, -{80,12,72}, -{80,12,73}, -{80,12,74}, -{80,12,75}, -{80,12,76}, -{80,12,77}, -{80,12,78}, -{80,12,79}, -{80,12,80}, -{80,12,81}, -{80,12,82}, -{80,13,-30}, -{80,13,-29}, -{80,13,-28}, -{80,13,-27}, -{80,13,-26}, -{80,13,-25}, -{80,13,-24}, -{80,13,-23}, -{80,13,-22}, -{80,13,-21}, -{80,13,-20}, -{80,13,-19}, -{80,13,-18}, -{80,13,-17}, -{80,13,-16}, -{80,13,-15}, -{80,13,-14}, -{80,13,-13}, -{80,13,-12}, -{80,13,-11}, -{80,13,-10}, -{80,13,-9}, -{80,13,-8}, -{80,13,-7}, -{80,13,-6}, -{80,13,-5}, -{80,13,-4}, -{80,13,-3}, -{80,13,-2}, -{80,13,-1}, -{80,13,0}, -{80,13,1}, -{80,13,2}, -{80,13,3}, -{80,13,4}, -{80,13,5}, -{80,13,6}, -{80,13,7}, -{80,13,8}, -{80,13,9}, -{80,13,10}, -{80,13,11}, -{80,13,12}, -{80,13,13}, -{80,13,14}, -{80,13,15}, -{80,13,16}, -{80,13,17}, -{80,13,18}, -{80,13,19}, -{80,13,20}, -{80,13,21}, -{80,13,22}, -{80,13,23}, -{80,13,24}, -{80,13,25}, -{80,13,26}, -{80,13,27}, -{80,13,28}, -{80,13,29}, -{80,13,30}, -{80,13,31}, -{80,13,32}, -{80,13,33}, -{80,13,34}, -{80,13,35}, -{80,13,36}, -{80,13,37}, -{80,13,38}, -{80,13,39}, -{80,13,40}, -{80,13,41}, -{80,13,42}, -{80,13,43}, -{80,13,44}, -{80,13,45}, -{80,13,46}, -{80,13,47}, -{80,13,48}, -{80,13,49}, -{80,13,50}, -{80,13,51}, -{80,13,52}, -{80,13,53}, -{80,13,54}, -{80,13,55}, -{80,13,56}, -{80,13,57}, -{80,13,58}, -{80,13,59}, -{80,13,60}, -{80,13,61}, -{80,13,62}, -{80,13,63}, -{80,13,64}, -{80,13,65}, -{80,13,66}, -{80,13,67}, -{80,13,68}, -{80,13,69}, -{80,13,70}, -{80,13,71}, -{80,13,72}, -{80,13,73}, -{80,13,74}, -{80,13,75}, -{80,13,76}, -{80,13,77}, -{80,13,78}, -{80,13,79}, -{80,13,80}, -{80,14,-30}, -{80,14,-29}, -{80,14,-28}, -{80,14,-27}, -{80,14,-26}, -{80,14,-25}, -{80,14,-24}, -{80,14,-23}, -{80,14,-22}, -{80,14,-21}, -{80,14,-20}, -{80,14,-19}, -{80,14,-18}, -{80,14,-17}, -{80,14,-16}, -{80,14,-15}, -{80,14,-14}, -{80,14,-13}, -{80,14,-12}, -{80,14,-11}, -{80,14,-10}, -{80,14,-9}, -{80,14,-8}, -{80,14,-7}, -{80,14,-6}, -{80,14,-5}, -{80,14,-4}, -{80,14,-3}, -{80,14,-2}, -{80,14,-1}, -{80,14,0}, -{80,14,1}, -{80,14,2}, -{80,14,3}, -{80,14,4}, -{80,14,5}, -{80,14,6}, -{80,14,7}, -{80,14,8}, -{80,14,9}, -{80,14,10}, -{80,14,11}, -{80,14,12}, -{80,14,13}, -{80,14,14}, -{80,14,15}, -{80,14,16}, -{80,14,17}, -{80,14,18}, -{80,14,19}, -{80,14,20}, -{80,14,21}, -{80,14,22}, -{80,14,23}, -{80,14,24}, -{80,14,25}, -{80,14,26}, -{80,14,27}, -{80,14,28}, -{80,14,29}, -{80,14,30}, -{80,14,31}, -{80,14,32}, -{80,14,33}, -{80,14,34}, -{80,14,35}, -{80,14,36}, -{80,14,37}, -{80,14,38}, -{80,14,39}, -{80,14,40}, -{80,14,41}, -{80,14,42}, -{80,14,43}, -{80,14,44}, -{80,14,45}, -{80,14,46}, -{80,14,47}, -{80,14,48}, -{80,14,49}, -{80,14,50}, -{80,14,51}, -{80,14,52}, -{80,14,53}, -{80,14,54}, -{80,14,55}, -{80,14,56}, -{80,14,57}, -{80,14,58}, -{80,14,59}, -{80,14,60}, -{80,14,61}, -{80,14,62}, -{80,14,63}, -{80,14,64}, -{80,14,65}, -{80,14,66}, -{80,14,67}, -{80,14,68}, -{80,14,69}, -{80,14,70}, -{80,14,71}, -{80,14,72}, -{80,15,-30}, -{80,15,-29}, -{80,15,-28}, -{80,15,-27}, -{80,15,-26}, -{80,15,-25}, -{80,15,-24}, -{80,15,-23}, -{80,15,-22}, -{80,15,-21}, -{80,15,-20}, -{80,15,-19}, -{80,15,-18}, -{80,15,-17}, -{80,15,-16}, -{80,15,-15}, -{80,15,-14}, -{80,15,-13}, -{80,15,-12}, -{80,15,-11}, -{80,15,-10}, -{80,15,-9}, -{80,15,-8}, -{80,15,-7}, -{80,15,-6}, -{80,15,-5}, -{80,15,-4}, -{80,15,-3}, -{80,15,-2}, -{80,15,-1}, -{80,15,0}, -{80,15,1}, -{80,15,2}, -{80,15,3}, -{80,15,4}, -{80,15,5}, -{80,15,6}, -{80,15,7}, -{80,15,8}, -{80,15,9}, -{80,15,10}, -{80,15,11}, -{80,15,12}, -{80,15,13}, -{80,15,14}, -{80,15,15}, -{80,15,16}, -{80,15,17}, -{80,15,18}, -{80,15,19}, -{80,15,20}, -{80,15,21}, -{80,15,22}, -{80,15,23}, -{80,15,24}, -{80,15,25}, -{80,15,26}, -{80,15,27}, -{80,15,28}, -{80,15,29}, -{80,15,30}, -{80,15,31}, -{80,15,32}, -{80,15,33}, -{80,15,34}, -{80,15,35}, -{80,15,36}, -{80,15,37}, -{80,15,38}, -{80,15,39}, -{80,15,40}, -{80,15,41}, -{80,15,42}, -{80,15,43}, -{80,15,44}, -{80,15,45}, -{80,15,46}, -{80,15,47}, -{80,15,48}, -{80,15,49}, -{80,15,50}, -{80,15,51}, -{80,15,52}, -{80,15,53}, -{80,15,54}, -{80,15,55}, -{80,15,56}, -{80,15,57}, -{80,15,58}, -{80,15,59}, -{80,15,60}, -{80,15,61}, -{80,15,62}, -{80,15,63}, -{80,15,64}, -{80,15,65}, -{80,16,-30}, -{80,16,-29}, -{80,16,-28}, -{80,16,-27}, -{80,16,-26}, -{80,16,-25}, -{80,16,-24}, -{80,16,-23}, -{80,16,-22}, -{80,16,-21}, -{80,16,-20}, -{80,16,-19}, -{80,16,-18}, -{80,16,-17}, -{80,16,-16}, -{80,16,-15}, -{80,16,-14}, -{80,16,-13}, -{80,16,-12}, -{80,16,-11}, -{80,16,-10}, -{80,16,-9}, -{80,16,-8}, -{80,16,-7}, -{80,16,-6}, -{80,16,-5}, -{80,16,-4}, -{80,16,-3}, -{80,16,-2}, -{80,16,-1}, -{80,16,0}, -{80,16,1}, -{80,16,2}, -{80,16,3}, -{80,16,4}, -{80,16,5}, -{80,16,6}, -{80,16,7}, -{80,16,8}, -{80,16,9}, -{80,16,10}, -{80,16,11}, -{80,16,12}, -{80,16,13}, -{80,16,14}, -{80,16,15}, -{80,16,16}, -{80,16,17}, -{80,16,18}, -{80,16,19}, -{80,16,20}, -{80,16,21}, -{80,16,22}, -{80,16,23}, -{80,16,24}, -{80,16,25}, -{80,16,26}, -{80,16,27}, -{80,16,28}, -{80,16,29}, -{80,16,30}, -{80,16,31}, -{80,16,32}, -{80,16,33}, -{80,16,34}, -{80,16,35}, -{80,16,36}, -{80,16,37}, -{80,16,38}, -{80,16,39}, -{80,16,40}, -{80,16,41}, -{80,16,42}, -{80,16,43}, -{80,16,44}, -{80,16,45}, -{80,16,46}, -{80,16,47}, -{80,16,48}, -{80,16,49}, -{80,16,50}, -{80,16,51}, -{80,16,52}, -{80,16,53}, -{80,16,54}, -{80,16,55}, -{80,16,56}, -{80,16,57}, -{80,16,58}, -{80,17,-30}, -{80,17,-29}, -{80,17,-28}, -{80,17,-27}, -{80,17,-26}, -{80,17,-25}, -{80,17,-24}, -{80,17,-23}, -{80,17,-22}, -{80,17,-21}, -{80,17,-20}, -{80,17,-19}, -{80,17,-18}, -{80,17,-17}, -{80,17,-16}, -{80,17,-15}, -{80,17,-14}, -{80,17,-13}, -{80,17,-12}, -{80,17,-11}, -{80,17,-10}, -{80,17,-9}, -{80,17,-8}, -{80,17,-7}, -{80,17,-6}, -{80,17,-5}, -{80,17,-4}, -{80,17,-3}, -{80,17,-2}, -{80,17,-1}, -{80,17,0}, -{80,17,1}, -{80,17,2}, -{80,17,3}, -{80,17,4}, -{80,17,5}, -{80,17,6}, -{80,17,7}, -{80,17,8}, -{80,17,9}, -{80,17,10}, -{80,17,11}, -{80,17,12}, -{80,17,13}, -{80,17,14}, -{80,17,15}, -{80,17,16}, -{80,17,17}, -{80,17,18}, -{80,17,19}, -{80,17,20}, -{80,17,21}, -{80,17,22}, -{80,17,23}, -{80,17,24}, -{80,17,25}, -{80,17,26}, -{80,17,27}, -{80,17,28}, -{80,17,29}, -{80,17,30}, -{80,17,31}, -{80,17,32}, -{80,17,33}, -{80,17,34}, -{80,17,35}, -{80,17,36}, -{80,17,37}, -{80,17,38}, -{80,17,39}, -{80,17,40}, -{80,17,41}, -{80,17,42}, -{80,17,43}, -{80,17,44}, -{80,17,45}, -{80,17,46}, -{80,17,47}, -{80,17,48}, -{80,17,49}, -{80,17,50}, -{80,17,51}, -{80,17,52}, -{80,17,53}, -{80,18,-30}, -{80,18,-29}, -{80,18,-28}, -{80,18,-27}, -{80,18,-26}, -{80,18,-25}, -{80,18,-24}, -{80,18,-23}, -{80,18,-22}, -{80,18,-21}, -{80,18,-20}, -{80,18,-19}, -{80,18,-18}, -{80,18,-17}, -{80,18,-16}, -{80,18,-15}, -{80,18,-14}, -{80,18,-13}, -{80,18,-12}, -{80,18,-11}, -{80,18,-10}, -{80,18,-9}, -{80,18,-8}, -{80,18,-7}, -{80,18,-6}, -{80,18,-5}, -{80,18,-4}, -{80,18,-3}, -{80,18,-2}, -{80,18,-1}, -{80,18,0}, -{80,18,1}, -{80,18,2}, -{80,18,3}, -{80,18,4}, -{80,18,5}, -{80,18,6}, -{80,18,7}, -{80,18,8}, -{80,18,9}, -{80,18,10}, -{80,18,11}, -{80,18,12}, -{80,18,13}, -{80,18,14}, -{80,18,15}, -{80,18,16}, -{80,18,17}, -{80,18,18}, -{80,18,19}, -{80,18,20}, -{80,18,21}, -{80,18,22}, -{80,18,23}, -{80,18,24}, -{80,18,25}, -{80,18,26}, -{80,18,27}, -{80,18,28}, -{80,18,29}, -{80,18,30}, -{80,18,31}, -{80,18,32}, -{80,18,33}, -{80,18,34}, -{80,18,35}, -{80,18,36}, -{80,18,37}, -{80,18,38}, -{80,18,39}, -{80,18,40}, -{80,18,41}, -{80,18,42}, -{80,18,43}, -{80,18,44}, -{80,18,45}, -{80,18,46}, -{80,18,47}, -{80,18,48}, -{80,19,-30}, -{80,19,-29}, -{80,19,-28}, -{80,19,-27}, -{80,19,-26}, -{80,19,-25}, -{80,19,-24}, -{80,19,-23}, -{80,19,-22}, -{80,19,-21}, -{80,19,-20}, -{80,19,-19}, -{80,19,-18}, -{80,19,-17}, -{80,19,-16}, -{80,19,-15}, -{80,19,-14}, -{80,19,-13}, -{80,19,-12}, -{80,19,-11}, -{80,19,-10}, -{80,19,-9}, -{80,19,-8}, -{80,19,-7}, -{80,19,-6}, -{80,19,-5}, -{80,19,-4}, -{80,19,-3}, -{80,19,-2}, -{80,19,-1}, -{80,19,0}, -{80,19,1}, -{80,19,2}, -{80,19,3}, -{80,19,4}, -{80,19,5}, -{80,19,6}, -{80,19,7}, -{80,19,8}, -{80,19,9}, -{80,19,10}, -{80,19,11}, -{80,19,12}, -{80,19,13}, -{80,19,14}, -{80,19,15}, -{80,19,16}, -{80,19,17}, -{80,19,18}, -{80,19,19}, -{80,19,20}, -{80,19,21}, -{80,19,22}, -{80,19,23}, -{80,19,24}, -{80,19,25}, -{80,19,26}, -{80,19,27}, -{80,19,28}, -{80,19,29}, -{80,19,30}, -{80,19,31}, -{80,19,32}, -{80,19,33}, -{80,19,34}, -{80,19,35}, -{80,19,36}, -{80,19,37}, -{80,19,38}, -{80,19,39}, -{80,19,40}, -{80,19,41}, -{80,19,42}, -{80,19,43}, -{80,20,-30}, -{80,20,-29}, -{80,20,-28}, -{80,20,-27}, -{80,20,-26}, -{80,20,-25}, -{80,20,-24}, -{80,20,-23}, -{80,20,-22}, -{80,20,-21}, -{80,20,-20}, -{80,20,-19}, -{80,20,-18}, -{80,20,-17}, -{80,20,-16}, -{80,20,-15}, -{80,20,-14}, -{80,20,-13}, -{80,20,-12}, -{80,20,-11}, -{80,20,-10}, -{80,20,-9}, -{80,20,-8}, -{80,20,-7}, -{80,20,-6}, -{80,20,-5}, -{80,20,-4}, -{80,20,-3}, -{80,20,-2}, -{80,20,-1}, -{80,20,0}, -{80,20,1}, -{80,20,2}, -{80,20,3}, -{80,20,4}, -{80,20,5}, -{80,20,6}, -{80,20,7}, -{80,20,8}, -{80,20,9}, -{80,20,10}, -{80,20,11}, -{80,20,12}, -{80,20,13}, -{80,20,14}, -{80,20,15}, -{80,20,16}, -{80,20,17}, -{80,20,18}, -{80,20,19}, -{80,20,20}, -{80,20,21}, -{80,20,22}, -{80,20,23}, -{80,20,24}, -{80,20,25}, -{80,20,26}, -{80,20,27}, -{80,20,28}, -{80,20,29}, -{80,20,30}, -{80,20,31}, -{80,20,32}, -{80,20,33}, -{80,20,34}, -{80,20,35}, -{80,20,36}, -{80,20,37}, -{80,20,38}, -{80,20,39}, -{80,21,-30}, -{80,21,-29}, -{80,21,-28}, -{80,21,-27}, -{80,21,-26}, -{80,21,-25}, -{80,21,-24}, -{80,21,-23}, -{80,21,-22}, -{80,21,-21}, -{80,21,-20}, -{80,21,-19}, -{80,21,-18}, -{80,21,-17}, -{80,21,-16}, -{80,21,-15}, -{80,21,-14}, -{80,21,-13}, -{80,21,-12}, -{80,21,-11}, -{80,21,-10}, -{80,21,-9}, -{80,21,-8}, -{80,21,-7}, -{80,21,-6}, -{80,21,-5}, -{80,21,-4}, -{80,21,-3}, -{80,21,-2}, -{80,21,-1}, -{80,21,0}, -{80,21,1}, -{80,21,2}, -{80,21,3}, -{80,21,4}, -{80,21,5}, -{80,21,6}, -{80,21,7}, -{80,21,8}, -{80,21,9}, -{80,21,10}, -{80,21,11}, -{80,21,12}, -{80,21,13}, -{80,21,14}, -{80,21,15}, -{80,21,16}, -{80,21,17}, -{80,21,18}, -{80,21,19}, -{80,21,20}, -{80,21,21}, -{80,21,22}, -{80,21,23}, -{80,21,24}, -{80,21,25}, -{80,21,26}, -{80,21,27}, -{80,21,28}, -{80,21,29}, -{80,21,30}, -{80,21,31}, -{80,21,32}, -{80,21,33}, -{80,21,34}, -{80,22,-30}, -{80,22,-29}, -{80,22,-28}, -{80,22,-27}, -{80,22,-26}, -{80,22,-25}, -{80,22,-24}, -{80,22,-23}, -{80,22,-22}, -{80,22,-21}, -{80,22,-20}, -{80,22,-19}, -{80,22,-18}, -{80,22,-17}, -{80,22,-16}, -{80,22,-15}, -{80,22,-14}, -{80,22,-13}, -{80,22,-12}, -{80,22,-11}, -{80,22,-10}, -{80,22,-9}, -{80,22,-8}, -{80,22,-7}, -{80,22,-6}, -{80,22,-5}, -{80,22,-4}, -{80,22,-3}, -{80,22,-2}, -{80,22,-1}, -{80,22,0}, -{80,22,1}, -{80,22,2}, -{80,22,3}, -{80,22,4}, -{80,22,5}, -{80,22,6}, -{80,22,7}, -{80,22,8}, -{80,22,9}, -{80,22,10}, -{80,22,11}, -{80,22,12}, -{80,22,13}, -{80,22,14}, -{80,22,15}, -{80,22,16}, -{80,22,17}, -{80,22,18}, -{80,22,19}, -{80,22,20}, -{80,22,21}, -{80,22,22}, -{80,22,23}, -{80,22,24}, -{80,22,25}, -{80,22,26}, -{80,22,27}, -{80,22,28}, -{80,22,29}, -{80,22,30}, -{80,23,-30}, -{80,23,-29}, -{80,23,-28}, -{80,23,-27}, -{80,23,-26}, -{80,23,-25}, -{80,23,-24}, -{80,23,-23}, -{80,23,-22}, -{80,23,-21}, -{80,23,-20}, -{80,23,-19}, -{80,23,-18}, -{80,23,-17}, -{80,23,-16}, -{80,23,-15}, -{80,23,-14}, -{80,23,-13}, -{80,23,-12}, -{80,23,-11}, -{80,23,-10}, -{80,23,-9}, -{80,23,-8}, -{80,23,-7}, -{80,23,-6}, -{80,23,-5}, -{80,23,-4}, -{80,23,-3}, -{80,23,-2}, -{80,23,-1}, -{80,23,0}, -{80,23,1}, -{80,23,2}, -{80,23,3}, -{80,23,4}, -{80,23,5}, -{80,23,6}, -{80,23,7}, -{80,23,8}, -{80,23,9}, -{80,23,10}, -{80,23,11}, -{80,23,12}, -{80,23,13}, -{80,23,14}, -{80,23,15}, -{80,23,16}, -{80,23,17}, -{80,23,18}, -{80,23,19}, -{80,23,20}, -{80,23,21}, -{80,23,22}, -{80,23,23}, -{80,23,24}, -{80,23,25}, -{80,23,26}, -{80,23,27}, -{80,24,-30}, -{80,24,-29}, -{80,24,-28}, -{80,24,-27}, -{80,24,-26}, -{80,24,-25}, -{80,24,-24}, -{80,24,-23}, -{80,24,-22}, -{80,24,-21}, -{80,24,-20}, -{80,24,-19}, -{80,24,-18}, -{80,24,-17}, -{80,24,-16}, -{80,24,-15}, -{80,24,-14}, -{80,24,-13}, -{80,24,-12}, -{80,24,-11}, -{80,24,-10}, -{80,24,-9}, -{80,24,-8}, -{80,24,-7}, -{80,24,-6}, -{80,24,-5}, -{80,24,-4}, -{80,24,-3}, -{80,24,-2}, -{80,24,-1}, -{80,24,0}, -{80,24,1}, -{80,24,2}, -{80,24,3}, -{80,24,4}, -{80,24,5}, -{80,24,6}, -{80,24,7}, -{80,24,8}, -{80,24,9}, -{80,24,10}, -{80,24,11}, -{80,24,12}, -{80,24,13}, -{80,24,14}, -{80,24,15}, -{80,24,16}, -{80,24,17}, -{80,24,18}, -{80,24,19}, -{80,24,20}, -{80,24,21}, -{80,24,22}, -{80,24,23}, -{80,25,-30}, -{80,25,-29}, -{80,25,-28}, -{80,25,-27}, -{80,25,-26}, -{80,25,-25}, -{80,25,-24}, -{80,25,-23}, -{80,25,-22}, -{80,25,-21}, -{80,25,-20}, -{80,25,-19}, -{80,25,-18}, -{80,25,-17}, -{80,25,-16}, -{80,25,-15}, -{80,25,-14}, -{80,25,-13}, -{80,25,-12}, -{80,25,-11}, -{80,25,-10}, -{80,25,-9}, -{80,25,-8}, -{80,25,-7}, -{80,25,-6}, -{80,25,-5}, -{80,25,-4}, -{80,25,-3}, -{80,25,-2}, -{80,25,-1}, -{80,25,0}, -{80,25,1}, -{80,25,2}, -{80,25,3}, -{80,25,4}, -{80,25,5}, -{80,25,6}, -{80,25,7}, -{80,25,8}, -{80,25,9}, -{80,25,10}, -{80,25,11}, -{80,25,12}, -{80,25,13}, -{80,25,14}, -{80,25,15}, -{80,25,16}, -{80,25,17}, -{80,25,18}, -{80,25,19}, -{80,25,20}, -{80,26,-30}, -{80,26,-29}, -{80,26,-28}, -{80,26,-27}, -{80,26,-26}, -{80,26,-25}, -{80,26,-24}, -{80,26,-23}, -{80,26,-22}, -{80,26,-21}, -{80,26,-20}, -{80,26,-19}, -{80,26,-18}, -{80,26,-17}, -{80,26,-16}, -{80,26,-15}, -{80,26,-14}, -{80,26,-13}, -{80,26,-12}, -{80,26,-11}, -{80,26,-10}, -{80,26,-9}, -{80,26,-8}, -{80,26,-7}, -{80,26,-6}, -{80,26,-5}, -{80,26,-4}, -{80,26,-3}, -{80,26,-2}, -{80,26,-1}, -{80,26,0}, -{80,26,1}, -{80,26,2}, -{80,26,3}, -{80,26,4}, -{80,26,5}, -{80,26,6}, -{80,26,7}, -{80,26,8}, -{80,26,9}, -{80,26,10}, -{80,26,11}, -{80,26,12}, -{80,26,13}, -{80,26,14}, -{80,26,15}, -{80,26,16}, -{80,26,17}, -{80,27,-30}, -{80,27,-29}, -{80,27,-28}, -{80,27,-27}, -{80,27,-26}, -{80,27,-25}, -{80,27,-24}, -{80,27,-23}, -{80,27,-22}, -{80,27,-21}, -{80,27,-20}, -{80,27,-19}, -{80,27,-18}, -{80,27,-17}, -{80,27,-16}, -{80,27,-15}, -{80,27,-14}, -{80,27,-13}, -{80,27,-12}, -{80,27,-11}, -{80,27,-10}, -{80,27,-9}, -{80,27,-8}, -{80,27,-7}, -{80,27,-6}, -{80,27,-5}, -{80,27,-4}, -{80,27,-3}, -{80,27,-2}, -{80,27,-1}, -{80,27,0}, -{80,27,1}, -{80,27,2}, -{80,27,3}, -{80,27,4}, -{80,27,5}, -{80,27,6}, -{80,27,7}, -{80,27,8}, -{80,27,9}, -{80,27,10}, -{80,27,11}, -{80,27,12}, -{80,27,13}, -{80,28,-30}, -{80,28,-29}, -{80,28,-28}, -{80,28,-27}, -{80,28,-26}, -{80,28,-25}, -{80,28,-24}, -{80,28,-23}, -{80,28,-22}, -{80,28,-21}, -{80,28,-20}, -{80,28,-19}, -{80,28,-18}, -{80,28,-17}, -{80,28,-16}, -{80,28,-15}, -{80,28,-14}, -{80,28,-13}, -{80,28,-12}, -{80,28,-11}, -{80,28,-10}, -{80,28,-9}, -{80,28,-8}, -{80,28,-7}, -{80,28,-6}, -{80,28,-5}, -{80,28,-4}, -{80,28,-3}, -{80,28,-2}, -{80,28,-1}, -{80,28,0}, -{80,28,1}, -{80,28,2}, -{80,28,3}, -{80,28,4}, -{80,28,5}, -{80,28,6}, -{80,28,7}, -{80,28,8}, -{80,28,9}, -{80,28,10}, -{80,29,-30}, -{80,29,-29}, -{80,29,-28}, -{80,29,-27}, -{80,29,-26}, -{80,29,-25}, -{80,29,-24}, -{80,29,-23}, -{80,29,-22}, -{80,29,-21}, -{80,29,-20}, -{80,29,-19}, -{80,29,-18}, -{80,29,-17}, -{80,29,-16}, -{80,29,-15}, -{80,29,-14}, -{80,29,-13}, -{80,29,-12}, -{80,29,-11}, -{80,29,-10}, -{80,29,-9}, -{80,29,-8}, -{80,29,-7}, -{80,29,-6}, -{80,29,-5}, -{80,29,-4}, -{80,29,-3}, -{80,29,-2}, -{80,29,-1}, -{80,29,0}, -{80,29,1}, -{80,29,2}, -{80,29,3}, -{80,29,4}, -{80,29,5}, -{80,29,6}, -{80,29,7}, -{80,29,8}, -{80,30,-30}, -{80,30,-29}, -{80,30,-28}, -{80,30,-27}, -{80,30,-26}, -{80,30,-25}, -{80,30,-24}, -{80,30,-23}, -{80,30,-22}, -{80,30,-21}, -{80,30,-20}, -{80,30,-19}, -{80,30,-18}, -{80,30,-17}, -{80,30,-16}, -{80,30,-15}, -{80,30,-14}, -{80,30,-13}, -{80,30,-12}, -{80,30,-11}, -{80,30,-10}, -{80,30,-9}, -{80,30,-8}, -{80,30,-7}, -{80,30,-6}, -{80,30,-5}, -{80,30,-4}, -{80,30,-3}, -{80,30,-2}, -{80,30,-1}, -{80,30,0}, -{80,30,1}, -{80,30,2}, -{80,30,3}, -{80,30,4}, -{80,30,5}, -{80,31,-30}, -{80,31,-29}, -{80,31,-28}, -{80,31,-27}, -{80,31,-26}, -{80,31,-25}, -{80,31,-24}, -{80,31,-23}, -{80,31,-22}, -{80,31,-21}, -{80,31,-20}, -{80,31,-19}, -{80,31,-18}, -{80,31,-17}, -{80,31,-16}, -{80,31,-15}, -{80,31,-14}, -{80,31,-13}, -{80,31,-12}, -{80,31,-11}, -{80,31,-10}, -{80,31,-9}, -{80,31,-8}, -{80,31,-7}, -{80,31,-6}, -{80,31,-5}, -{80,31,-4}, -{80,31,-3}, -{80,31,-2}, -{80,31,-1}, -{80,31,0}, -{80,31,1}, -{80,31,2}, -{80,32,-30}, -{80,32,-29}, -{80,32,-28}, -{80,32,-27}, -{80,32,-26}, -{80,32,-25}, -{80,32,-24}, -{80,32,-23}, -{80,32,-22}, -{80,32,-21}, -{80,32,-20}, -{80,32,-19}, -{80,32,-18}, -{80,32,-17}, -{80,32,-16}, -{80,32,-15}, -{80,32,-14}, -{80,32,-13}, -{80,32,-12}, -{80,32,-11}, -{80,32,-10}, -{80,32,-9}, -{80,32,-8}, -{80,32,-7}, -{80,32,-6}, -{80,32,-5}, -{80,32,-4}, -{80,32,-3}, -{80,32,-2}, -{80,32,-1}, -{80,33,-30}, -{80,33,-29}, -{80,33,-28}, -{80,33,-27}, -{80,33,-26}, -{80,33,-25}, -{80,33,-24}, -{80,33,-23}, -{80,33,-22}, -{80,33,-21}, -{80,33,-20}, -{80,33,-19}, -{80,33,-18}, -{80,33,-17}, -{80,33,-16}, -{80,33,-15}, -{80,33,-14}, -{80,33,-13}, -{80,33,-12}, -{80,33,-11}, -{80,33,-10}, -{80,33,-9}, -{80,33,-8}, -{80,33,-7}, -{80,33,-6}, -{80,33,-5}, -{80,33,-4}, -{80,33,-3}, -{80,34,-30}, -{80,34,-29}, -{80,34,-28}, -{80,34,-27}, -{80,34,-26}, -{80,34,-25}, -{80,34,-24}, -{80,34,-23}, -{80,34,-22}, -{80,34,-21}, -{80,34,-20}, -{80,34,-19}, -{80,34,-18}, -{80,34,-17}, -{80,34,-16}, -{80,34,-15}, -{80,34,-14}, -{80,34,-13}, -{80,34,-12}, -{80,34,-11}, -{80,34,-10}, -{80,34,-9}, -{80,34,-8}, -{80,34,-7}, -{80,34,-6}, -{80,35,-30}, -{80,35,-29}, -{80,35,-28}, -{80,35,-27}, -{80,35,-26}, -{80,35,-25}, -{80,35,-24}, -{80,35,-23}, -{80,35,-22}, -{80,35,-21}, -{80,35,-20}, -{80,35,-19}, -{80,35,-18}, -{80,35,-17}, -{80,35,-16}, -{80,35,-15}, -{80,35,-14}, -{80,35,-13}, -{80,35,-12}, -{80,35,-11}, -{80,35,-10}, -{80,35,-9}, -{80,35,-8}, -{80,36,-30}, -{80,36,-29}, -{80,36,-28}, -{80,36,-27}, -{80,36,-26}, -{80,36,-25}, -{80,36,-24}, -{80,36,-23}, -{80,36,-22}, -{80,36,-21}, -{80,36,-20}, -{80,36,-19}, -{80,36,-18}, -{80,36,-17}, -{80,36,-16}, -{80,36,-15}, -{80,36,-14}, -{80,36,-13}, -{80,36,-12}, -{80,36,-11}, -{80,37,-30}, -{80,37,-29}, -{80,37,-28}, -{80,37,-27}, -{80,37,-26}, -{80,37,-25}, -{80,37,-24}, -{80,37,-23}, -{80,37,-22}, -{80,37,-21}, -{80,37,-20}, -{80,37,-19}, -{80,37,-18}, -{80,37,-17}, -{80,37,-16}, -{80,37,-15}, -{80,37,-14}, -{80,37,-13}, -{80,38,-30}, -{80,38,-29}, -{80,38,-28}, -{80,38,-27}, -{80,38,-26}, -{80,38,-25}, -{80,38,-24}, -{80,38,-23}, -{80,38,-22}, -{80,38,-21}, -{80,38,-20}, -{80,38,-19}, -{80,38,-18}, -{80,38,-17}, -{80,38,-16}, -{80,38,-15}, -{80,39,-30}, -{80,39,-29}, -{80,39,-28}, -{80,39,-27}, -{80,39,-26}, -{80,39,-25}, -{80,39,-24}, -{80,39,-23}, -{80,39,-22}, -{80,39,-21}, -{80,39,-20}, -{80,39,-19}, -{80,39,-18}, -{80,40,-30}, -{80,40,-29}, -{80,40,-28}, -{80,40,-27}, -{80,40,-26}, -{80,40,-25}, -{80,40,-24}, -{80,40,-23}, -{80,40,-22}, -{80,40,-21}, -{80,40,-20}, -{80,41,-30}, -{80,41,-29}, -{80,41,-28}, -{80,41,-27}, -{80,41,-26}, -{80,41,-25}, -{80,41,-24}, -{80,41,-23}, -{80,41,-22}, -{80,42,-30}, -{80,42,-29}, -{80,42,-28}, -{80,42,-27}, -{80,42,-26}, -{80,42,-25}, -{80,42,-24}, -{80,43,-30}, -{80,43,-29}, -{80,43,-28}, -{80,43,-27}, -{80,43,-26}, -{80,44,-30}, -{80,44,-29}, -{80,44,-28}, -{80,45,-30}, -{81,-80,74}, -{81,-80,75}, -{81,-80,76}, -{81,-80,77}, -{81,-79,70}, -{81,-79,71}, -{81,-79,72}, -{81,-79,73}, -{81,-79,74}, -{81,-79,75}, -{81,-79,76}, -{81,-79,77}, -{81,-79,78}, -{81,-78,66}, -{81,-78,67}, -{81,-78,68}, -{81,-78,69}, -{81,-78,70}, -{81,-78,71}, -{81,-78,72}, -{81,-78,73}, -{81,-78,74}, -{81,-78,75}, -{81,-78,76}, -{81,-78,77}, -{81,-78,78}, -{81,-77,62}, -{81,-77,63}, -{81,-77,64}, -{81,-77,65}, -{81,-77,66}, -{81,-77,67}, -{81,-77,68}, -{81,-77,69}, -{81,-77,70}, -{81,-77,71}, -{81,-77,72}, -{81,-77,73}, -{81,-77,74}, -{81,-77,75}, -{81,-77,76}, -{81,-77,77}, -{81,-77,78}, -{81,-76,58}, -{81,-76,59}, -{81,-76,60}, -{81,-76,61}, -{81,-76,62}, -{81,-76,63}, -{81,-76,64}, -{81,-76,65}, -{81,-76,66}, -{81,-76,67}, -{81,-76,68}, -{81,-76,69}, -{81,-76,70}, -{81,-76,71}, -{81,-76,72}, -{81,-76,73}, -{81,-76,74}, -{81,-76,75}, -{81,-76,76}, -{81,-76,77}, -{81,-76,78}, -{81,-75,55}, -{81,-75,56}, -{81,-75,57}, -{81,-75,58}, -{81,-75,59}, -{81,-75,60}, -{81,-75,61}, -{81,-75,62}, -{81,-75,63}, -{81,-75,64}, -{81,-75,65}, -{81,-75,66}, -{81,-75,67}, -{81,-75,68}, -{81,-75,69}, -{81,-75,70}, -{81,-75,71}, -{81,-75,72}, -{81,-75,73}, -{81,-75,74}, -{81,-75,75}, -{81,-75,76}, -{81,-75,77}, -{81,-75,78}, -{81,-74,51}, -{81,-74,52}, -{81,-74,53}, -{81,-74,54}, -{81,-74,55}, -{81,-74,56}, -{81,-74,57}, -{81,-74,58}, -{81,-74,59}, -{81,-74,60}, -{81,-74,61}, -{81,-74,62}, -{81,-74,63}, -{81,-74,64}, -{81,-74,65}, -{81,-74,66}, -{81,-74,67}, -{81,-74,68}, -{81,-74,69}, -{81,-74,70}, -{81,-74,71}, -{81,-74,72}, -{81,-74,73}, -{81,-74,74}, -{81,-74,75}, -{81,-74,76}, -{81,-74,77}, -{81,-74,78}, -{81,-73,48}, -{81,-73,49}, -{81,-73,50}, -{81,-73,51}, -{81,-73,52}, -{81,-73,53}, -{81,-73,54}, -{81,-73,55}, -{81,-73,56}, -{81,-73,57}, -{81,-73,58}, -{81,-73,59}, -{81,-73,60}, -{81,-73,61}, -{81,-73,62}, -{81,-73,63}, -{81,-73,64}, -{81,-73,65}, -{81,-73,66}, -{81,-73,67}, -{81,-73,68}, -{81,-73,69}, -{81,-73,70}, -{81,-73,71}, -{81,-73,72}, -{81,-73,73}, -{81,-73,74}, -{81,-73,75}, -{81,-73,76}, -{81,-73,77}, -{81,-73,78}, -{81,-72,45}, -{81,-72,46}, -{81,-72,47}, -{81,-72,48}, -{81,-72,49}, -{81,-72,50}, -{81,-72,51}, -{81,-72,52}, -{81,-72,53}, -{81,-72,54}, -{81,-72,55}, -{81,-72,56}, -{81,-72,57}, -{81,-72,58}, -{81,-72,59}, -{81,-72,60}, -{81,-72,61}, -{81,-72,62}, -{81,-72,63}, -{81,-72,64}, -{81,-72,65}, -{81,-72,66}, -{81,-72,67}, -{81,-72,68}, -{81,-72,69}, -{81,-72,70}, -{81,-72,71}, -{81,-72,72}, -{81,-72,73}, -{81,-72,74}, -{81,-72,75}, -{81,-72,76}, -{81,-72,77}, -{81,-72,78}, -{81,-71,43}, -{81,-71,44}, -{81,-71,45}, -{81,-71,46}, -{81,-71,47}, -{81,-71,48}, -{81,-71,49}, -{81,-71,50}, -{81,-71,51}, -{81,-71,52}, -{81,-71,53}, -{81,-71,54}, -{81,-71,55}, -{81,-71,56}, -{81,-71,57}, -{81,-71,58}, -{81,-71,59}, -{81,-71,60}, -{81,-71,61}, -{81,-71,62}, -{81,-71,63}, -{81,-71,64}, -{81,-71,65}, -{81,-71,66}, -{81,-71,67}, -{81,-71,68}, -{81,-71,69}, -{81,-71,70}, -{81,-71,71}, -{81,-71,72}, -{81,-71,73}, -{81,-71,74}, -{81,-71,75}, -{81,-71,76}, -{81,-71,77}, -{81,-71,78}, -{81,-70,40}, -{81,-70,41}, -{81,-70,42}, -{81,-70,43}, -{81,-70,44}, -{81,-70,45}, -{81,-70,46}, -{81,-70,47}, -{81,-70,48}, -{81,-70,49}, -{81,-70,50}, -{81,-70,51}, -{81,-70,52}, -{81,-70,53}, -{81,-70,54}, -{81,-70,55}, -{81,-70,56}, -{81,-70,57}, -{81,-70,58}, -{81,-70,59}, -{81,-70,60}, -{81,-70,61}, -{81,-70,62}, -{81,-70,63}, -{81,-70,64}, -{81,-70,65}, -{81,-70,66}, -{81,-70,67}, -{81,-70,68}, -{81,-70,69}, -{81,-70,70}, -{81,-70,71}, -{81,-70,72}, -{81,-70,73}, -{81,-70,74}, -{81,-70,75}, -{81,-70,76}, -{81,-70,77}, -{81,-70,78}, -{81,-69,37}, -{81,-69,38}, -{81,-69,39}, -{81,-69,40}, -{81,-69,41}, -{81,-69,42}, -{81,-69,43}, -{81,-69,44}, -{81,-69,45}, -{81,-69,46}, -{81,-69,47}, -{81,-69,48}, -{81,-69,49}, -{81,-69,50}, -{81,-69,51}, -{81,-69,52}, -{81,-69,53}, -{81,-69,54}, -{81,-69,55}, -{81,-69,56}, -{81,-69,57}, -{81,-69,58}, -{81,-69,59}, -{81,-69,60}, -{81,-69,61}, -{81,-69,62}, -{81,-69,63}, -{81,-69,64}, -{81,-69,65}, -{81,-69,66}, -{81,-69,67}, -{81,-69,68}, -{81,-69,69}, -{81,-69,70}, -{81,-69,71}, -{81,-69,72}, -{81,-69,73}, -{81,-69,74}, -{81,-69,75}, -{81,-69,76}, -{81,-69,77}, -{81,-69,78}, -{81,-68,35}, -{81,-68,36}, -{81,-68,37}, -{81,-68,38}, -{81,-68,39}, -{81,-68,40}, -{81,-68,41}, -{81,-68,42}, -{81,-68,43}, -{81,-68,44}, -{81,-68,45}, -{81,-68,46}, -{81,-68,47}, -{81,-68,48}, -{81,-68,49}, -{81,-68,50}, -{81,-68,51}, -{81,-68,52}, -{81,-68,53}, -{81,-68,54}, -{81,-68,55}, -{81,-68,56}, -{81,-68,57}, -{81,-68,58}, -{81,-68,59}, -{81,-68,60}, -{81,-68,61}, -{81,-68,62}, -{81,-68,63}, -{81,-68,64}, -{81,-68,65}, -{81,-68,66}, -{81,-68,67}, -{81,-68,68}, -{81,-68,69}, -{81,-68,70}, -{81,-68,71}, -{81,-68,72}, -{81,-68,73}, -{81,-68,74}, -{81,-68,75}, -{81,-68,76}, -{81,-68,77}, -{81,-68,78}, -{81,-67,32}, -{81,-67,33}, -{81,-67,34}, -{81,-67,35}, -{81,-67,36}, -{81,-67,37}, -{81,-67,38}, -{81,-67,39}, -{81,-67,40}, -{81,-67,41}, -{81,-67,42}, -{81,-67,43}, -{81,-67,44}, -{81,-67,45}, -{81,-67,46}, -{81,-67,47}, -{81,-67,48}, -{81,-67,49}, -{81,-67,50}, -{81,-67,51}, -{81,-67,52}, -{81,-67,53}, -{81,-67,54}, -{81,-67,55}, -{81,-67,56}, -{81,-67,57}, -{81,-67,58}, -{81,-67,59}, -{81,-67,60}, -{81,-67,61}, -{81,-67,62}, -{81,-67,63}, -{81,-67,64}, -{81,-67,65}, -{81,-67,66}, -{81,-67,67}, -{81,-67,68}, -{81,-67,69}, -{81,-67,70}, -{81,-67,71}, -{81,-67,72}, -{81,-67,73}, -{81,-67,74}, -{81,-67,75}, -{81,-67,76}, -{81,-67,77}, -{81,-67,78}, -{81,-66,30}, -{81,-66,31}, -{81,-66,32}, -{81,-66,33}, -{81,-66,34}, -{81,-66,35}, -{81,-66,36}, -{81,-66,37}, -{81,-66,38}, -{81,-66,39}, -{81,-66,40}, -{81,-66,41}, -{81,-66,42}, -{81,-66,43}, -{81,-66,44}, -{81,-66,45}, -{81,-66,46}, -{81,-66,47}, -{81,-66,48}, -{81,-66,49}, -{81,-66,50}, -{81,-66,51}, -{81,-66,52}, -{81,-66,53}, -{81,-66,54}, -{81,-66,55}, -{81,-66,56}, -{81,-66,57}, -{81,-66,58}, -{81,-66,59}, -{81,-66,60}, -{81,-66,61}, -{81,-66,62}, -{81,-66,63}, -{81,-66,64}, -{81,-66,65}, -{81,-66,66}, -{81,-66,67}, -{81,-66,68}, -{81,-66,69}, -{81,-66,70}, -{81,-66,71}, -{81,-66,72}, -{81,-66,73}, -{81,-66,74}, -{81,-66,75}, -{81,-66,76}, -{81,-66,77}, -{81,-66,78}, -{81,-65,27}, -{81,-65,28}, -{81,-65,29}, -{81,-65,30}, -{81,-65,31}, -{81,-65,32}, -{81,-65,33}, -{81,-65,34}, -{81,-65,35}, -{81,-65,36}, -{81,-65,37}, -{81,-65,38}, -{81,-65,39}, -{81,-65,40}, -{81,-65,41}, -{81,-65,42}, -{81,-65,43}, -{81,-65,44}, -{81,-65,45}, -{81,-65,46}, -{81,-65,47}, -{81,-65,48}, -{81,-65,49}, -{81,-65,50}, -{81,-65,51}, -{81,-65,52}, -{81,-65,53}, -{81,-65,54}, -{81,-65,55}, -{81,-65,56}, -{81,-65,57}, -{81,-65,58}, -{81,-65,59}, -{81,-65,60}, -{81,-65,61}, -{81,-65,62}, -{81,-65,63}, -{81,-65,64}, -{81,-65,65}, -{81,-65,66}, -{81,-65,67}, -{81,-65,68}, -{81,-65,69}, -{81,-65,70}, -{81,-65,71}, -{81,-65,72}, -{81,-65,73}, -{81,-65,74}, -{81,-65,75}, -{81,-65,76}, -{81,-65,77}, -{81,-65,78}, -{81,-64,25}, -{81,-64,26}, -{81,-64,27}, -{81,-64,28}, -{81,-64,29}, -{81,-64,30}, -{81,-64,31}, -{81,-64,32}, -{81,-64,33}, -{81,-64,34}, -{81,-64,35}, -{81,-64,36}, -{81,-64,37}, -{81,-64,38}, -{81,-64,39}, -{81,-64,40}, -{81,-64,41}, -{81,-64,42}, -{81,-64,43}, -{81,-64,44}, -{81,-64,45}, -{81,-64,46}, -{81,-64,47}, -{81,-64,48}, -{81,-64,49}, -{81,-64,50}, -{81,-64,51}, -{81,-64,52}, -{81,-64,53}, -{81,-64,54}, -{81,-64,55}, -{81,-64,56}, -{81,-64,57}, -{81,-64,58}, -{81,-64,59}, -{81,-64,60}, -{81,-64,61}, -{81,-64,62}, -{81,-64,63}, -{81,-64,64}, -{81,-64,65}, -{81,-64,66}, -{81,-64,67}, -{81,-64,68}, -{81,-64,69}, -{81,-64,70}, -{81,-64,71}, -{81,-64,72}, -{81,-64,73}, -{81,-64,74}, -{81,-64,75}, -{81,-64,76}, -{81,-64,77}, -{81,-64,78}, -{81,-63,23}, -{81,-63,24}, -{81,-63,25}, -{81,-63,26}, -{81,-63,27}, -{81,-63,28}, -{81,-63,29}, -{81,-63,30}, -{81,-63,31}, -{81,-63,32}, -{81,-63,33}, -{81,-63,34}, -{81,-63,35}, -{81,-63,36}, -{81,-63,37}, -{81,-63,38}, -{81,-63,39}, -{81,-63,40}, -{81,-63,41}, -{81,-63,42}, -{81,-63,43}, -{81,-63,44}, -{81,-63,45}, -{81,-63,46}, -{81,-63,47}, -{81,-63,48}, -{81,-63,49}, -{81,-63,50}, -{81,-63,51}, -{81,-63,52}, -{81,-63,53}, -{81,-63,54}, -{81,-63,55}, -{81,-63,56}, -{81,-63,57}, -{81,-63,58}, -{81,-63,59}, -{81,-63,60}, -{81,-63,61}, -{81,-63,62}, -{81,-63,63}, -{81,-63,64}, -{81,-63,65}, -{81,-63,66}, -{81,-63,67}, -{81,-63,68}, -{81,-63,69}, -{81,-63,70}, -{81,-63,71}, -{81,-63,72}, -{81,-63,73}, -{81,-63,74}, -{81,-63,75}, -{81,-63,76}, -{81,-63,77}, -{81,-63,78}, -{81,-62,21}, -{81,-62,22}, -{81,-62,23}, -{81,-62,24}, -{81,-62,25}, -{81,-62,26}, -{81,-62,27}, -{81,-62,28}, -{81,-62,29}, -{81,-62,30}, -{81,-62,31}, -{81,-62,32}, -{81,-62,33}, -{81,-62,34}, -{81,-62,35}, -{81,-62,36}, -{81,-62,37}, -{81,-62,38}, -{81,-62,39}, -{81,-62,40}, -{81,-62,41}, -{81,-62,42}, -{81,-62,43}, -{81,-62,44}, -{81,-62,45}, -{81,-62,46}, -{81,-62,47}, -{81,-62,48}, -{81,-62,49}, -{81,-62,50}, -{81,-62,51}, -{81,-62,52}, -{81,-62,53}, -{81,-62,54}, -{81,-62,55}, -{81,-62,56}, -{81,-62,57}, -{81,-62,58}, -{81,-62,59}, -{81,-62,60}, -{81,-62,61}, -{81,-62,62}, -{81,-62,63}, -{81,-62,64}, -{81,-62,65}, -{81,-62,66}, -{81,-62,67}, -{81,-62,68}, -{81,-62,69}, -{81,-62,70}, -{81,-62,71}, -{81,-62,72}, -{81,-62,73}, -{81,-62,74}, -{81,-62,75}, -{81,-62,76}, -{81,-62,77}, -{81,-62,78}, -{81,-61,19}, -{81,-61,20}, -{81,-61,21}, -{81,-61,22}, -{81,-61,23}, -{81,-61,24}, -{81,-61,25}, -{81,-61,26}, -{81,-61,27}, -{81,-61,28}, -{81,-61,29}, -{81,-61,30}, -{81,-61,31}, -{81,-61,32}, -{81,-61,33}, -{81,-61,34}, -{81,-61,35}, -{81,-61,36}, -{81,-61,37}, -{81,-61,38}, -{81,-61,39}, -{81,-61,40}, -{81,-61,41}, -{81,-61,42}, -{81,-61,43}, -{81,-61,44}, -{81,-61,45}, -{81,-61,46}, -{81,-61,47}, -{81,-61,48}, -{81,-61,49}, -{81,-61,50}, -{81,-61,51}, -{81,-61,52}, -{81,-61,53}, -{81,-61,54}, -{81,-61,55}, -{81,-61,56}, -{81,-61,57}, -{81,-61,58}, -{81,-61,59}, -{81,-61,60}, -{81,-61,61}, -{81,-61,62}, -{81,-61,63}, -{81,-61,64}, -{81,-61,65}, -{81,-61,66}, -{81,-61,67}, -{81,-61,68}, -{81,-61,69}, -{81,-61,70}, -{81,-61,71}, -{81,-61,72}, -{81,-61,73}, -{81,-61,74}, -{81,-61,75}, -{81,-61,76}, -{81,-61,77}, -{81,-61,78}, -{81,-60,17}, -{81,-60,18}, -{81,-60,19}, -{81,-60,20}, -{81,-60,21}, -{81,-60,22}, -{81,-60,23}, -{81,-60,24}, -{81,-60,25}, -{81,-60,26}, -{81,-60,27}, -{81,-60,28}, -{81,-60,29}, -{81,-60,30}, -{81,-60,31}, -{81,-60,32}, -{81,-60,33}, -{81,-60,34}, -{81,-60,35}, -{81,-60,36}, -{81,-60,37}, -{81,-60,38}, -{81,-60,39}, -{81,-60,40}, -{81,-60,41}, -{81,-60,42}, -{81,-60,43}, -{81,-60,44}, -{81,-60,45}, -{81,-60,46}, -{81,-60,47}, -{81,-60,48}, -{81,-60,49}, -{81,-60,50}, -{81,-60,51}, -{81,-60,52}, -{81,-60,53}, -{81,-60,54}, -{81,-60,55}, -{81,-60,56}, -{81,-60,57}, -{81,-60,58}, -{81,-60,59}, -{81,-60,60}, -{81,-60,61}, -{81,-60,62}, -{81,-60,63}, -{81,-60,64}, -{81,-60,65}, -{81,-60,66}, -{81,-60,67}, -{81,-60,68}, -{81,-60,69}, -{81,-60,70}, -{81,-60,71}, -{81,-60,72}, -{81,-60,73}, -{81,-60,74}, -{81,-60,75}, -{81,-60,76}, -{81,-60,77}, -{81,-60,78}, -{81,-59,15}, -{81,-59,16}, -{81,-59,17}, -{81,-59,18}, -{81,-59,19}, -{81,-59,20}, -{81,-59,21}, -{81,-59,22}, -{81,-59,23}, -{81,-59,24}, -{81,-59,25}, -{81,-59,26}, -{81,-59,27}, -{81,-59,28}, -{81,-59,29}, -{81,-59,30}, -{81,-59,31}, -{81,-59,32}, -{81,-59,33}, -{81,-59,34}, -{81,-59,35}, -{81,-59,36}, -{81,-59,37}, -{81,-59,38}, -{81,-59,39}, -{81,-59,40}, -{81,-59,41}, -{81,-59,42}, -{81,-59,43}, -{81,-59,44}, -{81,-59,45}, -{81,-59,46}, -{81,-59,47}, -{81,-59,48}, -{81,-59,49}, -{81,-59,50}, -{81,-59,51}, -{81,-59,52}, -{81,-59,53}, -{81,-59,54}, -{81,-59,55}, -{81,-59,56}, -{81,-59,57}, -{81,-59,58}, -{81,-59,59}, -{81,-59,60}, -{81,-59,61}, -{81,-59,62}, -{81,-59,63}, -{81,-59,64}, -{81,-59,65}, -{81,-59,66}, -{81,-59,67}, -{81,-59,68}, -{81,-59,69}, -{81,-59,70}, -{81,-59,71}, -{81,-59,72}, -{81,-59,73}, -{81,-59,74}, -{81,-59,75}, -{81,-59,76}, -{81,-59,77}, -{81,-59,78}, -{81,-58,13}, -{81,-58,14}, -{81,-58,15}, -{81,-58,16}, -{81,-58,17}, -{81,-58,18}, -{81,-58,19}, -{81,-58,20}, -{81,-58,21}, -{81,-58,22}, -{81,-58,23}, -{81,-58,24}, -{81,-58,25}, -{81,-58,26}, -{81,-58,27}, -{81,-58,28}, -{81,-58,29}, -{81,-58,30}, -{81,-58,31}, -{81,-58,32}, -{81,-58,33}, -{81,-58,34}, -{81,-58,35}, -{81,-58,36}, -{81,-58,37}, -{81,-58,38}, -{81,-58,39}, -{81,-58,40}, -{81,-58,41}, -{81,-58,42}, -{81,-58,43}, -{81,-58,44}, -{81,-58,45}, -{81,-58,46}, -{81,-58,47}, -{81,-58,48}, -{81,-58,49}, -{81,-58,50}, -{81,-58,51}, -{81,-58,52}, -{81,-58,53}, -{81,-58,54}, -{81,-58,55}, -{81,-58,56}, -{81,-58,57}, -{81,-58,58}, -{81,-58,59}, -{81,-58,60}, -{81,-58,61}, -{81,-58,62}, -{81,-58,63}, -{81,-58,64}, -{81,-58,65}, -{81,-58,66}, -{81,-58,67}, -{81,-58,68}, -{81,-58,69}, -{81,-58,70}, -{81,-58,71}, -{81,-58,72}, -{81,-58,73}, -{81,-58,74}, -{81,-58,75}, -{81,-58,76}, -{81,-58,77}, -{81,-58,78}, -{81,-57,11}, -{81,-57,12}, -{81,-57,13}, -{81,-57,14}, -{81,-57,15}, -{81,-57,16}, -{81,-57,17}, -{81,-57,18}, -{81,-57,19}, -{81,-57,20}, -{81,-57,21}, -{81,-57,22}, -{81,-57,23}, -{81,-57,24}, -{81,-57,25}, -{81,-57,26}, -{81,-57,27}, -{81,-57,28}, -{81,-57,29}, -{81,-57,30}, -{81,-57,31}, -{81,-57,32}, -{81,-57,33}, -{81,-57,34}, -{81,-57,35}, -{81,-57,36}, -{81,-57,37}, -{81,-57,38}, -{81,-57,39}, -{81,-57,40}, -{81,-57,41}, -{81,-57,42}, -{81,-57,43}, -{81,-57,44}, -{81,-57,45}, -{81,-57,46}, -{81,-57,47}, -{81,-57,48}, -{81,-57,49}, -{81,-57,50}, -{81,-57,51}, -{81,-57,52}, -{81,-57,53}, -{81,-57,54}, -{81,-57,55}, -{81,-57,56}, -{81,-57,57}, -{81,-57,58}, -{81,-57,59}, -{81,-57,60}, -{81,-57,61}, -{81,-57,62}, -{81,-57,63}, -{81,-57,64}, -{81,-57,65}, -{81,-57,66}, -{81,-57,67}, -{81,-57,68}, -{81,-57,69}, -{81,-57,70}, -{81,-57,71}, -{81,-57,72}, -{81,-57,73}, -{81,-57,74}, -{81,-57,75}, -{81,-57,76}, -{81,-57,77}, -{81,-57,78}, -{81,-57,79}, -{81,-56,9}, -{81,-56,10}, -{81,-56,11}, -{81,-56,12}, -{81,-56,13}, -{81,-56,14}, -{81,-56,15}, -{81,-56,16}, -{81,-56,17}, -{81,-56,18}, -{81,-56,19}, -{81,-56,20}, -{81,-56,21}, -{81,-56,22}, -{81,-56,23}, -{81,-56,24}, -{81,-56,25}, -{81,-56,26}, -{81,-56,27}, -{81,-56,28}, -{81,-56,29}, -{81,-56,30}, -{81,-56,31}, -{81,-56,32}, -{81,-56,33}, -{81,-56,34}, -{81,-56,35}, -{81,-56,36}, -{81,-56,37}, -{81,-56,38}, -{81,-56,39}, -{81,-56,40}, -{81,-56,41}, -{81,-56,42}, -{81,-56,43}, -{81,-56,44}, -{81,-56,45}, -{81,-56,46}, -{81,-56,47}, -{81,-56,48}, -{81,-56,49}, -{81,-56,50}, -{81,-56,51}, -{81,-56,52}, -{81,-56,53}, -{81,-56,54}, -{81,-56,55}, -{81,-56,56}, -{81,-56,57}, -{81,-56,58}, -{81,-56,59}, -{81,-56,60}, -{81,-56,61}, -{81,-56,62}, -{81,-56,63}, -{81,-56,64}, -{81,-56,65}, -{81,-56,66}, -{81,-56,67}, -{81,-56,68}, -{81,-56,69}, -{81,-56,70}, -{81,-56,71}, -{81,-56,72}, -{81,-56,73}, -{81,-56,74}, -{81,-56,75}, -{81,-56,76}, -{81,-56,77}, -{81,-56,78}, -{81,-56,79}, -{81,-55,7}, -{81,-55,8}, -{81,-55,9}, -{81,-55,10}, -{81,-55,11}, -{81,-55,12}, -{81,-55,13}, -{81,-55,14}, -{81,-55,15}, -{81,-55,16}, -{81,-55,17}, -{81,-55,18}, -{81,-55,19}, -{81,-55,20}, -{81,-55,21}, -{81,-55,22}, -{81,-55,23}, -{81,-55,24}, -{81,-55,25}, -{81,-55,26}, -{81,-55,27}, -{81,-55,28}, -{81,-55,29}, -{81,-55,30}, -{81,-55,31}, -{81,-55,32}, -{81,-55,33}, -{81,-55,34}, -{81,-55,35}, -{81,-55,36}, -{81,-55,37}, -{81,-55,38}, -{81,-55,39}, -{81,-55,40}, -{81,-55,41}, -{81,-55,42}, -{81,-55,43}, -{81,-55,44}, -{81,-55,45}, -{81,-55,46}, -{81,-55,47}, -{81,-55,48}, -{81,-55,49}, -{81,-55,50}, -{81,-55,51}, -{81,-55,52}, -{81,-55,53}, -{81,-55,54}, -{81,-55,55}, -{81,-55,56}, -{81,-55,57}, -{81,-55,58}, -{81,-55,59}, -{81,-55,60}, -{81,-55,61}, -{81,-55,62}, -{81,-55,63}, -{81,-55,64}, -{81,-55,65}, -{81,-55,66}, -{81,-55,67}, -{81,-55,68}, -{81,-55,69}, -{81,-55,70}, -{81,-55,71}, -{81,-55,72}, -{81,-55,73}, -{81,-55,74}, -{81,-55,75}, -{81,-55,76}, -{81,-55,77}, -{81,-55,78}, -{81,-55,79}, -{81,-54,5}, -{81,-54,6}, -{81,-54,7}, -{81,-54,8}, -{81,-54,9}, -{81,-54,10}, -{81,-54,11}, -{81,-54,12}, -{81,-54,13}, -{81,-54,14}, -{81,-54,15}, -{81,-54,16}, -{81,-54,17}, -{81,-54,18}, -{81,-54,19}, -{81,-54,20}, -{81,-54,21}, -{81,-54,22}, -{81,-54,23}, -{81,-54,24}, -{81,-54,25}, -{81,-54,26}, -{81,-54,27}, -{81,-54,28}, -{81,-54,29}, -{81,-54,30}, -{81,-54,31}, -{81,-54,32}, -{81,-54,33}, -{81,-54,34}, -{81,-54,35}, -{81,-54,36}, -{81,-54,37}, -{81,-54,38}, -{81,-54,39}, -{81,-54,40}, -{81,-54,41}, -{81,-54,42}, -{81,-54,43}, -{81,-54,44}, -{81,-54,45}, -{81,-54,46}, -{81,-54,47}, -{81,-54,48}, -{81,-54,49}, -{81,-54,50}, -{81,-54,51}, -{81,-54,52}, -{81,-54,53}, -{81,-54,54}, -{81,-54,55}, -{81,-54,56}, -{81,-54,57}, -{81,-54,58}, -{81,-54,59}, -{81,-54,60}, -{81,-54,61}, -{81,-54,62}, -{81,-54,63}, -{81,-54,64}, -{81,-54,65}, -{81,-54,66}, -{81,-54,67}, -{81,-54,68}, -{81,-54,69}, -{81,-54,70}, -{81,-54,71}, -{81,-54,72}, -{81,-54,73}, -{81,-54,74}, -{81,-54,75}, -{81,-54,76}, -{81,-54,77}, -{81,-54,78}, -{81,-54,79}, -{81,-53,3}, -{81,-53,4}, -{81,-53,5}, -{81,-53,6}, -{81,-53,7}, -{81,-53,8}, -{81,-53,9}, -{81,-53,10}, -{81,-53,11}, -{81,-53,12}, -{81,-53,13}, -{81,-53,14}, -{81,-53,15}, -{81,-53,16}, -{81,-53,17}, -{81,-53,18}, -{81,-53,19}, -{81,-53,20}, -{81,-53,21}, -{81,-53,22}, -{81,-53,23}, -{81,-53,24}, -{81,-53,25}, -{81,-53,26}, -{81,-53,27}, -{81,-53,28}, -{81,-53,29}, -{81,-53,30}, -{81,-53,31}, -{81,-53,32}, -{81,-53,33}, -{81,-53,34}, -{81,-53,35}, -{81,-53,36}, -{81,-53,37}, -{81,-53,38}, -{81,-53,39}, -{81,-53,40}, -{81,-53,41}, -{81,-53,42}, -{81,-53,43}, -{81,-53,44}, -{81,-53,45}, -{81,-53,46}, -{81,-53,47}, -{81,-53,48}, -{81,-53,49}, -{81,-53,50}, -{81,-53,51}, -{81,-53,52}, -{81,-53,53}, -{81,-53,54}, -{81,-53,55}, -{81,-53,56}, -{81,-53,57}, -{81,-53,58}, -{81,-53,59}, -{81,-53,60}, -{81,-53,61}, -{81,-53,62}, -{81,-53,63}, -{81,-53,64}, -{81,-53,65}, -{81,-53,66}, -{81,-53,67}, -{81,-53,68}, -{81,-53,69}, -{81,-53,70}, -{81,-53,71}, -{81,-53,72}, -{81,-53,73}, -{81,-53,74}, -{81,-53,75}, -{81,-53,76}, -{81,-53,77}, -{81,-53,78}, -{81,-53,79}, -{81,-52,1}, -{81,-52,2}, -{81,-52,3}, -{81,-52,4}, -{81,-52,5}, -{81,-52,6}, -{81,-52,7}, -{81,-52,8}, -{81,-52,9}, -{81,-52,10}, -{81,-52,11}, -{81,-52,12}, -{81,-52,13}, -{81,-52,14}, -{81,-52,15}, -{81,-52,16}, -{81,-52,17}, -{81,-52,18}, -{81,-52,19}, -{81,-52,20}, -{81,-52,21}, -{81,-52,22}, -{81,-52,23}, -{81,-52,24}, -{81,-52,25}, -{81,-52,26}, -{81,-52,27}, -{81,-52,28}, -{81,-52,29}, -{81,-52,30}, -{81,-52,31}, -{81,-52,32}, -{81,-52,33}, -{81,-52,34}, -{81,-52,35}, -{81,-52,36}, -{81,-52,37}, -{81,-52,38}, -{81,-52,39}, -{81,-52,40}, -{81,-52,41}, -{81,-52,42}, -{81,-52,43}, -{81,-52,44}, -{81,-52,45}, -{81,-52,46}, -{81,-52,47}, -{81,-52,48}, -{81,-52,49}, -{81,-52,50}, -{81,-52,51}, -{81,-52,52}, -{81,-52,53}, -{81,-52,54}, -{81,-52,55}, -{81,-52,56}, -{81,-52,57}, -{81,-52,58}, -{81,-52,59}, -{81,-52,60}, -{81,-52,61}, -{81,-52,62}, -{81,-52,63}, -{81,-52,64}, -{81,-52,65}, -{81,-52,66}, -{81,-52,67}, -{81,-52,68}, -{81,-52,69}, -{81,-52,70}, -{81,-52,71}, -{81,-52,72}, -{81,-52,73}, -{81,-52,74}, -{81,-52,75}, -{81,-52,76}, -{81,-52,77}, -{81,-52,78}, -{81,-52,79}, -{81,-51,0}, -{81,-51,1}, -{81,-51,2}, -{81,-51,3}, -{81,-51,4}, -{81,-51,5}, -{81,-51,6}, -{81,-51,7}, -{81,-51,8}, -{81,-51,9}, -{81,-51,10}, -{81,-51,11}, -{81,-51,12}, -{81,-51,13}, -{81,-51,14}, -{81,-51,15}, -{81,-51,16}, -{81,-51,17}, -{81,-51,18}, -{81,-51,19}, -{81,-51,20}, -{81,-51,21}, -{81,-51,22}, -{81,-51,23}, -{81,-51,24}, -{81,-51,25}, -{81,-51,26}, -{81,-51,27}, -{81,-51,28}, -{81,-51,29}, -{81,-51,30}, -{81,-51,31}, -{81,-51,32}, -{81,-51,33}, -{81,-51,34}, -{81,-51,35}, -{81,-51,36}, -{81,-51,37}, -{81,-51,38}, -{81,-51,39}, -{81,-51,40}, -{81,-51,41}, -{81,-51,42}, -{81,-51,43}, -{81,-51,44}, -{81,-51,45}, -{81,-51,46}, -{81,-51,47}, -{81,-51,48}, -{81,-51,49}, -{81,-51,50}, -{81,-51,51}, -{81,-51,52}, -{81,-51,53}, -{81,-51,54}, -{81,-51,55}, -{81,-51,56}, -{81,-51,57}, -{81,-51,58}, -{81,-51,59}, -{81,-51,60}, -{81,-51,61}, -{81,-51,62}, -{81,-51,63}, -{81,-51,64}, -{81,-51,65}, -{81,-51,66}, -{81,-51,67}, -{81,-51,68}, -{81,-51,69}, -{81,-51,70}, -{81,-51,71}, -{81,-51,72}, -{81,-51,73}, -{81,-51,74}, -{81,-51,75}, -{81,-51,76}, -{81,-51,77}, -{81,-51,78}, -{81,-51,79}, -{81,-50,-2}, -{81,-50,-1}, -{81,-50,0}, -{81,-50,1}, -{81,-50,2}, -{81,-50,3}, -{81,-50,4}, -{81,-50,5}, -{81,-50,6}, -{81,-50,7}, -{81,-50,8}, -{81,-50,9}, -{81,-50,10}, -{81,-50,11}, -{81,-50,12}, -{81,-50,13}, -{81,-50,14}, -{81,-50,15}, -{81,-50,16}, -{81,-50,17}, -{81,-50,18}, -{81,-50,19}, -{81,-50,20}, -{81,-50,21}, -{81,-50,22}, -{81,-50,23}, -{81,-50,24}, -{81,-50,25}, -{81,-50,26}, -{81,-50,27}, -{81,-50,28}, -{81,-50,29}, -{81,-50,30}, -{81,-50,31}, -{81,-50,32}, -{81,-50,33}, -{81,-50,34}, -{81,-50,35}, -{81,-50,36}, -{81,-50,37}, -{81,-50,38}, -{81,-50,39}, -{81,-50,40}, -{81,-50,41}, -{81,-50,42}, -{81,-50,43}, -{81,-50,44}, -{81,-50,45}, -{81,-50,46}, -{81,-50,47}, -{81,-50,48}, -{81,-50,49}, -{81,-50,50}, -{81,-50,51}, -{81,-50,52}, -{81,-50,53}, -{81,-50,54}, -{81,-50,55}, -{81,-50,56}, -{81,-50,57}, -{81,-50,58}, -{81,-50,59}, -{81,-50,60}, -{81,-50,61}, -{81,-50,62}, -{81,-50,63}, -{81,-50,64}, -{81,-50,65}, -{81,-50,66}, -{81,-50,67}, -{81,-50,68}, -{81,-50,69}, -{81,-50,70}, -{81,-50,71}, -{81,-50,72}, -{81,-50,73}, -{81,-50,74}, -{81,-50,75}, -{81,-50,76}, -{81,-50,77}, -{81,-50,78}, -{81,-50,79}, -{81,-49,-4}, -{81,-49,-3}, -{81,-49,-2}, -{81,-49,-1}, -{81,-49,0}, -{81,-49,1}, -{81,-49,2}, -{81,-49,3}, -{81,-49,4}, -{81,-49,5}, -{81,-49,6}, -{81,-49,7}, -{81,-49,8}, -{81,-49,9}, -{81,-49,10}, -{81,-49,11}, -{81,-49,12}, -{81,-49,13}, -{81,-49,14}, -{81,-49,15}, -{81,-49,16}, -{81,-49,17}, -{81,-49,18}, -{81,-49,19}, -{81,-49,20}, -{81,-49,21}, -{81,-49,22}, -{81,-49,23}, -{81,-49,24}, -{81,-49,25}, -{81,-49,26}, -{81,-49,27}, -{81,-49,28}, -{81,-49,29}, -{81,-49,30}, -{81,-49,31}, -{81,-49,32}, -{81,-49,33}, -{81,-49,34}, -{81,-49,35}, -{81,-49,36}, -{81,-49,37}, -{81,-49,38}, -{81,-49,39}, -{81,-49,40}, -{81,-49,41}, -{81,-49,42}, -{81,-49,43}, -{81,-49,44}, -{81,-49,45}, -{81,-49,46}, -{81,-49,47}, -{81,-49,48}, -{81,-49,49}, -{81,-49,50}, -{81,-49,51}, -{81,-49,52}, -{81,-49,53}, -{81,-49,54}, -{81,-49,55}, -{81,-49,56}, -{81,-49,57}, -{81,-49,58}, -{81,-49,59}, -{81,-49,60}, -{81,-49,61}, -{81,-49,62}, -{81,-49,63}, -{81,-49,64}, -{81,-49,65}, -{81,-49,66}, -{81,-49,67}, -{81,-49,68}, -{81,-49,69}, -{81,-49,70}, -{81,-49,71}, -{81,-49,72}, -{81,-49,73}, -{81,-49,74}, -{81,-49,75}, -{81,-49,76}, -{81,-49,77}, -{81,-49,78}, -{81,-49,79}, -{81,-48,-5}, -{81,-48,-4}, -{81,-48,-3}, -{81,-48,-2}, -{81,-48,-1}, -{81,-48,0}, -{81,-48,1}, -{81,-48,2}, -{81,-48,3}, -{81,-48,4}, -{81,-48,5}, -{81,-48,6}, -{81,-48,7}, -{81,-48,8}, -{81,-48,9}, -{81,-48,10}, -{81,-48,11}, -{81,-48,12}, -{81,-48,13}, -{81,-48,14}, -{81,-48,15}, -{81,-48,16}, -{81,-48,17}, -{81,-48,18}, -{81,-48,19}, -{81,-48,20}, -{81,-48,21}, -{81,-48,22}, -{81,-48,23}, -{81,-48,24}, -{81,-48,25}, -{81,-48,26}, -{81,-48,27}, -{81,-48,28}, -{81,-48,29}, -{81,-48,30}, -{81,-48,31}, -{81,-48,32}, -{81,-48,33}, -{81,-48,34}, -{81,-48,35}, -{81,-48,36}, -{81,-48,37}, -{81,-48,38}, -{81,-48,39}, -{81,-48,40}, -{81,-48,41}, -{81,-48,42}, -{81,-48,43}, -{81,-48,44}, -{81,-48,45}, -{81,-48,46}, -{81,-48,47}, -{81,-48,48}, -{81,-48,49}, -{81,-48,50}, -{81,-48,51}, -{81,-48,52}, -{81,-48,53}, -{81,-48,54}, -{81,-48,55}, -{81,-48,56}, -{81,-48,57}, -{81,-48,58}, -{81,-48,59}, -{81,-48,60}, -{81,-48,61}, -{81,-48,62}, -{81,-48,63}, -{81,-48,64}, -{81,-48,65}, -{81,-48,66}, -{81,-48,67}, -{81,-48,68}, -{81,-48,69}, -{81,-48,70}, -{81,-48,71}, -{81,-48,72}, -{81,-48,73}, -{81,-48,74}, -{81,-48,75}, -{81,-48,76}, -{81,-48,77}, -{81,-48,78}, -{81,-48,79}, -{81,-47,-7}, -{81,-47,-6}, -{81,-47,-5}, -{81,-47,-4}, -{81,-47,-3}, -{81,-47,-2}, -{81,-47,-1}, -{81,-47,0}, -{81,-47,1}, -{81,-47,2}, -{81,-47,3}, -{81,-47,4}, -{81,-47,5}, -{81,-47,6}, -{81,-47,7}, -{81,-47,8}, -{81,-47,9}, -{81,-47,10}, -{81,-47,11}, -{81,-47,12}, -{81,-47,13}, -{81,-47,14}, -{81,-47,15}, -{81,-47,16}, -{81,-47,17}, -{81,-47,18}, -{81,-47,19}, -{81,-47,20}, -{81,-47,21}, -{81,-47,22}, -{81,-47,23}, -{81,-47,24}, -{81,-47,25}, -{81,-47,26}, -{81,-47,27}, -{81,-47,28}, -{81,-47,29}, -{81,-47,30}, -{81,-47,31}, -{81,-47,32}, -{81,-47,33}, -{81,-47,34}, -{81,-47,35}, -{81,-47,36}, -{81,-47,37}, -{81,-47,38}, -{81,-47,39}, -{81,-47,40}, -{81,-47,41}, -{81,-47,42}, -{81,-47,43}, -{81,-47,44}, -{81,-47,45}, -{81,-47,46}, -{81,-47,47}, -{81,-47,48}, -{81,-47,49}, -{81,-47,50}, -{81,-47,51}, -{81,-47,52}, -{81,-47,53}, -{81,-47,54}, -{81,-47,55}, -{81,-47,56}, -{81,-47,57}, -{81,-47,58}, -{81,-47,59}, -{81,-47,60}, -{81,-47,61}, -{81,-47,62}, -{81,-47,63}, -{81,-47,64}, -{81,-47,65}, -{81,-47,66}, -{81,-47,67}, -{81,-47,68}, -{81,-47,69}, -{81,-47,70}, -{81,-47,71}, -{81,-47,72}, -{81,-47,73}, -{81,-47,74}, -{81,-47,75}, -{81,-47,76}, -{81,-47,77}, -{81,-47,78}, -{81,-47,79}, -{81,-46,-9}, -{81,-46,-8}, -{81,-46,-7}, -{81,-46,-6}, -{81,-46,-5}, -{81,-46,-4}, -{81,-46,-3}, -{81,-46,-2}, -{81,-46,-1}, -{81,-46,0}, -{81,-46,1}, -{81,-46,2}, -{81,-46,3}, -{81,-46,4}, -{81,-46,5}, -{81,-46,6}, -{81,-46,7}, -{81,-46,8}, -{81,-46,9}, -{81,-46,10}, -{81,-46,11}, -{81,-46,12}, -{81,-46,13}, -{81,-46,14}, -{81,-46,15}, -{81,-46,16}, -{81,-46,17}, -{81,-46,18}, -{81,-46,19}, -{81,-46,20}, -{81,-46,21}, -{81,-46,22}, -{81,-46,23}, -{81,-46,24}, -{81,-46,25}, -{81,-46,26}, -{81,-46,27}, -{81,-46,28}, -{81,-46,29}, -{81,-46,30}, -{81,-46,31}, -{81,-46,32}, -{81,-46,33}, -{81,-46,34}, -{81,-46,35}, -{81,-46,36}, -{81,-46,37}, -{81,-46,38}, -{81,-46,39}, -{81,-46,40}, -{81,-46,41}, -{81,-46,42}, -{81,-46,43}, -{81,-46,44}, -{81,-46,45}, -{81,-46,46}, -{81,-46,47}, -{81,-46,48}, -{81,-46,49}, -{81,-46,50}, -{81,-46,51}, -{81,-46,52}, -{81,-46,53}, -{81,-46,54}, -{81,-46,55}, -{81,-46,56}, -{81,-46,57}, -{81,-46,58}, -{81,-46,59}, -{81,-46,60}, -{81,-46,61}, -{81,-46,62}, -{81,-46,63}, -{81,-46,64}, -{81,-46,65}, -{81,-46,66}, -{81,-46,67}, -{81,-46,68}, -{81,-46,69}, -{81,-46,70}, -{81,-46,71}, -{81,-46,72}, -{81,-46,73}, -{81,-46,74}, -{81,-46,75}, -{81,-46,76}, -{81,-46,77}, -{81,-46,78}, -{81,-46,79}, -{81,-45,-10}, -{81,-45,-9}, -{81,-45,-8}, -{81,-45,-7}, -{81,-45,-6}, -{81,-45,-5}, -{81,-45,-4}, -{81,-45,-3}, -{81,-45,-2}, -{81,-45,-1}, -{81,-45,0}, -{81,-45,1}, -{81,-45,2}, -{81,-45,3}, -{81,-45,4}, -{81,-45,5}, -{81,-45,6}, -{81,-45,7}, -{81,-45,8}, -{81,-45,9}, -{81,-45,10}, -{81,-45,11}, -{81,-45,12}, -{81,-45,13}, -{81,-45,14}, -{81,-45,15}, -{81,-45,16}, -{81,-45,17}, -{81,-45,18}, -{81,-45,19}, -{81,-45,20}, -{81,-45,21}, -{81,-45,22}, -{81,-45,23}, -{81,-45,24}, -{81,-45,25}, -{81,-45,26}, -{81,-45,27}, -{81,-45,28}, -{81,-45,29}, -{81,-45,30}, -{81,-45,31}, -{81,-45,32}, -{81,-45,33}, -{81,-45,34}, -{81,-45,35}, -{81,-45,36}, -{81,-45,37}, -{81,-45,38}, -{81,-45,39}, -{81,-45,40}, -{81,-45,41}, -{81,-45,42}, -{81,-45,43}, -{81,-45,44}, -{81,-45,45}, -{81,-45,46}, -{81,-45,47}, -{81,-45,48}, -{81,-45,49}, -{81,-45,50}, -{81,-45,51}, -{81,-45,52}, -{81,-45,53}, -{81,-45,54}, -{81,-45,55}, -{81,-45,56}, -{81,-45,57}, -{81,-45,58}, -{81,-45,59}, -{81,-45,60}, -{81,-45,61}, -{81,-45,62}, -{81,-45,63}, -{81,-45,64}, -{81,-45,65}, -{81,-45,66}, -{81,-45,67}, -{81,-45,68}, -{81,-45,69}, -{81,-45,70}, -{81,-45,71}, -{81,-45,72}, -{81,-45,73}, -{81,-45,74}, -{81,-45,75}, -{81,-45,76}, -{81,-45,77}, -{81,-45,78}, -{81,-45,79}, -{81,-44,-12}, -{81,-44,-11}, -{81,-44,-10}, -{81,-44,-9}, -{81,-44,-8}, -{81,-44,-7}, -{81,-44,-6}, -{81,-44,-5}, -{81,-44,-4}, -{81,-44,-3}, -{81,-44,-2}, -{81,-44,-1}, -{81,-44,0}, -{81,-44,1}, -{81,-44,2}, -{81,-44,3}, -{81,-44,4}, -{81,-44,5}, -{81,-44,6}, -{81,-44,7}, -{81,-44,8}, -{81,-44,9}, -{81,-44,10}, -{81,-44,11}, -{81,-44,12}, -{81,-44,13}, -{81,-44,14}, -{81,-44,15}, -{81,-44,16}, -{81,-44,17}, -{81,-44,18}, -{81,-44,19}, -{81,-44,20}, -{81,-44,21}, -{81,-44,22}, -{81,-44,23}, -{81,-44,24}, -{81,-44,25}, -{81,-44,26}, -{81,-44,27}, -{81,-44,28}, -{81,-44,29}, -{81,-44,30}, -{81,-44,31}, -{81,-44,32}, -{81,-44,33}, -{81,-44,34}, -{81,-44,35}, -{81,-44,36}, -{81,-44,37}, -{81,-44,38}, -{81,-44,39}, -{81,-44,40}, -{81,-44,41}, -{81,-44,42}, -{81,-44,43}, -{81,-44,44}, -{81,-44,45}, -{81,-44,46}, -{81,-44,47}, -{81,-44,48}, -{81,-44,49}, -{81,-44,50}, -{81,-44,51}, -{81,-44,52}, -{81,-44,53}, -{81,-44,54}, -{81,-44,55}, -{81,-44,56}, -{81,-44,57}, -{81,-44,58}, -{81,-44,59}, -{81,-44,60}, -{81,-44,61}, -{81,-44,62}, -{81,-44,63}, -{81,-44,64}, -{81,-44,65}, -{81,-44,66}, -{81,-44,67}, -{81,-44,68}, -{81,-44,69}, -{81,-44,70}, -{81,-44,71}, -{81,-44,72}, -{81,-44,73}, -{81,-44,74}, -{81,-44,75}, -{81,-44,76}, -{81,-44,77}, -{81,-44,78}, -{81,-44,79}, -{81,-43,-13}, -{81,-43,-12}, -{81,-43,-11}, -{81,-43,-10}, -{81,-43,-9}, -{81,-43,-8}, -{81,-43,-7}, -{81,-43,-6}, -{81,-43,-5}, -{81,-43,-4}, -{81,-43,-3}, -{81,-43,-2}, -{81,-43,-1}, -{81,-43,0}, -{81,-43,1}, -{81,-43,2}, -{81,-43,3}, -{81,-43,4}, -{81,-43,5}, -{81,-43,6}, -{81,-43,7}, -{81,-43,8}, -{81,-43,9}, -{81,-43,10}, -{81,-43,11}, -{81,-43,12}, -{81,-43,13}, -{81,-43,14}, -{81,-43,15}, -{81,-43,16}, -{81,-43,17}, -{81,-43,18}, -{81,-43,19}, -{81,-43,20}, -{81,-43,21}, -{81,-43,22}, -{81,-43,23}, -{81,-43,24}, -{81,-43,25}, -{81,-43,26}, -{81,-43,27}, -{81,-43,28}, -{81,-43,29}, -{81,-43,30}, -{81,-43,31}, -{81,-43,32}, -{81,-43,33}, -{81,-43,34}, -{81,-43,35}, -{81,-43,36}, -{81,-43,37}, -{81,-43,38}, -{81,-43,39}, -{81,-43,40}, -{81,-43,41}, -{81,-43,42}, -{81,-43,43}, -{81,-43,44}, -{81,-43,45}, -{81,-43,46}, -{81,-43,47}, -{81,-43,48}, -{81,-43,49}, -{81,-43,50}, -{81,-43,51}, -{81,-43,52}, -{81,-43,53}, -{81,-43,54}, -{81,-43,55}, -{81,-43,56}, -{81,-43,57}, -{81,-43,58}, -{81,-43,59}, -{81,-43,60}, -{81,-43,61}, -{81,-43,62}, -{81,-43,63}, -{81,-43,64}, -{81,-43,65}, -{81,-43,66}, -{81,-43,67}, -{81,-43,68}, -{81,-43,69}, -{81,-43,70}, -{81,-43,71}, -{81,-43,72}, -{81,-43,73}, -{81,-43,74}, -{81,-43,75}, -{81,-43,76}, -{81,-43,77}, -{81,-43,78}, -{81,-43,79}, -{81,-42,-15}, -{81,-42,-14}, -{81,-42,-13}, -{81,-42,-12}, -{81,-42,-11}, -{81,-42,-10}, -{81,-42,-9}, -{81,-42,-8}, -{81,-42,-7}, -{81,-42,-6}, -{81,-42,-5}, -{81,-42,-4}, -{81,-42,-3}, -{81,-42,-2}, -{81,-42,-1}, -{81,-42,0}, -{81,-42,1}, -{81,-42,2}, -{81,-42,3}, -{81,-42,4}, -{81,-42,5}, -{81,-42,6}, -{81,-42,7}, -{81,-42,8}, -{81,-42,9}, -{81,-42,10}, -{81,-42,11}, -{81,-42,12}, -{81,-42,13}, -{81,-42,14}, -{81,-42,15}, -{81,-42,16}, -{81,-42,17}, -{81,-42,18}, -{81,-42,19}, -{81,-42,20}, -{81,-42,21}, -{81,-42,22}, -{81,-42,23}, -{81,-42,24}, -{81,-42,25}, -{81,-42,26}, -{81,-42,27}, -{81,-42,28}, -{81,-42,29}, -{81,-42,30}, -{81,-42,31}, -{81,-42,32}, -{81,-42,33}, -{81,-42,34}, -{81,-42,35}, -{81,-42,36}, -{81,-42,37}, -{81,-42,38}, -{81,-42,39}, -{81,-42,40}, -{81,-42,41}, -{81,-42,42}, -{81,-42,43}, -{81,-42,44}, -{81,-42,45}, -{81,-42,46}, -{81,-42,47}, -{81,-42,48}, -{81,-42,49}, -{81,-42,50}, -{81,-42,51}, -{81,-42,52}, -{81,-42,53}, -{81,-42,54}, -{81,-42,55}, -{81,-42,56}, -{81,-42,57}, -{81,-42,58}, -{81,-42,59}, -{81,-42,60}, -{81,-42,61}, -{81,-42,62}, -{81,-42,63}, -{81,-42,64}, -{81,-42,65}, -{81,-42,66}, -{81,-42,67}, -{81,-42,68}, -{81,-42,69}, -{81,-42,70}, -{81,-42,71}, -{81,-42,72}, -{81,-42,73}, -{81,-42,74}, -{81,-42,75}, -{81,-42,76}, -{81,-42,77}, -{81,-42,78}, -{81,-42,79}, -{81,-41,-17}, -{81,-41,-16}, -{81,-41,-15}, -{81,-41,-14}, -{81,-41,-13}, -{81,-41,-12}, -{81,-41,-11}, -{81,-41,-10}, -{81,-41,-9}, -{81,-41,-8}, -{81,-41,-7}, -{81,-41,-6}, -{81,-41,-5}, -{81,-41,-4}, -{81,-41,-3}, -{81,-41,-2}, -{81,-41,-1}, -{81,-41,0}, -{81,-41,1}, -{81,-41,2}, -{81,-41,3}, -{81,-41,4}, -{81,-41,5}, -{81,-41,6}, -{81,-41,7}, -{81,-41,8}, -{81,-41,9}, -{81,-41,10}, -{81,-41,11}, -{81,-41,12}, -{81,-41,13}, -{81,-41,14}, -{81,-41,15}, -{81,-41,16}, -{81,-41,17}, -{81,-41,18}, -{81,-41,19}, -{81,-41,20}, -{81,-41,21}, -{81,-41,22}, -{81,-41,23}, -{81,-41,24}, -{81,-41,25}, -{81,-41,26}, -{81,-41,27}, -{81,-41,28}, -{81,-41,29}, -{81,-41,30}, -{81,-41,31}, -{81,-41,32}, -{81,-41,33}, -{81,-41,34}, -{81,-41,35}, -{81,-41,36}, -{81,-41,37}, -{81,-41,38}, -{81,-41,39}, -{81,-41,40}, -{81,-41,41}, -{81,-41,42}, -{81,-41,43}, -{81,-41,44}, -{81,-41,45}, -{81,-41,46}, -{81,-41,47}, -{81,-41,48}, -{81,-41,49}, -{81,-41,50}, -{81,-41,51}, -{81,-41,52}, -{81,-41,53}, -{81,-41,54}, -{81,-41,55}, -{81,-41,56}, -{81,-41,57}, -{81,-41,58}, -{81,-41,59}, -{81,-41,60}, -{81,-41,61}, -{81,-41,62}, -{81,-41,63}, -{81,-41,64}, -{81,-41,65}, -{81,-41,66}, -{81,-41,67}, -{81,-41,68}, -{81,-41,69}, -{81,-41,70}, -{81,-41,71}, -{81,-41,72}, -{81,-41,73}, -{81,-41,74}, -{81,-41,75}, -{81,-41,76}, -{81,-41,77}, -{81,-41,78}, -{81,-41,79}, -{81,-40,-18}, -{81,-40,-17}, -{81,-40,-16}, -{81,-40,-15}, -{81,-40,-14}, -{81,-40,-13}, -{81,-40,-12}, -{81,-40,-11}, -{81,-40,-10}, -{81,-40,-9}, -{81,-40,-8}, -{81,-40,-7}, -{81,-40,-6}, -{81,-40,-5}, -{81,-40,-4}, -{81,-40,-3}, -{81,-40,-2}, -{81,-40,-1}, -{81,-40,0}, -{81,-40,1}, -{81,-40,2}, -{81,-40,3}, -{81,-40,4}, -{81,-40,5}, -{81,-40,6}, -{81,-40,7}, -{81,-40,8}, -{81,-40,9}, -{81,-40,10}, -{81,-40,11}, -{81,-40,12}, -{81,-40,13}, -{81,-40,14}, -{81,-40,15}, -{81,-40,16}, -{81,-40,17}, -{81,-40,18}, -{81,-40,19}, -{81,-40,20}, -{81,-40,21}, -{81,-40,22}, -{81,-40,23}, -{81,-40,24}, -{81,-40,25}, -{81,-40,26}, -{81,-40,27}, -{81,-40,28}, -{81,-40,29}, -{81,-40,30}, -{81,-40,31}, -{81,-40,32}, -{81,-40,33}, -{81,-40,34}, -{81,-40,35}, -{81,-40,36}, -{81,-40,37}, -{81,-40,38}, -{81,-40,39}, -{81,-40,40}, -{81,-40,41}, -{81,-40,42}, -{81,-40,43}, -{81,-40,44}, -{81,-40,45}, -{81,-40,46}, -{81,-40,47}, -{81,-40,48}, -{81,-40,49}, -{81,-40,50}, -{81,-40,51}, -{81,-40,52}, -{81,-40,53}, -{81,-40,54}, -{81,-40,55}, -{81,-40,56}, -{81,-40,57}, -{81,-40,58}, -{81,-40,59}, -{81,-40,60}, -{81,-40,61}, -{81,-40,62}, -{81,-40,63}, -{81,-40,64}, -{81,-40,65}, -{81,-40,66}, -{81,-40,67}, -{81,-40,68}, -{81,-40,69}, -{81,-40,70}, -{81,-40,71}, -{81,-40,72}, -{81,-40,73}, -{81,-40,74}, -{81,-40,75}, -{81,-40,76}, -{81,-40,77}, -{81,-40,78}, -{81,-40,79}, -{81,-39,-20}, -{81,-39,-19}, -{81,-39,-18}, -{81,-39,-17}, -{81,-39,-16}, -{81,-39,-15}, -{81,-39,-14}, -{81,-39,-13}, -{81,-39,-12}, -{81,-39,-11}, -{81,-39,-10}, -{81,-39,-9}, -{81,-39,-8}, -{81,-39,-7}, -{81,-39,-6}, -{81,-39,-5}, -{81,-39,-4}, -{81,-39,-3}, -{81,-39,-2}, -{81,-39,-1}, -{81,-39,0}, -{81,-39,1}, -{81,-39,2}, -{81,-39,3}, -{81,-39,4}, -{81,-39,5}, -{81,-39,6}, -{81,-39,7}, -{81,-39,8}, -{81,-39,9}, -{81,-39,10}, -{81,-39,11}, -{81,-39,12}, -{81,-39,13}, -{81,-39,14}, -{81,-39,15}, -{81,-39,16}, -{81,-39,17}, -{81,-39,18}, -{81,-39,19}, -{81,-39,20}, -{81,-39,21}, -{81,-39,22}, -{81,-39,23}, -{81,-39,24}, -{81,-39,25}, -{81,-39,26}, -{81,-39,27}, -{81,-39,28}, -{81,-39,29}, -{81,-39,30}, -{81,-39,31}, -{81,-39,32}, -{81,-39,33}, -{81,-39,34}, -{81,-39,35}, -{81,-39,36}, -{81,-39,37}, -{81,-39,38}, -{81,-39,39}, -{81,-39,40}, -{81,-39,41}, -{81,-39,42}, -{81,-39,43}, -{81,-39,44}, -{81,-39,45}, -{81,-39,46}, -{81,-39,47}, -{81,-39,48}, -{81,-39,49}, -{81,-39,50}, -{81,-39,51}, -{81,-39,52}, -{81,-39,53}, -{81,-39,54}, -{81,-39,55}, -{81,-39,56}, -{81,-39,57}, -{81,-39,58}, -{81,-39,59}, -{81,-39,60}, -{81,-39,61}, -{81,-39,62}, -{81,-39,63}, -{81,-39,64}, -{81,-39,65}, -{81,-39,66}, -{81,-39,67}, -{81,-39,68}, -{81,-39,69}, -{81,-39,70}, -{81,-39,71}, -{81,-39,72}, -{81,-39,73}, -{81,-39,74}, -{81,-39,75}, -{81,-39,76}, -{81,-39,77}, -{81,-39,78}, -{81,-39,79}, -{81,-38,-21}, -{81,-38,-20}, -{81,-38,-19}, -{81,-38,-18}, -{81,-38,-17}, -{81,-38,-16}, -{81,-38,-15}, -{81,-38,-14}, -{81,-38,-13}, -{81,-38,-12}, -{81,-38,-11}, -{81,-38,-10}, -{81,-38,-9}, -{81,-38,-8}, -{81,-38,-7}, -{81,-38,-6}, -{81,-38,-5}, -{81,-38,-4}, -{81,-38,-3}, -{81,-38,-2}, -{81,-38,-1}, -{81,-38,0}, -{81,-38,1}, -{81,-38,2}, -{81,-38,3}, -{81,-38,4}, -{81,-38,5}, -{81,-38,6}, -{81,-38,7}, -{81,-38,8}, -{81,-38,9}, -{81,-38,10}, -{81,-38,11}, -{81,-38,12}, -{81,-38,13}, -{81,-38,14}, -{81,-38,15}, -{81,-38,16}, -{81,-38,17}, -{81,-38,18}, -{81,-38,19}, -{81,-38,20}, -{81,-38,21}, -{81,-38,22}, -{81,-38,23}, -{81,-38,24}, -{81,-38,25}, -{81,-38,26}, -{81,-38,27}, -{81,-38,28}, -{81,-38,29}, -{81,-38,30}, -{81,-38,31}, -{81,-38,32}, -{81,-38,33}, -{81,-38,34}, -{81,-38,35}, -{81,-38,36}, -{81,-38,37}, -{81,-38,38}, -{81,-38,39}, -{81,-38,40}, -{81,-38,41}, -{81,-38,42}, -{81,-38,43}, -{81,-38,44}, -{81,-38,45}, -{81,-38,46}, -{81,-38,47}, -{81,-38,48}, -{81,-38,49}, -{81,-38,50}, -{81,-38,51}, -{81,-38,52}, -{81,-38,53}, -{81,-38,54}, -{81,-38,55}, -{81,-38,56}, -{81,-38,57}, -{81,-38,58}, -{81,-38,59}, -{81,-38,60}, -{81,-38,61}, -{81,-38,62}, -{81,-38,63}, -{81,-38,64}, -{81,-38,65}, -{81,-38,66}, -{81,-38,67}, -{81,-38,68}, -{81,-38,69}, -{81,-38,70}, -{81,-38,71}, -{81,-38,72}, -{81,-38,73}, -{81,-38,74}, -{81,-38,75}, -{81,-38,76}, -{81,-38,77}, -{81,-38,78}, -{81,-38,79}, -{81,-38,80}, -{81,-37,-22}, -{81,-37,-21}, -{81,-37,-20}, -{81,-37,-19}, -{81,-37,-18}, -{81,-37,-17}, -{81,-37,-16}, -{81,-37,-15}, -{81,-37,-14}, -{81,-37,-13}, -{81,-37,-12}, -{81,-37,-11}, -{81,-37,-10}, -{81,-37,-9}, -{81,-37,-8}, -{81,-37,-7}, -{81,-37,-6}, -{81,-37,-5}, -{81,-37,-4}, -{81,-37,-3}, -{81,-37,-2}, -{81,-37,-1}, -{81,-37,0}, -{81,-37,1}, -{81,-37,2}, -{81,-37,3}, -{81,-37,4}, -{81,-37,5}, -{81,-37,6}, -{81,-37,7}, -{81,-37,8}, -{81,-37,9}, -{81,-37,10}, -{81,-37,11}, -{81,-37,12}, -{81,-37,13}, -{81,-37,14}, -{81,-37,15}, -{81,-37,16}, -{81,-37,17}, -{81,-37,18}, -{81,-37,19}, -{81,-37,20}, -{81,-37,21}, -{81,-37,22}, -{81,-37,23}, -{81,-37,24}, -{81,-37,25}, -{81,-37,26}, -{81,-37,27}, -{81,-37,28}, -{81,-37,29}, -{81,-37,30}, -{81,-37,31}, -{81,-37,32}, -{81,-37,33}, -{81,-37,34}, -{81,-37,35}, -{81,-37,36}, -{81,-37,37}, -{81,-37,38}, -{81,-37,39}, -{81,-37,40}, -{81,-37,41}, -{81,-37,42}, -{81,-37,43}, -{81,-37,44}, -{81,-37,45}, -{81,-37,46}, -{81,-37,47}, -{81,-37,48}, -{81,-37,49}, -{81,-37,50}, -{81,-37,51}, -{81,-37,52}, -{81,-37,53}, -{81,-37,54}, -{81,-37,55}, -{81,-37,56}, -{81,-37,57}, -{81,-37,58}, -{81,-37,59}, -{81,-37,60}, -{81,-37,61}, -{81,-37,62}, -{81,-37,63}, -{81,-37,64}, -{81,-37,65}, -{81,-37,66}, -{81,-37,67}, -{81,-37,68}, -{81,-37,69}, -{81,-37,70}, -{81,-37,71}, -{81,-37,72}, -{81,-37,73}, -{81,-37,74}, -{81,-37,75}, -{81,-37,76}, -{81,-37,77}, -{81,-37,78}, -{81,-37,79}, -{81,-37,80}, -{81,-36,-24}, -{81,-36,-23}, -{81,-36,-22}, -{81,-36,-21}, -{81,-36,-20}, -{81,-36,-19}, -{81,-36,-18}, -{81,-36,-17}, -{81,-36,-16}, -{81,-36,-15}, -{81,-36,-14}, -{81,-36,-13}, -{81,-36,-12}, -{81,-36,-11}, -{81,-36,-10}, -{81,-36,-9}, -{81,-36,-8}, -{81,-36,-7}, -{81,-36,-6}, -{81,-36,-5}, -{81,-36,-4}, -{81,-36,-3}, -{81,-36,-2}, -{81,-36,-1}, -{81,-36,0}, -{81,-36,1}, -{81,-36,2}, -{81,-36,3}, -{81,-36,4}, -{81,-36,5}, -{81,-36,6}, -{81,-36,7}, -{81,-36,8}, -{81,-36,9}, -{81,-36,10}, -{81,-36,11}, -{81,-36,12}, -{81,-36,13}, -{81,-36,14}, -{81,-36,15}, -{81,-36,16}, -{81,-36,17}, -{81,-36,18}, -{81,-36,19}, -{81,-36,20}, -{81,-36,21}, -{81,-36,22}, -{81,-36,23}, -{81,-36,24}, -{81,-36,25}, -{81,-36,26}, -{81,-36,27}, -{81,-36,28}, -{81,-36,29}, -{81,-36,30}, -{81,-36,31}, -{81,-36,32}, -{81,-36,33}, -{81,-36,34}, -{81,-36,35}, -{81,-36,36}, -{81,-36,37}, -{81,-36,38}, -{81,-36,39}, -{81,-36,40}, -{81,-36,41}, -{81,-36,42}, -{81,-36,43}, -{81,-36,44}, -{81,-36,45}, -{81,-36,46}, -{81,-36,47}, -{81,-36,48}, -{81,-36,49}, -{81,-36,50}, -{81,-36,51}, -{81,-36,52}, -{81,-36,53}, -{81,-36,54}, -{81,-36,55}, -{81,-36,56}, -{81,-36,57}, -{81,-36,58}, -{81,-36,59}, -{81,-36,60}, -{81,-36,61}, -{81,-36,62}, -{81,-36,63}, -{81,-36,64}, -{81,-36,65}, -{81,-36,66}, -{81,-36,67}, -{81,-36,68}, -{81,-36,69}, -{81,-36,70}, -{81,-36,71}, -{81,-36,72}, -{81,-36,73}, -{81,-36,74}, -{81,-36,75}, -{81,-36,76}, -{81,-36,77}, -{81,-36,78}, -{81,-36,79}, -{81,-36,80}, -{81,-35,-25}, -{81,-35,-24}, -{81,-35,-23}, -{81,-35,-22}, -{81,-35,-21}, -{81,-35,-20}, -{81,-35,-19}, -{81,-35,-18}, -{81,-35,-17}, -{81,-35,-16}, -{81,-35,-15}, -{81,-35,-14}, -{81,-35,-13}, -{81,-35,-12}, -{81,-35,-11}, -{81,-35,-10}, -{81,-35,-9}, -{81,-35,-8}, -{81,-35,-7}, -{81,-35,-6}, -{81,-35,-5}, -{81,-35,-4}, -{81,-35,-3}, -{81,-35,-2}, -{81,-35,-1}, -{81,-35,0}, -{81,-35,1}, -{81,-35,2}, -{81,-35,3}, -{81,-35,4}, -{81,-35,5}, -{81,-35,6}, -{81,-35,7}, -{81,-35,8}, -{81,-35,9}, -{81,-35,10}, -{81,-35,11}, -{81,-35,12}, -{81,-35,13}, -{81,-35,14}, -{81,-35,15}, -{81,-35,16}, -{81,-35,17}, -{81,-35,18}, -{81,-35,19}, -{81,-35,20}, -{81,-35,21}, -{81,-35,22}, -{81,-35,23}, -{81,-35,24}, -{81,-35,25}, -{81,-35,26}, -{81,-35,27}, -{81,-35,28}, -{81,-35,29}, -{81,-35,30}, -{81,-35,31}, -{81,-35,32}, -{81,-35,33}, -{81,-35,34}, -{81,-35,35}, -{81,-35,36}, -{81,-35,37}, -{81,-35,38}, -{81,-35,39}, -{81,-35,40}, -{81,-35,41}, -{81,-35,42}, -{81,-35,43}, -{81,-35,44}, -{81,-35,45}, -{81,-35,46}, -{81,-35,47}, -{81,-35,48}, -{81,-35,49}, -{81,-35,50}, -{81,-35,51}, -{81,-35,52}, -{81,-35,53}, -{81,-35,54}, -{81,-35,55}, -{81,-35,56}, -{81,-35,57}, -{81,-35,58}, -{81,-35,59}, -{81,-35,60}, -{81,-35,61}, -{81,-35,62}, -{81,-35,63}, -{81,-35,64}, -{81,-35,65}, -{81,-35,66}, -{81,-35,67}, -{81,-35,68}, -{81,-35,69}, -{81,-35,70}, -{81,-35,71}, -{81,-35,72}, -{81,-35,73}, -{81,-35,74}, -{81,-35,75}, -{81,-35,76}, -{81,-35,77}, -{81,-35,78}, -{81,-35,79}, -{81,-35,80}, -{81,-34,-27}, -{81,-34,-26}, -{81,-34,-25}, -{81,-34,-24}, -{81,-34,-23}, -{81,-34,-22}, -{81,-34,-21}, -{81,-34,-20}, -{81,-34,-19}, -{81,-34,-18}, -{81,-34,-17}, -{81,-34,-16}, -{81,-34,-15}, -{81,-34,-14}, -{81,-34,-13}, -{81,-34,-12}, -{81,-34,-11}, -{81,-34,-10}, -{81,-34,-9}, -{81,-34,-8}, -{81,-34,-7}, -{81,-34,-6}, -{81,-34,-5}, -{81,-34,-4}, -{81,-34,-3}, -{81,-34,-2}, -{81,-34,-1}, -{81,-34,0}, -{81,-34,1}, -{81,-34,2}, -{81,-34,3}, -{81,-34,4}, -{81,-34,5}, -{81,-34,6}, -{81,-34,7}, -{81,-34,8}, -{81,-34,9}, -{81,-34,10}, -{81,-34,11}, -{81,-34,12}, -{81,-34,13}, -{81,-34,14}, -{81,-34,15}, -{81,-34,16}, -{81,-34,17}, -{81,-34,18}, -{81,-34,19}, -{81,-34,20}, -{81,-34,21}, -{81,-34,22}, -{81,-34,23}, -{81,-34,24}, -{81,-34,25}, -{81,-34,26}, -{81,-34,27}, -{81,-34,28}, -{81,-34,29}, -{81,-34,30}, -{81,-34,31}, -{81,-34,32}, -{81,-34,33}, -{81,-34,34}, -{81,-34,35}, -{81,-34,36}, -{81,-34,37}, -{81,-34,38}, -{81,-34,39}, -{81,-34,40}, -{81,-34,41}, -{81,-34,42}, -{81,-34,43}, -{81,-34,44}, -{81,-34,45}, -{81,-34,46}, -{81,-34,47}, -{81,-34,48}, -{81,-34,49}, -{81,-34,50}, -{81,-34,51}, -{81,-34,52}, -{81,-34,53}, -{81,-34,54}, -{81,-34,55}, -{81,-34,56}, -{81,-34,57}, -{81,-34,58}, -{81,-34,59}, -{81,-34,60}, -{81,-34,61}, -{81,-34,62}, -{81,-34,63}, -{81,-34,64}, -{81,-34,65}, -{81,-34,66}, -{81,-34,67}, -{81,-34,68}, -{81,-34,69}, -{81,-34,70}, -{81,-34,71}, -{81,-34,72}, -{81,-34,73}, -{81,-34,74}, -{81,-34,75}, -{81,-34,76}, -{81,-34,77}, -{81,-34,78}, -{81,-34,79}, -{81,-34,80}, -{81,-33,-28}, -{81,-33,-27}, -{81,-33,-26}, -{81,-33,-25}, -{81,-33,-24}, -{81,-33,-23}, -{81,-33,-22}, -{81,-33,-21}, -{81,-33,-20}, -{81,-33,-19}, -{81,-33,-18}, -{81,-33,-17}, -{81,-33,-16}, -{81,-33,-15}, -{81,-33,-14}, -{81,-33,-13}, -{81,-33,-12}, -{81,-33,-11}, -{81,-33,-10}, -{81,-33,-9}, -{81,-33,-8}, -{81,-33,-7}, -{81,-33,-6}, -{81,-33,-5}, -{81,-33,-4}, -{81,-33,-3}, -{81,-33,-2}, -{81,-33,-1}, -{81,-33,0}, -{81,-33,1}, -{81,-33,2}, -{81,-33,3}, -{81,-33,4}, -{81,-33,5}, -{81,-33,6}, -{81,-33,7}, -{81,-33,8}, -{81,-33,9}, -{81,-33,10}, -{81,-33,11}, -{81,-33,12}, -{81,-33,13}, -{81,-33,14}, -{81,-33,15}, -{81,-33,16}, -{81,-33,17}, -{81,-33,18}, -{81,-33,19}, -{81,-33,20}, -{81,-33,21}, -{81,-33,22}, -{81,-33,23}, -{81,-33,24}, -{81,-33,25}, -{81,-33,26}, -{81,-33,27}, -{81,-33,28}, -{81,-33,29}, -{81,-33,30}, -{81,-33,31}, -{81,-33,32}, -{81,-33,33}, -{81,-33,34}, -{81,-33,35}, -{81,-33,36}, -{81,-33,37}, -{81,-33,38}, -{81,-33,39}, -{81,-33,40}, -{81,-33,41}, -{81,-33,42}, -{81,-33,43}, -{81,-33,44}, -{81,-33,45}, -{81,-33,46}, -{81,-33,47}, -{81,-33,48}, -{81,-33,49}, -{81,-33,50}, -{81,-33,51}, -{81,-33,52}, -{81,-33,53}, -{81,-33,54}, -{81,-33,55}, -{81,-33,56}, -{81,-33,57}, -{81,-33,58}, -{81,-33,59}, -{81,-33,60}, -{81,-33,61}, -{81,-33,62}, -{81,-33,63}, -{81,-33,64}, -{81,-33,65}, -{81,-33,66}, -{81,-33,67}, -{81,-33,68}, -{81,-33,69}, -{81,-33,70}, -{81,-33,71}, -{81,-33,72}, -{81,-33,73}, -{81,-33,74}, -{81,-33,75}, -{81,-33,76}, -{81,-33,77}, -{81,-33,78}, -{81,-33,79}, -{81,-33,80}, -{81,-32,-29}, -{81,-32,-28}, -{81,-32,-27}, -{81,-32,-26}, -{81,-32,-25}, -{81,-32,-24}, -{81,-32,-23}, -{81,-32,-22}, -{81,-32,-21}, -{81,-32,-20}, -{81,-32,-19}, -{81,-32,-18}, -{81,-32,-17}, -{81,-32,-16}, -{81,-32,-15}, -{81,-32,-14}, -{81,-32,-13}, -{81,-32,-12}, -{81,-32,-11}, -{81,-32,-10}, -{81,-32,-9}, -{81,-32,-8}, -{81,-32,-7}, -{81,-32,-6}, -{81,-32,-5}, -{81,-32,-4}, -{81,-32,-3}, -{81,-32,-2}, -{81,-32,-1}, -{81,-32,0}, -{81,-32,1}, -{81,-32,2}, -{81,-32,3}, -{81,-32,4}, -{81,-32,5}, -{81,-32,6}, -{81,-32,7}, -{81,-32,8}, -{81,-32,9}, -{81,-32,10}, -{81,-32,11}, -{81,-32,12}, -{81,-32,13}, -{81,-32,14}, -{81,-32,15}, -{81,-32,16}, -{81,-32,17}, -{81,-32,18}, -{81,-32,19}, -{81,-32,20}, -{81,-32,21}, -{81,-32,22}, -{81,-32,23}, -{81,-32,24}, -{81,-32,25}, -{81,-32,26}, -{81,-32,27}, -{81,-32,28}, -{81,-32,29}, -{81,-32,30}, -{81,-32,31}, -{81,-32,32}, -{81,-32,33}, -{81,-32,34}, -{81,-32,35}, -{81,-32,36}, -{81,-32,37}, -{81,-32,38}, -{81,-32,39}, -{81,-32,40}, -{81,-32,41}, -{81,-32,42}, -{81,-32,43}, -{81,-32,44}, -{81,-32,45}, -{81,-32,46}, -{81,-32,47}, -{81,-32,48}, -{81,-32,49}, -{81,-32,50}, -{81,-32,51}, -{81,-32,52}, -{81,-32,53}, -{81,-32,54}, -{81,-32,55}, -{81,-32,56}, -{81,-32,57}, -{81,-32,58}, -{81,-32,59}, -{81,-32,60}, -{81,-32,61}, -{81,-32,62}, -{81,-32,63}, -{81,-32,64}, -{81,-32,65}, -{81,-32,66}, -{81,-32,67}, -{81,-32,68}, -{81,-32,69}, -{81,-32,70}, -{81,-32,71}, -{81,-32,72}, -{81,-32,73}, -{81,-32,74}, -{81,-32,75}, -{81,-32,76}, -{81,-32,77}, -{81,-32,78}, -{81,-32,79}, -{81,-32,80}, -{81,-31,-29}, -{81,-31,-28}, -{81,-31,-27}, -{81,-31,-26}, -{81,-31,-25}, -{81,-31,-24}, -{81,-31,-23}, -{81,-31,-22}, -{81,-31,-21}, -{81,-31,-20}, -{81,-31,-19}, -{81,-31,-18}, -{81,-31,-17}, -{81,-31,-16}, -{81,-31,-15}, -{81,-31,-14}, -{81,-31,-13}, -{81,-31,-12}, -{81,-31,-11}, -{81,-31,-10}, -{81,-31,-9}, -{81,-31,-8}, -{81,-31,-7}, -{81,-31,-6}, -{81,-31,-5}, -{81,-31,-4}, -{81,-31,-3}, -{81,-31,-2}, -{81,-31,-1}, -{81,-31,0}, -{81,-31,1}, -{81,-31,2}, -{81,-31,3}, -{81,-31,4}, -{81,-31,5}, -{81,-31,6}, -{81,-31,7}, -{81,-31,8}, -{81,-31,9}, -{81,-31,10}, -{81,-31,11}, -{81,-31,12}, -{81,-31,13}, -{81,-31,14}, -{81,-31,15}, -{81,-31,16}, -{81,-31,17}, -{81,-31,18}, -{81,-31,19}, -{81,-31,20}, -{81,-31,21}, -{81,-31,22}, -{81,-31,23}, -{81,-31,24}, -{81,-31,25}, -{81,-31,26}, -{81,-31,27}, -{81,-31,28}, -{81,-31,29}, -{81,-31,30}, -{81,-31,31}, -{81,-31,32}, -{81,-31,33}, -{81,-31,34}, -{81,-31,35}, -{81,-31,36}, -{81,-31,37}, -{81,-31,38}, -{81,-31,39}, -{81,-31,40}, -{81,-31,41}, -{81,-31,42}, -{81,-31,43}, -{81,-31,44}, -{81,-31,45}, -{81,-31,46}, -{81,-31,47}, -{81,-31,48}, -{81,-31,49}, -{81,-31,50}, -{81,-31,51}, -{81,-31,52}, -{81,-31,53}, -{81,-31,54}, -{81,-31,55}, -{81,-31,56}, -{81,-31,57}, -{81,-31,58}, -{81,-31,59}, -{81,-31,60}, -{81,-31,61}, -{81,-31,62}, -{81,-31,63}, -{81,-31,64}, -{81,-31,65}, -{81,-31,66}, -{81,-31,67}, -{81,-31,68}, -{81,-31,69}, -{81,-31,70}, -{81,-31,71}, -{81,-31,72}, -{81,-31,73}, -{81,-31,74}, -{81,-31,75}, -{81,-31,76}, -{81,-31,77}, -{81,-31,78}, -{81,-31,79}, -{81,-31,80}, -{81,-30,-29}, -{81,-30,-28}, -{81,-30,-27}, -{81,-30,-26}, -{81,-30,-25}, -{81,-30,-24}, -{81,-30,-23}, -{81,-30,-22}, -{81,-30,-21}, -{81,-30,-20}, -{81,-30,-19}, -{81,-30,-18}, -{81,-30,-17}, -{81,-30,-16}, -{81,-30,-15}, -{81,-30,-14}, -{81,-30,-13}, -{81,-30,-12}, -{81,-30,-11}, -{81,-30,-10}, -{81,-30,-9}, -{81,-30,-8}, -{81,-30,-7}, -{81,-30,-6}, -{81,-30,-5}, -{81,-30,-4}, -{81,-30,-3}, -{81,-30,-2}, -{81,-30,-1}, -{81,-30,0}, -{81,-30,1}, -{81,-30,2}, -{81,-30,3}, -{81,-30,4}, -{81,-30,5}, -{81,-30,6}, -{81,-30,7}, -{81,-30,8}, -{81,-30,9}, -{81,-30,10}, -{81,-30,11}, -{81,-30,12}, -{81,-30,13}, -{81,-30,14}, -{81,-30,15}, -{81,-30,16}, -{81,-30,17}, -{81,-30,18}, -{81,-30,19}, -{81,-30,20}, -{81,-30,21}, -{81,-30,22}, -{81,-30,23}, -{81,-30,24}, -{81,-30,25}, -{81,-30,26}, -{81,-30,27}, -{81,-30,28}, -{81,-30,29}, -{81,-30,30}, -{81,-30,31}, -{81,-30,32}, -{81,-30,33}, -{81,-30,34}, -{81,-30,35}, -{81,-30,36}, -{81,-30,37}, -{81,-30,38}, -{81,-30,39}, -{81,-30,40}, -{81,-30,41}, -{81,-30,42}, -{81,-30,43}, -{81,-30,44}, -{81,-30,45}, -{81,-30,46}, -{81,-30,47}, -{81,-30,48}, -{81,-30,49}, -{81,-30,50}, -{81,-30,51}, -{81,-30,52}, -{81,-30,53}, -{81,-30,54}, -{81,-30,55}, -{81,-30,56}, -{81,-30,57}, -{81,-30,58}, -{81,-30,59}, -{81,-30,60}, -{81,-30,61}, -{81,-30,62}, -{81,-30,63}, -{81,-30,64}, -{81,-30,65}, -{81,-30,66}, -{81,-30,67}, -{81,-30,68}, -{81,-30,69}, -{81,-30,70}, -{81,-30,71}, -{81,-30,72}, -{81,-30,73}, -{81,-30,74}, -{81,-30,75}, -{81,-30,76}, -{81,-30,77}, -{81,-30,78}, -{81,-30,79}, -{81,-30,80}, -{81,-29,-29}, -{81,-29,-28}, -{81,-29,-27}, -{81,-29,-26}, -{81,-29,-25}, -{81,-29,-24}, -{81,-29,-23}, -{81,-29,-22}, -{81,-29,-21}, -{81,-29,-20}, -{81,-29,-19}, -{81,-29,-18}, -{81,-29,-17}, -{81,-29,-16}, -{81,-29,-15}, -{81,-29,-14}, -{81,-29,-13}, -{81,-29,-12}, -{81,-29,-11}, -{81,-29,-10}, -{81,-29,-9}, -{81,-29,-8}, -{81,-29,-7}, -{81,-29,-6}, -{81,-29,-5}, -{81,-29,-4}, -{81,-29,-3}, -{81,-29,-2}, -{81,-29,-1}, -{81,-29,0}, -{81,-29,1}, -{81,-29,2}, -{81,-29,3}, -{81,-29,4}, -{81,-29,5}, -{81,-29,6}, -{81,-29,7}, -{81,-29,8}, -{81,-29,9}, -{81,-29,10}, -{81,-29,11}, -{81,-29,12}, -{81,-29,13}, -{81,-29,14}, -{81,-29,15}, -{81,-29,16}, -{81,-29,17}, -{81,-29,18}, -{81,-29,19}, -{81,-29,20}, -{81,-29,21}, -{81,-29,22}, -{81,-29,23}, -{81,-29,24}, -{81,-29,25}, -{81,-29,26}, -{81,-29,27}, -{81,-29,28}, -{81,-29,29}, -{81,-29,30}, -{81,-29,31}, -{81,-29,32}, -{81,-29,33}, -{81,-29,34}, -{81,-29,35}, -{81,-29,36}, -{81,-29,37}, -{81,-29,38}, -{81,-29,39}, -{81,-29,40}, -{81,-29,41}, -{81,-29,42}, -{81,-29,43}, -{81,-29,44}, -{81,-29,45}, -{81,-29,46}, -{81,-29,47}, -{81,-29,48}, -{81,-29,49}, -{81,-29,50}, -{81,-29,51}, -{81,-29,52}, -{81,-29,53}, -{81,-29,54}, -{81,-29,55}, -{81,-29,56}, -{81,-29,57}, -{81,-29,58}, -{81,-29,59}, -{81,-29,60}, -{81,-29,61}, -{81,-29,62}, -{81,-29,63}, -{81,-29,64}, -{81,-29,65}, -{81,-29,66}, -{81,-29,67}, -{81,-29,68}, -{81,-29,69}, -{81,-29,70}, -{81,-29,71}, -{81,-29,72}, -{81,-29,73}, -{81,-29,74}, -{81,-29,75}, -{81,-29,76}, -{81,-29,77}, -{81,-29,78}, -{81,-29,79}, -{81,-29,80}, -{81,-28,-29}, -{81,-28,-28}, -{81,-28,-27}, -{81,-28,-26}, -{81,-28,-25}, -{81,-28,-24}, -{81,-28,-23}, -{81,-28,-22}, -{81,-28,-21}, -{81,-28,-20}, -{81,-28,-19}, -{81,-28,-18}, -{81,-28,-17}, -{81,-28,-16}, -{81,-28,-15}, -{81,-28,-14}, -{81,-28,-13}, -{81,-28,-12}, -{81,-28,-11}, -{81,-28,-10}, -{81,-28,-9}, -{81,-28,-8}, -{81,-28,-7}, -{81,-28,-6}, -{81,-28,-5}, -{81,-28,-4}, -{81,-28,-3}, -{81,-28,-2}, -{81,-28,-1}, -{81,-28,0}, -{81,-28,1}, -{81,-28,2}, -{81,-28,3}, -{81,-28,4}, -{81,-28,5}, -{81,-28,6}, -{81,-28,7}, -{81,-28,8}, -{81,-28,9}, -{81,-28,10}, -{81,-28,11}, -{81,-28,12}, -{81,-28,13}, -{81,-28,14}, -{81,-28,15}, -{81,-28,16}, -{81,-28,17}, -{81,-28,18}, -{81,-28,19}, -{81,-28,20}, -{81,-28,21}, -{81,-28,22}, -{81,-28,23}, -{81,-28,24}, -{81,-28,25}, -{81,-28,26}, -{81,-28,27}, -{81,-28,28}, -{81,-28,29}, -{81,-28,30}, -{81,-28,31}, -{81,-28,32}, -{81,-28,33}, -{81,-28,34}, -{81,-28,35}, -{81,-28,36}, -{81,-28,37}, -{81,-28,38}, -{81,-28,39}, -{81,-28,40}, -{81,-28,41}, -{81,-28,42}, -{81,-28,43}, -{81,-28,44}, -{81,-28,45}, -{81,-28,46}, -{81,-28,47}, -{81,-28,48}, -{81,-28,49}, -{81,-28,50}, -{81,-28,51}, -{81,-28,52}, -{81,-28,53}, -{81,-28,54}, -{81,-28,55}, -{81,-28,56}, -{81,-28,57}, -{81,-28,58}, -{81,-28,59}, -{81,-28,60}, -{81,-28,61}, -{81,-28,62}, -{81,-28,63}, -{81,-28,64}, -{81,-28,65}, -{81,-28,66}, -{81,-28,67}, -{81,-28,68}, -{81,-28,69}, -{81,-28,70}, -{81,-28,71}, -{81,-28,72}, -{81,-28,73}, -{81,-28,74}, -{81,-28,75}, -{81,-28,76}, -{81,-28,77}, -{81,-28,78}, -{81,-28,79}, -{81,-28,80}, -{81,-27,-29}, -{81,-27,-28}, -{81,-27,-27}, -{81,-27,-26}, -{81,-27,-25}, -{81,-27,-24}, -{81,-27,-23}, -{81,-27,-22}, -{81,-27,-21}, -{81,-27,-20}, -{81,-27,-19}, -{81,-27,-18}, -{81,-27,-17}, -{81,-27,-16}, -{81,-27,-15}, -{81,-27,-14}, -{81,-27,-13}, -{81,-27,-12}, -{81,-27,-11}, -{81,-27,-10}, -{81,-27,-9}, -{81,-27,-8}, -{81,-27,-7}, -{81,-27,-6}, -{81,-27,-5}, -{81,-27,-4}, -{81,-27,-3}, -{81,-27,-2}, -{81,-27,-1}, -{81,-27,0}, -{81,-27,1}, -{81,-27,2}, -{81,-27,3}, -{81,-27,4}, -{81,-27,5}, -{81,-27,6}, -{81,-27,7}, -{81,-27,8}, -{81,-27,9}, -{81,-27,10}, -{81,-27,11}, -{81,-27,12}, -{81,-27,13}, -{81,-27,14}, -{81,-27,15}, -{81,-27,16}, -{81,-27,17}, -{81,-27,18}, -{81,-27,19}, -{81,-27,20}, -{81,-27,21}, -{81,-27,22}, -{81,-27,23}, -{81,-27,24}, -{81,-27,25}, -{81,-27,26}, -{81,-27,27}, -{81,-27,28}, -{81,-27,29}, -{81,-27,30}, -{81,-27,31}, -{81,-27,32}, -{81,-27,33}, -{81,-27,34}, -{81,-27,35}, -{81,-27,36}, -{81,-27,37}, -{81,-27,38}, -{81,-27,39}, -{81,-27,40}, -{81,-27,41}, -{81,-27,42}, -{81,-27,43}, -{81,-27,44}, -{81,-27,45}, -{81,-27,46}, -{81,-27,47}, -{81,-27,48}, -{81,-27,49}, -{81,-27,50}, -{81,-27,51}, -{81,-27,52}, -{81,-27,53}, -{81,-27,54}, -{81,-27,55}, -{81,-27,56}, -{81,-27,57}, -{81,-27,58}, -{81,-27,59}, -{81,-27,60}, -{81,-27,61}, -{81,-27,62}, -{81,-27,63}, -{81,-27,64}, -{81,-27,65}, -{81,-27,66}, -{81,-27,67}, -{81,-27,68}, -{81,-27,69}, -{81,-27,70}, -{81,-27,71}, -{81,-27,72}, -{81,-27,73}, -{81,-27,74}, -{81,-27,75}, -{81,-27,76}, -{81,-27,77}, -{81,-27,78}, -{81,-27,79}, -{81,-27,80}, -{81,-26,-29}, -{81,-26,-28}, -{81,-26,-27}, -{81,-26,-26}, -{81,-26,-25}, -{81,-26,-24}, -{81,-26,-23}, -{81,-26,-22}, -{81,-26,-21}, -{81,-26,-20}, -{81,-26,-19}, -{81,-26,-18}, -{81,-26,-17}, -{81,-26,-16}, -{81,-26,-15}, -{81,-26,-14}, -{81,-26,-13}, -{81,-26,-12}, -{81,-26,-11}, -{81,-26,-10}, -{81,-26,-9}, -{81,-26,-8}, -{81,-26,-7}, -{81,-26,-6}, -{81,-26,-5}, -{81,-26,-4}, -{81,-26,-3}, -{81,-26,-2}, -{81,-26,-1}, -{81,-26,0}, -{81,-26,1}, -{81,-26,2}, -{81,-26,3}, -{81,-26,4}, -{81,-26,5}, -{81,-26,6}, -{81,-26,7}, -{81,-26,8}, -{81,-26,9}, -{81,-26,10}, -{81,-26,11}, -{81,-26,12}, -{81,-26,13}, -{81,-26,14}, -{81,-26,15}, -{81,-26,16}, -{81,-26,17}, -{81,-26,18}, -{81,-26,19}, -{81,-26,20}, -{81,-26,21}, -{81,-26,22}, -{81,-26,23}, -{81,-26,24}, -{81,-26,25}, -{81,-26,26}, -{81,-26,27}, -{81,-26,28}, -{81,-26,29}, -{81,-26,30}, -{81,-26,31}, -{81,-26,32}, -{81,-26,33}, -{81,-26,34}, -{81,-26,35}, -{81,-26,36}, -{81,-26,37}, -{81,-26,38}, -{81,-26,39}, -{81,-26,40}, -{81,-26,41}, -{81,-26,42}, -{81,-26,43}, -{81,-26,44}, -{81,-26,45}, -{81,-26,46}, -{81,-26,47}, -{81,-26,48}, -{81,-26,49}, -{81,-26,50}, -{81,-26,51}, -{81,-26,52}, -{81,-26,53}, -{81,-26,54}, -{81,-26,55}, -{81,-26,56}, -{81,-26,57}, -{81,-26,58}, -{81,-26,59}, -{81,-26,60}, -{81,-26,61}, -{81,-26,62}, -{81,-26,63}, -{81,-26,64}, -{81,-26,65}, -{81,-26,66}, -{81,-26,67}, -{81,-26,68}, -{81,-26,69}, -{81,-26,70}, -{81,-26,71}, -{81,-26,72}, -{81,-26,73}, -{81,-26,74}, -{81,-26,75}, -{81,-26,76}, -{81,-26,77}, -{81,-26,78}, -{81,-26,79}, -{81,-26,80}, -{81,-25,-29}, -{81,-25,-28}, -{81,-25,-27}, -{81,-25,-26}, -{81,-25,-25}, -{81,-25,-24}, -{81,-25,-23}, -{81,-25,-22}, -{81,-25,-21}, -{81,-25,-20}, -{81,-25,-19}, -{81,-25,-18}, -{81,-25,-17}, -{81,-25,-16}, -{81,-25,-15}, -{81,-25,-14}, -{81,-25,-13}, -{81,-25,-12}, -{81,-25,-11}, -{81,-25,-10}, -{81,-25,-9}, -{81,-25,-8}, -{81,-25,-7}, -{81,-25,-6}, -{81,-25,-5}, -{81,-25,-4}, -{81,-25,-3}, -{81,-25,-2}, -{81,-25,-1}, -{81,-25,0}, -{81,-25,1}, -{81,-25,2}, -{81,-25,3}, -{81,-25,4}, -{81,-25,5}, -{81,-25,6}, -{81,-25,7}, -{81,-25,8}, -{81,-25,9}, -{81,-25,10}, -{81,-25,11}, -{81,-25,12}, -{81,-25,13}, -{81,-25,14}, -{81,-25,15}, -{81,-25,16}, -{81,-25,17}, -{81,-25,18}, -{81,-25,19}, -{81,-25,20}, -{81,-25,21}, -{81,-25,22}, -{81,-25,23}, -{81,-25,24}, -{81,-25,25}, -{81,-25,26}, -{81,-25,27}, -{81,-25,28}, -{81,-25,29}, -{81,-25,30}, -{81,-25,31}, -{81,-25,32}, -{81,-25,33}, -{81,-25,34}, -{81,-25,35}, -{81,-25,36}, -{81,-25,37}, -{81,-25,38}, -{81,-25,39}, -{81,-25,40}, -{81,-25,41}, -{81,-25,42}, -{81,-25,43}, -{81,-25,44}, -{81,-25,45}, -{81,-25,46}, -{81,-25,47}, -{81,-25,48}, -{81,-25,49}, -{81,-25,50}, -{81,-25,51}, -{81,-25,52}, -{81,-25,53}, -{81,-25,54}, -{81,-25,55}, -{81,-25,56}, -{81,-25,57}, -{81,-25,58}, -{81,-25,59}, -{81,-25,60}, -{81,-25,61}, -{81,-25,62}, -{81,-25,63}, -{81,-25,64}, -{81,-25,65}, -{81,-25,66}, -{81,-25,67}, -{81,-25,68}, -{81,-25,69}, -{81,-25,70}, -{81,-25,71}, -{81,-25,72}, -{81,-25,73}, -{81,-25,74}, -{81,-25,75}, -{81,-25,76}, -{81,-25,77}, -{81,-25,78}, -{81,-25,79}, -{81,-25,80}, -{81,-24,-29}, -{81,-24,-28}, -{81,-24,-27}, -{81,-24,-26}, -{81,-24,-25}, -{81,-24,-24}, -{81,-24,-23}, -{81,-24,-22}, -{81,-24,-21}, -{81,-24,-20}, -{81,-24,-19}, -{81,-24,-18}, -{81,-24,-17}, -{81,-24,-16}, -{81,-24,-15}, -{81,-24,-14}, -{81,-24,-13}, -{81,-24,-12}, -{81,-24,-11}, -{81,-24,-10}, -{81,-24,-9}, -{81,-24,-8}, -{81,-24,-7}, -{81,-24,-6}, -{81,-24,-5}, -{81,-24,-4}, -{81,-24,-3}, -{81,-24,-2}, -{81,-24,-1}, -{81,-24,0}, -{81,-24,1}, -{81,-24,2}, -{81,-24,3}, -{81,-24,4}, -{81,-24,5}, -{81,-24,6}, -{81,-24,7}, -{81,-24,8}, -{81,-24,9}, -{81,-24,10}, -{81,-24,11}, -{81,-24,12}, -{81,-24,13}, -{81,-24,14}, -{81,-24,15}, -{81,-24,16}, -{81,-24,17}, -{81,-24,18}, -{81,-24,19}, -{81,-24,20}, -{81,-24,21}, -{81,-24,22}, -{81,-24,23}, -{81,-24,24}, -{81,-24,25}, -{81,-24,26}, -{81,-24,27}, -{81,-24,28}, -{81,-24,29}, -{81,-24,30}, -{81,-24,31}, -{81,-24,32}, -{81,-24,33}, -{81,-24,34}, -{81,-24,35}, -{81,-24,36}, -{81,-24,37}, -{81,-24,38}, -{81,-24,39}, -{81,-24,40}, -{81,-24,41}, -{81,-24,42}, -{81,-24,43}, -{81,-24,44}, -{81,-24,45}, -{81,-24,46}, -{81,-24,47}, -{81,-24,48}, -{81,-24,49}, -{81,-24,50}, -{81,-24,51}, -{81,-24,52}, -{81,-24,53}, -{81,-24,54}, -{81,-24,55}, -{81,-24,56}, -{81,-24,57}, -{81,-24,58}, -{81,-24,59}, -{81,-24,60}, -{81,-24,61}, -{81,-24,62}, -{81,-24,63}, -{81,-24,64}, -{81,-24,65}, -{81,-24,66}, -{81,-24,67}, -{81,-24,68}, -{81,-24,69}, -{81,-24,70}, -{81,-24,71}, -{81,-24,72}, -{81,-24,73}, -{81,-24,74}, -{81,-24,75}, -{81,-24,76}, -{81,-24,77}, -{81,-24,78}, -{81,-24,79}, -{81,-24,80}, -{81,-23,-29}, -{81,-23,-28}, -{81,-23,-27}, -{81,-23,-26}, -{81,-23,-25}, -{81,-23,-24}, -{81,-23,-23}, -{81,-23,-22}, -{81,-23,-21}, -{81,-23,-20}, -{81,-23,-19}, -{81,-23,-18}, -{81,-23,-17}, -{81,-23,-16}, -{81,-23,-15}, -{81,-23,-14}, -{81,-23,-13}, -{81,-23,-12}, -{81,-23,-11}, -{81,-23,-10}, -{81,-23,-9}, -{81,-23,-8}, -{81,-23,-7}, -{81,-23,-6}, -{81,-23,-5}, -{81,-23,-4}, -{81,-23,-3}, -{81,-23,-2}, -{81,-23,-1}, -{81,-23,0}, -{81,-23,1}, -{81,-23,2}, -{81,-23,3}, -{81,-23,4}, -{81,-23,5}, -{81,-23,6}, -{81,-23,7}, -{81,-23,8}, -{81,-23,9}, -{81,-23,10}, -{81,-23,11}, -{81,-23,12}, -{81,-23,13}, -{81,-23,14}, -{81,-23,15}, -{81,-23,16}, -{81,-23,17}, -{81,-23,18}, -{81,-23,19}, -{81,-23,20}, -{81,-23,21}, -{81,-23,22}, -{81,-23,23}, -{81,-23,24}, -{81,-23,25}, -{81,-23,26}, -{81,-23,27}, -{81,-23,28}, -{81,-23,29}, -{81,-23,30}, -{81,-23,31}, -{81,-23,32}, -{81,-23,33}, -{81,-23,34}, -{81,-23,35}, -{81,-23,36}, -{81,-23,37}, -{81,-23,38}, -{81,-23,39}, -{81,-23,40}, -{81,-23,41}, -{81,-23,42}, -{81,-23,43}, -{81,-23,44}, -{81,-23,45}, -{81,-23,46}, -{81,-23,47}, -{81,-23,48}, -{81,-23,49}, -{81,-23,50}, -{81,-23,51}, -{81,-23,52}, -{81,-23,53}, -{81,-23,54}, -{81,-23,55}, -{81,-23,56}, -{81,-23,57}, -{81,-23,58}, -{81,-23,59}, -{81,-23,60}, -{81,-23,61}, -{81,-23,62}, -{81,-23,63}, -{81,-23,64}, -{81,-23,65}, -{81,-23,66}, -{81,-23,67}, -{81,-23,68}, -{81,-23,69}, -{81,-23,70}, -{81,-23,71}, -{81,-23,72}, -{81,-23,73}, -{81,-23,74}, -{81,-23,75}, -{81,-23,76}, -{81,-23,77}, -{81,-23,78}, -{81,-23,79}, -{81,-23,80}, -{81,-22,-29}, -{81,-22,-28}, -{81,-22,-27}, -{81,-22,-26}, -{81,-22,-25}, -{81,-22,-24}, -{81,-22,-23}, -{81,-22,-22}, -{81,-22,-21}, -{81,-22,-20}, -{81,-22,-19}, -{81,-22,-18}, -{81,-22,-17}, -{81,-22,-16}, -{81,-22,-15}, -{81,-22,-14}, -{81,-22,-13}, -{81,-22,-12}, -{81,-22,-11}, -{81,-22,-10}, -{81,-22,-9}, -{81,-22,-8}, -{81,-22,-7}, -{81,-22,-6}, -{81,-22,-5}, -{81,-22,-4}, -{81,-22,-3}, -{81,-22,-2}, -{81,-22,-1}, -{81,-22,0}, -{81,-22,1}, -{81,-22,2}, -{81,-22,3}, -{81,-22,4}, -{81,-22,5}, -{81,-22,6}, -{81,-22,7}, -{81,-22,8}, -{81,-22,9}, -{81,-22,10}, -{81,-22,11}, -{81,-22,12}, -{81,-22,13}, -{81,-22,14}, -{81,-22,15}, -{81,-22,16}, -{81,-22,17}, -{81,-22,18}, -{81,-22,19}, -{81,-22,20}, -{81,-22,21}, -{81,-22,22}, -{81,-22,23}, -{81,-22,24}, -{81,-22,25}, -{81,-22,26}, -{81,-22,27}, -{81,-22,28}, -{81,-22,29}, -{81,-22,30}, -{81,-22,31}, -{81,-22,32}, -{81,-22,33}, -{81,-22,34}, -{81,-22,35}, -{81,-22,36}, -{81,-22,37}, -{81,-22,38}, -{81,-22,39}, -{81,-22,40}, -{81,-22,41}, -{81,-22,42}, -{81,-22,43}, -{81,-22,44}, -{81,-22,45}, -{81,-22,46}, -{81,-22,47}, -{81,-22,48}, -{81,-22,49}, -{81,-22,50}, -{81,-22,51}, -{81,-22,52}, -{81,-22,53}, -{81,-22,54}, -{81,-22,55}, -{81,-22,56}, -{81,-22,57}, -{81,-22,58}, -{81,-22,59}, -{81,-22,60}, -{81,-22,61}, -{81,-22,62}, -{81,-22,63}, -{81,-22,64}, -{81,-22,65}, -{81,-22,66}, -{81,-22,67}, -{81,-22,68}, -{81,-22,69}, -{81,-22,70}, -{81,-22,71}, -{81,-22,72}, -{81,-22,73}, -{81,-22,74}, -{81,-22,75}, -{81,-22,76}, -{81,-22,77}, -{81,-22,78}, -{81,-22,79}, -{81,-22,80}, -{81,-21,-29}, -{81,-21,-28}, -{81,-21,-27}, -{81,-21,-26}, -{81,-21,-25}, -{81,-21,-24}, -{81,-21,-23}, -{81,-21,-22}, -{81,-21,-21}, -{81,-21,-20}, -{81,-21,-19}, -{81,-21,-18}, -{81,-21,-17}, -{81,-21,-16}, -{81,-21,-15}, -{81,-21,-14}, -{81,-21,-13}, -{81,-21,-12}, -{81,-21,-11}, -{81,-21,-10}, -{81,-21,-9}, -{81,-21,-8}, -{81,-21,-7}, -{81,-21,-6}, -{81,-21,-5}, -{81,-21,-4}, -{81,-21,-3}, -{81,-21,-2}, -{81,-21,-1}, -{81,-21,0}, -{81,-21,1}, -{81,-21,2}, -{81,-21,3}, -{81,-21,4}, -{81,-21,5}, -{81,-21,6}, -{81,-21,7}, -{81,-21,8}, -{81,-21,9}, -{81,-21,10}, -{81,-21,11}, -{81,-21,12}, -{81,-21,13}, -{81,-21,14}, -{81,-21,15}, -{81,-21,16}, -{81,-21,17}, -{81,-21,18}, -{81,-21,19}, -{81,-21,20}, -{81,-21,21}, -{81,-21,22}, -{81,-21,23}, -{81,-21,24}, -{81,-21,25}, -{81,-21,26}, -{81,-21,27}, -{81,-21,28}, -{81,-21,29}, -{81,-21,30}, -{81,-21,31}, -{81,-21,32}, -{81,-21,33}, -{81,-21,34}, -{81,-21,35}, -{81,-21,36}, -{81,-21,37}, -{81,-21,38}, -{81,-21,39}, -{81,-21,40}, -{81,-21,41}, -{81,-21,42}, -{81,-21,43}, -{81,-21,44}, -{81,-21,45}, -{81,-21,46}, -{81,-21,47}, -{81,-21,48}, -{81,-21,49}, -{81,-21,50}, -{81,-21,51}, -{81,-21,52}, -{81,-21,53}, -{81,-21,54}, -{81,-21,55}, -{81,-21,56}, -{81,-21,57}, -{81,-21,58}, -{81,-21,59}, -{81,-21,60}, -{81,-21,61}, -{81,-21,62}, -{81,-21,63}, -{81,-21,64}, -{81,-21,65}, -{81,-21,66}, -{81,-21,67}, -{81,-21,68}, -{81,-21,69}, -{81,-21,70}, -{81,-21,71}, -{81,-21,72}, -{81,-21,73}, -{81,-21,74}, -{81,-21,75}, -{81,-21,76}, -{81,-21,77}, -{81,-21,78}, -{81,-21,79}, -{81,-21,80}, -{81,-21,81}, -{81,-20,-29}, -{81,-20,-28}, -{81,-20,-27}, -{81,-20,-26}, -{81,-20,-25}, -{81,-20,-24}, -{81,-20,-23}, -{81,-20,-22}, -{81,-20,-21}, -{81,-20,-20}, -{81,-20,-19}, -{81,-20,-18}, -{81,-20,-17}, -{81,-20,-16}, -{81,-20,-15}, -{81,-20,-14}, -{81,-20,-13}, -{81,-20,-12}, -{81,-20,-11}, -{81,-20,-10}, -{81,-20,-9}, -{81,-20,-8}, -{81,-20,-7}, -{81,-20,-6}, -{81,-20,-5}, -{81,-20,-4}, -{81,-20,-3}, -{81,-20,-2}, -{81,-20,-1}, -{81,-20,0}, -{81,-20,1}, -{81,-20,2}, -{81,-20,3}, -{81,-20,4}, -{81,-20,5}, -{81,-20,6}, -{81,-20,7}, -{81,-20,8}, -{81,-20,9}, -{81,-20,10}, -{81,-20,11}, -{81,-20,12}, -{81,-20,13}, -{81,-20,14}, -{81,-20,15}, -{81,-20,16}, -{81,-20,17}, -{81,-20,18}, -{81,-20,19}, -{81,-20,20}, -{81,-20,21}, -{81,-20,22}, -{81,-20,23}, -{81,-20,24}, -{81,-20,25}, -{81,-20,26}, -{81,-20,27}, -{81,-20,28}, -{81,-20,29}, -{81,-20,30}, -{81,-20,31}, -{81,-20,32}, -{81,-20,33}, -{81,-20,34}, -{81,-20,35}, -{81,-20,36}, -{81,-20,37}, -{81,-20,38}, -{81,-20,39}, -{81,-20,40}, -{81,-20,41}, -{81,-20,42}, -{81,-20,43}, -{81,-20,44}, -{81,-20,45}, -{81,-20,46}, -{81,-20,47}, -{81,-20,48}, -{81,-20,49}, -{81,-20,50}, -{81,-20,51}, -{81,-20,52}, -{81,-20,53}, -{81,-20,54}, -{81,-20,55}, -{81,-20,56}, -{81,-20,57}, -{81,-20,58}, -{81,-20,59}, -{81,-20,60}, -{81,-20,61}, -{81,-20,62}, -{81,-20,63}, -{81,-20,64}, -{81,-20,65}, -{81,-20,66}, -{81,-20,67}, -{81,-20,68}, -{81,-20,69}, -{81,-20,70}, -{81,-20,71}, -{81,-20,72}, -{81,-20,73}, -{81,-20,74}, -{81,-20,75}, -{81,-20,76}, -{81,-20,77}, -{81,-20,78}, -{81,-20,79}, -{81,-20,80}, -{81,-20,81}, -{81,-19,-29}, -{81,-19,-28}, -{81,-19,-27}, -{81,-19,-26}, -{81,-19,-25}, -{81,-19,-24}, -{81,-19,-23}, -{81,-19,-22}, -{81,-19,-21}, -{81,-19,-20}, -{81,-19,-19}, -{81,-19,-18}, -{81,-19,-17}, -{81,-19,-16}, -{81,-19,-15}, -{81,-19,-14}, -{81,-19,-13}, -{81,-19,-12}, -{81,-19,-11}, -{81,-19,-10}, -{81,-19,-9}, -{81,-19,-8}, -{81,-19,-7}, -{81,-19,-6}, -{81,-19,-5}, -{81,-19,-4}, -{81,-19,-3}, -{81,-19,-2}, -{81,-19,-1}, -{81,-19,0}, -{81,-19,1}, -{81,-19,2}, -{81,-19,3}, -{81,-19,4}, -{81,-19,5}, -{81,-19,6}, -{81,-19,7}, -{81,-19,8}, -{81,-19,9}, -{81,-19,10}, -{81,-19,11}, -{81,-19,12}, -{81,-19,13}, -{81,-19,14}, -{81,-19,15}, -{81,-19,16}, -{81,-19,17}, -{81,-19,18}, -{81,-19,19}, -{81,-19,20}, -{81,-19,21}, -{81,-19,22}, -{81,-19,23}, -{81,-19,24}, -{81,-19,25}, -{81,-19,26}, -{81,-19,27}, -{81,-19,28}, -{81,-19,29}, -{81,-19,30}, -{81,-19,31}, -{81,-19,32}, -{81,-19,33}, -{81,-19,34}, -{81,-19,35}, -{81,-19,36}, -{81,-19,37}, -{81,-19,38}, -{81,-19,39}, -{81,-19,40}, -{81,-19,41}, -{81,-19,42}, -{81,-19,43}, -{81,-19,44}, -{81,-19,45}, -{81,-19,46}, -{81,-19,47}, -{81,-19,48}, -{81,-19,49}, -{81,-19,50}, -{81,-19,51}, -{81,-19,52}, -{81,-19,53}, -{81,-19,54}, -{81,-19,55}, -{81,-19,56}, -{81,-19,57}, -{81,-19,58}, -{81,-19,59}, -{81,-19,60}, -{81,-19,61}, -{81,-19,62}, -{81,-19,63}, -{81,-19,64}, -{81,-19,65}, -{81,-19,66}, -{81,-19,67}, -{81,-19,68}, -{81,-19,69}, -{81,-19,70}, -{81,-19,71}, -{81,-19,72}, -{81,-19,73}, -{81,-19,74}, -{81,-19,75}, -{81,-19,76}, -{81,-19,77}, -{81,-19,78}, -{81,-19,79}, -{81,-19,80}, -{81,-19,81}, -{81,-18,-29}, -{81,-18,-28}, -{81,-18,-27}, -{81,-18,-26}, -{81,-18,-25}, -{81,-18,-24}, -{81,-18,-23}, -{81,-18,-22}, -{81,-18,-21}, -{81,-18,-20}, -{81,-18,-19}, -{81,-18,-18}, -{81,-18,-17}, -{81,-18,-16}, -{81,-18,-15}, -{81,-18,-14}, -{81,-18,-13}, -{81,-18,-12}, -{81,-18,-11}, -{81,-18,-10}, -{81,-18,-9}, -{81,-18,-8}, -{81,-18,-7}, -{81,-18,-6}, -{81,-18,-5}, -{81,-18,-4}, -{81,-18,-3}, -{81,-18,-2}, -{81,-18,-1}, -{81,-18,0}, -{81,-18,1}, -{81,-18,2}, -{81,-18,3}, -{81,-18,4}, -{81,-18,5}, -{81,-18,6}, -{81,-18,7}, -{81,-18,8}, -{81,-18,9}, -{81,-18,10}, -{81,-18,11}, -{81,-18,12}, -{81,-18,13}, -{81,-18,14}, -{81,-18,15}, -{81,-18,16}, -{81,-18,17}, -{81,-18,18}, -{81,-18,19}, -{81,-18,20}, -{81,-18,21}, -{81,-18,22}, -{81,-18,23}, -{81,-18,24}, -{81,-18,25}, -{81,-18,26}, -{81,-18,27}, -{81,-18,28}, -{81,-18,29}, -{81,-18,30}, -{81,-18,31}, -{81,-18,32}, -{81,-18,33}, -{81,-18,34}, -{81,-18,35}, -{81,-18,36}, -{81,-18,37}, -{81,-18,38}, -{81,-18,39}, -{81,-18,40}, -{81,-18,41}, -{81,-18,42}, -{81,-18,43}, -{81,-18,44}, -{81,-18,45}, -{81,-18,46}, -{81,-18,47}, -{81,-18,48}, -{81,-18,49}, -{81,-18,50}, -{81,-18,51}, -{81,-18,52}, -{81,-18,53}, -{81,-18,54}, -{81,-18,55}, -{81,-18,56}, -{81,-18,57}, -{81,-18,58}, -{81,-18,59}, -{81,-18,60}, -{81,-18,61}, -{81,-18,62}, -{81,-18,63}, -{81,-18,64}, -{81,-18,65}, -{81,-18,66}, -{81,-18,67}, -{81,-18,68}, -{81,-18,69}, -{81,-18,70}, -{81,-18,71}, -{81,-18,72}, -{81,-18,73}, -{81,-18,74}, -{81,-18,75}, -{81,-18,76}, -{81,-18,77}, -{81,-18,78}, -{81,-18,79}, -{81,-18,80}, -{81,-18,81}, -{81,-17,-29}, -{81,-17,-28}, -{81,-17,-27}, -{81,-17,-26}, -{81,-17,-25}, -{81,-17,-24}, -{81,-17,-23}, -{81,-17,-22}, -{81,-17,-21}, -{81,-17,-20}, -{81,-17,-19}, -{81,-17,-18}, -{81,-17,-17}, -{81,-17,-16}, -{81,-17,-15}, -{81,-17,-14}, -{81,-17,-13}, -{81,-17,-12}, -{81,-17,-11}, -{81,-17,-10}, -{81,-17,-9}, -{81,-17,-8}, -{81,-17,-7}, -{81,-17,-6}, -{81,-17,-5}, -{81,-17,-4}, -{81,-17,-3}, -{81,-17,-2}, -{81,-17,-1}, -{81,-17,0}, -{81,-17,1}, -{81,-17,2}, -{81,-17,3}, -{81,-17,4}, -{81,-17,5}, -{81,-17,6}, -{81,-17,7}, -{81,-17,8}, -{81,-17,9}, -{81,-17,10}, -{81,-17,11}, -{81,-17,12}, -{81,-17,13}, -{81,-17,14}, -{81,-17,15}, -{81,-17,16}, -{81,-17,17}, -{81,-17,18}, -{81,-17,19}, -{81,-17,20}, -{81,-17,21}, -{81,-17,22}, -{81,-17,23}, -{81,-17,24}, -{81,-17,25}, -{81,-17,26}, -{81,-17,27}, -{81,-17,28}, -{81,-17,29}, -{81,-17,30}, -{81,-17,31}, -{81,-17,32}, -{81,-17,33}, -{81,-17,34}, -{81,-17,35}, -{81,-17,36}, -{81,-17,37}, -{81,-17,38}, -{81,-17,39}, -{81,-17,40}, -{81,-17,41}, -{81,-17,42}, -{81,-17,43}, -{81,-17,44}, -{81,-17,45}, -{81,-17,46}, -{81,-17,47}, -{81,-17,48}, -{81,-17,49}, -{81,-17,50}, -{81,-17,51}, -{81,-17,52}, -{81,-17,53}, -{81,-17,54}, -{81,-17,55}, -{81,-17,56}, -{81,-17,57}, -{81,-17,58}, -{81,-17,59}, -{81,-17,60}, -{81,-17,61}, -{81,-17,62}, -{81,-17,63}, -{81,-17,64}, -{81,-17,65}, -{81,-17,66}, -{81,-17,67}, -{81,-17,68}, -{81,-17,69}, -{81,-17,70}, -{81,-17,71}, -{81,-17,72}, -{81,-17,73}, -{81,-17,74}, -{81,-17,75}, -{81,-17,76}, -{81,-17,77}, -{81,-17,78}, -{81,-17,79}, -{81,-17,80}, -{81,-17,81}, -{81,-16,-29}, -{81,-16,-28}, -{81,-16,-27}, -{81,-16,-26}, -{81,-16,-25}, -{81,-16,-24}, -{81,-16,-23}, -{81,-16,-22}, -{81,-16,-21}, -{81,-16,-20}, -{81,-16,-19}, -{81,-16,-18}, -{81,-16,-17}, -{81,-16,-16}, -{81,-16,-15}, -{81,-16,-14}, -{81,-16,-13}, -{81,-16,-12}, -{81,-16,-11}, -{81,-16,-10}, -{81,-16,-9}, -{81,-16,-8}, -{81,-16,-7}, -{81,-16,-6}, -{81,-16,-5}, -{81,-16,-4}, -{81,-16,-3}, -{81,-16,-2}, -{81,-16,-1}, -{81,-16,0}, -{81,-16,1}, -{81,-16,2}, -{81,-16,3}, -{81,-16,4}, -{81,-16,5}, -{81,-16,6}, -{81,-16,7}, -{81,-16,8}, -{81,-16,9}, -{81,-16,10}, -{81,-16,11}, -{81,-16,12}, -{81,-16,13}, -{81,-16,14}, -{81,-16,15}, -{81,-16,16}, -{81,-16,17}, -{81,-16,18}, -{81,-16,19}, -{81,-16,20}, -{81,-16,21}, -{81,-16,22}, -{81,-16,23}, -{81,-16,24}, -{81,-16,25}, -{81,-16,26}, -{81,-16,27}, -{81,-16,28}, -{81,-16,29}, -{81,-16,30}, -{81,-16,31}, -{81,-16,32}, -{81,-16,33}, -{81,-16,34}, -{81,-16,35}, -{81,-16,36}, -{81,-16,37}, -{81,-16,38}, -{81,-16,39}, -{81,-16,40}, -{81,-16,41}, -{81,-16,42}, -{81,-16,43}, -{81,-16,44}, -{81,-16,45}, -{81,-16,46}, -{81,-16,47}, -{81,-16,48}, -{81,-16,49}, -{81,-16,50}, -{81,-16,51}, -{81,-16,52}, -{81,-16,53}, -{81,-16,54}, -{81,-16,55}, -{81,-16,56}, -{81,-16,57}, -{81,-16,58}, -{81,-16,59}, -{81,-16,60}, -{81,-16,61}, -{81,-16,62}, -{81,-16,63}, -{81,-16,64}, -{81,-16,65}, -{81,-16,66}, -{81,-16,67}, -{81,-16,68}, -{81,-16,69}, -{81,-16,70}, -{81,-16,71}, -{81,-16,72}, -{81,-16,73}, -{81,-16,74}, -{81,-16,75}, -{81,-16,76}, -{81,-16,77}, -{81,-16,78}, -{81,-16,79}, -{81,-16,80}, -{81,-16,81}, -{81,-15,-29}, -{81,-15,-28}, -{81,-15,-27}, -{81,-15,-26}, -{81,-15,-25}, -{81,-15,-24}, -{81,-15,-23}, -{81,-15,-22}, -{81,-15,-21}, -{81,-15,-20}, -{81,-15,-19}, -{81,-15,-18}, -{81,-15,-17}, -{81,-15,-16}, -{81,-15,-15}, -{81,-15,-14}, -{81,-15,-13}, -{81,-15,-12}, -{81,-15,-11}, -{81,-15,-10}, -{81,-15,-9}, -{81,-15,-8}, -{81,-15,-7}, -{81,-15,-6}, -{81,-15,-5}, -{81,-15,-4}, -{81,-15,-3}, -{81,-15,-2}, -{81,-15,-1}, -{81,-15,0}, -{81,-15,1}, -{81,-15,2}, -{81,-15,3}, -{81,-15,4}, -{81,-15,5}, -{81,-15,6}, -{81,-15,7}, -{81,-15,8}, -{81,-15,9}, -{81,-15,10}, -{81,-15,11}, -{81,-15,12}, -{81,-15,13}, -{81,-15,14}, -{81,-15,15}, -{81,-15,16}, -{81,-15,17}, -{81,-15,18}, -{81,-15,19}, -{81,-15,20}, -{81,-15,21}, -{81,-15,22}, -{81,-15,23}, -{81,-15,24}, -{81,-15,25}, -{81,-15,26}, -{81,-15,27}, -{81,-15,28}, -{81,-15,29}, -{81,-15,30}, -{81,-15,31}, -{81,-15,32}, -{81,-15,33}, -{81,-15,34}, -{81,-15,35}, -{81,-15,36}, -{81,-15,37}, -{81,-15,38}, -{81,-15,39}, -{81,-15,40}, -{81,-15,41}, -{81,-15,42}, -{81,-15,43}, -{81,-15,44}, -{81,-15,45}, -{81,-15,46}, -{81,-15,47}, -{81,-15,48}, -{81,-15,49}, -{81,-15,50}, -{81,-15,51}, -{81,-15,52}, -{81,-15,53}, -{81,-15,54}, -{81,-15,55}, -{81,-15,56}, -{81,-15,57}, -{81,-15,58}, -{81,-15,59}, -{81,-15,60}, -{81,-15,61}, -{81,-15,62}, -{81,-15,63}, -{81,-15,64}, -{81,-15,65}, -{81,-15,66}, -{81,-15,67}, -{81,-15,68}, -{81,-15,69}, -{81,-15,70}, -{81,-15,71}, -{81,-15,72}, -{81,-15,73}, -{81,-15,74}, -{81,-15,75}, -{81,-15,76}, -{81,-15,77}, -{81,-15,78}, -{81,-15,79}, -{81,-15,80}, -{81,-15,81}, -{81,-14,-29}, -{81,-14,-28}, -{81,-14,-27}, -{81,-14,-26}, -{81,-14,-25}, -{81,-14,-24}, -{81,-14,-23}, -{81,-14,-22}, -{81,-14,-21}, -{81,-14,-20}, -{81,-14,-19}, -{81,-14,-18}, -{81,-14,-17}, -{81,-14,-16}, -{81,-14,-15}, -{81,-14,-14}, -{81,-14,-13}, -{81,-14,-12}, -{81,-14,-11}, -{81,-14,-10}, -{81,-14,-9}, -{81,-14,-8}, -{81,-14,-7}, -{81,-14,-6}, -{81,-14,-5}, -{81,-14,-4}, -{81,-14,-3}, -{81,-14,-2}, -{81,-14,-1}, -{81,-14,0}, -{81,-14,1}, -{81,-14,2}, -{81,-14,3}, -{81,-14,4}, -{81,-14,5}, -{81,-14,6}, -{81,-14,7}, -{81,-14,8}, -{81,-14,9}, -{81,-14,10}, -{81,-14,11}, -{81,-14,12}, -{81,-14,13}, -{81,-14,14}, -{81,-14,15}, -{81,-14,16}, -{81,-14,17}, -{81,-14,18}, -{81,-14,19}, -{81,-14,20}, -{81,-14,21}, -{81,-14,22}, -{81,-14,23}, -{81,-14,24}, -{81,-14,25}, -{81,-14,26}, -{81,-14,27}, -{81,-14,28}, -{81,-14,29}, -{81,-14,30}, -{81,-14,31}, -{81,-14,32}, -{81,-14,33}, -{81,-14,34}, -{81,-14,35}, -{81,-14,36}, -{81,-14,37}, -{81,-14,38}, -{81,-14,39}, -{81,-14,40}, -{81,-14,41}, -{81,-14,42}, -{81,-14,43}, -{81,-14,44}, -{81,-14,45}, -{81,-14,46}, -{81,-14,47}, -{81,-14,48}, -{81,-14,49}, -{81,-14,50}, -{81,-14,51}, -{81,-14,52}, -{81,-14,53}, -{81,-14,54}, -{81,-14,55}, -{81,-14,56}, -{81,-14,57}, -{81,-14,58}, -{81,-14,59}, -{81,-14,60}, -{81,-14,61}, -{81,-14,62}, -{81,-14,63}, -{81,-14,64}, -{81,-14,65}, -{81,-14,66}, -{81,-14,67}, -{81,-14,68}, -{81,-14,69}, -{81,-14,70}, -{81,-14,71}, -{81,-14,72}, -{81,-14,73}, -{81,-14,74}, -{81,-14,75}, -{81,-14,76}, -{81,-14,77}, -{81,-14,78}, -{81,-14,79}, -{81,-14,80}, -{81,-14,81}, -{81,-13,-29}, -{81,-13,-28}, -{81,-13,-27}, -{81,-13,-26}, -{81,-13,-25}, -{81,-13,-24}, -{81,-13,-23}, -{81,-13,-22}, -{81,-13,-21}, -{81,-13,-20}, -{81,-13,-19}, -{81,-13,-18}, -{81,-13,-17}, -{81,-13,-16}, -{81,-13,-15}, -{81,-13,-14}, -{81,-13,-13}, -{81,-13,-12}, -{81,-13,-11}, -{81,-13,-10}, -{81,-13,-9}, -{81,-13,-8}, -{81,-13,-7}, -{81,-13,-6}, -{81,-13,-5}, -{81,-13,-4}, -{81,-13,-3}, -{81,-13,-2}, -{81,-13,-1}, -{81,-13,0}, -{81,-13,1}, -{81,-13,2}, -{81,-13,3}, -{81,-13,4}, -{81,-13,5}, -{81,-13,6}, -{81,-13,7}, -{81,-13,8}, -{81,-13,9}, -{81,-13,10}, -{81,-13,11}, -{81,-13,12}, -{81,-13,13}, -{81,-13,14}, -{81,-13,15}, -{81,-13,16}, -{81,-13,17}, -{81,-13,18}, -{81,-13,19}, -{81,-13,20}, -{81,-13,21}, -{81,-13,22}, -{81,-13,23}, -{81,-13,24}, -{81,-13,25}, -{81,-13,26}, -{81,-13,27}, -{81,-13,28}, -{81,-13,29}, -{81,-13,30}, -{81,-13,31}, -{81,-13,32}, -{81,-13,33}, -{81,-13,34}, -{81,-13,35}, -{81,-13,36}, -{81,-13,37}, -{81,-13,38}, -{81,-13,39}, -{81,-13,40}, -{81,-13,41}, -{81,-13,42}, -{81,-13,43}, -{81,-13,44}, -{81,-13,45}, -{81,-13,46}, -{81,-13,47}, -{81,-13,48}, -{81,-13,49}, -{81,-13,50}, -{81,-13,51}, -{81,-13,52}, -{81,-13,53}, -{81,-13,54}, -{81,-13,55}, -{81,-13,56}, -{81,-13,57}, -{81,-13,58}, -{81,-13,59}, -{81,-13,60}, -{81,-13,61}, -{81,-13,62}, -{81,-13,63}, -{81,-13,64}, -{81,-13,65}, -{81,-13,66}, -{81,-13,67}, -{81,-13,68}, -{81,-13,69}, -{81,-13,70}, -{81,-13,71}, -{81,-13,72}, -{81,-13,73}, -{81,-13,74}, -{81,-13,75}, -{81,-13,76}, -{81,-13,77}, -{81,-13,78}, -{81,-13,79}, -{81,-13,80}, -{81,-13,81}, -{81,-12,-29}, -{81,-12,-28}, -{81,-12,-27}, -{81,-12,-26}, -{81,-12,-25}, -{81,-12,-24}, -{81,-12,-23}, -{81,-12,-22}, -{81,-12,-21}, -{81,-12,-20}, -{81,-12,-19}, -{81,-12,-18}, -{81,-12,-17}, -{81,-12,-16}, -{81,-12,-15}, -{81,-12,-14}, -{81,-12,-13}, -{81,-12,-12}, -{81,-12,-11}, -{81,-12,-10}, -{81,-12,-9}, -{81,-12,-8}, -{81,-12,-7}, -{81,-12,-6}, -{81,-12,-5}, -{81,-12,-4}, -{81,-12,-3}, -{81,-12,-2}, -{81,-12,-1}, -{81,-12,0}, -{81,-12,1}, -{81,-12,2}, -{81,-12,3}, -{81,-12,4}, -{81,-12,5}, -{81,-12,6}, -{81,-12,7}, -{81,-12,8}, -{81,-12,9}, -{81,-12,10}, -{81,-12,11}, -{81,-12,12}, -{81,-12,13}, -{81,-12,14}, -{81,-12,15}, -{81,-12,16}, -{81,-12,17}, -{81,-12,18}, -{81,-12,19}, -{81,-12,20}, -{81,-12,21}, -{81,-12,22}, -{81,-12,23}, -{81,-12,24}, -{81,-12,25}, -{81,-12,26}, -{81,-12,27}, -{81,-12,28}, -{81,-12,29}, -{81,-12,30}, -{81,-12,31}, -{81,-12,32}, -{81,-12,33}, -{81,-12,34}, -{81,-12,35}, -{81,-12,36}, -{81,-12,37}, -{81,-12,38}, -{81,-12,39}, -{81,-12,40}, -{81,-12,41}, -{81,-12,42}, -{81,-12,43}, -{81,-12,44}, -{81,-12,45}, -{81,-12,46}, -{81,-12,47}, -{81,-12,48}, -{81,-12,49}, -{81,-12,50}, -{81,-12,51}, -{81,-12,52}, -{81,-12,53}, -{81,-12,54}, -{81,-12,55}, -{81,-12,56}, -{81,-12,57}, -{81,-12,58}, -{81,-12,59}, -{81,-12,60}, -{81,-12,61}, -{81,-12,62}, -{81,-12,63}, -{81,-12,64}, -{81,-12,65}, -{81,-12,66}, -{81,-12,67}, -{81,-12,68}, -{81,-12,69}, -{81,-12,70}, -{81,-12,71}, -{81,-12,72}, -{81,-12,73}, -{81,-12,74}, -{81,-12,75}, -{81,-12,76}, -{81,-12,77}, -{81,-12,78}, -{81,-12,79}, -{81,-12,80}, -{81,-12,81}, -{81,-11,-29}, -{81,-11,-28}, -{81,-11,-27}, -{81,-11,-26}, -{81,-11,-25}, -{81,-11,-24}, -{81,-11,-23}, -{81,-11,-22}, -{81,-11,-21}, -{81,-11,-20}, -{81,-11,-19}, -{81,-11,-18}, -{81,-11,-17}, -{81,-11,-16}, -{81,-11,-15}, -{81,-11,-14}, -{81,-11,-13}, -{81,-11,-12}, -{81,-11,-11}, -{81,-11,-10}, -{81,-11,-9}, -{81,-11,-8}, -{81,-11,-7}, -{81,-11,-6}, -{81,-11,-5}, -{81,-11,-4}, -{81,-11,-3}, -{81,-11,-2}, -{81,-11,-1}, -{81,-11,0}, -{81,-11,1}, -{81,-11,2}, -{81,-11,3}, -{81,-11,4}, -{81,-11,5}, -{81,-11,6}, -{81,-11,7}, -{81,-11,8}, -{81,-11,9}, -{81,-11,10}, -{81,-11,11}, -{81,-11,12}, -{81,-11,13}, -{81,-11,14}, -{81,-11,15}, -{81,-11,16}, -{81,-11,17}, -{81,-11,18}, -{81,-11,19}, -{81,-11,20}, -{81,-11,21}, -{81,-11,22}, -{81,-11,23}, -{81,-11,24}, -{81,-11,25}, -{81,-11,26}, -{81,-11,27}, -{81,-11,28}, -{81,-11,29}, -{81,-11,30}, -{81,-11,31}, -{81,-11,32}, -{81,-11,33}, -{81,-11,34}, -{81,-11,35}, -{81,-11,36}, -{81,-11,37}, -{81,-11,38}, -{81,-11,39}, -{81,-11,40}, -{81,-11,41}, -{81,-11,42}, -{81,-11,43}, -{81,-11,44}, -{81,-11,45}, -{81,-11,46}, -{81,-11,47}, -{81,-11,48}, -{81,-11,49}, -{81,-11,50}, -{81,-11,51}, -{81,-11,52}, -{81,-11,53}, -{81,-11,54}, -{81,-11,55}, -{81,-11,56}, -{81,-11,57}, -{81,-11,58}, -{81,-11,59}, -{81,-11,60}, -{81,-11,61}, -{81,-11,62}, -{81,-11,63}, -{81,-11,64}, -{81,-11,65}, -{81,-11,66}, -{81,-11,67}, -{81,-11,68}, -{81,-11,69}, -{81,-11,70}, -{81,-11,71}, -{81,-11,72}, -{81,-11,73}, -{81,-11,74}, -{81,-11,75}, -{81,-11,76}, -{81,-11,77}, -{81,-11,78}, -{81,-11,79}, -{81,-11,80}, -{81,-11,81}, -{81,-10,-29}, -{81,-10,-28}, -{81,-10,-27}, -{81,-10,-26}, -{81,-10,-25}, -{81,-10,-24}, -{81,-10,-23}, -{81,-10,-22}, -{81,-10,-21}, -{81,-10,-20}, -{81,-10,-19}, -{81,-10,-18}, -{81,-10,-17}, -{81,-10,-16}, -{81,-10,-15}, -{81,-10,-14}, -{81,-10,-13}, -{81,-10,-12}, -{81,-10,-11}, -{81,-10,-10}, -{81,-10,-9}, -{81,-10,-8}, -{81,-10,-7}, -{81,-10,-6}, -{81,-10,-5}, -{81,-10,-4}, -{81,-10,-3}, -{81,-10,-2}, -{81,-10,-1}, -{81,-10,0}, -{81,-10,1}, -{81,-10,2}, -{81,-10,3}, -{81,-10,4}, -{81,-10,5}, -{81,-10,6}, -{81,-10,7}, -{81,-10,8}, -{81,-10,9}, -{81,-10,10}, -{81,-10,11}, -{81,-10,12}, -{81,-10,13}, -{81,-10,14}, -{81,-10,15}, -{81,-10,16}, -{81,-10,17}, -{81,-10,18}, -{81,-10,19}, -{81,-10,20}, -{81,-10,21}, -{81,-10,22}, -{81,-10,23}, -{81,-10,24}, -{81,-10,25}, -{81,-10,26}, -{81,-10,27}, -{81,-10,28}, -{81,-10,29}, -{81,-10,30}, -{81,-10,31}, -{81,-10,32}, -{81,-10,33}, -{81,-10,34}, -{81,-10,35}, -{81,-10,36}, -{81,-10,37}, -{81,-10,38}, -{81,-10,39}, -{81,-10,40}, -{81,-10,41}, -{81,-10,42}, -{81,-10,43}, -{81,-10,44}, -{81,-10,45}, -{81,-10,46}, -{81,-10,47}, -{81,-10,48}, -{81,-10,49}, -{81,-10,50}, -{81,-10,51}, -{81,-10,52}, -{81,-10,53}, -{81,-10,54}, -{81,-10,55}, -{81,-10,56}, -{81,-10,57}, -{81,-10,58}, -{81,-10,59}, -{81,-10,60}, -{81,-10,61}, -{81,-10,62}, -{81,-10,63}, -{81,-10,64}, -{81,-10,65}, -{81,-10,66}, -{81,-10,67}, -{81,-10,68}, -{81,-10,69}, -{81,-10,70}, -{81,-10,71}, -{81,-10,72}, -{81,-10,73}, -{81,-10,74}, -{81,-10,75}, -{81,-10,76}, -{81,-10,77}, -{81,-10,78}, -{81,-10,79}, -{81,-10,80}, -{81,-10,81}, -{81,-9,-29}, -{81,-9,-28}, -{81,-9,-27}, -{81,-9,-26}, -{81,-9,-25}, -{81,-9,-24}, -{81,-9,-23}, -{81,-9,-22}, -{81,-9,-21}, -{81,-9,-20}, -{81,-9,-19}, -{81,-9,-18}, -{81,-9,-17}, -{81,-9,-16}, -{81,-9,-15}, -{81,-9,-14}, -{81,-9,-13}, -{81,-9,-12}, -{81,-9,-11}, -{81,-9,-10}, -{81,-9,-9}, -{81,-9,-8}, -{81,-9,-7}, -{81,-9,-6}, -{81,-9,-5}, -{81,-9,-4}, -{81,-9,-3}, -{81,-9,-2}, -{81,-9,-1}, -{81,-9,0}, -{81,-9,1}, -{81,-9,2}, -{81,-9,3}, -{81,-9,4}, -{81,-9,5}, -{81,-9,6}, -{81,-9,7}, -{81,-9,8}, -{81,-9,9}, -{81,-9,10}, -{81,-9,11}, -{81,-9,12}, -{81,-9,13}, -{81,-9,14}, -{81,-9,15}, -{81,-9,16}, -{81,-9,17}, -{81,-9,18}, -{81,-9,19}, -{81,-9,20}, -{81,-9,21}, -{81,-9,22}, -{81,-9,23}, -{81,-9,24}, -{81,-9,25}, -{81,-9,26}, -{81,-9,27}, -{81,-9,28}, -{81,-9,29}, -{81,-9,30}, -{81,-9,31}, -{81,-9,32}, -{81,-9,33}, -{81,-9,34}, -{81,-9,35}, -{81,-9,36}, -{81,-9,37}, -{81,-9,38}, -{81,-9,39}, -{81,-9,40}, -{81,-9,41}, -{81,-9,42}, -{81,-9,43}, -{81,-9,44}, -{81,-9,45}, -{81,-9,46}, -{81,-9,47}, -{81,-9,48}, -{81,-9,49}, -{81,-9,50}, -{81,-9,51}, -{81,-9,52}, -{81,-9,53}, -{81,-9,54}, -{81,-9,55}, -{81,-9,56}, -{81,-9,57}, -{81,-9,58}, -{81,-9,59}, -{81,-9,60}, -{81,-9,61}, -{81,-9,62}, -{81,-9,63}, -{81,-9,64}, -{81,-9,65}, -{81,-9,66}, -{81,-9,67}, -{81,-9,68}, -{81,-9,69}, -{81,-9,70}, -{81,-9,71}, -{81,-9,72}, -{81,-9,73}, -{81,-9,74}, -{81,-9,75}, -{81,-9,76}, -{81,-9,77}, -{81,-9,78}, -{81,-9,79}, -{81,-9,80}, -{81,-9,81}, -{81,-8,-29}, -{81,-8,-28}, -{81,-8,-27}, -{81,-8,-26}, -{81,-8,-25}, -{81,-8,-24}, -{81,-8,-23}, -{81,-8,-22}, -{81,-8,-21}, -{81,-8,-20}, -{81,-8,-19}, -{81,-8,-18}, -{81,-8,-17}, -{81,-8,-16}, -{81,-8,-15}, -{81,-8,-14}, -{81,-8,-13}, -{81,-8,-12}, -{81,-8,-11}, -{81,-8,-10}, -{81,-8,-9}, -{81,-8,-8}, -{81,-8,-7}, -{81,-8,-6}, -{81,-8,-5}, -{81,-8,-4}, -{81,-8,-3}, -{81,-8,-2}, -{81,-8,-1}, -{81,-8,0}, -{81,-8,1}, -{81,-8,2}, -{81,-8,3}, -{81,-8,4}, -{81,-8,5}, -{81,-8,6}, -{81,-8,7}, -{81,-8,8}, -{81,-8,9}, -{81,-8,10}, -{81,-8,11}, -{81,-8,12}, -{81,-8,13}, -{81,-8,14}, -{81,-8,15}, -{81,-8,16}, -{81,-8,17}, -{81,-8,18}, -{81,-8,19}, -{81,-8,20}, -{81,-8,21}, -{81,-8,22}, -{81,-8,23}, -{81,-8,24}, -{81,-8,25}, -{81,-8,26}, -{81,-8,27}, -{81,-8,28}, -{81,-8,29}, -{81,-8,30}, -{81,-8,31}, -{81,-8,32}, -{81,-8,33}, -{81,-8,34}, -{81,-8,35}, -{81,-8,36}, -{81,-8,37}, -{81,-8,38}, -{81,-8,39}, -{81,-8,40}, -{81,-8,41}, -{81,-8,42}, -{81,-8,43}, -{81,-8,44}, -{81,-8,45}, -{81,-8,46}, -{81,-8,47}, -{81,-8,48}, -{81,-8,49}, -{81,-8,50}, -{81,-8,51}, -{81,-8,52}, -{81,-8,53}, -{81,-8,54}, -{81,-8,55}, -{81,-8,56}, -{81,-8,57}, -{81,-8,58}, -{81,-8,59}, -{81,-8,60}, -{81,-8,61}, -{81,-8,62}, -{81,-8,63}, -{81,-8,64}, -{81,-8,65}, -{81,-8,66}, -{81,-8,67}, -{81,-8,68}, -{81,-8,69}, -{81,-8,70}, -{81,-8,71}, -{81,-8,72}, -{81,-8,73}, -{81,-8,74}, -{81,-8,75}, -{81,-8,76}, -{81,-8,77}, -{81,-8,78}, -{81,-8,79}, -{81,-8,80}, -{81,-8,81}, -{81,-7,-29}, -{81,-7,-28}, -{81,-7,-27}, -{81,-7,-26}, -{81,-7,-25}, -{81,-7,-24}, -{81,-7,-23}, -{81,-7,-22}, -{81,-7,-21}, -{81,-7,-20}, -{81,-7,-19}, -{81,-7,-18}, -{81,-7,-17}, -{81,-7,-16}, -{81,-7,-15}, -{81,-7,-14}, -{81,-7,-13}, -{81,-7,-12}, -{81,-7,-11}, -{81,-7,-10}, -{81,-7,-9}, -{81,-7,-8}, -{81,-7,-7}, -{81,-7,-6}, -{81,-7,-5}, -{81,-7,-4}, -{81,-7,-3}, -{81,-7,-2}, -{81,-7,-1}, -{81,-7,0}, -{81,-7,1}, -{81,-7,2}, -{81,-7,3}, -{81,-7,4}, -{81,-7,5}, -{81,-7,6}, -{81,-7,7}, -{81,-7,8}, -{81,-7,9}, -{81,-7,10}, -{81,-7,11}, -{81,-7,12}, -{81,-7,13}, -{81,-7,14}, -{81,-7,15}, -{81,-7,16}, -{81,-7,17}, -{81,-7,18}, -{81,-7,19}, -{81,-7,20}, -{81,-7,21}, -{81,-7,22}, -{81,-7,23}, -{81,-7,24}, -{81,-7,25}, -{81,-7,26}, -{81,-7,27}, -{81,-7,28}, -{81,-7,29}, -{81,-7,30}, -{81,-7,31}, -{81,-7,32}, -{81,-7,33}, -{81,-7,34}, -{81,-7,35}, -{81,-7,36}, -{81,-7,37}, -{81,-7,38}, -{81,-7,39}, -{81,-7,40}, -{81,-7,41}, -{81,-7,42}, -{81,-7,43}, -{81,-7,44}, -{81,-7,45}, -{81,-7,46}, -{81,-7,47}, -{81,-7,48}, -{81,-7,49}, -{81,-7,50}, -{81,-7,51}, -{81,-7,52}, -{81,-7,53}, -{81,-7,54}, -{81,-7,55}, -{81,-7,56}, -{81,-7,57}, -{81,-7,58}, -{81,-7,59}, -{81,-7,60}, -{81,-7,61}, -{81,-7,62}, -{81,-7,63}, -{81,-7,64}, -{81,-7,65}, -{81,-7,66}, -{81,-7,67}, -{81,-7,68}, -{81,-7,69}, -{81,-7,70}, -{81,-7,71}, -{81,-7,72}, -{81,-7,73}, -{81,-7,74}, -{81,-7,75}, -{81,-7,76}, -{81,-7,77}, -{81,-7,78}, -{81,-7,79}, -{81,-7,80}, -{81,-7,81}, -{81,-6,-29}, -{81,-6,-28}, -{81,-6,-27}, -{81,-6,-26}, -{81,-6,-25}, -{81,-6,-24}, -{81,-6,-23}, -{81,-6,-22}, -{81,-6,-21}, -{81,-6,-20}, -{81,-6,-19}, -{81,-6,-18}, -{81,-6,-17}, -{81,-6,-16}, -{81,-6,-15}, -{81,-6,-14}, -{81,-6,-13}, -{81,-6,-12}, -{81,-6,-11}, -{81,-6,-10}, -{81,-6,-9}, -{81,-6,-8}, -{81,-6,-7}, -{81,-6,-6}, -{81,-6,-5}, -{81,-6,-4}, -{81,-6,-3}, -{81,-6,-2}, -{81,-6,-1}, -{81,-6,0}, -{81,-6,1}, -{81,-6,2}, -{81,-6,3}, -{81,-6,4}, -{81,-6,5}, -{81,-6,6}, -{81,-6,7}, -{81,-6,8}, -{81,-6,9}, -{81,-6,10}, -{81,-6,11}, -{81,-6,12}, -{81,-6,13}, -{81,-6,14}, -{81,-6,15}, -{81,-6,16}, -{81,-6,17}, -{81,-6,18}, -{81,-6,19}, -{81,-6,20}, -{81,-6,21}, -{81,-6,22}, -{81,-6,23}, -{81,-6,24}, -{81,-6,25}, -{81,-6,26}, -{81,-6,27}, -{81,-6,28}, -{81,-6,29}, -{81,-6,30}, -{81,-6,31}, -{81,-6,32}, -{81,-6,33}, -{81,-6,34}, -{81,-6,35}, -{81,-6,36}, -{81,-6,37}, -{81,-6,38}, -{81,-6,39}, -{81,-6,40}, -{81,-6,41}, -{81,-6,42}, -{81,-6,43}, -{81,-6,44}, -{81,-6,45}, -{81,-6,46}, -{81,-6,47}, -{81,-6,48}, -{81,-6,49}, -{81,-6,50}, -{81,-6,51}, -{81,-6,52}, -{81,-6,53}, -{81,-6,54}, -{81,-6,55}, -{81,-6,56}, -{81,-6,57}, -{81,-6,58}, -{81,-6,59}, -{81,-6,60}, -{81,-6,61}, -{81,-6,62}, -{81,-6,63}, -{81,-6,64}, -{81,-6,65}, -{81,-6,66}, -{81,-6,67}, -{81,-6,68}, -{81,-6,69}, -{81,-6,70}, -{81,-6,71}, -{81,-6,72}, -{81,-6,73}, -{81,-6,74}, -{81,-6,75}, -{81,-6,76}, -{81,-6,77}, -{81,-6,78}, -{81,-6,79}, -{81,-6,80}, -{81,-6,81}, -{81,-6,82}, -{81,-5,-29}, -{81,-5,-28}, -{81,-5,-27}, -{81,-5,-26}, -{81,-5,-25}, -{81,-5,-24}, -{81,-5,-23}, -{81,-5,-22}, -{81,-5,-21}, -{81,-5,-20}, -{81,-5,-19}, -{81,-5,-18}, -{81,-5,-17}, -{81,-5,-16}, -{81,-5,-15}, -{81,-5,-14}, -{81,-5,-13}, -{81,-5,-12}, -{81,-5,-11}, -{81,-5,-10}, -{81,-5,-9}, -{81,-5,-8}, -{81,-5,-7}, -{81,-5,-6}, -{81,-5,-5}, -{81,-5,-4}, -{81,-5,-3}, -{81,-5,-2}, -{81,-5,-1}, -{81,-5,0}, -{81,-5,1}, -{81,-5,2}, -{81,-5,3}, -{81,-5,4}, -{81,-5,5}, -{81,-5,6}, -{81,-5,7}, -{81,-5,8}, -{81,-5,9}, -{81,-5,10}, -{81,-5,11}, -{81,-5,12}, -{81,-5,13}, -{81,-5,14}, -{81,-5,15}, -{81,-5,16}, -{81,-5,17}, -{81,-5,18}, -{81,-5,19}, -{81,-5,20}, -{81,-5,21}, -{81,-5,22}, -{81,-5,23}, -{81,-5,24}, -{81,-5,25}, -{81,-5,26}, -{81,-5,27}, -{81,-5,28}, -{81,-5,29}, -{81,-5,30}, -{81,-5,31}, -{81,-5,32}, -{81,-5,33}, -{81,-5,34}, -{81,-5,35}, -{81,-5,36}, -{81,-5,37}, -{81,-5,38}, -{81,-5,39}, -{81,-5,40}, -{81,-5,41}, -{81,-5,42}, -{81,-5,43}, -{81,-5,44}, -{81,-5,45}, -{81,-5,46}, -{81,-5,47}, -{81,-5,48}, -{81,-5,49}, -{81,-5,50}, -{81,-5,51}, -{81,-5,52}, -{81,-5,53}, -{81,-5,54}, -{81,-5,55}, -{81,-5,56}, -{81,-5,57}, -{81,-5,58}, -{81,-5,59}, -{81,-5,60}, -{81,-5,61}, -{81,-5,62}, -{81,-5,63}, -{81,-5,64}, -{81,-5,65}, -{81,-5,66}, -{81,-5,67}, -{81,-5,68}, -{81,-5,69}, -{81,-5,70}, -{81,-5,71}, -{81,-5,72}, -{81,-5,73}, -{81,-5,74}, -{81,-5,75}, -{81,-5,76}, -{81,-5,77}, -{81,-5,78}, -{81,-5,79}, -{81,-5,80}, -{81,-5,81}, -{81,-5,82}, -{81,-4,-29}, -{81,-4,-28}, -{81,-4,-27}, -{81,-4,-26}, -{81,-4,-25}, -{81,-4,-24}, -{81,-4,-23}, -{81,-4,-22}, -{81,-4,-21}, -{81,-4,-20}, -{81,-4,-19}, -{81,-4,-18}, -{81,-4,-17}, -{81,-4,-16}, -{81,-4,-15}, -{81,-4,-14}, -{81,-4,-13}, -{81,-4,-12}, -{81,-4,-11}, -{81,-4,-10}, -{81,-4,-9}, -{81,-4,-8}, -{81,-4,-7}, -{81,-4,-6}, -{81,-4,-5}, -{81,-4,-4}, -{81,-4,-3}, -{81,-4,-2}, -{81,-4,-1}, -{81,-4,0}, -{81,-4,1}, -{81,-4,2}, -{81,-4,3}, -{81,-4,4}, -{81,-4,5}, -{81,-4,6}, -{81,-4,7}, -{81,-4,8}, -{81,-4,9}, -{81,-4,10}, -{81,-4,11}, -{81,-4,12}, -{81,-4,13}, -{81,-4,14}, -{81,-4,15}, -{81,-4,16}, -{81,-4,17}, -{81,-4,18}, -{81,-4,19}, -{81,-4,20}, -{81,-4,21}, -{81,-4,22}, -{81,-4,23}, -{81,-4,24}, -{81,-4,25}, -{81,-4,26}, -{81,-4,27}, -{81,-4,28}, -{81,-4,29}, -{81,-4,30}, -{81,-4,31}, -{81,-4,32}, -{81,-4,33}, -{81,-4,34}, -{81,-4,35}, -{81,-4,36}, -{81,-4,37}, -{81,-4,38}, -{81,-4,39}, -{81,-4,40}, -{81,-4,41}, -{81,-4,42}, -{81,-4,43}, -{81,-4,44}, -{81,-4,45}, -{81,-4,46}, -{81,-4,47}, -{81,-4,48}, -{81,-4,49}, -{81,-4,50}, -{81,-4,51}, -{81,-4,52}, -{81,-4,53}, -{81,-4,54}, -{81,-4,55}, -{81,-4,56}, -{81,-4,57}, -{81,-4,58}, -{81,-4,59}, -{81,-4,60}, -{81,-4,61}, -{81,-4,62}, -{81,-4,63}, -{81,-4,64}, -{81,-4,65}, -{81,-4,66}, -{81,-4,67}, -{81,-4,68}, -{81,-4,69}, -{81,-4,70}, -{81,-4,71}, -{81,-4,72}, -{81,-4,73}, -{81,-4,74}, -{81,-4,75}, -{81,-4,76}, -{81,-4,77}, -{81,-4,78}, -{81,-4,79}, -{81,-4,80}, -{81,-4,81}, -{81,-4,82}, -{81,-3,-29}, -{81,-3,-28}, -{81,-3,-27}, -{81,-3,-26}, -{81,-3,-25}, -{81,-3,-24}, -{81,-3,-23}, -{81,-3,-22}, -{81,-3,-21}, -{81,-3,-20}, -{81,-3,-19}, -{81,-3,-18}, -{81,-3,-17}, -{81,-3,-16}, -{81,-3,-15}, -{81,-3,-14}, -{81,-3,-13}, -{81,-3,-12}, -{81,-3,-11}, -{81,-3,-10}, -{81,-3,-9}, -{81,-3,-8}, -{81,-3,-7}, -{81,-3,-6}, -{81,-3,-5}, -{81,-3,-4}, -{81,-3,-3}, -{81,-3,-2}, -{81,-3,-1}, -{81,-3,0}, -{81,-3,1}, -{81,-3,2}, -{81,-3,3}, -{81,-3,4}, -{81,-3,5}, -{81,-3,6}, -{81,-3,7}, -{81,-3,8}, -{81,-3,9}, -{81,-3,10}, -{81,-3,11}, -{81,-3,12}, -{81,-3,13}, -{81,-3,14}, -{81,-3,15}, -{81,-3,16}, -{81,-3,17}, -{81,-3,18}, -{81,-3,19}, -{81,-3,20}, -{81,-3,21}, -{81,-3,22}, -{81,-3,23}, -{81,-3,24}, -{81,-3,25}, -{81,-3,26}, -{81,-3,27}, -{81,-3,28}, -{81,-3,29}, -{81,-3,30}, -{81,-3,31}, -{81,-3,32}, -{81,-3,33}, -{81,-3,34}, -{81,-3,35}, -{81,-3,36}, -{81,-3,37}, -{81,-3,38}, -{81,-3,39}, -{81,-3,40}, -{81,-3,41}, -{81,-3,42}, -{81,-3,43}, -{81,-3,44}, -{81,-3,45}, -{81,-3,46}, -{81,-3,47}, -{81,-3,48}, -{81,-3,49}, -{81,-3,50}, -{81,-3,51}, -{81,-3,52}, -{81,-3,53}, -{81,-3,54}, -{81,-3,55}, -{81,-3,56}, -{81,-3,57}, -{81,-3,58}, -{81,-3,59}, -{81,-3,60}, -{81,-3,61}, -{81,-3,62}, -{81,-3,63}, -{81,-3,64}, -{81,-3,65}, -{81,-3,66}, -{81,-3,67}, -{81,-3,68}, -{81,-3,69}, -{81,-3,70}, -{81,-3,71}, -{81,-3,72}, -{81,-3,73}, -{81,-3,74}, -{81,-3,75}, -{81,-3,76}, -{81,-3,77}, -{81,-3,78}, -{81,-3,79}, -{81,-3,80}, -{81,-3,81}, -{81,-3,82}, -{81,-2,-29}, -{81,-2,-28}, -{81,-2,-27}, -{81,-2,-26}, -{81,-2,-25}, -{81,-2,-24}, -{81,-2,-23}, -{81,-2,-22}, -{81,-2,-21}, -{81,-2,-20}, -{81,-2,-19}, -{81,-2,-18}, -{81,-2,-17}, -{81,-2,-16}, -{81,-2,-15}, -{81,-2,-14}, -{81,-2,-13}, -{81,-2,-12}, -{81,-2,-11}, -{81,-2,-10}, -{81,-2,-9}, -{81,-2,-8}, -{81,-2,-7}, -{81,-2,-6}, -{81,-2,-5}, -{81,-2,-4}, -{81,-2,-3}, -{81,-2,-2}, -{81,-2,-1}, -{81,-2,0}, -{81,-2,1}, -{81,-2,2}, -{81,-2,3}, -{81,-2,4}, -{81,-2,5}, -{81,-2,6}, -{81,-2,7}, -{81,-2,8}, -{81,-2,9}, -{81,-2,10}, -{81,-2,11}, -{81,-2,12}, -{81,-2,13}, -{81,-2,14}, -{81,-2,15}, -{81,-2,16}, -{81,-2,17}, -{81,-2,18}, -{81,-2,19}, -{81,-2,20}, -{81,-2,21}, -{81,-2,22}, -{81,-2,23}, -{81,-2,24}, -{81,-2,25}, -{81,-2,26}, -{81,-2,27}, -{81,-2,28}, -{81,-2,29}, -{81,-2,30}, -{81,-2,31}, -{81,-2,32}, -{81,-2,33}, -{81,-2,34}, -{81,-2,35}, -{81,-2,36}, -{81,-2,37}, -{81,-2,38}, -{81,-2,39}, -{81,-2,40}, -{81,-2,41}, -{81,-2,42}, -{81,-2,43}, -{81,-2,44}, -{81,-2,45}, -{81,-2,46}, -{81,-2,47}, -{81,-2,48}, -{81,-2,49}, -{81,-2,50}, -{81,-2,51}, -{81,-2,52}, -{81,-2,53}, -{81,-2,54}, -{81,-2,55}, -{81,-2,56}, -{81,-2,57}, -{81,-2,58}, -{81,-2,59}, -{81,-2,60}, -{81,-2,61}, -{81,-2,62}, -{81,-2,63}, -{81,-2,64}, -{81,-2,65}, -{81,-2,66}, -{81,-2,67}, -{81,-2,68}, -{81,-2,69}, -{81,-2,70}, -{81,-2,71}, -{81,-2,72}, -{81,-2,73}, -{81,-2,74}, -{81,-2,75}, -{81,-2,76}, -{81,-2,77}, -{81,-2,78}, -{81,-2,79}, -{81,-2,80}, -{81,-2,81}, -{81,-2,82}, -{81,-1,-29}, -{81,-1,-28}, -{81,-1,-27}, -{81,-1,-26}, -{81,-1,-25}, -{81,-1,-24}, -{81,-1,-23}, -{81,-1,-22}, -{81,-1,-21}, -{81,-1,-20}, -{81,-1,-19}, -{81,-1,-18}, -{81,-1,-17}, -{81,-1,-16}, -{81,-1,-15}, -{81,-1,-14}, -{81,-1,-13}, -{81,-1,-12}, -{81,-1,-11}, -{81,-1,-10}, -{81,-1,-9}, -{81,-1,-8}, -{81,-1,-7}, -{81,-1,-6}, -{81,-1,-5}, -{81,-1,-4}, -{81,-1,-3}, -{81,-1,-2}, -{81,-1,-1}, -{81,-1,0}, -{81,-1,1}, -{81,-1,2}, -{81,-1,3}, -{81,-1,4}, -{81,-1,5}, -{81,-1,6}, -{81,-1,7}, -{81,-1,8}, -{81,-1,9}, -{81,-1,10}, -{81,-1,11}, -{81,-1,12}, -{81,-1,13}, -{81,-1,14}, -{81,-1,15}, -{81,-1,16}, -{81,-1,17}, -{81,-1,18}, -{81,-1,19}, -{81,-1,20}, -{81,-1,21}, -{81,-1,22}, -{81,-1,23}, -{81,-1,24}, -{81,-1,25}, -{81,-1,26}, -{81,-1,27}, -{81,-1,28}, -{81,-1,29}, -{81,-1,30}, -{81,-1,31}, -{81,-1,32}, -{81,-1,33}, -{81,-1,34}, -{81,-1,35}, -{81,-1,36}, -{81,-1,37}, -{81,-1,38}, -{81,-1,39}, -{81,-1,40}, -{81,-1,41}, -{81,-1,42}, -{81,-1,43}, -{81,-1,44}, -{81,-1,45}, -{81,-1,46}, -{81,-1,47}, -{81,-1,48}, -{81,-1,49}, -{81,-1,50}, -{81,-1,51}, -{81,-1,52}, -{81,-1,53}, -{81,-1,54}, -{81,-1,55}, -{81,-1,56}, -{81,-1,57}, -{81,-1,58}, -{81,-1,59}, -{81,-1,60}, -{81,-1,61}, -{81,-1,62}, -{81,-1,63}, -{81,-1,64}, -{81,-1,65}, -{81,-1,66}, -{81,-1,67}, -{81,-1,68}, -{81,-1,69}, -{81,-1,70}, -{81,-1,71}, -{81,-1,72}, -{81,-1,73}, -{81,-1,74}, -{81,-1,75}, -{81,-1,76}, -{81,-1,77}, -{81,-1,78}, -{81,-1,79}, -{81,-1,80}, -{81,-1,81}, -{81,-1,82}, -{81,0,-29}, -{81,0,-28}, -{81,0,-27}, -{81,0,-26}, -{81,0,-25}, -{81,0,-24}, -{81,0,-23}, -{81,0,-22}, -{81,0,-21}, -{81,0,-20}, -{81,0,-19}, -{81,0,-18}, -{81,0,-17}, -{81,0,-16}, -{81,0,-15}, -{81,0,-14}, -{81,0,-13}, -{81,0,-12}, -{81,0,-11}, -{81,0,-10}, -{81,0,-9}, -{81,0,-8}, -{81,0,-7}, -{81,0,-6}, -{81,0,-5}, -{81,0,-4}, -{81,0,-3}, -{81,0,-2}, -{81,0,-1}, -{81,0,0}, -{81,0,1}, -{81,0,2}, -{81,0,3}, -{81,0,4}, -{81,0,5}, -{81,0,6}, -{81,0,7}, -{81,0,8}, -{81,0,9}, -{81,0,10}, -{81,0,11}, -{81,0,12}, -{81,0,13}, -{81,0,14}, -{81,0,15}, -{81,0,16}, -{81,0,17}, -{81,0,18}, -{81,0,19}, -{81,0,20}, -{81,0,21}, -{81,0,22}, -{81,0,23}, -{81,0,24}, -{81,0,25}, -{81,0,26}, -{81,0,27}, -{81,0,28}, -{81,0,29}, -{81,0,30}, -{81,0,31}, -{81,0,32}, -{81,0,33}, -{81,0,34}, -{81,0,35}, -{81,0,36}, -{81,0,37}, -{81,0,38}, -{81,0,39}, -{81,0,40}, -{81,0,41}, -{81,0,42}, -{81,0,43}, -{81,0,44}, -{81,0,45}, -{81,0,46}, -{81,0,47}, -{81,0,48}, -{81,0,49}, -{81,0,50}, -{81,0,51}, -{81,0,52}, -{81,0,53}, -{81,0,54}, -{81,0,55}, -{81,0,56}, -{81,0,57}, -{81,0,58}, -{81,0,59}, -{81,0,60}, -{81,0,61}, -{81,0,62}, -{81,0,63}, -{81,0,64}, -{81,0,65}, -{81,0,66}, -{81,0,67}, -{81,0,68}, -{81,0,69}, -{81,0,70}, -{81,0,71}, -{81,0,72}, -{81,0,73}, -{81,0,74}, -{81,0,75}, -{81,0,76}, -{81,0,77}, -{81,0,78}, -{81,0,79}, -{81,0,80}, -{81,0,81}, -{81,0,82}, -{81,1,-29}, -{81,1,-28}, -{81,1,-27}, -{81,1,-26}, -{81,1,-25}, -{81,1,-24}, -{81,1,-23}, -{81,1,-22}, -{81,1,-21}, -{81,1,-20}, -{81,1,-19}, -{81,1,-18}, -{81,1,-17}, -{81,1,-16}, -{81,1,-15}, -{81,1,-14}, -{81,1,-13}, -{81,1,-12}, -{81,1,-11}, -{81,1,-10}, -{81,1,-9}, -{81,1,-8}, -{81,1,-7}, -{81,1,-6}, -{81,1,-5}, -{81,1,-4}, -{81,1,-3}, -{81,1,-2}, -{81,1,-1}, -{81,1,0}, -{81,1,1}, -{81,1,2}, -{81,1,3}, -{81,1,4}, -{81,1,5}, -{81,1,6}, -{81,1,7}, -{81,1,8}, -{81,1,9}, -{81,1,10}, -{81,1,11}, -{81,1,12}, -{81,1,13}, -{81,1,14}, -{81,1,15}, -{81,1,16}, -{81,1,17}, -{81,1,18}, -{81,1,19}, -{81,1,20}, -{81,1,21}, -{81,1,22}, -{81,1,23}, -{81,1,24}, -{81,1,25}, -{81,1,26}, -{81,1,27}, -{81,1,28}, -{81,1,29}, -{81,1,30}, -{81,1,31}, -{81,1,32}, -{81,1,33}, -{81,1,34}, -{81,1,35}, -{81,1,36}, -{81,1,37}, -{81,1,38}, -{81,1,39}, -{81,1,40}, -{81,1,41}, -{81,1,42}, -{81,1,43}, -{81,1,44}, -{81,1,45}, -{81,1,46}, -{81,1,47}, -{81,1,48}, -{81,1,49}, -{81,1,50}, -{81,1,51}, -{81,1,52}, -{81,1,53}, -{81,1,54}, -{81,1,55}, -{81,1,56}, -{81,1,57}, -{81,1,58}, -{81,1,59}, -{81,1,60}, -{81,1,61}, -{81,1,62}, -{81,1,63}, -{81,1,64}, -{81,1,65}, -{81,1,66}, -{81,1,67}, -{81,1,68}, -{81,1,69}, -{81,1,70}, -{81,1,71}, -{81,1,72}, -{81,1,73}, -{81,1,74}, -{81,1,75}, -{81,1,76}, -{81,1,77}, -{81,1,78}, -{81,1,79}, -{81,1,80}, -{81,1,81}, -{81,1,82}, -{81,2,-29}, -{81,2,-28}, -{81,2,-27}, -{81,2,-26}, -{81,2,-25}, -{81,2,-24}, -{81,2,-23}, -{81,2,-22}, -{81,2,-21}, -{81,2,-20}, -{81,2,-19}, -{81,2,-18}, -{81,2,-17}, -{81,2,-16}, -{81,2,-15}, -{81,2,-14}, -{81,2,-13}, -{81,2,-12}, -{81,2,-11}, -{81,2,-10}, -{81,2,-9}, -{81,2,-8}, -{81,2,-7}, -{81,2,-6}, -{81,2,-5}, -{81,2,-4}, -{81,2,-3}, -{81,2,-2}, -{81,2,-1}, -{81,2,0}, -{81,2,1}, -{81,2,2}, -{81,2,3}, -{81,2,4}, -{81,2,5}, -{81,2,6}, -{81,2,7}, -{81,2,8}, -{81,2,9}, -{81,2,10}, -{81,2,11}, -{81,2,12}, -{81,2,13}, -{81,2,14}, -{81,2,15}, -{81,2,16}, -{81,2,17}, -{81,2,18}, -{81,2,19}, -{81,2,20}, -{81,2,21}, -{81,2,22}, -{81,2,23}, -{81,2,24}, -{81,2,25}, -{81,2,26}, -{81,2,27}, -{81,2,28}, -{81,2,29}, -{81,2,30}, -{81,2,31}, -{81,2,32}, -{81,2,33}, -{81,2,34}, -{81,2,35}, -{81,2,36}, -{81,2,37}, -{81,2,38}, -{81,2,39}, -{81,2,40}, -{81,2,41}, -{81,2,42}, -{81,2,43}, -{81,2,44}, -{81,2,45}, -{81,2,46}, -{81,2,47}, -{81,2,48}, -{81,2,49}, -{81,2,50}, -{81,2,51}, -{81,2,52}, -{81,2,53}, -{81,2,54}, -{81,2,55}, -{81,2,56}, -{81,2,57}, -{81,2,58}, -{81,2,59}, -{81,2,60}, -{81,2,61}, -{81,2,62}, -{81,2,63}, -{81,2,64}, -{81,2,65}, -{81,2,66}, -{81,2,67}, -{81,2,68}, -{81,2,69}, -{81,2,70}, -{81,2,71}, -{81,2,72}, -{81,2,73}, -{81,2,74}, -{81,2,75}, -{81,2,76}, -{81,2,77}, -{81,2,78}, -{81,2,79}, -{81,2,80}, -{81,2,81}, -{81,2,82}, -{81,3,-29}, -{81,3,-28}, -{81,3,-27}, -{81,3,-26}, -{81,3,-25}, -{81,3,-24}, -{81,3,-23}, -{81,3,-22}, -{81,3,-21}, -{81,3,-20}, -{81,3,-19}, -{81,3,-18}, -{81,3,-17}, -{81,3,-16}, -{81,3,-15}, -{81,3,-14}, -{81,3,-13}, -{81,3,-12}, -{81,3,-11}, -{81,3,-10}, -{81,3,-9}, -{81,3,-8}, -{81,3,-7}, -{81,3,-6}, -{81,3,-5}, -{81,3,-4}, -{81,3,-3}, -{81,3,-2}, -{81,3,-1}, -{81,3,0}, -{81,3,1}, -{81,3,2}, -{81,3,3}, -{81,3,4}, -{81,3,5}, -{81,3,6}, -{81,3,7}, -{81,3,8}, -{81,3,9}, -{81,3,10}, -{81,3,11}, -{81,3,12}, -{81,3,13}, -{81,3,14}, -{81,3,15}, -{81,3,16}, -{81,3,17}, -{81,3,18}, -{81,3,19}, -{81,3,20}, -{81,3,21}, -{81,3,22}, -{81,3,23}, -{81,3,24}, -{81,3,25}, -{81,3,26}, -{81,3,27}, -{81,3,28}, -{81,3,29}, -{81,3,30}, -{81,3,31}, -{81,3,32}, -{81,3,33}, -{81,3,34}, -{81,3,35}, -{81,3,36}, -{81,3,37}, -{81,3,38}, -{81,3,39}, -{81,3,40}, -{81,3,41}, -{81,3,42}, -{81,3,43}, -{81,3,44}, -{81,3,45}, -{81,3,46}, -{81,3,47}, -{81,3,48}, -{81,3,49}, -{81,3,50}, -{81,3,51}, -{81,3,52}, -{81,3,53}, -{81,3,54}, -{81,3,55}, -{81,3,56}, -{81,3,57}, -{81,3,58}, -{81,3,59}, -{81,3,60}, -{81,3,61}, -{81,3,62}, -{81,3,63}, -{81,3,64}, -{81,3,65}, -{81,3,66}, -{81,3,67}, -{81,3,68}, -{81,3,69}, -{81,3,70}, -{81,3,71}, -{81,3,72}, -{81,3,73}, -{81,3,74}, -{81,3,75}, -{81,3,76}, -{81,3,77}, -{81,3,78}, -{81,3,79}, -{81,3,80}, -{81,3,81}, -{81,3,82}, -{81,4,-29}, -{81,4,-28}, -{81,4,-27}, -{81,4,-26}, -{81,4,-25}, -{81,4,-24}, -{81,4,-23}, -{81,4,-22}, -{81,4,-21}, -{81,4,-20}, -{81,4,-19}, -{81,4,-18}, -{81,4,-17}, -{81,4,-16}, -{81,4,-15}, -{81,4,-14}, -{81,4,-13}, -{81,4,-12}, -{81,4,-11}, -{81,4,-10}, -{81,4,-9}, -{81,4,-8}, -{81,4,-7}, -{81,4,-6}, -{81,4,-5}, -{81,4,-4}, -{81,4,-3}, -{81,4,-2}, -{81,4,-1}, -{81,4,0}, -{81,4,1}, -{81,4,2}, -{81,4,3}, -{81,4,4}, -{81,4,5}, -{81,4,6}, -{81,4,7}, -{81,4,8}, -{81,4,9}, -{81,4,10}, -{81,4,11}, -{81,4,12}, -{81,4,13}, -{81,4,14}, -{81,4,15}, -{81,4,16}, -{81,4,17}, -{81,4,18}, -{81,4,19}, -{81,4,20}, -{81,4,21}, -{81,4,22}, -{81,4,23}, -{81,4,24}, -{81,4,25}, -{81,4,26}, -{81,4,27}, -{81,4,28}, -{81,4,29}, -{81,4,30}, -{81,4,31}, -{81,4,32}, -{81,4,33}, -{81,4,34}, -{81,4,35}, -{81,4,36}, -{81,4,37}, -{81,4,38}, -{81,4,39}, -{81,4,40}, -{81,4,41}, -{81,4,42}, -{81,4,43}, -{81,4,44}, -{81,4,45}, -{81,4,46}, -{81,4,47}, -{81,4,48}, -{81,4,49}, -{81,4,50}, -{81,4,51}, -{81,4,52}, -{81,4,53}, -{81,4,54}, -{81,4,55}, -{81,4,56}, -{81,4,57}, -{81,4,58}, -{81,4,59}, -{81,4,60}, -{81,4,61}, -{81,4,62}, -{81,4,63}, -{81,4,64}, -{81,4,65}, -{81,4,66}, -{81,4,67}, -{81,4,68}, -{81,4,69}, -{81,4,70}, -{81,4,71}, -{81,4,72}, -{81,4,73}, -{81,4,74}, -{81,4,75}, -{81,4,76}, -{81,4,77}, -{81,4,78}, -{81,4,79}, -{81,4,80}, -{81,4,81}, -{81,4,82}, -{81,5,-29}, -{81,5,-28}, -{81,5,-27}, -{81,5,-26}, -{81,5,-25}, -{81,5,-24}, -{81,5,-23}, -{81,5,-22}, -{81,5,-21}, -{81,5,-20}, -{81,5,-19}, -{81,5,-18}, -{81,5,-17}, -{81,5,-16}, -{81,5,-15}, -{81,5,-14}, -{81,5,-13}, -{81,5,-12}, -{81,5,-11}, -{81,5,-10}, -{81,5,-9}, -{81,5,-8}, -{81,5,-7}, -{81,5,-6}, -{81,5,-5}, -{81,5,-4}, -{81,5,-3}, -{81,5,-2}, -{81,5,-1}, -{81,5,0}, -{81,5,1}, -{81,5,2}, -{81,5,3}, -{81,5,4}, -{81,5,5}, -{81,5,6}, -{81,5,7}, -{81,5,8}, -{81,5,9}, -{81,5,10}, -{81,5,11}, -{81,5,12}, -{81,5,13}, -{81,5,14}, -{81,5,15}, -{81,5,16}, -{81,5,17}, -{81,5,18}, -{81,5,19}, -{81,5,20}, -{81,5,21}, -{81,5,22}, -{81,5,23}, -{81,5,24}, -{81,5,25}, -{81,5,26}, -{81,5,27}, -{81,5,28}, -{81,5,29}, -{81,5,30}, -{81,5,31}, -{81,5,32}, -{81,5,33}, -{81,5,34}, -{81,5,35}, -{81,5,36}, -{81,5,37}, -{81,5,38}, -{81,5,39}, -{81,5,40}, -{81,5,41}, -{81,5,42}, -{81,5,43}, -{81,5,44}, -{81,5,45}, -{81,5,46}, -{81,5,47}, -{81,5,48}, -{81,5,49}, -{81,5,50}, -{81,5,51}, -{81,5,52}, -{81,5,53}, -{81,5,54}, -{81,5,55}, -{81,5,56}, -{81,5,57}, -{81,5,58}, -{81,5,59}, -{81,5,60}, -{81,5,61}, -{81,5,62}, -{81,5,63}, -{81,5,64}, -{81,5,65}, -{81,5,66}, -{81,5,67}, -{81,5,68}, -{81,5,69}, -{81,5,70}, -{81,5,71}, -{81,5,72}, -{81,5,73}, -{81,5,74}, -{81,5,75}, -{81,5,76}, -{81,5,77}, -{81,5,78}, -{81,5,79}, -{81,5,80}, -{81,5,81}, -{81,5,82}, -{81,6,-29}, -{81,6,-28}, -{81,6,-27}, -{81,6,-26}, -{81,6,-25}, -{81,6,-24}, -{81,6,-23}, -{81,6,-22}, -{81,6,-21}, -{81,6,-20}, -{81,6,-19}, -{81,6,-18}, -{81,6,-17}, -{81,6,-16}, -{81,6,-15}, -{81,6,-14}, -{81,6,-13}, -{81,6,-12}, -{81,6,-11}, -{81,6,-10}, -{81,6,-9}, -{81,6,-8}, -{81,6,-7}, -{81,6,-6}, -{81,6,-5}, -{81,6,-4}, -{81,6,-3}, -{81,6,-2}, -{81,6,-1}, -{81,6,0}, -{81,6,1}, -{81,6,2}, -{81,6,3}, -{81,6,4}, -{81,6,5}, -{81,6,6}, -{81,6,7}, -{81,6,8}, -{81,6,9}, -{81,6,10}, -{81,6,11}, -{81,6,12}, -{81,6,13}, -{81,6,14}, -{81,6,15}, -{81,6,16}, -{81,6,17}, -{81,6,18}, -{81,6,19}, -{81,6,20}, -{81,6,21}, -{81,6,22}, -{81,6,23}, -{81,6,24}, -{81,6,25}, -{81,6,26}, -{81,6,27}, -{81,6,28}, -{81,6,29}, -{81,6,30}, -{81,6,31}, -{81,6,32}, -{81,6,33}, -{81,6,34}, -{81,6,35}, -{81,6,36}, -{81,6,37}, -{81,6,38}, -{81,6,39}, -{81,6,40}, -{81,6,41}, -{81,6,42}, -{81,6,43}, -{81,6,44}, -{81,6,45}, -{81,6,46}, -{81,6,47}, -{81,6,48}, -{81,6,49}, -{81,6,50}, -{81,6,51}, -{81,6,52}, -{81,6,53}, -{81,6,54}, -{81,6,55}, -{81,6,56}, -{81,6,57}, -{81,6,58}, -{81,6,59}, -{81,6,60}, -{81,6,61}, -{81,6,62}, -{81,6,63}, -{81,6,64}, -{81,6,65}, -{81,6,66}, -{81,6,67}, -{81,6,68}, -{81,6,69}, -{81,6,70}, -{81,6,71}, -{81,6,72}, -{81,6,73}, -{81,6,74}, -{81,6,75}, -{81,6,76}, -{81,6,77}, -{81,6,78}, -{81,6,79}, -{81,6,80}, -{81,6,81}, -{81,6,82}, -{81,7,-29}, -{81,7,-28}, -{81,7,-27}, -{81,7,-26}, -{81,7,-25}, -{81,7,-24}, -{81,7,-23}, -{81,7,-22}, -{81,7,-21}, -{81,7,-20}, -{81,7,-19}, -{81,7,-18}, -{81,7,-17}, -{81,7,-16}, -{81,7,-15}, -{81,7,-14}, -{81,7,-13}, -{81,7,-12}, -{81,7,-11}, -{81,7,-10}, -{81,7,-9}, -{81,7,-8}, -{81,7,-7}, -{81,7,-6}, -{81,7,-5}, -{81,7,-4}, -{81,7,-3}, -{81,7,-2}, -{81,7,-1}, -{81,7,0}, -{81,7,1}, -{81,7,2}, -{81,7,3}, -{81,7,4}, -{81,7,5}, -{81,7,6}, -{81,7,7}, -{81,7,8}, -{81,7,9}, -{81,7,10}, -{81,7,11}, -{81,7,12}, -{81,7,13}, -{81,7,14}, -{81,7,15}, -{81,7,16}, -{81,7,17}, -{81,7,18}, -{81,7,19}, -{81,7,20}, -{81,7,21}, -{81,7,22}, -{81,7,23}, -{81,7,24}, -{81,7,25}, -{81,7,26}, -{81,7,27}, -{81,7,28}, -{81,7,29}, -{81,7,30}, -{81,7,31}, -{81,7,32}, -{81,7,33}, -{81,7,34}, -{81,7,35}, -{81,7,36}, -{81,7,37}, -{81,7,38}, -{81,7,39}, -{81,7,40}, -{81,7,41}, -{81,7,42}, -{81,7,43}, -{81,7,44}, -{81,7,45}, -{81,7,46}, -{81,7,47}, -{81,7,48}, -{81,7,49}, -{81,7,50}, -{81,7,51}, -{81,7,52}, -{81,7,53}, -{81,7,54}, -{81,7,55}, -{81,7,56}, -{81,7,57}, -{81,7,58}, -{81,7,59}, -{81,7,60}, -{81,7,61}, -{81,7,62}, -{81,7,63}, -{81,7,64}, -{81,7,65}, -{81,7,66}, -{81,7,67}, -{81,7,68}, -{81,7,69}, -{81,7,70}, -{81,7,71}, -{81,7,72}, -{81,7,73}, -{81,7,74}, -{81,7,75}, -{81,7,76}, -{81,7,77}, -{81,7,78}, -{81,7,79}, -{81,7,80}, -{81,7,81}, -{81,7,82}, -{81,8,-29}, -{81,8,-28}, -{81,8,-27}, -{81,8,-26}, -{81,8,-25}, -{81,8,-24}, -{81,8,-23}, -{81,8,-22}, -{81,8,-21}, -{81,8,-20}, -{81,8,-19}, -{81,8,-18}, -{81,8,-17}, -{81,8,-16}, -{81,8,-15}, -{81,8,-14}, -{81,8,-13}, -{81,8,-12}, -{81,8,-11}, -{81,8,-10}, -{81,8,-9}, -{81,8,-8}, -{81,8,-7}, -{81,8,-6}, -{81,8,-5}, -{81,8,-4}, -{81,8,-3}, -{81,8,-2}, -{81,8,-1}, -{81,8,0}, -{81,8,1}, -{81,8,2}, -{81,8,3}, -{81,8,4}, -{81,8,5}, -{81,8,6}, -{81,8,7}, -{81,8,8}, -{81,8,9}, -{81,8,10}, -{81,8,11}, -{81,8,12}, -{81,8,13}, -{81,8,14}, -{81,8,15}, -{81,8,16}, -{81,8,17}, -{81,8,18}, -{81,8,19}, -{81,8,20}, -{81,8,21}, -{81,8,22}, -{81,8,23}, -{81,8,24}, -{81,8,25}, -{81,8,26}, -{81,8,27}, -{81,8,28}, -{81,8,29}, -{81,8,30}, -{81,8,31}, -{81,8,32}, -{81,8,33}, -{81,8,34}, -{81,8,35}, -{81,8,36}, -{81,8,37}, -{81,8,38}, -{81,8,39}, -{81,8,40}, -{81,8,41}, -{81,8,42}, -{81,8,43}, -{81,8,44}, -{81,8,45}, -{81,8,46}, -{81,8,47}, -{81,8,48}, -{81,8,49}, -{81,8,50}, -{81,8,51}, -{81,8,52}, -{81,8,53}, -{81,8,54}, -{81,8,55}, -{81,8,56}, -{81,8,57}, -{81,8,58}, -{81,8,59}, -{81,8,60}, -{81,8,61}, -{81,8,62}, -{81,8,63}, -{81,8,64}, -{81,8,65}, -{81,8,66}, -{81,8,67}, -{81,8,68}, -{81,8,69}, -{81,8,70}, -{81,8,71}, -{81,8,72}, -{81,8,73}, -{81,8,74}, -{81,8,75}, -{81,8,76}, -{81,8,77}, -{81,8,78}, -{81,8,79}, -{81,8,80}, -{81,8,81}, -{81,8,82}, -{81,8,83}, -{81,9,-29}, -{81,9,-28}, -{81,9,-27}, -{81,9,-26}, -{81,9,-25}, -{81,9,-24}, -{81,9,-23}, -{81,9,-22}, -{81,9,-21}, -{81,9,-20}, -{81,9,-19}, -{81,9,-18}, -{81,9,-17}, -{81,9,-16}, -{81,9,-15}, -{81,9,-14}, -{81,9,-13}, -{81,9,-12}, -{81,9,-11}, -{81,9,-10}, -{81,9,-9}, -{81,9,-8}, -{81,9,-7}, -{81,9,-6}, -{81,9,-5}, -{81,9,-4}, -{81,9,-3}, -{81,9,-2}, -{81,9,-1}, -{81,9,0}, -{81,9,1}, -{81,9,2}, -{81,9,3}, -{81,9,4}, -{81,9,5}, -{81,9,6}, -{81,9,7}, -{81,9,8}, -{81,9,9}, -{81,9,10}, -{81,9,11}, -{81,9,12}, -{81,9,13}, -{81,9,14}, -{81,9,15}, -{81,9,16}, -{81,9,17}, -{81,9,18}, -{81,9,19}, -{81,9,20}, -{81,9,21}, -{81,9,22}, -{81,9,23}, -{81,9,24}, -{81,9,25}, -{81,9,26}, -{81,9,27}, -{81,9,28}, -{81,9,29}, -{81,9,30}, -{81,9,31}, -{81,9,32}, -{81,9,33}, -{81,9,34}, -{81,9,35}, -{81,9,36}, -{81,9,37}, -{81,9,38}, -{81,9,39}, -{81,9,40}, -{81,9,41}, -{81,9,42}, -{81,9,43}, -{81,9,44}, -{81,9,45}, -{81,9,46}, -{81,9,47}, -{81,9,48}, -{81,9,49}, -{81,9,50}, -{81,9,51}, -{81,9,52}, -{81,9,53}, -{81,9,54}, -{81,9,55}, -{81,9,56}, -{81,9,57}, -{81,9,58}, -{81,9,59}, -{81,9,60}, -{81,9,61}, -{81,9,62}, -{81,9,63}, -{81,9,64}, -{81,9,65}, -{81,9,66}, -{81,9,67}, -{81,9,68}, -{81,9,69}, -{81,9,70}, -{81,9,71}, -{81,9,72}, -{81,9,73}, -{81,9,74}, -{81,9,75}, -{81,9,76}, -{81,9,77}, -{81,9,78}, -{81,9,79}, -{81,9,80}, -{81,9,81}, -{81,9,82}, -{81,9,83}, -{81,10,-29}, -{81,10,-28}, -{81,10,-27}, -{81,10,-26}, -{81,10,-25}, -{81,10,-24}, -{81,10,-23}, -{81,10,-22}, -{81,10,-21}, -{81,10,-20}, -{81,10,-19}, -{81,10,-18}, -{81,10,-17}, -{81,10,-16}, -{81,10,-15}, -{81,10,-14}, -{81,10,-13}, -{81,10,-12}, -{81,10,-11}, -{81,10,-10}, -{81,10,-9}, -{81,10,-8}, -{81,10,-7}, -{81,10,-6}, -{81,10,-5}, -{81,10,-4}, -{81,10,-3}, -{81,10,-2}, -{81,10,-1}, -{81,10,0}, -{81,10,1}, -{81,10,2}, -{81,10,3}, -{81,10,4}, -{81,10,5}, -{81,10,6}, -{81,10,7}, -{81,10,8}, -{81,10,9}, -{81,10,10}, -{81,10,11}, -{81,10,12}, -{81,10,13}, -{81,10,14}, -{81,10,15}, -{81,10,16}, -{81,10,17}, -{81,10,18}, -{81,10,19}, -{81,10,20}, -{81,10,21}, -{81,10,22}, -{81,10,23}, -{81,10,24}, -{81,10,25}, -{81,10,26}, -{81,10,27}, -{81,10,28}, -{81,10,29}, -{81,10,30}, -{81,10,31}, -{81,10,32}, -{81,10,33}, -{81,10,34}, -{81,10,35}, -{81,10,36}, -{81,10,37}, -{81,10,38}, -{81,10,39}, -{81,10,40}, -{81,10,41}, -{81,10,42}, -{81,10,43}, -{81,10,44}, -{81,10,45}, -{81,10,46}, -{81,10,47}, -{81,10,48}, -{81,10,49}, -{81,10,50}, -{81,10,51}, -{81,10,52}, -{81,10,53}, -{81,10,54}, -{81,10,55}, -{81,10,56}, -{81,10,57}, -{81,10,58}, -{81,10,59}, -{81,10,60}, -{81,10,61}, -{81,10,62}, -{81,10,63}, -{81,10,64}, -{81,10,65}, -{81,10,66}, -{81,10,67}, -{81,10,68}, -{81,10,69}, -{81,10,70}, -{81,10,71}, -{81,10,72}, -{81,10,73}, -{81,10,74}, -{81,10,75}, -{81,10,76}, -{81,10,77}, -{81,10,78}, -{81,10,79}, -{81,10,80}, -{81,10,81}, -{81,10,82}, -{81,10,83}, -{81,11,-29}, -{81,11,-28}, -{81,11,-27}, -{81,11,-26}, -{81,11,-25}, -{81,11,-24}, -{81,11,-23}, -{81,11,-22}, -{81,11,-21}, -{81,11,-20}, -{81,11,-19}, -{81,11,-18}, -{81,11,-17}, -{81,11,-16}, -{81,11,-15}, -{81,11,-14}, -{81,11,-13}, -{81,11,-12}, -{81,11,-11}, -{81,11,-10}, -{81,11,-9}, -{81,11,-8}, -{81,11,-7}, -{81,11,-6}, -{81,11,-5}, -{81,11,-4}, -{81,11,-3}, -{81,11,-2}, -{81,11,-1}, -{81,11,0}, -{81,11,1}, -{81,11,2}, -{81,11,3}, -{81,11,4}, -{81,11,5}, -{81,11,6}, -{81,11,7}, -{81,11,8}, -{81,11,9}, -{81,11,10}, -{81,11,11}, -{81,11,12}, -{81,11,13}, -{81,11,14}, -{81,11,15}, -{81,11,16}, -{81,11,17}, -{81,11,18}, -{81,11,19}, -{81,11,20}, -{81,11,21}, -{81,11,22}, -{81,11,23}, -{81,11,24}, -{81,11,25}, -{81,11,26}, -{81,11,27}, -{81,11,28}, -{81,11,29}, -{81,11,30}, -{81,11,31}, -{81,11,32}, -{81,11,33}, -{81,11,34}, -{81,11,35}, -{81,11,36}, -{81,11,37}, -{81,11,38}, -{81,11,39}, -{81,11,40}, -{81,11,41}, -{81,11,42}, -{81,11,43}, -{81,11,44}, -{81,11,45}, -{81,11,46}, -{81,11,47}, -{81,11,48}, -{81,11,49}, -{81,11,50}, -{81,11,51}, -{81,11,52}, -{81,11,53}, -{81,11,54}, -{81,11,55}, -{81,11,56}, -{81,11,57}, -{81,11,58}, -{81,11,59}, -{81,11,60}, -{81,11,61}, -{81,11,62}, -{81,11,63}, -{81,11,64}, -{81,11,65}, -{81,11,66}, -{81,11,67}, -{81,11,68}, -{81,11,69}, -{81,11,70}, -{81,11,71}, -{81,11,72}, -{81,11,73}, -{81,11,74}, -{81,11,75}, -{81,11,76}, -{81,11,77}, -{81,11,78}, -{81,11,79}, -{81,12,-29}, -{81,12,-28}, -{81,12,-27}, -{81,12,-26}, -{81,12,-25}, -{81,12,-24}, -{81,12,-23}, -{81,12,-22}, -{81,12,-21}, -{81,12,-20}, -{81,12,-19}, -{81,12,-18}, -{81,12,-17}, -{81,12,-16}, -{81,12,-15}, -{81,12,-14}, -{81,12,-13}, -{81,12,-12}, -{81,12,-11}, -{81,12,-10}, -{81,12,-9}, -{81,12,-8}, -{81,12,-7}, -{81,12,-6}, -{81,12,-5}, -{81,12,-4}, -{81,12,-3}, -{81,12,-2}, -{81,12,-1}, -{81,12,0}, -{81,12,1}, -{81,12,2}, -{81,12,3}, -{81,12,4}, -{81,12,5}, -{81,12,6}, -{81,12,7}, -{81,12,8}, -{81,12,9}, -{81,12,10}, -{81,12,11}, -{81,12,12}, -{81,12,13}, -{81,12,14}, -{81,12,15}, -{81,12,16}, -{81,12,17}, -{81,12,18}, -{81,12,19}, -{81,12,20}, -{81,12,21}, -{81,12,22}, -{81,12,23}, -{81,12,24}, -{81,12,25}, -{81,12,26}, -{81,12,27}, -{81,12,28}, -{81,12,29}, -{81,12,30}, -{81,12,31}, -{81,12,32}, -{81,12,33}, -{81,12,34}, -{81,12,35}, -{81,12,36}, -{81,12,37}, -{81,12,38}, -{81,12,39}, -{81,12,40}, -{81,12,41}, -{81,12,42}, -{81,12,43}, -{81,12,44}, -{81,12,45}, -{81,12,46}, -{81,12,47}, -{81,12,48}, -{81,12,49}, -{81,12,50}, -{81,12,51}, -{81,12,52}, -{81,12,53}, -{81,12,54}, -{81,12,55}, -{81,12,56}, -{81,12,57}, -{81,12,58}, -{81,12,59}, -{81,12,60}, -{81,12,61}, -{81,12,62}, -{81,12,63}, -{81,12,64}, -{81,12,65}, -{81,12,66}, -{81,12,67}, -{81,12,68}, -{81,12,69}, -{81,12,70}, -{81,12,71}, -{81,13,-29}, -{81,13,-28}, -{81,13,-27}, -{81,13,-26}, -{81,13,-25}, -{81,13,-24}, -{81,13,-23}, -{81,13,-22}, -{81,13,-21}, -{81,13,-20}, -{81,13,-19}, -{81,13,-18}, -{81,13,-17}, -{81,13,-16}, -{81,13,-15}, -{81,13,-14}, -{81,13,-13}, -{81,13,-12}, -{81,13,-11}, -{81,13,-10}, -{81,13,-9}, -{81,13,-8}, -{81,13,-7}, -{81,13,-6}, -{81,13,-5}, -{81,13,-4}, -{81,13,-3}, -{81,13,-2}, -{81,13,-1}, -{81,13,0}, -{81,13,1}, -{81,13,2}, -{81,13,3}, -{81,13,4}, -{81,13,5}, -{81,13,6}, -{81,13,7}, -{81,13,8}, -{81,13,9}, -{81,13,10}, -{81,13,11}, -{81,13,12}, -{81,13,13}, -{81,13,14}, -{81,13,15}, -{81,13,16}, -{81,13,17}, -{81,13,18}, -{81,13,19}, -{81,13,20}, -{81,13,21}, -{81,13,22}, -{81,13,23}, -{81,13,24}, -{81,13,25}, -{81,13,26}, -{81,13,27}, -{81,13,28}, -{81,13,29}, -{81,13,30}, -{81,13,31}, -{81,13,32}, -{81,13,33}, -{81,13,34}, -{81,13,35}, -{81,13,36}, -{81,13,37}, -{81,13,38}, -{81,13,39}, -{81,13,40}, -{81,13,41}, -{81,13,42}, -{81,13,43}, -{81,13,44}, -{81,13,45}, -{81,13,46}, -{81,13,47}, -{81,13,48}, -{81,13,49}, -{81,13,50}, -{81,13,51}, -{81,13,52}, -{81,13,53}, -{81,13,54}, -{81,13,55}, -{81,13,56}, -{81,13,57}, -{81,13,58}, -{81,13,59}, -{81,13,60}, -{81,13,61}, -{81,13,62}, -{81,13,63}, -{81,13,64}, -{81,14,-29}, -{81,14,-28}, -{81,14,-27}, -{81,14,-26}, -{81,14,-25}, -{81,14,-24}, -{81,14,-23}, -{81,14,-22}, -{81,14,-21}, -{81,14,-20}, -{81,14,-19}, -{81,14,-18}, -{81,14,-17}, -{81,14,-16}, -{81,14,-15}, -{81,14,-14}, -{81,14,-13}, -{81,14,-12}, -{81,14,-11}, -{81,14,-10}, -{81,14,-9}, -{81,14,-8}, -{81,14,-7}, -{81,14,-6}, -{81,14,-5}, -{81,14,-4}, -{81,14,-3}, -{81,14,-2}, -{81,14,-1}, -{81,14,0}, -{81,14,1}, -{81,14,2}, -{81,14,3}, -{81,14,4}, -{81,14,5}, -{81,14,6}, -{81,14,7}, -{81,14,8}, -{81,14,9}, -{81,14,10}, -{81,14,11}, -{81,14,12}, -{81,14,13}, -{81,14,14}, -{81,14,15}, -{81,14,16}, -{81,14,17}, -{81,14,18}, -{81,14,19}, -{81,14,20}, -{81,14,21}, -{81,14,22}, -{81,14,23}, -{81,14,24}, -{81,14,25}, -{81,14,26}, -{81,14,27}, -{81,14,28}, -{81,14,29}, -{81,14,30}, -{81,14,31}, -{81,14,32}, -{81,14,33}, -{81,14,34}, -{81,14,35}, -{81,14,36}, -{81,14,37}, -{81,14,38}, -{81,14,39}, -{81,14,40}, -{81,14,41}, -{81,14,42}, -{81,14,43}, -{81,14,44}, -{81,14,45}, -{81,14,46}, -{81,14,47}, -{81,14,48}, -{81,14,49}, -{81,14,50}, -{81,14,51}, -{81,14,52}, -{81,14,53}, -{81,14,54}, -{81,14,55}, -{81,14,56}, -{81,14,57}, -{81,14,58}, -{81,15,-29}, -{81,15,-28}, -{81,15,-27}, -{81,15,-26}, -{81,15,-25}, -{81,15,-24}, -{81,15,-23}, -{81,15,-22}, -{81,15,-21}, -{81,15,-20}, -{81,15,-19}, -{81,15,-18}, -{81,15,-17}, -{81,15,-16}, -{81,15,-15}, -{81,15,-14}, -{81,15,-13}, -{81,15,-12}, -{81,15,-11}, -{81,15,-10}, -{81,15,-9}, -{81,15,-8}, -{81,15,-7}, -{81,15,-6}, -{81,15,-5}, -{81,15,-4}, -{81,15,-3}, -{81,15,-2}, -{81,15,-1}, -{81,15,0}, -{81,15,1}, -{81,15,2}, -{81,15,3}, -{81,15,4}, -{81,15,5}, -{81,15,6}, -{81,15,7}, -{81,15,8}, -{81,15,9}, -{81,15,10}, -{81,15,11}, -{81,15,12}, -{81,15,13}, -{81,15,14}, -{81,15,15}, -{81,15,16}, -{81,15,17}, -{81,15,18}, -{81,15,19}, -{81,15,20}, -{81,15,21}, -{81,15,22}, -{81,15,23}, -{81,15,24}, -{81,15,25}, -{81,15,26}, -{81,15,27}, -{81,15,28}, -{81,15,29}, -{81,15,30}, -{81,15,31}, -{81,15,32}, -{81,15,33}, -{81,15,34}, -{81,15,35}, -{81,15,36}, -{81,15,37}, -{81,15,38}, -{81,15,39}, -{81,15,40}, -{81,15,41}, -{81,15,42}, -{81,15,43}, -{81,15,44}, -{81,15,45}, -{81,15,46}, -{81,15,47}, -{81,15,48}, -{81,15,49}, -{81,15,50}, -{81,15,51}, -{81,15,52}, -{81,15,53}, -{81,16,-28}, -{81,16,-27}, -{81,16,-26}, -{81,16,-25}, -{81,16,-24}, -{81,16,-23}, -{81,16,-22}, -{81,16,-21}, -{81,16,-20}, -{81,16,-19}, -{81,16,-18}, -{81,16,-17}, -{81,16,-16}, -{81,16,-15}, -{81,16,-14}, -{81,16,-13}, -{81,16,-12}, -{81,16,-11}, -{81,16,-10}, -{81,16,-9}, -{81,16,-8}, -{81,16,-7}, -{81,16,-6}, -{81,16,-5}, -{81,16,-4}, -{81,16,-3}, -{81,16,-2}, -{81,16,-1}, -{81,16,0}, -{81,16,1}, -{81,16,2}, -{81,16,3}, -{81,16,4}, -{81,16,5}, -{81,16,6}, -{81,16,7}, -{81,16,8}, -{81,16,9}, -{81,16,10}, -{81,16,11}, -{81,16,12}, -{81,16,13}, -{81,16,14}, -{81,16,15}, -{81,16,16}, -{81,16,17}, -{81,16,18}, -{81,16,19}, -{81,16,20}, -{81,16,21}, -{81,16,22}, -{81,16,23}, -{81,16,24}, -{81,16,25}, -{81,16,26}, -{81,16,27}, -{81,16,28}, -{81,16,29}, -{81,16,30}, -{81,16,31}, -{81,16,32}, -{81,16,33}, -{81,16,34}, -{81,16,35}, -{81,16,36}, -{81,16,37}, -{81,16,38}, -{81,16,39}, -{81,16,40}, -{81,16,41}, -{81,16,42}, -{81,16,43}, -{81,16,44}, -{81,16,45}, -{81,16,46}, -{81,16,47}, -{81,16,48}, -{81,17,-28}, -{81,17,-27}, -{81,17,-26}, -{81,17,-25}, -{81,17,-24}, -{81,17,-23}, -{81,17,-22}, -{81,17,-21}, -{81,17,-20}, -{81,17,-19}, -{81,17,-18}, -{81,17,-17}, -{81,17,-16}, -{81,17,-15}, -{81,17,-14}, -{81,17,-13}, -{81,17,-12}, -{81,17,-11}, -{81,17,-10}, -{81,17,-9}, -{81,17,-8}, -{81,17,-7}, -{81,17,-6}, -{81,17,-5}, -{81,17,-4}, -{81,17,-3}, -{81,17,-2}, -{81,17,-1}, -{81,17,0}, -{81,17,1}, -{81,17,2}, -{81,17,3}, -{81,17,4}, -{81,17,5}, -{81,17,6}, -{81,17,7}, -{81,17,8}, -{81,17,9}, -{81,17,10}, -{81,17,11}, -{81,17,12}, -{81,17,13}, -{81,17,14}, -{81,17,15}, -{81,17,16}, -{81,17,17}, -{81,17,18}, -{81,17,19}, -{81,17,20}, -{81,17,21}, -{81,17,22}, -{81,17,23}, -{81,17,24}, -{81,17,25}, -{81,17,26}, -{81,17,27}, -{81,17,28}, -{81,17,29}, -{81,17,30}, -{81,17,31}, -{81,17,32}, -{81,17,33}, -{81,17,34}, -{81,17,35}, -{81,17,36}, -{81,17,37}, -{81,17,38}, -{81,17,39}, -{81,17,40}, -{81,17,41}, -{81,17,42}, -{81,17,43}, -{81,18,-28}, -{81,18,-27}, -{81,18,-26}, -{81,18,-25}, -{81,18,-24}, -{81,18,-23}, -{81,18,-22}, -{81,18,-21}, -{81,18,-20}, -{81,18,-19}, -{81,18,-18}, -{81,18,-17}, -{81,18,-16}, -{81,18,-15}, -{81,18,-14}, -{81,18,-13}, -{81,18,-12}, -{81,18,-11}, -{81,18,-10}, -{81,18,-9}, -{81,18,-8}, -{81,18,-7}, -{81,18,-6}, -{81,18,-5}, -{81,18,-4}, -{81,18,-3}, -{81,18,-2}, -{81,18,-1}, -{81,18,0}, -{81,18,1}, -{81,18,2}, -{81,18,3}, -{81,18,4}, -{81,18,5}, -{81,18,6}, -{81,18,7}, -{81,18,8}, -{81,18,9}, -{81,18,10}, -{81,18,11}, -{81,18,12}, -{81,18,13}, -{81,18,14}, -{81,18,15}, -{81,18,16}, -{81,18,17}, -{81,18,18}, -{81,18,19}, -{81,18,20}, -{81,18,21}, -{81,18,22}, -{81,18,23}, -{81,18,24}, -{81,18,25}, -{81,18,26}, -{81,18,27}, -{81,18,28}, -{81,18,29}, -{81,18,30}, -{81,18,31}, -{81,18,32}, -{81,18,33}, -{81,18,34}, -{81,18,35}, -{81,18,36}, -{81,18,37}, -{81,18,38}, -{81,18,39}, -{81,19,-28}, -{81,19,-27}, -{81,19,-26}, -{81,19,-25}, -{81,19,-24}, -{81,19,-23}, -{81,19,-22}, -{81,19,-21}, -{81,19,-20}, -{81,19,-19}, -{81,19,-18}, -{81,19,-17}, -{81,19,-16}, -{81,19,-15}, -{81,19,-14}, -{81,19,-13}, -{81,19,-12}, -{81,19,-11}, -{81,19,-10}, -{81,19,-9}, -{81,19,-8}, -{81,19,-7}, -{81,19,-6}, -{81,19,-5}, -{81,19,-4}, -{81,19,-3}, -{81,19,-2}, -{81,19,-1}, -{81,19,0}, -{81,19,1}, -{81,19,2}, -{81,19,3}, -{81,19,4}, -{81,19,5}, -{81,19,6}, -{81,19,7}, -{81,19,8}, -{81,19,9}, -{81,19,10}, -{81,19,11}, -{81,19,12}, -{81,19,13}, -{81,19,14}, -{81,19,15}, -{81,19,16}, -{81,19,17}, -{81,19,18}, -{81,19,19}, -{81,19,20}, -{81,19,21}, -{81,19,22}, -{81,19,23}, -{81,19,24}, -{81,19,25}, -{81,19,26}, -{81,19,27}, -{81,19,28}, -{81,19,29}, -{81,19,30}, -{81,19,31}, -{81,19,32}, -{81,19,33}, -{81,19,34}, -{81,19,35}, -{81,20,-28}, -{81,20,-27}, -{81,20,-26}, -{81,20,-25}, -{81,20,-24}, -{81,20,-23}, -{81,20,-22}, -{81,20,-21}, -{81,20,-20}, -{81,20,-19}, -{81,20,-18}, -{81,20,-17}, -{81,20,-16}, -{81,20,-15}, -{81,20,-14}, -{81,20,-13}, -{81,20,-12}, -{81,20,-11}, -{81,20,-10}, -{81,20,-9}, -{81,20,-8}, -{81,20,-7}, -{81,20,-6}, -{81,20,-5}, -{81,20,-4}, -{81,20,-3}, -{81,20,-2}, -{81,20,-1}, -{81,20,0}, -{81,20,1}, -{81,20,2}, -{81,20,3}, -{81,20,4}, -{81,20,5}, -{81,20,6}, -{81,20,7}, -{81,20,8}, -{81,20,9}, -{81,20,10}, -{81,20,11}, -{81,20,12}, -{81,20,13}, -{81,20,14}, -{81,20,15}, -{81,20,16}, -{81,20,17}, -{81,20,18}, -{81,20,19}, -{81,20,20}, -{81,20,21}, -{81,20,22}, -{81,20,23}, -{81,20,24}, -{81,20,25}, -{81,20,26}, -{81,20,27}, -{81,20,28}, -{81,20,29}, -{81,20,30}, -{81,20,31}, -{81,21,-28}, -{81,21,-27}, -{81,21,-26}, -{81,21,-25}, -{81,21,-24}, -{81,21,-23}, -{81,21,-22}, -{81,21,-21}, -{81,21,-20}, -{81,21,-19}, -{81,21,-18}, -{81,21,-17}, -{81,21,-16}, -{81,21,-15}, -{81,21,-14}, -{81,21,-13}, -{81,21,-12}, -{81,21,-11}, -{81,21,-10}, -{81,21,-9}, -{81,21,-8}, -{81,21,-7}, -{81,21,-6}, -{81,21,-5}, -{81,21,-4}, -{81,21,-3}, -{81,21,-2}, -{81,21,-1}, -{81,21,0}, -{81,21,1}, -{81,21,2}, -{81,21,3}, -{81,21,4}, -{81,21,5}, -{81,21,6}, -{81,21,7}, -{81,21,8}, -{81,21,9}, -{81,21,10}, -{81,21,11}, -{81,21,12}, -{81,21,13}, -{81,21,14}, -{81,21,15}, -{81,21,16}, -{81,21,17}, -{81,21,18}, -{81,21,19}, -{81,21,20}, -{81,21,21}, -{81,21,22}, -{81,21,23}, -{81,21,24}, -{81,21,25}, -{81,21,26}, -{81,21,27}, -{81,22,-28}, -{81,22,-27}, -{81,22,-26}, -{81,22,-25}, -{81,22,-24}, -{81,22,-23}, -{81,22,-22}, -{81,22,-21}, -{81,22,-20}, -{81,22,-19}, -{81,22,-18}, -{81,22,-17}, -{81,22,-16}, -{81,22,-15}, -{81,22,-14}, -{81,22,-13}, -{81,22,-12}, -{81,22,-11}, -{81,22,-10}, -{81,22,-9}, -{81,22,-8}, -{81,22,-7}, -{81,22,-6}, -{81,22,-5}, -{81,22,-4}, -{81,22,-3}, -{81,22,-2}, -{81,22,-1}, -{81,22,0}, -{81,22,1}, -{81,22,2}, -{81,22,3}, -{81,22,4}, -{81,22,5}, -{81,22,6}, -{81,22,7}, -{81,22,8}, -{81,22,9}, -{81,22,10}, -{81,22,11}, -{81,22,12}, -{81,22,13}, -{81,22,14}, -{81,22,15}, -{81,22,16}, -{81,22,17}, -{81,22,18}, -{81,22,19}, -{81,22,20}, -{81,22,21}, -{81,22,22}, -{81,22,23}, -{81,22,24}, -{81,23,-28}, -{81,23,-27}, -{81,23,-26}, -{81,23,-25}, -{81,23,-24}, -{81,23,-23}, -{81,23,-22}, -{81,23,-21}, -{81,23,-20}, -{81,23,-19}, -{81,23,-18}, -{81,23,-17}, -{81,23,-16}, -{81,23,-15}, -{81,23,-14}, -{81,23,-13}, -{81,23,-12}, -{81,23,-11}, -{81,23,-10}, -{81,23,-9}, -{81,23,-8}, -{81,23,-7}, -{81,23,-6}, -{81,23,-5}, -{81,23,-4}, -{81,23,-3}, -{81,23,-2}, -{81,23,-1}, -{81,23,0}, -{81,23,1}, -{81,23,2}, -{81,23,3}, -{81,23,4}, -{81,23,5}, -{81,23,6}, -{81,23,7}, -{81,23,8}, -{81,23,9}, -{81,23,10}, -{81,23,11}, -{81,23,12}, -{81,23,13}, -{81,23,14}, -{81,23,15}, -{81,23,16}, -{81,23,17}, -{81,23,18}, -{81,23,19}, -{81,23,20}, -{81,24,-28}, -{81,24,-27}, -{81,24,-26}, -{81,24,-25}, -{81,24,-24}, -{81,24,-23}, -{81,24,-22}, -{81,24,-21}, -{81,24,-20}, -{81,24,-19}, -{81,24,-18}, -{81,24,-17}, -{81,24,-16}, -{81,24,-15}, -{81,24,-14}, -{81,24,-13}, -{81,24,-12}, -{81,24,-11}, -{81,24,-10}, -{81,24,-9}, -{81,24,-8}, -{81,24,-7}, -{81,24,-6}, -{81,24,-5}, -{81,24,-4}, -{81,24,-3}, -{81,24,-2}, -{81,24,-1}, -{81,24,0}, -{81,24,1}, -{81,24,2}, -{81,24,3}, -{81,24,4}, -{81,24,5}, -{81,24,6}, -{81,24,7}, -{81,24,8}, -{81,24,9}, -{81,24,10}, -{81,24,11}, -{81,24,12}, -{81,24,13}, -{81,24,14}, -{81,24,15}, -{81,24,16}, -{81,24,17}, -{81,25,-28}, -{81,25,-27}, -{81,25,-26}, -{81,25,-25}, -{81,25,-24}, -{81,25,-23}, -{81,25,-22}, -{81,25,-21}, -{81,25,-20}, -{81,25,-19}, -{81,25,-18}, -{81,25,-17}, -{81,25,-16}, -{81,25,-15}, -{81,25,-14}, -{81,25,-13}, -{81,25,-12}, -{81,25,-11}, -{81,25,-10}, -{81,25,-9}, -{81,25,-8}, -{81,25,-7}, -{81,25,-6}, -{81,25,-5}, -{81,25,-4}, -{81,25,-3}, -{81,25,-2}, -{81,25,-1}, -{81,25,0}, -{81,25,1}, -{81,25,2}, -{81,25,3}, -{81,25,4}, -{81,25,5}, -{81,25,6}, -{81,25,7}, -{81,25,8}, -{81,25,9}, -{81,25,10}, -{81,25,11}, -{81,25,12}, -{81,25,13}, -{81,25,14}, -{81,26,-28}, -{81,26,-27}, -{81,26,-26}, -{81,26,-25}, -{81,26,-24}, -{81,26,-23}, -{81,26,-22}, -{81,26,-21}, -{81,26,-20}, -{81,26,-19}, -{81,26,-18}, -{81,26,-17}, -{81,26,-16}, -{81,26,-15}, -{81,26,-14}, -{81,26,-13}, -{81,26,-12}, -{81,26,-11}, -{81,26,-10}, -{81,26,-9}, -{81,26,-8}, -{81,26,-7}, -{81,26,-6}, -{81,26,-5}, -{81,26,-4}, -{81,26,-3}, -{81,26,-2}, -{81,26,-1}, -{81,26,0}, -{81,26,1}, -{81,26,2}, -{81,26,3}, -{81,26,4}, -{81,26,5}, -{81,26,6}, -{81,26,7}, -{81,26,8}, -{81,26,9}, -{81,26,10}, -{81,26,11}, -{81,27,-28}, -{81,27,-27}, -{81,27,-26}, -{81,27,-25}, -{81,27,-24}, -{81,27,-23}, -{81,27,-22}, -{81,27,-21}, -{81,27,-20}, -{81,27,-19}, -{81,27,-18}, -{81,27,-17}, -{81,27,-16}, -{81,27,-15}, -{81,27,-14}, -{81,27,-13}, -{81,27,-12}, -{81,27,-11}, -{81,27,-10}, -{81,27,-9}, -{81,27,-8}, -{81,27,-7}, -{81,27,-6}, -{81,27,-5}, -{81,27,-4}, -{81,27,-3}, -{81,27,-2}, -{81,27,-1}, -{81,27,0}, -{81,27,1}, -{81,27,2}, -{81,27,3}, -{81,27,4}, -{81,27,5}, -{81,27,6}, -{81,27,7}, -{81,27,8}, -{81,28,-28}, -{81,28,-27}, -{81,28,-26}, -{81,28,-25}, -{81,28,-24}, -{81,28,-23}, -{81,28,-22}, -{81,28,-21}, -{81,28,-20}, -{81,28,-19}, -{81,28,-18}, -{81,28,-17}, -{81,28,-16}, -{81,28,-15}, -{81,28,-14}, -{81,28,-13}, -{81,28,-12}, -{81,28,-11}, -{81,28,-10}, -{81,28,-9}, -{81,28,-8}, -{81,28,-7}, -{81,28,-6}, -{81,28,-5}, -{81,28,-4}, -{81,28,-3}, -{81,28,-2}, -{81,28,-1}, -{81,28,0}, -{81,28,1}, -{81,28,2}, -{81,28,3}, -{81,28,4}, -{81,28,5}, -{81,29,-28}, -{81,29,-27}, -{81,29,-26}, -{81,29,-25}, -{81,29,-24}, -{81,29,-23}, -{81,29,-22}, -{81,29,-21}, -{81,29,-20}, -{81,29,-19}, -{81,29,-18}, -{81,29,-17}, -{81,29,-16}, -{81,29,-15}, -{81,29,-14}, -{81,29,-13}, -{81,29,-12}, -{81,29,-11}, -{81,29,-10}, -{81,29,-9}, -{81,29,-8}, -{81,29,-7}, -{81,29,-6}, -{81,29,-5}, -{81,29,-4}, -{81,29,-3}, -{81,29,-2}, -{81,29,-1}, -{81,29,0}, -{81,29,1}, -{81,29,2}, -{81,29,3}, -{81,30,-28}, -{81,30,-27}, -{81,30,-26}, -{81,30,-25}, -{81,30,-24}, -{81,30,-23}, -{81,30,-22}, -{81,30,-21}, -{81,30,-20}, -{81,30,-19}, -{81,30,-18}, -{81,30,-17}, -{81,30,-16}, -{81,30,-15}, -{81,30,-14}, -{81,30,-13}, -{81,30,-12}, -{81,30,-11}, -{81,30,-10}, -{81,30,-9}, -{81,30,-8}, -{81,30,-7}, -{81,30,-6}, -{81,30,-5}, -{81,30,-4}, -{81,30,-3}, -{81,30,-2}, -{81,30,-1}, -{81,30,0}, -{81,31,-28}, -{81,31,-27}, -{81,31,-26}, -{81,31,-25}, -{81,31,-24}, -{81,31,-23}, -{81,31,-22}, -{81,31,-21}, -{81,31,-20}, -{81,31,-19}, -{81,31,-18}, -{81,31,-17}, -{81,31,-16}, -{81,31,-15}, -{81,31,-14}, -{81,31,-13}, -{81,31,-12}, -{81,31,-11}, -{81,31,-10}, -{81,31,-9}, -{81,31,-8}, -{81,31,-7}, -{81,31,-6}, -{81,31,-5}, -{81,31,-4}, -{81,31,-3}, -{81,32,-28}, -{81,32,-27}, -{81,32,-26}, -{81,32,-25}, -{81,32,-24}, -{81,32,-23}, -{81,32,-22}, -{81,32,-21}, -{81,32,-20}, -{81,32,-19}, -{81,32,-18}, -{81,32,-17}, -{81,32,-16}, -{81,32,-15}, -{81,32,-14}, -{81,32,-13}, -{81,32,-12}, -{81,32,-11}, -{81,32,-10}, -{81,32,-9}, -{81,32,-8}, -{81,32,-7}, -{81,32,-6}, -{81,32,-5}, -{81,33,-28}, -{81,33,-27}, -{81,33,-26}, -{81,33,-25}, -{81,33,-24}, -{81,33,-23}, -{81,33,-22}, -{81,33,-21}, -{81,33,-20}, -{81,33,-19}, -{81,33,-18}, -{81,33,-17}, -{81,33,-16}, -{81,33,-15}, -{81,33,-14}, -{81,33,-13}, -{81,33,-12}, -{81,33,-11}, -{81,33,-10}, -{81,33,-9}, -{81,33,-8}, -{81,34,-28}, -{81,34,-27}, -{81,34,-26}, -{81,34,-25}, -{81,34,-24}, -{81,34,-23}, -{81,34,-22}, -{81,34,-21}, -{81,34,-20}, -{81,34,-19}, -{81,34,-18}, -{81,34,-17}, -{81,34,-16}, -{81,34,-15}, -{81,34,-14}, -{81,34,-13}, -{81,34,-12}, -{81,34,-11}, -{81,34,-10}, -{81,35,-28}, -{81,35,-27}, -{81,35,-26}, -{81,35,-25}, -{81,35,-24}, -{81,35,-23}, -{81,35,-22}, -{81,35,-21}, -{81,35,-20}, -{81,35,-19}, -{81,35,-18}, -{81,35,-17}, -{81,35,-16}, -{81,35,-15}, -{81,35,-14}, -{81,35,-13}, -{81,35,-12}, -{81,36,-28}, -{81,36,-27}, -{81,36,-26}, -{81,36,-25}, -{81,36,-24}, -{81,36,-23}, -{81,36,-22}, -{81,36,-21}, -{81,36,-20}, -{81,36,-19}, -{81,36,-18}, -{81,36,-17}, -{81,36,-16}, -{81,36,-15}, -{81,37,-28}, -{81,37,-27}, -{81,37,-26}, -{81,37,-25}, -{81,37,-24}, -{81,37,-23}, -{81,37,-22}, -{81,37,-21}, -{81,37,-20}, -{81,37,-19}, -{81,37,-18}, -{81,37,-17}, -{81,38,-28}, -{81,38,-27}, -{81,38,-26}, -{81,38,-25}, -{81,38,-24}, -{81,38,-23}, -{81,38,-22}, -{81,38,-21}, -{81,38,-20}, -{81,38,-19}, -{81,39,-28}, -{81,39,-27}, -{81,39,-26}, -{81,39,-25}, -{81,39,-24}, -{81,39,-23}, -{81,39,-22}, -{81,39,-21}, -{81,40,-28}, -{81,40,-27}, -{81,40,-26}, -{81,40,-25}, -{81,40,-24}, -{81,40,-23}, -{81,41,-28}, -{81,41,-27}, -{81,41,-26}, -{81,42,-28}, -{82,-81,76}, -{82,-81,77}, -{82,-81,78}, -{82,-80,71}, -{82,-80,72}, -{82,-80,73}, -{82,-80,74}, -{82,-80,75}, -{82,-80,76}, -{82,-80,77}, -{82,-80,78}, -{82,-79,67}, -{82,-79,68}, -{82,-79,69}, -{82,-79,70}, -{82,-79,71}, -{82,-79,72}, -{82,-79,73}, -{82,-79,74}, -{82,-79,75}, -{82,-79,76}, -{82,-79,77}, -{82,-79,78}, -{82,-78,63}, -{82,-78,64}, -{82,-78,65}, -{82,-78,66}, -{82,-78,67}, -{82,-78,68}, -{82,-78,69}, -{82,-78,70}, -{82,-78,71}, -{82,-78,72}, -{82,-78,73}, -{82,-78,74}, -{82,-78,75}, -{82,-78,76}, -{82,-78,77}, -{82,-78,78}, -{82,-77,60}, -{82,-77,61}, -{82,-77,62}, -{82,-77,63}, -{82,-77,64}, -{82,-77,65}, -{82,-77,66}, -{82,-77,67}, -{82,-77,68}, -{82,-77,69}, -{82,-77,70}, -{82,-77,71}, -{82,-77,72}, -{82,-77,73}, -{82,-77,74}, -{82,-77,75}, -{82,-77,76}, -{82,-77,77}, -{82,-77,78}, -{82,-76,56}, -{82,-76,57}, -{82,-76,58}, -{82,-76,59}, -{82,-76,60}, -{82,-76,61}, -{82,-76,62}, -{82,-76,63}, -{82,-76,64}, -{82,-76,65}, -{82,-76,66}, -{82,-76,67}, -{82,-76,68}, -{82,-76,69}, -{82,-76,70}, -{82,-76,71}, -{82,-76,72}, -{82,-76,73}, -{82,-76,74}, -{82,-76,75}, -{82,-76,76}, -{82,-76,77}, -{82,-76,78}, -{82,-75,53}, -{82,-75,54}, -{82,-75,55}, -{82,-75,56}, -{82,-75,57}, -{82,-75,58}, -{82,-75,59}, -{82,-75,60}, -{82,-75,61}, -{82,-75,62}, -{82,-75,63}, -{82,-75,64}, -{82,-75,65}, -{82,-75,66}, -{82,-75,67}, -{82,-75,68}, -{82,-75,69}, -{82,-75,70}, -{82,-75,71}, -{82,-75,72}, -{82,-75,73}, -{82,-75,74}, -{82,-75,75}, -{82,-75,76}, -{82,-75,77}, -{82,-75,78}, -{82,-75,79}, -{82,-74,50}, -{82,-74,51}, -{82,-74,52}, -{82,-74,53}, -{82,-74,54}, -{82,-74,55}, -{82,-74,56}, -{82,-74,57}, -{82,-74,58}, -{82,-74,59}, -{82,-74,60}, -{82,-74,61}, -{82,-74,62}, -{82,-74,63}, -{82,-74,64}, -{82,-74,65}, -{82,-74,66}, -{82,-74,67}, -{82,-74,68}, -{82,-74,69}, -{82,-74,70}, -{82,-74,71}, -{82,-74,72}, -{82,-74,73}, -{82,-74,74}, -{82,-74,75}, -{82,-74,76}, -{82,-74,77}, -{82,-74,78}, -{82,-74,79}, -{82,-73,47}, -{82,-73,48}, -{82,-73,49}, -{82,-73,50}, -{82,-73,51}, -{82,-73,52}, -{82,-73,53}, -{82,-73,54}, -{82,-73,55}, -{82,-73,56}, -{82,-73,57}, -{82,-73,58}, -{82,-73,59}, -{82,-73,60}, -{82,-73,61}, -{82,-73,62}, -{82,-73,63}, -{82,-73,64}, -{82,-73,65}, -{82,-73,66}, -{82,-73,67}, -{82,-73,68}, -{82,-73,69}, -{82,-73,70}, -{82,-73,71}, -{82,-73,72}, -{82,-73,73}, -{82,-73,74}, -{82,-73,75}, -{82,-73,76}, -{82,-73,77}, -{82,-73,78}, -{82,-73,79}, -{82,-72,44}, -{82,-72,45}, -{82,-72,46}, -{82,-72,47}, -{82,-72,48}, -{82,-72,49}, -{82,-72,50}, -{82,-72,51}, -{82,-72,52}, -{82,-72,53}, -{82,-72,54}, -{82,-72,55}, -{82,-72,56}, -{82,-72,57}, -{82,-72,58}, -{82,-72,59}, -{82,-72,60}, -{82,-72,61}, -{82,-72,62}, -{82,-72,63}, -{82,-72,64}, -{82,-72,65}, -{82,-72,66}, -{82,-72,67}, -{82,-72,68}, -{82,-72,69}, -{82,-72,70}, -{82,-72,71}, -{82,-72,72}, -{82,-72,73}, -{82,-72,74}, -{82,-72,75}, -{82,-72,76}, -{82,-72,77}, -{82,-72,78}, -{82,-72,79}, -{82,-71,41}, -{82,-71,42}, -{82,-71,43}, -{82,-71,44}, -{82,-71,45}, -{82,-71,46}, -{82,-71,47}, -{82,-71,48}, -{82,-71,49}, -{82,-71,50}, -{82,-71,51}, -{82,-71,52}, -{82,-71,53}, -{82,-71,54}, -{82,-71,55}, -{82,-71,56}, -{82,-71,57}, -{82,-71,58}, -{82,-71,59}, -{82,-71,60}, -{82,-71,61}, -{82,-71,62}, -{82,-71,63}, -{82,-71,64}, -{82,-71,65}, -{82,-71,66}, -{82,-71,67}, -{82,-71,68}, -{82,-71,69}, -{82,-71,70}, -{82,-71,71}, -{82,-71,72}, -{82,-71,73}, -{82,-71,74}, -{82,-71,75}, -{82,-71,76}, -{82,-71,77}, -{82,-71,78}, -{82,-71,79}, -{82,-70,38}, -{82,-70,39}, -{82,-70,40}, -{82,-70,41}, -{82,-70,42}, -{82,-70,43}, -{82,-70,44}, -{82,-70,45}, -{82,-70,46}, -{82,-70,47}, -{82,-70,48}, -{82,-70,49}, -{82,-70,50}, -{82,-70,51}, -{82,-70,52}, -{82,-70,53}, -{82,-70,54}, -{82,-70,55}, -{82,-70,56}, -{82,-70,57}, -{82,-70,58}, -{82,-70,59}, -{82,-70,60}, -{82,-70,61}, -{82,-70,62}, -{82,-70,63}, -{82,-70,64}, -{82,-70,65}, -{82,-70,66}, -{82,-70,67}, -{82,-70,68}, -{82,-70,69}, -{82,-70,70}, -{82,-70,71}, -{82,-70,72}, -{82,-70,73}, -{82,-70,74}, -{82,-70,75}, -{82,-70,76}, -{82,-70,77}, -{82,-70,78}, -{82,-70,79}, -{82,-69,36}, -{82,-69,37}, -{82,-69,38}, -{82,-69,39}, -{82,-69,40}, -{82,-69,41}, -{82,-69,42}, -{82,-69,43}, -{82,-69,44}, -{82,-69,45}, -{82,-69,46}, -{82,-69,47}, -{82,-69,48}, -{82,-69,49}, -{82,-69,50}, -{82,-69,51}, -{82,-69,52}, -{82,-69,53}, -{82,-69,54}, -{82,-69,55}, -{82,-69,56}, -{82,-69,57}, -{82,-69,58}, -{82,-69,59}, -{82,-69,60}, -{82,-69,61}, -{82,-69,62}, -{82,-69,63}, -{82,-69,64}, -{82,-69,65}, -{82,-69,66}, -{82,-69,67}, -{82,-69,68}, -{82,-69,69}, -{82,-69,70}, -{82,-69,71}, -{82,-69,72}, -{82,-69,73}, -{82,-69,74}, -{82,-69,75}, -{82,-69,76}, -{82,-69,77}, -{82,-69,78}, -{82,-69,79}, -{82,-68,33}, -{82,-68,34}, -{82,-68,35}, -{82,-68,36}, -{82,-68,37}, -{82,-68,38}, -{82,-68,39}, -{82,-68,40}, -{82,-68,41}, -{82,-68,42}, -{82,-68,43}, -{82,-68,44}, -{82,-68,45}, -{82,-68,46}, -{82,-68,47}, -{82,-68,48}, -{82,-68,49}, -{82,-68,50}, -{82,-68,51}, -{82,-68,52}, -{82,-68,53}, -{82,-68,54}, -{82,-68,55}, -{82,-68,56}, -{82,-68,57}, -{82,-68,58}, -{82,-68,59}, -{82,-68,60}, -{82,-68,61}, -{82,-68,62}, -{82,-68,63}, -{82,-68,64}, -{82,-68,65}, -{82,-68,66}, -{82,-68,67}, -{82,-68,68}, -{82,-68,69}, -{82,-68,70}, -{82,-68,71}, -{82,-68,72}, -{82,-68,73}, -{82,-68,74}, -{82,-68,75}, -{82,-68,76}, -{82,-68,77}, -{82,-68,78}, -{82,-68,79}, -{82,-67,31}, -{82,-67,32}, -{82,-67,33}, -{82,-67,34}, -{82,-67,35}, -{82,-67,36}, -{82,-67,37}, -{82,-67,38}, -{82,-67,39}, -{82,-67,40}, -{82,-67,41}, -{82,-67,42}, -{82,-67,43}, -{82,-67,44}, -{82,-67,45}, -{82,-67,46}, -{82,-67,47}, -{82,-67,48}, -{82,-67,49}, -{82,-67,50}, -{82,-67,51}, -{82,-67,52}, -{82,-67,53}, -{82,-67,54}, -{82,-67,55}, -{82,-67,56}, -{82,-67,57}, -{82,-67,58}, -{82,-67,59}, -{82,-67,60}, -{82,-67,61}, -{82,-67,62}, -{82,-67,63}, -{82,-67,64}, -{82,-67,65}, -{82,-67,66}, -{82,-67,67}, -{82,-67,68}, -{82,-67,69}, -{82,-67,70}, -{82,-67,71}, -{82,-67,72}, -{82,-67,73}, -{82,-67,74}, -{82,-67,75}, -{82,-67,76}, -{82,-67,77}, -{82,-67,78}, -{82,-67,79}, -{82,-66,28}, -{82,-66,29}, -{82,-66,30}, -{82,-66,31}, -{82,-66,32}, -{82,-66,33}, -{82,-66,34}, -{82,-66,35}, -{82,-66,36}, -{82,-66,37}, -{82,-66,38}, -{82,-66,39}, -{82,-66,40}, -{82,-66,41}, -{82,-66,42}, -{82,-66,43}, -{82,-66,44}, -{82,-66,45}, -{82,-66,46}, -{82,-66,47}, -{82,-66,48}, -{82,-66,49}, -{82,-66,50}, -{82,-66,51}, -{82,-66,52}, -{82,-66,53}, -{82,-66,54}, -{82,-66,55}, -{82,-66,56}, -{82,-66,57}, -{82,-66,58}, -{82,-66,59}, -{82,-66,60}, -{82,-66,61}, -{82,-66,62}, -{82,-66,63}, -{82,-66,64}, -{82,-66,65}, -{82,-66,66}, -{82,-66,67}, -{82,-66,68}, -{82,-66,69}, -{82,-66,70}, -{82,-66,71}, -{82,-66,72}, -{82,-66,73}, -{82,-66,74}, -{82,-66,75}, -{82,-66,76}, -{82,-66,77}, -{82,-66,78}, -{82,-66,79}, -{82,-65,26}, -{82,-65,27}, -{82,-65,28}, -{82,-65,29}, -{82,-65,30}, -{82,-65,31}, -{82,-65,32}, -{82,-65,33}, -{82,-65,34}, -{82,-65,35}, -{82,-65,36}, -{82,-65,37}, -{82,-65,38}, -{82,-65,39}, -{82,-65,40}, -{82,-65,41}, -{82,-65,42}, -{82,-65,43}, -{82,-65,44}, -{82,-65,45}, -{82,-65,46}, -{82,-65,47}, -{82,-65,48}, -{82,-65,49}, -{82,-65,50}, -{82,-65,51}, -{82,-65,52}, -{82,-65,53}, -{82,-65,54}, -{82,-65,55}, -{82,-65,56}, -{82,-65,57}, -{82,-65,58}, -{82,-65,59}, -{82,-65,60}, -{82,-65,61}, -{82,-65,62}, -{82,-65,63}, -{82,-65,64}, -{82,-65,65}, -{82,-65,66}, -{82,-65,67}, -{82,-65,68}, -{82,-65,69}, -{82,-65,70}, -{82,-65,71}, -{82,-65,72}, -{82,-65,73}, -{82,-65,74}, -{82,-65,75}, -{82,-65,76}, -{82,-65,77}, -{82,-65,78}, -{82,-65,79}, -{82,-64,24}, -{82,-64,25}, -{82,-64,26}, -{82,-64,27}, -{82,-64,28}, -{82,-64,29}, -{82,-64,30}, -{82,-64,31}, -{82,-64,32}, -{82,-64,33}, -{82,-64,34}, -{82,-64,35}, -{82,-64,36}, -{82,-64,37}, -{82,-64,38}, -{82,-64,39}, -{82,-64,40}, -{82,-64,41}, -{82,-64,42}, -{82,-64,43}, -{82,-64,44}, -{82,-64,45}, -{82,-64,46}, -{82,-64,47}, -{82,-64,48}, -{82,-64,49}, -{82,-64,50}, -{82,-64,51}, -{82,-64,52}, -{82,-64,53}, -{82,-64,54}, -{82,-64,55}, -{82,-64,56}, -{82,-64,57}, -{82,-64,58}, -{82,-64,59}, -{82,-64,60}, -{82,-64,61}, -{82,-64,62}, -{82,-64,63}, -{82,-64,64}, -{82,-64,65}, -{82,-64,66}, -{82,-64,67}, -{82,-64,68}, -{82,-64,69}, -{82,-64,70}, -{82,-64,71}, -{82,-64,72}, -{82,-64,73}, -{82,-64,74}, -{82,-64,75}, -{82,-64,76}, -{82,-64,77}, -{82,-64,78}, -{82,-64,79}, -{82,-63,22}, -{82,-63,23}, -{82,-63,24}, -{82,-63,25}, -{82,-63,26}, -{82,-63,27}, -{82,-63,28}, -{82,-63,29}, -{82,-63,30}, -{82,-63,31}, -{82,-63,32}, -{82,-63,33}, -{82,-63,34}, -{82,-63,35}, -{82,-63,36}, -{82,-63,37}, -{82,-63,38}, -{82,-63,39}, -{82,-63,40}, -{82,-63,41}, -{82,-63,42}, -{82,-63,43}, -{82,-63,44}, -{82,-63,45}, -{82,-63,46}, -{82,-63,47}, -{82,-63,48}, -{82,-63,49}, -{82,-63,50}, -{82,-63,51}, -{82,-63,52}, -{82,-63,53}, -{82,-63,54}, -{82,-63,55}, -{82,-63,56}, -{82,-63,57}, -{82,-63,58}, -{82,-63,59}, -{82,-63,60}, -{82,-63,61}, -{82,-63,62}, -{82,-63,63}, -{82,-63,64}, -{82,-63,65}, -{82,-63,66}, -{82,-63,67}, -{82,-63,68}, -{82,-63,69}, -{82,-63,70}, -{82,-63,71}, -{82,-63,72}, -{82,-63,73}, -{82,-63,74}, -{82,-63,75}, -{82,-63,76}, -{82,-63,77}, -{82,-63,78}, -{82,-63,79}, -{82,-62,20}, -{82,-62,21}, -{82,-62,22}, -{82,-62,23}, -{82,-62,24}, -{82,-62,25}, -{82,-62,26}, -{82,-62,27}, -{82,-62,28}, -{82,-62,29}, -{82,-62,30}, -{82,-62,31}, -{82,-62,32}, -{82,-62,33}, -{82,-62,34}, -{82,-62,35}, -{82,-62,36}, -{82,-62,37}, -{82,-62,38}, -{82,-62,39}, -{82,-62,40}, -{82,-62,41}, -{82,-62,42}, -{82,-62,43}, -{82,-62,44}, -{82,-62,45}, -{82,-62,46}, -{82,-62,47}, -{82,-62,48}, -{82,-62,49}, -{82,-62,50}, -{82,-62,51}, -{82,-62,52}, -{82,-62,53}, -{82,-62,54}, -{82,-62,55}, -{82,-62,56}, -{82,-62,57}, -{82,-62,58}, -{82,-62,59}, -{82,-62,60}, -{82,-62,61}, -{82,-62,62}, -{82,-62,63}, -{82,-62,64}, -{82,-62,65}, -{82,-62,66}, -{82,-62,67}, -{82,-62,68}, -{82,-62,69}, -{82,-62,70}, -{82,-62,71}, -{82,-62,72}, -{82,-62,73}, -{82,-62,74}, -{82,-62,75}, -{82,-62,76}, -{82,-62,77}, -{82,-62,78}, -{82,-62,79}, -{82,-61,18}, -{82,-61,19}, -{82,-61,20}, -{82,-61,21}, -{82,-61,22}, -{82,-61,23}, -{82,-61,24}, -{82,-61,25}, -{82,-61,26}, -{82,-61,27}, -{82,-61,28}, -{82,-61,29}, -{82,-61,30}, -{82,-61,31}, -{82,-61,32}, -{82,-61,33}, -{82,-61,34}, -{82,-61,35}, -{82,-61,36}, -{82,-61,37}, -{82,-61,38}, -{82,-61,39}, -{82,-61,40}, -{82,-61,41}, -{82,-61,42}, -{82,-61,43}, -{82,-61,44}, -{82,-61,45}, -{82,-61,46}, -{82,-61,47}, -{82,-61,48}, -{82,-61,49}, -{82,-61,50}, -{82,-61,51}, -{82,-61,52}, -{82,-61,53}, -{82,-61,54}, -{82,-61,55}, -{82,-61,56}, -{82,-61,57}, -{82,-61,58}, -{82,-61,59}, -{82,-61,60}, -{82,-61,61}, -{82,-61,62}, -{82,-61,63}, -{82,-61,64}, -{82,-61,65}, -{82,-61,66}, -{82,-61,67}, -{82,-61,68}, -{82,-61,69}, -{82,-61,70}, -{82,-61,71}, -{82,-61,72}, -{82,-61,73}, -{82,-61,74}, -{82,-61,75}, -{82,-61,76}, -{82,-61,77}, -{82,-61,78}, -{82,-61,79}, -{82,-60,15}, -{82,-60,16}, -{82,-60,17}, -{82,-60,18}, -{82,-60,19}, -{82,-60,20}, -{82,-60,21}, -{82,-60,22}, -{82,-60,23}, -{82,-60,24}, -{82,-60,25}, -{82,-60,26}, -{82,-60,27}, -{82,-60,28}, -{82,-60,29}, -{82,-60,30}, -{82,-60,31}, -{82,-60,32}, -{82,-60,33}, -{82,-60,34}, -{82,-60,35}, -{82,-60,36}, -{82,-60,37}, -{82,-60,38}, -{82,-60,39}, -{82,-60,40}, -{82,-60,41}, -{82,-60,42}, -{82,-60,43}, -{82,-60,44}, -{82,-60,45}, -{82,-60,46}, -{82,-60,47}, -{82,-60,48}, -{82,-60,49}, -{82,-60,50}, -{82,-60,51}, -{82,-60,52}, -{82,-60,53}, -{82,-60,54}, -{82,-60,55}, -{82,-60,56}, -{82,-60,57}, -{82,-60,58}, -{82,-60,59}, -{82,-60,60}, -{82,-60,61}, -{82,-60,62}, -{82,-60,63}, -{82,-60,64}, -{82,-60,65}, -{82,-60,66}, -{82,-60,67}, -{82,-60,68}, -{82,-60,69}, -{82,-60,70}, -{82,-60,71}, -{82,-60,72}, -{82,-60,73}, -{82,-60,74}, -{82,-60,75}, -{82,-60,76}, -{82,-60,77}, -{82,-60,78}, -{82,-60,79}, -{82,-59,14}, -{82,-59,15}, -{82,-59,16}, -{82,-59,17}, -{82,-59,18}, -{82,-59,19}, -{82,-59,20}, -{82,-59,21}, -{82,-59,22}, -{82,-59,23}, -{82,-59,24}, -{82,-59,25}, -{82,-59,26}, -{82,-59,27}, -{82,-59,28}, -{82,-59,29}, -{82,-59,30}, -{82,-59,31}, -{82,-59,32}, -{82,-59,33}, -{82,-59,34}, -{82,-59,35}, -{82,-59,36}, -{82,-59,37}, -{82,-59,38}, -{82,-59,39}, -{82,-59,40}, -{82,-59,41}, -{82,-59,42}, -{82,-59,43}, -{82,-59,44}, -{82,-59,45}, -{82,-59,46}, -{82,-59,47}, -{82,-59,48}, -{82,-59,49}, -{82,-59,50}, -{82,-59,51}, -{82,-59,52}, -{82,-59,53}, -{82,-59,54}, -{82,-59,55}, -{82,-59,56}, -{82,-59,57}, -{82,-59,58}, -{82,-59,59}, -{82,-59,60}, -{82,-59,61}, -{82,-59,62}, -{82,-59,63}, -{82,-59,64}, -{82,-59,65}, -{82,-59,66}, -{82,-59,67}, -{82,-59,68}, -{82,-59,69}, -{82,-59,70}, -{82,-59,71}, -{82,-59,72}, -{82,-59,73}, -{82,-59,74}, -{82,-59,75}, -{82,-59,76}, -{82,-59,77}, -{82,-59,78}, -{82,-59,79}, -{82,-58,12}, -{82,-58,13}, -{82,-58,14}, -{82,-58,15}, -{82,-58,16}, -{82,-58,17}, -{82,-58,18}, -{82,-58,19}, -{82,-58,20}, -{82,-58,21}, -{82,-58,22}, -{82,-58,23}, -{82,-58,24}, -{82,-58,25}, -{82,-58,26}, -{82,-58,27}, -{82,-58,28}, -{82,-58,29}, -{82,-58,30}, -{82,-58,31}, -{82,-58,32}, -{82,-58,33}, -{82,-58,34}, -{82,-58,35}, -{82,-58,36}, -{82,-58,37}, -{82,-58,38}, -{82,-58,39}, -{82,-58,40}, -{82,-58,41}, -{82,-58,42}, -{82,-58,43}, -{82,-58,44}, -{82,-58,45}, -{82,-58,46}, -{82,-58,47}, -{82,-58,48}, -{82,-58,49}, -{82,-58,50}, -{82,-58,51}, -{82,-58,52}, -{82,-58,53}, -{82,-58,54}, -{82,-58,55}, -{82,-58,56}, -{82,-58,57}, -{82,-58,58}, -{82,-58,59}, -{82,-58,60}, -{82,-58,61}, -{82,-58,62}, -{82,-58,63}, -{82,-58,64}, -{82,-58,65}, -{82,-58,66}, -{82,-58,67}, -{82,-58,68}, -{82,-58,69}, -{82,-58,70}, -{82,-58,71}, -{82,-58,72}, -{82,-58,73}, -{82,-58,74}, -{82,-58,75}, -{82,-58,76}, -{82,-58,77}, -{82,-58,78}, -{82,-58,79}, -{82,-57,10}, -{82,-57,11}, -{82,-57,12}, -{82,-57,13}, -{82,-57,14}, -{82,-57,15}, -{82,-57,16}, -{82,-57,17}, -{82,-57,18}, -{82,-57,19}, -{82,-57,20}, -{82,-57,21}, -{82,-57,22}, -{82,-57,23}, -{82,-57,24}, -{82,-57,25}, -{82,-57,26}, -{82,-57,27}, -{82,-57,28}, -{82,-57,29}, -{82,-57,30}, -{82,-57,31}, -{82,-57,32}, -{82,-57,33}, -{82,-57,34}, -{82,-57,35}, -{82,-57,36}, -{82,-57,37}, -{82,-57,38}, -{82,-57,39}, -{82,-57,40}, -{82,-57,41}, -{82,-57,42}, -{82,-57,43}, -{82,-57,44}, -{82,-57,45}, -{82,-57,46}, -{82,-57,47}, -{82,-57,48}, -{82,-57,49}, -{82,-57,50}, -{82,-57,51}, -{82,-57,52}, -{82,-57,53}, -{82,-57,54}, -{82,-57,55}, -{82,-57,56}, -{82,-57,57}, -{82,-57,58}, -{82,-57,59}, -{82,-57,60}, -{82,-57,61}, -{82,-57,62}, -{82,-57,63}, -{82,-57,64}, -{82,-57,65}, -{82,-57,66}, -{82,-57,67}, -{82,-57,68}, -{82,-57,69}, -{82,-57,70}, -{82,-57,71}, -{82,-57,72}, -{82,-57,73}, -{82,-57,74}, -{82,-57,75}, -{82,-57,76}, -{82,-57,77}, -{82,-57,78}, -{82,-57,79}, -{82,-56,8}, -{82,-56,9}, -{82,-56,10}, -{82,-56,11}, -{82,-56,12}, -{82,-56,13}, -{82,-56,14}, -{82,-56,15}, -{82,-56,16}, -{82,-56,17}, -{82,-56,18}, -{82,-56,19}, -{82,-56,20}, -{82,-56,21}, -{82,-56,22}, -{82,-56,23}, -{82,-56,24}, -{82,-56,25}, -{82,-56,26}, -{82,-56,27}, -{82,-56,28}, -{82,-56,29}, -{82,-56,30}, -{82,-56,31}, -{82,-56,32}, -{82,-56,33}, -{82,-56,34}, -{82,-56,35}, -{82,-56,36}, -{82,-56,37}, -{82,-56,38}, -{82,-56,39}, -{82,-56,40}, -{82,-56,41}, -{82,-56,42}, -{82,-56,43}, -{82,-56,44}, -{82,-56,45}, -{82,-56,46}, -{82,-56,47}, -{82,-56,48}, -{82,-56,49}, -{82,-56,50}, -{82,-56,51}, -{82,-56,52}, -{82,-56,53}, -{82,-56,54}, -{82,-56,55}, -{82,-56,56}, -{82,-56,57}, -{82,-56,58}, -{82,-56,59}, -{82,-56,60}, -{82,-56,61}, -{82,-56,62}, -{82,-56,63}, -{82,-56,64}, -{82,-56,65}, -{82,-56,66}, -{82,-56,67}, -{82,-56,68}, -{82,-56,69}, -{82,-56,70}, -{82,-56,71}, -{82,-56,72}, -{82,-56,73}, -{82,-56,74}, -{82,-56,75}, -{82,-56,76}, -{82,-56,77}, -{82,-56,78}, -{82,-56,79}, -{82,-55,6}, -{82,-55,7}, -{82,-55,8}, -{82,-55,9}, -{82,-55,10}, -{82,-55,11}, -{82,-55,12}, -{82,-55,13}, -{82,-55,14}, -{82,-55,15}, -{82,-55,16}, -{82,-55,17}, -{82,-55,18}, -{82,-55,19}, -{82,-55,20}, -{82,-55,21}, -{82,-55,22}, -{82,-55,23}, -{82,-55,24}, -{82,-55,25}, -{82,-55,26}, -{82,-55,27}, -{82,-55,28}, -{82,-55,29}, -{82,-55,30}, -{82,-55,31}, -{82,-55,32}, -{82,-55,33}, -{82,-55,34}, -{82,-55,35}, -{82,-55,36}, -{82,-55,37}, -{82,-55,38}, -{82,-55,39}, -{82,-55,40}, -{82,-55,41}, -{82,-55,42}, -{82,-55,43}, -{82,-55,44}, -{82,-55,45}, -{82,-55,46}, -{82,-55,47}, -{82,-55,48}, -{82,-55,49}, -{82,-55,50}, -{82,-55,51}, -{82,-55,52}, -{82,-55,53}, -{82,-55,54}, -{82,-55,55}, -{82,-55,56}, -{82,-55,57}, -{82,-55,58}, -{82,-55,59}, -{82,-55,60}, -{82,-55,61}, -{82,-55,62}, -{82,-55,63}, -{82,-55,64}, -{82,-55,65}, -{82,-55,66}, -{82,-55,67}, -{82,-55,68}, -{82,-55,69}, -{82,-55,70}, -{82,-55,71}, -{82,-55,72}, -{82,-55,73}, -{82,-55,74}, -{82,-55,75}, -{82,-55,76}, -{82,-55,77}, -{82,-55,78}, -{82,-55,79}, -{82,-54,4}, -{82,-54,5}, -{82,-54,6}, -{82,-54,7}, -{82,-54,8}, -{82,-54,9}, -{82,-54,10}, -{82,-54,11}, -{82,-54,12}, -{82,-54,13}, -{82,-54,14}, -{82,-54,15}, -{82,-54,16}, -{82,-54,17}, -{82,-54,18}, -{82,-54,19}, -{82,-54,20}, -{82,-54,21}, -{82,-54,22}, -{82,-54,23}, -{82,-54,24}, -{82,-54,25}, -{82,-54,26}, -{82,-54,27}, -{82,-54,28}, -{82,-54,29}, -{82,-54,30}, -{82,-54,31}, -{82,-54,32}, -{82,-54,33}, -{82,-54,34}, -{82,-54,35}, -{82,-54,36}, -{82,-54,37}, -{82,-54,38}, -{82,-54,39}, -{82,-54,40}, -{82,-54,41}, -{82,-54,42}, -{82,-54,43}, -{82,-54,44}, -{82,-54,45}, -{82,-54,46}, -{82,-54,47}, -{82,-54,48}, -{82,-54,49}, -{82,-54,50}, -{82,-54,51}, -{82,-54,52}, -{82,-54,53}, -{82,-54,54}, -{82,-54,55}, -{82,-54,56}, -{82,-54,57}, -{82,-54,58}, -{82,-54,59}, -{82,-54,60}, -{82,-54,61}, -{82,-54,62}, -{82,-54,63}, -{82,-54,64}, -{82,-54,65}, -{82,-54,66}, -{82,-54,67}, -{82,-54,68}, -{82,-54,69}, -{82,-54,70}, -{82,-54,71}, -{82,-54,72}, -{82,-54,73}, -{82,-54,74}, -{82,-54,75}, -{82,-54,76}, -{82,-54,77}, -{82,-54,78}, -{82,-54,79}, -{82,-54,80}, -{82,-53,2}, -{82,-53,3}, -{82,-53,4}, -{82,-53,5}, -{82,-53,6}, -{82,-53,7}, -{82,-53,8}, -{82,-53,9}, -{82,-53,10}, -{82,-53,11}, -{82,-53,12}, -{82,-53,13}, -{82,-53,14}, -{82,-53,15}, -{82,-53,16}, -{82,-53,17}, -{82,-53,18}, -{82,-53,19}, -{82,-53,20}, -{82,-53,21}, -{82,-53,22}, -{82,-53,23}, -{82,-53,24}, -{82,-53,25}, -{82,-53,26}, -{82,-53,27}, -{82,-53,28}, -{82,-53,29}, -{82,-53,30}, -{82,-53,31}, -{82,-53,32}, -{82,-53,33}, -{82,-53,34}, -{82,-53,35}, -{82,-53,36}, -{82,-53,37}, -{82,-53,38}, -{82,-53,39}, -{82,-53,40}, -{82,-53,41}, -{82,-53,42}, -{82,-53,43}, -{82,-53,44}, -{82,-53,45}, -{82,-53,46}, -{82,-53,47}, -{82,-53,48}, -{82,-53,49}, -{82,-53,50}, -{82,-53,51}, -{82,-53,52}, -{82,-53,53}, -{82,-53,54}, -{82,-53,55}, -{82,-53,56}, -{82,-53,57}, -{82,-53,58}, -{82,-53,59}, -{82,-53,60}, -{82,-53,61}, -{82,-53,62}, -{82,-53,63}, -{82,-53,64}, -{82,-53,65}, -{82,-53,66}, -{82,-53,67}, -{82,-53,68}, -{82,-53,69}, -{82,-53,70}, -{82,-53,71}, -{82,-53,72}, -{82,-53,73}, -{82,-53,74}, -{82,-53,75}, -{82,-53,76}, -{82,-53,77}, -{82,-53,78}, -{82,-53,79}, -{82,-53,80}, -{82,-52,1}, -{82,-52,2}, -{82,-52,3}, -{82,-52,4}, -{82,-52,5}, -{82,-52,6}, -{82,-52,7}, -{82,-52,8}, -{82,-52,9}, -{82,-52,10}, -{82,-52,11}, -{82,-52,12}, -{82,-52,13}, -{82,-52,14}, -{82,-52,15}, -{82,-52,16}, -{82,-52,17}, -{82,-52,18}, -{82,-52,19}, -{82,-52,20}, -{82,-52,21}, -{82,-52,22}, -{82,-52,23}, -{82,-52,24}, -{82,-52,25}, -{82,-52,26}, -{82,-52,27}, -{82,-52,28}, -{82,-52,29}, -{82,-52,30}, -{82,-52,31}, -{82,-52,32}, -{82,-52,33}, -{82,-52,34}, -{82,-52,35}, -{82,-52,36}, -{82,-52,37}, -{82,-52,38}, -{82,-52,39}, -{82,-52,40}, -{82,-52,41}, -{82,-52,42}, -{82,-52,43}, -{82,-52,44}, -{82,-52,45}, -{82,-52,46}, -{82,-52,47}, -{82,-52,48}, -{82,-52,49}, -{82,-52,50}, -{82,-52,51}, -{82,-52,52}, -{82,-52,53}, -{82,-52,54}, -{82,-52,55}, -{82,-52,56}, -{82,-52,57}, -{82,-52,58}, -{82,-52,59}, -{82,-52,60}, -{82,-52,61}, -{82,-52,62}, -{82,-52,63}, -{82,-52,64}, -{82,-52,65}, -{82,-52,66}, -{82,-52,67}, -{82,-52,68}, -{82,-52,69}, -{82,-52,70}, -{82,-52,71}, -{82,-52,72}, -{82,-52,73}, -{82,-52,74}, -{82,-52,75}, -{82,-52,76}, -{82,-52,77}, -{82,-52,78}, -{82,-52,79}, -{82,-52,80}, -{82,-51,-1}, -{82,-51,0}, -{82,-51,1}, -{82,-51,2}, -{82,-51,3}, -{82,-51,4}, -{82,-51,5}, -{82,-51,6}, -{82,-51,7}, -{82,-51,8}, -{82,-51,9}, -{82,-51,10}, -{82,-51,11}, -{82,-51,12}, -{82,-51,13}, -{82,-51,14}, -{82,-51,15}, -{82,-51,16}, -{82,-51,17}, -{82,-51,18}, -{82,-51,19}, -{82,-51,20}, -{82,-51,21}, -{82,-51,22}, -{82,-51,23}, -{82,-51,24}, -{82,-51,25}, -{82,-51,26}, -{82,-51,27}, -{82,-51,28}, -{82,-51,29}, -{82,-51,30}, -{82,-51,31}, -{82,-51,32}, -{82,-51,33}, -{82,-51,34}, -{82,-51,35}, -{82,-51,36}, -{82,-51,37}, -{82,-51,38}, -{82,-51,39}, -{82,-51,40}, -{82,-51,41}, -{82,-51,42}, -{82,-51,43}, -{82,-51,44}, -{82,-51,45}, -{82,-51,46}, -{82,-51,47}, -{82,-51,48}, -{82,-51,49}, -{82,-51,50}, -{82,-51,51}, -{82,-51,52}, -{82,-51,53}, -{82,-51,54}, -{82,-51,55}, -{82,-51,56}, -{82,-51,57}, -{82,-51,58}, -{82,-51,59}, -{82,-51,60}, -{82,-51,61}, -{82,-51,62}, -{82,-51,63}, -{82,-51,64}, -{82,-51,65}, -{82,-51,66}, -{82,-51,67}, -{82,-51,68}, -{82,-51,69}, -{82,-51,70}, -{82,-51,71}, -{82,-51,72}, -{82,-51,73}, -{82,-51,74}, -{82,-51,75}, -{82,-51,76}, -{82,-51,77}, -{82,-51,78}, -{82,-51,79}, -{82,-51,80}, -{82,-50,-3}, -{82,-50,-2}, -{82,-50,-1}, -{82,-50,0}, -{82,-50,1}, -{82,-50,2}, -{82,-50,3}, -{82,-50,4}, -{82,-50,5}, -{82,-50,6}, -{82,-50,7}, -{82,-50,8}, -{82,-50,9}, -{82,-50,10}, -{82,-50,11}, -{82,-50,12}, -{82,-50,13}, -{82,-50,14}, -{82,-50,15}, -{82,-50,16}, -{82,-50,17}, -{82,-50,18}, -{82,-50,19}, -{82,-50,20}, -{82,-50,21}, -{82,-50,22}, -{82,-50,23}, -{82,-50,24}, -{82,-50,25}, -{82,-50,26}, -{82,-50,27}, -{82,-50,28}, -{82,-50,29}, -{82,-50,30}, -{82,-50,31}, -{82,-50,32}, -{82,-50,33}, -{82,-50,34}, -{82,-50,35}, -{82,-50,36}, -{82,-50,37}, -{82,-50,38}, -{82,-50,39}, -{82,-50,40}, -{82,-50,41}, -{82,-50,42}, -{82,-50,43}, -{82,-50,44}, -{82,-50,45}, -{82,-50,46}, -{82,-50,47}, -{82,-50,48}, -{82,-50,49}, -{82,-50,50}, -{82,-50,51}, -{82,-50,52}, -{82,-50,53}, -{82,-50,54}, -{82,-50,55}, -{82,-50,56}, -{82,-50,57}, -{82,-50,58}, -{82,-50,59}, -{82,-50,60}, -{82,-50,61}, -{82,-50,62}, -{82,-50,63}, -{82,-50,64}, -{82,-50,65}, -{82,-50,66}, -{82,-50,67}, -{82,-50,68}, -{82,-50,69}, -{82,-50,70}, -{82,-50,71}, -{82,-50,72}, -{82,-50,73}, -{82,-50,74}, -{82,-50,75}, -{82,-50,76}, -{82,-50,77}, -{82,-50,78}, -{82,-50,79}, -{82,-50,80}, -{82,-49,-5}, -{82,-49,-4}, -{82,-49,-3}, -{82,-49,-2}, -{82,-49,-1}, -{82,-49,0}, -{82,-49,1}, -{82,-49,2}, -{82,-49,3}, -{82,-49,4}, -{82,-49,5}, -{82,-49,6}, -{82,-49,7}, -{82,-49,8}, -{82,-49,9}, -{82,-49,10}, -{82,-49,11}, -{82,-49,12}, -{82,-49,13}, -{82,-49,14}, -{82,-49,15}, -{82,-49,16}, -{82,-49,17}, -{82,-49,18}, -{82,-49,19}, -{82,-49,20}, -{82,-49,21}, -{82,-49,22}, -{82,-49,23}, -{82,-49,24}, -{82,-49,25}, -{82,-49,26}, -{82,-49,27}, -{82,-49,28}, -{82,-49,29}, -{82,-49,30}, -{82,-49,31}, -{82,-49,32}, -{82,-49,33}, -{82,-49,34}, -{82,-49,35}, -{82,-49,36}, -{82,-49,37}, -{82,-49,38}, -{82,-49,39}, -{82,-49,40}, -{82,-49,41}, -{82,-49,42}, -{82,-49,43}, -{82,-49,44}, -{82,-49,45}, -{82,-49,46}, -{82,-49,47}, -{82,-49,48}, -{82,-49,49}, -{82,-49,50}, -{82,-49,51}, -{82,-49,52}, -{82,-49,53}, -{82,-49,54}, -{82,-49,55}, -{82,-49,56}, -{82,-49,57}, -{82,-49,58}, -{82,-49,59}, -{82,-49,60}, -{82,-49,61}, -{82,-49,62}, -{82,-49,63}, -{82,-49,64}, -{82,-49,65}, -{82,-49,66}, -{82,-49,67}, -{82,-49,68}, -{82,-49,69}, -{82,-49,70}, -{82,-49,71}, -{82,-49,72}, -{82,-49,73}, -{82,-49,74}, -{82,-49,75}, -{82,-49,76}, -{82,-49,77}, -{82,-49,78}, -{82,-49,79}, -{82,-49,80}, -{82,-48,-6}, -{82,-48,-5}, -{82,-48,-4}, -{82,-48,-3}, -{82,-48,-2}, -{82,-48,-1}, -{82,-48,0}, -{82,-48,1}, -{82,-48,2}, -{82,-48,3}, -{82,-48,4}, -{82,-48,5}, -{82,-48,6}, -{82,-48,7}, -{82,-48,8}, -{82,-48,9}, -{82,-48,10}, -{82,-48,11}, -{82,-48,12}, -{82,-48,13}, -{82,-48,14}, -{82,-48,15}, -{82,-48,16}, -{82,-48,17}, -{82,-48,18}, -{82,-48,19}, -{82,-48,20}, -{82,-48,21}, -{82,-48,22}, -{82,-48,23}, -{82,-48,24}, -{82,-48,25}, -{82,-48,26}, -{82,-48,27}, -{82,-48,28}, -{82,-48,29}, -{82,-48,30}, -{82,-48,31}, -{82,-48,32}, -{82,-48,33}, -{82,-48,34}, -{82,-48,35}, -{82,-48,36}, -{82,-48,37}, -{82,-48,38}, -{82,-48,39}, -{82,-48,40}, -{82,-48,41}, -{82,-48,42}, -{82,-48,43}, -{82,-48,44}, -{82,-48,45}, -{82,-48,46}, -{82,-48,47}, -{82,-48,48}, -{82,-48,49}, -{82,-48,50}, -{82,-48,51}, -{82,-48,52}, -{82,-48,53}, -{82,-48,54}, -{82,-48,55}, -{82,-48,56}, -{82,-48,57}, -{82,-48,58}, -{82,-48,59}, -{82,-48,60}, -{82,-48,61}, -{82,-48,62}, -{82,-48,63}, -{82,-48,64}, -{82,-48,65}, -{82,-48,66}, -{82,-48,67}, -{82,-48,68}, -{82,-48,69}, -{82,-48,70}, -{82,-48,71}, -{82,-48,72}, -{82,-48,73}, -{82,-48,74}, -{82,-48,75}, -{82,-48,76}, -{82,-48,77}, -{82,-48,78}, -{82,-48,79}, -{82,-48,80}, -{82,-47,-8}, -{82,-47,-7}, -{82,-47,-6}, -{82,-47,-5}, -{82,-47,-4}, -{82,-47,-3}, -{82,-47,-2}, -{82,-47,-1}, -{82,-47,0}, -{82,-47,1}, -{82,-47,2}, -{82,-47,3}, -{82,-47,4}, -{82,-47,5}, -{82,-47,6}, -{82,-47,7}, -{82,-47,8}, -{82,-47,9}, -{82,-47,10}, -{82,-47,11}, -{82,-47,12}, -{82,-47,13}, -{82,-47,14}, -{82,-47,15}, -{82,-47,16}, -{82,-47,17}, -{82,-47,18}, -{82,-47,19}, -{82,-47,20}, -{82,-47,21}, -{82,-47,22}, -{82,-47,23}, -{82,-47,24}, -{82,-47,25}, -{82,-47,26}, -{82,-47,27}, -{82,-47,28}, -{82,-47,29}, -{82,-47,30}, -{82,-47,31}, -{82,-47,32}, -{82,-47,33}, -{82,-47,34}, -{82,-47,35}, -{82,-47,36}, -{82,-47,37}, -{82,-47,38}, -{82,-47,39}, -{82,-47,40}, -{82,-47,41}, -{82,-47,42}, -{82,-47,43}, -{82,-47,44}, -{82,-47,45}, -{82,-47,46}, -{82,-47,47}, -{82,-47,48}, -{82,-47,49}, -{82,-47,50}, -{82,-47,51}, -{82,-47,52}, -{82,-47,53}, -{82,-47,54}, -{82,-47,55}, -{82,-47,56}, -{82,-47,57}, -{82,-47,58}, -{82,-47,59}, -{82,-47,60}, -{82,-47,61}, -{82,-47,62}, -{82,-47,63}, -{82,-47,64}, -{82,-47,65}, -{82,-47,66}, -{82,-47,67}, -{82,-47,68}, -{82,-47,69}, -{82,-47,70}, -{82,-47,71}, -{82,-47,72}, -{82,-47,73}, -{82,-47,74}, -{82,-47,75}, -{82,-47,76}, -{82,-47,77}, -{82,-47,78}, -{82,-47,79}, -{82,-47,80}, -{82,-46,-10}, -{82,-46,-9}, -{82,-46,-8}, -{82,-46,-7}, -{82,-46,-6}, -{82,-46,-5}, -{82,-46,-4}, -{82,-46,-3}, -{82,-46,-2}, -{82,-46,-1}, -{82,-46,0}, -{82,-46,1}, -{82,-46,2}, -{82,-46,3}, -{82,-46,4}, -{82,-46,5}, -{82,-46,6}, -{82,-46,7}, -{82,-46,8}, -{82,-46,9}, -{82,-46,10}, -{82,-46,11}, -{82,-46,12}, -{82,-46,13}, -{82,-46,14}, -{82,-46,15}, -{82,-46,16}, -{82,-46,17}, -{82,-46,18}, -{82,-46,19}, -{82,-46,20}, -{82,-46,21}, -{82,-46,22}, -{82,-46,23}, -{82,-46,24}, -{82,-46,25}, -{82,-46,26}, -{82,-46,27}, -{82,-46,28}, -{82,-46,29}, -{82,-46,30}, -{82,-46,31}, -{82,-46,32}, -{82,-46,33}, -{82,-46,34}, -{82,-46,35}, -{82,-46,36}, -{82,-46,37}, -{82,-46,38}, -{82,-46,39}, -{82,-46,40}, -{82,-46,41}, -{82,-46,42}, -{82,-46,43}, -{82,-46,44}, -{82,-46,45}, -{82,-46,46}, -{82,-46,47}, -{82,-46,48}, -{82,-46,49}, -{82,-46,50}, -{82,-46,51}, -{82,-46,52}, -{82,-46,53}, -{82,-46,54}, -{82,-46,55}, -{82,-46,56}, -{82,-46,57}, -{82,-46,58}, -{82,-46,59}, -{82,-46,60}, -{82,-46,61}, -{82,-46,62}, -{82,-46,63}, -{82,-46,64}, -{82,-46,65}, -{82,-46,66}, -{82,-46,67}, -{82,-46,68}, -{82,-46,69}, -{82,-46,70}, -{82,-46,71}, -{82,-46,72}, -{82,-46,73}, -{82,-46,74}, -{82,-46,75}, -{82,-46,76}, -{82,-46,77}, -{82,-46,78}, -{82,-46,79}, -{82,-46,80}, -{82,-45,-11}, -{82,-45,-10}, -{82,-45,-9}, -{82,-45,-8}, -{82,-45,-7}, -{82,-45,-6}, -{82,-45,-5}, -{82,-45,-4}, -{82,-45,-3}, -{82,-45,-2}, -{82,-45,-1}, -{82,-45,0}, -{82,-45,1}, -{82,-45,2}, -{82,-45,3}, -{82,-45,4}, -{82,-45,5}, -{82,-45,6}, -{82,-45,7}, -{82,-45,8}, -{82,-45,9}, -{82,-45,10}, -{82,-45,11}, -{82,-45,12}, -{82,-45,13}, -{82,-45,14}, -{82,-45,15}, -{82,-45,16}, -{82,-45,17}, -{82,-45,18}, -{82,-45,19}, -{82,-45,20}, -{82,-45,21}, -{82,-45,22}, -{82,-45,23}, -{82,-45,24}, -{82,-45,25}, -{82,-45,26}, -{82,-45,27}, -{82,-45,28}, -{82,-45,29}, -{82,-45,30}, -{82,-45,31}, -{82,-45,32}, -{82,-45,33}, -{82,-45,34}, -{82,-45,35}, -{82,-45,36}, -{82,-45,37}, -{82,-45,38}, -{82,-45,39}, -{82,-45,40}, -{82,-45,41}, -{82,-45,42}, -{82,-45,43}, -{82,-45,44}, -{82,-45,45}, -{82,-45,46}, -{82,-45,47}, -{82,-45,48}, -{82,-45,49}, -{82,-45,50}, -{82,-45,51}, -{82,-45,52}, -{82,-45,53}, -{82,-45,54}, -{82,-45,55}, -{82,-45,56}, -{82,-45,57}, -{82,-45,58}, -{82,-45,59}, -{82,-45,60}, -{82,-45,61}, -{82,-45,62}, -{82,-45,63}, -{82,-45,64}, -{82,-45,65}, -{82,-45,66}, -{82,-45,67}, -{82,-45,68}, -{82,-45,69}, -{82,-45,70}, -{82,-45,71}, -{82,-45,72}, -{82,-45,73}, -{82,-45,74}, -{82,-45,75}, -{82,-45,76}, -{82,-45,77}, -{82,-45,78}, -{82,-45,79}, -{82,-45,80}, -{82,-44,-13}, -{82,-44,-12}, -{82,-44,-11}, -{82,-44,-10}, -{82,-44,-9}, -{82,-44,-8}, -{82,-44,-7}, -{82,-44,-6}, -{82,-44,-5}, -{82,-44,-4}, -{82,-44,-3}, -{82,-44,-2}, -{82,-44,-1}, -{82,-44,0}, -{82,-44,1}, -{82,-44,2}, -{82,-44,3}, -{82,-44,4}, -{82,-44,5}, -{82,-44,6}, -{82,-44,7}, -{82,-44,8}, -{82,-44,9}, -{82,-44,10}, -{82,-44,11}, -{82,-44,12}, -{82,-44,13}, -{82,-44,14}, -{82,-44,15}, -{82,-44,16}, -{82,-44,17}, -{82,-44,18}, -{82,-44,19}, -{82,-44,20}, -{82,-44,21}, -{82,-44,22}, -{82,-44,23}, -{82,-44,24}, -{82,-44,25}, -{82,-44,26}, -{82,-44,27}, -{82,-44,28}, -{82,-44,29}, -{82,-44,30}, -{82,-44,31}, -{82,-44,32}, -{82,-44,33}, -{82,-44,34}, -{82,-44,35}, -{82,-44,36}, -{82,-44,37}, -{82,-44,38}, -{82,-44,39}, -{82,-44,40}, -{82,-44,41}, -{82,-44,42}, -{82,-44,43}, -{82,-44,44}, -{82,-44,45}, -{82,-44,46}, -{82,-44,47}, -{82,-44,48}, -{82,-44,49}, -{82,-44,50}, -{82,-44,51}, -{82,-44,52}, -{82,-44,53}, -{82,-44,54}, -{82,-44,55}, -{82,-44,56}, -{82,-44,57}, -{82,-44,58}, -{82,-44,59}, -{82,-44,60}, -{82,-44,61}, -{82,-44,62}, -{82,-44,63}, -{82,-44,64}, -{82,-44,65}, -{82,-44,66}, -{82,-44,67}, -{82,-44,68}, -{82,-44,69}, -{82,-44,70}, -{82,-44,71}, -{82,-44,72}, -{82,-44,73}, -{82,-44,74}, -{82,-44,75}, -{82,-44,76}, -{82,-44,77}, -{82,-44,78}, -{82,-44,79}, -{82,-44,80}, -{82,-43,-14}, -{82,-43,-13}, -{82,-43,-12}, -{82,-43,-11}, -{82,-43,-10}, -{82,-43,-9}, -{82,-43,-8}, -{82,-43,-7}, -{82,-43,-6}, -{82,-43,-5}, -{82,-43,-4}, -{82,-43,-3}, -{82,-43,-2}, -{82,-43,-1}, -{82,-43,0}, -{82,-43,1}, -{82,-43,2}, -{82,-43,3}, -{82,-43,4}, -{82,-43,5}, -{82,-43,6}, -{82,-43,7}, -{82,-43,8}, -{82,-43,9}, -{82,-43,10}, -{82,-43,11}, -{82,-43,12}, -{82,-43,13}, -{82,-43,14}, -{82,-43,15}, -{82,-43,16}, -{82,-43,17}, -{82,-43,18}, -{82,-43,19}, -{82,-43,20}, -{82,-43,21}, -{82,-43,22}, -{82,-43,23}, -{82,-43,24}, -{82,-43,25}, -{82,-43,26}, -{82,-43,27}, -{82,-43,28}, -{82,-43,29}, -{82,-43,30}, -{82,-43,31}, -{82,-43,32}, -{82,-43,33}, -{82,-43,34}, -{82,-43,35}, -{82,-43,36}, -{82,-43,37}, -{82,-43,38}, -{82,-43,39}, -{82,-43,40}, -{82,-43,41}, -{82,-43,42}, -{82,-43,43}, -{82,-43,44}, -{82,-43,45}, -{82,-43,46}, -{82,-43,47}, -{82,-43,48}, -{82,-43,49}, -{82,-43,50}, -{82,-43,51}, -{82,-43,52}, -{82,-43,53}, -{82,-43,54}, -{82,-43,55}, -{82,-43,56}, -{82,-43,57}, -{82,-43,58}, -{82,-43,59}, -{82,-43,60}, -{82,-43,61}, -{82,-43,62}, -{82,-43,63}, -{82,-43,64}, -{82,-43,65}, -{82,-43,66}, -{82,-43,67}, -{82,-43,68}, -{82,-43,69}, -{82,-43,70}, -{82,-43,71}, -{82,-43,72}, -{82,-43,73}, -{82,-43,74}, -{82,-43,75}, -{82,-43,76}, -{82,-43,77}, -{82,-43,78}, -{82,-43,79}, -{82,-43,80}, -{82,-42,-16}, -{82,-42,-15}, -{82,-42,-14}, -{82,-42,-13}, -{82,-42,-12}, -{82,-42,-11}, -{82,-42,-10}, -{82,-42,-9}, -{82,-42,-8}, -{82,-42,-7}, -{82,-42,-6}, -{82,-42,-5}, -{82,-42,-4}, -{82,-42,-3}, -{82,-42,-2}, -{82,-42,-1}, -{82,-42,0}, -{82,-42,1}, -{82,-42,2}, -{82,-42,3}, -{82,-42,4}, -{82,-42,5}, -{82,-42,6}, -{82,-42,7}, -{82,-42,8}, -{82,-42,9}, -{82,-42,10}, -{82,-42,11}, -{82,-42,12}, -{82,-42,13}, -{82,-42,14}, -{82,-42,15}, -{82,-42,16}, -{82,-42,17}, -{82,-42,18}, -{82,-42,19}, -{82,-42,20}, -{82,-42,21}, -{82,-42,22}, -{82,-42,23}, -{82,-42,24}, -{82,-42,25}, -{82,-42,26}, -{82,-42,27}, -{82,-42,28}, -{82,-42,29}, -{82,-42,30}, -{82,-42,31}, -{82,-42,32}, -{82,-42,33}, -{82,-42,34}, -{82,-42,35}, -{82,-42,36}, -{82,-42,37}, -{82,-42,38}, -{82,-42,39}, -{82,-42,40}, -{82,-42,41}, -{82,-42,42}, -{82,-42,43}, -{82,-42,44}, -{82,-42,45}, -{82,-42,46}, -{82,-42,47}, -{82,-42,48}, -{82,-42,49}, -{82,-42,50}, -{82,-42,51}, -{82,-42,52}, -{82,-42,53}, -{82,-42,54}, -{82,-42,55}, -{82,-42,56}, -{82,-42,57}, -{82,-42,58}, -{82,-42,59}, -{82,-42,60}, -{82,-42,61}, -{82,-42,62}, -{82,-42,63}, -{82,-42,64}, -{82,-42,65}, -{82,-42,66}, -{82,-42,67}, -{82,-42,68}, -{82,-42,69}, -{82,-42,70}, -{82,-42,71}, -{82,-42,72}, -{82,-42,73}, -{82,-42,74}, -{82,-42,75}, -{82,-42,76}, -{82,-42,77}, -{82,-42,78}, -{82,-42,79}, -{82,-42,80}, -{82,-41,-17}, -{82,-41,-16}, -{82,-41,-15}, -{82,-41,-14}, -{82,-41,-13}, -{82,-41,-12}, -{82,-41,-11}, -{82,-41,-10}, -{82,-41,-9}, -{82,-41,-8}, -{82,-41,-7}, -{82,-41,-6}, -{82,-41,-5}, -{82,-41,-4}, -{82,-41,-3}, -{82,-41,-2}, -{82,-41,-1}, -{82,-41,0}, -{82,-41,1}, -{82,-41,2}, -{82,-41,3}, -{82,-41,4}, -{82,-41,5}, -{82,-41,6}, -{82,-41,7}, -{82,-41,8}, -{82,-41,9}, -{82,-41,10}, -{82,-41,11}, -{82,-41,12}, -{82,-41,13}, -{82,-41,14}, -{82,-41,15}, -{82,-41,16}, -{82,-41,17}, -{82,-41,18}, -{82,-41,19}, -{82,-41,20}, -{82,-41,21}, -{82,-41,22}, -{82,-41,23}, -{82,-41,24}, -{82,-41,25}, -{82,-41,26}, -{82,-41,27}, -{82,-41,28}, -{82,-41,29}, -{82,-41,30}, -{82,-41,31}, -{82,-41,32}, -{82,-41,33}, -{82,-41,34}, -{82,-41,35}, -{82,-41,36}, -{82,-41,37}, -{82,-41,38}, -{82,-41,39}, -{82,-41,40}, -{82,-41,41}, -{82,-41,42}, -{82,-41,43}, -{82,-41,44}, -{82,-41,45}, -{82,-41,46}, -{82,-41,47}, -{82,-41,48}, -{82,-41,49}, -{82,-41,50}, -{82,-41,51}, -{82,-41,52}, -{82,-41,53}, -{82,-41,54}, -{82,-41,55}, -{82,-41,56}, -{82,-41,57}, -{82,-41,58}, -{82,-41,59}, -{82,-41,60}, -{82,-41,61}, -{82,-41,62}, -{82,-41,63}, -{82,-41,64}, -{82,-41,65}, -{82,-41,66}, -{82,-41,67}, -{82,-41,68}, -{82,-41,69}, -{82,-41,70}, -{82,-41,71}, -{82,-41,72}, -{82,-41,73}, -{82,-41,74}, -{82,-41,75}, -{82,-41,76}, -{82,-41,77}, -{82,-41,78}, -{82,-41,79}, -{82,-41,80}, -{82,-40,-19}, -{82,-40,-18}, -{82,-40,-17}, -{82,-40,-16}, -{82,-40,-15}, -{82,-40,-14}, -{82,-40,-13}, -{82,-40,-12}, -{82,-40,-11}, -{82,-40,-10}, -{82,-40,-9}, -{82,-40,-8}, -{82,-40,-7}, -{82,-40,-6}, -{82,-40,-5}, -{82,-40,-4}, -{82,-40,-3}, -{82,-40,-2}, -{82,-40,-1}, -{82,-40,0}, -{82,-40,1}, -{82,-40,2}, -{82,-40,3}, -{82,-40,4}, -{82,-40,5}, -{82,-40,6}, -{82,-40,7}, -{82,-40,8}, -{82,-40,9}, -{82,-40,10}, -{82,-40,11}, -{82,-40,12}, -{82,-40,13}, -{82,-40,14}, -{82,-40,15}, -{82,-40,16}, -{82,-40,17}, -{82,-40,18}, -{82,-40,19}, -{82,-40,20}, -{82,-40,21}, -{82,-40,22}, -{82,-40,23}, -{82,-40,24}, -{82,-40,25}, -{82,-40,26}, -{82,-40,27}, -{82,-40,28}, -{82,-40,29}, -{82,-40,30}, -{82,-40,31}, -{82,-40,32}, -{82,-40,33}, -{82,-40,34}, -{82,-40,35}, -{82,-40,36}, -{82,-40,37}, -{82,-40,38}, -{82,-40,39}, -{82,-40,40}, -{82,-40,41}, -{82,-40,42}, -{82,-40,43}, -{82,-40,44}, -{82,-40,45}, -{82,-40,46}, -{82,-40,47}, -{82,-40,48}, -{82,-40,49}, -{82,-40,50}, -{82,-40,51}, -{82,-40,52}, -{82,-40,53}, -{82,-40,54}, -{82,-40,55}, -{82,-40,56}, -{82,-40,57}, -{82,-40,58}, -{82,-40,59}, -{82,-40,60}, -{82,-40,61}, -{82,-40,62}, -{82,-40,63}, -{82,-40,64}, -{82,-40,65}, -{82,-40,66}, -{82,-40,67}, -{82,-40,68}, -{82,-40,69}, -{82,-40,70}, -{82,-40,71}, -{82,-40,72}, -{82,-40,73}, -{82,-40,74}, -{82,-40,75}, -{82,-40,76}, -{82,-40,77}, -{82,-40,78}, -{82,-40,79}, -{82,-40,80}, -{82,-39,-20}, -{82,-39,-19}, -{82,-39,-18}, -{82,-39,-17}, -{82,-39,-16}, -{82,-39,-15}, -{82,-39,-14}, -{82,-39,-13}, -{82,-39,-12}, -{82,-39,-11}, -{82,-39,-10}, -{82,-39,-9}, -{82,-39,-8}, -{82,-39,-7}, -{82,-39,-6}, -{82,-39,-5}, -{82,-39,-4}, -{82,-39,-3}, -{82,-39,-2}, -{82,-39,-1}, -{82,-39,0}, -{82,-39,1}, -{82,-39,2}, -{82,-39,3}, -{82,-39,4}, -{82,-39,5}, -{82,-39,6}, -{82,-39,7}, -{82,-39,8}, -{82,-39,9}, -{82,-39,10}, -{82,-39,11}, -{82,-39,12}, -{82,-39,13}, -{82,-39,14}, -{82,-39,15}, -{82,-39,16}, -{82,-39,17}, -{82,-39,18}, -{82,-39,19}, -{82,-39,20}, -{82,-39,21}, -{82,-39,22}, -{82,-39,23}, -{82,-39,24}, -{82,-39,25}, -{82,-39,26}, -{82,-39,27}, -{82,-39,28}, -{82,-39,29}, -{82,-39,30}, -{82,-39,31}, -{82,-39,32}, -{82,-39,33}, -{82,-39,34}, -{82,-39,35}, -{82,-39,36}, -{82,-39,37}, -{82,-39,38}, -{82,-39,39}, -{82,-39,40}, -{82,-39,41}, -{82,-39,42}, -{82,-39,43}, -{82,-39,44}, -{82,-39,45}, -{82,-39,46}, -{82,-39,47}, -{82,-39,48}, -{82,-39,49}, -{82,-39,50}, -{82,-39,51}, -{82,-39,52}, -{82,-39,53}, -{82,-39,54}, -{82,-39,55}, -{82,-39,56}, -{82,-39,57}, -{82,-39,58}, -{82,-39,59}, -{82,-39,60}, -{82,-39,61}, -{82,-39,62}, -{82,-39,63}, -{82,-39,64}, -{82,-39,65}, -{82,-39,66}, -{82,-39,67}, -{82,-39,68}, -{82,-39,69}, -{82,-39,70}, -{82,-39,71}, -{82,-39,72}, -{82,-39,73}, -{82,-39,74}, -{82,-39,75}, -{82,-39,76}, -{82,-39,77}, -{82,-39,78}, -{82,-39,79}, -{82,-39,80}, -{82,-38,-22}, -{82,-38,-21}, -{82,-38,-20}, -{82,-38,-19}, -{82,-38,-18}, -{82,-38,-17}, -{82,-38,-16}, -{82,-38,-15}, -{82,-38,-14}, -{82,-38,-13}, -{82,-38,-12}, -{82,-38,-11}, -{82,-38,-10}, -{82,-38,-9}, -{82,-38,-8}, -{82,-38,-7}, -{82,-38,-6}, -{82,-38,-5}, -{82,-38,-4}, -{82,-38,-3}, -{82,-38,-2}, -{82,-38,-1}, -{82,-38,0}, -{82,-38,1}, -{82,-38,2}, -{82,-38,3}, -{82,-38,4}, -{82,-38,5}, -{82,-38,6}, -{82,-38,7}, -{82,-38,8}, -{82,-38,9}, -{82,-38,10}, -{82,-38,11}, -{82,-38,12}, -{82,-38,13}, -{82,-38,14}, -{82,-38,15}, -{82,-38,16}, -{82,-38,17}, -{82,-38,18}, -{82,-38,19}, -{82,-38,20}, -{82,-38,21}, -{82,-38,22}, -{82,-38,23}, -{82,-38,24}, -{82,-38,25}, -{82,-38,26}, -{82,-38,27}, -{82,-38,28}, -{82,-38,29}, -{82,-38,30}, -{82,-38,31}, -{82,-38,32}, -{82,-38,33}, -{82,-38,34}, -{82,-38,35}, -{82,-38,36}, -{82,-38,37}, -{82,-38,38}, -{82,-38,39}, -{82,-38,40}, -{82,-38,41}, -{82,-38,42}, -{82,-38,43}, -{82,-38,44}, -{82,-38,45}, -{82,-38,46}, -{82,-38,47}, -{82,-38,48}, -{82,-38,49}, -{82,-38,50}, -{82,-38,51}, -{82,-38,52}, -{82,-38,53}, -{82,-38,54}, -{82,-38,55}, -{82,-38,56}, -{82,-38,57}, -{82,-38,58}, -{82,-38,59}, -{82,-38,60}, -{82,-38,61}, -{82,-38,62}, -{82,-38,63}, -{82,-38,64}, -{82,-38,65}, -{82,-38,66}, -{82,-38,67}, -{82,-38,68}, -{82,-38,69}, -{82,-38,70}, -{82,-38,71}, -{82,-38,72}, -{82,-38,73}, -{82,-38,74}, -{82,-38,75}, -{82,-38,76}, -{82,-38,77}, -{82,-38,78}, -{82,-38,79}, -{82,-38,80}, -{82,-37,-23}, -{82,-37,-22}, -{82,-37,-21}, -{82,-37,-20}, -{82,-37,-19}, -{82,-37,-18}, -{82,-37,-17}, -{82,-37,-16}, -{82,-37,-15}, -{82,-37,-14}, -{82,-37,-13}, -{82,-37,-12}, -{82,-37,-11}, -{82,-37,-10}, -{82,-37,-9}, -{82,-37,-8}, -{82,-37,-7}, -{82,-37,-6}, -{82,-37,-5}, -{82,-37,-4}, -{82,-37,-3}, -{82,-37,-2}, -{82,-37,-1}, -{82,-37,0}, -{82,-37,1}, -{82,-37,2}, -{82,-37,3}, -{82,-37,4}, -{82,-37,5}, -{82,-37,6}, -{82,-37,7}, -{82,-37,8}, -{82,-37,9}, -{82,-37,10}, -{82,-37,11}, -{82,-37,12}, -{82,-37,13}, -{82,-37,14}, -{82,-37,15}, -{82,-37,16}, -{82,-37,17}, -{82,-37,18}, -{82,-37,19}, -{82,-37,20}, -{82,-37,21}, -{82,-37,22}, -{82,-37,23}, -{82,-37,24}, -{82,-37,25}, -{82,-37,26}, -{82,-37,27}, -{82,-37,28}, -{82,-37,29}, -{82,-37,30}, -{82,-37,31}, -{82,-37,32}, -{82,-37,33}, -{82,-37,34}, -{82,-37,35}, -{82,-37,36}, -{82,-37,37}, -{82,-37,38}, -{82,-37,39}, -{82,-37,40}, -{82,-37,41}, -{82,-37,42}, -{82,-37,43}, -{82,-37,44}, -{82,-37,45}, -{82,-37,46}, -{82,-37,47}, -{82,-37,48}, -{82,-37,49}, -{82,-37,50}, -{82,-37,51}, -{82,-37,52}, -{82,-37,53}, -{82,-37,54}, -{82,-37,55}, -{82,-37,56}, -{82,-37,57}, -{82,-37,58}, -{82,-37,59}, -{82,-37,60}, -{82,-37,61}, -{82,-37,62}, -{82,-37,63}, -{82,-37,64}, -{82,-37,65}, -{82,-37,66}, -{82,-37,67}, -{82,-37,68}, -{82,-37,69}, -{82,-37,70}, -{82,-37,71}, -{82,-37,72}, -{82,-37,73}, -{82,-37,74}, -{82,-37,75}, -{82,-37,76}, -{82,-37,77}, -{82,-37,78}, -{82,-37,79}, -{82,-37,80}, -{82,-36,-25}, -{82,-36,-24}, -{82,-36,-23}, -{82,-36,-22}, -{82,-36,-21}, -{82,-36,-20}, -{82,-36,-19}, -{82,-36,-18}, -{82,-36,-17}, -{82,-36,-16}, -{82,-36,-15}, -{82,-36,-14}, -{82,-36,-13}, -{82,-36,-12}, -{82,-36,-11}, -{82,-36,-10}, -{82,-36,-9}, -{82,-36,-8}, -{82,-36,-7}, -{82,-36,-6}, -{82,-36,-5}, -{82,-36,-4}, -{82,-36,-3}, -{82,-36,-2}, -{82,-36,-1}, -{82,-36,0}, -{82,-36,1}, -{82,-36,2}, -{82,-36,3}, -{82,-36,4}, -{82,-36,5}, -{82,-36,6}, -{82,-36,7}, -{82,-36,8}, -{82,-36,9}, -{82,-36,10}, -{82,-36,11}, -{82,-36,12}, -{82,-36,13}, -{82,-36,14}, -{82,-36,15}, -{82,-36,16}, -{82,-36,17}, -{82,-36,18}, -{82,-36,19}, -{82,-36,20}, -{82,-36,21}, -{82,-36,22}, -{82,-36,23}, -{82,-36,24}, -{82,-36,25}, -{82,-36,26}, -{82,-36,27}, -{82,-36,28}, -{82,-36,29}, -{82,-36,30}, -{82,-36,31}, -{82,-36,32}, -{82,-36,33}, -{82,-36,34}, -{82,-36,35}, -{82,-36,36}, -{82,-36,37}, -{82,-36,38}, -{82,-36,39}, -{82,-36,40}, -{82,-36,41}, -{82,-36,42}, -{82,-36,43}, -{82,-36,44}, -{82,-36,45}, -{82,-36,46}, -{82,-36,47}, -{82,-36,48}, -{82,-36,49}, -{82,-36,50}, -{82,-36,51}, -{82,-36,52}, -{82,-36,53}, -{82,-36,54}, -{82,-36,55}, -{82,-36,56}, -{82,-36,57}, -{82,-36,58}, -{82,-36,59}, -{82,-36,60}, -{82,-36,61}, -{82,-36,62}, -{82,-36,63}, -{82,-36,64}, -{82,-36,65}, -{82,-36,66}, -{82,-36,67}, -{82,-36,68}, -{82,-36,69}, -{82,-36,70}, -{82,-36,71}, -{82,-36,72}, -{82,-36,73}, -{82,-36,74}, -{82,-36,75}, -{82,-36,76}, -{82,-36,77}, -{82,-36,78}, -{82,-36,79}, -{82,-36,80}, -{82,-35,-26}, -{82,-35,-25}, -{82,-35,-24}, -{82,-35,-23}, -{82,-35,-22}, -{82,-35,-21}, -{82,-35,-20}, -{82,-35,-19}, -{82,-35,-18}, -{82,-35,-17}, -{82,-35,-16}, -{82,-35,-15}, -{82,-35,-14}, -{82,-35,-13}, -{82,-35,-12}, -{82,-35,-11}, -{82,-35,-10}, -{82,-35,-9}, -{82,-35,-8}, -{82,-35,-7}, -{82,-35,-6}, -{82,-35,-5}, -{82,-35,-4}, -{82,-35,-3}, -{82,-35,-2}, -{82,-35,-1}, -{82,-35,0}, -{82,-35,1}, -{82,-35,2}, -{82,-35,3}, -{82,-35,4}, -{82,-35,5}, -{82,-35,6}, -{82,-35,7}, -{82,-35,8}, -{82,-35,9}, -{82,-35,10}, -{82,-35,11}, -{82,-35,12}, -{82,-35,13}, -{82,-35,14}, -{82,-35,15}, -{82,-35,16}, -{82,-35,17}, -{82,-35,18}, -{82,-35,19}, -{82,-35,20}, -{82,-35,21}, -{82,-35,22}, -{82,-35,23}, -{82,-35,24}, -{82,-35,25}, -{82,-35,26}, -{82,-35,27}, -{82,-35,28}, -{82,-35,29}, -{82,-35,30}, -{82,-35,31}, -{82,-35,32}, -{82,-35,33}, -{82,-35,34}, -{82,-35,35}, -{82,-35,36}, -{82,-35,37}, -{82,-35,38}, -{82,-35,39}, -{82,-35,40}, -{82,-35,41}, -{82,-35,42}, -{82,-35,43}, -{82,-35,44}, -{82,-35,45}, -{82,-35,46}, -{82,-35,47}, -{82,-35,48}, -{82,-35,49}, -{82,-35,50}, -{82,-35,51}, -{82,-35,52}, -{82,-35,53}, -{82,-35,54}, -{82,-35,55}, -{82,-35,56}, -{82,-35,57}, -{82,-35,58}, -{82,-35,59}, -{82,-35,60}, -{82,-35,61}, -{82,-35,62}, -{82,-35,63}, -{82,-35,64}, -{82,-35,65}, -{82,-35,66}, -{82,-35,67}, -{82,-35,68}, -{82,-35,69}, -{82,-35,70}, -{82,-35,71}, -{82,-35,72}, -{82,-35,73}, -{82,-35,74}, -{82,-35,75}, -{82,-35,76}, -{82,-35,77}, -{82,-35,78}, -{82,-35,79}, -{82,-35,80}, -{82,-35,81}, -{82,-34,-28}, -{82,-34,-27}, -{82,-34,-26}, -{82,-34,-25}, -{82,-34,-24}, -{82,-34,-23}, -{82,-34,-22}, -{82,-34,-21}, -{82,-34,-20}, -{82,-34,-19}, -{82,-34,-18}, -{82,-34,-17}, -{82,-34,-16}, -{82,-34,-15}, -{82,-34,-14}, -{82,-34,-13}, -{82,-34,-12}, -{82,-34,-11}, -{82,-34,-10}, -{82,-34,-9}, -{82,-34,-8}, -{82,-34,-7}, -{82,-34,-6}, -{82,-34,-5}, -{82,-34,-4}, -{82,-34,-3}, -{82,-34,-2}, -{82,-34,-1}, -{82,-34,0}, -{82,-34,1}, -{82,-34,2}, -{82,-34,3}, -{82,-34,4}, -{82,-34,5}, -{82,-34,6}, -{82,-34,7}, -{82,-34,8}, -{82,-34,9}, -{82,-34,10}, -{82,-34,11}, -{82,-34,12}, -{82,-34,13}, -{82,-34,14}, -{82,-34,15}, -{82,-34,16}, -{82,-34,17}, -{82,-34,18}, -{82,-34,19}, -{82,-34,20}, -{82,-34,21}, -{82,-34,22}, -{82,-34,23}, -{82,-34,24}, -{82,-34,25}, -{82,-34,26}, -{82,-34,27}, -{82,-34,28}, -{82,-34,29}, -{82,-34,30}, -{82,-34,31}, -{82,-34,32}, -{82,-34,33}, -{82,-34,34}, -{82,-34,35}, -{82,-34,36}, -{82,-34,37}, -{82,-34,38}, -{82,-34,39}, -{82,-34,40}, -{82,-34,41}, -{82,-34,42}, -{82,-34,43}, -{82,-34,44}, -{82,-34,45}, -{82,-34,46}, -{82,-34,47}, -{82,-34,48}, -{82,-34,49}, -{82,-34,50}, -{82,-34,51}, -{82,-34,52}, -{82,-34,53}, -{82,-34,54}, -{82,-34,55}, -{82,-34,56}, -{82,-34,57}, -{82,-34,58}, -{82,-34,59}, -{82,-34,60}, -{82,-34,61}, -{82,-34,62}, -{82,-34,63}, -{82,-34,64}, -{82,-34,65}, -{82,-34,66}, -{82,-34,67}, -{82,-34,68}, -{82,-34,69}, -{82,-34,70}, -{82,-34,71}, -{82,-34,72}, -{82,-34,73}, -{82,-34,74}, -{82,-34,75}, -{82,-34,76}, -{82,-34,77}, -{82,-34,78}, -{82,-34,79}, -{82,-34,80}, -{82,-34,81}, -{82,-33,-28}, -{82,-33,-27}, -{82,-33,-26}, -{82,-33,-25}, -{82,-33,-24}, -{82,-33,-23}, -{82,-33,-22}, -{82,-33,-21}, -{82,-33,-20}, -{82,-33,-19}, -{82,-33,-18}, -{82,-33,-17}, -{82,-33,-16}, -{82,-33,-15}, -{82,-33,-14}, -{82,-33,-13}, -{82,-33,-12}, -{82,-33,-11}, -{82,-33,-10}, -{82,-33,-9}, -{82,-33,-8}, -{82,-33,-7}, -{82,-33,-6}, -{82,-33,-5}, -{82,-33,-4}, -{82,-33,-3}, -{82,-33,-2}, -{82,-33,-1}, -{82,-33,0}, -{82,-33,1}, -{82,-33,2}, -{82,-33,3}, -{82,-33,4}, -{82,-33,5}, -{82,-33,6}, -{82,-33,7}, -{82,-33,8}, -{82,-33,9}, -{82,-33,10}, -{82,-33,11}, -{82,-33,12}, -{82,-33,13}, -{82,-33,14}, -{82,-33,15}, -{82,-33,16}, -{82,-33,17}, -{82,-33,18}, -{82,-33,19}, -{82,-33,20}, -{82,-33,21}, -{82,-33,22}, -{82,-33,23}, -{82,-33,24}, -{82,-33,25}, -{82,-33,26}, -{82,-33,27}, -{82,-33,28}, -{82,-33,29}, -{82,-33,30}, -{82,-33,31}, -{82,-33,32}, -{82,-33,33}, -{82,-33,34}, -{82,-33,35}, -{82,-33,36}, -{82,-33,37}, -{82,-33,38}, -{82,-33,39}, -{82,-33,40}, -{82,-33,41}, -{82,-33,42}, -{82,-33,43}, -{82,-33,44}, -{82,-33,45}, -{82,-33,46}, -{82,-33,47}, -{82,-33,48}, -{82,-33,49}, -{82,-33,50}, -{82,-33,51}, -{82,-33,52}, -{82,-33,53}, -{82,-33,54}, -{82,-33,55}, -{82,-33,56}, -{82,-33,57}, -{82,-33,58}, -{82,-33,59}, -{82,-33,60}, -{82,-33,61}, -{82,-33,62}, -{82,-33,63}, -{82,-33,64}, -{82,-33,65}, -{82,-33,66}, -{82,-33,67}, -{82,-33,68}, -{82,-33,69}, -{82,-33,70}, -{82,-33,71}, -{82,-33,72}, -{82,-33,73}, -{82,-33,74}, -{82,-33,75}, -{82,-33,76}, -{82,-33,77}, -{82,-33,78}, -{82,-33,79}, -{82,-33,80}, -{82,-33,81}, -{82,-32,-28}, -{82,-32,-27}, -{82,-32,-26}, -{82,-32,-25}, -{82,-32,-24}, -{82,-32,-23}, -{82,-32,-22}, -{82,-32,-21}, -{82,-32,-20}, -{82,-32,-19}, -{82,-32,-18}, -{82,-32,-17}, -{82,-32,-16}, -{82,-32,-15}, -{82,-32,-14}, -{82,-32,-13}, -{82,-32,-12}, -{82,-32,-11}, -{82,-32,-10}, -{82,-32,-9}, -{82,-32,-8}, -{82,-32,-7}, -{82,-32,-6}, -{82,-32,-5}, -{82,-32,-4}, -{82,-32,-3}, -{82,-32,-2}, -{82,-32,-1}, -{82,-32,0}, -{82,-32,1}, -{82,-32,2}, -{82,-32,3}, -{82,-32,4}, -{82,-32,5}, -{82,-32,6}, -{82,-32,7}, -{82,-32,8}, -{82,-32,9}, -{82,-32,10}, -{82,-32,11}, -{82,-32,12}, -{82,-32,13}, -{82,-32,14}, -{82,-32,15}, -{82,-32,16}, -{82,-32,17}, -{82,-32,18}, -{82,-32,19}, -{82,-32,20}, -{82,-32,21}, -{82,-32,22}, -{82,-32,23}, -{82,-32,24}, -{82,-32,25}, -{82,-32,26}, -{82,-32,27}, -{82,-32,28}, -{82,-32,29}, -{82,-32,30}, -{82,-32,31}, -{82,-32,32}, -{82,-32,33}, -{82,-32,34}, -{82,-32,35}, -{82,-32,36}, -{82,-32,37}, -{82,-32,38}, -{82,-32,39}, -{82,-32,40}, -{82,-32,41}, -{82,-32,42}, -{82,-32,43}, -{82,-32,44}, -{82,-32,45}, -{82,-32,46}, -{82,-32,47}, -{82,-32,48}, -{82,-32,49}, -{82,-32,50}, -{82,-32,51}, -{82,-32,52}, -{82,-32,53}, -{82,-32,54}, -{82,-32,55}, -{82,-32,56}, -{82,-32,57}, -{82,-32,58}, -{82,-32,59}, -{82,-32,60}, -{82,-32,61}, -{82,-32,62}, -{82,-32,63}, -{82,-32,64}, -{82,-32,65}, -{82,-32,66}, -{82,-32,67}, -{82,-32,68}, -{82,-32,69}, -{82,-32,70}, -{82,-32,71}, -{82,-32,72}, -{82,-32,73}, -{82,-32,74}, -{82,-32,75}, -{82,-32,76}, -{82,-32,77}, -{82,-32,78}, -{82,-32,79}, -{82,-32,80}, -{82,-32,81}, -{82,-31,-28}, -{82,-31,-27}, -{82,-31,-26}, -{82,-31,-25}, -{82,-31,-24}, -{82,-31,-23}, -{82,-31,-22}, -{82,-31,-21}, -{82,-31,-20}, -{82,-31,-19}, -{82,-31,-18}, -{82,-31,-17}, -{82,-31,-16}, -{82,-31,-15}, -{82,-31,-14}, -{82,-31,-13}, -{82,-31,-12}, -{82,-31,-11}, -{82,-31,-10}, -{82,-31,-9}, -{82,-31,-8}, -{82,-31,-7}, -{82,-31,-6}, -{82,-31,-5}, -{82,-31,-4}, -{82,-31,-3}, -{82,-31,-2}, -{82,-31,-1}, -{82,-31,0}, -{82,-31,1}, -{82,-31,2}, -{82,-31,3}, -{82,-31,4}, -{82,-31,5}, -{82,-31,6}, -{82,-31,7}, -{82,-31,8}, -{82,-31,9}, -{82,-31,10}, -{82,-31,11}, -{82,-31,12}, -{82,-31,13}, -{82,-31,14}, -{82,-31,15}, -{82,-31,16}, -{82,-31,17}, -{82,-31,18}, -{82,-31,19}, -{82,-31,20}, -{82,-31,21}, -{82,-31,22}, -{82,-31,23}, -{82,-31,24}, -{82,-31,25}, -{82,-31,26}, -{82,-31,27}, -{82,-31,28}, -{82,-31,29}, -{82,-31,30}, -{82,-31,31}, -{82,-31,32}, -{82,-31,33}, -{82,-31,34}, -{82,-31,35}, -{82,-31,36}, -{82,-31,37}, -{82,-31,38}, -{82,-31,39}, -{82,-31,40}, -{82,-31,41}, -{82,-31,42}, -{82,-31,43}, -{82,-31,44}, -{82,-31,45}, -{82,-31,46}, -{82,-31,47}, -{82,-31,48}, -{82,-31,49}, -{82,-31,50}, -{82,-31,51}, -{82,-31,52}, -{82,-31,53}, -{82,-31,54}, -{82,-31,55}, -{82,-31,56}, -{82,-31,57}, -{82,-31,58}, -{82,-31,59}, -{82,-31,60}, -{82,-31,61}, -{82,-31,62}, -{82,-31,63}, -{82,-31,64}, -{82,-31,65}, -{82,-31,66}, -{82,-31,67}, -{82,-31,68}, -{82,-31,69}, -{82,-31,70}, -{82,-31,71}, -{82,-31,72}, -{82,-31,73}, -{82,-31,74}, -{82,-31,75}, -{82,-31,76}, -{82,-31,77}, -{82,-31,78}, -{82,-31,79}, -{82,-31,80}, -{82,-31,81}, -{82,-30,-28}, -{82,-30,-27}, -{82,-30,-26}, -{82,-30,-25}, -{82,-30,-24}, -{82,-30,-23}, -{82,-30,-22}, -{82,-30,-21}, -{82,-30,-20}, -{82,-30,-19}, -{82,-30,-18}, -{82,-30,-17}, -{82,-30,-16}, -{82,-30,-15}, -{82,-30,-14}, -{82,-30,-13}, -{82,-30,-12}, -{82,-30,-11}, -{82,-30,-10}, -{82,-30,-9}, -{82,-30,-8}, -{82,-30,-7}, -{82,-30,-6}, -{82,-30,-5}, -{82,-30,-4}, -{82,-30,-3}, -{82,-30,-2}, -{82,-30,-1}, -{82,-30,0}, -{82,-30,1}, -{82,-30,2}, -{82,-30,3}, -{82,-30,4}, -{82,-30,5}, -{82,-30,6}, -{82,-30,7}, -{82,-30,8}, -{82,-30,9}, -{82,-30,10}, -{82,-30,11}, -{82,-30,12}, -{82,-30,13}, -{82,-30,14}, -{82,-30,15}, -{82,-30,16}, -{82,-30,17}, -{82,-30,18}, -{82,-30,19}, -{82,-30,20}, -{82,-30,21}, -{82,-30,22}, -{82,-30,23}, -{82,-30,24}, -{82,-30,25}, -{82,-30,26}, -{82,-30,27}, -{82,-30,28}, -{82,-30,29}, -{82,-30,30}, -{82,-30,31}, -{82,-30,32}, -{82,-30,33}, -{82,-30,34}, -{82,-30,35}, -{82,-30,36}, -{82,-30,37}, -{82,-30,38}, -{82,-30,39}, -{82,-30,40}, -{82,-30,41}, -{82,-30,42}, -{82,-30,43}, -{82,-30,44}, -{82,-30,45}, -{82,-30,46}, -{82,-30,47}, -{82,-30,48}, -{82,-30,49}, -{82,-30,50}, -{82,-30,51}, -{82,-30,52}, -{82,-30,53}, -{82,-30,54}, -{82,-30,55}, -{82,-30,56}, -{82,-30,57}, -{82,-30,58}, -{82,-30,59}, -{82,-30,60}, -{82,-30,61}, -{82,-30,62}, -{82,-30,63}, -{82,-30,64}, -{82,-30,65}, -{82,-30,66}, -{82,-30,67}, -{82,-30,68}, -{82,-30,69}, -{82,-30,70}, -{82,-30,71}, -{82,-30,72}, -{82,-30,73}, -{82,-30,74}, -{82,-30,75}, -{82,-30,76}, -{82,-30,77}, -{82,-30,78}, -{82,-30,79}, -{82,-30,80}, -{82,-30,81}, -{82,-29,-28}, -{82,-29,-27}, -{82,-29,-26}, -{82,-29,-25}, -{82,-29,-24}, -{82,-29,-23}, -{82,-29,-22}, -{82,-29,-21}, -{82,-29,-20}, -{82,-29,-19}, -{82,-29,-18}, -{82,-29,-17}, -{82,-29,-16}, -{82,-29,-15}, -{82,-29,-14}, -{82,-29,-13}, -{82,-29,-12}, -{82,-29,-11}, -{82,-29,-10}, -{82,-29,-9}, -{82,-29,-8}, -{82,-29,-7}, -{82,-29,-6}, -{82,-29,-5}, -{82,-29,-4}, -{82,-29,-3}, -{82,-29,-2}, -{82,-29,-1}, -{82,-29,0}, -{82,-29,1}, -{82,-29,2}, -{82,-29,3}, -{82,-29,4}, -{82,-29,5}, -{82,-29,6}, -{82,-29,7}, -{82,-29,8}, -{82,-29,9}, -{82,-29,10}, -{82,-29,11}, -{82,-29,12}, -{82,-29,13}, -{82,-29,14}, -{82,-29,15}, -{82,-29,16}, -{82,-29,17}, -{82,-29,18}, -{82,-29,19}, -{82,-29,20}, -{82,-29,21}, -{82,-29,22}, -{82,-29,23}, -{82,-29,24}, -{82,-29,25}, -{82,-29,26}, -{82,-29,27}, -{82,-29,28}, -{82,-29,29}, -{82,-29,30}, -{82,-29,31}, -{82,-29,32}, -{82,-29,33}, -{82,-29,34}, -{82,-29,35}, -{82,-29,36}, -{82,-29,37}, -{82,-29,38}, -{82,-29,39}, -{82,-29,40}, -{82,-29,41}, -{82,-29,42}, -{82,-29,43}, -{82,-29,44}, -{82,-29,45}, -{82,-29,46}, -{82,-29,47}, -{82,-29,48}, -{82,-29,49}, -{82,-29,50}, -{82,-29,51}, -{82,-29,52}, -{82,-29,53}, -{82,-29,54}, -{82,-29,55}, -{82,-29,56}, -{82,-29,57}, -{82,-29,58}, -{82,-29,59}, -{82,-29,60}, -{82,-29,61}, -{82,-29,62}, -{82,-29,63}, -{82,-29,64}, -{82,-29,65}, -{82,-29,66}, -{82,-29,67}, -{82,-29,68}, -{82,-29,69}, -{82,-29,70}, -{82,-29,71}, -{82,-29,72}, -{82,-29,73}, -{82,-29,74}, -{82,-29,75}, -{82,-29,76}, -{82,-29,77}, -{82,-29,78}, -{82,-29,79}, -{82,-29,80}, -{82,-29,81}, -{82,-28,-27}, -{82,-28,-26}, -{82,-28,-25}, -{82,-28,-24}, -{82,-28,-23}, -{82,-28,-22}, -{82,-28,-21}, -{82,-28,-20}, -{82,-28,-19}, -{82,-28,-18}, -{82,-28,-17}, -{82,-28,-16}, -{82,-28,-15}, -{82,-28,-14}, -{82,-28,-13}, -{82,-28,-12}, -{82,-28,-11}, -{82,-28,-10}, -{82,-28,-9}, -{82,-28,-8}, -{82,-28,-7}, -{82,-28,-6}, -{82,-28,-5}, -{82,-28,-4}, -{82,-28,-3}, -{82,-28,-2}, -{82,-28,-1}, -{82,-28,0}, -{82,-28,1}, -{82,-28,2}, -{82,-28,3}, -{82,-28,4}, -{82,-28,5}, -{82,-28,6}, -{82,-28,7}, -{82,-28,8}, -{82,-28,9}, -{82,-28,10}, -{82,-28,11}, -{82,-28,12}, -{82,-28,13}, -{82,-28,14}, -{82,-28,15}, -{82,-28,16}, -{82,-28,17}, -{82,-28,18}, -{82,-28,19}, -{82,-28,20}, -{82,-28,21}, -{82,-28,22}, -{82,-28,23}, -{82,-28,24}, -{82,-28,25}, -{82,-28,26}, -{82,-28,27}, -{82,-28,28}, -{82,-28,29}, -{82,-28,30}, -{82,-28,31}, -{82,-28,32}, -{82,-28,33}, -{82,-28,34}, -{82,-28,35}, -{82,-28,36}, -{82,-28,37}, -{82,-28,38}, -{82,-28,39}, -{82,-28,40}, -{82,-28,41}, -{82,-28,42}, -{82,-28,43}, -{82,-28,44}, -{82,-28,45}, -{82,-28,46}, -{82,-28,47}, -{82,-28,48}, -{82,-28,49}, -{82,-28,50}, -{82,-28,51}, -{82,-28,52}, -{82,-28,53}, -{82,-28,54}, -{82,-28,55}, -{82,-28,56}, -{82,-28,57}, -{82,-28,58}, -{82,-28,59}, -{82,-28,60}, -{82,-28,61}, -{82,-28,62}, -{82,-28,63}, -{82,-28,64}, -{82,-28,65}, -{82,-28,66}, -{82,-28,67}, -{82,-28,68}, -{82,-28,69}, -{82,-28,70}, -{82,-28,71}, -{82,-28,72}, -{82,-28,73}, -{82,-28,74}, -{82,-28,75}, -{82,-28,76}, -{82,-28,77}, -{82,-28,78}, -{82,-28,79}, -{82,-28,80}, -{82,-28,81}, -{82,-27,-27}, -{82,-27,-26}, -{82,-27,-25}, -{82,-27,-24}, -{82,-27,-23}, -{82,-27,-22}, -{82,-27,-21}, -{82,-27,-20}, -{82,-27,-19}, -{82,-27,-18}, -{82,-27,-17}, -{82,-27,-16}, -{82,-27,-15}, -{82,-27,-14}, -{82,-27,-13}, -{82,-27,-12}, -{82,-27,-11}, -{82,-27,-10}, -{82,-27,-9}, -{82,-27,-8}, -{82,-27,-7}, -{82,-27,-6}, -{82,-27,-5}, -{82,-27,-4}, -{82,-27,-3}, -{82,-27,-2}, -{82,-27,-1}, -{82,-27,0}, -{82,-27,1}, -{82,-27,2}, -{82,-27,3}, -{82,-27,4}, -{82,-27,5}, -{82,-27,6}, -{82,-27,7}, -{82,-27,8}, -{82,-27,9}, -{82,-27,10}, -{82,-27,11}, -{82,-27,12}, -{82,-27,13}, -{82,-27,14}, -{82,-27,15}, -{82,-27,16}, -{82,-27,17}, -{82,-27,18}, -{82,-27,19}, -{82,-27,20}, -{82,-27,21}, -{82,-27,22}, -{82,-27,23}, -{82,-27,24}, -{82,-27,25}, -{82,-27,26}, -{82,-27,27}, -{82,-27,28}, -{82,-27,29}, -{82,-27,30}, -{82,-27,31}, -{82,-27,32}, -{82,-27,33}, -{82,-27,34}, -{82,-27,35}, -{82,-27,36}, -{82,-27,37}, -{82,-27,38}, -{82,-27,39}, -{82,-27,40}, -{82,-27,41}, -{82,-27,42}, -{82,-27,43}, -{82,-27,44}, -{82,-27,45}, -{82,-27,46}, -{82,-27,47}, -{82,-27,48}, -{82,-27,49}, -{82,-27,50}, -{82,-27,51}, -{82,-27,52}, -{82,-27,53}, -{82,-27,54}, -{82,-27,55}, -{82,-27,56}, -{82,-27,57}, -{82,-27,58}, -{82,-27,59}, -{82,-27,60}, -{82,-27,61}, -{82,-27,62}, -{82,-27,63}, -{82,-27,64}, -{82,-27,65}, -{82,-27,66}, -{82,-27,67}, -{82,-27,68}, -{82,-27,69}, -{82,-27,70}, -{82,-27,71}, -{82,-27,72}, -{82,-27,73}, -{82,-27,74}, -{82,-27,75}, -{82,-27,76}, -{82,-27,77}, -{82,-27,78}, -{82,-27,79}, -{82,-27,80}, -{82,-27,81}, -{82,-26,-27}, -{82,-26,-26}, -{82,-26,-25}, -{82,-26,-24}, -{82,-26,-23}, -{82,-26,-22}, -{82,-26,-21}, -{82,-26,-20}, -{82,-26,-19}, -{82,-26,-18}, -{82,-26,-17}, -{82,-26,-16}, -{82,-26,-15}, -{82,-26,-14}, -{82,-26,-13}, -{82,-26,-12}, -{82,-26,-11}, -{82,-26,-10}, -{82,-26,-9}, -{82,-26,-8}, -{82,-26,-7}, -{82,-26,-6}, -{82,-26,-5}, -{82,-26,-4}, -{82,-26,-3}, -{82,-26,-2}, -{82,-26,-1}, -{82,-26,0}, -{82,-26,1}, -{82,-26,2}, -{82,-26,3}, -{82,-26,4}, -{82,-26,5}, -{82,-26,6}, -{82,-26,7}, -{82,-26,8}, -{82,-26,9}, -{82,-26,10}, -{82,-26,11}, -{82,-26,12}, -{82,-26,13}, -{82,-26,14}, -{82,-26,15}, -{82,-26,16}, -{82,-26,17}, -{82,-26,18}, -{82,-26,19}, -{82,-26,20}, -{82,-26,21}, -{82,-26,22}, -{82,-26,23}, -{82,-26,24}, -{82,-26,25}, -{82,-26,26}, -{82,-26,27}, -{82,-26,28}, -{82,-26,29}, -{82,-26,30}, -{82,-26,31}, -{82,-26,32}, -{82,-26,33}, -{82,-26,34}, -{82,-26,35}, -{82,-26,36}, -{82,-26,37}, -{82,-26,38}, -{82,-26,39}, -{82,-26,40}, -{82,-26,41}, -{82,-26,42}, -{82,-26,43}, -{82,-26,44}, -{82,-26,45}, -{82,-26,46}, -{82,-26,47}, -{82,-26,48}, -{82,-26,49}, -{82,-26,50}, -{82,-26,51}, -{82,-26,52}, -{82,-26,53}, -{82,-26,54}, -{82,-26,55}, -{82,-26,56}, -{82,-26,57}, -{82,-26,58}, -{82,-26,59}, -{82,-26,60}, -{82,-26,61}, -{82,-26,62}, -{82,-26,63}, -{82,-26,64}, -{82,-26,65}, -{82,-26,66}, -{82,-26,67}, -{82,-26,68}, -{82,-26,69}, -{82,-26,70}, -{82,-26,71}, -{82,-26,72}, -{82,-26,73}, -{82,-26,74}, -{82,-26,75}, -{82,-26,76}, -{82,-26,77}, -{82,-26,78}, -{82,-26,79}, -{82,-26,80}, -{82,-26,81}, -{82,-25,-27}, -{82,-25,-26}, -{82,-25,-25}, -{82,-25,-24}, -{82,-25,-23}, -{82,-25,-22}, -{82,-25,-21}, -{82,-25,-20}, -{82,-25,-19}, -{82,-25,-18}, -{82,-25,-17}, -{82,-25,-16}, -{82,-25,-15}, -{82,-25,-14}, -{82,-25,-13}, -{82,-25,-12}, -{82,-25,-11}, -{82,-25,-10}, -{82,-25,-9}, -{82,-25,-8}, -{82,-25,-7}, -{82,-25,-6}, -{82,-25,-5}, -{82,-25,-4}, -{82,-25,-3}, -{82,-25,-2}, -{82,-25,-1}, -{82,-25,0}, -{82,-25,1}, -{82,-25,2}, -{82,-25,3}, -{82,-25,4}, -{82,-25,5}, -{82,-25,6}, -{82,-25,7}, -{82,-25,8}, -{82,-25,9}, -{82,-25,10}, -{82,-25,11}, -{82,-25,12}, -{82,-25,13}, -{82,-25,14}, -{82,-25,15}, -{82,-25,16}, -{82,-25,17}, -{82,-25,18}, -{82,-25,19}, -{82,-25,20}, -{82,-25,21}, -{82,-25,22}, -{82,-25,23}, -{82,-25,24}, -{82,-25,25}, -{82,-25,26}, -{82,-25,27}, -{82,-25,28}, -{82,-25,29}, -{82,-25,30}, -{82,-25,31}, -{82,-25,32}, -{82,-25,33}, -{82,-25,34}, -{82,-25,35}, -{82,-25,36}, -{82,-25,37}, -{82,-25,38}, -{82,-25,39}, -{82,-25,40}, -{82,-25,41}, -{82,-25,42}, -{82,-25,43}, -{82,-25,44}, -{82,-25,45}, -{82,-25,46}, -{82,-25,47}, -{82,-25,48}, -{82,-25,49}, -{82,-25,50}, -{82,-25,51}, -{82,-25,52}, -{82,-25,53}, -{82,-25,54}, -{82,-25,55}, -{82,-25,56}, -{82,-25,57}, -{82,-25,58}, -{82,-25,59}, -{82,-25,60}, -{82,-25,61}, -{82,-25,62}, -{82,-25,63}, -{82,-25,64}, -{82,-25,65}, -{82,-25,66}, -{82,-25,67}, -{82,-25,68}, -{82,-25,69}, -{82,-25,70}, -{82,-25,71}, -{82,-25,72}, -{82,-25,73}, -{82,-25,74}, -{82,-25,75}, -{82,-25,76}, -{82,-25,77}, -{82,-25,78}, -{82,-25,79}, -{82,-25,80}, -{82,-25,81}, -{82,-24,-27}, -{82,-24,-26}, -{82,-24,-25}, -{82,-24,-24}, -{82,-24,-23}, -{82,-24,-22}, -{82,-24,-21}, -{82,-24,-20}, -{82,-24,-19}, -{82,-24,-18}, -{82,-24,-17}, -{82,-24,-16}, -{82,-24,-15}, -{82,-24,-14}, -{82,-24,-13}, -{82,-24,-12}, -{82,-24,-11}, -{82,-24,-10}, -{82,-24,-9}, -{82,-24,-8}, -{82,-24,-7}, -{82,-24,-6}, -{82,-24,-5}, -{82,-24,-4}, -{82,-24,-3}, -{82,-24,-2}, -{82,-24,-1}, -{82,-24,0}, -{82,-24,1}, -{82,-24,2}, -{82,-24,3}, -{82,-24,4}, -{82,-24,5}, -{82,-24,6}, -{82,-24,7}, -{82,-24,8}, -{82,-24,9}, -{82,-24,10}, -{82,-24,11}, -{82,-24,12}, -{82,-24,13}, -{82,-24,14}, -{82,-24,15}, -{82,-24,16}, -{82,-24,17}, -{82,-24,18}, -{82,-24,19}, -{82,-24,20}, -{82,-24,21}, -{82,-24,22}, -{82,-24,23}, -{82,-24,24}, -{82,-24,25}, -{82,-24,26}, -{82,-24,27}, -{82,-24,28}, -{82,-24,29}, -{82,-24,30}, -{82,-24,31}, -{82,-24,32}, -{82,-24,33}, -{82,-24,34}, -{82,-24,35}, -{82,-24,36}, -{82,-24,37}, -{82,-24,38}, -{82,-24,39}, -{82,-24,40}, -{82,-24,41}, -{82,-24,42}, -{82,-24,43}, -{82,-24,44}, -{82,-24,45}, -{82,-24,46}, -{82,-24,47}, -{82,-24,48}, -{82,-24,49}, -{82,-24,50}, -{82,-24,51}, -{82,-24,52}, -{82,-24,53}, -{82,-24,54}, -{82,-24,55}, -{82,-24,56}, -{82,-24,57}, -{82,-24,58}, -{82,-24,59}, -{82,-24,60}, -{82,-24,61}, -{82,-24,62}, -{82,-24,63}, -{82,-24,64}, -{82,-24,65}, -{82,-24,66}, -{82,-24,67}, -{82,-24,68}, -{82,-24,69}, -{82,-24,70}, -{82,-24,71}, -{82,-24,72}, -{82,-24,73}, -{82,-24,74}, -{82,-24,75}, -{82,-24,76}, -{82,-24,77}, -{82,-24,78}, -{82,-24,79}, -{82,-24,80}, -{82,-24,81}, -{82,-23,-27}, -{82,-23,-26}, -{82,-23,-25}, -{82,-23,-24}, -{82,-23,-23}, -{82,-23,-22}, -{82,-23,-21}, -{82,-23,-20}, -{82,-23,-19}, -{82,-23,-18}, -{82,-23,-17}, -{82,-23,-16}, -{82,-23,-15}, -{82,-23,-14}, -{82,-23,-13}, -{82,-23,-12}, -{82,-23,-11}, -{82,-23,-10}, -{82,-23,-9}, -{82,-23,-8}, -{82,-23,-7}, -{82,-23,-6}, -{82,-23,-5}, -{82,-23,-4}, -{82,-23,-3}, -{82,-23,-2}, -{82,-23,-1}, -{82,-23,0}, -{82,-23,1}, -{82,-23,2}, -{82,-23,3}, -{82,-23,4}, -{82,-23,5}, -{82,-23,6}, -{82,-23,7}, -{82,-23,8}, -{82,-23,9}, -{82,-23,10}, -{82,-23,11}, -{82,-23,12}, -{82,-23,13}, -{82,-23,14}, -{82,-23,15}, -{82,-23,16}, -{82,-23,17}, -{82,-23,18}, -{82,-23,19}, -{82,-23,20}, -{82,-23,21}, -{82,-23,22}, -{82,-23,23}, -{82,-23,24}, -{82,-23,25}, -{82,-23,26}, -{82,-23,27}, -{82,-23,28}, -{82,-23,29}, -{82,-23,30}, -{82,-23,31}, -{82,-23,32}, -{82,-23,33}, -{82,-23,34}, -{82,-23,35}, -{82,-23,36}, -{82,-23,37}, -{82,-23,38}, -{82,-23,39}, -{82,-23,40}, -{82,-23,41}, -{82,-23,42}, -{82,-23,43}, -{82,-23,44}, -{82,-23,45}, -{82,-23,46}, -{82,-23,47}, -{82,-23,48}, -{82,-23,49}, -{82,-23,50}, -{82,-23,51}, -{82,-23,52}, -{82,-23,53}, -{82,-23,54}, -{82,-23,55}, -{82,-23,56}, -{82,-23,57}, -{82,-23,58}, -{82,-23,59}, -{82,-23,60}, -{82,-23,61}, -{82,-23,62}, -{82,-23,63}, -{82,-23,64}, -{82,-23,65}, -{82,-23,66}, -{82,-23,67}, -{82,-23,68}, -{82,-23,69}, -{82,-23,70}, -{82,-23,71}, -{82,-23,72}, -{82,-23,73}, -{82,-23,74}, -{82,-23,75}, -{82,-23,76}, -{82,-23,77}, -{82,-23,78}, -{82,-23,79}, -{82,-23,80}, -{82,-23,81}, -{82,-22,-27}, -{82,-22,-26}, -{82,-22,-25}, -{82,-22,-24}, -{82,-22,-23}, -{82,-22,-22}, -{82,-22,-21}, -{82,-22,-20}, -{82,-22,-19}, -{82,-22,-18}, -{82,-22,-17}, -{82,-22,-16}, -{82,-22,-15}, -{82,-22,-14}, -{82,-22,-13}, -{82,-22,-12}, -{82,-22,-11}, -{82,-22,-10}, -{82,-22,-9}, -{82,-22,-8}, -{82,-22,-7}, -{82,-22,-6}, -{82,-22,-5}, -{82,-22,-4}, -{82,-22,-3}, -{82,-22,-2}, -{82,-22,-1}, -{82,-22,0}, -{82,-22,1}, -{82,-22,2}, -{82,-22,3}, -{82,-22,4}, -{82,-22,5}, -{82,-22,6}, -{82,-22,7}, -{82,-22,8}, -{82,-22,9}, -{82,-22,10}, -{82,-22,11}, -{82,-22,12}, -{82,-22,13}, -{82,-22,14}, -{82,-22,15}, -{82,-22,16}, -{82,-22,17}, -{82,-22,18}, -{82,-22,19}, -{82,-22,20}, -{82,-22,21}, -{82,-22,22}, -{82,-22,23}, -{82,-22,24}, -{82,-22,25}, -{82,-22,26}, -{82,-22,27}, -{82,-22,28}, -{82,-22,29}, -{82,-22,30}, -{82,-22,31}, -{82,-22,32}, -{82,-22,33}, -{82,-22,34}, -{82,-22,35}, -{82,-22,36}, -{82,-22,37}, -{82,-22,38}, -{82,-22,39}, -{82,-22,40}, -{82,-22,41}, -{82,-22,42}, -{82,-22,43}, -{82,-22,44}, -{82,-22,45}, -{82,-22,46}, -{82,-22,47}, -{82,-22,48}, -{82,-22,49}, -{82,-22,50}, -{82,-22,51}, -{82,-22,52}, -{82,-22,53}, -{82,-22,54}, -{82,-22,55}, -{82,-22,56}, -{82,-22,57}, -{82,-22,58}, -{82,-22,59}, -{82,-22,60}, -{82,-22,61}, -{82,-22,62}, -{82,-22,63}, -{82,-22,64}, -{82,-22,65}, -{82,-22,66}, -{82,-22,67}, -{82,-22,68}, -{82,-22,69}, -{82,-22,70}, -{82,-22,71}, -{82,-22,72}, -{82,-22,73}, -{82,-22,74}, -{82,-22,75}, -{82,-22,76}, -{82,-22,77}, -{82,-22,78}, -{82,-22,79}, -{82,-22,80}, -{82,-22,81}, -{82,-21,-27}, -{82,-21,-26}, -{82,-21,-25}, -{82,-21,-24}, -{82,-21,-23}, -{82,-21,-22}, -{82,-21,-21}, -{82,-21,-20}, -{82,-21,-19}, -{82,-21,-18}, -{82,-21,-17}, -{82,-21,-16}, -{82,-21,-15}, -{82,-21,-14}, -{82,-21,-13}, -{82,-21,-12}, -{82,-21,-11}, -{82,-21,-10}, -{82,-21,-9}, -{82,-21,-8}, -{82,-21,-7}, -{82,-21,-6}, -{82,-21,-5}, -{82,-21,-4}, -{82,-21,-3}, -{82,-21,-2}, -{82,-21,-1}, -{82,-21,0}, -{82,-21,1}, -{82,-21,2}, -{82,-21,3}, -{82,-21,4}, -{82,-21,5}, -{82,-21,6}, -{82,-21,7}, -{82,-21,8}, -{82,-21,9}, -{82,-21,10}, -{82,-21,11}, -{82,-21,12}, -{82,-21,13}, -{82,-21,14}, -{82,-21,15}, -{82,-21,16}, -{82,-21,17}, -{82,-21,18}, -{82,-21,19}, -{82,-21,20}, -{82,-21,21}, -{82,-21,22}, -{82,-21,23}, -{82,-21,24}, -{82,-21,25}, -{82,-21,26}, -{82,-21,27}, -{82,-21,28}, -{82,-21,29}, -{82,-21,30}, -{82,-21,31}, -{82,-21,32}, -{82,-21,33}, -{82,-21,34}, -{82,-21,35}, -{82,-21,36}, -{82,-21,37}, -{82,-21,38}, -{82,-21,39}, -{82,-21,40}, -{82,-21,41}, -{82,-21,42}, -{82,-21,43}, -{82,-21,44}, -{82,-21,45}, -{82,-21,46}, -{82,-21,47}, -{82,-21,48}, -{82,-21,49}, -{82,-21,50}, -{82,-21,51}, -{82,-21,52}, -{82,-21,53}, -{82,-21,54}, -{82,-21,55}, -{82,-21,56}, -{82,-21,57}, -{82,-21,58}, -{82,-21,59}, -{82,-21,60}, -{82,-21,61}, -{82,-21,62}, -{82,-21,63}, -{82,-21,64}, -{82,-21,65}, -{82,-21,66}, -{82,-21,67}, -{82,-21,68}, -{82,-21,69}, -{82,-21,70}, -{82,-21,71}, -{82,-21,72}, -{82,-21,73}, -{82,-21,74}, -{82,-21,75}, -{82,-21,76}, -{82,-21,77}, -{82,-21,78}, -{82,-21,79}, -{82,-21,80}, -{82,-21,81}, -{82,-20,-27}, -{82,-20,-26}, -{82,-20,-25}, -{82,-20,-24}, -{82,-20,-23}, -{82,-20,-22}, -{82,-20,-21}, -{82,-20,-20}, -{82,-20,-19}, -{82,-20,-18}, -{82,-20,-17}, -{82,-20,-16}, -{82,-20,-15}, -{82,-20,-14}, -{82,-20,-13}, -{82,-20,-12}, -{82,-20,-11}, -{82,-20,-10}, -{82,-20,-9}, -{82,-20,-8}, -{82,-20,-7}, -{82,-20,-6}, -{82,-20,-5}, -{82,-20,-4}, -{82,-20,-3}, -{82,-20,-2}, -{82,-20,-1}, -{82,-20,0}, -{82,-20,1}, -{82,-20,2}, -{82,-20,3}, -{82,-20,4}, -{82,-20,5}, -{82,-20,6}, -{82,-20,7}, -{82,-20,8}, -{82,-20,9}, -{82,-20,10}, -{82,-20,11}, -{82,-20,12}, -{82,-20,13}, -{82,-20,14}, -{82,-20,15}, -{82,-20,16}, -{82,-20,17}, -{82,-20,18}, -{82,-20,19}, -{82,-20,20}, -{82,-20,21}, -{82,-20,22}, -{82,-20,23}, -{82,-20,24}, -{82,-20,25}, -{82,-20,26}, -{82,-20,27}, -{82,-20,28}, -{82,-20,29}, -{82,-20,30}, -{82,-20,31}, -{82,-20,32}, -{82,-20,33}, -{82,-20,34}, -{82,-20,35}, -{82,-20,36}, -{82,-20,37}, -{82,-20,38}, -{82,-20,39}, -{82,-20,40}, -{82,-20,41}, -{82,-20,42}, -{82,-20,43}, -{82,-20,44}, -{82,-20,45}, -{82,-20,46}, -{82,-20,47}, -{82,-20,48}, -{82,-20,49}, -{82,-20,50}, -{82,-20,51}, -{82,-20,52}, -{82,-20,53}, -{82,-20,54}, -{82,-20,55}, -{82,-20,56}, -{82,-20,57}, -{82,-20,58}, -{82,-20,59}, -{82,-20,60}, -{82,-20,61}, -{82,-20,62}, -{82,-20,63}, -{82,-20,64}, -{82,-20,65}, -{82,-20,66}, -{82,-20,67}, -{82,-20,68}, -{82,-20,69}, -{82,-20,70}, -{82,-20,71}, -{82,-20,72}, -{82,-20,73}, -{82,-20,74}, -{82,-20,75}, -{82,-20,76}, -{82,-20,77}, -{82,-20,78}, -{82,-20,79}, -{82,-20,80}, -{82,-20,81}, -{82,-19,-27}, -{82,-19,-26}, -{82,-19,-25}, -{82,-19,-24}, -{82,-19,-23}, -{82,-19,-22}, -{82,-19,-21}, -{82,-19,-20}, -{82,-19,-19}, -{82,-19,-18}, -{82,-19,-17}, -{82,-19,-16}, -{82,-19,-15}, -{82,-19,-14}, -{82,-19,-13}, -{82,-19,-12}, -{82,-19,-11}, -{82,-19,-10}, -{82,-19,-9}, -{82,-19,-8}, -{82,-19,-7}, -{82,-19,-6}, -{82,-19,-5}, -{82,-19,-4}, -{82,-19,-3}, -{82,-19,-2}, -{82,-19,-1}, -{82,-19,0}, -{82,-19,1}, -{82,-19,2}, -{82,-19,3}, -{82,-19,4}, -{82,-19,5}, -{82,-19,6}, -{82,-19,7}, -{82,-19,8}, -{82,-19,9}, -{82,-19,10}, -{82,-19,11}, -{82,-19,12}, -{82,-19,13}, -{82,-19,14}, -{82,-19,15}, -{82,-19,16}, -{82,-19,17}, -{82,-19,18}, -{82,-19,19}, -{82,-19,20}, -{82,-19,21}, -{82,-19,22}, -{82,-19,23}, -{82,-19,24}, -{82,-19,25}, -{82,-19,26}, -{82,-19,27}, -{82,-19,28}, -{82,-19,29}, -{82,-19,30}, -{82,-19,31}, -{82,-19,32}, -{82,-19,33}, -{82,-19,34}, -{82,-19,35}, -{82,-19,36}, -{82,-19,37}, -{82,-19,38}, -{82,-19,39}, -{82,-19,40}, -{82,-19,41}, -{82,-19,42}, -{82,-19,43}, -{82,-19,44}, -{82,-19,45}, -{82,-19,46}, -{82,-19,47}, -{82,-19,48}, -{82,-19,49}, -{82,-19,50}, -{82,-19,51}, -{82,-19,52}, -{82,-19,53}, -{82,-19,54}, -{82,-19,55}, -{82,-19,56}, -{82,-19,57}, -{82,-19,58}, -{82,-19,59}, -{82,-19,60}, -{82,-19,61}, -{82,-19,62}, -{82,-19,63}, -{82,-19,64}, -{82,-19,65}, -{82,-19,66}, -{82,-19,67}, -{82,-19,68}, -{82,-19,69}, -{82,-19,70}, -{82,-19,71}, -{82,-19,72}, -{82,-19,73}, -{82,-19,74}, -{82,-19,75}, -{82,-19,76}, -{82,-19,77}, -{82,-19,78}, -{82,-19,79}, -{82,-19,80}, -{82,-19,81}, -{82,-19,82}, -{82,-18,-27}, -{82,-18,-26}, -{82,-18,-25}, -{82,-18,-24}, -{82,-18,-23}, -{82,-18,-22}, -{82,-18,-21}, -{82,-18,-20}, -{82,-18,-19}, -{82,-18,-18}, -{82,-18,-17}, -{82,-18,-16}, -{82,-18,-15}, -{82,-18,-14}, -{82,-18,-13}, -{82,-18,-12}, -{82,-18,-11}, -{82,-18,-10}, -{82,-18,-9}, -{82,-18,-8}, -{82,-18,-7}, -{82,-18,-6}, -{82,-18,-5}, -{82,-18,-4}, -{82,-18,-3}, -{82,-18,-2}, -{82,-18,-1}, -{82,-18,0}, -{82,-18,1}, -{82,-18,2}, -{82,-18,3}, -{82,-18,4}, -{82,-18,5}, -{82,-18,6}, -{82,-18,7}, -{82,-18,8}, -{82,-18,9}, -{82,-18,10}, -{82,-18,11}, -{82,-18,12}, -{82,-18,13}, -{82,-18,14}, -{82,-18,15}, -{82,-18,16}, -{82,-18,17}, -{82,-18,18}, -{82,-18,19}, -{82,-18,20}, -{82,-18,21}, -{82,-18,22}, -{82,-18,23}, -{82,-18,24}, -{82,-18,25}, -{82,-18,26}, -{82,-18,27}, -{82,-18,28}, -{82,-18,29}, -{82,-18,30}, -{82,-18,31}, -{82,-18,32}, -{82,-18,33}, -{82,-18,34}, -{82,-18,35}, -{82,-18,36}, -{82,-18,37}, -{82,-18,38}, -{82,-18,39}, -{82,-18,40}, -{82,-18,41}, -{82,-18,42}, -{82,-18,43}, -{82,-18,44}, -{82,-18,45}, -{82,-18,46}, -{82,-18,47}, -{82,-18,48}, -{82,-18,49}, -{82,-18,50}, -{82,-18,51}, -{82,-18,52}, -{82,-18,53}, -{82,-18,54}, -{82,-18,55}, -{82,-18,56}, -{82,-18,57}, -{82,-18,58}, -{82,-18,59}, -{82,-18,60}, -{82,-18,61}, -{82,-18,62}, -{82,-18,63}, -{82,-18,64}, -{82,-18,65}, -{82,-18,66}, -{82,-18,67}, -{82,-18,68}, -{82,-18,69}, -{82,-18,70}, -{82,-18,71}, -{82,-18,72}, -{82,-18,73}, -{82,-18,74}, -{82,-18,75}, -{82,-18,76}, -{82,-18,77}, -{82,-18,78}, -{82,-18,79}, -{82,-18,80}, -{82,-18,81}, -{82,-18,82}, -{82,-17,-27}, -{82,-17,-26}, -{82,-17,-25}, -{82,-17,-24}, -{82,-17,-23}, -{82,-17,-22}, -{82,-17,-21}, -{82,-17,-20}, -{82,-17,-19}, -{82,-17,-18}, -{82,-17,-17}, -{82,-17,-16}, -{82,-17,-15}, -{82,-17,-14}, -{82,-17,-13}, -{82,-17,-12}, -{82,-17,-11}, -{82,-17,-10}, -{82,-17,-9}, -{82,-17,-8}, -{82,-17,-7}, -{82,-17,-6}, -{82,-17,-5}, -{82,-17,-4}, -{82,-17,-3}, -{82,-17,-2}, -{82,-17,-1}, -{82,-17,0}, -{82,-17,1}, -{82,-17,2}, -{82,-17,3}, -{82,-17,4}, -{82,-17,5}, -{82,-17,6}, -{82,-17,7}, -{82,-17,8}, -{82,-17,9}, -{82,-17,10}, -{82,-17,11}, -{82,-17,12}, -{82,-17,13}, -{82,-17,14}, -{82,-17,15}, -{82,-17,16}, -{82,-17,17}, -{82,-17,18}, -{82,-17,19}, -{82,-17,20}, -{82,-17,21}, -{82,-17,22}, -{82,-17,23}, -{82,-17,24}, -{82,-17,25}, -{82,-17,26}, -{82,-17,27}, -{82,-17,28}, -{82,-17,29}, -{82,-17,30}, -{82,-17,31}, -{82,-17,32}, -{82,-17,33}, -{82,-17,34}, -{82,-17,35}, -{82,-17,36}, -{82,-17,37}, -{82,-17,38}, -{82,-17,39}, -{82,-17,40}, -{82,-17,41}, -{82,-17,42}, -{82,-17,43}, -{82,-17,44}, -{82,-17,45}, -{82,-17,46}, -{82,-17,47}, -{82,-17,48}, -{82,-17,49}, -{82,-17,50}, -{82,-17,51}, -{82,-17,52}, -{82,-17,53}, -{82,-17,54}, -{82,-17,55}, -{82,-17,56}, -{82,-17,57}, -{82,-17,58}, -{82,-17,59}, -{82,-17,60}, -{82,-17,61}, -{82,-17,62}, -{82,-17,63}, -{82,-17,64}, -{82,-17,65}, -{82,-17,66}, -{82,-17,67}, -{82,-17,68}, -{82,-17,69}, -{82,-17,70}, -{82,-17,71}, -{82,-17,72}, -{82,-17,73}, -{82,-17,74}, -{82,-17,75}, -{82,-17,76}, -{82,-17,77}, -{82,-17,78}, -{82,-17,79}, -{82,-17,80}, -{82,-17,81}, -{82,-17,82}, -{82,-16,-27}, -{82,-16,-26}, -{82,-16,-25}, -{82,-16,-24}, -{82,-16,-23}, -{82,-16,-22}, -{82,-16,-21}, -{82,-16,-20}, -{82,-16,-19}, -{82,-16,-18}, -{82,-16,-17}, -{82,-16,-16}, -{82,-16,-15}, -{82,-16,-14}, -{82,-16,-13}, -{82,-16,-12}, -{82,-16,-11}, -{82,-16,-10}, -{82,-16,-9}, -{82,-16,-8}, -{82,-16,-7}, -{82,-16,-6}, -{82,-16,-5}, -{82,-16,-4}, -{82,-16,-3}, -{82,-16,-2}, -{82,-16,-1}, -{82,-16,0}, -{82,-16,1}, -{82,-16,2}, -{82,-16,3}, -{82,-16,4}, -{82,-16,5}, -{82,-16,6}, -{82,-16,7}, -{82,-16,8}, -{82,-16,9}, -{82,-16,10}, -{82,-16,11}, -{82,-16,12}, -{82,-16,13}, -{82,-16,14}, -{82,-16,15}, -{82,-16,16}, -{82,-16,17}, -{82,-16,18}, -{82,-16,19}, -{82,-16,20}, -{82,-16,21}, -{82,-16,22}, -{82,-16,23}, -{82,-16,24}, -{82,-16,25}, -{82,-16,26}, -{82,-16,27}, -{82,-16,28}, -{82,-16,29}, -{82,-16,30}, -{82,-16,31}, -{82,-16,32}, -{82,-16,33}, -{82,-16,34}, -{82,-16,35}, -{82,-16,36}, -{82,-16,37}, -{82,-16,38}, -{82,-16,39}, -{82,-16,40}, -{82,-16,41}, -{82,-16,42}, -{82,-16,43}, -{82,-16,44}, -{82,-16,45}, -{82,-16,46}, -{82,-16,47}, -{82,-16,48}, -{82,-16,49}, -{82,-16,50}, -{82,-16,51}, -{82,-16,52}, -{82,-16,53}, -{82,-16,54}, -{82,-16,55}, -{82,-16,56}, -{82,-16,57}, -{82,-16,58}, -{82,-16,59}, -{82,-16,60}, -{82,-16,61}, -{82,-16,62}, -{82,-16,63}, -{82,-16,64}, -{82,-16,65}, -{82,-16,66}, -{82,-16,67}, -{82,-16,68}, -{82,-16,69}, -{82,-16,70}, -{82,-16,71}, -{82,-16,72}, -{82,-16,73}, -{82,-16,74}, -{82,-16,75}, -{82,-16,76}, -{82,-16,77}, -{82,-16,78}, -{82,-16,79}, -{82,-16,80}, -{82,-16,81}, -{82,-16,82}, -{82,-15,-27}, -{82,-15,-26}, -{82,-15,-25}, -{82,-15,-24}, -{82,-15,-23}, -{82,-15,-22}, -{82,-15,-21}, -{82,-15,-20}, -{82,-15,-19}, -{82,-15,-18}, -{82,-15,-17}, -{82,-15,-16}, -{82,-15,-15}, -{82,-15,-14}, -{82,-15,-13}, -{82,-15,-12}, -{82,-15,-11}, -{82,-15,-10}, -{82,-15,-9}, -{82,-15,-8}, -{82,-15,-7}, -{82,-15,-6}, -{82,-15,-5}, -{82,-15,-4}, -{82,-15,-3}, -{82,-15,-2}, -{82,-15,-1}, -{82,-15,0}, -{82,-15,1}, -{82,-15,2}, -{82,-15,3}, -{82,-15,4}, -{82,-15,5}, -{82,-15,6}, -{82,-15,7}, -{82,-15,8}, -{82,-15,9}, -{82,-15,10}, -{82,-15,11}, -{82,-15,12}, -{82,-15,13}, -{82,-15,14}, -{82,-15,15}, -{82,-15,16}, -{82,-15,17}, -{82,-15,18}, -{82,-15,19}, -{82,-15,20}, -{82,-15,21}, -{82,-15,22}, -{82,-15,23}, -{82,-15,24}, -{82,-15,25}, -{82,-15,26}, -{82,-15,27}, -{82,-15,28}, -{82,-15,29}, -{82,-15,30}, -{82,-15,31}, -{82,-15,32}, -{82,-15,33}, -{82,-15,34}, -{82,-15,35}, -{82,-15,36}, -{82,-15,37}, -{82,-15,38}, -{82,-15,39}, -{82,-15,40}, -{82,-15,41}, -{82,-15,42}, -{82,-15,43}, -{82,-15,44}, -{82,-15,45}, -{82,-15,46}, -{82,-15,47}, -{82,-15,48}, -{82,-15,49}, -{82,-15,50}, -{82,-15,51}, -{82,-15,52}, -{82,-15,53}, -{82,-15,54}, -{82,-15,55}, -{82,-15,56}, -{82,-15,57}, -{82,-15,58}, -{82,-15,59}, -{82,-15,60}, -{82,-15,61}, -{82,-15,62}, -{82,-15,63}, -{82,-15,64}, -{82,-15,65}, -{82,-15,66}, -{82,-15,67}, -{82,-15,68}, -{82,-15,69}, -{82,-15,70}, -{82,-15,71}, -{82,-15,72}, -{82,-15,73}, -{82,-15,74}, -{82,-15,75}, -{82,-15,76}, -{82,-15,77}, -{82,-15,78}, -{82,-15,79}, -{82,-15,80}, -{82,-15,81}, -{82,-15,82}, -{82,-14,-27}, -{82,-14,-26}, -{82,-14,-25}, -{82,-14,-24}, -{82,-14,-23}, -{82,-14,-22}, -{82,-14,-21}, -{82,-14,-20}, -{82,-14,-19}, -{82,-14,-18}, -{82,-14,-17}, -{82,-14,-16}, -{82,-14,-15}, -{82,-14,-14}, -{82,-14,-13}, -{82,-14,-12}, -{82,-14,-11}, -{82,-14,-10}, -{82,-14,-9}, -{82,-14,-8}, -{82,-14,-7}, -{82,-14,-6}, -{82,-14,-5}, -{82,-14,-4}, -{82,-14,-3}, -{82,-14,-2}, -{82,-14,-1}, -{82,-14,0}, -{82,-14,1}, -{82,-14,2}, -{82,-14,3}, -{82,-14,4}, -{82,-14,5}, -{82,-14,6}, -{82,-14,7}, -{82,-14,8}, -{82,-14,9}, -{82,-14,10}, -{82,-14,11}, -{82,-14,12}, -{82,-14,13}, -{82,-14,14}, -{82,-14,15}, -{82,-14,16}, -{82,-14,17}, -{82,-14,18}, -{82,-14,19}, -{82,-14,20}, -{82,-14,21}, -{82,-14,22}, -{82,-14,23}, -{82,-14,24}, -{82,-14,25}, -{82,-14,26}, -{82,-14,27}, -{82,-14,28}, -{82,-14,29}, -{82,-14,30}, -{82,-14,31}, -{82,-14,32}, -{82,-14,33}, -{82,-14,34}, -{82,-14,35}, -{82,-14,36}, -{82,-14,37}, -{82,-14,38}, -{82,-14,39}, -{82,-14,40}, -{82,-14,41}, -{82,-14,42}, -{82,-14,43}, -{82,-14,44}, -{82,-14,45}, -{82,-14,46}, -{82,-14,47}, -{82,-14,48}, -{82,-14,49}, -{82,-14,50}, -{82,-14,51}, -{82,-14,52}, -{82,-14,53}, -{82,-14,54}, -{82,-14,55}, -{82,-14,56}, -{82,-14,57}, -{82,-14,58}, -{82,-14,59}, -{82,-14,60}, -{82,-14,61}, -{82,-14,62}, -{82,-14,63}, -{82,-14,64}, -{82,-14,65}, -{82,-14,66}, -{82,-14,67}, -{82,-14,68}, -{82,-14,69}, -{82,-14,70}, -{82,-14,71}, -{82,-14,72}, -{82,-14,73}, -{82,-14,74}, -{82,-14,75}, -{82,-14,76}, -{82,-14,77}, -{82,-14,78}, -{82,-14,79}, -{82,-14,80}, -{82,-14,81}, -{82,-14,82}, -{82,-13,-27}, -{82,-13,-26}, -{82,-13,-25}, -{82,-13,-24}, -{82,-13,-23}, -{82,-13,-22}, -{82,-13,-21}, -{82,-13,-20}, -{82,-13,-19}, -{82,-13,-18}, -{82,-13,-17}, -{82,-13,-16}, -{82,-13,-15}, -{82,-13,-14}, -{82,-13,-13}, -{82,-13,-12}, -{82,-13,-11}, -{82,-13,-10}, -{82,-13,-9}, -{82,-13,-8}, -{82,-13,-7}, -{82,-13,-6}, -{82,-13,-5}, -{82,-13,-4}, -{82,-13,-3}, -{82,-13,-2}, -{82,-13,-1}, -{82,-13,0}, -{82,-13,1}, -{82,-13,2}, -{82,-13,3}, -{82,-13,4}, -{82,-13,5}, -{82,-13,6}, -{82,-13,7}, -{82,-13,8}, -{82,-13,9}, -{82,-13,10}, -{82,-13,11}, -{82,-13,12}, -{82,-13,13}, -{82,-13,14}, -{82,-13,15}, -{82,-13,16}, -{82,-13,17}, -{82,-13,18}, -{82,-13,19}, -{82,-13,20}, -{82,-13,21}, -{82,-13,22}, -{82,-13,23}, -{82,-13,24}, -{82,-13,25}, -{82,-13,26}, -{82,-13,27}, -{82,-13,28}, -{82,-13,29}, -{82,-13,30}, -{82,-13,31}, -{82,-13,32}, -{82,-13,33}, -{82,-13,34}, -{82,-13,35}, -{82,-13,36}, -{82,-13,37}, -{82,-13,38}, -{82,-13,39}, -{82,-13,40}, -{82,-13,41}, -{82,-13,42}, -{82,-13,43}, -{82,-13,44}, -{82,-13,45}, -{82,-13,46}, -{82,-13,47}, -{82,-13,48}, -{82,-13,49}, -{82,-13,50}, -{82,-13,51}, -{82,-13,52}, -{82,-13,53}, -{82,-13,54}, -{82,-13,55}, -{82,-13,56}, -{82,-13,57}, -{82,-13,58}, -{82,-13,59}, -{82,-13,60}, -{82,-13,61}, -{82,-13,62}, -{82,-13,63}, -{82,-13,64}, -{82,-13,65}, -{82,-13,66}, -{82,-13,67}, -{82,-13,68}, -{82,-13,69}, -{82,-13,70}, -{82,-13,71}, -{82,-13,72}, -{82,-13,73}, -{82,-13,74}, -{82,-13,75}, -{82,-13,76}, -{82,-13,77}, -{82,-13,78}, -{82,-13,79}, -{82,-13,80}, -{82,-13,81}, -{82,-13,82}, -{82,-12,-27}, -{82,-12,-26}, -{82,-12,-25}, -{82,-12,-24}, -{82,-12,-23}, -{82,-12,-22}, -{82,-12,-21}, -{82,-12,-20}, -{82,-12,-19}, -{82,-12,-18}, -{82,-12,-17}, -{82,-12,-16}, -{82,-12,-15}, -{82,-12,-14}, -{82,-12,-13}, -{82,-12,-12}, -{82,-12,-11}, -{82,-12,-10}, -{82,-12,-9}, -{82,-12,-8}, -{82,-12,-7}, -{82,-12,-6}, -{82,-12,-5}, -{82,-12,-4}, -{82,-12,-3}, -{82,-12,-2}, -{82,-12,-1}, -{82,-12,0}, -{82,-12,1}, -{82,-12,2}, -{82,-12,3}, -{82,-12,4}, -{82,-12,5}, -{82,-12,6}, -{82,-12,7}, -{82,-12,8}, -{82,-12,9}, -{82,-12,10}, -{82,-12,11}, -{82,-12,12}, -{82,-12,13}, -{82,-12,14}, -{82,-12,15}, -{82,-12,16}, -{82,-12,17}, -{82,-12,18}, -{82,-12,19}, -{82,-12,20}, -{82,-12,21}, -{82,-12,22}, -{82,-12,23}, -{82,-12,24}, -{82,-12,25}, -{82,-12,26}, -{82,-12,27}, -{82,-12,28}, -{82,-12,29}, -{82,-12,30}, -{82,-12,31}, -{82,-12,32}, -{82,-12,33}, -{82,-12,34}, -{82,-12,35}, -{82,-12,36}, -{82,-12,37}, -{82,-12,38}, -{82,-12,39}, -{82,-12,40}, -{82,-12,41}, -{82,-12,42}, -{82,-12,43}, -{82,-12,44}, -{82,-12,45}, -{82,-12,46}, -{82,-12,47}, -{82,-12,48}, -{82,-12,49}, -{82,-12,50}, -{82,-12,51}, -{82,-12,52}, -{82,-12,53}, -{82,-12,54}, -{82,-12,55}, -{82,-12,56}, -{82,-12,57}, -{82,-12,58}, -{82,-12,59}, -{82,-12,60}, -{82,-12,61}, -{82,-12,62}, -{82,-12,63}, -{82,-12,64}, -{82,-12,65}, -{82,-12,66}, -{82,-12,67}, -{82,-12,68}, -{82,-12,69}, -{82,-12,70}, -{82,-12,71}, -{82,-12,72}, -{82,-12,73}, -{82,-12,74}, -{82,-12,75}, -{82,-12,76}, -{82,-12,77}, -{82,-12,78}, -{82,-12,79}, -{82,-12,80}, -{82,-12,81}, -{82,-12,82}, -{82,-11,-27}, -{82,-11,-26}, -{82,-11,-25}, -{82,-11,-24}, -{82,-11,-23}, -{82,-11,-22}, -{82,-11,-21}, -{82,-11,-20}, -{82,-11,-19}, -{82,-11,-18}, -{82,-11,-17}, -{82,-11,-16}, -{82,-11,-15}, -{82,-11,-14}, -{82,-11,-13}, -{82,-11,-12}, -{82,-11,-11}, -{82,-11,-10}, -{82,-11,-9}, -{82,-11,-8}, -{82,-11,-7}, -{82,-11,-6}, -{82,-11,-5}, -{82,-11,-4}, -{82,-11,-3}, -{82,-11,-2}, -{82,-11,-1}, -{82,-11,0}, -{82,-11,1}, -{82,-11,2}, -{82,-11,3}, -{82,-11,4}, -{82,-11,5}, -{82,-11,6}, -{82,-11,7}, -{82,-11,8}, -{82,-11,9}, -{82,-11,10}, -{82,-11,11}, -{82,-11,12}, -{82,-11,13}, -{82,-11,14}, -{82,-11,15}, -{82,-11,16}, -{82,-11,17}, -{82,-11,18}, -{82,-11,19}, -{82,-11,20}, -{82,-11,21}, -{82,-11,22}, -{82,-11,23}, -{82,-11,24}, -{82,-11,25}, -{82,-11,26}, -{82,-11,27}, -{82,-11,28}, -{82,-11,29}, -{82,-11,30}, -{82,-11,31}, -{82,-11,32}, -{82,-11,33}, -{82,-11,34}, -{82,-11,35}, -{82,-11,36}, -{82,-11,37}, -{82,-11,38}, -{82,-11,39}, -{82,-11,40}, -{82,-11,41}, -{82,-11,42}, -{82,-11,43}, -{82,-11,44}, -{82,-11,45}, -{82,-11,46}, -{82,-11,47}, -{82,-11,48}, -{82,-11,49}, -{82,-11,50}, -{82,-11,51}, -{82,-11,52}, -{82,-11,53}, -{82,-11,54}, -{82,-11,55}, -{82,-11,56}, -{82,-11,57}, -{82,-11,58}, -{82,-11,59}, -{82,-11,60}, -{82,-11,61}, -{82,-11,62}, -{82,-11,63}, -{82,-11,64}, -{82,-11,65}, -{82,-11,66}, -{82,-11,67}, -{82,-11,68}, -{82,-11,69}, -{82,-11,70}, -{82,-11,71}, -{82,-11,72}, -{82,-11,73}, -{82,-11,74}, -{82,-11,75}, -{82,-11,76}, -{82,-11,77}, -{82,-11,78}, -{82,-11,79}, -{82,-11,80}, -{82,-11,81}, -{82,-11,82}, -{82,-10,-27}, -{82,-10,-26}, -{82,-10,-25}, -{82,-10,-24}, -{82,-10,-23}, -{82,-10,-22}, -{82,-10,-21}, -{82,-10,-20}, -{82,-10,-19}, -{82,-10,-18}, -{82,-10,-17}, -{82,-10,-16}, -{82,-10,-15}, -{82,-10,-14}, -{82,-10,-13}, -{82,-10,-12}, -{82,-10,-11}, -{82,-10,-10}, -{82,-10,-9}, -{82,-10,-8}, -{82,-10,-7}, -{82,-10,-6}, -{82,-10,-5}, -{82,-10,-4}, -{82,-10,-3}, -{82,-10,-2}, -{82,-10,-1}, -{82,-10,0}, -{82,-10,1}, -{82,-10,2}, -{82,-10,3}, -{82,-10,4}, -{82,-10,5}, -{82,-10,6}, -{82,-10,7}, -{82,-10,8}, -{82,-10,9}, -{82,-10,10}, -{82,-10,11}, -{82,-10,12}, -{82,-10,13}, -{82,-10,14}, -{82,-10,15}, -{82,-10,16}, -{82,-10,17}, -{82,-10,18}, -{82,-10,19}, -{82,-10,20}, -{82,-10,21}, -{82,-10,22}, -{82,-10,23}, -{82,-10,24}, -{82,-10,25}, -{82,-10,26}, -{82,-10,27}, -{82,-10,28}, -{82,-10,29}, -{82,-10,30}, -{82,-10,31}, -{82,-10,32}, -{82,-10,33}, -{82,-10,34}, -{82,-10,35}, -{82,-10,36}, -{82,-10,37}, -{82,-10,38}, -{82,-10,39}, -{82,-10,40}, -{82,-10,41}, -{82,-10,42}, -{82,-10,43}, -{82,-10,44}, -{82,-10,45}, -{82,-10,46}, -{82,-10,47}, -{82,-10,48}, -{82,-10,49}, -{82,-10,50}, -{82,-10,51}, -{82,-10,52}, -{82,-10,53}, -{82,-10,54}, -{82,-10,55}, -{82,-10,56}, -{82,-10,57}, -{82,-10,58}, -{82,-10,59}, -{82,-10,60}, -{82,-10,61}, -{82,-10,62}, -{82,-10,63}, -{82,-10,64}, -{82,-10,65}, -{82,-10,66}, -{82,-10,67}, -{82,-10,68}, -{82,-10,69}, -{82,-10,70}, -{82,-10,71}, -{82,-10,72}, -{82,-10,73}, -{82,-10,74}, -{82,-10,75}, -{82,-10,76}, -{82,-10,77}, -{82,-10,78}, -{82,-10,79}, -{82,-10,80}, -{82,-10,81}, -{82,-10,82}, -{82,-9,-27}, -{82,-9,-26}, -{82,-9,-25}, -{82,-9,-24}, -{82,-9,-23}, -{82,-9,-22}, -{82,-9,-21}, -{82,-9,-20}, -{82,-9,-19}, -{82,-9,-18}, -{82,-9,-17}, -{82,-9,-16}, -{82,-9,-15}, -{82,-9,-14}, -{82,-9,-13}, -{82,-9,-12}, -{82,-9,-11}, -{82,-9,-10}, -{82,-9,-9}, -{82,-9,-8}, -{82,-9,-7}, -{82,-9,-6}, -{82,-9,-5}, -{82,-9,-4}, -{82,-9,-3}, -{82,-9,-2}, -{82,-9,-1}, -{82,-9,0}, -{82,-9,1}, -{82,-9,2}, -{82,-9,3}, -{82,-9,4}, -{82,-9,5}, -{82,-9,6}, -{82,-9,7}, -{82,-9,8}, -{82,-9,9}, -{82,-9,10}, -{82,-9,11}, -{82,-9,12}, -{82,-9,13}, -{82,-9,14}, -{82,-9,15}, -{82,-9,16}, -{82,-9,17}, -{82,-9,18}, -{82,-9,19}, -{82,-9,20}, -{82,-9,21}, -{82,-9,22}, -{82,-9,23}, -{82,-9,24}, -{82,-9,25}, -{82,-9,26}, -{82,-9,27}, -{82,-9,28}, -{82,-9,29}, -{82,-9,30}, -{82,-9,31}, -{82,-9,32}, -{82,-9,33}, -{82,-9,34}, -{82,-9,35}, -{82,-9,36}, -{82,-9,37}, -{82,-9,38}, -{82,-9,39}, -{82,-9,40}, -{82,-9,41}, -{82,-9,42}, -{82,-9,43}, -{82,-9,44}, -{82,-9,45}, -{82,-9,46}, -{82,-9,47}, -{82,-9,48}, -{82,-9,49}, -{82,-9,50}, -{82,-9,51}, -{82,-9,52}, -{82,-9,53}, -{82,-9,54}, -{82,-9,55}, -{82,-9,56}, -{82,-9,57}, -{82,-9,58}, -{82,-9,59}, -{82,-9,60}, -{82,-9,61}, -{82,-9,62}, -{82,-9,63}, -{82,-9,64}, -{82,-9,65}, -{82,-9,66}, -{82,-9,67}, -{82,-9,68}, -{82,-9,69}, -{82,-9,70}, -{82,-9,71}, -{82,-9,72}, -{82,-9,73}, -{82,-9,74}, -{82,-9,75}, -{82,-9,76}, -{82,-9,77}, -{82,-9,78}, -{82,-9,79}, -{82,-9,80}, -{82,-9,81}, -{82,-9,82}, -{82,-8,-27}, -{82,-8,-26}, -{82,-8,-25}, -{82,-8,-24}, -{82,-8,-23}, -{82,-8,-22}, -{82,-8,-21}, -{82,-8,-20}, -{82,-8,-19}, -{82,-8,-18}, -{82,-8,-17}, -{82,-8,-16}, -{82,-8,-15}, -{82,-8,-14}, -{82,-8,-13}, -{82,-8,-12}, -{82,-8,-11}, -{82,-8,-10}, -{82,-8,-9}, -{82,-8,-8}, -{82,-8,-7}, -{82,-8,-6}, -{82,-8,-5}, -{82,-8,-4}, -{82,-8,-3}, -{82,-8,-2}, -{82,-8,-1}, -{82,-8,0}, -{82,-8,1}, -{82,-8,2}, -{82,-8,3}, -{82,-8,4}, -{82,-8,5}, -{82,-8,6}, -{82,-8,7}, -{82,-8,8}, -{82,-8,9}, -{82,-8,10}, -{82,-8,11}, -{82,-8,12}, -{82,-8,13}, -{82,-8,14}, -{82,-8,15}, -{82,-8,16}, -{82,-8,17}, -{82,-8,18}, -{82,-8,19}, -{82,-8,20}, -{82,-8,21}, -{82,-8,22}, -{82,-8,23}, -{82,-8,24}, -{82,-8,25}, -{82,-8,26}, -{82,-8,27}, -{82,-8,28}, -{82,-8,29}, -{82,-8,30}, -{82,-8,31}, -{82,-8,32}, -{82,-8,33}, -{82,-8,34}, -{82,-8,35}, -{82,-8,36}, -{82,-8,37}, -{82,-8,38}, -{82,-8,39}, -{82,-8,40}, -{82,-8,41}, -{82,-8,42}, -{82,-8,43}, -{82,-8,44}, -{82,-8,45}, -{82,-8,46}, -{82,-8,47}, -{82,-8,48}, -{82,-8,49}, -{82,-8,50}, -{82,-8,51}, -{82,-8,52}, -{82,-8,53}, -{82,-8,54}, -{82,-8,55}, -{82,-8,56}, -{82,-8,57}, -{82,-8,58}, -{82,-8,59}, -{82,-8,60}, -{82,-8,61}, -{82,-8,62}, -{82,-8,63}, -{82,-8,64}, -{82,-8,65}, -{82,-8,66}, -{82,-8,67}, -{82,-8,68}, -{82,-8,69}, -{82,-8,70}, -{82,-8,71}, -{82,-8,72}, -{82,-8,73}, -{82,-8,74}, -{82,-8,75}, -{82,-8,76}, -{82,-8,77}, -{82,-8,78}, -{82,-8,79}, -{82,-8,80}, -{82,-8,81}, -{82,-8,82}, -{82,-7,-27}, -{82,-7,-26}, -{82,-7,-25}, -{82,-7,-24}, -{82,-7,-23}, -{82,-7,-22}, -{82,-7,-21}, -{82,-7,-20}, -{82,-7,-19}, -{82,-7,-18}, -{82,-7,-17}, -{82,-7,-16}, -{82,-7,-15}, -{82,-7,-14}, -{82,-7,-13}, -{82,-7,-12}, -{82,-7,-11}, -{82,-7,-10}, -{82,-7,-9}, -{82,-7,-8}, -{82,-7,-7}, -{82,-7,-6}, -{82,-7,-5}, -{82,-7,-4}, -{82,-7,-3}, -{82,-7,-2}, -{82,-7,-1}, -{82,-7,0}, -{82,-7,1}, -{82,-7,2}, -{82,-7,3}, -{82,-7,4}, -{82,-7,5}, -{82,-7,6}, -{82,-7,7}, -{82,-7,8}, -{82,-7,9}, -{82,-7,10}, -{82,-7,11}, -{82,-7,12}, -{82,-7,13}, -{82,-7,14}, -{82,-7,15}, -{82,-7,16}, -{82,-7,17}, -{82,-7,18}, -{82,-7,19}, -{82,-7,20}, -{82,-7,21}, -{82,-7,22}, -{82,-7,23}, -{82,-7,24}, -{82,-7,25}, -{82,-7,26}, -{82,-7,27}, -{82,-7,28}, -{82,-7,29}, -{82,-7,30}, -{82,-7,31}, -{82,-7,32}, -{82,-7,33}, -{82,-7,34}, -{82,-7,35}, -{82,-7,36}, -{82,-7,37}, -{82,-7,38}, -{82,-7,39}, -{82,-7,40}, -{82,-7,41}, -{82,-7,42}, -{82,-7,43}, -{82,-7,44}, -{82,-7,45}, -{82,-7,46}, -{82,-7,47}, -{82,-7,48}, -{82,-7,49}, -{82,-7,50}, -{82,-7,51}, -{82,-7,52}, -{82,-7,53}, -{82,-7,54}, -{82,-7,55}, -{82,-7,56}, -{82,-7,57}, -{82,-7,58}, -{82,-7,59}, -{82,-7,60}, -{82,-7,61}, -{82,-7,62}, -{82,-7,63}, -{82,-7,64}, -{82,-7,65}, -{82,-7,66}, -{82,-7,67}, -{82,-7,68}, -{82,-7,69}, -{82,-7,70}, -{82,-7,71}, -{82,-7,72}, -{82,-7,73}, -{82,-7,74}, -{82,-7,75}, -{82,-7,76}, -{82,-7,77}, -{82,-7,78}, -{82,-7,79}, -{82,-7,80}, -{82,-7,81}, -{82,-7,82}, -{82,-6,-27}, -{82,-6,-26}, -{82,-6,-25}, -{82,-6,-24}, -{82,-6,-23}, -{82,-6,-22}, -{82,-6,-21}, -{82,-6,-20}, -{82,-6,-19}, -{82,-6,-18}, -{82,-6,-17}, -{82,-6,-16}, -{82,-6,-15}, -{82,-6,-14}, -{82,-6,-13}, -{82,-6,-12}, -{82,-6,-11}, -{82,-6,-10}, -{82,-6,-9}, -{82,-6,-8}, -{82,-6,-7}, -{82,-6,-6}, -{82,-6,-5}, -{82,-6,-4}, -{82,-6,-3}, -{82,-6,-2}, -{82,-6,-1}, -{82,-6,0}, -{82,-6,1}, -{82,-6,2}, -{82,-6,3}, -{82,-6,4}, -{82,-6,5}, -{82,-6,6}, -{82,-6,7}, -{82,-6,8}, -{82,-6,9}, -{82,-6,10}, -{82,-6,11}, -{82,-6,12}, -{82,-6,13}, -{82,-6,14}, -{82,-6,15}, -{82,-6,16}, -{82,-6,17}, -{82,-6,18}, -{82,-6,19}, -{82,-6,20}, -{82,-6,21}, -{82,-6,22}, -{82,-6,23}, -{82,-6,24}, -{82,-6,25}, -{82,-6,26}, -{82,-6,27}, -{82,-6,28}, -{82,-6,29}, -{82,-6,30}, -{82,-6,31}, -{82,-6,32}, -{82,-6,33}, -{82,-6,34}, -{82,-6,35}, -{82,-6,36}, -{82,-6,37}, -{82,-6,38}, -{82,-6,39}, -{82,-6,40}, -{82,-6,41}, -{82,-6,42}, -{82,-6,43}, -{82,-6,44}, -{82,-6,45}, -{82,-6,46}, -{82,-6,47}, -{82,-6,48}, -{82,-6,49}, -{82,-6,50}, -{82,-6,51}, -{82,-6,52}, -{82,-6,53}, -{82,-6,54}, -{82,-6,55}, -{82,-6,56}, -{82,-6,57}, -{82,-6,58}, -{82,-6,59}, -{82,-6,60}, -{82,-6,61}, -{82,-6,62}, -{82,-6,63}, -{82,-6,64}, -{82,-6,65}, -{82,-6,66}, -{82,-6,67}, -{82,-6,68}, -{82,-6,69}, -{82,-6,70}, -{82,-6,71}, -{82,-6,72}, -{82,-6,73}, -{82,-6,74}, -{82,-6,75}, -{82,-6,76}, -{82,-6,77}, -{82,-6,78}, -{82,-6,79}, -{82,-6,80}, -{82,-6,81}, -{82,-6,82}, -{82,-5,-27}, -{82,-5,-26}, -{82,-5,-25}, -{82,-5,-24}, -{82,-5,-23}, -{82,-5,-22}, -{82,-5,-21}, -{82,-5,-20}, -{82,-5,-19}, -{82,-5,-18}, -{82,-5,-17}, -{82,-5,-16}, -{82,-5,-15}, -{82,-5,-14}, -{82,-5,-13}, -{82,-5,-12}, -{82,-5,-11}, -{82,-5,-10}, -{82,-5,-9}, -{82,-5,-8}, -{82,-5,-7}, -{82,-5,-6}, -{82,-5,-5}, -{82,-5,-4}, -{82,-5,-3}, -{82,-5,-2}, -{82,-5,-1}, -{82,-5,0}, -{82,-5,1}, -{82,-5,2}, -{82,-5,3}, -{82,-5,4}, -{82,-5,5}, -{82,-5,6}, -{82,-5,7}, -{82,-5,8}, -{82,-5,9}, -{82,-5,10}, -{82,-5,11}, -{82,-5,12}, -{82,-5,13}, -{82,-5,14}, -{82,-5,15}, -{82,-5,16}, -{82,-5,17}, -{82,-5,18}, -{82,-5,19}, -{82,-5,20}, -{82,-5,21}, -{82,-5,22}, -{82,-5,23}, -{82,-5,24}, -{82,-5,25}, -{82,-5,26}, -{82,-5,27}, -{82,-5,28}, -{82,-5,29}, -{82,-5,30}, -{82,-5,31}, -{82,-5,32}, -{82,-5,33}, -{82,-5,34}, -{82,-5,35}, -{82,-5,36}, -{82,-5,37}, -{82,-5,38}, -{82,-5,39}, -{82,-5,40}, -{82,-5,41}, -{82,-5,42}, -{82,-5,43}, -{82,-5,44}, -{82,-5,45}, -{82,-5,46}, -{82,-5,47}, -{82,-5,48}, -{82,-5,49}, -{82,-5,50}, -{82,-5,51}, -{82,-5,52}, -{82,-5,53}, -{82,-5,54}, -{82,-5,55}, -{82,-5,56}, -{82,-5,57}, -{82,-5,58}, -{82,-5,59}, -{82,-5,60}, -{82,-5,61}, -{82,-5,62}, -{82,-5,63}, -{82,-5,64}, -{82,-5,65}, -{82,-5,66}, -{82,-5,67}, -{82,-5,68}, -{82,-5,69}, -{82,-5,70}, -{82,-5,71}, -{82,-5,72}, -{82,-5,73}, -{82,-5,74}, -{82,-5,75}, -{82,-5,76}, -{82,-5,77}, -{82,-5,78}, -{82,-5,79}, -{82,-5,80}, -{82,-5,81}, -{82,-5,82}, -{82,-4,-27}, -{82,-4,-26}, -{82,-4,-25}, -{82,-4,-24}, -{82,-4,-23}, -{82,-4,-22}, -{82,-4,-21}, -{82,-4,-20}, -{82,-4,-19}, -{82,-4,-18}, -{82,-4,-17}, -{82,-4,-16}, -{82,-4,-15}, -{82,-4,-14}, -{82,-4,-13}, -{82,-4,-12}, -{82,-4,-11}, -{82,-4,-10}, -{82,-4,-9}, -{82,-4,-8}, -{82,-4,-7}, -{82,-4,-6}, -{82,-4,-5}, -{82,-4,-4}, -{82,-4,-3}, -{82,-4,-2}, -{82,-4,-1}, -{82,-4,0}, -{82,-4,1}, -{82,-4,2}, -{82,-4,3}, -{82,-4,4}, -{82,-4,5}, -{82,-4,6}, -{82,-4,7}, -{82,-4,8}, -{82,-4,9}, -{82,-4,10}, -{82,-4,11}, -{82,-4,12}, -{82,-4,13}, -{82,-4,14}, -{82,-4,15}, -{82,-4,16}, -{82,-4,17}, -{82,-4,18}, -{82,-4,19}, -{82,-4,20}, -{82,-4,21}, -{82,-4,22}, -{82,-4,23}, -{82,-4,24}, -{82,-4,25}, -{82,-4,26}, -{82,-4,27}, -{82,-4,28}, -{82,-4,29}, -{82,-4,30}, -{82,-4,31}, -{82,-4,32}, -{82,-4,33}, -{82,-4,34}, -{82,-4,35}, -{82,-4,36}, -{82,-4,37}, -{82,-4,38}, -{82,-4,39}, -{82,-4,40}, -{82,-4,41}, -{82,-4,42}, -{82,-4,43}, -{82,-4,44}, -{82,-4,45}, -{82,-4,46}, -{82,-4,47}, -{82,-4,48}, -{82,-4,49}, -{82,-4,50}, -{82,-4,51}, -{82,-4,52}, -{82,-4,53}, -{82,-4,54}, -{82,-4,55}, -{82,-4,56}, -{82,-4,57}, -{82,-4,58}, -{82,-4,59}, -{82,-4,60}, -{82,-4,61}, -{82,-4,62}, -{82,-4,63}, -{82,-4,64}, -{82,-4,65}, -{82,-4,66}, -{82,-4,67}, -{82,-4,68}, -{82,-4,69}, -{82,-4,70}, -{82,-4,71}, -{82,-4,72}, -{82,-4,73}, -{82,-4,74}, -{82,-4,75}, -{82,-4,76}, -{82,-4,77}, -{82,-4,78}, -{82,-4,79}, -{82,-4,80}, -{82,-4,81}, -{82,-4,82}, -{82,-4,83}, -{82,-3,-27}, -{82,-3,-26}, -{82,-3,-25}, -{82,-3,-24}, -{82,-3,-23}, -{82,-3,-22}, -{82,-3,-21}, -{82,-3,-20}, -{82,-3,-19}, -{82,-3,-18}, -{82,-3,-17}, -{82,-3,-16}, -{82,-3,-15}, -{82,-3,-14}, -{82,-3,-13}, -{82,-3,-12}, -{82,-3,-11}, -{82,-3,-10}, -{82,-3,-9}, -{82,-3,-8}, -{82,-3,-7}, -{82,-3,-6}, -{82,-3,-5}, -{82,-3,-4}, -{82,-3,-3}, -{82,-3,-2}, -{82,-3,-1}, -{82,-3,0}, -{82,-3,1}, -{82,-3,2}, -{82,-3,3}, -{82,-3,4}, -{82,-3,5}, -{82,-3,6}, -{82,-3,7}, -{82,-3,8}, -{82,-3,9}, -{82,-3,10}, -{82,-3,11}, -{82,-3,12}, -{82,-3,13}, -{82,-3,14}, -{82,-3,15}, -{82,-3,16}, -{82,-3,17}, -{82,-3,18}, -{82,-3,19}, -{82,-3,20}, -{82,-3,21}, -{82,-3,22}, -{82,-3,23}, -{82,-3,24}, -{82,-3,25}, -{82,-3,26}, -{82,-3,27}, -{82,-3,28}, -{82,-3,29}, -{82,-3,30}, -{82,-3,31}, -{82,-3,32}, -{82,-3,33}, -{82,-3,34}, -{82,-3,35}, -{82,-3,36}, -{82,-3,37}, -{82,-3,38}, -{82,-3,39}, -{82,-3,40}, -{82,-3,41}, -{82,-3,42}, -{82,-3,43}, -{82,-3,44}, -{82,-3,45}, -{82,-3,46}, -{82,-3,47}, -{82,-3,48}, -{82,-3,49}, -{82,-3,50}, -{82,-3,51}, -{82,-3,52}, -{82,-3,53}, -{82,-3,54}, -{82,-3,55}, -{82,-3,56}, -{82,-3,57}, -{82,-3,58}, -{82,-3,59}, -{82,-3,60}, -{82,-3,61}, -{82,-3,62}, -{82,-3,63}, -{82,-3,64}, -{82,-3,65}, -{82,-3,66}, -{82,-3,67}, -{82,-3,68}, -{82,-3,69}, -{82,-3,70}, -{82,-3,71}, -{82,-3,72}, -{82,-3,73}, -{82,-3,74}, -{82,-3,75}, -{82,-3,76}, -{82,-3,77}, -{82,-3,78}, -{82,-3,79}, -{82,-3,80}, -{82,-3,81}, -{82,-3,82}, -{82,-3,83}, -{82,-2,-27}, -{82,-2,-26}, -{82,-2,-25}, -{82,-2,-24}, -{82,-2,-23}, -{82,-2,-22}, -{82,-2,-21}, -{82,-2,-20}, -{82,-2,-19}, -{82,-2,-18}, -{82,-2,-17}, -{82,-2,-16}, -{82,-2,-15}, -{82,-2,-14}, -{82,-2,-13}, -{82,-2,-12}, -{82,-2,-11}, -{82,-2,-10}, -{82,-2,-9}, -{82,-2,-8}, -{82,-2,-7}, -{82,-2,-6}, -{82,-2,-5}, -{82,-2,-4}, -{82,-2,-3}, -{82,-2,-2}, -{82,-2,-1}, -{82,-2,0}, -{82,-2,1}, -{82,-2,2}, -{82,-2,3}, -{82,-2,4}, -{82,-2,5}, -{82,-2,6}, -{82,-2,7}, -{82,-2,8}, -{82,-2,9}, -{82,-2,10}, -{82,-2,11}, -{82,-2,12}, -{82,-2,13}, -{82,-2,14}, -{82,-2,15}, -{82,-2,16}, -{82,-2,17}, -{82,-2,18}, -{82,-2,19}, -{82,-2,20}, -{82,-2,21}, -{82,-2,22}, -{82,-2,23}, -{82,-2,24}, -{82,-2,25}, -{82,-2,26}, -{82,-2,27}, -{82,-2,28}, -{82,-2,29}, -{82,-2,30}, -{82,-2,31}, -{82,-2,32}, -{82,-2,33}, -{82,-2,34}, -{82,-2,35}, -{82,-2,36}, -{82,-2,37}, -{82,-2,38}, -{82,-2,39}, -{82,-2,40}, -{82,-2,41}, -{82,-2,42}, -{82,-2,43}, -{82,-2,44}, -{82,-2,45}, -{82,-2,46}, -{82,-2,47}, -{82,-2,48}, -{82,-2,49}, -{82,-2,50}, -{82,-2,51}, -{82,-2,52}, -{82,-2,53}, -{82,-2,54}, -{82,-2,55}, -{82,-2,56}, -{82,-2,57}, -{82,-2,58}, -{82,-2,59}, -{82,-2,60}, -{82,-2,61}, -{82,-2,62}, -{82,-2,63}, -{82,-2,64}, -{82,-2,65}, -{82,-2,66}, -{82,-2,67}, -{82,-2,68}, -{82,-2,69}, -{82,-2,70}, -{82,-2,71}, -{82,-2,72}, -{82,-2,73}, -{82,-2,74}, -{82,-2,75}, -{82,-2,76}, -{82,-2,77}, -{82,-2,78}, -{82,-2,79}, -{82,-2,80}, -{82,-2,81}, -{82,-2,82}, -{82,-2,83}, -{82,-1,-27}, -{82,-1,-26}, -{82,-1,-25}, -{82,-1,-24}, -{82,-1,-23}, -{82,-1,-22}, -{82,-1,-21}, -{82,-1,-20}, -{82,-1,-19}, -{82,-1,-18}, -{82,-1,-17}, -{82,-1,-16}, -{82,-1,-15}, -{82,-1,-14}, -{82,-1,-13}, -{82,-1,-12}, -{82,-1,-11}, -{82,-1,-10}, -{82,-1,-9}, -{82,-1,-8}, -{82,-1,-7}, -{82,-1,-6}, -{82,-1,-5}, -{82,-1,-4}, -{82,-1,-3}, -{82,-1,-2}, -{82,-1,-1}, -{82,-1,0}, -{82,-1,1}, -{82,-1,2}, -{82,-1,3}, -{82,-1,4}, -{82,-1,5}, -{82,-1,6}, -{82,-1,7}, -{82,-1,8}, -{82,-1,9}, -{82,-1,10}, -{82,-1,11}, -{82,-1,12}, -{82,-1,13}, -{82,-1,14}, -{82,-1,15}, -{82,-1,16}, -{82,-1,17}, -{82,-1,18}, -{82,-1,19}, -{82,-1,20}, -{82,-1,21}, -{82,-1,22}, -{82,-1,23}, -{82,-1,24}, -{82,-1,25}, -{82,-1,26}, -{82,-1,27}, -{82,-1,28}, -{82,-1,29}, -{82,-1,30}, -{82,-1,31}, -{82,-1,32}, -{82,-1,33}, -{82,-1,34}, -{82,-1,35}, -{82,-1,36}, -{82,-1,37}, -{82,-1,38}, -{82,-1,39}, -{82,-1,40}, -{82,-1,41}, -{82,-1,42}, -{82,-1,43}, -{82,-1,44}, -{82,-1,45}, -{82,-1,46}, -{82,-1,47}, -{82,-1,48}, -{82,-1,49}, -{82,-1,50}, -{82,-1,51}, -{82,-1,52}, -{82,-1,53}, -{82,-1,54}, -{82,-1,55}, -{82,-1,56}, -{82,-1,57}, -{82,-1,58}, -{82,-1,59}, -{82,-1,60}, -{82,-1,61}, -{82,-1,62}, -{82,-1,63}, -{82,-1,64}, -{82,-1,65}, -{82,-1,66}, -{82,-1,67}, -{82,-1,68}, -{82,-1,69}, -{82,-1,70}, -{82,-1,71}, -{82,-1,72}, -{82,-1,73}, -{82,-1,74}, -{82,-1,75}, -{82,-1,76}, -{82,-1,77}, -{82,-1,78}, -{82,-1,79}, -{82,-1,80}, -{82,-1,81}, -{82,-1,82}, -{82,-1,83}, -{82,0,-27}, -{82,0,-26}, -{82,0,-25}, -{82,0,-24}, -{82,0,-23}, -{82,0,-22}, -{82,0,-21}, -{82,0,-20}, -{82,0,-19}, -{82,0,-18}, -{82,0,-17}, -{82,0,-16}, -{82,0,-15}, -{82,0,-14}, -{82,0,-13}, -{82,0,-12}, -{82,0,-11}, -{82,0,-10}, -{82,0,-9}, -{82,0,-8}, -{82,0,-7}, -{82,0,-6}, -{82,0,-5}, -{82,0,-4}, -{82,0,-3}, -{82,0,-2}, -{82,0,-1}, -{82,0,0}, -{82,0,1}, -{82,0,2}, -{82,0,3}, -{82,0,4}, -{82,0,5}, -{82,0,6}, -{82,0,7}, -{82,0,8}, -{82,0,9}, -{82,0,10}, -{82,0,11}, -{82,0,12}, -{82,0,13}, -{82,0,14}, -{82,0,15}, -{82,0,16}, -{82,0,17}, -{82,0,18}, -{82,0,19}, -{82,0,20}, -{82,0,21}, -{82,0,22}, -{82,0,23}, -{82,0,24}, -{82,0,25}, -{82,0,26}, -{82,0,27}, -{82,0,28}, -{82,0,29}, -{82,0,30}, -{82,0,31}, -{82,0,32}, -{82,0,33}, -{82,0,34}, -{82,0,35}, -{82,0,36}, -{82,0,37}, -{82,0,38}, -{82,0,39}, -{82,0,40}, -{82,0,41}, -{82,0,42}, -{82,0,43}, -{82,0,44}, -{82,0,45}, -{82,0,46}, -{82,0,47}, -{82,0,48}, -{82,0,49}, -{82,0,50}, -{82,0,51}, -{82,0,52}, -{82,0,53}, -{82,0,54}, -{82,0,55}, -{82,0,56}, -{82,0,57}, -{82,0,58}, -{82,0,59}, -{82,0,60}, -{82,0,61}, -{82,0,62}, -{82,0,63}, -{82,0,64}, -{82,0,65}, -{82,0,66}, -{82,0,67}, -{82,0,68}, -{82,0,69}, -{82,0,70}, -{82,0,71}, -{82,0,72}, -{82,0,73}, -{82,0,74}, -{82,0,75}, -{82,0,76}, -{82,0,77}, -{82,0,78}, -{82,0,79}, -{82,0,80}, -{82,0,81}, -{82,0,82}, -{82,0,83}, -{82,1,-27}, -{82,1,-26}, -{82,1,-25}, -{82,1,-24}, -{82,1,-23}, -{82,1,-22}, -{82,1,-21}, -{82,1,-20}, -{82,1,-19}, -{82,1,-18}, -{82,1,-17}, -{82,1,-16}, -{82,1,-15}, -{82,1,-14}, -{82,1,-13}, -{82,1,-12}, -{82,1,-11}, -{82,1,-10}, -{82,1,-9}, -{82,1,-8}, -{82,1,-7}, -{82,1,-6}, -{82,1,-5}, -{82,1,-4}, -{82,1,-3}, -{82,1,-2}, -{82,1,-1}, -{82,1,0}, -{82,1,1}, -{82,1,2}, -{82,1,3}, -{82,1,4}, -{82,1,5}, -{82,1,6}, -{82,1,7}, -{82,1,8}, -{82,1,9}, -{82,1,10}, -{82,1,11}, -{82,1,12}, -{82,1,13}, -{82,1,14}, -{82,1,15}, -{82,1,16}, -{82,1,17}, -{82,1,18}, -{82,1,19}, -{82,1,20}, -{82,1,21}, -{82,1,22}, -{82,1,23}, -{82,1,24}, -{82,1,25}, -{82,1,26}, -{82,1,27}, -{82,1,28}, -{82,1,29}, -{82,1,30}, -{82,1,31}, -{82,1,32}, -{82,1,33}, -{82,1,34}, -{82,1,35}, -{82,1,36}, -{82,1,37}, -{82,1,38}, -{82,1,39}, -{82,1,40}, -{82,1,41}, -{82,1,42}, -{82,1,43}, -{82,1,44}, -{82,1,45}, -{82,1,46}, -{82,1,47}, -{82,1,48}, -{82,1,49}, -{82,1,50}, -{82,1,51}, -{82,1,52}, -{82,1,53}, -{82,1,54}, -{82,1,55}, -{82,1,56}, -{82,1,57}, -{82,1,58}, -{82,1,59}, -{82,1,60}, -{82,1,61}, -{82,1,62}, -{82,1,63}, -{82,1,64}, -{82,1,65}, -{82,1,66}, -{82,1,67}, -{82,1,68}, -{82,1,69}, -{82,1,70}, -{82,1,71}, -{82,1,72}, -{82,1,73}, -{82,1,74}, -{82,1,75}, -{82,1,76}, -{82,1,77}, -{82,1,78}, -{82,1,79}, -{82,1,80}, -{82,1,81}, -{82,1,82}, -{82,1,83}, -{82,2,-27}, -{82,2,-26}, -{82,2,-25}, -{82,2,-24}, -{82,2,-23}, -{82,2,-22}, -{82,2,-21}, -{82,2,-20}, -{82,2,-19}, -{82,2,-18}, -{82,2,-17}, -{82,2,-16}, -{82,2,-15}, -{82,2,-14}, -{82,2,-13}, -{82,2,-12}, -{82,2,-11}, -{82,2,-10}, -{82,2,-9}, -{82,2,-8}, -{82,2,-7}, -{82,2,-6}, -{82,2,-5}, -{82,2,-4}, -{82,2,-3}, -{82,2,-2}, -{82,2,-1}, -{82,2,0}, -{82,2,1}, -{82,2,2}, -{82,2,3}, -{82,2,4}, -{82,2,5}, -{82,2,6}, -{82,2,7}, -{82,2,8}, -{82,2,9}, -{82,2,10}, -{82,2,11}, -{82,2,12}, -{82,2,13}, -{82,2,14}, -{82,2,15}, -{82,2,16}, -{82,2,17}, -{82,2,18}, -{82,2,19}, -{82,2,20}, -{82,2,21}, -{82,2,22}, -{82,2,23}, -{82,2,24}, -{82,2,25}, -{82,2,26}, -{82,2,27}, -{82,2,28}, -{82,2,29}, -{82,2,30}, -{82,2,31}, -{82,2,32}, -{82,2,33}, -{82,2,34}, -{82,2,35}, -{82,2,36}, -{82,2,37}, -{82,2,38}, -{82,2,39}, -{82,2,40}, -{82,2,41}, -{82,2,42}, -{82,2,43}, -{82,2,44}, -{82,2,45}, -{82,2,46}, -{82,2,47}, -{82,2,48}, -{82,2,49}, -{82,2,50}, -{82,2,51}, -{82,2,52}, -{82,2,53}, -{82,2,54}, -{82,2,55}, -{82,2,56}, -{82,2,57}, -{82,2,58}, -{82,2,59}, -{82,2,60}, -{82,2,61}, -{82,2,62}, -{82,2,63}, -{82,2,64}, -{82,2,65}, -{82,2,66}, -{82,2,67}, -{82,2,68}, -{82,2,69}, -{82,2,70}, -{82,2,71}, -{82,2,72}, -{82,2,73}, -{82,2,74}, -{82,2,75}, -{82,2,76}, -{82,2,77}, -{82,2,78}, -{82,2,79}, -{82,2,80}, -{82,2,81}, -{82,2,82}, -{82,2,83}, -{82,3,-27}, -{82,3,-26}, -{82,3,-25}, -{82,3,-24}, -{82,3,-23}, -{82,3,-22}, -{82,3,-21}, -{82,3,-20}, -{82,3,-19}, -{82,3,-18}, -{82,3,-17}, -{82,3,-16}, -{82,3,-15}, -{82,3,-14}, -{82,3,-13}, -{82,3,-12}, -{82,3,-11}, -{82,3,-10}, -{82,3,-9}, -{82,3,-8}, -{82,3,-7}, -{82,3,-6}, -{82,3,-5}, -{82,3,-4}, -{82,3,-3}, -{82,3,-2}, -{82,3,-1}, -{82,3,0}, -{82,3,1}, -{82,3,2}, -{82,3,3}, -{82,3,4}, -{82,3,5}, -{82,3,6}, -{82,3,7}, -{82,3,8}, -{82,3,9}, -{82,3,10}, -{82,3,11}, -{82,3,12}, -{82,3,13}, -{82,3,14}, -{82,3,15}, -{82,3,16}, -{82,3,17}, -{82,3,18}, -{82,3,19}, -{82,3,20}, -{82,3,21}, -{82,3,22}, -{82,3,23}, -{82,3,24}, -{82,3,25}, -{82,3,26}, -{82,3,27}, -{82,3,28}, -{82,3,29}, -{82,3,30}, -{82,3,31}, -{82,3,32}, -{82,3,33}, -{82,3,34}, -{82,3,35}, -{82,3,36}, -{82,3,37}, -{82,3,38}, -{82,3,39}, -{82,3,40}, -{82,3,41}, -{82,3,42}, -{82,3,43}, -{82,3,44}, -{82,3,45}, -{82,3,46}, -{82,3,47}, -{82,3,48}, -{82,3,49}, -{82,3,50}, -{82,3,51}, -{82,3,52}, -{82,3,53}, -{82,3,54}, -{82,3,55}, -{82,3,56}, -{82,3,57}, -{82,3,58}, -{82,3,59}, -{82,3,60}, -{82,3,61}, -{82,3,62}, -{82,3,63}, -{82,3,64}, -{82,3,65}, -{82,3,66}, -{82,3,67}, -{82,3,68}, -{82,3,69}, -{82,3,70}, -{82,3,71}, -{82,3,72}, -{82,3,73}, -{82,3,74}, -{82,3,75}, -{82,3,76}, -{82,3,77}, -{82,3,78}, -{82,3,79}, -{82,3,80}, -{82,3,81}, -{82,3,82}, -{82,3,83}, -{82,4,-27}, -{82,4,-26}, -{82,4,-25}, -{82,4,-24}, -{82,4,-23}, -{82,4,-22}, -{82,4,-21}, -{82,4,-20}, -{82,4,-19}, -{82,4,-18}, -{82,4,-17}, -{82,4,-16}, -{82,4,-15}, -{82,4,-14}, -{82,4,-13}, -{82,4,-12}, -{82,4,-11}, -{82,4,-10}, -{82,4,-9}, -{82,4,-8}, -{82,4,-7}, -{82,4,-6}, -{82,4,-5}, -{82,4,-4}, -{82,4,-3}, -{82,4,-2}, -{82,4,-1}, -{82,4,0}, -{82,4,1}, -{82,4,2}, -{82,4,3}, -{82,4,4}, -{82,4,5}, -{82,4,6}, -{82,4,7}, -{82,4,8}, -{82,4,9}, -{82,4,10}, -{82,4,11}, -{82,4,12}, -{82,4,13}, -{82,4,14}, -{82,4,15}, -{82,4,16}, -{82,4,17}, -{82,4,18}, -{82,4,19}, -{82,4,20}, -{82,4,21}, -{82,4,22}, -{82,4,23}, -{82,4,24}, -{82,4,25}, -{82,4,26}, -{82,4,27}, -{82,4,28}, -{82,4,29}, -{82,4,30}, -{82,4,31}, -{82,4,32}, -{82,4,33}, -{82,4,34}, -{82,4,35}, -{82,4,36}, -{82,4,37}, -{82,4,38}, -{82,4,39}, -{82,4,40}, -{82,4,41}, -{82,4,42}, -{82,4,43}, -{82,4,44}, -{82,4,45}, -{82,4,46}, -{82,4,47}, -{82,4,48}, -{82,4,49}, -{82,4,50}, -{82,4,51}, -{82,4,52}, -{82,4,53}, -{82,4,54}, -{82,4,55}, -{82,4,56}, -{82,4,57}, -{82,4,58}, -{82,4,59}, -{82,4,60}, -{82,4,61}, -{82,4,62}, -{82,4,63}, -{82,4,64}, -{82,4,65}, -{82,4,66}, -{82,4,67}, -{82,4,68}, -{82,4,69}, -{82,4,70}, -{82,4,71}, -{82,4,72}, -{82,4,73}, -{82,4,74}, -{82,4,75}, -{82,4,76}, -{82,4,77}, -{82,4,78}, -{82,4,79}, -{82,4,80}, -{82,4,81}, -{82,4,82}, -{82,4,83}, -{82,5,-27}, -{82,5,-26}, -{82,5,-25}, -{82,5,-24}, -{82,5,-23}, -{82,5,-22}, -{82,5,-21}, -{82,5,-20}, -{82,5,-19}, -{82,5,-18}, -{82,5,-17}, -{82,5,-16}, -{82,5,-15}, -{82,5,-14}, -{82,5,-13}, -{82,5,-12}, -{82,5,-11}, -{82,5,-10}, -{82,5,-9}, -{82,5,-8}, -{82,5,-7}, -{82,5,-6}, -{82,5,-5}, -{82,5,-4}, -{82,5,-3}, -{82,5,-2}, -{82,5,-1}, -{82,5,0}, -{82,5,1}, -{82,5,2}, -{82,5,3}, -{82,5,4}, -{82,5,5}, -{82,5,6}, -{82,5,7}, -{82,5,8}, -{82,5,9}, -{82,5,10}, -{82,5,11}, -{82,5,12}, -{82,5,13}, -{82,5,14}, -{82,5,15}, -{82,5,16}, -{82,5,17}, -{82,5,18}, -{82,5,19}, -{82,5,20}, -{82,5,21}, -{82,5,22}, -{82,5,23}, -{82,5,24}, -{82,5,25}, -{82,5,26}, -{82,5,27}, -{82,5,28}, -{82,5,29}, -{82,5,30}, -{82,5,31}, -{82,5,32}, -{82,5,33}, -{82,5,34}, -{82,5,35}, -{82,5,36}, -{82,5,37}, -{82,5,38}, -{82,5,39}, -{82,5,40}, -{82,5,41}, -{82,5,42}, -{82,5,43}, -{82,5,44}, -{82,5,45}, -{82,5,46}, -{82,5,47}, -{82,5,48}, -{82,5,49}, -{82,5,50}, -{82,5,51}, -{82,5,52}, -{82,5,53}, -{82,5,54}, -{82,5,55}, -{82,5,56}, -{82,5,57}, -{82,5,58}, -{82,5,59}, -{82,5,60}, -{82,5,61}, -{82,5,62}, -{82,5,63}, -{82,5,64}, -{82,5,65}, -{82,5,66}, -{82,5,67}, -{82,5,68}, -{82,5,69}, -{82,5,70}, -{82,5,71}, -{82,5,72}, -{82,5,73}, -{82,5,74}, -{82,5,75}, -{82,5,76}, -{82,5,77}, -{82,5,78}, -{82,5,79}, -{82,5,80}, -{82,5,81}, -{82,5,82}, -{82,5,83}, -{82,6,-27}, -{82,6,-26}, -{82,6,-25}, -{82,6,-24}, -{82,6,-23}, -{82,6,-22}, -{82,6,-21}, -{82,6,-20}, -{82,6,-19}, -{82,6,-18}, -{82,6,-17}, -{82,6,-16}, -{82,6,-15}, -{82,6,-14}, -{82,6,-13}, -{82,6,-12}, -{82,6,-11}, -{82,6,-10}, -{82,6,-9}, -{82,6,-8}, -{82,6,-7}, -{82,6,-6}, -{82,6,-5}, -{82,6,-4}, -{82,6,-3}, -{82,6,-2}, -{82,6,-1}, -{82,6,0}, -{82,6,1}, -{82,6,2}, -{82,6,3}, -{82,6,4}, -{82,6,5}, -{82,6,6}, -{82,6,7}, -{82,6,8}, -{82,6,9}, -{82,6,10}, -{82,6,11}, -{82,6,12}, -{82,6,13}, -{82,6,14}, -{82,6,15}, -{82,6,16}, -{82,6,17}, -{82,6,18}, -{82,6,19}, -{82,6,20}, -{82,6,21}, -{82,6,22}, -{82,6,23}, -{82,6,24}, -{82,6,25}, -{82,6,26}, -{82,6,27}, -{82,6,28}, -{82,6,29}, -{82,6,30}, -{82,6,31}, -{82,6,32}, -{82,6,33}, -{82,6,34}, -{82,6,35}, -{82,6,36}, -{82,6,37}, -{82,6,38}, -{82,6,39}, -{82,6,40}, -{82,6,41}, -{82,6,42}, -{82,6,43}, -{82,6,44}, -{82,6,45}, -{82,6,46}, -{82,6,47}, -{82,6,48}, -{82,6,49}, -{82,6,50}, -{82,6,51}, -{82,6,52}, -{82,6,53}, -{82,6,54}, -{82,6,55}, -{82,6,56}, -{82,6,57}, -{82,6,58}, -{82,6,59}, -{82,6,60}, -{82,6,61}, -{82,6,62}, -{82,6,63}, -{82,6,64}, -{82,6,65}, -{82,6,66}, -{82,6,67}, -{82,6,68}, -{82,6,69}, -{82,6,70}, -{82,6,71}, -{82,6,72}, -{82,6,73}, -{82,6,74}, -{82,6,75}, -{82,6,76}, -{82,6,77}, -{82,6,78}, -{82,6,79}, -{82,6,80}, -{82,6,81}, -{82,6,82}, -{82,6,83}, -{82,7,-27}, -{82,7,-26}, -{82,7,-25}, -{82,7,-24}, -{82,7,-23}, -{82,7,-22}, -{82,7,-21}, -{82,7,-20}, -{82,7,-19}, -{82,7,-18}, -{82,7,-17}, -{82,7,-16}, -{82,7,-15}, -{82,7,-14}, -{82,7,-13}, -{82,7,-12}, -{82,7,-11}, -{82,7,-10}, -{82,7,-9}, -{82,7,-8}, -{82,7,-7}, -{82,7,-6}, -{82,7,-5}, -{82,7,-4}, -{82,7,-3}, -{82,7,-2}, -{82,7,-1}, -{82,7,0}, -{82,7,1}, -{82,7,2}, -{82,7,3}, -{82,7,4}, -{82,7,5}, -{82,7,6}, -{82,7,7}, -{82,7,8}, -{82,7,9}, -{82,7,10}, -{82,7,11}, -{82,7,12}, -{82,7,13}, -{82,7,14}, -{82,7,15}, -{82,7,16}, -{82,7,17}, -{82,7,18}, -{82,7,19}, -{82,7,20}, -{82,7,21}, -{82,7,22}, -{82,7,23}, -{82,7,24}, -{82,7,25}, -{82,7,26}, -{82,7,27}, -{82,7,28}, -{82,7,29}, -{82,7,30}, -{82,7,31}, -{82,7,32}, -{82,7,33}, -{82,7,34}, -{82,7,35}, -{82,7,36}, -{82,7,37}, -{82,7,38}, -{82,7,39}, -{82,7,40}, -{82,7,41}, -{82,7,42}, -{82,7,43}, -{82,7,44}, -{82,7,45}, -{82,7,46}, -{82,7,47}, -{82,7,48}, -{82,7,49}, -{82,7,50}, -{82,7,51}, -{82,7,52}, -{82,7,53}, -{82,7,54}, -{82,7,55}, -{82,7,56}, -{82,7,57}, -{82,7,58}, -{82,7,59}, -{82,7,60}, -{82,7,61}, -{82,7,62}, -{82,7,63}, -{82,7,64}, -{82,7,65}, -{82,7,66}, -{82,7,67}, -{82,7,68}, -{82,7,69}, -{82,7,70}, -{82,7,71}, -{82,7,72}, -{82,7,73}, -{82,7,74}, -{82,7,75}, -{82,7,76}, -{82,7,77}, -{82,7,78}, -{82,7,79}, -{82,7,80}, -{82,7,81}, -{82,7,82}, -{82,7,83}, -{82,8,-27}, -{82,8,-26}, -{82,8,-25}, -{82,8,-24}, -{82,8,-23}, -{82,8,-22}, -{82,8,-21}, -{82,8,-20}, -{82,8,-19}, -{82,8,-18}, -{82,8,-17}, -{82,8,-16}, -{82,8,-15}, -{82,8,-14}, -{82,8,-13}, -{82,8,-12}, -{82,8,-11}, -{82,8,-10}, -{82,8,-9}, -{82,8,-8}, -{82,8,-7}, -{82,8,-6}, -{82,8,-5}, -{82,8,-4}, -{82,8,-3}, -{82,8,-2}, -{82,8,-1}, -{82,8,0}, -{82,8,1}, -{82,8,2}, -{82,8,3}, -{82,8,4}, -{82,8,5}, -{82,8,6}, -{82,8,7}, -{82,8,8}, -{82,8,9}, -{82,8,10}, -{82,8,11}, -{82,8,12}, -{82,8,13}, -{82,8,14}, -{82,8,15}, -{82,8,16}, -{82,8,17}, -{82,8,18}, -{82,8,19}, -{82,8,20}, -{82,8,21}, -{82,8,22}, -{82,8,23}, -{82,8,24}, -{82,8,25}, -{82,8,26}, -{82,8,27}, -{82,8,28}, -{82,8,29}, -{82,8,30}, -{82,8,31}, -{82,8,32}, -{82,8,33}, -{82,8,34}, -{82,8,35}, -{82,8,36}, -{82,8,37}, -{82,8,38}, -{82,8,39}, -{82,8,40}, -{82,8,41}, -{82,8,42}, -{82,8,43}, -{82,8,44}, -{82,8,45}, -{82,8,46}, -{82,8,47}, -{82,8,48}, -{82,8,49}, -{82,8,50}, -{82,8,51}, -{82,8,52}, -{82,8,53}, -{82,8,54}, -{82,8,55}, -{82,8,56}, -{82,8,57}, -{82,8,58}, -{82,8,59}, -{82,8,60}, -{82,8,61}, -{82,8,62}, -{82,8,63}, -{82,8,64}, -{82,8,65}, -{82,8,66}, -{82,8,67}, -{82,8,68}, -{82,8,69}, -{82,8,70}, -{82,8,71}, -{82,8,72}, -{82,8,73}, -{82,8,74}, -{82,8,75}, -{82,8,76}, -{82,8,77}, -{82,8,78}, -{82,8,79}, -{82,8,80}, -{82,8,81}, -{82,8,82}, -{82,8,83}, -{82,9,-27}, -{82,9,-26}, -{82,9,-25}, -{82,9,-24}, -{82,9,-23}, -{82,9,-22}, -{82,9,-21}, -{82,9,-20}, -{82,9,-19}, -{82,9,-18}, -{82,9,-17}, -{82,9,-16}, -{82,9,-15}, -{82,9,-14}, -{82,9,-13}, -{82,9,-12}, -{82,9,-11}, -{82,9,-10}, -{82,9,-9}, -{82,9,-8}, -{82,9,-7}, -{82,9,-6}, -{82,9,-5}, -{82,9,-4}, -{82,9,-3}, -{82,9,-2}, -{82,9,-1}, -{82,9,0}, -{82,9,1}, -{82,9,2}, -{82,9,3}, -{82,9,4}, -{82,9,5}, -{82,9,6}, -{82,9,7}, -{82,9,8}, -{82,9,9}, -{82,9,10}, -{82,9,11}, -{82,9,12}, -{82,9,13}, -{82,9,14}, -{82,9,15}, -{82,9,16}, -{82,9,17}, -{82,9,18}, -{82,9,19}, -{82,9,20}, -{82,9,21}, -{82,9,22}, -{82,9,23}, -{82,9,24}, -{82,9,25}, -{82,9,26}, -{82,9,27}, -{82,9,28}, -{82,9,29}, -{82,9,30}, -{82,9,31}, -{82,9,32}, -{82,9,33}, -{82,9,34}, -{82,9,35}, -{82,9,36}, -{82,9,37}, -{82,9,38}, -{82,9,39}, -{82,9,40}, -{82,9,41}, -{82,9,42}, -{82,9,43}, -{82,9,44}, -{82,9,45}, -{82,9,46}, -{82,9,47}, -{82,9,48}, -{82,9,49}, -{82,9,50}, -{82,9,51}, -{82,9,52}, -{82,9,53}, -{82,9,54}, -{82,9,55}, -{82,9,56}, -{82,9,57}, -{82,9,58}, -{82,9,59}, -{82,9,60}, -{82,9,61}, -{82,9,62}, -{82,9,63}, -{82,9,64}, -{82,9,65}, -{82,9,66}, -{82,9,67}, -{82,9,68}, -{82,9,69}, -{82,9,70}, -{82,9,71}, -{82,9,72}, -{82,9,73}, -{82,9,74}, -{82,9,75}, -{82,9,76}, -{82,9,77}, -{82,9,78}, -{82,9,79}, -{82,10,-27}, -{82,10,-26}, -{82,10,-25}, -{82,10,-24}, -{82,10,-23}, -{82,10,-22}, -{82,10,-21}, -{82,10,-20}, -{82,10,-19}, -{82,10,-18}, -{82,10,-17}, -{82,10,-16}, -{82,10,-15}, -{82,10,-14}, -{82,10,-13}, -{82,10,-12}, -{82,10,-11}, -{82,10,-10}, -{82,10,-9}, -{82,10,-8}, -{82,10,-7}, -{82,10,-6}, -{82,10,-5}, -{82,10,-4}, -{82,10,-3}, -{82,10,-2}, -{82,10,-1}, -{82,10,0}, -{82,10,1}, -{82,10,2}, -{82,10,3}, -{82,10,4}, -{82,10,5}, -{82,10,6}, -{82,10,7}, -{82,10,8}, -{82,10,9}, -{82,10,10}, -{82,10,11}, -{82,10,12}, -{82,10,13}, -{82,10,14}, -{82,10,15}, -{82,10,16}, -{82,10,17}, -{82,10,18}, -{82,10,19}, -{82,10,20}, -{82,10,21}, -{82,10,22}, -{82,10,23}, -{82,10,24}, -{82,10,25}, -{82,10,26}, -{82,10,27}, -{82,10,28}, -{82,10,29}, -{82,10,30}, -{82,10,31}, -{82,10,32}, -{82,10,33}, -{82,10,34}, -{82,10,35}, -{82,10,36}, -{82,10,37}, -{82,10,38}, -{82,10,39}, -{82,10,40}, -{82,10,41}, -{82,10,42}, -{82,10,43}, -{82,10,44}, -{82,10,45}, -{82,10,46}, -{82,10,47}, -{82,10,48}, -{82,10,49}, -{82,10,50}, -{82,10,51}, -{82,10,52}, -{82,10,53}, -{82,10,54}, -{82,10,55}, -{82,10,56}, -{82,10,57}, -{82,10,58}, -{82,10,59}, -{82,10,60}, -{82,10,61}, -{82,10,62}, -{82,10,63}, -{82,10,64}, -{82,10,65}, -{82,10,66}, -{82,10,67}, -{82,10,68}, -{82,10,69}, -{82,10,70}, -{82,10,71}, -{82,11,-27}, -{82,11,-26}, -{82,11,-25}, -{82,11,-24}, -{82,11,-23}, -{82,11,-22}, -{82,11,-21}, -{82,11,-20}, -{82,11,-19}, -{82,11,-18}, -{82,11,-17}, -{82,11,-16}, -{82,11,-15}, -{82,11,-14}, -{82,11,-13}, -{82,11,-12}, -{82,11,-11}, -{82,11,-10}, -{82,11,-9}, -{82,11,-8}, -{82,11,-7}, -{82,11,-6}, -{82,11,-5}, -{82,11,-4}, -{82,11,-3}, -{82,11,-2}, -{82,11,-1}, -{82,11,0}, -{82,11,1}, -{82,11,2}, -{82,11,3}, -{82,11,4}, -{82,11,5}, -{82,11,6}, -{82,11,7}, -{82,11,8}, -{82,11,9}, -{82,11,10}, -{82,11,11}, -{82,11,12}, -{82,11,13}, -{82,11,14}, -{82,11,15}, -{82,11,16}, -{82,11,17}, -{82,11,18}, -{82,11,19}, -{82,11,20}, -{82,11,21}, -{82,11,22}, -{82,11,23}, -{82,11,24}, -{82,11,25}, -{82,11,26}, -{82,11,27}, -{82,11,28}, -{82,11,29}, -{82,11,30}, -{82,11,31}, -{82,11,32}, -{82,11,33}, -{82,11,34}, -{82,11,35}, -{82,11,36}, -{82,11,37}, -{82,11,38}, -{82,11,39}, -{82,11,40}, -{82,11,41}, -{82,11,42}, -{82,11,43}, -{82,11,44}, -{82,11,45}, -{82,11,46}, -{82,11,47}, -{82,11,48}, -{82,11,49}, -{82,11,50}, -{82,11,51}, -{82,11,52}, -{82,11,53}, -{82,11,54}, -{82,11,55}, -{82,11,56}, -{82,11,57}, -{82,11,58}, -{82,11,59}, -{82,11,60}, -{82,11,61}, -{82,11,62}, -{82,11,63}, -{82,11,64}, -{82,12,-27}, -{82,12,-26}, -{82,12,-25}, -{82,12,-24}, -{82,12,-23}, -{82,12,-22}, -{82,12,-21}, -{82,12,-20}, -{82,12,-19}, -{82,12,-18}, -{82,12,-17}, -{82,12,-16}, -{82,12,-15}, -{82,12,-14}, -{82,12,-13}, -{82,12,-12}, -{82,12,-11}, -{82,12,-10}, -{82,12,-9}, -{82,12,-8}, -{82,12,-7}, -{82,12,-6}, -{82,12,-5}, -{82,12,-4}, -{82,12,-3}, -{82,12,-2}, -{82,12,-1}, -{82,12,0}, -{82,12,1}, -{82,12,2}, -{82,12,3}, -{82,12,4}, -{82,12,5}, -{82,12,6}, -{82,12,7}, -{82,12,8}, -{82,12,9}, -{82,12,10}, -{82,12,11}, -{82,12,12}, -{82,12,13}, -{82,12,14}, -{82,12,15}, -{82,12,16}, -{82,12,17}, -{82,12,18}, -{82,12,19}, -{82,12,20}, -{82,12,21}, -{82,12,22}, -{82,12,23}, -{82,12,24}, -{82,12,25}, -{82,12,26}, -{82,12,27}, -{82,12,28}, -{82,12,29}, -{82,12,30}, -{82,12,31}, -{82,12,32}, -{82,12,33}, -{82,12,34}, -{82,12,35}, -{82,12,36}, -{82,12,37}, -{82,12,38}, -{82,12,39}, -{82,12,40}, -{82,12,41}, -{82,12,42}, -{82,12,43}, -{82,12,44}, -{82,12,45}, -{82,12,46}, -{82,12,47}, -{82,12,48}, -{82,12,49}, -{82,12,50}, -{82,12,51}, -{82,12,52}, -{82,12,53}, -{82,12,54}, -{82,12,55}, -{82,12,56}, -{82,12,57}, -{82,12,58}, -{82,13,-27}, -{82,13,-26}, -{82,13,-25}, -{82,13,-24}, -{82,13,-23}, -{82,13,-22}, -{82,13,-21}, -{82,13,-20}, -{82,13,-19}, -{82,13,-18}, -{82,13,-17}, -{82,13,-16}, -{82,13,-15}, -{82,13,-14}, -{82,13,-13}, -{82,13,-12}, -{82,13,-11}, -{82,13,-10}, -{82,13,-9}, -{82,13,-8}, -{82,13,-7}, -{82,13,-6}, -{82,13,-5}, -{82,13,-4}, -{82,13,-3}, -{82,13,-2}, -{82,13,-1}, -{82,13,0}, -{82,13,1}, -{82,13,2}, -{82,13,3}, -{82,13,4}, -{82,13,5}, -{82,13,6}, -{82,13,7}, -{82,13,8}, -{82,13,9}, -{82,13,10}, -{82,13,11}, -{82,13,12}, -{82,13,13}, -{82,13,14}, -{82,13,15}, -{82,13,16}, -{82,13,17}, -{82,13,18}, -{82,13,19}, -{82,13,20}, -{82,13,21}, -{82,13,22}, -{82,13,23}, -{82,13,24}, -{82,13,25}, -{82,13,26}, -{82,13,27}, -{82,13,28}, -{82,13,29}, -{82,13,30}, -{82,13,31}, -{82,13,32}, -{82,13,33}, -{82,13,34}, -{82,13,35}, -{82,13,36}, -{82,13,37}, -{82,13,38}, -{82,13,39}, -{82,13,40}, -{82,13,41}, -{82,13,42}, -{82,13,43}, -{82,13,44}, -{82,13,45}, -{82,13,46}, -{82,13,47}, -{82,13,48}, -{82,13,49}, -{82,13,50}, -{82,13,51}, -{82,13,52}, -{82,13,53}, -{82,14,-27}, -{82,14,-26}, -{82,14,-25}, -{82,14,-24}, -{82,14,-23}, -{82,14,-22}, -{82,14,-21}, -{82,14,-20}, -{82,14,-19}, -{82,14,-18}, -{82,14,-17}, -{82,14,-16}, -{82,14,-15}, -{82,14,-14}, -{82,14,-13}, -{82,14,-12}, -{82,14,-11}, -{82,14,-10}, -{82,14,-9}, -{82,14,-8}, -{82,14,-7}, -{82,14,-6}, -{82,14,-5}, -{82,14,-4}, -{82,14,-3}, -{82,14,-2}, -{82,14,-1}, -{82,14,0}, -{82,14,1}, -{82,14,2}, -{82,14,3}, -{82,14,4}, -{82,14,5}, -{82,14,6}, -{82,14,7}, -{82,14,8}, -{82,14,9}, -{82,14,10}, -{82,14,11}, -{82,14,12}, -{82,14,13}, -{82,14,14}, -{82,14,15}, -{82,14,16}, -{82,14,17}, -{82,14,18}, -{82,14,19}, -{82,14,20}, -{82,14,21}, -{82,14,22}, -{82,14,23}, -{82,14,24}, -{82,14,25}, -{82,14,26}, -{82,14,27}, -{82,14,28}, -{82,14,29}, -{82,14,30}, -{82,14,31}, -{82,14,32}, -{82,14,33}, -{82,14,34}, -{82,14,35}, -{82,14,36}, -{82,14,37}, -{82,14,38}, -{82,14,39}, -{82,14,40}, -{82,14,41}, -{82,14,42}, -{82,14,43}, -{82,14,44}, -{82,14,45}, -{82,14,46}, -{82,14,47}, -{82,14,48}, -{82,15,-27}, -{82,15,-26}, -{82,15,-25}, -{82,15,-24}, -{82,15,-23}, -{82,15,-22}, -{82,15,-21}, -{82,15,-20}, -{82,15,-19}, -{82,15,-18}, -{82,15,-17}, -{82,15,-16}, -{82,15,-15}, -{82,15,-14}, -{82,15,-13}, -{82,15,-12}, -{82,15,-11}, -{82,15,-10}, -{82,15,-9}, -{82,15,-8}, -{82,15,-7}, -{82,15,-6}, -{82,15,-5}, -{82,15,-4}, -{82,15,-3}, -{82,15,-2}, -{82,15,-1}, -{82,15,0}, -{82,15,1}, -{82,15,2}, -{82,15,3}, -{82,15,4}, -{82,15,5}, -{82,15,6}, -{82,15,7}, -{82,15,8}, -{82,15,9}, -{82,15,10}, -{82,15,11}, -{82,15,12}, -{82,15,13}, -{82,15,14}, -{82,15,15}, -{82,15,16}, -{82,15,17}, -{82,15,18}, -{82,15,19}, -{82,15,20}, -{82,15,21}, -{82,15,22}, -{82,15,23}, -{82,15,24}, -{82,15,25}, -{82,15,26}, -{82,15,27}, -{82,15,28}, -{82,15,29}, -{82,15,30}, -{82,15,31}, -{82,15,32}, -{82,15,33}, -{82,15,34}, -{82,15,35}, -{82,15,36}, -{82,15,37}, -{82,15,38}, -{82,15,39}, -{82,15,40}, -{82,15,41}, -{82,15,42}, -{82,15,43}, -{82,16,-27}, -{82,16,-26}, -{82,16,-25}, -{82,16,-24}, -{82,16,-23}, -{82,16,-22}, -{82,16,-21}, -{82,16,-20}, -{82,16,-19}, -{82,16,-18}, -{82,16,-17}, -{82,16,-16}, -{82,16,-15}, -{82,16,-14}, -{82,16,-13}, -{82,16,-12}, -{82,16,-11}, -{82,16,-10}, -{82,16,-9}, -{82,16,-8}, -{82,16,-7}, -{82,16,-6}, -{82,16,-5}, -{82,16,-4}, -{82,16,-3}, -{82,16,-2}, -{82,16,-1}, -{82,16,0}, -{82,16,1}, -{82,16,2}, -{82,16,3}, -{82,16,4}, -{82,16,5}, -{82,16,6}, -{82,16,7}, -{82,16,8}, -{82,16,9}, -{82,16,10}, -{82,16,11}, -{82,16,12}, -{82,16,13}, -{82,16,14}, -{82,16,15}, -{82,16,16}, -{82,16,17}, -{82,16,18}, -{82,16,19}, -{82,16,20}, -{82,16,21}, -{82,16,22}, -{82,16,23}, -{82,16,24}, -{82,16,25}, -{82,16,26}, -{82,16,27}, -{82,16,28}, -{82,16,29}, -{82,16,30}, -{82,16,31}, -{82,16,32}, -{82,16,33}, -{82,16,34}, -{82,16,35}, -{82,16,36}, -{82,16,37}, -{82,16,38}, -{82,16,39}, -{82,17,-27}, -{82,17,-26}, -{82,17,-25}, -{82,17,-24}, -{82,17,-23}, -{82,17,-22}, -{82,17,-21}, -{82,17,-20}, -{82,17,-19}, -{82,17,-18}, -{82,17,-17}, -{82,17,-16}, -{82,17,-15}, -{82,17,-14}, -{82,17,-13}, -{82,17,-12}, -{82,17,-11}, -{82,17,-10}, -{82,17,-9}, -{82,17,-8}, -{82,17,-7}, -{82,17,-6}, -{82,17,-5}, -{82,17,-4}, -{82,17,-3}, -{82,17,-2}, -{82,17,-1}, -{82,17,0}, -{82,17,1}, -{82,17,2}, -{82,17,3}, -{82,17,4}, -{82,17,5}, -{82,17,6}, -{82,17,7}, -{82,17,8}, -{82,17,9}, -{82,17,10}, -{82,17,11}, -{82,17,12}, -{82,17,13}, -{82,17,14}, -{82,17,15}, -{82,17,16}, -{82,17,17}, -{82,17,18}, -{82,17,19}, -{82,17,20}, -{82,17,21}, -{82,17,22}, -{82,17,23}, -{82,17,24}, -{82,17,25}, -{82,17,26}, -{82,17,27}, -{82,17,28}, -{82,17,29}, -{82,17,30}, -{82,17,31}, -{82,17,32}, -{82,17,33}, -{82,17,34}, -{82,17,35}, -{82,18,-27}, -{82,18,-26}, -{82,18,-25}, -{82,18,-24}, -{82,18,-23}, -{82,18,-22}, -{82,18,-21}, -{82,18,-20}, -{82,18,-19}, -{82,18,-18}, -{82,18,-17}, -{82,18,-16}, -{82,18,-15}, -{82,18,-14}, -{82,18,-13}, -{82,18,-12}, -{82,18,-11}, -{82,18,-10}, -{82,18,-9}, -{82,18,-8}, -{82,18,-7}, -{82,18,-6}, -{82,18,-5}, -{82,18,-4}, -{82,18,-3}, -{82,18,-2}, -{82,18,-1}, -{82,18,0}, -{82,18,1}, -{82,18,2}, -{82,18,3}, -{82,18,4}, -{82,18,5}, -{82,18,6}, -{82,18,7}, -{82,18,8}, -{82,18,9}, -{82,18,10}, -{82,18,11}, -{82,18,12}, -{82,18,13}, -{82,18,14}, -{82,18,15}, -{82,18,16}, -{82,18,17}, -{82,18,18}, -{82,18,19}, -{82,18,20}, -{82,18,21}, -{82,18,22}, -{82,18,23}, -{82,18,24}, -{82,18,25}, -{82,18,26}, -{82,18,27}, -{82,18,28}, -{82,18,29}, -{82,18,30}, -{82,18,31}, -{82,19,-27}, -{82,19,-26}, -{82,19,-25}, -{82,19,-24}, -{82,19,-23}, -{82,19,-22}, -{82,19,-21}, -{82,19,-20}, -{82,19,-19}, -{82,19,-18}, -{82,19,-17}, -{82,19,-16}, -{82,19,-15}, -{82,19,-14}, -{82,19,-13}, -{82,19,-12}, -{82,19,-11}, -{82,19,-10}, -{82,19,-9}, -{82,19,-8}, -{82,19,-7}, -{82,19,-6}, -{82,19,-5}, -{82,19,-4}, -{82,19,-3}, -{82,19,-2}, -{82,19,-1}, -{82,19,0}, -{82,19,1}, -{82,19,2}, -{82,19,3}, -{82,19,4}, -{82,19,5}, -{82,19,6}, -{82,19,7}, -{82,19,8}, -{82,19,9}, -{82,19,10}, -{82,19,11}, -{82,19,12}, -{82,19,13}, -{82,19,14}, -{82,19,15}, -{82,19,16}, -{82,19,17}, -{82,19,18}, -{82,19,19}, -{82,19,20}, -{82,19,21}, -{82,19,22}, -{82,19,23}, -{82,19,24}, -{82,19,25}, -{82,19,26}, -{82,19,27}, -{82,19,28}, -{82,20,-27}, -{82,20,-26}, -{82,20,-25}, -{82,20,-24}, -{82,20,-23}, -{82,20,-22}, -{82,20,-21}, -{82,20,-20}, -{82,20,-19}, -{82,20,-18}, -{82,20,-17}, -{82,20,-16}, -{82,20,-15}, -{82,20,-14}, -{82,20,-13}, -{82,20,-12}, -{82,20,-11}, -{82,20,-10}, -{82,20,-9}, -{82,20,-8}, -{82,20,-7}, -{82,20,-6}, -{82,20,-5}, -{82,20,-4}, -{82,20,-3}, -{82,20,-2}, -{82,20,-1}, -{82,20,0}, -{82,20,1}, -{82,20,2}, -{82,20,3}, -{82,20,4}, -{82,20,5}, -{82,20,6}, -{82,20,7}, -{82,20,8}, -{82,20,9}, -{82,20,10}, -{82,20,11}, -{82,20,12}, -{82,20,13}, -{82,20,14}, -{82,20,15}, -{82,20,16}, -{82,20,17}, -{82,20,18}, -{82,20,19}, -{82,20,20}, -{82,20,21}, -{82,20,22}, -{82,20,23}, -{82,20,24}, -{82,21,-27}, -{82,21,-26}, -{82,21,-25}, -{82,21,-24}, -{82,21,-23}, -{82,21,-22}, -{82,21,-21}, -{82,21,-20}, -{82,21,-19}, -{82,21,-18}, -{82,21,-17}, -{82,21,-16}, -{82,21,-15}, -{82,21,-14}, -{82,21,-13}, -{82,21,-12}, -{82,21,-11}, -{82,21,-10}, -{82,21,-9}, -{82,21,-8}, -{82,21,-7}, -{82,21,-6}, -{82,21,-5}, -{82,21,-4}, -{82,21,-3}, -{82,21,-2}, -{82,21,-1}, -{82,21,0}, -{82,21,1}, -{82,21,2}, -{82,21,3}, -{82,21,4}, -{82,21,5}, -{82,21,6}, -{82,21,7}, -{82,21,8}, -{82,21,9}, -{82,21,10}, -{82,21,11}, -{82,21,12}, -{82,21,13}, -{82,21,14}, -{82,21,15}, -{82,21,16}, -{82,21,17}, -{82,21,18}, -{82,21,19}, -{82,21,20}, -{82,21,21}, -{82,22,-27}, -{82,22,-26}, -{82,22,-25}, -{82,22,-24}, -{82,22,-23}, -{82,22,-22}, -{82,22,-21}, -{82,22,-20}, -{82,22,-19}, -{82,22,-18}, -{82,22,-17}, -{82,22,-16}, -{82,22,-15}, -{82,22,-14}, -{82,22,-13}, -{82,22,-12}, -{82,22,-11}, -{82,22,-10}, -{82,22,-9}, -{82,22,-8}, -{82,22,-7}, -{82,22,-6}, -{82,22,-5}, -{82,22,-4}, -{82,22,-3}, -{82,22,-2}, -{82,22,-1}, -{82,22,0}, -{82,22,1}, -{82,22,2}, -{82,22,3}, -{82,22,4}, -{82,22,5}, -{82,22,6}, -{82,22,7}, -{82,22,8}, -{82,22,9}, -{82,22,10}, -{82,22,11}, -{82,22,12}, -{82,22,13}, -{82,22,14}, -{82,22,15}, -{82,22,16}, -{82,22,17}, -{82,22,18}, -{82,23,-27}, -{82,23,-26}, -{82,23,-25}, -{82,23,-24}, -{82,23,-23}, -{82,23,-22}, -{82,23,-21}, -{82,23,-20}, -{82,23,-19}, -{82,23,-18}, -{82,23,-17}, -{82,23,-16}, -{82,23,-15}, -{82,23,-14}, -{82,23,-13}, -{82,23,-12}, -{82,23,-11}, -{82,23,-10}, -{82,23,-9}, -{82,23,-8}, -{82,23,-7}, -{82,23,-6}, -{82,23,-5}, -{82,23,-4}, -{82,23,-3}, -{82,23,-2}, -{82,23,-1}, -{82,23,0}, -{82,23,1}, -{82,23,2}, -{82,23,3}, -{82,23,4}, -{82,23,5}, -{82,23,6}, -{82,23,7}, -{82,23,8}, -{82,23,9}, -{82,23,10}, -{82,23,11}, -{82,23,12}, -{82,23,13}, -{82,23,14}, -{82,24,-27}, -{82,24,-26}, -{82,24,-25}, -{82,24,-24}, -{82,24,-23}, -{82,24,-22}, -{82,24,-21}, -{82,24,-20}, -{82,24,-19}, -{82,24,-18}, -{82,24,-17}, -{82,24,-16}, -{82,24,-15}, -{82,24,-14}, -{82,24,-13}, -{82,24,-12}, -{82,24,-11}, -{82,24,-10}, -{82,24,-9}, -{82,24,-8}, -{82,24,-7}, -{82,24,-6}, -{82,24,-5}, -{82,24,-4}, -{82,24,-3}, -{82,24,-2}, -{82,24,-1}, -{82,24,0}, -{82,24,1}, -{82,24,2}, -{82,24,3}, -{82,24,4}, -{82,24,5}, -{82,24,6}, -{82,24,7}, -{82,24,8}, -{82,24,9}, -{82,24,10}, -{82,24,11}, -{82,24,12}, -{82,25,-27}, -{82,25,-26}, -{82,25,-25}, -{82,25,-24}, -{82,25,-23}, -{82,25,-22}, -{82,25,-21}, -{82,25,-20}, -{82,25,-19}, -{82,25,-18}, -{82,25,-17}, -{82,25,-16}, -{82,25,-15}, -{82,25,-14}, -{82,25,-13}, -{82,25,-12}, -{82,25,-11}, -{82,25,-10}, -{82,25,-9}, -{82,25,-8}, -{82,25,-7}, -{82,25,-6}, -{82,25,-5}, -{82,25,-4}, -{82,25,-3}, -{82,25,-2}, -{82,25,-1}, -{82,25,0}, -{82,25,1}, -{82,25,2}, -{82,25,3}, -{82,25,4}, -{82,25,5}, -{82,25,6}, -{82,25,7}, -{82,25,8}, -{82,25,9}, -{82,26,-27}, -{82,26,-26}, -{82,26,-25}, -{82,26,-24}, -{82,26,-23}, -{82,26,-22}, -{82,26,-21}, -{82,26,-20}, -{82,26,-19}, -{82,26,-18}, -{82,26,-17}, -{82,26,-16}, -{82,26,-15}, -{82,26,-14}, -{82,26,-13}, -{82,26,-12}, -{82,26,-11}, -{82,26,-10}, -{82,26,-9}, -{82,26,-8}, -{82,26,-7}, -{82,26,-6}, -{82,26,-5}, -{82,26,-4}, -{82,26,-3}, -{82,26,-2}, -{82,26,-1}, -{82,26,0}, -{82,26,1}, -{82,26,2}, -{82,26,3}, -{82,26,4}, -{82,26,5}, -{82,26,6}, -{82,27,-27}, -{82,27,-26}, -{82,27,-25}, -{82,27,-24}, -{82,27,-23}, -{82,27,-22}, -{82,27,-21}, -{82,27,-20}, -{82,27,-19}, -{82,27,-18}, -{82,27,-17}, -{82,27,-16}, -{82,27,-15}, -{82,27,-14}, -{82,27,-13}, -{82,27,-12}, -{82,27,-11}, -{82,27,-10}, -{82,27,-9}, -{82,27,-8}, -{82,27,-7}, -{82,27,-6}, -{82,27,-5}, -{82,27,-4}, -{82,27,-3}, -{82,27,-2}, -{82,27,-1}, -{82,27,0}, -{82,27,1}, -{82,27,2}, -{82,27,3}, -{82,28,-27}, -{82,28,-26}, -{82,28,-25}, -{82,28,-24}, -{82,28,-23}, -{82,28,-22}, -{82,28,-21}, -{82,28,-20}, -{82,28,-19}, -{82,28,-18}, -{82,28,-17}, -{82,28,-16}, -{82,28,-15}, -{82,28,-14}, -{82,28,-13}, -{82,28,-12}, -{82,28,-11}, -{82,28,-10}, -{82,28,-9}, -{82,28,-8}, -{82,28,-7}, -{82,28,-6}, -{82,28,-5}, -{82,28,-4}, -{82,28,-3}, -{82,28,-2}, -{82,28,-1}, -{82,28,0}, -{82,29,-27}, -{82,29,-26}, -{82,29,-25}, -{82,29,-24}, -{82,29,-23}, -{82,29,-22}, -{82,29,-21}, -{82,29,-20}, -{82,29,-19}, -{82,29,-18}, -{82,29,-17}, -{82,29,-16}, -{82,29,-15}, -{82,29,-14}, -{82,29,-13}, -{82,29,-12}, -{82,29,-11}, -{82,29,-10}, -{82,29,-9}, -{82,29,-8}, -{82,29,-7}, -{82,29,-6}, -{82,29,-5}, -{82,29,-4}, -{82,29,-3}, -{82,29,-2}, -{82,30,-27}, -{82,30,-26}, -{82,30,-25}, -{82,30,-24}, -{82,30,-23}, -{82,30,-22}, -{82,30,-21}, -{82,30,-20}, -{82,30,-19}, -{82,30,-18}, -{82,30,-17}, -{82,30,-16}, -{82,30,-15}, -{82,30,-14}, -{82,30,-13}, -{82,30,-12}, -{82,30,-11}, -{82,30,-10}, -{82,30,-9}, -{82,30,-8}, -{82,30,-7}, -{82,30,-6}, -{82,30,-5}, -{82,31,-27}, -{82,31,-26}, -{82,31,-25}, -{82,31,-24}, -{82,31,-23}, -{82,31,-22}, -{82,31,-21}, -{82,31,-20}, -{82,31,-19}, -{82,31,-18}, -{82,31,-17}, -{82,31,-16}, -{82,31,-15}, -{82,31,-14}, -{82,31,-13}, -{82,31,-12}, -{82,31,-11}, -{82,31,-10}, -{82,31,-9}, -{82,31,-8}, -{82,31,-7}, -{82,32,-27}, -{82,32,-26}, -{82,32,-25}, -{82,32,-24}, -{82,32,-23}, -{82,32,-22}, -{82,32,-21}, -{82,32,-20}, -{82,32,-19}, -{82,32,-18}, -{82,32,-17}, -{82,32,-16}, -{82,32,-15}, -{82,32,-14}, -{82,32,-13}, -{82,32,-12}, -{82,32,-11}, -{82,32,-10}, -{82,32,-9}, -{82,33,-27}, -{82,33,-26}, -{82,33,-25}, -{82,33,-24}, -{82,33,-23}, -{82,33,-22}, -{82,33,-21}, -{82,33,-20}, -{82,33,-19}, -{82,33,-18}, -{82,33,-17}, -{82,33,-16}, -{82,33,-15}, -{82,33,-14}, -{82,33,-13}, -{82,33,-12}, -{82,34,-27}, -{82,34,-26}, -{82,34,-25}, -{82,34,-24}, -{82,34,-23}, -{82,34,-22}, -{82,34,-21}, -{82,34,-20}, -{82,34,-19}, -{82,34,-18}, -{82,34,-17}, -{82,34,-16}, -{82,34,-15}, -{82,34,-14}, -{82,35,-27}, -{82,35,-26}, -{82,35,-25}, -{82,35,-24}, -{82,35,-23}, -{82,35,-22}, -{82,35,-21}, -{82,35,-20}, -{82,35,-19}, -{82,35,-18}, -{82,35,-17}, -{82,35,-16}, -{82,36,-27}, -{82,36,-26}, -{82,36,-25}, -{82,36,-24}, -{82,36,-23}, -{82,36,-22}, -{82,36,-21}, -{82,36,-20}, -{82,36,-19}, -{82,37,-27}, -{82,37,-26}, -{82,37,-25}, -{82,37,-24}, -{82,37,-23}, -{82,37,-22}, -{82,37,-21}, -{82,38,-27}, -{82,38,-26}, -{82,38,-25}, -{82,38,-24}, -{82,38,-23}, -{82,39,-27}, -{82,39,-26}, -{82,39,-25}, -{82,40,-27}, -{83,-82,78}, -{83,-82,79}, -{83,-81,73}, -{83,-81,74}, -{83,-81,75}, -{83,-81,76}, -{83,-81,77}, -{83,-81,78}, -{83,-81,79}, -{83,-80,69}, -{83,-80,70}, -{83,-80,71}, -{83,-80,72}, -{83,-80,73}, -{83,-80,74}, -{83,-80,75}, -{83,-80,76}, -{83,-80,77}, -{83,-80,78}, -{83,-80,79}, -{83,-79,65}, -{83,-79,66}, -{83,-79,67}, -{83,-79,68}, -{83,-79,69}, -{83,-79,70}, -{83,-79,71}, -{83,-79,72}, -{83,-79,73}, -{83,-79,74}, -{83,-79,75}, -{83,-79,76}, -{83,-79,77}, -{83,-79,78}, -{83,-79,79}, -{83,-78,61}, -{83,-78,62}, -{83,-78,63}, -{83,-78,64}, -{83,-78,65}, -{83,-78,66}, -{83,-78,67}, -{83,-78,68}, -{83,-78,69}, -{83,-78,70}, -{83,-78,71}, -{83,-78,72}, -{83,-78,73}, -{83,-78,74}, -{83,-78,75}, -{83,-78,76}, -{83,-78,77}, -{83,-78,78}, -{83,-78,79}, -{83,-77,57}, -{83,-77,58}, -{83,-77,59}, -{83,-77,60}, -{83,-77,61}, -{83,-77,62}, -{83,-77,63}, -{83,-77,64}, -{83,-77,65}, -{83,-77,66}, -{83,-77,67}, -{83,-77,68}, -{83,-77,69}, -{83,-77,70}, -{83,-77,71}, -{83,-77,72}, -{83,-77,73}, -{83,-77,74}, -{83,-77,75}, -{83,-77,76}, -{83,-77,77}, -{83,-77,78}, -{83,-77,79}, -{83,-76,54}, -{83,-76,55}, -{83,-76,56}, -{83,-76,57}, -{83,-76,58}, -{83,-76,59}, -{83,-76,60}, -{83,-76,61}, -{83,-76,62}, -{83,-76,63}, -{83,-76,64}, -{83,-76,65}, -{83,-76,66}, -{83,-76,67}, -{83,-76,68}, -{83,-76,69}, -{83,-76,70}, -{83,-76,71}, -{83,-76,72}, -{83,-76,73}, -{83,-76,74}, -{83,-76,75}, -{83,-76,76}, -{83,-76,77}, -{83,-76,78}, -{83,-76,79}, -{83,-75,51}, -{83,-75,52}, -{83,-75,53}, -{83,-75,54}, -{83,-75,55}, -{83,-75,56}, -{83,-75,57}, -{83,-75,58}, -{83,-75,59}, -{83,-75,60}, -{83,-75,61}, -{83,-75,62}, -{83,-75,63}, -{83,-75,64}, -{83,-75,65}, -{83,-75,66}, -{83,-75,67}, -{83,-75,68}, -{83,-75,69}, -{83,-75,70}, -{83,-75,71}, -{83,-75,72}, -{83,-75,73}, -{83,-75,74}, -{83,-75,75}, -{83,-75,76}, -{83,-75,77}, -{83,-75,78}, -{83,-75,79}, -{83,-74,48}, -{83,-74,49}, -{83,-74,50}, -{83,-74,51}, -{83,-74,52}, -{83,-74,53}, -{83,-74,54}, -{83,-74,55}, -{83,-74,56}, -{83,-74,57}, -{83,-74,58}, -{83,-74,59}, -{83,-74,60}, -{83,-74,61}, -{83,-74,62}, -{83,-74,63}, -{83,-74,64}, -{83,-74,65}, -{83,-74,66}, -{83,-74,67}, -{83,-74,68}, -{83,-74,69}, -{83,-74,70}, -{83,-74,71}, -{83,-74,72}, -{83,-74,73}, -{83,-74,74}, -{83,-74,75}, -{83,-74,76}, -{83,-74,77}, -{83,-74,78}, -{83,-74,79}, -{83,-73,45}, -{83,-73,46}, -{83,-73,47}, -{83,-73,48}, -{83,-73,49}, -{83,-73,50}, -{83,-73,51}, -{83,-73,52}, -{83,-73,53}, -{83,-73,54}, -{83,-73,55}, -{83,-73,56}, -{83,-73,57}, -{83,-73,58}, -{83,-73,59}, -{83,-73,60}, -{83,-73,61}, -{83,-73,62}, -{83,-73,63}, -{83,-73,64}, -{83,-73,65}, -{83,-73,66}, -{83,-73,67}, -{83,-73,68}, -{83,-73,69}, -{83,-73,70}, -{83,-73,71}, -{83,-73,72}, -{83,-73,73}, -{83,-73,74}, -{83,-73,75}, -{83,-73,76}, -{83,-73,77}, -{83,-73,78}, -{83,-73,79}, -{83,-72,42}, -{83,-72,43}, -{83,-72,44}, -{83,-72,45}, -{83,-72,46}, -{83,-72,47}, -{83,-72,48}, -{83,-72,49}, -{83,-72,50}, -{83,-72,51}, -{83,-72,52}, -{83,-72,53}, -{83,-72,54}, -{83,-72,55}, -{83,-72,56}, -{83,-72,57}, -{83,-72,58}, -{83,-72,59}, -{83,-72,60}, -{83,-72,61}, -{83,-72,62}, -{83,-72,63}, -{83,-72,64}, -{83,-72,65}, -{83,-72,66}, -{83,-72,67}, -{83,-72,68}, -{83,-72,69}, -{83,-72,70}, -{83,-72,71}, -{83,-72,72}, -{83,-72,73}, -{83,-72,74}, -{83,-72,75}, -{83,-72,76}, -{83,-72,77}, -{83,-72,78}, -{83,-72,79}, -{83,-72,80}, -{83,-71,39}, -{83,-71,40}, -{83,-71,41}, -{83,-71,42}, -{83,-71,43}, -{83,-71,44}, -{83,-71,45}, -{83,-71,46}, -{83,-71,47}, -{83,-71,48}, -{83,-71,49}, -{83,-71,50}, -{83,-71,51}, -{83,-71,52}, -{83,-71,53}, -{83,-71,54}, -{83,-71,55}, -{83,-71,56}, -{83,-71,57}, -{83,-71,58}, -{83,-71,59}, -{83,-71,60}, -{83,-71,61}, -{83,-71,62}, -{83,-71,63}, -{83,-71,64}, -{83,-71,65}, -{83,-71,66}, -{83,-71,67}, -{83,-71,68}, -{83,-71,69}, -{83,-71,70}, -{83,-71,71}, -{83,-71,72}, -{83,-71,73}, -{83,-71,74}, -{83,-71,75}, -{83,-71,76}, -{83,-71,77}, -{83,-71,78}, -{83,-71,79}, -{83,-71,80}, -{83,-70,37}, -{83,-70,38}, -{83,-70,39}, -{83,-70,40}, -{83,-70,41}, -{83,-70,42}, -{83,-70,43}, -{83,-70,44}, -{83,-70,45}, -{83,-70,46}, -{83,-70,47}, -{83,-70,48}, -{83,-70,49}, -{83,-70,50}, -{83,-70,51}, -{83,-70,52}, -{83,-70,53}, -{83,-70,54}, -{83,-70,55}, -{83,-70,56}, -{83,-70,57}, -{83,-70,58}, -{83,-70,59}, -{83,-70,60}, -{83,-70,61}, -{83,-70,62}, -{83,-70,63}, -{83,-70,64}, -{83,-70,65}, -{83,-70,66}, -{83,-70,67}, -{83,-70,68}, -{83,-70,69}, -{83,-70,70}, -{83,-70,71}, -{83,-70,72}, -{83,-70,73}, -{83,-70,74}, -{83,-70,75}, -{83,-70,76}, -{83,-70,77}, -{83,-70,78}, -{83,-70,79}, -{83,-70,80}, -{83,-69,34}, -{83,-69,35}, -{83,-69,36}, -{83,-69,37}, -{83,-69,38}, -{83,-69,39}, -{83,-69,40}, -{83,-69,41}, -{83,-69,42}, -{83,-69,43}, -{83,-69,44}, -{83,-69,45}, -{83,-69,46}, -{83,-69,47}, -{83,-69,48}, -{83,-69,49}, -{83,-69,50}, -{83,-69,51}, -{83,-69,52}, -{83,-69,53}, -{83,-69,54}, -{83,-69,55}, -{83,-69,56}, -{83,-69,57}, -{83,-69,58}, -{83,-69,59}, -{83,-69,60}, -{83,-69,61}, -{83,-69,62}, -{83,-69,63}, -{83,-69,64}, -{83,-69,65}, -{83,-69,66}, -{83,-69,67}, -{83,-69,68}, -{83,-69,69}, -{83,-69,70}, -{83,-69,71}, -{83,-69,72}, -{83,-69,73}, -{83,-69,74}, -{83,-69,75}, -{83,-69,76}, -{83,-69,77}, -{83,-69,78}, -{83,-69,79}, -{83,-69,80}, -{83,-68,32}, -{83,-68,33}, -{83,-68,34}, -{83,-68,35}, -{83,-68,36}, -{83,-68,37}, -{83,-68,38}, -{83,-68,39}, -{83,-68,40}, -{83,-68,41}, -{83,-68,42}, -{83,-68,43}, -{83,-68,44}, -{83,-68,45}, -{83,-68,46}, -{83,-68,47}, -{83,-68,48}, -{83,-68,49}, -{83,-68,50}, -{83,-68,51}, -{83,-68,52}, -{83,-68,53}, -{83,-68,54}, -{83,-68,55}, -{83,-68,56}, -{83,-68,57}, -{83,-68,58}, -{83,-68,59}, -{83,-68,60}, -{83,-68,61}, -{83,-68,62}, -{83,-68,63}, -{83,-68,64}, -{83,-68,65}, -{83,-68,66}, -{83,-68,67}, -{83,-68,68}, -{83,-68,69}, -{83,-68,70}, -{83,-68,71}, -{83,-68,72}, -{83,-68,73}, -{83,-68,74}, -{83,-68,75}, -{83,-68,76}, -{83,-68,77}, -{83,-68,78}, -{83,-68,79}, -{83,-68,80}, -{83,-67,29}, -{83,-67,30}, -{83,-67,31}, -{83,-67,32}, -{83,-67,33}, -{83,-67,34}, -{83,-67,35}, -{83,-67,36}, -{83,-67,37}, -{83,-67,38}, -{83,-67,39}, -{83,-67,40}, -{83,-67,41}, -{83,-67,42}, -{83,-67,43}, -{83,-67,44}, -{83,-67,45}, -{83,-67,46}, -{83,-67,47}, -{83,-67,48}, -{83,-67,49}, -{83,-67,50}, -{83,-67,51}, -{83,-67,52}, -{83,-67,53}, -{83,-67,54}, -{83,-67,55}, -{83,-67,56}, -{83,-67,57}, -{83,-67,58}, -{83,-67,59}, -{83,-67,60}, -{83,-67,61}, -{83,-67,62}, -{83,-67,63}, -{83,-67,64}, -{83,-67,65}, -{83,-67,66}, -{83,-67,67}, -{83,-67,68}, -{83,-67,69}, -{83,-67,70}, -{83,-67,71}, -{83,-67,72}, -{83,-67,73}, -{83,-67,74}, -{83,-67,75}, -{83,-67,76}, -{83,-67,77}, -{83,-67,78}, -{83,-67,79}, -{83,-67,80}, -{83,-66,27}, -{83,-66,28}, -{83,-66,29}, -{83,-66,30}, -{83,-66,31}, -{83,-66,32}, -{83,-66,33}, -{83,-66,34}, -{83,-66,35}, -{83,-66,36}, -{83,-66,37}, -{83,-66,38}, -{83,-66,39}, -{83,-66,40}, -{83,-66,41}, -{83,-66,42}, -{83,-66,43}, -{83,-66,44}, -{83,-66,45}, -{83,-66,46}, -{83,-66,47}, -{83,-66,48}, -{83,-66,49}, -{83,-66,50}, -{83,-66,51}, -{83,-66,52}, -{83,-66,53}, -{83,-66,54}, -{83,-66,55}, -{83,-66,56}, -{83,-66,57}, -{83,-66,58}, -{83,-66,59}, -{83,-66,60}, -{83,-66,61}, -{83,-66,62}, -{83,-66,63}, -{83,-66,64}, -{83,-66,65}, -{83,-66,66}, -{83,-66,67}, -{83,-66,68}, -{83,-66,69}, -{83,-66,70}, -{83,-66,71}, -{83,-66,72}, -{83,-66,73}, -{83,-66,74}, -{83,-66,75}, -{83,-66,76}, -{83,-66,77}, -{83,-66,78}, -{83,-66,79}, -{83,-66,80}, -{83,-65,25}, -{83,-65,26}, -{83,-65,27}, -{83,-65,28}, -{83,-65,29}, -{83,-65,30}, -{83,-65,31}, -{83,-65,32}, -{83,-65,33}, -{83,-65,34}, -{83,-65,35}, -{83,-65,36}, -{83,-65,37}, -{83,-65,38}, -{83,-65,39}, -{83,-65,40}, -{83,-65,41}, -{83,-65,42}, -{83,-65,43}, -{83,-65,44}, -{83,-65,45}, -{83,-65,46}, -{83,-65,47}, -{83,-65,48}, -{83,-65,49}, -{83,-65,50}, -{83,-65,51}, -{83,-65,52}, -{83,-65,53}, -{83,-65,54}, -{83,-65,55}, -{83,-65,56}, -{83,-65,57}, -{83,-65,58}, -{83,-65,59}, -{83,-65,60}, -{83,-65,61}, -{83,-65,62}, -{83,-65,63}, -{83,-65,64}, -{83,-65,65}, -{83,-65,66}, -{83,-65,67}, -{83,-65,68}, -{83,-65,69}, -{83,-65,70}, -{83,-65,71}, -{83,-65,72}, -{83,-65,73}, -{83,-65,74}, -{83,-65,75}, -{83,-65,76}, -{83,-65,77}, -{83,-65,78}, -{83,-65,79}, -{83,-65,80}, -{83,-64,23}, -{83,-64,24}, -{83,-64,25}, -{83,-64,26}, -{83,-64,27}, -{83,-64,28}, -{83,-64,29}, -{83,-64,30}, -{83,-64,31}, -{83,-64,32}, -{83,-64,33}, -{83,-64,34}, -{83,-64,35}, -{83,-64,36}, -{83,-64,37}, -{83,-64,38}, -{83,-64,39}, -{83,-64,40}, -{83,-64,41}, -{83,-64,42}, -{83,-64,43}, -{83,-64,44}, -{83,-64,45}, -{83,-64,46}, -{83,-64,47}, -{83,-64,48}, -{83,-64,49}, -{83,-64,50}, -{83,-64,51}, -{83,-64,52}, -{83,-64,53}, -{83,-64,54}, -{83,-64,55}, -{83,-64,56}, -{83,-64,57}, -{83,-64,58}, -{83,-64,59}, -{83,-64,60}, -{83,-64,61}, -{83,-64,62}, -{83,-64,63}, -{83,-64,64}, -{83,-64,65}, -{83,-64,66}, -{83,-64,67}, -{83,-64,68}, -{83,-64,69}, -{83,-64,70}, -{83,-64,71}, -{83,-64,72}, -{83,-64,73}, -{83,-64,74}, -{83,-64,75}, -{83,-64,76}, -{83,-64,77}, -{83,-64,78}, -{83,-64,79}, -{83,-64,80}, -{83,-63,21}, -{83,-63,22}, -{83,-63,23}, -{83,-63,24}, -{83,-63,25}, -{83,-63,26}, -{83,-63,27}, -{83,-63,28}, -{83,-63,29}, -{83,-63,30}, -{83,-63,31}, -{83,-63,32}, -{83,-63,33}, -{83,-63,34}, -{83,-63,35}, -{83,-63,36}, -{83,-63,37}, -{83,-63,38}, -{83,-63,39}, -{83,-63,40}, -{83,-63,41}, -{83,-63,42}, -{83,-63,43}, -{83,-63,44}, -{83,-63,45}, -{83,-63,46}, -{83,-63,47}, -{83,-63,48}, -{83,-63,49}, -{83,-63,50}, -{83,-63,51}, -{83,-63,52}, -{83,-63,53}, -{83,-63,54}, -{83,-63,55}, -{83,-63,56}, -{83,-63,57}, -{83,-63,58}, -{83,-63,59}, -{83,-63,60}, -{83,-63,61}, -{83,-63,62}, -{83,-63,63}, -{83,-63,64}, -{83,-63,65}, -{83,-63,66}, -{83,-63,67}, -{83,-63,68}, -{83,-63,69}, -{83,-63,70}, -{83,-63,71}, -{83,-63,72}, -{83,-63,73}, -{83,-63,74}, -{83,-63,75}, -{83,-63,76}, -{83,-63,77}, -{83,-63,78}, -{83,-63,79}, -{83,-63,80}, -{83,-62,18}, -{83,-62,19}, -{83,-62,20}, -{83,-62,21}, -{83,-62,22}, -{83,-62,23}, -{83,-62,24}, -{83,-62,25}, -{83,-62,26}, -{83,-62,27}, -{83,-62,28}, -{83,-62,29}, -{83,-62,30}, -{83,-62,31}, -{83,-62,32}, -{83,-62,33}, -{83,-62,34}, -{83,-62,35}, -{83,-62,36}, -{83,-62,37}, -{83,-62,38}, -{83,-62,39}, -{83,-62,40}, -{83,-62,41}, -{83,-62,42}, -{83,-62,43}, -{83,-62,44}, -{83,-62,45}, -{83,-62,46}, -{83,-62,47}, -{83,-62,48}, -{83,-62,49}, -{83,-62,50}, -{83,-62,51}, -{83,-62,52}, -{83,-62,53}, -{83,-62,54}, -{83,-62,55}, -{83,-62,56}, -{83,-62,57}, -{83,-62,58}, -{83,-62,59}, -{83,-62,60}, -{83,-62,61}, -{83,-62,62}, -{83,-62,63}, -{83,-62,64}, -{83,-62,65}, -{83,-62,66}, -{83,-62,67}, -{83,-62,68}, -{83,-62,69}, -{83,-62,70}, -{83,-62,71}, -{83,-62,72}, -{83,-62,73}, -{83,-62,74}, -{83,-62,75}, -{83,-62,76}, -{83,-62,77}, -{83,-62,78}, -{83,-62,79}, -{83,-62,80}, -{83,-61,16}, -{83,-61,17}, -{83,-61,18}, -{83,-61,19}, -{83,-61,20}, -{83,-61,21}, -{83,-61,22}, -{83,-61,23}, -{83,-61,24}, -{83,-61,25}, -{83,-61,26}, -{83,-61,27}, -{83,-61,28}, -{83,-61,29}, -{83,-61,30}, -{83,-61,31}, -{83,-61,32}, -{83,-61,33}, -{83,-61,34}, -{83,-61,35}, -{83,-61,36}, -{83,-61,37}, -{83,-61,38}, -{83,-61,39}, -{83,-61,40}, -{83,-61,41}, -{83,-61,42}, -{83,-61,43}, -{83,-61,44}, -{83,-61,45}, -{83,-61,46}, -{83,-61,47}, -{83,-61,48}, -{83,-61,49}, -{83,-61,50}, -{83,-61,51}, -{83,-61,52}, -{83,-61,53}, -{83,-61,54}, -{83,-61,55}, -{83,-61,56}, -{83,-61,57}, -{83,-61,58}, -{83,-61,59}, -{83,-61,60}, -{83,-61,61}, -{83,-61,62}, -{83,-61,63}, -{83,-61,64}, -{83,-61,65}, -{83,-61,66}, -{83,-61,67}, -{83,-61,68}, -{83,-61,69}, -{83,-61,70}, -{83,-61,71}, -{83,-61,72}, -{83,-61,73}, -{83,-61,74}, -{83,-61,75}, -{83,-61,76}, -{83,-61,77}, -{83,-61,78}, -{83,-61,79}, -{83,-61,80}, -{83,-60,14}, -{83,-60,15}, -{83,-60,16}, -{83,-60,17}, -{83,-60,18}, -{83,-60,19}, -{83,-60,20}, -{83,-60,21}, -{83,-60,22}, -{83,-60,23}, -{83,-60,24}, -{83,-60,25}, -{83,-60,26}, -{83,-60,27}, -{83,-60,28}, -{83,-60,29}, -{83,-60,30}, -{83,-60,31}, -{83,-60,32}, -{83,-60,33}, -{83,-60,34}, -{83,-60,35}, -{83,-60,36}, -{83,-60,37}, -{83,-60,38}, -{83,-60,39}, -{83,-60,40}, -{83,-60,41}, -{83,-60,42}, -{83,-60,43}, -{83,-60,44}, -{83,-60,45}, -{83,-60,46}, -{83,-60,47}, -{83,-60,48}, -{83,-60,49}, -{83,-60,50}, -{83,-60,51}, -{83,-60,52}, -{83,-60,53}, -{83,-60,54}, -{83,-60,55}, -{83,-60,56}, -{83,-60,57}, -{83,-60,58}, -{83,-60,59}, -{83,-60,60}, -{83,-60,61}, -{83,-60,62}, -{83,-60,63}, -{83,-60,64}, -{83,-60,65}, -{83,-60,66}, -{83,-60,67}, -{83,-60,68}, -{83,-60,69}, -{83,-60,70}, -{83,-60,71}, -{83,-60,72}, -{83,-60,73}, -{83,-60,74}, -{83,-60,75}, -{83,-60,76}, -{83,-60,77}, -{83,-60,78}, -{83,-60,79}, -{83,-60,80}, -{83,-59,12}, -{83,-59,13}, -{83,-59,14}, -{83,-59,15}, -{83,-59,16}, -{83,-59,17}, -{83,-59,18}, -{83,-59,19}, -{83,-59,20}, -{83,-59,21}, -{83,-59,22}, -{83,-59,23}, -{83,-59,24}, -{83,-59,25}, -{83,-59,26}, -{83,-59,27}, -{83,-59,28}, -{83,-59,29}, -{83,-59,30}, -{83,-59,31}, -{83,-59,32}, -{83,-59,33}, -{83,-59,34}, -{83,-59,35}, -{83,-59,36}, -{83,-59,37}, -{83,-59,38}, -{83,-59,39}, -{83,-59,40}, -{83,-59,41}, -{83,-59,42}, -{83,-59,43}, -{83,-59,44}, -{83,-59,45}, -{83,-59,46}, -{83,-59,47}, -{83,-59,48}, -{83,-59,49}, -{83,-59,50}, -{83,-59,51}, -{83,-59,52}, -{83,-59,53}, -{83,-59,54}, -{83,-59,55}, -{83,-59,56}, -{83,-59,57}, -{83,-59,58}, -{83,-59,59}, -{83,-59,60}, -{83,-59,61}, -{83,-59,62}, -{83,-59,63}, -{83,-59,64}, -{83,-59,65}, -{83,-59,66}, -{83,-59,67}, -{83,-59,68}, -{83,-59,69}, -{83,-59,70}, -{83,-59,71}, -{83,-59,72}, -{83,-59,73}, -{83,-59,74}, -{83,-59,75}, -{83,-59,76}, -{83,-59,77}, -{83,-59,78}, -{83,-59,79}, -{83,-59,80}, -{83,-58,11}, -{83,-58,12}, -{83,-58,13}, -{83,-58,14}, -{83,-58,15}, -{83,-58,16}, -{83,-58,17}, -{83,-58,18}, -{83,-58,19}, -{83,-58,20}, -{83,-58,21}, -{83,-58,22}, -{83,-58,23}, -{83,-58,24}, -{83,-58,25}, -{83,-58,26}, -{83,-58,27}, -{83,-58,28}, -{83,-58,29}, -{83,-58,30}, -{83,-58,31}, -{83,-58,32}, -{83,-58,33}, -{83,-58,34}, -{83,-58,35}, -{83,-58,36}, -{83,-58,37}, -{83,-58,38}, -{83,-58,39}, -{83,-58,40}, -{83,-58,41}, -{83,-58,42}, -{83,-58,43}, -{83,-58,44}, -{83,-58,45}, -{83,-58,46}, -{83,-58,47}, -{83,-58,48}, -{83,-58,49}, -{83,-58,50}, -{83,-58,51}, -{83,-58,52}, -{83,-58,53}, -{83,-58,54}, -{83,-58,55}, -{83,-58,56}, -{83,-58,57}, -{83,-58,58}, -{83,-58,59}, -{83,-58,60}, -{83,-58,61}, -{83,-58,62}, -{83,-58,63}, -{83,-58,64}, -{83,-58,65}, -{83,-58,66}, -{83,-58,67}, -{83,-58,68}, -{83,-58,69}, -{83,-58,70}, -{83,-58,71}, -{83,-58,72}, -{83,-58,73}, -{83,-58,74}, -{83,-58,75}, -{83,-58,76}, -{83,-58,77}, -{83,-58,78}, -{83,-58,79}, -{83,-58,80}, -{83,-57,9}, -{83,-57,10}, -{83,-57,11}, -{83,-57,12}, -{83,-57,13}, -{83,-57,14}, -{83,-57,15}, -{83,-57,16}, -{83,-57,17}, -{83,-57,18}, -{83,-57,19}, -{83,-57,20}, -{83,-57,21}, -{83,-57,22}, -{83,-57,23}, -{83,-57,24}, -{83,-57,25}, -{83,-57,26}, -{83,-57,27}, -{83,-57,28}, -{83,-57,29}, -{83,-57,30}, -{83,-57,31}, -{83,-57,32}, -{83,-57,33}, -{83,-57,34}, -{83,-57,35}, -{83,-57,36}, -{83,-57,37}, -{83,-57,38}, -{83,-57,39}, -{83,-57,40}, -{83,-57,41}, -{83,-57,42}, -{83,-57,43}, -{83,-57,44}, -{83,-57,45}, -{83,-57,46}, -{83,-57,47}, -{83,-57,48}, -{83,-57,49}, -{83,-57,50}, -{83,-57,51}, -{83,-57,52}, -{83,-57,53}, -{83,-57,54}, -{83,-57,55}, -{83,-57,56}, -{83,-57,57}, -{83,-57,58}, -{83,-57,59}, -{83,-57,60}, -{83,-57,61}, -{83,-57,62}, -{83,-57,63}, -{83,-57,64}, -{83,-57,65}, -{83,-57,66}, -{83,-57,67}, -{83,-57,68}, -{83,-57,69}, -{83,-57,70}, -{83,-57,71}, -{83,-57,72}, -{83,-57,73}, -{83,-57,74}, -{83,-57,75}, -{83,-57,76}, -{83,-57,77}, -{83,-57,78}, -{83,-57,79}, -{83,-57,80}, -{83,-56,7}, -{83,-56,8}, -{83,-56,9}, -{83,-56,10}, -{83,-56,11}, -{83,-56,12}, -{83,-56,13}, -{83,-56,14}, -{83,-56,15}, -{83,-56,16}, -{83,-56,17}, -{83,-56,18}, -{83,-56,19}, -{83,-56,20}, -{83,-56,21}, -{83,-56,22}, -{83,-56,23}, -{83,-56,24}, -{83,-56,25}, -{83,-56,26}, -{83,-56,27}, -{83,-56,28}, -{83,-56,29}, -{83,-56,30}, -{83,-56,31}, -{83,-56,32}, -{83,-56,33}, -{83,-56,34}, -{83,-56,35}, -{83,-56,36}, -{83,-56,37}, -{83,-56,38}, -{83,-56,39}, -{83,-56,40}, -{83,-56,41}, -{83,-56,42}, -{83,-56,43}, -{83,-56,44}, -{83,-56,45}, -{83,-56,46}, -{83,-56,47}, -{83,-56,48}, -{83,-56,49}, -{83,-56,50}, -{83,-56,51}, -{83,-56,52}, -{83,-56,53}, -{83,-56,54}, -{83,-56,55}, -{83,-56,56}, -{83,-56,57}, -{83,-56,58}, -{83,-56,59}, -{83,-56,60}, -{83,-56,61}, -{83,-56,62}, -{83,-56,63}, -{83,-56,64}, -{83,-56,65}, -{83,-56,66}, -{83,-56,67}, -{83,-56,68}, -{83,-56,69}, -{83,-56,70}, -{83,-56,71}, -{83,-56,72}, -{83,-56,73}, -{83,-56,74}, -{83,-56,75}, -{83,-56,76}, -{83,-56,77}, -{83,-56,78}, -{83,-56,79}, -{83,-56,80}, -{83,-55,5}, -{83,-55,6}, -{83,-55,7}, -{83,-55,8}, -{83,-55,9}, -{83,-55,10}, -{83,-55,11}, -{83,-55,12}, -{83,-55,13}, -{83,-55,14}, -{83,-55,15}, -{83,-55,16}, -{83,-55,17}, -{83,-55,18}, -{83,-55,19}, -{83,-55,20}, -{83,-55,21}, -{83,-55,22}, -{83,-55,23}, -{83,-55,24}, -{83,-55,25}, -{83,-55,26}, -{83,-55,27}, -{83,-55,28}, -{83,-55,29}, -{83,-55,30}, -{83,-55,31}, -{83,-55,32}, -{83,-55,33}, -{83,-55,34}, -{83,-55,35}, -{83,-55,36}, -{83,-55,37}, -{83,-55,38}, -{83,-55,39}, -{83,-55,40}, -{83,-55,41}, -{83,-55,42}, -{83,-55,43}, -{83,-55,44}, -{83,-55,45}, -{83,-55,46}, -{83,-55,47}, -{83,-55,48}, -{83,-55,49}, -{83,-55,50}, -{83,-55,51}, -{83,-55,52}, -{83,-55,53}, -{83,-55,54}, -{83,-55,55}, -{83,-55,56}, -{83,-55,57}, -{83,-55,58}, -{83,-55,59}, -{83,-55,60}, -{83,-55,61}, -{83,-55,62}, -{83,-55,63}, -{83,-55,64}, -{83,-55,65}, -{83,-55,66}, -{83,-55,67}, -{83,-55,68}, -{83,-55,69}, -{83,-55,70}, -{83,-55,71}, -{83,-55,72}, -{83,-55,73}, -{83,-55,74}, -{83,-55,75}, -{83,-55,76}, -{83,-55,77}, -{83,-55,78}, -{83,-55,79}, -{83,-55,80}, -{83,-54,3}, -{83,-54,4}, -{83,-54,5}, -{83,-54,6}, -{83,-54,7}, -{83,-54,8}, -{83,-54,9}, -{83,-54,10}, -{83,-54,11}, -{83,-54,12}, -{83,-54,13}, -{83,-54,14}, -{83,-54,15}, -{83,-54,16}, -{83,-54,17}, -{83,-54,18}, -{83,-54,19}, -{83,-54,20}, -{83,-54,21}, -{83,-54,22}, -{83,-54,23}, -{83,-54,24}, -{83,-54,25}, -{83,-54,26}, -{83,-54,27}, -{83,-54,28}, -{83,-54,29}, -{83,-54,30}, -{83,-54,31}, -{83,-54,32}, -{83,-54,33}, -{83,-54,34}, -{83,-54,35}, -{83,-54,36}, -{83,-54,37}, -{83,-54,38}, -{83,-54,39}, -{83,-54,40}, -{83,-54,41}, -{83,-54,42}, -{83,-54,43}, -{83,-54,44}, -{83,-54,45}, -{83,-54,46}, -{83,-54,47}, -{83,-54,48}, -{83,-54,49}, -{83,-54,50}, -{83,-54,51}, -{83,-54,52}, -{83,-54,53}, -{83,-54,54}, -{83,-54,55}, -{83,-54,56}, -{83,-54,57}, -{83,-54,58}, -{83,-54,59}, -{83,-54,60}, -{83,-54,61}, -{83,-54,62}, -{83,-54,63}, -{83,-54,64}, -{83,-54,65}, -{83,-54,66}, -{83,-54,67}, -{83,-54,68}, -{83,-54,69}, -{83,-54,70}, -{83,-54,71}, -{83,-54,72}, -{83,-54,73}, -{83,-54,74}, -{83,-54,75}, -{83,-54,76}, -{83,-54,77}, -{83,-54,78}, -{83,-54,79}, -{83,-54,80}, -{83,-53,1}, -{83,-53,2}, -{83,-53,3}, -{83,-53,4}, -{83,-53,5}, -{83,-53,6}, -{83,-53,7}, -{83,-53,8}, -{83,-53,9}, -{83,-53,10}, -{83,-53,11}, -{83,-53,12}, -{83,-53,13}, -{83,-53,14}, -{83,-53,15}, -{83,-53,16}, -{83,-53,17}, -{83,-53,18}, -{83,-53,19}, -{83,-53,20}, -{83,-53,21}, -{83,-53,22}, -{83,-53,23}, -{83,-53,24}, -{83,-53,25}, -{83,-53,26}, -{83,-53,27}, -{83,-53,28}, -{83,-53,29}, -{83,-53,30}, -{83,-53,31}, -{83,-53,32}, -{83,-53,33}, -{83,-53,34}, -{83,-53,35}, -{83,-53,36}, -{83,-53,37}, -{83,-53,38}, -{83,-53,39}, -{83,-53,40}, -{83,-53,41}, -{83,-53,42}, -{83,-53,43}, -{83,-53,44}, -{83,-53,45}, -{83,-53,46}, -{83,-53,47}, -{83,-53,48}, -{83,-53,49}, -{83,-53,50}, -{83,-53,51}, -{83,-53,52}, -{83,-53,53}, -{83,-53,54}, -{83,-53,55}, -{83,-53,56}, -{83,-53,57}, -{83,-53,58}, -{83,-53,59}, -{83,-53,60}, -{83,-53,61}, -{83,-53,62}, -{83,-53,63}, -{83,-53,64}, -{83,-53,65}, -{83,-53,66}, -{83,-53,67}, -{83,-53,68}, -{83,-53,69}, -{83,-53,70}, -{83,-53,71}, -{83,-53,72}, -{83,-53,73}, -{83,-53,74}, -{83,-53,75}, -{83,-53,76}, -{83,-53,77}, -{83,-53,78}, -{83,-53,79}, -{83,-53,80}, -{83,-52,0}, -{83,-52,1}, -{83,-52,2}, -{83,-52,3}, -{83,-52,4}, -{83,-52,5}, -{83,-52,6}, -{83,-52,7}, -{83,-52,8}, -{83,-52,9}, -{83,-52,10}, -{83,-52,11}, -{83,-52,12}, -{83,-52,13}, -{83,-52,14}, -{83,-52,15}, -{83,-52,16}, -{83,-52,17}, -{83,-52,18}, -{83,-52,19}, -{83,-52,20}, -{83,-52,21}, -{83,-52,22}, -{83,-52,23}, -{83,-52,24}, -{83,-52,25}, -{83,-52,26}, -{83,-52,27}, -{83,-52,28}, -{83,-52,29}, -{83,-52,30}, -{83,-52,31}, -{83,-52,32}, -{83,-52,33}, -{83,-52,34}, -{83,-52,35}, -{83,-52,36}, -{83,-52,37}, -{83,-52,38}, -{83,-52,39}, -{83,-52,40}, -{83,-52,41}, -{83,-52,42}, -{83,-52,43}, -{83,-52,44}, -{83,-52,45}, -{83,-52,46}, -{83,-52,47}, -{83,-52,48}, -{83,-52,49}, -{83,-52,50}, -{83,-52,51}, -{83,-52,52}, -{83,-52,53}, -{83,-52,54}, -{83,-52,55}, -{83,-52,56}, -{83,-52,57}, -{83,-52,58}, -{83,-52,59}, -{83,-52,60}, -{83,-52,61}, -{83,-52,62}, -{83,-52,63}, -{83,-52,64}, -{83,-52,65}, -{83,-52,66}, -{83,-52,67}, -{83,-52,68}, -{83,-52,69}, -{83,-52,70}, -{83,-52,71}, -{83,-52,72}, -{83,-52,73}, -{83,-52,74}, -{83,-52,75}, -{83,-52,76}, -{83,-52,77}, -{83,-52,78}, -{83,-52,79}, -{83,-52,80}, -{83,-51,-2}, -{83,-51,-1}, -{83,-51,0}, -{83,-51,1}, -{83,-51,2}, -{83,-51,3}, -{83,-51,4}, -{83,-51,5}, -{83,-51,6}, -{83,-51,7}, -{83,-51,8}, -{83,-51,9}, -{83,-51,10}, -{83,-51,11}, -{83,-51,12}, -{83,-51,13}, -{83,-51,14}, -{83,-51,15}, -{83,-51,16}, -{83,-51,17}, -{83,-51,18}, -{83,-51,19}, -{83,-51,20}, -{83,-51,21}, -{83,-51,22}, -{83,-51,23}, -{83,-51,24}, -{83,-51,25}, -{83,-51,26}, -{83,-51,27}, -{83,-51,28}, -{83,-51,29}, -{83,-51,30}, -{83,-51,31}, -{83,-51,32}, -{83,-51,33}, -{83,-51,34}, -{83,-51,35}, -{83,-51,36}, -{83,-51,37}, -{83,-51,38}, -{83,-51,39}, -{83,-51,40}, -{83,-51,41}, -{83,-51,42}, -{83,-51,43}, -{83,-51,44}, -{83,-51,45}, -{83,-51,46}, -{83,-51,47}, -{83,-51,48}, -{83,-51,49}, -{83,-51,50}, -{83,-51,51}, -{83,-51,52}, -{83,-51,53}, -{83,-51,54}, -{83,-51,55}, -{83,-51,56}, -{83,-51,57}, -{83,-51,58}, -{83,-51,59}, -{83,-51,60}, -{83,-51,61}, -{83,-51,62}, -{83,-51,63}, -{83,-51,64}, -{83,-51,65}, -{83,-51,66}, -{83,-51,67}, -{83,-51,68}, -{83,-51,69}, -{83,-51,70}, -{83,-51,71}, -{83,-51,72}, -{83,-51,73}, -{83,-51,74}, -{83,-51,75}, -{83,-51,76}, -{83,-51,77}, -{83,-51,78}, -{83,-51,79}, -{83,-51,80}, -{83,-51,81}, -{83,-50,-4}, -{83,-50,-3}, -{83,-50,-2}, -{83,-50,-1}, -{83,-50,0}, -{83,-50,1}, -{83,-50,2}, -{83,-50,3}, -{83,-50,4}, -{83,-50,5}, -{83,-50,6}, -{83,-50,7}, -{83,-50,8}, -{83,-50,9}, -{83,-50,10}, -{83,-50,11}, -{83,-50,12}, -{83,-50,13}, -{83,-50,14}, -{83,-50,15}, -{83,-50,16}, -{83,-50,17}, -{83,-50,18}, -{83,-50,19}, -{83,-50,20}, -{83,-50,21}, -{83,-50,22}, -{83,-50,23}, -{83,-50,24}, -{83,-50,25}, -{83,-50,26}, -{83,-50,27}, -{83,-50,28}, -{83,-50,29}, -{83,-50,30}, -{83,-50,31}, -{83,-50,32}, -{83,-50,33}, -{83,-50,34}, -{83,-50,35}, -{83,-50,36}, -{83,-50,37}, -{83,-50,38}, -{83,-50,39}, -{83,-50,40}, -{83,-50,41}, -{83,-50,42}, -{83,-50,43}, -{83,-50,44}, -{83,-50,45}, -{83,-50,46}, -{83,-50,47}, -{83,-50,48}, -{83,-50,49}, -{83,-50,50}, -{83,-50,51}, -{83,-50,52}, -{83,-50,53}, -{83,-50,54}, -{83,-50,55}, -{83,-50,56}, -{83,-50,57}, -{83,-50,58}, -{83,-50,59}, -{83,-50,60}, -{83,-50,61}, -{83,-50,62}, -{83,-50,63}, -{83,-50,64}, -{83,-50,65}, -{83,-50,66}, -{83,-50,67}, -{83,-50,68}, -{83,-50,69}, -{83,-50,70}, -{83,-50,71}, -{83,-50,72}, -{83,-50,73}, -{83,-50,74}, -{83,-50,75}, -{83,-50,76}, -{83,-50,77}, -{83,-50,78}, -{83,-50,79}, -{83,-50,80}, -{83,-50,81}, -{83,-49,-5}, -{83,-49,-4}, -{83,-49,-3}, -{83,-49,-2}, -{83,-49,-1}, -{83,-49,0}, -{83,-49,1}, -{83,-49,2}, -{83,-49,3}, -{83,-49,4}, -{83,-49,5}, -{83,-49,6}, -{83,-49,7}, -{83,-49,8}, -{83,-49,9}, -{83,-49,10}, -{83,-49,11}, -{83,-49,12}, -{83,-49,13}, -{83,-49,14}, -{83,-49,15}, -{83,-49,16}, -{83,-49,17}, -{83,-49,18}, -{83,-49,19}, -{83,-49,20}, -{83,-49,21}, -{83,-49,22}, -{83,-49,23}, -{83,-49,24}, -{83,-49,25}, -{83,-49,26}, -{83,-49,27}, -{83,-49,28}, -{83,-49,29}, -{83,-49,30}, -{83,-49,31}, -{83,-49,32}, -{83,-49,33}, -{83,-49,34}, -{83,-49,35}, -{83,-49,36}, -{83,-49,37}, -{83,-49,38}, -{83,-49,39}, -{83,-49,40}, -{83,-49,41}, -{83,-49,42}, -{83,-49,43}, -{83,-49,44}, -{83,-49,45}, -{83,-49,46}, -{83,-49,47}, -{83,-49,48}, -{83,-49,49}, -{83,-49,50}, -{83,-49,51}, -{83,-49,52}, -{83,-49,53}, -{83,-49,54}, -{83,-49,55}, -{83,-49,56}, -{83,-49,57}, -{83,-49,58}, -{83,-49,59}, -{83,-49,60}, -{83,-49,61}, -{83,-49,62}, -{83,-49,63}, -{83,-49,64}, -{83,-49,65}, -{83,-49,66}, -{83,-49,67}, -{83,-49,68}, -{83,-49,69}, -{83,-49,70}, -{83,-49,71}, -{83,-49,72}, -{83,-49,73}, -{83,-49,74}, -{83,-49,75}, -{83,-49,76}, -{83,-49,77}, -{83,-49,78}, -{83,-49,79}, -{83,-49,80}, -{83,-49,81}, -{83,-48,-7}, -{83,-48,-6}, -{83,-48,-5}, -{83,-48,-4}, -{83,-48,-3}, -{83,-48,-2}, -{83,-48,-1}, -{83,-48,0}, -{83,-48,1}, -{83,-48,2}, -{83,-48,3}, -{83,-48,4}, -{83,-48,5}, -{83,-48,6}, -{83,-48,7}, -{83,-48,8}, -{83,-48,9}, -{83,-48,10}, -{83,-48,11}, -{83,-48,12}, -{83,-48,13}, -{83,-48,14}, -{83,-48,15}, -{83,-48,16}, -{83,-48,17}, -{83,-48,18}, -{83,-48,19}, -{83,-48,20}, -{83,-48,21}, -{83,-48,22}, -{83,-48,23}, -{83,-48,24}, -{83,-48,25}, -{83,-48,26}, -{83,-48,27}, -{83,-48,28}, -{83,-48,29}, -{83,-48,30}, -{83,-48,31}, -{83,-48,32}, -{83,-48,33}, -{83,-48,34}, -{83,-48,35}, -{83,-48,36}, -{83,-48,37}, -{83,-48,38}, -{83,-48,39}, -{83,-48,40}, -{83,-48,41}, -{83,-48,42}, -{83,-48,43}, -{83,-48,44}, -{83,-48,45}, -{83,-48,46}, -{83,-48,47}, -{83,-48,48}, -{83,-48,49}, -{83,-48,50}, -{83,-48,51}, -{83,-48,52}, -{83,-48,53}, -{83,-48,54}, -{83,-48,55}, -{83,-48,56}, -{83,-48,57}, -{83,-48,58}, -{83,-48,59}, -{83,-48,60}, -{83,-48,61}, -{83,-48,62}, -{83,-48,63}, -{83,-48,64}, -{83,-48,65}, -{83,-48,66}, -{83,-48,67}, -{83,-48,68}, -{83,-48,69}, -{83,-48,70}, -{83,-48,71}, -{83,-48,72}, -{83,-48,73}, -{83,-48,74}, -{83,-48,75}, -{83,-48,76}, -{83,-48,77}, -{83,-48,78}, -{83,-48,79}, -{83,-48,80}, -{83,-48,81}, -{83,-47,-9}, -{83,-47,-8}, -{83,-47,-7}, -{83,-47,-6}, -{83,-47,-5}, -{83,-47,-4}, -{83,-47,-3}, -{83,-47,-2}, -{83,-47,-1}, -{83,-47,0}, -{83,-47,1}, -{83,-47,2}, -{83,-47,3}, -{83,-47,4}, -{83,-47,5}, -{83,-47,6}, -{83,-47,7}, -{83,-47,8}, -{83,-47,9}, -{83,-47,10}, -{83,-47,11}, -{83,-47,12}, -{83,-47,13}, -{83,-47,14}, -{83,-47,15}, -{83,-47,16}, -{83,-47,17}, -{83,-47,18}, -{83,-47,19}, -{83,-47,20}, -{83,-47,21}, -{83,-47,22}, -{83,-47,23}, -{83,-47,24}, -{83,-47,25}, -{83,-47,26}, -{83,-47,27}, -{83,-47,28}, -{83,-47,29}, -{83,-47,30}, -{83,-47,31}, -{83,-47,32}, -{83,-47,33}, -{83,-47,34}, -{83,-47,35}, -{83,-47,36}, -{83,-47,37}, -{83,-47,38}, -{83,-47,39}, -{83,-47,40}, -{83,-47,41}, -{83,-47,42}, -{83,-47,43}, -{83,-47,44}, -{83,-47,45}, -{83,-47,46}, -{83,-47,47}, -{83,-47,48}, -{83,-47,49}, -{83,-47,50}, -{83,-47,51}, -{83,-47,52}, -{83,-47,53}, -{83,-47,54}, -{83,-47,55}, -{83,-47,56}, -{83,-47,57}, -{83,-47,58}, -{83,-47,59}, -{83,-47,60}, -{83,-47,61}, -{83,-47,62}, -{83,-47,63}, -{83,-47,64}, -{83,-47,65}, -{83,-47,66}, -{83,-47,67}, -{83,-47,68}, -{83,-47,69}, -{83,-47,70}, -{83,-47,71}, -{83,-47,72}, -{83,-47,73}, -{83,-47,74}, -{83,-47,75}, -{83,-47,76}, -{83,-47,77}, -{83,-47,78}, -{83,-47,79}, -{83,-47,80}, -{83,-47,81}, -{83,-46,-10}, -{83,-46,-9}, -{83,-46,-8}, -{83,-46,-7}, -{83,-46,-6}, -{83,-46,-5}, -{83,-46,-4}, -{83,-46,-3}, -{83,-46,-2}, -{83,-46,-1}, -{83,-46,0}, -{83,-46,1}, -{83,-46,2}, -{83,-46,3}, -{83,-46,4}, -{83,-46,5}, -{83,-46,6}, -{83,-46,7}, -{83,-46,8}, -{83,-46,9}, -{83,-46,10}, -{83,-46,11}, -{83,-46,12}, -{83,-46,13}, -{83,-46,14}, -{83,-46,15}, -{83,-46,16}, -{83,-46,17}, -{83,-46,18}, -{83,-46,19}, -{83,-46,20}, -{83,-46,21}, -{83,-46,22}, -{83,-46,23}, -{83,-46,24}, -{83,-46,25}, -{83,-46,26}, -{83,-46,27}, -{83,-46,28}, -{83,-46,29}, -{83,-46,30}, -{83,-46,31}, -{83,-46,32}, -{83,-46,33}, -{83,-46,34}, -{83,-46,35}, -{83,-46,36}, -{83,-46,37}, -{83,-46,38}, -{83,-46,39}, -{83,-46,40}, -{83,-46,41}, -{83,-46,42}, -{83,-46,43}, -{83,-46,44}, -{83,-46,45}, -{83,-46,46}, -{83,-46,47}, -{83,-46,48}, -{83,-46,49}, -{83,-46,50}, -{83,-46,51}, -{83,-46,52}, -{83,-46,53}, -{83,-46,54}, -{83,-46,55}, -{83,-46,56}, -{83,-46,57}, -{83,-46,58}, -{83,-46,59}, -{83,-46,60}, -{83,-46,61}, -{83,-46,62}, -{83,-46,63}, -{83,-46,64}, -{83,-46,65}, -{83,-46,66}, -{83,-46,67}, -{83,-46,68}, -{83,-46,69}, -{83,-46,70}, -{83,-46,71}, -{83,-46,72}, -{83,-46,73}, -{83,-46,74}, -{83,-46,75}, -{83,-46,76}, -{83,-46,77}, -{83,-46,78}, -{83,-46,79}, -{83,-46,80}, -{83,-46,81}, -{83,-45,-12}, -{83,-45,-11}, -{83,-45,-10}, -{83,-45,-9}, -{83,-45,-8}, -{83,-45,-7}, -{83,-45,-6}, -{83,-45,-5}, -{83,-45,-4}, -{83,-45,-3}, -{83,-45,-2}, -{83,-45,-1}, -{83,-45,0}, -{83,-45,1}, -{83,-45,2}, -{83,-45,3}, -{83,-45,4}, -{83,-45,5}, -{83,-45,6}, -{83,-45,7}, -{83,-45,8}, -{83,-45,9}, -{83,-45,10}, -{83,-45,11}, -{83,-45,12}, -{83,-45,13}, -{83,-45,14}, -{83,-45,15}, -{83,-45,16}, -{83,-45,17}, -{83,-45,18}, -{83,-45,19}, -{83,-45,20}, -{83,-45,21}, -{83,-45,22}, -{83,-45,23}, -{83,-45,24}, -{83,-45,25}, -{83,-45,26}, -{83,-45,27}, -{83,-45,28}, -{83,-45,29}, -{83,-45,30}, -{83,-45,31}, -{83,-45,32}, -{83,-45,33}, -{83,-45,34}, -{83,-45,35}, -{83,-45,36}, -{83,-45,37}, -{83,-45,38}, -{83,-45,39}, -{83,-45,40}, -{83,-45,41}, -{83,-45,42}, -{83,-45,43}, -{83,-45,44}, -{83,-45,45}, -{83,-45,46}, -{83,-45,47}, -{83,-45,48}, -{83,-45,49}, -{83,-45,50}, -{83,-45,51}, -{83,-45,52}, -{83,-45,53}, -{83,-45,54}, -{83,-45,55}, -{83,-45,56}, -{83,-45,57}, -{83,-45,58}, -{83,-45,59}, -{83,-45,60}, -{83,-45,61}, -{83,-45,62}, -{83,-45,63}, -{83,-45,64}, -{83,-45,65}, -{83,-45,66}, -{83,-45,67}, -{83,-45,68}, -{83,-45,69}, -{83,-45,70}, -{83,-45,71}, -{83,-45,72}, -{83,-45,73}, -{83,-45,74}, -{83,-45,75}, -{83,-45,76}, -{83,-45,77}, -{83,-45,78}, -{83,-45,79}, -{83,-45,80}, -{83,-45,81}, -{83,-44,-14}, -{83,-44,-13}, -{83,-44,-12}, -{83,-44,-11}, -{83,-44,-10}, -{83,-44,-9}, -{83,-44,-8}, -{83,-44,-7}, -{83,-44,-6}, -{83,-44,-5}, -{83,-44,-4}, -{83,-44,-3}, -{83,-44,-2}, -{83,-44,-1}, -{83,-44,0}, -{83,-44,1}, -{83,-44,2}, -{83,-44,3}, -{83,-44,4}, -{83,-44,5}, -{83,-44,6}, -{83,-44,7}, -{83,-44,8}, -{83,-44,9}, -{83,-44,10}, -{83,-44,11}, -{83,-44,12}, -{83,-44,13}, -{83,-44,14}, -{83,-44,15}, -{83,-44,16}, -{83,-44,17}, -{83,-44,18}, -{83,-44,19}, -{83,-44,20}, -{83,-44,21}, -{83,-44,22}, -{83,-44,23}, -{83,-44,24}, -{83,-44,25}, -{83,-44,26}, -{83,-44,27}, -{83,-44,28}, -{83,-44,29}, -{83,-44,30}, -{83,-44,31}, -{83,-44,32}, -{83,-44,33}, -{83,-44,34}, -{83,-44,35}, -{83,-44,36}, -{83,-44,37}, -{83,-44,38}, -{83,-44,39}, -{83,-44,40}, -{83,-44,41}, -{83,-44,42}, -{83,-44,43}, -{83,-44,44}, -{83,-44,45}, -{83,-44,46}, -{83,-44,47}, -{83,-44,48}, -{83,-44,49}, -{83,-44,50}, -{83,-44,51}, -{83,-44,52}, -{83,-44,53}, -{83,-44,54}, -{83,-44,55}, -{83,-44,56}, -{83,-44,57}, -{83,-44,58}, -{83,-44,59}, -{83,-44,60}, -{83,-44,61}, -{83,-44,62}, -{83,-44,63}, -{83,-44,64}, -{83,-44,65}, -{83,-44,66}, -{83,-44,67}, -{83,-44,68}, -{83,-44,69}, -{83,-44,70}, -{83,-44,71}, -{83,-44,72}, -{83,-44,73}, -{83,-44,74}, -{83,-44,75}, -{83,-44,76}, -{83,-44,77}, -{83,-44,78}, -{83,-44,79}, -{83,-44,80}, -{83,-44,81}, -{83,-43,-15}, -{83,-43,-14}, -{83,-43,-13}, -{83,-43,-12}, -{83,-43,-11}, -{83,-43,-10}, -{83,-43,-9}, -{83,-43,-8}, -{83,-43,-7}, -{83,-43,-6}, -{83,-43,-5}, -{83,-43,-4}, -{83,-43,-3}, -{83,-43,-2}, -{83,-43,-1}, -{83,-43,0}, -{83,-43,1}, -{83,-43,2}, -{83,-43,3}, -{83,-43,4}, -{83,-43,5}, -{83,-43,6}, -{83,-43,7}, -{83,-43,8}, -{83,-43,9}, -{83,-43,10}, -{83,-43,11}, -{83,-43,12}, -{83,-43,13}, -{83,-43,14}, -{83,-43,15}, -{83,-43,16}, -{83,-43,17}, -{83,-43,18}, -{83,-43,19}, -{83,-43,20}, -{83,-43,21}, -{83,-43,22}, -{83,-43,23}, -{83,-43,24}, -{83,-43,25}, -{83,-43,26}, -{83,-43,27}, -{83,-43,28}, -{83,-43,29}, -{83,-43,30}, -{83,-43,31}, -{83,-43,32}, -{83,-43,33}, -{83,-43,34}, -{83,-43,35}, -{83,-43,36}, -{83,-43,37}, -{83,-43,38}, -{83,-43,39}, -{83,-43,40}, -{83,-43,41}, -{83,-43,42}, -{83,-43,43}, -{83,-43,44}, -{83,-43,45}, -{83,-43,46}, -{83,-43,47}, -{83,-43,48}, -{83,-43,49}, -{83,-43,50}, -{83,-43,51}, -{83,-43,52}, -{83,-43,53}, -{83,-43,54}, -{83,-43,55}, -{83,-43,56}, -{83,-43,57}, -{83,-43,58}, -{83,-43,59}, -{83,-43,60}, -{83,-43,61}, -{83,-43,62}, -{83,-43,63}, -{83,-43,64}, -{83,-43,65}, -{83,-43,66}, -{83,-43,67}, -{83,-43,68}, -{83,-43,69}, -{83,-43,70}, -{83,-43,71}, -{83,-43,72}, -{83,-43,73}, -{83,-43,74}, -{83,-43,75}, -{83,-43,76}, -{83,-43,77}, -{83,-43,78}, -{83,-43,79}, -{83,-43,80}, -{83,-43,81}, -{83,-42,-17}, -{83,-42,-16}, -{83,-42,-15}, -{83,-42,-14}, -{83,-42,-13}, -{83,-42,-12}, -{83,-42,-11}, -{83,-42,-10}, -{83,-42,-9}, -{83,-42,-8}, -{83,-42,-7}, -{83,-42,-6}, -{83,-42,-5}, -{83,-42,-4}, -{83,-42,-3}, -{83,-42,-2}, -{83,-42,-1}, -{83,-42,0}, -{83,-42,1}, -{83,-42,2}, -{83,-42,3}, -{83,-42,4}, -{83,-42,5}, -{83,-42,6}, -{83,-42,7}, -{83,-42,8}, -{83,-42,9}, -{83,-42,10}, -{83,-42,11}, -{83,-42,12}, -{83,-42,13}, -{83,-42,14}, -{83,-42,15}, -{83,-42,16}, -{83,-42,17}, -{83,-42,18}, -{83,-42,19}, -{83,-42,20}, -{83,-42,21}, -{83,-42,22}, -{83,-42,23}, -{83,-42,24}, -{83,-42,25}, -{83,-42,26}, -{83,-42,27}, -{83,-42,28}, -{83,-42,29}, -{83,-42,30}, -{83,-42,31}, -{83,-42,32}, -{83,-42,33}, -{83,-42,34}, -{83,-42,35}, -{83,-42,36}, -{83,-42,37}, -{83,-42,38}, -{83,-42,39}, -{83,-42,40}, -{83,-42,41}, -{83,-42,42}, -{83,-42,43}, -{83,-42,44}, -{83,-42,45}, -{83,-42,46}, -{83,-42,47}, -{83,-42,48}, -{83,-42,49}, -{83,-42,50}, -{83,-42,51}, -{83,-42,52}, -{83,-42,53}, -{83,-42,54}, -{83,-42,55}, -{83,-42,56}, -{83,-42,57}, -{83,-42,58}, -{83,-42,59}, -{83,-42,60}, -{83,-42,61}, -{83,-42,62}, -{83,-42,63}, -{83,-42,64}, -{83,-42,65}, -{83,-42,66}, -{83,-42,67}, -{83,-42,68}, -{83,-42,69}, -{83,-42,70}, -{83,-42,71}, -{83,-42,72}, -{83,-42,73}, -{83,-42,74}, -{83,-42,75}, -{83,-42,76}, -{83,-42,77}, -{83,-42,78}, -{83,-42,79}, -{83,-42,80}, -{83,-42,81}, -{83,-41,-18}, -{83,-41,-17}, -{83,-41,-16}, -{83,-41,-15}, -{83,-41,-14}, -{83,-41,-13}, -{83,-41,-12}, -{83,-41,-11}, -{83,-41,-10}, -{83,-41,-9}, -{83,-41,-8}, -{83,-41,-7}, -{83,-41,-6}, -{83,-41,-5}, -{83,-41,-4}, -{83,-41,-3}, -{83,-41,-2}, -{83,-41,-1}, -{83,-41,0}, -{83,-41,1}, -{83,-41,2}, -{83,-41,3}, -{83,-41,4}, -{83,-41,5}, -{83,-41,6}, -{83,-41,7}, -{83,-41,8}, -{83,-41,9}, -{83,-41,10}, -{83,-41,11}, -{83,-41,12}, -{83,-41,13}, -{83,-41,14}, -{83,-41,15}, -{83,-41,16}, -{83,-41,17}, -{83,-41,18}, -{83,-41,19}, -{83,-41,20}, -{83,-41,21}, -{83,-41,22}, -{83,-41,23}, -{83,-41,24}, -{83,-41,25}, -{83,-41,26}, -{83,-41,27}, -{83,-41,28}, -{83,-41,29}, -{83,-41,30}, -{83,-41,31}, -{83,-41,32}, -{83,-41,33}, -{83,-41,34}, -{83,-41,35}, -{83,-41,36}, -{83,-41,37}, -{83,-41,38}, -{83,-41,39}, -{83,-41,40}, -{83,-41,41}, -{83,-41,42}, -{83,-41,43}, -{83,-41,44}, -{83,-41,45}, -{83,-41,46}, -{83,-41,47}, -{83,-41,48}, -{83,-41,49}, -{83,-41,50}, -{83,-41,51}, -{83,-41,52}, -{83,-41,53}, -{83,-41,54}, -{83,-41,55}, -{83,-41,56}, -{83,-41,57}, -{83,-41,58}, -{83,-41,59}, -{83,-41,60}, -{83,-41,61}, -{83,-41,62}, -{83,-41,63}, -{83,-41,64}, -{83,-41,65}, -{83,-41,66}, -{83,-41,67}, -{83,-41,68}, -{83,-41,69}, -{83,-41,70}, -{83,-41,71}, -{83,-41,72}, -{83,-41,73}, -{83,-41,74}, -{83,-41,75}, -{83,-41,76}, -{83,-41,77}, -{83,-41,78}, -{83,-41,79}, -{83,-41,80}, -{83,-41,81}, -{83,-40,-20}, -{83,-40,-19}, -{83,-40,-18}, -{83,-40,-17}, -{83,-40,-16}, -{83,-40,-15}, -{83,-40,-14}, -{83,-40,-13}, -{83,-40,-12}, -{83,-40,-11}, -{83,-40,-10}, -{83,-40,-9}, -{83,-40,-8}, -{83,-40,-7}, -{83,-40,-6}, -{83,-40,-5}, -{83,-40,-4}, -{83,-40,-3}, -{83,-40,-2}, -{83,-40,-1}, -{83,-40,0}, -{83,-40,1}, -{83,-40,2}, -{83,-40,3}, -{83,-40,4}, -{83,-40,5}, -{83,-40,6}, -{83,-40,7}, -{83,-40,8}, -{83,-40,9}, -{83,-40,10}, -{83,-40,11}, -{83,-40,12}, -{83,-40,13}, -{83,-40,14}, -{83,-40,15}, -{83,-40,16}, -{83,-40,17}, -{83,-40,18}, -{83,-40,19}, -{83,-40,20}, -{83,-40,21}, -{83,-40,22}, -{83,-40,23}, -{83,-40,24}, -{83,-40,25}, -{83,-40,26}, -{83,-40,27}, -{83,-40,28}, -{83,-40,29}, -{83,-40,30}, -{83,-40,31}, -{83,-40,32}, -{83,-40,33}, -{83,-40,34}, -{83,-40,35}, -{83,-40,36}, -{83,-40,37}, -{83,-40,38}, -{83,-40,39}, -{83,-40,40}, -{83,-40,41}, -{83,-40,42}, -{83,-40,43}, -{83,-40,44}, -{83,-40,45}, -{83,-40,46}, -{83,-40,47}, -{83,-40,48}, -{83,-40,49}, -{83,-40,50}, -{83,-40,51}, -{83,-40,52}, -{83,-40,53}, -{83,-40,54}, -{83,-40,55}, -{83,-40,56}, -{83,-40,57}, -{83,-40,58}, -{83,-40,59}, -{83,-40,60}, -{83,-40,61}, -{83,-40,62}, -{83,-40,63}, -{83,-40,64}, -{83,-40,65}, -{83,-40,66}, -{83,-40,67}, -{83,-40,68}, -{83,-40,69}, -{83,-40,70}, -{83,-40,71}, -{83,-40,72}, -{83,-40,73}, -{83,-40,74}, -{83,-40,75}, -{83,-40,76}, -{83,-40,77}, -{83,-40,78}, -{83,-40,79}, -{83,-40,80}, -{83,-40,81}, -{83,-39,-21}, -{83,-39,-20}, -{83,-39,-19}, -{83,-39,-18}, -{83,-39,-17}, -{83,-39,-16}, -{83,-39,-15}, -{83,-39,-14}, -{83,-39,-13}, -{83,-39,-12}, -{83,-39,-11}, -{83,-39,-10}, -{83,-39,-9}, -{83,-39,-8}, -{83,-39,-7}, -{83,-39,-6}, -{83,-39,-5}, -{83,-39,-4}, -{83,-39,-3}, -{83,-39,-2}, -{83,-39,-1}, -{83,-39,0}, -{83,-39,1}, -{83,-39,2}, -{83,-39,3}, -{83,-39,4}, -{83,-39,5}, -{83,-39,6}, -{83,-39,7}, -{83,-39,8}, -{83,-39,9}, -{83,-39,10}, -{83,-39,11}, -{83,-39,12}, -{83,-39,13}, -{83,-39,14}, -{83,-39,15}, -{83,-39,16}, -{83,-39,17}, -{83,-39,18}, -{83,-39,19}, -{83,-39,20}, -{83,-39,21}, -{83,-39,22}, -{83,-39,23}, -{83,-39,24}, -{83,-39,25}, -{83,-39,26}, -{83,-39,27}, -{83,-39,28}, -{83,-39,29}, -{83,-39,30}, -{83,-39,31}, -{83,-39,32}, -{83,-39,33}, -{83,-39,34}, -{83,-39,35}, -{83,-39,36}, -{83,-39,37}, -{83,-39,38}, -{83,-39,39}, -{83,-39,40}, -{83,-39,41}, -{83,-39,42}, -{83,-39,43}, -{83,-39,44}, -{83,-39,45}, -{83,-39,46}, -{83,-39,47}, -{83,-39,48}, -{83,-39,49}, -{83,-39,50}, -{83,-39,51}, -{83,-39,52}, -{83,-39,53}, -{83,-39,54}, -{83,-39,55}, -{83,-39,56}, -{83,-39,57}, -{83,-39,58}, -{83,-39,59}, -{83,-39,60}, -{83,-39,61}, -{83,-39,62}, -{83,-39,63}, -{83,-39,64}, -{83,-39,65}, -{83,-39,66}, -{83,-39,67}, -{83,-39,68}, -{83,-39,69}, -{83,-39,70}, -{83,-39,71}, -{83,-39,72}, -{83,-39,73}, -{83,-39,74}, -{83,-39,75}, -{83,-39,76}, -{83,-39,77}, -{83,-39,78}, -{83,-39,79}, -{83,-39,80}, -{83,-39,81}, -{83,-38,-23}, -{83,-38,-22}, -{83,-38,-21}, -{83,-38,-20}, -{83,-38,-19}, -{83,-38,-18}, -{83,-38,-17}, -{83,-38,-16}, -{83,-38,-15}, -{83,-38,-14}, -{83,-38,-13}, -{83,-38,-12}, -{83,-38,-11}, -{83,-38,-10}, -{83,-38,-9}, -{83,-38,-8}, -{83,-38,-7}, -{83,-38,-6}, -{83,-38,-5}, -{83,-38,-4}, -{83,-38,-3}, -{83,-38,-2}, -{83,-38,-1}, -{83,-38,0}, -{83,-38,1}, -{83,-38,2}, -{83,-38,3}, -{83,-38,4}, -{83,-38,5}, -{83,-38,6}, -{83,-38,7}, -{83,-38,8}, -{83,-38,9}, -{83,-38,10}, -{83,-38,11}, -{83,-38,12}, -{83,-38,13}, -{83,-38,14}, -{83,-38,15}, -{83,-38,16}, -{83,-38,17}, -{83,-38,18}, -{83,-38,19}, -{83,-38,20}, -{83,-38,21}, -{83,-38,22}, -{83,-38,23}, -{83,-38,24}, -{83,-38,25}, -{83,-38,26}, -{83,-38,27}, -{83,-38,28}, -{83,-38,29}, -{83,-38,30}, -{83,-38,31}, -{83,-38,32}, -{83,-38,33}, -{83,-38,34}, -{83,-38,35}, -{83,-38,36}, -{83,-38,37}, -{83,-38,38}, -{83,-38,39}, -{83,-38,40}, -{83,-38,41}, -{83,-38,42}, -{83,-38,43}, -{83,-38,44}, -{83,-38,45}, -{83,-38,46}, -{83,-38,47}, -{83,-38,48}, -{83,-38,49}, -{83,-38,50}, -{83,-38,51}, -{83,-38,52}, -{83,-38,53}, -{83,-38,54}, -{83,-38,55}, -{83,-38,56}, -{83,-38,57}, -{83,-38,58}, -{83,-38,59}, -{83,-38,60}, -{83,-38,61}, -{83,-38,62}, -{83,-38,63}, -{83,-38,64}, -{83,-38,65}, -{83,-38,66}, -{83,-38,67}, -{83,-38,68}, -{83,-38,69}, -{83,-38,70}, -{83,-38,71}, -{83,-38,72}, -{83,-38,73}, -{83,-38,74}, -{83,-38,75}, -{83,-38,76}, -{83,-38,77}, -{83,-38,78}, -{83,-38,79}, -{83,-38,80}, -{83,-38,81}, -{83,-37,-24}, -{83,-37,-23}, -{83,-37,-22}, -{83,-37,-21}, -{83,-37,-20}, -{83,-37,-19}, -{83,-37,-18}, -{83,-37,-17}, -{83,-37,-16}, -{83,-37,-15}, -{83,-37,-14}, -{83,-37,-13}, -{83,-37,-12}, -{83,-37,-11}, -{83,-37,-10}, -{83,-37,-9}, -{83,-37,-8}, -{83,-37,-7}, -{83,-37,-6}, -{83,-37,-5}, -{83,-37,-4}, -{83,-37,-3}, -{83,-37,-2}, -{83,-37,-1}, -{83,-37,0}, -{83,-37,1}, -{83,-37,2}, -{83,-37,3}, -{83,-37,4}, -{83,-37,5}, -{83,-37,6}, -{83,-37,7}, -{83,-37,8}, -{83,-37,9}, -{83,-37,10}, -{83,-37,11}, -{83,-37,12}, -{83,-37,13}, -{83,-37,14}, -{83,-37,15}, -{83,-37,16}, -{83,-37,17}, -{83,-37,18}, -{83,-37,19}, -{83,-37,20}, -{83,-37,21}, -{83,-37,22}, -{83,-37,23}, -{83,-37,24}, -{83,-37,25}, -{83,-37,26}, -{83,-37,27}, -{83,-37,28}, -{83,-37,29}, -{83,-37,30}, -{83,-37,31}, -{83,-37,32}, -{83,-37,33}, -{83,-37,34}, -{83,-37,35}, -{83,-37,36}, -{83,-37,37}, -{83,-37,38}, -{83,-37,39}, -{83,-37,40}, -{83,-37,41}, -{83,-37,42}, -{83,-37,43}, -{83,-37,44}, -{83,-37,45}, -{83,-37,46}, -{83,-37,47}, -{83,-37,48}, -{83,-37,49}, -{83,-37,50}, -{83,-37,51}, -{83,-37,52}, -{83,-37,53}, -{83,-37,54}, -{83,-37,55}, -{83,-37,56}, -{83,-37,57}, -{83,-37,58}, -{83,-37,59}, -{83,-37,60}, -{83,-37,61}, -{83,-37,62}, -{83,-37,63}, -{83,-37,64}, -{83,-37,65}, -{83,-37,66}, -{83,-37,67}, -{83,-37,68}, -{83,-37,69}, -{83,-37,70}, -{83,-37,71}, -{83,-37,72}, -{83,-37,73}, -{83,-37,74}, -{83,-37,75}, -{83,-37,76}, -{83,-37,77}, -{83,-37,78}, -{83,-37,79}, -{83,-37,80}, -{83,-37,81}, -{83,-36,-25}, -{83,-36,-24}, -{83,-36,-23}, -{83,-36,-22}, -{83,-36,-21}, -{83,-36,-20}, -{83,-36,-19}, -{83,-36,-18}, -{83,-36,-17}, -{83,-36,-16}, -{83,-36,-15}, -{83,-36,-14}, -{83,-36,-13}, -{83,-36,-12}, -{83,-36,-11}, -{83,-36,-10}, -{83,-36,-9}, -{83,-36,-8}, -{83,-36,-7}, -{83,-36,-6}, -{83,-36,-5}, -{83,-36,-4}, -{83,-36,-3}, -{83,-36,-2}, -{83,-36,-1}, -{83,-36,0}, -{83,-36,1}, -{83,-36,2}, -{83,-36,3}, -{83,-36,4}, -{83,-36,5}, -{83,-36,6}, -{83,-36,7}, -{83,-36,8}, -{83,-36,9}, -{83,-36,10}, -{83,-36,11}, -{83,-36,12}, -{83,-36,13}, -{83,-36,14}, -{83,-36,15}, -{83,-36,16}, -{83,-36,17}, -{83,-36,18}, -{83,-36,19}, -{83,-36,20}, -{83,-36,21}, -{83,-36,22}, -{83,-36,23}, -{83,-36,24}, -{83,-36,25}, -{83,-36,26}, -{83,-36,27}, -{83,-36,28}, -{83,-36,29}, -{83,-36,30}, -{83,-36,31}, -{83,-36,32}, -{83,-36,33}, -{83,-36,34}, -{83,-36,35}, -{83,-36,36}, -{83,-36,37}, -{83,-36,38}, -{83,-36,39}, -{83,-36,40}, -{83,-36,41}, -{83,-36,42}, -{83,-36,43}, -{83,-36,44}, -{83,-36,45}, -{83,-36,46}, -{83,-36,47}, -{83,-36,48}, -{83,-36,49}, -{83,-36,50}, -{83,-36,51}, -{83,-36,52}, -{83,-36,53}, -{83,-36,54}, -{83,-36,55}, -{83,-36,56}, -{83,-36,57}, -{83,-36,58}, -{83,-36,59}, -{83,-36,60}, -{83,-36,61}, -{83,-36,62}, -{83,-36,63}, -{83,-36,64}, -{83,-36,65}, -{83,-36,66}, -{83,-36,67}, -{83,-36,68}, -{83,-36,69}, -{83,-36,70}, -{83,-36,71}, -{83,-36,72}, -{83,-36,73}, -{83,-36,74}, -{83,-36,75}, -{83,-36,76}, -{83,-36,77}, -{83,-36,78}, -{83,-36,79}, -{83,-36,80}, -{83,-36,81}, -{83,-35,-26}, -{83,-35,-25}, -{83,-35,-24}, -{83,-35,-23}, -{83,-35,-22}, -{83,-35,-21}, -{83,-35,-20}, -{83,-35,-19}, -{83,-35,-18}, -{83,-35,-17}, -{83,-35,-16}, -{83,-35,-15}, -{83,-35,-14}, -{83,-35,-13}, -{83,-35,-12}, -{83,-35,-11}, -{83,-35,-10}, -{83,-35,-9}, -{83,-35,-8}, -{83,-35,-7}, -{83,-35,-6}, -{83,-35,-5}, -{83,-35,-4}, -{83,-35,-3}, -{83,-35,-2}, -{83,-35,-1}, -{83,-35,0}, -{83,-35,1}, -{83,-35,2}, -{83,-35,3}, -{83,-35,4}, -{83,-35,5}, -{83,-35,6}, -{83,-35,7}, -{83,-35,8}, -{83,-35,9}, -{83,-35,10}, -{83,-35,11}, -{83,-35,12}, -{83,-35,13}, -{83,-35,14}, -{83,-35,15}, -{83,-35,16}, -{83,-35,17}, -{83,-35,18}, -{83,-35,19}, -{83,-35,20}, -{83,-35,21}, -{83,-35,22}, -{83,-35,23}, -{83,-35,24}, -{83,-35,25}, -{83,-35,26}, -{83,-35,27}, -{83,-35,28}, -{83,-35,29}, -{83,-35,30}, -{83,-35,31}, -{83,-35,32}, -{83,-35,33}, -{83,-35,34}, -{83,-35,35}, -{83,-35,36}, -{83,-35,37}, -{83,-35,38}, -{83,-35,39}, -{83,-35,40}, -{83,-35,41}, -{83,-35,42}, -{83,-35,43}, -{83,-35,44}, -{83,-35,45}, -{83,-35,46}, -{83,-35,47}, -{83,-35,48}, -{83,-35,49}, -{83,-35,50}, -{83,-35,51}, -{83,-35,52}, -{83,-35,53}, -{83,-35,54}, -{83,-35,55}, -{83,-35,56}, -{83,-35,57}, -{83,-35,58}, -{83,-35,59}, -{83,-35,60}, -{83,-35,61}, -{83,-35,62}, -{83,-35,63}, -{83,-35,64}, -{83,-35,65}, -{83,-35,66}, -{83,-35,67}, -{83,-35,68}, -{83,-35,69}, -{83,-35,70}, -{83,-35,71}, -{83,-35,72}, -{83,-35,73}, -{83,-35,74}, -{83,-35,75}, -{83,-35,76}, -{83,-35,77}, -{83,-35,78}, -{83,-35,79}, -{83,-35,80}, -{83,-35,81}, -{83,-34,-26}, -{83,-34,-25}, -{83,-34,-24}, -{83,-34,-23}, -{83,-34,-22}, -{83,-34,-21}, -{83,-34,-20}, -{83,-34,-19}, -{83,-34,-18}, -{83,-34,-17}, -{83,-34,-16}, -{83,-34,-15}, -{83,-34,-14}, -{83,-34,-13}, -{83,-34,-12}, -{83,-34,-11}, -{83,-34,-10}, -{83,-34,-9}, -{83,-34,-8}, -{83,-34,-7}, -{83,-34,-6}, -{83,-34,-5}, -{83,-34,-4}, -{83,-34,-3}, -{83,-34,-2}, -{83,-34,-1}, -{83,-34,0}, -{83,-34,1}, -{83,-34,2}, -{83,-34,3}, -{83,-34,4}, -{83,-34,5}, -{83,-34,6}, -{83,-34,7}, -{83,-34,8}, -{83,-34,9}, -{83,-34,10}, -{83,-34,11}, -{83,-34,12}, -{83,-34,13}, -{83,-34,14}, -{83,-34,15}, -{83,-34,16}, -{83,-34,17}, -{83,-34,18}, -{83,-34,19}, -{83,-34,20}, -{83,-34,21}, -{83,-34,22}, -{83,-34,23}, -{83,-34,24}, -{83,-34,25}, -{83,-34,26}, -{83,-34,27}, -{83,-34,28}, -{83,-34,29}, -{83,-34,30}, -{83,-34,31}, -{83,-34,32}, -{83,-34,33}, -{83,-34,34}, -{83,-34,35}, -{83,-34,36}, -{83,-34,37}, -{83,-34,38}, -{83,-34,39}, -{83,-34,40}, -{83,-34,41}, -{83,-34,42}, -{83,-34,43}, -{83,-34,44}, -{83,-34,45}, -{83,-34,46}, -{83,-34,47}, -{83,-34,48}, -{83,-34,49}, -{83,-34,50}, -{83,-34,51}, -{83,-34,52}, -{83,-34,53}, -{83,-34,54}, -{83,-34,55}, -{83,-34,56}, -{83,-34,57}, -{83,-34,58}, -{83,-34,59}, -{83,-34,60}, -{83,-34,61}, -{83,-34,62}, -{83,-34,63}, -{83,-34,64}, -{83,-34,65}, -{83,-34,66}, -{83,-34,67}, -{83,-34,68}, -{83,-34,69}, -{83,-34,70}, -{83,-34,71}, -{83,-34,72}, -{83,-34,73}, -{83,-34,74}, -{83,-34,75}, -{83,-34,76}, -{83,-34,77}, -{83,-34,78}, -{83,-34,79}, -{83,-34,80}, -{83,-34,81}, -{83,-33,-26}, -{83,-33,-25}, -{83,-33,-24}, -{83,-33,-23}, -{83,-33,-22}, -{83,-33,-21}, -{83,-33,-20}, -{83,-33,-19}, -{83,-33,-18}, -{83,-33,-17}, -{83,-33,-16}, -{83,-33,-15}, -{83,-33,-14}, -{83,-33,-13}, -{83,-33,-12}, -{83,-33,-11}, -{83,-33,-10}, -{83,-33,-9}, -{83,-33,-8}, -{83,-33,-7}, -{83,-33,-6}, -{83,-33,-5}, -{83,-33,-4}, -{83,-33,-3}, -{83,-33,-2}, -{83,-33,-1}, -{83,-33,0}, -{83,-33,1}, -{83,-33,2}, -{83,-33,3}, -{83,-33,4}, -{83,-33,5}, -{83,-33,6}, -{83,-33,7}, -{83,-33,8}, -{83,-33,9}, -{83,-33,10}, -{83,-33,11}, -{83,-33,12}, -{83,-33,13}, -{83,-33,14}, -{83,-33,15}, -{83,-33,16}, -{83,-33,17}, -{83,-33,18}, -{83,-33,19}, -{83,-33,20}, -{83,-33,21}, -{83,-33,22}, -{83,-33,23}, -{83,-33,24}, -{83,-33,25}, -{83,-33,26}, -{83,-33,27}, -{83,-33,28}, -{83,-33,29}, -{83,-33,30}, -{83,-33,31}, -{83,-33,32}, -{83,-33,33}, -{83,-33,34}, -{83,-33,35}, -{83,-33,36}, -{83,-33,37}, -{83,-33,38}, -{83,-33,39}, -{83,-33,40}, -{83,-33,41}, -{83,-33,42}, -{83,-33,43}, -{83,-33,44}, -{83,-33,45}, -{83,-33,46}, -{83,-33,47}, -{83,-33,48}, -{83,-33,49}, -{83,-33,50}, -{83,-33,51}, -{83,-33,52}, -{83,-33,53}, -{83,-33,54}, -{83,-33,55}, -{83,-33,56}, -{83,-33,57}, -{83,-33,58}, -{83,-33,59}, -{83,-33,60}, -{83,-33,61}, -{83,-33,62}, -{83,-33,63}, -{83,-33,64}, -{83,-33,65}, -{83,-33,66}, -{83,-33,67}, -{83,-33,68}, -{83,-33,69}, -{83,-33,70}, -{83,-33,71}, -{83,-33,72}, -{83,-33,73}, -{83,-33,74}, -{83,-33,75}, -{83,-33,76}, -{83,-33,77}, -{83,-33,78}, -{83,-33,79}, -{83,-33,80}, -{83,-33,81}, -{83,-33,82}, -{83,-32,-26}, -{83,-32,-25}, -{83,-32,-24}, -{83,-32,-23}, -{83,-32,-22}, -{83,-32,-21}, -{83,-32,-20}, -{83,-32,-19}, -{83,-32,-18}, -{83,-32,-17}, -{83,-32,-16}, -{83,-32,-15}, -{83,-32,-14}, -{83,-32,-13}, -{83,-32,-12}, -{83,-32,-11}, -{83,-32,-10}, -{83,-32,-9}, -{83,-32,-8}, -{83,-32,-7}, -{83,-32,-6}, -{83,-32,-5}, -{83,-32,-4}, -{83,-32,-3}, -{83,-32,-2}, -{83,-32,-1}, -{83,-32,0}, -{83,-32,1}, -{83,-32,2}, -{83,-32,3}, -{83,-32,4}, -{83,-32,5}, -{83,-32,6}, -{83,-32,7}, -{83,-32,8}, -{83,-32,9}, -{83,-32,10}, -{83,-32,11}, -{83,-32,12}, -{83,-32,13}, -{83,-32,14}, -{83,-32,15}, -{83,-32,16}, -{83,-32,17}, -{83,-32,18}, -{83,-32,19}, -{83,-32,20}, -{83,-32,21}, -{83,-32,22}, -{83,-32,23}, -{83,-32,24}, -{83,-32,25}, -{83,-32,26}, -{83,-32,27}, -{83,-32,28}, -{83,-32,29}, -{83,-32,30}, -{83,-32,31}, -{83,-32,32}, -{83,-32,33}, -{83,-32,34}, -{83,-32,35}, -{83,-32,36}, -{83,-32,37}, -{83,-32,38}, -{83,-32,39}, -{83,-32,40}, -{83,-32,41}, -{83,-32,42}, -{83,-32,43}, -{83,-32,44}, -{83,-32,45}, -{83,-32,46}, -{83,-32,47}, -{83,-32,48}, -{83,-32,49}, -{83,-32,50}, -{83,-32,51}, -{83,-32,52}, -{83,-32,53}, -{83,-32,54}, -{83,-32,55}, -{83,-32,56}, -{83,-32,57}, -{83,-32,58}, -{83,-32,59}, -{83,-32,60}, -{83,-32,61}, -{83,-32,62}, -{83,-32,63}, -{83,-32,64}, -{83,-32,65}, -{83,-32,66}, -{83,-32,67}, -{83,-32,68}, -{83,-32,69}, -{83,-32,70}, -{83,-32,71}, -{83,-32,72}, -{83,-32,73}, -{83,-32,74}, -{83,-32,75}, -{83,-32,76}, -{83,-32,77}, -{83,-32,78}, -{83,-32,79}, -{83,-32,80}, -{83,-32,81}, -{83,-32,82}, -{83,-31,-26}, -{83,-31,-25}, -{83,-31,-24}, -{83,-31,-23}, -{83,-31,-22}, -{83,-31,-21}, -{83,-31,-20}, -{83,-31,-19}, -{83,-31,-18}, -{83,-31,-17}, -{83,-31,-16}, -{83,-31,-15}, -{83,-31,-14}, -{83,-31,-13}, -{83,-31,-12}, -{83,-31,-11}, -{83,-31,-10}, -{83,-31,-9}, -{83,-31,-8}, -{83,-31,-7}, -{83,-31,-6}, -{83,-31,-5}, -{83,-31,-4}, -{83,-31,-3}, -{83,-31,-2}, -{83,-31,-1}, -{83,-31,0}, -{83,-31,1}, -{83,-31,2}, -{83,-31,3}, -{83,-31,4}, -{83,-31,5}, -{83,-31,6}, -{83,-31,7}, -{83,-31,8}, -{83,-31,9}, -{83,-31,10}, -{83,-31,11}, -{83,-31,12}, -{83,-31,13}, -{83,-31,14}, -{83,-31,15}, -{83,-31,16}, -{83,-31,17}, -{83,-31,18}, -{83,-31,19}, -{83,-31,20}, -{83,-31,21}, -{83,-31,22}, -{83,-31,23}, -{83,-31,24}, -{83,-31,25}, -{83,-31,26}, -{83,-31,27}, -{83,-31,28}, -{83,-31,29}, -{83,-31,30}, -{83,-31,31}, -{83,-31,32}, -{83,-31,33}, -{83,-31,34}, -{83,-31,35}, -{83,-31,36}, -{83,-31,37}, -{83,-31,38}, -{83,-31,39}, -{83,-31,40}, -{83,-31,41}, -{83,-31,42}, -{83,-31,43}, -{83,-31,44}, -{83,-31,45}, -{83,-31,46}, -{83,-31,47}, -{83,-31,48}, -{83,-31,49}, -{83,-31,50}, -{83,-31,51}, -{83,-31,52}, -{83,-31,53}, -{83,-31,54}, -{83,-31,55}, -{83,-31,56}, -{83,-31,57}, -{83,-31,58}, -{83,-31,59}, -{83,-31,60}, -{83,-31,61}, -{83,-31,62}, -{83,-31,63}, -{83,-31,64}, -{83,-31,65}, -{83,-31,66}, -{83,-31,67}, -{83,-31,68}, -{83,-31,69}, -{83,-31,70}, -{83,-31,71}, -{83,-31,72}, -{83,-31,73}, -{83,-31,74}, -{83,-31,75}, -{83,-31,76}, -{83,-31,77}, -{83,-31,78}, -{83,-31,79}, -{83,-31,80}, -{83,-31,81}, -{83,-31,82}, -{83,-30,-26}, -{83,-30,-25}, -{83,-30,-24}, -{83,-30,-23}, -{83,-30,-22}, -{83,-30,-21}, -{83,-30,-20}, -{83,-30,-19}, -{83,-30,-18}, -{83,-30,-17}, -{83,-30,-16}, -{83,-30,-15}, -{83,-30,-14}, -{83,-30,-13}, -{83,-30,-12}, -{83,-30,-11}, -{83,-30,-10}, -{83,-30,-9}, -{83,-30,-8}, -{83,-30,-7}, -{83,-30,-6}, -{83,-30,-5}, -{83,-30,-4}, -{83,-30,-3}, -{83,-30,-2}, -{83,-30,-1}, -{83,-30,0}, -{83,-30,1}, -{83,-30,2}, -{83,-30,3}, -{83,-30,4}, -{83,-30,5}, -{83,-30,6}, -{83,-30,7}, -{83,-30,8}, -{83,-30,9}, -{83,-30,10}, -{83,-30,11}, -{83,-30,12}, -{83,-30,13}, -{83,-30,14}, -{83,-30,15}, -{83,-30,16}, -{83,-30,17}, -{83,-30,18}, -{83,-30,19}, -{83,-30,20}, -{83,-30,21}, -{83,-30,22}, -{83,-30,23}, -{83,-30,24}, -{83,-30,25}, -{83,-30,26}, -{83,-30,27}, -{83,-30,28}, -{83,-30,29}, -{83,-30,30}, -{83,-30,31}, -{83,-30,32}, -{83,-30,33}, -{83,-30,34}, -{83,-30,35}, -{83,-30,36}, -{83,-30,37}, -{83,-30,38}, -{83,-30,39}, -{83,-30,40}, -{83,-30,41}, -{83,-30,42}, -{83,-30,43}, -{83,-30,44}, -{83,-30,45}, -{83,-30,46}, -{83,-30,47}, -{83,-30,48}, -{83,-30,49}, -{83,-30,50}, -{83,-30,51}, -{83,-30,52}, -{83,-30,53}, -{83,-30,54}, -{83,-30,55}, -{83,-30,56}, -{83,-30,57}, -{83,-30,58}, -{83,-30,59}, -{83,-30,60}, -{83,-30,61}, -{83,-30,62}, -{83,-30,63}, -{83,-30,64}, -{83,-30,65}, -{83,-30,66}, -{83,-30,67}, -{83,-30,68}, -{83,-30,69}, -{83,-30,70}, -{83,-30,71}, -{83,-30,72}, -{83,-30,73}, -{83,-30,74}, -{83,-30,75}, -{83,-30,76}, -{83,-30,77}, -{83,-30,78}, -{83,-30,79}, -{83,-30,80}, -{83,-30,81}, -{83,-30,82}, -{83,-29,-26}, -{83,-29,-25}, -{83,-29,-24}, -{83,-29,-23}, -{83,-29,-22}, -{83,-29,-21}, -{83,-29,-20}, -{83,-29,-19}, -{83,-29,-18}, -{83,-29,-17}, -{83,-29,-16}, -{83,-29,-15}, -{83,-29,-14}, -{83,-29,-13}, -{83,-29,-12}, -{83,-29,-11}, -{83,-29,-10}, -{83,-29,-9}, -{83,-29,-8}, -{83,-29,-7}, -{83,-29,-6}, -{83,-29,-5}, -{83,-29,-4}, -{83,-29,-3}, -{83,-29,-2}, -{83,-29,-1}, -{83,-29,0}, -{83,-29,1}, -{83,-29,2}, -{83,-29,3}, -{83,-29,4}, -{83,-29,5}, -{83,-29,6}, -{83,-29,7}, -{83,-29,8}, -{83,-29,9}, -{83,-29,10}, -{83,-29,11}, -{83,-29,12}, -{83,-29,13}, -{83,-29,14}, -{83,-29,15}, -{83,-29,16}, -{83,-29,17}, -{83,-29,18}, -{83,-29,19}, -{83,-29,20}, -{83,-29,21}, -{83,-29,22}, -{83,-29,23}, -{83,-29,24}, -{83,-29,25}, -{83,-29,26}, -{83,-29,27}, -{83,-29,28}, -{83,-29,29}, -{83,-29,30}, -{83,-29,31}, -{83,-29,32}, -{83,-29,33}, -{83,-29,34}, -{83,-29,35}, -{83,-29,36}, -{83,-29,37}, -{83,-29,38}, -{83,-29,39}, -{83,-29,40}, -{83,-29,41}, -{83,-29,42}, -{83,-29,43}, -{83,-29,44}, -{83,-29,45}, -{83,-29,46}, -{83,-29,47}, -{83,-29,48}, -{83,-29,49}, -{83,-29,50}, -{83,-29,51}, -{83,-29,52}, -{83,-29,53}, -{83,-29,54}, -{83,-29,55}, -{83,-29,56}, -{83,-29,57}, -{83,-29,58}, -{83,-29,59}, -{83,-29,60}, -{83,-29,61}, -{83,-29,62}, -{83,-29,63}, -{83,-29,64}, -{83,-29,65}, -{83,-29,66}, -{83,-29,67}, -{83,-29,68}, -{83,-29,69}, -{83,-29,70}, -{83,-29,71}, -{83,-29,72}, -{83,-29,73}, -{83,-29,74}, -{83,-29,75}, -{83,-29,76}, -{83,-29,77}, -{83,-29,78}, -{83,-29,79}, -{83,-29,80}, -{83,-29,81}, -{83,-29,82}, -{83,-28,-26}, -{83,-28,-25}, -{83,-28,-24}, -{83,-28,-23}, -{83,-28,-22}, -{83,-28,-21}, -{83,-28,-20}, -{83,-28,-19}, -{83,-28,-18}, -{83,-28,-17}, -{83,-28,-16}, -{83,-28,-15}, -{83,-28,-14}, -{83,-28,-13}, -{83,-28,-12}, -{83,-28,-11}, -{83,-28,-10}, -{83,-28,-9}, -{83,-28,-8}, -{83,-28,-7}, -{83,-28,-6}, -{83,-28,-5}, -{83,-28,-4}, -{83,-28,-3}, -{83,-28,-2}, -{83,-28,-1}, -{83,-28,0}, -{83,-28,1}, -{83,-28,2}, -{83,-28,3}, -{83,-28,4}, -{83,-28,5}, -{83,-28,6}, -{83,-28,7}, -{83,-28,8}, -{83,-28,9}, -{83,-28,10}, -{83,-28,11}, -{83,-28,12}, -{83,-28,13}, -{83,-28,14}, -{83,-28,15}, -{83,-28,16}, -{83,-28,17}, -{83,-28,18}, -{83,-28,19}, -{83,-28,20}, -{83,-28,21}, -{83,-28,22}, -{83,-28,23}, -{83,-28,24}, -{83,-28,25}, -{83,-28,26}, -{83,-28,27}, -{83,-28,28}, -{83,-28,29}, -{83,-28,30}, -{83,-28,31}, -{83,-28,32}, -{83,-28,33}, -{83,-28,34}, -{83,-28,35}, -{83,-28,36}, -{83,-28,37}, -{83,-28,38}, -{83,-28,39}, -{83,-28,40}, -{83,-28,41}, -{83,-28,42}, -{83,-28,43}, -{83,-28,44}, -{83,-28,45}, -{83,-28,46}, -{83,-28,47}, -{83,-28,48}, -{83,-28,49}, -{83,-28,50}, -{83,-28,51}, -{83,-28,52}, -{83,-28,53}, -{83,-28,54}, -{83,-28,55}, -{83,-28,56}, -{83,-28,57}, -{83,-28,58}, -{83,-28,59}, -{83,-28,60}, -{83,-28,61}, -{83,-28,62}, -{83,-28,63}, -{83,-28,64}, -{83,-28,65}, -{83,-28,66}, -{83,-28,67}, -{83,-28,68}, -{83,-28,69}, -{83,-28,70}, -{83,-28,71}, -{83,-28,72}, -{83,-28,73}, -{83,-28,74}, -{83,-28,75}, -{83,-28,76}, -{83,-28,77}, -{83,-28,78}, -{83,-28,79}, -{83,-28,80}, -{83,-28,81}, -{83,-28,82}, -{83,-27,-26}, -{83,-27,-25}, -{83,-27,-24}, -{83,-27,-23}, -{83,-27,-22}, -{83,-27,-21}, -{83,-27,-20}, -{83,-27,-19}, -{83,-27,-18}, -{83,-27,-17}, -{83,-27,-16}, -{83,-27,-15}, -{83,-27,-14}, -{83,-27,-13}, -{83,-27,-12}, -{83,-27,-11}, -{83,-27,-10}, -{83,-27,-9}, -{83,-27,-8}, -{83,-27,-7}, -{83,-27,-6}, -{83,-27,-5}, -{83,-27,-4}, -{83,-27,-3}, -{83,-27,-2}, -{83,-27,-1}, -{83,-27,0}, -{83,-27,1}, -{83,-27,2}, -{83,-27,3}, -{83,-27,4}, -{83,-27,5}, -{83,-27,6}, -{83,-27,7}, -{83,-27,8}, -{83,-27,9}, -{83,-27,10}, -{83,-27,11}, -{83,-27,12}, -{83,-27,13}, -{83,-27,14}, -{83,-27,15}, -{83,-27,16}, -{83,-27,17}, -{83,-27,18}, -{83,-27,19}, -{83,-27,20}, -{83,-27,21}, -{83,-27,22}, -{83,-27,23}, -{83,-27,24}, -{83,-27,25}, -{83,-27,26}, -{83,-27,27}, -{83,-27,28}, -{83,-27,29}, -{83,-27,30}, -{83,-27,31}, -{83,-27,32}, -{83,-27,33}, -{83,-27,34}, -{83,-27,35}, -{83,-27,36}, -{83,-27,37}, -{83,-27,38}, -{83,-27,39}, -{83,-27,40}, -{83,-27,41}, -{83,-27,42}, -{83,-27,43}, -{83,-27,44}, -{83,-27,45}, -{83,-27,46}, -{83,-27,47}, -{83,-27,48}, -{83,-27,49}, -{83,-27,50}, -{83,-27,51}, -{83,-27,52}, -{83,-27,53}, -{83,-27,54}, -{83,-27,55}, -{83,-27,56}, -{83,-27,57}, -{83,-27,58}, -{83,-27,59}, -{83,-27,60}, -{83,-27,61}, -{83,-27,62}, -{83,-27,63}, -{83,-27,64}, -{83,-27,65}, -{83,-27,66}, -{83,-27,67}, -{83,-27,68}, -{83,-27,69}, -{83,-27,70}, -{83,-27,71}, -{83,-27,72}, -{83,-27,73}, -{83,-27,74}, -{83,-27,75}, -{83,-27,76}, -{83,-27,77}, -{83,-27,78}, -{83,-27,79}, -{83,-27,80}, -{83,-27,81}, -{83,-27,82}, -{83,-26,-26}, -{83,-26,-25}, -{83,-26,-24}, -{83,-26,-23}, -{83,-26,-22}, -{83,-26,-21}, -{83,-26,-20}, -{83,-26,-19}, -{83,-26,-18}, -{83,-26,-17}, -{83,-26,-16}, -{83,-26,-15}, -{83,-26,-14}, -{83,-26,-13}, -{83,-26,-12}, -{83,-26,-11}, -{83,-26,-10}, -{83,-26,-9}, -{83,-26,-8}, -{83,-26,-7}, -{83,-26,-6}, -{83,-26,-5}, -{83,-26,-4}, -{83,-26,-3}, -{83,-26,-2}, -{83,-26,-1}, -{83,-26,0}, -{83,-26,1}, -{83,-26,2}, -{83,-26,3}, -{83,-26,4}, -{83,-26,5}, -{83,-26,6}, -{83,-26,7}, -{83,-26,8}, -{83,-26,9}, -{83,-26,10}, -{83,-26,11}, -{83,-26,12}, -{83,-26,13}, -{83,-26,14}, -{83,-26,15}, -{83,-26,16}, -{83,-26,17}, -{83,-26,18}, -{83,-26,19}, -{83,-26,20}, -{83,-26,21}, -{83,-26,22}, -{83,-26,23}, -{83,-26,24}, -{83,-26,25}, -{83,-26,26}, -{83,-26,27}, -{83,-26,28}, -{83,-26,29}, -{83,-26,30}, -{83,-26,31}, -{83,-26,32}, -{83,-26,33}, -{83,-26,34}, -{83,-26,35}, -{83,-26,36}, -{83,-26,37}, -{83,-26,38}, -{83,-26,39}, -{83,-26,40}, -{83,-26,41}, -{83,-26,42}, -{83,-26,43}, -{83,-26,44}, -{83,-26,45}, -{83,-26,46}, -{83,-26,47}, -{83,-26,48}, -{83,-26,49}, -{83,-26,50}, -{83,-26,51}, -{83,-26,52}, -{83,-26,53}, -{83,-26,54}, -{83,-26,55}, -{83,-26,56}, -{83,-26,57}, -{83,-26,58}, -{83,-26,59}, -{83,-26,60}, -{83,-26,61}, -{83,-26,62}, -{83,-26,63}, -{83,-26,64}, -{83,-26,65}, -{83,-26,66}, -{83,-26,67}, -{83,-26,68}, -{83,-26,69}, -{83,-26,70}, -{83,-26,71}, -{83,-26,72}, -{83,-26,73}, -{83,-26,74}, -{83,-26,75}, -{83,-26,76}, -{83,-26,77}, -{83,-26,78}, -{83,-26,79}, -{83,-26,80}, -{83,-26,81}, -{83,-26,82}, -{83,-25,-26}, -{83,-25,-25}, -{83,-25,-24}, -{83,-25,-23}, -{83,-25,-22}, -{83,-25,-21}, -{83,-25,-20}, -{83,-25,-19}, -{83,-25,-18}, -{83,-25,-17}, -{83,-25,-16}, -{83,-25,-15}, -{83,-25,-14}, -{83,-25,-13}, -{83,-25,-12}, -{83,-25,-11}, -{83,-25,-10}, -{83,-25,-9}, -{83,-25,-8}, -{83,-25,-7}, -{83,-25,-6}, -{83,-25,-5}, -{83,-25,-4}, -{83,-25,-3}, -{83,-25,-2}, -{83,-25,-1}, -{83,-25,0}, -{83,-25,1}, -{83,-25,2}, -{83,-25,3}, -{83,-25,4}, -{83,-25,5}, -{83,-25,6}, -{83,-25,7}, -{83,-25,8}, -{83,-25,9}, -{83,-25,10}, -{83,-25,11}, -{83,-25,12}, -{83,-25,13}, -{83,-25,14}, -{83,-25,15}, -{83,-25,16}, -{83,-25,17}, -{83,-25,18}, -{83,-25,19}, -{83,-25,20}, -{83,-25,21}, -{83,-25,22}, -{83,-25,23}, -{83,-25,24}, -{83,-25,25}, -{83,-25,26}, -{83,-25,27}, -{83,-25,28}, -{83,-25,29}, -{83,-25,30}, -{83,-25,31}, -{83,-25,32}, -{83,-25,33}, -{83,-25,34}, -{83,-25,35}, -{83,-25,36}, -{83,-25,37}, -{83,-25,38}, -{83,-25,39}, -{83,-25,40}, -{83,-25,41}, -{83,-25,42}, -{83,-25,43}, -{83,-25,44}, -{83,-25,45}, -{83,-25,46}, -{83,-25,47}, -{83,-25,48}, -{83,-25,49}, -{83,-25,50}, -{83,-25,51}, -{83,-25,52}, -{83,-25,53}, -{83,-25,54}, -{83,-25,55}, -{83,-25,56}, -{83,-25,57}, -{83,-25,58}, -{83,-25,59}, -{83,-25,60}, -{83,-25,61}, -{83,-25,62}, -{83,-25,63}, -{83,-25,64}, -{83,-25,65}, -{83,-25,66}, -{83,-25,67}, -{83,-25,68}, -{83,-25,69}, -{83,-25,70}, -{83,-25,71}, -{83,-25,72}, -{83,-25,73}, -{83,-25,74}, -{83,-25,75}, -{83,-25,76}, -{83,-25,77}, -{83,-25,78}, -{83,-25,79}, -{83,-25,80}, -{83,-25,81}, -{83,-25,82}, -{83,-24,-26}, -{83,-24,-25}, -{83,-24,-24}, -{83,-24,-23}, -{83,-24,-22}, -{83,-24,-21}, -{83,-24,-20}, -{83,-24,-19}, -{83,-24,-18}, -{83,-24,-17}, -{83,-24,-16}, -{83,-24,-15}, -{83,-24,-14}, -{83,-24,-13}, -{83,-24,-12}, -{83,-24,-11}, -{83,-24,-10}, -{83,-24,-9}, -{83,-24,-8}, -{83,-24,-7}, -{83,-24,-6}, -{83,-24,-5}, -{83,-24,-4}, -{83,-24,-3}, -{83,-24,-2}, -{83,-24,-1}, -{83,-24,0}, -{83,-24,1}, -{83,-24,2}, -{83,-24,3}, -{83,-24,4}, -{83,-24,5}, -{83,-24,6}, -{83,-24,7}, -{83,-24,8}, -{83,-24,9}, -{83,-24,10}, -{83,-24,11}, -{83,-24,12}, -{83,-24,13}, -{83,-24,14}, -{83,-24,15}, -{83,-24,16}, -{83,-24,17}, -{83,-24,18}, -{83,-24,19}, -{83,-24,20}, -{83,-24,21}, -{83,-24,22}, -{83,-24,23}, -{83,-24,24}, -{83,-24,25}, -{83,-24,26}, -{83,-24,27}, -{83,-24,28}, -{83,-24,29}, -{83,-24,30}, -{83,-24,31}, -{83,-24,32}, -{83,-24,33}, -{83,-24,34}, -{83,-24,35}, -{83,-24,36}, -{83,-24,37}, -{83,-24,38}, -{83,-24,39}, -{83,-24,40}, -{83,-24,41}, -{83,-24,42}, -{83,-24,43}, -{83,-24,44}, -{83,-24,45}, -{83,-24,46}, -{83,-24,47}, -{83,-24,48}, -{83,-24,49}, -{83,-24,50}, -{83,-24,51}, -{83,-24,52}, -{83,-24,53}, -{83,-24,54}, -{83,-24,55}, -{83,-24,56}, -{83,-24,57}, -{83,-24,58}, -{83,-24,59}, -{83,-24,60}, -{83,-24,61}, -{83,-24,62}, -{83,-24,63}, -{83,-24,64}, -{83,-24,65}, -{83,-24,66}, -{83,-24,67}, -{83,-24,68}, -{83,-24,69}, -{83,-24,70}, -{83,-24,71}, -{83,-24,72}, -{83,-24,73}, -{83,-24,74}, -{83,-24,75}, -{83,-24,76}, -{83,-24,77}, -{83,-24,78}, -{83,-24,79}, -{83,-24,80}, -{83,-24,81}, -{83,-24,82}, -{83,-23,-26}, -{83,-23,-25}, -{83,-23,-24}, -{83,-23,-23}, -{83,-23,-22}, -{83,-23,-21}, -{83,-23,-20}, -{83,-23,-19}, -{83,-23,-18}, -{83,-23,-17}, -{83,-23,-16}, -{83,-23,-15}, -{83,-23,-14}, -{83,-23,-13}, -{83,-23,-12}, -{83,-23,-11}, -{83,-23,-10}, -{83,-23,-9}, -{83,-23,-8}, -{83,-23,-7}, -{83,-23,-6}, -{83,-23,-5}, -{83,-23,-4}, -{83,-23,-3}, -{83,-23,-2}, -{83,-23,-1}, -{83,-23,0}, -{83,-23,1}, -{83,-23,2}, -{83,-23,3}, -{83,-23,4}, -{83,-23,5}, -{83,-23,6}, -{83,-23,7}, -{83,-23,8}, -{83,-23,9}, -{83,-23,10}, -{83,-23,11}, -{83,-23,12}, -{83,-23,13}, -{83,-23,14}, -{83,-23,15}, -{83,-23,16}, -{83,-23,17}, -{83,-23,18}, -{83,-23,19}, -{83,-23,20}, -{83,-23,21}, -{83,-23,22}, -{83,-23,23}, -{83,-23,24}, -{83,-23,25}, -{83,-23,26}, -{83,-23,27}, -{83,-23,28}, -{83,-23,29}, -{83,-23,30}, -{83,-23,31}, -{83,-23,32}, -{83,-23,33}, -{83,-23,34}, -{83,-23,35}, -{83,-23,36}, -{83,-23,37}, -{83,-23,38}, -{83,-23,39}, -{83,-23,40}, -{83,-23,41}, -{83,-23,42}, -{83,-23,43}, -{83,-23,44}, -{83,-23,45}, -{83,-23,46}, -{83,-23,47}, -{83,-23,48}, -{83,-23,49}, -{83,-23,50}, -{83,-23,51}, -{83,-23,52}, -{83,-23,53}, -{83,-23,54}, -{83,-23,55}, -{83,-23,56}, -{83,-23,57}, -{83,-23,58}, -{83,-23,59}, -{83,-23,60}, -{83,-23,61}, -{83,-23,62}, -{83,-23,63}, -{83,-23,64}, -{83,-23,65}, -{83,-23,66}, -{83,-23,67}, -{83,-23,68}, -{83,-23,69}, -{83,-23,70}, -{83,-23,71}, -{83,-23,72}, -{83,-23,73}, -{83,-23,74}, -{83,-23,75}, -{83,-23,76}, -{83,-23,77}, -{83,-23,78}, -{83,-23,79}, -{83,-23,80}, -{83,-23,81}, -{83,-23,82}, -{83,-22,-26}, -{83,-22,-25}, -{83,-22,-24}, -{83,-22,-23}, -{83,-22,-22}, -{83,-22,-21}, -{83,-22,-20}, -{83,-22,-19}, -{83,-22,-18}, -{83,-22,-17}, -{83,-22,-16}, -{83,-22,-15}, -{83,-22,-14}, -{83,-22,-13}, -{83,-22,-12}, -{83,-22,-11}, -{83,-22,-10}, -{83,-22,-9}, -{83,-22,-8}, -{83,-22,-7}, -{83,-22,-6}, -{83,-22,-5}, -{83,-22,-4}, -{83,-22,-3}, -{83,-22,-2}, -{83,-22,-1}, -{83,-22,0}, -{83,-22,1}, -{83,-22,2}, -{83,-22,3}, -{83,-22,4}, -{83,-22,5}, -{83,-22,6}, -{83,-22,7}, -{83,-22,8}, -{83,-22,9}, -{83,-22,10}, -{83,-22,11}, -{83,-22,12}, -{83,-22,13}, -{83,-22,14}, -{83,-22,15}, -{83,-22,16}, -{83,-22,17}, -{83,-22,18}, -{83,-22,19}, -{83,-22,20}, -{83,-22,21}, -{83,-22,22}, -{83,-22,23}, -{83,-22,24}, -{83,-22,25}, -{83,-22,26}, -{83,-22,27}, -{83,-22,28}, -{83,-22,29}, -{83,-22,30}, -{83,-22,31}, -{83,-22,32}, -{83,-22,33}, -{83,-22,34}, -{83,-22,35}, -{83,-22,36}, -{83,-22,37}, -{83,-22,38}, -{83,-22,39}, -{83,-22,40}, -{83,-22,41}, -{83,-22,42}, -{83,-22,43}, -{83,-22,44}, -{83,-22,45}, -{83,-22,46}, -{83,-22,47}, -{83,-22,48}, -{83,-22,49}, -{83,-22,50}, -{83,-22,51}, -{83,-22,52}, -{83,-22,53}, -{83,-22,54}, -{83,-22,55}, -{83,-22,56}, -{83,-22,57}, -{83,-22,58}, -{83,-22,59}, -{83,-22,60}, -{83,-22,61}, -{83,-22,62}, -{83,-22,63}, -{83,-22,64}, -{83,-22,65}, -{83,-22,66}, -{83,-22,67}, -{83,-22,68}, -{83,-22,69}, -{83,-22,70}, -{83,-22,71}, -{83,-22,72}, -{83,-22,73}, -{83,-22,74}, -{83,-22,75}, -{83,-22,76}, -{83,-22,77}, -{83,-22,78}, -{83,-22,79}, -{83,-22,80}, -{83,-22,81}, -{83,-22,82}, -{83,-21,-26}, -{83,-21,-25}, -{83,-21,-24}, -{83,-21,-23}, -{83,-21,-22}, -{83,-21,-21}, -{83,-21,-20}, -{83,-21,-19}, -{83,-21,-18}, -{83,-21,-17}, -{83,-21,-16}, -{83,-21,-15}, -{83,-21,-14}, -{83,-21,-13}, -{83,-21,-12}, -{83,-21,-11}, -{83,-21,-10}, -{83,-21,-9}, -{83,-21,-8}, -{83,-21,-7}, -{83,-21,-6}, -{83,-21,-5}, -{83,-21,-4}, -{83,-21,-3}, -{83,-21,-2}, -{83,-21,-1}, -{83,-21,0}, -{83,-21,1}, -{83,-21,2}, -{83,-21,3}, -{83,-21,4}, -{83,-21,5}, -{83,-21,6}, -{83,-21,7}, -{83,-21,8}, -{83,-21,9}, -{83,-21,10}, -{83,-21,11}, -{83,-21,12}, -{83,-21,13}, -{83,-21,14}, -{83,-21,15}, -{83,-21,16}, -{83,-21,17}, -{83,-21,18}, -{83,-21,19}, -{83,-21,20}, -{83,-21,21}, -{83,-21,22}, -{83,-21,23}, -{83,-21,24}, -{83,-21,25}, -{83,-21,26}, -{83,-21,27}, -{83,-21,28}, -{83,-21,29}, -{83,-21,30}, -{83,-21,31}, -{83,-21,32}, -{83,-21,33}, -{83,-21,34}, -{83,-21,35}, -{83,-21,36}, -{83,-21,37}, -{83,-21,38}, -{83,-21,39}, -{83,-21,40}, -{83,-21,41}, -{83,-21,42}, -{83,-21,43}, -{83,-21,44}, -{83,-21,45}, -{83,-21,46}, -{83,-21,47}, -{83,-21,48}, -{83,-21,49}, -{83,-21,50}, -{83,-21,51}, -{83,-21,52}, -{83,-21,53}, -{83,-21,54}, -{83,-21,55}, -{83,-21,56}, -{83,-21,57}, -{83,-21,58}, -{83,-21,59}, -{83,-21,60}, -{83,-21,61}, -{83,-21,62}, -{83,-21,63}, -{83,-21,64}, -{83,-21,65}, -{83,-21,66}, -{83,-21,67}, -{83,-21,68}, -{83,-21,69}, -{83,-21,70}, -{83,-21,71}, -{83,-21,72}, -{83,-21,73}, -{83,-21,74}, -{83,-21,75}, -{83,-21,76}, -{83,-21,77}, -{83,-21,78}, -{83,-21,79}, -{83,-21,80}, -{83,-21,81}, -{83,-21,82}, -{83,-20,-26}, -{83,-20,-25}, -{83,-20,-24}, -{83,-20,-23}, -{83,-20,-22}, -{83,-20,-21}, -{83,-20,-20}, -{83,-20,-19}, -{83,-20,-18}, -{83,-20,-17}, -{83,-20,-16}, -{83,-20,-15}, -{83,-20,-14}, -{83,-20,-13}, -{83,-20,-12}, -{83,-20,-11}, -{83,-20,-10}, -{83,-20,-9}, -{83,-20,-8}, -{83,-20,-7}, -{83,-20,-6}, -{83,-20,-5}, -{83,-20,-4}, -{83,-20,-3}, -{83,-20,-2}, -{83,-20,-1}, -{83,-20,0}, -{83,-20,1}, -{83,-20,2}, -{83,-20,3}, -{83,-20,4}, -{83,-20,5}, -{83,-20,6}, -{83,-20,7}, -{83,-20,8}, -{83,-20,9}, -{83,-20,10}, -{83,-20,11}, -{83,-20,12}, -{83,-20,13}, -{83,-20,14}, -{83,-20,15}, -{83,-20,16}, -{83,-20,17}, -{83,-20,18}, -{83,-20,19}, -{83,-20,20}, -{83,-20,21}, -{83,-20,22}, -{83,-20,23}, -{83,-20,24}, -{83,-20,25}, -{83,-20,26}, -{83,-20,27}, -{83,-20,28}, -{83,-20,29}, -{83,-20,30}, -{83,-20,31}, -{83,-20,32}, -{83,-20,33}, -{83,-20,34}, -{83,-20,35}, -{83,-20,36}, -{83,-20,37}, -{83,-20,38}, -{83,-20,39}, -{83,-20,40}, -{83,-20,41}, -{83,-20,42}, -{83,-20,43}, -{83,-20,44}, -{83,-20,45}, -{83,-20,46}, -{83,-20,47}, -{83,-20,48}, -{83,-20,49}, -{83,-20,50}, -{83,-20,51}, -{83,-20,52}, -{83,-20,53}, -{83,-20,54}, -{83,-20,55}, -{83,-20,56}, -{83,-20,57}, -{83,-20,58}, -{83,-20,59}, -{83,-20,60}, -{83,-20,61}, -{83,-20,62}, -{83,-20,63}, -{83,-20,64}, -{83,-20,65}, -{83,-20,66}, -{83,-20,67}, -{83,-20,68}, -{83,-20,69}, -{83,-20,70}, -{83,-20,71}, -{83,-20,72}, -{83,-20,73}, -{83,-20,74}, -{83,-20,75}, -{83,-20,76}, -{83,-20,77}, -{83,-20,78}, -{83,-20,79}, -{83,-20,80}, -{83,-20,81}, -{83,-20,82}, -{83,-19,-26}, -{83,-19,-25}, -{83,-19,-24}, -{83,-19,-23}, -{83,-19,-22}, -{83,-19,-21}, -{83,-19,-20}, -{83,-19,-19}, -{83,-19,-18}, -{83,-19,-17}, -{83,-19,-16}, -{83,-19,-15}, -{83,-19,-14}, -{83,-19,-13}, -{83,-19,-12}, -{83,-19,-11}, -{83,-19,-10}, -{83,-19,-9}, -{83,-19,-8}, -{83,-19,-7}, -{83,-19,-6}, -{83,-19,-5}, -{83,-19,-4}, -{83,-19,-3}, -{83,-19,-2}, -{83,-19,-1}, -{83,-19,0}, -{83,-19,1}, -{83,-19,2}, -{83,-19,3}, -{83,-19,4}, -{83,-19,5}, -{83,-19,6}, -{83,-19,7}, -{83,-19,8}, -{83,-19,9}, -{83,-19,10}, -{83,-19,11}, -{83,-19,12}, -{83,-19,13}, -{83,-19,14}, -{83,-19,15}, -{83,-19,16}, -{83,-19,17}, -{83,-19,18}, -{83,-19,19}, -{83,-19,20}, -{83,-19,21}, -{83,-19,22}, -{83,-19,23}, -{83,-19,24}, -{83,-19,25}, -{83,-19,26}, -{83,-19,27}, -{83,-19,28}, -{83,-19,29}, -{83,-19,30}, -{83,-19,31}, -{83,-19,32}, -{83,-19,33}, -{83,-19,34}, -{83,-19,35}, -{83,-19,36}, -{83,-19,37}, -{83,-19,38}, -{83,-19,39}, -{83,-19,40}, -{83,-19,41}, -{83,-19,42}, -{83,-19,43}, -{83,-19,44}, -{83,-19,45}, -{83,-19,46}, -{83,-19,47}, -{83,-19,48}, -{83,-19,49}, -{83,-19,50}, -{83,-19,51}, -{83,-19,52}, -{83,-19,53}, -{83,-19,54}, -{83,-19,55}, -{83,-19,56}, -{83,-19,57}, -{83,-19,58}, -{83,-19,59}, -{83,-19,60}, -{83,-19,61}, -{83,-19,62}, -{83,-19,63}, -{83,-19,64}, -{83,-19,65}, -{83,-19,66}, -{83,-19,67}, -{83,-19,68}, -{83,-19,69}, -{83,-19,70}, -{83,-19,71}, -{83,-19,72}, -{83,-19,73}, -{83,-19,74}, -{83,-19,75}, -{83,-19,76}, -{83,-19,77}, -{83,-19,78}, -{83,-19,79}, -{83,-19,80}, -{83,-19,81}, -{83,-19,82}, -{83,-18,-26}, -{83,-18,-25}, -{83,-18,-24}, -{83,-18,-23}, -{83,-18,-22}, -{83,-18,-21}, -{83,-18,-20}, -{83,-18,-19}, -{83,-18,-18}, -{83,-18,-17}, -{83,-18,-16}, -{83,-18,-15}, -{83,-18,-14}, -{83,-18,-13}, -{83,-18,-12}, -{83,-18,-11}, -{83,-18,-10}, -{83,-18,-9}, -{83,-18,-8}, -{83,-18,-7}, -{83,-18,-6}, -{83,-18,-5}, -{83,-18,-4}, -{83,-18,-3}, -{83,-18,-2}, -{83,-18,-1}, -{83,-18,0}, -{83,-18,1}, -{83,-18,2}, -{83,-18,3}, -{83,-18,4}, -{83,-18,5}, -{83,-18,6}, -{83,-18,7}, -{83,-18,8}, -{83,-18,9}, -{83,-18,10}, -{83,-18,11}, -{83,-18,12}, -{83,-18,13}, -{83,-18,14}, -{83,-18,15}, -{83,-18,16}, -{83,-18,17}, -{83,-18,18}, -{83,-18,19}, -{83,-18,20}, -{83,-18,21}, -{83,-18,22}, -{83,-18,23}, -{83,-18,24}, -{83,-18,25}, -{83,-18,26}, -{83,-18,27}, -{83,-18,28}, -{83,-18,29}, -{83,-18,30}, -{83,-18,31}, -{83,-18,32}, -{83,-18,33}, -{83,-18,34}, -{83,-18,35}, -{83,-18,36}, -{83,-18,37}, -{83,-18,38}, -{83,-18,39}, -{83,-18,40}, -{83,-18,41}, -{83,-18,42}, -{83,-18,43}, -{83,-18,44}, -{83,-18,45}, -{83,-18,46}, -{83,-18,47}, -{83,-18,48}, -{83,-18,49}, -{83,-18,50}, -{83,-18,51}, -{83,-18,52}, -{83,-18,53}, -{83,-18,54}, -{83,-18,55}, -{83,-18,56}, -{83,-18,57}, -{83,-18,58}, -{83,-18,59}, -{83,-18,60}, -{83,-18,61}, -{83,-18,62}, -{83,-18,63}, -{83,-18,64}, -{83,-18,65}, -{83,-18,66}, -{83,-18,67}, -{83,-18,68}, -{83,-18,69}, -{83,-18,70}, -{83,-18,71}, -{83,-18,72}, -{83,-18,73}, -{83,-18,74}, -{83,-18,75}, -{83,-18,76}, -{83,-18,77}, -{83,-18,78}, -{83,-18,79}, -{83,-18,80}, -{83,-18,81}, -{83,-18,82}, -{83,-17,-26}, -{83,-17,-25}, -{83,-17,-24}, -{83,-17,-23}, -{83,-17,-22}, -{83,-17,-21}, -{83,-17,-20}, -{83,-17,-19}, -{83,-17,-18}, -{83,-17,-17}, -{83,-17,-16}, -{83,-17,-15}, -{83,-17,-14}, -{83,-17,-13}, -{83,-17,-12}, -{83,-17,-11}, -{83,-17,-10}, -{83,-17,-9}, -{83,-17,-8}, -{83,-17,-7}, -{83,-17,-6}, -{83,-17,-5}, -{83,-17,-4}, -{83,-17,-3}, -{83,-17,-2}, -{83,-17,-1}, -{83,-17,0}, -{83,-17,1}, -{83,-17,2}, -{83,-17,3}, -{83,-17,4}, -{83,-17,5}, -{83,-17,6}, -{83,-17,7}, -{83,-17,8}, -{83,-17,9}, -{83,-17,10}, -{83,-17,11}, -{83,-17,12}, -{83,-17,13}, -{83,-17,14}, -{83,-17,15}, -{83,-17,16}, -{83,-17,17}, -{83,-17,18}, -{83,-17,19}, -{83,-17,20}, -{83,-17,21}, -{83,-17,22}, -{83,-17,23}, -{83,-17,24}, -{83,-17,25}, -{83,-17,26}, -{83,-17,27}, -{83,-17,28}, -{83,-17,29}, -{83,-17,30}, -{83,-17,31}, -{83,-17,32}, -{83,-17,33}, -{83,-17,34}, -{83,-17,35}, -{83,-17,36}, -{83,-17,37}, -{83,-17,38}, -{83,-17,39}, -{83,-17,40}, -{83,-17,41}, -{83,-17,42}, -{83,-17,43}, -{83,-17,44}, -{83,-17,45}, -{83,-17,46}, -{83,-17,47}, -{83,-17,48}, -{83,-17,49}, -{83,-17,50}, -{83,-17,51}, -{83,-17,52}, -{83,-17,53}, -{83,-17,54}, -{83,-17,55}, -{83,-17,56}, -{83,-17,57}, -{83,-17,58}, -{83,-17,59}, -{83,-17,60}, -{83,-17,61}, -{83,-17,62}, -{83,-17,63}, -{83,-17,64}, -{83,-17,65}, -{83,-17,66}, -{83,-17,67}, -{83,-17,68}, -{83,-17,69}, -{83,-17,70}, -{83,-17,71}, -{83,-17,72}, -{83,-17,73}, -{83,-17,74}, -{83,-17,75}, -{83,-17,76}, -{83,-17,77}, -{83,-17,78}, -{83,-17,79}, -{83,-17,80}, -{83,-17,81}, -{83,-17,82}, -{83,-16,-26}, -{83,-16,-25}, -{83,-16,-24}, -{83,-16,-23}, -{83,-16,-22}, -{83,-16,-21}, -{83,-16,-20}, -{83,-16,-19}, -{83,-16,-18}, -{83,-16,-17}, -{83,-16,-16}, -{83,-16,-15}, -{83,-16,-14}, -{83,-16,-13}, -{83,-16,-12}, -{83,-16,-11}, -{83,-16,-10}, -{83,-16,-9}, -{83,-16,-8}, -{83,-16,-7}, -{83,-16,-6}, -{83,-16,-5}, -{83,-16,-4}, -{83,-16,-3}, -{83,-16,-2}, -{83,-16,-1}, -{83,-16,0}, -{83,-16,1}, -{83,-16,2}, -{83,-16,3}, -{83,-16,4}, -{83,-16,5}, -{83,-16,6}, -{83,-16,7}, -{83,-16,8}, -{83,-16,9}, -{83,-16,10}, -{83,-16,11}, -{83,-16,12}, -{83,-16,13}, -{83,-16,14}, -{83,-16,15}, -{83,-16,16}, -{83,-16,17}, -{83,-16,18}, -{83,-16,19}, -{83,-16,20}, -{83,-16,21}, -{83,-16,22}, -{83,-16,23}, -{83,-16,24}, -{83,-16,25}, -{83,-16,26}, -{83,-16,27}, -{83,-16,28}, -{83,-16,29}, -{83,-16,30}, -{83,-16,31}, -{83,-16,32}, -{83,-16,33}, -{83,-16,34}, -{83,-16,35}, -{83,-16,36}, -{83,-16,37}, -{83,-16,38}, -{83,-16,39}, -{83,-16,40}, -{83,-16,41}, -{83,-16,42}, -{83,-16,43}, -{83,-16,44}, -{83,-16,45}, -{83,-16,46}, -{83,-16,47}, -{83,-16,48}, -{83,-16,49}, -{83,-16,50}, -{83,-16,51}, -{83,-16,52}, -{83,-16,53}, -{83,-16,54}, -{83,-16,55}, -{83,-16,56}, -{83,-16,57}, -{83,-16,58}, -{83,-16,59}, -{83,-16,60}, -{83,-16,61}, -{83,-16,62}, -{83,-16,63}, -{83,-16,64}, -{83,-16,65}, -{83,-16,66}, -{83,-16,67}, -{83,-16,68}, -{83,-16,69}, -{83,-16,70}, -{83,-16,71}, -{83,-16,72}, -{83,-16,73}, -{83,-16,74}, -{83,-16,75}, -{83,-16,76}, -{83,-16,77}, -{83,-16,78}, -{83,-16,79}, -{83,-16,80}, -{83,-16,81}, -{83,-16,82}, -{83,-16,83}, -{83,-15,-26}, -{83,-15,-25}, -{83,-15,-24}, -{83,-15,-23}, -{83,-15,-22}, -{83,-15,-21}, -{83,-15,-20}, -{83,-15,-19}, -{83,-15,-18}, -{83,-15,-17}, -{83,-15,-16}, -{83,-15,-15}, -{83,-15,-14}, -{83,-15,-13}, -{83,-15,-12}, -{83,-15,-11}, -{83,-15,-10}, -{83,-15,-9}, -{83,-15,-8}, -{83,-15,-7}, -{83,-15,-6}, -{83,-15,-5}, -{83,-15,-4}, -{83,-15,-3}, -{83,-15,-2}, -{83,-15,-1}, -{83,-15,0}, -{83,-15,1}, -{83,-15,2}, -{83,-15,3}, -{83,-15,4}, -{83,-15,5}, -{83,-15,6}, -{83,-15,7}, -{83,-15,8}, -{83,-15,9}, -{83,-15,10}, -{83,-15,11}, -{83,-15,12}, -{83,-15,13}, -{83,-15,14}, -{83,-15,15}, -{83,-15,16}, -{83,-15,17}, -{83,-15,18}, -{83,-15,19}, -{83,-15,20}, -{83,-15,21}, -{83,-15,22}, -{83,-15,23}, -{83,-15,24}, -{83,-15,25}, -{83,-15,26}, -{83,-15,27}, -{83,-15,28}, -{83,-15,29}, -{83,-15,30}, -{83,-15,31}, -{83,-15,32}, -{83,-15,33}, -{83,-15,34}, -{83,-15,35}, -{83,-15,36}, -{83,-15,37}, -{83,-15,38}, -{83,-15,39}, -{83,-15,40}, -{83,-15,41}, -{83,-15,42}, -{83,-15,43}, -{83,-15,44}, -{83,-15,45}, -{83,-15,46}, -{83,-15,47}, -{83,-15,48}, -{83,-15,49}, -{83,-15,50}, -{83,-15,51}, -{83,-15,52}, -{83,-15,53}, -{83,-15,54}, -{83,-15,55}, -{83,-15,56}, -{83,-15,57}, -{83,-15,58}, -{83,-15,59}, -{83,-15,60}, -{83,-15,61}, -{83,-15,62}, -{83,-15,63}, -{83,-15,64}, -{83,-15,65}, -{83,-15,66}, -{83,-15,67}, -{83,-15,68}, -{83,-15,69}, -{83,-15,70}, -{83,-15,71}, -{83,-15,72}, -{83,-15,73}, -{83,-15,74}, -{83,-15,75}, -{83,-15,76}, -{83,-15,77}, -{83,-15,78}, -{83,-15,79}, -{83,-15,80}, -{83,-15,81}, -{83,-15,82}, -{83,-15,83}, -{83,-14,-26}, -{83,-14,-25}, -{83,-14,-24}, -{83,-14,-23}, -{83,-14,-22}, -{83,-14,-21}, -{83,-14,-20}, -{83,-14,-19}, -{83,-14,-18}, -{83,-14,-17}, -{83,-14,-16}, -{83,-14,-15}, -{83,-14,-14}, -{83,-14,-13}, -{83,-14,-12}, -{83,-14,-11}, -{83,-14,-10}, -{83,-14,-9}, -{83,-14,-8}, -{83,-14,-7}, -{83,-14,-6}, -{83,-14,-5}, -{83,-14,-4}, -{83,-14,-3}, -{83,-14,-2}, -{83,-14,-1}, -{83,-14,0}, -{83,-14,1}, -{83,-14,2}, -{83,-14,3}, -{83,-14,4}, -{83,-14,5}, -{83,-14,6}, -{83,-14,7}, -{83,-14,8}, -{83,-14,9}, -{83,-14,10}, -{83,-14,11}, -{83,-14,12}, -{83,-14,13}, -{83,-14,14}, -{83,-14,15}, -{83,-14,16}, -{83,-14,17}, -{83,-14,18}, -{83,-14,19}, -{83,-14,20}, -{83,-14,21}, -{83,-14,22}, -{83,-14,23}, -{83,-14,24}, -{83,-14,25}, -{83,-14,26}, -{83,-14,27}, -{83,-14,28}, -{83,-14,29}, -{83,-14,30}, -{83,-14,31}, -{83,-14,32}, -{83,-14,33}, -{83,-14,34}, -{83,-14,35}, -{83,-14,36}, -{83,-14,37}, -{83,-14,38}, -{83,-14,39}, -{83,-14,40}, -{83,-14,41}, -{83,-14,42}, -{83,-14,43}, -{83,-14,44}, -{83,-14,45}, -{83,-14,46}, -{83,-14,47}, -{83,-14,48}, -{83,-14,49}, -{83,-14,50}, -{83,-14,51}, -{83,-14,52}, -{83,-14,53}, -{83,-14,54}, -{83,-14,55}, -{83,-14,56}, -{83,-14,57}, -{83,-14,58}, -{83,-14,59}, -{83,-14,60}, -{83,-14,61}, -{83,-14,62}, -{83,-14,63}, -{83,-14,64}, -{83,-14,65}, -{83,-14,66}, -{83,-14,67}, -{83,-14,68}, -{83,-14,69}, -{83,-14,70}, -{83,-14,71}, -{83,-14,72}, -{83,-14,73}, -{83,-14,74}, -{83,-14,75}, -{83,-14,76}, -{83,-14,77}, -{83,-14,78}, -{83,-14,79}, -{83,-14,80}, -{83,-14,81}, -{83,-14,82}, -{83,-14,83}, -{83,-13,-26}, -{83,-13,-25}, -{83,-13,-24}, -{83,-13,-23}, -{83,-13,-22}, -{83,-13,-21}, -{83,-13,-20}, -{83,-13,-19}, -{83,-13,-18}, -{83,-13,-17}, -{83,-13,-16}, -{83,-13,-15}, -{83,-13,-14}, -{83,-13,-13}, -{83,-13,-12}, -{83,-13,-11}, -{83,-13,-10}, -{83,-13,-9}, -{83,-13,-8}, -{83,-13,-7}, -{83,-13,-6}, -{83,-13,-5}, -{83,-13,-4}, -{83,-13,-3}, -{83,-13,-2}, -{83,-13,-1}, -{83,-13,0}, -{83,-13,1}, -{83,-13,2}, -{83,-13,3}, -{83,-13,4}, -{83,-13,5}, -{83,-13,6}, -{83,-13,7}, -{83,-13,8}, -{83,-13,9}, -{83,-13,10}, -{83,-13,11}, -{83,-13,12}, -{83,-13,13}, -{83,-13,14}, -{83,-13,15}, -{83,-13,16}, -{83,-13,17}, -{83,-13,18}, -{83,-13,19}, -{83,-13,20}, -{83,-13,21}, -{83,-13,22}, -{83,-13,23}, -{83,-13,24}, -{83,-13,25}, -{83,-13,26}, -{83,-13,27}, -{83,-13,28}, -{83,-13,29}, -{83,-13,30}, -{83,-13,31}, -{83,-13,32}, -{83,-13,33}, -{83,-13,34}, -{83,-13,35}, -{83,-13,36}, -{83,-13,37}, -{83,-13,38}, -{83,-13,39}, -{83,-13,40}, -{83,-13,41}, -{83,-13,42}, -{83,-13,43}, -{83,-13,44}, -{83,-13,45}, -{83,-13,46}, -{83,-13,47}, -{83,-13,48}, -{83,-13,49}, -{83,-13,50}, -{83,-13,51}, -{83,-13,52}, -{83,-13,53}, -{83,-13,54}, -{83,-13,55}, -{83,-13,56}, -{83,-13,57}, -{83,-13,58}, -{83,-13,59}, -{83,-13,60}, -{83,-13,61}, -{83,-13,62}, -{83,-13,63}, -{83,-13,64}, -{83,-13,65}, -{83,-13,66}, -{83,-13,67}, -{83,-13,68}, -{83,-13,69}, -{83,-13,70}, -{83,-13,71}, -{83,-13,72}, -{83,-13,73}, -{83,-13,74}, -{83,-13,75}, -{83,-13,76}, -{83,-13,77}, -{83,-13,78}, -{83,-13,79}, -{83,-13,80}, -{83,-13,81}, -{83,-13,82}, -{83,-13,83}, -{83,-12,-26}, -{83,-12,-25}, -{83,-12,-24}, -{83,-12,-23}, -{83,-12,-22}, -{83,-12,-21}, -{83,-12,-20}, -{83,-12,-19}, -{83,-12,-18}, -{83,-12,-17}, -{83,-12,-16}, -{83,-12,-15}, -{83,-12,-14}, -{83,-12,-13}, -{83,-12,-12}, -{83,-12,-11}, -{83,-12,-10}, -{83,-12,-9}, -{83,-12,-8}, -{83,-12,-7}, -{83,-12,-6}, -{83,-12,-5}, -{83,-12,-4}, -{83,-12,-3}, -{83,-12,-2}, -{83,-12,-1}, -{83,-12,0}, -{83,-12,1}, -{83,-12,2}, -{83,-12,3}, -{83,-12,4}, -{83,-12,5}, -{83,-12,6}, -{83,-12,7}, -{83,-12,8}, -{83,-12,9}, -{83,-12,10}, -{83,-12,11}, -{83,-12,12}, -{83,-12,13}, -{83,-12,14}, -{83,-12,15}, -{83,-12,16}, -{83,-12,17}, -{83,-12,18}, -{83,-12,19}, -{83,-12,20}, -{83,-12,21}, -{83,-12,22}, -{83,-12,23}, -{83,-12,24}, -{83,-12,25}, -{83,-12,26}, -{83,-12,27}, -{83,-12,28}, -{83,-12,29}, -{83,-12,30}, -{83,-12,31}, -{83,-12,32}, -{83,-12,33}, -{83,-12,34}, -{83,-12,35}, -{83,-12,36}, -{83,-12,37}, -{83,-12,38}, -{83,-12,39}, -{83,-12,40}, -{83,-12,41}, -{83,-12,42}, -{83,-12,43}, -{83,-12,44}, -{83,-12,45}, -{83,-12,46}, -{83,-12,47}, -{83,-12,48}, -{83,-12,49}, -{83,-12,50}, -{83,-12,51}, -{83,-12,52}, -{83,-12,53}, -{83,-12,54}, -{83,-12,55}, -{83,-12,56}, -{83,-12,57}, -{83,-12,58}, -{83,-12,59}, -{83,-12,60}, -{83,-12,61}, -{83,-12,62}, -{83,-12,63}, -{83,-12,64}, -{83,-12,65}, -{83,-12,66}, -{83,-12,67}, -{83,-12,68}, -{83,-12,69}, -{83,-12,70}, -{83,-12,71}, -{83,-12,72}, -{83,-12,73}, -{83,-12,74}, -{83,-12,75}, -{83,-12,76}, -{83,-12,77}, -{83,-12,78}, -{83,-12,79}, -{83,-12,80}, -{83,-12,81}, -{83,-12,82}, -{83,-12,83}, -{83,-11,-26}, -{83,-11,-25}, -{83,-11,-24}, -{83,-11,-23}, -{83,-11,-22}, -{83,-11,-21}, -{83,-11,-20}, -{83,-11,-19}, -{83,-11,-18}, -{83,-11,-17}, -{83,-11,-16}, -{83,-11,-15}, -{83,-11,-14}, -{83,-11,-13}, -{83,-11,-12}, -{83,-11,-11}, -{83,-11,-10}, -{83,-11,-9}, -{83,-11,-8}, -{83,-11,-7}, -{83,-11,-6}, -{83,-11,-5}, -{83,-11,-4}, -{83,-11,-3}, -{83,-11,-2}, -{83,-11,-1}, -{83,-11,0}, -{83,-11,1}, -{83,-11,2}, -{83,-11,3}, -{83,-11,4}, -{83,-11,5}, -{83,-11,6}, -{83,-11,7}, -{83,-11,8}, -{83,-11,9}, -{83,-11,10}, -{83,-11,11}, -{83,-11,12}, -{83,-11,13}, -{83,-11,14}, -{83,-11,15}, -{83,-11,16}, -{83,-11,17}, -{83,-11,18}, -{83,-11,19}, -{83,-11,20}, -{83,-11,21}, -{83,-11,22}, -{83,-11,23}, -{83,-11,24}, -{83,-11,25}, -{83,-11,26}, -{83,-11,27}, -{83,-11,28}, -{83,-11,29}, -{83,-11,30}, -{83,-11,31}, -{83,-11,32}, -{83,-11,33}, -{83,-11,34}, -{83,-11,35}, -{83,-11,36}, -{83,-11,37}, -{83,-11,38}, -{83,-11,39}, -{83,-11,40}, -{83,-11,41}, -{83,-11,42}, -{83,-11,43}, -{83,-11,44}, -{83,-11,45}, -{83,-11,46}, -{83,-11,47}, -{83,-11,48}, -{83,-11,49}, -{83,-11,50}, -{83,-11,51}, -{83,-11,52}, -{83,-11,53}, -{83,-11,54}, -{83,-11,55}, -{83,-11,56}, -{83,-11,57}, -{83,-11,58}, -{83,-11,59}, -{83,-11,60}, -{83,-11,61}, -{83,-11,62}, -{83,-11,63}, -{83,-11,64}, -{83,-11,65}, -{83,-11,66}, -{83,-11,67}, -{83,-11,68}, -{83,-11,69}, -{83,-11,70}, -{83,-11,71}, -{83,-11,72}, -{83,-11,73}, -{83,-11,74}, -{83,-11,75}, -{83,-11,76}, -{83,-11,77}, -{83,-11,78}, -{83,-11,79}, -{83,-11,80}, -{83,-11,81}, -{83,-11,82}, -{83,-11,83}, -{83,-10,-26}, -{83,-10,-25}, -{83,-10,-24}, -{83,-10,-23}, -{83,-10,-22}, -{83,-10,-21}, -{83,-10,-20}, -{83,-10,-19}, -{83,-10,-18}, -{83,-10,-17}, -{83,-10,-16}, -{83,-10,-15}, -{83,-10,-14}, -{83,-10,-13}, -{83,-10,-12}, -{83,-10,-11}, -{83,-10,-10}, -{83,-10,-9}, -{83,-10,-8}, -{83,-10,-7}, -{83,-10,-6}, -{83,-10,-5}, -{83,-10,-4}, -{83,-10,-3}, -{83,-10,-2}, -{83,-10,-1}, -{83,-10,0}, -{83,-10,1}, -{83,-10,2}, -{83,-10,3}, -{83,-10,4}, -{83,-10,5}, -{83,-10,6}, -{83,-10,7}, -{83,-10,8}, -{83,-10,9}, -{83,-10,10}, -{83,-10,11}, -{83,-10,12}, -{83,-10,13}, -{83,-10,14}, -{83,-10,15}, -{83,-10,16}, -{83,-10,17}, -{83,-10,18}, -{83,-10,19}, -{83,-10,20}, -{83,-10,21}, -{83,-10,22}, -{83,-10,23}, -{83,-10,24}, -{83,-10,25}, -{83,-10,26}, -{83,-10,27}, -{83,-10,28}, -{83,-10,29}, -{83,-10,30}, -{83,-10,31}, -{83,-10,32}, -{83,-10,33}, -{83,-10,34}, -{83,-10,35}, -{83,-10,36}, -{83,-10,37}, -{83,-10,38}, -{83,-10,39}, -{83,-10,40}, -{83,-10,41}, -{83,-10,42}, -{83,-10,43}, -{83,-10,44}, -{83,-10,45}, -{83,-10,46}, -{83,-10,47}, -{83,-10,48}, -{83,-10,49}, -{83,-10,50}, -{83,-10,51}, -{83,-10,52}, -{83,-10,53}, -{83,-10,54}, -{83,-10,55}, -{83,-10,56}, -{83,-10,57}, -{83,-10,58}, -{83,-10,59}, -{83,-10,60}, -{83,-10,61}, -{83,-10,62}, -{83,-10,63}, -{83,-10,64}, -{83,-10,65}, -{83,-10,66}, -{83,-10,67}, -{83,-10,68}, -{83,-10,69}, -{83,-10,70}, -{83,-10,71}, -{83,-10,72}, -{83,-10,73}, -{83,-10,74}, -{83,-10,75}, -{83,-10,76}, -{83,-10,77}, -{83,-10,78}, -{83,-10,79}, -{83,-10,80}, -{83,-10,81}, -{83,-10,82}, -{83,-10,83}, -{83,-9,-26}, -{83,-9,-25}, -{83,-9,-24}, -{83,-9,-23}, -{83,-9,-22}, -{83,-9,-21}, -{83,-9,-20}, -{83,-9,-19}, -{83,-9,-18}, -{83,-9,-17}, -{83,-9,-16}, -{83,-9,-15}, -{83,-9,-14}, -{83,-9,-13}, -{83,-9,-12}, -{83,-9,-11}, -{83,-9,-10}, -{83,-9,-9}, -{83,-9,-8}, -{83,-9,-7}, -{83,-9,-6}, -{83,-9,-5}, -{83,-9,-4}, -{83,-9,-3}, -{83,-9,-2}, -{83,-9,-1}, -{83,-9,0}, -{83,-9,1}, -{83,-9,2}, -{83,-9,3}, -{83,-9,4}, -{83,-9,5}, -{83,-9,6}, -{83,-9,7}, -{83,-9,8}, -{83,-9,9}, -{83,-9,10}, -{83,-9,11}, -{83,-9,12}, -{83,-9,13}, -{83,-9,14}, -{83,-9,15}, -{83,-9,16}, -{83,-9,17}, -{83,-9,18}, -{83,-9,19}, -{83,-9,20}, -{83,-9,21}, -{83,-9,22}, -{83,-9,23}, -{83,-9,24}, -{83,-9,25}, -{83,-9,26}, -{83,-9,27}, -{83,-9,28}, -{83,-9,29}, -{83,-9,30}, -{83,-9,31}, -{83,-9,32}, -{83,-9,33}, -{83,-9,34}, -{83,-9,35}, -{83,-9,36}, -{83,-9,37}, -{83,-9,38}, -{83,-9,39}, -{83,-9,40}, -{83,-9,41}, -{83,-9,42}, -{83,-9,43}, -{83,-9,44}, -{83,-9,45}, -{83,-9,46}, -{83,-9,47}, -{83,-9,48}, -{83,-9,49}, -{83,-9,50}, -{83,-9,51}, -{83,-9,52}, -{83,-9,53}, -{83,-9,54}, -{83,-9,55}, -{83,-9,56}, -{83,-9,57}, -{83,-9,58}, -{83,-9,59}, -{83,-9,60}, -{83,-9,61}, -{83,-9,62}, -{83,-9,63}, -{83,-9,64}, -{83,-9,65}, -{83,-9,66}, -{83,-9,67}, -{83,-9,68}, -{83,-9,69}, -{83,-9,70}, -{83,-9,71}, -{83,-9,72}, -{83,-9,73}, -{83,-9,74}, -{83,-9,75}, -{83,-9,76}, -{83,-9,77}, -{83,-9,78}, -{83,-9,79}, -{83,-9,80}, -{83,-9,81}, -{83,-9,82}, -{83,-9,83}, -{83,-8,-26}, -{83,-8,-25}, -{83,-8,-24}, -{83,-8,-23}, -{83,-8,-22}, -{83,-8,-21}, -{83,-8,-20}, -{83,-8,-19}, -{83,-8,-18}, -{83,-8,-17}, -{83,-8,-16}, -{83,-8,-15}, -{83,-8,-14}, -{83,-8,-13}, -{83,-8,-12}, -{83,-8,-11}, -{83,-8,-10}, -{83,-8,-9}, -{83,-8,-8}, -{83,-8,-7}, -{83,-8,-6}, -{83,-8,-5}, -{83,-8,-4}, -{83,-8,-3}, -{83,-8,-2}, -{83,-8,-1}, -{83,-8,0}, -{83,-8,1}, -{83,-8,2}, -{83,-8,3}, -{83,-8,4}, -{83,-8,5}, -{83,-8,6}, -{83,-8,7}, -{83,-8,8}, -{83,-8,9}, -{83,-8,10}, -{83,-8,11}, -{83,-8,12}, -{83,-8,13}, -{83,-8,14}, -{83,-8,15}, -{83,-8,16}, -{83,-8,17}, -{83,-8,18}, -{83,-8,19}, -{83,-8,20}, -{83,-8,21}, -{83,-8,22}, -{83,-8,23}, -{83,-8,24}, -{83,-8,25}, -{83,-8,26}, -{83,-8,27}, -{83,-8,28}, -{83,-8,29}, -{83,-8,30}, -{83,-8,31}, -{83,-8,32}, -{83,-8,33}, -{83,-8,34}, -{83,-8,35}, -{83,-8,36}, -{83,-8,37}, -{83,-8,38}, -{83,-8,39}, -{83,-8,40}, -{83,-8,41}, -{83,-8,42}, -{83,-8,43}, -{83,-8,44}, -{83,-8,45}, -{83,-8,46}, -{83,-8,47}, -{83,-8,48}, -{83,-8,49}, -{83,-8,50}, -{83,-8,51}, -{83,-8,52}, -{83,-8,53}, -{83,-8,54}, -{83,-8,55}, -{83,-8,56}, -{83,-8,57}, -{83,-8,58}, -{83,-8,59}, -{83,-8,60}, -{83,-8,61}, -{83,-8,62}, -{83,-8,63}, -{83,-8,64}, -{83,-8,65}, -{83,-8,66}, -{83,-8,67}, -{83,-8,68}, -{83,-8,69}, -{83,-8,70}, -{83,-8,71}, -{83,-8,72}, -{83,-8,73}, -{83,-8,74}, -{83,-8,75}, -{83,-8,76}, -{83,-8,77}, -{83,-8,78}, -{83,-8,79}, -{83,-8,80}, -{83,-8,81}, -{83,-8,82}, -{83,-8,83}, -{83,-7,-26}, -{83,-7,-25}, -{83,-7,-24}, -{83,-7,-23}, -{83,-7,-22}, -{83,-7,-21}, -{83,-7,-20}, -{83,-7,-19}, -{83,-7,-18}, -{83,-7,-17}, -{83,-7,-16}, -{83,-7,-15}, -{83,-7,-14}, -{83,-7,-13}, -{83,-7,-12}, -{83,-7,-11}, -{83,-7,-10}, -{83,-7,-9}, -{83,-7,-8}, -{83,-7,-7}, -{83,-7,-6}, -{83,-7,-5}, -{83,-7,-4}, -{83,-7,-3}, -{83,-7,-2}, -{83,-7,-1}, -{83,-7,0}, -{83,-7,1}, -{83,-7,2}, -{83,-7,3}, -{83,-7,4}, -{83,-7,5}, -{83,-7,6}, -{83,-7,7}, -{83,-7,8}, -{83,-7,9}, -{83,-7,10}, -{83,-7,11}, -{83,-7,12}, -{83,-7,13}, -{83,-7,14}, -{83,-7,15}, -{83,-7,16}, -{83,-7,17}, -{83,-7,18}, -{83,-7,19}, -{83,-7,20}, -{83,-7,21}, -{83,-7,22}, -{83,-7,23}, -{83,-7,24}, -{83,-7,25}, -{83,-7,26}, -{83,-7,27}, -{83,-7,28}, -{83,-7,29}, -{83,-7,30}, -{83,-7,31}, -{83,-7,32}, -{83,-7,33}, -{83,-7,34}, -{83,-7,35}, -{83,-7,36}, -{83,-7,37}, -{83,-7,38}, -{83,-7,39}, -{83,-7,40}, -{83,-7,41}, -{83,-7,42}, -{83,-7,43}, -{83,-7,44}, -{83,-7,45}, -{83,-7,46}, -{83,-7,47}, -{83,-7,48}, -{83,-7,49}, -{83,-7,50}, -{83,-7,51}, -{83,-7,52}, -{83,-7,53}, -{83,-7,54}, -{83,-7,55}, -{83,-7,56}, -{83,-7,57}, -{83,-7,58}, -{83,-7,59}, -{83,-7,60}, -{83,-7,61}, -{83,-7,62}, -{83,-7,63}, -{83,-7,64}, -{83,-7,65}, -{83,-7,66}, -{83,-7,67}, -{83,-7,68}, -{83,-7,69}, -{83,-7,70}, -{83,-7,71}, -{83,-7,72}, -{83,-7,73}, -{83,-7,74}, -{83,-7,75}, -{83,-7,76}, -{83,-7,77}, -{83,-7,78}, -{83,-7,79}, -{83,-7,80}, -{83,-7,81}, -{83,-7,82}, -{83,-7,83}, -{83,-6,-26}, -{83,-6,-25}, -{83,-6,-24}, -{83,-6,-23}, -{83,-6,-22}, -{83,-6,-21}, -{83,-6,-20}, -{83,-6,-19}, -{83,-6,-18}, -{83,-6,-17}, -{83,-6,-16}, -{83,-6,-15}, -{83,-6,-14}, -{83,-6,-13}, -{83,-6,-12}, -{83,-6,-11}, -{83,-6,-10}, -{83,-6,-9}, -{83,-6,-8}, -{83,-6,-7}, -{83,-6,-6}, -{83,-6,-5}, -{83,-6,-4}, -{83,-6,-3}, -{83,-6,-2}, -{83,-6,-1}, -{83,-6,0}, -{83,-6,1}, -{83,-6,2}, -{83,-6,3}, -{83,-6,4}, -{83,-6,5}, -{83,-6,6}, -{83,-6,7}, -{83,-6,8}, -{83,-6,9}, -{83,-6,10}, -{83,-6,11}, -{83,-6,12}, -{83,-6,13}, -{83,-6,14}, -{83,-6,15}, -{83,-6,16}, -{83,-6,17}, -{83,-6,18}, -{83,-6,19}, -{83,-6,20}, -{83,-6,21}, -{83,-6,22}, -{83,-6,23}, -{83,-6,24}, -{83,-6,25}, -{83,-6,26}, -{83,-6,27}, -{83,-6,28}, -{83,-6,29}, -{83,-6,30}, -{83,-6,31}, -{83,-6,32}, -{83,-6,33}, -{83,-6,34}, -{83,-6,35}, -{83,-6,36}, -{83,-6,37}, -{83,-6,38}, -{83,-6,39}, -{83,-6,40}, -{83,-6,41}, -{83,-6,42}, -{83,-6,43}, -{83,-6,44}, -{83,-6,45}, -{83,-6,46}, -{83,-6,47}, -{83,-6,48}, -{83,-6,49}, -{83,-6,50}, -{83,-6,51}, -{83,-6,52}, -{83,-6,53}, -{83,-6,54}, -{83,-6,55}, -{83,-6,56}, -{83,-6,57}, -{83,-6,58}, -{83,-6,59}, -{83,-6,60}, -{83,-6,61}, -{83,-6,62}, -{83,-6,63}, -{83,-6,64}, -{83,-6,65}, -{83,-6,66}, -{83,-6,67}, -{83,-6,68}, -{83,-6,69}, -{83,-6,70}, -{83,-6,71}, -{83,-6,72}, -{83,-6,73}, -{83,-6,74}, -{83,-6,75}, -{83,-6,76}, -{83,-6,77}, -{83,-6,78}, -{83,-6,79}, -{83,-6,80}, -{83,-6,81}, -{83,-6,82}, -{83,-6,83}, -{83,-5,-26}, -{83,-5,-25}, -{83,-5,-24}, -{83,-5,-23}, -{83,-5,-22}, -{83,-5,-21}, -{83,-5,-20}, -{83,-5,-19}, -{83,-5,-18}, -{83,-5,-17}, -{83,-5,-16}, -{83,-5,-15}, -{83,-5,-14}, -{83,-5,-13}, -{83,-5,-12}, -{83,-5,-11}, -{83,-5,-10}, -{83,-5,-9}, -{83,-5,-8}, -{83,-5,-7}, -{83,-5,-6}, -{83,-5,-5}, -{83,-5,-4}, -{83,-5,-3}, -{83,-5,-2}, -{83,-5,-1}, -{83,-5,0}, -{83,-5,1}, -{83,-5,2}, -{83,-5,3}, -{83,-5,4}, -{83,-5,5}, -{83,-5,6}, -{83,-5,7}, -{83,-5,8}, -{83,-5,9}, -{83,-5,10}, -{83,-5,11}, -{83,-5,12}, -{83,-5,13}, -{83,-5,14}, -{83,-5,15}, -{83,-5,16}, -{83,-5,17}, -{83,-5,18}, -{83,-5,19}, -{83,-5,20}, -{83,-5,21}, -{83,-5,22}, -{83,-5,23}, -{83,-5,24}, -{83,-5,25}, -{83,-5,26}, -{83,-5,27}, -{83,-5,28}, -{83,-5,29}, -{83,-5,30}, -{83,-5,31}, -{83,-5,32}, -{83,-5,33}, -{83,-5,34}, -{83,-5,35}, -{83,-5,36}, -{83,-5,37}, -{83,-5,38}, -{83,-5,39}, -{83,-5,40}, -{83,-5,41}, -{83,-5,42}, -{83,-5,43}, -{83,-5,44}, -{83,-5,45}, -{83,-5,46}, -{83,-5,47}, -{83,-5,48}, -{83,-5,49}, -{83,-5,50}, -{83,-5,51}, -{83,-5,52}, -{83,-5,53}, -{83,-5,54}, -{83,-5,55}, -{83,-5,56}, -{83,-5,57}, -{83,-5,58}, -{83,-5,59}, -{83,-5,60}, -{83,-5,61}, -{83,-5,62}, -{83,-5,63}, -{83,-5,64}, -{83,-5,65}, -{83,-5,66}, -{83,-5,67}, -{83,-5,68}, -{83,-5,69}, -{83,-5,70}, -{83,-5,71}, -{83,-5,72}, -{83,-5,73}, -{83,-5,74}, -{83,-5,75}, -{83,-5,76}, -{83,-5,77}, -{83,-5,78}, -{83,-5,79}, -{83,-5,80}, -{83,-5,81}, -{83,-5,82}, -{83,-5,83}, -{83,-4,-26}, -{83,-4,-25}, -{83,-4,-24}, -{83,-4,-23}, -{83,-4,-22}, -{83,-4,-21}, -{83,-4,-20}, -{83,-4,-19}, -{83,-4,-18}, -{83,-4,-17}, -{83,-4,-16}, -{83,-4,-15}, -{83,-4,-14}, -{83,-4,-13}, -{83,-4,-12}, -{83,-4,-11}, -{83,-4,-10}, -{83,-4,-9}, -{83,-4,-8}, -{83,-4,-7}, -{83,-4,-6}, -{83,-4,-5}, -{83,-4,-4}, -{83,-4,-3}, -{83,-4,-2}, -{83,-4,-1}, -{83,-4,0}, -{83,-4,1}, -{83,-4,2}, -{83,-4,3}, -{83,-4,4}, -{83,-4,5}, -{83,-4,6}, -{83,-4,7}, -{83,-4,8}, -{83,-4,9}, -{83,-4,10}, -{83,-4,11}, -{83,-4,12}, -{83,-4,13}, -{83,-4,14}, -{83,-4,15}, -{83,-4,16}, -{83,-4,17}, -{83,-4,18}, -{83,-4,19}, -{83,-4,20}, -{83,-4,21}, -{83,-4,22}, -{83,-4,23}, -{83,-4,24}, -{83,-4,25}, -{83,-4,26}, -{83,-4,27}, -{83,-4,28}, -{83,-4,29}, -{83,-4,30}, -{83,-4,31}, -{83,-4,32}, -{83,-4,33}, -{83,-4,34}, -{83,-4,35}, -{83,-4,36}, -{83,-4,37}, -{83,-4,38}, -{83,-4,39}, -{83,-4,40}, -{83,-4,41}, -{83,-4,42}, -{83,-4,43}, -{83,-4,44}, -{83,-4,45}, -{83,-4,46}, -{83,-4,47}, -{83,-4,48}, -{83,-4,49}, -{83,-4,50}, -{83,-4,51}, -{83,-4,52}, -{83,-4,53}, -{83,-4,54}, -{83,-4,55}, -{83,-4,56}, -{83,-4,57}, -{83,-4,58}, -{83,-4,59}, -{83,-4,60}, -{83,-4,61}, -{83,-4,62}, -{83,-4,63}, -{83,-4,64}, -{83,-4,65}, -{83,-4,66}, -{83,-4,67}, -{83,-4,68}, -{83,-4,69}, -{83,-4,70}, -{83,-4,71}, -{83,-4,72}, -{83,-4,73}, -{83,-4,74}, -{83,-4,75}, -{83,-4,76}, -{83,-4,77}, -{83,-4,78}, -{83,-4,79}, -{83,-4,80}, -{83,-4,81}, -{83,-4,82}, -{83,-4,83}, -{83,-3,-26}, -{83,-3,-25}, -{83,-3,-24}, -{83,-3,-23}, -{83,-3,-22}, -{83,-3,-21}, -{83,-3,-20}, -{83,-3,-19}, -{83,-3,-18}, -{83,-3,-17}, -{83,-3,-16}, -{83,-3,-15}, -{83,-3,-14}, -{83,-3,-13}, -{83,-3,-12}, -{83,-3,-11}, -{83,-3,-10}, -{83,-3,-9}, -{83,-3,-8}, -{83,-3,-7}, -{83,-3,-6}, -{83,-3,-5}, -{83,-3,-4}, -{83,-3,-3}, -{83,-3,-2}, -{83,-3,-1}, -{83,-3,0}, -{83,-3,1}, -{83,-3,2}, -{83,-3,3}, -{83,-3,4}, -{83,-3,5}, -{83,-3,6}, -{83,-3,7}, -{83,-3,8}, -{83,-3,9}, -{83,-3,10}, -{83,-3,11}, -{83,-3,12}, -{83,-3,13}, -{83,-3,14}, -{83,-3,15}, -{83,-3,16}, -{83,-3,17}, -{83,-3,18}, -{83,-3,19}, -{83,-3,20}, -{83,-3,21}, -{83,-3,22}, -{83,-3,23}, -{83,-3,24}, -{83,-3,25}, -{83,-3,26}, -{83,-3,27}, -{83,-3,28}, -{83,-3,29}, -{83,-3,30}, -{83,-3,31}, -{83,-3,32}, -{83,-3,33}, -{83,-3,34}, -{83,-3,35}, -{83,-3,36}, -{83,-3,37}, -{83,-3,38}, -{83,-3,39}, -{83,-3,40}, -{83,-3,41}, -{83,-3,42}, -{83,-3,43}, -{83,-3,44}, -{83,-3,45}, -{83,-3,46}, -{83,-3,47}, -{83,-3,48}, -{83,-3,49}, -{83,-3,50}, -{83,-3,51}, -{83,-3,52}, -{83,-3,53}, -{83,-3,54}, -{83,-3,55}, -{83,-3,56}, -{83,-3,57}, -{83,-3,58}, -{83,-3,59}, -{83,-3,60}, -{83,-3,61}, -{83,-3,62}, -{83,-3,63}, -{83,-3,64}, -{83,-3,65}, -{83,-3,66}, -{83,-3,67}, -{83,-3,68}, -{83,-3,69}, -{83,-3,70}, -{83,-3,71}, -{83,-3,72}, -{83,-3,73}, -{83,-3,74}, -{83,-3,75}, -{83,-3,76}, -{83,-3,77}, -{83,-3,78}, -{83,-3,79}, -{83,-3,80}, -{83,-3,81}, -{83,-3,82}, -{83,-3,83}, -{83,-2,-26}, -{83,-2,-25}, -{83,-2,-24}, -{83,-2,-23}, -{83,-2,-22}, -{83,-2,-21}, -{83,-2,-20}, -{83,-2,-19}, -{83,-2,-18}, -{83,-2,-17}, -{83,-2,-16}, -{83,-2,-15}, -{83,-2,-14}, -{83,-2,-13}, -{83,-2,-12}, -{83,-2,-11}, -{83,-2,-10}, -{83,-2,-9}, -{83,-2,-8}, -{83,-2,-7}, -{83,-2,-6}, -{83,-2,-5}, -{83,-2,-4}, -{83,-2,-3}, -{83,-2,-2}, -{83,-2,-1}, -{83,-2,0}, -{83,-2,1}, -{83,-2,2}, -{83,-2,3}, -{83,-2,4}, -{83,-2,5}, -{83,-2,6}, -{83,-2,7}, -{83,-2,8}, -{83,-2,9}, -{83,-2,10}, -{83,-2,11}, -{83,-2,12}, -{83,-2,13}, -{83,-2,14}, -{83,-2,15}, -{83,-2,16}, -{83,-2,17}, -{83,-2,18}, -{83,-2,19}, -{83,-2,20}, -{83,-2,21}, -{83,-2,22}, -{83,-2,23}, -{83,-2,24}, -{83,-2,25}, -{83,-2,26}, -{83,-2,27}, -{83,-2,28}, -{83,-2,29}, -{83,-2,30}, -{83,-2,31}, -{83,-2,32}, -{83,-2,33}, -{83,-2,34}, -{83,-2,35}, -{83,-2,36}, -{83,-2,37}, -{83,-2,38}, -{83,-2,39}, -{83,-2,40}, -{83,-2,41}, -{83,-2,42}, -{83,-2,43}, -{83,-2,44}, -{83,-2,45}, -{83,-2,46}, -{83,-2,47}, -{83,-2,48}, -{83,-2,49}, -{83,-2,50}, -{83,-2,51}, -{83,-2,52}, -{83,-2,53}, -{83,-2,54}, -{83,-2,55}, -{83,-2,56}, -{83,-2,57}, -{83,-2,58}, -{83,-2,59}, -{83,-2,60}, -{83,-2,61}, -{83,-2,62}, -{83,-2,63}, -{83,-2,64}, -{83,-2,65}, -{83,-2,66}, -{83,-2,67}, -{83,-2,68}, -{83,-2,69}, -{83,-2,70}, -{83,-2,71}, -{83,-2,72}, -{83,-2,73}, -{83,-2,74}, -{83,-2,75}, -{83,-2,76}, -{83,-2,77}, -{83,-2,78}, -{83,-2,79}, -{83,-2,80}, -{83,-2,81}, -{83,-2,82}, -{83,-2,83}, -{83,-1,-26}, -{83,-1,-25}, -{83,-1,-24}, -{83,-1,-23}, -{83,-1,-22}, -{83,-1,-21}, -{83,-1,-20}, -{83,-1,-19}, -{83,-1,-18}, -{83,-1,-17}, -{83,-1,-16}, -{83,-1,-15}, -{83,-1,-14}, -{83,-1,-13}, -{83,-1,-12}, -{83,-1,-11}, -{83,-1,-10}, -{83,-1,-9}, -{83,-1,-8}, -{83,-1,-7}, -{83,-1,-6}, -{83,-1,-5}, -{83,-1,-4}, -{83,-1,-3}, -{83,-1,-2}, -{83,-1,-1}, -{83,-1,0}, -{83,-1,1}, -{83,-1,2}, -{83,-1,3}, -{83,-1,4}, -{83,-1,5}, -{83,-1,6}, -{83,-1,7}, -{83,-1,8}, -{83,-1,9}, -{83,-1,10}, -{83,-1,11}, -{83,-1,12}, -{83,-1,13}, -{83,-1,14}, -{83,-1,15}, -{83,-1,16}, -{83,-1,17}, -{83,-1,18}, -{83,-1,19}, -{83,-1,20}, -{83,-1,21}, -{83,-1,22}, -{83,-1,23}, -{83,-1,24}, -{83,-1,25}, -{83,-1,26}, -{83,-1,27}, -{83,-1,28}, -{83,-1,29}, -{83,-1,30}, -{83,-1,31}, -{83,-1,32}, -{83,-1,33}, -{83,-1,34}, -{83,-1,35}, -{83,-1,36}, -{83,-1,37}, -{83,-1,38}, -{83,-1,39}, -{83,-1,40}, -{83,-1,41}, -{83,-1,42}, -{83,-1,43}, -{83,-1,44}, -{83,-1,45}, -{83,-1,46}, -{83,-1,47}, -{83,-1,48}, -{83,-1,49}, -{83,-1,50}, -{83,-1,51}, -{83,-1,52}, -{83,-1,53}, -{83,-1,54}, -{83,-1,55}, -{83,-1,56}, -{83,-1,57}, -{83,-1,58}, -{83,-1,59}, -{83,-1,60}, -{83,-1,61}, -{83,-1,62}, -{83,-1,63}, -{83,-1,64}, -{83,-1,65}, -{83,-1,66}, -{83,-1,67}, -{83,-1,68}, -{83,-1,69}, -{83,-1,70}, -{83,-1,71}, -{83,-1,72}, -{83,-1,73}, -{83,-1,74}, -{83,-1,75}, -{83,-1,76}, -{83,-1,77}, -{83,-1,78}, -{83,-1,79}, -{83,-1,80}, -{83,-1,81}, -{83,-1,82}, -{83,-1,83}, -{83,-1,84}, -{83,0,-26}, -{83,0,-25}, -{83,0,-24}, -{83,0,-23}, -{83,0,-22}, -{83,0,-21}, -{83,0,-20}, -{83,0,-19}, -{83,0,-18}, -{83,0,-17}, -{83,0,-16}, -{83,0,-15}, -{83,0,-14}, -{83,0,-13}, -{83,0,-12}, -{83,0,-11}, -{83,0,-10}, -{83,0,-9}, -{83,0,-8}, -{83,0,-7}, -{83,0,-6}, -{83,0,-5}, -{83,0,-4}, -{83,0,-3}, -{83,0,-2}, -{83,0,-1}, -{83,0,0}, -{83,0,1}, -{83,0,2}, -{83,0,3}, -{83,0,4}, -{83,0,5}, -{83,0,6}, -{83,0,7}, -{83,0,8}, -{83,0,9}, -{83,0,10}, -{83,0,11}, -{83,0,12}, -{83,0,13}, -{83,0,14}, -{83,0,15}, -{83,0,16}, -{83,0,17}, -{83,0,18}, -{83,0,19}, -{83,0,20}, -{83,0,21}, -{83,0,22}, -{83,0,23}, -{83,0,24}, -{83,0,25}, -{83,0,26}, -{83,0,27}, -{83,0,28}, -{83,0,29}, -{83,0,30}, -{83,0,31}, -{83,0,32}, -{83,0,33}, -{83,0,34}, -{83,0,35}, -{83,0,36}, -{83,0,37}, -{83,0,38}, -{83,0,39}, -{83,0,40}, -{83,0,41}, -{83,0,42}, -{83,0,43}, -{83,0,44}, -{83,0,45}, -{83,0,46}, -{83,0,47}, -{83,0,48}, -{83,0,49}, -{83,0,50}, -{83,0,51}, -{83,0,52}, -{83,0,53}, -{83,0,54}, -{83,0,55}, -{83,0,56}, -{83,0,57}, -{83,0,58}, -{83,0,59}, -{83,0,60}, -{83,0,61}, -{83,0,62}, -{83,0,63}, -{83,0,64}, -{83,0,65}, -{83,0,66}, -{83,0,67}, -{83,0,68}, -{83,0,69}, -{83,0,70}, -{83,0,71}, -{83,0,72}, -{83,0,73}, -{83,0,74}, -{83,0,75}, -{83,0,76}, -{83,0,77}, -{83,0,78}, -{83,0,79}, -{83,0,80}, -{83,0,81}, -{83,0,82}, -{83,0,83}, -{83,0,84}, -{83,1,-26}, -{83,1,-25}, -{83,1,-24}, -{83,1,-23}, -{83,1,-22}, -{83,1,-21}, -{83,1,-20}, -{83,1,-19}, -{83,1,-18}, -{83,1,-17}, -{83,1,-16}, -{83,1,-15}, -{83,1,-14}, -{83,1,-13}, -{83,1,-12}, -{83,1,-11}, -{83,1,-10}, -{83,1,-9}, -{83,1,-8}, -{83,1,-7}, -{83,1,-6}, -{83,1,-5}, -{83,1,-4}, -{83,1,-3}, -{83,1,-2}, -{83,1,-1}, -{83,1,0}, -{83,1,1}, -{83,1,2}, -{83,1,3}, -{83,1,4}, -{83,1,5}, -{83,1,6}, -{83,1,7}, -{83,1,8}, -{83,1,9}, -{83,1,10}, -{83,1,11}, -{83,1,12}, -{83,1,13}, -{83,1,14}, -{83,1,15}, -{83,1,16}, -{83,1,17}, -{83,1,18}, -{83,1,19}, -{83,1,20}, -{83,1,21}, -{83,1,22}, -{83,1,23}, -{83,1,24}, -{83,1,25}, -{83,1,26}, -{83,1,27}, -{83,1,28}, -{83,1,29}, -{83,1,30}, -{83,1,31}, -{83,1,32}, -{83,1,33}, -{83,1,34}, -{83,1,35}, -{83,1,36}, -{83,1,37}, -{83,1,38}, -{83,1,39}, -{83,1,40}, -{83,1,41}, -{83,1,42}, -{83,1,43}, -{83,1,44}, -{83,1,45}, -{83,1,46}, -{83,1,47}, -{83,1,48}, -{83,1,49}, -{83,1,50}, -{83,1,51}, -{83,1,52}, -{83,1,53}, -{83,1,54}, -{83,1,55}, -{83,1,56}, -{83,1,57}, -{83,1,58}, -{83,1,59}, -{83,1,60}, -{83,1,61}, -{83,1,62}, -{83,1,63}, -{83,1,64}, -{83,1,65}, -{83,1,66}, -{83,1,67}, -{83,1,68}, -{83,1,69}, -{83,1,70}, -{83,1,71}, -{83,1,72}, -{83,1,73}, -{83,1,74}, -{83,1,75}, -{83,1,76}, -{83,1,77}, -{83,1,78}, -{83,1,79}, -{83,1,80}, -{83,1,81}, -{83,1,82}, -{83,1,83}, -{83,1,84}, -{83,2,-26}, -{83,2,-25}, -{83,2,-24}, -{83,2,-23}, -{83,2,-22}, -{83,2,-21}, -{83,2,-20}, -{83,2,-19}, -{83,2,-18}, -{83,2,-17}, -{83,2,-16}, -{83,2,-15}, -{83,2,-14}, -{83,2,-13}, -{83,2,-12}, -{83,2,-11}, -{83,2,-10}, -{83,2,-9}, -{83,2,-8}, -{83,2,-7}, -{83,2,-6}, -{83,2,-5}, -{83,2,-4}, -{83,2,-3}, -{83,2,-2}, -{83,2,-1}, -{83,2,0}, -{83,2,1}, -{83,2,2}, -{83,2,3}, -{83,2,4}, -{83,2,5}, -{83,2,6}, -{83,2,7}, -{83,2,8}, -{83,2,9}, -{83,2,10}, -{83,2,11}, -{83,2,12}, -{83,2,13}, -{83,2,14}, -{83,2,15}, -{83,2,16}, -{83,2,17}, -{83,2,18}, -{83,2,19}, -{83,2,20}, -{83,2,21}, -{83,2,22}, -{83,2,23}, -{83,2,24}, -{83,2,25}, -{83,2,26}, -{83,2,27}, -{83,2,28}, -{83,2,29}, -{83,2,30}, -{83,2,31}, -{83,2,32}, -{83,2,33}, -{83,2,34}, -{83,2,35}, -{83,2,36}, -{83,2,37}, -{83,2,38}, -{83,2,39}, -{83,2,40}, -{83,2,41}, -{83,2,42}, -{83,2,43}, -{83,2,44}, -{83,2,45}, -{83,2,46}, -{83,2,47}, -{83,2,48}, -{83,2,49}, -{83,2,50}, -{83,2,51}, -{83,2,52}, -{83,2,53}, -{83,2,54}, -{83,2,55}, -{83,2,56}, -{83,2,57}, -{83,2,58}, -{83,2,59}, -{83,2,60}, -{83,2,61}, -{83,2,62}, -{83,2,63}, -{83,2,64}, -{83,2,65}, -{83,2,66}, -{83,2,67}, -{83,2,68}, -{83,2,69}, -{83,2,70}, -{83,2,71}, -{83,2,72}, -{83,2,73}, -{83,2,74}, -{83,2,75}, -{83,2,76}, -{83,2,77}, -{83,2,78}, -{83,2,79}, -{83,2,80}, -{83,2,81}, -{83,2,82}, -{83,2,83}, -{83,2,84}, -{83,3,-26}, -{83,3,-25}, -{83,3,-24}, -{83,3,-23}, -{83,3,-22}, -{83,3,-21}, -{83,3,-20}, -{83,3,-19}, -{83,3,-18}, -{83,3,-17}, -{83,3,-16}, -{83,3,-15}, -{83,3,-14}, -{83,3,-13}, -{83,3,-12}, -{83,3,-11}, -{83,3,-10}, -{83,3,-9}, -{83,3,-8}, -{83,3,-7}, -{83,3,-6}, -{83,3,-5}, -{83,3,-4}, -{83,3,-3}, -{83,3,-2}, -{83,3,-1}, -{83,3,0}, -{83,3,1}, -{83,3,2}, -{83,3,3}, -{83,3,4}, -{83,3,5}, -{83,3,6}, -{83,3,7}, -{83,3,8}, -{83,3,9}, -{83,3,10}, -{83,3,11}, -{83,3,12}, -{83,3,13}, -{83,3,14}, -{83,3,15}, -{83,3,16}, -{83,3,17}, -{83,3,18}, -{83,3,19}, -{83,3,20}, -{83,3,21}, -{83,3,22}, -{83,3,23}, -{83,3,24}, -{83,3,25}, -{83,3,26}, -{83,3,27}, -{83,3,28}, -{83,3,29}, -{83,3,30}, -{83,3,31}, -{83,3,32}, -{83,3,33}, -{83,3,34}, -{83,3,35}, -{83,3,36}, -{83,3,37}, -{83,3,38}, -{83,3,39}, -{83,3,40}, -{83,3,41}, -{83,3,42}, -{83,3,43}, -{83,3,44}, -{83,3,45}, -{83,3,46}, -{83,3,47}, -{83,3,48}, -{83,3,49}, -{83,3,50}, -{83,3,51}, -{83,3,52}, -{83,3,53}, -{83,3,54}, -{83,3,55}, -{83,3,56}, -{83,3,57}, -{83,3,58}, -{83,3,59}, -{83,3,60}, -{83,3,61}, -{83,3,62}, -{83,3,63}, -{83,3,64}, -{83,3,65}, -{83,3,66}, -{83,3,67}, -{83,3,68}, -{83,3,69}, -{83,3,70}, -{83,3,71}, -{83,3,72}, -{83,3,73}, -{83,3,74}, -{83,3,75}, -{83,3,76}, -{83,3,77}, -{83,3,78}, -{83,3,79}, -{83,3,80}, -{83,3,81}, -{83,3,82}, -{83,3,83}, -{83,3,84}, -{83,4,-26}, -{83,4,-25}, -{83,4,-24}, -{83,4,-23}, -{83,4,-22}, -{83,4,-21}, -{83,4,-20}, -{83,4,-19}, -{83,4,-18}, -{83,4,-17}, -{83,4,-16}, -{83,4,-15}, -{83,4,-14}, -{83,4,-13}, -{83,4,-12}, -{83,4,-11}, -{83,4,-10}, -{83,4,-9}, -{83,4,-8}, -{83,4,-7}, -{83,4,-6}, -{83,4,-5}, -{83,4,-4}, -{83,4,-3}, -{83,4,-2}, -{83,4,-1}, -{83,4,0}, -{83,4,1}, -{83,4,2}, -{83,4,3}, -{83,4,4}, -{83,4,5}, -{83,4,6}, -{83,4,7}, -{83,4,8}, -{83,4,9}, -{83,4,10}, -{83,4,11}, -{83,4,12}, -{83,4,13}, -{83,4,14}, -{83,4,15}, -{83,4,16}, -{83,4,17}, -{83,4,18}, -{83,4,19}, -{83,4,20}, -{83,4,21}, -{83,4,22}, -{83,4,23}, -{83,4,24}, -{83,4,25}, -{83,4,26}, -{83,4,27}, -{83,4,28}, -{83,4,29}, -{83,4,30}, -{83,4,31}, -{83,4,32}, -{83,4,33}, -{83,4,34}, -{83,4,35}, -{83,4,36}, -{83,4,37}, -{83,4,38}, -{83,4,39}, -{83,4,40}, -{83,4,41}, -{83,4,42}, -{83,4,43}, -{83,4,44}, -{83,4,45}, -{83,4,46}, -{83,4,47}, -{83,4,48}, -{83,4,49}, -{83,4,50}, -{83,4,51}, -{83,4,52}, -{83,4,53}, -{83,4,54}, -{83,4,55}, -{83,4,56}, -{83,4,57}, -{83,4,58}, -{83,4,59}, -{83,4,60}, -{83,4,61}, -{83,4,62}, -{83,4,63}, -{83,4,64}, -{83,4,65}, -{83,4,66}, -{83,4,67}, -{83,4,68}, -{83,4,69}, -{83,4,70}, -{83,4,71}, -{83,4,72}, -{83,4,73}, -{83,4,74}, -{83,4,75}, -{83,4,76}, -{83,4,77}, -{83,4,78}, -{83,4,79}, -{83,4,80}, -{83,4,81}, -{83,4,82}, -{83,4,83}, -{83,4,84}, -{83,5,-26}, -{83,5,-25}, -{83,5,-24}, -{83,5,-23}, -{83,5,-22}, -{83,5,-21}, -{83,5,-20}, -{83,5,-19}, -{83,5,-18}, -{83,5,-17}, -{83,5,-16}, -{83,5,-15}, -{83,5,-14}, -{83,5,-13}, -{83,5,-12}, -{83,5,-11}, -{83,5,-10}, -{83,5,-9}, -{83,5,-8}, -{83,5,-7}, -{83,5,-6}, -{83,5,-5}, -{83,5,-4}, -{83,5,-3}, -{83,5,-2}, -{83,5,-1}, -{83,5,0}, -{83,5,1}, -{83,5,2}, -{83,5,3}, -{83,5,4}, -{83,5,5}, -{83,5,6}, -{83,5,7}, -{83,5,8}, -{83,5,9}, -{83,5,10}, -{83,5,11}, -{83,5,12}, -{83,5,13}, -{83,5,14}, -{83,5,15}, -{83,5,16}, -{83,5,17}, -{83,5,18}, -{83,5,19}, -{83,5,20}, -{83,5,21}, -{83,5,22}, -{83,5,23}, -{83,5,24}, -{83,5,25}, -{83,5,26}, -{83,5,27}, -{83,5,28}, -{83,5,29}, -{83,5,30}, -{83,5,31}, -{83,5,32}, -{83,5,33}, -{83,5,34}, -{83,5,35}, -{83,5,36}, -{83,5,37}, -{83,5,38}, -{83,5,39}, -{83,5,40}, -{83,5,41}, -{83,5,42}, -{83,5,43}, -{83,5,44}, -{83,5,45}, -{83,5,46}, -{83,5,47}, -{83,5,48}, -{83,5,49}, -{83,5,50}, -{83,5,51}, -{83,5,52}, -{83,5,53}, -{83,5,54}, -{83,5,55}, -{83,5,56}, -{83,5,57}, -{83,5,58}, -{83,5,59}, -{83,5,60}, -{83,5,61}, -{83,5,62}, -{83,5,63}, -{83,5,64}, -{83,5,65}, -{83,5,66}, -{83,5,67}, -{83,5,68}, -{83,5,69}, -{83,5,70}, -{83,5,71}, -{83,5,72}, -{83,5,73}, -{83,5,74}, -{83,5,75}, -{83,5,76}, -{83,5,77}, -{83,5,78}, -{83,5,79}, -{83,5,80}, -{83,5,81}, -{83,5,82}, -{83,5,83}, -{83,5,84}, -{83,6,-26}, -{83,6,-25}, -{83,6,-24}, -{83,6,-23}, -{83,6,-22}, -{83,6,-21}, -{83,6,-20}, -{83,6,-19}, -{83,6,-18}, -{83,6,-17}, -{83,6,-16}, -{83,6,-15}, -{83,6,-14}, -{83,6,-13}, -{83,6,-12}, -{83,6,-11}, -{83,6,-10}, -{83,6,-9}, -{83,6,-8}, -{83,6,-7}, -{83,6,-6}, -{83,6,-5}, -{83,6,-4}, -{83,6,-3}, -{83,6,-2}, -{83,6,-1}, -{83,6,0}, -{83,6,1}, -{83,6,2}, -{83,6,3}, -{83,6,4}, -{83,6,5}, -{83,6,6}, -{83,6,7}, -{83,6,8}, -{83,6,9}, -{83,6,10}, -{83,6,11}, -{83,6,12}, -{83,6,13}, -{83,6,14}, -{83,6,15}, -{83,6,16}, -{83,6,17}, -{83,6,18}, -{83,6,19}, -{83,6,20}, -{83,6,21}, -{83,6,22}, -{83,6,23}, -{83,6,24}, -{83,6,25}, -{83,6,26}, -{83,6,27}, -{83,6,28}, -{83,6,29}, -{83,6,30}, -{83,6,31}, -{83,6,32}, -{83,6,33}, -{83,6,34}, -{83,6,35}, -{83,6,36}, -{83,6,37}, -{83,6,38}, -{83,6,39}, -{83,6,40}, -{83,6,41}, -{83,6,42}, -{83,6,43}, -{83,6,44}, -{83,6,45}, -{83,6,46}, -{83,6,47}, -{83,6,48}, -{83,6,49}, -{83,6,50}, -{83,6,51}, -{83,6,52}, -{83,6,53}, -{83,6,54}, -{83,6,55}, -{83,6,56}, -{83,6,57}, -{83,6,58}, -{83,6,59}, -{83,6,60}, -{83,6,61}, -{83,6,62}, -{83,6,63}, -{83,6,64}, -{83,6,65}, -{83,6,66}, -{83,6,67}, -{83,6,68}, -{83,6,69}, -{83,6,70}, -{83,6,71}, -{83,6,72}, -{83,6,73}, -{83,6,74}, -{83,6,75}, -{83,6,76}, -{83,6,77}, -{83,6,78}, -{83,6,79}, -{83,6,80}, -{83,6,81}, -{83,6,82}, -{83,6,83}, -{83,6,84}, -{83,7,-25}, -{83,7,-24}, -{83,7,-23}, -{83,7,-22}, -{83,7,-21}, -{83,7,-20}, -{83,7,-19}, -{83,7,-18}, -{83,7,-17}, -{83,7,-16}, -{83,7,-15}, -{83,7,-14}, -{83,7,-13}, -{83,7,-12}, -{83,7,-11}, -{83,7,-10}, -{83,7,-9}, -{83,7,-8}, -{83,7,-7}, -{83,7,-6}, -{83,7,-5}, -{83,7,-4}, -{83,7,-3}, -{83,7,-2}, -{83,7,-1}, -{83,7,0}, -{83,7,1}, -{83,7,2}, -{83,7,3}, -{83,7,4}, -{83,7,5}, -{83,7,6}, -{83,7,7}, -{83,7,8}, -{83,7,9}, -{83,7,10}, -{83,7,11}, -{83,7,12}, -{83,7,13}, -{83,7,14}, -{83,7,15}, -{83,7,16}, -{83,7,17}, -{83,7,18}, -{83,7,19}, -{83,7,20}, -{83,7,21}, -{83,7,22}, -{83,7,23}, -{83,7,24}, -{83,7,25}, -{83,7,26}, -{83,7,27}, -{83,7,28}, -{83,7,29}, -{83,7,30}, -{83,7,31}, -{83,7,32}, -{83,7,33}, -{83,7,34}, -{83,7,35}, -{83,7,36}, -{83,7,37}, -{83,7,38}, -{83,7,39}, -{83,7,40}, -{83,7,41}, -{83,7,42}, -{83,7,43}, -{83,7,44}, -{83,7,45}, -{83,7,46}, -{83,7,47}, -{83,7,48}, -{83,7,49}, -{83,7,50}, -{83,7,51}, -{83,7,52}, -{83,7,53}, -{83,7,54}, -{83,7,55}, -{83,7,56}, -{83,7,57}, -{83,7,58}, -{83,7,59}, -{83,7,60}, -{83,7,61}, -{83,7,62}, -{83,7,63}, -{83,7,64}, -{83,7,65}, -{83,7,66}, -{83,7,67}, -{83,7,68}, -{83,7,69}, -{83,7,70}, -{83,7,71}, -{83,7,72}, -{83,7,73}, -{83,7,74}, -{83,7,75}, -{83,7,76}, -{83,7,77}, -{83,7,78}, -{83,7,79}, -{83,8,-25}, -{83,8,-24}, -{83,8,-23}, -{83,8,-22}, -{83,8,-21}, -{83,8,-20}, -{83,8,-19}, -{83,8,-18}, -{83,8,-17}, -{83,8,-16}, -{83,8,-15}, -{83,8,-14}, -{83,8,-13}, -{83,8,-12}, -{83,8,-11}, -{83,8,-10}, -{83,8,-9}, -{83,8,-8}, -{83,8,-7}, -{83,8,-6}, -{83,8,-5}, -{83,8,-4}, -{83,8,-3}, -{83,8,-2}, -{83,8,-1}, -{83,8,0}, -{83,8,1}, -{83,8,2}, -{83,8,3}, -{83,8,4}, -{83,8,5}, -{83,8,6}, -{83,8,7}, -{83,8,8}, -{83,8,9}, -{83,8,10}, -{83,8,11}, -{83,8,12}, -{83,8,13}, -{83,8,14}, -{83,8,15}, -{83,8,16}, -{83,8,17}, -{83,8,18}, -{83,8,19}, -{83,8,20}, -{83,8,21}, -{83,8,22}, -{83,8,23}, -{83,8,24}, -{83,8,25}, -{83,8,26}, -{83,8,27}, -{83,8,28}, -{83,8,29}, -{83,8,30}, -{83,8,31}, -{83,8,32}, -{83,8,33}, -{83,8,34}, -{83,8,35}, -{83,8,36}, -{83,8,37}, -{83,8,38}, -{83,8,39}, -{83,8,40}, -{83,8,41}, -{83,8,42}, -{83,8,43}, -{83,8,44}, -{83,8,45}, -{83,8,46}, -{83,8,47}, -{83,8,48}, -{83,8,49}, -{83,8,50}, -{83,8,51}, -{83,8,52}, -{83,8,53}, -{83,8,54}, -{83,8,55}, -{83,8,56}, -{83,8,57}, -{83,8,58}, -{83,8,59}, -{83,8,60}, -{83,8,61}, -{83,8,62}, -{83,8,63}, -{83,8,64}, -{83,8,65}, -{83,8,66}, -{83,8,67}, -{83,8,68}, -{83,8,69}, -{83,8,70}, -{83,8,71}, -{83,9,-25}, -{83,9,-24}, -{83,9,-23}, -{83,9,-22}, -{83,9,-21}, -{83,9,-20}, -{83,9,-19}, -{83,9,-18}, -{83,9,-17}, -{83,9,-16}, -{83,9,-15}, -{83,9,-14}, -{83,9,-13}, -{83,9,-12}, -{83,9,-11}, -{83,9,-10}, -{83,9,-9}, -{83,9,-8}, -{83,9,-7}, -{83,9,-6}, -{83,9,-5}, -{83,9,-4}, -{83,9,-3}, -{83,9,-2}, -{83,9,-1}, -{83,9,0}, -{83,9,1}, -{83,9,2}, -{83,9,3}, -{83,9,4}, -{83,9,5}, -{83,9,6}, -{83,9,7}, -{83,9,8}, -{83,9,9}, -{83,9,10}, -{83,9,11}, -{83,9,12}, -{83,9,13}, -{83,9,14}, -{83,9,15}, -{83,9,16}, -{83,9,17}, -{83,9,18}, -{83,9,19}, -{83,9,20}, -{83,9,21}, -{83,9,22}, -{83,9,23}, -{83,9,24}, -{83,9,25}, -{83,9,26}, -{83,9,27}, -{83,9,28}, -{83,9,29}, -{83,9,30}, -{83,9,31}, -{83,9,32}, -{83,9,33}, -{83,9,34}, -{83,9,35}, -{83,9,36}, -{83,9,37}, -{83,9,38}, -{83,9,39}, -{83,9,40}, -{83,9,41}, -{83,9,42}, -{83,9,43}, -{83,9,44}, -{83,9,45}, -{83,9,46}, -{83,9,47}, -{83,9,48}, -{83,9,49}, -{83,9,50}, -{83,9,51}, -{83,9,52}, -{83,9,53}, -{83,9,54}, -{83,9,55}, -{83,9,56}, -{83,9,57}, -{83,9,58}, -{83,9,59}, -{83,9,60}, -{83,9,61}, -{83,9,62}, -{83,9,63}, -{83,9,64}, -{83,10,-25}, -{83,10,-24}, -{83,10,-23}, -{83,10,-22}, -{83,10,-21}, -{83,10,-20}, -{83,10,-19}, -{83,10,-18}, -{83,10,-17}, -{83,10,-16}, -{83,10,-15}, -{83,10,-14}, -{83,10,-13}, -{83,10,-12}, -{83,10,-11}, -{83,10,-10}, -{83,10,-9}, -{83,10,-8}, -{83,10,-7}, -{83,10,-6}, -{83,10,-5}, -{83,10,-4}, -{83,10,-3}, -{83,10,-2}, -{83,10,-1}, -{83,10,0}, -{83,10,1}, -{83,10,2}, -{83,10,3}, -{83,10,4}, -{83,10,5}, -{83,10,6}, -{83,10,7}, -{83,10,8}, -{83,10,9}, -{83,10,10}, -{83,10,11}, -{83,10,12}, -{83,10,13}, -{83,10,14}, -{83,10,15}, -{83,10,16}, -{83,10,17}, -{83,10,18}, -{83,10,19}, -{83,10,20}, -{83,10,21}, -{83,10,22}, -{83,10,23}, -{83,10,24}, -{83,10,25}, -{83,10,26}, -{83,10,27}, -{83,10,28}, -{83,10,29}, -{83,10,30}, -{83,10,31}, -{83,10,32}, -{83,10,33}, -{83,10,34}, -{83,10,35}, -{83,10,36}, -{83,10,37}, -{83,10,38}, -{83,10,39}, -{83,10,40}, -{83,10,41}, -{83,10,42}, -{83,10,43}, -{83,10,44}, -{83,10,45}, -{83,10,46}, -{83,10,47}, -{83,10,48}, -{83,10,49}, -{83,10,50}, -{83,10,51}, -{83,10,52}, -{83,10,53}, -{83,10,54}, -{83,10,55}, -{83,10,56}, -{83,10,57}, -{83,10,58}, -{83,10,59}, -{83,11,-25}, -{83,11,-24}, -{83,11,-23}, -{83,11,-22}, -{83,11,-21}, -{83,11,-20}, -{83,11,-19}, -{83,11,-18}, -{83,11,-17}, -{83,11,-16}, -{83,11,-15}, -{83,11,-14}, -{83,11,-13}, -{83,11,-12}, -{83,11,-11}, -{83,11,-10}, -{83,11,-9}, -{83,11,-8}, -{83,11,-7}, -{83,11,-6}, -{83,11,-5}, -{83,11,-4}, -{83,11,-3}, -{83,11,-2}, -{83,11,-1}, -{83,11,0}, -{83,11,1}, -{83,11,2}, -{83,11,3}, -{83,11,4}, -{83,11,5}, -{83,11,6}, -{83,11,7}, -{83,11,8}, -{83,11,9}, -{83,11,10}, -{83,11,11}, -{83,11,12}, -{83,11,13}, -{83,11,14}, -{83,11,15}, -{83,11,16}, -{83,11,17}, -{83,11,18}, -{83,11,19}, -{83,11,20}, -{83,11,21}, -{83,11,22}, -{83,11,23}, -{83,11,24}, -{83,11,25}, -{83,11,26}, -{83,11,27}, -{83,11,28}, -{83,11,29}, -{83,11,30}, -{83,11,31}, -{83,11,32}, -{83,11,33}, -{83,11,34}, -{83,11,35}, -{83,11,36}, -{83,11,37}, -{83,11,38}, -{83,11,39}, -{83,11,40}, -{83,11,41}, -{83,11,42}, -{83,11,43}, -{83,11,44}, -{83,11,45}, -{83,11,46}, -{83,11,47}, -{83,11,48}, -{83,11,49}, -{83,11,50}, -{83,11,51}, -{83,11,52}, -{83,11,53}, -{83,12,-25}, -{83,12,-24}, -{83,12,-23}, -{83,12,-22}, -{83,12,-21}, -{83,12,-20}, -{83,12,-19}, -{83,12,-18}, -{83,12,-17}, -{83,12,-16}, -{83,12,-15}, -{83,12,-14}, -{83,12,-13}, -{83,12,-12}, -{83,12,-11}, -{83,12,-10}, -{83,12,-9}, -{83,12,-8}, -{83,12,-7}, -{83,12,-6}, -{83,12,-5}, -{83,12,-4}, -{83,12,-3}, -{83,12,-2}, -{83,12,-1}, -{83,12,0}, -{83,12,1}, -{83,12,2}, -{83,12,3}, -{83,12,4}, -{83,12,5}, -{83,12,6}, -{83,12,7}, -{83,12,8}, -{83,12,9}, -{83,12,10}, -{83,12,11}, -{83,12,12}, -{83,12,13}, -{83,12,14}, -{83,12,15}, -{83,12,16}, -{83,12,17}, -{83,12,18}, -{83,12,19}, -{83,12,20}, -{83,12,21}, -{83,12,22}, -{83,12,23}, -{83,12,24}, -{83,12,25}, -{83,12,26}, -{83,12,27}, -{83,12,28}, -{83,12,29}, -{83,12,30}, -{83,12,31}, -{83,12,32}, -{83,12,33}, -{83,12,34}, -{83,12,35}, -{83,12,36}, -{83,12,37}, -{83,12,38}, -{83,12,39}, -{83,12,40}, -{83,12,41}, -{83,12,42}, -{83,12,43}, -{83,12,44}, -{83,12,45}, -{83,12,46}, -{83,12,47}, -{83,12,48}, -{83,13,-25}, -{83,13,-24}, -{83,13,-23}, -{83,13,-22}, -{83,13,-21}, -{83,13,-20}, -{83,13,-19}, -{83,13,-18}, -{83,13,-17}, -{83,13,-16}, -{83,13,-15}, -{83,13,-14}, -{83,13,-13}, -{83,13,-12}, -{83,13,-11}, -{83,13,-10}, -{83,13,-9}, -{83,13,-8}, -{83,13,-7}, -{83,13,-6}, -{83,13,-5}, -{83,13,-4}, -{83,13,-3}, -{83,13,-2}, -{83,13,-1}, -{83,13,0}, -{83,13,1}, -{83,13,2}, -{83,13,3}, -{83,13,4}, -{83,13,5}, -{83,13,6}, -{83,13,7}, -{83,13,8}, -{83,13,9}, -{83,13,10}, -{83,13,11}, -{83,13,12}, -{83,13,13}, -{83,13,14}, -{83,13,15}, -{83,13,16}, -{83,13,17}, -{83,13,18}, -{83,13,19}, -{83,13,20}, -{83,13,21}, -{83,13,22}, -{83,13,23}, -{83,13,24}, -{83,13,25}, -{83,13,26}, -{83,13,27}, -{83,13,28}, -{83,13,29}, -{83,13,30}, -{83,13,31}, -{83,13,32}, -{83,13,33}, -{83,13,34}, -{83,13,35}, -{83,13,36}, -{83,13,37}, -{83,13,38}, -{83,13,39}, -{83,13,40}, -{83,13,41}, -{83,13,42}, -{83,13,43}, -{83,13,44}, -{83,14,-25}, -{83,14,-24}, -{83,14,-23}, -{83,14,-22}, -{83,14,-21}, -{83,14,-20}, -{83,14,-19}, -{83,14,-18}, -{83,14,-17}, -{83,14,-16}, -{83,14,-15}, -{83,14,-14}, -{83,14,-13}, -{83,14,-12}, -{83,14,-11}, -{83,14,-10}, -{83,14,-9}, -{83,14,-8}, -{83,14,-7}, -{83,14,-6}, -{83,14,-5}, -{83,14,-4}, -{83,14,-3}, -{83,14,-2}, -{83,14,-1}, -{83,14,0}, -{83,14,1}, -{83,14,2}, -{83,14,3}, -{83,14,4}, -{83,14,5}, -{83,14,6}, -{83,14,7}, -{83,14,8}, -{83,14,9}, -{83,14,10}, -{83,14,11}, -{83,14,12}, -{83,14,13}, -{83,14,14}, -{83,14,15}, -{83,14,16}, -{83,14,17}, -{83,14,18}, -{83,14,19}, -{83,14,20}, -{83,14,21}, -{83,14,22}, -{83,14,23}, -{83,14,24}, -{83,14,25}, -{83,14,26}, -{83,14,27}, -{83,14,28}, -{83,14,29}, -{83,14,30}, -{83,14,31}, -{83,14,32}, -{83,14,33}, -{83,14,34}, -{83,14,35}, -{83,14,36}, -{83,14,37}, -{83,14,38}, -{83,14,39}, -{83,14,40}, -{83,15,-25}, -{83,15,-24}, -{83,15,-23}, -{83,15,-22}, -{83,15,-21}, -{83,15,-20}, -{83,15,-19}, -{83,15,-18}, -{83,15,-17}, -{83,15,-16}, -{83,15,-15}, -{83,15,-14}, -{83,15,-13}, -{83,15,-12}, -{83,15,-11}, -{83,15,-10}, -{83,15,-9}, -{83,15,-8}, -{83,15,-7}, -{83,15,-6}, -{83,15,-5}, -{83,15,-4}, -{83,15,-3}, -{83,15,-2}, -{83,15,-1}, -{83,15,0}, -{83,15,1}, -{83,15,2}, -{83,15,3}, -{83,15,4}, -{83,15,5}, -{83,15,6}, -{83,15,7}, -{83,15,8}, -{83,15,9}, -{83,15,10}, -{83,15,11}, -{83,15,12}, -{83,15,13}, -{83,15,14}, -{83,15,15}, -{83,15,16}, -{83,15,17}, -{83,15,18}, -{83,15,19}, -{83,15,20}, -{83,15,21}, -{83,15,22}, -{83,15,23}, -{83,15,24}, -{83,15,25}, -{83,15,26}, -{83,15,27}, -{83,15,28}, -{83,15,29}, -{83,15,30}, -{83,15,31}, -{83,15,32}, -{83,15,33}, -{83,15,34}, -{83,15,35}, -{83,15,36}, -{83,16,-25}, -{83,16,-24}, -{83,16,-23}, -{83,16,-22}, -{83,16,-21}, -{83,16,-20}, -{83,16,-19}, -{83,16,-18}, -{83,16,-17}, -{83,16,-16}, -{83,16,-15}, -{83,16,-14}, -{83,16,-13}, -{83,16,-12}, -{83,16,-11}, -{83,16,-10}, -{83,16,-9}, -{83,16,-8}, -{83,16,-7}, -{83,16,-6}, -{83,16,-5}, -{83,16,-4}, -{83,16,-3}, -{83,16,-2}, -{83,16,-1}, -{83,16,0}, -{83,16,1}, -{83,16,2}, -{83,16,3}, -{83,16,4}, -{83,16,5}, -{83,16,6}, -{83,16,7}, -{83,16,8}, -{83,16,9}, -{83,16,10}, -{83,16,11}, -{83,16,12}, -{83,16,13}, -{83,16,14}, -{83,16,15}, -{83,16,16}, -{83,16,17}, -{83,16,18}, -{83,16,19}, -{83,16,20}, -{83,16,21}, -{83,16,22}, -{83,16,23}, -{83,16,24}, -{83,16,25}, -{83,16,26}, -{83,16,27}, -{83,16,28}, -{83,16,29}, -{83,16,30}, -{83,16,31}, -{83,16,32}, -{83,17,-25}, -{83,17,-24}, -{83,17,-23}, -{83,17,-22}, -{83,17,-21}, -{83,17,-20}, -{83,17,-19}, -{83,17,-18}, -{83,17,-17}, -{83,17,-16}, -{83,17,-15}, -{83,17,-14}, -{83,17,-13}, -{83,17,-12}, -{83,17,-11}, -{83,17,-10}, -{83,17,-9}, -{83,17,-8}, -{83,17,-7}, -{83,17,-6}, -{83,17,-5}, -{83,17,-4}, -{83,17,-3}, -{83,17,-2}, -{83,17,-1}, -{83,17,0}, -{83,17,1}, -{83,17,2}, -{83,17,3}, -{83,17,4}, -{83,17,5}, -{83,17,6}, -{83,17,7}, -{83,17,8}, -{83,17,9}, -{83,17,10}, -{83,17,11}, -{83,17,12}, -{83,17,13}, -{83,17,14}, -{83,17,15}, -{83,17,16}, -{83,17,17}, -{83,17,18}, -{83,17,19}, -{83,17,20}, -{83,17,21}, -{83,17,22}, -{83,17,23}, -{83,17,24}, -{83,17,25}, -{83,17,26}, -{83,17,27}, -{83,17,28}, -{83,18,-25}, -{83,18,-24}, -{83,18,-23}, -{83,18,-22}, -{83,18,-21}, -{83,18,-20}, -{83,18,-19}, -{83,18,-18}, -{83,18,-17}, -{83,18,-16}, -{83,18,-15}, -{83,18,-14}, -{83,18,-13}, -{83,18,-12}, -{83,18,-11}, -{83,18,-10}, -{83,18,-9}, -{83,18,-8}, -{83,18,-7}, -{83,18,-6}, -{83,18,-5}, -{83,18,-4}, -{83,18,-3}, -{83,18,-2}, -{83,18,-1}, -{83,18,0}, -{83,18,1}, -{83,18,2}, -{83,18,3}, -{83,18,4}, -{83,18,5}, -{83,18,6}, -{83,18,7}, -{83,18,8}, -{83,18,9}, -{83,18,10}, -{83,18,11}, -{83,18,12}, -{83,18,13}, -{83,18,14}, -{83,18,15}, -{83,18,16}, -{83,18,17}, -{83,18,18}, -{83,18,19}, -{83,18,20}, -{83,18,21}, -{83,18,22}, -{83,18,23}, -{83,18,24}, -{83,18,25}, -{83,19,-25}, -{83,19,-24}, -{83,19,-23}, -{83,19,-22}, -{83,19,-21}, -{83,19,-20}, -{83,19,-19}, -{83,19,-18}, -{83,19,-17}, -{83,19,-16}, -{83,19,-15}, -{83,19,-14}, -{83,19,-13}, -{83,19,-12}, -{83,19,-11}, -{83,19,-10}, -{83,19,-9}, -{83,19,-8}, -{83,19,-7}, -{83,19,-6}, -{83,19,-5}, -{83,19,-4}, -{83,19,-3}, -{83,19,-2}, -{83,19,-1}, -{83,19,0}, -{83,19,1}, -{83,19,2}, -{83,19,3}, -{83,19,4}, -{83,19,5}, -{83,19,6}, -{83,19,7}, -{83,19,8}, -{83,19,9}, -{83,19,10}, -{83,19,11}, -{83,19,12}, -{83,19,13}, -{83,19,14}, -{83,19,15}, -{83,19,16}, -{83,19,17}, -{83,19,18}, -{83,19,19}, -{83,19,20}, -{83,19,21}, -{83,20,-25}, -{83,20,-24}, -{83,20,-23}, -{83,20,-22}, -{83,20,-21}, -{83,20,-20}, -{83,20,-19}, -{83,20,-18}, -{83,20,-17}, -{83,20,-16}, -{83,20,-15}, -{83,20,-14}, -{83,20,-13}, -{83,20,-12}, -{83,20,-11}, -{83,20,-10}, -{83,20,-9}, -{83,20,-8}, -{83,20,-7}, -{83,20,-6}, -{83,20,-5}, -{83,20,-4}, -{83,20,-3}, -{83,20,-2}, -{83,20,-1}, -{83,20,0}, -{83,20,1}, -{83,20,2}, -{83,20,3}, -{83,20,4}, -{83,20,5}, -{83,20,6}, -{83,20,7}, -{83,20,8}, -{83,20,9}, -{83,20,10}, -{83,20,11}, -{83,20,12}, -{83,20,13}, -{83,20,14}, -{83,20,15}, -{83,20,16}, -{83,20,17}, -{83,20,18}, -{83,21,-25}, -{83,21,-24}, -{83,21,-23}, -{83,21,-22}, -{83,21,-21}, -{83,21,-20}, -{83,21,-19}, -{83,21,-18}, -{83,21,-17}, -{83,21,-16}, -{83,21,-15}, -{83,21,-14}, -{83,21,-13}, -{83,21,-12}, -{83,21,-11}, -{83,21,-10}, -{83,21,-9}, -{83,21,-8}, -{83,21,-7}, -{83,21,-6}, -{83,21,-5}, -{83,21,-4}, -{83,21,-3}, -{83,21,-2}, -{83,21,-1}, -{83,21,0}, -{83,21,1}, -{83,21,2}, -{83,21,3}, -{83,21,4}, -{83,21,5}, -{83,21,6}, -{83,21,7}, -{83,21,8}, -{83,21,9}, -{83,21,10}, -{83,21,11}, -{83,21,12}, -{83,21,13}, -{83,21,14}, -{83,21,15}, -{83,22,-25}, -{83,22,-24}, -{83,22,-23}, -{83,22,-22}, -{83,22,-21}, -{83,22,-20}, -{83,22,-19}, -{83,22,-18}, -{83,22,-17}, -{83,22,-16}, -{83,22,-15}, -{83,22,-14}, -{83,22,-13}, -{83,22,-12}, -{83,22,-11}, -{83,22,-10}, -{83,22,-9}, -{83,22,-8}, -{83,22,-7}, -{83,22,-6}, -{83,22,-5}, -{83,22,-4}, -{83,22,-3}, -{83,22,-2}, -{83,22,-1}, -{83,22,0}, -{83,22,1}, -{83,22,2}, -{83,22,3}, -{83,22,4}, -{83,22,5}, -{83,22,6}, -{83,22,7}, -{83,22,8}, -{83,22,9}, -{83,22,10}, -{83,22,11}, -{83,22,12}, -{83,23,-25}, -{83,23,-24}, -{83,23,-23}, -{83,23,-22}, -{83,23,-21}, -{83,23,-20}, -{83,23,-19}, -{83,23,-18}, -{83,23,-17}, -{83,23,-16}, -{83,23,-15}, -{83,23,-14}, -{83,23,-13}, -{83,23,-12}, -{83,23,-11}, -{83,23,-10}, -{83,23,-9}, -{83,23,-8}, -{83,23,-7}, -{83,23,-6}, -{83,23,-5}, -{83,23,-4}, -{83,23,-3}, -{83,23,-2}, -{83,23,-1}, -{83,23,0}, -{83,23,1}, -{83,23,2}, -{83,23,3}, -{83,23,4}, -{83,23,5}, -{83,23,6}, -{83,23,7}, -{83,23,8}, -{83,23,9}, -{83,24,-25}, -{83,24,-24}, -{83,24,-23}, -{83,24,-22}, -{83,24,-21}, -{83,24,-20}, -{83,24,-19}, -{83,24,-18}, -{83,24,-17}, -{83,24,-16}, -{83,24,-15}, -{83,24,-14}, -{83,24,-13}, -{83,24,-12}, -{83,24,-11}, -{83,24,-10}, -{83,24,-9}, -{83,24,-8}, -{83,24,-7}, -{83,24,-6}, -{83,24,-5}, -{83,24,-4}, -{83,24,-3}, -{83,24,-2}, -{83,24,-1}, -{83,24,0}, -{83,24,1}, -{83,24,2}, -{83,24,3}, -{83,24,4}, -{83,24,5}, -{83,24,6}, -{83,25,-25}, -{83,25,-24}, -{83,25,-23}, -{83,25,-22}, -{83,25,-21}, -{83,25,-20}, -{83,25,-19}, -{83,25,-18}, -{83,25,-17}, -{83,25,-16}, -{83,25,-15}, -{83,25,-14}, -{83,25,-13}, -{83,25,-12}, -{83,25,-11}, -{83,25,-10}, -{83,25,-9}, -{83,25,-8}, -{83,25,-7}, -{83,25,-6}, -{83,25,-5}, -{83,25,-4}, -{83,25,-3}, -{83,25,-2}, -{83,25,-1}, -{83,25,0}, -{83,25,1}, -{83,25,2}, -{83,25,3}, -{83,25,4}, -{83,26,-25}, -{83,26,-24}, -{83,26,-23}, -{83,26,-22}, -{83,26,-21}, -{83,26,-20}, -{83,26,-19}, -{83,26,-18}, -{83,26,-17}, -{83,26,-16}, -{83,26,-15}, -{83,26,-14}, -{83,26,-13}, -{83,26,-12}, -{83,26,-11}, -{83,26,-10}, -{83,26,-9}, -{83,26,-8}, -{83,26,-7}, -{83,26,-6}, -{83,26,-5}, -{83,26,-4}, -{83,26,-3}, -{83,26,-2}, -{83,26,-1}, -{83,26,0}, -{83,26,1}, -{83,27,-25}, -{83,27,-24}, -{83,27,-23}, -{83,27,-22}, -{83,27,-21}, -{83,27,-20}, -{83,27,-19}, -{83,27,-18}, -{83,27,-17}, -{83,27,-16}, -{83,27,-15}, -{83,27,-14}, -{83,27,-13}, -{83,27,-12}, -{83,27,-11}, -{83,27,-10}, -{83,27,-9}, -{83,27,-8}, -{83,27,-7}, -{83,27,-6}, -{83,27,-5}, -{83,27,-4}, -{83,27,-3}, -{83,27,-2}, -{83,27,-1}, -{83,28,-25}, -{83,28,-24}, -{83,28,-23}, -{83,28,-22}, -{83,28,-21}, -{83,28,-20}, -{83,28,-19}, -{83,28,-18}, -{83,28,-17}, -{83,28,-16}, -{83,28,-15}, -{83,28,-14}, -{83,28,-13}, -{83,28,-12}, -{83,28,-11}, -{83,28,-10}, -{83,28,-9}, -{83,28,-8}, -{83,28,-7}, -{83,28,-6}, -{83,28,-5}, -{83,28,-4}, -{83,29,-25}, -{83,29,-24}, -{83,29,-23}, -{83,29,-22}, -{83,29,-21}, -{83,29,-20}, -{83,29,-19}, -{83,29,-18}, -{83,29,-17}, -{83,29,-16}, -{83,29,-15}, -{83,29,-14}, -{83,29,-13}, -{83,29,-12}, -{83,29,-11}, -{83,29,-10}, -{83,29,-9}, -{83,29,-8}, -{83,29,-7}, -{83,29,-6}, -{83,30,-25}, -{83,30,-24}, -{83,30,-23}, -{83,30,-22}, -{83,30,-21}, -{83,30,-20}, -{83,30,-19}, -{83,30,-18}, -{83,30,-17}, -{83,30,-16}, -{83,30,-15}, -{83,30,-14}, -{83,30,-13}, -{83,30,-12}, -{83,30,-11}, -{83,30,-10}, -{83,30,-9}, -{83,31,-25}, -{83,31,-24}, -{83,31,-23}, -{83,31,-22}, -{83,31,-21}, -{83,31,-20}, -{83,31,-19}, -{83,31,-18}, -{83,31,-17}, -{83,31,-16}, -{83,31,-15}, -{83,31,-14}, -{83,31,-13}, -{83,31,-12}, -{83,31,-11}, -{83,32,-25}, -{83,32,-24}, -{83,32,-23}, -{83,32,-22}, -{83,32,-21}, -{83,32,-20}, -{83,32,-19}, -{83,32,-18}, -{83,32,-17}, -{83,32,-16}, -{83,32,-15}, -{83,32,-14}, -{83,32,-13}, -{83,33,-25}, -{83,33,-24}, -{83,33,-23}, -{83,33,-22}, -{83,33,-21}, -{83,33,-20}, -{83,33,-19}, -{83,33,-18}, -{83,33,-17}, -{83,33,-16}, -{83,34,-25}, -{83,34,-24}, -{83,34,-23}, -{83,34,-22}, -{83,34,-21}, -{83,34,-20}, -{83,34,-19}, -{83,34,-18}, -{83,35,-25}, -{83,35,-24}, -{83,35,-23}, -{83,35,-22}, -{83,35,-21}, -{83,35,-20}, -{83,36,-25}, -{83,36,-24}, -{83,36,-23}, -{83,36,-22}, -{83,37,-25}, -{83,37,-24}, -{84,-83,79}, -{84,-83,80}, -{84,-82,75}, -{84,-82,76}, -{84,-82,77}, -{84,-82,78}, -{84,-82,79}, -{84,-82,80}, -{84,-81,70}, -{84,-81,71}, -{84,-81,72}, -{84,-81,73}, -{84,-81,74}, -{84,-81,75}, -{84,-81,76}, -{84,-81,77}, -{84,-81,78}, -{84,-81,79}, -{84,-81,80}, -{84,-80,66}, -{84,-80,67}, -{84,-80,68}, -{84,-80,69}, -{84,-80,70}, -{84,-80,71}, -{84,-80,72}, -{84,-80,73}, -{84,-80,74}, -{84,-80,75}, -{84,-80,76}, -{84,-80,77}, -{84,-80,78}, -{84,-80,79}, -{84,-80,80}, -{84,-79,62}, -{84,-79,63}, -{84,-79,64}, -{84,-79,65}, -{84,-79,66}, -{84,-79,67}, -{84,-79,68}, -{84,-79,69}, -{84,-79,70}, -{84,-79,71}, -{84,-79,72}, -{84,-79,73}, -{84,-79,74}, -{84,-79,75}, -{84,-79,76}, -{84,-79,77}, -{84,-79,78}, -{84,-79,79}, -{84,-79,80}, -{84,-78,59}, -{84,-78,60}, -{84,-78,61}, -{84,-78,62}, -{84,-78,63}, -{84,-78,64}, -{84,-78,65}, -{84,-78,66}, -{84,-78,67}, -{84,-78,68}, -{84,-78,69}, -{84,-78,70}, -{84,-78,71}, -{84,-78,72}, -{84,-78,73}, -{84,-78,74}, -{84,-78,75}, -{84,-78,76}, -{84,-78,77}, -{84,-78,78}, -{84,-78,79}, -{84,-78,80}, -{84,-77,55}, -{84,-77,56}, -{84,-77,57}, -{84,-77,58}, -{84,-77,59}, -{84,-77,60}, -{84,-77,61}, -{84,-77,62}, -{84,-77,63}, -{84,-77,64}, -{84,-77,65}, -{84,-77,66}, -{84,-77,67}, -{84,-77,68}, -{84,-77,69}, -{84,-77,70}, -{84,-77,71}, -{84,-77,72}, -{84,-77,73}, -{84,-77,74}, -{84,-77,75}, -{84,-77,76}, -{84,-77,77}, -{84,-77,78}, -{84,-77,79}, -{84,-77,80}, -{84,-76,52}, -{84,-76,53}, -{84,-76,54}, -{84,-76,55}, -{84,-76,56}, -{84,-76,57}, -{84,-76,58}, -{84,-76,59}, -{84,-76,60}, -{84,-76,61}, -{84,-76,62}, -{84,-76,63}, -{84,-76,64}, -{84,-76,65}, -{84,-76,66}, -{84,-76,67}, -{84,-76,68}, -{84,-76,69}, -{84,-76,70}, -{84,-76,71}, -{84,-76,72}, -{84,-76,73}, -{84,-76,74}, -{84,-76,75}, -{84,-76,76}, -{84,-76,77}, -{84,-76,78}, -{84,-76,79}, -{84,-76,80}, -{84,-75,49}, -{84,-75,50}, -{84,-75,51}, -{84,-75,52}, -{84,-75,53}, -{84,-75,54}, -{84,-75,55}, -{84,-75,56}, -{84,-75,57}, -{84,-75,58}, -{84,-75,59}, -{84,-75,60}, -{84,-75,61}, -{84,-75,62}, -{84,-75,63}, -{84,-75,64}, -{84,-75,65}, -{84,-75,66}, -{84,-75,67}, -{84,-75,68}, -{84,-75,69}, -{84,-75,70}, -{84,-75,71}, -{84,-75,72}, -{84,-75,73}, -{84,-75,74}, -{84,-75,75}, -{84,-75,76}, -{84,-75,77}, -{84,-75,78}, -{84,-75,79}, -{84,-75,80}, -{84,-74,46}, -{84,-74,47}, -{84,-74,48}, -{84,-74,49}, -{84,-74,50}, -{84,-74,51}, -{84,-74,52}, -{84,-74,53}, -{84,-74,54}, -{84,-74,55}, -{84,-74,56}, -{84,-74,57}, -{84,-74,58}, -{84,-74,59}, -{84,-74,60}, -{84,-74,61}, -{84,-74,62}, -{84,-74,63}, -{84,-74,64}, -{84,-74,65}, -{84,-74,66}, -{84,-74,67}, -{84,-74,68}, -{84,-74,69}, -{84,-74,70}, -{84,-74,71}, -{84,-74,72}, -{84,-74,73}, -{84,-74,74}, -{84,-74,75}, -{84,-74,76}, -{84,-74,77}, -{84,-74,78}, -{84,-74,79}, -{84,-74,80}, -{84,-73,43}, -{84,-73,44}, -{84,-73,45}, -{84,-73,46}, -{84,-73,47}, -{84,-73,48}, -{84,-73,49}, -{84,-73,50}, -{84,-73,51}, -{84,-73,52}, -{84,-73,53}, -{84,-73,54}, -{84,-73,55}, -{84,-73,56}, -{84,-73,57}, -{84,-73,58}, -{84,-73,59}, -{84,-73,60}, -{84,-73,61}, -{84,-73,62}, -{84,-73,63}, -{84,-73,64}, -{84,-73,65}, -{84,-73,66}, -{84,-73,67}, -{84,-73,68}, -{84,-73,69}, -{84,-73,70}, -{84,-73,71}, -{84,-73,72}, -{84,-73,73}, -{84,-73,74}, -{84,-73,75}, -{84,-73,76}, -{84,-73,77}, -{84,-73,78}, -{84,-73,79}, -{84,-73,80}, -{84,-72,41}, -{84,-72,42}, -{84,-72,43}, -{84,-72,44}, -{84,-72,45}, -{84,-72,46}, -{84,-72,47}, -{84,-72,48}, -{84,-72,49}, -{84,-72,50}, -{84,-72,51}, -{84,-72,52}, -{84,-72,53}, -{84,-72,54}, -{84,-72,55}, -{84,-72,56}, -{84,-72,57}, -{84,-72,58}, -{84,-72,59}, -{84,-72,60}, -{84,-72,61}, -{84,-72,62}, -{84,-72,63}, -{84,-72,64}, -{84,-72,65}, -{84,-72,66}, -{84,-72,67}, -{84,-72,68}, -{84,-72,69}, -{84,-72,70}, -{84,-72,71}, -{84,-72,72}, -{84,-72,73}, -{84,-72,74}, -{84,-72,75}, -{84,-72,76}, -{84,-72,77}, -{84,-72,78}, -{84,-72,79}, -{84,-72,80}, -{84,-71,38}, -{84,-71,39}, -{84,-71,40}, -{84,-71,41}, -{84,-71,42}, -{84,-71,43}, -{84,-71,44}, -{84,-71,45}, -{84,-71,46}, -{84,-71,47}, -{84,-71,48}, -{84,-71,49}, -{84,-71,50}, -{84,-71,51}, -{84,-71,52}, -{84,-71,53}, -{84,-71,54}, -{84,-71,55}, -{84,-71,56}, -{84,-71,57}, -{84,-71,58}, -{84,-71,59}, -{84,-71,60}, -{84,-71,61}, -{84,-71,62}, -{84,-71,63}, -{84,-71,64}, -{84,-71,65}, -{84,-71,66}, -{84,-71,67}, -{84,-71,68}, -{84,-71,69}, -{84,-71,70}, -{84,-71,71}, -{84,-71,72}, -{84,-71,73}, -{84,-71,74}, -{84,-71,75}, -{84,-71,76}, -{84,-71,77}, -{84,-71,78}, -{84,-71,79}, -{84,-71,80}, -{84,-70,35}, -{84,-70,36}, -{84,-70,37}, -{84,-70,38}, -{84,-70,39}, -{84,-70,40}, -{84,-70,41}, -{84,-70,42}, -{84,-70,43}, -{84,-70,44}, -{84,-70,45}, -{84,-70,46}, -{84,-70,47}, -{84,-70,48}, -{84,-70,49}, -{84,-70,50}, -{84,-70,51}, -{84,-70,52}, -{84,-70,53}, -{84,-70,54}, -{84,-70,55}, -{84,-70,56}, -{84,-70,57}, -{84,-70,58}, -{84,-70,59}, -{84,-70,60}, -{84,-70,61}, -{84,-70,62}, -{84,-70,63}, -{84,-70,64}, -{84,-70,65}, -{84,-70,66}, -{84,-70,67}, -{84,-70,68}, -{84,-70,69}, -{84,-70,70}, -{84,-70,71}, -{84,-70,72}, -{84,-70,73}, -{84,-70,74}, -{84,-70,75}, -{84,-70,76}, -{84,-70,77}, -{84,-70,78}, -{84,-70,79}, -{84,-70,80}, -{84,-69,33}, -{84,-69,34}, -{84,-69,35}, -{84,-69,36}, -{84,-69,37}, -{84,-69,38}, -{84,-69,39}, -{84,-69,40}, -{84,-69,41}, -{84,-69,42}, -{84,-69,43}, -{84,-69,44}, -{84,-69,45}, -{84,-69,46}, -{84,-69,47}, -{84,-69,48}, -{84,-69,49}, -{84,-69,50}, -{84,-69,51}, -{84,-69,52}, -{84,-69,53}, -{84,-69,54}, -{84,-69,55}, -{84,-69,56}, -{84,-69,57}, -{84,-69,58}, -{84,-69,59}, -{84,-69,60}, -{84,-69,61}, -{84,-69,62}, -{84,-69,63}, -{84,-69,64}, -{84,-69,65}, -{84,-69,66}, -{84,-69,67}, -{84,-69,68}, -{84,-69,69}, -{84,-69,70}, -{84,-69,71}, -{84,-69,72}, -{84,-69,73}, -{84,-69,74}, -{84,-69,75}, -{84,-69,76}, -{84,-69,77}, -{84,-69,78}, -{84,-69,79}, -{84,-69,80}, -{84,-68,31}, -{84,-68,32}, -{84,-68,33}, -{84,-68,34}, -{84,-68,35}, -{84,-68,36}, -{84,-68,37}, -{84,-68,38}, -{84,-68,39}, -{84,-68,40}, -{84,-68,41}, -{84,-68,42}, -{84,-68,43}, -{84,-68,44}, -{84,-68,45}, -{84,-68,46}, -{84,-68,47}, -{84,-68,48}, -{84,-68,49}, -{84,-68,50}, -{84,-68,51}, -{84,-68,52}, -{84,-68,53}, -{84,-68,54}, -{84,-68,55}, -{84,-68,56}, -{84,-68,57}, -{84,-68,58}, -{84,-68,59}, -{84,-68,60}, -{84,-68,61}, -{84,-68,62}, -{84,-68,63}, -{84,-68,64}, -{84,-68,65}, -{84,-68,66}, -{84,-68,67}, -{84,-68,68}, -{84,-68,69}, -{84,-68,70}, -{84,-68,71}, -{84,-68,72}, -{84,-68,73}, -{84,-68,74}, -{84,-68,75}, -{84,-68,76}, -{84,-68,77}, -{84,-68,78}, -{84,-68,79}, -{84,-68,80}, -{84,-68,81}, -{84,-67,28}, -{84,-67,29}, -{84,-67,30}, -{84,-67,31}, -{84,-67,32}, -{84,-67,33}, -{84,-67,34}, -{84,-67,35}, -{84,-67,36}, -{84,-67,37}, -{84,-67,38}, -{84,-67,39}, -{84,-67,40}, -{84,-67,41}, -{84,-67,42}, -{84,-67,43}, -{84,-67,44}, -{84,-67,45}, -{84,-67,46}, -{84,-67,47}, -{84,-67,48}, -{84,-67,49}, -{84,-67,50}, -{84,-67,51}, -{84,-67,52}, -{84,-67,53}, -{84,-67,54}, -{84,-67,55}, -{84,-67,56}, -{84,-67,57}, -{84,-67,58}, -{84,-67,59}, -{84,-67,60}, -{84,-67,61}, -{84,-67,62}, -{84,-67,63}, -{84,-67,64}, -{84,-67,65}, -{84,-67,66}, -{84,-67,67}, -{84,-67,68}, -{84,-67,69}, -{84,-67,70}, -{84,-67,71}, -{84,-67,72}, -{84,-67,73}, -{84,-67,74}, -{84,-67,75}, -{84,-67,76}, -{84,-67,77}, -{84,-67,78}, -{84,-67,79}, -{84,-67,80}, -{84,-67,81}, -{84,-66,26}, -{84,-66,27}, -{84,-66,28}, -{84,-66,29}, -{84,-66,30}, -{84,-66,31}, -{84,-66,32}, -{84,-66,33}, -{84,-66,34}, -{84,-66,35}, -{84,-66,36}, -{84,-66,37}, -{84,-66,38}, -{84,-66,39}, -{84,-66,40}, -{84,-66,41}, -{84,-66,42}, -{84,-66,43}, -{84,-66,44}, -{84,-66,45}, -{84,-66,46}, -{84,-66,47}, -{84,-66,48}, -{84,-66,49}, -{84,-66,50}, -{84,-66,51}, -{84,-66,52}, -{84,-66,53}, -{84,-66,54}, -{84,-66,55}, -{84,-66,56}, -{84,-66,57}, -{84,-66,58}, -{84,-66,59}, -{84,-66,60}, -{84,-66,61}, -{84,-66,62}, -{84,-66,63}, -{84,-66,64}, -{84,-66,65}, -{84,-66,66}, -{84,-66,67}, -{84,-66,68}, -{84,-66,69}, -{84,-66,70}, -{84,-66,71}, -{84,-66,72}, -{84,-66,73}, -{84,-66,74}, -{84,-66,75}, -{84,-66,76}, -{84,-66,77}, -{84,-66,78}, -{84,-66,79}, -{84,-66,80}, -{84,-66,81}, -{84,-65,24}, -{84,-65,25}, -{84,-65,26}, -{84,-65,27}, -{84,-65,28}, -{84,-65,29}, -{84,-65,30}, -{84,-65,31}, -{84,-65,32}, -{84,-65,33}, -{84,-65,34}, -{84,-65,35}, -{84,-65,36}, -{84,-65,37}, -{84,-65,38}, -{84,-65,39}, -{84,-65,40}, -{84,-65,41}, -{84,-65,42}, -{84,-65,43}, -{84,-65,44}, -{84,-65,45}, -{84,-65,46}, -{84,-65,47}, -{84,-65,48}, -{84,-65,49}, -{84,-65,50}, -{84,-65,51}, -{84,-65,52}, -{84,-65,53}, -{84,-65,54}, -{84,-65,55}, -{84,-65,56}, -{84,-65,57}, -{84,-65,58}, -{84,-65,59}, -{84,-65,60}, -{84,-65,61}, -{84,-65,62}, -{84,-65,63}, -{84,-65,64}, -{84,-65,65}, -{84,-65,66}, -{84,-65,67}, -{84,-65,68}, -{84,-65,69}, -{84,-65,70}, -{84,-65,71}, -{84,-65,72}, -{84,-65,73}, -{84,-65,74}, -{84,-65,75}, -{84,-65,76}, -{84,-65,77}, -{84,-65,78}, -{84,-65,79}, -{84,-65,80}, -{84,-65,81}, -{84,-64,22}, -{84,-64,23}, -{84,-64,24}, -{84,-64,25}, -{84,-64,26}, -{84,-64,27}, -{84,-64,28}, -{84,-64,29}, -{84,-64,30}, -{84,-64,31}, -{84,-64,32}, -{84,-64,33}, -{84,-64,34}, -{84,-64,35}, -{84,-64,36}, -{84,-64,37}, -{84,-64,38}, -{84,-64,39}, -{84,-64,40}, -{84,-64,41}, -{84,-64,42}, -{84,-64,43}, -{84,-64,44}, -{84,-64,45}, -{84,-64,46}, -{84,-64,47}, -{84,-64,48}, -{84,-64,49}, -{84,-64,50}, -{84,-64,51}, -{84,-64,52}, -{84,-64,53}, -{84,-64,54}, -{84,-64,55}, -{84,-64,56}, -{84,-64,57}, -{84,-64,58}, -{84,-64,59}, -{84,-64,60}, -{84,-64,61}, -{84,-64,62}, -{84,-64,63}, -{84,-64,64}, -{84,-64,65}, -{84,-64,66}, -{84,-64,67}, -{84,-64,68}, -{84,-64,69}, -{84,-64,70}, -{84,-64,71}, -{84,-64,72}, -{84,-64,73}, -{84,-64,74}, -{84,-64,75}, -{84,-64,76}, -{84,-64,77}, -{84,-64,78}, -{84,-64,79}, -{84,-64,80}, -{84,-64,81}, -{84,-63,19}, -{84,-63,20}, -{84,-63,21}, -{84,-63,22}, -{84,-63,23}, -{84,-63,24}, -{84,-63,25}, -{84,-63,26}, -{84,-63,27}, -{84,-63,28}, -{84,-63,29}, -{84,-63,30}, -{84,-63,31}, -{84,-63,32}, -{84,-63,33}, -{84,-63,34}, -{84,-63,35}, -{84,-63,36}, -{84,-63,37}, -{84,-63,38}, -{84,-63,39}, -{84,-63,40}, -{84,-63,41}, -{84,-63,42}, -{84,-63,43}, -{84,-63,44}, -{84,-63,45}, -{84,-63,46}, -{84,-63,47}, -{84,-63,48}, -{84,-63,49}, -{84,-63,50}, -{84,-63,51}, -{84,-63,52}, -{84,-63,53}, -{84,-63,54}, -{84,-63,55}, -{84,-63,56}, -{84,-63,57}, -{84,-63,58}, -{84,-63,59}, -{84,-63,60}, -{84,-63,61}, -{84,-63,62}, -{84,-63,63}, -{84,-63,64}, -{84,-63,65}, -{84,-63,66}, -{84,-63,67}, -{84,-63,68}, -{84,-63,69}, -{84,-63,70}, -{84,-63,71}, -{84,-63,72}, -{84,-63,73}, -{84,-63,74}, -{84,-63,75}, -{84,-63,76}, -{84,-63,77}, -{84,-63,78}, -{84,-63,79}, -{84,-63,80}, -{84,-63,81}, -{84,-62,17}, -{84,-62,18}, -{84,-62,19}, -{84,-62,20}, -{84,-62,21}, -{84,-62,22}, -{84,-62,23}, -{84,-62,24}, -{84,-62,25}, -{84,-62,26}, -{84,-62,27}, -{84,-62,28}, -{84,-62,29}, -{84,-62,30}, -{84,-62,31}, -{84,-62,32}, -{84,-62,33}, -{84,-62,34}, -{84,-62,35}, -{84,-62,36}, -{84,-62,37}, -{84,-62,38}, -{84,-62,39}, -{84,-62,40}, -{84,-62,41}, -{84,-62,42}, -{84,-62,43}, -{84,-62,44}, -{84,-62,45}, -{84,-62,46}, -{84,-62,47}, -{84,-62,48}, -{84,-62,49}, -{84,-62,50}, -{84,-62,51}, -{84,-62,52}, -{84,-62,53}, -{84,-62,54}, -{84,-62,55}, -{84,-62,56}, -{84,-62,57}, -{84,-62,58}, -{84,-62,59}, -{84,-62,60}, -{84,-62,61}, -{84,-62,62}, -{84,-62,63}, -{84,-62,64}, -{84,-62,65}, -{84,-62,66}, -{84,-62,67}, -{84,-62,68}, -{84,-62,69}, -{84,-62,70}, -{84,-62,71}, -{84,-62,72}, -{84,-62,73}, -{84,-62,74}, -{84,-62,75}, -{84,-62,76}, -{84,-62,77}, -{84,-62,78}, -{84,-62,79}, -{84,-62,80}, -{84,-62,81}, -{84,-61,15}, -{84,-61,16}, -{84,-61,17}, -{84,-61,18}, -{84,-61,19}, -{84,-61,20}, -{84,-61,21}, -{84,-61,22}, -{84,-61,23}, -{84,-61,24}, -{84,-61,25}, -{84,-61,26}, -{84,-61,27}, -{84,-61,28}, -{84,-61,29}, -{84,-61,30}, -{84,-61,31}, -{84,-61,32}, -{84,-61,33}, -{84,-61,34}, -{84,-61,35}, -{84,-61,36}, -{84,-61,37}, -{84,-61,38}, -{84,-61,39}, -{84,-61,40}, -{84,-61,41}, -{84,-61,42}, -{84,-61,43}, -{84,-61,44}, -{84,-61,45}, -{84,-61,46}, -{84,-61,47}, -{84,-61,48}, -{84,-61,49}, -{84,-61,50}, -{84,-61,51}, -{84,-61,52}, -{84,-61,53}, -{84,-61,54}, -{84,-61,55}, -{84,-61,56}, -{84,-61,57}, -{84,-61,58}, -{84,-61,59}, -{84,-61,60}, -{84,-61,61}, -{84,-61,62}, -{84,-61,63}, -{84,-61,64}, -{84,-61,65}, -{84,-61,66}, -{84,-61,67}, -{84,-61,68}, -{84,-61,69}, -{84,-61,70}, -{84,-61,71}, -{84,-61,72}, -{84,-61,73}, -{84,-61,74}, -{84,-61,75}, -{84,-61,76}, -{84,-61,77}, -{84,-61,78}, -{84,-61,79}, -{84,-61,80}, -{84,-61,81}, -{84,-60,13}, -{84,-60,14}, -{84,-60,15}, -{84,-60,16}, -{84,-60,17}, -{84,-60,18}, -{84,-60,19}, -{84,-60,20}, -{84,-60,21}, -{84,-60,22}, -{84,-60,23}, -{84,-60,24}, -{84,-60,25}, -{84,-60,26}, -{84,-60,27}, -{84,-60,28}, -{84,-60,29}, -{84,-60,30}, -{84,-60,31}, -{84,-60,32}, -{84,-60,33}, -{84,-60,34}, -{84,-60,35}, -{84,-60,36}, -{84,-60,37}, -{84,-60,38}, -{84,-60,39}, -{84,-60,40}, -{84,-60,41}, -{84,-60,42}, -{84,-60,43}, -{84,-60,44}, -{84,-60,45}, -{84,-60,46}, -{84,-60,47}, -{84,-60,48}, -{84,-60,49}, -{84,-60,50}, -{84,-60,51}, -{84,-60,52}, -{84,-60,53}, -{84,-60,54}, -{84,-60,55}, -{84,-60,56}, -{84,-60,57}, -{84,-60,58}, -{84,-60,59}, -{84,-60,60}, -{84,-60,61}, -{84,-60,62}, -{84,-60,63}, -{84,-60,64}, -{84,-60,65}, -{84,-60,66}, -{84,-60,67}, -{84,-60,68}, -{84,-60,69}, -{84,-60,70}, -{84,-60,71}, -{84,-60,72}, -{84,-60,73}, -{84,-60,74}, -{84,-60,75}, -{84,-60,76}, -{84,-60,77}, -{84,-60,78}, -{84,-60,79}, -{84,-60,80}, -{84,-60,81}, -{84,-59,11}, -{84,-59,12}, -{84,-59,13}, -{84,-59,14}, -{84,-59,15}, -{84,-59,16}, -{84,-59,17}, -{84,-59,18}, -{84,-59,19}, -{84,-59,20}, -{84,-59,21}, -{84,-59,22}, -{84,-59,23}, -{84,-59,24}, -{84,-59,25}, -{84,-59,26}, -{84,-59,27}, -{84,-59,28}, -{84,-59,29}, -{84,-59,30}, -{84,-59,31}, -{84,-59,32}, -{84,-59,33}, -{84,-59,34}, -{84,-59,35}, -{84,-59,36}, -{84,-59,37}, -{84,-59,38}, -{84,-59,39}, -{84,-59,40}, -{84,-59,41}, -{84,-59,42}, -{84,-59,43}, -{84,-59,44}, -{84,-59,45}, -{84,-59,46}, -{84,-59,47}, -{84,-59,48}, -{84,-59,49}, -{84,-59,50}, -{84,-59,51}, -{84,-59,52}, -{84,-59,53}, -{84,-59,54}, -{84,-59,55}, -{84,-59,56}, -{84,-59,57}, -{84,-59,58}, -{84,-59,59}, -{84,-59,60}, -{84,-59,61}, -{84,-59,62}, -{84,-59,63}, -{84,-59,64}, -{84,-59,65}, -{84,-59,66}, -{84,-59,67}, -{84,-59,68}, -{84,-59,69}, -{84,-59,70}, -{84,-59,71}, -{84,-59,72}, -{84,-59,73}, -{84,-59,74}, -{84,-59,75}, -{84,-59,76}, -{84,-59,77}, -{84,-59,78}, -{84,-59,79}, -{84,-59,80}, -{84,-59,81}, -{84,-58,10}, -{84,-58,11}, -{84,-58,12}, -{84,-58,13}, -{84,-58,14}, -{84,-58,15}, -{84,-58,16}, -{84,-58,17}, -{84,-58,18}, -{84,-58,19}, -{84,-58,20}, -{84,-58,21}, -{84,-58,22}, -{84,-58,23}, -{84,-58,24}, -{84,-58,25}, -{84,-58,26}, -{84,-58,27}, -{84,-58,28}, -{84,-58,29}, -{84,-58,30}, -{84,-58,31}, -{84,-58,32}, -{84,-58,33}, -{84,-58,34}, -{84,-58,35}, -{84,-58,36}, -{84,-58,37}, -{84,-58,38}, -{84,-58,39}, -{84,-58,40}, -{84,-58,41}, -{84,-58,42}, -{84,-58,43}, -{84,-58,44}, -{84,-58,45}, -{84,-58,46}, -{84,-58,47}, -{84,-58,48}, -{84,-58,49}, -{84,-58,50}, -{84,-58,51}, -{84,-58,52}, -{84,-58,53}, -{84,-58,54}, -{84,-58,55}, -{84,-58,56}, -{84,-58,57}, -{84,-58,58}, -{84,-58,59}, -{84,-58,60}, -{84,-58,61}, -{84,-58,62}, -{84,-58,63}, -{84,-58,64}, -{84,-58,65}, -{84,-58,66}, -{84,-58,67}, -{84,-58,68}, -{84,-58,69}, -{84,-58,70}, -{84,-58,71}, -{84,-58,72}, -{84,-58,73}, -{84,-58,74}, -{84,-58,75}, -{84,-58,76}, -{84,-58,77}, -{84,-58,78}, -{84,-58,79}, -{84,-58,80}, -{84,-58,81}, -{84,-57,8}, -{84,-57,9}, -{84,-57,10}, -{84,-57,11}, -{84,-57,12}, -{84,-57,13}, -{84,-57,14}, -{84,-57,15}, -{84,-57,16}, -{84,-57,17}, -{84,-57,18}, -{84,-57,19}, -{84,-57,20}, -{84,-57,21}, -{84,-57,22}, -{84,-57,23}, -{84,-57,24}, -{84,-57,25}, -{84,-57,26}, -{84,-57,27}, -{84,-57,28}, -{84,-57,29}, -{84,-57,30}, -{84,-57,31}, -{84,-57,32}, -{84,-57,33}, -{84,-57,34}, -{84,-57,35}, -{84,-57,36}, -{84,-57,37}, -{84,-57,38}, -{84,-57,39}, -{84,-57,40}, -{84,-57,41}, -{84,-57,42}, -{84,-57,43}, -{84,-57,44}, -{84,-57,45}, -{84,-57,46}, -{84,-57,47}, -{84,-57,48}, -{84,-57,49}, -{84,-57,50}, -{84,-57,51}, -{84,-57,52}, -{84,-57,53}, -{84,-57,54}, -{84,-57,55}, -{84,-57,56}, -{84,-57,57}, -{84,-57,58}, -{84,-57,59}, -{84,-57,60}, -{84,-57,61}, -{84,-57,62}, -{84,-57,63}, -{84,-57,64}, -{84,-57,65}, -{84,-57,66}, -{84,-57,67}, -{84,-57,68}, -{84,-57,69}, -{84,-57,70}, -{84,-57,71}, -{84,-57,72}, -{84,-57,73}, -{84,-57,74}, -{84,-57,75}, -{84,-57,76}, -{84,-57,77}, -{84,-57,78}, -{84,-57,79}, -{84,-57,80}, -{84,-57,81}, -{84,-56,6}, -{84,-56,7}, -{84,-56,8}, -{84,-56,9}, -{84,-56,10}, -{84,-56,11}, -{84,-56,12}, -{84,-56,13}, -{84,-56,14}, -{84,-56,15}, -{84,-56,16}, -{84,-56,17}, -{84,-56,18}, -{84,-56,19}, -{84,-56,20}, -{84,-56,21}, -{84,-56,22}, -{84,-56,23}, -{84,-56,24}, -{84,-56,25}, -{84,-56,26}, -{84,-56,27}, -{84,-56,28}, -{84,-56,29}, -{84,-56,30}, -{84,-56,31}, -{84,-56,32}, -{84,-56,33}, -{84,-56,34}, -{84,-56,35}, -{84,-56,36}, -{84,-56,37}, -{84,-56,38}, -{84,-56,39}, -{84,-56,40}, -{84,-56,41}, -{84,-56,42}, -{84,-56,43}, -{84,-56,44}, -{84,-56,45}, -{84,-56,46}, -{84,-56,47}, -{84,-56,48}, -{84,-56,49}, -{84,-56,50}, -{84,-56,51}, -{84,-56,52}, -{84,-56,53}, -{84,-56,54}, -{84,-56,55}, -{84,-56,56}, -{84,-56,57}, -{84,-56,58}, -{84,-56,59}, -{84,-56,60}, -{84,-56,61}, -{84,-56,62}, -{84,-56,63}, -{84,-56,64}, -{84,-56,65}, -{84,-56,66}, -{84,-56,67}, -{84,-56,68}, -{84,-56,69}, -{84,-56,70}, -{84,-56,71}, -{84,-56,72}, -{84,-56,73}, -{84,-56,74}, -{84,-56,75}, -{84,-56,76}, -{84,-56,77}, -{84,-56,78}, -{84,-56,79}, -{84,-56,80}, -{84,-56,81}, -{84,-55,4}, -{84,-55,5}, -{84,-55,6}, -{84,-55,7}, -{84,-55,8}, -{84,-55,9}, -{84,-55,10}, -{84,-55,11}, -{84,-55,12}, -{84,-55,13}, -{84,-55,14}, -{84,-55,15}, -{84,-55,16}, -{84,-55,17}, -{84,-55,18}, -{84,-55,19}, -{84,-55,20}, -{84,-55,21}, -{84,-55,22}, -{84,-55,23}, -{84,-55,24}, -{84,-55,25}, -{84,-55,26}, -{84,-55,27}, -{84,-55,28}, -{84,-55,29}, -{84,-55,30}, -{84,-55,31}, -{84,-55,32}, -{84,-55,33}, -{84,-55,34}, -{84,-55,35}, -{84,-55,36}, -{84,-55,37}, -{84,-55,38}, -{84,-55,39}, -{84,-55,40}, -{84,-55,41}, -{84,-55,42}, -{84,-55,43}, -{84,-55,44}, -{84,-55,45}, -{84,-55,46}, -{84,-55,47}, -{84,-55,48}, -{84,-55,49}, -{84,-55,50}, -{84,-55,51}, -{84,-55,52}, -{84,-55,53}, -{84,-55,54}, -{84,-55,55}, -{84,-55,56}, -{84,-55,57}, -{84,-55,58}, -{84,-55,59}, -{84,-55,60}, -{84,-55,61}, -{84,-55,62}, -{84,-55,63}, -{84,-55,64}, -{84,-55,65}, -{84,-55,66}, -{84,-55,67}, -{84,-55,68}, -{84,-55,69}, -{84,-55,70}, -{84,-55,71}, -{84,-55,72}, -{84,-55,73}, -{84,-55,74}, -{84,-55,75}, -{84,-55,76}, -{84,-55,77}, -{84,-55,78}, -{84,-55,79}, -{84,-55,80}, -{84,-55,81}, -{84,-54,2}, -{84,-54,3}, -{84,-54,4}, -{84,-54,5}, -{84,-54,6}, -{84,-54,7}, -{84,-54,8}, -{84,-54,9}, -{84,-54,10}, -{84,-54,11}, -{84,-54,12}, -{84,-54,13}, -{84,-54,14}, -{84,-54,15}, -{84,-54,16}, -{84,-54,17}, -{84,-54,18}, -{84,-54,19}, -{84,-54,20}, -{84,-54,21}, -{84,-54,22}, -{84,-54,23}, -{84,-54,24}, -{84,-54,25}, -{84,-54,26}, -{84,-54,27}, -{84,-54,28}, -{84,-54,29}, -{84,-54,30}, -{84,-54,31}, -{84,-54,32}, -{84,-54,33}, -{84,-54,34}, -{84,-54,35}, -{84,-54,36}, -{84,-54,37}, -{84,-54,38}, -{84,-54,39}, -{84,-54,40}, -{84,-54,41}, -{84,-54,42}, -{84,-54,43}, -{84,-54,44}, -{84,-54,45}, -{84,-54,46}, -{84,-54,47}, -{84,-54,48}, -{84,-54,49}, -{84,-54,50}, -{84,-54,51}, -{84,-54,52}, -{84,-54,53}, -{84,-54,54}, -{84,-54,55}, -{84,-54,56}, -{84,-54,57}, -{84,-54,58}, -{84,-54,59}, -{84,-54,60}, -{84,-54,61}, -{84,-54,62}, -{84,-54,63}, -{84,-54,64}, -{84,-54,65}, -{84,-54,66}, -{84,-54,67}, -{84,-54,68}, -{84,-54,69}, -{84,-54,70}, -{84,-54,71}, -{84,-54,72}, -{84,-54,73}, -{84,-54,74}, -{84,-54,75}, -{84,-54,76}, -{84,-54,77}, -{84,-54,78}, -{84,-54,79}, -{84,-54,80}, -{84,-54,81}, -{84,-53,0}, -{84,-53,1}, -{84,-53,2}, -{84,-53,3}, -{84,-53,4}, -{84,-53,5}, -{84,-53,6}, -{84,-53,7}, -{84,-53,8}, -{84,-53,9}, -{84,-53,10}, -{84,-53,11}, -{84,-53,12}, -{84,-53,13}, -{84,-53,14}, -{84,-53,15}, -{84,-53,16}, -{84,-53,17}, -{84,-53,18}, -{84,-53,19}, -{84,-53,20}, -{84,-53,21}, -{84,-53,22}, -{84,-53,23}, -{84,-53,24}, -{84,-53,25}, -{84,-53,26}, -{84,-53,27}, -{84,-53,28}, -{84,-53,29}, -{84,-53,30}, -{84,-53,31}, -{84,-53,32}, -{84,-53,33}, -{84,-53,34}, -{84,-53,35}, -{84,-53,36}, -{84,-53,37}, -{84,-53,38}, -{84,-53,39}, -{84,-53,40}, -{84,-53,41}, -{84,-53,42}, -{84,-53,43}, -{84,-53,44}, -{84,-53,45}, -{84,-53,46}, -{84,-53,47}, -{84,-53,48}, -{84,-53,49}, -{84,-53,50}, -{84,-53,51}, -{84,-53,52}, -{84,-53,53}, -{84,-53,54}, -{84,-53,55}, -{84,-53,56}, -{84,-53,57}, -{84,-53,58}, -{84,-53,59}, -{84,-53,60}, -{84,-53,61}, -{84,-53,62}, -{84,-53,63}, -{84,-53,64}, -{84,-53,65}, -{84,-53,66}, -{84,-53,67}, -{84,-53,68}, -{84,-53,69}, -{84,-53,70}, -{84,-53,71}, -{84,-53,72}, -{84,-53,73}, -{84,-53,74}, -{84,-53,75}, -{84,-53,76}, -{84,-53,77}, -{84,-53,78}, -{84,-53,79}, -{84,-53,80}, -{84,-53,81}, -{84,-52,-1}, -{84,-52,0}, -{84,-52,1}, -{84,-52,2}, -{84,-52,3}, -{84,-52,4}, -{84,-52,5}, -{84,-52,6}, -{84,-52,7}, -{84,-52,8}, -{84,-52,9}, -{84,-52,10}, -{84,-52,11}, -{84,-52,12}, -{84,-52,13}, -{84,-52,14}, -{84,-52,15}, -{84,-52,16}, -{84,-52,17}, -{84,-52,18}, -{84,-52,19}, -{84,-52,20}, -{84,-52,21}, -{84,-52,22}, -{84,-52,23}, -{84,-52,24}, -{84,-52,25}, -{84,-52,26}, -{84,-52,27}, -{84,-52,28}, -{84,-52,29}, -{84,-52,30}, -{84,-52,31}, -{84,-52,32}, -{84,-52,33}, -{84,-52,34}, -{84,-52,35}, -{84,-52,36}, -{84,-52,37}, -{84,-52,38}, -{84,-52,39}, -{84,-52,40}, -{84,-52,41}, -{84,-52,42}, -{84,-52,43}, -{84,-52,44}, -{84,-52,45}, -{84,-52,46}, -{84,-52,47}, -{84,-52,48}, -{84,-52,49}, -{84,-52,50}, -{84,-52,51}, -{84,-52,52}, -{84,-52,53}, -{84,-52,54}, -{84,-52,55}, -{84,-52,56}, -{84,-52,57}, -{84,-52,58}, -{84,-52,59}, -{84,-52,60}, -{84,-52,61}, -{84,-52,62}, -{84,-52,63}, -{84,-52,64}, -{84,-52,65}, -{84,-52,66}, -{84,-52,67}, -{84,-52,68}, -{84,-52,69}, -{84,-52,70}, -{84,-52,71}, -{84,-52,72}, -{84,-52,73}, -{84,-52,74}, -{84,-52,75}, -{84,-52,76}, -{84,-52,77}, -{84,-52,78}, -{84,-52,79}, -{84,-52,80}, -{84,-52,81}, -{84,-51,-3}, -{84,-51,-2}, -{84,-51,-1}, -{84,-51,0}, -{84,-51,1}, -{84,-51,2}, -{84,-51,3}, -{84,-51,4}, -{84,-51,5}, -{84,-51,6}, -{84,-51,7}, -{84,-51,8}, -{84,-51,9}, -{84,-51,10}, -{84,-51,11}, -{84,-51,12}, -{84,-51,13}, -{84,-51,14}, -{84,-51,15}, -{84,-51,16}, -{84,-51,17}, -{84,-51,18}, -{84,-51,19}, -{84,-51,20}, -{84,-51,21}, -{84,-51,22}, -{84,-51,23}, -{84,-51,24}, -{84,-51,25}, -{84,-51,26}, -{84,-51,27}, -{84,-51,28}, -{84,-51,29}, -{84,-51,30}, -{84,-51,31}, -{84,-51,32}, -{84,-51,33}, -{84,-51,34}, -{84,-51,35}, -{84,-51,36}, -{84,-51,37}, -{84,-51,38}, -{84,-51,39}, -{84,-51,40}, -{84,-51,41}, -{84,-51,42}, -{84,-51,43}, -{84,-51,44}, -{84,-51,45}, -{84,-51,46}, -{84,-51,47}, -{84,-51,48}, -{84,-51,49}, -{84,-51,50}, -{84,-51,51}, -{84,-51,52}, -{84,-51,53}, -{84,-51,54}, -{84,-51,55}, -{84,-51,56}, -{84,-51,57}, -{84,-51,58}, -{84,-51,59}, -{84,-51,60}, -{84,-51,61}, -{84,-51,62}, -{84,-51,63}, -{84,-51,64}, -{84,-51,65}, -{84,-51,66}, -{84,-51,67}, -{84,-51,68}, -{84,-51,69}, -{84,-51,70}, -{84,-51,71}, -{84,-51,72}, -{84,-51,73}, -{84,-51,74}, -{84,-51,75}, -{84,-51,76}, -{84,-51,77}, -{84,-51,78}, -{84,-51,79}, -{84,-51,80}, -{84,-51,81}, -{84,-50,-5}, -{84,-50,-4}, -{84,-50,-3}, -{84,-50,-2}, -{84,-50,-1}, -{84,-50,0}, -{84,-50,1}, -{84,-50,2}, -{84,-50,3}, -{84,-50,4}, -{84,-50,5}, -{84,-50,6}, -{84,-50,7}, -{84,-50,8}, -{84,-50,9}, -{84,-50,10}, -{84,-50,11}, -{84,-50,12}, -{84,-50,13}, -{84,-50,14}, -{84,-50,15}, -{84,-50,16}, -{84,-50,17}, -{84,-50,18}, -{84,-50,19}, -{84,-50,20}, -{84,-50,21}, -{84,-50,22}, -{84,-50,23}, -{84,-50,24}, -{84,-50,25}, -{84,-50,26}, -{84,-50,27}, -{84,-50,28}, -{84,-50,29}, -{84,-50,30}, -{84,-50,31}, -{84,-50,32}, -{84,-50,33}, -{84,-50,34}, -{84,-50,35}, -{84,-50,36}, -{84,-50,37}, -{84,-50,38}, -{84,-50,39}, -{84,-50,40}, -{84,-50,41}, -{84,-50,42}, -{84,-50,43}, -{84,-50,44}, -{84,-50,45}, -{84,-50,46}, -{84,-50,47}, -{84,-50,48}, -{84,-50,49}, -{84,-50,50}, -{84,-50,51}, -{84,-50,52}, -{84,-50,53}, -{84,-50,54}, -{84,-50,55}, -{84,-50,56}, -{84,-50,57}, -{84,-50,58}, -{84,-50,59}, -{84,-50,60}, -{84,-50,61}, -{84,-50,62}, -{84,-50,63}, -{84,-50,64}, -{84,-50,65}, -{84,-50,66}, -{84,-50,67}, -{84,-50,68}, -{84,-50,69}, -{84,-50,70}, -{84,-50,71}, -{84,-50,72}, -{84,-50,73}, -{84,-50,74}, -{84,-50,75}, -{84,-50,76}, -{84,-50,77}, -{84,-50,78}, -{84,-50,79}, -{84,-50,80}, -{84,-50,81}, -{84,-49,-6}, -{84,-49,-5}, -{84,-49,-4}, -{84,-49,-3}, -{84,-49,-2}, -{84,-49,-1}, -{84,-49,0}, -{84,-49,1}, -{84,-49,2}, -{84,-49,3}, -{84,-49,4}, -{84,-49,5}, -{84,-49,6}, -{84,-49,7}, -{84,-49,8}, -{84,-49,9}, -{84,-49,10}, -{84,-49,11}, -{84,-49,12}, -{84,-49,13}, -{84,-49,14}, -{84,-49,15}, -{84,-49,16}, -{84,-49,17}, -{84,-49,18}, -{84,-49,19}, -{84,-49,20}, -{84,-49,21}, -{84,-49,22}, -{84,-49,23}, -{84,-49,24}, -{84,-49,25}, -{84,-49,26}, -{84,-49,27}, -{84,-49,28}, -{84,-49,29}, -{84,-49,30}, -{84,-49,31}, -{84,-49,32}, -{84,-49,33}, -{84,-49,34}, -{84,-49,35}, -{84,-49,36}, -{84,-49,37}, -{84,-49,38}, -{84,-49,39}, -{84,-49,40}, -{84,-49,41}, -{84,-49,42}, -{84,-49,43}, -{84,-49,44}, -{84,-49,45}, -{84,-49,46}, -{84,-49,47}, -{84,-49,48}, -{84,-49,49}, -{84,-49,50}, -{84,-49,51}, -{84,-49,52}, -{84,-49,53}, -{84,-49,54}, -{84,-49,55}, -{84,-49,56}, -{84,-49,57}, -{84,-49,58}, -{84,-49,59}, -{84,-49,60}, -{84,-49,61}, -{84,-49,62}, -{84,-49,63}, -{84,-49,64}, -{84,-49,65}, -{84,-49,66}, -{84,-49,67}, -{84,-49,68}, -{84,-49,69}, -{84,-49,70}, -{84,-49,71}, -{84,-49,72}, -{84,-49,73}, -{84,-49,74}, -{84,-49,75}, -{84,-49,76}, -{84,-49,77}, -{84,-49,78}, -{84,-49,79}, -{84,-49,80}, -{84,-49,81}, -{84,-48,-8}, -{84,-48,-7}, -{84,-48,-6}, -{84,-48,-5}, -{84,-48,-4}, -{84,-48,-3}, -{84,-48,-2}, -{84,-48,-1}, -{84,-48,0}, -{84,-48,1}, -{84,-48,2}, -{84,-48,3}, -{84,-48,4}, -{84,-48,5}, -{84,-48,6}, -{84,-48,7}, -{84,-48,8}, -{84,-48,9}, -{84,-48,10}, -{84,-48,11}, -{84,-48,12}, -{84,-48,13}, -{84,-48,14}, -{84,-48,15}, -{84,-48,16}, -{84,-48,17}, -{84,-48,18}, -{84,-48,19}, -{84,-48,20}, -{84,-48,21}, -{84,-48,22}, -{84,-48,23}, -{84,-48,24}, -{84,-48,25}, -{84,-48,26}, -{84,-48,27}, -{84,-48,28}, -{84,-48,29}, -{84,-48,30}, -{84,-48,31}, -{84,-48,32}, -{84,-48,33}, -{84,-48,34}, -{84,-48,35}, -{84,-48,36}, -{84,-48,37}, -{84,-48,38}, -{84,-48,39}, -{84,-48,40}, -{84,-48,41}, -{84,-48,42}, -{84,-48,43}, -{84,-48,44}, -{84,-48,45}, -{84,-48,46}, -{84,-48,47}, -{84,-48,48}, -{84,-48,49}, -{84,-48,50}, -{84,-48,51}, -{84,-48,52}, -{84,-48,53}, -{84,-48,54}, -{84,-48,55}, -{84,-48,56}, -{84,-48,57}, -{84,-48,58}, -{84,-48,59}, -{84,-48,60}, -{84,-48,61}, -{84,-48,62}, -{84,-48,63}, -{84,-48,64}, -{84,-48,65}, -{84,-48,66}, -{84,-48,67}, -{84,-48,68}, -{84,-48,69}, -{84,-48,70}, -{84,-48,71}, -{84,-48,72}, -{84,-48,73}, -{84,-48,74}, -{84,-48,75}, -{84,-48,76}, -{84,-48,77}, -{84,-48,78}, -{84,-48,79}, -{84,-48,80}, -{84,-48,81}, -{84,-48,82}, -{84,-47,-10}, -{84,-47,-9}, -{84,-47,-8}, -{84,-47,-7}, -{84,-47,-6}, -{84,-47,-5}, -{84,-47,-4}, -{84,-47,-3}, -{84,-47,-2}, -{84,-47,-1}, -{84,-47,0}, -{84,-47,1}, -{84,-47,2}, -{84,-47,3}, -{84,-47,4}, -{84,-47,5}, -{84,-47,6}, -{84,-47,7}, -{84,-47,8}, -{84,-47,9}, -{84,-47,10}, -{84,-47,11}, -{84,-47,12}, -{84,-47,13}, -{84,-47,14}, -{84,-47,15}, -{84,-47,16}, -{84,-47,17}, -{84,-47,18}, -{84,-47,19}, -{84,-47,20}, -{84,-47,21}, -{84,-47,22}, -{84,-47,23}, -{84,-47,24}, -{84,-47,25}, -{84,-47,26}, -{84,-47,27}, -{84,-47,28}, -{84,-47,29}, -{84,-47,30}, -{84,-47,31}, -{84,-47,32}, -{84,-47,33}, -{84,-47,34}, -{84,-47,35}, -{84,-47,36}, -{84,-47,37}, -{84,-47,38}, -{84,-47,39}, -{84,-47,40}, -{84,-47,41}, -{84,-47,42}, -{84,-47,43}, -{84,-47,44}, -{84,-47,45}, -{84,-47,46}, -{84,-47,47}, -{84,-47,48}, -{84,-47,49}, -{84,-47,50}, -{84,-47,51}, -{84,-47,52}, -{84,-47,53}, -{84,-47,54}, -{84,-47,55}, -{84,-47,56}, -{84,-47,57}, -{84,-47,58}, -{84,-47,59}, -{84,-47,60}, -{84,-47,61}, -{84,-47,62}, -{84,-47,63}, -{84,-47,64}, -{84,-47,65}, -{84,-47,66}, -{84,-47,67}, -{84,-47,68}, -{84,-47,69}, -{84,-47,70}, -{84,-47,71}, -{84,-47,72}, -{84,-47,73}, -{84,-47,74}, -{84,-47,75}, -{84,-47,76}, -{84,-47,77}, -{84,-47,78}, -{84,-47,79}, -{84,-47,80}, -{84,-47,81}, -{84,-47,82}, -{84,-46,-11}, -{84,-46,-10}, -{84,-46,-9}, -{84,-46,-8}, -{84,-46,-7}, -{84,-46,-6}, -{84,-46,-5}, -{84,-46,-4}, -{84,-46,-3}, -{84,-46,-2}, -{84,-46,-1}, -{84,-46,0}, -{84,-46,1}, -{84,-46,2}, -{84,-46,3}, -{84,-46,4}, -{84,-46,5}, -{84,-46,6}, -{84,-46,7}, -{84,-46,8}, -{84,-46,9}, -{84,-46,10}, -{84,-46,11}, -{84,-46,12}, -{84,-46,13}, -{84,-46,14}, -{84,-46,15}, -{84,-46,16}, -{84,-46,17}, -{84,-46,18}, -{84,-46,19}, -{84,-46,20}, -{84,-46,21}, -{84,-46,22}, -{84,-46,23}, -{84,-46,24}, -{84,-46,25}, -{84,-46,26}, -{84,-46,27}, -{84,-46,28}, -{84,-46,29}, -{84,-46,30}, -{84,-46,31}, -{84,-46,32}, -{84,-46,33}, -{84,-46,34}, -{84,-46,35}, -{84,-46,36}, -{84,-46,37}, -{84,-46,38}, -{84,-46,39}, -{84,-46,40}, -{84,-46,41}, -{84,-46,42}, -{84,-46,43}, -{84,-46,44}, -{84,-46,45}, -{84,-46,46}, -{84,-46,47}, -{84,-46,48}, -{84,-46,49}, -{84,-46,50}, -{84,-46,51}, -{84,-46,52}, -{84,-46,53}, -{84,-46,54}, -{84,-46,55}, -{84,-46,56}, -{84,-46,57}, -{84,-46,58}, -{84,-46,59}, -{84,-46,60}, -{84,-46,61}, -{84,-46,62}, -{84,-46,63}, -{84,-46,64}, -{84,-46,65}, -{84,-46,66}, -{84,-46,67}, -{84,-46,68}, -{84,-46,69}, -{84,-46,70}, -{84,-46,71}, -{84,-46,72}, -{84,-46,73}, -{84,-46,74}, -{84,-46,75}, -{84,-46,76}, -{84,-46,77}, -{84,-46,78}, -{84,-46,79}, -{84,-46,80}, -{84,-46,81}, -{84,-46,82}, -{84,-45,-13}, -{84,-45,-12}, -{84,-45,-11}, -{84,-45,-10}, -{84,-45,-9}, -{84,-45,-8}, -{84,-45,-7}, -{84,-45,-6}, -{84,-45,-5}, -{84,-45,-4}, -{84,-45,-3}, -{84,-45,-2}, -{84,-45,-1}, -{84,-45,0}, -{84,-45,1}, -{84,-45,2}, -{84,-45,3}, -{84,-45,4}, -{84,-45,5}, -{84,-45,6}, -{84,-45,7}, -{84,-45,8}, -{84,-45,9}, -{84,-45,10}, -{84,-45,11}, -{84,-45,12}, -{84,-45,13}, -{84,-45,14}, -{84,-45,15}, -{84,-45,16}, -{84,-45,17}, -{84,-45,18}, -{84,-45,19}, -{84,-45,20}, -{84,-45,21}, -{84,-45,22}, -{84,-45,23}, -{84,-45,24}, -{84,-45,25}, -{84,-45,26}, -{84,-45,27}, -{84,-45,28}, -{84,-45,29}, -{84,-45,30}, -{84,-45,31}, -{84,-45,32}, -{84,-45,33}, -{84,-45,34}, -{84,-45,35}, -{84,-45,36}, -{84,-45,37}, -{84,-45,38}, -{84,-45,39}, -{84,-45,40}, -{84,-45,41}, -{84,-45,42}, -{84,-45,43}, -{84,-45,44}, -{84,-45,45}, -{84,-45,46}, -{84,-45,47}, -{84,-45,48}, -{84,-45,49}, -{84,-45,50}, -{84,-45,51}, -{84,-45,52}, -{84,-45,53}, -{84,-45,54}, -{84,-45,55}, -{84,-45,56}, -{84,-45,57}, -{84,-45,58}, -{84,-45,59}, -{84,-45,60}, -{84,-45,61}, -{84,-45,62}, -{84,-45,63}, -{84,-45,64}, -{84,-45,65}, -{84,-45,66}, -{84,-45,67}, -{84,-45,68}, -{84,-45,69}, -{84,-45,70}, -{84,-45,71}, -{84,-45,72}, -{84,-45,73}, -{84,-45,74}, -{84,-45,75}, -{84,-45,76}, -{84,-45,77}, -{84,-45,78}, -{84,-45,79}, -{84,-45,80}, -{84,-45,81}, -{84,-45,82}, -{84,-44,-14}, -{84,-44,-13}, -{84,-44,-12}, -{84,-44,-11}, -{84,-44,-10}, -{84,-44,-9}, -{84,-44,-8}, -{84,-44,-7}, -{84,-44,-6}, -{84,-44,-5}, -{84,-44,-4}, -{84,-44,-3}, -{84,-44,-2}, -{84,-44,-1}, -{84,-44,0}, -{84,-44,1}, -{84,-44,2}, -{84,-44,3}, -{84,-44,4}, -{84,-44,5}, -{84,-44,6}, -{84,-44,7}, -{84,-44,8}, -{84,-44,9}, -{84,-44,10}, -{84,-44,11}, -{84,-44,12}, -{84,-44,13}, -{84,-44,14}, -{84,-44,15}, -{84,-44,16}, -{84,-44,17}, -{84,-44,18}, -{84,-44,19}, -{84,-44,20}, -{84,-44,21}, -{84,-44,22}, -{84,-44,23}, -{84,-44,24}, -{84,-44,25}, -{84,-44,26}, -{84,-44,27}, -{84,-44,28}, -{84,-44,29}, -{84,-44,30}, -{84,-44,31}, -{84,-44,32}, -{84,-44,33}, -{84,-44,34}, -{84,-44,35}, -{84,-44,36}, -{84,-44,37}, -{84,-44,38}, -{84,-44,39}, -{84,-44,40}, -{84,-44,41}, -{84,-44,42}, -{84,-44,43}, -{84,-44,44}, -{84,-44,45}, -{84,-44,46}, -{84,-44,47}, -{84,-44,48}, -{84,-44,49}, -{84,-44,50}, -{84,-44,51}, -{84,-44,52}, -{84,-44,53}, -{84,-44,54}, -{84,-44,55}, -{84,-44,56}, -{84,-44,57}, -{84,-44,58}, -{84,-44,59}, -{84,-44,60}, -{84,-44,61}, -{84,-44,62}, -{84,-44,63}, -{84,-44,64}, -{84,-44,65}, -{84,-44,66}, -{84,-44,67}, -{84,-44,68}, -{84,-44,69}, -{84,-44,70}, -{84,-44,71}, -{84,-44,72}, -{84,-44,73}, -{84,-44,74}, -{84,-44,75}, -{84,-44,76}, -{84,-44,77}, -{84,-44,78}, -{84,-44,79}, -{84,-44,80}, -{84,-44,81}, -{84,-44,82}, -{84,-43,-16}, -{84,-43,-15}, -{84,-43,-14}, -{84,-43,-13}, -{84,-43,-12}, -{84,-43,-11}, -{84,-43,-10}, -{84,-43,-9}, -{84,-43,-8}, -{84,-43,-7}, -{84,-43,-6}, -{84,-43,-5}, -{84,-43,-4}, -{84,-43,-3}, -{84,-43,-2}, -{84,-43,-1}, -{84,-43,0}, -{84,-43,1}, -{84,-43,2}, -{84,-43,3}, -{84,-43,4}, -{84,-43,5}, -{84,-43,6}, -{84,-43,7}, -{84,-43,8}, -{84,-43,9}, -{84,-43,10}, -{84,-43,11}, -{84,-43,12}, -{84,-43,13}, -{84,-43,14}, -{84,-43,15}, -{84,-43,16}, -{84,-43,17}, -{84,-43,18}, -{84,-43,19}, -{84,-43,20}, -{84,-43,21}, -{84,-43,22}, -{84,-43,23}, -{84,-43,24}, -{84,-43,25}, -{84,-43,26}, -{84,-43,27}, -{84,-43,28}, -{84,-43,29}, -{84,-43,30}, -{84,-43,31}, -{84,-43,32}, -{84,-43,33}, -{84,-43,34}, -{84,-43,35}, -{84,-43,36}, -{84,-43,37}, -{84,-43,38}, -{84,-43,39}, -{84,-43,40}, -{84,-43,41}, -{84,-43,42}, -{84,-43,43}, -{84,-43,44}, -{84,-43,45}, -{84,-43,46}, -{84,-43,47}, -{84,-43,48}, -{84,-43,49}, -{84,-43,50}, -{84,-43,51}, -{84,-43,52}, -{84,-43,53}, -{84,-43,54}, -{84,-43,55}, -{84,-43,56}, -{84,-43,57}, -{84,-43,58}, -{84,-43,59}, -{84,-43,60}, -{84,-43,61}, -{84,-43,62}, -{84,-43,63}, -{84,-43,64}, -{84,-43,65}, -{84,-43,66}, -{84,-43,67}, -{84,-43,68}, -{84,-43,69}, -{84,-43,70}, -{84,-43,71}, -{84,-43,72}, -{84,-43,73}, -{84,-43,74}, -{84,-43,75}, -{84,-43,76}, -{84,-43,77}, -{84,-43,78}, -{84,-43,79}, -{84,-43,80}, -{84,-43,81}, -{84,-43,82}, -{84,-42,-17}, -{84,-42,-16}, -{84,-42,-15}, -{84,-42,-14}, -{84,-42,-13}, -{84,-42,-12}, -{84,-42,-11}, -{84,-42,-10}, -{84,-42,-9}, -{84,-42,-8}, -{84,-42,-7}, -{84,-42,-6}, -{84,-42,-5}, -{84,-42,-4}, -{84,-42,-3}, -{84,-42,-2}, -{84,-42,-1}, -{84,-42,0}, -{84,-42,1}, -{84,-42,2}, -{84,-42,3}, -{84,-42,4}, -{84,-42,5}, -{84,-42,6}, -{84,-42,7}, -{84,-42,8}, -{84,-42,9}, -{84,-42,10}, -{84,-42,11}, -{84,-42,12}, -{84,-42,13}, -{84,-42,14}, -{84,-42,15}, -{84,-42,16}, -{84,-42,17}, -{84,-42,18}, -{84,-42,19}, -{84,-42,20}, -{84,-42,21}, -{84,-42,22}, -{84,-42,23}, -{84,-42,24}, -{84,-42,25}, -{84,-42,26}, -{84,-42,27}, -{84,-42,28}, -{84,-42,29}, -{84,-42,30}, -{84,-42,31}, -{84,-42,32}, -{84,-42,33}, -{84,-42,34}, -{84,-42,35}, -{84,-42,36}, -{84,-42,37}, -{84,-42,38}, -{84,-42,39}, -{84,-42,40}, -{84,-42,41}, -{84,-42,42}, -{84,-42,43}, -{84,-42,44}, -{84,-42,45}, -{84,-42,46}, -{84,-42,47}, -{84,-42,48}, -{84,-42,49}, -{84,-42,50}, -{84,-42,51}, -{84,-42,52}, -{84,-42,53}, -{84,-42,54}, -{84,-42,55}, -{84,-42,56}, -{84,-42,57}, -{84,-42,58}, -{84,-42,59}, -{84,-42,60}, -{84,-42,61}, -{84,-42,62}, -{84,-42,63}, -{84,-42,64}, -{84,-42,65}, -{84,-42,66}, -{84,-42,67}, -{84,-42,68}, -{84,-42,69}, -{84,-42,70}, -{84,-42,71}, -{84,-42,72}, -{84,-42,73}, -{84,-42,74}, -{84,-42,75}, -{84,-42,76}, -{84,-42,77}, -{84,-42,78}, -{84,-42,79}, -{84,-42,80}, -{84,-42,81}, -{84,-42,82}, -{84,-41,-19}, -{84,-41,-18}, -{84,-41,-17}, -{84,-41,-16}, -{84,-41,-15}, -{84,-41,-14}, -{84,-41,-13}, -{84,-41,-12}, -{84,-41,-11}, -{84,-41,-10}, -{84,-41,-9}, -{84,-41,-8}, -{84,-41,-7}, -{84,-41,-6}, -{84,-41,-5}, -{84,-41,-4}, -{84,-41,-3}, -{84,-41,-2}, -{84,-41,-1}, -{84,-41,0}, -{84,-41,1}, -{84,-41,2}, -{84,-41,3}, -{84,-41,4}, -{84,-41,5}, -{84,-41,6}, -{84,-41,7}, -{84,-41,8}, -{84,-41,9}, -{84,-41,10}, -{84,-41,11}, -{84,-41,12}, -{84,-41,13}, -{84,-41,14}, -{84,-41,15}, -{84,-41,16}, -{84,-41,17}, -{84,-41,18}, -{84,-41,19}, -{84,-41,20}, -{84,-41,21}, -{84,-41,22}, -{84,-41,23}, -{84,-41,24}, -{84,-41,25}, -{84,-41,26}, -{84,-41,27}, -{84,-41,28}, -{84,-41,29}, -{84,-41,30}, -{84,-41,31}, -{84,-41,32}, -{84,-41,33}, -{84,-41,34}, -{84,-41,35}, -{84,-41,36}, -{84,-41,37}, -{84,-41,38}, -{84,-41,39}, -{84,-41,40}, -{84,-41,41}, -{84,-41,42}, -{84,-41,43}, -{84,-41,44}, -{84,-41,45}, -{84,-41,46}, -{84,-41,47}, -{84,-41,48}, -{84,-41,49}, -{84,-41,50}, -{84,-41,51}, -{84,-41,52}, -{84,-41,53}, -{84,-41,54}, -{84,-41,55}, -{84,-41,56}, -{84,-41,57}, -{84,-41,58}, -{84,-41,59}, -{84,-41,60}, -{84,-41,61}, -{84,-41,62}, -{84,-41,63}, -{84,-41,64}, -{84,-41,65}, -{84,-41,66}, -{84,-41,67}, -{84,-41,68}, -{84,-41,69}, -{84,-41,70}, -{84,-41,71}, -{84,-41,72}, -{84,-41,73}, -{84,-41,74}, -{84,-41,75}, -{84,-41,76}, -{84,-41,77}, -{84,-41,78}, -{84,-41,79}, -{84,-41,80}, -{84,-41,81}, -{84,-41,82}, -{84,-40,-20}, -{84,-40,-19}, -{84,-40,-18}, -{84,-40,-17}, -{84,-40,-16}, -{84,-40,-15}, -{84,-40,-14}, -{84,-40,-13}, -{84,-40,-12}, -{84,-40,-11}, -{84,-40,-10}, -{84,-40,-9}, -{84,-40,-8}, -{84,-40,-7}, -{84,-40,-6}, -{84,-40,-5}, -{84,-40,-4}, -{84,-40,-3}, -{84,-40,-2}, -{84,-40,-1}, -{84,-40,0}, -{84,-40,1}, -{84,-40,2}, -{84,-40,3}, -{84,-40,4}, -{84,-40,5}, -{84,-40,6}, -{84,-40,7}, -{84,-40,8}, -{84,-40,9}, -{84,-40,10}, -{84,-40,11}, -{84,-40,12}, -{84,-40,13}, -{84,-40,14}, -{84,-40,15}, -{84,-40,16}, -{84,-40,17}, -{84,-40,18}, -{84,-40,19}, -{84,-40,20}, -{84,-40,21}, -{84,-40,22}, -{84,-40,23}, -{84,-40,24}, -{84,-40,25}, -{84,-40,26}, -{84,-40,27}, -{84,-40,28}, -{84,-40,29}, -{84,-40,30}, -{84,-40,31}, -{84,-40,32}, -{84,-40,33}, -{84,-40,34}, -{84,-40,35}, -{84,-40,36}, -{84,-40,37}, -{84,-40,38}, -{84,-40,39}, -{84,-40,40}, -{84,-40,41}, -{84,-40,42}, -{84,-40,43}, -{84,-40,44}, -{84,-40,45}, -{84,-40,46}, -{84,-40,47}, -{84,-40,48}, -{84,-40,49}, -{84,-40,50}, -{84,-40,51}, -{84,-40,52}, -{84,-40,53}, -{84,-40,54}, -{84,-40,55}, -{84,-40,56}, -{84,-40,57}, -{84,-40,58}, -{84,-40,59}, -{84,-40,60}, -{84,-40,61}, -{84,-40,62}, -{84,-40,63}, -{84,-40,64}, -{84,-40,65}, -{84,-40,66}, -{84,-40,67}, -{84,-40,68}, -{84,-40,69}, -{84,-40,70}, -{84,-40,71}, -{84,-40,72}, -{84,-40,73}, -{84,-40,74}, -{84,-40,75}, -{84,-40,76}, -{84,-40,77}, -{84,-40,78}, -{84,-40,79}, -{84,-40,80}, -{84,-40,81}, -{84,-40,82}, -{84,-39,-22}, -{84,-39,-21}, -{84,-39,-20}, -{84,-39,-19}, -{84,-39,-18}, -{84,-39,-17}, -{84,-39,-16}, -{84,-39,-15}, -{84,-39,-14}, -{84,-39,-13}, -{84,-39,-12}, -{84,-39,-11}, -{84,-39,-10}, -{84,-39,-9}, -{84,-39,-8}, -{84,-39,-7}, -{84,-39,-6}, -{84,-39,-5}, -{84,-39,-4}, -{84,-39,-3}, -{84,-39,-2}, -{84,-39,-1}, -{84,-39,0}, -{84,-39,1}, -{84,-39,2}, -{84,-39,3}, -{84,-39,4}, -{84,-39,5}, -{84,-39,6}, -{84,-39,7}, -{84,-39,8}, -{84,-39,9}, -{84,-39,10}, -{84,-39,11}, -{84,-39,12}, -{84,-39,13}, -{84,-39,14}, -{84,-39,15}, -{84,-39,16}, -{84,-39,17}, -{84,-39,18}, -{84,-39,19}, -{84,-39,20}, -{84,-39,21}, -{84,-39,22}, -{84,-39,23}, -{84,-39,24}, -{84,-39,25}, -{84,-39,26}, -{84,-39,27}, -{84,-39,28}, -{84,-39,29}, -{84,-39,30}, -{84,-39,31}, -{84,-39,32}, -{84,-39,33}, -{84,-39,34}, -{84,-39,35}, -{84,-39,36}, -{84,-39,37}, -{84,-39,38}, -{84,-39,39}, -{84,-39,40}, -{84,-39,41}, -{84,-39,42}, -{84,-39,43}, -{84,-39,44}, -{84,-39,45}, -{84,-39,46}, -{84,-39,47}, -{84,-39,48}, -{84,-39,49}, -{84,-39,50}, -{84,-39,51}, -{84,-39,52}, -{84,-39,53}, -{84,-39,54}, -{84,-39,55}, -{84,-39,56}, -{84,-39,57}, -{84,-39,58}, -{84,-39,59}, -{84,-39,60}, -{84,-39,61}, -{84,-39,62}, -{84,-39,63}, -{84,-39,64}, -{84,-39,65}, -{84,-39,66}, -{84,-39,67}, -{84,-39,68}, -{84,-39,69}, -{84,-39,70}, -{84,-39,71}, -{84,-39,72}, -{84,-39,73}, -{84,-39,74}, -{84,-39,75}, -{84,-39,76}, -{84,-39,77}, -{84,-39,78}, -{84,-39,79}, -{84,-39,80}, -{84,-39,81}, -{84,-39,82}, -{84,-38,-23}, -{84,-38,-22}, -{84,-38,-21}, -{84,-38,-20}, -{84,-38,-19}, -{84,-38,-18}, -{84,-38,-17}, -{84,-38,-16}, -{84,-38,-15}, -{84,-38,-14}, -{84,-38,-13}, -{84,-38,-12}, -{84,-38,-11}, -{84,-38,-10}, -{84,-38,-9}, -{84,-38,-8}, -{84,-38,-7}, -{84,-38,-6}, -{84,-38,-5}, -{84,-38,-4}, -{84,-38,-3}, -{84,-38,-2}, -{84,-38,-1}, -{84,-38,0}, -{84,-38,1}, -{84,-38,2}, -{84,-38,3}, -{84,-38,4}, -{84,-38,5}, -{84,-38,6}, -{84,-38,7}, -{84,-38,8}, -{84,-38,9}, -{84,-38,10}, -{84,-38,11}, -{84,-38,12}, -{84,-38,13}, -{84,-38,14}, -{84,-38,15}, -{84,-38,16}, -{84,-38,17}, -{84,-38,18}, -{84,-38,19}, -{84,-38,20}, -{84,-38,21}, -{84,-38,22}, -{84,-38,23}, -{84,-38,24}, -{84,-38,25}, -{84,-38,26}, -{84,-38,27}, -{84,-38,28}, -{84,-38,29}, -{84,-38,30}, -{84,-38,31}, -{84,-38,32}, -{84,-38,33}, -{84,-38,34}, -{84,-38,35}, -{84,-38,36}, -{84,-38,37}, -{84,-38,38}, -{84,-38,39}, -{84,-38,40}, -{84,-38,41}, -{84,-38,42}, -{84,-38,43}, -{84,-38,44}, -{84,-38,45}, -{84,-38,46}, -{84,-38,47}, -{84,-38,48}, -{84,-38,49}, -{84,-38,50}, -{84,-38,51}, -{84,-38,52}, -{84,-38,53}, -{84,-38,54}, -{84,-38,55}, -{84,-38,56}, -{84,-38,57}, -{84,-38,58}, -{84,-38,59}, -{84,-38,60}, -{84,-38,61}, -{84,-38,62}, -{84,-38,63}, -{84,-38,64}, -{84,-38,65}, -{84,-38,66}, -{84,-38,67}, -{84,-38,68}, -{84,-38,69}, -{84,-38,70}, -{84,-38,71}, -{84,-38,72}, -{84,-38,73}, -{84,-38,74}, -{84,-38,75}, -{84,-38,76}, -{84,-38,77}, -{84,-38,78}, -{84,-38,79}, -{84,-38,80}, -{84,-38,81}, -{84,-38,82}, -{84,-37,-25}, -{84,-37,-24}, -{84,-37,-23}, -{84,-37,-22}, -{84,-37,-21}, -{84,-37,-20}, -{84,-37,-19}, -{84,-37,-18}, -{84,-37,-17}, -{84,-37,-16}, -{84,-37,-15}, -{84,-37,-14}, -{84,-37,-13}, -{84,-37,-12}, -{84,-37,-11}, -{84,-37,-10}, -{84,-37,-9}, -{84,-37,-8}, -{84,-37,-7}, -{84,-37,-6}, -{84,-37,-5}, -{84,-37,-4}, -{84,-37,-3}, -{84,-37,-2}, -{84,-37,-1}, -{84,-37,0}, -{84,-37,1}, -{84,-37,2}, -{84,-37,3}, -{84,-37,4}, -{84,-37,5}, -{84,-37,6}, -{84,-37,7}, -{84,-37,8}, -{84,-37,9}, -{84,-37,10}, -{84,-37,11}, -{84,-37,12}, -{84,-37,13}, -{84,-37,14}, -{84,-37,15}, -{84,-37,16}, -{84,-37,17}, -{84,-37,18}, -{84,-37,19}, -{84,-37,20}, -{84,-37,21}, -{84,-37,22}, -{84,-37,23}, -{84,-37,24}, -{84,-37,25}, -{84,-37,26}, -{84,-37,27}, -{84,-37,28}, -{84,-37,29}, -{84,-37,30}, -{84,-37,31}, -{84,-37,32}, -{84,-37,33}, -{84,-37,34}, -{84,-37,35}, -{84,-37,36}, -{84,-37,37}, -{84,-37,38}, -{84,-37,39}, -{84,-37,40}, -{84,-37,41}, -{84,-37,42}, -{84,-37,43}, -{84,-37,44}, -{84,-37,45}, -{84,-37,46}, -{84,-37,47}, -{84,-37,48}, -{84,-37,49}, -{84,-37,50}, -{84,-37,51}, -{84,-37,52}, -{84,-37,53}, -{84,-37,54}, -{84,-37,55}, -{84,-37,56}, -{84,-37,57}, -{84,-37,58}, -{84,-37,59}, -{84,-37,60}, -{84,-37,61}, -{84,-37,62}, -{84,-37,63}, -{84,-37,64}, -{84,-37,65}, -{84,-37,66}, -{84,-37,67}, -{84,-37,68}, -{84,-37,69}, -{84,-37,70}, -{84,-37,71}, -{84,-37,72}, -{84,-37,73}, -{84,-37,74}, -{84,-37,75}, -{84,-37,76}, -{84,-37,77}, -{84,-37,78}, -{84,-37,79}, -{84,-37,80}, -{84,-37,81}, -{84,-37,82}, -{84,-36,-24}, -{84,-36,-23}, -{84,-36,-22}, -{84,-36,-21}, -{84,-36,-20}, -{84,-36,-19}, -{84,-36,-18}, -{84,-36,-17}, -{84,-36,-16}, -{84,-36,-15}, -{84,-36,-14}, -{84,-36,-13}, -{84,-36,-12}, -{84,-36,-11}, -{84,-36,-10}, -{84,-36,-9}, -{84,-36,-8}, -{84,-36,-7}, -{84,-36,-6}, -{84,-36,-5}, -{84,-36,-4}, -{84,-36,-3}, -{84,-36,-2}, -{84,-36,-1}, -{84,-36,0}, -{84,-36,1}, -{84,-36,2}, -{84,-36,3}, -{84,-36,4}, -{84,-36,5}, -{84,-36,6}, -{84,-36,7}, -{84,-36,8}, -{84,-36,9}, -{84,-36,10}, -{84,-36,11}, -{84,-36,12}, -{84,-36,13}, -{84,-36,14}, -{84,-36,15}, -{84,-36,16}, -{84,-36,17}, -{84,-36,18}, -{84,-36,19}, -{84,-36,20}, -{84,-36,21}, -{84,-36,22}, -{84,-36,23}, -{84,-36,24}, -{84,-36,25}, -{84,-36,26}, -{84,-36,27}, -{84,-36,28}, -{84,-36,29}, -{84,-36,30}, -{84,-36,31}, -{84,-36,32}, -{84,-36,33}, -{84,-36,34}, -{84,-36,35}, -{84,-36,36}, -{84,-36,37}, -{84,-36,38}, -{84,-36,39}, -{84,-36,40}, -{84,-36,41}, -{84,-36,42}, -{84,-36,43}, -{84,-36,44}, -{84,-36,45}, -{84,-36,46}, -{84,-36,47}, -{84,-36,48}, -{84,-36,49}, -{84,-36,50}, -{84,-36,51}, -{84,-36,52}, -{84,-36,53}, -{84,-36,54}, -{84,-36,55}, -{84,-36,56}, -{84,-36,57}, -{84,-36,58}, -{84,-36,59}, -{84,-36,60}, -{84,-36,61}, -{84,-36,62}, -{84,-36,63}, -{84,-36,64}, -{84,-36,65}, -{84,-36,66}, -{84,-36,67}, -{84,-36,68}, -{84,-36,69}, -{84,-36,70}, -{84,-36,71}, -{84,-36,72}, -{84,-36,73}, -{84,-36,74}, -{84,-36,75}, -{84,-36,76}, -{84,-36,77}, -{84,-36,78}, -{84,-36,79}, -{84,-36,80}, -{84,-36,81}, -{84,-36,82}, -{84,-35,-24}, -{84,-35,-23}, -{84,-35,-22}, -{84,-35,-21}, -{84,-35,-20}, -{84,-35,-19}, -{84,-35,-18}, -{84,-35,-17}, -{84,-35,-16}, -{84,-35,-15}, -{84,-35,-14}, -{84,-35,-13}, -{84,-35,-12}, -{84,-35,-11}, -{84,-35,-10}, -{84,-35,-9}, -{84,-35,-8}, -{84,-35,-7}, -{84,-35,-6}, -{84,-35,-5}, -{84,-35,-4}, -{84,-35,-3}, -{84,-35,-2}, -{84,-35,-1}, -{84,-35,0}, -{84,-35,1}, -{84,-35,2}, -{84,-35,3}, -{84,-35,4}, -{84,-35,5}, -{84,-35,6}, -{84,-35,7}, -{84,-35,8}, -{84,-35,9}, -{84,-35,10}, -{84,-35,11}, -{84,-35,12}, -{84,-35,13}, -{84,-35,14}, -{84,-35,15}, -{84,-35,16}, -{84,-35,17}, -{84,-35,18}, -{84,-35,19}, -{84,-35,20}, -{84,-35,21}, -{84,-35,22}, -{84,-35,23}, -{84,-35,24}, -{84,-35,25}, -{84,-35,26}, -{84,-35,27}, -{84,-35,28}, -{84,-35,29}, -{84,-35,30}, -{84,-35,31}, -{84,-35,32}, -{84,-35,33}, -{84,-35,34}, -{84,-35,35}, -{84,-35,36}, -{84,-35,37}, -{84,-35,38}, -{84,-35,39}, -{84,-35,40}, -{84,-35,41}, -{84,-35,42}, -{84,-35,43}, -{84,-35,44}, -{84,-35,45}, -{84,-35,46}, -{84,-35,47}, -{84,-35,48}, -{84,-35,49}, -{84,-35,50}, -{84,-35,51}, -{84,-35,52}, -{84,-35,53}, -{84,-35,54}, -{84,-35,55}, -{84,-35,56}, -{84,-35,57}, -{84,-35,58}, -{84,-35,59}, -{84,-35,60}, -{84,-35,61}, -{84,-35,62}, -{84,-35,63}, -{84,-35,64}, -{84,-35,65}, -{84,-35,66}, -{84,-35,67}, -{84,-35,68}, -{84,-35,69}, -{84,-35,70}, -{84,-35,71}, -{84,-35,72}, -{84,-35,73}, -{84,-35,74}, -{84,-35,75}, -{84,-35,76}, -{84,-35,77}, -{84,-35,78}, -{84,-35,79}, -{84,-35,80}, -{84,-35,81}, -{84,-35,82}, -{84,-34,-24}, -{84,-34,-23}, -{84,-34,-22}, -{84,-34,-21}, -{84,-34,-20}, -{84,-34,-19}, -{84,-34,-18}, -{84,-34,-17}, -{84,-34,-16}, -{84,-34,-15}, -{84,-34,-14}, -{84,-34,-13}, -{84,-34,-12}, -{84,-34,-11}, -{84,-34,-10}, -{84,-34,-9}, -{84,-34,-8}, -{84,-34,-7}, -{84,-34,-6}, -{84,-34,-5}, -{84,-34,-4}, -{84,-34,-3}, -{84,-34,-2}, -{84,-34,-1}, -{84,-34,0}, -{84,-34,1}, -{84,-34,2}, -{84,-34,3}, -{84,-34,4}, -{84,-34,5}, -{84,-34,6}, -{84,-34,7}, -{84,-34,8}, -{84,-34,9}, -{84,-34,10}, -{84,-34,11}, -{84,-34,12}, -{84,-34,13}, -{84,-34,14}, -{84,-34,15}, -{84,-34,16}, -{84,-34,17}, -{84,-34,18}, -{84,-34,19}, -{84,-34,20}, -{84,-34,21}, -{84,-34,22}, -{84,-34,23}, -{84,-34,24}, -{84,-34,25}, -{84,-34,26}, -{84,-34,27}, -{84,-34,28}, -{84,-34,29}, -{84,-34,30}, -{84,-34,31}, -{84,-34,32}, -{84,-34,33}, -{84,-34,34}, -{84,-34,35}, -{84,-34,36}, -{84,-34,37}, -{84,-34,38}, -{84,-34,39}, -{84,-34,40}, -{84,-34,41}, -{84,-34,42}, -{84,-34,43}, -{84,-34,44}, -{84,-34,45}, -{84,-34,46}, -{84,-34,47}, -{84,-34,48}, -{84,-34,49}, -{84,-34,50}, -{84,-34,51}, -{84,-34,52}, -{84,-34,53}, -{84,-34,54}, -{84,-34,55}, -{84,-34,56}, -{84,-34,57}, -{84,-34,58}, -{84,-34,59}, -{84,-34,60}, -{84,-34,61}, -{84,-34,62}, -{84,-34,63}, -{84,-34,64}, -{84,-34,65}, -{84,-34,66}, -{84,-34,67}, -{84,-34,68}, -{84,-34,69}, -{84,-34,70}, -{84,-34,71}, -{84,-34,72}, -{84,-34,73}, -{84,-34,74}, -{84,-34,75}, -{84,-34,76}, -{84,-34,77}, -{84,-34,78}, -{84,-34,79}, -{84,-34,80}, -{84,-34,81}, -{84,-34,82}, -{84,-33,-24}, -{84,-33,-23}, -{84,-33,-22}, -{84,-33,-21}, -{84,-33,-20}, -{84,-33,-19}, -{84,-33,-18}, -{84,-33,-17}, -{84,-33,-16}, -{84,-33,-15}, -{84,-33,-14}, -{84,-33,-13}, -{84,-33,-12}, -{84,-33,-11}, -{84,-33,-10}, -{84,-33,-9}, -{84,-33,-8}, -{84,-33,-7}, -{84,-33,-6}, -{84,-33,-5}, -{84,-33,-4}, -{84,-33,-3}, -{84,-33,-2}, -{84,-33,-1}, -{84,-33,0}, -{84,-33,1}, -{84,-33,2}, -{84,-33,3}, -{84,-33,4}, -{84,-33,5}, -{84,-33,6}, -{84,-33,7}, -{84,-33,8}, -{84,-33,9}, -{84,-33,10}, -{84,-33,11}, -{84,-33,12}, -{84,-33,13}, -{84,-33,14}, -{84,-33,15}, -{84,-33,16}, -{84,-33,17}, -{84,-33,18}, -{84,-33,19}, -{84,-33,20}, -{84,-33,21}, -{84,-33,22}, -{84,-33,23}, -{84,-33,24}, -{84,-33,25}, -{84,-33,26}, -{84,-33,27}, -{84,-33,28}, -{84,-33,29}, -{84,-33,30}, -{84,-33,31}, -{84,-33,32}, -{84,-33,33}, -{84,-33,34}, -{84,-33,35}, -{84,-33,36}, -{84,-33,37}, -{84,-33,38}, -{84,-33,39}, -{84,-33,40}, -{84,-33,41}, -{84,-33,42}, -{84,-33,43}, -{84,-33,44}, -{84,-33,45}, -{84,-33,46}, -{84,-33,47}, -{84,-33,48}, -{84,-33,49}, -{84,-33,50}, -{84,-33,51}, -{84,-33,52}, -{84,-33,53}, -{84,-33,54}, -{84,-33,55}, -{84,-33,56}, -{84,-33,57}, -{84,-33,58}, -{84,-33,59}, -{84,-33,60}, -{84,-33,61}, -{84,-33,62}, -{84,-33,63}, -{84,-33,64}, -{84,-33,65}, -{84,-33,66}, -{84,-33,67}, -{84,-33,68}, -{84,-33,69}, -{84,-33,70}, -{84,-33,71}, -{84,-33,72}, -{84,-33,73}, -{84,-33,74}, -{84,-33,75}, -{84,-33,76}, -{84,-33,77}, -{84,-33,78}, -{84,-33,79}, -{84,-33,80}, -{84,-33,81}, -{84,-33,82}, -{84,-32,-24}, -{84,-32,-23}, -{84,-32,-22}, -{84,-32,-21}, -{84,-32,-20}, -{84,-32,-19}, -{84,-32,-18}, -{84,-32,-17}, -{84,-32,-16}, -{84,-32,-15}, -{84,-32,-14}, -{84,-32,-13}, -{84,-32,-12}, -{84,-32,-11}, -{84,-32,-10}, -{84,-32,-9}, -{84,-32,-8}, -{84,-32,-7}, -{84,-32,-6}, -{84,-32,-5}, -{84,-32,-4}, -{84,-32,-3}, -{84,-32,-2}, -{84,-32,-1}, -{84,-32,0}, -{84,-32,1}, -{84,-32,2}, -{84,-32,3}, -{84,-32,4}, -{84,-32,5}, -{84,-32,6}, -{84,-32,7}, -{84,-32,8}, -{84,-32,9}, -{84,-32,10}, -{84,-32,11}, -{84,-32,12}, -{84,-32,13}, -{84,-32,14}, -{84,-32,15}, -{84,-32,16}, -{84,-32,17}, -{84,-32,18}, -{84,-32,19}, -{84,-32,20}, -{84,-32,21}, -{84,-32,22}, -{84,-32,23}, -{84,-32,24}, -{84,-32,25}, -{84,-32,26}, -{84,-32,27}, -{84,-32,28}, -{84,-32,29}, -{84,-32,30}, -{84,-32,31}, -{84,-32,32}, -{84,-32,33}, -{84,-32,34}, -{84,-32,35}, -{84,-32,36}, -{84,-32,37}, -{84,-32,38}, -{84,-32,39}, -{84,-32,40}, -{84,-32,41}, -{84,-32,42}, -{84,-32,43}, -{84,-32,44}, -{84,-32,45}, -{84,-32,46}, -{84,-32,47}, -{84,-32,48}, -{84,-32,49}, -{84,-32,50}, -{84,-32,51}, -{84,-32,52}, -{84,-32,53}, -{84,-32,54}, -{84,-32,55}, -{84,-32,56}, -{84,-32,57}, -{84,-32,58}, -{84,-32,59}, -{84,-32,60}, -{84,-32,61}, -{84,-32,62}, -{84,-32,63}, -{84,-32,64}, -{84,-32,65}, -{84,-32,66}, -{84,-32,67}, -{84,-32,68}, -{84,-32,69}, -{84,-32,70}, -{84,-32,71}, -{84,-32,72}, -{84,-32,73}, -{84,-32,74}, -{84,-32,75}, -{84,-32,76}, -{84,-32,77}, -{84,-32,78}, -{84,-32,79}, -{84,-32,80}, -{84,-32,81}, -{84,-32,82}, -{84,-31,-24}, -{84,-31,-23}, -{84,-31,-22}, -{84,-31,-21}, -{84,-31,-20}, -{84,-31,-19}, -{84,-31,-18}, -{84,-31,-17}, -{84,-31,-16}, -{84,-31,-15}, -{84,-31,-14}, -{84,-31,-13}, -{84,-31,-12}, -{84,-31,-11}, -{84,-31,-10}, -{84,-31,-9}, -{84,-31,-8}, -{84,-31,-7}, -{84,-31,-6}, -{84,-31,-5}, -{84,-31,-4}, -{84,-31,-3}, -{84,-31,-2}, -{84,-31,-1}, -{84,-31,0}, -{84,-31,1}, -{84,-31,2}, -{84,-31,3}, -{84,-31,4}, -{84,-31,5}, -{84,-31,6}, -{84,-31,7}, -{84,-31,8}, -{84,-31,9}, -{84,-31,10}, -{84,-31,11}, -{84,-31,12}, -{84,-31,13}, -{84,-31,14}, -{84,-31,15}, -{84,-31,16}, -{84,-31,17}, -{84,-31,18}, -{84,-31,19}, -{84,-31,20}, -{84,-31,21}, -{84,-31,22}, -{84,-31,23}, -{84,-31,24}, -{84,-31,25}, -{84,-31,26}, -{84,-31,27}, -{84,-31,28}, -{84,-31,29}, -{84,-31,30}, -{84,-31,31}, -{84,-31,32}, -{84,-31,33}, -{84,-31,34}, -{84,-31,35}, -{84,-31,36}, -{84,-31,37}, -{84,-31,38}, -{84,-31,39}, -{84,-31,40}, -{84,-31,41}, -{84,-31,42}, -{84,-31,43}, -{84,-31,44}, -{84,-31,45}, -{84,-31,46}, -{84,-31,47}, -{84,-31,48}, -{84,-31,49}, -{84,-31,50}, -{84,-31,51}, -{84,-31,52}, -{84,-31,53}, -{84,-31,54}, -{84,-31,55}, -{84,-31,56}, -{84,-31,57}, -{84,-31,58}, -{84,-31,59}, -{84,-31,60}, -{84,-31,61}, -{84,-31,62}, -{84,-31,63}, -{84,-31,64}, -{84,-31,65}, -{84,-31,66}, -{84,-31,67}, -{84,-31,68}, -{84,-31,69}, -{84,-31,70}, -{84,-31,71}, -{84,-31,72}, -{84,-31,73}, -{84,-31,74}, -{84,-31,75}, -{84,-31,76}, -{84,-31,77}, -{84,-31,78}, -{84,-31,79}, -{84,-31,80}, -{84,-31,81}, -{84,-31,82}, -{84,-30,-24}, -{84,-30,-23}, -{84,-30,-22}, -{84,-30,-21}, -{84,-30,-20}, -{84,-30,-19}, -{84,-30,-18}, -{84,-30,-17}, -{84,-30,-16}, -{84,-30,-15}, -{84,-30,-14}, -{84,-30,-13}, -{84,-30,-12}, -{84,-30,-11}, -{84,-30,-10}, -{84,-30,-9}, -{84,-30,-8}, -{84,-30,-7}, -{84,-30,-6}, -{84,-30,-5}, -{84,-30,-4}, -{84,-30,-3}, -{84,-30,-2}, -{84,-30,-1}, -{84,-30,0}, -{84,-30,1}, -{84,-30,2}, -{84,-30,3}, -{84,-30,4}, -{84,-30,5}, -{84,-30,6}, -{84,-30,7}, -{84,-30,8}, -{84,-30,9}, -{84,-30,10}, -{84,-30,11}, -{84,-30,12}, -{84,-30,13}, -{84,-30,14}, -{84,-30,15}, -{84,-30,16}, -{84,-30,17}, -{84,-30,18}, -{84,-30,19}, -{84,-30,20}, -{84,-30,21}, -{84,-30,22}, -{84,-30,23}, -{84,-30,24}, -{84,-30,25}, -{84,-30,26}, -{84,-30,27}, -{84,-30,28}, -{84,-30,29}, -{84,-30,30}, -{84,-30,31}, -{84,-30,32}, -{84,-30,33}, -{84,-30,34}, -{84,-30,35}, -{84,-30,36}, -{84,-30,37}, -{84,-30,38}, -{84,-30,39}, -{84,-30,40}, -{84,-30,41}, -{84,-30,42}, -{84,-30,43}, -{84,-30,44}, -{84,-30,45}, -{84,-30,46}, -{84,-30,47}, -{84,-30,48}, -{84,-30,49}, -{84,-30,50}, -{84,-30,51}, -{84,-30,52}, -{84,-30,53}, -{84,-30,54}, -{84,-30,55}, -{84,-30,56}, -{84,-30,57}, -{84,-30,58}, -{84,-30,59}, -{84,-30,60}, -{84,-30,61}, -{84,-30,62}, -{84,-30,63}, -{84,-30,64}, -{84,-30,65}, -{84,-30,66}, -{84,-30,67}, -{84,-30,68}, -{84,-30,69}, -{84,-30,70}, -{84,-30,71}, -{84,-30,72}, -{84,-30,73}, -{84,-30,74}, -{84,-30,75}, -{84,-30,76}, -{84,-30,77}, -{84,-30,78}, -{84,-30,79}, -{84,-30,80}, -{84,-30,81}, -{84,-30,82}, -{84,-30,83}, -{84,-29,-24}, -{84,-29,-23}, -{84,-29,-22}, -{84,-29,-21}, -{84,-29,-20}, -{84,-29,-19}, -{84,-29,-18}, -{84,-29,-17}, -{84,-29,-16}, -{84,-29,-15}, -{84,-29,-14}, -{84,-29,-13}, -{84,-29,-12}, -{84,-29,-11}, -{84,-29,-10}, -{84,-29,-9}, -{84,-29,-8}, -{84,-29,-7}, -{84,-29,-6}, -{84,-29,-5}, -{84,-29,-4}, -{84,-29,-3}, -{84,-29,-2}, -{84,-29,-1}, -{84,-29,0}, -{84,-29,1}, -{84,-29,2}, -{84,-29,3}, -{84,-29,4}, -{84,-29,5}, -{84,-29,6}, -{84,-29,7}, -{84,-29,8}, -{84,-29,9}, -{84,-29,10}, -{84,-29,11}, -{84,-29,12}, -{84,-29,13}, -{84,-29,14}, -{84,-29,15}, -{84,-29,16}, -{84,-29,17}, -{84,-29,18}, -{84,-29,19}, -{84,-29,20}, -{84,-29,21}, -{84,-29,22}, -{84,-29,23}, -{84,-29,24}, -{84,-29,25}, -{84,-29,26}, -{84,-29,27}, -{84,-29,28}, -{84,-29,29}, -{84,-29,30}, -{84,-29,31}, -{84,-29,32}, -{84,-29,33}, -{84,-29,34}, -{84,-29,35}, -{84,-29,36}, -{84,-29,37}, -{84,-29,38}, -{84,-29,39}, -{84,-29,40}, -{84,-29,41}, -{84,-29,42}, -{84,-29,43}, -{84,-29,44}, -{84,-29,45}, -{84,-29,46}, -{84,-29,47}, -{84,-29,48}, -{84,-29,49}, -{84,-29,50}, -{84,-29,51}, -{84,-29,52}, -{84,-29,53}, -{84,-29,54}, -{84,-29,55}, -{84,-29,56}, -{84,-29,57}, -{84,-29,58}, -{84,-29,59}, -{84,-29,60}, -{84,-29,61}, -{84,-29,62}, -{84,-29,63}, -{84,-29,64}, -{84,-29,65}, -{84,-29,66}, -{84,-29,67}, -{84,-29,68}, -{84,-29,69}, -{84,-29,70}, -{84,-29,71}, -{84,-29,72}, -{84,-29,73}, -{84,-29,74}, -{84,-29,75}, -{84,-29,76}, -{84,-29,77}, -{84,-29,78}, -{84,-29,79}, -{84,-29,80}, -{84,-29,81}, -{84,-29,82}, -{84,-29,83}, -{84,-28,-24}, -{84,-28,-23}, -{84,-28,-22}, -{84,-28,-21}, -{84,-28,-20}, -{84,-28,-19}, -{84,-28,-18}, -{84,-28,-17}, -{84,-28,-16}, -{84,-28,-15}, -{84,-28,-14}, -{84,-28,-13}, -{84,-28,-12}, -{84,-28,-11}, -{84,-28,-10}, -{84,-28,-9}, -{84,-28,-8}, -{84,-28,-7}, -{84,-28,-6}, -{84,-28,-5}, -{84,-28,-4}, -{84,-28,-3}, -{84,-28,-2}, -{84,-28,-1}, -{84,-28,0}, -{84,-28,1}, -{84,-28,2}, -{84,-28,3}, -{84,-28,4}, -{84,-28,5}, -{84,-28,6}, -{84,-28,7}, -{84,-28,8}, -{84,-28,9}, -{84,-28,10}, -{84,-28,11}, -{84,-28,12}, -{84,-28,13}, -{84,-28,14}, -{84,-28,15}, -{84,-28,16}, -{84,-28,17}, -{84,-28,18}, -{84,-28,19}, -{84,-28,20}, -{84,-28,21}, -{84,-28,22}, -{84,-28,23}, -{84,-28,24}, -{84,-28,25}, -{84,-28,26}, -{84,-28,27}, -{84,-28,28}, -{84,-28,29}, -{84,-28,30}, -{84,-28,31}, -{84,-28,32}, -{84,-28,33}, -{84,-28,34}, -{84,-28,35}, -{84,-28,36}, -{84,-28,37}, -{84,-28,38}, -{84,-28,39}, -{84,-28,40}, -{84,-28,41}, -{84,-28,42}, -{84,-28,43}, -{84,-28,44}, -{84,-28,45}, -{84,-28,46}, -{84,-28,47}, -{84,-28,48}, -{84,-28,49}, -{84,-28,50}, -{84,-28,51}, -{84,-28,52}, -{84,-28,53}, -{84,-28,54}, -{84,-28,55}, -{84,-28,56}, -{84,-28,57}, -{84,-28,58}, -{84,-28,59}, -{84,-28,60}, -{84,-28,61}, -{84,-28,62}, -{84,-28,63}, -{84,-28,64}, -{84,-28,65}, -{84,-28,66}, -{84,-28,67}, -{84,-28,68}, -{84,-28,69}, -{84,-28,70}, -{84,-28,71}, -{84,-28,72}, -{84,-28,73}, -{84,-28,74}, -{84,-28,75}, -{84,-28,76}, -{84,-28,77}, -{84,-28,78}, -{84,-28,79}, -{84,-28,80}, -{84,-28,81}, -{84,-28,82}, -{84,-28,83}, -{84,-27,-24}, -{84,-27,-23}, -{84,-27,-22}, -{84,-27,-21}, -{84,-27,-20}, -{84,-27,-19}, -{84,-27,-18}, -{84,-27,-17}, -{84,-27,-16}, -{84,-27,-15}, -{84,-27,-14}, -{84,-27,-13}, -{84,-27,-12}, -{84,-27,-11}, -{84,-27,-10}, -{84,-27,-9}, -{84,-27,-8}, -{84,-27,-7}, -{84,-27,-6}, -{84,-27,-5}, -{84,-27,-4}, -{84,-27,-3}, -{84,-27,-2}, -{84,-27,-1}, -{84,-27,0}, -{84,-27,1}, -{84,-27,2}, -{84,-27,3}, -{84,-27,4}, -{84,-27,5}, -{84,-27,6}, -{84,-27,7}, -{84,-27,8}, -{84,-27,9}, -{84,-27,10}, -{84,-27,11}, -{84,-27,12}, -{84,-27,13}, -{84,-27,14}, -{84,-27,15}, -{84,-27,16}, -{84,-27,17}, -{84,-27,18}, -{84,-27,19}, -{84,-27,20}, -{84,-27,21}, -{84,-27,22}, -{84,-27,23}, -{84,-27,24}, -{84,-27,25}, -{84,-27,26}, -{84,-27,27}, -{84,-27,28}, -{84,-27,29}, -{84,-27,30}, -{84,-27,31}, -{84,-27,32}, -{84,-27,33}, -{84,-27,34}, -{84,-27,35}, -{84,-27,36}, -{84,-27,37}, -{84,-27,38}, -{84,-27,39}, -{84,-27,40}, -{84,-27,41}, -{84,-27,42}, -{84,-27,43}, -{84,-27,44}, -{84,-27,45}, -{84,-27,46}, -{84,-27,47}, -{84,-27,48}, -{84,-27,49}, -{84,-27,50}, -{84,-27,51}, -{84,-27,52}, -{84,-27,53}, -{84,-27,54}, -{84,-27,55}, -{84,-27,56}, -{84,-27,57}, -{84,-27,58}, -{84,-27,59}, -{84,-27,60}, -{84,-27,61}, -{84,-27,62}, -{84,-27,63}, -{84,-27,64}, -{84,-27,65}, -{84,-27,66}, -{84,-27,67}, -{84,-27,68}, -{84,-27,69}, -{84,-27,70}, -{84,-27,71}, -{84,-27,72}, -{84,-27,73}, -{84,-27,74}, -{84,-27,75}, -{84,-27,76}, -{84,-27,77}, -{84,-27,78}, -{84,-27,79}, -{84,-27,80}, -{84,-27,81}, -{84,-27,82}, -{84,-27,83}, -{84,-26,-24}, -{84,-26,-23}, -{84,-26,-22}, -{84,-26,-21}, -{84,-26,-20}, -{84,-26,-19}, -{84,-26,-18}, -{84,-26,-17}, -{84,-26,-16}, -{84,-26,-15}, -{84,-26,-14}, -{84,-26,-13}, -{84,-26,-12}, -{84,-26,-11}, -{84,-26,-10}, -{84,-26,-9}, -{84,-26,-8}, -{84,-26,-7}, -{84,-26,-6}, -{84,-26,-5}, -{84,-26,-4}, -{84,-26,-3}, -{84,-26,-2}, -{84,-26,-1}, -{84,-26,0}, -{84,-26,1}, -{84,-26,2}, -{84,-26,3}, -{84,-26,4}, -{84,-26,5}, -{84,-26,6}, -{84,-26,7}, -{84,-26,8}, -{84,-26,9}, -{84,-26,10}, -{84,-26,11}, -{84,-26,12}, -{84,-26,13}, -{84,-26,14}, -{84,-26,15}, -{84,-26,16}, -{84,-26,17}, -{84,-26,18}, -{84,-26,19}, -{84,-26,20}, -{84,-26,21}, -{84,-26,22}, -{84,-26,23}, -{84,-26,24}, -{84,-26,25}, -{84,-26,26}, -{84,-26,27}, -{84,-26,28}, -{84,-26,29}, -{84,-26,30}, -{84,-26,31}, -{84,-26,32}, -{84,-26,33}, -{84,-26,34}, -{84,-26,35}, -{84,-26,36}, -{84,-26,37}, -{84,-26,38}, -{84,-26,39}, -{84,-26,40}, -{84,-26,41}, -{84,-26,42}, -{84,-26,43}, -{84,-26,44}, -{84,-26,45}, -{84,-26,46}, -{84,-26,47}, -{84,-26,48}, -{84,-26,49}, -{84,-26,50}, -{84,-26,51}, -{84,-26,52}, -{84,-26,53}, -{84,-26,54}, -{84,-26,55}, -{84,-26,56}, -{84,-26,57}, -{84,-26,58}, -{84,-26,59}, -{84,-26,60}, -{84,-26,61}, -{84,-26,62}, -{84,-26,63}, -{84,-26,64}, -{84,-26,65}, -{84,-26,66}, -{84,-26,67}, -{84,-26,68}, -{84,-26,69}, -{84,-26,70}, -{84,-26,71}, -{84,-26,72}, -{84,-26,73}, -{84,-26,74}, -{84,-26,75}, -{84,-26,76}, -{84,-26,77}, -{84,-26,78}, -{84,-26,79}, -{84,-26,80}, -{84,-26,81}, -{84,-26,82}, -{84,-26,83}, -{84,-25,-24}, -{84,-25,-23}, -{84,-25,-22}, -{84,-25,-21}, -{84,-25,-20}, -{84,-25,-19}, -{84,-25,-18}, -{84,-25,-17}, -{84,-25,-16}, -{84,-25,-15}, -{84,-25,-14}, -{84,-25,-13}, -{84,-25,-12}, -{84,-25,-11}, -{84,-25,-10}, -{84,-25,-9}, -{84,-25,-8}, -{84,-25,-7}, -{84,-25,-6}, -{84,-25,-5}, -{84,-25,-4}, -{84,-25,-3}, -{84,-25,-2}, -{84,-25,-1}, -{84,-25,0}, -{84,-25,1}, -{84,-25,2}, -{84,-25,3}, -{84,-25,4}, -{84,-25,5}, -{84,-25,6}, -{84,-25,7}, -{84,-25,8}, -{84,-25,9}, -{84,-25,10}, -{84,-25,11}, -{84,-25,12}, -{84,-25,13}, -{84,-25,14}, -{84,-25,15}, -{84,-25,16}, -{84,-25,17}, -{84,-25,18}, -{84,-25,19}, -{84,-25,20}, -{84,-25,21}, -{84,-25,22}, -{84,-25,23}, -{84,-25,24}, -{84,-25,25}, -{84,-25,26}, -{84,-25,27}, -{84,-25,28}, -{84,-25,29}, -{84,-25,30}, -{84,-25,31}, -{84,-25,32}, -{84,-25,33}, -{84,-25,34}, -{84,-25,35}, -{84,-25,36}, -{84,-25,37}, -{84,-25,38}, -{84,-25,39}, -{84,-25,40}, -{84,-25,41}, -{84,-25,42}, -{84,-25,43}, -{84,-25,44}, -{84,-25,45}, -{84,-25,46}, -{84,-25,47}, -{84,-25,48}, -{84,-25,49}, -{84,-25,50}, -{84,-25,51}, -{84,-25,52}, -{84,-25,53}, -{84,-25,54}, -{84,-25,55}, -{84,-25,56}, -{84,-25,57}, -{84,-25,58}, -{84,-25,59}, -{84,-25,60}, -{84,-25,61}, -{84,-25,62}, -{84,-25,63}, -{84,-25,64}, -{84,-25,65}, -{84,-25,66}, -{84,-25,67}, -{84,-25,68}, -{84,-25,69}, -{84,-25,70}, -{84,-25,71}, -{84,-25,72}, -{84,-25,73}, -{84,-25,74}, -{84,-25,75}, -{84,-25,76}, -{84,-25,77}, -{84,-25,78}, -{84,-25,79}, -{84,-25,80}, -{84,-25,81}, -{84,-25,82}, -{84,-25,83}, -{84,-24,-24}, -{84,-24,-23}, -{84,-24,-22}, -{84,-24,-21}, -{84,-24,-20}, -{84,-24,-19}, -{84,-24,-18}, -{84,-24,-17}, -{84,-24,-16}, -{84,-24,-15}, -{84,-24,-14}, -{84,-24,-13}, -{84,-24,-12}, -{84,-24,-11}, -{84,-24,-10}, -{84,-24,-9}, -{84,-24,-8}, -{84,-24,-7}, -{84,-24,-6}, -{84,-24,-5}, -{84,-24,-4}, -{84,-24,-3}, -{84,-24,-2}, -{84,-24,-1}, -{84,-24,0}, -{84,-24,1}, -{84,-24,2}, -{84,-24,3}, -{84,-24,4}, -{84,-24,5}, -{84,-24,6}, -{84,-24,7}, -{84,-24,8}, -{84,-24,9}, -{84,-24,10}, -{84,-24,11}, -{84,-24,12}, -{84,-24,13}, -{84,-24,14}, -{84,-24,15}, -{84,-24,16}, -{84,-24,17}, -{84,-24,18}, -{84,-24,19}, -{84,-24,20}, -{84,-24,21}, -{84,-24,22}, -{84,-24,23}, -{84,-24,24}, -{84,-24,25}, -{84,-24,26}, -{84,-24,27}, -{84,-24,28}, -{84,-24,29}, -{84,-24,30}, -{84,-24,31}, -{84,-24,32}, -{84,-24,33}, -{84,-24,34}, -{84,-24,35}, -{84,-24,36}, -{84,-24,37}, -{84,-24,38}, -{84,-24,39}, -{84,-24,40}, -{84,-24,41}, -{84,-24,42}, -{84,-24,43}, -{84,-24,44}, -{84,-24,45}, -{84,-24,46}, -{84,-24,47}, -{84,-24,48}, -{84,-24,49}, -{84,-24,50}, -{84,-24,51}, -{84,-24,52}, -{84,-24,53}, -{84,-24,54}, -{84,-24,55}, -{84,-24,56}, -{84,-24,57}, -{84,-24,58}, -{84,-24,59}, -{84,-24,60}, -{84,-24,61}, -{84,-24,62}, -{84,-24,63}, -{84,-24,64}, -{84,-24,65}, -{84,-24,66}, -{84,-24,67}, -{84,-24,68}, -{84,-24,69}, -{84,-24,70}, -{84,-24,71}, -{84,-24,72}, -{84,-24,73}, -{84,-24,74}, -{84,-24,75}, -{84,-24,76}, -{84,-24,77}, -{84,-24,78}, -{84,-24,79}, -{84,-24,80}, -{84,-24,81}, -{84,-24,82}, -{84,-24,83}, -{84,-23,-24}, -{84,-23,-23}, -{84,-23,-22}, -{84,-23,-21}, -{84,-23,-20}, -{84,-23,-19}, -{84,-23,-18}, -{84,-23,-17}, -{84,-23,-16}, -{84,-23,-15}, -{84,-23,-14}, -{84,-23,-13}, -{84,-23,-12}, -{84,-23,-11}, -{84,-23,-10}, -{84,-23,-9}, -{84,-23,-8}, -{84,-23,-7}, -{84,-23,-6}, -{84,-23,-5}, -{84,-23,-4}, -{84,-23,-3}, -{84,-23,-2}, -{84,-23,-1}, -{84,-23,0}, -{84,-23,1}, -{84,-23,2}, -{84,-23,3}, -{84,-23,4}, -{84,-23,5}, -{84,-23,6}, -{84,-23,7}, -{84,-23,8}, -{84,-23,9}, -{84,-23,10}, -{84,-23,11}, -{84,-23,12}, -{84,-23,13}, -{84,-23,14}, -{84,-23,15}, -{84,-23,16}, -{84,-23,17}, -{84,-23,18}, -{84,-23,19}, -{84,-23,20}, -{84,-23,21}, -{84,-23,22}, -{84,-23,23}, -{84,-23,24}, -{84,-23,25}, -{84,-23,26}, -{84,-23,27}, -{84,-23,28}, -{84,-23,29}, -{84,-23,30}, -{84,-23,31}, -{84,-23,32}, -{84,-23,33}, -{84,-23,34}, -{84,-23,35}, -{84,-23,36}, -{84,-23,37}, -{84,-23,38}, -{84,-23,39}, -{84,-23,40}, -{84,-23,41}, -{84,-23,42}, -{84,-23,43}, -{84,-23,44}, -{84,-23,45}, -{84,-23,46}, -{84,-23,47}, -{84,-23,48}, -{84,-23,49}, -{84,-23,50}, -{84,-23,51}, -{84,-23,52}, -{84,-23,53}, -{84,-23,54}, -{84,-23,55}, -{84,-23,56}, -{84,-23,57}, -{84,-23,58}, -{84,-23,59}, -{84,-23,60}, -{84,-23,61}, -{84,-23,62}, -{84,-23,63}, -{84,-23,64}, -{84,-23,65}, -{84,-23,66}, -{84,-23,67}, -{84,-23,68}, -{84,-23,69}, -{84,-23,70}, -{84,-23,71}, -{84,-23,72}, -{84,-23,73}, -{84,-23,74}, -{84,-23,75}, -{84,-23,76}, -{84,-23,77}, -{84,-23,78}, -{84,-23,79}, -{84,-23,80}, -{84,-23,81}, -{84,-23,82}, -{84,-23,83}, -{84,-22,-24}, -{84,-22,-23}, -{84,-22,-22}, -{84,-22,-21}, -{84,-22,-20}, -{84,-22,-19}, -{84,-22,-18}, -{84,-22,-17}, -{84,-22,-16}, -{84,-22,-15}, -{84,-22,-14}, -{84,-22,-13}, -{84,-22,-12}, -{84,-22,-11}, -{84,-22,-10}, -{84,-22,-9}, -{84,-22,-8}, -{84,-22,-7}, -{84,-22,-6}, -{84,-22,-5}, -{84,-22,-4}, -{84,-22,-3}, -{84,-22,-2}, -{84,-22,-1}, -{84,-22,0}, -{84,-22,1}, -{84,-22,2}, -{84,-22,3}, -{84,-22,4}, -{84,-22,5}, -{84,-22,6}, -{84,-22,7}, -{84,-22,8}, -{84,-22,9}, -{84,-22,10}, -{84,-22,11}, -{84,-22,12}, -{84,-22,13}, -{84,-22,14}, -{84,-22,15}, -{84,-22,16}, -{84,-22,17}, -{84,-22,18}, -{84,-22,19}, -{84,-22,20}, -{84,-22,21}, -{84,-22,22}, -{84,-22,23}, -{84,-22,24}, -{84,-22,25}, -{84,-22,26}, -{84,-22,27}, -{84,-22,28}, -{84,-22,29}, -{84,-22,30}, -{84,-22,31}, -{84,-22,32}, -{84,-22,33}, -{84,-22,34}, -{84,-22,35}, -{84,-22,36}, -{84,-22,37}, -{84,-22,38}, -{84,-22,39}, -{84,-22,40}, -{84,-22,41}, -{84,-22,42}, -{84,-22,43}, -{84,-22,44}, -{84,-22,45}, -{84,-22,46}, -{84,-22,47}, -{84,-22,48}, -{84,-22,49}, -{84,-22,50}, -{84,-22,51}, -{84,-22,52}, -{84,-22,53}, -{84,-22,54}, -{84,-22,55}, -{84,-22,56}, -{84,-22,57}, -{84,-22,58}, -{84,-22,59}, -{84,-22,60}, -{84,-22,61}, -{84,-22,62}, -{84,-22,63}, -{84,-22,64}, -{84,-22,65}, -{84,-22,66}, -{84,-22,67}, -{84,-22,68}, -{84,-22,69}, -{84,-22,70}, -{84,-22,71}, -{84,-22,72}, -{84,-22,73}, -{84,-22,74}, -{84,-22,75}, -{84,-22,76}, -{84,-22,77}, -{84,-22,78}, -{84,-22,79}, -{84,-22,80}, -{84,-22,81}, -{84,-22,82}, -{84,-22,83}, -{84,-21,-24}, -{84,-21,-23}, -{84,-21,-22}, -{84,-21,-21}, -{84,-21,-20}, -{84,-21,-19}, -{84,-21,-18}, -{84,-21,-17}, -{84,-21,-16}, -{84,-21,-15}, -{84,-21,-14}, -{84,-21,-13}, -{84,-21,-12}, -{84,-21,-11}, -{84,-21,-10}, -{84,-21,-9}, -{84,-21,-8}, -{84,-21,-7}, -{84,-21,-6}, -{84,-21,-5}, -{84,-21,-4}, -{84,-21,-3}, -{84,-21,-2}, -{84,-21,-1}, -{84,-21,0}, -{84,-21,1}, -{84,-21,2}, -{84,-21,3}, -{84,-21,4}, -{84,-21,5}, -{84,-21,6}, -{84,-21,7}, -{84,-21,8}, -{84,-21,9}, -{84,-21,10}, -{84,-21,11}, -{84,-21,12}, -{84,-21,13}, -{84,-21,14}, -{84,-21,15}, -{84,-21,16}, -{84,-21,17}, -{84,-21,18}, -{84,-21,19}, -{84,-21,20}, -{84,-21,21}, -{84,-21,22}, -{84,-21,23}, -{84,-21,24}, -{84,-21,25}, -{84,-21,26}, -{84,-21,27}, -{84,-21,28}, -{84,-21,29}, -{84,-21,30}, -{84,-21,31}, -{84,-21,32}, -{84,-21,33}, -{84,-21,34}, -{84,-21,35}, -{84,-21,36}, -{84,-21,37}, -{84,-21,38}, -{84,-21,39}, -{84,-21,40}, -{84,-21,41}, -{84,-21,42}, -{84,-21,43}, -{84,-21,44}, -{84,-21,45}, -{84,-21,46}, -{84,-21,47}, -{84,-21,48}, -{84,-21,49}, -{84,-21,50}, -{84,-21,51}, -{84,-21,52}, -{84,-21,53}, -{84,-21,54}, -{84,-21,55}, -{84,-21,56}, -{84,-21,57}, -{84,-21,58}, -{84,-21,59}, -{84,-21,60}, -{84,-21,61}, -{84,-21,62}, -{84,-21,63}, -{84,-21,64}, -{84,-21,65}, -{84,-21,66}, -{84,-21,67}, -{84,-21,68}, -{84,-21,69}, -{84,-21,70}, -{84,-21,71}, -{84,-21,72}, -{84,-21,73}, -{84,-21,74}, -{84,-21,75}, -{84,-21,76}, -{84,-21,77}, -{84,-21,78}, -{84,-21,79}, -{84,-21,80}, -{84,-21,81}, -{84,-21,82}, -{84,-21,83}, -{84,-20,-24}, -{84,-20,-23}, -{84,-20,-22}, -{84,-20,-21}, -{84,-20,-20}, -{84,-20,-19}, -{84,-20,-18}, -{84,-20,-17}, -{84,-20,-16}, -{84,-20,-15}, -{84,-20,-14}, -{84,-20,-13}, -{84,-20,-12}, -{84,-20,-11}, -{84,-20,-10}, -{84,-20,-9}, -{84,-20,-8}, -{84,-20,-7}, -{84,-20,-6}, -{84,-20,-5}, -{84,-20,-4}, -{84,-20,-3}, -{84,-20,-2}, -{84,-20,-1}, -{84,-20,0}, -{84,-20,1}, -{84,-20,2}, -{84,-20,3}, -{84,-20,4}, -{84,-20,5}, -{84,-20,6}, -{84,-20,7}, -{84,-20,8}, -{84,-20,9}, -{84,-20,10}, -{84,-20,11}, -{84,-20,12}, -{84,-20,13}, -{84,-20,14}, -{84,-20,15}, -{84,-20,16}, -{84,-20,17}, -{84,-20,18}, -{84,-20,19}, -{84,-20,20}, -{84,-20,21}, -{84,-20,22}, -{84,-20,23}, -{84,-20,24}, -{84,-20,25}, -{84,-20,26}, -{84,-20,27}, -{84,-20,28}, -{84,-20,29}, -{84,-20,30}, -{84,-20,31}, -{84,-20,32}, -{84,-20,33}, -{84,-20,34}, -{84,-20,35}, -{84,-20,36}, -{84,-20,37}, -{84,-20,38}, -{84,-20,39}, -{84,-20,40}, -{84,-20,41}, -{84,-20,42}, -{84,-20,43}, -{84,-20,44}, -{84,-20,45}, -{84,-20,46}, -{84,-20,47}, -{84,-20,48}, -{84,-20,49}, -{84,-20,50}, -{84,-20,51}, -{84,-20,52}, -{84,-20,53}, -{84,-20,54}, -{84,-20,55}, -{84,-20,56}, -{84,-20,57}, -{84,-20,58}, -{84,-20,59}, -{84,-20,60}, -{84,-20,61}, -{84,-20,62}, -{84,-20,63}, -{84,-20,64}, -{84,-20,65}, -{84,-20,66}, -{84,-20,67}, -{84,-20,68}, -{84,-20,69}, -{84,-20,70}, -{84,-20,71}, -{84,-20,72}, -{84,-20,73}, -{84,-20,74}, -{84,-20,75}, -{84,-20,76}, -{84,-20,77}, -{84,-20,78}, -{84,-20,79}, -{84,-20,80}, -{84,-20,81}, -{84,-20,82}, -{84,-20,83}, -{84,-19,-24}, -{84,-19,-23}, -{84,-19,-22}, -{84,-19,-21}, -{84,-19,-20}, -{84,-19,-19}, -{84,-19,-18}, -{84,-19,-17}, -{84,-19,-16}, -{84,-19,-15}, -{84,-19,-14}, -{84,-19,-13}, -{84,-19,-12}, -{84,-19,-11}, -{84,-19,-10}, -{84,-19,-9}, -{84,-19,-8}, -{84,-19,-7}, -{84,-19,-6}, -{84,-19,-5}, -{84,-19,-4}, -{84,-19,-3}, -{84,-19,-2}, -{84,-19,-1}, -{84,-19,0}, -{84,-19,1}, -{84,-19,2}, -{84,-19,3}, -{84,-19,4}, -{84,-19,5}, -{84,-19,6}, -{84,-19,7}, -{84,-19,8}, -{84,-19,9}, -{84,-19,10}, -{84,-19,11}, -{84,-19,12}, -{84,-19,13}, -{84,-19,14}, -{84,-19,15}, -{84,-19,16}, -{84,-19,17}, -{84,-19,18}, -{84,-19,19}, -{84,-19,20}, -{84,-19,21}, -{84,-19,22}, -{84,-19,23}, -{84,-19,24}, -{84,-19,25}, -{84,-19,26}, -{84,-19,27}, -{84,-19,28}, -{84,-19,29}, -{84,-19,30}, -{84,-19,31}, -{84,-19,32}, -{84,-19,33}, -{84,-19,34}, -{84,-19,35}, -{84,-19,36}, -{84,-19,37}, -{84,-19,38}, -{84,-19,39}, -{84,-19,40}, -{84,-19,41}, -{84,-19,42}, -{84,-19,43}, -{84,-19,44}, -{84,-19,45}, -{84,-19,46}, -{84,-19,47}, -{84,-19,48}, -{84,-19,49}, -{84,-19,50}, -{84,-19,51}, -{84,-19,52}, -{84,-19,53}, -{84,-19,54}, -{84,-19,55}, -{84,-19,56}, -{84,-19,57}, -{84,-19,58}, -{84,-19,59}, -{84,-19,60}, -{84,-19,61}, -{84,-19,62}, -{84,-19,63}, -{84,-19,64}, -{84,-19,65}, -{84,-19,66}, -{84,-19,67}, -{84,-19,68}, -{84,-19,69}, -{84,-19,70}, -{84,-19,71}, -{84,-19,72}, -{84,-19,73}, -{84,-19,74}, -{84,-19,75}, -{84,-19,76}, -{84,-19,77}, -{84,-19,78}, -{84,-19,79}, -{84,-19,80}, -{84,-19,81}, -{84,-19,82}, -{84,-19,83}, -{84,-18,-24}, -{84,-18,-23}, -{84,-18,-22}, -{84,-18,-21}, -{84,-18,-20}, -{84,-18,-19}, -{84,-18,-18}, -{84,-18,-17}, -{84,-18,-16}, -{84,-18,-15}, -{84,-18,-14}, -{84,-18,-13}, -{84,-18,-12}, -{84,-18,-11}, -{84,-18,-10}, -{84,-18,-9}, -{84,-18,-8}, -{84,-18,-7}, -{84,-18,-6}, -{84,-18,-5}, -{84,-18,-4}, -{84,-18,-3}, -{84,-18,-2}, -{84,-18,-1}, -{84,-18,0}, -{84,-18,1}, -{84,-18,2}, -{84,-18,3}, -{84,-18,4}, -{84,-18,5}, -{84,-18,6}, -{84,-18,7}, -{84,-18,8}, -{84,-18,9}, -{84,-18,10}, -{84,-18,11}, -{84,-18,12}, -{84,-18,13}, -{84,-18,14}, -{84,-18,15}, -{84,-18,16}, -{84,-18,17}, -{84,-18,18}, -{84,-18,19}, -{84,-18,20}, -{84,-18,21}, -{84,-18,22}, -{84,-18,23}, -{84,-18,24}, -{84,-18,25}, -{84,-18,26}, -{84,-18,27}, -{84,-18,28}, -{84,-18,29}, -{84,-18,30}, -{84,-18,31}, -{84,-18,32}, -{84,-18,33}, -{84,-18,34}, -{84,-18,35}, -{84,-18,36}, -{84,-18,37}, -{84,-18,38}, -{84,-18,39}, -{84,-18,40}, -{84,-18,41}, -{84,-18,42}, -{84,-18,43}, -{84,-18,44}, -{84,-18,45}, -{84,-18,46}, -{84,-18,47}, -{84,-18,48}, -{84,-18,49}, -{84,-18,50}, -{84,-18,51}, -{84,-18,52}, -{84,-18,53}, -{84,-18,54}, -{84,-18,55}, -{84,-18,56}, -{84,-18,57}, -{84,-18,58}, -{84,-18,59}, -{84,-18,60}, -{84,-18,61}, -{84,-18,62}, -{84,-18,63}, -{84,-18,64}, -{84,-18,65}, -{84,-18,66}, -{84,-18,67}, -{84,-18,68}, -{84,-18,69}, -{84,-18,70}, -{84,-18,71}, -{84,-18,72}, -{84,-18,73}, -{84,-18,74}, -{84,-18,75}, -{84,-18,76}, -{84,-18,77}, -{84,-18,78}, -{84,-18,79}, -{84,-18,80}, -{84,-18,81}, -{84,-18,82}, -{84,-18,83}, -{84,-17,-24}, -{84,-17,-23}, -{84,-17,-22}, -{84,-17,-21}, -{84,-17,-20}, -{84,-17,-19}, -{84,-17,-18}, -{84,-17,-17}, -{84,-17,-16}, -{84,-17,-15}, -{84,-17,-14}, -{84,-17,-13}, -{84,-17,-12}, -{84,-17,-11}, -{84,-17,-10}, -{84,-17,-9}, -{84,-17,-8}, -{84,-17,-7}, -{84,-17,-6}, -{84,-17,-5}, -{84,-17,-4}, -{84,-17,-3}, -{84,-17,-2}, -{84,-17,-1}, -{84,-17,0}, -{84,-17,1}, -{84,-17,2}, -{84,-17,3}, -{84,-17,4}, -{84,-17,5}, -{84,-17,6}, -{84,-17,7}, -{84,-17,8}, -{84,-17,9}, -{84,-17,10}, -{84,-17,11}, -{84,-17,12}, -{84,-17,13}, -{84,-17,14}, -{84,-17,15}, -{84,-17,16}, -{84,-17,17}, -{84,-17,18}, -{84,-17,19}, -{84,-17,20}, -{84,-17,21}, -{84,-17,22}, -{84,-17,23}, -{84,-17,24}, -{84,-17,25}, -{84,-17,26}, -{84,-17,27}, -{84,-17,28}, -{84,-17,29}, -{84,-17,30}, -{84,-17,31}, -{84,-17,32}, -{84,-17,33}, -{84,-17,34}, -{84,-17,35}, -{84,-17,36}, -{84,-17,37}, -{84,-17,38}, -{84,-17,39}, -{84,-17,40}, -{84,-17,41}, -{84,-17,42}, -{84,-17,43}, -{84,-17,44}, -{84,-17,45}, -{84,-17,46}, -{84,-17,47}, -{84,-17,48}, -{84,-17,49}, -{84,-17,50}, -{84,-17,51}, -{84,-17,52}, -{84,-17,53}, -{84,-17,54}, -{84,-17,55}, -{84,-17,56}, -{84,-17,57}, -{84,-17,58}, -{84,-17,59}, -{84,-17,60}, -{84,-17,61}, -{84,-17,62}, -{84,-17,63}, -{84,-17,64}, -{84,-17,65}, -{84,-17,66}, -{84,-17,67}, -{84,-17,68}, -{84,-17,69}, -{84,-17,70}, -{84,-17,71}, -{84,-17,72}, -{84,-17,73}, -{84,-17,74}, -{84,-17,75}, -{84,-17,76}, -{84,-17,77}, -{84,-17,78}, -{84,-17,79}, -{84,-17,80}, -{84,-17,81}, -{84,-17,82}, -{84,-17,83}, -{84,-16,-24}, -{84,-16,-23}, -{84,-16,-22}, -{84,-16,-21}, -{84,-16,-20}, -{84,-16,-19}, -{84,-16,-18}, -{84,-16,-17}, -{84,-16,-16}, -{84,-16,-15}, -{84,-16,-14}, -{84,-16,-13}, -{84,-16,-12}, -{84,-16,-11}, -{84,-16,-10}, -{84,-16,-9}, -{84,-16,-8}, -{84,-16,-7}, -{84,-16,-6}, -{84,-16,-5}, -{84,-16,-4}, -{84,-16,-3}, -{84,-16,-2}, -{84,-16,-1}, -{84,-16,0}, -{84,-16,1}, -{84,-16,2}, -{84,-16,3}, -{84,-16,4}, -{84,-16,5}, -{84,-16,6}, -{84,-16,7}, -{84,-16,8}, -{84,-16,9}, -{84,-16,10}, -{84,-16,11}, -{84,-16,12}, -{84,-16,13}, -{84,-16,14}, -{84,-16,15}, -{84,-16,16}, -{84,-16,17}, -{84,-16,18}, -{84,-16,19}, -{84,-16,20}, -{84,-16,21}, -{84,-16,22}, -{84,-16,23}, -{84,-16,24}, -{84,-16,25}, -{84,-16,26}, -{84,-16,27}, -{84,-16,28}, -{84,-16,29}, -{84,-16,30}, -{84,-16,31}, -{84,-16,32}, -{84,-16,33}, -{84,-16,34}, -{84,-16,35}, -{84,-16,36}, -{84,-16,37}, -{84,-16,38}, -{84,-16,39}, -{84,-16,40}, -{84,-16,41}, -{84,-16,42}, -{84,-16,43}, -{84,-16,44}, -{84,-16,45}, -{84,-16,46}, -{84,-16,47}, -{84,-16,48}, -{84,-16,49}, -{84,-16,50}, -{84,-16,51}, -{84,-16,52}, -{84,-16,53}, -{84,-16,54}, -{84,-16,55}, -{84,-16,56}, -{84,-16,57}, -{84,-16,58}, -{84,-16,59}, -{84,-16,60}, -{84,-16,61}, -{84,-16,62}, -{84,-16,63}, -{84,-16,64}, -{84,-16,65}, -{84,-16,66}, -{84,-16,67}, -{84,-16,68}, -{84,-16,69}, -{84,-16,70}, -{84,-16,71}, -{84,-16,72}, -{84,-16,73}, -{84,-16,74}, -{84,-16,75}, -{84,-16,76}, -{84,-16,77}, -{84,-16,78}, -{84,-16,79}, -{84,-16,80}, -{84,-16,81}, -{84,-16,82}, -{84,-16,83}, -{84,-15,-24}, -{84,-15,-23}, -{84,-15,-22}, -{84,-15,-21}, -{84,-15,-20}, -{84,-15,-19}, -{84,-15,-18}, -{84,-15,-17}, -{84,-15,-16}, -{84,-15,-15}, -{84,-15,-14}, -{84,-15,-13}, -{84,-15,-12}, -{84,-15,-11}, -{84,-15,-10}, -{84,-15,-9}, -{84,-15,-8}, -{84,-15,-7}, -{84,-15,-6}, -{84,-15,-5}, -{84,-15,-4}, -{84,-15,-3}, -{84,-15,-2}, -{84,-15,-1}, -{84,-15,0}, -{84,-15,1}, -{84,-15,2}, -{84,-15,3}, -{84,-15,4}, -{84,-15,5}, -{84,-15,6}, -{84,-15,7}, -{84,-15,8}, -{84,-15,9}, -{84,-15,10}, -{84,-15,11}, -{84,-15,12}, -{84,-15,13}, -{84,-15,14}, -{84,-15,15}, -{84,-15,16}, -{84,-15,17}, -{84,-15,18}, -{84,-15,19}, -{84,-15,20}, -{84,-15,21}, -{84,-15,22}, -{84,-15,23}, -{84,-15,24}, -{84,-15,25}, -{84,-15,26}, -{84,-15,27}, -{84,-15,28}, -{84,-15,29}, -{84,-15,30}, -{84,-15,31}, -{84,-15,32}, -{84,-15,33}, -{84,-15,34}, -{84,-15,35}, -{84,-15,36}, -{84,-15,37}, -{84,-15,38}, -{84,-15,39}, -{84,-15,40}, -{84,-15,41}, -{84,-15,42}, -{84,-15,43}, -{84,-15,44}, -{84,-15,45}, -{84,-15,46}, -{84,-15,47}, -{84,-15,48}, -{84,-15,49}, -{84,-15,50}, -{84,-15,51}, -{84,-15,52}, -{84,-15,53}, -{84,-15,54}, -{84,-15,55}, -{84,-15,56}, -{84,-15,57}, -{84,-15,58}, -{84,-15,59}, -{84,-15,60}, -{84,-15,61}, -{84,-15,62}, -{84,-15,63}, -{84,-15,64}, -{84,-15,65}, -{84,-15,66}, -{84,-15,67}, -{84,-15,68}, -{84,-15,69}, -{84,-15,70}, -{84,-15,71}, -{84,-15,72}, -{84,-15,73}, -{84,-15,74}, -{84,-15,75}, -{84,-15,76}, -{84,-15,77}, -{84,-15,78}, -{84,-15,79}, -{84,-15,80}, -{84,-15,81}, -{84,-15,82}, -{84,-15,83}, -{84,-14,-24}, -{84,-14,-23}, -{84,-14,-22}, -{84,-14,-21}, -{84,-14,-20}, -{84,-14,-19}, -{84,-14,-18}, -{84,-14,-17}, -{84,-14,-16}, -{84,-14,-15}, -{84,-14,-14}, -{84,-14,-13}, -{84,-14,-12}, -{84,-14,-11}, -{84,-14,-10}, -{84,-14,-9}, -{84,-14,-8}, -{84,-14,-7}, -{84,-14,-6}, -{84,-14,-5}, -{84,-14,-4}, -{84,-14,-3}, -{84,-14,-2}, -{84,-14,-1}, -{84,-14,0}, -{84,-14,1}, -{84,-14,2}, -{84,-14,3}, -{84,-14,4}, -{84,-14,5}, -{84,-14,6}, -{84,-14,7}, -{84,-14,8}, -{84,-14,9}, -{84,-14,10}, -{84,-14,11}, -{84,-14,12}, -{84,-14,13}, -{84,-14,14}, -{84,-14,15}, -{84,-14,16}, -{84,-14,17}, -{84,-14,18}, -{84,-14,19}, -{84,-14,20}, -{84,-14,21}, -{84,-14,22}, -{84,-14,23}, -{84,-14,24}, -{84,-14,25}, -{84,-14,26}, -{84,-14,27}, -{84,-14,28}, -{84,-14,29}, -{84,-14,30}, -{84,-14,31}, -{84,-14,32}, -{84,-14,33}, -{84,-14,34}, -{84,-14,35}, -{84,-14,36}, -{84,-14,37}, -{84,-14,38}, -{84,-14,39}, -{84,-14,40}, -{84,-14,41}, -{84,-14,42}, -{84,-14,43}, -{84,-14,44}, -{84,-14,45}, -{84,-14,46}, -{84,-14,47}, -{84,-14,48}, -{84,-14,49}, -{84,-14,50}, -{84,-14,51}, -{84,-14,52}, -{84,-14,53}, -{84,-14,54}, -{84,-14,55}, -{84,-14,56}, -{84,-14,57}, -{84,-14,58}, -{84,-14,59}, -{84,-14,60}, -{84,-14,61}, -{84,-14,62}, -{84,-14,63}, -{84,-14,64}, -{84,-14,65}, -{84,-14,66}, -{84,-14,67}, -{84,-14,68}, -{84,-14,69}, -{84,-14,70}, -{84,-14,71}, -{84,-14,72}, -{84,-14,73}, -{84,-14,74}, -{84,-14,75}, -{84,-14,76}, -{84,-14,77}, -{84,-14,78}, -{84,-14,79}, -{84,-14,80}, -{84,-14,81}, -{84,-14,82}, -{84,-14,83}, -{84,-14,84}, -{84,-13,-24}, -{84,-13,-23}, -{84,-13,-22}, -{84,-13,-21}, -{84,-13,-20}, -{84,-13,-19}, -{84,-13,-18}, -{84,-13,-17}, -{84,-13,-16}, -{84,-13,-15}, -{84,-13,-14}, -{84,-13,-13}, -{84,-13,-12}, -{84,-13,-11}, -{84,-13,-10}, -{84,-13,-9}, -{84,-13,-8}, -{84,-13,-7}, -{84,-13,-6}, -{84,-13,-5}, -{84,-13,-4}, -{84,-13,-3}, -{84,-13,-2}, -{84,-13,-1}, -{84,-13,0}, -{84,-13,1}, -{84,-13,2}, -{84,-13,3}, -{84,-13,4}, -{84,-13,5}, -{84,-13,6}, -{84,-13,7}, -{84,-13,8}, -{84,-13,9}, -{84,-13,10}, -{84,-13,11}, -{84,-13,12}, -{84,-13,13}, -{84,-13,14}, -{84,-13,15}, -{84,-13,16}, -{84,-13,17}, -{84,-13,18}, -{84,-13,19}, -{84,-13,20}, -{84,-13,21}, -{84,-13,22}, -{84,-13,23}, -{84,-13,24}, -{84,-13,25}, -{84,-13,26}, -{84,-13,27}, -{84,-13,28}, -{84,-13,29}, -{84,-13,30}, -{84,-13,31}, -{84,-13,32}, -{84,-13,33}, -{84,-13,34}, -{84,-13,35}, -{84,-13,36}, -{84,-13,37}, -{84,-13,38}, -{84,-13,39}, -{84,-13,40}, -{84,-13,41}, -{84,-13,42}, -{84,-13,43}, -{84,-13,44}, -{84,-13,45}, -{84,-13,46}, -{84,-13,47}, -{84,-13,48}, -{84,-13,49}, -{84,-13,50}, -{84,-13,51}, -{84,-13,52}, -{84,-13,53}, -{84,-13,54}, -{84,-13,55}, -{84,-13,56}, -{84,-13,57}, -{84,-13,58}, -{84,-13,59}, -{84,-13,60}, -{84,-13,61}, -{84,-13,62}, -{84,-13,63}, -{84,-13,64}, -{84,-13,65}, -{84,-13,66}, -{84,-13,67}, -{84,-13,68}, -{84,-13,69}, -{84,-13,70}, -{84,-13,71}, -{84,-13,72}, -{84,-13,73}, -{84,-13,74}, -{84,-13,75}, -{84,-13,76}, -{84,-13,77}, -{84,-13,78}, -{84,-13,79}, -{84,-13,80}, -{84,-13,81}, -{84,-13,82}, -{84,-13,83}, -{84,-13,84}, -{84,-12,-24}, -{84,-12,-23}, -{84,-12,-22}, -{84,-12,-21}, -{84,-12,-20}, -{84,-12,-19}, -{84,-12,-18}, -{84,-12,-17}, -{84,-12,-16}, -{84,-12,-15}, -{84,-12,-14}, -{84,-12,-13}, -{84,-12,-12}, -{84,-12,-11}, -{84,-12,-10}, -{84,-12,-9}, -{84,-12,-8}, -{84,-12,-7}, -{84,-12,-6}, -{84,-12,-5}, -{84,-12,-4}, -{84,-12,-3}, -{84,-12,-2}, -{84,-12,-1}, -{84,-12,0}, -{84,-12,1}, -{84,-12,2}, -{84,-12,3}, -{84,-12,4}, -{84,-12,5}, -{84,-12,6}, -{84,-12,7}, -{84,-12,8}, -{84,-12,9}, -{84,-12,10}, -{84,-12,11}, -{84,-12,12}, -{84,-12,13}, -{84,-12,14}, -{84,-12,15}, -{84,-12,16}, -{84,-12,17}, -{84,-12,18}, -{84,-12,19}, -{84,-12,20}, -{84,-12,21}, -{84,-12,22}, -{84,-12,23}, -{84,-12,24}, -{84,-12,25}, -{84,-12,26}, -{84,-12,27}, -{84,-12,28}, -{84,-12,29}, -{84,-12,30}, -{84,-12,31}, -{84,-12,32}, -{84,-12,33}, -{84,-12,34}, -{84,-12,35}, -{84,-12,36}, -{84,-12,37}, -{84,-12,38}, -{84,-12,39}, -{84,-12,40}, -{84,-12,41}, -{84,-12,42}, -{84,-12,43}, -{84,-12,44}, -{84,-12,45}, -{84,-12,46}, -{84,-12,47}, -{84,-12,48}, -{84,-12,49}, -{84,-12,50}, -{84,-12,51}, -{84,-12,52}, -{84,-12,53}, -{84,-12,54}, -{84,-12,55}, -{84,-12,56}, -{84,-12,57}, -{84,-12,58}, -{84,-12,59}, -{84,-12,60}, -{84,-12,61}, -{84,-12,62}, -{84,-12,63}, -{84,-12,64}, -{84,-12,65}, -{84,-12,66}, -{84,-12,67}, -{84,-12,68}, -{84,-12,69}, -{84,-12,70}, -{84,-12,71}, -{84,-12,72}, -{84,-12,73}, -{84,-12,74}, -{84,-12,75}, -{84,-12,76}, -{84,-12,77}, -{84,-12,78}, -{84,-12,79}, -{84,-12,80}, -{84,-12,81}, -{84,-12,82}, -{84,-12,83}, -{84,-12,84}, -{84,-11,-24}, -{84,-11,-23}, -{84,-11,-22}, -{84,-11,-21}, -{84,-11,-20}, -{84,-11,-19}, -{84,-11,-18}, -{84,-11,-17}, -{84,-11,-16}, -{84,-11,-15}, -{84,-11,-14}, -{84,-11,-13}, -{84,-11,-12}, -{84,-11,-11}, -{84,-11,-10}, -{84,-11,-9}, -{84,-11,-8}, -{84,-11,-7}, -{84,-11,-6}, -{84,-11,-5}, -{84,-11,-4}, -{84,-11,-3}, -{84,-11,-2}, -{84,-11,-1}, -{84,-11,0}, -{84,-11,1}, -{84,-11,2}, -{84,-11,3}, -{84,-11,4}, -{84,-11,5}, -{84,-11,6}, -{84,-11,7}, -{84,-11,8}, -{84,-11,9}, -{84,-11,10}, -{84,-11,11}, -{84,-11,12}, -{84,-11,13}, -{84,-11,14}, -{84,-11,15}, -{84,-11,16}, -{84,-11,17}, -{84,-11,18}, -{84,-11,19}, -{84,-11,20}, -{84,-11,21}, -{84,-11,22}, -{84,-11,23}, -{84,-11,24}, -{84,-11,25}, -{84,-11,26}, -{84,-11,27}, -{84,-11,28}, -{84,-11,29}, -{84,-11,30}, -{84,-11,31}, -{84,-11,32}, -{84,-11,33}, -{84,-11,34}, -{84,-11,35}, -{84,-11,36}, -{84,-11,37}, -{84,-11,38}, -{84,-11,39}, -{84,-11,40}, -{84,-11,41}, -{84,-11,42}, -{84,-11,43}, -{84,-11,44}, -{84,-11,45}, -{84,-11,46}, -{84,-11,47}, -{84,-11,48}, -{84,-11,49}, -{84,-11,50}, -{84,-11,51}, -{84,-11,52}, -{84,-11,53}, -{84,-11,54}, -{84,-11,55}, -{84,-11,56}, -{84,-11,57}, -{84,-11,58}, -{84,-11,59}, -{84,-11,60}, -{84,-11,61}, -{84,-11,62}, -{84,-11,63}, -{84,-11,64}, -{84,-11,65}, -{84,-11,66}, -{84,-11,67}, -{84,-11,68}, -{84,-11,69}, -{84,-11,70}, -{84,-11,71}, -{84,-11,72}, -{84,-11,73}, -{84,-11,74}, -{84,-11,75}, -{84,-11,76}, -{84,-11,77}, -{84,-11,78}, -{84,-11,79}, -{84,-11,80}, -{84,-11,81}, -{84,-11,82}, -{84,-11,83}, -{84,-11,84}, -{84,-10,-24}, -{84,-10,-23}, -{84,-10,-22}, -{84,-10,-21}, -{84,-10,-20}, -{84,-10,-19}, -{84,-10,-18}, -{84,-10,-17}, -{84,-10,-16}, -{84,-10,-15}, -{84,-10,-14}, -{84,-10,-13}, -{84,-10,-12}, -{84,-10,-11}, -{84,-10,-10}, -{84,-10,-9}, -{84,-10,-8}, -{84,-10,-7}, -{84,-10,-6}, -{84,-10,-5}, -{84,-10,-4}, -{84,-10,-3}, -{84,-10,-2}, -{84,-10,-1}, -{84,-10,0}, -{84,-10,1}, -{84,-10,2}, -{84,-10,3}, -{84,-10,4}, -{84,-10,5}, -{84,-10,6}, -{84,-10,7}, -{84,-10,8}, -{84,-10,9}, -{84,-10,10}, -{84,-10,11}, -{84,-10,12}, -{84,-10,13}, -{84,-10,14}, -{84,-10,15}, -{84,-10,16}, -{84,-10,17}, -{84,-10,18}, -{84,-10,19}, -{84,-10,20}, -{84,-10,21}, -{84,-10,22}, -{84,-10,23}, -{84,-10,24}, -{84,-10,25}, -{84,-10,26}, -{84,-10,27}, -{84,-10,28}, -{84,-10,29}, -{84,-10,30}, -{84,-10,31}, -{84,-10,32}, -{84,-10,33}, -{84,-10,34}, -{84,-10,35}, -{84,-10,36}, -{84,-10,37}, -{84,-10,38}, -{84,-10,39}, -{84,-10,40}, -{84,-10,41}, -{84,-10,42}, -{84,-10,43}, -{84,-10,44}, -{84,-10,45}, -{84,-10,46}, -{84,-10,47}, -{84,-10,48}, -{84,-10,49}, -{84,-10,50}, -{84,-10,51}, -{84,-10,52}, -{84,-10,53}, -{84,-10,54}, -{84,-10,55}, -{84,-10,56}, -{84,-10,57}, -{84,-10,58}, -{84,-10,59}, -{84,-10,60}, -{84,-10,61}, -{84,-10,62}, -{84,-10,63}, -{84,-10,64}, -{84,-10,65}, -{84,-10,66}, -{84,-10,67}, -{84,-10,68}, -{84,-10,69}, -{84,-10,70}, -{84,-10,71}, -{84,-10,72}, -{84,-10,73}, -{84,-10,74}, -{84,-10,75}, -{84,-10,76}, -{84,-10,77}, -{84,-10,78}, -{84,-10,79}, -{84,-10,80}, -{84,-10,81}, -{84,-10,82}, -{84,-10,83}, -{84,-10,84}, -{84,-9,-24}, -{84,-9,-23}, -{84,-9,-22}, -{84,-9,-21}, -{84,-9,-20}, -{84,-9,-19}, -{84,-9,-18}, -{84,-9,-17}, -{84,-9,-16}, -{84,-9,-15}, -{84,-9,-14}, -{84,-9,-13}, -{84,-9,-12}, -{84,-9,-11}, -{84,-9,-10}, -{84,-9,-9}, -{84,-9,-8}, -{84,-9,-7}, -{84,-9,-6}, -{84,-9,-5}, -{84,-9,-4}, -{84,-9,-3}, -{84,-9,-2}, -{84,-9,-1}, -{84,-9,0}, -{84,-9,1}, -{84,-9,2}, -{84,-9,3}, -{84,-9,4}, -{84,-9,5}, -{84,-9,6}, -{84,-9,7}, -{84,-9,8}, -{84,-9,9}, -{84,-9,10}, -{84,-9,11}, -{84,-9,12}, -{84,-9,13}, -{84,-9,14}, -{84,-9,15}, -{84,-9,16}, -{84,-9,17}, -{84,-9,18}, -{84,-9,19}, -{84,-9,20}, -{84,-9,21}, -{84,-9,22}, -{84,-9,23}, -{84,-9,24}, -{84,-9,25}, -{84,-9,26}, -{84,-9,27}, -{84,-9,28}, -{84,-9,29}, -{84,-9,30}, -{84,-9,31}, -{84,-9,32}, -{84,-9,33}, -{84,-9,34}, -{84,-9,35}, -{84,-9,36}, -{84,-9,37}, -{84,-9,38}, -{84,-9,39}, -{84,-9,40}, -{84,-9,41}, -{84,-9,42}, -{84,-9,43}, -{84,-9,44}, -{84,-9,45}, -{84,-9,46}, -{84,-9,47}, -{84,-9,48}, -{84,-9,49}, -{84,-9,50}, -{84,-9,51}, -{84,-9,52}, -{84,-9,53}, -{84,-9,54}, -{84,-9,55}, -{84,-9,56}, -{84,-9,57}, -{84,-9,58}, -{84,-9,59}, -{84,-9,60}, -{84,-9,61}, -{84,-9,62}, -{84,-9,63}, -{84,-9,64}, -{84,-9,65}, -{84,-9,66}, -{84,-9,67}, -{84,-9,68}, -{84,-9,69}, -{84,-9,70}, -{84,-9,71}, -{84,-9,72}, -{84,-9,73}, -{84,-9,74}, -{84,-9,75}, -{84,-9,76}, -{84,-9,77}, -{84,-9,78}, -{84,-9,79}, -{84,-9,80}, -{84,-9,81}, -{84,-9,82}, -{84,-9,83}, -{84,-9,84}, -{84,-8,-24}, -{84,-8,-23}, -{84,-8,-22}, -{84,-8,-21}, -{84,-8,-20}, -{84,-8,-19}, -{84,-8,-18}, -{84,-8,-17}, -{84,-8,-16}, -{84,-8,-15}, -{84,-8,-14}, -{84,-8,-13}, -{84,-8,-12}, -{84,-8,-11}, -{84,-8,-10}, -{84,-8,-9}, -{84,-8,-8}, -{84,-8,-7}, -{84,-8,-6}, -{84,-8,-5}, -{84,-8,-4}, -{84,-8,-3}, -{84,-8,-2}, -{84,-8,-1}, -{84,-8,0}, -{84,-8,1}, -{84,-8,2}, -{84,-8,3}, -{84,-8,4}, -{84,-8,5}, -{84,-8,6}, -{84,-8,7}, -{84,-8,8}, -{84,-8,9}, -{84,-8,10}, -{84,-8,11}, -{84,-8,12}, -{84,-8,13}, -{84,-8,14}, -{84,-8,15}, -{84,-8,16}, -{84,-8,17}, -{84,-8,18}, -{84,-8,19}, -{84,-8,20}, -{84,-8,21}, -{84,-8,22}, -{84,-8,23}, -{84,-8,24}, -{84,-8,25}, -{84,-8,26}, -{84,-8,27}, -{84,-8,28}, -{84,-8,29}, -{84,-8,30}, -{84,-8,31}, -{84,-8,32}, -{84,-8,33}, -{84,-8,34}, -{84,-8,35}, -{84,-8,36}, -{84,-8,37}, -{84,-8,38}, -{84,-8,39}, -{84,-8,40}, -{84,-8,41}, -{84,-8,42}, -{84,-8,43}, -{84,-8,44}, -{84,-8,45}, -{84,-8,46}, -{84,-8,47}, -{84,-8,48}, -{84,-8,49}, -{84,-8,50}, -{84,-8,51}, -{84,-8,52}, -{84,-8,53}, -{84,-8,54}, -{84,-8,55}, -{84,-8,56}, -{84,-8,57}, -{84,-8,58}, -{84,-8,59}, -{84,-8,60}, -{84,-8,61}, -{84,-8,62}, -{84,-8,63}, -{84,-8,64}, -{84,-8,65}, -{84,-8,66}, -{84,-8,67}, -{84,-8,68}, -{84,-8,69}, -{84,-8,70}, -{84,-8,71}, -{84,-8,72}, -{84,-8,73}, -{84,-8,74}, -{84,-8,75}, -{84,-8,76}, -{84,-8,77}, -{84,-8,78}, -{84,-8,79}, -{84,-8,80}, -{84,-8,81}, -{84,-8,82}, -{84,-8,83}, -{84,-8,84}, -{84,-7,-24}, -{84,-7,-23}, -{84,-7,-22}, -{84,-7,-21}, -{84,-7,-20}, -{84,-7,-19}, -{84,-7,-18}, -{84,-7,-17}, -{84,-7,-16}, -{84,-7,-15}, -{84,-7,-14}, -{84,-7,-13}, -{84,-7,-12}, -{84,-7,-11}, -{84,-7,-10}, -{84,-7,-9}, -{84,-7,-8}, -{84,-7,-7}, -{84,-7,-6}, -{84,-7,-5}, -{84,-7,-4}, -{84,-7,-3}, -{84,-7,-2}, -{84,-7,-1}, -{84,-7,0}, -{84,-7,1}, -{84,-7,2}, -{84,-7,3}, -{84,-7,4}, -{84,-7,5}, -{84,-7,6}, -{84,-7,7}, -{84,-7,8}, -{84,-7,9}, -{84,-7,10}, -{84,-7,11}, -{84,-7,12}, -{84,-7,13}, -{84,-7,14}, -{84,-7,15}, -{84,-7,16}, -{84,-7,17}, -{84,-7,18}, -{84,-7,19}, -{84,-7,20}, -{84,-7,21}, -{84,-7,22}, -{84,-7,23}, -{84,-7,24}, -{84,-7,25}, -{84,-7,26}, -{84,-7,27}, -{84,-7,28}, -{84,-7,29}, -{84,-7,30}, -{84,-7,31}, -{84,-7,32}, -{84,-7,33}, -{84,-7,34}, -{84,-7,35}, -{84,-7,36}, -{84,-7,37}, -{84,-7,38}, -{84,-7,39}, -{84,-7,40}, -{84,-7,41}, -{84,-7,42}, -{84,-7,43}, -{84,-7,44}, -{84,-7,45}, -{84,-7,46}, -{84,-7,47}, -{84,-7,48}, -{84,-7,49}, -{84,-7,50}, -{84,-7,51}, -{84,-7,52}, -{84,-7,53}, -{84,-7,54}, -{84,-7,55}, -{84,-7,56}, -{84,-7,57}, -{84,-7,58}, -{84,-7,59}, -{84,-7,60}, -{84,-7,61}, -{84,-7,62}, -{84,-7,63}, -{84,-7,64}, -{84,-7,65}, -{84,-7,66}, -{84,-7,67}, -{84,-7,68}, -{84,-7,69}, -{84,-7,70}, -{84,-7,71}, -{84,-7,72}, -{84,-7,73}, -{84,-7,74}, -{84,-7,75}, -{84,-7,76}, -{84,-7,77}, -{84,-7,78}, -{84,-7,79}, -{84,-7,80}, -{84,-7,81}, -{84,-7,82}, -{84,-7,83}, -{84,-7,84}, -{84,-6,-24}, -{84,-6,-23}, -{84,-6,-22}, -{84,-6,-21}, -{84,-6,-20}, -{84,-6,-19}, -{84,-6,-18}, -{84,-6,-17}, -{84,-6,-16}, -{84,-6,-15}, -{84,-6,-14}, -{84,-6,-13}, -{84,-6,-12}, -{84,-6,-11}, -{84,-6,-10}, -{84,-6,-9}, -{84,-6,-8}, -{84,-6,-7}, -{84,-6,-6}, -{84,-6,-5}, -{84,-6,-4}, -{84,-6,-3}, -{84,-6,-2}, -{84,-6,-1}, -{84,-6,0}, -{84,-6,1}, -{84,-6,2}, -{84,-6,3}, -{84,-6,4}, -{84,-6,5}, -{84,-6,6}, -{84,-6,7}, -{84,-6,8}, -{84,-6,9}, -{84,-6,10}, -{84,-6,11}, -{84,-6,12}, -{84,-6,13}, -{84,-6,14}, -{84,-6,15}, -{84,-6,16}, -{84,-6,17}, -{84,-6,18}, -{84,-6,19}, -{84,-6,20}, -{84,-6,21}, -{84,-6,22}, -{84,-6,23}, -{84,-6,24}, -{84,-6,25}, -{84,-6,26}, -{84,-6,27}, -{84,-6,28}, -{84,-6,29}, -{84,-6,30}, -{84,-6,31}, -{84,-6,32}, -{84,-6,33}, -{84,-6,34}, -{84,-6,35}, -{84,-6,36}, -{84,-6,37}, -{84,-6,38}, -{84,-6,39}, -{84,-6,40}, -{84,-6,41}, -{84,-6,42}, -{84,-6,43}, -{84,-6,44}, -{84,-6,45}, -{84,-6,46}, -{84,-6,47}, -{84,-6,48}, -{84,-6,49}, -{84,-6,50}, -{84,-6,51}, -{84,-6,52}, -{84,-6,53}, -{84,-6,54}, -{84,-6,55}, -{84,-6,56}, -{84,-6,57}, -{84,-6,58}, -{84,-6,59}, -{84,-6,60}, -{84,-6,61}, -{84,-6,62}, -{84,-6,63}, -{84,-6,64}, -{84,-6,65}, -{84,-6,66}, -{84,-6,67}, -{84,-6,68}, -{84,-6,69}, -{84,-6,70}, -{84,-6,71}, -{84,-6,72}, -{84,-6,73}, -{84,-6,74}, -{84,-6,75}, -{84,-6,76}, -{84,-6,77}, -{84,-6,78}, -{84,-6,79}, -{84,-6,80}, -{84,-6,81}, -{84,-6,82}, -{84,-6,83}, -{84,-6,84}, -{84,-5,-24}, -{84,-5,-23}, -{84,-5,-22}, -{84,-5,-21}, -{84,-5,-20}, -{84,-5,-19}, -{84,-5,-18}, -{84,-5,-17}, -{84,-5,-16}, -{84,-5,-15}, -{84,-5,-14}, -{84,-5,-13}, -{84,-5,-12}, -{84,-5,-11}, -{84,-5,-10}, -{84,-5,-9}, -{84,-5,-8}, -{84,-5,-7}, -{84,-5,-6}, -{84,-5,-5}, -{84,-5,-4}, -{84,-5,-3}, -{84,-5,-2}, -{84,-5,-1}, -{84,-5,0}, -{84,-5,1}, -{84,-5,2}, -{84,-5,3}, -{84,-5,4}, -{84,-5,5}, -{84,-5,6}, -{84,-5,7}, -{84,-5,8}, -{84,-5,9}, -{84,-5,10}, -{84,-5,11}, -{84,-5,12}, -{84,-5,13}, -{84,-5,14}, -{84,-5,15}, -{84,-5,16}, -{84,-5,17}, -{84,-5,18}, -{84,-5,19}, -{84,-5,20}, -{84,-5,21}, -{84,-5,22}, -{84,-5,23}, -{84,-5,24}, -{84,-5,25}, -{84,-5,26}, -{84,-5,27}, -{84,-5,28}, -{84,-5,29}, -{84,-5,30}, -{84,-5,31}, -{84,-5,32}, -{84,-5,33}, -{84,-5,34}, -{84,-5,35}, -{84,-5,36}, -{84,-5,37}, -{84,-5,38}, -{84,-5,39}, -{84,-5,40}, -{84,-5,41}, -{84,-5,42}, -{84,-5,43}, -{84,-5,44}, -{84,-5,45}, -{84,-5,46}, -{84,-5,47}, -{84,-5,48}, -{84,-5,49}, -{84,-5,50}, -{84,-5,51}, -{84,-5,52}, -{84,-5,53}, -{84,-5,54}, -{84,-5,55}, -{84,-5,56}, -{84,-5,57}, -{84,-5,58}, -{84,-5,59}, -{84,-5,60}, -{84,-5,61}, -{84,-5,62}, -{84,-5,63}, -{84,-5,64}, -{84,-5,65}, -{84,-5,66}, -{84,-5,67}, -{84,-5,68}, -{84,-5,69}, -{84,-5,70}, -{84,-5,71}, -{84,-5,72}, -{84,-5,73}, -{84,-5,74}, -{84,-5,75}, -{84,-5,76}, -{84,-5,77}, -{84,-5,78}, -{84,-5,79}, -{84,-5,80}, -{84,-5,81}, -{84,-5,82}, -{84,-5,83}, -{84,-5,84}, -{84,-4,-24}, -{84,-4,-23}, -{84,-4,-22}, -{84,-4,-21}, -{84,-4,-20}, -{84,-4,-19}, -{84,-4,-18}, -{84,-4,-17}, -{84,-4,-16}, -{84,-4,-15}, -{84,-4,-14}, -{84,-4,-13}, -{84,-4,-12}, -{84,-4,-11}, -{84,-4,-10}, -{84,-4,-9}, -{84,-4,-8}, -{84,-4,-7}, -{84,-4,-6}, -{84,-4,-5}, -{84,-4,-4}, -{84,-4,-3}, -{84,-4,-2}, -{84,-4,-1}, -{84,-4,0}, -{84,-4,1}, -{84,-4,2}, -{84,-4,3}, -{84,-4,4}, -{84,-4,5}, -{84,-4,6}, -{84,-4,7}, -{84,-4,8}, -{84,-4,9}, -{84,-4,10}, -{84,-4,11}, -{84,-4,12}, -{84,-4,13}, -{84,-4,14}, -{84,-4,15}, -{84,-4,16}, -{84,-4,17}, -{84,-4,18}, -{84,-4,19}, -{84,-4,20}, -{84,-4,21}, -{84,-4,22}, -{84,-4,23}, -{84,-4,24}, -{84,-4,25}, -{84,-4,26}, -{84,-4,27}, -{84,-4,28}, -{84,-4,29}, -{84,-4,30}, -{84,-4,31}, -{84,-4,32}, -{84,-4,33}, -{84,-4,34}, -{84,-4,35}, -{84,-4,36}, -{84,-4,37}, -{84,-4,38}, -{84,-4,39}, -{84,-4,40}, -{84,-4,41}, -{84,-4,42}, -{84,-4,43}, -{84,-4,44}, -{84,-4,45}, -{84,-4,46}, -{84,-4,47}, -{84,-4,48}, -{84,-4,49}, -{84,-4,50}, -{84,-4,51}, -{84,-4,52}, -{84,-4,53}, -{84,-4,54}, -{84,-4,55}, -{84,-4,56}, -{84,-4,57}, -{84,-4,58}, -{84,-4,59}, -{84,-4,60}, -{84,-4,61}, -{84,-4,62}, -{84,-4,63}, -{84,-4,64}, -{84,-4,65}, -{84,-4,66}, -{84,-4,67}, -{84,-4,68}, -{84,-4,69}, -{84,-4,70}, -{84,-4,71}, -{84,-4,72}, -{84,-4,73}, -{84,-4,74}, -{84,-4,75}, -{84,-4,76}, -{84,-4,77}, -{84,-4,78}, -{84,-4,79}, -{84,-4,80}, -{84,-4,81}, -{84,-4,82}, -{84,-4,83}, -{84,-4,84}, -{84,-3,-24}, -{84,-3,-23}, -{84,-3,-22}, -{84,-3,-21}, -{84,-3,-20}, -{84,-3,-19}, -{84,-3,-18}, -{84,-3,-17}, -{84,-3,-16}, -{84,-3,-15}, -{84,-3,-14}, -{84,-3,-13}, -{84,-3,-12}, -{84,-3,-11}, -{84,-3,-10}, -{84,-3,-9}, -{84,-3,-8}, -{84,-3,-7}, -{84,-3,-6}, -{84,-3,-5}, -{84,-3,-4}, -{84,-3,-3}, -{84,-3,-2}, -{84,-3,-1}, -{84,-3,0}, -{84,-3,1}, -{84,-3,2}, -{84,-3,3}, -{84,-3,4}, -{84,-3,5}, -{84,-3,6}, -{84,-3,7}, -{84,-3,8}, -{84,-3,9}, -{84,-3,10}, -{84,-3,11}, -{84,-3,12}, -{84,-3,13}, -{84,-3,14}, -{84,-3,15}, -{84,-3,16}, -{84,-3,17}, -{84,-3,18}, -{84,-3,19}, -{84,-3,20}, -{84,-3,21}, -{84,-3,22}, -{84,-3,23}, -{84,-3,24}, -{84,-3,25}, -{84,-3,26}, -{84,-3,27}, -{84,-3,28}, -{84,-3,29}, -{84,-3,30}, -{84,-3,31}, -{84,-3,32}, -{84,-3,33}, -{84,-3,34}, -{84,-3,35}, -{84,-3,36}, -{84,-3,37}, -{84,-3,38}, -{84,-3,39}, -{84,-3,40}, -{84,-3,41}, -{84,-3,42}, -{84,-3,43}, -{84,-3,44}, -{84,-3,45}, -{84,-3,46}, -{84,-3,47}, -{84,-3,48}, -{84,-3,49}, -{84,-3,50}, -{84,-3,51}, -{84,-3,52}, -{84,-3,53}, -{84,-3,54}, -{84,-3,55}, -{84,-3,56}, -{84,-3,57}, -{84,-3,58}, -{84,-3,59}, -{84,-3,60}, -{84,-3,61}, -{84,-3,62}, -{84,-3,63}, -{84,-3,64}, -{84,-3,65}, -{84,-3,66}, -{84,-3,67}, -{84,-3,68}, -{84,-3,69}, -{84,-3,70}, -{84,-3,71}, -{84,-3,72}, -{84,-3,73}, -{84,-3,74}, -{84,-3,75}, -{84,-3,76}, -{84,-3,77}, -{84,-3,78}, -{84,-3,79}, -{84,-3,80}, -{84,-3,81}, -{84,-3,82}, -{84,-3,83}, -{84,-3,84}, -{84,-2,-24}, -{84,-2,-23}, -{84,-2,-22}, -{84,-2,-21}, -{84,-2,-20}, -{84,-2,-19}, -{84,-2,-18}, -{84,-2,-17}, -{84,-2,-16}, -{84,-2,-15}, -{84,-2,-14}, -{84,-2,-13}, -{84,-2,-12}, -{84,-2,-11}, -{84,-2,-10}, -{84,-2,-9}, -{84,-2,-8}, -{84,-2,-7}, -{84,-2,-6}, -{84,-2,-5}, -{84,-2,-4}, -{84,-2,-3}, -{84,-2,-2}, -{84,-2,-1}, -{84,-2,0}, -{84,-2,1}, -{84,-2,2}, -{84,-2,3}, -{84,-2,4}, -{84,-2,5}, -{84,-2,6}, -{84,-2,7}, -{84,-2,8}, -{84,-2,9}, -{84,-2,10}, -{84,-2,11}, -{84,-2,12}, -{84,-2,13}, -{84,-2,14}, -{84,-2,15}, -{84,-2,16}, -{84,-2,17}, -{84,-2,18}, -{84,-2,19}, -{84,-2,20}, -{84,-2,21}, -{84,-2,22}, -{84,-2,23}, -{84,-2,24}, -{84,-2,25}, -{84,-2,26}, -{84,-2,27}, -{84,-2,28}, -{84,-2,29}, -{84,-2,30}, -{84,-2,31}, -{84,-2,32}, -{84,-2,33}, -{84,-2,34}, -{84,-2,35}, -{84,-2,36}, -{84,-2,37}, -{84,-2,38}, -{84,-2,39}, -{84,-2,40}, -{84,-2,41}, -{84,-2,42}, -{84,-2,43}, -{84,-2,44}, -{84,-2,45}, -{84,-2,46}, -{84,-2,47}, -{84,-2,48}, -{84,-2,49}, -{84,-2,50}, -{84,-2,51}, -{84,-2,52}, -{84,-2,53}, -{84,-2,54}, -{84,-2,55}, -{84,-2,56}, -{84,-2,57}, -{84,-2,58}, -{84,-2,59}, -{84,-2,60}, -{84,-2,61}, -{84,-2,62}, -{84,-2,63}, -{84,-2,64}, -{84,-2,65}, -{84,-2,66}, -{84,-2,67}, -{84,-2,68}, -{84,-2,69}, -{84,-2,70}, -{84,-2,71}, -{84,-2,72}, -{84,-2,73}, -{84,-2,74}, -{84,-2,75}, -{84,-2,76}, -{84,-2,77}, -{84,-2,78}, -{84,-2,79}, -{84,-2,80}, -{84,-2,81}, -{84,-2,82}, -{84,-2,83}, -{84,-2,84}, -{84,-1,-24}, -{84,-1,-23}, -{84,-1,-22}, -{84,-1,-21}, -{84,-1,-20}, -{84,-1,-19}, -{84,-1,-18}, -{84,-1,-17}, -{84,-1,-16}, -{84,-1,-15}, -{84,-1,-14}, -{84,-1,-13}, -{84,-1,-12}, -{84,-1,-11}, -{84,-1,-10}, -{84,-1,-9}, -{84,-1,-8}, -{84,-1,-7}, -{84,-1,-6}, -{84,-1,-5}, -{84,-1,-4}, -{84,-1,-3}, -{84,-1,-2}, -{84,-1,-1}, -{84,-1,0}, -{84,-1,1}, -{84,-1,2}, -{84,-1,3}, -{84,-1,4}, -{84,-1,5}, -{84,-1,6}, -{84,-1,7}, -{84,-1,8}, -{84,-1,9}, -{84,-1,10}, -{84,-1,11}, -{84,-1,12}, -{84,-1,13}, -{84,-1,14}, -{84,-1,15}, -{84,-1,16}, -{84,-1,17}, -{84,-1,18}, -{84,-1,19}, -{84,-1,20}, -{84,-1,21}, -{84,-1,22}, -{84,-1,23}, -{84,-1,24}, -{84,-1,25}, -{84,-1,26}, -{84,-1,27}, -{84,-1,28}, -{84,-1,29}, -{84,-1,30}, -{84,-1,31}, -{84,-1,32}, -{84,-1,33}, -{84,-1,34}, -{84,-1,35}, -{84,-1,36}, -{84,-1,37}, -{84,-1,38}, -{84,-1,39}, -{84,-1,40}, -{84,-1,41}, -{84,-1,42}, -{84,-1,43}, -{84,-1,44}, -{84,-1,45}, -{84,-1,46}, -{84,-1,47}, -{84,-1,48}, -{84,-1,49}, -{84,-1,50}, -{84,-1,51}, -{84,-1,52}, -{84,-1,53}, -{84,-1,54}, -{84,-1,55}, -{84,-1,56}, -{84,-1,57}, -{84,-1,58}, -{84,-1,59}, -{84,-1,60}, -{84,-1,61}, -{84,-1,62}, -{84,-1,63}, -{84,-1,64}, -{84,-1,65}, -{84,-1,66}, -{84,-1,67}, -{84,-1,68}, -{84,-1,69}, -{84,-1,70}, -{84,-1,71}, -{84,-1,72}, -{84,-1,73}, -{84,-1,74}, -{84,-1,75}, -{84,-1,76}, -{84,-1,77}, -{84,-1,78}, -{84,-1,79}, -{84,-1,80}, -{84,-1,81}, -{84,-1,82}, -{84,-1,83}, -{84,-1,84}, -{84,0,-24}, -{84,0,-23}, -{84,0,-22}, -{84,0,-21}, -{84,0,-20}, -{84,0,-19}, -{84,0,-18}, -{84,0,-17}, -{84,0,-16}, -{84,0,-15}, -{84,0,-14}, -{84,0,-13}, -{84,0,-12}, -{84,0,-11}, -{84,0,-10}, -{84,0,-9}, -{84,0,-8}, -{84,0,-7}, -{84,0,-6}, -{84,0,-5}, -{84,0,-4}, -{84,0,-3}, -{84,0,-2}, -{84,0,-1}, -{84,0,0}, -{84,0,1}, -{84,0,2}, -{84,0,3}, -{84,0,4}, -{84,0,5}, -{84,0,6}, -{84,0,7}, -{84,0,8}, -{84,0,9}, -{84,0,10}, -{84,0,11}, -{84,0,12}, -{84,0,13}, -{84,0,14}, -{84,0,15}, -{84,0,16}, -{84,0,17}, -{84,0,18}, -{84,0,19}, -{84,0,20}, -{84,0,21}, -{84,0,22}, -{84,0,23}, -{84,0,24}, -{84,0,25}, -{84,0,26}, -{84,0,27}, -{84,0,28}, -{84,0,29}, -{84,0,30}, -{84,0,31}, -{84,0,32}, -{84,0,33}, -{84,0,34}, -{84,0,35}, -{84,0,36}, -{84,0,37}, -{84,0,38}, -{84,0,39}, -{84,0,40}, -{84,0,41}, -{84,0,42}, -{84,0,43}, -{84,0,44}, -{84,0,45}, -{84,0,46}, -{84,0,47}, -{84,0,48}, -{84,0,49}, -{84,0,50}, -{84,0,51}, -{84,0,52}, -{84,0,53}, -{84,0,54}, -{84,0,55}, -{84,0,56}, -{84,0,57}, -{84,0,58}, -{84,0,59}, -{84,0,60}, -{84,0,61}, -{84,0,62}, -{84,0,63}, -{84,0,64}, -{84,0,65}, -{84,0,66}, -{84,0,67}, -{84,0,68}, -{84,0,69}, -{84,0,70}, -{84,0,71}, -{84,0,72}, -{84,0,73}, -{84,0,74}, -{84,0,75}, -{84,0,76}, -{84,0,77}, -{84,0,78}, -{84,0,79}, -{84,0,80}, -{84,0,81}, -{84,0,82}, -{84,0,83}, -{84,0,84}, -{84,1,-24}, -{84,1,-23}, -{84,1,-22}, -{84,1,-21}, -{84,1,-20}, -{84,1,-19}, -{84,1,-18}, -{84,1,-17}, -{84,1,-16}, -{84,1,-15}, -{84,1,-14}, -{84,1,-13}, -{84,1,-12}, -{84,1,-11}, -{84,1,-10}, -{84,1,-9}, -{84,1,-8}, -{84,1,-7}, -{84,1,-6}, -{84,1,-5}, -{84,1,-4}, -{84,1,-3}, -{84,1,-2}, -{84,1,-1}, -{84,1,0}, -{84,1,1}, -{84,1,2}, -{84,1,3}, -{84,1,4}, -{84,1,5}, -{84,1,6}, -{84,1,7}, -{84,1,8}, -{84,1,9}, -{84,1,10}, -{84,1,11}, -{84,1,12}, -{84,1,13}, -{84,1,14}, -{84,1,15}, -{84,1,16}, -{84,1,17}, -{84,1,18}, -{84,1,19}, -{84,1,20}, -{84,1,21}, -{84,1,22}, -{84,1,23}, -{84,1,24}, -{84,1,25}, -{84,1,26}, -{84,1,27}, -{84,1,28}, -{84,1,29}, -{84,1,30}, -{84,1,31}, -{84,1,32}, -{84,1,33}, -{84,1,34}, -{84,1,35}, -{84,1,36}, -{84,1,37}, -{84,1,38}, -{84,1,39}, -{84,1,40}, -{84,1,41}, -{84,1,42}, -{84,1,43}, -{84,1,44}, -{84,1,45}, -{84,1,46}, -{84,1,47}, -{84,1,48}, -{84,1,49}, -{84,1,50}, -{84,1,51}, -{84,1,52}, -{84,1,53}, -{84,1,54}, -{84,1,55}, -{84,1,56}, -{84,1,57}, -{84,1,58}, -{84,1,59}, -{84,1,60}, -{84,1,61}, -{84,1,62}, -{84,1,63}, -{84,1,64}, -{84,1,65}, -{84,1,66}, -{84,1,67}, -{84,1,68}, -{84,1,69}, -{84,1,70}, -{84,1,71}, -{84,1,72}, -{84,1,73}, -{84,1,74}, -{84,1,75}, -{84,1,76}, -{84,1,77}, -{84,1,78}, -{84,1,79}, -{84,1,80}, -{84,1,81}, -{84,1,82}, -{84,1,83}, -{84,1,84}, -{84,1,85}, -{84,2,-24}, -{84,2,-23}, -{84,2,-22}, -{84,2,-21}, -{84,2,-20}, -{84,2,-19}, -{84,2,-18}, -{84,2,-17}, -{84,2,-16}, -{84,2,-15}, -{84,2,-14}, -{84,2,-13}, -{84,2,-12}, -{84,2,-11}, -{84,2,-10}, -{84,2,-9}, -{84,2,-8}, -{84,2,-7}, -{84,2,-6}, -{84,2,-5}, -{84,2,-4}, -{84,2,-3}, -{84,2,-2}, -{84,2,-1}, -{84,2,0}, -{84,2,1}, -{84,2,2}, -{84,2,3}, -{84,2,4}, -{84,2,5}, -{84,2,6}, -{84,2,7}, -{84,2,8}, -{84,2,9}, -{84,2,10}, -{84,2,11}, -{84,2,12}, -{84,2,13}, -{84,2,14}, -{84,2,15}, -{84,2,16}, -{84,2,17}, -{84,2,18}, -{84,2,19}, -{84,2,20}, -{84,2,21}, -{84,2,22}, -{84,2,23}, -{84,2,24}, -{84,2,25}, -{84,2,26}, -{84,2,27}, -{84,2,28}, -{84,2,29}, -{84,2,30}, -{84,2,31}, -{84,2,32}, -{84,2,33}, -{84,2,34}, -{84,2,35}, -{84,2,36}, -{84,2,37}, -{84,2,38}, -{84,2,39}, -{84,2,40}, -{84,2,41}, -{84,2,42}, -{84,2,43}, -{84,2,44}, -{84,2,45}, -{84,2,46}, -{84,2,47}, -{84,2,48}, -{84,2,49}, -{84,2,50}, -{84,2,51}, -{84,2,52}, -{84,2,53}, -{84,2,54}, -{84,2,55}, -{84,2,56}, -{84,2,57}, -{84,2,58}, -{84,2,59}, -{84,2,60}, -{84,2,61}, -{84,2,62}, -{84,2,63}, -{84,2,64}, -{84,2,65}, -{84,2,66}, -{84,2,67}, -{84,2,68}, -{84,2,69}, -{84,2,70}, -{84,2,71}, -{84,2,72}, -{84,2,73}, -{84,2,74}, -{84,2,75}, -{84,2,76}, -{84,2,77}, -{84,2,78}, -{84,2,79}, -{84,2,80}, -{84,2,81}, -{84,2,82}, -{84,2,83}, -{84,2,84}, -{84,2,85}, -{84,3,-24}, -{84,3,-23}, -{84,3,-22}, -{84,3,-21}, -{84,3,-20}, -{84,3,-19}, -{84,3,-18}, -{84,3,-17}, -{84,3,-16}, -{84,3,-15}, -{84,3,-14}, -{84,3,-13}, -{84,3,-12}, -{84,3,-11}, -{84,3,-10}, -{84,3,-9}, -{84,3,-8}, -{84,3,-7}, -{84,3,-6}, -{84,3,-5}, -{84,3,-4}, -{84,3,-3}, -{84,3,-2}, -{84,3,-1}, -{84,3,0}, -{84,3,1}, -{84,3,2}, -{84,3,3}, -{84,3,4}, -{84,3,5}, -{84,3,6}, -{84,3,7}, -{84,3,8}, -{84,3,9}, -{84,3,10}, -{84,3,11}, -{84,3,12}, -{84,3,13}, -{84,3,14}, -{84,3,15}, -{84,3,16}, -{84,3,17}, -{84,3,18}, -{84,3,19}, -{84,3,20}, -{84,3,21}, -{84,3,22}, -{84,3,23}, -{84,3,24}, -{84,3,25}, -{84,3,26}, -{84,3,27}, -{84,3,28}, -{84,3,29}, -{84,3,30}, -{84,3,31}, -{84,3,32}, -{84,3,33}, -{84,3,34}, -{84,3,35}, -{84,3,36}, -{84,3,37}, -{84,3,38}, -{84,3,39}, -{84,3,40}, -{84,3,41}, -{84,3,42}, -{84,3,43}, -{84,3,44}, -{84,3,45}, -{84,3,46}, -{84,3,47}, -{84,3,48}, -{84,3,49}, -{84,3,50}, -{84,3,51}, -{84,3,52}, -{84,3,53}, -{84,3,54}, -{84,3,55}, -{84,3,56}, -{84,3,57}, -{84,3,58}, -{84,3,59}, -{84,3,60}, -{84,3,61}, -{84,3,62}, -{84,3,63}, -{84,3,64}, -{84,3,65}, -{84,3,66}, -{84,3,67}, -{84,3,68}, -{84,3,69}, -{84,3,70}, -{84,3,71}, -{84,3,72}, -{84,3,73}, -{84,3,74}, -{84,3,75}, -{84,3,76}, -{84,3,77}, -{84,3,78}, -{84,3,79}, -{84,3,80}, -{84,3,81}, -{84,3,82}, -{84,3,83}, -{84,3,84}, -{84,3,85}, -{84,4,-24}, -{84,4,-23}, -{84,4,-22}, -{84,4,-21}, -{84,4,-20}, -{84,4,-19}, -{84,4,-18}, -{84,4,-17}, -{84,4,-16}, -{84,4,-15}, -{84,4,-14}, -{84,4,-13}, -{84,4,-12}, -{84,4,-11}, -{84,4,-10}, -{84,4,-9}, -{84,4,-8}, -{84,4,-7}, -{84,4,-6}, -{84,4,-5}, -{84,4,-4}, -{84,4,-3}, -{84,4,-2}, -{84,4,-1}, -{84,4,0}, -{84,4,1}, -{84,4,2}, -{84,4,3}, -{84,4,4}, -{84,4,5}, -{84,4,6}, -{84,4,7}, -{84,4,8}, -{84,4,9}, -{84,4,10}, -{84,4,11}, -{84,4,12}, -{84,4,13}, -{84,4,14}, -{84,4,15}, -{84,4,16}, -{84,4,17}, -{84,4,18}, -{84,4,19}, -{84,4,20}, -{84,4,21}, -{84,4,22}, -{84,4,23}, -{84,4,24}, -{84,4,25}, -{84,4,26}, -{84,4,27}, -{84,4,28}, -{84,4,29}, -{84,4,30}, -{84,4,31}, -{84,4,32}, -{84,4,33}, -{84,4,34}, -{84,4,35}, -{84,4,36}, -{84,4,37}, -{84,4,38}, -{84,4,39}, -{84,4,40}, -{84,4,41}, -{84,4,42}, -{84,4,43}, -{84,4,44}, -{84,4,45}, -{84,4,46}, -{84,4,47}, -{84,4,48}, -{84,4,49}, -{84,4,50}, -{84,4,51}, -{84,4,52}, -{84,4,53}, -{84,4,54}, -{84,4,55}, -{84,4,56}, -{84,4,57}, -{84,4,58}, -{84,4,59}, -{84,4,60}, -{84,4,61}, -{84,4,62}, -{84,4,63}, -{84,4,64}, -{84,4,65}, -{84,4,66}, -{84,4,67}, -{84,4,68}, -{84,4,69}, -{84,4,70}, -{84,4,71}, -{84,4,72}, -{84,4,73}, -{84,4,74}, -{84,4,75}, -{84,4,76}, -{84,4,77}, -{84,4,78}, -{84,4,79}, -{84,4,80}, -{84,4,81}, -{84,4,82}, -{84,4,83}, -{84,4,84}, -{84,4,85}, -{84,5,-24}, -{84,5,-23}, -{84,5,-22}, -{84,5,-21}, -{84,5,-20}, -{84,5,-19}, -{84,5,-18}, -{84,5,-17}, -{84,5,-16}, -{84,5,-15}, -{84,5,-14}, -{84,5,-13}, -{84,5,-12}, -{84,5,-11}, -{84,5,-10}, -{84,5,-9}, -{84,5,-8}, -{84,5,-7}, -{84,5,-6}, -{84,5,-5}, -{84,5,-4}, -{84,5,-3}, -{84,5,-2}, -{84,5,-1}, -{84,5,0}, -{84,5,1}, -{84,5,2}, -{84,5,3}, -{84,5,4}, -{84,5,5}, -{84,5,6}, -{84,5,7}, -{84,5,8}, -{84,5,9}, -{84,5,10}, -{84,5,11}, -{84,5,12}, -{84,5,13}, -{84,5,14}, -{84,5,15}, -{84,5,16}, -{84,5,17}, -{84,5,18}, -{84,5,19}, -{84,5,20}, -{84,5,21}, -{84,5,22}, -{84,5,23}, -{84,5,24}, -{84,5,25}, -{84,5,26}, -{84,5,27}, -{84,5,28}, -{84,5,29}, -{84,5,30}, -{84,5,31}, -{84,5,32}, -{84,5,33}, -{84,5,34}, -{84,5,35}, -{84,5,36}, -{84,5,37}, -{84,5,38}, -{84,5,39}, -{84,5,40}, -{84,5,41}, -{84,5,42}, -{84,5,43}, -{84,5,44}, -{84,5,45}, -{84,5,46}, -{84,5,47}, -{84,5,48}, -{84,5,49}, -{84,5,50}, -{84,5,51}, -{84,5,52}, -{84,5,53}, -{84,5,54}, -{84,5,55}, -{84,5,56}, -{84,5,57}, -{84,5,58}, -{84,5,59}, -{84,5,60}, -{84,5,61}, -{84,5,62}, -{84,5,63}, -{84,5,64}, -{84,5,65}, -{84,5,66}, -{84,5,67}, -{84,5,68}, -{84,5,69}, -{84,5,70}, -{84,5,71}, -{84,5,72}, -{84,5,73}, -{84,5,74}, -{84,5,75}, -{84,5,76}, -{84,5,77}, -{84,5,78}, -{84,5,79}, -{84,6,-24}, -{84,6,-23}, -{84,6,-22}, -{84,6,-21}, -{84,6,-20}, -{84,6,-19}, -{84,6,-18}, -{84,6,-17}, -{84,6,-16}, -{84,6,-15}, -{84,6,-14}, -{84,6,-13}, -{84,6,-12}, -{84,6,-11}, -{84,6,-10}, -{84,6,-9}, -{84,6,-8}, -{84,6,-7}, -{84,6,-6}, -{84,6,-5}, -{84,6,-4}, -{84,6,-3}, -{84,6,-2}, -{84,6,-1}, -{84,6,0}, -{84,6,1}, -{84,6,2}, -{84,6,3}, -{84,6,4}, -{84,6,5}, -{84,6,6}, -{84,6,7}, -{84,6,8}, -{84,6,9}, -{84,6,10}, -{84,6,11}, -{84,6,12}, -{84,6,13}, -{84,6,14}, -{84,6,15}, -{84,6,16}, -{84,6,17}, -{84,6,18}, -{84,6,19}, -{84,6,20}, -{84,6,21}, -{84,6,22}, -{84,6,23}, -{84,6,24}, -{84,6,25}, -{84,6,26}, -{84,6,27}, -{84,6,28}, -{84,6,29}, -{84,6,30}, -{84,6,31}, -{84,6,32}, -{84,6,33}, -{84,6,34}, -{84,6,35}, -{84,6,36}, -{84,6,37}, -{84,6,38}, -{84,6,39}, -{84,6,40}, -{84,6,41}, -{84,6,42}, -{84,6,43}, -{84,6,44}, -{84,6,45}, -{84,6,46}, -{84,6,47}, -{84,6,48}, -{84,6,49}, -{84,6,50}, -{84,6,51}, -{84,6,52}, -{84,6,53}, -{84,6,54}, -{84,6,55}, -{84,6,56}, -{84,6,57}, -{84,6,58}, -{84,6,59}, -{84,6,60}, -{84,6,61}, -{84,6,62}, -{84,6,63}, -{84,6,64}, -{84,6,65}, -{84,6,66}, -{84,6,67}, -{84,6,68}, -{84,6,69}, -{84,6,70}, -{84,6,71}, -{84,7,-24}, -{84,7,-23}, -{84,7,-22}, -{84,7,-21}, -{84,7,-20}, -{84,7,-19}, -{84,7,-18}, -{84,7,-17}, -{84,7,-16}, -{84,7,-15}, -{84,7,-14}, -{84,7,-13}, -{84,7,-12}, -{84,7,-11}, -{84,7,-10}, -{84,7,-9}, -{84,7,-8}, -{84,7,-7}, -{84,7,-6}, -{84,7,-5}, -{84,7,-4}, -{84,7,-3}, -{84,7,-2}, -{84,7,-1}, -{84,7,0}, -{84,7,1}, -{84,7,2}, -{84,7,3}, -{84,7,4}, -{84,7,5}, -{84,7,6}, -{84,7,7}, -{84,7,8}, -{84,7,9}, -{84,7,10}, -{84,7,11}, -{84,7,12}, -{84,7,13}, -{84,7,14}, -{84,7,15}, -{84,7,16}, -{84,7,17}, -{84,7,18}, -{84,7,19}, -{84,7,20}, -{84,7,21}, -{84,7,22}, -{84,7,23}, -{84,7,24}, -{84,7,25}, -{84,7,26}, -{84,7,27}, -{84,7,28}, -{84,7,29}, -{84,7,30}, -{84,7,31}, -{84,7,32}, -{84,7,33}, -{84,7,34}, -{84,7,35}, -{84,7,36}, -{84,7,37}, -{84,7,38}, -{84,7,39}, -{84,7,40}, -{84,7,41}, -{84,7,42}, -{84,7,43}, -{84,7,44}, -{84,7,45}, -{84,7,46}, -{84,7,47}, -{84,7,48}, -{84,7,49}, -{84,7,50}, -{84,7,51}, -{84,7,52}, -{84,7,53}, -{84,7,54}, -{84,7,55}, -{84,7,56}, -{84,7,57}, -{84,7,58}, -{84,7,59}, -{84,7,60}, -{84,7,61}, -{84,7,62}, -{84,7,63}, -{84,7,64}, -{84,7,65}, -{84,8,-24}, -{84,8,-23}, -{84,8,-22}, -{84,8,-21}, -{84,8,-20}, -{84,8,-19}, -{84,8,-18}, -{84,8,-17}, -{84,8,-16}, -{84,8,-15}, -{84,8,-14}, -{84,8,-13}, -{84,8,-12}, -{84,8,-11}, -{84,8,-10}, -{84,8,-9}, -{84,8,-8}, -{84,8,-7}, -{84,8,-6}, -{84,8,-5}, -{84,8,-4}, -{84,8,-3}, -{84,8,-2}, -{84,8,-1}, -{84,8,0}, -{84,8,1}, -{84,8,2}, -{84,8,3}, -{84,8,4}, -{84,8,5}, -{84,8,6}, -{84,8,7}, -{84,8,8}, -{84,8,9}, -{84,8,10}, -{84,8,11}, -{84,8,12}, -{84,8,13}, -{84,8,14}, -{84,8,15}, -{84,8,16}, -{84,8,17}, -{84,8,18}, -{84,8,19}, -{84,8,20}, -{84,8,21}, -{84,8,22}, -{84,8,23}, -{84,8,24}, -{84,8,25}, -{84,8,26}, -{84,8,27}, -{84,8,28}, -{84,8,29}, -{84,8,30}, -{84,8,31}, -{84,8,32}, -{84,8,33}, -{84,8,34}, -{84,8,35}, -{84,8,36}, -{84,8,37}, -{84,8,38}, -{84,8,39}, -{84,8,40}, -{84,8,41}, -{84,8,42}, -{84,8,43}, -{84,8,44}, -{84,8,45}, -{84,8,46}, -{84,8,47}, -{84,8,48}, -{84,8,49}, -{84,8,50}, -{84,8,51}, -{84,8,52}, -{84,8,53}, -{84,8,54}, -{84,8,55}, -{84,8,56}, -{84,8,57}, -{84,8,58}, -{84,8,59}, -{84,9,-24}, -{84,9,-23}, -{84,9,-22}, -{84,9,-21}, -{84,9,-20}, -{84,9,-19}, -{84,9,-18}, -{84,9,-17}, -{84,9,-16}, -{84,9,-15}, -{84,9,-14}, -{84,9,-13}, -{84,9,-12}, -{84,9,-11}, -{84,9,-10}, -{84,9,-9}, -{84,9,-8}, -{84,9,-7}, -{84,9,-6}, -{84,9,-5}, -{84,9,-4}, -{84,9,-3}, -{84,9,-2}, -{84,9,-1}, -{84,9,0}, -{84,9,1}, -{84,9,2}, -{84,9,3}, -{84,9,4}, -{84,9,5}, -{84,9,6}, -{84,9,7}, -{84,9,8}, -{84,9,9}, -{84,9,10}, -{84,9,11}, -{84,9,12}, -{84,9,13}, -{84,9,14}, -{84,9,15}, -{84,9,16}, -{84,9,17}, -{84,9,18}, -{84,9,19}, -{84,9,20}, -{84,9,21}, -{84,9,22}, -{84,9,23}, -{84,9,24}, -{84,9,25}, -{84,9,26}, -{84,9,27}, -{84,9,28}, -{84,9,29}, -{84,9,30}, -{84,9,31}, -{84,9,32}, -{84,9,33}, -{84,9,34}, -{84,9,35}, -{84,9,36}, -{84,9,37}, -{84,9,38}, -{84,9,39}, -{84,9,40}, -{84,9,41}, -{84,9,42}, -{84,9,43}, -{84,9,44}, -{84,9,45}, -{84,9,46}, -{84,9,47}, -{84,9,48}, -{84,9,49}, -{84,9,50}, -{84,9,51}, -{84,9,52}, -{84,9,53}, -{84,9,54}, -{84,10,-24}, -{84,10,-23}, -{84,10,-22}, -{84,10,-21}, -{84,10,-20}, -{84,10,-19}, -{84,10,-18}, -{84,10,-17}, -{84,10,-16}, -{84,10,-15}, -{84,10,-14}, -{84,10,-13}, -{84,10,-12}, -{84,10,-11}, -{84,10,-10}, -{84,10,-9}, -{84,10,-8}, -{84,10,-7}, -{84,10,-6}, -{84,10,-5}, -{84,10,-4}, -{84,10,-3}, -{84,10,-2}, -{84,10,-1}, -{84,10,0}, -{84,10,1}, -{84,10,2}, -{84,10,3}, -{84,10,4}, -{84,10,5}, -{84,10,6}, -{84,10,7}, -{84,10,8}, -{84,10,9}, -{84,10,10}, -{84,10,11}, -{84,10,12}, -{84,10,13}, -{84,10,14}, -{84,10,15}, -{84,10,16}, -{84,10,17}, -{84,10,18}, -{84,10,19}, -{84,10,20}, -{84,10,21}, -{84,10,22}, -{84,10,23}, -{84,10,24}, -{84,10,25}, -{84,10,26}, -{84,10,27}, -{84,10,28}, -{84,10,29}, -{84,10,30}, -{84,10,31}, -{84,10,32}, -{84,10,33}, -{84,10,34}, -{84,10,35}, -{84,10,36}, -{84,10,37}, -{84,10,38}, -{84,10,39}, -{84,10,40}, -{84,10,41}, -{84,10,42}, -{84,10,43}, -{84,10,44}, -{84,10,45}, -{84,10,46}, -{84,10,47}, -{84,10,48}, -{84,10,49}, -{84,11,-24}, -{84,11,-23}, -{84,11,-22}, -{84,11,-21}, -{84,11,-20}, -{84,11,-19}, -{84,11,-18}, -{84,11,-17}, -{84,11,-16}, -{84,11,-15}, -{84,11,-14}, -{84,11,-13}, -{84,11,-12}, -{84,11,-11}, -{84,11,-10}, -{84,11,-9}, -{84,11,-8}, -{84,11,-7}, -{84,11,-6}, -{84,11,-5}, -{84,11,-4}, -{84,11,-3}, -{84,11,-2}, -{84,11,-1}, -{84,11,0}, -{84,11,1}, -{84,11,2}, -{84,11,3}, -{84,11,4}, -{84,11,5}, -{84,11,6}, -{84,11,7}, -{84,11,8}, -{84,11,9}, -{84,11,10}, -{84,11,11}, -{84,11,12}, -{84,11,13}, -{84,11,14}, -{84,11,15}, -{84,11,16}, -{84,11,17}, -{84,11,18}, -{84,11,19}, -{84,11,20}, -{84,11,21}, -{84,11,22}, -{84,11,23}, -{84,11,24}, -{84,11,25}, -{84,11,26}, -{84,11,27}, -{84,11,28}, -{84,11,29}, -{84,11,30}, -{84,11,31}, -{84,11,32}, -{84,11,33}, -{84,11,34}, -{84,11,35}, -{84,11,36}, -{84,11,37}, -{84,11,38}, -{84,11,39}, -{84,11,40}, -{84,11,41}, -{84,11,42}, -{84,11,43}, -{84,11,44}, -{84,12,-24}, -{84,12,-23}, -{84,12,-22}, -{84,12,-21}, -{84,12,-20}, -{84,12,-19}, -{84,12,-18}, -{84,12,-17}, -{84,12,-16}, -{84,12,-15}, -{84,12,-14}, -{84,12,-13}, -{84,12,-12}, -{84,12,-11}, -{84,12,-10}, -{84,12,-9}, -{84,12,-8}, -{84,12,-7}, -{84,12,-6}, -{84,12,-5}, -{84,12,-4}, -{84,12,-3}, -{84,12,-2}, -{84,12,-1}, -{84,12,0}, -{84,12,1}, -{84,12,2}, -{84,12,3}, -{84,12,4}, -{84,12,5}, -{84,12,6}, -{84,12,7}, -{84,12,8}, -{84,12,9}, -{84,12,10}, -{84,12,11}, -{84,12,12}, -{84,12,13}, -{84,12,14}, -{84,12,15}, -{84,12,16}, -{84,12,17}, -{84,12,18}, -{84,12,19}, -{84,12,20}, -{84,12,21}, -{84,12,22}, -{84,12,23}, -{84,12,24}, -{84,12,25}, -{84,12,26}, -{84,12,27}, -{84,12,28}, -{84,12,29}, -{84,12,30}, -{84,12,31}, -{84,12,32}, -{84,12,33}, -{84,12,34}, -{84,12,35}, -{84,12,36}, -{84,12,37}, -{84,12,38}, -{84,12,39}, -{84,12,40}, -{84,13,-24}, -{84,13,-23}, -{84,13,-22}, -{84,13,-21}, -{84,13,-20}, -{84,13,-19}, -{84,13,-18}, -{84,13,-17}, -{84,13,-16}, -{84,13,-15}, -{84,13,-14}, -{84,13,-13}, -{84,13,-12}, -{84,13,-11}, -{84,13,-10}, -{84,13,-9}, -{84,13,-8}, -{84,13,-7}, -{84,13,-6}, -{84,13,-5}, -{84,13,-4}, -{84,13,-3}, -{84,13,-2}, -{84,13,-1}, -{84,13,0}, -{84,13,1}, -{84,13,2}, -{84,13,3}, -{84,13,4}, -{84,13,5}, -{84,13,6}, -{84,13,7}, -{84,13,8}, -{84,13,9}, -{84,13,10}, -{84,13,11}, -{84,13,12}, -{84,13,13}, -{84,13,14}, -{84,13,15}, -{84,13,16}, -{84,13,17}, -{84,13,18}, -{84,13,19}, -{84,13,20}, -{84,13,21}, -{84,13,22}, -{84,13,23}, -{84,13,24}, -{84,13,25}, -{84,13,26}, -{84,13,27}, -{84,13,28}, -{84,13,29}, -{84,13,30}, -{84,13,31}, -{84,13,32}, -{84,13,33}, -{84,13,34}, -{84,13,35}, -{84,13,36}, -{84,14,-24}, -{84,14,-23}, -{84,14,-22}, -{84,14,-21}, -{84,14,-20}, -{84,14,-19}, -{84,14,-18}, -{84,14,-17}, -{84,14,-16}, -{84,14,-15}, -{84,14,-14}, -{84,14,-13}, -{84,14,-12}, -{84,14,-11}, -{84,14,-10}, -{84,14,-9}, -{84,14,-8}, -{84,14,-7}, -{84,14,-6}, -{84,14,-5}, -{84,14,-4}, -{84,14,-3}, -{84,14,-2}, -{84,14,-1}, -{84,14,0}, -{84,14,1}, -{84,14,2}, -{84,14,3}, -{84,14,4}, -{84,14,5}, -{84,14,6}, -{84,14,7}, -{84,14,8}, -{84,14,9}, -{84,14,10}, -{84,14,11}, -{84,14,12}, -{84,14,13}, -{84,14,14}, -{84,14,15}, -{84,14,16}, -{84,14,17}, -{84,14,18}, -{84,14,19}, -{84,14,20}, -{84,14,21}, -{84,14,22}, -{84,14,23}, -{84,14,24}, -{84,14,25}, -{84,14,26}, -{84,14,27}, -{84,14,28}, -{84,14,29}, -{84,14,30}, -{84,14,31}, -{84,14,32}, -{84,15,-24}, -{84,15,-23}, -{84,15,-22}, -{84,15,-21}, -{84,15,-20}, -{84,15,-19}, -{84,15,-18}, -{84,15,-17}, -{84,15,-16}, -{84,15,-15}, -{84,15,-14}, -{84,15,-13}, -{84,15,-12}, -{84,15,-11}, -{84,15,-10}, -{84,15,-9}, -{84,15,-8}, -{84,15,-7}, -{84,15,-6}, -{84,15,-5}, -{84,15,-4}, -{84,15,-3}, -{84,15,-2}, -{84,15,-1}, -{84,15,0}, -{84,15,1}, -{84,15,2}, -{84,15,3}, -{84,15,4}, -{84,15,5}, -{84,15,6}, -{84,15,7}, -{84,15,8}, -{84,15,9}, -{84,15,10}, -{84,15,11}, -{84,15,12}, -{84,15,13}, -{84,15,14}, -{84,15,15}, -{84,15,16}, -{84,15,17}, -{84,15,18}, -{84,15,19}, -{84,15,20}, -{84,15,21}, -{84,15,22}, -{84,15,23}, -{84,15,24}, -{84,15,25}, -{84,15,26}, -{84,15,27}, -{84,15,28}, -{84,15,29}, -{84,16,-24}, -{84,16,-23}, -{84,16,-22}, -{84,16,-21}, -{84,16,-20}, -{84,16,-19}, -{84,16,-18}, -{84,16,-17}, -{84,16,-16}, -{84,16,-15}, -{84,16,-14}, -{84,16,-13}, -{84,16,-12}, -{84,16,-11}, -{84,16,-10}, -{84,16,-9}, -{84,16,-8}, -{84,16,-7}, -{84,16,-6}, -{84,16,-5}, -{84,16,-4}, -{84,16,-3}, -{84,16,-2}, -{84,16,-1}, -{84,16,0}, -{84,16,1}, -{84,16,2}, -{84,16,3}, -{84,16,4}, -{84,16,5}, -{84,16,6}, -{84,16,7}, -{84,16,8}, -{84,16,9}, -{84,16,10}, -{84,16,11}, -{84,16,12}, -{84,16,13}, -{84,16,14}, -{84,16,15}, -{84,16,16}, -{84,16,17}, -{84,16,18}, -{84,16,19}, -{84,16,20}, -{84,16,21}, -{84,16,22}, -{84,16,23}, -{84,16,24}, -{84,16,25}, -{84,17,-24}, -{84,17,-23}, -{84,17,-22}, -{84,17,-21}, -{84,17,-20}, -{84,17,-19}, -{84,17,-18}, -{84,17,-17}, -{84,17,-16}, -{84,17,-15}, -{84,17,-14}, -{84,17,-13}, -{84,17,-12}, -{84,17,-11}, -{84,17,-10}, -{84,17,-9}, -{84,17,-8}, -{84,17,-7}, -{84,17,-6}, -{84,17,-5}, -{84,17,-4}, -{84,17,-3}, -{84,17,-2}, -{84,17,-1}, -{84,17,0}, -{84,17,1}, -{84,17,2}, -{84,17,3}, -{84,17,4}, -{84,17,5}, -{84,17,6}, -{84,17,7}, -{84,17,8}, -{84,17,9}, -{84,17,10}, -{84,17,11}, -{84,17,12}, -{84,17,13}, -{84,17,14}, -{84,17,15}, -{84,17,16}, -{84,17,17}, -{84,17,18}, -{84,17,19}, -{84,17,20}, -{84,17,21}, -{84,17,22}, -{84,18,-24}, -{84,18,-23}, -{84,18,-22}, -{84,18,-21}, -{84,18,-20}, -{84,18,-19}, -{84,18,-18}, -{84,18,-17}, -{84,18,-16}, -{84,18,-15}, -{84,18,-14}, -{84,18,-13}, -{84,18,-12}, -{84,18,-11}, -{84,18,-10}, -{84,18,-9}, -{84,18,-8}, -{84,18,-7}, -{84,18,-6}, -{84,18,-5}, -{84,18,-4}, -{84,18,-3}, -{84,18,-2}, -{84,18,-1}, -{84,18,0}, -{84,18,1}, -{84,18,2}, -{84,18,3}, -{84,18,4}, -{84,18,5}, -{84,18,6}, -{84,18,7}, -{84,18,8}, -{84,18,9}, -{84,18,10}, -{84,18,11}, -{84,18,12}, -{84,18,13}, -{84,18,14}, -{84,18,15}, -{84,18,16}, -{84,18,17}, -{84,18,18}, -{84,18,19}, -{84,19,-24}, -{84,19,-23}, -{84,19,-22}, -{84,19,-21}, -{84,19,-20}, -{84,19,-19}, -{84,19,-18}, -{84,19,-17}, -{84,19,-16}, -{84,19,-15}, -{84,19,-14}, -{84,19,-13}, -{84,19,-12}, -{84,19,-11}, -{84,19,-10}, -{84,19,-9}, -{84,19,-8}, -{84,19,-7}, -{84,19,-6}, -{84,19,-5}, -{84,19,-4}, -{84,19,-3}, -{84,19,-2}, -{84,19,-1}, -{84,19,0}, -{84,19,1}, -{84,19,2}, -{84,19,3}, -{84,19,4}, -{84,19,5}, -{84,19,6}, -{84,19,7}, -{84,19,8}, -{84,19,9}, -{84,19,10}, -{84,19,11}, -{84,19,12}, -{84,19,13}, -{84,19,14}, -{84,19,15}, -{84,19,16}, -{84,20,-24}, -{84,20,-23}, -{84,20,-22}, -{84,20,-21}, -{84,20,-20}, -{84,20,-19}, -{84,20,-18}, -{84,20,-17}, -{84,20,-16}, -{84,20,-15}, -{84,20,-14}, -{84,20,-13}, -{84,20,-12}, -{84,20,-11}, -{84,20,-10}, -{84,20,-9}, -{84,20,-8}, -{84,20,-7}, -{84,20,-6}, -{84,20,-5}, -{84,20,-4}, -{84,20,-3}, -{84,20,-2}, -{84,20,-1}, -{84,20,0}, -{84,20,1}, -{84,20,2}, -{84,20,3}, -{84,20,4}, -{84,20,5}, -{84,20,6}, -{84,20,7}, -{84,20,8}, -{84,20,9}, -{84,20,10}, -{84,20,11}, -{84,20,12}, -{84,20,13}, -{84,21,-24}, -{84,21,-23}, -{84,21,-22}, -{84,21,-21}, -{84,21,-20}, -{84,21,-19}, -{84,21,-18}, -{84,21,-17}, -{84,21,-16}, -{84,21,-15}, -{84,21,-14}, -{84,21,-13}, -{84,21,-12}, -{84,21,-11}, -{84,21,-10}, -{84,21,-9}, -{84,21,-8}, -{84,21,-7}, -{84,21,-6}, -{84,21,-5}, -{84,21,-4}, -{84,21,-3}, -{84,21,-2}, -{84,21,-1}, -{84,21,0}, -{84,21,1}, -{84,21,2}, -{84,21,3}, -{84,21,4}, -{84,21,5}, -{84,21,6}, -{84,21,7}, -{84,21,8}, -{84,21,9}, -{84,21,10}, -{84,22,-24}, -{84,22,-23}, -{84,22,-22}, -{84,22,-21}, -{84,22,-20}, -{84,22,-19}, -{84,22,-18}, -{84,22,-17}, -{84,22,-16}, -{84,22,-15}, -{84,22,-14}, -{84,22,-13}, -{84,22,-12}, -{84,22,-11}, -{84,22,-10}, -{84,22,-9}, -{84,22,-8}, -{84,22,-7}, -{84,22,-6}, -{84,22,-5}, -{84,22,-4}, -{84,22,-3}, -{84,22,-2}, -{84,22,-1}, -{84,22,0}, -{84,22,1}, -{84,22,2}, -{84,22,3}, -{84,22,4}, -{84,22,5}, -{84,22,6}, -{84,22,7}, -{84,23,-24}, -{84,23,-23}, -{84,23,-22}, -{84,23,-21}, -{84,23,-20}, -{84,23,-19}, -{84,23,-18}, -{84,23,-17}, -{84,23,-16}, -{84,23,-15}, -{84,23,-14}, -{84,23,-13}, -{84,23,-12}, -{84,23,-11}, -{84,23,-10}, -{84,23,-9}, -{84,23,-8}, -{84,23,-7}, -{84,23,-6}, -{84,23,-5}, -{84,23,-4}, -{84,23,-3}, -{84,23,-2}, -{84,23,-1}, -{84,23,0}, -{84,23,1}, -{84,23,2}, -{84,23,3}, -{84,23,4}, -{84,24,-24}, -{84,24,-23}, -{84,24,-22}, -{84,24,-21}, -{84,24,-20}, -{84,24,-19}, -{84,24,-18}, -{84,24,-17}, -{84,24,-16}, -{84,24,-15}, -{84,24,-14}, -{84,24,-13}, -{84,24,-12}, -{84,24,-11}, -{84,24,-10}, -{84,24,-9}, -{84,24,-8}, -{84,24,-7}, -{84,24,-6}, -{84,24,-5}, -{84,24,-4}, -{84,24,-3}, -{84,24,-2}, -{84,24,-1}, -{84,24,0}, -{84,24,1}, -{84,24,2}, -{84,25,-24}, -{84,25,-23}, -{84,25,-22}, -{84,25,-21}, -{84,25,-20}, -{84,25,-19}, -{84,25,-18}, -{84,25,-17}, -{84,25,-16}, -{84,25,-15}, -{84,25,-14}, -{84,25,-13}, -{84,25,-12}, -{84,25,-11}, -{84,25,-10}, -{84,25,-9}, -{84,25,-8}, -{84,25,-7}, -{84,25,-6}, -{84,25,-5}, -{84,25,-4}, -{84,25,-3}, -{84,25,-2}, -{84,25,-1}, -{84,26,-24}, -{84,26,-23}, -{84,26,-22}, -{84,26,-21}, -{84,26,-20}, -{84,26,-19}, -{84,26,-18}, -{84,26,-17}, -{84,26,-16}, -{84,26,-15}, -{84,26,-14}, -{84,26,-13}, -{84,26,-12}, -{84,26,-11}, -{84,26,-10}, -{84,26,-9}, -{84,26,-8}, -{84,26,-7}, -{84,26,-6}, -{84,26,-5}, -{84,26,-4}, -{84,26,-3}, -{84,27,-24}, -{84,27,-23}, -{84,27,-22}, -{84,27,-21}, -{84,27,-20}, -{84,27,-19}, -{84,27,-18}, -{84,27,-17}, -{84,27,-16}, -{84,27,-15}, -{84,27,-14}, -{84,27,-13}, -{84,27,-12}, -{84,27,-11}, -{84,27,-10}, -{84,27,-9}, -{84,27,-8}, -{84,27,-7}, -{84,27,-6}, -{84,28,-24}, -{84,28,-23}, -{84,28,-22}, -{84,28,-21}, -{84,28,-20}, -{84,28,-19}, -{84,28,-18}, -{84,28,-17}, -{84,28,-16}, -{84,28,-15}, -{84,28,-14}, -{84,28,-13}, -{84,28,-12}, -{84,28,-11}, -{84,28,-10}, -{84,28,-9}, -{84,28,-8}, -{84,29,-24}, -{84,29,-23}, -{84,29,-22}, -{84,29,-21}, -{84,29,-20}, -{84,29,-19}, -{84,29,-18}, -{84,29,-17}, -{84,29,-16}, -{84,29,-15}, -{84,29,-14}, -{84,29,-13}, -{84,29,-12}, -{84,29,-11}, -{84,29,-10}, -{84,30,-24}, -{84,30,-23}, -{84,30,-22}, -{84,30,-21}, -{84,30,-20}, -{84,30,-19}, -{84,30,-18}, -{84,30,-17}, -{84,30,-16}, -{84,30,-15}, -{84,30,-14}, -{84,30,-13}, -{84,31,-24}, -{84,31,-23}, -{84,31,-22}, -{84,31,-21}, -{84,31,-20}, -{84,31,-19}, -{84,31,-18}, -{84,31,-17}, -{84,31,-16}, -{84,31,-15}, -{84,32,-24}, -{84,32,-23}, -{84,32,-22}, -{84,32,-21}, -{84,32,-20}, -{84,32,-19}, -{84,32,-18}, -{84,32,-17}, -{84,33,-24}, -{84,33,-23}, -{84,33,-22}, -{84,33,-21}, -{84,33,-20}, -{84,33,-19}, -{84,34,-24}, -{84,34,-23}, -{84,34,-22}, -{84,34,-21}, -{84,35,-24}, -{84,35,-23}, -{85,-84,81}, -{85,-83,76}, -{85,-83,77}, -{85,-83,78}, -{85,-83,79}, -{85,-83,80}, -{85,-83,81}, -{85,-82,72}, -{85,-82,73}, -{85,-82,74}, -{85,-82,75}, -{85,-82,76}, -{85,-82,77}, -{85,-82,78}, -{85,-82,79}, -{85,-82,80}, -{85,-82,81}, -{85,-81,68}, -{85,-81,69}, -{85,-81,70}, -{85,-81,71}, -{85,-81,72}, -{85,-81,73}, -{85,-81,74}, -{85,-81,75}, -{85,-81,76}, -{85,-81,77}, -{85,-81,78}, -{85,-81,79}, -{85,-81,80}, -{85,-81,81}, -{85,-80,64}, -{85,-80,65}, -{85,-80,66}, -{85,-80,67}, -{85,-80,68}, -{85,-80,69}, -{85,-80,70}, -{85,-80,71}, -{85,-80,72}, -{85,-80,73}, -{85,-80,74}, -{85,-80,75}, -{85,-80,76}, -{85,-80,77}, -{85,-80,78}, -{85,-80,79}, -{85,-80,80}, -{85,-80,81}, -{85,-79,60}, -{85,-79,61}, -{85,-79,62}, -{85,-79,63}, -{85,-79,64}, -{85,-79,65}, -{85,-79,66}, -{85,-79,67}, -{85,-79,68}, -{85,-79,69}, -{85,-79,70}, -{85,-79,71}, -{85,-79,72}, -{85,-79,73}, -{85,-79,74}, -{85,-79,75}, -{85,-79,76}, -{85,-79,77}, -{85,-79,78}, -{85,-79,79}, -{85,-79,80}, -{85,-79,81}, -{85,-78,57}, -{85,-78,58}, -{85,-78,59}, -{85,-78,60}, -{85,-78,61}, -{85,-78,62}, -{85,-78,63}, -{85,-78,64}, -{85,-78,65}, -{85,-78,66}, -{85,-78,67}, -{85,-78,68}, -{85,-78,69}, -{85,-78,70}, -{85,-78,71}, -{85,-78,72}, -{85,-78,73}, -{85,-78,74}, -{85,-78,75}, -{85,-78,76}, -{85,-78,77}, -{85,-78,78}, -{85,-78,79}, -{85,-78,80}, -{85,-78,81}, -{85,-77,53}, -{85,-77,54}, -{85,-77,55}, -{85,-77,56}, -{85,-77,57}, -{85,-77,58}, -{85,-77,59}, -{85,-77,60}, -{85,-77,61}, -{85,-77,62}, -{85,-77,63}, -{85,-77,64}, -{85,-77,65}, -{85,-77,66}, -{85,-77,67}, -{85,-77,68}, -{85,-77,69}, -{85,-77,70}, -{85,-77,71}, -{85,-77,72}, -{85,-77,73}, -{85,-77,74}, -{85,-77,75}, -{85,-77,76}, -{85,-77,77}, -{85,-77,78}, -{85,-77,79}, -{85,-77,80}, -{85,-77,81}, -{85,-76,50}, -{85,-76,51}, -{85,-76,52}, -{85,-76,53}, -{85,-76,54}, -{85,-76,55}, -{85,-76,56}, -{85,-76,57}, -{85,-76,58}, -{85,-76,59}, -{85,-76,60}, -{85,-76,61}, -{85,-76,62}, -{85,-76,63}, -{85,-76,64}, -{85,-76,65}, -{85,-76,66}, -{85,-76,67}, -{85,-76,68}, -{85,-76,69}, -{85,-76,70}, -{85,-76,71}, -{85,-76,72}, -{85,-76,73}, -{85,-76,74}, -{85,-76,75}, -{85,-76,76}, -{85,-76,77}, -{85,-76,78}, -{85,-76,79}, -{85,-76,80}, -{85,-76,81}, -{85,-75,47}, -{85,-75,48}, -{85,-75,49}, -{85,-75,50}, -{85,-75,51}, -{85,-75,52}, -{85,-75,53}, -{85,-75,54}, -{85,-75,55}, -{85,-75,56}, -{85,-75,57}, -{85,-75,58}, -{85,-75,59}, -{85,-75,60}, -{85,-75,61}, -{85,-75,62}, -{85,-75,63}, -{85,-75,64}, -{85,-75,65}, -{85,-75,66}, -{85,-75,67}, -{85,-75,68}, -{85,-75,69}, -{85,-75,70}, -{85,-75,71}, -{85,-75,72}, -{85,-75,73}, -{85,-75,74}, -{85,-75,75}, -{85,-75,76}, -{85,-75,77}, -{85,-75,78}, -{85,-75,79}, -{85,-75,80}, -{85,-75,81}, -{85,-74,44}, -{85,-74,45}, -{85,-74,46}, -{85,-74,47}, -{85,-74,48}, -{85,-74,49}, -{85,-74,50}, -{85,-74,51}, -{85,-74,52}, -{85,-74,53}, -{85,-74,54}, -{85,-74,55}, -{85,-74,56}, -{85,-74,57}, -{85,-74,58}, -{85,-74,59}, -{85,-74,60}, -{85,-74,61}, -{85,-74,62}, -{85,-74,63}, -{85,-74,64}, -{85,-74,65}, -{85,-74,66}, -{85,-74,67}, -{85,-74,68}, -{85,-74,69}, -{85,-74,70}, -{85,-74,71}, -{85,-74,72}, -{85,-74,73}, -{85,-74,74}, -{85,-74,75}, -{85,-74,76}, -{85,-74,77}, -{85,-74,78}, -{85,-74,79}, -{85,-74,80}, -{85,-74,81}, -{85,-73,42}, -{85,-73,43}, -{85,-73,44}, -{85,-73,45}, -{85,-73,46}, -{85,-73,47}, -{85,-73,48}, -{85,-73,49}, -{85,-73,50}, -{85,-73,51}, -{85,-73,52}, -{85,-73,53}, -{85,-73,54}, -{85,-73,55}, -{85,-73,56}, -{85,-73,57}, -{85,-73,58}, -{85,-73,59}, -{85,-73,60}, -{85,-73,61}, -{85,-73,62}, -{85,-73,63}, -{85,-73,64}, -{85,-73,65}, -{85,-73,66}, -{85,-73,67}, -{85,-73,68}, -{85,-73,69}, -{85,-73,70}, -{85,-73,71}, -{85,-73,72}, -{85,-73,73}, -{85,-73,74}, -{85,-73,75}, -{85,-73,76}, -{85,-73,77}, -{85,-73,78}, -{85,-73,79}, -{85,-73,80}, -{85,-73,81}, -{85,-72,39}, -{85,-72,40}, -{85,-72,41}, -{85,-72,42}, -{85,-72,43}, -{85,-72,44}, -{85,-72,45}, -{85,-72,46}, -{85,-72,47}, -{85,-72,48}, -{85,-72,49}, -{85,-72,50}, -{85,-72,51}, -{85,-72,52}, -{85,-72,53}, -{85,-72,54}, -{85,-72,55}, -{85,-72,56}, -{85,-72,57}, -{85,-72,58}, -{85,-72,59}, -{85,-72,60}, -{85,-72,61}, -{85,-72,62}, -{85,-72,63}, -{85,-72,64}, -{85,-72,65}, -{85,-72,66}, -{85,-72,67}, -{85,-72,68}, -{85,-72,69}, -{85,-72,70}, -{85,-72,71}, -{85,-72,72}, -{85,-72,73}, -{85,-72,74}, -{85,-72,75}, -{85,-72,76}, -{85,-72,77}, -{85,-72,78}, -{85,-72,79}, -{85,-72,80}, -{85,-72,81}, -{85,-71,37}, -{85,-71,38}, -{85,-71,39}, -{85,-71,40}, -{85,-71,41}, -{85,-71,42}, -{85,-71,43}, -{85,-71,44}, -{85,-71,45}, -{85,-71,46}, -{85,-71,47}, -{85,-71,48}, -{85,-71,49}, -{85,-71,50}, -{85,-71,51}, -{85,-71,52}, -{85,-71,53}, -{85,-71,54}, -{85,-71,55}, -{85,-71,56}, -{85,-71,57}, -{85,-71,58}, -{85,-71,59}, -{85,-71,60}, -{85,-71,61}, -{85,-71,62}, -{85,-71,63}, -{85,-71,64}, -{85,-71,65}, -{85,-71,66}, -{85,-71,67}, -{85,-71,68}, -{85,-71,69}, -{85,-71,70}, -{85,-71,71}, -{85,-71,72}, -{85,-71,73}, -{85,-71,74}, -{85,-71,75}, -{85,-71,76}, -{85,-71,77}, -{85,-71,78}, -{85,-71,79}, -{85,-71,80}, -{85,-71,81}, -{85,-70,34}, -{85,-70,35}, -{85,-70,36}, -{85,-70,37}, -{85,-70,38}, -{85,-70,39}, -{85,-70,40}, -{85,-70,41}, -{85,-70,42}, -{85,-70,43}, -{85,-70,44}, -{85,-70,45}, -{85,-70,46}, -{85,-70,47}, -{85,-70,48}, -{85,-70,49}, -{85,-70,50}, -{85,-70,51}, -{85,-70,52}, -{85,-70,53}, -{85,-70,54}, -{85,-70,55}, -{85,-70,56}, -{85,-70,57}, -{85,-70,58}, -{85,-70,59}, -{85,-70,60}, -{85,-70,61}, -{85,-70,62}, -{85,-70,63}, -{85,-70,64}, -{85,-70,65}, -{85,-70,66}, -{85,-70,67}, -{85,-70,68}, -{85,-70,69}, -{85,-70,70}, -{85,-70,71}, -{85,-70,72}, -{85,-70,73}, -{85,-70,74}, -{85,-70,75}, -{85,-70,76}, -{85,-70,77}, -{85,-70,78}, -{85,-70,79}, -{85,-70,80}, -{85,-70,81}, -{85,-69,32}, -{85,-69,33}, -{85,-69,34}, -{85,-69,35}, -{85,-69,36}, -{85,-69,37}, -{85,-69,38}, -{85,-69,39}, -{85,-69,40}, -{85,-69,41}, -{85,-69,42}, -{85,-69,43}, -{85,-69,44}, -{85,-69,45}, -{85,-69,46}, -{85,-69,47}, -{85,-69,48}, -{85,-69,49}, -{85,-69,50}, -{85,-69,51}, -{85,-69,52}, -{85,-69,53}, -{85,-69,54}, -{85,-69,55}, -{85,-69,56}, -{85,-69,57}, -{85,-69,58}, -{85,-69,59}, -{85,-69,60}, -{85,-69,61}, -{85,-69,62}, -{85,-69,63}, -{85,-69,64}, -{85,-69,65}, -{85,-69,66}, -{85,-69,67}, -{85,-69,68}, -{85,-69,69}, -{85,-69,70}, -{85,-69,71}, -{85,-69,72}, -{85,-69,73}, -{85,-69,74}, -{85,-69,75}, -{85,-69,76}, -{85,-69,77}, -{85,-69,78}, -{85,-69,79}, -{85,-69,80}, -{85,-69,81}, -{85,-68,29}, -{85,-68,30}, -{85,-68,31}, -{85,-68,32}, -{85,-68,33}, -{85,-68,34}, -{85,-68,35}, -{85,-68,36}, -{85,-68,37}, -{85,-68,38}, -{85,-68,39}, -{85,-68,40}, -{85,-68,41}, -{85,-68,42}, -{85,-68,43}, -{85,-68,44}, -{85,-68,45}, -{85,-68,46}, -{85,-68,47}, -{85,-68,48}, -{85,-68,49}, -{85,-68,50}, -{85,-68,51}, -{85,-68,52}, -{85,-68,53}, -{85,-68,54}, -{85,-68,55}, -{85,-68,56}, -{85,-68,57}, -{85,-68,58}, -{85,-68,59}, -{85,-68,60}, -{85,-68,61}, -{85,-68,62}, -{85,-68,63}, -{85,-68,64}, -{85,-68,65}, -{85,-68,66}, -{85,-68,67}, -{85,-68,68}, -{85,-68,69}, -{85,-68,70}, -{85,-68,71}, -{85,-68,72}, -{85,-68,73}, -{85,-68,74}, -{85,-68,75}, -{85,-68,76}, -{85,-68,77}, -{85,-68,78}, -{85,-68,79}, -{85,-68,80}, -{85,-68,81}, -{85,-67,27}, -{85,-67,28}, -{85,-67,29}, -{85,-67,30}, -{85,-67,31}, -{85,-67,32}, -{85,-67,33}, -{85,-67,34}, -{85,-67,35}, -{85,-67,36}, -{85,-67,37}, -{85,-67,38}, -{85,-67,39}, -{85,-67,40}, -{85,-67,41}, -{85,-67,42}, -{85,-67,43}, -{85,-67,44}, -{85,-67,45}, -{85,-67,46}, -{85,-67,47}, -{85,-67,48}, -{85,-67,49}, -{85,-67,50}, -{85,-67,51}, -{85,-67,52}, -{85,-67,53}, -{85,-67,54}, -{85,-67,55}, -{85,-67,56}, -{85,-67,57}, -{85,-67,58}, -{85,-67,59}, -{85,-67,60}, -{85,-67,61}, -{85,-67,62}, -{85,-67,63}, -{85,-67,64}, -{85,-67,65}, -{85,-67,66}, -{85,-67,67}, -{85,-67,68}, -{85,-67,69}, -{85,-67,70}, -{85,-67,71}, -{85,-67,72}, -{85,-67,73}, -{85,-67,74}, -{85,-67,75}, -{85,-67,76}, -{85,-67,77}, -{85,-67,78}, -{85,-67,79}, -{85,-67,80}, -{85,-67,81}, -{85,-66,25}, -{85,-66,26}, -{85,-66,27}, -{85,-66,28}, -{85,-66,29}, -{85,-66,30}, -{85,-66,31}, -{85,-66,32}, -{85,-66,33}, -{85,-66,34}, -{85,-66,35}, -{85,-66,36}, -{85,-66,37}, -{85,-66,38}, -{85,-66,39}, -{85,-66,40}, -{85,-66,41}, -{85,-66,42}, -{85,-66,43}, -{85,-66,44}, -{85,-66,45}, -{85,-66,46}, -{85,-66,47}, -{85,-66,48}, -{85,-66,49}, -{85,-66,50}, -{85,-66,51}, -{85,-66,52}, -{85,-66,53}, -{85,-66,54}, -{85,-66,55}, -{85,-66,56}, -{85,-66,57}, -{85,-66,58}, -{85,-66,59}, -{85,-66,60}, -{85,-66,61}, -{85,-66,62}, -{85,-66,63}, -{85,-66,64}, -{85,-66,65}, -{85,-66,66}, -{85,-66,67}, -{85,-66,68}, -{85,-66,69}, -{85,-66,70}, -{85,-66,71}, -{85,-66,72}, -{85,-66,73}, -{85,-66,74}, -{85,-66,75}, -{85,-66,76}, -{85,-66,77}, -{85,-66,78}, -{85,-66,79}, -{85,-66,80}, -{85,-66,81}, -{85,-65,23}, -{85,-65,24}, -{85,-65,25}, -{85,-65,26}, -{85,-65,27}, -{85,-65,28}, -{85,-65,29}, -{85,-65,30}, -{85,-65,31}, -{85,-65,32}, -{85,-65,33}, -{85,-65,34}, -{85,-65,35}, -{85,-65,36}, -{85,-65,37}, -{85,-65,38}, -{85,-65,39}, -{85,-65,40}, -{85,-65,41}, -{85,-65,42}, -{85,-65,43}, -{85,-65,44}, -{85,-65,45}, -{85,-65,46}, -{85,-65,47}, -{85,-65,48}, -{85,-65,49}, -{85,-65,50}, -{85,-65,51}, -{85,-65,52}, -{85,-65,53}, -{85,-65,54}, -{85,-65,55}, -{85,-65,56}, -{85,-65,57}, -{85,-65,58}, -{85,-65,59}, -{85,-65,60}, -{85,-65,61}, -{85,-65,62}, -{85,-65,63}, -{85,-65,64}, -{85,-65,65}, -{85,-65,66}, -{85,-65,67}, -{85,-65,68}, -{85,-65,69}, -{85,-65,70}, -{85,-65,71}, -{85,-65,72}, -{85,-65,73}, -{85,-65,74}, -{85,-65,75}, -{85,-65,76}, -{85,-65,77}, -{85,-65,78}, -{85,-65,79}, -{85,-65,80}, -{85,-65,81}, -{85,-65,82}, -{85,-64,20}, -{85,-64,21}, -{85,-64,22}, -{85,-64,23}, -{85,-64,24}, -{85,-64,25}, -{85,-64,26}, -{85,-64,27}, -{85,-64,28}, -{85,-64,29}, -{85,-64,30}, -{85,-64,31}, -{85,-64,32}, -{85,-64,33}, -{85,-64,34}, -{85,-64,35}, -{85,-64,36}, -{85,-64,37}, -{85,-64,38}, -{85,-64,39}, -{85,-64,40}, -{85,-64,41}, -{85,-64,42}, -{85,-64,43}, -{85,-64,44}, -{85,-64,45}, -{85,-64,46}, -{85,-64,47}, -{85,-64,48}, -{85,-64,49}, -{85,-64,50}, -{85,-64,51}, -{85,-64,52}, -{85,-64,53}, -{85,-64,54}, -{85,-64,55}, -{85,-64,56}, -{85,-64,57}, -{85,-64,58}, -{85,-64,59}, -{85,-64,60}, -{85,-64,61}, -{85,-64,62}, -{85,-64,63}, -{85,-64,64}, -{85,-64,65}, -{85,-64,66}, -{85,-64,67}, -{85,-64,68}, -{85,-64,69}, -{85,-64,70}, -{85,-64,71}, -{85,-64,72}, -{85,-64,73}, -{85,-64,74}, -{85,-64,75}, -{85,-64,76}, -{85,-64,77}, -{85,-64,78}, -{85,-64,79}, -{85,-64,80}, -{85,-64,81}, -{85,-64,82}, -{85,-63,18}, -{85,-63,19}, -{85,-63,20}, -{85,-63,21}, -{85,-63,22}, -{85,-63,23}, -{85,-63,24}, -{85,-63,25}, -{85,-63,26}, -{85,-63,27}, -{85,-63,28}, -{85,-63,29}, -{85,-63,30}, -{85,-63,31}, -{85,-63,32}, -{85,-63,33}, -{85,-63,34}, -{85,-63,35}, -{85,-63,36}, -{85,-63,37}, -{85,-63,38}, -{85,-63,39}, -{85,-63,40}, -{85,-63,41}, -{85,-63,42}, -{85,-63,43}, -{85,-63,44}, -{85,-63,45}, -{85,-63,46}, -{85,-63,47}, -{85,-63,48}, -{85,-63,49}, -{85,-63,50}, -{85,-63,51}, -{85,-63,52}, -{85,-63,53}, -{85,-63,54}, -{85,-63,55}, -{85,-63,56}, -{85,-63,57}, -{85,-63,58}, -{85,-63,59}, -{85,-63,60}, -{85,-63,61}, -{85,-63,62}, -{85,-63,63}, -{85,-63,64}, -{85,-63,65}, -{85,-63,66}, -{85,-63,67}, -{85,-63,68}, -{85,-63,69}, -{85,-63,70}, -{85,-63,71}, -{85,-63,72}, -{85,-63,73}, -{85,-63,74}, -{85,-63,75}, -{85,-63,76}, -{85,-63,77}, -{85,-63,78}, -{85,-63,79}, -{85,-63,80}, -{85,-63,81}, -{85,-63,82}, -{85,-62,16}, -{85,-62,17}, -{85,-62,18}, -{85,-62,19}, -{85,-62,20}, -{85,-62,21}, -{85,-62,22}, -{85,-62,23}, -{85,-62,24}, -{85,-62,25}, -{85,-62,26}, -{85,-62,27}, -{85,-62,28}, -{85,-62,29}, -{85,-62,30}, -{85,-62,31}, -{85,-62,32}, -{85,-62,33}, -{85,-62,34}, -{85,-62,35}, -{85,-62,36}, -{85,-62,37}, -{85,-62,38}, -{85,-62,39}, -{85,-62,40}, -{85,-62,41}, -{85,-62,42}, -{85,-62,43}, -{85,-62,44}, -{85,-62,45}, -{85,-62,46}, -{85,-62,47}, -{85,-62,48}, -{85,-62,49}, -{85,-62,50}, -{85,-62,51}, -{85,-62,52}, -{85,-62,53}, -{85,-62,54}, -{85,-62,55}, -{85,-62,56}, -{85,-62,57}, -{85,-62,58}, -{85,-62,59}, -{85,-62,60}, -{85,-62,61}, -{85,-62,62}, -{85,-62,63}, -{85,-62,64}, -{85,-62,65}, -{85,-62,66}, -{85,-62,67}, -{85,-62,68}, -{85,-62,69}, -{85,-62,70}, -{85,-62,71}, -{85,-62,72}, -{85,-62,73}, -{85,-62,74}, -{85,-62,75}, -{85,-62,76}, -{85,-62,77}, -{85,-62,78}, -{85,-62,79}, -{85,-62,80}, -{85,-62,81}, -{85,-62,82}, -{85,-61,14}, -{85,-61,15}, -{85,-61,16}, -{85,-61,17}, -{85,-61,18}, -{85,-61,19}, -{85,-61,20}, -{85,-61,21}, -{85,-61,22}, -{85,-61,23}, -{85,-61,24}, -{85,-61,25}, -{85,-61,26}, -{85,-61,27}, -{85,-61,28}, -{85,-61,29}, -{85,-61,30}, -{85,-61,31}, -{85,-61,32}, -{85,-61,33}, -{85,-61,34}, -{85,-61,35}, -{85,-61,36}, -{85,-61,37}, -{85,-61,38}, -{85,-61,39}, -{85,-61,40}, -{85,-61,41}, -{85,-61,42}, -{85,-61,43}, -{85,-61,44}, -{85,-61,45}, -{85,-61,46}, -{85,-61,47}, -{85,-61,48}, -{85,-61,49}, -{85,-61,50}, -{85,-61,51}, -{85,-61,52}, -{85,-61,53}, -{85,-61,54}, -{85,-61,55}, -{85,-61,56}, -{85,-61,57}, -{85,-61,58}, -{85,-61,59}, -{85,-61,60}, -{85,-61,61}, -{85,-61,62}, -{85,-61,63}, -{85,-61,64}, -{85,-61,65}, -{85,-61,66}, -{85,-61,67}, -{85,-61,68}, -{85,-61,69}, -{85,-61,70}, -{85,-61,71}, -{85,-61,72}, -{85,-61,73}, -{85,-61,74}, -{85,-61,75}, -{85,-61,76}, -{85,-61,77}, -{85,-61,78}, -{85,-61,79}, -{85,-61,80}, -{85,-61,81}, -{85,-61,82}, -{85,-60,12}, -{85,-60,13}, -{85,-60,14}, -{85,-60,15}, -{85,-60,16}, -{85,-60,17}, -{85,-60,18}, -{85,-60,19}, -{85,-60,20}, -{85,-60,21}, -{85,-60,22}, -{85,-60,23}, -{85,-60,24}, -{85,-60,25}, -{85,-60,26}, -{85,-60,27}, -{85,-60,28}, -{85,-60,29}, -{85,-60,30}, -{85,-60,31}, -{85,-60,32}, -{85,-60,33}, -{85,-60,34}, -{85,-60,35}, -{85,-60,36}, -{85,-60,37}, -{85,-60,38}, -{85,-60,39}, -{85,-60,40}, -{85,-60,41}, -{85,-60,42}, -{85,-60,43}, -{85,-60,44}, -{85,-60,45}, -{85,-60,46}, -{85,-60,47}, -{85,-60,48}, -{85,-60,49}, -{85,-60,50}, -{85,-60,51}, -{85,-60,52}, -{85,-60,53}, -{85,-60,54}, -{85,-60,55}, -{85,-60,56}, -{85,-60,57}, -{85,-60,58}, -{85,-60,59}, -{85,-60,60}, -{85,-60,61}, -{85,-60,62}, -{85,-60,63}, -{85,-60,64}, -{85,-60,65}, -{85,-60,66}, -{85,-60,67}, -{85,-60,68}, -{85,-60,69}, -{85,-60,70}, -{85,-60,71}, -{85,-60,72}, -{85,-60,73}, -{85,-60,74}, -{85,-60,75}, -{85,-60,76}, -{85,-60,77}, -{85,-60,78}, -{85,-60,79}, -{85,-60,80}, -{85,-60,81}, -{85,-60,82}, -{85,-59,10}, -{85,-59,11}, -{85,-59,12}, -{85,-59,13}, -{85,-59,14}, -{85,-59,15}, -{85,-59,16}, -{85,-59,17}, -{85,-59,18}, -{85,-59,19}, -{85,-59,20}, -{85,-59,21}, -{85,-59,22}, -{85,-59,23}, -{85,-59,24}, -{85,-59,25}, -{85,-59,26}, -{85,-59,27}, -{85,-59,28}, -{85,-59,29}, -{85,-59,30}, -{85,-59,31}, -{85,-59,32}, -{85,-59,33}, -{85,-59,34}, -{85,-59,35}, -{85,-59,36}, -{85,-59,37}, -{85,-59,38}, -{85,-59,39}, -{85,-59,40}, -{85,-59,41}, -{85,-59,42}, -{85,-59,43}, -{85,-59,44}, -{85,-59,45}, -{85,-59,46}, -{85,-59,47}, -{85,-59,48}, -{85,-59,49}, -{85,-59,50}, -{85,-59,51}, -{85,-59,52}, -{85,-59,53}, -{85,-59,54}, -{85,-59,55}, -{85,-59,56}, -{85,-59,57}, -{85,-59,58}, -{85,-59,59}, -{85,-59,60}, -{85,-59,61}, -{85,-59,62}, -{85,-59,63}, -{85,-59,64}, -{85,-59,65}, -{85,-59,66}, -{85,-59,67}, -{85,-59,68}, -{85,-59,69}, -{85,-59,70}, -{85,-59,71}, -{85,-59,72}, -{85,-59,73}, -{85,-59,74}, -{85,-59,75}, -{85,-59,76}, -{85,-59,77}, -{85,-59,78}, -{85,-59,79}, -{85,-59,80}, -{85,-59,81}, -{85,-59,82}, -{85,-58,9}, -{85,-58,10}, -{85,-58,11}, -{85,-58,12}, -{85,-58,13}, -{85,-58,14}, -{85,-58,15}, -{85,-58,16}, -{85,-58,17}, -{85,-58,18}, -{85,-58,19}, -{85,-58,20}, -{85,-58,21}, -{85,-58,22}, -{85,-58,23}, -{85,-58,24}, -{85,-58,25}, -{85,-58,26}, -{85,-58,27}, -{85,-58,28}, -{85,-58,29}, -{85,-58,30}, -{85,-58,31}, -{85,-58,32}, -{85,-58,33}, -{85,-58,34}, -{85,-58,35}, -{85,-58,36}, -{85,-58,37}, -{85,-58,38}, -{85,-58,39}, -{85,-58,40}, -{85,-58,41}, -{85,-58,42}, -{85,-58,43}, -{85,-58,44}, -{85,-58,45}, -{85,-58,46}, -{85,-58,47}, -{85,-58,48}, -{85,-58,49}, -{85,-58,50}, -{85,-58,51}, -{85,-58,52}, -{85,-58,53}, -{85,-58,54}, -{85,-58,55}, -{85,-58,56}, -{85,-58,57}, -{85,-58,58}, -{85,-58,59}, -{85,-58,60}, -{85,-58,61}, -{85,-58,62}, -{85,-58,63}, -{85,-58,64}, -{85,-58,65}, -{85,-58,66}, -{85,-58,67}, -{85,-58,68}, -{85,-58,69}, -{85,-58,70}, -{85,-58,71}, -{85,-58,72}, -{85,-58,73}, -{85,-58,74}, -{85,-58,75}, -{85,-58,76}, -{85,-58,77}, -{85,-58,78}, -{85,-58,79}, -{85,-58,80}, -{85,-58,81}, -{85,-58,82}, -{85,-57,7}, -{85,-57,8}, -{85,-57,9}, -{85,-57,10}, -{85,-57,11}, -{85,-57,12}, -{85,-57,13}, -{85,-57,14}, -{85,-57,15}, -{85,-57,16}, -{85,-57,17}, -{85,-57,18}, -{85,-57,19}, -{85,-57,20}, -{85,-57,21}, -{85,-57,22}, -{85,-57,23}, -{85,-57,24}, -{85,-57,25}, -{85,-57,26}, -{85,-57,27}, -{85,-57,28}, -{85,-57,29}, -{85,-57,30}, -{85,-57,31}, -{85,-57,32}, -{85,-57,33}, -{85,-57,34}, -{85,-57,35}, -{85,-57,36}, -{85,-57,37}, -{85,-57,38}, -{85,-57,39}, -{85,-57,40}, -{85,-57,41}, -{85,-57,42}, -{85,-57,43}, -{85,-57,44}, -{85,-57,45}, -{85,-57,46}, -{85,-57,47}, -{85,-57,48}, -{85,-57,49}, -{85,-57,50}, -{85,-57,51}, -{85,-57,52}, -{85,-57,53}, -{85,-57,54}, -{85,-57,55}, -{85,-57,56}, -{85,-57,57}, -{85,-57,58}, -{85,-57,59}, -{85,-57,60}, -{85,-57,61}, -{85,-57,62}, -{85,-57,63}, -{85,-57,64}, -{85,-57,65}, -{85,-57,66}, -{85,-57,67}, -{85,-57,68}, -{85,-57,69}, -{85,-57,70}, -{85,-57,71}, -{85,-57,72}, -{85,-57,73}, -{85,-57,74}, -{85,-57,75}, -{85,-57,76}, -{85,-57,77}, -{85,-57,78}, -{85,-57,79}, -{85,-57,80}, -{85,-57,81}, -{85,-57,82}, -{85,-56,5}, -{85,-56,6}, -{85,-56,7}, -{85,-56,8}, -{85,-56,9}, -{85,-56,10}, -{85,-56,11}, -{85,-56,12}, -{85,-56,13}, -{85,-56,14}, -{85,-56,15}, -{85,-56,16}, -{85,-56,17}, -{85,-56,18}, -{85,-56,19}, -{85,-56,20}, -{85,-56,21}, -{85,-56,22}, -{85,-56,23}, -{85,-56,24}, -{85,-56,25}, -{85,-56,26}, -{85,-56,27}, -{85,-56,28}, -{85,-56,29}, -{85,-56,30}, -{85,-56,31}, -{85,-56,32}, -{85,-56,33}, -{85,-56,34}, -{85,-56,35}, -{85,-56,36}, -{85,-56,37}, -{85,-56,38}, -{85,-56,39}, -{85,-56,40}, -{85,-56,41}, -{85,-56,42}, -{85,-56,43}, -{85,-56,44}, -{85,-56,45}, -{85,-56,46}, -{85,-56,47}, -{85,-56,48}, -{85,-56,49}, -{85,-56,50}, -{85,-56,51}, -{85,-56,52}, -{85,-56,53}, -{85,-56,54}, -{85,-56,55}, -{85,-56,56}, -{85,-56,57}, -{85,-56,58}, -{85,-56,59}, -{85,-56,60}, -{85,-56,61}, -{85,-56,62}, -{85,-56,63}, -{85,-56,64}, -{85,-56,65}, -{85,-56,66}, -{85,-56,67}, -{85,-56,68}, -{85,-56,69}, -{85,-56,70}, -{85,-56,71}, -{85,-56,72}, -{85,-56,73}, -{85,-56,74}, -{85,-56,75}, -{85,-56,76}, -{85,-56,77}, -{85,-56,78}, -{85,-56,79}, -{85,-56,80}, -{85,-56,81}, -{85,-56,82}, -{85,-55,3}, -{85,-55,4}, -{85,-55,5}, -{85,-55,6}, -{85,-55,7}, -{85,-55,8}, -{85,-55,9}, -{85,-55,10}, -{85,-55,11}, -{85,-55,12}, -{85,-55,13}, -{85,-55,14}, -{85,-55,15}, -{85,-55,16}, -{85,-55,17}, -{85,-55,18}, -{85,-55,19}, -{85,-55,20}, -{85,-55,21}, -{85,-55,22}, -{85,-55,23}, -{85,-55,24}, -{85,-55,25}, -{85,-55,26}, -{85,-55,27}, -{85,-55,28}, -{85,-55,29}, -{85,-55,30}, -{85,-55,31}, -{85,-55,32}, -{85,-55,33}, -{85,-55,34}, -{85,-55,35}, -{85,-55,36}, -{85,-55,37}, -{85,-55,38}, -{85,-55,39}, -{85,-55,40}, -{85,-55,41}, -{85,-55,42}, -{85,-55,43}, -{85,-55,44}, -{85,-55,45}, -{85,-55,46}, -{85,-55,47}, -{85,-55,48}, -{85,-55,49}, -{85,-55,50}, -{85,-55,51}, -{85,-55,52}, -{85,-55,53}, -{85,-55,54}, -{85,-55,55}, -{85,-55,56}, -{85,-55,57}, -{85,-55,58}, -{85,-55,59}, -{85,-55,60}, -{85,-55,61}, -{85,-55,62}, -{85,-55,63}, -{85,-55,64}, -{85,-55,65}, -{85,-55,66}, -{85,-55,67}, -{85,-55,68}, -{85,-55,69}, -{85,-55,70}, -{85,-55,71}, -{85,-55,72}, -{85,-55,73}, -{85,-55,74}, -{85,-55,75}, -{85,-55,76}, -{85,-55,77}, -{85,-55,78}, -{85,-55,79}, -{85,-55,80}, -{85,-55,81}, -{85,-55,82}, -{85,-54,1}, -{85,-54,2}, -{85,-54,3}, -{85,-54,4}, -{85,-54,5}, -{85,-54,6}, -{85,-54,7}, -{85,-54,8}, -{85,-54,9}, -{85,-54,10}, -{85,-54,11}, -{85,-54,12}, -{85,-54,13}, -{85,-54,14}, -{85,-54,15}, -{85,-54,16}, -{85,-54,17}, -{85,-54,18}, -{85,-54,19}, -{85,-54,20}, -{85,-54,21}, -{85,-54,22}, -{85,-54,23}, -{85,-54,24}, -{85,-54,25}, -{85,-54,26}, -{85,-54,27}, -{85,-54,28}, -{85,-54,29}, -{85,-54,30}, -{85,-54,31}, -{85,-54,32}, -{85,-54,33}, -{85,-54,34}, -{85,-54,35}, -{85,-54,36}, -{85,-54,37}, -{85,-54,38}, -{85,-54,39}, -{85,-54,40}, -{85,-54,41}, -{85,-54,42}, -{85,-54,43}, -{85,-54,44}, -{85,-54,45}, -{85,-54,46}, -{85,-54,47}, -{85,-54,48}, -{85,-54,49}, -{85,-54,50}, -{85,-54,51}, -{85,-54,52}, -{85,-54,53}, -{85,-54,54}, -{85,-54,55}, -{85,-54,56}, -{85,-54,57}, -{85,-54,58}, -{85,-54,59}, -{85,-54,60}, -{85,-54,61}, -{85,-54,62}, -{85,-54,63}, -{85,-54,64}, -{85,-54,65}, -{85,-54,66}, -{85,-54,67}, -{85,-54,68}, -{85,-54,69}, -{85,-54,70}, -{85,-54,71}, -{85,-54,72}, -{85,-54,73}, -{85,-54,74}, -{85,-54,75}, -{85,-54,76}, -{85,-54,77}, -{85,-54,78}, -{85,-54,79}, -{85,-54,80}, -{85,-54,81}, -{85,-54,82}, -{85,-53,0}, -{85,-53,1}, -{85,-53,2}, -{85,-53,3}, -{85,-53,4}, -{85,-53,5}, -{85,-53,6}, -{85,-53,7}, -{85,-53,8}, -{85,-53,9}, -{85,-53,10}, -{85,-53,11}, -{85,-53,12}, -{85,-53,13}, -{85,-53,14}, -{85,-53,15}, -{85,-53,16}, -{85,-53,17}, -{85,-53,18}, -{85,-53,19}, -{85,-53,20}, -{85,-53,21}, -{85,-53,22}, -{85,-53,23}, -{85,-53,24}, -{85,-53,25}, -{85,-53,26}, -{85,-53,27}, -{85,-53,28}, -{85,-53,29}, -{85,-53,30}, -{85,-53,31}, -{85,-53,32}, -{85,-53,33}, -{85,-53,34}, -{85,-53,35}, -{85,-53,36}, -{85,-53,37}, -{85,-53,38}, -{85,-53,39}, -{85,-53,40}, -{85,-53,41}, -{85,-53,42}, -{85,-53,43}, -{85,-53,44}, -{85,-53,45}, -{85,-53,46}, -{85,-53,47}, -{85,-53,48}, -{85,-53,49}, -{85,-53,50}, -{85,-53,51}, -{85,-53,52}, -{85,-53,53}, -{85,-53,54}, -{85,-53,55}, -{85,-53,56}, -{85,-53,57}, -{85,-53,58}, -{85,-53,59}, -{85,-53,60}, -{85,-53,61}, -{85,-53,62}, -{85,-53,63}, -{85,-53,64}, -{85,-53,65}, -{85,-53,66}, -{85,-53,67}, -{85,-53,68}, -{85,-53,69}, -{85,-53,70}, -{85,-53,71}, -{85,-53,72}, -{85,-53,73}, -{85,-53,74}, -{85,-53,75}, -{85,-53,76}, -{85,-53,77}, -{85,-53,78}, -{85,-53,79}, -{85,-53,80}, -{85,-53,81}, -{85,-53,82}, -{85,-52,-2}, -{85,-52,-1}, -{85,-52,0}, -{85,-52,1}, -{85,-52,2}, -{85,-52,3}, -{85,-52,4}, -{85,-52,5}, -{85,-52,6}, -{85,-52,7}, -{85,-52,8}, -{85,-52,9}, -{85,-52,10}, -{85,-52,11}, -{85,-52,12}, -{85,-52,13}, -{85,-52,14}, -{85,-52,15}, -{85,-52,16}, -{85,-52,17}, -{85,-52,18}, -{85,-52,19}, -{85,-52,20}, -{85,-52,21}, -{85,-52,22}, -{85,-52,23}, -{85,-52,24}, -{85,-52,25}, -{85,-52,26}, -{85,-52,27}, -{85,-52,28}, -{85,-52,29}, -{85,-52,30}, -{85,-52,31}, -{85,-52,32}, -{85,-52,33}, -{85,-52,34}, -{85,-52,35}, -{85,-52,36}, -{85,-52,37}, -{85,-52,38}, -{85,-52,39}, -{85,-52,40}, -{85,-52,41}, -{85,-52,42}, -{85,-52,43}, -{85,-52,44}, -{85,-52,45}, -{85,-52,46}, -{85,-52,47}, -{85,-52,48}, -{85,-52,49}, -{85,-52,50}, -{85,-52,51}, -{85,-52,52}, -{85,-52,53}, -{85,-52,54}, -{85,-52,55}, -{85,-52,56}, -{85,-52,57}, -{85,-52,58}, -{85,-52,59}, -{85,-52,60}, -{85,-52,61}, -{85,-52,62}, -{85,-52,63}, -{85,-52,64}, -{85,-52,65}, -{85,-52,66}, -{85,-52,67}, -{85,-52,68}, -{85,-52,69}, -{85,-52,70}, -{85,-52,71}, -{85,-52,72}, -{85,-52,73}, -{85,-52,74}, -{85,-52,75}, -{85,-52,76}, -{85,-52,77}, -{85,-52,78}, -{85,-52,79}, -{85,-52,80}, -{85,-52,81}, -{85,-52,82}, -{85,-51,-4}, -{85,-51,-3}, -{85,-51,-2}, -{85,-51,-1}, -{85,-51,0}, -{85,-51,1}, -{85,-51,2}, -{85,-51,3}, -{85,-51,4}, -{85,-51,5}, -{85,-51,6}, -{85,-51,7}, -{85,-51,8}, -{85,-51,9}, -{85,-51,10}, -{85,-51,11}, -{85,-51,12}, -{85,-51,13}, -{85,-51,14}, -{85,-51,15}, -{85,-51,16}, -{85,-51,17}, -{85,-51,18}, -{85,-51,19}, -{85,-51,20}, -{85,-51,21}, -{85,-51,22}, -{85,-51,23}, -{85,-51,24}, -{85,-51,25}, -{85,-51,26}, -{85,-51,27}, -{85,-51,28}, -{85,-51,29}, -{85,-51,30}, -{85,-51,31}, -{85,-51,32}, -{85,-51,33}, -{85,-51,34}, -{85,-51,35}, -{85,-51,36}, -{85,-51,37}, -{85,-51,38}, -{85,-51,39}, -{85,-51,40}, -{85,-51,41}, -{85,-51,42}, -{85,-51,43}, -{85,-51,44}, -{85,-51,45}, -{85,-51,46}, -{85,-51,47}, -{85,-51,48}, -{85,-51,49}, -{85,-51,50}, -{85,-51,51}, -{85,-51,52}, -{85,-51,53}, -{85,-51,54}, -{85,-51,55}, -{85,-51,56}, -{85,-51,57}, -{85,-51,58}, -{85,-51,59}, -{85,-51,60}, -{85,-51,61}, -{85,-51,62}, -{85,-51,63}, -{85,-51,64}, -{85,-51,65}, -{85,-51,66}, -{85,-51,67}, -{85,-51,68}, -{85,-51,69}, -{85,-51,70}, -{85,-51,71}, -{85,-51,72}, -{85,-51,73}, -{85,-51,74}, -{85,-51,75}, -{85,-51,76}, -{85,-51,77}, -{85,-51,78}, -{85,-51,79}, -{85,-51,80}, -{85,-51,81}, -{85,-51,82}, -{85,-50,-6}, -{85,-50,-5}, -{85,-50,-4}, -{85,-50,-3}, -{85,-50,-2}, -{85,-50,-1}, -{85,-50,0}, -{85,-50,1}, -{85,-50,2}, -{85,-50,3}, -{85,-50,4}, -{85,-50,5}, -{85,-50,6}, -{85,-50,7}, -{85,-50,8}, -{85,-50,9}, -{85,-50,10}, -{85,-50,11}, -{85,-50,12}, -{85,-50,13}, -{85,-50,14}, -{85,-50,15}, -{85,-50,16}, -{85,-50,17}, -{85,-50,18}, -{85,-50,19}, -{85,-50,20}, -{85,-50,21}, -{85,-50,22}, -{85,-50,23}, -{85,-50,24}, -{85,-50,25}, -{85,-50,26}, -{85,-50,27}, -{85,-50,28}, -{85,-50,29}, -{85,-50,30}, -{85,-50,31}, -{85,-50,32}, -{85,-50,33}, -{85,-50,34}, -{85,-50,35}, -{85,-50,36}, -{85,-50,37}, -{85,-50,38}, -{85,-50,39}, -{85,-50,40}, -{85,-50,41}, -{85,-50,42}, -{85,-50,43}, -{85,-50,44}, -{85,-50,45}, -{85,-50,46}, -{85,-50,47}, -{85,-50,48}, -{85,-50,49}, -{85,-50,50}, -{85,-50,51}, -{85,-50,52}, -{85,-50,53}, -{85,-50,54}, -{85,-50,55}, -{85,-50,56}, -{85,-50,57}, -{85,-50,58}, -{85,-50,59}, -{85,-50,60}, -{85,-50,61}, -{85,-50,62}, -{85,-50,63}, -{85,-50,64}, -{85,-50,65}, -{85,-50,66}, -{85,-50,67}, -{85,-50,68}, -{85,-50,69}, -{85,-50,70}, -{85,-50,71}, -{85,-50,72}, -{85,-50,73}, -{85,-50,74}, -{85,-50,75}, -{85,-50,76}, -{85,-50,77}, -{85,-50,78}, -{85,-50,79}, -{85,-50,80}, -{85,-50,81}, -{85,-50,82}, -{85,-49,-7}, -{85,-49,-6}, -{85,-49,-5}, -{85,-49,-4}, -{85,-49,-3}, -{85,-49,-2}, -{85,-49,-1}, -{85,-49,0}, -{85,-49,1}, -{85,-49,2}, -{85,-49,3}, -{85,-49,4}, -{85,-49,5}, -{85,-49,6}, -{85,-49,7}, -{85,-49,8}, -{85,-49,9}, -{85,-49,10}, -{85,-49,11}, -{85,-49,12}, -{85,-49,13}, -{85,-49,14}, -{85,-49,15}, -{85,-49,16}, -{85,-49,17}, -{85,-49,18}, -{85,-49,19}, -{85,-49,20}, -{85,-49,21}, -{85,-49,22}, -{85,-49,23}, -{85,-49,24}, -{85,-49,25}, -{85,-49,26}, -{85,-49,27}, -{85,-49,28}, -{85,-49,29}, -{85,-49,30}, -{85,-49,31}, -{85,-49,32}, -{85,-49,33}, -{85,-49,34}, -{85,-49,35}, -{85,-49,36}, -{85,-49,37}, -{85,-49,38}, -{85,-49,39}, -{85,-49,40}, -{85,-49,41}, -{85,-49,42}, -{85,-49,43}, -{85,-49,44}, -{85,-49,45}, -{85,-49,46}, -{85,-49,47}, -{85,-49,48}, -{85,-49,49}, -{85,-49,50}, -{85,-49,51}, -{85,-49,52}, -{85,-49,53}, -{85,-49,54}, -{85,-49,55}, -{85,-49,56}, -{85,-49,57}, -{85,-49,58}, -{85,-49,59}, -{85,-49,60}, -{85,-49,61}, -{85,-49,62}, -{85,-49,63}, -{85,-49,64}, -{85,-49,65}, -{85,-49,66}, -{85,-49,67}, -{85,-49,68}, -{85,-49,69}, -{85,-49,70}, -{85,-49,71}, -{85,-49,72}, -{85,-49,73}, -{85,-49,74}, -{85,-49,75}, -{85,-49,76}, -{85,-49,77}, -{85,-49,78}, -{85,-49,79}, -{85,-49,80}, -{85,-49,81}, -{85,-49,82}, -{85,-48,-9}, -{85,-48,-8}, -{85,-48,-7}, -{85,-48,-6}, -{85,-48,-5}, -{85,-48,-4}, -{85,-48,-3}, -{85,-48,-2}, -{85,-48,-1}, -{85,-48,0}, -{85,-48,1}, -{85,-48,2}, -{85,-48,3}, -{85,-48,4}, -{85,-48,5}, -{85,-48,6}, -{85,-48,7}, -{85,-48,8}, -{85,-48,9}, -{85,-48,10}, -{85,-48,11}, -{85,-48,12}, -{85,-48,13}, -{85,-48,14}, -{85,-48,15}, -{85,-48,16}, -{85,-48,17}, -{85,-48,18}, -{85,-48,19}, -{85,-48,20}, -{85,-48,21}, -{85,-48,22}, -{85,-48,23}, -{85,-48,24}, -{85,-48,25}, -{85,-48,26}, -{85,-48,27}, -{85,-48,28}, -{85,-48,29}, -{85,-48,30}, -{85,-48,31}, -{85,-48,32}, -{85,-48,33}, -{85,-48,34}, -{85,-48,35}, -{85,-48,36}, -{85,-48,37}, -{85,-48,38}, -{85,-48,39}, -{85,-48,40}, -{85,-48,41}, -{85,-48,42}, -{85,-48,43}, -{85,-48,44}, -{85,-48,45}, -{85,-48,46}, -{85,-48,47}, -{85,-48,48}, -{85,-48,49}, -{85,-48,50}, -{85,-48,51}, -{85,-48,52}, -{85,-48,53}, -{85,-48,54}, -{85,-48,55}, -{85,-48,56}, -{85,-48,57}, -{85,-48,58}, -{85,-48,59}, -{85,-48,60}, -{85,-48,61}, -{85,-48,62}, -{85,-48,63}, -{85,-48,64}, -{85,-48,65}, -{85,-48,66}, -{85,-48,67}, -{85,-48,68}, -{85,-48,69}, -{85,-48,70}, -{85,-48,71}, -{85,-48,72}, -{85,-48,73}, -{85,-48,74}, -{85,-48,75}, -{85,-48,76}, -{85,-48,77}, -{85,-48,78}, -{85,-48,79}, -{85,-48,80}, -{85,-48,81}, -{85,-48,82}, -{85,-47,-10}, -{85,-47,-9}, -{85,-47,-8}, -{85,-47,-7}, -{85,-47,-6}, -{85,-47,-5}, -{85,-47,-4}, -{85,-47,-3}, -{85,-47,-2}, -{85,-47,-1}, -{85,-47,0}, -{85,-47,1}, -{85,-47,2}, -{85,-47,3}, -{85,-47,4}, -{85,-47,5}, -{85,-47,6}, -{85,-47,7}, -{85,-47,8}, -{85,-47,9}, -{85,-47,10}, -{85,-47,11}, -{85,-47,12}, -{85,-47,13}, -{85,-47,14}, -{85,-47,15}, -{85,-47,16}, -{85,-47,17}, -{85,-47,18}, -{85,-47,19}, -{85,-47,20}, -{85,-47,21}, -{85,-47,22}, -{85,-47,23}, -{85,-47,24}, -{85,-47,25}, -{85,-47,26}, -{85,-47,27}, -{85,-47,28}, -{85,-47,29}, -{85,-47,30}, -{85,-47,31}, -{85,-47,32}, -{85,-47,33}, -{85,-47,34}, -{85,-47,35}, -{85,-47,36}, -{85,-47,37}, -{85,-47,38}, -{85,-47,39}, -{85,-47,40}, -{85,-47,41}, -{85,-47,42}, -{85,-47,43}, -{85,-47,44}, -{85,-47,45}, -{85,-47,46}, -{85,-47,47}, -{85,-47,48}, -{85,-47,49}, -{85,-47,50}, -{85,-47,51}, -{85,-47,52}, -{85,-47,53}, -{85,-47,54}, -{85,-47,55}, -{85,-47,56}, -{85,-47,57}, -{85,-47,58}, -{85,-47,59}, -{85,-47,60}, -{85,-47,61}, -{85,-47,62}, -{85,-47,63}, -{85,-47,64}, -{85,-47,65}, -{85,-47,66}, -{85,-47,67}, -{85,-47,68}, -{85,-47,69}, -{85,-47,70}, -{85,-47,71}, -{85,-47,72}, -{85,-47,73}, -{85,-47,74}, -{85,-47,75}, -{85,-47,76}, -{85,-47,77}, -{85,-47,78}, -{85,-47,79}, -{85,-47,80}, -{85,-47,81}, -{85,-47,82}, -{85,-46,-12}, -{85,-46,-11}, -{85,-46,-10}, -{85,-46,-9}, -{85,-46,-8}, -{85,-46,-7}, -{85,-46,-6}, -{85,-46,-5}, -{85,-46,-4}, -{85,-46,-3}, -{85,-46,-2}, -{85,-46,-1}, -{85,-46,0}, -{85,-46,1}, -{85,-46,2}, -{85,-46,3}, -{85,-46,4}, -{85,-46,5}, -{85,-46,6}, -{85,-46,7}, -{85,-46,8}, -{85,-46,9}, -{85,-46,10}, -{85,-46,11}, -{85,-46,12}, -{85,-46,13}, -{85,-46,14}, -{85,-46,15}, -{85,-46,16}, -{85,-46,17}, -{85,-46,18}, -{85,-46,19}, -{85,-46,20}, -{85,-46,21}, -{85,-46,22}, -{85,-46,23}, -{85,-46,24}, -{85,-46,25}, -{85,-46,26}, -{85,-46,27}, -{85,-46,28}, -{85,-46,29}, -{85,-46,30}, -{85,-46,31}, -{85,-46,32}, -{85,-46,33}, -{85,-46,34}, -{85,-46,35}, -{85,-46,36}, -{85,-46,37}, -{85,-46,38}, -{85,-46,39}, -{85,-46,40}, -{85,-46,41}, -{85,-46,42}, -{85,-46,43}, -{85,-46,44}, -{85,-46,45}, -{85,-46,46}, -{85,-46,47}, -{85,-46,48}, -{85,-46,49}, -{85,-46,50}, -{85,-46,51}, -{85,-46,52}, -{85,-46,53}, -{85,-46,54}, -{85,-46,55}, -{85,-46,56}, -{85,-46,57}, -{85,-46,58}, -{85,-46,59}, -{85,-46,60}, -{85,-46,61}, -{85,-46,62}, -{85,-46,63}, -{85,-46,64}, -{85,-46,65}, -{85,-46,66}, -{85,-46,67}, -{85,-46,68}, -{85,-46,69}, -{85,-46,70}, -{85,-46,71}, -{85,-46,72}, -{85,-46,73}, -{85,-46,74}, -{85,-46,75}, -{85,-46,76}, -{85,-46,77}, -{85,-46,78}, -{85,-46,79}, -{85,-46,80}, -{85,-46,81}, -{85,-46,82}, -{85,-45,-14}, -{85,-45,-13}, -{85,-45,-12}, -{85,-45,-11}, -{85,-45,-10}, -{85,-45,-9}, -{85,-45,-8}, -{85,-45,-7}, -{85,-45,-6}, -{85,-45,-5}, -{85,-45,-4}, -{85,-45,-3}, -{85,-45,-2}, -{85,-45,-1}, -{85,-45,0}, -{85,-45,1}, -{85,-45,2}, -{85,-45,3}, -{85,-45,4}, -{85,-45,5}, -{85,-45,6}, -{85,-45,7}, -{85,-45,8}, -{85,-45,9}, -{85,-45,10}, -{85,-45,11}, -{85,-45,12}, -{85,-45,13}, -{85,-45,14}, -{85,-45,15}, -{85,-45,16}, -{85,-45,17}, -{85,-45,18}, -{85,-45,19}, -{85,-45,20}, -{85,-45,21}, -{85,-45,22}, -{85,-45,23}, -{85,-45,24}, -{85,-45,25}, -{85,-45,26}, -{85,-45,27}, -{85,-45,28}, -{85,-45,29}, -{85,-45,30}, -{85,-45,31}, -{85,-45,32}, -{85,-45,33}, -{85,-45,34}, -{85,-45,35}, -{85,-45,36}, -{85,-45,37}, -{85,-45,38}, -{85,-45,39}, -{85,-45,40}, -{85,-45,41}, -{85,-45,42}, -{85,-45,43}, -{85,-45,44}, -{85,-45,45}, -{85,-45,46}, -{85,-45,47}, -{85,-45,48}, -{85,-45,49}, -{85,-45,50}, -{85,-45,51}, -{85,-45,52}, -{85,-45,53}, -{85,-45,54}, -{85,-45,55}, -{85,-45,56}, -{85,-45,57}, -{85,-45,58}, -{85,-45,59}, -{85,-45,60}, -{85,-45,61}, -{85,-45,62}, -{85,-45,63}, -{85,-45,64}, -{85,-45,65}, -{85,-45,66}, -{85,-45,67}, -{85,-45,68}, -{85,-45,69}, -{85,-45,70}, -{85,-45,71}, -{85,-45,72}, -{85,-45,73}, -{85,-45,74}, -{85,-45,75}, -{85,-45,76}, -{85,-45,77}, -{85,-45,78}, -{85,-45,79}, -{85,-45,80}, -{85,-45,81}, -{85,-45,82}, -{85,-45,83}, -{85,-44,-15}, -{85,-44,-14}, -{85,-44,-13}, -{85,-44,-12}, -{85,-44,-11}, -{85,-44,-10}, -{85,-44,-9}, -{85,-44,-8}, -{85,-44,-7}, -{85,-44,-6}, -{85,-44,-5}, -{85,-44,-4}, -{85,-44,-3}, -{85,-44,-2}, -{85,-44,-1}, -{85,-44,0}, -{85,-44,1}, -{85,-44,2}, -{85,-44,3}, -{85,-44,4}, -{85,-44,5}, -{85,-44,6}, -{85,-44,7}, -{85,-44,8}, -{85,-44,9}, -{85,-44,10}, -{85,-44,11}, -{85,-44,12}, -{85,-44,13}, -{85,-44,14}, -{85,-44,15}, -{85,-44,16}, -{85,-44,17}, -{85,-44,18}, -{85,-44,19}, -{85,-44,20}, -{85,-44,21}, -{85,-44,22}, -{85,-44,23}, -{85,-44,24}, -{85,-44,25}, -{85,-44,26}, -{85,-44,27}, -{85,-44,28}, -{85,-44,29}, -{85,-44,30}, -{85,-44,31}, -{85,-44,32}, -{85,-44,33}, -{85,-44,34}, -{85,-44,35}, -{85,-44,36}, -{85,-44,37}, -{85,-44,38}, -{85,-44,39}, -{85,-44,40}, -{85,-44,41}, -{85,-44,42}, -{85,-44,43}, -{85,-44,44}, -{85,-44,45}, -{85,-44,46}, -{85,-44,47}, -{85,-44,48}, -{85,-44,49}, -{85,-44,50}, -{85,-44,51}, -{85,-44,52}, -{85,-44,53}, -{85,-44,54}, -{85,-44,55}, -{85,-44,56}, -{85,-44,57}, -{85,-44,58}, -{85,-44,59}, -{85,-44,60}, -{85,-44,61}, -{85,-44,62}, -{85,-44,63}, -{85,-44,64}, -{85,-44,65}, -{85,-44,66}, -{85,-44,67}, -{85,-44,68}, -{85,-44,69}, -{85,-44,70}, -{85,-44,71}, -{85,-44,72}, -{85,-44,73}, -{85,-44,74}, -{85,-44,75}, -{85,-44,76}, -{85,-44,77}, -{85,-44,78}, -{85,-44,79}, -{85,-44,80}, -{85,-44,81}, -{85,-44,82}, -{85,-44,83}, -{85,-43,-17}, -{85,-43,-16}, -{85,-43,-15}, -{85,-43,-14}, -{85,-43,-13}, -{85,-43,-12}, -{85,-43,-11}, -{85,-43,-10}, -{85,-43,-9}, -{85,-43,-8}, -{85,-43,-7}, -{85,-43,-6}, -{85,-43,-5}, -{85,-43,-4}, -{85,-43,-3}, -{85,-43,-2}, -{85,-43,-1}, -{85,-43,0}, -{85,-43,1}, -{85,-43,2}, -{85,-43,3}, -{85,-43,4}, -{85,-43,5}, -{85,-43,6}, -{85,-43,7}, -{85,-43,8}, -{85,-43,9}, -{85,-43,10}, -{85,-43,11}, -{85,-43,12}, -{85,-43,13}, -{85,-43,14}, -{85,-43,15}, -{85,-43,16}, -{85,-43,17}, -{85,-43,18}, -{85,-43,19}, -{85,-43,20}, -{85,-43,21}, -{85,-43,22}, -{85,-43,23}, -{85,-43,24}, -{85,-43,25}, -{85,-43,26}, -{85,-43,27}, -{85,-43,28}, -{85,-43,29}, -{85,-43,30}, -{85,-43,31}, -{85,-43,32}, -{85,-43,33}, -{85,-43,34}, -{85,-43,35}, -{85,-43,36}, -{85,-43,37}, -{85,-43,38}, -{85,-43,39}, -{85,-43,40}, -{85,-43,41}, -{85,-43,42}, -{85,-43,43}, -{85,-43,44}, -{85,-43,45}, -{85,-43,46}, -{85,-43,47}, -{85,-43,48}, -{85,-43,49}, -{85,-43,50}, -{85,-43,51}, -{85,-43,52}, -{85,-43,53}, -{85,-43,54}, -{85,-43,55}, -{85,-43,56}, -{85,-43,57}, -{85,-43,58}, -{85,-43,59}, -{85,-43,60}, -{85,-43,61}, -{85,-43,62}, -{85,-43,63}, -{85,-43,64}, -{85,-43,65}, -{85,-43,66}, -{85,-43,67}, -{85,-43,68}, -{85,-43,69}, -{85,-43,70}, -{85,-43,71}, -{85,-43,72}, -{85,-43,73}, -{85,-43,74}, -{85,-43,75}, -{85,-43,76}, -{85,-43,77}, -{85,-43,78}, -{85,-43,79}, -{85,-43,80}, -{85,-43,81}, -{85,-43,82}, -{85,-43,83}, -{85,-42,-18}, -{85,-42,-17}, -{85,-42,-16}, -{85,-42,-15}, -{85,-42,-14}, -{85,-42,-13}, -{85,-42,-12}, -{85,-42,-11}, -{85,-42,-10}, -{85,-42,-9}, -{85,-42,-8}, -{85,-42,-7}, -{85,-42,-6}, -{85,-42,-5}, -{85,-42,-4}, -{85,-42,-3}, -{85,-42,-2}, -{85,-42,-1}, -{85,-42,0}, -{85,-42,1}, -{85,-42,2}, -{85,-42,3}, -{85,-42,4}, -{85,-42,5}, -{85,-42,6}, -{85,-42,7}, -{85,-42,8}, -{85,-42,9}, -{85,-42,10}, -{85,-42,11}, -{85,-42,12}, -{85,-42,13}, -{85,-42,14}, -{85,-42,15}, -{85,-42,16}, -{85,-42,17}, -{85,-42,18}, -{85,-42,19}, -{85,-42,20}, -{85,-42,21}, -{85,-42,22}, -{85,-42,23}, -{85,-42,24}, -{85,-42,25}, -{85,-42,26}, -{85,-42,27}, -{85,-42,28}, -{85,-42,29}, -{85,-42,30}, -{85,-42,31}, -{85,-42,32}, -{85,-42,33}, -{85,-42,34}, -{85,-42,35}, -{85,-42,36}, -{85,-42,37}, -{85,-42,38}, -{85,-42,39}, -{85,-42,40}, -{85,-42,41}, -{85,-42,42}, -{85,-42,43}, -{85,-42,44}, -{85,-42,45}, -{85,-42,46}, -{85,-42,47}, -{85,-42,48}, -{85,-42,49}, -{85,-42,50}, -{85,-42,51}, -{85,-42,52}, -{85,-42,53}, -{85,-42,54}, -{85,-42,55}, -{85,-42,56}, -{85,-42,57}, -{85,-42,58}, -{85,-42,59}, -{85,-42,60}, -{85,-42,61}, -{85,-42,62}, -{85,-42,63}, -{85,-42,64}, -{85,-42,65}, -{85,-42,66}, -{85,-42,67}, -{85,-42,68}, -{85,-42,69}, -{85,-42,70}, -{85,-42,71}, -{85,-42,72}, -{85,-42,73}, -{85,-42,74}, -{85,-42,75}, -{85,-42,76}, -{85,-42,77}, -{85,-42,78}, -{85,-42,79}, -{85,-42,80}, -{85,-42,81}, -{85,-42,82}, -{85,-42,83}, -{85,-41,-20}, -{85,-41,-19}, -{85,-41,-18}, -{85,-41,-17}, -{85,-41,-16}, -{85,-41,-15}, -{85,-41,-14}, -{85,-41,-13}, -{85,-41,-12}, -{85,-41,-11}, -{85,-41,-10}, -{85,-41,-9}, -{85,-41,-8}, -{85,-41,-7}, -{85,-41,-6}, -{85,-41,-5}, -{85,-41,-4}, -{85,-41,-3}, -{85,-41,-2}, -{85,-41,-1}, -{85,-41,0}, -{85,-41,1}, -{85,-41,2}, -{85,-41,3}, -{85,-41,4}, -{85,-41,5}, -{85,-41,6}, -{85,-41,7}, -{85,-41,8}, -{85,-41,9}, -{85,-41,10}, -{85,-41,11}, -{85,-41,12}, -{85,-41,13}, -{85,-41,14}, -{85,-41,15}, -{85,-41,16}, -{85,-41,17}, -{85,-41,18}, -{85,-41,19}, -{85,-41,20}, -{85,-41,21}, -{85,-41,22}, -{85,-41,23}, -{85,-41,24}, -{85,-41,25}, -{85,-41,26}, -{85,-41,27}, -{85,-41,28}, -{85,-41,29}, -{85,-41,30}, -{85,-41,31}, -{85,-41,32}, -{85,-41,33}, -{85,-41,34}, -{85,-41,35}, -{85,-41,36}, -{85,-41,37}, -{85,-41,38}, -{85,-41,39}, -{85,-41,40}, -{85,-41,41}, -{85,-41,42}, -{85,-41,43}, -{85,-41,44}, -{85,-41,45}, -{85,-41,46}, -{85,-41,47}, -{85,-41,48}, -{85,-41,49}, -{85,-41,50}, -{85,-41,51}, -{85,-41,52}, -{85,-41,53}, -{85,-41,54}, -{85,-41,55}, -{85,-41,56}, -{85,-41,57}, -{85,-41,58}, -{85,-41,59}, -{85,-41,60}, -{85,-41,61}, -{85,-41,62}, -{85,-41,63}, -{85,-41,64}, -{85,-41,65}, -{85,-41,66}, -{85,-41,67}, -{85,-41,68}, -{85,-41,69}, -{85,-41,70}, -{85,-41,71}, -{85,-41,72}, -{85,-41,73}, -{85,-41,74}, -{85,-41,75}, -{85,-41,76}, -{85,-41,77}, -{85,-41,78}, -{85,-41,79}, -{85,-41,80}, -{85,-41,81}, -{85,-41,82}, -{85,-41,83}, -{85,-40,-21}, -{85,-40,-20}, -{85,-40,-19}, -{85,-40,-18}, -{85,-40,-17}, -{85,-40,-16}, -{85,-40,-15}, -{85,-40,-14}, -{85,-40,-13}, -{85,-40,-12}, -{85,-40,-11}, -{85,-40,-10}, -{85,-40,-9}, -{85,-40,-8}, -{85,-40,-7}, -{85,-40,-6}, -{85,-40,-5}, -{85,-40,-4}, -{85,-40,-3}, -{85,-40,-2}, -{85,-40,-1}, -{85,-40,0}, -{85,-40,1}, -{85,-40,2}, -{85,-40,3}, -{85,-40,4}, -{85,-40,5}, -{85,-40,6}, -{85,-40,7}, -{85,-40,8}, -{85,-40,9}, -{85,-40,10}, -{85,-40,11}, -{85,-40,12}, -{85,-40,13}, -{85,-40,14}, -{85,-40,15}, -{85,-40,16}, -{85,-40,17}, -{85,-40,18}, -{85,-40,19}, -{85,-40,20}, -{85,-40,21}, -{85,-40,22}, -{85,-40,23}, -{85,-40,24}, -{85,-40,25}, -{85,-40,26}, -{85,-40,27}, -{85,-40,28}, -{85,-40,29}, -{85,-40,30}, -{85,-40,31}, -{85,-40,32}, -{85,-40,33}, -{85,-40,34}, -{85,-40,35}, -{85,-40,36}, -{85,-40,37}, -{85,-40,38}, -{85,-40,39}, -{85,-40,40}, -{85,-40,41}, -{85,-40,42}, -{85,-40,43}, -{85,-40,44}, -{85,-40,45}, -{85,-40,46}, -{85,-40,47}, -{85,-40,48}, -{85,-40,49}, -{85,-40,50}, -{85,-40,51}, -{85,-40,52}, -{85,-40,53}, -{85,-40,54}, -{85,-40,55}, -{85,-40,56}, -{85,-40,57}, -{85,-40,58}, -{85,-40,59}, -{85,-40,60}, -{85,-40,61}, -{85,-40,62}, -{85,-40,63}, -{85,-40,64}, -{85,-40,65}, -{85,-40,66}, -{85,-40,67}, -{85,-40,68}, -{85,-40,69}, -{85,-40,70}, -{85,-40,71}, -{85,-40,72}, -{85,-40,73}, -{85,-40,74}, -{85,-40,75}, -{85,-40,76}, -{85,-40,77}, -{85,-40,78}, -{85,-40,79}, -{85,-40,80}, -{85,-40,81}, -{85,-40,82}, -{85,-40,83}, -{85,-39,-23}, -{85,-39,-22}, -{85,-39,-21}, -{85,-39,-20}, -{85,-39,-19}, -{85,-39,-18}, -{85,-39,-17}, -{85,-39,-16}, -{85,-39,-15}, -{85,-39,-14}, -{85,-39,-13}, -{85,-39,-12}, -{85,-39,-11}, -{85,-39,-10}, -{85,-39,-9}, -{85,-39,-8}, -{85,-39,-7}, -{85,-39,-6}, -{85,-39,-5}, -{85,-39,-4}, -{85,-39,-3}, -{85,-39,-2}, -{85,-39,-1}, -{85,-39,0}, -{85,-39,1}, -{85,-39,2}, -{85,-39,3}, -{85,-39,4}, -{85,-39,5}, -{85,-39,6}, -{85,-39,7}, -{85,-39,8}, -{85,-39,9}, -{85,-39,10}, -{85,-39,11}, -{85,-39,12}, -{85,-39,13}, -{85,-39,14}, -{85,-39,15}, -{85,-39,16}, -{85,-39,17}, -{85,-39,18}, -{85,-39,19}, -{85,-39,20}, -{85,-39,21}, -{85,-39,22}, -{85,-39,23}, -{85,-39,24}, -{85,-39,25}, -{85,-39,26}, -{85,-39,27}, -{85,-39,28}, -{85,-39,29}, -{85,-39,30}, -{85,-39,31}, -{85,-39,32}, -{85,-39,33}, -{85,-39,34}, -{85,-39,35}, -{85,-39,36}, -{85,-39,37}, -{85,-39,38}, -{85,-39,39}, -{85,-39,40}, -{85,-39,41}, -{85,-39,42}, -{85,-39,43}, -{85,-39,44}, -{85,-39,45}, -{85,-39,46}, -{85,-39,47}, -{85,-39,48}, -{85,-39,49}, -{85,-39,50}, -{85,-39,51}, -{85,-39,52}, -{85,-39,53}, -{85,-39,54}, -{85,-39,55}, -{85,-39,56}, -{85,-39,57}, -{85,-39,58}, -{85,-39,59}, -{85,-39,60}, -{85,-39,61}, -{85,-39,62}, -{85,-39,63}, -{85,-39,64}, -{85,-39,65}, -{85,-39,66}, -{85,-39,67}, -{85,-39,68}, -{85,-39,69}, -{85,-39,70}, -{85,-39,71}, -{85,-39,72}, -{85,-39,73}, -{85,-39,74}, -{85,-39,75}, -{85,-39,76}, -{85,-39,77}, -{85,-39,78}, -{85,-39,79}, -{85,-39,80}, -{85,-39,81}, -{85,-39,82}, -{85,-39,83}, -{85,-38,-23}, -{85,-38,-22}, -{85,-38,-21}, -{85,-38,-20}, -{85,-38,-19}, -{85,-38,-18}, -{85,-38,-17}, -{85,-38,-16}, -{85,-38,-15}, -{85,-38,-14}, -{85,-38,-13}, -{85,-38,-12}, -{85,-38,-11}, -{85,-38,-10}, -{85,-38,-9}, -{85,-38,-8}, -{85,-38,-7}, -{85,-38,-6}, -{85,-38,-5}, -{85,-38,-4}, -{85,-38,-3}, -{85,-38,-2}, -{85,-38,-1}, -{85,-38,0}, -{85,-38,1}, -{85,-38,2}, -{85,-38,3}, -{85,-38,4}, -{85,-38,5}, -{85,-38,6}, -{85,-38,7}, -{85,-38,8}, -{85,-38,9}, -{85,-38,10}, -{85,-38,11}, -{85,-38,12}, -{85,-38,13}, -{85,-38,14}, -{85,-38,15}, -{85,-38,16}, -{85,-38,17}, -{85,-38,18}, -{85,-38,19}, -{85,-38,20}, -{85,-38,21}, -{85,-38,22}, -{85,-38,23}, -{85,-38,24}, -{85,-38,25}, -{85,-38,26}, -{85,-38,27}, -{85,-38,28}, -{85,-38,29}, -{85,-38,30}, -{85,-38,31}, -{85,-38,32}, -{85,-38,33}, -{85,-38,34}, -{85,-38,35}, -{85,-38,36}, -{85,-38,37}, -{85,-38,38}, -{85,-38,39}, -{85,-38,40}, -{85,-38,41}, -{85,-38,42}, -{85,-38,43}, -{85,-38,44}, -{85,-38,45}, -{85,-38,46}, -{85,-38,47}, -{85,-38,48}, -{85,-38,49}, -{85,-38,50}, -{85,-38,51}, -{85,-38,52}, -{85,-38,53}, -{85,-38,54}, -{85,-38,55}, -{85,-38,56}, -{85,-38,57}, -{85,-38,58}, -{85,-38,59}, -{85,-38,60}, -{85,-38,61}, -{85,-38,62}, -{85,-38,63}, -{85,-38,64}, -{85,-38,65}, -{85,-38,66}, -{85,-38,67}, -{85,-38,68}, -{85,-38,69}, -{85,-38,70}, -{85,-38,71}, -{85,-38,72}, -{85,-38,73}, -{85,-38,74}, -{85,-38,75}, -{85,-38,76}, -{85,-38,77}, -{85,-38,78}, -{85,-38,79}, -{85,-38,80}, -{85,-38,81}, -{85,-38,82}, -{85,-38,83}, -{85,-37,-23}, -{85,-37,-22}, -{85,-37,-21}, -{85,-37,-20}, -{85,-37,-19}, -{85,-37,-18}, -{85,-37,-17}, -{85,-37,-16}, -{85,-37,-15}, -{85,-37,-14}, -{85,-37,-13}, -{85,-37,-12}, -{85,-37,-11}, -{85,-37,-10}, -{85,-37,-9}, -{85,-37,-8}, -{85,-37,-7}, -{85,-37,-6}, -{85,-37,-5}, -{85,-37,-4}, -{85,-37,-3}, -{85,-37,-2}, -{85,-37,-1}, -{85,-37,0}, -{85,-37,1}, -{85,-37,2}, -{85,-37,3}, -{85,-37,4}, -{85,-37,5}, -{85,-37,6}, -{85,-37,7}, -{85,-37,8}, -{85,-37,9}, -{85,-37,10}, -{85,-37,11}, -{85,-37,12}, -{85,-37,13}, -{85,-37,14}, -{85,-37,15}, -{85,-37,16}, -{85,-37,17}, -{85,-37,18}, -{85,-37,19}, -{85,-37,20}, -{85,-37,21}, -{85,-37,22}, -{85,-37,23}, -{85,-37,24}, -{85,-37,25}, -{85,-37,26}, -{85,-37,27}, -{85,-37,28}, -{85,-37,29}, -{85,-37,30}, -{85,-37,31}, -{85,-37,32}, -{85,-37,33}, -{85,-37,34}, -{85,-37,35}, -{85,-37,36}, -{85,-37,37}, -{85,-37,38}, -{85,-37,39}, -{85,-37,40}, -{85,-37,41}, -{85,-37,42}, -{85,-37,43}, -{85,-37,44}, -{85,-37,45}, -{85,-37,46}, -{85,-37,47}, -{85,-37,48}, -{85,-37,49}, -{85,-37,50}, -{85,-37,51}, -{85,-37,52}, -{85,-37,53}, -{85,-37,54}, -{85,-37,55}, -{85,-37,56}, -{85,-37,57}, -{85,-37,58}, -{85,-37,59}, -{85,-37,60}, -{85,-37,61}, -{85,-37,62}, -{85,-37,63}, -{85,-37,64}, -{85,-37,65}, -{85,-37,66}, -{85,-37,67}, -{85,-37,68}, -{85,-37,69}, -{85,-37,70}, -{85,-37,71}, -{85,-37,72}, -{85,-37,73}, -{85,-37,74}, -{85,-37,75}, -{85,-37,76}, -{85,-37,77}, -{85,-37,78}, -{85,-37,79}, -{85,-37,80}, -{85,-37,81}, -{85,-37,82}, -{85,-37,83}, -{85,-36,-23}, -{85,-36,-22}, -{85,-36,-21}, -{85,-36,-20}, -{85,-36,-19}, -{85,-36,-18}, -{85,-36,-17}, -{85,-36,-16}, -{85,-36,-15}, -{85,-36,-14}, -{85,-36,-13}, -{85,-36,-12}, -{85,-36,-11}, -{85,-36,-10}, -{85,-36,-9}, -{85,-36,-8}, -{85,-36,-7}, -{85,-36,-6}, -{85,-36,-5}, -{85,-36,-4}, -{85,-36,-3}, -{85,-36,-2}, -{85,-36,-1}, -{85,-36,0}, -{85,-36,1}, -{85,-36,2}, -{85,-36,3}, -{85,-36,4}, -{85,-36,5}, -{85,-36,6}, -{85,-36,7}, -{85,-36,8}, -{85,-36,9}, -{85,-36,10}, -{85,-36,11}, -{85,-36,12}, -{85,-36,13}, -{85,-36,14}, -{85,-36,15}, -{85,-36,16}, -{85,-36,17}, -{85,-36,18}, -{85,-36,19}, -{85,-36,20}, -{85,-36,21}, -{85,-36,22}, -{85,-36,23}, -{85,-36,24}, -{85,-36,25}, -{85,-36,26}, -{85,-36,27}, -{85,-36,28}, -{85,-36,29}, -{85,-36,30}, -{85,-36,31}, -{85,-36,32}, -{85,-36,33}, -{85,-36,34}, -{85,-36,35}, -{85,-36,36}, -{85,-36,37}, -{85,-36,38}, -{85,-36,39}, -{85,-36,40}, -{85,-36,41}, -{85,-36,42}, -{85,-36,43}, -{85,-36,44}, -{85,-36,45}, -{85,-36,46}, -{85,-36,47}, -{85,-36,48}, -{85,-36,49}, -{85,-36,50}, -{85,-36,51}, -{85,-36,52}, -{85,-36,53}, -{85,-36,54}, -{85,-36,55}, -{85,-36,56}, -{85,-36,57}, -{85,-36,58}, -{85,-36,59}, -{85,-36,60}, -{85,-36,61}, -{85,-36,62}, -{85,-36,63}, -{85,-36,64}, -{85,-36,65}, -{85,-36,66}, -{85,-36,67}, -{85,-36,68}, -{85,-36,69}, -{85,-36,70}, -{85,-36,71}, -{85,-36,72}, -{85,-36,73}, -{85,-36,74}, -{85,-36,75}, -{85,-36,76}, -{85,-36,77}, -{85,-36,78}, -{85,-36,79}, -{85,-36,80}, -{85,-36,81}, -{85,-36,82}, -{85,-36,83}, -{85,-35,-23}, -{85,-35,-22}, -{85,-35,-21}, -{85,-35,-20}, -{85,-35,-19}, -{85,-35,-18}, -{85,-35,-17}, -{85,-35,-16}, -{85,-35,-15}, -{85,-35,-14}, -{85,-35,-13}, -{85,-35,-12}, -{85,-35,-11}, -{85,-35,-10}, -{85,-35,-9}, -{85,-35,-8}, -{85,-35,-7}, -{85,-35,-6}, -{85,-35,-5}, -{85,-35,-4}, -{85,-35,-3}, -{85,-35,-2}, -{85,-35,-1}, -{85,-35,0}, -{85,-35,1}, -{85,-35,2}, -{85,-35,3}, -{85,-35,4}, -{85,-35,5}, -{85,-35,6}, -{85,-35,7}, -{85,-35,8}, -{85,-35,9}, -{85,-35,10}, -{85,-35,11}, -{85,-35,12}, -{85,-35,13}, -{85,-35,14}, -{85,-35,15}, -{85,-35,16}, -{85,-35,17}, -{85,-35,18}, -{85,-35,19}, -{85,-35,20}, -{85,-35,21}, -{85,-35,22}, -{85,-35,23}, -{85,-35,24}, -{85,-35,25}, -{85,-35,26}, -{85,-35,27}, -{85,-35,28}, -{85,-35,29}, -{85,-35,30}, -{85,-35,31}, -{85,-35,32}, -{85,-35,33}, -{85,-35,34}, -{85,-35,35}, -{85,-35,36}, -{85,-35,37}, -{85,-35,38}, -{85,-35,39}, -{85,-35,40}, -{85,-35,41}, -{85,-35,42}, -{85,-35,43}, -{85,-35,44}, -{85,-35,45}, -{85,-35,46}, -{85,-35,47}, -{85,-35,48}, -{85,-35,49}, -{85,-35,50}, -{85,-35,51}, -{85,-35,52}, -{85,-35,53}, -{85,-35,54}, -{85,-35,55}, -{85,-35,56}, -{85,-35,57}, -{85,-35,58}, -{85,-35,59}, -{85,-35,60}, -{85,-35,61}, -{85,-35,62}, -{85,-35,63}, -{85,-35,64}, -{85,-35,65}, -{85,-35,66}, -{85,-35,67}, -{85,-35,68}, -{85,-35,69}, -{85,-35,70}, -{85,-35,71}, -{85,-35,72}, -{85,-35,73}, -{85,-35,74}, -{85,-35,75}, -{85,-35,76}, -{85,-35,77}, -{85,-35,78}, -{85,-35,79}, -{85,-35,80}, -{85,-35,81}, -{85,-35,82}, -{85,-35,83}, -{85,-34,-23}, -{85,-34,-22}, -{85,-34,-21}, -{85,-34,-20}, -{85,-34,-19}, -{85,-34,-18}, -{85,-34,-17}, -{85,-34,-16}, -{85,-34,-15}, -{85,-34,-14}, -{85,-34,-13}, -{85,-34,-12}, -{85,-34,-11}, -{85,-34,-10}, -{85,-34,-9}, -{85,-34,-8}, -{85,-34,-7}, -{85,-34,-6}, -{85,-34,-5}, -{85,-34,-4}, -{85,-34,-3}, -{85,-34,-2}, -{85,-34,-1}, -{85,-34,0}, -{85,-34,1}, -{85,-34,2}, -{85,-34,3}, -{85,-34,4}, -{85,-34,5}, -{85,-34,6}, -{85,-34,7}, -{85,-34,8}, -{85,-34,9}, -{85,-34,10}, -{85,-34,11}, -{85,-34,12}, -{85,-34,13}, -{85,-34,14}, -{85,-34,15}, -{85,-34,16}, -{85,-34,17}, -{85,-34,18}, -{85,-34,19}, -{85,-34,20}, -{85,-34,21}, -{85,-34,22}, -{85,-34,23}, -{85,-34,24}, -{85,-34,25}, -{85,-34,26}, -{85,-34,27}, -{85,-34,28}, -{85,-34,29}, -{85,-34,30}, -{85,-34,31}, -{85,-34,32}, -{85,-34,33}, -{85,-34,34}, -{85,-34,35}, -{85,-34,36}, -{85,-34,37}, -{85,-34,38}, -{85,-34,39}, -{85,-34,40}, -{85,-34,41}, -{85,-34,42}, -{85,-34,43}, -{85,-34,44}, -{85,-34,45}, -{85,-34,46}, -{85,-34,47}, -{85,-34,48}, -{85,-34,49}, -{85,-34,50}, -{85,-34,51}, -{85,-34,52}, -{85,-34,53}, -{85,-34,54}, -{85,-34,55}, -{85,-34,56}, -{85,-34,57}, -{85,-34,58}, -{85,-34,59}, -{85,-34,60}, -{85,-34,61}, -{85,-34,62}, -{85,-34,63}, -{85,-34,64}, -{85,-34,65}, -{85,-34,66}, -{85,-34,67}, -{85,-34,68}, -{85,-34,69}, -{85,-34,70}, -{85,-34,71}, -{85,-34,72}, -{85,-34,73}, -{85,-34,74}, -{85,-34,75}, -{85,-34,76}, -{85,-34,77}, -{85,-34,78}, -{85,-34,79}, -{85,-34,80}, -{85,-34,81}, -{85,-34,82}, -{85,-34,83}, -{85,-33,-23}, -{85,-33,-22}, -{85,-33,-21}, -{85,-33,-20}, -{85,-33,-19}, -{85,-33,-18}, -{85,-33,-17}, -{85,-33,-16}, -{85,-33,-15}, -{85,-33,-14}, -{85,-33,-13}, -{85,-33,-12}, -{85,-33,-11}, -{85,-33,-10}, -{85,-33,-9}, -{85,-33,-8}, -{85,-33,-7}, -{85,-33,-6}, -{85,-33,-5}, -{85,-33,-4}, -{85,-33,-3}, -{85,-33,-2}, -{85,-33,-1}, -{85,-33,0}, -{85,-33,1}, -{85,-33,2}, -{85,-33,3}, -{85,-33,4}, -{85,-33,5}, -{85,-33,6}, -{85,-33,7}, -{85,-33,8}, -{85,-33,9}, -{85,-33,10}, -{85,-33,11}, -{85,-33,12}, -{85,-33,13}, -{85,-33,14}, -{85,-33,15}, -{85,-33,16}, -{85,-33,17}, -{85,-33,18}, -{85,-33,19}, -{85,-33,20}, -{85,-33,21}, -{85,-33,22}, -{85,-33,23}, -{85,-33,24}, -{85,-33,25}, -{85,-33,26}, -{85,-33,27}, -{85,-33,28}, -{85,-33,29}, -{85,-33,30}, -{85,-33,31}, -{85,-33,32}, -{85,-33,33}, -{85,-33,34}, -{85,-33,35}, -{85,-33,36}, -{85,-33,37}, -{85,-33,38}, -{85,-33,39}, -{85,-33,40}, -{85,-33,41}, -{85,-33,42}, -{85,-33,43}, -{85,-33,44}, -{85,-33,45}, -{85,-33,46}, -{85,-33,47}, -{85,-33,48}, -{85,-33,49}, -{85,-33,50}, -{85,-33,51}, -{85,-33,52}, -{85,-33,53}, -{85,-33,54}, -{85,-33,55}, -{85,-33,56}, -{85,-33,57}, -{85,-33,58}, -{85,-33,59}, -{85,-33,60}, -{85,-33,61}, -{85,-33,62}, -{85,-33,63}, -{85,-33,64}, -{85,-33,65}, -{85,-33,66}, -{85,-33,67}, -{85,-33,68}, -{85,-33,69}, -{85,-33,70}, -{85,-33,71}, -{85,-33,72}, -{85,-33,73}, -{85,-33,74}, -{85,-33,75}, -{85,-33,76}, -{85,-33,77}, -{85,-33,78}, -{85,-33,79}, -{85,-33,80}, -{85,-33,81}, -{85,-33,82}, -{85,-33,83}, -{85,-32,-23}, -{85,-32,-22}, -{85,-32,-21}, -{85,-32,-20}, -{85,-32,-19}, -{85,-32,-18}, -{85,-32,-17}, -{85,-32,-16}, -{85,-32,-15}, -{85,-32,-14}, -{85,-32,-13}, -{85,-32,-12}, -{85,-32,-11}, -{85,-32,-10}, -{85,-32,-9}, -{85,-32,-8}, -{85,-32,-7}, -{85,-32,-6}, -{85,-32,-5}, -{85,-32,-4}, -{85,-32,-3}, -{85,-32,-2}, -{85,-32,-1}, -{85,-32,0}, -{85,-32,1}, -{85,-32,2}, -{85,-32,3}, -{85,-32,4}, -{85,-32,5}, -{85,-32,6}, -{85,-32,7}, -{85,-32,8}, -{85,-32,9}, -{85,-32,10}, -{85,-32,11}, -{85,-32,12}, -{85,-32,13}, -{85,-32,14}, -{85,-32,15}, -{85,-32,16}, -{85,-32,17}, -{85,-32,18}, -{85,-32,19}, -{85,-32,20}, -{85,-32,21}, -{85,-32,22}, -{85,-32,23}, -{85,-32,24}, -{85,-32,25}, -{85,-32,26}, -{85,-32,27}, -{85,-32,28}, -{85,-32,29}, -{85,-32,30}, -{85,-32,31}, -{85,-32,32}, -{85,-32,33}, -{85,-32,34}, -{85,-32,35}, -{85,-32,36}, -{85,-32,37}, -{85,-32,38}, -{85,-32,39}, -{85,-32,40}, -{85,-32,41}, -{85,-32,42}, -{85,-32,43}, -{85,-32,44}, -{85,-32,45}, -{85,-32,46}, -{85,-32,47}, -{85,-32,48}, -{85,-32,49}, -{85,-32,50}, -{85,-32,51}, -{85,-32,52}, -{85,-32,53}, -{85,-32,54}, -{85,-32,55}, -{85,-32,56}, -{85,-32,57}, -{85,-32,58}, -{85,-32,59}, -{85,-32,60}, -{85,-32,61}, -{85,-32,62}, -{85,-32,63}, -{85,-32,64}, -{85,-32,65}, -{85,-32,66}, -{85,-32,67}, -{85,-32,68}, -{85,-32,69}, -{85,-32,70}, -{85,-32,71}, -{85,-32,72}, -{85,-32,73}, -{85,-32,74}, -{85,-32,75}, -{85,-32,76}, -{85,-32,77}, -{85,-32,78}, -{85,-32,79}, -{85,-32,80}, -{85,-32,81}, -{85,-32,82}, -{85,-32,83}, -{85,-31,-23}, -{85,-31,-22}, -{85,-31,-21}, -{85,-31,-20}, -{85,-31,-19}, -{85,-31,-18}, -{85,-31,-17}, -{85,-31,-16}, -{85,-31,-15}, -{85,-31,-14}, -{85,-31,-13}, -{85,-31,-12}, -{85,-31,-11}, -{85,-31,-10}, -{85,-31,-9}, -{85,-31,-8}, -{85,-31,-7}, -{85,-31,-6}, -{85,-31,-5}, -{85,-31,-4}, -{85,-31,-3}, -{85,-31,-2}, -{85,-31,-1}, -{85,-31,0}, -{85,-31,1}, -{85,-31,2}, -{85,-31,3}, -{85,-31,4}, -{85,-31,5}, -{85,-31,6}, -{85,-31,7}, -{85,-31,8}, -{85,-31,9}, -{85,-31,10}, -{85,-31,11}, -{85,-31,12}, -{85,-31,13}, -{85,-31,14}, -{85,-31,15}, -{85,-31,16}, -{85,-31,17}, -{85,-31,18}, -{85,-31,19}, -{85,-31,20}, -{85,-31,21}, -{85,-31,22}, -{85,-31,23}, -{85,-31,24}, -{85,-31,25}, -{85,-31,26}, -{85,-31,27}, -{85,-31,28}, -{85,-31,29}, -{85,-31,30}, -{85,-31,31}, -{85,-31,32}, -{85,-31,33}, -{85,-31,34}, -{85,-31,35}, -{85,-31,36}, -{85,-31,37}, -{85,-31,38}, -{85,-31,39}, -{85,-31,40}, -{85,-31,41}, -{85,-31,42}, -{85,-31,43}, -{85,-31,44}, -{85,-31,45}, -{85,-31,46}, -{85,-31,47}, -{85,-31,48}, -{85,-31,49}, -{85,-31,50}, -{85,-31,51}, -{85,-31,52}, -{85,-31,53}, -{85,-31,54}, -{85,-31,55}, -{85,-31,56}, -{85,-31,57}, -{85,-31,58}, -{85,-31,59}, -{85,-31,60}, -{85,-31,61}, -{85,-31,62}, -{85,-31,63}, -{85,-31,64}, -{85,-31,65}, -{85,-31,66}, -{85,-31,67}, -{85,-31,68}, -{85,-31,69}, -{85,-31,70}, -{85,-31,71}, -{85,-31,72}, -{85,-31,73}, -{85,-31,74}, -{85,-31,75}, -{85,-31,76}, -{85,-31,77}, -{85,-31,78}, -{85,-31,79}, -{85,-31,80}, -{85,-31,81}, -{85,-31,82}, -{85,-31,83}, -{85,-30,-23}, -{85,-30,-22}, -{85,-30,-21}, -{85,-30,-20}, -{85,-30,-19}, -{85,-30,-18}, -{85,-30,-17}, -{85,-30,-16}, -{85,-30,-15}, -{85,-30,-14}, -{85,-30,-13}, -{85,-30,-12}, -{85,-30,-11}, -{85,-30,-10}, -{85,-30,-9}, -{85,-30,-8}, -{85,-30,-7}, -{85,-30,-6}, -{85,-30,-5}, -{85,-30,-4}, -{85,-30,-3}, -{85,-30,-2}, -{85,-30,-1}, -{85,-30,0}, -{85,-30,1}, -{85,-30,2}, -{85,-30,3}, -{85,-30,4}, -{85,-30,5}, -{85,-30,6}, -{85,-30,7}, -{85,-30,8}, -{85,-30,9}, -{85,-30,10}, -{85,-30,11}, -{85,-30,12}, -{85,-30,13}, -{85,-30,14}, -{85,-30,15}, -{85,-30,16}, -{85,-30,17}, -{85,-30,18}, -{85,-30,19}, -{85,-30,20}, -{85,-30,21}, -{85,-30,22}, -{85,-30,23}, -{85,-30,24}, -{85,-30,25}, -{85,-30,26}, -{85,-30,27}, -{85,-30,28}, -{85,-30,29}, -{85,-30,30}, -{85,-30,31}, -{85,-30,32}, -{85,-30,33}, -{85,-30,34}, -{85,-30,35}, -{85,-30,36}, -{85,-30,37}, -{85,-30,38}, -{85,-30,39}, -{85,-30,40}, -{85,-30,41}, -{85,-30,42}, -{85,-30,43}, -{85,-30,44}, -{85,-30,45}, -{85,-30,46}, -{85,-30,47}, -{85,-30,48}, -{85,-30,49}, -{85,-30,50}, -{85,-30,51}, -{85,-30,52}, -{85,-30,53}, -{85,-30,54}, -{85,-30,55}, -{85,-30,56}, -{85,-30,57}, -{85,-30,58}, -{85,-30,59}, -{85,-30,60}, -{85,-30,61}, -{85,-30,62}, -{85,-30,63}, -{85,-30,64}, -{85,-30,65}, -{85,-30,66}, -{85,-30,67}, -{85,-30,68}, -{85,-30,69}, -{85,-30,70}, -{85,-30,71}, -{85,-30,72}, -{85,-30,73}, -{85,-30,74}, -{85,-30,75}, -{85,-30,76}, -{85,-30,77}, -{85,-30,78}, -{85,-30,79}, -{85,-30,80}, -{85,-30,81}, -{85,-30,82}, -{85,-30,83}, -{85,-29,-23}, -{85,-29,-22}, -{85,-29,-21}, -{85,-29,-20}, -{85,-29,-19}, -{85,-29,-18}, -{85,-29,-17}, -{85,-29,-16}, -{85,-29,-15}, -{85,-29,-14}, -{85,-29,-13}, -{85,-29,-12}, -{85,-29,-11}, -{85,-29,-10}, -{85,-29,-9}, -{85,-29,-8}, -{85,-29,-7}, -{85,-29,-6}, -{85,-29,-5}, -{85,-29,-4}, -{85,-29,-3}, -{85,-29,-2}, -{85,-29,-1}, -{85,-29,0}, -{85,-29,1}, -{85,-29,2}, -{85,-29,3}, -{85,-29,4}, -{85,-29,5}, -{85,-29,6}, -{85,-29,7}, -{85,-29,8}, -{85,-29,9}, -{85,-29,10}, -{85,-29,11}, -{85,-29,12}, -{85,-29,13}, -{85,-29,14}, -{85,-29,15}, -{85,-29,16}, -{85,-29,17}, -{85,-29,18}, -{85,-29,19}, -{85,-29,20}, -{85,-29,21}, -{85,-29,22}, -{85,-29,23}, -{85,-29,24}, -{85,-29,25}, -{85,-29,26}, -{85,-29,27}, -{85,-29,28}, -{85,-29,29}, -{85,-29,30}, -{85,-29,31}, -{85,-29,32}, -{85,-29,33}, -{85,-29,34}, -{85,-29,35}, -{85,-29,36}, -{85,-29,37}, -{85,-29,38}, -{85,-29,39}, -{85,-29,40}, -{85,-29,41}, -{85,-29,42}, -{85,-29,43}, -{85,-29,44}, -{85,-29,45}, -{85,-29,46}, -{85,-29,47}, -{85,-29,48}, -{85,-29,49}, -{85,-29,50}, -{85,-29,51}, -{85,-29,52}, -{85,-29,53}, -{85,-29,54}, -{85,-29,55}, -{85,-29,56}, -{85,-29,57}, -{85,-29,58}, -{85,-29,59}, -{85,-29,60}, -{85,-29,61}, -{85,-29,62}, -{85,-29,63}, -{85,-29,64}, -{85,-29,65}, -{85,-29,66}, -{85,-29,67}, -{85,-29,68}, -{85,-29,69}, -{85,-29,70}, -{85,-29,71}, -{85,-29,72}, -{85,-29,73}, -{85,-29,74}, -{85,-29,75}, -{85,-29,76}, -{85,-29,77}, -{85,-29,78}, -{85,-29,79}, -{85,-29,80}, -{85,-29,81}, -{85,-29,82}, -{85,-29,83}, -{85,-28,-23}, -{85,-28,-22}, -{85,-28,-21}, -{85,-28,-20}, -{85,-28,-19}, -{85,-28,-18}, -{85,-28,-17}, -{85,-28,-16}, -{85,-28,-15}, -{85,-28,-14}, -{85,-28,-13}, -{85,-28,-12}, -{85,-28,-11}, -{85,-28,-10}, -{85,-28,-9}, -{85,-28,-8}, -{85,-28,-7}, -{85,-28,-6}, -{85,-28,-5}, -{85,-28,-4}, -{85,-28,-3}, -{85,-28,-2}, -{85,-28,-1}, -{85,-28,0}, -{85,-28,1}, -{85,-28,2}, -{85,-28,3}, -{85,-28,4}, -{85,-28,5}, -{85,-28,6}, -{85,-28,7}, -{85,-28,8}, -{85,-28,9}, -{85,-28,10}, -{85,-28,11}, -{85,-28,12}, -{85,-28,13}, -{85,-28,14}, -{85,-28,15}, -{85,-28,16}, -{85,-28,17}, -{85,-28,18}, -{85,-28,19}, -{85,-28,20}, -{85,-28,21}, -{85,-28,22}, -{85,-28,23}, -{85,-28,24}, -{85,-28,25}, -{85,-28,26}, -{85,-28,27}, -{85,-28,28}, -{85,-28,29}, -{85,-28,30}, -{85,-28,31}, -{85,-28,32}, -{85,-28,33}, -{85,-28,34}, -{85,-28,35}, -{85,-28,36}, -{85,-28,37}, -{85,-28,38}, -{85,-28,39}, -{85,-28,40}, -{85,-28,41}, -{85,-28,42}, -{85,-28,43}, -{85,-28,44}, -{85,-28,45}, -{85,-28,46}, -{85,-28,47}, -{85,-28,48}, -{85,-28,49}, -{85,-28,50}, -{85,-28,51}, -{85,-28,52}, -{85,-28,53}, -{85,-28,54}, -{85,-28,55}, -{85,-28,56}, -{85,-28,57}, -{85,-28,58}, -{85,-28,59}, -{85,-28,60}, -{85,-28,61}, -{85,-28,62}, -{85,-28,63}, -{85,-28,64}, -{85,-28,65}, -{85,-28,66}, -{85,-28,67}, -{85,-28,68}, -{85,-28,69}, -{85,-28,70}, -{85,-28,71}, -{85,-28,72}, -{85,-28,73}, -{85,-28,74}, -{85,-28,75}, -{85,-28,76}, -{85,-28,77}, -{85,-28,78}, -{85,-28,79}, -{85,-28,80}, -{85,-28,81}, -{85,-28,82}, -{85,-28,83}, -{85,-27,-23}, -{85,-27,-22}, -{85,-27,-21}, -{85,-27,-20}, -{85,-27,-19}, -{85,-27,-18}, -{85,-27,-17}, -{85,-27,-16}, -{85,-27,-15}, -{85,-27,-14}, -{85,-27,-13}, -{85,-27,-12}, -{85,-27,-11}, -{85,-27,-10}, -{85,-27,-9}, -{85,-27,-8}, -{85,-27,-7}, -{85,-27,-6}, -{85,-27,-5}, -{85,-27,-4}, -{85,-27,-3}, -{85,-27,-2}, -{85,-27,-1}, -{85,-27,0}, -{85,-27,1}, -{85,-27,2}, -{85,-27,3}, -{85,-27,4}, -{85,-27,5}, -{85,-27,6}, -{85,-27,7}, -{85,-27,8}, -{85,-27,9}, -{85,-27,10}, -{85,-27,11}, -{85,-27,12}, -{85,-27,13}, -{85,-27,14}, -{85,-27,15}, -{85,-27,16}, -{85,-27,17}, -{85,-27,18}, -{85,-27,19}, -{85,-27,20}, -{85,-27,21}, -{85,-27,22}, -{85,-27,23}, -{85,-27,24}, -{85,-27,25}, -{85,-27,26}, -{85,-27,27}, -{85,-27,28}, -{85,-27,29}, -{85,-27,30}, -{85,-27,31}, -{85,-27,32}, -{85,-27,33}, -{85,-27,34}, -{85,-27,35}, -{85,-27,36}, -{85,-27,37}, -{85,-27,38}, -{85,-27,39}, -{85,-27,40}, -{85,-27,41}, -{85,-27,42}, -{85,-27,43}, -{85,-27,44}, -{85,-27,45}, -{85,-27,46}, -{85,-27,47}, -{85,-27,48}, -{85,-27,49}, -{85,-27,50}, -{85,-27,51}, -{85,-27,52}, -{85,-27,53}, -{85,-27,54}, -{85,-27,55}, -{85,-27,56}, -{85,-27,57}, -{85,-27,58}, -{85,-27,59}, -{85,-27,60}, -{85,-27,61}, -{85,-27,62}, -{85,-27,63}, -{85,-27,64}, -{85,-27,65}, -{85,-27,66}, -{85,-27,67}, -{85,-27,68}, -{85,-27,69}, -{85,-27,70}, -{85,-27,71}, -{85,-27,72}, -{85,-27,73}, -{85,-27,74}, -{85,-27,75}, -{85,-27,76}, -{85,-27,77}, -{85,-27,78}, -{85,-27,79}, -{85,-27,80}, -{85,-27,81}, -{85,-27,82}, -{85,-27,83}, -{85,-27,84}, -{85,-26,-23}, -{85,-26,-22}, -{85,-26,-21}, -{85,-26,-20}, -{85,-26,-19}, -{85,-26,-18}, -{85,-26,-17}, -{85,-26,-16}, -{85,-26,-15}, -{85,-26,-14}, -{85,-26,-13}, -{85,-26,-12}, -{85,-26,-11}, -{85,-26,-10}, -{85,-26,-9}, -{85,-26,-8}, -{85,-26,-7}, -{85,-26,-6}, -{85,-26,-5}, -{85,-26,-4}, -{85,-26,-3}, -{85,-26,-2}, -{85,-26,-1}, -{85,-26,0}, -{85,-26,1}, -{85,-26,2}, -{85,-26,3}, -{85,-26,4}, -{85,-26,5}, -{85,-26,6}, -{85,-26,7}, -{85,-26,8}, -{85,-26,9}, -{85,-26,10}, -{85,-26,11}, -{85,-26,12}, -{85,-26,13}, -{85,-26,14}, -{85,-26,15}, -{85,-26,16}, -{85,-26,17}, -{85,-26,18}, -{85,-26,19}, -{85,-26,20}, -{85,-26,21}, -{85,-26,22}, -{85,-26,23}, -{85,-26,24}, -{85,-26,25}, -{85,-26,26}, -{85,-26,27}, -{85,-26,28}, -{85,-26,29}, -{85,-26,30}, -{85,-26,31}, -{85,-26,32}, -{85,-26,33}, -{85,-26,34}, -{85,-26,35}, -{85,-26,36}, -{85,-26,37}, -{85,-26,38}, -{85,-26,39}, -{85,-26,40}, -{85,-26,41}, -{85,-26,42}, -{85,-26,43}, -{85,-26,44}, -{85,-26,45}, -{85,-26,46}, -{85,-26,47}, -{85,-26,48}, -{85,-26,49}, -{85,-26,50}, -{85,-26,51}, -{85,-26,52}, -{85,-26,53}, -{85,-26,54}, -{85,-26,55}, -{85,-26,56}, -{85,-26,57}, -{85,-26,58}, -{85,-26,59}, -{85,-26,60}, -{85,-26,61}, -{85,-26,62}, -{85,-26,63}, -{85,-26,64}, -{85,-26,65}, -{85,-26,66}, -{85,-26,67}, -{85,-26,68}, -{85,-26,69}, -{85,-26,70}, -{85,-26,71}, -{85,-26,72}, -{85,-26,73}, -{85,-26,74}, -{85,-26,75}, -{85,-26,76}, -{85,-26,77}, -{85,-26,78}, -{85,-26,79}, -{85,-26,80}, -{85,-26,81}, -{85,-26,82}, -{85,-26,83}, -{85,-26,84}, -{85,-25,-23}, -{85,-25,-22}, -{85,-25,-21}, -{85,-25,-20}, -{85,-25,-19}, -{85,-25,-18}, -{85,-25,-17}, -{85,-25,-16}, -{85,-25,-15}, -{85,-25,-14}, -{85,-25,-13}, -{85,-25,-12}, -{85,-25,-11}, -{85,-25,-10}, -{85,-25,-9}, -{85,-25,-8}, -{85,-25,-7}, -{85,-25,-6}, -{85,-25,-5}, -{85,-25,-4}, -{85,-25,-3}, -{85,-25,-2}, -{85,-25,-1}, -{85,-25,0}, -{85,-25,1}, -{85,-25,2}, -{85,-25,3}, -{85,-25,4}, -{85,-25,5}, -{85,-25,6}, -{85,-25,7}, -{85,-25,8}, -{85,-25,9}, -{85,-25,10}, -{85,-25,11}, -{85,-25,12}, -{85,-25,13}, -{85,-25,14}, -{85,-25,15}, -{85,-25,16}, -{85,-25,17}, -{85,-25,18}, -{85,-25,19}, -{85,-25,20}, -{85,-25,21}, -{85,-25,22}, -{85,-25,23}, -{85,-25,24}, -{85,-25,25}, -{85,-25,26}, -{85,-25,27}, -{85,-25,28}, -{85,-25,29}, -{85,-25,30}, -{85,-25,31}, -{85,-25,32}, -{85,-25,33}, -{85,-25,34}, -{85,-25,35}, -{85,-25,36}, -{85,-25,37}, -{85,-25,38}, -{85,-25,39}, -{85,-25,40}, -{85,-25,41}, -{85,-25,42}, -{85,-25,43}, -{85,-25,44}, -{85,-25,45}, -{85,-25,46}, -{85,-25,47}, -{85,-25,48}, -{85,-25,49}, -{85,-25,50}, -{85,-25,51}, -{85,-25,52}, -{85,-25,53}, -{85,-25,54}, -{85,-25,55}, -{85,-25,56}, -{85,-25,57}, -{85,-25,58}, -{85,-25,59}, -{85,-25,60}, -{85,-25,61}, -{85,-25,62}, -{85,-25,63}, -{85,-25,64}, -{85,-25,65}, -{85,-25,66}, -{85,-25,67}, -{85,-25,68}, -{85,-25,69}, -{85,-25,70}, -{85,-25,71}, -{85,-25,72}, -{85,-25,73}, -{85,-25,74}, -{85,-25,75}, -{85,-25,76}, -{85,-25,77}, -{85,-25,78}, -{85,-25,79}, -{85,-25,80}, -{85,-25,81}, -{85,-25,82}, -{85,-25,83}, -{85,-25,84}, -{85,-24,-23}, -{85,-24,-22}, -{85,-24,-21}, -{85,-24,-20}, -{85,-24,-19}, -{85,-24,-18}, -{85,-24,-17}, -{85,-24,-16}, -{85,-24,-15}, -{85,-24,-14}, -{85,-24,-13}, -{85,-24,-12}, -{85,-24,-11}, -{85,-24,-10}, -{85,-24,-9}, -{85,-24,-8}, -{85,-24,-7}, -{85,-24,-6}, -{85,-24,-5}, -{85,-24,-4}, -{85,-24,-3}, -{85,-24,-2}, -{85,-24,-1}, -{85,-24,0}, -{85,-24,1}, -{85,-24,2}, -{85,-24,3}, -{85,-24,4}, -{85,-24,5}, -{85,-24,6}, -{85,-24,7}, -{85,-24,8}, -{85,-24,9}, -{85,-24,10}, -{85,-24,11}, -{85,-24,12}, -{85,-24,13}, -{85,-24,14}, -{85,-24,15}, -{85,-24,16}, -{85,-24,17}, -{85,-24,18}, -{85,-24,19}, -{85,-24,20}, -{85,-24,21}, -{85,-24,22}, -{85,-24,23}, -{85,-24,24}, -{85,-24,25}, -{85,-24,26}, -{85,-24,27}, -{85,-24,28}, -{85,-24,29}, -{85,-24,30}, -{85,-24,31}, -{85,-24,32}, -{85,-24,33}, -{85,-24,34}, -{85,-24,35}, -{85,-24,36}, -{85,-24,37}, -{85,-24,38}, -{85,-24,39}, -{85,-24,40}, -{85,-24,41}, -{85,-24,42}, -{85,-24,43}, -{85,-24,44}, -{85,-24,45}, -{85,-24,46}, -{85,-24,47}, -{85,-24,48}, -{85,-24,49}, -{85,-24,50}, -{85,-24,51}, -{85,-24,52}, -{85,-24,53}, -{85,-24,54}, -{85,-24,55}, -{85,-24,56}, -{85,-24,57}, -{85,-24,58}, -{85,-24,59}, -{85,-24,60}, -{85,-24,61}, -{85,-24,62}, -{85,-24,63}, -{85,-24,64}, -{85,-24,65}, -{85,-24,66}, -{85,-24,67}, -{85,-24,68}, -{85,-24,69}, -{85,-24,70}, -{85,-24,71}, -{85,-24,72}, -{85,-24,73}, -{85,-24,74}, -{85,-24,75}, -{85,-24,76}, -{85,-24,77}, -{85,-24,78}, -{85,-24,79}, -{85,-24,80}, -{85,-24,81}, -{85,-24,82}, -{85,-24,83}, -{85,-24,84}, -{85,-23,-23}, -{85,-23,-22}, -{85,-23,-21}, -{85,-23,-20}, -{85,-23,-19}, -{85,-23,-18}, -{85,-23,-17}, -{85,-23,-16}, -{85,-23,-15}, -{85,-23,-14}, -{85,-23,-13}, -{85,-23,-12}, -{85,-23,-11}, -{85,-23,-10}, -{85,-23,-9}, -{85,-23,-8}, -{85,-23,-7}, -{85,-23,-6}, -{85,-23,-5}, -{85,-23,-4}, -{85,-23,-3}, -{85,-23,-2}, -{85,-23,-1}, -{85,-23,0}, -{85,-23,1}, -{85,-23,2}, -{85,-23,3}, -{85,-23,4}, -{85,-23,5}, -{85,-23,6}, -{85,-23,7}, -{85,-23,8}, -{85,-23,9}, -{85,-23,10}, -{85,-23,11}, -{85,-23,12}, -{85,-23,13}, -{85,-23,14}, -{85,-23,15}, -{85,-23,16}, -{85,-23,17}, -{85,-23,18}, -{85,-23,19}, -{85,-23,20}, -{85,-23,21}, -{85,-23,22}, -{85,-23,23}, -{85,-23,24}, -{85,-23,25}, -{85,-23,26}, -{85,-23,27}, -{85,-23,28}, -{85,-23,29}, -{85,-23,30}, -{85,-23,31}, -{85,-23,32}, -{85,-23,33}, -{85,-23,34}, -{85,-23,35}, -{85,-23,36}, -{85,-23,37}, -{85,-23,38}, -{85,-23,39}, -{85,-23,40}, -{85,-23,41}, -{85,-23,42}, -{85,-23,43}, -{85,-23,44}, -{85,-23,45}, -{85,-23,46}, -{85,-23,47}, -{85,-23,48}, -{85,-23,49}, -{85,-23,50}, -{85,-23,51}, -{85,-23,52}, -{85,-23,53}, -{85,-23,54}, -{85,-23,55}, -{85,-23,56}, -{85,-23,57}, -{85,-23,58}, -{85,-23,59}, -{85,-23,60}, -{85,-23,61}, -{85,-23,62}, -{85,-23,63}, -{85,-23,64}, -{85,-23,65}, -{85,-23,66}, -{85,-23,67}, -{85,-23,68}, -{85,-23,69}, -{85,-23,70}, -{85,-23,71}, -{85,-23,72}, -{85,-23,73}, -{85,-23,74}, -{85,-23,75}, -{85,-23,76}, -{85,-23,77}, -{85,-23,78}, -{85,-23,79}, -{85,-23,80}, -{85,-23,81}, -{85,-23,82}, -{85,-23,83}, -{85,-23,84}, -{85,-22,-23}, -{85,-22,-22}, -{85,-22,-21}, -{85,-22,-20}, -{85,-22,-19}, -{85,-22,-18}, -{85,-22,-17}, -{85,-22,-16}, -{85,-22,-15}, -{85,-22,-14}, -{85,-22,-13}, -{85,-22,-12}, -{85,-22,-11}, -{85,-22,-10}, -{85,-22,-9}, -{85,-22,-8}, -{85,-22,-7}, -{85,-22,-6}, -{85,-22,-5}, -{85,-22,-4}, -{85,-22,-3}, -{85,-22,-2}, -{85,-22,-1}, -{85,-22,0}, -{85,-22,1}, -{85,-22,2}, -{85,-22,3}, -{85,-22,4}, -{85,-22,5}, -{85,-22,6}, -{85,-22,7}, -{85,-22,8}, -{85,-22,9}, -{85,-22,10}, -{85,-22,11}, -{85,-22,12}, -{85,-22,13}, -{85,-22,14}, -{85,-22,15}, -{85,-22,16}, -{85,-22,17}, -{85,-22,18}, -{85,-22,19}, -{85,-22,20}, -{85,-22,21}, -{85,-22,22}, -{85,-22,23}, -{85,-22,24}, -{85,-22,25}, -{85,-22,26}, -{85,-22,27}, -{85,-22,28}, -{85,-22,29}, -{85,-22,30}, -{85,-22,31}, -{85,-22,32}, -{85,-22,33}, -{85,-22,34}, -{85,-22,35}, -{85,-22,36}, -{85,-22,37}, -{85,-22,38}, -{85,-22,39}, -{85,-22,40}, -{85,-22,41}, -{85,-22,42}, -{85,-22,43}, -{85,-22,44}, -{85,-22,45}, -{85,-22,46}, -{85,-22,47}, -{85,-22,48}, -{85,-22,49}, -{85,-22,50}, -{85,-22,51}, -{85,-22,52}, -{85,-22,53}, -{85,-22,54}, -{85,-22,55}, -{85,-22,56}, -{85,-22,57}, -{85,-22,58}, -{85,-22,59}, -{85,-22,60}, -{85,-22,61}, -{85,-22,62}, -{85,-22,63}, -{85,-22,64}, -{85,-22,65}, -{85,-22,66}, -{85,-22,67}, -{85,-22,68}, -{85,-22,69}, -{85,-22,70}, -{85,-22,71}, -{85,-22,72}, -{85,-22,73}, -{85,-22,74}, -{85,-22,75}, -{85,-22,76}, -{85,-22,77}, -{85,-22,78}, -{85,-22,79}, -{85,-22,80}, -{85,-22,81}, -{85,-22,82}, -{85,-22,83}, -{85,-22,84}, -{85,-21,-23}, -{85,-21,-22}, -{85,-21,-21}, -{85,-21,-20}, -{85,-21,-19}, -{85,-21,-18}, -{85,-21,-17}, -{85,-21,-16}, -{85,-21,-15}, -{85,-21,-14}, -{85,-21,-13}, -{85,-21,-12}, -{85,-21,-11}, -{85,-21,-10}, -{85,-21,-9}, -{85,-21,-8}, -{85,-21,-7}, -{85,-21,-6}, -{85,-21,-5}, -{85,-21,-4}, -{85,-21,-3}, -{85,-21,-2}, -{85,-21,-1}, -{85,-21,0}, -{85,-21,1}, -{85,-21,2}, -{85,-21,3}, -{85,-21,4}, -{85,-21,5}, -{85,-21,6}, -{85,-21,7}, -{85,-21,8}, -{85,-21,9}, -{85,-21,10}, -{85,-21,11}, -{85,-21,12}, -{85,-21,13}, -{85,-21,14}, -{85,-21,15}, -{85,-21,16}, -{85,-21,17}, -{85,-21,18}, -{85,-21,19}, -{85,-21,20}, -{85,-21,21}, -{85,-21,22}, -{85,-21,23}, -{85,-21,24}, -{85,-21,25}, -{85,-21,26}, -{85,-21,27}, -{85,-21,28}, -{85,-21,29}, -{85,-21,30}, -{85,-21,31}, -{85,-21,32}, -{85,-21,33}, -{85,-21,34}, -{85,-21,35}, -{85,-21,36}, -{85,-21,37}, -{85,-21,38}, -{85,-21,39}, -{85,-21,40}, -{85,-21,41}, -{85,-21,42}, -{85,-21,43}, -{85,-21,44}, -{85,-21,45}, -{85,-21,46}, -{85,-21,47}, -{85,-21,48}, -{85,-21,49}, -{85,-21,50}, -{85,-21,51}, -{85,-21,52}, -{85,-21,53}, -{85,-21,54}, -{85,-21,55}, -{85,-21,56}, -{85,-21,57}, -{85,-21,58}, -{85,-21,59}, -{85,-21,60}, -{85,-21,61}, -{85,-21,62}, -{85,-21,63}, -{85,-21,64}, -{85,-21,65}, -{85,-21,66}, -{85,-21,67}, -{85,-21,68}, -{85,-21,69}, -{85,-21,70}, -{85,-21,71}, -{85,-21,72}, -{85,-21,73}, -{85,-21,74}, -{85,-21,75}, -{85,-21,76}, -{85,-21,77}, -{85,-21,78}, -{85,-21,79}, -{85,-21,80}, -{85,-21,81}, -{85,-21,82}, -{85,-21,83}, -{85,-21,84}, -{85,-20,-23}, -{85,-20,-22}, -{85,-20,-21}, -{85,-20,-20}, -{85,-20,-19}, -{85,-20,-18}, -{85,-20,-17}, -{85,-20,-16}, -{85,-20,-15}, -{85,-20,-14}, -{85,-20,-13}, -{85,-20,-12}, -{85,-20,-11}, -{85,-20,-10}, -{85,-20,-9}, -{85,-20,-8}, -{85,-20,-7}, -{85,-20,-6}, -{85,-20,-5}, -{85,-20,-4}, -{85,-20,-3}, -{85,-20,-2}, -{85,-20,-1}, -{85,-20,0}, -{85,-20,1}, -{85,-20,2}, -{85,-20,3}, -{85,-20,4}, -{85,-20,5}, -{85,-20,6}, -{85,-20,7}, -{85,-20,8}, -{85,-20,9}, -{85,-20,10}, -{85,-20,11}, -{85,-20,12}, -{85,-20,13}, -{85,-20,14}, -{85,-20,15}, -{85,-20,16}, -{85,-20,17}, -{85,-20,18}, -{85,-20,19}, -{85,-20,20}, -{85,-20,21}, -{85,-20,22}, -{85,-20,23}, -{85,-20,24}, -{85,-20,25}, -{85,-20,26}, -{85,-20,27}, -{85,-20,28}, -{85,-20,29}, -{85,-20,30}, -{85,-20,31}, -{85,-20,32}, -{85,-20,33}, -{85,-20,34}, -{85,-20,35}, -{85,-20,36}, -{85,-20,37}, -{85,-20,38}, -{85,-20,39}, -{85,-20,40}, -{85,-20,41}, -{85,-20,42}, -{85,-20,43}, -{85,-20,44}, -{85,-20,45}, -{85,-20,46}, -{85,-20,47}, -{85,-20,48}, -{85,-20,49}, -{85,-20,50}, -{85,-20,51}, -{85,-20,52}, -{85,-20,53}, -{85,-20,54}, -{85,-20,55}, -{85,-20,56}, -{85,-20,57}, -{85,-20,58}, -{85,-20,59}, -{85,-20,60}, -{85,-20,61}, -{85,-20,62}, -{85,-20,63}, -{85,-20,64}, -{85,-20,65}, -{85,-20,66}, -{85,-20,67}, -{85,-20,68}, -{85,-20,69}, -{85,-20,70}, -{85,-20,71}, -{85,-20,72}, -{85,-20,73}, -{85,-20,74}, -{85,-20,75}, -{85,-20,76}, -{85,-20,77}, -{85,-20,78}, -{85,-20,79}, -{85,-20,80}, -{85,-20,81}, -{85,-20,82}, -{85,-20,83}, -{85,-20,84}, -{85,-19,-23}, -{85,-19,-22}, -{85,-19,-21}, -{85,-19,-20}, -{85,-19,-19}, -{85,-19,-18}, -{85,-19,-17}, -{85,-19,-16}, -{85,-19,-15}, -{85,-19,-14}, -{85,-19,-13}, -{85,-19,-12}, -{85,-19,-11}, -{85,-19,-10}, -{85,-19,-9}, -{85,-19,-8}, -{85,-19,-7}, -{85,-19,-6}, -{85,-19,-5}, -{85,-19,-4}, -{85,-19,-3}, -{85,-19,-2}, -{85,-19,-1}, -{85,-19,0}, -{85,-19,1}, -{85,-19,2}, -{85,-19,3}, -{85,-19,4}, -{85,-19,5}, -{85,-19,6}, -{85,-19,7}, -{85,-19,8}, -{85,-19,9}, -{85,-19,10}, -{85,-19,11}, -{85,-19,12}, -{85,-19,13}, -{85,-19,14}, -{85,-19,15}, -{85,-19,16}, -{85,-19,17}, -{85,-19,18}, -{85,-19,19}, -{85,-19,20}, -{85,-19,21}, -{85,-19,22}, -{85,-19,23}, -{85,-19,24}, -{85,-19,25}, -{85,-19,26}, -{85,-19,27}, -{85,-19,28}, -{85,-19,29}, -{85,-19,30}, -{85,-19,31}, -{85,-19,32}, -{85,-19,33}, -{85,-19,34}, -{85,-19,35}, -{85,-19,36}, -{85,-19,37}, -{85,-19,38}, -{85,-19,39}, -{85,-19,40}, -{85,-19,41}, -{85,-19,42}, -{85,-19,43}, -{85,-19,44}, -{85,-19,45}, -{85,-19,46}, -{85,-19,47}, -{85,-19,48}, -{85,-19,49}, -{85,-19,50}, -{85,-19,51}, -{85,-19,52}, -{85,-19,53}, -{85,-19,54}, -{85,-19,55}, -{85,-19,56}, -{85,-19,57}, -{85,-19,58}, -{85,-19,59}, -{85,-19,60}, -{85,-19,61}, -{85,-19,62}, -{85,-19,63}, -{85,-19,64}, -{85,-19,65}, -{85,-19,66}, -{85,-19,67}, -{85,-19,68}, -{85,-19,69}, -{85,-19,70}, -{85,-19,71}, -{85,-19,72}, -{85,-19,73}, -{85,-19,74}, -{85,-19,75}, -{85,-19,76}, -{85,-19,77}, -{85,-19,78}, -{85,-19,79}, -{85,-19,80}, -{85,-19,81}, -{85,-19,82}, -{85,-19,83}, -{85,-19,84}, -{85,-18,-23}, -{85,-18,-22}, -{85,-18,-21}, -{85,-18,-20}, -{85,-18,-19}, -{85,-18,-18}, -{85,-18,-17}, -{85,-18,-16}, -{85,-18,-15}, -{85,-18,-14}, -{85,-18,-13}, -{85,-18,-12}, -{85,-18,-11}, -{85,-18,-10}, -{85,-18,-9}, -{85,-18,-8}, -{85,-18,-7}, -{85,-18,-6}, -{85,-18,-5}, -{85,-18,-4}, -{85,-18,-3}, -{85,-18,-2}, -{85,-18,-1}, -{85,-18,0}, -{85,-18,1}, -{85,-18,2}, -{85,-18,3}, -{85,-18,4}, -{85,-18,5}, -{85,-18,6}, -{85,-18,7}, -{85,-18,8}, -{85,-18,9}, -{85,-18,10}, -{85,-18,11}, -{85,-18,12}, -{85,-18,13}, -{85,-18,14}, -{85,-18,15}, -{85,-18,16}, -{85,-18,17}, -{85,-18,18}, -{85,-18,19}, -{85,-18,20}, -{85,-18,21}, -{85,-18,22}, -{85,-18,23}, -{85,-18,24}, -{85,-18,25}, -{85,-18,26}, -{85,-18,27}, -{85,-18,28}, -{85,-18,29}, -{85,-18,30}, -{85,-18,31}, -{85,-18,32}, -{85,-18,33}, -{85,-18,34}, -{85,-18,35}, -{85,-18,36}, -{85,-18,37}, -{85,-18,38}, -{85,-18,39}, -{85,-18,40}, -{85,-18,41}, -{85,-18,42}, -{85,-18,43}, -{85,-18,44}, -{85,-18,45}, -{85,-18,46}, -{85,-18,47}, -{85,-18,48}, -{85,-18,49}, -{85,-18,50}, -{85,-18,51}, -{85,-18,52}, -{85,-18,53}, -{85,-18,54}, -{85,-18,55}, -{85,-18,56}, -{85,-18,57}, -{85,-18,58}, -{85,-18,59}, -{85,-18,60}, -{85,-18,61}, -{85,-18,62}, -{85,-18,63}, -{85,-18,64}, -{85,-18,65}, -{85,-18,66}, -{85,-18,67}, -{85,-18,68}, -{85,-18,69}, -{85,-18,70}, -{85,-18,71}, -{85,-18,72}, -{85,-18,73}, -{85,-18,74}, -{85,-18,75}, -{85,-18,76}, -{85,-18,77}, -{85,-18,78}, -{85,-18,79}, -{85,-18,80}, -{85,-18,81}, -{85,-18,82}, -{85,-18,83}, -{85,-18,84}, -{85,-17,-23}, -{85,-17,-22}, -{85,-17,-21}, -{85,-17,-20}, -{85,-17,-19}, -{85,-17,-18}, -{85,-17,-17}, -{85,-17,-16}, -{85,-17,-15}, -{85,-17,-14}, -{85,-17,-13}, -{85,-17,-12}, -{85,-17,-11}, -{85,-17,-10}, -{85,-17,-9}, -{85,-17,-8}, -{85,-17,-7}, -{85,-17,-6}, -{85,-17,-5}, -{85,-17,-4}, -{85,-17,-3}, -{85,-17,-2}, -{85,-17,-1}, -{85,-17,0}, -{85,-17,1}, -{85,-17,2}, -{85,-17,3}, -{85,-17,4}, -{85,-17,5}, -{85,-17,6}, -{85,-17,7}, -{85,-17,8}, -{85,-17,9}, -{85,-17,10}, -{85,-17,11}, -{85,-17,12}, -{85,-17,13}, -{85,-17,14}, -{85,-17,15}, -{85,-17,16}, -{85,-17,17}, -{85,-17,18}, -{85,-17,19}, -{85,-17,20}, -{85,-17,21}, -{85,-17,22}, -{85,-17,23}, -{85,-17,24}, -{85,-17,25}, -{85,-17,26}, -{85,-17,27}, -{85,-17,28}, -{85,-17,29}, -{85,-17,30}, -{85,-17,31}, -{85,-17,32}, -{85,-17,33}, -{85,-17,34}, -{85,-17,35}, -{85,-17,36}, -{85,-17,37}, -{85,-17,38}, -{85,-17,39}, -{85,-17,40}, -{85,-17,41}, -{85,-17,42}, -{85,-17,43}, -{85,-17,44}, -{85,-17,45}, -{85,-17,46}, -{85,-17,47}, -{85,-17,48}, -{85,-17,49}, -{85,-17,50}, -{85,-17,51}, -{85,-17,52}, -{85,-17,53}, -{85,-17,54}, -{85,-17,55}, -{85,-17,56}, -{85,-17,57}, -{85,-17,58}, -{85,-17,59}, -{85,-17,60}, -{85,-17,61}, -{85,-17,62}, -{85,-17,63}, -{85,-17,64}, -{85,-17,65}, -{85,-17,66}, -{85,-17,67}, -{85,-17,68}, -{85,-17,69}, -{85,-17,70}, -{85,-17,71}, -{85,-17,72}, -{85,-17,73}, -{85,-17,74}, -{85,-17,75}, -{85,-17,76}, -{85,-17,77}, -{85,-17,78}, -{85,-17,79}, -{85,-17,80}, -{85,-17,81}, -{85,-17,82}, -{85,-17,83}, -{85,-17,84}, -{85,-16,-23}, -{85,-16,-22}, -{85,-16,-21}, -{85,-16,-20}, -{85,-16,-19}, -{85,-16,-18}, -{85,-16,-17}, -{85,-16,-16}, -{85,-16,-15}, -{85,-16,-14}, -{85,-16,-13}, -{85,-16,-12}, -{85,-16,-11}, -{85,-16,-10}, -{85,-16,-9}, -{85,-16,-8}, -{85,-16,-7}, -{85,-16,-6}, -{85,-16,-5}, -{85,-16,-4}, -{85,-16,-3}, -{85,-16,-2}, -{85,-16,-1}, -{85,-16,0}, -{85,-16,1}, -{85,-16,2}, -{85,-16,3}, -{85,-16,4}, -{85,-16,5}, -{85,-16,6}, -{85,-16,7}, -{85,-16,8}, -{85,-16,9}, -{85,-16,10}, -{85,-16,11}, -{85,-16,12}, -{85,-16,13}, -{85,-16,14}, -{85,-16,15}, -{85,-16,16}, -{85,-16,17}, -{85,-16,18}, -{85,-16,19}, -{85,-16,20}, -{85,-16,21}, -{85,-16,22}, -{85,-16,23}, -{85,-16,24}, -{85,-16,25}, -{85,-16,26}, -{85,-16,27}, -{85,-16,28}, -{85,-16,29}, -{85,-16,30}, -{85,-16,31}, -{85,-16,32}, -{85,-16,33}, -{85,-16,34}, -{85,-16,35}, -{85,-16,36}, -{85,-16,37}, -{85,-16,38}, -{85,-16,39}, -{85,-16,40}, -{85,-16,41}, -{85,-16,42}, -{85,-16,43}, -{85,-16,44}, -{85,-16,45}, -{85,-16,46}, -{85,-16,47}, -{85,-16,48}, -{85,-16,49}, -{85,-16,50}, -{85,-16,51}, -{85,-16,52}, -{85,-16,53}, -{85,-16,54}, -{85,-16,55}, -{85,-16,56}, -{85,-16,57}, -{85,-16,58}, -{85,-16,59}, -{85,-16,60}, -{85,-16,61}, -{85,-16,62}, -{85,-16,63}, -{85,-16,64}, -{85,-16,65}, -{85,-16,66}, -{85,-16,67}, -{85,-16,68}, -{85,-16,69}, -{85,-16,70}, -{85,-16,71}, -{85,-16,72}, -{85,-16,73}, -{85,-16,74}, -{85,-16,75}, -{85,-16,76}, -{85,-16,77}, -{85,-16,78}, -{85,-16,79}, -{85,-16,80}, -{85,-16,81}, -{85,-16,82}, -{85,-16,83}, -{85,-16,84}, -{85,-15,-23}, -{85,-15,-22}, -{85,-15,-21}, -{85,-15,-20}, -{85,-15,-19}, -{85,-15,-18}, -{85,-15,-17}, -{85,-15,-16}, -{85,-15,-15}, -{85,-15,-14}, -{85,-15,-13}, -{85,-15,-12}, -{85,-15,-11}, -{85,-15,-10}, -{85,-15,-9}, -{85,-15,-8}, -{85,-15,-7}, -{85,-15,-6}, -{85,-15,-5}, -{85,-15,-4}, -{85,-15,-3}, -{85,-15,-2}, -{85,-15,-1}, -{85,-15,0}, -{85,-15,1}, -{85,-15,2}, -{85,-15,3}, -{85,-15,4}, -{85,-15,5}, -{85,-15,6}, -{85,-15,7}, -{85,-15,8}, -{85,-15,9}, -{85,-15,10}, -{85,-15,11}, -{85,-15,12}, -{85,-15,13}, -{85,-15,14}, -{85,-15,15}, -{85,-15,16}, -{85,-15,17}, -{85,-15,18}, -{85,-15,19}, -{85,-15,20}, -{85,-15,21}, -{85,-15,22}, -{85,-15,23}, -{85,-15,24}, -{85,-15,25}, -{85,-15,26}, -{85,-15,27}, -{85,-15,28}, -{85,-15,29}, -{85,-15,30}, -{85,-15,31}, -{85,-15,32}, -{85,-15,33}, -{85,-15,34}, -{85,-15,35}, -{85,-15,36}, -{85,-15,37}, -{85,-15,38}, -{85,-15,39}, -{85,-15,40}, -{85,-15,41}, -{85,-15,42}, -{85,-15,43}, -{85,-15,44}, -{85,-15,45}, -{85,-15,46}, -{85,-15,47}, -{85,-15,48}, -{85,-15,49}, -{85,-15,50}, -{85,-15,51}, -{85,-15,52}, -{85,-15,53}, -{85,-15,54}, -{85,-15,55}, -{85,-15,56}, -{85,-15,57}, -{85,-15,58}, -{85,-15,59}, -{85,-15,60}, -{85,-15,61}, -{85,-15,62}, -{85,-15,63}, -{85,-15,64}, -{85,-15,65}, -{85,-15,66}, -{85,-15,67}, -{85,-15,68}, -{85,-15,69}, -{85,-15,70}, -{85,-15,71}, -{85,-15,72}, -{85,-15,73}, -{85,-15,74}, -{85,-15,75}, -{85,-15,76}, -{85,-15,77}, -{85,-15,78}, -{85,-15,79}, -{85,-15,80}, -{85,-15,81}, -{85,-15,82}, -{85,-15,83}, -{85,-15,84}, -{85,-14,-23}, -{85,-14,-22}, -{85,-14,-21}, -{85,-14,-20}, -{85,-14,-19}, -{85,-14,-18}, -{85,-14,-17}, -{85,-14,-16}, -{85,-14,-15}, -{85,-14,-14}, -{85,-14,-13}, -{85,-14,-12}, -{85,-14,-11}, -{85,-14,-10}, -{85,-14,-9}, -{85,-14,-8}, -{85,-14,-7}, -{85,-14,-6}, -{85,-14,-5}, -{85,-14,-4}, -{85,-14,-3}, -{85,-14,-2}, -{85,-14,-1}, -{85,-14,0}, -{85,-14,1}, -{85,-14,2}, -{85,-14,3}, -{85,-14,4}, -{85,-14,5}, -{85,-14,6}, -{85,-14,7}, -{85,-14,8}, -{85,-14,9}, -{85,-14,10}, -{85,-14,11}, -{85,-14,12}, -{85,-14,13}, -{85,-14,14}, -{85,-14,15}, -{85,-14,16}, -{85,-14,17}, -{85,-14,18}, -{85,-14,19}, -{85,-14,20}, -{85,-14,21}, -{85,-14,22}, -{85,-14,23}, -{85,-14,24}, -{85,-14,25}, -{85,-14,26}, -{85,-14,27}, -{85,-14,28}, -{85,-14,29}, -{85,-14,30}, -{85,-14,31}, -{85,-14,32}, -{85,-14,33}, -{85,-14,34}, -{85,-14,35}, -{85,-14,36}, -{85,-14,37}, -{85,-14,38}, -{85,-14,39}, -{85,-14,40}, -{85,-14,41}, -{85,-14,42}, -{85,-14,43}, -{85,-14,44}, -{85,-14,45}, -{85,-14,46}, -{85,-14,47}, -{85,-14,48}, -{85,-14,49}, -{85,-14,50}, -{85,-14,51}, -{85,-14,52}, -{85,-14,53}, -{85,-14,54}, -{85,-14,55}, -{85,-14,56}, -{85,-14,57}, -{85,-14,58}, -{85,-14,59}, -{85,-14,60}, -{85,-14,61}, -{85,-14,62}, -{85,-14,63}, -{85,-14,64}, -{85,-14,65}, -{85,-14,66}, -{85,-14,67}, -{85,-14,68}, -{85,-14,69}, -{85,-14,70}, -{85,-14,71}, -{85,-14,72}, -{85,-14,73}, -{85,-14,74}, -{85,-14,75}, -{85,-14,76}, -{85,-14,77}, -{85,-14,78}, -{85,-14,79}, -{85,-14,80}, -{85,-14,81}, -{85,-14,82}, -{85,-14,83}, -{85,-14,84}, -{85,-13,-23}, -{85,-13,-22}, -{85,-13,-21}, -{85,-13,-20}, -{85,-13,-19}, -{85,-13,-18}, -{85,-13,-17}, -{85,-13,-16}, -{85,-13,-15}, -{85,-13,-14}, -{85,-13,-13}, -{85,-13,-12}, -{85,-13,-11}, -{85,-13,-10}, -{85,-13,-9}, -{85,-13,-8}, -{85,-13,-7}, -{85,-13,-6}, -{85,-13,-5}, -{85,-13,-4}, -{85,-13,-3}, -{85,-13,-2}, -{85,-13,-1}, -{85,-13,0}, -{85,-13,1}, -{85,-13,2}, -{85,-13,3}, -{85,-13,4}, -{85,-13,5}, -{85,-13,6}, -{85,-13,7}, -{85,-13,8}, -{85,-13,9}, -{85,-13,10}, -{85,-13,11}, -{85,-13,12}, -{85,-13,13}, -{85,-13,14}, -{85,-13,15}, -{85,-13,16}, -{85,-13,17}, -{85,-13,18}, -{85,-13,19}, -{85,-13,20}, -{85,-13,21}, -{85,-13,22}, -{85,-13,23}, -{85,-13,24}, -{85,-13,25}, -{85,-13,26}, -{85,-13,27}, -{85,-13,28}, -{85,-13,29}, -{85,-13,30}, -{85,-13,31}, -{85,-13,32}, -{85,-13,33}, -{85,-13,34}, -{85,-13,35}, -{85,-13,36}, -{85,-13,37}, -{85,-13,38}, -{85,-13,39}, -{85,-13,40}, -{85,-13,41}, -{85,-13,42}, -{85,-13,43}, -{85,-13,44}, -{85,-13,45}, -{85,-13,46}, -{85,-13,47}, -{85,-13,48}, -{85,-13,49}, -{85,-13,50}, -{85,-13,51}, -{85,-13,52}, -{85,-13,53}, -{85,-13,54}, -{85,-13,55}, -{85,-13,56}, -{85,-13,57}, -{85,-13,58}, -{85,-13,59}, -{85,-13,60}, -{85,-13,61}, -{85,-13,62}, -{85,-13,63}, -{85,-13,64}, -{85,-13,65}, -{85,-13,66}, -{85,-13,67}, -{85,-13,68}, -{85,-13,69}, -{85,-13,70}, -{85,-13,71}, -{85,-13,72}, -{85,-13,73}, -{85,-13,74}, -{85,-13,75}, -{85,-13,76}, -{85,-13,77}, -{85,-13,78}, -{85,-13,79}, -{85,-13,80}, -{85,-13,81}, -{85,-13,82}, -{85,-13,83}, -{85,-13,84}, -{85,-12,-23}, -{85,-12,-22}, -{85,-12,-21}, -{85,-12,-20}, -{85,-12,-19}, -{85,-12,-18}, -{85,-12,-17}, -{85,-12,-16}, -{85,-12,-15}, -{85,-12,-14}, -{85,-12,-13}, -{85,-12,-12}, -{85,-12,-11}, -{85,-12,-10}, -{85,-12,-9}, -{85,-12,-8}, -{85,-12,-7}, -{85,-12,-6}, -{85,-12,-5}, -{85,-12,-4}, -{85,-12,-3}, -{85,-12,-2}, -{85,-12,-1}, -{85,-12,0}, -{85,-12,1}, -{85,-12,2}, -{85,-12,3}, -{85,-12,4}, -{85,-12,5}, -{85,-12,6}, -{85,-12,7}, -{85,-12,8}, -{85,-12,9}, -{85,-12,10}, -{85,-12,11}, -{85,-12,12}, -{85,-12,13}, -{85,-12,14}, -{85,-12,15}, -{85,-12,16}, -{85,-12,17}, -{85,-12,18}, -{85,-12,19}, -{85,-12,20}, -{85,-12,21}, -{85,-12,22}, -{85,-12,23}, -{85,-12,24}, -{85,-12,25}, -{85,-12,26}, -{85,-12,27}, -{85,-12,28}, -{85,-12,29}, -{85,-12,30}, -{85,-12,31}, -{85,-12,32}, -{85,-12,33}, -{85,-12,34}, -{85,-12,35}, -{85,-12,36}, -{85,-12,37}, -{85,-12,38}, -{85,-12,39}, -{85,-12,40}, -{85,-12,41}, -{85,-12,42}, -{85,-12,43}, -{85,-12,44}, -{85,-12,45}, -{85,-12,46}, -{85,-12,47}, -{85,-12,48}, -{85,-12,49}, -{85,-12,50}, -{85,-12,51}, -{85,-12,52}, -{85,-12,53}, -{85,-12,54}, -{85,-12,55}, -{85,-12,56}, -{85,-12,57}, -{85,-12,58}, -{85,-12,59}, -{85,-12,60}, -{85,-12,61}, -{85,-12,62}, -{85,-12,63}, -{85,-12,64}, -{85,-12,65}, -{85,-12,66}, -{85,-12,67}, -{85,-12,68}, -{85,-12,69}, -{85,-12,70}, -{85,-12,71}, -{85,-12,72}, -{85,-12,73}, -{85,-12,74}, -{85,-12,75}, -{85,-12,76}, -{85,-12,77}, -{85,-12,78}, -{85,-12,79}, -{85,-12,80}, -{85,-12,81}, -{85,-12,82}, -{85,-12,83}, -{85,-12,84}, -{85,-12,85}, -{85,-11,-23}, -{85,-11,-22}, -{85,-11,-21}, -{85,-11,-20}, -{85,-11,-19}, -{85,-11,-18}, -{85,-11,-17}, -{85,-11,-16}, -{85,-11,-15}, -{85,-11,-14}, -{85,-11,-13}, -{85,-11,-12}, -{85,-11,-11}, -{85,-11,-10}, -{85,-11,-9}, -{85,-11,-8}, -{85,-11,-7}, -{85,-11,-6}, -{85,-11,-5}, -{85,-11,-4}, -{85,-11,-3}, -{85,-11,-2}, -{85,-11,-1}, -{85,-11,0}, -{85,-11,1}, -{85,-11,2}, -{85,-11,3}, -{85,-11,4}, -{85,-11,5}, -{85,-11,6}, -{85,-11,7}, -{85,-11,8}, -{85,-11,9}, -{85,-11,10}, -{85,-11,11}, -{85,-11,12}, -{85,-11,13}, -{85,-11,14}, -{85,-11,15}, -{85,-11,16}, -{85,-11,17}, -{85,-11,18}, -{85,-11,19}, -{85,-11,20}, -{85,-11,21}, -{85,-11,22}, -{85,-11,23}, -{85,-11,24}, -{85,-11,25}, -{85,-11,26}, -{85,-11,27}, -{85,-11,28}, -{85,-11,29}, -{85,-11,30}, -{85,-11,31}, -{85,-11,32}, -{85,-11,33}, -{85,-11,34}, -{85,-11,35}, -{85,-11,36}, -{85,-11,37}, -{85,-11,38}, -{85,-11,39}, -{85,-11,40}, -{85,-11,41}, -{85,-11,42}, -{85,-11,43}, -{85,-11,44}, -{85,-11,45}, -{85,-11,46}, -{85,-11,47}, -{85,-11,48}, -{85,-11,49}, -{85,-11,50}, -{85,-11,51}, -{85,-11,52}, -{85,-11,53}, -{85,-11,54}, -{85,-11,55}, -{85,-11,56}, -{85,-11,57}, -{85,-11,58}, -{85,-11,59}, -{85,-11,60}, -{85,-11,61}, -{85,-11,62}, -{85,-11,63}, -{85,-11,64}, -{85,-11,65}, -{85,-11,66}, -{85,-11,67}, -{85,-11,68}, -{85,-11,69}, -{85,-11,70}, -{85,-11,71}, -{85,-11,72}, -{85,-11,73}, -{85,-11,74}, -{85,-11,75}, -{85,-11,76}, -{85,-11,77}, -{85,-11,78}, -{85,-11,79}, -{85,-11,80}, -{85,-11,81}, -{85,-11,82}, -{85,-11,83}, -{85,-11,84}, -{85,-11,85}, -{85,-10,-23}, -{85,-10,-22}, -{85,-10,-21}, -{85,-10,-20}, -{85,-10,-19}, -{85,-10,-18}, -{85,-10,-17}, -{85,-10,-16}, -{85,-10,-15}, -{85,-10,-14}, -{85,-10,-13}, -{85,-10,-12}, -{85,-10,-11}, -{85,-10,-10}, -{85,-10,-9}, -{85,-10,-8}, -{85,-10,-7}, -{85,-10,-6}, -{85,-10,-5}, -{85,-10,-4}, -{85,-10,-3}, -{85,-10,-2}, -{85,-10,-1}, -{85,-10,0}, -{85,-10,1}, -{85,-10,2}, -{85,-10,3}, -{85,-10,4}, -{85,-10,5}, -{85,-10,6}, -{85,-10,7}, -{85,-10,8}, -{85,-10,9}, -{85,-10,10}, -{85,-10,11}, -{85,-10,12}, -{85,-10,13}, -{85,-10,14}, -{85,-10,15}, -{85,-10,16}, -{85,-10,17}, -{85,-10,18}, -{85,-10,19}, -{85,-10,20}, -{85,-10,21}, -{85,-10,22}, -{85,-10,23}, -{85,-10,24}, -{85,-10,25}, -{85,-10,26}, -{85,-10,27}, -{85,-10,28}, -{85,-10,29}, -{85,-10,30}, -{85,-10,31}, -{85,-10,32}, -{85,-10,33}, -{85,-10,34}, -{85,-10,35}, -{85,-10,36}, -{85,-10,37}, -{85,-10,38}, -{85,-10,39}, -{85,-10,40}, -{85,-10,41}, -{85,-10,42}, -{85,-10,43}, -{85,-10,44}, -{85,-10,45}, -{85,-10,46}, -{85,-10,47}, -{85,-10,48}, -{85,-10,49}, -{85,-10,50}, -{85,-10,51}, -{85,-10,52}, -{85,-10,53}, -{85,-10,54}, -{85,-10,55}, -{85,-10,56}, -{85,-10,57}, -{85,-10,58}, -{85,-10,59}, -{85,-10,60}, -{85,-10,61}, -{85,-10,62}, -{85,-10,63}, -{85,-10,64}, -{85,-10,65}, -{85,-10,66}, -{85,-10,67}, -{85,-10,68}, -{85,-10,69}, -{85,-10,70}, -{85,-10,71}, -{85,-10,72}, -{85,-10,73}, -{85,-10,74}, -{85,-10,75}, -{85,-10,76}, -{85,-10,77}, -{85,-10,78}, -{85,-10,79}, -{85,-10,80}, -{85,-10,81}, -{85,-10,82}, -{85,-10,83}, -{85,-10,84}, -{85,-10,85}, -{85,-9,-23}, -{85,-9,-22}, -{85,-9,-21}, -{85,-9,-20}, -{85,-9,-19}, -{85,-9,-18}, -{85,-9,-17}, -{85,-9,-16}, -{85,-9,-15}, -{85,-9,-14}, -{85,-9,-13}, -{85,-9,-12}, -{85,-9,-11}, -{85,-9,-10}, -{85,-9,-9}, -{85,-9,-8}, -{85,-9,-7}, -{85,-9,-6}, -{85,-9,-5}, -{85,-9,-4}, -{85,-9,-3}, -{85,-9,-2}, -{85,-9,-1}, -{85,-9,0}, -{85,-9,1}, -{85,-9,2}, -{85,-9,3}, -{85,-9,4}, -{85,-9,5}, -{85,-9,6}, -{85,-9,7}, -{85,-9,8}, -{85,-9,9}, -{85,-9,10}, -{85,-9,11}, -{85,-9,12}, -{85,-9,13}, -{85,-9,14}, -{85,-9,15}, -{85,-9,16}, -{85,-9,17}, -{85,-9,18}, -{85,-9,19}, -{85,-9,20}, -{85,-9,21}, -{85,-9,22}, -{85,-9,23}, -{85,-9,24}, -{85,-9,25}, -{85,-9,26}, -{85,-9,27}, -{85,-9,28}, -{85,-9,29}, -{85,-9,30}, -{85,-9,31}, -{85,-9,32}, -{85,-9,33}, -{85,-9,34}, -{85,-9,35}, -{85,-9,36}, -{85,-9,37}, -{85,-9,38}, -{85,-9,39}, -{85,-9,40}, -{85,-9,41}, -{85,-9,42}, -{85,-9,43}, -{85,-9,44}, -{85,-9,45}, -{85,-9,46}, -{85,-9,47}, -{85,-9,48}, -{85,-9,49}, -{85,-9,50}, -{85,-9,51}, -{85,-9,52}, -{85,-9,53}, -{85,-9,54}, -{85,-9,55}, -{85,-9,56}, -{85,-9,57}, -{85,-9,58}, -{85,-9,59}, -{85,-9,60}, -{85,-9,61}, -{85,-9,62}, -{85,-9,63}, -{85,-9,64}, -{85,-9,65}, -{85,-9,66}, -{85,-9,67}, -{85,-9,68}, -{85,-9,69}, -{85,-9,70}, -{85,-9,71}, -{85,-9,72}, -{85,-9,73}, -{85,-9,74}, -{85,-9,75}, -{85,-9,76}, -{85,-9,77}, -{85,-9,78}, -{85,-9,79}, -{85,-9,80}, -{85,-9,81}, -{85,-9,82}, -{85,-9,83}, -{85,-9,84}, -{85,-9,85}, -{85,-8,-23}, -{85,-8,-22}, -{85,-8,-21}, -{85,-8,-20}, -{85,-8,-19}, -{85,-8,-18}, -{85,-8,-17}, -{85,-8,-16}, -{85,-8,-15}, -{85,-8,-14}, -{85,-8,-13}, -{85,-8,-12}, -{85,-8,-11}, -{85,-8,-10}, -{85,-8,-9}, -{85,-8,-8}, -{85,-8,-7}, -{85,-8,-6}, -{85,-8,-5}, -{85,-8,-4}, -{85,-8,-3}, -{85,-8,-2}, -{85,-8,-1}, -{85,-8,0}, -{85,-8,1}, -{85,-8,2}, -{85,-8,3}, -{85,-8,4}, -{85,-8,5}, -{85,-8,6}, -{85,-8,7}, -{85,-8,8}, -{85,-8,9}, -{85,-8,10}, -{85,-8,11}, -{85,-8,12}, -{85,-8,13}, -{85,-8,14}, -{85,-8,15}, -{85,-8,16}, -{85,-8,17}, -{85,-8,18}, -{85,-8,19}, -{85,-8,20}, -{85,-8,21}, -{85,-8,22}, -{85,-8,23}, -{85,-8,24}, -{85,-8,25}, -{85,-8,26}, -{85,-8,27}, -{85,-8,28}, -{85,-8,29}, -{85,-8,30}, -{85,-8,31}, -{85,-8,32}, -{85,-8,33}, -{85,-8,34}, -{85,-8,35}, -{85,-8,36}, -{85,-8,37}, -{85,-8,38}, -{85,-8,39}, -{85,-8,40}, -{85,-8,41}, -{85,-8,42}, -{85,-8,43}, -{85,-8,44}, -{85,-8,45}, -{85,-8,46}, -{85,-8,47}, -{85,-8,48}, -{85,-8,49}, -{85,-8,50}, -{85,-8,51}, -{85,-8,52}, -{85,-8,53}, -{85,-8,54}, -{85,-8,55}, -{85,-8,56}, -{85,-8,57}, -{85,-8,58}, -{85,-8,59}, -{85,-8,60}, -{85,-8,61}, -{85,-8,62}, -{85,-8,63}, -{85,-8,64}, -{85,-8,65}, -{85,-8,66}, -{85,-8,67}, -{85,-8,68}, -{85,-8,69}, -{85,-8,70}, -{85,-8,71}, -{85,-8,72}, -{85,-8,73}, -{85,-8,74}, -{85,-8,75}, -{85,-8,76}, -{85,-8,77}, -{85,-8,78}, -{85,-8,79}, -{85,-8,80}, -{85,-8,81}, -{85,-8,82}, -{85,-8,83}, -{85,-8,84}, -{85,-8,85}, -{85,-7,-23}, -{85,-7,-22}, -{85,-7,-21}, -{85,-7,-20}, -{85,-7,-19}, -{85,-7,-18}, -{85,-7,-17}, -{85,-7,-16}, -{85,-7,-15}, -{85,-7,-14}, -{85,-7,-13}, -{85,-7,-12}, -{85,-7,-11}, -{85,-7,-10}, -{85,-7,-9}, -{85,-7,-8}, -{85,-7,-7}, -{85,-7,-6}, -{85,-7,-5}, -{85,-7,-4}, -{85,-7,-3}, -{85,-7,-2}, -{85,-7,-1}, -{85,-7,0}, -{85,-7,1}, -{85,-7,2}, -{85,-7,3}, -{85,-7,4}, -{85,-7,5}, -{85,-7,6}, -{85,-7,7}, -{85,-7,8}, -{85,-7,9}, -{85,-7,10}, -{85,-7,11}, -{85,-7,12}, -{85,-7,13}, -{85,-7,14}, -{85,-7,15}, -{85,-7,16}, -{85,-7,17}, -{85,-7,18}, -{85,-7,19}, -{85,-7,20}, -{85,-7,21}, -{85,-7,22}, -{85,-7,23}, -{85,-7,24}, -{85,-7,25}, -{85,-7,26}, -{85,-7,27}, -{85,-7,28}, -{85,-7,29}, -{85,-7,30}, -{85,-7,31}, -{85,-7,32}, -{85,-7,33}, -{85,-7,34}, -{85,-7,35}, -{85,-7,36}, -{85,-7,37}, -{85,-7,38}, -{85,-7,39}, -{85,-7,40}, -{85,-7,41}, -{85,-7,42}, -{85,-7,43}, -{85,-7,44}, -{85,-7,45}, -{85,-7,46}, -{85,-7,47}, -{85,-7,48}, -{85,-7,49}, -{85,-7,50}, -{85,-7,51}, -{85,-7,52}, -{85,-7,53}, -{85,-7,54}, -{85,-7,55}, -{85,-7,56}, -{85,-7,57}, -{85,-7,58}, -{85,-7,59}, -{85,-7,60}, -{85,-7,61}, -{85,-7,62}, -{85,-7,63}, -{85,-7,64}, -{85,-7,65}, -{85,-7,66}, -{85,-7,67}, -{85,-7,68}, -{85,-7,69}, -{85,-7,70}, -{85,-7,71}, -{85,-7,72}, -{85,-7,73}, -{85,-7,74}, -{85,-7,75}, -{85,-7,76}, -{85,-7,77}, -{85,-7,78}, -{85,-7,79}, -{85,-7,80}, -{85,-7,81}, -{85,-7,82}, -{85,-7,83}, -{85,-7,84}, -{85,-7,85}, -{85,-6,-23}, -{85,-6,-22}, -{85,-6,-21}, -{85,-6,-20}, -{85,-6,-19}, -{85,-6,-18}, -{85,-6,-17}, -{85,-6,-16}, -{85,-6,-15}, -{85,-6,-14}, -{85,-6,-13}, -{85,-6,-12}, -{85,-6,-11}, -{85,-6,-10}, -{85,-6,-9}, -{85,-6,-8}, -{85,-6,-7}, -{85,-6,-6}, -{85,-6,-5}, -{85,-6,-4}, -{85,-6,-3}, -{85,-6,-2}, -{85,-6,-1}, -{85,-6,0}, -{85,-6,1}, -{85,-6,2}, -{85,-6,3}, -{85,-6,4}, -{85,-6,5}, -{85,-6,6}, -{85,-6,7}, -{85,-6,8}, -{85,-6,9}, -{85,-6,10}, -{85,-6,11}, -{85,-6,12}, -{85,-6,13}, -{85,-6,14}, -{85,-6,15}, -{85,-6,16}, -{85,-6,17}, -{85,-6,18}, -{85,-6,19}, -{85,-6,20}, -{85,-6,21}, -{85,-6,22}, -{85,-6,23}, -{85,-6,24}, -{85,-6,25}, -{85,-6,26}, -{85,-6,27}, -{85,-6,28}, -{85,-6,29}, -{85,-6,30}, -{85,-6,31}, -{85,-6,32}, -{85,-6,33}, -{85,-6,34}, -{85,-6,35}, -{85,-6,36}, -{85,-6,37}, -{85,-6,38}, -{85,-6,39}, -{85,-6,40}, -{85,-6,41}, -{85,-6,42}, -{85,-6,43}, -{85,-6,44}, -{85,-6,45}, -{85,-6,46}, -{85,-6,47}, -{85,-6,48}, -{85,-6,49}, -{85,-6,50}, -{85,-6,51}, -{85,-6,52}, -{85,-6,53}, -{85,-6,54}, -{85,-6,55}, -{85,-6,56}, -{85,-6,57}, -{85,-6,58}, -{85,-6,59}, -{85,-6,60}, -{85,-6,61}, -{85,-6,62}, -{85,-6,63}, -{85,-6,64}, -{85,-6,65}, -{85,-6,66}, -{85,-6,67}, -{85,-6,68}, -{85,-6,69}, -{85,-6,70}, -{85,-6,71}, -{85,-6,72}, -{85,-6,73}, -{85,-6,74}, -{85,-6,75}, -{85,-6,76}, -{85,-6,77}, -{85,-6,78}, -{85,-6,79}, -{85,-6,80}, -{85,-6,81}, -{85,-6,82}, -{85,-6,83}, -{85,-6,84}, -{85,-6,85}, -{85,-5,-23}, -{85,-5,-22}, -{85,-5,-21}, -{85,-5,-20}, -{85,-5,-19}, -{85,-5,-18}, -{85,-5,-17}, -{85,-5,-16}, -{85,-5,-15}, -{85,-5,-14}, -{85,-5,-13}, -{85,-5,-12}, -{85,-5,-11}, -{85,-5,-10}, -{85,-5,-9}, -{85,-5,-8}, -{85,-5,-7}, -{85,-5,-6}, -{85,-5,-5}, -{85,-5,-4}, -{85,-5,-3}, -{85,-5,-2}, -{85,-5,-1}, -{85,-5,0}, -{85,-5,1}, -{85,-5,2}, -{85,-5,3}, -{85,-5,4}, -{85,-5,5}, -{85,-5,6}, -{85,-5,7}, -{85,-5,8}, -{85,-5,9}, -{85,-5,10}, -{85,-5,11}, -{85,-5,12}, -{85,-5,13}, -{85,-5,14}, -{85,-5,15}, -{85,-5,16}, -{85,-5,17}, -{85,-5,18}, -{85,-5,19}, -{85,-5,20}, -{85,-5,21}, -{85,-5,22}, -{85,-5,23}, -{85,-5,24}, -{85,-5,25}, -{85,-5,26}, -{85,-5,27}, -{85,-5,28}, -{85,-5,29}, -{85,-5,30}, -{85,-5,31}, -{85,-5,32}, -{85,-5,33}, -{85,-5,34}, -{85,-5,35}, -{85,-5,36}, -{85,-5,37}, -{85,-5,38}, -{85,-5,39}, -{85,-5,40}, -{85,-5,41}, -{85,-5,42}, -{85,-5,43}, -{85,-5,44}, -{85,-5,45}, -{85,-5,46}, -{85,-5,47}, -{85,-5,48}, -{85,-5,49}, -{85,-5,50}, -{85,-5,51}, -{85,-5,52}, -{85,-5,53}, -{85,-5,54}, -{85,-5,55}, -{85,-5,56}, -{85,-5,57}, -{85,-5,58}, -{85,-5,59}, -{85,-5,60}, -{85,-5,61}, -{85,-5,62}, -{85,-5,63}, -{85,-5,64}, -{85,-5,65}, -{85,-5,66}, -{85,-5,67}, -{85,-5,68}, -{85,-5,69}, -{85,-5,70}, -{85,-5,71}, -{85,-5,72}, -{85,-5,73}, -{85,-5,74}, -{85,-5,75}, -{85,-5,76}, -{85,-5,77}, -{85,-5,78}, -{85,-5,79}, -{85,-5,80}, -{85,-5,81}, -{85,-5,82}, -{85,-5,83}, -{85,-5,84}, -{85,-5,85}, -{85,-4,-23}, -{85,-4,-22}, -{85,-4,-21}, -{85,-4,-20}, -{85,-4,-19}, -{85,-4,-18}, -{85,-4,-17}, -{85,-4,-16}, -{85,-4,-15}, -{85,-4,-14}, -{85,-4,-13}, -{85,-4,-12}, -{85,-4,-11}, -{85,-4,-10}, -{85,-4,-9}, -{85,-4,-8}, -{85,-4,-7}, -{85,-4,-6}, -{85,-4,-5}, -{85,-4,-4}, -{85,-4,-3}, -{85,-4,-2}, -{85,-4,-1}, -{85,-4,0}, -{85,-4,1}, -{85,-4,2}, -{85,-4,3}, -{85,-4,4}, -{85,-4,5}, -{85,-4,6}, -{85,-4,7}, -{85,-4,8}, -{85,-4,9}, -{85,-4,10}, -{85,-4,11}, -{85,-4,12}, -{85,-4,13}, -{85,-4,14}, -{85,-4,15}, -{85,-4,16}, -{85,-4,17}, -{85,-4,18}, -{85,-4,19}, -{85,-4,20}, -{85,-4,21}, -{85,-4,22}, -{85,-4,23}, -{85,-4,24}, -{85,-4,25}, -{85,-4,26}, -{85,-4,27}, -{85,-4,28}, -{85,-4,29}, -{85,-4,30}, -{85,-4,31}, -{85,-4,32}, -{85,-4,33}, -{85,-4,34}, -{85,-4,35}, -{85,-4,36}, -{85,-4,37}, -{85,-4,38}, -{85,-4,39}, -{85,-4,40}, -{85,-4,41}, -{85,-4,42}, -{85,-4,43}, -{85,-4,44}, -{85,-4,45}, -{85,-4,46}, -{85,-4,47}, -{85,-4,48}, -{85,-4,49}, -{85,-4,50}, -{85,-4,51}, -{85,-4,52}, -{85,-4,53}, -{85,-4,54}, -{85,-4,55}, -{85,-4,56}, -{85,-4,57}, -{85,-4,58}, -{85,-4,59}, -{85,-4,60}, -{85,-4,61}, -{85,-4,62}, -{85,-4,63}, -{85,-4,64}, -{85,-4,65}, -{85,-4,66}, -{85,-4,67}, -{85,-4,68}, -{85,-4,69}, -{85,-4,70}, -{85,-4,71}, -{85,-4,72}, -{85,-4,73}, -{85,-4,74}, -{85,-4,75}, -{85,-4,76}, -{85,-4,77}, -{85,-4,78}, -{85,-4,79}, -{85,-4,80}, -{85,-4,81}, -{85,-4,82}, -{85,-4,83}, -{85,-4,84}, -{85,-4,85}, -{85,-3,-23}, -{85,-3,-22}, -{85,-3,-21}, -{85,-3,-20}, -{85,-3,-19}, -{85,-3,-18}, -{85,-3,-17}, -{85,-3,-16}, -{85,-3,-15}, -{85,-3,-14}, -{85,-3,-13}, -{85,-3,-12}, -{85,-3,-11}, -{85,-3,-10}, -{85,-3,-9}, -{85,-3,-8}, -{85,-3,-7}, -{85,-3,-6}, -{85,-3,-5}, -{85,-3,-4}, -{85,-3,-3}, -{85,-3,-2}, -{85,-3,-1}, -{85,-3,0}, -{85,-3,1}, -{85,-3,2}, -{85,-3,3}, -{85,-3,4}, -{85,-3,5}, -{85,-3,6}, -{85,-3,7}, -{85,-3,8}, -{85,-3,9}, -{85,-3,10}, -{85,-3,11}, -{85,-3,12}, -{85,-3,13}, -{85,-3,14}, -{85,-3,15}, -{85,-3,16}, -{85,-3,17}, -{85,-3,18}, -{85,-3,19}, -{85,-3,20}, -{85,-3,21}, -{85,-3,22}, -{85,-3,23}, -{85,-3,24}, -{85,-3,25}, -{85,-3,26}, -{85,-3,27}, -{85,-3,28}, -{85,-3,29}, -{85,-3,30}, -{85,-3,31}, -{85,-3,32}, -{85,-3,33}, -{85,-3,34}, -{85,-3,35}, -{85,-3,36}, -{85,-3,37}, -{85,-3,38}, -{85,-3,39}, -{85,-3,40}, -{85,-3,41}, -{85,-3,42}, -{85,-3,43}, -{85,-3,44}, -{85,-3,45}, -{85,-3,46}, -{85,-3,47}, -{85,-3,48}, -{85,-3,49}, -{85,-3,50}, -{85,-3,51}, -{85,-3,52}, -{85,-3,53}, -{85,-3,54}, -{85,-3,55}, -{85,-3,56}, -{85,-3,57}, -{85,-3,58}, -{85,-3,59}, -{85,-3,60}, -{85,-3,61}, -{85,-3,62}, -{85,-3,63}, -{85,-3,64}, -{85,-3,65}, -{85,-3,66}, -{85,-3,67}, -{85,-3,68}, -{85,-3,69}, -{85,-3,70}, -{85,-3,71}, -{85,-3,72}, -{85,-3,73}, -{85,-3,74}, -{85,-3,75}, -{85,-3,76}, -{85,-3,77}, -{85,-3,78}, -{85,-3,79}, -{85,-3,80}, -{85,-3,81}, -{85,-3,82}, -{85,-3,83}, -{85,-3,84}, -{85,-3,85}, -{85,-2,-23}, -{85,-2,-22}, -{85,-2,-21}, -{85,-2,-20}, -{85,-2,-19}, -{85,-2,-18}, -{85,-2,-17}, -{85,-2,-16}, -{85,-2,-15}, -{85,-2,-14}, -{85,-2,-13}, -{85,-2,-12}, -{85,-2,-11}, -{85,-2,-10}, -{85,-2,-9}, -{85,-2,-8}, -{85,-2,-7}, -{85,-2,-6}, -{85,-2,-5}, -{85,-2,-4}, -{85,-2,-3}, -{85,-2,-2}, -{85,-2,-1}, -{85,-2,0}, -{85,-2,1}, -{85,-2,2}, -{85,-2,3}, -{85,-2,4}, -{85,-2,5}, -{85,-2,6}, -{85,-2,7}, -{85,-2,8}, -{85,-2,9}, -{85,-2,10}, -{85,-2,11}, -{85,-2,12}, -{85,-2,13}, -{85,-2,14}, -{85,-2,15}, -{85,-2,16}, -{85,-2,17}, -{85,-2,18}, -{85,-2,19}, -{85,-2,20}, -{85,-2,21}, -{85,-2,22}, -{85,-2,23}, -{85,-2,24}, -{85,-2,25}, -{85,-2,26}, -{85,-2,27}, -{85,-2,28}, -{85,-2,29}, -{85,-2,30}, -{85,-2,31}, -{85,-2,32}, -{85,-2,33}, -{85,-2,34}, -{85,-2,35}, -{85,-2,36}, -{85,-2,37}, -{85,-2,38}, -{85,-2,39}, -{85,-2,40}, -{85,-2,41}, -{85,-2,42}, -{85,-2,43}, -{85,-2,44}, -{85,-2,45}, -{85,-2,46}, -{85,-2,47}, -{85,-2,48}, -{85,-2,49}, -{85,-2,50}, -{85,-2,51}, -{85,-2,52}, -{85,-2,53}, -{85,-2,54}, -{85,-2,55}, -{85,-2,56}, -{85,-2,57}, -{85,-2,58}, -{85,-2,59}, -{85,-2,60}, -{85,-2,61}, -{85,-2,62}, -{85,-2,63}, -{85,-2,64}, -{85,-2,65}, -{85,-2,66}, -{85,-2,67}, -{85,-2,68}, -{85,-2,69}, -{85,-2,70}, -{85,-2,71}, -{85,-2,72}, -{85,-2,73}, -{85,-2,74}, -{85,-2,75}, -{85,-2,76}, -{85,-2,77}, -{85,-2,78}, -{85,-2,79}, -{85,-2,80}, -{85,-2,81}, -{85,-2,82}, -{85,-2,83}, -{85,-2,84}, -{85,-2,85}, -{85,-1,-23}, -{85,-1,-22}, -{85,-1,-21}, -{85,-1,-20}, -{85,-1,-19}, -{85,-1,-18}, -{85,-1,-17}, -{85,-1,-16}, -{85,-1,-15}, -{85,-1,-14}, -{85,-1,-13}, -{85,-1,-12}, -{85,-1,-11}, -{85,-1,-10}, -{85,-1,-9}, -{85,-1,-8}, -{85,-1,-7}, -{85,-1,-6}, -{85,-1,-5}, -{85,-1,-4}, -{85,-1,-3}, -{85,-1,-2}, -{85,-1,-1}, -{85,-1,0}, -{85,-1,1}, -{85,-1,2}, -{85,-1,3}, -{85,-1,4}, -{85,-1,5}, -{85,-1,6}, -{85,-1,7}, -{85,-1,8}, -{85,-1,9}, -{85,-1,10}, -{85,-1,11}, -{85,-1,12}, -{85,-1,13}, -{85,-1,14}, -{85,-1,15}, -{85,-1,16}, -{85,-1,17}, -{85,-1,18}, -{85,-1,19}, -{85,-1,20}, -{85,-1,21}, -{85,-1,22}, -{85,-1,23}, -{85,-1,24}, -{85,-1,25}, -{85,-1,26}, -{85,-1,27}, -{85,-1,28}, -{85,-1,29}, -{85,-1,30}, -{85,-1,31}, -{85,-1,32}, -{85,-1,33}, -{85,-1,34}, -{85,-1,35}, -{85,-1,36}, -{85,-1,37}, -{85,-1,38}, -{85,-1,39}, -{85,-1,40}, -{85,-1,41}, -{85,-1,42}, -{85,-1,43}, -{85,-1,44}, -{85,-1,45}, -{85,-1,46}, -{85,-1,47}, -{85,-1,48}, -{85,-1,49}, -{85,-1,50}, -{85,-1,51}, -{85,-1,52}, -{85,-1,53}, -{85,-1,54}, -{85,-1,55}, -{85,-1,56}, -{85,-1,57}, -{85,-1,58}, -{85,-1,59}, -{85,-1,60}, -{85,-1,61}, -{85,-1,62}, -{85,-1,63}, -{85,-1,64}, -{85,-1,65}, -{85,-1,66}, -{85,-1,67}, -{85,-1,68}, -{85,-1,69}, -{85,-1,70}, -{85,-1,71}, -{85,-1,72}, -{85,-1,73}, -{85,-1,74}, -{85,-1,75}, -{85,-1,76}, -{85,-1,77}, -{85,-1,78}, -{85,-1,79}, -{85,-1,80}, -{85,-1,81}, -{85,-1,82}, -{85,-1,83}, -{85,-1,84}, -{85,-1,85}, -{85,0,-22}, -{85,0,-21}, -{85,0,-20}, -{85,0,-19}, -{85,0,-18}, -{85,0,-17}, -{85,0,-16}, -{85,0,-15}, -{85,0,-14}, -{85,0,-13}, -{85,0,-12}, -{85,0,-11}, -{85,0,-10}, -{85,0,-9}, -{85,0,-8}, -{85,0,-7}, -{85,0,-6}, -{85,0,-5}, -{85,0,-4}, -{85,0,-3}, -{85,0,-2}, -{85,0,-1}, -{85,0,0}, -{85,0,1}, -{85,0,2}, -{85,0,3}, -{85,0,4}, -{85,0,5}, -{85,0,6}, -{85,0,7}, -{85,0,8}, -{85,0,9}, -{85,0,10}, -{85,0,11}, -{85,0,12}, -{85,0,13}, -{85,0,14}, -{85,0,15}, -{85,0,16}, -{85,0,17}, -{85,0,18}, -{85,0,19}, -{85,0,20}, -{85,0,21}, -{85,0,22}, -{85,0,23}, -{85,0,24}, -{85,0,25}, -{85,0,26}, -{85,0,27}, -{85,0,28}, -{85,0,29}, -{85,0,30}, -{85,0,31}, -{85,0,32}, -{85,0,33}, -{85,0,34}, -{85,0,35}, -{85,0,36}, -{85,0,37}, -{85,0,38}, -{85,0,39}, -{85,0,40}, -{85,0,41}, -{85,0,42}, -{85,0,43}, -{85,0,44}, -{85,0,45}, -{85,0,46}, -{85,0,47}, -{85,0,48}, -{85,0,49}, -{85,0,50}, -{85,0,51}, -{85,0,52}, -{85,0,53}, -{85,0,54}, -{85,0,55}, -{85,0,56}, -{85,0,57}, -{85,0,58}, -{85,0,59}, -{85,0,60}, -{85,0,61}, -{85,0,62}, -{85,0,63}, -{85,0,64}, -{85,0,65}, -{85,0,66}, -{85,0,67}, -{85,0,68}, -{85,0,69}, -{85,0,70}, -{85,0,71}, -{85,0,72}, -{85,0,73}, -{85,0,74}, -{85,0,75}, -{85,0,76}, -{85,0,77}, -{85,0,78}, -{85,0,79}, -{85,0,80}, -{85,0,81}, -{85,0,82}, -{85,0,83}, -{85,0,84}, -{85,0,85}, -{85,1,-22}, -{85,1,-21}, -{85,1,-20}, -{85,1,-19}, -{85,1,-18}, -{85,1,-17}, -{85,1,-16}, -{85,1,-15}, -{85,1,-14}, -{85,1,-13}, -{85,1,-12}, -{85,1,-11}, -{85,1,-10}, -{85,1,-9}, -{85,1,-8}, -{85,1,-7}, -{85,1,-6}, -{85,1,-5}, -{85,1,-4}, -{85,1,-3}, -{85,1,-2}, -{85,1,-1}, -{85,1,0}, -{85,1,1}, -{85,1,2}, -{85,1,3}, -{85,1,4}, -{85,1,5}, -{85,1,6}, -{85,1,7}, -{85,1,8}, -{85,1,9}, -{85,1,10}, -{85,1,11}, -{85,1,12}, -{85,1,13}, -{85,1,14}, -{85,1,15}, -{85,1,16}, -{85,1,17}, -{85,1,18}, -{85,1,19}, -{85,1,20}, -{85,1,21}, -{85,1,22}, -{85,1,23}, -{85,1,24}, -{85,1,25}, -{85,1,26}, -{85,1,27}, -{85,1,28}, -{85,1,29}, -{85,1,30}, -{85,1,31}, -{85,1,32}, -{85,1,33}, -{85,1,34}, -{85,1,35}, -{85,1,36}, -{85,1,37}, -{85,1,38}, -{85,1,39}, -{85,1,40}, -{85,1,41}, -{85,1,42}, -{85,1,43}, -{85,1,44}, -{85,1,45}, -{85,1,46}, -{85,1,47}, -{85,1,48}, -{85,1,49}, -{85,1,50}, -{85,1,51}, -{85,1,52}, -{85,1,53}, -{85,1,54}, -{85,1,55}, -{85,1,56}, -{85,1,57}, -{85,1,58}, -{85,1,59}, -{85,1,60}, -{85,1,61}, -{85,1,62}, -{85,1,63}, -{85,1,64}, -{85,1,65}, -{85,1,66}, -{85,1,67}, -{85,1,68}, -{85,1,69}, -{85,1,70}, -{85,1,71}, -{85,1,72}, -{85,1,73}, -{85,1,74}, -{85,1,75}, -{85,1,76}, -{85,1,77}, -{85,1,78}, -{85,1,79}, -{85,1,80}, -{85,1,81}, -{85,1,82}, -{85,1,83}, -{85,1,84}, -{85,1,85}, -{85,2,-22}, -{85,2,-21}, -{85,2,-20}, -{85,2,-19}, -{85,2,-18}, -{85,2,-17}, -{85,2,-16}, -{85,2,-15}, -{85,2,-14}, -{85,2,-13}, -{85,2,-12}, -{85,2,-11}, -{85,2,-10}, -{85,2,-9}, -{85,2,-8}, -{85,2,-7}, -{85,2,-6}, -{85,2,-5}, -{85,2,-4}, -{85,2,-3}, -{85,2,-2}, -{85,2,-1}, -{85,2,0}, -{85,2,1}, -{85,2,2}, -{85,2,3}, -{85,2,4}, -{85,2,5}, -{85,2,6}, -{85,2,7}, -{85,2,8}, -{85,2,9}, -{85,2,10}, -{85,2,11}, -{85,2,12}, -{85,2,13}, -{85,2,14}, -{85,2,15}, -{85,2,16}, -{85,2,17}, -{85,2,18}, -{85,2,19}, -{85,2,20}, -{85,2,21}, -{85,2,22}, -{85,2,23}, -{85,2,24}, -{85,2,25}, -{85,2,26}, -{85,2,27}, -{85,2,28}, -{85,2,29}, -{85,2,30}, -{85,2,31}, -{85,2,32}, -{85,2,33}, -{85,2,34}, -{85,2,35}, -{85,2,36}, -{85,2,37}, -{85,2,38}, -{85,2,39}, -{85,2,40}, -{85,2,41}, -{85,2,42}, -{85,2,43}, -{85,2,44}, -{85,2,45}, -{85,2,46}, -{85,2,47}, -{85,2,48}, -{85,2,49}, -{85,2,50}, -{85,2,51}, -{85,2,52}, -{85,2,53}, -{85,2,54}, -{85,2,55}, -{85,2,56}, -{85,2,57}, -{85,2,58}, -{85,2,59}, -{85,2,60}, -{85,2,61}, -{85,2,62}, -{85,2,63}, -{85,2,64}, -{85,2,65}, -{85,2,66}, -{85,2,67}, -{85,2,68}, -{85,2,69}, -{85,2,70}, -{85,2,71}, -{85,2,72}, -{85,2,73}, -{85,2,74}, -{85,2,75}, -{85,2,76}, -{85,2,77}, -{85,2,78}, -{85,2,79}, -{85,2,80}, -{85,2,81}, -{85,2,82}, -{85,2,83}, -{85,2,84}, -{85,2,85}, -{85,3,-22}, -{85,3,-21}, -{85,3,-20}, -{85,3,-19}, -{85,3,-18}, -{85,3,-17}, -{85,3,-16}, -{85,3,-15}, -{85,3,-14}, -{85,3,-13}, -{85,3,-12}, -{85,3,-11}, -{85,3,-10}, -{85,3,-9}, -{85,3,-8}, -{85,3,-7}, -{85,3,-6}, -{85,3,-5}, -{85,3,-4}, -{85,3,-3}, -{85,3,-2}, -{85,3,-1}, -{85,3,0}, -{85,3,1}, -{85,3,2}, -{85,3,3}, -{85,3,4}, -{85,3,5}, -{85,3,6}, -{85,3,7}, -{85,3,8}, -{85,3,9}, -{85,3,10}, -{85,3,11}, -{85,3,12}, -{85,3,13}, -{85,3,14}, -{85,3,15}, -{85,3,16}, -{85,3,17}, -{85,3,18}, -{85,3,19}, -{85,3,20}, -{85,3,21}, -{85,3,22}, -{85,3,23}, -{85,3,24}, -{85,3,25}, -{85,3,26}, -{85,3,27}, -{85,3,28}, -{85,3,29}, -{85,3,30}, -{85,3,31}, -{85,3,32}, -{85,3,33}, -{85,3,34}, -{85,3,35}, -{85,3,36}, -{85,3,37}, -{85,3,38}, -{85,3,39}, -{85,3,40}, -{85,3,41}, -{85,3,42}, -{85,3,43}, -{85,3,44}, -{85,3,45}, -{85,3,46}, -{85,3,47}, -{85,3,48}, -{85,3,49}, -{85,3,50}, -{85,3,51}, -{85,3,52}, -{85,3,53}, -{85,3,54}, -{85,3,55}, -{85,3,56}, -{85,3,57}, -{85,3,58}, -{85,3,59}, -{85,3,60}, -{85,3,61}, -{85,3,62}, -{85,3,63}, -{85,3,64}, -{85,3,65}, -{85,3,66}, -{85,3,67}, -{85,3,68}, -{85,3,69}, -{85,3,70}, -{85,3,71}, -{85,3,72}, -{85,3,73}, -{85,3,74}, -{85,3,75}, -{85,3,76}, -{85,3,77}, -{85,3,78}, -{85,3,79}, -{85,4,-22}, -{85,4,-21}, -{85,4,-20}, -{85,4,-19}, -{85,4,-18}, -{85,4,-17}, -{85,4,-16}, -{85,4,-15}, -{85,4,-14}, -{85,4,-13}, -{85,4,-12}, -{85,4,-11}, -{85,4,-10}, -{85,4,-9}, -{85,4,-8}, -{85,4,-7}, -{85,4,-6}, -{85,4,-5}, -{85,4,-4}, -{85,4,-3}, -{85,4,-2}, -{85,4,-1}, -{85,4,0}, -{85,4,1}, -{85,4,2}, -{85,4,3}, -{85,4,4}, -{85,4,5}, -{85,4,6}, -{85,4,7}, -{85,4,8}, -{85,4,9}, -{85,4,10}, -{85,4,11}, -{85,4,12}, -{85,4,13}, -{85,4,14}, -{85,4,15}, -{85,4,16}, -{85,4,17}, -{85,4,18}, -{85,4,19}, -{85,4,20}, -{85,4,21}, -{85,4,22}, -{85,4,23}, -{85,4,24}, -{85,4,25}, -{85,4,26}, -{85,4,27}, -{85,4,28}, -{85,4,29}, -{85,4,30}, -{85,4,31}, -{85,4,32}, -{85,4,33}, -{85,4,34}, -{85,4,35}, -{85,4,36}, -{85,4,37}, -{85,4,38}, -{85,4,39}, -{85,4,40}, -{85,4,41}, -{85,4,42}, -{85,4,43}, -{85,4,44}, -{85,4,45}, -{85,4,46}, -{85,4,47}, -{85,4,48}, -{85,4,49}, -{85,4,50}, -{85,4,51}, -{85,4,52}, -{85,4,53}, -{85,4,54}, -{85,4,55}, -{85,4,56}, -{85,4,57}, -{85,4,58}, -{85,4,59}, -{85,4,60}, -{85,4,61}, -{85,4,62}, -{85,4,63}, -{85,4,64}, -{85,4,65}, -{85,4,66}, -{85,4,67}, -{85,4,68}, -{85,4,69}, -{85,4,70}, -{85,4,71}, -{85,4,72}, -{85,5,-22}, -{85,5,-21}, -{85,5,-20}, -{85,5,-19}, -{85,5,-18}, -{85,5,-17}, -{85,5,-16}, -{85,5,-15}, -{85,5,-14}, -{85,5,-13}, -{85,5,-12}, -{85,5,-11}, -{85,5,-10}, -{85,5,-9}, -{85,5,-8}, -{85,5,-7}, -{85,5,-6}, -{85,5,-5}, -{85,5,-4}, -{85,5,-3}, -{85,5,-2}, -{85,5,-1}, -{85,5,0}, -{85,5,1}, -{85,5,2}, -{85,5,3}, -{85,5,4}, -{85,5,5}, -{85,5,6}, -{85,5,7}, -{85,5,8}, -{85,5,9}, -{85,5,10}, -{85,5,11}, -{85,5,12}, -{85,5,13}, -{85,5,14}, -{85,5,15}, -{85,5,16}, -{85,5,17}, -{85,5,18}, -{85,5,19}, -{85,5,20}, -{85,5,21}, -{85,5,22}, -{85,5,23}, -{85,5,24}, -{85,5,25}, -{85,5,26}, -{85,5,27}, -{85,5,28}, -{85,5,29}, -{85,5,30}, -{85,5,31}, -{85,5,32}, -{85,5,33}, -{85,5,34}, -{85,5,35}, -{85,5,36}, -{85,5,37}, -{85,5,38}, -{85,5,39}, -{85,5,40}, -{85,5,41}, -{85,5,42}, -{85,5,43}, -{85,5,44}, -{85,5,45}, -{85,5,46}, -{85,5,47}, -{85,5,48}, -{85,5,49}, -{85,5,50}, -{85,5,51}, -{85,5,52}, -{85,5,53}, -{85,5,54}, -{85,5,55}, -{85,5,56}, -{85,5,57}, -{85,5,58}, -{85,5,59}, -{85,5,60}, -{85,5,61}, -{85,5,62}, -{85,5,63}, -{85,5,64}, -{85,5,65}, -{85,6,-22}, -{85,6,-21}, -{85,6,-20}, -{85,6,-19}, -{85,6,-18}, -{85,6,-17}, -{85,6,-16}, -{85,6,-15}, -{85,6,-14}, -{85,6,-13}, -{85,6,-12}, -{85,6,-11}, -{85,6,-10}, -{85,6,-9}, -{85,6,-8}, -{85,6,-7}, -{85,6,-6}, -{85,6,-5}, -{85,6,-4}, -{85,6,-3}, -{85,6,-2}, -{85,6,-1}, -{85,6,0}, -{85,6,1}, -{85,6,2}, -{85,6,3}, -{85,6,4}, -{85,6,5}, -{85,6,6}, -{85,6,7}, -{85,6,8}, -{85,6,9}, -{85,6,10}, -{85,6,11}, -{85,6,12}, -{85,6,13}, -{85,6,14}, -{85,6,15}, -{85,6,16}, -{85,6,17}, -{85,6,18}, -{85,6,19}, -{85,6,20}, -{85,6,21}, -{85,6,22}, -{85,6,23}, -{85,6,24}, -{85,6,25}, -{85,6,26}, -{85,6,27}, -{85,6,28}, -{85,6,29}, -{85,6,30}, -{85,6,31}, -{85,6,32}, -{85,6,33}, -{85,6,34}, -{85,6,35}, -{85,6,36}, -{85,6,37}, -{85,6,38}, -{85,6,39}, -{85,6,40}, -{85,6,41}, -{85,6,42}, -{85,6,43}, -{85,6,44}, -{85,6,45}, -{85,6,46}, -{85,6,47}, -{85,6,48}, -{85,6,49}, -{85,6,50}, -{85,6,51}, -{85,6,52}, -{85,6,53}, -{85,6,54}, -{85,6,55}, -{85,6,56}, -{85,6,57}, -{85,6,58}, -{85,6,59}, -{85,6,60}, -{85,7,-22}, -{85,7,-21}, -{85,7,-20}, -{85,7,-19}, -{85,7,-18}, -{85,7,-17}, -{85,7,-16}, -{85,7,-15}, -{85,7,-14}, -{85,7,-13}, -{85,7,-12}, -{85,7,-11}, -{85,7,-10}, -{85,7,-9}, -{85,7,-8}, -{85,7,-7}, -{85,7,-6}, -{85,7,-5}, -{85,7,-4}, -{85,7,-3}, -{85,7,-2}, -{85,7,-1}, -{85,7,0}, -{85,7,1}, -{85,7,2}, -{85,7,3}, -{85,7,4}, -{85,7,5}, -{85,7,6}, -{85,7,7}, -{85,7,8}, -{85,7,9}, -{85,7,10}, -{85,7,11}, -{85,7,12}, -{85,7,13}, -{85,7,14}, -{85,7,15}, -{85,7,16}, -{85,7,17}, -{85,7,18}, -{85,7,19}, -{85,7,20}, -{85,7,21}, -{85,7,22}, -{85,7,23}, -{85,7,24}, -{85,7,25}, -{85,7,26}, -{85,7,27}, -{85,7,28}, -{85,7,29}, -{85,7,30}, -{85,7,31}, -{85,7,32}, -{85,7,33}, -{85,7,34}, -{85,7,35}, -{85,7,36}, -{85,7,37}, -{85,7,38}, -{85,7,39}, -{85,7,40}, -{85,7,41}, -{85,7,42}, -{85,7,43}, -{85,7,44}, -{85,7,45}, -{85,7,46}, -{85,7,47}, -{85,7,48}, -{85,7,49}, -{85,7,50}, -{85,7,51}, -{85,7,52}, -{85,7,53}, -{85,7,54}, -{85,8,-22}, -{85,8,-21}, -{85,8,-20}, -{85,8,-19}, -{85,8,-18}, -{85,8,-17}, -{85,8,-16}, -{85,8,-15}, -{85,8,-14}, -{85,8,-13}, -{85,8,-12}, -{85,8,-11}, -{85,8,-10}, -{85,8,-9}, -{85,8,-8}, -{85,8,-7}, -{85,8,-6}, -{85,8,-5}, -{85,8,-4}, -{85,8,-3}, -{85,8,-2}, -{85,8,-1}, -{85,8,0}, -{85,8,1}, -{85,8,2}, -{85,8,3}, -{85,8,4}, -{85,8,5}, -{85,8,6}, -{85,8,7}, -{85,8,8}, -{85,8,9}, -{85,8,10}, -{85,8,11}, -{85,8,12}, -{85,8,13}, -{85,8,14}, -{85,8,15}, -{85,8,16}, -{85,8,17}, -{85,8,18}, -{85,8,19}, -{85,8,20}, -{85,8,21}, -{85,8,22}, -{85,8,23}, -{85,8,24}, -{85,8,25}, -{85,8,26}, -{85,8,27}, -{85,8,28}, -{85,8,29}, -{85,8,30}, -{85,8,31}, -{85,8,32}, -{85,8,33}, -{85,8,34}, -{85,8,35}, -{85,8,36}, -{85,8,37}, -{85,8,38}, -{85,8,39}, -{85,8,40}, -{85,8,41}, -{85,8,42}, -{85,8,43}, -{85,8,44}, -{85,8,45}, -{85,8,46}, -{85,8,47}, -{85,8,48}, -{85,8,49}, -{85,8,50}, -{85,9,-22}, -{85,9,-21}, -{85,9,-20}, -{85,9,-19}, -{85,9,-18}, -{85,9,-17}, -{85,9,-16}, -{85,9,-15}, -{85,9,-14}, -{85,9,-13}, -{85,9,-12}, -{85,9,-11}, -{85,9,-10}, -{85,9,-9}, -{85,9,-8}, -{85,9,-7}, -{85,9,-6}, -{85,9,-5}, -{85,9,-4}, -{85,9,-3}, -{85,9,-2}, -{85,9,-1}, -{85,9,0}, -{85,9,1}, -{85,9,2}, -{85,9,3}, -{85,9,4}, -{85,9,5}, -{85,9,6}, -{85,9,7}, -{85,9,8}, -{85,9,9}, -{85,9,10}, -{85,9,11}, -{85,9,12}, -{85,9,13}, -{85,9,14}, -{85,9,15}, -{85,9,16}, -{85,9,17}, -{85,9,18}, -{85,9,19}, -{85,9,20}, -{85,9,21}, -{85,9,22}, -{85,9,23}, -{85,9,24}, -{85,9,25}, -{85,9,26}, -{85,9,27}, -{85,9,28}, -{85,9,29}, -{85,9,30}, -{85,9,31}, -{85,9,32}, -{85,9,33}, -{85,9,34}, -{85,9,35}, -{85,9,36}, -{85,9,37}, -{85,9,38}, -{85,9,39}, -{85,9,40}, -{85,9,41}, -{85,9,42}, -{85,9,43}, -{85,9,44}, -{85,9,45}, -{85,10,-22}, -{85,10,-21}, -{85,10,-20}, -{85,10,-19}, -{85,10,-18}, -{85,10,-17}, -{85,10,-16}, -{85,10,-15}, -{85,10,-14}, -{85,10,-13}, -{85,10,-12}, -{85,10,-11}, -{85,10,-10}, -{85,10,-9}, -{85,10,-8}, -{85,10,-7}, -{85,10,-6}, -{85,10,-5}, -{85,10,-4}, -{85,10,-3}, -{85,10,-2}, -{85,10,-1}, -{85,10,0}, -{85,10,1}, -{85,10,2}, -{85,10,3}, -{85,10,4}, -{85,10,5}, -{85,10,6}, -{85,10,7}, -{85,10,8}, -{85,10,9}, -{85,10,10}, -{85,10,11}, -{85,10,12}, -{85,10,13}, -{85,10,14}, -{85,10,15}, -{85,10,16}, -{85,10,17}, -{85,10,18}, -{85,10,19}, -{85,10,20}, -{85,10,21}, -{85,10,22}, -{85,10,23}, -{85,10,24}, -{85,10,25}, -{85,10,26}, -{85,10,27}, -{85,10,28}, -{85,10,29}, -{85,10,30}, -{85,10,31}, -{85,10,32}, -{85,10,33}, -{85,10,34}, -{85,10,35}, -{85,10,36}, -{85,10,37}, -{85,10,38}, -{85,10,39}, -{85,10,40}, -{85,10,41}, -{85,11,-22}, -{85,11,-21}, -{85,11,-20}, -{85,11,-19}, -{85,11,-18}, -{85,11,-17}, -{85,11,-16}, -{85,11,-15}, -{85,11,-14}, -{85,11,-13}, -{85,11,-12}, -{85,11,-11}, -{85,11,-10}, -{85,11,-9}, -{85,11,-8}, -{85,11,-7}, -{85,11,-6}, -{85,11,-5}, -{85,11,-4}, -{85,11,-3}, -{85,11,-2}, -{85,11,-1}, -{85,11,0}, -{85,11,1}, -{85,11,2}, -{85,11,3}, -{85,11,4}, -{85,11,5}, -{85,11,6}, -{85,11,7}, -{85,11,8}, -{85,11,9}, -{85,11,10}, -{85,11,11}, -{85,11,12}, -{85,11,13}, -{85,11,14}, -{85,11,15}, -{85,11,16}, -{85,11,17}, -{85,11,18}, -{85,11,19}, -{85,11,20}, -{85,11,21}, -{85,11,22}, -{85,11,23}, -{85,11,24}, -{85,11,25}, -{85,11,26}, -{85,11,27}, -{85,11,28}, -{85,11,29}, -{85,11,30}, -{85,11,31}, -{85,11,32}, -{85,11,33}, -{85,11,34}, -{85,11,35}, -{85,11,36}, -{85,11,37}, -{85,12,-22}, -{85,12,-21}, -{85,12,-20}, -{85,12,-19}, -{85,12,-18}, -{85,12,-17}, -{85,12,-16}, -{85,12,-15}, -{85,12,-14}, -{85,12,-13}, -{85,12,-12}, -{85,12,-11}, -{85,12,-10}, -{85,12,-9}, -{85,12,-8}, -{85,12,-7}, -{85,12,-6}, -{85,12,-5}, -{85,12,-4}, -{85,12,-3}, -{85,12,-2}, -{85,12,-1}, -{85,12,0}, -{85,12,1}, -{85,12,2}, -{85,12,3}, -{85,12,4}, -{85,12,5}, -{85,12,6}, -{85,12,7}, -{85,12,8}, -{85,12,9}, -{85,12,10}, -{85,12,11}, -{85,12,12}, -{85,12,13}, -{85,12,14}, -{85,12,15}, -{85,12,16}, -{85,12,17}, -{85,12,18}, -{85,12,19}, -{85,12,20}, -{85,12,21}, -{85,12,22}, -{85,12,23}, -{85,12,24}, -{85,12,25}, -{85,12,26}, -{85,12,27}, -{85,12,28}, -{85,12,29}, -{85,12,30}, -{85,12,31}, -{85,12,32}, -{85,12,33}, -{85,13,-22}, -{85,13,-21}, -{85,13,-20}, -{85,13,-19}, -{85,13,-18}, -{85,13,-17}, -{85,13,-16}, -{85,13,-15}, -{85,13,-14}, -{85,13,-13}, -{85,13,-12}, -{85,13,-11}, -{85,13,-10}, -{85,13,-9}, -{85,13,-8}, -{85,13,-7}, -{85,13,-6}, -{85,13,-5}, -{85,13,-4}, -{85,13,-3}, -{85,13,-2}, -{85,13,-1}, -{85,13,0}, -{85,13,1}, -{85,13,2}, -{85,13,3}, -{85,13,4}, -{85,13,5}, -{85,13,6}, -{85,13,7}, -{85,13,8}, -{85,13,9}, -{85,13,10}, -{85,13,11}, -{85,13,12}, -{85,13,13}, -{85,13,14}, -{85,13,15}, -{85,13,16}, -{85,13,17}, -{85,13,18}, -{85,13,19}, -{85,13,20}, -{85,13,21}, -{85,13,22}, -{85,13,23}, -{85,13,24}, -{85,13,25}, -{85,13,26}, -{85,13,27}, -{85,13,28}, -{85,13,29}, -{85,13,30}, -{85,14,-22}, -{85,14,-21}, -{85,14,-20}, -{85,14,-19}, -{85,14,-18}, -{85,14,-17}, -{85,14,-16}, -{85,14,-15}, -{85,14,-14}, -{85,14,-13}, -{85,14,-12}, -{85,14,-11}, -{85,14,-10}, -{85,14,-9}, -{85,14,-8}, -{85,14,-7}, -{85,14,-6}, -{85,14,-5}, -{85,14,-4}, -{85,14,-3}, -{85,14,-2}, -{85,14,-1}, -{85,14,0}, -{85,14,1}, -{85,14,2}, -{85,14,3}, -{85,14,4}, -{85,14,5}, -{85,14,6}, -{85,14,7}, -{85,14,8}, -{85,14,9}, -{85,14,10}, -{85,14,11}, -{85,14,12}, -{85,14,13}, -{85,14,14}, -{85,14,15}, -{85,14,16}, -{85,14,17}, -{85,14,18}, -{85,14,19}, -{85,14,20}, -{85,14,21}, -{85,14,22}, -{85,14,23}, -{85,14,24}, -{85,14,25}, -{85,14,26}, -{85,15,-22}, -{85,15,-21}, -{85,15,-20}, -{85,15,-19}, -{85,15,-18}, -{85,15,-17}, -{85,15,-16}, -{85,15,-15}, -{85,15,-14}, -{85,15,-13}, -{85,15,-12}, -{85,15,-11}, -{85,15,-10}, -{85,15,-9}, -{85,15,-8}, -{85,15,-7}, -{85,15,-6}, -{85,15,-5}, -{85,15,-4}, -{85,15,-3}, -{85,15,-2}, -{85,15,-1}, -{85,15,0}, -{85,15,1}, -{85,15,2}, -{85,15,3}, -{85,15,4}, -{85,15,5}, -{85,15,6}, -{85,15,7}, -{85,15,8}, -{85,15,9}, -{85,15,10}, -{85,15,11}, -{85,15,12}, -{85,15,13}, -{85,15,14}, -{85,15,15}, -{85,15,16}, -{85,15,17}, -{85,15,18}, -{85,15,19}, -{85,15,20}, -{85,15,21}, -{85,15,22}, -{85,15,23}, -{85,16,-22}, -{85,16,-21}, -{85,16,-20}, -{85,16,-19}, -{85,16,-18}, -{85,16,-17}, -{85,16,-16}, -{85,16,-15}, -{85,16,-14}, -{85,16,-13}, -{85,16,-12}, -{85,16,-11}, -{85,16,-10}, -{85,16,-9}, -{85,16,-8}, -{85,16,-7}, -{85,16,-6}, -{85,16,-5}, -{85,16,-4}, -{85,16,-3}, -{85,16,-2}, -{85,16,-1}, -{85,16,0}, -{85,16,1}, -{85,16,2}, -{85,16,3}, -{85,16,4}, -{85,16,5}, -{85,16,6}, -{85,16,7}, -{85,16,8}, -{85,16,9}, -{85,16,10}, -{85,16,11}, -{85,16,12}, -{85,16,13}, -{85,16,14}, -{85,16,15}, -{85,16,16}, -{85,16,17}, -{85,16,18}, -{85,16,19}, -{85,16,20}, -{85,17,-22}, -{85,17,-21}, -{85,17,-20}, -{85,17,-19}, -{85,17,-18}, -{85,17,-17}, -{85,17,-16}, -{85,17,-15}, -{85,17,-14}, -{85,17,-13}, -{85,17,-12}, -{85,17,-11}, -{85,17,-10}, -{85,17,-9}, -{85,17,-8}, -{85,17,-7}, -{85,17,-6}, -{85,17,-5}, -{85,17,-4}, -{85,17,-3}, -{85,17,-2}, -{85,17,-1}, -{85,17,0}, -{85,17,1}, -{85,17,2}, -{85,17,3}, -{85,17,4}, -{85,17,5}, -{85,17,6}, -{85,17,7}, -{85,17,8}, -{85,17,9}, -{85,17,10}, -{85,17,11}, -{85,17,12}, -{85,17,13}, -{85,17,14}, -{85,17,15}, -{85,17,16}, -{85,17,17}, -{85,18,-22}, -{85,18,-21}, -{85,18,-20}, -{85,18,-19}, -{85,18,-18}, -{85,18,-17}, -{85,18,-16}, -{85,18,-15}, -{85,18,-14}, -{85,18,-13}, -{85,18,-12}, -{85,18,-11}, -{85,18,-10}, -{85,18,-9}, -{85,18,-8}, -{85,18,-7}, -{85,18,-6}, -{85,18,-5}, -{85,18,-4}, -{85,18,-3}, -{85,18,-2}, -{85,18,-1}, -{85,18,0}, -{85,18,1}, -{85,18,2}, -{85,18,3}, -{85,18,4}, -{85,18,5}, -{85,18,6}, -{85,18,7}, -{85,18,8}, -{85,18,9}, -{85,18,10}, -{85,18,11}, -{85,18,12}, -{85,18,13}, -{85,18,14}, -{85,19,-22}, -{85,19,-21}, -{85,19,-20}, -{85,19,-19}, -{85,19,-18}, -{85,19,-17}, -{85,19,-16}, -{85,19,-15}, -{85,19,-14}, -{85,19,-13}, -{85,19,-12}, -{85,19,-11}, -{85,19,-10}, -{85,19,-9}, -{85,19,-8}, -{85,19,-7}, -{85,19,-6}, -{85,19,-5}, -{85,19,-4}, -{85,19,-3}, -{85,19,-2}, -{85,19,-1}, -{85,19,0}, -{85,19,1}, -{85,19,2}, -{85,19,3}, -{85,19,4}, -{85,19,5}, -{85,19,6}, -{85,19,7}, -{85,19,8}, -{85,19,9}, -{85,19,10}, -{85,19,11}, -{85,20,-22}, -{85,20,-21}, -{85,20,-20}, -{85,20,-19}, -{85,20,-18}, -{85,20,-17}, -{85,20,-16}, -{85,20,-15}, -{85,20,-14}, -{85,20,-13}, -{85,20,-12}, -{85,20,-11}, -{85,20,-10}, -{85,20,-9}, -{85,20,-8}, -{85,20,-7}, -{85,20,-6}, -{85,20,-5}, -{85,20,-4}, -{85,20,-3}, -{85,20,-2}, -{85,20,-1}, -{85,20,0}, -{85,20,1}, -{85,20,2}, -{85,20,3}, -{85,20,4}, -{85,20,5}, -{85,20,6}, -{85,20,7}, -{85,20,8}, -{85,21,-22}, -{85,21,-21}, -{85,21,-20}, -{85,21,-19}, -{85,21,-18}, -{85,21,-17}, -{85,21,-16}, -{85,21,-15}, -{85,21,-14}, -{85,21,-13}, -{85,21,-12}, -{85,21,-11}, -{85,21,-10}, -{85,21,-9}, -{85,21,-8}, -{85,21,-7}, -{85,21,-6}, -{85,21,-5}, -{85,21,-4}, -{85,21,-3}, -{85,21,-2}, -{85,21,-1}, -{85,21,0}, -{85,21,1}, -{85,21,2}, -{85,21,3}, -{85,21,4}, -{85,21,5}, -{85,22,-22}, -{85,22,-21}, -{85,22,-20}, -{85,22,-19}, -{85,22,-18}, -{85,22,-17}, -{85,22,-16}, -{85,22,-15}, -{85,22,-14}, -{85,22,-13}, -{85,22,-12}, -{85,22,-11}, -{85,22,-10}, -{85,22,-9}, -{85,22,-8}, -{85,22,-7}, -{85,22,-6}, -{85,22,-5}, -{85,22,-4}, -{85,22,-3}, -{85,22,-2}, -{85,22,-1}, -{85,22,0}, -{85,22,1}, -{85,22,2}, -{85,22,3}, -{85,23,-22}, -{85,23,-21}, -{85,23,-20}, -{85,23,-19}, -{85,23,-18}, -{85,23,-17}, -{85,23,-16}, -{85,23,-15}, -{85,23,-14}, -{85,23,-13}, -{85,23,-12}, -{85,23,-11}, -{85,23,-10}, -{85,23,-9}, -{85,23,-8}, -{85,23,-7}, -{85,23,-6}, -{85,23,-5}, -{85,23,-4}, -{85,23,-3}, -{85,23,-2}, -{85,23,-1}, -{85,23,0}, -{85,24,-22}, -{85,24,-21}, -{85,24,-20}, -{85,24,-19}, -{85,24,-18}, -{85,24,-17}, -{85,24,-16}, -{85,24,-15}, -{85,24,-14}, -{85,24,-13}, -{85,24,-12}, -{85,24,-11}, -{85,24,-10}, -{85,24,-9}, -{85,24,-8}, -{85,24,-7}, -{85,24,-6}, -{85,24,-5}, -{85,24,-4}, -{85,24,-3}, -{85,24,-2}, -{85,25,-22}, -{85,25,-21}, -{85,25,-20}, -{85,25,-19}, -{85,25,-18}, -{85,25,-17}, -{85,25,-16}, -{85,25,-15}, -{85,25,-14}, -{85,25,-13}, -{85,25,-12}, -{85,25,-11}, -{85,25,-10}, -{85,25,-9}, -{85,25,-8}, -{85,25,-7}, -{85,25,-6}, -{85,25,-5}, -{85,26,-22}, -{85,26,-21}, -{85,26,-20}, -{85,26,-19}, -{85,26,-18}, -{85,26,-17}, -{85,26,-16}, -{85,26,-15}, -{85,26,-14}, -{85,26,-13}, -{85,26,-12}, -{85,26,-11}, -{85,26,-10}, -{85,26,-9}, -{85,26,-8}, -{85,26,-7}, -{85,27,-22}, -{85,27,-21}, -{85,27,-20}, -{85,27,-19}, -{85,27,-18}, -{85,27,-17}, -{85,27,-16}, -{85,27,-15}, -{85,27,-14}, -{85,27,-13}, -{85,27,-12}, -{85,27,-11}, -{85,27,-10}, -{85,28,-22}, -{85,28,-21}, -{85,28,-20}, -{85,28,-19}, -{85,28,-18}, -{85,28,-17}, -{85,28,-16}, -{85,28,-15}, -{85,28,-14}, -{85,28,-13}, -{85,28,-12}, -{85,29,-22}, -{85,29,-21}, -{85,29,-20}, -{85,29,-19}, -{85,29,-18}, -{85,29,-17}, -{85,29,-16}, -{85,29,-15}, -{85,29,-14}, -{85,30,-22}, -{85,30,-21}, -{85,30,-20}, -{85,30,-19}, -{85,30,-18}, -{85,30,-17}, -{85,30,-16}, -{85,31,-22}, -{85,31,-21}, -{85,31,-20}, -{85,31,-19}, -{85,31,-18}, -{85,32,-22}, -{85,32,-21}, -{86,-84,78}, -{86,-84,79}, -{86,-84,80}, -{86,-84,81}, -{86,-83,73}, -{86,-83,74}, -{86,-83,75}, -{86,-83,76}, -{86,-83,77}, -{86,-83,78}, -{86,-83,79}, -{86,-83,80}, -{86,-83,81}, -{86,-83,82}, -{86,-82,69}, -{86,-82,70}, -{86,-82,71}, -{86,-82,72}, -{86,-82,73}, -{86,-82,74}, -{86,-82,75}, -{86,-82,76}, -{86,-82,77}, -{86,-82,78}, -{86,-82,79}, -{86,-82,80}, -{86,-82,81}, -{86,-82,82}, -{86,-81,65}, -{86,-81,66}, -{86,-81,67}, -{86,-81,68}, -{86,-81,69}, -{86,-81,70}, -{86,-81,71}, -{86,-81,72}, -{86,-81,73}, -{86,-81,74}, -{86,-81,75}, -{86,-81,76}, -{86,-81,77}, -{86,-81,78}, -{86,-81,79}, -{86,-81,80}, -{86,-81,81}, -{86,-81,82}, -{86,-80,61}, -{86,-80,62}, -{86,-80,63}, -{86,-80,64}, -{86,-80,65}, -{86,-80,66}, -{86,-80,67}, -{86,-80,68}, -{86,-80,69}, -{86,-80,70}, -{86,-80,71}, -{86,-80,72}, -{86,-80,73}, -{86,-80,74}, -{86,-80,75}, -{86,-80,76}, -{86,-80,77}, -{86,-80,78}, -{86,-80,79}, -{86,-80,80}, -{86,-80,81}, -{86,-80,82}, -{86,-79,58}, -{86,-79,59}, -{86,-79,60}, -{86,-79,61}, -{86,-79,62}, -{86,-79,63}, -{86,-79,64}, -{86,-79,65}, -{86,-79,66}, -{86,-79,67}, -{86,-79,68}, -{86,-79,69}, -{86,-79,70}, -{86,-79,71}, -{86,-79,72}, -{86,-79,73}, -{86,-79,74}, -{86,-79,75}, -{86,-79,76}, -{86,-79,77}, -{86,-79,78}, -{86,-79,79}, -{86,-79,80}, -{86,-79,81}, -{86,-79,82}, -{86,-78,55}, -{86,-78,56}, -{86,-78,57}, -{86,-78,58}, -{86,-78,59}, -{86,-78,60}, -{86,-78,61}, -{86,-78,62}, -{86,-78,63}, -{86,-78,64}, -{86,-78,65}, -{86,-78,66}, -{86,-78,67}, -{86,-78,68}, -{86,-78,69}, -{86,-78,70}, -{86,-78,71}, -{86,-78,72}, -{86,-78,73}, -{86,-78,74}, -{86,-78,75}, -{86,-78,76}, -{86,-78,77}, -{86,-78,78}, -{86,-78,79}, -{86,-78,80}, -{86,-78,81}, -{86,-78,82}, -{86,-77,52}, -{86,-77,53}, -{86,-77,54}, -{86,-77,55}, -{86,-77,56}, -{86,-77,57}, -{86,-77,58}, -{86,-77,59}, -{86,-77,60}, -{86,-77,61}, -{86,-77,62}, -{86,-77,63}, -{86,-77,64}, -{86,-77,65}, -{86,-77,66}, -{86,-77,67}, -{86,-77,68}, -{86,-77,69}, -{86,-77,70}, -{86,-77,71}, -{86,-77,72}, -{86,-77,73}, -{86,-77,74}, -{86,-77,75}, -{86,-77,76}, -{86,-77,77}, -{86,-77,78}, -{86,-77,79}, -{86,-77,80}, -{86,-77,81}, -{86,-77,82}, -{86,-76,49}, -{86,-76,50}, -{86,-76,51}, -{86,-76,52}, -{86,-76,53}, -{86,-76,54}, -{86,-76,55}, -{86,-76,56}, -{86,-76,57}, -{86,-76,58}, -{86,-76,59}, -{86,-76,60}, -{86,-76,61}, -{86,-76,62}, -{86,-76,63}, -{86,-76,64}, -{86,-76,65}, -{86,-76,66}, -{86,-76,67}, -{86,-76,68}, -{86,-76,69}, -{86,-76,70}, -{86,-76,71}, -{86,-76,72}, -{86,-76,73}, -{86,-76,74}, -{86,-76,75}, -{86,-76,76}, -{86,-76,77}, -{86,-76,78}, -{86,-76,79}, -{86,-76,80}, -{86,-76,81}, -{86,-76,82}, -{86,-75,46}, -{86,-75,47}, -{86,-75,48}, -{86,-75,49}, -{86,-75,50}, -{86,-75,51}, -{86,-75,52}, -{86,-75,53}, -{86,-75,54}, -{86,-75,55}, -{86,-75,56}, -{86,-75,57}, -{86,-75,58}, -{86,-75,59}, -{86,-75,60}, -{86,-75,61}, -{86,-75,62}, -{86,-75,63}, -{86,-75,64}, -{86,-75,65}, -{86,-75,66}, -{86,-75,67}, -{86,-75,68}, -{86,-75,69}, -{86,-75,70}, -{86,-75,71}, -{86,-75,72}, -{86,-75,73}, -{86,-75,74}, -{86,-75,75}, -{86,-75,76}, -{86,-75,77}, -{86,-75,78}, -{86,-75,79}, -{86,-75,80}, -{86,-75,81}, -{86,-75,82}, -{86,-74,43}, -{86,-74,44}, -{86,-74,45}, -{86,-74,46}, -{86,-74,47}, -{86,-74,48}, -{86,-74,49}, -{86,-74,50}, -{86,-74,51}, -{86,-74,52}, -{86,-74,53}, -{86,-74,54}, -{86,-74,55}, -{86,-74,56}, -{86,-74,57}, -{86,-74,58}, -{86,-74,59}, -{86,-74,60}, -{86,-74,61}, -{86,-74,62}, -{86,-74,63}, -{86,-74,64}, -{86,-74,65}, -{86,-74,66}, -{86,-74,67}, -{86,-74,68}, -{86,-74,69}, -{86,-74,70}, -{86,-74,71}, -{86,-74,72}, -{86,-74,73}, -{86,-74,74}, -{86,-74,75}, -{86,-74,76}, -{86,-74,77}, -{86,-74,78}, -{86,-74,79}, -{86,-74,80}, -{86,-74,81}, -{86,-74,82}, -{86,-73,40}, -{86,-73,41}, -{86,-73,42}, -{86,-73,43}, -{86,-73,44}, -{86,-73,45}, -{86,-73,46}, -{86,-73,47}, -{86,-73,48}, -{86,-73,49}, -{86,-73,50}, -{86,-73,51}, -{86,-73,52}, -{86,-73,53}, -{86,-73,54}, -{86,-73,55}, -{86,-73,56}, -{86,-73,57}, -{86,-73,58}, -{86,-73,59}, -{86,-73,60}, -{86,-73,61}, -{86,-73,62}, -{86,-73,63}, -{86,-73,64}, -{86,-73,65}, -{86,-73,66}, -{86,-73,67}, -{86,-73,68}, -{86,-73,69}, -{86,-73,70}, -{86,-73,71}, -{86,-73,72}, -{86,-73,73}, -{86,-73,74}, -{86,-73,75}, -{86,-73,76}, -{86,-73,77}, -{86,-73,78}, -{86,-73,79}, -{86,-73,80}, -{86,-73,81}, -{86,-73,82}, -{86,-72,38}, -{86,-72,39}, -{86,-72,40}, -{86,-72,41}, -{86,-72,42}, -{86,-72,43}, -{86,-72,44}, -{86,-72,45}, -{86,-72,46}, -{86,-72,47}, -{86,-72,48}, -{86,-72,49}, -{86,-72,50}, -{86,-72,51}, -{86,-72,52}, -{86,-72,53}, -{86,-72,54}, -{86,-72,55}, -{86,-72,56}, -{86,-72,57}, -{86,-72,58}, -{86,-72,59}, -{86,-72,60}, -{86,-72,61}, -{86,-72,62}, -{86,-72,63}, -{86,-72,64}, -{86,-72,65}, -{86,-72,66}, -{86,-72,67}, -{86,-72,68}, -{86,-72,69}, -{86,-72,70}, -{86,-72,71}, -{86,-72,72}, -{86,-72,73}, -{86,-72,74}, -{86,-72,75}, -{86,-72,76}, -{86,-72,77}, -{86,-72,78}, -{86,-72,79}, -{86,-72,80}, -{86,-72,81}, -{86,-72,82}, -{86,-71,35}, -{86,-71,36}, -{86,-71,37}, -{86,-71,38}, -{86,-71,39}, -{86,-71,40}, -{86,-71,41}, -{86,-71,42}, -{86,-71,43}, -{86,-71,44}, -{86,-71,45}, -{86,-71,46}, -{86,-71,47}, -{86,-71,48}, -{86,-71,49}, -{86,-71,50}, -{86,-71,51}, -{86,-71,52}, -{86,-71,53}, -{86,-71,54}, -{86,-71,55}, -{86,-71,56}, -{86,-71,57}, -{86,-71,58}, -{86,-71,59}, -{86,-71,60}, -{86,-71,61}, -{86,-71,62}, -{86,-71,63}, -{86,-71,64}, -{86,-71,65}, -{86,-71,66}, -{86,-71,67}, -{86,-71,68}, -{86,-71,69}, -{86,-71,70}, -{86,-71,71}, -{86,-71,72}, -{86,-71,73}, -{86,-71,74}, -{86,-71,75}, -{86,-71,76}, -{86,-71,77}, -{86,-71,78}, -{86,-71,79}, -{86,-71,80}, -{86,-71,81}, -{86,-71,82}, -{86,-70,33}, -{86,-70,34}, -{86,-70,35}, -{86,-70,36}, -{86,-70,37}, -{86,-70,38}, -{86,-70,39}, -{86,-70,40}, -{86,-70,41}, -{86,-70,42}, -{86,-70,43}, -{86,-70,44}, -{86,-70,45}, -{86,-70,46}, -{86,-70,47}, -{86,-70,48}, -{86,-70,49}, -{86,-70,50}, -{86,-70,51}, -{86,-70,52}, -{86,-70,53}, -{86,-70,54}, -{86,-70,55}, -{86,-70,56}, -{86,-70,57}, -{86,-70,58}, -{86,-70,59}, -{86,-70,60}, -{86,-70,61}, -{86,-70,62}, -{86,-70,63}, -{86,-70,64}, -{86,-70,65}, -{86,-70,66}, -{86,-70,67}, -{86,-70,68}, -{86,-70,69}, -{86,-70,70}, -{86,-70,71}, -{86,-70,72}, -{86,-70,73}, -{86,-70,74}, -{86,-70,75}, -{86,-70,76}, -{86,-70,77}, -{86,-70,78}, -{86,-70,79}, -{86,-70,80}, -{86,-70,81}, -{86,-70,82}, -{86,-69,30}, -{86,-69,31}, -{86,-69,32}, -{86,-69,33}, -{86,-69,34}, -{86,-69,35}, -{86,-69,36}, -{86,-69,37}, -{86,-69,38}, -{86,-69,39}, -{86,-69,40}, -{86,-69,41}, -{86,-69,42}, -{86,-69,43}, -{86,-69,44}, -{86,-69,45}, -{86,-69,46}, -{86,-69,47}, -{86,-69,48}, -{86,-69,49}, -{86,-69,50}, -{86,-69,51}, -{86,-69,52}, -{86,-69,53}, -{86,-69,54}, -{86,-69,55}, -{86,-69,56}, -{86,-69,57}, -{86,-69,58}, -{86,-69,59}, -{86,-69,60}, -{86,-69,61}, -{86,-69,62}, -{86,-69,63}, -{86,-69,64}, -{86,-69,65}, -{86,-69,66}, -{86,-69,67}, -{86,-69,68}, -{86,-69,69}, -{86,-69,70}, -{86,-69,71}, -{86,-69,72}, -{86,-69,73}, -{86,-69,74}, -{86,-69,75}, -{86,-69,76}, -{86,-69,77}, -{86,-69,78}, -{86,-69,79}, -{86,-69,80}, -{86,-69,81}, -{86,-69,82}, -{86,-68,28}, -{86,-68,29}, -{86,-68,30}, -{86,-68,31}, -{86,-68,32}, -{86,-68,33}, -{86,-68,34}, -{86,-68,35}, -{86,-68,36}, -{86,-68,37}, -{86,-68,38}, -{86,-68,39}, -{86,-68,40}, -{86,-68,41}, -{86,-68,42}, -{86,-68,43}, -{86,-68,44}, -{86,-68,45}, -{86,-68,46}, -{86,-68,47}, -{86,-68,48}, -{86,-68,49}, -{86,-68,50}, -{86,-68,51}, -{86,-68,52}, -{86,-68,53}, -{86,-68,54}, -{86,-68,55}, -{86,-68,56}, -{86,-68,57}, -{86,-68,58}, -{86,-68,59}, -{86,-68,60}, -{86,-68,61}, -{86,-68,62}, -{86,-68,63}, -{86,-68,64}, -{86,-68,65}, -{86,-68,66}, -{86,-68,67}, -{86,-68,68}, -{86,-68,69}, -{86,-68,70}, -{86,-68,71}, -{86,-68,72}, -{86,-68,73}, -{86,-68,74}, -{86,-68,75}, -{86,-68,76}, -{86,-68,77}, -{86,-68,78}, -{86,-68,79}, -{86,-68,80}, -{86,-68,81}, -{86,-68,82}, -{86,-67,26}, -{86,-67,27}, -{86,-67,28}, -{86,-67,29}, -{86,-67,30}, -{86,-67,31}, -{86,-67,32}, -{86,-67,33}, -{86,-67,34}, -{86,-67,35}, -{86,-67,36}, -{86,-67,37}, -{86,-67,38}, -{86,-67,39}, -{86,-67,40}, -{86,-67,41}, -{86,-67,42}, -{86,-67,43}, -{86,-67,44}, -{86,-67,45}, -{86,-67,46}, -{86,-67,47}, -{86,-67,48}, -{86,-67,49}, -{86,-67,50}, -{86,-67,51}, -{86,-67,52}, -{86,-67,53}, -{86,-67,54}, -{86,-67,55}, -{86,-67,56}, -{86,-67,57}, -{86,-67,58}, -{86,-67,59}, -{86,-67,60}, -{86,-67,61}, -{86,-67,62}, -{86,-67,63}, -{86,-67,64}, -{86,-67,65}, -{86,-67,66}, -{86,-67,67}, -{86,-67,68}, -{86,-67,69}, -{86,-67,70}, -{86,-67,71}, -{86,-67,72}, -{86,-67,73}, -{86,-67,74}, -{86,-67,75}, -{86,-67,76}, -{86,-67,77}, -{86,-67,78}, -{86,-67,79}, -{86,-67,80}, -{86,-67,81}, -{86,-67,82}, -{86,-66,24}, -{86,-66,25}, -{86,-66,26}, -{86,-66,27}, -{86,-66,28}, -{86,-66,29}, -{86,-66,30}, -{86,-66,31}, -{86,-66,32}, -{86,-66,33}, -{86,-66,34}, -{86,-66,35}, -{86,-66,36}, -{86,-66,37}, -{86,-66,38}, -{86,-66,39}, -{86,-66,40}, -{86,-66,41}, -{86,-66,42}, -{86,-66,43}, -{86,-66,44}, -{86,-66,45}, -{86,-66,46}, -{86,-66,47}, -{86,-66,48}, -{86,-66,49}, -{86,-66,50}, -{86,-66,51}, -{86,-66,52}, -{86,-66,53}, -{86,-66,54}, -{86,-66,55}, -{86,-66,56}, -{86,-66,57}, -{86,-66,58}, -{86,-66,59}, -{86,-66,60}, -{86,-66,61}, -{86,-66,62}, -{86,-66,63}, -{86,-66,64}, -{86,-66,65}, -{86,-66,66}, -{86,-66,67}, -{86,-66,68}, -{86,-66,69}, -{86,-66,70}, -{86,-66,71}, -{86,-66,72}, -{86,-66,73}, -{86,-66,74}, -{86,-66,75}, -{86,-66,76}, -{86,-66,77}, -{86,-66,78}, -{86,-66,79}, -{86,-66,80}, -{86,-66,81}, -{86,-66,82}, -{86,-65,21}, -{86,-65,22}, -{86,-65,23}, -{86,-65,24}, -{86,-65,25}, -{86,-65,26}, -{86,-65,27}, -{86,-65,28}, -{86,-65,29}, -{86,-65,30}, -{86,-65,31}, -{86,-65,32}, -{86,-65,33}, -{86,-65,34}, -{86,-65,35}, -{86,-65,36}, -{86,-65,37}, -{86,-65,38}, -{86,-65,39}, -{86,-65,40}, -{86,-65,41}, -{86,-65,42}, -{86,-65,43}, -{86,-65,44}, -{86,-65,45}, -{86,-65,46}, -{86,-65,47}, -{86,-65,48}, -{86,-65,49}, -{86,-65,50}, -{86,-65,51}, -{86,-65,52}, -{86,-65,53}, -{86,-65,54}, -{86,-65,55}, -{86,-65,56}, -{86,-65,57}, -{86,-65,58}, -{86,-65,59}, -{86,-65,60}, -{86,-65,61}, -{86,-65,62}, -{86,-65,63}, -{86,-65,64}, -{86,-65,65}, -{86,-65,66}, -{86,-65,67}, -{86,-65,68}, -{86,-65,69}, -{86,-65,70}, -{86,-65,71}, -{86,-65,72}, -{86,-65,73}, -{86,-65,74}, -{86,-65,75}, -{86,-65,76}, -{86,-65,77}, -{86,-65,78}, -{86,-65,79}, -{86,-65,80}, -{86,-65,81}, -{86,-65,82}, -{86,-64,19}, -{86,-64,20}, -{86,-64,21}, -{86,-64,22}, -{86,-64,23}, -{86,-64,24}, -{86,-64,25}, -{86,-64,26}, -{86,-64,27}, -{86,-64,28}, -{86,-64,29}, -{86,-64,30}, -{86,-64,31}, -{86,-64,32}, -{86,-64,33}, -{86,-64,34}, -{86,-64,35}, -{86,-64,36}, -{86,-64,37}, -{86,-64,38}, -{86,-64,39}, -{86,-64,40}, -{86,-64,41}, -{86,-64,42}, -{86,-64,43}, -{86,-64,44}, -{86,-64,45}, -{86,-64,46}, -{86,-64,47}, -{86,-64,48}, -{86,-64,49}, -{86,-64,50}, -{86,-64,51}, -{86,-64,52}, -{86,-64,53}, -{86,-64,54}, -{86,-64,55}, -{86,-64,56}, -{86,-64,57}, -{86,-64,58}, -{86,-64,59}, -{86,-64,60}, -{86,-64,61}, -{86,-64,62}, -{86,-64,63}, -{86,-64,64}, -{86,-64,65}, -{86,-64,66}, -{86,-64,67}, -{86,-64,68}, -{86,-64,69}, -{86,-64,70}, -{86,-64,71}, -{86,-64,72}, -{86,-64,73}, -{86,-64,74}, -{86,-64,75}, -{86,-64,76}, -{86,-64,77}, -{86,-64,78}, -{86,-64,79}, -{86,-64,80}, -{86,-64,81}, -{86,-64,82}, -{86,-63,17}, -{86,-63,18}, -{86,-63,19}, -{86,-63,20}, -{86,-63,21}, -{86,-63,22}, -{86,-63,23}, -{86,-63,24}, -{86,-63,25}, -{86,-63,26}, -{86,-63,27}, -{86,-63,28}, -{86,-63,29}, -{86,-63,30}, -{86,-63,31}, -{86,-63,32}, -{86,-63,33}, -{86,-63,34}, -{86,-63,35}, -{86,-63,36}, -{86,-63,37}, -{86,-63,38}, -{86,-63,39}, -{86,-63,40}, -{86,-63,41}, -{86,-63,42}, -{86,-63,43}, -{86,-63,44}, -{86,-63,45}, -{86,-63,46}, -{86,-63,47}, -{86,-63,48}, -{86,-63,49}, -{86,-63,50}, -{86,-63,51}, -{86,-63,52}, -{86,-63,53}, -{86,-63,54}, -{86,-63,55}, -{86,-63,56}, -{86,-63,57}, -{86,-63,58}, -{86,-63,59}, -{86,-63,60}, -{86,-63,61}, -{86,-63,62}, -{86,-63,63}, -{86,-63,64}, -{86,-63,65}, -{86,-63,66}, -{86,-63,67}, -{86,-63,68}, -{86,-63,69}, -{86,-63,70}, -{86,-63,71}, -{86,-63,72}, -{86,-63,73}, -{86,-63,74}, -{86,-63,75}, -{86,-63,76}, -{86,-63,77}, -{86,-63,78}, -{86,-63,79}, -{86,-63,80}, -{86,-63,81}, -{86,-63,82}, -{86,-62,15}, -{86,-62,16}, -{86,-62,17}, -{86,-62,18}, -{86,-62,19}, -{86,-62,20}, -{86,-62,21}, -{86,-62,22}, -{86,-62,23}, -{86,-62,24}, -{86,-62,25}, -{86,-62,26}, -{86,-62,27}, -{86,-62,28}, -{86,-62,29}, -{86,-62,30}, -{86,-62,31}, -{86,-62,32}, -{86,-62,33}, -{86,-62,34}, -{86,-62,35}, -{86,-62,36}, -{86,-62,37}, -{86,-62,38}, -{86,-62,39}, -{86,-62,40}, -{86,-62,41}, -{86,-62,42}, -{86,-62,43}, -{86,-62,44}, -{86,-62,45}, -{86,-62,46}, -{86,-62,47}, -{86,-62,48}, -{86,-62,49}, -{86,-62,50}, -{86,-62,51}, -{86,-62,52}, -{86,-62,53}, -{86,-62,54}, -{86,-62,55}, -{86,-62,56}, -{86,-62,57}, -{86,-62,58}, -{86,-62,59}, -{86,-62,60}, -{86,-62,61}, -{86,-62,62}, -{86,-62,63}, -{86,-62,64}, -{86,-62,65}, -{86,-62,66}, -{86,-62,67}, -{86,-62,68}, -{86,-62,69}, -{86,-62,70}, -{86,-62,71}, -{86,-62,72}, -{86,-62,73}, -{86,-62,74}, -{86,-62,75}, -{86,-62,76}, -{86,-62,77}, -{86,-62,78}, -{86,-62,79}, -{86,-62,80}, -{86,-62,81}, -{86,-62,82}, -{86,-61,13}, -{86,-61,14}, -{86,-61,15}, -{86,-61,16}, -{86,-61,17}, -{86,-61,18}, -{86,-61,19}, -{86,-61,20}, -{86,-61,21}, -{86,-61,22}, -{86,-61,23}, -{86,-61,24}, -{86,-61,25}, -{86,-61,26}, -{86,-61,27}, -{86,-61,28}, -{86,-61,29}, -{86,-61,30}, -{86,-61,31}, -{86,-61,32}, -{86,-61,33}, -{86,-61,34}, -{86,-61,35}, -{86,-61,36}, -{86,-61,37}, -{86,-61,38}, -{86,-61,39}, -{86,-61,40}, -{86,-61,41}, -{86,-61,42}, -{86,-61,43}, -{86,-61,44}, -{86,-61,45}, -{86,-61,46}, -{86,-61,47}, -{86,-61,48}, -{86,-61,49}, -{86,-61,50}, -{86,-61,51}, -{86,-61,52}, -{86,-61,53}, -{86,-61,54}, -{86,-61,55}, -{86,-61,56}, -{86,-61,57}, -{86,-61,58}, -{86,-61,59}, -{86,-61,60}, -{86,-61,61}, -{86,-61,62}, -{86,-61,63}, -{86,-61,64}, -{86,-61,65}, -{86,-61,66}, -{86,-61,67}, -{86,-61,68}, -{86,-61,69}, -{86,-61,70}, -{86,-61,71}, -{86,-61,72}, -{86,-61,73}, -{86,-61,74}, -{86,-61,75}, -{86,-61,76}, -{86,-61,77}, -{86,-61,78}, -{86,-61,79}, -{86,-61,80}, -{86,-61,81}, -{86,-61,82}, -{86,-61,83}, -{86,-60,11}, -{86,-60,12}, -{86,-60,13}, -{86,-60,14}, -{86,-60,15}, -{86,-60,16}, -{86,-60,17}, -{86,-60,18}, -{86,-60,19}, -{86,-60,20}, -{86,-60,21}, -{86,-60,22}, -{86,-60,23}, -{86,-60,24}, -{86,-60,25}, -{86,-60,26}, -{86,-60,27}, -{86,-60,28}, -{86,-60,29}, -{86,-60,30}, -{86,-60,31}, -{86,-60,32}, -{86,-60,33}, -{86,-60,34}, -{86,-60,35}, -{86,-60,36}, -{86,-60,37}, -{86,-60,38}, -{86,-60,39}, -{86,-60,40}, -{86,-60,41}, -{86,-60,42}, -{86,-60,43}, -{86,-60,44}, -{86,-60,45}, -{86,-60,46}, -{86,-60,47}, -{86,-60,48}, -{86,-60,49}, -{86,-60,50}, -{86,-60,51}, -{86,-60,52}, -{86,-60,53}, -{86,-60,54}, -{86,-60,55}, -{86,-60,56}, -{86,-60,57}, -{86,-60,58}, -{86,-60,59}, -{86,-60,60}, -{86,-60,61}, -{86,-60,62}, -{86,-60,63}, -{86,-60,64}, -{86,-60,65}, -{86,-60,66}, -{86,-60,67}, -{86,-60,68}, -{86,-60,69}, -{86,-60,70}, -{86,-60,71}, -{86,-60,72}, -{86,-60,73}, -{86,-60,74}, -{86,-60,75}, -{86,-60,76}, -{86,-60,77}, -{86,-60,78}, -{86,-60,79}, -{86,-60,80}, -{86,-60,81}, -{86,-60,82}, -{86,-60,83}, -{86,-59,9}, -{86,-59,10}, -{86,-59,11}, -{86,-59,12}, -{86,-59,13}, -{86,-59,14}, -{86,-59,15}, -{86,-59,16}, -{86,-59,17}, -{86,-59,18}, -{86,-59,19}, -{86,-59,20}, -{86,-59,21}, -{86,-59,22}, -{86,-59,23}, -{86,-59,24}, -{86,-59,25}, -{86,-59,26}, -{86,-59,27}, -{86,-59,28}, -{86,-59,29}, -{86,-59,30}, -{86,-59,31}, -{86,-59,32}, -{86,-59,33}, -{86,-59,34}, -{86,-59,35}, -{86,-59,36}, -{86,-59,37}, -{86,-59,38}, -{86,-59,39}, -{86,-59,40}, -{86,-59,41}, -{86,-59,42}, -{86,-59,43}, -{86,-59,44}, -{86,-59,45}, -{86,-59,46}, -{86,-59,47}, -{86,-59,48}, -{86,-59,49}, -{86,-59,50}, -{86,-59,51}, -{86,-59,52}, -{86,-59,53}, -{86,-59,54}, -{86,-59,55}, -{86,-59,56}, -{86,-59,57}, -{86,-59,58}, -{86,-59,59}, -{86,-59,60}, -{86,-59,61}, -{86,-59,62}, -{86,-59,63}, -{86,-59,64}, -{86,-59,65}, -{86,-59,66}, -{86,-59,67}, -{86,-59,68}, -{86,-59,69}, -{86,-59,70}, -{86,-59,71}, -{86,-59,72}, -{86,-59,73}, -{86,-59,74}, -{86,-59,75}, -{86,-59,76}, -{86,-59,77}, -{86,-59,78}, -{86,-59,79}, -{86,-59,80}, -{86,-59,81}, -{86,-59,82}, -{86,-59,83}, -{86,-58,8}, -{86,-58,9}, -{86,-58,10}, -{86,-58,11}, -{86,-58,12}, -{86,-58,13}, -{86,-58,14}, -{86,-58,15}, -{86,-58,16}, -{86,-58,17}, -{86,-58,18}, -{86,-58,19}, -{86,-58,20}, -{86,-58,21}, -{86,-58,22}, -{86,-58,23}, -{86,-58,24}, -{86,-58,25}, -{86,-58,26}, -{86,-58,27}, -{86,-58,28}, -{86,-58,29}, -{86,-58,30}, -{86,-58,31}, -{86,-58,32}, -{86,-58,33}, -{86,-58,34}, -{86,-58,35}, -{86,-58,36}, -{86,-58,37}, -{86,-58,38}, -{86,-58,39}, -{86,-58,40}, -{86,-58,41}, -{86,-58,42}, -{86,-58,43}, -{86,-58,44}, -{86,-58,45}, -{86,-58,46}, -{86,-58,47}, -{86,-58,48}, -{86,-58,49}, -{86,-58,50}, -{86,-58,51}, -{86,-58,52}, -{86,-58,53}, -{86,-58,54}, -{86,-58,55}, -{86,-58,56}, -{86,-58,57}, -{86,-58,58}, -{86,-58,59}, -{86,-58,60}, -{86,-58,61}, -{86,-58,62}, -{86,-58,63}, -{86,-58,64}, -{86,-58,65}, -{86,-58,66}, -{86,-58,67}, -{86,-58,68}, -{86,-58,69}, -{86,-58,70}, -{86,-58,71}, -{86,-58,72}, -{86,-58,73}, -{86,-58,74}, -{86,-58,75}, -{86,-58,76}, -{86,-58,77}, -{86,-58,78}, -{86,-58,79}, -{86,-58,80}, -{86,-58,81}, -{86,-58,82}, -{86,-58,83}, -{86,-57,6}, -{86,-57,7}, -{86,-57,8}, -{86,-57,9}, -{86,-57,10}, -{86,-57,11}, -{86,-57,12}, -{86,-57,13}, -{86,-57,14}, -{86,-57,15}, -{86,-57,16}, -{86,-57,17}, -{86,-57,18}, -{86,-57,19}, -{86,-57,20}, -{86,-57,21}, -{86,-57,22}, -{86,-57,23}, -{86,-57,24}, -{86,-57,25}, -{86,-57,26}, -{86,-57,27}, -{86,-57,28}, -{86,-57,29}, -{86,-57,30}, -{86,-57,31}, -{86,-57,32}, -{86,-57,33}, -{86,-57,34}, -{86,-57,35}, -{86,-57,36}, -{86,-57,37}, -{86,-57,38}, -{86,-57,39}, -{86,-57,40}, -{86,-57,41}, -{86,-57,42}, -{86,-57,43}, -{86,-57,44}, -{86,-57,45}, -{86,-57,46}, -{86,-57,47}, -{86,-57,48}, -{86,-57,49}, -{86,-57,50}, -{86,-57,51}, -{86,-57,52}, -{86,-57,53}, -{86,-57,54}, -{86,-57,55}, -{86,-57,56}, -{86,-57,57}, -{86,-57,58}, -{86,-57,59}, -{86,-57,60}, -{86,-57,61}, -{86,-57,62}, -{86,-57,63}, -{86,-57,64}, -{86,-57,65}, -{86,-57,66}, -{86,-57,67}, -{86,-57,68}, -{86,-57,69}, -{86,-57,70}, -{86,-57,71}, -{86,-57,72}, -{86,-57,73}, -{86,-57,74}, -{86,-57,75}, -{86,-57,76}, -{86,-57,77}, -{86,-57,78}, -{86,-57,79}, -{86,-57,80}, -{86,-57,81}, -{86,-57,82}, -{86,-57,83}, -{86,-56,4}, -{86,-56,5}, -{86,-56,6}, -{86,-56,7}, -{86,-56,8}, -{86,-56,9}, -{86,-56,10}, -{86,-56,11}, -{86,-56,12}, -{86,-56,13}, -{86,-56,14}, -{86,-56,15}, -{86,-56,16}, -{86,-56,17}, -{86,-56,18}, -{86,-56,19}, -{86,-56,20}, -{86,-56,21}, -{86,-56,22}, -{86,-56,23}, -{86,-56,24}, -{86,-56,25}, -{86,-56,26}, -{86,-56,27}, -{86,-56,28}, -{86,-56,29}, -{86,-56,30}, -{86,-56,31}, -{86,-56,32}, -{86,-56,33}, -{86,-56,34}, -{86,-56,35}, -{86,-56,36}, -{86,-56,37}, -{86,-56,38}, -{86,-56,39}, -{86,-56,40}, -{86,-56,41}, -{86,-56,42}, -{86,-56,43}, -{86,-56,44}, -{86,-56,45}, -{86,-56,46}, -{86,-56,47}, -{86,-56,48}, -{86,-56,49}, -{86,-56,50}, -{86,-56,51}, -{86,-56,52}, -{86,-56,53}, -{86,-56,54}, -{86,-56,55}, -{86,-56,56}, -{86,-56,57}, -{86,-56,58}, -{86,-56,59}, -{86,-56,60}, -{86,-56,61}, -{86,-56,62}, -{86,-56,63}, -{86,-56,64}, -{86,-56,65}, -{86,-56,66}, -{86,-56,67}, -{86,-56,68}, -{86,-56,69}, -{86,-56,70}, -{86,-56,71}, -{86,-56,72}, -{86,-56,73}, -{86,-56,74}, -{86,-56,75}, -{86,-56,76}, -{86,-56,77}, -{86,-56,78}, -{86,-56,79}, -{86,-56,80}, -{86,-56,81}, -{86,-56,82}, -{86,-56,83}, -{86,-55,2}, -{86,-55,3}, -{86,-55,4}, -{86,-55,5}, -{86,-55,6}, -{86,-55,7}, -{86,-55,8}, -{86,-55,9}, -{86,-55,10}, -{86,-55,11}, -{86,-55,12}, -{86,-55,13}, -{86,-55,14}, -{86,-55,15}, -{86,-55,16}, -{86,-55,17}, -{86,-55,18}, -{86,-55,19}, -{86,-55,20}, -{86,-55,21}, -{86,-55,22}, -{86,-55,23}, -{86,-55,24}, -{86,-55,25}, -{86,-55,26}, -{86,-55,27}, -{86,-55,28}, -{86,-55,29}, -{86,-55,30}, -{86,-55,31}, -{86,-55,32}, -{86,-55,33}, -{86,-55,34}, -{86,-55,35}, -{86,-55,36}, -{86,-55,37}, -{86,-55,38}, -{86,-55,39}, -{86,-55,40}, -{86,-55,41}, -{86,-55,42}, -{86,-55,43}, -{86,-55,44}, -{86,-55,45}, -{86,-55,46}, -{86,-55,47}, -{86,-55,48}, -{86,-55,49}, -{86,-55,50}, -{86,-55,51}, -{86,-55,52}, -{86,-55,53}, -{86,-55,54}, -{86,-55,55}, -{86,-55,56}, -{86,-55,57}, -{86,-55,58}, -{86,-55,59}, -{86,-55,60}, -{86,-55,61}, -{86,-55,62}, -{86,-55,63}, -{86,-55,64}, -{86,-55,65}, -{86,-55,66}, -{86,-55,67}, -{86,-55,68}, -{86,-55,69}, -{86,-55,70}, -{86,-55,71}, -{86,-55,72}, -{86,-55,73}, -{86,-55,74}, -{86,-55,75}, -{86,-55,76}, -{86,-55,77}, -{86,-55,78}, -{86,-55,79}, -{86,-55,80}, -{86,-55,81}, -{86,-55,82}, -{86,-55,83}, -{86,-54,0}, -{86,-54,1}, -{86,-54,2}, -{86,-54,3}, -{86,-54,4}, -{86,-54,5}, -{86,-54,6}, -{86,-54,7}, -{86,-54,8}, -{86,-54,9}, -{86,-54,10}, -{86,-54,11}, -{86,-54,12}, -{86,-54,13}, -{86,-54,14}, -{86,-54,15}, -{86,-54,16}, -{86,-54,17}, -{86,-54,18}, -{86,-54,19}, -{86,-54,20}, -{86,-54,21}, -{86,-54,22}, -{86,-54,23}, -{86,-54,24}, -{86,-54,25}, -{86,-54,26}, -{86,-54,27}, -{86,-54,28}, -{86,-54,29}, -{86,-54,30}, -{86,-54,31}, -{86,-54,32}, -{86,-54,33}, -{86,-54,34}, -{86,-54,35}, -{86,-54,36}, -{86,-54,37}, -{86,-54,38}, -{86,-54,39}, -{86,-54,40}, -{86,-54,41}, -{86,-54,42}, -{86,-54,43}, -{86,-54,44}, -{86,-54,45}, -{86,-54,46}, -{86,-54,47}, -{86,-54,48}, -{86,-54,49}, -{86,-54,50}, -{86,-54,51}, -{86,-54,52}, -{86,-54,53}, -{86,-54,54}, -{86,-54,55}, -{86,-54,56}, -{86,-54,57}, -{86,-54,58}, -{86,-54,59}, -{86,-54,60}, -{86,-54,61}, -{86,-54,62}, -{86,-54,63}, -{86,-54,64}, -{86,-54,65}, -{86,-54,66}, -{86,-54,67}, -{86,-54,68}, -{86,-54,69}, -{86,-54,70}, -{86,-54,71}, -{86,-54,72}, -{86,-54,73}, -{86,-54,74}, -{86,-54,75}, -{86,-54,76}, -{86,-54,77}, -{86,-54,78}, -{86,-54,79}, -{86,-54,80}, -{86,-54,81}, -{86,-54,82}, -{86,-54,83}, -{86,-53,-1}, -{86,-53,0}, -{86,-53,1}, -{86,-53,2}, -{86,-53,3}, -{86,-53,4}, -{86,-53,5}, -{86,-53,6}, -{86,-53,7}, -{86,-53,8}, -{86,-53,9}, -{86,-53,10}, -{86,-53,11}, -{86,-53,12}, -{86,-53,13}, -{86,-53,14}, -{86,-53,15}, -{86,-53,16}, -{86,-53,17}, -{86,-53,18}, -{86,-53,19}, -{86,-53,20}, -{86,-53,21}, -{86,-53,22}, -{86,-53,23}, -{86,-53,24}, -{86,-53,25}, -{86,-53,26}, -{86,-53,27}, -{86,-53,28}, -{86,-53,29}, -{86,-53,30}, -{86,-53,31}, -{86,-53,32}, -{86,-53,33}, -{86,-53,34}, -{86,-53,35}, -{86,-53,36}, -{86,-53,37}, -{86,-53,38}, -{86,-53,39}, -{86,-53,40}, -{86,-53,41}, -{86,-53,42}, -{86,-53,43}, -{86,-53,44}, -{86,-53,45}, -{86,-53,46}, -{86,-53,47}, -{86,-53,48}, -{86,-53,49}, -{86,-53,50}, -{86,-53,51}, -{86,-53,52}, -{86,-53,53}, -{86,-53,54}, -{86,-53,55}, -{86,-53,56}, -{86,-53,57}, -{86,-53,58}, -{86,-53,59}, -{86,-53,60}, -{86,-53,61}, -{86,-53,62}, -{86,-53,63}, -{86,-53,64}, -{86,-53,65}, -{86,-53,66}, -{86,-53,67}, -{86,-53,68}, -{86,-53,69}, -{86,-53,70}, -{86,-53,71}, -{86,-53,72}, -{86,-53,73}, -{86,-53,74}, -{86,-53,75}, -{86,-53,76}, -{86,-53,77}, -{86,-53,78}, -{86,-53,79}, -{86,-53,80}, -{86,-53,81}, -{86,-53,82}, -{86,-53,83}, -{86,-52,-3}, -{86,-52,-2}, -{86,-52,-1}, -{86,-52,0}, -{86,-52,1}, -{86,-52,2}, -{86,-52,3}, -{86,-52,4}, -{86,-52,5}, -{86,-52,6}, -{86,-52,7}, -{86,-52,8}, -{86,-52,9}, -{86,-52,10}, -{86,-52,11}, -{86,-52,12}, -{86,-52,13}, -{86,-52,14}, -{86,-52,15}, -{86,-52,16}, -{86,-52,17}, -{86,-52,18}, -{86,-52,19}, -{86,-52,20}, -{86,-52,21}, -{86,-52,22}, -{86,-52,23}, -{86,-52,24}, -{86,-52,25}, -{86,-52,26}, -{86,-52,27}, -{86,-52,28}, -{86,-52,29}, -{86,-52,30}, -{86,-52,31}, -{86,-52,32}, -{86,-52,33}, -{86,-52,34}, -{86,-52,35}, -{86,-52,36}, -{86,-52,37}, -{86,-52,38}, -{86,-52,39}, -{86,-52,40}, -{86,-52,41}, -{86,-52,42}, -{86,-52,43}, -{86,-52,44}, -{86,-52,45}, -{86,-52,46}, -{86,-52,47}, -{86,-52,48}, -{86,-52,49}, -{86,-52,50}, -{86,-52,51}, -{86,-52,52}, -{86,-52,53}, -{86,-52,54}, -{86,-52,55}, -{86,-52,56}, -{86,-52,57}, -{86,-52,58}, -{86,-52,59}, -{86,-52,60}, -{86,-52,61}, -{86,-52,62}, -{86,-52,63}, -{86,-52,64}, -{86,-52,65}, -{86,-52,66}, -{86,-52,67}, -{86,-52,68}, -{86,-52,69}, -{86,-52,70}, -{86,-52,71}, -{86,-52,72}, -{86,-52,73}, -{86,-52,74}, -{86,-52,75}, -{86,-52,76}, -{86,-52,77}, -{86,-52,78}, -{86,-52,79}, -{86,-52,80}, -{86,-52,81}, -{86,-52,82}, -{86,-52,83}, -{86,-51,-5}, -{86,-51,-4}, -{86,-51,-3}, -{86,-51,-2}, -{86,-51,-1}, -{86,-51,0}, -{86,-51,1}, -{86,-51,2}, -{86,-51,3}, -{86,-51,4}, -{86,-51,5}, -{86,-51,6}, -{86,-51,7}, -{86,-51,8}, -{86,-51,9}, -{86,-51,10}, -{86,-51,11}, -{86,-51,12}, -{86,-51,13}, -{86,-51,14}, -{86,-51,15}, -{86,-51,16}, -{86,-51,17}, -{86,-51,18}, -{86,-51,19}, -{86,-51,20}, -{86,-51,21}, -{86,-51,22}, -{86,-51,23}, -{86,-51,24}, -{86,-51,25}, -{86,-51,26}, -{86,-51,27}, -{86,-51,28}, -{86,-51,29}, -{86,-51,30}, -{86,-51,31}, -{86,-51,32}, -{86,-51,33}, -{86,-51,34}, -{86,-51,35}, -{86,-51,36}, -{86,-51,37}, -{86,-51,38}, -{86,-51,39}, -{86,-51,40}, -{86,-51,41}, -{86,-51,42}, -{86,-51,43}, -{86,-51,44}, -{86,-51,45}, -{86,-51,46}, -{86,-51,47}, -{86,-51,48}, -{86,-51,49}, -{86,-51,50}, -{86,-51,51}, -{86,-51,52}, -{86,-51,53}, -{86,-51,54}, -{86,-51,55}, -{86,-51,56}, -{86,-51,57}, -{86,-51,58}, -{86,-51,59}, -{86,-51,60}, -{86,-51,61}, -{86,-51,62}, -{86,-51,63}, -{86,-51,64}, -{86,-51,65}, -{86,-51,66}, -{86,-51,67}, -{86,-51,68}, -{86,-51,69}, -{86,-51,70}, -{86,-51,71}, -{86,-51,72}, -{86,-51,73}, -{86,-51,74}, -{86,-51,75}, -{86,-51,76}, -{86,-51,77}, -{86,-51,78}, -{86,-51,79}, -{86,-51,80}, -{86,-51,81}, -{86,-51,82}, -{86,-51,83}, -{86,-50,-6}, -{86,-50,-5}, -{86,-50,-4}, -{86,-50,-3}, -{86,-50,-2}, -{86,-50,-1}, -{86,-50,0}, -{86,-50,1}, -{86,-50,2}, -{86,-50,3}, -{86,-50,4}, -{86,-50,5}, -{86,-50,6}, -{86,-50,7}, -{86,-50,8}, -{86,-50,9}, -{86,-50,10}, -{86,-50,11}, -{86,-50,12}, -{86,-50,13}, -{86,-50,14}, -{86,-50,15}, -{86,-50,16}, -{86,-50,17}, -{86,-50,18}, -{86,-50,19}, -{86,-50,20}, -{86,-50,21}, -{86,-50,22}, -{86,-50,23}, -{86,-50,24}, -{86,-50,25}, -{86,-50,26}, -{86,-50,27}, -{86,-50,28}, -{86,-50,29}, -{86,-50,30}, -{86,-50,31}, -{86,-50,32}, -{86,-50,33}, -{86,-50,34}, -{86,-50,35}, -{86,-50,36}, -{86,-50,37}, -{86,-50,38}, -{86,-50,39}, -{86,-50,40}, -{86,-50,41}, -{86,-50,42}, -{86,-50,43}, -{86,-50,44}, -{86,-50,45}, -{86,-50,46}, -{86,-50,47}, -{86,-50,48}, -{86,-50,49}, -{86,-50,50}, -{86,-50,51}, -{86,-50,52}, -{86,-50,53}, -{86,-50,54}, -{86,-50,55}, -{86,-50,56}, -{86,-50,57}, -{86,-50,58}, -{86,-50,59}, -{86,-50,60}, -{86,-50,61}, -{86,-50,62}, -{86,-50,63}, -{86,-50,64}, -{86,-50,65}, -{86,-50,66}, -{86,-50,67}, -{86,-50,68}, -{86,-50,69}, -{86,-50,70}, -{86,-50,71}, -{86,-50,72}, -{86,-50,73}, -{86,-50,74}, -{86,-50,75}, -{86,-50,76}, -{86,-50,77}, -{86,-50,78}, -{86,-50,79}, -{86,-50,80}, -{86,-50,81}, -{86,-50,82}, -{86,-50,83}, -{86,-49,-8}, -{86,-49,-7}, -{86,-49,-6}, -{86,-49,-5}, -{86,-49,-4}, -{86,-49,-3}, -{86,-49,-2}, -{86,-49,-1}, -{86,-49,0}, -{86,-49,1}, -{86,-49,2}, -{86,-49,3}, -{86,-49,4}, -{86,-49,5}, -{86,-49,6}, -{86,-49,7}, -{86,-49,8}, -{86,-49,9}, -{86,-49,10}, -{86,-49,11}, -{86,-49,12}, -{86,-49,13}, -{86,-49,14}, -{86,-49,15}, -{86,-49,16}, -{86,-49,17}, -{86,-49,18}, -{86,-49,19}, -{86,-49,20}, -{86,-49,21}, -{86,-49,22}, -{86,-49,23}, -{86,-49,24}, -{86,-49,25}, -{86,-49,26}, -{86,-49,27}, -{86,-49,28}, -{86,-49,29}, -{86,-49,30}, -{86,-49,31}, -{86,-49,32}, -{86,-49,33}, -{86,-49,34}, -{86,-49,35}, -{86,-49,36}, -{86,-49,37}, -{86,-49,38}, -{86,-49,39}, -{86,-49,40}, -{86,-49,41}, -{86,-49,42}, -{86,-49,43}, -{86,-49,44}, -{86,-49,45}, -{86,-49,46}, -{86,-49,47}, -{86,-49,48}, -{86,-49,49}, -{86,-49,50}, -{86,-49,51}, -{86,-49,52}, -{86,-49,53}, -{86,-49,54}, -{86,-49,55}, -{86,-49,56}, -{86,-49,57}, -{86,-49,58}, -{86,-49,59}, -{86,-49,60}, -{86,-49,61}, -{86,-49,62}, -{86,-49,63}, -{86,-49,64}, -{86,-49,65}, -{86,-49,66}, -{86,-49,67}, -{86,-49,68}, -{86,-49,69}, -{86,-49,70}, -{86,-49,71}, -{86,-49,72}, -{86,-49,73}, -{86,-49,74}, -{86,-49,75}, -{86,-49,76}, -{86,-49,77}, -{86,-49,78}, -{86,-49,79}, -{86,-49,80}, -{86,-49,81}, -{86,-49,82}, -{86,-49,83}, -{86,-48,-10}, -{86,-48,-9}, -{86,-48,-8}, -{86,-48,-7}, -{86,-48,-6}, -{86,-48,-5}, -{86,-48,-4}, -{86,-48,-3}, -{86,-48,-2}, -{86,-48,-1}, -{86,-48,0}, -{86,-48,1}, -{86,-48,2}, -{86,-48,3}, -{86,-48,4}, -{86,-48,5}, -{86,-48,6}, -{86,-48,7}, -{86,-48,8}, -{86,-48,9}, -{86,-48,10}, -{86,-48,11}, -{86,-48,12}, -{86,-48,13}, -{86,-48,14}, -{86,-48,15}, -{86,-48,16}, -{86,-48,17}, -{86,-48,18}, -{86,-48,19}, -{86,-48,20}, -{86,-48,21}, -{86,-48,22}, -{86,-48,23}, -{86,-48,24}, -{86,-48,25}, -{86,-48,26}, -{86,-48,27}, -{86,-48,28}, -{86,-48,29}, -{86,-48,30}, -{86,-48,31}, -{86,-48,32}, -{86,-48,33}, -{86,-48,34}, -{86,-48,35}, -{86,-48,36}, -{86,-48,37}, -{86,-48,38}, -{86,-48,39}, -{86,-48,40}, -{86,-48,41}, -{86,-48,42}, -{86,-48,43}, -{86,-48,44}, -{86,-48,45}, -{86,-48,46}, -{86,-48,47}, -{86,-48,48}, -{86,-48,49}, -{86,-48,50}, -{86,-48,51}, -{86,-48,52}, -{86,-48,53}, -{86,-48,54}, -{86,-48,55}, -{86,-48,56}, -{86,-48,57}, -{86,-48,58}, -{86,-48,59}, -{86,-48,60}, -{86,-48,61}, -{86,-48,62}, -{86,-48,63}, -{86,-48,64}, -{86,-48,65}, -{86,-48,66}, -{86,-48,67}, -{86,-48,68}, -{86,-48,69}, -{86,-48,70}, -{86,-48,71}, -{86,-48,72}, -{86,-48,73}, -{86,-48,74}, -{86,-48,75}, -{86,-48,76}, -{86,-48,77}, -{86,-48,78}, -{86,-48,79}, -{86,-48,80}, -{86,-48,81}, -{86,-48,82}, -{86,-48,83}, -{86,-47,-11}, -{86,-47,-10}, -{86,-47,-9}, -{86,-47,-8}, -{86,-47,-7}, -{86,-47,-6}, -{86,-47,-5}, -{86,-47,-4}, -{86,-47,-3}, -{86,-47,-2}, -{86,-47,-1}, -{86,-47,0}, -{86,-47,1}, -{86,-47,2}, -{86,-47,3}, -{86,-47,4}, -{86,-47,5}, -{86,-47,6}, -{86,-47,7}, -{86,-47,8}, -{86,-47,9}, -{86,-47,10}, -{86,-47,11}, -{86,-47,12}, -{86,-47,13}, -{86,-47,14}, -{86,-47,15}, -{86,-47,16}, -{86,-47,17}, -{86,-47,18}, -{86,-47,19}, -{86,-47,20}, -{86,-47,21}, -{86,-47,22}, -{86,-47,23}, -{86,-47,24}, -{86,-47,25}, -{86,-47,26}, -{86,-47,27}, -{86,-47,28}, -{86,-47,29}, -{86,-47,30}, -{86,-47,31}, -{86,-47,32}, -{86,-47,33}, -{86,-47,34}, -{86,-47,35}, -{86,-47,36}, -{86,-47,37}, -{86,-47,38}, -{86,-47,39}, -{86,-47,40}, -{86,-47,41}, -{86,-47,42}, -{86,-47,43}, -{86,-47,44}, -{86,-47,45}, -{86,-47,46}, -{86,-47,47}, -{86,-47,48}, -{86,-47,49}, -{86,-47,50}, -{86,-47,51}, -{86,-47,52}, -{86,-47,53}, -{86,-47,54}, -{86,-47,55}, -{86,-47,56}, -{86,-47,57}, -{86,-47,58}, -{86,-47,59}, -{86,-47,60}, -{86,-47,61}, -{86,-47,62}, -{86,-47,63}, -{86,-47,64}, -{86,-47,65}, -{86,-47,66}, -{86,-47,67}, -{86,-47,68}, -{86,-47,69}, -{86,-47,70}, -{86,-47,71}, -{86,-47,72}, -{86,-47,73}, -{86,-47,74}, -{86,-47,75}, -{86,-47,76}, -{86,-47,77}, -{86,-47,78}, -{86,-47,79}, -{86,-47,80}, -{86,-47,81}, -{86,-47,82}, -{86,-47,83}, -{86,-46,-13}, -{86,-46,-12}, -{86,-46,-11}, -{86,-46,-10}, -{86,-46,-9}, -{86,-46,-8}, -{86,-46,-7}, -{86,-46,-6}, -{86,-46,-5}, -{86,-46,-4}, -{86,-46,-3}, -{86,-46,-2}, -{86,-46,-1}, -{86,-46,0}, -{86,-46,1}, -{86,-46,2}, -{86,-46,3}, -{86,-46,4}, -{86,-46,5}, -{86,-46,6}, -{86,-46,7}, -{86,-46,8}, -{86,-46,9}, -{86,-46,10}, -{86,-46,11}, -{86,-46,12}, -{86,-46,13}, -{86,-46,14}, -{86,-46,15}, -{86,-46,16}, -{86,-46,17}, -{86,-46,18}, -{86,-46,19}, -{86,-46,20}, -{86,-46,21}, -{86,-46,22}, -{86,-46,23}, -{86,-46,24}, -{86,-46,25}, -{86,-46,26}, -{86,-46,27}, -{86,-46,28}, -{86,-46,29}, -{86,-46,30}, -{86,-46,31}, -{86,-46,32}, -{86,-46,33}, -{86,-46,34}, -{86,-46,35}, -{86,-46,36}, -{86,-46,37}, -{86,-46,38}, -{86,-46,39}, -{86,-46,40}, -{86,-46,41}, -{86,-46,42}, -{86,-46,43}, -{86,-46,44}, -{86,-46,45}, -{86,-46,46}, -{86,-46,47}, -{86,-46,48}, -{86,-46,49}, -{86,-46,50}, -{86,-46,51}, -{86,-46,52}, -{86,-46,53}, -{86,-46,54}, -{86,-46,55}, -{86,-46,56}, -{86,-46,57}, -{86,-46,58}, -{86,-46,59}, -{86,-46,60}, -{86,-46,61}, -{86,-46,62}, -{86,-46,63}, -{86,-46,64}, -{86,-46,65}, -{86,-46,66}, -{86,-46,67}, -{86,-46,68}, -{86,-46,69}, -{86,-46,70}, -{86,-46,71}, -{86,-46,72}, -{86,-46,73}, -{86,-46,74}, -{86,-46,75}, -{86,-46,76}, -{86,-46,77}, -{86,-46,78}, -{86,-46,79}, -{86,-46,80}, -{86,-46,81}, -{86,-46,82}, -{86,-46,83}, -{86,-45,-14}, -{86,-45,-13}, -{86,-45,-12}, -{86,-45,-11}, -{86,-45,-10}, -{86,-45,-9}, -{86,-45,-8}, -{86,-45,-7}, -{86,-45,-6}, -{86,-45,-5}, -{86,-45,-4}, -{86,-45,-3}, -{86,-45,-2}, -{86,-45,-1}, -{86,-45,0}, -{86,-45,1}, -{86,-45,2}, -{86,-45,3}, -{86,-45,4}, -{86,-45,5}, -{86,-45,6}, -{86,-45,7}, -{86,-45,8}, -{86,-45,9}, -{86,-45,10}, -{86,-45,11}, -{86,-45,12}, -{86,-45,13}, -{86,-45,14}, -{86,-45,15}, -{86,-45,16}, -{86,-45,17}, -{86,-45,18}, -{86,-45,19}, -{86,-45,20}, -{86,-45,21}, -{86,-45,22}, -{86,-45,23}, -{86,-45,24}, -{86,-45,25}, -{86,-45,26}, -{86,-45,27}, -{86,-45,28}, -{86,-45,29}, -{86,-45,30}, -{86,-45,31}, -{86,-45,32}, -{86,-45,33}, -{86,-45,34}, -{86,-45,35}, -{86,-45,36}, -{86,-45,37}, -{86,-45,38}, -{86,-45,39}, -{86,-45,40}, -{86,-45,41}, -{86,-45,42}, -{86,-45,43}, -{86,-45,44}, -{86,-45,45}, -{86,-45,46}, -{86,-45,47}, -{86,-45,48}, -{86,-45,49}, -{86,-45,50}, -{86,-45,51}, -{86,-45,52}, -{86,-45,53}, -{86,-45,54}, -{86,-45,55}, -{86,-45,56}, -{86,-45,57}, -{86,-45,58}, -{86,-45,59}, -{86,-45,60}, -{86,-45,61}, -{86,-45,62}, -{86,-45,63}, -{86,-45,64}, -{86,-45,65}, -{86,-45,66}, -{86,-45,67}, -{86,-45,68}, -{86,-45,69}, -{86,-45,70}, -{86,-45,71}, -{86,-45,72}, -{86,-45,73}, -{86,-45,74}, -{86,-45,75}, -{86,-45,76}, -{86,-45,77}, -{86,-45,78}, -{86,-45,79}, -{86,-45,80}, -{86,-45,81}, -{86,-45,82}, -{86,-45,83}, -{86,-44,-16}, -{86,-44,-15}, -{86,-44,-14}, -{86,-44,-13}, -{86,-44,-12}, -{86,-44,-11}, -{86,-44,-10}, -{86,-44,-9}, -{86,-44,-8}, -{86,-44,-7}, -{86,-44,-6}, -{86,-44,-5}, -{86,-44,-4}, -{86,-44,-3}, -{86,-44,-2}, -{86,-44,-1}, -{86,-44,0}, -{86,-44,1}, -{86,-44,2}, -{86,-44,3}, -{86,-44,4}, -{86,-44,5}, -{86,-44,6}, -{86,-44,7}, -{86,-44,8}, -{86,-44,9}, -{86,-44,10}, -{86,-44,11}, -{86,-44,12}, -{86,-44,13}, -{86,-44,14}, -{86,-44,15}, -{86,-44,16}, -{86,-44,17}, -{86,-44,18}, -{86,-44,19}, -{86,-44,20}, -{86,-44,21}, -{86,-44,22}, -{86,-44,23}, -{86,-44,24}, -{86,-44,25}, -{86,-44,26}, -{86,-44,27}, -{86,-44,28}, -{86,-44,29}, -{86,-44,30}, -{86,-44,31}, -{86,-44,32}, -{86,-44,33}, -{86,-44,34}, -{86,-44,35}, -{86,-44,36}, -{86,-44,37}, -{86,-44,38}, -{86,-44,39}, -{86,-44,40}, -{86,-44,41}, -{86,-44,42}, -{86,-44,43}, -{86,-44,44}, -{86,-44,45}, -{86,-44,46}, -{86,-44,47}, -{86,-44,48}, -{86,-44,49}, -{86,-44,50}, -{86,-44,51}, -{86,-44,52}, -{86,-44,53}, -{86,-44,54}, -{86,-44,55}, -{86,-44,56}, -{86,-44,57}, -{86,-44,58}, -{86,-44,59}, -{86,-44,60}, -{86,-44,61}, -{86,-44,62}, -{86,-44,63}, -{86,-44,64}, -{86,-44,65}, -{86,-44,66}, -{86,-44,67}, -{86,-44,68}, -{86,-44,69}, -{86,-44,70}, -{86,-44,71}, -{86,-44,72}, -{86,-44,73}, -{86,-44,74}, -{86,-44,75}, -{86,-44,76}, -{86,-44,77}, -{86,-44,78}, -{86,-44,79}, -{86,-44,80}, -{86,-44,81}, -{86,-44,82}, -{86,-44,83}, -{86,-43,-18}, -{86,-43,-17}, -{86,-43,-16}, -{86,-43,-15}, -{86,-43,-14}, -{86,-43,-13}, -{86,-43,-12}, -{86,-43,-11}, -{86,-43,-10}, -{86,-43,-9}, -{86,-43,-8}, -{86,-43,-7}, -{86,-43,-6}, -{86,-43,-5}, -{86,-43,-4}, -{86,-43,-3}, -{86,-43,-2}, -{86,-43,-1}, -{86,-43,0}, -{86,-43,1}, -{86,-43,2}, -{86,-43,3}, -{86,-43,4}, -{86,-43,5}, -{86,-43,6}, -{86,-43,7}, -{86,-43,8}, -{86,-43,9}, -{86,-43,10}, -{86,-43,11}, -{86,-43,12}, -{86,-43,13}, -{86,-43,14}, -{86,-43,15}, -{86,-43,16}, -{86,-43,17}, -{86,-43,18}, -{86,-43,19}, -{86,-43,20}, -{86,-43,21}, -{86,-43,22}, -{86,-43,23}, -{86,-43,24}, -{86,-43,25}, -{86,-43,26}, -{86,-43,27}, -{86,-43,28}, -{86,-43,29}, -{86,-43,30}, -{86,-43,31}, -{86,-43,32}, -{86,-43,33}, -{86,-43,34}, -{86,-43,35}, -{86,-43,36}, -{86,-43,37}, -{86,-43,38}, -{86,-43,39}, -{86,-43,40}, -{86,-43,41}, -{86,-43,42}, -{86,-43,43}, -{86,-43,44}, -{86,-43,45}, -{86,-43,46}, -{86,-43,47}, -{86,-43,48}, -{86,-43,49}, -{86,-43,50}, -{86,-43,51}, -{86,-43,52}, -{86,-43,53}, -{86,-43,54}, -{86,-43,55}, -{86,-43,56}, -{86,-43,57}, -{86,-43,58}, -{86,-43,59}, -{86,-43,60}, -{86,-43,61}, -{86,-43,62}, -{86,-43,63}, -{86,-43,64}, -{86,-43,65}, -{86,-43,66}, -{86,-43,67}, -{86,-43,68}, -{86,-43,69}, -{86,-43,70}, -{86,-43,71}, -{86,-43,72}, -{86,-43,73}, -{86,-43,74}, -{86,-43,75}, -{86,-43,76}, -{86,-43,77}, -{86,-43,78}, -{86,-43,79}, -{86,-43,80}, -{86,-43,81}, -{86,-43,82}, -{86,-43,83}, -{86,-42,-19}, -{86,-42,-18}, -{86,-42,-17}, -{86,-42,-16}, -{86,-42,-15}, -{86,-42,-14}, -{86,-42,-13}, -{86,-42,-12}, -{86,-42,-11}, -{86,-42,-10}, -{86,-42,-9}, -{86,-42,-8}, -{86,-42,-7}, -{86,-42,-6}, -{86,-42,-5}, -{86,-42,-4}, -{86,-42,-3}, -{86,-42,-2}, -{86,-42,-1}, -{86,-42,0}, -{86,-42,1}, -{86,-42,2}, -{86,-42,3}, -{86,-42,4}, -{86,-42,5}, -{86,-42,6}, -{86,-42,7}, -{86,-42,8}, -{86,-42,9}, -{86,-42,10}, -{86,-42,11}, -{86,-42,12}, -{86,-42,13}, -{86,-42,14}, -{86,-42,15}, -{86,-42,16}, -{86,-42,17}, -{86,-42,18}, -{86,-42,19}, -{86,-42,20}, -{86,-42,21}, -{86,-42,22}, -{86,-42,23}, -{86,-42,24}, -{86,-42,25}, -{86,-42,26}, -{86,-42,27}, -{86,-42,28}, -{86,-42,29}, -{86,-42,30}, -{86,-42,31}, -{86,-42,32}, -{86,-42,33}, -{86,-42,34}, -{86,-42,35}, -{86,-42,36}, -{86,-42,37}, -{86,-42,38}, -{86,-42,39}, -{86,-42,40}, -{86,-42,41}, -{86,-42,42}, -{86,-42,43}, -{86,-42,44}, -{86,-42,45}, -{86,-42,46}, -{86,-42,47}, -{86,-42,48}, -{86,-42,49}, -{86,-42,50}, -{86,-42,51}, -{86,-42,52}, -{86,-42,53}, -{86,-42,54}, -{86,-42,55}, -{86,-42,56}, -{86,-42,57}, -{86,-42,58}, -{86,-42,59}, -{86,-42,60}, -{86,-42,61}, -{86,-42,62}, -{86,-42,63}, -{86,-42,64}, -{86,-42,65}, -{86,-42,66}, -{86,-42,67}, -{86,-42,68}, -{86,-42,69}, -{86,-42,70}, -{86,-42,71}, -{86,-42,72}, -{86,-42,73}, -{86,-42,74}, -{86,-42,75}, -{86,-42,76}, -{86,-42,77}, -{86,-42,78}, -{86,-42,79}, -{86,-42,80}, -{86,-42,81}, -{86,-42,82}, -{86,-42,83}, -{86,-42,84}, -{86,-41,-21}, -{86,-41,-20}, -{86,-41,-19}, -{86,-41,-18}, -{86,-41,-17}, -{86,-41,-16}, -{86,-41,-15}, -{86,-41,-14}, -{86,-41,-13}, -{86,-41,-12}, -{86,-41,-11}, -{86,-41,-10}, -{86,-41,-9}, -{86,-41,-8}, -{86,-41,-7}, -{86,-41,-6}, -{86,-41,-5}, -{86,-41,-4}, -{86,-41,-3}, -{86,-41,-2}, -{86,-41,-1}, -{86,-41,0}, -{86,-41,1}, -{86,-41,2}, -{86,-41,3}, -{86,-41,4}, -{86,-41,5}, -{86,-41,6}, -{86,-41,7}, -{86,-41,8}, -{86,-41,9}, -{86,-41,10}, -{86,-41,11}, -{86,-41,12}, -{86,-41,13}, -{86,-41,14}, -{86,-41,15}, -{86,-41,16}, -{86,-41,17}, -{86,-41,18}, -{86,-41,19}, -{86,-41,20}, -{86,-41,21}, -{86,-41,22}, -{86,-41,23}, -{86,-41,24}, -{86,-41,25}, -{86,-41,26}, -{86,-41,27}, -{86,-41,28}, -{86,-41,29}, -{86,-41,30}, -{86,-41,31}, -{86,-41,32}, -{86,-41,33}, -{86,-41,34}, -{86,-41,35}, -{86,-41,36}, -{86,-41,37}, -{86,-41,38}, -{86,-41,39}, -{86,-41,40}, -{86,-41,41}, -{86,-41,42}, -{86,-41,43}, -{86,-41,44}, -{86,-41,45}, -{86,-41,46}, -{86,-41,47}, -{86,-41,48}, -{86,-41,49}, -{86,-41,50}, -{86,-41,51}, -{86,-41,52}, -{86,-41,53}, -{86,-41,54}, -{86,-41,55}, -{86,-41,56}, -{86,-41,57}, -{86,-41,58}, -{86,-41,59}, -{86,-41,60}, -{86,-41,61}, -{86,-41,62}, -{86,-41,63}, -{86,-41,64}, -{86,-41,65}, -{86,-41,66}, -{86,-41,67}, -{86,-41,68}, -{86,-41,69}, -{86,-41,70}, -{86,-41,71}, -{86,-41,72}, -{86,-41,73}, -{86,-41,74}, -{86,-41,75}, -{86,-41,76}, -{86,-41,77}, -{86,-41,78}, -{86,-41,79}, -{86,-41,80}, -{86,-41,81}, -{86,-41,82}, -{86,-41,83}, -{86,-41,84}, -{86,-40,-21}, -{86,-40,-20}, -{86,-40,-19}, -{86,-40,-18}, -{86,-40,-17}, -{86,-40,-16}, -{86,-40,-15}, -{86,-40,-14}, -{86,-40,-13}, -{86,-40,-12}, -{86,-40,-11}, -{86,-40,-10}, -{86,-40,-9}, -{86,-40,-8}, -{86,-40,-7}, -{86,-40,-6}, -{86,-40,-5}, -{86,-40,-4}, -{86,-40,-3}, -{86,-40,-2}, -{86,-40,-1}, -{86,-40,0}, -{86,-40,1}, -{86,-40,2}, -{86,-40,3}, -{86,-40,4}, -{86,-40,5}, -{86,-40,6}, -{86,-40,7}, -{86,-40,8}, -{86,-40,9}, -{86,-40,10}, -{86,-40,11}, -{86,-40,12}, -{86,-40,13}, -{86,-40,14}, -{86,-40,15}, -{86,-40,16}, -{86,-40,17}, -{86,-40,18}, -{86,-40,19}, -{86,-40,20}, -{86,-40,21}, -{86,-40,22}, -{86,-40,23}, -{86,-40,24}, -{86,-40,25}, -{86,-40,26}, -{86,-40,27}, -{86,-40,28}, -{86,-40,29}, -{86,-40,30}, -{86,-40,31}, -{86,-40,32}, -{86,-40,33}, -{86,-40,34}, -{86,-40,35}, -{86,-40,36}, -{86,-40,37}, -{86,-40,38}, -{86,-40,39}, -{86,-40,40}, -{86,-40,41}, -{86,-40,42}, -{86,-40,43}, -{86,-40,44}, -{86,-40,45}, -{86,-40,46}, -{86,-40,47}, -{86,-40,48}, -{86,-40,49}, -{86,-40,50}, -{86,-40,51}, -{86,-40,52}, -{86,-40,53}, -{86,-40,54}, -{86,-40,55}, -{86,-40,56}, -{86,-40,57}, -{86,-40,58}, -{86,-40,59}, -{86,-40,60}, -{86,-40,61}, -{86,-40,62}, -{86,-40,63}, -{86,-40,64}, -{86,-40,65}, -{86,-40,66}, -{86,-40,67}, -{86,-40,68}, -{86,-40,69}, -{86,-40,70}, -{86,-40,71}, -{86,-40,72}, -{86,-40,73}, -{86,-40,74}, -{86,-40,75}, -{86,-40,76}, -{86,-40,77}, -{86,-40,78}, -{86,-40,79}, -{86,-40,80}, -{86,-40,81}, -{86,-40,82}, -{86,-40,83}, -{86,-40,84}, -{86,-39,-21}, -{86,-39,-20}, -{86,-39,-19}, -{86,-39,-18}, -{86,-39,-17}, -{86,-39,-16}, -{86,-39,-15}, -{86,-39,-14}, -{86,-39,-13}, -{86,-39,-12}, -{86,-39,-11}, -{86,-39,-10}, -{86,-39,-9}, -{86,-39,-8}, -{86,-39,-7}, -{86,-39,-6}, -{86,-39,-5}, -{86,-39,-4}, -{86,-39,-3}, -{86,-39,-2}, -{86,-39,-1}, -{86,-39,0}, -{86,-39,1}, -{86,-39,2}, -{86,-39,3}, -{86,-39,4}, -{86,-39,5}, -{86,-39,6}, -{86,-39,7}, -{86,-39,8}, -{86,-39,9}, -{86,-39,10}, -{86,-39,11}, -{86,-39,12}, -{86,-39,13}, -{86,-39,14}, -{86,-39,15}, -{86,-39,16}, -{86,-39,17}, -{86,-39,18}, -{86,-39,19}, -{86,-39,20}, -{86,-39,21}, -{86,-39,22}, -{86,-39,23}, -{86,-39,24}, -{86,-39,25}, -{86,-39,26}, -{86,-39,27}, -{86,-39,28}, -{86,-39,29}, -{86,-39,30}, -{86,-39,31}, -{86,-39,32}, -{86,-39,33}, -{86,-39,34}, -{86,-39,35}, -{86,-39,36}, -{86,-39,37}, -{86,-39,38}, -{86,-39,39}, -{86,-39,40}, -{86,-39,41}, -{86,-39,42}, -{86,-39,43}, -{86,-39,44}, -{86,-39,45}, -{86,-39,46}, -{86,-39,47}, -{86,-39,48}, -{86,-39,49}, -{86,-39,50}, -{86,-39,51}, -{86,-39,52}, -{86,-39,53}, -{86,-39,54}, -{86,-39,55}, -{86,-39,56}, -{86,-39,57}, -{86,-39,58}, -{86,-39,59}, -{86,-39,60}, -{86,-39,61}, -{86,-39,62}, -{86,-39,63}, -{86,-39,64}, -{86,-39,65}, -{86,-39,66}, -{86,-39,67}, -{86,-39,68}, -{86,-39,69}, -{86,-39,70}, -{86,-39,71}, -{86,-39,72}, -{86,-39,73}, -{86,-39,74}, -{86,-39,75}, -{86,-39,76}, -{86,-39,77}, -{86,-39,78}, -{86,-39,79}, -{86,-39,80}, -{86,-39,81}, -{86,-39,82}, -{86,-39,83}, -{86,-39,84}, -{86,-38,-21}, -{86,-38,-20}, -{86,-38,-19}, -{86,-38,-18}, -{86,-38,-17}, -{86,-38,-16}, -{86,-38,-15}, -{86,-38,-14}, -{86,-38,-13}, -{86,-38,-12}, -{86,-38,-11}, -{86,-38,-10}, -{86,-38,-9}, -{86,-38,-8}, -{86,-38,-7}, -{86,-38,-6}, -{86,-38,-5}, -{86,-38,-4}, -{86,-38,-3}, -{86,-38,-2}, -{86,-38,-1}, -{86,-38,0}, -{86,-38,1}, -{86,-38,2}, -{86,-38,3}, -{86,-38,4}, -{86,-38,5}, -{86,-38,6}, -{86,-38,7}, -{86,-38,8}, -{86,-38,9}, -{86,-38,10}, -{86,-38,11}, -{86,-38,12}, -{86,-38,13}, -{86,-38,14}, -{86,-38,15}, -{86,-38,16}, -{86,-38,17}, -{86,-38,18}, -{86,-38,19}, -{86,-38,20}, -{86,-38,21}, -{86,-38,22}, -{86,-38,23}, -{86,-38,24}, -{86,-38,25}, -{86,-38,26}, -{86,-38,27}, -{86,-38,28}, -{86,-38,29}, -{86,-38,30}, -{86,-38,31}, -{86,-38,32}, -{86,-38,33}, -{86,-38,34}, -{86,-38,35}, -{86,-38,36}, -{86,-38,37}, -{86,-38,38}, -{86,-38,39}, -{86,-38,40}, -{86,-38,41}, -{86,-38,42}, -{86,-38,43}, -{86,-38,44}, -{86,-38,45}, -{86,-38,46}, -{86,-38,47}, -{86,-38,48}, -{86,-38,49}, -{86,-38,50}, -{86,-38,51}, -{86,-38,52}, -{86,-38,53}, -{86,-38,54}, -{86,-38,55}, -{86,-38,56}, -{86,-38,57}, -{86,-38,58}, -{86,-38,59}, -{86,-38,60}, -{86,-38,61}, -{86,-38,62}, -{86,-38,63}, -{86,-38,64}, -{86,-38,65}, -{86,-38,66}, -{86,-38,67}, -{86,-38,68}, -{86,-38,69}, -{86,-38,70}, -{86,-38,71}, -{86,-38,72}, -{86,-38,73}, -{86,-38,74}, -{86,-38,75}, -{86,-38,76}, -{86,-38,77}, -{86,-38,78}, -{86,-38,79}, -{86,-38,80}, -{86,-38,81}, -{86,-38,82}, -{86,-38,83}, -{86,-38,84}, -{86,-37,-21}, -{86,-37,-20}, -{86,-37,-19}, -{86,-37,-18}, -{86,-37,-17}, -{86,-37,-16}, -{86,-37,-15}, -{86,-37,-14}, -{86,-37,-13}, -{86,-37,-12}, -{86,-37,-11}, -{86,-37,-10}, -{86,-37,-9}, -{86,-37,-8}, -{86,-37,-7}, -{86,-37,-6}, -{86,-37,-5}, -{86,-37,-4}, -{86,-37,-3}, -{86,-37,-2}, -{86,-37,-1}, -{86,-37,0}, -{86,-37,1}, -{86,-37,2}, -{86,-37,3}, -{86,-37,4}, -{86,-37,5}, -{86,-37,6}, -{86,-37,7}, -{86,-37,8}, -{86,-37,9}, -{86,-37,10}, -{86,-37,11}, -{86,-37,12}, -{86,-37,13}, -{86,-37,14}, -{86,-37,15}, -{86,-37,16}, -{86,-37,17}, -{86,-37,18}, -{86,-37,19}, -{86,-37,20}, -{86,-37,21}, -{86,-37,22}, -{86,-37,23}, -{86,-37,24}, -{86,-37,25}, -{86,-37,26}, -{86,-37,27}, -{86,-37,28}, -{86,-37,29}, -{86,-37,30}, -{86,-37,31}, -{86,-37,32}, -{86,-37,33}, -{86,-37,34}, -{86,-37,35}, -{86,-37,36}, -{86,-37,37}, -{86,-37,38}, -{86,-37,39}, -{86,-37,40}, -{86,-37,41}, -{86,-37,42}, -{86,-37,43}, -{86,-37,44}, -{86,-37,45}, -{86,-37,46}, -{86,-37,47}, -{86,-37,48}, -{86,-37,49}, -{86,-37,50}, -{86,-37,51}, -{86,-37,52}, -{86,-37,53}, -{86,-37,54}, -{86,-37,55}, -{86,-37,56}, -{86,-37,57}, -{86,-37,58}, -{86,-37,59}, -{86,-37,60}, -{86,-37,61}, -{86,-37,62}, -{86,-37,63}, -{86,-37,64}, -{86,-37,65}, -{86,-37,66}, -{86,-37,67}, -{86,-37,68}, -{86,-37,69}, -{86,-37,70}, -{86,-37,71}, -{86,-37,72}, -{86,-37,73}, -{86,-37,74}, -{86,-37,75}, -{86,-37,76}, -{86,-37,77}, -{86,-37,78}, -{86,-37,79}, -{86,-37,80}, -{86,-37,81}, -{86,-37,82}, -{86,-37,83}, -{86,-37,84}, -{86,-36,-21}, -{86,-36,-20}, -{86,-36,-19}, -{86,-36,-18}, -{86,-36,-17}, -{86,-36,-16}, -{86,-36,-15}, -{86,-36,-14}, -{86,-36,-13}, -{86,-36,-12}, -{86,-36,-11}, -{86,-36,-10}, -{86,-36,-9}, -{86,-36,-8}, -{86,-36,-7}, -{86,-36,-6}, -{86,-36,-5}, -{86,-36,-4}, -{86,-36,-3}, -{86,-36,-2}, -{86,-36,-1}, -{86,-36,0}, -{86,-36,1}, -{86,-36,2}, -{86,-36,3}, -{86,-36,4}, -{86,-36,5}, -{86,-36,6}, -{86,-36,7}, -{86,-36,8}, -{86,-36,9}, -{86,-36,10}, -{86,-36,11}, -{86,-36,12}, -{86,-36,13}, -{86,-36,14}, -{86,-36,15}, -{86,-36,16}, -{86,-36,17}, -{86,-36,18}, -{86,-36,19}, -{86,-36,20}, -{86,-36,21}, -{86,-36,22}, -{86,-36,23}, -{86,-36,24}, -{86,-36,25}, -{86,-36,26}, -{86,-36,27}, -{86,-36,28}, -{86,-36,29}, -{86,-36,30}, -{86,-36,31}, -{86,-36,32}, -{86,-36,33}, -{86,-36,34}, -{86,-36,35}, -{86,-36,36}, -{86,-36,37}, -{86,-36,38}, -{86,-36,39}, -{86,-36,40}, -{86,-36,41}, -{86,-36,42}, -{86,-36,43}, -{86,-36,44}, -{86,-36,45}, -{86,-36,46}, -{86,-36,47}, -{86,-36,48}, -{86,-36,49}, -{86,-36,50}, -{86,-36,51}, -{86,-36,52}, -{86,-36,53}, -{86,-36,54}, -{86,-36,55}, -{86,-36,56}, -{86,-36,57}, -{86,-36,58}, -{86,-36,59}, -{86,-36,60}, -{86,-36,61}, -{86,-36,62}, -{86,-36,63}, -{86,-36,64}, -{86,-36,65}, -{86,-36,66}, -{86,-36,67}, -{86,-36,68}, -{86,-36,69}, -{86,-36,70}, -{86,-36,71}, -{86,-36,72}, -{86,-36,73}, -{86,-36,74}, -{86,-36,75}, -{86,-36,76}, -{86,-36,77}, -{86,-36,78}, -{86,-36,79}, -{86,-36,80}, -{86,-36,81}, -{86,-36,82}, -{86,-36,83}, -{86,-36,84}, -{86,-35,-21}, -{86,-35,-20}, -{86,-35,-19}, -{86,-35,-18}, -{86,-35,-17}, -{86,-35,-16}, -{86,-35,-15}, -{86,-35,-14}, -{86,-35,-13}, -{86,-35,-12}, -{86,-35,-11}, -{86,-35,-10}, -{86,-35,-9}, -{86,-35,-8}, -{86,-35,-7}, -{86,-35,-6}, -{86,-35,-5}, -{86,-35,-4}, -{86,-35,-3}, -{86,-35,-2}, -{86,-35,-1}, -{86,-35,0}, -{86,-35,1}, -{86,-35,2}, -{86,-35,3}, -{86,-35,4}, -{86,-35,5}, -{86,-35,6}, -{86,-35,7}, -{86,-35,8}, -{86,-35,9}, -{86,-35,10}, -{86,-35,11}, -{86,-35,12}, -{86,-35,13}, -{86,-35,14}, -{86,-35,15}, -{86,-35,16}, -{86,-35,17}, -{86,-35,18}, -{86,-35,19}, -{86,-35,20}, -{86,-35,21}, -{86,-35,22}, -{86,-35,23}, -{86,-35,24}, -{86,-35,25}, -{86,-35,26}, -{86,-35,27}, -{86,-35,28}, -{86,-35,29}, -{86,-35,30}, -{86,-35,31}, -{86,-35,32}, -{86,-35,33}, -{86,-35,34}, -{86,-35,35}, -{86,-35,36}, -{86,-35,37}, -{86,-35,38}, -{86,-35,39}, -{86,-35,40}, -{86,-35,41}, -{86,-35,42}, -{86,-35,43}, -{86,-35,44}, -{86,-35,45}, -{86,-35,46}, -{86,-35,47}, -{86,-35,48}, -{86,-35,49}, -{86,-35,50}, -{86,-35,51}, -{86,-35,52}, -{86,-35,53}, -{86,-35,54}, -{86,-35,55}, -{86,-35,56}, -{86,-35,57}, -{86,-35,58}, -{86,-35,59}, -{86,-35,60}, -{86,-35,61}, -{86,-35,62}, -{86,-35,63}, -{86,-35,64}, -{86,-35,65}, -{86,-35,66}, -{86,-35,67}, -{86,-35,68}, -{86,-35,69}, -{86,-35,70}, -{86,-35,71}, -{86,-35,72}, -{86,-35,73}, -{86,-35,74}, -{86,-35,75}, -{86,-35,76}, -{86,-35,77}, -{86,-35,78}, -{86,-35,79}, -{86,-35,80}, -{86,-35,81}, -{86,-35,82}, -{86,-35,83}, -{86,-35,84}, -{86,-34,-21}, -{86,-34,-20}, -{86,-34,-19}, -{86,-34,-18}, -{86,-34,-17}, -{86,-34,-16}, -{86,-34,-15}, -{86,-34,-14}, -{86,-34,-13}, -{86,-34,-12}, -{86,-34,-11}, -{86,-34,-10}, -{86,-34,-9}, -{86,-34,-8}, -{86,-34,-7}, -{86,-34,-6}, -{86,-34,-5}, -{86,-34,-4}, -{86,-34,-3}, -{86,-34,-2}, -{86,-34,-1}, -{86,-34,0}, -{86,-34,1}, -{86,-34,2}, -{86,-34,3}, -{86,-34,4}, -{86,-34,5}, -{86,-34,6}, -{86,-34,7}, -{86,-34,8}, -{86,-34,9}, -{86,-34,10}, -{86,-34,11}, -{86,-34,12}, -{86,-34,13}, -{86,-34,14}, -{86,-34,15}, -{86,-34,16}, -{86,-34,17}, -{86,-34,18}, -{86,-34,19}, -{86,-34,20}, -{86,-34,21}, -{86,-34,22}, -{86,-34,23}, -{86,-34,24}, -{86,-34,25}, -{86,-34,26}, -{86,-34,27}, -{86,-34,28}, -{86,-34,29}, -{86,-34,30}, -{86,-34,31}, -{86,-34,32}, -{86,-34,33}, -{86,-34,34}, -{86,-34,35}, -{86,-34,36}, -{86,-34,37}, -{86,-34,38}, -{86,-34,39}, -{86,-34,40}, -{86,-34,41}, -{86,-34,42}, -{86,-34,43}, -{86,-34,44}, -{86,-34,45}, -{86,-34,46}, -{86,-34,47}, -{86,-34,48}, -{86,-34,49}, -{86,-34,50}, -{86,-34,51}, -{86,-34,52}, -{86,-34,53}, -{86,-34,54}, -{86,-34,55}, -{86,-34,56}, -{86,-34,57}, -{86,-34,58}, -{86,-34,59}, -{86,-34,60}, -{86,-34,61}, -{86,-34,62}, -{86,-34,63}, -{86,-34,64}, -{86,-34,65}, -{86,-34,66}, -{86,-34,67}, -{86,-34,68}, -{86,-34,69}, -{86,-34,70}, -{86,-34,71}, -{86,-34,72}, -{86,-34,73}, -{86,-34,74}, -{86,-34,75}, -{86,-34,76}, -{86,-34,77}, -{86,-34,78}, -{86,-34,79}, -{86,-34,80}, -{86,-34,81}, -{86,-34,82}, -{86,-34,83}, -{86,-34,84}, -{86,-33,-21}, -{86,-33,-20}, -{86,-33,-19}, -{86,-33,-18}, -{86,-33,-17}, -{86,-33,-16}, -{86,-33,-15}, -{86,-33,-14}, -{86,-33,-13}, -{86,-33,-12}, -{86,-33,-11}, -{86,-33,-10}, -{86,-33,-9}, -{86,-33,-8}, -{86,-33,-7}, -{86,-33,-6}, -{86,-33,-5}, -{86,-33,-4}, -{86,-33,-3}, -{86,-33,-2}, -{86,-33,-1}, -{86,-33,0}, -{86,-33,1}, -{86,-33,2}, -{86,-33,3}, -{86,-33,4}, -{86,-33,5}, -{86,-33,6}, -{86,-33,7}, -{86,-33,8}, -{86,-33,9}, -{86,-33,10}, -{86,-33,11}, -{86,-33,12}, -{86,-33,13}, -{86,-33,14}, -{86,-33,15}, -{86,-33,16}, -{86,-33,17}, -{86,-33,18}, -{86,-33,19}, -{86,-33,20}, -{86,-33,21}, -{86,-33,22}, -{86,-33,23}, -{86,-33,24}, -{86,-33,25}, -{86,-33,26}, -{86,-33,27}, -{86,-33,28}, -{86,-33,29}, -{86,-33,30}, -{86,-33,31}, -{86,-33,32}, -{86,-33,33}, -{86,-33,34}, -{86,-33,35}, -{86,-33,36}, -{86,-33,37}, -{86,-33,38}, -{86,-33,39}, -{86,-33,40}, -{86,-33,41}, -{86,-33,42}, -{86,-33,43}, -{86,-33,44}, -{86,-33,45}, -{86,-33,46}, -{86,-33,47}, -{86,-33,48}, -{86,-33,49}, -{86,-33,50}, -{86,-33,51}, -{86,-33,52}, -{86,-33,53}, -{86,-33,54}, -{86,-33,55}, -{86,-33,56}, -{86,-33,57}, -{86,-33,58}, -{86,-33,59}, -{86,-33,60}, -{86,-33,61}, -{86,-33,62}, -{86,-33,63}, -{86,-33,64}, -{86,-33,65}, -{86,-33,66}, -{86,-33,67}, -{86,-33,68}, -{86,-33,69}, -{86,-33,70}, -{86,-33,71}, -{86,-33,72}, -{86,-33,73}, -{86,-33,74}, -{86,-33,75}, -{86,-33,76}, -{86,-33,77}, -{86,-33,78}, -{86,-33,79}, -{86,-33,80}, -{86,-33,81}, -{86,-33,82}, -{86,-33,83}, -{86,-33,84}, -{86,-32,-21}, -{86,-32,-20}, -{86,-32,-19}, -{86,-32,-18}, -{86,-32,-17}, -{86,-32,-16}, -{86,-32,-15}, -{86,-32,-14}, -{86,-32,-13}, -{86,-32,-12}, -{86,-32,-11}, -{86,-32,-10}, -{86,-32,-9}, -{86,-32,-8}, -{86,-32,-7}, -{86,-32,-6}, -{86,-32,-5}, -{86,-32,-4}, -{86,-32,-3}, -{86,-32,-2}, -{86,-32,-1}, -{86,-32,0}, -{86,-32,1}, -{86,-32,2}, -{86,-32,3}, -{86,-32,4}, -{86,-32,5}, -{86,-32,6}, -{86,-32,7}, -{86,-32,8}, -{86,-32,9}, -{86,-32,10}, -{86,-32,11}, -{86,-32,12}, -{86,-32,13}, -{86,-32,14}, -{86,-32,15}, -{86,-32,16}, -{86,-32,17}, -{86,-32,18}, -{86,-32,19}, -{86,-32,20}, -{86,-32,21}, -{86,-32,22}, -{86,-32,23}, -{86,-32,24}, -{86,-32,25}, -{86,-32,26}, -{86,-32,27}, -{86,-32,28}, -{86,-32,29}, -{86,-32,30}, -{86,-32,31}, -{86,-32,32}, -{86,-32,33}, -{86,-32,34}, -{86,-32,35}, -{86,-32,36}, -{86,-32,37}, -{86,-32,38}, -{86,-32,39}, -{86,-32,40}, -{86,-32,41}, -{86,-32,42}, -{86,-32,43}, -{86,-32,44}, -{86,-32,45}, -{86,-32,46}, -{86,-32,47}, -{86,-32,48}, -{86,-32,49}, -{86,-32,50}, -{86,-32,51}, -{86,-32,52}, -{86,-32,53}, -{86,-32,54}, -{86,-32,55}, -{86,-32,56}, -{86,-32,57}, -{86,-32,58}, -{86,-32,59}, -{86,-32,60}, -{86,-32,61}, -{86,-32,62}, -{86,-32,63}, -{86,-32,64}, -{86,-32,65}, -{86,-32,66}, -{86,-32,67}, -{86,-32,68}, -{86,-32,69}, -{86,-32,70}, -{86,-32,71}, -{86,-32,72}, -{86,-32,73}, -{86,-32,74}, -{86,-32,75}, -{86,-32,76}, -{86,-32,77}, -{86,-32,78}, -{86,-32,79}, -{86,-32,80}, -{86,-32,81}, -{86,-32,82}, -{86,-32,83}, -{86,-32,84}, -{86,-31,-21}, -{86,-31,-20}, -{86,-31,-19}, -{86,-31,-18}, -{86,-31,-17}, -{86,-31,-16}, -{86,-31,-15}, -{86,-31,-14}, -{86,-31,-13}, -{86,-31,-12}, -{86,-31,-11}, -{86,-31,-10}, -{86,-31,-9}, -{86,-31,-8}, -{86,-31,-7}, -{86,-31,-6}, -{86,-31,-5}, -{86,-31,-4}, -{86,-31,-3}, -{86,-31,-2}, -{86,-31,-1}, -{86,-31,0}, -{86,-31,1}, -{86,-31,2}, -{86,-31,3}, -{86,-31,4}, -{86,-31,5}, -{86,-31,6}, -{86,-31,7}, -{86,-31,8}, -{86,-31,9}, -{86,-31,10}, -{86,-31,11}, -{86,-31,12}, -{86,-31,13}, -{86,-31,14}, -{86,-31,15}, -{86,-31,16}, -{86,-31,17}, -{86,-31,18}, -{86,-31,19}, -{86,-31,20}, -{86,-31,21}, -{86,-31,22}, -{86,-31,23}, -{86,-31,24}, -{86,-31,25}, -{86,-31,26}, -{86,-31,27}, -{86,-31,28}, -{86,-31,29}, -{86,-31,30}, -{86,-31,31}, -{86,-31,32}, -{86,-31,33}, -{86,-31,34}, -{86,-31,35}, -{86,-31,36}, -{86,-31,37}, -{86,-31,38}, -{86,-31,39}, -{86,-31,40}, -{86,-31,41}, -{86,-31,42}, -{86,-31,43}, -{86,-31,44}, -{86,-31,45}, -{86,-31,46}, -{86,-31,47}, -{86,-31,48}, -{86,-31,49}, -{86,-31,50}, -{86,-31,51}, -{86,-31,52}, -{86,-31,53}, -{86,-31,54}, -{86,-31,55}, -{86,-31,56}, -{86,-31,57}, -{86,-31,58}, -{86,-31,59}, -{86,-31,60}, -{86,-31,61}, -{86,-31,62}, -{86,-31,63}, -{86,-31,64}, -{86,-31,65}, -{86,-31,66}, -{86,-31,67}, -{86,-31,68}, -{86,-31,69}, -{86,-31,70}, -{86,-31,71}, -{86,-31,72}, -{86,-31,73}, -{86,-31,74}, -{86,-31,75}, -{86,-31,76}, -{86,-31,77}, -{86,-31,78}, -{86,-31,79}, -{86,-31,80}, -{86,-31,81}, -{86,-31,82}, -{86,-31,83}, -{86,-31,84}, -{86,-30,-21}, -{86,-30,-20}, -{86,-30,-19}, -{86,-30,-18}, -{86,-30,-17}, -{86,-30,-16}, -{86,-30,-15}, -{86,-30,-14}, -{86,-30,-13}, -{86,-30,-12}, -{86,-30,-11}, -{86,-30,-10}, -{86,-30,-9}, -{86,-30,-8}, -{86,-30,-7}, -{86,-30,-6}, -{86,-30,-5}, -{86,-30,-4}, -{86,-30,-3}, -{86,-30,-2}, -{86,-30,-1}, -{86,-30,0}, -{86,-30,1}, -{86,-30,2}, -{86,-30,3}, -{86,-30,4}, -{86,-30,5}, -{86,-30,6}, -{86,-30,7}, -{86,-30,8}, -{86,-30,9}, -{86,-30,10}, -{86,-30,11}, -{86,-30,12}, -{86,-30,13}, -{86,-30,14}, -{86,-30,15}, -{86,-30,16}, -{86,-30,17}, -{86,-30,18}, -{86,-30,19}, -{86,-30,20}, -{86,-30,21}, -{86,-30,22}, -{86,-30,23}, -{86,-30,24}, -{86,-30,25}, -{86,-30,26}, -{86,-30,27}, -{86,-30,28}, -{86,-30,29}, -{86,-30,30}, -{86,-30,31}, -{86,-30,32}, -{86,-30,33}, -{86,-30,34}, -{86,-30,35}, -{86,-30,36}, -{86,-30,37}, -{86,-30,38}, -{86,-30,39}, -{86,-30,40}, -{86,-30,41}, -{86,-30,42}, -{86,-30,43}, -{86,-30,44}, -{86,-30,45}, -{86,-30,46}, -{86,-30,47}, -{86,-30,48}, -{86,-30,49}, -{86,-30,50}, -{86,-30,51}, -{86,-30,52}, -{86,-30,53}, -{86,-30,54}, -{86,-30,55}, -{86,-30,56}, -{86,-30,57}, -{86,-30,58}, -{86,-30,59}, -{86,-30,60}, -{86,-30,61}, -{86,-30,62}, -{86,-30,63}, -{86,-30,64}, -{86,-30,65}, -{86,-30,66}, -{86,-30,67}, -{86,-30,68}, -{86,-30,69}, -{86,-30,70}, -{86,-30,71}, -{86,-30,72}, -{86,-30,73}, -{86,-30,74}, -{86,-30,75}, -{86,-30,76}, -{86,-30,77}, -{86,-30,78}, -{86,-30,79}, -{86,-30,80}, -{86,-30,81}, -{86,-30,82}, -{86,-30,83}, -{86,-30,84}, -{86,-29,-21}, -{86,-29,-20}, -{86,-29,-19}, -{86,-29,-18}, -{86,-29,-17}, -{86,-29,-16}, -{86,-29,-15}, -{86,-29,-14}, -{86,-29,-13}, -{86,-29,-12}, -{86,-29,-11}, -{86,-29,-10}, -{86,-29,-9}, -{86,-29,-8}, -{86,-29,-7}, -{86,-29,-6}, -{86,-29,-5}, -{86,-29,-4}, -{86,-29,-3}, -{86,-29,-2}, -{86,-29,-1}, -{86,-29,0}, -{86,-29,1}, -{86,-29,2}, -{86,-29,3}, -{86,-29,4}, -{86,-29,5}, -{86,-29,6}, -{86,-29,7}, -{86,-29,8}, -{86,-29,9}, -{86,-29,10}, -{86,-29,11}, -{86,-29,12}, -{86,-29,13}, -{86,-29,14}, -{86,-29,15}, -{86,-29,16}, -{86,-29,17}, -{86,-29,18}, -{86,-29,19}, -{86,-29,20}, -{86,-29,21}, -{86,-29,22}, -{86,-29,23}, -{86,-29,24}, -{86,-29,25}, -{86,-29,26}, -{86,-29,27}, -{86,-29,28}, -{86,-29,29}, -{86,-29,30}, -{86,-29,31}, -{86,-29,32}, -{86,-29,33}, -{86,-29,34}, -{86,-29,35}, -{86,-29,36}, -{86,-29,37}, -{86,-29,38}, -{86,-29,39}, -{86,-29,40}, -{86,-29,41}, -{86,-29,42}, -{86,-29,43}, -{86,-29,44}, -{86,-29,45}, -{86,-29,46}, -{86,-29,47}, -{86,-29,48}, -{86,-29,49}, -{86,-29,50}, -{86,-29,51}, -{86,-29,52}, -{86,-29,53}, -{86,-29,54}, -{86,-29,55}, -{86,-29,56}, -{86,-29,57}, -{86,-29,58}, -{86,-29,59}, -{86,-29,60}, -{86,-29,61}, -{86,-29,62}, -{86,-29,63}, -{86,-29,64}, -{86,-29,65}, -{86,-29,66}, -{86,-29,67}, -{86,-29,68}, -{86,-29,69}, -{86,-29,70}, -{86,-29,71}, -{86,-29,72}, -{86,-29,73}, -{86,-29,74}, -{86,-29,75}, -{86,-29,76}, -{86,-29,77}, -{86,-29,78}, -{86,-29,79}, -{86,-29,80}, -{86,-29,81}, -{86,-29,82}, -{86,-29,83}, -{86,-29,84}, -{86,-28,-21}, -{86,-28,-20}, -{86,-28,-19}, -{86,-28,-18}, -{86,-28,-17}, -{86,-28,-16}, -{86,-28,-15}, -{86,-28,-14}, -{86,-28,-13}, -{86,-28,-12}, -{86,-28,-11}, -{86,-28,-10}, -{86,-28,-9}, -{86,-28,-8}, -{86,-28,-7}, -{86,-28,-6}, -{86,-28,-5}, -{86,-28,-4}, -{86,-28,-3}, -{86,-28,-2}, -{86,-28,-1}, -{86,-28,0}, -{86,-28,1}, -{86,-28,2}, -{86,-28,3}, -{86,-28,4}, -{86,-28,5}, -{86,-28,6}, -{86,-28,7}, -{86,-28,8}, -{86,-28,9}, -{86,-28,10}, -{86,-28,11}, -{86,-28,12}, -{86,-28,13}, -{86,-28,14}, -{86,-28,15}, -{86,-28,16}, -{86,-28,17}, -{86,-28,18}, -{86,-28,19}, -{86,-28,20}, -{86,-28,21}, -{86,-28,22}, -{86,-28,23}, -{86,-28,24}, -{86,-28,25}, -{86,-28,26}, -{86,-28,27}, -{86,-28,28}, -{86,-28,29}, -{86,-28,30}, -{86,-28,31}, -{86,-28,32}, -{86,-28,33}, -{86,-28,34}, -{86,-28,35}, -{86,-28,36}, -{86,-28,37}, -{86,-28,38}, -{86,-28,39}, -{86,-28,40}, -{86,-28,41}, -{86,-28,42}, -{86,-28,43}, -{86,-28,44}, -{86,-28,45}, -{86,-28,46}, -{86,-28,47}, -{86,-28,48}, -{86,-28,49}, -{86,-28,50}, -{86,-28,51}, -{86,-28,52}, -{86,-28,53}, -{86,-28,54}, -{86,-28,55}, -{86,-28,56}, -{86,-28,57}, -{86,-28,58}, -{86,-28,59}, -{86,-28,60}, -{86,-28,61}, -{86,-28,62}, -{86,-28,63}, -{86,-28,64}, -{86,-28,65}, -{86,-28,66}, -{86,-28,67}, -{86,-28,68}, -{86,-28,69}, -{86,-28,70}, -{86,-28,71}, -{86,-28,72}, -{86,-28,73}, -{86,-28,74}, -{86,-28,75}, -{86,-28,76}, -{86,-28,77}, -{86,-28,78}, -{86,-28,79}, -{86,-28,80}, -{86,-28,81}, -{86,-28,82}, -{86,-28,83}, -{86,-28,84}, -{86,-27,-21}, -{86,-27,-20}, -{86,-27,-19}, -{86,-27,-18}, -{86,-27,-17}, -{86,-27,-16}, -{86,-27,-15}, -{86,-27,-14}, -{86,-27,-13}, -{86,-27,-12}, -{86,-27,-11}, -{86,-27,-10}, -{86,-27,-9}, -{86,-27,-8}, -{86,-27,-7}, -{86,-27,-6}, -{86,-27,-5}, -{86,-27,-4}, -{86,-27,-3}, -{86,-27,-2}, -{86,-27,-1}, -{86,-27,0}, -{86,-27,1}, -{86,-27,2}, -{86,-27,3}, -{86,-27,4}, -{86,-27,5}, -{86,-27,6}, -{86,-27,7}, -{86,-27,8}, -{86,-27,9}, -{86,-27,10}, -{86,-27,11}, -{86,-27,12}, -{86,-27,13}, -{86,-27,14}, -{86,-27,15}, -{86,-27,16}, -{86,-27,17}, -{86,-27,18}, -{86,-27,19}, -{86,-27,20}, -{86,-27,21}, -{86,-27,22}, -{86,-27,23}, -{86,-27,24}, -{86,-27,25}, -{86,-27,26}, -{86,-27,27}, -{86,-27,28}, -{86,-27,29}, -{86,-27,30}, -{86,-27,31}, -{86,-27,32}, -{86,-27,33}, -{86,-27,34}, -{86,-27,35}, -{86,-27,36}, -{86,-27,37}, -{86,-27,38}, -{86,-27,39}, -{86,-27,40}, -{86,-27,41}, -{86,-27,42}, -{86,-27,43}, -{86,-27,44}, -{86,-27,45}, -{86,-27,46}, -{86,-27,47}, -{86,-27,48}, -{86,-27,49}, -{86,-27,50}, -{86,-27,51}, -{86,-27,52}, -{86,-27,53}, -{86,-27,54}, -{86,-27,55}, -{86,-27,56}, -{86,-27,57}, -{86,-27,58}, -{86,-27,59}, -{86,-27,60}, -{86,-27,61}, -{86,-27,62}, -{86,-27,63}, -{86,-27,64}, -{86,-27,65}, -{86,-27,66}, -{86,-27,67}, -{86,-27,68}, -{86,-27,69}, -{86,-27,70}, -{86,-27,71}, -{86,-27,72}, -{86,-27,73}, -{86,-27,74}, -{86,-27,75}, -{86,-27,76}, -{86,-27,77}, -{86,-27,78}, -{86,-27,79}, -{86,-27,80}, -{86,-27,81}, -{86,-27,82}, -{86,-27,83}, -{86,-27,84}, -{86,-26,-21}, -{86,-26,-20}, -{86,-26,-19}, -{86,-26,-18}, -{86,-26,-17}, -{86,-26,-16}, -{86,-26,-15}, -{86,-26,-14}, -{86,-26,-13}, -{86,-26,-12}, -{86,-26,-11}, -{86,-26,-10}, -{86,-26,-9}, -{86,-26,-8}, -{86,-26,-7}, -{86,-26,-6}, -{86,-26,-5}, -{86,-26,-4}, -{86,-26,-3}, -{86,-26,-2}, -{86,-26,-1}, -{86,-26,0}, -{86,-26,1}, -{86,-26,2}, -{86,-26,3}, -{86,-26,4}, -{86,-26,5}, -{86,-26,6}, -{86,-26,7}, -{86,-26,8}, -{86,-26,9}, -{86,-26,10}, -{86,-26,11}, -{86,-26,12}, -{86,-26,13}, -{86,-26,14}, -{86,-26,15}, -{86,-26,16}, -{86,-26,17}, -{86,-26,18}, -{86,-26,19}, -{86,-26,20}, -{86,-26,21}, -{86,-26,22}, -{86,-26,23}, -{86,-26,24}, -{86,-26,25}, -{86,-26,26}, -{86,-26,27}, -{86,-26,28}, -{86,-26,29}, -{86,-26,30}, -{86,-26,31}, -{86,-26,32}, -{86,-26,33}, -{86,-26,34}, -{86,-26,35}, -{86,-26,36}, -{86,-26,37}, -{86,-26,38}, -{86,-26,39}, -{86,-26,40}, -{86,-26,41}, -{86,-26,42}, -{86,-26,43}, -{86,-26,44}, -{86,-26,45}, -{86,-26,46}, -{86,-26,47}, -{86,-26,48}, -{86,-26,49}, -{86,-26,50}, -{86,-26,51}, -{86,-26,52}, -{86,-26,53}, -{86,-26,54}, -{86,-26,55}, -{86,-26,56}, -{86,-26,57}, -{86,-26,58}, -{86,-26,59}, -{86,-26,60}, -{86,-26,61}, -{86,-26,62}, -{86,-26,63}, -{86,-26,64}, -{86,-26,65}, -{86,-26,66}, -{86,-26,67}, -{86,-26,68}, -{86,-26,69}, -{86,-26,70}, -{86,-26,71}, -{86,-26,72}, -{86,-26,73}, -{86,-26,74}, -{86,-26,75}, -{86,-26,76}, -{86,-26,77}, -{86,-26,78}, -{86,-26,79}, -{86,-26,80}, -{86,-26,81}, -{86,-26,82}, -{86,-26,83}, -{86,-26,84}, -{86,-25,-21}, -{86,-25,-20}, -{86,-25,-19}, -{86,-25,-18}, -{86,-25,-17}, -{86,-25,-16}, -{86,-25,-15}, -{86,-25,-14}, -{86,-25,-13}, -{86,-25,-12}, -{86,-25,-11}, -{86,-25,-10}, -{86,-25,-9}, -{86,-25,-8}, -{86,-25,-7}, -{86,-25,-6}, -{86,-25,-5}, -{86,-25,-4}, -{86,-25,-3}, -{86,-25,-2}, -{86,-25,-1}, -{86,-25,0}, -{86,-25,1}, -{86,-25,2}, -{86,-25,3}, -{86,-25,4}, -{86,-25,5}, -{86,-25,6}, -{86,-25,7}, -{86,-25,8}, -{86,-25,9}, -{86,-25,10}, -{86,-25,11}, -{86,-25,12}, -{86,-25,13}, -{86,-25,14}, -{86,-25,15}, -{86,-25,16}, -{86,-25,17}, -{86,-25,18}, -{86,-25,19}, -{86,-25,20}, -{86,-25,21}, -{86,-25,22}, -{86,-25,23}, -{86,-25,24}, -{86,-25,25}, -{86,-25,26}, -{86,-25,27}, -{86,-25,28}, -{86,-25,29}, -{86,-25,30}, -{86,-25,31}, -{86,-25,32}, -{86,-25,33}, -{86,-25,34}, -{86,-25,35}, -{86,-25,36}, -{86,-25,37}, -{86,-25,38}, -{86,-25,39}, -{86,-25,40}, -{86,-25,41}, -{86,-25,42}, -{86,-25,43}, -{86,-25,44}, -{86,-25,45}, -{86,-25,46}, -{86,-25,47}, -{86,-25,48}, -{86,-25,49}, -{86,-25,50}, -{86,-25,51}, -{86,-25,52}, -{86,-25,53}, -{86,-25,54}, -{86,-25,55}, -{86,-25,56}, -{86,-25,57}, -{86,-25,58}, -{86,-25,59}, -{86,-25,60}, -{86,-25,61}, -{86,-25,62}, -{86,-25,63}, -{86,-25,64}, -{86,-25,65}, -{86,-25,66}, -{86,-25,67}, -{86,-25,68}, -{86,-25,69}, -{86,-25,70}, -{86,-25,71}, -{86,-25,72}, -{86,-25,73}, -{86,-25,74}, -{86,-25,75}, -{86,-25,76}, -{86,-25,77}, -{86,-25,78}, -{86,-25,79}, -{86,-25,80}, -{86,-25,81}, -{86,-25,82}, -{86,-25,83}, -{86,-25,84}, -{86,-25,85}, -{86,-24,-21}, -{86,-24,-20}, -{86,-24,-19}, -{86,-24,-18}, -{86,-24,-17}, -{86,-24,-16}, -{86,-24,-15}, -{86,-24,-14}, -{86,-24,-13}, -{86,-24,-12}, -{86,-24,-11}, -{86,-24,-10}, -{86,-24,-9}, -{86,-24,-8}, -{86,-24,-7}, -{86,-24,-6}, -{86,-24,-5}, -{86,-24,-4}, -{86,-24,-3}, -{86,-24,-2}, -{86,-24,-1}, -{86,-24,0}, -{86,-24,1}, -{86,-24,2}, -{86,-24,3}, -{86,-24,4}, -{86,-24,5}, -{86,-24,6}, -{86,-24,7}, -{86,-24,8}, -{86,-24,9}, -{86,-24,10}, -{86,-24,11}, -{86,-24,12}, -{86,-24,13}, -{86,-24,14}, -{86,-24,15}, -{86,-24,16}, -{86,-24,17}, -{86,-24,18}, -{86,-24,19}, -{86,-24,20}, -{86,-24,21}, -{86,-24,22}, -{86,-24,23}, -{86,-24,24}, -{86,-24,25}, -{86,-24,26}, -{86,-24,27}, -{86,-24,28}, -{86,-24,29}, -{86,-24,30}, -{86,-24,31}, -{86,-24,32}, -{86,-24,33}, -{86,-24,34}, -{86,-24,35}, -{86,-24,36}, -{86,-24,37}, -{86,-24,38}, -{86,-24,39}, -{86,-24,40}, -{86,-24,41}, -{86,-24,42}, -{86,-24,43}, -{86,-24,44}, -{86,-24,45}, -{86,-24,46}, -{86,-24,47}, -{86,-24,48}, -{86,-24,49}, -{86,-24,50}, -{86,-24,51}, -{86,-24,52}, -{86,-24,53}, -{86,-24,54}, -{86,-24,55}, -{86,-24,56}, -{86,-24,57}, -{86,-24,58}, -{86,-24,59}, -{86,-24,60}, -{86,-24,61}, -{86,-24,62}, -{86,-24,63}, -{86,-24,64}, -{86,-24,65}, -{86,-24,66}, -{86,-24,67}, -{86,-24,68}, -{86,-24,69}, -{86,-24,70}, -{86,-24,71}, -{86,-24,72}, -{86,-24,73}, -{86,-24,74}, -{86,-24,75}, -{86,-24,76}, -{86,-24,77}, -{86,-24,78}, -{86,-24,79}, -{86,-24,80}, -{86,-24,81}, -{86,-24,82}, -{86,-24,83}, -{86,-24,84}, -{86,-24,85}, -{86,-23,-21}, -{86,-23,-20}, -{86,-23,-19}, -{86,-23,-18}, -{86,-23,-17}, -{86,-23,-16}, -{86,-23,-15}, -{86,-23,-14}, -{86,-23,-13}, -{86,-23,-12}, -{86,-23,-11}, -{86,-23,-10}, -{86,-23,-9}, -{86,-23,-8}, -{86,-23,-7}, -{86,-23,-6}, -{86,-23,-5}, -{86,-23,-4}, -{86,-23,-3}, -{86,-23,-2}, -{86,-23,-1}, -{86,-23,0}, -{86,-23,1}, -{86,-23,2}, -{86,-23,3}, -{86,-23,4}, -{86,-23,5}, -{86,-23,6}, -{86,-23,7}, -{86,-23,8}, -{86,-23,9}, -{86,-23,10}, -{86,-23,11}, -{86,-23,12}, -{86,-23,13}, -{86,-23,14}, -{86,-23,15}, -{86,-23,16}, -{86,-23,17}, -{86,-23,18}, -{86,-23,19}, -{86,-23,20}, -{86,-23,21}, -{86,-23,22}, -{86,-23,23}, -{86,-23,24}, -{86,-23,25}, -{86,-23,26}, -{86,-23,27}, -{86,-23,28}, -{86,-23,29}, -{86,-23,30}, -{86,-23,31}, -{86,-23,32}, -{86,-23,33}, -{86,-23,34}, -{86,-23,35}, -{86,-23,36}, -{86,-23,37}, -{86,-23,38}, -{86,-23,39}, -{86,-23,40}, -{86,-23,41}, -{86,-23,42}, -{86,-23,43}, -{86,-23,44}, -{86,-23,45}, -{86,-23,46}, -{86,-23,47}, -{86,-23,48}, -{86,-23,49}, -{86,-23,50}, -{86,-23,51}, -{86,-23,52}, -{86,-23,53}, -{86,-23,54}, -{86,-23,55}, -{86,-23,56}, -{86,-23,57}, -{86,-23,58}, -{86,-23,59}, -{86,-23,60}, -{86,-23,61}, -{86,-23,62}, -{86,-23,63}, -{86,-23,64}, -{86,-23,65}, -{86,-23,66}, -{86,-23,67}, -{86,-23,68}, -{86,-23,69}, -{86,-23,70}, -{86,-23,71}, -{86,-23,72}, -{86,-23,73}, -{86,-23,74}, -{86,-23,75}, -{86,-23,76}, -{86,-23,77}, -{86,-23,78}, -{86,-23,79}, -{86,-23,80}, -{86,-23,81}, -{86,-23,82}, -{86,-23,83}, -{86,-23,84}, -{86,-23,85}, -{86,-22,-21}, -{86,-22,-20}, -{86,-22,-19}, -{86,-22,-18}, -{86,-22,-17}, -{86,-22,-16}, -{86,-22,-15}, -{86,-22,-14}, -{86,-22,-13}, -{86,-22,-12}, -{86,-22,-11}, -{86,-22,-10}, -{86,-22,-9}, -{86,-22,-8}, -{86,-22,-7}, -{86,-22,-6}, -{86,-22,-5}, -{86,-22,-4}, -{86,-22,-3}, -{86,-22,-2}, -{86,-22,-1}, -{86,-22,0}, -{86,-22,1}, -{86,-22,2}, -{86,-22,3}, -{86,-22,4}, -{86,-22,5}, -{86,-22,6}, -{86,-22,7}, -{86,-22,8}, -{86,-22,9}, -{86,-22,10}, -{86,-22,11}, -{86,-22,12}, -{86,-22,13}, -{86,-22,14}, -{86,-22,15}, -{86,-22,16}, -{86,-22,17}, -{86,-22,18}, -{86,-22,19}, -{86,-22,20}, -{86,-22,21}, -{86,-22,22}, -{86,-22,23}, -{86,-22,24}, -{86,-22,25}, -{86,-22,26}, -{86,-22,27}, -{86,-22,28}, -{86,-22,29}, -{86,-22,30}, -{86,-22,31}, -{86,-22,32}, -{86,-22,33}, -{86,-22,34}, -{86,-22,35}, -{86,-22,36}, -{86,-22,37}, -{86,-22,38}, -{86,-22,39}, -{86,-22,40}, -{86,-22,41}, -{86,-22,42}, -{86,-22,43}, -{86,-22,44}, -{86,-22,45}, -{86,-22,46}, -{86,-22,47}, -{86,-22,48}, -{86,-22,49}, -{86,-22,50}, -{86,-22,51}, -{86,-22,52}, -{86,-22,53}, -{86,-22,54}, -{86,-22,55}, -{86,-22,56}, -{86,-22,57}, -{86,-22,58}, -{86,-22,59}, -{86,-22,60}, -{86,-22,61}, -{86,-22,62}, -{86,-22,63}, -{86,-22,64}, -{86,-22,65}, -{86,-22,66}, -{86,-22,67}, -{86,-22,68}, -{86,-22,69}, -{86,-22,70}, -{86,-22,71}, -{86,-22,72}, -{86,-22,73}, -{86,-22,74}, -{86,-22,75}, -{86,-22,76}, -{86,-22,77}, -{86,-22,78}, -{86,-22,79}, -{86,-22,80}, -{86,-22,81}, -{86,-22,82}, -{86,-22,83}, -{86,-22,84}, -{86,-22,85}, -{86,-21,-21}, -{86,-21,-20}, -{86,-21,-19}, -{86,-21,-18}, -{86,-21,-17}, -{86,-21,-16}, -{86,-21,-15}, -{86,-21,-14}, -{86,-21,-13}, -{86,-21,-12}, -{86,-21,-11}, -{86,-21,-10}, -{86,-21,-9}, -{86,-21,-8}, -{86,-21,-7}, -{86,-21,-6}, -{86,-21,-5}, -{86,-21,-4}, -{86,-21,-3}, -{86,-21,-2}, -{86,-21,-1}, -{86,-21,0}, -{86,-21,1}, -{86,-21,2}, -{86,-21,3}, -{86,-21,4}, -{86,-21,5}, -{86,-21,6}, -{86,-21,7}, -{86,-21,8}, -{86,-21,9}, -{86,-21,10}, -{86,-21,11}, -{86,-21,12}, -{86,-21,13}, -{86,-21,14}, -{86,-21,15}, -{86,-21,16}, -{86,-21,17}, -{86,-21,18}, -{86,-21,19}, -{86,-21,20}, -{86,-21,21}, -{86,-21,22}, -{86,-21,23}, -{86,-21,24}, -{86,-21,25}, -{86,-21,26}, -{86,-21,27}, -{86,-21,28}, -{86,-21,29}, -{86,-21,30}, -{86,-21,31}, -{86,-21,32}, -{86,-21,33}, -{86,-21,34}, -{86,-21,35}, -{86,-21,36}, -{86,-21,37}, -{86,-21,38}, -{86,-21,39}, -{86,-21,40}, -{86,-21,41}, -{86,-21,42}, -{86,-21,43}, -{86,-21,44}, -{86,-21,45}, -{86,-21,46}, -{86,-21,47}, -{86,-21,48}, -{86,-21,49}, -{86,-21,50}, -{86,-21,51}, -{86,-21,52}, -{86,-21,53}, -{86,-21,54}, -{86,-21,55}, -{86,-21,56}, -{86,-21,57}, -{86,-21,58}, -{86,-21,59}, -{86,-21,60}, -{86,-21,61}, -{86,-21,62}, -{86,-21,63}, -{86,-21,64}, -{86,-21,65}, -{86,-21,66}, -{86,-21,67}, -{86,-21,68}, -{86,-21,69}, -{86,-21,70}, -{86,-21,71}, -{86,-21,72}, -{86,-21,73}, -{86,-21,74}, -{86,-21,75}, -{86,-21,76}, -{86,-21,77}, -{86,-21,78}, -{86,-21,79}, -{86,-21,80}, -{86,-21,81}, -{86,-21,82}, -{86,-21,83}, -{86,-21,84}, -{86,-21,85}, -{86,-20,-21}, -{86,-20,-20}, -{86,-20,-19}, -{86,-20,-18}, -{86,-20,-17}, -{86,-20,-16}, -{86,-20,-15}, -{86,-20,-14}, -{86,-20,-13}, -{86,-20,-12}, -{86,-20,-11}, -{86,-20,-10}, -{86,-20,-9}, -{86,-20,-8}, -{86,-20,-7}, -{86,-20,-6}, -{86,-20,-5}, -{86,-20,-4}, -{86,-20,-3}, -{86,-20,-2}, -{86,-20,-1}, -{86,-20,0}, -{86,-20,1}, -{86,-20,2}, -{86,-20,3}, -{86,-20,4}, -{86,-20,5}, -{86,-20,6}, -{86,-20,7}, -{86,-20,8}, -{86,-20,9}, -{86,-20,10}, -{86,-20,11}, -{86,-20,12}, -{86,-20,13}, -{86,-20,14}, -{86,-20,15}, -{86,-20,16}, -{86,-20,17}, -{86,-20,18}, -{86,-20,19}, -{86,-20,20}, -{86,-20,21}, -{86,-20,22}, -{86,-20,23}, -{86,-20,24}, -{86,-20,25}, -{86,-20,26}, -{86,-20,27}, -{86,-20,28}, -{86,-20,29}, -{86,-20,30}, -{86,-20,31}, -{86,-20,32}, -{86,-20,33}, -{86,-20,34}, -{86,-20,35}, -{86,-20,36}, -{86,-20,37}, -{86,-20,38}, -{86,-20,39}, -{86,-20,40}, -{86,-20,41}, -{86,-20,42}, -{86,-20,43}, -{86,-20,44}, -{86,-20,45}, -{86,-20,46}, -{86,-20,47}, -{86,-20,48}, -{86,-20,49}, -{86,-20,50}, -{86,-20,51}, -{86,-20,52}, -{86,-20,53}, -{86,-20,54}, -{86,-20,55}, -{86,-20,56}, -{86,-20,57}, -{86,-20,58}, -{86,-20,59}, -{86,-20,60}, -{86,-20,61}, -{86,-20,62}, -{86,-20,63}, -{86,-20,64}, -{86,-20,65}, -{86,-20,66}, -{86,-20,67}, -{86,-20,68}, -{86,-20,69}, -{86,-20,70}, -{86,-20,71}, -{86,-20,72}, -{86,-20,73}, -{86,-20,74}, -{86,-20,75}, -{86,-20,76}, -{86,-20,77}, -{86,-20,78}, -{86,-20,79}, -{86,-20,80}, -{86,-20,81}, -{86,-20,82}, -{86,-20,83}, -{86,-20,84}, -{86,-20,85}, -{86,-19,-21}, -{86,-19,-20}, -{86,-19,-19}, -{86,-19,-18}, -{86,-19,-17}, -{86,-19,-16}, -{86,-19,-15}, -{86,-19,-14}, -{86,-19,-13}, -{86,-19,-12}, -{86,-19,-11}, -{86,-19,-10}, -{86,-19,-9}, -{86,-19,-8}, -{86,-19,-7}, -{86,-19,-6}, -{86,-19,-5}, -{86,-19,-4}, -{86,-19,-3}, -{86,-19,-2}, -{86,-19,-1}, -{86,-19,0}, -{86,-19,1}, -{86,-19,2}, -{86,-19,3}, -{86,-19,4}, -{86,-19,5}, -{86,-19,6}, -{86,-19,7}, -{86,-19,8}, -{86,-19,9}, -{86,-19,10}, -{86,-19,11}, -{86,-19,12}, -{86,-19,13}, -{86,-19,14}, -{86,-19,15}, -{86,-19,16}, -{86,-19,17}, -{86,-19,18}, -{86,-19,19}, -{86,-19,20}, -{86,-19,21}, -{86,-19,22}, -{86,-19,23}, -{86,-19,24}, -{86,-19,25}, -{86,-19,26}, -{86,-19,27}, -{86,-19,28}, -{86,-19,29}, -{86,-19,30}, -{86,-19,31}, -{86,-19,32}, -{86,-19,33}, -{86,-19,34}, -{86,-19,35}, -{86,-19,36}, -{86,-19,37}, -{86,-19,38}, -{86,-19,39}, -{86,-19,40}, -{86,-19,41}, -{86,-19,42}, -{86,-19,43}, -{86,-19,44}, -{86,-19,45}, -{86,-19,46}, -{86,-19,47}, -{86,-19,48}, -{86,-19,49}, -{86,-19,50}, -{86,-19,51}, -{86,-19,52}, -{86,-19,53}, -{86,-19,54}, -{86,-19,55}, -{86,-19,56}, -{86,-19,57}, -{86,-19,58}, -{86,-19,59}, -{86,-19,60}, -{86,-19,61}, -{86,-19,62}, -{86,-19,63}, -{86,-19,64}, -{86,-19,65}, -{86,-19,66}, -{86,-19,67}, -{86,-19,68}, -{86,-19,69}, -{86,-19,70}, -{86,-19,71}, -{86,-19,72}, -{86,-19,73}, -{86,-19,74}, -{86,-19,75}, -{86,-19,76}, -{86,-19,77}, -{86,-19,78}, -{86,-19,79}, -{86,-19,80}, -{86,-19,81}, -{86,-19,82}, -{86,-19,83}, -{86,-19,84}, -{86,-19,85}, -{86,-18,-21}, -{86,-18,-20}, -{86,-18,-19}, -{86,-18,-18}, -{86,-18,-17}, -{86,-18,-16}, -{86,-18,-15}, -{86,-18,-14}, -{86,-18,-13}, -{86,-18,-12}, -{86,-18,-11}, -{86,-18,-10}, -{86,-18,-9}, -{86,-18,-8}, -{86,-18,-7}, -{86,-18,-6}, -{86,-18,-5}, -{86,-18,-4}, -{86,-18,-3}, -{86,-18,-2}, -{86,-18,-1}, -{86,-18,0}, -{86,-18,1}, -{86,-18,2}, -{86,-18,3}, -{86,-18,4}, -{86,-18,5}, -{86,-18,6}, -{86,-18,7}, -{86,-18,8}, -{86,-18,9}, -{86,-18,10}, -{86,-18,11}, -{86,-18,12}, -{86,-18,13}, -{86,-18,14}, -{86,-18,15}, -{86,-18,16}, -{86,-18,17}, -{86,-18,18}, -{86,-18,19}, -{86,-18,20}, -{86,-18,21}, -{86,-18,22}, -{86,-18,23}, -{86,-18,24}, -{86,-18,25}, -{86,-18,26}, -{86,-18,27}, -{86,-18,28}, -{86,-18,29}, -{86,-18,30}, -{86,-18,31}, -{86,-18,32}, -{86,-18,33}, -{86,-18,34}, -{86,-18,35}, -{86,-18,36}, -{86,-18,37}, -{86,-18,38}, -{86,-18,39}, -{86,-18,40}, -{86,-18,41}, -{86,-18,42}, -{86,-18,43}, -{86,-18,44}, -{86,-18,45}, -{86,-18,46}, -{86,-18,47}, -{86,-18,48}, -{86,-18,49}, -{86,-18,50}, -{86,-18,51}, -{86,-18,52}, -{86,-18,53}, -{86,-18,54}, -{86,-18,55}, -{86,-18,56}, -{86,-18,57}, -{86,-18,58}, -{86,-18,59}, -{86,-18,60}, -{86,-18,61}, -{86,-18,62}, -{86,-18,63}, -{86,-18,64}, -{86,-18,65}, -{86,-18,66}, -{86,-18,67}, -{86,-18,68}, -{86,-18,69}, -{86,-18,70}, -{86,-18,71}, -{86,-18,72}, -{86,-18,73}, -{86,-18,74}, -{86,-18,75}, -{86,-18,76}, -{86,-18,77}, -{86,-18,78}, -{86,-18,79}, -{86,-18,80}, -{86,-18,81}, -{86,-18,82}, -{86,-18,83}, -{86,-18,84}, -{86,-18,85}, -{86,-17,-21}, -{86,-17,-20}, -{86,-17,-19}, -{86,-17,-18}, -{86,-17,-17}, -{86,-17,-16}, -{86,-17,-15}, -{86,-17,-14}, -{86,-17,-13}, -{86,-17,-12}, -{86,-17,-11}, -{86,-17,-10}, -{86,-17,-9}, -{86,-17,-8}, -{86,-17,-7}, -{86,-17,-6}, -{86,-17,-5}, -{86,-17,-4}, -{86,-17,-3}, -{86,-17,-2}, -{86,-17,-1}, -{86,-17,0}, -{86,-17,1}, -{86,-17,2}, -{86,-17,3}, -{86,-17,4}, -{86,-17,5}, -{86,-17,6}, -{86,-17,7}, -{86,-17,8}, -{86,-17,9}, -{86,-17,10}, -{86,-17,11}, -{86,-17,12}, -{86,-17,13}, -{86,-17,14}, -{86,-17,15}, -{86,-17,16}, -{86,-17,17}, -{86,-17,18}, -{86,-17,19}, -{86,-17,20}, -{86,-17,21}, -{86,-17,22}, -{86,-17,23}, -{86,-17,24}, -{86,-17,25}, -{86,-17,26}, -{86,-17,27}, -{86,-17,28}, -{86,-17,29}, -{86,-17,30}, -{86,-17,31}, -{86,-17,32}, -{86,-17,33}, -{86,-17,34}, -{86,-17,35}, -{86,-17,36}, -{86,-17,37}, -{86,-17,38}, -{86,-17,39}, -{86,-17,40}, -{86,-17,41}, -{86,-17,42}, -{86,-17,43}, -{86,-17,44}, -{86,-17,45}, -{86,-17,46}, -{86,-17,47}, -{86,-17,48}, -{86,-17,49}, -{86,-17,50}, -{86,-17,51}, -{86,-17,52}, -{86,-17,53}, -{86,-17,54}, -{86,-17,55}, -{86,-17,56}, -{86,-17,57}, -{86,-17,58}, -{86,-17,59}, -{86,-17,60}, -{86,-17,61}, -{86,-17,62}, -{86,-17,63}, -{86,-17,64}, -{86,-17,65}, -{86,-17,66}, -{86,-17,67}, -{86,-17,68}, -{86,-17,69}, -{86,-17,70}, -{86,-17,71}, -{86,-17,72}, -{86,-17,73}, -{86,-17,74}, -{86,-17,75}, -{86,-17,76}, -{86,-17,77}, -{86,-17,78}, -{86,-17,79}, -{86,-17,80}, -{86,-17,81}, -{86,-17,82}, -{86,-17,83}, -{86,-17,84}, -{86,-17,85}, -{86,-16,-21}, -{86,-16,-20}, -{86,-16,-19}, -{86,-16,-18}, -{86,-16,-17}, -{86,-16,-16}, -{86,-16,-15}, -{86,-16,-14}, -{86,-16,-13}, -{86,-16,-12}, -{86,-16,-11}, -{86,-16,-10}, -{86,-16,-9}, -{86,-16,-8}, -{86,-16,-7}, -{86,-16,-6}, -{86,-16,-5}, -{86,-16,-4}, -{86,-16,-3}, -{86,-16,-2}, -{86,-16,-1}, -{86,-16,0}, -{86,-16,1}, -{86,-16,2}, -{86,-16,3}, -{86,-16,4}, -{86,-16,5}, -{86,-16,6}, -{86,-16,7}, -{86,-16,8}, -{86,-16,9}, -{86,-16,10}, -{86,-16,11}, -{86,-16,12}, -{86,-16,13}, -{86,-16,14}, -{86,-16,15}, -{86,-16,16}, -{86,-16,17}, -{86,-16,18}, -{86,-16,19}, -{86,-16,20}, -{86,-16,21}, -{86,-16,22}, -{86,-16,23}, -{86,-16,24}, -{86,-16,25}, -{86,-16,26}, -{86,-16,27}, -{86,-16,28}, -{86,-16,29}, -{86,-16,30}, -{86,-16,31}, -{86,-16,32}, -{86,-16,33}, -{86,-16,34}, -{86,-16,35}, -{86,-16,36}, -{86,-16,37}, -{86,-16,38}, -{86,-16,39}, -{86,-16,40}, -{86,-16,41}, -{86,-16,42}, -{86,-16,43}, -{86,-16,44}, -{86,-16,45}, -{86,-16,46}, -{86,-16,47}, -{86,-16,48}, -{86,-16,49}, -{86,-16,50}, -{86,-16,51}, -{86,-16,52}, -{86,-16,53}, -{86,-16,54}, -{86,-16,55}, -{86,-16,56}, -{86,-16,57}, -{86,-16,58}, -{86,-16,59}, -{86,-16,60}, -{86,-16,61}, -{86,-16,62}, -{86,-16,63}, -{86,-16,64}, -{86,-16,65}, -{86,-16,66}, -{86,-16,67}, -{86,-16,68}, -{86,-16,69}, -{86,-16,70}, -{86,-16,71}, -{86,-16,72}, -{86,-16,73}, -{86,-16,74}, -{86,-16,75}, -{86,-16,76}, -{86,-16,77}, -{86,-16,78}, -{86,-16,79}, -{86,-16,80}, -{86,-16,81}, -{86,-16,82}, -{86,-16,83}, -{86,-16,84}, -{86,-16,85}, -{86,-15,-21}, -{86,-15,-20}, -{86,-15,-19}, -{86,-15,-18}, -{86,-15,-17}, -{86,-15,-16}, -{86,-15,-15}, -{86,-15,-14}, -{86,-15,-13}, -{86,-15,-12}, -{86,-15,-11}, -{86,-15,-10}, -{86,-15,-9}, -{86,-15,-8}, -{86,-15,-7}, -{86,-15,-6}, -{86,-15,-5}, -{86,-15,-4}, -{86,-15,-3}, -{86,-15,-2}, -{86,-15,-1}, -{86,-15,0}, -{86,-15,1}, -{86,-15,2}, -{86,-15,3}, -{86,-15,4}, -{86,-15,5}, -{86,-15,6}, -{86,-15,7}, -{86,-15,8}, -{86,-15,9}, -{86,-15,10}, -{86,-15,11}, -{86,-15,12}, -{86,-15,13}, -{86,-15,14}, -{86,-15,15}, -{86,-15,16}, -{86,-15,17}, -{86,-15,18}, -{86,-15,19}, -{86,-15,20}, -{86,-15,21}, -{86,-15,22}, -{86,-15,23}, -{86,-15,24}, -{86,-15,25}, -{86,-15,26}, -{86,-15,27}, -{86,-15,28}, -{86,-15,29}, -{86,-15,30}, -{86,-15,31}, -{86,-15,32}, -{86,-15,33}, -{86,-15,34}, -{86,-15,35}, -{86,-15,36}, -{86,-15,37}, -{86,-15,38}, -{86,-15,39}, -{86,-15,40}, -{86,-15,41}, -{86,-15,42}, -{86,-15,43}, -{86,-15,44}, -{86,-15,45}, -{86,-15,46}, -{86,-15,47}, -{86,-15,48}, -{86,-15,49}, -{86,-15,50}, -{86,-15,51}, -{86,-15,52}, -{86,-15,53}, -{86,-15,54}, -{86,-15,55}, -{86,-15,56}, -{86,-15,57}, -{86,-15,58}, -{86,-15,59}, -{86,-15,60}, -{86,-15,61}, -{86,-15,62}, -{86,-15,63}, -{86,-15,64}, -{86,-15,65}, -{86,-15,66}, -{86,-15,67}, -{86,-15,68}, -{86,-15,69}, -{86,-15,70}, -{86,-15,71}, -{86,-15,72}, -{86,-15,73}, -{86,-15,74}, -{86,-15,75}, -{86,-15,76}, -{86,-15,77}, -{86,-15,78}, -{86,-15,79}, -{86,-15,80}, -{86,-15,81}, -{86,-15,82}, -{86,-15,83}, -{86,-15,84}, -{86,-15,85}, -{86,-14,-21}, -{86,-14,-20}, -{86,-14,-19}, -{86,-14,-18}, -{86,-14,-17}, -{86,-14,-16}, -{86,-14,-15}, -{86,-14,-14}, -{86,-14,-13}, -{86,-14,-12}, -{86,-14,-11}, -{86,-14,-10}, -{86,-14,-9}, -{86,-14,-8}, -{86,-14,-7}, -{86,-14,-6}, -{86,-14,-5}, -{86,-14,-4}, -{86,-14,-3}, -{86,-14,-2}, -{86,-14,-1}, -{86,-14,0}, -{86,-14,1}, -{86,-14,2}, -{86,-14,3}, -{86,-14,4}, -{86,-14,5}, -{86,-14,6}, -{86,-14,7}, -{86,-14,8}, -{86,-14,9}, -{86,-14,10}, -{86,-14,11}, -{86,-14,12}, -{86,-14,13}, -{86,-14,14}, -{86,-14,15}, -{86,-14,16}, -{86,-14,17}, -{86,-14,18}, -{86,-14,19}, -{86,-14,20}, -{86,-14,21}, -{86,-14,22}, -{86,-14,23}, -{86,-14,24}, -{86,-14,25}, -{86,-14,26}, -{86,-14,27}, -{86,-14,28}, -{86,-14,29}, -{86,-14,30}, -{86,-14,31}, -{86,-14,32}, -{86,-14,33}, -{86,-14,34}, -{86,-14,35}, -{86,-14,36}, -{86,-14,37}, -{86,-14,38}, -{86,-14,39}, -{86,-14,40}, -{86,-14,41}, -{86,-14,42}, -{86,-14,43}, -{86,-14,44}, -{86,-14,45}, -{86,-14,46}, -{86,-14,47}, -{86,-14,48}, -{86,-14,49}, -{86,-14,50}, -{86,-14,51}, -{86,-14,52}, -{86,-14,53}, -{86,-14,54}, -{86,-14,55}, -{86,-14,56}, -{86,-14,57}, -{86,-14,58}, -{86,-14,59}, -{86,-14,60}, -{86,-14,61}, -{86,-14,62}, -{86,-14,63}, -{86,-14,64}, -{86,-14,65}, -{86,-14,66}, -{86,-14,67}, -{86,-14,68}, -{86,-14,69}, -{86,-14,70}, -{86,-14,71}, -{86,-14,72}, -{86,-14,73}, -{86,-14,74}, -{86,-14,75}, -{86,-14,76}, -{86,-14,77}, -{86,-14,78}, -{86,-14,79}, -{86,-14,80}, -{86,-14,81}, -{86,-14,82}, -{86,-14,83}, -{86,-14,84}, -{86,-14,85}, -{86,-13,-21}, -{86,-13,-20}, -{86,-13,-19}, -{86,-13,-18}, -{86,-13,-17}, -{86,-13,-16}, -{86,-13,-15}, -{86,-13,-14}, -{86,-13,-13}, -{86,-13,-12}, -{86,-13,-11}, -{86,-13,-10}, -{86,-13,-9}, -{86,-13,-8}, -{86,-13,-7}, -{86,-13,-6}, -{86,-13,-5}, -{86,-13,-4}, -{86,-13,-3}, -{86,-13,-2}, -{86,-13,-1}, -{86,-13,0}, -{86,-13,1}, -{86,-13,2}, -{86,-13,3}, -{86,-13,4}, -{86,-13,5}, -{86,-13,6}, -{86,-13,7}, -{86,-13,8}, -{86,-13,9}, -{86,-13,10}, -{86,-13,11}, -{86,-13,12}, -{86,-13,13}, -{86,-13,14}, -{86,-13,15}, -{86,-13,16}, -{86,-13,17}, -{86,-13,18}, -{86,-13,19}, -{86,-13,20}, -{86,-13,21}, -{86,-13,22}, -{86,-13,23}, -{86,-13,24}, -{86,-13,25}, -{86,-13,26}, -{86,-13,27}, -{86,-13,28}, -{86,-13,29}, -{86,-13,30}, -{86,-13,31}, -{86,-13,32}, -{86,-13,33}, -{86,-13,34}, -{86,-13,35}, -{86,-13,36}, -{86,-13,37}, -{86,-13,38}, -{86,-13,39}, -{86,-13,40}, -{86,-13,41}, -{86,-13,42}, -{86,-13,43}, -{86,-13,44}, -{86,-13,45}, -{86,-13,46}, -{86,-13,47}, -{86,-13,48}, -{86,-13,49}, -{86,-13,50}, -{86,-13,51}, -{86,-13,52}, -{86,-13,53}, -{86,-13,54}, -{86,-13,55}, -{86,-13,56}, -{86,-13,57}, -{86,-13,58}, -{86,-13,59}, -{86,-13,60}, -{86,-13,61}, -{86,-13,62}, -{86,-13,63}, -{86,-13,64}, -{86,-13,65}, -{86,-13,66}, -{86,-13,67}, -{86,-13,68}, -{86,-13,69}, -{86,-13,70}, -{86,-13,71}, -{86,-13,72}, -{86,-13,73}, -{86,-13,74}, -{86,-13,75}, -{86,-13,76}, -{86,-13,77}, -{86,-13,78}, -{86,-13,79}, -{86,-13,80}, -{86,-13,81}, -{86,-13,82}, -{86,-13,83}, -{86,-13,84}, -{86,-13,85}, -{86,-12,-21}, -{86,-12,-20}, -{86,-12,-19}, -{86,-12,-18}, -{86,-12,-17}, -{86,-12,-16}, -{86,-12,-15}, -{86,-12,-14}, -{86,-12,-13}, -{86,-12,-12}, -{86,-12,-11}, -{86,-12,-10}, -{86,-12,-9}, -{86,-12,-8}, -{86,-12,-7}, -{86,-12,-6}, -{86,-12,-5}, -{86,-12,-4}, -{86,-12,-3}, -{86,-12,-2}, -{86,-12,-1}, -{86,-12,0}, -{86,-12,1}, -{86,-12,2}, -{86,-12,3}, -{86,-12,4}, -{86,-12,5}, -{86,-12,6}, -{86,-12,7}, -{86,-12,8}, -{86,-12,9}, -{86,-12,10}, -{86,-12,11}, -{86,-12,12}, -{86,-12,13}, -{86,-12,14}, -{86,-12,15}, -{86,-12,16}, -{86,-12,17}, -{86,-12,18}, -{86,-12,19}, -{86,-12,20}, -{86,-12,21}, -{86,-12,22}, -{86,-12,23}, -{86,-12,24}, -{86,-12,25}, -{86,-12,26}, -{86,-12,27}, -{86,-12,28}, -{86,-12,29}, -{86,-12,30}, -{86,-12,31}, -{86,-12,32}, -{86,-12,33}, -{86,-12,34}, -{86,-12,35}, -{86,-12,36}, -{86,-12,37}, -{86,-12,38}, -{86,-12,39}, -{86,-12,40}, -{86,-12,41}, -{86,-12,42}, -{86,-12,43}, -{86,-12,44}, -{86,-12,45}, -{86,-12,46}, -{86,-12,47}, -{86,-12,48}, -{86,-12,49}, -{86,-12,50}, -{86,-12,51}, -{86,-12,52}, -{86,-12,53}, -{86,-12,54}, -{86,-12,55}, -{86,-12,56}, -{86,-12,57}, -{86,-12,58}, -{86,-12,59}, -{86,-12,60}, -{86,-12,61}, -{86,-12,62}, -{86,-12,63}, -{86,-12,64}, -{86,-12,65}, -{86,-12,66}, -{86,-12,67}, -{86,-12,68}, -{86,-12,69}, -{86,-12,70}, -{86,-12,71}, -{86,-12,72}, -{86,-12,73}, -{86,-12,74}, -{86,-12,75}, -{86,-12,76}, -{86,-12,77}, -{86,-12,78}, -{86,-12,79}, -{86,-12,80}, -{86,-12,81}, -{86,-12,82}, -{86,-12,83}, -{86,-12,84}, -{86,-12,85}, -{86,-11,-21}, -{86,-11,-20}, -{86,-11,-19}, -{86,-11,-18}, -{86,-11,-17}, -{86,-11,-16}, -{86,-11,-15}, -{86,-11,-14}, -{86,-11,-13}, -{86,-11,-12}, -{86,-11,-11}, -{86,-11,-10}, -{86,-11,-9}, -{86,-11,-8}, -{86,-11,-7}, -{86,-11,-6}, -{86,-11,-5}, -{86,-11,-4}, -{86,-11,-3}, -{86,-11,-2}, -{86,-11,-1}, -{86,-11,0}, -{86,-11,1}, -{86,-11,2}, -{86,-11,3}, -{86,-11,4}, -{86,-11,5}, -{86,-11,6}, -{86,-11,7}, -{86,-11,8}, -{86,-11,9}, -{86,-11,10}, -{86,-11,11}, -{86,-11,12}, -{86,-11,13}, -{86,-11,14}, -{86,-11,15}, -{86,-11,16}, -{86,-11,17}, -{86,-11,18}, -{86,-11,19}, -{86,-11,20}, -{86,-11,21}, -{86,-11,22}, -{86,-11,23}, -{86,-11,24}, -{86,-11,25}, -{86,-11,26}, -{86,-11,27}, -{86,-11,28}, -{86,-11,29}, -{86,-11,30}, -{86,-11,31}, -{86,-11,32}, -{86,-11,33}, -{86,-11,34}, -{86,-11,35}, -{86,-11,36}, -{86,-11,37}, -{86,-11,38}, -{86,-11,39}, -{86,-11,40}, -{86,-11,41}, -{86,-11,42}, -{86,-11,43}, -{86,-11,44}, -{86,-11,45}, -{86,-11,46}, -{86,-11,47}, -{86,-11,48}, -{86,-11,49}, -{86,-11,50}, -{86,-11,51}, -{86,-11,52}, -{86,-11,53}, -{86,-11,54}, -{86,-11,55}, -{86,-11,56}, -{86,-11,57}, -{86,-11,58}, -{86,-11,59}, -{86,-11,60}, -{86,-11,61}, -{86,-11,62}, -{86,-11,63}, -{86,-11,64}, -{86,-11,65}, -{86,-11,66}, -{86,-11,67}, -{86,-11,68}, -{86,-11,69}, -{86,-11,70}, -{86,-11,71}, -{86,-11,72}, -{86,-11,73}, -{86,-11,74}, -{86,-11,75}, -{86,-11,76}, -{86,-11,77}, -{86,-11,78}, -{86,-11,79}, -{86,-11,80}, -{86,-11,81}, -{86,-11,82}, -{86,-11,83}, -{86,-11,84}, -{86,-11,85}, -{86,-10,-21}, -{86,-10,-20}, -{86,-10,-19}, -{86,-10,-18}, -{86,-10,-17}, -{86,-10,-16}, -{86,-10,-15}, -{86,-10,-14}, -{86,-10,-13}, -{86,-10,-12}, -{86,-10,-11}, -{86,-10,-10}, -{86,-10,-9}, -{86,-10,-8}, -{86,-10,-7}, -{86,-10,-6}, -{86,-10,-5}, -{86,-10,-4}, -{86,-10,-3}, -{86,-10,-2}, -{86,-10,-1}, -{86,-10,0}, -{86,-10,1}, -{86,-10,2}, -{86,-10,3}, -{86,-10,4}, -{86,-10,5}, -{86,-10,6}, -{86,-10,7}, -{86,-10,8}, -{86,-10,9}, -{86,-10,10}, -{86,-10,11}, -{86,-10,12}, -{86,-10,13}, -{86,-10,14}, -{86,-10,15}, -{86,-10,16}, -{86,-10,17}, -{86,-10,18}, -{86,-10,19}, -{86,-10,20}, -{86,-10,21}, -{86,-10,22}, -{86,-10,23}, -{86,-10,24}, -{86,-10,25}, -{86,-10,26}, -{86,-10,27}, -{86,-10,28}, -{86,-10,29}, -{86,-10,30}, -{86,-10,31}, -{86,-10,32}, -{86,-10,33}, -{86,-10,34}, -{86,-10,35}, -{86,-10,36}, -{86,-10,37}, -{86,-10,38}, -{86,-10,39}, -{86,-10,40}, -{86,-10,41}, -{86,-10,42}, -{86,-10,43}, -{86,-10,44}, -{86,-10,45}, -{86,-10,46}, -{86,-10,47}, -{86,-10,48}, -{86,-10,49}, -{86,-10,50}, -{86,-10,51}, -{86,-10,52}, -{86,-10,53}, -{86,-10,54}, -{86,-10,55}, -{86,-10,56}, -{86,-10,57}, -{86,-10,58}, -{86,-10,59}, -{86,-10,60}, -{86,-10,61}, -{86,-10,62}, -{86,-10,63}, -{86,-10,64}, -{86,-10,65}, -{86,-10,66}, -{86,-10,67}, -{86,-10,68}, -{86,-10,69}, -{86,-10,70}, -{86,-10,71}, -{86,-10,72}, -{86,-10,73}, -{86,-10,74}, -{86,-10,75}, -{86,-10,76}, -{86,-10,77}, -{86,-10,78}, -{86,-10,79}, -{86,-10,80}, -{86,-10,81}, -{86,-10,82}, -{86,-10,83}, -{86,-10,84}, -{86,-10,85}, -{86,-9,-21}, -{86,-9,-20}, -{86,-9,-19}, -{86,-9,-18}, -{86,-9,-17}, -{86,-9,-16}, -{86,-9,-15}, -{86,-9,-14}, -{86,-9,-13}, -{86,-9,-12}, -{86,-9,-11}, -{86,-9,-10}, -{86,-9,-9}, -{86,-9,-8}, -{86,-9,-7}, -{86,-9,-6}, -{86,-9,-5}, -{86,-9,-4}, -{86,-9,-3}, -{86,-9,-2}, -{86,-9,-1}, -{86,-9,0}, -{86,-9,1}, -{86,-9,2}, -{86,-9,3}, -{86,-9,4}, -{86,-9,5}, -{86,-9,6}, -{86,-9,7}, -{86,-9,8}, -{86,-9,9}, -{86,-9,10}, -{86,-9,11}, -{86,-9,12}, -{86,-9,13}, -{86,-9,14}, -{86,-9,15}, -{86,-9,16}, -{86,-9,17}, -{86,-9,18}, -{86,-9,19}, -{86,-9,20}, -{86,-9,21}, -{86,-9,22}, -{86,-9,23}, -{86,-9,24}, -{86,-9,25}, -{86,-9,26}, -{86,-9,27}, -{86,-9,28}, -{86,-9,29}, -{86,-9,30}, -{86,-9,31}, -{86,-9,32}, -{86,-9,33}, -{86,-9,34}, -{86,-9,35}, -{86,-9,36}, -{86,-9,37}, -{86,-9,38}, -{86,-9,39}, -{86,-9,40}, -{86,-9,41}, -{86,-9,42}, -{86,-9,43}, -{86,-9,44}, -{86,-9,45}, -{86,-9,46}, -{86,-9,47}, -{86,-9,48}, -{86,-9,49}, -{86,-9,50}, -{86,-9,51}, -{86,-9,52}, -{86,-9,53}, -{86,-9,54}, -{86,-9,55}, -{86,-9,56}, -{86,-9,57}, -{86,-9,58}, -{86,-9,59}, -{86,-9,60}, -{86,-9,61}, -{86,-9,62}, -{86,-9,63}, -{86,-9,64}, -{86,-9,65}, -{86,-9,66}, -{86,-9,67}, -{86,-9,68}, -{86,-9,69}, -{86,-9,70}, -{86,-9,71}, -{86,-9,72}, -{86,-9,73}, -{86,-9,74}, -{86,-9,75}, -{86,-9,76}, -{86,-9,77}, -{86,-9,78}, -{86,-9,79}, -{86,-9,80}, -{86,-9,81}, -{86,-9,82}, -{86,-9,83}, -{86,-9,84}, -{86,-9,85}, -{86,-9,86}, -{86,-8,-21}, -{86,-8,-20}, -{86,-8,-19}, -{86,-8,-18}, -{86,-8,-17}, -{86,-8,-16}, -{86,-8,-15}, -{86,-8,-14}, -{86,-8,-13}, -{86,-8,-12}, -{86,-8,-11}, -{86,-8,-10}, -{86,-8,-9}, -{86,-8,-8}, -{86,-8,-7}, -{86,-8,-6}, -{86,-8,-5}, -{86,-8,-4}, -{86,-8,-3}, -{86,-8,-2}, -{86,-8,-1}, -{86,-8,0}, -{86,-8,1}, -{86,-8,2}, -{86,-8,3}, -{86,-8,4}, -{86,-8,5}, -{86,-8,6}, -{86,-8,7}, -{86,-8,8}, -{86,-8,9}, -{86,-8,10}, -{86,-8,11}, -{86,-8,12}, -{86,-8,13}, -{86,-8,14}, -{86,-8,15}, -{86,-8,16}, -{86,-8,17}, -{86,-8,18}, -{86,-8,19}, -{86,-8,20}, -{86,-8,21}, -{86,-8,22}, -{86,-8,23}, -{86,-8,24}, -{86,-8,25}, -{86,-8,26}, -{86,-8,27}, -{86,-8,28}, -{86,-8,29}, -{86,-8,30}, -{86,-8,31}, -{86,-8,32}, -{86,-8,33}, -{86,-8,34}, -{86,-8,35}, -{86,-8,36}, -{86,-8,37}, -{86,-8,38}, -{86,-8,39}, -{86,-8,40}, -{86,-8,41}, -{86,-8,42}, -{86,-8,43}, -{86,-8,44}, -{86,-8,45}, -{86,-8,46}, -{86,-8,47}, -{86,-8,48}, -{86,-8,49}, -{86,-8,50}, -{86,-8,51}, -{86,-8,52}, -{86,-8,53}, -{86,-8,54}, -{86,-8,55}, -{86,-8,56}, -{86,-8,57}, -{86,-8,58}, -{86,-8,59}, -{86,-8,60}, -{86,-8,61}, -{86,-8,62}, -{86,-8,63}, -{86,-8,64}, -{86,-8,65}, -{86,-8,66}, -{86,-8,67}, -{86,-8,68}, -{86,-8,69}, -{86,-8,70}, -{86,-8,71}, -{86,-8,72}, -{86,-8,73}, -{86,-8,74}, -{86,-8,75}, -{86,-8,76}, -{86,-8,77}, -{86,-8,78}, -{86,-8,79}, -{86,-8,80}, -{86,-8,81}, -{86,-8,82}, -{86,-8,83}, -{86,-8,84}, -{86,-8,85}, -{86,-8,86}, -{86,-7,-21}, -{86,-7,-20}, -{86,-7,-19}, -{86,-7,-18}, -{86,-7,-17}, -{86,-7,-16}, -{86,-7,-15}, -{86,-7,-14}, -{86,-7,-13}, -{86,-7,-12}, -{86,-7,-11}, -{86,-7,-10}, -{86,-7,-9}, -{86,-7,-8}, -{86,-7,-7}, -{86,-7,-6}, -{86,-7,-5}, -{86,-7,-4}, -{86,-7,-3}, -{86,-7,-2}, -{86,-7,-1}, -{86,-7,0}, -{86,-7,1}, -{86,-7,2}, -{86,-7,3}, -{86,-7,4}, -{86,-7,5}, -{86,-7,6}, -{86,-7,7}, -{86,-7,8}, -{86,-7,9}, -{86,-7,10}, -{86,-7,11}, -{86,-7,12}, -{86,-7,13}, -{86,-7,14}, -{86,-7,15}, -{86,-7,16}, -{86,-7,17}, -{86,-7,18}, -{86,-7,19}, -{86,-7,20}, -{86,-7,21}, -{86,-7,22}, -{86,-7,23}, -{86,-7,24}, -{86,-7,25}, -{86,-7,26}, -{86,-7,27}, -{86,-7,28}, -{86,-7,29}, -{86,-7,30}, -{86,-7,31}, -{86,-7,32}, -{86,-7,33}, -{86,-7,34}, -{86,-7,35}, -{86,-7,36}, -{86,-7,37}, -{86,-7,38}, -{86,-7,39}, -{86,-7,40}, -{86,-7,41}, -{86,-7,42}, -{86,-7,43}, -{86,-7,44}, -{86,-7,45}, -{86,-7,46}, -{86,-7,47}, -{86,-7,48}, -{86,-7,49}, -{86,-7,50}, -{86,-7,51}, -{86,-7,52}, -{86,-7,53}, -{86,-7,54}, -{86,-7,55}, -{86,-7,56}, -{86,-7,57}, -{86,-7,58}, -{86,-7,59}, -{86,-7,60}, -{86,-7,61}, -{86,-7,62}, -{86,-7,63}, -{86,-7,64}, -{86,-7,65}, -{86,-7,66}, -{86,-7,67}, -{86,-7,68}, -{86,-7,69}, -{86,-7,70}, -{86,-7,71}, -{86,-7,72}, -{86,-7,73}, -{86,-7,74}, -{86,-7,75}, -{86,-7,76}, -{86,-7,77}, -{86,-7,78}, -{86,-7,79}, -{86,-7,80}, -{86,-7,81}, -{86,-7,82}, -{86,-7,83}, -{86,-7,84}, -{86,-7,85}, -{86,-7,86}, -{86,-6,-21}, -{86,-6,-20}, -{86,-6,-19}, -{86,-6,-18}, -{86,-6,-17}, -{86,-6,-16}, -{86,-6,-15}, -{86,-6,-14}, -{86,-6,-13}, -{86,-6,-12}, -{86,-6,-11}, -{86,-6,-10}, -{86,-6,-9}, -{86,-6,-8}, -{86,-6,-7}, -{86,-6,-6}, -{86,-6,-5}, -{86,-6,-4}, -{86,-6,-3}, -{86,-6,-2}, -{86,-6,-1}, -{86,-6,0}, -{86,-6,1}, -{86,-6,2}, -{86,-6,3}, -{86,-6,4}, -{86,-6,5}, -{86,-6,6}, -{86,-6,7}, -{86,-6,8}, -{86,-6,9}, -{86,-6,10}, -{86,-6,11}, -{86,-6,12}, -{86,-6,13}, -{86,-6,14}, -{86,-6,15}, -{86,-6,16}, -{86,-6,17}, -{86,-6,18}, -{86,-6,19}, -{86,-6,20}, -{86,-6,21}, -{86,-6,22}, -{86,-6,23}, -{86,-6,24}, -{86,-6,25}, -{86,-6,26}, -{86,-6,27}, -{86,-6,28}, -{86,-6,29}, -{86,-6,30}, -{86,-6,31}, -{86,-6,32}, -{86,-6,33}, -{86,-6,34}, -{86,-6,35}, -{86,-6,36}, -{86,-6,37}, -{86,-6,38}, -{86,-6,39}, -{86,-6,40}, -{86,-6,41}, -{86,-6,42}, -{86,-6,43}, -{86,-6,44}, -{86,-6,45}, -{86,-6,46}, -{86,-6,47}, -{86,-6,48}, -{86,-6,49}, -{86,-6,50}, -{86,-6,51}, -{86,-6,52}, -{86,-6,53}, -{86,-6,54}, -{86,-6,55}, -{86,-6,56}, -{86,-6,57}, -{86,-6,58}, -{86,-6,59}, -{86,-6,60}, -{86,-6,61}, -{86,-6,62}, -{86,-6,63}, -{86,-6,64}, -{86,-6,65}, -{86,-6,66}, -{86,-6,67}, -{86,-6,68}, -{86,-6,69}, -{86,-6,70}, -{86,-6,71}, -{86,-6,72}, -{86,-6,73}, -{86,-6,74}, -{86,-6,75}, -{86,-6,76}, -{86,-6,77}, -{86,-6,78}, -{86,-6,79}, -{86,-6,80}, -{86,-6,81}, -{86,-6,82}, -{86,-6,83}, -{86,-6,84}, -{86,-6,85}, -{86,-6,86}, -{86,-5,-21}, -{86,-5,-20}, -{86,-5,-19}, -{86,-5,-18}, -{86,-5,-17}, -{86,-5,-16}, -{86,-5,-15}, -{86,-5,-14}, -{86,-5,-13}, -{86,-5,-12}, -{86,-5,-11}, -{86,-5,-10}, -{86,-5,-9}, -{86,-5,-8}, -{86,-5,-7}, -{86,-5,-6}, -{86,-5,-5}, -{86,-5,-4}, -{86,-5,-3}, -{86,-5,-2}, -{86,-5,-1}, -{86,-5,0}, -{86,-5,1}, -{86,-5,2}, -{86,-5,3}, -{86,-5,4}, -{86,-5,5}, -{86,-5,6}, -{86,-5,7}, -{86,-5,8}, -{86,-5,9}, -{86,-5,10}, -{86,-5,11}, -{86,-5,12}, -{86,-5,13}, -{86,-5,14}, -{86,-5,15}, -{86,-5,16}, -{86,-5,17}, -{86,-5,18}, -{86,-5,19}, -{86,-5,20}, -{86,-5,21}, -{86,-5,22}, -{86,-5,23}, -{86,-5,24}, -{86,-5,25}, -{86,-5,26}, -{86,-5,27}, -{86,-5,28}, -{86,-5,29}, -{86,-5,30}, -{86,-5,31}, -{86,-5,32}, -{86,-5,33}, -{86,-5,34}, -{86,-5,35}, -{86,-5,36}, -{86,-5,37}, -{86,-5,38}, -{86,-5,39}, -{86,-5,40}, -{86,-5,41}, -{86,-5,42}, -{86,-5,43}, -{86,-5,44}, -{86,-5,45}, -{86,-5,46}, -{86,-5,47}, -{86,-5,48}, -{86,-5,49}, -{86,-5,50}, -{86,-5,51}, -{86,-5,52}, -{86,-5,53}, -{86,-5,54}, -{86,-5,55}, -{86,-5,56}, -{86,-5,57}, -{86,-5,58}, -{86,-5,59}, -{86,-5,60}, -{86,-5,61}, -{86,-5,62}, -{86,-5,63}, -{86,-5,64}, -{86,-5,65}, -{86,-5,66}, -{86,-5,67}, -{86,-5,68}, -{86,-5,69}, -{86,-5,70}, -{86,-5,71}, -{86,-5,72}, -{86,-5,73}, -{86,-5,74}, -{86,-5,75}, -{86,-5,76}, -{86,-5,77}, -{86,-5,78}, -{86,-5,79}, -{86,-5,80}, -{86,-5,81}, -{86,-5,82}, -{86,-5,83}, -{86,-5,84}, -{86,-5,85}, -{86,-5,86}, -{86,-4,-21}, -{86,-4,-20}, -{86,-4,-19}, -{86,-4,-18}, -{86,-4,-17}, -{86,-4,-16}, -{86,-4,-15}, -{86,-4,-14}, -{86,-4,-13}, -{86,-4,-12}, -{86,-4,-11}, -{86,-4,-10}, -{86,-4,-9}, -{86,-4,-8}, -{86,-4,-7}, -{86,-4,-6}, -{86,-4,-5}, -{86,-4,-4}, -{86,-4,-3}, -{86,-4,-2}, -{86,-4,-1}, -{86,-4,0}, -{86,-4,1}, -{86,-4,2}, -{86,-4,3}, -{86,-4,4}, -{86,-4,5}, -{86,-4,6}, -{86,-4,7}, -{86,-4,8}, -{86,-4,9}, -{86,-4,10}, -{86,-4,11}, -{86,-4,12}, -{86,-4,13}, -{86,-4,14}, -{86,-4,15}, -{86,-4,16}, -{86,-4,17}, -{86,-4,18}, -{86,-4,19}, -{86,-4,20}, -{86,-4,21}, -{86,-4,22}, -{86,-4,23}, -{86,-4,24}, -{86,-4,25}, -{86,-4,26}, -{86,-4,27}, -{86,-4,28}, -{86,-4,29}, -{86,-4,30}, -{86,-4,31}, -{86,-4,32}, -{86,-4,33}, -{86,-4,34}, -{86,-4,35}, -{86,-4,36}, -{86,-4,37}, -{86,-4,38}, -{86,-4,39}, -{86,-4,40}, -{86,-4,41}, -{86,-4,42}, -{86,-4,43}, -{86,-4,44}, -{86,-4,45}, -{86,-4,46}, -{86,-4,47}, -{86,-4,48}, -{86,-4,49}, -{86,-4,50}, -{86,-4,51}, -{86,-4,52}, -{86,-4,53}, -{86,-4,54}, -{86,-4,55}, -{86,-4,56}, -{86,-4,57}, -{86,-4,58}, -{86,-4,59}, -{86,-4,60}, -{86,-4,61}, -{86,-4,62}, -{86,-4,63}, -{86,-4,64}, -{86,-4,65}, -{86,-4,66}, -{86,-4,67}, -{86,-4,68}, -{86,-4,69}, -{86,-4,70}, -{86,-4,71}, -{86,-4,72}, -{86,-4,73}, -{86,-4,74}, -{86,-4,75}, -{86,-4,76}, -{86,-4,77}, -{86,-4,78}, -{86,-4,79}, -{86,-4,80}, -{86,-4,81}, -{86,-4,82}, -{86,-4,83}, -{86,-4,84}, -{86,-4,85}, -{86,-4,86}, -{86,-3,-21}, -{86,-3,-20}, -{86,-3,-19}, -{86,-3,-18}, -{86,-3,-17}, -{86,-3,-16}, -{86,-3,-15}, -{86,-3,-14}, -{86,-3,-13}, -{86,-3,-12}, -{86,-3,-11}, -{86,-3,-10}, -{86,-3,-9}, -{86,-3,-8}, -{86,-3,-7}, -{86,-3,-6}, -{86,-3,-5}, -{86,-3,-4}, -{86,-3,-3}, -{86,-3,-2}, -{86,-3,-1}, -{86,-3,0}, -{86,-3,1}, -{86,-3,2}, -{86,-3,3}, -{86,-3,4}, -{86,-3,5}, -{86,-3,6}, -{86,-3,7}, -{86,-3,8}, -{86,-3,9}, -{86,-3,10}, -{86,-3,11}, -{86,-3,12}, -{86,-3,13}, -{86,-3,14}, -{86,-3,15}, -{86,-3,16}, -{86,-3,17}, -{86,-3,18}, -{86,-3,19}, -{86,-3,20}, -{86,-3,21}, -{86,-3,22}, -{86,-3,23}, -{86,-3,24}, -{86,-3,25}, -{86,-3,26}, -{86,-3,27}, -{86,-3,28}, -{86,-3,29}, -{86,-3,30}, -{86,-3,31}, -{86,-3,32}, -{86,-3,33}, -{86,-3,34}, -{86,-3,35}, -{86,-3,36}, -{86,-3,37}, -{86,-3,38}, -{86,-3,39}, -{86,-3,40}, -{86,-3,41}, -{86,-3,42}, -{86,-3,43}, -{86,-3,44}, -{86,-3,45}, -{86,-3,46}, -{86,-3,47}, -{86,-3,48}, -{86,-3,49}, -{86,-3,50}, -{86,-3,51}, -{86,-3,52}, -{86,-3,53}, -{86,-3,54}, -{86,-3,55}, -{86,-3,56}, -{86,-3,57}, -{86,-3,58}, -{86,-3,59}, -{86,-3,60}, -{86,-3,61}, -{86,-3,62}, -{86,-3,63}, -{86,-3,64}, -{86,-3,65}, -{86,-3,66}, -{86,-3,67}, -{86,-3,68}, -{86,-3,69}, -{86,-3,70}, -{86,-3,71}, -{86,-3,72}, -{86,-3,73}, -{86,-3,74}, -{86,-3,75}, -{86,-3,76}, -{86,-3,77}, -{86,-3,78}, -{86,-3,79}, -{86,-3,80}, -{86,-3,81}, -{86,-3,82}, -{86,-3,83}, -{86,-3,84}, -{86,-3,85}, -{86,-3,86}, -{86,-2,-21}, -{86,-2,-20}, -{86,-2,-19}, -{86,-2,-18}, -{86,-2,-17}, -{86,-2,-16}, -{86,-2,-15}, -{86,-2,-14}, -{86,-2,-13}, -{86,-2,-12}, -{86,-2,-11}, -{86,-2,-10}, -{86,-2,-9}, -{86,-2,-8}, -{86,-2,-7}, -{86,-2,-6}, -{86,-2,-5}, -{86,-2,-4}, -{86,-2,-3}, -{86,-2,-2}, -{86,-2,-1}, -{86,-2,0}, -{86,-2,1}, -{86,-2,2}, -{86,-2,3}, -{86,-2,4}, -{86,-2,5}, -{86,-2,6}, -{86,-2,7}, -{86,-2,8}, -{86,-2,9}, -{86,-2,10}, -{86,-2,11}, -{86,-2,12}, -{86,-2,13}, -{86,-2,14}, -{86,-2,15}, -{86,-2,16}, -{86,-2,17}, -{86,-2,18}, -{86,-2,19}, -{86,-2,20}, -{86,-2,21}, -{86,-2,22}, -{86,-2,23}, -{86,-2,24}, -{86,-2,25}, -{86,-2,26}, -{86,-2,27}, -{86,-2,28}, -{86,-2,29}, -{86,-2,30}, -{86,-2,31}, -{86,-2,32}, -{86,-2,33}, -{86,-2,34}, -{86,-2,35}, -{86,-2,36}, -{86,-2,37}, -{86,-2,38}, -{86,-2,39}, -{86,-2,40}, -{86,-2,41}, -{86,-2,42}, -{86,-2,43}, -{86,-2,44}, -{86,-2,45}, -{86,-2,46}, -{86,-2,47}, -{86,-2,48}, -{86,-2,49}, -{86,-2,50}, -{86,-2,51}, -{86,-2,52}, -{86,-2,53}, -{86,-2,54}, -{86,-2,55}, -{86,-2,56}, -{86,-2,57}, -{86,-2,58}, -{86,-2,59}, -{86,-2,60}, -{86,-2,61}, -{86,-2,62}, -{86,-2,63}, -{86,-2,64}, -{86,-2,65}, -{86,-2,66}, -{86,-2,67}, -{86,-2,68}, -{86,-2,69}, -{86,-2,70}, -{86,-2,71}, -{86,-2,72}, -{86,-2,73}, -{86,-2,74}, -{86,-2,75}, -{86,-2,76}, -{86,-2,77}, -{86,-2,78}, -{86,-2,79}, -{86,-2,80}, -{86,-2,81}, -{86,-2,82}, -{86,-2,83}, -{86,-2,84}, -{86,-2,85}, -{86,-2,86}, -{86,-1,-21}, -{86,-1,-20}, -{86,-1,-19}, -{86,-1,-18}, -{86,-1,-17}, -{86,-1,-16}, -{86,-1,-15}, -{86,-1,-14}, -{86,-1,-13}, -{86,-1,-12}, -{86,-1,-11}, -{86,-1,-10}, -{86,-1,-9}, -{86,-1,-8}, -{86,-1,-7}, -{86,-1,-6}, -{86,-1,-5}, -{86,-1,-4}, -{86,-1,-3}, -{86,-1,-2}, -{86,-1,-1}, -{86,-1,0}, -{86,-1,1}, -{86,-1,2}, -{86,-1,3}, -{86,-1,4}, -{86,-1,5}, -{86,-1,6}, -{86,-1,7}, -{86,-1,8}, -{86,-1,9}, -{86,-1,10}, -{86,-1,11}, -{86,-1,12}, -{86,-1,13}, -{86,-1,14}, -{86,-1,15}, -{86,-1,16}, -{86,-1,17}, -{86,-1,18}, -{86,-1,19}, -{86,-1,20}, -{86,-1,21}, -{86,-1,22}, -{86,-1,23}, -{86,-1,24}, -{86,-1,25}, -{86,-1,26}, -{86,-1,27}, -{86,-1,28}, -{86,-1,29}, -{86,-1,30}, -{86,-1,31}, -{86,-1,32}, -{86,-1,33}, -{86,-1,34}, -{86,-1,35}, -{86,-1,36}, -{86,-1,37}, -{86,-1,38}, -{86,-1,39}, -{86,-1,40}, -{86,-1,41}, -{86,-1,42}, -{86,-1,43}, -{86,-1,44}, -{86,-1,45}, -{86,-1,46}, -{86,-1,47}, -{86,-1,48}, -{86,-1,49}, -{86,-1,50}, -{86,-1,51}, -{86,-1,52}, -{86,-1,53}, -{86,-1,54}, -{86,-1,55}, -{86,-1,56}, -{86,-1,57}, -{86,-1,58}, -{86,-1,59}, -{86,-1,60}, -{86,-1,61}, -{86,-1,62}, -{86,-1,63}, -{86,-1,64}, -{86,-1,65}, -{86,-1,66}, -{86,-1,67}, -{86,-1,68}, -{86,-1,69}, -{86,-1,70}, -{86,-1,71}, -{86,-1,72}, -{86,-1,73}, -{86,-1,74}, -{86,-1,75}, -{86,-1,76}, -{86,-1,77}, -{86,-1,78}, -{86,-1,79}, -{86,-1,80}, -{86,-1,81}, -{86,-1,82}, -{86,-1,83}, -{86,-1,84}, -{86,-1,85}, -{86,-1,86}, -{86,0,-21}, -{86,0,-20}, -{86,0,-19}, -{86,0,-18}, -{86,0,-17}, -{86,0,-16}, -{86,0,-15}, -{86,0,-14}, -{86,0,-13}, -{86,0,-12}, -{86,0,-11}, -{86,0,-10}, -{86,0,-9}, -{86,0,-8}, -{86,0,-7}, -{86,0,-6}, -{86,0,-5}, -{86,0,-4}, -{86,0,-3}, -{86,0,-2}, -{86,0,-1}, -{86,0,0}, -{86,0,1}, -{86,0,2}, -{86,0,3}, -{86,0,4}, -{86,0,5}, -{86,0,6}, -{86,0,7}, -{86,0,8}, -{86,0,9}, -{86,0,10}, -{86,0,11}, -{86,0,12}, -{86,0,13}, -{86,0,14}, -{86,0,15}, -{86,0,16}, -{86,0,17}, -{86,0,18}, -{86,0,19}, -{86,0,20}, -{86,0,21}, -{86,0,22}, -{86,0,23}, -{86,0,24}, -{86,0,25}, -{86,0,26}, -{86,0,27}, -{86,0,28}, -{86,0,29}, -{86,0,30}, -{86,0,31}, -{86,0,32}, -{86,0,33}, -{86,0,34}, -{86,0,35}, -{86,0,36}, -{86,0,37}, -{86,0,38}, -{86,0,39}, -{86,0,40}, -{86,0,41}, -{86,0,42}, -{86,0,43}, -{86,0,44}, -{86,0,45}, -{86,0,46}, -{86,0,47}, -{86,0,48}, -{86,0,49}, -{86,0,50}, -{86,0,51}, -{86,0,52}, -{86,0,53}, -{86,0,54}, -{86,0,55}, -{86,0,56}, -{86,0,57}, -{86,0,58}, -{86,0,59}, -{86,0,60}, -{86,0,61}, -{86,0,62}, -{86,0,63}, -{86,0,64}, -{86,0,65}, -{86,0,66}, -{86,0,67}, -{86,0,68}, -{86,0,69}, -{86,0,70}, -{86,0,71}, -{86,0,72}, -{86,0,73}, -{86,0,74}, -{86,0,75}, -{86,0,76}, -{86,0,77}, -{86,0,78}, -{86,0,79}, -{86,0,80}, -{86,0,81}, -{86,0,82}, -{86,0,83}, -{86,0,84}, -{86,0,85}, -{86,0,86}, -{86,1,-21}, -{86,1,-20}, -{86,1,-19}, -{86,1,-18}, -{86,1,-17}, -{86,1,-16}, -{86,1,-15}, -{86,1,-14}, -{86,1,-13}, -{86,1,-12}, -{86,1,-11}, -{86,1,-10}, -{86,1,-9}, -{86,1,-8}, -{86,1,-7}, -{86,1,-6}, -{86,1,-5}, -{86,1,-4}, -{86,1,-3}, -{86,1,-2}, -{86,1,-1}, -{86,1,0}, -{86,1,1}, -{86,1,2}, -{86,1,3}, -{86,1,4}, -{86,1,5}, -{86,1,6}, -{86,1,7}, -{86,1,8}, -{86,1,9}, -{86,1,10}, -{86,1,11}, -{86,1,12}, -{86,1,13}, -{86,1,14}, -{86,1,15}, -{86,1,16}, -{86,1,17}, -{86,1,18}, -{86,1,19}, -{86,1,20}, -{86,1,21}, -{86,1,22}, -{86,1,23}, -{86,1,24}, -{86,1,25}, -{86,1,26}, -{86,1,27}, -{86,1,28}, -{86,1,29}, -{86,1,30}, -{86,1,31}, -{86,1,32}, -{86,1,33}, -{86,1,34}, -{86,1,35}, -{86,1,36}, -{86,1,37}, -{86,1,38}, -{86,1,39}, -{86,1,40}, -{86,1,41}, -{86,1,42}, -{86,1,43}, -{86,1,44}, -{86,1,45}, -{86,1,46}, -{86,1,47}, -{86,1,48}, -{86,1,49}, -{86,1,50}, -{86,1,51}, -{86,1,52}, -{86,1,53}, -{86,1,54}, -{86,1,55}, -{86,1,56}, -{86,1,57}, -{86,1,58}, -{86,1,59}, -{86,1,60}, -{86,1,61}, -{86,1,62}, -{86,1,63}, -{86,1,64}, -{86,1,65}, -{86,1,66}, -{86,1,67}, -{86,1,68}, -{86,1,69}, -{86,1,70}, -{86,1,71}, -{86,1,72}, -{86,1,73}, -{86,1,74}, -{86,1,75}, -{86,1,76}, -{86,1,77}, -{86,1,78}, -{86,1,79}, -{86,2,-21}, -{86,2,-20}, -{86,2,-19}, -{86,2,-18}, -{86,2,-17}, -{86,2,-16}, -{86,2,-15}, -{86,2,-14}, -{86,2,-13}, -{86,2,-12}, -{86,2,-11}, -{86,2,-10}, -{86,2,-9}, -{86,2,-8}, -{86,2,-7}, -{86,2,-6}, -{86,2,-5}, -{86,2,-4}, -{86,2,-3}, -{86,2,-2}, -{86,2,-1}, -{86,2,0}, -{86,2,1}, -{86,2,2}, -{86,2,3}, -{86,2,4}, -{86,2,5}, -{86,2,6}, -{86,2,7}, -{86,2,8}, -{86,2,9}, -{86,2,10}, -{86,2,11}, -{86,2,12}, -{86,2,13}, -{86,2,14}, -{86,2,15}, -{86,2,16}, -{86,2,17}, -{86,2,18}, -{86,2,19}, -{86,2,20}, -{86,2,21}, -{86,2,22}, -{86,2,23}, -{86,2,24}, -{86,2,25}, -{86,2,26}, -{86,2,27}, -{86,2,28}, -{86,2,29}, -{86,2,30}, -{86,2,31}, -{86,2,32}, -{86,2,33}, -{86,2,34}, -{86,2,35}, -{86,2,36}, -{86,2,37}, -{86,2,38}, -{86,2,39}, -{86,2,40}, -{86,2,41}, -{86,2,42}, -{86,2,43}, -{86,2,44}, -{86,2,45}, -{86,2,46}, -{86,2,47}, -{86,2,48}, -{86,2,49}, -{86,2,50}, -{86,2,51}, -{86,2,52}, -{86,2,53}, -{86,2,54}, -{86,2,55}, -{86,2,56}, -{86,2,57}, -{86,2,58}, -{86,2,59}, -{86,2,60}, -{86,2,61}, -{86,2,62}, -{86,2,63}, -{86,2,64}, -{86,2,65}, -{86,2,66}, -{86,2,67}, -{86,2,68}, -{86,2,69}, -{86,2,70}, -{86,2,71}, -{86,2,72}, -{86,3,-21}, -{86,3,-20}, -{86,3,-19}, -{86,3,-18}, -{86,3,-17}, -{86,3,-16}, -{86,3,-15}, -{86,3,-14}, -{86,3,-13}, -{86,3,-12}, -{86,3,-11}, -{86,3,-10}, -{86,3,-9}, -{86,3,-8}, -{86,3,-7}, -{86,3,-6}, -{86,3,-5}, -{86,3,-4}, -{86,3,-3}, -{86,3,-2}, -{86,3,-1}, -{86,3,0}, -{86,3,1}, -{86,3,2}, -{86,3,3}, -{86,3,4}, -{86,3,5}, -{86,3,6}, -{86,3,7}, -{86,3,8}, -{86,3,9}, -{86,3,10}, -{86,3,11}, -{86,3,12}, -{86,3,13}, -{86,3,14}, -{86,3,15}, -{86,3,16}, -{86,3,17}, -{86,3,18}, -{86,3,19}, -{86,3,20}, -{86,3,21}, -{86,3,22}, -{86,3,23}, -{86,3,24}, -{86,3,25}, -{86,3,26}, -{86,3,27}, -{86,3,28}, -{86,3,29}, -{86,3,30}, -{86,3,31}, -{86,3,32}, -{86,3,33}, -{86,3,34}, -{86,3,35}, -{86,3,36}, -{86,3,37}, -{86,3,38}, -{86,3,39}, -{86,3,40}, -{86,3,41}, -{86,3,42}, -{86,3,43}, -{86,3,44}, -{86,3,45}, -{86,3,46}, -{86,3,47}, -{86,3,48}, -{86,3,49}, -{86,3,50}, -{86,3,51}, -{86,3,52}, -{86,3,53}, -{86,3,54}, -{86,3,55}, -{86,3,56}, -{86,3,57}, -{86,3,58}, -{86,3,59}, -{86,3,60}, -{86,3,61}, -{86,3,62}, -{86,3,63}, -{86,3,64}, -{86,3,65}, -{86,3,66}, -{86,4,-21}, -{86,4,-20}, -{86,4,-19}, -{86,4,-18}, -{86,4,-17}, -{86,4,-16}, -{86,4,-15}, -{86,4,-14}, -{86,4,-13}, -{86,4,-12}, -{86,4,-11}, -{86,4,-10}, -{86,4,-9}, -{86,4,-8}, -{86,4,-7}, -{86,4,-6}, -{86,4,-5}, -{86,4,-4}, -{86,4,-3}, -{86,4,-2}, -{86,4,-1}, -{86,4,0}, -{86,4,1}, -{86,4,2}, -{86,4,3}, -{86,4,4}, -{86,4,5}, -{86,4,6}, -{86,4,7}, -{86,4,8}, -{86,4,9}, -{86,4,10}, -{86,4,11}, -{86,4,12}, -{86,4,13}, -{86,4,14}, -{86,4,15}, -{86,4,16}, -{86,4,17}, -{86,4,18}, -{86,4,19}, -{86,4,20}, -{86,4,21}, -{86,4,22}, -{86,4,23}, -{86,4,24}, -{86,4,25}, -{86,4,26}, -{86,4,27}, -{86,4,28}, -{86,4,29}, -{86,4,30}, -{86,4,31}, -{86,4,32}, -{86,4,33}, -{86,4,34}, -{86,4,35}, -{86,4,36}, -{86,4,37}, -{86,4,38}, -{86,4,39}, -{86,4,40}, -{86,4,41}, -{86,4,42}, -{86,4,43}, -{86,4,44}, -{86,4,45}, -{86,4,46}, -{86,4,47}, -{86,4,48}, -{86,4,49}, -{86,4,50}, -{86,4,51}, -{86,4,52}, -{86,4,53}, -{86,4,54}, -{86,4,55}, -{86,4,56}, -{86,4,57}, -{86,4,58}, -{86,4,59}, -{86,4,60}, -{86,5,-21}, -{86,5,-20}, -{86,5,-19}, -{86,5,-18}, -{86,5,-17}, -{86,5,-16}, -{86,5,-15}, -{86,5,-14}, -{86,5,-13}, -{86,5,-12}, -{86,5,-11}, -{86,5,-10}, -{86,5,-9}, -{86,5,-8}, -{86,5,-7}, -{86,5,-6}, -{86,5,-5}, -{86,5,-4}, -{86,5,-3}, -{86,5,-2}, -{86,5,-1}, -{86,5,0}, -{86,5,1}, -{86,5,2}, -{86,5,3}, -{86,5,4}, -{86,5,5}, -{86,5,6}, -{86,5,7}, -{86,5,8}, -{86,5,9}, -{86,5,10}, -{86,5,11}, -{86,5,12}, -{86,5,13}, -{86,5,14}, -{86,5,15}, -{86,5,16}, -{86,5,17}, -{86,5,18}, -{86,5,19}, -{86,5,20}, -{86,5,21}, -{86,5,22}, -{86,5,23}, -{86,5,24}, -{86,5,25}, -{86,5,26}, -{86,5,27}, -{86,5,28}, -{86,5,29}, -{86,5,30}, -{86,5,31}, -{86,5,32}, -{86,5,33}, -{86,5,34}, -{86,5,35}, -{86,5,36}, -{86,5,37}, -{86,5,38}, -{86,5,39}, -{86,5,40}, -{86,5,41}, -{86,5,42}, -{86,5,43}, -{86,5,44}, -{86,5,45}, -{86,5,46}, -{86,5,47}, -{86,5,48}, -{86,5,49}, -{86,5,50}, -{86,5,51}, -{86,5,52}, -{86,5,53}, -{86,5,54}, -{86,5,55}, -{86,6,-21}, -{86,6,-20}, -{86,6,-19}, -{86,6,-18}, -{86,6,-17}, -{86,6,-16}, -{86,6,-15}, -{86,6,-14}, -{86,6,-13}, -{86,6,-12}, -{86,6,-11}, -{86,6,-10}, -{86,6,-9}, -{86,6,-8}, -{86,6,-7}, -{86,6,-6}, -{86,6,-5}, -{86,6,-4}, -{86,6,-3}, -{86,6,-2}, -{86,6,-1}, -{86,6,0}, -{86,6,1}, -{86,6,2}, -{86,6,3}, -{86,6,4}, -{86,6,5}, -{86,6,6}, -{86,6,7}, -{86,6,8}, -{86,6,9}, -{86,6,10}, -{86,6,11}, -{86,6,12}, -{86,6,13}, -{86,6,14}, -{86,6,15}, -{86,6,16}, -{86,6,17}, -{86,6,18}, -{86,6,19}, -{86,6,20}, -{86,6,21}, -{86,6,22}, -{86,6,23}, -{86,6,24}, -{86,6,25}, -{86,6,26}, -{86,6,27}, -{86,6,28}, -{86,6,29}, -{86,6,30}, -{86,6,31}, -{86,6,32}, -{86,6,33}, -{86,6,34}, -{86,6,35}, -{86,6,36}, -{86,6,37}, -{86,6,38}, -{86,6,39}, -{86,6,40}, -{86,6,41}, -{86,6,42}, -{86,6,43}, -{86,6,44}, -{86,6,45}, -{86,6,46}, -{86,6,47}, -{86,6,48}, -{86,6,49}, -{86,6,50}, -{86,7,-21}, -{86,7,-20}, -{86,7,-19}, -{86,7,-18}, -{86,7,-17}, -{86,7,-16}, -{86,7,-15}, -{86,7,-14}, -{86,7,-13}, -{86,7,-12}, -{86,7,-11}, -{86,7,-10}, -{86,7,-9}, -{86,7,-8}, -{86,7,-7}, -{86,7,-6}, -{86,7,-5}, -{86,7,-4}, -{86,7,-3}, -{86,7,-2}, -{86,7,-1}, -{86,7,0}, -{86,7,1}, -{86,7,2}, -{86,7,3}, -{86,7,4}, -{86,7,5}, -{86,7,6}, -{86,7,7}, -{86,7,8}, -{86,7,9}, -{86,7,10}, -{86,7,11}, -{86,7,12}, -{86,7,13}, -{86,7,14}, -{86,7,15}, -{86,7,16}, -{86,7,17}, -{86,7,18}, -{86,7,19}, -{86,7,20}, -{86,7,21}, -{86,7,22}, -{86,7,23}, -{86,7,24}, -{86,7,25}, -{86,7,26}, -{86,7,27}, -{86,7,28}, -{86,7,29}, -{86,7,30}, -{86,7,31}, -{86,7,32}, -{86,7,33}, -{86,7,34}, -{86,7,35}, -{86,7,36}, -{86,7,37}, -{86,7,38}, -{86,7,39}, -{86,7,40}, -{86,7,41}, -{86,7,42}, -{86,7,43}, -{86,7,44}, -{86,7,45}, -{86,7,46}, -{86,8,-21}, -{86,8,-20}, -{86,8,-19}, -{86,8,-18}, -{86,8,-17}, -{86,8,-16}, -{86,8,-15}, -{86,8,-14}, -{86,8,-13}, -{86,8,-12}, -{86,8,-11}, -{86,8,-10}, -{86,8,-9}, -{86,8,-8}, -{86,8,-7}, -{86,8,-6}, -{86,8,-5}, -{86,8,-4}, -{86,8,-3}, -{86,8,-2}, -{86,8,-1}, -{86,8,0}, -{86,8,1}, -{86,8,2}, -{86,8,3}, -{86,8,4}, -{86,8,5}, -{86,8,6}, -{86,8,7}, -{86,8,8}, -{86,8,9}, -{86,8,10}, -{86,8,11}, -{86,8,12}, -{86,8,13}, -{86,8,14}, -{86,8,15}, -{86,8,16}, -{86,8,17}, -{86,8,18}, -{86,8,19}, -{86,8,20}, -{86,8,21}, -{86,8,22}, -{86,8,23}, -{86,8,24}, -{86,8,25}, -{86,8,26}, -{86,8,27}, -{86,8,28}, -{86,8,29}, -{86,8,30}, -{86,8,31}, -{86,8,32}, -{86,8,33}, -{86,8,34}, -{86,8,35}, -{86,8,36}, -{86,8,37}, -{86,8,38}, -{86,8,39}, -{86,8,40}, -{86,8,41}, -{86,8,42}, -{86,9,-21}, -{86,9,-20}, -{86,9,-19}, -{86,9,-18}, -{86,9,-17}, -{86,9,-16}, -{86,9,-15}, -{86,9,-14}, -{86,9,-13}, -{86,9,-12}, -{86,9,-11}, -{86,9,-10}, -{86,9,-9}, -{86,9,-8}, -{86,9,-7}, -{86,9,-6}, -{86,9,-5}, -{86,9,-4}, -{86,9,-3}, -{86,9,-2}, -{86,9,-1}, -{86,9,0}, -{86,9,1}, -{86,9,2}, -{86,9,3}, -{86,9,4}, -{86,9,5}, -{86,9,6}, -{86,9,7}, -{86,9,8}, -{86,9,9}, -{86,9,10}, -{86,9,11}, -{86,9,12}, -{86,9,13}, -{86,9,14}, -{86,9,15}, -{86,9,16}, -{86,9,17}, -{86,9,18}, -{86,9,19}, -{86,9,20}, -{86,9,21}, -{86,9,22}, -{86,9,23}, -{86,9,24}, -{86,9,25}, -{86,9,26}, -{86,9,27}, -{86,9,28}, -{86,9,29}, -{86,9,30}, -{86,9,31}, -{86,9,32}, -{86,9,33}, -{86,9,34}, -{86,9,35}, -{86,9,36}, -{86,9,37}, -{86,9,38}, -{86,10,-21}, -{86,10,-20}, -{86,10,-19}, -{86,10,-18}, -{86,10,-17}, -{86,10,-16}, -{86,10,-15}, -{86,10,-14}, -{86,10,-13}, -{86,10,-12}, -{86,10,-11}, -{86,10,-10}, -{86,10,-9}, -{86,10,-8}, -{86,10,-7}, -{86,10,-6}, -{86,10,-5}, -{86,10,-4}, -{86,10,-3}, -{86,10,-2}, -{86,10,-1}, -{86,10,0}, -{86,10,1}, -{86,10,2}, -{86,10,3}, -{86,10,4}, -{86,10,5}, -{86,10,6}, -{86,10,7}, -{86,10,8}, -{86,10,9}, -{86,10,10}, -{86,10,11}, -{86,10,12}, -{86,10,13}, -{86,10,14}, -{86,10,15}, -{86,10,16}, -{86,10,17}, -{86,10,18}, -{86,10,19}, -{86,10,20}, -{86,10,21}, -{86,10,22}, -{86,10,23}, -{86,10,24}, -{86,10,25}, -{86,10,26}, -{86,10,27}, -{86,10,28}, -{86,10,29}, -{86,10,30}, -{86,10,31}, -{86,10,32}, -{86,10,33}, -{86,10,34}, -{86,11,-21}, -{86,11,-20}, -{86,11,-19}, -{86,11,-18}, -{86,11,-17}, -{86,11,-16}, -{86,11,-15}, -{86,11,-14}, -{86,11,-13}, -{86,11,-12}, -{86,11,-11}, -{86,11,-10}, -{86,11,-9}, -{86,11,-8}, -{86,11,-7}, -{86,11,-6}, -{86,11,-5}, -{86,11,-4}, -{86,11,-3}, -{86,11,-2}, -{86,11,-1}, -{86,11,0}, -{86,11,1}, -{86,11,2}, -{86,11,3}, -{86,11,4}, -{86,11,5}, -{86,11,6}, -{86,11,7}, -{86,11,8}, -{86,11,9}, -{86,11,10}, -{86,11,11}, -{86,11,12}, -{86,11,13}, -{86,11,14}, -{86,11,15}, -{86,11,16}, -{86,11,17}, -{86,11,18}, -{86,11,19}, -{86,11,20}, -{86,11,21}, -{86,11,22}, -{86,11,23}, -{86,11,24}, -{86,11,25}, -{86,11,26}, -{86,11,27}, -{86,11,28}, -{86,11,29}, -{86,11,30}, -{86,12,-21}, -{86,12,-20}, -{86,12,-19}, -{86,12,-18}, -{86,12,-17}, -{86,12,-16}, -{86,12,-15}, -{86,12,-14}, -{86,12,-13}, -{86,12,-12}, -{86,12,-11}, -{86,12,-10}, -{86,12,-9}, -{86,12,-8}, -{86,12,-7}, -{86,12,-6}, -{86,12,-5}, -{86,12,-4}, -{86,12,-3}, -{86,12,-2}, -{86,12,-1}, -{86,12,0}, -{86,12,1}, -{86,12,2}, -{86,12,3}, -{86,12,4}, -{86,12,5}, -{86,12,6}, -{86,12,7}, -{86,12,8}, -{86,12,9}, -{86,12,10}, -{86,12,11}, -{86,12,12}, -{86,12,13}, -{86,12,14}, -{86,12,15}, -{86,12,16}, -{86,12,17}, -{86,12,18}, -{86,12,19}, -{86,12,20}, -{86,12,21}, -{86,12,22}, -{86,12,23}, -{86,12,24}, -{86,12,25}, -{86,12,26}, -{86,12,27}, -{86,13,-21}, -{86,13,-20}, -{86,13,-19}, -{86,13,-18}, -{86,13,-17}, -{86,13,-16}, -{86,13,-15}, -{86,13,-14}, -{86,13,-13}, -{86,13,-12}, -{86,13,-11}, -{86,13,-10}, -{86,13,-9}, -{86,13,-8}, -{86,13,-7}, -{86,13,-6}, -{86,13,-5}, -{86,13,-4}, -{86,13,-3}, -{86,13,-2}, -{86,13,-1}, -{86,13,0}, -{86,13,1}, -{86,13,2}, -{86,13,3}, -{86,13,4}, -{86,13,5}, -{86,13,6}, -{86,13,7}, -{86,13,8}, -{86,13,9}, -{86,13,10}, -{86,13,11}, -{86,13,12}, -{86,13,13}, -{86,13,14}, -{86,13,15}, -{86,13,16}, -{86,13,17}, -{86,13,18}, -{86,13,19}, -{86,13,20}, -{86,13,21}, -{86,13,22}, -{86,13,23}, -{86,13,24}, -{86,14,-21}, -{86,14,-20}, -{86,14,-19}, -{86,14,-18}, -{86,14,-17}, -{86,14,-16}, -{86,14,-15}, -{86,14,-14}, -{86,14,-13}, -{86,14,-12}, -{86,14,-11}, -{86,14,-10}, -{86,14,-9}, -{86,14,-8}, -{86,14,-7}, -{86,14,-6}, -{86,14,-5}, -{86,14,-4}, -{86,14,-3}, -{86,14,-2}, -{86,14,-1}, -{86,14,0}, -{86,14,1}, -{86,14,2}, -{86,14,3}, -{86,14,4}, -{86,14,5}, -{86,14,6}, -{86,14,7}, -{86,14,8}, -{86,14,9}, -{86,14,10}, -{86,14,11}, -{86,14,12}, -{86,14,13}, -{86,14,14}, -{86,14,15}, -{86,14,16}, -{86,14,17}, -{86,14,18}, -{86,14,19}, -{86,14,20}, -{86,15,-21}, -{86,15,-20}, -{86,15,-19}, -{86,15,-18}, -{86,15,-17}, -{86,15,-16}, -{86,15,-15}, -{86,15,-14}, -{86,15,-13}, -{86,15,-12}, -{86,15,-11}, -{86,15,-10}, -{86,15,-9}, -{86,15,-8}, -{86,15,-7}, -{86,15,-6}, -{86,15,-5}, -{86,15,-4}, -{86,15,-3}, -{86,15,-2}, -{86,15,-1}, -{86,15,0}, -{86,15,1}, -{86,15,2}, -{86,15,3}, -{86,15,4}, -{86,15,5}, -{86,15,6}, -{86,15,7}, -{86,15,8}, -{86,15,9}, -{86,15,10}, -{86,15,11}, -{86,15,12}, -{86,15,13}, -{86,15,14}, -{86,15,15}, -{86,15,16}, -{86,15,17}, -{86,16,-21}, -{86,16,-20}, -{86,16,-19}, -{86,16,-18}, -{86,16,-17}, -{86,16,-16}, -{86,16,-15}, -{86,16,-14}, -{86,16,-13}, -{86,16,-12}, -{86,16,-11}, -{86,16,-10}, -{86,16,-9}, -{86,16,-8}, -{86,16,-7}, -{86,16,-6}, -{86,16,-5}, -{86,16,-4}, -{86,16,-3}, -{86,16,-2}, -{86,16,-1}, -{86,16,0}, -{86,16,1}, -{86,16,2}, -{86,16,3}, -{86,16,4}, -{86,16,5}, -{86,16,6}, -{86,16,7}, -{86,16,8}, -{86,16,9}, -{86,16,10}, -{86,16,11}, -{86,16,12}, -{86,16,13}, -{86,16,14}, -{86,17,-21}, -{86,17,-20}, -{86,17,-19}, -{86,17,-18}, -{86,17,-17}, -{86,17,-16}, -{86,17,-15}, -{86,17,-14}, -{86,17,-13}, -{86,17,-12}, -{86,17,-11}, -{86,17,-10}, -{86,17,-9}, -{86,17,-8}, -{86,17,-7}, -{86,17,-6}, -{86,17,-5}, -{86,17,-4}, -{86,17,-3}, -{86,17,-2}, -{86,17,-1}, -{86,17,0}, -{86,17,1}, -{86,17,2}, -{86,17,3}, -{86,17,4}, -{86,17,5}, -{86,17,6}, -{86,17,7}, -{86,17,8}, -{86,17,9}, -{86,17,10}, -{86,17,11}, -{86,17,12}, -{86,18,-21}, -{86,18,-20}, -{86,18,-19}, -{86,18,-18}, -{86,18,-17}, -{86,18,-16}, -{86,18,-15}, -{86,18,-14}, -{86,18,-13}, -{86,18,-12}, -{86,18,-11}, -{86,18,-10}, -{86,18,-9}, -{86,18,-8}, -{86,18,-7}, -{86,18,-6}, -{86,18,-5}, -{86,18,-4}, -{86,18,-3}, -{86,18,-2}, -{86,18,-1}, -{86,18,0}, -{86,18,1}, -{86,18,2}, -{86,18,3}, -{86,18,4}, -{86,18,5}, -{86,18,6}, -{86,18,7}, -{86,18,8}, -{86,18,9}, -{86,19,-21}, -{86,19,-20}, -{86,19,-19}, -{86,19,-18}, -{86,19,-17}, -{86,19,-16}, -{86,19,-15}, -{86,19,-14}, -{86,19,-13}, -{86,19,-12}, -{86,19,-11}, -{86,19,-10}, -{86,19,-9}, -{86,19,-8}, -{86,19,-7}, -{86,19,-6}, -{86,19,-5}, -{86,19,-4}, -{86,19,-3}, -{86,19,-2}, -{86,19,-1}, -{86,19,0}, -{86,19,1}, -{86,19,2}, -{86,19,3}, -{86,19,4}, -{86,19,5}, -{86,19,6}, -{86,20,-21}, -{86,20,-20}, -{86,20,-19}, -{86,20,-18}, -{86,20,-17}, -{86,20,-16}, -{86,20,-15}, -{86,20,-14}, -{86,20,-13}, -{86,20,-12}, -{86,20,-11}, -{86,20,-10}, -{86,20,-9}, -{86,20,-8}, -{86,20,-7}, -{86,20,-6}, -{86,20,-5}, -{86,20,-4}, -{86,20,-3}, -{86,20,-2}, -{86,20,-1}, -{86,20,0}, -{86,20,1}, -{86,20,2}, -{86,20,3}, -{86,21,-21}, -{86,21,-20}, -{86,21,-19}, -{86,21,-18}, -{86,21,-17}, -{86,21,-16}, -{86,21,-15}, -{86,21,-14}, -{86,21,-13}, -{86,21,-12}, -{86,21,-11}, -{86,21,-10}, -{86,21,-9}, -{86,21,-8}, -{86,21,-7}, -{86,21,-6}, -{86,21,-5}, -{86,21,-4}, -{86,21,-3}, -{86,21,-2}, -{86,21,-1}, -{86,21,0}, -{86,21,1}, -{86,22,-21}, -{86,22,-20}, -{86,22,-19}, -{86,22,-18}, -{86,22,-17}, -{86,22,-16}, -{86,22,-15}, -{86,22,-14}, -{86,22,-13}, -{86,22,-12}, -{86,22,-11}, -{86,22,-10}, -{86,22,-9}, -{86,22,-8}, -{86,22,-7}, -{86,22,-6}, -{86,22,-5}, -{86,22,-4}, -{86,22,-3}, -{86,22,-2}, -{86,23,-21}, -{86,23,-20}, -{86,23,-19}, -{86,23,-18}, -{86,23,-17}, -{86,23,-16}, -{86,23,-15}, -{86,23,-14}, -{86,23,-13}, -{86,23,-12}, -{86,23,-11}, -{86,23,-10}, -{86,23,-9}, -{86,23,-8}, -{86,23,-7}, -{86,23,-6}, -{86,23,-5}, -{86,23,-4}, -{86,24,-21}, -{86,24,-20}, -{86,24,-19}, -{86,24,-18}, -{86,24,-17}, -{86,24,-16}, -{86,24,-15}, -{86,24,-14}, -{86,24,-13}, -{86,24,-12}, -{86,24,-11}, -{86,24,-10}, -{86,24,-9}, -{86,24,-8}, -{86,24,-7}, -{86,24,-6}, -{86,25,-21}, -{86,25,-20}, -{86,25,-19}, -{86,25,-18}, -{86,25,-17}, -{86,25,-16}, -{86,25,-15}, -{86,25,-14}, -{86,25,-13}, -{86,25,-12}, -{86,25,-11}, -{86,25,-10}, -{86,25,-9}, -{86,26,-21}, -{86,26,-20}, -{86,26,-19}, -{86,26,-18}, -{86,26,-17}, -{86,26,-16}, -{86,26,-15}, -{86,26,-14}, -{86,26,-13}, -{86,26,-12}, -{86,26,-11}, -{86,27,-21}, -{86,27,-20}, -{86,27,-19}, -{86,27,-18}, -{86,27,-17}, -{86,27,-16}, -{86,27,-15}, -{86,27,-14}, -{86,27,-13}, -{86,28,-21}, -{86,28,-20}, -{86,28,-19}, -{86,28,-18}, -{86,28,-17}, -{86,28,-16}, -{86,29,-21}, -{86,29,-20}, -{86,29,-19}, -{86,29,-18}, -{86,30,-20}, -{87,-85,79}, -{87,-85,80}, -{87,-85,81}, -{87,-85,82}, -{87,-84,75}, -{87,-84,76}, -{87,-84,77}, -{87,-84,78}, -{87,-84,79}, -{87,-84,80}, -{87,-84,81}, -{87,-84,82}, -{87,-83,71}, -{87,-83,72}, -{87,-83,73}, -{87,-83,74}, -{87,-83,75}, -{87,-83,76}, -{87,-83,77}, -{87,-83,78}, -{87,-83,79}, -{87,-83,80}, -{87,-83,81}, -{87,-83,82}, -{87,-82,67}, -{87,-82,68}, -{87,-82,69}, -{87,-82,70}, -{87,-82,71}, -{87,-82,72}, -{87,-82,73}, -{87,-82,74}, -{87,-82,75}, -{87,-82,76}, -{87,-82,77}, -{87,-82,78}, -{87,-82,79}, -{87,-82,80}, -{87,-82,81}, -{87,-82,82}, -{87,-81,63}, -{87,-81,64}, -{87,-81,65}, -{87,-81,66}, -{87,-81,67}, -{87,-81,68}, -{87,-81,69}, -{87,-81,70}, -{87,-81,71}, -{87,-81,72}, -{87,-81,73}, -{87,-81,74}, -{87,-81,75}, -{87,-81,76}, -{87,-81,77}, -{87,-81,78}, -{87,-81,79}, -{87,-81,80}, -{87,-81,81}, -{87,-81,82}, -{87,-80,59}, -{87,-80,60}, -{87,-80,61}, -{87,-80,62}, -{87,-80,63}, -{87,-80,64}, -{87,-80,65}, -{87,-80,66}, -{87,-80,67}, -{87,-80,68}, -{87,-80,69}, -{87,-80,70}, -{87,-80,71}, -{87,-80,72}, -{87,-80,73}, -{87,-80,74}, -{87,-80,75}, -{87,-80,76}, -{87,-80,77}, -{87,-80,78}, -{87,-80,79}, -{87,-80,80}, -{87,-80,81}, -{87,-80,82}, -{87,-80,83}, -{87,-79,56}, -{87,-79,57}, -{87,-79,58}, -{87,-79,59}, -{87,-79,60}, -{87,-79,61}, -{87,-79,62}, -{87,-79,63}, -{87,-79,64}, -{87,-79,65}, -{87,-79,66}, -{87,-79,67}, -{87,-79,68}, -{87,-79,69}, -{87,-79,70}, -{87,-79,71}, -{87,-79,72}, -{87,-79,73}, -{87,-79,74}, -{87,-79,75}, -{87,-79,76}, -{87,-79,77}, -{87,-79,78}, -{87,-79,79}, -{87,-79,80}, -{87,-79,81}, -{87,-79,82}, -{87,-79,83}, -{87,-78,53}, -{87,-78,54}, -{87,-78,55}, -{87,-78,56}, -{87,-78,57}, -{87,-78,58}, -{87,-78,59}, -{87,-78,60}, -{87,-78,61}, -{87,-78,62}, -{87,-78,63}, -{87,-78,64}, -{87,-78,65}, -{87,-78,66}, -{87,-78,67}, -{87,-78,68}, -{87,-78,69}, -{87,-78,70}, -{87,-78,71}, -{87,-78,72}, -{87,-78,73}, -{87,-78,74}, -{87,-78,75}, -{87,-78,76}, -{87,-78,77}, -{87,-78,78}, -{87,-78,79}, -{87,-78,80}, -{87,-78,81}, -{87,-78,82}, -{87,-78,83}, -{87,-77,50}, -{87,-77,51}, -{87,-77,52}, -{87,-77,53}, -{87,-77,54}, -{87,-77,55}, -{87,-77,56}, -{87,-77,57}, -{87,-77,58}, -{87,-77,59}, -{87,-77,60}, -{87,-77,61}, -{87,-77,62}, -{87,-77,63}, -{87,-77,64}, -{87,-77,65}, -{87,-77,66}, -{87,-77,67}, -{87,-77,68}, -{87,-77,69}, -{87,-77,70}, -{87,-77,71}, -{87,-77,72}, -{87,-77,73}, -{87,-77,74}, -{87,-77,75}, -{87,-77,76}, -{87,-77,77}, -{87,-77,78}, -{87,-77,79}, -{87,-77,80}, -{87,-77,81}, -{87,-77,82}, -{87,-77,83}, -{87,-76,47}, -{87,-76,48}, -{87,-76,49}, -{87,-76,50}, -{87,-76,51}, -{87,-76,52}, -{87,-76,53}, -{87,-76,54}, -{87,-76,55}, -{87,-76,56}, -{87,-76,57}, -{87,-76,58}, -{87,-76,59}, -{87,-76,60}, -{87,-76,61}, -{87,-76,62}, -{87,-76,63}, -{87,-76,64}, -{87,-76,65}, -{87,-76,66}, -{87,-76,67}, -{87,-76,68}, -{87,-76,69}, -{87,-76,70}, -{87,-76,71}, -{87,-76,72}, -{87,-76,73}, -{87,-76,74}, -{87,-76,75}, -{87,-76,76}, -{87,-76,77}, -{87,-76,78}, -{87,-76,79}, -{87,-76,80}, -{87,-76,81}, -{87,-76,82}, -{87,-76,83}, -{87,-75,44}, -{87,-75,45}, -{87,-75,46}, -{87,-75,47}, -{87,-75,48}, -{87,-75,49}, -{87,-75,50}, -{87,-75,51}, -{87,-75,52}, -{87,-75,53}, -{87,-75,54}, -{87,-75,55}, -{87,-75,56}, -{87,-75,57}, -{87,-75,58}, -{87,-75,59}, -{87,-75,60}, -{87,-75,61}, -{87,-75,62}, -{87,-75,63}, -{87,-75,64}, -{87,-75,65}, -{87,-75,66}, -{87,-75,67}, -{87,-75,68}, -{87,-75,69}, -{87,-75,70}, -{87,-75,71}, -{87,-75,72}, -{87,-75,73}, -{87,-75,74}, -{87,-75,75}, -{87,-75,76}, -{87,-75,77}, -{87,-75,78}, -{87,-75,79}, -{87,-75,80}, -{87,-75,81}, -{87,-75,82}, -{87,-75,83}, -{87,-74,41}, -{87,-74,42}, -{87,-74,43}, -{87,-74,44}, -{87,-74,45}, -{87,-74,46}, -{87,-74,47}, -{87,-74,48}, -{87,-74,49}, -{87,-74,50}, -{87,-74,51}, -{87,-74,52}, -{87,-74,53}, -{87,-74,54}, -{87,-74,55}, -{87,-74,56}, -{87,-74,57}, -{87,-74,58}, -{87,-74,59}, -{87,-74,60}, -{87,-74,61}, -{87,-74,62}, -{87,-74,63}, -{87,-74,64}, -{87,-74,65}, -{87,-74,66}, -{87,-74,67}, -{87,-74,68}, -{87,-74,69}, -{87,-74,70}, -{87,-74,71}, -{87,-74,72}, -{87,-74,73}, -{87,-74,74}, -{87,-74,75}, -{87,-74,76}, -{87,-74,77}, -{87,-74,78}, -{87,-74,79}, -{87,-74,80}, -{87,-74,81}, -{87,-74,82}, -{87,-74,83}, -{87,-73,39}, -{87,-73,40}, -{87,-73,41}, -{87,-73,42}, -{87,-73,43}, -{87,-73,44}, -{87,-73,45}, -{87,-73,46}, -{87,-73,47}, -{87,-73,48}, -{87,-73,49}, -{87,-73,50}, -{87,-73,51}, -{87,-73,52}, -{87,-73,53}, -{87,-73,54}, -{87,-73,55}, -{87,-73,56}, -{87,-73,57}, -{87,-73,58}, -{87,-73,59}, -{87,-73,60}, -{87,-73,61}, -{87,-73,62}, -{87,-73,63}, -{87,-73,64}, -{87,-73,65}, -{87,-73,66}, -{87,-73,67}, -{87,-73,68}, -{87,-73,69}, -{87,-73,70}, -{87,-73,71}, -{87,-73,72}, -{87,-73,73}, -{87,-73,74}, -{87,-73,75}, -{87,-73,76}, -{87,-73,77}, -{87,-73,78}, -{87,-73,79}, -{87,-73,80}, -{87,-73,81}, -{87,-73,82}, -{87,-73,83}, -{87,-72,36}, -{87,-72,37}, -{87,-72,38}, -{87,-72,39}, -{87,-72,40}, -{87,-72,41}, -{87,-72,42}, -{87,-72,43}, -{87,-72,44}, -{87,-72,45}, -{87,-72,46}, -{87,-72,47}, -{87,-72,48}, -{87,-72,49}, -{87,-72,50}, -{87,-72,51}, -{87,-72,52}, -{87,-72,53}, -{87,-72,54}, -{87,-72,55}, -{87,-72,56}, -{87,-72,57}, -{87,-72,58}, -{87,-72,59}, -{87,-72,60}, -{87,-72,61}, -{87,-72,62}, -{87,-72,63}, -{87,-72,64}, -{87,-72,65}, -{87,-72,66}, -{87,-72,67}, -{87,-72,68}, -{87,-72,69}, -{87,-72,70}, -{87,-72,71}, -{87,-72,72}, -{87,-72,73}, -{87,-72,74}, -{87,-72,75}, -{87,-72,76}, -{87,-72,77}, -{87,-72,78}, -{87,-72,79}, -{87,-72,80}, -{87,-72,81}, -{87,-72,82}, -{87,-72,83}, -{87,-71,34}, -{87,-71,35}, -{87,-71,36}, -{87,-71,37}, -{87,-71,38}, -{87,-71,39}, -{87,-71,40}, -{87,-71,41}, -{87,-71,42}, -{87,-71,43}, -{87,-71,44}, -{87,-71,45}, -{87,-71,46}, -{87,-71,47}, -{87,-71,48}, -{87,-71,49}, -{87,-71,50}, -{87,-71,51}, -{87,-71,52}, -{87,-71,53}, -{87,-71,54}, -{87,-71,55}, -{87,-71,56}, -{87,-71,57}, -{87,-71,58}, -{87,-71,59}, -{87,-71,60}, -{87,-71,61}, -{87,-71,62}, -{87,-71,63}, -{87,-71,64}, -{87,-71,65}, -{87,-71,66}, -{87,-71,67}, -{87,-71,68}, -{87,-71,69}, -{87,-71,70}, -{87,-71,71}, -{87,-71,72}, -{87,-71,73}, -{87,-71,74}, -{87,-71,75}, -{87,-71,76}, -{87,-71,77}, -{87,-71,78}, -{87,-71,79}, -{87,-71,80}, -{87,-71,81}, -{87,-71,82}, -{87,-71,83}, -{87,-70,31}, -{87,-70,32}, -{87,-70,33}, -{87,-70,34}, -{87,-70,35}, -{87,-70,36}, -{87,-70,37}, -{87,-70,38}, -{87,-70,39}, -{87,-70,40}, -{87,-70,41}, -{87,-70,42}, -{87,-70,43}, -{87,-70,44}, -{87,-70,45}, -{87,-70,46}, -{87,-70,47}, -{87,-70,48}, -{87,-70,49}, -{87,-70,50}, -{87,-70,51}, -{87,-70,52}, -{87,-70,53}, -{87,-70,54}, -{87,-70,55}, -{87,-70,56}, -{87,-70,57}, -{87,-70,58}, -{87,-70,59}, -{87,-70,60}, -{87,-70,61}, -{87,-70,62}, -{87,-70,63}, -{87,-70,64}, -{87,-70,65}, -{87,-70,66}, -{87,-70,67}, -{87,-70,68}, -{87,-70,69}, -{87,-70,70}, -{87,-70,71}, -{87,-70,72}, -{87,-70,73}, -{87,-70,74}, -{87,-70,75}, -{87,-70,76}, -{87,-70,77}, -{87,-70,78}, -{87,-70,79}, -{87,-70,80}, -{87,-70,81}, -{87,-70,82}, -{87,-70,83}, -{87,-69,29}, -{87,-69,30}, -{87,-69,31}, -{87,-69,32}, -{87,-69,33}, -{87,-69,34}, -{87,-69,35}, -{87,-69,36}, -{87,-69,37}, -{87,-69,38}, -{87,-69,39}, -{87,-69,40}, -{87,-69,41}, -{87,-69,42}, -{87,-69,43}, -{87,-69,44}, -{87,-69,45}, -{87,-69,46}, -{87,-69,47}, -{87,-69,48}, -{87,-69,49}, -{87,-69,50}, -{87,-69,51}, -{87,-69,52}, -{87,-69,53}, -{87,-69,54}, -{87,-69,55}, -{87,-69,56}, -{87,-69,57}, -{87,-69,58}, -{87,-69,59}, -{87,-69,60}, -{87,-69,61}, -{87,-69,62}, -{87,-69,63}, -{87,-69,64}, -{87,-69,65}, -{87,-69,66}, -{87,-69,67}, -{87,-69,68}, -{87,-69,69}, -{87,-69,70}, -{87,-69,71}, -{87,-69,72}, -{87,-69,73}, -{87,-69,74}, -{87,-69,75}, -{87,-69,76}, -{87,-69,77}, -{87,-69,78}, -{87,-69,79}, -{87,-69,80}, -{87,-69,81}, -{87,-69,82}, -{87,-69,83}, -{87,-68,27}, -{87,-68,28}, -{87,-68,29}, -{87,-68,30}, -{87,-68,31}, -{87,-68,32}, -{87,-68,33}, -{87,-68,34}, -{87,-68,35}, -{87,-68,36}, -{87,-68,37}, -{87,-68,38}, -{87,-68,39}, -{87,-68,40}, -{87,-68,41}, -{87,-68,42}, -{87,-68,43}, -{87,-68,44}, -{87,-68,45}, -{87,-68,46}, -{87,-68,47}, -{87,-68,48}, -{87,-68,49}, -{87,-68,50}, -{87,-68,51}, -{87,-68,52}, -{87,-68,53}, -{87,-68,54}, -{87,-68,55}, -{87,-68,56}, -{87,-68,57}, -{87,-68,58}, -{87,-68,59}, -{87,-68,60}, -{87,-68,61}, -{87,-68,62}, -{87,-68,63}, -{87,-68,64}, -{87,-68,65}, -{87,-68,66}, -{87,-68,67}, -{87,-68,68}, -{87,-68,69}, -{87,-68,70}, -{87,-68,71}, -{87,-68,72}, -{87,-68,73}, -{87,-68,74}, -{87,-68,75}, -{87,-68,76}, -{87,-68,77}, -{87,-68,78}, -{87,-68,79}, -{87,-68,80}, -{87,-68,81}, -{87,-68,82}, -{87,-68,83}, -{87,-67,25}, -{87,-67,26}, -{87,-67,27}, -{87,-67,28}, -{87,-67,29}, -{87,-67,30}, -{87,-67,31}, -{87,-67,32}, -{87,-67,33}, -{87,-67,34}, -{87,-67,35}, -{87,-67,36}, -{87,-67,37}, -{87,-67,38}, -{87,-67,39}, -{87,-67,40}, -{87,-67,41}, -{87,-67,42}, -{87,-67,43}, -{87,-67,44}, -{87,-67,45}, -{87,-67,46}, -{87,-67,47}, -{87,-67,48}, -{87,-67,49}, -{87,-67,50}, -{87,-67,51}, -{87,-67,52}, -{87,-67,53}, -{87,-67,54}, -{87,-67,55}, -{87,-67,56}, -{87,-67,57}, -{87,-67,58}, -{87,-67,59}, -{87,-67,60}, -{87,-67,61}, -{87,-67,62}, -{87,-67,63}, -{87,-67,64}, -{87,-67,65}, -{87,-67,66}, -{87,-67,67}, -{87,-67,68}, -{87,-67,69}, -{87,-67,70}, -{87,-67,71}, -{87,-67,72}, -{87,-67,73}, -{87,-67,74}, -{87,-67,75}, -{87,-67,76}, -{87,-67,77}, -{87,-67,78}, -{87,-67,79}, -{87,-67,80}, -{87,-67,81}, -{87,-67,82}, -{87,-67,83}, -{87,-66,22}, -{87,-66,23}, -{87,-66,24}, -{87,-66,25}, -{87,-66,26}, -{87,-66,27}, -{87,-66,28}, -{87,-66,29}, -{87,-66,30}, -{87,-66,31}, -{87,-66,32}, -{87,-66,33}, -{87,-66,34}, -{87,-66,35}, -{87,-66,36}, -{87,-66,37}, -{87,-66,38}, -{87,-66,39}, -{87,-66,40}, -{87,-66,41}, -{87,-66,42}, -{87,-66,43}, -{87,-66,44}, -{87,-66,45}, -{87,-66,46}, -{87,-66,47}, -{87,-66,48}, -{87,-66,49}, -{87,-66,50}, -{87,-66,51}, -{87,-66,52}, -{87,-66,53}, -{87,-66,54}, -{87,-66,55}, -{87,-66,56}, -{87,-66,57}, -{87,-66,58}, -{87,-66,59}, -{87,-66,60}, -{87,-66,61}, -{87,-66,62}, -{87,-66,63}, -{87,-66,64}, -{87,-66,65}, -{87,-66,66}, -{87,-66,67}, -{87,-66,68}, -{87,-66,69}, -{87,-66,70}, -{87,-66,71}, -{87,-66,72}, -{87,-66,73}, -{87,-66,74}, -{87,-66,75}, -{87,-66,76}, -{87,-66,77}, -{87,-66,78}, -{87,-66,79}, -{87,-66,80}, -{87,-66,81}, -{87,-66,82}, -{87,-66,83}, -{87,-65,20}, -{87,-65,21}, -{87,-65,22}, -{87,-65,23}, -{87,-65,24}, -{87,-65,25}, -{87,-65,26}, -{87,-65,27}, -{87,-65,28}, -{87,-65,29}, -{87,-65,30}, -{87,-65,31}, -{87,-65,32}, -{87,-65,33}, -{87,-65,34}, -{87,-65,35}, -{87,-65,36}, -{87,-65,37}, -{87,-65,38}, -{87,-65,39}, -{87,-65,40}, -{87,-65,41}, -{87,-65,42}, -{87,-65,43}, -{87,-65,44}, -{87,-65,45}, -{87,-65,46}, -{87,-65,47}, -{87,-65,48}, -{87,-65,49}, -{87,-65,50}, -{87,-65,51}, -{87,-65,52}, -{87,-65,53}, -{87,-65,54}, -{87,-65,55}, -{87,-65,56}, -{87,-65,57}, -{87,-65,58}, -{87,-65,59}, -{87,-65,60}, -{87,-65,61}, -{87,-65,62}, -{87,-65,63}, -{87,-65,64}, -{87,-65,65}, -{87,-65,66}, -{87,-65,67}, -{87,-65,68}, -{87,-65,69}, -{87,-65,70}, -{87,-65,71}, -{87,-65,72}, -{87,-65,73}, -{87,-65,74}, -{87,-65,75}, -{87,-65,76}, -{87,-65,77}, -{87,-65,78}, -{87,-65,79}, -{87,-65,80}, -{87,-65,81}, -{87,-65,82}, -{87,-65,83}, -{87,-64,18}, -{87,-64,19}, -{87,-64,20}, -{87,-64,21}, -{87,-64,22}, -{87,-64,23}, -{87,-64,24}, -{87,-64,25}, -{87,-64,26}, -{87,-64,27}, -{87,-64,28}, -{87,-64,29}, -{87,-64,30}, -{87,-64,31}, -{87,-64,32}, -{87,-64,33}, -{87,-64,34}, -{87,-64,35}, -{87,-64,36}, -{87,-64,37}, -{87,-64,38}, -{87,-64,39}, -{87,-64,40}, -{87,-64,41}, -{87,-64,42}, -{87,-64,43}, -{87,-64,44}, -{87,-64,45}, -{87,-64,46}, -{87,-64,47}, -{87,-64,48}, -{87,-64,49}, -{87,-64,50}, -{87,-64,51}, -{87,-64,52}, -{87,-64,53}, -{87,-64,54}, -{87,-64,55}, -{87,-64,56}, -{87,-64,57}, -{87,-64,58}, -{87,-64,59}, -{87,-64,60}, -{87,-64,61}, -{87,-64,62}, -{87,-64,63}, -{87,-64,64}, -{87,-64,65}, -{87,-64,66}, -{87,-64,67}, -{87,-64,68}, -{87,-64,69}, -{87,-64,70}, -{87,-64,71}, -{87,-64,72}, -{87,-64,73}, -{87,-64,74}, -{87,-64,75}, -{87,-64,76}, -{87,-64,77}, -{87,-64,78}, -{87,-64,79}, -{87,-64,80}, -{87,-64,81}, -{87,-64,82}, -{87,-64,83}, -{87,-63,16}, -{87,-63,17}, -{87,-63,18}, -{87,-63,19}, -{87,-63,20}, -{87,-63,21}, -{87,-63,22}, -{87,-63,23}, -{87,-63,24}, -{87,-63,25}, -{87,-63,26}, -{87,-63,27}, -{87,-63,28}, -{87,-63,29}, -{87,-63,30}, -{87,-63,31}, -{87,-63,32}, -{87,-63,33}, -{87,-63,34}, -{87,-63,35}, -{87,-63,36}, -{87,-63,37}, -{87,-63,38}, -{87,-63,39}, -{87,-63,40}, -{87,-63,41}, -{87,-63,42}, -{87,-63,43}, -{87,-63,44}, -{87,-63,45}, -{87,-63,46}, -{87,-63,47}, -{87,-63,48}, -{87,-63,49}, -{87,-63,50}, -{87,-63,51}, -{87,-63,52}, -{87,-63,53}, -{87,-63,54}, -{87,-63,55}, -{87,-63,56}, -{87,-63,57}, -{87,-63,58}, -{87,-63,59}, -{87,-63,60}, -{87,-63,61}, -{87,-63,62}, -{87,-63,63}, -{87,-63,64}, -{87,-63,65}, -{87,-63,66}, -{87,-63,67}, -{87,-63,68}, -{87,-63,69}, -{87,-63,70}, -{87,-63,71}, -{87,-63,72}, -{87,-63,73}, -{87,-63,74}, -{87,-63,75}, -{87,-63,76}, -{87,-63,77}, -{87,-63,78}, -{87,-63,79}, -{87,-63,80}, -{87,-63,81}, -{87,-63,82}, -{87,-63,83}, -{87,-62,14}, -{87,-62,15}, -{87,-62,16}, -{87,-62,17}, -{87,-62,18}, -{87,-62,19}, -{87,-62,20}, -{87,-62,21}, -{87,-62,22}, -{87,-62,23}, -{87,-62,24}, -{87,-62,25}, -{87,-62,26}, -{87,-62,27}, -{87,-62,28}, -{87,-62,29}, -{87,-62,30}, -{87,-62,31}, -{87,-62,32}, -{87,-62,33}, -{87,-62,34}, -{87,-62,35}, -{87,-62,36}, -{87,-62,37}, -{87,-62,38}, -{87,-62,39}, -{87,-62,40}, -{87,-62,41}, -{87,-62,42}, -{87,-62,43}, -{87,-62,44}, -{87,-62,45}, -{87,-62,46}, -{87,-62,47}, -{87,-62,48}, -{87,-62,49}, -{87,-62,50}, -{87,-62,51}, -{87,-62,52}, -{87,-62,53}, -{87,-62,54}, -{87,-62,55}, -{87,-62,56}, -{87,-62,57}, -{87,-62,58}, -{87,-62,59}, -{87,-62,60}, -{87,-62,61}, -{87,-62,62}, -{87,-62,63}, -{87,-62,64}, -{87,-62,65}, -{87,-62,66}, -{87,-62,67}, -{87,-62,68}, -{87,-62,69}, -{87,-62,70}, -{87,-62,71}, -{87,-62,72}, -{87,-62,73}, -{87,-62,74}, -{87,-62,75}, -{87,-62,76}, -{87,-62,77}, -{87,-62,78}, -{87,-62,79}, -{87,-62,80}, -{87,-62,81}, -{87,-62,82}, -{87,-62,83}, -{87,-61,12}, -{87,-61,13}, -{87,-61,14}, -{87,-61,15}, -{87,-61,16}, -{87,-61,17}, -{87,-61,18}, -{87,-61,19}, -{87,-61,20}, -{87,-61,21}, -{87,-61,22}, -{87,-61,23}, -{87,-61,24}, -{87,-61,25}, -{87,-61,26}, -{87,-61,27}, -{87,-61,28}, -{87,-61,29}, -{87,-61,30}, -{87,-61,31}, -{87,-61,32}, -{87,-61,33}, -{87,-61,34}, -{87,-61,35}, -{87,-61,36}, -{87,-61,37}, -{87,-61,38}, -{87,-61,39}, -{87,-61,40}, -{87,-61,41}, -{87,-61,42}, -{87,-61,43}, -{87,-61,44}, -{87,-61,45}, -{87,-61,46}, -{87,-61,47}, -{87,-61,48}, -{87,-61,49}, -{87,-61,50}, -{87,-61,51}, -{87,-61,52}, -{87,-61,53}, -{87,-61,54}, -{87,-61,55}, -{87,-61,56}, -{87,-61,57}, -{87,-61,58}, -{87,-61,59}, -{87,-61,60}, -{87,-61,61}, -{87,-61,62}, -{87,-61,63}, -{87,-61,64}, -{87,-61,65}, -{87,-61,66}, -{87,-61,67}, -{87,-61,68}, -{87,-61,69}, -{87,-61,70}, -{87,-61,71}, -{87,-61,72}, -{87,-61,73}, -{87,-61,74}, -{87,-61,75}, -{87,-61,76}, -{87,-61,77}, -{87,-61,78}, -{87,-61,79}, -{87,-61,80}, -{87,-61,81}, -{87,-61,82}, -{87,-61,83}, -{87,-60,10}, -{87,-60,11}, -{87,-60,12}, -{87,-60,13}, -{87,-60,14}, -{87,-60,15}, -{87,-60,16}, -{87,-60,17}, -{87,-60,18}, -{87,-60,19}, -{87,-60,20}, -{87,-60,21}, -{87,-60,22}, -{87,-60,23}, -{87,-60,24}, -{87,-60,25}, -{87,-60,26}, -{87,-60,27}, -{87,-60,28}, -{87,-60,29}, -{87,-60,30}, -{87,-60,31}, -{87,-60,32}, -{87,-60,33}, -{87,-60,34}, -{87,-60,35}, -{87,-60,36}, -{87,-60,37}, -{87,-60,38}, -{87,-60,39}, -{87,-60,40}, -{87,-60,41}, -{87,-60,42}, -{87,-60,43}, -{87,-60,44}, -{87,-60,45}, -{87,-60,46}, -{87,-60,47}, -{87,-60,48}, -{87,-60,49}, -{87,-60,50}, -{87,-60,51}, -{87,-60,52}, -{87,-60,53}, -{87,-60,54}, -{87,-60,55}, -{87,-60,56}, -{87,-60,57}, -{87,-60,58}, -{87,-60,59}, -{87,-60,60}, -{87,-60,61}, -{87,-60,62}, -{87,-60,63}, -{87,-60,64}, -{87,-60,65}, -{87,-60,66}, -{87,-60,67}, -{87,-60,68}, -{87,-60,69}, -{87,-60,70}, -{87,-60,71}, -{87,-60,72}, -{87,-60,73}, -{87,-60,74}, -{87,-60,75}, -{87,-60,76}, -{87,-60,77}, -{87,-60,78}, -{87,-60,79}, -{87,-60,80}, -{87,-60,81}, -{87,-60,82}, -{87,-60,83}, -{87,-59,8}, -{87,-59,9}, -{87,-59,10}, -{87,-59,11}, -{87,-59,12}, -{87,-59,13}, -{87,-59,14}, -{87,-59,15}, -{87,-59,16}, -{87,-59,17}, -{87,-59,18}, -{87,-59,19}, -{87,-59,20}, -{87,-59,21}, -{87,-59,22}, -{87,-59,23}, -{87,-59,24}, -{87,-59,25}, -{87,-59,26}, -{87,-59,27}, -{87,-59,28}, -{87,-59,29}, -{87,-59,30}, -{87,-59,31}, -{87,-59,32}, -{87,-59,33}, -{87,-59,34}, -{87,-59,35}, -{87,-59,36}, -{87,-59,37}, -{87,-59,38}, -{87,-59,39}, -{87,-59,40}, -{87,-59,41}, -{87,-59,42}, -{87,-59,43}, -{87,-59,44}, -{87,-59,45}, -{87,-59,46}, -{87,-59,47}, -{87,-59,48}, -{87,-59,49}, -{87,-59,50}, -{87,-59,51}, -{87,-59,52}, -{87,-59,53}, -{87,-59,54}, -{87,-59,55}, -{87,-59,56}, -{87,-59,57}, -{87,-59,58}, -{87,-59,59}, -{87,-59,60}, -{87,-59,61}, -{87,-59,62}, -{87,-59,63}, -{87,-59,64}, -{87,-59,65}, -{87,-59,66}, -{87,-59,67}, -{87,-59,68}, -{87,-59,69}, -{87,-59,70}, -{87,-59,71}, -{87,-59,72}, -{87,-59,73}, -{87,-59,74}, -{87,-59,75}, -{87,-59,76}, -{87,-59,77}, -{87,-59,78}, -{87,-59,79}, -{87,-59,80}, -{87,-59,81}, -{87,-59,82}, -{87,-59,83}, -{87,-58,7}, -{87,-58,8}, -{87,-58,9}, -{87,-58,10}, -{87,-58,11}, -{87,-58,12}, -{87,-58,13}, -{87,-58,14}, -{87,-58,15}, -{87,-58,16}, -{87,-58,17}, -{87,-58,18}, -{87,-58,19}, -{87,-58,20}, -{87,-58,21}, -{87,-58,22}, -{87,-58,23}, -{87,-58,24}, -{87,-58,25}, -{87,-58,26}, -{87,-58,27}, -{87,-58,28}, -{87,-58,29}, -{87,-58,30}, -{87,-58,31}, -{87,-58,32}, -{87,-58,33}, -{87,-58,34}, -{87,-58,35}, -{87,-58,36}, -{87,-58,37}, -{87,-58,38}, -{87,-58,39}, -{87,-58,40}, -{87,-58,41}, -{87,-58,42}, -{87,-58,43}, -{87,-58,44}, -{87,-58,45}, -{87,-58,46}, -{87,-58,47}, -{87,-58,48}, -{87,-58,49}, -{87,-58,50}, -{87,-58,51}, -{87,-58,52}, -{87,-58,53}, -{87,-58,54}, -{87,-58,55}, -{87,-58,56}, -{87,-58,57}, -{87,-58,58}, -{87,-58,59}, -{87,-58,60}, -{87,-58,61}, -{87,-58,62}, -{87,-58,63}, -{87,-58,64}, -{87,-58,65}, -{87,-58,66}, -{87,-58,67}, -{87,-58,68}, -{87,-58,69}, -{87,-58,70}, -{87,-58,71}, -{87,-58,72}, -{87,-58,73}, -{87,-58,74}, -{87,-58,75}, -{87,-58,76}, -{87,-58,77}, -{87,-58,78}, -{87,-58,79}, -{87,-58,80}, -{87,-58,81}, -{87,-58,82}, -{87,-58,83}, -{87,-58,84}, -{87,-57,5}, -{87,-57,6}, -{87,-57,7}, -{87,-57,8}, -{87,-57,9}, -{87,-57,10}, -{87,-57,11}, -{87,-57,12}, -{87,-57,13}, -{87,-57,14}, -{87,-57,15}, -{87,-57,16}, -{87,-57,17}, -{87,-57,18}, -{87,-57,19}, -{87,-57,20}, -{87,-57,21}, -{87,-57,22}, -{87,-57,23}, -{87,-57,24}, -{87,-57,25}, -{87,-57,26}, -{87,-57,27}, -{87,-57,28}, -{87,-57,29}, -{87,-57,30}, -{87,-57,31}, -{87,-57,32}, -{87,-57,33}, -{87,-57,34}, -{87,-57,35}, -{87,-57,36}, -{87,-57,37}, -{87,-57,38}, -{87,-57,39}, -{87,-57,40}, -{87,-57,41}, -{87,-57,42}, -{87,-57,43}, -{87,-57,44}, -{87,-57,45}, -{87,-57,46}, -{87,-57,47}, -{87,-57,48}, -{87,-57,49}, -{87,-57,50}, -{87,-57,51}, -{87,-57,52}, -{87,-57,53}, -{87,-57,54}, -{87,-57,55}, -{87,-57,56}, -{87,-57,57}, -{87,-57,58}, -{87,-57,59}, -{87,-57,60}, -{87,-57,61}, -{87,-57,62}, -{87,-57,63}, -{87,-57,64}, -{87,-57,65}, -{87,-57,66}, -{87,-57,67}, -{87,-57,68}, -{87,-57,69}, -{87,-57,70}, -{87,-57,71}, -{87,-57,72}, -{87,-57,73}, -{87,-57,74}, -{87,-57,75}, -{87,-57,76}, -{87,-57,77}, -{87,-57,78}, -{87,-57,79}, -{87,-57,80}, -{87,-57,81}, -{87,-57,82}, -{87,-57,83}, -{87,-57,84}, -{87,-56,3}, -{87,-56,4}, -{87,-56,5}, -{87,-56,6}, -{87,-56,7}, -{87,-56,8}, -{87,-56,9}, -{87,-56,10}, -{87,-56,11}, -{87,-56,12}, -{87,-56,13}, -{87,-56,14}, -{87,-56,15}, -{87,-56,16}, -{87,-56,17}, -{87,-56,18}, -{87,-56,19}, -{87,-56,20}, -{87,-56,21}, -{87,-56,22}, -{87,-56,23}, -{87,-56,24}, -{87,-56,25}, -{87,-56,26}, -{87,-56,27}, -{87,-56,28}, -{87,-56,29}, -{87,-56,30}, -{87,-56,31}, -{87,-56,32}, -{87,-56,33}, -{87,-56,34}, -{87,-56,35}, -{87,-56,36}, -{87,-56,37}, -{87,-56,38}, -{87,-56,39}, -{87,-56,40}, -{87,-56,41}, -{87,-56,42}, -{87,-56,43}, -{87,-56,44}, -{87,-56,45}, -{87,-56,46}, -{87,-56,47}, -{87,-56,48}, -{87,-56,49}, -{87,-56,50}, -{87,-56,51}, -{87,-56,52}, -{87,-56,53}, -{87,-56,54}, -{87,-56,55}, -{87,-56,56}, -{87,-56,57}, -{87,-56,58}, -{87,-56,59}, -{87,-56,60}, -{87,-56,61}, -{87,-56,62}, -{87,-56,63}, -{87,-56,64}, -{87,-56,65}, -{87,-56,66}, -{87,-56,67}, -{87,-56,68}, -{87,-56,69}, -{87,-56,70}, -{87,-56,71}, -{87,-56,72}, -{87,-56,73}, -{87,-56,74}, -{87,-56,75}, -{87,-56,76}, -{87,-56,77}, -{87,-56,78}, -{87,-56,79}, -{87,-56,80}, -{87,-56,81}, -{87,-56,82}, -{87,-56,83}, -{87,-56,84}, -{87,-55,1}, -{87,-55,2}, -{87,-55,3}, -{87,-55,4}, -{87,-55,5}, -{87,-55,6}, -{87,-55,7}, -{87,-55,8}, -{87,-55,9}, -{87,-55,10}, -{87,-55,11}, -{87,-55,12}, -{87,-55,13}, -{87,-55,14}, -{87,-55,15}, -{87,-55,16}, -{87,-55,17}, -{87,-55,18}, -{87,-55,19}, -{87,-55,20}, -{87,-55,21}, -{87,-55,22}, -{87,-55,23}, -{87,-55,24}, -{87,-55,25}, -{87,-55,26}, -{87,-55,27}, -{87,-55,28}, -{87,-55,29}, -{87,-55,30}, -{87,-55,31}, -{87,-55,32}, -{87,-55,33}, -{87,-55,34}, -{87,-55,35}, -{87,-55,36}, -{87,-55,37}, -{87,-55,38}, -{87,-55,39}, -{87,-55,40}, -{87,-55,41}, -{87,-55,42}, -{87,-55,43}, -{87,-55,44}, -{87,-55,45}, -{87,-55,46}, -{87,-55,47}, -{87,-55,48}, -{87,-55,49}, -{87,-55,50}, -{87,-55,51}, -{87,-55,52}, -{87,-55,53}, -{87,-55,54}, -{87,-55,55}, -{87,-55,56}, -{87,-55,57}, -{87,-55,58}, -{87,-55,59}, -{87,-55,60}, -{87,-55,61}, -{87,-55,62}, -{87,-55,63}, -{87,-55,64}, -{87,-55,65}, -{87,-55,66}, -{87,-55,67}, -{87,-55,68}, -{87,-55,69}, -{87,-55,70}, -{87,-55,71}, -{87,-55,72}, -{87,-55,73}, -{87,-55,74}, -{87,-55,75}, -{87,-55,76}, -{87,-55,77}, -{87,-55,78}, -{87,-55,79}, -{87,-55,80}, -{87,-55,81}, -{87,-55,82}, -{87,-55,83}, -{87,-55,84}, -{87,-54,-1}, -{87,-54,0}, -{87,-54,1}, -{87,-54,2}, -{87,-54,3}, -{87,-54,4}, -{87,-54,5}, -{87,-54,6}, -{87,-54,7}, -{87,-54,8}, -{87,-54,9}, -{87,-54,10}, -{87,-54,11}, -{87,-54,12}, -{87,-54,13}, -{87,-54,14}, -{87,-54,15}, -{87,-54,16}, -{87,-54,17}, -{87,-54,18}, -{87,-54,19}, -{87,-54,20}, -{87,-54,21}, -{87,-54,22}, -{87,-54,23}, -{87,-54,24}, -{87,-54,25}, -{87,-54,26}, -{87,-54,27}, -{87,-54,28}, -{87,-54,29}, -{87,-54,30}, -{87,-54,31}, -{87,-54,32}, -{87,-54,33}, -{87,-54,34}, -{87,-54,35}, -{87,-54,36}, -{87,-54,37}, -{87,-54,38}, -{87,-54,39}, -{87,-54,40}, -{87,-54,41}, -{87,-54,42}, -{87,-54,43}, -{87,-54,44}, -{87,-54,45}, -{87,-54,46}, -{87,-54,47}, -{87,-54,48}, -{87,-54,49}, -{87,-54,50}, -{87,-54,51}, -{87,-54,52}, -{87,-54,53}, -{87,-54,54}, -{87,-54,55}, -{87,-54,56}, -{87,-54,57}, -{87,-54,58}, -{87,-54,59}, -{87,-54,60}, -{87,-54,61}, -{87,-54,62}, -{87,-54,63}, -{87,-54,64}, -{87,-54,65}, -{87,-54,66}, -{87,-54,67}, -{87,-54,68}, -{87,-54,69}, -{87,-54,70}, -{87,-54,71}, -{87,-54,72}, -{87,-54,73}, -{87,-54,74}, -{87,-54,75}, -{87,-54,76}, -{87,-54,77}, -{87,-54,78}, -{87,-54,79}, -{87,-54,80}, -{87,-54,81}, -{87,-54,82}, -{87,-54,83}, -{87,-54,84}, -{87,-53,-2}, -{87,-53,-1}, -{87,-53,0}, -{87,-53,1}, -{87,-53,2}, -{87,-53,3}, -{87,-53,4}, -{87,-53,5}, -{87,-53,6}, -{87,-53,7}, -{87,-53,8}, -{87,-53,9}, -{87,-53,10}, -{87,-53,11}, -{87,-53,12}, -{87,-53,13}, -{87,-53,14}, -{87,-53,15}, -{87,-53,16}, -{87,-53,17}, -{87,-53,18}, -{87,-53,19}, -{87,-53,20}, -{87,-53,21}, -{87,-53,22}, -{87,-53,23}, -{87,-53,24}, -{87,-53,25}, -{87,-53,26}, -{87,-53,27}, -{87,-53,28}, -{87,-53,29}, -{87,-53,30}, -{87,-53,31}, -{87,-53,32}, -{87,-53,33}, -{87,-53,34}, -{87,-53,35}, -{87,-53,36}, -{87,-53,37}, -{87,-53,38}, -{87,-53,39}, -{87,-53,40}, -{87,-53,41}, -{87,-53,42}, -{87,-53,43}, -{87,-53,44}, -{87,-53,45}, -{87,-53,46}, -{87,-53,47}, -{87,-53,48}, -{87,-53,49}, -{87,-53,50}, -{87,-53,51}, -{87,-53,52}, -{87,-53,53}, -{87,-53,54}, -{87,-53,55}, -{87,-53,56}, -{87,-53,57}, -{87,-53,58}, -{87,-53,59}, -{87,-53,60}, -{87,-53,61}, -{87,-53,62}, -{87,-53,63}, -{87,-53,64}, -{87,-53,65}, -{87,-53,66}, -{87,-53,67}, -{87,-53,68}, -{87,-53,69}, -{87,-53,70}, -{87,-53,71}, -{87,-53,72}, -{87,-53,73}, -{87,-53,74}, -{87,-53,75}, -{87,-53,76}, -{87,-53,77}, -{87,-53,78}, -{87,-53,79}, -{87,-53,80}, -{87,-53,81}, -{87,-53,82}, -{87,-53,83}, -{87,-53,84}, -{87,-52,-4}, -{87,-52,-3}, -{87,-52,-2}, -{87,-52,-1}, -{87,-52,0}, -{87,-52,1}, -{87,-52,2}, -{87,-52,3}, -{87,-52,4}, -{87,-52,5}, -{87,-52,6}, -{87,-52,7}, -{87,-52,8}, -{87,-52,9}, -{87,-52,10}, -{87,-52,11}, -{87,-52,12}, -{87,-52,13}, -{87,-52,14}, -{87,-52,15}, -{87,-52,16}, -{87,-52,17}, -{87,-52,18}, -{87,-52,19}, -{87,-52,20}, -{87,-52,21}, -{87,-52,22}, -{87,-52,23}, -{87,-52,24}, -{87,-52,25}, -{87,-52,26}, -{87,-52,27}, -{87,-52,28}, -{87,-52,29}, -{87,-52,30}, -{87,-52,31}, -{87,-52,32}, -{87,-52,33}, -{87,-52,34}, -{87,-52,35}, -{87,-52,36}, -{87,-52,37}, -{87,-52,38}, -{87,-52,39}, -{87,-52,40}, -{87,-52,41}, -{87,-52,42}, -{87,-52,43}, -{87,-52,44}, -{87,-52,45}, -{87,-52,46}, -{87,-52,47}, -{87,-52,48}, -{87,-52,49}, -{87,-52,50}, -{87,-52,51}, -{87,-52,52}, -{87,-52,53}, -{87,-52,54}, -{87,-52,55}, -{87,-52,56}, -{87,-52,57}, -{87,-52,58}, -{87,-52,59}, -{87,-52,60}, -{87,-52,61}, -{87,-52,62}, -{87,-52,63}, -{87,-52,64}, -{87,-52,65}, -{87,-52,66}, -{87,-52,67}, -{87,-52,68}, -{87,-52,69}, -{87,-52,70}, -{87,-52,71}, -{87,-52,72}, -{87,-52,73}, -{87,-52,74}, -{87,-52,75}, -{87,-52,76}, -{87,-52,77}, -{87,-52,78}, -{87,-52,79}, -{87,-52,80}, -{87,-52,81}, -{87,-52,82}, -{87,-52,83}, -{87,-52,84}, -{87,-51,-6}, -{87,-51,-5}, -{87,-51,-4}, -{87,-51,-3}, -{87,-51,-2}, -{87,-51,-1}, -{87,-51,0}, -{87,-51,1}, -{87,-51,2}, -{87,-51,3}, -{87,-51,4}, -{87,-51,5}, -{87,-51,6}, -{87,-51,7}, -{87,-51,8}, -{87,-51,9}, -{87,-51,10}, -{87,-51,11}, -{87,-51,12}, -{87,-51,13}, -{87,-51,14}, -{87,-51,15}, -{87,-51,16}, -{87,-51,17}, -{87,-51,18}, -{87,-51,19}, -{87,-51,20}, -{87,-51,21}, -{87,-51,22}, -{87,-51,23}, -{87,-51,24}, -{87,-51,25}, -{87,-51,26}, -{87,-51,27}, -{87,-51,28}, -{87,-51,29}, -{87,-51,30}, -{87,-51,31}, -{87,-51,32}, -{87,-51,33}, -{87,-51,34}, -{87,-51,35}, -{87,-51,36}, -{87,-51,37}, -{87,-51,38}, -{87,-51,39}, -{87,-51,40}, -{87,-51,41}, -{87,-51,42}, -{87,-51,43}, -{87,-51,44}, -{87,-51,45}, -{87,-51,46}, -{87,-51,47}, -{87,-51,48}, -{87,-51,49}, -{87,-51,50}, -{87,-51,51}, -{87,-51,52}, -{87,-51,53}, -{87,-51,54}, -{87,-51,55}, -{87,-51,56}, -{87,-51,57}, -{87,-51,58}, -{87,-51,59}, -{87,-51,60}, -{87,-51,61}, -{87,-51,62}, -{87,-51,63}, -{87,-51,64}, -{87,-51,65}, -{87,-51,66}, -{87,-51,67}, -{87,-51,68}, -{87,-51,69}, -{87,-51,70}, -{87,-51,71}, -{87,-51,72}, -{87,-51,73}, -{87,-51,74}, -{87,-51,75}, -{87,-51,76}, -{87,-51,77}, -{87,-51,78}, -{87,-51,79}, -{87,-51,80}, -{87,-51,81}, -{87,-51,82}, -{87,-51,83}, -{87,-51,84}, -{87,-50,-7}, -{87,-50,-6}, -{87,-50,-5}, -{87,-50,-4}, -{87,-50,-3}, -{87,-50,-2}, -{87,-50,-1}, -{87,-50,0}, -{87,-50,1}, -{87,-50,2}, -{87,-50,3}, -{87,-50,4}, -{87,-50,5}, -{87,-50,6}, -{87,-50,7}, -{87,-50,8}, -{87,-50,9}, -{87,-50,10}, -{87,-50,11}, -{87,-50,12}, -{87,-50,13}, -{87,-50,14}, -{87,-50,15}, -{87,-50,16}, -{87,-50,17}, -{87,-50,18}, -{87,-50,19}, -{87,-50,20}, -{87,-50,21}, -{87,-50,22}, -{87,-50,23}, -{87,-50,24}, -{87,-50,25}, -{87,-50,26}, -{87,-50,27}, -{87,-50,28}, -{87,-50,29}, -{87,-50,30}, -{87,-50,31}, -{87,-50,32}, -{87,-50,33}, -{87,-50,34}, -{87,-50,35}, -{87,-50,36}, -{87,-50,37}, -{87,-50,38}, -{87,-50,39}, -{87,-50,40}, -{87,-50,41}, -{87,-50,42}, -{87,-50,43}, -{87,-50,44}, -{87,-50,45}, -{87,-50,46}, -{87,-50,47}, -{87,-50,48}, -{87,-50,49}, -{87,-50,50}, -{87,-50,51}, -{87,-50,52}, -{87,-50,53}, -{87,-50,54}, -{87,-50,55}, -{87,-50,56}, -{87,-50,57}, -{87,-50,58}, -{87,-50,59}, -{87,-50,60}, -{87,-50,61}, -{87,-50,62}, -{87,-50,63}, -{87,-50,64}, -{87,-50,65}, -{87,-50,66}, -{87,-50,67}, -{87,-50,68}, -{87,-50,69}, -{87,-50,70}, -{87,-50,71}, -{87,-50,72}, -{87,-50,73}, -{87,-50,74}, -{87,-50,75}, -{87,-50,76}, -{87,-50,77}, -{87,-50,78}, -{87,-50,79}, -{87,-50,80}, -{87,-50,81}, -{87,-50,82}, -{87,-50,83}, -{87,-50,84}, -{87,-49,-9}, -{87,-49,-8}, -{87,-49,-7}, -{87,-49,-6}, -{87,-49,-5}, -{87,-49,-4}, -{87,-49,-3}, -{87,-49,-2}, -{87,-49,-1}, -{87,-49,0}, -{87,-49,1}, -{87,-49,2}, -{87,-49,3}, -{87,-49,4}, -{87,-49,5}, -{87,-49,6}, -{87,-49,7}, -{87,-49,8}, -{87,-49,9}, -{87,-49,10}, -{87,-49,11}, -{87,-49,12}, -{87,-49,13}, -{87,-49,14}, -{87,-49,15}, -{87,-49,16}, -{87,-49,17}, -{87,-49,18}, -{87,-49,19}, -{87,-49,20}, -{87,-49,21}, -{87,-49,22}, -{87,-49,23}, -{87,-49,24}, -{87,-49,25}, -{87,-49,26}, -{87,-49,27}, -{87,-49,28}, -{87,-49,29}, -{87,-49,30}, -{87,-49,31}, -{87,-49,32}, -{87,-49,33}, -{87,-49,34}, -{87,-49,35}, -{87,-49,36}, -{87,-49,37}, -{87,-49,38}, -{87,-49,39}, -{87,-49,40}, -{87,-49,41}, -{87,-49,42}, -{87,-49,43}, -{87,-49,44}, -{87,-49,45}, -{87,-49,46}, -{87,-49,47}, -{87,-49,48}, -{87,-49,49}, -{87,-49,50}, -{87,-49,51}, -{87,-49,52}, -{87,-49,53}, -{87,-49,54}, -{87,-49,55}, -{87,-49,56}, -{87,-49,57}, -{87,-49,58}, -{87,-49,59}, -{87,-49,60}, -{87,-49,61}, -{87,-49,62}, -{87,-49,63}, -{87,-49,64}, -{87,-49,65}, -{87,-49,66}, -{87,-49,67}, -{87,-49,68}, -{87,-49,69}, -{87,-49,70}, -{87,-49,71}, -{87,-49,72}, -{87,-49,73}, -{87,-49,74}, -{87,-49,75}, -{87,-49,76}, -{87,-49,77}, -{87,-49,78}, -{87,-49,79}, -{87,-49,80}, -{87,-49,81}, -{87,-49,82}, -{87,-49,83}, -{87,-49,84}, -{87,-48,-11}, -{87,-48,-10}, -{87,-48,-9}, -{87,-48,-8}, -{87,-48,-7}, -{87,-48,-6}, -{87,-48,-5}, -{87,-48,-4}, -{87,-48,-3}, -{87,-48,-2}, -{87,-48,-1}, -{87,-48,0}, -{87,-48,1}, -{87,-48,2}, -{87,-48,3}, -{87,-48,4}, -{87,-48,5}, -{87,-48,6}, -{87,-48,7}, -{87,-48,8}, -{87,-48,9}, -{87,-48,10}, -{87,-48,11}, -{87,-48,12}, -{87,-48,13}, -{87,-48,14}, -{87,-48,15}, -{87,-48,16}, -{87,-48,17}, -{87,-48,18}, -{87,-48,19}, -{87,-48,20}, -{87,-48,21}, -{87,-48,22}, -{87,-48,23}, -{87,-48,24}, -{87,-48,25}, -{87,-48,26}, -{87,-48,27}, -{87,-48,28}, -{87,-48,29}, -{87,-48,30}, -{87,-48,31}, -{87,-48,32}, -{87,-48,33}, -{87,-48,34}, -{87,-48,35}, -{87,-48,36}, -{87,-48,37}, -{87,-48,38}, -{87,-48,39}, -{87,-48,40}, -{87,-48,41}, -{87,-48,42}, -{87,-48,43}, -{87,-48,44}, -{87,-48,45}, -{87,-48,46}, -{87,-48,47}, -{87,-48,48}, -{87,-48,49}, -{87,-48,50}, -{87,-48,51}, -{87,-48,52}, -{87,-48,53}, -{87,-48,54}, -{87,-48,55}, -{87,-48,56}, -{87,-48,57}, -{87,-48,58}, -{87,-48,59}, -{87,-48,60}, -{87,-48,61}, -{87,-48,62}, -{87,-48,63}, -{87,-48,64}, -{87,-48,65}, -{87,-48,66}, -{87,-48,67}, -{87,-48,68}, -{87,-48,69}, -{87,-48,70}, -{87,-48,71}, -{87,-48,72}, -{87,-48,73}, -{87,-48,74}, -{87,-48,75}, -{87,-48,76}, -{87,-48,77}, -{87,-48,78}, -{87,-48,79}, -{87,-48,80}, -{87,-48,81}, -{87,-48,82}, -{87,-48,83}, -{87,-48,84}, -{87,-47,-12}, -{87,-47,-11}, -{87,-47,-10}, -{87,-47,-9}, -{87,-47,-8}, -{87,-47,-7}, -{87,-47,-6}, -{87,-47,-5}, -{87,-47,-4}, -{87,-47,-3}, -{87,-47,-2}, -{87,-47,-1}, -{87,-47,0}, -{87,-47,1}, -{87,-47,2}, -{87,-47,3}, -{87,-47,4}, -{87,-47,5}, -{87,-47,6}, -{87,-47,7}, -{87,-47,8}, -{87,-47,9}, -{87,-47,10}, -{87,-47,11}, -{87,-47,12}, -{87,-47,13}, -{87,-47,14}, -{87,-47,15}, -{87,-47,16}, -{87,-47,17}, -{87,-47,18}, -{87,-47,19}, -{87,-47,20}, -{87,-47,21}, -{87,-47,22}, -{87,-47,23}, -{87,-47,24}, -{87,-47,25}, -{87,-47,26}, -{87,-47,27}, -{87,-47,28}, -{87,-47,29}, -{87,-47,30}, -{87,-47,31}, -{87,-47,32}, -{87,-47,33}, -{87,-47,34}, -{87,-47,35}, -{87,-47,36}, -{87,-47,37}, -{87,-47,38}, -{87,-47,39}, -{87,-47,40}, -{87,-47,41}, -{87,-47,42}, -{87,-47,43}, -{87,-47,44}, -{87,-47,45}, -{87,-47,46}, -{87,-47,47}, -{87,-47,48}, -{87,-47,49}, -{87,-47,50}, -{87,-47,51}, -{87,-47,52}, -{87,-47,53}, -{87,-47,54}, -{87,-47,55}, -{87,-47,56}, -{87,-47,57}, -{87,-47,58}, -{87,-47,59}, -{87,-47,60}, -{87,-47,61}, -{87,-47,62}, -{87,-47,63}, -{87,-47,64}, -{87,-47,65}, -{87,-47,66}, -{87,-47,67}, -{87,-47,68}, -{87,-47,69}, -{87,-47,70}, -{87,-47,71}, -{87,-47,72}, -{87,-47,73}, -{87,-47,74}, -{87,-47,75}, -{87,-47,76}, -{87,-47,77}, -{87,-47,78}, -{87,-47,79}, -{87,-47,80}, -{87,-47,81}, -{87,-47,82}, -{87,-47,83}, -{87,-47,84}, -{87,-46,-14}, -{87,-46,-13}, -{87,-46,-12}, -{87,-46,-11}, -{87,-46,-10}, -{87,-46,-9}, -{87,-46,-8}, -{87,-46,-7}, -{87,-46,-6}, -{87,-46,-5}, -{87,-46,-4}, -{87,-46,-3}, -{87,-46,-2}, -{87,-46,-1}, -{87,-46,0}, -{87,-46,1}, -{87,-46,2}, -{87,-46,3}, -{87,-46,4}, -{87,-46,5}, -{87,-46,6}, -{87,-46,7}, -{87,-46,8}, -{87,-46,9}, -{87,-46,10}, -{87,-46,11}, -{87,-46,12}, -{87,-46,13}, -{87,-46,14}, -{87,-46,15}, -{87,-46,16}, -{87,-46,17}, -{87,-46,18}, -{87,-46,19}, -{87,-46,20}, -{87,-46,21}, -{87,-46,22}, -{87,-46,23}, -{87,-46,24}, -{87,-46,25}, -{87,-46,26}, -{87,-46,27}, -{87,-46,28}, -{87,-46,29}, -{87,-46,30}, -{87,-46,31}, -{87,-46,32}, -{87,-46,33}, -{87,-46,34}, -{87,-46,35}, -{87,-46,36}, -{87,-46,37}, -{87,-46,38}, -{87,-46,39}, -{87,-46,40}, -{87,-46,41}, -{87,-46,42}, -{87,-46,43}, -{87,-46,44}, -{87,-46,45}, -{87,-46,46}, -{87,-46,47}, -{87,-46,48}, -{87,-46,49}, -{87,-46,50}, -{87,-46,51}, -{87,-46,52}, -{87,-46,53}, -{87,-46,54}, -{87,-46,55}, -{87,-46,56}, -{87,-46,57}, -{87,-46,58}, -{87,-46,59}, -{87,-46,60}, -{87,-46,61}, -{87,-46,62}, -{87,-46,63}, -{87,-46,64}, -{87,-46,65}, -{87,-46,66}, -{87,-46,67}, -{87,-46,68}, -{87,-46,69}, -{87,-46,70}, -{87,-46,71}, -{87,-46,72}, -{87,-46,73}, -{87,-46,74}, -{87,-46,75}, -{87,-46,76}, -{87,-46,77}, -{87,-46,78}, -{87,-46,79}, -{87,-46,80}, -{87,-46,81}, -{87,-46,82}, -{87,-46,83}, -{87,-46,84}, -{87,-45,-15}, -{87,-45,-14}, -{87,-45,-13}, -{87,-45,-12}, -{87,-45,-11}, -{87,-45,-10}, -{87,-45,-9}, -{87,-45,-8}, -{87,-45,-7}, -{87,-45,-6}, -{87,-45,-5}, -{87,-45,-4}, -{87,-45,-3}, -{87,-45,-2}, -{87,-45,-1}, -{87,-45,0}, -{87,-45,1}, -{87,-45,2}, -{87,-45,3}, -{87,-45,4}, -{87,-45,5}, -{87,-45,6}, -{87,-45,7}, -{87,-45,8}, -{87,-45,9}, -{87,-45,10}, -{87,-45,11}, -{87,-45,12}, -{87,-45,13}, -{87,-45,14}, -{87,-45,15}, -{87,-45,16}, -{87,-45,17}, -{87,-45,18}, -{87,-45,19}, -{87,-45,20}, -{87,-45,21}, -{87,-45,22}, -{87,-45,23}, -{87,-45,24}, -{87,-45,25}, -{87,-45,26}, -{87,-45,27}, -{87,-45,28}, -{87,-45,29}, -{87,-45,30}, -{87,-45,31}, -{87,-45,32}, -{87,-45,33}, -{87,-45,34}, -{87,-45,35}, -{87,-45,36}, -{87,-45,37}, -{87,-45,38}, -{87,-45,39}, -{87,-45,40}, -{87,-45,41}, -{87,-45,42}, -{87,-45,43}, -{87,-45,44}, -{87,-45,45}, -{87,-45,46}, -{87,-45,47}, -{87,-45,48}, -{87,-45,49}, -{87,-45,50}, -{87,-45,51}, -{87,-45,52}, -{87,-45,53}, -{87,-45,54}, -{87,-45,55}, -{87,-45,56}, -{87,-45,57}, -{87,-45,58}, -{87,-45,59}, -{87,-45,60}, -{87,-45,61}, -{87,-45,62}, -{87,-45,63}, -{87,-45,64}, -{87,-45,65}, -{87,-45,66}, -{87,-45,67}, -{87,-45,68}, -{87,-45,69}, -{87,-45,70}, -{87,-45,71}, -{87,-45,72}, -{87,-45,73}, -{87,-45,74}, -{87,-45,75}, -{87,-45,76}, -{87,-45,77}, -{87,-45,78}, -{87,-45,79}, -{87,-45,80}, -{87,-45,81}, -{87,-45,82}, -{87,-45,83}, -{87,-45,84}, -{87,-44,-17}, -{87,-44,-16}, -{87,-44,-15}, -{87,-44,-14}, -{87,-44,-13}, -{87,-44,-12}, -{87,-44,-11}, -{87,-44,-10}, -{87,-44,-9}, -{87,-44,-8}, -{87,-44,-7}, -{87,-44,-6}, -{87,-44,-5}, -{87,-44,-4}, -{87,-44,-3}, -{87,-44,-2}, -{87,-44,-1}, -{87,-44,0}, -{87,-44,1}, -{87,-44,2}, -{87,-44,3}, -{87,-44,4}, -{87,-44,5}, -{87,-44,6}, -{87,-44,7}, -{87,-44,8}, -{87,-44,9}, -{87,-44,10}, -{87,-44,11}, -{87,-44,12}, -{87,-44,13}, -{87,-44,14}, -{87,-44,15}, -{87,-44,16}, -{87,-44,17}, -{87,-44,18}, -{87,-44,19}, -{87,-44,20}, -{87,-44,21}, -{87,-44,22}, -{87,-44,23}, -{87,-44,24}, -{87,-44,25}, -{87,-44,26}, -{87,-44,27}, -{87,-44,28}, -{87,-44,29}, -{87,-44,30}, -{87,-44,31}, -{87,-44,32}, -{87,-44,33}, -{87,-44,34}, -{87,-44,35}, -{87,-44,36}, -{87,-44,37}, -{87,-44,38}, -{87,-44,39}, -{87,-44,40}, -{87,-44,41}, -{87,-44,42}, -{87,-44,43}, -{87,-44,44}, -{87,-44,45}, -{87,-44,46}, -{87,-44,47}, -{87,-44,48}, -{87,-44,49}, -{87,-44,50}, -{87,-44,51}, -{87,-44,52}, -{87,-44,53}, -{87,-44,54}, -{87,-44,55}, -{87,-44,56}, -{87,-44,57}, -{87,-44,58}, -{87,-44,59}, -{87,-44,60}, -{87,-44,61}, -{87,-44,62}, -{87,-44,63}, -{87,-44,64}, -{87,-44,65}, -{87,-44,66}, -{87,-44,67}, -{87,-44,68}, -{87,-44,69}, -{87,-44,70}, -{87,-44,71}, -{87,-44,72}, -{87,-44,73}, -{87,-44,74}, -{87,-44,75}, -{87,-44,76}, -{87,-44,77}, -{87,-44,78}, -{87,-44,79}, -{87,-44,80}, -{87,-44,81}, -{87,-44,82}, -{87,-44,83}, -{87,-44,84}, -{87,-43,-18}, -{87,-43,-17}, -{87,-43,-16}, -{87,-43,-15}, -{87,-43,-14}, -{87,-43,-13}, -{87,-43,-12}, -{87,-43,-11}, -{87,-43,-10}, -{87,-43,-9}, -{87,-43,-8}, -{87,-43,-7}, -{87,-43,-6}, -{87,-43,-5}, -{87,-43,-4}, -{87,-43,-3}, -{87,-43,-2}, -{87,-43,-1}, -{87,-43,0}, -{87,-43,1}, -{87,-43,2}, -{87,-43,3}, -{87,-43,4}, -{87,-43,5}, -{87,-43,6}, -{87,-43,7}, -{87,-43,8}, -{87,-43,9}, -{87,-43,10}, -{87,-43,11}, -{87,-43,12}, -{87,-43,13}, -{87,-43,14}, -{87,-43,15}, -{87,-43,16}, -{87,-43,17}, -{87,-43,18}, -{87,-43,19}, -{87,-43,20}, -{87,-43,21}, -{87,-43,22}, -{87,-43,23}, -{87,-43,24}, -{87,-43,25}, -{87,-43,26}, -{87,-43,27}, -{87,-43,28}, -{87,-43,29}, -{87,-43,30}, -{87,-43,31}, -{87,-43,32}, -{87,-43,33}, -{87,-43,34}, -{87,-43,35}, -{87,-43,36}, -{87,-43,37}, -{87,-43,38}, -{87,-43,39}, -{87,-43,40}, -{87,-43,41}, -{87,-43,42}, -{87,-43,43}, -{87,-43,44}, -{87,-43,45}, -{87,-43,46}, -{87,-43,47}, -{87,-43,48}, -{87,-43,49}, -{87,-43,50}, -{87,-43,51}, -{87,-43,52}, -{87,-43,53}, -{87,-43,54}, -{87,-43,55}, -{87,-43,56}, -{87,-43,57}, -{87,-43,58}, -{87,-43,59}, -{87,-43,60}, -{87,-43,61}, -{87,-43,62}, -{87,-43,63}, -{87,-43,64}, -{87,-43,65}, -{87,-43,66}, -{87,-43,67}, -{87,-43,68}, -{87,-43,69}, -{87,-43,70}, -{87,-43,71}, -{87,-43,72}, -{87,-43,73}, -{87,-43,74}, -{87,-43,75}, -{87,-43,76}, -{87,-43,77}, -{87,-43,78}, -{87,-43,79}, -{87,-43,80}, -{87,-43,81}, -{87,-43,82}, -{87,-43,83}, -{87,-43,84}, -{87,-42,-20}, -{87,-42,-19}, -{87,-42,-18}, -{87,-42,-17}, -{87,-42,-16}, -{87,-42,-15}, -{87,-42,-14}, -{87,-42,-13}, -{87,-42,-12}, -{87,-42,-11}, -{87,-42,-10}, -{87,-42,-9}, -{87,-42,-8}, -{87,-42,-7}, -{87,-42,-6}, -{87,-42,-5}, -{87,-42,-4}, -{87,-42,-3}, -{87,-42,-2}, -{87,-42,-1}, -{87,-42,0}, -{87,-42,1}, -{87,-42,2}, -{87,-42,3}, -{87,-42,4}, -{87,-42,5}, -{87,-42,6}, -{87,-42,7}, -{87,-42,8}, -{87,-42,9}, -{87,-42,10}, -{87,-42,11}, -{87,-42,12}, -{87,-42,13}, -{87,-42,14}, -{87,-42,15}, -{87,-42,16}, -{87,-42,17}, -{87,-42,18}, -{87,-42,19}, -{87,-42,20}, -{87,-42,21}, -{87,-42,22}, -{87,-42,23}, -{87,-42,24}, -{87,-42,25}, -{87,-42,26}, -{87,-42,27}, -{87,-42,28}, -{87,-42,29}, -{87,-42,30}, -{87,-42,31}, -{87,-42,32}, -{87,-42,33}, -{87,-42,34}, -{87,-42,35}, -{87,-42,36}, -{87,-42,37}, -{87,-42,38}, -{87,-42,39}, -{87,-42,40}, -{87,-42,41}, -{87,-42,42}, -{87,-42,43}, -{87,-42,44}, -{87,-42,45}, -{87,-42,46}, -{87,-42,47}, -{87,-42,48}, -{87,-42,49}, -{87,-42,50}, -{87,-42,51}, -{87,-42,52}, -{87,-42,53}, -{87,-42,54}, -{87,-42,55}, -{87,-42,56}, -{87,-42,57}, -{87,-42,58}, -{87,-42,59}, -{87,-42,60}, -{87,-42,61}, -{87,-42,62}, -{87,-42,63}, -{87,-42,64}, -{87,-42,65}, -{87,-42,66}, -{87,-42,67}, -{87,-42,68}, -{87,-42,69}, -{87,-42,70}, -{87,-42,71}, -{87,-42,72}, -{87,-42,73}, -{87,-42,74}, -{87,-42,75}, -{87,-42,76}, -{87,-42,77}, -{87,-42,78}, -{87,-42,79}, -{87,-42,80}, -{87,-42,81}, -{87,-42,82}, -{87,-42,83}, -{87,-42,84}, -{87,-41,-20}, -{87,-41,-19}, -{87,-41,-18}, -{87,-41,-17}, -{87,-41,-16}, -{87,-41,-15}, -{87,-41,-14}, -{87,-41,-13}, -{87,-41,-12}, -{87,-41,-11}, -{87,-41,-10}, -{87,-41,-9}, -{87,-41,-8}, -{87,-41,-7}, -{87,-41,-6}, -{87,-41,-5}, -{87,-41,-4}, -{87,-41,-3}, -{87,-41,-2}, -{87,-41,-1}, -{87,-41,0}, -{87,-41,1}, -{87,-41,2}, -{87,-41,3}, -{87,-41,4}, -{87,-41,5}, -{87,-41,6}, -{87,-41,7}, -{87,-41,8}, -{87,-41,9}, -{87,-41,10}, -{87,-41,11}, -{87,-41,12}, -{87,-41,13}, -{87,-41,14}, -{87,-41,15}, -{87,-41,16}, -{87,-41,17}, -{87,-41,18}, -{87,-41,19}, -{87,-41,20}, -{87,-41,21}, -{87,-41,22}, -{87,-41,23}, -{87,-41,24}, -{87,-41,25}, -{87,-41,26}, -{87,-41,27}, -{87,-41,28}, -{87,-41,29}, -{87,-41,30}, -{87,-41,31}, -{87,-41,32}, -{87,-41,33}, -{87,-41,34}, -{87,-41,35}, -{87,-41,36}, -{87,-41,37}, -{87,-41,38}, -{87,-41,39}, -{87,-41,40}, -{87,-41,41}, -{87,-41,42}, -{87,-41,43}, -{87,-41,44}, -{87,-41,45}, -{87,-41,46}, -{87,-41,47}, -{87,-41,48}, -{87,-41,49}, -{87,-41,50}, -{87,-41,51}, -{87,-41,52}, -{87,-41,53}, -{87,-41,54}, -{87,-41,55}, -{87,-41,56}, -{87,-41,57}, -{87,-41,58}, -{87,-41,59}, -{87,-41,60}, -{87,-41,61}, -{87,-41,62}, -{87,-41,63}, -{87,-41,64}, -{87,-41,65}, -{87,-41,66}, -{87,-41,67}, -{87,-41,68}, -{87,-41,69}, -{87,-41,70}, -{87,-41,71}, -{87,-41,72}, -{87,-41,73}, -{87,-41,74}, -{87,-41,75}, -{87,-41,76}, -{87,-41,77}, -{87,-41,78}, -{87,-41,79}, -{87,-41,80}, -{87,-41,81}, -{87,-41,82}, -{87,-41,83}, -{87,-41,84}, -{87,-40,-20}, -{87,-40,-19}, -{87,-40,-18}, -{87,-40,-17}, -{87,-40,-16}, -{87,-40,-15}, -{87,-40,-14}, -{87,-40,-13}, -{87,-40,-12}, -{87,-40,-11}, -{87,-40,-10}, -{87,-40,-9}, -{87,-40,-8}, -{87,-40,-7}, -{87,-40,-6}, -{87,-40,-5}, -{87,-40,-4}, -{87,-40,-3}, -{87,-40,-2}, -{87,-40,-1}, -{87,-40,0}, -{87,-40,1}, -{87,-40,2}, -{87,-40,3}, -{87,-40,4}, -{87,-40,5}, -{87,-40,6}, -{87,-40,7}, -{87,-40,8}, -{87,-40,9}, -{87,-40,10}, -{87,-40,11}, -{87,-40,12}, -{87,-40,13}, -{87,-40,14}, -{87,-40,15}, -{87,-40,16}, -{87,-40,17}, -{87,-40,18}, -{87,-40,19}, -{87,-40,20}, -{87,-40,21}, -{87,-40,22}, -{87,-40,23}, -{87,-40,24}, -{87,-40,25}, -{87,-40,26}, -{87,-40,27}, -{87,-40,28}, -{87,-40,29}, -{87,-40,30}, -{87,-40,31}, -{87,-40,32}, -{87,-40,33}, -{87,-40,34}, -{87,-40,35}, -{87,-40,36}, -{87,-40,37}, -{87,-40,38}, -{87,-40,39}, -{87,-40,40}, -{87,-40,41}, -{87,-40,42}, -{87,-40,43}, -{87,-40,44}, -{87,-40,45}, -{87,-40,46}, -{87,-40,47}, -{87,-40,48}, -{87,-40,49}, -{87,-40,50}, -{87,-40,51}, -{87,-40,52}, -{87,-40,53}, -{87,-40,54}, -{87,-40,55}, -{87,-40,56}, -{87,-40,57}, -{87,-40,58}, -{87,-40,59}, -{87,-40,60}, -{87,-40,61}, -{87,-40,62}, -{87,-40,63}, -{87,-40,64}, -{87,-40,65}, -{87,-40,66}, -{87,-40,67}, -{87,-40,68}, -{87,-40,69}, -{87,-40,70}, -{87,-40,71}, -{87,-40,72}, -{87,-40,73}, -{87,-40,74}, -{87,-40,75}, -{87,-40,76}, -{87,-40,77}, -{87,-40,78}, -{87,-40,79}, -{87,-40,80}, -{87,-40,81}, -{87,-40,82}, -{87,-40,83}, -{87,-40,84}, -{87,-39,-20}, -{87,-39,-19}, -{87,-39,-18}, -{87,-39,-17}, -{87,-39,-16}, -{87,-39,-15}, -{87,-39,-14}, -{87,-39,-13}, -{87,-39,-12}, -{87,-39,-11}, -{87,-39,-10}, -{87,-39,-9}, -{87,-39,-8}, -{87,-39,-7}, -{87,-39,-6}, -{87,-39,-5}, -{87,-39,-4}, -{87,-39,-3}, -{87,-39,-2}, -{87,-39,-1}, -{87,-39,0}, -{87,-39,1}, -{87,-39,2}, -{87,-39,3}, -{87,-39,4}, -{87,-39,5}, -{87,-39,6}, -{87,-39,7}, -{87,-39,8}, -{87,-39,9}, -{87,-39,10}, -{87,-39,11}, -{87,-39,12}, -{87,-39,13}, -{87,-39,14}, -{87,-39,15}, -{87,-39,16}, -{87,-39,17}, -{87,-39,18}, -{87,-39,19}, -{87,-39,20}, -{87,-39,21}, -{87,-39,22}, -{87,-39,23}, -{87,-39,24}, -{87,-39,25}, -{87,-39,26}, -{87,-39,27}, -{87,-39,28}, -{87,-39,29}, -{87,-39,30}, -{87,-39,31}, -{87,-39,32}, -{87,-39,33}, -{87,-39,34}, -{87,-39,35}, -{87,-39,36}, -{87,-39,37}, -{87,-39,38}, -{87,-39,39}, -{87,-39,40}, -{87,-39,41}, -{87,-39,42}, -{87,-39,43}, -{87,-39,44}, -{87,-39,45}, -{87,-39,46}, -{87,-39,47}, -{87,-39,48}, -{87,-39,49}, -{87,-39,50}, -{87,-39,51}, -{87,-39,52}, -{87,-39,53}, -{87,-39,54}, -{87,-39,55}, -{87,-39,56}, -{87,-39,57}, -{87,-39,58}, -{87,-39,59}, -{87,-39,60}, -{87,-39,61}, -{87,-39,62}, -{87,-39,63}, -{87,-39,64}, -{87,-39,65}, -{87,-39,66}, -{87,-39,67}, -{87,-39,68}, -{87,-39,69}, -{87,-39,70}, -{87,-39,71}, -{87,-39,72}, -{87,-39,73}, -{87,-39,74}, -{87,-39,75}, -{87,-39,76}, -{87,-39,77}, -{87,-39,78}, -{87,-39,79}, -{87,-39,80}, -{87,-39,81}, -{87,-39,82}, -{87,-39,83}, -{87,-39,84}, -{87,-39,85}, -{87,-38,-20}, -{87,-38,-19}, -{87,-38,-18}, -{87,-38,-17}, -{87,-38,-16}, -{87,-38,-15}, -{87,-38,-14}, -{87,-38,-13}, -{87,-38,-12}, -{87,-38,-11}, -{87,-38,-10}, -{87,-38,-9}, -{87,-38,-8}, -{87,-38,-7}, -{87,-38,-6}, -{87,-38,-5}, -{87,-38,-4}, -{87,-38,-3}, -{87,-38,-2}, -{87,-38,-1}, -{87,-38,0}, -{87,-38,1}, -{87,-38,2}, -{87,-38,3}, -{87,-38,4}, -{87,-38,5}, -{87,-38,6}, -{87,-38,7}, -{87,-38,8}, -{87,-38,9}, -{87,-38,10}, -{87,-38,11}, -{87,-38,12}, -{87,-38,13}, -{87,-38,14}, -{87,-38,15}, -{87,-38,16}, -{87,-38,17}, -{87,-38,18}, -{87,-38,19}, -{87,-38,20}, -{87,-38,21}, -{87,-38,22}, -{87,-38,23}, -{87,-38,24}, -{87,-38,25}, -{87,-38,26}, -{87,-38,27}, -{87,-38,28}, -{87,-38,29}, -{87,-38,30}, -{87,-38,31}, -{87,-38,32}, -{87,-38,33}, -{87,-38,34}, -{87,-38,35}, -{87,-38,36}, -{87,-38,37}, -{87,-38,38}, -{87,-38,39}, -{87,-38,40}, -{87,-38,41}, -{87,-38,42}, -{87,-38,43}, -{87,-38,44}, -{87,-38,45}, -{87,-38,46}, -{87,-38,47}, -{87,-38,48}, -{87,-38,49}, -{87,-38,50}, -{87,-38,51}, -{87,-38,52}, -{87,-38,53}, -{87,-38,54}, -{87,-38,55}, -{87,-38,56}, -{87,-38,57}, -{87,-38,58}, -{87,-38,59}, -{87,-38,60}, -{87,-38,61}, -{87,-38,62}, -{87,-38,63}, -{87,-38,64}, -{87,-38,65}, -{87,-38,66}, -{87,-38,67}, -{87,-38,68}, -{87,-38,69}, -{87,-38,70}, -{87,-38,71}, -{87,-38,72}, -{87,-38,73}, -{87,-38,74}, -{87,-38,75}, -{87,-38,76}, -{87,-38,77}, -{87,-38,78}, -{87,-38,79}, -{87,-38,80}, -{87,-38,81}, -{87,-38,82}, -{87,-38,83}, -{87,-38,84}, -{87,-38,85}, -{87,-37,-20}, -{87,-37,-19}, -{87,-37,-18}, -{87,-37,-17}, -{87,-37,-16}, -{87,-37,-15}, -{87,-37,-14}, -{87,-37,-13}, -{87,-37,-12}, -{87,-37,-11}, -{87,-37,-10}, -{87,-37,-9}, -{87,-37,-8}, -{87,-37,-7}, -{87,-37,-6}, -{87,-37,-5}, -{87,-37,-4}, -{87,-37,-3}, -{87,-37,-2}, -{87,-37,-1}, -{87,-37,0}, -{87,-37,1}, -{87,-37,2}, -{87,-37,3}, -{87,-37,4}, -{87,-37,5}, -{87,-37,6}, -{87,-37,7}, -{87,-37,8}, -{87,-37,9}, -{87,-37,10}, -{87,-37,11}, -{87,-37,12}, -{87,-37,13}, -{87,-37,14}, -{87,-37,15}, -{87,-37,16}, -{87,-37,17}, -{87,-37,18}, -{87,-37,19}, -{87,-37,20}, -{87,-37,21}, -{87,-37,22}, -{87,-37,23}, -{87,-37,24}, -{87,-37,25}, -{87,-37,26}, -{87,-37,27}, -{87,-37,28}, -{87,-37,29}, -{87,-37,30}, -{87,-37,31}, -{87,-37,32}, -{87,-37,33}, -{87,-37,34}, -{87,-37,35}, -{87,-37,36}, -{87,-37,37}, -{87,-37,38}, -{87,-37,39}, -{87,-37,40}, -{87,-37,41}, -{87,-37,42}, -{87,-37,43}, -{87,-37,44}, -{87,-37,45}, -{87,-37,46}, -{87,-37,47}, -{87,-37,48}, -{87,-37,49}, -{87,-37,50}, -{87,-37,51}, -{87,-37,52}, -{87,-37,53}, -{87,-37,54}, -{87,-37,55}, -{87,-37,56}, -{87,-37,57}, -{87,-37,58}, -{87,-37,59}, -{87,-37,60}, -{87,-37,61}, -{87,-37,62}, -{87,-37,63}, -{87,-37,64}, -{87,-37,65}, -{87,-37,66}, -{87,-37,67}, -{87,-37,68}, -{87,-37,69}, -{87,-37,70}, -{87,-37,71}, -{87,-37,72}, -{87,-37,73}, -{87,-37,74}, -{87,-37,75}, -{87,-37,76}, -{87,-37,77}, -{87,-37,78}, -{87,-37,79}, -{87,-37,80}, -{87,-37,81}, -{87,-37,82}, -{87,-37,83}, -{87,-37,84}, -{87,-37,85}, -{87,-36,-20}, -{87,-36,-19}, -{87,-36,-18}, -{87,-36,-17}, -{87,-36,-16}, -{87,-36,-15}, -{87,-36,-14}, -{87,-36,-13}, -{87,-36,-12}, -{87,-36,-11}, -{87,-36,-10}, -{87,-36,-9}, -{87,-36,-8}, -{87,-36,-7}, -{87,-36,-6}, -{87,-36,-5}, -{87,-36,-4}, -{87,-36,-3}, -{87,-36,-2}, -{87,-36,-1}, -{87,-36,0}, -{87,-36,1}, -{87,-36,2}, -{87,-36,3}, -{87,-36,4}, -{87,-36,5}, -{87,-36,6}, -{87,-36,7}, -{87,-36,8}, -{87,-36,9}, -{87,-36,10}, -{87,-36,11}, -{87,-36,12}, -{87,-36,13}, -{87,-36,14}, -{87,-36,15}, -{87,-36,16}, -{87,-36,17}, -{87,-36,18}, -{87,-36,19}, -{87,-36,20}, -{87,-36,21}, -{87,-36,22}, -{87,-36,23}, -{87,-36,24}, -{87,-36,25}, -{87,-36,26}, -{87,-36,27}, -{87,-36,28}, -{87,-36,29}, -{87,-36,30}, -{87,-36,31}, -{87,-36,32}, -{87,-36,33}, -{87,-36,34}, -{87,-36,35}, -{87,-36,36}, -{87,-36,37}, -{87,-36,38}, -{87,-36,39}, -{87,-36,40}, -{87,-36,41}, -{87,-36,42}, -{87,-36,43}, -{87,-36,44}, -{87,-36,45}, -{87,-36,46}, -{87,-36,47}, -{87,-36,48}, -{87,-36,49}, -{87,-36,50}, -{87,-36,51}, -{87,-36,52}, -{87,-36,53}, -{87,-36,54}, -{87,-36,55}, -{87,-36,56}, -{87,-36,57}, -{87,-36,58}, -{87,-36,59}, -{87,-36,60}, -{87,-36,61}, -{87,-36,62}, -{87,-36,63}, -{87,-36,64}, -{87,-36,65}, -{87,-36,66}, -{87,-36,67}, -{87,-36,68}, -{87,-36,69}, -{87,-36,70}, -{87,-36,71}, -{87,-36,72}, -{87,-36,73}, -{87,-36,74}, -{87,-36,75}, -{87,-36,76}, -{87,-36,77}, -{87,-36,78}, -{87,-36,79}, -{87,-36,80}, -{87,-36,81}, -{87,-36,82}, -{87,-36,83}, -{87,-36,84}, -{87,-36,85}, -{87,-35,-20}, -{87,-35,-19}, -{87,-35,-18}, -{87,-35,-17}, -{87,-35,-16}, -{87,-35,-15}, -{87,-35,-14}, -{87,-35,-13}, -{87,-35,-12}, -{87,-35,-11}, -{87,-35,-10}, -{87,-35,-9}, -{87,-35,-8}, -{87,-35,-7}, -{87,-35,-6}, -{87,-35,-5}, -{87,-35,-4}, -{87,-35,-3}, -{87,-35,-2}, -{87,-35,-1}, -{87,-35,0}, -{87,-35,1}, -{87,-35,2}, -{87,-35,3}, -{87,-35,4}, -{87,-35,5}, -{87,-35,6}, -{87,-35,7}, -{87,-35,8}, -{87,-35,9}, -{87,-35,10}, -{87,-35,11}, -{87,-35,12}, -{87,-35,13}, -{87,-35,14}, -{87,-35,15}, -{87,-35,16}, -{87,-35,17}, -{87,-35,18}, -{87,-35,19}, -{87,-35,20}, -{87,-35,21}, -{87,-35,22}, -{87,-35,23}, -{87,-35,24}, -{87,-35,25}, -{87,-35,26}, -{87,-35,27}, -{87,-35,28}, -{87,-35,29}, -{87,-35,30}, -{87,-35,31}, -{87,-35,32}, -{87,-35,33}, -{87,-35,34}, -{87,-35,35}, -{87,-35,36}, -{87,-35,37}, -{87,-35,38}, -{87,-35,39}, -{87,-35,40}, -{87,-35,41}, -{87,-35,42}, -{87,-35,43}, -{87,-35,44}, -{87,-35,45}, -{87,-35,46}, -{87,-35,47}, -{87,-35,48}, -{87,-35,49}, -{87,-35,50}, -{87,-35,51}, -{87,-35,52}, -{87,-35,53}, -{87,-35,54}, -{87,-35,55}, -{87,-35,56}, -{87,-35,57}, -{87,-35,58}, -{87,-35,59}, -{87,-35,60}, -{87,-35,61}, -{87,-35,62}, -{87,-35,63}, -{87,-35,64}, -{87,-35,65}, -{87,-35,66}, -{87,-35,67}, -{87,-35,68}, -{87,-35,69}, -{87,-35,70}, -{87,-35,71}, -{87,-35,72}, -{87,-35,73}, -{87,-35,74}, -{87,-35,75}, -{87,-35,76}, -{87,-35,77}, -{87,-35,78}, -{87,-35,79}, -{87,-35,80}, -{87,-35,81}, -{87,-35,82}, -{87,-35,83}, -{87,-35,84}, -{87,-35,85}, -{87,-34,-20}, -{87,-34,-19}, -{87,-34,-18}, -{87,-34,-17}, -{87,-34,-16}, -{87,-34,-15}, -{87,-34,-14}, -{87,-34,-13}, -{87,-34,-12}, -{87,-34,-11}, -{87,-34,-10}, -{87,-34,-9}, -{87,-34,-8}, -{87,-34,-7}, -{87,-34,-6}, -{87,-34,-5}, -{87,-34,-4}, -{87,-34,-3}, -{87,-34,-2}, -{87,-34,-1}, -{87,-34,0}, -{87,-34,1}, -{87,-34,2}, -{87,-34,3}, -{87,-34,4}, -{87,-34,5}, -{87,-34,6}, -{87,-34,7}, -{87,-34,8}, -{87,-34,9}, -{87,-34,10}, -{87,-34,11}, -{87,-34,12}, -{87,-34,13}, -{87,-34,14}, -{87,-34,15}, -{87,-34,16}, -{87,-34,17}, -{87,-34,18}, -{87,-34,19}, -{87,-34,20}, -{87,-34,21}, -{87,-34,22}, -{87,-34,23}, -{87,-34,24}, -{87,-34,25}, -{87,-34,26}, -{87,-34,27}, -{87,-34,28}, -{87,-34,29}, -{87,-34,30}, -{87,-34,31}, -{87,-34,32}, -{87,-34,33}, -{87,-34,34}, -{87,-34,35}, -{87,-34,36}, -{87,-34,37}, -{87,-34,38}, -{87,-34,39}, -{87,-34,40}, -{87,-34,41}, -{87,-34,42}, -{87,-34,43}, -{87,-34,44}, -{87,-34,45}, -{87,-34,46}, -{87,-34,47}, -{87,-34,48}, -{87,-34,49}, -{87,-34,50}, -{87,-34,51}, -{87,-34,52}, -{87,-34,53}, -{87,-34,54}, -{87,-34,55}, -{87,-34,56}, -{87,-34,57}, -{87,-34,58}, -{87,-34,59}, -{87,-34,60}, -{87,-34,61}, -{87,-34,62}, -{87,-34,63}, -{87,-34,64}, -{87,-34,65}, -{87,-34,66}, -{87,-34,67}, -{87,-34,68}, -{87,-34,69}, -{87,-34,70}, -{87,-34,71}, -{87,-34,72}, -{87,-34,73}, -{87,-34,74}, -{87,-34,75}, -{87,-34,76}, -{87,-34,77}, -{87,-34,78}, -{87,-34,79}, -{87,-34,80}, -{87,-34,81}, -{87,-34,82}, -{87,-34,83}, -{87,-34,84}, -{87,-34,85}, -{87,-33,-20}, -{87,-33,-19}, -{87,-33,-18}, -{87,-33,-17}, -{87,-33,-16}, -{87,-33,-15}, -{87,-33,-14}, -{87,-33,-13}, -{87,-33,-12}, -{87,-33,-11}, -{87,-33,-10}, -{87,-33,-9}, -{87,-33,-8}, -{87,-33,-7}, -{87,-33,-6}, -{87,-33,-5}, -{87,-33,-4}, -{87,-33,-3}, -{87,-33,-2}, -{87,-33,-1}, -{87,-33,0}, -{87,-33,1}, -{87,-33,2}, -{87,-33,3}, -{87,-33,4}, -{87,-33,5}, -{87,-33,6}, -{87,-33,7}, -{87,-33,8}, -{87,-33,9}, -{87,-33,10}, -{87,-33,11}, -{87,-33,12}, -{87,-33,13}, -{87,-33,14}, -{87,-33,15}, -{87,-33,16}, -{87,-33,17}, -{87,-33,18}, -{87,-33,19}, -{87,-33,20}, -{87,-33,21}, -{87,-33,22}, -{87,-33,23}, -{87,-33,24}, -{87,-33,25}, -{87,-33,26}, -{87,-33,27}, -{87,-33,28}, -{87,-33,29}, -{87,-33,30}, -{87,-33,31}, -{87,-33,32}, -{87,-33,33}, -{87,-33,34}, -{87,-33,35}, -{87,-33,36}, -{87,-33,37}, -{87,-33,38}, -{87,-33,39}, -{87,-33,40}, -{87,-33,41}, -{87,-33,42}, -{87,-33,43}, -{87,-33,44}, -{87,-33,45}, -{87,-33,46}, -{87,-33,47}, -{87,-33,48}, -{87,-33,49}, -{87,-33,50}, -{87,-33,51}, -{87,-33,52}, -{87,-33,53}, -{87,-33,54}, -{87,-33,55}, -{87,-33,56}, -{87,-33,57}, -{87,-33,58}, -{87,-33,59}, -{87,-33,60}, -{87,-33,61}, -{87,-33,62}, -{87,-33,63}, -{87,-33,64}, -{87,-33,65}, -{87,-33,66}, -{87,-33,67}, -{87,-33,68}, -{87,-33,69}, -{87,-33,70}, -{87,-33,71}, -{87,-33,72}, -{87,-33,73}, -{87,-33,74}, -{87,-33,75}, -{87,-33,76}, -{87,-33,77}, -{87,-33,78}, -{87,-33,79}, -{87,-33,80}, -{87,-33,81}, -{87,-33,82}, -{87,-33,83}, -{87,-33,84}, -{87,-33,85}, -{87,-32,-20}, -{87,-32,-19}, -{87,-32,-18}, -{87,-32,-17}, -{87,-32,-16}, -{87,-32,-15}, -{87,-32,-14}, -{87,-32,-13}, -{87,-32,-12}, -{87,-32,-11}, -{87,-32,-10}, -{87,-32,-9}, -{87,-32,-8}, -{87,-32,-7}, -{87,-32,-6}, -{87,-32,-5}, -{87,-32,-4}, -{87,-32,-3}, -{87,-32,-2}, -{87,-32,-1}, -{87,-32,0}, -{87,-32,1}, -{87,-32,2}, -{87,-32,3}, -{87,-32,4}, -{87,-32,5}, -{87,-32,6}, -{87,-32,7}, -{87,-32,8}, -{87,-32,9}, -{87,-32,10}, -{87,-32,11}, -{87,-32,12}, -{87,-32,13}, -{87,-32,14}, -{87,-32,15}, -{87,-32,16}, -{87,-32,17}, -{87,-32,18}, -{87,-32,19}, -{87,-32,20}, -{87,-32,21}, -{87,-32,22}, -{87,-32,23}, -{87,-32,24}, -{87,-32,25}, -{87,-32,26}, -{87,-32,27}, -{87,-32,28}, -{87,-32,29}, -{87,-32,30}, -{87,-32,31}, -{87,-32,32}, -{87,-32,33}, -{87,-32,34}, -{87,-32,35}, -{87,-32,36}, -{87,-32,37}, -{87,-32,38}, -{87,-32,39}, -{87,-32,40}, -{87,-32,41}, -{87,-32,42}, -{87,-32,43}, -{87,-32,44}, -{87,-32,45}, -{87,-32,46}, -{87,-32,47}, -{87,-32,48}, -{87,-32,49}, -{87,-32,50}, -{87,-32,51}, -{87,-32,52}, -{87,-32,53}, -{87,-32,54}, -{87,-32,55}, -{87,-32,56}, -{87,-32,57}, -{87,-32,58}, -{87,-32,59}, -{87,-32,60}, -{87,-32,61}, -{87,-32,62}, -{87,-32,63}, -{87,-32,64}, -{87,-32,65}, -{87,-32,66}, -{87,-32,67}, -{87,-32,68}, -{87,-32,69}, -{87,-32,70}, -{87,-32,71}, -{87,-32,72}, -{87,-32,73}, -{87,-32,74}, -{87,-32,75}, -{87,-32,76}, -{87,-32,77}, -{87,-32,78}, -{87,-32,79}, -{87,-32,80}, -{87,-32,81}, -{87,-32,82}, -{87,-32,83}, -{87,-32,84}, -{87,-32,85}, -{87,-31,-20}, -{87,-31,-19}, -{87,-31,-18}, -{87,-31,-17}, -{87,-31,-16}, -{87,-31,-15}, -{87,-31,-14}, -{87,-31,-13}, -{87,-31,-12}, -{87,-31,-11}, -{87,-31,-10}, -{87,-31,-9}, -{87,-31,-8}, -{87,-31,-7}, -{87,-31,-6}, -{87,-31,-5}, -{87,-31,-4}, -{87,-31,-3}, -{87,-31,-2}, -{87,-31,-1}, -{87,-31,0}, -{87,-31,1}, -{87,-31,2}, -{87,-31,3}, -{87,-31,4}, -{87,-31,5}, -{87,-31,6}, -{87,-31,7}, -{87,-31,8}, -{87,-31,9}, -{87,-31,10}, -{87,-31,11}, -{87,-31,12}, -{87,-31,13}, -{87,-31,14}, -{87,-31,15}, -{87,-31,16}, -{87,-31,17}, -{87,-31,18}, -{87,-31,19}, -{87,-31,20}, -{87,-31,21}, -{87,-31,22}, -{87,-31,23}, -{87,-31,24}, -{87,-31,25}, -{87,-31,26}, -{87,-31,27}, -{87,-31,28}, -{87,-31,29}, -{87,-31,30}, -{87,-31,31}, -{87,-31,32}, -{87,-31,33}, -{87,-31,34}, -{87,-31,35}, -{87,-31,36}, -{87,-31,37}, -{87,-31,38}, -{87,-31,39}, -{87,-31,40}, -{87,-31,41}, -{87,-31,42}, -{87,-31,43}, -{87,-31,44}, -{87,-31,45}, -{87,-31,46}, -{87,-31,47}, -{87,-31,48}, -{87,-31,49}, -{87,-31,50}, -{87,-31,51}, -{87,-31,52}, -{87,-31,53}, -{87,-31,54}, -{87,-31,55}, -{87,-31,56}, -{87,-31,57}, -{87,-31,58}, -{87,-31,59}, -{87,-31,60}, -{87,-31,61}, -{87,-31,62}, -{87,-31,63}, -{87,-31,64}, -{87,-31,65}, -{87,-31,66}, -{87,-31,67}, -{87,-31,68}, -{87,-31,69}, -{87,-31,70}, -{87,-31,71}, -{87,-31,72}, -{87,-31,73}, -{87,-31,74}, -{87,-31,75}, -{87,-31,76}, -{87,-31,77}, -{87,-31,78}, -{87,-31,79}, -{87,-31,80}, -{87,-31,81}, -{87,-31,82}, -{87,-31,83}, -{87,-31,84}, -{87,-31,85}, -{87,-30,-20}, -{87,-30,-19}, -{87,-30,-18}, -{87,-30,-17}, -{87,-30,-16}, -{87,-30,-15}, -{87,-30,-14}, -{87,-30,-13}, -{87,-30,-12}, -{87,-30,-11}, -{87,-30,-10}, -{87,-30,-9}, -{87,-30,-8}, -{87,-30,-7}, -{87,-30,-6}, -{87,-30,-5}, -{87,-30,-4}, -{87,-30,-3}, -{87,-30,-2}, -{87,-30,-1}, -{87,-30,0}, -{87,-30,1}, -{87,-30,2}, -{87,-30,3}, -{87,-30,4}, -{87,-30,5}, -{87,-30,6}, -{87,-30,7}, -{87,-30,8}, -{87,-30,9}, -{87,-30,10}, -{87,-30,11}, -{87,-30,12}, -{87,-30,13}, -{87,-30,14}, -{87,-30,15}, -{87,-30,16}, -{87,-30,17}, -{87,-30,18}, -{87,-30,19}, -{87,-30,20}, -{87,-30,21}, -{87,-30,22}, -{87,-30,23}, -{87,-30,24}, -{87,-30,25}, -{87,-30,26}, -{87,-30,27}, -{87,-30,28}, -{87,-30,29}, -{87,-30,30}, -{87,-30,31}, -{87,-30,32}, -{87,-30,33}, -{87,-30,34}, -{87,-30,35}, -{87,-30,36}, -{87,-30,37}, -{87,-30,38}, -{87,-30,39}, -{87,-30,40}, -{87,-30,41}, -{87,-30,42}, -{87,-30,43}, -{87,-30,44}, -{87,-30,45}, -{87,-30,46}, -{87,-30,47}, -{87,-30,48}, -{87,-30,49}, -{87,-30,50}, -{87,-30,51}, -{87,-30,52}, -{87,-30,53}, -{87,-30,54}, -{87,-30,55}, -{87,-30,56}, -{87,-30,57}, -{87,-30,58}, -{87,-30,59}, -{87,-30,60}, -{87,-30,61}, -{87,-30,62}, -{87,-30,63}, -{87,-30,64}, -{87,-30,65}, -{87,-30,66}, -{87,-30,67}, -{87,-30,68}, -{87,-30,69}, -{87,-30,70}, -{87,-30,71}, -{87,-30,72}, -{87,-30,73}, -{87,-30,74}, -{87,-30,75}, -{87,-30,76}, -{87,-30,77}, -{87,-30,78}, -{87,-30,79}, -{87,-30,80}, -{87,-30,81}, -{87,-30,82}, -{87,-30,83}, -{87,-30,84}, -{87,-30,85}, -{87,-29,-20}, -{87,-29,-19}, -{87,-29,-18}, -{87,-29,-17}, -{87,-29,-16}, -{87,-29,-15}, -{87,-29,-14}, -{87,-29,-13}, -{87,-29,-12}, -{87,-29,-11}, -{87,-29,-10}, -{87,-29,-9}, -{87,-29,-8}, -{87,-29,-7}, -{87,-29,-6}, -{87,-29,-5}, -{87,-29,-4}, -{87,-29,-3}, -{87,-29,-2}, -{87,-29,-1}, -{87,-29,0}, -{87,-29,1}, -{87,-29,2}, -{87,-29,3}, -{87,-29,4}, -{87,-29,5}, -{87,-29,6}, -{87,-29,7}, -{87,-29,8}, -{87,-29,9}, -{87,-29,10}, -{87,-29,11}, -{87,-29,12}, -{87,-29,13}, -{87,-29,14}, -{87,-29,15}, -{87,-29,16}, -{87,-29,17}, -{87,-29,18}, -{87,-29,19}, -{87,-29,20}, -{87,-29,21}, -{87,-29,22}, -{87,-29,23}, -{87,-29,24}, -{87,-29,25}, -{87,-29,26}, -{87,-29,27}, -{87,-29,28}, -{87,-29,29}, -{87,-29,30}, -{87,-29,31}, -{87,-29,32}, -{87,-29,33}, -{87,-29,34}, -{87,-29,35}, -{87,-29,36}, -{87,-29,37}, -{87,-29,38}, -{87,-29,39}, -{87,-29,40}, -{87,-29,41}, -{87,-29,42}, -{87,-29,43}, -{87,-29,44}, -{87,-29,45}, -{87,-29,46}, -{87,-29,47}, -{87,-29,48}, -{87,-29,49}, -{87,-29,50}, -{87,-29,51}, -{87,-29,52}, -{87,-29,53}, -{87,-29,54}, -{87,-29,55}, -{87,-29,56}, -{87,-29,57}, -{87,-29,58}, -{87,-29,59}, -{87,-29,60}, -{87,-29,61}, -{87,-29,62}, -{87,-29,63}, -{87,-29,64}, -{87,-29,65}, -{87,-29,66}, -{87,-29,67}, -{87,-29,68}, -{87,-29,69}, -{87,-29,70}, -{87,-29,71}, -{87,-29,72}, -{87,-29,73}, -{87,-29,74}, -{87,-29,75}, -{87,-29,76}, -{87,-29,77}, -{87,-29,78}, -{87,-29,79}, -{87,-29,80}, -{87,-29,81}, -{87,-29,82}, -{87,-29,83}, -{87,-29,84}, -{87,-29,85}, -{87,-28,-20}, -{87,-28,-19}, -{87,-28,-18}, -{87,-28,-17}, -{87,-28,-16}, -{87,-28,-15}, -{87,-28,-14}, -{87,-28,-13}, -{87,-28,-12}, -{87,-28,-11}, -{87,-28,-10}, -{87,-28,-9}, -{87,-28,-8}, -{87,-28,-7}, -{87,-28,-6}, -{87,-28,-5}, -{87,-28,-4}, -{87,-28,-3}, -{87,-28,-2}, -{87,-28,-1}, -{87,-28,0}, -{87,-28,1}, -{87,-28,2}, -{87,-28,3}, -{87,-28,4}, -{87,-28,5}, -{87,-28,6}, -{87,-28,7}, -{87,-28,8}, -{87,-28,9}, -{87,-28,10}, -{87,-28,11}, -{87,-28,12}, -{87,-28,13}, -{87,-28,14}, -{87,-28,15}, -{87,-28,16}, -{87,-28,17}, -{87,-28,18}, -{87,-28,19}, -{87,-28,20}, -{87,-28,21}, -{87,-28,22}, -{87,-28,23}, -{87,-28,24}, -{87,-28,25}, -{87,-28,26}, -{87,-28,27}, -{87,-28,28}, -{87,-28,29}, -{87,-28,30}, -{87,-28,31}, -{87,-28,32}, -{87,-28,33}, -{87,-28,34}, -{87,-28,35}, -{87,-28,36}, -{87,-28,37}, -{87,-28,38}, -{87,-28,39}, -{87,-28,40}, -{87,-28,41}, -{87,-28,42}, -{87,-28,43}, -{87,-28,44}, -{87,-28,45}, -{87,-28,46}, -{87,-28,47}, -{87,-28,48}, -{87,-28,49}, -{87,-28,50}, -{87,-28,51}, -{87,-28,52}, -{87,-28,53}, -{87,-28,54}, -{87,-28,55}, -{87,-28,56}, -{87,-28,57}, -{87,-28,58}, -{87,-28,59}, -{87,-28,60}, -{87,-28,61}, -{87,-28,62}, -{87,-28,63}, -{87,-28,64}, -{87,-28,65}, -{87,-28,66}, -{87,-28,67}, -{87,-28,68}, -{87,-28,69}, -{87,-28,70}, -{87,-28,71}, -{87,-28,72}, -{87,-28,73}, -{87,-28,74}, -{87,-28,75}, -{87,-28,76}, -{87,-28,77}, -{87,-28,78}, -{87,-28,79}, -{87,-28,80}, -{87,-28,81}, -{87,-28,82}, -{87,-28,83}, -{87,-28,84}, -{87,-28,85}, -{87,-27,-20}, -{87,-27,-19}, -{87,-27,-18}, -{87,-27,-17}, -{87,-27,-16}, -{87,-27,-15}, -{87,-27,-14}, -{87,-27,-13}, -{87,-27,-12}, -{87,-27,-11}, -{87,-27,-10}, -{87,-27,-9}, -{87,-27,-8}, -{87,-27,-7}, -{87,-27,-6}, -{87,-27,-5}, -{87,-27,-4}, -{87,-27,-3}, -{87,-27,-2}, -{87,-27,-1}, -{87,-27,0}, -{87,-27,1}, -{87,-27,2}, -{87,-27,3}, -{87,-27,4}, -{87,-27,5}, -{87,-27,6}, -{87,-27,7}, -{87,-27,8}, -{87,-27,9}, -{87,-27,10}, -{87,-27,11}, -{87,-27,12}, -{87,-27,13}, -{87,-27,14}, -{87,-27,15}, -{87,-27,16}, -{87,-27,17}, -{87,-27,18}, -{87,-27,19}, -{87,-27,20}, -{87,-27,21}, -{87,-27,22}, -{87,-27,23}, -{87,-27,24}, -{87,-27,25}, -{87,-27,26}, -{87,-27,27}, -{87,-27,28}, -{87,-27,29}, -{87,-27,30}, -{87,-27,31}, -{87,-27,32}, -{87,-27,33}, -{87,-27,34}, -{87,-27,35}, -{87,-27,36}, -{87,-27,37}, -{87,-27,38}, -{87,-27,39}, -{87,-27,40}, -{87,-27,41}, -{87,-27,42}, -{87,-27,43}, -{87,-27,44}, -{87,-27,45}, -{87,-27,46}, -{87,-27,47}, -{87,-27,48}, -{87,-27,49}, -{87,-27,50}, -{87,-27,51}, -{87,-27,52}, -{87,-27,53}, -{87,-27,54}, -{87,-27,55}, -{87,-27,56}, -{87,-27,57}, -{87,-27,58}, -{87,-27,59}, -{87,-27,60}, -{87,-27,61}, -{87,-27,62}, -{87,-27,63}, -{87,-27,64}, -{87,-27,65}, -{87,-27,66}, -{87,-27,67}, -{87,-27,68}, -{87,-27,69}, -{87,-27,70}, -{87,-27,71}, -{87,-27,72}, -{87,-27,73}, -{87,-27,74}, -{87,-27,75}, -{87,-27,76}, -{87,-27,77}, -{87,-27,78}, -{87,-27,79}, -{87,-27,80}, -{87,-27,81}, -{87,-27,82}, -{87,-27,83}, -{87,-27,84}, -{87,-27,85}, -{87,-26,-20}, -{87,-26,-19}, -{87,-26,-18}, -{87,-26,-17}, -{87,-26,-16}, -{87,-26,-15}, -{87,-26,-14}, -{87,-26,-13}, -{87,-26,-12}, -{87,-26,-11}, -{87,-26,-10}, -{87,-26,-9}, -{87,-26,-8}, -{87,-26,-7}, -{87,-26,-6}, -{87,-26,-5}, -{87,-26,-4}, -{87,-26,-3}, -{87,-26,-2}, -{87,-26,-1}, -{87,-26,0}, -{87,-26,1}, -{87,-26,2}, -{87,-26,3}, -{87,-26,4}, -{87,-26,5}, -{87,-26,6}, -{87,-26,7}, -{87,-26,8}, -{87,-26,9}, -{87,-26,10}, -{87,-26,11}, -{87,-26,12}, -{87,-26,13}, -{87,-26,14}, -{87,-26,15}, -{87,-26,16}, -{87,-26,17}, -{87,-26,18}, -{87,-26,19}, -{87,-26,20}, -{87,-26,21}, -{87,-26,22}, -{87,-26,23}, -{87,-26,24}, -{87,-26,25}, -{87,-26,26}, -{87,-26,27}, -{87,-26,28}, -{87,-26,29}, -{87,-26,30}, -{87,-26,31}, -{87,-26,32}, -{87,-26,33}, -{87,-26,34}, -{87,-26,35}, -{87,-26,36}, -{87,-26,37}, -{87,-26,38}, -{87,-26,39}, -{87,-26,40}, -{87,-26,41}, -{87,-26,42}, -{87,-26,43}, -{87,-26,44}, -{87,-26,45}, -{87,-26,46}, -{87,-26,47}, -{87,-26,48}, -{87,-26,49}, -{87,-26,50}, -{87,-26,51}, -{87,-26,52}, -{87,-26,53}, -{87,-26,54}, -{87,-26,55}, -{87,-26,56}, -{87,-26,57}, -{87,-26,58}, -{87,-26,59}, -{87,-26,60}, -{87,-26,61}, -{87,-26,62}, -{87,-26,63}, -{87,-26,64}, -{87,-26,65}, -{87,-26,66}, -{87,-26,67}, -{87,-26,68}, -{87,-26,69}, -{87,-26,70}, -{87,-26,71}, -{87,-26,72}, -{87,-26,73}, -{87,-26,74}, -{87,-26,75}, -{87,-26,76}, -{87,-26,77}, -{87,-26,78}, -{87,-26,79}, -{87,-26,80}, -{87,-26,81}, -{87,-26,82}, -{87,-26,83}, -{87,-26,84}, -{87,-26,85}, -{87,-25,-20}, -{87,-25,-19}, -{87,-25,-18}, -{87,-25,-17}, -{87,-25,-16}, -{87,-25,-15}, -{87,-25,-14}, -{87,-25,-13}, -{87,-25,-12}, -{87,-25,-11}, -{87,-25,-10}, -{87,-25,-9}, -{87,-25,-8}, -{87,-25,-7}, -{87,-25,-6}, -{87,-25,-5}, -{87,-25,-4}, -{87,-25,-3}, -{87,-25,-2}, -{87,-25,-1}, -{87,-25,0}, -{87,-25,1}, -{87,-25,2}, -{87,-25,3}, -{87,-25,4}, -{87,-25,5}, -{87,-25,6}, -{87,-25,7}, -{87,-25,8}, -{87,-25,9}, -{87,-25,10}, -{87,-25,11}, -{87,-25,12}, -{87,-25,13}, -{87,-25,14}, -{87,-25,15}, -{87,-25,16}, -{87,-25,17}, -{87,-25,18}, -{87,-25,19}, -{87,-25,20}, -{87,-25,21}, -{87,-25,22}, -{87,-25,23}, -{87,-25,24}, -{87,-25,25}, -{87,-25,26}, -{87,-25,27}, -{87,-25,28}, -{87,-25,29}, -{87,-25,30}, -{87,-25,31}, -{87,-25,32}, -{87,-25,33}, -{87,-25,34}, -{87,-25,35}, -{87,-25,36}, -{87,-25,37}, -{87,-25,38}, -{87,-25,39}, -{87,-25,40}, -{87,-25,41}, -{87,-25,42}, -{87,-25,43}, -{87,-25,44}, -{87,-25,45}, -{87,-25,46}, -{87,-25,47}, -{87,-25,48}, -{87,-25,49}, -{87,-25,50}, -{87,-25,51}, -{87,-25,52}, -{87,-25,53}, -{87,-25,54}, -{87,-25,55}, -{87,-25,56}, -{87,-25,57}, -{87,-25,58}, -{87,-25,59}, -{87,-25,60}, -{87,-25,61}, -{87,-25,62}, -{87,-25,63}, -{87,-25,64}, -{87,-25,65}, -{87,-25,66}, -{87,-25,67}, -{87,-25,68}, -{87,-25,69}, -{87,-25,70}, -{87,-25,71}, -{87,-25,72}, -{87,-25,73}, -{87,-25,74}, -{87,-25,75}, -{87,-25,76}, -{87,-25,77}, -{87,-25,78}, -{87,-25,79}, -{87,-25,80}, -{87,-25,81}, -{87,-25,82}, -{87,-25,83}, -{87,-25,84}, -{87,-25,85}, -{87,-24,-20}, -{87,-24,-19}, -{87,-24,-18}, -{87,-24,-17}, -{87,-24,-16}, -{87,-24,-15}, -{87,-24,-14}, -{87,-24,-13}, -{87,-24,-12}, -{87,-24,-11}, -{87,-24,-10}, -{87,-24,-9}, -{87,-24,-8}, -{87,-24,-7}, -{87,-24,-6}, -{87,-24,-5}, -{87,-24,-4}, -{87,-24,-3}, -{87,-24,-2}, -{87,-24,-1}, -{87,-24,0}, -{87,-24,1}, -{87,-24,2}, -{87,-24,3}, -{87,-24,4}, -{87,-24,5}, -{87,-24,6}, -{87,-24,7}, -{87,-24,8}, -{87,-24,9}, -{87,-24,10}, -{87,-24,11}, -{87,-24,12}, -{87,-24,13}, -{87,-24,14}, -{87,-24,15}, -{87,-24,16}, -{87,-24,17}, -{87,-24,18}, -{87,-24,19}, -{87,-24,20}, -{87,-24,21}, -{87,-24,22}, -{87,-24,23}, -{87,-24,24}, -{87,-24,25}, -{87,-24,26}, -{87,-24,27}, -{87,-24,28}, -{87,-24,29}, -{87,-24,30}, -{87,-24,31}, -{87,-24,32}, -{87,-24,33}, -{87,-24,34}, -{87,-24,35}, -{87,-24,36}, -{87,-24,37}, -{87,-24,38}, -{87,-24,39}, -{87,-24,40}, -{87,-24,41}, -{87,-24,42}, -{87,-24,43}, -{87,-24,44}, -{87,-24,45}, -{87,-24,46}, -{87,-24,47}, -{87,-24,48}, -{87,-24,49}, -{87,-24,50}, -{87,-24,51}, -{87,-24,52}, -{87,-24,53}, -{87,-24,54}, -{87,-24,55}, -{87,-24,56}, -{87,-24,57}, -{87,-24,58}, -{87,-24,59}, -{87,-24,60}, -{87,-24,61}, -{87,-24,62}, -{87,-24,63}, -{87,-24,64}, -{87,-24,65}, -{87,-24,66}, -{87,-24,67}, -{87,-24,68}, -{87,-24,69}, -{87,-24,70}, -{87,-24,71}, -{87,-24,72}, -{87,-24,73}, -{87,-24,74}, -{87,-24,75}, -{87,-24,76}, -{87,-24,77}, -{87,-24,78}, -{87,-24,79}, -{87,-24,80}, -{87,-24,81}, -{87,-24,82}, -{87,-24,83}, -{87,-24,84}, -{87,-24,85}, -{87,-23,-20}, -{87,-23,-19}, -{87,-23,-18}, -{87,-23,-17}, -{87,-23,-16}, -{87,-23,-15}, -{87,-23,-14}, -{87,-23,-13}, -{87,-23,-12}, -{87,-23,-11}, -{87,-23,-10}, -{87,-23,-9}, -{87,-23,-8}, -{87,-23,-7}, -{87,-23,-6}, -{87,-23,-5}, -{87,-23,-4}, -{87,-23,-3}, -{87,-23,-2}, -{87,-23,-1}, -{87,-23,0}, -{87,-23,1}, -{87,-23,2}, -{87,-23,3}, -{87,-23,4}, -{87,-23,5}, -{87,-23,6}, -{87,-23,7}, -{87,-23,8}, -{87,-23,9}, -{87,-23,10}, -{87,-23,11}, -{87,-23,12}, -{87,-23,13}, -{87,-23,14}, -{87,-23,15}, -{87,-23,16}, -{87,-23,17}, -{87,-23,18}, -{87,-23,19}, -{87,-23,20}, -{87,-23,21}, -{87,-23,22}, -{87,-23,23}, -{87,-23,24}, -{87,-23,25}, -{87,-23,26}, -{87,-23,27}, -{87,-23,28}, -{87,-23,29}, -{87,-23,30}, -{87,-23,31}, -{87,-23,32}, -{87,-23,33}, -{87,-23,34}, -{87,-23,35}, -{87,-23,36}, -{87,-23,37}, -{87,-23,38}, -{87,-23,39}, -{87,-23,40}, -{87,-23,41}, -{87,-23,42}, -{87,-23,43}, -{87,-23,44}, -{87,-23,45}, -{87,-23,46}, -{87,-23,47}, -{87,-23,48}, -{87,-23,49}, -{87,-23,50}, -{87,-23,51}, -{87,-23,52}, -{87,-23,53}, -{87,-23,54}, -{87,-23,55}, -{87,-23,56}, -{87,-23,57}, -{87,-23,58}, -{87,-23,59}, -{87,-23,60}, -{87,-23,61}, -{87,-23,62}, -{87,-23,63}, -{87,-23,64}, -{87,-23,65}, -{87,-23,66}, -{87,-23,67}, -{87,-23,68}, -{87,-23,69}, -{87,-23,70}, -{87,-23,71}, -{87,-23,72}, -{87,-23,73}, -{87,-23,74}, -{87,-23,75}, -{87,-23,76}, -{87,-23,77}, -{87,-23,78}, -{87,-23,79}, -{87,-23,80}, -{87,-23,81}, -{87,-23,82}, -{87,-23,83}, -{87,-23,84}, -{87,-23,85}, -{87,-22,-20}, -{87,-22,-19}, -{87,-22,-18}, -{87,-22,-17}, -{87,-22,-16}, -{87,-22,-15}, -{87,-22,-14}, -{87,-22,-13}, -{87,-22,-12}, -{87,-22,-11}, -{87,-22,-10}, -{87,-22,-9}, -{87,-22,-8}, -{87,-22,-7}, -{87,-22,-6}, -{87,-22,-5}, -{87,-22,-4}, -{87,-22,-3}, -{87,-22,-2}, -{87,-22,-1}, -{87,-22,0}, -{87,-22,1}, -{87,-22,2}, -{87,-22,3}, -{87,-22,4}, -{87,-22,5}, -{87,-22,6}, -{87,-22,7}, -{87,-22,8}, -{87,-22,9}, -{87,-22,10}, -{87,-22,11}, -{87,-22,12}, -{87,-22,13}, -{87,-22,14}, -{87,-22,15}, -{87,-22,16}, -{87,-22,17}, -{87,-22,18}, -{87,-22,19}, -{87,-22,20}, -{87,-22,21}, -{87,-22,22}, -{87,-22,23}, -{87,-22,24}, -{87,-22,25}, -{87,-22,26}, -{87,-22,27}, -{87,-22,28}, -{87,-22,29}, -{87,-22,30}, -{87,-22,31}, -{87,-22,32}, -{87,-22,33}, -{87,-22,34}, -{87,-22,35}, -{87,-22,36}, -{87,-22,37}, -{87,-22,38}, -{87,-22,39}, -{87,-22,40}, -{87,-22,41}, -{87,-22,42}, -{87,-22,43}, -{87,-22,44}, -{87,-22,45}, -{87,-22,46}, -{87,-22,47}, -{87,-22,48}, -{87,-22,49}, -{87,-22,50}, -{87,-22,51}, -{87,-22,52}, -{87,-22,53}, -{87,-22,54}, -{87,-22,55}, -{87,-22,56}, -{87,-22,57}, -{87,-22,58}, -{87,-22,59}, -{87,-22,60}, -{87,-22,61}, -{87,-22,62}, -{87,-22,63}, -{87,-22,64}, -{87,-22,65}, -{87,-22,66}, -{87,-22,67}, -{87,-22,68}, -{87,-22,69}, -{87,-22,70}, -{87,-22,71}, -{87,-22,72}, -{87,-22,73}, -{87,-22,74}, -{87,-22,75}, -{87,-22,76}, -{87,-22,77}, -{87,-22,78}, -{87,-22,79}, -{87,-22,80}, -{87,-22,81}, -{87,-22,82}, -{87,-22,83}, -{87,-22,84}, -{87,-22,85}, -{87,-22,86}, -{87,-21,-20}, -{87,-21,-19}, -{87,-21,-18}, -{87,-21,-17}, -{87,-21,-16}, -{87,-21,-15}, -{87,-21,-14}, -{87,-21,-13}, -{87,-21,-12}, -{87,-21,-11}, -{87,-21,-10}, -{87,-21,-9}, -{87,-21,-8}, -{87,-21,-7}, -{87,-21,-6}, -{87,-21,-5}, -{87,-21,-4}, -{87,-21,-3}, -{87,-21,-2}, -{87,-21,-1}, -{87,-21,0}, -{87,-21,1}, -{87,-21,2}, -{87,-21,3}, -{87,-21,4}, -{87,-21,5}, -{87,-21,6}, -{87,-21,7}, -{87,-21,8}, -{87,-21,9}, -{87,-21,10}, -{87,-21,11}, -{87,-21,12}, -{87,-21,13}, -{87,-21,14}, -{87,-21,15}, -{87,-21,16}, -{87,-21,17}, -{87,-21,18}, -{87,-21,19}, -{87,-21,20}, -{87,-21,21}, -{87,-21,22}, -{87,-21,23}, -{87,-21,24}, -{87,-21,25}, -{87,-21,26}, -{87,-21,27}, -{87,-21,28}, -{87,-21,29}, -{87,-21,30}, -{87,-21,31}, -{87,-21,32}, -{87,-21,33}, -{87,-21,34}, -{87,-21,35}, -{87,-21,36}, -{87,-21,37}, -{87,-21,38}, -{87,-21,39}, -{87,-21,40}, -{87,-21,41}, -{87,-21,42}, -{87,-21,43}, -{87,-21,44}, -{87,-21,45}, -{87,-21,46}, -{87,-21,47}, -{87,-21,48}, -{87,-21,49}, -{87,-21,50}, -{87,-21,51}, -{87,-21,52}, -{87,-21,53}, -{87,-21,54}, -{87,-21,55}, -{87,-21,56}, -{87,-21,57}, -{87,-21,58}, -{87,-21,59}, -{87,-21,60}, -{87,-21,61}, -{87,-21,62}, -{87,-21,63}, -{87,-21,64}, -{87,-21,65}, -{87,-21,66}, -{87,-21,67}, -{87,-21,68}, -{87,-21,69}, -{87,-21,70}, -{87,-21,71}, -{87,-21,72}, -{87,-21,73}, -{87,-21,74}, -{87,-21,75}, -{87,-21,76}, -{87,-21,77}, -{87,-21,78}, -{87,-21,79}, -{87,-21,80}, -{87,-21,81}, -{87,-21,82}, -{87,-21,83}, -{87,-21,84}, -{87,-21,85}, -{87,-21,86}, -{87,-20,-20}, -{87,-20,-19}, -{87,-20,-18}, -{87,-20,-17}, -{87,-20,-16}, -{87,-20,-15}, -{87,-20,-14}, -{87,-20,-13}, -{87,-20,-12}, -{87,-20,-11}, -{87,-20,-10}, -{87,-20,-9}, -{87,-20,-8}, -{87,-20,-7}, -{87,-20,-6}, -{87,-20,-5}, -{87,-20,-4}, -{87,-20,-3}, -{87,-20,-2}, -{87,-20,-1}, -{87,-20,0}, -{87,-20,1}, -{87,-20,2}, -{87,-20,3}, -{87,-20,4}, -{87,-20,5}, -{87,-20,6}, -{87,-20,7}, -{87,-20,8}, -{87,-20,9}, -{87,-20,10}, -{87,-20,11}, -{87,-20,12}, -{87,-20,13}, -{87,-20,14}, -{87,-20,15}, -{87,-20,16}, -{87,-20,17}, -{87,-20,18}, -{87,-20,19}, -{87,-20,20}, -{87,-20,21}, -{87,-20,22}, -{87,-20,23}, -{87,-20,24}, -{87,-20,25}, -{87,-20,26}, -{87,-20,27}, -{87,-20,28}, -{87,-20,29}, -{87,-20,30}, -{87,-20,31}, -{87,-20,32}, -{87,-20,33}, -{87,-20,34}, -{87,-20,35}, -{87,-20,36}, -{87,-20,37}, -{87,-20,38}, -{87,-20,39}, -{87,-20,40}, -{87,-20,41}, -{87,-20,42}, -{87,-20,43}, -{87,-20,44}, -{87,-20,45}, -{87,-20,46}, -{87,-20,47}, -{87,-20,48}, -{87,-20,49}, -{87,-20,50}, -{87,-20,51}, -{87,-20,52}, -{87,-20,53}, -{87,-20,54}, -{87,-20,55}, -{87,-20,56}, -{87,-20,57}, -{87,-20,58}, -{87,-20,59}, -{87,-20,60}, -{87,-20,61}, -{87,-20,62}, -{87,-20,63}, -{87,-20,64}, -{87,-20,65}, -{87,-20,66}, -{87,-20,67}, -{87,-20,68}, -{87,-20,69}, -{87,-20,70}, -{87,-20,71}, -{87,-20,72}, -{87,-20,73}, -{87,-20,74}, -{87,-20,75}, -{87,-20,76}, -{87,-20,77}, -{87,-20,78}, -{87,-20,79}, -{87,-20,80}, -{87,-20,81}, -{87,-20,82}, -{87,-20,83}, -{87,-20,84}, -{87,-20,85}, -{87,-20,86}, -{87,-19,-20}, -{87,-19,-19}, -{87,-19,-18}, -{87,-19,-17}, -{87,-19,-16}, -{87,-19,-15}, -{87,-19,-14}, -{87,-19,-13}, -{87,-19,-12}, -{87,-19,-11}, -{87,-19,-10}, -{87,-19,-9}, -{87,-19,-8}, -{87,-19,-7}, -{87,-19,-6}, -{87,-19,-5}, -{87,-19,-4}, -{87,-19,-3}, -{87,-19,-2}, -{87,-19,-1}, -{87,-19,0}, -{87,-19,1}, -{87,-19,2}, -{87,-19,3}, -{87,-19,4}, -{87,-19,5}, -{87,-19,6}, -{87,-19,7}, -{87,-19,8}, -{87,-19,9}, -{87,-19,10}, -{87,-19,11}, -{87,-19,12}, -{87,-19,13}, -{87,-19,14}, -{87,-19,15}, -{87,-19,16}, -{87,-19,17}, -{87,-19,18}, -{87,-19,19}, -{87,-19,20}, -{87,-19,21}, -{87,-19,22}, -{87,-19,23}, -{87,-19,24}, -{87,-19,25}, -{87,-19,26}, -{87,-19,27}, -{87,-19,28}, -{87,-19,29}, -{87,-19,30}, -{87,-19,31}, -{87,-19,32}, -{87,-19,33}, -{87,-19,34}, -{87,-19,35}, -{87,-19,36}, -{87,-19,37}, -{87,-19,38}, -{87,-19,39}, -{87,-19,40}, -{87,-19,41}, -{87,-19,42}, -{87,-19,43}, -{87,-19,44}, -{87,-19,45}, -{87,-19,46}, -{87,-19,47}, -{87,-19,48}, -{87,-19,49}, -{87,-19,50}, -{87,-19,51}, -{87,-19,52}, -{87,-19,53}, -{87,-19,54}, -{87,-19,55}, -{87,-19,56}, -{87,-19,57}, -{87,-19,58}, -{87,-19,59}, -{87,-19,60}, -{87,-19,61}, -{87,-19,62}, -{87,-19,63}, -{87,-19,64}, -{87,-19,65}, -{87,-19,66}, -{87,-19,67}, -{87,-19,68}, -{87,-19,69}, -{87,-19,70}, -{87,-19,71}, -{87,-19,72}, -{87,-19,73}, -{87,-19,74}, -{87,-19,75}, -{87,-19,76}, -{87,-19,77}, -{87,-19,78}, -{87,-19,79}, -{87,-19,80}, -{87,-19,81}, -{87,-19,82}, -{87,-19,83}, -{87,-19,84}, -{87,-19,85}, -{87,-19,86}, -{87,-18,-20}, -{87,-18,-19}, -{87,-18,-18}, -{87,-18,-17}, -{87,-18,-16}, -{87,-18,-15}, -{87,-18,-14}, -{87,-18,-13}, -{87,-18,-12}, -{87,-18,-11}, -{87,-18,-10}, -{87,-18,-9}, -{87,-18,-8}, -{87,-18,-7}, -{87,-18,-6}, -{87,-18,-5}, -{87,-18,-4}, -{87,-18,-3}, -{87,-18,-2}, -{87,-18,-1}, -{87,-18,0}, -{87,-18,1}, -{87,-18,2}, -{87,-18,3}, -{87,-18,4}, -{87,-18,5}, -{87,-18,6}, -{87,-18,7}, -{87,-18,8}, -{87,-18,9}, -{87,-18,10}, -{87,-18,11}, -{87,-18,12}, -{87,-18,13}, -{87,-18,14}, -{87,-18,15}, -{87,-18,16}, -{87,-18,17}, -{87,-18,18}, -{87,-18,19}, -{87,-18,20}, -{87,-18,21}, -{87,-18,22}, -{87,-18,23}, -{87,-18,24}, -{87,-18,25}, -{87,-18,26}, -{87,-18,27}, -{87,-18,28}, -{87,-18,29}, -{87,-18,30}, -{87,-18,31}, -{87,-18,32}, -{87,-18,33}, -{87,-18,34}, -{87,-18,35}, -{87,-18,36}, -{87,-18,37}, -{87,-18,38}, -{87,-18,39}, -{87,-18,40}, -{87,-18,41}, -{87,-18,42}, -{87,-18,43}, -{87,-18,44}, -{87,-18,45}, -{87,-18,46}, -{87,-18,47}, -{87,-18,48}, -{87,-18,49}, -{87,-18,50}, -{87,-18,51}, -{87,-18,52}, -{87,-18,53}, -{87,-18,54}, -{87,-18,55}, -{87,-18,56}, -{87,-18,57}, -{87,-18,58}, -{87,-18,59}, -{87,-18,60}, -{87,-18,61}, -{87,-18,62}, -{87,-18,63}, -{87,-18,64}, -{87,-18,65}, -{87,-18,66}, -{87,-18,67}, -{87,-18,68}, -{87,-18,69}, -{87,-18,70}, -{87,-18,71}, -{87,-18,72}, -{87,-18,73}, -{87,-18,74}, -{87,-18,75}, -{87,-18,76}, -{87,-18,77}, -{87,-18,78}, -{87,-18,79}, -{87,-18,80}, -{87,-18,81}, -{87,-18,82}, -{87,-18,83}, -{87,-18,84}, -{87,-18,85}, -{87,-18,86}, -{87,-17,-20}, -{87,-17,-19}, -{87,-17,-18}, -{87,-17,-17}, -{87,-17,-16}, -{87,-17,-15}, -{87,-17,-14}, -{87,-17,-13}, -{87,-17,-12}, -{87,-17,-11}, -{87,-17,-10}, -{87,-17,-9}, -{87,-17,-8}, -{87,-17,-7}, -{87,-17,-6}, -{87,-17,-5}, -{87,-17,-4}, -{87,-17,-3}, -{87,-17,-2}, -{87,-17,-1}, -{87,-17,0}, -{87,-17,1}, -{87,-17,2}, -{87,-17,3}, -{87,-17,4}, -{87,-17,5}, -{87,-17,6}, -{87,-17,7}, -{87,-17,8}, -{87,-17,9}, -{87,-17,10}, -{87,-17,11}, -{87,-17,12}, -{87,-17,13}, -{87,-17,14}, -{87,-17,15}, -{87,-17,16}, -{87,-17,17}, -{87,-17,18}, -{87,-17,19}, -{87,-17,20}, -{87,-17,21}, -{87,-17,22}, -{87,-17,23}, -{87,-17,24}, -{87,-17,25}, -{87,-17,26}, -{87,-17,27}, -{87,-17,28}, -{87,-17,29}, -{87,-17,30}, -{87,-17,31}, -{87,-17,32}, -{87,-17,33}, -{87,-17,34}, -{87,-17,35}, -{87,-17,36}, -{87,-17,37}, -{87,-17,38}, -{87,-17,39}, -{87,-17,40}, -{87,-17,41}, -{87,-17,42}, -{87,-17,43}, -{87,-17,44}, -{87,-17,45}, -{87,-17,46}, -{87,-17,47}, -{87,-17,48}, -{87,-17,49}, -{87,-17,50}, -{87,-17,51}, -{87,-17,52}, -{87,-17,53}, -{87,-17,54}, -{87,-17,55}, -{87,-17,56}, -{87,-17,57}, -{87,-17,58}, -{87,-17,59}, -{87,-17,60}, -{87,-17,61}, -{87,-17,62}, -{87,-17,63}, -{87,-17,64}, -{87,-17,65}, -{87,-17,66}, -{87,-17,67}, -{87,-17,68}, -{87,-17,69}, -{87,-17,70}, -{87,-17,71}, -{87,-17,72}, -{87,-17,73}, -{87,-17,74}, -{87,-17,75}, -{87,-17,76}, -{87,-17,77}, -{87,-17,78}, -{87,-17,79}, -{87,-17,80}, -{87,-17,81}, -{87,-17,82}, -{87,-17,83}, -{87,-17,84}, -{87,-17,85}, -{87,-17,86}, -{87,-16,-20}, -{87,-16,-19}, -{87,-16,-18}, -{87,-16,-17}, -{87,-16,-16}, -{87,-16,-15}, -{87,-16,-14}, -{87,-16,-13}, -{87,-16,-12}, -{87,-16,-11}, -{87,-16,-10}, -{87,-16,-9}, -{87,-16,-8}, -{87,-16,-7}, -{87,-16,-6}, -{87,-16,-5}, -{87,-16,-4}, -{87,-16,-3}, -{87,-16,-2}, -{87,-16,-1}, -{87,-16,0}, -{87,-16,1}, -{87,-16,2}, -{87,-16,3}, -{87,-16,4}, -{87,-16,5}, -{87,-16,6}, -{87,-16,7}, -{87,-16,8}, -{87,-16,9}, -{87,-16,10}, -{87,-16,11}, -{87,-16,12}, -{87,-16,13}, -{87,-16,14}, -{87,-16,15}, -{87,-16,16}, -{87,-16,17}, -{87,-16,18}, -{87,-16,19}, -{87,-16,20}, -{87,-16,21}, -{87,-16,22}, -{87,-16,23}, -{87,-16,24}, -{87,-16,25}, -{87,-16,26}, -{87,-16,27}, -{87,-16,28}, -{87,-16,29}, -{87,-16,30}, -{87,-16,31}, -{87,-16,32}, -{87,-16,33}, -{87,-16,34}, -{87,-16,35}, -{87,-16,36}, -{87,-16,37}, -{87,-16,38}, -{87,-16,39}, -{87,-16,40}, -{87,-16,41}, -{87,-16,42}, -{87,-16,43}, -{87,-16,44}, -{87,-16,45}, -{87,-16,46}, -{87,-16,47}, -{87,-16,48}, -{87,-16,49}, -{87,-16,50}, -{87,-16,51}, -{87,-16,52}, -{87,-16,53}, -{87,-16,54}, -{87,-16,55}, -{87,-16,56}, -{87,-16,57}, -{87,-16,58}, -{87,-16,59}, -{87,-16,60}, -{87,-16,61}, -{87,-16,62}, -{87,-16,63}, -{87,-16,64}, -{87,-16,65}, -{87,-16,66}, -{87,-16,67}, -{87,-16,68}, -{87,-16,69}, -{87,-16,70}, -{87,-16,71}, -{87,-16,72}, -{87,-16,73}, -{87,-16,74}, -{87,-16,75}, -{87,-16,76}, -{87,-16,77}, -{87,-16,78}, -{87,-16,79}, -{87,-16,80}, -{87,-16,81}, -{87,-16,82}, -{87,-16,83}, -{87,-16,84}, -{87,-16,85}, -{87,-16,86}, -{87,-15,-20}, -{87,-15,-19}, -{87,-15,-18}, -{87,-15,-17}, -{87,-15,-16}, -{87,-15,-15}, -{87,-15,-14}, -{87,-15,-13}, -{87,-15,-12}, -{87,-15,-11}, -{87,-15,-10}, -{87,-15,-9}, -{87,-15,-8}, -{87,-15,-7}, -{87,-15,-6}, -{87,-15,-5}, -{87,-15,-4}, -{87,-15,-3}, -{87,-15,-2}, -{87,-15,-1}, -{87,-15,0}, -{87,-15,1}, -{87,-15,2}, -{87,-15,3}, -{87,-15,4}, -{87,-15,5}, -{87,-15,6}, -{87,-15,7}, -{87,-15,8}, -{87,-15,9}, -{87,-15,10}, -{87,-15,11}, -{87,-15,12}, -{87,-15,13}, -{87,-15,14}, -{87,-15,15}, -{87,-15,16}, -{87,-15,17}, -{87,-15,18}, -{87,-15,19}, -{87,-15,20}, -{87,-15,21}, -{87,-15,22}, -{87,-15,23}, -{87,-15,24}, -{87,-15,25}, -{87,-15,26}, -{87,-15,27}, -{87,-15,28}, -{87,-15,29}, -{87,-15,30}, -{87,-15,31}, -{87,-15,32}, -{87,-15,33}, -{87,-15,34}, -{87,-15,35}, -{87,-15,36}, -{87,-15,37}, -{87,-15,38}, -{87,-15,39}, -{87,-15,40}, -{87,-15,41}, -{87,-15,42}, -{87,-15,43}, -{87,-15,44}, -{87,-15,45}, -{87,-15,46}, -{87,-15,47}, -{87,-15,48}, -{87,-15,49}, -{87,-15,50}, -{87,-15,51}, -{87,-15,52}, -{87,-15,53}, -{87,-15,54}, -{87,-15,55}, -{87,-15,56}, -{87,-15,57}, -{87,-15,58}, -{87,-15,59}, -{87,-15,60}, -{87,-15,61}, -{87,-15,62}, -{87,-15,63}, -{87,-15,64}, -{87,-15,65}, -{87,-15,66}, -{87,-15,67}, -{87,-15,68}, -{87,-15,69}, -{87,-15,70}, -{87,-15,71}, -{87,-15,72}, -{87,-15,73}, -{87,-15,74}, -{87,-15,75}, -{87,-15,76}, -{87,-15,77}, -{87,-15,78}, -{87,-15,79}, -{87,-15,80}, -{87,-15,81}, -{87,-15,82}, -{87,-15,83}, -{87,-15,84}, -{87,-15,85}, -{87,-15,86}, -{87,-14,-20}, -{87,-14,-19}, -{87,-14,-18}, -{87,-14,-17}, -{87,-14,-16}, -{87,-14,-15}, -{87,-14,-14}, -{87,-14,-13}, -{87,-14,-12}, -{87,-14,-11}, -{87,-14,-10}, -{87,-14,-9}, -{87,-14,-8}, -{87,-14,-7}, -{87,-14,-6}, -{87,-14,-5}, -{87,-14,-4}, -{87,-14,-3}, -{87,-14,-2}, -{87,-14,-1}, -{87,-14,0}, -{87,-14,1}, -{87,-14,2}, -{87,-14,3}, -{87,-14,4}, -{87,-14,5}, -{87,-14,6}, -{87,-14,7}, -{87,-14,8}, -{87,-14,9}, -{87,-14,10}, -{87,-14,11}, -{87,-14,12}, -{87,-14,13}, -{87,-14,14}, -{87,-14,15}, -{87,-14,16}, -{87,-14,17}, -{87,-14,18}, -{87,-14,19}, -{87,-14,20}, -{87,-14,21}, -{87,-14,22}, -{87,-14,23}, -{87,-14,24}, -{87,-14,25}, -{87,-14,26}, -{87,-14,27}, -{87,-14,28}, -{87,-14,29}, -{87,-14,30}, -{87,-14,31}, -{87,-14,32}, -{87,-14,33}, -{87,-14,34}, -{87,-14,35}, -{87,-14,36}, -{87,-14,37}, -{87,-14,38}, -{87,-14,39}, -{87,-14,40}, -{87,-14,41}, -{87,-14,42}, -{87,-14,43}, -{87,-14,44}, -{87,-14,45}, -{87,-14,46}, -{87,-14,47}, -{87,-14,48}, -{87,-14,49}, -{87,-14,50}, -{87,-14,51}, -{87,-14,52}, -{87,-14,53}, -{87,-14,54}, -{87,-14,55}, -{87,-14,56}, -{87,-14,57}, -{87,-14,58}, -{87,-14,59}, -{87,-14,60}, -{87,-14,61}, -{87,-14,62}, -{87,-14,63}, -{87,-14,64}, -{87,-14,65}, -{87,-14,66}, -{87,-14,67}, -{87,-14,68}, -{87,-14,69}, -{87,-14,70}, -{87,-14,71}, -{87,-14,72}, -{87,-14,73}, -{87,-14,74}, -{87,-14,75}, -{87,-14,76}, -{87,-14,77}, -{87,-14,78}, -{87,-14,79}, -{87,-14,80}, -{87,-14,81}, -{87,-14,82}, -{87,-14,83}, -{87,-14,84}, -{87,-14,85}, -{87,-14,86}, -{87,-13,-20}, -{87,-13,-19}, -{87,-13,-18}, -{87,-13,-17}, -{87,-13,-16}, -{87,-13,-15}, -{87,-13,-14}, -{87,-13,-13}, -{87,-13,-12}, -{87,-13,-11}, -{87,-13,-10}, -{87,-13,-9}, -{87,-13,-8}, -{87,-13,-7}, -{87,-13,-6}, -{87,-13,-5}, -{87,-13,-4}, -{87,-13,-3}, -{87,-13,-2}, -{87,-13,-1}, -{87,-13,0}, -{87,-13,1}, -{87,-13,2}, -{87,-13,3}, -{87,-13,4}, -{87,-13,5}, -{87,-13,6}, -{87,-13,7}, -{87,-13,8}, -{87,-13,9}, -{87,-13,10}, -{87,-13,11}, -{87,-13,12}, -{87,-13,13}, -{87,-13,14}, -{87,-13,15}, -{87,-13,16}, -{87,-13,17}, -{87,-13,18}, -{87,-13,19}, -{87,-13,20}, -{87,-13,21}, -{87,-13,22}, -{87,-13,23}, -{87,-13,24}, -{87,-13,25}, -{87,-13,26}, -{87,-13,27}, -{87,-13,28}, -{87,-13,29}, -{87,-13,30}, -{87,-13,31}, -{87,-13,32}, -{87,-13,33}, -{87,-13,34}, -{87,-13,35}, -{87,-13,36}, -{87,-13,37}, -{87,-13,38}, -{87,-13,39}, -{87,-13,40}, -{87,-13,41}, -{87,-13,42}, -{87,-13,43}, -{87,-13,44}, -{87,-13,45}, -{87,-13,46}, -{87,-13,47}, -{87,-13,48}, -{87,-13,49}, -{87,-13,50}, -{87,-13,51}, -{87,-13,52}, -{87,-13,53}, -{87,-13,54}, -{87,-13,55}, -{87,-13,56}, -{87,-13,57}, -{87,-13,58}, -{87,-13,59}, -{87,-13,60}, -{87,-13,61}, -{87,-13,62}, -{87,-13,63}, -{87,-13,64}, -{87,-13,65}, -{87,-13,66}, -{87,-13,67}, -{87,-13,68}, -{87,-13,69}, -{87,-13,70}, -{87,-13,71}, -{87,-13,72}, -{87,-13,73}, -{87,-13,74}, -{87,-13,75}, -{87,-13,76}, -{87,-13,77}, -{87,-13,78}, -{87,-13,79}, -{87,-13,80}, -{87,-13,81}, -{87,-13,82}, -{87,-13,83}, -{87,-13,84}, -{87,-13,85}, -{87,-13,86}, -{87,-12,-20}, -{87,-12,-19}, -{87,-12,-18}, -{87,-12,-17}, -{87,-12,-16}, -{87,-12,-15}, -{87,-12,-14}, -{87,-12,-13}, -{87,-12,-12}, -{87,-12,-11}, -{87,-12,-10}, -{87,-12,-9}, -{87,-12,-8}, -{87,-12,-7}, -{87,-12,-6}, -{87,-12,-5}, -{87,-12,-4}, -{87,-12,-3}, -{87,-12,-2}, -{87,-12,-1}, -{87,-12,0}, -{87,-12,1}, -{87,-12,2}, -{87,-12,3}, -{87,-12,4}, -{87,-12,5}, -{87,-12,6}, -{87,-12,7}, -{87,-12,8}, -{87,-12,9}, -{87,-12,10}, -{87,-12,11}, -{87,-12,12}, -{87,-12,13}, -{87,-12,14}, -{87,-12,15}, -{87,-12,16}, -{87,-12,17}, -{87,-12,18}, -{87,-12,19}, -{87,-12,20}, -{87,-12,21}, -{87,-12,22}, -{87,-12,23}, -{87,-12,24}, -{87,-12,25}, -{87,-12,26}, -{87,-12,27}, -{87,-12,28}, -{87,-12,29}, -{87,-12,30}, -{87,-12,31}, -{87,-12,32}, -{87,-12,33}, -{87,-12,34}, -{87,-12,35}, -{87,-12,36}, -{87,-12,37}, -{87,-12,38}, -{87,-12,39}, -{87,-12,40}, -{87,-12,41}, -{87,-12,42}, -{87,-12,43}, -{87,-12,44}, -{87,-12,45}, -{87,-12,46}, -{87,-12,47}, -{87,-12,48}, -{87,-12,49}, -{87,-12,50}, -{87,-12,51}, -{87,-12,52}, -{87,-12,53}, -{87,-12,54}, -{87,-12,55}, -{87,-12,56}, -{87,-12,57}, -{87,-12,58}, -{87,-12,59}, -{87,-12,60}, -{87,-12,61}, -{87,-12,62}, -{87,-12,63}, -{87,-12,64}, -{87,-12,65}, -{87,-12,66}, -{87,-12,67}, -{87,-12,68}, -{87,-12,69}, -{87,-12,70}, -{87,-12,71}, -{87,-12,72}, -{87,-12,73}, -{87,-12,74}, -{87,-12,75}, -{87,-12,76}, -{87,-12,77}, -{87,-12,78}, -{87,-12,79}, -{87,-12,80}, -{87,-12,81}, -{87,-12,82}, -{87,-12,83}, -{87,-12,84}, -{87,-12,85}, -{87,-12,86}, -{87,-11,-20}, -{87,-11,-19}, -{87,-11,-18}, -{87,-11,-17}, -{87,-11,-16}, -{87,-11,-15}, -{87,-11,-14}, -{87,-11,-13}, -{87,-11,-12}, -{87,-11,-11}, -{87,-11,-10}, -{87,-11,-9}, -{87,-11,-8}, -{87,-11,-7}, -{87,-11,-6}, -{87,-11,-5}, -{87,-11,-4}, -{87,-11,-3}, -{87,-11,-2}, -{87,-11,-1}, -{87,-11,0}, -{87,-11,1}, -{87,-11,2}, -{87,-11,3}, -{87,-11,4}, -{87,-11,5}, -{87,-11,6}, -{87,-11,7}, -{87,-11,8}, -{87,-11,9}, -{87,-11,10}, -{87,-11,11}, -{87,-11,12}, -{87,-11,13}, -{87,-11,14}, -{87,-11,15}, -{87,-11,16}, -{87,-11,17}, -{87,-11,18}, -{87,-11,19}, -{87,-11,20}, -{87,-11,21}, -{87,-11,22}, -{87,-11,23}, -{87,-11,24}, -{87,-11,25}, -{87,-11,26}, -{87,-11,27}, -{87,-11,28}, -{87,-11,29}, -{87,-11,30}, -{87,-11,31}, -{87,-11,32}, -{87,-11,33}, -{87,-11,34}, -{87,-11,35}, -{87,-11,36}, -{87,-11,37}, -{87,-11,38}, -{87,-11,39}, -{87,-11,40}, -{87,-11,41}, -{87,-11,42}, -{87,-11,43}, -{87,-11,44}, -{87,-11,45}, -{87,-11,46}, -{87,-11,47}, -{87,-11,48}, -{87,-11,49}, -{87,-11,50}, -{87,-11,51}, -{87,-11,52}, -{87,-11,53}, -{87,-11,54}, -{87,-11,55}, -{87,-11,56}, -{87,-11,57}, -{87,-11,58}, -{87,-11,59}, -{87,-11,60}, -{87,-11,61}, -{87,-11,62}, -{87,-11,63}, -{87,-11,64}, -{87,-11,65}, -{87,-11,66}, -{87,-11,67}, -{87,-11,68}, -{87,-11,69}, -{87,-11,70}, -{87,-11,71}, -{87,-11,72}, -{87,-11,73}, -{87,-11,74}, -{87,-11,75}, -{87,-11,76}, -{87,-11,77}, -{87,-11,78}, -{87,-11,79}, -{87,-11,80}, -{87,-11,81}, -{87,-11,82}, -{87,-11,83}, -{87,-11,84}, -{87,-11,85}, -{87,-11,86}, -{87,-10,-20}, -{87,-10,-19}, -{87,-10,-18}, -{87,-10,-17}, -{87,-10,-16}, -{87,-10,-15}, -{87,-10,-14}, -{87,-10,-13}, -{87,-10,-12}, -{87,-10,-11}, -{87,-10,-10}, -{87,-10,-9}, -{87,-10,-8}, -{87,-10,-7}, -{87,-10,-6}, -{87,-10,-5}, -{87,-10,-4}, -{87,-10,-3}, -{87,-10,-2}, -{87,-10,-1}, -{87,-10,0}, -{87,-10,1}, -{87,-10,2}, -{87,-10,3}, -{87,-10,4}, -{87,-10,5}, -{87,-10,6}, -{87,-10,7}, -{87,-10,8}, -{87,-10,9}, -{87,-10,10}, -{87,-10,11}, -{87,-10,12}, -{87,-10,13}, -{87,-10,14}, -{87,-10,15}, -{87,-10,16}, -{87,-10,17}, -{87,-10,18}, -{87,-10,19}, -{87,-10,20}, -{87,-10,21}, -{87,-10,22}, -{87,-10,23}, -{87,-10,24}, -{87,-10,25}, -{87,-10,26}, -{87,-10,27}, -{87,-10,28}, -{87,-10,29}, -{87,-10,30}, -{87,-10,31}, -{87,-10,32}, -{87,-10,33}, -{87,-10,34}, -{87,-10,35}, -{87,-10,36}, -{87,-10,37}, -{87,-10,38}, -{87,-10,39}, -{87,-10,40}, -{87,-10,41}, -{87,-10,42}, -{87,-10,43}, -{87,-10,44}, -{87,-10,45}, -{87,-10,46}, -{87,-10,47}, -{87,-10,48}, -{87,-10,49}, -{87,-10,50}, -{87,-10,51}, -{87,-10,52}, -{87,-10,53}, -{87,-10,54}, -{87,-10,55}, -{87,-10,56}, -{87,-10,57}, -{87,-10,58}, -{87,-10,59}, -{87,-10,60}, -{87,-10,61}, -{87,-10,62}, -{87,-10,63}, -{87,-10,64}, -{87,-10,65}, -{87,-10,66}, -{87,-10,67}, -{87,-10,68}, -{87,-10,69}, -{87,-10,70}, -{87,-10,71}, -{87,-10,72}, -{87,-10,73}, -{87,-10,74}, -{87,-10,75}, -{87,-10,76}, -{87,-10,77}, -{87,-10,78}, -{87,-10,79}, -{87,-10,80}, -{87,-10,81}, -{87,-10,82}, -{87,-10,83}, -{87,-10,84}, -{87,-10,85}, -{87,-10,86}, -{87,-9,-20}, -{87,-9,-19}, -{87,-9,-18}, -{87,-9,-17}, -{87,-9,-16}, -{87,-9,-15}, -{87,-9,-14}, -{87,-9,-13}, -{87,-9,-12}, -{87,-9,-11}, -{87,-9,-10}, -{87,-9,-9}, -{87,-9,-8}, -{87,-9,-7}, -{87,-9,-6}, -{87,-9,-5}, -{87,-9,-4}, -{87,-9,-3}, -{87,-9,-2}, -{87,-9,-1}, -{87,-9,0}, -{87,-9,1}, -{87,-9,2}, -{87,-9,3}, -{87,-9,4}, -{87,-9,5}, -{87,-9,6}, -{87,-9,7}, -{87,-9,8}, -{87,-9,9}, -{87,-9,10}, -{87,-9,11}, -{87,-9,12}, -{87,-9,13}, -{87,-9,14}, -{87,-9,15}, -{87,-9,16}, -{87,-9,17}, -{87,-9,18}, -{87,-9,19}, -{87,-9,20}, -{87,-9,21}, -{87,-9,22}, -{87,-9,23}, -{87,-9,24}, -{87,-9,25}, -{87,-9,26}, -{87,-9,27}, -{87,-9,28}, -{87,-9,29}, -{87,-9,30}, -{87,-9,31}, -{87,-9,32}, -{87,-9,33}, -{87,-9,34}, -{87,-9,35}, -{87,-9,36}, -{87,-9,37}, -{87,-9,38}, -{87,-9,39}, -{87,-9,40}, -{87,-9,41}, -{87,-9,42}, -{87,-9,43}, -{87,-9,44}, -{87,-9,45}, -{87,-9,46}, -{87,-9,47}, -{87,-9,48}, -{87,-9,49}, -{87,-9,50}, -{87,-9,51}, -{87,-9,52}, -{87,-9,53}, -{87,-9,54}, -{87,-9,55}, -{87,-9,56}, -{87,-9,57}, -{87,-9,58}, -{87,-9,59}, -{87,-9,60}, -{87,-9,61}, -{87,-9,62}, -{87,-9,63}, -{87,-9,64}, -{87,-9,65}, -{87,-9,66}, -{87,-9,67}, -{87,-9,68}, -{87,-9,69}, -{87,-9,70}, -{87,-9,71}, -{87,-9,72}, -{87,-9,73}, -{87,-9,74}, -{87,-9,75}, -{87,-9,76}, -{87,-9,77}, -{87,-9,78}, -{87,-9,79}, -{87,-9,80}, -{87,-9,81}, -{87,-9,82}, -{87,-9,83}, -{87,-9,84}, -{87,-9,85}, -{87,-9,86}, -{87,-8,-20}, -{87,-8,-19}, -{87,-8,-18}, -{87,-8,-17}, -{87,-8,-16}, -{87,-8,-15}, -{87,-8,-14}, -{87,-8,-13}, -{87,-8,-12}, -{87,-8,-11}, -{87,-8,-10}, -{87,-8,-9}, -{87,-8,-8}, -{87,-8,-7}, -{87,-8,-6}, -{87,-8,-5}, -{87,-8,-4}, -{87,-8,-3}, -{87,-8,-2}, -{87,-8,-1}, -{87,-8,0}, -{87,-8,1}, -{87,-8,2}, -{87,-8,3}, -{87,-8,4}, -{87,-8,5}, -{87,-8,6}, -{87,-8,7}, -{87,-8,8}, -{87,-8,9}, -{87,-8,10}, -{87,-8,11}, -{87,-8,12}, -{87,-8,13}, -{87,-8,14}, -{87,-8,15}, -{87,-8,16}, -{87,-8,17}, -{87,-8,18}, -{87,-8,19}, -{87,-8,20}, -{87,-8,21}, -{87,-8,22}, -{87,-8,23}, -{87,-8,24}, -{87,-8,25}, -{87,-8,26}, -{87,-8,27}, -{87,-8,28}, -{87,-8,29}, -{87,-8,30}, -{87,-8,31}, -{87,-8,32}, -{87,-8,33}, -{87,-8,34}, -{87,-8,35}, -{87,-8,36}, -{87,-8,37}, -{87,-8,38}, -{87,-8,39}, -{87,-8,40}, -{87,-8,41}, -{87,-8,42}, -{87,-8,43}, -{87,-8,44}, -{87,-8,45}, -{87,-8,46}, -{87,-8,47}, -{87,-8,48}, -{87,-8,49}, -{87,-8,50}, -{87,-8,51}, -{87,-8,52}, -{87,-8,53}, -{87,-8,54}, -{87,-8,55}, -{87,-8,56}, -{87,-8,57}, -{87,-8,58}, -{87,-8,59}, -{87,-8,60}, -{87,-8,61}, -{87,-8,62}, -{87,-8,63}, -{87,-8,64}, -{87,-8,65}, -{87,-8,66}, -{87,-8,67}, -{87,-8,68}, -{87,-8,69}, -{87,-8,70}, -{87,-8,71}, -{87,-8,72}, -{87,-8,73}, -{87,-8,74}, -{87,-8,75}, -{87,-8,76}, -{87,-8,77}, -{87,-8,78}, -{87,-8,79}, -{87,-8,80}, -{87,-8,81}, -{87,-8,82}, -{87,-8,83}, -{87,-8,84}, -{87,-8,85}, -{87,-8,86}, -{87,-7,-20}, -{87,-7,-19}, -{87,-7,-18}, -{87,-7,-17}, -{87,-7,-16}, -{87,-7,-15}, -{87,-7,-14}, -{87,-7,-13}, -{87,-7,-12}, -{87,-7,-11}, -{87,-7,-10}, -{87,-7,-9}, -{87,-7,-8}, -{87,-7,-7}, -{87,-7,-6}, -{87,-7,-5}, -{87,-7,-4}, -{87,-7,-3}, -{87,-7,-2}, -{87,-7,-1}, -{87,-7,0}, -{87,-7,1}, -{87,-7,2}, -{87,-7,3}, -{87,-7,4}, -{87,-7,5}, -{87,-7,6}, -{87,-7,7}, -{87,-7,8}, -{87,-7,9}, -{87,-7,10}, -{87,-7,11}, -{87,-7,12}, -{87,-7,13}, -{87,-7,14}, -{87,-7,15}, -{87,-7,16}, -{87,-7,17}, -{87,-7,18}, -{87,-7,19}, -{87,-7,20}, -{87,-7,21}, -{87,-7,22}, -{87,-7,23}, -{87,-7,24}, -{87,-7,25}, -{87,-7,26}, -{87,-7,27}, -{87,-7,28}, -{87,-7,29}, -{87,-7,30}, -{87,-7,31}, -{87,-7,32}, -{87,-7,33}, -{87,-7,34}, -{87,-7,35}, -{87,-7,36}, -{87,-7,37}, -{87,-7,38}, -{87,-7,39}, -{87,-7,40}, -{87,-7,41}, -{87,-7,42}, -{87,-7,43}, -{87,-7,44}, -{87,-7,45}, -{87,-7,46}, -{87,-7,47}, -{87,-7,48}, -{87,-7,49}, -{87,-7,50}, -{87,-7,51}, -{87,-7,52}, -{87,-7,53}, -{87,-7,54}, -{87,-7,55}, -{87,-7,56}, -{87,-7,57}, -{87,-7,58}, -{87,-7,59}, -{87,-7,60}, -{87,-7,61}, -{87,-7,62}, -{87,-7,63}, -{87,-7,64}, -{87,-7,65}, -{87,-7,66}, -{87,-7,67}, -{87,-7,68}, -{87,-7,69}, -{87,-7,70}, -{87,-7,71}, -{87,-7,72}, -{87,-7,73}, -{87,-7,74}, -{87,-7,75}, -{87,-7,76}, -{87,-7,77}, -{87,-7,78}, -{87,-7,79}, -{87,-7,80}, -{87,-7,81}, -{87,-7,82}, -{87,-7,83}, -{87,-7,84}, -{87,-7,85}, -{87,-7,86}, -{87,-7,87}, -{87,-6,-19}, -{87,-6,-18}, -{87,-6,-17}, -{87,-6,-16}, -{87,-6,-15}, -{87,-6,-14}, -{87,-6,-13}, -{87,-6,-12}, -{87,-6,-11}, -{87,-6,-10}, -{87,-6,-9}, -{87,-6,-8}, -{87,-6,-7}, -{87,-6,-6}, -{87,-6,-5}, -{87,-6,-4}, -{87,-6,-3}, -{87,-6,-2}, -{87,-6,-1}, -{87,-6,0}, -{87,-6,1}, -{87,-6,2}, -{87,-6,3}, -{87,-6,4}, -{87,-6,5}, -{87,-6,6}, -{87,-6,7}, -{87,-6,8}, -{87,-6,9}, -{87,-6,10}, -{87,-6,11}, -{87,-6,12}, -{87,-6,13}, -{87,-6,14}, -{87,-6,15}, -{87,-6,16}, -{87,-6,17}, -{87,-6,18}, -{87,-6,19}, -{87,-6,20}, -{87,-6,21}, -{87,-6,22}, -{87,-6,23}, -{87,-6,24}, -{87,-6,25}, -{87,-6,26}, -{87,-6,27}, -{87,-6,28}, -{87,-6,29}, -{87,-6,30}, -{87,-6,31}, -{87,-6,32}, -{87,-6,33}, -{87,-6,34}, -{87,-6,35}, -{87,-6,36}, -{87,-6,37}, -{87,-6,38}, -{87,-6,39}, -{87,-6,40}, -{87,-6,41}, -{87,-6,42}, -{87,-6,43}, -{87,-6,44}, -{87,-6,45}, -{87,-6,46}, -{87,-6,47}, -{87,-6,48}, -{87,-6,49}, -{87,-6,50}, -{87,-6,51}, -{87,-6,52}, -{87,-6,53}, -{87,-6,54}, -{87,-6,55}, -{87,-6,56}, -{87,-6,57}, -{87,-6,58}, -{87,-6,59}, -{87,-6,60}, -{87,-6,61}, -{87,-6,62}, -{87,-6,63}, -{87,-6,64}, -{87,-6,65}, -{87,-6,66}, -{87,-6,67}, -{87,-6,68}, -{87,-6,69}, -{87,-6,70}, -{87,-6,71}, -{87,-6,72}, -{87,-6,73}, -{87,-6,74}, -{87,-6,75}, -{87,-6,76}, -{87,-6,77}, -{87,-6,78}, -{87,-6,79}, -{87,-6,80}, -{87,-6,81}, -{87,-6,82}, -{87,-6,83}, -{87,-6,84}, -{87,-6,85}, -{87,-6,86}, -{87,-6,87}, -{87,-5,-19}, -{87,-5,-18}, -{87,-5,-17}, -{87,-5,-16}, -{87,-5,-15}, -{87,-5,-14}, -{87,-5,-13}, -{87,-5,-12}, -{87,-5,-11}, -{87,-5,-10}, -{87,-5,-9}, -{87,-5,-8}, -{87,-5,-7}, -{87,-5,-6}, -{87,-5,-5}, -{87,-5,-4}, -{87,-5,-3}, -{87,-5,-2}, -{87,-5,-1}, -{87,-5,0}, -{87,-5,1}, -{87,-5,2}, -{87,-5,3}, -{87,-5,4}, -{87,-5,5}, -{87,-5,6}, -{87,-5,7}, -{87,-5,8}, -{87,-5,9}, -{87,-5,10}, -{87,-5,11}, -{87,-5,12}, -{87,-5,13}, -{87,-5,14}, -{87,-5,15}, -{87,-5,16}, -{87,-5,17}, -{87,-5,18}, -{87,-5,19}, -{87,-5,20}, -{87,-5,21}, -{87,-5,22}, -{87,-5,23}, -{87,-5,24}, -{87,-5,25}, -{87,-5,26}, -{87,-5,27}, -{87,-5,28}, -{87,-5,29}, -{87,-5,30}, -{87,-5,31}, -{87,-5,32}, -{87,-5,33}, -{87,-5,34}, -{87,-5,35}, -{87,-5,36}, -{87,-5,37}, -{87,-5,38}, -{87,-5,39}, -{87,-5,40}, -{87,-5,41}, -{87,-5,42}, -{87,-5,43}, -{87,-5,44}, -{87,-5,45}, -{87,-5,46}, -{87,-5,47}, -{87,-5,48}, -{87,-5,49}, -{87,-5,50}, -{87,-5,51}, -{87,-5,52}, -{87,-5,53}, -{87,-5,54}, -{87,-5,55}, -{87,-5,56}, -{87,-5,57}, -{87,-5,58}, -{87,-5,59}, -{87,-5,60}, -{87,-5,61}, -{87,-5,62}, -{87,-5,63}, -{87,-5,64}, -{87,-5,65}, -{87,-5,66}, -{87,-5,67}, -{87,-5,68}, -{87,-5,69}, -{87,-5,70}, -{87,-5,71}, -{87,-5,72}, -{87,-5,73}, -{87,-5,74}, -{87,-5,75}, -{87,-5,76}, -{87,-5,77}, -{87,-5,78}, -{87,-5,79}, -{87,-5,80}, -{87,-5,81}, -{87,-5,82}, -{87,-5,83}, -{87,-5,84}, -{87,-5,85}, -{87,-5,86}, -{87,-5,87}, -{87,-4,-19}, -{87,-4,-18}, -{87,-4,-17}, -{87,-4,-16}, -{87,-4,-15}, -{87,-4,-14}, -{87,-4,-13}, -{87,-4,-12}, -{87,-4,-11}, -{87,-4,-10}, -{87,-4,-9}, -{87,-4,-8}, -{87,-4,-7}, -{87,-4,-6}, -{87,-4,-5}, -{87,-4,-4}, -{87,-4,-3}, -{87,-4,-2}, -{87,-4,-1}, -{87,-4,0}, -{87,-4,1}, -{87,-4,2}, -{87,-4,3}, -{87,-4,4}, -{87,-4,5}, -{87,-4,6}, -{87,-4,7}, -{87,-4,8}, -{87,-4,9}, -{87,-4,10}, -{87,-4,11}, -{87,-4,12}, -{87,-4,13}, -{87,-4,14}, -{87,-4,15}, -{87,-4,16}, -{87,-4,17}, -{87,-4,18}, -{87,-4,19}, -{87,-4,20}, -{87,-4,21}, -{87,-4,22}, -{87,-4,23}, -{87,-4,24}, -{87,-4,25}, -{87,-4,26}, -{87,-4,27}, -{87,-4,28}, -{87,-4,29}, -{87,-4,30}, -{87,-4,31}, -{87,-4,32}, -{87,-4,33}, -{87,-4,34}, -{87,-4,35}, -{87,-4,36}, -{87,-4,37}, -{87,-4,38}, -{87,-4,39}, -{87,-4,40}, -{87,-4,41}, -{87,-4,42}, -{87,-4,43}, -{87,-4,44}, -{87,-4,45}, -{87,-4,46}, -{87,-4,47}, -{87,-4,48}, -{87,-4,49}, -{87,-4,50}, -{87,-4,51}, -{87,-4,52}, -{87,-4,53}, -{87,-4,54}, -{87,-4,55}, -{87,-4,56}, -{87,-4,57}, -{87,-4,58}, -{87,-4,59}, -{87,-4,60}, -{87,-4,61}, -{87,-4,62}, -{87,-4,63}, -{87,-4,64}, -{87,-4,65}, -{87,-4,66}, -{87,-4,67}, -{87,-4,68}, -{87,-4,69}, -{87,-4,70}, -{87,-4,71}, -{87,-4,72}, -{87,-4,73}, -{87,-4,74}, -{87,-4,75}, -{87,-4,76}, -{87,-4,77}, -{87,-4,78}, -{87,-4,79}, -{87,-4,80}, -{87,-4,81}, -{87,-4,82}, -{87,-4,83}, -{87,-4,84}, -{87,-4,85}, -{87,-4,86}, -{87,-4,87}, -{87,-3,-19}, -{87,-3,-18}, -{87,-3,-17}, -{87,-3,-16}, -{87,-3,-15}, -{87,-3,-14}, -{87,-3,-13}, -{87,-3,-12}, -{87,-3,-11}, -{87,-3,-10}, -{87,-3,-9}, -{87,-3,-8}, -{87,-3,-7}, -{87,-3,-6}, -{87,-3,-5}, -{87,-3,-4}, -{87,-3,-3}, -{87,-3,-2}, -{87,-3,-1}, -{87,-3,0}, -{87,-3,1}, -{87,-3,2}, -{87,-3,3}, -{87,-3,4}, -{87,-3,5}, -{87,-3,6}, -{87,-3,7}, -{87,-3,8}, -{87,-3,9}, -{87,-3,10}, -{87,-3,11}, -{87,-3,12}, -{87,-3,13}, -{87,-3,14}, -{87,-3,15}, -{87,-3,16}, -{87,-3,17}, -{87,-3,18}, -{87,-3,19}, -{87,-3,20}, -{87,-3,21}, -{87,-3,22}, -{87,-3,23}, -{87,-3,24}, -{87,-3,25}, -{87,-3,26}, -{87,-3,27}, -{87,-3,28}, -{87,-3,29}, -{87,-3,30}, -{87,-3,31}, -{87,-3,32}, -{87,-3,33}, -{87,-3,34}, -{87,-3,35}, -{87,-3,36}, -{87,-3,37}, -{87,-3,38}, -{87,-3,39}, -{87,-3,40}, -{87,-3,41}, -{87,-3,42}, -{87,-3,43}, -{87,-3,44}, -{87,-3,45}, -{87,-3,46}, -{87,-3,47}, -{87,-3,48}, -{87,-3,49}, -{87,-3,50}, -{87,-3,51}, -{87,-3,52}, -{87,-3,53}, -{87,-3,54}, -{87,-3,55}, -{87,-3,56}, -{87,-3,57}, -{87,-3,58}, -{87,-3,59}, -{87,-3,60}, -{87,-3,61}, -{87,-3,62}, -{87,-3,63}, -{87,-3,64}, -{87,-3,65}, -{87,-3,66}, -{87,-3,67}, -{87,-3,68}, -{87,-3,69}, -{87,-3,70}, -{87,-3,71}, -{87,-3,72}, -{87,-3,73}, -{87,-3,74}, -{87,-3,75}, -{87,-3,76}, -{87,-3,77}, -{87,-3,78}, -{87,-3,79}, -{87,-3,80}, -{87,-3,81}, -{87,-3,82}, -{87,-3,83}, -{87,-3,84}, -{87,-3,85}, -{87,-3,86}, -{87,-3,87}, -{87,-2,-19}, -{87,-2,-18}, -{87,-2,-17}, -{87,-2,-16}, -{87,-2,-15}, -{87,-2,-14}, -{87,-2,-13}, -{87,-2,-12}, -{87,-2,-11}, -{87,-2,-10}, -{87,-2,-9}, -{87,-2,-8}, -{87,-2,-7}, -{87,-2,-6}, -{87,-2,-5}, -{87,-2,-4}, -{87,-2,-3}, -{87,-2,-2}, -{87,-2,-1}, -{87,-2,0}, -{87,-2,1}, -{87,-2,2}, -{87,-2,3}, -{87,-2,4}, -{87,-2,5}, -{87,-2,6}, -{87,-2,7}, -{87,-2,8}, -{87,-2,9}, -{87,-2,10}, -{87,-2,11}, -{87,-2,12}, -{87,-2,13}, -{87,-2,14}, -{87,-2,15}, -{87,-2,16}, -{87,-2,17}, -{87,-2,18}, -{87,-2,19}, -{87,-2,20}, -{87,-2,21}, -{87,-2,22}, -{87,-2,23}, -{87,-2,24}, -{87,-2,25}, -{87,-2,26}, -{87,-2,27}, -{87,-2,28}, -{87,-2,29}, -{87,-2,30}, -{87,-2,31}, -{87,-2,32}, -{87,-2,33}, -{87,-2,34}, -{87,-2,35}, -{87,-2,36}, -{87,-2,37}, -{87,-2,38}, -{87,-2,39}, -{87,-2,40}, -{87,-2,41}, -{87,-2,42}, -{87,-2,43}, -{87,-2,44}, -{87,-2,45}, -{87,-2,46}, -{87,-2,47}, -{87,-2,48}, -{87,-2,49}, -{87,-2,50}, -{87,-2,51}, -{87,-2,52}, -{87,-2,53}, -{87,-2,54}, -{87,-2,55}, -{87,-2,56}, -{87,-2,57}, -{87,-2,58}, -{87,-2,59}, -{87,-2,60}, -{87,-2,61}, -{87,-2,62}, -{87,-2,63}, -{87,-2,64}, -{87,-2,65}, -{87,-2,66}, -{87,-2,67}, -{87,-2,68}, -{87,-2,69}, -{87,-2,70}, -{87,-2,71}, -{87,-2,72}, -{87,-2,73}, -{87,-2,74}, -{87,-2,75}, -{87,-2,76}, -{87,-2,77}, -{87,-2,78}, -{87,-2,79}, -{87,-2,80}, -{87,-2,81}, -{87,-2,82}, -{87,-2,83}, -{87,-2,84}, -{87,-2,85}, -{87,-2,86}, -{87,-2,87}, -{87,-1,-19}, -{87,-1,-18}, -{87,-1,-17}, -{87,-1,-16}, -{87,-1,-15}, -{87,-1,-14}, -{87,-1,-13}, -{87,-1,-12}, -{87,-1,-11}, -{87,-1,-10}, -{87,-1,-9}, -{87,-1,-8}, -{87,-1,-7}, -{87,-1,-6}, -{87,-1,-5}, -{87,-1,-4}, -{87,-1,-3}, -{87,-1,-2}, -{87,-1,-1}, -{87,-1,0}, -{87,-1,1}, -{87,-1,2}, -{87,-1,3}, -{87,-1,4}, -{87,-1,5}, -{87,-1,6}, -{87,-1,7}, -{87,-1,8}, -{87,-1,9}, -{87,-1,10}, -{87,-1,11}, -{87,-1,12}, -{87,-1,13}, -{87,-1,14}, -{87,-1,15}, -{87,-1,16}, -{87,-1,17}, -{87,-1,18}, -{87,-1,19}, -{87,-1,20}, -{87,-1,21}, -{87,-1,22}, -{87,-1,23}, -{87,-1,24}, -{87,-1,25}, -{87,-1,26}, -{87,-1,27}, -{87,-1,28}, -{87,-1,29}, -{87,-1,30}, -{87,-1,31}, -{87,-1,32}, -{87,-1,33}, -{87,-1,34}, -{87,-1,35}, -{87,-1,36}, -{87,-1,37}, -{87,-1,38}, -{87,-1,39}, -{87,-1,40}, -{87,-1,41}, -{87,-1,42}, -{87,-1,43}, -{87,-1,44}, -{87,-1,45}, -{87,-1,46}, -{87,-1,47}, -{87,-1,48}, -{87,-1,49}, -{87,-1,50}, -{87,-1,51}, -{87,-1,52}, -{87,-1,53}, -{87,-1,54}, -{87,-1,55}, -{87,-1,56}, -{87,-1,57}, -{87,-1,58}, -{87,-1,59}, -{87,-1,60}, -{87,-1,61}, -{87,-1,62}, -{87,-1,63}, -{87,-1,64}, -{87,-1,65}, -{87,-1,66}, -{87,-1,67}, -{87,-1,68}, -{87,-1,69}, -{87,-1,70}, -{87,-1,71}, -{87,-1,72}, -{87,-1,73}, -{87,-1,74}, -{87,-1,75}, -{87,-1,76}, -{87,-1,77}, -{87,-1,78}, -{87,-1,79}, -{87,-1,80}, -{87,0,-19}, -{87,0,-18}, -{87,0,-17}, -{87,0,-16}, -{87,0,-15}, -{87,0,-14}, -{87,0,-13}, -{87,0,-12}, -{87,0,-11}, -{87,0,-10}, -{87,0,-9}, -{87,0,-8}, -{87,0,-7}, -{87,0,-6}, -{87,0,-5}, -{87,0,-4}, -{87,0,-3}, -{87,0,-2}, -{87,0,-1}, -{87,0,0}, -{87,0,1}, -{87,0,2}, -{87,0,3}, -{87,0,4}, -{87,0,5}, -{87,0,6}, -{87,0,7}, -{87,0,8}, -{87,0,9}, -{87,0,10}, -{87,0,11}, -{87,0,12}, -{87,0,13}, -{87,0,14}, -{87,0,15}, -{87,0,16}, -{87,0,17}, -{87,0,18}, -{87,0,19}, -{87,0,20}, -{87,0,21}, -{87,0,22}, -{87,0,23}, -{87,0,24}, -{87,0,25}, -{87,0,26}, -{87,0,27}, -{87,0,28}, -{87,0,29}, -{87,0,30}, -{87,0,31}, -{87,0,32}, -{87,0,33}, -{87,0,34}, -{87,0,35}, -{87,0,36}, -{87,0,37}, -{87,0,38}, -{87,0,39}, -{87,0,40}, -{87,0,41}, -{87,0,42}, -{87,0,43}, -{87,0,44}, -{87,0,45}, -{87,0,46}, -{87,0,47}, -{87,0,48}, -{87,0,49}, -{87,0,50}, -{87,0,51}, -{87,0,52}, -{87,0,53}, -{87,0,54}, -{87,0,55}, -{87,0,56}, -{87,0,57}, -{87,0,58}, -{87,0,59}, -{87,0,60}, -{87,0,61}, -{87,0,62}, -{87,0,63}, -{87,0,64}, -{87,0,65}, -{87,0,66}, -{87,0,67}, -{87,0,68}, -{87,0,69}, -{87,0,70}, -{87,0,71}, -{87,0,72}, -{87,0,73}, -{87,1,-19}, -{87,1,-18}, -{87,1,-17}, -{87,1,-16}, -{87,1,-15}, -{87,1,-14}, -{87,1,-13}, -{87,1,-12}, -{87,1,-11}, -{87,1,-10}, -{87,1,-9}, -{87,1,-8}, -{87,1,-7}, -{87,1,-6}, -{87,1,-5}, -{87,1,-4}, -{87,1,-3}, -{87,1,-2}, -{87,1,-1}, -{87,1,0}, -{87,1,1}, -{87,1,2}, -{87,1,3}, -{87,1,4}, -{87,1,5}, -{87,1,6}, -{87,1,7}, -{87,1,8}, -{87,1,9}, -{87,1,10}, -{87,1,11}, -{87,1,12}, -{87,1,13}, -{87,1,14}, -{87,1,15}, -{87,1,16}, -{87,1,17}, -{87,1,18}, -{87,1,19}, -{87,1,20}, -{87,1,21}, -{87,1,22}, -{87,1,23}, -{87,1,24}, -{87,1,25}, -{87,1,26}, -{87,1,27}, -{87,1,28}, -{87,1,29}, -{87,1,30}, -{87,1,31}, -{87,1,32}, -{87,1,33}, -{87,1,34}, -{87,1,35}, -{87,1,36}, -{87,1,37}, -{87,1,38}, -{87,1,39}, -{87,1,40}, -{87,1,41}, -{87,1,42}, -{87,1,43}, -{87,1,44}, -{87,1,45}, -{87,1,46}, -{87,1,47}, -{87,1,48}, -{87,1,49}, -{87,1,50}, -{87,1,51}, -{87,1,52}, -{87,1,53}, -{87,1,54}, -{87,1,55}, -{87,1,56}, -{87,1,57}, -{87,1,58}, -{87,1,59}, -{87,1,60}, -{87,1,61}, -{87,1,62}, -{87,1,63}, -{87,1,64}, -{87,1,65}, -{87,1,66}, -{87,2,-19}, -{87,2,-18}, -{87,2,-17}, -{87,2,-16}, -{87,2,-15}, -{87,2,-14}, -{87,2,-13}, -{87,2,-12}, -{87,2,-11}, -{87,2,-10}, -{87,2,-9}, -{87,2,-8}, -{87,2,-7}, -{87,2,-6}, -{87,2,-5}, -{87,2,-4}, -{87,2,-3}, -{87,2,-2}, -{87,2,-1}, -{87,2,0}, -{87,2,1}, -{87,2,2}, -{87,2,3}, -{87,2,4}, -{87,2,5}, -{87,2,6}, -{87,2,7}, -{87,2,8}, -{87,2,9}, -{87,2,10}, -{87,2,11}, -{87,2,12}, -{87,2,13}, -{87,2,14}, -{87,2,15}, -{87,2,16}, -{87,2,17}, -{87,2,18}, -{87,2,19}, -{87,2,20}, -{87,2,21}, -{87,2,22}, -{87,2,23}, -{87,2,24}, -{87,2,25}, -{87,2,26}, -{87,2,27}, -{87,2,28}, -{87,2,29}, -{87,2,30}, -{87,2,31}, -{87,2,32}, -{87,2,33}, -{87,2,34}, -{87,2,35}, -{87,2,36}, -{87,2,37}, -{87,2,38}, -{87,2,39}, -{87,2,40}, -{87,2,41}, -{87,2,42}, -{87,2,43}, -{87,2,44}, -{87,2,45}, -{87,2,46}, -{87,2,47}, -{87,2,48}, -{87,2,49}, -{87,2,50}, -{87,2,51}, -{87,2,52}, -{87,2,53}, -{87,2,54}, -{87,2,55}, -{87,2,56}, -{87,2,57}, -{87,2,58}, -{87,2,59}, -{87,2,60}, -{87,2,61}, -{87,3,-19}, -{87,3,-18}, -{87,3,-17}, -{87,3,-16}, -{87,3,-15}, -{87,3,-14}, -{87,3,-13}, -{87,3,-12}, -{87,3,-11}, -{87,3,-10}, -{87,3,-9}, -{87,3,-8}, -{87,3,-7}, -{87,3,-6}, -{87,3,-5}, -{87,3,-4}, -{87,3,-3}, -{87,3,-2}, -{87,3,-1}, -{87,3,0}, -{87,3,1}, -{87,3,2}, -{87,3,3}, -{87,3,4}, -{87,3,5}, -{87,3,6}, -{87,3,7}, -{87,3,8}, -{87,3,9}, -{87,3,10}, -{87,3,11}, -{87,3,12}, -{87,3,13}, -{87,3,14}, -{87,3,15}, -{87,3,16}, -{87,3,17}, -{87,3,18}, -{87,3,19}, -{87,3,20}, -{87,3,21}, -{87,3,22}, -{87,3,23}, -{87,3,24}, -{87,3,25}, -{87,3,26}, -{87,3,27}, -{87,3,28}, -{87,3,29}, -{87,3,30}, -{87,3,31}, -{87,3,32}, -{87,3,33}, -{87,3,34}, -{87,3,35}, -{87,3,36}, -{87,3,37}, -{87,3,38}, -{87,3,39}, -{87,3,40}, -{87,3,41}, -{87,3,42}, -{87,3,43}, -{87,3,44}, -{87,3,45}, -{87,3,46}, -{87,3,47}, -{87,3,48}, -{87,3,49}, -{87,3,50}, -{87,3,51}, -{87,3,52}, -{87,3,53}, -{87,3,54}, -{87,3,55}, -{87,3,56}, -{87,4,-19}, -{87,4,-18}, -{87,4,-17}, -{87,4,-16}, -{87,4,-15}, -{87,4,-14}, -{87,4,-13}, -{87,4,-12}, -{87,4,-11}, -{87,4,-10}, -{87,4,-9}, -{87,4,-8}, -{87,4,-7}, -{87,4,-6}, -{87,4,-5}, -{87,4,-4}, -{87,4,-3}, -{87,4,-2}, -{87,4,-1}, -{87,4,0}, -{87,4,1}, -{87,4,2}, -{87,4,3}, -{87,4,4}, -{87,4,5}, -{87,4,6}, -{87,4,7}, -{87,4,8}, -{87,4,9}, -{87,4,10}, -{87,4,11}, -{87,4,12}, -{87,4,13}, -{87,4,14}, -{87,4,15}, -{87,4,16}, -{87,4,17}, -{87,4,18}, -{87,4,19}, -{87,4,20}, -{87,4,21}, -{87,4,22}, -{87,4,23}, -{87,4,24}, -{87,4,25}, -{87,4,26}, -{87,4,27}, -{87,4,28}, -{87,4,29}, -{87,4,30}, -{87,4,31}, -{87,4,32}, -{87,4,33}, -{87,4,34}, -{87,4,35}, -{87,4,36}, -{87,4,37}, -{87,4,38}, -{87,4,39}, -{87,4,40}, -{87,4,41}, -{87,4,42}, -{87,4,43}, -{87,4,44}, -{87,4,45}, -{87,4,46}, -{87,4,47}, -{87,4,48}, -{87,4,49}, -{87,4,50}, -{87,4,51}, -{87,5,-19}, -{87,5,-18}, -{87,5,-17}, -{87,5,-16}, -{87,5,-15}, -{87,5,-14}, -{87,5,-13}, -{87,5,-12}, -{87,5,-11}, -{87,5,-10}, -{87,5,-9}, -{87,5,-8}, -{87,5,-7}, -{87,5,-6}, -{87,5,-5}, -{87,5,-4}, -{87,5,-3}, -{87,5,-2}, -{87,5,-1}, -{87,5,0}, -{87,5,1}, -{87,5,2}, -{87,5,3}, -{87,5,4}, -{87,5,5}, -{87,5,6}, -{87,5,7}, -{87,5,8}, -{87,5,9}, -{87,5,10}, -{87,5,11}, -{87,5,12}, -{87,5,13}, -{87,5,14}, -{87,5,15}, -{87,5,16}, -{87,5,17}, -{87,5,18}, -{87,5,19}, -{87,5,20}, -{87,5,21}, -{87,5,22}, -{87,5,23}, -{87,5,24}, -{87,5,25}, -{87,5,26}, -{87,5,27}, -{87,5,28}, -{87,5,29}, -{87,5,30}, -{87,5,31}, -{87,5,32}, -{87,5,33}, -{87,5,34}, -{87,5,35}, -{87,5,36}, -{87,5,37}, -{87,5,38}, -{87,5,39}, -{87,5,40}, -{87,5,41}, -{87,5,42}, -{87,5,43}, -{87,5,44}, -{87,5,45}, -{87,5,46}, -{87,5,47}, -{87,6,-19}, -{87,6,-18}, -{87,6,-17}, -{87,6,-16}, -{87,6,-15}, -{87,6,-14}, -{87,6,-13}, -{87,6,-12}, -{87,6,-11}, -{87,6,-10}, -{87,6,-9}, -{87,6,-8}, -{87,6,-7}, -{87,6,-6}, -{87,6,-5}, -{87,6,-4}, -{87,6,-3}, -{87,6,-2}, -{87,6,-1}, -{87,6,0}, -{87,6,1}, -{87,6,2}, -{87,6,3}, -{87,6,4}, -{87,6,5}, -{87,6,6}, -{87,6,7}, -{87,6,8}, -{87,6,9}, -{87,6,10}, -{87,6,11}, -{87,6,12}, -{87,6,13}, -{87,6,14}, -{87,6,15}, -{87,6,16}, -{87,6,17}, -{87,6,18}, -{87,6,19}, -{87,6,20}, -{87,6,21}, -{87,6,22}, -{87,6,23}, -{87,6,24}, -{87,6,25}, -{87,6,26}, -{87,6,27}, -{87,6,28}, -{87,6,29}, -{87,6,30}, -{87,6,31}, -{87,6,32}, -{87,6,33}, -{87,6,34}, -{87,6,35}, -{87,6,36}, -{87,6,37}, -{87,6,38}, -{87,6,39}, -{87,6,40}, -{87,6,41}, -{87,6,42}, -{87,7,-19}, -{87,7,-18}, -{87,7,-17}, -{87,7,-16}, -{87,7,-15}, -{87,7,-14}, -{87,7,-13}, -{87,7,-12}, -{87,7,-11}, -{87,7,-10}, -{87,7,-9}, -{87,7,-8}, -{87,7,-7}, -{87,7,-6}, -{87,7,-5}, -{87,7,-4}, -{87,7,-3}, -{87,7,-2}, -{87,7,-1}, -{87,7,0}, -{87,7,1}, -{87,7,2}, -{87,7,3}, -{87,7,4}, -{87,7,5}, -{87,7,6}, -{87,7,7}, -{87,7,8}, -{87,7,9}, -{87,7,10}, -{87,7,11}, -{87,7,12}, -{87,7,13}, -{87,7,14}, -{87,7,15}, -{87,7,16}, -{87,7,17}, -{87,7,18}, -{87,7,19}, -{87,7,20}, -{87,7,21}, -{87,7,22}, -{87,7,23}, -{87,7,24}, -{87,7,25}, -{87,7,26}, -{87,7,27}, -{87,7,28}, -{87,7,29}, -{87,7,30}, -{87,7,31}, -{87,7,32}, -{87,7,33}, -{87,7,34}, -{87,7,35}, -{87,7,36}, -{87,7,37}, -{87,7,38}, -{87,8,-19}, -{87,8,-18}, -{87,8,-17}, -{87,8,-16}, -{87,8,-15}, -{87,8,-14}, -{87,8,-13}, -{87,8,-12}, -{87,8,-11}, -{87,8,-10}, -{87,8,-9}, -{87,8,-8}, -{87,8,-7}, -{87,8,-6}, -{87,8,-5}, -{87,8,-4}, -{87,8,-3}, -{87,8,-2}, -{87,8,-1}, -{87,8,0}, -{87,8,1}, -{87,8,2}, -{87,8,3}, -{87,8,4}, -{87,8,5}, -{87,8,6}, -{87,8,7}, -{87,8,8}, -{87,8,9}, -{87,8,10}, -{87,8,11}, -{87,8,12}, -{87,8,13}, -{87,8,14}, -{87,8,15}, -{87,8,16}, -{87,8,17}, -{87,8,18}, -{87,8,19}, -{87,8,20}, -{87,8,21}, -{87,8,22}, -{87,8,23}, -{87,8,24}, -{87,8,25}, -{87,8,26}, -{87,8,27}, -{87,8,28}, -{87,8,29}, -{87,8,30}, -{87,8,31}, -{87,8,32}, -{87,8,33}, -{87,8,34}, -{87,8,35}, -{87,9,-19}, -{87,9,-18}, -{87,9,-17}, -{87,9,-16}, -{87,9,-15}, -{87,9,-14}, -{87,9,-13}, -{87,9,-12}, -{87,9,-11}, -{87,9,-10}, -{87,9,-9}, -{87,9,-8}, -{87,9,-7}, -{87,9,-6}, -{87,9,-5}, -{87,9,-4}, -{87,9,-3}, -{87,9,-2}, -{87,9,-1}, -{87,9,0}, -{87,9,1}, -{87,9,2}, -{87,9,3}, -{87,9,4}, -{87,9,5}, -{87,9,6}, -{87,9,7}, -{87,9,8}, -{87,9,9}, -{87,9,10}, -{87,9,11}, -{87,9,12}, -{87,9,13}, -{87,9,14}, -{87,9,15}, -{87,9,16}, -{87,9,17}, -{87,9,18}, -{87,9,19}, -{87,9,20}, -{87,9,21}, -{87,9,22}, -{87,9,23}, -{87,9,24}, -{87,9,25}, -{87,9,26}, -{87,9,27}, -{87,9,28}, -{87,9,29}, -{87,9,30}, -{87,9,31}, -{87,10,-19}, -{87,10,-18}, -{87,10,-17}, -{87,10,-16}, -{87,10,-15}, -{87,10,-14}, -{87,10,-13}, -{87,10,-12}, -{87,10,-11}, -{87,10,-10}, -{87,10,-9}, -{87,10,-8}, -{87,10,-7}, -{87,10,-6}, -{87,10,-5}, -{87,10,-4}, -{87,10,-3}, -{87,10,-2}, -{87,10,-1}, -{87,10,0}, -{87,10,1}, -{87,10,2}, -{87,10,3}, -{87,10,4}, -{87,10,5}, -{87,10,6}, -{87,10,7}, -{87,10,8}, -{87,10,9}, -{87,10,10}, -{87,10,11}, -{87,10,12}, -{87,10,13}, -{87,10,14}, -{87,10,15}, -{87,10,16}, -{87,10,17}, -{87,10,18}, -{87,10,19}, -{87,10,20}, -{87,10,21}, -{87,10,22}, -{87,10,23}, -{87,10,24}, -{87,10,25}, -{87,10,26}, -{87,10,27}, -{87,10,28}, -{87,11,-19}, -{87,11,-18}, -{87,11,-17}, -{87,11,-16}, -{87,11,-15}, -{87,11,-14}, -{87,11,-13}, -{87,11,-12}, -{87,11,-11}, -{87,11,-10}, -{87,11,-9}, -{87,11,-8}, -{87,11,-7}, -{87,11,-6}, -{87,11,-5}, -{87,11,-4}, -{87,11,-3}, -{87,11,-2}, -{87,11,-1}, -{87,11,0}, -{87,11,1}, -{87,11,2}, -{87,11,3}, -{87,11,4}, -{87,11,5}, -{87,11,6}, -{87,11,7}, -{87,11,8}, -{87,11,9}, -{87,11,10}, -{87,11,11}, -{87,11,12}, -{87,11,13}, -{87,11,14}, -{87,11,15}, -{87,11,16}, -{87,11,17}, -{87,11,18}, -{87,11,19}, -{87,11,20}, -{87,11,21}, -{87,11,22}, -{87,11,23}, -{87,11,24}, -{87,12,-19}, -{87,12,-18}, -{87,12,-17}, -{87,12,-16}, -{87,12,-15}, -{87,12,-14}, -{87,12,-13}, -{87,12,-12}, -{87,12,-11}, -{87,12,-10}, -{87,12,-9}, -{87,12,-8}, -{87,12,-7}, -{87,12,-6}, -{87,12,-5}, -{87,12,-4}, -{87,12,-3}, -{87,12,-2}, -{87,12,-1}, -{87,12,0}, -{87,12,1}, -{87,12,2}, -{87,12,3}, -{87,12,4}, -{87,12,5}, -{87,12,6}, -{87,12,7}, -{87,12,8}, -{87,12,9}, -{87,12,10}, -{87,12,11}, -{87,12,12}, -{87,12,13}, -{87,12,14}, -{87,12,15}, -{87,12,16}, -{87,12,17}, -{87,12,18}, -{87,12,19}, -{87,12,20}, -{87,12,21}, -{87,13,-19}, -{87,13,-18}, -{87,13,-17}, -{87,13,-16}, -{87,13,-15}, -{87,13,-14}, -{87,13,-13}, -{87,13,-12}, -{87,13,-11}, -{87,13,-10}, -{87,13,-9}, -{87,13,-8}, -{87,13,-7}, -{87,13,-6}, -{87,13,-5}, -{87,13,-4}, -{87,13,-3}, -{87,13,-2}, -{87,13,-1}, -{87,13,0}, -{87,13,1}, -{87,13,2}, -{87,13,3}, -{87,13,4}, -{87,13,5}, -{87,13,6}, -{87,13,7}, -{87,13,8}, -{87,13,9}, -{87,13,10}, -{87,13,11}, -{87,13,12}, -{87,13,13}, -{87,13,14}, -{87,13,15}, -{87,13,16}, -{87,13,17}, -{87,13,18}, -{87,14,-19}, -{87,14,-18}, -{87,14,-17}, -{87,14,-16}, -{87,14,-15}, -{87,14,-14}, -{87,14,-13}, -{87,14,-12}, -{87,14,-11}, -{87,14,-10}, -{87,14,-9}, -{87,14,-8}, -{87,14,-7}, -{87,14,-6}, -{87,14,-5}, -{87,14,-4}, -{87,14,-3}, -{87,14,-2}, -{87,14,-1}, -{87,14,0}, -{87,14,1}, -{87,14,2}, -{87,14,3}, -{87,14,4}, -{87,14,5}, -{87,14,6}, -{87,14,7}, -{87,14,8}, -{87,14,9}, -{87,14,10}, -{87,14,11}, -{87,14,12}, -{87,14,13}, -{87,14,14}, -{87,14,15}, -{87,15,-19}, -{87,15,-18}, -{87,15,-17}, -{87,15,-16}, -{87,15,-15}, -{87,15,-14}, -{87,15,-13}, -{87,15,-12}, -{87,15,-11}, -{87,15,-10}, -{87,15,-9}, -{87,15,-8}, -{87,15,-7}, -{87,15,-6}, -{87,15,-5}, -{87,15,-4}, -{87,15,-3}, -{87,15,-2}, -{87,15,-1}, -{87,15,0}, -{87,15,1}, -{87,15,2}, -{87,15,3}, -{87,15,4}, -{87,15,5}, -{87,15,6}, -{87,15,7}, -{87,15,8}, -{87,15,9}, -{87,15,10}, -{87,15,11}, -{87,15,12}, -{87,16,-19}, -{87,16,-18}, -{87,16,-17}, -{87,16,-16}, -{87,16,-15}, -{87,16,-14}, -{87,16,-13}, -{87,16,-12}, -{87,16,-11}, -{87,16,-10}, -{87,16,-9}, -{87,16,-8}, -{87,16,-7}, -{87,16,-6}, -{87,16,-5}, -{87,16,-4}, -{87,16,-3}, -{87,16,-2}, -{87,16,-1}, -{87,16,0}, -{87,16,1}, -{87,16,2}, -{87,16,3}, -{87,16,4}, -{87,16,5}, -{87,16,6}, -{87,16,7}, -{87,16,8}, -{87,16,9}, -{87,16,10}, -{87,17,-19}, -{87,17,-18}, -{87,17,-17}, -{87,17,-16}, -{87,17,-15}, -{87,17,-14}, -{87,17,-13}, -{87,17,-12}, -{87,17,-11}, -{87,17,-10}, -{87,17,-9}, -{87,17,-8}, -{87,17,-7}, -{87,17,-6}, -{87,17,-5}, -{87,17,-4}, -{87,17,-3}, -{87,17,-2}, -{87,17,-1}, -{87,17,0}, -{87,17,1}, -{87,17,2}, -{87,17,3}, -{87,17,4}, -{87,17,5}, -{87,17,6}, -{87,17,7}, -{87,18,-19}, -{87,18,-18}, -{87,18,-17}, -{87,18,-16}, -{87,18,-15}, -{87,18,-14}, -{87,18,-13}, -{87,18,-12}, -{87,18,-11}, -{87,18,-10}, -{87,18,-9}, -{87,18,-8}, -{87,18,-7}, -{87,18,-6}, -{87,18,-5}, -{87,18,-4}, -{87,18,-3}, -{87,18,-2}, -{87,18,-1}, -{87,18,0}, -{87,18,1}, -{87,18,2}, -{87,18,3}, -{87,18,4}, -{87,19,-19}, -{87,19,-18}, -{87,19,-17}, -{87,19,-16}, -{87,19,-15}, -{87,19,-14}, -{87,19,-13}, -{87,19,-12}, -{87,19,-11}, -{87,19,-10}, -{87,19,-9}, -{87,19,-8}, -{87,19,-7}, -{87,19,-6}, -{87,19,-5}, -{87,19,-4}, -{87,19,-3}, -{87,19,-2}, -{87,19,-1}, -{87,19,0}, -{87,19,1}, -{87,19,2}, -{87,20,-19}, -{87,20,-18}, -{87,20,-17}, -{87,20,-16}, -{87,20,-15}, -{87,20,-14}, -{87,20,-13}, -{87,20,-12}, -{87,20,-11}, -{87,20,-10}, -{87,20,-9}, -{87,20,-8}, -{87,20,-7}, -{87,20,-6}, -{87,20,-5}, -{87,20,-4}, -{87,20,-3}, -{87,20,-2}, -{87,20,-1}, -{87,21,-19}, -{87,21,-18}, -{87,21,-17}, -{87,21,-16}, -{87,21,-15}, -{87,21,-14}, -{87,21,-13}, -{87,21,-12}, -{87,21,-11}, -{87,21,-10}, -{87,21,-9}, -{87,21,-8}, -{87,21,-7}, -{87,21,-6}, -{87,21,-5}, -{87,21,-4}, -{87,21,-3}, -{87,22,-19}, -{87,22,-18}, -{87,22,-17}, -{87,22,-16}, -{87,22,-15}, -{87,22,-14}, -{87,22,-13}, -{87,22,-12}, -{87,22,-11}, -{87,22,-10}, -{87,22,-9}, -{87,22,-8}, -{87,22,-7}, -{87,22,-6}, -{87,23,-19}, -{87,23,-18}, -{87,23,-17}, -{87,23,-16}, -{87,23,-15}, -{87,23,-14}, -{87,23,-13}, -{87,23,-12}, -{87,23,-11}, -{87,23,-10}, -{87,23,-9}, -{87,23,-8}, -{87,24,-19}, -{87,24,-18}, -{87,24,-17}, -{87,24,-16}, -{87,24,-15}, -{87,24,-14}, -{87,24,-13}, -{87,24,-12}, -{87,24,-11}, -{87,24,-10}, -{87,25,-19}, -{87,25,-18}, -{87,25,-17}, -{87,25,-16}, -{87,25,-15}, -{87,25,-14}, -{87,25,-13}, -{87,25,-12}, -{87,26,-19}, -{87,26,-18}, -{87,26,-17}, -{87,26,-16}, -{87,26,-15}, -{87,27,-19}, -{87,27,-18}, -{87,27,-17}, -{87,28,-19}, -{88,-84,76}, -{88,-84,77}, -{88,-84,78}, -{88,-84,79}, -{88,-84,80}, -{88,-84,81}, -{88,-84,82}, -{88,-84,83}, -{88,-83,68}, -{88,-83,69}, -{88,-83,70}, -{88,-83,71}, -{88,-83,72}, -{88,-83,73}, -{88,-83,74}, -{88,-83,75}, -{88,-83,76}, -{88,-83,77}, -{88,-83,78}, -{88,-83,79}, -{88,-83,80}, -{88,-83,81}, -{88,-83,82}, -{88,-83,83}, -{88,-82,64}, -{88,-82,65}, -{88,-82,66}, -{88,-82,67}, -{88,-82,68}, -{88,-82,69}, -{88,-82,70}, -{88,-82,71}, -{88,-82,72}, -{88,-82,73}, -{88,-82,74}, -{88,-82,75}, -{88,-82,76}, -{88,-82,77}, -{88,-82,78}, -{88,-82,79}, -{88,-82,80}, -{88,-82,81}, -{88,-82,82}, -{88,-82,83}, -{88,-81,61}, -{88,-81,62}, -{88,-81,63}, -{88,-81,64}, -{88,-81,65}, -{88,-81,66}, -{88,-81,67}, -{88,-81,68}, -{88,-81,69}, -{88,-81,70}, -{88,-81,71}, -{88,-81,72}, -{88,-81,73}, -{88,-81,74}, -{88,-81,75}, -{88,-81,76}, -{88,-81,77}, -{88,-81,78}, -{88,-81,79}, -{88,-81,80}, -{88,-81,81}, -{88,-81,82}, -{88,-81,83}, -{88,-80,57}, -{88,-80,58}, -{88,-80,59}, -{88,-80,60}, -{88,-80,61}, -{88,-80,62}, -{88,-80,63}, -{88,-80,64}, -{88,-80,65}, -{88,-80,66}, -{88,-80,67}, -{88,-80,68}, -{88,-80,69}, -{88,-80,70}, -{88,-80,71}, -{88,-80,72}, -{88,-80,73}, -{88,-80,74}, -{88,-80,75}, -{88,-80,76}, -{88,-80,77}, -{88,-80,78}, -{88,-80,79}, -{88,-80,80}, -{88,-80,81}, -{88,-80,82}, -{88,-80,83}, -{88,-79,54}, -{88,-79,55}, -{88,-79,56}, -{88,-79,57}, -{88,-79,58}, -{88,-79,59}, -{88,-79,60}, -{88,-79,61}, -{88,-79,62}, -{88,-79,63}, -{88,-79,64}, -{88,-79,65}, -{88,-79,66}, -{88,-79,67}, -{88,-79,68}, -{88,-79,69}, -{88,-79,70}, -{88,-79,71}, -{88,-79,72}, -{88,-79,73}, -{88,-79,74}, -{88,-79,75}, -{88,-79,76}, -{88,-79,77}, -{88,-79,78}, -{88,-79,79}, -{88,-79,80}, -{88,-79,81}, -{88,-79,82}, -{88,-79,83}, -{88,-78,51}, -{88,-78,52}, -{88,-78,53}, -{88,-78,54}, -{88,-78,55}, -{88,-78,56}, -{88,-78,57}, -{88,-78,58}, -{88,-78,59}, -{88,-78,60}, -{88,-78,61}, -{88,-78,62}, -{88,-78,63}, -{88,-78,64}, -{88,-78,65}, -{88,-78,66}, -{88,-78,67}, -{88,-78,68}, -{88,-78,69}, -{88,-78,70}, -{88,-78,71}, -{88,-78,72}, -{88,-78,73}, -{88,-78,74}, -{88,-78,75}, -{88,-78,76}, -{88,-78,77}, -{88,-78,78}, -{88,-78,79}, -{88,-78,80}, -{88,-78,81}, -{88,-78,82}, -{88,-78,83}, -{88,-77,48}, -{88,-77,49}, -{88,-77,50}, -{88,-77,51}, -{88,-77,52}, -{88,-77,53}, -{88,-77,54}, -{88,-77,55}, -{88,-77,56}, -{88,-77,57}, -{88,-77,58}, -{88,-77,59}, -{88,-77,60}, -{88,-77,61}, -{88,-77,62}, -{88,-77,63}, -{88,-77,64}, -{88,-77,65}, -{88,-77,66}, -{88,-77,67}, -{88,-77,68}, -{88,-77,69}, -{88,-77,70}, -{88,-77,71}, -{88,-77,72}, -{88,-77,73}, -{88,-77,74}, -{88,-77,75}, -{88,-77,76}, -{88,-77,77}, -{88,-77,78}, -{88,-77,79}, -{88,-77,80}, -{88,-77,81}, -{88,-77,82}, -{88,-77,83}, -{88,-76,45}, -{88,-76,46}, -{88,-76,47}, -{88,-76,48}, -{88,-76,49}, -{88,-76,50}, -{88,-76,51}, -{88,-76,52}, -{88,-76,53}, -{88,-76,54}, -{88,-76,55}, -{88,-76,56}, -{88,-76,57}, -{88,-76,58}, -{88,-76,59}, -{88,-76,60}, -{88,-76,61}, -{88,-76,62}, -{88,-76,63}, -{88,-76,64}, -{88,-76,65}, -{88,-76,66}, -{88,-76,67}, -{88,-76,68}, -{88,-76,69}, -{88,-76,70}, -{88,-76,71}, -{88,-76,72}, -{88,-76,73}, -{88,-76,74}, -{88,-76,75}, -{88,-76,76}, -{88,-76,77}, -{88,-76,78}, -{88,-76,79}, -{88,-76,80}, -{88,-76,81}, -{88,-76,82}, -{88,-76,83}, -{88,-76,84}, -{88,-75,43}, -{88,-75,44}, -{88,-75,45}, -{88,-75,46}, -{88,-75,47}, -{88,-75,48}, -{88,-75,49}, -{88,-75,50}, -{88,-75,51}, -{88,-75,52}, -{88,-75,53}, -{88,-75,54}, -{88,-75,55}, -{88,-75,56}, -{88,-75,57}, -{88,-75,58}, -{88,-75,59}, -{88,-75,60}, -{88,-75,61}, -{88,-75,62}, -{88,-75,63}, -{88,-75,64}, -{88,-75,65}, -{88,-75,66}, -{88,-75,67}, -{88,-75,68}, -{88,-75,69}, -{88,-75,70}, -{88,-75,71}, -{88,-75,72}, -{88,-75,73}, -{88,-75,74}, -{88,-75,75}, -{88,-75,76}, -{88,-75,77}, -{88,-75,78}, -{88,-75,79}, -{88,-75,80}, -{88,-75,81}, -{88,-75,82}, -{88,-75,83}, -{88,-75,84}, -{88,-74,40}, -{88,-74,41}, -{88,-74,42}, -{88,-74,43}, -{88,-74,44}, -{88,-74,45}, -{88,-74,46}, -{88,-74,47}, -{88,-74,48}, -{88,-74,49}, -{88,-74,50}, -{88,-74,51}, -{88,-74,52}, -{88,-74,53}, -{88,-74,54}, -{88,-74,55}, -{88,-74,56}, -{88,-74,57}, -{88,-74,58}, -{88,-74,59}, -{88,-74,60}, -{88,-74,61}, -{88,-74,62}, -{88,-74,63}, -{88,-74,64}, -{88,-74,65}, -{88,-74,66}, -{88,-74,67}, -{88,-74,68}, -{88,-74,69}, -{88,-74,70}, -{88,-74,71}, -{88,-74,72}, -{88,-74,73}, -{88,-74,74}, -{88,-74,75}, -{88,-74,76}, -{88,-74,77}, -{88,-74,78}, -{88,-74,79}, -{88,-74,80}, -{88,-74,81}, -{88,-74,82}, -{88,-74,83}, -{88,-74,84}, -{88,-73,37}, -{88,-73,38}, -{88,-73,39}, -{88,-73,40}, -{88,-73,41}, -{88,-73,42}, -{88,-73,43}, -{88,-73,44}, -{88,-73,45}, -{88,-73,46}, -{88,-73,47}, -{88,-73,48}, -{88,-73,49}, -{88,-73,50}, -{88,-73,51}, -{88,-73,52}, -{88,-73,53}, -{88,-73,54}, -{88,-73,55}, -{88,-73,56}, -{88,-73,57}, -{88,-73,58}, -{88,-73,59}, -{88,-73,60}, -{88,-73,61}, -{88,-73,62}, -{88,-73,63}, -{88,-73,64}, -{88,-73,65}, -{88,-73,66}, -{88,-73,67}, -{88,-73,68}, -{88,-73,69}, -{88,-73,70}, -{88,-73,71}, -{88,-73,72}, -{88,-73,73}, -{88,-73,74}, -{88,-73,75}, -{88,-73,76}, -{88,-73,77}, -{88,-73,78}, -{88,-73,79}, -{88,-73,80}, -{88,-73,81}, -{88,-73,82}, -{88,-73,83}, -{88,-73,84}, -{88,-72,35}, -{88,-72,36}, -{88,-72,37}, -{88,-72,38}, -{88,-72,39}, -{88,-72,40}, -{88,-72,41}, -{88,-72,42}, -{88,-72,43}, -{88,-72,44}, -{88,-72,45}, -{88,-72,46}, -{88,-72,47}, -{88,-72,48}, -{88,-72,49}, -{88,-72,50}, -{88,-72,51}, -{88,-72,52}, -{88,-72,53}, -{88,-72,54}, -{88,-72,55}, -{88,-72,56}, -{88,-72,57}, -{88,-72,58}, -{88,-72,59}, -{88,-72,60}, -{88,-72,61}, -{88,-72,62}, -{88,-72,63}, -{88,-72,64}, -{88,-72,65}, -{88,-72,66}, -{88,-72,67}, -{88,-72,68}, -{88,-72,69}, -{88,-72,70}, -{88,-72,71}, -{88,-72,72}, -{88,-72,73}, -{88,-72,74}, -{88,-72,75}, -{88,-72,76}, -{88,-72,77}, -{88,-72,78}, -{88,-72,79}, -{88,-72,80}, -{88,-72,81}, -{88,-72,82}, -{88,-72,83}, -{88,-72,84}, -{88,-71,32}, -{88,-71,33}, -{88,-71,34}, -{88,-71,35}, -{88,-71,36}, -{88,-71,37}, -{88,-71,38}, -{88,-71,39}, -{88,-71,40}, -{88,-71,41}, -{88,-71,42}, -{88,-71,43}, -{88,-71,44}, -{88,-71,45}, -{88,-71,46}, -{88,-71,47}, -{88,-71,48}, -{88,-71,49}, -{88,-71,50}, -{88,-71,51}, -{88,-71,52}, -{88,-71,53}, -{88,-71,54}, -{88,-71,55}, -{88,-71,56}, -{88,-71,57}, -{88,-71,58}, -{88,-71,59}, -{88,-71,60}, -{88,-71,61}, -{88,-71,62}, -{88,-71,63}, -{88,-71,64}, -{88,-71,65}, -{88,-71,66}, -{88,-71,67}, -{88,-71,68}, -{88,-71,69}, -{88,-71,70}, -{88,-71,71}, -{88,-71,72}, -{88,-71,73}, -{88,-71,74}, -{88,-71,75}, -{88,-71,76}, -{88,-71,77}, -{88,-71,78}, -{88,-71,79}, -{88,-71,80}, -{88,-71,81}, -{88,-71,82}, -{88,-71,83}, -{88,-71,84}, -{88,-70,30}, -{88,-70,31}, -{88,-70,32}, -{88,-70,33}, -{88,-70,34}, -{88,-70,35}, -{88,-70,36}, -{88,-70,37}, -{88,-70,38}, -{88,-70,39}, -{88,-70,40}, -{88,-70,41}, -{88,-70,42}, -{88,-70,43}, -{88,-70,44}, -{88,-70,45}, -{88,-70,46}, -{88,-70,47}, -{88,-70,48}, -{88,-70,49}, -{88,-70,50}, -{88,-70,51}, -{88,-70,52}, -{88,-70,53}, -{88,-70,54}, -{88,-70,55}, -{88,-70,56}, -{88,-70,57}, -{88,-70,58}, -{88,-70,59}, -{88,-70,60}, -{88,-70,61}, -{88,-70,62}, -{88,-70,63}, -{88,-70,64}, -{88,-70,65}, -{88,-70,66}, -{88,-70,67}, -{88,-70,68}, -{88,-70,69}, -{88,-70,70}, -{88,-70,71}, -{88,-70,72}, -{88,-70,73}, -{88,-70,74}, -{88,-70,75}, -{88,-70,76}, -{88,-70,77}, -{88,-70,78}, -{88,-70,79}, -{88,-70,80}, -{88,-70,81}, -{88,-70,82}, -{88,-70,83}, -{88,-70,84}, -{88,-69,28}, -{88,-69,29}, -{88,-69,30}, -{88,-69,31}, -{88,-69,32}, -{88,-69,33}, -{88,-69,34}, -{88,-69,35}, -{88,-69,36}, -{88,-69,37}, -{88,-69,38}, -{88,-69,39}, -{88,-69,40}, -{88,-69,41}, -{88,-69,42}, -{88,-69,43}, -{88,-69,44}, -{88,-69,45}, -{88,-69,46}, -{88,-69,47}, -{88,-69,48}, -{88,-69,49}, -{88,-69,50}, -{88,-69,51}, -{88,-69,52}, -{88,-69,53}, -{88,-69,54}, -{88,-69,55}, -{88,-69,56}, -{88,-69,57}, -{88,-69,58}, -{88,-69,59}, -{88,-69,60}, -{88,-69,61}, -{88,-69,62}, -{88,-69,63}, -{88,-69,64}, -{88,-69,65}, -{88,-69,66}, -{88,-69,67}, -{88,-69,68}, -{88,-69,69}, -{88,-69,70}, -{88,-69,71}, -{88,-69,72}, -{88,-69,73}, -{88,-69,74}, -{88,-69,75}, -{88,-69,76}, -{88,-69,77}, -{88,-69,78}, -{88,-69,79}, -{88,-69,80}, -{88,-69,81}, -{88,-69,82}, -{88,-69,83}, -{88,-69,84}, -{88,-68,26}, -{88,-68,27}, -{88,-68,28}, -{88,-68,29}, -{88,-68,30}, -{88,-68,31}, -{88,-68,32}, -{88,-68,33}, -{88,-68,34}, -{88,-68,35}, -{88,-68,36}, -{88,-68,37}, -{88,-68,38}, -{88,-68,39}, -{88,-68,40}, -{88,-68,41}, -{88,-68,42}, -{88,-68,43}, -{88,-68,44}, -{88,-68,45}, -{88,-68,46}, -{88,-68,47}, -{88,-68,48}, -{88,-68,49}, -{88,-68,50}, -{88,-68,51}, -{88,-68,52}, -{88,-68,53}, -{88,-68,54}, -{88,-68,55}, -{88,-68,56}, -{88,-68,57}, -{88,-68,58}, -{88,-68,59}, -{88,-68,60}, -{88,-68,61}, -{88,-68,62}, -{88,-68,63}, -{88,-68,64}, -{88,-68,65}, -{88,-68,66}, -{88,-68,67}, -{88,-68,68}, -{88,-68,69}, -{88,-68,70}, -{88,-68,71}, -{88,-68,72}, -{88,-68,73}, -{88,-68,74}, -{88,-68,75}, -{88,-68,76}, -{88,-68,77}, -{88,-68,78}, -{88,-68,79}, -{88,-68,80}, -{88,-68,81}, -{88,-68,82}, -{88,-68,83}, -{88,-68,84}, -{88,-67,23}, -{88,-67,24}, -{88,-67,25}, -{88,-67,26}, -{88,-67,27}, -{88,-67,28}, -{88,-67,29}, -{88,-67,30}, -{88,-67,31}, -{88,-67,32}, -{88,-67,33}, -{88,-67,34}, -{88,-67,35}, -{88,-67,36}, -{88,-67,37}, -{88,-67,38}, -{88,-67,39}, -{88,-67,40}, -{88,-67,41}, -{88,-67,42}, -{88,-67,43}, -{88,-67,44}, -{88,-67,45}, -{88,-67,46}, -{88,-67,47}, -{88,-67,48}, -{88,-67,49}, -{88,-67,50}, -{88,-67,51}, -{88,-67,52}, -{88,-67,53}, -{88,-67,54}, -{88,-67,55}, -{88,-67,56}, -{88,-67,57}, -{88,-67,58}, -{88,-67,59}, -{88,-67,60}, -{88,-67,61}, -{88,-67,62}, -{88,-67,63}, -{88,-67,64}, -{88,-67,65}, -{88,-67,66}, -{88,-67,67}, -{88,-67,68}, -{88,-67,69}, -{88,-67,70}, -{88,-67,71}, -{88,-67,72}, -{88,-67,73}, -{88,-67,74}, -{88,-67,75}, -{88,-67,76}, -{88,-67,77}, -{88,-67,78}, -{88,-67,79}, -{88,-67,80}, -{88,-67,81}, -{88,-67,82}, -{88,-67,83}, -{88,-67,84}, -{88,-66,21}, -{88,-66,22}, -{88,-66,23}, -{88,-66,24}, -{88,-66,25}, -{88,-66,26}, -{88,-66,27}, -{88,-66,28}, -{88,-66,29}, -{88,-66,30}, -{88,-66,31}, -{88,-66,32}, -{88,-66,33}, -{88,-66,34}, -{88,-66,35}, -{88,-66,36}, -{88,-66,37}, -{88,-66,38}, -{88,-66,39}, -{88,-66,40}, -{88,-66,41}, -{88,-66,42}, -{88,-66,43}, -{88,-66,44}, -{88,-66,45}, -{88,-66,46}, -{88,-66,47}, -{88,-66,48}, -{88,-66,49}, -{88,-66,50}, -{88,-66,51}, -{88,-66,52}, -{88,-66,53}, -{88,-66,54}, -{88,-66,55}, -{88,-66,56}, -{88,-66,57}, -{88,-66,58}, -{88,-66,59}, -{88,-66,60}, -{88,-66,61}, -{88,-66,62}, -{88,-66,63}, -{88,-66,64}, -{88,-66,65}, -{88,-66,66}, -{88,-66,67}, -{88,-66,68}, -{88,-66,69}, -{88,-66,70}, -{88,-66,71}, -{88,-66,72}, -{88,-66,73}, -{88,-66,74}, -{88,-66,75}, -{88,-66,76}, -{88,-66,77}, -{88,-66,78}, -{88,-66,79}, -{88,-66,80}, -{88,-66,81}, -{88,-66,82}, -{88,-66,83}, -{88,-66,84}, -{88,-65,19}, -{88,-65,20}, -{88,-65,21}, -{88,-65,22}, -{88,-65,23}, -{88,-65,24}, -{88,-65,25}, -{88,-65,26}, -{88,-65,27}, -{88,-65,28}, -{88,-65,29}, -{88,-65,30}, -{88,-65,31}, -{88,-65,32}, -{88,-65,33}, -{88,-65,34}, -{88,-65,35}, -{88,-65,36}, -{88,-65,37}, -{88,-65,38}, -{88,-65,39}, -{88,-65,40}, -{88,-65,41}, -{88,-65,42}, -{88,-65,43}, -{88,-65,44}, -{88,-65,45}, -{88,-65,46}, -{88,-65,47}, -{88,-65,48}, -{88,-65,49}, -{88,-65,50}, -{88,-65,51}, -{88,-65,52}, -{88,-65,53}, -{88,-65,54}, -{88,-65,55}, -{88,-65,56}, -{88,-65,57}, -{88,-65,58}, -{88,-65,59}, -{88,-65,60}, -{88,-65,61}, -{88,-65,62}, -{88,-65,63}, -{88,-65,64}, -{88,-65,65}, -{88,-65,66}, -{88,-65,67}, -{88,-65,68}, -{88,-65,69}, -{88,-65,70}, -{88,-65,71}, -{88,-65,72}, -{88,-65,73}, -{88,-65,74}, -{88,-65,75}, -{88,-65,76}, -{88,-65,77}, -{88,-65,78}, -{88,-65,79}, -{88,-65,80}, -{88,-65,81}, -{88,-65,82}, -{88,-65,83}, -{88,-65,84}, -{88,-64,17}, -{88,-64,18}, -{88,-64,19}, -{88,-64,20}, -{88,-64,21}, -{88,-64,22}, -{88,-64,23}, -{88,-64,24}, -{88,-64,25}, -{88,-64,26}, -{88,-64,27}, -{88,-64,28}, -{88,-64,29}, -{88,-64,30}, -{88,-64,31}, -{88,-64,32}, -{88,-64,33}, -{88,-64,34}, -{88,-64,35}, -{88,-64,36}, -{88,-64,37}, -{88,-64,38}, -{88,-64,39}, -{88,-64,40}, -{88,-64,41}, -{88,-64,42}, -{88,-64,43}, -{88,-64,44}, -{88,-64,45}, -{88,-64,46}, -{88,-64,47}, -{88,-64,48}, -{88,-64,49}, -{88,-64,50}, -{88,-64,51}, -{88,-64,52}, -{88,-64,53}, -{88,-64,54}, -{88,-64,55}, -{88,-64,56}, -{88,-64,57}, -{88,-64,58}, -{88,-64,59}, -{88,-64,60}, -{88,-64,61}, -{88,-64,62}, -{88,-64,63}, -{88,-64,64}, -{88,-64,65}, -{88,-64,66}, -{88,-64,67}, -{88,-64,68}, -{88,-64,69}, -{88,-64,70}, -{88,-64,71}, -{88,-64,72}, -{88,-64,73}, -{88,-64,74}, -{88,-64,75}, -{88,-64,76}, -{88,-64,77}, -{88,-64,78}, -{88,-64,79}, -{88,-64,80}, -{88,-64,81}, -{88,-64,82}, -{88,-64,83}, -{88,-64,84}, -{88,-63,15}, -{88,-63,16}, -{88,-63,17}, -{88,-63,18}, -{88,-63,19}, -{88,-63,20}, -{88,-63,21}, -{88,-63,22}, -{88,-63,23}, -{88,-63,24}, -{88,-63,25}, -{88,-63,26}, -{88,-63,27}, -{88,-63,28}, -{88,-63,29}, -{88,-63,30}, -{88,-63,31}, -{88,-63,32}, -{88,-63,33}, -{88,-63,34}, -{88,-63,35}, -{88,-63,36}, -{88,-63,37}, -{88,-63,38}, -{88,-63,39}, -{88,-63,40}, -{88,-63,41}, -{88,-63,42}, -{88,-63,43}, -{88,-63,44}, -{88,-63,45}, -{88,-63,46}, -{88,-63,47}, -{88,-63,48}, -{88,-63,49}, -{88,-63,50}, -{88,-63,51}, -{88,-63,52}, -{88,-63,53}, -{88,-63,54}, -{88,-63,55}, -{88,-63,56}, -{88,-63,57}, -{88,-63,58}, -{88,-63,59}, -{88,-63,60}, -{88,-63,61}, -{88,-63,62}, -{88,-63,63}, -{88,-63,64}, -{88,-63,65}, -{88,-63,66}, -{88,-63,67}, -{88,-63,68}, -{88,-63,69}, -{88,-63,70}, -{88,-63,71}, -{88,-63,72}, -{88,-63,73}, -{88,-63,74}, -{88,-63,75}, -{88,-63,76}, -{88,-63,77}, -{88,-63,78}, -{88,-63,79}, -{88,-63,80}, -{88,-63,81}, -{88,-63,82}, -{88,-63,83}, -{88,-63,84}, -{88,-62,13}, -{88,-62,14}, -{88,-62,15}, -{88,-62,16}, -{88,-62,17}, -{88,-62,18}, -{88,-62,19}, -{88,-62,20}, -{88,-62,21}, -{88,-62,22}, -{88,-62,23}, -{88,-62,24}, -{88,-62,25}, -{88,-62,26}, -{88,-62,27}, -{88,-62,28}, -{88,-62,29}, -{88,-62,30}, -{88,-62,31}, -{88,-62,32}, -{88,-62,33}, -{88,-62,34}, -{88,-62,35}, -{88,-62,36}, -{88,-62,37}, -{88,-62,38}, -{88,-62,39}, -{88,-62,40}, -{88,-62,41}, -{88,-62,42}, -{88,-62,43}, -{88,-62,44}, -{88,-62,45}, -{88,-62,46}, -{88,-62,47}, -{88,-62,48}, -{88,-62,49}, -{88,-62,50}, -{88,-62,51}, -{88,-62,52}, -{88,-62,53}, -{88,-62,54}, -{88,-62,55}, -{88,-62,56}, -{88,-62,57}, -{88,-62,58}, -{88,-62,59}, -{88,-62,60}, -{88,-62,61}, -{88,-62,62}, -{88,-62,63}, -{88,-62,64}, -{88,-62,65}, -{88,-62,66}, -{88,-62,67}, -{88,-62,68}, -{88,-62,69}, -{88,-62,70}, -{88,-62,71}, -{88,-62,72}, -{88,-62,73}, -{88,-62,74}, -{88,-62,75}, -{88,-62,76}, -{88,-62,77}, -{88,-62,78}, -{88,-62,79}, -{88,-62,80}, -{88,-62,81}, -{88,-62,82}, -{88,-62,83}, -{88,-62,84}, -{88,-61,11}, -{88,-61,12}, -{88,-61,13}, -{88,-61,14}, -{88,-61,15}, -{88,-61,16}, -{88,-61,17}, -{88,-61,18}, -{88,-61,19}, -{88,-61,20}, -{88,-61,21}, -{88,-61,22}, -{88,-61,23}, -{88,-61,24}, -{88,-61,25}, -{88,-61,26}, -{88,-61,27}, -{88,-61,28}, -{88,-61,29}, -{88,-61,30}, -{88,-61,31}, -{88,-61,32}, -{88,-61,33}, -{88,-61,34}, -{88,-61,35}, -{88,-61,36}, -{88,-61,37}, -{88,-61,38}, -{88,-61,39}, -{88,-61,40}, -{88,-61,41}, -{88,-61,42}, -{88,-61,43}, -{88,-61,44}, -{88,-61,45}, -{88,-61,46}, -{88,-61,47}, -{88,-61,48}, -{88,-61,49}, -{88,-61,50}, -{88,-61,51}, -{88,-61,52}, -{88,-61,53}, -{88,-61,54}, -{88,-61,55}, -{88,-61,56}, -{88,-61,57}, -{88,-61,58}, -{88,-61,59}, -{88,-61,60}, -{88,-61,61}, -{88,-61,62}, -{88,-61,63}, -{88,-61,64}, -{88,-61,65}, -{88,-61,66}, -{88,-61,67}, -{88,-61,68}, -{88,-61,69}, -{88,-61,70}, -{88,-61,71}, -{88,-61,72}, -{88,-61,73}, -{88,-61,74}, -{88,-61,75}, -{88,-61,76}, -{88,-61,77}, -{88,-61,78}, -{88,-61,79}, -{88,-61,80}, -{88,-61,81}, -{88,-61,82}, -{88,-61,83}, -{88,-61,84}, -{88,-60,9}, -{88,-60,10}, -{88,-60,11}, -{88,-60,12}, -{88,-60,13}, -{88,-60,14}, -{88,-60,15}, -{88,-60,16}, -{88,-60,17}, -{88,-60,18}, -{88,-60,19}, -{88,-60,20}, -{88,-60,21}, -{88,-60,22}, -{88,-60,23}, -{88,-60,24}, -{88,-60,25}, -{88,-60,26}, -{88,-60,27}, -{88,-60,28}, -{88,-60,29}, -{88,-60,30}, -{88,-60,31}, -{88,-60,32}, -{88,-60,33}, -{88,-60,34}, -{88,-60,35}, -{88,-60,36}, -{88,-60,37}, -{88,-60,38}, -{88,-60,39}, -{88,-60,40}, -{88,-60,41}, -{88,-60,42}, -{88,-60,43}, -{88,-60,44}, -{88,-60,45}, -{88,-60,46}, -{88,-60,47}, -{88,-60,48}, -{88,-60,49}, -{88,-60,50}, -{88,-60,51}, -{88,-60,52}, -{88,-60,53}, -{88,-60,54}, -{88,-60,55}, -{88,-60,56}, -{88,-60,57}, -{88,-60,58}, -{88,-60,59}, -{88,-60,60}, -{88,-60,61}, -{88,-60,62}, -{88,-60,63}, -{88,-60,64}, -{88,-60,65}, -{88,-60,66}, -{88,-60,67}, -{88,-60,68}, -{88,-60,69}, -{88,-60,70}, -{88,-60,71}, -{88,-60,72}, -{88,-60,73}, -{88,-60,74}, -{88,-60,75}, -{88,-60,76}, -{88,-60,77}, -{88,-60,78}, -{88,-60,79}, -{88,-60,80}, -{88,-60,81}, -{88,-60,82}, -{88,-60,83}, -{88,-60,84}, -{88,-59,7}, -{88,-59,8}, -{88,-59,9}, -{88,-59,10}, -{88,-59,11}, -{88,-59,12}, -{88,-59,13}, -{88,-59,14}, -{88,-59,15}, -{88,-59,16}, -{88,-59,17}, -{88,-59,18}, -{88,-59,19}, -{88,-59,20}, -{88,-59,21}, -{88,-59,22}, -{88,-59,23}, -{88,-59,24}, -{88,-59,25}, -{88,-59,26}, -{88,-59,27}, -{88,-59,28}, -{88,-59,29}, -{88,-59,30}, -{88,-59,31}, -{88,-59,32}, -{88,-59,33}, -{88,-59,34}, -{88,-59,35}, -{88,-59,36}, -{88,-59,37}, -{88,-59,38}, -{88,-59,39}, -{88,-59,40}, -{88,-59,41}, -{88,-59,42}, -{88,-59,43}, -{88,-59,44}, -{88,-59,45}, -{88,-59,46}, -{88,-59,47}, -{88,-59,48}, -{88,-59,49}, -{88,-59,50}, -{88,-59,51}, -{88,-59,52}, -{88,-59,53}, -{88,-59,54}, -{88,-59,55}, -{88,-59,56}, -{88,-59,57}, -{88,-59,58}, -{88,-59,59}, -{88,-59,60}, -{88,-59,61}, -{88,-59,62}, -{88,-59,63}, -{88,-59,64}, -{88,-59,65}, -{88,-59,66}, -{88,-59,67}, -{88,-59,68}, -{88,-59,69}, -{88,-59,70}, -{88,-59,71}, -{88,-59,72}, -{88,-59,73}, -{88,-59,74}, -{88,-59,75}, -{88,-59,76}, -{88,-59,77}, -{88,-59,78}, -{88,-59,79}, -{88,-59,80}, -{88,-59,81}, -{88,-59,82}, -{88,-59,83}, -{88,-59,84}, -{88,-58,6}, -{88,-58,7}, -{88,-58,8}, -{88,-58,9}, -{88,-58,10}, -{88,-58,11}, -{88,-58,12}, -{88,-58,13}, -{88,-58,14}, -{88,-58,15}, -{88,-58,16}, -{88,-58,17}, -{88,-58,18}, -{88,-58,19}, -{88,-58,20}, -{88,-58,21}, -{88,-58,22}, -{88,-58,23}, -{88,-58,24}, -{88,-58,25}, -{88,-58,26}, -{88,-58,27}, -{88,-58,28}, -{88,-58,29}, -{88,-58,30}, -{88,-58,31}, -{88,-58,32}, -{88,-58,33}, -{88,-58,34}, -{88,-58,35}, -{88,-58,36}, -{88,-58,37}, -{88,-58,38}, -{88,-58,39}, -{88,-58,40}, -{88,-58,41}, -{88,-58,42}, -{88,-58,43}, -{88,-58,44}, -{88,-58,45}, -{88,-58,46}, -{88,-58,47}, -{88,-58,48}, -{88,-58,49}, -{88,-58,50}, -{88,-58,51}, -{88,-58,52}, -{88,-58,53}, -{88,-58,54}, -{88,-58,55}, -{88,-58,56}, -{88,-58,57}, -{88,-58,58}, -{88,-58,59}, -{88,-58,60}, -{88,-58,61}, -{88,-58,62}, -{88,-58,63}, -{88,-58,64}, -{88,-58,65}, -{88,-58,66}, -{88,-58,67}, -{88,-58,68}, -{88,-58,69}, -{88,-58,70}, -{88,-58,71}, -{88,-58,72}, -{88,-58,73}, -{88,-58,74}, -{88,-58,75}, -{88,-58,76}, -{88,-58,77}, -{88,-58,78}, -{88,-58,79}, -{88,-58,80}, -{88,-58,81}, -{88,-58,82}, -{88,-58,83}, -{88,-58,84}, -{88,-57,4}, -{88,-57,5}, -{88,-57,6}, -{88,-57,7}, -{88,-57,8}, -{88,-57,9}, -{88,-57,10}, -{88,-57,11}, -{88,-57,12}, -{88,-57,13}, -{88,-57,14}, -{88,-57,15}, -{88,-57,16}, -{88,-57,17}, -{88,-57,18}, -{88,-57,19}, -{88,-57,20}, -{88,-57,21}, -{88,-57,22}, -{88,-57,23}, -{88,-57,24}, -{88,-57,25}, -{88,-57,26}, -{88,-57,27}, -{88,-57,28}, -{88,-57,29}, -{88,-57,30}, -{88,-57,31}, -{88,-57,32}, -{88,-57,33}, -{88,-57,34}, -{88,-57,35}, -{88,-57,36}, -{88,-57,37}, -{88,-57,38}, -{88,-57,39}, -{88,-57,40}, -{88,-57,41}, -{88,-57,42}, -{88,-57,43}, -{88,-57,44}, -{88,-57,45}, -{88,-57,46}, -{88,-57,47}, -{88,-57,48}, -{88,-57,49}, -{88,-57,50}, -{88,-57,51}, -{88,-57,52}, -{88,-57,53}, -{88,-57,54}, -{88,-57,55}, -{88,-57,56}, -{88,-57,57}, -{88,-57,58}, -{88,-57,59}, -{88,-57,60}, -{88,-57,61}, -{88,-57,62}, -{88,-57,63}, -{88,-57,64}, -{88,-57,65}, -{88,-57,66}, -{88,-57,67}, -{88,-57,68}, -{88,-57,69}, -{88,-57,70}, -{88,-57,71}, -{88,-57,72}, -{88,-57,73}, -{88,-57,74}, -{88,-57,75}, -{88,-57,76}, -{88,-57,77}, -{88,-57,78}, -{88,-57,79}, -{88,-57,80}, -{88,-57,81}, -{88,-57,82}, -{88,-57,83}, -{88,-57,84}, -{88,-56,2}, -{88,-56,3}, -{88,-56,4}, -{88,-56,5}, -{88,-56,6}, -{88,-56,7}, -{88,-56,8}, -{88,-56,9}, -{88,-56,10}, -{88,-56,11}, -{88,-56,12}, -{88,-56,13}, -{88,-56,14}, -{88,-56,15}, -{88,-56,16}, -{88,-56,17}, -{88,-56,18}, -{88,-56,19}, -{88,-56,20}, -{88,-56,21}, -{88,-56,22}, -{88,-56,23}, -{88,-56,24}, -{88,-56,25}, -{88,-56,26}, -{88,-56,27}, -{88,-56,28}, -{88,-56,29}, -{88,-56,30}, -{88,-56,31}, -{88,-56,32}, -{88,-56,33}, -{88,-56,34}, -{88,-56,35}, -{88,-56,36}, -{88,-56,37}, -{88,-56,38}, -{88,-56,39}, -{88,-56,40}, -{88,-56,41}, -{88,-56,42}, -{88,-56,43}, -{88,-56,44}, -{88,-56,45}, -{88,-56,46}, -{88,-56,47}, -{88,-56,48}, -{88,-56,49}, -{88,-56,50}, -{88,-56,51}, -{88,-56,52}, -{88,-56,53}, -{88,-56,54}, -{88,-56,55}, -{88,-56,56}, -{88,-56,57}, -{88,-56,58}, -{88,-56,59}, -{88,-56,60}, -{88,-56,61}, -{88,-56,62}, -{88,-56,63}, -{88,-56,64}, -{88,-56,65}, -{88,-56,66}, -{88,-56,67}, -{88,-56,68}, -{88,-56,69}, -{88,-56,70}, -{88,-56,71}, -{88,-56,72}, -{88,-56,73}, -{88,-56,74}, -{88,-56,75}, -{88,-56,76}, -{88,-56,77}, -{88,-56,78}, -{88,-56,79}, -{88,-56,80}, -{88,-56,81}, -{88,-56,82}, -{88,-56,83}, -{88,-56,84}, -{88,-55,0}, -{88,-55,1}, -{88,-55,2}, -{88,-55,3}, -{88,-55,4}, -{88,-55,5}, -{88,-55,6}, -{88,-55,7}, -{88,-55,8}, -{88,-55,9}, -{88,-55,10}, -{88,-55,11}, -{88,-55,12}, -{88,-55,13}, -{88,-55,14}, -{88,-55,15}, -{88,-55,16}, -{88,-55,17}, -{88,-55,18}, -{88,-55,19}, -{88,-55,20}, -{88,-55,21}, -{88,-55,22}, -{88,-55,23}, -{88,-55,24}, -{88,-55,25}, -{88,-55,26}, -{88,-55,27}, -{88,-55,28}, -{88,-55,29}, -{88,-55,30}, -{88,-55,31}, -{88,-55,32}, -{88,-55,33}, -{88,-55,34}, -{88,-55,35}, -{88,-55,36}, -{88,-55,37}, -{88,-55,38}, -{88,-55,39}, -{88,-55,40}, -{88,-55,41}, -{88,-55,42}, -{88,-55,43}, -{88,-55,44}, -{88,-55,45}, -{88,-55,46}, -{88,-55,47}, -{88,-55,48}, -{88,-55,49}, -{88,-55,50}, -{88,-55,51}, -{88,-55,52}, -{88,-55,53}, -{88,-55,54}, -{88,-55,55}, -{88,-55,56}, -{88,-55,57}, -{88,-55,58}, -{88,-55,59}, -{88,-55,60}, -{88,-55,61}, -{88,-55,62}, -{88,-55,63}, -{88,-55,64}, -{88,-55,65}, -{88,-55,66}, -{88,-55,67}, -{88,-55,68}, -{88,-55,69}, -{88,-55,70}, -{88,-55,71}, -{88,-55,72}, -{88,-55,73}, -{88,-55,74}, -{88,-55,75}, -{88,-55,76}, -{88,-55,77}, -{88,-55,78}, -{88,-55,79}, -{88,-55,80}, -{88,-55,81}, -{88,-55,82}, -{88,-55,83}, -{88,-55,84}, -{88,-55,85}, -{88,-54,-2}, -{88,-54,-1}, -{88,-54,0}, -{88,-54,1}, -{88,-54,2}, -{88,-54,3}, -{88,-54,4}, -{88,-54,5}, -{88,-54,6}, -{88,-54,7}, -{88,-54,8}, -{88,-54,9}, -{88,-54,10}, -{88,-54,11}, -{88,-54,12}, -{88,-54,13}, -{88,-54,14}, -{88,-54,15}, -{88,-54,16}, -{88,-54,17}, -{88,-54,18}, -{88,-54,19}, -{88,-54,20}, -{88,-54,21}, -{88,-54,22}, -{88,-54,23}, -{88,-54,24}, -{88,-54,25}, -{88,-54,26}, -{88,-54,27}, -{88,-54,28}, -{88,-54,29}, -{88,-54,30}, -{88,-54,31}, -{88,-54,32}, -{88,-54,33}, -{88,-54,34}, -{88,-54,35}, -{88,-54,36}, -{88,-54,37}, -{88,-54,38}, -{88,-54,39}, -{88,-54,40}, -{88,-54,41}, -{88,-54,42}, -{88,-54,43}, -{88,-54,44}, -{88,-54,45}, -{88,-54,46}, -{88,-54,47}, -{88,-54,48}, -{88,-54,49}, -{88,-54,50}, -{88,-54,51}, -{88,-54,52}, -{88,-54,53}, -{88,-54,54}, -{88,-54,55}, -{88,-54,56}, -{88,-54,57}, -{88,-54,58}, -{88,-54,59}, -{88,-54,60}, -{88,-54,61}, -{88,-54,62}, -{88,-54,63}, -{88,-54,64}, -{88,-54,65}, -{88,-54,66}, -{88,-54,67}, -{88,-54,68}, -{88,-54,69}, -{88,-54,70}, -{88,-54,71}, -{88,-54,72}, -{88,-54,73}, -{88,-54,74}, -{88,-54,75}, -{88,-54,76}, -{88,-54,77}, -{88,-54,78}, -{88,-54,79}, -{88,-54,80}, -{88,-54,81}, -{88,-54,82}, -{88,-54,83}, -{88,-54,84}, -{88,-54,85}, -{88,-53,-3}, -{88,-53,-2}, -{88,-53,-1}, -{88,-53,0}, -{88,-53,1}, -{88,-53,2}, -{88,-53,3}, -{88,-53,4}, -{88,-53,5}, -{88,-53,6}, -{88,-53,7}, -{88,-53,8}, -{88,-53,9}, -{88,-53,10}, -{88,-53,11}, -{88,-53,12}, -{88,-53,13}, -{88,-53,14}, -{88,-53,15}, -{88,-53,16}, -{88,-53,17}, -{88,-53,18}, -{88,-53,19}, -{88,-53,20}, -{88,-53,21}, -{88,-53,22}, -{88,-53,23}, -{88,-53,24}, -{88,-53,25}, -{88,-53,26}, -{88,-53,27}, -{88,-53,28}, -{88,-53,29}, -{88,-53,30}, -{88,-53,31}, -{88,-53,32}, -{88,-53,33}, -{88,-53,34}, -{88,-53,35}, -{88,-53,36}, -{88,-53,37}, -{88,-53,38}, -{88,-53,39}, -{88,-53,40}, -{88,-53,41}, -{88,-53,42}, -{88,-53,43}, -{88,-53,44}, -{88,-53,45}, -{88,-53,46}, -{88,-53,47}, -{88,-53,48}, -{88,-53,49}, -{88,-53,50}, -{88,-53,51}, -{88,-53,52}, -{88,-53,53}, -{88,-53,54}, -{88,-53,55}, -{88,-53,56}, -{88,-53,57}, -{88,-53,58}, -{88,-53,59}, -{88,-53,60}, -{88,-53,61}, -{88,-53,62}, -{88,-53,63}, -{88,-53,64}, -{88,-53,65}, -{88,-53,66}, -{88,-53,67}, -{88,-53,68}, -{88,-53,69}, -{88,-53,70}, -{88,-53,71}, -{88,-53,72}, -{88,-53,73}, -{88,-53,74}, -{88,-53,75}, -{88,-53,76}, -{88,-53,77}, -{88,-53,78}, -{88,-53,79}, -{88,-53,80}, -{88,-53,81}, -{88,-53,82}, -{88,-53,83}, -{88,-53,84}, -{88,-53,85}, -{88,-52,-5}, -{88,-52,-4}, -{88,-52,-3}, -{88,-52,-2}, -{88,-52,-1}, -{88,-52,0}, -{88,-52,1}, -{88,-52,2}, -{88,-52,3}, -{88,-52,4}, -{88,-52,5}, -{88,-52,6}, -{88,-52,7}, -{88,-52,8}, -{88,-52,9}, -{88,-52,10}, -{88,-52,11}, -{88,-52,12}, -{88,-52,13}, -{88,-52,14}, -{88,-52,15}, -{88,-52,16}, -{88,-52,17}, -{88,-52,18}, -{88,-52,19}, -{88,-52,20}, -{88,-52,21}, -{88,-52,22}, -{88,-52,23}, -{88,-52,24}, -{88,-52,25}, -{88,-52,26}, -{88,-52,27}, -{88,-52,28}, -{88,-52,29}, -{88,-52,30}, -{88,-52,31}, -{88,-52,32}, -{88,-52,33}, -{88,-52,34}, -{88,-52,35}, -{88,-52,36}, -{88,-52,37}, -{88,-52,38}, -{88,-52,39}, -{88,-52,40}, -{88,-52,41}, -{88,-52,42}, -{88,-52,43}, -{88,-52,44}, -{88,-52,45}, -{88,-52,46}, -{88,-52,47}, -{88,-52,48}, -{88,-52,49}, -{88,-52,50}, -{88,-52,51}, -{88,-52,52}, -{88,-52,53}, -{88,-52,54}, -{88,-52,55}, -{88,-52,56}, -{88,-52,57}, -{88,-52,58}, -{88,-52,59}, -{88,-52,60}, -{88,-52,61}, -{88,-52,62}, -{88,-52,63}, -{88,-52,64}, -{88,-52,65}, -{88,-52,66}, -{88,-52,67}, -{88,-52,68}, -{88,-52,69}, -{88,-52,70}, -{88,-52,71}, -{88,-52,72}, -{88,-52,73}, -{88,-52,74}, -{88,-52,75}, -{88,-52,76}, -{88,-52,77}, -{88,-52,78}, -{88,-52,79}, -{88,-52,80}, -{88,-52,81}, -{88,-52,82}, -{88,-52,83}, -{88,-52,84}, -{88,-52,85}, -{88,-51,-7}, -{88,-51,-6}, -{88,-51,-5}, -{88,-51,-4}, -{88,-51,-3}, -{88,-51,-2}, -{88,-51,-1}, -{88,-51,0}, -{88,-51,1}, -{88,-51,2}, -{88,-51,3}, -{88,-51,4}, -{88,-51,5}, -{88,-51,6}, -{88,-51,7}, -{88,-51,8}, -{88,-51,9}, -{88,-51,10}, -{88,-51,11}, -{88,-51,12}, -{88,-51,13}, -{88,-51,14}, -{88,-51,15}, -{88,-51,16}, -{88,-51,17}, -{88,-51,18}, -{88,-51,19}, -{88,-51,20}, -{88,-51,21}, -{88,-51,22}, -{88,-51,23}, -{88,-51,24}, -{88,-51,25}, -{88,-51,26}, -{88,-51,27}, -{88,-51,28}, -{88,-51,29}, -{88,-51,30}, -{88,-51,31}, -{88,-51,32}, -{88,-51,33}, -{88,-51,34}, -{88,-51,35}, -{88,-51,36}, -{88,-51,37}, -{88,-51,38}, -{88,-51,39}, -{88,-51,40}, -{88,-51,41}, -{88,-51,42}, -{88,-51,43}, -{88,-51,44}, -{88,-51,45}, -{88,-51,46}, -{88,-51,47}, -{88,-51,48}, -{88,-51,49}, -{88,-51,50}, -{88,-51,51}, -{88,-51,52}, -{88,-51,53}, -{88,-51,54}, -{88,-51,55}, -{88,-51,56}, -{88,-51,57}, -{88,-51,58}, -{88,-51,59}, -{88,-51,60}, -{88,-51,61}, -{88,-51,62}, -{88,-51,63}, -{88,-51,64}, -{88,-51,65}, -{88,-51,66}, -{88,-51,67}, -{88,-51,68}, -{88,-51,69}, -{88,-51,70}, -{88,-51,71}, -{88,-51,72}, -{88,-51,73}, -{88,-51,74}, -{88,-51,75}, -{88,-51,76}, -{88,-51,77}, -{88,-51,78}, -{88,-51,79}, -{88,-51,80}, -{88,-51,81}, -{88,-51,82}, -{88,-51,83}, -{88,-51,84}, -{88,-51,85}, -{88,-50,-8}, -{88,-50,-7}, -{88,-50,-6}, -{88,-50,-5}, -{88,-50,-4}, -{88,-50,-3}, -{88,-50,-2}, -{88,-50,-1}, -{88,-50,0}, -{88,-50,1}, -{88,-50,2}, -{88,-50,3}, -{88,-50,4}, -{88,-50,5}, -{88,-50,6}, -{88,-50,7}, -{88,-50,8}, -{88,-50,9}, -{88,-50,10}, -{88,-50,11}, -{88,-50,12}, -{88,-50,13}, -{88,-50,14}, -{88,-50,15}, -{88,-50,16}, -{88,-50,17}, -{88,-50,18}, -{88,-50,19}, -{88,-50,20}, -{88,-50,21}, -{88,-50,22}, -{88,-50,23}, -{88,-50,24}, -{88,-50,25}, -{88,-50,26}, -{88,-50,27}, -{88,-50,28}, -{88,-50,29}, -{88,-50,30}, -{88,-50,31}, -{88,-50,32}, -{88,-50,33}, -{88,-50,34}, -{88,-50,35}, -{88,-50,36}, -{88,-50,37}, -{88,-50,38}, -{88,-50,39}, -{88,-50,40}, -{88,-50,41}, -{88,-50,42}, -{88,-50,43}, -{88,-50,44}, -{88,-50,45}, -{88,-50,46}, -{88,-50,47}, -{88,-50,48}, -{88,-50,49}, -{88,-50,50}, -{88,-50,51}, -{88,-50,52}, -{88,-50,53}, -{88,-50,54}, -{88,-50,55}, -{88,-50,56}, -{88,-50,57}, -{88,-50,58}, -{88,-50,59}, -{88,-50,60}, -{88,-50,61}, -{88,-50,62}, -{88,-50,63}, -{88,-50,64}, -{88,-50,65}, -{88,-50,66}, -{88,-50,67}, -{88,-50,68}, -{88,-50,69}, -{88,-50,70}, -{88,-50,71}, -{88,-50,72}, -{88,-50,73}, -{88,-50,74}, -{88,-50,75}, -{88,-50,76}, -{88,-50,77}, -{88,-50,78}, -{88,-50,79}, -{88,-50,80}, -{88,-50,81}, -{88,-50,82}, -{88,-50,83}, -{88,-50,84}, -{88,-50,85}, -{88,-49,-10}, -{88,-49,-9}, -{88,-49,-8}, -{88,-49,-7}, -{88,-49,-6}, -{88,-49,-5}, -{88,-49,-4}, -{88,-49,-3}, -{88,-49,-2}, -{88,-49,-1}, -{88,-49,0}, -{88,-49,1}, -{88,-49,2}, -{88,-49,3}, -{88,-49,4}, -{88,-49,5}, -{88,-49,6}, -{88,-49,7}, -{88,-49,8}, -{88,-49,9}, -{88,-49,10}, -{88,-49,11}, -{88,-49,12}, -{88,-49,13}, -{88,-49,14}, -{88,-49,15}, -{88,-49,16}, -{88,-49,17}, -{88,-49,18}, -{88,-49,19}, -{88,-49,20}, -{88,-49,21}, -{88,-49,22}, -{88,-49,23}, -{88,-49,24}, -{88,-49,25}, -{88,-49,26}, -{88,-49,27}, -{88,-49,28}, -{88,-49,29}, -{88,-49,30}, -{88,-49,31}, -{88,-49,32}, -{88,-49,33}, -{88,-49,34}, -{88,-49,35}, -{88,-49,36}, -{88,-49,37}, -{88,-49,38}, -{88,-49,39}, -{88,-49,40}, -{88,-49,41}, -{88,-49,42}, -{88,-49,43}, -{88,-49,44}, -{88,-49,45}, -{88,-49,46}, -{88,-49,47}, -{88,-49,48}, -{88,-49,49}, -{88,-49,50}, -{88,-49,51}, -{88,-49,52}, -{88,-49,53}, -{88,-49,54}, -{88,-49,55}, -{88,-49,56}, -{88,-49,57}, -{88,-49,58}, -{88,-49,59}, -{88,-49,60}, -{88,-49,61}, -{88,-49,62}, -{88,-49,63}, -{88,-49,64}, -{88,-49,65}, -{88,-49,66}, -{88,-49,67}, -{88,-49,68}, -{88,-49,69}, -{88,-49,70}, -{88,-49,71}, -{88,-49,72}, -{88,-49,73}, -{88,-49,74}, -{88,-49,75}, -{88,-49,76}, -{88,-49,77}, -{88,-49,78}, -{88,-49,79}, -{88,-49,80}, -{88,-49,81}, -{88,-49,82}, -{88,-49,83}, -{88,-49,84}, -{88,-49,85}, -{88,-48,-11}, -{88,-48,-10}, -{88,-48,-9}, -{88,-48,-8}, -{88,-48,-7}, -{88,-48,-6}, -{88,-48,-5}, -{88,-48,-4}, -{88,-48,-3}, -{88,-48,-2}, -{88,-48,-1}, -{88,-48,0}, -{88,-48,1}, -{88,-48,2}, -{88,-48,3}, -{88,-48,4}, -{88,-48,5}, -{88,-48,6}, -{88,-48,7}, -{88,-48,8}, -{88,-48,9}, -{88,-48,10}, -{88,-48,11}, -{88,-48,12}, -{88,-48,13}, -{88,-48,14}, -{88,-48,15}, -{88,-48,16}, -{88,-48,17}, -{88,-48,18}, -{88,-48,19}, -{88,-48,20}, -{88,-48,21}, -{88,-48,22}, -{88,-48,23}, -{88,-48,24}, -{88,-48,25}, -{88,-48,26}, -{88,-48,27}, -{88,-48,28}, -{88,-48,29}, -{88,-48,30}, -{88,-48,31}, -{88,-48,32}, -{88,-48,33}, -{88,-48,34}, -{88,-48,35}, -{88,-48,36}, -{88,-48,37}, -{88,-48,38}, -{88,-48,39}, -{88,-48,40}, -{88,-48,41}, -{88,-48,42}, -{88,-48,43}, -{88,-48,44}, -{88,-48,45}, -{88,-48,46}, -{88,-48,47}, -{88,-48,48}, -{88,-48,49}, -{88,-48,50}, -{88,-48,51}, -{88,-48,52}, -{88,-48,53}, -{88,-48,54}, -{88,-48,55}, -{88,-48,56}, -{88,-48,57}, -{88,-48,58}, -{88,-48,59}, -{88,-48,60}, -{88,-48,61}, -{88,-48,62}, -{88,-48,63}, -{88,-48,64}, -{88,-48,65}, -{88,-48,66}, -{88,-48,67}, -{88,-48,68}, -{88,-48,69}, -{88,-48,70}, -{88,-48,71}, -{88,-48,72}, -{88,-48,73}, -{88,-48,74}, -{88,-48,75}, -{88,-48,76}, -{88,-48,77}, -{88,-48,78}, -{88,-48,79}, -{88,-48,80}, -{88,-48,81}, -{88,-48,82}, -{88,-48,83}, -{88,-48,84}, -{88,-48,85}, -{88,-47,-13}, -{88,-47,-12}, -{88,-47,-11}, -{88,-47,-10}, -{88,-47,-9}, -{88,-47,-8}, -{88,-47,-7}, -{88,-47,-6}, -{88,-47,-5}, -{88,-47,-4}, -{88,-47,-3}, -{88,-47,-2}, -{88,-47,-1}, -{88,-47,0}, -{88,-47,1}, -{88,-47,2}, -{88,-47,3}, -{88,-47,4}, -{88,-47,5}, -{88,-47,6}, -{88,-47,7}, -{88,-47,8}, -{88,-47,9}, -{88,-47,10}, -{88,-47,11}, -{88,-47,12}, -{88,-47,13}, -{88,-47,14}, -{88,-47,15}, -{88,-47,16}, -{88,-47,17}, -{88,-47,18}, -{88,-47,19}, -{88,-47,20}, -{88,-47,21}, -{88,-47,22}, -{88,-47,23}, -{88,-47,24}, -{88,-47,25}, -{88,-47,26}, -{88,-47,27}, -{88,-47,28}, -{88,-47,29}, -{88,-47,30}, -{88,-47,31}, -{88,-47,32}, -{88,-47,33}, -{88,-47,34}, -{88,-47,35}, -{88,-47,36}, -{88,-47,37}, -{88,-47,38}, -{88,-47,39}, -{88,-47,40}, -{88,-47,41}, -{88,-47,42}, -{88,-47,43}, -{88,-47,44}, -{88,-47,45}, -{88,-47,46}, -{88,-47,47}, -{88,-47,48}, -{88,-47,49}, -{88,-47,50}, -{88,-47,51}, -{88,-47,52}, -{88,-47,53}, -{88,-47,54}, -{88,-47,55}, -{88,-47,56}, -{88,-47,57}, -{88,-47,58}, -{88,-47,59}, -{88,-47,60}, -{88,-47,61}, -{88,-47,62}, -{88,-47,63}, -{88,-47,64}, -{88,-47,65}, -{88,-47,66}, -{88,-47,67}, -{88,-47,68}, -{88,-47,69}, -{88,-47,70}, -{88,-47,71}, -{88,-47,72}, -{88,-47,73}, -{88,-47,74}, -{88,-47,75}, -{88,-47,76}, -{88,-47,77}, -{88,-47,78}, -{88,-47,79}, -{88,-47,80}, -{88,-47,81}, -{88,-47,82}, -{88,-47,83}, -{88,-47,84}, -{88,-47,85}, -{88,-46,-15}, -{88,-46,-14}, -{88,-46,-13}, -{88,-46,-12}, -{88,-46,-11}, -{88,-46,-10}, -{88,-46,-9}, -{88,-46,-8}, -{88,-46,-7}, -{88,-46,-6}, -{88,-46,-5}, -{88,-46,-4}, -{88,-46,-3}, -{88,-46,-2}, -{88,-46,-1}, -{88,-46,0}, -{88,-46,1}, -{88,-46,2}, -{88,-46,3}, -{88,-46,4}, -{88,-46,5}, -{88,-46,6}, -{88,-46,7}, -{88,-46,8}, -{88,-46,9}, -{88,-46,10}, -{88,-46,11}, -{88,-46,12}, -{88,-46,13}, -{88,-46,14}, -{88,-46,15}, -{88,-46,16}, -{88,-46,17}, -{88,-46,18}, -{88,-46,19}, -{88,-46,20}, -{88,-46,21}, -{88,-46,22}, -{88,-46,23}, -{88,-46,24}, -{88,-46,25}, -{88,-46,26}, -{88,-46,27}, -{88,-46,28}, -{88,-46,29}, -{88,-46,30}, -{88,-46,31}, -{88,-46,32}, -{88,-46,33}, -{88,-46,34}, -{88,-46,35}, -{88,-46,36}, -{88,-46,37}, -{88,-46,38}, -{88,-46,39}, -{88,-46,40}, -{88,-46,41}, -{88,-46,42}, -{88,-46,43}, -{88,-46,44}, -{88,-46,45}, -{88,-46,46}, -{88,-46,47}, -{88,-46,48}, -{88,-46,49}, -{88,-46,50}, -{88,-46,51}, -{88,-46,52}, -{88,-46,53}, -{88,-46,54}, -{88,-46,55}, -{88,-46,56}, -{88,-46,57}, -{88,-46,58}, -{88,-46,59}, -{88,-46,60}, -{88,-46,61}, -{88,-46,62}, -{88,-46,63}, -{88,-46,64}, -{88,-46,65}, -{88,-46,66}, -{88,-46,67}, -{88,-46,68}, -{88,-46,69}, -{88,-46,70}, -{88,-46,71}, -{88,-46,72}, -{88,-46,73}, -{88,-46,74}, -{88,-46,75}, -{88,-46,76}, -{88,-46,77}, -{88,-46,78}, -{88,-46,79}, -{88,-46,80}, -{88,-46,81}, -{88,-46,82}, -{88,-46,83}, -{88,-46,84}, -{88,-46,85}, -{88,-45,-16}, -{88,-45,-15}, -{88,-45,-14}, -{88,-45,-13}, -{88,-45,-12}, -{88,-45,-11}, -{88,-45,-10}, -{88,-45,-9}, -{88,-45,-8}, -{88,-45,-7}, -{88,-45,-6}, -{88,-45,-5}, -{88,-45,-4}, -{88,-45,-3}, -{88,-45,-2}, -{88,-45,-1}, -{88,-45,0}, -{88,-45,1}, -{88,-45,2}, -{88,-45,3}, -{88,-45,4}, -{88,-45,5}, -{88,-45,6}, -{88,-45,7}, -{88,-45,8}, -{88,-45,9}, -{88,-45,10}, -{88,-45,11}, -{88,-45,12}, -{88,-45,13}, -{88,-45,14}, -{88,-45,15}, -{88,-45,16}, -{88,-45,17}, -{88,-45,18}, -{88,-45,19}, -{88,-45,20}, -{88,-45,21}, -{88,-45,22}, -{88,-45,23}, -{88,-45,24}, -{88,-45,25}, -{88,-45,26}, -{88,-45,27}, -{88,-45,28}, -{88,-45,29}, -{88,-45,30}, -{88,-45,31}, -{88,-45,32}, -{88,-45,33}, -{88,-45,34}, -{88,-45,35}, -{88,-45,36}, -{88,-45,37}, -{88,-45,38}, -{88,-45,39}, -{88,-45,40}, -{88,-45,41}, -{88,-45,42}, -{88,-45,43}, -{88,-45,44}, -{88,-45,45}, -{88,-45,46}, -{88,-45,47}, -{88,-45,48}, -{88,-45,49}, -{88,-45,50}, -{88,-45,51}, -{88,-45,52}, -{88,-45,53}, -{88,-45,54}, -{88,-45,55}, -{88,-45,56}, -{88,-45,57}, -{88,-45,58}, -{88,-45,59}, -{88,-45,60}, -{88,-45,61}, -{88,-45,62}, -{88,-45,63}, -{88,-45,64}, -{88,-45,65}, -{88,-45,66}, -{88,-45,67}, -{88,-45,68}, -{88,-45,69}, -{88,-45,70}, -{88,-45,71}, -{88,-45,72}, -{88,-45,73}, -{88,-45,74}, -{88,-45,75}, -{88,-45,76}, -{88,-45,77}, -{88,-45,78}, -{88,-45,79}, -{88,-45,80}, -{88,-45,81}, -{88,-45,82}, -{88,-45,83}, -{88,-45,84}, -{88,-45,85}, -{88,-44,-18}, -{88,-44,-17}, -{88,-44,-16}, -{88,-44,-15}, -{88,-44,-14}, -{88,-44,-13}, -{88,-44,-12}, -{88,-44,-11}, -{88,-44,-10}, -{88,-44,-9}, -{88,-44,-8}, -{88,-44,-7}, -{88,-44,-6}, -{88,-44,-5}, -{88,-44,-4}, -{88,-44,-3}, -{88,-44,-2}, -{88,-44,-1}, -{88,-44,0}, -{88,-44,1}, -{88,-44,2}, -{88,-44,3}, -{88,-44,4}, -{88,-44,5}, -{88,-44,6}, -{88,-44,7}, -{88,-44,8}, -{88,-44,9}, -{88,-44,10}, -{88,-44,11}, -{88,-44,12}, -{88,-44,13}, -{88,-44,14}, -{88,-44,15}, -{88,-44,16}, -{88,-44,17}, -{88,-44,18}, -{88,-44,19}, -{88,-44,20}, -{88,-44,21}, -{88,-44,22}, -{88,-44,23}, -{88,-44,24}, -{88,-44,25}, -{88,-44,26}, -{88,-44,27}, -{88,-44,28}, -{88,-44,29}, -{88,-44,30}, -{88,-44,31}, -{88,-44,32}, -{88,-44,33}, -{88,-44,34}, -{88,-44,35}, -{88,-44,36}, -{88,-44,37}, -{88,-44,38}, -{88,-44,39}, -{88,-44,40}, -{88,-44,41}, -{88,-44,42}, -{88,-44,43}, -{88,-44,44}, -{88,-44,45}, -{88,-44,46}, -{88,-44,47}, -{88,-44,48}, -{88,-44,49}, -{88,-44,50}, -{88,-44,51}, -{88,-44,52}, -{88,-44,53}, -{88,-44,54}, -{88,-44,55}, -{88,-44,56}, -{88,-44,57}, -{88,-44,58}, -{88,-44,59}, -{88,-44,60}, -{88,-44,61}, -{88,-44,62}, -{88,-44,63}, -{88,-44,64}, -{88,-44,65}, -{88,-44,66}, -{88,-44,67}, -{88,-44,68}, -{88,-44,69}, -{88,-44,70}, -{88,-44,71}, -{88,-44,72}, -{88,-44,73}, -{88,-44,74}, -{88,-44,75}, -{88,-44,76}, -{88,-44,77}, -{88,-44,78}, -{88,-44,79}, -{88,-44,80}, -{88,-44,81}, -{88,-44,82}, -{88,-44,83}, -{88,-44,84}, -{88,-44,85}, -{88,-43,-18}, -{88,-43,-17}, -{88,-43,-16}, -{88,-43,-15}, -{88,-43,-14}, -{88,-43,-13}, -{88,-43,-12}, -{88,-43,-11}, -{88,-43,-10}, -{88,-43,-9}, -{88,-43,-8}, -{88,-43,-7}, -{88,-43,-6}, -{88,-43,-5}, -{88,-43,-4}, -{88,-43,-3}, -{88,-43,-2}, -{88,-43,-1}, -{88,-43,0}, -{88,-43,1}, -{88,-43,2}, -{88,-43,3}, -{88,-43,4}, -{88,-43,5}, -{88,-43,6}, -{88,-43,7}, -{88,-43,8}, -{88,-43,9}, -{88,-43,10}, -{88,-43,11}, -{88,-43,12}, -{88,-43,13}, -{88,-43,14}, -{88,-43,15}, -{88,-43,16}, -{88,-43,17}, -{88,-43,18}, -{88,-43,19}, -{88,-43,20}, -{88,-43,21}, -{88,-43,22}, -{88,-43,23}, -{88,-43,24}, -{88,-43,25}, -{88,-43,26}, -{88,-43,27}, -{88,-43,28}, -{88,-43,29}, -{88,-43,30}, -{88,-43,31}, -{88,-43,32}, -{88,-43,33}, -{88,-43,34}, -{88,-43,35}, -{88,-43,36}, -{88,-43,37}, -{88,-43,38}, -{88,-43,39}, -{88,-43,40}, -{88,-43,41}, -{88,-43,42}, -{88,-43,43}, -{88,-43,44}, -{88,-43,45}, -{88,-43,46}, -{88,-43,47}, -{88,-43,48}, -{88,-43,49}, -{88,-43,50}, -{88,-43,51}, -{88,-43,52}, -{88,-43,53}, -{88,-43,54}, -{88,-43,55}, -{88,-43,56}, -{88,-43,57}, -{88,-43,58}, -{88,-43,59}, -{88,-43,60}, -{88,-43,61}, -{88,-43,62}, -{88,-43,63}, -{88,-43,64}, -{88,-43,65}, -{88,-43,66}, -{88,-43,67}, -{88,-43,68}, -{88,-43,69}, -{88,-43,70}, -{88,-43,71}, -{88,-43,72}, -{88,-43,73}, -{88,-43,74}, -{88,-43,75}, -{88,-43,76}, -{88,-43,77}, -{88,-43,78}, -{88,-43,79}, -{88,-43,80}, -{88,-43,81}, -{88,-43,82}, -{88,-43,83}, -{88,-43,84}, -{88,-43,85}, -{88,-42,-18}, -{88,-42,-17}, -{88,-42,-16}, -{88,-42,-15}, -{88,-42,-14}, -{88,-42,-13}, -{88,-42,-12}, -{88,-42,-11}, -{88,-42,-10}, -{88,-42,-9}, -{88,-42,-8}, -{88,-42,-7}, -{88,-42,-6}, -{88,-42,-5}, -{88,-42,-4}, -{88,-42,-3}, -{88,-42,-2}, -{88,-42,-1}, -{88,-42,0}, -{88,-42,1}, -{88,-42,2}, -{88,-42,3}, -{88,-42,4}, -{88,-42,5}, -{88,-42,6}, -{88,-42,7}, -{88,-42,8}, -{88,-42,9}, -{88,-42,10}, -{88,-42,11}, -{88,-42,12}, -{88,-42,13}, -{88,-42,14}, -{88,-42,15}, -{88,-42,16}, -{88,-42,17}, -{88,-42,18}, -{88,-42,19}, -{88,-42,20}, -{88,-42,21}, -{88,-42,22}, -{88,-42,23}, -{88,-42,24}, -{88,-42,25}, -{88,-42,26}, -{88,-42,27}, -{88,-42,28}, -{88,-42,29}, -{88,-42,30}, -{88,-42,31}, -{88,-42,32}, -{88,-42,33}, -{88,-42,34}, -{88,-42,35}, -{88,-42,36}, -{88,-42,37}, -{88,-42,38}, -{88,-42,39}, -{88,-42,40}, -{88,-42,41}, -{88,-42,42}, -{88,-42,43}, -{88,-42,44}, -{88,-42,45}, -{88,-42,46}, -{88,-42,47}, -{88,-42,48}, -{88,-42,49}, -{88,-42,50}, -{88,-42,51}, -{88,-42,52}, -{88,-42,53}, -{88,-42,54}, -{88,-42,55}, -{88,-42,56}, -{88,-42,57}, -{88,-42,58}, -{88,-42,59}, -{88,-42,60}, -{88,-42,61}, -{88,-42,62}, -{88,-42,63}, -{88,-42,64}, -{88,-42,65}, -{88,-42,66}, -{88,-42,67}, -{88,-42,68}, -{88,-42,69}, -{88,-42,70}, -{88,-42,71}, -{88,-42,72}, -{88,-42,73}, -{88,-42,74}, -{88,-42,75}, -{88,-42,76}, -{88,-42,77}, -{88,-42,78}, -{88,-42,79}, -{88,-42,80}, -{88,-42,81}, -{88,-42,82}, -{88,-42,83}, -{88,-42,84}, -{88,-42,85}, -{88,-41,-18}, -{88,-41,-17}, -{88,-41,-16}, -{88,-41,-15}, -{88,-41,-14}, -{88,-41,-13}, -{88,-41,-12}, -{88,-41,-11}, -{88,-41,-10}, -{88,-41,-9}, -{88,-41,-8}, -{88,-41,-7}, -{88,-41,-6}, -{88,-41,-5}, -{88,-41,-4}, -{88,-41,-3}, -{88,-41,-2}, -{88,-41,-1}, -{88,-41,0}, -{88,-41,1}, -{88,-41,2}, -{88,-41,3}, -{88,-41,4}, -{88,-41,5}, -{88,-41,6}, -{88,-41,7}, -{88,-41,8}, -{88,-41,9}, -{88,-41,10}, -{88,-41,11}, -{88,-41,12}, -{88,-41,13}, -{88,-41,14}, -{88,-41,15}, -{88,-41,16}, -{88,-41,17}, -{88,-41,18}, -{88,-41,19}, -{88,-41,20}, -{88,-41,21}, -{88,-41,22}, -{88,-41,23}, -{88,-41,24}, -{88,-41,25}, -{88,-41,26}, -{88,-41,27}, -{88,-41,28}, -{88,-41,29}, -{88,-41,30}, -{88,-41,31}, -{88,-41,32}, -{88,-41,33}, -{88,-41,34}, -{88,-41,35}, -{88,-41,36}, -{88,-41,37}, -{88,-41,38}, -{88,-41,39}, -{88,-41,40}, -{88,-41,41}, -{88,-41,42}, -{88,-41,43}, -{88,-41,44}, -{88,-41,45}, -{88,-41,46}, -{88,-41,47}, -{88,-41,48}, -{88,-41,49}, -{88,-41,50}, -{88,-41,51}, -{88,-41,52}, -{88,-41,53}, -{88,-41,54}, -{88,-41,55}, -{88,-41,56}, -{88,-41,57}, -{88,-41,58}, -{88,-41,59}, -{88,-41,60}, -{88,-41,61}, -{88,-41,62}, -{88,-41,63}, -{88,-41,64}, -{88,-41,65}, -{88,-41,66}, -{88,-41,67}, -{88,-41,68}, -{88,-41,69}, -{88,-41,70}, -{88,-41,71}, -{88,-41,72}, -{88,-41,73}, -{88,-41,74}, -{88,-41,75}, -{88,-41,76}, -{88,-41,77}, -{88,-41,78}, -{88,-41,79}, -{88,-41,80}, -{88,-41,81}, -{88,-41,82}, -{88,-41,83}, -{88,-41,84}, -{88,-41,85}, -{88,-40,-18}, -{88,-40,-17}, -{88,-40,-16}, -{88,-40,-15}, -{88,-40,-14}, -{88,-40,-13}, -{88,-40,-12}, -{88,-40,-11}, -{88,-40,-10}, -{88,-40,-9}, -{88,-40,-8}, -{88,-40,-7}, -{88,-40,-6}, -{88,-40,-5}, -{88,-40,-4}, -{88,-40,-3}, -{88,-40,-2}, -{88,-40,-1}, -{88,-40,0}, -{88,-40,1}, -{88,-40,2}, -{88,-40,3}, -{88,-40,4}, -{88,-40,5}, -{88,-40,6}, -{88,-40,7}, -{88,-40,8}, -{88,-40,9}, -{88,-40,10}, -{88,-40,11}, -{88,-40,12}, -{88,-40,13}, -{88,-40,14}, -{88,-40,15}, -{88,-40,16}, -{88,-40,17}, -{88,-40,18}, -{88,-40,19}, -{88,-40,20}, -{88,-40,21}, -{88,-40,22}, -{88,-40,23}, -{88,-40,24}, -{88,-40,25}, -{88,-40,26}, -{88,-40,27}, -{88,-40,28}, -{88,-40,29}, -{88,-40,30}, -{88,-40,31}, -{88,-40,32}, -{88,-40,33}, -{88,-40,34}, -{88,-40,35}, -{88,-40,36}, -{88,-40,37}, -{88,-40,38}, -{88,-40,39}, -{88,-40,40}, -{88,-40,41}, -{88,-40,42}, -{88,-40,43}, -{88,-40,44}, -{88,-40,45}, -{88,-40,46}, -{88,-40,47}, -{88,-40,48}, -{88,-40,49}, -{88,-40,50}, -{88,-40,51}, -{88,-40,52}, -{88,-40,53}, -{88,-40,54}, -{88,-40,55}, -{88,-40,56}, -{88,-40,57}, -{88,-40,58}, -{88,-40,59}, -{88,-40,60}, -{88,-40,61}, -{88,-40,62}, -{88,-40,63}, -{88,-40,64}, -{88,-40,65}, -{88,-40,66}, -{88,-40,67}, -{88,-40,68}, -{88,-40,69}, -{88,-40,70}, -{88,-40,71}, -{88,-40,72}, -{88,-40,73}, -{88,-40,74}, -{88,-40,75}, -{88,-40,76}, -{88,-40,77}, -{88,-40,78}, -{88,-40,79}, -{88,-40,80}, -{88,-40,81}, -{88,-40,82}, -{88,-40,83}, -{88,-40,84}, -{88,-40,85}, -{88,-39,-18}, -{88,-39,-17}, -{88,-39,-16}, -{88,-39,-15}, -{88,-39,-14}, -{88,-39,-13}, -{88,-39,-12}, -{88,-39,-11}, -{88,-39,-10}, -{88,-39,-9}, -{88,-39,-8}, -{88,-39,-7}, -{88,-39,-6}, -{88,-39,-5}, -{88,-39,-4}, -{88,-39,-3}, -{88,-39,-2}, -{88,-39,-1}, -{88,-39,0}, -{88,-39,1}, -{88,-39,2}, -{88,-39,3}, -{88,-39,4}, -{88,-39,5}, -{88,-39,6}, -{88,-39,7}, -{88,-39,8}, -{88,-39,9}, -{88,-39,10}, -{88,-39,11}, -{88,-39,12}, -{88,-39,13}, -{88,-39,14}, -{88,-39,15}, -{88,-39,16}, -{88,-39,17}, -{88,-39,18}, -{88,-39,19}, -{88,-39,20}, -{88,-39,21}, -{88,-39,22}, -{88,-39,23}, -{88,-39,24}, -{88,-39,25}, -{88,-39,26}, -{88,-39,27}, -{88,-39,28}, -{88,-39,29}, -{88,-39,30}, -{88,-39,31}, -{88,-39,32}, -{88,-39,33}, -{88,-39,34}, -{88,-39,35}, -{88,-39,36}, -{88,-39,37}, -{88,-39,38}, -{88,-39,39}, -{88,-39,40}, -{88,-39,41}, -{88,-39,42}, -{88,-39,43}, -{88,-39,44}, -{88,-39,45}, -{88,-39,46}, -{88,-39,47}, -{88,-39,48}, -{88,-39,49}, -{88,-39,50}, -{88,-39,51}, -{88,-39,52}, -{88,-39,53}, -{88,-39,54}, -{88,-39,55}, -{88,-39,56}, -{88,-39,57}, -{88,-39,58}, -{88,-39,59}, -{88,-39,60}, -{88,-39,61}, -{88,-39,62}, -{88,-39,63}, -{88,-39,64}, -{88,-39,65}, -{88,-39,66}, -{88,-39,67}, -{88,-39,68}, -{88,-39,69}, -{88,-39,70}, -{88,-39,71}, -{88,-39,72}, -{88,-39,73}, -{88,-39,74}, -{88,-39,75}, -{88,-39,76}, -{88,-39,77}, -{88,-39,78}, -{88,-39,79}, -{88,-39,80}, -{88,-39,81}, -{88,-39,82}, -{88,-39,83}, -{88,-39,84}, -{88,-39,85}, -{88,-38,-18}, -{88,-38,-17}, -{88,-38,-16}, -{88,-38,-15}, -{88,-38,-14}, -{88,-38,-13}, -{88,-38,-12}, -{88,-38,-11}, -{88,-38,-10}, -{88,-38,-9}, -{88,-38,-8}, -{88,-38,-7}, -{88,-38,-6}, -{88,-38,-5}, -{88,-38,-4}, -{88,-38,-3}, -{88,-38,-2}, -{88,-38,-1}, -{88,-38,0}, -{88,-38,1}, -{88,-38,2}, -{88,-38,3}, -{88,-38,4}, -{88,-38,5}, -{88,-38,6}, -{88,-38,7}, -{88,-38,8}, -{88,-38,9}, -{88,-38,10}, -{88,-38,11}, -{88,-38,12}, -{88,-38,13}, -{88,-38,14}, -{88,-38,15}, -{88,-38,16}, -{88,-38,17}, -{88,-38,18}, -{88,-38,19}, -{88,-38,20}, -{88,-38,21}, -{88,-38,22}, -{88,-38,23}, -{88,-38,24}, -{88,-38,25}, -{88,-38,26}, -{88,-38,27}, -{88,-38,28}, -{88,-38,29}, -{88,-38,30}, -{88,-38,31}, -{88,-38,32}, -{88,-38,33}, -{88,-38,34}, -{88,-38,35}, -{88,-38,36}, -{88,-38,37}, -{88,-38,38}, -{88,-38,39}, -{88,-38,40}, -{88,-38,41}, -{88,-38,42}, -{88,-38,43}, -{88,-38,44}, -{88,-38,45}, -{88,-38,46}, -{88,-38,47}, -{88,-38,48}, -{88,-38,49}, -{88,-38,50}, -{88,-38,51}, -{88,-38,52}, -{88,-38,53}, -{88,-38,54}, -{88,-38,55}, -{88,-38,56}, -{88,-38,57}, -{88,-38,58}, -{88,-38,59}, -{88,-38,60}, -{88,-38,61}, -{88,-38,62}, -{88,-38,63}, -{88,-38,64}, -{88,-38,65}, -{88,-38,66}, -{88,-38,67}, -{88,-38,68}, -{88,-38,69}, -{88,-38,70}, -{88,-38,71}, -{88,-38,72}, -{88,-38,73}, -{88,-38,74}, -{88,-38,75}, -{88,-38,76}, -{88,-38,77}, -{88,-38,78}, -{88,-38,79}, -{88,-38,80}, -{88,-38,81}, -{88,-38,82}, -{88,-38,83}, -{88,-38,84}, -{88,-38,85}, -{88,-37,-18}, -{88,-37,-17}, -{88,-37,-16}, -{88,-37,-15}, -{88,-37,-14}, -{88,-37,-13}, -{88,-37,-12}, -{88,-37,-11}, -{88,-37,-10}, -{88,-37,-9}, -{88,-37,-8}, -{88,-37,-7}, -{88,-37,-6}, -{88,-37,-5}, -{88,-37,-4}, -{88,-37,-3}, -{88,-37,-2}, -{88,-37,-1}, -{88,-37,0}, -{88,-37,1}, -{88,-37,2}, -{88,-37,3}, -{88,-37,4}, -{88,-37,5}, -{88,-37,6}, -{88,-37,7}, -{88,-37,8}, -{88,-37,9}, -{88,-37,10}, -{88,-37,11}, -{88,-37,12}, -{88,-37,13}, -{88,-37,14}, -{88,-37,15}, -{88,-37,16}, -{88,-37,17}, -{88,-37,18}, -{88,-37,19}, -{88,-37,20}, -{88,-37,21}, -{88,-37,22}, -{88,-37,23}, -{88,-37,24}, -{88,-37,25}, -{88,-37,26}, -{88,-37,27}, -{88,-37,28}, -{88,-37,29}, -{88,-37,30}, -{88,-37,31}, -{88,-37,32}, -{88,-37,33}, -{88,-37,34}, -{88,-37,35}, -{88,-37,36}, -{88,-37,37}, -{88,-37,38}, -{88,-37,39}, -{88,-37,40}, -{88,-37,41}, -{88,-37,42}, -{88,-37,43}, -{88,-37,44}, -{88,-37,45}, -{88,-37,46}, -{88,-37,47}, -{88,-37,48}, -{88,-37,49}, -{88,-37,50}, -{88,-37,51}, -{88,-37,52}, -{88,-37,53}, -{88,-37,54}, -{88,-37,55}, -{88,-37,56}, -{88,-37,57}, -{88,-37,58}, -{88,-37,59}, -{88,-37,60}, -{88,-37,61}, -{88,-37,62}, -{88,-37,63}, -{88,-37,64}, -{88,-37,65}, -{88,-37,66}, -{88,-37,67}, -{88,-37,68}, -{88,-37,69}, -{88,-37,70}, -{88,-37,71}, -{88,-37,72}, -{88,-37,73}, -{88,-37,74}, -{88,-37,75}, -{88,-37,76}, -{88,-37,77}, -{88,-37,78}, -{88,-37,79}, -{88,-37,80}, -{88,-37,81}, -{88,-37,82}, -{88,-37,83}, -{88,-37,84}, -{88,-37,85}, -{88,-37,86}, -{88,-36,-18}, -{88,-36,-17}, -{88,-36,-16}, -{88,-36,-15}, -{88,-36,-14}, -{88,-36,-13}, -{88,-36,-12}, -{88,-36,-11}, -{88,-36,-10}, -{88,-36,-9}, -{88,-36,-8}, -{88,-36,-7}, -{88,-36,-6}, -{88,-36,-5}, -{88,-36,-4}, -{88,-36,-3}, -{88,-36,-2}, -{88,-36,-1}, -{88,-36,0}, -{88,-36,1}, -{88,-36,2}, -{88,-36,3}, -{88,-36,4}, -{88,-36,5}, -{88,-36,6}, -{88,-36,7}, -{88,-36,8}, -{88,-36,9}, -{88,-36,10}, -{88,-36,11}, -{88,-36,12}, -{88,-36,13}, -{88,-36,14}, -{88,-36,15}, -{88,-36,16}, -{88,-36,17}, -{88,-36,18}, -{88,-36,19}, -{88,-36,20}, -{88,-36,21}, -{88,-36,22}, -{88,-36,23}, -{88,-36,24}, -{88,-36,25}, -{88,-36,26}, -{88,-36,27}, -{88,-36,28}, -{88,-36,29}, -{88,-36,30}, -{88,-36,31}, -{88,-36,32}, -{88,-36,33}, -{88,-36,34}, -{88,-36,35}, -{88,-36,36}, -{88,-36,37}, -{88,-36,38}, -{88,-36,39}, -{88,-36,40}, -{88,-36,41}, -{88,-36,42}, -{88,-36,43}, -{88,-36,44}, -{88,-36,45}, -{88,-36,46}, -{88,-36,47}, -{88,-36,48}, -{88,-36,49}, -{88,-36,50}, -{88,-36,51}, -{88,-36,52}, -{88,-36,53}, -{88,-36,54}, -{88,-36,55}, -{88,-36,56}, -{88,-36,57}, -{88,-36,58}, -{88,-36,59}, -{88,-36,60}, -{88,-36,61}, -{88,-36,62}, -{88,-36,63}, -{88,-36,64}, -{88,-36,65}, -{88,-36,66}, -{88,-36,67}, -{88,-36,68}, -{88,-36,69}, -{88,-36,70}, -{88,-36,71}, -{88,-36,72}, -{88,-36,73}, -{88,-36,74}, -{88,-36,75}, -{88,-36,76}, -{88,-36,77}, -{88,-36,78}, -{88,-36,79}, -{88,-36,80}, -{88,-36,81}, -{88,-36,82}, -{88,-36,83}, -{88,-36,84}, -{88,-36,85}, -{88,-36,86}, -{88,-35,-18}, -{88,-35,-17}, -{88,-35,-16}, -{88,-35,-15}, -{88,-35,-14}, -{88,-35,-13}, -{88,-35,-12}, -{88,-35,-11}, -{88,-35,-10}, -{88,-35,-9}, -{88,-35,-8}, -{88,-35,-7}, -{88,-35,-6}, -{88,-35,-5}, -{88,-35,-4}, -{88,-35,-3}, -{88,-35,-2}, -{88,-35,-1}, -{88,-35,0}, -{88,-35,1}, -{88,-35,2}, -{88,-35,3}, -{88,-35,4}, -{88,-35,5}, -{88,-35,6}, -{88,-35,7}, -{88,-35,8}, -{88,-35,9}, -{88,-35,10}, -{88,-35,11}, -{88,-35,12}, -{88,-35,13}, -{88,-35,14}, -{88,-35,15}, -{88,-35,16}, -{88,-35,17}, -{88,-35,18}, -{88,-35,19}, -{88,-35,20}, -{88,-35,21}, -{88,-35,22}, -{88,-35,23}, -{88,-35,24}, -{88,-35,25}, -{88,-35,26}, -{88,-35,27}, -{88,-35,28}, -{88,-35,29}, -{88,-35,30}, -{88,-35,31}, -{88,-35,32}, -{88,-35,33}, -{88,-35,34}, -{88,-35,35}, -{88,-35,36}, -{88,-35,37}, -{88,-35,38}, -{88,-35,39}, -{88,-35,40}, -{88,-35,41}, -{88,-35,42}, -{88,-35,43}, -{88,-35,44}, -{88,-35,45}, -{88,-35,46}, -{88,-35,47}, -{88,-35,48}, -{88,-35,49}, -{88,-35,50}, -{88,-35,51}, -{88,-35,52}, -{88,-35,53}, -{88,-35,54}, -{88,-35,55}, -{88,-35,56}, -{88,-35,57}, -{88,-35,58}, -{88,-35,59}, -{88,-35,60}, -{88,-35,61}, -{88,-35,62}, -{88,-35,63}, -{88,-35,64}, -{88,-35,65}, -{88,-35,66}, -{88,-35,67}, -{88,-35,68}, -{88,-35,69}, -{88,-35,70}, -{88,-35,71}, -{88,-35,72}, -{88,-35,73}, -{88,-35,74}, -{88,-35,75}, -{88,-35,76}, -{88,-35,77}, -{88,-35,78}, -{88,-35,79}, -{88,-35,80}, -{88,-35,81}, -{88,-35,82}, -{88,-35,83}, -{88,-35,84}, -{88,-35,85}, -{88,-35,86}, -{88,-34,-18}, -{88,-34,-17}, -{88,-34,-16}, -{88,-34,-15}, -{88,-34,-14}, -{88,-34,-13}, -{88,-34,-12}, -{88,-34,-11}, -{88,-34,-10}, -{88,-34,-9}, -{88,-34,-8}, -{88,-34,-7}, -{88,-34,-6}, -{88,-34,-5}, -{88,-34,-4}, -{88,-34,-3}, -{88,-34,-2}, -{88,-34,-1}, -{88,-34,0}, -{88,-34,1}, -{88,-34,2}, -{88,-34,3}, -{88,-34,4}, -{88,-34,5}, -{88,-34,6}, -{88,-34,7}, -{88,-34,8}, -{88,-34,9}, -{88,-34,10}, -{88,-34,11}, -{88,-34,12}, -{88,-34,13}, -{88,-34,14}, -{88,-34,15}, -{88,-34,16}, -{88,-34,17}, -{88,-34,18}, -{88,-34,19}, -{88,-34,20}, -{88,-34,21}, -{88,-34,22}, -{88,-34,23}, -{88,-34,24}, -{88,-34,25}, -{88,-34,26}, -{88,-34,27}, -{88,-34,28}, -{88,-34,29}, -{88,-34,30}, -{88,-34,31}, -{88,-34,32}, -{88,-34,33}, -{88,-34,34}, -{88,-34,35}, -{88,-34,36}, -{88,-34,37}, -{88,-34,38}, -{88,-34,39}, -{88,-34,40}, -{88,-34,41}, -{88,-34,42}, -{88,-34,43}, -{88,-34,44}, -{88,-34,45}, -{88,-34,46}, -{88,-34,47}, -{88,-34,48}, -{88,-34,49}, -{88,-34,50}, -{88,-34,51}, -{88,-34,52}, -{88,-34,53}, -{88,-34,54}, -{88,-34,55}, -{88,-34,56}, -{88,-34,57}, -{88,-34,58}, -{88,-34,59}, -{88,-34,60}, -{88,-34,61}, -{88,-34,62}, -{88,-34,63}, -{88,-34,64}, -{88,-34,65}, -{88,-34,66}, -{88,-34,67}, -{88,-34,68}, -{88,-34,69}, -{88,-34,70}, -{88,-34,71}, -{88,-34,72}, -{88,-34,73}, -{88,-34,74}, -{88,-34,75}, -{88,-34,76}, -{88,-34,77}, -{88,-34,78}, -{88,-34,79}, -{88,-34,80}, -{88,-34,81}, -{88,-34,82}, -{88,-34,83}, -{88,-34,84}, -{88,-34,85}, -{88,-34,86}, -{88,-33,-18}, -{88,-33,-17}, -{88,-33,-16}, -{88,-33,-15}, -{88,-33,-14}, -{88,-33,-13}, -{88,-33,-12}, -{88,-33,-11}, -{88,-33,-10}, -{88,-33,-9}, -{88,-33,-8}, -{88,-33,-7}, -{88,-33,-6}, -{88,-33,-5}, -{88,-33,-4}, -{88,-33,-3}, -{88,-33,-2}, -{88,-33,-1}, -{88,-33,0}, -{88,-33,1}, -{88,-33,2}, -{88,-33,3}, -{88,-33,4}, -{88,-33,5}, -{88,-33,6}, -{88,-33,7}, -{88,-33,8}, -{88,-33,9}, -{88,-33,10}, -{88,-33,11}, -{88,-33,12}, -{88,-33,13}, -{88,-33,14}, -{88,-33,15}, -{88,-33,16}, -{88,-33,17}, -{88,-33,18}, -{88,-33,19}, -{88,-33,20}, -{88,-33,21}, -{88,-33,22}, -{88,-33,23}, -{88,-33,24}, -{88,-33,25}, -{88,-33,26}, -{88,-33,27}, -{88,-33,28}, -{88,-33,29}, -{88,-33,30}, -{88,-33,31}, -{88,-33,32}, -{88,-33,33}, -{88,-33,34}, -{88,-33,35}, -{88,-33,36}, -{88,-33,37}, -{88,-33,38}, -{88,-33,39}, -{88,-33,40}, -{88,-33,41}, -{88,-33,42}, -{88,-33,43}, -{88,-33,44}, -{88,-33,45}, -{88,-33,46}, -{88,-33,47}, -{88,-33,48}, -{88,-33,49}, -{88,-33,50}, -{88,-33,51}, -{88,-33,52}, -{88,-33,53}, -{88,-33,54}, -{88,-33,55}, -{88,-33,56}, -{88,-33,57}, -{88,-33,58}, -{88,-33,59}, -{88,-33,60}, -{88,-33,61}, -{88,-33,62}, -{88,-33,63}, -{88,-33,64}, -{88,-33,65}, -{88,-33,66}, -{88,-33,67}, -{88,-33,68}, -{88,-33,69}, -{88,-33,70}, -{88,-33,71}, -{88,-33,72}, -{88,-33,73}, -{88,-33,74}, -{88,-33,75}, -{88,-33,76}, -{88,-33,77}, -{88,-33,78}, -{88,-33,79}, -{88,-33,80}, -{88,-33,81}, -{88,-33,82}, -{88,-33,83}, -{88,-33,84}, -{88,-33,85}, -{88,-33,86}, -{88,-32,-18}, -{88,-32,-17}, -{88,-32,-16}, -{88,-32,-15}, -{88,-32,-14}, -{88,-32,-13}, -{88,-32,-12}, -{88,-32,-11}, -{88,-32,-10}, -{88,-32,-9}, -{88,-32,-8}, -{88,-32,-7}, -{88,-32,-6}, -{88,-32,-5}, -{88,-32,-4}, -{88,-32,-3}, -{88,-32,-2}, -{88,-32,-1}, -{88,-32,0}, -{88,-32,1}, -{88,-32,2}, -{88,-32,3}, -{88,-32,4}, -{88,-32,5}, -{88,-32,6}, -{88,-32,7}, -{88,-32,8}, -{88,-32,9}, -{88,-32,10}, -{88,-32,11}, -{88,-32,12}, -{88,-32,13}, -{88,-32,14}, -{88,-32,15}, -{88,-32,16}, -{88,-32,17}, -{88,-32,18}, -{88,-32,19}, -{88,-32,20}, -{88,-32,21}, -{88,-32,22}, -{88,-32,23}, -{88,-32,24}, -{88,-32,25}, -{88,-32,26}, -{88,-32,27}, -{88,-32,28}, -{88,-32,29}, -{88,-32,30}, -{88,-32,31}, -{88,-32,32}, -{88,-32,33}, -{88,-32,34}, -{88,-32,35}, -{88,-32,36}, -{88,-32,37}, -{88,-32,38}, -{88,-32,39}, -{88,-32,40}, -{88,-32,41}, -{88,-32,42}, -{88,-32,43}, -{88,-32,44}, -{88,-32,45}, -{88,-32,46}, -{88,-32,47}, -{88,-32,48}, -{88,-32,49}, -{88,-32,50}, -{88,-32,51}, -{88,-32,52}, -{88,-32,53}, -{88,-32,54}, -{88,-32,55}, -{88,-32,56}, -{88,-32,57}, -{88,-32,58}, -{88,-32,59}, -{88,-32,60}, -{88,-32,61}, -{88,-32,62}, -{88,-32,63}, -{88,-32,64}, -{88,-32,65}, -{88,-32,66}, -{88,-32,67}, -{88,-32,68}, -{88,-32,69}, -{88,-32,70}, -{88,-32,71}, -{88,-32,72}, -{88,-32,73}, -{88,-32,74}, -{88,-32,75}, -{88,-32,76}, -{88,-32,77}, -{88,-32,78}, -{88,-32,79}, -{88,-32,80}, -{88,-32,81}, -{88,-32,82}, -{88,-32,83}, -{88,-32,84}, -{88,-32,85}, -{88,-32,86}, -{88,-31,-18}, -{88,-31,-17}, -{88,-31,-16}, -{88,-31,-15}, -{88,-31,-14}, -{88,-31,-13}, -{88,-31,-12}, -{88,-31,-11}, -{88,-31,-10}, -{88,-31,-9}, -{88,-31,-8}, -{88,-31,-7}, -{88,-31,-6}, -{88,-31,-5}, -{88,-31,-4}, -{88,-31,-3}, -{88,-31,-2}, -{88,-31,-1}, -{88,-31,0}, -{88,-31,1}, -{88,-31,2}, -{88,-31,3}, -{88,-31,4}, -{88,-31,5}, -{88,-31,6}, -{88,-31,7}, -{88,-31,8}, -{88,-31,9}, -{88,-31,10}, -{88,-31,11}, -{88,-31,12}, -{88,-31,13}, -{88,-31,14}, -{88,-31,15}, -{88,-31,16}, -{88,-31,17}, -{88,-31,18}, -{88,-31,19}, -{88,-31,20}, -{88,-31,21}, -{88,-31,22}, -{88,-31,23}, -{88,-31,24}, -{88,-31,25}, -{88,-31,26}, -{88,-31,27}, -{88,-31,28}, -{88,-31,29}, -{88,-31,30}, -{88,-31,31}, -{88,-31,32}, -{88,-31,33}, -{88,-31,34}, -{88,-31,35}, -{88,-31,36}, -{88,-31,37}, -{88,-31,38}, -{88,-31,39}, -{88,-31,40}, -{88,-31,41}, -{88,-31,42}, -{88,-31,43}, -{88,-31,44}, -{88,-31,45}, -{88,-31,46}, -{88,-31,47}, -{88,-31,48}, -{88,-31,49}, -{88,-31,50}, -{88,-31,51}, -{88,-31,52}, -{88,-31,53}, -{88,-31,54}, -{88,-31,55}, -{88,-31,56}, -{88,-31,57}, -{88,-31,58}, -{88,-31,59}, -{88,-31,60}, -{88,-31,61}, -{88,-31,62}, -{88,-31,63}, -{88,-31,64}, -{88,-31,65}, -{88,-31,66}, -{88,-31,67}, -{88,-31,68}, -{88,-31,69}, -{88,-31,70}, -{88,-31,71}, -{88,-31,72}, -{88,-31,73}, -{88,-31,74}, -{88,-31,75}, -{88,-31,76}, -{88,-31,77}, -{88,-31,78}, -{88,-31,79}, -{88,-31,80}, -{88,-31,81}, -{88,-31,82}, -{88,-31,83}, -{88,-31,84}, -{88,-31,85}, -{88,-31,86}, -{88,-30,-18}, -{88,-30,-17}, -{88,-30,-16}, -{88,-30,-15}, -{88,-30,-14}, -{88,-30,-13}, -{88,-30,-12}, -{88,-30,-11}, -{88,-30,-10}, -{88,-30,-9}, -{88,-30,-8}, -{88,-30,-7}, -{88,-30,-6}, -{88,-30,-5}, -{88,-30,-4}, -{88,-30,-3}, -{88,-30,-2}, -{88,-30,-1}, -{88,-30,0}, -{88,-30,1}, -{88,-30,2}, -{88,-30,3}, -{88,-30,4}, -{88,-30,5}, -{88,-30,6}, -{88,-30,7}, -{88,-30,8}, -{88,-30,9}, -{88,-30,10}, -{88,-30,11}, -{88,-30,12}, -{88,-30,13}, -{88,-30,14}, -{88,-30,15}, -{88,-30,16}, -{88,-30,17}, -{88,-30,18}, -{88,-30,19}, -{88,-30,20}, -{88,-30,21}, -{88,-30,22}, -{88,-30,23}, -{88,-30,24}, -{88,-30,25}, -{88,-30,26}, -{88,-30,27}, -{88,-30,28}, -{88,-30,29}, -{88,-30,30}, -{88,-30,31}, -{88,-30,32}, -{88,-30,33}, -{88,-30,34}, -{88,-30,35}, -{88,-30,36}, -{88,-30,37}, -{88,-30,38}, -{88,-30,39}, -{88,-30,40}, -{88,-30,41}, -{88,-30,42}, -{88,-30,43}, -{88,-30,44}, -{88,-30,45}, -{88,-30,46}, -{88,-30,47}, -{88,-30,48}, -{88,-30,49}, -{88,-30,50}, -{88,-30,51}, -{88,-30,52}, -{88,-30,53}, -{88,-30,54}, -{88,-30,55}, -{88,-30,56}, -{88,-30,57}, -{88,-30,58}, -{88,-30,59}, -{88,-30,60}, -{88,-30,61}, -{88,-30,62}, -{88,-30,63}, -{88,-30,64}, -{88,-30,65}, -{88,-30,66}, -{88,-30,67}, -{88,-30,68}, -{88,-30,69}, -{88,-30,70}, -{88,-30,71}, -{88,-30,72}, -{88,-30,73}, -{88,-30,74}, -{88,-30,75}, -{88,-30,76}, -{88,-30,77}, -{88,-30,78}, -{88,-30,79}, -{88,-30,80}, -{88,-30,81}, -{88,-30,82}, -{88,-30,83}, -{88,-30,84}, -{88,-30,85}, -{88,-30,86}, -{88,-29,-18}, -{88,-29,-17}, -{88,-29,-16}, -{88,-29,-15}, -{88,-29,-14}, -{88,-29,-13}, -{88,-29,-12}, -{88,-29,-11}, -{88,-29,-10}, -{88,-29,-9}, -{88,-29,-8}, -{88,-29,-7}, -{88,-29,-6}, -{88,-29,-5}, -{88,-29,-4}, -{88,-29,-3}, -{88,-29,-2}, -{88,-29,-1}, -{88,-29,0}, -{88,-29,1}, -{88,-29,2}, -{88,-29,3}, -{88,-29,4}, -{88,-29,5}, -{88,-29,6}, -{88,-29,7}, -{88,-29,8}, -{88,-29,9}, -{88,-29,10}, -{88,-29,11}, -{88,-29,12}, -{88,-29,13}, -{88,-29,14}, -{88,-29,15}, -{88,-29,16}, -{88,-29,17}, -{88,-29,18}, -{88,-29,19}, -{88,-29,20}, -{88,-29,21}, -{88,-29,22}, -{88,-29,23}, -{88,-29,24}, -{88,-29,25}, -{88,-29,26}, -{88,-29,27}, -{88,-29,28}, -{88,-29,29}, -{88,-29,30}, -{88,-29,31}, -{88,-29,32}, -{88,-29,33}, -{88,-29,34}, -{88,-29,35}, -{88,-29,36}, -{88,-29,37}, -{88,-29,38}, -{88,-29,39}, -{88,-29,40}, -{88,-29,41}, -{88,-29,42}, -{88,-29,43}, -{88,-29,44}, -{88,-29,45}, -{88,-29,46}, -{88,-29,47}, -{88,-29,48}, -{88,-29,49}, -{88,-29,50}, -{88,-29,51}, -{88,-29,52}, -{88,-29,53}, -{88,-29,54}, -{88,-29,55}, -{88,-29,56}, -{88,-29,57}, -{88,-29,58}, -{88,-29,59}, -{88,-29,60}, -{88,-29,61}, -{88,-29,62}, -{88,-29,63}, -{88,-29,64}, -{88,-29,65}, -{88,-29,66}, -{88,-29,67}, -{88,-29,68}, -{88,-29,69}, -{88,-29,70}, -{88,-29,71}, -{88,-29,72}, -{88,-29,73}, -{88,-29,74}, -{88,-29,75}, -{88,-29,76}, -{88,-29,77}, -{88,-29,78}, -{88,-29,79}, -{88,-29,80}, -{88,-29,81}, -{88,-29,82}, -{88,-29,83}, -{88,-29,84}, -{88,-29,85}, -{88,-29,86}, -{88,-28,-18}, -{88,-28,-17}, -{88,-28,-16}, -{88,-28,-15}, -{88,-28,-14}, -{88,-28,-13}, -{88,-28,-12}, -{88,-28,-11}, -{88,-28,-10}, -{88,-28,-9}, -{88,-28,-8}, -{88,-28,-7}, -{88,-28,-6}, -{88,-28,-5}, -{88,-28,-4}, -{88,-28,-3}, -{88,-28,-2}, -{88,-28,-1}, -{88,-28,0}, -{88,-28,1}, -{88,-28,2}, -{88,-28,3}, -{88,-28,4}, -{88,-28,5}, -{88,-28,6}, -{88,-28,7}, -{88,-28,8}, -{88,-28,9}, -{88,-28,10}, -{88,-28,11}, -{88,-28,12}, -{88,-28,13}, -{88,-28,14}, -{88,-28,15}, -{88,-28,16}, -{88,-28,17}, -{88,-28,18}, -{88,-28,19}, -{88,-28,20}, -{88,-28,21}, -{88,-28,22}, -{88,-28,23}, -{88,-28,24}, -{88,-28,25}, -{88,-28,26}, -{88,-28,27}, -{88,-28,28}, -{88,-28,29}, -{88,-28,30}, -{88,-28,31}, -{88,-28,32}, -{88,-28,33}, -{88,-28,34}, -{88,-28,35}, -{88,-28,36}, -{88,-28,37}, -{88,-28,38}, -{88,-28,39}, -{88,-28,40}, -{88,-28,41}, -{88,-28,42}, -{88,-28,43}, -{88,-28,44}, -{88,-28,45}, -{88,-28,46}, -{88,-28,47}, -{88,-28,48}, -{88,-28,49}, -{88,-28,50}, -{88,-28,51}, -{88,-28,52}, -{88,-28,53}, -{88,-28,54}, -{88,-28,55}, -{88,-28,56}, -{88,-28,57}, -{88,-28,58}, -{88,-28,59}, -{88,-28,60}, -{88,-28,61}, -{88,-28,62}, -{88,-28,63}, -{88,-28,64}, -{88,-28,65}, -{88,-28,66}, -{88,-28,67}, -{88,-28,68}, -{88,-28,69}, -{88,-28,70}, -{88,-28,71}, -{88,-28,72}, -{88,-28,73}, -{88,-28,74}, -{88,-28,75}, -{88,-28,76}, -{88,-28,77}, -{88,-28,78}, -{88,-28,79}, -{88,-28,80}, -{88,-28,81}, -{88,-28,82}, -{88,-28,83}, -{88,-28,84}, -{88,-28,85}, -{88,-28,86}, -{88,-27,-18}, -{88,-27,-17}, -{88,-27,-16}, -{88,-27,-15}, -{88,-27,-14}, -{88,-27,-13}, -{88,-27,-12}, -{88,-27,-11}, -{88,-27,-10}, -{88,-27,-9}, -{88,-27,-8}, -{88,-27,-7}, -{88,-27,-6}, -{88,-27,-5}, -{88,-27,-4}, -{88,-27,-3}, -{88,-27,-2}, -{88,-27,-1}, -{88,-27,0}, -{88,-27,1}, -{88,-27,2}, -{88,-27,3}, -{88,-27,4}, -{88,-27,5}, -{88,-27,6}, -{88,-27,7}, -{88,-27,8}, -{88,-27,9}, -{88,-27,10}, -{88,-27,11}, -{88,-27,12}, -{88,-27,13}, -{88,-27,14}, -{88,-27,15}, -{88,-27,16}, -{88,-27,17}, -{88,-27,18}, -{88,-27,19}, -{88,-27,20}, -{88,-27,21}, -{88,-27,22}, -{88,-27,23}, -{88,-27,24}, -{88,-27,25}, -{88,-27,26}, -{88,-27,27}, -{88,-27,28}, -{88,-27,29}, -{88,-27,30}, -{88,-27,31}, -{88,-27,32}, -{88,-27,33}, -{88,-27,34}, -{88,-27,35}, -{88,-27,36}, -{88,-27,37}, -{88,-27,38}, -{88,-27,39}, -{88,-27,40}, -{88,-27,41}, -{88,-27,42}, -{88,-27,43}, -{88,-27,44}, -{88,-27,45}, -{88,-27,46}, -{88,-27,47}, -{88,-27,48}, -{88,-27,49}, -{88,-27,50}, -{88,-27,51}, -{88,-27,52}, -{88,-27,53}, -{88,-27,54}, -{88,-27,55}, -{88,-27,56}, -{88,-27,57}, -{88,-27,58}, -{88,-27,59}, -{88,-27,60}, -{88,-27,61}, -{88,-27,62}, -{88,-27,63}, -{88,-27,64}, -{88,-27,65}, -{88,-27,66}, -{88,-27,67}, -{88,-27,68}, -{88,-27,69}, -{88,-27,70}, -{88,-27,71}, -{88,-27,72}, -{88,-27,73}, -{88,-27,74}, -{88,-27,75}, -{88,-27,76}, -{88,-27,77}, -{88,-27,78}, -{88,-27,79}, -{88,-27,80}, -{88,-27,81}, -{88,-27,82}, -{88,-27,83}, -{88,-27,84}, -{88,-27,85}, -{88,-27,86}, -{88,-26,-18}, -{88,-26,-17}, -{88,-26,-16}, -{88,-26,-15}, -{88,-26,-14}, -{88,-26,-13}, -{88,-26,-12}, -{88,-26,-11}, -{88,-26,-10}, -{88,-26,-9}, -{88,-26,-8}, -{88,-26,-7}, -{88,-26,-6}, -{88,-26,-5}, -{88,-26,-4}, -{88,-26,-3}, -{88,-26,-2}, -{88,-26,-1}, -{88,-26,0}, -{88,-26,1}, -{88,-26,2}, -{88,-26,3}, -{88,-26,4}, -{88,-26,5}, -{88,-26,6}, -{88,-26,7}, -{88,-26,8}, -{88,-26,9}, -{88,-26,10}, -{88,-26,11}, -{88,-26,12}, -{88,-26,13}, -{88,-26,14}, -{88,-26,15}, -{88,-26,16}, -{88,-26,17}, -{88,-26,18}, -{88,-26,19}, -{88,-26,20}, -{88,-26,21}, -{88,-26,22}, -{88,-26,23}, -{88,-26,24}, -{88,-26,25}, -{88,-26,26}, -{88,-26,27}, -{88,-26,28}, -{88,-26,29}, -{88,-26,30}, -{88,-26,31}, -{88,-26,32}, -{88,-26,33}, -{88,-26,34}, -{88,-26,35}, -{88,-26,36}, -{88,-26,37}, -{88,-26,38}, -{88,-26,39}, -{88,-26,40}, -{88,-26,41}, -{88,-26,42}, -{88,-26,43}, -{88,-26,44}, -{88,-26,45}, -{88,-26,46}, -{88,-26,47}, -{88,-26,48}, -{88,-26,49}, -{88,-26,50}, -{88,-26,51}, -{88,-26,52}, -{88,-26,53}, -{88,-26,54}, -{88,-26,55}, -{88,-26,56}, -{88,-26,57}, -{88,-26,58}, -{88,-26,59}, -{88,-26,60}, -{88,-26,61}, -{88,-26,62}, -{88,-26,63}, -{88,-26,64}, -{88,-26,65}, -{88,-26,66}, -{88,-26,67}, -{88,-26,68}, -{88,-26,69}, -{88,-26,70}, -{88,-26,71}, -{88,-26,72}, -{88,-26,73}, -{88,-26,74}, -{88,-26,75}, -{88,-26,76}, -{88,-26,77}, -{88,-26,78}, -{88,-26,79}, -{88,-26,80}, -{88,-26,81}, -{88,-26,82}, -{88,-26,83}, -{88,-26,84}, -{88,-26,85}, -{88,-26,86}, -{88,-25,-18}, -{88,-25,-17}, -{88,-25,-16}, -{88,-25,-15}, -{88,-25,-14}, -{88,-25,-13}, -{88,-25,-12}, -{88,-25,-11}, -{88,-25,-10}, -{88,-25,-9}, -{88,-25,-8}, -{88,-25,-7}, -{88,-25,-6}, -{88,-25,-5}, -{88,-25,-4}, -{88,-25,-3}, -{88,-25,-2}, -{88,-25,-1}, -{88,-25,0}, -{88,-25,1}, -{88,-25,2}, -{88,-25,3}, -{88,-25,4}, -{88,-25,5}, -{88,-25,6}, -{88,-25,7}, -{88,-25,8}, -{88,-25,9}, -{88,-25,10}, -{88,-25,11}, -{88,-25,12}, -{88,-25,13}, -{88,-25,14}, -{88,-25,15}, -{88,-25,16}, -{88,-25,17}, -{88,-25,18}, -{88,-25,19}, -{88,-25,20}, -{88,-25,21}, -{88,-25,22}, -{88,-25,23}, -{88,-25,24}, -{88,-25,25}, -{88,-25,26}, -{88,-25,27}, -{88,-25,28}, -{88,-25,29}, -{88,-25,30}, -{88,-25,31}, -{88,-25,32}, -{88,-25,33}, -{88,-25,34}, -{88,-25,35}, -{88,-25,36}, -{88,-25,37}, -{88,-25,38}, -{88,-25,39}, -{88,-25,40}, -{88,-25,41}, -{88,-25,42}, -{88,-25,43}, -{88,-25,44}, -{88,-25,45}, -{88,-25,46}, -{88,-25,47}, -{88,-25,48}, -{88,-25,49}, -{88,-25,50}, -{88,-25,51}, -{88,-25,52}, -{88,-25,53}, -{88,-25,54}, -{88,-25,55}, -{88,-25,56}, -{88,-25,57}, -{88,-25,58}, -{88,-25,59}, -{88,-25,60}, -{88,-25,61}, -{88,-25,62}, -{88,-25,63}, -{88,-25,64}, -{88,-25,65}, -{88,-25,66}, -{88,-25,67}, -{88,-25,68}, -{88,-25,69}, -{88,-25,70}, -{88,-25,71}, -{88,-25,72}, -{88,-25,73}, -{88,-25,74}, -{88,-25,75}, -{88,-25,76}, -{88,-25,77}, -{88,-25,78}, -{88,-25,79}, -{88,-25,80}, -{88,-25,81}, -{88,-25,82}, -{88,-25,83}, -{88,-25,84}, -{88,-25,85}, -{88,-25,86}, -{88,-24,-18}, -{88,-24,-17}, -{88,-24,-16}, -{88,-24,-15}, -{88,-24,-14}, -{88,-24,-13}, -{88,-24,-12}, -{88,-24,-11}, -{88,-24,-10}, -{88,-24,-9}, -{88,-24,-8}, -{88,-24,-7}, -{88,-24,-6}, -{88,-24,-5}, -{88,-24,-4}, -{88,-24,-3}, -{88,-24,-2}, -{88,-24,-1}, -{88,-24,0}, -{88,-24,1}, -{88,-24,2}, -{88,-24,3}, -{88,-24,4}, -{88,-24,5}, -{88,-24,6}, -{88,-24,7}, -{88,-24,8}, -{88,-24,9}, -{88,-24,10}, -{88,-24,11}, -{88,-24,12}, -{88,-24,13}, -{88,-24,14}, -{88,-24,15}, -{88,-24,16}, -{88,-24,17}, -{88,-24,18}, -{88,-24,19}, -{88,-24,20}, -{88,-24,21}, -{88,-24,22}, -{88,-24,23}, -{88,-24,24}, -{88,-24,25}, -{88,-24,26}, -{88,-24,27}, -{88,-24,28}, -{88,-24,29}, -{88,-24,30}, -{88,-24,31}, -{88,-24,32}, -{88,-24,33}, -{88,-24,34}, -{88,-24,35}, -{88,-24,36}, -{88,-24,37}, -{88,-24,38}, -{88,-24,39}, -{88,-24,40}, -{88,-24,41}, -{88,-24,42}, -{88,-24,43}, -{88,-24,44}, -{88,-24,45}, -{88,-24,46}, -{88,-24,47}, -{88,-24,48}, -{88,-24,49}, -{88,-24,50}, -{88,-24,51}, -{88,-24,52}, -{88,-24,53}, -{88,-24,54}, -{88,-24,55}, -{88,-24,56}, -{88,-24,57}, -{88,-24,58}, -{88,-24,59}, -{88,-24,60}, -{88,-24,61}, -{88,-24,62}, -{88,-24,63}, -{88,-24,64}, -{88,-24,65}, -{88,-24,66}, -{88,-24,67}, -{88,-24,68}, -{88,-24,69}, -{88,-24,70}, -{88,-24,71}, -{88,-24,72}, -{88,-24,73}, -{88,-24,74}, -{88,-24,75}, -{88,-24,76}, -{88,-24,77}, -{88,-24,78}, -{88,-24,79}, -{88,-24,80}, -{88,-24,81}, -{88,-24,82}, -{88,-24,83}, -{88,-24,84}, -{88,-24,85}, -{88,-24,86}, -{88,-23,-18}, -{88,-23,-17}, -{88,-23,-16}, -{88,-23,-15}, -{88,-23,-14}, -{88,-23,-13}, -{88,-23,-12}, -{88,-23,-11}, -{88,-23,-10}, -{88,-23,-9}, -{88,-23,-8}, -{88,-23,-7}, -{88,-23,-6}, -{88,-23,-5}, -{88,-23,-4}, -{88,-23,-3}, -{88,-23,-2}, -{88,-23,-1}, -{88,-23,0}, -{88,-23,1}, -{88,-23,2}, -{88,-23,3}, -{88,-23,4}, -{88,-23,5}, -{88,-23,6}, -{88,-23,7}, -{88,-23,8}, -{88,-23,9}, -{88,-23,10}, -{88,-23,11}, -{88,-23,12}, -{88,-23,13}, -{88,-23,14}, -{88,-23,15}, -{88,-23,16}, -{88,-23,17}, -{88,-23,18}, -{88,-23,19}, -{88,-23,20}, -{88,-23,21}, -{88,-23,22}, -{88,-23,23}, -{88,-23,24}, -{88,-23,25}, -{88,-23,26}, -{88,-23,27}, -{88,-23,28}, -{88,-23,29}, -{88,-23,30}, -{88,-23,31}, -{88,-23,32}, -{88,-23,33}, -{88,-23,34}, -{88,-23,35}, -{88,-23,36}, -{88,-23,37}, -{88,-23,38}, -{88,-23,39}, -{88,-23,40}, -{88,-23,41}, -{88,-23,42}, -{88,-23,43}, -{88,-23,44}, -{88,-23,45}, -{88,-23,46}, -{88,-23,47}, -{88,-23,48}, -{88,-23,49}, -{88,-23,50}, -{88,-23,51}, -{88,-23,52}, -{88,-23,53}, -{88,-23,54}, -{88,-23,55}, -{88,-23,56}, -{88,-23,57}, -{88,-23,58}, -{88,-23,59}, -{88,-23,60}, -{88,-23,61}, -{88,-23,62}, -{88,-23,63}, -{88,-23,64}, -{88,-23,65}, -{88,-23,66}, -{88,-23,67}, -{88,-23,68}, -{88,-23,69}, -{88,-23,70}, -{88,-23,71}, -{88,-23,72}, -{88,-23,73}, -{88,-23,74}, -{88,-23,75}, -{88,-23,76}, -{88,-23,77}, -{88,-23,78}, -{88,-23,79}, -{88,-23,80}, -{88,-23,81}, -{88,-23,82}, -{88,-23,83}, -{88,-23,84}, -{88,-23,85}, -{88,-23,86}, -{88,-22,-18}, -{88,-22,-17}, -{88,-22,-16}, -{88,-22,-15}, -{88,-22,-14}, -{88,-22,-13}, -{88,-22,-12}, -{88,-22,-11}, -{88,-22,-10}, -{88,-22,-9}, -{88,-22,-8}, -{88,-22,-7}, -{88,-22,-6}, -{88,-22,-5}, -{88,-22,-4}, -{88,-22,-3}, -{88,-22,-2}, -{88,-22,-1}, -{88,-22,0}, -{88,-22,1}, -{88,-22,2}, -{88,-22,3}, -{88,-22,4}, -{88,-22,5}, -{88,-22,6}, -{88,-22,7}, -{88,-22,8}, -{88,-22,9}, -{88,-22,10}, -{88,-22,11}, -{88,-22,12}, -{88,-22,13}, -{88,-22,14}, -{88,-22,15}, -{88,-22,16}, -{88,-22,17}, -{88,-22,18}, -{88,-22,19}, -{88,-22,20}, -{88,-22,21}, -{88,-22,22}, -{88,-22,23}, -{88,-22,24}, -{88,-22,25}, -{88,-22,26}, -{88,-22,27}, -{88,-22,28}, -{88,-22,29}, -{88,-22,30}, -{88,-22,31}, -{88,-22,32}, -{88,-22,33}, -{88,-22,34}, -{88,-22,35}, -{88,-22,36}, -{88,-22,37}, -{88,-22,38}, -{88,-22,39}, -{88,-22,40}, -{88,-22,41}, -{88,-22,42}, -{88,-22,43}, -{88,-22,44}, -{88,-22,45}, -{88,-22,46}, -{88,-22,47}, -{88,-22,48}, -{88,-22,49}, -{88,-22,50}, -{88,-22,51}, -{88,-22,52}, -{88,-22,53}, -{88,-22,54}, -{88,-22,55}, -{88,-22,56}, -{88,-22,57}, -{88,-22,58}, -{88,-22,59}, -{88,-22,60}, -{88,-22,61}, -{88,-22,62}, -{88,-22,63}, -{88,-22,64}, -{88,-22,65}, -{88,-22,66}, -{88,-22,67}, -{88,-22,68}, -{88,-22,69}, -{88,-22,70}, -{88,-22,71}, -{88,-22,72}, -{88,-22,73}, -{88,-22,74}, -{88,-22,75}, -{88,-22,76}, -{88,-22,77}, -{88,-22,78}, -{88,-22,79}, -{88,-22,80}, -{88,-22,81}, -{88,-22,82}, -{88,-22,83}, -{88,-22,84}, -{88,-22,85}, -{88,-22,86}, -{88,-21,-18}, -{88,-21,-17}, -{88,-21,-16}, -{88,-21,-15}, -{88,-21,-14}, -{88,-21,-13}, -{88,-21,-12}, -{88,-21,-11}, -{88,-21,-10}, -{88,-21,-9}, -{88,-21,-8}, -{88,-21,-7}, -{88,-21,-6}, -{88,-21,-5}, -{88,-21,-4}, -{88,-21,-3}, -{88,-21,-2}, -{88,-21,-1}, -{88,-21,0}, -{88,-21,1}, -{88,-21,2}, -{88,-21,3}, -{88,-21,4}, -{88,-21,5}, -{88,-21,6}, -{88,-21,7}, -{88,-21,8}, -{88,-21,9}, -{88,-21,10}, -{88,-21,11}, -{88,-21,12}, -{88,-21,13}, -{88,-21,14}, -{88,-21,15}, -{88,-21,16}, -{88,-21,17}, -{88,-21,18}, -{88,-21,19}, -{88,-21,20}, -{88,-21,21}, -{88,-21,22}, -{88,-21,23}, -{88,-21,24}, -{88,-21,25}, -{88,-21,26}, -{88,-21,27}, -{88,-21,28}, -{88,-21,29}, -{88,-21,30}, -{88,-21,31}, -{88,-21,32}, -{88,-21,33}, -{88,-21,34}, -{88,-21,35}, -{88,-21,36}, -{88,-21,37}, -{88,-21,38}, -{88,-21,39}, -{88,-21,40}, -{88,-21,41}, -{88,-21,42}, -{88,-21,43}, -{88,-21,44}, -{88,-21,45}, -{88,-21,46}, -{88,-21,47}, -{88,-21,48}, -{88,-21,49}, -{88,-21,50}, -{88,-21,51}, -{88,-21,52}, -{88,-21,53}, -{88,-21,54}, -{88,-21,55}, -{88,-21,56}, -{88,-21,57}, -{88,-21,58}, -{88,-21,59}, -{88,-21,60}, -{88,-21,61}, -{88,-21,62}, -{88,-21,63}, -{88,-21,64}, -{88,-21,65}, -{88,-21,66}, -{88,-21,67}, -{88,-21,68}, -{88,-21,69}, -{88,-21,70}, -{88,-21,71}, -{88,-21,72}, -{88,-21,73}, -{88,-21,74}, -{88,-21,75}, -{88,-21,76}, -{88,-21,77}, -{88,-21,78}, -{88,-21,79}, -{88,-21,80}, -{88,-21,81}, -{88,-21,82}, -{88,-21,83}, -{88,-21,84}, -{88,-21,85}, -{88,-21,86}, -{88,-20,-18}, -{88,-20,-17}, -{88,-20,-16}, -{88,-20,-15}, -{88,-20,-14}, -{88,-20,-13}, -{88,-20,-12}, -{88,-20,-11}, -{88,-20,-10}, -{88,-20,-9}, -{88,-20,-8}, -{88,-20,-7}, -{88,-20,-6}, -{88,-20,-5}, -{88,-20,-4}, -{88,-20,-3}, -{88,-20,-2}, -{88,-20,-1}, -{88,-20,0}, -{88,-20,1}, -{88,-20,2}, -{88,-20,3}, -{88,-20,4}, -{88,-20,5}, -{88,-20,6}, -{88,-20,7}, -{88,-20,8}, -{88,-20,9}, -{88,-20,10}, -{88,-20,11}, -{88,-20,12}, -{88,-20,13}, -{88,-20,14}, -{88,-20,15}, -{88,-20,16}, -{88,-20,17}, -{88,-20,18}, -{88,-20,19}, -{88,-20,20}, -{88,-20,21}, -{88,-20,22}, -{88,-20,23}, -{88,-20,24}, -{88,-20,25}, -{88,-20,26}, -{88,-20,27}, -{88,-20,28}, -{88,-20,29}, -{88,-20,30}, -{88,-20,31}, -{88,-20,32}, -{88,-20,33}, -{88,-20,34}, -{88,-20,35}, -{88,-20,36}, -{88,-20,37}, -{88,-20,38}, -{88,-20,39}, -{88,-20,40}, -{88,-20,41}, -{88,-20,42}, -{88,-20,43}, -{88,-20,44}, -{88,-20,45}, -{88,-20,46}, -{88,-20,47}, -{88,-20,48}, -{88,-20,49}, -{88,-20,50}, -{88,-20,51}, -{88,-20,52}, -{88,-20,53}, -{88,-20,54}, -{88,-20,55}, -{88,-20,56}, -{88,-20,57}, -{88,-20,58}, -{88,-20,59}, -{88,-20,60}, -{88,-20,61}, -{88,-20,62}, -{88,-20,63}, -{88,-20,64}, -{88,-20,65}, -{88,-20,66}, -{88,-20,67}, -{88,-20,68}, -{88,-20,69}, -{88,-20,70}, -{88,-20,71}, -{88,-20,72}, -{88,-20,73}, -{88,-20,74}, -{88,-20,75}, -{88,-20,76}, -{88,-20,77}, -{88,-20,78}, -{88,-20,79}, -{88,-20,80}, -{88,-20,81}, -{88,-20,82}, -{88,-20,83}, -{88,-20,84}, -{88,-20,85}, -{88,-20,86}, -{88,-20,87}, -{88,-19,-18}, -{88,-19,-17}, -{88,-19,-16}, -{88,-19,-15}, -{88,-19,-14}, -{88,-19,-13}, -{88,-19,-12}, -{88,-19,-11}, -{88,-19,-10}, -{88,-19,-9}, -{88,-19,-8}, -{88,-19,-7}, -{88,-19,-6}, -{88,-19,-5}, -{88,-19,-4}, -{88,-19,-3}, -{88,-19,-2}, -{88,-19,-1}, -{88,-19,0}, -{88,-19,1}, -{88,-19,2}, -{88,-19,3}, -{88,-19,4}, -{88,-19,5}, -{88,-19,6}, -{88,-19,7}, -{88,-19,8}, -{88,-19,9}, -{88,-19,10}, -{88,-19,11}, -{88,-19,12}, -{88,-19,13}, -{88,-19,14}, -{88,-19,15}, -{88,-19,16}, -{88,-19,17}, -{88,-19,18}, -{88,-19,19}, -{88,-19,20}, -{88,-19,21}, -{88,-19,22}, -{88,-19,23}, -{88,-19,24}, -{88,-19,25}, -{88,-19,26}, -{88,-19,27}, -{88,-19,28}, -{88,-19,29}, -{88,-19,30}, -{88,-19,31}, -{88,-19,32}, -{88,-19,33}, -{88,-19,34}, -{88,-19,35}, -{88,-19,36}, -{88,-19,37}, -{88,-19,38}, -{88,-19,39}, -{88,-19,40}, -{88,-19,41}, -{88,-19,42}, -{88,-19,43}, -{88,-19,44}, -{88,-19,45}, -{88,-19,46}, -{88,-19,47}, -{88,-19,48}, -{88,-19,49}, -{88,-19,50}, -{88,-19,51}, -{88,-19,52}, -{88,-19,53}, -{88,-19,54}, -{88,-19,55}, -{88,-19,56}, -{88,-19,57}, -{88,-19,58}, -{88,-19,59}, -{88,-19,60}, -{88,-19,61}, -{88,-19,62}, -{88,-19,63}, -{88,-19,64}, -{88,-19,65}, -{88,-19,66}, -{88,-19,67}, -{88,-19,68}, -{88,-19,69}, -{88,-19,70}, -{88,-19,71}, -{88,-19,72}, -{88,-19,73}, -{88,-19,74}, -{88,-19,75}, -{88,-19,76}, -{88,-19,77}, -{88,-19,78}, -{88,-19,79}, -{88,-19,80}, -{88,-19,81}, -{88,-19,82}, -{88,-19,83}, -{88,-19,84}, -{88,-19,85}, -{88,-19,86}, -{88,-19,87}, -{88,-18,-18}, -{88,-18,-17}, -{88,-18,-16}, -{88,-18,-15}, -{88,-18,-14}, -{88,-18,-13}, -{88,-18,-12}, -{88,-18,-11}, -{88,-18,-10}, -{88,-18,-9}, -{88,-18,-8}, -{88,-18,-7}, -{88,-18,-6}, -{88,-18,-5}, -{88,-18,-4}, -{88,-18,-3}, -{88,-18,-2}, -{88,-18,-1}, -{88,-18,0}, -{88,-18,1}, -{88,-18,2}, -{88,-18,3}, -{88,-18,4}, -{88,-18,5}, -{88,-18,6}, -{88,-18,7}, -{88,-18,8}, -{88,-18,9}, -{88,-18,10}, -{88,-18,11}, -{88,-18,12}, -{88,-18,13}, -{88,-18,14}, -{88,-18,15}, -{88,-18,16}, -{88,-18,17}, -{88,-18,18}, -{88,-18,19}, -{88,-18,20}, -{88,-18,21}, -{88,-18,22}, -{88,-18,23}, -{88,-18,24}, -{88,-18,25}, -{88,-18,26}, -{88,-18,27}, -{88,-18,28}, -{88,-18,29}, -{88,-18,30}, -{88,-18,31}, -{88,-18,32}, -{88,-18,33}, -{88,-18,34}, -{88,-18,35}, -{88,-18,36}, -{88,-18,37}, -{88,-18,38}, -{88,-18,39}, -{88,-18,40}, -{88,-18,41}, -{88,-18,42}, -{88,-18,43}, -{88,-18,44}, -{88,-18,45}, -{88,-18,46}, -{88,-18,47}, -{88,-18,48}, -{88,-18,49}, -{88,-18,50}, -{88,-18,51}, -{88,-18,52}, -{88,-18,53}, -{88,-18,54}, -{88,-18,55}, -{88,-18,56}, -{88,-18,57}, -{88,-18,58}, -{88,-18,59}, -{88,-18,60}, -{88,-18,61}, -{88,-18,62}, -{88,-18,63}, -{88,-18,64}, -{88,-18,65}, -{88,-18,66}, -{88,-18,67}, -{88,-18,68}, -{88,-18,69}, -{88,-18,70}, -{88,-18,71}, -{88,-18,72}, -{88,-18,73}, -{88,-18,74}, -{88,-18,75}, -{88,-18,76}, -{88,-18,77}, -{88,-18,78}, -{88,-18,79}, -{88,-18,80}, -{88,-18,81}, -{88,-18,82}, -{88,-18,83}, -{88,-18,84}, -{88,-18,85}, -{88,-18,86}, -{88,-18,87}, -{88,-17,-18}, -{88,-17,-17}, -{88,-17,-16}, -{88,-17,-15}, -{88,-17,-14}, -{88,-17,-13}, -{88,-17,-12}, -{88,-17,-11}, -{88,-17,-10}, -{88,-17,-9}, -{88,-17,-8}, -{88,-17,-7}, -{88,-17,-6}, -{88,-17,-5}, -{88,-17,-4}, -{88,-17,-3}, -{88,-17,-2}, -{88,-17,-1}, -{88,-17,0}, -{88,-17,1}, -{88,-17,2}, -{88,-17,3}, -{88,-17,4}, -{88,-17,5}, -{88,-17,6}, -{88,-17,7}, -{88,-17,8}, -{88,-17,9}, -{88,-17,10}, -{88,-17,11}, -{88,-17,12}, -{88,-17,13}, -{88,-17,14}, -{88,-17,15}, -{88,-17,16}, -{88,-17,17}, -{88,-17,18}, -{88,-17,19}, -{88,-17,20}, -{88,-17,21}, -{88,-17,22}, -{88,-17,23}, -{88,-17,24}, -{88,-17,25}, -{88,-17,26}, -{88,-17,27}, -{88,-17,28}, -{88,-17,29}, -{88,-17,30}, -{88,-17,31}, -{88,-17,32}, -{88,-17,33}, -{88,-17,34}, -{88,-17,35}, -{88,-17,36}, -{88,-17,37}, -{88,-17,38}, -{88,-17,39}, -{88,-17,40}, -{88,-17,41}, -{88,-17,42}, -{88,-17,43}, -{88,-17,44}, -{88,-17,45}, -{88,-17,46}, -{88,-17,47}, -{88,-17,48}, -{88,-17,49}, -{88,-17,50}, -{88,-17,51}, -{88,-17,52}, -{88,-17,53}, -{88,-17,54}, -{88,-17,55}, -{88,-17,56}, -{88,-17,57}, -{88,-17,58}, -{88,-17,59}, -{88,-17,60}, -{88,-17,61}, -{88,-17,62}, -{88,-17,63}, -{88,-17,64}, -{88,-17,65}, -{88,-17,66}, -{88,-17,67}, -{88,-17,68}, -{88,-17,69}, -{88,-17,70}, -{88,-17,71}, -{88,-17,72}, -{88,-17,73}, -{88,-17,74}, -{88,-17,75}, -{88,-17,76}, -{88,-17,77}, -{88,-17,78}, -{88,-17,79}, -{88,-17,80}, -{88,-17,81}, -{88,-17,82}, -{88,-17,83}, -{88,-17,84}, -{88,-17,85}, -{88,-17,86}, -{88,-17,87}, -{88,-16,-18}, -{88,-16,-17}, -{88,-16,-16}, -{88,-16,-15}, -{88,-16,-14}, -{88,-16,-13}, -{88,-16,-12}, -{88,-16,-11}, -{88,-16,-10}, -{88,-16,-9}, -{88,-16,-8}, -{88,-16,-7}, -{88,-16,-6}, -{88,-16,-5}, -{88,-16,-4}, -{88,-16,-3}, -{88,-16,-2}, -{88,-16,-1}, -{88,-16,0}, -{88,-16,1}, -{88,-16,2}, -{88,-16,3}, -{88,-16,4}, -{88,-16,5}, -{88,-16,6}, -{88,-16,7}, -{88,-16,8}, -{88,-16,9}, -{88,-16,10}, -{88,-16,11}, -{88,-16,12}, -{88,-16,13}, -{88,-16,14}, -{88,-16,15}, -{88,-16,16}, -{88,-16,17}, -{88,-16,18}, -{88,-16,19}, -{88,-16,20}, -{88,-16,21}, -{88,-16,22}, -{88,-16,23}, -{88,-16,24}, -{88,-16,25}, -{88,-16,26}, -{88,-16,27}, -{88,-16,28}, -{88,-16,29}, -{88,-16,30}, -{88,-16,31}, -{88,-16,32}, -{88,-16,33}, -{88,-16,34}, -{88,-16,35}, -{88,-16,36}, -{88,-16,37}, -{88,-16,38}, -{88,-16,39}, -{88,-16,40}, -{88,-16,41}, -{88,-16,42}, -{88,-16,43}, -{88,-16,44}, -{88,-16,45}, -{88,-16,46}, -{88,-16,47}, -{88,-16,48}, -{88,-16,49}, -{88,-16,50}, -{88,-16,51}, -{88,-16,52}, -{88,-16,53}, -{88,-16,54}, -{88,-16,55}, -{88,-16,56}, -{88,-16,57}, -{88,-16,58}, -{88,-16,59}, -{88,-16,60}, -{88,-16,61}, -{88,-16,62}, -{88,-16,63}, -{88,-16,64}, -{88,-16,65}, -{88,-16,66}, -{88,-16,67}, -{88,-16,68}, -{88,-16,69}, -{88,-16,70}, -{88,-16,71}, -{88,-16,72}, -{88,-16,73}, -{88,-16,74}, -{88,-16,75}, -{88,-16,76}, -{88,-16,77}, -{88,-16,78}, -{88,-16,79}, -{88,-16,80}, -{88,-16,81}, -{88,-16,82}, -{88,-16,83}, -{88,-16,84}, -{88,-16,85}, -{88,-16,86}, -{88,-16,87}, -{88,-15,-18}, -{88,-15,-17}, -{88,-15,-16}, -{88,-15,-15}, -{88,-15,-14}, -{88,-15,-13}, -{88,-15,-12}, -{88,-15,-11}, -{88,-15,-10}, -{88,-15,-9}, -{88,-15,-8}, -{88,-15,-7}, -{88,-15,-6}, -{88,-15,-5}, -{88,-15,-4}, -{88,-15,-3}, -{88,-15,-2}, -{88,-15,-1}, -{88,-15,0}, -{88,-15,1}, -{88,-15,2}, -{88,-15,3}, -{88,-15,4}, -{88,-15,5}, -{88,-15,6}, -{88,-15,7}, -{88,-15,8}, -{88,-15,9}, -{88,-15,10}, -{88,-15,11}, -{88,-15,12}, -{88,-15,13}, -{88,-15,14}, -{88,-15,15}, -{88,-15,16}, -{88,-15,17}, -{88,-15,18}, -{88,-15,19}, -{88,-15,20}, -{88,-15,21}, -{88,-15,22}, -{88,-15,23}, -{88,-15,24}, -{88,-15,25}, -{88,-15,26}, -{88,-15,27}, -{88,-15,28}, -{88,-15,29}, -{88,-15,30}, -{88,-15,31}, -{88,-15,32}, -{88,-15,33}, -{88,-15,34}, -{88,-15,35}, -{88,-15,36}, -{88,-15,37}, -{88,-15,38}, -{88,-15,39}, -{88,-15,40}, -{88,-15,41}, -{88,-15,42}, -{88,-15,43}, -{88,-15,44}, -{88,-15,45}, -{88,-15,46}, -{88,-15,47}, -{88,-15,48}, -{88,-15,49}, -{88,-15,50}, -{88,-15,51}, -{88,-15,52}, -{88,-15,53}, -{88,-15,54}, -{88,-15,55}, -{88,-15,56}, -{88,-15,57}, -{88,-15,58}, -{88,-15,59}, -{88,-15,60}, -{88,-15,61}, -{88,-15,62}, -{88,-15,63}, -{88,-15,64}, -{88,-15,65}, -{88,-15,66}, -{88,-15,67}, -{88,-15,68}, -{88,-15,69}, -{88,-15,70}, -{88,-15,71}, -{88,-15,72}, -{88,-15,73}, -{88,-15,74}, -{88,-15,75}, -{88,-15,76}, -{88,-15,77}, -{88,-15,78}, -{88,-15,79}, -{88,-15,80}, -{88,-15,81}, -{88,-15,82}, -{88,-15,83}, -{88,-15,84}, -{88,-15,85}, -{88,-15,86}, -{88,-15,87}, -{88,-14,-18}, -{88,-14,-17}, -{88,-14,-16}, -{88,-14,-15}, -{88,-14,-14}, -{88,-14,-13}, -{88,-14,-12}, -{88,-14,-11}, -{88,-14,-10}, -{88,-14,-9}, -{88,-14,-8}, -{88,-14,-7}, -{88,-14,-6}, -{88,-14,-5}, -{88,-14,-4}, -{88,-14,-3}, -{88,-14,-2}, -{88,-14,-1}, -{88,-14,0}, -{88,-14,1}, -{88,-14,2}, -{88,-14,3}, -{88,-14,4}, -{88,-14,5}, -{88,-14,6}, -{88,-14,7}, -{88,-14,8}, -{88,-14,9}, -{88,-14,10}, -{88,-14,11}, -{88,-14,12}, -{88,-14,13}, -{88,-14,14}, -{88,-14,15}, -{88,-14,16}, -{88,-14,17}, -{88,-14,18}, -{88,-14,19}, -{88,-14,20}, -{88,-14,21}, -{88,-14,22}, -{88,-14,23}, -{88,-14,24}, -{88,-14,25}, -{88,-14,26}, -{88,-14,27}, -{88,-14,28}, -{88,-14,29}, -{88,-14,30}, -{88,-14,31}, -{88,-14,32}, -{88,-14,33}, -{88,-14,34}, -{88,-14,35}, -{88,-14,36}, -{88,-14,37}, -{88,-14,38}, -{88,-14,39}, -{88,-14,40}, -{88,-14,41}, -{88,-14,42}, -{88,-14,43}, -{88,-14,44}, -{88,-14,45}, -{88,-14,46}, -{88,-14,47}, -{88,-14,48}, -{88,-14,49}, -{88,-14,50}, -{88,-14,51}, -{88,-14,52}, -{88,-14,53}, -{88,-14,54}, -{88,-14,55}, -{88,-14,56}, -{88,-14,57}, -{88,-14,58}, -{88,-14,59}, -{88,-14,60}, -{88,-14,61}, -{88,-14,62}, -{88,-14,63}, -{88,-14,64}, -{88,-14,65}, -{88,-14,66}, -{88,-14,67}, -{88,-14,68}, -{88,-14,69}, -{88,-14,70}, -{88,-14,71}, -{88,-14,72}, -{88,-14,73}, -{88,-14,74}, -{88,-14,75}, -{88,-14,76}, -{88,-14,77}, -{88,-14,78}, -{88,-14,79}, -{88,-14,80}, -{88,-14,81}, -{88,-14,82}, -{88,-14,83}, -{88,-14,84}, -{88,-14,85}, -{88,-14,86}, -{88,-14,87}, -{88,-13,-18}, -{88,-13,-17}, -{88,-13,-16}, -{88,-13,-15}, -{88,-13,-14}, -{88,-13,-13}, -{88,-13,-12}, -{88,-13,-11}, -{88,-13,-10}, -{88,-13,-9}, -{88,-13,-8}, -{88,-13,-7}, -{88,-13,-6}, -{88,-13,-5}, -{88,-13,-4}, -{88,-13,-3}, -{88,-13,-2}, -{88,-13,-1}, -{88,-13,0}, -{88,-13,1}, -{88,-13,2}, -{88,-13,3}, -{88,-13,4}, -{88,-13,5}, -{88,-13,6}, -{88,-13,7}, -{88,-13,8}, -{88,-13,9}, -{88,-13,10}, -{88,-13,11}, -{88,-13,12}, -{88,-13,13}, -{88,-13,14}, -{88,-13,15}, -{88,-13,16}, -{88,-13,17}, -{88,-13,18}, -{88,-13,19}, -{88,-13,20}, -{88,-13,21}, -{88,-13,22}, -{88,-13,23}, -{88,-13,24}, -{88,-13,25}, -{88,-13,26}, -{88,-13,27}, -{88,-13,28}, -{88,-13,29}, -{88,-13,30}, -{88,-13,31}, -{88,-13,32}, -{88,-13,33}, -{88,-13,34}, -{88,-13,35}, -{88,-13,36}, -{88,-13,37}, -{88,-13,38}, -{88,-13,39}, -{88,-13,40}, -{88,-13,41}, -{88,-13,42}, -{88,-13,43}, -{88,-13,44}, -{88,-13,45}, -{88,-13,46}, -{88,-13,47}, -{88,-13,48}, -{88,-13,49}, -{88,-13,50}, -{88,-13,51}, -{88,-13,52}, -{88,-13,53}, -{88,-13,54}, -{88,-13,55}, -{88,-13,56}, -{88,-13,57}, -{88,-13,58}, -{88,-13,59}, -{88,-13,60}, -{88,-13,61}, -{88,-13,62}, -{88,-13,63}, -{88,-13,64}, -{88,-13,65}, -{88,-13,66}, -{88,-13,67}, -{88,-13,68}, -{88,-13,69}, -{88,-13,70}, -{88,-13,71}, -{88,-13,72}, -{88,-13,73}, -{88,-13,74}, -{88,-13,75}, -{88,-13,76}, -{88,-13,77}, -{88,-13,78}, -{88,-13,79}, -{88,-13,80}, -{88,-13,81}, -{88,-13,82}, -{88,-13,83}, -{88,-13,84}, -{88,-13,85}, -{88,-13,86}, -{88,-13,87}, -{88,-12,-18}, -{88,-12,-17}, -{88,-12,-16}, -{88,-12,-15}, -{88,-12,-14}, -{88,-12,-13}, -{88,-12,-12}, -{88,-12,-11}, -{88,-12,-10}, -{88,-12,-9}, -{88,-12,-8}, -{88,-12,-7}, -{88,-12,-6}, -{88,-12,-5}, -{88,-12,-4}, -{88,-12,-3}, -{88,-12,-2}, -{88,-12,-1}, -{88,-12,0}, -{88,-12,1}, -{88,-12,2}, -{88,-12,3}, -{88,-12,4}, -{88,-12,5}, -{88,-12,6}, -{88,-12,7}, -{88,-12,8}, -{88,-12,9}, -{88,-12,10}, -{88,-12,11}, -{88,-12,12}, -{88,-12,13}, -{88,-12,14}, -{88,-12,15}, -{88,-12,16}, -{88,-12,17}, -{88,-12,18}, -{88,-12,19}, -{88,-12,20}, -{88,-12,21}, -{88,-12,22}, -{88,-12,23}, -{88,-12,24}, -{88,-12,25}, -{88,-12,26}, -{88,-12,27}, -{88,-12,28}, -{88,-12,29}, -{88,-12,30}, -{88,-12,31}, -{88,-12,32}, -{88,-12,33}, -{88,-12,34}, -{88,-12,35}, -{88,-12,36}, -{88,-12,37}, -{88,-12,38}, -{88,-12,39}, -{88,-12,40}, -{88,-12,41}, -{88,-12,42}, -{88,-12,43}, -{88,-12,44}, -{88,-12,45}, -{88,-12,46}, -{88,-12,47}, -{88,-12,48}, -{88,-12,49}, -{88,-12,50}, -{88,-12,51}, -{88,-12,52}, -{88,-12,53}, -{88,-12,54}, -{88,-12,55}, -{88,-12,56}, -{88,-12,57}, -{88,-12,58}, -{88,-12,59}, -{88,-12,60}, -{88,-12,61}, -{88,-12,62}, -{88,-12,63}, -{88,-12,64}, -{88,-12,65}, -{88,-12,66}, -{88,-12,67}, -{88,-12,68}, -{88,-12,69}, -{88,-12,70}, -{88,-12,71}, -{88,-12,72}, -{88,-12,73}, -{88,-12,74}, -{88,-12,75}, -{88,-12,76}, -{88,-12,77}, -{88,-12,78}, -{88,-12,79}, -{88,-12,80}, -{88,-12,81}, -{88,-12,82}, -{88,-12,83}, -{88,-12,84}, -{88,-12,85}, -{88,-12,86}, -{88,-12,87}, -{88,-11,-18}, -{88,-11,-17}, -{88,-11,-16}, -{88,-11,-15}, -{88,-11,-14}, -{88,-11,-13}, -{88,-11,-12}, -{88,-11,-11}, -{88,-11,-10}, -{88,-11,-9}, -{88,-11,-8}, -{88,-11,-7}, -{88,-11,-6}, -{88,-11,-5}, -{88,-11,-4}, -{88,-11,-3}, -{88,-11,-2}, -{88,-11,-1}, -{88,-11,0}, -{88,-11,1}, -{88,-11,2}, -{88,-11,3}, -{88,-11,4}, -{88,-11,5}, -{88,-11,6}, -{88,-11,7}, -{88,-11,8}, -{88,-11,9}, -{88,-11,10}, -{88,-11,11}, -{88,-11,12}, -{88,-11,13}, -{88,-11,14}, -{88,-11,15}, -{88,-11,16}, -{88,-11,17}, -{88,-11,18}, -{88,-11,19}, -{88,-11,20}, -{88,-11,21}, -{88,-11,22}, -{88,-11,23}, -{88,-11,24}, -{88,-11,25}, -{88,-11,26}, -{88,-11,27}, -{88,-11,28}, -{88,-11,29}, -{88,-11,30}, -{88,-11,31}, -{88,-11,32}, -{88,-11,33}, -{88,-11,34}, -{88,-11,35}, -{88,-11,36}, -{88,-11,37}, -{88,-11,38}, -{88,-11,39}, -{88,-11,40}, -{88,-11,41}, -{88,-11,42}, -{88,-11,43}, -{88,-11,44}, -{88,-11,45}, -{88,-11,46}, -{88,-11,47}, -{88,-11,48}, -{88,-11,49}, -{88,-11,50}, -{88,-11,51}, -{88,-11,52}, -{88,-11,53}, -{88,-11,54}, -{88,-11,55}, -{88,-11,56}, -{88,-11,57}, -{88,-11,58}, -{88,-11,59}, -{88,-11,60}, -{88,-11,61}, -{88,-11,62}, -{88,-11,63}, -{88,-11,64}, -{88,-11,65}, -{88,-11,66}, -{88,-11,67}, -{88,-11,68}, -{88,-11,69}, -{88,-11,70}, -{88,-11,71}, -{88,-11,72}, -{88,-11,73}, -{88,-11,74}, -{88,-11,75}, -{88,-11,76}, -{88,-11,77}, -{88,-11,78}, -{88,-11,79}, -{88,-11,80}, -{88,-11,81}, -{88,-11,82}, -{88,-11,83}, -{88,-11,84}, -{88,-11,85}, -{88,-11,86}, -{88,-11,87}, -{88,-10,-18}, -{88,-10,-17}, -{88,-10,-16}, -{88,-10,-15}, -{88,-10,-14}, -{88,-10,-13}, -{88,-10,-12}, -{88,-10,-11}, -{88,-10,-10}, -{88,-10,-9}, -{88,-10,-8}, -{88,-10,-7}, -{88,-10,-6}, -{88,-10,-5}, -{88,-10,-4}, -{88,-10,-3}, -{88,-10,-2}, -{88,-10,-1}, -{88,-10,0}, -{88,-10,1}, -{88,-10,2}, -{88,-10,3}, -{88,-10,4}, -{88,-10,5}, -{88,-10,6}, -{88,-10,7}, -{88,-10,8}, -{88,-10,9}, -{88,-10,10}, -{88,-10,11}, -{88,-10,12}, -{88,-10,13}, -{88,-10,14}, -{88,-10,15}, -{88,-10,16}, -{88,-10,17}, -{88,-10,18}, -{88,-10,19}, -{88,-10,20}, -{88,-10,21}, -{88,-10,22}, -{88,-10,23}, -{88,-10,24}, -{88,-10,25}, -{88,-10,26}, -{88,-10,27}, -{88,-10,28}, -{88,-10,29}, -{88,-10,30}, -{88,-10,31}, -{88,-10,32}, -{88,-10,33}, -{88,-10,34}, -{88,-10,35}, -{88,-10,36}, -{88,-10,37}, -{88,-10,38}, -{88,-10,39}, -{88,-10,40}, -{88,-10,41}, -{88,-10,42}, -{88,-10,43}, -{88,-10,44}, -{88,-10,45}, -{88,-10,46}, -{88,-10,47}, -{88,-10,48}, -{88,-10,49}, -{88,-10,50}, -{88,-10,51}, -{88,-10,52}, -{88,-10,53}, -{88,-10,54}, -{88,-10,55}, -{88,-10,56}, -{88,-10,57}, -{88,-10,58}, -{88,-10,59}, -{88,-10,60}, -{88,-10,61}, -{88,-10,62}, -{88,-10,63}, -{88,-10,64}, -{88,-10,65}, -{88,-10,66}, -{88,-10,67}, -{88,-10,68}, -{88,-10,69}, -{88,-10,70}, -{88,-10,71}, -{88,-10,72}, -{88,-10,73}, -{88,-10,74}, -{88,-10,75}, -{88,-10,76}, -{88,-10,77}, -{88,-10,78}, -{88,-10,79}, -{88,-10,80}, -{88,-10,81}, -{88,-10,82}, -{88,-10,83}, -{88,-10,84}, -{88,-10,85}, -{88,-10,86}, -{88,-10,87}, -{88,-9,-18}, -{88,-9,-17}, -{88,-9,-16}, -{88,-9,-15}, -{88,-9,-14}, -{88,-9,-13}, -{88,-9,-12}, -{88,-9,-11}, -{88,-9,-10}, -{88,-9,-9}, -{88,-9,-8}, -{88,-9,-7}, -{88,-9,-6}, -{88,-9,-5}, -{88,-9,-4}, -{88,-9,-3}, -{88,-9,-2}, -{88,-9,-1}, -{88,-9,0}, -{88,-9,1}, -{88,-9,2}, -{88,-9,3}, -{88,-9,4}, -{88,-9,5}, -{88,-9,6}, -{88,-9,7}, -{88,-9,8}, -{88,-9,9}, -{88,-9,10}, -{88,-9,11}, -{88,-9,12}, -{88,-9,13}, -{88,-9,14}, -{88,-9,15}, -{88,-9,16}, -{88,-9,17}, -{88,-9,18}, -{88,-9,19}, -{88,-9,20}, -{88,-9,21}, -{88,-9,22}, -{88,-9,23}, -{88,-9,24}, -{88,-9,25}, -{88,-9,26}, -{88,-9,27}, -{88,-9,28}, -{88,-9,29}, -{88,-9,30}, -{88,-9,31}, -{88,-9,32}, -{88,-9,33}, -{88,-9,34}, -{88,-9,35}, -{88,-9,36}, -{88,-9,37}, -{88,-9,38}, -{88,-9,39}, -{88,-9,40}, -{88,-9,41}, -{88,-9,42}, -{88,-9,43}, -{88,-9,44}, -{88,-9,45}, -{88,-9,46}, -{88,-9,47}, -{88,-9,48}, -{88,-9,49}, -{88,-9,50}, -{88,-9,51}, -{88,-9,52}, -{88,-9,53}, -{88,-9,54}, -{88,-9,55}, -{88,-9,56}, -{88,-9,57}, -{88,-9,58}, -{88,-9,59}, -{88,-9,60}, -{88,-9,61}, -{88,-9,62}, -{88,-9,63}, -{88,-9,64}, -{88,-9,65}, -{88,-9,66}, -{88,-9,67}, -{88,-9,68}, -{88,-9,69}, -{88,-9,70}, -{88,-9,71}, -{88,-9,72}, -{88,-9,73}, -{88,-9,74}, -{88,-9,75}, -{88,-9,76}, -{88,-9,77}, -{88,-9,78}, -{88,-9,79}, -{88,-9,80}, -{88,-9,81}, -{88,-9,82}, -{88,-9,83}, -{88,-9,84}, -{88,-9,85}, -{88,-9,86}, -{88,-9,87}, -{88,-8,-18}, -{88,-8,-17}, -{88,-8,-16}, -{88,-8,-15}, -{88,-8,-14}, -{88,-8,-13}, -{88,-8,-12}, -{88,-8,-11}, -{88,-8,-10}, -{88,-8,-9}, -{88,-8,-8}, -{88,-8,-7}, -{88,-8,-6}, -{88,-8,-5}, -{88,-8,-4}, -{88,-8,-3}, -{88,-8,-2}, -{88,-8,-1}, -{88,-8,0}, -{88,-8,1}, -{88,-8,2}, -{88,-8,3}, -{88,-8,4}, -{88,-8,5}, -{88,-8,6}, -{88,-8,7}, -{88,-8,8}, -{88,-8,9}, -{88,-8,10}, -{88,-8,11}, -{88,-8,12}, -{88,-8,13}, -{88,-8,14}, -{88,-8,15}, -{88,-8,16}, -{88,-8,17}, -{88,-8,18}, -{88,-8,19}, -{88,-8,20}, -{88,-8,21}, -{88,-8,22}, -{88,-8,23}, -{88,-8,24}, -{88,-8,25}, -{88,-8,26}, -{88,-8,27}, -{88,-8,28}, -{88,-8,29}, -{88,-8,30}, -{88,-8,31}, -{88,-8,32}, -{88,-8,33}, -{88,-8,34}, -{88,-8,35}, -{88,-8,36}, -{88,-8,37}, -{88,-8,38}, -{88,-8,39}, -{88,-8,40}, -{88,-8,41}, -{88,-8,42}, -{88,-8,43}, -{88,-8,44}, -{88,-8,45}, -{88,-8,46}, -{88,-8,47}, -{88,-8,48}, -{88,-8,49}, -{88,-8,50}, -{88,-8,51}, -{88,-8,52}, -{88,-8,53}, -{88,-8,54}, -{88,-8,55}, -{88,-8,56}, -{88,-8,57}, -{88,-8,58}, -{88,-8,59}, -{88,-8,60}, -{88,-8,61}, -{88,-8,62}, -{88,-8,63}, -{88,-8,64}, -{88,-8,65}, -{88,-8,66}, -{88,-8,67}, -{88,-8,68}, -{88,-8,69}, -{88,-8,70}, -{88,-8,71}, -{88,-8,72}, -{88,-8,73}, -{88,-8,74}, -{88,-8,75}, -{88,-8,76}, -{88,-8,77}, -{88,-8,78}, -{88,-8,79}, -{88,-8,80}, -{88,-8,81}, -{88,-8,82}, -{88,-8,83}, -{88,-8,84}, -{88,-8,85}, -{88,-8,86}, -{88,-8,87}, -{88,-7,-18}, -{88,-7,-17}, -{88,-7,-16}, -{88,-7,-15}, -{88,-7,-14}, -{88,-7,-13}, -{88,-7,-12}, -{88,-7,-11}, -{88,-7,-10}, -{88,-7,-9}, -{88,-7,-8}, -{88,-7,-7}, -{88,-7,-6}, -{88,-7,-5}, -{88,-7,-4}, -{88,-7,-3}, -{88,-7,-2}, -{88,-7,-1}, -{88,-7,0}, -{88,-7,1}, -{88,-7,2}, -{88,-7,3}, -{88,-7,4}, -{88,-7,5}, -{88,-7,6}, -{88,-7,7}, -{88,-7,8}, -{88,-7,9}, -{88,-7,10}, -{88,-7,11}, -{88,-7,12}, -{88,-7,13}, -{88,-7,14}, -{88,-7,15}, -{88,-7,16}, -{88,-7,17}, -{88,-7,18}, -{88,-7,19}, -{88,-7,20}, -{88,-7,21}, -{88,-7,22}, -{88,-7,23}, -{88,-7,24}, -{88,-7,25}, -{88,-7,26}, -{88,-7,27}, -{88,-7,28}, -{88,-7,29}, -{88,-7,30}, -{88,-7,31}, -{88,-7,32}, -{88,-7,33}, -{88,-7,34}, -{88,-7,35}, -{88,-7,36}, -{88,-7,37}, -{88,-7,38}, -{88,-7,39}, -{88,-7,40}, -{88,-7,41}, -{88,-7,42}, -{88,-7,43}, -{88,-7,44}, -{88,-7,45}, -{88,-7,46}, -{88,-7,47}, -{88,-7,48}, -{88,-7,49}, -{88,-7,50}, -{88,-7,51}, -{88,-7,52}, -{88,-7,53}, -{88,-7,54}, -{88,-7,55}, -{88,-7,56}, -{88,-7,57}, -{88,-7,58}, -{88,-7,59}, -{88,-7,60}, -{88,-7,61}, -{88,-7,62}, -{88,-7,63}, -{88,-7,64}, -{88,-7,65}, -{88,-7,66}, -{88,-7,67}, -{88,-7,68}, -{88,-7,69}, -{88,-7,70}, -{88,-7,71}, -{88,-7,72}, -{88,-7,73}, -{88,-7,74}, -{88,-7,75}, -{88,-7,76}, -{88,-7,77}, -{88,-7,78}, -{88,-7,79}, -{88,-7,80}, -{88,-7,81}, -{88,-7,82}, -{88,-7,83}, -{88,-7,84}, -{88,-7,85}, -{88,-7,86}, -{88,-7,87}, -{88,-6,-18}, -{88,-6,-17}, -{88,-6,-16}, -{88,-6,-15}, -{88,-6,-14}, -{88,-6,-13}, -{88,-6,-12}, -{88,-6,-11}, -{88,-6,-10}, -{88,-6,-9}, -{88,-6,-8}, -{88,-6,-7}, -{88,-6,-6}, -{88,-6,-5}, -{88,-6,-4}, -{88,-6,-3}, -{88,-6,-2}, -{88,-6,-1}, -{88,-6,0}, -{88,-6,1}, -{88,-6,2}, -{88,-6,3}, -{88,-6,4}, -{88,-6,5}, -{88,-6,6}, -{88,-6,7}, -{88,-6,8}, -{88,-6,9}, -{88,-6,10}, -{88,-6,11}, -{88,-6,12}, -{88,-6,13}, -{88,-6,14}, -{88,-6,15}, -{88,-6,16}, -{88,-6,17}, -{88,-6,18}, -{88,-6,19}, -{88,-6,20}, -{88,-6,21}, -{88,-6,22}, -{88,-6,23}, -{88,-6,24}, -{88,-6,25}, -{88,-6,26}, -{88,-6,27}, -{88,-6,28}, -{88,-6,29}, -{88,-6,30}, -{88,-6,31}, -{88,-6,32}, -{88,-6,33}, -{88,-6,34}, -{88,-6,35}, -{88,-6,36}, -{88,-6,37}, -{88,-6,38}, -{88,-6,39}, -{88,-6,40}, -{88,-6,41}, -{88,-6,42}, -{88,-6,43}, -{88,-6,44}, -{88,-6,45}, -{88,-6,46}, -{88,-6,47}, -{88,-6,48}, -{88,-6,49}, -{88,-6,50}, -{88,-6,51}, -{88,-6,52}, -{88,-6,53}, -{88,-6,54}, -{88,-6,55}, -{88,-6,56}, -{88,-6,57}, -{88,-6,58}, -{88,-6,59}, -{88,-6,60}, -{88,-6,61}, -{88,-6,62}, -{88,-6,63}, -{88,-6,64}, -{88,-6,65}, -{88,-6,66}, -{88,-6,67}, -{88,-6,68}, -{88,-6,69}, -{88,-6,70}, -{88,-6,71}, -{88,-6,72}, -{88,-6,73}, -{88,-6,74}, -{88,-6,75}, -{88,-6,76}, -{88,-6,77}, -{88,-6,78}, -{88,-6,79}, -{88,-6,80}, -{88,-6,81}, -{88,-6,82}, -{88,-6,83}, -{88,-6,84}, -{88,-6,85}, -{88,-6,86}, -{88,-6,87}, -{88,-5,-18}, -{88,-5,-17}, -{88,-5,-16}, -{88,-5,-15}, -{88,-5,-14}, -{88,-5,-13}, -{88,-5,-12}, -{88,-5,-11}, -{88,-5,-10}, -{88,-5,-9}, -{88,-5,-8}, -{88,-5,-7}, -{88,-5,-6}, -{88,-5,-5}, -{88,-5,-4}, -{88,-5,-3}, -{88,-5,-2}, -{88,-5,-1}, -{88,-5,0}, -{88,-5,1}, -{88,-5,2}, -{88,-5,3}, -{88,-5,4}, -{88,-5,5}, -{88,-5,6}, -{88,-5,7}, -{88,-5,8}, -{88,-5,9}, -{88,-5,10}, -{88,-5,11}, -{88,-5,12}, -{88,-5,13}, -{88,-5,14}, -{88,-5,15}, -{88,-5,16}, -{88,-5,17}, -{88,-5,18}, -{88,-5,19}, -{88,-5,20}, -{88,-5,21}, -{88,-5,22}, -{88,-5,23}, -{88,-5,24}, -{88,-5,25}, -{88,-5,26}, -{88,-5,27}, -{88,-5,28}, -{88,-5,29}, -{88,-5,30}, -{88,-5,31}, -{88,-5,32}, -{88,-5,33}, -{88,-5,34}, -{88,-5,35}, -{88,-5,36}, -{88,-5,37}, -{88,-5,38}, -{88,-5,39}, -{88,-5,40}, -{88,-5,41}, -{88,-5,42}, -{88,-5,43}, -{88,-5,44}, -{88,-5,45}, -{88,-5,46}, -{88,-5,47}, -{88,-5,48}, -{88,-5,49}, -{88,-5,50}, -{88,-5,51}, -{88,-5,52}, -{88,-5,53}, -{88,-5,54}, -{88,-5,55}, -{88,-5,56}, -{88,-5,57}, -{88,-5,58}, -{88,-5,59}, -{88,-5,60}, -{88,-5,61}, -{88,-5,62}, -{88,-5,63}, -{88,-5,64}, -{88,-5,65}, -{88,-5,66}, -{88,-5,67}, -{88,-5,68}, -{88,-5,69}, -{88,-5,70}, -{88,-5,71}, -{88,-5,72}, -{88,-5,73}, -{88,-5,74}, -{88,-5,75}, -{88,-5,76}, -{88,-5,77}, -{88,-5,78}, -{88,-5,79}, -{88,-5,80}, -{88,-5,81}, -{88,-5,82}, -{88,-5,83}, -{88,-5,84}, -{88,-5,85}, -{88,-5,86}, -{88,-5,87}, -{88,-5,88}, -{88,-4,-18}, -{88,-4,-17}, -{88,-4,-16}, -{88,-4,-15}, -{88,-4,-14}, -{88,-4,-13}, -{88,-4,-12}, -{88,-4,-11}, -{88,-4,-10}, -{88,-4,-9}, -{88,-4,-8}, -{88,-4,-7}, -{88,-4,-6}, -{88,-4,-5}, -{88,-4,-4}, -{88,-4,-3}, -{88,-4,-2}, -{88,-4,-1}, -{88,-4,0}, -{88,-4,1}, -{88,-4,2}, -{88,-4,3}, -{88,-4,4}, -{88,-4,5}, -{88,-4,6}, -{88,-4,7}, -{88,-4,8}, -{88,-4,9}, -{88,-4,10}, -{88,-4,11}, -{88,-4,12}, -{88,-4,13}, -{88,-4,14}, -{88,-4,15}, -{88,-4,16}, -{88,-4,17}, -{88,-4,18}, -{88,-4,19}, -{88,-4,20}, -{88,-4,21}, -{88,-4,22}, -{88,-4,23}, -{88,-4,24}, -{88,-4,25}, -{88,-4,26}, -{88,-4,27}, -{88,-4,28}, -{88,-4,29}, -{88,-4,30}, -{88,-4,31}, -{88,-4,32}, -{88,-4,33}, -{88,-4,34}, -{88,-4,35}, -{88,-4,36}, -{88,-4,37}, -{88,-4,38}, -{88,-4,39}, -{88,-4,40}, -{88,-4,41}, -{88,-4,42}, -{88,-4,43}, -{88,-4,44}, -{88,-4,45}, -{88,-4,46}, -{88,-4,47}, -{88,-4,48}, -{88,-4,49}, -{88,-4,50}, -{88,-4,51}, -{88,-4,52}, -{88,-4,53}, -{88,-4,54}, -{88,-4,55}, -{88,-4,56}, -{88,-4,57}, -{88,-4,58}, -{88,-4,59}, -{88,-4,60}, -{88,-4,61}, -{88,-4,62}, -{88,-4,63}, -{88,-4,64}, -{88,-4,65}, -{88,-4,66}, -{88,-4,67}, -{88,-4,68}, -{88,-4,69}, -{88,-4,70}, -{88,-4,71}, -{88,-4,72}, -{88,-4,73}, -{88,-4,74}, -{88,-4,75}, -{88,-4,76}, -{88,-4,77}, -{88,-4,78}, -{88,-4,79}, -{88,-4,80}, -{88,-4,81}, -{88,-4,82}, -{88,-4,83}, -{88,-4,84}, -{88,-4,85}, -{88,-4,86}, -{88,-4,87}, -{88,-4,88}, -{88,-3,-18}, -{88,-3,-17}, -{88,-3,-16}, -{88,-3,-15}, -{88,-3,-14}, -{88,-3,-13}, -{88,-3,-12}, -{88,-3,-11}, -{88,-3,-10}, -{88,-3,-9}, -{88,-3,-8}, -{88,-3,-7}, -{88,-3,-6}, -{88,-3,-5}, -{88,-3,-4}, -{88,-3,-3}, -{88,-3,-2}, -{88,-3,-1}, -{88,-3,0}, -{88,-3,1}, -{88,-3,2}, -{88,-3,3}, -{88,-3,4}, -{88,-3,5}, -{88,-3,6}, -{88,-3,7}, -{88,-3,8}, -{88,-3,9}, -{88,-3,10}, -{88,-3,11}, -{88,-3,12}, -{88,-3,13}, -{88,-3,14}, -{88,-3,15}, -{88,-3,16}, -{88,-3,17}, -{88,-3,18}, -{88,-3,19}, -{88,-3,20}, -{88,-3,21}, -{88,-3,22}, -{88,-3,23}, -{88,-3,24}, -{88,-3,25}, -{88,-3,26}, -{88,-3,27}, -{88,-3,28}, -{88,-3,29}, -{88,-3,30}, -{88,-3,31}, -{88,-3,32}, -{88,-3,33}, -{88,-3,34}, -{88,-3,35}, -{88,-3,36}, -{88,-3,37}, -{88,-3,38}, -{88,-3,39}, -{88,-3,40}, -{88,-3,41}, -{88,-3,42}, -{88,-3,43}, -{88,-3,44}, -{88,-3,45}, -{88,-3,46}, -{88,-3,47}, -{88,-3,48}, -{88,-3,49}, -{88,-3,50}, -{88,-3,51}, -{88,-3,52}, -{88,-3,53}, -{88,-3,54}, -{88,-3,55}, -{88,-3,56}, -{88,-3,57}, -{88,-3,58}, -{88,-3,59}, -{88,-3,60}, -{88,-3,61}, -{88,-3,62}, -{88,-3,63}, -{88,-3,64}, -{88,-3,65}, -{88,-3,66}, -{88,-3,67}, -{88,-3,68}, -{88,-3,69}, -{88,-3,70}, -{88,-3,71}, -{88,-3,72}, -{88,-3,73}, -{88,-3,74}, -{88,-3,75}, -{88,-3,76}, -{88,-3,77}, -{88,-3,78}, -{88,-3,79}, -{88,-3,80}, -{88,-2,-18}, -{88,-2,-17}, -{88,-2,-16}, -{88,-2,-15}, -{88,-2,-14}, -{88,-2,-13}, -{88,-2,-12}, -{88,-2,-11}, -{88,-2,-10}, -{88,-2,-9}, -{88,-2,-8}, -{88,-2,-7}, -{88,-2,-6}, -{88,-2,-5}, -{88,-2,-4}, -{88,-2,-3}, -{88,-2,-2}, -{88,-2,-1}, -{88,-2,0}, -{88,-2,1}, -{88,-2,2}, -{88,-2,3}, -{88,-2,4}, -{88,-2,5}, -{88,-2,6}, -{88,-2,7}, -{88,-2,8}, -{88,-2,9}, -{88,-2,10}, -{88,-2,11}, -{88,-2,12}, -{88,-2,13}, -{88,-2,14}, -{88,-2,15}, -{88,-2,16}, -{88,-2,17}, -{88,-2,18}, -{88,-2,19}, -{88,-2,20}, -{88,-2,21}, -{88,-2,22}, -{88,-2,23}, -{88,-2,24}, -{88,-2,25}, -{88,-2,26}, -{88,-2,27}, -{88,-2,28}, -{88,-2,29}, -{88,-2,30}, -{88,-2,31}, -{88,-2,32}, -{88,-2,33}, -{88,-2,34}, -{88,-2,35}, -{88,-2,36}, -{88,-2,37}, -{88,-2,38}, -{88,-2,39}, -{88,-2,40}, -{88,-2,41}, -{88,-2,42}, -{88,-2,43}, -{88,-2,44}, -{88,-2,45}, -{88,-2,46}, -{88,-2,47}, -{88,-2,48}, -{88,-2,49}, -{88,-2,50}, -{88,-2,51}, -{88,-2,52}, -{88,-2,53}, -{88,-2,54}, -{88,-2,55}, -{88,-2,56}, -{88,-2,57}, -{88,-2,58}, -{88,-2,59}, -{88,-2,60}, -{88,-2,61}, -{88,-2,62}, -{88,-2,63}, -{88,-2,64}, -{88,-2,65}, -{88,-2,66}, -{88,-2,67}, -{88,-2,68}, -{88,-2,69}, -{88,-2,70}, -{88,-2,71}, -{88,-2,72}, -{88,-2,73}, -{88,-1,-18}, -{88,-1,-17}, -{88,-1,-16}, -{88,-1,-15}, -{88,-1,-14}, -{88,-1,-13}, -{88,-1,-12}, -{88,-1,-11}, -{88,-1,-10}, -{88,-1,-9}, -{88,-1,-8}, -{88,-1,-7}, -{88,-1,-6}, -{88,-1,-5}, -{88,-1,-4}, -{88,-1,-3}, -{88,-1,-2}, -{88,-1,-1}, -{88,-1,0}, -{88,-1,1}, -{88,-1,2}, -{88,-1,3}, -{88,-1,4}, -{88,-1,5}, -{88,-1,6}, -{88,-1,7}, -{88,-1,8}, -{88,-1,9}, -{88,-1,10}, -{88,-1,11}, -{88,-1,12}, -{88,-1,13}, -{88,-1,14}, -{88,-1,15}, -{88,-1,16}, -{88,-1,17}, -{88,-1,18}, -{88,-1,19}, -{88,-1,20}, -{88,-1,21}, -{88,-1,22}, -{88,-1,23}, -{88,-1,24}, -{88,-1,25}, -{88,-1,26}, -{88,-1,27}, -{88,-1,28}, -{88,-1,29}, -{88,-1,30}, -{88,-1,31}, -{88,-1,32}, -{88,-1,33}, -{88,-1,34}, -{88,-1,35}, -{88,-1,36}, -{88,-1,37}, -{88,-1,38}, -{88,-1,39}, -{88,-1,40}, -{88,-1,41}, -{88,-1,42}, -{88,-1,43}, -{88,-1,44}, -{88,-1,45}, -{88,-1,46}, -{88,-1,47}, -{88,-1,48}, -{88,-1,49}, -{88,-1,50}, -{88,-1,51}, -{88,-1,52}, -{88,-1,53}, -{88,-1,54}, -{88,-1,55}, -{88,-1,56}, -{88,-1,57}, -{88,-1,58}, -{88,-1,59}, -{88,-1,60}, -{88,-1,61}, -{88,-1,62}, -{88,-1,63}, -{88,-1,64}, -{88,-1,65}, -{88,-1,66}, -{88,-1,67}, -{88,0,-18}, -{88,0,-17}, -{88,0,-16}, -{88,0,-15}, -{88,0,-14}, -{88,0,-13}, -{88,0,-12}, -{88,0,-11}, -{88,0,-10}, -{88,0,-9}, -{88,0,-8}, -{88,0,-7}, -{88,0,-6}, -{88,0,-5}, -{88,0,-4}, -{88,0,-3}, -{88,0,-2}, -{88,0,-1}, -{88,0,0}, -{88,0,1}, -{88,0,2}, -{88,0,3}, -{88,0,4}, -{88,0,5}, -{88,0,6}, -{88,0,7}, -{88,0,8}, -{88,0,9}, -{88,0,10}, -{88,0,11}, -{88,0,12}, -{88,0,13}, -{88,0,14}, -{88,0,15}, -{88,0,16}, -{88,0,17}, -{88,0,18}, -{88,0,19}, -{88,0,20}, -{88,0,21}, -{88,0,22}, -{88,0,23}, -{88,0,24}, -{88,0,25}, -{88,0,26}, -{88,0,27}, -{88,0,28}, -{88,0,29}, -{88,0,30}, -{88,0,31}, -{88,0,32}, -{88,0,33}, -{88,0,34}, -{88,0,35}, -{88,0,36}, -{88,0,37}, -{88,0,38}, -{88,0,39}, -{88,0,40}, -{88,0,41}, -{88,0,42}, -{88,0,43}, -{88,0,44}, -{88,0,45}, -{88,0,46}, -{88,0,47}, -{88,0,48}, -{88,0,49}, -{88,0,50}, -{88,0,51}, -{88,0,52}, -{88,0,53}, -{88,0,54}, -{88,0,55}, -{88,0,56}, -{88,0,57}, -{88,0,58}, -{88,0,59}, -{88,0,60}, -{88,0,61}, -{88,0,62}, -{88,1,-18}, -{88,1,-17}, -{88,1,-16}, -{88,1,-15}, -{88,1,-14}, -{88,1,-13}, -{88,1,-12}, -{88,1,-11}, -{88,1,-10}, -{88,1,-9}, -{88,1,-8}, -{88,1,-7}, -{88,1,-6}, -{88,1,-5}, -{88,1,-4}, -{88,1,-3}, -{88,1,-2}, -{88,1,-1}, -{88,1,0}, -{88,1,1}, -{88,1,2}, -{88,1,3}, -{88,1,4}, -{88,1,5}, -{88,1,6}, -{88,1,7}, -{88,1,8}, -{88,1,9}, -{88,1,10}, -{88,1,11}, -{88,1,12}, -{88,1,13}, -{88,1,14}, -{88,1,15}, -{88,1,16}, -{88,1,17}, -{88,1,18}, -{88,1,19}, -{88,1,20}, -{88,1,21}, -{88,1,22}, -{88,1,23}, -{88,1,24}, -{88,1,25}, -{88,1,26}, -{88,1,27}, -{88,1,28}, -{88,1,29}, -{88,1,30}, -{88,1,31}, -{88,1,32}, -{88,1,33}, -{88,1,34}, -{88,1,35}, -{88,1,36}, -{88,1,37}, -{88,1,38}, -{88,1,39}, -{88,1,40}, -{88,1,41}, -{88,1,42}, -{88,1,43}, -{88,1,44}, -{88,1,45}, -{88,1,46}, -{88,1,47}, -{88,1,48}, -{88,1,49}, -{88,1,50}, -{88,1,51}, -{88,1,52}, -{88,1,53}, -{88,1,54}, -{88,1,55}, -{88,1,56}, -{88,1,57}, -{88,2,-18}, -{88,2,-17}, -{88,2,-16}, -{88,2,-15}, -{88,2,-14}, -{88,2,-13}, -{88,2,-12}, -{88,2,-11}, -{88,2,-10}, -{88,2,-9}, -{88,2,-8}, -{88,2,-7}, -{88,2,-6}, -{88,2,-5}, -{88,2,-4}, -{88,2,-3}, -{88,2,-2}, -{88,2,-1}, -{88,2,0}, -{88,2,1}, -{88,2,2}, -{88,2,3}, -{88,2,4}, -{88,2,5}, -{88,2,6}, -{88,2,7}, -{88,2,8}, -{88,2,9}, -{88,2,10}, -{88,2,11}, -{88,2,12}, -{88,2,13}, -{88,2,14}, -{88,2,15}, -{88,2,16}, -{88,2,17}, -{88,2,18}, -{88,2,19}, -{88,2,20}, -{88,2,21}, -{88,2,22}, -{88,2,23}, -{88,2,24}, -{88,2,25}, -{88,2,26}, -{88,2,27}, -{88,2,28}, -{88,2,29}, -{88,2,30}, -{88,2,31}, -{88,2,32}, -{88,2,33}, -{88,2,34}, -{88,2,35}, -{88,2,36}, -{88,2,37}, -{88,2,38}, -{88,2,39}, -{88,2,40}, -{88,2,41}, -{88,2,42}, -{88,2,43}, -{88,2,44}, -{88,2,45}, -{88,2,46}, -{88,2,47}, -{88,2,48}, -{88,2,49}, -{88,2,50}, -{88,2,51}, -{88,2,52}, -{88,3,-18}, -{88,3,-17}, -{88,3,-16}, -{88,3,-15}, -{88,3,-14}, -{88,3,-13}, -{88,3,-12}, -{88,3,-11}, -{88,3,-10}, -{88,3,-9}, -{88,3,-8}, -{88,3,-7}, -{88,3,-6}, -{88,3,-5}, -{88,3,-4}, -{88,3,-3}, -{88,3,-2}, -{88,3,-1}, -{88,3,0}, -{88,3,1}, -{88,3,2}, -{88,3,3}, -{88,3,4}, -{88,3,5}, -{88,3,6}, -{88,3,7}, -{88,3,8}, -{88,3,9}, -{88,3,10}, -{88,3,11}, -{88,3,12}, -{88,3,13}, -{88,3,14}, -{88,3,15}, -{88,3,16}, -{88,3,17}, -{88,3,18}, -{88,3,19}, -{88,3,20}, -{88,3,21}, -{88,3,22}, -{88,3,23}, -{88,3,24}, -{88,3,25}, -{88,3,26}, -{88,3,27}, -{88,3,28}, -{88,3,29}, -{88,3,30}, -{88,3,31}, -{88,3,32}, -{88,3,33}, -{88,3,34}, -{88,3,35}, -{88,3,36}, -{88,3,37}, -{88,3,38}, -{88,3,39}, -{88,3,40}, -{88,3,41}, -{88,3,42}, -{88,3,43}, -{88,3,44}, -{88,3,45}, -{88,3,46}, -{88,3,47}, -{88,4,-18}, -{88,4,-17}, -{88,4,-16}, -{88,4,-15}, -{88,4,-14}, -{88,4,-13}, -{88,4,-12}, -{88,4,-11}, -{88,4,-10}, -{88,4,-9}, -{88,4,-8}, -{88,4,-7}, -{88,4,-6}, -{88,4,-5}, -{88,4,-4}, -{88,4,-3}, -{88,4,-2}, -{88,4,-1}, -{88,4,0}, -{88,4,1}, -{88,4,2}, -{88,4,3}, -{88,4,4}, -{88,4,5}, -{88,4,6}, -{88,4,7}, -{88,4,8}, -{88,4,9}, -{88,4,10}, -{88,4,11}, -{88,4,12}, -{88,4,13}, -{88,4,14}, -{88,4,15}, -{88,4,16}, -{88,4,17}, -{88,4,18}, -{88,4,19}, -{88,4,20}, -{88,4,21}, -{88,4,22}, -{88,4,23}, -{88,4,24}, -{88,4,25}, -{88,4,26}, -{88,4,27}, -{88,4,28}, -{88,4,29}, -{88,4,30}, -{88,4,31}, -{88,4,32}, -{88,4,33}, -{88,4,34}, -{88,4,35}, -{88,4,36}, -{88,4,37}, -{88,4,38}, -{88,4,39}, -{88,4,40}, -{88,4,41}, -{88,4,42}, -{88,4,43}, -{88,5,-18}, -{88,5,-17}, -{88,5,-16}, -{88,5,-15}, -{88,5,-14}, -{88,5,-13}, -{88,5,-12}, -{88,5,-11}, -{88,5,-10}, -{88,5,-9}, -{88,5,-8}, -{88,5,-7}, -{88,5,-6}, -{88,5,-5}, -{88,5,-4}, -{88,5,-3}, -{88,5,-2}, -{88,5,-1}, -{88,5,0}, -{88,5,1}, -{88,5,2}, -{88,5,3}, -{88,5,4}, -{88,5,5}, -{88,5,6}, -{88,5,7}, -{88,5,8}, -{88,5,9}, -{88,5,10}, -{88,5,11}, -{88,5,12}, -{88,5,13}, -{88,5,14}, -{88,5,15}, -{88,5,16}, -{88,5,17}, -{88,5,18}, -{88,5,19}, -{88,5,20}, -{88,5,21}, -{88,5,22}, -{88,5,23}, -{88,5,24}, -{88,5,25}, -{88,5,26}, -{88,5,27}, -{88,5,28}, -{88,5,29}, -{88,5,30}, -{88,5,31}, -{88,5,32}, -{88,5,33}, -{88,5,34}, -{88,5,35}, -{88,5,36}, -{88,5,37}, -{88,5,38}, -{88,5,39}, -{88,6,-18}, -{88,6,-17}, -{88,6,-16}, -{88,6,-15}, -{88,6,-14}, -{88,6,-13}, -{88,6,-12}, -{88,6,-11}, -{88,6,-10}, -{88,6,-9}, -{88,6,-8}, -{88,6,-7}, -{88,6,-6}, -{88,6,-5}, -{88,6,-4}, -{88,6,-3}, -{88,6,-2}, -{88,6,-1}, -{88,6,0}, -{88,6,1}, -{88,6,2}, -{88,6,3}, -{88,6,4}, -{88,6,5}, -{88,6,6}, -{88,6,7}, -{88,6,8}, -{88,6,9}, -{88,6,10}, -{88,6,11}, -{88,6,12}, -{88,6,13}, -{88,6,14}, -{88,6,15}, -{88,6,16}, -{88,6,17}, -{88,6,18}, -{88,6,19}, -{88,6,20}, -{88,6,21}, -{88,6,22}, -{88,6,23}, -{88,6,24}, -{88,6,25}, -{88,6,26}, -{88,6,27}, -{88,6,28}, -{88,6,29}, -{88,6,30}, -{88,6,31}, -{88,6,32}, -{88,6,33}, -{88,6,34}, -{88,6,35}, -{88,6,36}, -{88,7,-18}, -{88,7,-17}, -{88,7,-16}, -{88,7,-15}, -{88,7,-14}, -{88,7,-13}, -{88,7,-12}, -{88,7,-11}, -{88,7,-10}, -{88,7,-9}, -{88,7,-8}, -{88,7,-7}, -{88,7,-6}, -{88,7,-5}, -{88,7,-4}, -{88,7,-3}, -{88,7,-2}, -{88,7,-1}, -{88,7,0}, -{88,7,1}, -{88,7,2}, -{88,7,3}, -{88,7,4}, -{88,7,5}, -{88,7,6}, -{88,7,7}, -{88,7,8}, -{88,7,9}, -{88,7,10}, -{88,7,11}, -{88,7,12}, -{88,7,13}, -{88,7,14}, -{88,7,15}, -{88,7,16}, -{88,7,17}, -{88,7,18}, -{88,7,19}, -{88,7,20}, -{88,7,21}, -{88,7,22}, -{88,7,23}, -{88,7,24}, -{88,7,25}, -{88,7,26}, -{88,7,27}, -{88,7,28}, -{88,7,29}, -{88,7,30}, -{88,7,31}, -{88,7,32}, -{88,8,-18}, -{88,8,-17}, -{88,8,-16}, -{88,8,-15}, -{88,8,-14}, -{88,8,-13}, -{88,8,-12}, -{88,8,-11}, -{88,8,-10}, -{88,8,-9}, -{88,8,-8}, -{88,8,-7}, -{88,8,-6}, -{88,8,-5}, -{88,8,-4}, -{88,8,-3}, -{88,8,-2}, -{88,8,-1}, -{88,8,0}, -{88,8,1}, -{88,8,2}, -{88,8,3}, -{88,8,4}, -{88,8,5}, -{88,8,6}, -{88,8,7}, -{88,8,8}, -{88,8,9}, -{88,8,10}, -{88,8,11}, -{88,8,12}, -{88,8,13}, -{88,8,14}, -{88,8,15}, -{88,8,16}, -{88,8,17}, -{88,8,18}, -{88,8,19}, -{88,8,20}, -{88,8,21}, -{88,8,22}, -{88,8,23}, -{88,8,24}, -{88,8,25}, -{88,8,26}, -{88,8,27}, -{88,8,28}, -{88,8,29}, -{88,9,-18}, -{88,9,-17}, -{88,9,-16}, -{88,9,-15}, -{88,9,-14}, -{88,9,-13}, -{88,9,-12}, -{88,9,-11}, -{88,9,-10}, -{88,9,-9}, -{88,9,-8}, -{88,9,-7}, -{88,9,-6}, -{88,9,-5}, -{88,9,-4}, -{88,9,-3}, -{88,9,-2}, -{88,9,-1}, -{88,9,0}, -{88,9,1}, -{88,9,2}, -{88,9,3}, -{88,9,4}, -{88,9,5}, -{88,9,6}, -{88,9,7}, -{88,9,8}, -{88,9,9}, -{88,9,10}, -{88,9,11}, -{88,9,12}, -{88,9,13}, -{88,9,14}, -{88,9,15}, -{88,9,16}, -{88,9,17}, -{88,9,18}, -{88,9,19}, -{88,9,20}, -{88,9,21}, -{88,9,22}, -{88,9,23}, -{88,9,24}, -{88,9,25}, -{88,10,-18}, -{88,10,-17}, -{88,10,-16}, -{88,10,-15}, -{88,10,-14}, -{88,10,-13}, -{88,10,-12}, -{88,10,-11}, -{88,10,-10}, -{88,10,-9}, -{88,10,-8}, -{88,10,-7}, -{88,10,-6}, -{88,10,-5}, -{88,10,-4}, -{88,10,-3}, -{88,10,-2}, -{88,10,-1}, -{88,10,0}, -{88,10,1}, -{88,10,2}, -{88,10,3}, -{88,10,4}, -{88,10,5}, -{88,10,6}, -{88,10,7}, -{88,10,8}, -{88,10,9}, -{88,10,10}, -{88,10,11}, -{88,10,12}, -{88,10,13}, -{88,10,14}, -{88,10,15}, -{88,10,16}, -{88,10,17}, -{88,10,18}, -{88,10,19}, -{88,10,20}, -{88,10,21}, -{88,10,22}, -{88,11,-18}, -{88,11,-17}, -{88,11,-16}, -{88,11,-15}, -{88,11,-14}, -{88,11,-13}, -{88,11,-12}, -{88,11,-11}, -{88,11,-10}, -{88,11,-9}, -{88,11,-8}, -{88,11,-7}, -{88,11,-6}, -{88,11,-5}, -{88,11,-4}, -{88,11,-3}, -{88,11,-2}, -{88,11,-1}, -{88,11,0}, -{88,11,1}, -{88,11,2}, -{88,11,3}, -{88,11,4}, -{88,11,5}, -{88,11,6}, -{88,11,7}, -{88,11,8}, -{88,11,9}, -{88,11,10}, -{88,11,11}, -{88,11,12}, -{88,11,13}, -{88,11,14}, -{88,11,15}, -{88,11,16}, -{88,11,17}, -{88,11,18}, -{88,11,19}, -{88,12,-18}, -{88,12,-17}, -{88,12,-16}, -{88,12,-15}, -{88,12,-14}, -{88,12,-13}, -{88,12,-12}, -{88,12,-11}, -{88,12,-10}, -{88,12,-9}, -{88,12,-8}, -{88,12,-7}, -{88,12,-6}, -{88,12,-5}, -{88,12,-4}, -{88,12,-3}, -{88,12,-2}, -{88,12,-1}, -{88,12,0}, -{88,12,1}, -{88,12,2}, -{88,12,3}, -{88,12,4}, -{88,12,5}, -{88,12,6}, -{88,12,7}, -{88,12,8}, -{88,12,9}, -{88,12,10}, -{88,12,11}, -{88,12,12}, -{88,12,13}, -{88,12,14}, -{88,12,15}, -{88,12,16}, -{88,13,-18}, -{88,13,-17}, -{88,13,-16}, -{88,13,-15}, -{88,13,-14}, -{88,13,-13}, -{88,13,-12}, -{88,13,-11}, -{88,13,-10}, -{88,13,-9}, -{88,13,-8}, -{88,13,-7}, -{88,13,-6}, -{88,13,-5}, -{88,13,-4}, -{88,13,-3}, -{88,13,-2}, -{88,13,-1}, -{88,13,0}, -{88,13,1}, -{88,13,2}, -{88,13,3}, -{88,13,4}, -{88,13,5}, -{88,13,6}, -{88,13,7}, -{88,13,8}, -{88,13,9}, -{88,13,10}, -{88,13,11}, -{88,13,12}, -{88,13,13}, -{88,14,-18}, -{88,14,-17}, -{88,14,-16}, -{88,14,-15}, -{88,14,-14}, -{88,14,-13}, -{88,14,-12}, -{88,14,-11}, -{88,14,-10}, -{88,14,-9}, -{88,14,-8}, -{88,14,-7}, -{88,14,-6}, -{88,14,-5}, -{88,14,-4}, -{88,14,-3}, -{88,14,-2}, -{88,14,-1}, -{88,14,0}, -{88,14,1}, -{88,14,2}, -{88,14,3}, -{88,14,4}, -{88,14,5}, -{88,14,6}, -{88,14,7}, -{88,14,8}, -{88,14,9}, -{88,14,10}, -{88,14,11}, -{88,15,-18}, -{88,15,-17}, -{88,15,-16}, -{88,15,-15}, -{88,15,-14}, -{88,15,-13}, -{88,15,-12}, -{88,15,-11}, -{88,15,-10}, -{88,15,-9}, -{88,15,-8}, -{88,15,-7}, -{88,15,-6}, -{88,15,-5}, -{88,15,-4}, -{88,15,-3}, -{88,15,-2}, -{88,15,-1}, -{88,15,0}, -{88,15,1}, -{88,15,2}, -{88,15,3}, -{88,15,4}, -{88,15,5}, -{88,15,6}, -{88,15,7}, -{88,15,8}, -{88,16,-18}, -{88,16,-17}, -{88,16,-16}, -{88,16,-15}, -{88,16,-14}, -{88,16,-13}, -{88,16,-12}, -{88,16,-11}, -{88,16,-10}, -{88,16,-9}, -{88,16,-8}, -{88,16,-7}, -{88,16,-6}, -{88,16,-5}, -{88,16,-4}, -{88,16,-3}, -{88,16,-2}, -{88,16,-1}, -{88,16,0}, -{88,16,1}, -{88,16,2}, -{88,16,3}, -{88,16,4}, -{88,16,5}, -{88,17,-18}, -{88,17,-17}, -{88,17,-16}, -{88,17,-15}, -{88,17,-14}, -{88,17,-13}, -{88,17,-12}, -{88,17,-11}, -{88,17,-10}, -{88,17,-9}, -{88,17,-8}, -{88,17,-7}, -{88,17,-6}, -{88,17,-5}, -{88,17,-4}, -{88,17,-3}, -{88,17,-2}, -{88,17,-1}, -{88,17,0}, -{88,17,1}, -{88,17,2}, -{88,17,3}, -{88,18,-18}, -{88,18,-17}, -{88,18,-16}, -{88,18,-15}, -{88,18,-14}, -{88,18,-13}, -{88,18,-12}, -{88,18,-11}, -{88,18,-10}, -{88,18,-9}, -{88,18,-8}, -{88,18,-7}, -{88,18,-6}, -{88,18,-5}, -{88,18,-4}, -{88,18,-3}, -{88,18,-2}, -{88,18,-1}, -{88,18,0}, -{88,19,-18}, -{88,19,-17}, -{88,19,-16}, -{88,19,-15}, -{88,19,-14}, -{88,19,-13}, -{88,19,-12}, -{88,19,-11}, -{88,19,-10}, -{88,19,-9}, -{88,19,-8}, -{88,19,-7}, -{88,19,-6}, -{88,19,-5}, -{88,19,-4}, -{88,19,-3}, -{88,19,-2}, -{88,20,-18}, -{88,20,-17}, -{88,20,-16}, -{88,20,-15}, -{88,20,-14}, -{88,20,-13}, -{88,20,-12}, -{88,20,-11}, -{88,20,-10}, -{88,20,-9}, -{88,20,-8}, -{88,20,-7}, -{88,20,-6}, -{88,20,-5}, -{88,21,-18}, -{88,21,-17}, -{88,21,-16}, -{88,21,-15}, -{88,21,-14}, -{88,21,-13}, -{88,21,-12}, -{88,21,-11}, -{88,21,-10}, -{88,21,-9}, -{88,21,-8}, -{88,21,-7}, -{88,22,-18}, -{88,22,-17}, -{88,22,-16}, -{88,22,-15}, -{88,22,-14}, -{88,22,-13}, -{88,22,-12}, -{88,22,-11}, -{88,22,-10}, -{88,22,-9}, -{88,23,-18}, -{88,23,-17}, -{88,23,-16}, -{88,23,-15}, -{88,23,-14}, -{88,23,-13}, -{88,23,-12}, -{88,24,-17}, -{88,24,-16}, -{88,24,-15}, -{88,24,-14}, -{88,25,-17}, -{88,25,-16}, -{89,-75,72}, -{89,-75,73}, -{89,-75,74}, -{89,-75,75}, -{89,-75,76}, -{89,-75,77}, -{89,-75,78}, -{89,-75,79}, -{89,-75,80}, -{89,-75,81}, -{89,-75,82}, -{89,-75,83}, -{89,-75,84}, -{89,-74,59}, -{89,-74,60}, -{89,-74,61}, -{89,-74,62}, -{89,-74,63}, -{89,-74,64}, -{89,-74,65}, -{89,-74,66}, -{89,-74,67}, -{89,-74,68}, -{89,-74,69}, -{89,-74,70}, -{89,-74,71}, -{89,-74,72}, -{89,-74,73}, -{89,-74,74}, -{89,-74,75}, -{89,-74,76}, -{89,-74,77}, -{89,-74,78}, -{89,-74,79}, -{89,-74,80}, -{89,-74,81}, -{89,-74,82}, -{89,-74,83}, -{89,-74,84}, -{89,-73,48}, -{89,-73,49}, -{89,-73,50}, -{89,-73,51}, -{89,-73,52}, -{89,-73,53}, -{89,-73,54}, -{89,-73,55}, -{89,-73,56}, -{89,-73,57}, -{89,-73,58}, -{89,-73,59}, -{89,-73,60}, -{89,-73,61}, -{89,-73,62}, -{89,-73,63}, -{89,-73,64}, -{89,-73,65}, -{89,-73,66}, -{89,-73,67}, -{89,-73,68}, -{89,-73,69}, -{89,-73,70}, -{89,-73,71}, -{89,-73,72}, -{89,-73,73}, -{89,-73,74}, -{89,-73,75}, -{89,-73,76}, -{89,-73,77}, -{89,-73,78}, -{89,-73,79}, -{89,-73,80}, -{89,-73,81}, -{89,-73,82}, -{89,-73,83}, -{89,-73,84}, -{89,-72,38}, -{89,-72,39}, -{89,-72,40}, -{89,-72,41}, -{89,-72,42}, -{89,-72,43}, -{89,-72,44}, -{89,-72,45}, -{89,-72,46}, -{89,-72,47}, -{89,-72,48}, -{89,-72,49}, -{89,-72,50}, -{89,-72,51}, -{89,-72,52}, -{89,-72,53}, -{89,-72,54}, -{89,-72,55}, -{89,-72,56}, -{89,-72,57}, -{89,-72,58}, -{89,-72,59}, -{89,-72,60}, -{89,-72,61}, -{89,-72,62}, -{89,-72,63}, -{89,-72,64}, -{89,-72,65}, -{89,-72,66}, -{89,-72,67}, -{89,-72,68}, -{89,-72,69}, -{89,-72,70}, -{89,-72,71}, -{89,-72,72}, -{89,-72,73}, -{89,-72,74}, -{89,-72,75}, -{89,-72,76}, -{89,-72,77}, -{89,-72,78}, -{89,-72,79}, -{89,-72,80}, -{89,-72,81}, -{89,-72,82}, -{89,-72,83}, -{89,-72,84}, -{89,-72,85}, -{89,-71,31}, -{89,-71,32}, -{89,-71,33}, -{89,-71,34}, -{89,-71,35}, -{89,-71,36}, -{89,-71,37}, -{89,-71,38}, -{89,-71,39}, -{89,-71,40}, -{89,-71,41}, -{89,-71,42}, -{89,-71,43}, -{89,-71,44}, -{89,-71,45}, -{89,-71,46}, -{89,-71,47}, -{89,-71,48}, -{89,-71,49}, -{89,-71,50}, -{89,-71,51}, -{89,-71,52}, -{89,-71,53}, -{89,-71,54}, -{89,-71,55}, -{89,-71,56}, -{89,-71,57}, -{89,-71,58}, -{89,-71,59}, -{89,-71,60}, -{89,-71,61}, -{89,-71,62}, -{89,-71,63}, -{89,-71,64}, -{89,-71,65}, -{89,-71,66}, -{89,-71,67}, -{89,-71,68}, -{89,-71,69}, -{89,-71,70}, -{89,-71,71}, -{89,-71,72}, -{89,-71,73}, -{89,-71,74}, -{89,-71,75}, -{89,-71,76}, -{89,-71,77}, -{89,-71,78}, -{89,-71,79}, -{89,-71,80}, -{89,-71,81}, -{89,-71,82}, -{89,-71,83}, -{89,-71,84}, -{89,-71,85}, -{89,-70,29}, -{89,-70,30}, -{89,-70,31}, -{89,-70,32}, -{89,-70,33}, -{89,-70,34}, -{89,-70,35}, -{89,-70,36}, -{89,-70,37}, -{89,-70,38}, -{89,-70,39}, -{89,-70,40}, -{89,-70,41}, -{89,-70,42}, -{89,-70,43}, -{89,-70,44}, -{89,-70,45}, -{89,-70,46}, -{89,-70,47}, -{89,-70,48}, -{89,-70,49}, -{89,-70,50}, -{89,-70,51}, -{89,-70,52}, -{89,-70,53}, -{89,-70,54}, -{89,-70,55}, -{89,-70,56}, -{89,-70,57}, -{89,-70,58}, -{89,-70,59}, -{89,-70,60}, -{89,-70,61}, -{89,-70,62}, -{89,-70,63}, -{89,-70,64}, -{89,-70,65}, -{89,-70,66}, -{89,-70,67}, -{89,-70,68}, -{89,-70,69}, -{89,-70,70}, -{89,-70,71}, -{89,-70,72}, -{89,-70,73}, -{89,-70,74}, -{89,-70,75}, -{89,-70,76}, -{89,-70,77}, -{89,-70,78}, -{89,-70,79}, -{89,-70,80}, -{89,-70,81}, -{89,-70,82}, -{89,-70,83}, -{89,-70,84}, -{89,-70,85}, -{89,-69,27}, -{89,-69,28}, -{89,-69,29}, -{89,-69,30}, -{89,-69,31}, -{89,-69,32}, -{89,-69,33}, -{89,-69,34}, -{89,-69,35}, -{89,-69,36}, -{89,-69,37}, -{89,-69,38}, -{89,-69,39}, -{89,-69,40}, -{89,-69,41}, -{89,-69,42}, -{89,-69,43}, -{89,-69,44}, -{89,-69,45}, -{89,-69,46}, -{89,-69,47}, -{89,-69,48}, -{89,-69,49}, -{89,-69,50}, -{89,-69,51}, -{89,-69,52}, -{89,-69,53}, -{89,-69,54}, -{89,-69,55}, -{89,-69,56}, -{89,-69,57}, -{89,-69,58}, -{89,-69,59}, -{89,-69,60}, -{89,-69,61}, -{89,-69,62}, -{89,-69,63}, -{89,-69,64}, -{89,-69,65}, -{89,-69,66}, -{89,-69,67}, -{89,-69,68}, -{89,-69,69}, -{89,-69,70}, -{89,-69,71}, -{89,-69,72}, -{89,-69,73}, -{89,-69,74}, -{89,-69,75}, -{89,-69,76}, -{89,-69,77}, -{89,-69,78}, -{89,-69,79}, -{89,-69,80}, -{89,-69,81}, -{89,-69,82}, -{89,-69,83}, -{89,-69,84}, -{89,-69,85}, -{89,-68,24}, -{89,-68,25}, -{89,-68,26}, -{89,-68,27}, -{89,-68,28}, -{89,-68,29}, -{89,-68,30}, -{89,-68,31}, -{89,-68,32}, -{89,-68,33}, -{89,-68,34}, -{89,-68,35}, -{89,-68,36}, -{89,-68,37}, -{89,-68,38}, -{89,-68,39}, -{89,-68,40}, -{89,-68,41}, -{89,-68,42}, -{89,-68,43}, -{89,-68,44}, -{89,-68,45}, -{89,-68,46}, -{89,-68,47}, -{89,-68,48}, -{89,-68,49}, -{89,-68,50}, -{89,-68,51}, -{89,-68,52}, -{89,-68,53}, -{89,-68,54}, -{89,-68,55}, -{89,-68,56}, -{89,-68,57}, -{89,-68,58}, -{89,-68,59}, -{89,-68,60}, -{89,-68,61}, -{89,-68,62}, -{89,-68,63}, -{89,-68,64}, -{89,-68,65}, -{89,-68,66}, -{89,-68,67}, -{89,-68,68}, -{89,-68,69}, -{89,-68,70}, -{89,-68,71}, -{89,-68,72}, -{89,-68,73}, -{89,-68,74}, -{89,-68,75}, -{89,-68,76}, -{89,-68,77}, -{89,-68,78}, -{89,-68,79}, -{89,-68,80}, -{89,-68,81}, -{89,-68,82}, -{89,-68,83}, -{89,-68,84}, -{89,-68,85}, -{89,-67,22}, -{89,-67,23}, -{89,-67,24}, -{89,-67,25}, -{89,-67,26}, -{89,-67,27}, -{89,-67,28}, -{89,-67,29}, -{89,-67,30}, -{89,-67,31}, -{89,-67,32}, -{89,-67,33}, -{89,-67,34}, -{89,-67,35}, -{89,-67,36}, -{89,-67,37}, -{89,-67,38}, -{89,-67,39}, -{89,-67,40}, -{89,-67,41}, -{89,-67,42}, -{89,-67,43}, -{89,-67,44}, -{89,-67,45}, -{89,-67,46}, -{89,-67,47}, -{89,-67,48}, -{89,-67,49}, -{89,-67,50}, -{89,-67,51}, -{89,-67,52}, -{89,-67,53}, -{89,-67,54}, -{89,-67,55}, -{89,-67,56}, -{89,-67,57}, -{89,-67,58}, -{89,-67,59}, -{89,-67,60}, -{89,-67,61}, -{89,-67,62}, -{89,-67,63}, -{89,-67,64}, -{89,-67,65}, -{89,-67,66}, -{89,-67,67}, -{89,-67,68}, -{89,-67,69}, -{89,-67,70}, -{89,-67,71}, -{89,-67,72}, -{89,-67,73}, -{89,-67,74}, -{89,-67,75}, -{89,-67,76}, -{89,-67,77}, -{89,-67,78}, -{89,-67,79}, -{89,-67,80}, -{89,-67,81}, -{89,-67,82}, -{89,-67,83}, -{89,-67,84}, -{89,-67,85}, -{89,-66,20}, -{89,-66,21}, -{89,-66,22}, -{89,-66,23}, -{89,-66,24}, -{89,-66,25}, -{89,-66,26}, -{89,-66,27}, -{89,-66,28}, -{89,-66,29}, -{89,-66,30}, -{89,-66,31}, -{89,-66,32}, -{89,-66,33}, -{89,-66,34}, -{89,-66,35}, -{89,-66,36}, -{89,-66,37}, -{89,-66,38}, -{89,-66,39}, -{89,-66,40}, -{89,-66,41}, -{89,-66,42}, -{89,-66,43}, -{89,-66,44}, -{89,-66,45}, -{89,-66,46}, -{89,-66,47}, -{89,-66,48}, -{89,-66,49}, -{89,-66,50}, -{89,-66,51}, -{89,-66,52}, -{89,-66,53}, -{89,-66,54}, -{89,-66,55}, -{89,-66,56}, -{89,-66,57}, -{89,-66,58}, -{89,-66,59}, -{89,-66,60}, -{89,-66,61}, -{89,-66,62}, -{89,-66,63}, -{89,-66,64}, -{89,-66,65}, -{89,-66,66}, -{89,-66,67}, -{89,-66,68}, -{89,-66,69}, -{89,-66,70}, -{89,-66,71}, -{89,-66,72}, -{89,-66,73}, -{89,-66,74}, -{89,-66,75}, -{89,-66,76}, -{89,-66,77}, -{89,-66,78}, -{89,-66,79}, -{89,-66,80}, -{89,-66,81}, -{89,-66,82}, -{89,-66,83}, -{89,-66,84}, -{89,-66,85}, -{89,-65,18}, -{89,-65,19}, -{89,-65,20}, -{89,-65,21}, -{89,-65,22}, -{89,-65,23}, -{89,-65,24}, -{89,-65,25}, -{89,-65,26}, -{89,-65,27}, -{89,-65,28}, -{89,-65,29}, -{89,-65,30}, -{89,-65,31}, -{89,-65,32}, -{89,-65,33}, -{89,-65,34}, -{89,-65,35}, -{89,-65,36}, -{89,-65,37}, -{89,-65,38}, -{89,-65,39}, -{89,-65,40}, -{89,-65,41}, -{89,-65,42}, -{89,-65,43}, -{89,-65,44}, -{89,-65,45}, -{89,-65,46}, -{89,-65,47}, -{89,-65,48}, -{89,-65,49}, -{89,-65,50}, -{89,-65,51}, -{89,-65,52}, -{89,-65,53}, -{89,-65,54}, -{89,-65,55}, -{89,-65,56}, -{89,-65,57}, -{89,-65,58}, -{89,-65,59}, -{89,-65,60}, -{89,-65,61}, -{89,-65,62}, -{89,-65,63}, -{89,-65,64}, -{89,-65,65}, -{89,-65,66}, -{89,-65,67}, -{89,-65,68}, -{89,-65,69}, -{89,-65,70}, -{89,-65,71}, -{89,-65,72}, -{89,-65,73}, -{89,-65,74}, -{89,-65,75}, -{89,-65,76}, -{89,-65,77}, -{89,-65,78}, -{89,-65,79}, -{89,-65,80}, -{89,-65,81}, -{89,-65,82}, -{89,-65,83}, -{89,-65,84}, -{89,-65,85}, -{89,-64,16}, -{89,-64,17}, -{89,-64,18}, -{89,-64,19}, -{89,-64,20}, -{89,-64,21}, -{89,-64,22}, -{89,-64,23}, -{89,-64,24}, -{89,-64,25}, -{89,-64,26}, -{89,-64,27}, -{89,-64,28}, -{89,-64,29}, -{89,-64,30}, -{89,-64,31}, -{89,-64,32}, -{89,-64,33}, -{89,-64,34}, -{89,-64,35}, -{89,-64,36}, -{89,-64,37}, -{89,-64,38}, -{89,-64,39}, -{89,-64,40}, -{89,-64,41}, -{89,-64,42}, -{89,-64,43}, -{89,-64,44}, -{89,-64,45}, -{89,-64,46}, -{89,-64,47}, -{89,-64,48}, -{89,-64,49}, -{89,-64,50}, -{89,-64,51}, -{89,-64,52}, -{89,-64,53}, -{89,-64,54}, -{89,-64,55}, -{89,-64,56}, -{89,-64,57}, -{89,-64,58}, -{89,-64,59}, -{89,-64,60}, -{89,-64,61}, -{89,-64,62}, -{89,-64,63}, -{89,-64,64}, -{89,-64,65}, -{89,-64,66}, -{89,-64,67}, -{89,-64,68}, -{89,-64,69}, -{89,-64,70}, -{89,-64,71}, -{89,-64,72}, -{89,-64,73}, -{89,-64,74}, -{89,-64,75}, -{89,-64,76}, -{89,-64,77}, -{89,-64,78}, -{89,-64,79}, -{89,-64,80}, -{89,-64,81}, -{89,-64,82}, -{89,-64,83}, -{89,-64,84}, -{89,-64,85}, -{89,-63,14}, -{89,-63,15}, -{89,-63,16}, -{89,-63,17}, -{89,-63,18}, -{89,-63,19}, -{89,-63,20}, -{89,-63,21}, -{89,-63,22}, -{89,-63,23}, -{89,-63,24}, -{89,-63,25}, -{89,-63,26}, -{89,-63,27}, -{89,-63,28}, -{89,-63,29}, -{89,-63,30}, -{89,-63,31}, -{89,-63,32}, -{89,-63,33}, -{89,-63,34}, -{89,-63,35}, -{89,-63,36}, -{89,-63,37}, -{89,-63,38}, -{89,-63,39}, -{89,-63,40}, -{89,-63,41}, -{89,-63,42}, -{89,-63,43}, -{89,-63,44}, -{89,-63,45}, -{89,-63,46}, -{89,-63,47}, -{89,-63,48}, -{89,-63,49}, -{89,-63,50}, -{89,-63,51}, -{89,-63,52}, -{89,-63,53}, -{89,-63,54}, -{89,-63,55}, -{89,-63,56}, -{89,-63,57}, -{89,-63,58}, -{89,-63,59}, -{89,-63,60}, -{89,-63,61}, -{89,-63,62}, -{89,-63,63}, -{89,-63,64}, -{89,-63,65}, -{89,-63,66}, -{89,-63,67}, -{89,-63,68}, -{89,-63,69}, -{89,-63,70}, -{89,-63,71}, -{89,-63,72}, -{89,-63,73}, -{89,-63,74}, -{89,-63,75}, -{89,-63,76}, -{89,-63,77}, -{89,-63,78}, -{89,-63,79}, -{89,-63,80}, -{89,-63,81}, -{89,-63,82}, -{89,-63,83}, -{89,-63,84}, -{89,-63,85}, -{89,-62,12}, -{89,-62,13}, -{89,-62,14}, -{89,-62,15}, -{89,-62,16}, -{89,-62,17}, -{89,-62,18}, -{89,-62,19}, -{89,-62,20}, -{89,-62,21}, -{89,-62,22}, -{89,-62,23}, -{89,-62,24}, -{89,-62,25}, -{89,-62,26}, -{89,-62,27}, -{89,-62,28}, -{89,-62,29}, -{89,-62,30}, -{89,-62,31}, -{89,-62,32}, -{89,-62,33}, -{89,-62,34}, -{89,-62,35}, -{89,-62,36}, -{89,-62,37}, -{89,-62,38}, -{89,-62,39}, -{89,-62,40}, -{89,-62,41}, -{89,-62,42}, -{89,-62,43}, -{89,-62,44}, -{89,-62,45}, -{89,-62,46}, -{89,-62,47}, -{89,-62,48}, -{89,-62,49}, -{89,-62,50}, -{89,-62,51}, -{89,-62,52}, -{89,-62,53}, -{89,-62,54}, -{89,-62,55}, -{89,-62,56}, -{89,-62,57}, -{89,-62,58}, -{89,-62,59}, -{89,-62,60}, -{89,-62,61}, -{89,-62,62}, -{89,-62,63}, -{89,-62,64}, -{89,-62,65}, -{89,-62,66}, -{89,-62,67}, -{89,-62,68}, -{89,-62,69}, -{89,-62,70}, -{89,-62,71}, -{89,-62,72}, -{89,-62,73}, -{89,-62,74}, -{89,-62,75}, -{89,-62,76}, -{89,-62,77}, -{89,-62,78}, -{89,-62,79}, -{89,-62,80}, -{89,-62,81}, -{89,-62,82}, -{89,-62,83}, -{89,-62,84}, -{89,-62,85}, -{89,-61,10}, -{89,-61,11}, -{89,-61,12}, -{89,-61,13}, -{89,-61,14}, -{89,-61,15}, -{89,-61,16}, -{89,-61,17}, -{89,-61,18}, -{89,-61,19}, -{89,-61,20}, -{89,-61,21}, -{89,-61,22}, -{89,-61,23}, -{89,-61,24}, -{89,-61,25}, -{89,-61,26}, -{89,-61,27}, -{89,-61,28}, -{89,-61,29}, -{89,-61,30}, -{89,-61,31}, -{89,-61,32}, -{89,-61,33}, -{89,-61,34}, -{89,-61,35}, -{89,-61,36}, -{89,-61,37}, -{89,-61,38}, -{89,-61,39}, -{89,-61,40}, -{89,-61,41}, -{89,-61,42}, -{89,-61,43}, -{89,-61,44}, -{89,-61,45}, -{89,-61,46}, -{89,-61,47}, -{89,-61,48}, -{89,-61,49}, -{89,-61,50}, -{89,-61,51}, -{89,-61,52}, -{89,-61,53}, -{89,-61,54}, -{89,-61,55}, -{89,-61,56}, -{89,-61,57}, -{89,-61,58}, -{89,-61,59}, -{89,-61,60}, -{89,-61,61}, -{89,-61,62}, -{89,-61,63}, -{89,-61,64}, -{89,-61,65}, -{89,-61,66}, -{89,-61,67}, -{89,-61,68}, -{89,-61,69}, -{89,-61,70}, -{89,-61,71}, -{89,-61,72}, -{89,-61,73}, -{89,-61,74}, -{89,-61,75}, -{89,-61,76}, -{89,-61,77}, -{89,-61,78}, -{89,-61,79}, -{89,-61,80}, -{89,-61,81}, -{89,-61,82}, -{89,-61,83}, -{89,-61,84}, -{89,-61,85}, -{89,-60,8}, -{89,-60,9}, -{89,-60,10}, -{89,-60,11}, -{89,-60,12}, -{89,-60,13}, -{89,-60,14}, -{89,-60,15}, -{89,-60,16}, -{89,-60,17}, -{89,-60,18}, -{89,-60,19}, -{89,-60,20}, -{89,-60,21}, -{89,-60,22}, -{89,-60,23}, -{89,-60,24}, -{89,-60,25}, -{89,-60,26}, -{89,-60,27}, -{89,-60,28}, -{89,-60,29}, -{89,-60,30}, -{89,-60,31}, -{89,-60,32}, -{89,-60,33}, -{89,-60,34}, -{89,-60,35}, -{89,-60,36}, -{89,-60,37}, -{89,-60,38}, -{89,-60,39}, -{89,-60,40}, -{89,-60,41}, -{89,-60,42}, -{89,-60,43}, -{89,-60,44}, -{89,-60,45}, -{89,-60,46}, -{89,-60,47}, -{89,-60,48}, -{89,-60,49}, -{89,-60,50}, -{89,-60,51}, -{89,-60,52}, -{89,-60,53}, -{89,-60,54}, -{89,-60,55}, -{89,-60,56}, -{89,-60,57}, -{89,-60,58}, -{89,-60,59}, -{89,-60,60}, -{89,-60,61}, -{89,-60,62}, -{89,-60,63}, -{89,-60,64}, -{89,-60,65}, -{89,-60,66}, -{89,-60,67}, -{89,-60,68}, -{89,-60,69}, -{89,-60,70}, -{89,-60,71}, -{89,-60,72}, -{89,-60,73}, -{89,-60,74}, -{89,-60,75}, -{89,-60,76}, -{89,-60,77}, -{89,-60,78}, -{89,-60,79}, -{89,-60,80}, -{89,-60,81}, -{89,-60,82}, -{89,-60,83}, -{89,-60,84}, -{89,-60,85}, -{89,-59,6}, -{89,-59,7}, -{89,-59,8}, -{89,-59,9}, -{89,-59,10}, -{89,-59,11}, -{89,-59,12}, -{89,-59,13}, -{89,-59,14}, -{89,-59,15}, -{89,-59,16}, -{89,-59,17}, -{89,-59,18}, -{89,-59,19}, -{89,-59,20}, -{89,-59,21}, -{89,-59,22}, -{89,-59,23}, -{89,-59,24}, -{89,-59,25}, -{89,-59,26}, -{89,-59,27}, -{89,-59,28}, -{89,-59,29}, -{89,-59,30}, -{89,-59,31}, -{89,-59,32}, -{89,-59,33}, -{89,-59,34}, -{89,-59,35}, -{89,-59,36}, -{89,-59,37}, -{89,-59,38}, -{89,-59,39}, -{89,-59,40}, -{89,-59,41}, -{89,-59,42}, -{89,-59,43}, -{89,-59,44}, -{89,-59,45}, -{89,-59,46}, -{89,-59,47}, -{89,-59,48}, -{89,-59,49}, -{89,-59,50}, -{89,-59,51}, -{89,-59,52}, -{89,-59,53}, -{89,-59,54}, -{89,-59,55}, -{89,-59,56}, -{89,-59,57}, -{89,-59,58}, -{89,-59,59}, -{89,-59,60}, -{89,-59,61}, -{89,-59,62}, -{89,-59,63}, -{89,-59,64}, -{89,-59,65}, -{89,-59,66}, -{89,-59,67}, -{89,-59,68}, -{89,-59,69}, -{89,-59,70}, -{89,-59,71}, -{89,-59,72}, -{89,-59,73}, -{89,-59,74}, -{89,-59,75}, -{89,-59,76}, -{89,-59,77}, -{89,-59,78}, -{89,-59,79}, -{89,-59,80}, -{89,-59,81}, -{89,-59,82}, -{89,-59,83}, -{89,-59,84}, -{89,-59,85}, -{89,-58,5}, -{89,-58,6}, -{89,-58,7}, -{89,-58,8}, -{89,-58,9}, -{89,-58,10}, -{89,-58,11}, -{89,-58,12}, -{89,-58,13}, -{89,-58,14}, -{89,-58,15}, -{89,-58,16}, -{89,-58,17}, -{89,-58,18}, -{89,-58,19}, -{89,-58,20}, -{89,-58,21}, -{89,-58,22}, -{89,-58,23}, -{89,-58,24}, -{89,-58,25}, -{89,-58,26}, -{89,-58,27}, -{89,-58,28}, -{89,-58,29}, -{89,-58,30}, -{89,-58,31}, -{89,-58,32}, -{89,-58,33}, -{89,-58,34}, -{89,-58,35}, -{89,-58,36}, -{89,-58,37}, -{89,-58,38}, -{89,-58,39}, -{89,-58,40}, -{89,-58,41}, -{89,-58,42}, -{89,-58,43}, -{89,-58,44}, -{89,-58,45}, -{89,-58,46}, -{89,-58,47}, -{89,-58,48}, -{89,-58,49}, -{89,-58,50}, -{89,-58,51}, -{89,-58,52}, -{89,-58,53}, -{89,-58,54}, -{89,-58,55}, -{89,-58,56}, -{89,-58,57}, -{89,-58,58}, -{89,-58,59}, -{89,-58,60}, -{89,-58,61}, -{89,-58,62}, -{89,-58,63}, -{89,-58,64}, -{89,-58,65}, -{89,-58,66}, -{89,-58,67}, -{89,-58,68}, -{89,-58,69}, -{89,-58,70}, -{89,-58,71}, -{89,-58,72}, -{89,-58,73}, -{89,-58,74}, -{89,-58,75}, -{89,-58,76}, -{89,-58,77}, -{89,-58,78}, -{89,-58,79}, -{89,-58,80}, -{89,-58,81}, -{89,-58,82}, -{89,-58,83}, -{89,-58,84}, -{89,-58,85}, -{89,-57,3}, -{89,-57,4}, -{89,-57,5}, -{89,-57,6}, -{89,-57,7}, -{89,-57,8}, -{89,-57,9}, -{89,-57,10}, -{89,-57,11}, -{89,-57,12}, -{89,-57,13}, -{89,-57,14}, -{89,-57,15}, -{89,-57,16}, -{89,-57,17}, -{89,-57,18}, -{89,-57,19}, -{89,-57,20}, -{89,-57,21}, -{89,-57,22}, -{89,-57,23}, -{89,-57,24}, -{89,-57,25}, -{89,-57,26}, -{89,-57,27}, -{89,-57,28}, -{89,-57,29}, -{89,-57,30}, -{89,-57,31}, -{89,-57,32}, -{89,-57,33}, -{89,-57,34}, -{89,-57,35}, -{89,-57,36}, -{89,-57,37}, -{89,-57,38}, -{89,-57,39}, -{89,-57,40}, -{89,-57,41}, -{89,-57,42}, -{89,-57,43}, -{89,-57,44}, -{89,-57,45}, -{89,-57,46}, -{89,-57,47}, -{89,-57,48}, -{89,-57,49}, -{89,-57,50}, -{89,-57,51}, -{89,-57,52}, -{89,-57,53}, -{89,-57,54}, -{89,-57,55}, -{89,-57,56}, -{89,-57,57}, -{89,-57,58}, -{89,-57,59}, -{89,-57,60}, -{89,-57,61}, -{89,-57,62}, -{89,-57,63}, -{89,-57,64}, -{89,-57,65}, -{89,-57,66}, -{89,-57,67}, -{89,-57,68}, -{89,-57,69}, -{89,-57,70}, -{89,-57,71}, -{89,-57,72}, -{89,-57,73}, -{89,-57,74}, -{89,-57,75}, -{89,-57,76}, -{89,-57,77}, -{89,-57,78}, -{89,-57,79}, -{89,-57,80}, -{89,-57,81}, -{89,-57,82}, -{89,-57,83}, -{89,-57,84}, -{89,-57,85}, -{89,-56,1}, -{89,-56,2}, -{89,-56,3}, -{89,-56,4}, -{89,-56,5}, -{89,-56,6}, -{89,-56,7}, -{89,-56,8}, -{89,-56,9}, -{89,-56,10}, -{89,-56,11}, -{89,-56,12}, -{89,-56,13}, -{89,-56,14}, -{89,-56,15}, -{89,-56,16}, -{89,-56,17}, -{89,-56,18}, -{89,-56,19}, -{89,-56,20}, -{89,-56,21}, -{89,-56,22}, -{89,-56,23}, -{89,-56,24}, -{89,-56,25}, -{89,-56,26}, -{89,-56,27}, -{89,-56,28}, -{89,-56,29}, -{89,-56,30}, -{89,-56,31}, -{89,-56,32}, -{89,-56,33}, -{89,-56,34}, -{89,-56,35}, -{89,-56,36}, -{89,-56,37}, -{89,-56,38}, -{89,-56,39}, -{89,-56,40}, -{89,-56,41}, -{89,-56,42}, -{89,-56,43}, -{89,-56,44}, -{89,-56,45}, -{89,-56,46}, -{89,-56,47}, -{89,-56,48}, -{89,-56,49}, -{89,-56,50}, -{89,-56,51}, -{89,-56,52}, -{89,-56,53}, -{89,-56,54}, -{89,-56,55}, -{89,-56,56}, -{89,-56,57}, -{89,-56,58}, -{89,-56,59}, -{89,-56,60}, -{89,-56,61}, -{89,-56,62}, -{89,-56,63}, -{89,-56,64}, -{89,-56,65}, -{89,-56,66}, -{89,-56,67}, -{89,-56,68}, -{89,-56,69}, -{89,-56,70}, -{89,-56,71}, -{89,-56,72}, -{89,-56,73}, -{89,-56,74}, -{89,-56,75}, -{89,-56,76}, -{89,-56,77}, -{89,-56,78}, -{89,-56,79}, -{89,-56,80}, -{89,-56,81}, -{89,-56,82}, -{89,-56,83}, -{89,-56,84}, -{89,-56,85}, -{89,-55,-1}, -{89,-55,0}, -{89,-55,1}, -{89,-55,2}, -{89,-55,3}, -{89,-55,4}, -{89,-55,5}, -{89,-55,6}, -{89,-55,7}, -{89,-55,8}, -{89,-55,9}, -{89,-55,10}, -{89,-55,11}, -{89,-55,12}, -{89,-55,13}, -{89,-55,14}, -{89,-55,15}, -{89,-55,16}, -{89,-55,17}, -{89,-55,18}, -{89,-55,19}, -{89,-55,20}, -{89,-55,21}, -{89,-55,22}, -{89,-55,23}, -{89,-55,24}, -{89,-55,25}, -{89,-55,26}, -{89,-55,27}, -{89,-55,28}, -{89,-55,29}, -{89,-55,30}, -{89,-55,31}, -{89,-55,32}, -{89,-55,33}, -{89,-55,34}, -{89,-55,35}, -{89,-55,36}, -{89,-55,37}, -{89,-55,38}, -{89,-55,39}, -{89,-55,40}, -{89,-55,41}, -{89,-55,42}, -{89,-55,43}, -{89,-55,44}, -{89,-55,45}, -{89,-55,46}, -{89,-55,47}, -{89,-55,48}, -{89,-55,49}, -{89,-55,50}, -{89,-55,51}, -{89,-55,52}, -{89,-55,53}, -{89,-55,54}, -{89,-55,55}, -{89,-55,56}, -{89,-55,57}, -{89,-55,58}, -{89,-55,59}, -{89,-55,60}, -{89,-55,61}, -{89,-55,62}, -{89,-55,63}, -{89,-55,64}, -{89,-55,65}, -{89,-55,66}, -{89,-55,67}, -{89,-55,68}, -{89,-55,69}, -{89,-55,70}, -{89,-55,71}, -{89,-55,72}, -{89,-55,73}, -{89,-55,74}, -{89,-55,75}, -{89,-55,76}, -{89,-55,77}, -{89,-55,78}, -{89,-55,79}, -{89,-55,80}, -{89,-55,81}, -{89,-55,82}, -{89,-55,83}, -{89,-55,84}, -{89,-55,85}, -{89,-54,-2}, -{89,-54,-1}, -{89,-54,0}, -{89,-54,1}, -{89,-54,2}, -{89,-54,3}, -{89,-54,4}, -{89,-54,5}, -{89,-54,6}, -{89,-54,7}, -{89,-54,8}, -{89,-54,9}, -{89,-54,10}, -{89,-54,11}, -{89,-54,12}, -{89,-54,13}, -{89,-54,14}, -{89,-54,15}, -{89,-54,16}, -{89,-54,17}, -{89,-54,18}, -{89,-54,19}, -{89,-54,20}, -{89,-54,21}, -{89,-54,22}, -{89,-54,23}, -{89,-54,24}, -{89,-54,25}, -{89,-54,26}, -{89,-54,27}, -{89,-54,28}, -{89,-54,29}, -{89,-54,30}, -{89,-54,31}, -{89,-54,32}, -{89,-54,33}, -{89,-54,34}, -{89,-54,35}, -{89,-54,36}, -{89,-54,37}, -{89,-54,38}, -{89,-54,39}, -{89,-54,40}, -{89,-54,41}, -{89,-54,42}, -{89,-54,43}, -{89,-54,44}, -{89,-54,45}, -{89,-54,46}, -{89,-54,47}, -{89,-54,48}, -{89,-54,49}, -{89,-54,50}, -{89,-54,51}, -{89,-54,52}, -{89,-54,53}, -{89,-54,54}, -{89,-54,55}, -{89,-54,56}, -{89,-54,57}, -{89,-54,58}, -{89,-54,59}, -{89,-54,60}, -{89,-54,61}, -{89,-54,62}, -{89,-54,63}, -{89,-54,64}, -{89,-54,65}, -{89,-54,66}, -{89,-54,67}, -{89,-54,68}, -{89,-54,69}, -{89,-54,70}, -{89,-54,71}, -{89,-54,72}, -{89,-54,73}, -{89,-54,74}, -{89,-54,75}, -{89,-54,76}, -{89,-54,77}, -{89,-54,78}, -{89,-54,79}, -{89,-54,80}, -{89,-54,81}, -{89,-54,82}, -{89,-54,83}, -{89,-54,84}, -{89,-54,85}, -{89,-53,-4}, -{89,-53,-3}, -{89,-53,-2}, -{89,-53,-1}, -{89,-53,0}, -{89,-53,1}, -{89,-53,2}, -{89,-53,3}, -{89,-53,4}, -{89,-53,5}, -{89,-53,6}, -{89,-53,7}, -{89,-53,8}, -{89,-53,9}, -{89,-53,10}, -{89,-53,11}, -{89,-53,12}, -{89,-53,13}, -{89,-53,14}, -{89,-53,15}, -{89,-53,16}, -{89,-53,17}, -{89,-53,18}, -{89,-53,19}, -{89,-53,20}, -{89,-53,21}, -{89,-53,22}, -{89,-53,23}, -{89,-53,24}, -{89,-53,25}, -{89,-53,26}, -{89,-53,27}, -{89,-53,28}, -{89,-53,29}, -{89,-53,30}, -{89,-53,31}, -{89,-53,32}, -{89,-53,33}, -{89,-53,34}, -{89,-53,35}, -{89,-53,36}, -{89,-53,37}, -{89,-53,38}, -{89,-53,39}, -{89,-53,40}, -{89,-53,41}, -{89,-53,42}, -{89,-53,43}, -{89,-53,44}, -{89,-53,45}, -{89,-53,46}, -{89,-53,47}, -{89,-53,48}, -{89,-53,49}, -{89,-53,50}, -{89,-53,51}, -{89,-53,52}, -{89,-53,53}, -{89,-53,54}, -{89,-53,55}, -{89,-53,56}, -{89,-53,57}, -{89,-53,58}, -{89,-53,59}, -{89,-53,60}, -{89,-53,61}, -{89,-53,62}, -{89,-53,63}, -{89,-53,64}, -{89,-53,65}, -{89,-53,66}, -{89,-53,67}, -{89,-53,68}, -{89,-53,69}, -{89,-53,70}, -{89,-53,71}, -{89,-53,72}, -{89,-53,73}, -{89,-53,74}, -{89,-53,75}, -{89,-53,76}, -{89,-53,77}, -{89,-53,78}, -{89,-53,79}, -{89,-53,80}, -{89,-53,81}, -{89,-53,82}, -{89,-53,83}, -{89,-53,84}, -{89,-53,85}, -{89,-52,-6}, -{89,-52,-5}, -{89,-52,-4}, -{89,-52,-3}, -{89,-52,-2}, -{89,-52,-1}, -{89,-52,0}, -{89,-52,1}, -{89,-52,2}, -{89,-52,3}, -{89,-52,4}, -{89,-52,5}, -{89,-52,6}, -{89,-52,7}, -{89,-52,8}, -{89,-52,9}, -{89,-52,10}, -{89,-52,11}, -{89,-52,12}, -{89,-52,13}, -{89,-52,14}, -{89,-52,15}, -{89,-52,16}, -{89,-52,17}, -{89,-52,18}, -{89,-52,19}, -{89,-52,20}, -{89,-52,21}, -{89,-52,22}, -{89,-52,23}, -{89,-52,24}, -{89,-52,25}, -{89,-52,26}, -{89,-52,27}, -{89,-52,28}, -{89,-52,29}, -{89,-52,30}, -{89,-52,31}, -{89,-52,32}, -{89,-52,33}, -{89,-52,34}, -{89,-52,35}, -{89,-52,36}, -{89,-52,37}, -{89,-52,38}, -{89,-52,39}, -{89,-52,40}, -{89,-52,41}, -{89,-52,42}, -{89,-52,43}, -{89,-52,44}, -{89,-52,45}, -{89,-52,46}, -{89,-52,47}, -{89,-52,48}, -{89,-52,49}, -{89,-52,50}, -{89,-52,51}, -{89,-52,52}, -{89,-52,53}, -{89,-52,54}, -{89,-52,55}, -{89,-52,56}, -{89,-52,57}, -{89,-52,58}, -{89,-52,59}, -{89,-52,60}, -{89,-52,61}, -{89,-52,62}, -{89,-52,63}, -{89,-52,64}, -{89,-52,65}, -{89,-52,66}, -{89,-52,67}, -{89,-52,68}, -{89,-52,69}, -{89,-52,70}, -{89,-52,71}, -{89,-52,72}, -{89,-52,73}, -{89,-52,74}, -{89,-52,75}, -{89,-52,76}, -{89,-52,77}, -{89,-52,78}, -{89,-52,79}, -{89,-52,80}, -{89,-52,81}, -{89,-52,82}, -{89,-52,83}, -{89,-52,84}, -{89,-52,85}, -{89,-52,86}, -{89,-51,-7}, -{89,-51,-6}, -{89,-51,-5}, -{89,-51,-4}, -{89,-51,-3}, -{89,-51,-2}, -{89,-51,-1}, -{89,-51,0}, -{89,-51,1}, -{89,-51,2}, -{89,-51,3}, -{89,-51,4}, -{89,-51,5}, -{89,-51,6}, -{89,-51,7}, -{89,-51,8}, -{89,-51,9}, -{89,-51,10}, -{89,-51,11}, -{89,-51,12}, -{89,-51,13}, -{89,-51,14}, -{89,-51,15}, -{89,-51,16}, -{89,-51,17}, -{89,-51,18}, -{89,-51,19}, -{89,-51,20}, -{89,-51,21}, -{89,-51,22}, -{89,-51,23}, -{89,-51,24}, -{89,-51,25}, -{89,-51,26}, -{89,-51,27}, -{89,-51,28}, -{89,-51,29}, -{89,-51,30}, -{89,-51,31}, -{89,-51,32}, -{89,-51,33}, -{89,-51,34}, -{89,-51,35}, -{89,-51,36}, -{89,-51,37}, -{89,-51,38}, -{89,-51,39}, -{89,-51,40}, -{89,-51,41}, -{89,-51,42}, -{89,-51,43}, -{89,-51,44}, -{89,-51,45}, -{89,-51,46}, -{89,-51,47}, -{89,-51,48}, -{89,-51,49}, -{89,-51,50}, -{89,-51,51}, -{89,-51,52}, -{89,-51,53}, -{89,-51,54}, -{89,-51,55}, -{89,-51,56}, -{89,-51,57}, -{89,-51,58}, -{89,-51,59}, -{89,-51,60}, -{89,-51,61}, -{89,-51,62}, -{89,-51,63}, -{89,-51,64}, -{89,-51,65}, -{89,-51,66}, -{89,-51,67}, -{89,-51,68}, -{89,-51,69}, -{89,-51,70}, -{89,-51,71}, -{89,-51,72}, -{89,-51,73}, -{89,-51,74}, -{89,-51,75}, -{89,-51,76}, -{89,-51,77}, -{89,-51,78}, -{89,-51,79}, -{89,-51,80}, -{89,-51,81}, -{89,-51,82}, -{89,-51,83}, -{89,-51,84}, -{89,-51,85}, -{89,-51,86}, -{89,-50,-9}, -{89,-50,-8}, -{89,-50,-7}, -{89,-50,-6}, -{89,-50,-5}, -{89,-50,-4}, -{89,-50,-3}, -{89,-50,-2}, -{89,-50,-1}, -{89,-50,0}, -{89,-50,1}, -{89,-50,2}, -{89,-50,3}, -{89,-50,4}, -{89,-50,5}, -{89,-50,6}, -{89,-50,7}, -{89,-50,8}, -{89,-50,9}, -{89,-50,10}, -{89,-50,11}, -{89,-50,12}, -{89,-50,13}, -{89,-50,14}, -{89,-50,15}, -{89,-50,16}, -{89,-50,17}, -{89,-50,18}, -{89,-50,19}, -{89,-50,20}, -{89,-50,21}, -{89,-50,22}, -{89,-50,23}, -{89,-50,24}, -{89,-50,25}, -{89,-50,26}, -{89,-50,27}, -{89,-50,28}, -{89,-50,29}, -{89,-50,30}, -{89,-50,31}, -{89,-50,32}, -{89,-50,33}, -{89,-50,34}, -{89,-50,35}, -{89,-50,36}, -{89,-50,37}, -{89,-50,38}, -{89,-50,39}, -{89,-50,40}, -{89,-50,41}, -{89,-50,42}, -{89,-50,43}, -{89,-50,44}, -{89,-50,45}, -{89,-50,46}, -{89,-50,47}, -{89,-50,48}, -{89,-50,49}, -{89,-50,50}, -{89,-50,51}, -{89,-50,52}, -{89,-50,53}, -{89,-50,54}, -{89,-50,55}, -{89,-50,56}, -{89,-50,57}, -{89,-50,58}, -{89,-50,59}, -{89,-50,60}, -{89,-50,61}, -{89,-50,62}, -{89,-50,63}, -{89,-50,64}, -{89,-50,65}, -{89,-50,66}, -{89,-50,67}, -{89,-50,68}, -{89,-50,69}, -{89,-50,70}, -{89,-50,71}, -{89,-50,72}, -{89,-50,73}, -{89,-50,74}, -{89,-50,75}, -{89,-50,76}, -{89,-50,77}, -{89,-50,78}, -{89,-50,79}, -{89,-50,80}, -{89,-50,81}, -{89,-50,82}, -{89,-50,83}, -{89,-50,84}, -{89,-50,85}, -{89,-50,86}, -{89,-49,-11}, -{89,-49,-10}, -{89,-49,-9}, -{89,-49,-8}, -{89,-49,-7}, -{89,-49,-6}, -{89,-49,-5}, -{89,-49,-4}, -{89,-49,-3}, -{89,-49,-2}, -{89,-49,-1}, -{89,-49,0}, -{89,-49,1}, -{89,-49,2}, -{89,-49,3}, -{89,-49,4}, -{89,-49,5}, -{89,-49,6}, -{89,-49,7}, -{89,-49,8}, -{89,-49,9}, -{89,-49,10}, -{89,-49,11}, -{89,-49,12}, -{89,-49,13}, -{89,-49,14}, -{89,-49,15}, -{89,-49,16}, -{89,-49,17}, -{89,-49,18}, -{89,-49,19}, -{89,-49,20}, -{89,-49,21}, -{89,-49,22}, -{89,-49,23}, -{89,-49,24}, -{89,-49,25}, -{89,-49,26}, -{89,-49,27}, -{89,-49,28}, -{89,-49,29}, -{89,-49,30}, -{89,-49,31}, -{89,-49,32}, -{89,-49,33}, -{89,-49,34}, -{89,-49,35}, -{89,-49,36}, -{89,-49,37}, -{89,-49,38}, -{89,-49,39}, -{89,-49,40}, -{89,-49,41}, -{89,-49,42}, -{89,-49,43}, -{89,-49,44}, -{89,-49,45}, -{89,-49,46}, -{89,-49,47}, -{89,-49,48}, -{89,-49,49}, -{89,-49,50}, -{89,-49,51}, -{89,-49,52}, -{89,-49,53}, -{89,-49,54}, -{89,-49,55}, -{89,-49,56}, -{89,-49,57}, -{89,-49,58}, -{89,-49,59}, -{89,-49,60}, -{89,-49,61}, -{89,-49,62}, -{89,-49,63}, -{89,-49,64}, -{89,-49,65}, -{89,-49,66}, -{89,-49,67}, -{89,-49,68}, -{89,-49,69}, -{89,-49,70}, -{89,-49,71}, -{89,-49,72}, -{89,-49,73}, -{89,-49,74}, -{89,-49,75}, -{89,-49,76}, -{89,-49,77}, -{89,-49,78}, -{89,-49,79}, -{89,-49,80}, -{89,-49,81}, -{89,-49,82}, -{89,-49,83}, -{89,-49,84}, -{89,-49,85}, -{89,-49,86}, -{89,-48,-12}, -{89,-48,-11}, -{89,-48,-10}, -{89,-48,-9}, -{89,-48,-8}, -{89,-48,-7}, -{89,-48,-6}, -{89,-48,-5}, -{89,-48,-4}, -{89,-48,-3}, -{89,-48,-2}, -{89,-48,-1}, -{89,-48,0}, -{89,-48,1}, -{89,-48,2}, -{89,-48,3}, -{89,-48,4}, -{89,-48,5}, -{89,-48,6}, -{89,-48,7}, -{89,-48,8}, -{89,-48,9}, -{89,-48,10}, -{89,-48,11}, -{89,-48,12}, -{89,-48,13}, -{89,-48,14}, -{89,-48,15}, -{89,-48,16}, -{89,-48,17}, -{89,-48,18}, -{89,-48,19}, -{89,-48,20}, -{89,-48,21}, -{89,-48,22}, -{89,-48,23}, -{89,-48,24}, -{89,-48,25}, -{89,-48,26}, -{89,-48,27}, -{89,-48,28}, -{89,-48,29}, -{89,-48,30}, -{89,-48,31}, -{89,-48,32}, -{89,-48,33}, -{89,-48,34}, -{89,-48,35}, -{89,-48,36}, -{89,-48,37}, -{89,-48,38}, -{89,-48,39}, -{89,-48,40}, -{89,-48,41}, -{89,-48,42}, -{89,-48,43}, -{89,-48,44}, -{89,-48,45}, -{89,-48,46}, -{89,-48,47}, -{89,-48,48}, -{89,-48,49}, -{89,-48,50}, -{89,-48,51}, -{89,-48,52}, -{89,-48,53}, -{89,-48,54}, -{89,-48,55}, -{89,-48,56}, -{89,-48,57}, -{89,-48,58}, -{89,-48,59}, -{89,-48,60}, -{89,-48,61}, -{89,-48,62}, -{89,-48,63}, -{89,-48,64}, -{89,-48,65}, -{89,-48,66}, -{89,-48,67}, -{89,-48,68}, -{89,-48,69}, -{89,-48,70}, -{89,-48,71}, -{89,-48,72}, -{89,-48,73}, -{89,-48,74}, -{89,-48,75}, -{89,-48,76}, -{89,-48,77}, -{89,-48,78}, -{89,-48,79}, -{89,-48,80}, -{89,-48,81}, -{89,-48,82}, -{89,-48,83}, -{89,-48,84}, -{89,-48,85}, -{89,-48,86}, -{89,-47,-14}, -{89,-47,-13}, -{89,-47,-12}, -{89,-47,-11}, -{89,-47,-10}, -{89,-47,-9}, -{89,-47,-8}, -{89,-47,-7}, -{89,-47,-6}, -{89,-47,-5}, -{89,-47,-4}, -{89,-47,-3}, -{89,-47,-2}, -{89,-47,-1}, -{89,-47,0}, -{89,-47,1}, -{89,-47,2}, -{89,-47,3}, -{89,-47,4}, -{89,-47,5}, -{89,-47,6}, -{89,-47,7}, -{89,-47,8}, -{89,-47,9}, -{89,-47,10}, -{89,-47,11}, -{89,-47,12}, -{89,-47,13}, -{89,-47,14}, -{89,-47,15}, -{89,-47,16}, -{89,-47,17}, -{89,-47,18}, -{89,-47,19}, -{89,-47,20}, -{89,-47,21}, -{89,-47,22}, -{89,-47,23}, -{89,-47,24}, -{89,-47,25}, -{89,-47,26}, -{89,-47,27}, -{89,-47,28}, -{89,-47,29}, -{89,-47,30}, -{89,-47,31}, -{89,-47,32}, -{89,-47,33}, -{89,-47,34}, -{89,-47,35}, -{89,-47,36}, -{89,-47,37}, -{89,-47,38}, -{89,-47,39}, -{89,-47,40}, -{89,-47,41}, -{89,-47,42}, -{89,-47,43}, -{89,-47,44}, -{89,-47,45}, -{89,-47,46}, -{89,-47,47}, -{89,-47,48}, -{89,-47,49}, -{89,-47,50}, -{89,-47,51}, -{89,-47,52}, -{89,-47,53}, -{89,-47,54}, -{89,-47,55}, -{89,-47,56}, -{89,-47,57}, -{89,-47,58}, -{89,-47,59}, -{89,-47,60}, -{89,-47,61}, -{89,-47,62}, -{89,-47,63}, -{89,-47,64}, -{89,-47,65}, -{89,-47,66}, -{89,-47,67}, -{89,-47,68}, -{89,-47,69}, -{89,-47,70}, -{89,-47,71}, -{89,-47,72}, -{89,-47,73}, -{89,-47,74}, -{89,-47,75}, -{89,-47,76}, -{89,-47,77}, -{89,-47,78}, -{89,-47,79}, -{89,-47,80}, -{89,-47,81}, -{89,-47,82}, -{89,-47,83}, -{89,-47,84}, -{89,-47,85}, -{89,-47,86}, -{89,-46,-15}, -{89,-46,-14}, -{89,-46,-13}, -{89,-46,-12}, -{89,-46,-11}, -{89,-46,-10}, -{89,-46,-9}, -{89,-46,-8}, -{89,-46,-7}, -{89,-46,-6}, -{89,-46,-5}, -{89,-46,-4}, -{89,-46,-3}, -{89,-46,-2}, -{89,-46,-1}, -{89,-46,0}, -{89,-46,1}, -{89,-46,2}, -{89,-46,3}, -{89,-46,4}, -{89,-46,5}, -{89,-46,6}, -{89,-46,7}, -{89,-46,8}, -{89,-46,9}, -{89,-46,10}, -{89,-46,11}, -{89,-46,12}, -{89,-46,13}, -{89,-46,14}, -{89,-46,15}, -{89,-46,16}, -{89,-46,17}, -{89,-46,18}, -{89,-46,19}, -{89,-46,20}, -{89,-46,21}, -{89,-46,22}, -{89,-46,23}, -{89,-46,24}, -{89,-46,25}, -{89,-46,26}, -{89,-46,27}, -{89,-46,28}, -{89,-46,29}, -{89,-46,30}, -{89,-46,31}, -{89,-46,32}, -{89,-46,33}, -{89,-46,34}, -{89,-46,35}, -{89,-46,36}, -{89,-46,37}, -{89,-46,38}, -{89,-46,39}, -{89,-46,40}, -{89,-46,41}, -{89,-46,42}, -{89,-46,43}, -{89,-46,44}, -{89,-46,45}, -{89,-46,46}, -{89,-46,47}, -{89,-46,48}, -{89,-46,49}, -{89,-46,50}, -{89,-46,51}, -{89,-46,52}, -{89,-46,53}, -{89,-46,54}, -{89,-46,55}, -{89,-46,56}, -{89,-46,57}, -{89,-46,58}, -{89,-46,59}, -{89,-46,60}, -{89,-46,61}, -{89,-46,62}, -{89,-46,63}, -{89,-46,64}, -{89,-46,65}, -{89,-46,66}, -{89,-46,67}, -{89,-46,68}, -{89,-46,69}, -{89,-46,70}, -{89,-46,71}, -{89,-46,72}, -{89,-46,73}, -{89,-46,74}, -{89,-46,75}, -{89,-46,76}, -{89,-46,77}, -{89,-46,78}, -{89,-46,79}, -{89,-46,80}, -{89,-46,81}, -{89,-46,82}, -{89,-46,83}, -{89,-46,84}, -{89,-46,85}, -{89,-46,86}, -{89,-45,-17}, -{89,-45,-16}, -{89,-45,-15}, -{89,-45,-14}, -{89,-45,-13}, -{89,-45,-12}, -{89,-45,-11}, -{89,-45,-10}, -{89,-45,-9}, -{89,-45,-8}, -{89,-45,-7}, -{89,-45,-6}, -{89,-45,-5}, -{89,-45,-4}, -{89,-45,-3}, -{89,-45,-2}, -{89,-45,-1}, -{89,-45,0}, -{89,-45,1}, -{89,-45,2}, -{89,-45,3}, -{89,-45,4}, -{89,-45,5}, -{89,-45,6}, -{89,-45,7}, -{89,-45,8}, -{89,-45,9}, -{89,-45,10}, -{89,-45,11}, -{89,-45,12}, -{89,-45,13}, -{89,-45,14}, -{89,-45,15}, -{89,-45,16}, -{89,-45,17}, -{89,-45,18}, -{89,-45,19}, -{89,-45,20}, -{89,-45,21}, -{89,-45,22}, -{89,-45,23}, -{89,-45,24}, -{89,-45,25}, -{89,-45,26}, -{89,-45,27}, -{89,-45,28}, -{89,-45,29}, -{89,-45,30}, -{89,-45,31}, -{89,-45,32}, -{89,-45,33}, -{89,-45,34}, -{89,-45,35}, -{89,-45,36}, -{89,-45,37}, -{89,-45,38}, -{89,-45,39}, -{89,-45,40}, -{89,-45,41}, -{89,-45,42}, -{89,-45,43}, -{89,-45,44}, -{89,-45,45}, -{89,-45,46}, -{89,-45,47}, -{89,-45,48}, -{89,-45,49}, -{89,-45,50}, -{89,-45,51}, -{89,-45,52}, -{89,-45,53}, -{89,-45,54}, -{89,-45,55}, -{89,-45,56}, -{89,-45,57}, -{89,-45,58}, -{89,-45,59}, -{89,-45,60}, -{89,-45,61}, -{89,-45,62}, -{89,-45,63}, -{89,-45,64}, -{89,-45,65}, -{89,-45,66}, -{89,-45,67}, -{89,-45,68}, -{89,-45,69}, -{89,-45,70}, -{89,-45,71}, -{89,-45,72}, -{89,-45,73}, -{89,-45,74}, -{89,-45,75}, -{89,-45,76}, -{89,-45,77}, -{89,-45,78}, -{89,-45,79}, -{89,-45,80}, -{89,-45,81}, -{89,-45,82}, -{89,-45,83}, -{89,-45,84}, -{89,-45,85}, -{89,-45,86}, -{89,-44,-17}, -{89,-44,-16}, -{89,-44,-15}, -{89,-44,-14}, -{89,-44,-13}, -{89,-44,-12}, -{89,-44,-11}, -{89,-44,-10}, -{89,-44,-9}, -{89,-44,-8}, -{89,-44,-7}, -{89,-44,-6}, -{89,-44,-5}, -{89,-44,-4}, -{89,-44,-3}, -{89,-44,-2}, -{89,-44,-1}, -{89,-44,0}, -{89,-44,1}, -{89,-44,2}, -{89,-44,3}, -{89,-44,4}, -{89,-44,5}, -{89,-44,6}, -{89,-44,7}, -{89,-44,8}, -{89,-44,9}, -{89,-44,10}, -{89,-44,11}, -{89,-44,12}, -{89,-44,13}, -{89,-44,14}, -{89,-44,15}, -{89,-44,16}, -{89,-44,17}, -{89,-44,18}, -{89,-44,19}, -{89,-44,20}, -{89,-44,21}, -{89,-44,22}, -{89,-44,23}, -{89,-44,24}, -{89,-44,25}, -{89,-44,26}, -{89,-44,27}, -{89,-44,28}, -{89,-44,29}, -{89,-44,30}, -{89,-44,31}, -{89,-44,32}, -{89,-44,33}, -{89,-44,34}, -{89,-44,35}, -{89,-44,36}, -{89,-44,37}, -{89,-44,38}, -{89,-44,39}, -{89,-44,40}, -{89,-44,41}, -{89,-44,42}, -{89,-44,43}, -{89,-44,44}, -{89,-44,45}, -{89,-44,46}, -{89,-44,47}, -{89,-44,48}, -{89,-44,49}, -{89,-44,50}, -{89,-44,51}, -{89,-44,52}, -{89,-44,53}, -{89,-44,54}, -{89,-44,55}, -{89,-44,56}, -{89,-44,57}, -{89,-44,58}, -{89,-44,59}, -{89,-44,60}, -{89,-44,61}, -{89,-44,62}, -{89,-44,63}, -{89,-44,64}, -{89,-44,65}, -{89,-44,66}, -{89,-44,67}, -{89,-44,68}, -{89,-44,69}, -{89,-44,70}, -{89,-44,71}, -{89,-44,72}, -{89,-44,73}, -{89,-44,74}, -{89,-44,75}, -{89,-44,76}, -{89,-44,77}, -{89,-44,78}, -{89,-44,79}, -{89,-44,80}, -{89,-44,81}, -{89,-44,82}, -{89,-44,83}, -{89,-44,84}, -{89,-44,85}, -{89,-44,86}, -{89,-43,-17}, -{89,-43,-16}, -{89,-43,-15}, -{89,-43,-14}, -{89,-43,-13}, -{89,-43,-12}, -{89,-43,-11}, -{89,-43,-10}, -{89,-43,-9}, -{89,-43,-8}, -{89,-43,-7}, -{89,-43,-6}, -{89,-43,-5}, -{89,-43,-4}, -{89,-43,-3}, -{89,-43,-2}, -{89,-43,-1}, -{89,-43,0}, -{89,-43,1}, -{89,-43,2}, -{89,-43,3}, -{89,-43,4}, -{89,-43,5}, -{89,-43,6}, -{89,-43,7}, -{89,-43,8}, -{89,-43,9}, -{89,-43,10}, -{89,-43,11}, -{89,-43,12}, -{89,-43,13}, -{89,-43,14}, -{89,-43,15}, -{89,-43,16}, -{89,-43,17}, -{89,-43,18}, -{89,-43,19}, -{89,-43,20}, -{89,-43,21}, -{89,-43,22}, -{89,-43,23}, -{89,-43,24}, -{89,-43,25}, -{89,-43,26}, -{89,-43,27}, -{89,-43,28}, -{89,-43,29}, -{89,-43,30}, -{89,-43,31}, -{89,-43,32}, -{89,-43,33}, -{89,-43,34}, -{89,-43,35}, -{89,-43,36}, -{89,-43,37}, -{89,-43,38}, -{89,-43,39}, -{89,-43,40}, -{89,-43,41}, -{89,-43,42}, -{89,-43,43}, -{89,-43,44}, -{89,-43,45}, -{89,-43,46}, -{89,-43,47}, -{89,-43,48}, -{89,-43,49}, -{89,-43,50}, -{89,-43,51}, -{89,-43,52}, -{89,-43,53}, -{89,-43,54}, -{89,-43,55}, -{89,-43,56}, -{89,-43,57}, -{89,-43,58}, -{89,-43,59}, -{89,-43,60}, -{89,-43,61}, -{89,-43,62}, -{89,-43,63}, -{89,-43,64}, -{89,-43,65}, -{89,-43,66}, -{89,-43,67}, -{89,-43,68}, -{89,-43,69}, -{89,-43,70}, -{89,-43,71}, -{89,-43,72}, -{89,-43,73}, -{89,-43,74}, -{89,-43,75}, -{89,-43,76}, -{89,-43,77}, -{89,-43,78}, -{89,-43,79}, -{89,-43,80}, -{89,-43,81}, -{89,-43,82}, -{89,-43,83}, -{89,-43,84}, -{89,-43,85}, -{89,-43,86}, -{89,-42,-17}, -{89,-42,-16}, -{89,-42,-15}, -{89,-42,-14}, -{89,-42,-13}, -{89,-42,-12}, -{89,-42,-11}, -{89,-42,-10}, -{89,-42,-9}, -{89,-42,-8}, -{89,-42,-7}, -{89,-42,-6}, -{89,-42,-5}, -{89,-42,-4}, -{89,-42,-3}, -{89,-42,-2}, -{89,-42,-1}, -{89,-42,0}, -{89,-42,1}, -{89,-42,2}, -{89,-42,3}, -{89,-42,4}, -{89,-42,5}, -{89,-42,6}, -{89,-42,7}, -{89,-42,8}, -{89,-42,9}, -{89,-42,10}, -{89,-42,11}, -{89,-42,12}, -{89,-42,13}, -{89,-42,14}, -{89,-42,15}, -{89,-42,16}, -{89,-42,17}, -{89,-42,18}, -{89,-42,19}, -{89,-42,20}, -{89,-42,21}, -{89,-42,22}, -{89,-42,23}, -{89,-42,24}, -{89,-42,25}, -{89,-42,26}, -{89,-42,27}, -{89,-42,28}, -{89,-42,29}, -{89,-42,30}, -{89,-42,31}, -{89,-42,32}, -{89,-42,33}, -{89,-42,34}, -{89,-42,35}, -{89,-42,36}, -{89,-42,37}, -{89,-42,38}, -{89,-42,39}, -{89,-42,40}, -{89,-42,41}, -{89,-42,42}, -{89,-42,43}, -{89,-42,44}, -{89,-42,45}, -{89,-42,46}, -{89,-42,47}, -{89,-42,48}, -{89,-42,49}, -{89,-42,50}, -{89,-42,51}, -{89,-42,52}, -{89,-42,53}, -{89,-42,54}, -{89,-42,55}, -{89,-42,56}, -{89,-42,57}, -{89,-42,58}, -{89,-42,59}, -{89,-42,60}, -{89,-42,61}, -{89,-42,62}, -{89,-42,63}, -{89,-42,64}, -{89,-42,65}, -{89,-42,66}, -{89,-42,67}, -{89,-42,68}, -{89,-42,69}, -{89,-42,70}, -{89,-42,71}, -{89,-42,72}, -{89,-42,73}, -{89,-42,74}, -{89,-42,75}, -{89,-42,76}, -{89,-42,77}, -{89,-42,78}, -{89,-42,79}, -{89,-42,80}, -{89,-42,81}, -{89,-42,82}, -{89,-42,83}, -{89,-42,84}, -{89,-42,85}, -{89,-42,86}, -{89,-41,-17}, -{89,-41,-16}, -{89,-41,-15}, -{89,-41,-14}, -{89,-41,-13}, -{89,-41,-12}, -{89,-41,-11}, -{89,-41,-10}, -{89,-41,-9}, -{89,-41,-8}, -{89,-41,-7}, -{89,-41,-6}, -{89,-41,-5}, -{89,-41,-4}, -{89,-41,-3}, -{89,-41,-2}, -{89,-41,-1}, -{89,-41,0}, -{89,-41,1}, -{89,-41,2}, -{89,-41,3}, -{89,-41,4}, -{89,-41,5}, -{89,-41,6}, -{89,-41,7}, -{89,-41,8}, -{89,-41,9}, -{89,-41,10}, -{89,-41,11}, -{89,-41,12}, -{89,-41,13}, -{89,-41,14}, -{89,-41,15}, -{89,-41,16}, -{89,-41,17}, -{89,-41,18}, -{89,-41,19}, -{89,-41,20}, -{89,-41,21}, -{89,-41,22}, -{89,-41,23}, -{89,-41,24}, -{89,-41,25}, -{89,-41,26}, -{89,-41,27}, -{89,-41,28}, -{89,-41,29}, -{89,-41,30}, -{89,-41,31}, -{89,-41,32}, -{89,-41,33}, -{89,-41,34}, -{89,-41,35}, -{89,-41,36}, -{89,-41,37}, -{89,-41,38}, -{89,-41,39}, -{89,-41,40}, -{89,-41,41}, -{89,-41,42}, -{89,-41,43}, -{89,-41,44}, -{89,-41,45}, -{89,-41,46}, -{89,-41,47}, -{89,-41,48}, -{89,-41,49}, -{89,-41,50}, -{89,-41,51}, -{89,-41,52}, -{89,-41,53}, -{89,-41,54}, -{89,-41,55}, -{89,-41,56}, -{89,-41,57}, -{89,-41,58}, -{89,-41,59}, -{89,-41,60}, -{89,-41,61}, -{89,-41,62}, -{89,-41,63}, -{89,-41,64}, -{89,-41,65}, -{89,-41,66}, -{89,-41,67}, -{89,-41,68}, -{89,-41,69}, -{89,-41,70}, -{89,-41,71}, -{89,-41,72}, -{89,-41,73}, -{89,-41,74}, -{89,-41,75}, -{89,-41,76}, -{89,-41,77}, -{89,-41,78}, -{89,-41,79}, -{89,-41,80}, -{89,-41,81}, -{89,-41,82}, -{89,-41,83}, -{89,-41,84}, -{89,-41,85}, -{89,-41,86}, -{89,-40,-17}, -{89,-40,-16}, -{89,-40,-15}, -{89,-40,-14}, -{89,-40,-13}, -{89,-40,-12}, -{89,-40,-11}, -{89,-40,-10}, -{89,-40,-9}, -{89,-40,-8}, -{89,-40,-7}, -{89,-40,-6}, -{89,-40,-5}, -{89,-40,-4}, -{89,-40,-3}, -{89,-40,-2}, -{89,-40,-1}, -{89,-40,0}, -{89,-40,1}, -{89,-40,2}, -{89,-40,3}, -{89,-40,4}, -{89,-40,5}, -{89,-40,6}, -{89,-40,7}, -{89,-40,8}, -{89,-40,9}, -{89,-40,10}, -{89,-40,11}, -{89,-40,12}, -{89,-40,13}, -{89,-40,14}, -{89,-40,15}, -{89,-40,16}, -{89,-40,17}, -{89,-40,18}, -{89,-40,19}, -{89,-40,20}, -{89,-40,21}, -{89,-40,22}, -{89,-40,23}, -{89,-40,24}, -{89,-40,25}, -{89,-40,26}, -{89,-40,27}, -{89,-40,28}, -{89,-40,29}, -{89,-40,30}, -{89,-40,31}, -{89,-40,32}, -{89,-40,33}, -{89,-40,34}, -{89,-40,35}, -{89,-40,36}, -{89,-40,37}, -{89,-40,38}, -{89,-40,39}, -{89,-40,40}, -{89,-40,41}, -{89,-40,42}, -{89,-40,43}, -{89,-40,44}, -{89,-40,45}, -{89,-40,46}, -{89,-40,47}, -{89,-40,48}, -{89,-40,49}, -{89,-40,50}, -{89,-40,51}, -{89,-40,52}, -{89,-40,53}, -{89,-40,54}, -{89,-40,55}, -{89,-40,56}, -{89,-40,57}, -{89,-40,58}, -{89,-40,59}, -{89,-40,60}, -{89,-40,61}, -{89,-40,62}, -{89,-40,63}, -{89,-40,64}, -{89,-40,65}, -{89,-40,66}, -{89,-40,67}, -{89,-40,68}, -{89,-40,69}, -{89,-40,70}, -{89,-40,71}, -{89,-40,72}, -{89,-40,73}, -{89,-40,74}, -{89,-40,75}, -{89,-40,76}, -{89,-40,77}, -{89,-40,78}, -{89,-40,79}, -{89,-40,80}, -{89,-40,81}, -{89,-40,82}, -{89,-40,83}, -{89,-40,84}, -{89,-40,85}, -{89,-40,86}, -{89,-39,-17}, -{89,-39,-16}, -{89,-39,-15}, -{89,-39,-14}, -{89,-39,-13}, -{89,-39,-12}, -{89,-39,-11}, -{89,-39,-10}, -{89,-39,-9}, -{89,-39,-8}, -{89,-39,-7}, -{89,-39,-6}, -{89,-39,-5}, -{89,-39,-4}, -{89,-39,-3}, -{89,-39,-2}, -{89,-39,-1}, -{89,-39,0}, -{89,-39,1}, -{89,-39,2}, -{89,-39,3}, -{89,-39,4}, -{89,-39,5}, -{89,-39,6}, -{89,-39,7}, -{89,-39,8}, -{89,-39,9}, -{89,-39,10}, -{89,-39,11}, -{89,-39,12}, -{89,-39,13}, -{89,-39,14}, -{89,-39,15}, -{89,-39,16}, -{89,-39,17}, -{89,-39,18}, -{89,-39,19}, -{89,-39,20}, -{89,-39,21}, -{89,-39,22}, -{89,-39,23}, -{89,-39,24}, -{89,-39,25}, -{89,-39,26}, -{89,-39,27}, -{89,-39,28}, -{89,-39,29}, -{89,-39,30}, -{89,-39,31}, -{89,-39,32}, -{89,-39,33}, -{89,-39,34}, -{89,-39,35}, -{89,-39,36}, -{89,-39,37}, -{89,-39,38}, -{89,-39,39}, -{89,-39,40}, -{89,-39,41}, -{89,-39,42}, -{89,-39,43}, -{89,-39,44}, -{89,-39,45}, -{89,-39,46}, -{89,-39,47}, -{89,-39,48}, -{89,-39,49}, -{89,-39,50}, -{89,-39,51}, -{89,-39,52}, -{89,-39,53}, -{89,-39,54}, -{89,-39,55}, -{89,-39,56}, -{89,-39,57}, -{89,-39,58}, -{89,-39,59}, -{89,-39,60}, -{89,-39,61}, -{89,-39,62}, -{89,-39,63}, -{89,-39,64}, -{89,-39,65}, -{89,-39,66}, -{89,-39,67}, -{89,-39,68}, -{89,-39,69}, -{89,-39,70}, -{89,-39,71}, -{89,-39,72}, -{89,-39,73}, -{89,-39,74}, -{89,-39,75}, -{89,-39,76}, -{89,-39,77}, -{89,-39,78}, -{89,-39,79}, -{89,-39,80}, -{89,-39,81}, -{89,-39,82}, -{89,-39,83}, -{89,-39,84}, -{89,-39,85}, -{89,-39,86}, -{89,-38,-17}, -{89,-38,-16}, -{89,-38,-15}, -{89,-38,-14}, -{89,-38,-13}, -{89,-38,-12}, -{89,-38,-11}, -{89,-38,-10}, -{89,-38,-9}, -{89,-38,-8}, -{89,-38,-7}, -{89,-38,-6}, -{89,-38,-5}, -{89,-38,-4}, -{89,-38,-3}, -{89,-38,-2}, -{89,-38,-1}, -{89,-38,0}, -{89,-38,1}, -{89,-38,2}, -{89,-38,3}, -{89,-38,4}, -{89,-38,5}, -{89,-38,6}, -{89,-38,7}, -{89,-38,8}, -{89,-38,9}, -{89,-38,10}, -{89,-38,11}, -{89,-38,12}, -{89,-38,13}, -{89,-38,14}, -{89,-38,15}, -{89,-38,16}, -{89,-38,17}, -{89,-38,18}, -{89,-38,19}, -{89,-38,20}, -{89,-38,21}, -{89,-38,22}, -{89,-38,23}, -{89,-38,24}, -{89,-38,25}, -{89,-38,26}, -{89,-38,27}, -{89,-38,28}, -{89,-38,29}, -{89,-38,30}, -{89,-38,31}, -{89,-38,32}, -{89,-38,33}, -{89,-38,34}, -{89,-38,35}, -{89,-38,36}, -{89,-38,37}, -{89,-38,38}, -{89,-38,39}, -{89,-38,40}, -{89,-38,41}, -{89,-38,42}, -{89,-38,43}, -{89,-38,44}, -{89,-38,45}, -{89,-38,46}, -{89,-38,47}, -{89,-38,48}, -{89,-38,49}, -{89,-38,50}, -{89,-38,51}, -{89,-38,52}, -{89,-38,53}, -{89,-38,54}, -{89,-38,55}, -{89,-38,56}, -{89,-38,57}, -{89,-38,58}, -{89,-38,59}, -{89,-38,60}, -{89,-38,61}, -{89,-38,62}, -{89,-38,63}, -{89,-38,64}, -{89,-38,65}, -{89,-38,66}, -{89,-38,67}, -{89,-38,68}, -{89,-38,69}, -{89,-38,70}, -{89,-38,71}, -{89,-38,72}, -{89,-38,73}, -{89,-38,74}, -{89,-38,75}, -{89,-38,76}, -{89,-38,77}, -{89,-38,78}, -{89,-38,79}, -{89,-38,80}, -{89,-38,81}, -{89,-38,82}, -{89,-38,83}, -{89,-38,84}, -{89,-38,85}, -{89,-38,86}, -{89,-37,-17}, -{89,-37,-16}, -{89,-37,-15}, -{89,-37,-14}, -{89,-37,-13}, -{89,-37,-12}, -{89,-37,-11}, -{89,-37,-10}, -{89,-37,-9}, -{89,-37,-8}, -{89,-37,-7}, -{89,-37,-6}, -{89,-37,-5}, -{89,-37,-4}, -{89,-37,-3}, -{89,-37,-2}, -{89,-37,-1}, -{89,-37,0}, -{89,-37,1}, -{89,-37,2}, -{89,-37,3}, -{89,-37,4}, -{89,-37,5}, -{89,-37,6}, -{89,-37,7}, -{89,-37,8}, -{89,-37,9}, -{89,-37,10}, -{89,-37,11}, -{89,-37,12}, -{89,-37,13}, -{89,-37,14}, -{89,-37,15}, -{89,-37,16}, -{89,-37,17}, -{89,-37,18}, -{89,-37,19}, -{89,-37,20}, -{89,-37,21}, -{89,-37,22}, -{89,-37,23}, -{89,-37,24}, -{89,-37,25}, -{89,-37,26}, -{89,-37,27}, -{89,-37,28}, -{89,-37,29}, -{89,-37,30}, -{89,-37,31}, -{89,-37,32}, -{89,-37,33}, -{89,-37,34}, -{89,-37,35}, -{89,-37,36}, -{89,-37,37}, -{89,-37,38}, -{89,-37,39}, -{89,-37,40}, -{89,-37,41}, -{89,-37,42}, -{89,-37,43}, -{89,-37,44}, -{89,-37,45}, -{89,-37,46}, -{89,-37,47}, -{89,-37,48}, -{89,-37,49}, -{89,-37,50}, -{89,-37,51}, -{89,-37,52}, -{89,-37,53}, -{89,-37,54}, -{89,-37,55}, -{89,-37,56}, -{89,-37,57}, -{89,-37,58}, -{89,-37,59}, -{89,-37,60}, -{89,-37,61}, -{89,-37,62}, -{89,-37,63}, -{89,-37,64}, -{89,-37,65}, -{89,-37,66}, -{89,-37,67}, -{89,-37,68}, -{89,-37,69}, -{89,-37,70}, -{89,-37,71}, -{89,-37,72}, -{89,-37,73}, -{89,-37,74}, -{89,-37,75}, -{89,-37,76}, -{89,-37,77}, -{89,-37,78}, -{89,-37,79}, -{89,-37,80}, -{89,-37,81}, -{89,-37,82}, -{89,-37,83}, -{89,-37,84}, -{89,-37,85}, -{89,-37,86}, -{89,-36,-17}, -{89,-36,-16}, -{89,-36,-15}, -{89,-36,-14}, -{89,-36,-13}, -{89,-36,-12}, -{89,-36,-11}, -{89,-36,-10}, -{89,-36,-9}, -{89,-36,-8}, -{89,-36,-7}, -{89,-36,-6}, -{89,-36,-5}, -{89,-36,-4}, -{89,-36,-3}, -{89,-36,-2}, -{89,-36,-1}, -{89,-36,0}, -{89,-36,1}, -{89,-36,2}, -{89,-36,3}, -{89,-36,4}, -{89,-36,5}, -{89,-36,6}, -{89,-36,7}, -{89,-36,8}, -{89,-36,9}, -{89,-36,10}, -{89,-36,11}, -{89,-36,12}, -{89,-36,13}, -{89,-36,14}, -{89,-36,15}, -{89,-36,16}, -{89,-36,17}, -{89,-36,18}, -{89,-36,19}, -{89,-36,20}, -{89,-36,21}, -{89,-36,22}, -{89,-36,23}, -{89,-36,24}, -{89,-36,25}, -{89,-36,26}, -{89,-36,27}, -{89,-36,28}, -{89,-36,29}, -{89,-36,30}, -{89,-36,31}, -{89,-36,32}, -{89,-36,33}, -{89,-36,34}, -{89,-36,35}, -{89,-36,36}, -{89,-36,37}, -{89,-36,38}, -{89,-36,39}, -{89,-36,40}, -{89,-36,41}, -{89,-36,42}, -{89,-36,43}, -{89,-36,44}, -{89,-36,45}, -{89,-36,46}, -{89,-36,47}, -{89,-36,48}, -{89,-36,49}, -{89,-36,50}, -{89,-36,51}, -{89,-36,52}, -{89,-36,53}, -{89,-36,54}, -{89,-36,55}, -{89,-36,56}, -{89,-36,57}, -{89,-36,58}, -{89,-36,59}, -{89,-36,60}, -{89,-36,61}, -{89,-36,62}, -{89,-36,63}, -{89,-36,64}, -{89,-36,65}, -{89,-36,66}, -{89,-36,67}, -{89,-36,68}, -{89,-36,69}, -{89,-36,70}, -{89,-36,71}, -{89,-36,72}, -{89,-36,73}, -{89,-36,74}, -{89,-36,75}, -{89,-36,76}, -{89,-36,77}, -{89,-36,78}, -{89,-36,79}, -{89,-36,80}, -{89,-36,81}, -{89,-36,82}, -{89,-36,83}, -{89,-36,84}, -{89,-36,85}, -{89,-36,86}, -{89,-35,-17}, -{89,-35,-16}, -{89,-35,-15}, -{89,-35,-14}, -{89,-35,-13}, -{89,-35,-12}, -{89,-35,-11}, -{89,-35,-10}, -{89,-35,-9}, -{89,-35,-8}, -{89,-35,-7}, -{89,-35,-6}, -{89,-35,-5}, -{89,-35,-4}, -{89,-35,-3}, -{89,-35,-2}, -{89,-35,-1}, -{89,-35,0}, -{89,-35,1}, -{89,-35,2}, -{89,-35,3}, -{89,-35,4}, -{89,-35,5}, -{89,-35,6}, -{89,-35,7}, -{89,-35,8}, -{89,-35,9}, -{89,-35,10}, -{89,-35,11}, -{89,-35,12}, -{89,-35,13}, -{89,-35,14}, -{89,-35,15}, -{89,-35,16}, -{89,-35,17}, -{89,-35,18}, -{89,-35,19}, -{89,-35,20}, -{89,-35,21}, -{89,-35,22}, -{89,-35,23}, -{89,-35,24}, -{89,-35,25}, -{89,-35,26}, -{89,-35,27}, -{89,-35,28}, -{89,-35,29}, -{89,-35,30}, -{89,-35,31}, -{89,-35,32}, -{89,-35,33}, -{89,-35,34}, -{89,-35,35}, -{89,-35,36}, -{89,-35,37}, -{89,-35,38}, -{89,-35,39}, -{89,-35,40}, -{89,-35,41}, -{89,-35,42}, -{89,-35,43}, -{89,-35,44}, -{89,-35,45}, -{89,-35,46}, -{89,-35,47}, -{89,-35,48}, -{89,-35,49}, -{89,-35,50}, -{89,-35,51}, -{89,-35,52}, -{89,-35,53}, -{89,-35,54}, -{89,-35,55}, -{89,-35,56}, -{89,-35,57}, -{89,-35,58}, -{89,-35,59}, -{89,-35,60}, -{89,-35,61}, -{89,-35,62}, -{89,-35,63}, -{89,-35,64}, -{89,-35,65}, -{89,-35,66}, -{89,-35,67}, -{89,-35,68}, -{89,-35,69}, -{89,-35,70}, -{89,-35,71}, -{89,-35,72}, -{89,-35,73}, -{89,-35,74}, -{89,-35,75}, -{89,-35,76}, -{89,-35,77}, -{89,-35,78}, -{89,-35,79}, -{89,-35,80}, -{89,-35,81}, -{89,-35,82}, -{89,-35,83}, -{89,-35,84}, -{89,-35,85}, -{89,-35,86}, -{89,-34,-17}, -{89,-34,-16}, -{89,-34,-15}, -{89,-34,-14}, -{89,-34,-13}, -{89,-34,-12}, -{89,-34,-11}, -{89,-34,-10}, -{89,-34,-9}, -{89,-34,-8}, -{89,-34,-7}, -{89,-34,-6}, -{89,-34,-5}, -{89,-34,-4}, -{89,-34,-3}, -{89,-34,-2}, -{89,-34,-1}, -{89,-34,0}, -{89,-34,1}, -{89,-34,2}, -{89,-34,3}, -{89,-34,4}, -{89,-34,5}, -{89,-34,6}, -{89,-34,7}, -{89,-34,8}, -{89,-34,9}, -{89,-34,10}, -{89,-34,11}, -{89,-34,12}, -{89,-34,13}, -{89,-34,14}, -{89,-34,15}, -{89,-34,16}, -{89,-34,17}, -{89,-34,18}, -{89,-34,19}, -{89,-34,20}, -{89,-34,21}, -{89,-34,22}, -{89,-34,23}, -{89,-34,24}, -{89,-34,25}, -{89,-34,26}, -{89,-34,27}, -{89,-34,28}, -{89,-34,29}, -{89,-34,30}, -{89,-34,31}, -{89,-34,32}, -{89,-34,33}, -{89,-34,34}, -{89,-34,35}, -{89,-34,36}, -{89,-34,37}, -{89,-34,38}, -{89,-34,39}, -{89,-34,40}, -{89,-34,41}, -{89,-34,42}, -{89,-34,43}, -{89,-34,44}, -{89,-34,45}, -{89,-34,46}, -{89,-34,47}, -{89,-34,48}, -{89,-34,49}, -{89,-34,50}, -{89,-34,51}, -{89,-34,52}, -{89,-34,53}, -{89,-34,54}, -{89,-34,55}, -{89,-34,56}, -{89,-34,57}, -{89,-34,58}, -{89,-34,59}, -{89,-34,60}, -{89,-34,61}, -{89,-34,62}, -{89,-34,63}, -{89,-34,64}, -{89,-34,65}, -{89,-34,66}, -{89,-34,67}, -{89,-34,68}, -{89,-34,69}, -{89,-34,70}, -{89,-34,71}, -{89,-34,72}, -{89,-34,73}, -{89,-34,74}, -{89,-34,75}, -{89,-34,76}, -{89,-34,77}, -{89,-34,78}, -{89,-34,79}, -{89,-34,80}, -{89,-34,81}, -{89,-34,82}, -{89,-34,83}, -{89,-34,84}, -{89,-34,85}, -{89,-34,86}, -{89,-34,87}, -{89,-33,-17}, -{89,-33,-16}, -{89,-33,-15}, -{89,-33,-14}, -{89,-33,-13}, -{89,-33,-12}, -{89,-33,-11}, -{89,-33,-10}, -{89,-33,-9}, -{89,-33,-8}, -{89,-33,-7}, -{89,-33,-6}, -{89,-33,-5}, -{89,-33,-4}, -{89,-33,-3}, -{89,-33,-2}, -{89,-33,-1}, -{89,-33,0}, -{89,-33,1}, -{89,-33,2}, -{89,-33,3}, -{89,-33,4}, -{89,-33,5}, -{89,-33,6}, -{89,-33,7}, -{89,-33,8}, -{89,-33,9}, -{89,-33,10}, -{89,-33,11}, -{89,-33,12}, -{89,-33,13}, -{89,-33,14}, -{89,-33,15}, -{89,-33,16}, -{89,-33,17}, -{89,-33,18}, -{89,-33,19}, -{89,-33,20}, -{89,-33,21}, -{89,-33,22}, -{89,-33,23}, -{89,-33,24}, -{89,-33,25}, -{89,-33,26}, -{89,-33,27}, -{89,-33,28}, -{89,-33,29}, -{89,-33,30}, -{89,-33,31}, -{89,-33,32}, -{89,-33,33}, -{89,-33,34}, -{89,-33,35}, -{89,-33,36}, -{89,-33,37}, -{89,-33,38}, -{89,-33,39}, -{89,-33,40}, -{89,-33,41}, -{89,-33,42}, -{89,-33,43}, -{89,-33,44}, -{89,-33,45}, -{89,-33,46}, -{89,-33,47}, -{89,-33,48}, -{89,-33,49}, -{89,-33,50}, -{89,-33,51}, -{89,-33,52}, -{89,-33,53}, -{89,-33,54}, -{89,-33,55}, -{89,-33,56}, -{89,-33,57}, -{89,-33,58}, -{89,-33,59}, -{89,-33,60}, -{89,-33,61}, -{89,-33,62}, -{89,-33,63}, -{89,-33,64}, -{89,-33,65}, -{89,-33,66}, -{89,-33,67}, -{89,-33,68}, -{89,-33,69}, -{89,-33,70}, -{89,-33,71}, -{89,-33,72}, -{89,-33,73}, -{89,-33,74}, -{89,-33,75}, -{89,-33,76}, -{89,-33,77}, -{89,-33,78}, -{89,-33,79}, -{89,-33,80}, -{89,-33,81}, -{89,-33,82}, -{89,-33,83}, -{89,-33,84}, -{89,-33,85}, -{89,-33,86}, -{89,-33,87}, -{89,-32,-17}, -{89,-32,-16}, -{89,-32,-15}, -{89,-32,-14}, -{89,-32,-13}, -{89,-32,-12}, -{89,-32,-11}, -{89,-32,-10}, -{89,-32,-9}, -{89,-32,-8}, -{89,-32,-7}, -{89,-32,-6}, -{89,-32,-5}, -{89,-32,-4}, -{89,-32,-3}, -{89,-32,-2}, -{89,-32,-1}, -{89,-32,0}, -{89,-32,1}, -{89,-32,2}, -{89,-32,3}, -{89,-32,4}, -{89,-32,5}, -{89,-32,6}, -{89,-32,7}, -{89,-32,8}, -{89,-32,9}, -{89,-32,10}, -{89,-32,11}, -{89,-32,12}, -{89,-32,13}, -{89,-32,14}, -{89,-32,15}, -{89,-32,16}, -{89,-32,17}, -{89,-32,18}, -{89,-32,19}, -{89,-32,20}, -{89,-32,21}, -{89,-32,22}, -{89,-32,23}, -{89,-32,24}, -{89,-32,25}, -{89,-32,26}, -{89,-32,27}, -{89,-32,28}, -{89,-32,29}, -{89,-32,30}, -{89,-32,31}, -{89,-32,32}, -{89,-32,33}, -{89,-32,34}, -{89,-32,35}, -{89,-32,36}, -{89,-32,37}, -{89,-32,38}, -{89,-32,39}, -{89,-32,40}, -{89,-32,41}, -{89,-32,42}, -{89,-32,43}, -{89,-32,44}, -{89,-32,45}, -{89,-32,46}, -{89,-32,47}, -{89,-32,48}, -{89,-32,49}, -{89,-32,50}, -{89,-32,51}, -{89,-32,52}, -{89,-32,53}, -{89,-32,54}, -{89,-32,55}, -{89,-32,56}, -{89,-32,57}, -{89,-32,58}, -{89,-32,59}, -{89,-32,60}, -{89,-32,61}, -{89,-32,62}, -{89,-32,63}, -{89,-32,64}, -{89,-32,65}, -{89,-32,66}, -{89,-32,67}, -{89,-32,68}, -{89,-32,69}, -{89,-32,70}, -{89,-32,71}, -{89,-32,72}, -{89,-32,73}, -{89,-32,74}, -{89,-32,75}, -{89,-32,76}, -{89,-32,77}, -{89,-32,78}, -{89,-32,79}, -{89,-32,80}, -{89,-32,81}, -{89,-32,82}, -{89,-32,83}, -{89,-32,84}, -{89,-32,85}, -{89,-32,86}, -{89,-32,87}, -{89,-31,-17}, -{89,-31,-16}, -{89,-31,-15}, -{89,-31,-14}, -{89,-31,-13}, -{89,-31,-12}, -{89,-31,-11}, -{89,-31,-10}, -{89,-31,-9}, -{89,-31,-8}, -{89,-31,-7}, -{89,-31,-6}, -{89,-31,-5}, -{89,-31,-4}, -{89,-31,-3}, -{89,-31,-2}, -{89,-31,-1}, -{89,-31,0}, -{89,-31,1}, -{89,-31,2}, -{89,-31,3}, -{89,-31,4}, -{89,-31,5}, -{89,-31,6}, -{89,-31,7}, -{89,-31,8}, -{89,-31,9}, -{89,-31,10}, -{89,-31,11}, -{89,-31,12}, -{89,-31,13}, -{89,-31,14}, -{89,-31,15}, -{89,-31,16}, -{89,-31,17}, -{89,-31,18}, -{89,-31,19}, -{89,-31,20}, -{89,-31,21}, -{89,-31,22}, -{89,-31,23}, -{89,-31,24}, -{89,-31,25}, -{89,-31,26}, -{89,-31,27}, -{89,-31,28}, -{89,-31,29}, -{89,-31,30}, -{89,-31,31}, -{89,-31,32}, -{89,-31,33}, -{89,-31,34}, -{89,-31,35}, -{89,-31,36}, -{89,-31,37}, -{89,-31,38}, -{89,-31,39}, -{89,-31,40}, -{89,-31,41}, -{89,-31,42}, -{89,-31,43}, -{89,-31,44}, -{89,-31,45}, -{89,-31,46}, -{89,-31,47}, -{89,-31,48}, -{89,-31,49}, -{89,-31,50}, -{89,-31,51}, -{89,-31,52}, -{89,-31,53}, -{89,-31,54}, -{89,-31,55}, -{89,-31,56}, -{89,-31,57}, -{89,-31,58}, -{89,-31,59}, -{89,-31,60}, -{89,-31,61}, -{89,-31,62}, -{89,-31,63}, -{89,-31,64}, -{89,-31,65}, -{89,-31,66}, -{89,-31,67}, -{89,-31,68}, -{89,-31,69}, -{89,-31,70}, -{89,-31,71}, -{89,-31,72}, -{89,-31,73}, -{89,-31,74}, -{89,-31,75}, -{89,-31,76}, -{89,-31,77}, -{89,-31,78}, -{89,-31,79}, -{89,-31,80}, -{89,-31,81}, -{89,-31,82}, -{89,-31,83}, -{89,-31,84}, -{89,-31,85}, -{89,-31,86}, -{89,-31,87}, -{89,-30,-17}, -{89,-30,-16}, -{89,-30,-15}, -{89,-30,-14}, -{89,-30,-13}, -{89,-30,-12}, -{89,-30,-11}, -{89,-30,-10}, -{89,-30,-9}, -{89,-30,-8}, -{89,-30,-7}, -{89,-30,-6}, -{89,-30,-5}, -{89,-30,-4}, -{89,-30,-3}, -{89,-30,-2}, -{89,-30,-1}, -{89,-30,0}, -{89,-30,1}, -{89,-30,2}, -{89,-30,3}, -{89,-30,4}, -{89,-30,5}, -{89,-30,6}, -{89,-30,7}, -{89,-30,8}, -{89,-30,9}, -{89,-30,10}, -{89,-30,11}, -{89,-30,12}, -{89,-30,13}, -{89,-30,14}, -{89,-30,15}, -{89,-30,16}, -{89,-30,17}, -{89,-30,18}, -{89,-30,19}, -{89,-30,20}, -{89,-30,21}, -{89,-30,22}, -{89,-30,23}, -{89,-30,24}, -{89,-30,25}, -{89,-30,26}, -{89,-30,27}, -{89,-30,28}, -{89,-30,29}, -{89,-30,30}, -{89,-30,31}, -{89,-30,32}, -{89,-30,33}, -{89,-30,34}, -{89,-30,35}, -{89,-30,36}, -{89,-30,37}, -{89,-30,38}, -{89,-30,39}, -{89,-30,40}, -{89,-30,41}, -{89,-30,42}, -{89,-30,43}, -{89,-30,44}, -{89,-30,45}, -{89,-30,46}, -{89,-30,47}, -{89,-30,48}, -{89,-30,49}, -{89,-30,50}, -{89,-30,51}, -{89,-30,52}, -{89,-30,53}, -{89,-30,54}, -{89,-30,55}, -{89,-30,56}, -{89,-30,57}, -{89,-30,58}, -{89,-30,59}, -{89,-30,60}, -{89,-30,61}, -{89,-30,62}, -{89,-30,63}, -{89,-30,64}, -{89,-30,65}, -{89,-30,66}, -{89,-30,67}, -{89,-30,68}, -{89,-30,69}, -{89,-30,70}, -{89,-30,71}, -{89,-30,72}, -{89,-30,73}, -{89,-30,74}, -{89,-30,75}, -{89,-30,76}, -{89,-30,77}, -{89,-30,78}, -{89,-30,79}, -{89,-30,80}, -{89,-30,81}, -{89,-30,82}, -{89,-30,83}, -{89,-30,84}, -{89,-30,85}, -{89,-30,86}, -{89,-30,87}, -{89,-29,-17}, -{89,-29,-16}, -{89,-29,-15}, -{89,-29,-14}, -{89,-29,-13}, -{89,-29,-12}, -{89,-29,-11}, -{89,-29,-10}, -{89,-29,-9}, -{89,-29,-8}, -{89,-29,-7}, -{89,-29,-6}, -{89,-29,-5}, -{89,-29,-4}, -{89,-29,-3}, -{89,-29,-2}, -{89,-29,-1}, -{89,-29,0}, -{89,-29,1}, -{89,-29,2}, -{89,-29,3}, -{89,-29,4}, -{89,-29,5}, -{89,-29,6}, -{89,-29,7}, -{89,-29,8}, -{89,-29,9}, -{89,-29,10}, -{89,-29,11}, -{89,-29,12}, -{89,-29,13}, -{89,-29,14}, -{89,-29,15}, -{89,-29,16}, -{89,-29,17}, -{89,-29,18}, -{89,-29,19}, -{89,-29,20}, -{89,-29,21}, -{89,-29,22}, -{89,-29,23}, -{89,-29,24}, -{89,-29,25}, -{89,-29,26}, -{89,-29,27}, -{89,-29,28}, -{89,-29,29}, -{89,-29,30}, -{89,-29,31}, -{89,-29,32}, -{89,-29,33}, -{89,-29,34}, -{89,-29,35}, -{89,-29,36}, -{89,-29,37}, -{89,-29,38}, -{89,-29,39}, -{89,-29,40}, -{89,-29,41}, -{89,-29,42}, -{89,-29,43}, -{89,-29,44}, -{89,-29,45}, -{89,-29,46}, -{89,-29,47}, -{89,-29,48}, -{89,-29,49}, -{89,-29,50}, -{89,-29,51}, -{89,-29,52}, -{89,-29,53}, -{89,-29,54}, -{89,-29,55}, -{89,-29,56}, -{89,-29,57}, -{89,-29,58}, -{89,-29,59}, -{89,-29,60}, -{89,-29,61}, -{89,-29,62}, -{89,-29,63}, -{89,-29,64}, -{89,-29,65}, -{89,-29,66}, -{89,-29,67}, -{89,-29,68}, -{89,-29,69}, -{89,-29,70}, -{89,-29,71}, -{89,-29,72}, -{89,-29,73}, -{89,-29,74}, -{89,-29,75}, -{89,-29,76}, -{89,-29,77}, -{89,-29,78}, -{89,-29,79}, -{89,-29,80}, -{89,-29,81}, -{89,-29,82}, -{89,-29,83}, -{89,-29,84}, -{89,-29,85}, -{89,-29,86}, -{89,-29,87}, -{89,-28,-17}, -{89,-28,-16}, -{89,-28,-15}, -{89,-28,-14}, -{89,-28,-13}, -{89,-28,-12}, -{89,-28,-11}, -{89,-28,-10}, -{89,-28,-9}, -{89,-28,-8}, -{89,-28,-7}, -{89,-28,-6}, -{89,-28,-5}, -{89,-28,-4}, -{89,-28,-3}, -{89,-28,-2}, -{89,-28,-1}, -{89,-28,0}, -{89,-28,1}, -{89,-28,2}, -{89,-28,3}, -{89,-28,4}, -{89,-28,5}, -{89,-28,6}, -{89,-28,7}, -{89,-28,8}, -{89,-28,9}, -{89,-28,10}, -{89,-28,11}, -{89,-28,12}, -{89,-28,13}, -{89,-28,14}, -{89,-28,15}, -{89,-28,16}, -{89,-28,17}, -{89,-28,18}, -{89,-28,19}, -{89,-28,20}, -{89,-28,21}, -{89,-28,22}, -{89,-28,23}, -{89,-28,24}, -{89,-28,25}, -{89,-28,26}, -{89,-28,27}, -{89,-28,28}, -{89,-28,29}, -{89,-28,30}, -{89,-28,31}, -{89,-28,32}, -{89,-28,33}, -{89,-28,34}, -{89,-28,35}, -{89,-28,36}, -{89,-28,37}, -{89,-28,38}, -{89,-28,39}, -{89,-28,40}, -{89,-28,41}, -{89,-28,42}, -{89,-28,43}, -{89,-28,44}, -{89,-28,45}, -{89,-28,46}, -{89,-28,47}, -{89,-28,48}, -{89,-28,49}, -{89,-28,50}, -{89,-28,51}, -{89,-28,52}, -{89,-28,53}, -{89,-28,54}, -{89,-28,55}, -{89,-28,56}, -{89,-28,57}, -{89,-28,58}, -{89,-28,59}, -{89,-28,60}, -{89,-28,61}, -{89,-28,62}, -{89,-28,63}, -{89,-28,64}, -{89,-28,65}, -{89,-28,66}, -{89,-28,67}, -{89,-28,68}, -{89,-28,69}, -{89,-28,70}, -{89,-28,71}, -{89,-28,72}, -{89,-28,73}, -{89,-28,74}, -{89,-28,75}, -{89,-28,76}, -{89,-28,77}, -{89,-28,78}, -{89,-28,79}, -{89,-28,80}, -{89,-28,81}, -{89,-28,82}, -{89,-28,83}, -{89,-28,84}, -{89,-28,85}, -{89,-28,86}, -{89,-28,87}, -{89,-27,-17}, -{89,-27,-16}, -{89,-27,-15}, -{89,-27,-14}, -{89,-27,-13}, -{89,-27,-12}, -{89,-27,-11}, -{89,-27,-10}, -{89,-27,-9}, -{89,-27,-8}, -{89,-27,-7}, -{89,-27,-6}, -{89,-27,-5}, -{89,-27,-4}, -{89,-27,-3}, -{89,-27,-2}, -{89,-27,-1}, -{89,-27,0}, -{89,-27,1}, -{89,-27,2}, -{89,-27,3}, -{89,-27,4}, -{89,-27,5}, -{89,-27,6}, -{89,-27,7}, -{89,-27,8}, -{89,-27,9}, -{89,-27,10}, -{89,-27,11}, -{89,-27,12}, -{89,-27,13}, -{89,-27,14}, -{89,-27,15}, -{89,-27,16}, -{89,-27,17}, -{89,-27,18}, -{89,-27,19}, -{89,-27,20}, -{89,-27,21}, -{89,-27,22}, -{89,-27,23}, -{89,-27,24}, -{89,-27,25}, -{89,-27,26}, -{89,-27,27}, -{89,-27,28}, -{89,-27,29}, -{89,-27,30}, -{89,-27,31}, -{89,-27,32}, -{89,-27,33}, -{89,-27,34}, -{89,-27,35}, -{89,-27,36}, -{89,-27,37}, -{89,-27,38}, -{89,-27,39}, -{89,-27,40}, -{89,-27,41}, -{89,-27,42}, -{89,-27,43}, -{89,-27,44}, -{89,-27,45}, -{89,-27,46}, -{89,-27,47}, -{89,-27,48}, -{89,-27,49}, -{89,-27,50}, -{89,-27,51}, -{89,-27,52}, -{89,-27,53}, -{89,-27,54}, -{89,-27,55}, -{89,-27,56}, -{89,-27,57}, -{89,-27,58}, -{89,-27,59}, -{89,-27,60}, -{89,-27,61}, -{89,-27,62}, -{89,-27,63}, -{89,-27,64}, -{89,-27,65}, -{89,-27,66}, -{89,-27,67}, -{89,-27,68}, -{89,-27,69}, -{89,-27,70}, -{89,-27,71}, -{89,-27,72}, -{89,-27,73}, -{89,-27,74}, -{89,-27,75}, -{89,-27,76}, -{89,-27,77}, -{89,-27,78}, -{89,-27,79}, -{89,-27,80}, -{89,-27,81}, -{89,-27,82}, -{89,-27,83}, -{89,-27,84}, -{89,-27,85}, -{89,-27,86}, -{89,-27,87}, -{89,-26,-17}, -{89,-26,-16}, -{89,-26,-15}, -{89,-26,-14}, -{89,-26,-13}, -{89,-26,-12}, -{89,-26,-11}, -{89,-26,-10}, -{89,-26,-9}, -{89,-26,-8}, -{89,-26,-7}, -{89,-26,-6}, -{89,-26,-5}, -{89,-26,-4}, -{89,-26,-3}, -{89,-26,-2}, -{89,-26,-1}, -{89,-26,0}, -{89,-26,1}, -{89,-26,2}, -{89,-26,3}, -{89,-26,4}, -{89,-26,5}, -{89,-26,6}, -{89,-26,7}, -{89,-26,8}, -{89,-26,9}, -{89,-26,10}, -{89,-26,11}, -{89,-26,12}, -{89,-26,13}, -{89,-26,14}, -{89,-26,15}, -{89,-26,16}, -{89,-26,17}, -{89,-26,18}, -{89,-26,19}, -{89,-26,20}, -{89,-26,21}, -{89,-26,22}, -{89,-26,23}, -{89,-26,24}, -{89,-26,25}, -{89,-26,26}, -{89,-26,27}, -{89,-26,28}, -{89,-26,29}, -{89,-26,30}, -{89,-26,31}, -{89,-26,32}, -{89,-26,33}, -{89,-26,34}, -{89,-26,35}, -{89,-26,36}, -{89,-26,37}, -{89,-26,38}, -{89,-26,39}, -{89,-26,40}, -{89,-26,41}, -{89,-26,42}, -{89,-26,43}, -{89,-26,44}, -{89,-26,45}, -{89,-26,46}, -{89,-26,47}, -{89,-26,48}, -{89,-26,49}, -{89,-26,50}, -{89,-26,51}, -{89,-26,52}, -{89,-26,53}, -{89,-26,54}, -{89,-26,55}, -{89,-26,56}, -{89,-26,57}, -{89,-26,58}, -{89,-26,59}, -{89,-26,60}, -{89,-26,61}, -{89,-26,62}, -{89,-26,63}, -{89,-26,64}, -{89,-26,65}, -{89,-26,66}, -{89,-26,67}, -{89,-26,68}, -{89,-26,69}, -{89,-26,70}, -{89,-26,71}, -{89,-26,72}, -{89,-26,73}, -{89,-26,74}, -{89,-26,75}, -{89,-26,76}, -{89,-26,77}, -{89,-26,78}, -{89,-26,79}, -{89,-26,80}, -{89,-26,81}, -{89,-26,82}, -{89,-26,83}, -{89,-26,84}, -{89,-26,85}, -{89,-26,86}, -{89,-26,87}, -{89,-25,-17}, -{89,-25,-16}, -{89,-25,-15}, -{89,-25,-14}, -{89,-25,-13}, -{89,-25,-12}, -{89,-25,-11}, -{89,-25,-10}, -{89,-25,-9}, -{89,-25,-8}, -{89,-25,-7}, -{89,-25,-6}, -{89,-25,-5}, -{89,-25,-4}, -{89,-25,-3}, -{89,-25,-2}, -{89,-25,-1}, -{89,-25,0}, -{89,-25,1}, -{89,-25,2}, -{89,-25,3}, -{89,-25,4}, -{89,-25,5}, -{89,-25,6}, -{89,-25,7}, -{89,-25,8}, -{89,-25,9}, -{89,-25,10}, -{89,-25,11}, -{89,-25,12}, -{89,-25,13}, -{89,-25,14}, -{89,-25,15}, -{89,-25,16}, -{89,-25,17}, -{89,-25,18}, -{89,-25,19}, -{89,-25,20}, -{89,-25,21}, -{89,-25,22}, -{89,-25,23}, -{89,-25,24}, -{89,-25,25}, -{89,-25,26}, -{89,-25,27}, -{89,-25,28}, -{89,-25,29}, -{89,-25,30}, -{89,-25,31}, -{89,-25,32}, -{89,-25,33}, -{89,-25,34}, -{89,-25,35}, -{89,-25,36}, -{89,-25,37}, -{89,-25,38}, -{89,-25,39}, -{89,-25,40}, -{89,-25,41}, -{89,-25,42}, -{89,-25,43}, -{89,-25,44}, -{89,-25,45}, -{89,-25,46}, -{89,-25,47}, -{89,-25,48}, -{89,-25,49}, -{89,-25,50}, -{89,-25,51}, -{89,-25,52}, -{89,-25,53}, -{89,-25,54}, -{89,-25,55}, -{89,-25,56}, -{89,-25,57}, -{89,-25,58}, -{89,-25,59}, -{89,-25,60}, -{89,-25,61}, -{89,-25,62}, -{89,-25,63}, -{89,-25,64}, -{89,-25,65}, -{89,-25,66}, -{89,-25,67}, -{89,-25,68}, -{89,-25,69}, -{89,-25,70}, -{89,-25,71}, -{89,-25,72}, -{89,-25,73}, -{89,-25,74}, -{89,-25,75}, -{89,-25,76}, -{89,-25,77}, -{89,-25,78}, -{89,-25,79}, -{89,-25,80}, -{89,-25,81}, -{89,-25,82}, -{89,-25,83}, -{89,-25,84}, -{89,-25,85}, -{89,-25,86}, -{89,-25,87}, -{89,-24,-17}, -{89,-24,-16}, -{89,-24,-15}, -{89,-24,-14}, -{89,-24,-13}, -{89,-24,-12}, -{89,-24,-11}, -{89,-24,-10}, -{89,-24,-9}, -{89,-24,-8}, -{89,-24,-7}, -{89,-24,-6}, -{89,-24,-5}, -{89,-24,-4}, -{89,-24,-3}, -{89,-24,-2}, -{89,-24,-1}, -{89,-24,0}, -{89,-24,1}, -{89,-24,2}, -{89,-24,3}, -{89,-24,4}, -{89,-24,5}, -{89,-24,6}, -{89,-24,7}, -{89,-24,8}, -{89,-24,9}, -{89,-24,10}, -{89,-24,11}, -{89,-24,12}, -{89,-24,13}, -{89,-24,14}, -{89,-24,15}, -{89,-24,16}, -{89,-24,17}, -{89,-24,18}, -{89,-24,19}, -{89,-24,20}, -{89,-24,21}, -{89,-24,22}, -{89,-24,23}, -{89,-24,24}, -{89,-24,25}, -{89,-24,26}, -{89,-24,27}, -{89,-24,28}, -{89,-24,29}, -{89,-24,30}, -{89,-24,31}, -{89,-24,32}, -{89,-24,33}, -{89,-24,34}, -{89,-24,35}, -{89,-24,36}, -{89,-24,37}, -{89,-24,38}, -{89,-24,39}, -{89,-24,40}, -{89,-24,41}, -{89,-24,42}, -{89,-24,43}, -{89,-24,44}, -{89,-24,45}, -{89,-24,46}, -{89,-24,47}, -{89,-24,48}, -{89,-24,49}, -{89,-24,50}, -{89,-24,51}, -{89,-24,52}, -{89,-24,53}, -{89,-24,54}, -{89,-24,55}, -{89,-24,56}, -{89,-24,57}, -{89,-24,58}, -{89,-24,59}, -{89,-24,60}, -{89,-24,61}, -{89,-24,62}, -{89,-24,63}, -{89,-24,64}, -{89,-24,65}, -{89,-24,66}, -{89,-24,67}, -{89,-24,68}, -{89,-24,69}, -{89,-24,70}, -{89,-24,71}, -{89,-24,72}, -{89,-24,73}, -{89,-24,74}, -{89,-24,75}, -{89,-24,76}, -{89,-24,77}, -{89,-24,78}, -{89,-24,79}, -{89,-24,80}, -{89,-24,81}, -{89,-24,82}, -{89,-24,83}, -{89,-24,84}, -{89,-24,85}, -{89,-24,86}, -{89,-24,87}, -{89,-23,-17}, -{89,-23,-16}, -{89,-23,-15}, -{89,-23,-14}, -{89,-23,-13}, -{89,-23,-12}, -{89,-23,-11}, -{89,-23,-10}, -{89,-23,-9}, -{89,-23,-8}, -{89,-23,-7}, -{89,-23,-6}, -{89,-23,-5}, -{89,-23,-4}, -{89,-23,-3}, -{89,-23,-2}, -{89,-23,-1}, -{89,-23,0}, -{89,-23,1}, -{89,-23,2}, -{89,-23,3}, -{89,-23,4}, -{89,-23,5}, -{89,-23,6}, -{89,-23,7}, -{89,-23,8}, -{89,-23,9}, -{89,-23,10}, -{89,-23,11}, -{89,-23,12}, -{89,-23,13}, -{89,-23,14}, -{89,-23,15}, -{89,-23,16}, -{89,-23,17}, -{89,-23,18}, -{89,-23,19}, -{89,-23,20}, -{89,-23,21}, -{89,-23,22}, -{89,-23,23}, -{89,-23,24}, -{89,-23,25}, -{89,-23,26}, -{89,-23,27}, -{89,-23,28}, -{89,-23,29}, -{89,-23,30}, -{89,-23,31}, -{89,-23,32}, -{89,-23,33}, -{89,-23,34}, -{89,-23,35}, -{89,-23,36}, -{89,-23,37}, -{89,-23,38}, -{89,-23,39}, -{89,-23,40}, -{89,-23,41}, -{89,-23,42}, -{89,-23,43}, -{89,-23,44}, -{89,-23,45}, -{89,-23,46}, -{89,-23,47}, -{89,-23,48}, -{89,-23,49}, -{89,-23,50}, -{89,-23,51}, -{89,-23,52}, -{89,-23,53}, -{89,-23,54}, -{89,-23,55}, -{89,-23,56}, -{89,-23,57}, -{89,-23,58}, -{89,-23,59}, -{89,-23,60}, -{89,-23,61}, -{89,-23,62}, -{89,-23,63}, -{89,-23,64}, -{89,-23,65}, -{89,-23,66}, -{89,-23,67}, -{89,-23,68}, -{89,-23,69}, -{89,-23,70}, -{89,-23,71}, -{89,-23,72}, -{89,-23,73}, -{89,-23,74}, -{89,-23,75}, -{89,-23,76}, -{89,-23,77}, -{89,-23,78}, -{89,-23,79}, -{89,-23,80}, -{89,-23,81}, -{89,-23,82}, -{89,-23,83}, -{89,-23,84}, -{89,-23,85}, -{89,-23,86}, -{89,-23,87}, -{89,-22,-17}, -{89,-22,-16}, -{89,-22,-15}, -{89,-22,-14}, -{89,-22,-13}, -{89,-22,-12}, -{89,-22,-11}, -{89,-22,-10}, -{89,-22,-9}, -{89,-22,-8}, -{89,-22,-7}, -{89,-22,-6}, -{89,-22,-5}, -{89,-22,-4}, -{89,-22,-3}, -{89,-22,-2}, -{89,-22,-1}, -{89,-22,0}, -{89,-22,1}, -{89,-22,2}, -{89,-22,3}, -{89,-22,4}, -{89,-22,5}, -{89,-22,6}, -{89,-22,7}, -{89,-22,8}, -{89,-22,9}, -{89,-22,10}, -{89,-22,11}, -{89,-22,12}, -{89,-22,13}, -{89,-22,14}, -{89,-22,15}, -{89,-22,16}, -{89,-22,17}, -{89,-22,18}, -{89,-22,19}, -{89,-22,20}, -{89,-22,21}, -{89,-22,22}, -{89,-22,23}, -{89,-22,24}, -{89,-22,25}, -{89,-22,26}, -{89,-22,27}, -{89,-22,28}, -{89,-22,29}, -{89,-22,30}, -{89,-22,31}, -{89,-22,32}, -{89,-22,33}, -{89,-22,34}, -{89,-22,35}, -{89,-22,36}, -{89,-22,37}, -{89,-22,38}, -{89,-22,39}, -{89,-22,40}, -{89,-22,41}, -{89,-22,42}, -{89,-22,43}, -{89,-22,44}, -{89,-22,45}, -{89,-22,46}, -{89,-22,47}, -{89,-22,48}, -{89,-22,49}, -{89,-22,50}, -{89,-22,51}, -{89,-22,52}, -{89,-22,53}, -{89,-22,54}, -{89,-22,55}, -{89,-22,56}, -{89,-22,57}, -{89,-22,58}, -{89,-22,59}, -{89,-22,60}, -{89,-22,61}, -{89,-22,62}, -{89,-22,63}, -{89,-22,64}, -{89,-22,65}, -{89,-22,66}, -{89,-22,67}, -{89,-22,68}, -{89,-22,69}, -{89,-22,70}, -{89,-22,71}, -{89,-22,72}, -{89,-22,73}, -{89,-22,74}, -{89,-22,75}, -{89,-22,76}, -{89,-22,77}, -{89,-22,78}, -{89,-22,79}, -{89,-22,80}, -{89,-22,81}, -{89,-22,82}, -{89,-22,83}, -{89,-22,84}, -{89,-22,85}, -{89,-22,86}, -{89,-22,87}, -{89,-21,-17}, -{89,-21,-16}, -{89,-21,-15}, -{89,-21,-14}, -{89,-21,-13}, -{89,-21,-12}, -{89,-21,-11}, -{89,-21,-10}, -{89,-21,-9}, -{89,-21,-8}, -{89,-21,-7}, -{89,-21,-6}, -{89,-21,-5}, -{89,-21,-4}, -{89,-21,-3}, -{89,-21,-2}, -{89,-21,-1}, -{89,-21,0}, -{89,-21,1}, -{89,-21,2}, -{89,-21,3}, -{89,-21,4}, -{89,-21,5}, -{89,-21,6}, -{89,-21,7}, -{89,-21,8}, -{89,-21,9}, -{89,-21,10}, -{89,-21,11}, -{89,-21,12}, -{89,-21,13}, -{89,-21,14}, -{89,-21,15}, -{89,-21,16}, -{89,-21,17}, -{89,-21,18}, -{89,-21,19}, -{89,-21,20}, -{89,-21,21}, -{89,-21,22}, -{89,-21,23}, -{89,-21,24}, -{89,-21,25}, -{89,-21,26}, -{89,-21,27}, -{89,-21,28}, -{89,-21,29}, -{89,-21,30}, -{89,-21,31}, -{89,-21,32}, -{89,-21,33}, -{89,-21,34}, -{89,-21,35}, -{89,-21,36}, -{89,-21,37}, -{89,-21,38}, -{89,-21,39}, -{89,-21,40}, -{89,-21,41}, -{89,-21,42}, -{89,-21,43}, -{89,-21,44}, -{89,-21,45}, -{89,-21,46}, -{89,-21,47}, -{89,-21,48}, -{89,-21,49}, -{89,-21,50}, -{89,-21,51}, -{89,-21,52}, -{89,-21,53}, -{89,-21,54}, -{89,-21,55}, -{89,-21,56}, -{89,-21,57}, -{89,-21,58}, -{89,-21,59}, -{89,-21,60}, -{89,-21,61}, -{89,-21,62}, -{89,-21,63}, -{89,-21,64}, -{89,-21,65}, -{89,-21,66}, -{89,-21,67}, -{89,-21,68}, -{89,-21,69}, -{89,-21,70}, -{89,-21,71}, -{89,-21,72}, -{89,-21,73}, -{89,-21,74}, -{89,-21,75}, -{89,-21,76}, -{89,-21,77}, -{89,-21,78}, -{89,-21,79}, -{89,-21,80}, -{89,-21,81}, -{89,-21,82}, -{89,-21,83}, -{89,-21,84}, -{89,-21,85}, -{89,-21,86}, -{89,-21,87}, -{89,-20,-17}, -{89,-20,-16}, -{89,-20,-15}, -{89,-20,-14}, -{89,-20,-13}, -{89,-20,-12}, -{89,-20,-11}, -{89,-20,-10}, -{89,-20,-9}, -{89,-20,-8}, -{89,-20,-7}, -{89,-20,-6}, -{89,-20,-5}, -{89,-20,-4}, -{89,-20,-3}, -{89,-20,-2}, -{89,-20,-1}, -{89,-20,0}, -{89,-20,1}, -{89,-20,2}, -{89,-20,3}, -{89,-20,4}, -{89,-20,5}, -{89,-20,6}, -{89,-20,7}, -{89,-20,8}, -{89,-20,9}, -{89,-20,10}, -{89,-20,11}, -{89,-20,12}, -{89,-20,13}, -{89,-20,14}, -{89,-20,15}, -{89,-20,16}, -{89,-20,17}, -{89,-20,18}, -{89,-20,19}, -{89,-20,20}, -{89,-20,21}, -{89,-20,22}, -{89,-20,23}, -{89,-20,24}, -{89,-20,25}, -{89,-20,26}, -{89,-20,27}, -{89,-20,28}, -{89,-20,29}, -{89,-20,30}, -{89,-20,31}, -{89,-20,32}, -{89,-20,33}, -{89,-20,34}, -{89,-20,35}, -{89,-20,36}, -{89,-20,37}, -{89,-20,38}, -{89,-20,39}, -{89,-20,40}, -{89,-20,41}, -{89,-20,42}, -{89,-20,43}, -{89,-20,44}, -{89,-20,45}, -{89,-20,46}, -{89,-20,47}, -{89,-20,48}, -{89,-20,49}, -{89,-20,50}, -{89,-20,51}, -{89,-20,52}, -{89,-20,53}, -{89,-20,54}, -{89,-20,55}, -{89,-20,56}, -{89,-20,57}, -{89,-20,58}, -{89,-20,59}, -{89,-20,60}, -{89,-20,61}, -{89,-20,62}, -{89,-20,63}, -{89,-20,64}, -{89,-20,65}, -{89,-20,66}, -{89,-20,67}, -{89,-20,68}, -{89,-20,69}, -{89,-20,70}, -{89,-20,71}, -{89,-20,72}, -{89,-20,73}, -{89,-20,74}, -{89,-20,75}, -{89,-20,76}, -{89,-20,77}, -{89,-20,78}, -{89,-20,79}, -{89,-20,80}, -{89,-20,81}, -{89,-20,82}, -{89,-20,83}, -{89,-20,84}, -{89,-20,85}, -{89,-20,86}, -{89,-20,87}, -{89,-19,-17}, -{89,-19,-16}, -{89,-19,-15}, -{89,-19,-14}, -{89,-19,-13}, -{89,-19,-12}, -{89,-19,-11}, -{89,-19,-10}, -{89,-19,-9}, -{89,-19,-8}, -{89,-19,-7}, -{89,-19,-6}, -{89,-19,-5}, -{89,-19,-4}, -{89,-19,-3}, -{89,-19,-2}, -{89,-19,-1}, -{89,-19,0}, -{89,-19,1}, -{89,-19,2}, -{89,-19,3}, -{89,-19,4}, -{89,-19,5}, -{89,-19,6}, -{89,-19,7}, -{89,-19,8}, -{89,-19,9}, -{89,-19,10}, -{89,-19,11}, -{89,-19,12}, -{89,-19,13}, -{89,-19,14}, -{89,-19,15}, -{89,-19,16}, -{89,-19,17}, -{89,-19,18}, -{89,-19,19}, -{89,-19,20}, -{89,-19,21}, -{89,-19,22}, -{89,-19,23}, -{89,-19,24}, -{89,-19,25}, -{89,-19,26}, -{89,-19,27}, -{89,-19,28}, -{89,-19,29}, -{89,-19,30}, -{89,-19,31}, -{89,-19,32}, -{89,-19,33}, -{89,-19,34}, -{89,-19,35}, -{89,-19,36}, -{89,-19,37}, -{89,-19,38}, -{89,-19,39}, -{89,-19,40}, -{89,-19,41}, -{89,-19,42}, -{89,-19,43}, -{89,-19,44}, -{89,-19,45}, -{89,-19,46}, -{89,-19,47}, -{89,-19,48}, -{89,-19,49}, -{89,-19,50}, -{89,-19,51}, -{89,-19,52}, -{89,-19,53}, -{89,-19,54}, -{89,-19,55}, -{89,-19,56}, -{89,-19,57}, -{89,-19,58}, -{89,-19,59}, -{89,-19,60}, -{89,-19,61}, -{89,-19,62}, -{89,-19,63}, -{89,-19,64}, -{89,-19,65}, -{89,-19,66}, -{89,-19,67}, -{89,-19,68}, -{89,-19,69}, -{89,-19,70}, -{89,-19,71}, -{89,-19,72}, -{89,-19,73}, -{89,-19,74}, -{89,-19,75}, -{89,-19,76}, -{89,-19,77}, -{89,-19,78}, -{89,-19,79}, -{89,-19,80}, -{89,-19,81}, -{89,-19,82}, -{89,-19,83}, -{89,-19,84}, -{89,-19,85}, -{89,-19,86}, -{89,-19,87}, -{89,-18,-17}, -{89,-18,-16}, -{89,-18,-15}, -{89,-18,-14}, -{89,-18,-13}, -{89,-18,-12}, -{89,-18,-11}, -{89,-18,-10}, -{89,-18,-9}, -{89,-18,-8}, -{89,-18,-7}, -{89,-18,-6}, -{89,-18,-5}, -{89,-18,-4}, -{89,-18,-3}, -{89,-18,-2}, -{89,-18,-1}, -{89,-18,0}, -{89,-18,1}, -{89,-18,2}, -{89,-18,3}, -{89,-18,4}, -{89,-18,5}, -{89,-18,6}, -{89,-18,7}, -{89,-18,8}, -{89,-18,9}, -{89,-18,10}, -{89,-18,11}, -{89,-18,12}, -{89,-18,13}, -{89,-18,14}, -{89,-18,15}, -{89,-18,16}, -{89,-18,17}, -{89,-18,18}, -{89,-18,19}, -{89,-18,20}, -{89,-18,21}, -{89,-18,22}, -{89,-18,23}, -{89,-18,24}, -{89,-18,25}, -{89,-18,26}, -{89,-18,27}, -{89,-18,28}, -{89,-18,29}, -{89,-18,30}, -{89,-18,31}, -{89,-18,32}, -{89,-18,33}, -{89,-18,34}, -{89,-18,35}, -{89,-18,36}, -{89,-18,37}, -{89,-18,38}, -{89,-18,39}, -{89,-18,40}, -{89,-18,41}, -{89,-18,42}, -{89,-18,43}, -{89,-18,44}, -{89,-18,45}, -{89,-18,46}, -{89,-18,47}, -{89,-18,48}, -{89,-18,49}, -{89,-18,50}, -{89,-18,51}, -{89,-18,52}, -{89,-18,53}, -{89,-18,54}, -{89,-18,55}, -{89,-18,56}, -{89,-18,57}, -{89,-18,58}, -{89,-18,59}, -{89,-18,60}, -{89,-18,61}, -{89,-18,62}, -{89,-18,63}, -{89,-18,64}, -{89,-18,65}, -{89,-18,66}, -{89,-18,67}, -{89,-18,68}, -{89,-18,69}, -{89,-18,70}, -{89,-18,71}, -{89,-18,72}, -{89,-18,73}, -{89,-18,74}, -{89,-18,75}, -{89,-18,76}, -{89,-18,77}, -{89,-18,78}, -{89,-18,79}, -{89,-18,80}, -{89,-18,81}, -{89,-18,82}, -{89,-18,83}, -{89,-18,84}, -{89,-18,85}, -{89,-18,86}, -{89,-18,87}, -{89,-17,-17}, -{89,-17,-16}, -{89,-17,-15}, -{89,-17,-14}, -{89,-17,-13}, -{89,-17,-12}, -{89,-17,-11}, -{89,-17,-10}, -{89,-17,-9}, -{89,-17,-8}, -{89,-17,-7}, -{89,-17,-6}, -{89,-17,-5}, -{89,-17,-4}, -{89,-17,-3}, -{89,-17,-2}, -{89,-17,-1}, -{89,-17,0}, -{89,-17,1}, -{89,-17,2}, -{89,-17,3}, -{89,-17,4}, -{89,-17,5}, -{89,-17,6}, -{89,-17,7}, -{89,-17,8}, -{89,-17,9}, -{89,-17,10}, -{89,-17,11}, -{89,-17,12}, -{89,-17,13}, -{89,-17,14}, -{89,-17,15}, -{89,-17,16}, -{89,-17,17}, -{89,-17,18}, -{89,-17,19}, -{89,-17,20}, -{89,-17,21}, -{89,-17,22}, -{89,-17,23}, -{89,-17,24}, -{89,-17,25}, -{89,-17,26}, -{89,-17,27}, -{89,-17,28}, -{89,-17,29}, -{89,-17,30}, -{89,-17,31}, -{89,-17,32}, -{89,-17,33}, -{89,-17,34}, -{89,-17,35}, -{89,-17,36}, -{89,-17,37}, -{89,-17,38}, -{89,-17,39}, -{89,-17,40}, -{89,-17,41}, -{89,-17,42}, -{89,-17,43}, -{89,-17,44}, -{89,-17,45}, -{89,-17,46}, -{89,-17,47}, -{89,-17,48}, -{89,-17,49}, -{89,-17,50}, -{89,-17,51}, -{89,-17,52}, -{89,-17,53}, -{89,-17,54}, -{89,-17,55}, -{89,-17,56}, -{89,-17,57}, -{89,-17,58}, -{89,-17,59}, -{89,-17,60}, -{89,-17,61}, -{89,-17,62}, -{89,-17,63}, -{89,-17,64}, -{89,-17,65}, -{89,-17,66}, -{89,-17,67}, -{89,-17,68}, -{89,-17,69}, -{89,-17,70}, -{89,-17,71}, -{89,-17,72}, -{89,-17,73}, -{89,-17,74}, -{89,-17,75}, -{89,-17,76}, -{89,-17,77}, -{89,-17,78}, -{89,-17,79}, -{89,-17,80}, -{89,-17,81}, -{89,-17,82}, -{89,-17,83}, -{89,-17,84}, -{89,-17,85}, -{89,-17,86}, -{89,-17,87}, -{89,-17,88}, -{89,-16,-17}, -{89,-16,-16}, -{89,-16,-15}, -{89,-16,-14}, -{89,-16,-13}, -{89,-16,-12}, -{89,-16,-11}, -{89,-16,-10}, -{89,-16,-9}, -{89,-16,-8}, -{89,-16,-7}, -{89,-16,-6}, -{89,-16,-5}, -{89,-16,-4}, -{89,-16,-3}, -{89,-16,-2}, -{89,-16,-1}, -{89,-16,0}, -{89,-16,1}, -{89,-16,2}, -{89,-16,3}, -{89,-16,4}, -{89,-16,5}, -{89,-16,6}, -{89,-16,7}, -{89,-16,8}, -{89,-16,9}, -{89,-16,10}, -{89,-16,11}, -{89,-16,12}, -{89,-16,13}, -{89,-16,14}, -{89,-16,15}, -{89,-16,16}, -{89,-16,17}, -{89,-16,18}, -{89,-16,19}, -{89,-16,20}, -{89,-16,21}, -{89,-16,22}, -{89,-16,23}, -{89,-16,24}, -{89,-16,25}, -{89,-16,26}, -{89,-16,27}, -{89,-16,28}, -{89,-16,29}, -{89,-16,30}, -{89,-16,31}, -{89,-16,32}, -{89,-16,33}, -{89,-16,34}, -{89,-16,35}, -{89,-16,36}, -{89,-16,37}, -{89,-16,38}, -{89,-16,39}, -{89,-16,40}, -{89,-16,41}, -{89,-16,42}, -{89,-16,43}, -{89,-16,44}, -{89,-16,45}, -{89,-16,46}, -{89,-16,47}, -{89,-16,48}, -{89,-16,49}, -{89,-16,50}, -{89,-16,51}, -{89,-16,52}, -{89,-16,53}, -{89,-16,54}, -{89,-16,55}, -{89,-16,56}, -{89,-16,57}, -{89,-16,58}, -{89,-16,59}, -{89,-16,60}, -{89,-16,61}, -{89,-16,62}, -{89,-16,63}, -{89,-16,64}, -{89,-16,65}, -{89,-16,66}, -{89,-16,67}, -{89,-16,68}, -{89,-16,69}, -{89,-16,70}, -{89,-16,71}, -{89,-16,72}, -{89,-16,73}, -{89,-16,74}, -{89,-16,75}, -{89,-16,76}, -{89,-16,77}, -{89,-16,78}, -{89,-16,79}, -{89,-16,80}, -{89,-16,81}, -{89,-16,82}, -{89,-16,83}, -{89,-16,84}, -{89,-16,85}, -{89,-16,86}, -{89,-16,87}, -{89,-16,88}, -{89,-15,-17}, -{89,-15,-16}, -{89,-15,-15}, -{89,-15,-14}, -{89,-15,-13}, -{89,-15,-12}, -{89,-15,-11}, -{89,-15,-10}, -{89,-15,-9}, -{89,-15,-8}, -{89,-15,-7}, -{89,-15,-6}, -{89,-15,-5}, -{89,-15,-4}, -{89,-15,-3}, -{89,-15,-2}, -{89,-15,-1}, -{89,-15,0}, -{89,-15,1}, -{89,-15,2}, -{89,-15,3}, -{89,-15,4}, -{89,-15,5}, -{89,-15,6}, -{89,-15,7}, -{89,-15,8}, -{89,-15,9}, -{89,-15,10}, -{89,-15,11}, -{89,-15,12}, -{89,-15,13}, -{89,-15,14}, -{89,-15,15}, -{89,-15,16}, -{89,-15,17}, -{89,-15,18}, -{89,-15,19}, -{89,-15,20}, -{89,-15,21}, -{89,-15,22}, -{89,-15,23}, -{89,-15,24}, -{89,-15,25}, -{89,-15,26}, -{89,-15,27}, -{89,-15,28}, -{89,-15,29}, -{89,-15,30}, -{89,-15,31}, -{89,-15,32}, -{89,-15,33}, -{89,-15,34}, -{89,-15,35}, -{89,-15,36}, -{89,-15,37}, -{89,-15,38}, -{89,-15,39}, -{89,-15,40}, -{89,-15,41}, -{89,-15,42}, -{89,-15,43}, -{89,-15,44}, -{89,-15,45}, -{89,-15,46}, -{89,-15,47}, -{89,-15,48}, -{89,-15,49}, -{89,-15,50}, -{89,-15,51}, -{89,-15,52}, -{89,-15,53}, -{89,-15,54}, -{89,-15,55}, -{89,-15,56}, -{89,-15,57}, -{89,-15,58}, -{89,-15,59}, -{89,-15,60}, -{89,-15,61}, -{89,-15,62}, -{89,-15,63}, -{89,-15,64}, -{89,-15,65}, -{89,-15,66}, -{89,-15,67}, -{89,-15,68}, -{89,-15,69}, -{89,-15,70}, -{89,-15,71}, -{89,-15,72}, -{89,-15,73}, -{89,-15,74}, -{89,-15,75}, -{89,-15,76}, -{89,-15,77}, -{89,-15,78}, -{89,-15,79}, -{89,-15,80}, -{89,-15,81}, -{89,-15,82}, -{89,-15,83}, -{89,-15,84}, -{89,-15,85}, -{89,-15,86}, -{89,-15,87}, -{89,-15,88}, -{89,-14,-17}, -{89,-14,-16}, -{89,-14,-15}, -{89,-14,-14}, -{89,-14,-13}, -{89,-14,-12}, -{89,-14,-11}, -{89,-14,-10}, -{89,-14,-9}, -{89,-14,-8}, -{89,-14,-7}, -{89,-14,-6}, -{89,-14,-5}, -{89,-14,-4}, -{89,-14,-3}, -{89,-14,-2}, -{89,-14,-1}, -{89,-14,0}, -{89,-14,1}, -{89,-14,2}, -{89,-14,3}, -{89,-14,4}, -{89,-14,5}, -{89,-14,6}, -{89,-14,7}, -{89,-14,8}, -{89,-14,9}, -{89,-14,10}, -{89,-14,11}, -{89,-14,12}, -{89,-14,13}, -{89,-14,14}, -{89,-14,15}, -{89,-14,16}, -{89,-14,17}, -{89,-14,18}, -{89,-14,19}, -{89,-14,20}, -{89,-14,21}, -{89,-14,22}, -{89,-14,23}, -{89,-14,24}, -{89,-14,25}, -{89,-14,26}, -{89,-14,27}, -{89,-14,28}, -{89,-14,29}, -{89,-14,30}, -{89,-14,31}, -{89,-14,32}, -{89,-14,33}, -{89,-14,34}, -{89,-14,35}, -{89,-14,36}, -{89,-14,37}, -{89,-14,38}, -{89,-14,39}, -{89,-14,40}, -{89,-14,41}, -{89,-14,42}, -{89,-14,43}, -{89,-14,44}, -{89,-14,45}, -{89,-14,46}, -{89,-14,47}, -{89,-14,48}, -{89,-14,49}, -{89,-14,50}, -{89,-14,51}, -{89,-14,52}, -{89,-14,53}, -{89,-14,54}, -{89,-14,55}, -{89,-14,56}, -{89,-14,57}, -{89,-14,58}, -{89,-14,59}, -{89,-14,60}, -{89,-14,61}, -{89,-14,62}, -{89,-14,63}, -{89,-14,64}, -{89,-14,65}, -{89,-14,66}, -{89,-14,67}, -{89,-14,68}, -{89,-14,69}, -{89,-14,70}, -{89,-14,71}, -{89,-14,72}, -{89,-14,73}, -{89,-14,74}, -{89,-14,75}, -{89,-14,76}, -{89,-14,77}, -{89,-14,78}, -{89,-14,79}, -{89,-14,80}, -{89,-14,81}, -{89,-14,82}, -{89,-14,83}, -{89,-14,84}, -{89,-14,85}, -{89,-14,86}, -{89,-14,87}, -{89,-14,88}, -{89,-13,-17}, -{89,-13,-16}, -{89,-13,-15}, -{89,-13,-14}, -{89,-13,-13}, -{89,-13,-12}, -{89,-13,-11}, -{89,-13,-10}, -{89,-13,-9}, -{89,-13,-8}, -{89,-13,-7}, -{89,-13,-6}, -{89,-13,-5}, -{89,-13,-4}, -{89,-13,-3}, -{89,-13,-2}, -{89,-13,-1}, -{89,-13,0}, -{89,-13,1}, -{89,-13,2}, -{89,-13,3}, -{89,-13,4}, -{89,-13,5}, -{89,-13,6}, -{89,-13,7}, -{89,-13,8}, -{89,-13,9}, -{89,-13,10}, -{89,-13,11}, -{89,-13,12}, -{89,-13,13}, -{89,-13,14}, -{89,-13,15}, -{89,-13,16}, -{89,-13,17}, -{89,-13,18}, -{89,-13,19}, -{89,-13,20}, -{89,-13,21}, -{89,-13,22}, -{89,-13,23}, -{89,-13,24}, -{89,-13,25}, -{89,-13,26}, -{89,-13,27}, -{89,-13,28}, -{89,-13,29}, -{89,-13,30}, -{89,-13,31}, -{89,-13,32}, -{89,-13,33}, -{89,-13,34}, -{89,-13,35}, -{89,-13,36}, -{89,-13,37}, -{89,-13,38}, -{89,-13,39}, -{89,-13,40}, -{89,-13,41}, -{89,-13,42}, -{89,-13,43}, -{89,-13,44}, -{89,-13,45}, -{89,-13,46}, -{89,-13,47}, -{89,-13,48}, -{89,-13,49}, -{89,-13,50}, -{89,-13,51}, -{89,-13,52}, -{89,-13,53}, -{89,-13,54}, -{89,-13,55}, -{89,-13,56}, -{89,-13,57}, -{89,-13,58}, -{89,-13,59}, -{89,-13,60}, -{89,-13,61}, -{89,-13,62}, -{89,-13,63}, -{89,-13,64}, -{89,-13,65}, -{89,-13,66}, -{89,-13,67}, -{89,-13,68}, -{89,-13,69}, -{89,-13,70}, -{89,-13,71}, -{89,-13,72}, -{89,-13,73}, -{89,-13,74}, -{89,-13,75}, -{89,-13,76}, -{89,-13,77}, -{89,-13,78}, -{89,-13,79}, -{89,-13,80}, -{89,-13,81}, -{89,-13,82}, -{89,-13,83}, -{89,-13,84}, -{89,-13,85}, -{89,-13,86}, -{89,-13,87}, -{89,-13,88}, -{89,-12,-17}, -{89,-12,-16}, -{89,-12,-15}, -{89,-12,-14}, -{89,-12,-13}, -{89,-12,-12}, -{89,-12,-11}, -{89,-12,-10}, -{89,-12,-9}, -{89,-12,-8}, -{89,-12,-7}, -{89,-12,-6}, -{89,-12,-5}, -{89,-12,-4}, -{89,-12,-3}, -{89,-12,-2}, -{89,-12,-1}, -{89,-12,0}, -{89,-12,1}, -{89,-12,2}, -{89,-12,3}, -{89,-12,4}, -{89,-12,5}, -{89,-12,6}, -{89,-12,7}, -{89,-12,8}, -{89,-12,9}, -{89,-12,10}, -{89,-12,11}, -{89,-12,12}, -{89,-12,13}, -{89,-12,14}, -{89,-12,15}, -{89,-12,16}, -{89,-12,17}, -{89,-12,18}, -{89,-12,19}, -{89,-12,20}, -{89,-12,21}, -{89,-12,22}, -{89,-12,23}, -{89,-12,24}, -{89,-12,25}, -{89,-12,26}, -{89,-12,27}, -{89,-12,28}, -{89,-12,29}, -{89,-12,30}, -{89,-12,31}, -{89,-12,32}, -{89,-12,33}, -{89,-12,34}, -{89,-12,35}, -{89,-12,36}, -{89,-12,37}, -{89,-12,38}, -{89,-12,39}, -{89,-12,40}, -{89,-12,41}, -{89,-12,42}, -{89,-12,43}, -{89,-12,44}, -{89,-12,45}, -{89,-12,46}, -{89,-12,47}, -{89,-12,48}, -{89,-12,49}, -{89,-12,50}, -{89,-12,51}, -{89,-12,52}, -{89,-12,53}, -{89,-12,54}, -{89,-12,55}, -{89,-12,56}, -{89,-12,57}, -{89,-12,58}, -{89,-12,59}, -{89,-12,60}, -{89,-12,61}, -{89,-12,62}, -{89,-12,63}, -{89,-12,64}, -{89,-12,65}, -{89,-12,66}, -{89,-12,67}, -{89,-12,68}, -{89,-12,69}, -{89,-12,70}, -{89,-12,71}, -{89,-12,72}, -{89,-12,73}, -{89,-12,74}, -{89,-12,75}, -{89,-12,76}, -{89,-12,77}, -{89,-12,78}, -{89,-12,79}, -{89,-12,80}, -{89,-12,81}, -{89,-12,82}, -{89,-12,83}, -{89,-12,84}, -{89,-12,85}, -{89,-12,86}, -{89,-12,87}, -{89,-12,88}, -{89,-11,-16}, -{89,-11,-15}, -{89,-11,-14}, -{89,-11,-13}, -{89,-11,-12}, -{89,-11,-11}, -{89,-11,-10}, -{89,-11,-9}, -{89,-11,-8}, -{89,-11,-7}, -{89,-11,-6}, -{89,-11,-5}, -{89,-11,-4}, -{89,-11,-3}, -{89,-11,-2}, -{89,-11,-1}, -{89,-11,0}, -{89,-11,1}, -{89,-11,2}, -{89,-11,3}, -{89,-11,4}, -{89,-11,5}, -{89,-11,6}, -{89,-11,7}, -{89,-11,8}, -{89,-11,9}, -{89,-11,10}, -{89,-11,11}, -{89,-11,12}, -{89,-11,13}, -{89,-11,14}, -{89,-11,15}, -{89,-11,16}, -{89,-11,17}, -{89,-11,18}, -{89,-11,19}, -{89,-11,20}, -{89,-11,21}, -{89,-11,22}, -{89,-11,23}, -{89,-11,24}, -{89,-11,25}, -{89,-11,26}, -{89,-11,27}, -{89,-11,28}, -{89,-11,29}, -{89,-11,30}, -{89,-11,31}, -{89,-11,32}, -{89,-11,33}, -{89,-11,34}, -{89,-11,35}, -{89,-11,36}, -{89,-11,37}, -{89,-11,38}, -{89,-11,39}, -{89,-11,40}, -{89,-11,41}, -{89,-11,42}, -{89,-11,43}, -{89,-11,44}, -{89,-11,45}, -{89,-11,46}, -{89,-11,47}, -{89,-11,48}, -{89,-11,49}, -{89,-11,50}, -{89,-11,51}, -{89,-11,52}, -{89,-11,53}, -{89,-11,54}, -{89,-11,55}, -{89,-11,56}, -{89,-11,57}, -{89,-11,58}, -{89,-11,59}, -{89,-11,60}, -{89,-11,61}, -{89,-11,62}, -{89,-11,63}, -{89,-11,64}, -{89,-11,65}, -{89,-11,66}, -{89,-11,67}, -{89,-11,68}, -{89,-11,69}, -{89,-11,70}, -{89,-11,71}, -{89,-11,72}, -{89,-11,73}, -{89,-11,74}, -{89,-11,75}, -{89,-11,76}, -{89,-11,77}, -{89,-11,78}, -{89,-11,79}, -{89,-11,80}, -{89,-11,81}, -{89,-11,82}, -{89,-11,83}, -{89,-11,84}, -{89,-11,85}, -{89,-11,86}, -{89,-11,87}, -{89,-11,88}, -{89,-10,-16}, -{89,-10,-15}, -{89,-10,-14}, -{89,-10,-13}, -{89,-10,-12}, -{89,-10,-11}, -{89,-10,-10}, -{89,-10,-9}, -{89,-10,-8}, -{89,-10,-7}, -{89,-10,-6}, -{89,-10,-5}, -{89,-10,-4}, -{89,-10,-3}, -{89,-10,-2}, -{89,-10,-1}, -{89,-10,0}, -{89,-10,1}, -{89,-10,2}, -{89,-10,3}, -{89,-10,4}, -{89,-10,5}, -{89,-10,6}, -{89,-10,7}, -{89,-10,8}, -{89,-10,9}, -{89,-10,10}, -{89,-10,11}, -{89,-10,12}, -{89,-10,13}, -{89,-10,14}, -{89,-10,15}, -{89,-10,16}, -{89,-10,17}, -{89,-10,18}, -{89,-10,19}, -{89,-10,20}, -{89,-10,21}, -{89,-10,22}, -{89,-10,23}, -{89,-10,24}, -{89,-10,25}, -{89,-10,26}, -{89,-10,27}, -{89,-10,28}, -{89,-10,29}, -{89,-10,30}, -{89,-10,31}, -{89,-10,32}, -{89,-10,33}, -{89,-10,34}, -{89,-10,35}, -{89,-10,36}, -{89,-10,37}, -{89,-10,38}, -{89,-10,39}, -{89,-10,40}, -{89,-10,41}, -{89,-10,42}, -{89,-10,43}, -{89,-10,44}, -{89,-10,45}, -{89,-10,46}, -{89,-10,47}, -{89,-10,48}, -{89,-10,49}, -{89,-10,50}, -{89,-10,51}, -{89,-10,52}, -{89,-10,53}, -{89,-10,54}, -{89,-10,55}, -{89,-10,56}, -{89,-10,57}, -{89,-10,58}, -{89,-10,59}, -{89,-10,60}, -{89,-10,61}, -{89,-10,62}, -{89,-10,63}, -{89,-10,64}, -{89,-10,65}, -{89,-10,66}, -{89,-10,67}, -{89,-10,68}, -{89,-10,69}, -{89,-10,70}, -{89,-10,71}, -{89,-10,72}, -{89,-10,73}, -{89,-10,74}, -{89,-10,75}, -{89,-10,76}, -{89,-10,77}, -{89,-10,78}, -{89,-10,79}, -{89,-10,80}, -{89,-10,81}, -{89,-10,82}, -{89,-10,83}, -{89,-10,84}, -{89,-10,85}, -{89,-10,86}, -{89,-10,87}, -{89,-10,88}, -{89,-9,-16}, -{89,-9,-15}, -{89,-9,-14}, -{89,-9,-13}, -{89,-9,-12}, -{89,-9,-11}, -{89,-9,-10}, -{89,-9,-9}, -{89,-9,-8}, -{89,-9,-7}, -{89,-9,-6}, -{89,-9,-5}, -{89,-9,-4}, -{89,-9,-3}, -{89,-9,-2}, -{89,-9,-1}, -{89,-9,0}, -{89,-9,1}, -{89,-9,2}, -{89,-9,3}, -{89,-9,4}, -{89,-9,5}, -{89,-9,6}, -{89,-9,7}, -{89,-9,8}, -{89,-9,9}, -{89,-9,10}, -{89,-9,11}, -{89,-9,12}, -{89,-9,13}, -{89,-9,14}, -{89,-9,15}, -{89,-9,16}, -{89,-9,17}, -{89,-9,18}, -{89,-9,19}, -{89,-9,20}, -{89,-9,21}, -{89,-9,22}, -{89,-9,23}, -{89,-9,24}, -{89,-9,25}, -{89,-9,26}, -{89,-9,27}, -{89,-9,28}, -{89,-9,29}, -{89,-9,30}, -{89,-9,31}, -{89,-9,32}, -{89,-9,33}, -{89,-9,34}, -{89,-9,35}, -{89,-9,36}, -{89,-9,37}, -{89,-9,38}, -{89,-9,39}, -{89,-9,40}, -{89,-9,41}, -{89,-9,42}, -{89,-9,43}, -{89,-9,44}, -{89,-9,45}, -{89,-9,46}, -{89,-9,47}, -{89,-9,48}, -{89,-9,49}, -{89,-9,50}, -{89,-9,51}, -{89,-9,52}, -{89,-9,53}, -{89,-9,54}, -{89,-9,55}, -{89,-9,56}, -{89,-9,57}, -{89,-9,58}, -{89,-9,59}, -{89,-9,60}, -{89,-9,61}, -{89,-9,62}, -{89,-9,63}, -{89,-9,64}, -{89,-9,65}, -{89,-9,66}, -{89,-9,67}, -{89,-9,68}, -{89,-9,69}, -{89,-9,70}, -{89,-9,71}, -{89,-9,72}, -{89,-9,73}, -{89,-9,74}, -{89,-9,75}, -{89,-9,76}, -{89,-9,77}, -{89,-9,78}, -{89,-9,79}, -{89,-9,80}, -{89,-9,81}, -{89,-9,82}, -{89,-9,83}, -{89,-9,84}, -{89,-9,85}, -{89,-9,86}, -{89,-9,87}, -{89,-9,88}, -{89,-8,-16}, -{89,-8,-15}, -{89,-8,-14}, -{89,-8,-13}, -{89,-8,-12}, -{89,-8,-11}, -{89,-8,-10}, -{89,-8,-9}, -{89,-8,-8}, -{89,-8,-7}, -{89,-8,-6}, -{89,-8,-5}, -{89,-8,-4}, -{89,-8,-3}, -{89,-8,-2}, -{89,-8,-1}, -{89,-8,0}, -{89,-8,1}, -{89,-8,2}, -{89,-8,3}, -{89,-8,4}, -{89,-8,5}, -{89,-8,6}, -{89,-8,7}, -{89,-8,8}, -{89,-8,9}, -{89,-8,10}, -{89,-8,11}, -{89,-8,12}, -{89,-8,13}, -{89,-8,14}, -{89,-8,15}, -{89,-8,16}, -{89,-8,17}, -{89,-8,18}, -{89,-8,19}, -{89,-8,20}, -{89,-8,21}, -{89,-8,22}, -{89,-8,23}, -{89,-8,24}, -{89,-8,25}, -{89,-8,26}, -{89,-8,27}, -{89,-8,28}, -{89,-8,29}, -{89,-8,30}, -{89,-8,31}, -{89,-8,32}, -{89,-8,33}, -{89,-8,34}, -{89,-8,35}, -{89,-8,36}, -{89,-8,37}, -{89,-8,38}, -{89,-8,39}, -{89,-8,40}, -{89,-8,41}, -{89,-8,42}, -{89,-8,43}, -{89,-8,44}, -{89,-8,45}, -{89,-8,46}, -{89,-8,47}, -{89,-8,48}, -{89,-8,49}, -{89,-8,50}, -{89,-8,51}, -{89,-8,52}, -{89,-8,53}, -{89,-8,54}, -{89,-8,55}, -{89,-8,56}, -{89,-8,57}, -{89,-8,58}, -{89,-8,59}, -{89,-8,60}, -{89,-8,61}, -{89,-8,62}, -{89,-8,63}, -{89,-8,64}, -{89,-8,65}, -{89,-8,66}, -{89,-8,67}, -{89,-8,68}, -{89,-8,69}, -{89,-8,70}, -{89,-8,71}, -{89,-8,72}, -{89,-8,73}, -{89,-8,74}, -{89,-8,75}, -{89,-8,76}, -{89,-8,77}, -{89,-8,78}, -{89,-8,79}, -{89,-8,80}, -{89,-8,81}, -{89,-8,82}, -{89,-8,83}, -{89,-8,84}, -{89,-8,85}, -{89,-8,86}, -{89,-8,87}, -{89,-8,88}, -{89,-7,-16}, -{89,-7,-15}, -{89,-7,-14}, -{89,-7,-13}, -{89,-7,-12}, -{89,-7,-11}, -{89,-7,-10}, -{89,-7,-9}, -{89,-7,-8}, -{89,-7,-7}, -{89,-7,-6}, -{89,-7,-5}, -{89,-7,-4}, -{89,-7,-3}, -{89,-7,-2}, -{89,-7,-1}, -{89,-7,0}, -{89,-7,1}, -{89,-7,2}, -{89,-7,3}, -{89,-7,4}, -{89,-7,5}, -{89,-7,6}, -{89,-7,7}, -{89,-7,8}, -{89,-7,9}, -{89,-7,10}, -{89,-7,11}, -{89,-7,12}, -{89,-7,13}, -{89,-7,14}, -{89,-7,15}, -{89,-7,16}, -{89,-7,17}, -{89,-7,18}, -{89,-7,19}, -{89,-7,20}, -{89,-7,21}, -{89,-7,22}, -{89,-7,23}, -{89,-7,24}, -{89,-7,25}, -{89,-7,26}, -{89,-7,27}, -{89,-7,28}, -{89,-7,29}, -{89,-7,30}, -{89,-7,31}, -{89,-7,32}, -{89,-7,33}, -{89,-7,34}, -{89,-7,35}, -{89,-7,36}, -{89,-7,37}, -{89,-7,38}, -{89,-7,39}, -{89,-7,40}, -{89,-7,41}, -{89,-7,42}, -{89,-7,43}, -{89,-7,44}, -{89,-7,45}, -{89,-7,46}, -{89,-7,47}, -{89,-7,48}, -{89,-7,49}, -{89,-7,50}, -{89,-7,51}, -{89,-7,52}, -{89,-7,53}, -{89,-7,54}, -{89,-7,55}, -{89,-7,56}, -{89,-7,57}, -{89,-7,58}, -{89,-7,59}, -{89,-7,60}, -{89,-7,61}, -{89,-7,62}, -{89,-7,63}, -{89,-7,64}, -{89,-7,65}, -{89,-7,66}, -{89,-7,67}, -{89,-7,68}, -{89,-7,69}, -{89,-7,70}, -{89,-7,71}, -{89,-7,72}, -{89,-7,73}, -{89,-7,74}, -{89,-7,75}, -{89,-7,76}, -{89,-7,77}, -{89,-7,78}, -{89,-7,79}, -{89,-7,80}, -{89,-7,81}, -{89,-7,82}, -{89,-7,83}, -{89,-7,84}, -{89,-7,85}, -{89,-7,86}, -{89,-7,87}, -{89,-7,88}, -{89,-6,-16}, -{89,-6,-15}, -{89,-6,-14}, -{89,-6,-13}, -{89,-6,-12}, -{89,-6,-11}, -{89,-6,-10}, -{89,-6,-9}, -{89,-6,-8}, -{89,-6,-7}, -{89,-6,-6}, -{89,-6,-5}, -{89,-6,-4}, -{89,-6,-3}, -{89,-6,-2}, -{89,-6,-1}, -{89,-6,0}, -{89,-6,1}, -{89,-6,2}, -{89,-6,3}, -{89,-6,4}, -{89,-6,5}, -{89,-6,6}, -{89,-6,7}, -{89,-6,8}, -{89,-6,9}, -{89,-6,10}, -{89,-6,11}, -{89,-6,12}, -{89,-6,13}, -{89,-6,14}, -{89,-6,15}, -{89,-6,16}, -{89,-6,17}, -{89,-6,18}, -{89,-6,19}, -{89,-6,20}, -{89,-6,21}, -{89,-6,22}, -{89,-6,23}, -{89,-6,24}, -{89,-6,25}, -{89,-6,26}, -{89,-6,27}, -{89,-6,28}, -{89,-6,29}, -{89,-6,30}, -{89,-6,31}, -{89,-6,32}, -{89,-6,33}, -{89,-6,34}, -{89,-6,35}, -{89,-6,36}, -{89,-6,37}, -{89,-6,38}, -{89,-6,39}, -{89,-6,40}, -{89,-6,41}, -{89,-6,42}, -{89,-6,43}, -{89,-6,44}, -{89,-6,45}, -{89,-6,46}, -{89,-6,47}, -{89,-6,48}, -{89,-6,49}, -{89,-6,50}, -{89,-6,51}, -{89,-6,52}, -{89,-6,53}, -{89,-6,54}, -{89,-6,55}, -{89,-6,56}, -{89,-6,57}, -{89,-6,58}, -{89,-6,59}, -{89,-6,60}, -{89,-6,61}, -{89,-6,62}, -{89,-6,63}, -{89,-6,64}, -{89,-6,65}, -{89,-6,66}, -{89,-6,67}, -{89,-6,68}, -{89,-6,69}, -{89,-6,70}, -{89,-6,71}, -{89,-6,72}, -{89,-6,73}, -{89,-6,74}, -{89,-6,75}, -{89,-6,76}, -{89,-6,77}, -{89,-6,78}, -{89,-6,79}, -{89,-6,80}, -{89,-6,81}, -{89,-6,82}, -{89,-6,83}, -{89,-6,84}, -{89,-6,85}, -{89,-6,86}, -{89,-6,87}, -{89,-6,88}, -{89,-5,-16}, -{89,-5,-15}, -{89,-5,-14}, -{89,-5,-13}, -{89,-5,-12}, -{89,-5,-11}, -{89,-5,-10}, -{89,-5,-9}, -{89,-5,-8}, -{89,-5,-7}, -{89,-5,-6}, -{89,-5,-5}, -{89,-5,-4}, -{89,-5,-3}, -{89,-5,-2}, -{89,-5,-1}, -{89,-5,0}, -{89,-5,1}, -{89,-5,2}, -{89,-5,3}, -{89,-5,4}, -{89,-5,5}, -{89,-5,6}, -{89,-5,7}, -{89,-5,8}, -{89,-5,9}, -{89,-5,10}, -{89,-5,11}, -{89,-5,12}, -{89,-5,13}, -{89,-5,14}, -{89,-5,15}, -{89,-5,16}, -{89,-5,17}, -{89,-5,18}, -{89,-5,19}, -{89,-5,20}, -{89,-5,21}, -{89,-5,22}, -{89,-5,23}, -{89,-5,24}, -{89,-5,25}, -{89,-5,26}, -{89,-5,27}, -{89,-5,28}, -{89,-5,29}, -{89,-5,30}, -{89,-5,31}, -{89,-5,32}, -{89,-5,33}, -{89,-5,34}, -{89,-5,35}, -{89,-5,36}, -{89,-5,37}, -{89,-5,38}, -{89,-5,39}, -{89,-5,40}, -{89,-5,41}, -{89,-5,42}, -{89,-5,43}, -{89,-5,44}, -{89,-5,45}, -{89,-5,46}, -{89,-5,47}, -{89,-5,48}, -{89,-5,49}, -{89,-5,50}, -{89,-5,51}, -{89,-5,52}, -{89,-5,53}, -{89,-5,54}, -{89,-5,55}, -{89,-5,56}, -{89,-5,57}, -{89,-5,58}, -{89,-5,59}, -{89,-5,60}, -{89,-5,61}, -{89,-5,62}, -{89,-5,63}, -{89,-5,64}, -{89,-5,65}, -{89,-5,66}, -{89,-5,67}, -{89,-5,68}, -{89,-5,69}, -{89,-5,70}, -{89,-5,71}, -{89,-5,72}, -{89,-5,73}, -{89,-5,74}, -{89,-5,75}, -{89,-5,76}, -{89,-5,77}, -{89,-5,78}, -{89,-5,79}, -{89,-5,80}, -{89,-5,81}, -{89,-4,-16}, -{89,-4,-15}, -{89,-4,-14}, -{89,-4,-13}, -{89,-4,-12}, -{89,-4,-11}, -{89,-4,-10}, -{89,-4,-9}, -{89,-4,-8}, -{89,-4,-7}, -{89,-4,-6}, -{89,-4,-5}, -{89,-4,-4}, -{89,-4,-3}, -{89,-4,-2}, -{89,-4,-1}, -{89,-4,0}, -{89,-4,1}, -{89,-4,2}, -{89,-4,3}, -{89,-4,4}, -{89,-4,5}, -{89,-4,6}, -{89,-4,7}, -{89,-4,8}, -{89,-4,9}, -{89,-4,10}, -{89,-4,11}, -{89,-4,12}, -{89,-4,13}, -{89,-4,14}, -{89,-4,15}, -{89,-4,16}, -{89,-4,17}, -{89,-4,18}, -{89,-4,19}, -{89,-4,20}, -{89,-4,21}, -{89,-4,22}, -{89,-4,23}, -{89,-4,24}, -{89,-4,25}, -{89,-4,26}, -{89,-4,27}, -{89,-4,28}, -{89,-4,29}, -{89,-4,30}, -{89,-4,31}, -{89,-4,32}, -{89,-4,33}, -{89,-4,34}, -{89,-4,35}, -{89,-4,36}, -{89,-4,37}, -{89,-4,38}, -{89,-4,39}, -{89,-4,40}, -{89,-4,41}, -{89,-4,42}, -{89,-4,43}, -{89,-4,44}, -{89,-4,45}, -{89,-4,46}, -{89,-4,47}, -{89,-4,48}, -{89,-4,49}, -{89,-4,50}, -{89,-4,51}, -{89,-4,52}, -{89,-4,53}, -{89,-4,54}, -{89,-4,55}, -{89,-4,56}, -{89,-4,57}, -{89,-4,58}, -{89,-4,59}, -{89,-4,60}, -{89,-4,61}, -{89,-4,62}, -{89,-4,63}, -{89,-4,64}, -{89,-4,65}, -{89,-4,66}, -{89,-4,67}, -{89,-4,68}, -{89,-4,69}, -{89,-4,70}, -{89,-4,71}, -{89,-4,72}, -{89,-4,73}, -{89,-4,74}, -{89,-3,-16}, -{89,-3,-15}, -{89,-3,-14}, -{89,-3,-13}, -{89,-3,-12}, -{89,-3,-11}, -{89,-3,-10}, -{89,-3,-9}, -{89,-3,-8}, -{89,-3,-7}, -{89,-3,-6}, -{89,-3,-5}, -{89,-3,-4}, -{89,-3,-3}, -{89,-3,-2}, -{89,-3,-1}, -{89,-3,0}, -{89,-3,1}, -{89,-3,2}, -{89,-3,3}, -{89,-3,4}, -{89,-3,5}, -{89,-3,6}, -{89,-3,7}, -{89,-3,8}, -{89,-3,9}, -{89,-3,10}, -{89,-3,11}, -{89,-3,12}, -{89,-3,13}, -{89,-3,14}, -{89,-3,15}, -{89,-3,16}, -{89,-3,17}, -{89,-3,18}, -{89,-3,19}, -{89,-3,20}, -{89,-3,21}, -{89,-3,22}, -{89,-3,23}, -{89,-3,24}, -{89,-3,25}, -{89,-3,26}, -{89,-3,27}, -{89,-3,28}, -{89,-3,29}, -{89,-3,30}, -{89,-3,31}, -{89,-3,32}, -{89,-3,33}, -{89,-3,34}, -{89,-3,35}, -{89,-3,36}, -{89,-3,37}, -{89,-3,38}, -{89,-3,39}, -{89,-3,40}, -{89,-3,41}, -{89,-3,42}, -{89,-3,43}, -{89,-3,44}, -{89,-3,45}, -{89,-3,46}, -{89,-3,47}, -{89,-3,48}, -{89,-3,49}, -{89,-3,50}, -{89,-3,51}, -{89,-3,52}, -{89,-3,53}, -{89,-3,54}, -{89,-3,55}, -{89,-3,56}, -{89,-3,57}, -{89,-3,58}, -{89,-3,59}, -{89,-3,60}, -{89,-3,61}, -{89,-3,62}, -{89,-3,63}, -{89,-3,64}, -{89,-3,65}, -{89,-3,66}, -{89,-3,67}, -{89,-3,68}, -{89,-2,-16}, -{89,-2,-15}, -{89,-2,-14}, -{89,-2,-13}, -{89,-2,-12}, -{89,-2,-11}, -{89,-2,-10}, -{89,-2,-9}, -{89,-2,-8}, -{89,-2,-7}, -{89,-2,-6}, -{89,-2,-5}, -{89,-2,-4}, -{89,-2,-3}, -{89,-2,-2}, -{89,-2,-1}, -{89,-2,0}, -{89,-2,1}, -{89,-2,2}, -{89,-2,3}, -{89,-2,4}, -{89,-2,5}, -{89,-2,6}, -{89,-2,7}, -{89,-2,8}, -{89,-2,9}, -{89,-2,10}, -{89,-2,11}, -{89,-2,12}, -{89,-2,13}, -{89,-2,14}, -{89,-2,15}, -{89,-2,16}, -{89,-2,17}, -{89,-2,18}, -{89,-2,19}, -{89,-2,20}, -{89,-2,21}, -{89,-2,22}, -{89,-2,23}, -{89,-2,24}, -{89,-2,25}, -{89,-2,26}, -{89,-2,27}, -{89,-2,28}, -{89,-2,29}, -{89,-2,30}, -{89,-2,31}, -{89,-2,32}, -{89,-2,33}, -{89,-2,34}, -{89,-2,35}, -{89,-2,36}, -{89,-2,37}, -{89,-2,38}, -{89,-2,39}, -{89,-2,40}, -{89,-2,41}, -{89,-2,42}, -{89,-2,43}, -{89,-2,44}, -{89,-2,45}, -{89,-2,46}, -{89,-2,47}, -{89,-2,48}, -{89,-2,49}, -{89,-2,50}, -{89,-2,51}, -{89,-2,52}, -{89,-2,53}, -{89,-2,54}, -{89,-2,55}, -{89,-2,56}, -{89,-2,57}, -{89,-2,58}, -{89,-2,59}, -{89,-2,60}, -{89,-2,61}, -{89,-2,62}, -{89,-2,63}, -{89,-1,-16}, -{89,-1,-15}, -{89,-1,-14}, -{89,-1,-13}, -{89,-1,-12}, -{89,-1,-11}, -{89,-1,-10}, -{89,-1,-9}, -{89,-1,-8}, -{89,-1,-7}, -{89,-1,-6}, -{89,-1,-5}, -{89,-1,-4}, -{89,-1,-3}, -{89,-1,-2}, -{89,-1,-1}, -{89,-1,0}, -{89,-1,1}, -{89,-1,2}, -{89,-1,3}, -{89,-1,4}, -{89,-1,5}, -{89,-1,6}, -{89,-1,7}, -{89,-1,8}, -{89,-1,9}, -{89,-1,10}, -{89,-1,11}, -{89,-1,12}, -{89,-1,13}, -{89,-1,14}, -{89,-1,15}, -{89,-1,16}, -{89,-1,17}, -{89,-1,18}, -{89,-1,19}, -{89,-1,20}, -{89,-1,21}, -{89,-1,22}, -{89,-1,23}, -{89,-1,24}, -{89,-1,25}, -{89,-1,26}, -{89,-1,27}, -{89,-1,28}, -{89,-1,29}, -{89,-1,30}, -{89,-1,31}, -{89,-1,32}, -{89,-1,33}, -{89,-1,34}, -{89,-1,35}, -{89,-1,36}, -{89,-1,37}, -{89,-1,38}, -{89,-1,39}, -{89,-1,40}, -{89,-1,41}, -{89,-1,42}, -{89,-1,43}, -{89,-1,44}, -{89,-1,45}, -{89,-1,46}, -{89,-1,47}, -{89,-1,48}, -{89,-1,49}, -{89,-1,50}, -{89,-1,51}, -{89,-1,52}, -{89,-1,53}, -{89,-1,54}, -{89,-1,55}, -{89,-1,56}, -{89,-1,57}, -{89,-1,58}, -{89,0,-16}, -{89,0,-15}, -{89,0,-14}, -{89,0,-13}, -{89,0,-12}, -{89,0,-11}, -{89,0,-10}, -{89,0,-9}, -{89,0,-8}, -{89,0,-7}, -{89,0,-6}, -{89,0,-5}, -{89,0,-4}, -{89,0,-3}, -{89,0,-2}, -{89,0,-1}, -{89,0,0}, -{89,0,1}, -{89,0,2}, -{89,0,3}, -{89,0,4}, -{89,0,5}, -{89,0,6}, -{89,0,7}, -{89,0,8}, -{89,0,9}, -{89,0,10}, -{89,0,11}, -{89,0,12}, -{89,0,13}, -{89,0,14}, -{89,0,15}, -{89,0,16}, -{89,0,17}, -{89,0,18}, -{89,0,19}, -{89,0,20}, -{89,0,21}, -{89,0,22}, -{89,0,23}, -{89,0,24}, -{89,0,25}, -{89,0,26}, -{89,0,27}, -{89,0,28}, -{89,0,29}, -{89,0,30}, -{89,0,31}, -{89,0,32}, -{89,0,33}, -{89,0,34}, -{89,0,35}, -{89,0,36}, -{89,0,37}, -{89,0,38}, -{89,0,39}, -{89,0,40}, -{89,0,41}, -{89,0,42}, -{89,0,43}, -{89,0,44}, -{89,0,45}, -{89,0,46}, -{89,0,47}, -{89,0,48}, -{89,0,49}, -{89,0,50}, -{89,0,51}, -{89,0,52}, -{89,0,53}, -{89,1,-16}, -{89,1,-15}, -{89,1,-14}, -{89,1,-13}, -{89,1,-12}, -{89,1,-11}, -{89,1,-10}, -{89,1,-9}, -{89,1,-8}, -{89,1,-7}, -{89,1,-6}, -{89,1,-5}, -{89,1,-4}, -{89,1,-3}, -{89,1,-2}, -{89,1,-1}, -{89,1,0}, -{89,1,1}, -{89,1,2}, -{89,1,3}, -{89,1,4}, -{89,1,5}, -{89,1,6}, -{89,1,7}, -{89,1,8}, -{89,1,9}, -{89,1,10}, -{89,1,11}, -{89,1,12}, -{89,1,13}, -{89,1,14}, -{89,1,15}, -{89,1,16}, -{89,1,17}, -{89,1,18}, -{89,1,19}, -{89,1,20}, -{89,1,21}, -{89,1,22}, -{89,1,23}, -{89,1,24}, -{89,1,25}, -{89,1,26}, -{89,1,27}, -{89,1,28}, -{89,1,29}, -{89,1,30}, -{89,1,31}, -{89,1,32}, -{89,1,33}, -{89,1,34}, -{89,1,35}, -{89,1,36}, -{89,1,37}, -{89,1,38}, -{89,1,39}, -{89,1,40}, -{89,1,41}, -{89,1,42}, -{89,1,43}, -{89,1,44}, -{89,1,45}, -{89,1,46}, -{89,1,47}, -{89,1,48}, -{89,2,-16}, -{89,2,-15}, -{89,2,-14}, -{89,2,-13}, -{89,2,-12}, -{89,2,-11}, -{89,2,-10}, -{89,2,-9}, -{89,2,-8}, -{89,2,-7}, -{89,2,-6}, -{89,2,-5}, -{89,2,-4}, -{89,2,-3}, -{89,2,-2}, -{89,2,-1}, -{89,2,0}, -{89,2,1}, -{89,2,2}, -{89,2,3}, -{89,2,4}, -{89,2,5}, -{89,2,6}, -{89,2,7}, -{89,2,8}, -{89,2,9}, -{89,2,10}, -{89,2,11}, -{89,2,12}, -{89,2,13}, -{89,2,14}, -{89,2,15}, -{89,2,16}, -{89,2,17}, -{89,2,18}, -{89,2,19}, -{89,2,20}, -{89,2,21}, -{89,2,22}, -{89,2,23}, -{89,2,24}, -{89,2,25}, -{89,2,26}, -{89,2,27}, -{89,2,28}, -{89,2,29}, -{89,2,30}, -{89,2,31}, -{89,2,32}, -{89,2,33}, -{89,2,34}, -{89,2,35}, -{89,2,36}, -{89,2,37}, -{89,2,38}, -{89,2,39}, -{89,2,40}, -{89,2,41}, -{89,2,42}, -{89,2,43}, -{89,2,44}, -{89,3,-16}, -{89,3,-15}, -{89,3,-14}, -{89,3,-13}, -{89,3,-12}, -{89,3,-11}, -{89,3,-10}, -{89,3,-9}, -{89,3,-8}, -{89,3,-7}, -{89,3,-6}, -{89,3,-5}, -{89,3,-4}, -{89,3,-3}, -{89,3,-2}, -{89,3,-1}, -{89,3,0}, -{89,3,1}, -{89,3,2}, -{89,3,3}, -{89,3,4}, -{89,3,5}, -{89,3,6}, -{89,3,7}, -{89,3,8}, -{89,3,9}, -{89,3,10}, -{89,3,11}, -{89,3,12}, -{89,3,13}, -{89,3,14}, -{89,3,15}, -{89,3,16}, -{89,3,17}, -{89,3,18}, -{89,3,19}, -{89,3,20}, -{89,3,21}, -{89,3,22}, -{89,3,23}, -{89,3,24}, -{89,3,25}, -{89,3,26}, -{89,3,27}, -{89,3,28}, -{89,3,29}, -{89,3,30}, -{89,3,31}, -{89,3,32}, -{89,3,33}, -{89,3,34}, -{89,3,35}, -{89,3,36}, -{89,3,37}, -{89,3,38}, -{89,3,39}, -{89,3,40}, -{89,4,-16}, -{89,4,-15}, -{89,4,-14}, -{89,4,-13}, -{89,4,-12}, -{89,4,-11}, -{89,4,-10}, -{89,4,-9}, -{89,4,-8}, -{89,4,-7}, -{89,4,-6}, -{89,4,-5}, -{89,4,-4}, -{89,4,-3}, -{89,4,-2}, -{89,4,-1}, -{89,4,0}, -{89,4,1}, -{89,4,2}, -{89,4,3}, -{89,4,4}, -{89,4,5}, -{89,4,6}, -{89,4,7}, -{89,4,8}, -{89,4,9}, -{89,4,10}, -{89,4,11}, -{89,4,12}, -{89,4,13}, -{89,4,14}, -{89,4,15}, -{89,4,16}, -{89,4,17}, -{89,4,18}, -{89,4,19}, -{89,4,20}, -{89,4,21}, -{89,4,22}, -{89,4,23}, -{89,4,24}, -{89,4,25}, -{89,4,26}, -{89,4,27}, -{89,4,28}, -{89,4,29}, -{89,4,30}, -{89,4,31}, -{89,4,32}, -{89,4,33}, -{89,4,34}, -{89,4,35}, -{89,4,36}, -{89,4,37}, -{89,5,-16}, -{89,5,-15}, -{89,5,-14}, -{89,5,-13}, -{89,5,-12}, -{89,5,-11}, -{89,5,-10}, -{89,5,-9}, -{89,5,-8}, -{89,5,-7}, -{89,5,-6}, -{89,5,-5}, -{89,5,-4}, -{89,5,-3}, -{89,5,-2}, -{89,5,-1}, -{89,5,0}, -{89,5,1}, -{89,5,2}, -{89,5,3}, -{89,5,4}, -{89,5,5}, -{89,5,6}, -{89,5,7}, -{89,5,8}, -{89,5,9}, -{89,5,10}, -{89,5,11}, -{89,5,12}, -{89,5,13}, -{89,5,14}, -{89,5,15}, -{89,5,16}, -{89,5,17}, -{89,5,18}, -{89,5,19}, -{89,5,20}, -{89,5,21}, -{89,5,22}, -{89,5,23}, -{89,5,24}, -{89,5,25}, -{89,5,26}, -{89,5,27}, -{89,5,28}, -{89,5,29}, -{89,5,30}, -{89,5,31}, -{89,5,32}, -{89,5,33}, -{89,6,-16}, -{89,6,-15}, -{89,6,-14}, -{89,6,-13}, -{89,6,-12}, -{89,6,-11}, -{89,6,-10}, -{89,6,-9}, -{89,6,-8}, -{89,6,-7}, -{89,6,-6}, -{89,6,-5}, -{89,6,-4}, -{89,6,-3}, -{89,6,-2}, -{89,6,-1}, -{89,6,0}, -{89,6,1}, -{89,6,2}, -{89,6,3}, -{89,6,4}, -{89,6,5}, -{89,6,6}, -{89,6,7}, -{89,6,8}, -{89,6,9}, -{89,6,10}, -{89,6,11}, -{89,6,12}, -{89,6,13}, -{89,6,14}, -{89,6,15}, -{89,6,16}, -{89,6,17}, -{89,6,18}, -{89,6,19}, -{89,6,20}, -{89,6,21}, -{89,6,22}, -{89,6,23}, -{89,6,24}, -{89,6,25}, -{89,6,26}, -{89,6,27}, -{89,6,28}, -{89,6,29}, -{89,6,30}, -{89,7,-16}, -{89,7,-15}, -{89,7,-14}, -{89,7,-13}, -{89,7,-12}, -{89,7,-11}, -{89,7,-10}, -{89,7,-9}, -{89,7,-8}, -{89,7,-7}, -{89,7,-6}, -{89,7,-5}, -{89,7,-4}, -{89,7,-3}, -{89,7,-2}, -{89,7,-1}, -{89,7,0}, -{89,7,1}, -{89,7,2}, -{89,7,3}, -{89,7,4}, -{89,7,5}, -{89,7,6}, -{89,7,7}, -{89,7,8}, -{89,7,9}, -{89,7,10}, -{89,7,11}, -{89,7,12}, -{89,7,13}, -{89,7,14}, -{89,7,15}, -{89,7,16}, -{89,7,17}, -{89,7,18}, -{89,7,19}, -{89,7,20}, -{89,7,21}, -{89,7,22}, -{89,7,23}, -{89,7,24}, -{89,7,25}, -{89,7,26}, -{89,8,-16}, -{89,8,-15}, -{89,8,-14}, -{89,8,-13}, -{89,8,-12}, -{89,8,-11}, -{89,8,-10}, -{89,8,-9}, -{89,8,-8}, -{89,8,-7}, -{89,8,-6}, -{89,8,-5}, -{89,8,-4}, -{89,8,-3}, -{89,8,-2}, -{89,8,-1}, -{89,8,0}, -{89,8,1}, -{89,8,2}, -{89,8,3}, -{89,8,4}, -{89,8,5}, -{89,8,6}, -{89,8,7}, -{89,8,8}, -{89,8,9}, -{89,8,10}, -{89,8,11}, -{89,8,12}, -{89,8,13}, -{89,8,14}, -{89,8,15}, -{89,8,16}, -{89,8,17}, -{89,8,18}, -{89,8,19}, -{89,8,20}, -{89,8,21}, -{89,8,22}, -{89,8,23}, -{89,9,-16}, -{89,9,-15}, -{89,9,-14}, -{89,9,-13}, -{89,9,-12}, -{89,9,-11}, -{89,9,-10}, -{89,9,-9}, -{89,9,-8}, -{89,9,-7}, -{89,9,-6}, -{89,9,-5}, -{89,9,-4}, -{89,9,-3}, -{89,9,-2}, -{89,9,-1}, -{89,9,0}, -{89,9,1}, -{89,9,2}, -{89,9,3}, -{89,9,4}, -{89,9,5}, -{89,9,6}, -{89,9,7}, -{89,9,8}, -{89,9,9}, -{89,9,10}, -{89,9,11}, -{89,9,12}, -{89,9,13}, -{89,9,14}, -{89,9,15}, -{89,9,16}, -{89,9,17}, -{89,9,18}, -{89,9,19}, -{89,9,20}, -{89,10,-16}, -{89,10,-15}, -{89,10,-14}, -{89,10,-13}, -{89,10,-12}, -{89,10,-11}, -{89,10,-10}, -{89,10,-9}, -{89,10,-8}, -{89,10,-7}, -{89,10,-6}, -{89,10,-5}, -{89,10,-4}, -{89,10,-3}, -{89,10,-2}, -{89,10,-1}, -{89,10,0}, -{89,10,1}, -{89,10,2}, -{89,10,3}, -{89,10,4}, -{89,10,5}, -{89,10,6}, -{89,10,7}, -{89,10,8}, -{89,10,9}, -{89,10,10}, -{89,10,11}, -{89,10,12}, -{89,10,13}, -{89,10,14}, -{89,10,15}, -{89,10,16}, -{89,10,17}, -{89,11,-16}, -{89,11,-15}, -{89,11,-14}, -{89,11,-13}, -{89,11,-12}, -{89,11,-11}, -{89,11,-10}, -{89,11,-9}, -{89,11,-8}, -{89,11,-7}, -{89,11,-6}, -{89,11,-5}, -{89,11,-4}, -{89,11,-3}, -{89,11,-2}, -{89,11,-1}, -{89,11,0}, -{89,11,1}, -{89,11,2}, -{89,11,3}, -{89,11,4}, -{89,11,5}, -{89,11,6}, -{89,11,7}, -{89,11,8}, -{89,11,9}, -{89,11,10}, -{89,11,11}, -{89,11,12}, -{89,11,13}, -{89,11,14}, -{89,12,-16}, -{89,12,-15}, -{89,12,-14}, -{89,12,-13}, -{89,12,-12}, -{89,12,-11}, -{89,12,-10}, -{89,12,-9}, -{89,12,-8}, -{89,12,-7}, -{89,12,-6}, -{89,12,-5}, -{89,12,-4}, -{89,12,-3}, -{89,12,-2}, -{89,12,-1}, -{89,12,0}, -{89,12,1}, -{89,12,2}, -{89,12,3}, -{89,12,4}, -{89,12,5}, -{89,12,6}, -{89,12,7}, -{89,12,8}, -{89,12,9}, -{89,12,10}, -{89,12,11}, -{89,13,-16}, -{89,13,-15}, -{89,13,-14}, -{89,13,-13}, -{89,13,-12}, -{89,13,-11}, -{89,13,-10}, -{89,13,-9}, -{89,13,-8}, -{89,13,-7}, -{89,13,-6}, -{89,13,-5}, -{89,13,-4}, -{89,13,-3}, -{89,13,-2}, -{89,13,-1}, -{89,13,0}, -{89,13,1}, -{89,13,2}, -{89,13,3}, -{89,13,4}, -{89,13,5}, -{89,13,6}, -{89,13,7}, -{89,13,8}, -{89,13,9}, -{89,14,-16}, -{89,14,-15}, -{89,14,-14}, -{89,14,-13}, -{89,14,-12}, -{89,14,-11}, -{89,14,-10}, -{89,14,-9}, -{89,14,-8}, -{89,14,-7}, -{89,14,-6}, -{89,14,-5}, -{89,14,-4}, -{89,14,-3}, -{89,14,-2}, -{89,14,-1}, -{89,14,0}, -{89,14,1}, -{89,14,2}, -{89,14,3}, -{89,14,4}, -{89,14,5}, -{89,14,6}, -{89,15,-16}, -{89,15,-15}, -{89,15,-14}, -{89,15,-13}, -{89,15,-12}, -{89,15,-11}, -{89,15,-10}, -{89,15,-9}, -{89,15,-8}, -{89,15,-7}, -{89,15,-6}, -{89,15,-5}, -{89,15,-4}, -{89,15,-3}, -{89,15,-2}, -{89,15,-1}, -{89,15,0}, -{89,15,1}, -{89,15,2}, -{89,15,3}, -{89,15,4}, -{89,16,-16}, -{89,16,-15}, -{89,16,-14}, -{89,16,-13}, -{89,16,-12}, -{89,16,-11}, -{89,16,-10}, -{89,16,-9}, -{89,16,-8}, -{89,16,-7}, -{89,16,-6}, -{89,16,-5}, -{89,16,-4}, -{89,16,-3}, -{89,16,-2}, -{89,16,-1}, -{89,16,0}, -{89,16,1}, -{89,17,-16}, -{89,17,-15}, -{89,17,-14}, -{89,17,-13}, -{89,17,-12}, -{89,17,-11}, -{89,17,-10}, -{89,17,-9}, -{89,17,-8}, -{89,17,-7}, -{89,17,-6}, -{89,17,-5}, -{89,17,-4}, -{89,17,-3}, -{89,17,-2}, -{89,17,-1}, -{89,18,-16}, -{89,18,-15}, -{89,18,-14}, -{89,18,-13}, -{89,18,-12}, -{89,18,-11}, -{89,18,-10}, -{89,18,-9}, -{89,18,-8}, -{89,18,-7}, -{89,18,-6}, -{89,18,-5}, -{89,18,-4}, -{89,19,-16}, -{89,19,-15}, -{89,19,-14}, -{89,19,-13}, -{89,19,-12}, -{89,19,-11}, -{89,19,-10}, -{89,19,-9}, -{89,19,-8}, -{89,19,-7}, -{89,19,-6}, -{89,20,-16}, -{89,20,-15}, -{89,20,-14}, -{89,20,-13}, -{89,20,-12}, -{89,20,-11}, -{89,20,-10}, -{89,20,-9}, -{89,20,-8}, -{89,21,-16}, -{89,21,-15}, -{89,21,-14}, -{89,21,-13}, -{89,21,-12}, -{89,21,-11}, -{89,22,-16}, -{89,22,-15}, -{89,22,-14}, -{89,22,-13}, -{89,23,-16}, -{89,23,-15}, -{90,-67,74}, -{90,-67,75}, -{90,-67,76}, -{90,-67,77}, -{90,-67,78}, -{90,-67,79}, -{90,-67,80}, -{90,-67,81}, -{90,-67,82}, -{90,-67,83}, -{90,-67,84}, -{90,-67,85}, -{90,-67,86}, -{90,-66,60}, -{90,-66,61}, -{90,-66,62}, -{90,-66,63}, -{90,-66,64}, -{90,-66,65}, -{90,-66,66}, -{90,-66,67}, -{90,-66,68}, -{90,-66,69}, -{90,-66,70}, -{90,-66,71}, -{90,-66,72}, -{90,-66,73}, -{90,-66,74}, -{90,-66,75}, -{90,-66,76}, -{90,-66,77}, -{90,-66,78}, -{90,-66,79}, -{90,-66,80}, -{90,-66,81}, -{90,-66,82}, -{90,-66,83}, -{90,-66,84}, -{90,-66,85}, -{90,-66,86}, -{90,-65,48}, -{90,-65,49}, -{90,-65,50}, -{90,-65,51}, -{90,-65,52}, -{90,-65,53}, -{90,-65,54}, -{90,-65,55}, -{90,-65,56}, -{90,-65,57}, -{90,-65,58}, -{90,-65,59}, -{90,-65,60}, -{90,-65,61}, -{90,-65,62}, -{90,-65,63}, -{90,-65,64}, -{90,-65,65}, -{90,-65,66}, -{90,-65,67}, -{90,-65,68}, -{90,-65,69}, -{90,-65,70}, -{90,-65,71}, -{90,-65,72}, -{90,-65,73}, -{90,-65,74}, -{90,-65,75}, -{90,-65,76}, -{90,-65,77}, -{90,-65,78}, -{90,-65,79}, -{90,-65,80}, -{90,-65,81}, -{90,-65,82}, -{90,-65,83}, -{90,-65,84}, -{90,-65,85}, -{90,-65,86}, -{90,-64,38}, -{90,-64,39}, -{90,-64,40}, -{90,-64,41}, -{90,-64,42}, -{90,-64,43}, -{90,-64,44}, -{90,-64,45}, -{90,-64,46}, -{90,-64,47}, -{90,-64,48}, -{90,-64,49}, -{90,-64,50}, -{90,-64,51}, -{90,-64,52}, -{90,-64,53}, -{90,-64,54}, -{90,-64,55}, -{90,-64,56}, -{90,-64,57}, -{90,-64,58}, -{90,-64,59}, -{90,-64,60}, -{90,-64,61}, -{90,-64,62}, -{90,-64,63}, -{90,-64,64}, -{90,-64,65}, -{90,-64,66}, -{90,-64,67}, -{90,-64,68}, -{90,-64,69}, -{90,-64,70}, -{90,-64,71}, -{90,-64,72}, -{90,-64,73}, -{90,-64,74}, -{90,-64,75}, -{90,-64,76}, -{90,-64,77}, -{90,-64,78}, -{90,-64,79}, -{90,-64,80}, -{90,-64,81}, -{90,-64,82}, -{90,-64,83}, -{90,-64,84}, -{90,-64,85}, -{90,-64,86}, -{90,-63,29}, -{90,-63,30}, -{90,-63,31}, -{90,-63,32}, -{90,-63,33}, -{90,-63,34}, -{90,-63,35}, -{90,-63,36}, -{90,-63,37}, -{90,-63,38}, -{90,-63,39}, -{90,-63,40}, -{90,-63,41}, -{90,-63,42}, -{90,-63,43}, -{90,-63,44}, -{90,-63,45}, -{90,-63,46}, -{90,-63,47}, -{90,-63,48}, -{90,-63,49}, -{90,-63,50}, -{90,-63,51}, -{90,-63,52}, -{90,-63,53}, -{90,-63,54}, -{90,-63,55}, -{90,-63,56}, -{90,-63,57}, -{90,-63,58}, -{90,-63,59}, -{90,-63,60}, -{90,-63,61}, -{90,-63,62}, -{90,-63,63}, -{90,-63,64}, -{90,-63,65}, -{90,-63,66}, -{90,-63,67}, -{90,-63,68}, -{90,-63,69}, -{90,-63,70}, -{90,-63,71}, -{90,-63,72}, -{90,-63,73}, -{90,-63,74}, -{90,-63,75}, -{90,-63,76}, -{90,-63,77}, -{90,-63,78}, -{90,-63,79}, -{90,-63,80}, -{90,-63,81}, -{90,-63,82}, -{90,-63,83}, -{90,-63,84}, -{90,-63,85}, -{90,-63,86}, -{90,-62,21}, -{90,-62,22}, -{90,-62,23}, -{90,-62,24}, -{90,-62,25}, -{90,-62,26}, -{90,-62,27}, -{90,-62,28}, -{90,-62,29}, -{90,-62,30}, -{90,-62,31}, -{90,-62,32}, -{90,-62,33}, -{90,-62,34}, -{90,-62,35}, -{90,-62,36}, -{90,-62,37}, -{90,-62,38}, -{90,-62,39}, -{90,-62,40}, -{90,-62,41}, -{90,-62,42}, -{90,-62,43}, -{90,-62,44}, -{90,-62,45}, -{90,-62,46}, -{90,-62,47}, -{90,-62,48}, -{90,-62,49}, -{90,-62,50}, -{90,-62,51}, -{90,-62,52}, -{90,-62,53}, -{90,-62,54}, -{90,-62,55}, -{90,-62,56}, -{90,-62,57}, -{90,-62,58}, -{90,-62,59}, -{90,-62,60}, -{90,-62,61}, -{90,-62,62}, -{90,-62,63}, -{90,-62,64}, -{90,-62,65}, -{90,-62,66}, -{90,-62,67}, -{90,-62,68}, -{90,-62,69}, -{90,-62,70}, -{90,-62,71}, -{90,-62,72}, -{90,-62,73}, -{90,-62,74}, -{90,-62,75}, -{90,-62,76}, -{90,-62,77}, -{90,-62,78}, -{90,-62,79}, -{90,-62,80}, -{90,-62,81}, -{90,-62,82}, -{90,-62,83}, -{90,-62,84}, -{90,-62,85}, -{90,-62,86}, -{90,-61,14}, -{90,-61,15}, -{90,-61,16}, -{90,-61,17}, -{90,-61,18}, -{90,-61,19}, -{90,-61,20}, -{90,-61,21}, -{90,-61,22}, -{90,-61,23}, -{90,-61,24}, -{90,-61,25}, -{90,-61,26}, -{90,-61,27}, -{90,-61,28}, -{90,-61,29}, -{90,-61,30}, -{90,-61,31}, -{90,-61,32}, -{90,-61,33}, -{90,-61,34}, -{90,-61,35}, -{90,-61,36}, -{90,-61,37}, -{90,-61,38}, -{90,-61,39}, -{90,-61,40}, -{90,-61,41}, -{90,-61,42}, -{90,-61,43}, -{90,-61,44}, -{90,-61,45}, -{90,-61,46}, -{90,-61,47}, -{90,-61,48}, -{90,-61,49}, -{90,-61,50}, -{90,-61,51}, -{90,-61,52}, -{90,-61,53}, -{90,-61,54}, -{90,-61,55}, -{90,-61,56}, -{90,-61,57}, -{90,-61,58}, -{90,-61,59}, -{90,-61,60}, -{90,-61,61}, -{90,-61,62}, -{90,-61,63}, -{90,-61,64}, -{90,-61,65}, -{90,-61,66}, -{90,-61,67}, -{90,-61,68}, -{90,-61,69}, -{90,-61,70}, -{90,-61,71}, -{90,-61,72}, -{90,-61,73}, -{90,-61,74}, -{90,-61,75}, -{90,-61,76}, -{90,-61,77}, -{90,-61,78}, -{90,-61,79}, -{90,-61,80}, -{90,-61,81}, -{90,-61,82}, -{90,-61,83}, -{90,-61,84}, -{90,-61,85}, -{90,-61,86}, -{90,-60,8}, -{90,-60,9}, -{90,-60,10}, -{90,-60,11}, -{90,-60,12}, -{90,-60,13}, -{90,-60,14}, -{90,-60,15}, -{90,-60,16}, -{90,-60,17}, -{90,-60,18}, -{90,-60,19}, -{90,-60,20}, -{90,-60,21}, -{90,-60,22}, -{90,-60,23}, -{90,-60,24}, -{90,-60,25}, -{90,-60,26}, -{90,-60,27}, -{90,-60,28}, -{90,-60,29}, -{90,-60,30}, -{90,-60,31}, -{90,-60,32}, -{90,-60,33}, -{90,-60,34}, -{90,-60,35}, -{90,-60,36}, -{90,-60,37}, -{90,-60,38}, -{90,-60,39}, -{90,-60,40}, -{90,-60,41}, -{90,-60,42}, -{90,-60,43}, -{90,-60,44}, -{90,-60,45}, -{90,-60,46}, -{90,-60,47}, -{90,-60,48}, -{90,-60,49}, -{90,-60,50}, -{90,-60,51}, -{90,-60,52}, -{90,-60,53}, -{90,-60,54}, -{90,-60,55}, -{90,-60,56}, -{90,-60,57}, -{90,-60,58}, -{90,-60,59}, -{90,-60,60}, -{90,-60,61}, -{90,-60,62}, -{90,-60,63}, -{90,-60,64}, -{90,-60,65}, -{90,-60,66}, -{90,-60,67}, -{90,-60,68}, -{90,-60,69}, -{90,-60,70}, -{90,-60,71}, -{90,-60,72}, -{90,-60,73}, -{90,-60,74}, -{90,-60,75}, -{90,-60,76}, -{90,-60,77}, -{90,-60,78}, -{90,-60,79}, -{90,-60,80}, -{90,-60,81}, -{90,-60,82}, -{90,-60,83}, -{90,-60,84}, -{90,-60,85}, -{90,-60,86}, -{90,-59,5}, -{90,-59,6}, -{90,-59,7}, -{90,-59,8}, -{90,-59,9}, -{90,-59,10}, -{90,-59,11}, -{90,-59,12}, -{90,-59,13}, -{90,-59,14}, -{90,-59,15}, -{90,-59,16}, -{90,-59,17}, -{90,-59,18}, -{90,-59,19}, -{90,-59,20}, -{90,-59,21}, -{90,-59,22}, -{90,-59,23}, -{90,-59,24}, -{90,-59,25}, -{90,-59,26}, -{90,-59,27}, -{90,-59,28}, -{90,-59,29}, -{90,-59,30}, -{90,-59,31}, -{90,-59,32}, -{90,-59,33}, -{90,-59,34}, -{90,-59,35}, -{90,-59,36}, -{90,-59,37}, -{90,-59,38}, -{90,-59,39}, -{90,-59,40}, -{90,-59,41}, -{90,-59,42}, -{90,-59,43}, -{90,-59,44}, -{90,-59,45}, -{90,-59,46}, -{90,-59,47}, -{90,-59,48}, -{90,-59,49}, -{90,-59,50}, -{90,-59,51}, -{90,-59,52}, -{90,-59,53}, -{90,-59,54}, -{90,-59,55}, -{90,-59,56}, -{90,-59,57}, -{90,-59,58}, -{90,-59,59}, -{90,-59,60}, -{90,-59,61}, -{90,-59,62}, -{90,-59,63}, -{90,-59,64}, -{90,-59,65}, -{90,-59,66}, -{90,-59,67}, -{90,-59,68}, -{90,-59,69}, -{90,-59,70}, -{90,-59,71}, -{90,-59,72}, -{90,-59,73}, -{90,-59,74}, -{90,-59,75}, -{90,-59,76}, -{90,-59,77}, -{90,-59,78}, -{90,-59,79}, -{90,-59,80}, -{90,-59,81}, -{90,-59,82}, -{90,-59,83}, -{90,-59,84}, -{90,-59,85}, -{90,-59,86}, -{90,-58,4}, -{90,-58,5}, -{90,-58,6}, -{90,-58,7}, -{90,-58,8}, -{90,-58,9}, -{90,-58,10}, -{90,-58,11}, -{90,-58,12}, -{90,-58,13}, -{90,-58,14}, -{90,-58,15}, -{90,-58,16}, -{90,-58,17}, -{90,-58,18}, -{90,-58,19}, -{90,-58,20}, -{90,-58,21}, -{90,-58,22}, -{90,-58,23}, -{90,-58,24}, -{90,-58,25}, -{90,-58,26}, -{90,-58,27}, -{90,-58,28}, -{90,-58,29}, -{90,-58,30}, -{90,-58,31}, -{90,-58,32}, -{90,-58,33}, -{90,-58,34}, -{90,-58,35}, -{90,-58,36}, -{90,-58,37}, -{90,-58,38}, -{90,-58,39}, -{90,-58,40}, -{90,-58,41}, -{90,-58,42}, -{90,-58,43}, -{90,-58,44}, -{90,-58,45}, -{90,-58,46}, -{90,-58,47}, -{90,-58,48}, -{90,-58,49}, -{90,-58,50}, -{90,-58,51}, -{90,-58,52}, -{90,-58,53}, -{90,-58,54}, -{90,-58,55}, -{90,-58,56}, -{90,-58,57}, -{90,-58,58}, -{90,-58,59}, -{90,-58,60}, -{90,-58,61}, -{90,-58,62}, -{90,-58,63}, -{90,-58,64}, -{90,-58,65}, -{90,-58,66}, -{90,-58,67}, -{90,-58,68}, -{90,-58,69}, -{90,-58,70}, -{90,-58,71}, -{90,-58,72}, -{90,-58,73}, -{90,-58,74}, -{90,-58,75}, -{90,-58,76}, -{90,-58,77}, -{90,-58,78}, -{90,-58,79}, -{90,-58,80}, -{90,-58,81}, -{90,-58,82}, -{90,-58,83}, -{90,-58,84}, -{90,-58,85}, -{90,-58,86}, -{90,-57,2}, -{90,-57,3}, -{90,-57,4}, -{90,-57,5}, -{90,-57,6}, -{90,-57,7}, -{90,-57,8}, -{90,-57,9}, -{90,-57,10}, -{90,-57,11}, -{90,-57,12}, -{90,-57,13}, -{90,-57,14}, -{90,-57,15}, -{90,-57,16}, -{90,-57,17}, -{90,-57,18}, -{90,-57,19}, -{90,-57,20}, -{90,-57,21}, -{90,-57,22}, -{90,-57,23}, -{90,-57,24}, -{90,-57,25}, -{90,-57,26}, -{90,-57,27}, -{90,-57,28}, -{90,-57,29}, -{90,-57,30}, -{90,-57,31}, -{90,-57,32}, -{90,-57,33}, -{90,-57,34}, -{90,-57,35}, -{90,-57,36}, -{90,-57,37}, -{90,-57,38}, -{90,-57,39}, -{90,-57,40}, -{90,-57,41}, -{90,-57,42}, -{90,-57,43}, -{90,-57,44}, -{90,-57,45}, -{90,-57,46}, -{90,-57,47}, -{90,-57,48}, -{90,-57,49}, -{90,-57,50}, -{90,-57,51}, -{90,-57,52}, -{90,-57,53}, -{90,-57,54}, -{90,-57,55}, -{90,-57,56}, -{90,-57,57}, -{90,-57,58}, -{90,-57,59}, -{90,-57,60}, -{90,-57,61}, -{90,-57,62}, -{90,-57,63}, -{90,-57,64}, -{90,-57,65}, -{90,-57,66}, -{90,-57,67}, -{90,-57,68}, -{90,-57,69}, -{90,-57,70}, -{90,-57,71}, -{90,-57,72}, -{90,-57,73}, -{90,-57,74}, -{90,-57,75}, -{90,-57,76}, -{90,-57,77}, -{90,-57,78}, -{90,-57,79}, -{90,-57,80}, -{90,-57,81}, -{90,-57,82}, -{90,-57,83}, -{90,-57,84}, -{90,-57,85}, -{90,-57,86}, -{90,-56,0}, -{90,-56,1}, -{90,-56,2}, -{90,-56,3}, -{90,-56,4}, -{90,-56,5}, -{90,-56,6}, -{90,-56,7}, -{90,-56,8}, -{90,-56,9}, -{90,-56,10}, -{90,-56,11}, -{90,-56,12}, -{90,-56,13}, -{90,-56,14}, -{90,-56,15}, -{90,-56,16}, -{90,-56,17}, -{90,-56,18}, -{90,-56,19}, -{90,-56,20}, -{90,-56,21}, -{90,-56,22}, -{90,-56,23}, -{90,-56,24}, -{90,-56,25}, -{90,-56,26}, -{90,-56,27}, -{90,-56,28}, -{90,-56,29}, -{90,-56,30}, -{90,-56,31}, -{90,-56,32}, -{90,-56,33}, -{90,-56,34}, -{90,-56,35}, -{90,-56,36}, -{90,-56,37}, -{90,-56,38}, -{90,-56,39}, -{90,-56,40}, -{90,-56,41}, -{90,-56,42}, -{90,-56,43}, -{90,-56,44}, -{90,-56,45}, -{90,-56,46}, -{90,-56,47}, -{90,-56,48}, -{90,-56,49}, -{90,-56,50}, -{90,-56,51}, -{90,-56,52}, -{90,-56,53}, -{90,-56,54}, -{90,-56,55}, -{90,-56,56}, -{90,-56,57}, -{90,-56,58}, -{90,-56,59}, -{90,-56,60}, -{90,-56,61}, -{90,-56,62}, -{90,-56,63}, -{90,-56,64}, -{90,-56,65}, -{90,-56,66}, -{90,-56,67}, -{90,-56,68}, -{90,-56,69}, -{90,-56,70}, -{90,-56,71}, -{90,-56,72}, -{90,-56,73}, -{90,-56,74}, -{90,-56,75}, -{90,-56,76}, -{90,-56,77}, -{90,-56,78}, -{90,-56,79}, -{90,-56,80}, -{90,-56,81}, -{90,-56,82}, -{90,-56,83}, -{90,-56,84}, -{90,-56,85}, -{90,-56,86}, -{90,-55,-2}, -{90,-55,-1}, -{90,-55,0}, -{90,-55,1}, -{90,-55,2}, -{90,-55,3}, -{90,-55,4}, -{90,-55,5}, -{90,-55,6}, -{90,-55,7}, -{90,-55,8}, -{90,-55,9}, -{90,-55,10}, -{90,-55,11}, -{90,-55,12}, -{90,-55,13}, -{90,-55,14}, -{90,-55,15}, -{90,-55,16}, -{90,-55,17}, -{90,-55,18}, -{90,-55,19}, -{90,-55,20}, -{90,-55,21}, -{90,-55,22}, -{90,-55,23}, -{90,-55,24}, -{90,-55,25}, -{90,-55,26}, -{90,-55,27}, -{90,-55,28}, -{90,-55,29}, -{90,-55,30}, -{90,-55,31}, -{90,-55,32}, -{90,-55,33}, -{90,-55,34}, -{90,-55,35}, -{90,-55,36}, -{90,-55,37}, -{90,-55,38}, -{90,-55,39}, -{90,-55,40}, -{90,-55,41}, -{90,-55,42}, -{90,-55,43}, -{90,-55,44}, -{90,-55,45}, -{90,-55,46}, -{90,-55,47}, -{90,-55,48}, -{90,-55,49}, -{90,-55,50}, -{90,-55,51}, -{90,-55,52}, -{90,-55,53}, -{90,-55,54}, -{90,-55,55}, -{90,-55,56}, -{90,-55,57}, -{90,-55,58}, -{90,-55,59}, -{90,-55,60}, -{90,-55,61}, -{90,-55,62}, -{90,-55,63}, -{90,-55,64}, -{90,-55,65}, -{90,-55,66}, -{90,-55,67}, -{90,-55,68}, -{90,-55,69}, -{90,-55,70}, -{90,-55,71}, -{90,-55,72}, -{90,-55,73}, -{90,-55,74}, -{90,-55,75}, -{90,-55,76}, -{90,-55,77}, -{90,-55,78}, -{90,-55,79}, -{90,-55,80}, -{90,-55,81}, -{90,-55,82}, -{90,-55,83}, -{90,-55,84}, -{90,-55,85}, -{90,-55,86}, -{90,-54,-3}, -{90,-54,-2}, -{90,-54,-1}, -{90,-54,0}, -{90,-54,1}, -{90,-54,2}, -{90,-54,3}, -{90,-54,4}, -{90,-54,5}, -{90,-54,6}, -{90,-54,7}, -{90,-54,8}, -{90,-54,9}, -{90,-54,10}, -{90,-54,11}, -{90,-54,12}, -{90,-54,13}, -{90,-54,14}, -{90,-54,15}, -{90,-54,16}, -{90,-54,17}, -{90,-54,18}, -{90,-54,19}, -{90,-54,20}, -{90,-54,21}, -{90,-54,22}, -{90,-54,23}, -{90,-54,24}, -{90,-54,25}, -{90,-54,26}, -{90,-54,27}, -{90,-54,28}, -{90,-54,29}, -{90,-54,30}, -{90,-54,31}, -{90,-54,32}, -{90,-54,33}, -{90,-54,34}, -{90,-54,35}, -{90,-54,36}, -{90,-54,37}, -{90,-54,38}, -{90,-54,39}, -{90,-54,40}, -{90,-54,41}, -{90,-54,42}, -{90,-54,43}, -{90,-54,44}, -{90,-54,45}, -{90,-54,46}, -{90,-54,47}, -{90,-54,48}, -{90,-54,49}, -{90,-54,50}, -{90,-54,51}, -{90,-54,52}, -{90,-54,53}, -{90,-54,54}, -{90,-54,55}, -{90,-54,56}, -{90,-54,57}, -{90,-54,58}, -{90,-54,59}, -{90,-54,60}, -{90,-54,61}, -{90,-54,62}, -{90,-54,63}, -{90,-54,64}, -{90,-54,65}, -{90,-54,66}, -{90,-54,67}, -{90,-54,68}, -{90,-54,69}, -{90,-54,70}, -{90,-54,71}, -{90,-54,72}, -{90,-54,73}, -{90,-54,74}, -{90,-54,75}, -{90,-54,76}, -{90,-54,77}, -{90,-54,78}, -{90,-54,79}, -{90,-54,80}, -{90,-54,81}, -{90,-54,82}, -{90,-54,83}, -{90,-54,84}, -{90,-54,85}, -{90,-54,86}, -{90,-53,-5}, -{90,-53,-4}, -{90,-53,-3}, -{90,-53,-2}, -{90,-53,-1}, -{90,-53,0}, -{90,-53,1}, -{90,-53,2}, -{90,-53,3}, -{90,-53,4}, -{90,-53,5}, -{90,-53,6}, -{90,-53,7}, -{90,-53,8}, -{90,-53,9}, -{90,-53,10}, -{90,-53,11}, -{90,-53,12}, -{90,-53,13}, -{90,-53,14}, -{90,-53,15}, -{90,-53,16}, -{90,-53,17}, -{90,-53,18}, -{90,-53,19}, -{90,-53,20}, -{90,-53,21}, -{90,-53,22}, -{90,-53,23}, -{90,-53,24}, -{90,-53,25}, -{90,-53,26}, -{90,-53,27}, -{90,-53,28}, -{90,-53,29}, -{90,-53,30}, -{90,-53,31}, -{90,-53,32}, -{90,-53,33}, -{90,-53,34}, -{90,-53,35}, -{90,-53,36}, -{90,-53,37}, -{90,-53,38}, -{90,-53,39}, -{90,-53,40}, -{90,-53,41}, -{90,-53,42}, -{90,-53,43}, -{90,-53,44}, -{90,-53,45}, -{90,-53,46}, -{90,-53,47}, -{90,-53,48}, -{90,-53,49}, -{90,-53,50}, -{90,-53,51}, -{90,-53,52}, -{90,-53,53}, -{90,-53,54}, -{90,-53,55}, -{90,-53,56}, -{90,-53,57}, -{90,-53,58}, -{90,-53,59}, -{90,-53,60}, -{90,-53,61}, -{90,-53,62}, -{90,-53,63}, -{90,-53,64}, -{90,-53,65}, -{90,-53,66}, -{90,-53,67}, -{90,-53,68}, -{90,-53,69}, -{90,-53,70}, -{90,-53,71}, -{90,-53,72}, -{90,-53,73}, -{90,-53,74}, -{90,-53,75}, -{90,-53,76}, -{90,-53,77}, -{90,-53,78}, -{90,-53,79}, -{90,-53,80}, -{90,-53,81}, -{90,-53,82}, -{90,-53,83}, -{90,-53,84}, -{90,-53,85}, -{90,-53,86}, -{90,-52,-7}, -{90,-52,-6}, -{90,-52,-5}, -{90,-52,-4}, -{90,-52,-3}, -{90,-52,-2}, -{90,-52,-1}, -{90,-52,0}, -{90,-52,1}, -{90,-52,2}, -{90,-52,3}, -{90,-52,4}, -{90,-52,5}, -{90,-52,6}, -{90,-52,7}, -{90,-52,8}, -{90,-52,9}, -{90,-52,10}, -{90,-52,11}, -{90,-52,12}, -{90,-52,13}, -{90,-52,14}, -{90,-52,15}, -{90,-52,16}, -{90,-52,17}, -{90,-52,18}, -{90,-52,19}, -{90,-52,20}, -{90,-52,21}, -{90,-52,22}, -{90,-52,23}, -{90,-52,24}, -{90,-52,25}, -{90,-52,26}, -{90,-52,27}, -{90,-52,28}, -{90,-52,29}, -{90,-52,30}, -{90,-52,31}, -{90,-52,32}, -{90,-52,33}, -{90,-52,34}, -{90,-52,35}, -{90,-52,36}, -{90,-52,37}, -{90,-52,38}, -{90,-52,39}, -{90,-52,40}, -{90,-52,41}, -{90,-52,42}, -{90,-52,43}, -{90,-52,44}, -{90,-52,45}, -{90,-52,46}, -{90,-52,47}, -{90,-52,48}, -{90,-52,49}, -{90,-52,50}, -{90,-52,51}, -{90,-52,52}, -{90,-52,53}, -{90,-52,54}, -{90,-52,55}, -{90,-52,56}, -{90,-52,57}, -{90,-52,58}, -{90,-52,59}, -{90,-52,60}, -{90,-52,61}, -{90,-52,62}, -{90,-52,63}, -{90,-52,64}, -{90,-52,65}, -{90,-52,66}, -{90,-52,67}, -{90,-52,68}, -{90,-52,69}, -{90,-52,70}, -{90,-52,71}, -{90,-52,72}, -{90,-52,73}, -{90,-52,74}, -{90,-52,75}, -{90,-52,76}, -{90,-52,77}, -{90,-52,78}, -{90,-52,79}, -{90,-52,80}, -{90,-52,81}, -{90,-52,82}, -{90,-52,83}, -{90,-52,84}, -{90,-52,85}, -{90,-52,86}, -{90,-51,-8}, -{90,-51,-7}, -{90,-51,-6}, -{90,-51,-5}, -{90,-51,-4}, -{90,-51,-3}, -{90,-51,-2}, -{90,-51,-1}, -{90,-51,0}, -{90,-51,1}, -{90,-51,2}, -{90,-51,3}, -{90,-51,4}, -{90,-51,5}, -{90,-51,6}, -{90,-51,7}, -{90,-51,8}, -{90,-51,9}, -{90,-51,10}, -{90,-51,11}, -{90,-51,12}, -{90,-51,13}, -{90,-51,14}, -{90,-51,15}, -{90,-51,16}, -{90,-51,17}, -{90,-51,18}, -{90,-51,19}, -{90,-51,20}, -{90,-51,21}, -{90,-51,22}, -{90,-51,23}, -{90,-51,24}, -{90,-51,25}, -{90,-51,26}, -{90,-51,27}, -{90,-51,28}, -{90,-51,29}, -{90,-51,30}, -{90,-51,31}, -{90,-51,32}, -{90,-51,33}, -{90,-51,34}, -{90,-51,35}, -{90,-51,36}, -{90,-51,37}, -{90,-51,38}, -{90,-51,39}, -{90,-51,40}, -{90,-51,41}, -{90,-51,42}, -{90,-51,43}, -{90,-51,44}, -{90,-51,45}, -{90,-51,46}, -{90,-51,47}, -{90,-51,48}, -{90,-51,49}, -{90,-51,50}, -{90,-51,51}, -{90,-51,52}, -{90,-51,53}, -{90,-51,54}, -{90,-51,55}, -{90,-51,56}, -{90,-51,57}, -{90,-51,58}, -{90,-51,59}, -{90,-51,60}, -{90,-51,61}, -{90,-51,62}, -{90,-51,63}, -{90,-51,64}, -{90,-51,65}, -{90,-51,66}, -{90,-51,67}, -{90,-51,68}, -{90,-51,69}, -{90,-51,70}, -{90,-51,71}, -{90,-51,72}, -{90,-51,73}, -{90,-51,74}, -{90,-51,75}, -{90,-51,76}, -{90,-51,77}, -{90,-51,78}, -{90,-51,79}, -{90,-51,80}, -{90,-51,81}, -{90,-51,82}, -{90,-51,83}, -{90,-51,84}, -{90,-51,85}, -{90,-51,86}, -{90,-50,-10}, -{90,-50,-9}, -{90,-50,-8}, -{90,-50,-7}, -{90,-50,-6}, -{90,-50,-5}, -{90,-50,-4}, -{90,-50,-3}, -{90,-50,-2}, -{90,-50,-1}, -{90,-50,0}, -{90,-50,1}, -{90,-50,2}, -{90,-50,3}, -{90,-50,4}, -{90,-50,5}, -{90,-50,6}, -{90,-50,7}, -{90,-50,8}, -{90,-50,9}, -{90,-50,10}, -{90,-50,11}, -{90,-50,12}, -{90,-50,13}, -{90,-50,14}, -{90,-50,15}, -{90,-50,16}, -{90,-50,17}, -{90,-50,18}, -{90,-50,19}, -{90,-50,20}, -{90,-50,21}, -{90,-50,22}, -{90,-50,23}, -{90,-50,24}, -{90,-50,25}, -{90,-50,26}, -{90,-50,27}, -{90,-50,28}, -{90,-50,29}, -{90,-50,30}, -{90,-50,31}, -{90,-50,32}, -{90,-50,33}, -{90,-50,34}, -{90,-50,35}, -{90,-50,36}, -{90,-50,37}, -{90,-50,38}, -{90,-50,39}, -{90,-50,40}, -{90,-50,41}, -{90,-50,42}, -{90,-50,43}, -{90,-50,44}, -{90,-50,45}, -{90,-50,46}, -{90,-50,47}, -{90,-50,48}, -{90,-50,49}, -{90,-50,50}, -{90,-50,51}, -{90,-50,52}, -{90,-50,53}, -{90,-50,54}, -{90,-50,55}, -{90,-50,56}, -{90,-50,57}, -{90,-50,58}, -{90,-50,59}, -{90,-50,60}, -{90,-50,61}, -{90,-50,62}, -{90,-50,63}, -{90,-50,64}, -{90,-50,65}, -{90,-50,66}, -{90,-50,67}, -{90,-50,68}, -{90,-50,69}, -{90,-50,70}, -{90,-50,71}, -{90,-50,72}, -{90,-50,73}, -{90,-50,74}, -{90,-50,75}, -{90,-50,76}, -{90,-50,77}, -{90,-50,78}, -{90,-50,79}, -{90,-50,80}, -{90,-50,81}, -{90,-50,82}, -{90,-50,83}, -{90,-50,84}, -{90,-50,85}, -{90,-50,86}, -{90,-49,-12}, -{90,-49,-11}, -{90,-49,-10}, -{90,-49,-9}, -{90,-49,-8}, -{90,-49,-7}, -{90,-49,-6}, -{90,-49,-5}, -{90,-49,-4}, -{90,-49,-3}, -{90,-49,-2}, -{90,-49,-1}, -{90,-49,0}, -{90,-49,1}, -{90,-49,2}, -{90,-49,3}, -{90,-49,4}, -{90,-49,5}, -{90,-49,6}, -{90,-49,7}, -{90,-49,8}, -{90,-49,9}, -{90,-49,10}, -{90,-49,11}, -{90,-49,12}, -{90,-49,13}, -{90,-49,14}, -{90,-49,15}, -{90,-49,16}, -{90,-49,17}, -{90,-49,18}, -{90,-49,19}, -{90,-49,20}, -{90,-49,21}, -{90,-49,22}, -{90,-49,23}, -{90,-49,24}, -{90,-49,25}, -{90,-49,26}, -{90,-49,27}, -{90,-49,28}, -{90,-49,29}, -{90,-49,30}, -{90,-49,31}, -{90,-49,32}, -{90,-49,33}, -{90,-49,34}, -{90,-49,35}, -{90,-49,36}, -{90,-49,37}, -{90,-49,38}, -{90,-49,39}, -{90,-49,40}, -{90,-49,41}, -{90,-49,42}, -{90,-49,43}, -{90,-49,44}, -{90,-49,45}, -{90,-49,46}, -{90,-49,47}, -{90,-49,48}, -{90,-49,49}, -{90,-49,50}, -{90,-49,51}, -{90,-49,52}, -{90,-49,53}, -{90,-49,54}, -{90,-49,55}, -{90,-49,56}, -{90,-49,57}, -{90,-49,58}, -{90,-49,59}, -{90,-49,60}, -{90,-49,61}, -{90,-49,62}, -{90,-49,63}, -{90,-49,64}, -{90,-49,65}, -{90,-49,66}, -{90,-49,67}, -{90,-49,68}, -{90,-49,69}, -{90,-49,70}, -{90,-49,71}, -{90,-49,72}, -{90,-49,73}, -{90,-49,74}, -{90,-49,75}, -{90,-49,76}, -{90,-49,77}, -{90,-49,78}, -{90,-49,79}, -{90,-49,80}, -{90,-49,81}, -{90,-49,82}, -{90,-49,83}, -{90,-49,84}, -{90,-49,85}, -{90,-49,86}, -{90,-49,87}, -{90,-48,-13}, -{90,-48,-12}, -{90,-48,-11}, -{90,-48,-10}, -{90,-48,-9}, -{90,-48,-8}, -{90,-48,-7}, -{90,-48,-6}, -{90,-48,-5}, -{90,-48,-4}, -{90,-48,-3}, -{90,-48,-2}, -{90,-48,-1}, -{90,-48,0}, -{90,-48,1}, -{90,-48,2}, -{90,-48,3}, -{90,-48,4}, -{90,-48,5}, -{90,-48,6}, -{90,-48,7}, -{90,-48,8}, -{90,-48,9}, -{90,-48,10}, -{90,-48,11}, -{90,-48,12}, -{90,-48,13}, -{90,-48,14}, -{90,-48,15}, -{90,-48,16}, -{90,-48,17}, -{90,-48,18}, -{90,-48,19}, -{90,-48,20}, -{90,-48,21}, -{90,-48,22}, -{90,-48,23}, -{90,-48,24}, -{90,-48,25}, -{90,-48,26}, -{90,-48,27}, -{90,-48,28}, -{90,-48,29}, -{90,-48,30}, -{90,-48,31}, -{90,-48,32}, -{90,-48,33}, -{90,-48,34}, -{90,-48,35}, -{90,-48,36}, -{90,-48,37}, -{90,-48,38}, -{90,-48,39}, -{90,-48,40}, -{90,-48,41}, -{90,-48,42}, -{90,-48,43}, -{90,-48,44}, -{90,-48,45}, -{90,-48,46}, -{90,-48,47}, -{90,-48,48}, -{90,-48,49}, -{90,-48,50}, -{90,-48,51}, -{90,-48,52}, -{90,-48,53}, -{90,-48,54}, -{90,-48,55}, -{90,-48,56}, -{90,-48,57}, -{90,-48,58}, -{90,-48,59}, -{90,-48,60}, -{90,-48,61}, -{90,-48,62}, -{90,-48,63}, -{90,-48,64}, -{90,-48,65}, -{90,-48,66}, -{90,-48,67}, -{90,-48,68}, -{90,-48,69}, -{90,-48,70}, -{90,-48,71}, -{90,-48,72}, -{90,-48,73}, -{90,-48,74}, -{90,-48,75}, -{90,-48,76}, -{90,-48,77}, -{90,-48,78}, -{90,-48,79}, -{90,-48,80}, -{90,-48,81}, -{90,-48,82}, -{90,-48,83}, -{90,-48,84}, -{90,-48,85}, -{90,-48,86}, -{90,-48,87}, -{90,-47,-15}, -{90,-47,-14}, -{90,-47,-13}, -{90,-47,-12}, -{90,-47,-11}, -{90,-47,-10}, -{90,-47,-9}, -{90,-47,-8}, -{90,-47,-7}, -{90,-47,-6}, -{90,-47,-5}, -{90,-47,-4}, -{90,-47,-3}, -{90,-47,-2}, -{90,-47,-1}, -{90,-47,0}, -{90,-47,1}, -{90,-47,2}, -{90,-47,3}, -{90,-47,4}, -{90,-47,5}, -{90,-47,6}, -{90,-47,7}, -{90,-47,8}, -{90,-47,9}, -{90,-47,10}, -{90,-47,11}, -{90,-47,12}, -{90,-47,13}, -{90,-47,14}, -{90,-47,15}, -{90,-47,16}, -{90,-47,17}, -{90,-47,18}, -{90,-47,19}, -{90,-47,20}, -{90,-47,21}, -{90,-47,22}, -{90,-47,23}, -{90,-47,24}, -{90,-47,25}, -{90,-47,26}, -{90,-47,27}, -{90,-47,28}, -{90,-47,29}, -{90,-47,30}, -{90,-47,31}, -{90,-47,32}, -{90,-47,33}, -{90,-47,34}, -{90,-47,35}, -{90,-47,36}, -{90,-47,37}, -{90,-47,38}, -{90,-47,39}, -{90,-47,40}, -{90,-47,41}, -{90,-47,42}, -{90,-47,43}, -{90,-47,44}, -{90,-47,45}, -{90,-47,46}, -{90,-47,47}, -{90,-47,48}, -{90,-47,49}, -{90,-47,50}, -{90,-47,51}, -{90,-47,52}, -{90,-47,53}, -{90,-47,54}, -{90,-47,55}, -{90,-47,56}, -{90,-47,57}, -{90,-47,58}, -{90,-47,59}, -{90,-47,60}, -{90,-47,61}, -{90,-47,62}, -{90,-47,63}, -{90,-47,64}, -{90,-47,65}, -{90,-47,66}, -{90,-47,67}, -{90,-47,68}, -{90,-47,69}, -{90,-47,70}, -{90,-47,71}, -{90,-47,72}, -{90,-47,73}, -{90,-47,74}, -{90,-47,75}, -{90,-47,76}, -{90,-47,77}, -{90,-47,78}, -{90,-47,79}, -{90,-47,80}, -{90,-47,81}, -{90,-47,82}, -{90,-47,83}, -{90,-47,84}, -{90,-47,85}, -{90,-47,86}, -{90,-47,87}, -{90,-46,-15}, -{90,-46,-14}, -{90,-46,-13}, -{90,-46,-12}, -{90,-46,-11}, -{90,-46,-10}, -{90,-46,-9}, -{90,-46,-8}, -{90,-46,-7}, -{90,-46,-6}, -{90,-46,-5}, -{90,-46,-4}, -{90,-46,-3}, -{90,-46,-2}, -{90,-46,-1}, -{90,-46,0}, -{90,-46,1}, -{90,-46,2}, -{90,-46,3}, -{90,-46,4}, -{90,-46,5}, -{90,-46,6}, -{90,-46,7}, -{90,-46,8}, -{90,-46,9}, -{90,-46,10}, -{90,-46,11}, -{90,-46,12}, -{90,-46,13}, -{90,-46,14}, -{90,-46,15}, -{90,-46,16}, -{90,-46,17}, -{90,-46,18}, -{90,-46,19}, -{90,-46,20}, -{90,-46,21}, -{90,-46,22}, -{90,-46,23}, -{90,-46,24}, -{90,-46,25}, -{90,-46,26}, -{90,-46,27}, -{90,-46,28}, -{90,-46,29}, -{90,-46,30}, -{90,-46,31}, -{90,-46,32}, -{90,-46,33}, -{90,-46,34}, -{90,-46,35}, -{90,-46,36}, -{90,-46,37}, -{90,-46,38}, -{90,-46,39}, -{90,-46,40}, -{90,-46,41}, -{90,-46,42}, -{90,-46,43}, -{90,-46,44}, -{90,-46,45}, -{90,-46,46}, -{90,-46,47}, -{90,-46,48}, -{90,-46,49}, -{90,-46,50}, -{90,-46,51}, -{90,-46,52}, -{90,-46,53}, -{90,-46,54}, -{90,-46,55}, -{90,-46,56}, -{90,-46,57}, -{90,-46,58}, -{90,-46,59}, -{90,-46,60}, -{90,-46,61}, -{90,-46,62}, -{90,-46,63}, -{90,-46,64}, -{90,-46,65}, -{90,-46,66}, -{90,-46,67}, -{90,-46,68}, -{90,-46,69}, -{90,-46,70}, -{90,-46,71}, -{90,-46,72}, -{90,-46,73}, -{90,-46,74}, -{90,-46,75}, -{90,-46,76}, -{90,-46,77}, -{90,-46,78}, -{90,-46,79}, -{90,-46,80}, -{90,-46,81}, -{90,-46,82}, -{90,-46,83}, -{90,-46,84}, -{90,-46,85}, -{90,-46,86}, -{90,-46,87}, -{90,-45,-15}, -{90,-45,-14}, -{90,-45,-13}, -{90,-45,-12}, -{90,-45,-11}, -{90,-45,-10}, -{90,-45,-9}, -{90,-45,-8}, -{90,-45,-7}, -{90,-45,-6}, -{90,-45,-5}, -{90,-45,-4}, -{90,-45,-3}, -{90,-45,-2}, -{90,-45,-1}, -{90,-45,0}, -{90,-45,1}, -{90,-45,2}, -{90,-45,3}, -{90,-45,4}, -{90,-45,5}, -{90,-45,6}, -{90,-45,7}, -{90,-45,8}, -{90,-45,9}, -{90,-45,10}, -{90,-45,11}, -{90,-45,12}, -{90,-45,13}, -{90,-45,14}, -{90,-45,15}, -{90,-45,16}, -{90,-45,17}, -{90,-45,18}, -{90,-45,19}, -{90,-45,20}, -{90,-45,21}, -{90,-45,22}, -{90,-45,23}, -{90,-45,24}, -{90,-45,25}, -{90,-45,26}, -{90,-45,27}, -{90,-45,28}, -{90,-45,29}, -{90,-45,30}, -{90,-45,31}, -{90,-45,32}, -{90,-45,33}, -{90,-45,34}, -{90,-45,35}, -{90,-45,36}, -{90,-45,37}, -{90,-45,38}, -{90,-45,39}, -{90,-45,40}, -{90,-45,41}, -{90,-45,42}, -{90,-45,43}, -{90,-45,44}, -{90,-45,45}, -{90,-45,46}, -{90,-45,47}, -{90,-45,48}, -{90,-45,49}, -{90,-45,50}, -{90,-45,51}, -{90,-45,52}, -{90,-45,53}, -{90,-45,54}, -{90,-45,55}, -{90,-45,56}, -{90,-45,57}, -{90,-45,58}, -{90,-45,59}, -{90,-45,60}, -{90,-45,61}, -{90,-45,62}, -{90,-45,63}, -{90,-45,64}, -{90,-45,65}, -{90,-45,66}, -{90,-45,67}, -{90,-45,68}, -{90,-45,69}, -{90,-45,70}, -{90,-45,71}, -{90,-45,72}, -{90,-45,73}, -{90,-45,74}, -{90,-45,75}, -{90,-45,76}, -{90,-45,77}, -{90,-45,78}, -{90,-45,79}, -{90,-45,80}, -{90,-45,81}, -{90,-45,82}, -{90,-45,83}, -{90,-45,84}, -{90,-45,85}, -{90,-45,86}, -{90,-45,87}, -{90,-44,-15}, -{90,-44,-14}, -{90,-44,-13}, -{90,-44,-12}, -{90,-44,-11}, -{90,-44,-10}, -{90,-44,-9}, -{90,-44,-8}, -{90,-44,-7}, -{90,-44,-6}, -{90,-44,-5}, -{90,-44,-4}, -{90,-44,-3}, -{90,-44,-2}, -{90,-44,-1}, -{90,-44,0}, -{90,-44,1}, -{90,-44,2}, -{90,-44,3}, -{90,-44,4}, -{90,-44,5}, -{90,-44,6}, -{90,-44,7}, -{90,-44,8}, -{90,-44,9}, -{90,-44,10}, -{90,-44,11}, -{90,-44,12}, -{90,-44,13}, -{90,-44,14}, -{90,-44,15}, -{90,-44,16}, -{90,-44,17}, -{90,-44,18}, -{90,-44,19}, -{90,-44,20}, -{90,-44,21}, -{90,-44,22}, -{90,-44,23}, -{90,-44,24}, -{90,-44,25}, -{90,-44,26}, -{90,-44,27}, -{90,-44,28}, -{90,-44,29}, -{90,-44,30}, -{90,-44,31}, -{90,-44,32}, -{90,-44,33}, -{90,-44,34}, -{90,-44,35}, -{90,-44,36}, -{90,-44,37}, -{90,-44,38}, -{90,-44,39}, -{90,-44,40}, -{90,-44,41}, -{90,-44,42}, -{90,-44,43}, -{90,-44,44}, -{90,-44,45}, -{90,-44,46}, -{90,-44,47}, -{90,-44,48}, -{90,-44,49}, -{90,-44,50}, -{90,-44,51}, -{90,-44,52}, -{90,-44,53}, -{90,-44,54}, -{90,-44,55}, -{90,-44,56}, -{90,-44,57}, -{90,-44,58}, -{90,-44,59}, -{90,-44,60}, -{90,-44,61}, -{90,-44,62}, -{90,-44,63}, -{90,-44,64}, -{90,-44,65}, -{90,-44,66}, -{90,-44,67}, -{90,-44,68}, -{90,-44,69}, -{90,-44,70}, -{90,-44,71}, -{90,-44,72}, -{90,-44,73}, -{90,-44,74}, -{90,-44,75}, -{90,-44,76}, -{90,-44,77}, -{90,-44,78}, -{90,-44,79}, -{90,-44,80}, -{90,-44,81}, -{90,-44,82}, -{90,-44,83}, -{90,-44,84}, -{90,-44,85}, -{90,-44,86}, -{90,-44,87}, -{90,-43,-15}, -{90,-43,-14}, -{90,-43,-13}, -{90,-43,-12}, -{90,-43,-11}, -{90,-43,-10}, -{90,-43,-9}, -{90,-43,-8}, -{90,-43,-7}, -{90,-43,-6}, -{90,-43,-5}, -{90,-43,-4}, -{90,-43,-3}, -{90,-43,-2}, -{90,-43,-1}, -{90,-43,0}, -{90,-43,1}, -{90,-43,2}, -{90,-43,3}, -{90,-43,4}, -{90,-43,5}, -{90,-43,6}, -{90,-43,7}, -{90,-43,8}, -{90,-43,9}, -{90,-43,10}, -{90,-43,11}, -{90,-43,12}, -{90,-43,13}, -{90,-43,14}, -{90,-43,15}, -{90,-43,16}, -{90,-43,17}, -{90,-43,18}, -{90,-43,19}, -{90,-43,20}, -{90,-43,21}, -{90,-43,22}, -{90,-43,23}, -{90,-43,24}, -{90,-43,25}, -{90,-43,26}, -{90,-43,27}, -{90,-43,28}, -{90,-43,29}, -{90,-43,30}, -{90,-43,31}, -{90,-43,32}, -{90,-43,33}, -{90,-43,34}, -{90,-43,35}, -{90,-43,36}, -{90,-43,37}, -{90,-43,38}, -{90,-43,39}, -{90,-43,40}, -{90,-43,41}, -{90,-43,42}, -{90,-43,43}, -{90,-43,44}, -{90,-43,45}, -{90,-43,46}, -{90,-43,47}, -{90,-43,48}, -{90,-43,49}, -{90,-43,50}, -{90,-43,51}, -{90,-43,52}, -{90,-43,53}, -{90,-43,54}, -{90,-43,55}, -{90,-43,56}, -{90,-43,57}, -{90,-43,58}, -{90,-43,59}, -{90,-43,60}, -{90,-43,61}, -{90,-43,62}, -{90,-43,63}, -{90,-43,64}, -{90,-43,65}, -{90,-43,66}, -{90,-43,67}, -{90,-43,68}, -{90,-43,69}, -{90,-43,70}, -{90,-43,71}, -{90,-43,72}, -{90,-43,73}, -{90,-43,74}, -{90,-43,75}, -{90,-43,76}, -{90,-43,77}, -{90,-43,78}, -{90,-43,79}, -{90,-43,80}, -{90,-43,81}, -{90,-43,82}, -{90,-43,83}, -{90,-43,84}, -{90,-43,85}, -{90,-43,86}, -{90,-43,87}, -{90,-42,-15}, -{90,-42,-14}, -{90,-42,-13}, -{90,-42,-12}, -{90,-42,-11}, -{90,-42,-10}, -{90,-42,-9}, -{90,-42,-8}, -{90,-42,-7}, -{90,-42,-6}, -{90,-42,-5}, -{90,-42,-4}, -{90,-42,-3}, -{90,-42,-2}, -{90,-42,-1}, -{90,-42,0}, -{90,-42,1}, -{90,-42,2}, -{90,-42,3}, -{90,-42,4}, -{90,-42,5}, -{90,-42,6}, -{90,-42,7}, -{90,-42,8}, -{90,-42,9}, -{90,-42,10}, -{90,-42,11}, -{90,-42,12}, -{90,-42,13}, -{90,-42,14}, -{90,-42,15}, -{90,-42,16}, -{90,-42,17}, -{90,-42,18}, -{90,-42,19}, -{90,-42,20}, -{90,-42,21}, -{90,-42,22}, -{90,-42,23}, -{90,-42,24}, -{90,-42,25}, -{90,-42,26}, -{90,-42,27}, -{90,-42,28}, -{90,-42,29}, -{90,-42,30}, -{90,-42,31}, -{90,-42,32}, -{90,-42,33}, -{90,-42,34}, -{90,-42,35}, -{90,-42,36}, -{90,-42,37}, -{90,-42,38}, -{90,-42,39}, -{90,-42,40}, -{90,-42,41}, -{90,-42,42}, -{90,-42,43}, -{90,-42,44}, -{90,-42,45}, -{90,-42,46}, -{90,-42,47}, -{90,-42,48}, -{90,-42,49}, -{90,-42,50}, -{90,-42,51}, -{90,-42,52}, -{90,-42,53}, -{90,-42,54}, -{90,-42,55}, -{90,-42,56}, -{90,-42,57}, -{90,-42,58}, -{90,-42,59}, -{90,-42,60}, -{90,-42,61}, -{90,-42,62}, -{90,-42,63}, -{90,-42,64}, -{90,-42,65}, -{90,-42,66}, -{90,-42,67}, -{90,-42,68}, -{90,-42,69}, -{90,-42,70}, -{90,-42,71}, -{90,-42,72}, -{90,-42,73}, -{90,-42,74}, -{90,-42,75}, -{90,-42,76}, -{90,-42,77}, -{90,-42,78}, -{90,-42,79}, -{90,-42,80}, -{90,-42,81}, -{90,-42,82}, -{90,-42,83}, -{90,-42,84}, -{90,-42,85}, -{90,-42,86}, -{90,-42,87}, -{90,-41,-15}, -{90,-41,-14}, -{90,-41,-13}, -{90,-41,-12}, -{90,-41,-11}, -{90,-41,-10}, -{90,-41,-9}, -{90,-41,-8}, -{90,-41,-7}, -{90,-41,-6}, -{90,-41,-5}, -{90,-41,-4}, -{90,-41,-3}, -{90,-41,-2}, -{90,-41,-1}, -{90,-41,0}, -{90,-41,1}, -{90,-41,2}, -{90,-41,3}, -{90,-41,4}, -{90,-41,5}, -{90,-41,6}, -{90,-41,7}, -{90,-41,8}, -{90,-41,9}, -{90,-41,10}, -{90,-41,11}, -{90,-41,12}, -{90,-41,13}, -{90,-41,14}, -{90,-41,15}, -{90,-41,16}, -{90,-41,17}, -{90,-41,18}, -{90,-41,19}, -{90,-41,20}, -{90,-41,21}, -{90,-41,22}, -{90,-41,23}, -{90,-41,24}, -{90,-41,25}, -{90,-41,26}, -{90,-41,27}, -{90,-41,28}, -{90,-41,29}, -{90,-41,30}, -{90,-41,31}, -{90,-41,32}, -{90,-41,33}, -{90,-41,34}, -{90,-41,35}, -{90,-41,36}, -{90,-41,37}, -{90,-41,38}, -{90,-41,39}, -{90,-41,40}, -{90,-41,41}, -{90,-41,42}, -{90,-41,43}, -{90,-41,44}, -{90,-41,45}, -{90,-41,46}, -{90,-41,47}, -{90,-41,48}, -{90,-41,49}, -{90,-41,50}, -{90,-41,51}, -{90,-41,52}, -{90,-41,53}, -{90,-41,54}, -{90,-41,55}, -{90,-41,56}, -{90,-41,57}, -{90,-41,58}, -{90,-41,59}, -{90,-41,60}, -{90,-41,61}, -{90,-41,62}, -{90,-41,63}, -{90,-41,64}, -{90,-41,65}, -{90,-41,66}, -{90,-41,67}, -{90,-41,68}, -{90,-41,69}, -{90,-41,70}, -{90,-41,71}, -{90,-41,72}, -{90,-41,73}, -{90,-41,74}, -{90,-41,75}, -{90,-41,76}, -{90,-41,77}, -{90,-41,78}, -{90,-41,79}, -{90,-41,80}, -{90,-41,81}, -{90,-41,82}, -{90,-41,83}, -{90,-41,84}, -{90,-41,85}, -{90,-41,86}, -{90,-41,87}, -{90,-40,-15}, -{90,-40,-14}, -{90,-40,-13}, -{90,-40,-12}, -{90,-40,-11}, -{90,-40,-10}, -{90,-40,-9}, -{90,-40,-8}, -{90,-40,-7}, -{90,-40,-6}, -{90,-40,-5}, -{90,-40,-4}, -{90,-40,-3}, -{90,-40,-2}, -{90,-40,-1}, -{90,-40,0}, -{90,-40,1}, -{90,-40,2}, -{90,-40,3}, -{90,-40,4}, -{90,-40,5}, -{90,-40,6}, -{90,-40,7}, -{90,-40,8}, -{90,-40,9}, -{90,-40,10}, -{90,-40,11}, -{90,-40,12}, -{90,-40,13}, -{90,-40,14}, -{90,-40,15}, -{90,-40,16}, -{90,-40,17}, -{90,-40,18}, -{90,-40,19}, -{90,-40,20}, -{90,-40,21}, -{90,-40,22}, -{90,-40,23}, -{90,-40,24}, -{90,-40,25}, -{90,-40,26}, -{90,-40,27}, -{90,-40,28}, -{90,-40,29}, -{90,-40,30}, -{90,-40,31}, -{90,-40,32}, -{90,-40,33}, -{90,-40,34}, -{90,-40,35}, -{90,-40,36}, -{90,-40,37}, -{90,-40,38}, -{90,-40,39}, -{90,-40,40}, -{90,-40,41}, -{90,-40,42}, -{90,-40,43}, -{90,-40,44}, -{90,-40,45}, -{90,-40,46}, -{90,-40,47}, -{90,-40,48}, -{90,-40,49}, -{90,-40,50}, -{90,-40,51}, -{90,-40,52}, -{90,-40,53}, -{90,-40,54}, -{90,-40,55}, -{90,-40,56}, -{90,-40,57}, -{90,-40,58}, -{90,-40,59}, -{90,-40,60}, -{90,-40,61}, -{90,-40,62}, -{90,-40,63}, -{90,-40,64}, -{90,-40,65}, -{90,-40,66}, -{90,-40,67}, -{90,-40,68}, -{90,-40,69}, -{90,-40,70}, -{90,-40,71}, -{90,-40,72}, -{90,-40,73}, -{90,-40,74}, -{90,-40,75}, -{90,-40,76}, -{90,-40,77}, -{90,-40,78}, -{90,-40,79}, -{90,-40,80}, -{90,-40,81}, -{90,-40,82}, -{90,-40,83}, -{90,-40,84}, -{90,-40,85}, -{90,-40,86}, -{90,-40,87}, -{90,-39,-15}, -{90,-39,-14}, -{90,-39,-13}, -{90,-39,-12}, -{90,-39,-11}, -{90,-39,-10}, -{90,-39,-9}, -{90,-39,-8}, -{90,-39,-7}, -{90,-39,-6}, -{90,-39,-5}, -{90,-39,-4}, -{90,-39,-3}, -{90,-39,-2}, -{90,-39,-1}, -{90,-39,0}, -{90,-39,1}, -{90,-39,2}, -{90,-39,3}, -{90,-39,4}, -{90,-39,5}, -{90,-39,6}, -{90,-39,7}, -{90,-39,8}, -{90,-39,9}, -{90,-39,10}, -{90,-39,11}, -{90,-39,12}, -{90,-39,13}, -{90,-39,14}, -{90,-39,15}, -{90,-39,16}, -{90,-39,17}, -{90,-39,18}, -{90,-39,19}, -{90,-39,20}, -{90,-39,21}, -{90,-39,22}, -{90,-39,23}, -{90,-39,24}, -{90,-39,25}, -{90,-39,26}, -{90,-39,27}, -{90,-39,28}, -{90,-39,29}, -{90,-39,30}, -{90,-39,31}, -{90,-39,32}, -{90,-39,33}, -{90,-39,34}, -{90,-39,35}, -{90,-39,36}, -{90,-39,37}, -{90,-39,38}, -{90,-39,39}, -{90,-39,40}, -{90,-39,41}, -{90,-39,42}, -{90,-39,43}, -{90,-39,44}, -{90,-39,45}, -{90,-39,46}, -{90,-39,47}, -{90,-39,48}, -{90,-39,49}, -{90,-39,50}, -{90,-39,51}, -{90,-39,52}, -{90,-39,53}, -{90,-39,54}, -{90,-39,55}, -{90,-39,56}, -{90,-39,57}, -{90,-39,58}, -{90,-39,59}, -{90,-39,60}, -{90,-39,61}, -{90,-39,62}, -{90,-39,63}, -{90,-39,64}, -{90,-39,65}, -{90,-39,66}, -{90,-39,67}, -{90,-39,68}, -{90,-39,69}, -{90,-39,70}, -{90,-39,71}, -{90,-39,72}, -{90,-39,73}, -{90,-39,74}, -{90,-39,75}, -{90,-39,76}, -{90,-39,77}, -{90,-39,78}, -{90,-39,79}, -{90,-39,80}, -{90,-39,81}, -{90,-39,82}, -{90,-39,83}, -{90,-39,84}, -{90,-39,85}, -{90,-39,86}, -{90,-39,87}, -{90,-38,-15}, -{90,-38,-14}, -{90,-38,-13}, -{90,-38,-12}, -{90,-38,-11}, -{90,-38,-10}, -{90,-38,-9}, -{90,-38,-8}, -{90,-38,-7}, -{90,-38,-6}, -{90,-38,-5}, -{90,-38,-4}, -{90,-38,-3}, -{90,-38,-2}, -{90,-38,-1}, -{90,-38,0}, -{90,-38,1}, -{90,-38,2}, -{90,-38,3}, -{90,-38,4}, -{90,-38,5}, -{90,-38,6}, -{90,-38,7}, -{90,-38,8}, -{90,-38,9}, -{90,-38,10}, -{90,-38,11}, -{90,-38,12}, -{90,-38,13}, -{90,-38,14}, -{90,-38,15}, -{90,-38,16}, -{90,-38,17}, -{90,-38,18}, -{90,-38,19}, -{90,-38,20}, -{90,-38,21}, -{90,-38,22}, -{90,-38,23}, -{90,-38,24}, -{90,-38,25}, -{90,-38,26}, -{90,-38,27}, -{90,-38,28}, -{90,-38,29}, -{90,-38,30}, -{90,-38,31}, -{90,-38,32}, -{90,-38,33}, -{90,-38,34}, -{90,-38,35}, -{90,-38,36}, -{90,-38,37}, -{90,-38,38}, -{90,-38,39}, -{90,-38,40}, -{90,-38,41}, -{90,-38,42}, -{90,-38,43}, -{90,-38,44}, -{90,-38,45}, -{90,-38,46}, -{90,-38,47}, -{90,-38,48}, -{90,-38,49}, -{90,-38,50}, -{90,-38,51}, -{90,-38,52}, -{90,-38,53}, -{90,-38,54}, -{90,-38,55}, -{90,-38,56}, -{90,-38,57}, -{90,-38,58}, -{90,-38,59}, -{90,-38,60}, -{90,-38,61}, -{90,-38,62}, -{90,-38,63}, -{90,-38,64}, -{90,-38,65}, -{90,-38,66}, -{90,-38,67}, -{90,-38,68}, -{90,-38,69}, -{90,-38,70}, -{90,-38,71}, -{90,-38,72}, -{90,-38,73}, -{90,-38,74}, -{90,-38,75}, -{90,-38,76}, -{90,-38,77}, -{90,-38,78}, -{90,-38,79}, -{90,-38,80}, -{90,-38,81}, -{90,-38,82}, -{90,-38,83}, -{90,-38,84}, -{90,-38,85}, -{90,-38,86}, -{90,-38,87}, -{90,-37,-15}, -{90,-37,-14}, -{90,-37,-13}, -{90,-37,-12}, -{90,-37,-11}, -{90,-37,-10}, -{90,-37,-9}, -{90,-37,-8}, -{90,-37,-7}, -{90,-37,-6}, -{90,-37,-5}, -{90,-37,-4}, -{90,-37,-3}, -{90,-37,-2}, -{90,-37,-1}, -{90,-37,0}, -{90,-37,1}, -{90,-37,2}, -{90,-37,3}, -{90,-37,4}, -{90,-37,5}, -{90,-37,6}, -{90,-37,7}, -{90,-37,8}, -{90,-37,9}, -{90,-37,10}, -{90,-37,11}, -{90,-37,12}, -{90,-37,13}, -{90,-37,14}, -{90,-37,15}, -{90,-37,16}, -{90,-37,17}, -{90,-37,18}, -{90,-37,19}, -{90,-37,20}, -{90,-37,21}, -{90,-37,22}, -{90,-37,23}, -{90,-37,24}, -{90,-37,25}, -{90,-37,26}, -{90,-37,27}, -{90,-37,28}, -{90,-37,29}, -{90,-37,30}, -{90,-37,31}, -{90,-37,32}, -{90,-37,33}, -{90,-37,34}, -{90,-37,35}, -{90,-37,36}, -{90,-37,37}, -{90,-37,38}, -{90,-37,39}, -{90,-37,40}, -{90,-37,41}, -{90,-37,42}, -{90,-37,43}, -{90,-37,44}, -{90,-37,45}, -{90,-37,46}, -{90,-37,47}, -{90,-37,48}, -{90,-37,49}, -{90,-37,50}, -{90,-37,51}, -{90,-37,52}, -{90,-37,53}, -{90,-37,54}, -{90,-37,55}, -{90,-37,56}, -{90,-37,57}, -{90,-37,58}, -{90,-37,59}, -{90,-37,60}, -{90,-37,61}, -{90,-37,62}, -{90,-37,63}, -{90,-37,64}, -{90,-37,65}, -{90,-37,66}, -{90,-37,67}, -{90,-37,68}, -{90,-37,69}, -{90,-37,70}, -{90,-37,71}, -{90,-37,72}, -{90,-37,73}, -{90,-37,74}, -{90,-37,75}, -{90,-37,76}, -{90,-37,77}, -{90,-37,78}, -{90,-37,79}, -{90,-37,80}, -{90,-37,81}, -{90,-37,82}, -{90,-37,83}, -{90,-37,84}, -{90,-37,85}, -{90,-37,86}, -{90,-37,87}, -{90,-36,-15}, -{90,-36,-14}, -{90,-36,-13}, -{90,-36,-12}, -{90,-36,-11}, -{90,-36,-10}, -{90,-36,-9}, -{90,-36,-8}, -{90,-36,-7}, -{90,-36,-6}, -{90,-36,-5}, -{90,-36,-4}, -{90,-36,-3}, -{90,-36,-2}, -{90,-36,-1}, -{90,-36,0}, -{90,-36,1}, -{90,-36,2}, -{90,-36,3}, -{90,-36,4}, -{90,-36,5}, -{90,-36,6}, -{90,-36,7}, -{90,-36,8}, -{90,-36,9}, -{90,-36,10}, -{90,-36,11}, -{90,-36,12}, -{90,-36,13}, -{90,-36,14}, -{90,-36,15}, -{90,-36,16}, -{90,-36,17}, -{90,-36,18}, -{90,-36,19}, -{90,-36,20}, -{90,-36,21}, -{90,-36,22}, -{90,-36,23}, -{90,-36,24}, -{90,-36,25}, -{90,-36,26}, -{90,-36,27}, -{90,-36,28}, -{90,-36,29}, -{90,-36,30}, -{90,-36,31}, -{90,-36,32}, -{90,-36,33}, -{90,-36,34}, -{90,-36,35}, -{90,-36,36}, -{90,-36,37}, -{90,-36,38}, -{90,-36,39}, -{90,-36,40}, -{90,-36,41}, -{90,-36,42}, -{90,-36,43}, -{90,-36,44}, -{90,-36,45}, -{90,-36,46}, -{90,-36,47}, -{90,-36,48}, -{90,-36,49}, -{90,-36,50}, -{90,-36,51}, -{90,-36,52}, -{90,-36,53}, -{90,-36,54}, -{90,-36,55}, -{90,-36,56}, -{90,-36,57}, -{90,-36,58}, -{90,-36,59}, -{90,-36,60}, -{90,-36,61}, -{90,-36,62}, -{90,-36,63}, -{90,-36,64}, -{90,-36,65}, -{90,-36,66}, -{90,-36,67}, -{90,-36,68}, -{90,-36,69}, -{90,-36,70}, -{90,-36,71}, -{90,-36,72}, -{90,-36,73}, -{90,-36,74}, -{90,-36,75}, -{90,-36,76}, -{90,-36,77}, -{90,-36,78}, -{90,-36,79}, -{90,-36,80}, -{90,-36,81}, -{90,-36,82}, -{90,-36,83}, -{90,-36,84}, -{90,-36,85}, -{90,-36,86}, -{90,-36,87}, -{90,-35,-15}, -{90,-35,-14}, -{90,-35,-13}, -{90,-35,-12}, -{90,-35,-11}, -{90,-35,-10}, -{90,-35,-9}, -{90,-35,-8}, -{90,-35,-7}, -{90,-35,-6}, -{90,-35,-5}, -{90,-35,-4}, -{90,-35,-3}, -{90,-35,-2}, -{90,-35,-1}, -{90,-35,0}, -{90,-35,1}, -{90,-35,2}, -{90,-35,3}, -{90,-35,4}, -{90,-35,5}, -{90,-35,6}, -{90,-35,7}, -{90,-35,8}, -{90,-35,9}, -{90,-35,10}, -{90,-35,11}, -{90,-35,12}, -{90,-35,13}, -{90,-35,14}, -{90,-35,15}, -{90,-35,16}, -{90,-35,17}, -{90,-35,18}, -{90,-35,19}, -{90,-35,20}, -{90,-35,21}, -{90,-35,22}, -{90,-35,23}, -{90,-35,24}, -{90,-35,25}, -{90,-35,26}, -{90,-35,27}, -{90,-35,28}, -{90,-35,29}, -{90,-35,30}, -{90,-35,31}, -{90,-35,32}, -{90,-35,33}, -{90,-35,34}, -{90,-35,35}, -{90,-35,36}, -{90,-35,37}, -{90,-35,38}, -{90,-35,39}, -{90,-35,40}, -{90,-35,41}, -{90,-35,42}, -{90,-35,43}, -{90,-35,44}, -{90,-35,45}, -{90,-35,46}, -{90,-35,47}, -{90,-35,48}, -{90,-35,49}, -{90,-35,50}, -{90,-35,51}, -{90,-35,52}, -{90,-35,53}, -{90,-35,54}, -{90,-35,55}, -{90,-35,56}, -{90,-35,57}, -{90,-35,58}, -{90,-35,59}, -{90,-35,60}, -{90,-35,61}, -{90,-35,62}, -{90,-35,63}, -{90,-35,64}, -{90,-35,65}, -{90,-35,66}, -{90,-35,67}, -{90,-35,68}, -{90,-35,69}, -{90,-35,70}, -{90,-35,71}, -{90,-35,72}, -{90,-35,73}, -{90,-35,74}, -{90,-35,75}, -{90,-35,76}, -{90,-35,77}, -{90,-35,78}, -{90,-35,79}, -{90,-35,80}, -{90,-35,81}, -{90,-35,82}, -{90,-35,83}, -{90,-35,84}, -{90,-35,85}, -{90,-35,86}, -{90,-35,87}, -{90,-34,-15}, -{90,-34,-14}, -{90,-34,-13}, -{90,-34,-12}, -{90,-34,-11}, -{90,-34,-10}, -{90,-34,-9}, -{90,-34,-8}, -{90,-34,-7}, -{90,-34,-6}, -{90,-34,-5}, -{90,-34,-4}, -{90,-34,-3}, -{90,-34,-2}, -{90,-34,-1}, -{90,-34,0}, -{90,-34,1}, -{90,-34,2}, -{90,-34,3}, -{90,-34,4}, -{90,-34,5}, -{90,-34,6}, -{90,-34,7}, -{90,-34,8}, -{90,-34,9}, -{90,-34,10}, -{90,-34,11}, -{90,-34,12}, -{90,-34,13}, -{90,-34,14}, -{90,-34,15}, -{90,-34,16}, -{90,-34,17}, -{90,-34,18}, -{90,-34,19}, -{90,-34,20}, -{90,-34,21}, -{90,-34,22}, -{90,-34,23}, -{90,-34,24}, -{90,-34,25}, -{90,-34,26}, -{90,-34,27}, -{90,-34,28}, -{90,-34,29}, -{90,-34,30}, -{90,-34,31}, -{90,-34,32}, -{90,-34,33}, -{90,-34,34}, -{90,-34,35}, -{90,-34,36}, -{90,-34,37}, -{90,-34,38}, -{90,-34,39}, -{90,-34,40}, -{90,-34,41}, -{90,-34,42}, -{90,-34,43}, -{90,-34,44}, -{90,-34,45}, -{90,-34,46}, -{90,-34,47}, -{90,-34,48}, -{90,-34,49}, -{90,-34,50}, -{90,-34,51}, -{90,-34,52}, -{90,-34,53}, -{90,-34,54}, -{90,-34,55}, -{90,-34,56}, -{90,-34,57}, -{90,-34,58}, -{90,-34,59}, -{90,-34,60}, -{90,-34,61}, -{90,-34,62}, -{90,-34,63}, -{90,-34,64}, -{90,-34,65}, -{90,-34,66}, -{90,-34,67}, -{90,-34,68}, -{90,-34,69}, -{90,-34,70}, -{90,-34,71}, -{90,-34,72}, -{90,-34,73}, -{90,-34,74}, -{90,-34,75}, -{90,-34,76}, -{90,-34,77}, -{90,-34,78}, -{90,-34,79}, -{90,-34,80}, -{90,-34,81}, -{90,-34,82}, -{90,-34,83}, -{90,-34,84}, -{90,-34,85}, -{90,-34,86}, -{90,-34,87}, -{90,-33,-15}, -{90,-33,-14}, -{90,-33,-13}, -{90,-33,-12}, -{90,-33,-11}, -{90,-33,-10}, -{90,-33,-9}, -{90,-33,-8}, -{90,-33,-7}, -{90,-33,-6}, -{90,-33,-5}, -{90,-33,-4}, -{90,-33,-3}, -{90,-33,-2}, -{90,-33,-1}, -{90,-33,0}, -{90,-33,1}, -{90,-33,2}, -{90,-33,3}, -{90,-33,4}, -{90,-33,5}, -{90,-33,6}, -{90,-33,7}, -{90,-33,8}, -{90,-33,9}, -{90,-33,10}, -{90,-33,11}, -{90,-33,12}, -{90,-33,13}, -{90,-33,14}, -{90,-33,15}, -{90,-33,16}, -{90,-33,17}, -{90,-33,18}, -{90,-33,19}, -{90,-33,20}, -{90,-33,21}, -{90,-33,22}, -{90,-33,23}, -{90,-33,24}, -{90,-33,25}, -{90,-33,26}, -{90,-33,27}, -{90,-33,28}, -{90,-33,29}, -{90,-33,30}, -{90,-33,31}, -{90,-33,32}, -{90,-33,33}, -{90,-33,34}, -{90,-33,35}, -{90,-33,36}, -{90,-33,37}, -{90,-33,38}, -{90,-33,39}, -{90,-33,40}, -{90,-33,41}, -{90,-33,42}, -{90,-33,43}, -{90,-33,44}, -{90,-33,45}, -{90,-33,46}, -{90,-33,47}, -{90,-33,48}, -{90,-33,49}, -{90,-33,50}, -{90,-33,51}, -{90,-33,52}, -{90,-33,53}, -{90,-33,54}, -{90,-33,55}, -{90,-33,56}, -{90,-33,57}, -{90,-33,58}, -{90,-33,59}, -{90,-33,60}, -{90,-33,61}, -{90,-33,62}, -{90,-33,63}, -{90,-33,64}, -{90,-33,65}, -{90,-33,66}, -{90,-33,67}, -{90,-33,68}, -{90,-33,69}, -{90,-33,70}, -{90,-33,71}, -{90,-33,72}, -{90,-33,73}, -{90,-33,74}, -{90,-33,75}, -{90,-33,76}, -{90,-33,77}, -{90,-33,78}, -{90,-33,79}, -{90,-33,80}, -{90,-33,81}, -{90,-33,82}, -{90,-33,83}, -{90,-33,84}, -{90,-33,85}, -{90,-33,86}, -{90,-33,87}, -{90,-32,-15}, -{90,-32,-14}, -{90,-32,-13}, -{90,-32,-12}, -{90,-32,-11}, -{90,-32,-10}, -{90,-32,-9}, -{90,-32,-8}, -{90,-32,-7}, -{90,-32,-6}, -{90,-32,-5}, -{90,-32,-4}, -{90,-32,-3}, -{90,-32,-2}, -{90,-32,-1}, -{90,-32,0}, -{90,-32,1}, -{90,-32,2}, -{90,-32,3}, -{90,-32,4}, -{90,-32,5}, -{90,-32,6}, -{90,-32,7}, -{90,-32,8}, -{90,-32,9}, -{90,-32,10}, -{90,-32,11}, -{90,-32,12}, -{90,-32,13}, -{90,-32,14}, -{90,-32,15}, -{90,-32,16}, -{90,-32,17}, -{90,-32,18}, -{90,-32,19}, -{90,-32,20}, -{90,-32,21}, -{90,-32,22}, -{90,-32,23}, -{90,-32,24}, -{90,-32,25}, -{90,-32,26}, -{90,-32,27}, -{90,-32,28}, -{90,-32,29}, -{90,-32,30}, -{90,-32,31}, -{90,-32,32}, -{90,-32,33}, -{90,-32,34}, -{90,-32,35}, -{90,-32,36}, -{90,-32,37}, -{90,-32,38}, -{90,-32,39}, -{90,-32,40}, -{90,-32,41}, -{90,-32,42}, -{90,-32,43}, -{90,-32,44}, -{90,-32,45}, -{90,-32,46}, -{90,-32,47}, -{90,-32,48}, -{90,-32,49}, -{90,-32,50}, -{90,-32,51}, -{90,-32,52}, -{90,-32,53}, -{90,-32,54}, -{90,-32,55}, -{90,-32,56}, -{90,-32,57}, -{90,-32,58}, -{90,-32,59}, -{90,-32,60}, -{90,-32,61}, -{90,-32,62}, -{90,-32,63}, -{90,-32,64}, -{90,-32,65}, -{90,-32,66}, -{90,-32,67}, -{90,-32,68}, -{90,-32,69}, -{90,-32,70}, -{90,-32,71}, -{90,-32,72}, -{90,-32,73}, -{90,-32,74}, -{90,-32,75}, -{90,-32,76}, -{90,-32,77}, -{90,-32,78}, -{90,-32,79}, -{90,-32,80}, -{90,-32,81}, -{90,-32,82}, -{90,-32,83}, -{90,-32,84}, -{90,-32,85}, -{90,-32,86}, -{90,-32,87}, -{90,-31,-15}, -{90,-31,-14}, -{90,-31,-13}, -{90,-31,-12}, -{90,-31,-11}, -{90,-31,-10}, -{90,-31,-9}, -{90,-31,-8}, -{90,-31,-7}, -{90,-31,-6}, -{90,-31,-5}, -{90,-31,-4}, -{90,-31,-3}, -{90,-31,-2}, -{90,-31,-1}, -{90,-31,0}, -{90,-31,1}, -{90,-31,2}, -{90,-31,3}, -{90,-31,4}, -{90,-31,5}, -{90,-31,6}, -{90,-31,7}, -{90,-31,8}, -{90,-31,9}, -{90,-31,10}, -{90,-31,11}, -{90,-31,12}, -{90,-31,13}, -{90,-31,14}, -{90,-31,15}, -{90,-31,16}, -{90,-31,17}, -{90,-31,18}, -{90,-31,19}, -{90,-31,20}, -{90,-31,21}, -{90,-31,22}, -{90,-31,23}, -{90,-31,24}, -{90,-31,25}, -{90,-31,26}, -{90,-31,27}, -{90,-31,28}, -{90,-31,29}, -{90,-31,30}, -{90,-31,31}, -{90,-31,32}, -{90,-31,33}, -{90,-31,34}, -{90,-31,35}, -{90,-31,36}, -{90,-31,37}, -{90,-31,38}, -{90,-31,39}, -{90,-31,40}, -{90,-31,41}, -{90,-31,42}, -{90,-31,43}, -{90,-31,44}, -{90,-31,45}, -{90,-31,46}, -{90,-31,47}, -{90,-31,48}, -{90,-31,49}, -{90,-31,50}, -{90,-31,51}, -{90,-31,52}, -{90,-31,53}, -{90,-31,54}, -{90,-31,55}, -{90,-31,56}, -{90,-31,57}, -{90,-31,58}, -{90,-31,59}, -{90,-31,60}, -{90,-31,61}, -{90,-31,62}, -{90,-31,63}, -{90,-31,64}, -{90,-31,65}, -{90,-31,66}, -{90,-31,67}, -{90,-31,68}, -{90,-31,69}, -{90,-31,70}, -{90,-31,71}, -{90,-31,72}, -{90,-31,73}, -{90,-31,74}, -{90,-31,75}, -{90,-31,76}, -{90,-31,77}, -{90,-31,78}, -{90,-31,79}, -{90,-31,80}, -{90,-31,81}, -{90,-31,82}, -{90,-31,83}, -{90,-31,84}, -{90,-31,85}, -{90,-31,86}, -{90,-31,87}, -{90,-31,88}, -{90,-30,-15}, -{90,-30,-14}, -{90,-30,-13}, -{90,-30,-12}, -{90,-30,-11}, -{90,-30,-10}, -{90,-30,-9}, -{90,-30,-8}, -{90,-30,-7}, -{90,-30,-6}, -{90,-30,-5}, -{90,-30,-4}, -{90,-30,-3}, -{90,-30,-2}, -{90,-30,-1}, -{90,-30,0}, -{90,-30,1}, -{90,-30,2}, -{90,-30,3}, -{90,-30,4}, -{90,-30,5}, -{90,-30,6}, -{90,-30,7}, -{90,-30,8}, -{90,-30,9}, -{90,-30,10}, -{90,-30,11}, -{90,-30,12}, -{90,-30,13}, -{90,-30,14}, -{90,-30,15}, -{90,-30,16}, -{90,-30,17}, -{90,-30,18}, -{90,-30,19}, -{90,-30,20}, -{90,-30,21}, -{90,-30,22}, -{90,-30,23}, -{90,-30,24}, -{90,-30,25}, -{90,-30,26}, -{90,-30,27}, -{90,-30,28}, -{90,-30,29}, -{90,-30,30}, -{90,-30,31}, -{90,-30,32}, -{90,-30,33}, -{90,-30,34}, -{90,-30,35}, -{90,-30,36}, -{90,-30,37}, -{90,-30,38}, -{90,-30,39}, -{90,-30,40}, -{90,-30,41}, -{90,-30,42}, -{90,-30,43}, -{90,-30,44}, -{90,-30,45}, -{90,-30,46}, -{90,-30,47}, -{90,-30,48}, -{90,-30,49}, -{90,-30,50}, -{90,-30,51}, -{90,-30,52}, -{90,-30,53}, -{90,-30,54}, -{90,-30,55}, -{90,-30,56}, -{90,-30,57}, -{90,-30,58}, -{90,-30,59}, -{90,-30,60}, -{90,-30,61}, -{90,-30,62}, -{90,-30,63}, -{90,-30,64}, -{90,-30,65}, -{90,-30,66}, -{90,-30,67}, -{90,-30,68}, -{90,-30,69}, -{90,-30,70}, -{90,-30,71}, -{90,-30,72}, -{90,-30,73}, -{90,-30,74}, -{90,-30,75}, -{90,-30,76}, -{90,-30,77}, -{90,-30,78}, -{90,-30,79}, -{90,-30,80}, -{90,-30,81}, -{90,-30,82}, -{90,-30,83}, -{90,-30,84}, -{90,-30,85}, -{90,-30,86}, -{90,-30,87}, -{90,-30,88}, -{90,-29,-15}, -{90,-29,-14}, -{90,-29,-13}, -{90,-29,-12}, -{90,-29,-11}, -{90,-29,-10}, -{90,-29,-9}, -{90,-29,-8}, -{90,-29,-7}, -{90,-29,-6}, -{90,-29,-5}, -{90,-29,-4}, -{90,-29,-3}, -{90,-29,-2}, -{90,-29,-1}, -{90,-29,0}, -{90,-29,1}, -{90,-29,2}, -{90,-29,3}, -{90,-29,4}, -{90,-29,5}, -{90,-29,6}, -{90,-29,7}, -{90,-29,8}, -{90,-29,9}, -{90,-29,10}, -{90,-29,11}, -{90,-29,12}, -{90,-29,13}, -{90,-29,14}, -{90,-29,15}, -{90,-29,16}, -{90,-29,17}, -{90,-29,18}, -{90,-29,19}, -{90,-29,20}, -{90,-29,21}, -{90,-29,22}, -{90,-29,23}, -{90,-29,24}, -{90,-29,25}, -{90,-29,26}, -{90,-29,27}, -{90,-29,28}, -{90,-29,29}, -{90,-29,30}, -{90,-29,31}, -{90,-29,32}, -{90,-29,33}, -{90,-29,34}, -{90,-29,35}, -{90,-29,36}, -{90,-29,37}, -{90,-29,38}, -{90,-29,39}, -{90,-29,40}, -{90,-29,41}, -{90,-29,42}, -{90,-29,43}, -{90,-29,44}, -{90,-29,45}, -{90,-29,46}, -{90,-29,47}, -{90,-29,48}, -{90,-29,49}, -{90,-29,50}, -{90,-29,51}, -{90,-29,52}, -{90,-29,53}, -{90,-29,54}, -{90,-29,55}, -{90,-29,56}, -{90,-29,57}, -{90,-29,58}, -{90,-29,59}, -{90,-29,60}, -{90,-29,61}, -{90,-29,62}, -{90,-29,63}, -{90,-29,64}, -{90,-29,65}, -{90,-29,66}, -{90,-29,67}, -{90,-29,68}, -{90,-29,69}, -{90,-29,70}, -{90,-29,71}, -{90,-29,72}, -{90,-29,73}, -{90,-29,74}, -{90,-29,75}, -{90,-29,76}, -{90,-29,77}, -{90,-29,78}, -{90,-29,79}, -{90,-29,80}, -{90,-29,81}, -{90,-29,82}, -{90,-29,83}, -{90,-29,84}, -{90,-29,85}, -{90,-29,86}, -{90,-29,87}, -{90,-29,88}, -{90,-28,-15}, -{90,-28,-14}, -{90,-28,-13}, -{90,-28,-12}, -{90,-28,-11}, -{90,-28,-10}, -{90,-28,-9}, -{90,-28,-8}, -{90,-28,-7}, -{90,-28,-6}, -{90,-28,-5}, -{90,-28,-4}, -{90,-28,-3}, -{90,-28,-2}, -{90,-28,-1}, -{90,-28,0}, -{90,-28,1}, -{90,-28,2}, -{90,-28,3}, -{90,-28,4}, -{90,-28,5}, -{90,-28,6}, -{90,-28,7}, -{90,-28,8}, -{90,-28,9}, -{90,-28,10}, -{90,-28,11}, -{90,-28,12}, -{90,-28,13}, -{90,-28,14}, -{90,-28,15}, -{90,-28,16}, -{90,-28,17}, -{90,-28,18}, -{90,-28,19}, -{90,-28,20}, -{90,-28,21}, -{90,-28,22}, -{90,-28,23}, -{90,-28,24}, -{90,-28,25}, -{90,-28,26}, -{90,-28,27}, -{90,-28,28}, -{90,-28,29}, -{90,-28,30}, -{90,-28,31}, -{90,-28,32}, -{90,-28,33}, -{90,-28,34}, -{90,-28,35}, -{90,-28,36}, -{90,-28,37}, -{90,-28,38}, -{90,-28,39}, -{90,-28,40}, -{90,-28,41}, -{90,-28,42}, -{90,-28,43}, -{90,-28,44}, -{90,-28,45}, -{90,-28,46}, -{90,-28,47}, -{90,-28,48}, -{90,-28,49}, -{90,-28,50}, -{90,-28,51}, -{90,-28,52}, -{90,-28,53}, -{90,-28,54}, -{90,-28,55}, -{90,-28,56}, -{90,-28,57}, -{90,-28,58}, -{90,-28,59}, -{90,-28,60}, -{90,-28,61}, -{90,-28,62}, -{90,-28,63}, -{90,-28,64}, -{90,-28,65}, -{90,-28,66}, -{90,-28,67}, -{90,-28,68}, -{90,-28,69}, -{90,-28,70}, -{90,-28,71}, -{90,-28,72}, -{90,-28,73}, -{90,-28,74}, -{90,-28,75}, -{90,-28,76}, -{90,-28,77}, -{90,-28,78}, -{90,-28,79}, -{90,-28,80}, -{90,-28,81}, -{90,-28,82}, -{90,-28,83}, -{90,-28,84}, -{90,-28,85}, -{90,-28,86}, -{90,-28,87}, -{90,-28,88}, -{90,-27,-15}, -{90,-27,-14}, -{90,-27,-13}, -{90,-27,-12}, -{90,-27,-11}, -{90,-27,-10}, -{90,-27,-9}, -{90,-27,-8}, -{90,-27,-7}, -{90,-27,-6}, -{90,-27,-5}, -{90,-27,-4}, -{90,-27,-3}, -{90,-27,-2}, -{90,-27,-1}, -{90,-27,0}, -{90,-27,1}, -{90,-27,2}, -{90,-27,3}, -{90,-27,4}, -{90,-27,5}, -{90,-27,6}, -{90,-27,7}, -{90,-27,8}, -{90,-27,9}, -{90,-27,10}, -{90,-27,11}, -{90,-27,12}, -{90,-27,13}, -{90,-27,14}, -{90,-27,15}, -{90,-27,16}, -{90,-27,17}, -{90,-27,18}, -{90,-27,19}, -{90,-27,20}, -{90,-27,21}, -{90,-27,22}, -{90,-27,23}, -{90,-27,24}, -{90,-27,25}, -{90,-27,26}, -{90,-27,27}, -{90,-27,28}, -{90,-27,29}, -{90,-27,30}, -{90,-27,31}, -{90,-27,32}, -{90,-27,33}, -{90,-27,34}, -{90,-27,35}, -{90,-27,36}, -{90,-27,37}, -{90,-27,38}, -{90,-27,39}, -{90,-27,40}, -{90,-27,41}, -{90,-27,42}, -{90,-27,43}, -{90,-27,44}, -{90,-27,45}, -{90,-27,46}, -{90,-27,47}, -{90,-27,48}, -{90,-27,49}, -{90,-27,50}, -{90,-27,51}, -{90,-27,52}, -{90,-27,53}, -{90,-27,54}, -{90,-27,55}, -{90,-27,56}, -{90,-27,57}, -{90,-27,58}, -{90,-27,59}, -{90,-27,60}, -{90,-27,61}, -{90,-27,62}, -{90,-27,63}, -{90,-27,64}, -{90,-27,65}, -{90,-27,66}, -{90,-27,67}, -{90,-27,68}, -{90,-27,69}, -{90,-27,70}, -{90,-27,71}, -{90,-27,72}, -{90,-27,73}, -{90,-27,74}, -{90,-27,75}, -{90,-27,76}, -{90,-27,77}, -{90,-27,78}, -{90,-27,79}, -{90,-27,80}, -{90,-27,81}, -{90,-27,82}, -{90,-27,83}, -{90,-27,84}, -{90,-27,85}, -{90,-27,86}, -{90,-27,87}, -{90,-27,88}, -{90,-26,-15}, -{90,-26,-14}, -{90,-26,-13}, -{90,-26,-12}, -{90,-26,-11}, -{90,-26,-10}, -{90,-26,-9}, -{90,-26,-8}, -{90,-26,-7}, -{90,-26,-6}, -{90,-26,-5}, -{90,-26,-4}, -{90,-26,-3}, -{90,-26,-2}, -{90,-26,-1}, -{90,-26,0}, -{90,-26,1}, -{90,-26,2}, -{90,-26,3}, -{90,-26,4}, -{90,-26,5}, -{90,-26,6}, -{90,-26,7}, -{90,-26,8}, -{90,-26,9}, -{90,-26,10}, -{90,-26,11}, -{90,-26,12}, -{90,-26,13}, -{90,-26,14}, -{90,-26,15}, -{90,-26,16}, -{90,-26,17}, -{90,-26,18}, -{90,-26,19}, -{90,-26,20}, -{90,-26,21}, -{90,-26,22}, -{90,-26,23}, -{90,-26,24}, -{90,-26,25}, -{90,-26,26}, -{90,-26,27}, -{90,-26,28}, -{90,-26,29}, -{90,-26,30}, -{90,-26,31}, -{90,-26,32}, -{90,-26,33}, -{90,-26,34}, -{90,-26,35}, -{90,-26,36}, -{90,-26,37}, -{90,-26,38}, -{90,-26,39}, -{90,-26,40}, -{90,-26,41}, -{90,-26,42}, -{90,-26,43}, -{90,-26,44}, -{90,-26,45}, -{90,-26,46}, -{90,-26,47}, -{90,-26,48}, -{90,-26,49}, -{90,-26,50}, -{90,-26,51}, -{90,-26,52}, -{90,-26,53}, -{90,-26,54}, -{90,-26,55}, -{90,-26,56}, -{90,-26,57}, -{90,-26,58}, -{90,-26,59}, -{90,-26,60}, -{90,-26,61}, -{90,-26,62}, -{90,-26,63}, -{90,-26,64}, -{90,-26,65}, -{90,-26,66}, -{90,-26,67}, -{90,-26,68}, -{90,-26,69}, -{90,-26,70}, -{90,-26,71}, -{90,-26,72}, -{90,-26,73}, -{90,-26,74}, -{90,-26,75}, -{90,-26,76}, -{90,-26,77}, -{90,-26,78}, -{90,-26,79}, -{90,-26,80}, -{90,-26,81}, -{90,-26,82}, -{90,-26,83}, -{90,-26,84}, -{90,-26,85}, -{90,-26,86}, -{90,-26,87}, -{90,-26,88}, -{90,-25,-15}, -{90,-25,-14}, -{90,-25,-13}, -{90,-25,-12}, -{90,-25,-11}, -{90,-25,-10}, -{90,-25,-9}, -{90,-25,-8}, -{90,-25,-7}, -{90,-25,-6}, -{90,-25,-5}, -{90,-25,-4}, -{90,-25,-3}, -{90,-25,-2}, -{90,-25,-1}, -{90,-25,0}, -{90,-25,1}, -{90,-25,2}, -{90,-25,3}, -{90,-25,4}, -{90,-25,5}, -{90,-25,6}, -{90,-25,7}, -{90,-25,8}, -{90,-25,9}, -{90,-25,10}, -{90,-25,11}, -{90,-25,12}, -{90,-25,13}, -{90,-25,14}, -{90,-25,15}, -{90,-25,16}, -{90,-25,17}, -{90,-25,18}, -{90,-25,19}, -{90,-25,20}, -{90,-25,21}, -{90,-25,22}, -{90,-25,23}, -{90,-25,24}, -{90,-25,25}, -{90,-25,26}, -{90,-25,27}, -{90,-25,28}, -{90,-25,29}, -{90,-25,30}, -{90,-25,31}, -{90,-25,32}, -{90,-25,33}, -{90,-25,34}, -{90,-25,35}, -{90,-25,36}, -{90,-25,37}, -{90,-25,38}, -{90,-25,39}, -{90,-25,40}, -{90,-25,41}, -{90,-25,42}, -{90,-25,43}, -{90,-25,44}, -{90,-25,45}, -{90,-25,46}, -{90,-25,47}, -{90,-25,48}, -{90,-25,49}, -{90,-25,50}, -{90,-25,51}, -{90,-25,52}, -{90,-25,53}, -{90,-25,54}, -{90,-25,55}, -{90,-25,56}, -{90,-25,57}, -{90,-25,58}, -{90,-25,59}, -{90,-25,60}, -{90,-25,61}, -{90,-25,62}, -{90,-25,63}, -{90,-25,64}, -{90,-25,65}, -{90,-25,66}, -{90,-25,67}, -{90,-25,68}, -{90,-25,69}, -{90,-25,70}, -{90,-25,71}, -{90,-25,72}, -{90,-25,73}, -{90,-25,74}, -{90,-25,75}, -{90,-25,76}, -{90,-25,77}, -{90,-25,78}, -{90,-25,79}, -{90,-25,80}, -{90,-25,81}, -{90,-25,82}, -{90,-25,83}, -{90,-25,84}, -{90,-25,85}, -{90,-25,86}, -{90,-25,87}, -{90,-25,88}, -{90,-24,-15}, -{90,-24,-14}, -{90,-24,-13}, -{90,-24,-12}, -{90,-24,-11}, -{90,-24,-10}, -{90,-24,-9}, -{90,-24,-8}, -{90,-24,-7}, -{90,-24,-6}, -{90,-24,-5}, -{90,-24,-4}, -{90,-24,-3}, -{90,-24,-2}, -{90,-24,-1}, -{90,-24,0}, -{90,-24,1}, -{90,-24,2}, -{90,-24,3}, -{90,-24,4}, -{90,-24,5}, -{90,-24,6}, -{90,-24,7}, -{90,-24,8}, -{90,-24,9}, -{90,-24,10}, -{90,-24,11}, -{90,-24,12}, -{90,-24,13}, -{90,-24,14}, -{90,-24,15}, -{90,-24,16}, -{90,-24,17}, -{90,-24,18}, -{90,-24,19}, -{90,-24,20}, -{90,-24,21}, -{90,-24,22}, -{90,-24,23}, -{90,-24,24}, -{90,-24,25}, -{90,-24,26}, -{90,-24,27}, -{90,-24,28}, -{90,-24,29}, -{90,-24,30}, -{90,-24,31}, -{90,-24,32}, -{90,-24,33}, -{90,-24,34}, -{90,-24,35}, -{90,-24,36}, -{90,-24,37}, -{90,-24,38}, -{90,-24,39}, -{90,-24,40}, -{90,-24,41}, -{90,-24,42}, -{90,-24,43}, -{90,-24,44}, -{90,-24,45}, -{90,-24,46}, -{90,-24,47}, -{90,-24,48}, -{90,-24,49}, -{90,-24,50}, -{90,-24,51}, -{90,-24,52}, -{90,-24,53}, -{90,-24,54}, -{90,-24,55}, -{90,-24,56}, -{90,-24,57}, -{90,-24,58}, -{90,-24,59}, -{90,-24,60}, -{90,-24,61}, -{90,-24,62}, -{90,-24,63}, -{90,-24,64}, -{90,-24,65}, -{90,-24,66}, -{90,-24,67}, -{90,-24,68}, -{90,-24,69}, -{90,-24,70}, -{90,-24,71}, -{90,-24,72}, -{90,-24,73}, -{90,-24,74}, -{90,-24,75}, -{90,-24,76}, -{90,-24,77}, -{90,-24,78}, -{90,-24,79}, -{90,-24,80}, -{90,-24,81}, -{90,-24,82}, -{90,-24,83}, -{90,-24,84}, -{90,-24,85}, -{90,-24,86}, -{90,-24,87}, -{90,-24,88}, -{90,-23,-15}, -{90,-23,-14}, -{90,-23,-13}, -{90,-23,-12}, -{90,-23,-11}, -{90,-23,-10}, -{90,-23,-9}, -{90,-23,-8}, -{90,-23,-7}, -{90,-23,-6}, -{90,-23,-5}, -{90,-23,-4}, -{90,-23,-3}, -{90,-23,-2}, -{90,-23,-1}, -{90,-23,0}, -{90,-23,1}, -{90,-23,2}, -{90,-23,3}, -{90,-23,4}, -{90,-23,5}, -{90,-23,6}, -{90,-23,7}, -{90,-23,8}, -{90,-23,9}, -{90,-23,10}, -{90,-23,11}, -{90,-23,12}, -{90,-23,13}, -{90,-23,14}, -{90,-23,15}, -{90,-23,16}, -{90,-23,17}, -{90,-23,18}, -{90,-23,19}, -{90,-23,20}, -{90,-23,21}, -{90,-23,22}, -{90,-23,23}, -{90,-23,24}, -{90,-23,25}, -{90,-23,26}, -{90,-23,27}, -{90,-23,28}, -{90,-23,29}, -{90,-23,30}, -{90,-23,31}, -{90,-23,32}, -{90,-23,33}, -{90,-23,34}, -{90,-23,35}, -{90,-23,36}, -{90,-23,37}, -{90,-23,38}, -{90,-23,39}, -{90,-23,40}, -{90,-23,41}, -{90,-23,42}, -{90,-23,43}, -{90,-23,44}, -{90,-23,45}, -{90,-23,46}, -{90,-23,47}, -{90,-23,48}, -{90,-23,49}, -{90,-23,50}, -{90,-23,51}, -{90,-23,52}, -{90,-23,53}, -{90,-23,54}, -{90,-23,55}, -{90,-23,56}, -{90,-23,57}, -{90,-23,58}, -{90,-23,59}, -{90,-23,60}, -{90,-23,61}, -{90,-23,62}, -{90,-23,63}, -{90,-23,64}, -{90,-23,65}, -{90,-23,66}, -{90,-23,67}, -{90,-23,68}, -{90,-23,69}, -{90,-23,70}, -{90,-23,71}, -{90,-23,72}, -{90,-23,73}, -{90,-23,74}, -{90,-23,75}, -{90,-23,76}, -{90,-23,77}, -{90,-23,78}, -{90,-23,79}, -{90,-23,80}, -{90,-23,81}, -{90,-23,82}, -{90,-23,83}, -{90,-23,84}, -{90,-23,85}, -{90,-23,86}, -{90,-23,87}, -{90,-23,88}, -{90,-22,-15}, -{90,-22,-14}, -{90,-22,-13}, -{90,-22,-12}, -{90,-22,-11}, -{90,-22,-10}, -{90,-22,-9}, -{90,-22,-8}, -{90,-22,-7}, -{90,-22,-6}, -{90,-22,-5}, -{90,-22,-4}, -{90,-22,-3}, -{90,-22,-2}, -{90,-22,-1}, -{90,-22,0}, -{90,-22,1}, -{90,-22,2}, -{90,-22,3}, -{90,-22,4}, -{90,-22,5}, -{90,-22,6}, -{90,-22,7}, -{90,-22,8}, -{90,-22,9}, -{90,-22,10}, -{90,-22,11}, -{90,-22,12}, -{90,-22,13}, -{90,-22,14}, -{90,-22,15}, -{90,-22,16}, -{90,-22,17}, -{90,-22,18}, -{90,-22,19}, -{90,-22,20}, -{90,-22,21}, -{90,-22,22}, -{90,-22,23}, -{90,-22,24}, -{90,-22,25}, -{90,-22,26}, -{90,-22,27}, -{90,-22,28}, -{90,-22,29}, -{90,-22,30}, -{90,-22,31}, -{90,-22,32}, -{90,-22,33}, -{90,-22,34}, -{90,-22,35}, -{90,-22,36}, -{90,-22,37}, -{90,-22,38}, -{90,-22,39}, -{90,-22,40}, -{90,-22,41}, -{90,-22,42}, -{90,-22,43}, -{90,-22,44}, -{90,-22,45}, -{90,-22,46}, -{90,-22,47}, -{90,-22,48}, -{90,-22,49}, -{90,-22,50}, -{90,-22,51}, -{90,-22,52}, -{90,-22,53}, -{90,-22,54}, -{90,-22,55}, -{90,-22,56}, -{90,-22,57}, -{90,-22,58}, -{90,-22,59}, -{90,-22,60}, -{90,-22,61}, -{90,-22,62}, -{90,-22,63}, -{90,-22,64}, -{90,-22,65}, -{90,-22,66}, -{90,-22,67}, -{90,-22,68}, -{90,-22,69}, -{90,-22,70}, -{90,-22,71}, -{90,-22,72}, -{90,-22,73}, -{90,-22,74}, -{90,-22,75}, -{90,-22,76}, -{90,-22,77}, -{90,-22,78}, -{90,-22,79}, -{90,-22,80}, -{90,-22,81}, -{90,-22,82}, -{90,-22,83}, -{90,-22,84}, -{90,-22,85}, -{90,-22,86}, -{90,-22,87}, -{90,-22,88}, -{90,-21,-15}, -{90,-21,-14}, -{90,-21,-13}, -{90,-21,-12}, -{90,-21,-11}, -{90,-21,-10}, -{90,-21,-9}, -{90,-21,-8}, -{90,-21,-7}, -{90,-21,-6}, -{90,-21,-5}, -{90,-21,-4}, -{90,-21,-3}, -{90,-21,-2}, -{90,-21,-1}, -{90,-21,0}, -{90,-21,1}, -{90,-21,2}, -{90,-21,3}, -{90,-21,4}, -{90,-21,5}, -{90,-21,6}, -{90,-21,7}, -{90,-21,8}, -{90,-21,9}, -{90,-21,10}, -{90,-21,11}, -{90,-21,12}, -{90,-21,13}, -{90,-21,14}, -{90,-21,15}, -{90,-21,16}, -{90,-21,17}, -{90,-21,18}, -{90,-21,19}, -{90,-21,20}, -{90,-21,21}, -{90,-21,22}, -{90,-21,23}, -{90,-21,24}, -{90,-21,25}, -{90,-21,26}, -{90,-21,27}, -{90,-21,28}, -{90,-21,29}, -{90,-21,30}, -{90,-21,31}, -{90,-21,32}, -{90,-21,33}, -{90,-21,34}, -{90,-21,35}, -{90,-21,36}, -{90,-21,37}, -{90,-21,38}, -{90,-21,39}, -{90,-21,40}, -{90,-21,41}, -{90,-21,42}, -{90,-21,43}, -{90,-21,44}, -{90,-21,45}, -{90,-21,46}, -{90,-21,47}, -{90,-21,48}, -{90,-21,49}, -{90,-21,50}, -{90,-21,51}, -{90,-21,52}, -{90,-21,53}, -{90,-21,54}, -{90,-21,55}, -{90,-21,56}, -{90,-21,57}, -{90,-21,58}, -{90,-21,59}, -{90,-21,60}, -{90,-21,61}, -{90,-21,62}, -{90,-21,63}, -{90,-21,64}, -{90,-21,65}, -{90,-21,66}, -{90,-21,67}, -{90,-21,68}, -{90,-21,69}, -{90,-21,70}, -{90,-21,71}, -{90,-21,72}, -{90,-21,73}, -{90,-21,74}, -{90,-21,75}, -{90,-21,76}, -{90,-21,77}, -{90,-21,78}, -{90,-21,79}, -{90,-21,80}, -{90,-21,81}, -{90,-21,82}, -{90,-21,83}, -{90,-21,84}, -{90,-21,85}, -{90,-21,86}, -{90,-21,87}, -{90,-21,88}, -{90,-20,-15}, -{90,-20,-14}, -{90,-20,-13}, -{90,-20,-12}, -{90,-20,-11}, -{90,-20,-10}, -{90,-20,-9}, -{90,-20,-8}, -{90,-20,-7}, -{90,-20,-6}, -{90,-20,-5}, -{90,-20,-4}, -{90,-20,-3}, -{90,-20,-2}, -{90,-20,-1}, -{90,-20,0}, -{90,-20,1}, -{90,-20,2}, -{90,-20,3}, -{90,-20,4}, -{90,-20,5}, -{90,-20,6}, -{90,-20,7}, -{90,-20,8}, -{90,-20,9}, -{90,-20,10}, -{90,-20,11}, -{90,-20,12}, -{90,-20,13}, -{90,-20,14}, -{90,-20,15}, -{90,-20,16}, -{90,-20,17}, -{90,-20,18}, -{90,-20,19}, -{90,-20,20}, -{90,-20,21}, -{90,-20,22}, -{90,-20,23}, -{90,-20,24}, -{90,-20,25}, -{90,-20,26}, -{90,-20,27}, -{90,-20,28}, -{90,-20,29}, -{90,-20,30}, -{90,-20,31}, -{90,-20,32}, -{90,-20,33}, -{90,-20,34}, -{90,-20,35}, -{90,-20,36}, -{90,-20,37}, -{90,-20,38}, -{90,-20,39}, -{90,-20,40}, -{90,-20,41}, -{90,-20,42}, -{90,-20,43}, -{90,-20,44}, -{90,-20,45}, -{90,-20,46}, -{90,-20,47}, -{90,-20,48}, -{90,-20,49}, -{90,-20,50}, -{90,-20,51}, -{90,-20,52}, -{90,-20,53}, -{90,-20,54}, -{90,-20,55}, -{90,-20,56}, -{90,-20,57}, -{90,-20,58}, -{90,-20,59}, -{90,-20,60}, -{90,-20,61}, -{90,-20,62}, -{90,-20,63}, -{90,-20,64}, -{90,-20,65}, -{90,-20,66}, -{90,-20,67}, -{90,-20,68}, -{90,-20,69}, -{90,-20,70}, -{90,-20,71}, -{90,-20,72}, -{90,-20,73}, -{90,-20,74}, -{90,-20,75}, -{90,-20,76}, -{90,-20,77}, -{90,-20,78}, -{90,-20,79}, -{90,-20,80}, -{90,-20,81}, -{90,-20,82}, -{90,-20,83}, -{90,-20,84}, -{90,-20,85}, -{90,-20,86}, -{90,-20,87}, -{90,-20,88}, -{90,-19,-15}, -{90,-19,-14}, -{90,-19,-13}, -{90,-19,-12}, -{90,-19,-11}, -{90,-19,-10}, -{90,-19,-9}, -{90,-19,-8}, -{90,-19,-7}, -{90,-19,-6}, -{90,-19,-5}, -{90,-19,-4}, -{90,-19,-3}, -{90,-19,-2}, -{90,-19,-1}, -{90,-19,0}, -{90,-19,1}, -{90,-19,2}, -{90,-19,3}, -{90,-19,4}, -{90,-19,5}, -{90,-19,6}, -{90,-19,7}, -{90,-19,8}, -{90,-19,9}, -{90,-19,10}, -{90,-19,11}, -{90,-19,12}, -{90,-19,13}, -{90,-19,14}, -{90,-19,15}, -{90,-19,16}, -{90,-19,17}, -{90,-19,18}, -{90,-19,19}, -{90,-19,20}, -{90,-19,21}, -{90,-19,22}, -{90,-19,23}, -{90,-19,24}, -{90,-19,25}, -{90,-19,26}, -{90,-19,27}, -{90,-19,28}, -{90,-19,29}, -{90,-19,30}, -{90,-19,31}, -{90,-19,32}, -{90,-19,33}, -{90,-19,34}, -{90,-19,35}, -{90,-19,36}, -{90,-19,37}, -{90,-19,38}, -{90,-19,39}, -{90,-19,40}, -{90,-19,41}, -{90,-19,42}, -{90,-19,43}, -{90,-19,44}, -{90,-19,45}, -{90,-19,46}, -{90,-19,47}, -{90,-19,48}, -{90,-19,49}, -{90,-19,50}, -{90,-19,51}, -{90,-19,52}, -{90,-19,53}, -{90,-19,54}, -{90,-19,55}, -{90,-19,56}, -{90,-19,57}, -{90,-19,58}, -{90,-19,59}, -{90,-19,60}, -{90,-19,61}, -{90,-19,62}, -{90,-19,63}, -{90,-19,64}, -{90,-19,65}, -{90,-19,66}, -{90,-19,67}, -{90,-19,68}, -{90,-19,69}, -{90,-19,70}, -{90,-19,71}, -{90,-19,72}, -{90,-19,73}, -{90,-19,74}, -{90,-19,75}, -{90,-19,76}, -{90,-19,77}, -{90,-19,78}, -{90,-19,79}, -{90,-19,80}, -{90,-19,81}, -{90,-19,82}, -{90,-19,83}, -{90,-19,84}, -{90,-19,85}, -{90,-19,86}, -{90,-19,87}, -{90,-19,88}, -{90,-18,-15}, -{90,-18,-14}, -{90,-18,-13}, -{90,-18,-12}, -{90,-18,-11}, -{90,-18,-10}, -{90,-18,-9}, -{90,-18,-8}, -{90,-18,-7}, -{90,-18,-6}, -{90,-18,-5}, -{90,-18,-4}, -{90,-18,-3}, -{90,-18,-2}, -{90,-18,-1}, -{90,-18,0}, -{90,-18,1}, -{90,-18,2}, -{90,-18,3}, -{90,-18,4}, -{90,-18,5}, -{90,-18,6}, -{90,-18,7}, -{90,-18,8}, -{90,-18,9}, -{90,-18,10}, -{90,-18,11}, -{90,-18,12}, -{90,-18,13}, -{90,-18,14}, -{90,-18,15}, -{90,-18,16}, -{90,-18,17}, -{90,-18,18}, -{90,-18,19}, -{90,-18,20}, -{90,-18,21}, -{90,-18,22}, -{90,-18,23}, -{90,-18,24}, -{90,-18,25}, -{90,-18,26}, -{90,-18,27}, -{90,-18,28}, -{90,-18,29}, -{90,-18,30}, -{90,-18,31}, -{90,-18,32}, -{90,-18,33}, -{90,-18,34}, -{90,-18,35}, -{90,-18,36}, -{90,-18,37}, -{90,-18,38}, -{90,-18,39}, -{90,-18,40}, -{90,-18,41}, -{90,-18,42}, -{90,-18,43}, -{90,-18,44}, -{90,-18,45}, -{90,-18,46}, -{90,-18,47}, -{90,-18,48}, -{90,-18,49}, -{90,-18,50}, -{90,-18,51}, -{90,-18,52}, -{90,-18,53}, -{90,-18,54}, -{90,-18,55}, -{90,-18,56}, -{90,-18,57}, -{90,-18,58}, -{90,-18,59}, -{90,-18,60}, -{90,-18,61}, -{90,-18,62}, -{90,-18,63}, -{90,-18,64}, -{90,-18,65}, -{90,-18,66}, -{90,-18,67}, -{90,-18,68}, -{90,-18,69}, -{90,-18,70}, -{90,-18,71}, -{90,-18,72}, -{90,-18,73}, -{90,-18,74}, -{90,-18,75}, -{90,-18,76}, -{90,-18,77}, -{90,-18,78}, -{90,-18,79}, -{90,-18,80}, -{90,-18,81}, -{90,-18,82}, -{90,-18,83}, -{90,-18,84}, -{90,-18,85}, -{90,-18,86}, -{90,-18,87}, -{90,-18,88}, -{90,-17,-15}, -{90,-17,-14}, -{90,-17,-13}, -{90,-17,-12}, -{90,-17,-11}, -{90,-17,-10}, -{90,-17,-9}, -{90,-17,-8}, -{90,-17,-7}, -{90,-17,-6}, -{90,-17,-5}, -{90,-17,-4}, -{90,-17,-3}, -{90,-17,-2}, -{90,-17,-1}, -{90,-17,0}, -{90,-17,1}, -{90,-17,2}, -{90,-17,3}, -{90,-17,4}, -{90,-17,5}, -{90,-17,6}, -{90,-17,7}, -{90,-17,8}, -{90,-17,9}, -{90,-17,10}, -{90,-17,11}, -{90,-17,12}, -{90,-17,13}, -{90,-17,14}, -{90,-17,15}, -{90,-17,16}, -{90,-17,17}, -{90,-17,18}, -{90,-17,19}, -{90,-17,20}, -{90,-17,21}, -{90,-17,22}, -{90,-17,23}, -{90,-17,24}, -{90,-17,25}, -{90,-17,26}, -{90,-17,27}, -{90,-17,28}, -{90,-17,29}, -{90,-17,30}, -{90,-17,31}, -{90,-17,32}, -{90,-17,33}, -{90,-17,34}, -{90,-17,35}, -{90,-17,36}, -{90,-17,37}, -{90,-17,38}, -{90,-17,39}, -{90,-17,40}, -{90,-17,41}, -{90,-17,42}, -{90,-17,43}, -{90,-17,44}, -{90,-17,45}, -{90,-17,46}, -{90,-17,47}, -{90,-17,48}, -{90,-17,49}, -{90,-17,50}, -{90,-17,51}, -{90,-17,52}, -{90,-17,53}, -{90,-17,54}, -{90,-17,55}, -{90,-17,56}, -{90,-17,57}, -{90,-17,58}, -{90,-17,59}, -{90,-17,60}, -{90,-17,61}, -{90,-17,62}, -{90,-17,63}, -{90,-17,64}, -{90,-17,65}, -{90,-17,66}, -{90,-17,67}, -{90,-17,68}, -{90,-17,69}, -{90,-17,70}, -{90,-17,71}, -{90,-17,72}, -{90,-17,73}, -{90,-17,74}, -{90,-17,75}, -{90,-17,76}, -{90,-17,77}, -{90,-17,78}, -{90,-17,79}, -{90,-17,80}, -{90,-17,81}, -{90,-17,82}, -{90,-17,83}, -{90,-17,84}, -{90,-17,85}, -{90,-17,86}, -{90,-17,87}, -{90,-17,88}, -{90,-16,-15}, -{90,-16,-14}, -{90,-16,-13}, -{90,-16,-12}, -{90,-16,-11}, -{90,-16,-10}, -{90,-16,-9}, -{90,-16,-8}, -{90,-16,-7}, -{90,-16,-6}, -{90,-16,-5}, -{90,-16,-4}, -{90,-16,-3}, -{90,-16,-2}, -{90,-16,-1}, -{90,-16,0}, -{90,-16,1}, -{90,-16,2}, -{90,-16,3}, -{90,-16,4}, -{90,-16,5}, -{90,-16,6}, -{90,-16,7}, -{90,-16,8}, -{90,-16,9}, -{90,-16,10}, -{90,-16,11}, -{90,-16,12}, -{90,-16,13}, -{90,-16,14}, -{90,-16,15}, -{90,-16,16}, -{90,-16,17}, -{90,-16,18}, -{90,-16,19}, -{90,-16,20}, -{90,-16,21}, -{90,-16,22}, -{90,-16,23}, -{90,-16,24}, -{90,-16,25}, -{90,-16,26}, -{90,-16,27}, -{90,-16,28}, -{90,-16,29}, -{90,-16,30}, -{90,-16,31}, -{90,-16,32}, -{90,-16,33}, -{90,-16,34}, -{90,-16,35}, -{90,-16,36}, -{90,-16,37}, -{90,-16,38}, -{90,-16,39}, -{90,-16,40}, -{90,-16,41}, -{90,-16,42}, -{90,-16,43}, -{90,-16,44}, -{90,-16,45}, -{90,-16,46}, -{90,-16,47}, -{90,-16,48}, -{90,-16,49}, -{90,-16,50}, -{90,-16,51}, -{90,-16,52}, -{90,-16,53}, -{90,-16,54}, -{90,-16,55}, -{90,-16,56}, -{90,-16,57}, -{90,-16,58}, -{90,-16,59}, -{90,-16,60}, -{90,-16,61}, -{90,-16,62}, -{90,-16,63}, -{90,-16,64}, -{90,-16,65}, -{90,-16,66}, -{90,-16,67}, -{90,-16,68}, -{90,-16,69}, -{90,-16,70}, -{90,-16,71}, -{90,-16,72}, -{90,-16,73}, -{90,-16,74}, -{90,-16,75}, -{90,-16,76}, -{90,-16,77}, -{90,-16,78}, -{90,-16,79}, -{90,-16,80}, -{90,-16,81}, -{90,-16,82}, -{90,-16,83}, -{90,-16,84}, -{90,-16,85}, -{90,-16,86}, -{90,-16,87}, -{90,-16,88}, -{90,-15,-15}, -{90,-15,-14}, -{90,-15,-13}, -{90,-15,-12}, -{90,-15,-11}, -{90,-15,-10}, -{90,-15,-9}, -{90,-15,-8}, -{90,-15,-7}, -{90,-15,-6}, -{90,-15,-5}, -{90,-15,-4}, -{90,-15,-3}, -{90,-15,-2}, -{90,-15,-1}, -{90,-15,0}, -{90,-15,1}, -{90,-15,2}, -{90,-15,3}, -{90,-15,4}, -{90,-15,5}, -{90,-15,6}, -{90,-15,7}, -{90,-15,8}, -{90,-15,9}, -{90,-15,10}, -{90,-15,11}, -{90,-15,12}, -{90,-15,13}, -{90,-15,14}, -{90,-15,15}, -{90,-15,16}, -{90,-15,17}, -{90,-15,18}, -{90,-15,19}, -{90,-15,20}, -{90,-15,21}, -{90,-15,22}, -{90,-15,23}, -{90,-15,24}, -{90,-15,25}, -{90,-15,26}, -{90,-15,27}, -{90,-15,28}, -{90,-15,29}, -{90,-15,30}, -{90,-15,31}, -{90,-15,32}, -{90,-15,33}, -{90,-15,34}, -{90,-15,35}, -{90,-15,36}, -{90,-15,37}, -{90,-15,38}, -{90,-15,39}, -{90,-15,40}, -{90,-15,41}, -{90,-15,42}, -{90,-15,43}, -{90,-15,44}, -{90,-15,45}, -{90,-15,46}, -{90,-15,47}, -{90,-15,48}, -{90,-15,49}, -{90,-15,50}, -{90,-15,51}, -{90,-15,52}, -{90,-15,53}, -{90,-15,54}, -{90,-15,55}, -{90,-15,56}, -{90,-15,57}, -{90,-15,58}, -{90,-15,59}, -{90,-15,60}, -{90,-15,61}, -{90,-15,62}, -{90,-15,63}, -{90,-15,64}, -{90,-15,65}, -{90,-15,66}, -{90,-15,67}, -{90,-15,68}, -{90,-15,69}, -{90,-15,70}, -{90,-15,71}, -{90,-15,72}, -{90,-15,73}, -{90,-15,74}, -{90,-15,75}, -{90,-15,76}, -{90,-15,77}, -{90,-15,78}, -{90,-15,79}, -{90,-15,80}, -{90,-15,81}, -{90,-15,82}, -{90,-15,83}, -{90,-15,84}, -{90,-15,85}, -{90,-15,86}, -{90,-15,87}, -{90,-15,88}, -{90,-15,89}, -{90,-14,-15}, -{90,-14,-14}, -{90,-14,-13}, -{90,-14,-12}, -{90,-14,-11}, -{90,-14,-10}, -{90,-14,-9}, -{90,-14,-8}, -{90,-14,-7}, -{90,-14,-6}, -{90,-14,-5}, -{90,-14,-4}, -{90,-14,-3}, -{90,-14,-2}, -{90,-14,-1}, -{90,-14,0}, -{90,-14,1}, -{90,-14,2}, -{90,-14,3}, -{90,-14,4}, -{90,-14,5}, -{90,-14,6}, -{90,-14,7}, -{90,-14,8}, -{90,-14,9}, -{90,-14,10}, -{90,-14,11}, -{90,-14,12}, -{90,-14,13}, -{90,-14,14}, -{90,-14,15}, -{90,-14,16}, -{90,-14,17}, -{90,-14,18}, -{90,-14,19}, -{90,-14,20}, -{90,-14,21}, -{90,-14,22}, -{90,-14,23}, -{90,-14,24}, -{90,-14,25}, -{90,-14,26}, -{90,-14,27}, -{90,-14,28}, -{90,-14,29}, -{90,-14,30}, -{90,-14,31}, -{90,-14,32}, -{90,-14,33}, -{90,-14,34}, -{90,-14,35}, -{90,-14,36}, -{90,-14,37}, -{90,-14,38}, -{90,-14,39}, -{90,-14,40}, -{90,-14,41}, -{90,-14,42}, -{90,-14,43}, -{90,-14,44}, -{90,-14,45}, -{90,-14,46}, -{90,-14,47}, -{90,-14,48}, -{90,-14,49}, -{90,-14,50}, -{90,-14,51}, -{90,-14,52}, -{90,-14,53}, -{90,-14,54}, -{90,-14,55}, -{90,-14,56}, -{90,-14,57}, -{90,-14,58}, -{90,-14,59}, -{90,-14,60}, -{90,-14,61}, -{90,-14,62}, -{90,-14,63}, -{90,-14,64}, -{90,-14,65}, -{90,-14,66}, -{90,-14,67}, -{90,-14,68}, -{90,-14,69}, -{90,-14,70}, -{90,-14,71}, -{90,-14,72}, -{90,-14,73}, -{90,-14,74}, -{90,-14,75}, -{90,-14,76}, -{90,-14,77}, -{90,-14,78}, -{90,-14,79}, -{90,-14,80}, -{90,-14,81}, -{90,-14,82}, -{90,-14,83}, -{90,-14,84}, -{90,-14,85}, -{90,-14,86}, -{90,-14,87}, -{90,-14,88}, -{90,-14,89}, -{90,-13,-15}, -{90,-13,-14}, -{90,-13,-13}, -{90,-13,-12}, -{90,-13,-11}, -{90,-13,-10}, -{90,-13,-9}, -{90,-13,-8}, -{90,-13,-7}, -{90,-13,-6}, -{90,-13,-5}, -{90,-13,-4}, -{90,-13,-3}, -{90,-13,-2}, -{90,-13,-1}, -{90,-13,0}, -{90,-13,1}, -{90,-13,2}, -{90,-13,3}, -{90,-13,4}, -{90,-13,5}, -{90,-13,6}, -{90,-13,7}, -{90,-13,8}, -{90,-13,9}, -{90,-13,10}, -{90,-13,11}, -{90,-13,12}, -{90,-13,13}, -{90,-13,14}, -{90,-13,15}, -{90,-13,16}, -{90,-13,17}, -{90,-13,18}, -{90,-13,19}, -{90,-13,20}, -{90,-13,21}, -{90,-13,22}, -{90,-13,23}, -{90,-13,24}, -{90,-13,25}, -{90,-13,26}, -{90,-13,27}, -{90,-13,28}, -{90,-13,29}, -{90,-13,30}, -{90,-13,31}, -{90,-13,32}, -{90,-13,33}, -{90,-13,34}, -{90,-13,35}, -{90,-13,36}, -{90,-13,37}, -{90,-13,38}, -{90,-13,39}, -{90,-13,40}, -{90,-13,41}, -{90,-13,42}, -{90,-13,43}, -{90,-13,44}, -{90,-13,45}, -{90,-13,46}, -{90,-13,47}, -{90,-13,48}, -{90,-13,49}, -{90,-13,50}, -{90,-13,51}, -{90,-13,52}, -{90,-13,53}, -{90,-13,54}, -{90,-13,55}, -{90,-13,56}, -{90,-13,57}, -{90,-13,58}, -{90,-13,59}, -{90,-13,60}, -{90,-13,61}, -{90,-13,62}, -{90,-13,63}, -{90,-13,64}, -{90,-13,65}, -{90,-13,66}, -{90,-13,67}, -{90,-13,68}, -{90,-13,69}, -{90,-13,70}, -{90,-13,71}, -{90,-13,72}, -{90,-13,73}, -{90,-13,74}, -{90,-13,75}, -{90,-13,76}, -{90,-13,77}, -{90,-13,78}, -{90,-13,79}, -{90,-13,80}, -{90,-13,81}, -{90,-13,82}, -{90,-13,83}, -{90,-13,84}, -{90,-13,85}, -{90,-13,86}, -{90,-13,87}, -{90,-13,88}, -{90,-13,89}, -{90,-12,-15}, -{90,-12,-14}, -{90,-12,-13}, -{90,-12,-12}, -{90,-12,-11}, -{90,-12,-10}, -{90,-12,-9}, -{90,-12,-8}, -{90,-12,-7}, -{90,-12,-6}, -{90,-12,-5}, -{90,-12,-4}, -{90,-12,-3}, -{90,-12,-2}, -{90,-12,-1}, -{90,-12,0}, -{90,-12,1}, -{90,-12,2}, -{90,-12,3}, -{90,-12,4}, -{90,-12,5}, -{90,-12,6}, -{90,-12,7}, -{90,-12,8}, -{90,-12,9}, -{90,-12,10}, -{90,-12,11}, -{90,-12,12}, -{90,-12,13}, -{90,-12,14}, -{90,-12,15}, -{90,-12,16}, -{90,-12,17}, -{90,-12,18}, -{90,-12,19}, -{90,-12,20}, -{90,-12,21}, -{90,-12,22}, -{90,-12,23}, -{90,-12,24}, -{90,-12,25}, -{90,-12,26}, -{90,-12,27}, -{90,-12,28}, -{90,-12,29}, -{90,-12,30}, -{90,-12,31}, -{90,-12,32}, -{90,-12,33}, -{90,-12,34}, -{90,-12,35}, -{90,-12,36}, -{90,-12,37}, -{90,-12,38}, -{90,-12,39}, -{90,-12,40}, -{90,-12,41}, -{90,-12,42}, -{90,-12,43}, -{90,-12,44}, -{90,-12,45}, -{90,-12,46}, -{90,-12,47}, -{90,-12,48}, -{90,-12,49}, -{90,-12,50}, -{90,-12,51}, -{90,-12,52}, -{90,-12,53}, -{90,-12,54}, -{90,-12,55}, -{90,-12,56}, -{90,-12,57}, -{90,-12,58}, -{90,-12,59}, -{90,-12,60}, -{90,-12,61}, -{90,-12,62}, -{90,-12,63}, -{90,-12,64}, -{90,-12,65}, -{90,-12,66}, -{90,-12,67}, -{90,-12,68}, -{90,-12,69}, -{90,-12,70}, -{90,-12,71}, -{90,-12,72}, -{90,-12,73}, -{90,-12,74}, -{90,-12,75}, -{90,-12,76}, -{90,-12,77}, -{90,-12,78}, -{90,-12,79}, -{90,-12,80}, -{90,-12,81}, -{90,-12,82}, -{90,-12,83}, -{90,-12,84}, -{90,-12,85}, -{90,-12,86}, -{90,-12,87}, -{90,-12,88}, -{90,-12,89}, -{90,-11,-15}, -{90,-11,-14}, -{90,-11,-13}, -{90,-11,-12}, -{90,-11,-11}, -{90,-11,-10}, -{90,-11,-9}, -{90,-11,-8}, -{90,-11,-7}, -{90,-11,-6}, -{90,-11,-5}, -{90,-11,-4}, -{90,-11,-3}, -{90,-11,-2}, -{90,-11,-1}, -{90,-11,0}, -{90,-11,1}, -{90,-11,2}, -{90,-11,3}, -{90,-11,4}, -{90,-11,5}, -{90,-11,6}, -{90,-11,7}, -{90,-11,8}, -{90,-11,9}, -{90,-11,10}, -{90,-11,11}, -{90,-11,12}, -{90,-11,13}, -{90,-11,14}, -{90,-11,15}, -{90,-11,16}, -{90,-11,17}, -{90,-11,18}, -{90,-11,19}, -{90,-11,20}, -{90,-11,21}, -{90,-11,22}, -{90,-11,23}, -{90,-11,24}, -{90,-11,25}, -{90,-11,26}, -{90,-11,27}, -{90,-11,28}, -{90,-11,29}, -{90,-11,30}, -{90,-11,31}, -{90,-11,32}, -{90,-11,33}, -{90,-11,34}, -{90,-11,35}, -{90,-11,36}, -{90,-11,37}, -{90,-11,38}, -{90,-11,39}, -{90,-11,40}, -{90,-11,41}, -{90,-11,42}, -{90,-11,43}, -{90,-11,44}, -{90,-11,45}, -{90,-11,46}, -{90,-11,47}, -{90,-11,48}, -{90,-11,49}, -{90,-11,50}, -{90,-11,51}, -{90,-11,52}, -{90,-11,53}, -{90,-11,54}, -{90,-11,55}, -{90,-11,56}, -{90,-11,57}, -{90,-11,58}, -{90,-11,59}, -{90,-11,60}, -{90,-11,61}, -{90,-11,62}, -{90,-11,63}, -{90,-11,64}, -{90,-11,65}, -{90,-11,66}, -{90,-11,67}, -{90,-11,68}, -{90,-11,69}, -{90,-11,70}, -{90,-11,71}, -{90,-11,72}, -{90,-11,73}, -{90,-11,74}, -{90,-11,75}, -{90,-11,76}, -{90,-11,77}, -{90,-11,78}, -{90,-11,79}, -{90,-11,80}, -{90,-11,81}, -{90,-11,82}, -{90,-11,83}, -{90,-11,84}, -{90,-11,85}, -{90,-11,86}, -{90,-11,87}, -{90,-11,88}, -{90,-11,89}, -{90,-10,-15}, -{90,-10,-14}, -{90,-10,-13}, -{90,-10,-12}, -{90,-10,-11}, -{90,-10,-10}, -{90,-10,-9}, -{90,-10,-8}, -{90,-10,-7}, -{90,-10,-6}, -{90,-10,-5}, -{90,-10,-4}, -{90,-10,-3}, -{90,-10,-2}, -{90,-10,-1}, -{90,-10,0}, -{90,-10,1}, -{90,-10,2}, -{90,-10,3}, -{90,-10,4}, -{90,-10,5}, -{90,-10,6}, -{90,-10,7}, -{90,-10,8}, -{90,-10,9}, -{90,-10,10}, -{90,-10,11}, -{90,-10,12}, -{90,-10,13}, -{90,-10,14}, -{90,-10,15}, -{90,-10,16}, -{90,-10,17}, -{90,-10,18}, -{90,-10,19}, -{90,-10,20}, -{90,-10,21}, -{90,-10,22}, -{90,-10,23}, -{90,-10,24}, -{90,-10,25}, -{90,-10,26}, -{90,-10,27}, -{90,-10,28}, -{90,-10,29}, -{90,-10,30}, -{90,-10,31}, -{90,-10,32}, -{90,-10,33}, -{90,-10,34}, -{90,-10,35}, -{90,-10,36}, -{90,-10,37}, -{90,-10,38}, -{90,-10,39}, -{90,-10,40}, -{90,-10,41}, -{90,-10,42}, -{90,-10,43}, -{90,-10,44}, -{90,-10,45}, -{90,-10,46}, -{90,-10,47}, -{90,-10,48}, -{90,-10,49}, -{90,-10,50}, -{90,-10,51}, -{90,-10,52}, -{90,-10,53}, -{90,-10,54}, -{90,-10,55}, -{90,-10,56}, -{90,-10,57}, -{90,-10,58}, -{90,-10,59}, -{90,-10,60}, -{90,-10,61}, -{90,-10,62}, -{90,-10,63}, -{90,-10,64}, -{90,-10,65}, -{90,-10,66}, -{90,-10,67}, -{90,-10,68}, -{90,-10,69}, -{90,-10,70}, -{90,-10,71}, -{90,-10,72}, -{90,-10,73}, -{90,-10,74}, -{90,-10,75}, -{90,-10,76}, -{90,-10,77}, -{90,-10,78}, -{90,-10,79}, -{90,-10,80}, -{90,-10,81}, -{90,-10,82}, -{90,-10,83}, -{90,-10,84}, -{90,-10,85}, -{90,-10,86}, -{90,-10,87}, -{90,-10,88}, -{90,-10,89}, -{90,-9,-15}, -{90,-9,-14}, -{90,-9,-13}, -{90,-9,-12}, -{90,-9,-11}, -{90,-9,-10}, -{90,-9,-9}, -{90,-9,-8}, -{90,-9,-7}, -{90,-9,-6}, -{90,-9,-5}, -{90,-9,-4}, -{90,-9,-3}, -{90,-9,-2}, -{90,-9,-1}, -{90,-9,0}, -{90,-9,1}, -{90,-9,2}, -{90,-9,3}, -{90,-9,4}, -{90,-9,5}, -{90,-9,6}, -{90,-9,7}, -{90,-9,8}, -{90,-9,9}, -{90,-9,10}, -{90,-9,11}, -{90,-9,12}, -{90,-9,13}, -{90,-9,14}, -{90,-9,15}, -{90,-9,16}, -{90,-9,17}, -{90,-9,18}, -{90,-9,19}, -{90,-9,20}, -{90,-9,21}, -{90,-9,22}, -{90,-9,23}, -{90,-9,24}, -{90,-9,25}, -{90,-9,26}, -{90,-9,27}, -{90,-9,28}, -{90,-9,29}, -{90,-9,30}, -{90,-9,31}, -{90,-9,32}, -{90,-9,33}, -{90,-9,34}, -{90,-9,35}, -{90,-9,36}, -{90,-9,37}, -{90,-9,38}, -{90,-9,39}, -{90,-9,40}, -{90,-9,41}, -{90,-9,42}, -{90,-9,43}, -{90,-9,44}, -{90,-9,45}, -{90,-9,46}, -{90,-9,47}, -{90,-9,48}, -{90,-9,49}, -{90,-9,50}, -{90,-9,51}, -{90,-9,52}, -{90,-9,53}, -{90,-9,54}, -{90,-9,55}, -{90,-9,56}, -{90,-9,57}, -{90,-9,58}, -{90,-9,59}, -{90,-9,60}, -{90,-9,61}, -{90,-9,62}, -{90,-9,63}, -{90,-9,64}, -{90,-9,65}, -{90,-9,66}, -{90,-9,67}, -{90,-9,68}, -{90,-9,69}, -{90,-9,70}, -{90,-9,71}, -{90,-9,72}, -{90,-9,73}, -{90,-9,74}, -{90,-9,75}, -{90,-9,76}, -{90,-9,77}, -{90,-9,78}, -{90,-9,79}, -{90,-9,80}, -{90,-9,81}, -{90,-9,82}, -{90,-9,83}, -{90,-9,84}, -{90,-9,85}, -{90,-9,86}, -{90,-9,87}, -{90,-9,88}, -{90,-9,89}, -{90,-8,-15}, -{90,-8,-14}, -{90,-8,-13}, -{90,-8,-12}, -{90,-8,-11}, -{90,-8,-10}, -{90,-8,-9}, -{90,-8,-8}, -{90,-8,-7}, -{90,-8,-6}, -{90,-8,-5}, -{90,-8,-4}, -{90,-8,-3}, -{90,-8,-2}, -{90,-8,-1}, -{90,-8,0}, -{90,-8,1}, -{90,-8,2}, -{90,-8,3}, -{90,-8,4}, -{90,-8,5}, -{90,-8,6}, -{90,-8,7}, -{90,-8,8}, -{90,-8,9}, -{90,-8,10}, -{90,-8,11}, -{90,-8,12}, -{90,-8,13}, -{90,-8,14}, -{90,-8,15}, -{90,-8,16}, -{90,-8,17}, -{90,-8,18}, -{90,-8,19}, -{90,-8,20}, -{90,-8,21}, -{90,-8,22}, -{90,-8,23}, -{90,-8,24}, -{90,-8,25}, -{90,-8,26}, -{90,-8,27}, -{90,-8,28}, -{90,-8,29}, -{90,-8,30}, -{90,-8,31}, -{90,-8,32}, -{90,-8,33}, -{90,-8,34}, -{90,-8,35}, -{90,-8,36}, -{90,-8,37}, -{90,-8,38}, -{90,-8,39}, -{90,-8,40}, -{90,-8,41}, -{90,-8,42}, -{90,-8,43}, -{90,-8,44}, -{90,-8,45}, -{90,-8,46}, -{90,-8,47}, -{90,-8,48}, -{90,-8,49}, -{90,-8,50}, -{90,-8,51}, -{90,-8,52}, -{90,-8,53}, -{90,-8,54}, -{90,-8,55}, -{90,-8,56}, -{90,-8,57}, -{90,-8,58}, -{90,-8,59}, -{90,-8,60}, -{90,-8,61}, -{90,-8,62}, -{90,-8,63}, -{90,-8,64}, -{90,-8,65}, -{90,-8,66}, -{90,-8,67}, -{90,-8,68}, -{90,-8,69}, -{90,-8,70}, -{90,-8,71}, -{90,-8,72}, -{90,-8,73}, -{90,-8,74}, -{90,-8,75}, -{90,-8,76}, -{90,-8,77}, -{90,-8,78}, -{90,-8,79}, -{90,-8,80}, -{90,-8,81}, -{90,-8,82}, -{90,-8,83}, -{90,-8,84}, -{90,-8,85}, -{90,-8,86}, -{90,-8,87}, -{90,-8,88}, -{90,-8,89}, -{90,-7,-15}, -{90,-7,-14}, -{90,-7,-13}, -{90,-7,-12}, -{90,-7,-11}, -{90,-7,-10}, -{90,-7,-9}, -{90,-7,-8}, -{90,-7,-7}, -{90,-7,-6}, -{90,-7,-5}, -{90,-7,-4}, -{90,-7,-3}, -{90,-7,-2}, -{90,-7,-1}, -{90,-7,0}, -{90,-7,1}, -{90,-7,2}, -{90,-7,3}, -{90,-7,4}, -{90,-7,5}, -{90,-7,6}, -{90,-7,7}, -{90,-7,8}, -{90,-7,9}, -{90,-7,10}, -{90,-7,11}, -{90,-7,12}, -{90,-7,13}, -{90,-7,14}, -{90,-7,15}, -{90,-7,16}, -{90,-7,17}, -{90,-7,18}, -{90,-7,19}, -{90,-7,20}, -{90,-7,21}, -{90,-7,22}, -{90,-7,23}, -{90,-7,24}, -{90,-7,25}, -{90,-7,26}, -{90,-7,27}, -{90,-7,28}, -{90,-7,29}, -{90,-7,30}, -{90,-7,31}, -{90,-7,32}, -{90,-7,33}, -{90,-7,34}, -{90,-7,35}, -{90,-7,36}, -{90,-7,37}, -{90,-7,38}, -{90,-7,39}, -{90,-7,40}, -{90,-7,41}, -{90,-7,42}, -{90,-7,43}, -{90,-7,44}, -{90,-7,45}, -{90,-7,46}, -{90,-7,47}, -{90,-7,48}, -{90,-7,49}, -{90,-7,50}, -{90,-7,51}, -{90,-7,52}, -{90,-7,53}, -{90,-7,54}, -{90,-7,55}, -{90,-7,56}, -{90,-7,57}, -{90,-7,58}, -{90,-7,59}, -{90,-7,60}, -{90,-7,61}, -{90,-7,62}, -{90,-7,63}, -{90,-7,64}, -{90,-7,65}, -{90,-7,66}, -{90,-7,67}, -{90,-7,68}, -{90,-7,69}, -{90,-7,70}, -{90,-7,71}, -{90,-7,72}, -{90,-7,73}, -{90,-7,74}, -{90,-7,75}, -{90,-7,76}, -{90,-7,77}, -{90,-7,78}, -{90,-7,79}, -{90,-7,80}, -{90,-7,81}, -{90,-7,82}, -{90,-6,-15}, -{90,-6,-14}, -{90,-6,-13}, -{90,-6,-12}, -{90,-6,-11}, -{90,-6,-10}, -{90,-6,-9}, -{90,-6,-8}, -{90,-6,-7}, -{90,-6,-6}, -{90,-6,-5}, -{90,-6,-4}, -{90,-6,-3}, -{90,-6,-2}, -{90,-6,-1}, -{90,-6,0}, -{90,-6,1}, -{90,-6,2}, -{90,-6,3}, -{90,-6,4}, -{90,-6,5}, -{90,-6,6}, -{90,-6,7}, -{90,-6,8}, -{90,-6,9}, -{90,-6,10}, -{90,-6,11}, -{90,-6,12}, -{90,-6,13}, -{90,-6,14}, -{90,-6,15}, -{90,-6,16}, -{90,-6,17}, -{90,-6,18}, -{90,-6,19}, -{90,-6,20}, -{90,-6,21}, -{90,-6,22}, -{90,-6,23}, -{90,-6,24}, -{90,-6,25}, -{90,-6,26}, -{90,-6,27}, -{90,-6,28}, -{90,-6,29}, -{90,-6,30}, -{90,-6,31}, -{90,-6,32}, -{90,-6,33}, -{90,-6,34}, -{90,-6,35}, -{90,-6,36}, -{90,-6,37}, -{90,-6,38}, -{90,-6,39}, -{90,-6,40}, -{90,-6,41}, -{90,-6,42}, -{90,-6,43}, -{90,-6,44}, -{90,-6,45}, -{90,-6,46}, -{90,-6,47}, -{90,-6,48}, -{90,-6,49}, -{90,-6,50}, -{90,-6,51}, -{90,-6,52}, -{90,-6,53}, -{90,-6,54}, -{90,-6,55}, -{90,-6,56}, -{90,-6,57}, -{90,-6,58}, -{90,-6,59}, -{90,-6,60}, -{90,-6,61}, -{90,-6,62}, -{90,-6,63}, -{90,-6,64}, -{90,-6,65}, -{90,-6,66}, -{90,-6,67}, -{90,-6,68}, -{90,-6,69}, -{90,-6,70}, -{90,-6,71}, -{90,-6,72}, -{90,-6,73}, -{90,-6,74}, -{90,-6,75}, -{90,-5,-15}, -{90,-5,-14}, -{90,-5,-13}, -{90,-5,-12}, -{90,-5,-11}, -{90,-5,-10}, -{90,-5,-9}, -{90,-5,-8}, -{90,-5,-7}, -{90,-5,-6}, -{90,-5,-5}, -{90,-5,-4}, -{90,-5,-3}, -{90,-5,-2}, -{90,-5,-1}, -{90,-5,0}, -{90,-5,1}, -{90,-5,2}, -{90,-5,3}, -{90,-5,4}, -{90,-5,5}, -{90,-5,6}, -{90,-5,7}, -{90,-5,8}, -{90,-5,9}, -{90,-5,10}, -{90,-5,11}, -{90,-5,12}, -{90,-5,13}, -{90,-5,14}, -{90,-5,15}, -{90,-5,16}, -{90,-5,17}, -{90,-5,18}, -{90,-5,19}, -{90,-5,20}, -{90,-5,21}, -{90,-5,22}, -{90,-5,23}, -{90,-5,24}, -{90,-5,25}, -{90,-5,26}, -{90,-5,27}, -{90,-5,28}, -{90,-5,29}, -{90,-5,30}, -{90,-5,31}, -{90,-5,32}, -{90,-5,33}, -{90,-5,34}, -{90,-5,35}, -{90,-5,36}, -{90,-5,37}, -{90,-5,38}, -{90,-5,39}, -{90,-5,40}, -{90,-5,41}, -{90,-5,42}, -{90,-5,43}, -{90,-5,44}, -{90,-5,45}, -{90,-5,46}, -{90,-5,47}, -{90,-5,48}, -{90,-5,49}, -{90,-5,50}, -{90,-5,51}, -{90,-5,52}, -{90,-5,53}, -{90,-5,54}, -{90,-5,55}, -{90,-5,56}, -{90,-5,57}, -{90,-5,58}, -{90,-5,59}, -{90,-5,60}, -{90,-5,61}, -{90,-5,62}, -{90,-5,63}, -{90,-5,64}, -{90,-5,65}, -{90,-5,66}, -{90,-5,67}, -{90,-5,68}, -{90,-5,69}, -{90,-4,-15}, -{90,-4,-14}, -{90,-4,-13}, -{90,-4,-12}, -{90,-4,-11}, -{90,-4,-10}, -{90,-4,-9}, -{90,-4,-8}, -{90,-4,-7}, -{90,-4,-6}, -{90,-4,-5}, -{90,-4,-4}, -{90,-4,-3}, -{90,-4,-2}, -{90,-4,-1}, -{90,-4,0}, -{90,-4,1}, -{90,-4,2}, -{90,-4,3}, -{90,-4,4}, -{90,-4,5}, -{90,-4,6}, -{90,-4,7}, -{90,-4,8}, -{90,-4,9}, -{90,-4,10}, -{90,-4,11}, -{90,-4,12}, -{90,-4,13}, -{90,-4,14}, -{90,-4,15}, -{90,-4,16}, -{90,-4,17}, -{90,-4,18}, -{90,-4,19}, -{90,-4,20}, -{90,-4,21}, -{90,-4,22}, -{90,-4,23}, -{90,-4,24}, -{90,-4,25}, -{90,-4,26}, -{90,-4,27}, -{90,-4,28}, -{90,-4,29}, -{90,-4,30}, -{90,-4,31}, -{90,-4,32}, -{90,-4,33}, -{90,-4,34}, -{90,-4,35}, -{90,-4,36}, -{90,-4,37}, -{90,-4,38}, -{90,-4,39}, -{90,-4,40}, -{90,-4,41}, -{90,-4,42}, -{90,-4,43}, -{90,-4,44}, -{90,-4,45}, -{90,-4,46}, -{90,-4,47}, -{90,-4,48}, -{90,-4,49}, -{90,-4,50}, -{90,-4,51}, -{90,-4,52}, -{90,-4,53}, -{90,-4,54}, -{90,-4,55}, -{90,-4,56}, -{90,-4,57}, -{90,-4,58}, -{90,-4,59}, -{90,-4,60}, -{90,-4,61}, -{90,-4,62}, -{90,-4,63}, -{90,-4,64}, -{90,-3,-15}, -{90,-3,-14}, -{90,-3,-13}, -{90,-3,-12}, -{90,-3,-11}, -{90,-3,-10}, -{90,-3,-9}, -{90,-3,-8}, -{90,-3,-7}, -{90,-3,-6}, -{90,-3,-5}, -{90,-3,-4}, -{90,-3,-3}, -{90,-3,-2}, -{90,-3,-1}, -{90,-3,0}, -{90,-3,1}, -{90,-3,2}, -{90,-3,3}, -{90,-3,4}, -{90,-3,5}, -{90,-3,6}, -{90,-3,7}, -{90,-3,8}, -{90,-3,9}, -{90,-3,10}, -{90,-3,11}, -{90,-3,12}, -{90,-3,13}, -{90,-3,14}, -{90,-3,15}, -{90,-3,16}, -{90,-3,17}, -{90,-3,18}, -{90,-3,19}, -{90,-3,20}, -{90,-3,21}, -{90,-3,22}, -{90,-3,23}, -{90,-3,24}, -{90,-3,25}, -{90,-3,26}, -{90,-3,27}, -{90,-3,28}, -{90,-3,29}, -{90,-3,30}, -{90,-3,31}, -{90,-3,32}, -{90,-3,33}, -{90,-3,34}, -{90,-3,35}, -{90,-3,36}, -{90,-3,37}, -{90,-3,38}, -{90,-3,39}, -{90,-3,40}, -{90,-3,41}, -{90,-3,42}, -{90,-3,43}, -{90,-3,44}, -{90,-3,45}, -{90,-3,46}, -{90,-3,47}, -{90,-3,48}, -{90,-3,49}, -{90,-3,50}, -{90,-3,51}, -{90,-3,52}, -{90,-3,53}, -{90,-3,54}, -{90,-3,55}, -{90,-3,56}, -{90,-3,57}, -{90,-3,58}, -{90,-3,59}, -{90,-2,-15}, -{90,-2,-14}, -{90,-2,-13}, -{90,-2,-12}, -{90,-2,-11}, -{90,-2,-10}, -{90,-2,-9}, -{90,-2,-8}, -{90,-2,-7}, -{90,-2,-6}, -{90,-2,-5}, -{90,-2,-4}, -{90,-2,-3}, -{90,-2,-2}, -{90,-2,-1}, -{90,-2,0}, -{90,-2,1}, -{90,-2,2}, -{90,-2,3}, -{90,-2,4}, -{90,-2,5}, -{90,-2,6}, -{90,-2,7}, -{90,-2,8}, -{90,-2,9}, -{90,-2,10}, -{90,-2,11}, -{90,-2,12}, -{90,-2,13}, -{90,-2,14}, -{90,-2,15}, -{90,-2,16}, -{90,-2,17}, -{90,-2,18}, -{90,-2,19}, -{90,-2,20}, -{90,-2,21}, -{90,-2,22}, -{90,-2,23}, -{90,-2,24}, -{90,-2,25}, -{90,-2,26}, -{90,-2,27}, -{90,-2,28}, -{90,-2,29}, -{90,-2,30}, -{90,-2,31}, -{90,-2,32}, -{90,-2,33}, -{90,-2,34}, -{90,-2,35}, -{90,-2,36}, -{90,-2,37}, -{90,-2,38}, -{90,-2,39}, -{90,-2,40}, -{90,-2,41}, -{90,-2,42}, -{90,-2,43}, -{90,-2,44}, -{90,-2,45}, -{90,-2,46}, -{90,-2,47}, -{90,-2,48}, -{90,-2,49}, -{90,-2,50}, -{90,-2,51}, -{90,-2,52}, -{90,-2,53}, -{90,-2,54}, -{90,-1,-15}, -{90,-1,-14}, -{90,-1,-13}, -{90,-1,-12}, -{90,-1,-11}, -{90,-1,-10}, -{90,-1,-9}, -{90,-1,-8}, -{90,-1,-7}, -{90,-1,-6}, -{90,-1,-5}, -{90,-1,-4}, -{90,-1,-3}, -{90,-1,-2}, -{90,-1,-1}, -{90,-1,0}, -{90,-1,1}, -{90,-1,2}, -{90,-1,3}, -{90,-1,4}, -{90,-1,5}, -{90,-1,6}, -{90,-1,7}, -{90,-1,8}, -{90,-1,9}, -{90,-1,10}, -{90,-1,11}, -{90,-1,12}, -{90,-1,13}, -{90,-1,14}, -{90,-1,15}, -{90,-1,16}, -{90,-1,17}, -{90,-1,18}, -{90,-1,19}, -{90,-1,20}, -{90,-1,21}, -{90,-1,22}, -{90,-1,23}, -{90,-1,24}, -{90,-1,25}, -{90,-1,26}, -{90,-1,27}, -{90,-1,28}, -{90,-1,29}, -{90,-1,30}, -{90,-1,31}, -{90,-1,32}, -{90,-1,33}, -{90,-1,34}, -{90,-1,35}, -{90,-1,36}, -{90,-1,37}, -{90,-1,38}, -{90,-1,39}, -{90,-1,40}, -{90,-1,41}, -{90,-1,42}, -{90,-1,43}, -{90,-1,44}, -{90,-1,45}, -{90,-1,46}, -{90,-1,47}, -{90,-1,48}, -{90,-1,49}, -{90,0,-15}, -{90,0,-14}, -{90,0,-13}, -{90,0,-12}, -{90,0,-11}, -{90,0,-10}, -{90,0,-9}, -{90,0,-8}, -{90,0,-7}, -{90,0,-6}, -{90,0,-5}, -{90,0,-4}, -{90,0,-3}, -{90,0,-2}, -{90,0,-1}, -{90,0,0}, -{90,0,1}, -{90,0,2}, -{90,0,3}, -{90,0,4}, -{90,0,5}, -{90,0,6}, -{90,0,7}, -{90,0,8}, -{90,0,9}, -{90,0,10}, -{90,0,11}, -{90,0,12}, -{90,0,13}, -{90,0,14}, -{90,0,15}, -{90,0,16}, -{90,0,17}, -{90,0,18}, -{90,0,19}, -{90,0,20}, -{90,0,21}, -{90,0,22}, -{90,0,23}, -{90,0,24}, -{90,0,25}, -{90,0,26}, -{90,0,27}, -{90,0,28}, -{90,0,29}, -{90,0,30}, -{90,0,31}, -{90,0,32}, -{90,0,33}, -{90,0,34}, -{90,0,35}, -{90,0,36}, -{90,0,37}, -{90,0,38}, -{90,0,39}, -{90,0,40}, -{90,0,41}, -{90,0,42}, -{90,0,43}, -{90,0,44}, -{90,0,45}, -{90,1,-15}, -{90,1,-14}, -{90,1,-13}, -{90,1,-12}, -{90,1,-11}, -{90,1,-10}, -{90,1,-9}, -{90,1,-8}, -{90,1,-7}, -{90,1,-6}, -{90,1,-5}, -{90,1,-4}, -{90,1,-3}, -{90,1,-2}, -{90,1,-1}, -{90,1,0}, -{90,1,1}, -{90,1,2}, -{90,1,3}, -{90,1,4}, -{90,1,5}, -{90,1,6}, -{90,1,7}, -{90,1,8}, -{90,1,9}, -{90,1,10}, -{90,1,11}, -{90,1,12}, -{90,1,13}, -{90,1,14}, -{90,1,15}, -{90,1,16}, -{90,1,17}, -{90,1,18}, -{90,1,19}, -{90,1,20}, -{90,1,21}, -{90,1,22}, -{90,1,23}, -{90,1,24}, -{90,1,25}, -{90,1,26}, -{90,1,27}, -{90,1,28}, -{90,1,29}, -{90,1,30}, -{90,1,31}, -{90,1,32}, -{90,1,33}, -{90,1,34}, -{90,1,35}, -{90,1,36}, -{90,1,37}, -{90,1,38}, -{90,1,39}, -{90,1,40}, -{90,1,41}, -{90,2,-15}, -{90,2,-14}, -{90,2,-13}, -{90,2,-12}, -{90,2,-11}, -{90,2,-10}, -{90,2,-9}, -{90,2,-8}, -{90,2,-7}, -{90,2,-6}, -{90,2,-5}, -{90,2,-4}, -{90,2,-3}, -{90,2,-2}, -{90,2,-1}, -{90,2,0}, -{90,2,1}, -{90,2,2}, -{90,2,3}, -{90,2,4}, -{90,2,5}, -{90,2,6}, -{90,2,7}, -{90,2,8}, -{90,2,9}, -{90,2,10}, -{90,2,11}, -{90,2,12}, -{90,2,13}, -{90,2,14}, -{90,2,15}, -{90,2,16}, -{90,2,17}, -{90,2,18}, -{90,2,19}, -{90,2,20}, -{90,2,21}, -{90,2,22}, -{90,2,23}, -{90,2,24}, -{90,2,25}, -{90,2,26}, -{90,2,27}, -{90,2,28}, -{90,2,29}, -{90,2,30}, -{90,2,31}, -{90,2,32}, -{90,2,33}, -{90,2,34}, -{90,2,35}, -{90,2,36}, -{90,2,37}, -{90,2,38}, -{90,3,-15}, -{90,3,-14}, -{90,3,-13}, -{90,3,-12}, -{90,3,-11}, -{90,3,-10}, -{90,3,-9}, -{90,3,-8}, -{90,3,-7}, -{90,3,-6}, -{90,3,-5}, -{90,3,-4}, -{90,3,-3}, -{90,3,-2}, -{90,3,-1}, -{90,3,0}, -{90,3,1}, -{90,3,2}, -{90,3,3}, -{90,3,4}, -{90,3,5}, -{90,3,6}, -{90,3,7}, -{90,3,8}, -{90,3,9}, -{90,3,10}, -{90,3,11}, -{90,3,12}, -{90,3,13}, -{90,3,14}, -{90,3,15}, -{90,3,16}, -{90,3,17}, -{90,3,18}, -{90,3,19}, -{90,3,20}, -{90,3,21}, -{90,3,22}, -{90,3,23}, -{90,3,24}, -{90,3,25}, -{90,3,26}, -{90,3,27}, -{90,3,28}, -{90,3,29}, -{90,3,30}, -{90,3,31}, -{90,3,32}, -{90,3,33}, -{90,3,34}, -{90,4,-15}, -{90,4,-14}, -{90,4,-13}, -{90,4,-12}, -{90,4,-11}, -{90,4,-10}, -{90,4,-9}, -{90,4,-8}, -{90,4,-7}, -{90,4,-6}, -{90,4,-5}, -{90,4,-4}, -{90,4,-3}, -{90,4,-2}, -{90,4,-1}, -{90,4,0}, -{90,4,1}, -{90,4,2}, -{90,4,3}, -{90,4,4}, -{90,4,5}, -{90,4,6}, -{90,4,7}, -{90,4,8}, -{90,4,9}, -{90,4,10}, -{90,4,11}, -{90,4,12}, -{90,4,13}, -{90,4,14}, -{90,4,15}, -{90,4,16}, -{90,4,17}, -{90,4,18}, -{90,4,19}, -{90,4,20}, -{90,4,21}, -{90,4,22}, -{90,4,23}, -{90,4,24}, -{90,4,25}, -{90,4,26}, -{90,4,27}, -{90,4,28}, -{90,4,29}, -{90,4,30}, -{90,4,31}, -{90,5,-15}, -{90,5,-14}, -{90,5,-13}, -{90,5,-12}, -{90,5,-11}, -{90,5,-10}, -{90,5,-9}, -{90,5,-8}, -{90,5,-7}, -{90,5,-6}, -{90,5,-5}, -{90,5,-4}, -{90,5,-3}, -{90,5,-2}, -{90,5,-1}, -{90,5,0}, -{90,5,1}, -{90,5,2}, -{90,5,3}, -{90,5,4}, -{90,5,5}, -{90,5,6}, -{90,5,7}, -{90,5,8}, -{90,5,9}, -{90,5,10}, -{90,5,11}, -{90,5,12}, -{90,5,13}, -{90,5,14}, -{90,5,15}, -{90,5,16}, -{90,5,17}, -{90,5,18}, -{90,5,19}, -{90,5,20}, -{90,5,21}, -{90,5,22}, -{90,5,23}, -{90,5,24}, -{90,5,25}, -{90,5,26}, -{90,5,27}, -{90,6,-15}, -{90,6,-14}, -{90,6,-13}, -{90,6,-12}, -{90,6,-11}, -{90,6,-10}, -{90,6,-9}, -{90,6,-8}, -{90,6,-7}, -{90,6,-6}, -{90,6,-5}, -{90,6,-4}, -{90,6,-3}, -{90,6,-2}, -{90,6,-1}, -{90,6,0}, -{90,6,1}, -{90,6,2}, -{90,6,3}, -{90,6,4}, -{90,6,5}, -{90,6,6}, -{90,6,7}, -{90,6,8}, -{90,6,9}, -{90,6,10}, -{90,6,11}, -{90,6,12}, -{90,6,13}, -{90,6,14}, -{90,6,15}, -{90,6,16}, -{90,6,17}, -{90,6,18}, -{90,6,19}, -{90,6,20}, -{90,6,21}, -{90,6,22}, -{90,6,23}, -{90,6,24}, -{90,7,-15}, -{90,7,-14}, -{90,7,-13}, -{90,7,-12}, -{90,7,-11}, -{90,7,-10}, -{90,7,-9}, -{90,7,-8}, -{90,7,-7}, -{90,7,-6}, -{90,7,-5}, -{90,7,-4}, -{90,7,-3}, -{90,7,-2}, -{90,7,-1}, -{90,7,0}, -{90,7,1}, -{90,7,2}, -{90,7,3}, -{90,7,4}, -{90,7,5}, -{90,7,6}, -{90,7,7}, -{90,7,8}, -{90,7,9}, -{90,7,10}, -{90,7,11}, -{90,7,12}, -{90,7,13}, -{90,7,14}, -{90,7,15}, -{90,7,16}, -{90,7,17}, -{90,7,18}, -{90,7,19}, -{90,7,20}, -{90,7,21}, -{90,8,-15}, -{90,8,-14}, -{90,8,-13}, -{90,8,-12}, -{90,8,-11}, -{90,8,-10}, -{90,8,-9}, -{90,8,-8}, -{90,8,-7}, -{90,8,-6}, -{90,8,-5}, -{90,8,-4}, -{90,8,-3}, -{90,8,-2}, -{90,8,-1}, -{90,8,0}, -{90,8,1}, -{90,8,2}, -{90,8,3}, -{90,8,4}, -{90,8,5}, -{90,8,6}, -{90,8,7}, -{90,8,8}, -{90,8,9}, -{90,8,10}, -{90,8,11}, -{90,8,12}, -{90,8,13}, -{90,8,14}, -{90,8,15}, -{90,8,16}, -{90,8,17}, -{90,8,18}, -{90,9,-15}, -{90,9,-14}, -{90,9,-13}, -{90,9,-12}, -{90,9,-11}, -{90,9,-10}, -{90,9,-9}, -{90,9,-8}, -{90,9,-7}, -{90,9,-6}, -{90,9,-5}, -{90,9,-4}, -{90,9,-3}, -{90,9,-2}, -{90,9,-1}, -{90,9,0}, -{90,9,1}, -{90,9,2}, -{90,9,3}, -{90,9,4}, -{90,9,5}, -{90,9,6}, -{90,9,7}, -{90,9,8}, -{90,9,9}, -{90,9,10}, -{90,9,11}, -{90,9,12}, -{90,9,13}, -{90,9,14}, -{90,9,15}, -{90,10,-15}, -{90,10,-14}, -{90,10,-13}, -{90,10,-12}, -{90,10,-11}, -{90,10,-10}, -{90,10,-9}, -{90,10,-8}, -{90,10,-7}, -{90,10,-6}, -{90,10,-5}, -{90,10,-4}, -{90,10,-3}, -{90,10,-2}, -{90,10,-1}, -{90,10,0}, -{90,10,1}, -{90,10,2}, -{90,10,3}, -{90,10,4}, -{90,10,5}, -{90,10,6}, -{90,10,7}, -{90,10,8}, -{90,10,9}, -{90,10,10}, -{90,10,11}, -{90,10,12}, -{90,10,13}, -{90,11,-15}, -{90,11,-14}, -{90,11,-13}, -{90,11,-12}, -{90,11,-11}, -{90,11,-10}, -{90,11,-9}, -{90,11,-8}, -{90,11,-7}, -{90,11,-6}, -{90,11,-5}, -{90,11,-4}, -{90,11,-3}, -{90,11,-2}, -{90,11,-1}, -{90,11,0}, -{90,11,1}, -{90,11,2}, -{90,11,3}, -{90,11,4}, -{90,11,5}, -{90,11,6}, -{90,11,7}, -{90,11,8}, -{90,11,9}, -{90,11,10}, -{90,12,-15}, -{90,12,-14}, -{90,12,-13}, -{90,12,-12}, -{90,12,-11}, -{90,12,-10}, -{90,12,-9}, -{90,12,-8}, -{90,12,-7}, -{90,12,-6}, -{90,12,-5}, -{90,12,-4}, -{90,12,-3}, -{90,12,-2}, -{90,12,-1}, -{90,12,0}, -{90,12,1}, -{90,12,2}, -{90,12,3}, -{90,12,4}, -{90,12,5}, -{90,12,6}, -{90,12,7}, -{90,13,-15}, -{90,13,-14}, -{90,13,-13}, -{90,13,-12}, -{90,13,-11}, -{90,13,-10}, -{90,13,-9}, -{90,13,-8}, -{90,13,-7}, -{90,13,-6}, -{90,13,-5}, -{90,13,-4}, -{90,13,-3}, -{90,13,-2}, -{90,13,-1}, -{90,13,0}, -{90,13,1}, -{90,13,2}, -{90,13,3}, -{90,13,4}, -{90,13,5}, -{90,14,-15}, -{90,14,-14}, -{90,14,-13}, -{90,14,-12}, -{90,14,-11}, -{90,14,-10}, -{90,14,-9}, -{90,14,-8}, -{90,14,-7}, -{90,14,-6}, -{90,14,-5}, -{90,14,-4}, -{90,14,-3}, -{90,14,-2}, -{90,14,-1}, -{90,14,0}, -{90,14,1}, -{90,14,2}, -{90,15,-15}, -{90,15,-14}, -{90,15,-13}, -{90,15,-12}, -{90,15,-11}, -{90,15,-10}, -{90,15,-9}, -{90,15,-8}, -{90,15,-7}, -{90,15,-6}, -{90,15,-5}, -{90,15,-4}, -{90,15,-3}, -{90,15,-2}, -{90,15,-1}, -{90,15,0}, -{90,16,-15}, -{90,16,-14}, -{90,16,-13}, -{90,16,-12}, -{90,16,-11}, -{90,16,-10}, -{90,16,-9}, -{90,16,-8}, -{90,16,-7}, -{90,16,-6}, -{90,16,-5}, -{90,16,-4}, -{90,16,-3}, -{90,17,-15}, -{90,17,-14}, -{90,17,-13}, -{90,17,-12}, -{90,17,-11}, -{90,17,-10}, -{90,17,-9}, -{90,17,-8}, -{90,17,-7}, -{90,17,-6}, -{90,17,-5}, -{90,18,-15}, -{90,18,-14}, -{90,18,-13}, -{90,18,-12}, -{90,18,-11}, -{90,18,-10}, -{90,18,-9}, -{90,18,-8}, -{90,18,-7}, -{90,19,-14}, -{90,19,-13}, -{90,19,-12}, -{90,19,-11}, -{90,19,-10}, -{90,20,-14}, -{90,20,-13}, -{90,20,-12}, -{90,21,-14}, -{91,-60,85}, -{91,-60,86}, -{91,-60,87}, -{91,-59,68}, -{91,-59,69}, -{91,-59,70}, -{91,-59,71}, -{91,-59,72}, -{91,-59,73}, -{91,-59,74}, -{91,-59,75}, -{91,-59,76}, -{91,-59,77}, -{91,-59,78}, -{91,-59,79}, -{91,-59,80}, -{91,-59,81}, -{91,-59,82}, -{91,-59,83}, -{91,-59,84}, -{91,-59,85}, -{91,-59,86}, -{91,-59,87}, -{91,-58,55}, -{91,-58,56}, -{91,-58,57}, -{91,-58,58}, -{91,-58,59}, -{91,-58,60}, -{91,-58,61}, -{91,-58,62}, -{91,-58,63}, -{91,-58,64}, -{91,-58,65}, -{91,-58,66}, -{91,-58,67}, -{91,-58,68}, -{91,-58,69}, -{91,-58,70}, -{91,-58,71}, -{91,-58,72}, -{91,-58,73}, -{91,-58,74}, -{91,-58,75}, -{91,-58,76}, -{91,-58,77}, -{91,-58,78}, -{91,-58,79}, -{91,-58,80}, -{91,-58,81}, -{91,-58,82}, -{91,-58,83}, -{91,-58,84}, -{91,-58,85}, -{91,-58,86}, -{91,-58,87}, -{91,-57,43}, -{91,-57,44}, -{91,-57,45}, -{91,-57,46}, -{91,-57,47}, -{91,-57,48}, -{91,-57,49}, -{91,-57,50}, -{91,-57,51}, -{91,-57,52}, -{91,-57,53}, -{91,-57,54}, -{91,-57,55}, -{91,-57,56}, -{91,-57,57}, -{91,-57,58}, -{91,-57,59}, -{91,-57,60}, -{91,-57,61}, -{91,-57,62}, -{91,-57,63}, -{91,-57,64}, -{91,-57,65}, -{91,-57,66}, -{91,-57,67}, -{91,-57,68}, -{91,-57,69}, -{91,-57,70}, -{91,-57,71}, -{91,-57,72}, -{91,-57,73}, -{91,-57,74}, -{91,-57,75}, -{91,-57,76}, -{91,-57,77}, -{91,-57,78}, -{91,-57,79}, -{91,-57,80}, -{91,-57,81}, -{91,-57,82}, -{91,-57,83}, -{91,-57,84}, -{91,-57,85}, -{91,-57,86}, -{91,-57,87}, -{91,-56,33}, -{91,-56,34}, -{91,-56,35}, -{91,-56,36}, -{91,-56,37}, -{91,-56,38}, -{91,-56,39}, -{91,-56,40}, -{91,-56,41}, -{91,-56,42}, -{91,-56,43}, -{91,-56,44}, -{91,-56,45}, -{91,-56,46}, -{91,-56,47}, -{91,-56,48}, -{91,-56,49}, -{91,-56,50}, -{91,-56,51}, -{91,-56,52}, -{91,-56,53}, -{91,-56,54}, -{91,-56,55}, -{91,-56,56}, -{91,-56,57}, -{91,-56,58}, -{91,-56,59}, -{91,-56,60}, -{91,-56,61}, -{91,-56,62}, -{91,-56,63}, -{91,-56,64}, -{91,-56,65}, -{91,-56,66}, -{91,-56,67}, -{91,-56,68}, -{91,-56,69}, -{91,-56,70}, -{91,-56,71}, -{91,-56,72}, -{91,-56,73}, -{91,-56,74}, -{91,-56,75}, -{91,-56,76}, -{91,-56,77}, -{91,-56,78}, -{91,-56,79}, -{91,-56,80}, -{91,-56,81}, -{91,-56,82}, -{91,-56,83}, -{91,-56,84}, -{91,-56,85}, -{91,-56,86}, -{91,-56,87}, -{91,-55,25}, -{91,-55,26}, -{91,-55,27}, -{91,-55,28}, -{91,-55,29}, -{91,-55,30}, -{91,-55,31}, -{91,-55,32}, -{91,-55,33}, -{91,-55,34}, -{91,-55,35}, -{91,-55,36}, -{91,-55,37}, -{91,-55,38}, -{91,-55,39}, -{91,-55,40}, -{91,-55,41}, -{91,-55,42}, -{91,-55,43}, -{91,-55,44}, -{91,-55,45}, -{91,-55,46}, -{91,-55,47}, -{91,-55,48}, -{91,-55,49}, -{91,-55,50}, -{91,-55,51}, -{91,-55,52}, -{91,-55,53}, -{91,-55,54}, -{91,-55,55}, -{91,-55,56}, -{91,-55,57}, -{91,-55,58}, -{91,-55,59}, -{91,-55,60}, -{91,-55,61}, -{91,-55,62}, -{91,-55,63}, -{91,-55,64}, -{91,-55,65}, -{91,-55,66}, -{91,-55,67}, -{91,-55,68}, -{91,-55,69}, -{91,-55,70}, -{91,-55,71}, -{91,-55,72}, -{91,-55,73}, -{91,-55,74}, -{91,-55,75}, -{91,-55,76}, -{91,-55,77}, -{91,-55,78}, -{91,-55,79}, -{91,-55,80}, -{91,-55,81}, -{91,-55,82}, -{91,-55,83}, -{91,-55,84}, -{91,-55,85}, -{91,-55,86}, -{91,-55,87}, -{91,-54,17}, -{91,-54,18}, -{91,-54,19}, -{91,-54,20}, -{91,-54,21}, -{91,-54,22}, -{91,-54,23}, -{91,-54,24}, -{91,-54,25}, -{91,-54,26}, -{91,-54,27}, -{91,-54,28}, -{91,-54,29}, -{91,-54,30}, -{91,-54,31}, -{91,-54,32}, -{91,-54,33}, -{91,-54,34}, -{91,-54,35}, -{91,-54,36}, -{91,-54,37}, -{91,-54,38}, -{91,-54,39}, -{91,-54,40}, -{91,-54,41}, -{91,-54,42}, -{91,-54,43}, -{91,-54,44}, -{91,-54,45}, -{91,-54,46}, -{91,-54,47}, -{91,-54,48}, -{91,-54,49}, -{91,-54,50}, -{91,-54,51}, -{91,-54,52}, -{91,-54,53}, -{91,-54,54}, -{91,-54,55}, -{91,-54,56}, -{91,-54,57}, -{91,-54,58}, -{91,-54,59}, -{91,-54,60}, -{91,-54,61}, -{91,-54,62}, -{91,-54,63}, -{91,-54,64}, -{91,-54,65}, -{91,-54,66}, -{91,-54,67}, -{91,-54,68}, -{91,-54,69}, -{91,-54,70}, -{91,-54,71}, -{91,-54,72}, -{91,-54,73}, -{91,-54,74}, -{91,-54,75}, -{91,-54,76}, -{91,-54,77}, -{91,-54,78}, -{91,-54,79}, -{91,-54,80}, -{91,-54,81}, -{91,-54,82}, -{91,-54,83}, -{91,-54,84}, -{91,-54,85}, -{91,-54,86}, -{91,-54,87}, -{91,-53,9}, -{91,-53,10}, -{91,-53,11}, -{91,-53,12}, -{91,-53,13}, -{91,-53,14}, -{91,-53,15}, -{91,-53,16}, -{91,-53,17}, -{91,-53,18}, -{91,-53,19}, -{91,-53,20}, -{91,-53,21}, -{91,-53,22}, -{91,-53,23}, -{91,-53,24}, -{91,-53,25}, -{91,-53,26}, -{91,-53,27}, -{91,-53,28}, -{91,-53,29}, -{91,-53,30}, -{91,-53,31}, -{91,-53,32}, -{91,-53,33}, -{91,-53,34}, -{91,-53,35}, -{91,-53,36}, -{91,-53,37}, -{91,-53,38}, -{91,-53,39}, -{91,-53,40}, -{91,-53,41}, -{91,-53,42}, -{91,-53,43}, -{91,-53,44}, -{91,-53,45}, -{91,-53,46}, -{91,-53,47}, -{91,-53,48}, -{91,-53,49}, -{91,-53,50}, -{91,-53,51}, -{91,-53,52}, -{91,-53,53}, -{91,-53,54}, -{91,-53,55}, -{91,-53,56}, -{91,-53,57}, -{91,-53,58}, -{91,-53,59}, -{91,-53,60}, -{91,-53,61}, -{91,-53,62}, -{91,-53,63}, -{91,-53,64}, -{91,-53,65}, -{91,-53,66}, -{91,-53,67}, -{91,-53,68}, -{91,-53,69}, -{91,-53,70}, -{91,-53,71}, -{91,-53,72}, -{91,-53,73}, -{91,-53,74}, -{91,-53,75}, -{91,-53,76}, -{91,-53,77}, -{91,-53,78}, -{91,-53,79}, -{91,-53,80}, -{91,-53,81}, -{91,-53,82}, -{91,-53,83}, -{91,-53,84}, -{91,-53,85}, -{91,-53,86}, -{91,-53,87}, -{91,-52,3}, -{91,-52,4}, -{91,-52,5}, -{91,-52,6}, -{91,-52,7}, -{91,-52,8}, -{91,-52,9}, -{91,-52,10}, -{91,-52,11}, -{91,-52,12}, -{91,-52,13}, -{91,-52,14}, -{91,-52,15}, -{91,-52,16}, -{91,-52,17}, -{91,-52,18}, -{91,-52,19}, -{91,-52,20}, -{91,-52,21}, -{91,-52,22}, -{91,-52,23}, -{91,-52,24}, -{91,-52,25}, -{91,-52,26}, -{91,-52,27}, -{91,-52,28}, -{91,-52,29}, -{91,-52,30}, -{91,-52,31}, -{91,-52,32}, -{91,-52,33}, -{91,-52,34}, -{91,-52,35}, -{91,-52,36}, -{91,-52,37}, -{91,-52,38}, -{91,-52,39}, -{91,-52,40}, -{91,-52,41}, -{91,-52,42}, -{91,-52,43}, -{91,-52,44}, -{91,-52,45}, -{91,-52,46}, -{91,-52,47}, -{91,-52,48}, -{91,-52,49}, -{91,-52,50}, -{91,-52,51}, -{91,-52,52}, -{91,-52,53}, -{91,-52,54}, -{91,-52,55}, -{91,-52,56}, -{91,-52,57}, -{91,-52,58}, -{91,-52,59}, -{91,-52,60}, -{91,-52,61}, -{91,-52,62}, -{91,-52,63}, -{91,-52,64}, -{91,-52,65}, -{91,-52,66}, -{91,-52,67}, -{91,-52,68}, -{91,-52,69}, -{91,-52,70}, -{91,-52,71}, -{91,-52,72}, -{91,-52,73}, -{91,-52,74}, -{91,-52,75}, -{91,-52,76}, -{91,-52,77}, -{91,-52,78}, -{91,-52,79}, -{91,-52,80}, -{91,-52,81}, -{91,-52,82}, -{91,-52,83}, -{91,-52,84}, -{91,-52,85}, -{91,-52,86}, -{91,-52,87}, -{91,-51,-4}, -{91,-51,-3}, -{91,-51,-2}, -{91,-51,-1}, -{91,-51,0}, -{91,-51,1}, -{91,-51,2}, -{91,-51,3}, -{91,-51,4}, -{91,-51,5}, -{91,-51,6}, -{91,-51,7}, -{91,-51,8}, -{91,-51,9}, -{91,-51,10}, -{91,-51,11}, -{91,-51,12}, -{91,-51,13}, -{91,-51,14}, -{91,-51,15}, -{91,-51,16}, -{91,-51,17}, -{91,-51,18}, -{91,-51,19}, -{91,-51,20}, -{91,-51,21}, -{91,-51,22}, -{91,-51,23}, -{91,-51,24}, -{91,-51,25}, -{91,-51,26}, -{91,-51,27}, -{91,-51,28}, -{91,-51,29}, -{91,-51,30}, -{91,-51,31}, -{91,-51,32}, -{91,-51,33}, -{91,-51,34}, -{91,-51,35}, -{91,-51,36}, -{91,-51,37}, -{91,-51,38}, -{91,-51,39}, -{91,-51,40}, -{91,-51,41}, -{91,-51,42}, -{91,-51,43}, -{91,-51,44}, -{91,-51,45}, -{91,-51,46}, -{91,-51,47}, -{91,-51,48}, -{91,-51,49}, -{91,-51,50}, -{91,-51,51}, -{91,-51,52}, -{91,-51,53}, -{91,-51,54}, -{91,-51,55}, -{91,-51,56}, -{91,-51,57}, -{91,-51,58}, -{91,-51,59}, -{91,-51,60}, -{91,-51,61}, -{91,-51,62}, -{91,-51,63}, -{91,-51,64}, -{91,-51,65}, -{91,-51,66}, -{91,-51,67}, -{91,-51,68}, -{91,-51,69}, -{91,-51,70}, -{91,-51,71}, -{91,-51,72}, -{91,-51,73}, -{91,-51,74}, -{91,-51,75}, -{91,-51,76}, -{91,-51,77}, -{91,-51,78}, -{91,-51,79}, -{91,-51,80}, -{91,-51,81}, -{91,-51,82}, -{91,-51,83}, -{91,-51,84}, -{91,-51,85}, -{91,-51,86}, -{91,-51,87}, -{91,-50,-10}, -{91,-50,-9}, -{91,-50,-8}, -{91,-50,-7}, -{91,-50,-6}, -{91,-50,-5}, -{91,-50,-4}, -{91,-50,-3}, -{91,-50,-2}, -{91,-50,-1}, -{91,-50,0}, -{91,-50,1}, -{91,-50,2}, -{91,-50,3}, -{91,-50,4}, -{91,-50,5}, -{91,-50,6}, -{91,-50,7}, -{91,-50,8}, -{91,-50,9}, -{91,-50,10}, -{91,-50,11}, -{91,-50,12}, -{91,-50,13}, -{91,-50,14}, -{91,-50,15}, -{91,-50,16}, -{91,-50,17}, -{91,-50,18}, -{91,-50,19}, -{91,-50,20}, -{91,-50,21}, -{91,-50,22}, -{91,-50,23}, -{91,-50,24}, -{91,-50,25}, -{91,-50,26}, -{91,-50,27}, -{91,-50,28}, -{91,-50,29}, -{91,-50,30}, -{91,-50,31}, -{91,-50,32}, -{91,-50,33}, -{91,-50,34}, -{91,-50,35}, -{91,-50,36}, -{91,-50,37}, -{91,-50,38}, -{91,-50,39}, -{91,-50,40}, -{91,-50,41}, -{91,-50,42}, -{91,-50,43}, -{91,-50,44}, -{91,-50,45}, -{91,-50,46}, -{91,-50,47}, -{91,-50,48}, -{91,-50,49}, -{91,-50,50}, -{91,-50,51}, -{91,-50,52}, -{91,-50,53}, -{91,-50,54}, -{91,-50,55}, -{91,-50,56}, -{91,-50,57}, -{91,-50,58}, -{91,-50,59}, -{91,-50,60}, -{91,-50,61}, -{91,-50,62}, -{91,-50,63}, -{91,-50,64}, -{91,-50,65}, -{91,-50,66}, -{91,-50,67}, -{91,-50,68}, -{91,-50,69}, -{91,-50,70}, -{91,-50,71}, -{91,-50,72}, -{91,-50,73}, -{91,-50,74}, -{91,-50,75}, -{91,-50,76}, -{91,-50,77}, -{91,-50,78}, -{91,-50,79}, -{91,-50,80}, -{91,-50,81}, -{91,-50,82}, -{91,-50,83}, -{91,-50,84}, -{91,-50,85}, -{91,-50,86}, -{91,-50,87}, -{91,-49,-12}, -{91,-49,-11}, -{91,-49,-10}, -{91,-49,-9}, -{91,-49,-8}, -{91,-49,-7}, -{91,-49,-6}, -{91,-49,-5}, -{91,-49,-4}, -{91,-49,-3}, -{91,-49,-2}, -{91,-49,-1}, -{91,-49,0}, -{91,-49,1}, -{91,-49,2}, -{91,-49,3}, -{91,-49,4}, -{91,-49,5}, -{91,-49,6}, -{91,-49,7}, -{91,-49,8}, -{91,-49,9}, -{91,-49,10}, -{91,-49,11}, -{91,-49,12}, -{91,-49,13}, -{91,-49,14}, -{91,-49,15}, -{91,-49,16}, -{91,-49,17}, -{91,-49,18}, -{91,-49,19}, -{91,-49,20}, -{91,-49,21}, -{91,-49,22}, -{91,-49,23}, -{91,-49,24}, -{91,-49,25}, -{91,-49,26}, -{91,-49,27}, -{91,-49,28}, -{91,-49,29}, -{91,-49,30}, -{91,-49,31}, -{91,-49,32}, -{91,-49,33}, -{91,-49,34}, -{91,-49,35}, -{91,-49,36}, -{91,-49,37}, -{91,-49,38}, -{91,-49,39}, -{91,-49,40}, -{91,-49,41}, -{91,-49,42}, -{91,-49,43}, -{91,-49,44}, -{91,-49,45}, -{91,-49,46}, -{91,-49,47}, -{91,-49,48}, -{91,-49,49}, -{91,-49,50}, -{91,-49,51}, -{91,-49,52}, -{91,-49,53}, -{91,-49,54}, -{91,-49,55}, -{91,-49,56}, -{91,-49,57}, -{91,-49,58}, -{91,-49,59}, -{91,-49,60}, -{91,-49,61}, -{91,-49,62}, -{91,-49,63}, -{91,-49,64}, -{91,-49,65}, -{91,-49,66}, -{91,-49,67}, -{91,-49,68}, -{91,-49,69}, -{91,-49,70}, -{91,-49,71}, -{91,-49,72}, -{91,-49,73}, -{91,-49,74}, -{91,-49,75}, -{91,-49,76}, -{91,-49,77}, -{91,-49,78}, -{91,-49,79}, -{91,-49,80}, -{91,-49,81}, -{91,-49,82}, -{91,-49,83}, -{91,-49,84}, -{91,-49,85}, -{91,-49,86}, -{91,-49,87}, -{91,-48,-14}, -{91,-48,-13}, -{91,-48,-12}, -{91,-48,-11}, -{91,-48,-10}, -{91,-48,-9}, -{91,-48,-8}, -{91,-48,-7}, -{91,-48,-6}, -{91,-48,-5}, -{91,-48,-4}, -{91,-48,-3}, -{91,-48,-2}, -{91,-48,-1}, -{91,-48,0}, -{91,-48,1}, -{91,-48,2}, -{91,-48,3}, -{91,-48,4}, -{91,-48,5}, -{91,-48,6}, -{91,-48,7}, -{91,-48,8}, -{91,-48,9}, -{91,-48,10}, -{91,-48,11}, -{91,-48,12}, -{91,-48,13}, -{91,-48,14}, -{91,-48,15}, -{91,-48,16}, -{91,-48,17}, -{91,-48,18}, -{91,-48,19}, -{91,-48,20}, -{91,-48,21}, -{91,-48,22}, -{91,-48,23}, -{91,-48,24}, -{91,-48,25}, -{91,-48,26}, -{91,-48,27}, -{91,-48,28}, -{91,-48,29}, -{91,-48,30}, -{91,-48,31}, -{91,-48,32}, -{91,-48,33}, -{91,-48,34}, -{91,-48,35}, -{91,-48,36}, -{91,-48,37}, -{91,-48,38}, -{91,-48,39}, -{91,-48,40}, -{91,-48,41}, -{91,-48,42}, -{91,-48,43}, -{91,-48,44}, -{91,-48,45}, -{91,-48,46}, -{91,-48,47}, -{91,-48,48}, -{91,-48,49}, -{91,-48,50}, -{91,-48,51}, -{91,-48,52}, -{91,-48,53}, -{91,-48,54}, -{91,-48,55}, -{91,-48,56}, -{91,-48,57}, -{91,-48,58}, -{91,-48,59}, -{91,-48,60}, -{91,-48,61}, -{91,-48,62}, -{91,-48,63}, -{91,-48,64}, -{91,-48,65}, -{91,-48,66}, -{91,-48,67}, -{91,-48,68}, -{91,-48,69}, -{91,-48,70}, -{91,-48,71}, -{91,-48,72}, -{91,-48,73}, -{91,-48,74}, -{91,-48,75}, -{91,-48,76}, -{91,-48,77}, -{91,-48,78}, -{91,-48,79}, -{91,-48,80}, -{91,-48,81}, -{91,-48,82}, -{91,-48,83}, -{91,-48,84}, -{91,-48,85}, -{91,-48,86}, -{91,-48,87}, -{91,-47,-14}, -{91,-47,-13}, -{91,-47,-12}, -{91,-47,-11}, -{91,-47,-10}, -{91,-47,-9}, -{91,-47,-8}, -{91,-47,-7}, -{91,-47,-6}, -{91,-47,-5}, -{91,-47,-4}, -{91,-47,-3}, -{91,-47,-2}, -{91,-47,-1}, -{91,-47,0}, -{91,-47,1}, -{91,-47,2}, -{91,-47,3}, -{91,-47,4}, -{91,-47,5}, -{91,-47,6}, -{91,-47,7}, -{91,-47,8}, -{91,-47,9}, -{91,-47,10}, -{91,-47,11}, -{91,-47,12}, -{91,-47,13}, -{91,-47,14}, -{91,-47,15}, -{91,-47,16}, -{91,-47,17}, -{91,-47,18}, -{91,-47,19}, -{91,-47,20}, -{91,-47,21}, -{91,-47,22}, -{91,-47,23}, -{91,-47,24}, -{91,-47,25}, -{91,-47,26}, -{91,-47,27}, -{91,-47,28}, -{91,-47,29}, -{91,-47,30}, -{91,-47,31}, -{91,-47,32}, -{91,-47,33}, -{91,-47,34}, -{91,-47,35}, -{91,-47,36}, -{91,-47,37}, -{91,-47,38}, -{91,-47,39}, -{91,-47,40}, -{91,-47,41}, -{91,-47,42}, -{91,-47,43}, -{91,-47,44}, -{91,-47,45}, -{91,-47,46}, -{91,-47,47}, -{91,-47,48}, -{91,-47,49}, -{91,-47,50}, -{91,-47,51}, -{91,-47,52}, -{91,-47,53}, -{91,-47,54}, -{91,-47,55}, -{91,-47,56}, -{91,-47,57}, -{91,-47,58}, -{91,-47,59}, -{91,-47,60}, -{91,-47,61}, -{91,-47,62}, -{91,-47,63}, -{91,-47,64}, -{91,-47,65}, -{91,-47,66}, -{91,-47,67}, -{91,-47,68}, -{91,-47,69}, -{91,-47,70}, -{91,-47,71}, -{91,-47,72}, -{91,-47,73}, -{91,-47,74}, -{91,-47,75}, -{91,-47,76}, -{91,-47,77}, -{91,-47,78}, -{91,-47,79}, -{91,-47,80}, -{91,-47,81}, -{91,-47,82}, -{91,-47,83}, -{91,-47,84}, -{91,-47,85}, -{91,-47,86}, -{91,-47,87}, -{91,-46,-14}, -{91,-46,-13}, -{91,-46,-12}, -{91,-46,-11}, -{91,-46,-10}, -{91,-46,-9}, -{91,-46,-8}, -{91,-46,-7}, -{91,-46,-6}, -{91,-46,-5}, -{91,-46,-4}, -{91,-46,-3}, -{91,-46,-2}, -{91,-46,-1}, -{91,-46,0}, -{91,-46,1}, -{91,-46,2}, -{91,-46,3}, -{91,-46,4}, -{91,-46,5}, -{91,-46,6}, -{91,-46,7}, -{91,-46,8}, -{91,-46,9}, -{91,-46,10}, -{91,-46,11}, -{91,-46,12}, -{91,-46,13}, -{91,-46,14}, -{91,-46,15}, -{91,-46,16}, -{91,-46,17}, -{91,-46,18}, -{91,-46,19}, -{91,-46,20}, -{91,-46,21}, -{91,-46,22}, -{91,-46,23}, -{91,-46,24}, -{91,-46,25}, -{91,-46,26}, -{91,-46,27}, -{91,-46,28}, -{91,-46,29}, -{91,-46,30}, -{91,-46,31}, -{91,-46,32}, -{91,-46,33}, -{91,-46,34}, -{91,-46,35}, -{91,-46,36}, -{91,-46,37}, -{91,-46,38}, -{91,-46,39}, -{91,-46,40}, -{91,-46,41}, -{91,-46,42}, -{91,-46,43}, -{91,-46,44}, -{91,-46,45}, -{91,-46,46}, -{91,-46,47}, -{91,-46,48}, -{91,-46,49}, -{91,-46,50}, -{91,-46,51}, -{91,-46,52}, -{91,-46,53}, -{91,-46,54}, -{91,-46,55}, -{91,-46,56}, -{91,-46,57}, -{91,-46,58}, -{91,-46,59}, -{91,-46,60}, -{91,-46,61}, -{91,-46,62}, -{91,-46,63}, -{91,-46,64}, -{91,-46,65}, -{91,-46,66}, -{91,-46,67}, -{91,-46,68}, -{91,-46,69}, -{91,-46,70}, -{91,-46,71}, -{91,-46,72}, -{91,-46,73}, -{91,-46,74}, -{91,-46,75}, -{91,-46,76}, -{91,-46,77}, -{91,-46,78}, -{91,-46,79}, -{91,-46,80}, -{91,-46,81}, -{91,-46,82}, -{91,-46,83}, -{91,-46,84}, -{91,-46,85}, -{91,-46,86}, -{91,-46,87}, -{91,-46,88}, -{91,-45,-14}, -{91,-45,-13}, -{91,-45,-12}, -{91,-45,-11}, -{91,-45,-10}, -{91,-45,-9}, -{91,-45,-8}, -{91,-45,-7}, -{91,-45,-6}, -{91,-45,-5}, -{91,-45,-4}, -{91,-45,-3}, -{91,-45,-2}, -{91,-45,-1}, -{91,-45,0}, -{91,-45,1}, -{91,-45,2}, -{91,-45,3}, -{91,-45,4}, -{91,-45,5}, -{91,-45,6}, -{91,-45,7}, -{91,-45,8}, -{91,-45,9}, -{91,-45,10}, -{91,-45,11}, -{91,-45,12}, -{91,-45,13}, -{91,-45,14}, -{91,-45,15}, -{91,-45,16}, -{91,-45,17}, -{91,-45,18}, -{91,-45,19}, -{91,-45,20}, -{91,-45,21}, -{91,-45,22}, -{91,-45,23}, -{91,-45,24}, -{91,-45,25}, -{91,-45,26}, -{91,-45,27}, -{91,-45,28}, -{91,-45,29}, -{91,-45,30}, -{91,-45,31}, -{91,-45,32}, -{91,-45,33}, -{91,-45,34}, -{91,-45,35}, -{91,-45,36}, -{91,-45,37}, -{91,-45,38}, -{91,-45,39}, -{91,-45,40}, -{91,-45,41}, -{91,-45,42}, -{91,-45,43}, -{91,-45,44}, -{91,-45,45}, -{91,-45,46}, -{91,-45,47}, -{91,-45,48}, -{91,-45,49}, -{91,-45,50}, -{91,-45,51}, -{91,-45,52}, -{91,-45,53}, -{91,-45,54}, -{91,-45,55}, -{91,-45,56}, -{91,-45,57}, -{91,-45,58}, -{91,-45,59}, -{91,-45,60}, -{91,-45,61}, -{91,-45,62}, -{91,-45,63}, -{91,-45,64}, -{91,-45,65}, -{91,-45,66}, -{91,-45,67}, -{91,-45,68}, -{91,-45,69}, -{91,-45,70}, -{91,-45,71}, -{91,-45,72}, -{91,-45,73}, -{91,-45,74}, -{91,-45,75}, -{91,-45,76}, -{91,-45,77}, -{91,-45,78}, -{91,-45,79}, -{91,-45,80}, -{91,-45,81}, -{91,-45,82}, -{91,-45,83}, -{91,-45,84}, -{91,-45,85}, -{91,-45,86}, -{91,-45,87}, -{91,-45,88}, -{91,-44,-14}, -{91,-44,-13}, -{91,-44,-12}, -{91,-44,-11}, -{91,-44,-10}, -{91,-44,-9}, -{91,-44,-8}, -{91,-44,-7}, -{91,-44,-6}, -{91,-44,-5}, -{91,-44,-4}, -{91,-44,-3}, -{91,-44,-2}, -{91,-44,-1}, -{91,-44,0}, -{91,-44,1}, -{91,-44,2}, -{91,-44,3}, -{91,-44,4}, -{91,-44,5}, -{91,-44,6}, -{91,-44,7}, -{91,-44,8}, -{91,-44,9}, -{91,-44,10}, -{91,-44,11}, -{91,-44,12}, -{91,-44,13}, -{91,-44,14}, -{91,-44,15}, -{91,-44,16}, -{91,-44,17}, -{91,-44,18}, -{91,-44,19}, -{91,-44,20}, -{91,-44,21}, -{91,-44,22}, -{91,-44,23}, -{91,-44,24}, -{91,-44,25}, -{91,-44,26}, -{91,-44,27}, -{91,-44,28}, -{91,-44,29}, -{91,-44,30}, -{91,-44,31}, -{91,-44,32}, -{91,-44,33}, -{91,-44,34}, -{91,-44,35}, -{91,-44,36}, -{91,-44,37}, -{91,-44,38}, -{91,-44,39}, -{91,-44,40}, -{91,-44,41}, -{91,-44,42}, -{91,-44,43}, -{91,-44,44}, -{91,-44,45}, -{91,-44,46}, -{91,-44,47}, -{91,-44,48}, -{91,-44,49}, -{91,-44,50}, -{91,-44,51}, -{91,-44,52}, -{91,-44,53}, -{91,-44,54}, -{91,-44,55}, -{91,-44,56}, -{91,-44,57}, -{91,-44,58}, -{91,-44,59}, -{91,-44,60}, -{91,-44,61}, -{91,-44,62}, -{91,-44,63}, -{91,-44,64}, -{91,-44,65}, -{91,-44,66}, -{91,-44,67}, -{91,-44,68}, -{91,-44,69}, -{91,-44,70}, -{91,-44,71}, -{91,-44,72}, -{91,-44,73}, -{91,-44,74}, -{91,-44,75}, -{91,-44,76}, -{91,-44,77}, -{91,-44,78}, -{91,-44,79}, -{91,-44,80}, -{91,-44,81}, -{91,-44,82}, -{91,-44,83}, -{91,-44,84}, -{91,-44,85}, -{91,-44,86}, -{91,-44,87}, -{91,-44,88}, -{91,-43,-14}, -{91,-43,-13}, -{91,-43,-12}, -{91,-43,-11}, -{91,-43,-10}, -{91,-43,-9}, -{91,-43,-8}, -{91,-43,-7}, -{91,-43,-6}, -{91,-43,-5}, -{91,-43,-4}, -{91,-43,-3}, -{91,-43,-2}, -{91,-43,-1}, -{91,-43,0}, -{91,-43,1}, -{91,-43,2}, -{91,-43,3}, -{91,-43,4}, -{91,-43,5}, -{91,-43,6}, -{91,-43,7}, -{91,-43,8}, -{91,-43,9}, -{91,-43,10}, -{91,-43,11}, -{91,-43,12}, -{91,-43,13}, -{91,-43,14}, -{91,-43,15}, -{91,-43,16}, -{91,-43,17}, -{91,-43,18}, -{91,-43,19}, -{91,-43,20}, -{91,-43,21}, -{91,-43,22}, -{91,-43,23}, -{91,-43,24}, -{91,-43,25}, -{91,-43,26}, -{91,-43,27}, -{91,-43,28}, -{91,-43,29}, -{91,-43,30}, -{91,-43,31}, -{91,-43,32}, -{91,-43,33}, -{91,-43,34}, -{91,-43,35}, -{91,-43,36}, -{91,-43,37}, -{91,-43,38}, -{91,-43,39}, -{91,-43,40}, -{91,-43,41}, -{91,-43,42}, -{91,-43,43}, -{91,-43,44}, -{91,-43,45}, -{91,-43,46}, -{91,-43,47}, -{91,-43,48}, -{91,-43,49}, -{91,-43,50}, -{91,-43,51}, -{91,-43,52}, -{91,-43,53}, -{91,-43,54}, -{91,-43,55}, -{91,-43,56}, -{91,-43,57}, -{91,-43,58}, -{91,-43,59}, -{91,-43,60}, -{91,-43,61}, -{91,-43,62}, -{91,-43,63}, -{91,-43,64}, -{91,-43,65}, -{91,-43,66}, -{91,-43,67}, -{91,-43,68}, -{91,-43,69}, -{91,-43,70}, -{91,-43,71}, -{91,-43,72}, -{91,-43,73}, -{91,-43,74}, -{91,-43,75}, -{91,-43,76}, -{91,-43,77}, -{91,-43,78}, -{91,-43,79}, -{91,-43,80}, -{91,-43,81}, -{91,-43,82}, -{91,-43,83}, -{91,-43,84}, -{91,-43,85}, -{91,-43,86}, -{91,-43,87}, -{91,-43,88}, -{91,-42,-14}, -{91,-42,-13}, -{91,-42,-12}, -{91,-42,-11}, -{91,-42,-10}, -{91,-42,-9}, -{91,-42,-8}, -{91,-42,-7}, -{91,-42,-6}, -{91,-42,-5}, -{91,-42,-4}, -{91,-42,-3}, -{91,-42,-2}, -{91,-42,-1}, -{91,-42,0}, -{91,-42,1}, -{91,-42,2}, -{91,-42,3}, -{91,-42,4}, -{91,-42,5}, -{91,-42,6}, -{91,-42,7}, -{91,-42,8}, -{91,-42,9}, -{91,-42,10}, -{91,-42,11}, -{91,-42,12}, -{91,-42,13}, -{91,-42,14}, -{91,-42,15}, -{91,-42,16}, -{91,-42,17}, -{91,-42,18}, -{91,-42,19}, -{91,-42,20}, -{91,-42,21}, -{91,-42,22}, -{91,-42,23}, -{91,-42,24}, -{91,-42,25}, -{91,-42,26}, -{91,-42,27}, -{91,-42,28}, -{91,-42,29}, -{91,-42,30}, -{91,-42,31}, -{91,-42,32}, -{91,-42,33}, -{91,-42,34}, -{91,-42,35}, -{91,-42,36}, -{91,-42,37}, -{91,-42,38}, -{91,-42,39}, -{91,-42,40}, -{91,-42,41}, -{91,-42,42}, -{91,-42,43}, -{91,-42,44}, -{91,-42,45}, -{91,-42,46}, -{91,-42,47}, -{91,-42,48}, -{91,-42,49}, -{91,-42,50}, -{91,-42,51}, -{91,-42,52}, -{91,-42,53}, -{91,-42,54}, -{91,-42,55}, -{91,-42,56}, -{91,-42,57}, -{91,-42,58}, -{91,-42,59}, -{91,-42,60}, -{91,-42,61}, -{91,-42,62}, -{91,-42,63}, -{91,-42,64}, -{91,-42,65}, -{91,-42,66}, -{91,-42,67}, -{91,-42,68}, -{91,-42,69}, -{91,-42,70}, -{91,-42,71}, -{91,-42,72}, -{91,-42,73}, -{91,-42,74}, -{91,-42,75}, -{91,-42,76}, -{91,-42,77}, -{91,-42,78}, -{91,-42,79}, -{91,-42,80}, -{91,-42,81}, -{91,-42,82}, -{91,-42,83}, -{91,-42,84}, -{91,-42,85}, -{91,-42,86}, -{91,-42,87}, -{91,-42,88}, -{91,-41,-14}, -{91,-41,-13}, -{91,-41,-12}, -{91,-41,-11}, -{91,-41,-10}, -{91,-41,-9}, -{91,-41,-8}, -{91,-41,-7}, -{91,-41,-6}, -{91,-41,-5}, -{91,-41,-4}, -{91,-41,-3}, -{91,-41,-2}, -{91,-41,-1}, -{91,-41,0}, -{91,-41,1}, -{91,-41,2}, -{91,-41,3}, -{91,-41,4}, -{91,-41,5}, -{91,-41,6}, -{91,-41,7}, -{91,-41,8}, -{91,-41,9}, -{91,-41,10}, -{91,-41,11}, -{91,-41,12}, -{91,-41,13}, -{91,-41,14}, -{91,-41,15}, -{91,-41,16}, -{91,-41,17}, -{91,-41,18}, -{91,-41,19}, -{91,-41,20}, -{91,-41,21}, -{91,-41,22}, -{91,-41,23}, -{91,-41,24}, -{91,-41,25}, -{91,-41,26}, -{91,-41,27}, -{91,-41,28}, -{91,-41,29}, -{91,-41,30}, -{91,-41,31}, -{91,-41,32}, -{91,-41,33}, -{91,-41,34}, -{91,-41,35}, -{91,-41,36}, -{91,-41,37}, -{91,-41,38}, -{91,-41,39}, -{91,-41,40}, -{91,-41,41}, -{91,-41,42}, -{91,-41,43}, -{91,-41,44}, -{91,-41,45}, -{91,-41,46}, -{91,-41,47}, -{91,-41,48}, -{91,-41,49}, -{91,-41,50}, -{91,-41,51}, -{91,-41,52}, -{91,-41,53}, -{91,-41,54}, -{91,-41,55}, -{91,-41,56}, -{91,-41,57}, -{91,-41,58}, -{91,-41,59}, -{91,-41,60}, -{91,-41,61}, -{91,-41,62}, -{91,-41,63}, -{91,-41,64}, -{91,-41,65}, -{91,-41,66}, -{91,-41,67}, -{91,-41,68}, -{91,-41,69}, -{91,-41,70}, -{91,-41,71}, -{91,-41,72}, -{91,-41,73}, -{91,-41,74}, -{91,-41,75}, -{91,-41,76}, -{91,-41,77}, -{91,-41,78}, -{91,-41,79}, -{91,-41,80}, -{91,-41,81}, -{91,-41,82}, -{91,-41,83}, -{91,-41,84}, -{91,-41,85}, -{91,-41,86}, -{91,-41,87}, -{91,-41,88}, -{91,-40,-14}, -{91,-40,-13}, -{91,-40,-12}, -{91,-40,-11}, -{91,-40,-10}, -{91,-40,-9}, -{91,-40,-8}, -{91,-40,-7}, -{91,-40,-6}, -{91,-40,-5}, -{91,-40,-4}, -{91,-40,-3}, -{91,-40,-2}, -{91,-40,-1}, -{91,-40,0}, -{91,-40,1}, -{91,-40,2}, -{91,-40,3}, -{91,-40,4}, -{91,-40,5}, -{91,-40,6}, -{91,-40,7}, -{91,-40,8}, -{91,-40,9}, -{91,-40,10}, -{91,-40,11}, -{91,-40,12}, -{91,-40,13}, -{91,-40,14}, -{91,-40,15}, -{91,-40,16}, -{91,-40,17}, -{91,-40,18}, -{91,-40,19}, -{91,-40,20}, -{91,-40,21}, -{91,-40,22}, -{91,-40,23}, -{91,-40,24}, -{91,-40,25}, -{91,-40,26}, -{91,-40,27}, -{91,-40,28}, -{91,-40,29}, -{91,-40,30}, -{91,-40,31}, -{91,-40,32}, -{91,-40,33}, -{91,-40,34}, -{91,-40,35}, -{91,-40,36}, -{91,-40,37}, -{91,-40,38}, -{91,-40,39}, -{91,-40,40}, -{91,-40,41}, -{91,-40,42}, -{91,-40,43}, -{91,-40,44}, -{91,-40,45}, -{91,-40,46}, -{91,-40,47}, -{91,-40,48}, -{91,-40,49}, -{91,-40,50}, -{91,-40,51}, -{91,-40,52}, -{91,-40,53}, -{91,-40,54}, -{91,-40,55}, -{91,-40,56}, -{91,-40,57}, -{91,-40,58}, -{91,-40,59}, -{91,-40,60}, -{91,-40,61}, -{91,-40,62}, -{91,-40,63}, -{91,-40,64}, -{91,-40,65}, -{91,-40,66}, -{91,-40,67}, -{91,-40,68}, -{91,-40,69}, -{91,-40,70}, -{91,-40,71}, -{91,-40,72}, -{91,-40,73}, -{91,-40,74}, -{91,-40,75}, -{91,-40,76}, -{91,-40,77}, -{91,-40,78}, -{91,-40,79}, -{91,-40,80}, -{91,-40,81}, -{91,-40,82}, -{91,-40,83}, -{91,-40,84}, -{91,-40,85}, -{91,-40,86}, -{91,-40,87}, -{91,-40,88}, -{91,-39,-14}, -{91,-39,-13}, -{91,-39,-12}, -{91,-39,-11}, -{91,-39,-10}, -{91,-39,-9}, -{91,-39,-8}, -{91,-39,-7}, -{91,-39,-6}, -{91,-39,-5}, -{91,-39,-4}, -{91,-39,-3}, -{91,-39,-2}, -{91,-39,-1}, -{91,-39,0}, -{91,-39,1}, -{91,-39,2}, -{91,-39,3}, -{91,-39,4}, -{91,-39,5}, -{91,-39,6}, -{91,-39,7}, -{91,-39,8}, -{91,-39,9}, -{91,-39,10}, -{91,-39,11}, -{91,-39,12}, -{91,-39,13}, -{91,-39,14}, -{91,-39,15}, -{91,-39,16}, -{91,-39,17}, -{91,-39,18}, -{91,-39,19}, -{91,-39,20}, -{91,-39,21}, -{91,-39,22}, -{91,-39,23}, -{91,-39,24}, -{91,-39,25}, -{91,-39,26}, -{91,-39,27}, -{91,-39,28}, -{91,-39,29}, -{91,-39,30}, -{91,-39,31}, -{91,-39,32}, -{91,-39,33}, -{91,-39,34}, -{91,-39,35}, -{91,-39,36}, -{91,-39,37}, -{91,-39,38}, -{91,-39,39}, -{91,-39,40}, -{91,-39,41}, -{91,-39,42}, -{91,-39,43}, -{91,-39,44}, -{91,-39,45}, -{91,-39,46}, -{91,-39,47}, -{91,-39,48}, -{91,-39,49}, -{91,-39,50}, -{91,-39,51}, -{91,-39,52}, -{91,-39,53}, -{91,-39,54}, -{91,-39,55}, -{91,-39,56}, -{91,-39,57}, -{91,-39,58}, -{91,-39,59}, -{91,-39,60}, -{91,-39,61}, -{91,-39,62}, -{91,-39,63}, -{91,-39,64}, -{91,-39,65}, -{91,-39,66}, -{91,-39,67}, -{91,-39,68}, -{91,-39,69}, -{91,-39,70}, -{91,-39,71}, -{91,-39,72}, -{91,-39,73}, -{91,-39,74}, -{91,-39,75}, -{91,-39,76}, -{91,-39,77}, -{91,-39,78}, -{91,-39,79}, -{91,-39,80}, -{91,-39,81}, -{91,-39,82}, -{91,-39,83}, -{91,-39,84}, -{91,-39,85}, -{91,-39,86}, -{91,-39,87}, -{91,-39,88}, -{91,-38,-14}, -{91,-38,-13}, -{91,-38,-12}, -{91,-38,-11}, -{91,-38,-10}, -{91,-38,-9}, -{91,-38,-8}, -{91,-38,-7}, -{91,-38,-6}, -{91,-38,-5}, -{91,-38,-4}, -{91,-38,-3}, -{91,-38,-2}, -{91,-38,-1}, -{91,-38,0}, -{91,-38,1}, -{91,-38,2}, -{91,-38,3}, -{91,-38,4}, -{91,-38,5}, -{91,-38,6}, -{91,-38,7}, -{91,-38,8}, -{91,-38,9}, -{91,-38,10}, -{91,-38,11}, -{91,-38,12}, -{91,-38,13}, -{91,-38,14}, -{91,-38,15}, -{91,-38,16}, -{91,-38,17}, -{91,-38,18}, -{91,-38,19}, -{91,-38,20}, -{91,-38,21}, -{91,-38,22}, -{91,-38,23}, -{91,-38,24}, -{91,-38,25}, -{91,-38,26}, -{91,-38,27}, -{91,-38,28}, -{91,-38,29}, -{91,-38,30}, -{91,-38,31}, -{91,-38,32}, -{91,-38,33}, -{91,-38,34}, -{91,-38,35}, -{91,-38,36}, -{91,-38,37}, -{91,-38,38}, -{91,-38,39}, -{91,-38,40}, -{91,-38,41}, -{91,-38,42}, -{91,-38,43}, -{91,-38,44}, -{91,-38,45}, -{91,-38,46}, -{91,-38,47}, -{91,-38,48}, -{91,-38,49}, -{91,-38,50}, -{91,-38,51}, -{91,-38,52}, -{91,-38,53}, -{91,-38,54}, -{91,-38,55}, -{91,-38,56}, -{91,-38,57}, -{91,-38,58}, -{91,-38,59}, -{91,-38,60}, -{91,-38,61}, -{91,-38,62}, -{91,-38,63}, -{91,-38,64}, -{91,-38,65}, -{91,-38,66}, -{91,-38,67}, -{91,-38,68}, -{91,-38,69}, -{91,-38,70}, -{91,-38,71}, -{91,-38,72}, -{91,-38,73}, -{91,-38,74}, -{91,-38,75}, -{91,-38,76}, -{91,-38,77}, -{91,-38,78}, -{91,-38,79}, -{91,-38,80}, -{91,-38,81}, -{91,-38,82}, -{91,-38,83}, -{91,-38,84}, -{91,-38,85}, -{91,-38,86}, -{91,-38,87}, -{91,-38,88}, -{91,-37,-14}, -{91,-37,-13}, -{91,-37,-12}, -{91,-37,-11}, -{91,-37,-10}, -{91,-37,-9}, -{91,-37,-8}, -{91,-37,-7}, -{91,-37,-6}, -{91,-37,-5}, -{91,-37,-4}, -{91,-37,-3}, -{91,-37,-2}, -{91,-37,-1}, -{91,-37,0}, -{91,-37,1}, -{91,-37,2}, -{91,-37,3}, -{91,-37,4}, -{91,-37,5}, -{91,-37,6}, -{91,-37,7}, -{91,-37,8}, -{91,-37,9}, -{91,-37,10}, -{91,-37,11}, -{91,-37,12}, -{91,-37,13}, -{91,-37,14}, -{91,-37,15}, -{91,-37,16}, -{91,-37,17}, -{91,-37,18}, -{91,-37,19}, -{91,-37,20}, -{91,-37,21}, -{91,-37,22}, -{91,-37,23}, -{91,-37,24}, -{91,-37,25}, -{91,-37,26}, -{91,-37,27}, -{91,-37,28}, -{91,-37,29}, -{91,-37,30}, -{91,-37,31}, -{91,-37,32}, -{91,-37,33}, -{91,-37,34}, -{91,-37,35}, -{91,-37,36}, -{91,-37,37}, -{91,-37,38}, -{91,-37,39}, -{91,-37,40}, -{91,-37,41}, -{91,-37,42}, -{91,-37,43}, -{91,-37,44}, -{91,-37,45}, -{91,-37,46}, -{91,-37,47}, -{91,-37,48}, -{91,-37,49}, -{91,-37,50}, -{91,-37,51}, -{91,-37,52}, -{91,-37,53}, -{91,-37,54}, -{91,-37,55}, -{91,-37,56}, -{91,-37,57}, -{91,-37,58}, -{91,-37,59}, -{91,-37,60}, -{91,-37,61}, -{91,-37,62}, -{91,-37,63}, -{91,-37,64}, -{91,-37,65}, -{91,-37,66}, -{91,-37,67}, -{91,-37,68}, -{91,-37,69}, -{91,-37,70}, -{91,-37,71}, -{91,-37,72}, -{91,-37,73}, -{91,-37,74}, -{91,-37,75}, -{91,-37,76}, -{91,-37,77}, -{91,-37,78}, -{91,-37,79}, -{91,-37,80}, -{91,-37,81}, -{91,-37,82}, -{91,-37,83}, -{91,-37,84}, -{91,-37,85}, -{91,-37,86}, -{91,-37,87}, -{91,-37,88}, -{91,-36,-14}, -{91,-36,-13}, -{91,-36,-12}, -{91,-36,-11}, -{91,-36,-10}, -{91,-36,-9}, -{91,-36,-8}, -{91,-36,-7}, -{91,-36,-6}, -{91,-36,-5}, -{91,-36,-4}, -{91,-36,-3}, -{91,-36,-2}, -{91,-36,-1}, -{91,-36,0}, -{91,-36,1}, -{91,-36,2}, -{91,-36,3}, -{91,-36,4}, -{91,-36,5}, -{91,-36,6}, -{91,-36,7}, -{91,-36,8}, -{91,-36,9}, -{91,-36,10}, -{91,-36,11}, -{91,-36,12}, -{91,-36,13}, -{91,-36,14}, -{91,-36,15}, -{91,-36,16}, -{91,-36,17}, -{91,-36,18}, -{91,-36,19}, -{91,-36,20}, -{91,-36,21}, -{91,-36,22}, -{91,-36,23}, -{91,-36,24}, -{91,-36,25}, -{91,-36,26}, -{91,-36,27}, -{91,-36,28}, -{91,-36,29}, -{91,-36,30}, -{91,-36,31}, -{91,-36,32}, -{91,-36,33}, -{91,-36,34}, -{91,-36,35}, -{91,-36,36}, -{91,-36,37}, -{91,-36,38}, -{91,-36,39}, -{91,-36,40}, -{91,-36,41}, -{91,-36,42}, -{91,-36,43}, -{91,-36,44}, -{91,-36,45}, -{91,-36,46}, -{91,-36,47}, -{91,-36,48}, -{91,-36,49}, -{91,-36,50}, -{91,-36,51}, -{91,-36,52}, -{91,-36,53}, -{91,-36,54}, -{91,-36,55}, -{91,-36,56}, -{91,-36,57}, -{91,-36,58}, -{91,-36,59}, -{91,-36,60}, -{91,-36,61}, -{91,-36,62}, -{91,-36,63}, -{91,-36,64}, -{91,-36,65}, -{91,-36,66}, -{91,-36,67}, -{91,-36,68}, -{91,-36,69}, -{91,-36,70}, -{91,-36,71}, -{91,-36,72}, -{91,-36,73}, -{91,-36,74}, -{91,-36,75}, -{91,-36,76}, -{91,-36,77}, -{91,-36,78}, -{91,-36,79}, -{91,-36,80}, -{91,-36,81}, -{91,-36,82}, -{91,-36,83}, -{91,-36,84}, -{91,-36,85}, -{91,-36,86}, -{91,-36,87}, -{91,-36,88}, -{91,-35,-14}, -{91,-35,-13}, -{91,-35,-12}, -{91,-35,-11}, -{91,-35,-10}, -{91,-35,-9}, -{91,-35,-8}, -{91,-35,-7}, -{91,-35,-6}, -{91,-35,-5}, -{91,-35,-4}, -{91,-35,-3}, -{91,-35,-2}, -{91,-35,-1}, -{91,-35,0}, -{91,-35,1}, -{91,-35,2}, -{91,-35,3}, -{91,-35,4}, -{91,-35,5}, -{91,-35,6}, -{91,-35,7}, -{91,-35,8}, -{91,-35,9}, -{91,-35,10}, -{91,-35,11}, -{91,-35,12}, -{91,-35,13}, -{91,-35,14}, -{91,-35,15}, -{91,-35,16}, -{91,-35,17}, -{91,-35,18}, -{91,-35,19}, -{91,-35,20}, -{91,-35,21}, -{91,-35,22}, -{91,-35,23}, -{91,-35,24}, -{91,-35,25}, -{91,-35,26}, -{91,-35,27}, -{91,-35,28}, -{91,-35,29}, -{91,-35,30}, -{91,-35,31}, -{91,-35,32}, -{91,-35,33}, -{91,-35,34}, -{91,-35,35}, -{91,-35,36}, -{91,-35,37}, -{91,-35,38}, -{91,-35,39}, -{91,-35,40}, -{91,-35,41}, -{91,-35,42}, -{91,-35,43}, -{91,-35,44}, -{91,-35,45}, -{91,-35,46}, -{91,-35,47}, -{91,-35,48}, -{91,-35,49}, -{91,-35,50}, -{91,-35,51}, -{91,-35,52}, -{91,-35,53}, -{91,-35,54}, -{91,-35,55}, -{91,-35,56}, -{91,-35,57}, -{91,-35,58}, -{91,-35,59}, -{91,-35,60}, -{91,-35,61}, -{91,-35,62}, -{91,-35,63}, -{91,-35,64}, -{91,-35,65}, -{91,-35,66}, -{91,-35,67}, -{91,-35,68}, -{91,-35,69}, -{91,-35,70}, -{91,-35,71}, -{91,-35,72}, -{91,-35,73}, -{91,-35,74}, -{91,-35,75}, -{91,-35,76}, -{91,-35,77}, -{91,-35,78}, -{91,-35,79}, -{91,-35,80}, -{91,-35,81}, -{91,-35,82}, -{91,-35,83}, -{91,-35,84}, -{91,-35,85}, -{91,-35,86}, -{91,-35,87}, -{91,-35,88}, -{91,-34,-14}, -{91,-34,-13}, -{91,-34,-12}, -{91,-34,-11}, -{91,-34,-10}, -{91,-34,-9}, -{91,-34,-8}, -{91,-34,-7}, -{91,-34,-6}, -{91,-34,-5}, -{91,-34,-4}, -{91,-34,-3}, -{91,-34,-2}, -{91,-34,-1}, -{91,-34,0}, -{91,-34,1}, -{91,-34,2}, -{91,-34,3}, -{91,-34,4}, -{91,-34,5}, -{91,-34,6}, -{91,-34,7}, -{91,-34,8}, -{91,-34,9}, -{91,-34,10}, -{91,-34,11}, -{91,-34,12}, -{91,-34,13}, -{91,-34,14}, -{91,-34,15}, -{91,-34,16}, -{91,-34,17}, -{91,-34,18}, -{91,-34,19}, -{91,-34,20}, -{91,-34,21}, -{91,-34,22}, -{91,-34,23}, -{91,-34,24}, -{91,-34,25}, -{91,-34,26}, -{91,-34,27}, -{91,-34,28}, -{91,-34,29}, -{91,-34,30}, -{91,-34,31}, -{91,-34,32}, -{91,-34,33}, -{91,-34,34}, -{91,-34,35}, -{91,-34,36}, -{91,-34,37}, -{91,-34,38}, -{91,-34,39}, -{91,-34,40}, -{91,-34,41}, -{91,-34,42}, -{91,-34,43}, -{91,-34,44}, -{91,-34,45}, -{91,-34,46}, -{91,-34,47}, -{91,-34,48}, -{91,-34,49}, -{91,-34,50}, -{91,-34,51}, -{91,-34,52}, -{91,-34,53}, -{91,-34,54}, -{91,-34,55}, -{91,-34,56}, -{91,-34,57}, -{91,-34,58}, -{91,-34,59}, -{91,-34,60}, -{91,-34,61}, -{91,-34,62}, -{91,-34,63}, -{91,-34,64}, -{91,-34,65}, -{91,-34,66}, -{91,-34,67}, -{91,-34,68}, -{91,-34,69}, -{91,-34,70}, -{91,-34,71}, -{91,-34,72}, -{91,-34,73}, -{91,-34,74}, -{91,-34,75}, -{91,-34,76}, -{91,-34,77}, -{91,-34,78}, -{91,-34,79}, -{91,-34,80}, -{91,-34,81}, -{91,-34,82}, -{91,-34,83}, -{91,-34,84}, -{91,-34,85}, -{91,-34,86}, -{91,-34,87}, -{91,-34,88}, -{91,-33,-14}, -{91,-33,-13}, -{91,-33,-12}, -{91,-33,-11}, -{91,-33,-10}, -{91,-33,-9}, -{91,-33,-8}, -{91,-33,-7}, -{91,-33,-6}, -{91,-33,-5}, -{91,-33,-4}, -{91,-33,-3}, -{91,-33,-2}, -{91,-33,-1}, -{91,-33,0}, -{91,-33,1}, -{91,-33,2}, -{91,-33,3}, -{91,-33,4}, -{91,-33,5}, -{91,-33,6}, -{91,-33,7}, -{91,-33,8}, -{91,-33,9}, -{91,-33,10}, -{91,-33,11}, -{91,-33,12}, -{91,-33,13}, -{91,-33,14}, -{91,-33,15}, -{91,-33,16}, -{91,-33,17}, -{91,-33,18}, -{91,-33,19}, -{91,-33,20}, -{91,-33,21}, -{91,-33,22}, -{91,-33,23}, -{91,-33,24}, -{91,-33,25}, -{91,-33,26}, -{91,-33,27}, -{91,-33,28}, -{91,-33,29}, -{91,-33,30}, -{91,-33,31}, -{91,-33,32}, -{91,-33,33}, -{91,-33,34}, -{91,-33,35}, -{91,-33,36}, -{91,-33,37}, -{91,-33,38}, -{91,-33,39}, -{91,-33,40}, -{91,-33,41}, -{91,-33,42}, -{91,-33,43}, -{91,-33,44}, -{91,-33,45}, -{91,-33,46}, -{91,-33,47}, -{91,-33,48}, -{91,-33,49}, -{91,-33,50}, -{91,-33,51}, -{91,-33,52}, -{91,-33,53}, -{91,-33,54}, -{91,-33,55}, -{91,-33,56}, -{91,-33,57}, -{91,-33,58}, -{91,-33,59}, -{91,-33,60}, -{91,-33,61}, -{91,-33,62}, -{91,-33,63}, -{91,-33,64}, -{91,-33,65}, -{91,-33,66}, -{91,-33,67}, -{91,-33,68}, -{91,-33,69}, -{91,-33,70}, -{91,-33,71}, -{91,-33,72}, -{91,-33,73}, -{91,-33,74}, -{91,-33,75}, -{91,-33,76}, -{91,-33,77}, -{91,-33,78}, -{91,-33,79}, -{91,-33,80}, -{91,-33,81}, -{91,-33,82}, -{91,-33,83}, -{91,-33,84}, -{91,-33,85}, -{91,-33,86}, -{91,-33,87}, -{91,-33,88}, -{91,-32,-14}, -{91,-32,-13}, -{91,-32,-12}, -{91,-32,-11}, -{91,-32,-10}, -{91,-32,-9}, -{91,-32,-8}, -{91,-32,-7}, -{91,-32,-6}, -{91,-32,-5}, -{91,-32,-4}, -{91,-32,-3}, -{91,-32,-2}, -{91,-32,-1}, -{91,-32,0}, -{91,-32,1}, -{91,-32,2}, -{91,-32,3}, -{91,-32,4}, -{91,-32,5}, -{91,-32,6}, -{91,-32,7}, -{91,-32,8}, -{91,-32,9}, -{91,-32,10}, -{91,-32,11}, -{91,-32,12}, -{91,-32,13}, -{91,-32,14}, -{91,-32,15}, -{91,-32,16}, -{91,-32,17}, -{91,-32,18}, -{91,-32,19}, -{91,-32,20}, -{91,-32,21}, -{91,-32,22}, -{91,-32,23}, -{91,-32,24}, -{91,-32,25}, -{91,-32,26}, -{91,-32,27}, -{91,-32,28}, -{91,-32,29}, -{91,-32,30}, -{91,-32,31}, -{91,-32,32}, -{91,-32,33}, -{91,-32,34}, -{91,-32,35}, -{91,-32,36}, -{91,-32,37}, -{91,-32,38}, -{91,-32,39}, -{91,-32,40}, -{91,-32,41}, -{91,-32,42}, -{91,-32,43}, -{91,-32,44}, -{91,-32,45}, -{91,-32,46}, -{91,-32,47}, -{91,-32,48}, -{91,-32,49}, -{91,-32,50}, -{91,-32,51}, -{91,-32,52}, -{91,-32,53}, -{91,-32,54}, -{91,-32,55}, -{91,-32,56}, -{91,-32,57}, -{91,-32,58}, -{91,-32,59}, -{91,-32,60}, -{91,-32,61}, -{91,-32,62}, -{91,-32,63}, -{91,-32,64}, -{91,-32,65}, -{91,-32,66}, -{91,-32,67}, -{91,-32,68}, -{91,-32,69}, -{91,-32,70}, -{91,-32,71}, -{91,-32,72}, -{91,-32,73}, -{91,-32,74}, -{91,-32,75}, -{91,-32,76}, -{91,-32,77}, -{91,-32,78}, -{91,-32,79}, -{91,-32,80}, -{91,-32,81}, -{91,-32,82}, -{91,-32,83}, -{91,-32,84}, -{91,-32,85}, -{91,-32,86}, -{91,-32,87}, -{91,-32,88}, -{91,-31,-14}, -{91,-31,-13}, -{91,-31,-12}, -{91,-31,-11}, -{91,-31,-10}, -{91,-31,-9}, -{91,-31,-8}, -{91,-31,-7}, -{91,-31,-6}, -{91,-31,-5}, -{91,-31,-4}, -{91,-31,-3}, -{91,-31,-2}, -{91,-31,-1}, -{91,-31,0}, -{91,-31,1}, -{91,-31,2}, -{91,-31,3}, -{91,-31,4}, -{91,-31,5}, -{91,-31,6}, -{91,-31,7}, -{91,-31,8}, -{91,-31,9}, -{91,-31,10}, -{91,-31,11}, -{91,-31,12}, -{91,-31,13}, -{91,-31,14}, -{91,-31,15}, -{91,-31,16}, -{91,-31,17}, -{91,-31,18}, -{91,-31,19}, -{91,-31,20}, -{91,-31,21}, -{91,-31,22}, -{91,-31,23}, -{91,-31,24}, -{91,-31,25}, -{91,-31,26}, -{91,-31,27}, -{91,-31,28}, -{91,-31,29}, -{91,-31,30}, -{91,-31,31}, -{91,-31,32}, -{91,-31,33}, -{91,-31,34}, -{91,-31,35}, -{91,-31,36}, -{91,-31,37}, -{91,-31,38}, -{91,-31,39}, -{91,-31,40}, -{91,-31,41}, -{91,-31,42}, -{91,-31,43}, -{91,-31,44}, -{91,-31,45}, -{91,-31,46}, -{91,-31,47}, -{91,-31,48}, -{91,-31,49}, -{91,-31,50}, -{91,-31,51}, -{91,-31,52}, -{91,-31,53}, -{91,-31,54}, -{91,-31,55}, -{91,-31,56}, -{91,-31,57}, -{91,-31,58}, -{91,-31,59}, -{91,-31,60}, -{91,-31,61}, -{91,-31,62}, -{91,-31,63}, -{91,-31,64}, -{91,-31,65}, -{91,-31,66}, -{91,-31,67}, -{91,-31,68}, -{91,-31,69}, -{91,-31,70}, -{91,-31,71}, -{91,-31,72}, -{91,-31,73}, -{91,-31,74}, -{91,-31,75}, -{91,-31,76}, -{91,-31,77}, -{91,-31,78}, -{91,-31,79}, -{91,-31,80}, -{91,-31,81}, -{91,-31,82}, -{91,-31,83}, -{91,-31,84}, -{91,-31,85}, -{91,-31,86}, -{91,-31,87}, -{91,-31,88}, -{91,-30,-14}, -{91,-30,-13}, -{91,-30,-12}, -{91,-30,-11}, -{91,-30,-10}, -{91,-30,-9}, -{91,-30,-8}, -{91,-30,-7}, -{91,-30,-6}, -{91,-30,-5}, -{91,-30,-4}, -{91,-30,-3}, -{91,-30,-2}, -{91,-30,-1}, -{91,-30,0}, -{91,-30,1}, -{91,-30,2}, -{91,-30,3}, -{91,-30,4}, -{91,-30,5}, -{91,-30,6}, -{91,-30,7}, -{91,-30,8}, -{91,-30,9}, -{91,-30,10}, -{91,-30,11}, -{91,-30,12}, -{91,-30,13}, -{91,-30,14}, -{91,-30,15}, -{91,-30,16}, -{91,-30,17}, -{91,-30,18}, -{91,-30,19}, -{91,-30,20}, -{91,-30,21}, -{91,-30,22}, -{91,-30,23}, -{91,-30,24}, -{91,-30,25}, -{91,-30,26}, -{91,-30,27}, -{91,-30,28}, -{91,-30,29}, -{91,-30,30}, -{91,-30,31}, -{91,-30,32}, -{91,-30,33}, -{91,-30,34}, -{91,-30,35}, -{91,-30,36}, -{91,-30,37}, -{91,-30,38}, -{91,-30,39}, -{91,-30,40}, -{91,-30,41}, -{91,-30,42}, -{91,-30,43}, -{91,-30,44}, -{91,-30,45}, -{91,-30,46}, -{91,-30,47}, -{91,-30,48}, -{91,-30,49}, -{91,-30,50}, -{91,-30,51}, -{91,-30,52}, -{91,-30,53}, -{91,-30,54}, -{91,-30,55}, -{91,-30,56}, -{91,-30,57}, -{91,-30,58}, -{91,-30,59}, -{91,-30,60}, -{91,-30,61}, -{91,-30,62}, -{91,-30,63}, -{91,-30,64}, -{91,-30,65}, -{91,-30,66}, -{91,-30,67}, -{91,-30,68}, -{91,-30,69}, -{91,-30,70}, -{91,-30,71}, -{91,-30,72}, -{91,-30,73}, -{91,-30,74}, -{91,-30,75}, -{91,-30,76}, -{91,-30,77}, -{91,-30,78}, -{91,-30,79}, -{91,-30,80}, -{91,-30,81}, -{91,-30,82}, -{91,-30,83}, -{91,-30,84}, -{91,-30,85}, -{91,-30,86}, -{91,-30,87}, -{91,-30,88}, -{91,-29,-14}, -{91,-29,-13}, -{91,-29,-12}, -{91,-29,-11}, -{91,-29,-10}, -{91,-29,-9}, -{91,-29,-8}, -{91,-29,-7}, -{91,-29,-6}, -{91,-29,-5}, -{91,-29,-4}, -{91,-29,-3}, -{91,-29,-2}, -{91,-29,-1}, -{91,-29,0}, -{91,-29,1}, -{91,-29,2}, -{91,-29,3}, -{91,-29,4}, -{91,-29,5}, -{91,-29,6}, -{91,-29,7}, -{91,-29,8}, -{91,-29,9}, -{91,-29,10}, -{91,-29,11}, -{91,-29,12}, -{91,-29,13}, -{91,-29,14}, -{91,-29,15}, -{91,-29,16}, -{91,-29,17}, -{91,-29,18}, -{91,-29,19}, -{91,-29,20}, -{91,-29,21}, -{91,-29,22}, -{91,-29,23}, -{91,-29,24}, -{91,-29,25}, -{91,-29,26}, -{91,-29,27}, -{91,-29,28}, -{91,-29,29}, -{91,-29,30}, -{91,-29,31}, -{91,-29,32}, -{91,-29,33}, -{91,-29,34}, -{91,-29,35}, -{91,-29,36}, -{91,-29,37}, -{91,-29,38}, -{91,-29,39}, -{91,-29,40}, -{91,-29,41}, -{91,-29,42}, -{91,-29,43}, -{91,-29,44}, -{91,-29,45}, -{91,-29,46}, -{91,-29,47}, -{91,-29,48}, -{91,-29,49}, -{91,-29,50}, -{91,-29,51}, -{91,-29,52}, -{91,-29,53}, -{91,-29,54}, -{91,-29,55}, -{91,-29,56}, -{91,-29,57}, -{91,-29,58}, -{91,-29,59}, -{91,-29,60}, -{91,-29,61}, -{91,-29,62}, -{91,-29,63}, -{91,-29,64}, -{91,-29,65}, -{91,-29,66}, -{91,-29,67}, -{91,-29,68}, -{91,-29,69}, -{91,-29,70}, -{91,-29,71}, -{91,-29,72}, -{91,-29,73}, -{91,-29,74}, -{91,-29,75}, -{91,-29,76}, -{91,-29,77}, -{91,-29,78}, -{91,-29,79}, -{91,-29,80}, -{91,-29,81}, -{91,-29,82}, -{91,-29,83}, -{91,-29,84}, -{91,-29,85}, -{91,-29,86}, -{91,-29,87}, -{91,-29,88}, -{91,-29,89}, -{91,-28,-14}, -{91,-28,-13}, -{91,-28,-12}, -{91,-28,-11}, -{91,-28,-10}, -{91,-28,-9}, -{91,-28,-8}, -{91,-28,-7}, -{91,-28,-6}, -{91,-28,-5}, -{91,-28,-4}, -{91,-28,-3}, -{91,-28,-2}, -{91,-28,-1}, -{91,-28,0}, -{91,-28,1}, -{91,-28,2}, -{91,-28,3}, -{91,-28,4}, -{91,-28,5}, -{91,-28,6}, -{91,-28,7}, -{91,-28,8}, -{91,-28,9}, -{91,-28,10}, -{91,-28,11}, -{91,-28,12}, -{91,-28,13}, -{91,-28,14}, -{91,-28,15}, -{91,-28,16}, -{91,-28,17}, -{91,-28,18}, -{91,-28,19}, -{91,-28,20}, -{91,-28,21}, -{91,-28,22}, -{91,-28,23}, -{91,-28,24}, -{91,-28,25}, -{91,-28,26}, -{91,-28,27}, -{91,-28,28}, -{91,-28,29}, -{91,-28,30}, -{91,-28,31}, -{91,-28,32}, -{91,-28,33}, -{91,-28,34}, -{91,-28,35}, -{91,-28,36}, -{91,-28,37}, -{91,-28,38}, -{91,-28,39}, -{91,-28,40}, -{91,-28,41}, -{91,-28,42}, -{91,-28,43}, -{91,-28,44}, -{91,-28,45}, -{91,-28,46}, -{91,-28,47}, -{91,-28,48}, -{91,-28,49}, -{91,-28,50}, -{91,-28,51}, -{91,-28,52}, -{91,-28,53}, -{91,-28,54}, -{91,-28,55}, -{91,-28,56}, -{91,-28,57}, -{91,-28,58}, -{91,-28,59}, -{91,-28,60}, -{91,-28,61}, -{91,-28,62}, -{91,-28,63}, -{91,-28,64}, -{91,-28,65}, -{91,-28,66}, -{91,-28,67}, -{91,-28,68}, -{91,-28,69}, -{91,-28,70}, -{91,-28,71}, -{91,-28,72}, -{91,-28,73}, -{91,-28,74}, -{91,-28,75}, -{91,-28,76}, -{91,-28,77}, -{91,-28,78}, -{91,-28,79}, -{91,-28,80}, -{91,-28,81}, -{91,-28,82}, -{91,-28,83}, -{91,-28,84}, -{91,-28,85}, -{91,-28,86}, -{91,-28,87}, -{91,-28,88}, -{91,-28,89}, -{91,-27,-14}, -{91,-27,-13}, -{91,-27,-12}, -{91,-27,-11}, -{91,-27,-10}, -{91,-27,-9}, -{91,-27,-8}, -{91,-27,-7}, -{91,-27,-6}, -{91,-27,-5}, -{91,-27,-4}, -{91,-27,-3}, -{91,-27,-2}, -{91,-27,-1}, -{91,-27,0}, -{91,-27,1}, -{91,-27,2}, -{91,-27,3}, -{91,-27,4}, -{91,-27,5}, -{91,-27,6}, -{91,-27,7}, -{91,-27,8}, -{91,-27,9}, -{91,-27,10}, -{91,-27,11}, -{91,-27,12}, -{91,-27,13}, -{91,-27,14}, -{91,-27,15}, -{91,-27,16}, -{91,-27,17}, -{91,-27,18}, -{91,-27,19}, -{91,-27,20}, -{91,-27,21}, -{91,-27,22}, -{91,-27,23}, -{91,-27,24}, -{91,-27,25}, -{91,-27,26}, -{91,-27,27}, -{91,-27,28}, -{91,-27,29}, -{91,-27,30}, -{91,-27,31}, -{91,-27,32}, -{91,-27,33}, -{91,-27,34}, -{91,-27,35}, -{91,-27,36}, -{91,-27,37}, -{91,-27,38}, -{91,-27,39}, -{91,-27,40}, -{91,-27,41}, -{91,-27,42}, -{91,-27,43}, -{91,-27,44}, -{91,-27,45}, -{91,-27,46}, -{91,-27,47}, -{91,-27,48}, -{91,-27,49}, -{91,-27,50}, -{91,-27,51}, -{91,-27,52}, -{91,-27,53}, -{91,-27,54}, -{91,-27,55}, -{91,-27,56}, -{91,-27,57}, -{91,-27,58}, -{91,-27,59}, -{91,-27,60}, -{91,-27,61}, -{91,-27,62}, -{91,-27,63}, -{91,-27,64}, -{91,-27,65}, -{91,-27,66}, -{91,-27,67}, -{91,-27,68}, -{91,-27,69}, -{91,-27,70}, -{91,-27,71}, -{91,-27,72}, -{91,-27,73}, -{91,-27,74}, -{91,-27,75}, -{91,-27,76}, -{91,-27,77}, -{91,-27,78}, -{91,-27,79}, -{91,-27,80}, -{91,-27,81}, -{91,-27,82}, -{91,-27,83}, -{91,-27,84}, -{91,-27,85}, -{91,-27,86}, -{91,-27,87}, -{91,-27,88}, -{91,-27,89}, -{91,-26,-14}, -{91,-26,-13}, -{91,-26,-12}, -{91,-26,-11}, -{91,-26,-10}, -{91,-26,-9}, -{91,-26,-8}, -{91,-26,-7}, -{91,-26,-6}, -{91,-26,-5}, -{91,-26,-4}, -{91,-26,-3}, -{91,-26,-2}, -{91,-26,-1}, -{91,-26,0}, -{91,-26,1}, -{91,-26,2}, -{91,-26,3}, -{91,-26,4}, -{91,-26,5}, -{91,-26,6}, -{91,-26,7}, -{91,-26,8}, -{91,-26,9}, -{91,-26,10}, -{91,-26,11}, -{91,-26,12}, -{91,-26,13}, -{91,-26,14}, -{91,-26,15}, -{91,-26,16}, -{91,-26,17}, -{91,-26,18}, -{91,-26,19}, -{91,-26,20}, -{91,-26,21}, -{91,-26,22}, -{91,-26,23}, -{91,-26,24}, -{91,-26,25}, -{91,-26,26}, -{91,-26,27}, -{91,-26,28}, -{91,-26,29}, -{91,-26,30}, -{91,-26,31}, -{91,-26,32}, -{91,-26,33}, -{91,-26,34}, -{91,-26,35}, -{91,-26,36}, -{91,-26,37}, -{91,-26,38}, -{91,-26,39}, -{91,-26,40}, -{91,-26,41}, -{91,-26,42}, -{91,-26,43}, -{91,-26,44}, -{91,-26,45}, -{91,-26,46}, -{91,-26,47}, -{91,-26,48}, -{91,-26,49}, -{91,-26,50}, -{91,-26,51}, -{91,-26,52}, -{91,-26,53}, -{91,-26,54}, -{91,-26,55}, -{91,-26,56}, -{91,-26,57}, -{91,-26,58}, -{91,-26,59}, -{91,-26,60}, -{91,-26,61}, -{91,-26,62}, -{91,-26,63}, -{91,-26,64}, -{91,-26,65}, -{91,-26,66}, -{91,-26,67}, -{91,-26,68}, -{91,-26,69}, -{91,-26,70}, -{91,-26,71}, -{91,-26,72}, -{91,-26,73}, -{91,-26,74}, -{91,-26,75}, -{91,-26,76}, -{91,-26,77}, -{91,-26,78}, -{91,-26,79}, -{91,-26,80}, -{91,-26,81}, -{91,-26,82}, -{91,-26,83}, -{91,-26,84}, -{91,-26,85}, -{91,-26,86}, -{91,-26,87}, -{91,-26,88}, -{91,-26,89}, -{91,-25,-14}, -{91,-25,-13}, -{91,-25,-12}, -{91,-25,-11}, -{91,-25,-10}, -{91,-25,-9}, -{91,-25,-8}, -{91,-25,-7}, -{91,-25,-6}, -{91,-25,-5}, -{91,-25,-4}, -{91,-25,-3}, -{91,-25,-2}, -{91,-25,-1}, -{91,-25,0}, -{91,-25,1}, -{91,-25,2}, -{91,-25,3}, -{91,-25,4}, -{91,-25,5}, -{91,-25,6}, -{91,-25,7}, -{91,-25,8}, -{91,-25,9}, -{91,-25,10}, -{91,-25,11}, -{91,-25,12}, -{91,-25,13}, -{91,-25,14}, -{91,-25,15}, -{91,-25,16}, -{91,-25,17}, -{91,-25,18}, -{91,-25,19}, -{91,-25,20}, -{91,-25,21}, -{91,-25,22}, -{91,-25,23}, -{91,-25,24}, -{91,-25,25}, -{91,-25,26}, -{91,-25,27}, -{91,-25,28}, -{91,-25,29}, -{91,-25,30}, -{91,-25,31}, -{91,-25,32}, -{91,-25,33}, -{91,-25,34}, -{91,-25,35}, -{91,-25,36}, -{91,-25,37}, -{91,-25,38}, -{91,-25,39}, -{91,-25,40}, -{91,-25,41}, -{91,-25,42}, -{91,-25,43}, -{91,-25,44}, -{91,-25,45}, -{91,-25,46}, -{91,-25,47}, -{91,-25,48}, -{91,-25,49}, -{91,-25,50}, -{91,-25,51}, -{91,-25,52}, -{91,-25,53}, -{91,-25,54}, -{91,-25,55}, -{91,-25,56}, -{91,-25,57}, -{91,-25,58}, -{91,-25,59}, -{91,-25,60}, -{91,-25,61}, -{91,-25,62}, -{91,-25,63}, -{91,-25,64}, -{91,-25,65}, -{91,-25,66}, -{91,-25,67}, -{91,-25,68}, -{91,-25,69}, -{91,-25,70}, -{91,-25,71}, -{91,-25,72}, -{91,-25,73}, -{91,-25,74}, -{91,-25,75}, -{91,-25,76}, -{91,-25,77}, -{91,-25,78}, -{91,-25,79}, -{91,-25,80}, -{91,-25,81}, -{91,-25,82}, -{91,-25,83}, -{91,-25,84}, -{91,-25,85}, -{91,-25,86}, -{91,-25,87}, -{91,-25,88}, -{91,-25,89}, -{91,-24,-14}, -{91,-24,-13}, -{91,-24,-12}, -{91,-24,-11}, -{91,-24,-10}, -{91,-24,-9}, -{91,-24,-8}, -{91,-24,-7}, -{91,-24,-6}, -{91,-24,-5}, -{91,-24,-4}, -{91,-24,-3}, -{91,-24,-2}, -{91,-24,-1}, -{91,-24,0}, -{91,-24,1}, -{91,-24,2}, -{91,-24,3}, -{91,-24,4}, -{91,-24,5}, -{91,-24,6}, -{91,-24,7}, -{91,-24,8}, -{91,-24,9}, -{91,-24,10}, -{91,-24,11}, -{91,-24,12}, -{91,-24,13}, -{91,-24,14}, -{91,-24,15}, -{91,-24,16}, -{91,-24,17}, -{91,-24,18}, -{91,-24,19}, -{91,-24,20}, -{91,-24,21}, -{91,-24,22}, -{91,-24,23}, -{91,-24,24}, -{91,-24,25}, -{91,-24,26}, -{91,-24,27}, -{91,-24,28}, -{91,-24,29}, -{91,-24,30}, -{91,-24,31}, -{91,-24,32}, -{91,-24,33}, -{91,-24,34}, -{91,-24,35}, -{91,-24,36}, -{91,-24,37}, -{91,-24,38}, -{91,-24,39}, -{91,-24,40}, -{91,-24,41}, -{91,-24,42}, -{91,-24,43}, -{91,-24,44}, -{91,-24,45}, -{91,-24,46}, -{91,-24,47}, -{91,-24,48}, -{91,-24,49}, -{91,-24,50}, -{91,-24,51}, -{91,-24,52}, -{91,-24,53}, -{91,-24,54}, -{91,-24,55}, -{91,-24,56}, -{91,-24,57}, -{91,-24,58}, -{91,-24,59}, -{91,-24,60}, -{91,-24,61}, -{91,-24,62}, -{91,-24,63}, -{91,-24,64}, -{91,-24,65}, -{91,-24,66}, -{91,-24,67}, -{91,-24,68}, -{91,-24,69}, -{91,-24,70}, -{91,-24,71}, -{91,-24,72}, -{91,-24,73}, -{91,-24,74}, -{91,-24,75}, -{91,-24,76}, -{91,-24,77}, -{91,-24,78}, -{91,-24,79}, -{91,-24,80}, -{91,-24,81}, -{91,-24,82}, -{91,-24,83}, -{91,-24,84}, -{91,-24,85}, -{91,-24,86}, -{91,-24,87}, -{91,-24,88}, -{91,-24,89}, -{91,-23,-14}, -{91,-23,-13}, -{91,-23,-12}, -{91,-23,-11}, -{91,-23,-10}, -{91,-23,-9}, -{91,-23,-8}, -{91,-23,-7}, -{91,-23,-6}, -{91,-23,-5}, -{91,-23,-4}, -{91,-23,-3}, -{91,-23,-2}, -{91,-23,-1}, -{91,-23,0}, -{91,-23,1}, -{91,-23,2}, -{91,-23,3}, -{91,-23,4}, -{91,-23,5}, -{91,-23,6}, -{91,-23,7}, -{91,-23,8}, -{91,-23,9}, -{91,-23,10}, -{91,-23,11}, -{91,-23,12}, -{91,-23,13}, -{91,-23,14}, -{91,-23,15}, -{91,-23,16}, -{91,-23,17}, -{91,-23,18}, -{91,-23,19}, -{91,-23,20}, -{91,-23,21}, -{91,-23,22}, -{91,-23,23}, -{91,-23,24}, -{91,-23,25}, -{91,-23,26}, -{91,-23,27}, -{91,-23,28}, -{91,-23,29}, -{91,-23,30}, -{91,-23,31}, -{91,-23,32}, -{91,-23,33}, -{91,-23,34}, -{91,-23,35}, -{91,-23,36}, -{91,-23,37}, -{91,-23,38}, -{91,-23,39}, -{91,-23,40}, -{91,-23,41}, -{91,-23,42}, -{91,-23,43}, -{91,-23,44}, -{91,-23,45}, -{91,-23,46}, -{91,-23,47}, -{91,-23,48}, -{91,-23,49}, -{91,-23,50}, -{91,-23,51}, -{91,-23,52}, -{91,-23,53}, -{91,-23,54}, -{91,-23,55}, -{91,-23,56}, -{91,-23,57}, -{91,-23,58}, -{91,-23,59}, -{91,-23,60}, -{91,-23,61}, -{91,-23,62}, -{91,-23,63}, -{91,-23,64}, -{91,-23,65}, -{91,-23,66}, -{91,-23,67}, -{91,-23,68}, -{91,-23,69}, -{91,-23,70}, -{91,-23,71}, -{91,-23,72}, -{91,-23,73}, -{91,-23,74}, -{91,-23,75}, -{91,-23,76}, -{91,-23,77}, -{91,-23,78}, -{91,-23,79}, -{91,-23,80}, -{91,-23,81}, -{91,-23,82}, -{91,-23,83}, -{91,-23,84}, -{91,-23,85}, -{91,-23,86}, -{91,-23,87}, -{91,-23,88}, -{91,-23,89}, -{91,-22,-14}, -{91,-22,-13}, -{91,-22,-12}, -{91,-22,-11}, -{91,-22,-10}, -{91,-22,-9}, -{91,-22,-8}, -{91,-22,-7}, -{91,-22,-6}, -{91,-22,-5}, -{91,-22,-4}, -{91,-22,-3}, -{91,-22,-2}, -{91,-22,-1}, -{91,-22,0}, -{91,-22,1}, -{91,-22,2}, -{91,-22,3}, -{91,-22,4}, -{91,-22,5}, -{91,-22,6}, -{91,-22,7}, -{91,-22,8}, -{91,-22,9}, -{91,-22,10}, -{91,-22,11}, -{91,-22,12}, -{91,-22,13}, -{91,-22,14}, -{91,-22,15}, -{91,-22,16}, -{91,-22,17}, -{91,-22,18}, -{91,-22,19}, -{91,-22,20}, -{91,-22,21}, -{91,-22,22}, -{91,-22,23}, -{91,-22,24}, -{91,-22,25}, -{91,-22,26}, -{91,-22,27}, -{91,-22,28}, -{91,-22,29}, -{91,-22,30}, -{91,-22,31}, -{91,-22,32}, -{91,-22,33}, -{91,-22,34}, -{91,-22,35}, -{91,-22,36}, -{91,-22,37}, -{91,-22,38}, -{91,-22,39}, -{91,-22,40}, -{91,-22,41}, -{91,-22,42}, -{91,-22,43}, -{91,-22,44}, -{91,-22,45}, -{91,-22,46}, -{91,-22,47}, -{91,-22,48}, -{91,-22,49}, -{91,-22,50}, -{91,-22,51}, -{91,-22,52}, -{91,-22,53}, -{91,-22,54}, -{91,-22,55}, -{91,-22,56}, -{91,-22,57}, -{91,-22,58}, -{91,-22,59}, -{91,-22,60}, -{91,-22,61}, -{91,-22,62}, -{91,-22,63}, -{91,-22,64}, -{91,-22,65}, -{91,-22,66}, -{91,-22,67}, -{91,-22,68}, -{91,-22,69}, -{91,-22,70}, -{91,-22,71}, -{91,-22,72}, -{91,-22,73}, -{91,-22,74}, -{91,-22,75}, -{91,-22,76}, -{91,-22,77}, -{91,-22,78}, -{91,-22,79}, -{91,-22,80}, -{91,-22,81}, -{91,-22,82}, -{91,-22,83}, -{91,-22,84}, -{91,-22,85}, -{91,-22,86}, -{91,-22,87}, -{91,-22,88}, -{91,-22,89}, -{91,-21,-14}, -{91,-21,-13}, -{91,-21,-12}, -{91,-21,-11}, -{91,-21,-10}, -{91,-21,-9}, -{91,-21,-8}, -{91,-21,-7}, -{91,-21,-6}, -{91,-21,-5}, -{91,-21,-4}, -{91,-21,-3}, -{91,-21,-2}, -{91,-21,-1}, -{91,-21,0}, -{91,-21,1}, -{91,-21,2}, -{91,-21,3}, -{91,-21,4}, -{91,-21,5}, -{91,-21,6}, -{91,-21,7}, -{91,-21,8}, -{91,-21,9}, -{91,-21,10}, -{91,-21,11}, -{91,-21,12}, -{91,-21,13}, -{91,-21,14}, -{91,-21,15}, -{91,-21,16}, -{91,-21,17}, -{91,-21,18}, -{91,-21,19}, -{91,-21,20}, -{91,-21,21}, -{91,-21,22}, -{91,-21,23}, -{91,-21,24}, -{91,-21,25}, -{91,-21,26}, -{91,-21,27}, -{91,-21,28}, -{91,-21,29}, -{91,-21,30}, -{91,-21,31}, -{91,-21,32}, -{91,-21,33}, -{91,-21,34}, -{91,-21,35}, -{91,-21,36}, -{91,-21,37}, -{91,-21,38}, -{91,-21,39}, -{91,-21,40}, -{91,-21,41}, -{91,-21,42}, -{91,-21,43}, -{91,-21,44}, -{91,-21,45}, -{91,-21,46}, -{91,-21,47}, -{91,-21,48}, -{91,-21,49}, -{91,-21,50}, -{91,-21,51}, -{91,-21,52}, -{91,-21,53}, -{91,-21,54}, -{91,-21,55}, -{91,-21,56}, -{91,-21,57}, -{91,-21,58}, -{91,-21,59}, -{91,-21,60}, -{91,-21,61}, -{91,-21,62}, -{91,-21,63}, -{91,-21,64}, -{91,-21,65}, -{91,-21,66}, -{91,-21,67}, -{91,-21,68}, -{91,-21,69}, -{91,-21,70}, -{91,-21,71}, -{91,-21,72}, -{91,-21,73}, -{91,-21,74}, -{91,-21,75}, -{91,-21,76}, -{91,-21,77}, -{91,-21,78}, -{91,-21,79}, -{91,-21,80}, -{91,-21,81}, -{91,-21,82}, -{91,-21,83}, -{91,-21,84}, -{91,-21,85}, -{91,-21,86}, -{91,-21,87}, -{91,-21,88}, -{91,-21,89}, -{91,-20,-14}, -{91,-20,-13}, -{91,-20,-12}, -{91,-20,-11}, -{91,-20,-10}, -{91,-20,-9}, -{91,-20,-8}, -{91,-20,-7}, -{91,-20,-6}, -{91,-20,-5}, -{91,-20,-4}, -{91,-20,-3}, -{91,-20,-2}, -{91,-20,-1}, -{91,-20,0}, -{91,-20,1}, -{91,-20,2}, -{91,-20,3}, -{91,-20,4}, -{91,-20,5}, -{91,-20,6}, -{91,-20,7}, -{91,-20,8}, -{91,-20,9}, -{91,-20,10}, -{91,-20,11}, -{91,-20,12}, -{91,-20,13}, -{91,-20,14}, -{91,-20,15}, -{91,-20,16}, -{91,-20,17}, -{91,-20,18}, -{91,-20,19}, -{91,-20,20}, -{91,-20,21}, -{91,-20,22}, -{91,-20,23}, -{91,-20,24}, -{91,-20,25}, -{91,-20,26}, -{91,-20,27}, -{91,-20,28}, -{91,-20,29}, -{91,-20,30}, -{91,-20,31}, -{91,-20,32}, -{91,-20,33}, -{91,-20,34}, -{91,-20,35}, -{91,-20,36}, -{91,-20,37}, -{91,-20,38}, -{91,-20,39}, -{91,-20,40}, -{91,-20,41}, -{91,-20,42}, -{91,-20,43}, -{91,-20,44}, -{91,-20,45}, -{91,-20,46}, -{91,-20,47}, -{91,-20,48}, -{91,-20,49}, -{91,-20,50}, -{91,-20,51}, -{91,-20,52}, -{91,-20,53}, -{91,-20,54}, -{91,-20,55}, -{91,-20,56}, -{91,-20,57}, -{91,-20,58}, -{91,-20,59}, -{91,-20,60}, -{91,-20,61}, -{91,-20,62}, -{91,-20,63}, -{91,-20,64}, -{91,-20,65}, -{91,-20,66}, -{91,-20,67}, -{91,-20,68}, -{91,-20,69}, -{91,-20,70}, -{91,-20,71}, -{91,-20,72}, -{91,-20,73}, -{91,-20,74}, -{91,-20,75}, -{91,-20,76}, -{91,-20,77}, -{91,-20,78}, -{91,-20,79}, -{91,-20,80}, -{91,-20,81}, -{91,-20,82}, -{91,-20,83}, -{91,-20,84}, -{91,-20,85}, -{91,-20,86}, -{91,-20,87}, -{91,-20,88}, -{91,-20,89}, -{91,-19,-14}, -{91,-19,-13}, -{91,-19,-12}, -{91,-19,-11}, -{91,-19,-10}, -{91,-19,-9}, -{91,-19,-8}, -{91,-19,-7}, -{91,-19,-6}, -{91,-19,-5}, -{91,-19,-4}, -{91,-19,-3}, -{91,-19,-2}, -{91,-19,-1}, -{91,-19,0}, -{91,-19,1}, -{91,-19,2}, -{91,-19,3}, -{91,-19,4}, -{91,-19,5}, -{91,-19,6}, -{91,-19,7}, -{91,-19,8}, -{91,-19,9}, -{91,-19,10}, -{91,-19,11}, -{91,-19,12}, -{91,-19,13}, -{91,-19,14}, -{91,-19,15}, -{91,-19,16}, -{91,-19,17}, -{91,-19,18}, -{91,-19,19}, -{91,-19,20}, -{91,-19,21}, -{91,-19,22}, -{91,-19,23}, -{91,-19,24}, -{91,-19,25}, -{91,-19,26}, -{91,-19,27}, -{91,-19,28}, -{91,-19,29}, -{91,-19,30}, -{91,-19,31}, -{91,-19,32}, -{91,-19,33}, -{91,-19,34}, -{91,-19,35}, -{91,-19,36}, -{91,-19,37}, -{91,-19,38}, -{91,-19,39}, -{91,-19,40}, -{91,-19,41}, -{91,-19,42}, -{91,-19,43}, -{91,-19,44}, -{91,-19,45}, -{91,-19,46}, -{91,-19,47}, -{91,-19,48}, -{91,-19,49}, -{91,-19,50}, -{91,-19,51}, -{91,-19,52}, -{91,-19,53}, -{91,-19,54}, -{91,-19,55}, -{91,-19,56}, -{91,-19,57}, -{91,-19,58}, -{91,-19,59}, -{91,-19,60}, -{91,-19,61}, -{91,-19,62}, -{91,-19,63}, -{91,-19,64}, -{91,-19,65}, -{91,-19,66}, -{91,-19,67}, -{91,-19,68}, -{91,-19,69}, -{91,-19,70}, -{91,-19,71}, -{91,-19,72}, -{91,-19,73}, -{91,-19,74}, -{91,-19,75}, -{91,-19,76}, -{91,-19,77}, -{91,-19,78}, -{91,-19,79}, -{91,-19,80}, -{91,-19,81}, -{91,-19,82}, -{91,-19,83}, -{91,-19,84}, -{91,-19,85}, -{91,-19,86}, -{91,-19,87}, -{91,-19,88}, -{91,-19,89}, -{91,-18,-14}, -{91,-18,-13}, -{91,-18,-12}, -{91,-18,-11}, -{91,-18,-10}, -{91,-18,-9}, -{91,-18,-8}, -{91,-18,-7}, -{91,-18,-6}, -{91,-18,-5}, -{91,-18,-4}, -{91,-18,-3}, -{91,-18,-2}, -{91,-18,-1}, -{91,-18,0}, -{91,-18,1}, -{91,-18,2}, -{91,-18,3}, -{91,-18,4}, -{91,-18,5}, -{91,-18,6}, -{91,-18,7}, -{91,-18,8}, -{91,-18,9}, -{91,-18,10}, -{91,-18,11}, -{91,-18,12}, -{91,-18,13}, -{91,-18,14}, -{91,-18,15}, -{91,-18,16}, -{91,-18,17}, -{91,-18,18}, -{91,-18,19}, -{91,-18,20}, -{91,-18,21}, -{91,-18,22}, -{91,-18,23}, -{91,-18,24}, -{91,-18,25}, -{91,-18,26}, -{91,-18,27}, -{91,-18,28}, -{91,-18,29}, -{91,-18,30}, -{91,-18,31}, -{91,-18,32}, -{91,-18,33}, -{91,-18,34}, -{91,-18,35}, -{91,-18,36}, -{91,-18,37}, -{91,-18,38}, -{91,-18,39}, -{91,-18,40}, -{91,-18,41}, -{91,-18,42}, -{91,-18,43}, -{91,-18,44}, -{91,-18,45}, -{91,-18,46}, -{91,-18,47}, -{91,-18,48}, -{91,-18,49}, -{91,-18,50}, -{91,-18,51}, -{91,-18,52}, -{91,-18,53}, -{91,-18,54}, -{91,-18,55}, -{91,-18,56}, -{91,-18,57}, -{91,-18,58}, -{91,-18,59}, -{91,-18,60}, -{91,-18,61}, -{91,-18,62}, -{91,-18,63}, -{91,-18,64}, -{91,-18,65}, -{91,-18,66}, -{91,-18,67}, -{91,-18,68}, -{91,-18,69}, -{91,-18,70}, -{91,-18,71}, -{91,-18,72}, -{91,-18,73}, -{91,-18,74}, -{91,-18,75}, -{91,-18,76}, -{91,-18,77}, -{91,-18,78}, -{91,-18,79}, -{91,-18,80}, -{91,-18,81}, -{91,-18,82}, -{91,-18,83}, -{91,-18,84}, -{91,-18,85}, -{91,-18,86}, -{91,-18,87}, -{91,-18,88}, -{91,-18,89}, -{91,-17,-14}, -{91,-17,-13}, -{91,-17,-12}, -{91,-17,-11}, -{91,-17,-10}, -{91,-17,-9}, -{91,-17,-8}, -{91,-17,-7}, -{91,-17,-6}, -{91,-17,-5}, -{91,-17,-4}, -{91,-17,-3}, -{91,-17,-2}, -{91,-17,-1}, -{91,-17,0}, -{91,-17,1}, -{91,-17,2}, -{91,-17,3}, -{91,-17,4}, -{91,-17,5}, -{91,-17,6}, -{91,-17,7}, -{91,-17,8}, -{91,-17,9}, -{91,-17,10}, -{91,-17,11}, -{91,-17,12}, -{91,-17,13}, -{91,-17,14}, -{91,-17,15}, -{91,-17,16}, -{91,-17,17}, -{91,-17,18}, -{91,-17,19}, -{91,-17,20}, -{91,-17,21}, -{91,-17,22}, -{91,-17,23}, -{91,-17,24}, -{91,-17,25}, -{91,-17,26}, -{91,-17,27}, -{91,-17,28}, -{91,-17,29}, -{91,-17,30}, -{91,-17,31}, -{91,-17,32}, -{91,-17,33}, -{91,-17,34}, -{91,-17,35}, -{91,-17,36}, -{91,-17,37}, -{91,-17,38}, -{91,-17,39}, -{91,-17,40}, -{91,-17,41}, -{91,-17,42}, -{91,-17,43}, -{91,-17,44}, -{91,-17,45}, -{91,-17,46}, -{91,-17,47}, -{91,-17,48}, -{91,-17,49}, -{91,-17,50}, -{91,-17,51}, -{91,-17,52}, -{91,-17,53}, -{91,-17,54}, -{91,-17,55}, -{91,-17,56}, -{91,-17,57}, -{91,-17,58}, -{91,-17,59}, -{91,-17,60}, -{91,-17,61}, -{91,-17,62}, -{91,-17,63}, -{91,-17,64}, -{91,-17,65}, -{91,-17,66}, -{91,-17,67}, -{91,-17,68}, -{91,-17,69}, -{91,-17,70}, -{91,-17,71}, -{91,-17,72}, -{91,-17,73}, -{91,-17,74}, -{91,-17,75}, -{91,-17,76}, -{91,-17,77}, -{91,-17,78}, -{91,-17,79}, -{91,-17,80}, -{91,-17,81}, -{91,-17,82}, -{91,-17,83}, -{91,-17,84}, -{91,-17,85}, -{91,-17,86}, -{91,-17,87}, -{91,-17,88}, -{91,-17,89}, -{91,-16,-14}, -{91,-16,-13}, -{91,-16,-12}, -{91,-16,-11}, -{91,-16,-10}, -{91,-16,-9}, -{91,-16,-8}, -{91,-16,-7}, -{91,-16,-6}, -{91,-16,-5}, -{91,-16,-4}, -{91,-16,-3}, -{91,-16,-2}, -{91,-16,-1}, -{91,-16,0}, -{91,-16,1}, -{91,-16,2}, -{91,-16,3}, -{91,-16,4}, -{91,-16,5}, -{91,-16,6}, -{91,-16,7}, -{91,-16,8}, -{91,-16,9}, -{91,-16,10}, -{91,-16,11}, -{91,-16,12}, -{91,-16,13}, -{91,-16,14}, -{91,-16,15}, -{91,-16,16}, -{91,-16,17}, -{91,-16,18}, -{91,-16,19}, -{91,-16,20}, -{91,-16,21}, -{91,-16,22}, -{91,-16,23}, -{91,-16,24}, -{91,-16,25}, -{91,-16,26}, -{91,-16,27}, -{91,-16,28}, -{91,-16,29}, -{91,-16,30}, -{91,-16,31}, -{91,-16,32}, -{91,-16,33}, -{91,-16,34}, -{91,-16,35}, -{91,-16,36}, -{91,-16,37}, -{91,-16,38}, -{91,-16,39}, -{91,-16,40}, -{91,-16,41}, -{91,-16,42}, -{91,-16,43}, -{91,-16,44}, -{91,-16,45}, -{91,-16,46}, -{91,-16,47}, -{91,-16,48}, -{91,-16,49}, -{91,-16,50}, -{91,-16,51}, -{91,-16,52}, -{91,-16,53}, -{91,-16,54}, -{91,-16,55}, -{91,-16,56}, -{91,-16,57}, -{91,-16,58}, -{91,-16,59}, -{91,-16,60}, -{91,-16,61}, -{91,-16,62}, -{91,-16,63}, -{91,-16,64}, -{91,-16,65}, -{91,-16,66}, -{91,-16,67}, -{91,-16,68}, -{91,-16,69}, -{91,-16,70}, -{91,-16,71}, -{91,-16,72}, -{91,-16,73}, -{91,-16,74}, -{91,-16,75}, -{91,-16,76}, -{91,-16,77}, -{91,-16,78}, -{91,-16,79}, -{91,-16,80}, -{91,-16,81}, -{91,-16,82}, -{91,-16,83}, -{91,-16,84}, -{91,-16,85}, -{91,-16,86}, -{91,-16,87}, -{91,-16,88}, -{91,-16,89}, -{91,-15,-13}, -{91,-15,-12}, -{91,-15,-11}, -{91,-15,-10}, -{91,-15,-9}, -{91,-15,-8}, -{91,-15,-7}, -{91,-15,-6}, -{91,-15,-5}, -{91,-15,-4}, -{91,-15,-3}, -{91,-15,-2}, -{91,-15,-1}, -{91,-15,0}, -{91,-15,1}, -{91,-15,2}, -{91,-15,3}, -{91,-15,4}, -{91,-15,5}, -{91,-15,6}, -{91,-15,7}, -{91,-15,8}, -{91,-15,9}, -{91,-15,10}, -{91,-15,11}, -{91,-15,12}, -{91,-15,13}, -{91,-15,14}, -{91,-15,15}, -{91,-15,16}, -{91,-15,17}, -{91,-15,18}, -{91,-15,19}, -{91,-15,20}, -{91,-15,21}, -{91,-15,22}, -{91,-15,23}, -{91,-15,24}, -{91,-15,25}, -{91,-15,26}, -{91,-15,27}, -{91,-15,28}, -{91,-15,29}, -{91,-15,30}, -{91,-15,31}, -{91,-15,32}, -{91,-15,33}, -{91,-15,34}, -{91,-15,35}, -{91,-15,36}, -{91,-15,37}, -{91,-15,38}, -{91,-15,39}, -{91,-15,40}, -{91,-15,41}, -{91,-15,42}, -{91,-15,43}, -{91,-15,44}, -{91,-15,45}, -{91,-15,46}, -{91,-15,47}, -{91,-15,48}, -{91,-15,49}, -{91,-15,50}, -{91,-15,51}, -{91,-15,52}, -{91,-15,53}, -{91,-15,54}, -{91,-15,55}, -{91,-15,56}, -{91,-15,57}, -{91,-15,58}, -{91,-15,59}, -{91,-15,60}, -{91,-15,61}, -{91,-15,62}, -{91,-15,63}, -{91,-15,64}, -{91,-15,65}, -{91,-15,66}, -{91,-15,67}, -{91,-15,68}, -{91,-15,69}, -{91,-15,70}, -{91,-15,71}, -{91,-15,72}, -{91,-15,73}, -{91,-15,74}, -{91,-15,75}, -{91,-15,76}, -{91,-15,77}, -{91,-15,78}, -{91,-15,79}, -{91,-15,80}, -{91,-15,81}, -{91,-15,82}, -{91,-15,83}, -{91,-15,84}, -{91,-15,85}, -{91,-15,86}, -{91,-15,87}, -{91,-15,88}, -{91,-15,89}, -{91,-14,-13}, -{91,-14,-12}, -{91,-14,-11}, -{91,-14,-10}, -{91,-14,-9}, -{91,-14,-8}, -{91,-14,-7}, -{91,-14,-6}, -{91,-14,-5}, -{91,-14,-4}, -{91,-14,-3}, -{91,-14,-2}, -{91,-14,-1}, -{91,-14,0}, -{91,-14,1}, -{91,-14,2}, -{91,-14,3}, -{91,-14,4}, -{91,-14,5}, -{91,-14,6}, -{91,-14,7}, -{91,-14,8}, -{91,-14,9}, -{91,-14,10}, -{91,-14,11}, -{91,-14,12}, -{91,-14,13}, -{91,-14,14}, -{91,-14,15}, -{91,-14,16}, -{91,-14,17}, -{91,-14,18}, -{91,-14,19}, -{91,-14,20}, -{91,-14,21}, -{91,-14,22}, -{91,-14,23}, -{91,-14,24}, -{91,-14,25}, -{91,-14,26}, -{91,-14,27}, -{91,-14,28}, -{91,-14,29}, -{91,-14,30}, -{91,-14,31}, -{91,-14,32}, -{91,-14,33}, -{91,-14,34}, -{91,-14,35}, -{91,-14,36}, -{91,-14,37}, -{91,-14,38}, -{91,-14,39}, -{91,-14,40}, -{91,-14,41}, -{91,-14,42}, -{91,-14,43}, -{91,-14,44}, -{91,-14,45}, -{91,-14,46}, -{91,-14,47}, -{91,-14,48}, -{91,-14,49}, -{91,-14,50}, -{91,-14,51}, -{91,-14,52}, -{91,-14,53}, -{91,-14,54}, -{91,-14,55}, -{91,-14,56}, -{91,-14,57}, -{91,-14,58}, -{91,-14,59}, -{91,-14,60}, -{91,-14,61}, -{91,-14,62}, -{91,-14,63}, -{91,-14,64}, -{91,-14,65}, -{91,-14,66}, -{91,-14,67}, -{91,-14,68}, -{91,-14,69}, -{91,-14,70}, -{91,-14,71}, -{91,-14,72}, -{91,-14,73}, -{91,-14,74}, -{91,-14,75}, -{91,-14,76}, -{91,-14,77}, -{91,-14,78}, -{91,-14,79}, -{91,-14,80}, -{91,-14,81}, -{91,-14,82}, -{91,-14,83}, -{91,-14,84}, -{91,-14,85}, -{91,-14,86}, -{91,-14,87}, -{91,-14,88}, -{91,-14,89}, -{91,-13,-13}, -{91,-13,-12}, -{91,-13,-11}, -{91,-13,-10}, -{91,-13,-9}, -{91,-13,-8}, -{91,-13,-7}, -{91,-13,-6}, -{91,-13,-5}, -{91,-13,-4}, -{91,-13,-3}, -{91,-13,-2}, -{91,-13,-1}, -{91,-13,0}, -{91,-13,1}, -{91,-13,2}, -{91,-13,3}, -{91,-13,4}, -{91,-13,5}, -{91,-13,6}, -{91,-13,7}, -{91,-13,8}, -{91,-13,9}, -{91,-13,10}, -{91,-13,11}, -{91,-13,12}, -{91,-13,13}, -{91,-13,14}, -{91,-13,15}, -{91,-13,16}, -{91,-13,17}, -{91,-13,18}, -{91,-13,19}, -{91,-13,20}, -{91,-13,21}, -{91,-13,22}, -{91,-13,23}, -{91,-13,24}, -{91,-13,25}, -{91,-13,26}, -{91,-13,27}, -{91,-13,28}, -{91,-13,29}, -{91,-13,30}, -{91,-13,31}, -{91,-13,32}, -{91,-13,33}, -{91,-13,34}, -{91,-13,35}, -{91,-13,36}, -{91,-13,37}, -{91,-13,38}, -{91,-13,39}, -{91,-13,40}, -{91,-13,41}, -{91,-13,42}, -{91,-13,43}, -{91,-13,44}, -{91,-13,45}, -{91,-13,46}, -{91,-13,47}, -{91,-13,48}, -{91,-13,49}, -{91,-13,50}, -{91,-13,51}, -{91,-13,52}, -{91,-13,53}, -{91,-13,54}, -{91,-13,55}, -{91,-13,56}, -{91,-13,57}, -{91,-13,58}, -{91,-13,59}, -{91,-13,60}, -{91,-13,61}, -{91,-13,62}, -{91,-13,63}, -{91,-13,64}, -{91,-13,65}, -{91,-13,66}, -{91,-13,67}, -{91,-13,68}, -{91,-13,69}, -{91,-13,70}, -{91,-13,71}, -{91,-13,72}, -{91,-13,73}, -{91,-13,74}, -{91,-13,75}, -{91,-13,76}, -{91,-13,77}, -{91,-13,78}, -{91,-13,79}, -{91,-13,80}, -{91,-13,81}, -{91,-13,82}, -{91,-13,83}, -{91,-13,84}, -{91,-13,85}, -{91,-13,86}, -{91,-13,87}, -{91,-13,88}, -{91,-13,89}, -{91,-13,90}, -{91,-12,-13}, -{91,-12,-12}, -{91,-12,-11}, -{91,-12,-10}, -{91,-12,-9}, -{91,-12,-8}, -{91,-12,-7}, -{91,-12,-6}, -{91,-12,-5}, -{91,-12,-4}, -{91,-12,-3}, -{91,-12,-2}, -{91,-12,-1}, -{91,-12,0}, -{91,-12,1}, -{91,-12,2}, -{91,-12,3}, -{91,-12,4}, -{91,-12,5}, -{91,-12,6}, -{91,-12,7}, -{91,-12,8}, -{91,-12,9}, -{91,-12,10}, -{91,-12,11}, -{91,-12,12}, -{91,-12,13}, -{91,-12,14}, -{91,-12,15}, -{91,-12,16}, -{91,-12,17}, -{91,-12,18}, -{91,-12,19}, -{91,-12,20}, -{91,-12,21}, -{91,-12,22}, -{91,-12,23}, -{91,-12,24}, -{91,-12,25}, -{91,-12,26}, -{91,-12,27}, -{91,-12,28}, -{91,-12,29}, -{91,-12,30}, -{91,-12,31}, -{91,-12,32}, -{91,-12,33}, -{91,-12,34}, -{91,-12,35}, -{91,-12,36}, -{91,-12,37}, -{91,-12,38}, -{91,-12,39}, -{91,-12,40}, -{91,-12,41}, -{91,-12,42}, -{91,-12,43}, -{91,-12,44}, -{91,-12,45}, -{91,-12,46}, -{91,-12,47}, -{91,-12,48}, -{91,-12,49}, -{91,-12,50}, -{91,-12,51}, -{91,-12,52}, -{91,-12,53}, -{91,-12,54}, -{91,-12,55}, -{91,-12,56}, -{91,-12,57}, -{91,-12,58}, -{91,-12,59}, -{91,-12,60}, -{91,-12,61}, -{91,-12,62}, -{91,-12,63}, -{91,-12,64}, -{91,-12,65}, -{91,-12,66}, -{91,-12,67}, -{91,-12,68}, -{91,-12,69}, -{91,-12,70}, -{91,-12,71}, -{91,-12,72}, -{91,-12,73}, -{91,-12,74}, -{91,-12,75}, -{91,-12,76}, -{91,-12,77}, -{91,-12,78}, -{91,-12,79}, -{91,-12,80}, -{91,-12,81}, -{91,-12,82}, -{91,-12,83}, -{91,-12,84}, -{91,-12,85}, -{91,-12,86}, -{91,-12,87}, -{91,-12,88}, -{91,-12,89}, -{91,-12,90}, -{91,-11,-13}, -{91,-11,-12}, -{91,-11,-11}, -{91,-11,-10}, -{91,-11,-9}, -{91,-11,-8}, -{91,-11,-7}, -{91,-11,-6}, -{91,-11,-5}, -{91,-11,-4}, -{91,-11,-3}, -{91,-11,-2}, -{91,-11,-1}, -{91,-11,0}, -{91,-11,1}, -{91,-11,2}, -{91,-11,3}, -{91,-11,4}, -{91,-11,5}, -{91,-11,6}, -{91,-11,7}, -{91,-11,8}, -{91,-11,9}, -{91,-11,10}, -{91,-11,11}, -{91,-11,12}, -{91,-11,13}, -{91,-11,14}, -{91,-11,15}, -{91,-11,16}, -{91,-11,17}, -{91,-11,18}, -{91,-11,19}, -{91,-11,20}, -{91,-11,21}, -{91,-11,22}, -{91,-11,23}, -{91,-11,24}, -{91,-11,25}, -{91,-11,26}, -{91,-11,27}, -{91,-11,28}, -{91,-11,29}, -{91,-11,30}, -{91,-11,31}, -{91,-11,32}, -{91,-11,33}, -{91,-11,34}, -{91,-11,35}, -{91,-11,36}, -{91,-11,37}, -{91,-11,38}, -{91,-11,39}, -{91,-11,40}, -{91,-11,41}, -{91,-11,42}, -{91,-11,43}, -{91,-11,44}, -{91,-11,45}, -{91,-11,46}, -{91,-11,47}, -{91,-11,48}, -{91,-11,49}, -{91,-11,50}, -{91,-11,51}, -{91,-11,52}, -{91,-11,53}, -{91,-11,54}, -{91,-11,55}, -{91,-11,56}, -{91,-11,57}, -{91,-11,58}, -{91,-11,59}, -{91,-11,60}, -{91,-11,61}, -{91,-11,62}, -{91,-11,63}, -{91,-11,64}, -{91,-11,65}, -{91,-11,66}, -{91,-11,67}, -{91,-11,68}, -{91,-11,69}, -{91,-11,70}, -{91,-11,71}, -{91,-11,72}, -{91,-11,73}, -{91,-11,74}, -{91,-11,75}, -{91,-11,76}, -{91,-11,77}, -{91,-11,78}, -{91,-11,79}, -{91,-11,80}, -{91,-11,81}, -{91,-11,82}, -{91,-11,83}, -{91,-11,84}, -{91,-11,85}, -{91,-11,86}, -{91,-11,87}, -{91,-11,88}, -{91,-11,89}, -{91,-11,90}, -{91,-10,-13}, -{91,-10,-12}, -{91,-10,-11}, -{91,-10,-10}, -{91,-10,-9}, -{91,-10,-8}, -{91,-10,-7}, -{91,-10,-6}, -{91,-10,-5}, -{91,-10,-4}, -{91,-10,-3}, -{91,-10,-2}, -{91,-10,-1}, -{91,-10,0}, -{91,-10,1}, -{91,-10,2}, -{91,-10,3}, -{91,-10,4}, -{91,-10,5}, -{91,-10,6}, -{91,-10,7}, -{91,-10,8}, -{91,-10,9}, -{91,-10,10}, -{91,-10,11}, -{91,-10,12}, -{91,-10,13}, -{91,-10,14}, -{91,-10,15}, -{91,-10,16}, -{91,-10,17}, -{91,-10,18}, -{91,-10,19}, -{91,-10,20}, -{91,-10,21}, -{91,-10,22}, -{91,-10,23}, -{91,-10,24}, -{91,-10,25}, -{91,-10,26}, -{91,-10,27}, -{91,-10,28}, -{91,-10,29}, -{91,-10,30}, -{91,-10,31}, -{91,-10,32}, -{91,-10,33}, -{91,-10,34}, -{91,-10,35}, -{91,-10,36}, -{91,-10,37}, -{91,-10,38}, -{91,-10,39}, -{91,-10,40}, -{91,-10,41}, -{91,-10,42}, -{91,-10,43}, -{91,-10,44}, -{91,-10,45}, -{91,-10,46}, -{91,-10,47}, -{91,-10,48}, -{91,-10,49}, -{91,-10,50}, -{91,-10,51}, -{91,-10,52}, -{91,-10,53}, -{91,-10,54}, -{91,-10,55}, -{91,-10,56}, -{91,-10,57}, -{91,-10,58}, -{91,-10,59}, -{91,-10,60}, -{91,-10,61}, -{91,-10,62}, -{91,-10,63}, -{91,-10,64}, -{91,-10,65}, -{91,-10,66}, -{91,-10,67}, -{91,-10,68}, -{91,-10,69}, -{91,-10,70}, -{91,-10,71}, -{91,-10,72}, -{91,-10,73}, -{91,-10,74}, -{91,-10,75}, -{91,-10,76}, -{91,-10,77}, -{91,-10,78}, -{91,-10,79}, -{91,-10,80}, -{91,-10,81}, -{91,-10,82}, -{91,-10,83}, -{91,-10,84}, -{91,-10,85}, -{91,-10,86}, -{91,-10,87}, -{91,-10,88}, -{91,-10,89}, -{91,-10,90}, -{91,-9,-13}, -{91,-9,-12}, -{91,-9,-11}, -{91,-9,-10}, -{91,-9,-9}, -{91,-9,-8}, -{91,-9,-7}, -{91,-9,-6}, -{91,-9,-5}, -{91,-9,-4}, -{91,-9,-3}, -{91,-9,-2}, -{91,-9,-1}, -{91,-9,0}, -{91,-9,1}, -{91,-9,2}, -{91,-9,3}, -{91,-9,4}, -{91,-9,5}, -{91,-9,6}, -{91,-9,7}, -{91,-9,8}, -{91,-9,9}, -{91,-9,10}, -{91,-9,11}, -{91,-9,12}, -{91,-9,13}, -{91,-9,14}, -{91,-9,15}, -{91,-9,16}, -{91,-9,17}, -{91,-9,18}, -{91,-9,19}, -{91,-9,20}, -{91,-9,21}, -{91,-9,22}, -{91,-9,23}, -{91,-9,24}, -{91,-9,25}, -{91,-9,26}, -{91,-9,27}, -{91,-9,28}, -{91,-9,29}, -{91,-9,30}, -{91,-9,31}, -{91,-9,32}, -{91,-9,33}, -{91,-9,34}, -{91,-9,35}, -{91,-9,36}, -{91,-9,37}, -{91,-9,38}, -{91,-9,39}, -{91,-9,40}, -{91,-9,41}, -{91,-9,42}, -{91,-9,43}, -{91,-9,44}, -{91,-9,45}, -{91,-9,46}, -{91,-9,47}, -{91,-9,48}, -{91,-9,49}, -{91,-9,50}, -{91,-9,51}, -{91,-9,52}, -{91,-9,53}, -{91,-9,54}, -{91,-9,55}, -{91,-9,56}, -{91,-9,57}, -{91,-9,58}, -{91,-9,59}, -{91,-9,60}, -{91,-9,61}, -{91,-9,62}, -{91,-9,63}, -{91,-9,64}, -{91,-9,65}, -{91,-9,66}, -{91,-9,67}, -{91,-9,68}, -{91,-9,69}, -{91,-9,70}, -{91,-9,71}, -{91,-9,72}, -{91,-9,73}, -{91,-9,74}, -{91,-9,75}, -{91,-9,76}, -{91,-9,77}, -{91,-9,78}, -{91,-9,79}, -{91,-9,80}, -{91,-9,81}, -{91,-9,82}, -{91,-9,83}, -{91,-8,-13}, -{91,-8,-12}, -{91,-8,-11}, -{91,-8,-10}, -{91,-8,-9}, -{91,-8,-8}, -{91,-8,-7}, -{91,-8,-6}, -{91,-8,-5}, -{91,-8,-4}, -{91,-8,-3}, -{91,-8,-2}, -{91,-8,-1}, -{91,-8,0}, -{91,-8,1}, -{91,-8,2}, -{91,-8,3}, -{91,-8,4}, -{91,-8,5}, -{91,-8,6}, -{91,-8,7}, -{91,-8,8}, -{91,-8,9}, -{91,-8,10}, -{91,-8,11}, -{91,-8,12}, -{91,-8,13}, -{91,-8,14}, -{91,-8,15}, -{91,-8,16}, -{91,-8,17}, -{91,-8,18}, -{91,-8,19}, -{91,-8,20}, -{91,-8,21}, -{91,-8,22}, -{91,-8,23}, -{91,-8,24}, -{91,-8,25}, -{91,-8,26}, -{91,-8,27}, -{91,-8,28}, -{91,-8,29}, -{91,-8,30}, -{91,-8,31}, -{91,-8,32}, -{91,-8,33}, -{91,-8,34}, -{91,-8,35}, -{91,-8,36}, -{91,-8,37}, -{91,-8,38}, -{91,-8,39}, -{91,-8,40}, -{91,-8,41}, -{91,-8,42}, -{91,-8,43}, -{91,-8,44}, -{91,-8,45}, -{91,-8,46}, -{91,-8,47}, -{91,-8,48}, -{91,-8,49}, -{91,-8,50}, -{91,-8,51}, -{91,-8,52}, -{91,-8,53}, -{91,-8,54}, -{91,-8,55}, -{91,-8,56}, -{91,-8,57}, -{91,-8,58}, -{91,-8,59}, -{91,-8,60}, -{91,-8,61}, -{91,-8,62}, -{91,-8,63}, -{91,-8,64}, -{91,-8,65}, -{91,-8,66}, -{91,-8,67}, -{91,-8,68}, -{91,-8,69}, -{91,-8,70}, -{91,-8,71}, -{91,-8,72}, -{91,-8,73}, -{91,-8,74}, -{91,-8,75}, -{91,-8,76}, -{91,-7,-13}, -{91,-7,-12}, -{91,-7,-11}, -{91,-7,-10}, -{91,-7,-9}, -{91,-7,-8}, -{91,-7,-7}, -{91,-7,-6}, -{91,-7,-5}, -{91,-7,-4}, -{91,-7,-3}, -{91,-7,-2}, -{91,-7,-1}, -{91,-7,0}, -{91,-7,1}, -{91,-7,2}, -{91,-7,3}, -{91,-7,4}, -{91,-7,5}, -{91,-7,6}, -{91,-7,7}, -{91,-7,8}, -{91,-7,9}, -{91,-7,10}, -{91,-7,11}, -{91,-7,12}, -{91,-7,13}, -{91,-7,14}, -{91,-7,15}, -{91,-7,16}, -{91,-7,17}, -{91,-7,18}, -{91,-7,19}, -{91,-7,20}, -{91,-7,21}, -{91,-7,22}, -{91,-7,23}, -{91,-7,24}, -{91,-7,25}, -{91,-7,26}, -{91,-7,27}, -{91,-7,28}, -{91,-7,29}, -{91,-7,30}, -{91,-7,31}, -{91,-7,32}, -{91,-7,33}, -{91,-7,34}, -{91,-7,35}, -{91,-7,36}, -{91,-7,37}, -{91,-7,38}, -{91,-7,39}, -{91,-7,40}, -{91,-7,41}, -{91,-7,42}, -{91,-7,43}, -{91,-7,44}, -{91,-7,45}, -{91,-7,46}, -{91,-7,47}, -{91,-7,48}, -{91,-7,49}, -{91,-7,50}, -{91,-7,51}, -{91,-7,52}, -{91,-7,53}, -{91,-7,54}, -{91,-7,55}, -{91,-7,56}, -{91,-7,57}, -{91,-7,58}, -{91,-7,59}, -{91,-7,60}, -{91,-7,61}, -{91,-7,62}, -{91,-7,63}, -{91,-7,64}, -{91,-7,65}, -{91,-7,66}, -{91,-7,67}, -{91,-7,68}, -{91,-7,69}, -{91,-7,70}, -{91,-6,-13}, -{91,-6,-12}, -{91,-6,-11}, -{91,-6,-10}, -{91,-6,-9}, -{91,-6,-8}, -{91,-6,-7}, -{91,-6,-6}, -{91,-6,-5}, -{91,-6,-4}, -{91,-6,-3}, -{91,-6,-2}, -{91,-6,-1}, -{91,-6,0}, -{91,-6,1}, -{91,-6,2}, -{91,-6,3}, -{91,-6,4}, -{91,-6,5}, -{91,-6,6}, -{91,-6,7}, -{91,-6,8}, -{91,-6,9}, -{91,-6,10}, -{91,-6,11}, -{91,-6,12}, -{91,-6,13}, -{91,-6,14}, -{91,-6,15}, -{91,-6,16}, -{91,-6,17}, -{91,-6,18}, -{91,-6,19}, -{91,-6,20}, -{91,-6,21}, -{91,-6,22}, -{91,-6,23}, -{91,-6,24}, -{91,-6,25}, -{91,-6,26}, -{91,-6,27}, -{91,-6,28}, -{91,-6,29}, -{91,-6,30}, -{91,-6,31}, -{91,-6,32}, -{91,-6,33}, -{91,-6,34}, -{91,-6,35}, -{91,-6,36}, -{91,-6,37}, -{91,-6,38}, -{91,-6,39}, -{91,-6,40}, -{91,-6,41}, -{91,-6,42}, -{91,-6,43}, -{91,-6,44}, -{91,-6,45}, -{91,-6,46}, -{91,-6,47}, -{91,-6,48}, -{91,-6,49}, -{91,-6,50}, -{91,-6,51}, -{91,-6,52}, -{91,-6,53}, -{91,-6,54}, -{91,-6,55}, -{91,-6,56}, -{91,-6,57}, -{91,-6,58}, -{91,-6,59}, -{91,-6,60}, -{91,-6,61}, -{91,-6,62}, -{91,-6,63}, -{91,-6,64}, -{91,-6,65}, -{91,-5,-13}, -{91,-5,-12}, -{91,-5,-11}, -{91,-5,-10}, -{91,-5,-9}, -{91,-5,-8}, -{91,-5,-7}, -{91,-5,-6}, -{91,-5,-5}, -{91,-5,-4}, -{91,-5,-3}, -{91,-5,-2}, -{91,-5,-1}, -{91,-5,0}, -{91,-5,1}, -{91,-5,2}, -{91,-5,3}, -{91,-5,4}, -{91,-5,5}, -{91,-5,6}, -{91,-5,7}, -{91,-5,8}, -{91,-5,9}, -{91,-5,10}, -{91,-5,11}, -{91,-5,12}, -{91,-5,13}, -{91,-5,14}, -{91,-5,15}, -{91,-5,16}, -{91,-5,17}, -{91,-5,18}, -{91,-5,19}, -{91,-5,20}, -{91,-5,21}, -{91,-5,22}, -{91,-5,23}, -{91,-5,24}, -{91,-5,25}, -{91,-5,26}, -{91,-5,27}, -{91,-5,28}, -{91,-5,29}, -{91,-5,30}, -{91,-5,31}, -{91,-5,32}, -{91,-5,33}, -{91,-5,34}, -{91,-5,35}, -{91,-5,36}, -{91,-5,37}, -{91,-5,38}, -{91,-5,39}, -{91,-5,40}, -{91,-5,41}, -{91,-5,42}, -{91,-5,43}, -{91,-5,44}, -{91,-5,45}, -{91,-5,46}, -{91,-5,47}, -{91,-5,48}, -{91,-5,49}, -{91,-5,50}, -{91,-5,51}, -{91,-5,52}, -{91,-5,53}, -{91,-5,54}, -{91,-5,55}, -{91,-5,56}, -{91,-5,57}, -{91,-5,58}, -{91,-5,59}, -{91,-5,60}, -{91,-4,-13}, -{91,-4,-12}, -{91,-4,-11}, -{91,-4,-10}, -{91,-4,-9}, -{91,-4,-8}, -{91,-4,-7}, -{91,-4,-6}, -{91,-4,-5}, -{91,-4,-4}, -{91,-4,-3}, -{91,-4,-2}, -{91,-4,-1}, -{91,-4,0}, -{91,-4,1}, -{91,-4,2}, -{91,-4,3}, -{91,-4,4}, -{91,-4,5}, -{91,-4,6}, -{91,-4,7}, -{91,-4,8}, -{91,-4,9}, -{91,-4,10}, -{91,-4,11}, -{91,-4,12}, -{91,-4,13}, -{91,-4,14}, -{91,-4,15}, -{91,-4,16}, -{91,-4,17}, -{91,-4,18}, -{91,-4,19}, -{91,-4,20}, -{91,-4,21}, -{91,-4,22}, -{91,-4,23}, -{91,-4,24}, -{91,-4,25}, -{91,-4,26}, -{91,-4,27}, -{91,-4,28}, -{91,-4,29}, -{91,-4,30}, -{91,-4,31}, -{91,-4,32}, -{91,-4,33}, -{91,-4,34}, -{91,-4,35}, -{91,-4,36}, -{91,-4,37}, -{91,-4,38}, -{91,-4,39}, -{91,-4,40}, -{91,-4,41}, -{91,-4,42}, -{91,-4,43}, -{91,-4,44}, -{91,-4,45}, -{91,-4,46}, -{91,-4,47}, -{91,-4,48}, -{91,-4,49}, -{91,-4,50}, -{91,-4,51}, -{91,-4,52}, -{91,-4,53}, -{91,-4,54}, -{91,-4,55}, -{91,-3,-13}, -{91,-3,-12}, -{91,-3,-11}, -{91,-3,-10}, -{91,-3,-9}, -{91,-3,-8}, -{91,-3,-7}, -{91,-3,-6}, -{91,-3,-5}, -{91,-3,-4}, -{91,-3,-3}, -{91,-3,-2}, -{91,-3,-1}, -{91,-3,0}, -{91,-3,1}, -{91,-3,2}, -{91,-3,3}, -{91,-3,4}, -{91,-3,5}, -{91,-3,6}, -{91,-3,7}, -{91,-3,8}, -{91,-3,9}, -{91,-3,10}, -{91,-3,11}, -{91,-3,12}, -{91,-3,13}, -{91,-3,14}, -{91,-3,15}, -{91,-3,16}, -{91,-3,17}, -{91,-3,18}, -{91,-3,19}, -{91,-3,20}, -{91,-3,21}, -{91,-3,22}, -{91,-3,23}, -{91,-3,24}, -{91,-3,25}, -{91,-3,26}, -{91,-3,27}, -{91,-3,28}, -{91,-3,29}, -{91,-3,30}, -{91,-3,31}, -{91,-3,32}, -{91,-3,33}, -{91,-3,34}, -{91,-3,35}, -{91,-3,36}, -{91,-3,37}, -{91,-3,38}, -{91,-3,39}, -{91,-3,40}, -{91,-3,41}, -{91,-3,42}, -{91,-3,43}, -{91,-3,44}, -{91,-3,45}, -{91,-3,46}, -{91,-3,47}, -{91,-3,48}, -{91,-3,49}, -{91,-3,50}, -{91,-3,51}, -{91,-2,-13}, -{91,-2,-12}, -{91,-2,-11}, -{91,-2,-10}, -{91,-2,-9}, -{91,-2,-8}, -{91,-2,-7}, -{91,-2,-6}, -{91,-2,-5}, -{91,-2,-4}, -{91,-2,-3}, -{91,-2,-2}, -{91,-2,-1}, -{91,-2,0}, -{91,-2,1}, -{91,-2,2}, -{91,-2,3}, -{91,-2,4}, -{91,-2,5}, -{91,-2,6}, -{91,-2,7}, -{91,-2,8}, -{91,-2,9}, -{91,-2,10}, -{91,-2,11}, -{91,-2,12}, -{91,-2,13}, -{91,-2,14}, -{91,-2,15}, -{91,-2,16}, -{91,-2,17}, -{91,-2,18}, -{91,-2,19}, -{91,-2,20}, -{91,-2,21}, -{91,-2,22}, -{91,-2,23}, -{91,-2,24}, -{91,-2,25}, -{91,-2,26}, -{91,-2,27}, -{91,-2,28}, -{91,-2,29}, -{91,-2,30}, -{91,-2,31}, -{91,-2,32}, -{91,-2,33}, -{91,-2,34}, -{91,-2,35}, -{91,-2,36}, -{91,-2,37}, -{91,-2,38}, -{91,-2,39}, -{91,-2,40}, -{91,-2,41}, -{91,-2,42}, -{91,-2,43}, -{91,-2,44}, -{91,-2,45}, -{91,-2,46}, -{91,-1,-13}, -{91,-1,-12}, -{91,-1,-11}, -{91,-1,-10}, -{91,-1,-9}, -{91,-1,-8}, -{91,-1,-7}, -{91,-1,-6}, -{91,-1,-5}, -{91,-1,-4}, -{91,-1,-3}, -{91,-1,-2}, -{91,-1,-1}, -{91,-1,0}, -{91,-1,1}, -{91,-1,2}, -{91,-1,3}, -{91,-1,4}, -{91,-1,5}, -{91,-1,6}, -{91,-1,7}, -{91,-1,8}, -{91,-1,9}, -{91,-1,10}, -{91,-1,11}, -{91,-1,12}, -{91,-1,13}, -{91,-1,14}, -{91,-1,15}, -{91,-1,16}, -{91,-1,17}, -{91,-1,18}, -{91,-1,19}, -{91,-1,20}, -{91,-1,21}, -{91,-1,22}, -{91,-1,23}, -{91,-1,24}, -{91,-1,25}, -{91,-1,26}, -{91,-1,27}, -{91,-1,28}, -{91,-1,29}, -{91,-1,30}, -{91,-1,31}, -{91,-1,32}, -{91,-1,33}, -{91,-1,34}, -{91,-1,35}, -{91,-1,36}, -{91,-1,37}, -{91,-1,38}, -{91,-1,39}, -{91,-1,40}, -{91,-1,41}, -{91,-1,42}, -{91,0,-13}, -{91,0,-12}, -{91,0,-11}, -{91,0,-10}, -{91,0,-9}, -{91,0,-8}, -{91,0,-7}, -{91,0,-6}, -{91,0,-5}, -{91,0,-4}, -{91,0,-3}, -{91,0,-2}, -{91,0,-1}, -{91,0,0}, -{91,0,1}, -{91,0,2}, -{91,0,3}, -{91,0,4}, -{91,0,5}, -{91,0,6}, -{91,0,7}, -{91,0,8}, -{91,0,9}, -{91,0,10}, -{91,0,11}, -{91,0,12}, -{91,0,13}, -{91,0,14}, -{91,0,15}, -{91,0,16}, -{91,0,17}, -{91,0,18}, -{91,0,19}, -{91,0,20}, -{91,0,21}, -{91,0,22}, -{91,0,23}, -{91,0,24}, -{91,0,25}, -{91,0,26}, -{91,0,27}, -{91,0,28}, -{91,0,29}, -{91,0,30}, -{91,0,31}, -{91,0,32}, -{91,0,33}, -{91,0,34}, -{91,0,35}, -{91,0,36}, -{91,0,37}, -{91,0,38}, -{91,0,39}, -{91,1,-13}, -{91,1,-12}, -{91,1,-11}, -{91,1,-10}, -{91,1,-9}, -{91,1,-8}, -{91,1,-7}, -{91,1,-6}, -{91,1,-5}, -{91,1,-4}, -{91,1,-3}, -{91,1,-2}, -{91,1,-1}, -{91,1,0}, -{91,1,1}, -{91,1,2}, -{91,1,3}, -{91,1,4}, -{91,1,5}, -{91,1,6}, -{91,1,7}, -{91,1,8}, -{91,1,9}, -{91,1,10}, -{91,1,11}, -{91,1,12}, -{91,1,13}, -{91,1,14}, -{91,1,15}, -{91,1,16}, -{91,1,17}, -{91,1,18}, -{91,1,19}, -{91,1,20}, -{91,1,21}, -{91,1,22}, -{91,1,23}, -{91,1,24}, -{91,1,25}, -{91,1,26}, -{91,1,27}, -{91,1,28}, -{91,1,29}, -{91,1,30}, -{91,1,31}, -{91,1,32}, -{91,1,33}, -{91,1,34}, -{91,1,35}, -{91,2,-13}, -{91,2,-12}, -{91,2,-11}, -{91,2,-10}, -{91,2,-9}, -{91,2,-8}, -{91,2,-7}, -{91,2,-6}, -{91,2,-5}, -{91,2,-4}, -{91,2,-3}, -{91,2,-2}, -{91,2,-1}, -{91,2,0}, -{91,2,1}, -{91,2,2}, -{91,2,3}, -{91,2,4}, -{91,2,5}, -{91,2,6}, -{91,2,7}, -{91,2,8}, -{91,2,9}, -{91,2,10}, -{91,2,11}, -{91,2,12}, -{91,2,13}, -{91,2,14}, -{91,2,15}, -{91,2,16}, -{91,2,17}, -{91,2,18}, -{91,2,19}, -{91,2,20}, -{91,2,21}, -{91,2,22}, -{91,2,23}, -{91,2,24}, -{91,2,25}, -{91,2,26}, -{91,2,27}, -{91,2,28}, -{91,2,29}, -{91,2,30}, -{91,2,31}, -{91,2,32}, -{91,3,-13}, -{91,3,-12}, -{91,3,-11}, -{91,3,-10}, -{91,3,-9}, -{91,3,-8}, -{91,3,-7}, -{91,3,-6}, -{91,3,-5}, -{91,3,-4}, -{91,3,-3}, -{91,3,-2}, -{91,3,-1}, -{91,3,0}, -{91,3,1}, -{91,3,2}, -{91,3,3}, -{91,3,4}, -{91,3,5}, -{91,3,6}, -{91,3,7}, -{91,3,8}, -{91,3,9}, -{91,3,10}, -{91,3,11}, -{91,3,12}, -{91,3,13}, -{91,3,14}, -{91,3,15}, -{91,3,16}, -{91,3,17}, -{91,3,18}, -{91,3,19}, -{91,3,20}, -{91,3,21}, -{91,3,22}, -{91,3,23}, -{91,3,24}, -{91,3,25}, -{91,3,26}, -{91,3,27}, -{91,3,28}, -{91,4,-13}, -{91,4,-12}, -{91,4,-11}, -{91,4,-10}, -{91,4,-9}, -{91,4,-8}, -{91,4,-7}, -{91,4,-6}, -{91,4,-5}, -{91,4,-4}, -{91,4,-3}, -{91,4,-2}, -{91,4,-1}, -{91,4,0}, -{91,4,1}, -{91,4,2}, -{91,4,3}, -{91,4,4}, -{91,4,5}, -{91,4,6}, -{91,4,7}, -{91,4,8}, -{91,4,9}, -{91,4,10}, -{91,4,11}, -{91,4,12}, -{91,4,13}, -{91,4,14}, -{91,4,15}, -{91,4,16}, -{91,4,17}, -{91,4,18}, -{91,4,19}, -{91,4,20}, -{91,4,21}, -{91,4,22}, -{91,4,23}, -{91,4,24}, -{91,4,25}, -{91,5,-13}, -{91,5,-12}, -{91,5,-11}, -{91,5,-10}, -{91,5,-9}, -{91,5,-8}, -{91,5,-7}, -{91,5,-6}, -{91,5,-5}, -{91,5,-4}, -{91,5,-3}, -{91,5,-2}, -{91,5,-1}, -{91,5,0}, -{91,5,1}, -{91,5,2}, -{91,5,3}, -{91,5,4}, -{91,5,5}, -{91,5,6}, -{91,5,7}, -{91,5,8}, -{91,5,9}, -{91,5,10}, -{91,5,11}, -{91,5,12}, -{91,5,13}, -{91,5,14}, -{91,5,15}, -{91,5,16}, -{91,5,17}, -{91,5,18}, -{91,5,19}, -{91,5,20}, -{91,5,21}, -{91,5,22}, -{91,6,-13}, -{91,6,-12}, -{91,6,-11}, -{91,6,-10}, -{91,6,-9}, -{91,6,-8}, -{91,6,-7}, -{91,6,-6}, -{91,6,-5}, -{91,6,-4}, -{91,6,-3}, -{91,6,-2}, -{91,6,-1}, -{91,6,0}, -{91,6,1}, -{91,6,2}, -{91,6,3}, -{91,6,4}, -{91,6,5}, -{91,6,6}, -{91,6,7}, -{91,6,8}, -{91,6,9}, -{91,6,10}, -{91,6,11}, -{91,6,12}, -{91,6,13}, -{91,6,14}, -{91,6,15}, -{91,6,16}, -{91,6,17}, -{91,6,18}, -{91,6,19}, -{91,7,-13}, -{91,7,-12}, -{91,7,-11}, -{91,7,-10}, -{91,7,-9}, -{91,7,-8}, -{91,7,-7}, -{91,7,-6}, -{91,7,-5}, -{91,7,-4}, -{91,7,-3}, -{91,7,-2}, -{91,7,-1}, -{91,7,0}, -{91,7,1}, -{91,7,2}, -{91,7,3}, -{91,7,4}, -{91,7,5}, -{91,7,6}, -{91,7,7}, -{91,7,8}, -{91,7,9}, -{91,7,10}, -{91,7,11}, -{91,7,12}, -{91,7,13}, -{91,7,14}, -{91,7,15}, -{91,7,16}, -{91,8,-13}, -{91,8,-12}, -{91,8,-11}, -{91,8,-10}, -{91,8,-9}, -{91,8,-8}, -{91,8,-7}, -{91,8,-6}, -{91,8,-5}, -{91,8,-4}, -{91,8,-3}, -{91,8,-2}, -{91,8,-1}, -{91,8,0}, -{91,8,1}, -{91,8,2}, -{91,8,3}, -{91,8,4}, -{91,8,5}, -{91,8,6}, -{91,8,7}, -{91,8,8}, -{91,8,9}, -{91,8,10}, -{91,8,11}, -{91,8,12}, -{91,8,13}, -{91,8,14}, -{91,9,-13}, -{91,9,-12}, -{91,9,-11}, -{91,9,-10}, -{91,9,-9}, -{91,9,-8}, -{91,9,-7}, -{91,9,-6}, -{91,9,-5}, -{91,9,-4}, -{91,9,-3}, -{91,9,-2}, -{91,9,-1}, -{91,9,0}, -{91,9,1}, -{91,9,2}, -{91,9,3}, -{91,9,4}, -{91,9,5}, -{91,9,6}, -{91,9,7}, -{91,9,8}, -{91,9,9}, -{91,9,10}, -{91,9,11}, -{91,10,-13}, -{91,10,-12}, -{91,10,-11}, -{91,10,-10}, -{91,10,-9}, -{91,10,-8}, -{91,10,-7}, -{91,10,-6}, -{91,10,-5}, -{91,10,-4}, -{91,10,-3}, -{91,10,-2}, -{91,10,-1}, -{91,10,0}, -{91,10,1}, -{91,10,2}, -{91,10,3}, -{91,10,4}, -{91,10,5}, -{91,10,6}, -{91,10,7}, -{91,10,8}, -{91,11,-13}, -{91,11,-12}, -{91,11,-11}, -{91,11,-10}, -{91,11,-9}, -{91,11,-8}, -{91,11,-7}, -{91,11,-6}, -{91,11,-5}, -{91,11,-4}, -{91,11,-3}, -{91,11,-2}, -{91,11,-1}, -{91,11,0}, -{91,11,1}, -{91,11,2}, -{91,11,3}, -{91,11,4}, -{91,11,5}, -{91,11,6}, -{91,12,-13}, -{91,12,-12}, -{91,12,-11}, -{91,12,-10}, -{91,12,-9}, -{91,12,-8}, -{91,12,-7}, -{91,12,-6}, -{91,12,-5}, -{91,12,-4}, -{91,12,-3}, -{91,12,-2}, -{91,12,-1}, -{91,12,0}, -{91,12,1}, -{91,12,2}, -{91,12,3}, -{91,13,-13}, -{91,13,-12}, -{91,13,-11}, -{91,13,-10}, -{91,13,-9}, -{91,13,-8}, -{91,13,-7}, -{91,13,-6}, -{91,13,-5}, -{91,13,-4}, -{91,13,-3}, -{91,13,-2}, -{91,13,-1}, -{91,13,0}, -{91,13,1}, -{91,14,-13}, -{91,14,-12}, -{91,14,-11}, -{91,14,-10}, -{91,14,-9}, -{91,14,-8}, -{91,14,-7}, -{91,14,-6}, -{91,14,-5}, -{91,14,-4}, -{91,14,-3}, -{91,14,-2}, -{91,15,-13}, -{91,15,-12}, -{91,15,-11}, -{91,15,-10}, -{91,15,-9}, -{91,15,-8}, -{91,15,-7}, -{91,15,-6}, -{91,15,-5}, -{91,15,-4}, -{91,16,-13}, -{91,16,-12}, -{91,16,-11}, -{91,16,-10}, -{91,16,-9}, -{91,16,-8}, -{91,16,-7}, -{91,16,-6}, -{91,17,-13}, -{91,17,-12}, -{91,17,-11}, -{91,17,-10}, -{91,17,-9}, -{91,18,-13}, -{91,18,-12}, -{91,18,-11}, -{91,19,-13}, -{92,-52,70}, -{92,-52,71}, -{92,-52,72}, -{92,-52,73}, -{92,-52,74}, -{92,-52,75}, -{92,-52,76}, -{92,-52,77}, -{92,-52,78}, -{92,-52,79}, -{92,-52,80}, -{92,-52,81}, -{92,-52,82}, -{92,-52,83}, -{92,-52,84}, -{92,-52,85}, -{92,-52,86}, -{92,-52,87}, -{92,-52,88}, -{92,-51,56}, -{92,-51,57}, -{92,-51,58}, -{92,-51,59}, -{92,-51,60}, -{92,-51,61}, -{92,-51,62}, -{92,-51,63}, -{92,-51,64}, -{92,-51,65}, -{92,-51,66}, -{92,-51,67}, -{92,-51,68}, -{92,-51,69}, -{92,-51,70}, -{92,-51,71}, -{92,-51,72}, -{92,-51,73}, -{92,-51,74}, -{92,-51,75}, -{92,-51,76}, -{92,-51,77}, -{92,-51,78}, -{92,-51,79}, -{92,-51,80}, -{92,-51,81}, -{92,-51,82}, -{92,-51,83}, -{92,-51,84}, -{92,-51,85}, -{92,-51,86}, -{92,-51,87}, -{92,-51,88}, -{92,-50,44}, -{92,-50,45}, -{92,-50,46}, -{92,-50,47}, -{92,-50,48}, -{92,-50,49}, -{92,-50,50}, -{92,-50,51}, -{92,-50,52}, -{92,-50,53}, -{92,-50,54}, -{92,-50,55}, -{92,-50,56}, -{92,-50,57}, -{92,-50,58}, -{92,-50,59}, -{92,-50,60}, -{92,-50,61}, -{92,-50,62}, -{92,-50,63}, -{92,-50,64}, -{92,-50,65}, -{92,-50,66}, -{92,-50,67}, -{92,-50,68}, -{92,-50,69}, -{92,-50,70}, -{92,-50,71}, -{92,-50,72}, -{92,-50,73}, -{92,-50,74}, -{92,-50,75}, -{92,-50,76}, -{92,-50,77}, -{92,-50,78}, -{92,-50,79}, -{92,-50,80}, -{92,-50,81}, -{92,-50,82}, -{92,-50,83}, -{92,-50,84}, -{92,-50,85}, -{92,-50,86}, -{92,-50,87}, -{92,-50,88}, -{92,-49,34}, -{92,-49,35}, -{92,-49,36}, -{92,-49,37}, -{92,-49,38}, -{92,-49,39}, -{92,-49,40}, -{92,-49,41}, -{92,-49,42}, -{92,-49,43}, -{92,-49,44}, -{92,-49,45}, -{92,-49,46}, -{92,-49,47}, -{92,-49,48}, -{92,-49,49}, -{92,-49,50}, -{92,-49,51}, -{92,-49,52}, -{92,-49,53}, -{92,-49,54}, -{92,-49,55}, -{92,-49,56}, -{92,-49,57}, -{92,-49,58}, -{92,-49,59}, -{92,-49,60}, -{92,-49,61}, -{92,-49,62}, -{92,-49,63}, -{92,-49,64}, -{92,-49,65}, -{92,-49,66}, -{92,-49,67}, -{92,-49,68}, -{92,-49,69}, -{92,-49,70}, -{92,-49,71}, -{92,-49,72}, -{92,-49,73}, -{92,-49,74}, -{92,-49,75}, -{92,-49,76}, -{92,-49,77}, -{92,-49,78}, -{92,-49,79}, -{92,-49,80}, -{92,-49,81}, -{92,-49,82}, -{92,-49,83}, -{92,-49,84}, -{92,-49,85}, -{92,-49,86}, -{92,-49,87}, -{92,-49,88}, -{92,-48,25}, -{92,-48,26}, -{92,-48,27}, -{92,-48,28}, -{92,-48,29}, -{92,-48,30}, -{92,-48,31}, -{92,-48,32}, -{92,-48,33}, -{92,-48,34}, -{92,-48,35}, -{92,-48,36}, -{92,-48,37}, -{92,-48,38}, -{92,-48,39}, -{92,-48,40}, -{92,-48,41}, -{92,-48,42}, -{92,-48,43}, -{92,-48,44}, -{92,-48,45}, -{92,-48,46}, -{92,-48,47}, -{92,-48,48}, -{92,-48,49}, -{92,-48,50}, -{92,-48,51}, -{92,-48,52}, -{92,-48,53}, -{92,-48,54}, -{92,-48,55}, -{92,-48,56}, -{92,-48,57}, -{92,-48,58}, -{92,-48,59}, -{92,-48,60}, -{92,-48,61}, -{92,-48,62}, -{92,-48,63}, -{92,-48,64}, -{92,-48,65}, -{92,-48,66}, -{92,-48,67}, -{92,-48,68}, -{92,-48,69}, -{92,-48,70}, -{92,-48,71}, -{92,-48,72}, -{92,-48,73}, -{92,-48,74}, -{92,-48,75}, -{92,-48,76}, -{92,-48,77}, -{92,-48,78}, -{92,-48,79}, -{92,-48,80}, -{92,-48,81}, -{92,-48,82}, -{92,-48,83}, -{92,-48,84}, -{92,-48,85}, -{92,-48,86}, -{92,-48,87}, -{92,-48,88}, -{92,-47,17}, -{92,-47,18}, -{92,-47,19}, -{92,-47,20}, -{92,-47,21}, -{92,-47,22}, -{92,-47,23}, -{92,-47,24}, -{92,-47,25}, -{92,-47,26}, -{92,-47,27}, -{92,-47,28}, -{92,-47,29}, -{92,-47,30}, -{92,-47,31}, -{92,-47,32}, -{92,-47,33}, -{92,-47,34}, -{92,-47,35}, -{92,-47,36}, -{92,-47,37}, -{92,-47,38}, -{92,-47,39}, -{92,-47,40}, -{92,-47,41}, -{92,-47,42}, -{92,-47,43}, -{92,-47,44}, -{92,-47,45}, -{92,-47,46}, -{92,-47,47}, -{92,-47,48}, -{92,-47,49}, -{92,-47,50}, -{92,-47,51}, -{92,-47,52}, -{92,-47,53}, -{92,-47,54}, -{92,-47,55}, -{92,-47,56}, -{92,-47,57}, -{92,-47,58}, -{92,-47,59}, -{92,-47,60}, -{92,-47,61}, -{92,-47,62}, -{92,-47,63}, -{92,-47,64}, -{92,-47,65}, -{92,-47,66}, -{92,-47,67}, -{92,-47,68}, -{92,-47,69}, -{92,-47,70}, -{92,-47,71}, -{92,-47,72}, -{92,-47,73}, -{92,-47,74}, -{92,-47,75}, -{92,-47,76}, -{92,-47,77}, -{92,-47,78}, -{92,-47,79}, -{92,-47,80}, -{92,-47,81}, -{92,-47,82}, -{92,-47,83}, -{92,-47,84}, -{92,-47,85}, -{92,-47,86}, -{92,-47,87}, -{92,-47,88}, -{92,-46,9}, -{92,-46,10}, -{92,-46,11}, -{92,-46,12}, -{92,-46,13}, -{92,-46,14}, -{92,-46,15}, -{92,-46,16}, -{92,-46,17}, -{92,-46,18}, -{92,-46,19}, -{92,-46,20}, -{92,-46,21}, -{92,-46,22}, -{92,-46,23}, -{92,-46,24}, -{92,-46,25}, -{92,-46,26}, -{92,-46,27}, -{92,-46,28}, -{92,-46,29}, -{92,-46,30}, -{92,-46,31}, -{92,-46,32}, -{92,-46,33}, -{92,-46,34}, -{92,-46,35}, -{92,-46,36}, -{92,-46,37}, -{92,-46,38}, -{92,-46,39}, -{92,-46,40}, -{92,-46,41}, -{92,-46,42}, -{92,-46,43}, -{92,-46,44}, -{92,-46,45}, -{92,-46,46}, -{92,-46,47}, -{92,-46,48}, -{92,-46,49}, -{92,-46,50}, -{92,-46,51}, -{92,-46,52}, -{92,-46,53}, -{92,-46,54}, -{92,-46,55}, -{92,-46,56}, -{92,-46,57}, -{92,-46,58}, -{92,-46,59}, -{92,-46,60}, -{92,-46,61}, -{92,-46,62}, -{92,-46,63}, -{92,-46,64}, -{92,-46,65}, -{92,-46,66}, -{92,-46,67}, -{92,-46,68}, -{92,-46,69}, -{92,-46,70}, -{92,-46,71}, -{92,-46,72}, -{92,-46,73}, -{92,-46,74}, -{92,-46,75}, -{92,-46,76}, -{92,-46,77}, -{92,-46,78}, -{92,-46,79}, -{92,-46,80}, -{92,-46,81}, -{92,-46,82}, -{92,-46,83}, -{92,-46,84}, -{92,-46,85}, -{92,-46,86}, -{92,-46,87}, -{92,-46,88}, -{92,-45,2}, -{92,-45,3}, -{92,-45,4}, -{92,-45,5}, -{92,-45,6}, -{92,-45,7}, -{92,-45,8}, -{92,-45,9}, -{92,-45,10}, -{92,-45,11}, -{92,-45,12}, -{92,-45,13}, -{92,-45,14}, -{92,-45,15}, -{92,-45,16}, -{92,-45,17}, -{92,-45,18}, -{92,-45,19}, -{92,-45,20}, -{92,-45,21}, -{92,-45,22}, -{92,-45,23}, -{92,-45,24}, -{92,-45,25}, -{92,-45,26}, -{92,-45,27}, -{92,-45,28}, -{92,-45,29}, -{92,-45,30}, -{92,-45,31}, -{92,-45,32}, -{92,-45,33}, -{92,-45,34}, -{92,-45,35}, -{92,-45,36}, -{92,-45,37}, -{92,-45,38}, -{92,-45,39}, -{92,-45,40}, -{92,-45,41}, -{92,-45,42}, -{92,-45,43}, -{92,-45,44}, -{92,-45,45}, -{92,-45,46}, -{92,-45,47}, -{92,-45,48}, -{92,-45,49}, -{92,-45,50}, -{92,-45,51}, -{92,-45,52}, -{92,-45,53}, -{92,-45,54}, -{92,-45,55}, -{92,-45,56}, -{92,-45,57}, -{92,-45,58}, -{92,-45,59}, -{92,-45,60}, -{92,-45,61}, -{92,-45,62}, -{92,-45,63}, -{92,-45,64}, -{92,-45,65}, -{92,-45,66}, -{92,-45,67}, -{92,-45,68}, -{92,-45,69}, -{92,-45,70}, -{92,-45,71}, -{92,-45,72}, -{92,-45,73}, -{92,-45,74}, -{92,-45,75}, -{92,-45,76}, -{92,-45,77}, -{92,-45,78}, -{92,-45,79}, -{92,-45,80}, -{92,-45,81}, -{92,-45,82}, -{92,-45,83}, -{92,-45,84}, -{92,-45,85}, -{92,-45,86}, -{92,-45,87}, -{92,-45,88}, -{92,-44,-5}, -{92,-44,-4}, -{92,-44,-3}, -{92,-44,-2}, -{92,-44,-1}, -{92,-44,0}, -{92,-44,1}, -{92,-44,2}, -{92,-44,3}, -{92,-44,4}, -{92,-44,5}, -{92,-44,6}, -{92,-44,7}, -{92,-44,8}, -{92,-44,9}, -{92,-44,10}, -{92,-44,11}, -{92,-44,12}, -{92,-44,13}, -{92,-44,14}, -{92,-44,15}, -{92,-44,16}, -{92,-44,17}, -{92,-44,18}, -{92,-44,19}, -{92,-44,20}, -{92,-44,21}, -{92,-44,22}, -{92,-44,23}, -{92,-44,24}, -{92,-44,25}, -{92,-44,26}, -{92,-44,27}, -{92,-44,28}, -{92,-44,29}, -{92,-44,30}, -{92,-44,31}, -{92,-44,32}, -{92,-44,33}, -{92,-44,34}, -{92,-44,35}, -{92,-44,36}, -{92,-44,37}, -{92,-44,38}, -{92,-44,39}, -{92,-44,40}, -{92,-44,41}, -{92,-44,42}, -{92,-44,43}, -{92,-44,44}, -{92,-44,45}, -{92,-44,46}, -{92,-44,47}, -{92,-44,48}, -{92,-44,49}, -{92,-44,50}, -{92,-44,51}, -{92,-44,52}, -{92,-44,53}, -{92,-44,54}, -{92,-44,55}, -{92,-44,56}, -{92,-44,57}, -{92,-44,58}, -{92,-44,59}, -{92,-44,60}, -{92,-44,61}, -{92,-44,62}, -{92,-44,63}, -{92,-44,64}, -{92,-44,65}, -{92,-44,66}, -{92,-44,67}, -{92,-44,68}, -{92,-44,69}, -{92,-44,70}, -{92,-44,71}, -{92,-44,72}, -{92,-44,73}, -{92,-44,74}, -{92,-44,75}, -{92,-44,76}, -{92,-44,77}, -{92,-44,78}, -{92,-44,79}, -{92,-44,80}, -{92,-44,81}, -{92,-44,82}, -{92,-44,83}, -{92,-44,84}, -{92,-44,85}, -{92,-44,86}, -{92,-44,87}, -{92,-44,88}, -{92,-43,-11}, -{92,-43,-10}, -{92,-43,-9}, -{92,-43,-8}, -{92,-43,-7}, -{92,-43,-6}, -{92,-43,-5}, -{92,-43,-4}, -{92,-43,-3}, -{92,-43,-2}, -{92,-43,-1}, -{92,-43,0}, -{92,-43,1}, -{92,-43,2}, -{92,-43,3}, -{92,-43,4}, -{92,-43,5}, -{92,-43,6}, -{92,-43,7}, -{92,-43,8}, -{92,-43,9}, -{92,-43,10}, -{92,-43,11}, -{92,-43,12}, -{92,-43,13}, -{92,-43,14}, -{92,-43,15}, -{92,-43,16}, -{92,-43,17}, -{92,-43,18}, -{92,-43,19}, -{92,-43,20}, -{92,-43,21}, -{92,-43,22}, -{92,-43,23}, -{92,-43,24}, -{92,-43,25}, -{92,-43,26}, -{92,-43,27}, -{92,-43,28}, -{92,-43,29}, -{92,-43,30}, -{92,-43,31}, -{92,-43,32}, -{92,-43,33}, -{92,-43,34}, -{92,-43,35}, -{92,-43,36}, -{92,-43,37}, -{92,-43,38}, -{92,-43,39}, -{92,-43,40}, -{92,-43,41}, -{92,-43,42}, -{92,-43,43}, -{92,-43,44}, -{92,-43,45}, -{92,-43,46}, -{92,-43,47}, -{92,-43,48}, -{92,-43,49}, -{92,-43,50}, -{92,-43,51}, -{92,-43,52}, -{92,-43,53}, -{92,-43,54}, -{92,-43,55}, -{92,-43,56}, -{92,-43,57}, -{92,-43,58}, -{92,-43,59}, -{92,-43,60}, -{92,-43,61}, -{92,-43,62}, -{92,-43,63}, -{92,-43,64}, -{92,-43,65}, -{92,-43,66}, -{92,-43,67}, -{92,-43,68}, -{92,-43,69}, -{92,-43,70}, -{92,-43,71}, -{92,-43,72}, -{92,-43,73}, -{92,-43,74}, -{92,-43,75}, -{92,-43,76}, -{92,-43,77}, -{92,-43,78}, -{92,-43,79}, -{92,-43,80}, -{92,-43,81}, -{92,-43,82}, -{92,-43,83}, -{92,-43,84}, -{92,-43,85}, -{92,-43,86}, -{92,-43,87}, -{92,-43,88}, -{92,-43,89}, -{92,-42,-12}, -{92,-42,-11}, -{92,-42,-10}, -{92,-42,-9}, -{92,-42,-8}, -{92,-42,-7}, -{92,-42,-6}, -{92,-42,-5}, -{92,-42,-4}, -{92,-42,-3}, -{92,-42,-2}, -{92,-42,-1}, -{92,-42,0}, -{92,-42,1}, -{92,-42,2}, -{92,-42,3}, -{92,-42,4}, -{92,-42,5}, -{92,-42,6}, -{92,-42,7}, -{92,-42,8}, -{92,-42,9}, -{92,-42,10}, -{92,-42,11}, -{92,-42,12}, -{92,-42,13}, -{92,-42,14}, -{92,-42,15}, -{92,-42,16}, -{92,-42,17}, -{92,-42,18}, -{92,-42,19}, -{92,-42,20}, -{92,-42,21}, -{92,-42,22}, -{92,-42,23}, -{92,-42,24}, -{92,-42,25}, -{92,-42,26}, -{92,-42,27}, -{92,-42,28}, -{92,-42,29}, -{92,-42,30}, -{92,-42,31}, -{92,-42,32}, -{92,-42,33}, -{92,-42,34}, -{92,-42,35}, -{92,-42,36}, -{92,-42,37}, -{92,-42,38}, -{92,-42,39}, -{92,-42,40}, -{92,-42,41}, -{92,-42,42}, -{92,-42,43}, -{92,-42,44}, -{92,-42,45}, -{92,-42,46}, -{92,-42,47}, -{92,-42,48}, -{92,-42,49}, -{92,-42,50}, -{92,-42,51}, -{92,-42,52}, -{92,-42,53}, -{92,-42,54}, -{92,-42,55}, -{92,-42,56}, -{92,-42,57}, -{92,-42,58}, -{92,-42,59}, -{92,-42,60}, -{92,-42,61}, -{92,-42,62}, -{92,-42,63}, -{92,-42,64}, -{92,-42,65}, -{92,-42,66}, -{92,-42,67}, -{92,-42,68}, -{92,-42,69}, -{92,-42,70}, -{92,-42,71}, -{92,-42,72}, -{92,-42,73}, -{92,-42,74}, -{92,-42,75}, -{92,-42,76}, -{92,-42,77}, -{92,-42,78}, -{92,-42,79}, -{92,-42,80}, -{92,-42,81}, -{92,-42,82}, -{92,-42,83}, -{92,-42,84}, -{92,-42,85}, -{92,-42,86}, -{92,-42,87}, -{92,-42,88}, -{92,-42,89}, -{92,-41,-12}, -{92,-41,-11}, -{92,-41,-10}, -{92,-41,-9}, -{92,-41,-8}, -{92,-41,-7}, -{92,-41,-6}, -{92,-41,-5}, -{92,-41,-4}, -{92,-41,-3}, -{92,-41,-2}, -{92,-41,-1}, -{92,-41,0}, -{92,-41,1}, -{92,-41,2}, -{92,-41,3}, -{92,-41,4}, -{92,-41,5}, -{92,-41,6}, -{92,-41,7}, -{92,-41,8}, -{92,-41,9}, -{92,-41,10}, -{92,-41,11}, -{92,-41,12}, -{92,-41,13}, -{92,-41,14}, -{92,-41,15}, -{92,-41,16}, -{92,-41,17}, -{92,-41,18}, -{92,-41,19}, -{92,-41,20}, -{92,-41,21}, -{92,-41,22}, -{92,-41,23}, -{92,-41,24}, -{92,-41,25}, -{92,-41,26}, -{92,-41,27}, -{92,-41,28}, -{92,-41,29}, -{92,-41,30}, -{92,-41,31}, -{92,-41,32}, -{92,-41,33}, -{92,-41,34}, -{92,-41,35}, -{92,-41,36}, -{92,-41,37}, -{92,-41,38}, -{92,-41,39}, -{92,-41,40}, -{92,-41,41}, -{92,-41,42}, -{92,-41,43}, -{92,-41,44}, -{92,-41,45}, -{92,-41,46}, -{92,-41,47}, -{92,-41,48}, -{92,-41,49}, -{92,-41,50}, -{92,-41,51}, -{92,-41,52}, -{92,-41,53}, -{92,-41,54}, -{92,-41,55}, -{92,-41,56}, -{92,-41,57}, -{92,-41,58}, -{92,-41,59}, -{92,-41,60}, -{92,-41,61}, -{92,-41,62}, -{92,-41,63}, -{92,-41,64}, -{92,-41,65}, -{92,-41,66}, -{92,-41,67}, -{92,-41,68}, -{92,-41,69}, -{92,-41,70}, -{92,-41,71}, -{92,-41,72}, -{92,-41,73}, -{92,-41,74}, -{92,-41,75}, -{92,-41,76}, -{92,-41,77}, -{92,-41,78}, -{92,-41,79}, -{92,-41,80}, -{92,-41,81}, -{92,-41,82}, -{92,-41,83}, -{92,-41,84}, -{92,-41,85}, -{92,-41,86}, -{92,-41,87}, -{92,-41,88}, -{92,-41,89}, -{92,-40,-12}, -{92,-40,-11}, -{92,-40,-10}, -{92,-40,-9}, -{92,-40,-8}, -{92,-40,-7}, -{92,-40,-6}, -{92,-40,-5}, -{92,-40,-4}, -{92,-40,-3}, -{92,-40,-2}, -{92,-40,-1}, -{92,-40,0}, -{92,-40,1}, -{92,-40,2}, -{92,-40,3}, -{92,-40,4}, -{92,-40,5}, -{92,-40,6}, -{92,-40,7}, -{92,-40,8}, -{92,-40,9}, -{92,-40,10}, -{92,-40,11}, -{92,-40,12}, -{92,-40,13}, -{92,-40,14}, -{92,-40,15}, -{92,-40,16}, -{92,-40,17}, -{92,-40,18}, -{92,-40,19}, -{92,-40,20}, -{92,-40,21}, -{92,-40,22}, -{92,-40,23}, -{92,-40,24}, -{92,-40,25}, -{92,-40,26}, -{92,-40,27}, -{92,-40,28}, -{92,-40,29}, -{92,-40,30}, -{92,-40,31}, -{92,-40,32}, -{92,-40,33}, -{92,-40,34}, -{92,-40,35}, -{92,-40,36}, -{92,-40,37}, -{92,-40,38}, -{92,-40,39}, -{92,-40,40}, -{92,-40,41}, -{92,-40,42}, -{92,-40,43}, -{92,-40,44}, -{92,-40,45}, -{92,-40,46}, -{92,-40,47}, -{92,-40,48}, -{92,-40,49}, -{92,-40,50}, -{92,-40,51}, -{92,-40,52}, -{92,-40,53}, -{92,-40,54}, -{92,-40,55}, -{92,-40,56}, -{92,-40,57}, -{92,-40,58}, -{92,-40,59}, -{92,-40,60}, -{92,-40,61}, -{92,-40,62}, -{92,-40,63}, -{92,-40,64}, -{92,-40,65}, -{92,-40,66}, -{92,-40,67}, -{92,-40,68}, -{92,-40,69}, -{92,-40,70}, -{92,-40,71}, -{92,-40,72}, -{92,-40,73}, -{92,-40,74}, -{92,-40,75}, -{92,-40,76}, -{92,-40,77}, -{92,-40,78}, -{92,-40,79}, -{92,-40,80}, -{92,-40,81}, -{92,-40,82}, -{92,-40,83}, -{92,-40,84}, -{92,-40,85}, -{92,-40,86}, -{92,-40,87}, -{92,-40,88}, -{92,-40,89}, -{92,-39,-12}, -{92,-39,-11}, -{92,-39,-10}, -{92,-39,-9}, -{92,-39,-8}, -{92,-39,-7}, -{92,-39,-6}, -{92,-39,-5}, -{92,-39,-4}, -{92,-39,-3}, -{92,-39,-2}, -{92,-39,-1}, -{92,-39,0}, -{92,-39,1}, -{92,-39,2}, -{92,-39,3}, -{92,-39,4}, -{92,-39,5}, -{92,-39,6}, -{92,-39,7}, -{92,-39,8}, -{92,-39,9}, -{92,-39,10}, -{92,-39,11}, -{92,-39,12}, -{92,-39,13}, -{92,-39,14}, -{92,-39,15}, -{92,-39,16}, -{92,-39,17}, -{92,-39,18}, -{92,-39,19}, -{92,-39,20}, -{92,-39,21}, -{92,-39,22}, -{92,-39,23}, -{92,-39,24}, -{92,-39,25}, -{92,-39,26}, -{92,-39,27}, -{92,-39,28}, -{92,-39,29}, -{92,-39,30}, -{92,-39,31}, -{92,-39,32}, -{92,-39,33}, -{92,-39,34}, -{92,-39,35}, -{92,-39,36}, -{92,-39,37}, -{92,-39,38}, -{92,-39,39}, -{92,-39,40}, -{92,-39,41}, -{92,-39,42}, -{92,-39,43}, -{92,-39,44}, -{92,-39,45}, -{92,-39,46}, -{92,-39,47}, -{92,-39,48}, -{92,-39,49}, -{92,-39,50}, -{92,-39,51}, -{92,-39,52}, -{92,-39,53}, -{92,-39,54}, -{92,-39,55}, -{92,-39,56}, -{92,-39,57}, -{92,-39,58}, -{92,-39,59}, -{92,-39,60}, -{92,-39,61}, -{92,-39,62}, -{92,-39,63}, -{92,-39,64}, -{92,-39,65}, -{92,-39,66}, -{92,-39,67}, -{92,-39,68}, -{92,-39,69}, -{92,-39,70}, -{92,-39,71}, -{92,-39,72}, -{92,-39,73}, -{92,-39,74}, -{92,-39,75}, -{92,-39,76}, -{92,-39,77}, -{92,-39,78}, -{92,-39,79}, -{92,-39,80}, -{92,-39,81}, -{92,-39,82}, -{92,-39,83}, -{92,-39,84}, -{92,-39,85}, -{92,-39,86}, -{92,-39,87}, -{92,-39,88}, -{92,-39,89}, -{92,-38,-12}, -{92,-38,-11}, -{92,-38,-10}, -{92,-38,-9}, -{92,-38,-8}, -{92,-38,-7}, -{92,-38,-6}, -{92,-38,-5}, -{92,-38,-4}, -{92,-38,-3}, -{92,-38,-2}, -{92,-38,-1}, -{92,-38,0}, -{92,-38,1}, -{92,-38,2}, -{92,-38,3}, -{92,-38,4}, -{92,-38,5}, -{92,-38,6}, -{92,-38,7}, -{92,-38,8}, -{92,-38,9}, -{92,-38,10}, -{92,-38,11}, -{92,-38,12}, -{92,-38,13}, -{92,-38,14}, -{92,-38,15}, -{92,-38,16}, -{92,-38,17}, -{92,-38,18}, -{92,-38,19}, -{92,-38,20}, -{92,-38,21}, -{92,-38,22}, -{92,-38,23}, -{92,-38,24}, -{92,-38,25}, -{92,-38,26}, -{92,-38,27}, -{92,-38,28}, -{92,-38,29}, -{92,-38,30}, -{92,-38,31}, -{92,-38,32}, -{92,-38,33}, -{92,-38,34}, -{92,-38,35}, -{92,-38,36}, -{92,-38,37}, -{92,-38,38}, -{92,-38,39}, -{92,-38,40}, -{92,-38,41}, -{92,-38,42}, -{92,-38,43}, -{92,-38,44}, -{92,-38,45}, -{92,-38,46}, -{92,-38,47}, -{92,-38,48}, -{92,-38,49}, -{92,-38,50}, -{92,-38,51}, -{92,-38,52}, -{92,-38,53}, -{92,-38,54}, -{92,-38,55}, -{92,-38,56}, -{92,-38,57}, -{92,-38,58}, -{92,-38,59}, -{92,-38,60}, -{92,-38,61}, -{92,-38,62}, -{92,-38,63}, -{92,-38,64}, -{92,-38,65}, -{92,-38,66}, -{92,-38,67}, -{92,-38,68}, -{92,-38,69}, -{92,-38,70}, -{92,-38,71}, -{92,-38,72}, -{92,-38,73}, -{92,-38,74}, -{92,-38,75}, -{92,-38,76}, -{92,-38,77}, -{92,-38,78}, -{92,-38,79}, -{92,-38,80}, -{92,-38,81}, -{92,-38,82}, -{92,-38,83}, -{92,-38,84}, -{92,-38,85}, -{92,-38,86}, -{92,-38,87}, -{92,-38,88}, -{92,-38,89}, -{92,-37,-12}, -{92,-37,-11}, -{92,-37,-10}, -{92,-37,-9}, -{92,-37,-8}, -{92,-37,-7}, -{92,-37,-6}, -{92,-37,-5}, -{92,-37,-4}, -{92,-37,-3}, -{92,-37,-2}, -{92,-37,-1}, -{92,-37,0}, -{92,-37,1}, -{92,-37,2}, -{92,-37,3}, -{92,-37,4}, -{92,-37,5}, -{92,-37,6}, -{92,-37,7}, -{92,-37,8}, -{92,-37,9}, -{92,-37,10}, -{92,-37,11}, -{92,-37,12}, -{92,-37,13}, -{92,-37,14}, -{92,-37,15}, -{92,-37,16}, -{92,-37,17}, -{92,-37,18}, -{92,-37,19}, -{92,-37,20}, -{92,-37,21}, -{92,-37,22}, -{92,-37,23}, -{92,-37,24}, -{92,-37,25}, -{92,-37,26}, -{92,-37,27}, -{92,-37,28}, -{92,-37,29}, -{92,-37,30}, -{92,-37,31}, -{92,-37,32}, -{92,-37,33}, -{92,-37,34}, -{92,-37,35}, -{92,-37,36}, -{92,-37,37}, -{92,-37,38}, -{92,-37,39}, -{92,-37,40}, -{92,-37,41}, -{92,-37,42}, -{92,-37,43}, -{92,-37,44}, -{92,-37,45}, -{92,-37,46}, -{92,-37,47}, -{92,-37,48}, -{92,-37,49}, -{92,-37,50}, -{92,-37,51}, -{92,-37,52}, -{92,-37,53}, -{92,-37,54}, -{92,-37,55}, -{92,-37,56}, -{92,-37,57}, -{92,-37,58}, -{92,-37,59}, -{92,-37,60}, -{92,-37,61}, -{92,-37,62}, -{92,-37,63}, -{92,-37,64}, -{92,-37,65}, -{92,-37,66}, -{92,-37,67}, -{92,-37,68}, -{92,-37,69}, -{92,-37,70}, -{92,-37,71}, -{92,-37,72}, -{92,-37,73}, -{92,-37,74}, -{92,-37,75}, -{92,-37,76}, -{92,-37,77}, -{92,-37,78}, -{92,-37,79}, -{92,-37,80}, -{92,-37,81}, -{92,-37,82}, -{92,-37,83}, -{92,-37,84}, -{92,-37,85}, -{92,-37,86}, -{92,-37,87}, -{92,-37,88}, -{92,-37,89}, -{92,-36,-12}, -{92,-36,-11}, -{92,-36,-10}, -{92,-36,-9}, -{92,-36,-8}, -{92,-36,-7}, -{92,-36,-6}, -{92,-36,-5}, -{92,-36,-4}, -{92,-36,-3}, -{92,-36,-2}, -{92,-36,-1}, -{92,-36,0}, -{92,-36,1}, -{92,-36,2}, -{92,-36,3}, -{92,-36,4}, -{92,-36,5}, -{92,-36,6}, -{92,-36,7}, -{92,-36,8}, -{92,-36,9}, -{92,-36,10}, -{92,-36,11}, -{92,-36,12}, -{92,-36,13}, -{92,-36,14}, -{92,-36,15}, -{92,-36,16}, -{92,-36,17}, -{92,-36,18}, -{92,-36,19}, -{92,-36,20}, -{92,-36,21}, -{92,-36,22}, -{92,-36,23}, -{92,-36,24}, -{92,-36,25}, -{92,-36,26}, -{92,-36,27}, -{92,-36,28}, -{92,-36,29}, -{92,-36,30}, -{92,-36,31}, -{92,-36,32}, -{92,-36,33}, -{92,-36,34}, -{92,-36,35}, -{92,-36,36}, -{92,-36,37}, -{92,-36,38}, -{92,-36,39}, -{92,-36,40}, -{92,-36,41}, -{92,-36,42}, -{92,-36,43}, -{92,-36,44}, -{92,-36,45}, -{92,-36,46}, -{92,-36,47}, -{92,-36,48}, -{92,-36,49}, -{92,-36,50}, -{92,-36,51}, -{92,-36,52}, -{92,-36,53}, -{92,-36,54}, -{92,-36,55}, -{92,-36,56}, -{92,-36,57}, -{92,-36,58}, -{92,-36,59}, -{92,-36,60}, -{92,-36,61}, -{92,-36,62}, -{92,-36,63}, -{92,-36,64}, -{92,-36,65}, -{92,-36,66}, -{92,-36,67}, -{92,-36,68}, -{92,-36,69}, -{92,-36,70}, -{92,-36,71}, -{92,-36,72}, -{92,-36,73}, -{92,-36,74}, -{92,-36,75}, -{92,-36,76}, -{92,-36,77}, -{92,-36,78}, -{92,-36,79}, -{92,-36,80}, -{92,-36,81}, -{92,-36,82}, -{92,-36,83}, -{92,-36,84}, -{92,-36,85}, -{92,-36,86}, -{92,-36,87}, -{92,-36,88}, -{92,-36,89}, -{92,-35,-12}, -{92,-35,-11}, -{92,-35,-10}, -{92,-35,-9}, -{92,-35,-8}, -{92,-35,-7}, -{92,-35,-6}, -{92,-35,-5}, -{92,-35,-4}, -{92,-35,-3}, -{92,-35,-2}, -{92,-35,-1}, -{92,-35,0}, -{92,-35,1}, -{92,-35,2}, -{92,-35,3}, -{92,-35,4}, -{92,-35,5}, -{92,-35,6}, -{92,-35,7}, -{92,-35,8}, -{92,-35,9}, -{92,-35,10}, -{92,-35,11}, -{92,-35,12}, -{92,-35,13}, -{92,-35,14}, -{92,-35,15}, -{92,-35,16}, -{92,-35,17}, -{92,-35,18}, -{92,-35,19}, -{92,-35,20}, -{92,-35,21}, -{92,-35,22}, -{92,-35,23}, -{92,-35,24}, -{92,-35,25}, -{92,-35,26}, -{92,-35,27}, -{92,-35,28}, -{92,-35,29}, -{92,-35,30}, -{92,-35,31}, -{92,-35,32}, -{92,-35,33}, -{92,-35,34}, -{92,-35,35}, -{92,-35,36}, -{92,-35,37}, -{92,-35,38}, -{92,-35,39}, -{92,-35,40}, -{92,-35,41}, -{92,-35,42}, -{92,-35,43}, -{92,-35,44}, -{92,-35,45}, -{92,-35,46}, -{92,-35,47}, -{92,-35,48}, -{92,-35,49}, -{92,-35,50}, -{92,-35,51}, -{92,-35,52}, -{92,-35,53}, -{92,-35,54}, -{92,-35,55}, -{92,-35,56}, -{92,-35,57}, -{92,-35,58}, -{92,-35,59}, -{92,-35,60}, -{92,-35,61}, -{92,-35,62}, -{92,-35,63}, -{92,-35,64}, -{92,-35,65}, -{92,-35,66}, -{92,-35,67}, -{92,-35,68}, -{92,-35,69}, -{92,-35,70}, -{92,-35,71}, -{92,-35,72}, -{92,-35,73}, -{92,-35,74}, -{92,-35,75}, -{92,-35,76}, -{92,-35,77}, -{92,-35,78}, -{92,-35,79}, -{92,-35,80}, -{92,-35,81}, -{92,-35,82}, -{92,-35,83}, -{92,-35,84}, -{92,-35,85}, -{92,-35,86}, -{92,-35,87}, -{92,-35,88}, -{92,-35,89}, -{92,-34,-12}, -{92,-34,-11}, -{92,-34,-10}, -{92,-34,-9}, -{92,-34,-8}, -{92,-34,-7}, -{92,-34,-6}, -{92,-34,-5}, -{92,-34,-4}, -{92,-34,-3}, -{92,-34,-2}, -{92,-34,-1}, -{92,-34,0}, -{92,-34,1}, -{92,-34,2}, -{92,-34,3}, -{92,-34,4}, -{92,-34,5}, -{92,-34,6}, -{92,-34,7}, -{92,-34,8}, -{92,-34,9}, -{92,-34,10}, -{92,-34,11}, -{92,-34,12}, -{92,-34,13}, -{92,-34,14}, -{92,-34,15}, -{92,-34,16}, -{92,-34,17}, -{92,-34,18}, -{92,-34,19}, -{92,-34,20}, -{92,-34,21}, -{92,-34,22}, -{92,-34,23}, -{92,-34,24}, -{92,-34,25}, -{92,-34,26}, -{92,-34,27}, -{92,-34,28}, -{92,-34,29}, -{92,-34,30}, -{92,-34,31}, -{92,-34,32}, -{92,-34,33}, -{92,-34,34}, -{92,-34,35}, -{92,-34,36}, -{92,-34,37}, -{92,-34,38}, -{92,-34,39}, -{92,-34,40}, -{92,-34,41}, -{92,-34,42}, -{92,-34,43}, -{92,-34,44}, -{92,-34,45}, -{92,-34,46}, -{92,-34,47}, -{92,-34,48}, -{92,-34,49}, -{92,-34,50}, -{92,-34,51}, -{92,-34,52}, -{92,-34,53}, -{92,-34,54}, -{92,-34,55}, -{92,-34,56}, -{92,-34,57}, -{92,-34,58}, -{92,-34,59}, -{92,-34,60}, -{92,-34,61}, -{92,-34,62}, -{92,-34,63}, -{92,-34,64}, -{92,-34,65}, -{92,-34,66}, -{92,-34,67}, -{92,-34,68}, -{92,-34,69}, -{92,-34,70}, -{92,-34,71}, -{92,-34,72}, -{92,-34,73}, -{92,-34,74}, -{92,-34,75}, -{92,-34,76}, -{92,-34,77}, -{92,-34,78}, -{92,-34,79}, -{92,-34,80}, -{92,-34,81}, -{92,-34,82}, -{92,-34,83}, -{92,-34,84}, -{92,-34,85}, -{92,-34,86}, -{92,-34,87}, -{92,-34,88}, -{92,-34,89}, -{92,-33,-12}, -{92,-33,-11}, -{92,-33,-10}, -{92,-33,-9}, -{92,-33,-8}, -{92,-33,-7}, -{92,-33,-6}, -{92,-33,-5}, -{92,-33,-4}, -{92,-33,-3}, -{92,-33,-2}, -{92,-33,-1}, -{92,-33,0}, -{92,-33,1}, -{92,-33,2}, -{92,-33,3}, -{92,-33,4}, -{92,-33,5}, -{92,-33,6}, -{92,-33,7}, -{92,-33,8}, -{92,-33,9}, -{92,-33,10}, -{92,-33,11}, -{92,-33,12}, -{92,-33,13}, -{92,-33,14}, -{92,-33,15}, -{92,-33,16}, -{92,-33,17}, -{92,-33,18}, -{92,-33,19}, -{92,-33,20}, -{92,-33,21}, -{92,-33,22}, -{92,-33,23}, -{92,-33,24}, -{92,-33,25}, -{92,-33,26}, -{92,-33,27}, -{92,-33,28}, -{92,-33,29}, -{92,-33,30}, -{92,-33,31}, -{92,-33,32}, -{92,-33,33}, -{92,-33,34}, -{92,-33,35}, -{92,-33,36}, -{92,-33,37}, -{92,-33,38}, -{92,-33,39}, -{92,-33,40}, -{92,-33,41}, -{92,-33,42}, -{92,-33,43}, -{92,-33,44}, -{92,-33,45}, -{92,-33,46}, -{92,-33,47}, -{92,-33,48}, -{92,-33,49}, -{92,-33,50}, -{92,-33,51}, -{92,-33,52}, -{92,-33,53}, -{92,-33,54}, -{92,-33,55}, -{92,-33,56}, -{92,-33,57}, -{92,-33,58}, -{92,-33,59}, -{92,-33,60}, -{92,-33,61}, -{92,-33,62}, -{92,-33,63}, -{92,-33,64}, -{92,-33,65}, -{92,-33,66}, -{92,-33,67}, -{92,-33,68}, -{92,-33,69}, -{92,-33,70}, -{92,-33,71}, -{92,-33,72}, -{92,-33,73}, -{92,-33,74}, -{92,-33,75}, -{92,-33,76}, -{92,-33,77}, -{92,-33,78}, -{92,-33,79}, -{92,-33,80}, -{92,-33,81}, -{92,-33,82}, -{92,-33,83}, -{92,-33,84}, -{92,-33,85}, -{92,-33,86}, -{92,-33,87}, -{92,-33,88}, -{92,-33,89}, -{92,-32,-12}, -{92,-32,-11}, -{92,-32,-10}, -{92,-32,-9}, -{92,-32,-8}, -{92,-32,-7}, -{92,-32,-6}, -{92,-32,-5}, -{92,-32,-4}, -{92,-32,-3}, -{92,-32,-2}, -{92,-32,-1}, -{92,-32,0}, -{92,-32,1}, -{92,-32,2}, -{92,-32,3}, -{92,-32,4}, -{92,-32,5}, -{92,-32,6}, -{92,-32,7}, -{92,-32,8}, -{92,-32,9}, -{92,-32,10}, -{92,-32,11}, -{92,-32,12}, -{92,-32,13}, -{92,-32,14}, -{92,-32,15}, -{92,-32,16}, -{92,-32,17}, -{92,-32,18}, -{92,-32,19}, -{92,-32,20}, -{92,-32,21}, -{92,-32,22}, -{92,-32,23}, -{92,-32,24}, -{92,-32,25}, -{92,-32,26}, -{92,-32,27}, -{92,-32,28}, -{92,-32,29}, -{92,-32,30}, -{92,-32,31}, -{92,-32,32}, -{92,-32,33}, -{92,-32,34}, -{92,-32,35}, -{92,-32,36}, -{92,-32,37}, -{92,-32,38}, -{92,-32,39}, -{92,-32,40}, -{92,-32,41}, -{92,-32,42}, -{92,-32,43}, -{92,-32,44}, -{92,-32,45}, -{92,-32,46}, -{92,-32,47}, -{92,-32,48}, -{92,-32,49}, -{92,-32,50}, -{92,-32,51}, -{92,-32,52}, -{92,-32,53}, -{92,-32,54}, -{92,-32,55}, -{92,-32,56}, -{92,-32,57}, -{92,-32,58}, -{92,-32,59}, -{92,-32,60}, -{92,-32,61}, -{92,-32,62}, -{92,-32,63}, -{92,-32,64}, -{92,-32,65}, -{92,-32,66}, -{92,-32,67}, -{92,-32,68}, -{92,-32,69}, -{92,-32,70}, -{92,-32,71}, -{92,-32,72}, -{92,-32,73}, -{92,-32,74}, -{92,-32,75}, -{92,-32,76}, -{92,-32,77}, -{92,-32,78}, -{92,-32,79}, -{92,-32,80}, -{92,-32,81}, -{92,-32,82}, -{92,-32,83}, -{92,-32,84}, -{92,-32,85}, -{92,-32,86}, -{92,-32,87}, -{92,-32,88}, -{92,-32,89}, -{92,-31,-12}, -{92,-31,-11}, -{92,-31,-10}, -{92,-31,-9}, -{92,-31,-8}, -{92,-31,-7}, -{92,-31,-6}, -{92,-31,-5}, -{92,-31,-4}, -{92,-31,-3}, -{92,-31,-2}, -{92,-31,-1}, -{92,-31,0}, -{92,-31,1}, -{92,-31,2}, -{92,-31,3}, -{92,-31,4}, -{92,-31,5}, -{92,-31,6}, -{92,-31,7}, -{92,-31,8}, -{92,-31,9}, -{92,-31,10}, -{92,-31,11}, -{92,-31,12}, -{92,-31,13}, -{92,-31,14}, -{92,-31,15}, -{92,-31,16}, -{92,-31,17}, -{92,-31,18}, -{92,-31,19}, -{92,-31,20}, -{92,-31,21}, -{92,-31,22}, -{92,-31,23}, -{92,-31,24}, -{92,-31,25}, -{92,-31,26}, -{92,-31,27}, -{92,-31,28}, -{92,-31,29}, -{92,-31,30}, -{92,-31,31}, -{92,-31,32}, -{92,-31,33}, -{92,-31,34}, -{92,-31,35}, -{92,-31,36}, -{92,-31,37}, -{92,-31,38}, -{92,-31,39}, -{92,-31,40}, -{92,-31,41}, -{92,-31,42}, -{92,-31,43}, -{92,-31,44}, -{92,-31,45}, -{92,-31,46}, -{92,-31,47}, -{92,-31,48}, -{92,-31,49}, -{92,-31,50}, -{92,-31,51}, -{92,-31,52}, -{92,-31,53}, -{92,-31,54}, -{92,-31,55}, -{92,-31,56}, -{92,-31,57}, -{92,-31,58}, -{92,-31,59}, -{92,-31,60}, -{92,-31,61}, -{92,-31,62}, -{92,-31,63}, -{92,-31,64}, -{92,-31,65}, -{92,-31,66}, -{92,-31,67}, -{92,-31,68}, -{92,-31,69}, -{92,-31,70}, -{92,-31,71}, -{92,-31,72}, -{92,-31,73}, -{92,-31,74}, -{92,-31,75}, -{92,-31,76}, -{92,-31,77}, -{92,-31,78}, -{92,-31,79}, -{92,-31,80}, -{92,-31,81}, -{92,-31,82}, -{92,-31,83}, -{92,-31,84}, -{92,-31,85}, -{92,-31,86}, -{92,-31,87}, -{92,-31,88}, -{92,-31,89}, -{92,-30,-12}, -{92,-30,-11}, -{92,-30,-10}, -{92,-30,-9}, -{92,-30,-8}, -{92,-30,-7}, -{92,-30,-6}, -{92,-30,-5}, -{92,-30,-4}, -{92,-30,-3}, -{92,-30,-2}, -{92,-30,-1}, -{92,-30,0}, -{92,-30,1}, -{92,-30,2}, -{92,-30,3}, -{92,-30,4}, -{92,-30,5}, -{92,-30,6}, -{92,-30,7}, -{92,-30,8}, -{92,-30,9}, -{92,-30,10}, -{92,-30,11}, -{92,-30,12}, -{92,-30,13}, -{92,-30,14}, -{92,-30,15}, -{92,-30,16}, -{92,-30,17}, -{92,-30,18}, -{92,-30,19}, -{92,-30,20}, -{92,-30,21}, -{92,-30,22}, -{92,-30,23}, -{92,-30,24}, -{92,-30,25}, -{92,-30,26}, -{92,-30,27}, -{92,-30,28}, -{92,-30,29}, -{92,-30,30}, -{92,-30,31}, -{92,-30,32}, -{92,-30,33}, -{92,-30,34}, -{92,-30,35}, -{92,-30,36}, -{92,-30,37}, -{92,-30,38}, -{92,-30,39}, -{92,-30,40}, -{92,-30,41}, -{92,-30,42}, -{92,-30,43}, -{92,-30,44}, -{92,-30,45}, -{92,-30,46}, -{92,-30,47}, -{92,-30,48}, -{92,-30,49}, -{92,-30,50}, -{92,-30,51}, -{92,-30,52}, -{92,-30,53}, -{92,-30,54}, -{92,-30,55}, -{92,-30,56}, -{92,-30,57}, -{92,-30,58}, -{92,-30,59}, -{92,-30,60}, -{92,-30,61}, -{92,-30,62}, -{92,-30,63}, -{92,-30,64}, -{92,-30,65}, -{92,-30,66}, -{92,-30,67}, -{92,-30,68}, -{92,-30,69}, -{92,-30,70}, -{92,-30,71}, -{92,-30,72}, -{92,-30,73}, -{92,-30,74}, -{92,-30,75}, -{92,-30,76}, -{92,-30,77}, -{92,-30,78}, -{92,-30,79}, -{92,-30,80}, -{92,-30,81}, -{92,-30,82}, -{92,-30,83}, -{92,-30,84}, -{92,-30,85}, -{92,-30,86}, -{92,-30,87}, -{92,-30,88}, -{92,-30,89}, -{92,-29,-12}, -{92,-29,-11}, -{92,-29,-10}, -{92,-29,-9}, -{92,-29,-8}, -{92,-29,-7}, -{92,-29,-6}, -{92,-29,-5}, -{92,-29,-4}, -{92,-29,-3}, -{92,-29,-2}, -{92,-29,-1}, -{92,-29,0}, -{92,-29,1}, -{92,-29,2}, -{92,-29,3}, -{92,-29,4}, -{92,-29,5}, -{92,-29,6}, -{92,-29,7}, -{92,-29,8}, -{92,-29,9}, -{92,-29,10}, -{92,-29,11}, -{92,-29,12}, -{92,-29,13}, -{92,-29,14}, -{92,-29,15}, -{92,-29,16}, -{92,-29,17}, -{92,-29,18}, -{92,-29,19}, -{92,-29,20}, -{92,-29,21}, -{92,-29,22}, -{92,-29,23}, -{92,-29,24}, -{92,-29,25}, -{92,-29,26}, -{92,-29,27}, -{92,-29,28}, -{92,-29,29}, -{92,-29,30}, -{92,-29,31}, -{92,-29,32}, -{92,-29,33}, -{92,-29,34}, -{92,-29,35}, -{92,-29,36}, -{92,-29,37}, -{92,-29,38}, -{92,-29,39}, -{92,-29,40}, -{92,-29,41}, -{92,-29,42}, -{92,-29,43}, -{92,-29,44}, -{92,-29,45}, -{92,-29,46}, -{92,-29,47}, -{92,-29,48}, -{92,-29,49}, -{92,-29,50}, -{92,-29,51}, -{92,-29,52}, -{92,-29,53}, -{92,-29,54}, -{92,-29,55}, -{92,-29,56}, -{92,-29,57}, -{92,-29,58}, -{92,-29,59}, -{92,-29,60}, -{92,-29,61}, -{92,-29,62}, -{92,-29,63}, -{92,-29,64}, -{92,-29,65}, -{92,-29,66}, -{92,-29,67}, -{92,-29,68}, -{92,-29,69}, -{92,-29,70}, -{92,-29,71}, -{92,-29,72}, -{92,-29,73}, -{92,-29,74}, -{92,-29,75}, -{92,-29,76}, -{92,-29,77}, -{92,-29,78}, -{92,-29,79}, -{92,-29,80}, -{92,-29,81}, -{92,-29,82}, -{92,-29,83}, -{92,-29,84}, -{92,-29,85}, -{92,-29,86}, -{92,-29,87}, -{92,-29,88}, -{92,-29,89}, -{92,-28,-12}, -{92,-28,-11}, -{92,-28,-10}, -{92,-28,-9}, -{92,-28,-8}, -{92,-28,-7}, -{92,-28,-6}, -{92,-28,-5}, -{92,-28,-4}, -{92,-28,-3}, -{92,-28,-2}, -{92,-28,-1}, -{92,-28,0}, -{92,-28,1}, -{92,-28,2}, -{92,-28,3}, -{92,-28,4}, -{92,-28,5}, -{92,-28,6}, -{92,-28,7}, -{92,-28,8}, -{92,-28,9}, -{92,-28,10}, -{92,-28,11}, -{92,-28,12}, -{92,-28,13}, -{92,-28,14}, -{92,-28,15}, -{92,-28,16}, -{92,-28,17}, -{92,-28,18}, -{92,-28,19}, -{92,-28,20}, -{92,-28,21}, -{92,-28,22}, -{92,-28,23}, -{92,-28,24}, -{92,-28,25}, -{92,-28,26}, -{92,-28,27}, -{92,-28,28}, -{92,-28,29}, -{92,-28,30}, -{92,-28,31}, -{92,-28,32}, -{92,-28,33}, -{92,-28,34}, -{92,-28,35}, -{92,-28,36}, -{92,-28,37}, -{92,-28,38}, -{92,-28,39}, -{92,-28,40}, -{92,-28,41}, -{92,-28,42}, -{92,-28,43}, -{92,-28,44}, -{92,-28,45}, -{92,-28,46}, -{92,-28,47}, -{92,-28,48}, -{92,-28,49}, -{92,-28,50}, -{92,-28,51}, -{92,-28,52}, -{92,-28,53}, -{92,-28,54}, -{92,-28,55}, -{92,-28,56}, -{92,-28,57}, -{92,-28,58}, -{92,-28,59}, -{92,-28,60}, -{92,-28,61}, -{92,-28,62}, -{92,-28,63}, -{92,-28,64}, -{92,-28,65}, -{92,-28,66}, -{92,-28,67}, -{92,-28,68}, -{92,-28,69}, -{92,-28,70}, -{92,-28,71}, -{92,-28,72}, -{92,-28,73}, -{92,-28,74}, -{92,-28,75}, -{92,-28,76}, -{92,-28,77}, -{92,-28,78}, -{92,-28,79}, -{92,-28,80}, -{92,-28,81}, -{92,-28,82}, -{92,-28,83}, -{92,-28,84}, -{92,-28,85}, -{92,-28,86}, -{92,-28,87}, -{92,-28,88}, -{92,-28,89}, -{92,-27,-12}, -{92,-27,-11}, -{92,-27,-10}, -{92,-27,-9}, -{92,-27,-8}, -{92,-27,-7}, -{92,-27,-6}, -{92,-27,-5}, -{92,-27,-4}, -{92,-27,-3}, -{92,-27,-2}, -{92,-27,-1}, -{92,-27,0}, -{92,-27,1}, -{92,-27,2}, -{92,-27,3}, -{92,-27,4}, -{92,-27,5}, -{92,-27,6}, -{92,-27,7}, -{92,-27,8}, -{92,-27,9}, -{92,-27,10}, -{92,-27,11}, -{92,-27,12}, -{92,-27,13}, -{92,-27,14}, -{92,-27,15}, -{92,-27,16}, -{92,-27,17}, -{92,-27,18}, -{92,-27,19}, -{92,-27,20}, -{92,-27,21}, -{92,-27,22}, -{92,-27,23}, -{92,-27,24}, -{92,-27,25}, -{92,-27,26}, -{92,-27,27}, -{92,-27,28}, -{92,-27,29}, -{92,-27,30}, -{92,-27,31}, -{92,-27,32}, -{92,-27,33}, -{92,-27,34}, -{92,-27,35}, -{92,-27,36}, -{92,-27,37}, -{92,-27,38}, -{92,-27,39}, -{92,-27,40}, -{92,-27,41}, -{92,-27,42}, -{92,-27,43}, -{92,-27,44}, -{92,-27,45}, -{92,-27,46}, -{92,-27,47}, -{92,-27,48}, -{92,-27,49}, -{92,-27,50}, -{92,-27,51}, -{92,-27,52}, -{92,-27,53}, -{92,-27,54}, -{92,-27,55}, -{92,-27,56}, -{92,-27,57}, -{92,-27,58}, -{92,-27,59}, -{92,-27,60}, -{92,-27,61}, -{92,-27,62}, -{92,-27,63}, -{92,-27,64}, -{92,-27,65}, -{92,-27,66}, -{92,-27,67}, -{92,-27,68}, -{92,-27,69}, -{92,-27,70}, -{92,-27,71}, -{92,-27,72}, -{92,-27,73}, -{92,-27,74}, -{92,-27,75}, -{92,-27,76}, -{92,-27,77}, -{92,-27,78}, -{92,-27,79}, -{92,-27,80}, -{92,-27,81}, -{92,-27,82}, -{92,-27,83}, -{92,-27,84}, -{92,-27,85}, -{92,-27,86}, -{92,-27,87}, -{92,-27,88}, -{92,-27,89}, -{92,-26,-12}, -{92,-26,-11}, -{92,-26,-10}, -{92,-26,-9}, -{92,-26,-8}, -{92,-26,-7}, -{92,-26,-6}, -{92,-26,-5}, -{92,-26,-4}, -{92,-26,-3}, -{92,-26,-2}, -{92,-26,-1}, -{92,-26,0}, -{92,-26,1}, -{92,-26,2}, -{92,-26,3}, -{92,-26,4}, -{92,-26,5}, -{92,-26,6}, -{92,-26,7}, -{92,-26,8}, -{92,-26,9}, -{92,-26,10}, -{92,-26,11}, -{92,-26,12}, -{92,-26,13}, -{92,-26,14}, -{92,-26,15}, -{92,-26,16}, -{92,-26,17}, -{92,-26,18}, -{92,-26,19}, -{92,-26,20}, -{92,-26,21}, -{92,-26,22}, -{92,-26,23}, -{92,-26,24}, -{92,-26,25}, -{92,-26,26}, -{92,-26,27}, -{92,-26,28}, -{92,-26,29}, -{92,-26,30}, -{92,-26,31}, -{92,-26,32}, -{92,-26,33}, -{92,-26,34}, -{92,-26,35}, -{92,-26,36}, -{92,-26,37}, -{92,-26,38}, -{92,-26,39}, -{92,-26,40}, -{92,-26,41}, -{92,-26,42}, -{92,-26,43}, -{92,-26,44}, -{92,-26,45}, -{92,-26,46}, -{92,-26,47}, -{92,-26,48}, -{92,-26,49}, -{92,-26,50}, -{92,-26,51}, -{92,-26,52}, -{92,-26,53}, -{92,-26,54}, -{92,-26,55}, -{92,-26,56}, -{92,-26,57}, -{92,-26,58}, -{92,-26,59}, -{92,-26,60}, -{92,-26,61}, -{92,-26,62}, -{92,-26,63}, -{92,-26,64}, -{92,-26,65}, -{92,-26,66}, -{92,-26,67}, -{92,-26,68}, -{92,-26,69}, -{92,-26,70}, -{92,-26,71}, -{92,-26,72}, -{92,-26,73}, -{92,-26,74}, -{92,-26,75}, -{92,-26,76}, -{92,-26,77}, -{92,-26,78}, -{92,-26,79}, -{92,-26,80}, -{92,-26,81}, -{92,-26,82}, -{92,-26,83}, -{92,-26,84}, -{92,-26,85}, -{92,-26,86}, -{92,-26,87}, -{92,-26,88}, -{92,-26,89}, -{92,-26,90}, -{92,-25,-12}, -{92,-25,-11}, -{92,-25,-10}, -{92,-25,-9}, -{92,-25,-8}, -{92,-25,-7}, -{92,-25,-6}, -{92,-25,-5}, -{92,-25,-4}, -{92,-25,-3}, -{92,-25,-2}, -{92,-25,-1}, -{92,-25,0}, -{92,-25,1}, -{92,-25,2}, -{92,-25,3}, -{92,-25,4}, -{92,-25,5}, -{92,-25,6}, -{92,-25,7}, -{92,-25,8}, -{92,-25,9}, -{92,-25,10}, -{92,-25,11}, -{92,-25,12}, -{92,-25,13}, -{92,-25,14}, -{92,-25,15}, -{92,-25,16}, -{92,-25,17}, -{92,-25,18}, -{92,-25,19}, -{92,-25,20}, -{92,-25,21}, -{92,-25,22}, -{92,-25,23}, -{92,-25,24}, -{92,-25,25}, -{92,-25,26}, -{92,-25,27}, -{92,-25,28}, -{92,-25,29}, -{92,-25,30}, -{92,-25,31}, -{92,-25,32}, -{92,-25,33}, -{92,-25,34}, -{92,-25,35}, -{92,-25,36}, -{92,-25,37}, -{92,-25,38}, -{92,-25,39}, -{92,-25,40}, -{92,-25,41}, -{92,-25,42}, -{92,-25,43}, -{92,-25,44}, -{92,-25,45}, -{92,-25,46}, -{92,-25,47}, -{92,-25,48}, -{92,-25,49}, -{92,-25,50}, -{92,-25,51}, -{92,-25,52}, -{92,-25,53}, -{92,-25,54}, -{92,-25,55}, -{92,-25,56}, -{92,-25,57}, -{92,-25,58}, -{92,-25,59}, -{92,-25,60}, -{92,-25,61}, -{92,-25,62}, -{92,-25,63}, -{92,-25,64}, -{92,-25,65}, -{92,-25,66}, -{92,-25,67}, -{92,-25,68}, -{92,-25,69}, -{92,-25,70}, -{92,-25,71}, -{92,-25,72}, -{92,-25,73}, -{92,-25,74}, -{92,-25,75}, -{92,-25,76}, -{92,-25,77}, -{92,-25,78}, -{92,-25,79}, -{92,-25,80}, -{92,-25,81}, -{92,-25,82}, -{92,-25,83}, -{92,-25,84}, -{92,-25,85}, -{92,-25,86}, -{92,-25,87}, -{92,-25,88}, -{92,-25,89}, -{92,-25,90}, -{92,-24,-12}, -{92,-24,-11}, -{92,-24,-10}, -{92,-24,-9}, -{92,-24,-8}, -{92,-24,-7}, -{92,-24,-6}, -{92,-24,-5}, -{92,-24,-4}, -{92,-24,-3}, -{92,-24,-2}, -{92,-24,-1}, -{92,-24,0}, -{92,-24,1}, -{92,-24,2}, -{92,-24,3}, -{92,-24,4}, -{92,-24,5}, -{92,-24,6}, -{92,-24,7}, -{92,-24,8}, -{92,-24,9}, -{92,-24,10}, -{92,-24,11}, -{92,-24,12}, -{92,-24,13}, -{92,-24,14}, -{92,-24,15}, -{92,-24,16}, -{92,-24,17}, -{92,-24,18}, -{92,-24,19}, -{92,-24,20}, -{92,-24,21}, -{92,-24,22}, -{92,-24,23}, -{92,-24,24}, -{92,-24,25}, -{92,-24,26}, -{92,-24,27}, -{92,-24,28}, -{92,-24,29}, -{92,-24,30}, -{92,-24,31}, -{92,-24,32}, -{92,-24,33}, -{92,-24,34}, -{92,-24,35}, -{92,-24,36}, -{92,-24,37}, -{92,-24,38}, -{92,-24,39}, -{92,-24,40}, -{92,-24,41}, -{92,-24,42}, -{92,-24,43}, -{92,-24,44}, -{92,-24,45}, -{92,-24,46}, -{92,-24,47}, -{92,-24,48}, -{92,-24,49}, -{92,-24,50}, -{92,-24,51}, -{92,-24,52}, -{92,-24,53}, -{92,-24,54}, -{92,-24,55}, -{92,-24,56}, -{92,-24,57}, -{92,-24,58}, -{92,-24,59}, -{92,-24,60}, -{92,-24,61}, -{92,-24,62}, -{92,-24,63}, -{92,-24,64}, -{92,-24,65}, -{92,-24,66}, -{92,-24,67}, -{92,-24,68}, -{92,-24,69}, -{92,-24,70}, -{92,-24,71}, -{92,-24,72}, -{92,-24,73}, -{92,-24,74}, -{92,-24,75}, -{92,-24,76}, -{92,-24,77}, -{92,-24,78}, -{92,-24,79}, -{92,-24,80}, -{92,-24,81}, -{92,-24,82}, -{92,-24,83}, -{92,-24,84}, -{92,-24,85}, -{92,-24,86}, -{92,-24,87}, -{92,-24,88}, -{92,-24,89}, -{92,-24,90}, -{92,-23,-12}, -{92,-23,-11}, -{92,-23,-10}, -{92,-23,-9}, -{92,-23,-8}, -{92,-23,-7}, -{92,-23,-6}, -{92,-23,-5}, -{92,-23,-4}, -{92,-23,-3}, -{92,-23,-2}, -{92,-23,-1}, -{92,-23,0}, -{92,-23,1}, -{92,-23,2}, -{92,-23,3}, -{92,-23,4}, -{92,-23,5}, -{92,-23,6}, -{92,-23,7}, -{92,-23,8}, -{92,-23,9}, -{92,-23,10}, -{92,-23,11}, -{92,-23,12}, -{92,-23,13}, -{92,-23,14}, -{92,-23,15}, -{92,-23,16}, -{92,-23,17}, -{92,-23,18}, -{92,-23,19}, -{92,-23,20}, -{92,-23,21}, -{92,-23,22}, -{92,-23,23}, -{92,-23,24}, -{92,-23,25}, -{92,-23,26}, -{92,-23,27}, -{92,-23,28}, -{92,-23,29}, -{92,-23,30}, -{92,-23,31}, -{92,-23,32}, -{92,-23,33}, -{92,-23,34}, -{92,-23,35}, -{92,-23,36}, -{92,-23,37}, -{92,-23,38}, -{92,-23,39}, -{92,-23,40}, -{92,-23,41}, -{92,-23,42}, -{92,-23,43}, -{92,-23,44}, -{92,-23,45}, -{92,-23,46}, -{92,-23,47}, -{92,-23,48}, -{92,-23,49}, -{92,-23,50}, -{92,-23,51}, -{92,-23,52}, -{92,-23,53}, -{92,-23,54}, -{92,-23,55}, -{92,-23,56}, -{92,-23,57}, -{92,-23,58}, -{92,-23,59}, -{92,-23,60}, -{92,-23,61}, -{92,-23,62}, -{92,-23,63}, -{92,-23,64}, -{92,-23,65}, -{92,-23,66}, -{92,-23,67}, -{92,-23,68}, -{92,-23,69}, -{92,-23,70}, -{92,-23,71}, -{92,-23,72}, -{92,-23,73}, -{92,-23,74}, -{92,-23,75}, -{92,-23,76}, -{92,-23,77}, -{92,-23,78}, -{92,-23,79}, -{92,-23,80}, -{92,-23,81}, -{92,-23,82}, -{92,-23,83}, -{92,-23,84}, -{92,-23,85}, -{92,-23,86}, -{92,-23,87}, -{92,-23,88}, -{92,-23,89}, -{92,-23,90}, -{92,-22,-12}, -{92,-22,-11}, -{92,-22,-10}, -{92,-22,-9}, -{92,-22,-8}, -{92,-22,-7}, -{92,-22,-6}, -{92,-22,-5}, -{92,-22,-4}, -{92,-22,-3}, -{92,-22,-2}, -{92,-22,-1}, -{92,-22,0}, -{92,-22,1}, -{92,-22,2}, -{92,-22,3}, -{92,-22,4}, -{92,-22,5}, -{92,-22,6}, -{92,-22,7}, -{92,-22,8}, -{92,-22,9}, -{92,-22,10}, -{92,-22,11}, -{92,-22,12}, -{92,-22,13}, -{92,-22,14}, -{92,-22,15}, -{92,-22,16}, -{92,-22,17}, -{92,-22,18}, -{92,-22,19}, -{92,-22,20}, -{92,-22,21}, -{92,-22,22}, -{92,-22,23}, -{92,-22,24}, -{92,-22,25}, -{92,-22,26}, -{92,-22,27}, -{92,-22,28}, -{92,-22,29}, -{92,-22,30}, -{92,-22,31}, -{92,-22,32}, -{92,-22,33}, -{92,-22,34}, -{92,-22,35}, -{92,-22,36}, -{92,-22,37}, -{92,-22,38}, -{92,-22,39}, -{92,-22,40}, -{92,-22,41}, -{92,-22,42}, -{92,-22,43}, -{92,-22,44}, -{92,-22,45}, -{92,-22,46}, -{92,-22,47}, -{92,-22,48}, -{92,-22,49}, -{92,-22,50}, -{92,-22,51}, -{92,-22,52}, -{92,-22,53}, -{92,-22,54}, -{92,-22,55}, -{92,-22,56}, -{92,-22,57}, -{92,-22,58}, -{92,-22,59}, -{92,-22,60}, -{92,-22,61}, -{92,-22,62}, -{92,-22,63}, -{92,-22,64}, -{92,-22,65}, -{92,-22,66}, -{92,-22,67}, -{92,-22,68}, -{92,-22,69}, -{92,-22,70}, -{92,-22,71}, -{92,-22,72}, -{92,-22,73}, -{92,-22,74}, -{92,-22,75}, -{92,-22,76}, -{92,-22,77}, -{92,-22,78}, -{92,-22,79}, -{92,-22,80}, -{92,-22,81}, -{92,-22,82}, -{92,-22,83}, -{92,-22,84}, -{92,-22,85}, -{92,-22,86}, -{92,-22,87}, -{92,-22,88}, -{92,-22,89}, -{92,-22,90}, -{92,-21,-12}, -{92,-21,-11}, -{92,-21,-10}, -{92,-21,-9}, -{92,-21,-8}, -{92,-21,-7}, -{92,-21,-6}, -{92,-21,-5}, -{92,-21,-4}, -{92,-21,-3}, -{92,-21,-2}, -{92,-21,-1}, -{92,-21,0}, -{92,-21,1}, -{92,-21,2}, -{92,-21,3}, -{92,-21,4}, -{92,-21,5}, -{92,-21,6}, -{92,-21,7}, -{92,-21,8}, -{92,-21,9}, -{92,-21,10}, -{92,-21,11}, -{92,-21,12}, -{92,-21,13}, -{92,-21,14}, -{92,-21,15}, -{92,-21,16}, -{92,-21,17}, -{92,-21,18}, -{92,-21,19}, -{92,-21,20}, -{92,-21,21}, -{92,-21,22}, -{92,-21,23}, -{92,-21,24}, -{92,-21,25}, -{92,-21,26}, -{92,-21,27}, -{92,-21,28}, -{92,-21,29}, -{92,-21,30}, -{92,-21,31}, -{92,-21,32}, -{92,-21,33}, -{92,-21,34}, -{92,-21,35}, -{92,-21,36}, -{92,-21,37}, -{92,-21,38}, -{92,-21,39}, -{92,-21,40}, -{92,-21,41}, -{92,-21,42}, -{92,-21,43}, -{92,-21,44}, -{92,-21,45}, -{92,-21,46}, -{92,-21,47}, -{92,-21,48}, -{92,-21,49}, -{92,-21,50}, -{92,-21,51}, -{92,-21,52}, -{92,-21,53}, -{92,-21,54}, -{92,-21,55}, -{92,-21,56}, -{92,-21,57}, -{92,-21,58}, -{92,-21,59}, -{92,-21,60}, -{92,-21,61}, -{92,-21,62}, -{92,-21,63}, -{92,-21,64}, -{92,-21,65}, -{92,-21,66}, -{92,-21,67}, -{92,-21,68}, -{92,-21,69}, -{92,-21,70}, -{92,-21,71}, -{92,-21,72}, -{92,-21,73}, -{92,-21,74}, -{92,-21,75}, -{92,-21,76}, -{92,-21,77}, -{92,-21,78}, -{92,-21,79}, -{92,-21,80}, -{92,-21,81}, -{92,-21,82}, -{92,-21,83}, -{92,-21,84}, -{92,-21,85}, -{92,-21,86}, -{92,-21,87}, -{92,-21,88}, -{92,-21,89}, -{92,-21,90}, -{92,-20,-12}, -{92,-20,-11}, -{92,-20,-10}, -{92,-20,-9}, -{92,-20,-8}, -{92,-20,-7}, -{92,-20,-6}, -{92,-20,-5}, -{92,-20,-4}, -{92,-20,-3}, -{92,-20,-2}, -{92,-20,-1}, -{92,-20,0}, -{92,-20,1}, -{92,-20,2}, -{92,-20,3}, -{92,-20,4}, -{92,-20,5}, -{92,-20,6}, -{92,-20,7}, -{92,-20,8}, -{92,-20,9}, -{92,-20,10}, -{92,-20,11}, -{92,-20,12}, -{92,-20,13}, -{92,-20,14}, -{92,-20,15}, -{92,-20,16}, -{92,-20,17}, -{92,-20,18}, -{92,-20,19}, -{92,-20,20}, -{92,-20,21}, -{92,-20,22}, -{92,-20,23}, -{92,-20,24}, -{92,-20,25}, -{92,-20,26}, -{92,-20,27}, -{92,-20,28}, -{92,-20,29}, -{92,-20,30}, -{92,-20,31}, -{92,-20,32}, -{92,-20,33}, -{92,-20,34}, -{92,-20,35}, -{92,-20,36}, -{92,-20,37}, -{92,-20,38}, -{92,-20,39}, -{92,-20,40}, -{92,-20,41}, -{92,-20,42}, -{92,-20,43}, -{92,-20,44}, -{92,-20,45}, -{92,-20,46}, -{92,-20,47}, -{92,-20,48}, -{92,-20,49}, -{92,-20,50}, -{92,-20,51}, -{92,-20,52}, -{92,-20,53}, -{92,-20,54}, -{92,-20,55}, -{92,-20,56}, -{92,-20,57}, -{92,-20,58}, -{92,-20,59}, -{92,-20,60}, -{92,-20,61}, -{92,-20,62}, -{92,-20,63}, -{92,-20,64}, -{92,-20,65}, -{92,-20,66}, -{92,-20,67}, -{92,-20,68}, -{92,-20,69}, -{92,-20,70}, -{92,-20,71}, -{92,-20,72}, -{92,-20,73}, -{92,-20,74}, -{92,-20,75}, -{92,-20,76}, -{92,-20,77}, -{92,-20,78}, -{92,-20,79}, -{92,-20,80}, -{92,-20,81}, -{92,-20,82}, -{92,-20,83}, -{92,-20,84}, -{92,-20,85}, -{92,-20,86}, -{92,-20,87}, -{92,-20,88}, -{92,-20,89}, -{92,-20,90}, -{92,-19,-12}, -{92,-19,-11}, -{92,-19,-10}, -{92,-19,-9}, -{92,-19,-8}, -{92,-19,-7}, -{92,-19,-6}, -{92,-19,-5}, -{92,-19,-4}, -{92,-19,-3}, -{92,-19,-2}, -{92,-19,-1}, -{92,-19,0}, -{92,-19,1}, -{92,-19,2}, -{92,-19,3}, -{92,-19,4}, -{92,-19,5}, -{92,-19,6}, -{92,-19,7}, -{92,-19,8}, -{92,-19,9}, -{92,-19,10}, -{92,-19,11}, -{92,-19,12}, -{92,-19,13}, -{92,-19,14}, -{92,-19,15}, -{92,-19,16}, -{92,-19,17}, -{92,-19,18}, -{92,-19,19}, -{92,-19,20}, -{92,-19,21}, -{92,-19,22}, -{92,-19,23}, -{92,-19,24}, -{92,-19,25}, -{92,-19,26}, -{92,-19,27}, -{92,-19,28}, -{92,-19,29}, -{92,-19,30}, -{92,-19,31}, -{92,-19,32}, -{92,-19,33}, -{92,-19,34}, -{92,-19,35}, -{92,-19,36}, -{92,-19,37}, -{92,-19,38}, -{92,-19,39}, -{92,-19,40}, -{92,-19,41}, -{92,-19,42}, -{92,-19,43}, -{92,-19,44}, -{92,-19,45}, -{92,-19,46}, -{92,-19,47}, -{92,-19,48}, -{92,-19,49}, -{92,-19,50}, -{92,-19,51}, -{92,-19,52}, -{92,-19,53}, -{92,-19,54}, -{92,-19,55}, -{92,-19,56}, -{92,-19,57}, -{92,-19,58}, -{92,-19,59}, -{92,-19,60}, -{92,-19,61}, -{92,-19,62}, -{92,-19,63}, -{92,-19,64}, -{92,-19,65}, -{92,-19,66}, -{92,-19,67}, -{92,-19,68}, -{92,-19,69}, -{92,-19,70}, -{92,-19,71}, -{92,-19,72}, -{92,-19,73}, -{92,-19,74}, -{92,-19,75}, -{92,-19,76}, -{92,-19,77}, -{92,-19,78}, -{92,-19,79}, -{92,-19,80}, -{92,-19,81}, -{92,-19,82}, -{92,-19,83}, -{92,-19,84}, -{92,-19,85}, -{92,-19,86}, -{92,-19,87}, -{92,-19,88}, -{92,-19,89}, -{92,-19,90}, -{92,-18,-12}, -{92,-18,-11}, -{92,-18,-10}, -{92,-18,-9}, -{92,-18,-8}, -{92,-18,-7}, -{92,-18,-6}, -{92,-18,-5}, -{92,-18,-4}, -{92,-18,-3}, -{92,-18,-2}, -{92,-18,-1}, -{92,-18,0}, -{92,-18,1}, -{92,-18,2}, -{92,-18,3}, -{92,-18,4}, -{92,-18,5}, -{92,-18,6}, -{92,-18,7}, -{92,-18,8}, -{92,-18,9}, -{92,-18,10}, -{92,-18,11}, -{92,-18,12}, -{92,-18,13}, -{92,-18,14}, -{92,-18,15}, -{92,-18,16}, -{92,-18,17}, -{92,-18,18}, -{92,-18,19}, -{92,-18,20}, -{92,-18,21}, -{92,-18,22}, -{92,-18,23}, -{92,-18,24}, -{92,-18,25}, -{92,-18,26}, -{92,-18,27}, -{92,-18,28}, -{92,-18,29}, -{92,-18,30}, -{92,-18,31}, -{92,-18,32}, -{92,-18,33}, -{92,-18,34}, -{92,-18,35}, -{92,-18,36}, -{92,-18,37}, -{92,-18,38}, -{92,-18,39}, -{92,-18,40}, -{92,-18,41}, -{92,-18,42}, -{92,-18,43}, -{92,-18,44}, -{92,-18,45}, -{92,-18,46}, -{92,-18,47}, -{92,-18,48}, -{92,-18,49}, -{92,-18,50}, -{92,-18,51}, -{92,-18,52}, -{92,-18,53}, -{92,-18,54}, -{92,-18,55}, -{92,-18,56}, -{92,-18,57}, -{92,-18,58}, -{92,-18,59}, -{92,-18,60}, -{92,-18,61}, -{92,-18,62}, -{92,-18,63}, -{92,-18,64}, -{92,-18,65}, -{92,-18,66}, -{92,-18,67}, -{92,-18,68}, -{92,-18,69}, -{92,-18,70}, -{92,-18,71}, -{92,-18,72}, -{92,-18,73}, -{92,-18,74}, -{92,-18,75}, -{92,-18,76}, -{92,-18,77}, -{92,-18,78}, -{92,-18,79}, -{92,-18,80}, -{92,-18,81}, -{92,-18,82}, -{92,-18,83}, -{92,-18,84}, -{92,-18,85}, -{92,-18,86}, -{92,-18,87}, -{92,-18,88}, -{92,-18,89}, -{92,-18,90}, -{92,-17,-12}, -{92,-17,-11}, -{92,-17,-10}, -{92,-17,-9}, -{92,-17,-8}, -{92,-17,-7}, -{92,-17,-6}, -{92,-17,-5}, -{92,-17,-4}, -{92,-17,-3}, -{92,-17,-2}, -{92,-17,-1}, -{92,-17,0}, -{92,-17,1}, -{92,-17,2}, -{92,-17,3}, -{92,-17,4}, -{92,-17,5}, -{92,-17,6}, -{92,-17,7}, -{92,-17,8}, -{92,-17,9}, -{92,-17,10}, -{92,-17,11}, -{92,-17,12}, -{92,-17,13}, -{92,-17,14}, -{92,-17,15}, -{92,-17,16}, -{92,-17,17}, -{92,-17,18}, -{92,-17,19}, -{92,-17,20}, -{92,-17,21}, -{92,-17,22}, -{92,-17,23}, -{92,-17,24}, -{92,-17,25}, -{92,-17,26}, -{92,-17,27}, -{92,-17,28}, -{92,-17,29}, -{92,-17,30}, -{92,-17,31}, -{92,-17,32}, -{92,-17,33}, -{92,-17,34}, -{92,-17,35}, -{92,-17,36}, -{92,-17,37}, -{92,-17,38}, -{92,-17,39}, -{92,-17,40}, -{92,-17,41}, -{92,-17,42}, -{92,-17,43}, -{92,-17,44}, -{92,-17,45}, -{92,-17,46}, -{92,-17,47}, -{92,-17,48}, -{92,-17,49}, -{92,-17,50}, -{92,-17,51}, -{92,-17,52}, -{92,-17,53}, -{92,-17,54}, -{92,-17,55}, -{92,-17,56}, -{92,-17,57}, -{92,-17,58}, -{92,-17,59}, -{92,-17,60}, -{92,-17,61}, -{92,-17,62}, -{92,-17,63}, -{92,-17,64}, -{92,-17,65}, -{92,-17,66}, -{92,-17,67}, -{92,-17,68}, -{92,-17,69}, -{92,-17,70}, -{92,-17,71}, -{92,-17,72}, -{92,-17,73}, -{92,-17,74}, -{92,-17,75}, -{92,-17,76}, -{92,-17,77}, -{92,-17,78}, -{92,-17,79}, -{92,-17,80}, -{92,-17,81}, -{92,-17,82}, -{92,-17,83}, -{92,-17,84}, -{92,-17,85}, -{92,-17,86}, -{92,-17,87}, -{92,-17,88}, -{92,-17,89}, -{92,-17,90}, -{92,-16,-12}, -{92,-16,-11}, -{92,-16,-10}, -{92,-16,-9}, -{92,-16,-8}, -{92,-16,-7}, -{92,-16,-6}, -{92,-16,-5}, -{92,-16,-4}, -{92,-16,-3}, -{92,-16,-2}, -{92,-16,-1}, -{92,-16,0}, -{92,-16,1}, -{92,-16,2}, -{92,-16,3}, -{92,-16,4}, -{92,-16,5}, -{92,-16,6}, -{92,-16,7}, -{92,-16,8}, -{92,-16,9}, -{92,-16,10}, -{92,-16,11}, -{92,-16,12}, -{92,-16,13}, -{92,-16,14}, -{92,-16,15}, -{92,-16,16}, -{92,-16,17}, -{92,-16,18}, -{92,-16,19}, -{92,-16,20}, -{92,-16,21}, -{92,-16,22}, -{92,-16,23}, -{92,-16,24}, -{92,-16,25}, -{92,-16,26}, -{92,-16,27}, -{92,-16,28}, -{92,-16,29}, -{92,-16,30}, -{92,-16,31}, -{92,-16,32}, -{92,-16,33}, -{92,-16,34}, -{92,-16,35}, -{92,-16,36}, -{92,-16,37}, -{92,-16,38}, -{92,-16,39}, -{92,-16,40}, -{92,-16,41}, -{92,-16,42}, -{92,-16,43}, -{92,-16,44}, -{92,-16,45}, -{92,-16,46}, -{92,-16,47}, -{92,-16,48}, -{92,-16,49}, -{92,-16,50}, -{92,-16,51}, -{92,-16,52}, -{92,-16,53}, -{92,-16,54}, -{92,-16,55}, -{92,-16,56}, -{92,-16,57}, -{92,-16,58}, -{92,-16,59}, -{92,-16,60}, -{92,-16,61}, -{92,-16,62}, -{92,-16,63}, -{92,-16,64}, -{92,-16,65}, -{92,-16,66}, -{92,-16,67}, -{92,-16,68}, -{92,-16,69}, -{92,-16,70}, -{92,-16,71}, -{92,-16,72}, -{92,-16,73}, -{92,-16,74}, -{92,-16,75}, -{92,-16,76}, -{92,-16,77}, -{92,-16,78}, -{92,-16,79}, -{92,-16,80}, -{92,-16,81}, -{92,-16,82}, -{92,-16,83}, -{92,-16,84}, -{92,-16,85}, -{92,-16,86}, -{92,-16,87}, -{92,-16,88}, -{92,-16,89}, -{92,-16,90}, -{92,-15,-12}, -{92,-15,-11}, -{92,-15,-10}, -{92,-15,-9}, -{92,-15,-8}, -{92,-15,-7}, -{92,-15,-6}, -{92,-15,-5}, -{92,-15,-4}, -{92,-15,-3}, -{92,-15,-2}, -{92,-15,-1}, -{92,-15,0}, -{92,-15,1}, -{92,-15,2}, -{92,-15,3}, -{92,-15,4}, -{92,-15,5}, -{92,-15,6}, -{92,-15,7}, -{92,-15,8}, -{92,-15,9}, -{92,-15,10}, -{92,-15,11}, -{92,-15,12}, -{92,-15,13}, -{92,-15,14}, -{92,-15,15}, -{92,-15,16}, -{92,-15,17}, -{92,-15,18}, -{92,-15,19}, -{92,-15,20}, -{92,-15,21}, -{92,-15,22}, -{92,-15,23}, -{92,-15,24}, -{92,-15,25}, -{92,-15,26}, -{92,-15,27}, -{92,-15,28}, -{92,-15,29}, -{92,-15,30}, -{92,-15,31}, -{92,-15,32}, -{92,-15,33}, -{92,-15,34}, -{92,-15,35}, -{92,-15,36}, -{92,-15,37}, -{92,-15,38}, -{92,-15,39}, -{92,-15,40}, -{92,-15,41}, -{92,-15,42}, -{92,-15,43}, -{92,-15,44}, -{92,-15,45}, -{92,-15,46}, -{92,-15,47}, -{92,-15,48}, -{92,-15,49}, -{92,-15,50}, -{92,-15,51}, -{92,-15,52}, -{92,-15,53}, -{92,-15,54}, -{92,-15,55}, -{92,-15,56}, -{92,-15,57}, -{92,-15,58}, -{92,-15,59}, -{92,-15,60}, -{92,-15,61}, -{92,-15,62}, -{92,-15,63}, -{92,-15,64}, -{92,-15,65}, -{92,-15,66}, -{92,-15,67}, -{92,-15,68}, -{92,-15,69}, -{92,-15,70}, -{92,-15,71}, -{92,-15,72}, -{92,-15,73}, -{92,-15,74}, -{92,-15,75}, -{92,-15,76}, -{92,-15,77}, -{92,-15,78}, -{92,-15,79}, -{92,-15,80}, -{92,-15,81}, -{92,-15,82}, -{92,-15,83}, -{92,-15,84}, -{92,-15,85}, -{92,-15,86}, -{92,-15,87}, -{92,-15,88}, -{92,-15,89}, -{92,-15,90}, -{92,-14,-12}, -{92,-14,-11}, -{92,-14,-10}, -{92,-14,-9}, -{92,-14,-8}, -{92,-14,-7}, -{92,-14,-6}, -{92,-14,-5}, -{92,-14,-4}, -{92,-14,-3}, -{92,-14,-2}, -{92,-14,-1}, -{92,-14,0}, -{92,-14,1}, -{92,-14,2}, -{92,-14,3}, -{92,-14,4}, -{92,-14,5}, -{92,-14,6}, -{92,-14,7}, -{92,-14,8}, -{92,-14,9}, -{92,-14,10}, -{92,-14,11}, -{92,-14,12}, -{92,-14,13}, -{92,-14,14}, -{92,-14,15}, -{92,-14,16}, -{92,-14,17}, -{92,-14,18}, -{92,-14,19}, -{92,-14,20}, -{92,-14,21}, -{92,-14,22}, -{92,-14,23}, -{92,-14,24}, -{92,-14,25}, -{92,-14,26}, -{92,-14,27}, -{92,-14,28}, -{92,-14,29}, -{92,-14,30}, -{92,-14,31}, -{92,-14,32}, -{92,-14,33}, -{92,-14,34}, -{92,-14,35}, -{92,-14,36}, -{92,-14,37}, -{92,-14,38}, -{92,-14,39}, -{92,-14,40}, -{92,-14,41}, -{92,-14,42}, -{92,-14,43}, -{92,-14,44}, -{92,-14,45}, -{92,-14,46}, -{92,-14,47}, -{92,-14,48}, -{92,-14,49}, -{92,-14,50}, -{92,-14,51}, -{92,-14,52}, -{92,-14,53}, -{92,-14,54}, -{92,-14,55}, -{92,-14,56}, -{92,-14,57}, -{92,-14,58}, -{92,-14,59}, -{92,-14,60}, -{92,-14,61}, -{92,-14,62}, -{92,-14,63}, -{92,-14,64}, -{92,-14,65}, -{92,-14,66}, -{92,-14,67}, -{92,-14,68}, -{92,-14,69}, -{92,-14,70}, -{92,-14,71}, -{92,-14,72}, -{92,-14,73}, -{92,-14,74}, -{92,-14,75}, -{92,-14,76}, -{92,-14,77}, -{92,-14,78}, -{92,-14,79}, -{92,-14,80}, -{92,-14,81}, -{92,-14,82}, -{92,-14,83}, -{92,-14,84}, -{92,-14,85}, -{92,-14,86}, -{92,-14,87}, -{92,-14,88}, -{92,-14,89}, -{92,-14,90}, -{92,-13,-12}, -{92,-13,-11}, -{92,-13,-10}, -{92,-13,-9}, -{92,-13,-8}, -{92,-13,-7}, -{92,-13,-6}, -{92,-13,-5}, -{92,-13,-4}, -{92,-13,-3}, -{92,-13,-2}, -{92,-13,-1}, -{92,-13,0}, -{92,-13,1}, -{92,-13,2}, -{92,-13,3}, -{92,-13,4}, -{92,-13,5}, -{92,-13,6}, -{92,-13,7}, -{92,-13,8}, -{92,-13,9}, -{92,-13,10}, -{92,-13,11}, -{92,-13,12}, -{92,-13,13}, -{92,-13,14}, -{92,-13,15}, -{92,-13,16}, -{92,-13,17}, -{92,-13,18}, -{92,-13,19}, -{92,-13,20}, -{92,-13,21}, -{92,-13,22}, -{92,-13,23}, -{92,-13,24}, -{92,-13,25}, -{92,-13,26}, -{92,-13,27}, -{92,-13,28}, -{92,-13,29}, -{92,-13,30}, -{92,-13,31}, -{92,-13,32}, -{92,-13,33}, -{92,-13,34}, -{92,-13,35}, -{92,-13,36}, -{92,-13,37}, -{92,-13,38}, -{92,-13,39}, -{92,-13,40}, -{92,-13,41}, -{92,-13,42}, -{92,-13,43}, -{92,-13,44}, -{92,-13,45}, -{92,-13,46}, -{92,-13,47}, -{92,-13,48}, -{92,-13,49}, -{92,-13,50}, -{92,-13,51}, -{92,-13,52}, -{92,-13,53}, -{92,-13,54}, -{92,-13,55}, -{92,-13,56}, -{92,-13,57}, -{92,-13,58}, -{92,-13,59}, -{92,-13,60}, -{92,-13,61}, -{92,-13,62}, -{92,-13,63}, -{92,-13,64}, -{92,-13,65}, -{92,-13,66}, -{92,-13,67}, -{92,-13,68}, -{92,-13,69}, -{92,-13,70}, -{92,-13,71}, -{92,-13,72}, -{92,-13,73}, -{92,-13,74}, -{92,-13,75}, -{92,-13,76}, -{92,-13,77}, -{92,-13,78}, -{92,-13,79}, -{92,-13,80}, -{92,-13,81}, -{92,-13,82}, -{92,-13,83}, -{92,-13,84}, -{92,-13,85}, -{92,-13,86}, -{92,-13,87}, -{92,-13,88}, -{92,-13,89}, -{92,-13,90}, -{92,-12,-12}, -{92,-12,-11}, -{92,-12,-10}, -{92,-12,-9}, -{92,-12,-8}, -{92,-12,-7}, -{92,-12,-6}, -{92,-12,-5}, -{92,-12,-4}, -{92,-12,-3}, -{92,-12,-2}, -{92,-12,-1}, -{92,-12,0}, -{92,-12,1}, -{92,-12,2}, -{92,-12,3}, -{92,-12,4}, -{92,-12,5}, -{92,-12,6}, -{92,-12,7}, -{92,-12,8}, -{92,-12,9}, -{92,-12,10}, -{92,-12,11}, -{92,-12,12}, -{92,-12,13}, -{92,-12,14}, -{92,-12,15}, -{92,-12,16}, -{92,-12,17}, -{92,-12,18}, -{92,-12,19}, -{92,-12,20}, -{92,-12,21}, -{92,-12,22}, -{92,-12,23}, -{92,-12,24}, -{92,-12,25}, -{92,-12,26}, -{92,-12,27}, -{92,-12,28}, -{92,-12,29}, -{92,-12,30}, -{92,-12,31}, -{92,-12,32}, -{92,-12,33}, -{92,-12,34}, -{92,-12,35}, -{92,-12,36}, -{92,-12,37}, -{92,-12,38}, -{92,-12,39}, -{92,-12,40}, -{92,-12,41}, -{92,-12,42}, -{92,-12,43}, -{92,-12,44}, -{92,-12,45}, -{92,-12,46}, -{92,-12,47}, -{92,-12,48}, -{92,-12,49}, -{92,-12,50}, -{92,-12,51}, -{92,-12,52}, -{92,-12,53}, -{92,-12,54}, -{92,-12,55}, -{92,-12,56}, -{92,-12,57}, -{92,-12,58}, -{92,-12,59}, -{92,-12,60}, -{92,-12,61}, -{92,-12,62}, -{92,-12,63}, -{92,-12,64}, -{92,-12,65}, -{92,-12,66}, -{92,-12,67}, -{92,-12,68}, -{92,-12,69}, -{92,-12,70}, -{92,-12,71}, -{92,-12,72}, -{92,-12,73}, -{92,-12,74}, -{92,-12,75}, -{92,-12,76}, -{92,-12,77}, -{92,-12,78}, -{92,-12,79}, -{92,-12,80}, -{92,-12,81}, -{92,-12,82}, -{92,-12,83}, -{92,-12,84}, -{92,-12,85}, -{92,-12,86}, -{92,-12,87}, -{92,-12,88}, -{92,-12,89}, -{92,-12,90}, -{92,-11,-12}, -{92,-11,-11}, -{92,-11,-10}, -{92,-11,-9}, -{92,-11,-8}, -{92,-11,-7}, -{92,-11,-6}, -{92,-11,-5}, -{92,-11,-4}, -{92,-11,-3}, -{92,-11,-2}, -{92,-11,-1}, -{92,-11,0}, -{92,-11,1}, -{92,-11,2}, -{92,-11,3}, -{92,-11,4}, -{92,-11,5}, -{92,-11,6}, -{92,-11,7}, -{92,-11,8}, -{92,-11,9}, -{92,-11,10}, -{92,-11,11}, -{92,-11,12}, -{92,-11,13}, -{92,-11,14}, -{92,-11,15}, -{92,-11,16}, -{92,-11,17}, -{92,-11,18}, -{92,-11,19}, -{92,-11,20}, -{92,-11,21}, -{92,-11,22}, -{92,-11,23}, -{92,-11,24}, -{92,-11,25}, -{92,-11,26}, -{92,-11,27}, -{92,-11,28}, -{92,-11,29}, -{92,-11,30}, -{92,-11,31}, -{92,-11,32}, -{92,-11,33}, -{92,-11,34}, -{92,-11,35}, -{92,-11,36}, -{92,-11,37}, -{92,-11,38}, -{92,-11,39}, -{92,-11,40}, -{92,-11,41}, -{92,-11,42}, -{92,-11,43}, -{92,-11,44}, -{92,-11,45}, -{92,-11,46}, -{92,-11,47}, -{92,-11,48}, -{92,-11,49}, -{92,-11,50}, -{92,-11,51}, -{92,-11,52}, -{92,-11,53}, -{92,-11,54}, -{92,-11,55}, -{92,-11,56}, -{92,-11,57}, -{92,-11,58}, -{92,-11,59}, -{92,-11,60}, -{92,-11,61}, -{92,-11,62}, -{92,-11,63}, -{92,-11,64}, -{92,-11,65}, -{92,-11,66}, -{92,-11,67}, -{92,-11,68}, -{92,-11,69}, -{92,-11,70}, -{92,-11,71}, -{92,-11,72}, -{92,-11,73}, -{92,-11,74}, -{92,-11,75}, -{92,-11,76}, -{92,-11,77}, -{92,-11,78}, -{92,-11,79}, -{92,-11,80}, -{92,-11,81}, -{92,-11,82}, -{92,-11,83}, -{92,-11,84}, -{92,-11,85}, -{92,-10,-12}, -{92,-10,-11}, -{92,-10,-10}, -{92,-10,-9}, -{92,-10,-8}, -{92,-10,-7}, -{92,-10,-6}, -{92,-10,-5}, -{92,-10,-4}, -{92,-10,-3}, -{92,-10,-2}, -{92,-10,-1}, -{92,-10,0}, -{92,-10,1}, -{92,-10,2}, -{92,-10,3}, -{92,-10,4}, -{92,-10,5}, -{92,-10,6}, -{92,-10,7}, -{92,-10,8}, -{92,-10,9}, -{92,-10,10}, -{92,-10,11}, -{92,-10,12}, -{92,-10,13}, -{92,-10,14}, -{92,-10,15}, -{92,-10,16}, -{92,-10,17}, -{92,-10,18}, -{92,-10,19}, -{92,-10,20}, -{92,-10,21}, -{92,-10,22}, -{92,-10,23}, -{92,-10,24}, -{92,-10,25}, -{92,-10,26}, -{92,-10,27}, -{92,-10,28}, -{92,-10,29}, -{92,-10,30}, -{92,-10,31}, -{92,-10,32}, -{92,-10,33}, -{92,-10,34}, -{92,-10,35}, -{92,-10,36}, -{92,-10,37}, -{92,-10,38}, -{92,-10,39}, -{92,-10,40}, -{92,-10,41}, -{92,-10,42}, -{92,-10,43}, -{92,-10,44}, -{92,-10,45}, -{92,-10,46}, -{92,-10,47}, -{92,-10,48}, -{92,-10,49}, -{92,-10,50}, -{92,-10,51}, -{92,-10,52}, -{92,-10,53}, -{92,-10,54}, -{92,-10,55}, -{92,-10,56}, -{92,-10,57}, -{92,-10,58}, -{92,-10,59}, -{92,-10,60}, -{92,-10,61}, -{92,-10,62}, -{92,-10,63}, -{92,-10,64}, -{92,-10,65}, -{92,-10,66}, -{92,-10,67}, -{92,-10,68}, -{92,-10,69}, -{92,-10,70}, -{92,-10,71}, -{92,-10,72}, -{92,-10,73}, -{92,-10,74}, -{92,-10,75}, -{92,-10,76}, -{92,-10,77}, -{92,-10,78}, -{92,-9,-12}, -{92,-9,-11}, -{92,-9,-10}, -{92,-9,-9}, -{92,-9,-8}, -{92,-9,-7}, -{92,-9,-6}, -{92,-9,-5}, -{92,-9,-4}, -{92,-9,-3}, -{92,-9,-2}, -{92,-9,-1}, -{92,-9,0}, -{92,-9,1}, -{92,-9,2}, -{92,-9,3}, -{92,-9,4}, -{92,-9,5}, -{92,-9,6}, -{92,-9,7}, -{92,-9,8}, -{92,-9,9}, -{92,-9,10}, -{92,-9,11}, -{92,-9,12}, -{92,-9,13}, -{92,-9,14}, -{92,-9,15}, -{92,-9,16}, -{92,-9,17}, -{92,-9,18}, -{92,-9,19}, -{92,-9,20}, -{92,-9,21}, -{92,-9,22}, -{92,-9,23}, -{92,-9,24}, -{92,-9,25}, -{92,-9,26}, -{92,-9,27}, -{92,-9,28}, -{92,-9,29}, -{92,-9,30}, -{92,-9,31}, -{92,-9,32}, -{92,-9,33}, -{92,-9,34}, -{92,-9,35}, -{92,-9,36}, -{92,-9,37}, -{92,-9,38}, -{92,-9,39}, -{92,-9,40}, -{92,-9,41}, -{92,-9,42}, -{92,-9,43}, -{92,-9,44}, -{92,-9,45}, -{92,-9,46}, -{92,-9,47}, -{92,-9,48}, -{92,-9,49}, -{92,-9,50}, -{92,-9,51}, -{92,-9,52}, -{92,-9,53}, -{92,-9,54}, -{92,-9,55}, -{92,-9,56}, -{92,-9,57}, -{92,-9,58}, -{92,-9,59}, -{92,-9,60}, -{92,-9,61}, -{92,-9,62}, -{92,-9,63}, -{92,-9,64}, -{92,-9,65}, -{92,-9,66}, -{92,-9,67}, -{92,-9,68}, -{92,-9,69}, -{92,-9,70}, -{92,-9,71}, -{92,-9,72}, -{92,-8,-12}, -{92,-8,-11}, -{92,-8,-10}, -{92,-8,-9}, -{92,-8,-8}, -{92,-8,-7}, -{92,-8,-6}, -{92,-8,-5}, -{92,-8,-4}, -{92,-8,-3}, -{92,-8,-2}, -{92,-8,-1}, -{92,-8,0}, -{92,-8,1}, -{92,-8,2}, -{92,-8,3}, -{92,-8,4}, -{92,-8,5}, -{92,-8,6}, -{92,-8,7}, -{92,-8,8}, -{92,-8,9}, -{92,-8,10}, -{92,-8,11}, -{92,-8,12}, -{92,-8,13}, -{92,-8,14}, -{92,-8,15}, -{92,-8,16}, -{92,-8,17}, -{92,-8,18}, -{92,-8,19}, -{92,-8,20}, -{92,-8,21}, -{92,-8,22}, -{92,-8,23}, -{92,-8,24}, -{92,-8,25}, -{92,-8,26}, -{92,-8,27}, -{92,-8,28}, -{92,-8,29}, -{92,-8,30}, -{92,-8,31}, -{92,-8,32}, -{92,-8,33}, -{92,-8,34}, -{92,-8,35}, -{92,-8,36}, -{92,-8,37}, -{92,-8,38}, -{92,-8,39}, -{92,-8,40}, -{92,-8,41}, -{92,-8,42}, -{92,-8,43}, -{92,-8,44}, -{92,-8,45}, -{92,-8,46}, -{92,-8,47}, -{92,-8,48}, -{92,-8,49}, -{92,-8,50}, -{92,-8,51}, -{92,-8,52}, -{92,-8,53}, -{92,-8,54}, -{92,-8,55}, -{92,-8,56}, -{92,-8,57}, -{92,-8,58}, -{92,-8,59}, -{92,-8,60}, -{92,-8,61}, -{92,-8,62}, -{92,-8,63}, -{92,-8,64}, -{92,-8,65}, -{92,-8,66}, -{92,-7,-12}, -{92,-7,-11}, -{92,-7,-10}, -{92,-7,-9}, -{92,-7,-8}, -{92,-7,-7}, -{92,-7,-6}, -{92,-7,-5}, -{92,-7,-4}, -{92,-7,-3}, -{92,-7,-2}, -{92,-7,-1}, -{92,-7,0}, -{92,-7,1}, -{92,-7,2}, -{92,-7,3}, -{92,-7,4}, -{92,-7,5}, -{92,-7,6}, -{92,-7,7}, -{92,-7,8}, -{92,-7,9}, -{92,-7,10}, -{92,-7,11}, -{92,-7,12}, -{92,-7,13}, -{92,-7,14}, -{92,-7,15}, -{92,-7,16}, -{92,-7,17}, -{92,-7,18}, -{92,-7,19}, -{92,-7,20}, -{92,-7,21}, -{92,-7,22}, -{92,-7,23}, -{92,-7,24}, -{92,-7,25}, -{92,-7,26}, -{92,-7,27}, -{92,-7,28}, -{92,-7,29}, -{92,-7,30}, -{92,-7,31}, -{92,-7,32}, -{92,-7,33}, -{92,-7,34}, -{92,-7,35}, -{92,-7,36}, -{92,-7,37}, -{92,-7,38}, -{92,-7,39}, -{92,-7,40}, -{92,-7,41}, -{92,-7,42}, -{92,-7,43}, -{92,-7,44}, -{92,-7,45}, -{92,-7,46}, -{92,-7,47}, -{92,-7,48}, -{92,-7,49}, -{92,-7,50}, -{92,-7,51}, -{92,-7,52}, -{92,-7,53}, -{92,-7,54}, -{92,-7,55}, -{92,-7,56}, -{92,-7,57}, -{92,-7,58}, -{92,-7,59}, -{92,-7,60}, -{92,-7,61}, -{92,-6,-12}, -{92,-6,-11}, -{92,-6,-10}, -{92,-6,-9}, -{92,-6,-8}, -{92,-6,-7}, -{92,-6,-6}, -{92,-6,-5}, -{92,-6,-4}, -{92,-6,-3}, -{92,-6,-2}, -{92,-6,-1}, -{92,-6,0}, -{92,-6,1}, -{92,-6,2}, -{92,-6,3}, -{92,-6,4}, -{92,-6,5}, -{92,-6,6}, -{92,-6,7}, -{92,-6,8}, -{92,-6,9}, -{92,-6,10}, -{92,-6,11}, -{92,-6,12}, -{92,-6,13}, -{92,-6,14}, -{92,-6,15}, -{92,-6,16}, -{92,-6,17}, -{92,-6,18}, -{92,-6,19}, -{92,-6,20}, -{92,-6,21}, -{92,-6,22}, -{92,-6,23}, -{92,-6,24}, -{92,-6,25}, -{92,-6,26}, -{92,-6,27}, -{92,-6,28}, -{92,-6,29}, -{92,-6,30}, -{92,-6,31}, -{92,-6,32}, -{92,-6,33}, -{92,-6,34}, -{92,-6,35}, -{92,-6,36}, -{92,-6,37}, -{92,-6,38}, -{92,-6,39}, -{92,-6,40}, -{92,-6,41}, -{92,-6,42}, -{92,-6,43}, -{92,-6,44}, -{92,-6,45}, -{92,-6,46}, -{92,-6,47}, -{92,-6,48}, -{92,-6,49}, -{92,-6,50}, -{92,-6,51}, -{92,-6,52}, -{92,-6,53}, -{92,-6,54}, -{92,-6,55}, -{92,-6,56}, -{92,-5,-12}, -{92,-5,-11}, -{92,-5,-10}, -{92,-5,-9}, -{92,-5,-8}, -{92,-5,-7}, -{92,-5,-6}, -{92,-5,-5}, -{92,-5,-4}, -{92,-5,-3}, -{92,-5,-2}, -{92,-5,-1}, -{92,-5,0}, -{92,-5,1}, -{92,-5,2}, -{92,-5,3}, -{92,-5,4}, -{92,-5,5}, -{92,-5,6}, -{92,-5,7}, -{92,-5,8}, -{92,-5,9}, -{92,-5,10}, -{92,-5,11}, -{92,-5,12}, -{92,-5,13}, -{92,-5,14}, -{92,-5,15}, -{92,-5,16}, -{92,-5,17}, -{92,-5,18}, -{92,-5,19}, -{92,-5,20}, -{92,-5,21}, -{92,-5,22}, -{92,-5,23}, -{92,-5,24}, -{92,-5,25}, -{92,-5,26}, -{92,-5,27}, -{92,-5,28}, -{92,-5,29}, -{92,-5,30}, -{92,-5,31}, -{92,-5,32}, -{92,-5,33}, -{92,-5,34}, -{92,-5,35}, -{92,-5,36}, -{92,-5,37}, -{92,-5,38}, -{92,-5,39}, -{92,-5,40}, -{92,-5,41}, -{92,-5,42}, -{92,-5,43}, -{92,-5,44}, -{92,-5,45}, -{92,-5,46}, -{92,-5,47}, -{92,-5,48}, -{92,-5,49}, -{92,-5,50}, -{92,-5,51}, -{92,-5,52}, -{92,-4,-12}, -{92,-4,-11}, -{92,-4,-10}, -{92,-4,-9}, -{92,-4,-8}, -{92,-4,-7}, -{92,-4,-6}, -{92,-4,-5}, -{92,-4,-4}, -{92,-4,-3}, -{92,-4,-2}, -{92,-4,-1}, -{92,-4,0}, -{92,-4,1}, -{92,-4,2}, -{92,-4,3}, -{92,-4,4}, -{92,-4,5}, -{92,-4,6}, -{92,-4,7}, -{92,-4,8}, -{92,-4,9}, -{92,-4,10}, -{92,-4,11}, -{92,-4,12}, -{92,-4,13}, -{92,-4,14}, -{92,-4,15}, -{92,-4,16}, -{92,-4,17}, -{92,-4,18}, -{92,-4,19}, -{92,-4,20}, -{92,-4,21}, -{92,-4,22}, -{92,-4,23}, -{92,-4,24}, -{92,-4,25}, -{92,-4,26}, -{92,-4,27}, -{92,-4,28}, -{92,-4,29}, -{92,-4,30}, -{92,-4,31}, -{92,-4,32}, -{92,-4,33}, -{92,-4,34}, -{92,-4,35}, -{92,-4,36}, -{92,-4,37}, -{92,-4,38}, -{92,-4,39}, -{92,-4,40}, -{92,-4,41}, -{92,-4,42}, -{92,-4,43}, -{92,-4,44}, -{92,-4,45}, -{92,-4,46}, -{92,-4,47}, -{92,-4,48}, -{92,-3,-12}, -{92,-3,-11}, -{92,-3,-10}, -{92,-3,-9}, -{92,-3,-8}, -{92,-3,-7}, -{92,-3,-6}, -{92,-3,-5}, -{92,-3,-4}, -{92,-3,-3}, -{92,-3,-2}, -{92,-3,-1}, -{92,-3,0}, -{92,-3,1}, -{92,-3,2}, -{92,-3,3}, -{92,-3,4}, -{92,-3,5}, -{92,-3,6}, -{92,-3,7}, -{92,-3,8}, -{92,-3,9}, -{92,-3,10}, -{92,-3,11}, -{92,-3,12}, -{92,-3,13}, -{92,-3,14}, -{92,-3,15}, -{92,-3,16}, -{92,-3,17}, -{92,-3,18}, -{92,-3,19}, -{92,-3,20}, -{92,-3,21}, -{92,-3,22}, -{92,-3,23}, -{92,-3,24}, -{92,-3,25}, -{92,-3,26}, -{92,-3,27}, -{92,-3,28}, -{92,-3,29}, -{92,-3,30}, -{92,-3,31}, -{92,-3,32}, -{92,-3,33}, -{92,-3,34}, -{92,-3,35}, -{92,-3,36}, -{92,-3,37}, -{92,-3,38}, -{92,-3,39}, -{92,-3,40}, -{92,-3,41}, -{92,-3,42}, -{92,-3,43}, -{92,-3,44}, -{92,-2,-12}, -{92,-2,-11}, -{92,-2,-10}, -{92,-2,-9}, -{92,-2,-8}, -{92,-2,-7}, -{92,-2,-6}, -{92,-2,-5}, -{92,-2,-4}, -{92,-2,-3}, -{92,-2,-2}, -{92,-2,-1}, -{92,-2,0}, -{92,-2,1}, -{92,-2,2}, -{92,-2,3}, -{92,-2,4}, -{92,-2,5}, -{92,-2,6}, -{92,-2,7}, -{92,-2,8}, -{92,-2,9}, -{92,-2,10}, -{92,-2,11}, -{92,-2,12}, -{92,-2,13}, -{92,-2,14}, -{92,-2,15}, -{92,-2,16}, -{92,-2,17}, -{92,-2,18}, -{92,-2,19}, -{92,-2,20}, -{92,-2,21}, -{92,-2,22}, -{92,-2,23}, -{92,-2,24}, -{92,-2,25}, -{92,-2,26}, -{92,-2,27}, -{92,-2,28}, -{92,-2,29}, -{92,-2,30}, -{92,-2,31}, -{92,-2,32}, -{92,-2,33}, -{92,-2,34}, -{92,-2,35}, -{92,-2,36}, -{92,-2,37}, -{92,-2,38}, -{92,-2,39}, -{92,-2,40}, -{92,-1,-12}, -{92,-1,-11}, -{92,-1,-10}, -{92,-1,-9}, -{92,-1,-8}, -{92,-1,-7}, -{92,-1,-6}, -{92,-1,-5}, -{92,-1,-4}, -{92,-1,-3}, -{92,-1,-2}, -{92,-1,-1}, -{92,-1,0}, -{92,-1,1}, -{92,-1,2}, -{92,-1,3}, -{92,-1,4}, -{92,-1,5}, -{92,-1,6}, -{92,-1,7}, -{92,-1,8}, -{92,-1,9}, -{92,-1,10}, -{92,-1,11}, -{92,-1,12}, -{92,-1,13}, -{92,-1,14}, -{92,-1,15}, -{92,-1,16}, -{92,-1,17}, -{92,-1,18}, -{92,-1,19}, -{92,-1,20}, -{92,-1,21}, -{92,-1,22}, -{92,-1,23}, -{92,-1,24}, -{92,-1,25}, -{92,-1,26}, -{92,-1,27}, -{92,-1,28}, -{92,-1,29}, -{92,-1,30}, -{92,-1,31}, -{92,-1,32}, -{92,-1,33}, -{92,-1,34}, -{92,-1,35}, -{92,-1,36}, -{92,0,-12}, -{92,0,-11}, -{92,0,-10}, -{92,0,-9}, -{92,0,-8}, -{92,0,-7}, -{92,0,-6}, -{92,0,-5}, -{92,0,-4}, -{92,0,-3}, -{92,0,-2}, -{92,0,-1}, -{92,0,0}, -{92,0,1}, -{92,0,2}, -{92,0,3}, -{92,0,4}, -{92,0,5}, -{92,0,6}, -{92,0,7}, -{92,0,8}, -{92,0,9}, -{92,0,10}, -{92,0,11}, -{92,0,12}, -{92,0,13}, -{92,0,14}, -{92,0,15}, -{92,0,16}, -{92,0,17}, -{92,0,18}, -{92,0,19}, -{92,0,20}, -{92,0,21}, -{92,0,22}, -{92,0,23}, -{92,0,24}, -{92,0,25}, -{92,0,26}, -{92,0,27}, -{92,0,28}, -{92,0,29}, -{92,0,30}, -{92,0,31}, -{92,0,32}, -{92,0,33}, -{92,1,-12}, -{92,1,-11}, -{92,1,-10}, -{92,1,-9}, -{92,1,-8}, -{92,1,-7}, -{92,1,-6}, -{92,1,-5}, -{92,1,-4}, -{92,1,-3}, -{92,1,-2}, -{92,1,-1}, -{92,1,0}, -{92,1,1}, -{92,1,2}, -{92,1,3}, -{92,1,4}, -{92,1,5}, -{92,1,6}, -{92,1,7}, -{92,1,8}, -{92,1,9}, -{92,1,10}, -{92,1,11}, -{92,1,12}, -{92,1,13}, -{92,1,14}, -{92,1,15}, -{92,1,16}, -{92,1,17}, -{92,1,18}, -{92,1,19}, -{92,1,20}, -{92,1,21}, -{92,1,22}, -{92,1,23}, -{92,1,24}, -{92,1,25}, -{92,1,26}, -{92,1,27}, -{92,1,28}, -{92,1,29}, -{92,1,30}, -{92,2,-12}, -{92,2,-11}, -{92,2,-10}, -{92,2,-9}, -{92,2,-8}, -{92,2,-7}, -{92,2,-6}, -{92,2,-5}, -{92,2,-4}, -{92,2,-3}, -{92,2,-2}, -{92,2,-1}, -{92,2,0}, -{92,2,1}, -{92,2,2}, -{92,2,3}, -{92,2,4}, -{92,2,5}, -{92,2,6}, -{92,2,7}, -{92,2,8}, -{92,2,9}, -{92,2,10}, -{92,2,11}, -{92,2,12}, -{92,2,13}, -{92,2,14}, -{92,2,15}, -{92,2,16}, -{92,2,17}, -{92,2,18}, -{92,2,19}, -{92,2,20}, -{92,2,21}, -{92,2,22}, -{92,2,23}, -{92,2,24}, -{92,2,25}, -{92,2,26}, -{92,3,-12}, -{92,3,-11}, -{92,3,-10}, -{92,3,-9}, -{92,3,-8}, -{92,3,-7}, -{92,3,-6}, -{92,3,-5}, -{92,3,-4}, -{92,3,-3}, -{92,3,-2}, -{92,3,-1}, -{92,3,0}, -{92,3,1}, -{92,3,2}, -{92,3,3}, -{92,3,4}, -{92,3,5}, -{92,3,6}, -{92,3,7}, -{92,3,8}, -{92,3,9}, -{92,3,10}, -{92,3,11}, -{92,3,12}, -{92,3,13}, -{92,3,14}, -{92,3,15}, -{92,3,16}, -{92,3,17}, -{92,3,18}, -{92,3,19}, -{92,3,20}, -{92,3,21}, -{92,3,22}, -{92,3,23}, -{92,4,-12}, -{92,4,-11}, -{92,4,-10}, -{92,4,-9}, -{92,4,-8}, -{92,4,-7}, -{92,4,-6}, -{92,4,-5}, -{92,4,-4}, -{92,4,-3}, -{92,4,-2}, -{92,4,-1}, -{92,4,0}, -{92,4,1}, -{92,4,2}, -{92,4,3}, -{92,4,4}, -{92,4,5}, -{92,4,6}, -{92,4,7}, -{92,4,8}, -{92,4,9}, -{92,4,10}, -{92,4,11}, -{92,4,12}, -{92,4,13}, -{92,4,14}, -{92,4,15}, -{92,4,16}, -{92,4,17}, -{92,4,18}, -{92,4,19}, -{92,4,20}, -{92,5,-12}, -{92,5,-11}, -{92,5,-10}, -{92,5,-9}, -{92,5,-8}, -{92,5,-7}, -{92,5,-6}, -{92,5,-5}, -{92,5,-4}, -{92,5,-3}, -{92,5,-2}, -{92,5,-1}, -{92,5,0}, -{92,5,1}, -{92,5,2}, -{92,5,3}, -{92,5,4}, -{92,5,5}, -{92,5,6}, -{92,5,7}, -{92,5,8}, -{92,5,9}, -{92,5,10}, -{92,5,11}, -{92,5,12}, -{92,5,13}, -{92,5,14}, -{92,5,15}, -{92,5,16}, -{92,5,17}, -{92,6,-12}, -{92,6,-11}, -{92,6,-10}, -{92,6,-9}, -{92,6,-8}, -{92,6,-7}, -{92,6,-6}, -{92,6,-5}, -{92,6,-4}, -{92,6,-3}, -{92,6,-2}, -{92,6,-1}, -{92,6,0}, -{92,6,1}, -{92,6,2}, -{92,6,3}, -{92,6,4}, -{92,6,5}, -{92,6,6}, -{92,6,7}, -{92,6,8}, -{92,6,9}, -{92,6,10}, -{92,6,11}, -{92,6,12}, -{92,6,13}, -{92,6,14}, -{92,6,15}, -{92,7,-12}, -{92,7,-11}, -{92,7,-10}, -{92,7,-9}, -{92,7,-8}, -{92,7,-7}, -{92,7,-6}, -{92,7,-5}, -{92,7,-4}, -{92,7,-3}, -{92,7,-2}, -{92,7,-1}, -{92,7,0}, -{92,7,1}, -{92,7,2}, -{92,7,3}, -{92,7,4}, -{92,7,5}, -{92,7,6}, -{92,7,7}, -{92,7,8}, -{92,7,9}, -{92,7,10}, -{92,7,11}, -{92,7,12}, -{92,8,-12}, -{92,8,-11}, -{92,8,-10}, -{92,8,-9}, -{92,8,-8}, -{92,8,-7}, -{92,8,-6}, -{92,8,-5}, -{92,8,-4}, -{92,8,-3}, -{92,8,-2}, -{92,8,-1}, -{92,8,0}, -{92,8,1}, -{92,8,2}, -{92,8,3}, -{92,8,4}, -{92,8,5}, -{92,8,6}, -{92,8,7}, -{92,8,8}, -{92,8,9}, -{92,9,-12}, -{92,9,-11}, -{92,9,-10}, -{92,9,-9}, -{92,9,-8}, -{92,9,-7}, -{92,9,-6}, -{92,9,-5}, -{92,9,-4}, -{92,9,-3}, -{92,9,-2}, -{92,9,-1}, -{92,9,0}, -{92,9,1}, -{92,9,2}, -{92,9,3}, -{92,9,4}, -{92,9,5}, -{92,9,6}, -{92,9,7}, -{92,10,-12}, -{92,10,-11}, -{92,10,-10}, -{92,10,-9}, -{92,10,-8}, -{92,10,-7}, -{92,10,-6}, -{92,10,-5}, -{92,10,-4}, -{92,10,-3}, -{92,10,-2}, -{92,10,-1}, -{92,10,0}, -{92,10,1}, -{92,10,2}, -{92,10,3}, -{92,10,4}, -{92,11,-12}, -{92,11,-11}, -{92,11,-10}, -{92,11,-9}, -{92,11,-8}, -{92,11,-7}, -{92,11,-6}, -{92,11,-5}, -{92,11,-4}, -{92,11,-3}, -{92,11,-2}, -{92,11,-1}, -{92,11,0}, -{92,11,1}, -{92,11,2}, -{92,12,-12}, -{92,12,-11}, -{92,12,-10}, -{92,12,-9}, -{92,12,-8}, -{92,12,-7}, -{92,12,-6}, -{92,12,-5}, -{92,12,-4}, -{92,12,-3}, -{92,12,-2}, -{92,12,-1}, -{92,13,-12}, -{92,13,-11}, -{92,13,-10}, -{92,13,-9}, -{92,13,-8}, -{92,13,-7}, -{92,13,-6}, -{92,13,-5}, -{92,13,-4}, -{92,13,-3}, -{92,14,-12}, -{92,14,-11}, -{92,14,-10}, -{92,14,-9}, -{92,14,-8}, -{92,14,-7}, -{92,14,-6}, -{92,14,-5}, -{92,15,-11}, -{92,15,-10}, -{92,15,-9}, -{92,15,-8}, -{92,16,-11}, -{92,16,-10}, -{93,-46,84}, -{93,-46,85}, -{93,-46,86}, -{93,-46,87}, -{93,-46,88}, -{93,-46,89}, -{93,-45,66}, -{93,-45,67}, -{93,-45,68}, -{93,-45,69}, -{93,-45,70}, -{93,-45,71}, -{93,-45,72}, -{93,-45,73}, -{93,-45,74}, -{93,-45,75}, -{93,-45,76}, -{93,-45,77}, -{93,-45,78}, -{93,-45,79}, -{93,-45,80}, -{93,-45,81}, -{93,-45,82}, -{93,-45,83}, -{93,-45,84}, -{93,-45,85}, -{93,-45,86}, -{93,-45,87}, -{93,-45,88}, -{93,-45,89}, -{93,-44,52}, -{93,-44,53}, -{93,-44,54}, -{93,-44,55}, -{93,-44,56}, -{93,-44,57}, -{93,-44,58}, -{93,-44,59}, -{93,-44,60}, -{93,-44,61}, -{93,-44,62}, -{93,-44,63}, -{93,-44,64}, -{93,-44,65}, -{93,-44,66}, -{93,-44,67}, -{93,-44,68}, -{93,-44,69}, -{93,-44,70}, -{93,-44,71}, -{93,-44,72}, -{93,-44,73}, -{93,-44,74}, -{93,-44,75}, -{93,-44,76}, -{93,-44,77}, -{93,-44,78}, -{93,-44,79}, -{93,-44,80}, -{93,-44,81}, -{93,-44,82}, -{93,-44,83}, -{93,-44,84}, -{93,-44,85}, -{93,-44,86}, -{93,-44,87}, -{93,-44,88}, -{93,-44,89}, -{93,-43,41}, -{93,-43,42}, -{93,-43,43}, -{93,-43,44}, -{93,-43,45}, -{93,-43,46}, -{93,-43,47}, -{93,-43,48}, -{93,-43,49}, -{93,-43,50}, -{93,-43,51}, -{93,-43,52}, -{93,-43,53}, -{93,-43,54}, -{93,-43,55}, -{93,-43,56}, -{93,-43,57}, -{93,-43,58}, -{93,-43,59}, -{93,-43,60}, -{93,-43,61}, -{93,-43,62}, -{93,-43,63}, -{93,-43,64}, -{93,-43,65}, -{93,-43,66}, -{93,-43,67}, -{93,-43,68}, -{93,-43,69}, -{93,-43,70}, -{93,-43,71}, -{93,-43,72}, -{93,-43,73}, -{93,-43,74}, -{93,-43,75}, -{93,-43,76}, -{93,-43,77}, -{93,-43,78}, -{93,-43,79}, -{93,-43,80}, -{93,-43,81}, -{93,-43,82}, -{93,-43,83}, -{93,-43,84}, -{93,-43,85}, -{93,-43,86}, -{93,-43,87}, -{93,-43,88}, -{93,-43,89}, -{93,-42,30}, -{93,-42,31}, -{93,-42,32}, -{93,-42,33}, -{93,-42,34}, -{93,-42,35}, -{93,-42,36}, -{93,-42,37}, -{93,-42,38}, -{93,-42,39}, -{93,-42,40}, -{93,-42,41}, -{93,-42,42}, -{93,-42,43}, -{93,-42,44}, -{93,-42,45}, -{93,-42,46}, -{93,-42,47}, -{93,-42,48}, -{93,-42,49}, -{93,-42,50}, -{93,-42,51}, -{93,-42,52}, -{93,-42,53}, -{93,-42,54}, -{93,-42,55}, -{93,-42,56}, -{93,-42,57}, -{93,-42,58}, -{93,-42,59}, -{93,-42,60}, -{93,-42,61}, -{93,-42,62}, -{93,-42,63}, -{93,-42,64}, -{93,-42,65}, -{93,-42,66}, -{93,-42,67}, -{93,-42,68}, -{93,-42,69}, -{93,-42,70}, -{93,-42,71}, -{93,-42,72}, -{93,-42,73}, -{93,-42,74}, -{93,-42,75}, -{93,-42,76}, -{93,-42,77}, -{93,-42,78}, -{93,-42,79}, -{93,-42,80}, -{93,-42,81}, -{93,-42,82}, -{93,-42,83}, -{93,-42,84}, -{93,-42,85}, -{93,-42,86}, -{93,-42,87}, -{93,-42,88}, -{93,-42,89}, -{93,-41,21}, -{93,-41,22}, -{93,-41,23}, -{93,-41,24}, -{93,-41,25}, -{93,-41,26}, -{93,-41,27}, -{93,-41,28}, -{93,-41,29}, -{93,-41,30}, -{93,-41,31}, -{93,-41,32}, -{93,-41,33}, -{93,-41,34}, -{93,-41,35}, -{93,-41,36}, -{93,-41,37}, -{93,-41,38}, -{93,-41,39}, -{93,-41,40}, -{93,-41,41}, -{93,-41,42}, -{93,-41,43}, -{93,-41,44}, -{93,-41,45}, -{93,-41,46}, -{93,-41,47}, -{93,-41,48}, -{93,-41,49}, -{93,-41,50}, -{93,-41,51}, -{93,-41,52}, -{93,-41,53}, -{93,-41,54}, -{93,-41,55}, -{93,-41,56}, -{93,-41,57}, -{93,-41,58}, -{93,-41,59}, -{93,-41,60}, -{93,-41,61}, -{93,-41,62}, -{93,-41,63}, -{93,-41,64}, -{93,-41,65}, -{93,-41,66}, -{93,-41,67}, -{93,-41,68}, -{93,-41,69}, -{93,-41,70}, -{93,-41,71}, -{93,-41,72}, -{93,-41,73}, -{93,-41,74}, -{93,-41,75}, -{93,-41,76}, -{93,-41,77}, -{93,-41,78}, -{93,-41,79}, -{93,-41,80}, -{93,-41,81}, -{93,-41,82}, -{93,-41,83}, -{93,-41,84}, -{93,-41,85}, -{93,-41,86}, -{93,-41,87}, -{93,-41,88}, -{93,-41,89}, -{93,-41,90}, -{93,-40,13}, -{93,-40,14}, -{93,-40,15}, -{93,-40,16}, -{93,-40,17}, -{93,-40,18}, -{93,-40,19}, -{93,-40,20}, -{93,-40,21}, -{93,-40,22}, -{93,-40,23}, -{93,-40,24}, -{93,-40,25}, -{93,-40,26}, -{93,-40,27}, -{93,-40,28}, -{93,-40,29}, -{93,-40,30}, -{93,-40,31}, -{93,-40,32}, -{93,-40,33}, -{93,-40,34}, -{93,-40,35}, -{93,-40,36}, -{93,-40,37}, -{93,-40,38}, -{93,-40,39}, -{93,-40,40}, -{93,-40,41}, -{93,-40,42}, -{93,-40,43}, -{93,-40,44}, -{93,-40,45}, -{93,-40,46}, -{93,-40,47}, -{93,-40,48}, -{93,-40,49}, -{93,-40,50}, -{93,-40,51}, -{93,-40,52}, -{93,-40,53}, -{93,-40,54}, -{93,-40,55}, -{93,-40,56}, -{93,-40,57}, -{93,-40,58}, -{93,-40,59}, -{93,-40,60}, -{93,-40,61}, -{93,-40,62}, -{93,-40,63}, -{93,-40,64}, -{93,-40,65}, -{93,-40,66}, -{93,-40,67}, -{93,-40,68}, -{93,-40,69}, -{93,-40,70}, -{93,-40,71}, -{93,-40,72}, -{93,-40,73}, -{93,-40,74}, -{93,-40,75}, -{93,-40,76}, -{93,-40,77}, -{93,-40,78}, -{93,-40,79}, -{93,-40,80}, -{93,-40,81}, -{93,-40,82}, -{93,-40,83}, -{93,-40,84}, -{93,-40,85}, -{93,-40,86}, -{93,-40,87}, -{93,-40,88}, -{93,-40,89}, -{93,-40,90}, -{93,-39,6}, -{93,-39,7}, -{93,-39,8}, -{93,-39,9}, -{93,-39,10}, -{93,-39,11}, -{93,-39,12}, -{93,-39,13}, -{93,-39,14}, -{93,-39,15}, -{93,-39,16}, -{93,-39,17}, -{93,-39,18}, -{93,-39,19}, -{93,-39,20}, -{93,-39,21}, -{93,-39,22}, -{93,-39,23}, -{93,-39,24}, -{93,-39,25}, -{93,-39,26}, -{93,-39,27}, -{93,-39,28}, -{93,-39,29}, -{93,-39,30}, -{93,-39,31}, -{93,-39,32}, -{93,-39,33}, -{93,-39,34}, -{93,-39,35}, -{93,-39,36}, -{93,-39,37}, -{93,-39,38}, -{93,-39,39}, -{93,-39,40}, -{93,-39,41}, -{93,-39,42}, -{93,-39,43}, -{93,-39,44}, -{93,-39,45}, -{93,-39,46}, -{93,-39,47}, -{93,-39,48}, -{93,-39,49}, -{93,-39,50}, -{93,-39,51}, -{93,-39,52}, -{93,-39,53}, -{93,-39,54}, -{93,-39,55}, -{93,-39,56}, -{93,-39,57}, -{93,-39,58}, -{93,-39,59}, -{93,-39,60}, -{93,-39,61}, -{93,-39,62}, -{93,-39,63}, -{93,-39,64}, -{93,-39,65}, -{93,-39,66}, -{93,-39,67}, -{93,-39,68}, -{93,-39,69}, -{93,-39,70}, -{93,-39,71}, -{93,-39,72}, -{93,-39,73}, -{93,-39,74}, -{93,-39,75}, -{93,-39,76}, -{93,-39,77}, -{93,-39,78}, -{93,-39,79}, -{93,-39,80}, -{93,-39,81}, -{93,-39,82}, -{93,-39,83}, -{93,-39,84}, -{93,-39,85}, -{93,-39,86}, -{93,-39,87}, -{93,-39,88}, -{93,-39,89}, -{93,-39,90}, -{93,-38,-1}, -{93,-38,0}, -{93,-38,1}, -{93,-38,2}, -{93,-38,3}, -{93,-38,4}, -{93,-38,5}, -{93,-38,6}, -{93,-38,7}, -{93,-38,8}, -{93,-38,9}, -{93,-38,10}, -{93,-38,11}, -{93,-38,12}, -{93,-38,13}, -{93,-38,14}, -{93,-38,15}, -{93,-38,16}, -{93,-38,17}, -{93,-38,18}, -{93,-38,19}, -{93,-38,20}, -{93,-38,21}, -{93,-38,22}, -{93,-38,23}, -{93,-38,24}, -{93,-38,25}, -{93,-38,26}, -{93,-38,27}, -{93,-38,28}, -{93,-38,29}, -{93,-38,30}, -{93,-38,31}, -{93,-38,32}, -{93,-38,33}, -{93,-38,34}, -{93,-38,35}, -{93,-38,36}, -{93,-38,37}, -{93,-38,38}, -{93,-38,39}, -{93,-38,40}, -{93,-38,41}, -{93,-38,42}, -{93,-38,43}, -{93,-38,44}, -{93,-38,45}, -{93,-38,46}, -{93,-38,47}, -{93,-38,48}, -{93,-38,49}, -{93,-38,50}, -{93,-38,51}, -{93,-38,52}, -{93,-38,53}, -{93,-38,54}, -{93,-38,55}, -{93,-38,56}, -{93,-38,57}, -{93,-38,58}, -{93,-38,59}, -{93,-38,60}, -{93,-38,61}, -{93,-38,62}, -{93,-38,63}, -{93,-38,64}, -{93,-38,65}, -{93,-38,66}, -{93,-38,67}, -{93,-38,68}, -{93,-38,69}, -{93,-38,70}, -{93,-38,71}, -{93,-38,72}, -{93,-38,73}, -{93,-38,74}, -{93,-38,75}, -{93,-38,76}, -{93,-38,77}, -{93,-38,78}, -{93,-38,79}, -{93,-38,80}, -{93,-38,81}, -{93,-38,82}, -{93,-38,83}, -{93,-38,84}, -{93,-38,85}, -{93,-38,86}, -{93,-38,87}, -{93,-38,88}, -{93,-38,89}, -{93,-38,90}, -{93,-37,-8}, -{93,-37,-7}, -{93,-37,-6}, -{93,-37,-5}, -{93,-37,-4}, -{93,-37,-3}, -{93,-37,-2}, -{93,-37,-1}, -{93,-37,0}, -{93,-37,1}, -{93,-37,2}, -{93,-37,3}, -{93,-37,4}, -{93,-37,5}, -{93,-37,6}, -{93,-37,7}, -{93,-37,8}, -{93,-37,9}, -{93,-37,10}, -{93,-37,11}, -{93,-37,12}, -{93,-37,13}, -{93,-37,14}, -{93,-37,15}, -{93,-37,16}, -{93,-37,17}, -{93,-37,18}, -{93,-37,19}, -{93,-37,20}, -{93,-37,21}, -{93,-37,22}, -{93,-37,23}, -{93,-37,24}, -{93,-37,25}, -{93,-37,26}, -{93,-37,27}, -{93,-37,28}, -{93,-37,29}, -{93,-37,30}, -{93,-37,31}, -{93,-37,32}, -{93,-37,33}, -{93,-37,34}, -{93,-37,35}, -{93,-37,36}, -{93,-37,37}, -{93,-37,38}, -{93,-37,39}, -{93,-37,40}, -{93,-37,41}, -{93,-37,42}, -{93,-37,43}, -{93,-37,44}, -{93,-37,45}, -{93,-37,46}, -{93,-37,47}, -{93,-37,48}, -{93,-37,49}, -{93,-37,50}, -{93,-37,51}, -{93,-37,52}, -{93,-37,53}, -{93,-37,54}, -{93,-37,55}, -{93,-37,56}, -{93,-37,57}, -{93,-37,58}, -{93,-37,59}, -{93,-37,60}, -{93,-37,61}, -{93,-37,62}, -{93,-37,63}, -{93,-37,64}, -{93,-37,65}, -{93,-37,66}, -{93,-37,67}, -{93,-37,68}, -{93,-37,69}, -{93,-37,70}, -{93,-37,71}, -{93,-37,72}, -{93,-37,73}, -{93,-37,74}, -{93,-37,75}, -{93,-37,76}, -{93,-37,77}, -{93,-37,78}, -{93,-37,79}, -{93,-37,80}, -{93,-37,81}, -{93,-37,82}, -{93,-37,83}, -{93,-37,84}, -{93,-37,85}, -{93,-37,86}, -{93,-37,87}, -{93,-37,88}, -{93,-37,89}, -{93,-37,90}, -{93,-36,-11}, -{93,-36,-10}, -{93,-36,-9}, -{93,-36,-8}, -{93,-36,-7}, -{93,-36,-6}, -{93,-36,-5}, -{93,-36,-4}, -{93,-36,-3}, -{93,-36,-2}, -{93,-36,-1}, -{93,-36,0}, -{93,-36,1}, -{93,-36,2}, -{93,-36,3}, -{93,-36,4}, -{93,-36,5}, -{93,-36,6}, -{93,-36,7}, -{93,-36,8}, -{93,-36,9}, -{93,-36,10}, -{93,-36,11}, -{93,-36,12}, -{93,-36,13}, -{93,-36,14}, -{93,-36,15}, -{93,-36,16}, -{93,-36,17}, -{93,-36,18}, -{93,-36,19}, -{93,-36,20}, -{93,-36,21}, -{93,-36,22}, -{93,-36,23}, -{93,-36,24}, -{93,-36,25}, -{93,-36,26}, -{93,-36,27}, -{93,-36,28}, -{93,-36,29}, -{93,-36,30}, -{93,-36,31}, -{93,-36,32}, -{93,-36,33}, -{93,-36,34}, -{93,-36,35}, -{93,-36,36}, -{93,-36,37}, -{93,-36,38}, -{93,-36,39}, -{93,-36,40}, -{93,-36,41}, -{93,-36,42}, -{93,-36,43}, -{93,-36,44}, -{93,-36,45}, -{93,-36,46}, -{93,-36,47}, -{93,-36,48}, -{93,-36,49}, -{93,-36,50}, -{93,-36,51}, -{93,-36,52}, -{93,-36,53}, -{93,-36,54}, -{93,-36,55}, -{93,-36,56}, -{93,-36,57}, -{93,-36,58}, -{93,-36,59}, -{93,-36,60}, -{93,-36,61}, -{93,-36,62}, -{93,-36,63}, -{93,-36,64}, -{93,-36,65}, -{93,-36,66}, -{93,-36,67}, -{93,-36,68}, -{93,-36,69}, -{93,-36,70}, -{93,-36,71}, -{93,-36,72}, -{93,-36,73}, -{93,-36,74}, -{93,-36,75}, -{93,-36,76}, -{93,-36,77}, -{93,-36,78}, -{93,-36,79}, -{93,-36,80}, -{93,-36,81}, -{93,-36,82}, -{93,-36,83}, -{93,-36,84}, -{93,-36,85}, -{93,-36,86}, -{93,-36,87}, -{93,-36,88}, -{93,-36,89}, -{93,-36,90}, -{93,-35,-11}, -{93,-35,-10}, -{93,-35,-9}, -{93,-35,-8}, -{93,-35,-7}, -{93,-35,-6}, -{93,-35,-5}, -{93,-35,-4}, -{93,-35,-3}, -{93,-35,-2}, -{93,-35,-1}, -{93,-35,0}, -{93,-35,1}, -{93,-35,2}, -{93,-35,3}, -{93,-35,4}, -{93,-35,5}, -{93,-35,6}, -{93,-35,7}, -{93,-35,8}, -{93,-35,9}, -{93,-35,10}, -{93,-35,11}, -{93,-35,12}, -{93,-35,13}, -{93,-35,14}, -{93,-35,15}, -{93,-35,16}, -{93,-35,17}, -{93,-35,18}, -{93,-35,19}, -{93,-35,20}, -{93,-35,21}, -{93,-35,22}, -{93,-35,23}, -{93,-35,24}, -{93,-35,25}, -{93,-35,26}, -{93,-35,27}, -{93,-35,28}, -{93,-35,29}, -{93,-35,30}, -{93,-35,31}, -{93,-35,32}, -{93,-35,33}, -{93,-35,34}, -{93,-35,35}, -{93,-35,36}, -{93,-35,37}, -{93,-35,38}, -{93,-35,39}, -{93,-35,40}, -{93,-35,41}, -{93,-35,42}, -{93,-35,43}, -{93,-35,44}, -{93,-35,45}, -{93,-35,46}, -{93,-35,47}, -{93,-35,48}, -{93,-35,49}, -{93,-35,50}, -{93,-35,51}, -{93,-35,52}, -{93,-35,53}, -{93,-35,54}, -{93,-35,55}, -{93,-35,56}, -{93,-35,57}, -{93,-35,58}, -{93,-35,59}, -{93,-35,60}, -{93,-35,61}, -{93,-35,62}, -{93,-35,63}, -{93,-35,64}, -{93,-35,65}, -{93,-35,66}, -{93,-35,67}, -{93,-35,68}, -{93,-35,69}, -{93,-35,70}, -{93,-35,71}, -{93,-35,72}, -{93,-35,73}, -{93,-35,74}, -{93,-35,75}, -{93,-35,76}, -{93,-35,77}, -{93,-35,78}, -{93,-35,79}, -{93,-35,80}, -{93,-35,81}, -{93,-35,82}, -{93,-35,83}, -{93,-35,84}, -{93,-35,85}, -{93,-35,86}, -{93,-35,87}, -{93,-35,88}, -{93,-35,89}, -{93,-35,90}, -{93,-34,-11}, -{93,-34,-10}, -{93,-34,-9}, -{93,-34,-8}, -{93,-34,-7}, -{93,-34,-6}, -{93,-34,-5}, -{93,-34,-4}, -{93,-34,-3}, -{93,-34,-2}, -{93,-34,-1}, -{93,-34,0}, -{93,-34,1}, -{93,-34,2}, -{93,-34,3}, -{93,-34,4}, -{93,-34,5}, -{93,-34,6}, -{93,-34,7}, -{93,-34,8}, -{93,-34,9}, -{93,-34,10}, -{93,-34,11}, -{93,-34,12}, -{93,-34,13}, -{93,-34,14}, -{93,-34,15}, -{93,-34,16}, -{93,-34,17}, -{93,-34,18}, -{93,-34,19}, -{93,-34,20}, -{93,-34,21}, -{93,-34,22}, -{93,-34,23}, -{93,-34,24}, -{93,-34,25}, -{93,-34,26}, -{93,-34,27}, -{93,-34,28}, -{93,-34,29}, -{93,-34,30}, -{93,-34,31}, -{93,-34,32}, -{93,-34,33}, -{93,-34,34}, -{93,-34,35}, -{93,-34,36}, -{93,-34,37}, -{93,-34,38}, -{93,-34,39}, -{93,-34,40}, -{93,-34,41}, -{93,-34,42}, -{93,-34,43}, -{93,-34,44}, -{93,-34,45}, -{93,-34,46}, -{93,-34,47}, -{93,-34,48}, -{93,-34,49}, -{93,-34,50}, -{93,-34,51}, -{93,-34,52}, -{93,-34,53}, -{93,-34,54}, -{93,-34,55}, -{93,-34,56}, -{93,-34,57}, -{93,-34,58}, -{93,-34,59}, -{93,-34,60}, -{93,-34,61}, -{93,-34,62}, -{93,-34,63}, -{93,-34,64}, -{93,-34,65}, -{93,-34,66}, -{93,-34,67}, -{93,-34,68}, -{93,-34,69}, -{93,-34,70}, -{93,-34,71}, -{93,-34,72}, -{93,-34,73}, -{93,-34,74}, -{93,-34,75}, -{93,-34,76}, -{93,-34,77}, -{93,-34,78}, -{93,-34,79}, -{93,-34,80}, -{93,-34,81}, -{93,-34,82}, -{93,-34,83}, -{93,-34,84}, -{93,-34,85}, -{93,-34,86}, -{93,-34,87}, -{93,-34,88}, -{93,-34,89}, -{93,-34,90}, -{93,-33,-11}, -{93,-33,-10}, -{93,-33,-9}, -{93,-33,-8}, -{93,-33,-7}, -{93,-33,-6}, -{93,-33,-5}, -{93,-33,-4}, -{93,-33,-3}, -{93,-33,-2}, -{93,-33,-1}, -{93,-33,0}, -{93,-33,1}, -{93,-33,2}, -{93,-33,3}, -{93,-33,4}, -{93,-33,5}, -{93,-33,6}, -{93,-33,7}, -{93,-33,8}, -{93,-33,9}, -{93,-33,10}, -{93,-33,11}, -{93,-33,12}, -{93,-33,13}, -{93,-33,14}, -{93,-33,15}, -{93,-33,16}, -{93,-33,17}, -{93,-33,18}, -{93,-33,19}, -{93,-33,20}, -{93,-33,21}, -{93,-33,22}, -{93,-33,23}, -{93,-33,24}, -{93,-33,25}, -{93,-33,26}, -{93,-33,27}, -{93,-33,28}, -{93,-33,29}, -{93,-33,30}, -{93,-33,31}, -{93,-33,32}, -{93,-33,33}, -{93,-33,34}, -{93,-33,35}, -{93,-33,36}, -{93,-33,37}, -{93,-33,38}, -{93,-33,39}, -{93,-33,40}, -{93,-33,41}, -{93,-33,42}, -{93,-33,43}, -{93,-33,44}, -{93,-33,45}, -{93,-33,46}, -{93,-33,47}, -{93,-33,48}, -{93,-33,49}, -{93,-33,50}, -{93,-33,51}, -{93,-33,52}, -{93,-33,53}, -{93,-33,54}, -{93,-33,55}, -{93,-33,56}, -{93,-33,57}, -{93,-33,58}, -{93,-33,59}, -{93,-33,60}, -{93,-33,61}, -{93,-33,62}, -{93,-33,63}, -{93,-33,64}, -{93,-33,65}, -{93,-33,66}, -{93,-33,67}, -{93,-33,68}, -{93,-33,69}, -{93,-33,70}, -{93,-33,71}, -{93,-33,72}, -{93,-33,73}, -{93,-33,74}, -{93,-33,75}, -{93,-33,76}, -{93,-33,77}, -{93,-33,78}, -{93,-33,79}, -{93,-33,80}, -{93,-33,81}, -{93,-33,82}, -{93,-33,83}, -{93,-33,84}, -{93,-33,85}, -{93,-33,86}, -{93,-33,87}, -{93,-33,88}, -{93,-33,89}, -{93,-33,90}, -{93,-32,-11}, -{93,-32,-10}, -{93,-32,-9}, -{93,-32,-8}, -{93,-32,-7}, -{93,-32,-6}, -{93,-32,-5}, -{93,-32,-4}, -{93,-32,-3}, -{93,-32,-2}, -{93,-32,-1}, -{93,-32,0}, -{93,-32,1}, -{93,-32,2}, -{93,-32,3}, -{93,-32,4}, -{93,-32,5}, -{93,-32,6}, -{93,-32,7}, -{93,-32,8}, -{93,-32,9}, -{93,-32,10}, -{93,-32,11}, -{93,-32,12}, -{93,-32,13}, -{93,-32,14}, -{93,-32,15}, -{93,-32,16}, -{93,-32,17}, -{93,-32,18}, -{93,-32,19}, -{93,-32,20}, -{93,-32,21}, -{93,-32,22}, -{93,-32,23}, -{93,-32,24}, -{93,-32,25}, -{93,-32,26}, -{93,-32,27}, -{93,-32,28}, -{93,-32,29}, -{93,-32,30}, -{93,-32,31}, -{93,-32,32}, -{93,-32,33}, -{93,-32,34}, -{93,-32,35}, -{93,-32,36}, -{93,-32,37}, -{93,-32,38}, -{93,-32,39}, -{93,-32,40}, -{93,-32,41}, -{93,-32,42}, -{93,-32,43}, -{93,-32,44}, -{93,-32,45}, -{93,-32,46}, -{93,-32,47}, -{93,-32,48}, -{93,-32,49}, -{93,-32,50}, -{93,-32,51}, -{93,-32,52}, -{93,-32,53}, -{93,-32,54}, -{93,-32,55}, -{93,-32,56}, -{93,-32,57}, -{93,-32,58}, -{93,-32,59}, -{93,-32,60}, -{93,-32,61}, -{93,-32,62}, -{93,-32,63}, -{93,-32,64}, -{93,-32,65}, -{93,-32,66}, -{93,-32,67}, -{93,-32,68}, -{93,-32,69}, -{93,-32,70}, -{93,-32,71}, -{93,-32,72}, -{93,-32,73}, -{93,-32,74}, -{93,-32,75}, -{93,-32,76}, -{93,-32,77}, -{93,-32,78}, -{93,-32,79}, -{93,-32,80}, -{93,-32,81}, -{93,-32,82}, -{93,-32,83}, -{93,-32,84}, -{93,-32,85}, -{93,-32,86}, -{93,-32,87}, -{93,-32,88}, -{93,-32,89}, -{93,-32,90}, -{93,-31,-11}, -{93,-31,-10}, -{93,-31,-9}, -{93,-31,-8}, -{93,-31,-7}, -{93,-31,-6}, -{93,-31,-5}, -{93,-31,-4}, -{93,-31,-3}, -{93,-31,-2}, -{93,-31,-1}, -{93,-31,0}, -{93,-31,1}, -{93,-31,2}, -{93,-31,3}, -{93,-31,4}, -{93,-31,5}, -{93,-31,6}, -{93,-31,7}, -{93,-31,8}, -{93,-31,9}, -{93,-31,10}, -{93,-31,11}, -{93,-31,12}, -{93,-31,13}, -{93,-31,14}, -{93,-31,15}, -{93,-31,16}, -{93,-31,17}, -{93,-31,18}, -{93,-31,19}, -{93,-31,20}, -{93,-31,21}, -{93,-31,22}, -{93,-31,23}, -{93,-31,24}, -{93,-31,25}, -{93,-31,26}, -{93,-31,27}, -{93,-31,28}, -{93,-31,29}, -{93,-31,30}, -{93,-31,31}, -{93,-31,32}, -{93,-31,33}, -{93,-31,34}, -{93,-31,35}, -{93,-31,36}, -{93,-31,37}, -{93,-31,38}, -{93,-31,39}, -{93,-31,40}, -{93,-31,41}, -{93,-31,42}, -{93,-31,43}, -{93,-31,44}, -{93,-31,45}, -{93,-31,46}, -{93,-31,47}, -{93,-31,48}, -{93,-31,49}, -{93,-31,50}, -{93,-31,51}, -{93,-31,52}, -{93,-31,53}, -{93,-31,54}, -{93,-31,55}, -{93,-31,56}, -{93,-31,57}, -{93,-31,58}, -{93,-31,59}, -{93,-31,60}, -{93,-31,61}, -{93,-31,62}, -{93,-31,63}, -{93,-31,64}, -{93,-31,65}, -{93,-31,66}, -{93,-31,67}, -{93,-31,68}, -{93,-31,69}, -{93,-31,70}, -{93,-31,71}, -{93,-31,72}, -{93,-31,73}, -{93,-31,74}, -{93,-31,75}, -{93,-31,76}, -{93,-31,77}, -{93,-31,78}, -{93,-31,79}, -{93,-31,80}, -{93,-31,81}, -{93,-31,82}, -{93,-31,83}, -{93,-31,84}, -{93,-31,85}, -{93,-31,86}, -{93,-31,87}, -{93,-31,88}, -{93,-31,89}, -{93,-31,90}, -{93,-30,-11}, -{93,-30,-10}, -{93,-30,-9}, -{93,-30,-8}, -{93,-30,-7}, -{93,-30,-6}, -{93,-30,-5}, -{93,-30,-4}, -{93,-30,-3}, -{93,-30,-2}, -{93,-30,-1}, -{93,-30,0}, -{93,-30,1}, -{93,-30,2}, -{93,-30,3}, -{93,-30,4}, -{93,-30,5}, -{93,-30,6}, -{93,-30,7}, -{93,-30,8}, -{93,-30,9}, -{93,-30,10}, -{93,-30,11}, -{93,-30,12}, -{93,-30,13}, -{93,-30,14}, -{93,-30,15}, -{93,-30,16}, -{93,-30,17}, -{93,-30,18}, -{93,-30,19}, -{93,-30,20}, -{93,-30,21}, -{93,-30,22}, -{93,-30,23}, -{93,-30,24}, -{93,-30,25}, -{93,-30,26}, -{93,-30,27}, -{93,-30,28}, -{93,-30,29}, -{93,-30,30}, -{93,-30,31}, -{93,-30,32}, -{93,-30,33}, -{93,-30,34}, -{93,-30,35}, -{93,-30,36}, -{93,-30,37}, -{93,-30,38}, -{93,-30,39}, -{93,-30,40}, -{93,-30,41}, -{93,-30,42}, -{93,-30,43}, -{93,-30,44}, -{93,-30,45}, -{93,-30,46}, -{93,-30,47}, -{93,-30,48}, -{93,-30,49}, -{93,-30,50}, -{93,-30,51}, -{93,-30,52}, -{93,-30,53}, -{93,-30,54}, -{93,-30,55}, -{93,-30,56}, -{93,-30,57}, -{93,-30,58}, -{93,-30,59}, -{93,-30,60}, -{93,-30,61}, -{93,-30,62}, -{93,-30,63}, -{93,-30,64}, -{93,-30,65}, -{93,-30,66}, -{93,-30,67}, -{93,-30,68}, -{93,-30,69}, -{93,-30,70}, -{93,-30,71}, -{93,-30,72}, -{93,-30,73}, -{93,-30,74}, -{93,-30,75}, -{93,-30,76}, -{93,-30,77}, -{93,-30,78}, -{93,-30,79}, -{93,-30,80}, -{93,-30,81}, -{93,-30,82}, -{93,-30,83}, -{93,-30,84}, -{93,-30,85}, -{93,-30,86}, -{93,-30,87}, -{93,-30,88}, -{93,-30,89}, -{93,-30,90}, -{93,-29,-11}, -{93,-29,-10}, -{93,-29,-9}, -{93,-29,-8}, -{93,-29,-7}, -{93,-29,-6}, -{93,-29,-5}, -{93,-29,-4}, -{93,-29,-3}, -{93,-29,-2}, -{93,-29,-1}, -{93,-29,0}, -{93,-29,1}, -{93,-29,2}, -{93,-29,3}, -{93,-29,4}, -{93,-29,5}, -{93,-29,6}, -{93,-29,7}, -{93,-29,8}, -{93,-29,9}, -{93,-29,10}, -{93,-29,11}, -{93,-29,12}, -{93,-29,13}, -{93,-29,14}, -{93,-29,15}, -{93,-29,16}, -{93,-29,17}, -{93,-29,18}, -{93,-29,19}, -{93,-29,20}, -{93,-29,21}, -{93,-29,22}, -{93,-29,23}, -{93,-29,24}, -{93,-29,25}, -{93,-29,26}, -{93,-29,27}, -{93,-29,28}, -{93,-29,29}, -{93,-29,30}, -{93,-29,31}, -{93,-29,32}, -{93,-29,33}, -{93,-29,34}, -{93,-29,35}, -{93,-29,36}, -{93,-29,37}, -{93,-29,38}, -{93,-29,39}, -{93,-29,40}, -{93,-29,41}, -{93,-29,42}, -{93,-29,43}, -{93,-29,44}, -{93,-29,45}, -{93,-29,46}, -{93,-29,47}, -{93,-29,48}, -{93,-29,49}, -{93,-29,50}, -{93,-29,51}, -{93,-29,52}, -{93,-29,53}, -{93,-29,54}, -{93,-29,55}, -{93,-29,56}, -{93,-29,57}, -{93,-29,58}, -{93,-29,59}, -{93,-29,60}, -{93,-29,61}, -{93,-29,62}, -{93,-29,63}, -{93,-29,64}, -{93,-29,65}, -{93,-29,66}, -{93,-29,67}, -{93,-29,68}, -{93,-29,69}, -{93,-29,70}, -{93,-29,71}, -{93,-29,72}, -{93,-29,73}, -{93,-29,74}, -{93,-29,75}, -{93,-29,76}, -{93,-29,77}, -{93,-29,78}, -{93,-29,79}, -{93,-29,80}, -{93,-29,81}, -{93,-29,82}, -{93,-29,83}, -{93,-29,84}, -{93,-29,85}, -{93,-29,86}, -{93,-29,87}, -{93,-29,88}, -{93,-29,89}, -{93,-29,90}, -{93,-28,-11}, -{93,-28,-10}, -{93,-28,-9}, -{93,-28,-8}, -{93,-28,-7}, -{93,-28,-6}, -{93,-28,-5}, -{93,-28,-4}, -{93,-28,-3}, -{93,-28,-2}, -{93,-28,-1}, -{93,-28,0}, -{93,-28,1}, -{93,-28,2}, -{93,-28,3}, -{93,-28,4}, -{93,-28,5}, -{93,-28,6}, -{93,-28,7}, -{93,-28,8}, -{93,-28,9}, -{93,-28,10}, -{93,-28,11}, -{93,-28,12}, -{93,-28,13}, -{93,-28,14}, -{93,-28,15}, -{93,-28,16}, -{93,-28,17}, -{93,-28,18}, -{93,-28,19}, -{93,-28,20}, -{93,-28,21}, -{93,-28,22}, -{93,-28,23}, -{93,-28,24}, -{93,-28,25}, -{93,-28,26}, -{93,-28,27}, -{93,-28,28}, -{93,-28,29}, -{93,-28,30}, -{93,-28,31}, -{93,-28,32}, -{93,-28,33}, -{93,-28,34}, -{93,-28,35}, -{93,-28,36}, -{93,-28,37}, -{93,-28,38}, -{93,-28,39}, -{93,-28,40}, -{93,-28,41}, -{93,-28,42}, -{93,-28,43}, -{93,-28,44}, -{93,-28,45}, -{93,-28,46}, -{93,-28,47}, -{93,-28,48}, -{93,-28,49}, -{93,-28,50}, -{93,-28,51}, -{93,-28,52}, -{93,-28,53}, -{93,-28,54}, -{93,-28,55}, -{93,-28,56}, -{93,-28,57}, -{93,-28,58}, -{93,-28,59}, -{93,-28,60}, -{93,-28,61}, -{93,-28,62}, -{93,-28,63}, -{93,-28,64}, -{93,-28,65}, -{93,-28,66}, -{93,-28,67}, -{93,-28,68}, -{93,-28,69}, -{93,-28,70}, -{93,-28,71}, -{93,-28,72}, -{93,-28,73}, -{93,-28,74}, -{93,-28,75}, -{93,-28,76}, -{93,-28,77}, -{93,-28,78}, -{93,-28,79}, -{93,-28,80}, -{93,-28,81}, -{93,-28,82}, -{93,-28,83}, -{93,-28,84}, -{93,-28,85}, -{93,-28,86}, -{93,-28,87}, -{93,-28,88}, -{93,-28,89}, -{93,-28,90}, -{93,-27,-11}, -{93,-27,-10}, -{93,-27,-9}, -{93,-27,-8}, -{93,-27,-7}, -{93,-27,-6}, -{93,-27,-5}, -{93,-27,-4}, -{93,-27,-3}, -{93,-27,-2}, -{93,-27,-1}, -{93,-27,0}, -{93,-27,1}, -{93,-27,2}, -{93,-27,3}, -{93,-27,4}, -{93,-27,5}, -{93,-27,6}, -{93,-27,7}, -{93,-27,8}, -{93,-27,9}, -{93,-27,10}, -{93,-27,11}, -{93,-27,12}, -{93,-27,13}, -{93,-27,14}, -{93,-27,15}, -{93,-27,16}, -{93,-27,17}, -{93,-27,18}, -{93,-27,19}, -{93,-27,20}, -{93,-27,21}, -{93,-27,22}, -{93,-27,23}, -{93,-27,24}, -{93,-27,25}, -{93,-27,26}, -{93,-27,27}, -{93,-27,28}, -{93,-27,29}, -{93,-27,30}, -{93,-27,31}, -{93,-27,32}, -{93,-27,33}, -{93,-27,34}, -{93,-27,35}, -{93,-27,36}, -{93,-27,37}, -{93,-27,38}, -{93,-27,39}, -{93,-27,40}, -{93,-27,41}, -{93,-27,42}, -{93,-27,43}, -{93,-27,44}, -{93,-27,45}, -{93,-27,46}, -{93,-27,47}, -{93,-27,48}, -{93,-27,49}, -{93,-27,50}, -{93,-27,51}, -{93,-27,52}, -{93,-27,53}, -{93,-27,54}, -{93,-27,55}, -{93,-27,56}, -{93,-27,57}, -{93,-27,58}, -{93,-27,59}, -{93,-27,60}, -{93,-27,61}, -{93,-27,62}, -{93,-27,63}, -{93,-27,64}, -{93,-27,65}, -{93,-27,66}, -{93,-27,67}, -{93,-27,68}, -{93,-27,69}, -{93,-27,70}, -{93,-27,71}, -{93,-27,72}, -{93,-27,73}, -{93,-27,74}, -{93,-27,75}, -{93,-27,76}, -{93,-27,77}, -{93,-27,78}, -{93,-27,79}, -{93,-27,80}, -{93,-27,81}, -{93,-27,82}, -{93,-27,83}, -{93,-27,84}, -{93,-27,85}, -{93,-27,86}, -{93,-27,87}, -{93,-27,88}, -{93,-27,89}, -{93,-27,90}, -{93,-26,-11}, -{93,-26,-10}, -{93,-26,-9}, -{93,-26,-8}, -{93,-26,-7}, -{93,-26,-6}, -{93,-26,-5}, -{93,-26,-4}, -{93,-26,-3}, -{93,-26,-2}, -{93,-26,-1}, -{93,-26,0}, -{93,-26,1}, -{93,-26,2}, -{93,-26,3}, -{93,-26,4}, -{93,-26,5}, -{93,-26,6}, -{93,-26,7}, -{93,-26,8}, -{93,-26,9}, -{93,-26,10}, -{93,-26,11}, -{93,-26,12}, -{93,-26,13}, -{93,-26,14}, -{93,-26,15}, -{93,-26,16}, -{93,-26,17}, -{93,-26,18}, -{93,-26,19}, -{93,-26,20}, -{93,-26,21}, -{93,-26,22}, -{93,-26,23}, -{93,-26,24}, -{93,-26,25}, -{93,-26,26}, -{93,-26,27}, -{93,-26,28}, -{93,-26,29}, -{93,-26,30}, -{93,-26,31}, -{93,-26,32}, -{93,-26,33}, -{93,-26,34}, -{93,-26,35}, -{93,-26,36}, -{93,-26,37}, -{93,-26,38}, -{93,-26,39}, -{93,-26,40}, -{93,-26,41}, -{93,-26,42}, -{93,-26,43}, -{93,-26,44}, -{93,-26,45}, -{93,-26,46}, -{93,-26,47}, -{93,-26,48}, -{93,-26,49}, -{93,-26,50}, -{93,-26,51}, -{93,-26,52}, -{93,-26,53}, -{93,-26,54}, -{93,-26,55}, -{93,-26,56}, -{93,-26,57}, -{93,-26,58}, -{93,-26,59}, -{93,-26,60}, -{93,-26,61}, -{93,-26,62}, -{93,-26,63}, -{93,-26,64}, -{93,-26,65}, -{93,-26,66}, -{93,-26,67}, -{93,-26,68}, -{93,-26,69}, -{93,-26,70}, -{93,-26,71}, -{93,-26,72}, -{93,-26,73}, -{93,-26,74}, -{93,-26,75}, -{93,-26,76}, -{93,-26,77}, -{93,-26,78}, -{93,-26,79}, -{93,-26,80}, -{93,-26,81}, -{93,-26,82}, -{93,-26,83}, -{93,-26,84}, -{93,-26,85}, -{93,-26,86}, -{93,-26,87}, -{93,-26,88}, -{93,-26,89}, -{93,-26,90}, -{93,-25,-11}, -{93,-25,-10}, -{93,-25,-9}, -{93,-25,-8}, -{93,-25,-7}, -{93,-25,-6}, -{93,-25,-5}, -{93,-25,-4}, -{93,-25,-3}, -{93,-25,-2}, -{93,-25,-1}, -{93,-25,0}, -{93,-25,1}, -{93,-25,2}, -{93,-25,3}, -{93,-25,4}, -{93,-25,5}, -{93,-25,6}, -{93,-25,7}, -{93,-25,8}, -{93,-25,9}, -{93,-25,10}, -{93,-25,11}, -{93,-25,12}, -{93,-25,13}, -{93,-25,14}, -{93,-25,15}, -{93,-25,16}, -{93,-25,17}, -{93,-25,18}, -{93,-25,19}, -{93,-25,20}, -{93,-25,21}, -{93,-25,22}, -{93,-25,23}, -{93,-25,24}, -{93,-25,25}, -{93,-25,26}, -{93,-25,27}, -{93,-25,28}, -{93,-25,29}, -{93,-25,30}, -{93,-25,31}, -{93,-25,32}, -{93,-25,33}, -{93,-25,34}, -{93,-25,35}, -{93,-25,36}, -{93,-25,37}, -{93,-25,38}, -{93,-25,39}, -{93,-25,40}, -{93,-25,41}, -{93,-25,42}, -{93,-25,43}, -{93,-25,44}, -{93,-25,45}, -{93,-25,46}, -{93,-25,47}, -{93,-25,48}, -{93,-25,49}, -{93,-25,50}, -{93,-25,51}, -{93,-25,52}, -{93,-25,53}, -{93,-25,54}, -{93,-25,55}, -{93,-25,56}, -{93,-25,57}, -{93,-25,58}, -{93,-25,59}, -{93,-25,60}, -{93,-25,61}, -{93,-25,62}, -{93,-25,63}, -{93,-25,64}, -{93,-25,65}, -{93,-25,66}, -{93,-25,67}, -{93,-25,68}, -{93,-25,69}, -{93,-25,70}, -{93,-25,71}, -{93,-25,72}, -{93,-25,73}, -{93,-25,74}, -{93,-25,75}, -{93,-25,76}, -{93,-25,77}, -{93,-25,78}, -{93,-25,79}, -{93,-25,80}, -{93,-25,81}, -{93,-25,82}, -{93,-25,83}, -{93,-25,84}, -{93,-25,85}, -{93,-25,86}, -{93,-25,87}, -{93,-25,88}, -{93,-25,89}, -{93,-25,90}, -{93,-24,-11}, -{93,-24,-10}, -{93,-24,-9}, -{93,-24,-8}, -{93,-24,-7}, -{93,-24,-6}, -{93,-24,-5}, -{93,-24,-4}, -{93,-24,-3}, -{93,-24,-2}, -{93,-24,-1}, -{93,-24,0}, -{93,-24,1}, -{93,-24,2}, -{93,-24,3}, -{93,-24,4}, -{93,-24,5}, -{93,-24,6}, -{93,-24,7}, -{93,-24,8}, -{93,-24,9}, -{93,-24,10}, -{93,-24,11}, -{93,-24,12}, -{93,-24,13}, -{93,-24,14}, -{93,-24,15}, -{93,-24,16}, -{93,-24,17}, -{93,-24,18}, -{93,-24,19}, -{93,-24,20}, -{93,-24,21}, -{93,-24,22}, -{93,-24,23}, -{93,-24,24}, -{93,-24,25}, -{93,-24,26}, -{93,-24,27}, -{93,-24,28}, -{93,-24,29}, -{93,-24,30}, -{93,-24,31}, -{93,-24,32}, -{93,-24,33}, -{93,-24,34}, -{93,-24,35}, -{93,-24,36}, -{93,-24,37}, -{93,-24,38}, -{93,-24,39}, -{93,-24,40}, -{93,-24,41}, -{93,-24,42}, -{93,-24,43}, -{93,-24,44}, -{93,-24,45}, -{93,-24,46}, -{93,-24,47}, -{93,-24,48}, -{93,-24,49}, -{93,-24,50}, -{93,-24,51}, -{93,-24,52}, -{93,-24,53}, -{93,-24,54}, -{93,-24,55}, -{93,-24,56}, -{93,-24,57}, -{93,-24,58}, -{93,-24,59}, -{93,-24,60}, -{93,-24,61}, -{93,-24,62}, -{93,-24,63}, -{93,-24,64}, -{93,-24,65}, -{93,-24,66}, -{93,-24,67}, -{93,-24,68}, -{93,-24,69}, -{93,-24,70}, -{93,-24,71}, -{93,-24,72}, -{93,-24,73}, -{93,-24,74}, -{93,-24,75}, -{93,-24,76}, -{93,-24,77}, -{93,-24,78}, -{93,-24,79}, -{93,-24,80}, -{93,-24,81}, -{93,-24,82}, -{93,-24,83}, -{93,-24,84}, -{93,-24,85}, -{93,-24,86}, -{93,-24,87}, -{93,-24,88}, -{93,-24,89}, -{93,-24,90}, -{93,-24,91}, -{93,-23,-11}, -{93,-23,-10}, -{93,-23,-9}, -{93,-23,-8}, -{93,-23,-7}, -{93,-23,-6}, -{93,-23,-5}, -{93,-23,-4}, -{93,-23,-3}, -{93,-23,-2}, -{93,-23,-1}, -{93,-23,0}, -{93,-23,1}, -{93,-23,2}, -{93,-23,3}, -{93,-23,4}, -{93,-23,5}, -{93,-23,6}, -{93,-23,7}, -{93,-23,8}, -{93,-23,9}, -{93,-23,10}, -{93,-23,11}, -{93,-23,12}, -{93,-23,13}, -{93,-23,14}, -{93,-23,15}, -{93,-23,16}, -{93,-23,17}, -{93,-23,18}, -{93,-23,19}, -{93,-23,20}, -{93,-23,21}, -{93,-23,22}, -{93,-23,23}, -{93,-23,24}, -{93,-23,25}, -{93,-23,26}, -{93,-23,27}, -{93,-23,28}, -{93,-23,29}, -{93,-23,30}, -{93,-23,31}, -{93,-23,32}, -{93,-23,33}, -{93,-23,34}, -{93,-23,35}, -{93,-23,36}, -{93,-23,37}, -{93,-23,38}, -{93,-23,39}, -{93,-23,40}, -{93,-23,41}, -{93,-23,42}, -{93,-23,43}, -{93,-23,44}, -{93,-23,45}, -{93,-23,46}, -{93,-23,47}, -{93,-23,48}, -{93,-23,49}, -{93,-23,50}, -{93,-23,51}, -{93,-23,52}, -{93,-23,53}, -{93,-23,54}, -{93,-23,55}, -{93,-23,56}, -{93,-23,57}, -{93,-23,58}, -{93,-23,59}, -{93,-23,60}, -{93,-23,61}, -{93,-23,62}, -{93,-23,63}, -{93,-23,64}, -{93,-23,65}, -{93,-23,66}, -{93,-23,67}, -{93,-23,68}, -{93,-23,69}, -{93,-23,70}, -{93,-23,71}, -{93,-23,72}, -{93,-23,73}, -{93,-23,74}, -{93,-23,75}, -{93,-23,76}, -{93,-23,77}, -{93,-23,78}, -{93,-23,79}, -{93,-23,80}, -{93,-23,81}, -{93,-23,82}, -{93,-23,83}, -{93,-23,84}, -{93,-23,85}, -{93,-23,86}, -{93,-23,87}, -{93,-23,88}, -{93,-23,89}, -{93,-23,90}, -{93,-23,91}, -{93,-22,-11}, -{93,-22,-10}, -{93,-22,-9}, -{93,-22,-8}, -{93,-22,-7}, -{93,-22,-6}, -{93,-22,-5}, -{93,-22,-4}, -{93,-22,-3}, -{93,-22,-2}, -{93,-22,-1}, -{93,-22,0}, -{93,-22,1}, -{93,-22,2}, -{93,-22,3}, -{93,-22,4}, -{93,-22,5}, -{93,-22,6}, -{93,-22,7}, -{93,-22,8}, -{93,-22,9}, -{93,-22,10}, -{93,-22,11}, -{93,-22,12}, -{93,-22,13}, -{93,-22,14}, -{93,-22,15}, -{93,-22,16}, -{93,-22,17}, -{93,-22,18}, -{93,-22,19}, -{93,-22,20}, -{93,-22,21}, -{93,-22,22}, -{93,-22,23}, -{93,-22,24}, -{93,-22,25}, -{93,-22,26}, -{93,-22,27}, -{93,-22,28}, -{93,-22,29}, -{93,-22,30}, -{93,-22,31}, -{93,-22,32}, -{93,-22,33}, -{93,-22,34}, -{93,-22,35}, -{93,-22,36}, -{93,-22,37}, -{93,-22,38}, -{93,-22,39}, -{93,-22,40}, -{93,-22,41}, -{93,-22,42}, -{93,-22,43}, -{93,-22,44}, -{93,-22,45}, -{93,-22,46}, -{93,-22,47}, -{93,-22,48}, -{93,-22,49}, -{93,-22,50}, -{93,-22,51}, -{93,-22,52}, -{93,-22,53}, -{93,-22,54}, -{93,-22,55}, -{93,-22,56}, -{93,-22,57}, -{93,-22,58}, -{93,-22,59}, -{93,-22,60}, -{93,-22,61}, -{93,-22,62}, -{93,-22,63}, -{93,-22,64}, -{93,-22,65}, -{93,-22,66}, -{93,-22,67}, -{93,-22,68}, -{93,-22,69}, -{93,-22,70}, -{93,-22,71}, -{93,-22,72}, -{93,-22,73}, -{93,-22,74}, -{93,-22,75}, -{93,-22,76}, -{93,-22,77}, -{93,-22,78}, -{93,-22,79}, -{93,-22,80}, -{93,-22,81}, -{93,-22,82}, -{93,-22,83}, -{93,-22,84}, -{93,-22,85}, -{93,-22,86}, -{93,-22,87}, -{93,-22,88}, -{93,-22,89}, -{93,-22,90}, -{93,-22,91}, -{93,-21,-11}, -{93,-21,-10}, -{93,-21,-9}, -{93,-21,-8}, -{93,-21,-7}, -{93,-21,-6}, -{93,-21,-5}, -{93,-21,-4}, -{93,-21,-3}, -{93,-21,-2}, -{93,-21,-1}, -{93,-21,0}, -{93,-21,1}, -{93,-21,2}, -{93,-21,3}, -{93,-21,4}, -{93,-21,5}, -{93,-21,6}, -{93,-21,7}, -{93,-21,8}, -{93,-21,9}, -{93,-21,10}, -{93,-21,11}, -{93,-21,12}, -{93,-21,13}, -{93,-21,14}, -{93,-21,15}, -{93,-21,16}, -{93,-21,17}, -{93,-21,18}, -{93,-21,19}, -{93,-21,20}, -{93,-21,21}, -{93,-21,22}, -{93,-21,23}, -{93,-21,24}, -{93,-21,25}, -{93,-21,26}, -{93,-21,27}, -{93,-21,28}, -{93,-21,29}, -{93,-21,30}, -{93,-21,31}, -{93,-21,32}, -{93,-21,33}, -{93,-21,34}, -{93,-21,35}, -{93,-21,36}, -{93,-21,37}, -{93,-21,38}, -{93,-21,39}, -{93,-21,40}, -{93,-21,41}, -{93,-21,42}, -{93,-21,43}, -{93,-21,44}, -{93,-21,45}, -{93,-21,46}, -{93,-21,47}, -{93,-21,48}, -{93,-21,49}, -{93,-21,50}, -{93,-21,51}, -{93,-21,52}, -{93,-21,53}, -{93,-21,54}, -{93,-21,55}, -{93,-21,56}, -{93,-21,57}, -{93,-21,58}, -{93,-21,59}, -{93,-21,60}, -{93,-21,61}, -{93,-21,62}, -{93,-21,63}, -{93,-21,64}, -{93,-21,65}, -{93,-21,66}, -{93,-21,67}, -{93,-21,68}, -{93,-21,69}, -{93,-21,70}, -{93,-21,71}, -{93,-21,72}, -{93,-21,73}, -{93,-21,74}, -{93,-21,75}, -{93,-21,76}, -{93,-21,77}, -{93,-21,78}, -{93,-21,79}, -{93,-21,80}, -{93,-21,81}, -{93,-21,82}, -{93,-21,83}, -{93,-21,84}, -{93,-21,85}, -{93,-21,86}, -{93,-21,87}, -{93,-21,88}, -{93,-21,89}, -{93,-21,90}, -{93,-21,91}, -{93,-20,-11}, -{93,-20,-10}, -{93,-20,-9}, -{93,-20,-8}, -{93,-20,-7}, -{93,-20,-6}, -{93,-20,-5}, -{93,-20,-4}, -{93,-20,-3}, -{93,-20,-2}, -{93,-20,-1}, -{93,-20,0}, -{93,-20,1}, -{93,-20,2}, -{93,-20,3}, -{93,-20,4}, -{93,-20,5}, -{93,-20,6}, -{93,-20,7}, -{93,-20,8}, -{93,-20,9}, -{93,-20,10}, -{93,-20,11}, -{93,-20,12}, -{93,-20,13}, -{93,-20,14}, -{93,-20,15}, -{93,-20,16}, -{93,-20,17}, -{93,-20,18}, -{93,-20,19}, -{93,-20,20}, -{93,-20,21}, -{93,-20,22}, -{93,-20,23}, -{93,-20,24}, -{93,-20,25}, -{93,-20,26}, -{93,-20,27}, -{93,-20,28}, -{93,-20,29}, -{93,-20,30}, -{93,-20,31}, -{93,-20,32}, -{93,-20,33}, -{93,-20,34}, -{93,-20,35}, -{93,-20,36}, -{93,-20,37}, -{93,-20,38}, -{93,-20,39}, -{93,-20,40}, -{93,-20,41}, -{93,-20,42}, -{93,-20,43}, -{93,-20,44}, -{93,-20,45}, -{93,-20,46}, -{93,-20,47}, -{93,-20,48}, -{93,-20,49}, -{93,-20,50}, -{93,-20,51}, -{93,-20,52}, -{93,-20,53}, -{93,-20,54}, -{93,-20,55}, -{93,-20,56}, -{93,-20,57}, -{93,-20,58}, -{93,-20,59}, -{93,-20,60}, -{93,-20,61}, -{93,-20,62}, -{93,-20,63}, -{93,-20,64}, -{93,-20,65}, -{93,-20,66}, -{93,-20,67}, -{93,-20,68}, -{93,-20,69}, -{93,-20,70}, -{93,-20,71}, -{93,-20,72}, -{93,-20,73}, -{93,-20,74}, -{93,-20,75}, -{93,-20,76}, -{93,-20,77}, -{93,-20,78}, -{93,-20,79}, -{93,-20,80}, -{93,-20,81}, -{93,-20,82}, -{93,-20,83}, -{93,-20,84}, -{93,-20,85}, -{93,-20,86}, -{93,-20,87}, -{93,-20,88}, -{93,-20,89}, -{93,-20,90}, -{93,-20,91}, -{93,-19,-11}, -{93,-19,-10}, -{93,-19,-9}, -{93,-19,-8}, -{93,-19,-7}, -{93,-19,-6}, -{93,-19,-5}, -{93,-19,-4}, -{93,-19,-3}, -{93,-19,-2}, -{93,-19,-1}, -{93,-19,0}, -{93,-19,1}, -{93,-19,2}, -{93,-19,3}, -{93,-19,4}, -{93,-19,5}, -{93,-19,6}, -{93,-19,7}, -{93,-19,8}, -{93,-19,9}, -{93,-19,10}, -{93,-19,11}, -{93,-19,12}, -{93,-19,13}, -{93,-19,14}, -{93,-19,15}, -{93,-19,16}, -{93,-19,17}, -{93,-19,18}, -{93,-19,19}, -{93,-19,20}, -{93,-19,21}, -{93,-19,22}, -{93,-19,23}, -{93,-19,24}, -{93,-19,25}, -{93,-19,26}, -{93,-19,27}, -{93,-19,28}, -{93,-19,29}, -{93,-19,30}, -{93,-19,31}, -{93,-19,32}, -{93,-19,33}, -{93,-19,34}, -{93,-19,35}, -{93,-19,36}, -{93,-19,37}, -{93,-19,38}, -{93,-19,39}, -{93,-19,40}, -{93,-19,41}, -{93,-19,42}, -{93,-19,43}, -{93,-19,44}, -{93,-19,45}, -{93,-19,46}, -{93,-19,47}, -{93,-19,48}, -{93,-19,49}, -{93,-19,50}, -{93,-19,51}, -{93,-19,52}, -{93,-19,53}, -{93,-19,54}, -{93,-19,55}, -{93,-19,56}, -{93,-19,57}, -{93,-19,58}, -{93,-19,59}, -{93,-19,60}, -{93,-19,61}, -{93,-19,62}, -{93,-19,63}, -{93,-19,64}, -{93,-19,65}, -{93,-19,66}, -{93,-19,67}, -{93,-19,68}, -{93,-19,69}, -{93,-19,70}, -{93,-19,71}, -{93,-19,72}, -{93,-19,73}, -{93,-19,74}, -{93,-19,75}, -{93,-19,76}, -{93,-19,77}, -{93,-19,78}, -{93,-19,79}, -{93,-19,80}, -{93,-19,81}, -{93,-19,82}, -{93,-19,83}, -{93,-19,84}, -{93,-19,85}, -{93,-19,86}, -{93,-19,87}, -{93,-19,88}, -{93,-19,89}, -{93,-19,90}, -{93,-19,91}, -{93,-18,-11}, -{93,-18,-10}, -{93,-18,-9}, -{93,-18,-8}, -{93,-18,-7}, -{93,-18,-6}, -{93,-18,-5}, -{93,-18,-4}, -{93,-18,-3}, -{93,-18,-2}, -{93,-18,-1}, -{93,-18,0}, -{93,-18,1}, -{93,-18,2}, -{93,-18,3}, -{93,-18,4}, -{93,-18,5}, -{93,-18,6}, -{93,-18,7}, -{93,-18,8}, -{93,-18,9}, -{93,-18,10}, -{93,-18,11}, -{93,-18,12}, -{93,-18,13}, -{93,-18,14}, -{93,-18,15}, -{93,-18,16}, -{93,-18,17}, -{93,-18,18}, -{93,-18,19}, -{93,-18,20}, -{93,-18,21}, -{93,-18,22}, -{93,-18,23}, -{93,-18,24}, -{93,-18,25}, -{93,-18,26}, -{93,-18,27}, -{93,-18,28}, -{93,-18,29}, -{93,-18,30}, -{93,-18,31}, -{93,-18,32}, -{93,-18,33}, -{93,-18,34}, -{93,-18,35}, -{93,-18,36}, -{93,-18,37}, -{93,-18,38}, -{93,-18,39}, -{93,-18,40}, -{93,-18,41}, -{93,-18,42}, -{93,-18,43}, -{93,-18,44}, -{93,-18,45}, -{93,-18,46}, -{93,-18,47}, -{93,-18,48}, -{93,-18,49}, -{93,-18,50}, -{93,-18,51}, -{93,-18,52}, -{93,-18,53}, -{93,-18,54}, -{93,-18,55}, -{93,-18,56}, -{93,-18,57}, -{93,-18,58}, -{93,-18,59}, -{93,-18,60}, -{93,-18,61}, -{93,-18,62}, -{93,-18,63}, -{93,-18,64}, -{93,-18,65}, -{93,-18,66}, -{93,-18,67}, -{93,-18,68}, -{93,-18,69}, -{93,-18,70}, -{93,-18,71}, -{93,-18,72}, -{93,-18,73}, -{93,-18,74}, -{93,-18,75}, -{93,-18,76}, -{93,-18,77}, -{93,-18,78}, -{93,-18,79}, -{93,-18,80}, -{93,-18,81}, -{93,-18,82}, -{93,-18,83}, -{93,-18,84}, -{93,-18,85}, -{93,-18,86}, -{93,-18,87}, -{93,-18,88}, -{93,-18,89}, -{93,-18,90}, -{93,-18,91}, -{93,-17,-10}, -{93,-17,-9}, -{93,-17,-8}, -{93,-17,-7}, -{93,-17,-6}, -{93,-17,-5}, -{93,-17,-4}, -{93,-17,-3}, -{93,-17,-2}, -{93,-17,-1}, -{93,-17,0}, -{93,-17,1}, -{93,-17,2}, -{93,-17,3}, -{93,-17,4}, -{93,-17,5}, -{93,-17,6}, -{93,-17,7}, -{93,-17,8}, -{93,-17,9}, -{93,-17,10}, -{93,-17,11}, -{93,-17,12}, -{93,-17,13}, -{93,-17,14}, -{93,-17,15}, -{93,-17,16}, -{93,-17,17}, -{93,-17,18}, -{93,-17,19}, -{93,-17,20}, -{93,-17,21}, -{93,-17,22}, -{93,-17,23}, -{93,-17,24}, -{93,-17,25}, -{93,-17,26}, -{93,-17,27}, -{93,-17,28}, -{93,-17,29}, -{93,-17,30}, -{93,-17,31}, -{93,-17,32}, -{93,-17,33}, -{93,-17,34}, -{93,-17,35}, -{93,-17,36}, -{93,-17,37}, -{93,-17,38}, -{93,-17,39}, -{93,-17,40}, -{93,-17,41}, -{93,-17,42}, -{93,-17,43}, -{93,-17,44}, -{93,-17,45}, -{93,-17,46}, -{93,-17,47}, -{93,-17,48}, -{93,-17,49}, -{93,-17,50}, -{93,-17,51}, -{93,-17,52}, -{93,-17,53}, -{93,-17,54}, -{93,-17,55}, -{93,-17,56}, -{93,-17,57}, -{93,-17,58}, -{93,-17,59}, -{93,-17,60}, -{93,-17,61}, -{93,-17,62}, -{93,-17,63}, -{93,-17,64}, -{93,-17,65}, -{93,-17,66}, -{93,-17,67}, -{93,-17,68}, -{93,-17,69}, -{93,-17,70}, -{93,-17,71}, -{93,-17,72}, -{93,-17,73}, -{93,-17,74}, -{93,-17,75}, -{93,-17,76}, -{93,-17,77}, -{93,-17,78}, -{93,-17,79}, -{93,-17,80}, -{93,-17,81}, -{93,-17,82}, -{93,-17,83}, -{93,-17,84}, -{93,-17,85}, -{93,-17,86}, -{93,-17,87}, -{93,-17,88}, -{93,-17,89}, -{93,-17,90}, -{93,-17,91}, -{93,-16,-10}, -{93,-16,-9}, -{93,-16,-8}, -{93,-16,-7}, -{93,-16,-6}, -{93,-16,-5}, -{93,-16,-4}, -{93,-16,-3}, -{93,-16,-2}, -{93,-16,-1}, -{93,-16,0}, -{93,-16,1}, -{93,-16,2}, -{93,-16,3}, -{93,-16,4}, -{93,-16,5}, -{93,-16,6}, -{93,-16,7}, -{93,-16,8}, -{93,-16,9}, -{93,-16,10}, -{93,-16,11}, -{93,-16,12}, -{93,-16,13}, -{93,-16,14}, -{93,-16,15}, -{93,-16,16}, -{93,-16,17}, -{93,-16,18}, -{93,-16,19}, -{93,-16,20}, -{93,-16,21}, -{93,-16,22}, -{93,-16,23}, -{93,-16,24}, -{93,-16,25}, -{93,-16,26}, -{93,-16,27}, -{93,-16,28}, -{93,-16,29}, -{93,-16,30}, -{93,-16,31}, -{93,-16,32}, -{93,-16,33}, -{93,-16,34}, -{93,-16,35}, -{93,-16,36}, -{93,-16,37}, -{93,-16,38}, -{93,-16,39}, -{93,-16,40}, -{93,-16,41}, -{93,-16,42}, -{93,-16,43}, -{93,-16,44}, -{93,-16,45}, -{93,-16,46}, -{93,-16,47}, -{93,-16,48}, -{93,-16,49}, -{93,-16,50}, -{93,-16,51}, -{93,-16,52}, -{93,-16,53}, -{93,-16,54}, -{93,-16,55}, -{93,-16,56}, -{93,-16,57}, -{93,-16,58}, -{93,-16,59}, -{93,-16,60}, -{93,-16,61}, -{93,-16,62}, -{93,-16,63}, -{93,-16,64}, -{93,-16,65}, -{93,-16,66}, -{93,-16,67}, -{93,-16,68}, -{93,-16,69}, -{93,-16,70}, -{93,-16,71}, -{93,-16,72}, -{93,-16,73}, -{93,-16,74}, -{93,-16,75}, -{93,-16,76}, -{93,-16,77}, -{93,-16,78}, -{93,-16,79}, -{93,-16,80}, -{93,-16,81}, -{93,-16,82}, -{93,-16,83}, -{93,-16,84}, -{93,-16,85}, -{93,-16,86}, -{93,-16,87}, -{93,-16,88}, -{93,-16,89}, -{93,-16,90}, -{93,-16,91}, -{93,-15,-10}, -{93,-15,-9}, -{93,-15,-8}, -{93,-15,-7}, -{93,-15,-6}, -{93,-15,-5}, -{93,-15,-4}, -{93,-15,-3}, -{93,-15,-2}, -{93,-15,-1}, -{93,-15,0}, -{93,-15,1}, -{93,-15,2}, -{93,-15,3}, -{93,-15,4}, -{93,-15,5}, -{93,-15,6}, -{93,-15,7}, -{93,-15,8}, -{93,-15,9}, -{93,-15,10}, -{93,-15,11}, -{93,-15,12}, -{93,-15,13}, -{93,-15,14}, -{93,-15,15}, -{93,-15,16}, -{93,-15,17}, -{93,-15,18}, -{93,-15,19}, -{93,-15,20}, -{93,-15,21}, -{93,-15,22}, -{93,-15,23}, -{93,-15,24}, -{93,-15,25}, -{93,-15,26}, -{93,-15,27}, -{93,-15,28}, -{93,-15,29}, -{93,-15,30}, -{93,-15,31}, -{93,-15,32}, -{93,-15,33}, -{93,-15,34}, -{93,-15,35}, -{93,-15,36}, -{93,-15,37}, -{93,-15,38}, -{93,-15,39}, -{93,-15,40}, -{93,-15,41}, -{93,-15,42}, -{93,-15,43}, -{93,-15,44}, -{93,-15,45}, -{93,-15,46}, -{93,-15,47}, -{93,-15,48}, -{93,-15,49}, -{93,-15,50}, -{93,-15,51}, -{93,-15,52}, -{93,-15,53}, -{93,-15,54}, -{93,-15,55}, -{93,-15,56}, -{93,-15,57}, -{93,-15,58}, -{93,-15,59}, -{93,-15,60}, -{93,-15,61}, -{93,-15,62}, -{93,-15,63}, -{93,-15,64}, -{93,-15,65}, -{93,-15,66}, -{93,-15,67}, -{93,-15,68}, -{93,-15,69}, -{93,-15,70}, -{93,-15,71}, -{93,-15,72}, -{93,-15,73}, -{93,-15,74}, -{93,-15,75}, -{93,-15,76}, -{93,-15,77}, -{93,-15,78}, -{93,-15,79}, -{93,-15,80}, -{93,-15,81}, -{93,-15,82}, -{93,-15,83}, -{93,-15,84}, -{93,-15,85}, -{93,-15,86}, -{93,-15,87}, -{93,-15,88}, -{93,-15,89}, -{93,-15,90}, -{93,-15,91}, -{93,-14,-10}, -{93,-14,-9}, -{93,-14,-8}, -{93,-14,-7}, -{93,-14,-6}, -{93,-14,-5}, -{93,-14,-4}, -{93,-14,-3}, -{93,-14,-2}, -{93,-14,-1}, -{93,-14,0}, -{93,-14,1}, -{93,-14,2}, -{93,-14,3}, -{93,-14,4}, -{93,-14,5}, -{93,-14,6}, -{93,-14,7}, -{93,-14,8}, -{93,-14,9}, -{93,-14,10}, -{93,-14,11}, -{93,-14,12}, -{93,-14,13}, -{93,-14,14}, -{93,-14,15}, -{93,-14,16}, -{93,-14,17}, -{93,-14,18}, -{93,-14,19}, -{93,-14,20}, -{93,-14,21}, -{93,-14,22}, -{93,-14,23}, -{93,-14,24}, -{93,-14,25}, -{93,-14,26}, -{93,-14,27}, -{93,-14,28}, -{93,-14,29}, -{93,-14,30}, -{93,-14,31}, -{93,-14,32}, -{93,-14,33}, -{93,-14,34}, -{93,-14,35}, -{93,-14,36}, -{93,-14,37}, -{93,-14,38}, -{93,-14,39}, -{93,-14,40}, -{93,-14,41}, -{93,-14,42}, -{93,-14,43}, -{93,-14,44}, -{93,-14,45}, -{93,-14,46}, -{93,-14,47}, -{93,-14,48}, -{93,-14,49}, -{93,-14,50}, -{93,-14,51}, -{93,-14,52}, -{93,-14,53}, -{93,-14,54}, -{93,-14,55}, -{93,-14,56}, -{93,-14,57}, -{93,-14,58}, -{93,-14,59}, -{93,-14,60}, -{93,-14,61}, -{93,-14,62}, -{93,-14,63}, -{93,-14,64}, -{93,-14,65}, -{93,-14,66}, -{93,-14,67}, -{93,-14,68}, -{93,-14,69}, -{93,-14,70}, -{93,-14,71}, -{93,-14,72}, -{93,-14,73}, -{93,-14,74}, -{93,-14,75}, -{93,-14,76}, -{93,-14,77}, -{93,-14,78}, -{93,-14,79}, -{93,-14,80}, -{93,-14,81}, -{93,-14,82}, -{93,-14,83}, -{93,-14,84}, -{93,-14,85}, -{93,-14,86}, -{93,-14,87}, -{93,-14,88}, -{93,-14,89}, -{93,-14,90}, -{93,-14,91}, -{93,-13,-10}, -{93,-13,-9}, -{93,-13,-8}, -{93,-13,-7}, -{93,-13,-6}, -{93,-13,-5}, -{93,-13,-4}, -{93,-13,-3}, -{93,-13,-2}, -{93,-13,-1}, -{93,-13,0}, -{93,-13,1}, -{93,-13,2}, -{93,-13,3}, -{93,-13,4}, -{93,-13,5}, -{93,-13,6}, -{93,-13,7}, -{93,-13,8}, -{93,-13,9}, -{93,-13,10}, -{93,-13,11}, -{93,-13,12}, -{93,-13,13}, -{93,-13,14}, -{93,-13,15}, -{93,-13,16}, -{93,-13,17}, -{93,-13,18}, -{93,-13,19}, -{93,-13,20}, -{93,-13,21}, -{93,-13,22}, -{93,-13,23}, -{93,-13,24}, -{93,-13,25}, -{93,-13,26}, -{93,-13,27}, -{93,-13,28}, -{93,-13,29}, -{93,-13,30}, -{93,-13,31}, -{93,-13,32}, -{93,-13,33}, -{93,-13,34}, -{93,-13,35}, -{93,-13,36}, -{93,-13,37}, -{93,-13,38}, -{93,-13,39}, -{93,-13,40}, -{93,-13,41}, -{93,-13,42}, -{93,-13,43}, -{93,-13,44}, -{93,-13,45}, -{93,-13,46}, -{93,-13,47}, -{93,-13,48}, -{93,-13,49}, -{93,-13,50}, -{93,-13,51}, -{93,-13,52}, -{93,-13,53}, -{93,-13,54}, -{93,-13,55}, -{93,-13,56}, -{93,-13,57}, -{93,-13,58}, -{93,-13,59}, -{93,-13,60}, -{93,-13,61}, -{93,-13,62}, -{93,-13,63}, -{93,-13,64}, -{93,-13,65}, -{93,-13,66}, -{93,-13,67}, -{93,-13,68}, -{93,-13,69}, -{93,-13,70}, -{93,-13,71}, -{93,-13,72}, -{93,-13,73}, -{93,-13,74}, -{93,-13,75}, -{93,-13,76}, -{93,-13,77}, -{93,-13,78}, -{93,-13,79}, -{93,-13,80}, -{93,-13,81}, -{93,-13,82}, -{93,-13,83}, -{93,-13,84}, -{93,-13,85}, -{93,-13,86}, -{93,-12,-10}, -{93,-12,-9}, -{93,-12,-8}, -{93,-12,-7}, -{93,-12,-6}, -{93,-12,-5}, -{93,-12,-4}, -{93,-12,-3}, -{93,-12,-2}, -{93,-12,-1}, -{93,-12,0}, -{93,-12,1}, -{93,-12,2}, -{93,-12,3}, -{93,-12,4}, -{93,-12,5}, -{93,-12,6}, -{93,-12,7}, -{93,-12,8}, -{93,-12,9}, -{93,-12,10}, -{93,-12,11}, -{93,-12,12}, -{93,-12,13}, -{93,-12,14}, -{93,-12,15}, -{93,-12,16}, -{93,-12,17}, -{93,-12,18}, -{93,-12,19}, -{93,-12,20}, -{93,-12,21}, -{93,-12,22}, -{93,-12,23}, -{93,-12,24}, -{93,-12,25}, -{93,-12,26}, -{93,-12,27}, -{93,-12,28}, -{93,-12,29}, -{93,-12,30}, -{93,-12,31}, -{93,-12,32}, -{93,-12,33}, -{93,-12,34}, -{93,-12,35}, -{93,-12,36}, -{93,-12,37}, -{93,-12,38}, -{93,-12,39}, -{93,-12,40}, -{93,-12,41}, -{93,-12,42}, -{93,-12,43}, -{93,-12,44}, -{93,-12,45}, -{93,-12,46}, -{93,-12,47}, -{93,-12,48}, -{93,-12,49}, -{93,-12,50}, -{93,-12,51}, -{93,-12,52}, -{93,-12,53}, -{93,-12,54}, -{93,-12,55}, -{93,-12,56}, -{93,-12,57}, -{93,-12,58}, -{93,-12,59}, -{93,-12,60}, -{93,-12,61}, -{93,-12,62}, -{93,-12,63}, -{93,-12,64}, -{93,-12,65}, -{93,-12,66}, -{93,-12,67}, -{93,-12,68}, -{93,-12,69}, -{93,-12,70}, -{93,-12,71}, -{93,-12,72}, -{93,-12,73}, -{93,-12,74}, -{93,-12,75}, -{93,-12,76}, -{93,-12,77}, -{93,-12,78}, -{93,-12,79}, -{93,-11,-10}, -{93,-11,-9}, -{93,-11,-8}, -{93,-11,-7}, -{93,-11,-6}, -{93,-11,-5}, -{93,-11,-4}, -{93,-11,-3}, -{93,-11,-2}, -{93,-11,-1}, -{93,-11,0}, -{93,-11,1}, -{93,-11,2}, -{93,-11,3}, -{93,-11,4}, -{93,-11,5}, -{93,-11,6}, -{93,-11,7}, -{93,-11,8}, -{93,-11,9}, -{93,-11,10}, -{93,-11,11}, -{93,-11,12}, -{93,-11,13}, -{93,-11,14}, -{93,-11,15}, -{93,-11,16}, -{93,-11,17}, -{93,-11,18}, -{93,-11,19}, -{93,-11,20}, -{93,-11,21}, -{93,-11,22}, -{93,-11,23}, -{93,-11,24}, -{93,-11,25}, -{93,-11,26}, -{93,-11,27}, -{93,-11,28}, -{93,-11,29}, -{93,-11,30}, -{93,-11,31}, -{93,-11,32}, -{93,-11,33}, -{93,-11,34}, -{93,-11,35}, -{93,-11,36}, -{93,-11,37}, -{93,-11,38}, -{93,-11,39}, -{93,-11,40}, -{93,-11,41}, -{93,-11,42}, -{93,-11,43}, -{93,-11,44}, -{93,-11,45}, -{93,-11,46}, -{93,-11,47}, -{93,-11,48}, -{93,-11,49}, -{93,-11,50}, -{93,-11,51}, -{93,-11,52}, -{93,-11,53}, -{93,-11,54}, -{93,-11,55}, -{93,-11,56}, -{93,-11,57}, -{93,-11,58}, -{93,-11,59}, -{93,-11,60}, -{93,-11,61}, -{93,-11,62}, -{93,-11,63}, -{93,-11,64}, -{93,-11,65}, -{93,-11,66}, -{93,-11,67}, -{93,-11,68}, -{93,-11,69}, -{93,-11,70}, -{93,-11,71}, -{93,-11,72}, -{93,-11,73}, -{93,-10,-10}, -{93,-10,-9}, -{93,-10,-8}, -{93,-10,-7}, -{93,-10,-6}, -{93,-10,-5}, -{93,-10,-4}, -{93,-10,-3}, -{93,-10,-2}, -{93,-10,-1}, -{93,-10,0}, -{93,-10,1}, -{93,-10,2}, -{93,-10,3}, -{93,-10,4}, -{93,-10,5}, -{93,-10,6}, -{93,-10,7}, -{93,-10,8}, -{93,-10,9}, -{93,-10,10}, -{93,-10,11}, -{93,-10,12}, -{93,-10,13}, -{93,-10,14}, -{93,-10,15}, -{93,-10,16}, -{93,-10,17}, -{93,-10,18}, -{93,-10,19}, -{93,-10,20}, -{93,-10,21}, -{93,-10,22}, -{93,-10,23}, -{93,-10,24}, -{93,-10,25}, -{93,-10,26}, -{93,-10,27}, -{93,-10,28}, -{93,-10,29}, -{93,-10,30}, -{93,-10,31}, -{93,-10,32}, -{93,-10,33}, -{93,-10,34}, -{93,-10,35}, -{93,-10,36}, -{93,-10,37}, -{93,-10,38}, -{93,-10,39}, -{93,-10,40}, -{93,-10,41}, -{93,-10,42}, -{93,-10,43}, -{93,-10,44}, -{93,-10,45}, -{93,-10,46}, -{93,-10,47}, -{93,-10,48}, -{93,-10,49}, -{93,-10,50}, -{93,-10,51}, -{93,-10,52}, -{93,-10,53}, -{93,-10,54}, -{93,-10,55}, -{93,-10,56}, -{93,-10,57}, -{93,-10,58}, -{93,-10,59}, -{93,-10,60}, -{93,-10,61}, -{93,-10,62}, -{93,-10,63}, -{93,-10,64}, -{93,-10,65}, -{93,-10,66}, -{93,-10,67}, -{93,-9,-10}, -{93,-9,-9}, -{93,-9,-8}, -{93,-9,-7}, -{93,-9,-6}, -{93,-9,-5}, -{93,-9,-4}, -{93,-9,-3}, -{93,-9,-2}, -{93,-9,-1}, -{93,-9,0}, -{93,-9,1}, -{93,-9,2}, -{93,-9,3}, -{93,-9,4}, -{93,-9,5}, -{93,-9,6}, -{93,-9,7}, -{93,-9,8}, -{93,-9,9}, -{93,-9,10}, -{93,-9,11}, -{93,-9,12}, -{93,-9,13}, -{93,-9,14}, -{93,-9,15}, -{93,-9,16}, -{93,-9,17}, -{93,-9,18}, -{93,-9,19}, -{93,-9,20}, -{93,-9,21}, -{93,-9,22}, -{93,-9,23}, -{93,-9,24}, -{93,-9,25}, -{93,-9,26}, -{93,-9,27}, -{93,-9,28}, -{93,-9,29}, -{93,-9,30}, -{93,-9,31}, -{93,-9,32}, -{93,-9,33}, -{93,-9,34}, -{93,-9,35}, -{93,-9,36}, -{93,-9,37}, -{93,-9,38}, -{93,-9,39}, -{93,-9,40}, -{93,-9,41}, -{93,-9,42}, -{93,-9,43}, -{93,-9,44}, -{93,-9,45}, -{93,-9,46}, -{93,-9,47}, -{93,-9,48}, -{93,-9,49}, -{93,-9,50}, -{93,-9,51}, -{93,-9,52}, -{93,-9,53}, -{93,-9,54}, -{93,-9,55}, -{93,-9,56}, -{93,-9,57}, -{93,-9,58}, -{93,-9,59}, -{93,-9,60}, -{93,-9,61}, -{93,-9,62}, -{93,-8,-10}, -{93,-8,-9}, -{93,-8,-8}, -{93,-8,-7}, -{93,-8,-6}, -{93,-8,-5}, -{93,-8,-4}, -{93,-8,-3}, -{93,-8,-2}, -{93,-8,-1}, -{93,-8,0}, -{93,-8,1}, -{93,-8,2}, -{93,-8,3}, -{93,-8,4}, -{93,-8,5}, -{93,-8,6}, -{93,-8,7}, -{93,-8,8}, -{93,-8,9}, -{93,-8,10}, -{93,-8,11}, -{93,-8,12}, -{93,-8,13}, -{93,-8,14}, -{93,-8,15}, -{93,-8,16}, -{93,-8,17}, -{93,-8,18}, -{93,-8,19}, -{93,-8,20}, -{93,-8,21}, -{93,-8,22}, -{93,-8,23}, -{93,-8,24}, -{93,-8,25}, -{93,-8,26}, -{93,-8,27}, -{93,-8,28}, -{93,-8,29}, -{93,-8,30}, -{93,-8,31}, -{93,-8,32}, -{93,-8,33}, -{93,-8,34}, -{93,-8,35}, -{93,-8,36}, -{93,-8,37}, -{93,-8,38}, -{93,-8,39}, -{93,-8,40}, -{93,-8,41}, -{93,-8,42}, -{93,-8,43}, -{93,-8,44}, -{93,-8,45}, -{93,-8,46}, -{93,-8,47}, -{93,-8,48}, -{93,-8,49}, -{93,-8,50}, -{93,-8,51}, -{93,-8,52}, -{93,-8,53}, -{93,-8,54}, -{93,-8,55}, -{93,-8,56}, -{93,-8,57}, -{93,-8,58}, -{93,-7,-10}, -{93,-7,-9}, -{93,-7,-8}, -{93,-7,-7}, -{93,-7,-6}, -{93,-7,-5}, -{93,-7,-4}, -{93,-7,-3}, -{93,-7,-2}, -{93,-7,-1}, -{93,-7,0}, -{93,-7,1}, -{93,-7,2}, -{93,-7,3}, -{93,-7,4}, -{93,-7,5}, -{93,-7,6}, -{93,-7,7}, -{93,-7,8}, -{93,-7,9}, -{93,-7,10}, -{93,-7,11}, -{93,-7,12}, -{93,-7,13}, -{93,-7,14}, -{93,-7,15}, -{93,-7,16}, -{93,-7,17}, -{93,-7,18}, -{93,-7,19}, -{93,-7,20}, -{93,-7,21}, -{93,-7,22}, -{93,-7,23}, -{93,-7,24}, -{93,-7,25}, -{93,-7,26}, -{93,-7,27}, -{93,-7,28}, -{93,-7,29}, -{93,-7,30}, -{93,-7,31}, -{93,-7,32}, -{93,-7,33}, -{93,-7,34}, -{93,-7,35}, -{93,-7,36}, -{93,-7,37}, -{93,-7,38}, -{93,-7,39}, -{93,-7,40}, -{93,-7,41}, -{93,-7,42}, -{93,-7,43}, -{93,-7,44}, -{93,-7,45}, -{93,-7,46}, -{93,-7,47}, -{93,-7,48}, -{93,-7,49}, -{93,-7,50}, -{93,-7,51}, -{93,-7,52}, -{93,-7,53}, -{93,-6,-10}, -{93,-6,-9}, -{93,-6,-8}, -{93,-6,-7}, -{93,-6,-6}, -{93,-6,-5}, -{93,-6,-4}, -{93,-6,-3}, -{93,-6,-2}, -{93,-6,-1}, -{93,-6,0}, -{93,-6,1}, -{93,-6,2}, -{93,-6,3}, -{93,-6,4}, -{93,-6,5}, -{93,-6,6}, -{93,-6,7}, -{93,-6,8}, -{93,-6,9}, -{93,-6,10}, -{93,-6,11}, -{93,-6,12}, -{93,-6,13}, -{93,-6,14}, -{93,-6,15}, -{93,-6,16}, -{93,-6,17}, -{93,-6,18}, -{93,-6,19}, -{93,-6,20}, -{93,-6,21}, -{93,-6,22}, -{93,-6,23}, -{93,-6,24}, -{93,-6,25}, -{93,-6,26}, -{93,-6,27}, -{93,-6,28}, -{93,-6,29}, -{93,-6,30}, -{93,-6,31}, -{93,-6,32}, -{93,-6,33}, -{93,-6,34}, -{93,-6,35}, -{93,-6,36}, -{93,-6,37}, -{93,-6,38}, -{93,-6,39}, -{93,-6,40}, -{93,-6,41}, -{93,-6,42}, -{93,-6,43}, -{93,-6,44}, -{93,-6,45}, -{93,-6,46}, -{93,-6,47}, -{93,-6,48}, -{93,-6,49}, -{93,-5,-10}, -{93,-5,-9}, -{93,-5,-8}, -{93,-5,-7}, -{93,-5,-6}, -{93,-5,-5}, -{93,-5,-4}, -{93,-5,-3}, -{93,-5,-2}, -{93,-5,-1}, -{93,-5,0}, -{93,-5,1}, -{93,-5,2}, -{93,-5,3}, -{93,-5,4}, -{93,-5,5}, -{93,-5,6}, -{93,-5,7}, -{93,-5,8}, -{93,-5,9}, -{93,-5,10}, -{93,-5,11}, -{93,-5,12}, -{93,-5,13}, -{93,-5,14}, -{93,-5,15}, -{93,-5,16}, -{93,-5,17}, -{93,-5,18}, -{93,-5,19}, -{93,-5,20}, -{93,-5,21}, -{93,-5,22}, -{93,-5,23}, -{93,-5,24}, -{93,-5,25}, -{93,-5,26}, -{93,-5,27}, -{93,-5,28}, -{93,-5,29}, -{93,-5,30}, -{93,-5,31}, -{93,-5,32}, -{93,-5,33}, -{93,-5,34}, -{93,-5,35}, -{93,-5,36}, -{93,-5,37}, -{93,-5,38}, -{93,-5,39}, -{93,-5,40}, -{93,-5,41}, -{93,-5,42}, -{93,-5,43}, -{93,-5,44}, -{93,-5,45}, -{93,-4,-10}, -{93,-4,-9}, -{93,-4,-8}, -{93,-4,-7}, -{93,-4,-6}, -{93,-4,-5}, -{93,-4,-4}, -{93,-4,-3}, -{93,-4,-2}, -{93,-4,-1}, -{93,-4,0}, -{93,-4,1}, -{93,-4,2}, -{93,-4,3}, -{93,-4,4}, -{93,-4,5}, -{93,-4,6}, -{93,-4,7}, -{93,-4,8}, -{93,-4,9}, -{93,-4,10}, -{93,-4,11}, -{93,-4,12}, -{93,-4,13}, -{93,-4,14}, -{93,-4,15}, -{93,-4,16}, -{93,-4,17}, -{93,-4,18}, -{93,-4,19}, -{93,-4,20}, -{93,-4,21}, -{93,-4,22}, -{93,-4,23}, -{93,-4,24}, -{93,-4,25}, -{93,-4,26}, -{93,-4,27}, -{93,-4,28}, -{93,-4,29}, -{93,-4,30}, -{93,-4,31}, -{93,-4,32}, -{93,-4,33}, -{93,-4,34}, -{93,-4,35}, -{93,-4,36}, -{93,-4,37}, -{93,-4,38}, -{93,-4,39}, -{93,-4,40}, -{93,-4,41}, -{93,-3,-10}, -{93,-3,-9}, -{93,-3,-8}, -{93,-3,-7}, -{93,-3,-6}, -{93,-3,-5}, -{93,-3,-4}, -{93,-3,-3}, -{93,-3,-2}, -{93,-3,-1}, -{93,-3,0}, -{93,-3,1}, -{93,-3,2}, -{93,-3,3}, -{93,-3,4}, -{93,-3,5}, -{93,-3,6}, -{93,-3,7}, -{93,-3,8}, -{93,-3,9}, -{93,-3,10}, -{93,-3,11}, -{93,-3,12}, -{93,-3,13}, -{93,-3,14}, -{93,-3,15}, -{93,-3,16}, -{93,-3,17}, -{93,-3,18}, -{93,-3,19}, -{93,-3,20}, -{93,-3,21}, -{93,-3,22}, -{93,-3,23}, -{93,-3,24}, -{93,-3,25}, -{93,-3,26}, -{93,-3,27}, -{93,-3,28}, -{93,-3,29}, -{93,-3,30}, -{93,-3,31}, -{93,-3,32}, -{93,-3,33}, -{93,-3,34}, -{93,-3,35}, -{93,-3,36}, -{93,-3,37}, -{93,-3,38}, -{93,-2,-10}, -{93,-2,-9}, -{93,-2,-8}, -{93,-2,-7}, -{93,-2,-6}, -{93,-2,-5}, -{93,-2,-4}, -{93,-2,-3}, -{93,-2,-2}, -{93,-2,-1}, -{93,-2,0}, -{93,-2,1}, -{93,-2,2}, -{93,-2,3}, -{93,-2,4}, -{93,-2,5}, -{93,-2,6}, -{93,-2,7}, -{93,-2,8}, -{93,-2,9}, -{93,-2,10}, -{93,-2,11}, -{93,-2,12}, -{93,-2,13}, -{93,-2,14}, -{93,-2,15}, -{93,-2,16}, -{93,-2,17}, -{93,-2,18}, -{93,-2,19}, -{93,-2,20}, -{93,-2,21}, -{93,-2,22}, -{93,-2,23}, -{93,-2,24}, -{93,-2,25}, -{93,-2,26}, -{93,-2,27}, -{93,-2,28}, -{93,-2,29}, -{93,-2,30}, -{93,-2,31}, -{93,-2,32}, -{93,-2,33}, -{93,-2,34}, -{93,-1,-10}, -{93,-1,-9}, -{93,-1,-8}, -{93,-1,-7}, -{93,-1,-6}, -{93,-1,-5}, -{93,-1,-4}, -{93,-1,-3}, -{93,-1,-2}, -{93,-1,-1}, -{93,-1,0}, -{93,-1,1}, -{93,-1,2}, -{93,-1,3}, -{93,-1,4}, -{93,-1,5}, -{93,-1,6}, -{93,-1,7}, -{93,-1,8}, -{93,-1,9}, -{93,-1,10}, -{93,-1,11}, -{93,-1,12}, -{93,-1,13}, -{93,-1,14}, -{93,-1,15}, -{93,-1,16}, -{93,-1,17}, -{93,-1,18}, -{93,-1,19}, -{93,-1,20}, -{93,-1,21}, -{93,-1,22}, -{93,-1,23}, -{93,-1,24}, -{93,-1,25}, -{93,-1,26}, -{93,-1,27}, -{93,-1,28}, -{93,-1,29}, -{93,-1,30}, -{93,-1,31}, -{93,0,-10}, -{93,0,-9}, -{93,0,-8}, -{93,0,-7}, -{93,0,-6}, -{93,0,-5}, -{93,0,-4}, -{93,0,-3}, -{93,0,-2}, -{93,0,-1}, -{93,0,0}, -{93,0,1}, -{93,0,2}, -{93,0,3}, -{93,0,4}, -{93,0,5}, -{93,0,6}, -{93,0,7}, -{93,0,8}, -{93,0,9}, -{93,0,10}, -{93,0,11}, -{93,0,12}, -{93,0,13}, -{93,0,14}, -{93,0,15}, -{93,0,16}, -{93,0,17}, -{93,0,18}, -{93,0,19}, -{93,0,20}, -{93,0,21}, -{93,0,22}, -{93,0,23}, -{93,0,24}, -{93,0,25}, -{93,0,26}, -{93,0,27}, -{93,0,28}, -{93,1,-10}, -{93,1,-9}, -{93,1,-8}, -{93,1,-7}, -{93,1,-6}, -{93,1,-5}, -{93,1,-4}, -{93,1,-3}, -{93,1,-2}, -{93,1,-1}, -{93,1,0}, -{93,1,1}, -{93,1,2}, -{93,1,3}, -{93,1,4}, -{93,1,5}, -{93,1,6}, -{93,1,7}, -{93,1,8}, -{93,1,9}, -{93,1,10}, -{93,1,11}, -{93,1,12}, -{93,1,13}, -{93,1,14}, -{93,1,15}, -{93,1,16}, -{93,1,17}, -{93,1,18}, -{93,1,19}, -{93,1,20}, -{93,1,21}, -{93,1,22}, -{93,1,23}, -{93,1,24}, -{93,1,25}, -{93,2,-10}, -{93,2,-9}, -{93,2,-8}, -{93,2,-7}, -{93,2,-6}, -{93,2,-5}, -{93,2,-4}, -{93,2,-3}, -{93,2,-2}, -{93,2,-1}, -{93,2,0}, -{93,2,1}, -{93,2,2}, -{93,2,3}, -{93,2,4}, -{93,2,5}, -{93,2,6}, -{93,2,7}, -{93,2,8}, -{93,2,9}, -{93,2,10}, -{93,2,11}, -{93,2,12}, -{93,2,13}, -{93,2,14}, -{93,2,15}, -{93,2,16}, -{93,2,17}, -{93,2,18}, -{93,2,19}, -{93,2,20}, -{93,2,21}, -{93,2,22}, -{93,3,-10}, -{93,3,-9}, -{93,3,-8}, -{93,3,-7}, -{93,3,-6}, -{93,3,-5}, -{93,3,-4}, -{93,3,-3}, -{93,3,-2}, -{93,3,-1}, -{93,3,0}, -{93,3,1}, -{93,3,2}, -{93,3,3}, -{93,3,4}, -{93,3,5}, -{93,3,6}, -{93,3,7}, -{93,3,8}, -{93,3,9}, -{93,3,10}, -{93,3,11}, -{93,3,12}, -{93,3,13}, -{93,3,14}, -{93,3,15}, -{93,3,16}, -{93,3,17}, -{93,3,18}, -{93,3,19}, -{93,4,-10}, -{93,4,-9}, -{93,4,-8}, -{93,4,-7}, -{93,4,-6}, -{93,4,-5}, -{93,4,-4}, -{93,4,-3}, -{93,4,-2}, -{93,4,-1}, -{93,4,0}, -{93,4,1}, -{93,4,2}, -{93,4,3}, -{93,4,4}, -{93,4,5}, -{93,4,6}, -{93,4,7}, -{93,4,8}, -{93,4,9}, -{93,4,10}, -{93,4,11}, -{93,4,12}, -{93,4,13}, -{93,4,14}, -{93,4,15}, -{93,4,16}, -{93,5,-10}, -{93,5,-9}, -{93,5,-8}, -{93,5,-7}, -{93,5,-6}, -{93,5,-5}, -{93,5,-4}, -{93,5,-3}, -{93,5,-2}, -{93,5,-1}, -{93,5,0}, -{93,5,1}, -{93,5,2}, -{93,5,3}, -{93,5,4}, -{93,5,5}, -{93,5,6}, -{93,5,7}, -{93,5,8}, -{93,5,9}, -{93,5,10}, -{93,5,11}, -{93,5,12}, -{93,5,13}, -{93,6,-10}, -{93,6,-9}, -{93,6,-8}, -{93,6,-7}, -{93,6,-6}, -{93,6,-5}, -{93,6,-4}, -{93,6,-3}, -{93,6,-2}, -{93,6,-1}, -{93,6,0}, -{93,6,1}, -{93,6,2}, -{93,6,3}, -{93,6,4}, -{93,6,5}, -{93,6,6}, -{93,6,7}, -{93,6,8}, -{93,6,9}, -{93,6,10}, -{93,7,-10}, -{93,7,-9}, -{93,7,-8}, -{93,7,-7}, -{93,7,-6}, -{93,7,-5}, -{93,7,-4}, -{93,7,-3}, -{93,7,-2}, -{93,7,-1}, -{93,7,0}, -{93,7,1}, -{93,7,2}, -{93,7,3}, -{93,7,4}, -{93,7,5}, -{93,7,6}, -{93,7,7}, -{93,7,8}, -{93,8,-10}, -{93,8,-9}, -{93,8,-8}, -{93,8,-7}, -{93,8,-6}, -{93,8,-5}, -{93,8,-4}, -{93,8,-3}, -{93,8,-2}, -{93,8,-1}, -{93,8,0}, -{93,8,1}, -{93,8,2}, -{93,8,3}, -{93,8,4}, -{93,8,5}, -{93,9,-10}, -{93,9,-9}, -{93,9,-8}, -{93,9,-7}, -{93,9,-6}, -{93,9,-5}, -{93,9,-4}, -{93,9,-3}, -{93,9,-2}, -{93,9,-1}, -{93,9,0}, -{93,9,1}, -{93,9,2}, -{93,9,3}, -{93,10,-10}, -{93,10,-9}, -{93,10,-8}, -{93,10,-7}, -{93,10,-6}, -{93,10,-5}, -{93,10,-4}, -{93,10,-3}, -{93,10,-2}, -{93,10,-1}, -{93,10,0}, -{93,11,-10}, -{93,11,-9}, -{93,11,-8}, -{93,11,-7}, -{93,11,-6}, -{93,11,-5}, -{93,11,-4}, -{93,11,-3}, -{93,11,-2}, -{93,12,-10}, -{93,12,-9}, -{93,12,-8}, -{93,12,-7}, -{93,12,-6}, -{93,12,-5}, -{93,12,-4}, -{93,13,-10}, -{93,13,-9}, -{93,13,-8}, -{93,13,-7}, -{93,13,-6}, -{93,14,-10}, -{93,14,-9}, -{94,-39,72}, -{94,-39,73}, -{94,-39,74}, -{94,-39,75}, -{94,-39,76}, -{94,-39,77}, -{94,-39,78}, -{94,-39,79}, -{94,-39,80}, -{94,-39,81}, -{94,-39,82}, -{94,-39,83}, -{94,-39,84}, -{94,-39,85}, -{94,-39,86}, -{94,-39,87}, -{94,-39,88}, -{94,-39,89}, -{94,-39,90}, -{94,-38,57}, -{94,-38,58}, -{94,-38,59}, -{94,-38,60}, -{94,-38,61}, -{94,-38,62}, -{94,-38,63}, -{94,-38,64}, -{94,-38,65}, -{94,-38,66}, -{94,-38,67}, -{94,-38,68}, -{94,-38,69}, -{94,-38,70}, -{94,-38,71}, -{94,-38,72}, -{94,-38,73}, -{94,-38,74}, -{94,-38,75}, -{94,-38,76}, -{94,-38,77}, -{94,-38,78}, -{94,-38,79}, -{94,-38,80}, -{94,-38,81}, -{94,-38,82}, -{94,-38,83}, -{94,-38,84}, -{94,-38,85}, -{94,-38,86}, -{94,-38,87}, -{94,-38,88}, -{94,-38,89}, -{94,-38,90}, -{94,-38,91}, -{94,-37,44}, -{94,-37,45}, -{94,-37,46}, -{94,-37,47}, -{94,-37,48}, -{94,-37,49}, -{94,-37,50}, -{94,-37,51}, -{94,-37,52}, -{94,-37,53}, -{94,-37,54}, -{94,-37,55}, -{94,-37,56}, -{94,-37,57}, -{94,-37,58}, -{94,-37,59}, -{94,-37,60}, -{94,-37,61}, -{94,-37,62}, -{94,-37,63}, -{94,-37,64}, -{94,-37,65}, -{94,-37,66}, -{94,-37,67}, -{94,-37,68}, -{94,-37,69}, -{94,-37,70}, -{94,-37,71}, -{94,-37,72}, -{94,-37,73}, -{94,-37,74}, -{94,-37,75}, -{94,-37,76}, -{94,-37,77}, -{94,-37,78}, -{94,-37,79}, -{94,-37,80}, -{94,-37,81}, -{94,-37,82}, -{94,-37,83}, -{94,-37,84}, -{94,-37,85}, -{94,-37,86}, -{94,-37,87}, -{94,-37,88}, -{94,-37,89}, -{94,-37,90}, -{94,-37,91}, -{94,-36,33}, -{94,-36,34}, -{94,-36,35}, -{94,-36,36}, -{94,-36,37}, -{94,-36,38}, -{94,-36,39}, -{94,-36,40}, -{94,-36,41}, -{94,-36,42}, -{94,-36,43}, -{94,-36,44}, -{94,-36,45}, -{94,-36,46}, -{94,-36,47}, -{94,-36,48}, -{94,-36,49}, -{94,-36,50}, -{94,-36,51}, -{94,-36,52}, -{94,-36,53}, -{94,-36,54}, -{94,-36,55}, -{94,-36,56}, -{94,-36,57}, -{94,-36,58}, -{94,-36,59}, -{94,-36,60}, -{94,-36,61}, -{94,-36,62}, -{94,-36,63}, -{94,-36,64}, -{94,-36,65}, -{94,-36,66}, -{94,-36,67}, -{94,-36,68}, -{94,-36,69}, -{94,-36,70}, -{94,-36,71}, -{94,-36,72}, -{94,-36,73}, -{94,-36,74}, -{94,-36,75}, -{94,-36,76}, -{94,-36,77}, -{94,-36,78}, -{94,-36,79}, -{94,-36,80}, -{94,-36,81}, -{94,-36,82}, -{94,-36,83}, -{94,-36,84}, -{94,-36,85}, -{94,-36,86}, -{94,-36,87}, -{94,-36,88}, -{94,-36,89}, -{94,-36,90}, -{94,-36,91}, -{94,-35,24}, -{94,-35,25}, -{94,-35,26}, -{94,-35,27}, -{94,-35,28}, -{94,-35,29}, -{94,-35,30}, -{94,-35,31}, -{94,-35,32}, -{94,-35,33}, -{94,-35,34}, -{94,-35,35}, -{94,-35,36}, -{94,-35,37}, -{94,-35,38}, -{94,-35,39}, -{94,-35,40}, -{94,-35,41}, -{94,-35,42}, -{94,-35,43}, -{94,-35,44}, -{94,-35,45}, -{94,-35,46}, -{94,-35,47}, -{94,-35,48}, -{94,-35,49}, -{94,-35,50}, -{94,-35,51}, -{94,-35,52}, -{94,-35,53}, -{94,-35,54}, -{94,-35,55}, -{94,-35,56}, -{94,-35,57}, -{94,-35,58}, -{94,-35,59}, -{94,-35,60}, -{94,-35,61}, -{94,-35,62}, -{94,-35,63}, -{94,-35,64}, -{94,-35,65}, -{94,-35,66}, -{94,-35,67}, -{94,-35,68}, -{94,-35,69}, -{94,-35,70}, -{94,-35,71}, -{94,-35,72}, -{94,-35,73}, -{94,-35,74}, -{94,-35,75}, -{94,-35,76}, -{94,-35,77}, -{94,-35,78}, -{94,-35,79}, -{94,-35,80}, -{94,-35,81}, -{94,-35,82}, -{94,-35,83}, -{94,-35,84}, -{94,-35,85}, -{94,-35,86}, -{94,-35,87}, -{94,-35,88}, -{94,-35,89}, -{94,-35,90}, -{94,-35,91}, -{94,-34,15}, -{94,-34,16}, -{94,-34,17}, -{94,-34,18}, -{94,-34,19}, -{94,-34,20}, -{94,-34,21}, -{94,-34,22}, -{94,-34,23}, -{94,-34,24}, -{94,-34,25}, -{94,-34,26}, -{94,-34,27}, -{94,-34,28}, -{94,-34,29}, -{94,-34,30}, -{94,-34,31}, -{94,-34,32}, -{94,-34,33}, -{94,-34,34}, -{94,-34,35}, -{94,-34,36}, -{94,-34,37}, -{94,-34,38}, -{94,-34,39}, -{94,-34,40}, -{94,-34,41}, -{94,-34,42}, -{94,-34,43}, -{94,-34,44}, -{94,-34,45}, -{94,-34,46}, -{94,-34,47}, -{94,-34,48}, -{94,-34,49}, -{94,-34,50}, -{94,-34,51}, -{94,-34,52}, -{94,-34,53}, -{94,-34,54}, -{94,-34,55}, -{94,-34,56}, -{94,-34,57}, -{94,-34,58}, -{94,-34,59}, -{94,-34,60}, -{94,-34,61}, -{94,-34,62}, -{94,-34,63}, -{94,-34,64}, -{94,-34,65}, -{94,-34,66}, -{94,-34,67}, -{94,-34,68}, -{94,-34,69}, -{94,-34,70}, -{94,-34,71}, -{94,-34,72}, -{94,-34,73}, -{94,-34,74}, -{94,-34,75}, -{94,-34,76}, -{94,-34,77}, -{94,-34,78}, -{94,-34,79}, -{94,-34,80}, -{94,-34,81}, -{94,-34,82}, -{94,-34,83}, -{94,-34,84}, -{94,-34,85}, -{94,-34,86}, -{94,-34,87}, -{94,-34,88}, -{94,-34,89}, -{94,-34,90}, -{94,-34,91}, -{94,-33,7}, -{94,-33,8}, -{94,-33,9}, -{94,-33,10}, -{94,-33,11}, -{94,-33,12}, -{94,-33,13}, -{94,-33,14}, -{94,-33,15}, -{94,-33,16}, -{94,-33,17}, -{94,-33,18}, -{94,-33,19}, -{94,-33,20}, -{94,-33,21}, -{94,-33,22}, -{94,-33,23}, -{94,-33,24}, -{94,-33,25}, -{94,-33,26}, -{94,-33,27}, -{94,-33,28}, -{94,-33,29}, -{94,-33,30}, -{94,-33,31}, -{94,-33,32}, -{94,-33,33}, -{94,-33,34}, -{94,-33,35}, -{94,-33,36}, -{94,-33,37}, -{94,-33,38}, -{94,-33,39}, -{94,-33,40}, -{94,-33,41}, -{94,-33,42}, -{94,-33,43}, -{94,-33,44}, -{94,-33,45}, -{94,-33,46}, -{94,-33,47}, -{94,-33,48}, -{94,-33,49}, -{94,-33,50}, -{94,-33,51}, -{94,-33,52}, -{94,-33,53}, -{94,-33,54}, -{94,-33,55}, -{94,-33,56}, -{94,-33,57}, -{94,-33,58}, -{94,-33,59}, -{94,-33,60}, -{94,-33,61}, -{94,-33,62}, -{94,-33,63}, -{94,-33,64}, -{94,-33,65}, -{94,-33,66}, -{94,-33,67}, -{94,-33,68}, -{94,-33,69}, -{94,-33,70}, -{94,-33,71}, -{94,-33,72}, -{94,-33,73}, -{94,-33,74}, -{94,-33,75}, -{94,-33,76}, -{94,-33,77}, -{94,-33,78}, -{94,-33,79}, -{94,-33,80}, -{94,-33,81}, -{94,-33,82}, -{94,-33,83}, -{94,-33,84}, -{94,-33,85}, -{94,-33,86}, -{94,-33,87}, -{94,-33,88}, -{94,-33,89}, -{94,-33,90}, -{94,-33,91}, -{94,-32,0}, -{94,-32,1}, -{94,-32,2}, -{94,-32,3}, -{94,-32,4}, -{94,-32,5}, -{94,-32,6}, -{94,-32,7}, -{94,-32,8}, -{94,-32,9}, -{94,-32,10}, -{94,-32,11}, -{94,-32,12}, -{94,-32,13}, -{94,-32,14}, -{94,-32,15}, -{94,-32,16}, -{94,-32,17}, -{94,-32,18}, -{94,-32,19}, -{94,-32,20}, -{94,-32,21}, -{94,-32,22}, -{94,-32,23}, -{94,-32,24}, -{94,-32,25}, -{94,-32,26}, -{94,-32,27}, -{94,-32,28}, -{94,-32,29}, -{94,-32,30}, -{94,-32,31}, -{94,-32,32}, -{94,-32,33}, -{94,-32,34}, -{94,-32,35}, -{94,-32,36}, -{94,-32,37}, -{94,-32,38}, -{94,-32,39}, -{94,-32,40}, -{94,-32,41}, -{94,-32,42}, -{94,-32,43}, -{94,-32,44}, -{94,-32,45}, -{94,-32,46}, -{94,-32,47}, -{94,-32,48}, -{94,-32,49}, -{94,-32,50}, -{94,-32,51}, -{94,-32,52}, -{94,-32,53}, -{94,-32,54}, -{94,-32,55}, -{94,-32,56}, -{94,-32,57}, -{94,-32,58}, -{94,-32,59}, -{94,-32,60}, -{94,-32,61}, -{94,-32,62}, -{94,-32,63}, -{94,-32,64}, -{94,-32,65}, -{94,-32,66}, -{94,-32,67}, -{94,-32,68}, -{94,-32,69}, -{94,-32,70}, -{94,-32,71}, -{94,-32,72}, -{94,-32,73}, -{94,-32,74}, -{94,-32,75}, -{94,-32,76}, -{94,-32,77}, -{94,-32,78}, -{94,-32,79}, -{94,-32,80}, -{94,-32,81}, -{94,-32,82}, -{94,-32,83}, -{94,-32,84}, -{94,-32,85}, -{94,-32,86}, -{94,-32,87}, -{94,-32,88}, -{94,-32,89}, -{94,-32,90}, -{94,-32,91}, -{94,-31,-7}, -{94,-31,-6}, -{94,-31,-5}, -{94,-31,-4}, -{94,-31,-3}, -{94,-31,-2}, -{94,-31,-1}, -{94,-31,0}, -{94,-31,1}, -{94,-31,2}, -{94,-31,3}, -{94,-31,4}, -{94,-31,5}, -{94,-31,6}, -{94,-31,7}, -{94,-31,8}, -{94,-31,9}, -{94,-31,10}, -{94,-31,11}, -{94,-31,12}, -{94,-31,13}, -{94,-31,14}, -{94,-31,15}, -{94,-31,16}, -{94,-31,17}, -{94,-31,18}, -{94,-31,19}, -{94,-31,20}, -{94,-31,21}, -{94,-31,22}, -{94,-31,23}, -{94,-31,24}, -{94,-31,25}, -{94,-31,26}, -{94,-31,27}, -{94,-31,28}, -{94,-31,29}, -{94,-31,30}, -{94,-31,31}, -{94,-31,32}, -{94,-31,33}, -{94,-31,34}, -{94,-31,35}, -{94,-31,36}, -{94,-31,37}, -{94,-31,38}, -{94,-31,39}, -{94,-31,40}, -{94,-31,41}, -{94,-31,42}, -{94,-31,43}, -{94,-31,44}, -{94,-31,45}, -{94,-31,46}, -{94,-31,47}, -{94,-31,48}, -{94,-31,49}, -{94,-31,50}, -{94,-31,51}, -{94,-31,52}, -{94,-31,53}, -{94,-31,54}, -{94,-31,55}, -{94,-31,56}, -{94,-31,57}, -{94,-31,58}, -{94,-31,59}, -{94,-31,60}, -{94,-31,61}, -{94,-31,62}, -{94,-31,63}, -{94,-31,64}, -{94,-31,65}, -{94,-31,66}, -{94,-31,67}, -{94,-31,68}, -{94,-31,69}, -{94,-31,70}, -{94,-31,71}, -{94,-31,72}, -{94,-31,73}, -{94,-31,74}, -{94,-31,75}, -{94,-31,76}, -{94,-31,77}, -{94,-31,78}, -{94,-31,79}, -{94,-31,80}, -{94,-31,81}, -{94,-31,82}, -{94,-31,83}, -{94,-31,84}, -{94,-31,85}, -{94,-31,86}, -{94,-31,87}, -{94,-31,88}, -{94,-31,89}, -{94,-31,90}, -{94,-31,91}, -{94,-30,-9}, -{94,-30,-8}, -{94,-30,-7}, -{94,-30,-6}, -{94,-30,-5}, -{94,-30,-4}, -{94,-30,-3}, -{94,-30,-2}, -{94,-30,-1}, -{94,-30,0}, -{94,-30,1}, -{94,-30,2}, -{94,-30,3}, -{94,-30,4}, -{94,-30,5}, -{94,-30,6}, -{94,-30,7}, -{94,-30,8}, -{94,-30,9}, -{94,-30,10}, -{94,-30,11}, -{94,-30,12}, -{94,-30,13}, -{94,-30,14}, -{94,-30,15}, -{94,-30,16}, -{94,-30,17}, -{94,-30,18}, -{94,-30,19}, -{94,-30,20}, -{94,-30,21}, -{94,-30,22}, -{94,-30,23}, -{94,-30,24}, -{94,-30,25}, -{94,-30,26}, -{94,-30,27}, -{94,-30,28}, -{94,-30,29}, -{94,-30,30}, -{94,-30,31}, -{94,-30,32}, -{94,-30,33}, -{94,-30,34}, -{94,-30,35}, -{94,-30,36}, -{94,-30,37}, -{94,-30,38}, -{94,-30,39}, -{94,-30,40}, -{94,-30,41}, -{94,-30,42}, -{94,-30,43}, -{94,-30,44}, -{94,-30,45}, -{94,-30,46}, -{94,-30,47}, -{94,-30,48}, -{94,-30,49}, -{94,-30,50}, -{94,-30,51}, -{94,-30,52}, -{94,-30,53}, -{94,-30,54}, -{94,-30,55}, -{94,-30,56}, -{94,-30,57}, -{94,-30,58}, -{94,-30,59}, -{94,-30,60}, -{94,-30,61}, -{94,-30,62}, -{94,-30,63}, -{94,-30,64}, -{94,-30,65}, -{94,-30,66}, -{94,-30,67}, -{94,-30,68}, -{94,-30,69}, -{94,-30,70}, -{94,-30,71}, -{94,-30,72}, -{94,-30,73}, -{94,-30,74}, -{94,-30,75}, -{94,-30,76}, -{94,-30,77}, -{94,-30,78}, -{94,-30,79}, -{94,-30,80}, -{94,-30,81}, -{94,-30,82}, -{94,-30,83}, -{94,-30,84}, -{94,-30,85}, -{94,-30,86}, -{94,-30,87}, -{94,-30,88}, -{94,-30,89}, -{94,-30,90}, -{94,-30,91}, -{94,-29,-9}, -{94,-29,-8}, -{94,-29,-7}, -{94,-29,-6}, -{94,-29,-5}, -{94,-29,-4}, -{94,-29,-3}, -{94,-29,-2}, -{94,-29,-1}, -{94,-29,0}, -{94,-29,1}, -{94,-29,2}, -{94,-29,3}, -{94,-29,4}, -{94,-29,5}, -{94,-29,6}, -{94,-29,7}, -{94,-29,8}, -{94,-29,9}, -{94,-29,10}, -{94,-29,11}, -{94,-29,12}, -{94,-29,13}, -{94,-29,14}, -{94,-29,15}, -{94,-29,16}, -{94,-29,17}, -{94,-29,18}, -{94,-29,19}, -{94,-29,20}, -{94,-29,21}, -{94,-29,22}, -{94,-29,23}, -{94,-29,24}, -{94,-29,25}, -{94,-29,26}, -{94,-29,27}, -{94,-29,28}, -{94,-29,29}, -{94,-29,30}, -{94,-29,31}, -{94,-29,32}, -{94,-29,33}, -{94,-29,34}, -{94,-29,35}, -{94,-29,36}, -{94,-29,37}, -{94,-29,38}, -{94,-29,39}, -{94,-29,40}, -{94,-29,41}, -{94,-29,42}, -{94,-29,43}, -{94,-29,44}, -{94,-29,45}, -{94,-29,46}, -{94,-29,47}, -{94,-29,48}, -{94,-29,49}, -{94,-29,50}, -{94,-29,51}, -{94,-29,52}, -{94,-29,53}, -{94,-29,54}, -{94,-29,55}, -{94,-29,56}, -{94,-29,57}, -{94,-29,58}, -{94,-29,59}, -{94,-29,60}, -{94,-29,61}, -{94,-29,62}, -{94,-29,63}, -{94,-29,64}, -{94,-29,65}, -{94,-29,66}, -{94,-29,67}, -{94,-29,68}, -{94,-29,69}, -{94,-29,70}, -{94,-29,71}, -{94,-29,72}, -{94,-29,73}, -{94,-29,74}, -{94,-29,75}, -{94,-29,76}, -{94,-29,77}, -{94,-29,78}, -{94,-29,79}, -{94,-29,80}, -{94,-29,81}, -{94,-29,82}, -{94,-29,83}, -{94,-29,84}, -{94,-29,85}, -{94,-29,86}, -{94,-29,87}, -{94,-29,88}, -{94,-29,89}, -{94,-29,90}, -{94,-29,91}, -{94,-28,-9}, -{94,-28,-8}, -{94,-28,-7}, -{94,-28,-6}, -{94,-28,-5}, -{94,-28,-4}, -{94,-28,-3}, -{94,-28,-2}, -{94,-28,-1}, -{94,-28,0}, -{94,-28,1}, -{94,-28,2}, -{94,-28,3}, -{94,-28,4}, -{94,-28,5}, -{94,-28,6}, -{94,-28,7}, -{94,-28,8}, -{94,-28,9}, -{94,-28,10}, -{94,-28,11}, -{94,-28,12}, -{94,-28,13}, -{94,-28,14}, -{94,-28,15}, -{94,-28,16}, -{94,-28,17}, -{94,-28,18}, -{94,-28,19}, -{94,-28,20}, -{94,-28,21}, -{94,-28,22}, -{94,-28,23}, -{94,-28,24}, -{94,-28,25}, -{94,-28,26}, -{94,-28,27}, -{94,-28,28}, -{94,-28,29}, -{94,-28,30}, -{94,-28,31}, -{94,-28,32}, -{94,-28,33}, -{94,-28,34}, -{94,-28,35}, -{94,-28,36}, -{94,-28,37}, -{94,-28,38}, -{94,-28,39}, -{94,-28,40}, -{94,-28,41}, -{94,-28,42}, -{94,-28,43}, -{94,-28,44}, -{94,-28,45}, -{94,-28,46}, -{94,-28,47}, -{94,-28,48}, -{94,-28,49}, -{94,-28,50}, -{94,-28,51}, -{94,-28,52}, -{94,-28,53}, -{94,-28,54}, -{94,-28,55}, -{94,-28,56}, -{94,-28,57}, -{94,-28,58}, -{94,-28,59}, -{94,-28,60}, -{94,-28,61}, -{94,-28,62}, -{94,-28,63}, -{94,-28,64}, -{94,-28,65}, -{94,-28,66}, -{94,-28,67}, -{94,-28,68}, -{94,-28,69}, -{94,-28,70}, -{94,-28,71}, -{94,-28,72}, -{94,-28,73}, -{94,-28,74}, -{94,-28,75}, -{94,-28,76}, -{94,-28,77}, -{94,-28,78}, -{94,-28,79}, -{94,-28,80}, -{94,-28,81}, -{94,-28,82}, -{94,-28,83}, -{94,-28,84}, -{94,-28,85}, -{94,-28,86}, -{94,-28,87}, -{94,-28,88}, -{94,-28,89}, -{94,-28,90}, -{94,-28,91}, -{94,-27,-9}, -{94,-27,-8}, -{94,-27,-7}, -{94,-27,-6}, -{94,-27,-5}, -{94,-27,-4}, -{94,-27,-3}, -{94,-27,-2}, -{94,-27,-1}, -{94,-27,0}, -{94,-27,1}, -{94,-27,2}, -{94,-27,3}, -{94,-27,4}, -{94,-27,5}, -{94,-27,6}, -{94,-27,7}, -{94,-27,8}, -{94,-27,9}, -{94,-27,10}, -{94,-27,11}, -{94,-27,12}, -{94,-27,13}, -{94,-27,14}, -{94,-27,15}, -{94,-27,16}, -{94,-27,17}, -{94,-27,18}, -{94,-27,19}, -{94,-27,20}, -{94,-27,21}, -{94,-27,22}, -{94,-27,23}, -{94,-27,24}, -{94,-27,25}, -{94,-27,26}, -{94,-27,27}, -{94,-27,28}, -{94,-27,29}, -{94,-27,30}, -{94,-27,31}, -{94,-27,32}, -{94,-27,33}, -{94,-27,34}, -{94,-27,35}, -{94,-27,36}, -{94,-27,37}, -{94,-27,38}, -{94,-27,39}, -{94,-27,40}, -{94,-27,41}, -{94,-27,42}, -{94,-27,43}, -{94,-27,44}, -{94,-27,45}, -{94,-27,46}, -{94,-27,47}, -{94,-27,48}, -{94,-27,49}, -{94,-27,50}, -{94,-27,51}, -{94,-27,52}, -{94,-27,53}, -{94,-27,54}, -{94,-27,55}, -{94,-27,56}, -{94,-27,57}, -{94,-27,58}, -{94,-27,59}, -{94,-27,60}, -{94,-27,61}, -{94,-27,62}, -{94,-27,63}, -{94,-27,64}, -{94,-27,65}, -{94,-27,66}, -{94,-27,67}, -{94,-27,68}, -{94,-27,69}, -{94,-27,70}, -{94,-27,71}, -{94,-27,72}, -{94,-27,73}, -{94,-27,74}, -{94,-27,75}, -{94,-27,76}, -{94,-27,77}, -{94,-27,78}, -{94,-27,79}, -{94,-27,80}, -{94,-27,81}, -{94,-27,82}, -{94,-27,83}, -{94,-27,84}, -{94,-27,85}, -{94,-27,86}, -{94,-27,87}, -{94,-27,88}, -{94,-27,89}, -{94,-27,90}, -{94,-27,91}, -{94,-26,-9}, -{94,-26,-8}, -{94,-26,-7}, -{94,-26,-6}, -{94,-26,-5}, -{94,-26,-4}, -{94,-26,-3}, -{94,-26,-2}, -{94,-26,-1}, -{94,-26,0}, -{94,-26,1}, -{94,-26,2}, -{94,-26,3}, -{94,-26,4}, -{94,-26,5}, -{94,-26,6}, -{94,-26,7}, -{94,-26,8}, -{94,-26,9}, -{94,-26,10}, -{94,-26,11}, -{94,-26,12}, -{94,-26,13}, -{94,-26,14}, -{94,-26,15}, -{94,-26,16}, -{94,-26,17}, -{94,-26,18}, -{94,-26,19}, -{94,-26,20}, -{94,-26,21}, -{94,-26,22}, -{94,-26,23}, -{94,-26,24}, -{94,-26,25}, -{94,-26,26}, -{94,-26,27}, -{94,-26,28}, -{94,-26,29}, -{94,-26,30}, -{94,-26,31}, -{94,-26,32}, -{94,-26,33}, -{94,-26,34}, -{94,-26,35}, -{94,-26,36}, -{94,-26,37}, -{94,-26,38}, -{94,-26,39}, -{94,-26,40}, -{94,-26,41}, -{94,-26,42}, -{94,-26,43}, -{94,-26,44}, -{94,-26,45}, -{94,-26,46}, -{94,-26,47}, -{94,-26,48}, -{94,-26,49}, -{94,-26,50}, -{94,-26,51}, -{94,-26,52}, -{94,-26,53}, -{94,-26,54}, -{94,-26,55}, -{94,-26,56}, -{94,-26,57}, -{94,-26,58}, -{94,-26,59}, -{94,-26,60}, -{94,-26,61}, -{94,-26,62}, -{94,-26,63}, -{94,-26,64}, -{94,-26,65}, -{94,-26,66}, -{94,-26,67}, -{94,-26,68}, -{94,-26,69}, -{94,-26,70}, -{94,-26,71}, -{94,-26,72}, -{94,-26,73}, -{94,-26,74}, -{94,-26,75}, -{94,-26,76}, -{94,-26,77}, -{94,-26,78}, -{94,-26,79}, -{94,-26,80}, -{94,-26,81}, -{94,-26,82}, -{94,-26,83}, -{94,-26,84}, -{94,-26,85}, -{94,-26,86}, -{94,-26,87}, -{94,-26,88}, -{94,-26,89}, -{94,-26,90}, -{94,-26,91}, -{94,-25,-9}, -{94,-25,-8}, -{94,-25,-7}, -{94,-25,-6}, -{94,-25,-5}, -{94,-25,-4}, -{94,-25,-3}, -{94,-25,-2}, -{94,-25,-1}, -{94,-25,0}, -{94,-25,1}, -{94,-25,2}, -{94,-25,3}, -{94,-25,4}, -{94,-25,5}, -{94,-25,6}, -{94,-25,7}, -{94,-25,8}, -{94,-25,9}, -{94,-25,10}, -{94,-25,11}, -{94,-25,12}, -{94,-25,13}, -{94,-25,14}, -{94,-25,15}, -{94,-25,16}, -{94,-25,17}, -{94,-25,18}, -{94,-25,19}, -{94,-25,20}, -{94,-25,21}, -{94,-25,22}, -{94,-25,23}, -{94,-25,24}, -{94,-25,25}, -{94,-25,26}, -{94,-25,27}, -{94,-25,28}, -{94,-25,29}, -{94,-25,30}, -{94,-25,31}, -{94,-25,32}, -{94,-25,33}, -{94,-25,34}, -{94,-25,35}, -{94,-25,36}, -{94,-25,37}, -{94,-25,38}, -{94,-25,39}, -{94,-25,40}, -{94,-25,41}, -{94,-25,42}, -{94,-25,43}, -{94,-25,44}, -{94,-25,45}, -{94,-25,46}, -{94,-25,47}, -{94,-25,48}, -{94,-25,49}, -{94,-25,50}, -{94,-25,51}, -{94,-25,52}, -{94,-25,53}, -{94,-25,54}, -{94,-25,55}, -{94,-25,56}, -{94,-25,57}, -{94,-25,58}, -{94,-25,59}, -{94,-25,60}, -{94,-25,61}, -{94,-25,62}, -{94,-25,63}, -{94,-25,64}, -{94,-25,65}, -{94,-25,66}, -{94,-25,67}, -{94,-25,68}, -{94,-25,69}, -{94,-25,70}, -{94,-25,71}, -{94,-25,72}, -{94,-25,73}, -{94,-25,74}, -{94,-25,75}, -{94,-25,76}, -{94,-25,77}, -{94,-25,78}, -{94,-25,79}, -{94,-25,80}, -{94,-25,81}, -{94,-25,82}, -{94,-25,83}, -{94,-25,84}, -{94,-25,85}, -{94,-25,86}, -{94,-25,87}, -{94,-25,88}, -{94,-25,89}, -{94,-25,90}, -{94,-25,91}, -{94,-24,-9}, -{94,-24,-8}, -{94,-24,-7}, -{94,-24,-6}, -{94,-24,-5}, -{94,-24,-4}, -{94,-24,-3}, -{94,-24,-2}, -{94,-24,-1}, -{94,-24,0}, -{94,-24,1}, -{94,-24,2}, -{94,-24,3}, -{94,-24,4}, -{94,-24,5}, -{94,-24,6}, -{94,-24,7}, -{94,-24,8}, -{94,-24,9}, -{94,-24,10}, -{94,-24,11}, -{94,-24,12}, -{94,-24,13}, -{94,-24,14}, -{94,-24,15}, -{94,-24,16}, -{94,-24,17}, -{94,-24,18}, -{94,-24,19}, -{94,-24,20}, -{94,-24,21}, -{94,-24,22}, -{94,-24,23}, -{94,-24,24}, -{94,-24,25}, -{94,-24,26}, -{94,-24,27}, -{94,-24,28}, -{94,-24,29}, -{94,-24,30}, -{94,-24,31}, -{94,-24,32}, -{94,-24,33}, -{94,-24,34}, -{94,-24,35}, -{94,-24,36}, -{94,-24,37}, -{94,-24,38}, -{94,-24,39}, -{94,-24,40}, -{94,-24,41}, -{94,-24,42}, -{94,-24,43}, -{94,-24,44}, -{94,-24,45}, -{94,-24,46}, -{94,-24,47}, -{94,-24,48}, -{94,-24,49}, -{94,-24,50}, -{94,-24,51}, -{94,-24,52}, -{94,-24,53}, -{94,-24,54}, -{94,-24,55}, -{94,-24,56}, -{94,-24,57}, -{94,-24,58}, -{94,-24,59}, -{94,-24,60}, -{94,-24,61}, -{94,-24,62}, -{94,-24,63}, -{94,-24,64}, -{94,-24,65}, -{94,-24,66}, -{94,-24,67}, -{94,-24,68}, -{94,-24,69}, -{94,-24,70}, -{94,-24,71}, -{94,-24,72}, -{94,-24,73}, -{94,-24,74}, -{94,-24,75}, -{94,-24,76}, -{94,-24,77}, -{94,-24,78}, -{94,-24,79}, -{94,-24,80}, -{94,-24,81}, -{94,-24,82}, -{94,-24,83}, -{94,-24,84}, -{94,-24,85}, -{94,-24,86}, -{94,-24,87}, -{94,-24,88}, -{94,-24,89}, -{94,-24,90}, -{94,-24,91}, -{94,-23,-9}, -{94,-23,-8}, -{94,-23,-7}, -{94,-23,-6}, -{94,-23,-5}, -{94,-23,-4}, -{94,-23,-3}, -{94,-23,-2}, -{94,-23,-1}, -{94,-23,0}, -{94,-23,1}, -{94,-23,2}, -{94,-23,3}, -{94,-23,4}, -{94,-23,5}, -{94,-23,6}, -{94,-23,7}, -{94,-23,8}, -{94,-23,9}, -{94,-23,10}, -{94,-23,11}, -{94,-23,12}, -{94,-23,13}, -{94,-23,14}, -{94,-23,15}, -{94,-23,16}, -{94,-23,17}, -{94,-23,18}, -{94,-23,19}, -{94,-23,20}, -{94,-23,21}, -{94,-23,22}, -{94,-23,23}, -{94,-23,24}, -{94,-23,25}, -{94,-23,26}, -{94,-23,27}, -{94,-23,28}, -{94,-23,29}, -{94,-23,30}, -{94,-23,31}, -{94,-23,32}, -{94,-23,33}, -{94,-23,34}, -{94,-23,35}, -{94,-23,36}, -{94,-23,37}, -{94,-23,38}, -{94,-23,39}, -{94,-23,40}, -{94,-23,41}, -{94,-23,42}, -{94,-23,43}, -{94,-23,44}, -{94,-23,45}, -{94,-23,46}, -{94,-23,47}, -{94,-23,48}, -{94,-23,49}, -{94,-23,50}, -{94,-23,51}, -{94,-23,52}, -{94,-23,53}, -{94,-23,54}, -{94,-23,55}, -{94,-23,56}, -{94,-23,57}, -{94,-23,58}, -{94,-23,59}, -{94,-23,60}, -{94,-23,61}, -{94,-23,62}, -{94,-23,63}, -{94,-23,64}, -{94,-23,65}, -{94,-23,66}, -{94,-23,67}, -{94,-23,68}, -{94,-23,69}, -{94,-23,70}, -{94,-23,71}, -{94,-23,72}, -{94,-23,73}, -{94,-23,74}, -{94,-23,75}, -{94,-23,76}, -{94,-23,77}, -{94,-23,78}, -{94,-23,79}, -{94,-23,80}, -{94,-23,81}, -{94,-23,82}, -{94,-23,83}, -{94,-23,84}, -{94,-23,85}, -{94,-23,86}, -{94,-23,87}, -{94,-23,88}, -{94,-23,89}, -{94,-23,90}, -{94,-23,91}, -{94,-22,-9}, -{94,-22,-8}, -{94,-22,-7}, -{94,-22,-6}, -{94,-22,-5}, -{94,-22,-4}, -{94,-22,-3}, -{94,-22,-2}, -{94,-22,-1}, -{94,-22,0}, -{94,-22,1}, -{94,-22,2}, -{94,-22,3}, -{94,-22,4}, -{94,-22,5}, -{94,-22,6}, -{94,-22,7}, -{94,-22,8}, -{94,-22,9}, -{94,-22,10}, -{94,-22,11}, -{94,-22,12}, -{94,-22,13}, -{94,-22,14}, -{94,-22,15}, -{94,-22,16}, -{94,-22,17}, -{94,-22,18}, -{94,-22,19}, -{94,-22,20}, -{94,-22,21}, -{94,-22,22}, -{94,-22,23}, -{94,-22,24}, -{94,-22,25}, -{94,-22,26}, -{94,-22,27}, -{94,-22,28}, -{94,-22,29}, -{94,-22,30}, -{94,-22,31}, -{94,-22,32}, -{94,-22,33}, -{94,-22,34}, -{94,-22,35}, -{94,-22,36}, -{94,-22,37}, -{94,-22,38}, -{94,-22,39}, -{94,-22,40}, -{94,-22,41}, -{94,-22,42}, -{94,-22,43}, -{94,-22,44}, -{94,-22,45}, -{94,-22,46}, -{94,-22,47}, -{94,-22,48}, -{94,-22,49}, -{94,-22,50}, -{94,-22,51}, -{94,-22,52}, -{94,-22,53}, -{94,-22,54}, -{94,-22,55}, -{94,-22,56}, -{94,-22,57}, -{94,-22,58}, -{94,-22,59}, -{94,-22,60}, -{94,-22,61}, -{94,-22,62}, -{94,-22,63}, -{94,-22,64}, -{94,-22,65}, -{94,-22,66}, -{94,-22,67}, -{94,-22,68}, -{94,-22,69}, -{94,-22,70}, -{94,-22,71}, -{94,-22,72}, -{94,-22,73}, -{94,-22,74}, -{94,-22,75}, -{94,-22,76}, -{94,-22,77}, -{94,-22,78}, -{94,-22,79}, -{94,-22,80}, -{94,-22,81}, -{94,-22,82}, -{94,-22,83}, -{94,-22,84}, -{94,-22,85}, -{94,-22,86}, -{94,-22,87}, -{94,-22,88}, -{94,-22,89}, -{94,-22,90}, -{94,-22,91}, -{94,-21,-9}, -{94,-21,-8}, -{94,-21,-7}, -{94,-21,-6}, -{94,-21,-5}, -{94,-21,-4}, -{94,-21,-3}, -{94,-21,-2}, -{94,-21,-1}, -{94,-21,0}, -{94,-21,1}, -{94,-21,2}, -{94,-21,3}, -{94,-21,4}, -{94,-21,5}, -{94,-21,6}, -{94,-21,7}, -{94,-21,8}, -{94,-21,9}, -{94,-21,10}, -{94,-21,11}, -{94,-21,12}, -{94,-21,13}, -{94,-21,14}, -{94,-21,15}, -{94,-21,16}, -{94,-21,17}, -{94,-21,18}, -{94,-21,19}, -{94,-21,20}, -{94,-21,21}, -{94,-21,22}, -{94,-21,23}, -{94,-21,24}, -{94,-21,25}, -{94,-21,26}, -{94,-21,27}, -{94,-21,28}, -{94,-21,29}, -{94,-21,30}, -{94,-21,31}, -{94,-21,32}, -{94,-21,33}, -{94,-21,34}, -{94,-21,35}, -{94,-21,36}, -{94,-21,37}, -{94,-21,38}, -{94,-21,39}, -{94,-21,40}, -{94,-21,41}, -{94,-21,42}, -{94,-21,43}, -{94,-21,44}, -{94,-21,45}, -{94,-21,46}, -{94,-21,47}, -{94,-21,48}, -{94,-21,49}, -{94,-21,50}, -{94,-21,51}, -{94,-21,52}, -{94,-21,53}, -{94,-21,54}, -{94,-21,55}, -{94,-21,56}, -{94,-21,57}, -{94,-21,58}, -{94,-21,59}, -{94,-21,60}, -{94,-21,61}, -{94,-21,62}, -{94,-21,63}, -{94,-21,64}, -{94,-21,65}, -{94,-21,66}, -{94,-21,67}, -{94,-21,68}, -{94,-21,69}, -{94,-21,70}, -{94,-21,71}, -{94,-21,72}, -{94,-21,73}, -{94,-21,74}, -{94,-21,75}, -{94,-21,76}, -{94,-21,77}, -{94,-21,78}, -{94,-21,79}, -{94,-21,80}, -{94,-21,81}, -{94,-21,82}, -{94,-21,83}, -{94,-21,84}, -{94,-21,85}, -{94,-21,86}, -{94,-21,87}, -{94,-21,88}, -{94,-21,89}, -{94,-21,90}, -{94,-21,91}, -{94,-21,92}, -{94,-20,-9}, -{94,-20,-8}, -{94,-20,-7}, -{94,-20,-6}, -{94,-20,-5}, -{94,-20,-4}, -{94,-20,-3}, -{94,-20,-2}, -{94,-20,-1}, -{94,-20,0}, -{94,-20,1}, -{94,-20,2}, -{94,-20,3}, -{94,-20,4}, -{94,-20,5}, -{94,-20,6}, -{94,-20,7}, -{94,-20,8}, -{94,-20,9}, -{94,-20,10}, -{94,-20,11}, -{94,-20,12}, -{94,-20,13}, -{94,-20,14}, -{94,-20,15}, -{94,-20,16}, -{94,-20,17}, -{94,-20,18}, -{94,-20,19}, -{94,-20,20}, -{94,-20,21}, -{94,-20,22}, -{94,-20,23}, -{94,-20,24}, -{94,-20,25}, -{94,-20,26}, -{94,-20,27}, -{94,-20,28}, -{94,-20,29}, -{94,-20,30}, -{94,-20,31}, -{94,-20,32}, -{94,-20,33}, -{94,-20,34}, -{94,-20,35}, -{94,-20,36}, -{94,-20,37}, -{94,-20,38}, -{94,-20,39}, -{94,-20,40}, -{94,-20,41}, -{94,-20,42}, -{94,-20,43}, -{94,-20,44}, -{94,-20,45}, -{94,-20,46}, -{94,-20,47}, -{94,-20,48}, -{94,-20,49}, -{94,-20,50}, -{94,-20,51}, -{94,-20,52}, -{94,-20,53}, -{94,-20,54}, -{94,-20,55}, -{94,-20,56}, -{94,-20,57}, -{94,-20,58}, -{94,-20,59}, -{94,-20,60}, -{94,-20,61}, -{94,-20,62}, -{94,-20,63}, -{94,-20,64}, -{94,-20,65}, -{94,-20,66}, -{94,-20,67}, -{94,-20,68}, -{94,-20,69}, -{94,-20,70}, -{94,-20,71}, -{94,-20,72}, -{94,-20,73}, -{94,-20,74}, -{94,-20,75}, -{94,-20,76}, -{94,-20,77}, -{94,-20,78}, -{94,-20,79}, -{94,-20,80}, -{94,-20,81}, -{94,-20,82}, -{94,-20,83}, -{94,-20,84}, -{94,-20,85}, -{94,-20,86}, -{94,-20,87}, -{94,-20,88}, -{94,-20,89}, -{94,-20,90}, -{94,-20,91}, -{94,-20,92}, -{94,-19,-9}, -{94,-19,-8}, -{94,-19,-7}, -{94,-19,-6}, -{94,-19,-5}, -{94,-19,-4}, -{94,-19,-3}, -{94,-19,-2}, -{94,-19,-1}, -{94,-19,0}, -{94,-19,1}, -{94,-19,2}, -{94,-19,3}, -{94,-19,4}, -{94,-19,5}, -{94,-19,6}, -{94,-19,7}, -{94,-19,8}, -{94,-19,9}, -{94,-19,10}, -{94,-19,11}, -{94,-19,12}, -{94,-19,13}, -{94,-19,14}, -{94,-19,15}, -{94,-19,16}, -{94,-19,17}, -{94,-19,18}, -{94,-19,19}, -{94,-19,20}, -{94,-19,21}, -{94,-19,22}, -{94,-19,23}, -{94,-19,24}, -{94,-19,25}, -{94,-19,26}, -{94,-19,27}, -{94,-19,28}, -{94,-19,29}, -{94,-19,30}, -{94,-19,31}, -{94,-19,32}, -{94,-19,33}, -{94,-19,34}, -{94,-19,35}, -{94,-19,36}, -{94,-19,37}, -{94,-19,38}, -{94,-19,39}, -{94,-19,40}, -{94,-19,41}, -{94,-19,42}, -{94,-19,43}, -{94,-19,44}, -{94,-19,45}, -{94,-19,46}, -{94,-19,47}, -{94,-19,48}, -{94,-19,49}, -{94,-19,50}, -{94,-19,51}, -{94,-19,52}, -{94,-19,53}, -{94,-19,54}, -{94,-19,55}, -{94,-19,56}, -{94,-19,57}, -{94,-19,58}, -{94,-19,59}, -{94,-19,60}, -{94,-19,61}, -{94,-19,62}, -{94,-19,63}, -{94,-19,64}, -{94,-19,65}, -{94,-19,66}, -{94,-19,67}, -{94,-19,68}, -{94,-19,69}, -{94,-19,70}, -{94,-19,71}, -{94,-19,72}, -{94,-19,73}, -{94,-19,74}, -{94,-19,75}, -{94,-19,76}, -{94,-19,77}, -{94,-19,78}, -{94,-19,79}, -{94,-19,80}, -{94,-19,81}, -{94,-19,82}, -{94,-19,83}, -{94,-19,84}, -{94,-19,85}, -{94,-19,86}, -{94,-19,87}, -{94,-19,88}, -{94,-19,89}, -{94,-19,90}, -{94,-19,91}, -{94,-19,92}, -{94,-18,-9}, -{94,-18,-8}, -{94,-18,-7}, -{94,-18,-6}, -{94,-18,-5}, -{94,-18,-4}, -{94,-18,-3}, -{94,-18,-2}, -{94,-18,-1}, -{94,-18,0}, -{94,-18,1}, -{94,-18,2}, -{94,-18,3}, -{94,-18,4}, -{94,-18,5}, -{94,-18,6}, -{94,-18,7}, -{94,-18,8}, -{94,-18,9}, -{94,-18,10}, -{94,-18,11}, -{94,-18,12}, -{94,-18,13}, -{94,-18,14}, -{94,-18,15}, -{94,-18,16}, -{94,-18,17}, -{94,-18,18}, -{94,-18,19}, -{94,-18,20}, -{94,-18,21}, -{94,-18,22}, -{94,-18,23}, -{94,-18,24}, -{94,-18,25}, -{94,-18,26}, -{94,-18,27}, -{94,-18,28}, -{94,-18,29}, -{94,-18,30}, -{94,-18,31}, -{94,-18,32}, -{94,-18,33}, -{94,-18,34}, -{94,-18,35}, -{94,-18,36}, -{94,-18,37}, -{94,-18,38}, -{94,-18,39}, -{94,-18,40}, -{94,-18,41}, -{94,-18,42}, -{94,-18,43}, -{94,-18,44}, -{94,-18,45}, -{94,-18,46}, -{94,-18,47}, -{94,-18,48}, -{94,-18,49}, -{94,-18,50}, -{94,-18,51}, -{94,-18,52}, -{94,-18,53}, -{94,-18,54}, -{94,-18,55}, -{94,-18,56}, -{94,-18,57}, -{94,-18,58}, -{94,-18,59}, -{94,-18,60}, -{94,-18,61}, -{94,-18,62}, -{94,-18,63}, -{94,-18,64}, -{94,-18,65}, -{94,-18,66}, -{94,-18,67}, -{94,-18,68}, -{94,-18,69}, -{94,-18,70}, -{94,-18,71}, -{94,-18,72}, -{94,-18,73}, -{94,-18,74}, -{94,-18,75}, -{94,-18,76}, -{94,-18,77}, -{94,-18,78}, -{94,-18,79}, -{94,-18,80}, -{94,-18,81}, -{94,-18,82}, -{94,-18,83}, -{94,-18,84}, -{94,-18,85}, -{94,-18,86}, -{94,-18,87}, -{94,-18,88}, -{94,-18,89}, -{94,-18,90}, -{94,-18,91}, -{94,-18,92}, -{94,-17,-9}, -{94,-17,-8}, -{94,-17,-7}, -{94,-17,-6}, -{94,-17,-5}, -{94,-17,-4}, -{94,-17,-3}, -{94,-17,-2}, -{94,-17,-1}, -{94,-17,0}, -{94,-17,1}, -{94,-17,2}, -{94,-17,3}, -{94,-17,4}, -{94,-17,5}, -{94,-17,6}, -{94,-17,7}, -{94,-17,8}, -{94,-17,9}, -{94,-17,10}, -{94,-17,11}, -{94,-17,12}, -{94,-17,13}, -{94,-17,14}, -{94,-17,15}, -{94,-17,16}, -{94,-17,17}, -{94,-17,18}, -{94,-17,19}, -{94,-17,20}, -{94,-17,21}, -{94,-17,22}, -{94,-17,23}, -{94,-17,24}, -{94,-17,25}, -{94,-17,26}, -{94,-17,27}, -{94,-17,28}, -{94,-17,29}, -{94,-17,30}, -{94,-17,31}, -{94,-17,32}, -{94,-17,33}, -{94,-17,34}, -{94,-17,35}, -{94,-17,36}, -{94,-17,37}, -{94,-17,38}, -{94,-17,39}, -{94,-17,40}, -{94,-17,41}, -{94,-17,42}, -{94,-17,43}, -{94,-17,44}, -{94,-17,45}, -{94,-17,46}, -{94,-17,47}, -{94,-17,48}, -{94,-17,49}, -{94,-17,50}, -{94,-17,51}, -{94,-17,52}, -{94,-17,53}, -{94,-17,54}, -{94,-17,55}, -{94,-17,56}, -{94,-17,57}, -{94,-17,58}, -{94,-17,59}, -{94,-17,60}, -{94,-17,61}, -{94,-17,62}, -{94,-17,63}, -{94,-17,64}, -{94,-17,65}, -{94,-17,66}, -{94,-17,67}, -{94,-17,68}, -{94,-17,69}, -{94,-17,70}, -{94,-17,71}, -{94,-17,72}, -{94,-17,73}, -{94,-17,74}, -{94,-17,75}, -{94,-17,76}, -{94,-17,77}, -{94,-17,78}, -{94,-17,79}, -{94,-17,80}, -{94,-17,81}, -{94,-17,82}, -{94,-17,83}, -{94,-17,84}, -{94,-17,85}, -{94,-17,86}, -{94,-17,87}, -{94,-17,88}, -{94,-17,89}, -{94,-17,90}, -{94,-17,91}, -{94,-17,92}, -{94,-16,-9}, -{94,-16,-8}, -{94,-16,-7}, -{94,-16,-6}, -{94,-16,-5}, -{94,-16,-4}, -{94,-16,-3}, -{94,-16,-2}, -{94,-16,-1}, -{94,-16,0}, -{94,-16,1}, -{94,-16,2}, -{94,-16,3}, -{94,-16,4}, -{94,-16,5}, -{94,-16,6}, -{94,-16,7}, -{94,-16,8}, -{94,-16,9}, -{94,-16,10}, -{94,-16,11}, -{94,-16,12}, -{94,-16,13}, -{94,-16,14}, -{94,-16,15}, -{94,-16,16}, -{94,-16,17}, -{94,-16,18}, -{94,-16,19}, -{94,-16,20}, -{94,-16,21}, -{94,-16,22}, -{94,-16,23}, -{94,-16,24}, -{94,-16,25}, -{94,-16,26}, -{94,-16,27}, -{94,-16,28}, -{94,-16,29}, -{94,-16,30}, -{94,-16,31}, -{94,-16,32}, -{94,-16,33}, -{94,-16,34}, -{94,-16,35}, -{94,-16,36}, -{94,-16,37}, -{94,-16,38}, -{94,-16,39}, -{94,-16,40}, -{94,-16,41}, -{94,-16,42}, -{94,-16,43}, -{94,-16,44}, -{94,-16,45}, -{94,-16,46}, -{94,-16,47}, -{94,-16,48}, -{94,-16,49}, -{94,-16,50}, -{94,-16,51}, -{94,-16,52}, -{94,-16,53}, -{94,-16,54}, -{94,-16,55}, -{94,-16,56}, -{94,-16,57}, -{94,-16,58}, -{94,-16,59}, -{94,-16,60}, -{94,-16,61}, -{94,-16,62}, -{94,-16,63}, -{94,-16,64}, -{94,-16,65}, -{94,-16,66}, -{94,-16,67}, -{94,-16,68}, -{94,-16,69}, -{94,-16,70}, -{94,-16,71}, -{94,-16,72}, -{94,-16,73}, -{94,-16,74}, -{94,-16,75}, -{94,-16,76}, -{94,-16,77}, -{94,-16,78}, -{94,-16,79}, -{94,-16,80}, -{94,-16,81}, -{94,-16,82}, -{94,-16,83}, -{94,-16,84}, -{94,-16,85}, -{94,-16,86}, -{94,-16,87}, -{94,-16,88}, -{94,-16,89}, -{94,-16,90}, -{94,-16,91}, -{94,-16,92}, -{94,-15,-9}, -{94,-15,-8}, -{94,-15,-7}, -{94,-15,-6}, -{94,-15,-5}, -{94,-15,-4}, -{94,-15,-3}, -{94,-15,-2}, -{94,-15,-1}, -{94,-15,0}, -{94,-15,1}, -{94,-15,2}, -{94,-15,3}, -{94,-15,4}, -{94,-15,5}, -{94,-15,6}, -{94,-15,7}, -{94,-15,8}, -{94,-15,9}, -{94,-15,10}, -{94,-15,11}, -{94,-15,12}, -{94,-15,13}, -{94,-15,14}, -{94,-15,15}, -{94,-15,16}, -{94,-15,17}, -{94,-15,18}, -{94,-15,19}, -{94,-15,20}, -{94,-15,21}, -{94,-15,22}, -{94,-15,23}, -{94,-15,24}, -{94,-15,25}, -{94,-15,26}, -{94,-15,27}, -{94,-15,28}, -{94,-15,29}, -{94,-15,30}, -{94,-15,31}, -{94,-15,32}, -{94,-15,33}, -{94,-15,34}, -{94,-15,35}, -{94,-15,36}, -{94,-15,37}, -{94,-15,38}, -{94,-15,39}, -{94,-15,40}, -{94,-15,41}, -{94,-15,42}, -{94,-15,43}, -{94,-15,44}, -{94,-15,45}, -{94,-15,46}, -{94,-15,47}, -{94,-15,48}, -{94,-15,49}, -{94,-15,50}, -{94,-15,51}, -{94,-15,52}, -{94,-15,53}, -{94,-15,54}, -{94,-15,55}, -{94,-15,56}, -{94,-15,57}, -{94,-15,58}, -{94,-15,59}, -{94,-15,60}, -{94,-15,61}, -{94,-15,62}, -{94,-15,63}, -{94,-15,64}, -{94,-15,65}, -{94,-15,66}, -{94,-15,67}, -{94,-15,68}, -{94,-15,69}, -{94,-15,70}, -{94,-15,71}, -{94,-15,72}, -{94,-15,73}, -{94,-15,74}, -{94,-15,75}, -{94,-15,76}, -{94,-15,77}, -{94,-15,78}, -{94,-15,79}, -{94,-15,80}, -{94,-15,81}, -{94,-15,82}, -{94,-15,83}, -{94,-15,84}, -{94,-15,85}, -{94,-15,86}, -{94,-15,87}, -{94,-15,88}, -{94,-14,-9}, -{94,-14,-8}, -{94,-14,-7}, -{94,-14,-6}, -{94,-14,-5}, -{94,-14,-4}, -{94,-14,-3}, -{94,-14,-2}, -{94,-14,-1}, -{94,-14,0}, -{94,-14,1}, -{94,-14,2}, -{94,-14,3}, -{94,-14,4}, -{94,-14,5}, -{94,-14,6}, -{94,-14,7}, -{94,-14,8}, -{94,-14,9}, -{94,-14,10}, -{94,-14,11}, -{94,-14,12}, -{94,-14,13}, -{94,-14,14}, -{94,-14,15}, -{94,-14,16}, -{94,-14,17}, -{94,-14,18}, -{94,-14,19}, -{94,-14,20}, -{94,-14,21}, -{94,-14,22}, -{94,-14,23}, -{94,-14,24}, -{94,-14,25}, -{94,-14,26}, -{94,-14,27}, -{94,-14,28}, -{94,-14,29}, -{94,-14,30}, -{94,-14,31}, -{94,-14,32}, -{94,-14,33}, -{94,-14,34}, -{94,-14,35}, -{94,-14,36}, -{94,-14,37}, -{94,-14,38}, -{94,-14,39}, -{94,-14,40}, -{94,-14,41}, -{94,-14,42}, -{94,-14,43}, -{94,-14,44}, -{94,-14,45}, -{94,-14,46}, -{94,-14,47}, -{94,-14,48}, -{94,-14,49}, -{94,-14,50}, -{94,-14,51}, -{94,-14,52}, -{94,-14,53}, -{94,-14,54}, -{94,-14,55}, -{94,-14,56}, -{94,-14,57}, -{94,-14,58}, -{94,-14,59}, -{94,-14,60}, -{94,-14,61}, -{94,-14,62}, -{94,-14,63}, -{94,-14,64}, -{94,-14,65}, -{94,-14,66}, -{94,-14,67}, -{94,-14,68}, -{94,-14,69}, -{94,-14,70}, -{94,-14,71}, -{94,-14,72}, -{94,-14,73}, -{94,-14,74}, -{94,-14,75}, -{94,-14,76}, -{94,-14,77}, -{94,-14,78}, -{94,-14,79}, -{94,-14,80}, -{94,-14,81}, -{94,-13,-9}, -{94,-13,-8}, -{94,-13,-7}, -{94,-13,-6}, -{94,-13,-5}, -{94,-13,-4}, -{94,-13,-3}, -{94,-13,-2}, -{94,-13,-1}, -{94,-13,0}, -{94,-13,1}, -{94,-13,2}, -{94,-13,3}, -{94,-13,4}, -{94,-13,5}, -{94,-13,6}, -{94,-13,7}, -{94,-13,8}, -{94,-13,9}, -{94,-13,10}, -{94,-13,11}, -{94,-13,12}, -{94,-13,13}, -{94,-13,14}, -{94,-13,15}, -{94,-13,16}, -{94,-13,17}, -{94,-13,18}, -{94,-13,19}, -{94,-13,20}, -{94,-13,21}, -{94,-13,22}, -{94,-13,23}, -{94,-13,24}, -{94,-13,25}, -{94,-13,26}, -{94,-13,27}, -{94,-13,28}, -{94,-13,29}, -{94,-13,30}, -{94,-13,31}, -{94,-13,32}, -{94,-13,33}, -{94,-13,34}, -{94,-13,35}, -{94,-13,36}, -{94,-13,37}, -{94,-13,38}, -{94,-13,39}, -{94,-13,40}, -{94,-13,41}, -{94,-13,42}, -{94,-13,43}, -{94,-13,44}, -{94,-13,45}, -{94,-13,46}, -{94,-13,47}, -{94,-13,48}, -{94,-13,49}, -{94,-13,50}, -{94,-13,51}, -{94,-13,52}, -{94,-13,53}, -{94,-13,54}, -{94,-13,55}, -{94,-13,56}, -{94,-13,57}, -{94,-13,58}, -{94,-13,59}, -{94,-13,60}, -{94,-13,61}, -{94,-13,62}, -{94,-13,63}, -{94,-13,64}, -{94,-13,65}, -{94,-13,66}, -{94,-13,67}, -{94,-13,68}, -{94,-13,69}, -{94,-13,70}, -{94,-13,71}, -{94,-13,72}, -{94,-13,73}, -{94,-13,74}, -{94,-12,-9}, -{94,-12,-8}, -{94,-12,-7}, -{94,-12,-6}, -{94,-12,-5}, -{94,-12,-4}, -{94,-12,-3}, -{94,-12,-2}, -{94,-12,-1}, -{94,-12,0}, -{94,-12,1}, -{94,-12,2}, -{94,-12,3}, -{94,-12,4}, -{94,-12,5}, -{94,-12,6}, -{94,-12,7}, -{94,-12,8}, -{94,-12,9}, -{94,-12,10}, -{94,-12,11}, -{94,-12,12}, -{94,-12,13}, -{94,-12,14}, -{94,-12,15}, -{94,-12,16}, -{94,-12,17}, -{94,-12,18}, -{94,-12,19}, -{94,-12,20}, -{94,-12,21}, -{94,-12,22}, -{94,-12,23}, -{94,-12,24}, -{94,-12,25}, -{94,-12,26}, -{94,-12,27}, -{94,-12,28}, -{94,-12,29}, -{94,-12,30}, -{94,-12,31}, -{94,-12,32}, -{94,-12,33}, -{94,-12,34}, -{94,-12,35}, -{94,-12,36}, -{94,-12,37}, -{94,-12,38}, -{94,-12,39}, -{94,-12,40}, -{94,-12,41}, -{94,-12,42}, -{94,-12,43}, -{94,-12,44}, -{94,-12,45}, -{94,-12,46}, -{94,-12,47}, -{94,-12,48}, -{94,-12,49}, -{94,-12,50}, -{94,-12,51}, -{94,-12,52}, -{94,-12,53}, -{94,-12,54}, -{94,-12,55}, -{94,-12,56}, -{94,-12,57}, -{94,-12,58}, -{94,-12,59}, -{94,-12,60}, -{94,-12,61}, -{94,-12,62}, -{94,-12,63}, -{94,-12,64}, -{94,-12,65}, -{94,-12,66}, -{94,-12,67}, -{94,-12,68}, -{94,-12,69}, -{94,-11,-9}, -{94,-11,-8}, -{94,-11,-7}, -{94,-11,-6}, -{94,-11,-5}, -{94,-11,-4}, -{94,-11,-3}, -{94,-11,-2}, -{94,-11,-1}, -{94,-11,0}, -{94,-11,1}, -{94,-11,2}, -{94,-11,3}, -{94,-11,4}, -{94,-11,5}, -{94,-11,6}, -{94,-11,7}, -{94,-11,8}, -{94,-11,9}, -{94,-11,10}, -{94,-11,11}, -{94,-11,12}, -{94,-11,13}, -{94,-11,14}, -{94,-11,15}, -{94,-11,16}, -{94,-11,17}, -{94,-11,18}, -{94,-11,19}, -{94,-11,20}, -{94,-11,21}, -{94,-11,22}, -{94,-11,23}, -{94,-11,24}, -{94,-11,25}, -{94,-11,26}, -{94,-11,27}, -{94,-11,28}, -{94,-11,29}, -{94,-11,30}, -{94,-11,31}, -{94,-11,32}, -{94,-11,33}, -{94,-11,34}, -{94,-11,35}, -{94,-11,36}, -{94,-11,37}, -{94,-11,38}, -{94,-11,39}, -{94,-11,40}, -{94,-11,41}, -{94,-11,42}, -{94,-11,43}, -{94,-11,44}, -{94,-11,45}, -{94,-11,46}, -{94,-11,47}, -{94,-11,48}, -{94,-11,49}, -{94,-11,50}, -{94,-11,51}, -{94,-11,52}, -{94,-11,53}, -{94,-11,54}, -{94,-11,55}, -{94,-11,56}, -{94,-11,57}, -{94,-11,58}, -{94,-11,59}, -{94,-11,60}, -{94,-11,61}, -{94,-11,62}, -{94,-11,63}, -{94,-11,64}, -{94,-10,-9}, -{94,-10,-8}, -{94,-10,-7}, -{94,-10,-6}, -{94,-10,-5}, -{94,-10,-4}, -{94,-10,-3}, -{94,-10,-2}, -{94,-10,-1}, -{94,-10,0}, -{94,-10,1}, -{94,-10,2}, -{94,-10,3}, -{94,-10,4}, -{94,-10,5}, -{94,-10,6}, -{94,-10,7}, -{94,-10,8}, -{94,-10,9}, -{94,-10,10}, -{94,-10,11}, -{94,-10,12}, -{94,-10,13}, -{94,-10,14}, -{94,-10,15}, -{94,-10,16}, -{94,-10,17}, -{94,-10,18}, -{94,-10,19}, -{94,-10,20}, -{94,-10,21}, -{94,-10,22}, -{94,-10,23}, -{94,-10,24}, -{94,-10,25}, -{94,-10,26}, -{94,-10,27}, -{94,-10,28}, -{94,-10,29}, -{94,-10,30}, -{94,-10,31}, -{94,-10,32}, -{94,-10,33}, -{94,-10,34}, -{94,-10,35}, -{94,-10,36}, -{94,-10,37}, -{94,-10,38}, -{94,-10,39}, -{94,-10,40}, -{94,-10,41}, -{94,-10,42}, -{94,-10,43}, -{94,-10,44}, -{94,-10,45}, -{94,-10,46}, -{94,-10,47}, -{94,-10,48}, -{94,-10,49}, -{94,-10,50}, -{94,-10,51}, -{94,-10,52}, -{94,-10,53}, -{94,-10,54}, -{94,-10,55}, -{94,-10,56}, -{94,-10,57}, -{94,-10,58}, -{94,-10,59}, -{94,-9,-9}, -{94,-9,-8}, -{94,-9,-7}, -{94,-9,-6}, -{94,-9,-5}, -{94,-9,-4}, -{94,-9,-3}, -{94,-9,-2}, -{94,-9,-1}, -{94,-9,0}, -{94,-9,1}, -{94,-9,2}, -{94,-9,3}, -{94,-9,4}, -{94,-9,5}, -{94,-9,6}, -{94,-9,7}, -{94,-9,8}, -{94,-9,9}, -{94,-9,10}, -{94,-9,11}, -{94,-9,12}, -{94,-9,13}, -{94,-9,14}, -{94,-9,15}, -{94,-9,16}, -{94,-9,17}, -{94,-9,18}, -{94,-9,19}, -{94,-9,20}, -{94,-9,21}, -{94,-9,22}, -{94,-9,23}, -{94,-9,24}, -{94,-9,25}, -{94,-9,26}, -{94,-9,27}, -{94,-9,28}, -{94,-9,29}, -{94,-9,30}, -{94,-9,31}, -{94,-9,32}, -{94,-9,33}, -{94,-9,34}, -{94,-9,35}, -{94,-9,36}, -{94,-9,37}, -{94,-9,38}, -{94,-9,39}, -{94,-9,40}, -{94,-9,41}, -{94,-9,42}, -{94,-9,43}, -{94,-9,44}, -{94,-9,45}, -{94,-9,46}, -{94,-9,47}, -{94,-9,48}, -{94,-9,49}, -{94,-9,50}, -{94,-9,51}, -{94,-9,52}, -{94,-9,53}, -{94,-9,54}, -{94,-8,-9}, -{94,-8,-8}, -{94,-8,-7}, -{94,-8,-6}, -{94,-8,-5}, -{94,-8,-4}, -{94,-8,-3}, -{94,-8,-2}, -{94,-8,-1}, -{94,-8,0}, -{94,-8,1}, -{94,-8,2}, -{94,-8,3}, -{94,-8,4}, -{94,-8,5}, -{94,-8,6}, -{94,-8,7}, -{94,-8,8}, -{94,-8,9}, -{94,-8,10}, -{94,-8,11}, -{94,-8,12}, -{94,-8,13}, -{94,-8,14}, -{94,-8,15}, -{94,-8,16}, -{94,-8,17}, -{94,-8,18}, -{94,-8,19}, -{94,-8,20}, -{94,-8,21}, -{94,-8,22}, -{94,-8,23}, -{94,-8,24}, -{94,-8,25}, -{94,-8,26}, -{94,-8,27}, -{94,-8,28}, -{94,-8,29}, -{94,-8,30}, -{94,-8,31}, -{94,-8,32}, -{94,-8,33}, -{94,-8,34}, -{94,-8,35}, -{94,-8,36}, -{94,-8,37}, -{94,-8,38}, -{94,-8,39}, -{94,-8,40}, -{94,-8,41}, -{94,-8,42}, -{94,-8,43}, -{94,-8,44}, -{94,-8,45}, -{94,-8,46}, -{94,-8,47}, -{94,-8,48}, -{94,-8,49}, -{94,-8,50}, -{94,-7,-9}, -{94,-7,-8}, -{94,-7,-7}, -{94,-7,-6}, -{94,-7,-5}, -{94,-7,-4}, -{94,-7,-3}, -{94,-7,-2}, -{94,-7,-1}, -{94,-7,0}, -{94,-7,1}, -{94,-7,2}, -{94,-7,3}, -{94,-7,4}, -{94,-7,5}, -{94,-7,6}, -{94,-7,7}, -{94,-7,8}, -{94,-7,9}, -{94,-7,10}, -{94,-7,11}, -{94,-7,12}, -{94,-7,13}, -{94,-7,14}, -{94,-7,15}, -{94,-7,16}, -{94,-7,17}, -{94,-7,18}, -{94,-7,19}, -{94,-7,20}, -{94,-7,21}, -{94,-7,22}, -{94,-7,23}, -{94,-7,24}, -{94,-7,25}, -{94,-7,26}, -{94,-7,27}, -{94,-7,28}, -{94,-7,29}, -{94,-7,30}, -{94,-7,31}, -{94,-7,32}, -{94,-7,33}, -{94,-7,34}, -{94,-7,35}, -{94,-7,36}, -{94,-7,37}, -{94,-7,38}, -{94,-7,39}, -{94,-7,40}, -{94,-7,41}, -{94,-7,42}, -{94,-7,43}, -{94,-7,44}, -{94,-7,45}, -{94,-7,46}, -{94,-6,-9}, -{94,-6,-8}, -{94,-6,-7}, -{94,-6,-6}, -{94,-6,-5}, -{94,-6,-4}, -{94,-6,-3}, -{94,-6,-2}, -{94,-6,-1}, -{94,-6,0}, -{94,-6,1}, -{94,-6,2}, -{94,-6,3}, -{94,-6,4}, -{94,-6,5}, -{94,-6,6}, -{94,-6,7}, -{94,-6,8}, -{94,-6,9}, -{94,-6,10}, -{94,-6,11}, -{94,-6,12}, -{94,-6,13}, -{94,-6,14}, -{94,-6,15}, -{94,-6,16}, -{94,-6,17}, -{94,-6,18}, -{94,-6,19}, -{94,-6,20}, -{94,-6,21}, -{94,-6,22}, -{94,-6,23}, -{94,-6,24}, -{94,-6,25}, -{94,-6,26}, -{94,-6,27}, -{94,-6,28}, -{94,-6,29}, -{94,-6,30}, -{94,-6,31}, -{94,-6,32}, -{94,-6,33}, -{94,-6,34}, -{94,-6,35}, -{94,-6,36}, -{94,-6,37}, -{94,-6,38}, -{94,-6,39}, -{94,-6,40}, -{94,-6,41}, -{94,-6,42}, -{94,-5,-9}, -{94,-5,-8}, -{94,-5,-7}, -{94,-5,-6}, -{94,-5,-5}, -{94,-5,-4}, -{94,-5,-3}, -{94,-5,-2}, -{94,-5,-1}, -{94,-5,0}, -{94,-5,1}, -{94,-5,2}, -{94,-5,3}, -{94,-5,4}, -{94,-5,5}, -{94,-5,6}, -{94,-5,7}, -{94,-5,8}, -{94,-5,9}, -{94,-5,10}, -{94,-5,11}, -{94,-5,12}, -{94,-5,13}, -{94,-5,14}, -{94,-5,15}, -{94,-5,16}, -{94,-5,17}, -{94,-5,18}, -{94,-5,19}, -{94,-5,20}, -{94,-5,21}, -{94,-5,22}, -{94,-5,23}, -{94,-5,24}, -{94,-5,25}, -{94,-5,26}, -{94,-5,27}, -{94,-5,28}, -{94,-5,29}, -{94,-5,30}, -{94,-5,31}, -{94,-5,32}, -{94,-5,33}, -{94,-5,34}, -{94,-5,35}, -{94,-5,36}, -{94,-5,37}, -{94,-5,38}, -{94,-5,39}, -{94,-4,-9}, -{94,-4,-8}, -{94,-4,-7}, -{94,-4,-6}, -{94,-4,-5}, -{94,-4,-4}, -{94,-4,-3}, -{94,-4,-2}, -{94,-4,-1}, -{94,-4,0}, -{94,-4,1}, -{94,-4,2}, -{94,-4,3}, -{94,-4,4}, -{94,-4,5}, -{94,-4,6}, -{94,-4,7}, -{94,-4,8}, -{94,-4,9}, -{94,-4,10}, -{94,-4,11}, -{94,-4,12}, -{94,-4,13}, -{94,-4,14}, -{94,-4,15}, -{94,-4,16}, -{94,-4,17}, -{94,-4,18}, -{94,-4,19}, -{94,-4,20}, -{94,-4,21}, -{94,-4,22}, -{94,-4,23}, -{94,-4,24}, -{94,-4,25}, -{94,-4,26}, -{94,-4,27}, -{94,-4,28}, -{94,-4,29}, -{94,-4,30}, -{94,-4,31}, -{94,-4,32}, -{94,-4,33}, -{94,-4,34}, -{94,-4,35}, -{94,-3,-9}, -{94,-3,-8}, -{94,-3,-7}, -{94,-3,-6}, -{94,-3,-5}, -{94,-3,-4}, -{94,-3,-3}, -{94,-3,-2}, -{94,-3,-1}, -{94,-3,0}, -{94,-3,1}, -{94,-3,2}, -{94,-3,3}, -{94,-3,4}, -{94,-3,5}, -{94,-3,6}, -{94,-3,7}, -{94,-3,8}, -{94,-3,9}, -{94,-3,10}, -{94,-3,11}, -{94,-3,12}, -{94,-3,13}, -{94,-3,14}, -{94,-3,15}, -{94,-3,16}, -{94,-3,17}, -{94,-3,18}, -{94,-3,19}, -{94,-3,20}, -{94,-3,21}, -{94,-3,22}, -{94,-3,23}, -{94,-3,24}, -{94,-3,25}, -{94,-3,26}, -{94,-3,27}, -{94,-3,28}, -{94,-3,29}, -{94,-3,30}, -{94,-3,31}, -{94,-3,32}, -{94,-2,-9}, -{94,-2,-8}, -{94,-2,-7}, -{94,-2,-6}, -{94,-2,-5}, -{94,-2,-4}, -{94,-2,-3}, -{94,-2,-2}, -{94,-2,-1}, -{94,-2,0}, -{94,-2,1}, -{94,-2,2}, -{94,-2,3}, -{94,-2,4}, -{94,-2,5}, -{94,-2,6}, -{94,-2,7}, -{94,-2,8}, -{94,-2,9}, -{94,-2,10}, -{94,-2,11}, -{94,-2,12}, -{94,-2,13}, -{94,-2,14}, -{94,-2,15}, -{94,-2,16}, -{94,-2,17}, -{94,-2,18}, -{94,-2,19}, -{94,-2,20}, -{94,-2,21}, -{94,-2,22}, -{94,-2,23}, -{94,-2,24}, -{94,-2,25}, -{94,-2,26}, -{94,-2,27}, -{94,-2,28}, -{94,-2,29}, -{94,-1,-9}, -{94,-1,-8}, -{94,-1,-7}, -{94,-1,-6}, -{94,-1,-5}, -{94,-1,-4}, -{94,-1,-3}, -{94,-1,-2}, -{94,-1,-1}, -{94,-1,0}, -{94,-1,1}, -{94,-1,2}, -{94,-1,3}, -{94,-1,4}, -{94,-1,5}, -{94,-1,6}, -{94,-1,7}, -{94,-1,8}, -{94,-1,9}, -{94,-1,10}, -{94,-1,11}, -{94,-1,12}, -{94,-1,13}, -{94,-1,14}, -{94,-1,15}, -{94,-1,16}, -{94,-1,17}, -{94,-1,18}, -{94,-1,19}, -{94,-1,20}, -{94,-1,21}, -{94,-1,22}, -{94,-1,23}, -{94,-1,24}, -{94,-1,25}, -{94,-1,26}, -{94,0,-9}, -{94,0,-8}, -{94,0,-7}, -{94,0,-6}, -{94,0,-5}, -{94,0,-4}, -{94,0,-3}, -{94,0,-2}, -{94,0,-1}, -{94,0,0}, -{94,0,1}, -{94,0,2}, -{94,0,3}, -{94,0,4}, -{94,0,5}, -{94,0,6}, -{94,0,7}, -{94,0,8}, -{94,0,9}, -{94,0,10}, -{94,0,11}, -{94,0,12}, -{94,0,13}, -{94,0,14}, -{94,0,15}, -{94,0,16}, -{94,0,17}, -{94,0,18}, -{94,0,19}, -{94,0,20}, -{94,0,21}, -{94,0,22}, -{94,0,23}, -{94,1,-9}, -{94,1,-8}, -{94,1,-7}, -{94,1,-6}, -{94,1,-5}, -{94,1,-4}, -{94,1,-3}, -{94,1,-2}, -{94,1,-1}, -{94,1,0}, -{94,1,1}, -{94,1,2}, -{94,1,3}, -{94,1,4}, -{94,1,5}, -{94,1,6}, -{94,1,7}, -{94,1,8}, -{94,1,9}, -{94,1,10}, -{94,1,11}, -{94,1,12}, -{94,1,13}, -{94,1,14}, -{94,1,15}, -{94,1,16}, -{94,1,17}, -{94,1,18}, -{94,1,19}, -{94,1,20}, -{94,2,-9}, -{94,2,-8}, -{94,2,-7}, -{94,2,-6}, -{94,2,-5}, -{94,2,-4}, -{94,2,-3}, -{94,2,-2}, -{94,2,-1}, -{94,2,0}, -{94,2,1}, -{94,2,2}, -{94,2,3}, -{94,2,4}, -{94,2,5}, -{94,2,6}, -{94,2,7}, -{94,2,8}, -{94,2,9}, -{94,2,10}, -{94,2,11}, -{94,2,12}, -{94,2,13}, -{94,2,14}, -{94,2,15}, -{94,2,16}, -{94,2,17}, -{94,3,-9}, -{94,3,-8}, -{94,3,-7}, -{94,3,-6}, -{94,3,-5}, -{94,3,-4}, -{94,3,-3}, -{94,3,-2}, -{94,3,-1}, -{94,3,0}, -{94,3,1}, -{94,3,2}, -{94,3,3}, -{94,3,4}, -{94,3,5}, -{94,3,6}, -{94,3,7}, -{94,3,8}, -{94,3,9}, -{94,3,10}, -{94,3,11}, -{94,3,12}, -{94,3,13}, -{94,3,14}, -{94,4,-9}, -{94,4,-8}, -{94,4,-7}, -{94,4,-6}, -{94,4,-5}, -{94,4,-4}, -{94,4,-3}, -{94,4,-2}, -{94,4,-1}, -{94,4,0}, -{94,4,1}, -{94,4,2}, -{94,4,3}, -{94,4,4}, -{94,4,5}, -{94,4,6}, -{94,4,7}, -{94,4,8}, -{94,4,9}, -{94,4,10}, -{94,4,11}, -{94,4,12}, -{94,5,-9}, -{94,5,-8}, -{94,5,-7}, -{94,5,-6}, -{94,5,-5}, -{94,5,-4}, -{94,5,-3}, -{94,5,-2}, -{94,5,-1}, -{94,5,0}, -{94,5,1}, -{94,5,2}, -{94,5,3}, -{94,5,4}, -{94,5,5}, -{94,5,6}, -{94,5,7}, -{94,5,8}, -{94,5,9}, -{94,6,-9}, -{94,6,-8}, -{94,6,-7}, -{94,6,-6}, -{94,6,-5}, -{94,6,-4}, -{94,6,-3}, -{94,6,-2}, -{94,6,-1}, -{94,6,0}, -{94,6,1}, -{94,6,2}, -{94,6,3}, -{94,6,4}, -{94,6,5}, -{94,6,6}, -{94,6,7}, -{94,7,-9}, -{94,7,-8}, -{94,7,-7}, -{94,7,-6}, -{94,7,-5}, -{94,7,-4}, -{94,7,-3}, -{94,7,-2}, -{94,7,-1}, -{94,7,0}, -{94,7,1}, -{94,7,2}, -{94,7,3}, -{94,7,4}, -{94,8,-9}, -{94,8,-8}, -{94,8,-7}, -{94,8,-6}, -{94,8,-5}, -{94,8,-4}, -{94,8,-3}, -{94,8,-2}, -{94,8,-1}, -{94,8,0}, -{94,8,1}, -{94,8,2}, -{94,9,-9}, -{94,9,-8}, -{94,9,-7}, -{94,9,-6}, -{94,9,-5}, -{94,9,-4}, -{94,9,-3}, -{94,9,-2}, -{94,9,-1}, -{94,10,-9}, -{94,10,-8}, -{94,10,-7}, -{94,10,-6}, -{94,10,-5}, -{94,10,-4}, -{94,10,-3}, -{94,11,-9}, -{94,11,-8}, -{94,11,-7}, -{94,11,-6}, -{94,11,-5}, -{94,12,-9}, -{94,12,-8}, -{95,-33,73}, -{95,-33,74}, -{95,-33,75}, -{95,-33,76}, -{95,-33,77}, -{95,-33,78}, -{95,-33,79}, -{95,-33,80}, -{95,-33,81}, -{95,-33,82}, -{95,-33,83}, -{95,-33,84}, -{95,-33,85}, -{95,-33,86}, -{95,-33,87}, -{95,-33,88}, -{95,-33,89}, -{95,-33,90}, -{95,-33,91}, -{95,-33,92}, -{95,-32,57}, -{95,-32,58}, -{95,-32,59}, -{95,-32,60}, -{95,-32,61}, -{95,-32,62}, -{95,-32,63}, -{95,-32,64}, -{95,-32,65}, -{95,-32,66}, -{95,-32,67}, -{95,-32,68}, -{95,-32,69}, -{95,-32,70}, -{95,-32,71}, -{95,-32,72}, -{95,-32,73}, -{95,-32,74}, -{95,-32,75}, -{95,-32,76}, -{95,-32,77}, -{95,-32,78}, -{95,-32,79}, -{95,-32,80}, -{95,-32,81}, -{95,-32,82}, -{95,-32,83}, -{95,-32,84}, -{95,-32,85}, -{95,-32,86}, -{95,-32,87}, -{95,-32,88}, -{95,-32,89}, -{95,-32,90}, -{95,-32,91}, -{95,-32,92}, -{95,-31,44}, -{95,-31,45}, -{95,-31,46}, -{95,-31,47}, -{95,-31,48}, -{95,-31,49}, -{95,-31,50}, -{95,-31,51}, -{95,-31,52}, -{95,-31,53}, -{95,-31,54}, -{95,-31,55}, -{95,-31,56}, -{95,-31,57}, -{95,-31,58}, -{95,-31,59}, -{95,-31,60}, -{95,-31,61}, -{95,-31,62}, -{95,-31,63}, -{95,-31,64}, -{95,-31,65}, -{95,-31,66}, -{95,-31,67}, -{95,-31,68}, -{95,-31,69}, -{95,-31,70}, -{95,-31,71}, -{95,-31,72}, -{95,-31,73}, -{95,-31,74}, -{95,-31,75}, -{95,-31,76}, -{95,-31,77}, -{95,-31,78}, -{95,-31,79}, -{95,-31,80}, -{95,-31,81}, -{95,-31,82}, -{95,-31,83}, -{95,-31,84}, -{95,-31,85}, -{95,-31,86}, -{95,-31,87}, -{95,-31,88}, -{95,-31,89}, -{95,-31,90}, -{95,-31,91}, -{95,-31,92}, -{95,-30,33}, -{95,-30,34}, -{95,-30,35}, -{95,-30,36}, -{95,-30,37}, -{95,-30,38}, -{95,-30,39}, -{95,-30,40}, -{95,-30,41}, -{95,-30,42}, -{95,-30,43}, -{95,-30,44}, -{95,-30,45}, -{95,-30,46}, -{95,-30,47}, -{95,-30,48}, -{95,-30,49}, -{95,-30,50}, -{95,-30,51}, -{95,-30,52}, -{95,-30,53}, -{95,-30,54}, -{95,-30,55}, -{95,-30,56}, -{95,-30,57}, -{95,-30,58}, -{95,-30,59}, -{95,-30,60}, -{95,-30,61}, -{95,-30,62}, -{95,-30,63}, -{95,-30,64}, -{95,-30,65}, -{95,-30,66}, -{95,-30,67}, -{95,-30,68}, -{95,-30,69}, -{95,-30,70}, -{95,-30,71}, -{95,-30,72}, -{95,-30,73}, -{95,-30,74}, -{95,-30,75}, -{95,-30,76}, -{95,-30,77}, -{95,-30,78}, -{95,-30,79}, -{95,-30,80}, -{95,-30,81}, -{95,-30,82}, -{95,-30,83}, -{95,-30,84}, -{95,-30,85}, -{95,-30,86}, -{95,-30,87}, -{95,-30,88}, -{95,-30,89}, -{95,-30,90}, -{95,-30,91}, -{95,-30,92}, -{95,-29,23}, -{95,-29,24}, -{95,-29,25}, -{95,-29,26}, -{95,-29,27}, -{95,-29,28}, -{95,-29,29}, -{95,-29,30}, -{95,-29,31}, -{95,-29,32}, -{95,-29,33}, -{95,-29,34}, -{95,-29,35}, -{95,-29,36}, -{95,-29,37}, -{95,-29,38}, -{95,-29,39}, -{95,-29,40}, -{95,-29,41}, -{95,-29,42}, -{95,-29,43}, -{95,-29,44}, -{95,-29,45}, -{95,-29,46}, -{95,-29,47}, -{95,-29,48}, -{95,-29,49}, -{95,-29,50}, -{95,-29,51}, -{95,-29,52}, -{95,-29,53}, -{95,-29,54}, -{95,-29,55}, -{95,-29,56}, -{95,-29,57}, -{95,-29,58}, -{95,-29,59}, -{95,-29,60}, -{95,-29,61}, -{95,-29,62}, -{95,-29,63}, -{95,-29,64}, -{95,-29,65}, -{95,-29,66}, -{95,-29,67}, -{95,-29,68}, -{95,-29,69}, -{95,-29,70}, -{95,-29,71}, -{95,-29,72}, -{95,-29,73}, -{95,-29,74}, -{95,-29,75}, -{95,-29,76}, -{95,-29,77}, -{95,-29,78}, -{95,-29,79}, -{95,-29,80}, -{95,-29,81}, -{95,-29,82}, -{95,-29,83}, -{95,-29,84}, -{95,-29,85}, -{95,-29,86}, -{95,-29,87}, -{95,-29,88}, -{95,-29,89}, -{95,-29,90}, -{95,-29,91}, -{95,-29,92}, -{95,-28,15}, -{95,-28,16}, -{95,-28,17}, -{95,-28,18}, -{95,-28,19}, -{95,-28,20}, -{95,-28,21}, -{95,-28,22}, -{95,-28,23}, -{95,-28,24}, -{95,-28,25}, -{95,-28,26}, -{95,-28,27}, -{95,-28,28}, -{95,-28,29}, -{95,-28,30}, -{95,-28,31}, -{95,-28,32}, -{95,-28,33}, -{95,-28,34}, -{95,-28,35}, -{95,-28,36}, -{95,-28,37}, -{95,-28,38}, -{95,-28,39}, -{95,-28,40}, -{95,-28,41}, -{95,-28,42}, -{95,-28,43}, -{95,-28,44}, -{95,-28,45}, -{95,-28,46}, -{95,-28,47}, -{95,-28,48}, -{95,-28,49}, -{95,-28,50}, -{95,-28,51}, -{95,-28,52}, -{95,-28,53}, -{95,-28,54}, -{95,-28,55}, -{95,-28,56}, -{95,-28,57}, -{95,-28,58}, -{95,-28,59}, -{95,-28,60}, -{95,-28,61}, -{95,-28,62}, -{95,-28,63}, -{95,-28,64}, -{95,-28,65}, -{95,-28,66}, -{95,-28,67}, -{95,-28,68}, -{95,-28,69}, -{95,-28,70}, -{95,-28,71}, -{95,-28,72}, -{95,-28,73}, -{95,-28,74}, -{95,-28,75}, -{95,-28,76}, -{95,-28,77}, -{95,-28,78}, -{95,-28,79}, -{95,-28,80}, -{95,-28,81}, -{95,-28,82}, -{95,-28,83}, -{95,-28,84}, -{95,-28,85}, -{95,-28,86}, -{95,-28,87}, -{95,-28,88}, -{95,-28,89}, -{95,-28,90}, -{95,-28,91}, -{95,-28,92}, -{95,-27,7}, -{95,-27,8}, -{95,-27,9}, -{95,-27,10}, -{95,-27,11}, -{95,-27,12}, -{95,-27,13}, -{95,-27,14}, -{95,-27,15}, -{95,-27,16}, -{95,-27,17}, -{95,-27,18}, -{95,-27,19}, -{95,-27,20}, -{95,-27,21}, -{95,-27,22}, -{95,-27,23}, -{95,-27,24}, -{95,-27,25}, -{95,-27,26}, -{95,-27,27}, -{95,-27,28}, -{95,-27,29}, -{95,-27,30}, -{95,-27,31}, -{95,-27,32}, -{95,-27,33}, -{95,-27,34}, -{95,-27,35}, -{95,-27,36}, -{95,-27,37}, -{95,-27,38}, -{95,-27,39}, -{95,-27,40}, -{95,-27,41}, -{95,-27,42}, -{95,-27,43}, -{95,-27,44}, -{95,-27,45}, -{95,-27,46}, -{95,-27,47}, -{95,-27,48}, -{95,-27,49}, -{95,-27,50}, -{95,-27,51}, -{95,-27,52}, -{95,-27,53}, -{95,-27,54}, -{95,-27,55}, -{95,-27,56}, -{95,-27,57}, -{95,-27,58}, -{95,-27,59}, -{95,-27,60}, -{95,-27,61}, -{95,-27,62}, -{95,-27,63}, -{95,-27,64}, -{95,-27,65}, -{95,-27,66}, -{95,-27,67}, -{95,-27,68}, -{95,-27,69}, -{95,-27,70}, -{95,-27,71}, -{95,-27,72}, -{95,-27,73}, -{95,-27,74}, -{95,-27,75}, -{95,-27,76}, -{95,-27,77}, -{95,-27,78}, -{95,-27,79}, -{95,-27,80}, -{95,-27,81}, -{95,-27,82}, -{95,-27,83}, -{95,-27,84}, -{95,-27,85}, -{95,-27,86}, -{95,-27,87}, -{95,-27,88}, -{95,-27,89}, -{95,-27,90}, -{95,-27,91}, -{95,-27,92}, -{95,-26,-1}, -{95,-26,0}, -{95,-26,1}, -{95,-26,2}, -{95,-26,3}, -{95,-26,4}, -{95,-26,5}, -{95,-26,6}, -{95,-26,7}, -{95,-26,8}, -{95,-26,9}, -{95,-26,10}, -{95,-26,11}, -{95,-26,12}, -{95,-26,13}, -{95,-26,14}, -{95,-26,15}, -{95,-26,16}, -{95,-26,17}, -{95,-26,18}, -{95,-26,19}, -{95,-26,20}, -{95,-26,21}, -{95,-26,22}, -{95,-26,23}, -{95,-26,24}, -{95,-26,25}, -{95,-26,26}, -{95,-26,27}, -{95,-26,28}, -{95,-26,29}, -{95,-26,30}, -{95,-26,31}, -{95,-26,32}, -{95,-26,33}, -{95,-26,34}, -{95,-26,35}, -{95,-26,36}, -{95,-26,37}, -{95,-26,38}, -{95,-26,39}, -{95,-26,40}, -{95,-26,41}, -{95,-26,42}, -{95,-26,43}, -{95,-26,44}, -{95,-26,45}, -{95,-26,46}, -{95,-26,47}, -{95,-26,48}, -{95,-26,49}, -{95,-26,50}, -{95,-26,51}, -{95,-26,52}, -{95,-26,53}, -{95,-26,54}, -{95,-26,55}, -{95,-26,56}, -{95,-26,57}, -{95,-26,58}, -{95,-26,59}, -{95,-26,60}, -{95,-26,61}, -{95,-26,62}, -{95,-26,63}, -{95,-26,64}, -{95,-26,65}, -{95,-26,66}, -{95,-26,67}, -{95,-26,68}, -{95,-26,69}, -{95,-26,70}, -{95,-26,71}, -{95,-26,72}, -{95,-26,73}, -{95,-26,74}, -{95,-26,75}, -{95,-26,76}, -{95,-26,77}, -{95,-26,78}, -{95,-26,79}, -{95,-26,80}, -{95,-26,81}, -{95,-26,82}, -{95,-26,83}, -{95,-26,84}, -{95,-26,85}, -{95,-26,86}, -{95,-26,87}, -{95,-26,88}, -{95,-26,89}, -{95,-26,90}, -{95,-26,91}, -{95,-26,92}, -{95,-25,-8}, -{95,-25,-7}, -{95,-25,-6}, -{95,-25,-5}, -{95,-25,-4}, -{95,-25,-3}, -{95,-25,-2}, -{95,-25,-1}, -{95,-25,0}, -{95,-25,1}, -{95,-25,2}, -{95,-25,3}, -{95,-25,4}, -{95,-25,5}, -{95,-25,6}, -{95,-25,7}, -{95,-25,8}, -{95,-25,9}, -{95,-25,10}, -{95,-25,11}, -{95,-25,12}, -{95,-25,13}, -{95,-25,14}, -{95,-25,15}, -{95,-25,16}, -{95,-25,17}, -{95,-25,18}, -{95,-25,19}, -{95,-25,20}, -{95,-25,21}, -{95,-25,22}, -{95,-25,23}, -{95,-25,24}, -{95,-25,25}, -{95,-25,26}, -{95,-25,27}, -{95,-25,28}, -{95,-25,29}, -{95,-25,30}, -{95,-25,31}, -{95,-25,32}, -{95,-25,33}, -{95,-25,34}, -{95,-25,35}, -{95,-25,36}, -{95,-25,37}, -{95,-25,38}, -{95,-25,39}, -{95,-25,40}, -{95,-25,41}, -{95,-25,42}, -{95,-25,43}, -{95,-25,44}, -{95,-25,45}, -{95,-25,46}, -{95,-25,47}, -{95,-25,48}, -{95,-25,49}, -{95,-25,50}, -{95,-25,51}, -{95,-25,52}, -{95,-25,53}, -{95,-25,54}, -{95,-25,55}, -{95,-25,56}, -{95,-25,57}, -{95,-25,58}, -{95,-25,59}, -{95,-25,60}, -{95,-25,61}, -{95,-25,62}, -{95,-25,63}, -{95,-25,64}, -{95,-25,65}, -{95,-25,66}, -{95,-25,67}, -{95,-25,68}, -{95,-25,69}, -{95,-25,70}, -{95,-25,71}, -{95,-25,72}, -{95,-25,73}, -{95,-25,74}, -{95,-25,75}, -{95,-25,76}, -{95,-25,77}, -{95,-25,78}, -{95,-25,79}, -{95,-25,80}, -{95,-25,81}, -{95,-25,82}, -{95,-25,83}, -{95,-25,84}, -{95,-25,85}, -{95,-25,86}, -{95,-25,87}, -{95,-25,88}, -{95,-25,89}, -{95,-25,90}, -{95,-25,91}, -{95,-25,92}, -{95,-24,-8}, -{95,-24,-7}, -{95,-24,-6}, -{95,-24,-5}, -{95,-24,-4}, -{95,-24,-3}, -{95,-24,-2}, -{95,-24,-1}, -{95,-24,0}, -{95,-24,1}, -{95,-24,2}, -{95,-24,3}, -{95,-24,4}, -{95,-24,5}, -{95,-24,6}, -{95,-24,7}, -{95,-24,8}, -{95,-24,9}, -{95,-24,10}, -{95,-24,11}, -{95,-24,12}, -{95,-24,13}, -{95,-24,14}, -{95,-24,15}, -{95,-24,16}, -{95,-24,17}, -{95,-24,18}, -{95,-24,19}, -{95,-24,20}, -{95,-24,21}, -{95,-24,22}, -{95,-24,23}, -{95,-24,24}, -{95,-24,25}, -{95,-24,26}, -{95,-24,27}, -{95,-24,28}, -{95,-24,29}, -{95,-24,30}, -{95,-24,31}, -{95,-24,32}, -{95,-24,33}, -{95,-24,34}, -{95,-24,35}, -{95,-24,36}, -{95,-24,37}, -{95,-24,38}, -{95,-24,39}, -{95,-24,40}, -{95,-24,41}, -{95,-24,42}, -{95,-24,43}, -{95,-24,44}, -{95,-24,45}, -{95,-24,46}, -{95,-24,47}, -{95,-24,48}, -{95,-24,49}, -{95,-24,50}, -{95,-24,51}, -{95,-24,52}, -{95,-24,53}, -{95,-24,54}, -{95,-24,55}, -{95,-24,56}, -{95,-24,57}, -{95,-24,58}, -{95,-24,59}, -{95,-24,60}, -{95,-24,61}, -{95,-24,62}, -{95,-24,63}, -{95,-24,64}, -{95,-24,65}, -{95,-24,66}, -{95,-24,67}, -{95,-24,68}, -{95,-24,69}, -{95,-24,70}, -{95,-24,71}, -{95,-24,72}, -{95,-24,73}, -{95,-24,74}, -{95,-24,75}, -{95,-24,76}, -{95,-24,77}, -{95,-24,78}, -{95,-24,79}, -{95,-24,80}, -{95,-24,81}, -{95,-24,82}, -{95,-24,83}, -{95,-24,84}, -{95,-24,85}, -{95,-24,86}, -{95,-24,87}, -{95,-24,88}, -{95,-24,89}, -{95,-24,90}, -{95,-24,91}, -{95,-24,92}, -{95,-23,-8}, -{95,-23,-7}, -{95,-23,-6}, -{95,-23,-5}, -{95,-23,-4}, -{95,-23,-3}, -{95,-23,-2}, -{95,-23,-1}, -{95,-23,0}, -{95,-23,1}, -{95,-23,2}, -{95,-23,3}, -{95,-23,4}, -{95,-23,5}, -{95,-23,6}, -{95,-23,7}, -{95,-23,8}, -{95,-23,9}, -{95,-23,10}, -{95,-23,11}, -{95,-23,12}, -{95,-23,13}, -{95,-23,14}, -{95,-23,15}, -{95,-23,16}, -{95,-23,17}, -{95,-23,18}, -{95,-23,19}, -{95,-23,20}, -{95,-23,21}, -{95,-23,22}, -{95,-23,23}, -{95,-23,24}, -{95,-23,25}, -{95,-23,26}, -{95,-23,27}, -{95,-23,28}, -{95,-23,29}, -{95,-23,30}, -{95,-23,31}, -{95,-23,32}, -{95,-23,33}, -{95,-23,34}, -{95,-23,35}, -{95,-23,36}, -{95,-23,37}, -{95,-23,38}, -{95,-23,39}, -{95,-23,40}, -{95,-23,41}, -{95,-23,42}, -{95,-23,43}, -{95,-23,44}, -{95,-23,45}, -{95,-23,46}, -{95,-23,47}, -{95,-23,48}, -{95,-23,49}, -{95,-23,50}, -{95,-23,51}, -{95,-23,52}, -{95,-23,53}, -{95,-23,54}, -{95,-23,55}, -{95,-23,56}, -{95,-23,57}, -{95,-23,58}, -{95,-23,59}, -{95,-23,60}, -{95,-23,61}, -{95,-23,62}, -{95,-23,63}, -{95,-23,64}, -{95,-23,65}, -{95,-23,66}, -{95,-23,67}, -{95,-23,68}, -{95,-23,69}, -{95,-23,70}, -{95,-23,71}, -{95,-23,72}, -{95,-23,73}, -{95,-23,74}, -{95,-23,75}, -{95,-23,76}, -{95,-23,77}, -{95,-23,78}, -{95,-23,79}, -{95,-23,80}, -{95,-23,81}, -{95,-23,82}, -{95,-23,83}, -{95,-23,84}, -{95,-23,85}, -{95,-23,86}, -{95,-23,87}, -{95,-23,88}, -{95,-23,89}, -{95,-23,90}, -{95,-23,91}, -{95,-23,92}, -{95,-22,-8}, -{95,-22,-7}, -{95,-22,-6}, -{95,-22,-5}, -{95,-22,-4}, -{95,-22,-3}, -{95,-22,-2}, -{95,-22,-1}, -{95,-22,0}, -{95,-22,1}, -{95,-22,2}, -{95,-22,3}, -{95,-22,4}, -{95,-22,5}, -{95,-22,6}, -{95,-22,7}, -{95,-22,8}, -{95,-22,9}, -{95,-22,10}, -{95,-22,11}, -{95,-22,12}, -{95,-22,13}, -{95,-22,14}, -{95,-22,15}, -{95,-22,16}, -{95,-22,17}, -{95,-22,18}, -{95,-22,19}, -{95,-22,20}, -{95,-22,21}, -{95,-22,22}, -{95,-22,23}, -{95,-22,24}, -{95,-22,25}, -{95,-22,26}, -{95,-22,27}, -{95,-22,28}, -{95,-22,29}, -{95,-22,30}, -{95,-22,31}, -{95,-22,32}, -{95,-22,33}, -{95,-22,34}, -{95,-22,35}, -{95,-22,36}, -{95,-22,37}, -{95,-22,38}, -{95,-22,39}, -{95,-22,40}, -{95,-22,41}, -{95,-22,42}, -{95,-22,43}, -{95,-22,44}, -{95,-22,45}, -{95,-22,46}, -{95,-22,47}, -{95,-22,48}, -{95,-22,49}, -{95,-22,50}, -{95,-22,51}, -{95,-22,52}, -{95,-22,53}, -{95,-22,54}, -{95,-22,55}, -{95,-22,56}, -{95,-22,57}, -{95,-22,58}, -{95,-22,59}, -{95,-22,60}, -{95,-22,61}, -{95,-22,62}, -{95,-22,63}, -{95,-22,64}, -{95,-22,65}, -{95,-22,66}, -{95,-22,67}, -{95,-22,68}, -{95,-22,69}, -{95,-22,70}, -{95,-22,71}, -{95,-22,72}, -{95,-22,73}, -{95,-22,74}, -{95,-22,75}, -{95,-22,76}, -{95,-22,77}, -{95,-22,78}, -{95,-22,79}, -{95,-22,80}, -{95,-22,81}, -{95,-22,82}, -{95,-22,83}, -{95,-22,84}, -{95,-22,85}, -{95,-22,86}, -{95,-22,87}, -{95,-22,88}, -{95,-22,89}, -{95,-22,90}, -{95,-22,91}, -{95,-22,92}, -{95,-21,-8}, -{95,-21,-7}, -{95,-21,-6}, -{95,-21,-5}, -{95,-21,-4}, -{95,-21,-3}, -{95,-21,-2}, -{95,-21,-1}, -{95,-21,0}, -{95,-21,1}, -{95,-21,2}, -{95,-21,3}, -{95,-21,4}, -{95,-21,5}, -{95,-21,6}, -{95,-21,7}, -{95,-21,8}, -{95,-21,9}, -{95,-21,10}, -{95,-21,11}, -{95,-21,12}, -{95,-21,13}, -{95,-21,14}, -{95,-21,15}, -{95,-21,16}, -{95,-21,17}, -{95,-21,18}, -{95,-21,19}, -{95,-21,20}, -{95,-21,21}, -{95,-21,22}, -{95,-21,23}, -{95,-21,24}, -{95,-21,25}, -{95,-21,26}, -{95,-21,27}, -{95,-21,28}, -{95,-21,29}, -{95,-21,30}, -{95,-21,31}, -{95,-21,32}, -{95,-21,33}, -{95,-21,34}, -{95,-21,35}, -{95,-21,36}, -{95,-21,37}, -{95,-21,38}, -{95,-21,39}, -{95,-21,40}, -{95,-21,41}, -{95,-21,42}, -{95,-21,43}, -{95,-21,44}, -{95,-21,45}, -{95,-21,46}, -{95,-21,47}, -{95,-21,48}, -{95,-21,49}, -{95,-21,50}, -{95,-21,51}, -{95,-21,52}, -{95,-21,53}, -{95,-21,54}, -{95,-21,55}, -{95,-21,56}, -{95,-21,57}, -{95,-21,58}, -{95,-21,59}, -{95,-21,60}, -{95,-21,61}, -{95,-21,62}, -{95,-21,63}, -{95,-21,64}, -{95,-21,65}, -{95,-21,66}, -{95,-21,67}, -{95,-21,68}, -{95,-21,69}, -{95,-21,70}, -{95,-21,71}, -{95,-21,72}, -{95,-21,73}, -{95,-21,74}, -{95,-21,75}, -{95,-21,76}, -{95,-21,77}, -{95,-21,78}, -{95,-21,79}, -{95,-21,80}, -{95,-21,81}, -{95,-21,82}, -{95,-21,83}, -{95,-21,84}, -{95,-21,85}, -{95,-21,86}, -{95,-21,87}, -{95,-21,88}, -{95,-21,89}, -{95,-21,90}, -{95,-21,91}, -{95,-21,92}, -{95,-20,-8}, -{95,-20,-7}, -{95,-20,-6}, -{95,-20,-5}, -{95,-20,-4}, -{95,-20,-3}, -{95,-20,-2}, -{95,-20,-1}, -{95,-20,0}, -{95,-20,1}, -{95,-20,2}, -{95,-20,3}, -{95,-20,4}, -{95,-20,5}, -{95,-20,6}, -{95,-20,7}, -{95,-20,8}, -{95,-20,9}, -{95,-20,10}, -{95,-20,11}, -{95,-20,12}, -{95,-20,13}, -{95,-20,14}, -{95,-20,15}, -{95,-20,16}, -{95,-20,17}, -{95,-20,18}, -{95,-20,19}, -{95,-20,20}, -{95,-20,21}, -{95,-20,22}, -{95,-20,23}, -{95,-20,24}, -{95,-20,25}, -{95,-20,26}, -{95,-20,27}, -{95,-20,28}, -{95,-20,29}, -{95,-20,30}, -{95,-20,31}, -{95,-20,32}, -{95,-20,33}, -{95,-20,34}, -{95,-20,35}, -{95,-20,36}, -{95,-20,37}, -{95,-20,38}, -{95,-20,39}, -{95,-20,40}, -{95,-20,41}, -{95,-20,42}, -{95,-20,43}, -{95,-20,44}, -{95,-20,45}, -{95,-20,46}, -{95,-20,47}, -{95,-20,48}, -{95,-20,49}, -{95,-20,50}, -{95,-20,51}, -{95,-20,52}, -{95,-20,53}, -{95,-20,54}, -{95,-20,55}, -{95,-20,56}, -{95,-20,57}, -{95,-20,58}, -{95,-20,59}, -{95,-20,60}, -{95,-20,61}, -{95,-20,62}, -{95,-20,63}, -{95,-20,64}, -{95,-20,65}, -{95,-20,66}, -{95,-20,67}, -{95,-20,68}, -{95,-20,69}, -{95,-20,70}, -{95,-20,71}, -{95,-20,72}, -{95,-20,73}, -{95,-20,74}, -{95,-20,75}, -{95,-20,76}, -{95,-20,77}, -{95,-20,78}, -{95,-20,79}, -{95,-20,80}, -{95,-20,81}, -{95,-20,82}, -{95,-20,83}, -{95,-20,84}, -{95,-20,85}, -{95,-20,86}, -{95,-20,87}, -{95,-20,88}, -{95,-20,89}, -{95,-20,90}, -{95,-20,91}, -{95,-20,92}, -{95,-19,-7}, -{95,-19,-6}, -{95,-19,-5}, -{95,-19,-4}, -{95,-19,-3}, -{95,-19,-2}, -{95,-19,-1}, -{95,-19,0}, -{95,-19,1}, -{95,-19,2}, -{95,-19,3}, -{95,-19,4}, -{95,-19,5}, -{95,-19,6}, -{95,-19,7}, -{95,-19,8}, -{95,-19,9}, -{95,-19,10}, -{95,-19,11}, -{95,-19,12}, -{95,-19,13}, -{95,-19,14}, -{95,-19,15}, -{95,-19,16}, -{95,-19,17}, -{95,-19,18}, -{95,-19,19}, -{95,-19,20}, -{95,-19,21}, -{95,-19,22}, -{95,-19,23}, -{95,-19,24}, -{95,-19,25}, -{95,-19,26}, -{95,-19,27}, -{95,-19,28}, -{95,-19,29}, -{95,-19,30}, -{95,-19,31}, -{95,-19,32}, -{95,-19,33}, -{95,-19,34}, -{95,-19,35}, -{95,-19,36}, -{95,-19,37}, -{95,-19,38}, -{95,-19,39}, -{95,-19,40}, -{95,-19,41}, -{95,-19,42}, -{95,-19,43}, -{95,-19,44}, -{95,-19,45}, -{95,-19,46}, -{95,-19,47}, -{95,-19,48}, -{95,-19,49}, -{95,-19,50}, -{95,-19,51}, -{95,-19,52}, -{95,-19,53}, -{95,-19,54}, -{95,-19,55}, -{95,-19,56}, -{95,-19,57}, -{95,-19,58}, -{95,-19,59}, -{95,-19,60}, -{95,-19,61}, -{95,-19,62}, -{95,-19,63}, -{95,-19,64}, -{95,-19,65}, -{95,-19,66}, -{95,-19,67}, -{95,-19,68}, -{95,-19,69}, -{95,-19,70}, -{95,-19,71}, -{95,-19,72}, -{95,-19,73}, -{95,-19,74}, -{95,-19,75}, -{95,-19,76}, -{95,-19,77}, -{95,-19,78}, -{95,-19,79}, -{95,-19,80}, -{95,-19,81}, -{95,-19,82}, -{95,-19,83}, -{95,-19,84}, -{95,-19,85}, -{95,-19,86}, -{95,-19,87}, -{95,-19,88}, -{95,-19,89}, -{95,-19,90}, -{95,-19,91}, -{95,-19,92}, -{95,-19,93}, -{95,-18,-7}, -{95,-18,-6}, -{95,-18,-5}, -{95,-18,-4}, -{95,-18,-3}, -{95,-18,-2}, -{95,-18,-1}, -{95,-18,0}, -{95,-18,1}, -{95,-18,2}, -{95,-18,3}, -{95,-18,4}, -{95,-18,5}, -{95,-18,6}, -{95,-18,7}, -{95,-18,8}, -{95,-18,9}, -{95,-18,10}, -{95,-18,11}, -{95,-18,12}, -{95,-18,13}, -{95,-18,14}, -{95,-18,15}, -{95,-18,16}, -{95,-18,17}, -{95,-18,18}, -{95,-18,19}, -{95,-18,20}, -{95,-18,21}, -{95,-18,22}, -{95,-18,23}, -{95,-18,24}, -{95,-18,25}, -{95,-18,26}, -{95,-18,27}, -{95,-18,28}, -{95,-18,29}, -{95,-18,30}, -{95,-18,31}, -{95,-18,32}, -{95,-18,33}, -{95,-18,34}, -{95,-18,35}, -{95,-18,36}, -{95,-18,37}, -{95,-18,38}, -{95,-18,39}, -{95,-18,40}, -{95,-18,41}, -{95,-18,42}, -{95,-18,43}, -{95,-18,44}, -{95,-18,45}, -{95,-18,46}, -{95,-18,47}, -{95,-18,48}, -{95,-18,49}, -{95,-18,50}, -{95,-18,51}, -{95,-18,52}, -{95,-18,53}, -{95,-18,54}, -{95,-18,55}, -{95,-18,56}, -{95,-18,57}, -{95,-18,58}, -{95,-18,59}, -{95,-18,60}, -{95,-18,61}, -{95,-18,62}, -{95,-18,63}, -{95,-18,64}, -{95,-18,65}, -{95,-18,66}, -{95,-18,67}, -{95,-18,68}, -{95,-18,69}, -{95,-18,70}, -{95,-18,71}, -{95,-18,72}, -{95,-18,73}, -{95,-18,74}, -{95,-18,75}, -{95,-18,76}, -{95,-18,77}, -{95,-18,78}, -{95,-18,79}, -{95,-18,80}, -{95,-18,81}, -{95,-18,82}, -{95,-18,83}, -{95,-18,84}, -{95,-18,85}, -{95,-18,86}, -{95,-18,87}, -{95,-18,88}, -{95,-18,89}, -{95,-18,90}, -{95,-18,91}, -{95,-18,92}, -{95,-18,93}, -{95,-17,-7}, -{95,-17,-6}, -{95,-17,-5}, -{95,-17,-4}, -{95,-17,-3}, -{95,-17,-2}, -{95,-17,-1}, -{95,-17,0}, -{95,-17,1}, -{95,-17,2}, -{95,-17,3}, -{95,-17,4}, -{95,-17,5}, -{95,-17,6}, -{95,-17,7}, -{95,-17,8}, -{95,-17,9}, -{95,-17,10}, -{95,-17,11}, -{95,-17,12}, -{95,-17,13}, -{95,-17,14}, -{95,-17,15}, -{95,-17,16}, -{95,-17,17}, -{95,-17,18}, -{95,-17,19}, -{95,-17,20}, -{95,-17,21}, -{95,-17,22}, -{95,-17,23}, -{95,-17,24}, -{95,-17,25}, -{95,-17,26}, -{95,-17,27}, -{95,-17,28}, -{95,-17,29}, -{95,-17,30}, -{95,-17,31}, -{95,-17,32}, -{95,-17,33}, -{95,-17,34}, -{95,-17,35}, -{95,-17,36}, -{95,-17,37}, -{95,-17,38}, -{95,-17,39}, -{95,-17,40}, -{95,-17,41}, -{95,-17,42}, -{95,-17,43}, -{95,-17,44}, -{95,-17,45}, -{95,-17,46}, -{95,-17,47}, -{95,-17,48}, -{95,-17,49}, -{95,-17,50}, -{95,-17,51}, -{95,-17,52}, -{95,-17,53}, -{95,-17,54}, -{95,-17,55}, -{95,-17,56}, -{95,-17,57}, -{95,-17,58}, -{95,-17,59}, -{95,-17,60}, -{95,-17,61}, -{95,-17,62}, -{95,-17,63}, -{95,-17,64}, -{95,-17,65}, -{95,-17,66}, -{95,-17,67}, -{95,-17,68}, -{95,-17,69}, -{95,-17,70}, -{95,-17,71}, -{95,-17,72}, -{95,-17,73}, -{95,-17,74}, -{95,-17,75}, -{95,-17,76}, -{95,-17,77}, -{95,-17,78}, -{95,-17,79}, -{95,-17,80}, -{95,-17,81}, -{95,-17,82}, -{95,-17,83}, -{95,-17,84}, -{95,-17,85}, -{95,-17,86}, -{95,-17,87}, -{95,-17,88}, -{95,-17,89}, -{95,-16,-7}, -{95,-16,-6}, -{95,-16,-5}, -{95,-16,-4}, -{95,-16,-3}, -{95,-16,-2}, -{95,-16,-1}, -{95,-16,0}, -{95,-16,1}, -{95,-16,2}, -{95,-16,3}, -{95,-16,4}, -{95,-16,5}, -{95,-16,6}, -{95,-16,7}, -{95,-16,8}, -{95,-16,9}, -{95,-16,10}, -{95,-16,11}, -{95,-16,12}, -{95,-16,13}, -{95,-16,14}, -{95,-16,15}, -{95,-16,16}, -{95,-16,17}, -{95,-16,18}, -{95,-16,19}, -{95,-16,20}, -{95,-16,21}, -{95,-16,22}, -{95,-16,23}, -{95,-16,24}, -{95,-16,25}, -{95,-16,26}, -{95,-16,27}, -{95,-16,28}, -{95,-16,29}, -{95,-16,30}, -{95,-16,31}, -{95,-16,32}, -{95,-16,33}, -{95,-16,34}, -{95,-16,35}, -{95,-16,36}, -{95,-16,37}, -{95,-16,38}, -{95,-16,39}, -{95,-16,40}, -{95,-16,41}, -{95,-16,42}, -{95,-16,43}, -{95,-16,44}, -{95,-16,45}, -{95,-16,46}, -{95,-16,47}, -{95,-16,48}, -{95,-16,49}, -{95,-16,50}, -{95,-16,51}, -{95,-16,52}, -{95,-16,53}, -{95,-16,54}, -{95,-16,55}, -{95,-16,56}, -{95,-16,57}, -{95,-16,58}, -{95,-16,59}, -{95,-16,60}, -{95,-16,61}, -{95,-16,62}, -{95,-16,63}, -{95,-16,64}, -{95,-16,65}, -{95,-16,66}, -{95,-16,67}, -{95,-16,68}, -{95,-16,69}, -{95,-16,70}, -{95,-16,71}, -{95,-16,72}, -{95,-16,73}, -{95,-16,74}, -{95,-16,75}, -{95,-16,76}, -{95,-16,77}, -{95,-16,78}, -{95,-16,79}, -{95,-16,80}, -{95,-16,81}, -{95,-16,82}, -{95,-15,-7}, -{95,-15,-6}, -{95,-15,-5}, -{95,-15,-4}, -{95,-15,-3}, -{95,-15,-2}, -{95,-15,-1}, -{95,-15,0}, -{95,-15,1}, -{95,-15,2}, -{95,-15,3}, -{95,-15,4}, -{95,-15,5}, -{95,-15,6}, -{95,-15,7}, -{95,-15,8}, -{95,-15,9}, -{95,-15,10}, -{95,-15,11}, -{95,-15,12}, -{95,-15,13}, -{95,-15,14}, -{95,-15,15}, -{95,-15,16}, -{95,-15,17}, -{95,-15,18}, -{95,-15,19}, -{95,-15,20}, -{95,-15,21}, -{95,-15,22}, -{95,-15,23}, -{95,-15,24}, -{95,-15,25}, -{95,-15,26}, -{95,-15,27}, -{95,-15,28}, -{95,-15,29}, -{95,-15,30}, -{95,-15,31}, -{95,-15,32}, -{95,-15,33}, -{95,-15,34}, -{95,-15,35}, -{95,-15,36}, -{95,-15,37}, -{95,-15,38}, -{95,-15,39}, -{95,-15,40}, -{95,-15,41}, -{95,-15,42}, -{95,-15,43}, -{95,-15,44}, -{95,-15,45}, -{95,-15,46}, -{95,-15,47}, -{95,-15,48}, -{95,-15,49}, -{95,-15,50}, -{95,-15,51}, -{95,-15,52}, -{95,-15,53}, -{95,-15,54}, -{95,-15,55}, -{95,-15,56}, -{95,-15,57}, -{95,-15,58}, -{95,-15,59}, -{95,-15,60}, -{95,-15,61}, -{95,-15,62}, -{95,-15,63}, -{95,-15,64}, -{95,-15,65}, -{95,-15,66}, -{95,-15,67}, -{95,-15,68}, -{95,-15,69}, -{95,-15,70}, -{95,-15,71}, -{95,-15,72}, -{95,-15,73}, -{95,-15,74}, -{95,-15,75}, -{95,-15,76}, -{95,-14,-7}, -{95,-14,-6}, -{95,-14,-5}, -{95,-14,-4}, -{95,-14,-3}, -{95,-14,-2}, -{95,-14,-1}, -{95,-14,0}, -{95,-14,1}, -{95,-14,2}, -{95,-14,3}, -{95,-14,4}, -{95,-14,5}, -{95,-14,6}, -{95,-14,7}, -{95,-14,8}, -{95,-14,9}, -{95,-14,10}, -{95,-14,11}, -{95,-14,12}, -{95,-14,13}, -{95,-14,14}, -{95,-14,15}, -{95,-14,16}, -{95,-14,17}, -{95,-14,18}, -{95,-14,19}, -{95,-14,20}, -{95,-14,21}, -{95,-14,22}, -{95,-14,23}, -{95,-14,24}, -{95,-14,25}, -{95,-14,26}, -{95,-14,27}, -{95,-14,28}, -{95,-14,29}, -{95,-14,30}, -{95,-14,31}, -{95,-14,32}, -{95,-14,33}, -{95,-14,34}, -{95,-14,35}, -{95,-14,36}, -{95,-14,37}, -{95,-14,38}, -{95,-14,39}, -{95,-14,40}, -{95,-14,41}, -{95,-14,42}, -{95,-14,43}, -{95,-14,44}, -{95,-14,45}, -{95,-14,46}, -{95,-14,47}, -{95,-14,48}, -{95,-14,49}, -{95,-14,50}, -{95,-14,51}, -{95,-14,52}, -{95,-14,53}, -{95,-14,54}, -{95,-14,55}, -{95,-14,56}, -{95,-14,57}, -{95,-14,58}, -{95,-14,59}, -{95,-14,60}, -{95,-14,61}, -{95,-14,62}, -{95,-14,63}, -{95,-14,64}, -{95,-14,65}, -{95,-14,66}, -{95,-14,67}, -{95,-14,68}, -{95,-14,69}, -{95,-14,70}, -{95,-13,-7}, -{95,-13,-6}, -{95,-13,-5}, -{95,-13,-4}, -{95,-13,-3}, -{95,-13,-2}, -{95,-13,-1}, -{95,-13,0}, -{95,-13,1}, -{95,-13,2}, -{95,-13,3}, -{95,-13,4}, -{95,-13,5}, -{95,-13,6}, -{95,-13,7}, -{95,-13,8}, -{95,-13,9}, -{95,-13,10}, -{95,-13,11}, -{95,-13,12}, -{95,-13,13}, -{95,-13,14}, -{95,-13,15}, -{95,-13,16}, -{95,-13,17}, -{95,-13,18}, -{95,-13,19}, -{95,-13,20}, -{95,-13,21}, -{95,-13,22}, -{95,-13,23}, -{95,-13,24}, -{95,-13,25}, -{95,-13,26}, -{95,-13,27}, -{95,-13,28}, -{95,-13,29}, -{95,-13,30}, -{95,-13,31}, -{95,-13,32}, -{95,-13,33}, -{95,-13,34}, -{95,-13,35}, -{95,-13,36}, -{95,-13,37}, -{95,-13,38}, -{95,-13,39}, -{95,-13,40}, -{95,-13,41}, -{95,-13,42}, -{95,-13,43}, -{95,-13,44}, -{95,-13,45}, -{95,-13,46}, -{95,-13,47}, -{95,-13,48}, -{95,-13,49}, -{95,-13,50}, -{95,-13,51}, -{95,-13,52}, -{95,-13,53}, -{95,-13,54}, -{95,-13,55}, -{95,-13,56}, -{95,-13,57}, -{95,-13,58}, -{95,-13,59}, -{95,-13,60}, -{95,-13,61}, -{95,-13,62}, -{95,-13,63}, -{95,-13,64}, -{95,-13,65}, -{95,-12,-7}, -{95,-12,-6}, -{95,-12,-5}, -{95,-12,-4}, -{95,-12,-3}, -{95,-12,-2}, -{95,-12,-1}, -{95,-12,0}, -{95,-12,1}, -{95,-12,2}, -{95,-12,3}, -{95,-12,4}, -{95,-12,5}, -{95,-12,6}, -{95,-12,7}, -{95,-12,8}, -{95,-12,9}, -{95,-12,10}, -{95,-12,11}, -{95,-12,12}, -{95,-12,13}, -{95,-12,14}, -{95,-12,15}, -{95,-12,16}, -{95,-12,17}, -{95,-12,18}, -{95,-12,19}, -{95,-12,20}, -{95,-12,21}, -{95,-12,22}, -{95,-12,23}, -{95,-12,24}, -{95,-12,25}, -{95,-12,26}, -{95,-12,27}, -{95,-12,28}, -{95,-12,29}, -{95,-12,30}, -{95,-12,31}, -{95,-12,32}, -{95,-12,33}, -{95,-12,34}, -{95,-12,35}, -{95,-12,36}, -{95,-12,37}, -{95,-12,38}, -{95,-12,39}, -{95,-12,40}, -{95,-12,41}, -{95,-12,42}, -{95,-12,43}, -{95,-12,44}, -{95,-12,45}, -{95,-12,46}, -{95,-12,47}, -{95,-12,48}, -{95,-12,49}, -{95,-12,50}, -{95,-12,51}, -{95,-12,52}, -{95,-12,53}, -{95,-12,54}, -{95,-12,55}, -{95,-12,56}, -{95,-12,57}, -{95,-12,58}, -{95,-12,59}, -{95,-12,60}, -{95,-11,-7}, -{95,-11,-6}, -{95,-11,-5}, -{95,-11,-4}, -{95,-11,-3}, -{95,-11,-2}, -{95,-11,-1}, -{95,-11,0}, -{95,-11,1}, -{95,-11,2}, -{95,-11,3}, -{95,-11,4}, -{95,-11,5}, -{95,-11,6}, -{95,-11,7}, -{95,-11,8}, -{95,-11,9}, -{95,-11,10}, -{95,-11,11}, -{95,-11,12}, -{95,-11,13}, -{95,-11,14}, -{95,-11,15}, -{95,-11,16}, -{95,-11,17}, -{95,-11,18}, -{95,-11,19}, -{95,-11,20}, -{95,-11,21}, -{95,-11,22}, -{95,-11,23}, -{95,-11,24}, -{95,-11,25}, -{95,-11,26}, -{95,-11,27}, -{95,-11,28}, -{95,-11,29}, -{95,-11,30}, -{95,-11,31}, -{95,-11,32}, -{95,-11,33}, -{95,-11,34}, -{95,-11,35}, -{95,-11,36}, -{95,-11,37}, -{95,-11,38}, -{95,-11,39}, -{95,-11,40}, -{95,-11,41}, -{95,-11,42}, -{95,-11,43}, -{95,-11,44}, -{95,-11,45}, -{95,-11,46}, -{95,-11,47}, -{95,-11,48}, -{95,-11,49}, -{95,-11,50}, -{95,-11,51}, -{95,-11,52}, -{95,-11,53}, -{95,-11,54}, -{95,-11,55}, -{95,-11,56}, -{95,-10,-7}, -{95,-10,-6}, -{95,-10,-5}, -{95,-10,-4}, -{95,-10,-3}, -{95,-10,-2}, -{95,-10,-1}, -{95,-10,0}, -{95,-10,1}, -{95,-10,2}, -{95,-10,3}, -{95,-10,4}, -{95,-10,5}, -{95,-10,6}, -{95,-10,7}, -{95,-10,8}, -{95,-10,9}, -{95,-10,10}, -{95,-10,11}, -{95,-10,12}, -{95,-10,13}, -{95,-10,14}, -{95,-10,15}, -{95,-10,16}, -{95,-10,17}, -{95,-10,18}, -{95,-10,19}, -{95,-10,20}, -{95,-10,21}, -{95,-10,22}, -{95,-10,23}, -{95,-10,24}, -{95,-10,25}, -{95,-10,26}, -{95,-10,27}, -{95,-10,28}, -{95,-10,29}, -{95,-10,30}, -{95,-10,31}, -{95,-10,32}, -{95,-10,33}, -{95,-10,34}, -{95,-10,35}, -{95,-10,36}, -{95,-10,37}, -{95,-10,38}, -{95,-10,39}, -{95,-10,40}, -{95,-10,41}, -{95,-10,42}, -{95,-10,43}, -{95,-10,44}, -{95,-10,45}, -{95,-10,46}, -{95,-10,47}, -{95,-10,48}, -{95,-10,49}, -{95,-10,50}, -{95,-10,51}, -{95,-10,52}, -{95,-9,-7}, -{95,-9,-6}, -{95,-9,-5}, -{95,-9,-4}, -{95,-9,-3}, -{95,-9,-2}, -{95,-9,-1}, -{95,-9,0}, -{95,-9,1}, -{95,-9,2}, -{95,-9,3}, -{95,-9,4}, -{95,-9,5}, -{95,-9,6}, -{95,-9,7}, -{95,-9,8}, -{95,-9,9}, -{95,-9,10}, -{95,-9,11}, -{95,-9,12}, -{95,-9,13}, -{95,-9,14}, -{95,-9,15}, -{95,-9,16}, -{95,-9,17}, -{95,-9,18}, -{95,-9,19}, -{95,-9,20}, -{95,-9,21}, -{95,-9,22}, -{95,-9,23}, -{95,-9,24}, -{95,-9,25}, -{95,-9,26}, -{95,-9,27}, -{95,-9,28}, -{95,-9,29}, -{95,-9,30}, -{95,-9,31}, -{95,-9,32}, -{95,-9,33}, -{95,-9,34}, -{95,-9,35}, -{95,-9,36}, -{95,-9,37}, -{95,-9,38}, -{95,-9,39}, -{95,-9,40}, -{95,-9,41}, -{95,-9,42}, -{95,-9,43}, -{95,-9,44}, -{95,-9,45}, -{95,-9,46}, -{95,-9,47}, -{95,-9,48}, -{95,-8,-7}, -{95,-8,-6}, -{95,-8,-5}, -{95,-8,-4}, -{95,-8,-3}, -{95,-8,-2}, -{95,-8,-1}, -{95,-8,0}, -{95,-8,1}, -{95,-8,2}, -{95,-8,3}, -{95,-8,4}, -{95,-8,5}, -{95,-8,6}, -{95,-8,7}, -{95,-8,8}, -{95,-8,9}, -{95,-8,10}, -{95,-8,11}, -{95,-8,12}, -{95,-8,13}, -{95,-8,14}, -{95,-8,15}, -{95,-8,16}, -{95,-8,17}, -{95,-8,18}, -{95,-8,19}, -{95,-8,20}, -{95,-8,21}, -{95,-8,22}, -{95,-8,23}, -{95,-8,24}, -{95,-8,25}, -{95,-8,26}, -{95,-8,27}, -{95,-8,28}, -{95,-8,29}, -{95,-8,30}, -{95,-8,31}, -{95,-8,32}, -{95,-8,33}, -{95,-8,34}, -{95,-8,35}, -{95,-8,36}, -{95,-8,37}, -{95,-8,38}, -{95,-8,39}, -{95,-8,40}, -{95,-8,41}, -{95,-8,42}, -{95,-8,43}, -{95,-8,44}, -{95,-7,-7}, -{95,-7,-6}, -{95,-7,-5}, -{95,-7,-4}, -{95,-7,-3}, -{95,-7,-2}, -{95,-7,-1}, -{95,-7,0}, -{95,-7,1}, -{95,-7,2}, -{95,-7,3}, -{95,-7,4}, -{95,-7,5}, -{95,-7,6}, -{95,-7,7}, -{95,-7,8}, -{95,-7,9}, -{95,-7,10}, -{95,-7,11}, -{95,-7,12}, -{95,-7,13}, -{95,-7,14}, -{95,-7,15}, -{95,-7,16}, -{95,-7,17}, -{95,-7,18}, -{95,-7,19}, -{95,-7,20}, -{95,-7,21}, -{95,-7,22}, -{95,-7,23}, -{95,-7,24}, -{95,-7,25}, -{95,-7,26}, -{95,-7,27}, -{95,-7,28}, -{95,-7,29}, -{95,-7,30}, -{95,-7,31}, -{95,-7,32}, -{95,-7,33}, -{95,-7,34}, -{95,-7,35}, -{95,-7,36}, -{95,-7,37}, -{95,-7,38}, -{95,-7,39}, -{95,-7,40}, -{95,-6,-7}, -{95,-6,-6}, -{95,-6,-5}, -{95,-6,-4}, -{95,-6,-3}, -{95,-6,-2}, -{95,-6,-1}, -{95,-6,0}, -{95,-6,1}, -{95,-6,2}, -{95,-6,3}, -{95,-6,4}, -{95,-6,5}, -{95,-6,6}, -{95,-6,7}, -{95,-6,8}, -{95,-6,9}, -{95,-6,10}, -{95,-6,11}, -{95,-6,12}, -{95,-6,13}, -{95,-6,14}, -{95,-6,15}, -{95,-6,16}, -{95,-6,17}, -{95,-6,18}, -{95,-6,19}, -{95,-6,20}, -{95,-6,21}, -{95,-6,22}, -{95,-6,23}, -{95,-6,24}, -{95,-6,25}, -{95,-6,26}, -{95,-6,27}, -{95,-6,28}, -{95,-6,29}, -{95,-6,30}, -{95,-6,31}, -{95,-6,32}, -{95,-6,33}, -{95,-6,34}, -{95,-6,35}, -{95,-6,36}, -{95,-6,37}, -{95,-5,-7}, -{95,-5,-6}, -{95,-5,-5}, -{95,-5,-4}, -{95,-5,-3}, -{95,-5,-2}, -{95,-5,-1}, -{95,-5,0}, -{95,-5,1}, -{95,-5,2}, -{95,-5,3}, -{95,-5,4}, -{95,-5,5}, -{95,-5,6}, -{95,-5,7}, -{95,-5,8}, -{95,-5,9}, -{95,-5,10}, -{95,-5,11}, -{95,-5,12}, -{95,-5,13}, -{95,-5,14}, -{95,-5,15}, -{95,-5,16}, -{95,-5,17}, -{95,-5,18}, -{95,-5,19}, -{95,-5,20}, -{95,-5,21}, -{95,-5,22}, -{95,-5,23}, -{95,-5,24}, -{95,-5,25}, -{95,-5,26}, -{95,-5,27}, -{95,-5,28}, -{95,-5,29}, -{95,-5,30}, -{95,-5,31}, -{95,-5,32}, -{95,-5,33}, -{95,-4,-7}, -{95,-4,-6}, -{95,-4,-5}, -{95,-4,-4}, -{95,-4,-3}, -{95,-4,-2}, -{95,-4,-1}, -{95,-4,0}, -{95,-4,1}, -{95,-4,2}, -{95,-4,3}, -{95,-4,4}, -{95,-4,5}, -{95,-4,6}, -{95,-4,7}, -{95,-4,8}, -{95,-4,9}, -{95,-4,10}, -{95,-4,11}, -{95,-4,12}, -{95,-4,13}, -{95,-4,14}, -{95,-4,15}, -{95,-4,16}, -{95,-4,17}, -{95,-4,18}, -{95,-4,19}, -{95,-4,20}, -{95,-4,21}, -{95,-4,22}, -{95,-4,23}, -{95,-4,24}, -{95,-4,25}, -{95,-4,26}, -{95,-4,27}, -{95,-4,28}, -{95,-4,29}, -{95,-4,30}, -{95,-3,-7}, -{95,-3,-6}, -{95,-3,-5}, -{95,-3,-4}, -{95,-3,-3}, -{95,-3,-2}, -{95,-3,-1}, -{95,-3,0}, -{95,-3,1}, -{95,-3,2}, -{95,-3,3}, -{95,-3,4}, -{95,-3,5}, -{95,-3,6}, -{95,-3,7}, -{95,-3,8}, -{95,-3,9}, -{95,-3,10}, -{95,-3,11}, -{95,-3,12}, -{95,-3,13}, -{95,-3,14}, -{95,-3,15}, -{95,-3,16}, -{95,-3,17}, -{95,-3,18}, -{95,-3,19}, -{95,-3,20}, -{95,-3,21}, -{95,-3,22}, -{95,-3,23}, -{95,-3,24}, -{95,-3,25}, -{95,-3,26}, -{95,-3,27}, -{95,-2,-7}, -{95,-2,-6}, -{95,-2,-5}, -{95,-2,-4}, -{95,-2,-3}, -{95,-2,-2}, -{95,-2,-1}, -{95,-2,0}, -{95,-2,1}, -{95,-2,2}, -{95,-2,3}, -{95,-2,4}, -{95,-2,5}, -{95,-2,6}, -{95,-2,7}, -{95,-2,8}, -{95,-2,9}, -{95,-2,10}, -{95,-2,11}, -{95,-2,12}, -{95,-2,13}, -{95,-2,14}, -{95,-2,15}, -{95,-2,16}, -{95,-2,17}, -{95,-2,18}, -{95,-2,19}, -{95,-2,20}, -{95,-2,21}, -{95,-2,22}, -{95,-2,23}, -{95,-2,24}, -{95,-1,-7}, -{95,-1,-6}, -{95,-1,-5}, -{95,-1,-4}, -{95,-1,-3}, -{95,-1,-2}, -{95,-1,-1}, -{95,-1,0}, -{95,-1,1}, -{95,-1,2}, -{95,-1,3}, -{95,-1,4}, -{95,-1,5}, -{95,-1,6}, -{95,-1,7}, -{95,-1,8}, -{95,-1,9}, -{95,-1,10}, -{95,-1,11}, -{95,-1,12}, -{95,-1,13}, -{95,-1,14}, -{95,-1,15}, -{95,-1,16}, -{95,-1,17}, -{95,-1,18}, -{95,-1,19}, -{95,-1,20}, -{95,-1,21}, -{95,0,-7}, -{95,0,-6}, -{95,0,-5}, -{95,0,-4}, -{95,0,-3}, -{95,0,-2}, -{95,0,-1}, -{95,0,0}, -{95,0,1}, -{95,0,2}, -{95,0,3}, -{95,0,4}, -{95,0,5}, -{95,0,6}, -{95,0,7}, -{95,0,8}, -{95,0,9}, -{95,0,10}, -{95,0,11}, -{95,0,12}, -{95,0,13}, -{95,0,14}, -{95,0,15}, -{95,0,16}, -{95,0,17}, -{95,0,18}, -{95,1,-7}, -{95,1,-6}, -{95,1,-5}, -{95,1,-4}, -{95,1,-3}, -{95,1,-2}, -{95,1,-1}, -{95,1,0}, -{95,1,1}, -{95,1,2}, -{95,1,3}, -{95,1,4}, -{95,1,5}, -{95,1,6}, -{95,1,7}, -{95,1,8}, -{95,1,9}, -{95,1,10}, -{95,1,11}, -{95,1,12}, -{95,1,13}, -{95,1,14}, -{95,1,15}, -{95,1,16}, -{95,2,-7}, -{95,2,-6}, -{95,2,-5}, -{95,2,-4}, -{95,2,-3}, -{95,2,-2}, -{95,2,-1}, -{95,2,0}, -{95,2,1}, -{95,2,2}, -{95,2,3}, -{95,2,4}, -{95,2,5}, -{95,2,6}, -{95,2,7}, -{95,2,8}, -{95,2,9}, -{95,2,10}, -{95,2,11}, -{95,2,12}, -{95,2,13}, -{95,3,-7}, -{95,3,-6}, -{95,3,-5}, -{95,3,-4}, -{95,3,-3}, -{95,3,-2}, -{95,3,-1}, -{95,3,0}, -{95,3,1}, -{95,3,2}, -{95,3,3}, -{95,3,4}, -{95,3,5}, -{95,3,6}, -{95,3,7}, -{95,3,8}, -{95,3,9}, -{95,3,10}, -{95,4,-7}, -{95,4,-6}, -{95,4,-5}, -{95,4,-4}, -{95,4,-3}, -{95,4,-2}, -{95,4,-1}, -{95,4,0}, -{95,4,1}, -{95,4,2}, -{95,4,3}, -{95,4,4}, -{95,4,5}, -{95,4,6}, -{95,4,7}, -{95,4,8}, -{95,5,-7}, -{95,5,-6}, -{95,5,-5}, -{95,5,-4}, -{95,5,-3}, -{95,5,-2}, -{95,5,-1}, -{95,5,0}, -{95,5,1}, -{95,5,2}, -{95,5,3}, -{95,5,4}, -{95,5,5}, -{95,6,-7}, -{95,6,-6}, -{95,6,-5}, -{95,6,-4}, -{95,6,-3}, -{95,6,-2}, -{95,6,-1}, -{95,6,0}, -{95,6,1}, -{95,6,2}, -{95,6,3}, -{95,7,-7}, -{95,7,-6}, -{95,7,-5}, -{95,7,-4}, -{95,7,-3}, -{95,7,-2}, -{95,7,-1}, -{95,7,0}, -{95,8,-7}, -{95,8,-6}, -{95,8,-5}, -{95,8,-4}, -{95,8,-3}, -{95,8,-2}, -{95,9,-7}, -{95,9,-6}, -{95,9,-5}, -{95,9,-4}, -{95,10,-7}, -{95,10,-6}, -{96,-28,89}, -{96,-28,90}, -{96,-28,91}, -{96,-28,92}, -{96,-28,93}, -{96,-27,69}, -{96,-27,70}, -{96,-27,71}, -{96,-27,72}, -{96,-27,73}, -{96,-27,74}, -{96,-27,75}, -{96,-27,76}, -{96,-27,77}, -{96,-27,78}, -{96,-27,79}, -{96,-27,80}, -{96,-27,81}, -{96,-27,82}, -{96,-27,83}, -{96,-27,84}, -{96,-27,85}, -{96,-27,86}, -{96,-27,87}, -{96,-27,88}, -{96,-27,89}, -{96,-27,90}, -{96,-27,91}, -{96,-27,92}, -{96,-27,93}, -{96,-26,54}, -{96,-26,55}, -{96,-26,56}, -{96,-26,57}, -{96,-26,58}, -{96,-26,59}, -{96,-26,60}, -{96,-26,61}, -{96,-26,62}, -{96,-26,63}, -{96,-26,64}, -{96,-26,65}, -{96,-26,66}, -{96,-26,67}, -{96,-26,68}, -{96,-26,69}, -{96,-26,70}, -{96,-26,71}, -{96,-26,72}, -{96,-26,73}, -{96,-26,74}, -{96,-26,75}, -{96,-26,76}, -{96,-26,77}, -{96,-26,78}, -{96,-26,79}, -{96,-26,80}, -{96,-26,81}, -{96,-26,82}, -{96,-26,83}, -{96,-26,84}, -{96,-26,85}, -{96,-26,86}, -{96,-26,87}, -{96,-26,88}, -{96,-26,89}, -{96,-26,90}, -{96,-26,91}, -{96,-26,92}, -{96,-26,93}, -{96,-25,41}, -{96,-25,42}, -{96,-25,43}, -{96,-25,44}, -{96,-25,45}, -{96,-25,46}, -{96,-25,47}, -{96,-25,48}, -{96,-25,49}, -{96,-25,50}, -{96,-25,51}, -{96,-25,52}, -{96,-25,53}, -{96,-25,54}, -{96,-25,55}, -{96,-25,56}, -{96,-25,57}, -{96,-25,58}, -{96,-25,59}, -{96,-25,60}, -{96,-25,61}, -{96,-25,62}, -{96,-25,63}, -{96,-25,64}, -{96,-25,65}, -{96,-25,66}, -{96,-25,67}, -{96,-25,68}, -{96,-25,69}, -{96,-25,70}, -{96,-25,71}, -{96,-25,72}, -{96,-25,73}, -{96,-25,74}, -{96,-25,75}, -{96,-25,76}, -{96,-25,77}, -{96,-25,78}, -{96,-25,79}, -{96,-25,80}, -{96,-25,81}, -{96,-25,82}, -{96,-25,83}, -{96,-25,84}, -{96,-25,85}, -{96,-25,86}, -{96,-25,87}, -{96,-25,88}, -{96,-25,89}, -{96,-25,90}, -{96,-25,91}, -{96,-25,92}, -{96,-25,93}, -{96,-24,30}, -{96,-24,31}, -{96,-24,32}, -{96,-24,33}, -{96,-24,34}, -{96,-24,35}, -{96,-24,36}, -{96,-24,37}, -{96,-24,38}, -{96,-24,39}, -{96,-24,40}, -{96,-24,41}, -{96,-24,42}, -{96,-24,43}, -{96,-24,44}, -{96,-24,45}, -{96,-24,46}, -{96,-24,47}, -{96,-24,48}, -{96,-24,49}, -{96,-24,50}, -{96,-24,51}, -{96,-24,52}, -{96,-24,53}, -{96,-24,54}, -{96,-24,55}, -{96,-24,56}, -{96,-24,57}, -{96,-24,58}, -{96,-24,59}, -{96,-24,60}, -{96,-24,61}, -{96,-24,62}, -{96,-24,63}, -{96,-24,64}, -{96,-24,65}, -{96,-24,66}, -{96,-24,67}, -{96,-24,68}, -{96,-24,69}, -{96,-24,70}, -{96,-24,71}, -{96,-24,72}, -{96,-24,73}, -{96,-24,74}, -{96,-24,75}, -{96,-24,76}, -{96,-24,77}, -{96,-24,78}, -{96,-24,79}, -{96,-24,80}, -{96,-24,81}, -{96,-24,82}, -{96,-24,83}, -{96,-24,84}, -{96,-24,85}, -{96,-24,86}, -{96,-24,87}, -{96,-24,88}, -{96,-24,89}, -{96,-24,90}, -{96,-24,91}, -{96,-24,92}, -{96,-24,93}, -{96,-23,21}, -{96,-23,22}, -{96,-23,23}, -{96,-23,24}, -{96,-23,25}, -{96,-23,26}, -{96,-23,27}, -{96,-23,28}, -{96,-23,29}, -{96,-23,30}, -{96,-23,31}, -{96,-23,32}, -{96,-23,33}, -{96,-23,34}, -{96,-23,35}, -{96,-23,36}, -{96,-23,37}, -{96,-23,38}, -{96,-23,39}, -{96,-23,40}, -{96,-23,41}, -{96,-23,42}, -{96,-23,43}, -{96,-23,44}, -{96,-23,45}, -{96,-23,46}, -{96,-23,47}, -{96,-23,48}, -{96,-23,49}, -{96,-23,50}, -{96,-23,51}, -{96,-23,52}, -{96,-23,53}, -{96,-23,54}, -{96,-23,55}, -{96,-23,56}, -{96,-23,57}, -{96,-23,58}, -{96,-23,59}, -{96,-23,60}, -{96,-23,61}, -{96,-23,62}, -{96,-23,63}, -{96,-23,64}, -{96,-23,65}, -{96,-23,66}, -{96,-23,67}, -{96,-23,68}, -{96,-23,69}, -{96,-23,70}, -{96,-23,71}, -{96,-23,72}, -{96,-23,73}, -{96,-23,74}, -{96,-23,75}, -{96,-23,76}, -{96,-23,77}, -{96,-23,78}, -{96,-23,79}, -{96,-23,80}, -{96,-23,81}, -{96,-23,82}, -{96,-23,83}, -{96,-23,84}, -{96,-23,85}, -{96,-23,86}, -{96,-23,87}, -{96,-23,88}, -{96,-23,89}, -{96,-23,90}, -{96,-23,91}, -{96,-23,92}, -{96,-23,93}, -{96,-22,12}, -{96,-22,13}, -{96,-22,14}, -{96,-22,15}, -{96,-22,16}, -{96,-22,17}, -{96,-22,18}, -{96,-22,19}, -{96,-22,20}, -{96,-22,21}, -{96,-22,22}, -{96,-22,23}, -{96,-22,24}, -{96,-22,25}, -{96,-22,26}, -{96,-22,27}, -{96,-22,28}, -{96,-22,29}, -{96,-22,30}, -{96,-22,31}, -{96,-22,32}, -{96,-22,33}, -{96,-22,34}, -{96,-22,35}, -{96,-22,36}, -{96,-22,37}, -{96,-22,38}, -{96,-22,39}, -{96,-22,40}, -{96,-22,41}, -{96,-22,42}, -{96,-22,43}, -{96,-22,44}, -{96,-22,45}, -{96,-22,46}, -{96,-22,47}, -{96,-22,48}, -{96,-22,49}, -{96,-22,50}, -{96,-22,51}, -{96,-22,52}, -{96,-22,53}, -{96,-22,54}, -{96,-22,55}, -{96,-22,56}, -{96,-22,57}, -{96,-22,58}, -{96,-22,59}, -{96,-22,60}, -{96,-22,61}, -{96,-22,62}, -{96,-22,63}, -{96,-22,64}, -{96,-22,65}, -{96,-22,66}, -{96,-22,67}, -{96,-22,68}, -{96,-22,69}, -{96,-22,70}, -{96,-22,71}, -{96,-22,72}, -{96,-22,73}, -{96,-22,74}, -{96,-22,75}, -{96,-22,76}, -{96,-22,77}, -{96,-22,78}, -{96,-22,79}, -{96,-22,80}, -{96,-22,81}, -{96,-22,82}, -{96,-22,83}, -{96,-22,84}, -{96,-22,85}, -{96,-22,86}, -{96,-22,87}, -{96,-22,88}, -{96,-22,89}, -{96,-22,90}, -{96,-22,91}, -{96,-22,92}, -{96,-22,93}, -{96,-21,4}, -{96,-21,5}, -{96,-21,6}, -{96,-21,7}, -{96,-21,8}, -{96,-21,9}, -{96,-21,10}, -{96,-21,11}, -{96,-21,12}, -{96,-21,13}, -{96,-21,14}, -{96,-21,15}, -{96,-21,16}, -{96,-21,17}, -{96,-21,18}, -{96,-21,19}, -{96,-21,20}, -{96,-21,21}, -{96,-21,22}, -{96,-21,23}, -{96,-21,24}, -{96,-21,25}, -{96,-21,26}, -{96,-21,27}, -{96,-21,28}, -{96,-21,29}, -{96,-21,30}, -{96,-21,31}, -{96,-21,32}, -{96,-21,33}, -{96,-21,34}, -{96,-21,35}, -{96,-21,36}, -{96,-21,37}, -{96,-21,38}, -{96,-21,39}, -{96,-21,40}, -{96,-21,41}, -{96,-21,42}, -{96,-21,43}, -{96,-21,44}, -{96,-21,45}, -{96,-21,46}, -{96,-21,47}, -{96,-21,48}, -{96,-21,49}, -{96,-21,50}, -{96,-21,51}, -{96,-21,52}, -{96,-21,53}, -{96,-21,54}, -{96,-21,55}, -{96,-21,56}, -{96,-21,57}, -{96,-21,58}, -{96,-21,59}, -{96,-21,60}, -{96,-21,61}, -{96,-21,62}, -{96,-21,63}, -{96,-21,64}, -{96,-21,65}, -{96,-21,66}, -{96,-21,67}, -{96,-21,68}, -{96,-21,69}, -{96,-21,70}, -{96,-21,71}, -{96,-21,72}, -{96,-21,73}, -{96,-21,74}, -{96,-21,75}, -{96,-21,76}, -{96,-21,77}, -{96,-21,78}, -{96,-21,79}, -{96,-21,80}, -{96,-21,81}, -{96,-21,82}, -{96,-21,83}, -{96,-21,84}, -{96,-21,85}, -{96,-21,86}, -{96,-21,87}, -{96,-21,88}, -{96,-21,89}, -{96,-21,90}, -{96,-21,91}, -{96,-21,92}, -{96,-21,93}, -{96,-20,-4}, -{96,-20,-3}, -{96,-20,-2}, -{96,-20,-1}, -{96,-20,0}, -{96,-20,1}, -{96,-20,2}, -{96,-20,3}, -{96,-20,4}, -{96,-20,5}, -{96,-20,6}, -{96,-20,7}, -{96,-20,8}, -{96,-20,9}, -{96,-20,10}, -{96,-20,11}, -{96,-20,12}, -{96,-20,13}, -{96,-20,14}, -{96,-20,15}, -{96,-20,16}, -{96,-20,17}, -{96,-20,18}, -{96,-20,19}, -{96,-20,20}, -{96,-20,21}, -{96,-20,22}, -{96,-20,23}, -{96,-20,24}, -{96,-20,25}, -{96,-20,26}, -{96,-20,27}, -{96,-20,28}, -{96,-20,29}, -{96,-20,30}, -{96,-20,31}, -{96,-20,32}, -{96,-20,33}, -{96,-20,34}, -{96,-20,35}, -{96,-20,36}, -{96,-20,37}, -{96,-20,38}, -{96,-20,39}, -{96,-20,40}, -{96,-20,41}, -{96,-20,42}, -{96,-20,43}, -{96,-20,44}, -{96,-20,45}, -{96,-20,46}, -{96,-20,47}, -{96,-20,48}, -{96,-20,49}, -{96,-20,50}, -{96,-20,51}, -{96,-20,52}, -{96,-20,53}, -{96,-20,54}, -{96,-20,55}, -{96,-20,56}, -{96,-20,57}, -{96,-20,58}, -{96,-20,59}, -{96,-20,60}, -{96,-20,61}, -{96,-20,62}, -{96,-20,63}, -{96,-20,64}, -{96,-20,65}, -{96,-20,66}, -{96,-20,67}, -{96,-20,68}, -{96,-20,69}, -{96,-20,70}, -{96,-20,71}, -{96,-20,72}, -{96,-20,73}, -{96,-20,74}, -{96,-20,75}, -{96,-20,76}, -{96,-20,77}, -{96,-20,78}, -{96,-20,79}, -{96,-20,80}, -{96,-20,81}, -{96,-20,82}, -{96,-20,83}, -{96,-20,84}, -{96,-20,85}, -{96,-20,86}, -{96,-20,87}, -{96,-20,88}, -{96,-20,89}, -{96,-20,90}, -{96,-20,91}, -{96,-20,92}, -{96,-20,93}, -{96,-19,-6}, -{96,-19,-5}, -{96,-19,-4}, -{96,-19,-3}, -{96,-19,-2}, -{96,-19,-1}, -{96,-19,0}, -{96,-19,1}, -{96,-19,2}, -{96,-19,3}, -{96,-19,4}, -{96,-19,5}, -{96,-19,6}, -{96,-19,7}, -{96,-19,8}, -{96,-19,9}, -{96,-19,10}, -{96,-19,11}, -{96,-19,12}, -{96,-19,13}, -{96,-19,14}, -{96,-19,15}, -{96,-19,16}, -{96,-19,17}, -{96,-19,18}, -{96,-19,19}, -{96,-19,20}, -{96,-19,21}, -{96,-19,22}, -{96,-19,23}, -{96,-19,24}, -{96,-19,25}, -{96,-19,26}, -{96,-19,27}, -{96,-19,28}, -{96,-19,29}, -{96,-19,30}, -{96,-19,31}, -{96,-19,32}, -{96,-19,33}, -{96,-19,34}, -{96,-19,35}, -{96,-19,36}, -{96,-19,37}, -{96,-19,38}, -{96,-19,39}, -{96,-19,40}, -{96,-19,41}, -{96,-19,42}, -{96,-19,43}, -{96,-19,44}, -{96,-19,45}, -{96,-19,46}, -{96,-19,47}, -{96,-19,48}, -{96,-19,49}, -{96,-19,50}, -{96,-19,51}, -{96,-19,52}, -{96,-19,53}, -{96,-19,54}, -{96,-19,55}, -{96,-19,56}, -{96,-19,57}, -{96,-19,58}, -{96,-19,59}, -{96,-19,60}, -{96,-19,61}, -{96,-19,62}, -{96,-19,63}, -{96,-19,64}, -{96,-19,65}, -{96,-19,66}, -{96,-19,67}, -{96,-19,68}, -{96,-19,69}, -{96,-19,70}, -{96,-19,71}, -{96,-19,72}, -{96,-19,73}, -{96,-19,74}, -{96,-19,75}, -{96,-19,76}, -{96,-19,77}, -{96,-19,78}, -{96,-19,79}, -{96,-19,80}, -{96,-19,81}, -{96,-19,82}, -{96,-19,83}, -{96,-19,84}, -{96,-19,85}, -{96,-19,86}, -{96,-19,87}, -{96,-19,88}, -{96,-19,89}, -{96,-19,90}, -{96,-19,91}, -{96,-18,-6}, -{96,-18,-5}, -{96,-18,-4}, -{96,-18,-3}, -{96,-18,-2}, -{96,-18,-1}, -{96,-18,0}, -{96,-18,1}, -{96,-18,2}, -{96,-18,3}, -{96,-18,4}, -{96,-18,5}, -{96,-18,6}, -{96,-18,7}, -{96,-18,8}, -{96,-18,9}, -{96,-18,10}, -{96,-18,11}, -{96,-18,12}, -{96,-18,13}, -{96,-18,14}, -{96,-18,15}, -{96,-18,16}, -{96,-18,17}, -{96,-18,18}, -{96,-18,19}, -{96,-18,20}, -{96,-18,21}, -{96,-18,22}, -{96,-18,23}, -{96,-18,24}, -{96,-18,25}, -{96,-18,26}, -{96,-18,27}, -{96,-18,28}, -{96,-18,29}, -{96,-18,30}, -{96,-18,31}, -{96,-18,32}, -{96,-18,33}, -{96,-18,34}, -{96,-18,35}, -{96,-18,36}, -{96,-18,37}, -{96,-18,38}, -{96,-18,39}, -{96,-18,40}, -{96,-18,41}, -{96,-18,42}, -{96,-18,43}, -{96,-18,44}, -{96,-18,45}, -{96,-18,46}, -{96,-18,47}, -{96,-18,48}, -{96,-18,49}, -{96,-18,50}, -{96,-18,51}, -{96,-18,52}, -{96,-18,53}, -{96,-18,54}, -{96,-18,55}, -{96,-18,56}, -{96,-18,57}, -{96,-18,58}, -{96,-18,59}, -{96,-18,60}, -{96,-18,61}, -{96,-18,62}, -{96,-18,63}, -{96,-18,64}, -{96,-18,65}, -{96,-18,66}, -{96,-18,67}, -{96,-18,68}, -{96,-18,69}, -{96,-18,70}, -{96,-18,71}, -{96,-18,72}, -{96,-18,73}, -{96,-18,74}, -{96,-18,75}, -{96,-18,76}, -{96,-18,77}, -{96,-18,78}, -{96,-18,79}, -{96,-18,80}, -{96,-18,81}, -{96,-18,82}, -{96,-18,83}, -{96,-18,84}, -{96,-17,-6}, -{96,-17,-5}, -{96,-17,-4}, -{96,-17,-3}, -{96,-17,-2}, -{96,-17,-1}, -{96,-17,0}, -{96,-17,1}, -{96,-17,2}, -{96,-17,3}, -{96,-17,4}, -{96,-17,5}, -{96,-17,6}, -{96,-17,7}, -{96,-17,8}, -{96,-17,9}, -{96,-17,10}, -{96,-17,11}, -{96,-17,12}, -{96,-17,13}, -{96,-17,14}, -{96,-17,15}, -{96,-17,16}, -{96,-17,17}, -{96,-17,18}, -{96,-17,19}, -{96,-17,20}, -{96,-17,21}, -{96,-17,22}, -{96,-17,23}, -{96,-17,24}, -{96,-17,25}, -{96,-17,26}, -{96,-17,27}, -{96,-17,28}, -{96,-17,29}, -{96,-17,30}, -{96,-17,31}, -{96,-17,32}, -{96,-17,33}, -{96,-17,34}, -{96,-17,35}, -{96,-17,36}, -{96,-17,37}, -{96,-17,38}, -{96,-17,39}, -{96,-17,40}, -{96,-17,41}, -{96,-17,42}, -{96,-17,43}, -{96,-17,44}, -{96,-17,45}, -{96,-17,46}, -{96,-17,47}, -{96,-17,48}, -{96,-17,49}, -{96,-17,50}, -{96,-17,51}, -{96,-17,52}, -{96,-17,53}, -{96,-17,54}, -{96,-17,55}, -{96,-17,56}, -{96,-17,57}, -{96,-17,58}, -{96,-17,59}, -{96,-17,60}, -{96,-17,61}, -{96,-17,62}, -{96,-17,63}, -{96,-17,64}, -{96,-17,65}, -{96,-17,66}, -{96,-17,67}, -{96,-17,68}, -{96,-17,69}, -{96,-17,70}, -{96,-17,71}, -{96,-17,72}, -{96,-17,73}, -{96,-17,74}, -{96,-17,75}, -{96,-17,76}, -{96,-17,77}, -{96,-17,78}, -{96,-16,-6}, -{96,-16,-5}, -{96,-16,-4}, -{96,-16,-3}, -{96,-16,-2}, -{96,-16,-1}, -{96,-16,0}, -{96,-16,1}, -{96,-16,2}, -{96,-16,3}, -{96,-16,4}, -{96,-16,5}, -{96,-16,6}, -{96,-16,7}, -{96,-16,8}, -{96,-16,9}, -{96,-16,10}, -{96,-16,11}, -{96,-16,12}, -{96,-16,13}, -{96,-16,14}, -{96,-16,15}, -{96,-16,16}, -{96,-16,17}, -{96,-16,18}, -{96,-16,19}, -{96,-16,20}, -{96,-16,21}, -{96,-16,22}, -{96,-16,23}, -{96,-16,24}, -{96,-16,25}, -{96,-16,26}, -{96,-16,27}, -{96,-16,28}, -{96,-16,29}, -{96,-16,30}, -{96,-16,31}, -{96,-16,32}, -{96,-16,33}, -{96,-16,34}, -{96,-16,35}, -{96,-16,36}, -{96,-16,37}, -{96,-16,38}, -{96,-16,39}, -{96,-16,40}, -{96,-16,41}, -{96,-16,42}, -{96,-16,43}, -{96,-16,44}, -{96,-16,45}, -{96,-16,46}, -{96,-16,47}, -{96,-16,48}, -{96,-16,49}, -{96,-16,50}, -{96,-16,51}, -{96,-16,52}, -{96,-16,53}, -{96,-16,54}, -{96,-16,55}, -{96,-16,56}, -{96,-16,57}, -{96,-16,58}, -{96,-16,59}, -{96,-16,60}, -{96,-16,61}, -{96,-16,62}, -{96,-16,63}, -{96,-16,64}, -{96,-16,65}, -{96,-16,66}, -{96,-16,67}, -{96,-16,68}, -{96,-16,69}, -{96,-16,70}, -{96,-16,71}, -{96,-16,72}, -{96,-15,-6}, -{96,-15,-5}, -{96,-15,-4}, -{96,-15,-3}, -{96,-15,-2}, -{96,-15,-1}, -{96,-15,0}, -{96,-15,1}, -{96,-15,2}, -{96,-15,3}, -{96,-15,4}, -{96,-15,5}, -{96,-15,6}, -{96,-15,7}, -{96,-15,8}, -{96,-15,9}, -{96,-15,10}, -{96,-15,11}, -{96,-15,12}, -{96,-15,13}, -{96,-15,14}, -{96,-15,15}, -{96,-15,16}, -{96,-15,17}, -{96,-15,18}, -{96,-15,19}, -{96,-15,20}, -{96,-15,21}, -{96,-15,22}, -{96,-15,23}, -{96,-15,24}, -{96,-15,25}, -{96,-15,26}, -{96,-15,27}, -{96,-15,28}, -{96,-15,29}, -{96,-15,30}, -{96,-15,31}, -{96,-15,32}, -{96,-15,33}, -{96,-15,34}, -{96,-15,35}, -{96,-15,36}, -{96,-15,37}, -{96,-15,38}, -{96,-15,39}, -{96,-15,40}, -{96,-15,41}, -{96,-15,42}, -{96,-15,43}, -{96,-15,44}, -{96,-15,45}, -{96,-15,46}, -{96,-15,47}, -{96,-15,48}, -{96,-15,49}, -{96,-15,50}, -{96,-15,51}, -{96,-15,52}, -{96,-15,53}, -{96,-15,54}, -{96,-15,55}, -{96,-15,56}, -{96,-15,57}, -{96,-15,58}, -{96,-15,59}, -{96,-15,60}, -{96,-15,61}, -{96,-15,62}, -{96,-15,63}, -{96,-15,64}, -{96,-15,65}, -{96,-15,66}, -{96,-15,67}, -{96,-14,-6}, -{96,-14,-5}, -{96,-14,-4}, -{96,-14,-3}, -{96,-14,-2}, -{96,-14,-1}, -{96,-14,0}, -{96,-14,1}, -{96,-14,2}, -{96,-14,3}, -{96,-14,4}, -{96,-14,5}, -{96,-14,6}, -{96,-14,7}, -{96,-14,8}, -{96,-14,9}, -{96,-14,10}, -{96,-14,11}, -{96,-14,12}, -{96,-14,13}, -{96,-14,14}, -{96,-14,15}, -{96,-14,16}, -{96,-14,17}, -{96,-14,18}, -{96,-14,19}, -{96,-14,20}, -{96,-14,21}, -{96,-14,22}, -{96,-14,23}, -{96,-14,24}, -{96,-14,25}, -{96,-14,26}, -{96,-14,27}, -{96,-14,28}, -{96,-14,29}, -{96,-14,30}, -{96,-14,31}, -{96,-14,32}, -{96,-14,33}, -{96,-14,34}, -{96,-14,35}, -{96,-14,36}, -{96,-14,37}, -{96,-14,38}, -{96,-14,39}, -{96,-14,40}, -{96,-14,41}, -{96,-14,42}, -{96,-14,43}, -{96,-14,44}, -{96,-14,45}, -{96,-14,46}, -{96,-14,47}, -{96,-14,48}, -{96,-14,49}, -{96,-14,50}, -{96,-14,51}, -{96,-14,52}, -{96,-14,53}, -{96,-14,54}, -{96,-14,55}, -{96,-14,56}, -{96,-14,57}, -{96,-14,58}, -{96,-14,59}, -{96,-14,60}, -{96,-14,61}, -{96,-14,62}, -{96,-13,-6}, -{96,-13,-5}, -{96,-13,-4}, -{96,-13,-3}, -{96,-13,-2}, -{96,-13,-1}, -{96,-13,0}, -{96,-13,1}, -{96,-13,2}, -{96,-13,3}, -{96,-13,4}, -{96,-13,5}, -{96,-13,6}, -{96,-13,7}, -{96,-13,8}, -{96,-13,9}, -{96,-13,10}, -{96,-13,11}, -{96,-13,12}, -{96,-13,13}, -{96,-13,14}, -{96,-13,15}, -{96,-13,16}, -{96,-13,17}, -{96,-13,18}, -{96,-13,19}, -{96,-13,20}, -{96,-13,21}, -{96,-13,22}, -{96,-13,23}, -{96,-13,24}, -{96,-13,25}, -{96,-13,26}, -{96,-13,27}, -{96,-13,28}, -{96,-13,29}, -{96,-13,30}, -{96,-13,31}, -{96,-13,32}, -{96,-13,33}, -{96,-13,34}, -{96,-13,35}, -{96,-13,36}, -{96,-13,37}, -{96,-13,38}, -{96,-13,39}, -{96,-13,40}, -{96,-13,41}, -{96,-13,42}, -{96,-13,43}, -{96,-13,44}, -{96,-13,45}, -{96,-13,46}, -{96,-13,47}, -{96,-13,48}, -{96,-13,49}, -{96,-13,50}, -{96,-13,51}, -{96,-13,52}, -{96,-13,53}, -{96,-13,54}, -{96,-13,55}, -{96,-13,56}, -{96,-13,57}, -{96,-12,-6}, -{96,-12,-5}, -{96,-12,-4}, -{96,-12,-3}, -{96,-12,-2}, -{96,-12,-1}, -{96,-12,0}, -{96,-12,1}, -{96,-12,2}, -{96,-12,3}, -{96,-12,4}, -{96,-12,5}, -{96,-12,6}, -{96,-12,7}, -{96,-12,8}, -{96,-12,9}, -{96,-12,10}, -{96,-12,11}, -{96,-12,12}, -{96,-12,13}, -{96,-12,14}, -{96,-12,15}, -{96,-12,16}, -{96,-12,17}, -{96,-12,18}, -{96,-12,19}, -{96,-12,20}, -{96,-12,21}, -{96,-12,22}, -{96,-12,23}, -{96,-12,24}, -{96,-12,25}, -{96,-12,26}, -{96,-12,27}, -{96,-12,28}, -{96,-12,29}, -{96,-12,30}, -{96,-12,31}, -{96,-12,32}, -{96,-12,33}, -{96,-12,34}, -{96,-12,35}, -{96,-12,36}, -{96,-12,37}, -{96,-12,38}, -{96,-12,39}, -{96,-12,40}, -{96,-12,41}, -{96,-12,42}, -{96,-12,43}, -{96,-12,44}, -{96,-12,45}, -{96,-12,46}, -{96,-12,47}, -{96,-12,48}, -{96,-12,49}, -{96,-12,50}, -{96,-12,51}, -{96,-12,52}, -{96,-12,53}, -{96,-11,-6}, -{96,-11,-5}, -{96,-11,-4}, -{96,-11,-3}, -{96,-11,-2}, -{96,-11,-1}, -{96,-11,0}, -{96,-11,1}, -{96,-11,2}, -{96,-11,3}, -{96,-11,4}, -{96,-11,5}, -{96,-11,6}, -{96,-11,7}, -{96,-11,8}, -{96,-11,9}, -{96,-11,10}, -{96,-11,11}, -{96,-11,12}, -{96,-11,13}, -{96,-11,14}, -{96,-11,15}, -{96,-11,16}, -{96,-11,17}, -{96,-11,18}, -{96,-11,19}, -{96,-11,20}, -{96,-11,21}, -{96,-11,22}, -{96,-11,23}, -{96,-11,24}, -{96,-11,25}, -{96,-11,26}, -{96,-11,27}, -{96,-11,28}, -{96,-11,29}, -{96,-11,30}, -{96,-11,31}, -{96,-11,32}, -{96,-11,33}, -{96,-11,34}, -{96,-11,35}, -{96,-11,36}, -{96,-11,37}, -{96,-11,38}, -{96,-11,39}, -{96,-11,40}, -{96,-11,41}, -{96,-11,42}, -{96,-11,43}, -{96,-11,44}, -{96,-11,45}, -{96,-11,46}, -{96,-11,47}, -{96,-11,48}, -{96,-11,49}, -{96,-10,-6}, -{96,-10,-5}, -{96,-10,-4}, -{96,-10,-3}, -{96,-10,-2}, -{96,-10,-1}, -{96,-10,0}, -{96,-10,1}, -{96,-10,2}, -{96,-10,3}, -{96,-10,4}, -{96,-10,5}, -{96,-10,6}, -{96,-10,7}, -{96,-10,8}, -{96,-10,9}, -{96,-10,10}, -{96,-10,11}, -{96,-10,12}, -{96,-10,13}, -{96,-10,14}, -{96,-10,15}, -{96,-10,16}, -{96,-10,17}, -{96,-10,18}, -{96,-10,19}, -{96,-10,20}, -{96,-10,21}, -{96,-10,22}, -{96,-10,23}, -{96,-10,24}, -{96,-10,25}, -{96,-10,26}, -{96,-10,27}, -{96,-10,28}, -{96,-10,29}, -{96,-10,30}, -{96,-10,31}, -{96,-10,32}, -{96,-10,33}, -{96,-10,34}, -{96,-10,35}, -{96,-10,36}, -{96,-10,37}, -{96,-10,38}, -{96,-10,39}, -{96,-10,40}, -{96,-10,41}, -{96,-10,42}, -{96,-10,43}, -{96,-10,44}, -{96,-10,45}, -{96,-9,-6}, -{96,-9,-5}, -{96,-9,-4}, -{96,-9,-3}, -{96,-9,-2}, -{96,-9,-1}, -{96,-9,0}, -{96,-9,1}, -{96,-9,2}, -{96,-9,3}, -{96,-9,4}, -{96,-9,5}, -{96,-9,6}, -{96,-9,7}, -{96,-9,8}, -{96,-9,9}, -{96,-9,10}, -{96,-9,11}, -{96,-9,12}, -{96,-9,13}, -{96,-9,14}, -{96,-9,15}, -{96,-9,16}, -{96,-9,17}, -{96,-9,18}, -{96,-9,19}, -{96,-9,20}, -{96,-9,21}, -{96,-9,22}, -{96,-9,23}, -{96,-9,24}, -{96,-9,25}, -{96,-9,26}, -{96,-9,27}, -{96,-9,28}, -{96,-9,29}, -{96,-9,30}, -{96,-9,31}, -{96,-9,32}, -{96,-9,33}, -{96,-9,34}, -{96,-9,35}, -{96,-9,36}, -{96,-9,37}, -{96,-9,38}, -{96,-9,39}, -{96,-9,40}, -{96,-9,41}, -{96,-9,42}, -{96,-8,-6}, -{96,-8,-5}, -{96,-8,-4}, -{96,-8,-3}, -{96,-8,-2}, -{96,-8,-1}, -{96,-8,0}, -{96,-8,1}, -{96,-8,2}, -{96,-8,3}, -{96,-8,4}, -{96,-8,5}, -{96,-8,6}, -{96,-8,7}, -{96,-8,8}, -{96,-8,9}, -{96,-8,10}, -{96,-8,11}, -{96,-8,12}, -{96,-8,13}, -{96,-8,14}, -{96,-8,15}, -{96,-8,16}, -{96,-8,17}, -{96,-8,18}, -{96,-8,19}, -{96,-8,20}, -{96,-8,21}, -{96,-8,22}, -{96,-8,23}, -{96,-8,24}, -{96,-8,25}, -{96,-8,26}, -{96,-8,27}, -{96,-8,28}, -{96,-8,29}, -{96,-8,30}, -{96,-8,31}, -{96,-8,32}, -{96,-8,33}, -{96,-8,34}, -{96,-8,35}, -{96,-8,36}, -{96,-8,37}, -{96,-8,38}, -{96,-7,-6}, -{96,-7,-5}, -{96,-7,-4}, -{96,-7,-3}, -{96,-7,-2}, -{96,-7,-1}, -{96,-7,0}, -{96,-7,1}, -{96,-7,2}, -{96,-7,3}, -{96,-7,4}, -{96,-7,5}, -{96,-7,6}, -{96,-7,7}, -{96,-7,8}, -{96,-7,9}, -{96,-7,10}, -{96,-7,11}, -{96,-7,12}, -{96,-7,13}, -{96,-7,14}, -{96,-7,15}, -{96,-7,16}, -{96,-7,17}, -{96,-7,18}, -{96,-7,19}, -{96,-7,20}, -{96,-7,21}, -{96,-7,22}, -{96,-7,23}, -{96,-7,24}, -{96,-7,25}, -{96,-7,26}, -{96,-7,27}, -{96,-7,28}, -{96,-7,29}, -{96,-7,30}, -{96,-7,31}, -{96,-7,32}, -{96,-7,33}, -{96,-7,34}, -{96,-7,35}, -{96,-6,-6}, -{96,-6,-5}, -{96,-6,-4}, -{96,-6,-3}, -{96,-6,-2}, -{96,-6,-1}, -{96,-6,0}, -{96,-6,1}, -{96,-6,2}, -{96,-6,3}, -{96,-6,4}, -{96,-6,5}, -{96,-6,6}, -{96,-6,7}, -{96,-6,8}, -{96,-6,9}, -{96,-6,10}, -{96,-6,11}, -{96,-6,12}, -{96,-6,13}, -{96,-6,14}, -{96,-6,15}, -{96,-6,16}, -{96,-6,17}, -{96,-6,18}, -{96,-6,19}, -{96,-6,20}, -{96,-6,21}, -{96,-6,22}, -{96,-6,23}, -{96,-6,24}, -{96,-6,25}, -{96,-6,26}, -{96,-6,27}, -{96,-6,28}, -{96,-6,29}, -{96,-6,30}, -{96,-6,31}, -{96,-6,32}, -{96,-5,-6}, -{96,-5,-5}, -{96,-5,-4}, -{96,-5,-3}, -{96,-5,-2}, -{96,-5,-1}, -{96,-5,0}, -{96,-5,1}, -{96,-5,2}, -{96,-5,3}, -{96,-5,4}, -{96,-5,5}, -{96,-5,6}, -{96,-5,7}, -{96,-5,8}, -{96,-5,9}, -{96,-5,10}, -{96,-5,11}, -{96,-5,12}, -{96,-5,13}, -{96,-5,14}, -{96,-5,15}, -{96,-5,16}, -{96,-5,17}, -{96,-5,18}, -{96,-5,19}, -{96,-5,20}, -{96,-5,21}, -{96,-5,22}, -{96,-5,23}, -{96,-5,24}, -{96,-5,25}, -{96,-5,26}, -{96,-5,27}, -{96,-5,28}, -{96,-4,-6}, -{96,-4,-5}, -{96,-4,-4}, -{96,-4,-3}, -{96,-4,-2}, -{96,-4,-1}, -{96,-4,0}, -{96,-4,1}, -{96,-4,2}, -{96,-4,3}, -{96,-4,4}, -{96,-4,5}, -{96,-4,6}, -{96,-4,7}, -{96,-4,8}, -{96,-4,9}, -{96,-4,10}, -{96,-4,11}, -{96,-4,12}, -{96,-4,13}, -{96,-4,14}, -{96,-4,15}, -{96,-4,16}, -{96,-4,17}, -{96,-4,18}, -{96,-4,19}, -{96,-4,20}, -{96,-4,21}, -{96,-4,22}, -{96,-4,23}, -{96,-4,24}, -{96,-4,25}, -{96,-3,-6}, -{96,-3,-5}, -{96,-3,-4}, -{96,-3,-3}, -{96,-3,-2}, -{96,-3,-1}, -{96,-3,0}, -{96,-3,1}, -{96,-3,2}, -{96,-3,3}, -{96,-3,4}, -{96,-3,5}, -{96,-3,6}, -{96,-3,7}, -{96,-3,8}, -{96,-3,9}, -{96,-3,10}, -{96,-3,11}, -{96,-3,12}, -{96,-3,13}, -{96,-3,14}, -{96,-3,15}, -{96,-3,16}, -{96,-3,17}, -{96,-3,18}, -{96,-3,19}, -{96,-3,20}, -{96,-3,21}, -{96,-3,22}, -{96,-2,-6}, -{96,-2,-5}, -{96,-2,-4}, -{96,-2,-3}, -{96,-2,-2}, -{96,-2,-1}, -{96,-2,0}, -{96,-2,1}, -{96,-2,2}, -{96,-2,3}, -{96,-2,4}, -{96,-2,5}, -{96,-2,6}, -{96,-2,7}, -{96,-2,8}, -{96,-2,9}, -{96,-2,10}, -{96,-2,11}, -{96,-2,12}, -{96,-2,13}, -{96,-2,14}, -{96,-2,15}, -{96,-2,16}, -{96,-2,17}, -{96,-2,18}, -{96,-2,19}, -{96,-2,20}, -{96,-1,-6}, -{96,-1,-5}, -{96,-1,-4}, -{96,-1,-3}, -{96,-1,-2}, -{96,-1,-1}, -{96,-1,0}, -{96,-1,1}, -{96,-1,2}, -{96,-1,3}, -{96,-1,4}, -{96,-1,5}, -{96,-1,6}, -{96,-1,7}, -{96,-1,8}, -{96,-1,9}, -{96,-1,10}, -{96,-1,11}, -{96,-1,12}, -{96,-1,13}, -{96,-1,14}, -{96,-1,15}, -{96,-1,16}, -{96,-1,17}, -{96,0,-6}, -{96,0,-5}, -{96,0,-4}, -{96,0,-3}, -{96,0,-2}, -{96,0,-1}, -{96,0,0}, -{96,0,1}, -{96,0,2}, -{96,0,3}, -{96,0,4}, -{96,0,5}, -{96,0,6}, -{96,0,7}, -{96,0,8}, -{96,0,9}, -{96,0,10}, -{96,0,11}, -{96,0,12}, -{96,0,13}, -{96,0,14}, -{96,1,-6}, -{96,1,-5}, -{96,1,-4}, -{96,1,-3}, -{96,1,-2}, -{96,1,-1}, -{96,1,0}, -{96,1,1}, -{96,1,2}, -{96,1,3}, -{96,1,4}, -{96,1,5}, -{96,1,6}, -{96,1,7}, -{96,1,8}, -{96,1,9}, -{96,1,10}, -{96,1,11}, -{96,1,12}, -{96,2,-6}, -{96,2,-5}, -{96,2,-4}, -{96,2,-3}, -{96,2,-2}, -{96,2,-1}, -{96,2,0}, -{96,2,1}, -{96,2,2}, -{96,2,3}, -{96,2,4}, -{96,2,5}, -{96,2,6}, -{96,2,7}, -{96,2,8}, -{96,2,9}, -{96,3,-6}, -{96,3,-5}, -{96,3,-4}, -{96,3,-3}, -{96,3,-2}, -{96,3,-1}, -{96,3,0}, -{96,3,1}, -{96,3,2}, -{96,3,3}, -{96,3,4}, -{96,3,5}, -{96,3,6}, -{96,4,-6}, -{96,4,-5}, -{96,4,-4}, -{96,4,-3}, -{96,4,-2}, -{96,4,-1}, -{96,4,0}, -{96,4,1}, -{96,4,2}, -{96,4,3}, -{96,4,4}, -{96,5,-6}, -{96,5,-5}, -{96,5,-4}, -{96,5,-3}, -{96,5,-2}, -{96,5,-1}, -{96,5,0}, -{96,5,1}, -{96,5,2}, -{96,6,-6}, -{96,6,-5}, -{96,6,-4}, -{96,6,-3}, -{96,6,-2}, -{96,6,-1}, -{96,7,-6}, -{96,7,-5}, -{96,7,-4}, -{96,7,-3}, -{96,8,-6}, -{96,8,-5}, -{97,-22,79}, -{97,-22,80}, -{97,-22,81}, -{97,-22,82}, -{97,-22,83}, -{97,-22,84}, -{97,-22,85}, -{97,-22,86}, -{97,-22,87}, -{97,-22,88}, -{97,-22,89}, -{97,-22,90}, -{97,-22,91}, -{97,-22,92}, -{97,-22,93}, -{97,-22,94}, -{97,-21,61}, -{97,-21,62}, -{97,-21,63}, -{97,-21,64}, -{97,-21,65}, -{97,-21,66}, -{97,-21,67}, -{97,-21,68}, -{97,-21,69}, -{97,-21,70}, -{97,-21,71}, -{97,-21,72}, -{97,-21,73}, -{97,-21,74}, -{97,-21,75}, -{97,-21,76}, -{97,-21,77}, -{97,-21,78}, -{97,-21,79}, -{97,-21,80}, -{97,-21,81}, -{97,-21,82}, -{97,-21,83}, -{97,-21,84}, -{97,-21,85}, -{97,-21,86}, -{97,-21,87}, -{97,-21,88}, -{97,-21,89}, -{97,-21,90}, -{97,-21,91}, -{97,-21,92}, -{97,-21,93}, -{97,-20,47}, -{97,-20,48}, -{97,-20,49}, -{97,-20,50}, -{97,-20,51}, -{97,-20,52}, -{97,-20,53}, -{97,-20,54}, -{97,-20,55}, -{97,-20,56}, -{97,-20,57}, -{97,-20,58}, -{97,-20,59}, -{97,-20,60}, -{97,-20,61}, -{97,-20,62}, -{97,-20,63}, -{97,-20,64}, -{97,-20,65}, -{97,-20,66}, -{97,-20,67}, -{97,-20,68}, -{97,-20,69}, -{97,-20,70}, -{97,-20,71}, -{97,-20,72}, -{97,-20,73}, -{97,-20,74}, -{97,-20,75}, -{97,-20,76}, -{97,-20,77}, -{97,-20,78}, -{97,-20,79}, -{97,-20,80}, -{97,-20,81}, -{97,-20,82}, -{97,-20,83}, -{97,-20,84}, -{97,-20,85}, -{97,-20,86}, -{97,-19,35}, -{97,-19,36}, -{97,-19,37}, -{97,-19,38}, -{97,-19,39}, -{97,-19,40}, -{97,-19,41}, -{97,-19,42}, -{97,-19,43}, -{97,-19,44}, -{97,-19,45}, -{97,-19,46}, -{97,-19,47}, -{97,-19,48}, -{97,-19,49}, -{97,-19,50}, -{97,-19,51}, -{97,-19,52}, -{97,-19,53}, -{97,-19,54}, -{97,-19,55}, -{97,-19,56}, -{97,-19,57}, -{97,-19,58}, -{97,-19,59}, -{97,-19,60}, -{97,-19,61}, -{97,-19,62}, -{97,-19,63}, -{97,-19,64}, -{97,-19,65}, -{97,-19,66}, -{97,-19,67}, -{97,-19,68}, -{97,-19,69}, -{97,-19,70}, -{97,-19,71}, -{97,-19,72}, -{97,-19,73}, -{97,-19,74}, -{97,-19,75}, -{97,-19,76}, -{97,-19,77}, -{97,-19,78}, -{97,-19,79}, -{97,-18,25}, -{97,-18,26}, -{97,-18,27}, -{97,-18,28}, -{97,-18,29}, -{97,-18,30}, -{97,-18,31}, -{97,-18,32}, -{97,-18,33}, -{97,-18,34}, -{97,-18,35}, -{97,-18,36}, -{97,-18,37}, -{97,-18,38}, -{97,-18,39}, -{97,-18,40}, -{97,-18,41}, -{97,-18,42}, -{97,-18,43}, -{97,-18,44}, -{97,-18,45}, -{97,-18,46}, -{97,-18,47}, -{97,-18,48}, -{97,-18,49}, -{97,-18,50}, -{97,-18,51}, -{97,-18,52}, -{97,-18,53}, -{97,-18,54}, -{97,-18,55}, -{97,-18,56}, -{97,-18,57}, -{97,-18,58}, -{97,-18,59}, -{97,-18,60}, -{97,-18,61}, -{97,-18,62}, -{97,-18,63}, -{97,-18,64}, -{97,-18,65}, -{97,-18,66}, -{97,-18,67}, -{97,-18,68}, -{97,-18,69}, -{97,-18,70}, -{97,-18,71}, -{97,-18,72}, -{97,-18,73}, -{97,-18,74}, -{97,-17,15}, -{97,-17,16}, -{97,-17,17}, -{97,-17,18}, -{97,-17,19}, -{97,-17,20}, -{97,-17,21}, -{97,-17,22}, -{97,-17,23}, -{97,-17,24}, -{97,-17,25}, -{97,-17,26}, -{97,-17,27}, -{97,-17,28}, -{97,-17,29}, -{97,-17,30}, -{97,-17,31}, -{97,-17,32}, -{97,-17,33}, -{97,-17,34}, -{97,-17,35}, -{97,-17,36}, -{97,-17,37}, -{97,-17,38}, -{97,-17,39}, -{97,-17,40}, -{97,-17,41}, -{97,-17,42}, -{97,-17,43}, -{97,-17,44}, -{97,-17,45}, -{97,-17,46}, -{97,-17,47}, -{97,-17,48}, -{97,-17,49}, -{97,-17,50}, -{97,-17,51}, -{97,-17,52}, -{97,-17,53}, -{97,-17,54}, -{97,-17,55}, -{97,-17,56}, -{97,-17,57}, -{97,-17,58}, -{97,-17,59}, -{97,-17,60}, -{97,-17,61}, -{97,-17,62}, -{97,-17,63}, -{97,-17,64}, -{97,-17,65}, -{97,-17,66}, -{97,-17,67}, -{97,-17,68}, -{97,-16,7}, -{97,-16,8}, -{97,-16,9}, -{97,-16,10}, -{97,-16,11}, -{97,-16,12}, -{97,-16,13}, -{97,-16,14}, -{97,-16,15}, -{97,-16,16}, -{97,-16,17}, -{97,-16,18}, -{97,-16,19}, -{97,-16,20}, -{97,-16,21}, -{97,-16,22}, -{97,-16,23}, -{97,-16,24}, -{97,-16,25}, -{97,-16,26}, -{97,-16,27}, -{97,-16,28}, -{97,-16,29}, -{97,-16,30}, -{97,-16,31}, -{97,-16,32}, -{97,-16,33}, -{97,-16,34}, -{97,-16,35}, -{97,-16,36}, -{97,-16,37}, -{97,-16,38}, -{97,-16,39}, -{97,-16,40}, -{97,-16,41}, -{97,-16,42}, -{97,-16,43}, -{97,-16,44}, -{97,-16,45}, -{97,-16,46}, -{97,-16,47}, -{97,-16,48}, -{97,-16,49}, -{97,-16,50}, -{97,-16,51}, -{97,-16,52}, -{97,-16,53}, -{97,-16,54}, -{97,-16,55}, -{97,-16,56}, -{97,-16,57}, -{97,-16,58}, -{97,-16,59}, -{97,-16,60}, -{97,-16,61}, -{97,-16,62}, -{97,-16,63}, -{97,-16,64}, -{97,-15,-1}, -{97,-15,0}, -{97,-15,1}, -{97,-15,2}, -{97,-15,3}, -{97,-15,4}, -{97,-15,5}, -{97,-15,6}, -{97,-15,7}, -{97,-15,8}, -{97,-15,9}, -{97,-15,10}, -{97,-15,11}, -{97,-15,12}, -{97,-15,13}, -{97,-15,14}, -{97,-15,15}, -{97,-15,16}, -{97,-15,17}, -{97,-15,18}, -{97,-15,19}, -{97,-15,20}, -{97,-15,21}, -{97,-15,22}, -{97,-15,23}, -{97,-15,24}, -{97,-15,25}, -{97,-15,26}, -{97,-15,27}, -{97,-15,28}, -{97,-15,29}, -{97,-15,30}, -{97,-15,31}, -{97,-15,32}, -{97,-15,33}, -{97,-15,34}, -{97,-15,35}, -{97,-15,36}, -{97,-15,37}, -{97,-15,38}, -{97,-15,39}, -{97,-15,40}, -{97,-15,41}, -{97,-15,42}, -{97,-15,43}, -{97,-15,44}, -{97,-15,45}, -{97,-15,46}, -{97,-15,47}, -{97,-15,48}, -{97,-15,49}, -{97,-15,50}, -{97,-15,51}, -{97,-15,52}, -{97,-15,53}, -{97,-15,54}, -{97,-15,55}, -{97,-15,56}, -{97,-15,57}, -{97,-15,58}, -{97,-15,59}, -{97,-14,-4}, -{97,-14,-3}, -{97,-14,-2}, -{97,-14,-1}, -{97,-14,0}, -{97,-14,1}, -{97,-14,2}, -{97,-14,3}, -{97,-14,4}, -{97,-14,5}, -{97,-14,6}, -{97,-14,7}, -{97,-14,8}, -{97,-14,9}, -{97,-14,10}, -{97,-14,11}, -{97,-14,12}, -{97,-14,13}, -{97,-14,14}, -{97,-14,15}, -{97,-14,16}, -{97,-14,17}, -{97,-14,18}, -{97,-14,19}, -{97,-14,20}, -{97,-14,21}, -{97,-14,22}, -{97,-14,23}, -{97,-14,24}, -{97,-14,25}, -{97,-14,26}, -{97,-14,27}, -{97,-14,28}, -{97,-14,29}, -{97,-14,30}, -{97,-14,31}, -{97,-14,32}, -{97,-14,33}, -{97,-14,34}, -{97,-14,35}, -{97,-14,36}, -{97,-14,37}, -{97,-14,38}, -{97,-14,39}, -{97,-14,40}, -{97,-14,41}, -{97,-14,42}, -{97,-14,43}, -{97,-14,44}, -{97,-14,45}, -{97,-14,46}, -{97,-14,47}, -{97,-14,48}, -{97,-14,49}, -{97,-14,50}, -{97,-14,51}, -{97,-14,52}, -{97,-14,53}, -{97,-14,54}, -{97,-14,55}, -{97,-13,-4}, -{97,-13,-3}, -{97,-13,-2}, -{97,-13,-1}, -{97,-13,0}, -{97,-13,1}, -{97,-13,2}, -{97,-13,3}, -{97,-13,4}, -{97,-13,5}, -{97,-13,6}, -{97,-13,7}, -{97,-13,8}, -{97,-13,9}, -{97,-13,10}, -{97,-13,11}, -{97,-13,12}, -{97,-13,13}, -{97,-13,14}, -{97,-13,15}, -{97,-13,16}, -{97,-13,17}, -{97,-13,18}, -{97,-13,19}, -{97,-13,20}, -{97,-13,21}, -{97,-13,22}, -{97,-13,23}, -{97,-13,24}, -{97,-13,25}, -{97,-13,26}, -{97,-13,27}, -{97,-13,28}, -{97,-13,29}, -{97,-13,30}, -{97,-13,31}, -{97,-13,32}, -{97,-13,33}, -{97,-13,34}, -{97,-13,35}, -{97,-13,36}, -{97,-13,37}, -{97,-13,38}, -{97,-13,39}, -{97,-13,40}, -{97,-13,41}, -{97,-13,42}, -{97,-13,43}, -{97,-13,44}, -{97,-13,45}, -{97,-13,46}, -{97,-13,47}, -{97,-13,48}, -{97,-13,49}, -{97,-13,50}, -{97,-13,51}, -{97,-12,-4}, -{97,-12,-3}, -{97,-12,-2}, -{97,-12,-1}, -{97,-12,0}, -{97,-12,1}, -{97,-12,2}, -{97,-12,3}, -{97,-12,4}, -{97,-12,5}, -{97,-12,6}, -{97,-12,7}, -{97,-12,8}, -{97,-12,9}, -{97,-12,10}, -{97,-12,11}, -{97,-12,12}, -{97,-12,13}, -{97,-12,14}, -{97,-12,15}, -{97,-12,16}, -{97,-12,17}, -{97,-12,18}, -{97,-12,19}, -{97,-12,20}, -{97,-12,21}, -{97,-12,22}, -{97,-12,23}, -{97,-12,24}, -{97,-12,25}, -{97,-12,26}, -{97,-12,27}, -{97,-12,28}, -{97,-12,29}, -{97,-12,30}, -{97,-12,31}, -{97,-12,32}, -{97,-12,33}, -{97,-12,34}, -{97,-12,35}, -{97,-12,36}, -{97,-12,37}, -{97,-12,38}, -{97,-12,39}, -{97,-12,40}, -{97,-12,41}, -{97,-12,42}, -{97,-12,43}, -{97,-12,44}, -{97,-12,45}, -{97,-12,46}, -{97,-12,47}, -{97,-11,-4}, -{97,-11,-3}, -{97,-11,-2}, -{97,-11,-1}, -{97,-11,0}, -{97,-11,1}, -{97,-11,2}, -{97,-11,3}, -{97,-11,4}, -{97,-11,5}, -{97,-11,6}, -{97,-11,7}, -{97,-11,8}, -{97,-11,9}, -{97,-11,10}, -{97,-11,11}, -{97,-11,12}, -{97,-11,13}, -{97,-11,14}, -{97,-11,15}, -{97,-11,16}, -{97,-11,17}, -{97,-11,18}, -{97,-11,19}, -{97,-11,20}, -{97,-11,21}, -{97,-11,22}, -{97,-11,23}, -{97,-11,24}, -{97,-11,25}, -{97,-11,26}, -{97,-11,27}, -{97,-11,28}, -{97,-11,29}, -{97,-11,30}, -{97,-11,31}, -{97,-11,32}, -{97,-11,33}, -{97,-11,34}, -{97,-11,35}, -{97,-11,36}, -{97,-11,37}, -{97,-11,38}, -{97,-11,39}, -{97,-11,40}, -{97,-11,41}, -{97,-11,42}, -{97,-11,43}, -{97,-10,-4}, -{97,-10,-3}, -{97,-10,-2}, -{97,-10,-1}, -{97,-10,0}, -{97,-10,1}, -{97,-10,2}, -{97,-10,3}, -{97,-10,4}, -{97,-10,5}, -{97,-10,6}, -{97,-10,7}, -{97,-10,8}, -{97,-10,9}, -{97,-10,10}, -{97,-10,11}, -{97,-10,12}, -{97,-10,13}, -{97,-10,14}, -{97,-10,15}, -{97,-10,16}, -{97,-10,17}, -{97,-10,18}, -{97,-10,19}, -{97,-10,20}, -{97,-10,21}, -{97,-10,22}, -{97,-10,23}, -{97,-10,24}, -{97,-10,25}, -{97,-10,26}, -{97,-10,27}, -{97,-10,28}, -{97,-10,29}, -{97,-10,30}, -{97,-10,31}, -{97,-10,32}, -{97,-10,33}, -{97,-10,34}, -{97,-10,35}, -{97,-10,36}, -{97,-10,37}, -{97,-10,38}, -{97,-10,39}, -{97,-10,40}, -{97,-9,-4}, -{97,-9,-3}, -{97,-9,-2}, -{97,-9,-1}, -{97,-9,0}, -{97,-9,1}, -{97,-9,2}, -{97,-9,3}, -{97,-9,4}, -{97,-9,5}, -{97,-9,6}, -{97,-9,7}, -{97,-9,8}, -{97,-9,9}, -{97,-9,10}, -{97,-9,11}, -{97,-9,12}, -{97,-9,13}, -{97,-9,14}, -{97,-9,15}, -{97,-9,16}, -{97,-9,17}, -{97,-9,18}, -{97,-9,19}, -{97,-9,20}, -{97,-9,21}, -{97,-9,22}, -{97,-9,23}, -{97,-9,24}, -{97,-9,25}, -{97,-9,26}, -{97,-9,27}, -{97,-9,28}, -{97,-9,29}, -{97,-9,30}, -{97,-9,31}, -{97,-9,32}, -{97,-9,33}, -{97,-9,34}, -{97,-9,35}, -{97,-9,36}, -{97,-8,-4}, -{97,-8,-3}, -{97,-8,-2}, -{97,-8,-1}, -{97,-8,0}, -{97,-8,1}, -{97,-8,2}, -{97,-8,3}, -{97,-8,4}, -{97,-8,5}, -{97,-8,6}, -{97,-8,7}, -{97,-8,8}, -{97,-8,9}, -{97,-8,10}, -{97,-8,11}, -{97,-8,12}, -{97,-8,13}, -{97,-8,14}, -{97,-8,15}, -{97,-8,16}, -{97,-8,17}, -{97,-8,18}, -{97,-8,19}, -{97,-8,20}, -{97,-8,21}, -{97,-8,22}, -{97,-8,23}, -{97,-8,24}, -{97,-8,25}, -{97,-8,26}, -{97,-8,27}, -{97,-8,28}, -{97,-8,29}, -{97,-8,30}, -{97,-8,31}, -{97,-8,32}, -{97,-8,33}, -{97,-7,-4}, -{97,-7,-3}, -{97,-7,-2}, -{97,-7,-1}, -{97,-7,0}, -{97,-7,1}, -{97,-7,2}, -{97,-7,3}, -{97,-7,4}, -{97,-7,5}, -{97,-7,6}, -{97,-7,7}, -{97,-7,8}, -{97,-7,9}, -{97,-7,10}, -{97,-7,11}, -{97,-7,12}, -{97,-7,13}, -{97,-7,14}, -{97,-7,15}, -{97,-7,16}, -{97,-7,17}, -{97,-7,18}, -{97,-7,19}, -{97,-7,20}, -{97,-7,21}, -{97,-7,22}, -{97,-7,23}, -{97,-7,24}, -{97,-7,25}, -{97,-7,26}, -{97,-7,27}, -{97,-7,28}, -{97,-7,29}, -{97,-7,30}, -{97,-6,-4}, -{97,-6,-3}, -{97,-6,-2}, -{97,-6,-1}, -{97,-6,0}, -{97,-6,1}, -{97,-6,2}, -{97,-6,3}, -{97,-6,4}, -{97,-6,5}, -{97,-6,6}, -{97,-6,7}, -{97,-6,8}, -{97,-6,9}, -{97,-6,10}, -{97,-6,11}, -{97,-6,12}, -{97,-6,13}, -{97,-6,14}, -{97,-6,15}, -{97,-6,16}, -{97,-6,17}, -{97,-6,18}, -{97,-6,19}, -{97,-6,20}, -{97,-6,21}, -{97,-6,22}, -{97,-6,23}, -{97,-6,24}, -{97,-6,25}, -{97,-6,26}, -{97,-6,27}, -{97,-5,-4}, -{97,-5,-3}, -{97,-5,-2}, -{97,-5,-1}, -{97,-5,0}, -{97,-5,1}, -{97,-5,2}, -{97,-5,3}, -{97,-5,4}, -{97,-5,5}, -{97,-5,6}, -{97,-5,7}, -{97,-5,8}, -{97,-5,9}, -{97,-5,10}, -{97,-5,11}, -{97,-5,12}, -{97,-5,13}, -{97,-5,14}, -{97,-5,15}, -{97,-5,16}, -{97,-5,17}, -{97,-5,18}, -{97,-5,19}, -{97,-5,20}, -{97,-5,21}, -{97,-5,22}, -{97,-5,23}, -{97,-5,24}, -{97,-4,-4}, -{97,-4,-3}, -{97,-4,-2}, -{97,-4,-1}, -{97,-4,0}, -{97,-4,1}, -{97,-4,2}, -{97,-4,3}, -{97,-4,4}, -{97,-4,5}, -{97,-4,6}, -{97,-4,7}, -{97,-4,8}, -{97,-4,9}, -{97,-4,10}, -{97,-4,11}, -{97,-4,12}, -{97,-4,13}, -{97,-4,14}, -{97,-4,15}, -{97,-4,16}, -{97,-4,17}, -{97,-4,18}, -{97,-4,19}, -{97,-4,20}, -{97,-4,21}, -{97,-3,-4}, -{97,-3,-3}, -{97,-3,-2}, -{97,-3,-1}, -{97,-3,0}, -{97,-3,1}, -{97,-3,2}, -{97,-3,3}, -{97,-3,4}, -{97,-3,5}, -{97,-3,6}, -{97,-3,7}, -{97,-3,8}, -{97,-3,9}, -{97,-3,10}, -{97,-3,11}, -{97,-3,12}, -{97,-3,13}, -{97,-3,14}, -{97,-3,15}, -{97,-3,16}, -{97,-3,17}, -{97,-3,18}, -{97,-2,-4}, -{97,-2,-3}, -{97,-2,-2}, -{97,-2,-1}, -{97,-2,0}, -{97,-2,1}, -{97,-2,2}, -{97,-2,3}, -{97,-2,4}, -{97,-2,5}, -{97,-2,6}, -{97,-2,7}, -{97,-2,8}, -{97,-2,9}, -{97,-2,10}, -{97,-2,11}, -{97,-2,12}, -{97,-2,13}, -{97,-2,14}, -{97,-2,15}, -{97,-2,16}, -{97,-1,-4}, -{97,-1,-3}, -{97,-1,-2}, -{97,-1,-1}, -{97,-1,0}, -{97,-1,1}, -{97,-1,2}, -{97,-1,3}, -{97,-1,4}, -{97,-1,5}, -{97,-1,6}, -{97,-1,7}, -{97,-1,8}, -{97,-1,9}, -{97,-1,10}, -{97,-1,11}, -{97,-1,12}, -{97,-1,13}, -{97,0,-4}, -{97,0,-3}, -{97,0,-2}, -{97,0,-1}, -{97,0,0}, -{97,0,1}, -{97,0,2}, -{97,0,3}, -{97,0,4}, -{97,0,5}, -{97,0,6}, -{97,0,7}, -{97,0,8}, -{97,0,9}, -{97,0,10}, -{97,1,-4}, -{97,1,-3}, -{97,1,-2}, -{97,1,-1}, -{97,1,0}, -{97,1,1}, -{97,1,2}, -{97,1,3}, -{97,1,4}, -{97,1,5}, -{97,1,6}, -{97,1,7}, -{97,1,8}, -{97,2,-4}, -{97,2,-3}, -{97,2,-2}, -{97,2,-1}, -{97,2,0}, -{97,2,1}, -{97,2,2}, -{97,2,3}, -{97,2,4}, -{97,2,5}, -{97,3,-4}, -{97,3,-3}, -{97,3,-2}, -{97,3,-1}, -{97,3,0}, -{97,3,1}, -{97,3,2}, -{97,3,3}, -{97,4,-4}, -{97,4,-3}, -{97,4,-2}, -{97,4,-1}, -{97,4,0}, -{97,4,1}, -{97,5,-4}, -{97,5,-3}, -{97,5,-2}, -{97,6,-4}, -{98,-15,51}, -{98,-15,52}, -{98,-14,38}, -{98,-14,39}, -{98,-14,40}, -{98,-14,41}, -{98,-14,42}, -{98,-14,43}, -{98,-14,44}, -{98,-14,45}, -{98,-14,46}, -{98,-14,47}, -{98,-14,48}, -{98,-13,27}, -{98,-13,28}, -{98,-13,29}, -{98,-13,30}, -{98,-13,31}, -{98,-13,32}, -{98,-13,33}, -{98,-13,34}, -{98,-13,35}, -{98,-13,36}, -{98,-13,37}, -{98,-13,38}, -{98,-13,39}, -{98,-13,40}, -{98,-13,41}, -{98,-13,42}, -{98,-13,43}, -{98,-13,44}, -{98,-13,45}, -{98,-12,17}, -{98,-12,18}, -{98,-12,19}, -{98,-12,20}, -{98,-12,21}, -{98,-12,22}, -{98,-12,23}, -{98,-12,24}, -{98,-12,25}, -{98,-12,26}, -{98,-12,27}, -{98,-12,28}, -{98,-12,29}, -{98,-12,30}, -{98,-12,31}, -{98,-12,32}, -{98,-12,33}, -{98,-12,34}, -{98,-12,35}, -{98,-12,36}, -{98,-12,37}, -{98,-12,38}, -{98,-12,39}, -{98,-12,40}, -{98,-12,41}, -{98,-11,8}, -{98,-11,9}, -{98,-11,10}, -{98,-11,11}, -{98,-11,12}, -{98,-11,13}, -{98,-11,14}, -{98,-11,15}, -{98,-11,16}, -{98,-11,17}, -{98,-11,18}, -{98,-11,19}, -{98,-11,20}, -{98,-11,21}, -{98,-11,22}, -{98,-11,23}, -{98,-11,24}, -{98,-11,25}, -{98,-11,26}, -{98,-11,27}, -{98,-11,28}, -{98,-11,29}, -{98,-11,30}, -{98,-11,31}, -{98,-11,32}, -{98,-11,33}, -{98,-11,34}, -{98,-11,35}, -{98,-11,36}, -{98,-11,37}, -{98,-11,38}, -{98,-10,0}, -{98,-10,1}, -{98,-10,2}, -{98,-10,3}, -{98,-10,4}, -{98,-10,5}, -{98,-10,6}, -{98,-10,7}, -{98,-10,8}, -{98,-10,9}, -{98,-10,10}, -{98,-10,11}, -{98,-10,12}, -{98,-10,13}, -{98,-10,14}, -{98,-10,15}, -{98,-10,16}, -{98,-10,17}, -{98,-10,18}, -{98,-10,19}, -{98,-10,20}, -{98,-10,21}, -{98,-10,22}, -{98,-10,23}, -{98,-10,24}, -{98,-10,25}, -{98,-10,26}, -{98,-10,27}, -{98,-10,28}, -{98,-10,29}, -{98,-10,30}, -{98,-10,31}, -{98,-10,32}, -{98,-10,33}, -{98,-10,34}, -{98,-9,-3}, -{98,-9,-2}, -{98,-9,-1}, -{98,-9,0}, -{98,-9,1}, -{98,-9,2}, -{98,-9,3}, -{98,-9,4}, -{98,-9,5}, -{98,-9,6}, -{98,-9,7}, -{98,-9,8}, -{98,-9,9}, -{98,-9,10}, -{98,-9,11}, -{98,-9,12}, -{98,-9,13}, -{98,-9,14}, -{98,-9,15}, -{98,-9,16}, -{98,-9,17}, -{98,-9,18}, -{98,-9,19}, -{98,-9,20}, -{98,-9,21}, -{98,-9,22}, -{98,-9,23}, -{98,-9,24}, -{98,-9,25}, -{98,-9,26}, -{98,-9,27}, -{98,-9,28}, -{98,-9,29}, -{98,-9,30}, -{98,-9,31}, -{98,-8,-3}, -{98,-8,-2}, -{98,-8,-1}, -{98,-8,0}, -{98,-8,1}, -{98,-8,2}, -{98,-8,3}, -{98,-8,4}, -{98,-8,5}, -{98,-8,6}, -{98,-8,7}, -{98,-8,8}, -{98,-8,9}, -{98,-8,10}, -{98,-8,11}, -{98,-8,12}, -{98,-8,13}, -{98,-8,14}, -{98,-8,15}, -{98,-8,16}, -{98,-8,17}, -{98,-8,18}, -{98,-8,19}, -{98,-8,20}, -{98,-8,21}, -{98,-8,22}, -{98,-8,23}, -{98,-8,24}, -{98,-8,25}, -{98,-8,26}, -{98,-8,27}, -{98,-8,28}, -{98,-7,-3}, -{98,-7,-2}, -{98,-7,-1}, -{98,-7,0}, -{98,-7,1}, -{98,-7,2}, -{98,-7,3}, -{98,-7,4}, -{98,-7,5}, -{98,-7,6}, -{98,-7,7}, -{98,-7,8}, -{98,-7,9}, -{98,-7,10}, -{98,-7,11}, -{98,-7,12}, -{98,-7,13}, -{98,-7,14}, -{98,-7,15}, -{98,-7,16}, -{98,-7,17}, -{98,-7,18}, -{98,-7,19}, -{98,-7,20}, -{98,-7,21}, -{98,-7,22}, -{98,-7,23}, -{98,-7,24}, -{98,-7,25}, -{98,-6,-3}, -{98,-6,-2}, -{98,-6,-1}, -{98,-6,0}, -{98,-6,1}, -{98,-6,2}, -{98,-6,3}, -{98,-6,4}, -{98,-6,5}, -{98,-6,6}, -{98,-6,7}, -{98,-6,8}, -{98,-6,9}, -{98,-6,10}, -{98,-6,11}, -{98,-6,12}, -{98,-6,13}, -{98,-6,14}, -{98,-6,15}, -{98,-6,16}, -{98,-6,17}, -{98,-6,18}, -{98,-6,19}, -{98,-6,20}, -{98,-6,21}, -{98,-6,22}, -{98,-5,-3}, -{98,-5,-2}, -{98,-5,-1}, -{98,-5,0}, -{98,-5,1}, -{98,-5,2}, -{98,-5,3}, -{98,-5,4}, -{98,-5,5}, -{98,-5,6}, -{98,-5,7}, -{98,-5,8}, -{98,-5,9}, -{98,-5,10}, -{98,-5,11}, -{98,-5,12}, -{98,-5,13}, -{98,-5,14}, -{98,-5,15}, -{98,-5,16}, -{98,-5,17}, -{98,-5,18}, -{98,-5,19}, -{98,-5,20}, -{98,-4,-3}, -{98,-4,-2}, -{98,-4,-1}, -{98,-4,0}, -{98,-4,1}, -{98,-4,2}, -{98,-4,3}, -{98,-4,4}, -{98,-4,5}, -{98,-4,6}, -{98,-4,7}, -{98,-4,8}, -{98,-4,9}, -{98,-4,10}, -{98,-4,11}, -{98,-4,12}, -{98,-4,13}, -{98,-4,14}, -{98,-4,15}, -{98,-4,16}, -{98,-4,17}, -{98,-3,-3}, -{98,-3,-2}, -{98,-3,-1}, -{98,-3,0}, -{98,-3,1}, -{98,-3,2}, -{98,-3,3}, -{98,-3,4}, -{98,-3,5}, -{98,-3,6}, -{98,-3,7}, -{98,-3,8}, -{98,-3,9}, -{98,-3,10}, -{98,-3,11}, -{98,-3,12}, -{98,-3,13}, -{98,-3,14}, -{98,-2,-3}, -{98,-2,-2}, -{98,-2,-1}, -{98,-2,0}, -{98,-2,1}, -{98,-2,2}, -{98,-2,3}, -{98,-2,4}, -{98,-2,5}, -{98,-2,6}, -{98,-2,7}, -{98,-2,8}, -{98,-2,9}, -{98,-2,10}, -{98,-2,11}, -{98,-2,12}, -{98,-1,-3}, -{98,-1,-2}, -{98,-1,-1}, -{98,-1,0}, -{98,-1,1}, -{98,-1,2}, -{98,-1,3}, -{98,-1,4}, -{98,-1,5}, -{98,-1,6}, -{98,-1,7}, -{98,-1,8}, -{98,-1,9}, -{98,0,-3}, -{98,0,-2}, -{98,0,-1}, -{98,0,0}, -{98,0,1}, -{98,0,2}, -{98,0,3}, -{98,0,4}, -{98,0,5}, -{98,0,6}, -{98,0,7}, -{98,1,-3}, -{98,1,-2}, -{98,1,-1}, -{98,1,0}, -{98,1,1}, -{98,1,2}, -{98,1,3}, -{98,1,4}, -{98,2,-3}, -{98,2,-2}, -{98,2,-1}, -{98,2,0}, -{98,2,1}, -{98,2,2}, -{98,3,-3}, -{98,3,-2}, -{98,3,-1}, -{98,3,0}, -{98,4,-3}, -{99,-7,17}, -{99,-7,18}, -{99,-7,19}, -{99,-7,20}, -{99,-7,21}, -{99,-6,8}, -{99,-6,9}, -{99,-6,10}, -{99,-6,11}, -{99,-6,12}, -{99,-6,13}, -{99,-6,14}, -{99,-6,15}, -{99,-6,16}, -{99,-6,17}, -{99,-6,18}, -{99,-5,0}, -{99,-5,1}, -{99,-5,2}, -{99,-5,3}, -{99,-5,4}, -{99,-5,5}, -{99,-5,6}, -{99,-5,7}, -{99,-5,8}, -{99,-5,9}, -{99,-5,10}, -{99,-5,11}, -{99,-5,12}, -{99,-5,13}, -{99,-5,14}, -{99,-5,15}, -{99,-5,16}, -{99,-4,-1}, -{99,-4,0}, -{99,-4,1}, -{99,-4,2}, -{99,-4,3}, -{99,-4,4}, -{99,-4,5}, -{99,-4,6}, -{99,-4,7}, -{99,-4,8}, -{99,-4,9}, -{99,-4,10}, -{99,-4,11}, -{99,-4,12}, -{99,-4,13}, -{99,-3,-1}, -{99,-3,0}, -{99,-3,1}, -{99,-3,2}, -{99,-3,3}, -{99,-3,4}, -{99,-3,5}, -{99,-3,6}, -{99,-3,7}, -{99,-3,8}, -{99,-3,9}, -{99,-3,10}, -{99,-2,-1}, -{99,-2,0}, -{99,-2,1}, -{99,-2,2}, -{99,-2,3}, -{99,-2,4}, -{99,-2,5}, -{99,-2,6}, -{99,-2,7}, -{99,-2,8}, -{99,-1,-1}, -{99,-1,0}, -{99,-1,1}, -{99,-1,2}, -{99,-1,3}, -{99,-1,4}, -{99,-1,5}, -{99,-1,6}, -{99,0,-1}, -{99,0,0}, -{99,0,1}, -{99,0,2}, -{99,0,3}, -{99,1,-1}, -{99,1,0}, -{99,1,1}, -{99,2,-1}, -{100,0,0}}; - -int lab_gamut_data_size = sizeof(lab_gamut_data)/sizeof(char_color_lab); diff --git a/internal/ccall/edgepaint/lab_gamut.h b/internal/ccall/edgepaint/lab_gamut.h deleted file mode 100644 index 63f157e..0000000 --- a/internal/ccall/edgepaint/lab_gamut.h +++ /dev/null @@ -1,37 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef LAB_GAMUT_H -#define LAB_GAMUT_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - signed char l, a, b;/* l: 0 to 100, a,b: -128 tp 128 */ -} char_color_lab; - -/*visual studio*/ -#if defined(WIN32) && !defined(LAB_GAMUT_EXPORTS) -#define extern __declspec(dllimport) -#endif -/*end visual studio*/ - -extern const char_color_lab lab_gamut_data[]; -extern int lab_gamut_data_size; - -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/edgepaint/node_distinct_coloring.c b/internal/ccall/edgepaint/node_distinct_coloring.c deleted file mode 100644 index b3d8295..0000000 --- a/internal/ccall/edgepaint/node_distinct_coloring.c +++ /dev/null @@ -1,318 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#include "general.h" -#include "SparseMatrix.h" -#include "QuadTree.h" -#include "node_distinct_coloring.h" -#include "lab.h" -#include "furtherest_point.h" -#include "color_palette.h" - -#ifndef WIN32 -inline -#endif -static real mydist(int dim, real *x, real *y){ - int k; - real d = 0; - for (k = 0; k < dim; k++) d += (x[k] - y[k])*(x[k]-y[k]); - return sqrt(d); -} - - -static void node_distinct_coloring_internal2(int scheme, QuadTree qt, int weightedQ, SparseMatrix A, int cdim, real accuracy, int iter_max, int seed, real *colors, - real *color_diff0, real *color_diff_sum0){ - /* here we assume the graph is connected. And that the matrix is symmetric */ - int i, j, *ia, *ja, n, k = 0; - int max_level; - real center[3]; - real width; - real *a = NULL; - real *x; - real dist_max; - real color_diff = 0, color_diff_old; - real color_diff_sum = 0, color_diff_sum_old, *cc; - int iter = 0; - real cspace_size = 0.7; - real red[3], black[3], min; - int flag = 0, imin; - color_lab lab; - color_rgb rgb; - real *wgt = NULL; - //int iter2 = 0, iter_max2; - - assert(accuracy > 0); - max_level = MAX(1, -log(accuracy)/log(2.)); - max_level = MIN(30, max_level); - - rgb.r = 255*0.5; rgb.g = 0; rgb.b = 0; - lab = RGB2LAB(rgb); - red[0] = lab.l; red[1] = lab.a; red[2] = lab.b; - - n = A->m; - if (n == 1){ - if (scheme == COLOR_LAB){ - assert(qt); - QuadTree_get_nearest(qt, black, colors, &imin, &min, &flag); - assert(!flag); - LAB2RGB_real_01(colors); - *color_diff0 = 1000; *color_diff_sum0 = 1000; - } else { - for (i = 0; i < cdim; i++) colors[i] = 0; - *color_diff0 = sqrt(cdim); *color_diff_sum0 = sqrt(cdim); - } - return; - } else if (n == 2){ - if (scheme == COLOR_LAB){ - assert(qt); - QuadTree_get_nearest(qt, black, colors, &imin, &min, &flag); - assert(!flag); - LAB2RGB_real_01(colors); - - QuadTree_get_nearest(qt, red, colors+cdim, &imin, &min, &flag); - assert(!flag); - LAB2RGB_real_01(colors+cdim); - *color_diff0 = 1000; *color_diff_sum0 = 1000; - - } else { - for (i = 0; i < cdim; i++) colors[i] = 0; - for (i = 0; i < cdim; i++) colors[cdim+i] = 0; - colors[cdim] = 0.5; - *color_diff0 = sqrt(cdim); *color_diff_sum0 = sqrt(cdim); - } - return; - } - assert(n == A->m); - ia = A->ia; - ja = A->ja; - if (A->type == MATRIX_TYPE_REAL && A->a){ - a = (real*) A->a; - } - - /* cube [0, cspace_size]^3: only uised if not LAB */ - center[0] = center[1] = center[2] = cspace_size*0.5; - width = cspace_size*0.5; - - /* randomly assign colors first */ - srand(seed); - for (i = 0; i < n*cdim; i++) colors[i] = cspace_size*drand(); - - /* better way... not using it for now till paper is out */ - /* - if (scheme != COLOR_LAB){ - for (i = 0; i < n*cdim; i++) colors[i] = cspace_size*drand(); - } else { - for (i = 0; i < n; i++) { - colors[3*i] = 100*drand(); - colors[3*i+1] = 256*drand() - 128; - colors[3*i+2] = 256*drand() - 128; - } - } - */ - - x = MALLOC(sizeof(real)*cdim*n); - if (weightedQ) wgt = MALLOC(sizeof(real)*n); - - color_diff = 0; color_diff_old = -1; - color_diff_sum = 0; color_diff_sum_old = -1; - - /* - {FILE *fp; - char buf[10000]; - fp = fopen("/tmp/count","r"); - fgets(buf, 10000, fp); - sscanf(buf,"%d",&iter_max2); - fprintf(stderr,"count=%d\n", iter_max2); - } - */ - - while (iter++ < iter_max && (color_diff > color_diff_old || (color_diff == color_diff_old && color_diff_sum > color_diff_sum_old))){ - color_diff_old = color_diff; - color_diff_sum_old = color_diff_sum; - for (i = 0; i < n; i++){ - // if (iter2++ >= iter_max2) goto CONT; - k = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - MEMCPY(&(x[k*cdim]), &(colors[ja[j]*cdim]), sizeof(real)*cdim); - if (wgt && a) wgt[k] = a[j]; - k++; - } - cc = &(colors[i*cdim]); - if (scheme == COLOR_LAB){ - furtherest_point_in_list(k, cdim, wgt, x, qt, max_level, mydist, &dist_max, &cc); - } else if (scheme == COLOR_RGB || scheme == COLOR_GRAY){ - furtherest_point(k, cdim, wgt, x, center, width, max_level, mydist, &dist_max, &cc); - } else { - assert(0); - } - if (i == 0){ - color_diff = dist_max; - color_diff_sum = dist_max; - } else { - color_diff = MIN(dist_max, color_diff); - color_diff_sum += dist_max; - } - } - - if (Verbose) fprintf(stderr,"iter ---- %d ---, color_diff = %f, color_diff_sum = %f\n", iter, color_diff, color_diff_sum); - } - - // CONT: - - if (scheme == COLOR_LAB){ - /* convert from LAB to RGB */ - color_rgb rgb; - color_lab lab; - for (i = 0; i < n; i++){ - lab = color_lab_init(colors[i*cdim], colors[i*cdim+1], colors[i*cdim+2]); - rgb = LAB2RGB(lab); - colors[i*cdim] = (rgb.r)/255; - colors[i*cdim+1] = (rgb.g)/255; - colors[i*cdim+2] = (rgb.b)/255; - } - } - *color_diff0 = color_diff; - *color_diff_sum0 = color_diff_sum; - FREE(x); - -} - -static void node_distinct_coloring_internal(int scheme, QuadTree qt, int weightedQ, SparseMatrix A, int cdim, real accuracy, int iter_max, int seed, real *colors, real *color_diff0, real *color_diff_sum0){ - int i; - if (seed < 0) { - /* do multiple iterations and pick the best */ - int iter, seed_max = -1; - real color_diff_max = -1; - srand(123); - iter = -seed; - for (i = 0; i < iter; i++){ - seed = irand(100000); - node_distinct_coloring_internal2(scheme, qt, weightedQ, A, cdim, accuracy, iter_max, seed, colors, color_diff0, color_diff_sum0); - if (color_diff_max < *color_diff0){ - seed_max = seed; color_diff_max = *color_diff0; - } - } - seed = seed_max; - } - node_distinct_coloring_internal2(scheme, qt, weightedQ, A, cdim, accuracy, iter_max, seed, colors, color_diff0, color_diff_sum0); - -} - -void node_distinct_coloring(char *color_scheme, char *lightness, int weightedQ, SparseMatrix A0, real accuracy, int iter_max, int seed, int *cdim0, real **colors, real *color_diff0, - real *color_diff_sum0, int *flag){ - /* - for a graph A, get a distinctive color of its nodes so that the color distance among all neighboring nodes are maximized. Here - color distance on a node is defined as the minimum of color differences between a node and its neighbors (or the minimum of weighted color differences if weightedQ = true, - where weights are stored as entries of A0. - accuracy is the threshold given so that when finding the coloring for each node, the optimal is - with in "accuracy" of the true global optimal. - color_scheme: rgb, gray, lab, or one of the color palettes in color_palettes.h, or a list of hex rgb colors separaterd by comma like "#ff0000,#00ff00" - lightness: of the form 0,70, specifying the range of lightness of LAB color. Ignored if scheme is not COLOR_LAB. - . if NULL, 0,70 is assumed - A: the graph of n nodes - accuracy: how accurate to find the optimal - seed: random_seed. If negative, consider -seed as the number of random start iterations - iter_max: max number of - cdim: dimension of the color space - color: On input an array of size n*cdim, if NULL, will be allocated. On exit the final color assignment for node i is [cdim*i,cdim*(i+1)), in RGB (between 0 to 1) - color_diff: the minuimum color difference across all edges - color_diff_sum: the sum of min color dfference across all nodes - */ - SparseMatrix B, A = A0; - int ncomps, *comps = NULL, *comps_ptr = NULL; - int nn, n; - real *ctmp; - int i, j, jj, nnodes = 0; - real color_diff = 0, color_diff_sum = 0; - QuadTree qt = NULL; - int cdim; - int scheme = COLOR_LAB; - int maxcolors = 10000, max_qtree_level = 10, r, g, b; - char *color_list = NULL; - - if (iter_max < 0) iter_max = 100; - - color_list = color_palettes_get(color_scheme); - if (color_list) color_scheme = color_list; - - cdim = *cdim0 = 3; - if (strcmp(color_scheme, "lab") == 0){ - if (Verbose) fprintf(stderr,"lab\n"); - scheme = COLOR_LAB; - qt = lab_gamut_quadtree("lab_gamut", lightness, max_qtree_level); - if (!qt){ - fprintf(stderr," can not open file \"lab_gamut\"\n"); - *flag = ERROR_BAD_LAB_GAMUT_FILE; - return; - } - } else if (strcmp(color_scheme, "rgb") == 0){ - if (Verbose) fprintf(stderr,"rgb\n"); - scheme = COLOR_RGB; - } else if (strcmp(color_scheme, "gray") == 0){ - scheme = COLOR_GRAY; - cdim = *cdim0 = 1; - } else if (sscanf(color_scheme,"#%02X%02X%02X", &r, &g, &b) == 3 ){ - double *colors = NULL; - scheme = COLOR_LAB; - color_blend_rgb2lab(color_scheme, maxcolors, &colors); - assert(colors); - qt = QuadTree_new_from_point_list(cdim, maxcolors, max_qtree_level, colors, NULL); - assert(qt); - } else { - *flag = ERROR_BAD_COLOR_SCHEME; - return; - } - - - *color_diff0 = *color_diff_sum0 = -1; - if (accuracy <= 0) accuracy = 0.0001; - - *flag = 0; - n = A->m; - if (n != A->n) { - *flag = -1; - return; - } - - if (!(*colors)) { - *colors = MALLOC(sizeof(real)*cdim*n); - } - ctmp = MALLOC(sizeof(real)*cdim*n); - - B = SparseMatrix_symmetrize(A, FALSE); - A = B; - - SparseMatrix_weakly_connected_components(A, &ncomps, &comps, &comps_ptr); - - *color_diff_sum0 = 0; - for (i = 0; i < ncomps; i++){ - nn = comps_ptr[i+1] - comps_ptr[i]; - B = SparseMatrix_get_submatrix(A, nn, nn, &(comps[comps_ptr[i]]), &(comps[comps_ptr[i]])); - node_distinct_coloring_internal(scheme, qt, weightedQ, B, cdim, accuracy, iter_max, seed, ctmp, &color_diff, &color_diff_sum); - if (i == 0){ - *color_diff0 = color_diff; - } - *color_diff0 = MIN(*color_diff0, color_diff); - if (B->m > 2) { - *color_diff_sum0 = *color_diff_sum0 + color_diff_sum; - nnodes += B->m; - } - - for (j = comps_ptr[i]; j < comps_ptr[i+1]; j++){ - jj = j - comps_ptr[i]; - MEMCPY(&((*colors)[comps[j]*cdim]), &(ctmp[jj*cdim]), cdim*sizeof(real)); - } - SparseMatrix_delete(B); - } - FREE(ctmp); - *color_diff_sum0 /= nnodes; - - if (A != A0) SparseMatrix_delete(A); -} diff --git a/internal/ccall/edgepaint/node_distinct_coloring.h b/internal/ccall/edgepaint/node_distinct_coloring.h deleted file mode 100644 index c560b11..0000000 --- a/internal/ccall/edgepaint/node_distinct_coloring.h +++ /dev/null @@ -1,18 +0,0 @@ -/************************************************************************* - * Copyright (c) 2014 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef NODE_DISTINCT_COLORING_H -#define NODE_DISTINCT_COLORING_H - -enum {COLOR_RGB, COLOR_GRAY, COLOR_LAB}; -enum {ERROR_BAD_LAB_GAMUT_FILE = -10, ERROR_BAD_COLOR_SCHEME = -9}; -void node_distinct_coloring(char *color_scheme, char *lightness, int weightedQ, SparseMatrix A, real accuracy, int iter_max, int seed, int *cdim, real **colors, real *color_diff, real *color_diff_sum, int *flag); - -#endif diff --git a/internal/ccall/expat.c b/internal/ccall/expat.c deleted file mode 100644 index d2ea4a9..0000000 --- a/internal/ccall/expat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "expat_config.h" - -#include "../expat/xmlparse.c" -#include "../expat/xmltok.c" -#include "../expat/xmlrole.c" diff --git a/internal/ccall/expat.go b/internal/ccall/expat.go deleted file mode 100644 index 80cc5fe..0000000 --- a/internal/ccall/expat.go +++ /dev/null @@ -1,6 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -I../expat -*/ -import "C" diff --git a/internal/ccall/expr/dummy.go b/internal/ccall/expr/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/expr/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/expr/excc.c b/internal/ccall/expr/excc.c deleted file mode 100644 index f408bb8..0000000 --- a/internal/ccall/expr/excc.c +++ /dev/null @@ -1,743 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library C program generator - */ - -#define _EX_CC_PRIVATE_ \ - char* id; /* prefix + _ */ \ - int lastop; /* last op */ \ - int tmp; /* temp var index */ \ - Exccdisc_t* ccdisc; /* excc() discipline */ - -#include "exlib.h" -#include - -#define EX_CC_DUMP 0x8000 - -static const char quote[] = "\""; - -static void gen(Excc_t*, Exnode_t*); - -/* - * return C name for op - */ - -char* -exopname(int op) -{ - static char buf[16]; - - switch (op) - { - case '!': - return "!"; - case '%': - return "%"; - case '&': - return "&"; - case '(': - return "("; - case '*': - return "*"; - case '+': - return "+"; - case ',': - return ","; - case '-': - return "-"; - case '/': - return "/"; - case ':': - return ":"; - case '<': - return "<"; - case '=': - return "="; - case '>': - return ">"; - case '?': - return "?"; - case '^': - return "^"; - case '|': - return "|"; - case '~': - return "~"; - case AND: - return "&&"; - case EQ: - return "=="; - case GE: - return ">="; - case LE: - return "<="; - case LS: - return "<<"; - case NE: - return "!="; - case OR: - return "||"; - case RS: - return ">>"; - } - sfsprintf(buf, sizeof(buf) - 1, "(OP=%03o)", op); - return buf; -} - -/* - * generate printf() - */ - -static void -print(Excc_t* cc, Exnode_t* expr) -{ - register Print_t* x; - register int i; - - if ((x = expr->data.print.args)) - { - sfprintf(cc->ccdisc->text, "sfprintf(%s, \"%s", expr->data.print.descriptor->op == CONSTANT && expr->data.print.descriptor->data.constant.value.integer == 2 ? "sfstderr" : "sfstdout", fmtesq(x->format, quote)); - while ((x = x->next)) - sfprintf(cc->ccdisc->text, "%s", fmtesq(x->format, quote)); - sfprintf(cc->ccdisc->text, "\""); - for (x = expr->data.print.args; x; x = x->next) - { - if (x->arg) - { - for (i = 0; i < elementsof(x->param) && x->param[i]; i++) - { - sfprintf(cc->ccdisc->text, ", ("); - gen(cc, x->param[i]); - sfprintf(cc->ccdisc->text, ")"); - } - sfprintf(cc->ccdisc->text, ", ("); - gen(cc, x->arg); - sfprintf(cc->ccdisc->text, ")"); - } - } - sfprintf(cc->ccdisc->text, ");\n"); - } -} - -/* - * generate scanf() - */ - -static void -scan(Excc_t* cc, Exnode_t* expr) -{ - register Print_t* x; - register int i; - - if ((x = expr->data.print.args)) - { - sfprintf(cc->ccdisc->text, "sfscanf(sfstdin, \"%s", fmtesq(x->format, quote)); - while ((x = x->next)) - sfprintf(cc->ccdisc->text, "%s", fmtesq(x->format, quote)); - sfprintf(cc->ccdisc->text, "\""); - for (x = expr->data.print.args; x; x = x->next) - { - if (x->arg) - { - for (i = 0; i < elementsof(x->param) && x->param[i]; i++) - { - sfprintf(cc->ccdisc->text, ", &("); - gen(cc, x->param[i]); - sfprintf(cc->ccdisc->text, ")"); - } - sfprintf(cc->ccdisc->text, ", &("); - gen(cc, x->arg); - sfprintf(cc->ccdisc->text, ")"); - } - } - sfprintf(cc->ccdisc->text, ");\n"); - } -} - -/* - * internal excc - */ - -static void -gen(Excc_t* cc, register Exnode_t* expr) -{ - register Exnode_t* x; - register Exnode_t* y; - register int n; - register int m; - register int t; - char* s; - Extype_t* v; - Extype_t** p; - - if (!expr) - return; - if (expr->op == CALL) { - sfprintf(cc->ccdisc->text, "%s(", expr->data.call.procedure->name); - if (expr->data.call.args) - gen(cc, expr->data.call.args); - sfprintf(cc->ccdisc->text, ")"); - return; - } - x = expr->data.operand.left; - switch (expr->op) - { - case BREAK: - sfprintf(cc->ccdisc->text, "break;\n"); - return; - case CONTINUE: - sfprintf(cc->ccdisc->text, "continue;\n"); - return; - case CONSTANT: - switch (expr->type) - { - case FLOATING: - sfprintf(cc->ccdisc->text, "%g", expr->data.constant.value.floating); - break; - case STRING: - sfprintf(cc->ccdisc->text, "\"%s\"", fmtesq(expr->data.constant.value.string, quote)); - break; - case UNSIGNED: - sfprintf(cc->ccdisc->text, "%I*u", sizeof(expr->data.constant.value.integer), expr->data.constant.value.integer); - break; - default: - sfprintf(cc->ccdisc->text, "%I*d", sizeof(expr->data.constant.value.integer), expr->data.constant.value.integer); - break; - } - return; - case DEC: - sfprintf(cc->ccdisc->text, "%s--", x->data.variable.symbol->name); - return; - case DYNAMIC: - sfprintf(cc->ccdisc->text, "%s", expr->data.variable.symbol->name); - return; - case EXIT: - sfprintf(cc->ccdisc->text, "exit("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ");\n"); - return; - case FUNCTION: - gen(cc, x); - sfprintf(cc->ccdisc->text, "("); - if ((y = expr->data.operand.right)) { - gen(cc, y); - } - sfprintf(cc->ccdisc->text, ")"); - return; - case RAND: - sfprintf(cc->ccdisc->text, "rand();\n"); - return; - case SRAND: - if (expr->binary) { - sfprintf(cc->ccdisc->text, "srand("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ");\n"); - } else - sfprintf(cc->ccdisc->text, "srand();\n"); - return; - case GSUB: - case SUB: - case SUBSTR: - s = (expr->op == GSUB ? "gsub(" : expr->op == SUB ? "sub(" : "substr("); - sfprintf(cc->ccdisc->text, s); - gen(cc, expr->data.string.base); - sfprintf(cc->ccdisc->text, ", "); - gen(cc, expr->data.string.pat); - if (expr->data.string.repl) { - sfprintf(cc->ccdisc->text, ", "); - gen(cc, expr->data.string.repl); - } - sfprintf(cc->ccdisc->text, ")"); - return; - case IN_OP: - gen(cc, expr->data.variable.index); - sfprintf(cc->ccdisc->text, " in %s", expr->data.variable.symbol->name); - return; - case IF: - sfprintf(cc->ccdisc->text, "if ("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ") {\n"); - gen(cc, expr->data.operand.right->data.operand.left); - if (expr->data.operand.right->data.operand.right) - { - sfprintf(cc->ccdisc->text, "} else {\n"); - gen(cc, expr->data.operand.right->data.operand.right); - } - sfprintf(cc->ccdisc->text, "}\n"); - return; - case FOR: - sfprintf(cc->ccdisc->text, "for (;"); - gen(cc, x); - sfprintf(cc->ccdisc->text, ");"); - if (expr->data.operand.left) - { - sfprintf(cc->ccdisc->text, "("); - gen(cc, expr->data.operand.left); - sfprintf(cc->ccdisc->text, ")"); - } - sfprintf(cc->ccdisc->text, ") {"); - if (expr->data.operand.right) - gen(cc, expr->data.operand.right); - sfprintf(cc->ccdisc->text, "}"); - return; - case ID: - if (cc->ccdisc->ccf) - (*cc->ccdisc->ccf)(cc, expr, expr->data.variable.symbol, expr->data.variable.reference, expr->data.variable.index, cc->ccdisc); - else - sfprintf(cc->ccdisc->text, "%s", expr->data.variable.symbol->name); - return; - case INC: - sfprintf(cc->ccdisc->text, "%s++", x->data.variable.symbol->name); - return; - case ITERATE: - case ITERATER: - if (expr->op == DYNAMIC) - { - sfprintf(cc->ccdisc->text, "{ Exassoc_t* %stmp_%d;", cc->id, ++cc->tmp); - sfprintf(cc->ccdisc->text, "for (%stmp_%d = (Exassoc_t*)dtfirst(%s); %stmp_%d && (%s = %stmp_%d->name); %stmp_%d = (Exassoc_t*)dtnext(%s, %stmp_%d)) {", cc->id, cc->tmp, expr->data.generate.array->data.variable.symbol->name, cc->id, cc->tmp, expr->data.generate.index->name, cc->id, cc->tmp, cc->id, cc->tmp, expr->data.generate.array->data.variable.symbol->name, cc->id, cc->tmp); - gen(cc, expr->data.generate.statement); - sfprintf(cc->ccdisc->text, "} }"); - } - return; - case PRINT: - sfprintf(cc->ccdisc->text, "print"); - if (x) - gen(cc, x); - else - sfprintf(cc->ccdisc->text, "()"); - return; - case PRINTF: - print(cc, expr); - return; - case RETURN: - sfprintf(cc->ccdisc->text, "return("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ");\n"); - return; - case SCANF: - scan(cc, expr); - return; - case SPLIT: - case TOKENS: - if (expr->op == SPLIT) - sfprintf(cc->ccdisc->text, "split ("); - else - sfprintf(cc->ccdisc->text, "tokens ("); - gen(cc, expr->data.split.string); - sfprintf(cc->ccdisc->text, ", %s", expr->data.split.array->name); - if (expr->data.split.seps) { - sfprintf(cc->ccdisc->text, ","); - gen(cc, expr->data.split.seps); - } - sfprintf(cc->ccdisc->text, ")"); - return; - case SWITCH: - t = x->type; - sfprintf(cc->ccdisc->text, "{ %s %stmp_%d = ", extype(t), cc->id, ++cc->tmp); - gen(cc, x); - sfprintf(cc->ccdisc->text, ";"); - x = expr->data.operand.right; - y = x->data.select.statement; - n = 0; - while ((x = x->data.select.next)) - { - if (n) - sfprintf(cc->ccdisc->text, "else "); - if (!(p = x->data.select.constant)) - y = x->data.select.statement; - else - { - m = 0; - while ((v = *p++)) - { - if (m) - sfprintf(cc->ccdisc->text, "||"); - else - { - m = 1; - sfprintf(cc->ccdisc->text, "if ("); - } - if (t == STRING) - sfprintf(cc->ccdisc->text, "strmatch(%stmp_%d, \"%s\")", cc->id, cc->tmp, fmtesq(v->string, quote)); - else - { - sfprintf(cc->ccdisc->text, "%stmp_%d == ", cc->id, cc->tmp); - switch (t) - { - case INTEGER: - case UNSIGNED: - sfprintf(cc->ccdisc->text, "%I*u", sizeof(v->integer), v->integer); - break; - default: - sfprintf(cc->ccdisc->text, "%g", v->floating); - break; - } - } - } - sfprintf(cc->ccdisc->text, ") {"); - gen(cc, x->data.select.statement); - sfprintf(cc->ccdisc->text, "}"); - } - } - if (y) - { - if (n) - sfprintf(cc->ccdisc->text, "else "); - sfprintf(cc->ccdisc->text, "{"); - gen(cc, y); - sfprintf(cc->ccdisc->text, "}"); - } - sfprintf(cc->ccdisc->text, "}"); - return; - case UNSET: - sfprintf(cc->ccdisc->text, "unset(%s", expr->data.variable.symbol->name); - if (expr->data.variable.index) { - sfprintf(cc->ccdisc->text, ","); - gen(cc, expr->data.variable.index); - } - sfprintf(cc->ccdisc->text, ")"); - return; - case WHILE: - sfprintf(cc->ccdisc->text, "while ("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ") {"); - if (expr->data.operand.right) - gen(cc, expr->data.operand.right); - sfprintf(cc->ccdisc->text, "}"); - return; - case '#': - sfprintf(cc->ccdisc->text, "# %s", expr->data.variable.symbol->name); - return; - case '=': - sfprintf(cc->ccdisc->text, "(%s%s=", x->data.variable.symbol->name, expr->subop == '=' ? "" : exopname(expr->subop)); - gen(cc, expr->data.operand.right); - sfprintf(cc->ccdisc->text, ")"); - return; - case ';': - for (;;) - { - if (!(x = expr->data.operand.right)) - switch (cc->lastop = expr->data.operand.left->op) - { - case FOR: - case IF: - case PRINTF: - case PRINT: - case RETURN: - case WHILE: - break; - default: - sfprintf(cc->ccdisc->text, "_%svalue=", cc->id); - break; - } - gen(cc, expr->data.operand.left); - sfprintf(cc->ccdisc->text, ";\n"); - if (!(expr = x)) - break; - switch (cc->lastop = expr->op) - { - case ';': - continue; - case FOR: - case IF: - case PRINTF: - case PRINT: - case RETURN: - case WHILE: - break; - default: - sfprintf(cc->ccdisc->text, "_%svalue=", cc->id); - break; - } - gen(cc, expr); - sfprintf(cc->ccdisc->text, ";\n"); - break; - } - return; - case ',': - sfprintf(cc->ccdisc->text, "("); - gen(cc, x); - while ((expr = expr->data.operand.right) && expr->op == ',') - { - sfprintf(cc->ccdisc->text, "), ("); - gen(cc, expr->data.operand.left); - } - if (expr) - { - sfprintf(cc->ccdisc->text, "), ("); - gen(cc, expr); - } - sfprintf(cc->ccdisc->text, ")"); - return; - case '?': - sfprintf(cc->ccdisc->text, "("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ") ? ("); - gen(cc, expr->data.operand.right->data.operand.left); - sfprintf(cc->ccdisc->text, ") : ("); - gen(cc, expr->data.operand.right->data.operand.right); - sfprintf(cc->ccdisc->text, ")"); - return; - case AND: - sfprintf(cc->ccdisc->text, "("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ") && ("); - gen(cc, expr->data.operand.right); - sfprintf(cc->ccdisc->text, ")"); - return; - case OR: - sfprintf(cc->ccdisc->text, "("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ") || ("); - gen(cc, expr->data.operand.right); - sfprintf(cc->ccdisc->text, ")"); - return; - case F2I: - sfprintf(cc->ccdisc->text, "(%s)(", extype(INTEGER)); - gen(cc, x); - sfprintf(cc->ccdisc->text, ")"); - return; - case I2F: - sfprintf(cc->ccdisc->text, "(%s)(", extype(FLOATING)); - gen(cc, x); - sfprintf(cc->ccdisc->text, ")"); - return; - case S2I: - /* sfprintf(cc->ccdisc->text, "strto%s(", sizeof(intmax_t) > sizeof(long) ? "ll" : "l"); */ - sfprintf(cc->ccdisc->text, "strtoll("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ",(char**)0,0)"); - return; - case X2I: - sfprintf(cc->ccdisc->text, "X2I("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ")"); - return; - case X2X: - sfprintf(cc->ccdisc->text, "X2X("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ")"); - return; - } - y = expr->data.operand.right; - if (x->type == STRING) - { - switch (expr->op) - { - case S2B: - sfprintf(cc->ccdisc->text, "*("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ")!=0"); - return; - case S2F: - sfprintf(cc->ccdisc->text, "strtod("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ",0)"); - return; - case S2I: - sfprintf(cc->ccdisc->text, "strtol("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ",0,0)"); - return; - case S2X: - sfprintf(cc->ccdisc->text, "** cannot convert string value to external **"); - return; - case NE: - sfprintf(cc->ccdisc->text, "!"); - /*FALLTHROUGH*/ - case EQ: - sfprintf(cc->ccdisc->text, "strmatch("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ","); - gen(cc, y); - sfprintf(cc->ccdisc->text, ")"); - return; - case '+': - case '|': - case '&': - case '^': - case '%': - case '*': - sfprintf(cc->ccdisc->text, "** string bits not supported **"); - return; - } - switch (expr->op) - { - case '<': - s = "<0"; - break; - case LE: - s = "<=0"; - break; - case GE: - s = ">=0"; - break; - case '>': - s = ">0"; - break; - default: - s = "** unknown string op **"; - break; - } - sfprintf(cc->ccdisc->text, "strcoll("); - gen(cc, x); - sfprintf(cc->ccdisc->text, ","); - gen(cc, y); - sfprintf(cc->ccdisc->text, ")%s", s); - return; - } - else - { - if (!y) - sfprintf(cc->ccdisc->text, "%s", exopname(expr->op)); - sfprintf(cc->ccdisc->text, "("); - gen(cc, x); - if (y) - { - sfprintf(cc->ccdisc->text, ")%s(", exopname(expr->op)); - gen(cc, y); - } - sfprintf(cc->ccdisc->text, ")"); - } - return; -} - -/* - * generate global declarations - */ - -static int -global(Dt_t* table, void* object, void* handle) -{ - register Excc_t* cc = (Excc_t*)handle; - register Exid_t* sym = (Exid_t*)object; - - if (sym->lex == DYNAMIC) - sfprintf(cc->ccdisc->text, "static %s %s;\n", extype(sym->type), sym->name); - return 0; -} - -/* - * open C program generator context - */ - -Excc_t* -exccopen(Expr_t* expr, Exccdisc_t* disc) -{ - register Excc_t* cc; - char* id; - - if (!(id = disc->id)) - id = ""; - if (!(cc = newof(0, Excc_t, 1, strlen(id) + 2))) - return 0; - cc->expr = expr; - cc->disc = expr->disc; - cc->id = (char*)(cc + 1); - cc->ccdisc = disc; - if (!(disc->flags & EX_CC_DUMP)) - { - sfprintf(disc->text, "/* : : generated by %s : : */\n", exversion); - sfprintf(disc->text, "\n#include \n"); - if (*id) - sfsprintf(cc->id, strlen(id) + 2, "%s_", id); - sfprintf(disc->text, "\n"); - dtwalk(expr->symbols, global, cc); - } - return cc; -} - -/* - * close C program generator context - */ - -int -exccclose(Excc_t* cc) -{ - int r = 0; - - if (!cc) - r = -1; - else - { - if (!(cc->ccdisc->flags & EX_CC_DUMP)) - { - if (cc->ccdisc->text) - sfclose(cc->ccdisc->text); - else - r = -1; - } - free(cc); - } - return r; -} - -/* - * generate the program for name or sym coerced to type - */ - -int -excc(Excc_t* cc, const char* name, Exid_t* sym, int type) -{ - register char* t; - - if (!cc) - return -1; - if (!sym) - sym = name ? (Exid_t*)dtmatch(cc->expr->symbols, name) : &cc->expr->main; - if (sym && sym->lex == PROCEDURE && sym->value) - { - t = extype(type); - sfprintf(cc->ccdisc->text, "\n%s %s%s(data) char** data; {\n%s _%svalue = 0;\n", t, cc->id, sym->name, t, cc->id); - gen(cc, sym->value->data.procedure.body); - sfprintf(cc->ccdisc->text, ";\n"); - if (cc->lastop != RETURN) - sfprintf(cc->ccdisc->text, "return _%svalue;\n", cc->id); - sfprintf(cc->ccdisc->text, "}\n"); - return 0; - } - return -1; -} - -/* - * dump an expression tree on sp - */ - -int -exdump(Expr_t* expr, Exnode_t* node, Sfio_t* sp) -{ - Excc_t* cc; - Exccdisc_t ccdisc; - Exid_t* sym; - - memset(&ccdisc, 0, sizeof(ccdisc)); - ccdisc.flags = EX_CC_DUMP; - ccdisc.text = sp; - if (!(cc = exccopen(expr, &ccdisc))) - return -1; - if (node) - gen(cc, node); - else - for (sym = (Exid_t*)dtfirst(expr->symbols); sym; sym = (Exid_t*)dtnext(expr->symbols, sym)) - if (sym->lex == PROCEDURE && sym->value) - { - sfprintf(sp, "%s:\n", sym->name); - gen(cc, sym->value->data.procedure.body); - } - sfprintf(sp, "\n"); - return exccclose(cc); -} diff --git a/internal/ccall/expr/excontext.c b/internal/ccall/expr/excontext.c deleted file mode 100644 index 7353ac4..0000000 --- a/internal/ccall/expr/excontext.c +++ /dev/null @@ -1,68 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include "exlib.h" - -/* - * copy input token error context into buf of n chars and reset the context - * end of buf returned - */ - -char* -excontext(Expr_t* p, char* buf, int n) -{ - register char* s; - register char* t; - register char* e; - - s = buf; - if (p->linep > p->line || p->linewrap) - { - e = buf + n - 5; - if (p->linewrap) - { - t = p->linep + 1; - while (t < &p->line[sizeof(p->line)] && isspace(*t)) - t++; - if ((n = (sizeof(p->line) - (t - (p->linep + 1))) - (e - s)) > 0) - { - if (n > &p->line[sizeof(p->line)] - t) - t = &p->line[sizeof(p->line)]; - else t += n; - } - while (t < &p->line[sizeof(p->line)]) - *s++ = *t++; - } - t = p->line; - if (p->linewrap) - p->linewrap = 0; - else while (t < p->linep && isspace(*t)) - t++; - if ((n = (p->linep - t) - (e - s)) > 0) - t += n; - while (t < p->linep) - *s++ = *t++; - p->linep = p->line; - t = "<<< "; - while ((*s = *t++)) - s++; - } - *s = 0; - return s; -} diff --git a/internal/ccall/expr/exdata.c b/internal/ccall/expr/exdata.c deleted file mode 100644 index d46d809..0000000 --- a/internal/ccall/expr/exdata.c +++ /dev/null @@ -1,73 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library readonly tables - */ - -static const char id[] = "\n@(#)$Id: libexpr (AT&T Research) 2011-06-30 $\0\n"; - -#include - -const char* exversion = id + 10; - -Exid_t exbuiltin[] = -{ - - /* id_string references the first entry */ - - EX_ID("string", DECLARE, STRING, STRING, 0), - - /* order not important after this point (but sorted anyway) */ - - EX_ID("break", BREAK, BREAK, 0, 0), - EX_ID("case", CASE, CASE, 0, 0), - EX_ID("char", DECLARE, CHARACTER, CHARACTER, 0), - EX_ID("continue",CONTINUE, CONTINUE, 0, 0), - EX_ID("default", DEFAULT, DEFAULT, 0, 0), - EX_ID("double", DECLARE, FLOATING, FLOATING,0), - EX_ID("else", ELSE, ELSE, 0, 0), - EX_ID("exit", EXIT, EXIT, INTEGER,0), - EX_ID("for", FOR, FOR, 0, 0), - EX_ID("forr", ITERATER, ITERATER, 0, 0), - EX_ID("float", DECLARE, FLOATING, FLOATING,0), - EX_ID("gsub", GSUB, GSUB, STRING, 0), - EX_ID("if", IF, IF, 0, 0), - EX_ID("in", IN_OP, IN_OP, 0, 0), - EX_ID("int", DECLARE, INTEGER, INTEGER,0), - EX_ID("long", DECLARE, INTEGER, INTEGER,0), - EX_ID("print", PRINT, PRINT, INTEGER,0), - EX_ID("printf", PRINTF, PRINTF, INTEGER,0), - EX_ID("query", QUERY, QUERY, INTEGER,0), - EX_ID("rand", RAND, RAND, FLOATING,0), - EX_ID("return", RETURN, RETURN, 0, 0), - EX_ID("scanf", SCANF, SCANF, INTEGER,0), - EX_ID("sscanf", SSCANF, SSCANF, INTEGER,0), - EX_ID("split", SPLIT, SPLIT, INTEGER,0), - EX_ID("sprintf", SPRINTF, SPRINTF, STRING, 0), - EX_ID("srand", SRAND, SRAND, INTEGER,0), - EX_ID("static", STATIC, STATIC, 0, 0), - EX_ID("sub", SUB, SUB, STRING, 0), - EX_ID("substr", SUBSTR, SUBSTR, STRING, 0), - EX_ID("switch", SWITCH, SWITCH, 0, 0), - EX_ID("tokens", TOKENS, TOKENS, INTEGER,0), - EX_ID("unset", UNSET, UNSET, 0, 0), - EX_ID("unsigned",DECLARE, UNSIGNED, UNSIGNED,0), - EX_ID("void", DECLARE, VOIDTYPE, 0, 0), - EX_ID("while", WHILE, WHILE, 0, 0), - EX_ID("while", WHILE, WHILE, 0, 0), - EX_ID({0}, 0, 0, 0, 0) - -}; diff --git a/internal/ccall/expr/exerror.c b/internal/ccall/expr/exerror.c deleted file mode 100644 index 235d4f9..0000000 --- a/internal/ccall/expr/exerror.c +++ /dev/null @@ -1,74 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include - -/* - * library error handler - */ - -void -exerror(const char* format, ...) -{ - Sfio_t* sp; - - if (expr.program->disc->errorf && !expr.program->errors && (sp = sfstropen())) - { - va_list ap; - char* s; - char buf[64]; - - expr.program->errors = 1; - excontext(expr.program, buf, sizeof(buf)); - sfputr(sp, buf, -1); - sfputr(sp, "\n -- ", -1); - va_start(ap, format); - sfvprintf(sp, format, ap); - va_end(ap); - if (!(s = sfstruse(sp))) - s = "out of space"; - (*expr.program->disc->errorf)(expr.program, expr.program->disc, (expr.program->disc->flags & EX_FATAL) ? 3 : 2, "%s", s); - sfclose(sp); - } - else if (expr.program->disc->flags & EX_FATAL) - exit(1); -} - -void -exwarn(const char *format, ...) -{ - Sfio_t *sp; - - if (expr.program->disc->errorf && (sp = sfstropen())) { - va_list ap; - char *s; - char buf[64]; - - excontext(expr.program, buf, sizeof(buf)); - sfputr(sp, buf, -1); - sfputr(sp, "\n -- ", -1); - va_start(ap, format); - sfvprintf(sp, format, ap); - va_end(ap); - s = sfstruse(sp); - (*expr.program->disc->errorf) (expr.program, expr.program->disc, - ERROR_WARNING, "%s", s); - sfclose(sp); - } -} diff --git a/internal/ccall/expr/exeval.c b/internal/ccall/expr/exeval.c deleted file mode 100644 index 592e1f1..0000000 --- a/internal/ccall/expr/exeval.c +++ /dev/null @@ -1,1953 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library evaluator - */ - -#include "config.h" - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif - -#include "exlib.h" -#include "exop.h" -#include -#include -#include -#ifdef WIN32 -#include -#define srand48 srand -#define drand48 rand -#endif - -#ifdef OLD -#include -#else -#define TIME_LEN 80 /* max. characters to store time */ -#endif - -static Extype_t eval(Expr_t*, Exnode_t*, void*); - -#define TOTNAME 4 -#define MAXNAME 16 -#define FRAME 64 - -static char* -lexname(int op, int subop) -{ - register char* b; - - static int n; - static char buf[TOTNAME][MAXNAME]; - - if (op > MINTOKEN && op < MAXTOKEN) - return (char*)exop[op - MINTOKEN]; - if (++n >= TOTNAME) - n = 0; - b = buf[n]; - if (op == '=') - { - if (subop > MINTOKEN && subop < MAXTOKEN) - sfsprintf(b, MAXNAME, "%s=", exop[subop - MINTOKEN]); - else if (subop > ' ' && subop <= '~') - sfsprintf(b, MAXNAME, "%c=", subop); - else - sfsprintf(b, MAXNAME, "(%d)=", subop); - } - else if (subop < 0) - sfsprintf(b, MAXNAME, "(EXTERNAL:%d)", op); - else if (op > ' ' && op <= '~') - sfsprintf(b, MAXNAME, "%c", op); - else - sfsprintf(b, MAXNAME, "(%d)", op); - return b; -} - -/* evaldyn: - * Evaluate item from array given key. - * Returns 1 if item existed, zero otherwise - * - */ -static int -evaldyn (Expr_t * ex, register Exnode_t * expr, void *env, int delete) -{ - Exassoc_t *b; - Extype_t v; - char buf[32]; - Extype_t key; - char *keyname; - - v = eval(ex, expr->data.variable.index, env); - if (expr->data.variable.symbol->index_type == INTEGER) { - if (!(b = (Exassoc_t *) dtmatch((Dt_t *) expr->data.variable.symbol->local.pointer, &v))) { - return 0; - } - } - else { - int type = expr->data.variable.index->type; - if (type != STRING) { - if (!BUILTIN(type)) { - key = (*ex->disc->keyf) (ex, v, type, ex->disc); - } else - key.integer = v.integer; - sfsprintf(buf, sizeof(buf), "%I*x", sizeof(v.integer), key.integer); - keyname = buf; - } else - keyname = v.string; - if (!(b = (Exassoc_t *) dtmatch((Dt_t *) expr->data.variable. - symbol->local.pointer, keyname))) { - return 0; - } - } - if (delete) { - dtdelete ((Dt_t*)expr->data.variable.symbol->local.pointer, b); - free (b); - } - return 1; -} - -/* - * return dynamic (associative array) variable value - * assoc will point to the associative array bucket - */ - -static Extype_t -getdyn(Expr_t* ex, register Exnode_t* expr, void* env, Exassoc_t** assoc) -{ - Exassoc_t* b; - Extype_t v; - - if (expr->data.variable.index) - { - Extype_t key; - char buf[2*(sizeof(key.integer))+1]; /* no. of hex chars needed plus null byte */ - char *keyname; - - v = eval(ex, expr->data.variable.index, env); - if (expr->data.variable.symbol->index_type == INTEGER) { - if (!(b = (Exassoc_t *) dtmatch((Dt_t *) expr->data.variable.symbol->local.pointer, &v))) - { - if (!(b = newof(0, Exassoc_t, 1, 0))) - exnospace(); - b->key = v; - dtinsert((Dt_t *) expr->data.variable.symbol->local. pointer, b); - } - } else { - int type = expr->data.variable.index->type; - if (type != STRING) { - if (!BUILTIN(type)) { - key = (*ex->disc->keyf) (ex, v, type, ex->disc); - } else - key.integer = v.integer; - sfsprintf(buf, sizeof(buf), "%I*x", sizeof(key.integer), key.integer); - keyname = buf; - } else - keyname = v.string; - if (!(b = (Exassoc_t *) dtmatch((Dt_t *) expr->data.variable.symbol->local.pointer, keyname))) - { - if (!(b = newof(0, Exassoc_t, 1, strlen(keyname)))) - exnospace(); - strcpy(b->name, keyname); - b->key = v; - dtinsert((Dt_t *) expr->data.variable.symbol->local.pointer, b); - } - } - *assoc = b; - if (b) - { - if (expr->data.variable.symbol->type == STRING && !b->value.string) - b->value = exzero(expr->data.variable.symbol->type); - return b->value; - } - v = exzero(expr->data.variable.symbol->type); - return v; - } - *assoc = 0; - return expr->data.variable.symbol->value->data.constant.value; -} - -typedef struct -{ - Sffmt_t fmt; - Expr_t* expr; - void* env; - Print_t* args; - Extype_t value; - Exnode_t* actuals; - Sfio_t* tmp; -} Fmt_t; - -/* - * printf %! extension function - */ - -static int -prformat(Sfio_t* sp, void* vp, Sffmt_t* dp) -{ - register Fmt_t* fmt = (Fmt_t*)dp; - register Exnode_t* node; - register char* s; - register char* txt; - int n; - int from; - int to = 0; - time_t tm; -#ifndef OLD - struct tm *stm; -#endif - - - dp->flags |= SFFMT_VALUE; - if (fmt->args) - { - if ((node = (dp->fmt == '*') ? fmt->args->param[dp->size] : fmt->args->arg)) - fmt->value = exeval(fmt->expr, node, fmt->env); - else - fmt->value.integer = 0; - to = fmt->args->arg->type; - } - else if (!(fmt->actuals = fmt->actuals->data.operand.right)) - exerror("printf: not enough arguments"); - else - { - node = fmt->actuals->data.operand.left; - from = node->type; - switch (dp->fmt) - { - case 'f': - case 'g': - to = FLOATING; - break; - case 's': - to = STRING; - break; - default: - switch (from) - { - case INTEGER: - case UNSIGNED: - to = from; - break; - default: - to = INTEGER; - break; - } - break; - } - if (to == from) - fmt->value = exeval(fmt->expr, node, fmt->env); - else - { - node = excast(fmt->expr, node, to, NiL, 0); - fmt->value = exeval(fmt->expr, node, fmt->env); - node->data.operand.left = 0; - exfree(fmt->expr, node); - if (to == STRING) - { - if (fmt->value.string) - { - n = strlen(fmt->value.string); - if ((s = fmtbuf(n + 1))) - memcpy(s, fmt->value.string, n + 1); - vmfree(fmt->expr->vm, fmt->value.string); - fmt->value.string = s; - } - if (!fmt->value.string) - fmt->value.string = ""; - } - } - } - switch (to) - { - case STRING: - *((char**)vp) = fmt->value.string; - fmt->fmt.size = -1; - break; - case FLOATING: - *((double*)vp) = fmt->value.floating; - fmt->fmt.size = sizeof(double); - break; - default: - *((Sflong_t*)vp) = fmt->value.integer; - dp->size = sizeof(Sflong_t); - break; - } - if (dp->n_str > 0) - { - if (!fmt->tmp && !(fmt->tmp = sfstropen())) - txt = exnospace(); - else - { - sfprintf(fmt->tmp, "%.*s", dp->n_str, dp->t_str); - txt = exstash(fmt->tmp, NiL); - } - } - else - txt = 0; - switch (dp->fmt) - { - case 'q': - case 'Q': - s = *((char**)vp); - *((char**)vp) = fmtquote(s, "$'", "'", strlen(s), 0); - dp->fmt = 's'; - dp->size = -1; - break; - case 'S': - dp->flags &= ~SFFMT_LONG; - s = *((char**)vp); - if (txt) - { - if (streq(txt, "identifier")) - { - if (*s && !isalpha(*s)) - *s++ = '_'; - for (; *s; s++) - if (!isalnum(*s)) - *s = '_'; - } - else if (streq(txt, "invert")) - { - for (; *s; s++) - if (isupper(*s)) - *s = tolower(*s); - else if (islower(*s)) - *s = toupper(*s); - } - else if (streq(txt, "lower")) - { - for (; *s; s++) - if (isupper(*s)) - *s = tolower(*s); - } - else if (streq(txt, "upper")) - { - for (; *s; s++) - if (islower(*s)) - *s = toupper(*s); - } - else if (streq(txt, "variable")) - { - for (; *s; s++) - if (!isalnum(*s) && *s != '_') - *s = '.'; - } - } - dp->fmt = 's'; - dp->size = -1; - break; - case 't': - case 'T': - if ((tm = *((Sflong_t*)vp)) == -1) - tm = time(NiL); -#ifndef OLD - if (!txt) - txt = "%?%K"; - s = fmtbuf(TIME_LEN); - stm = localtime(&tm); - strftime(s, TIME_LEN, txt, stm); - *((char **) vp) = s; -#else - *((char**)vp) = fmttime(txt ? txt : "%?%K", tm); -#endif - dp->fmt = 's'; - dp->size = -1; - break; - } - return 0; -} - -/* - * print a list of strings - */ - -static int -prints(Expr_t * ex, register Exnode_t * expr, void *env, Sfio_t * sp) -{ - Extype_t v; - Exnode_t *args; - - args = expr->data.operand.left; - while (args) { - v = eval(ex, args->data.operand.left, env); - sfputr(sp, v.string, -1); - args = args->data.operand.right; - } - sfputc(sp, '\n'); - return 0; -} - -/* - * do printf - */ - -static int -print(Expr_t* ex, Exnode_t* expr, void* env, Sfio_t* sp) -{ - register Print_t* x; - Extype_t v; - Fmt_t fmt; - - if (!sp) - { - v = eval(ex, expr->data.print.descriptor, env); - if (v.integer < 0 || v.integer >= elementsof(ex->file) || (!(sp = ex->file[v.integer]) && !(sp = ex->file[v.integer] = sfnew(NiL, NiL, SF_UNBOUND, v.integer, SF_READ|SF_WRITE)))) - { - exerror("printf: %d: invalid descriptor", v.integer); - return -1; - } - } - memset(&fmt, 0, sizeof(fmt)); - fmt.fmt.version = SFIO_VERSION; - fmt.fmt.extf = prformat; - fmt.expr = ex; - fmt.env = env; - x = expr->data.print.args; - if (x->format) - do - { - if (x->arg) - { - fmt.fmt.form = x->format; - fmt.args = x; - sfprintf(sp, "%!", &fmt); - } - else - sfputr(sp, x->format, -1); - } while ((x = x->next)); - else - { - v = eval(ex, x->arg->data.operand.left, env); - fmt.fmt.form = v.string; - fmt.actuals = x->arg; - sfprintf(sp, "%!", &fmt); - if (fmt.actuals->data.operand.right) - exerror("(s)printf: \"%s\": too many arguments", fmt.fmt.form); - } - if (fmt.tmp) - sfstrclose(fmt.tmp); - return 0; -} - -/* - * scanf %! extension function - */ - -static int -scformat(Sfio_t* sp, void* vp, Sffmt_t* dp) -{ - register Fmt_t* fmt = (Fmt_t*)dp; - register Exnode_t* node; - - if (!fmt->actuals) - { - exerror("scanf: not enough arguments"); - return -1; - } - node = fmt->actuals->data.operand.left; - switch (dp->fmt) - { - case 'f': - case 'g': - if (node->type != FLOATING) - { - exerror("scanf: %s: floating variable address argument expected", node->data.variable.symbol->name); - return -1; - } - fmt->fmt.size = sizeof(double); - *((void**)vp) = &node->data.variable.symbol->value->data.constant.value; - break; - case 's': - case '[': - if (node->type != STRING) - { - exerror("scanf: %s: string variable address argument expected", node->data.variable.symbol->name); - return -1; - } - if (node->data.variable.symbol->value->data.constant.value.string == expr.nullstring) - node->data.variable.symbol->value->data.constant.value.string = 0; - fmt->fmt.size = 1024; - *((void**)vp) = node->data.variable.symbol->value->data.constant.value.string = vmnewof(fmt->expr->vm, node->data.variable.symbol->value->data.constant.value.string, char, fmt->fmt.size, 0); - break; - case 'c': - if (node->type != CHARACTER) { - exerror("scanf: %s: char variable address argument expected", node->data.variable.symbol->name); - return -1; - } - fmt->fmt.size = sizeof(Sflong_t); - *((void **) vp) = &node->data.variable.symbol->value->data.constant.value; - break; - default: - if (node->type != INTEGER && node->type != UNSIGNED) - { - exerror("scanf: %s: integer variable address argument expected", node->data.variable.symbol->name); - return -1; - } - dp->size = sizeof(Sflong_t); - *((void**)vp) = &node->data.variable.symbol->value->data.constant.value; - break; - } - fmt->actuals = fmt->actuals->data.operand.right; - dp->flags |= SFFMT_VALUE; - return 0; -} - -/* - * do scanf - */ - -static int -scan(Expr_t* ex, Exnode_t* expr, void* env, Sfio_t* sp) -{ - Extype_t v; - Extype_t u; - Fmt_t fmt; - int n; - - if (!sp) - { - if (expr->data.scan.descriptor) - { - v = eval(ex, expr->data.scan.descriptor, env); - if (expr->data.scan.descriptor->type == STRING) - goto get; - } - else - v.integer = 0; - if ((v.integer < 0) || (v.integer >= elementsof(ex->file)) || (!(sp = ex->file[v.integer]) && !(sp = ex->file[v.integer] = sfnew(NiL, NiL, SF_UNBOUND, v.integer, SF_READ|SF_WRITE)))) - { - exerror("scanf: %d: invalid descriptor", v.integer); - return 0; - } - } - get: - memset(&fmt, 0, sizeof(fmt)); - fmt.fmt.version = SFIO_VERSION; - fmt.fmt.extf = scformat; - fmt.expr = ex; - fmt.env = env; - u = eval(ex, expr->data.scan.format, env); - fmt.fmt.form = u.string; - fmt.actuals = expr->data.scan.args; - n = sp ? sfscanf(sp, "%!", &fmt) : sfsscanf(v.string, "%!", &fmt); - if (fmt.tmp) sfstrclose(fmt.tmp); - if (fmt.actuals && !*fmt.fmt.form) - exerror("scanf: %s: too many arguments", fmt.actuals->data.operand.left->data.variable.symbol->name); - return n; -} - -/* - * string add - */ - -static char* -str_add(Expr_t* ex, register char* l, register char* r) -{ - sfprintf(ex->tmp, "%s%s", l, r); - return exstash(ex->tmp, ex->ve); -} - -/* - * string ior - */ - -static char* -str_ior(Expr_t* ex, register char* l, register char* r) -{ - register int c; - register char* s = l; - - while ((c = *s++)) - if (!strchr(s, c)) - sfputc(ex->tmp, c); - while ((c = *r++)) - if (!strchr(l, c) && !strchr(r, c)) - sfputc(ex->tmp, c); - return exstash(ex->tmp, ex->ve); -} - -/* - * string and - */ - -static char* -str_and(Expr_t* ex, register char* l, register char* r) -{ - register int c; - - while ((c = *l++)) - if (strchr(r, c) && !strchr(l, c)) - sfputc(ex->tmp, c); - return exstash(ex->tmp, ex->ve); -} - -/* - * string xor - */ - -static char* -str_xor(Expr_t* ex, register char* l, register char* r) -{ - register int c; - register char* s = l; - - while ((c = *s++)) - if (!strchr(r, c) && !strchr(s, c)) - sfputc(ex->tmp, c); - while ((c = *r++)) - if (!strchr(l, c) && !strchr(r, c)) - sfputc(ex->tmp, c); - return exstash(ex->tmp, ex->ve); -} - -/* - * string mod - */ - -static char* -str_mod(Expr_t* ex, register char* l, register char* r) -{ - register int c; - - while ((c = *l++)) - if (!strchr(r, c) && !strchr(l, c)) - sfputc(ex->tmp, c); - return exstash(ex->tmp, ex->ve); -} - -/* - * string mpy - */ - -static char* -str_mpy(Expr_t* ex, register char* l, register char* r) -{ - register int lc; - register int rc; - - while ((lc = *l++) && (rc = *r++)) - sfputc(ex->tmp, lc == rc ? lc : ' '); - return exstash(ex->tmp, ex->ve); -} - -/* replace: - * Add replacement string. - * \digit is replaced with a subgroup match, if any. - */ -static void -replace(Sfio_t * s, char *base, register char *repl, int ng, int *sub) -{ - char c; - int idx, offset; - - while ((c = *repl++)) { - if (c == '\\') { - if ((c = *repl) && isdigit(c)) { - idx = c - '0'; - if (idx < ng) { - offset = sub[2 * idx]; - sfwrite(s, base + offset, sub[2 * idx + 1] - offset); - } - repl++; - } else - sfputc(s, '\\'); - } else - sfputc(s, c); - } -} - -#define MCNT(s) (sizeof(s)/(2*sizeof(int))) - -static void -addItem (Dt_t* arr, Extype_t v, char* tok) -{ - Exassoc_t* b; - - if (!(b = (Exassoc_t *) dtmatch(arr, &v))) { - if (!(b = newof(0, Exassoc_t, 1, 0))) - exerror("out of space [assoc]"); - b->key = v; - dtinsert(arr, b); - } - b->value.string = tok; -} - -/* exsplit: - * break string into possibly empty fields and store in array - * return number of fields - */ -Extype_t -exsplit(Expr_t * ex, register Exnode_t * expr, void *env) -{ - Extype_t v; - char *str; - char *seps; - char *tok; - size_t sz; - Sfio_t* fp = ex->tmp; - Dt_t* arr = (Dt_t*)expr->data.split.array->local.pointer; - int i; - - str = (eval(ex, expr->data.split.string, env)).string; - if (expr->data.split.seps) - seps = (eval(ex, expr->data.split.seps, env)).string; - else - seps = " \t\n"; - - v.integer = 0; - while (*str) { - sz = strspn (str, seps); - if (sz) { - if (v.integer == 0) { /* initial separator => empty field */ - addItem (arr, v, ""); - v.integer++; - } - for (i = 1; i < sz; i++) { - addItem (arr, v, ""); - v.integer++; - } - } - str += sz; - if (*str == '\0') { /* terminal separator => empty field */ - addItem (arr, v, ""); - v.integer++; - break; - } - sz = strcspn (str, seps); - sfwrite (fp, str, sz); - tok = exstrdup(ex, sfstruse(fp)); - addItem (arr, v, tok); - v.integer++; - str += sz; - } - - return v; -} - -/* extoken: - * tokenize string and store in array - * return number of tokens - */ -Extype_t -extokens(Expr_t * ex, register Exnode_t * expr, void *env) -{ - Extype_t v; - char *str; - char *seps; - char *tok; - size_t sz; - Sfio_t* fp = ex->tmp; - Dt_t* arr = (Dt_t*)expr->data.split.array->local.pointer; - - str = (eval(ex, expr->data.split.string, env)).string; - if (expr->data.split.seps) - seps = (eval(ex, expr->data.split.seps, env)).string; - else - seps = " \t\n"; - - v.integer = 0; - while (*str) { - sz = strspn (str, seps); - str += sz; - if (*str == '\0') - break; - - sz = strcspn (str, seps); - assert (sz); - sfwrite (fp, str, sz); - tok = exstrdup(ex, sfstruse(fp)); - addItem (arr, v, tok); - v.integer++; - str += sz; - } - - return v; -} - -/* exsub: - * return string after pattern substitution - */ -Extype_t -exsub(Expr_t * ex, register Exnode_t * expr, void *env, int global) -{ - char *str; - char *pat; - char *repl; - char *p; - char *s; - Extype_t v; - int sub[20]; - int flags = STR_MAXIMAL; - int ng; - - str = (eval(ex, expr->data.string.base, env)).string; - pat = (eval(ex, expr->data.string.pat, env)).string; - if (expr->data.string.repl) - repl = (eval(ex, expr->data.string.repl, env)).string; - else - repl = 0; - - if (!global) { - if (*pat == '^') { - pat++; - flags |= STR_LEFT; - } - p = pat; - while (*p) - p++; - if (p > pat) - p--; - if (*p == '$') { - if ((p > pat) && (*(p - 1) == '\\')) { - *p-- = '\0'; - *p = '$'; - } else { - flags |= STR_RIGHT; - *p = '\0'; - } - } - } - if (*pat == '\0') { - v.string = vmstrdup(ex->ve, str); - return v; - } - - ng = strgrpmatch(str, pat, sub, MCNT(sub), flags); - if (ng == 0) { - v.string = vmstrdup(ex->ve, str); - return v; - } - if (sub[0] == sub[1]) { - exwarn("pattern match of empty string - ill-specified pattern \"%s\"?", pat); - v.string = vmstrdup(ex->ve, str); - return v; - } - sfwrite(ex->tmp, str, sub[0]); - if (repl) - replace(ex->tmp, str, repl, ng, sub); - - s = str + sub[1]; - if (global) { - while ((ng = strgrpmatch(s, pat, sub, MCNT(sub), flags))) { - sfwrite(ex->tmp, s, sub[0]); - if (repl) - replace(ex->tmp, s, repl, ng, sub); - s = s + sub[1]; - } - } - - sfputr(ex->tmp, s, -1); - v.string = exstash(ex->tmp,ex->ve); - return v; -} - -/* exsubstr: - * return substring. - */ -static Extype_t exsubstr(Expr_t * ex, register Exnode_t * expr, void *env) -{ - Extype_t s; - Extype_t i; - Extype_t l; - Extype_t v; - int len; - - s = eval(ex, expr->data.string.base, env); - len = strlen(s.string); - i = eval(ex, expr->data.string.pat, env); - if ((i.integer < 0) || (len < i.integer)) - exerror("illegal start index in substr(%s,%d)", s.string, i.integer); - if (expr->data.string.repl) { - l = eval(ex, expr->data.string.repl, env); - if ((l.integer < 0) || (len - i.integer < l.integer)) - exerror("illegal length in substr(%s,%d,%d)", s.string, i.integer, l.integer); - } else - l.integer = len - i.integer; - - v.string = vmalloc(ex->ve, l.integer + 1); - if (expr->data.string.repl) { - strncpy(v.string, s.string + i.integer, l.integer); - v.string[l.integer] = '\0'; - } else - strcpy(v.string, s.string + i.integer); - return v; -} - -/* xConvert: - * Convert from external type. - */ -static void -xConvert(Expr_t * ex, Exnode_t * expr, int type, Extype_t v, - Exnode_t * tmp) -{ - *tmp = *expr->data.operand.left; - tmp->data.constant.value = v; - if ((*ex->disc->convertf) (ex, tmp, type, expr->data.operand.right ? expr->data. - operand.right->data.variable.symbol : (Exid_t *) 0, 0, ex->disc)) { - exerror("%s: cannot convert %s value to %s", - expr->data.operand.left->data.variable.symbol->name, - extypename(ex, expr->data.operand.left->type), extypename(ex, type)); - } - tmp->type = type; -} - -/* xPrint: - * Generate string representation from value of external type. - */ -static void -xPrint(Expr_t * ex, Exnode_t * expr, Extype_t v, Exnode_t * tmp) -{ - *tmp = *expr->data.operand.left; - tmp->data.constant.value = v; - if ((*ex->disc->stringof) (ex, tmp, 0, ex->disc)) - exerror("%s: no string representation of %s value", - expr->data.operand.left->data.variable.symbol->name, - extypename(ex, expr->data.operand.left->type)); - tmp->type = STRING; -} - -/* - * internal exeval - */ -static long seed; - -static Extype_t -eval(Expr_t* ex, register Exnode_t* expr, void* env) -{ - register Exnode_t* x; - register Exnode_t* a; - register Extype_t** t; - register int n; - Extype_t v; - Extype_t r = {0}; - Extype_t i; - char* e; - Exnode_t tmp; - Exnode_t rtmp; - Exnode_t* rp; - Exassoc_t* assoc; - Extype_t args[FRAME+1]; - Extype_t save[FRAME]; - - if (!expr || ex->loopcount) - { - v.integer = 1; - return v; - } - x = expr->data.operand.left; - switch (expr->op) - { - case BREAK: - case CONTINUE: - v = eval(ex, x, env); - ex->loopcount = v.integer; - ex->loopop = expr->op; - return v; - case CONSTANT: - return expr->data.constant.value; - case DEC: - n = -1; - add: - if (x->op == DYNAMIC) - r = getdyn(ex, x, env, &assoc); - else - { - if (x->data.variable.index) - i = eval(ex, x->data.variable.index, env); - else - i.integer = EX_SCALAR; -#ifndef OLD - if (x->data.variable.dyna) { - Extype_t locv; - locv = getdyn(ex, x->data.variable.dyna, env, &assoc); - x->data.variable.dyna->data.variable.dyna->data.constant.value = locv; - } -#endif - r = (*ex->disc->getf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)i.integer, ex->disc); - } - v = r; - switch (x->type) - { - case FLOATING: - v.floating += n; - break; - case INTEGER: - case UNSIGNED: - v.integer += n; - break; - default: - goto huh; - } - set: - if (x->op == DYNAMIC) - { - if (x->type == STRING) - { - v.string = vmstrdup(ex->vm, v.string); - if ((e = assoc ? assoc->value.string : x->data.variable.symbol->value->data.constant.value.string)) - vmfree(ex->vm, e); - } - if (assoc) - assoc->value = v; - else - x->data.variable.symbol->value->data.constant.value = v; - } - else - { - if (x->data.variable.index) - i = eval(ex, x->data.variable.index, env); - else - i.integer = EX_SCALAR; -#ifndef OLD - if (x->data.variable.dyna) { - Extype_t locv; - locv = getdyn(ex, x->data.variable.dyna, env, &assoc); - x->data.variable.dyna->data.variable.dyna->data.constant.value = locv; - } -#endif - if ((*ex->disc->setf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)i.integer, v, ex->disc) < 0) - exerror("%s: cannot set value", x->data.variable.symbol->name); - } - if (expr->subop == PRE) - r = v; - return r; - case DYNAMIC: - return getdyn(ex, expr, env, &assoc); - case SPLIT: - return exsplit(ex, expr, env); - case TOKENS: - return extokens(ex, expr, env); - case GSUB: - return exsub(ex, expr, env, 1); - case SUB: - return exsub(ex, expr, env, 0); - case SUBSTR: - return exsubstr(ex, expr, env); - case SRAND: - v.integer = seed; - if (expr->binary) { - seed = eval(ex, x, env).integer; - } else - seed = time(0); - srand48(seed); - return v; - case RAND: - v.floating = drand48(); - return v; - case EXIT: - v = eval(ex, x, env); - if (ex->disc->exitf) - (*ex->disc->exitf) (ex, env, (int)v.integer); - else - exit((int)v.integer); - /*NOTREACHED*/ - v.integer = -1; - return v; - case IF: - v = eval(ex, x, env); - if (v.integer) - eval(ex, expr->data.operand.right->data.operand.left, env); - else - eval(ex, expr->data.operand.right->data.operand.right, env); - v.integer = 1; - return v; - case FOR: - case WHILE: - expr = expr->data.operand.right; - for (;;) - { - r = eval(ex, x, env); - if (!r.integer) - { - v.integer = 1; - return v; - } - if (expr->data.operand.right) - { - eval(ex, expr->data.operand.right, env); - if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE)) - { - v.integer = 0; - return v; - } - } - if (expr->data.operand.left) - eval(ex, expr->data.operand.left, env); - } - /*NOTREACHED*/ - case SWITCH: - v = eval(ex, x, env); - i.integer = x->type; - r.integer = 0; - x = expr->data.operand.right; - a = x->data.select.statement; - n = 0; - while ((x = x->data.select.next)) - { - if (!(t = x->data.select.constant)) - n = 1; - else - for (; *t; t++) - { - switch ((int)i.integer) - { - case INTEGER: - case UNSIGNED: - if ((*t)->integer == v.integer) - break; - continue; - case STRING: - if ((ex->disc->version >= 19981111L && ex->disc->matchf) ? (*ex->disc->matchf)(ex, x, (*t)->string, expr->data.operand.left, v.string, env, ex->disc) : strmatch((*t)->string, v.string)) - break; - continue; - case FLOATING: - if ((*t)->floating == v.floating) - break; - continue; - } - n = 1; - break; - } - if (n) - { - if (!x->data.select.statement) - { - r.integer = 1; - break; - } - r = eval(ex, x->data.select.statement, env); - if (ex->loopcount > 0) - { - ex->loopcount--; - break; - } - } - } - if (!n && a) - { - r = eval(ex, a, env); - if (ex->loopcount > 0) - ex->loopcount--; - } - return r; - case ITERATE: - v.integer = 0; - if (expr->data.generate.array->op == DYNAMIC) - { - n = expr->data.generate.index->type == STRING; - for (assoc = (Exassoc_t*)dtfirst((Dt_t*)expr->data.generate.array->data.variable.symbol->local.pointer); assoc; assoc = (Exassoc_t*)dtnext((Dt_t*)expr->data.generate.array->data.variable.symbol->local.pointer, assoc)) - { - v.integer++; - if (n) - expr->data.generate.index->value->data.constant.value.string = assoc->name; - else - expr->data.generate.index->value->data.constant.value = assoc->key; - eval(ex, expr->data.generate.statement, env); - if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE)) - { - v.integer = 0; - break; - } - } - } - else - { - r = (*ex->disc->getf)(ex, expr, expr->data.generate.array->data.variable.symbol, expr->data.generate.array->data.variable.reference, env, 0, ex->disc); - for (v.integer = 0; v.integer < r.integer; v.integer++) - { - expr->data.generate.index->value->data.constant.value.integer = v.integer; - eval(ex, expr->data.generate.statement, env); - if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE)) - { - v.integer = 0; - break; - } - } - } - return v; - case ITERATER: - v.integer = 0; - if (expr->data.generate.array->op == DYNAMIC) { - n = expr->data.generate.index->type == STRING; - for (assoc = (Exassoc_t *) dtlast((Dt_t *) expr->data.generate.array-> - data.variable.symbol->local. - pointer); assoc; - assoc = (Exassoc_t *) dtprev((Dt_t *) expr->data.generate.array-> - data.variable.symbol->local.pointer, - assoc)) { - v.integer++; - if (n) - expr->data.generate.index->value->data.constant.value.string = assoc->name; - else - expr->data.generate.index->value->data.constant.value = assoc->key; - eval(ex, expr->data.generate.statement, env); - if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE)) { - v.integer = 0; - break; - } - } - } else { - r = (*ex->disc->getf) (ex, expr, expr->data.generate.array->data. - variable.symbol, expr->data.generate.array->data. variable.reference, env, 0, ex->disc); - for (v.integer = r.integer-1; 0 <= v.integer; v.integer--) { - expr->data.generate.index->value->data.constant.value.integer = v.integer; - eval(ex, expr->data.generate.statement, env); - if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE)) { - v.integer = 0; - break; - } - } - } - return v; - case '#': - v.integer = dtsize ((Dt_t*)expr->data.variable.symbol->local.pointer); - return v; - case IN_OP: - v.integer = evaldyn (ex, expr, env, 0); - return v; - case UNSET: - if (expr->data.variable.index) { - v.integer = evaldyn (ex, expr, env, 1); - } - else { - dtclear ((Dt_t*)expr->data.variable.symbol->local.pointer); - v.integer = 0; - } - return v; - case CALL: - x = expr->data.call.args; - for (n = 0, a = expr->data.call.procedure->value->data.procedure.args; a && x; a = a->data.operand.right) - { - if (n < elementsof(args)) - { - save[n] = a->data.operand.left->data.variable.symbol->value->data.constant.value; - args[n++] = eval(ex, x->data.operand.left, env); - } - else - a->data.operand.left->data.variable.symbol->value->data.constant.value = eval(ex, x->data.operand.left, env); - x = x->data.operand.right; - } - for (n = 0, a = expr->data.call.procedure->value->data.procedure.args; a && n < elementsof(save); a = a->data.operand.right) - a->data.operand.left->data.variable.symbol->value->data.constant.value = args[n++]; - if (x) - exerror("too many actual args"); - else if (a) - exerror("not enough actual args"); - v = exeval(ex, expr->data.call.procedure->value->data.procedure.body, env); - for (n = 0, a = expr->data.call.procedure->value->data.procedure.args; a && n < elementsof(save); a = a->data.operand.right) - a->data.operand.left->data.variable.symbol->value->data.constant.value = save[n++]; - return v; - case ARRAY: - n = 0; - for (x = expr->data.operand.right; x && n < elementsof(args); x = x->data.operand.right) - args[n++] = eval(ex, x->data.operand.left, env); - return (*ex->disc->getf) (ex, expr->data.operand.left, expr->data.operand.left->data.variable.symbol, - expr->data.operand.left->data.variable.reference, args, EX_ARRAY, ex->disc); - case FUNCTION: - n = 0; - args[n++].string = (char*)env; - for (x = expr->data.operand.right; x && n < elementsof(args); x = x->data.operand.right) - args[n++] = eval(ex, x->data.operand.left, env); - return (*ex->disc->getf)(ex, expr->data.operand.left, expr->data.operand.left->data.variable.symbol, expr->data.operand.left->data.variable.reference, args+1, EX_CALL, ex->disc); - case ID: - if (expr->data.variable.index) - i = eval(ex, expr->data.variable.index, env); - else - i.integer = EX_SCALAR; -#ifndef OLD - if (expr->data.variable.dyna) { - Extype_t locv; - locv = getdyn(ex, expr->data.variable.dyna, env, &assoc); - expr->data.variable.dyna->data.variable.dyna->data.constant. value = locv; - } -#endif - return (*ex->disc->getf)(ex, expr, expr->data.variable.symbol, expr->data.variable.reference, env, (int)i.integer, ex->disc); - case INC: - n = 1; - goto add; - case PRINT: - v.integer = prints(ex, expr, env, sfstdout); - return v; - case PRINTF: - v.integer = print(ex, expr, env, NiL); - return v; -#ifdef UNUSED - case QUERY: - print(ex, expr, env, sfstderr); - v.integer = !astquery(2, ""); - return v; -#endif - case RETURN: - ex->loopret = eval(ex, x, env); - ex->loopcount = 32767; - ex->loopop = expr->op; - return ex->loopret; - case SCANF: - case SSCANF: - v.integer = scan(ex, expr, env, NiL); - return v; - case SPRINTF: - print(ex, expr, env, ex->tmp); - v.string = exstash(ex->tmp, ex->ve); - return v; - case '=': - v = eval(ex, expr->data.operand.right, env); - if (expr->subop != '=') - { - r = v; - if (x->op == DYNAMIC) - v = getdyn(ex, x, env, &assoc); - else - { - if (x->data.variable.index) - v = eval(ex, x->data.variable.index, env); - else - v.integer = EX_SCALAR; -#ifndef OLD - if (x->data.variable.dyna) { - Extype_t locv; - locv = getdyn(ex, x->data.variable.dyna, env, &assoc); - x->data.variable.dyna->data.variable.dyna->data. constant.value = locv; - } -#endif - v = (*ex->disc->getf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)v.integer, ex->disc); - } - switch (x->type) - { - case FLOATING: - switch (expr->subop) - { - case '+': - v.floating += r.floating; - break; - case '-': - v.floating -= r.floating; - break; - case '*': - v.floating *= r.floating; - break; - case '/': - if (r.floating == 0.0) - exerror("floating divide by 0"); - else - v.floating /= r.floating; - break; - case '%': - if ((r.integer = r.floating) == 0) - exerror("floating 0 modulus"); - else - v.floating = ((Sflong_t)v.floating) % r.integer; - break; - case '&': - v.floating = ((Sflong_t)v.floating) & ((Sflong_t)r.floating); - break; - case '|': - v.floating = ((Sflong_t)v.floating) | ((Sflong_t)r.floating); - break; - case '^': - v.floating = ((Sflong_t)v.floating) ^ ((Sflong_t)r.floating); - break; - case LS: - v.floating = ((Sflong_t)v.floating) << ((Sflong_t)r.floating); - break; - case RS: -#if _WIN32 - v.floating = (Sflong_t)(((Sfulong_t)v.floating) >> ((Sflong_t)r.floating)); -#else - v.floating = ((Sfulong_t)v.floating) >> ((Sflong_t)r.floating); -#endif - break; - default: - goto huh; - } - break; - case INTEGER: - case UNSIGNED: - switch (expr->subop) - { - case '+': - v.integer += r.integer; - break; - case '-': - v.integer -= r.integer; - break; - case '*': - v.integer *= r.integer; - break; - case '/': - if (r.integer == 0) - exerror("integer divide by 0"); - else - v.integer /= r.integer; - break; - case '%': - if (r.integer == 0) - exerror("integer 0 modulus"); - else - v.integer %= r.integer; - break; - case '&': - v.integer &= r.integer; - break; - case '|': - v.integer |= r.integer; - break; - case '^': - v.integer ^= r.integer; - break; - case LS: - v.integer <<= r.integer; - break; - case RS: - v.integer = (Sfulong_t)v.integer >> r.integer; - break; - default: - goto huh; - } - break; - case STRING: - switch (expr->subop) - { - case '+': - v.string = str_add(ex, v.string, r.string); - break; - case '|': - v.string = str_ior(ex, v.string, r.string); - break; - case '&': - v.string = str_and(ex, v.string, r.string); - break; - case '^': - v.string = str_xor(ex, v.string, r.string); - break; - case '%': - v.string = str_mod(ex, v.string, r.string); - break; - case '*': - v.string = str_mpy(ex, v.string, r.string); - break; - default: - goto huh; - } - break; - default: - goto huh; - } - } - else if (x->op == DYNAMIC) - getdyn(ex, x, env, &assoc); - else - assoc = 0; - r = v; - goto set; - case ';': - case ',': - v = eval(ex, x, env); - while ((expr = expr->data.operand.right) && (expr->op == ';' || expr->op == ',')) - { - v = eval(ex, expr->data.operand.left, env); - if (ex->loopcount) - return v; - } - return expr ? eval(ex, expr, env) : v; - case '?': - v = eval(ex, x, env); - return v.integer ? eval(ex, expr->data.operand.right->data.operand.left, env) : eval(ex, expr->data.operand.right->data.operand.right, env); - case AND: - v = eval(ex, x, env); - return v.integer ? eval(ex, expr->data.operand.right, env) : v; - case OR: - v = eval(ex, x, env); - return v.integer ? v : eval(ex, expr->data.operand.right, env); - } - v = eval(ex, x, env); - if ((x = expr->data.operand.right)) { - r = eval(ex, x, env); - if (!BUILTIN(x->type) && expr->binary) { - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - rtmp = *x; - rtmp.data.constant.value = r; - if (!(*ex->disc->binaryf) (ex, &tmp, expr, &rtmp, 0, ex->disc)) return tmp.data.constant.value; - } - } - switch (expr->data.operand.left->type) - { - case FLOATING: - switch (expr->op) - { - case F2I: - v.integer = v.floating; - return v; - case F2S: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if (expr->data.operand.left->op != DYNAMIC && expr->data.operand.left->op != ID) - { - sfprintf(ex->tmp, "%g", v.floating); - tmp.data.constant.value.string = exstash(ex->tmp, ex->ve); - } - else if ((*ex->disc->convertf)(ex, &tmp, STRING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) { - sfprintf(ex->tmp, "%g", v.floating); - tmp.data.constant.value.string = exstash(ex->tmp, ex->ve); - } - tmp.type = STRING; - return tmp.data.constant.value; - case F2X: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) - exerror("%s: cannot convert floating value to external", tmp.data.variable.symbol->name); - tmp.type = expr->type; - return tmp.data.constant.value; - case '!': - v.floating = !((Sflong_t)v.floating); - return v; - case '~': - v.floating = ~((Sflong_t)v.floating); - return v; - case '-': - if (x) - v.floating -= r.floating; - else - v.floating = -v.floating; - return v; - case '+': - v.floating += r.floating; - return v; - case '&': - v.floating = (Sflong_t)v.floating & (Sflong_t)r.floating; - return v; - case '|': - v.floating = (Sflong_t)v.floating | (Sflong_t)r.floating; - return v; - case '^': - v.floating = (Sflong_t)v.floating ^ (Sflong_t)r.floating; - return v; - case '*': - v.floating *= r.floating; - return v; - case '/': - if (r.floating == 0.0) - exerror("floating divide by 0"); - else - v.floating /= r.floating; - return v; - case '%': - if ((r.integer = r.floating) == 0) - exerror("floating 0 modulus"); - else - v.floating = (Sflong_t)v.floating % r.integer; - return v; - case '<': - v.integer = v.floating < r.floating; - return v; - case LE: - v.integer = v.floating <= r.floating; - return v; - case EQ: - v.integer = v.floating == r.floating; - return v; - case NE: - v.integer = v.floating != r.floating; - return v; - case GE: - v.integer = v.floating >= r.floating; - return v; - case '>': - v.integer = v.floating > r.floating; - return v; - case LS: -/* IBM compilers can't deal with these shift operators on long long. - * v.floating = ((Sflong_t)v.floating) << ((Sflong_t)r.floating); - */ - { - Sflong_t op1, op2; - op1 = ((Sflong_t) v.floating); - op2 = ((Sflong_t) r.floating); - v.floating = (double) (op1 << op2); - } - return v; - case RS: -#if _WIN32 - v.floating = (Sflong_t) (((Sfulong_t) v.floating) >> ((Sflong_t) r.floating)); -#else -/* IBM compilers can't deal with these shift operators on long long. - * v.floating = ((Sfulong_t)v.floating) >> ((Sflong_t)r.floating); - */ - { - Sflong_t op1, op2; - op1 = ((Sfulong_t) v.floating); - op2 = ((Sflong_t) r.floating); - v.floating = (double) (op1 >> op2); - } -#endif - - return v; - } - break; - default: - switch (expr->op) - { - case X2F: - xConvert(ex, expr, FLOATING, v, &tmp); - return tmp.data.constant.value; - case X2I: - xConvert(ex, expr, INTEGER, v, &tmp); - return tmp.data.constant.value; - case X2S: - xConvert(ex, expr, STRING, v, &tmp); - return tmp.data.constant.value; - case X2X: - xConvert(ex, expr, expr->type, v, &tmp); - return tmp.data.constant.value; - case XPRINT: - xPrint(ex, expr, v, &tmp); - return tmp.data.constant.value; - default: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if (x) { - rtmp = *x; - rtmp.data.constant.value = r; - rp = &rtmp; - } else - rp = 0; - if (!(*ex->disc->binaryf) (ex, &tmp, expr, rp, 0, ex->disc)) - return tmp.data.constant.value; - } - goto integer; - case UNSIGNED: - switch (expr->op) - { - case '<': - v.integer = (Sfulong_t)v.integer < (Sfulong_t)r.integer; - return v; - case LE: - v.integer = (Sfulong_t)v.integer <= (Sfulong_t)r.integer; - return v; - case GE: - v.integer = (Sfulong_t)v.integer >= (Sfulong_t)r.integer; - return v; - case '>': - v.integer = (Sfulong_t)v.integer > (Sfulong_t)r.integer; - return v; - } - /*FALLTHROUGH*/ - case INTEGER: - integer: - switch (expr->op) - { - case I2F: -#if _WIN32 - v.floating = v.integer; -#else - if (expr->type == UNSIGNED) - v.floating = (Sfulong_t)v.integer; - else - v.floating = v.integer; -#endif - return v; - case I2S: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if (expr->data.operand.left->op != DYNAMIC && expr->data.operand.left->op != ID) - { - if (expr->data.operand.left->type == UNSIGNED) - sfprintf(ex->tmp, "%I*u", sizeof(v.integer), v.integer); - else - sfprintf(ex->tmp, "%I*d", sizeof(v.integer), v.integer); - tmp.data.constant.value.string = exstash(ex->tmp, ex->ve); - } - else if ((*ex->disc->convertf)(ex, &tmp, STRING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) { - if (expr->data.operand.left->type == UNSIGNED) - sfprintf(ex->tmp, "%I*u", sizeof(v.integer), v.integer); - else - sfprintf(ex->tmp, "%I*d", sizeof(v.integer), v.integer); - tmp.data.constant.value.string = exstash(ex->tmp, ex->ve); - } - tmp.type = STRING; - return tmp.data.constant.value; - case I2X: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) - exerror("%s: cannot convert integer value to external", tmp.data.variable.symbol->name); - tmp.type = expr->type; - return tmp.data.constant.value; - case '!': - v.integer = !v.integer; - return v; - case '~': - v.integer = ~v.integer; - return v; - case '-': - if (x) - v.integer -= r.integer; - else - v.integer = -v.integer; - return v; - case '+': - v.integer += r.integer; - return v; - case '&': - v.integer &= r.integer; - return v; - case '|': - v.integer |= r.integer; - return v; - case '^': - v.integer ^= r.integer; - return v; - case '*': - v.integer *= r.integer; - return v; - case '/': - if (r.integer == 0) - exerror("integer divide by 0"); - else - v.integer /= r.integer; - return v; - case '%': - if (r.integer == 0) - exerror("integer 0 modulus"); - else - v.integer %= r.integer; - return v; - case EQ: - v.integer = v.integer == r.integer; - return v; - case NE: - v.integer = v.integer != r.integer; - return v; - case LS: -/* IBM compilers can't deal with these shift operators on long long. - * v.floating = (Sflong_t)v.floating << (Sflong_t)r.floating; - */ - { - Sflong_t op1, op2; - op1 = ((Sflong_t) v.floating); - op2 = ((Sflong_t) r.floating); - v.floating = (double) (op1 << op2); - } - return v; - case RS: -/* IBM compilers can't deal with these shift operators on long long. - * v.integer = ((Sfulong_t)v.floating) >> (Sflong_t)r.floating; - */ - { - Sfulong_t op1; - Sflong_t op2; - op1 = ((Sfulong_t) v.floating); - op2 = ((Sflong_t) r.floating); - v.integer = (op1 >> op2); - } - return v; - case '<': - v.integer = v.integer < r.integer; - return v; - case LE: - v.integer = v.integer <= r.integer; - return v; - case GE: - v.integer = v.integer >= r.integer; - return v; - case '>': - v.integer = v.integer > r.integer; - return v; - } - break; - case STRING: - switch (expr->op) - { - case S2B: - v.integer = *v.string != 0; - return v; - case S2F: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if ((*ex->disc->convertf)(ex, &tmp, FLOATING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) - { - tmp.data.constant.value.floating = strtod(v.string, &e); - if (*e) - tmp.data.constant.value.floating = *v.string != 0; - } - tmp.type = FLOATING; - return tmp.data.constant.value; - case S2I: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if ((*ex->disc->convertf)(ex, &tmp, INTEGER, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) - { - if (v.string) { - tmp.data.constant.value.integer = strtoll(v.string, &e, 0); - if (*e) - tmp.data.constant.value.integer = *v.string != 0; - } - else - tmp.data.constant.value.integer = 0; - } - tmp.type = INTEGER; - return tmp.data.constant.value; - case S2X: - tmp = *expr->data.operand.left; - tmp.data.constant.value = v; - if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc)) - exerror("%s: cannot convert string value to external", tmp.data.variable.symbol->name); - tmp.type = expr->type; - return tmp.data.constant.value; - case EQ: - case NE: - v.integer = ((v.string && r.string) ? ((ex->disc->version >= 19981111L && ex->disc->matchf) ? (*ex->disc->matchf)(ex, expr->data.operand.left, v.string, expr->data.operand.right, r.string, env, ex->disc) : strmatch(v.string, r.string)) : (v.string == r.string)) == (expr->op == EQ); - return v; - case '+': - v.string = str_add(ex, v.string, r.string); - return v; - case '|': - v.string = str_ior(ex, v.string, r.string); - return v; - case '&': - v.string = str_and(ex, v.string, r.string); - return v; - case '^': - v.string = str_xor(ex, v.string, r.string); - return v; - case '%': - v.string = str_mod(ex, v.string, r.string); - return v; - case '*': - v.string = str_mpy(ex, v.string, r.string); - return v; - } - v.integer = strcoll(v.string, r.string); - switch (expr->op) - { - case '<': - v.integer = v.integer < 0; - return v; - case LE: - v.integer = v.integer <= 0; - return v; - case GE: - v.integer = v.integer >= 0; - return v; - case '>': - v.integer = v.integer > 0; - return v; - } - goto huh; - } - huh: - if (expr->binary) - exerror("operator %s %s %s not implemented", lexname(expr->data.operand.left->type, -1), lexname(expr->op, expr->subop), expr->data.operand.right ? lexname(expr->data.operand.right->type, -1) : "UNARY"); - else - exerror("operator %s %s not implemented", lexname(expr->op, expr->subop), lexname(expr->data.operand.left->type, -1)); - return exzero(expr->type); -} - -/* - * evaluate expression expr - */ - -Extype_t -exeval(Expr_t* ex, Exnode_t* expr, void* env) -{ - Extype_t v; - - vmclear(ex->ve); - if (expr->compiled.integer) - { - switch (expr->type) - { - case FLOATING: - v.floating = (*expr->compiled.floating)(ex->disc->data); - break; - case STRING: - v.string = (*expr->compiled.string)(ex->disc->data); - break; - default: - v.integer = (*expr->compiled.integer)(ex->disc->data); - break; - } - } - else - { - v = eval(ex, expr, env); - if (ex->loopcount > 0) - { - ex->loopcount = 0; - if (ex->loopop == RETURN) - return ex->loopret; - } - } - return v; -} - -#if 0 -/* strToL: - * Convert a string representation of an integer - * to an integer. The string can specify its own form - * using 0x, etc. - * If p != NULL, it points to the first character in - * s where numeric parsing fails, or the last character. - * The value is returned, with 0 returned for "". - */ -Sflong_t strToL(char *s, char **p) -{ - Sflong_t v; - int i; - int n; - - v = 0; - if (p) { - n = sfsscanf(s, "%I*i%n", sizeof(v), &v, &i); - if (n > 0) - *p = s + i; - else - *p = s; - } else - sfsscanf(s, "%I*i", sizeof(v), &v); - return v; -} -#endif - -/* exstring: - * Generate copy of input string using - * string memory. - */ -char *exstring(Expr_t * ex, char *s) -{ - return vmstrdup(ex->ve, s); -} - -/* exstralloc: - * If p = NULL, allocate sz bytes in expression - * memory; otherwise, realloc. - */ -void *exstralloc(Expr_t * ex, void *p, size_t sz) -{ - return vmresize(ex->ve, p, sz, VM_RSCOPY | VM_RSMOVE); -} - -/* exstrfree: - * Free memory obtained from exstralloc. - */ -int exstrfree(Expr_t * ex, void *p) -{ - return vmfree(ex->ve, p); -} - diff --git a/internal/ccall/expr/exexpr.c b/internal/ccall/expr/exexpr.c deleted file mode 100644 index ae7abd5..0000000 --- a/internal/ccall/expr/exexpr.c +++ /dev/null @@ -1,43 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include "exlib.h" - -/* - * return the expression for name or sym coerced to type - */ - -Exnode_t* -exexpr(Expr_t* ex, const char* name, Exid_t* sym, int type) -{ - if (ex) - { - if (!sym) - sym = name ? (Exid_t*)dtmatch(ex->symbols, name) : &ex->main; - if (sym && sym->lex == PROCEDURE && sym->value) - { - if (type != DELETE_T) - return excast(ex, sym->value->data.procedure.body, type, NiL, 0); - exfreenode(ex, sym->value); - sym->lex = NAME; - sym->value = 0; - } - } - return 0; -} diff --git a/internal/ccall/expr/exgram.h b/internal/ccall/expr/exgram.h deleted file mode 100644 index baad996..0000000 --- a/internal/ccall/expr/exgram.h +++ /dev/null @@ -1,1151 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - -/* - * grammar support routines - * stuffed in a header so exparse.y can work - * with both yacc and bison - * sometimes free stuff can cost a lot - */ - -#if !defined(_EXGRAM_H) && ( defined(MINTOKEN) || defined(YYTOKENTYPE) ) -#define _EXGRAM_H - -#if !defined(_EXPARSE_H) -#define _EXPARSE_H -#endif - -#include "exlib.h" -#include - -#define exlex() extoken_fn(expr.program) - -#define ALLOCATE(p,x) (x*)exalloc(p,sizeof(x)) -#define QUALIFY(r,s) ((r)&&(expr.program->disc->flags&EX_QUALIFY)?qualify(r,s):(s)) - -static int a2t[] = { 0, FLOATING, INTEGER, STRING }; -static Switch_t swstate; - -Exstate_t expr; - -static int T(int t) -{ - if (expr.program->disc->types) - return expr.program->disc->types[t & TMASK]; - else - return a2t[t & TMASK]; -} - -/* - * allocate and initialize a new expression node in the current program - */ - -Exnode_t* -exnewnode(Expr_t* p, int op, int binary, int type, Exnode_t* left, Exnode_t* right) -{ - register Exnode_t* x; - - x = ALLOCATE(p, Exnode_t); - x->op = op; - x->type = type; - x->binary = binary; - x->local.number = 0; - x->local.pointer = 0; - x->data.operand.left = left; - x->data.operand.right = right; - return x; -} - -/* - * free node x and its children - */ - -void -exfreenode(Expr_t* p, register Exnode_t* x) -{ - register Print_t* pr; - register Exref_t* r; - Print_t* pn; - Exref_t* rn; - int i; - - switch (x->op) - { - case CALL: - if (x->data.call.args) - exfreenode(p, x->data.call.args); - break; - case CONSTANT: - break; - case DEFAULT: - if (x->data.select.next) - exfreenode(p, x->data.select.next); - break; - case DYNAMIC: - if (x->data.variable.index) - exfreenode(p, x->data.variable.index); - if (x->data.variable.symbol->local.pointer) - { - dtclose((Dt_t*)x->data.variable.symbol->local.pointer); - x->data.variable.symbol->local.pointer = 0; - } - break; - case '#': - if (x->data.variable.symbol->local.pointer) { - dtclose((Dt_t *) x->data.variable.symbol->local.pointer); - x->data.variable.symbol->local.pointer = 0; - } - break; -// case IN_OP: - case UNSET: - if (x->data.variable.index) - exfreenode(p, x->data.variable.index); - if (x->data.variable.symbol->local.pointer) { - dtclose((Dt_t *) x->data.variable.symbol->local.pointer); - x->data.variable.symbol->local.pointer = 0; - } - break; - case ITERATE: - case ITERATER: - if (x->data.generate.statement) - exfreenode(p, x->data.generate.statement); - break; - case ID: - rn = x->data.variable.reference; - while ((r = rn)) - { - rn = r->next; - vmfree(p->vm, r); - } - if (x->data.variable.index) - exfreenode(p, x->data.variable.index); - break; - case GSUB: - case SUB: - case SUBSTR: - exfreenode(p, x->data.string.base); - exfreenode(p, x->data.string.pat); - if (x->data.string.repl) - exfreenode(p, x->data.string.repl); - break; - case TOKENS: - case SPLIT: - if (x->data.split.seps) - exfreenode(p, x->data.split.seps); - exfreenode(p, x->data.split.string); - if (x->data.split.array->local.pointer) { - dtclose((Dt_t *) x->data.split.array->local.pointer); - x->data.split.array->local.pointer = 0; - } - break; - case PRINT: - exfreenode(p, x->data.operand.left); - break; - case PRINTF: - case SPRINTF: - if (x->data.print.descriptor) - exfreenode(p, x->data.print.descriptor); - pn = x->data.print.args; - while ((pr = pn)) - { - for (i = 0; i < elementsof(pr->param) && pr->param[i]; i++) - exfreenode(p, pr->param[i]); - if (pr->arg) - exfreenode(p, pr->arg); - pn = pr->next; - vmfree(p->vm, pr); - } - break; - default: - if (x->data.operand.left) - exfreenode(p, x->data.operand.left); - if (x->data.operand.right) - exfreenode(p, x->data.operand.right); - break; - } - vmfree(p->vm, x); -} - -/* extract: - * Given an argument list, extract first argument, - * check its type, reset argument list, and - * return first argument. - * Return 0 on failure. - */ -static Exnode_t *extract(Expr_t * p, Exnode_t ** argp, int type) { - Exnode_t *args = *argp; - Exnode_t *left; - - if (!args || (type != args->data.operand.left->type)) - return 0; - *argp = args->data.operand.right; - left = args->data.operand.left; - args->data.operand.left = args->data.operand.right = 0; - exfreenode(p, args); - return left; -} - -/* exnewsplit: - * Generate split/tokens node. - * Fifth argument is optional. - */ -static Exnode_t *exnewsplit(Expr_t * p, int op, Exid_t* dyn, Exnode_t * s, Exnode_t* seps) { - Exnode_t *ss = 0; - - if (dyn->local.pointer == 0) - exerror("cannot use non-array %s in %s", dyn->name, exopname(op)); - if ((dyn->index_type > 0) && (dyn->index_type != INTEGER)) - exerror("in %s, array %s must have integer index type, not %s", - exopname(op), dyn->name, extypename(p, s->type)); - if (dyn->type != STRING) - exerror("in %s, array %s entries must have string type, not %s", - exopname(op), dyn->name, extypename(p, s->type)); - if (s->type != STRING) - exerror("first argument to %s must have string type, not %s", - exopname(op), extypename(p, s->type)); - if (seps && (seps->type != STRING)) - exerror("third argument to %s must have string type, not %s", - exopname(op), extypename(p, seps->type)); - ss = exnewnode(p, op, 0, INTEGER, NiL, NiL); - ss->data.split.array = dyn; - ss->data.split.string = s; - ss->data.split.seps = seps; - return ss; -} - -/* exnewsub: - * Generate sub node. - * Third argument is optional. - */ -static Exnode_t *exnewsub(Expr_t * p, Exnode_t * args, int op) { - Exnode_t *base; - Exnode_t *pat; - Exnode_t *repl; - Exnode_t *ss = 0; - - base = extract(p, &args, STRING); - if (!base) - exerror("invalid first argument to sub operator"); - pat = extract(p, &args, STRING); - if (!pat) - exerror("invalid second argument to sub operator"); - if (args) { - repl = extract(p, &args, STRING); - if (!repl) - exerror("invalid third argument to sub operator"); - } else - repl = 0; - if (args) - exerror("too many arguments to sub operator"); - ss = exnewnode(p, op, 0, STRING, NiL, NiL); - ss->data.string.base = base; - ss->data.string.pat = pat; - ss->data.string.repl = repl; - return ss; -} - -/* exnewsubstr: - * Generate substr node. - */ -static Exnode_t *exnewsubstr(Expr_t * p, Exnode_t * args) { - Exnode_t *base; - Exnode_t *pat; - Exnode_t *repl; - Exnode_t *ss = 0; - - base = extract(p, &args, STRING); - if (!base) - exerror("invalid first argument to substr operator"); - pat = extract(p, &args, INTEGER); - if (!pat) - exerror("invalid second argument to substr operator"); - if (args) { - repl = extract(p, &args, INTEGER); - if (!repl) - exerror("invalid third argument to substr operator"); - } else - repl = 0; - if (args) - exerror("too many arguments to substr operator"); - ss = exnewnode(p, SUBSTR, 0, STRING, NiL, NiL); - ss->data.string.base = base; - ss->data.string.pat = pat; - ss->data.string.repl = repl; - return ss; -} - -/* exstringOf: - * Cast x to type STRING - * Assume x->type != STRING - */ -static Exnode_t *exstringOf(Expr_t * p, register Exnode_t * x) { - int type = x->type; - int cvt = 0; - - if (!type) { - x->type = STRING; - return x; - } - if (!BUILTIN(type) && !p->disc->stringof) - exerror("cannot convert %s to STRING", extypename(p, type)); - if (x->op != CONSTANT) { - if (!BUILTIN(type)) { - if ((*p->disc->stringof) (p, x, 1, p->disc) < 0) { - exerror("cannot convert %s to STRING", - extypename(p, type)); - } - cvt = XPRINT; - } else - switch (type) { - case FLOATING: - cvt = F2S; - break; - case INTEGER: - cvt = I2S; - break; - } - x = exnewnode(p, cvt, 0, STRING, x, 0); - } else if (!BUILTIN(type)) { - if ((*p->disc->stringof) (p, x, 0, p->disc) < 0) - exerror("cannot convert constant %s to STRING", - extypename(p, x->type)); - } else - switch (type) { - case FLOATING: - sfprintf(p->tmp, "%g", x->data.constant.value.floating); - x->data.constant.value.string = - vmstrdup(p->vm, sfstruse(p->tmp)); - break; - case INTEGER: - sfprintf(p->tmp, "%I*d", - sizeof(x->data.constant.value.integer), - x->data.constant.value.integer); - x->data.constant.value.string = - vmstrdup(p->vm, sfstruse(p->tmp)); - break; - default: - exerror("internal error: %d: unknown type", type); - break; - } - x->type = STRING; - return x; -} - -/* exprint: - * Generate argument list of strings. - */ -static Exnode_t *exprint(Expr_t * p, Exid_t * ex, Exnode_t * args) { - Exnode_t *arg = args; - Exnode_t *pr; - - while (arg) { - if (arg->data.operand.left->type != STRING) - arg->data.operand.left = - exstringOf(p, arg->data.operand.left); - arg = arg->data.operand.right; - } - pr = exnewnode(p, ex->index, 1, ex->type, args, NiL); - return pr; -} - -/* makeVar: - * - * Create variable from s[idx].refs - * If s is DYNAMIC, refs is non-empty and dyna represents s[idx]. - * The rightmost element in s[idx].refs becomes the dominant symbol, - * and the prefix gets stored in refs. (This format is used to simplify - * the yacc parser.) - */ -static Exnode_t *makeVar(Expr_t * prog, Exid_t * s, Exnode_t * idx, - Exnode_t * dyna, Exref_t * refs) { - Exnode_t *nn; - int kind; - Exid_t *sym; - - /* parse components */ - if (refs) { - if (refs->next) { - sym = refs->next->symbol; - refs->next->symbol = refs->symbol; - } else - sym = refs->symbol; - refs->symbol = s; - refs->index = idx; - } else - sym = s; - - if (sym->type) - kind = sym->type; - else - kind = STRING; - - nn = exnewnode(prog, ID, 0, kind, NiL, NiL); - nn->data.variable.symbol = sym; - nn->data.variable.reference = refs; - nn->data.variable.index = 0; - nn->data.variable.dyna = dyna; - if (!prog->disc->getf) - exerror("%s: identifier references not supported", sym->name); - else if (expr.program->disc->reff) - (*expr.program->disc->reff) (prog, nn, - nn->data.variable.symbol, refs, - NiL, EX_SCALAR, prog->disc); - - return nn; -} - -/* - * cast x to type - */ - -static char* typename[] = -{ - "external", "integer", "unsigned", "char", "float", "string" -}; - -static int typecast[6][6] = -{ - {X2X, X2I, X2I, X2I, X2F, X2S}, - {I2X, 0, 0, 0, I2F, I2S}, - {I2X, 0, 0, 0, I2F, I2S}, - {I2X, 0, 0, 0, I2F, I2S}, - {F2X, F2I, F2I, F2I, 0, F2S}, - {S2X, S2I, S2I, S2I, S2F, 0}, -}; - -#define TYPEINDEX(t) (((t)>=INTEGER&&(t)<=STRING)?((t)-INTEGER+1):0) -#define TYPENAME(t) typename[TYPEINDEX(t)] -#define TYPECAST(f,t) typecast[TYPEINDEX(f)][TYPEINDEX(t)] - -#define EXTERNAL(t) ((t)>=F2X) - -char *extypename(Expr_t * p, int type) { - if (BUILTIN(type)) - return TYPENAME(type); - return (p->disc->typename) (p, type); -} - -/* exnoncast: - * Return first non-cast node. - */ -Exnode_t *exnoncast(register Exnode_t * x) { - while (x && (x->op >= F2I) && (x->op <= X2X)) - x = x->data.operand.left; - return x; -} - -Exnode_t* -excast(Expr_t* p, register Exnode_t* x, register int type, register Exnode_t* xref, int arg) -{ - register int t2t; - char* s; - char* e; - - if (x && x->type != type && type && type != VOIDTYPE) - { - if (!x->type) - { - x->type = type; - return x; - } - if (!(t2t = TYPECAST(x->type, type))) - return x; - if (EXTERNAL(t2t) && !p->disc->convertf) - exerror("cannot convert %s to %s", extypename(p, x->type), extypename(p, type)); - if (x->op != CONSTANT) { - Exid_t *sym = (xref ? xref->data.variable.symbol : NiL); - if (EXTERNAL(t2t)) { - int a = (arg ? arg : 1); - if ((*p->disc->convertf) (p, x, type, sym, a, p->disc) < 0) { - if (xref) { - if ((sym->lex == FUNCTION) && arg) - exerror ("%s: cannot use value of type %s as argument %d in function %s", - sym->name, extypename(p, x->type), - arg, sym->name); - else - exerror("%s: cannot convert %s to %s", - xref->data.variable.symbol->name, - extypename(p, x->type), - extypename(p, type)); - } else { - exerror("cannot convert %s to %s", - extypename(p, x->type), extypename(p, type)); - } - } - } - x = exnewnode(p, t2t, 0, type, x, xref); - } - else switch (t2t) - { - case F2X: - case I2X: - case S2X: - case X2F: - case X2I: - case X2S: - case X2X: - if (xref && xref->op == ID) - { - if ((*p->disc->convertf)(p, x, type, xref->data.variable.symbol, arg, p->disc) < 0) - exerror("%s: cannot cast constant %s to %s", xref->data.variable.symbol->name, extypename(p, x->type), extypename(p, type)); - } - else if ((*p->disc->convertf)(p, x, type, NiL, arg, p->disc) < 0) - exerror("cannot cast constant %s to %s", extypename(p, x->type), extypename(p, type)); - break; - case F2I: - x->data.constant.value.integer = x->data.constant.value.floating; - break; - case F2S: - sfprintf(p->tmp, "%g", x->data.constant.value.floating); - x->data.constant.value.string = exstash(p->tmp, p->vm); - break; - case I2F: - x->data.constant.value.floating = x->data.constant.value.integer; - break; - case I2S: - sfprintf(p->tmp, "%I*d", sizeof(x->data.constant.value.integer), x->data.constant.value.integer); - x->data.constant.value.string = exstash(p->tmp, p->vm); - break; - case S2F: - s = x->data.constant.value.string; - x->data.constant.value.integer = strtod(s, &e); - if (*e) - x->data.constant.value.floating = (*s != 0); - break; - case S2I: - s = x->data.constant.value.string; - x->data.constant.value.integer = strtoll(s, &e, 0); - if (*e) - x->data.constant.value.integer = (*s != 0); - break; - default: - exerror("internal error: %d: unknown cast op", t2t); - break; - } - x->type = type; - } - return x; -} - -#if 0 - -/* - * convert value v from type from to type to - * string data placed in buf - */ - -Extype_t -exconvert(Expr_t* p, Extype_t v, int from, int to, char* buf, size_t size) -{ - register int t2t; - int n; - Exnode_t tmp; - - if (from && (t2t = TYPECAST(from, to))) - { - if (EXTERNAL(t2t) && !p->disc->convertf) - exerror("cannot cast %s to %s", TYPENAME(from), TYPENAME(to)); - switch (t2t) - { - case F2X: - case I2X: - case S2X: - case X2F: - case X2I: - case X2S: - tmp.type = from; - tmp.name = "*INTERNAL*"; - tmp.data.constant.value = v; - if ((*p->disc->convertf)(p, &tmp, to, NiL, -1, p->disc) < 0) - exerror("cannot convert %s to %s", TYPENAME(from), TYPENAME(to)); - if (t2t == X2S) - { - n = strlen(tmp.data.constant.value.string); - if (n >= size) - n = size - 1; - memcpy(buf, tmp.data.constant.value.string, n); - buf[n] = 0; - vmfree(p->vm, tmp.data.constant.value.string); - tmp.data.constant.value.string = buf; - } - return tmp.data.constant.value; - case F2I: - v.integer = (type == UNSIGNED) ? (Sfulong_t)v.floating : v.floating; - break; - case F2S: - sfsprintf(buf, size, "%g", v.floating); - v.string = buf; - break; - case I2F: - v.floating = (from == UNSIGNED) ? (Sfulong_t)v.integer : v.integer; - break; - case I2S: - sfsprintf(buf, size, "%I*d", sizeof(v.integer), v.integer); - v.string = buf; - break; - case S2F: - v.floating = *v.string != 0; - break; - case S2I: - v.integer = *v.string != 0; - break; - default: - exerror("internal error: %d: unknown conversion op", t2t); - break; - } - } - return v; -} - -#endif - -/* - * force ref . sym qualification - */ - -static Exid_t* -qualify(register Exref_t* ref, register Exid_t* sym) -{ - register Exid_t* x; - char* s; - - while (ref->next) - ref = ref->next; - sfprintf(expr.program->tmp, "%s.%s", ref->symbol->name, sym->name); - s = exstash(expr.program->tmp, NiL); - if (!(x = (Exid_t*)dtmatch(expr.program->symbols, s))) - { - if ((x = newof(0, Exid_t, 1, strlen(s) - EX_NAMELEN + 1))) - { - memcpy(x, sym, sizeof(Exid_t) - EX_NAMELEN); - strcpy(x->name, s); - dtinsert(expr.program->symbols, x); - } - else - { - exnospace(); - x = sym; - } - } - return x; -} - -/* - * check function call arg types and count - * return function identifier node - */ - -static Exnode_t* -call(Exref_t* ref, register Exid_t* fun, register Exnode_t* args) -{ - register int t; - register int type; - Exnode_t* x; - int num; - - x = exnewnode(expr.program, ID, 0, 0, NiL, NiL); - t = fun->type; - x->data.variable.symbol = fun = QUALIFY(ref, fun); - x->data.variable.reference = ref; - num = 0; - N(t); - while ((type = T(t))) - { - if (!args) - { - exerror("%s: not enough args", fun->name); - return args; - } - num++; - if (type != args->data.operand.left->type) - args->data.operand.left = excast(expr.program, args->data.operand.left, type, NiL, num); - args = args->data.operand.right; - N(t); - } - if (args) - exerror("%s: too many args", fun->name); - return x; -} - -/* - * precompile a printf/scanf call - */ - -static Print_t* -preprint(register Exnode_t* args) -{ - register Print_t* x; - register char* s; - register int c; - int t; - int i; - int n; - char* e; - char* f; - Print_t* p = 0; - Print_t* q; - - if (!args || args->data.operand.left->type != STRING) - exerror("format string argument expected"); - if (args->data.operand.left->op != CONSTANT) - { - x = ALLOCATE(expr.program, Print_t); - memzero(x, sizeof(*x)); - x->arg = args; - return x; - } - f = args->data.operand.left->data.constant.value.string; - args = args->data.operand.right; - for (s = f; *s; s++) - { - sfputc(expr.program->tmp, *s); - if (*s == '%') - { - if (!*++s) - exerror("%s: trailing %% in format", f); - if (*s != '%') - break; - if (args) - sfputc(expr.program->tmp, '%'); - } - } - x = 0; - for (;;) - { - q = ALLOCATE(expr.program, Print_t); - if (x) - x->next = q; - else - p = q; - x = q; - memzero(x, sizeof(*x)); - if (*s) - { - i = 0; - t = INTEGER; - for (;;) - { - switch (c = *s++) - { - case 0: - exerror("unterminated %%... in format"); - goto done; - case '*': - if (i >= elementsof(x->param)) - { - *s = 0; - exerror("format %s has too many * arguments", f); - goto done; - } - if (!args) - { - *s = 0; - exerror("format %s * argument expected", f); - goto done; - } - x->param[i++] = args->data.operand.left; - args = args->data.operand.right; - break; - case '(': - n = 1; - for (;;) - { - sfputc(expr.program->tmp, c); - switch (c = *s++) - { - case 0: - s--; - break; - case '(': - n++; - continue; - case ')': - if (--n <= 0) - break; - continue; - default: - continue; - } - break; - } - break; - case 'c': - case 'd': - goto specified; - case 'e': - case 'f': - case 'g': - t = FLOATING; - goto specified; - case 'h': - exerror("short formats not supported"); - goto done; - case 'l': - t = INTEGER; - break; - case 'o': - case 'u': - case 'x': - case 'T': - t = UNSIGNED; - goto specified; - case 's': - case 'S': - t = STRING; - goto specified; - default: - if (isalpha(c)) - goto specified; - break; - } - sfputc(expr.program->tmp, c); - } - specified: - sfputc(expr.program->tmp, c); - for (e = s; *s; s++) - { - if (*s == '%') - { - if (!*++s) - { - *e = 0; - exerror("%s: trailing %% in format", f); - goto done; - } - if (*s != '%') - { - s--; - break; - } - } - sfputc(expr.program->tmp, *s); - } - if (!args) - { - *e = 0; - exerror("%s format argument expected", f); - goto done; - } - x->arg = args->data.operand.left; - switch (t) - { - case FLOATING: - if (x->arg->type != FLOATING) - x->arg = exnewnode(expr.program, x->arg->type == STRING ? S2F : INTEGRAL(x->arg->type) ? I2F : X2F, 0, FLOATING, x->arg, x->arg->op == ID ? x->arg : (Exnode_t*)0); - break; - case INTEGER: - case UNSIGNED: - if (!INTEGRAL(x->arg->type)) - x->arg = exnewnode(expr.program, x->arg->type == STRING ? S2I : x->arg->type == FLOATING ? F2I : X2I, 0, INTEGER, x->arg, x->arg->op == ID ? x->arg : (Exnode_t*)0); - x->arg->type = t; - break; - case STRING: - if (x->arg->type != STRING) - { - if (x->arg->op == CONSTANT && x->arg->data.constant.reference && expr.program->disc->convertf) - { - if ((*expr.program->disc->convertf)(expr.program, x->arg, STRING, x->arg->data.constant.reference, 0, expr.program->disc) < 0) - exerror("cannot convert string format argument"); - else x->arg->data.constant.value.string = vmstrdup(expr.program->vm, x->arg->data.constant.value.string); - } - else if (!expr.program->disc->convertf || (x->arg->op != ID && x->arg->op != DYNAMIC && x->arg->op != F2X && x->arg->op != I2X && x->arg->op != S2X)) - exerror("string format argument expected"); - else - x->arg = exnewnode(expr.program, x->arg->type == FLOATING ? F2S : INTEGRAL(x->arg->type) ? I2S : X2S, 0, STRING, x->arg, x->arg->op == ID ? x->arg : (Exnode_t*)0); - } - break; - } - args = args->data.operand.right; - } - x->format = exstash(expr.program->tmp, expr.program->vm); - if (!*s) - break; - f = s; - } - if (args) - exerror("too many format arguments"); - done: - sfstrseek(expr.program->tmp, 0, SEEK_SET); - return p; -} - -/* - * push a new input stream and program - */ - -int -expush(Expr_t* p, const char* name, int line, const char* sp, Sfio_t* fp) -{ - register Exinput_t* in; - register char* s; - char buf[PATH_MAX]; - - if (!(in = newof(0, Exinput_t, 1, 0))) - { - exnospace(); - return -1; - } - if (!p->input) - p->input = &expr.null; - if (!(in->bp = in->sp = (char*)sp)) - { - if ((in->fp = fp)) - in->close = 0; - else if (name) - { - if (!(s = pathfind(name, p->disc->lib, p->disc->type, buf, sizeof(buf))) || !(in->fp = sfopen(NiL, s, "r"))) - { - exerror("%s: file not found", name); - in->bp = in->sp = ""; - } - else - { - name = (const char*)vmstrdup(p->vm, s); - in->close = 1; - } - } - } - else in->fp = 0; - if (!(in->next = p->input)->next) - { - p->errors = 0; - if (!(p->disc->flags & EX_INTERACTIVE)) - { - if (line >= 0) - error_info.line = line; - } - else if (!error_info.line) - error_info.line = 1; - } - else if (line >= 0) - error_info.line = line; - setcontext(p); - p->eof = 0; - p->input = in; - in->file = error_info.file; - if (line >= 0) - error_info.file = (char*)name; - in->line = error_info.line; - in->nesting = 0; - in->unit = !name && !line; - p->program = expr.program; - expr.program = p; - return 0; -} - -/* - * pop the current input stream - */ - -int -expop(register Expr_t* p) -{ - register int c; - register Exinput_t* in; - - if (!(in = p->input) || !in->next || in->unit) - return -1; - if (in->nesting) - exerror("unbalanced quote or nesting construct"); - error_info.file = in->file; - if (in->next->next) - error_info.line = in->line; - else - { - if (p->errors && in->fp && p->linep != p->line) - while ((c = sfgetc(in->fp)) != EOF) - if (c == '\n') - { - error_info.line++; - break; - } - if (!(p->disc->flags & EX_INTERACTIVE)) - error_info.line = in->line; - } - if (in->fp && in->close) - sfclose(in->fp); - if (in->pushback) - free(in->pushback); - p->input = in->next; - free(in); - setcontext(p); - if (p->program) - expr.program = p->program; - return 0; -} - -/* - * clear global state of stale pointers - */ - -void exinit(void) { - memset (&expr, 0, sizeof(Exstate_t)); -} - -/* - * compile the expression in [sf]p - */ - -int -excomp(register Expr_t* p, const char* name, int line, const char* sp, Sfio_t* fp) -{ - Exid_t* v; - int eof; - - p->more = 0; - eof = p->eof; - if (!sp && !fp) - { - if (!p->input) - return -1; - } - else if (expush(p, name, line, sp, fp)) - return -1; - else - p->input->unit = line >= 0; - exparse(); - p->input->unit = 0; - expop(p); - p->eof = eof; - if (expr.statics) - { - for (v = (Exid_t*)dtfirst(p->symbols); v; v = (Exid_t*)dtnext(p->symbols, v)) - if (v->isstatic) - { - dtdelete(p->symbols, v); - if (!--expr.statics) - break; - } - expr.statics = 0; - } - return 0; -} - -/* - * free the program p - */ - -void -exclose(register Expr_t* p, int all) -{ - register int i; - register Exinput_t* in; - - if (p) - { - if (all) - { - for (i = 3; i < elementsof(p->file); i++) - if (p->file[i]) - sfclose(p->file[i]); - if (p->vm) - vmclose(p->vm); - if (p->ve) - vmclose(p->ve); - if (p->symbols) - dtclose(p->symbols); - if (p->tmp) - sfclose(p->tmp); - while ((in = p->input)) - { - if (in->pushback) - free(in->pushback); - if (in->fp && in->close) - sfclose(in->fp); - if ((p->input = in->next)) - free(in); - } - free(p); - } - else - { - vmclear(p->ve); - p->main.value = 0; - } - } -} - -/* checkBinary: - * See if application wants to allow the given expression - * combination. l and r give the operands; the operator - * is given by ex. r may be NULL. - */ -static void -checkBinary(Expr_t * p, Exnode_t * l, Exnode_t * ex, Exnode_t * r) -{ - if ((*p->disc->binaryf) (p, l, ex, r, 1, p->disc) < 0) { - if (r) - exerror - ("cannot apply operator %s to expressions of types %s and %s", - exopname(ex->op), extypename(p, l->type), - extypename(p, r->type)); - else - exerror - ("cannot apply operator %s to expression of type %s", - exopname(ex->op), extypename(p, l->type)); - } -} - -/* checkName: - * We allow parser to accept any name in a declaration, in - * order to check that the name is undeclared and give a better - * error message if it isn't. - */ -static void checkName(Exid_t * id) -{ - switch (id->lex) { - case DYNAMIC: - exerror("Variable \"%s\" already declared", id->name); - break; - case FUNCTION: - exerror("Name \"%s\" already used as a function", id->name); - break; - case ID: - exerror("Name \"%s\" already used as a keyword", id->name); - break; - case NAME: - break; - default: - error(ERROR_PANIC, - "Unexpected token \"%s\" as name in dcl_item", id->name); - break; - } -} - -static int -cmpKey(Dt_t * d, Extype_t * key1, Extype_t * key2, Dtdisc_t * disc) -{ - if (key1->integer < key2->integer) - return -1; - else if (key1->integer > key2->integer) - return 1; - else - return 0; -} - -int -exisAssign(Exnode_t * n) -{ - return ((n->op == '=') && (n->subop == '=')); -} - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/expr/exlexname.c b/internal/ccall/expr/exlexname.c deleted file mode 100644 index 1cb2092..0000000 --- a/internal/ccall/expr/exlexname.c +++ /dev/null @@ -1,51 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * return lex name for op[subop] - */ - -#include "exlib.h" -#include "exop.h" - -#define TOTNAME 3 -#define MAXNAME 16 - -char* -exlexname(int op, int subop) -{ - register char* b; - - static int n; - static char buf[TOTNAME][MAXNAME]; - - if (op > MINTOKEN && op < MAXTOKEN) - return (char*)exop[op - MINTOKEN]; - if (++n > TOTNAME) - n = 0; - b = buf[n]; - if (op == '=') - { - if (subop > MINTOKEN && subop < MAXTOKEN) - sfsprintf(b, MAXNAME, "%s=", exop[subop - MINTOKEN]); - else if (subop > ' ' && subop <= '~') - sfsprintf(b, MAXNAME, "%c=", subop); - else sfsprintf(b, MAXNAME, "(%d)=", subop); - } - else if (op > ' ' && op <= '~') - sfsprintf(b, MAXNAME, "%c", op); - else sfsprintf(b, MAXNAME, "(%d)", op); - return b; -} diff --git a/internal/ccall/expr/exlib.h b/internal/ccall/expr/exlib.h deleted file mode 100644 index 1ab24ef..0000000 --- a/internal/ccall/expr/exlib.h +++ /dev/null @@ -1,196 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Glenn Fowler - * AT&T Research - * - * expression library private definitions - */ - -#ifndef _EXLIB_H -#define _EXLIB_H - -#include -#include - -#define sfstrseek(f,p,m) \ - ( \ - (((p) < 0 || (p) > (f)->size) ? (char*)0 : \ - (char*)((f)->next = (f)->data+(p)) ) \ - ) - - -typedef struct Exinput_s /* input stack */ -{ - struct Exinput_s*next; /* next in stack */ - int close; /* close fp on pop */ - char* file; /* previous file */ - Sfio_t* fp; /* expression file pointer */ - int line; /* previous line */ - int nesting; /* expression nesting level */ - int peek; /* 1 char peek */ - int unit; /* first frame in parse unit */ - char* pushback; /* pushback buffer */ - char* bp; /* expression string base */ - char* pp; /* pushback pointer */ - char* sp; /* expression string pointer */ -} Exinput_t; - -typedef struct Print_s /* compiled printf arg node */ -{ - struct Print_s* next; /* next arg */ - char* format; /* printf format for arg */ - struct Exnode_s*param[3]; /* 0:width 1:precision 2:base */ - struct Exnode_s*arg; /* arg to format */ -} Print_t; - -#define _EX_DATA_PRIVATE_ \ - Exnode_t* next; /* free list link */ \ - Extype_t value; /* dynamic variable value */ \ - struct \ - { \ - Exid_t* procedure; /* called procedure */ \ - Exnode_t* args; /* actual argument list */ \ - } call; /* procedure call */ \ - struct \ - { \ - Exnode_t* array; /* array name */ \ - Exid_t* index; /* array index */ \ - Exnode_t* statement; /* statement to apply */ \ - } generate; /* associative array generator */ \ - struct \ - { \ - Exid_t* array; /* array */ \ - Exnode_t* string; /* string */ \ - Exnode_t* seps; /* optional separators */ \ - } split; /* string split */ \ - struct \ - { \ - Exnode_t* descriptor; /* Expr_t.file index */ \ - Print_t* args; /* compiler printf args */ \ - } print; /* printf */ \ - struct \ - { \ - Exnode_t* base; /* base string */ \ - Exnode_t* pat; /* pattern or start index */ \ - Exnode_t* repl; /* optional replacement or end index */ \ - } string; /* string builtins */ \ - struct \ - { \ - Exnode_t* args; /* formal arg list */ \ - Exnode_t* body; /* body */ \ - Dt_t* frame; /* local symbol frame */ \ - int arity; /* # formal args */ \ - } procedure; /* procedure args and body */ \ - struct \ - { \ - Exnode_t* descriptor; /* Expr_t.file index */ \ - Exnode_t* format; /* format arg */ \ - Exnode_t* args; /* actual args */ \ - } scan; /* printf */ - -#define _EX_NODE_PRIVATE_ \ - Exshort_t subop; /* operator qualifier */ \ - Exshort_t pad_2; /* padding */ - -#define _EX_PROG_PRIVATE_ \ - Vmalloc_t* ve; /* eval tmp region */ \ - Dt_t* frame; /* frame symbol table */ \ - Dtdisc_t symdisc; /* Expr_t.symbols discipline */ \ - Exdisc_t* disc; /* user discipline */ \ - Exinput_t* input; /* input stack */ \ - Expr_t* program; /* previous program on stack */ \ - Sfio_t* tmp; /* tmp string buffer */ \ - Extype_t loopret; /* return value */ \ - Exid_t main; /* main procedure */ \ - char line[512]; /* last few input tokens */ \ - char* linep; /* line[] pointer */ \ - int eof; /* lex hit eof */ \ - int errors; /* fatal error count */ \ - int formals; /* parsing formal args */ \ - int linewrap; /* linep wrapped around line[] */ \ - int loopcount; /* break|continue|return count */ \ - int loopop; /* break|continue|return op */ \ - int nesting; /* exstatement() nesting */ - -#include -#include -#include -#include - -#define cast excast -#define id_string (&exbuiltin[0]) - -#define exunlex(p,c) ((p)->linep--,(p)->input->peek=(c)) -#define putcontext(p,c) (((p)->linep>=&(p)->line[sizeof((p)->line)]?(p)->linep=(p)->line,(p)->linewrap=1:0),*(p)->linep++=(c)) -#define setcontext(p) ((p)->linep=(p)->line,(p)->linewrap=0) - -typedef struct Switch_s /* switch parse state */ -{ - struct Switch_s*prev; /* previous switch state */ - Exnode_t* firstcase; /* first case block */ - Exnode_t* lastcase; /* last case block */ - Exnode_t* defcase; /* default case block */ - Extype_t** base; /* label base pointer */ - Extype_t** cur; /* current label pointer */ - Extype_t** last; /* last label pointer */ - int def; /* default label hit */ - int type; /* switch test type */ -} Switch_t; - -typedef struct Exassoc_s /* associative array bucket */ -{ - Dtlink_t link; /* table link */ - Extype_t key; /* key */ - Extype_t value; /* value */ - char name[1]; /* index name */ -} Exassoc_t; - -typedef struct Exstate_s /* ex global state */ -{ - Exid_t* id; /* current declaration id */ - int declare; /* current declaration type */ - Exref_t* lastref; /* last in . reference list */ - int nolabel; /* ':' not a label */ - Exinput_t null; /* null input */ - Expr_t* program; /* current program */ - Exnode_t* procedure; /* current procedure */ - Exref_t* refs; /* . reference list */ - int assigned; /* declaration assignment */ - int instatic; /* static declaration */ - int statics; /* static used */ - Switch_t* swstate; /* switch parse state */ - char nullstring[1]; /* "" */ -} Exstate_t; - -extern Exid_t exbuiltin[]; -extern const char* exversion; -extern Exstate_t expr; - -extern int exparse(void); /* yacc should do this */ -#if defined(WIN32) -#define strtoll _strtoi64 -#define strtoull _strtoui64 -#endif -extern Sflong_t strToL(char *, char **); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/expr/exnospace.c b/internal/ccall/expr/exnospace.c deleted file mode 100644 index 553fba2..0000000 --- a/internal/ccall/expr/exnospace.c +++ /dev/null @@ -1,33 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include - -/* - * no space message with default (empty) string value - */ - -char* -exnospace(void) -{ - static const char null[1]; - - exerror("out of space"); - return (char*)null; -} diff --git a/internal/ccall/expr/exop.h b/internal/ccall/expr/exop.h deleted file mode 100644 index bcb9f97..0000000 --- a/internal/ccall/expr/exop.h +++ /dev/null @@ -1,80 +0,0 @@ -static const char* exop[] = { - "MINTOKEN", - "INTEGER", - "UNSIGNED", - "CHARACTER", - "FLOATING", - "STRING", - "VOIDTYPE", - "STATIC", - "ADDRESS", - "ARRAY", - "BREAK", - "CALL", - "CASE", - "CONSTANT", - "CONTINUE", - "DECLARE", - "DEFAULT", - "DYNAMIC", - "ELSE", - "EXIT", - "FOR", - "FUNCTION", - "GSUB", - "ITERATE", - "ITERATER", - "ID", - "IF", - "LABEL", - "MEMBER", - "NAME", - "POS", - "PRAGMA", - "PRE", - "PRINT", - "PRINTF", - "PROCEDURE", - "QUERY", - "RAND", - "RETURN", - "SCANF", - "SPLIT", - "SPRINTF", - "SRAND", - "SSCANF", - "SUB", - "SUBSTR", - "SWITCH", - "TOKENS", - "UNSET", - "WHILE", - "F2I", - "F2S", - "I2F", - "I2S", - "S2B", - "S2F", - "S2I", - "F2X", - "I2X", - "S2X", - "X2F", - "X2I", - "X2S", - "X2X", - "XPRINT", - "OR", - "AND", - "NE", - "EQ", - "GE", - "LE", - "RS", - "LS", - "IN_OP", - "UNARY", - "DEC", - "INC", - "CAST", -}; diff --git a/internal/ccall/expr/exopen.c b/internal/ccall/expr/exopen.c deleted file mode 100644 index f4c51d9..0000000 --- a/internal/ccall/expr/exopen.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include "config.h" - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif - -#include -#include - -/* - * allocate a new expression program environment - */ - -Expr_t* -exopen(register Exdisc_t* disc) -{ - register Expr_t* program; - register Exid_t* sym; - int debug; - - if (!(program = newof(0, Expr_t, 1, 0))) - return 0; - program->symdisc.key = offsetof(Exid_t, name); - debug = getenv("VMDEBUG") != 0; - if (!(program->symbols = dtopen(&program->symdisc, Dtset)) || - !(program->tmp = sfstropen()) || - !(program->vm = (debug ? vmopen(Vmdcsbrk, Vmdebug, VM_DBCHECK|VM_DBABORT) : vmopen(Vmdcheap, Vmbest, 0))) || - !(program->ve = (debug ? vmopen(Vmdcsbrk, Vmdebug, VM_DBCHECK|VM_DBABORT) : vmopen(Vmdcheap, Vmbest, 0)))) - { - exclose(program, 1); - return 0; - } - program->id = "libexpr:expr"; - program->disc = disc; - setcontext(program); - program->file[0] = sfstdin; - program->file[1] = sfstdout; - program->file[2] = sfstderr; - strcpy(program->main.name, "main"); - program->main.lex = PROCEDURE; - program->main.index = PROCEDURE; - dtinsert(program->symbols, &program->main); - if (!(disc->flags & EX_PURE)) - for (sym = exbuiltin; *sym->name; sym++) - dtinsert(program->symbols, sym); - if ((sym = disc->symbols)) - for (; *sym->name; sym++) - dtinsert(program->symbols, sym); - return program; -} diff --git a/internal/ccall/expr/exparse.c b/internal/ccall/expr/exparse.c deleted file mode 100644 index 73d088f..0000000 --- a/internal/ccall/expr/exparse.c +++ /dev/null @@ -1,3729 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with ex or EX, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define EXBISON 1 - -/* Bison version. */ -#define EXBISON_VERSION "2.7" - -/* Skeleton name. */ -#define EXSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define EXPURE 0 - -/* Push parsers. */ -#define EXPUSH 0 - -/* Pull parsers. */ -#define EXPULL 1 - - - - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 14 "../../lib/expr/exparse.y" - - -/* - * Glenn Fowler - * AT&T Research - * - * expression library grammar and compiler - */ - -#ifdef WIN32 -#include - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif -#endif - -#include -#include - -#undef RS /* hp.pa grabs this!! */ - - -/* Line 371 of yacc.c */ -#line 92 "y.tab.c" - -# ifndef EX_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define EX_NULL nullptr -# else -# define EX_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef EXERROR_VERBOSE -# undef EXERROR_VERBOSE -# define EXERROR_VERBOSE 1 -#else -# define EXERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef EX_EX_Y_TAB_H_INCLUDED -# define EX_EX_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef EXDEBUG -# define EXDEBUG 1 -#endif -#if EXDEBUG -extern int exdebug; -#endif - -/* Tokens. */ -#ifndef EXTOKENTYPE -# define EXTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum extokentype { - MINTOKEN = 258, - INTEGER = 259, - UNSIGNED = 260, - CHARACTER = 261, - FLOATING = 262, - STRING = 263, - VOIDTYPE = 264, - STATIC = 265, - ADDRESS = 266, - ARRAY = 267, - BREAK = 268, - CALL = 269, - CASE = 270, - CONSTANT = 271, - CONTINUE = 272, - DECLARE = 273, - DEFAULT = 274, - DYNAMIC = 275, - ELSE = 276, - EXIT = 277, - FOR = 278, - FUNCTION = 279, - GSUB = 280, - ITERATE = 281, - ITERATER = 282, - ID = 283, - IF = 284, - LABEL = 285, - MEMBER = 286, - NAME = 287, - POS = 288, - PRAGMA = 289, - PRE = 290, - PRINT = 291, - PRINTF = 292, - PROCEDURE = 293, - QUERY = 294, - RAND = 295, - RETURN = 296, - SCANF = 297, - SPLIT = 298, - SPRINTF = 299, - SRAND = 300, - SSCANF = 301, - SUB = 302, - SUBSTR = 303, - SWITCH = 304, - TOKENS = 305, - UNSET = 306, - WHILE = 307, - F2I = 308, - F2S = 309, - I2F = 310, - I2S = 311, - S2B = 312, - S2F = 313, - S2I = 314, - F2X = 315, - I2X = 316, - S2X = 317, - X2F = 318, - X2I = 319, - X2S = 320, - X2X = 321, - XPRINT = 322, - OR = 323, - AND = 324, - NE = 325, - EQ = 326, - GE = 327, - LE = 328, - RS = 329, - LS = 330, - IN_OP = 331, - UNARY = 332, - DEC = 333, - INC = 334, - CAST = 335, - MAXTOKEN = 336 - }; -#endif -/* Tokens. */ -#define MINTOKEN 258 -#define INTEGER 259 -#define UNSIGNED 260 -#define CHARACTER 261 -#define FLOATING 262 -#define STRING 263 -#define VOIDTYPE 264 -#define STATIC 265 -#define ADDRESS 266 -#define ARRAY 267 -#define BREAK 268 -#define CALL 269 -#define CASE 270 -#define CONSTANT 271 -#define CONTINUE 272 -#define DECLARE 273 -#define DEFAULT 274 -#define DYNAMIC 275 -#define ELSE 276 -#define EXIT 277 -#define FOR 278 -#define FUNCTION 279 -#define GSUB 280 -#define ITERATE 281 -#define ITERATER 282 -#define ID 283 -#define IF 284 -#define LABEL 285 -#define MEMBER 286 -#define NAME 287 -#define POS 288 -#define PRAGMA 289 -#define PRE 290 -#define PRINT 291 -#define PRINTF 292 -#define PROCEDURE 293 -#define QUERY 294 -#define RAND 295 -#define RETURN 296 -#define SCANF 297 -#define SPLIT 298 -#define SPRINTF 299 -#define SRAND 300 -#define SSCANF 301 -#define SUB 302 -#define SUBSTR 303 -#define SWITCH 304 -#define TOKENS 305 -#define UNSET 306 -#define WHILE 307 -#define F2I 308 -#define F2S 309 -#define I2F 310 -#define I2S 311 -#define S2B 312 -#define S2F 313 -#define S2I 314 -#define F2X 315 -#define I2X 316 -#define S2X 317 -#define X2F 318 -#define X2I 319 -#define X2S 320 -#define X2X 321 -#define XPRINT 322 -#define OR 323 -#define AND 324 -#define NE 325 -#define EQ 326 -#define GE 327 -#define LE 328 -#define RS 329 -#define LS 330 -#define IN_OP 331 -#define UNARY 332 -#define DEC 333 -#define INC 334 -#define CAST 335 -#define MAXTOKEN 336 - - - -#if ! defined EXSTYPE && ! defined EXSTYPE_IS_DECLARED -typedef union EXSTYPE -{ -/* Line 387 of yacc.c */ -#line 39 "../../lib/expr/exparse.y" - - struct Exnode_s*expr; - double floating; - struct Exref_s* reference; - struct Exid_s* id; - Sflong_t integer; - int op; - char* string; - void* user; - struct Exbuf_s* buffer; - - -/* Line 387 of yacc.c */ -#line 310 "y.tab.c" -} EXSTYPE; -# define EXSTYPE_IS_TRIVIAL 1 -# define exstype EXSTYPE /* obsolescent; will be withdrawn */ -# define EXSTYPE_IS_DECLARED 1 -#endif - -extern EXSTYPE exlval; - -#ifdef EXPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int exparse (void *EXPARSE_PARAM); -#else -int exparse (); -#endif -#else /* ! EXPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int exparse (void); -#else -int exparse (); -#endif -#endif /* ! EXPARSE_PARAM */ - -#endif /* !EX_EX_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 166 "../../lib/expr/exparse.y" - - -#include "exgram.h" - - -/* Line 390 of yacc.c */ -#line 344 "y.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef EXTYPE_UINT8 -typedef EXTYPE_UINT8 extype_uint8; -#else -typedef unsigned char extype_uint8; -#endif - -#ifdef EXTYPE_INT8 -typedef EXTYPE_INT8 extype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char extype_int8; -#else -typedef short int extype_int8; -#endif - -#ifdef EXTYPE_UINT16 -typedef EXTYPE_UINT16 extype_uint16; -#else -typedef unsigned short int extype_uint16; -#endif - -#ifdef EXTYPE_INT16 -typedef EXTYPE_INT16 extype_int16; -#else -typedef short int extype_int16; -#endif - -#ifndef EXSIZE_T -# ifdef __SIZE_TYPE__ -# define EXSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define EXSIZE_T size_t -# elif ! defined EXSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define EXSIZE_T size_t -# else -# define EXSIZE_T unsigned int -# endif -#endif - -#define EXSIZE_MAXIMUM ((EXSIZE_T) -1) - -#ifndef EX_ -# if defined EXENABLE_NLS && EXENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define EX_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef EX_ -# define EX_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define EXUSE(E) ((void) (E)) -#else -# define EXUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define EXID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -EXID (int exi) -#else -static int -EXID (exi) - int exi; -#endif -{ - return exi; -} -#endif - -#if ! defined exoverflow || EXERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef EXSTACK_USE_ALLOCA -# if EXSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define EXSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define EXSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define EXSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef EXSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define EXSTACK_FREE(Ptr) do { /* empty */; } while (EXID (0)) -# ifndef EXSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define EXSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define EXSTACK_ALLOC EXMALLOC -# define EXSTACK_FREE EXFREE -# ifndef EXSTACK_ALLOC_MAXIMUM -# define EXSTACK_ALLOC_MAXIMUM EXSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined EXMALLOC || defined malloc) \ - && (defined EXFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef EXMALLOC -# define EXMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (EXSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef EXFREE -# define EXFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined exoverflow || EXERROR_VERBOSE */ - - -#if (! defined exoverflow \ - && (! defined __cplusplus \ - || (defined EXSTYPE_IS_TRIVIAL && EXSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union exalloc -{ - extype_int16 exss_alloc; - EXSTYPE exvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define EXSTACK_GAP_MAXIMUM (sizeof (union exalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define EXSTACK_BYTES(N) \ - ((N) * (sizeof (extype_int16) + sizeof (EXSTYPE)) \ - + EXSTACK_GAP_MAXIMUM) - -# define EXCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables EXSIZE and EXSTACKSIZE give the old and new number of - elements in the stack, and EXPTR gives the new location of the - stack. Advance EXPTR to a properly aligned location for the next - stack. */ -# define EXSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - EXSIZE_T exnewbytes; \ - EXCOPY (&exptr->Stack_alloc, Stack, exsize); \ - Stack = &exptr->Stack_alloc; \ - exnewbytes = exstacksize * sizeof (*Stack) + EXSTACK_GAP_MAXIMUM; \ - exptr += exnewbytes / sizeof (*exptr); \ - } \ - while (EXID (0)) - -#endif - -#if defined EXCOPY_NEEDED && EXCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef EXCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define EXCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define EXCOPY(Dst, Src, Count) \ - do \ - { \ - EXSIZE_T exi; \ - for (exi = 0; exi < (Count); exi++) \ - (Dst)[exi] = (Src)[exi]; \ - } \ - while (EXID (0)) -# endif -# endif -#endif /* !EXCOPY_NEEDED */ - -/* EXFINAL -- State number of the termination state. */ -#define EXFINAL 3 -/* EXLAST -- Last index in EXTABLE. */ -#define EXLAST 1112 - -/* EXNTOKENS -- Number of terminals. */ -#define EXNTOKENS 107 -/* EXNNTS -- Number of nonterminals. */ -#define EXNNTS 44 -/* EXNRULES -- Number of rules. */ -#define EXNRULES 142 -/* EXNRULES -- Number of states. */ -#define EXNSTATES 286 - -/* EXTRANSLATE(EXLEX) -- Bison symbol number corresponding to EXLEX. */ -#define EXUNDEFTOK 2 -#define EXMAXUTOK 336 - -#define EXTRANSLATE(EXX) \ - ((unsigned int) (EXX) <= EXMAXUTOK ? extranslate[EXX] : EXUNDEFTOK) - -/* EXTRANSLATE[EXLEX] -- Bison symbol number corresponding to EXLEX. */ -static const extype_uint8 extranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 91, 2, 93, 2, 90, 76, 2, - 98, 103, 88, 85, 68, 86, 106, 89, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 71, 102, - 79, 69, 80, 70, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 104, 2, 105, 75, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 100, 74, 101, 92, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 72, 73, 77, 78, 81, 82, 83, - 84, 87, 94, 95, 96, 97, 99 -}; - -#if EXDEBUG -/* EXPRHS[EXN] -- Index of the first RHS symbol of rule number EXN in - EXRHS. */ -static const extype_uint16 exprhs[] = -{ - 0, 0, 3, 6, 7, 10, 11, 16, 17, 20, - 24, 27, 28, 29, 36, 43, 49, 59, 65, 70, - 77, 83, 84, 93, 97, 101, 105, 106, 109, 112, - 114, 117, 121, 124, 125, 127, 129, 133, 134, 139, - 141, 143, 145, 147, 149, 151, 152, 155, 156, 158, - 162, 167, 171, 175, 179, 183, 187, 191, 195, 199, - 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, - 243, 244, 245, 253, 256, 259, 262, 265, 268, 271, - 276, 281, 286, 291, 296, 303, 312, 317, 321, 325, - 330, 335, 340, 345, 350, 353, 356, 359, 363, 366, - 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, - 389, 391, 393, 395, 398, 402, 404, 405, 408, 412, - 413, 417, 418, 420, 422, 426, 427, 429, 431, 433, - 437, 438, 442, 443, 445, 449, 452, 455, 456, 459, - 461, 462, 463 -}; - -/* EXRHS -- A `-1'-separated list of the rules' RHS. */ -static const extype_int16 exrhs[] = -{ - 108, 0, -1, 112, 109, -1, -1, 109, 110, -1, - -1, 30, 71, 111, 112, -1, -1, 112, 113, -1, - 100, 112, 101, -1, 128, 102, -1, -1, -1, 121, - 114, 18, 115, 122, 102, -1, 29, 98, 129, 103, - 113, 127, -1, 23, 98, 136, 103, 113, -1, 23, - 98, 128, 102, 128, 102, 128, 103, 113, -1, 27, - 98, 136, 103, 113, -1, 51, 98, 20, 103, -1, - 51, 98, 20, 68, 129, 103, -1, 52, 98, 129, - 103, 113, -1, -1, 49, 98, 129, 116, 103, 100, - 117, 101, -1, 13, 128, 102, -1, 17, 128, 102, - -1, 41, 128, 102, -1, -1, 117, 118, -1, 119, - 112, -1, 120, -1, 119, 120, -1, 15, 133, 71, - -1, 19, 71, -1, -1, 10, -1, 123, -1, 122, - 68, 123, -1, -1, 125, 124, 137, 148, -1, 32, - -1, 20, -1, 28, -1, 24, -1, 32, -1, 20, - -1, -1, 21, 113, -1, -1, 129, -1, 98, 129, - 103, -1, 98, 18, 103, 129, -1, 129, 79, 129, - -1, 129, 86, 129, -1, 129, 88, 129, -1, 129, - 89, 129, -1, 129, 90, 129, -1, 129, 84, 129, - -1, 129, 83, 129, -1, 129, 80, 129, -1, 129, - 82, 129, -1, 129, 81, 129, -1, 129, 78, 129, - -1, 129, 77, 129, -1, 129, 76, 129, -1, 129, - 74, 129, -1, 129, 75, 129, -1, 129, 85, 129, - -1, 129, 73, 129, -1, 129, 72, 129, -1, 129, - 68, 129, -1, -1, -1, 129, 70, 130, 129, 71, - 131, 129, -1, 91, 129, -1, 93, 20, -1, 92, - 129, -1, 86, 129, -1, 85, 129, -1, 76, 136, - -1, 12, 104, 139, 105, -1, 24, 98, 139, 103, - -1, 25, 98, 139, 103, -1, 47, 98, 139, 103, - -1, 48, 98, 139, 103, -1, 132, 98, 129, 68, - 20, 103, -1, 132, 98, 129, 68, 20, 68, 129, - 103, -1, 22, 98, 129, 103, -1, 40, 98, 103, - -1, 45, 98, 103, -1, 45, 98, 129, 103, -1, - 38, 98, 139, 103, -1, 36, 98, 139, 103, -1, - 134, 98, 139, 103, -1, 135, 98, 139, 103, -1, - 136, 147, -1, 96, 136, -1, 136, 96, -1, 129, - 87, 20, -1, 95, 136, -1, 136, 95, -1, 133, - -1, 43, -1, 50, -1, 16, -1, 7, -1, 4, - -1, 8, -1, 5, -1, 37, -1, 39, -1, 44, - -1, 42, -1, 46, -1, 28, 145, -1, 20, 138, - 145, -1, 32, -1, -1, 104, 105, -1, 104, 18, - 105, -1, -1, 104, 129, 105, -1, -1, 140, -1, - 129, -1, 140, 68, 129, -1, -1, 18, -1, 142, - -1, 143, -1, 142, 68, 143, -1, -1, 18, 144, - 126, -1, -1, 146, -1, 106, 28, 146, -1, 106, - 28, -1, 106, 32, -1, -1, 69, 129, -1, 147, - -1, -1, -1, 98, 149, 141, 150, 103, 100, 112, - 101, -1 -}; - -/* EXRLINE[EXN] -- source line where rule number EXN was defined. */ -static const extype_uint16 exrline[] = -{ - 0, 174, 174, 195, 196, 199, 199, 239, 242, 269, - 273, 277, 277, 277, 282, 292, 305, 320, 333, 341, - 352, 362, 362, 374, 386, 390, 403, 433, 436, 468, - 469, 472, 493, 500, 503, 509, 510, 517, 517, 573, - 574, 575, 576, 579, 580, 584, 587, 594, 597, 600, - 604, 608, 661, 665, 669, 673, 677, 681, 685, 689, - 693, 697, 701, 705, 709, 713, 717, 721, 734, 738, - 748, 748, 748, 789, 809, 816, 820, 824, 828, 832, - 836, 846, 850, 854, 858, 862, 866, 872, 876, 880, - 886, 891, 895, 920, 956, 980, 988, 996, 1007, 1011, - 1015, 1018, 1019, 1021, 1029, 1034, 1039, 1044, 1051, 1052, - 1053, 1056, 1057, 1060, 1064, 1084, 1097, 1100, 1104, 1118, - 1121, 1128, 1131, 1139, 1144, 1151, 1154, 1160, 1163, 1167, - 1178, 1178, 1191, 1194, 1206, 1225, 1229, 1235, 1238, 1245, - 1246, 1263, 1246 -}; -#endif - -#if EXDEBUG || EXERROR_VERBOSE || 0 -/* EXTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at EXNTOKENS, nonterminals. */ -static const char *const extname[] = -{ - "$end", "error", "$undefined", "MINTOKEN", "INTEGER", "UNSIGNED", - "CHARACTER", "FLOATING", "STRING", "VOIDTYPE", "STATIC", "ADDRESS", - "ARRAY", "BREAK", "CALL", "CASE", "CONSTANT", "CONTINUE", "DECLARE", - "DEFAULT", "DYNAMIC", "ELSE", "EXIT", "FOR", "FUNCTION", "GSUB", - "ITERATE", "ITERATER", "ID", "IF", "LABEL", "MEMBER", "NAME", "POS", - "PRAGMA", "PRE", "PRINT", "PRINTF", "PROCEDURE", "QUERY", "RAND", - "RETURN", "SCANF", "SPLIT", "SPRINTF", "SRAND", "SSCANF", "SUB", - "SUBSTR", "SWITCH", "TOKENS", "UNSET", "WHILE", "F2I", "F2S", "I2F", - "I2S", "S2B", "S2F", "S2I", "F2X", "I2X", "S2X", "X2F", "X2I", "X2S", - "X2X", "XPRINT", "','", "'='", "'?'", "':'", "OR", "AND", "'|'", "'^'", - "'&'", "NE", "EQ", "'<'", "'>'", "GE", "LE", "RS", "LS", "'+'", "'-'", - "IN_OP", "'*'", "'/'", "'%'", "'!'", "'~'", "'#'", "UNARY", "DEC", "INC", - "CAST", "'('", "MAXTOKEN", "'{'", "'}'", "';'", "')'", "'['", "']'", - "'.'", "$accept", "program", "action_list", "action", "$@1", - "statement_list", "statement", "$@2", "$@3", "$@4", "switch_list", - "switch_item", "case_list", "case_item", "static", "dcl_list", - "dcl_item", "$@5", "dcl_name", "name", "else_opt", "expr_opt", "expr", - "$@6", "$@7", "splitop", "constant", "print", "scan", "variable", - "array", "index", "args", "arg_list", "formals", "formal_list", - "formal_item", "$@8", "members", "member", "assign", "initialize", "$@9", - "$@10", EX_NULL -}; -#endif - -# ifdef EXPRINT -/* EXTOKNUM[EXLEX-NUM] -- Internal token number corresponding to - token EXLEX-NUM. */ -static const extype_uint16 extoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 44, 61, - 63, 58, 323, 324, 124, 94, 38, 325, 326, 60, - 62, 327, 328, 329, 330, 43, 45, 331, 42, 47, - 37, 33, 126, 35, 332, 333, 334, 335, 40, 336, - 123, 125, 59, 41, 91, 93, 46 -}; -# endif - -/* EXR1[EXN] -- Symbol number of symbol that rule EXN derives. */ -static const extype_uint8 exr1[] = -{ - 0, 107, 108, 109, 109, 111, 110, 112, 112, 113, - 113, 114, 115, 113, 113, 113, 113, 113, 113, 113, - 113, 116, 113, 113, 113, 113, 117, 117, 118, 119, - 119, 120, 120, 121, 121, 122, 122, 124, 123, 125, - 125, 125, 125, 126, 126, 127, 127, 128, 128, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 130, 131, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 132, 132, 133, 133, 133, 133, 133, 134, 134, - 134, 135, 135, 136, 136, 136, 137, 137, 137, 138, - 138, 139, 139, 140, 140, 141, 141, 141, 142, 142, - 144, 143, 145, 145, 145, 146, 146, 147, 147, 148, - 149, 150, 148 -}; - -/* EXR2[EXN] -- Number of symbols composing right hand side of rule EXN. */ -static const extype_uint8 exr2[] = -{ - 0, 2, 2, 0, 2, 0, 4, 0, 2, 3, - 2, 0, 0, 6, 6, 5, 9, 5, 4, 6, - 5, 0, 8, 3, 3, 3, 0, 2, 2, 1, - 2, 3, 2, 0, 1, 1, 3, 0, 4, 1, - 1, 1, 1, 1, 1, 0, 2, 0, 1, 3, - 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 0, 7, 2, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 6, 8, 4, 3, 3, 4, - 4, 4, 4, 4, 2, 2, 2, 3, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 1, 0, 2, 3, 0, - 3, 0, 1, 1, 3, 0, 1, 1, 1, 3, - 0, 3, 0, 1, 3, 2, 2, 0, 2, 1, - 0, 0, 8 -}; - -/* EXDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when EXTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const extype_uint8 exdefact[] = -{ - 7, 0, 3, 1, 105, 107, 104, 106, 34, 0, - 47, 103, 47, 119, 0, 0, 0, 0, 0, 132, - 0, 115, 0, 108, 0, 109, 0, 47, 111, 101, - 110, 0, 112, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, - 8, 11, 0, 48, 0, 100, 0, 0, 137, 121, - 0, 0, 0, 132, 0, 47, 121, 121, 0, 0, - 113, 133, 0, 121, 121, 0, 0, 0, 121, 121, - 0, 0, 0, 78, 77, 76, 73, 75, 74, 98, - 95, 0, 0, 33, 0, 4, 0, 10, 0, 70, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 121, 0, 99, 96, 94, 123, 0, 122, 23, - 24, 0, 114, 0, 0, 137, 0, 0, 0, 135, - 136, 0, 0, 0, 87, 25, 88, 0, 0, 0, - 21, 0, 0, 0, 49, 9, 5, 12, 69, 0, - 68, 67, 64, 65, 63, 62, 61, 51, 58, 60, - 59, 57, 56, 66, 52, 97, 53, 54, 55, 0, - 0, 0, 138, 79, 0, 120, 86, 47, 33, 80, - 81, 33, 0, 134, 33, 91, 90, 89, 82, 83, - 0, 0, 18, 33, 50, 7, 0, 0, 0, 92, - 93, 124, 0, 15, 17, 135, 45, 0, 0, 20, - 6, 40, 42, 41, 39, 0, 35, 37, 71, 119, - 47, 33, 14, 26, 19, 0, 13, 116, 0, 0, - 84, 0, 46, 0, 36, 0, 137, 72, 0, 33, - 0, 0, 22, 27, 7, 29, 0, 117, 140, 139, - 38, 85, 16, 0, 32, 28, 30, 118, 125, 31, - 130, 141, 127, 128, 0, 0, 0, 44, 43, 131, - 0, 130, 129, 7, 33, 142 -}; - -/* EXDEFGOTO[NTERM-NUM]. */ -static const extype_int16 exdefgoto[] = -{ - -1, 1, 49, 95, 205, 2, 50, 96, 206, 200, - 243, 253, 254, 255, 51, 225, 226, 237, 227, 279, - 232, 52, 53, 159, 238, 54, 55, 56, 57, 58, - 246, 63, 127, 128, 271, 272, 273, 274, 70, 71, - 125, 260, 268, 275 -}; - -/* EXPACT[STATE-NUM] -- Index in EXTABLE of the portion describing - STATE-NUM. */ -#define EXPACT_NINF -144 -static const extype_int16 expact[] = -{ - -144, 9, 200, -144, -144, -144, -144, -144, -144, -89, - 691, -144, 691, -80, -71, -64, -63, -43, -35, -27, - -11, -144, 11, -144, 16, -144, 20, 691, -144, -144, - -144, 23, -144, 31, 39, 41, -144, 56, 57, 1, - 691, 691, 691, 691, 79, 1, 1, 596, -144, 92, - -144, -144, 49, 872, 58, -144, 60, 61, -37, 691, - 65, 66, 691, -27, 691, 691, 691, 691, 1, -12, - -144, -144, 691, 691, 691, 59, 68, 88, 691, 691, - 691, 140, 691, -144, -144, -144, -144, -144, -144, -144, - -144, 72, 284, 299, 100, -144, 158, -144, 691, -144, - 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, - 691, 691, 691, 691, 691, 143, 691, 691, 691, 691, - 691, 691, 691, -144, -144, -144, 916, 77, 109, -144, - -144, 185, -144, 383, 83, -56, 84, 85, 95, 93, - -144, 482, 97, 98, -144, -144, -144, 577, 106, 108, - 872, -51, 672, 691, -144, -144, -144, -144, 916, 691, - 934, 951, 967, 982, 996, 1010, 1010, 1022, 1022, 1022, - 1022, 107, 107, 53, 53, -144, -144, -144, -144, 895, - 111, 112, 916, -144, 691, -144, -144, 691, 497, -144, - -144, 497, 29, -144, 497, -144, -144, -144, -144, -144, - 116, 691, -144, 497, -144, -144, 87, 849, 786, -144, - -144, 916, 124, -144, -144, -144, 168, 90, 767, -144, - 200, -144, -144, -144, -144, -49, -144, -144, -144, -54, - 691, 497, -144, -144, -144, 87, -144, 126, 691, 691, - -144, 128, -144, -7, -144, -16, -44, 916, 815, 497, - 145, 162, -144, -144, 86, -144, 129, -144, -144, -144, - -144, -144, -144, 183, -144, 200, -144, -144, 238, -144, - 174, -144, 210, -144, -10, 176, 262, -144, -144, -144, - 181, -144, -144, -144, 398, -144 -}; - -/* EXPGOTO[NTERM-NUM]. */ -static const extype_int16 expgoto[] = -{ - -144, -144, -144, -144, -144, -48, -143, -144, -144, -144, - -144, -144, -144, 28, -144, -144, 48, -144, -144, -144, - -144, -9, -36, -144, -144, -144, 34, -144, -144, 101, - -144, -144, 24, -144, -144, -144, 12, -144, 224, 150, - 51, -144, -144, -144 -}; - -/* EXTABLE[EXPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If EXTABLE_NINF, syntax error. */ -#define EXTABLE_NINF -127 -static const extype_int16 extable[] = -{ - 93, 60, 256, 61, 84, 85, 86, 87, 250, 3, - 277, 92, 251, 122, 239, 59, 139, 201, 76, 235, - 140, 13, 278, 126, 62, 122, 131, 64, 133, 19, - 126, 126, 122, 21, 65, 66, 141, 126, 126, 123, - 124, 147, 126, 126, 150, 213, 152, 188, 214, 240, - 62, 216, 202, 236, 258, 67, 134, 215, 123, 124, - 219, 140, 158, 68, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 69, - 176, 177, 178, 179, 126, 126, 182, 72, 242, 257, - 136, 137, 4, 5, 252, 6, 7, 142, 143, 88, - 9, 250, 148, 149, 11, 251, 262, 221, 13, 73, - 14, 222, 16, 17, 74, 223, 19, 204, 75, 224, - 21, 77, 94, 207, 22, 23, 24, 25, 26, 78, - 28, 29, 30, 31, 32, 33, 34, 79, 36, 80, - 83, 116, 117, 118, 180, 181, 89, 90, 211, 4, - 5, 97, 6, 7, 81, 82, 119, 220, 120, 121, - 151, 11, 144, 175, 39, 218, 135, 129, 130, 138, - 145, 156, 158, 40, 41, 153, 157, 184, 212, 42, - 43, 44, 183, 45, 46, 187, 47, 189, 190, 231, - 233, 146, 113, 114, 115, 116, 117, 118, 191, 192, - 195, 196, 247, 248, 4, 5, 265, 6, 7, 198, - 8, 199, 9, 10, 209, 210, 11, 12, -33, 217, - 13, 241, 14, 15, 16, 17, 230, 18, 19, 20, - 245, 249, 21, 264, 267, 284, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 98, 269, 99, 270, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 39, -126, 276, 280, - 281, 283, 266, 244, 263, 40, 41, 132, 282, 193, - 185, 42, 43, 44, 0, 45, 46, 259, 47, 0, - 48, 0, -47, 4, 5, 0, 6, 7, 0, 8, - 0, 9, 10, 0, 0, 11, 12, 0, 0, 13, - 0, 14, 15, 16, 17, 0, 18, 19, 20, 0, - 0, 21, 0, 0, 0, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 98, 0, 99, 0, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 39, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 41, 0, 154, 0, 0, - 42, 43, 44, 0, 45, 46, 0, 47, 0, 48, - 155, -47, 4, 5, 0, 6, 7, 0, 8, 0, - 9, 10, 0, 0, 11, 12, 0, 0, 13, 0, - 14, 15, 16, 17, 0, 18, 19, 20, 0, 0, - 21, 0, 0, 0, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 98, 0, 99, 0, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 39, 0, 0, 0, 0, 0, - 0, 0, 0, 40, 41, 0, 186, 0, 0, 42, - 43, 44, 0, 45, 46, 0, 47, 0, 48, 285, - -47, 4, 5, 0, 6, 7, 0, 8, 0, 9, - 10, 0, 0, 11, 12, 0, 0, 13, 0, 14, - 15, 16, 17, 0, 18, 19, 20, 0, 0, 21, - 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 98, 0, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 39, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 41, 0, 194, 0, 0, 42, 43, - 44, 0, 45, 46, 0, 47, 0, 48, 0, -47, - 4, 5, 0, 6, 7, 0, 0, 0, 9, 0, - 0, 0, 11, 0, 91, 0, 13, 0, 14, 0, - 16, 17, 0, 0, 19, 0, 0, 0, 21, 0, - 0, 0, 22, 23, 24, 25, 26, 0, 28, 29, - 30, 31, 32, 33, 34, 98, 36, 99, 0, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 197, 40, 41, 0, 0, 0, 0, 42, 43, 44, - 0, 45, 46, 0, 47, 4, 5, 0, 6, 7, - 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, - 0, 13, 0, 14, 0, 16, 17, 0, 0, 19, - 0, 0, 0, 21, 0, 0, 0, 22, 23, 24, - 25, 26, 0, 28, 29, 30, 31, 32, 33, 34, - 98, 36, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 0, 0, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 0, 203, 40, 41, 0, 0, - 0, 0, 42, 43, 44, 0, 45, 46, 0, 47, - 4, 5, 0, 6, 7, 0, 0, 0, 9, 0, - 0, 0, 11, 0, 0, 0, 229, 0, 14, 0, - 16, 17, 0, 0, 19, 0, 0, 0, 21, 0, - 0, 0, 22, 23, 24, 25, 26, 0, 28, 29, - 30, 31, 32, 33, 34, 98, 36, 99, 0, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 234, 40, 41, 0, 0, 0, 0, 42, 43, 44, - 0, 45, 46, 98, 47, 99, 0, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 261, 99, - 228, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 98, 0, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 208, 0, 99, 0, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 99, 0, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, -127, -127, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -127, -127, -127, -127, 111, 112, 113, 114, 115, - 116, 117, 118 -}; - -#define expact_value_is_default(Yystate) \ - (!!((Yystate) == (-144))) - -#define extable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-127))) - -static const extype_int16 excheck[] = -{ - 48, 10, 18, 12, 40, 41, 42, 43, 15, 0, - 20, 47, 19, 69, 68, 104, 28, 68, 27, 68, - 32, 20, 32, 59, 104, 69, 62, 98, 64, 28, - 66, 67, 69, 32, 98, 98, 72, 73, 74, 95, - 96, 77, 78, 79, 80, 188, 82, 103, 191, 103, - 104, 194, 103, 102, 98, 98, 65, 28, 95, 96, - 203, 32, 98, 98, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 106, - 116, 117, 118, 119, 120, 121, 122, 98, 231, 105, - 66, 67, 4, 5, 101, 7, 8, 73, 74, 20, - 12, 15, 78, 79, 16, 19, 249, 20, 20, 98, - 22, 24, 24, 25, 98, 28, 28, 153, 98, 32, - 32, 98, 30, 159, 36, 37, 38, 39, 40, 98, - 42, 43, 44, 45, 46, 47, 48, 98, 50, 98, - 39, 88, 89, 90, 120, 121, 45, 46, 184, 4, - 5, 102, 7, 8, 98, 98, 98, 205, 98, 98, - 20, 16, 103, 20, 76, 201, 65, 102, 102, 68, - 102, 71, 208, 85, 86, 103, 18, 68, 187, 91, - 92, 93, 105, 95, 96, 102, 98, 103, 103, 21, - 100, 103, 85, 86, 87, 88, 89, 90, 103, 106, - 103, 103, 238, 239, 4, 5, 254, 7, 8, 103, - 10, 103, 12, 13, 103, 103, 16, 17, 18, 103, - 20, 230, 22, 23, 24, 25, 102, 27, 28, 29, - 104, 103, 32, 71, 105, 283, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 68, 71, 70, 18, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 76, 103, 68, 103, - 18, 100, 254, 235, 250, 85, 86, 63, 276, 139, - 105, 91, 92, 93, -1, 95, 96, 246, 98, -1, - 100, -1, 102, 4, 5, -1, 7, 8, -1, 10, - -1, 12, 13, -1, -1, 16, 17, -1, -1, 20, - -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, - -1, 32, -1, -1, -1, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 68, -1, 70, -1, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 76, -1, -1, -1, -1, - -1, -1, -1, -1, 85, 86, -1, 103, -1, -1, - 91, 92, 93, -1, 95, 96, -1, 98, -1, 100, - 101, 102, 4, 5, -1, 7, 8, -1, 10, -1, - 12, 13, -1, -1, 16, 17, -1, -1, 20, -1, - 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, - 32, -1, -1, -1, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 68, -1, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 76, -1, -1, -1, -1, -1, - -1, -1, -1, 85, 86, -1, 103, -1, -1, 91, - 92, 93, -1, 95, 96, -1, 98, -1, 100, 101, - 102, 4, 5, -1, 7, 8, -1, 10, -1, 12, - 13, -1, -1, 16, 17, -1, -1, 20, -1, 22, - 23, 24, 25, -1, 27, 28, 29, -1, -1, 32, - -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 68, -1, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 76, -1, -1, -1, -1, -1, -1, - -1, -1, 85, 86, -1, 103, -1, -1, 91, 92, - 93, -1, 95, 96, -1, 98, -1, 100, -1, 102, - 4, 5, -1, 7, 8, -1, -1, -1, 12, -1, - -1, -1, 16, -1, 18, -1, 20, -1, 22, -1, - 24, 25, -1, -1, 28, -1, -1, -1, 32, -1, - -1, -1, 36, 37, 38, 39, 40, -1, 42, 43, - 44, 45, 46, 47, 48, 68, 50, 70, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, -1, -1, - -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, - 103, 85, 86, -1, -1, -1, -1, 91, 92, 93, - -1, 95, 96, -1, 98, 4, 5, -1, 7, 8, - -1, -1, -1, 12, -1, -1, -1, 16, -1, -1, - -1, 20, -1, 22, -1, 24, 25, -1, -1, 28, - -1, -1, -1, 32, -1, -1, -1, 36, 37, 38, - 39, 40, -1, 42, 43, 44, 45, 46, 47, 48, - 68, 50, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, -1, -1, -1, -1, 76, -1, -1, - -1, -1, -1, -1, -1, 103, 85, 86, -1, -1, - -1, -1, 91, 92, 93, -1, 95, 96, -1, 98, - 4, 5, -1, 7, 8, -1, -1, -1, 12, -1, - -1, -1, 16, -1, -1, -1, 20, -1, 22, -1, - 24, 25, -1, -1, 28, -1, -1, -1, 32, -1, - -1, -1, 36, 37, 38, 39, 40, -1, 42, 43, - 44, 45, 46, 47, 48, 68, 50, 70, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, -1, -1, - -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, - 103, 85, 86, -1, -1, -1, -1, 91, 92, 93, - -1, 95, 96, 68, 98, 70, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 68, 103, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 68, -1, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 68, -1, 70, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 70, -1, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90 -}; - -/* EXSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const extype_uint8 exstos[] = -{ - 0, 108, 112, 0, 4, 5, 7, 8, 10, 12, - 13, 16, 17, 20, 22, 23, 24, 25, 27, 28, - 29, 32, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 76, - 85, 86, 91, 92, 93, 95, 96, 98, 100, 109, - 113, 121, 128, 129, 132, 133, 134, 135, 136, 104, - 128, 128, 104, 138, 98, 98, 98, 98, 98, 106, - 145, 146, 98, 98, 98, 98, 128, 98, 98, 98, - 98, 98, 98, 136, 129, 129, 129, 129, 20, 136, - 136, 18, 129, 112, 30, 110, 114, 102, 68, 70, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 98, - 98, 98, 69, 95, 96, 147, 129, 139, 140, 102, - 102, 129, 145, 129, 128, 136, 139, 139, 136, 28, - 32, 129, 139, 139, 103, 102, 103, 129, 139, 139, - 129, 20, 129, 103, 103, 101, 71, 18, 129, 130, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 20, 129, 129, 129, 129, - 139, 139, 129, 105, 68, 105, 103, 102, 103, 103, - 103, 103, 106, 146, 103, 103, 103, 103, 103, 103, - 116, 68, 103, 103, 129, 111, 115, 129, 68, 103, - 103, 129, 128, 113, 113, 28, 113, 103, 129, 113, - 112, 20, 24, 28, 32, 122, 123, 125, 71, 20, - 102, 21, 127, 100, 103, 68, 102, 124, 131, 68, - 103, 128, 113, 117, 123, 104, 137, 129, 129, 103, - 15, 19, 101, 118, 119, 120, 18, 105, 98, 147, - 148, 103, 113, 133, 71, 112, 120, 105, 149, 71, - 18, 141, 142, 143, 144, 150, 68, 20, 32, 126, - 103, 18, 143, 100, 112, 101 -}; - -#define exerrok (exerrstatus = 0) -#define exclearin (exchar = EXEMPTY) -#define EXEMPTY (-2) -#define EXEOF 0 - -#define EXACCEPT goto exacceptlab -#define EXABORT goto exabortlab -#define EXERROR goto exerrorlab - - -/* Like EXERROR except do call exerror. This remains here temporarily - to ease the transition to the new meaning of EXERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - EXFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define EXFAIL goto exerrlab -#if defined EXFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - EXFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define EXRECOVERING() (!!exerrstatus) - -#define EXBACKUP(Token, Value) \ -do \ - if (exchar == EXEMPTY) \ - { \ - exchar = (Token); \ - exlval = (Value); \ - EXPOPSTACK (exlen); \ - exstate = *exssp; \ - goto exbackup; \ - } \ - else \ - { \ - exerror (EX_("syntax error: cannot back up")); \ - EXERROR; \ - } \ -while (EXID (0)) - -/* Error token number */ -#define EXTERROR 1 -#define EXERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef EX_LOCATION_PRINT -# define EX_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* EXLEX -- calling `exlex' with the right arguments. */ -#ifdef EXLEX_PARAM -# define EXLEX exlex (EXLEX_PARAM) -#else -# define EXLEX exlex () -#endif - -/* Enable debugging if requested. */ -#if EXDEBUG - -# ifndef EXFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define EXFPRINTF sfprintf -# endif - -# define EXDPRINTF(Args) \ -do { \ - if (exdebug) \ - EXFPRINTF Args; \ -} while (EXID (0)) - -# define EX_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (exdebug) \ - { \ - EXFPRINTF (sfstderr, "%s ", Title); \ - ex_symbol_print (sfstderr, \ - Type, Value); \ - EXFPRINTF (sfstderr, "\n"); \ - } \ -} while (EXID (0)) - - -/*--------------------------------. -| Print this symbol on EXOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -ex_symbol_value_print (Sfio_t *exoutput, int extype, EXSTYPE const * const exvaluep) -#else -static void -ex_symbol_value_print (exoutput, extype, exvaluep) - Sfio_t *exoutput; - int extype; - EXSTYPE const * const exvaluep; -#endif -{ - Sfio_t *exo = exoutput; - EXUSE (exo); - if (!exvaluep) - return; -# ifdef EXPRINT - if (extype < EXNTOKENS) - EXPRINT (exoutput, extoknum[extype], *exvaluep); -# else - EXUSE (exoutput); -# endif - switch (extype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on EXOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -ex_symbol_print (Sfio_t *exoutput, int extype, EXSTYPE const * const exvaluep) -#else -static void -ex_symbol_print (exoutput, extype, exvaluep) - Sfio_t *exoutput; - int extype; - EXSTYPE const * const exvaluep; -#endif -{ - if (extype < EXNTOKENS) - EXFPRINTF (exoutput, "token %s (", extname[extype]); - else - EXFPRINTF (exoutput, "nterm %s (", extname[extype]); - - ex_symbol_value_print (exoutput, extype, exvaluep); - EXFPRINTF (exoutput, ")"); -} - -/*------------------------------------------------------------------. -| ex_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -ex_stack_print (extype_int16 *exbottom, extype_int16 *extop) -#else -static void -ex_stack_print (exbottom, extop) - extype_int16 *exbottom; - extype_int16 *extop; -#endif -{ - EXFPRINTF (sfstderr, "Stack now"); - for (; exbottom <= extop; exbottom++) - { - int exbot = *exbottom; - EXFPRINTF (sfstderr, " %d", exbot); - } - EXFPRINTF (sfstderr, "\n"); -} - -# define EX_STACK_PRINT(Bottom, Top) \ -do { \ - if (exdebug) \ - ex_stack_print ((Bottom), (Top)); \ -} while (EXID (0)) - - -/*------------------------------------------------. -| Report that the EXRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -ex_reduce_print (EXSTYPE *exvsp, int exrule) -#else -static void -ex_reduce_print (exvsp, exrule) - EXSTYPE *exvsp; - int exrule; -#endif -{ - int exnrhs = exr2[exrule]; - int exi; - unsigned long int exlno = exrline[exrule]; - EXFPRINTF (sfstderr, "Reducing stack by rule %d (line %lu):\n", - exrule - 1, exlno); - /* The symbols being reduced. */ - for (exi = 0; exi < exnrhs; exi++) - { - EXFPRINTF (sfstderr, " $%d = ", exi + 1); - ex_symbol_print (sfstderr, exrhs[exprhs[exrule] + exi], - &(exvsp[(exi + 1) - (exnrhs)]) - ); - EXFPRINTF (sfstderr, "\n"); - } -} - -# define EX_REDUCE_PRINT(Rule) \ -do { \ - if (exdebug) \ - ex_reduce_print (exvsp, Rule); \ -} while (EXID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int exdebug; -#else /* !EXDEBUG */ -# define EXDPRINTF(Args) -# define EX_SYMBOL_PRINT(Title, Type, Value, Location) -# define EX_STACK_PRINT(Bottom, Top) -# define EX_REDUCE_PRINT(Rule) -#endif /* !EXDEBUG */ - - -/* EXINITDEPTH -- initial size of the parser's stacks. */ -#ifndef EXINITDEPTH -# define EXINITDEPTH 200 -#endif - -/* EXMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - EXSTACK_ALLOC_MAXIMUM < EXSTACK_BYTES (EXMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef EXMAXDEPTH -# define EXMAXDEPTH 10000 -#endif - - -#if EXERROR_VERBOSE - -# ifndef exstrlen -# if defined __GLIBC__ && defined _STRING_H -# define exstrlen strlen -# else -/* Return the length of EXSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static EXSIZE_T -exstrlen (const char *exstr) -#else -static EXSIZE_T -exstrlen (exstr) - const char *exstr; -#endif -{ - EXSIZE_T exlen; - for (exlen = 0; exstr[exlen]; exlen++) - continue; - return exlen; -} -# endif -# endif - -# ifndef exstpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define exstpcpy stpcpy -# else -/* Copy EXSRC to EXDEST, returning the address of the terminating '\0' in - EXDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -exstpcpy (char *exdest, const char *exsrc) -#else -static char * -exstpcpy (exdest, exsrc) - char *exdest; - const char *exsrc; -#endif -{ - char *exd = exdest; - const char *exs = exsrc; - - while ((*exd++ = *exs++) != '\0') - continue; - - return exd - 1; -} -# endif -# endif - -# ifndef extnamerr -/* Copy to EXRES the contents of EXSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for exerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). EXSTR is taken from extname. If EXRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static EXSIZE_T -extnamerr (char *exres, const char *exstr) -{ - if (*exstr == '"') - { - EXSIZE_T exn = 0; - char const *exp = exstr; - - for (;;) - switch (*++exp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++exp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (exres) - exres[exn] = *exp; - exn++; - break; - - case '"': - if (exres) - exres[exn] = '\0'; - return exn; - } - do_not_strip_quotes: ; - } - - if (! exres) - return exstrlen (exstr); - - return exstpcpy (exres, exstr) - exres; -} -# endif - -/* Copy into *EXMSG, which is of size *EXMSG_ALLOC, an error message - about the unexpected token EXTOKEN for the state stack whose top is - EXSSP. - - Return 0 if *EXMSG was successfully written. Return 1 if *EXMSG is - not large enough to hold the message. In that case, also set - *EXMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -exsyntax_error (EXSIZE_T *exmsg_alloc, char **exmsg, - extype_int16 *exssp, int extoken) -{ - EXSIZE_T exsize0 = extnamerr (EX_NULL, extname[extoken]); - EXSIZE_T exsize = exsize0; - enum { EXERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *exformat = EX_NULL; - /* Arguments of exformat. */ - char const *exarg[EXERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int excount = 0; - - /* There are many possibilities here to consider: - - Assume EXFAIL is not used. It's too flawed to consider. See - - for details. EXERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in exchar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated exchar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (extoken != EXEMPTY) - { - int exn = expact[*exssp]; - exarg[excount++] = extname[extoken]; - if (!expact_value_is_default (exn)) - { - /* Start EXX at -EXN if negative to avoid negative indexes in - EXCHECK. In other words, skip the first -EXN actions for - this state because they are default actions. */ - int exxbegin = exn < 0 ? -exn : 0; - /* Stay within bounds of both excheck and extname. */ - int exchecklim = EXLAST - exn + 1; - int exxend = exchecklim < EXNTOKENS ? exchecklim : EXNTOKENS; - int exx; - - for (exx = exxbegin; exx < exxend; ++exx) - if (excheck[exx + exn] == exx && exx != EXTERROR - && !extable_value_is_error (extable[exx + exn])) - { - if (excount == EXERROR_VERBOSE_ARGS_MAXIMUM) - { - excount = 1; - exsize = exsize0; - break; - } - exarg[excount++] = extname[exx]; - { - EXSIZE_T exsize1 = exsize + extnamerr (EX_NULL, extname[exx]); - if (! (exsize <= exsize1 - && exsize1 <= EXSTACK_ALLOC_MAXIMUM)) - return 2; - exsize = exsize1; - } - } - } - } - - switch (excount) - { -# define EXCASE_(N, S) \ - case N: \ - exformat = S; \ - break - EXCASE_(0, EX_("syntax error")); - EXCASE_(1, EX_("syntax error, unexpected %s")); - EXCASE_(2, EX_("syntax error, unexpected %s, expecting %s")); - EXCASE_(3, EX_("syntax error, unexpected %s, expecting %s or %s")); - EXCASE_(4, EX_("syntax error, unexpected %s, expecting %s or %s or %s")); - EXCASE_(5, EX_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef EXCASE_ - } - - { - EXSIZE_T exsize1 = exsize + exstrlen (exformat); - if (! (exsize <= exsize1 && exsize1 <= EXSTACK_ALLOC_MAXIMUM)) - return 2; - exsize = exsize1; - } - - if (*exmsg_alloc < exsize) - { - *exmsg_alloc = 2 * exsize; - if (! (exsize <= *exmsg_alloc - && *exmsg_alloc <= EXSTACK_ALLOC_MAXIMUM)) - *exmsg_alloc = EXSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *exp = *exmsg; - int exi = 0; - while ((*exp = *exformat) != '\0') - if (*exp == '%' && exformat[1] == 's' && exi < excount) - { - exp += extnamerr (exp, exarg[exi++]); - exformat += 2; - } - else - { - exp++; - exformat++; - } - } - return 0; -} -#endif /* EXERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -exdestruct (const char *exmsg, int extype, EXSTYPE *exvaluep) -#else -static void -exdestruct (exmsg, extype, exvaluep) - const char *exmsg; - int extype; - EXSTYPE *exvaluep; -#endif -{ - EXUSE (exvaluep); - - if (!exmsg) - exmsg = "Deleting"; - EX_SYMBOL_PRINT (exmsg, extype, exvaluep, exlocationp); - - switch (extype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int exchar; - - -#ifndef EX_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define EX_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define EX_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef EX_INITIAL_VALUE -# define EX_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -EXSTYPE exlval EX_INITIAL_VALUE(exval_default); - -/* Number of syntax errors so far. */ -int exnerrs; - - -/*----------. -| exparse. | -`----------*/ - -#ifdef EXPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -exparse (void *EXPARSE_PARAM) -#else -int -exparse (EXPARSE_PARAM) - void *EXPARSE_PARAM; -#endif -#else /* ! EXPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -exparse (void) -#else -int -exparse () - -#endif -#endif -{ - int exstate; - /* Number of tokens to shift before error messages enabled. */ - int exerrstatus; - - /* The stacks and their tools: - `exss': related to states. - `exvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow exoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - extype_int16 exssa[EXINITDEPTH]; - extype_int16 *exss; - extype_int16 *exssp; - - /* The semantic value stack. */ - EXSTYPE exvsa[EXINITDEPTH]; - EXSTYPE *exvs; - EXSTYPE *exvsp; - - EXSIZE_T exstacksize; - - int exn; - int exresult; - /* Lookahead token as an internal (translated) token number. */ - int extoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - EXSTYPE exval; - -#if EXERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char exmsgbuf[128]; - char *exmsg = exmsgbuf; - EXSIZE_T exmsg_alloc = sizeof exmsgbuf; -#endif - -#define EXPOPSTACK(N) (exvsp -= (N), exssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int exlen = 0; - - exssp = exss = exssa; - exvsp = exvs = exvsa; - exstacksize = EXINITDEPTH; - - EXDPRINTF ((sfstderr, "Starting parse\n")); - - exstate = 0; - exerrstatus = 0; - exnerrs = 0; - exchar = EXEMPTY; /* Cause a token to be read. */ - goto exsetstate; - -/*------------------------------------------------------------. -| exnewstate -- Push a new state, which is found in exstate. | -`------------------------------------------------------------*/ - exnewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - exssp++; - - exsetstate: - *exssp = exstate; - - if (exss + exstacksize - 1 <= exssp) - { - /* Get the current used size of the three stacks, in elements. */ - EXSIZE_T exsize = exssp - exss + 1; - -#ifdef exoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - EXSTYPE *exvs1 = exvs; - extype_int16 *exss1 = exss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if exoverflow is a macro. */ - exoverflow (EX_("memory exhausted"), - &exss1, exsize * sizeof (*exssp), - &exvs1, exsize * sizeof (*exvsp), - &exstacksize); - - exss = exss1; - exvs = exvs1; - } -#else /* no exoverflow */ -# ifndef EXSTACK_RELOCATE - goto exexhaustedlab; -# else - /* Extend the stack our own way. */ - if (EXMAXDEPTH <= exstacksize) - goto exexhaustedlab; - exstacksize *= 2; - if (EXMAXDEPTH < exstacksize) - exstacksize = EXMAXDEPTH; - - { - extype_int16 *exss1 = exss; - union exalloc *exptr = - (union exalloc *) EXSTACK_ALLOC (EXSTACK_BYTES (exstacksize)); - if (! exptr) - goto exexhaustedlab; - EXSTACK_RELOCATE (exss_alloc, exss); - EXSTACK_RELOCATE (exvs_alloc, exvs); -# undef EXSTACK_RELOCATE - if (exss1 != exssa) - EXSTACK_FREE (exss1); - } -# endif -#endif /* no exoverflow */ - - exssp = exss + exsize - 1; - exvsp = exvs + exsize - 1; - - EXDPRINTF ((sfstderr, "Stack size increased to %lu\n", - (unsigned long int) exstacksize)); - - if (exss + exstacksize - 1 <= exssp) - EXABORT; - } - - EXDPRINTF ((sfstderr, "Entering state %d\n", exstate)); - - if (exstate == EXFINAL) - EXACCEPT; - - goto exbackup; - -/*-----------. -| exbackup. | -`-----------*/ -exbackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - exn = expact[exstate]; - if (expact_value_is_default (exn)) - goto exdefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* EXCHAR is either EXEMPTY or EXEOF or a valid lookahead symbol. */ - if (exchar == EXEMPTY) - { - EXDPRINTF ((sfstderr, "Reading a token: ")); - exchar = EXLEX; - } - - if (exchar <= EXEOF) - { - exchar = extoken = EXEOF; - EXDPRINTF ((sfstderr, "Now at end of input.\n")); - } - else - { - extoken = EXTRANSLATE (exchar); - EX_SYMBOL_PRINT ("Next token is", extoken, &exlval, &exlloc); - } - - /* If the proper action on seeing token EXTOKEN is to reduce or to - detect an error, take that action. */ - exn += extoken; - if (exn < 0 || EXLAST < exn || excheck[exn] != extoken) - goto exdefault; - exn = extable[exn]; - if (exn <= 0) - { - if (extable_value_is_error (exn)) - goto exerrlab; - exn = -exn; - goto exreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (exerrstatus) - exerrstatus--; - - /* Shift the lookahead token. */ - EX_SYMBOL_PRINT ("Shifting", extoken, &exlval, &exlloc); - - /* Discard the shifted token. */ - exchar = EXEMPTY; - - exstate = exn; - EX_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++exvsp = exlval; - EX_IGNORE_MAYBE_UNINITIALIZED_END - - goto exnewstate; - - -/*-----------------------------------------------------------. -| exdefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -exdefault: - exn = exdefact[exstate]; - if (exn == 0) - goto exerrlab; - goto exreduce; - - -/*-----------------------------. -| exreduce -- Do a reduction. | -`-----------------------------*/ -exreduce: - /* exn is the number of a rule to reduce with. */ - exlen = exr2[exn]; - - /* If EXLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets EXVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to EXVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that EXVAL may be used uninitialized. */ - exval = exvsp[1-exlen]; - - - EX_REDUCE_PRINT (exn); - switch (exn) - { - case 2: -/* Line 1792 of yacc.c */ -#line 175 "../../lib/expr/exparse.y" - { - if ((exvsp[(1) - (2)].expr) && !(expr.program->disc->flags & EX_STRICT)) - { - if (expr.program->main.value && !(expr.program->disc->flags & EX_RETAIN)) - exfreenode(expr.program, expr.program->main.value); - if ((exvsp[(1) - (2)].expr)->op == S2B) - { - Exnode_t* x; - - x = (exvsp[(1) - (2)].expr); - (exvsp[(1) - (2)].expr) = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - expr.program->main.lex = PROCEDURE; - expr.program->main.value = exnewnode(expr.program, PROCEDURE, 1, (exvsp[(1) - (2)].expr)->type, NiL, (exvsp[(1) - (2)].expr)); - } - } - break; - - case 5: -/* Line 1792 of yacc.c */ -#line 199 "../../lib/expr/exparse.y" - { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("no nested function definitions"); - (exvsp[(1) - (2)].id)->lex = PROCEDURE; - expr.procedure = (exvsp[(1) - (2)].id)->value = exnewnode(expr.program, PROCEDURE, 1, (exvsp[(1) - (2)].id)->type, NiL, NiL); - expr.procedure->type = INTEGER; - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (expr.assigned && !streq((exvsp[(1) - (2)].id)->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - } - } - break; - - case 6: -/* Line 1792 of yacc.c */ -#line 217 "../../lib/expr/exparse.y" - { - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - if ((exvsp[(4) - (4)].expr) && (exvsp[(4) - (4)].expr)->op == S2B) - { - Exnode_t* x; - - x = (exvsp[(4) - (4)].expr); - (exvsp[(4) - (4)].expr) = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - (exvsp[(1) - (4)].id)->value->data.operand.right = excast(expr.program, (exvsp[(4) - (4)].expr), (exvsp[(1) - (4)].id)->type, NiL, 0); - } - break; - - case 7: -/* Line 1792 of yacc.c */ -#line 239 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 243 "../../lib/expr/exparse.y" - { - if (!(exvsp[(1) - (2)].expr)) - (exval.expr) = (exvsp[(2) - (2)].expr); - else if (!(exvsp[(2) - (2)].expr)) - (exval.expr) = (exvsp[(1) - (2)].expr); - else if ((exvsp[(1) - (2)].expr)->op == CONSTANT) - { - exfreenode(expr.program, (exvsp[(1) - (2)].expr)); - (exval.expr) = (exvsp[(2) - (2)].expr); - } -#ifdef UNUSED - else if ((exvsp[(1) - (2)].expr)->op == ';') - { - (exval.expr) = (exvsp[(1) - (2)].expr); - (exvsp[(1) - (2)].expr)->data.operand.last = (exvsp[(1) - (2)].expr)->data.operand.last->data.operand.right = exnewnode(expr.program, ';', 1, (exvsp[(2) - (2)].expr)->type, (exvsp[(2) - (2)].expr), NiL); - } - else - { - (exval.expr) = exnewnode(expr.program, ';', 1, (exvsp[(1) - (2)].expr)->type, (exvsp[(1) - (2)].expr), NiL); - (exval.expr)->data.operand.last = (exval.expr)->data.operand.right = exnewnode(expr.program, ';', 1, (exvsp[(2) - (2)].expr)->type, (exvsp[(2) - (2)].expr), NiL); - } -#endif - else (exval.expr) = exnewnode(expr.program, ';', 1, (exvsp[(2) - (2)].expr)->type, (exvsp[(1) - (2)].expr), (exvsp[(2) - (2)].expr)); - } - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 270 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(2) - (3)].expr); - } - break; - - case 10: -/* Line 1792 of yacc.c */ -#line 274 "../../lib/expr/exparse.y" - { - (exval.expr) = ((exvsp[(1) - (2)].expr) && (exvsp[(1) - (2)].expr)->type == STRING) ? exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(1) - (2)].expr), NiL) : (exvsp[(1) - (2)].expr); - } - break; - - case 11: -/* Line 1792 of yacc.c */ -#line 277 "../../lib/expr/exparse.y" - {expr.instatic=(exvsp[(1) - (1)].integer);} - break; - - case 12: -/* Line 1792 of yacc.c */ -#line 277 "../../lib/expr/exparse.y" - {expr.declare=(exvsp[(3) - (3)].id)->type;} - break; - - case 13: -/* Line 1792 of yacc.c */ -#line 278 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(5) - (6)].expr); - expr.declare = 0; - } - break; - - case 14: -/* Line 1792 of yacc.c */ -#line 283 "../../lib/expr/exparse.y" - { - if (exisAssign ((exvsp[(3) - (6)].expr))) - exwarn ("assignment used as boolean in if statement"); - if ((exvsp[(3) - (6)].expr)->type == STRING) - (exvsp[(3) - (6)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(3) - (6)].expr), NiL); - else if (!INTEGRAL((exvsp[(3) - (6)].expr)->type)) - (exvsp[(3) - (6)].expr) = excast(expr.program, (exvsp[(3) - (6)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (6)].id)->index, 1, INTEGER, (exvsp[(3) - (6)].expr), exnewnode(expr.program, ':', 1, (exvsp[(5) - (6)].expr) ? (exvsp[(5) - (6)].expr)->type : 0, (exvsp[(5) - (6)].expr), (exvsp[(6) - (6)].expr))); - } - break; - - case 15: -/* Line 1792 of yacc.c */ -#line 293 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ITERATE, 0, INTEGER, NiL, NiL); - (exval.expr)->data.generate.array = (exvsp[(3) - (5)].expr); - if (!(exvsp[(3) - (5)].expr)->data.variable.index || (exvsp[(3) - (5)].expr)->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - (exval.expr)->data.generate.index = (exvsp[(3) - (5)].expr)->data.variable.index->data.variable.symbol; - if ((exvsp[(3) - (5)].expr)->op == ID && (exval.expr)->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, (exvsp[(3) - (5)].expr)->data.variable.index); - (exvsp[(3) - (5)].expr)->data.variable.index = 0; - (exval.expr)->data.generate.statement = (exvsp[(5) - (5)].expr); - } - break; - - case 16: -/* Line 1792 of yacc.c */ -#line 306 "../../lib/expr/exparse.y" - { - if (!(exvsp[(5) - (9)].expr)) - { - (exvsp[(5) - (9)].expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (exvsp[(5) - (9)].expr)->data.constant.value.integer = 1; - } - else if ((exvsp[(5) - (9)].expr)->type == STRING) - (exvsp[(5) - (9)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(5) - (9)].expr), NiL); - else if (!INTEGRAL((exvsp[(5) - (9)].expr)->type)) - (exvsp[(5) - (9)].expr) = excast(expr.program, (exvsp[(5) - (9)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (9)].id)->index, 1, INTEGER, (exvsp[(5) - (9)].expr), exnewnode(expr.program, ';', 1, 0, (exvsp[(7) - (9)].expr), (exvsp[(9) - (9)].expr))); - if ((exvsp[(3) - (9)].expr)) - (exval.expr) = exnewnode(expr.program, ';', 1, INTEGER, (exvsp[(3) - (9)].expr), (exval.expr)); - } - break; - - case 17: -/* Line 1792 of yacc.c */ -#line 321 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ITERATER, 0, INTEGER, NiL, NiL); - (exval.expr)->data.generate.array = (exvsp[(3) - (5)].expr); - if (!(exvsp[(3) - (5)].expr)->data.variable.index || (exvsp[(3) - (5)].expr)->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - (exval.expr)->data.generate.index = (exvsp[(3) - (5)].expr)->data.variable.index->data.variable.symbol; - if ((exvsp[(3) - (5)].expr)->op == ID && (exval.expr)->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, (exvsp[(3) - (5)].expr)->data.variable.index); - (exvsp[(3) - (5)].expr)->data.variable.index = 0; - (exval.expr)->data.generate.statement = (exvsp[(5) - (5)].expr); - } - break; - - case 18: -/* Line 1792 of yacc.c */ -#line 334 "../../lib/expr/exparse.y" - { - if ((exvsp[(3) - (4)].id)->local.pointer == 0) - exerror("cannot apply unset to non-array %s", (exvsp[(3) - (4)].id)->name); - (exval.expr) = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(3) - (4)].id); - (exval.expr)->data.variable.index = NiL; - } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 342 "../../lib/expr/exparse.y" - { - if ((exvsp[(3) - (6)].id)->local.pointer == 0) - exerror("cannot apply unset to non-array %s", (exvsp[(3) - (6)].id)->name); - if (((exvsp[(3) - (6)].id)->index_type > 0) && ((exvsp[(5) - (6)].expr)->type != (exvsp[(3) - (6)].id)->index_type)) - exerror("%s indices must have type %s, not %s", - (exvsp[(3) - (6)].id)->name, extypename(expr.program, (exvsp[(3) - (6)].id)->index_type),extypename(expr.program, (exvsp[(5) - (6)].expr)->type)); - (exval.expr) = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(3) - (6)].id); - (exval.expr)->data.variable.index = (exvsp[(5) - (6)].expr); - } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 353 "../../lib/expr/exparse.y" - { - if (exisAssign ((exvsp[(3) - (5)].expr))) - exwarn ("assignment used as boolean in while statement"); - if ((exvsp[(3) - (5)].expr)->type == STRING) - (exvsp[(3) - (5)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(3) - (5)].expr), NiL); - else if (!INTEGRAL((exvsp[(3) - (5)].expr)->type)) - (exvsp[(3) - (5)].expr) = excast(expr.program, (exvsp[(3) - (5)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (5)].id)->index, 1, INTEGER, (exvsp[(3) - (5)].expr), exnewnode(expr.program, ';', 1, 0, NiL, (exvsp[(5) - (5)].expr))); - } - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 362 "../../lib/expr/exparse.y" - {expr.declare=(exvsp[(3) - (3)].expr)->type;} - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 363 "../../lib/expr/exparse.y" - { - register Switch_t* sw = expr.swstate; - - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (8)].id)->index, 1, INTEGER, (exvsp[(3) - (8)].expr), exnewnode(expr.program, DEFAULT, 1, 0, sw->defcase, sw->firstcase)); - expr.swstate = expr.swstate->prev; - if (sw->base) - free(sw->base); - if (sw != &swstate) - free(sw); - expr.declare = 0; - } - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 375 "../../lib/expr/exparse.y" - { - loopop: - if (!(exvsp[(2) - (3)].expr)) - { - (exvsp[(2) - (3)].expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (exvsp[(2) - (3)].expr)->data.constant.value.integer = 1; - } - else if (!INTEGRAL((exvsp[(2) - (3)].expr)->type)) - (exvsp[(2) - (3)].expr) = excast(expr.program, (exvsp[(2) - (3)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (3)].id)->index, 1, INTEGER, (exvsp[(2) - (3)].expr), NiL); - } - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 387 "../../lib/expr/exparse.y" - { - goto loopop; - } - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 391 "../../lib/expr/exparse.y" - { - if ((exvsp[(2) - (3)].expr)) - { - if (expr.procedure && !expr.procedure->type) - exerror("return in void function"); - (exvsp[(2) - (3)].expr) = excast(expr.program, (exvsp[(2) - (3)].expr), expr.procedure ? expr.procedure->type : INTEGER, NiL, 0); - } - (exval.expr) = exnewnode(expr.program, RETURN, 1, (exvsp[(2) - (3)].expr) ? (exvsp[(2) - (3)].expr)->type : 0, (exvsp[(2) - (3)].expr), NiL); - } - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 403 "../../lib/expr/exparse.y" - { - register Switch_t* sw; - int n; - - if (expr.swstate) - { - if (!(sw = newof(0, Switch_t, 1, 0))) - { - exnospace(); - sw = &swstate; - } - sw->prev = expr.swstate; - } - else - sw = &swstate; - expr.swstate = sw; - sw->type = expr.declare; - sw->firstcase = 0; - sw->lastcase = 0; - sw->defcase = 0; - sw->def = 0; - n = 8; - if (!(sw->base = newof(0, Extype_t*, n, 0))) - { - exnospace(); - n = 0; - } - sw->cur = sw->base; - sw->last = sw->base + n; - } - break; - - case 28: -/* Line 1792 of yacc.c */ -#line 437 "../../lib/expr/exparse.y" - { - register Switch_t* sw = expr.swstate; - int n; - - (exval.expr) = exnewnode(expr.program, CASE, 1, 0, (exvsp[(2) - (2)].expr), NiL); - if (sw->cur > sw->base) - { - if (sw->lastcase) - sw->lastcase->data.select.next = (exval.expr); - else - sw->firstcase = (exval.expr); - sw->lastcase = (exval.expr); - n = sw->cur - sw->base; - sw->cur = sw->base; - (exval.expr)->data.select.constant = (Extype_t**)exalloc(expr.program, (n + 1) * sizeof(Extype_t*)); - memcpy((exval.expr)->data.select.constant, sw->base, n * sizeof(Extype_t*)); - (exval.expr)->data.select.constant[n] = 0; - } - else - (exval.expr)->data.select.constant = 0; - if (sw->def) - { - sw->def = 0; - if (sw->defcase) - exerror("duplicate default in switch"); - else - sw->defcase = (exvsp[(2) - (2)].expr); - } - } - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 473 "../../lib/expr/exparse.y" - { - int n; - - if (expr.swstate->cur >= expr.swstate->last) - { - n = expr.swstate->cur - expr.swstate->base; - if (!(expr.swstate->base = newof(expr.swstate->base, Extype_t*, 2 * n, 0))) - { - exerror("too many case labels for switch"); - n = 0; - } - expr.swstate->cur = expr.swstate->base + n; - expr.swstate->last = expr.swstate->base + 2 * n; - } - if (expr.swstate->cur) - { - (exvsp[(2) - (3)].expr) = excast(expr.program, (exvsp[(2) - (3)].expr), expr.swstate->type, NiL, 0); - *expr.swstate->cur++ = &((exvsp[(2) - (3)].expr)->data.constant.value); - } - } - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 494 "../../lib/expr/exparse.y" - { - expr.swstate->def = 1; - } - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 500 "../../lib/expr/exparse.y" - { - (exval.integer) = 0; - } - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 504 "../../lib/expr/exparse.y" - { - (exval.integer) = 1; - } - break; - - case 36: -/* Line 1792 of yacc.c */ -#line 511 "../../lib/expr/exparse.y" - { - if ((exvsp[(3) - (3)].expr)) - (exval.expr) = (exvsp[(1) - (3)].expr) ? exnewnode(expr.program, ',', 1, (exvsp[(3) - (3)].expr)->type, (exvsp[(1) - (3)].expr), (exvsp[(3) - (3)].expr)) : (exvsp[(3) - (3)].expr); - } - break; - - case 37: -/* Line 1792 of yacc.c */ -#line 517 "../../lib/expr/exparse.y" - {checkName ((exvsp[(1) - (1)].id)); expr.id=(exvsp[(1) - (1)].id);} - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 518 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - if (!(exvsp[(1) - (4)].id)->type || expr.declare) - (exvsp[(1) - (4)].id)->type = expr.declare; - if ((exvsp[(4) - (4)].expr) && (exvsp[(4) - (4)].expr)->op == PROCEDURE) - { - (exvsp[(1) - (4)].id)->lex = PROCEDURE; - (exvsp[(1) - (4)].id)->type = (exvsp[(4) - (4)].expr)->type; - (exvsp[(1) - (4)].id)->value = (exvsp[(4) - (4)].expr); - } - else - { - (exvsp[(1) - (4)].id)->lex = DYNAMIC; - (exvsp[(1) - (4)].id)->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - if ((exvsp[(3) - (4)].integer) && !(exvsp[(1) - (4)].id)->local.pointer) - { - Dtdisc_t* disc; - - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - if ((exvsp[(3) - (4)].integer) == INTEGER) { - disc->key = offsetof(Exassoc_t, key); - disc->size = sizeof(Extype_t); - disc->comparf = (Dtcompar_f)cmpKey; - } - else - disc->key = offsetof(Exassoc_t, name); - if (!((exvsp[(1) - (4)].id)->local.pointer = (char*)dtopen(disc, Dtoset))) - exerror("%s: cannot initialize associative array", (exvsp[(1) - (4)].id)->name); - (exvsp[(1) - (4)].id)->index_type = (exvsp[(3) - (4)].integer); /* -1 indicates no typechecking */ - } - if ((exvsp[(4) - (4)].expr)) - { - if ((exvsp[(4) - (4)].expr)->type != (exvsp[(1) - (4)].id)->type) - { - (exvsp[(4) - (4)].expr)->type = (exvsp[(1) - (4)].id)->type; - (exvsp[(4) - (4)].expr)->data.operand.right = excast(expr.program, (exvsp[(4) - (4)].expr)->data.operand.right, (exvsp[(1) - (4)].id)->type, NiL, 0); - } - (exvsp[(4) - (4)].expr)->data.operand.left = exnewnode(expr.program, DYNAMIC, 0, (exvsp[(1) - (4)].id)->type, NiL, NiL); - (exvsp[(4) - (4)].expr)->data.operand.left->data.variable.symbol = (exvsp[(1) - (4)].id); - (exval.expr) = (exvsp[(4) - (4)].expr); -#if UNUSED - if (!expr.program->frame && !expr.program->errors) - { - expr.assigned++; - exeval(expr.program, (exval.expr), NiL); - } -#endif - } - else if (!(exvsp[(3) - (4)].integer)) - (exvsp[(1) - (4)].id)->value->data.value = exzero((exvsp[(1) - (4)].id)->type); - } - } - break; - - case 45: -/* Line 1792 of yacc.c */ -#line 584 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 46: -/* Line 1792 of yacc.c */ -#line 588 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(2) - (2)].expr); - } - break; - - case 47: -/* Line 1792 of yacc.c */ -#line 594 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 601 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(2) - (3)].expr); - } - break; - - case 50: -/* Line 1792 of yacc.c */ -#line 605 "../../lib/expr/exparse.y" - { - (exval.expr) = ((exvsp[(4) - (4)].expr)->type == (exvsp[(2) - (4)].id)->type) ? (exvsp[(4) - (4)].expr) : excast(expr.program, (exvsp[(4) - (4)].expr), (exvsp[(2) - (4)].id)->type, NiL, 0); - } - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 609 "../../lib/expr/exparse.y" - { - int rel; - - relational: - rel = INTEGER; - goto coerce; - binary: - rel = 0; - coerce: - if (!(exvsp[(1) - (3)].expr)->type) - { - if (!(exvsp[(3) - (3)].expr)->type) - (exvsp[(1) - (3)].expr)->type = (exvsp[(3) - (3)].expr)->type = rel ? STRING : INTEGER; - else - (exvsp[(1) - (3)].expr)->type = (exvsp[(3) - (3)].expr)->type; - } - else if (!(exvsp[(3) - (3)].expr)->type) - (exvsp[(3) - (3)].expr)->type = (exvsp[(1) - (3)].expr)->type; - if ((exvsp[(1) - (3)].expr)->type != (exvsp[(3) - (3)].expr)->type) - { - if ((exvsp[(1) - (3)].expr)->type == STRING) - (exvsp[(1) - (3)].expr) = excast(expr.program, (exvsp[(1) - (3)].expr), (exvsp[(3) - (3)].expr)->type, (exvsp[(3) - (3)].expr), 0); - else if ((exvsp[(3) - (3)].expr)->type == STRING) - (exvsp[(3) - (3)].expr) = excast(expr.program, (exvsp[(3) - (3)].expr), (exvsp[(1) - (3)].expr)->type, (exvsp[(1) - (3)].expr), 0); - else if ((exvsp[(1) - (3)].expr)->type == FLOATING) - (exvsp[(3) - (3)].expr) = excast(expr.program, (exvsp[(3) - (3)].expr), FLOATING, (exvsp[(1) - (3)].expr), 0); - else if ((exvsp[(3) - (3)].expr)->type == FLOATING) - (exvsp[(1) - (3)].expr) = excast(expr.program, (exvsp[(1) - (3)].expr), FLOATING, (exvsp[(3) - (3)].expr), 0); - } - if (!rel) - rel = ((exvsp[(1) - (3)].expr)->type == STRING) ? STRING : (((exvsp[(1) - (3)].expr)->type == UNSIGNED) ? UNSIGNED : (exvsp[(3) - (3)].expr)->type); - (exval.expr) = exnewnode(expr.program, (exvsp[(2) - (3)].op), 1, rel, (exvsp[(1) - (3)].expr), (exvsp[(3) - (3)].expr)); - if (!expr.program->errors && (exvsp[(1) - (3)].expr)->op == CONSTANT && (exvsp[(3) - (3)].expr)->op == CONSTANT) - { - (exval.expr)->data.constant.value = exeval(expr.program, (exval.expr), NiL); - /* If a constant string, re-allocate from program heap. This is because the - * value was constructed from string operators, which create a value in the - * temporary heap, which is cleared when exeval is called again. - */ - if ((exval.expr)->type == STRING) { - (exval.expr)->data.constant.value.string = - vmstrdup(expr.program->vm, (exval.expr)->data.constant.value.string); - } - (exval.expr)->binary = 0; - (exval.expr)->op = CONSTANT; - exfreenode(expr.program, (exvsp[(1) - (3)].expr)); - exfreenode(expr.program, (exvsp[(3) - (3)].expr)); - } - else if (!BUILTIN((exvsp[(1) - (3)].expr)->type) || !BUILTIN((exvsp[(3) - (3)].expr)->type)) { - checkBinary(expr.program, (exvsp[(1) - (3)].expr), (exval.expr), (exvsp[(3) - (3)].expr)); - } - } - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 662 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 666 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 670 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 674 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 56: -/* Line 1792 of yacc.c */ -#line 678 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 57: -/* Line 1792 of yacc.c */ -#line 682 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 58: -/* Line 1792 of yacc.c */ -#line 686 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 690 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 60: -/* Line 1792 of yacc.c */ -#line 694 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 61: -/* Line 1792 of yacc.c */ -#line 698 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 62: -/* Line 1792 of yacc.c */ -#line 702 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 63: -/* Line 1792 of yacc.c */ -#line 706 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 64: -/* Line 1792 of yacc.c */ -#line 710 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 65: -/* Line 1792 of yacc.c */ -#line 714 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 66: -/* Line 1792 of yacc.c */ -#line 718 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 67: -/* Line 1792 of yacc.c */ -#line 722 "../../lib/expr/exparse.y" - { - logical: - if ((exvsp[(1) - (3)].expr)->type == STRING) - (exvsp[(1) - (3)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(1) - (3)].expr), NiL); - else if (!BUILTIN((exvsp[(1) - (3)].expr)->type)) - (exvsp[(1) - (3)].expr) = excast(expr.program, (exvsp[(1) - (3)].expr), INTEGER, NiL, 0); - if ((exvsp[(3) - (3)].expr)->type == STRING) - (exvsp[(3) - (3)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(3) - (3)].expr), NiL); - else if (!BUILTIN((exvsp[(3) - (3)].expr)->type)) - (exvsp[(3) - (3)].expr) = excast(expr.program, (exvsp[(3) - (3)].expr), INTEGER, NiL, 0); - goto binary; - } - break; - - case 68: -/* Line 1792 of yacc.c */ -#line 735 "../../lib/expr/exparse.y" - { - goto logical; - } - break; - - case 69: -/* Line 1792 of yacc.c */ -#line 739 "../../lib/expr/exparse.y" - { - if ((exvsp[(1) - (3)].expr)->op == CONSTANT) - { - exfreenode(expr.program, (exvsp[(1) - (3)].expr)); - (exval.expr) = (exvsp[(3) - (3)].expr); - } - else - (exval.expr) = exnewnode(expr.program, ',', 1, (exvsp[(3) - (3)].expr)->type, (exvsp[(1) - (3)].expr), (exvsp[(3) - (3)].expr)); - } - break; - - case 70: -/* Line 1792 of yacc.c */ -#line 748 "../../lib/expr/exparse.y" - {expr.nolabel=1;} - break; - - case 71: -/* Line 1792 of yacc.c */ -#line 748 "../../lib/expr/exparse.y" - {expr.nolabel=0;} - break; - - case 72: -/* Line 1792 of yacc.c */ -#line 749 "../../lib/expr/exparse.y" - { - if (!(exvsp[(4) - (7)].expr)->type) - { - if (!(exvsp[(7) - (7)].expr)->type) - (exvsp[(4) - (7)].expr)->type = (exvsp[(7) - (7)].expr)->type = INTEGER; - else - (exvsp[(4) - (7)].expr)->type = (exvsp[(7) - (7)].expr)->type; - } - else if (!(exvsp[(7) - (7)].expr)->type) - (exvsp[(7) - (7)].expr)->type = (exvsp[(4) - (7)].expr)->type; - if ((exvsp[(1) - (7)].expr)->type == STRING) - (exvsp[(1) - (7)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(1) - (7)].expr), NiL); - else if (!INTEGRAL((exvsp[(1) - (7)].expr)->type)) - (exvsp[(1) - (7)].expr) = excast(expr.program, (exvsp[(1) - (7)].expr), INTEGER, NiL, 0); - if ((exvsp[(4) - (7)].expr)->type != (exvsp[(7) - (7)].expr)->type) - { - if ((exvsp[(4) - (7)].expr)->type == STRING || (exvsp[(7) - (7)].expr)->type == STRING) - exerror("if statement string type mismatch"); - else if ((exvsp[(4) - (7)].expr)->type == FLOATING) - (exvsp[(7) - (7)].expr) = excast(expr.program, (exvsp[(7) - (7)].expr), FLOATING, NiL, 0); - else if ((exvsp[(7) - (7)].expr)->type == FLOATING) - (exvsp[(4) - (7)].expr) = excast(expr.program, (exvsp[(4) - (7)].expr), FLOATING, NiL, 0); - } - if ((exvsp[(1) - (7)].expr)->op == CONSTANT) - { - if ((exvsp[(1) - (7)].expr)->data.constant.value.integer) - { - (exval.expr) = (exvsp[(4) - (7)].expr); - exfreenode(expr.program, (exvsp[(7) - (7)].expr)); - } - else - { - (exval.expr) = (exvsp[(7) - (7)].expr); - exfreenode(expr.program, (exvsp[(4) - (7)].expr)); - } - exfreenode(expr.program, (exvsp[(1) - (7)].expr)); - } - else - (exval.expr) = exnewnode(expr.program, '?', 1, (exvsp[(4) - (7)].expr)->type, (exvsp[(1) - (7)].expr), exnewnode(expr.program, ':', 1, (exvsp[(4) - (7)].expr)->type, (exvsp[(4) - (7)].expr), (exvsp[(7) - (7)].expr))); - } - break; - - case 73: -/* Line 1792 of yacc.c */ -#line 790 "../../lib/expr/exparse.y" - { - iunary: - if ((exvsp[(2) - (2)].expr)->type == STRING) - (exvsp[(2) - (2)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (exvsp[(2) - (2)].expr), NiL); - else if (!INTEGRAL((exvsp[(2) - (2)].expr)->type)) - (exvsp[(2) - (2)].expr) = excast(expr.program, (exvsp[(2) - (2)].expr), INTEGER, NiL, 0); - unary: - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (2)].op), 1, (exvsp[(2) - (2)].expr)->type == UNSIGNED ? INTEGER : (exvsp[(2) - (2)].expr)->type, (exvsp[(2) - (2)].expr), NiL); - if ((exvsp[(2) - (2)].expr)->op == CONSTANT) - { - (exval.expr)->data.constant.value = exeval(expr.program, (exval.expr), NiL); - (exval.expr)->binary = 0; - (exval.expr)->op = CONSTANT; - exfreenode(expr.program, (exvsp[(2) - (2)].expr)); - } - else if (!BUILTIN((exvsp[(2) - (2)].expr)->type)) { - checkBinary(expr.program, (exvsp[(2) - (2)].expr), (exval.expr), 0); - } - } - break; - - case 74: -/* Line 1792 of yacc.c */ -#line 810 "../../lib/expr/exparse.y" - { - if ((exvsp[(2) - (2)].id)->local.pointer == 0) - exerror("cannot apply '#' operator to non-array %s", (exvsp[(2) - (2)].id)->name); - (exval.expr) = exnewnode(expr.program, '#', 0, INTEGER, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(2) - (2)].id); - } - break; - - case 75: -/* Line 1792 of yacc.c */ -#line 817 "../../lib/expr/exparse.y" - { - goto iunary; - } - break; - - case 76: -/* Line 1792 of yacc.c */ -#line 821 "../../lib/expr/exparse.y" - { - goto unary; - } - break; - - case 77: -/* Line 1792 of yacc.c */ -#line 825 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(2) - (2)].expr); - } - break; - - case 78: -/* Line 1792 of yacc.c */ -#line 829 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ADDRESS, 0, T((exvsp[(2) - (2)].expr)->type), (exvsp[(2) - (2)].expr), NiL); - } - break; - - case 79: -/* Line 1792 of yacc.c */ -#line 833 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ARRAY, 1, T((exvsp[(1) - (4)].id)->type), call(0, (exvsp[(1) - (4)].id), (exvsp[(3) - (4)].expr)), (exvsp[(3) - (4)].expr)); - } - break; - - case 80: -/* Line 1792 of yacc.c */ -#line 837 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, FUNCTION, 1, T((exvsp[(1) - (4)].id)->type), call(0, (exvsp[(1) - (4)].id), (exvsp[(3) - (4)].expr)), (exvsp[(3) - (4)].expr)); -#ifdef UNUSED - if (!expr.program->disc->getf) - exerror("%s: function references not supported", (exval.expr)->data.operand.left->data.variable.symbol->name); - else if (expr.program->disc->reff) - (*expr.program->disc->reff)(expr.program, (exval.expr)->data.operand.left, (exval.expr)->data.operand.left->data.variable.symbol, 0, NiL, EX_CALL, expr.program->disc); -#endif - } - break; - - case 81: -/* Line 1792 of yacc.c */ -#line 847 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewsub (expr.program, (exvsp[(3) - (4)].expr), GSUB); - } - break; - - case 82: -/* Line 1792 of yacc.c */ -#line 851 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewsub (expr.program, (exvsp[(3) - (4)].expr), SUB); - } - break; - - case 83: -/* Line 1792 of yacc.c */ -#line 855 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewsubstr (expr.program, (exvsp[(3) - (4)].expr)); - } - break; - - case 84: -/* Line 1792 of yacc.c */ -#line 859 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewsplit (expr.program, (exvsp[(1) - (6)].id)->index, (exvsp[(5) - (6)].id), (exvsp[(3) - (6)].expr), NiL); - } - break; - - case 85: -/* Line 1792 of yacc.c */ -#line 863 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewsplit (expr.program, (exvsp[(1) - (8)].id)->index, (exvsp[(5) - (8)].id), (exvsp[(3) - (8)].expr), (exvsp[(7) - (8)].expr)); - } - break; - - case 86: -/* Line 1792 of yacc.c */ -#line 867 "../../lib/expr/exparse.y" - { - if (!INTEGRAL((exvsp[(3) - (4)].expr)->type)) - (exvsp[(3) - (4)].expr) = excast(expr.program, (exvsp[(3) - (4)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, EXIT, 1, INTEGER, (exvsp[(3) - (4)].expr), NiL); - } - break; - - case 87: -/* Line 1792 of yacc.c */ -#line 873 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, RAND, 0, FLOATING, NiL, NiL); - } - break; - - case 88: -/* Line 1792 of yacc.c */ -#line 877 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, SRAND, 0, INTEGER, NiL, NiL); - } - break; - - case 89: -/* Line 1792 of yacc.c */ -#line 881 "../../lib/expr/exparse.y" - { - if (!INTEGRAL((exvsp[(3) - (4)].expr)->type)) - (exvsp[(3) - (4)].expr) = excast(expr.program, (exvsp[(3) - (4)].expr), INTEGER, NiL, 0); - (exval.expr) = exnewnode(expr.program, SRAND, 1, INTEGER, (exvsp[(3) - (4)].expr), NiL); - } - break; - - case 90: -/* Line 1792 of yacc.c */ -#line 887 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CALL, 1, (exvsp[(1) - (4)].id)->type, NiL, (exvsp[(3) - (4)].expr)); - (exval.expr)->data.call.procedure = (exvsp[(1) - (4)].id); - } - break; - - case 91: -/* Line 1792 of yacc.c */ -#line 892 "../../lib/expr/exparse.y" - { - (exval.expr) = exprint(expr.program, (exvsp[(1) - (4)].id), (exvsp[(3) - (4)].expr)); - } - break; - - case 92: -/* Line 1792 of yacc.c */ -#line 896 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (4)].id)->index, 0, (exvsp[(1) - (4)].id)->type, NiL, NiL); - if ((exvsp[(3) - (4)].expr) && (exvsp[(3) - (4)].expr)->data.operand.left->type == INTEGER) - { - (exval.expr)->data.print.descriptor = (exvsp[(3) - (4)].expr)->data.operand.left; - (exvsp[(3) - (4)].expr) = (exvsp[(3) - (4)].expr)->data.operand.right; - } - else - switch ((exvsp[(1) - (4)].id)->index) - { - case QUERY: - (exval.expr)->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (exval.expr)->data.print.descriptor->data.constant.value.integer = 2; - break; - case PRINTF: - (exval.expr)->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (exval.expr)->data.print.descriptor->data.constant.value.integer = 1; - break; - case SPRINTF: - (exval.expr)->data.print.descriptor = 0; - break; - } - (exval.expr)->data.print.args = preprint((exvsp[(3) - (4)].expr)); - } - break; - - case 93: -/* Line 1792 of yacc.c */ -#line 921 "../../lib/expr/exparse.y" - { - register Exnode_t* x; - - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (4)].id)->index, 0, (exvsp[(1) - (4)].id)->type, NiL, NiL); - if ((exvsp[(3) - (4)].expr) && (exvsp[(3) - (4)].expr)->data.operand.left->type == INTEGER) - { - (exval.expr)->data.scan.descriptor = (exvsp[(3) - (4)].expr)->data.operand.left; - (exvsp[(3) - (4)].expr) = (exvsp[(3) - (4)].expr)->data.operand.right; - } - else - switch ((exvsp[(1) - (4)].id)->index) - { - case SCANF: - (exval.expr)->data.scan.descriptor = 0; - break; - case SSCANF: - if ((exvsp[(3) - (4)].expr) && (exvsp[(3) - (4)].expr)->data.operand.left->type == STRING) - { - (exval.expr)->data.scan.descriptor = (exvsp[(3) - (4)].expr)->data.operand.left; - (exvsp[(3) - (4)].expr) = (exvsp[(3) - (4)].expr)->data.operand.right; - } - else - exerror("%s: string argument expected", (exvsp[(1) - (4)].id)->name); - break; - } - if (!(exvsp[(3) - (4)].expr) || !(exvsp[(3) - (4)].expr)->data.operand.left || (exvsp[(3) - (4)].expr)->data.operand.left->type != STRING) - exerror("%s: format argument expected", (exvsp[(1) - (4)].id)->name); - (exval.expr)->data.scan.format = (exvsp[(3) - (4)].expr)->data.operand.left; - for (x = (exval.expr)->data.scan.args = (exvsp[(3) - (4)].expr)->data.operand.right; x; x = x->data.operand.right) - { - if (x->data.operand.left->op != ADDRESS) - exerror("%s: address argument expected", (exvsp[(1) - (4)].id)->name); - x->data.operand.left = x->data.operand.left->data.operand.left; - } - } - break; - - case 94: -/* Line 1792 of yacc.c */ -#line 957 "../../lib/expr/exparse.y" - { - if ((exvsp[(2) - (2)].expr)) - { - if ((exvsp[(1) - (2)].expr)->op == ID && !expr.program->disc->setf) - exerror("%s: variable assignment not supported", (exvsp[(1) - (2)].expr)->data.variable.symbol->name); - else - { - if (!(exvsp[(1) - (2)].expr)->type) - (exvsp[(1) - (2)].expr)->type = (exvsp[(2) - (2)].expr)->type; -#if 0 - else if ((exvsp[(2) - (2)].expr)->type != (exvsp[(1) - (2)].expr)->type && (exvsp[(1) - (2)].expr)->type >= 0200) -#else - else if ((exvsp[(2) - (2)].expr)->type != (exvsp[(1) - (2)].expr)->type) -#endif - { - (exvsp[(2) - (2)].expr)->type = (exvsp[(1) - (2)].expr)->type; - (exvsp[(2) - (2)].expr)->data.operand.right = excast(expr.program, (exvsp[(2) - (2)].expr)->data.operand.right, (exvsp[(1) - (2)].expr)->type, NiL, 0); - } - (exvsp[(2) - (2)].expr)->data.operand.left = (exvsp[(1) - (2)].expr); - (exval.expr) = (exvsp[(2) - (2)].expr); - } - } - } - break; - - case 95: -/* Line 1792 of yacc.c */ -#line 981 "../../lib/expr/exparse.y" - { - pre: - if ((exvsp[(2) - (2)].expr)->type == STRING) - exerror("++ and -- invalid for string variables"); - (exval.expr) = exnewnode(expr.program, (exvsp[(1) - (2)].op), 0, (exvsp[(2) - (2)].expr)->type, (exvsp[(2) - (2)].expr), NiL); - (exval.expr)->subop = PRE; - } - break; - - case 96: -/* Line 1792 of yacc.c */ -#line 989 "../../lib/expr/exparse.y" - { - pos: - if ((exvsp[(1) - (2)].expr)->type == STRING) - exerror("++ and -- invalid for string variables"); - (exval.expr) = exnewnode(expr.program, (exvsp[(2) - (2)].op), 0, (exvsp[(1) - (2)].expr)->type, (exvsp[(1) - (2)].expr), NiL); - (exval.expr)->subop = POS; - } - break; - - case 97: -/* Line 1792 of yacc.c */ -#line 997 "../../lib/expr/exparse.y" - { - if ((exvsp[(3) - (3)].id)->local.pointer == 0) - exerror("cannot apply IN to non-array %s", (exvsp[(3) - (3)].id)->name); - if (((exvsp[(3) - (3)].id)->index_type > 0) && ((exvsp[(1) - (3)].expr)->type != (exvsp[(3) - (3)].id)->index_type)) - exerror("%s indices must have type %s, not %s", - (exvsp[(3) - (3)].id)->name, extypename(expr.program, (exvsp[(3) - (3)].id)->index_type),extypename(expr.program, (exvsp[(1) - (3)].expr)->type)); - (exval.expr) = exnewnode(expr.program, IN_OP, 0, INTEGER, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(3) - (3)].id); - (exval.expr)->data.variable.index = (exvsp[(1) - (3)].expr); - } - break; - - case 98: -/* Line 1792 of yacc.c */ -#line 1008 "../../lib/expr/exparse.y" - { - goto pre; - } - break; - - case 99: -/* Line 1792 of yacc.c */ -#line 1012 "../../lib/expr/exparse.y" - { - goto pos; - } - break; - - case 103: -/* Line 1792 of yacc.c */ -#line 1022 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CONSTANT, 0, (exvsp[(1) - (1)].id)->type, NiL, NiL); - if (!expr.program->disc->reff) - exerror("%s: identifier references not supported", (exvsp[(1) - (1)].id)->name); - else - (exval.expr)->data.constant.value = (*expr.program->disc->reff)(expr.program, (exval.expr), (exvsp[(1) - (1)].id), NiL, NiL, EX_SCALAR, expr.program->disc); - } - break; - - case 104: -/* Line 1792 of yacc.c */ -#line 1030 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CONSTANT, 0, FLOATING, NiL, NiL); - (exval.expr)->data.constant.value.floating = (exvsp[(1) - (1)].floating); - } - break; - - case 105: -/* Line 1792 of yacc.c */ -#line 1035 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (exval.expr)->data.constant.value.integer = (exvsp[(1) - (1)].integer); - } - break; - - case 106: -/* Line 1792 of yacc.c */ -#line 1040 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CONSTANT, 0, STRING, NiL, NiL); - (exval.expr)->data.constant.value.string = (exvsp[(1) - (1)].string); - } - break; - - case 107: -/* Line 1792 of yacc.c */ -#line 1045 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, CONSTANT, 0, UNSIGNED, NiL, NiL); - (exval.expr)->data.constant.value.integer = (exvsp[(1) - (1)].integer); - } - break; - - case 113: -/* Line 1792 of yacc.c */ -#line 1061 "../../lib/expr/exparse.y" - { - (exval.expr) = makeVar(expr.program, (exvsp[(1) - (2)].id), 0, 0, (exvsp[(2) - (2)].reference)); - } - break; - - case 114: -/* Line 1792 of yacc.c */ -#line 1065 "../../lib/expr/exparse.y" - { - Exnode_t* n; - - n = exnewnode(expr.program, DYNAMIC, 0, (exvsp[(1) - (3)].id)->type, NiL, NiL); - n->data.variable.symbol = (exvsp[(1) - (3)].id); - n->data.variable.reference = 0; - if (((n->data.variable.index = (exvsp[(2) - (3)].expr)) == 0) != ((exvsp[(1) - (3)].id)->local.pointer == 0)) - exerror("%s: is%s an array", (exvsp[(1) - (3)].id)->name, (exvsp[(1) - (3)].id)->local.pointer ? "" : " not"); - if ((exvsp[(1) - (3)].id)->local.pointer && ((exvsp[(1) - (3)].id)->index_type > 0)) { - if ((exvsp[(2) - (3)].expr)->type != (exvsp[(1) - (3)].id)->index_type) - exerror("%s: indices must have type %s, not %s", - (exvsp[(1) - (3)].id)->name, extypename(expr.program, (exvsp[(1) - (3)].id)->index_type),extypename(expr.program, (exvsp[(2) - (3)].expr)->type)); - } - if ((exvsp[(3) - (3)].reference)) { - n->data.variable.dyna =exnewnode(expr.program, 0, 0, 0, NiL, NiL); - (exval.expr) = makeVar(expr.program, (exvsp[(1) - (3)].id), (exvsp[(2) - (3)].expr), n, (exvsp[(3) - (3)].reference)); - } - else (exval.expr) = n; - } - break; - - case 115: -/* Line 1792 of yacc.c */ -#line 1085 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ID, 0, STRING, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(1) - (1)].id); - (exval.expr)->data.variable.reference = 0; - (exval.expr)->data.variable.index = 0; - (exval.expr)->data.variable.dyna = 0; - if (!(expr.program->disc->flags & EX_UNDECLARED)) - exerror("unknown identifier"); - } - break; - - case 116: -/* Line 1792 of yacc.c */ -#line 1097 "../../lib/expr/exparse.y" - { - (exval.integer) = 0; - } - break; - - case 117: -/* Line 1792 of yacc.c */ -#line 1101 "../../lib/expr/exparse.y" - { - (exval.integer) = -1; - } - break; - - case 118: -/* Line 1792 of yacc.c */ -#line 1105 "../../lib/expr/exparse.y" - { - /* If DECLARE is VOID, its type is 0, so this acts like - * the empty case. - */ - if (INTEGRAL((exvsp[(2) - (3)].id)->type)) - (exval.integer) = INTEGER; - else - (exval.integer) = (exvsp[(2) - (3)].id)->type; - - } - break; - - case 119: -/* Line 1792 of yacc.c */ -#line 1118 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 120: -/* Line 1792 of yacc.c */ -#line 1122 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(2) - (3)].expr); - } - break; - - case 121: -/* Line 1792 of yacc.c */ -#line 1128 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 122: -/* Line 1792 of yacc.c */ -#line 1132 "../../lib/expr/exparse.y" - { - (exval.expr) = (exvsp[(1) - (1)].expr)->data.operand.left; - (exvsp[(1) - (1)].expr)->data.operand.left = (exvsp[(1) - (1)].expr)->data.operand.right = 0; - exfreenode(expr.program, (exvsp[(1) - (1)].expr)); - } - break; - - case 123: -/* Line 1792 of yacc.c */ -#line 1140 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ',', 1, 0, exnewnode(expr.program, ',', 1, (exvsp[(1) - (1)].expr)->type, (exvsp[(1) - (1)].expr), NiL), NiL); - (exval.expr)->data.operand.right = (exval.expr)->data.operand.left; - } - break; - - case 124: -/* Line 1792 of yacc.c */ -#line 1145 "../../lib/expr/exparse.y" - { - (exvsp[(1) - (3)].expr)->data.operand.right = (exvsp[(1) - (3)].expr)->data.operand.right->data.operand.right = exnewnode(expr.program, ',', 1, (exvsp[(1) - (3)].expr)->type, (exvsp[(3) - (3)].expr), NiL); - } - break; - - case 125: -/* Line 1792 of yacc.c */ -#line 1151 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 126: -/* Line 1792 of yacc.c */ -#line 1155 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - if ((exvsp[(1) - (1)].id)->type) - exerror("(void) expected"); - } - break; - - case 128: -/* Line 1792 of yacc.c */ -#line 1164 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ',', 1, (exvsp[(1) - (1)].expr)->type, (exvsp[(1) - (1)].expr), NiL); - } - break; - - case 129: -/* Line 1792 of yacc.c */ -#line 1168 "../../lib/expr/exparse.y" - { - register Exnode_t* x; - register Exnode_t* y; - - (exval.expr) = (exvsp[(1) - (3)].expr); - for (x = (exvsp[(1) - (3)].expr); (y = x->data.operand.right); x = y); - x->data.operand.right = exnewnode(expr.program, ',', 1, (exvsp[(3) - (3)].expr)->type, (exvsp[(3) - (3)].expr), NiL); - } - break; - - case 130: -/* Line 1792 of yacc.c */ -#line 1178 "../../lib/expr/exparse.y" - {expr.declare=(exvsp[(1) - (1)].id)->type;} - break; - - case 131: -/* Line 1792 of yacc.c */ -#line 1179 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, ID, 0, (exvsp[(1) - (3)].id)->type, NiL, NiL); - (exval.expr)->data.variable.symbol = (exvsp[(3) - (3)].id); - (exvsp[(3) - (3)].id)->lex = DYNAMIC; - (exvsp[(3) - (3)].id)->type = (exvsp[(1) - (3)].id)->type; - (exvsp[(3) - (3)].id)->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - expr.procedure->data.procedure.arity++; - expr.declare = 0; - } - break; - - case 132: -/* Line 1792 of yacc.c */ -#line 1191 "../../lib/expr/exparse.y" - { - (exval.reference) = expr.refs = expr.lastref = 0; - } - break; - - case 133: -/* Line 1792 of yacc.c */ -#line 1195 "../../lib/expr/exparse.y" - { - Exref_t* r; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = (exvsp[(1) - (1)].id); - expr.refs = r; - expr.lastref = r; - r->next = 0; - r->index = 0; - (exval.reference) = expr.refs; - } - break; - - case 134: -/* Line 1792 of yacc.c */ -#line 1207 "../../lib/expr/exparse.y" - { - Exref_t* r; - Exref_t* l; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = (exvsp[(3) - (3)].id); - r->index = 0; - r->next = 0; - l = ALLOCATE(expr.program, Exref_t); - l->symbol = (exvsp[(2) - (3)].id); - l->index = 0; - l->next = r; - expr.refs = l; - expr.lastref = r; - (exval.reference) = expr.refs; - } - break; - - case 135: -/* Line 1792 of yacc.c */ -#line 1226 "../../lib/expr/exparse.y" - { - (exval.id) = (exvsp[(2) - (2)].id); - } - break; - - case 136: -/* Line 1792 of yacc.c */ -#line 1230 "../../lib/expr/exparse.y" - { - (exval.id) = (exvsp[(2) - (2)].id); - } - break; - - case 137: -/* Line 1792 of yacc.c */ -#line 1235 "../../lib/expr/exparse.y" - { - (exval.expr) = 0; - } - break; - - case 138: -/* Line 1792 of yacc.c */ -#line 1239 "../../lib/expr/exparse.y" - { - (exval.expr) = exnewnode(expr.program, '=', 1, (exvsp[(2) - (2)].expr)->type, NiL, (exvsp[(2) - (2)].expr)); - (exval.expr)->subop = (exvsp[(1) - (2)].op); - } - break; - - case 140: -/* Line 1792 of yacc.c */ -#line 1246 "../../lib/expr/exparse.y" - { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("%s: nested function definitions not supported", expr.id->name); - expr.procedure = exnewnode(expr.program, PROCEDURE, 1, expr.declare, NiL, NiL); - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (!streq(expr.id->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - expr.program->formals = 1; - } - expr.declare = 0; - } - break; - - case 141: -/* Line 1792 of yacc.c */ -#line 1263 "../../lib/expr/exparse.y" - { - expr.id->lex = PROCEDURE; - expr.id->type = expr.procedure->type; - expr.program->formals = 0; - expr.declare = 0; - } - break; - - case 142: -/* Line 1792 of yacc.c */ -#line 1269 "../../lib/expr/exparse.y" - { - (exval.expr) = expr.procedure; - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - (exval.expr)->data.operand.left = (exvsp[(3) - (8)].expr); - (exval.expr)->data.operand.right = excast(expr.program, (exvsp[(7) - (8)].expr), (exval.expr)->type, NiL, 0); - - /* - * NOTE: procedure definition was slipped into the - * declaration initializer statement production, - * therefore requiring the statement terminator - */ - - exunlex(expr.program, ';'); - } - break; - - -/* Line 1792 of yacc.c */ -#line 3495 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter exchar, and that requires - that extoken be updated with the new translation. We take the - approach of translating immediately before every use of extoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - EXABORT, EXACCEPT, or EXERROR immediately after altering exchar or - if it invokes EXBACKUP. In the case of EXABORT or EXACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of EXERROR or EXBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - EX_SYMBOL_PRINT ("-> $$ =", exr1[exn], &exval, &exloc); - - EXPOPSTACK (exlen); - exlen = 0; - EX_STACK_PRINT (exss, exssp); - - *++exvsp = exval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - exn = exr1[exn]; - - exstate = expgoto[exn - EXNTOKENS] + *exssp; - if (0 <= exstate && exstate <= EXLAST && excheck[exstate] == *exssp) - exstate = extable[exstate]; - else - exstate = exdefgoto[exn - EXNTOKENS]; - - goto exnewstate; - - -/*------------------------------------. -| exerrlab -- here on detecting error | -`------------------------------------*/ -exerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - extoken = exchar == EXEMPTY ? EXEMPTY : EXTRANSLATE (exchar); - - /* If not already recovering from an error, report this error. */ - if (!exerrstatus) - { - ++exnerrs; -#if ! EXERROR_VERBOSE - exerror (EX_("syntax error")); -#else -# define EXSYNTAX_ERROR exsyntax_error (&exmsg_alloc, &exmsg, \ - exssp, extoken) - { - char const *exmsgp = EX_("syntax error"); - int exsyntax_error_status; - exsyntax_error_status = EXSYNTAX_ERROR; - if (exsyntax_error_status == 0) - exmsgp = exmsg; - else if (exsyntax_error_status == 1) - { - if (exmsg != exmsgbuf) - EXSTACK_FREE (exmsg); - exmsg = (char *) EXSTACK_ALLOC (exmsg_alloc); - if (!exmsg) - { - exmsg = exmsgbuf; - exmsg_alloc = sizeof exmsgbuf; - exsyntax_error_status = 2; - } - else - { - exsyntax_error_status = EXSYNTAX_ERROR; - exmsgp = exmsg; - } - } - exerror (exmsgp); - if (exsyntax_error_status == 2) - goto exexhaustedlab; - } -# undef EXSYNTAX_ERROR -#endif - } - - - - if (exerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (exchar <= EXEOF) - { - /* Return failure if at end of input. */ - if (exchar == EXEOF) - EXABORT; - } - else - { - exdestruct ("Error: discarding", - extoken, &exlval); - exchar = EXEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto exerrlab1; - - -/*---------------------------------------------------. -| exerrorlab -- error raised explicitly by EXERROR. | -`---------------------------------------------------*/ -exerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - EXERROR and the label exerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto exerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this EXERROR. */ - EXPOPSTACK (exlen); - exlen = 0; - EX_STACK_PRINT (exss, exssp); - exstate = *exssp; - goto exerrlab1; - - -/*-------------------------------------------------------------. -| exerrlab1 -- common code for both syntax error and EXERROR. | -`-------------------------------------------------------------*/ -exerrlab1: - exerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - exn = expact[exstate]; - if (!expact_value_is_default (exn)) - { - exn += EXTERROR; - if (0 <= exn && exn <= EXLAST && excheck[exn] == EXTERROR) - { - exn = extable[exn]; - if (0 < exn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (exssp == exss) - EXABORT; - - - exdestruct ("Error: popping", - exstos[exstate], exvsp); - EXPOPSTACK (1); - exstate = *exssp; - EX_STACK_PRINT (exss, exssp); - } - - EX_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++exvsp = exlval; - EX_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - EX_SYMBOL_PRINT ("Shifting", exstos[exn], exvsp, exlsp); - - exstate = exn; - goto exnewstate; - - -/*-------------------------------------. -| exacceptlab -- EXACCEPT comes here. | -`-------------------------------------*/ -exacceptlab: - exresult = 0; - goto exreturn; - -/*-----------------------------------. -| exabortlab -- EXABORT comes here. | -`-----------------------------------*/ -exabortlab: - exresult = 1; - goto exreturn; - -#if !defined exoverflow || EXERROR_VERBOSE -/*-------------------------------------------------. -| exexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -exexhaustedlab: - exerror (EX_("memory exhausted")); - exresult = 2; - /* Fall through. */ -#endif - -exreturn: - if (exchar != EXEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - extoken = EXTRANSLATE (exchar); - exdestruct ("Cleanup: discarding lookahead", - extoken, &exlval); - } - /* Do not reclaim the symbols of the rule which action triggered - this EXABORT or EXACCEPT. */ - EXPOPSTACK (exlen); - EX_STACK_PRINT (exss, exssp); - while (exssp != exss) - { - exdestruct ("Cleanup: popping", - exstos[*exssp], exvsp); - EXPOPSTACK (1); - } -#ifndef exoverflow - if (exss != exssa) - EXSTACK_FREE (exss); -#endif -#if EXERROR_VERBOSE - if (exmsg != exmsgbuf) - EXSTACK_FREE (exmsg); -#endif - /* Make sure EXID is used. */ - return EXID (exresult); -} - - -/* Line 2055 of yacc.c */ -#line 1291 "../../lib/expr/exparse.y" - - -#include "exgram.h" diff --git a/internal/ccall/expr/exparse.h b/internal/ccall/expr/exparse.h deleted file mode 100644 index 770dc64..0000000 --- a/internal/ccall/expr/exparse.h +++ /dev/null @@ -1,257 +0,0 @@ -#ifndef _EXPARSE_H -#define _EXPARSE_H -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef EX_EX_Y_TAB_H_INCLUDED -# define EX_EX_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef EXDEBUG -# define EXDEBUG 1 -#endif -#if EXDEBUG -extern int exdebug; -#endif - -/* Tokens. */ -#ifndef EXTOKENTYPE -# define EXTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum extokentype { - MINTOKEN = 258, - INTEGER = 259, - UNSIGNED = 260, - CHARACTER = 261, - FLOATING = 262, - STRING = 263, - VOIDTYPE = 264, - STATIC = 265, - ADDRESS = 266, - ARRAY = 267, - BREAK = 268, - CALL = 269, - CASE = 270, - CONSTANT = 271, - CONTINUE = 272, - DECLARE = 273, - DEFAULT = 274, - DYNAMIC = 275, - ELSE = 276, - EXIT = 277, - FOR = 278, - FUNCTION = 279, - GSUB = 280, - ITERATE = 281, - ITERATER = 282, - ID = 283, - IF = 284, - LABEL = 285, - MEMBER = 286, - NAME = 287, - POS = 288, - PRAGMA = 289, - PRE = 290, - PRINT = 291, - PRINTF = 292, - PROCEDURE = 293, - QUERY = 294, - RAND = 295, - RETURN = 296, - SCANF = 297, - SPLIT = 298, - SPRINTF = 299, - SRAND = 300, - SSCANF = 301, - SUB = 302, - SUBSTR = 303, - SWITCH = 304, - TOKENS = 305, - UNSET = 306, - WHILE = 307, - F2I = 308, - F2S = 309, - I2F = 310, - I2S = 311, - S2B = 312, - S2F = 313, - S2I = 314, - F2X = 315, - I2X = 316, - S2X = 317, - X2F = 318, - X2I = 319, - X2S = 320, - X2X = 321, - XPRINT = 322, - OR = 323, - AND = 324, - NE = 325, - EQ = 326, - GE = 327, - LE = 328, - RS = 329, - LS = 330, - IN_OP = 331, - UNARY = 332, - DEC = 333, - INC = 334, - CAST = 335, - MAXTOKEN = 336 - }; -#endif -/* Tokens. */ -#define MINTOKEN 258 -#define INTEGER 259 -#define UNSIGNED 260 -#define CHARACTER 261 -#define FLOATING 262 -#define STRING 263 -#define VOIDTYPE 264 -#define STATIC 265 -#define ADDRESS 266 -#define ARRAY 267 -#define BREAK 268 -#define CALL 269 -#define CASE 270 -#define CONSTANT 271 -#define CONTINUE 272 -#define DECLARE 273 -#define DEFAULT 274 -#define DYNAMIC 275 -#define ELSE 276 -#define EXIT 277 -#define FOR 278 -#define FUNCTION 279 -#define GSUB 280 -#define ITERATE 281 -#define ITERATER 282 -#define ID 283 -#define IF 284 -#define LABEL 285 -#define MEMBER 286 -#define NAME 287 -#define POS 288 -#define PRAGMA 289 -#define PRE 290 -#define PRINT 291 -#define PRINTF 292 -#define PROCEDURE 293 -#define QUERY 294 -#define RAND 295 -#define RETURN 296 -#define SCANF 297 -#define SPLIT 298 -#define SPRINTF 299 -#define SRAND 300 -#define SSCANF 301 -#define SUB 302 -#define SUBSTR 303 -#define SWITCH 304 -#define TOKENS 305 -#define UNSET 306 -#define WHILE 307 -#define F2I 308 -#define F2S 309 -#define I2F 310 -#define I2S 311 -#define S2B 312 -#define S2F 313 -#define S2I 314 -#define F2X 315 -#define I2X 316 -#define S2X 317 -#define X2F 318 -#define X2I 319 -#define X2S 320 -#define X2X 321 -#define XPRINT 322 -#define OR 323 -#define AND 324 -#define NE 325 -#define EQ 326 -#define GE 327 -#define LE 328 -#define RS 329 -#define LS 330 -#define IN_OP 331 -#define UNARY 332 -#define DEC 333 -#define INC 334 -#define CAST 335 -#define MAXTOKEN 336 - - - -#if ! defined EXSTYPE && ! defined EXSTYPE_IS_DECLARED -typedef union EXSTYPE -{ -/* Line 2058 of yacc.c */ -#line 39 "../../lib/expr/exparse.y" - - struct Exnode_s*expr; - double floating; - struct Exref_s* reference; - struct Exid_s* id; - Sflong_t integer; - int op; - char* string; - void* user; - struct Exbuf_s* buffer; - - -/* Line 2058 of yacc.c */ -#line 232 "y.tab.h" -} EXSTYPE; -# define EXSTYPE_IS_TRIVIAL 1 -# define exstype EXSTYPE /* obsolescent; will be withdrawn */ -# define EXSTYPE_IS_DECLARED 1 -#endif - -extern EXSTYPE exlval; - -#ifdef EXPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int exparse (void *EXPARSE_PARAM); -#else -int exparse (); -#endif -#else /* ! EXPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int exparse (void); -#else -int exparse (); -#endif -#endif /* ! EXPARSE_PARAM */ - -#endif /* !EX_EX_Y_TAB_H_INCLUDED */ -#endif /* _EXPARSE_H */ diff --git a/internal/ccall/expr/exparse.y b/internal/ccall/expr/exparse.y deleted file mode 100644 index 02d45fe..0000000 --- a/internal/ccall/expr/exparse.y +++ /dev/null @@ -1,1293 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -%{ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library grammar and compiler - */ - -#ifdef WIN32 -#include - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif -#endif - -#include -#include - -#undef RS /* hp.pa grabs this!! */ - -%} - -%union -{ - struct Exnode_s*expr; - double floating; - struct Exref_s* reference; - struct Exid_s* id; - Sflong_t integer; - int op; - char* string; - void* user; - struct Exbuf_s* buffer; -} - -%start program - -%token MINTOKEN - -%token INTEGER -%token UNSIGNED -%token CHARACTER -%token FLOATING -%token STRING -%token VOIDTYPE -%token STATIC - -%token ADDRESS -%token ARRAY -%token BREAK -%token CALL -%token CASE -%token CONSTANT -%token CONTINUE -%token DECLARE -%token DEFAULT -%token DYNAMIC -%token ELSE -%token EXIT -%token FOR -%token FUNCTION -%token GSUB -%token ITERATE -%token ITERATER -%token ID -%token IF -%token LABEL -%token MEMBER -%token NAME -%token POS -%token PRAGMA -%token PRE -%token PRINT -%token PRINTF -%token PROCEDURE -%token QUERY -%token RAND -%token RETURN -%token SCANF -%token SPLIT -%token SPRINTF -%token SRAND -%token SSCANF -%token SUB -%token SUBSTR -%token SWITCH -%token TOKENS -%token UNSET -%token WHILE - -%token F2I -%token F2S -%token I2F -%token I2S -%token S2B -%token S2F -%token S2I - -%token F2X -%token I2X -%token S2X -%token X2F -%token X2I -%token X2S -%token X2X -%token XPRINT - -%left ',' -%right '=' -%right '?' ':' -%left OR -%left AND -%left '|' -%left '^' -%left '&' -%binary EQ NE -%binary '<' '>' LE GE -%left LS RS -%left '+' '-' IN_OP -%left '*' '/' '%' -%right '!' '~' '#' UNARY -%right INC DEC -%right CAST -%left '(' - -%type statement statement_list arg_list -%type else_opt expr_opt expr -%type args variable assign -%type dcl_list dcl_item index -%type initialize switch_item constant -%type formals formal_list formal_item -%type members -%type ID LABEL NAME -%type CONSTANT ARRAY FUNCTION DECLARE -%type EXIT PRINT PRINTF QUERY -%type RAND SRAND -%type SPRINTF PROCEDURE name dcl_name -%type GSUB SUB SUBSTR -%type SPLIT TOKENS splitop -%type IF WHILE FOR ITERATER -%type BREAK CONTINUE print member -%type RETURN DYNAMIC SWITCH UNSET -%type SCANF SSCANF scan -%type FLOATING -%type INTEGER UNSIGNED array -%type static -%type STRING - -%token MAXTOKEN - -%{ - -#include "exgram.h" - -%} - -%% - -program : statement_list action_list - { - if ($1 && !(expr.program->disc->flags & EX_STRICT)) - { - if (expr.program->main.value && !(expr.program->disc->flags & EX_RETAIN)) - exfreenode(expr.program, expr.program->main.value); - if ($1->op == S2B) - { - Exnode_t* x; - - x = $1; - $1 = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - expr.program->main.lex = PROCEDURE; - expr.program->main.value = exnewnode(expr.program, PROCEDURE, 1, $1->type, NiL, $1); - } - } - ; - -action_list : /* empty */ - | action_list action - ; - -action : LABEL ':' { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("no nested function definitions"); - $1->lex = PROCEDURE; - expr.procedure = $1->value = exnewnode(expr.program, PROCEDURE, 1, $1->type, NiL, NiL); - expr.procedure->type = INTEGER; - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (expr.assigned && !streq($1->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - } - } statement_list - { - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - if ($4 && $4->op == S2B) - { - Exnode_t* x; - - x = $4; - $4 = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - $1->value->data.operand.right = excast(expr.program, $4, $1->type, NiL, 0); - } - ; - -statement_list : /* empty */ - { - $$ = 0; - } - | statement_list statement - { - if (!$1) - $$ = $2; - else if (!$2) - $$ = $1; - else if ($1->op == CONSTANT) - { - exfreenode(expr.program, $1); - $$ = $2; - } -#ifdef UNUSED - else if ($1->op == ';') - { - $$ = $1; - $1->data.operand.last = $1->data.operand.last->data.operand.right = exnewnode(expr.program, ';', 1, $2->type, $2, NiL); - } - else - { - $$ = exnewnode(expr.program, ';', 1, $1->type, $1, NiL); - $$->data.operand.last = $$->data.operand.right = exnewnode(expr.program, ';', 1, $2->type, $2, NiL); - } -#endif - else $$ = exnewnode(expr.program, ';', 1, $2->type, $1, $2); - } - ; - -statement : '{' statement_list '}' - { - $$ = $2; - } - | expr_opt ';' - { - $$ = ($1 && $1->type == STRING) ? exnewnode(expr.program, S2B, 1, INTEGER, $1, NiL) : $1; - } - | static {expr.instatic=$1;} DECLARE {expr.declare=$3->type;} dcl_list ';' - { - $$ = $5; - expr.declare = 0; - } - | IF '(' expr ')' statement else_opt - { - if (exisAssign ($3)) - exwarn ("assignment used as boolean in if statement"); - if ($3->type == STRING) - $3 = exnewnode(expr.program, S2B, 1, INTEGER, $3, NiL); - else if (!INTEGRAL($3->type)) - $3 = excast(expr.program, $3, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, $1->index, 1, INTEGER, $3, exnewnode(expr.program, ':', 1, $5 ? $5->type : 0, $5, $6)); - } - | FOR '(' variable ')' statement - { - $$ = exnewnode(expr.program, ITERATE, 0, INTEGER, NiL, NiL); - $$->data.generate.array = $3; - if (!$3->data.variable.index || $3->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - $$->data.generate.index = $3->data.variable.index->data.variable.symbol; - if ($3->op == ID && $$->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, $3->data.variable.index); - $3->data.variable.index = 0; - $$->data.generate.statement = $5; - } - | FOR '(' expr_opt ';' expr_opt ';' expr_opt ')' statement - { - if (!$5) - { - $5 = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - $5->data.constant.value.integer = 1; - } - else if ($5->type == STRING) - $5 = exnewnode(expr.program, S2B, 1, INTEGER, $5, NiL); - else if (!INTEGRAL($5->type)) - $5 = excast(expr.program, $5, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, $1->index, 1, INTEGER, $5, exnewnode(expr.program, ';', 1, 0, $7, $9)); - if ($3) - $$ = exnewnode(expr.program, ';', 1, INTEGER, $3, $$); - } - | ITERATER '(' variable ')' statement - { - $$ = exnewnode(expr.program, ITERATER, 0, INTEGER, NiL, NiL); - $$->data.generate.array = $3; - if (!$3->data.variable.index || $3->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - $$->data.generate.index = $3->data.variable.index->data.variable.symbol; - if ($3->op == ID && $$->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, $3->data.variable.index); - $3->data.variable.index = 0; - $$->data.generate.statement = $5; - } - | UNSET '(' DYNAMIC ')' - { - if ($3->local.pointer == 0) - exerror("cannot apply unset to non-array %s", $3->name); - $$ = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - $$->data.variable.symbol = $3; - $$->data.variable.index = NiL; - } - | UNSET '(' DYNAMIC ',' expr ')' - { - if ($3->local.pointer == 0) - exerror("cannot apply unset to non-array %s", $3->name); - if (($3->index_type > 0) && ($5->type != $3->index_type)) - exerror("%s indices must have type %s, not %s", - $3->name, extypename(expr.program, $3->index_type),extypename(expr.program, $5->type)); - $$ = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - $$->data.variable.symbol = $3; - $$->data.variable.index = $5; - } - | WHILE '(' expr ')' statement - { - if (exisAssign ($3)) - exwarn ("assignment used as boolean in while statement"); - if ($3->type == STRING) - $3 = exnewnode(expr.program, S2B, 1, INTEGER, $3, NiL); - else if (!INTEGRAL($3->type)) - $3 = excast(expr.program, $3, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, $1->index, 1, INTEGER, $3, exnewnode(expr.program, ';', 1, 0, NiL, $5)); - } - | SWITCH '(' expr {expr.declare=$3->type;} ')' '{' switch_list '}' - { - register Switch_t* sw = expr.swstate; - - $$ = exnewnode(expr.program, $1->index, 1, INTEGER, $3, exnewnode(expr.program, DEFAULT, 1, 0, sw->defcase, sw->firstcase)); - expr.swstate = expr.swstate->prev; - if (sw->base) - free(sw->base); - if (sw != &swstate) - free(sw); - expr.declare = 0; - } - | BREAK expr_opt ';' - { - loopop: - if (!$2) - { - $2 = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - $2->data.constant.value.integer = 1; - } - else if (!INTEGRAL($2->type)) - $2 = excast(expr.program, $2, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, $1->index, 1, INTEGER, $2, NiL); - } - | CONTINUE expr_opt ';' - { - goto loopop; - } - | RETURN expr_opt ';' - { - if ($2) - { - if (expr.procedure && !expr.procedure->type) - exerror("return in void function"); - $2 = excast(expr.program, $2, expr.procedure ? expr.procedure->type : INTEGER, NiL, 0); - } - $$ = exnewnode(expr.program, RETURN, 1, $2 ? $2->type : 0, $2, NiL); - } - ; - -switch_list : /* empty */ - { - register Switch_t* sw; - int n; - - if (expr.swstate) - { - if (!(sw = newof(0, Switch_t, 1, 0))) - { - exnospace(); - sw = &swstate; - } - sw->prev = expr.swstate; - } - else - sw = &swstate; - expr.swstate = sw; - sw->type = expr.declare; - sw->firstcase = 0; - sw->lastcase = 0; - sw->defcase = 0; - sw->def = 0; - n = 8; - if (!(sw->base = newof(0, Extype_t*, n, 0))) - { - exnospace(); - n = 0; - } - sw->cur = sw->base; - sw->last = sw->base + n; - } - | switch_list switch_item - ; - -switch_item : case_list statement_list - { - register Switch_t* sw = expr.swstate; - int n; - - $$ = exnewnode(expr.program, CASE, 1, 0, $2, NiL); - if (sw->cur > sw->base) - { - if (sw->lastcase) - sw->lastcase->data.select.next = $$; - else - sw->firstcase = $$; - sw->lastcase = $$; - n = sw->cur - sw->base; - sw->cur = sw->base; - $$->data.select.constant = (Extype_t**)exalloc(expr.program, (n + 1) * sizeof(Extype_t*)); - memcpy($$->data.select.constant, sw->base, n * sizeof(Extype_t*)); - $$->data.select.constant[n] = 0; - } - else - $$->data.select.constant = 0; - if (sw->def) - { - sw->def = 0; - if (sw->defcase) - exerror("duplicate default in switch"); - else - sw->defcase = $2; - } - } - ; - -case_list : case_item - | case_list case_item - ; - -case_item : CASE constant ':' - { - int n; - - if (expr.swstate->cur >= expr.swstate->last) - { - n = expr.swstate->cur - expr.swstate->base; - if (!(expr.swstate->base = newof(expr.swstate->base, Extype_t*, 2 * n, 0))) - { - exerror("too many case labels for switch"); - n = 0; - } - expr.swstate->cur = expr.swstate->base + n; - expr.swstate->last = expr.swstate->base + 2 * n; - } - if (expr.swstate->cur) - { - $2 = excast(expr.program, $2, expr.swstate->type, NiL, 0); - *expr.swstate->cur++ = &($2->data.constant.value); - } - } - | DEFAULT ':' - { - expr.swstate->def = 1; - } - ; - -static : /* empty */ - { - $$ = 0; - } - | STATIC - { - $$ = 1; - } - ; - -dcl_list : dcl_item - | dcl_list ',' dcl_item - { - if ($3) - $$ = $1 ? exnewnode(expr.program, ',', 1, $3->type, $1, $3) : $3; - } - ; - -dcl_item : dcl_name {checkName ($1); expr.id=$1;} array initialize - { - $$ = 0; - if (!$1->type || expr.declare) - $1->type = expr.declare; - if ($4 && $4->op == PROCEDURE) - { - $1->lex = PROCEDURE; - $1->type = $4->type; - $1->value = $4; - } - else - { - $1->lex = DYNAMIC; - $1->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - if ($3 && !$1->local.pointer) - { - Dtdisc_t* disc; - - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - if ($3 == INTEGER) { - disc->key = offsetof(Exassoc_t, key); - disc->size = sizeof(Extype_t); - disc->comparf = (Dtcompar_f)cmpKey; - } - else - disc->key = offsetof(Exassoc_t, name); - if (!($1->local.pointer = (char*)dtopen(disc, Dtoset))) - exerror("%s: cannot initialize associative array", $1->name); - $1->index_type = $3; /* -1 indicates no typechecking */ - } - if ($4) - { - if ($4->type != $1->type) - { - $4->type = $1->type; - $4->data.operand.right = excast(expr.program, $4->data.operand.right, $1->type, NiL, 0); - } - $4->data.operand.left = exnewnode(expr.program, DYNAMIC, 0, $1->type, NiL, NiL); - $4->data.operand.left->data.variable.symbol = $1; - $$ = $4; -#if UNUSED - if (!expr.program->frame && !expr.program->errors) - { - expr.assigned++; - exeval(expr.program, $$, NiL); - } -#endif - } - else if (!$3) - $1->value->data.value = exzero($1->type); - } - } - ; - -dcl_name : NAME - | DYNAMIC - | ID - | FUNCTION - ; - -name : NAME - | DYNAMIC - ; - -else_opt : /* empty */ - { - $$ = 0; - } - | ELSE statement - { - $$ = $2; - } - ; - -expr_opt : /* empty */ - { - $$ = 0; - } - | expr - ; - -expr : '(' expr ')' - { - $$ = $2; - } - | '(' DECLARE ')' expr %prec CAST - { - $$ = ($4->type == $2->type) ? $4 : excast(expr.program, $4, $2->type, NiL, 0); - } - | expr '<' expr - { - int rel; - - relational: - rel = INTEGER; - goto coerce; - binary: - rel = 0; - coerce: - if (!$1->type) - { - if (!$3->type) - $1->type = $3->type = rel ? STRING : INTEGER; - else - $1->type = $3->type; - } - else if (!$3->type) - $3->type = $1->type; - if ($1->type != $3->type) - { - if ($1->type == STRING) - $1 = excast(expr.program, $1, $3->type, $3, 0); - else if ($3->type == STRING) - $3 = excast(expr.program, $3, $1->type, $1, 0); - else if ($1->type == FLOATING) - $3 = excast(expr.program, $3, FLOATING, $1, 0); - else if ($3->type == FLOATING) - $1 = excast(expr.program, $1, FLOATING, $3, 0); - } - if (!rel) - rel = ($1->type == STRING) ? STRING : (($1->type == UNSIGNED) ? UNSIGNED : $3->type); - $$ = exnewnode(expr.program, $2, 1, rel, $1, $3); - if (!expr.program->errors && $1->op == CONSTANT && $3->op == CONSTANT) - { - $$->data.constant.value = exeval(expr.program, $$, NiL); - /* If a constant string, re-allocate from program heap. This is because the - * value was constructed from string operators, which create a value in the - * temporary heap, which is cleared when exeval is called again. - */ - if ($$->type == STRING) { - $$->data.constant.value.string = - vmstrdup(expr.program->vm, $$->data.constant.value.string); - } - $$->binary = 0; - $$->op = CONSTANT; - exfreenode(expr.program, $1); - exfreenode(expr.program, $3); - } - else if (!BUILTIN($1->type) || !BUILTIN($3->type)) { - checkBinary(expr.program, $1, $$, $3); - } - } - | expr '-' expr - { - goto binary; - } - | expr '*' expr - { - goto binary; - } - | expr '/' expr - { - goto binary; - } - | expr '%' expr - { - goto binary; - } - | expr LS expr - { - goto binary; - } - | expr RS expr - { - goto binary; - } - | expr '>' expr - { - goto relational; - } - | expr LE expr - { - goto relational; - } - | expr GE expr - { - goto relational; - } - | expr EQ expr - { - goto relational; - } - | expr NE expr - { - goto relational; - } - | expr '&' expr - { - goto binary; - } - | expr '|' expr - { - goto binary; - } - | expr '^' expr - { - goto binary; - } - | expr '+' expr - { - goto binary; - } - | expr AND expr - { - logical: - if ($1->type == STRING) - $1 = exnewnode(expr.program, S2B, 1, INTEGER, $1, NiL); - else if (!BUILTIN($1->type)) - $1 = excast(expr.program, $1, INTEGER, NiL, 0); - if ($3->type == STRING) - $3 = exnewnode(expr.program, S2B, 1, INTEGER, $3, NiL); - else if (!BUILTIN($3->type)) - $3 = excast(expr.program, $3, INTEGER, NiL, 0); - goto binary; - } - | expr OR expr - { - goto logical; - } - | expr ',' expr - { - if ($1->op == CONSTANT) - { - exfreenode(expr.program, $1); - $$ = $3; - } - else - $$ = exnewnode(expr.program, ',', 1, $3->type, $1, $3); - } - | expr '?' {expr.nolabel=1;} expr ':' {expr.nolabel=0;} expr - { - if (!$4->type) - { - if (!$7->type) - $4->type = $7->type = INTEGER; - else - $4->type = $7->type; - } - else if (!$7->type) - $7->type = $4->type; - if ($1->type == STRING) - $1 = exnewnode(expr.program, S2B, 1, INTEGER, $1, NiL); - else if (!INTEGRAL($1->type)) - $1 = excast(expr.program, $1, INTEGER, NiL, 0); - if ($4->type != $7->type) - { - if ($4->type == STRING || $7->type == STRING) - exerror("if statement string type mismatch"); - else if ($4->type == FLOATING) - $7 = excast(expr.program, $7, FLOATING, NiL, 0); - else if ($7->type == FLOATING) - $4 = excast(expr.program, $4, FLOATING, NiL, 0); - } - if ($1->op == CONSTANT) - { - if ($1->data.constant.value.integer) - { - $$ = $4; - exfreenode(expr.program, $7); - } - else - { - $$ = $7; - exfreenode(expr.program, $4); - } - exfreenode(expr.program, $1); - } - else - $$ = exnewnode(expr.program, '?', 1, $4->type, $1, exnewnode(expr.program, ':', 1, $4->type, $4, $7)); - } - | '!' expr - { - iunary: - if ($2->type == STRING) - $2 = exnewnode(expr.program, S2B, 1, INTEGER, $2, NiL); - else if (!INTEGRAL($2->type)) - $2 = excast(expr.program, $2, INTEGER, NiL, 0); - unary: - $$ = exnewnode(expr.program, $1, 1, $2->type == UNSIGNED ? INTEGER : $2->type, $2, NiL); - if ($2->op == CONSTANT) - { - $$->data.constant.value = exeval(expr.program, $$, NiL); - $$->binary = 0; - $$->op = CONSTANT; - exfreenode(expr.program, $2); - } - else if (!BUILTIN($2->type)) { - checkBinary(expr.program, $2, $$, 0); - } - } - | '#' DYNAMIC - { - if ($2->local.pointer == 0) - exerror("cannot apply '#' operator to non-array %s", $2->name); - $$ = exnewnode(expr.program, '#', 0, INTEGER, NiL, NiL); - $$->data.variable.symbol = $2; - } - | '~' expr - { - goto iunary; - } - | '-' expr %prec UNARY - { - goto unary; - } - | '+' expr %prec UNARY - { - $$ = $2; - } - | '&' variable %prec UNARY - { - $$ = exnewnode(expr.program, ADDRESS, 0, T($2->type), $2, NiL); - } - | ARRAY '[' args ']' - { - $$ = exnewnode(expr.program, ARRAY, 1, T($1->type), call(0, $1, $3), $3); - } - | FUNCTION '(' args ')' - { - $$ = exnewnode(expr.program, FUNCTION, 1, T($1->type), call(0, $1, $3), $3); -#ifdef UNUSED - if (!expr.program->disc->getf) - exerror("%s: function references not supported", $$->data.operand.left->data.variable.symbol->name); - else if (expr.program->disc->reff) - (*expr.program->disc->reff)(expr.program, $$->data.operand.left, $$->data.operand.left->data.variable.symbol, 0, NiL, EX_CALL, expr.program->disc); -#endif - } - | GSUB '(' args ')' - { - $$ = exnewsub (expr.program, $3, GSUB); - } - | SUB '(' args ')' - { - $$ = exnewsub (expr.program, $3, SUB); - } - | SUBSTR '(' args ')' - { - $$ = exnewsubstr (expr.program, $3); - } - | splitop '(' expr ',' DYNAMIC ')' - { - $$ = exnewsplit (expr.program, $1->index, $5, $3, NiL); - } - | splitop '(' expr ',' DYNAMIC ',' expr ')' - { - $$ = exnewsplit (expr.program, $1->index, $5, $3, $7); - } - | EXIT '(' expr ')' - { - if (!INTEGRAL($3->type)) - $3 = excast(expr.program, $3, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, EXIT, 1, INTEGER, $3, NiL); - } - | RAND '(' ')' - { - $$ = exnewnode(expr.program, RAND, 0, FLOATING, NiL, NiL); - } - | SRAND '(' ')' - { - $$ = exnewnode(expr.program, SRAND, 0, INTEGER, NiL, NiL); - } - | SRAND '(' expr ')' - { - if (!INTEGRAL($3->type)) - $3 = excast(expr.program, $3, INTEGER, NiL, 0); - $$ = exnewnode(expr.program, SRAND, 1, INTEGER, $3, NiL); - } - | PROCEDURE '(' args ')' - { - $$ = exnewnode(expr.program, CALL, 1, $1->type, NiL, $3); - $$->data.call.procedure = $1; - } - | PRINT '(' args ')' - { - $$ = exprint(expr.program, $1, $3); - } - | print '(' args ')' - { - $$ = exnewnode(expr.program, $1->index, 0, $1->type, NiL, NiL); - if ($3 && $3->data.operand.left->type == INTEGER) - { - $$->data.print.descriptor = $3->data.operand.left; - $3 = $3->data.operand.right; - } - else - switch ($1->index) - { - case QUERY: - $$->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - $$->data.print.descriptor->data.constant.value.integer = 2; - break; - case PRINTF: - $$->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - $$->data.print.descriptor->data.constant.value.integer = 1; - break; - case SPRINTF: - $$->data.print.descriptor = 0; - break; - } - $$->data.print.args = preprint($3); - } - | scan '(' args ')' - { - register Exnode_t* x; - - $$ = exnewnode(expr.program, $1->index, 0, $1->type, NiL, NiL); - if ($3 && $3->data.operand.left->type == INTEGER) - { - $$->data.scan.descriptor = $3->data.operand.left; - $3 = $3->data.operand.right; - } - else - switch ($1->index) - { - case SCANF: - $$->data.scan.descriptor = 0; - break; - case SSCANF: - if ($3 && $3->data.operand.left->type == STRING) - { - $$->data.scan.descriptor = $3->data.operand.left; - $3 = $3->data.operand.right; - } - else - exerror("%s: string argument expected", $1->name); - break; - } - if (!$3 || !$3->data.operand.left || $3->data.operand.left->type != STRING) - exerror("%s: format argument expected", $1->name); - $$->data.scan.format = $3->data.operand.left; - for (x = $$->data.scan.args = $3->data.operand.right; x; x = x->data.operand.right) - { - if (x->data.operand.left->op != ADDRESS) - exerror("%s: address argument expected", $1->name); - x->data.operand.left = x->data.operand.left->data.operand.left; - } - } - | variable assign - { - if ($2) - { - if ($1->op == ID && !expr.program->disc->setf) - exerror("%s: variable assignment not supported", $1->data.variable.symbol->name); - else - { - if (!$1->type) - $1->type = $2->type; -#if 0 - else if ($2->type != $1->type && $1->type >= 0200) -#else - else if ($2->type != $1->type) -#endif - { - $2->type = $1->type; - $2->data.operand.right = excast(expr.program, $2->data.operand.right, $1->type, NiL, 0); - } - $2->data.operand.left = $1; - $$ = $2; - } - } - } - | INC variable - { - pre: - if ($2->type == STRING) - exerror("++ and -- invalid for string variables"); - $$ = exnewnode(expr.program, $1, 0, $2->type, $2, NiL); - $$->subop = PRE; - } - | variable INC - { - pos: - if ($1->type == STRING) - exerror("++ and -- invalid for string variables"); - $$ = exnewnode(expr.program, $2, 0, $1->type, $1, NiL); - $$->subop = POS; - } - | expr IN_OP DYNAMIC - { - if ($3->local.pointer == 0) - exerror("cannot apply IN to non-array %s", $3->name); - if (($3->index_type > 0) && ($1->type != $3->index_type)) - exerror("%s indices must have type %s, not %s", - $3->name, extypename(expr.program, $3->index_type),extypename(expr.program, $1->type)); - $$ = exnewnode(expr.program, IN_OP, 0, INTEGER, NiL, NiL); - $$->data.variable.symbol = $3; - $$->data.variable.index = $1; - } - | DEC variable - { - goto pre; - } - | variable DEC - { - goto pos; - } - | constant - ; - -splitop : SPLIT - | TOKENS - ; -constant : CONSTANT - { - $$ = exnewnode(expr.program, CONSTANT, 0, $1->type, NiL, NiL); - if (!expr.program->disc->reff) - exerror("%s: identifier references not supported", $1->name); - else - $$->data.constant.value = (*expr.program->disc->reff)(expr.program, $$, $1, NiL, NiL, EX_SCALAR, expr.program->disc); - } - | FLOATING - { - $$ = exnewnode(expr.program, CONSTANT, 0, FLOATING, NiL, NiL); - $$->data.constant.value.floating = $1; - } - | INTEGER - { - $$ = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - $$->data.constant.value.integer = $1; - } - | STRING - { - $$ = exnewnode(expr.program, CONSTANT, 0, STRING, NiL, NiL); - $$->data.constant.value.string = $1; - } - | UNSIGNED - { - $$ = exnewnode(expr.program, CONSTANT, 0, UNSIGNED, NiL, NiL); - $$->data.constant.value.integer = $1; - } - ; - -print : PRINTF - | QUERY - | SPRINTF - ; - -scan : SCANF - | SSCANF - ; - -variable : ID members - { - $$ = makeVar(expr.program, $1, 0, 0, $2); - } - | DYNAMIC index members - { - Exnode_t* n; - - n = exnewnode(expr.program, DYNAMIC, 0, $1->type, NiL, NiL); - n->data.variable.symbol = $1; - n->data.variable.reference = 0; - if (((n->data.variable.index = $2) == 0) != ($1->local.pointer == 0)) - exerror("%s: is%s an array", $1->name, $1->local.pointer ? "" : " not"); - if ($1->local.pointer && ($1->index_type > 0)) { - if ($2->type != $1->index_type) - exerror("%s: indices must have type %s, not %s", - $1->name, extypename(expr.program, $1->index_type),extypename(expr.program, $2->type)); - } - if ($3) { - n->data.variable.dyna =exnewnode(expr.program, 0, 0, 0, NiL, NiL); - $$ = makeVar(expr.program, $1, $2, n, $3); - } - else $$ = n; - } - | NAME - { - $$ = exnewnode(expr.program, ID, 0, STRING, NiL, NiL); - $$->data.variable.symbol = $1; - $$->data.variable.reference = 0; - $$->data.variable.index = 0; - $$->data.variable.dyna = 0; - if (!(expr.program->disc->flags & EX_UNDECLARED)) - exerror("unknown identifier"); - } - ; - -array : /* empty */ - { - $$ = 0; - } - | '[' ']' - { - $$ = -1; - } - | '[' DECLARE ']' - { - /* If DECLARE is VOID, its type is 0, so this acts like - * the empty case. - */ - if (INTEGRAL($2->type)) - $$ = INTEGER; - else - $$ = $2->type; - - } - ; - -index : /* empty */ - { - $$ = 0; - } - | '[' expr ']' - { - $$ = $2; - } - ; - -args : /* empty */ - { - $$ = 0; - } - | arg_list - { - $$ = $1->data.operand.left; - $1->data.operand.left = $1->data.operand.right = 0; - exfreenode(expr.program, $1); - } - ; - -arg_list : expr %prec ',' - { - $$ = exnewnode(expr.program, ',', 1, 0, exnewnode(expr.program, ',', 1, $1->type, $1, NiL), NiL); - $$->data.operand.right = $$->data.operand.left; - } - | arg_list ',' expr - { - $1->data.operand.right = $1->data.operand.right->data.operand.right = exnewnode(expr.program, ',', 1, $1->type, $3, NiL); - } - ; - -formals : /* empty */ - { - $$ = 0; - } - | DECLARE - { - $$ = 0; - if ($1->type) - exerror("(void) expected"); - } - | formal_list - ; - -formal_list : formal_item - { - $$ = exnewnode(expr.program, ',', 1, $1->type, $1, NiL); - } - | formal_list ',' formal_item - { - register Exnode_t* x; - register Exnode_t* y; - - $$ = $1; - for (x = $1; (y = x->data.operand.right); x = y); - x->data.operand.right = exnewnode(expr.program, ',', 1, $3->type, $3, NiL); - } - ; - -formal_item : DECLARE {expr.declare=$1->type;} name - { - $$ = exnewnode(expr.program, ID, 0, $1->type, NiL, NiL); - $$->data.variable.symbol = $3; - $3->lex = DYNAMIC; - $3->type = $1->type; - $3->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - expr.procedure->data.procedure.arity++; - expr.declare = 0; - } - ; - -members : /* empty */ - { - $$ = expr.refs = expr.lastref = 0; - } - | member - { - Exref_t* r; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = $1; - expr.refs = r; - expr.lastref = r; - r->next = 0; - r->index = 0; - $$ = expr.refs; - } - | '.' ID member - { - Exref_t* r; - Exref_t* l; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = $3; - r->index = 0; - r->next = 0; - l = ALLOCATE(expr.program, Exref_t); - l->symbol = $2; - l->index = 0; - l->next = r; - expr.refs = l; - expr.lastref = r; - $$ = expr.refs; - } - ; - -member : '.' ID - { - $$ = $2; - } - | '.' NAME - { - $$ = $2; - } - ; -assign : /* empty */ - { - $$ = 0; - } - | '=' expr - { - $$ = exnewnode(expr.program, '=', 1, $2->type, NiL, $2); - $$->subop = $1; - } - ; - -initialize : assign - | '(' { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("%s: nested function definitions not supported", expr.id->name); - expr.procedure = exnewnode(expr.program, PROCEDURE, 1, expr.declare, NiL, NiL); - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (!streq(expr.id->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - expr.program->formals = 1; - } - expr.declare = 0; - } formals { - expr.id->lex = PROCEDURE; - expr.id->type = expr.procedure->type; - expr.program->formals = 0; - expr.declare = 0; - } ')' '{' statement_list '}' - { - $$ = expr.procedure; - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - $$->data.operand.left = $3; - $$->data.operand.right = excast(expr.program, $7, $$->type, NiL, 0); - - /* - * NOTE: procedure definition was slipped into the - * declaration initializer statement production, - * therefore requiring the statement terminator - */ - - exunlex(expr.program, ';'); - } - ; - -%% - -#include "exgram.h" diff --git a/internal/ccall/expr/expr.h b/internal/ccall/expr/expr.h deleted file mode 100644 index 6ed4316..0000000 --- a/internal/ccall/expr/expr.h +++ /dev/null @@ -1,339 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Glenn Fowler - * AT&T Research - * - * expression library definitions - */ - -#ifndef _EXPR_H -#define _EXPR_H - -#include -#include - -#undef RS /* hp.pa grabs this!! */ - -#if _BLD_expr && defined(__EXPORT__) -#define extern __EXPORT__ -#endif -#if !_BLD_expr && defined(__IMPORT__) -#define extern extern __IMPORT__ -#endif - -/* - * bison -pPREFIX misses YYSTYPE - */ - -#if defined(YYSTYPE) || defined(YYBISON) -#define EXSTYPE YYSTYPE -#else -#include -#if defined(YYSTYPE) || defined(yystype) -#define EXSTYPE YYSTYPE -#endif -#endif - -#include "exparse.h" - -#undef extern - -#include -#include - -#define EX_VERSION 20000101L - -/* - * flags - */ - -#define EX_CHARSTRING (1<<0) /* '...' same as "..." */ -#define EX_CONSTANT (1<<1) /* compile to constant expr */ -#define EX_FATAL (1<<2) /* errors are fatal */ -#define EX_INTERACTIVE (1<<3) /* interactive input */ -#define EX_PURE (1<<4) /* no default symbols/keywords */ -#define EX_QUALIFY (1<<5) /* '.' refs qualified in id tab */ -#define EX_RETAIN (1<<6) /* retain expressions on redef */ -#define EX_SIZED (1<<7) /* strings are sized buffers */ -#define EX_STRICT (1<<8) /* don't override null label */ -#define EX_UNDECLARED (1<<9) /* allow undeclared identifiers */ - -#define EX_ARRAY (-3) /* getval() array elt */ -#define EX_CALL (-2) /* getval() function call elt */ -#define EX_SCALAR (-1) /* getval() scalar elt */ - -#define EX_NAMELEN 32 /* default Exid_t.name length */ - -#define EX_INTARRAY 1 /* integer-index array */ - -/* previously known as EXID, but EXID is also defined by bison in y.tab.h */ -#define EX_ID(n,l,i,t,f) {{0},(l),(i),(t),0,(f),0,{0},0,n} - -#define DELETE_T MINTOKEN /* exexpr() delete `type' */ - -#define INTEGRAL(t) ((t)>=INTEGER&&(t)<=CHARACTER) -#define BUILTIN(t) ((t) > MINTOKEN) - -/* function type mechanism - * types are encoded in TBITS - * Thus, maximum # of parameters, including return type, - * is sizeof(Exid_t.type)/TBITS. Also see T in exgram.h - */ - -/* - * arg 0 is the return value type - */ - -#define F 01 /* FLOATING */ -#define I 02 /* INTEGER */ -#define S 03 /* STRING */ - -#define TBITS 4 -#define TMASK ((1<>=TBITS) /* shift for next arg */ - -#define exalloc(p,n) exnewof(p,0,char,n,0) -#define exnewof(p,o,t,n,x) vmnewof((p)->vm,o,t,n,x) -#define exfree(p,x) vmfree((p)->vm,x) -#define exstrdup(p,s) vmstrdup((p)->vm,s) - -#if LONG_MAX > INT_MAX -typedef int Exshort_t; -#else -typedef short Exshort_t; -#endif - -typedef EXSTYPE Extype_t; - -union Exdata_u; typedef union Exdata_u Exdata_t; -struct Exdisc_s; typedef struct Exdisc_s Exdisc_t; -struct Exnode_s; typedef struct Exnode_s Exnode_t; -struct Expr_s; typedef struct Expr_s Expr_t; -struct Exref_s; typedef struct Exref_s Exref_t; - -typedef int (*Exerror_f) (Expr_t *, Exdisc_t *, int, const char *, ...); -typedef void (*Exexit_f) (Expr_t *, Exdisc_t *, int); - -typedef struct Exlocal_s /* user defined member type */ -{ - Sflong_t number; - char* pointer; -} Exlocal_t; - -typedef struct Exid_s /* id symbol table info */ -{ - Dtlink_t link; /* symbol table link */ - long lex; /* lex class */ - long index; /* user defined index */ - long type; /* symbol and arg types */ - long index_type; /* index type for arrays */ - long flags; /* user defined flags */ - Exnode_t* value; /* value */ - Exlocal_t local; /* user defined local stuff */ - long isstatic; /* static */ - char name[EX_NAMELEN];/* symbol name */ -} Exid_t; - -struct Exref_s /* . reference list */ -{ - Exref_t* next; /* next in list */ - Exid_t* symbol; /* reference id symbol */ - Exnode_t* index; /* optional reference index */ -}; - -typedef struct Exbuf_s /* sized buffer */ -{ - uint64_t size; /* buffer size */ - char* data; /* buffer data */ -} Exbuf_t; - -union Exdata_u -{ - - struct - { - Extype_t value; /* constant value */ - Exid_t* reference; /* conversion reference symbol */ - } constant; /* variable reference */ - - struct - { - Exnode_t* left; /* left operand */ - Exnode_t* right; /* right operand */ - Exnode_t* last; /* for cons */ - } operand; /* operands */ - - struct - { - Exnode_t* statement; /* case label statement(s) */ - Exnode_t* next; /* next case item */ - Extype_t** constant; /* case label constant array */ - } select; /* case item */ - - struct - { - Exid_t* symbol; /* id symbol table entry */ - Exref_t* reference; /* . reference list */ - Exnode_t* index; /* array index expression */ - Exnode_t* dyna; /* dynamic expression */ - } variable; /* variable reference */ - -#ifdef _EX_DATA_PRIVATE_ - _EX_DATA_PRIVATE_ -#endif - -}; - -struct Exnode_s /* expression tree node */ -{ - Exshort_t type; /* value type */ - Exshort_t op; /* operator */ - Exshort_t binary; /* data.operand.{left,right} ok */ - Exshort_t pad_1; /* padding to help cc */ - Exlocal_t local; /* user defined local stuff */ - union - { - double (*floating)(char**); /* FLOATING return value */ - Sflong_t(*integer)(char**); /* INTEGER|UNSIGNED return value*/ - char* (*string)(char**); /* STRING return value */ - } compiled; /* compiled function pointer */ - Exdata_t data; /* node data */ - -#ifdef _EX_NODE_PRIVATE_ - _EX_NODE_PRIVATE_ -#endif - -}; - -struct Exdisc_s /* discipline */ -{ - uint64_t version; /* EX_VERSION */ - uint64_t flags; /* EX_* flags */ - Exid_t* symbols; /* static symbols */ - char** data; /* compiled function arg data */ - char* lib; /* pathfind() lib */ - char* type; /* pathfind() type */ - int (*castf)(Expr_t*, Exnode_t*, const char*, int, Exid_t*, int, Exdisc_t*); - /* unknown cast function */ - int (*convertf)(Expr_t*, Exnode_t*, int, Exid_t*, int, Exdisc_t*); - /* type conversion function */ - int (*binaryf) (Expr_t *, Exnode_t *, Exnode_t *, Exnode_t *, int, Exdisc_t *); - /* binary operator function */ - char* (*typename) (Expr_t *, int); - /* application type names */ - int (*stringof) (Expr_t *, Exnode_t *, int, Exdisc_t *); - /* value to string conversion */ - Extype_t (*keyf) (Expr_t *, Extype_t, int, Exdisc_t *); - /* dictionary key for external type objects */ - Exerror_f errorf; /* error function */ - Extype_t (*getf)(Expr_t*, Exnode_t*, Exid_t*, Exref_t*, void*, int, Exdisc_t*); - /* get value function */ - Extype_t (*reff)(Expr_t*, Exnode_t*, Exid_t*, Exref_t*, char*, int, Exdisc_t*); - /* reference value function */ - int (*setf)(Expr_t*, Exnode_t*, Exid_t*, Exref_t*, void*, int, Extype_t, Exdisc_t*); - /* set value function */ - int (*matchf)(Expr_t*, Exnode_t*, const char*, Exnode_t*, const char*, void*, Exdisc_t*); - /* exit function */ - Exexit_f exitf; - int* types; - void* user; -}; - -struct Expr_s /* ex program state */ -{ - const char* id; /* library id */ - Dt_t* symbols; /* symbol table */ - const char* more; /* more after %% (sp or != 0) */ - Sfio_t* file[10]; /* io streams */ - Vmalloc_t* vm; /* program store */ - -#ifdef _EX_PROG_PRIVATE_ - _EX_PROG_PRIVATE_ -#endif - -}; - -struct Excc_s; typedef struct Excc_s Excc_t; -struct Exccdisc_s; typedef struct Exccdisc_s Exccdisc_t; - -struct Exccdisc_s /* excc() discipline */ -{ - Sfio_t* text; /* text output stream */ - char* id; /* symbol prefix */ - uint64_t flags; /* EXCC_* flags */ - int (*ccf)(Excc_t*, Exnode_t*, Exid_t*, Exref_t*, Exnode_t*, Exccdisc_t*); - /* program generator function */ -}; - -struct Excc_s /* excc() state */ -{ - Expr_t* expr; /* exopen() state */ - Exdisc_t* disc; /* exopen() discipline */ - -#ifdef _EX_CC_PRIVATE_ - _EX_CC_PRIVATE_ -#endif - -}; - -#if _BLD_expr && defined(__EXPORT__) -#define extern __EXPORT__ -#endif - -extern Exnode_t* excast(Expr_t*, Exnode_t*, int, Exnode_t*, int); -extern Exnode_t* exnoncast(Exnode_t *); -extern int excc(Excc_t*, const char*, Exid_t*, int); -extern int exccclose(Excc_t*); -extern Excc_t* exccopen(Expr_t*, Exccdisc_t*); -extern void exclose(Expr_t*, int); -extern int excomp(Expr_t*, const char*, int, const char*, Sfio_t*); -extern char* excontext(Expr_t*, char*, int); -extern int exdump(Expr_t*, Exnode_t*, Sfio_t*); -extern void exerror(const char*, ...); -extern void exwarn(const char *, ...); -extern Extype_t exeval(Expr_t*, Exnode_t*, void*); -extern Exnode_t* exexpr(Expr_t*, const char*, Exid_t*, int); -extern void exfreenode(Expr_t*, Exnode_t*); -extern Exnode_t* exnewnode(Expr_t*, int, int, int, Exnode_t*, Exnode_t*); -extern char* exnospace(void); -extern Expr_t* exopen(Exdisc_t*); -extern int expop(Expr_t*); -extern int expush(Expr_t*, const char*, int, const char*, Sfio_t*); -extern int exrewind(Expr_t*); -extern char* exstash(Sfio_t*, Vmalloc_t*); -extern void exstatement(Expr_t*); -extern int extoken_fn(Expr_t*); -extern char* exstring(Expr_t *, char *); -extern void* exstralloc(Expr_t *, void *, size_t); -extern int exstrfree(Expr_t *, void *); -extern char* extype(int); -extern Extype_t exzero(int); -extern char* exopname(int); -extern void exinit(void); -extern char* extypename(Expr_t * p, int); -extern int exisAssign(Exnode_t *); - -#undef extern - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/expr/exrewind.c b/internal/ccall/expr/exrewind.c deleted file mode 100644 index 326d4c7..0000000 --- a/internal/ccall/expr/exrewind.c +++ /dev/null @@ -1,59 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include "exlib.h" -#include - -int -exrewind(Expr_t* ex) -{ - register int n; - - if (ex->linewrap) - { - exerror("too much pushback"); - return -1; - } - if (!ex->input->pushback && !(ex->input->pushback = oldof(0, char, sizeof(ex->line), 3))) - { - exnospace(); - return -1; - } - if ((n = ex->linep - ex->line)) - memcpy(ex->input->pushback, ex->line, n); - if (ex->input->peek) - { - ex->input->pushback[n++] = ex->input->peek; - ex->input->peek = 0; - } - ex->input->pushback[n++] = ' '; - ex->input->pushback[n] = 0; - ex->input->pp = ex->input->pushback; - ex->input->nesting = ex->nesting; - setcontext(ex); - return 0; -} - -void -exstatement(Expr_t* ex) -{ - ex->nesting = ex->input->nesting; - setcontext(ex); -} diff --git a/internal/ccall/expr/exstash.c b/internal/ccall/expr/exstash.c deleted file mode 100644 index 8c4f2f4..0000000 --- a/internal/ccall/expr/exstash.c +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library - */ - -#include - -/* - * 0 terminate string and optionally vmstrdup() return value - */ - -char* -exstash(Sfio_t* sp, Vmalloc_t* vp) -{ - char* s; - - return ((s = sfstruse(sp)) && (!vp || (s = vmstrdup(vp, s)))) ? s : exnospace(); -} diff --git a/internal/ccall/expr/extoken.c b/internal/ccall/expr/extoken.c deleted file mode 100644 index b632fbf..0000000 --- a/internal/ccall/expr/extoken.c +++ /dev/null @@ -1,891 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=4: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library default lexical analyzer - */ - -#include "config.h" - -#include "exlib.h" -#include - -#if !defined(TRACE_lex) && _BLD_DEBUG -#define TRACE_lex -10 -#endif - -#if TRACE_lex - -/* - * trace c for op - */ - -static void -trace(Expr_t* ex, int lev, char* op, int c) -{ - char* s = 0; - char* t; - char buf[16]; - void* x = 0; - - t = ""; - switch (c) - { - case 0: - s = " EOF"; - break; - case '=': - s = t = buf; - *t++ = ' '; - if (!lev && exlval.op != c) - *t++ = exlval.op; - *t++ = c; - *t = 0; - break; - case AND: - s = " AND "; - t = "&&"; - break; - case DEC: - s = " DEC "; - t = "--"; - break; - case DECLARE: - s = " DECLARE "; - t = exlval.id->name; - break; - case DYNAMIC: - s = " DYNAMIC "; - t = exlval.id->name; - x = (void *) (exlval.id); - break; - case EQ: - s = " EQ "; - t = "=="; - break; - case FLOATING: - s = " FLOATING "; - sfsprintf(t = buf, sizeof(buf), "%f", exlval.floating); - break; - case GE: - s = " GE "; - t = ">="; - break; - case CONSTANT: - s = " CONSTANT "; - t = exlval.id->name; - break; - case ID: - s = " ID "; - t = exlval.id->name; - break; - case INC: - s = "INC "; - t = "++"; - break; - case INTEGER: - s = " INTEGER "; - sfsprintf(t = buf, sizeof(buf), "%I*d", sizeof(exlval.integer), exlval.integer); - break; - case LABEL: - s = " LABEL "; - t = exlval.id->name; - break; - case LE: - s = " LE "; - t = "<="; - break; - case LS: - s = " LS "; - t = "<<"; - break; - case NAME: - s = " NAME "; - t = exlval.id->name; - x = (void *) (exlval.id); - break; - case NE: - s = " NE "; - t = "!="; - break; - case OR: - s = " OR "; - t = "||"; - break; - case RS: - s = " RS "; - t = ">>"; - break; - case STRING: - s = " STRING "; - t = fmtesc(exlval.string); - break; - case UNSIGNED: - s = " UNSIGNED "; - sfsprintf(t = buf, sizeof(buf), "%I*u", sizeof(exlval.integer), exlval.integer); - break; - case BREAK: - s = " break"; - break; - case CASE: - s = " case"; - break; - case CONTINUE: - s = " continue"; - break; - case DEFAULT: - s = " default"; - break; - case ELSE: - s = " else"; - break; - case EXIT: - s = " exit"; - break; - case FOR: - s = " for"; - break; - case ITERATER: - s = " forf"; - break; - case GSUB: - s = " gsub"; - break; - case IF: - s = " if"; - break; - case IN_OP: - s = " in"; - break; - case PRAGMA: - s = " pragma"; - break; - case PRINT: - s = " print"; - break; - case PRINTF: - s = " printf"; - break; - case QUERY: - s = " query"; - break; - case RAND: - s = " rand"; - break; - case RETURN: - s = " return"; - break; - case SPLIT: - s = " split"; - break; - case SPRINTF: - s = " sprintf"; - break; - case SRAND: - s = " srand"; - break; - case SUB: - s = " sub"; - break; - case SUBSTR: - s = " substr"; - break; - case SWITCH: - s = " switch"; - break; - case TOKENS: - s = " tokens"; - break; - case UNSET: - s = " unset"; - break; - case WHILE: - s = " while"; - break; - default: - if (c < 0177) - { - s = buf; - *s++ = c; - *s = 0; - t = fmtesc(buf); - s = " "; - } - break; - } - if (x) - error(TRACE_lex + lev, "%s: [%d] %04d%s%s (%x)", op, ex->input->nesting, c, s, t, x); - - else - error(TRACE_lex + lev, "%s: [%d] %04d%s%s", op, ex->input->nesting, c, s, t); -} - -/* - * trace wrapper for extoken() - */ - -extern int _extoken_fn_(Expr_t*); - -int -extoken_fn(Expr_t* ex) -{ - int c; - -#define extoken_fn _extoken_fn_ - - c = extoken_fn(ex); - trace(ex, 0, "exlex", c); - return c; -} - -#else - -#define trace(p,a,b,c) - -#endif - -/* - * get the next expression char - */ - -static int -lex(register Expr_t* ex) -{ - register int c; - - for (;;) - { - if ((c = ex->input->peek)) - ex->input->peek = 0; - else if (ex->input->pp) - { - if (!(c = *ex->input->pp++)) - { - ex->input->pp = 0; - continue; - } - } - else if (ex->input->sp) - { - if (!(c = *ex->input->sp++)) - { - if (!expop(ex)) - continue; - else trace(ex, -1, "expop sp FAIL", 0); - ex->input->sp--; - } - } - else if (ex->input->fp) - { - if ((c = sfgetc(ex->input->fp)) == EOF) - { - if (!expop(ex)) - continue; - else trace(ex, -1, "expop fp FAIL", 0); - c = 0; - } - else if ((ex->disc->flags & EX_INTERACTIVE) && c == '\n' && ex->input->next && !ex->input->next->next && ex->input->nesting <= 0) - { - error_info.line++; - expop(ex); - trace(ex, -1, "expop sp FORCE", 0); - c = 0; - } - } - else c = 0; - if (c == '\n') - setcontext(ex); - else if (c) - putcontext(ex, c); - trace(ex, -3, "ex--lex", c); - return c; - } -} - -/* - * get the next expression token - */ - -int -extoken_fn(register Expr_t* ex) -{ - register int c; - register char* s; - register int q; - int b; - char* e; - Dt_t* v; - - if (ex->eof || ex->errors) - return 0; - again: - for (;;) - switch (c = lex(ex)) - { - case 0: - goto eof; - case '/': - switch (q = lex(ex)) - { - case '*': - for (;;) switch (lex(ex)) - { - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - continue; - case '*': - switch (lex(ex)) - { - case 0: - goto eof; - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - break; - case '*': - exunlex(ex, '*'); - break; - case '/': - goto again; - } - break; - } - break; - case '/': - while ((c = lex(ex)) != '\n') - if (!c) - goto eof; - break; - default: - goto opeq; - } - /*FALLTHROUGH*/ - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - /*FALLTHROUGH*/ - case ' ': - case '\t': - case '\r': - break; - case '(': - case '{': - case '[': - ex->input->nesting++; - return exlval.op = c; - case ')': - case '}': - case ']': - ex->input->nesting--; - return exlval.op = c; - case '+': - case '-': - if ((q = lex(ex)) == c) - return exlval.op = c == '+' ? INC : DEC; - goto opeq; - case '*': - case '%': - case '^': - q = lex(ex); - opeq: - exlval.op = c; - if (q == '=') - c = '='; - else if (q == '%' && c == '%') - { - if (ex->input->fp) - ex->more = (const char*)ex->input->fp; - else ex->more = ex->input->sp; - goto eof; - } - else exunlex(ex, q); - return c; - case '&': - case '|': - if ((q = lex(ex)) == '=') - { - exlval.op = c; - return '='; - } - if (q == c) - c = c == '&' ? AND : OR; - else exunlex(ex, q); - return exlval.op = c; - case '<': - case '>': - if ((q = lex(ex)) == c) - { - exlval.op = c = c == '<' ? LS : RS; - if ((q = lex(ex)) == '=') - c = '='; - else exunlex(ex, q); - return c; - } - goto relational; - case '=': - case '!': - q = lex(ex); - relational: - if (q == '=') switch (c) - { - case '<': - c = LE; - break; - case '>': - c = GE; - break; - case '=': - c = EQ; - break; - case '!': - c = NE; - break; - } - else exunlex(ex, q); - return exlval.op = c; - case '#': - if (!ex->linewrap && !(ex->disc->flags & EX_PURE)) - { - s = ex->linep - 1; - while (s > ex->line && isspace(*(s - 1))) - s--; - if (s == ex->line) - { - switch (extoken_fn(ex)) - { - case DYNAMIC: - case ID: - case NAME: - s = exlval.id->name; - break; - default: - s = ""; - break; - } - if (streq(s, "include")) - { - if (extoken_fn(ex) != STRING) - exerror("#%s: string argument expected", s); - else if (!expush(ex, exlval.string, 1, NiL, NiL)) - { - setcontext(ex); - goto again; - } - } - else exerror("unknown directive"); - } - } - return exlval.op = c; - case '\'': - case '"': - q = c; - sfstrseek(ex->tmp, 0, SEEK_SET); - ex->input->nesting++; - while ((c = lex(ex)) != q) - { - if (c == '\\') - { - sfputc(ex->tmp, c); - c = lex(ex); - } - if (!c) - { - exerror("unterminated %c string", q); - goto eof; - } - if (c == '\n') - { - if (error_info.line) - error_info.line++; - else error_info.line = 2; - } - sfputc(ex->tmp, c); - } - ex->input->nesting--; - s = exstash(ex->tmp, NiL); - if (q == '"' || (ex->disc->flags & EX_CHARSTRING)) - { - if (!(exlval.string = vmstrdup(ex->vm, s))) - goto eof; - stresc(exlval.string); - return STRING; - } - exlval.integer = chrtoi(s); - return INTEGER; - case '.': - if (isdigit(c = lex(ex))) - { - sfstrseek(ex->tmp, 0, SEEK_SET); - sfputc(ex->tmp, '0'); - sfputc(ex->tmp, '.'); - goto floating; - } - exunlex(ex, c); - return exlval.op = '.'; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - sfstrseek(ex->tmp, 0, SEEK_SET); - sfputc(ex->tmp, c); - q = INTEGER; - b = 0; - if ((c = lex(ex)) == 'x' || c == 'X') - { - b = 16; - sfputc(ex->tmp, c); - for (;;) - { - switch (c = lex(ex)) - { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - sfputc(ex->tmp, c); - continue; - } - break; - } - } - else - { - while (isdigit(c)) - { - sfputc(ex->tmp, c); - c = lex(ex); - } - if (c == '#') - { - sfputc(ex->tmp, c); - /* s = exstash(ex->tmp, NiL); */ - /* b = strtol(s, NiL, 10); */ - do - { - sfputc(ex->tmp, c); - } while (isalnum(c = lex(ex))); - } - else - { - if (c == '.') - { - floating: - q = FLOATING; - sfputc(ex->tmp, c); - while (isdigit(c = lex(ex))) - sfputc(ex->tmp, c); - } - if (c == 'e' || c == 'E') - { - q = FLOATING; - sfputc(ex->tmp, c); - if ((c = lex(ex)) == '-' || c == '+') - { - sfputc(ex->tmp, c); - c = lex(ex); - } - while (isdigit(c)) - { - sfputc(ex->tmp, c); - c = lex(ex); - } - } - } - } - s = exstash(ex->tmp, NiL); - if (q == FLOATING) - exlval.floating = strtod(s, &e); - else - { - if (c == 'u' || c == 'U') - { - q = UNSIGNED; - c = lex(ex); - exlval.integer = strtoull(s, &e, b); - } - else - exlval.integer = strtoll(s, &e, b); - if (*e) - { - *--e = 1; - exlval.integer *= strton(e, &e, NiL, 0); - } - } - exunlex(ex, c); - if (*e || isalpha(c) || c == '_' || c == '$') - { - exerror("%s: invalid numeric constant", s); - goto eof; - } - return q; - default: - if (isalpha(c) || c == '_' || c == '$') - { - sfstrseek(ex->tmp, 0, SEEK_SET); - sfputc(ex->tmp, c); - while (isalnum(c = lex(ex)) || c == '_' || c == '$') - sfputc(ex->tmp, c); - exunlex(ex, c); - s = exstash(ex->tmp, NiL); - /* v = expr.declare ? dtview(ex->symbols, NiL) : (Dt_t*)0; FIX */ - v = (Dt_t*)0; - exlval.id = (Exid_t*)dtmatch(ex->symbols, s); - if (v) - dtview(ex->symbols, v); - if (!exlval.id) - { - if (!(exlval.id = newof(0, Exid_t, 1, strlen(s) - EX_NAMELEN + 1))) - { - exnospace(); - goto eof; - } - strcpy(exlval.id->name, s); - exlval.id->lex = NAME; - expr.statics += exlval.id->isstatic = expr.instatic; - - /* - * LABELs are in the parent scope! - */ - - if (c == ':' && !expr.nolabel && ex->frame && ex->frame->view) - dtinsert(ex->frame->view, exlval.id); - else - dtinsert(ex->symbols, exlval.id); - } - - /* - * lexical analyzer state controlled by the grammar - */ - - switch (exlval.id->lex) - { - case DECLARE: - if (exlval.id->index == CHARACTER) - { - /* - * `char*' === `string' - * the * must immediately follow char - */ - - if (c == '*') - { - lex(ex); - exlval.id = id_string; - } - } - break; - case NAME: - /* - * action labels are disambiguated from ?: - * through the expr.nolabel grammar hook - * the : must immediately follow labels - */ - - if (c == ':' && !expr.nolabel) - return LABEL; - break; - case PRAGMA: - /* - * user specific statement stripped and - * passed as string - */ - - { - int b; - int n; - int pc = 0; - int po; - int t; - - /*UNDENT...*/ - sfstrseek(ex->tmp, 0, SEEK_SET); - b = 1; - n = 0; - po = 0; - t = 0; - for (c = t = lex(ex);; c = lex(ex)) - { - switch (c) - { - case 0: - goto eof; - case '/': - switch (q = lex(ex)) - { - case '*': - for (;;) - { - switch (lex(ex)) - { - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - continue; - case '*': - switch (lex(ex)) - { - case 0: - goto eof; - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - continue; - case '*': - exunlex(ex, '*'); - continue; - case '/': - break; - default: - continue; - } - break; - } - if (!b++) - goto eof; - sfputc(ex->tmp, ' '); - break; - } - break; - case '/': - while ((c = lex(ex)) != '\n') - if (!c) - goto eof; - if (error_info.line) - error_info.line++; - else error_info.line = 2; - b = 1; - sfputc(ex->tmp, '\n'); - break; - default: - b = 0; - sfputc(ex->tmp, c); - sfputc(ex->tmp, q); - break; - } - continue; - case '\n': - if (error_info.line) - error_info.line++; - else error_info.line = 2; - b = 1; - sfputc(ex->tmp, '\n'); - continue; - case ' ': - case '\t': - if (!b++) - goto eof; - sfputc(ex->tmp, ' '); - continue; - case '(': - case '{': - case '[': - b = 0; - if (!po) - { - switch (po = c) - { - case '(': - pc = ')'; - break; - case '{': - pc = '}'; - break; - case '[': - pc = ']'; - break; - } - n++; - } - else if (c == po) - n++; - sfputc(ex->tmp, c); - continue; - case ')': - case '}': - case ']': - b = 0; - if (!po) - { - exunlex(ex, c); - break; - } - sfputc(ex->tmp, c); - if (c == pc && --n <= 0) - { - if (t == po) - break; - po = 0; - } - continue; - case ';': - b = 0; - if (!n) - break; - sfputc(ex->tmp, c); - continue; - case '\'': - case '"': - b = 0; - sfputc(ex->tmp, c); - ex->input->nesting++; - q = c; - while ((c = lex(ex)) != q) - { - if (c == '\\') - { - sfputc(ex->tmp, c); - c = lex(ex); - } - if (!c) - { - exerror("unterminated %c string", q); - goto eof; - } - if (c == '\n') - { - if (error_info.line) - error_info.line++; - else error_info.line = 2; - } - sfputc(ex->tmp, c); - } - ex->input->nesting--; - continue; - default: - b = 0; - sfputc(ex->tmp, c); - continue; - } - break; - } - (*ex->disc->reff)(ex, NiL, exlval.id, NiL, exstash(ex->tmp, NiL), 0, ex->disc); - - /*..INDENT*/ - } - goto again; - } - return exlval.id->lex; - } - return exlval.op = c; - } - eof: - ex->eof = 1; - return exlval.op = ';'; -} diff --git a/internal/ccall/expr/extype.c b/internal/ccall/expr/extype.c deleted file mode 100644 index 5e8f6a6..0000000 --- a/internal/ccall/expr/extype.c +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library C program generator - */ - -#include "exlib.h" - -#define str(s) # s -#define xstr(s) str(s) - -/* - * return C type name for type - */ - -char* -extype(int type) -{ - switch (type) - { - case FLOATING: - return "double"; - case STRING: - return "char*"; - case UNSIGNED: - return xstr(uintmax_t); - } - return xstr(intmax_t); -} diff --git a/internal/ccall/expr/exzero.c b/internal/ccall/expr/exzero.c deleted file mode 100644 index 4dff703..0000000 --- a/internal/ccall/expr/exzero.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * Glenn Fowler - * AT&T Research - * - * expression library support - */ - -#include "exlib.h" - -/* - * return 0 value for type - */ - -Extype_t -exzero(int type) -{ - Extype_t v = {0}; - - switch (type) - { - case FLOATING: - v.floating = 0.0; - break; - case INTEGER: - case UNSIGNED: - v.integer = 0; - break; - case STRING: - v.string = expr.nullstring; - break; - } - return v; -} diff --git a/internal/ccall/expr/y.output b/internal/ccall/expr/y.output deleted file mode 100644 index 80163bd..0000000 --- a/internal/ccall/expr/y.output +++ /dev/null @@ -1,6876 +0,0 @@ -Terminals unused in grammar - - MINTOKEN - CHARACTER - VOIDTYPE - ADDRESS - CALL - ITERATE - MEMBER - POS - PRAGMA - PRE - F2I - F2S - I2F - I2S - S2B - S2F - S2I - F2X - I2X - S2X - X2F - X2I - X2S - X2X - XPRINT - MAXTOKEN - - -State 216 conflicts: 1 shift/reduce -State 229 conflicts: 1 shift/reduce -State 254 conflicts: 2 shift/reduce - - -Grammar - - 0 $accept: program $end - - 1 program: statement_list action_list - - 2 action_list: /* empty */ - 3 | action_list action - - 4 $@1: /* empty */ - - 5 action: LABEL ':' $@1 statement_list - - 6 statement_list: /* empty */ - 7 | statement_list statement - - 8 statement: '{' statement_list '}' - 9 | expr_opt ';' - - 10 $@2: /* empty */ - - 11 $@3: /* empty */ - - 12 statement: static $@2 DECLARE $@3 dcl_list ';' - 13 | IF '(' expr ')' statement else_opt - 14 | FOR '(' variable ')' statement - 15 | FOR '(' expr_opt ';' expr_opt ';' expr_opt ')' statement - 16 | ITERATER '(' variable ')' statement - 17 | UNSET '(' DYNAMIC ')' - 18 | UNSET '(' DYNAMIC ',' expr ')' - 19 | WHILE '(' expr ')' statement - - 20 $@4: /* empty */ - - 21 statement: SWITCH '(' expr $@4 ')' '{' switch_list '}' - 22 | BREAK expr_opt ';' - 23 | CONTINUE expr_opt ';' - 24 | RETURN expr_opt ';' - - 25 switch_list: /* empty */ - 26 | switch_list switch_item - - 27 switch_item: case_list statement_list - - 28 case_list: case_item - 29 | case_list case_item - - 30 case_item: CASE constant ':' - 31 | DEFAULT ':' - - 32 static: /* empty */ - 33 | STATIC - - 34 dcl_list: dcl_item - 35 | dcl_list ',' dcl_item - - 36 $@5: /* empty */ - - 37 dcl_item: dcl_name $@5 array initialize - - 38 dcl_name: NAME - 39 | DYNAMIC - 40 | ID - 41 | FUNCTION - - 42 name: NAME - 43 | DYNAMIC - - 44 else_opt: /* empty */ - 45 | ELSE statement - - 46 expr_opt: /* empty */ - 47 | expr - - 48 expr: '(' expr ')' - 49 | '(' DECLARE ')' expr - 50 | expr '<' expr - 51 | expr '-' expr - 52 | expr '*' expr - 53 | expr '/' expr - 54 | expr '%' expr - 55 | expr LS expr - 56 | expr RS expr - 57 | expr '>' expr - 58 | expr LE expr - 59 | expr GE expr - 60 | expr EQ expr - 61 | expr NE expr - 62 | expr '&' expr - 63 | expr '|' expr - 64 | expr '^' expr - 65 | expr '+' expr - 66 | expr AND expr - 67 | expr OR expr - 68 | expr ',' expr - - 69 $@6: /* empty */ - - 70 $@7: /* empty */ - - 71 expr: expr '?' $@6 expr ':' $@7 expr - 72 | '!' expr - 73 | '#' DYNAMIC - 74 | '~' expr - 75 | '-' expr - 76 | '+' expr - 77 | '&' variable - 78 | ARRAY '[' args ']' - 79 | FUNCTION '(' args ')' - 80 | GSUB '(' args ')' - 81 | SUB '(' args ')' - 82 | SUBSTR '(' args ')' - 83 | splitop '(' expr ',' DYNAMIC ')' - 84 | splitop '(' expr ',' DYNAMIC ',' expr ')' - 85 | EXIT '(' expr ')' - 86 | RAND '(' ')' - 87 | SRAND '(' ')' - 88 | SRAND '(' expr ')' - 89 | PROCEDURE '(' args ')' - 90 | PRINT '(' args ')' - 91 | print '(' args ')' - 92 | scan '(' args ')' - 93 | variable assign - 94 | INC variable - 95 | variable INC - 96 | expr IN_OP DYNAMIC - 97 | DEC variable - 98 | variable DEC - 99 | constant - - 100 splitop: SPLIT - 101 | TOKENS - - 102 constant: CONSTANT - 103 | FLOATING - 104 | INTEGER - 105 | STRING - 106 | UNSIGNED - - 107 print: PRINTF - 108 | QUERY - 109 | SPRINTF - - 110 scan: SCANF - 111 | SSCANF - - 112 variable: ID members - 113 | DYNAMIC index members - 114 | NAME - - 115 array: /* empty */ - 116 | '[' ']' - 117 | '[' DECLARE ']' - - 118 index: /* empty */ - 119 | '[' expr ']' - - 120 args: /* empty */ - 121 | arg_list - - 122 arg_list: expr - 123 | arg_list ',' expr - - 124 formals: /* empty */ - 125 | DECLARE - 126 | formal_list - - 127 formal_list: formal_item - 128 | formal_list ',' formal_item - - 129 $@8: /* empty */ - - 130 formal_item: DECLARE $@8 name - - 131 members: /* empty */ - 132 | member - 133 | '.' ID member - - 134 member: '.' ID - 135 | '.' NAME - - 136 assign: /* empty */ - 137 | '=' expr - - 138 initialize: assign - - 139 $@9: /* empty */ - - 140 $@10: /* empty */ - - 141 initialize: '(' $@9 formals $@10 ')' '{' statement_list '}' - - -Terminals, with rules where they appear - -$end (0) 0 -'!' (33) 72 -'#' (35) 73 -'%' (37) 54 -'&' (38) 62 77 -'(' (40) 13 14 15 16 17 18 19 21 48 49 79 80 81 82 83 84 85 86 87 88 - 89 90 91 92 141 -')' (41) 13 14 15 16 17 18 19 21 48 49 79 80 81 82 83 84 85 86 87 88 - 89 90 91 92 141 -'*' (42) 52 -'+' (43) 65 76 -',' (44) 18 35 68 83 84 123 128 -'-' (45) 51 75 -'.' (46) 133 134 135 -'/' (47) 53 -':' (58) 5 30 31 71 -';' (59) 9 12 15 22 23 24 -'<' (60) 50 -'=' (61) 137 -'>' (62) 57 -'?' (63) 71 -'[' (91) 78 116 117 119 -']' (93) 78 116 117 119 -'^' (94) 64 -'{' (123) 8 21 141 -'|' (124) 63 -'}' (125) 8 21 141 -'~' (126) 74 -error (256) -MINTOKEN (258) -INTEGER (259) 104 -UNSIGNED (260) 106 -CHARACTER (261) -FLOATING (262) 103 -STRING (263) 105 -VOIDTYPE (264) -STATIC (265) 33 -ADDRESS (266) -ARRAY (267) 78 -BREAK (268) 22 -CALL (269) -CASE (270) 30 -CONSTANT (271) 102 -CONTINUE (272) 23 -DECLARE (273) 12 49 117 125 130 -DEFAULT (274) 31 -DYNAMIC (275) 17 18 39 43 73 83 84 96 113 -ELSE (276) 45 -EXIT (277) 85 -FOR (278) 14 15 -FUNCTION (279) 41 79 -GSUB (280) 80 -ITERATE (281) -ITERATER (282) 16 -ID (283) 40 112 133 134 -IF (284) 13 -LABEL (285) 5 -MEMBER (286) -NAME (287) 38 42 114 135 -POS (288) -PRAGMA (289) -PRE (290) -PRINT (291) 90 -PRINTF (292) 107 -PROCEDURE (293) 89 -QUERY (294) 108 -RAND (295) 86 -RETURN (296) 24 -SCANF (297) 110 -SPLIT (298) 100 -SPRINTF (299) 109 -SRAND (300) 87 88 -SSCANF (301) 111 -SUB (302) 81 -SUBSTR (303) 82 -SWITCH (304) 21 -TOKENS (305) 101 -UNSET (306) 17 18 -WHILE (307) 19 -F2I (308) -F2S (309) -I2F (310) -I2S (311) -S2B (312) -S2F (313) -S2I (314) -F2X (315) -I2X (316) -S2X (317) -X2F (318) -X2I (319) -X2S (320) -X2X (321) -XPRINT (322) -OR (323) 67 -AND (324) 66 -NE (325) 61 -EQ (326) 60 -GE (327) 59 -LE (328) 58 -RS (329) 56 -LS (330) 55 -IN_OP (331) 96 -UNARY (332) -DEC (333) 97 98 -INC (334) 94 95 -CAST (335) -MAXTOKEN (336) - - -Nonterminals, with rules where they appear - -$accept (107) - on left: 0 -program (108) - on left: 1, on right: 0 -action_list (109) - on left: 2 3, on right: 1 3 -action (110) - on left: 5, on right: 3 -$@1 (111) - on left: 4, on right: 5 -statement_list (112) - on left: 6 7, on right: 1 5 7 8 27 141 -statement (113) - on left: 8 9 12 13 14 15 16 17 18 19 21 22 23 24, on right: 7 13 - 14 15 16 19 45 -$@2 (114) - on left: 10, on right: 12 -$@3 (115) - on left: 11, on right: 12 -$@4 (116) - on left: 20, on right: 21 -switch_list (117) - on left: 25 26, on right: 21 26 -switch_item (118) - on left: 27, on right: 26 -case_list (119) - on left: 28 29, on right: 27 29 -case_item (120) - on left: 30 31, on right: 28 29 -static (121) - on left: 32 33, on right: 12 -dcl_list (122) - on left: 34 35, on right: 12 35 -dcl_item (123) - on left: 37, on right: 34 35 -$@5 (124) - on left: 36, on right: 37 -dcl_name (125) - on left: 38 39 40 41, on right: 37 -name (126) - on left: 42 43, on right: 130 -else_opt (127) - on left: 44 45, on right: 13 -expr_opt (128) - on left: 46 47, on right: 9 15 22 23 24 -expr (129) - on left: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 - 66 67 68 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 - 89 90 91 92 93 94 95 96 97 98 99, on right: 13 18 19 21 47 48 49 - 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 71 72 - 74 75 76 83 84 85 88 96 119 122 123 137 -$@6 (130) - on left: 69, on right: 71 -$@7 (131) - on left: 70, on right: 71 -splitop (132) - on left: 100 101, on right: 83 84 -constant (133) - on left: 102 103 104 105 106, on right: 30 99 -print (134) - on left: 107 108 109, on right: 91 -scan (135) - on left: 110 111, on right: 92 -variable (136) - on left: 112 113 114, on right: 14 16 77 93 94 95 97 98 -array (137) - on left: 115 116 117, on right: 37 -index (138) - on left: 118 119, on right: 113 -args (139) - on left: 120 121, on right: 78 79 80 81 82 89 90 91 92 -arg_list (140) - on left: 122 123, on right: 121 123 -formals (141) - on left: 124 125 126, on right: 141 -formal_list (142) - on left: 127 128, on right: 126 128 -formal_item (143) - on left: 130, on right: 127 128 -$@8 (144) - on left: 129, on right: 130 -members (145) - on left: 131 132 133, on right: 112 113 -member (146) - on left: 134 135, on right: 132 133 -assign (147) - on left: 136 137, on right: 93 138 -initialize (148) - on left: 138 141, on right: 37 -$@9 (149) - on left: 139, on right: 141 -$@10 (150) - on left: 140, on right: 141 - - -State 0 - - 0 $accept: . program $end - - $default reduce using rule 6 (statement_list) - - program go to state 1 - statement_list go to state 2 - - -State 1 - - 0 $accept: program . $end - - $end shift, and go to state 3 - - -State 2 - - 1 program: statement_list . action_list - 7 statement_list: statement_list . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - DECLARE reduce using rule 32 (static) - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 2 (action_list) - - action_list go to state 49 - statement go to state 50 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 3 - - 0 $accept: program $end . - - $default accept - - -State 4 - - 104 constant: INTEGER . - - $default reduce using rule 104 (constant) - - -State 5 - - 106 constant: UNSIGNED . - - $default reduce using rule 106 (constant) - - -State 6 - - 103 constant: FLOATING . - - $default reduce using rule 103 (constant) - - -State 7 - - 105 constant: STRING . - - $default reduce using rule 105 (constant) - - -State 8 - - 33 static: STATIC . - - $default reduce using rule 33 (static) - - -State 9 - - 78 expr: ARRAY . '[' args ']' - - '[' shift, and go to state 59 - - -State 10 - - 22 statement: BREAK . expr_opt ';' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 60 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 11 - - 102 constant: CONSTANT . - - $default reduce using rule 102 (constant) - - -State 12 - - 23 statement: CONTINUE . expr_opt ';' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 61 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 13 - - 113 variable: DYNAMIC . index members - - '[' shift, and go to state 62 - - $default reduce using rule 118 (index) - - index go to state 63 - - -State 14 - - 85 expr: EXIT . '(' expr ')' - - '(' shift, and go to state 64 - - -State 15 - - 14 statement: FOR . '(' variable ')' statement - 15 | FOR . '(' expr_opt ';' expr_opt ';' expr_opt ')' statement - - '(' shift, and go to state 65 - - -State 16 - - 79 expr: FUNCTION . '(' args ')' - - '(' shift, and go to state 66 - - -State 17 - - 80 expr: GSUB . '(' args ')' - - '(' shift, and go to state 67 - - -State 18 - - 16 statement: ITERATER . '(' variable ')' statement - - '(' shift, and go to state 68 - - -State 19 - - 112 variable: ID . members - - '.' shift, and go to state 69 - - $default reduce using rule 131 (members) - - members go to state 70 - member go to state 71 - - -State 20 - - 13 statement: IF . '(' expr ')' statement else_opt - - '(' shift, and go to state 72 - - -State 21 - - 114 variable: NAME . - - $default reduce using rule 114 (variable) - - -State 22 - - 90 expr: PRINT . '(' args ')' - - '(' shift, and go to state 73 - - -State 23 - - 107 print: PRINTF . - - $default reduce using rule 107 (print) - - -State 24 - - 89 expr: PROCEDURE . '(' args ')' - - '(' shift, and go to state 74 - - -State 25 - - 108 print: QUERY . - - $default reduce using rule 108 (print) - - -State 26 - - 86 expr: RAND . '(' ')' - - '(' shift, and go to state 75 - - -State 27 - - 24 statement: RETURN . expr_opt ';' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 76 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 28 - - 110 scan: SCANF . - - $default reduce using rule 110 (scan) - - -State 29 - - 100 splitop: SPLIT . - - $default reduce using rule 100 (splitop) - - -State 30 - - 109 print: SPRINTF . - - $default reduce using rule 109 (print) - - -State 31 - - 87 expr: SRAND . '(' ')' - 88 | SRAND . '(' expr ')' - - '(' shift, and go to state 77 - - -State 32 - - 111 scan: SSCANF . - - $default reduce using rule 111 (scan) - - -State 33 - - 81 expr: SUB . '(' args ')' - - '(' shift, and go to state 78 - - -State 34 - - 82 expr: SUBSTR . '(' args ')' - - '(' shift, and go to state 79 - - -State 35 - - 21 statement: SWITCH . '(' expr $@4 ')' '{' switch_list '}' - - '(' shift, and go to state 80 - - -State 36 - - 101 splitop: TOKENS . - - $default reduce using rule 101 (splitop) - - -State 37 - - 17 statement: UNSET . '(' DYNAMIC ')' - 18 | UNSET . '(' DYNAMIC ',' expr ')' - - '(' shift, and go to state 81 - - -State 38 - - 19 statement: WHILE . '(' expr ')' statement - - '(' shift, and go to state 82 - - -State 39 - - 77 expr: '&' . variable - - DYNAMIC shift, and go to state 13 - ID shift, and go to state 19 - NAME shift, and go to state 21 - - variable go to state 83 - - -State 40 - - 76 expr: '+' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 84 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 41 - - 75 expr: '-' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 85 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 42 - - 72 expr: '!' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 86 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 43 - - 74 expr: '~' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 87 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 44 - - 73 expr: '#' . DYNAMIC - - DYNAMIC shift, and go to state 88 - - -State 45 - - 97 expr: DEC . variable - - DYNAMIC shift, and go to state 13 - ID shift, and go to state 19 - NAME shift, and go to state 21 - - variable go to state 89 - - -State 46 - - 94 expr: INC . variable - - DYNAMIC shift, and go to state 13 - ID shift, and go to state 19 - NAME shift, and go to state 21 - - variable go to state 90 - - -State 47 - - 48 expr: '(' . expr ')' - 49 | '(' . DECLARE ')' expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DECLARE shift, and go to state 91 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 92 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 48 - - 8 statement: '{' . statement_list '}' - - $default reduce using rule 6 (statement_list) - - statement_list go to state 93 - - -State 49 - - 1 program: statement_list action_list . - 3 action_list: action_list . action - - LABEL shift, and go to state 94 - - $default reduce using rule 1 (program) - - action go to state 95 - - -State 50 - - 7 statement_list: statement_list statement . - - $default reduce using rule 7 (statement_list) - - -State 51 - - 12 statement: static . $@2 DECLARE $@3 dcl_list ';' - - $default reduce using rule 10 ($@2) - - $@2 go to state 96 - - -State 52 - - 9 statement: expr_opt . ';' - - ';' shift, and go to state 97 - - -State 53 - - 47 expr_opt: expr . - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 47 (expr_opt) - - -State 54 - - 83 expr: splitop . '(' expr ',' DYNAMIC ')' - 84 | splitop . '(' expr ',' DYNAMIC ',' expr ')' - - '(' shift, and go to state 119 - - -State 55 - - 99 expr: constant . - - $default reduce using rule 99 (expr) - - -State 56 - - 91 expr: print . '(' args ')' - - '(' shift, and go to state 120 - - -State 57 - - 92 expr: scan . '(' args ')' - - '(' shift, and go to state 121 - - -State 58 - - 93 expr: variable . assign - 95 | variable . INC - 98 | variable . DEC - - '=' shift, and go to state 122 - DEC shift, and go to state 123 - INC shift, and go to state 124 - - $default reduce using rule 136 (assign) - - assign go to state 125 - - -State 59 - - 78 expr: ARRAY '[' . args ']' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 127 - arg_list go to state 128 - - -State 60 - - 22 statement: BREAK expr_opt . ';' - - ';' shift, and go to state 129 - - -State 61 - - 23 statement: CONTINUE expr_opt . ';' - - ';' shift, and go to state 130 - - -State 62 - - 119 index: '[' . expr ']' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 131 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 63 - - 113 variable: DYNAMIC index . members - - '.' shift, and go to state 69 - - $default reduce using rule 131 (members) - - members go to state 132 - member go to state 71 - - -State 64 - - 85 expr: EXIT '(' . expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 133 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 65 - - 14 statement: FOR '(' . variable ')' statement - 15 | FOR '(' . expr_opt ';' expr_opt ';' expr_opt ')' statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 134 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 135 - - -State 66 - - 79 expr: FUNCTION '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 136 - arg_list go to state 128 - - -State 67 - - 80 expr: GSUB '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 137 - arg_list go to state 128 - - -State 68 - - 16 statement: ITERATER '(' . variable ')' statement - - DYNAMIC shift, and go to state 13 - ID shift, and go to state 19 - NAME shift, and go to state 21 - - variable go to state 138 - - -State 69 - - 133 members: '.' . ID member - 134 member: '.' . ID - 135 | '.' . NAME - - ID shift, and go to state 139 - NAME shift, and go to state 140 - - -State 70 - - 112 variable: ID members . - - $default reduce using rule 112 (variable) - - -State 71 - - 132 members: member . - - $default reduce using rule 132 (members) - - -State 72 - - 13 statement: IF '(' . expr ')' statement else_opt - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 141 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 73 - - 90 expr: PRINT '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 142 - arg_list go to state 128 - - -State 74 - - 89 expr: PROCEDURE '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 143 - arg_list go to state 128 - - -State 75 - - 86 expr: RAND '(' . ')' - - ')' shift, and go to state 144 - - -State 76 - - 24 statement: RETURN expr_opt . ';' - - ';' shift, and go to state 145 - - -State 77 - - 87 expr: SRAND '(' . ')' - 88 | SRAND '(' . expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - ')' shift, and go to state 146 - - expr go to state 147 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 78 - - 81 expr: SUB '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 148 - arg_list go to state 128 - - -State 79 - - 82 expr: SUBSTR '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 149 - arg_list go to state 128 - - -State 80 - - 21 statement: SWITCH '(' . expr $@4 ')' '{' switch_list '}' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 150 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 81 - - 17 statement: UNSET '(' . DYNAMIC ')' - 18 | UNSET '(' . DYNAMIC ',' expr ')' - - DYNAMIC shift, and go to state 151 - - -State 82 - - 19 statement: WHILE '(' . expr ')' statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 152 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 83 - - 77 expr: '&' variable . - - $default reduce using rule 77 (expr) - - -State 84 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 76 | '+' expr . - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 76 (expr) - - -State 85 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 75 | '-' expr . - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 75 (expr) - - -State 86 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 72 | '!' expr . - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 72 (expr) - - -State 87 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 74 | '~' expr . - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 74 (expr) - - -State 88 - - 73 expr: '#' DYNAMIC . - - $default reduce using rule 73 (expr) - - -State 89 - - 97 expr: DEC variable . - - $default reduce using rule 97 (expr) - - -State 90 - - 94 expr: INC variable . - - $default reduce using rule 94 (expr) - - -State 91 - - 49 expr: '(' DECLARE . ')' expr - - ')' shift, and go to state 153 - - -State 92 - - 48 expr: '(' expr . ')' - 50 | expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 154 - - -State 93 - - 7 statement_list: statement_list . statement - 8 statement: '{' statement_list . '}' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - '}' shift, and go to state 155 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 50 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 94 - - 5 action: LABEL . ':' $@1 statement_list - - ':' shift, and go to state 156 - - -State 95 - - 3 action_list: action_list action . - - $default reduce using rule 3 (action_list) - - -State 96 - - 12 statement: static $@2 . DECLARE $@3 dcl_list ';' - - DECLARE shift, and go to state 157 - - -State 97 - - 9 statement: expr_opt ';' . - - $default reduce using rule 9 (statement) - - -State 98 - - 68 expr: expr ',' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 158 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 99 - - 71 expr: expr '?' . $@6 expr ':' $@7 expr - - $default reduce using rule 69 ($@6) - - $@6 go to state 159 - - -State 100 - - 67 expr: expr OR . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 160 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 101 - - 66 expr: expr AND . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 161 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 102 - - 63 expr: expr '|' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 162 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 103 - - 64 expr: expr '^' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 163 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 104 - - 62 expr: expr '&' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 164 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 105 - - 61 expr: expr NE . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 165 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 106 - - 60 expr: expr EQ . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 166 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 107 - - 50 expr: expr '<' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 167 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 108 - - 57 expr: expr '>' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 168 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 109 - - 59 expr: expr GE . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 169 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 110 - - 58 expr: expr LE . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 170 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 111 - - 56 expr: expr RS . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 171 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 112 - - 55 expr: expr LS . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 172 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 113 - - 65 expr: expr '+' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 173 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 114 - - 51 expr: expr '-' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 174 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 115 - - 96 expr: expr IN_OP . DYNAMIC - - DYNAMIC shift, and go to state 175 - - -State 116 - - 52 expr: expr '*' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 176 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 117 - - 53 expr: expr '/' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 177 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 118 - - 54 expr: expr '%' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 178 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 119 - - 83 expr: splitop '(' . expr ',' DYNAMIC ')' - 84 | splitop '(' . expr ',' DYNAMIC ',' expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 179 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 120 - - 91 expr: print '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 180 - arg_list go to state 128 - - -State 121 - - 92 expr: scan '(' . args ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 120 (args) - - expr go to state 126 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - args go to state 181 - arg_list go to state 128 - - -State 122 - - 137 assign: '=' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 182 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 123 - - 98 expr: variable DEC . - - $default reduce using rule 98 (expr) - - -State 124 - - 95 expr: variable INC . - - $default reduce using rule 95 (expr) - - -State 125 - - 93 expr: variable assign . - - $default reduce using rule 93 (expr) - - -State 126 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - 122 arg_list: expr . - - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 122 (arg_list) - - -State 127 - - 78 expr: ARRAY '[' args . ']' - - ']' shift, and go to state 183 - - -State 128 - - 121 args: arg_list . - 123 arg_list: arg_list . ',' expr - - ',' shift, and go to state 184 - - $default reduce using rule 121 (args) - - -State 129 - - 22 statement: BREAK expr_opt ';' . - - $default reduce using rule 22 (statement) - - -State 130 - - 23 statement: CONTINUE expr_opt ';' . - - $default reduce using rule 23 (statement) - - -State 131 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - 119 index: '[' expr . ']' - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ']' shift, and go to state 185 - - -State 132 - - 113 variable: DYNAMIC index members . - - $default reduce using rule 113 (variable) - - -State 133 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 85 | EXIT '(' expr . ')' - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 186 - - -State 134 - - 15 statement: FOR '(' expr_opt . ';' expr_opt ';' expr_opt ')' statement - - ';' shift, and go to state 187 - - -State 135 - - 14 statement: FOR '(' variable . ')' statement - 93 expr: variable . assign - 95 | variable . INC - 98 | variable . DEC - - '=' shift, and go to state 122 - DEC shift, and go to state 123 - INC shift, and go to state 124 - ')' shift, and go to state 188 - - $default reduce using rule 136 (assign) - - assign go to state 125 - - -State 136 - - 79 expr: FUNCTION '(' args . ')' - - ')' shift, and go to state 189 - - -State 137 - - 80 expr: GSUB '(' args . ')' - - ')' shift, and go to state 190 - - -State 138 - - 16 statement: ITERATER '(' variable . ')' statement - - ')' shift, and go to state 191 - - -State 139 - - 133 members: '.' ID . member - 134 member: '.' ID . - - '.' shift, and go to state 192 - - $default reduce using rule 134 (member) - - member go to state 193 - - -State 140 - - 135 member: '.' NAME . - - $default reduce using rule 135 (member) - - -State 141 - - 13 statement: IF '(' expr . ')' statement else_opt - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 194 - - -State 142 - - 90 expr: PRINT '(' args . ')' - - ')' shift, and go to state 195 - - -State 143 - - 89 expr: PROCEDURE '(' args . ')' - - ')' shift, and go to state 196 - - -State 144 - - 86 expr: RAND '(' ')' . - - $default reduce using rule 86 (expr) - - -State 145 - - 24 statement: RETURN expr_opt ';' . - - $default reduce using rule 24 (statement) - - -State 146 - - 87 expr: SRAND '(' ')' . - - $default reduce using rule 87 (expr) - - -State 147 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 88 | SRAND '(' expr . ')' - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 197 - - -State 148 - - 81 expr: SUB '(' args . ')' - - ')' shift, and go to state 198 - - -State 149 - - 82 expr: SUBSTR '(' args . ')' - - ')' shift, and go to state 199 - - -State 150 - - 21 statement: SWITCH '(' expr . $@4 ')' '{' switch_list '}' - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 20 ($@4) - - $@4 go to state 200 - - -State 151 - - 17 statement: UNSET '(' DYNAMIC . ')' - 18 | UNSET '(' DYNAMIC . ',' expr ')' - - ',' shift, and go to state 201 - ')' shift, and go to state 202 - - -State 152 - - 19 statement: WHILE '(' expr . ')' statement - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 203 - - -State 153 - - 49 expr: '(' DECLARE ')' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 204 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 154 - - 48 expr: '(' expr ')' . - - $default reduce using rule 48 (expr) - - -State 155 - - 8 statement: '{' statement_list '}' . - - $default reduce using rule 8 (statement) - - -State 156 - - 5 action: LABEL ':' . $@1 statement_list - - $default reduce using rule 4 ($@1) - - $@1 go to state 205 - - -State 157 - - 12 statement: static $@2 DECLARE . $@3 dcl_list ';' - - $default reduce using rule 11 ($@3) - - $@3 go to state 206 - - -State 158 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 68 | expr ',' expr . - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 68 (expr) - - -State 159 - - 71 expr: expr '?' $@6 . expr ':' $@7 expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 207 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 160 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 67 | expr OR expr . - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 67 (expr) - - -State 161 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 66 | expr AND expr . - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 66 (expr) - - -State 162 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 63 | expr '|' expr . - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 63 (expr) - - -State 163 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 64 | expr '^' expr . - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 64 (expr) - - -State 164 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 62 | expr '&' expr . - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 62 (expr) - - -State 165 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 61 | expr NE expr . - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - NE error (nonassociative) - EQ error (nonassociative) - - $default reduce using rule 61 (expr) - - -State 166 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 60 | expr EQ expr . - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - NE error (nonassociative) - EQ error (nonassociative) - - $default reduce using rule 60 (expr) - - -State 167 - - 50 expr: expr . '<' expr - 50 | expr '<' expr . - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - '<' error (nonassociative) - '>' error (nonassociative) - GE error (nonassociative) - LE error (nonassociative) - - $default reduce using rule 50 (expr) - - -State 168 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 57 | expr '>' expr . - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - '<' error (nonassociative) - '>' error (nonassociative) - GE error (nonassociative) - LE error (nonassociative) - - $default reduce using rule 57 (expr) - - -State 169 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 59 | expr GE expr . - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - '<' error (nonassociative) - '>' error (nonassociative) - GE error (nonassociative) - LE error (nonassociative) - - $default reduce using rule 59 (expr) - - -State 170 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 58 | expr LE expr . - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - '<' error (nonassociative) - '>' error (nonassociative) - GE error (nonassociative) - LE error (nonassociative) - - $default reduce using rule 58 (expr) - - -State 171 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 56 | expr RS expr . - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 56 (expr) - - -State 172 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 55 | expr LS expr . - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 55 (expr) - - -State 173 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 65 | expr '+' expr . - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 65 (expr) - - -State 174 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 51 | expr '-' expr . - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 51 (expr) - - -State 175 - - 96 expr: expr IN_OP DYNAMIC . - - $default reduce using rule 96 (expr) - - -State 176 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 52 | expr '*' expr . - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 52 (expr) - - -State 177 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 53 | expr '/' expr . - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 53 (expr) - - -State 178 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 54 | expr '%' expr . - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 54 (expr) - - -State 179 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 83 | splitop '(' expr . ',' DYNAMIC ')' - 84 | splitop '(' expr . ',' DYNAMIC ',' expr ')' - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 208 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - -State 180 - - 91 expr: print '(' args . ')' - - ')' shift, and go to state 209 - - -State 181 - - 92 expr: scan '(' args . ')' - - ')' shift, and go to state 210 - - -State 182 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - 137 assign: '=' expr . - - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 137 (assign) - - -State 183 - - 78 expr: ARRAY '[' args ']' . - - $default reduce using rule 78 (expr) - - -State 184 - - 123 arg_list: arg_list ',' . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 211 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 185 - - 119 index: '[' expr ']' . - - $default reduce using rule 119 (index) - - -State 186 - - 85 expr: EXIT '(' expr ')' . - - $default reduce using rule 85 (expr) - - -State 187 - - 15 statement: FOR '(' expr_opt ';' . expr_opt ';' expr_opt ')' statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 212 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 188 - - 14 statement: FOR '(' variable ')' . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 213 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 189 - - 79 expr: FUNCTION '(' args ')' . - - $default reduce using rule 79 (expr) - - -State 190 - - 80 expr: GSUB '(' args ')' . - - $default reduce using rule 80 (expr) - - -State 191 - - 16 statement: ITERATER '(' variable ')' . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 214 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 192 - - 134 member: '.' . ID - 135 | '.' . NAME - - ID shift, and go to state 215 - NAME shift, and go to state 140 - - -State 193 - - 133 members: '.' ID member . - - $default reduce using rule 133 (members) - - -State 194 - - 13 statement: IF '(' expr ')' . statement else_opt - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 216 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 195 - - 90 expr: PRINT '(' args ')' . - - $default reduce using rule 90 (expr) - - -State 196 - - 89 expr: PROCEDURE '(' args ')' . - - $default reduce using rule 89 (expr) - - -State 197 - - 88 expr: SRAND '(' expr ')' . - - $default reduce using rule 88 (expr) - - -State 198 - - 81 expr: SUB '(' args ')' . - - $default reduce using rule 81 (expr) - - -State 199 - - 82 expr: SUBSTR '(' args ')' . - - $default reduce using rule 82 (expr) - - -State 200 - - 21 statement: SWITCH '(' expr $@4 . ')' '{' switch_list '}' - - ')' shift, and go to state 217 - - -State 201 - - 18 statement: UNSET '(' DYNAMIC ',' . expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 218 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 202 - - 17 statement: UNSET '(' DYNAMIC ')' . - - $default reduce using rule 17 (statement) - - -State 203 - - 19 statement: WHILE '(' expr ')' . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 219 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 204 - - 49 expr: '(' DECLARE ')' expr . - 50 | expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - $default reduce using rule 49 (expr) - - -State 205 - - 5 action: LABEL ':' $@1 . statement_list - - $default reduce using rule 6 (statement_list) - - statement_list go to state 220 - - -State 206 - - 12 statement: static $@2 DECLARE $@3 . dcl_list ';' - - DYNAMIC shift, and go to state 221 - FUNCTION shift, and go to state 222 - ID shift, and go to state 223 - NAME shift, and go to state 224 - - dcl_list go to state 225 - dcl_item go to state 226 - dcl_name go to state 227 - - -State 207 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 71 | expr '?' $@6 expr . ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - ':' shift, and go to state 228 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - -State 208 - - 68 expr: expr ',' . expr - 83 | splitop '(' expr ',' . DYNAMIC ')' - 84 | splitop '(' expr ',' . DYNAMIC ',' expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 229 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 158 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 209 - - 91 expr: print '(' args ')' . - - $default reduce using rule 91 (expr) - - -State 210 - - 92 expr: scan '(' args ')' . - - $default reduce using rule 92 (expr) - - -State 211 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - 123 arg_list: arg_list ',' expr . - - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 123 (arg_list) - - -State 212 - - 15 statement: FOR '(' expr_opt ';' expr_opt . ';' expr_opt ')' statement - - ';' shift, and go to state 230 - - -State 213 - - 14 statement: FOR '(' variable ')' statement . - - $default reduce using rule 14 (statement) - - -State 214 - - 16 statement: ITERATER '(' variable ')' statement . - - $default reduce using rule 16 (statement) - - -State 215 - - 134 member: '.' ID . - - $default reduce using rule 134 (member) - - -State 216 - - 13 statement: IF '(' expr ')' statement . else_opt - - ELSE shift, and go to state 231 - - ELSE [reduce using rule 44 (else_opt)] - $default reduce using rule 44 (else_opt) - - else_opt go to state 232 - - -State 217 - - 21 statement: SWITCH '(' expr $@4 ')' . '{' switch_list '}' - - '{' shift, and go to state 233 - - -State 218 - - 18 statement: UNSET '(' DYNAMIC ',' expr . ')' - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 234 - - -State 219 - - 19 statement: WHILE '(' expr ')' statement . - - $default reduce using rule 19 (statement) - - -State 220 - - 5 action: LABEL ':' $@1 statement_list . - 7 statement_list: statement_list . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - DECLARE reduce using rule 32 (static) - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 5 (action) - - statement go to state 50 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 221 - - 39 dcl_name: DYNAMIC . - - $default reduce using rule 39 (dcl_name) - - -State 222 - - 41 dcl_name: FUNCTION . - - $default reduce using rule 41 (dcl_name) - - -State 223 - - 40 dcl_name: ID . - - $default reduce using rule 40 (dcl_name) - - -State 224 - - 38 dcl_name: NAME . - - $default reduce using rule 38 (dcl_name) - - -State 225 - - 12 statement: static $@2 DECLARE $@3 dcl_list . ';' - 35 dcl_list: dcl_list . ',' dcl_item - - ',' shift, and go to state 235 - ';' shift, and go to state 236 - - -State 226 - - 34 dcl_list: dcl_item . - - $default reduce using rule 34 (dcl_list) - - -State 227 - - 37 dcl_item: dcl_name . $@5 array initialize - - $default reduce using rule 36 ($@5) - - $@5 go to state 237 - - -State 228 - - 71 expr: expr '?' $@6 expr ':' . $@7 expr - - $default reduce using rule 70 ($@7) - - $@7 go to state 238 - - -State 229 - - 83 expr: splitop '(' expr ',' DYNAMIC . ')' - 84 | splitop '(' expr ',' DYNAMIC . ',' expr ')' - 113 variable: DYNAMIC . index members - - ',' shift, and go to state 239 - ')' shift, and go to state 240 - '[' shift, and go to state 62 - - ',' [reduce using rule 118 (index)] - $default reduce using rule 118 (index) - - index go to state 63 - - -State 230 - - 15 statement: FOR '(' expr_opt ';' expr_opt ';' . expr_opt ')' statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - $default reduce using rule 46 (expr_opt) - - expr_opt go to state 241 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 231 - - 45 else_opt: ELSE . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 242 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 232 - - 13 statement: IF '(' expr ')' statement else_opt . - - $default reduce using rule 13 (statement) - - -State 233 - - 21 statement: SWITCH '(' expr $@4 ')' '{' . switch_list '}' - - $default reduce using rule 25 (switch_list) - - switch_list go to state 243 - - -State 234 - - 18 statement: UNSET '(' DYNAMIC ',' expr ')' . - - $default reduce using rule 18 (statement) - - -State 235 - - 35 dcl_list: dcl_list ',' . dcl_item - - DYNAMIC shift, and go to state 221 - FUNCTION shift, and go to state 222 - ID shift, and go to state 223 - NAME shift, and go to state 224 - - dcl_item go to state 244 - dcl_name go to state 227 - - -State 236 - - 12 statement: static $@2 DECLARE $@3 dcl_list ';' . - - $default reduce using rule 12 (statement) - - -State 237 - - 37 dcl_item: dcl_name $@5 . array initialize - - '[' shift, and go to state 245 - - $default reduce using rule 115 (array) - - array go to state 246 - - -State 238 - - 71 expr: expr '?' $@6 expr ':' $@7 . expr - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 247 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 239 - - 84 expr: splitop '(' expr ',' DYNAMIC ',' . expr ')' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - ARRAY shift, and go to state 9 - CONSTANT shift, and go to state 11 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ID shift, and go to state 19 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - TOKENS shift, and go to state 36 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - - expr go to state 248 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 240 - - 83 expr: splitop '(' expr ',' DYNAMIC ')' . - - $default reduce using rule 83 (expr) - - -State 241 - - 15 statement: FOR '(' expr_opt ';' expr_opt ';' expr_opt . ')' statement - - ')' shift, and go to state 249 - - -State 242 - - 45 else_opt: ELSE statement . - - $default reduce using rule 45 (else_opt) - - -State 243 - - 21 statement: SWITCH '(' expr $@4 ')' '{' switch_list . '}' - 26 switch_list: switch_list . switch_item - - CASE shift, and go to state 250 - DEFAULT shift, and go to state 251 - '}' shift, and go to state 252 - - switch_item go to state 253 - case_list go to state 254 - case_item go to state 255 - - -State 244 - - 35 dcl_list: dcl_list ',' dcl_item . - - $default reduce using rule 35 (dcl_list) - - -State 245 - - 116 array: '[' . ']' - 117 | '[' . DECLARE ']' - - DECLARE shift, and go to state 256 - ']' shift, and go to state 257 - - -State 246 - - 37 dcl_item: dcl_name $@5 array . initialize - - '=' shift, and go to state 122 - '(' shift, and go to state 258 - - $default reduce using rule 136 (assign) - - assign go to state 259 - initialize go to state 260 - - -State 247 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 71 | expr '?' $@6 expr ':' $@7 expr . - 96 | expr . IN_OP DYNAMIC - - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - - $default reduce using rule 71 (expr) - - -State 248 - - 50 expr: expr . '<' expr - 51 | expr . '-' expr - 52 | expr . '*' expr - 53 | expr . '/' expr - 54 | expr . '%' expr - 55 | expr . LS expr - 56 | expr . RS expr - 57 | expr . '>' expr - 58 | expr . LE expr - 59 | expr . GE expr - 60 | expr . EQ expr - 61 | expr . NE expr - 62 | expr . '&' expr - 63 | expr . '|' expr - 64 | expr . '^' expr - 65 | expr . '+' expr - 66 | expr . AND expr - 67 | expr . OR expr - 68 | expr . ',' expr - 71 | expr . '?' $@6 expr ':' $@7 expr - 84 | splitop '(' expr ',' DYNAMIC ',' expr . ')' - 96 | expr . IN_OP DYNAMIC - - ',' shift, and go to state 98 - '?' shift, and go to state 99 - OR shift, and go to state 100 - AND shift, and go to state 101 - '|' shift, and go to state 102 - '^' shift, and go to state 103 - '&' shift, and go to state 104 - NE shift, and go to state 105 - EQ shift, and go to state 106 - '<' shift, and go to state 107 - '>' shift, and go to state 108 - GE shift, and go to state 109 - LE shift, and go to state 110 - RS shift, and go to state 111 - LS shift, and go to state 112 - '+' shift, and go to state 113 - '-' shift, and go to state 114 - IN_OP shift, and go to state 115 - '*' shift, and go to state 116 - '/' shift, and go to state 117 - '%' shift, and go to state 118 - ')' shift, and go to state 261 - - -State 249 - - 15 statement: FOR '(' expr_opt ';' expr_opt ';' expr_opt ')' . statement - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 262 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 250 - - 30 case_item: CASE . constant ':' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - CONSTANT shift, and go to state 11 - - constant go to state 263 - - -State 251 - - 31 case_item: DEFAULT . ':' - - ':' shift, and go to state 264 - - -State 252 - - 21 statement: SWITCH '(' expr $@4 ')' '{' switch_list '}' . - - $default reduce using rule 21 (statement) - - -State 253 - - 26 switch_list: switch_list switch_item . - - $default reduce using rule 26 (switch_list) - - -State 254 - - 27 switch_item: case_list . statement_list - 29 case_list: case_list . case_item - - CASE shift, and go to state 250 - DEFAULT shift, and go to state 251 - - CASE [reduce using rule 6 (statement_list)] - DEFAULT [reduce using rule 6 (statement_list)] - $default reduce using rule 6 (statement_list) - - statement_list go to state 265 - case_item go to state 266 - - -State 255 - - 28 case_list: case_item . - - $default reduce using rule 28 (case_list) - - -State 256 - - 117 array: '[' DECLARE . ']' - - ']' shift, and go to state 267 - - -State 257 - - 116 array: '[' ']' . - - $default reduce using rule 116 (array) - - -State 258 - - 141 initialize: '(' . $@9 formals $@10 ')' '{' statement_list '}' - - $default reduce using rule 139 ($@9) - - $@9 go to state 268 - - -State 259 - - 138 initialize: assign . - - $default reduce using rule 138 (initialize) - - -State 260 - - 37 dcl_item: dcl_name $@5 array initialize . - - $default reduce using rule 37 (dcl_item) - - -State 261 - - 84 expr: splitop '(' expr ',' DYNAMIC ',' expr ')' . - - $default reduce using rule 84 (expr) - - -State 262 - - 15 statement: FOR '(' expr_opt ';' expr_opt ';' expr_opt ')' statement . - - $default reduce using rule 15 (statement) - - -State 263 - - 30 case_item: CASE constant . ':' - - ':' shift, and go to state 269 - - -State 264 - - 31 case_item: DEFAULT ':' . - - $default reduce using rule 31 (case_item) - - -State 265 - - 7 statement_list: statement_list . statement - 27 switch_item: case_list statement_list . - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - - DECLARE reduce using rule 32 (static) - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 27 (switch_item) - - statement go to state 50 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 266 - - 29 case_list: case_list case_item . - - $default reduce using rule 29 (case_list) - - -State 267 - - 117 array: '[' DECLARE ']' . - - $default reduce using rule 117 (array) - - -State 268 - - 141 initialize: '(' $@9 . formals $@10 ')' '{' statement_list '}' - - DECLARE shift, and go to state 270 - - $default reduce using rule 124 (formals) - - formals go to state 271 - formal_list go to state 272 - formal_item go to state 273 - - -State 269 - - 30 case_item: CASE constant ':' . - - $default reduce using rule 30 (case_item) - - -State 270 - - 125 formals: DECLARE . - 130 formal_item: DECLARE . $@8 name - - ')' reduce using rule 125 (formals) - $default reduce using rule 129 ($@8) - - $@8 go to state 274 - - -State 271 - - 141 initialize: '(' $@9 formals . $@10 ')' '{' statement_list '}' - - $default reduce using rule 140 ($@10) - - $@10 go to state 275 - - -State 272 - - 126 formals: formal_list . - 128 formal_list: formal_list . ',' formal_item - - ',' shift, and go to state 276 - - $default reduce using rule 126 (formals) - - -State 273 - - 127 formal_list: formal_item . - - $default reduce using rule 127 (formal_list) - - -State 274 - - 130 formal_item: DECLARE $@8 . name - - DYNAMIC shift, and go to state 277 - NAME shift, and go to state 278 - - name go to state 279 - - -State 275 - - 141 initialize: '(' $@9 formals $@10 . ')' '{' statement_list '}' - - ')' shift, and go to state 280 - - -State 276 - - 128 formal_list: formal_list ',' . formal_item - - DECLARE shift, and go to state 281 - - formal_item go to state 282 - - -State 277 - - 43 name: DYNAMIC . - - $default reduce using rule 43 (name) - - -State 278 - - 42 name: NAME . - - $default reduce using rule 42 (name) - - -State 279 - - 130 formal_item: DECLARE $@8 name . - - $default reduce using rule 130 (formal_item) - - -State 280 - - 141 initialize: '(' $@9 formals $@10 ')' . '{' statement_list '}' - - '{' shift, and go to state 283 - - -State 281 - - 130 formal_item: DECLARE . $@8 name - - $default reduce using rule 129 ($@8) - - $@8 go to state 274 - - -State 282 - - 128 formal_list: formal_list ',' formal_item . - - $default reduce using rule 128 (formal_list) - - -State 283 - - 141 initialize: '(' $@9 formals $@10 ')' '{' . statement_list '}' - - $default reduce using rule 6 (statement_list) - - statement_list go to state 284 - - -State 284 - - 7 statement_list: statement_list . statement - 141 initialize: '(' $@9 formals $@10 ')' '{' statement_list . '}' - - INTEGER shift, and go to state 4 - UNSIGNED shift, and go to state 5 - FLOATING shift, and go to state 6 - STRING shift, and go to state 7 - STATIC shift, and go to state 8 - ARRAY shift, and go to state 9 - BREAK shift, and go to state 10 - CONSTANT shift, and go to state 11 - CONTINUE shift, and go to state 12 - DYNAMIC shift, and go to state 13 - EXIT shift, and go to state 14 - FOR shift, and go to state 15 - FUNCTION shift, and go to state 16 - GSUB shift, and go to state 17 - ITERATER shift, and go to state 18 - ID shift, and go to state 19 - IF shift, and go to state 20 - NAME shift, and go to state 21 - PRINT shift, and go to state 22 - PRINTF shift, and go to state 23 - PROCEDURE shift, and go to state 24 - QUERY shift, and go to state 25 - RAND shift, and go to state 26 - RETURN shift, and go to state 27 - SCANF shift, and go to state 28 - SPLIT shift, and go to state 29 - SPRINTF shift, and go to state 30 - SRAND shift, and go to state 31 - SSCANF shift, and go to state 32 - SUB shift, and go to state 33 - SUBSTR shift, and go to state 34 - SWITCH shift, and go to state 35 - TOKENS shift, and go to state 36 - UNSET shift, and go to state 37 - WHILE shift, and go to state 38 - '&' shift, and go to state 39 - '+' shift, and go to state 40 - '-' shift, and go to state 41 - '!' shift, and go to state 42 - '~' shift, and go to state 43 - '#' shift, and go to state 44 - DEC shift, and go to state 45 - INC shift, and go to state 46 - '(' shift, and go to state 47 - '{' shift, and go to state 48 - '}' shift, and go to state 285 - - ';' reduce using rule 46 (expr_opt) - $default reduce using rule 32 (static) - - statement go to state 50 - static go to state 51 - expr_opt go to state 52 - expr go to state 53 - splitop go to state 54 - constant go to state 55 - print go to state 56 - scan go to state 57 - variable go to state 58 - - -State 285 - - 141 initialize: '(' $@9 formals $@10 ')' '{' statement_list '}' . - - $default reduce using rule 141 (initialize) diff --git a/internal/ccall/expr/y.tab.c b/internal/ccall/expr/y.tab.c deleted file mode 100644 index bac6ca8..0000000 --- a/internal/ccall/expr/y.tab.c +++ /dev/null @@ -1,3729 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.7" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 14 "../../lib/expr/exparse.y" - - -/* - * Glenn Fowler - * AT&T Research - * - * expression library grammar and compiler - */ - -#ifdef WIN32 -#include - -#ifdef GVDLL -#define _BLD_sfio 1 -#endif -#endif - -#include -#include - -#undef RS /* hp.pa grabs this!! */ - - -/* Line 371 of yacc.c */ -#line 92 "y.tab.c" - -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - MINTOKEN = 258, - INTEGER = 259, - UNSIGNED = 260, - CHARACTER = 261, - FLOATING = 262, - STRING = 263, - VOIDTYPE = 264, - STATIC = 265, - ADDRESS = 266, - ARRAY = 267, - BREAK = 268, - CALL = 269, - CASE = 270, - CONSTANT = 271, - CONTINUE = 272, - DECLARE = 273, - DEFAULT = 274, - DYNAMIC = 275, - ELSE = 276, - EXIT = 277, - FOR = 278, - FUNCTION = 279, - GSUB = 280, - ITERATE = 281, - ITERATER = 282, - ID = 283, - IF = 284, - LABEL = 285, - MEMBER = 286, - NAME = 287, - POS = 288, - PRAGMA = 289, - PRE = 290, - PRINT = 291, - PRINTF = 292, - PROCEDURE = 293, - QUERY = 294, - RAND = 295, - RETURN = 296, - SCANF = 297, - SPLIT = 298, - SPRINTF = 299, - SRAND = 300, - SSCANF = 301, - SUB = 302, - SUBSTR = 303, - SWITCH = 304, - TOKENS = 305, - UNSET = 306, - WHILE = 307, - F2I = 308, - F2S = 309, - I2F = 310, - I2S = 311, - S2B = 312, - S2F = 313, - S2I = 314, - F2X = 315, - I2X = 316, - S2X = 317, - X2F = 318, - X2I = 319, - X2S = 320, - X2X = 321, - XPRINT = 322, - OR = 323, - AND = 324, - NE = 325, - EQ = 326, - GE = 327, - LE = 328, - RS = 329, - LS = 330, - IN_OP = 331, - UNARY = 332, - DEC = 333, - INC = 334, - CAST = 335, - MAXTOKEN = 336 - }; -#endif -/* Tokens. */ -#define MINTOKEN 258 -#define INTEGER 259 -#define UNSIGNED 260 -#define CHARACTER 261 -#define FLOATING 262 -#define STRING 263 -#define VOIDTYPE 264 -#define STATIC 265 -#define ADDRESS 266 -#define ARRAY 267 -#define BREAK 268 -#define CALL 269 -#define CASE 270 -#define CONSTANT 271 -#define CONTINUE 272 -#define DECLARE 273 -#define DEFAULT 274 -#define DYNAMIC 275 -#define ELSE 276 -#define EXIT 277 -#define FOR 278 -#define FUNCTION 279 -#define GSUB 280 -#define ITERATE 281 -#define ITERATER 282 -#define ID 283 -#define IF 284 -#define LABEL 285 -#define MEMBER 286 -#define NAME 287 -#define POS 288 -#define PRAGMA 289 -#define PRE 290 -#define PRINT 291 -#define PRINTF 292 -#define PROCEDURE 293 -#define QUERY 294 -#define RAND 295 -#define RETURN 296 -#define SCANF 297 -#define SPLIT 298 -#define SPRINTF 299 -#define SRAND 300 -#define SSCANF 301 -#define SUB 302 -#define SUBSTR 303 -#define SWITCH 304 -#define TOKENS 305 -#define UNSET 306 -#define WHILE 307 -#define F2I 308 -#define F2S 309 -#define I2F 310 -#define I2S 311 -#define S2B 312 -#define S2F 313 -#define S2I 314 -#define F2X 315 -#define I2X 316 -#define S2X 317 -#define X2F 318 -#define X2I 319 -#define X2S 320 -#define X2X 321 -#define XPRINT 322 -#define OR 323 -#define AND 324 -#define NE 325 -#define EQ 326 -#define GE 327 -#define LE 328 -#define RS 329 -#define LS 330 -#define IN_OP 331 -#define UNARY 332 -#define DEC 333 -#define INC 334 -#define CAST 335 -#define MAXTOKEN 336 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 387 of yacc.c */ -#line 39 "../../lib/expr/exparse.y" - - struct Exnode_s*expr; - double floating; - struct Exref_s* reference; - struct Exid_s* id; - Sflong_t integer; - int op; - char* string; - void* user; - struct Exbuf_s* buffer; - - -/* Line 387 of yacc.c */ -#line 310 "y.tab.c" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ - -/* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 166 "../../lib/expr/exparse.y" - - -#include "exgram.h" - - -/* Line 390 of yacc.c */ -#line 344 "y.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; -#else -typedef short int yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) -#else -static int -YYID (yyi) - int yyi; -#endif -{ - return yyi; -} -#endif - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1112 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 107 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 44 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 142 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 286 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 336 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 91, 2, 93, 2, 90, 76, 2, - 98, 103, 88, 85, 68, 86, 106, 89, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 71, 102, - 79, 69, 80, 70, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 104, 2, 105, 75, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 100, 74, 101, 92, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 72, 73, 77, 78, 81, 82, 83, - 84, 87, 94, 95, 96, 97, 99 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 6, 7, 10, 11, 16, 17, 20, - 24, 27, 28, 29, 36, 43, 49, 59, 65, 70, - 77, 83, 84, 93, 97, 101, 105, 106, 109, 112, - 114, 117, 121, 124, 125, 127, 129, 133, 134, 139, - 141, 143, 145, 147, 149, 151, 152, 155, 156, 158, - 162, 167, 171, 175, 179, 183, 187, 191, 195, 199, - 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, - 243, 244, 245, 253, 256, 259, 262, 265, 268, 271, - 276, 281, 286, 291, 296, 303, 312, 317, 321, 325, - 330, 335, 340, 345, 350, 353, 356, 359, 363, 366, - 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, - 389, 391, 393, 395, 398, 402, 404, 405, 408, 412, - 413, 417, 418, 420, 422, 426, 427, 429, 431, 433, - 437, 438, 442, 443, 445, 449, 452, 455, 456, 459, - 461, 462, 463 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = -{ - 108, 0, -1, 112, 109, -1, -1, 109, 110, -1, - -1, 30, 71, 111, 112, -1, -1, 112, 113, -1, - 100, 112, 101, -1, 128, 102, -1, -1, -1, 121, - 114, 18, 115, 122, 102, -1, 29, 98, 129, 103, - 113, 127, -1, 23, 98, 136, 103, 113, -1, 23, - 98, 128, 102, 128, 102, 128, 103, 113, -1, 27, - 98, 136, 103, 113, -1, 51, 98, 20, 103, -1, - 51, 98, 20, 68, 129, 103, -1, 52, 98, 129, - 103, 113, -1, -1, 49, 98, 129, 116, 103, 100, - 117, 101, -1, 13, 128, 102, -1, 17, 128, 102, - -1, 41, 128, 102, -1, -1, 117, 118, -1, 119, - 112, -1, 120, -1, 119, 120, -1, 15, 133, 71, - -1, 19, 71, -1, -1, 10, -1, 123, -1, 122, - 68, 123, -1, -1, 125, 124, 137, 148, -1, 32, - -1, 20, -1, 28, -1, 24, -1, 32, -1, 20, - -1, -1, 21, 113, -1, -1, 129, -1, 98, 129, - 103, -1, 98, 18, 103, 129, -1, 129, 79, 129, - -1, 129, 86, 129, -1, 129, 88, 129, -1, 129, - 89, 129, -1, 129, 90, 129, -1, 129, 84, 129, - -1, 129, 83, 129, -1, 129, 80, 129, -1, 129, - 82, 129, -1, 129, 81, 129, -1, 129, 78, 129, - -1, 129, 77, 129, -1, 129, 76, 129, -1, 129, - 74, 129, -1, 129, 75, 129, -1, 129, 85, 129, - -1, 129, 73, 129, -1, 129, 72, 129, -1, 129, - 68, 129, -1, -1, -1, 129, 70, 130, 129, 71, - 131, 129, -1, 91, 129, -1, 93, 20, -1, 92, - 129, -1, 86, 129, -1, 85, 129, -1, 76, 136, - -1, 12, 104, 139, 105, -1, 24, 98, 139, 103, - -1, 25, 98, 139, 103, -1, 47, 98, 139, 103, - -1, 48, 98, 139, 103, -1, 132, 98, 129, 68, - 20, 103, -1, 132, 98, 129, 68, 20, 68, 129, - 103, -1, 22, 98, 129, 103, -1, 40, 98, 103, - -1, 45, 98, 103, -1, 45, 98, 129, 103, -1, - 38, 98, 139, 103, -1, 36, 98, 139, 103, -1, - 134, 98, 139, 103, -1, 135, 98, 139, 103, -1, - 136, 147, -1, 96, 136, -1, 136, 96, -1, 129, - 87, 20, -1, 95, 136, -1, 136, 95, -1, 133, - -1, 43, -1, 50, -1, 16, -1, 7, -1, 4, - -1, 8, -1, 5, -1, 37, -1, 39, -1, 44, - -1, 42, -1, 46, -1, 28, 145, -1, 20, 138, - 145, -1, 32, -1, -1, 104, 105, -1, 104, 18, - 105, -1, -1, 104, 129, 105, -1, -1, 140, -1, - 129, -1, 140, 68, 129, -1, -1, 18, -1, 142, - -1, 143, -1, 142, 68, 143, -1, -1, 18, 144, - 126, -1, -1, 146, -1, 106, 28, 146, -1, 106, - 28, -1, 106, 32, -1, -1, 69, 129, -1, 147, - -1, -1, -1, 98, 149, 141, 150, 103, 100, 112, - 101, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 174, 174, 195, 196, 199, 199, 239, 242, 269, - 273, 277, 277, 277, 282, 292, 305, 320, 333, 341, - 352, 362, 362, 374, 386, 390, 403, 433, 436, 468, - 469, 472, 493, 500, 503, 509, 510, 517, 517, 573, - 574, 575, 576, 579, 580, 584, 587, 594, 597, 600, - 604, 608, 661, 665, 669, 673, 677, 681, 685, 689, - 693, 697, 701, 705, 709, 713, 717, 721, 734, 738, - 748, 748, 748, 789, 809, 816, 820, 824, 828, 832, - 836, 846, 850, 854, 858, 862, 866, 872, 876, 880, - 886, 891, 895, 920, 956, 980, 988, 996, 1007, 1011, - 1015, 1018, 1019, 1021, 1029, 1034, 1039, 1044, 1051, 1052, - 1053, 1056, 1057, 1060, 1064, 1084, 1097, 1100, 1104, 1118, - 1121, 1128, 1131, 1139, 1144, 1151, 1154, 1160, 1163, 1167, - 1178, 1178, 1191, 1194, 1206, 1225, 1229, 1235, 1238, 1245, - 1246, 1263, 1246 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "MINTOKEN", "INTEGER", "UNSIGNED", - "CHARACTER", "FLOATING", "STRING", "VOIDTYPE", "STATIC", "ADDRESS", - "ARRAY", "BREAK", "CALL", "CASE", "CONSTANT", "CONTINUE", "DECLARE", - "DEFAULT", "DYNAMIC", "ELSE", "EXIT", "FOR", "FUNCTION", "GSUB", - "ITERATE", "ITERATER", "ID", "IF", "LABEL", "MEMBER", "NAME", "POS", - "PRAGMA", "PRE", "PRINT", "PRINTF", "PROCEDURE", "QUERY", "RAND", - "RETURN", "SCANF", "SPLIT", "SPRINTF", "SRAND", "SSCANF", "SUB", - "SUBSTR", "SWITCH", "TOKENS", "UNSET", "WHILE", "F2I", "F2S", "I2F", - "I2S", "S2B", "S2F", "S2I", "F2X", "I2X", "S2X", "X2F", "X2I", "X2S", - "X2X", "XPRINT", "','", "'='", "'?'", "':'", "OR", "AND", "'|'", "'^'", - "'&'", "NE", "EQ", "'<'", "'>'", "GE", "LE", "RS", "LS", "'+'", "'-'", - "IN_OP", "'*'", "'/'", "'%'", "'!'", "'~'", "'#'", "UNARY", "DEC", "INC", - "CAST", "'('", "MAXTOKEN", "'{'", "'}'", "';'", "')'", "'['", "']'", - "'.'", "$accept", "program", "action_list", "action", "$@1", - "statement_list", "statement", "$@2", "$@3", "$@4", "switch_list", - "switch_item", "case_list", "case_item", "static", "dcl_list", - "dcl_item", "$@5", "dcl_name", "name", "else_opt", "expr_opt", "expr", - "$@6", "$@7", "splitop", "constant", "print", "scan", "variable", - "array", "index", "args", "arg_list", "formals", "formal_list", - "formal_item", "$@8", "members", "member", "assign", "initialize", "$@9", - "$@10", YY_NULL -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 44, 61, - 63, 58, 323, 324, 124, 94, 38, 325, 326, 60, - 62, 327, 328, 329, 330, 43, 45, 331, 42, 47, - 37, 33, 126, 35, 332, 333, 334, 335, 40, 336, - 123, 125, 59, 41, 91, 93, 46 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 107, 108, 109, 109, 111, 110, 112, 112, 113, - 113, 114, 115, 113, 113, 113, 113, 113, 113, 113, - 113, 116, 113, 113, 113, 113, 117, 117, 118, 119, - 119, 120, 120, 121, 121, 122, 122, 124, 123, 125, - 125, 125, 125, 126, 126, 127, 127, 128, 128, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 130, 131, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 132, 132, 133, 133, 133, 133, 133, 134, 134, - 134, 135, 135, 136, 136, 136, 137, 137, 137, 138, - 138, 139, 139, 140, 140, 141, 141, 141, 142, 142, - 144, 143, 145, 145, 145, 146, 146, 147, 147, 148, - 149, 150, 148 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 2, 0, 2, 0, 4, 0, 2, 3, - 2, 0, 0, 6, 6, 5, 9, 5, 4, 6, - 5, 0, 8, 3, 3, 3, 0, 2, 2, 1, - 2, 3, 2, 0, 1, 1, 3, 0, 4, 1, - 1, 1, 1, 1, 1, 0, 2, 0, 1, 3, - 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 0, 7, 2, 2, 2, 2, 2, 2, 4, - 4, 4, 4, 4, 6, 8, 4, 3, 3, 4, - 4, 4, 4, 4, 2, 2, 2, 3, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 1, 0, 2, 3, 0, - 3, 0, 1, 1, 3, 0, 1, 1, 1, 3, - 0, 3, 0, 1, 3, 2, 2, 0, 2, 1, - 0, 0, 8 -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 7, 0, 3, 1, 105, 107, 104, 106, 34, 0, - 47, 103, 47, 119, 0, 0, 0, 0, 0, 132, - 0, 115, 0, 108, 0, 109, 0, 47, 111, 101, - 110, 0, 112, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, - 8, 11, 0, 48, 0, 100, 0, 0, 137, 121, - 0, 0, 0, 132, 0, 47, 121, 121, 0, 0, - 113, 133, 0, 121, 121, 0, 0, 0, 121, 121, - 0, 0, 0, 78, 77, 76, 73, 75, 74, 98, - 95, 0, 0, 33, 0, 4, 0, 10, 0, 70, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 121, 0, 99, 96, 94, 123, 0, 122, 23, - 24, 0, 114, 0, 0, 137, 0, 0, 0, 135, - 136, 0, 0, 0, 87, 25, 88, 0, 0, 0, - 21, 0, 0, 0, 49, 9, 5, 12, 69, 0, - 68, 67, 64, 65, 63, 62, 61, 51, 58, 60, - 59, 57, 56, 66, 52, 97, 53, 54, 55, 0, - 0, 0, 138, 79, 0, 120, 86, 47, 33, 80, - 81, 33, 0, 134, 33, 91, 90, 89, 82, 83, - 0, 0, 18, 33, 50, 7, 0, 0, 0, 92, - 93, 124, 0, 15, 17, 135, 45, 0, 0, 20, - 6, 40, 42, 41, 39, 0, 35, 37, 71, 119, - 47, 33, 14, 26, 19, 0, 13, 116, 0, 0, - 84, 0, 46, 0, 36, 0, 137, 72, 0, 33, - 0, 0, 22, 27, 7, 29, 0, 117, 140, 139, - 38, 85, 16, 0, 32, 28, 30, 118, 125, 31, - 130, 141, 127, 128, 0, 0, 0, 44, 43, 131, - 0, 130, 129, 7, 33, 142 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 49, 95, 205, 2, 50, 96, 206, 200, - 243, 253, 254, 255, 51, 225, 226, 237, 227, 279, - 232, 52, 53, 159, 238, 54, 55, 56, 57, 58, - 246, 63, 127, 128, 271, 272, 273, 274, 70, 71, - 125, 260, 268, 275 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -144 -static const yytype_int16 yypact[] = -{ - -144, 9, 200, -144, -144, -144, -144, -144, -144, -89, - 691, -144, 691, -80, -71, -64, -63, -43, -35, -27, - -11, -144, 11, -144, 16, -144, 20, 691, -144, -144, - -144, 23, -144, 31, 39, 41, -144, 56, 57, 1, - 691, 691, 691, 691, 79, 1, 1, 596, -144, 92, - -144, -144, 49, 872, 58, -144, 60, 61, -37, 691, - 65, 66, 691, -27, 691, 691, 691, 691, 1, -12, - -144, -144, 691, 691, 691, 59, 68, 88, 691, 691, - 691, 140, 691, -144, -144, -144, -144, -144, -144, -144, - -144, 72, 284, 299, 100, -144, 158, -144, 691, -144, - 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, - 691, 691, 691, 691, 691, 143, 691, 691, 691, 691, - 691, 691, 691, -144, -144, -144, 916, 77, 109, -144, - -144, 185, -144, 383, 83, -56, 84, 85, 95, 93, - -144, 482, 97, 98, -144, -144, -144, 577, 106, 108, - 872, -51, 672, 691, -144, -144, -144, -144, 916, 691, - 934, 951, 967, 982, 996, 1010, 1010, 1022, 1022, 1022, - 1022, 107, 107, 53, 53, -144, -144, -144, -144, 895, - 111, 112, 916, -144, 691, -144, -144, 691, 497, -144, - -144, 497, 29, -144, 497, -144, -144, -144, -144, -144, - 116, 691, -144, 497, -144, -144, 87, 849, 786, -144, - -144, 916, 124, -144, -144, -144, 168, 90, 767, -144, - 200, -144, -144, -144, -144, -49, -144, -144, -144, -54, - 691, 497, -144, -144, -144, 87, -144, 126, 691, 691, - -144, 128, -144, -7, -144, -16, -44, 916, 815, 497, - 145, 162, -144, -144, 86, -144, 129, -144, -144, -144, - -144, -144, -144, 183, -144, 200, -144, -144, 238, -144, - 174, -144, 210, -144, -10, 176, 262, -144, -144, -144, - 181, -144, -144, -144, 398, -144 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -144, -144, -144, -144, -144, -48, -143, -144, -144, -144, - -144, -144, -144, 28, -144, -144, 48, -144, -144, -144, - -144, -9, -36, -144, -144, -144, 34, -144, -144, 101, - -144, -144, 24, -144, -144, -144, 12, -144, 224, 150, - 51, -144, -144, -144 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -127 -static const yytype_int16 yytable[] = -{ - 93, 60, 256, 61, 84, 85, 86, 87, 250, 3, - 277, 92, 251, 122, 239, 59, 139, 201, 76, 235, - 140, 13, 278, 126, 62, 122, 131, 64, 133, 19, - 126, 126, 122, 21, 65, 66, 141, 126, 126, 123, - 124, 147, 126, 126, 150, 213, 152, 188, 214, 240, - 62, 216, 202, 236, 258, 67, 134, 215, 123, 124, - 219, 140, 158, 68, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 69, - 176, 177, 178, 179, 126, 126, 182, 72, 242, 257, - 136, 137, 4, 5, 252, 6, 7, 142, 143, 88, - 9, 250, 148, 149, 11, 251, 262, 221, 13, 73, - 14, 222, 16, 17, 74, 223, 19, 204, 75, 224, - 21, 77, 94, 207, 22, 23, 24, 25, 26, 78, - 28, 29, 30, 31, 32, 33, 34, 79, 36, 80, - 83, 116, 117, 118, 180, 181, 89, 90, 211, 4, - 5, 97, 6, 7, 81, 82, 119, 220, 120, 121, - 151, 11, 144, 175, 39, 218, 135, 129, 130, 138, - 145, 156, 158, 40, 41, 153, 157, 184, 212, 42, - 43, 44, 183, 45, 46, 187, 47, 189, 190, 231, - 233, 146, 113, 114, 115, 116, 117, 118, 191, 192, - 195, 196, 247, 248, 4, 5, 265, 6, 7, 198, - 8, 199, 9, 10, 209, 210, 11, 12, -33, 217, - 13, 241, 14, 15, 16, 17, 230, 18, 19, 20, - 245, 249, 21, 264, 267, 284, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 98, 269, 99, 270, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 39, -126, 276, 280, - 281, 283, 266, 244, 263, 40, 41, 132, 282, 193, - 185, 42, 43, 44, 0, 45, 46, 259, 47, 0, - 48, 0, -47, 4, 5, 0, 6, 7, 0, 8, - 0, 9, 10, 0, 0, 11, 12, 0, 0, 13, - 0, 14, 15, 16, 17, 0, 18, 19, 20, 0, - 0, 21, 0, 0, 0, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 98, 0, 99, 0, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 39, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 41, 0, 154, 0, 0, - 42, 43, 44, 0, 45, 46, 0, 47, 0, 48, - 155, -47, 4, 5, 0, 6, 7, 0, 8, 0, - 9, 10, 0, 0, 11, 12, 0, 0, 13, 0, - 14, 15, 16, 17, 0, 18, 19, 20, 0, 0, - 21, 0, 0, 0, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 98, 0, 99, 0, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 39, 0, 0, 0, 0, 0, - 0, 0, 0, 40, 41, 0, 186, 0, 0, 42, - 43, 44, 0, 45, 46, 0, 47, 0, 48, 285, - -47, 4, 5, 0, 6, 7, 0, 8, 0, 9, - 10, 0, 0, 11, 12, 0, 0, 13, 0, 14, - 15, 16, 17, 0, 18, 19, 20, 0, 0, 21, - 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 98, 0, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 39, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 41, 0, 194, 0, 0, 42, 43, - 44, 0, 45, 46, 0, 47, 0, 48, 0, -47, - 4, 5, 0, 6, 7, 0, 0, 0, 9, 0, - 0, 0, 11, 0, 91, 0, 13, 0, 14, 0, - 16, 17, 0, 0, 19, 0, 0, 0, 21, 0, - 0, 0, 22, 23, 24, 25, 26, 0, 28, 29, - 30, 31, 32, 33, 34, 98, 36, 99, 0, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 197, 40, 41, 0, 0, 0, 0, 42, 43, 44, - 0, 45, 46, 0, 47, 4, 5, 0, 6, 7, - 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, - 0, 13, 0, 14, 0, 16, 17, 0, 0, 19, - 0, 0, 0, 21, 0, 0, 0, 22, 23, 24, - 25, 26, 0, 28, 29, 30, 31, 32, 33, 34, - 98, 36, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 0, 0, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 0, 203, 40, 41, 0, 0, - 0, 0, 42, 43, 44, 0, 45, 46, 0, 47, - 4, 5, 0, 6, 7, 0, 0, 0, 9, 0, - 0, 0, 11, 0, 0, 0, 229, 0, 14, 0, - 16, 17, 0, 0, 19, 0, 0, 0, 21, 0, - 0, 0, 22, 23, 24, 25, 26, 0, 28, 29, - 30, 31, 32, 33, 34, 98, 36, 99, 0, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 234, 40, 41, 0, 0, 0, 0, 42, 43, 44, - 0, 45, 46, 98, 47, 99, 0, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 261, 99, - 228, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 98, 0, 99, 0, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 208, 0, 99, 0, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 99, 0, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, -127, -127, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -127, -127, -127, -127, 111, 112, 113, 114, 115, - 116, 117, 118 -}; - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-144))) - -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-127))) - -static const yytype_int16 yycheck[] = -{ - 48, 10, 18, 12, 40, 41, 42, 43, 15, 0, - 20, 47, 19, 69, 68, 104, 28, 68, 27, 68, - 32, 20, 32, 59, 104, 69, 62, 98, 64, 28, - 66, 67, 69, 32, 98, 98, 72, 73, 74, 95, - 96, 77, 78, 79, 80, 188, 82, 103, 191, 103, - 104, 194, 103, 102, 98, 98, 65, 28, 95, 96, - 203, 32, 98, 98, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 106, - 116, 117, 118, 119, 120, 121, 122, 98, 231, 105, - 66, 67, 4, 5, 101, 7, 8, 73, 74, 20, - 12, 15, 78, 79, 16, 19, 249, 20, 20, 98, - 22, 24, 24, 25, 98, 28, 28, 153, 98, 32, - 32, 98, 30, 159, 36, 37, 38, 39, 40, 98, - 42, 43, 44, 45, 46, 47, 48, 98, 50, 98, - 39, 88, 89, 90, 120, 121, 45, 46, 184, 4, - 5, 102, 7, 8, 98, 98, 98, 205, 98, 98, - 20, 16, 103, 20, 76, 201, 65, 102, 102, 68, - 102, 71, 208, 85, 86, 103, 18, 68, 187, 91, - 92, 93, 105, 95, 96, 102, 98, 103, 103, 21, - 100, 103, 85, 86, 87, 88, 89, 90, 103, 106, - 103, 103, 238, 239, 4, 5, 254, 7, 8, 103, - 10, 103, 12, 13, 103, 103, 16, 17, 18, 103, - 20, 230, 22, 23, 24, 25, 102, 27, 28, 29, - 104, 103, 32, 71, 105, 283, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 68, 71, 70, 18, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 76, 103, 68, 103, - 18, 100, 254, 235, 250, 85, 86, 63, 276, 139, - 105, 91, 92, 93, -1, 95, 96, 246, 98, -1, - 100, -1, 102, 4, 5, -1, 7, 8, -1, 10, - -1, 12, 13, -1, -1, 16, 17, -1, -1, 20, - -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, - -1, 32, -1, -1, -1, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 68, -1, 70, -1, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 76, -1, -1, -1, -1, - -1, -1, -1, -1, 85, 86, -1, 103, -1, -1, - 91, 92, 93, -1, 95, 96, -1, 98, -1, 100, - 101, 102, 4, 5, -1, 7, 8, -1, 10, -1, - 12, 13, -1, -1, 16, 17, -1, -1, 20, -1, - 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, - 32, -1, -1, -1, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 68, -1, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 76, -1, -1, -1, -1, -1, - -1, -1, -1, 85, 86, -1, 103, -1, -1, 91, - 92, 93, -1, 95, 96, -1, 98, -1, 100, 101, - 102, 4, 5, -1, 7, 8, -1, 10, -1, 12, - 13, -1, -1, 16, 17, -1, -1, 20, -1, 22, - 23, 24, 25, -1, 27, 28, 29, -1, -1, 32, - -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 68, -1, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 76, -1, -1, -1, -1, -1, -1, - -1, -1, 85, 86, -1, 103, -1, -1, 91, 92, - 93, -1, 95, 96, -1, 98, -1, 100, -1, 102, - 4, 5, -1, 7, 8, -1, -1, -1, 12, -1, - -1, -1, 16, -1, 18, -1, 20, -1, 22, -1, - 24, 25, -1, -1, 28, -1, -1, -1, 32, -1, - -1, -1, 36, 37, 38, 39, 40, -1, 42, 43, - 44, 45, 46, 47, 48, 68, 50, 70, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, -1, -1, - -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, - 103, 85, 86, -1, -1, -1, -1, 91, 92, 93, - -1, 95, 96, -1, 98, 4, 5, -1, 7, 8, - -1, -1, -1, 12, -1, -1, -1, 16, -1, -1, - -1, 20, -1, 22, -1, 24, 25, -1, -1, 28, - -1, -1, -1, 32, -1, -1, -1, 36, 37, 38, - 39, 40, -1, 42, 43, 44, 45, 46, 47, 48, - 68, 50, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, -1, -1, -1, -1, 76, -1, -1, - -1, -1, -1, -1, -1, 103, 85, 86, -1, -1, - -1, -1, 91, 92, 93, -1, 95, 96, -1, 98, - 4, 5, -1, 7, 8, -1, -1, -1, 12, -1, - -1, -1, 16, -1, -1, -1, 20, -1, 22, -1, - 24, 25, -1, -1, 28, -1, -1, -1, 32, -1, - -1, -1, 36, 37, 38, 39, 40, -1, 42, 43, - 44, 45, 46, 47, 48, 68, 50, 70, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, -1, -1, - -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, - 103, 85, 86, -1, -1, -1, -1, 91, 92, 93, - -1, 95, 96, 68, 98, 70, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 68, 103, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 68, -1, 70, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 68, -1, 70, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 70, -1, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 108, 112, 0, 4, 5, 7, 8, 10, 12, - 13, 16, 17, 20, 22, 23, 24, 25, 27, 28, - 29, 32, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 76, - 85, 86, 91, 92, 93, 95, 96, 98, 100, 109, - 113, 121, 128, 129, 132, 133, 134, 135, 136, 104, - 128, 128, 104, 138, 98, 98, 98, 98, 98, 106, - 145, 146, 98, 98, 98, 98, 128, 98, 98, 98, - 98, 98, 98, 136, 129, 129, 129, 129, 20, 136, - 136, 18, 129, 112, 30, 110, 114, 102, 68, 70, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 98, - 98, 98, 69, 95, 96, 147, 129, 139, 140, 102, - 102, 129, 145, 129, 128, 136, 139, 139, 136, 28, - 32, 129, 139, 139, 103, 102, 103, 129, 139, 139, - 129, 20, 129, 103, 103, 101, 71, 18, 129, 130, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 20, 129, 129, 129, 129, - 139, 139, 129, 105, 68, 105, 103, 102, 103, 103, - 103, 103, 106, 146, 103, 103, 103, 103, 103, 103, - 116, 68, 103, 103, 129, 111, 115, 129, 68, 103, - 103, 129, 128, 113, 113, 28, 113, 103, 129, 113, - 112, 20, 24, 28, 32, 122, 123, 125, 71, 20, - 102, 21, 127, 100, 103, 68, 102, 124, 131, 68, - 103, 128, 113, 117, 123, 104, 137, 129, 129, 103, - 15, 19, 101, 118, 119, 120, 18, 105, 98, 147, - 148, 103, 113, 133, 71, 112, 120, 105, 149, 71, - 18, 141, 142, 143, 144, 150, 68, 20, 32, 126, - 103, 18, 143, 100, 112, 101 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); -# endif - switch (yytype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif -{ - int yynrhs = yyr2[yyrule]; - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULL; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int yychar; - - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); - -/* Number of syntax errors so far. */ -int yynerrs; - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -/* Line 1792 of yacc.c */ -#line 175 "../../lib/expr/exparse.y" - { - if ((yyvsp[(1) - (2)].expr) && !(expr.program->disc->flags & EX_STRICT)) - { - if (expr.program->main.value && !(expr.program->disc->flags & EX_RETAIN)) - exfreenode(expr.program, expr.program->main.value); - if ((yyvsp[(1) - (2)].expr)->op == S2B) - { - Exnode_t* x; - - x = (yyvsp[(1) - (2)].expr); - (yyvsp[(1) - (2)].expr) = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - expr.program->main.lex = PROCEDURE; - expr.program->main.value = exnewnode(expr.program, PROCEDURE, 1, (yyvsp[(1) - (2)].expr)->type, NiL, (yyvsp[(1) - (2)].expr)); - } - } - break; - - case 5: -/* Line 1792 of yacc.c */ -#line 199 "../../lib/expr/exparse.y" - { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("no nested function definitions"); - (yyvsp[(1) - (2)].id)->lex = PROCEDURE; - expr.procedure = (yyvsp[(1) - (2)].id)->value = exnewnode(expr.program, PROCEDURE, 1, (yyvsp[(1) - (2)].id)->type, NiL, NiL); - expr.procedure->type = INTEGER; - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (expr.assigned && !streq((yyvsp[(1) - (2)].id)->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - } - } - break; - - case 6: -/* Line 1792 of yacc.c */ -#line 217 "../../lib/expr/exparse.y" - { - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - if ((yyvsp[(4) - (4)].expr) && (yyvsp[(4) - (4)].expr)->op == S2B) - { - Exnode_t* x; - - x = (yyvsp[(4) - (4)].expr); - (yyvsp[(4) - (4)].expr) = x->data.operand.left; - x->data.operand.left = 0; - exfreenode(expr.program, x); - } - (yyvsp[(1) - (4)].id)->value->data.operand.right = excast(expr.program, (yyvsp[(4) - (4)].expr), (yyvsp[(1) - (4)].id)->type, NiL, 0); - } - break; - - case 7: -/* Line 1792 of yacc.c */ -#line 239 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 243 "../../lib/expr/exparse.y" - { - if (!(yyvsp[(1) - (2)].expr)) - (yyval.expr) = (yyvsp[(2) - (2)].expr); - else if (!(yyvsp[(2) - (2)].expr)) - (yyval.expr) = (yyvsp[(1) - (2)].expr); - else if ((yyvsp[(1) - (2)].expr)->op == CONSTANT) - { - exfreenode(expr.program, (yyvsp[(1) - (2)].expr)); - (yyval.expr) = (yyvsp[(2) - (2)].expr); - } -#ifdef UNUSED - else if ((yyvsp[(1) - (2)].expr)->op == ';') - { - (yyval.expr) = (yyvsp[(1) - (2)].expr); - (yyvsp[(1) - (2)].expr)->data.operand.last = (yyvsp[(1) - (2)].expr)->data.operand.last->data.operand.right = exnewnode(expr.program, ';', 1, (yyvsp[(2) - (2)].expr)->type, (yyvsp[(2) - (2)].expr), NiL); - } - else - { - (yyval.expr) = exnewnode(expr.program, ';', 1, (yyvsp[(1) - (2)].expr)->type, (yyvsp[(1) - (2)].expr), NiL); - (yyval.expr)->data.operand.last = (yyval.expr)->data.operand.right = exnewnode(expr.program, ';', 1, (yyvsp[(2) - (2)].expr)->type, (yyvsp[(2) - (2)].expr), NiL); - } -#endif - else (yyval.expr) = exnewnode(expr.program, ';', 1, (yyvsp[(2) - (2)].expr)->type, (yyvsp[(1) - (2)].expr), (yyvsp[(2) - (2)].expr)); - } - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 270 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(2) - (3)].expr); - } - break; - - case 10: -/* Line 1792 of yacc.c */ -#line 274 "../../lib/expr/exparse.y" - { - (yyval.expr) = ((yyvsp[(1) - (2)].expr) && (yyvsp[(1) - (2)].expr)->type == STRING) ? exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(1) - (2)].expr), NiL) : (yyvsp[(1) - (2)].expr); - } - break; - - case 11: -/* Line 1792 of yacc.c */ -#line 277 "../../lib/expr/exparse.y" - {expr.instatic=(yyvsp[(1) - (1)].integer);} - break; - - case 12: -/* Line 1792 of yacc.c */ -#line 277 "../../lib/expr/exparse.y" - {expr.declare=(yyvsp[(3) - (3)].id)->type;} - break; - - case 13: -/* Line 1792 of yacc.c */ -#line 278 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(5) - (6)].expr); - expr.declare = 0; - } - break; - - case 14: -/* Line 1792 of yacc.c */ -#line 283 "../../lib/expr/exparse.y" - { - if (exisAssign ((yyvsp[(3) - (6)].expr))) - exwarn ("assignment used as boolean in if statement"); - if ((yyvsp[(3) - (6)].expr)->type == STRING) - (yyvsp[(3) - (6)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(3) - (6)].expr), NiL); - else if (!INTEGRAL((yyvsp[(3) - (6)].expr)->type)) - (yyvsp[(3) - (6)].expr) = excast(expr.program, (yyvsp[(3) - (6)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (6)].id)->index, 1, INTEGER, (yyvsp[(3) - (6)].expr), exnewnode(expr.program, ':', 1, (yyvsp[(5) - (6)].expr) ? (yyvsp[(5) - (6)].expr)->type : 0, (yyvsp[(5) - (6)].expr), (yyvsp[(6) - (6)].expr))); - } - break; - - case 15: -/* Line 1792 of yacc.c */ -#line 293 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ITERATE, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.generate.array = (yyvsp[(3) - (5)].expr); - if (!(yyvsp[(3) - (5)].expr)->data.variable.index || (yyvsp[(3) - (5)].expr)->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - (yyval.expr)->data.generate.index = (yyvsp[(3) - (5)].expr)->data.variable.index->data.variable.symbol; - if ((yyvsp[(3) - (5)].expr)->op == ID && (yyval.expr)->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, (yyvsp[(3) - (5)].expr)->data.variable.index); - (yyvsp[(3) - (5)].expr)->data.variable.index = 0; - (yyval.expr)->data.generate.statement = (yyvsp[(5) - (5)].expr); - } - break; - - case 16: -/* Line 1792 of yacc.c */ -#line 306 "../../lib/expr/exparse.y" - { - if (!(yyvsp[(5) - (9)].expr)) - { - (yyvsp[(5) - (9)].expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (yyvsp[(5) - (9)].expr)->data.constant.value.integer = 1; - } - else if ((yyvsp[(5) - (9)].expr)->type == STRING) - (yyvsp[(5) - (9)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(5) - (9)].expr), NiL); - else if (!INTEGRAL((yyvsp[(5) - (9)].expr)->type)) - (yyvsp[(5) - (9)].expr) = excast(expr.program, (yyvsp[(5) - (9)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (9)].id)->index, 1, INTEGER, (yyvsp[(5) - (9)].expr), exnewnode(expr.program, ';', 1, 0, (yyvsp[(7) - (9)].expr), (yyvsp[(9) - (9)].expr))); - if ((yyvsp[(3) - (9)].expr)) - (yyval.expr) = exnewnode(expr.program, ';', 1, INTEGER, (yyvsp[(3) - (9)].expr), (yyval.expr)); - } - break; - - case 17: -/* Line 1792 of yacc.c */ -#line 321 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ITERATER, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.generate.array = (yyvsp[(3) - (5)].expr); - if (!(yyvsp[(3) - (5)].expr)->data.variable.index || (yyvsp[(3) - (5)].expr)->data.variable.index->op != DYNAMIC) - exerror("simple index variable expected"); - (yyval.expr)->data.generate.index = (yyvsp[(3) - (5)].expr)->data.variable.index->data.variable.symbol; - if ((yyvsp[(3) - (5)].expr)->op == ID && (yyval.expr)->data.generate.index->type != INTEGER) - exerror("integer index variable expected"); - exfreenode(expr.program, (yyvsp[(3) - (5)].expr)->data.variable.index); - (yyvsp[(3) - (5)].expr)->data.variable.index = 0; - (yyval.expr)->data.generate.statement = (yyvsp[(5) - (5)].expr); - } - break; - - case 18: -/* Line 1792 of yacc.c */ -#line 334 "../../lib/expr/exparse.y" - { - if ((yyvsp[(3) - (4)].id)->local.pointer == 0) - exerror("cannot apply unset to non-array %s", (yyvsp[(3) - (4)].id)->name); - (yyval.expr) = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(3) - (4)].id); - (yyval.expr)->data.variable.index = NiL; - } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 342 "../../lib/expr/exparse.y" - { - if ((yyvsp[(3) - (6)].id)->local.pointer == 0) - exerror("cannot apply unset to non-array %s", (yyvsp[(3) - (6)].id)->name); - if (((yyvsp[(3) - (6)].id)->index_type > 0) && ((yyvsp[(5) - (6)].expr)->type != (yyvsp[(3) - (6)].id)->index_type)) - exerror("%s indices must have type %s, not %s", - (yyvsp[(3) - (6)].id)->name, extypename(expr.program, (yyvsp[(3) - (6)].id)->index_type),extypename(expr.program, (yyvsp[(5) - (6)].expr)->type)); - (yyval.expr) = exnewnode(expr.program, UNSET, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(3) - (6)].id); - (yyval.expr)->data.variable.index = (yyvsp[(5) - (6)].expr); - } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 353 "../../lib/expr/exparse.y" - { - if (exisAssign ((yyvsp[(3) - (5)].expr))) - exwarn ("assignment used as boolean in while statement"); - if ((yyvsp[(3) - (5)].expr)->type == STRING) - (yyvsp[(3) - (5)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(3) - (5)].expr), NiL); - else if (!INTEGRAL((yyvsp[(3) - (5)].expr)->type)) - (yyvsp[(3) - (5)].expr) = excast(expr.program, (yyvsp[(3) - (5)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (5)].id)->index, 1, INTEGER, (yyvsp[(3) - (5)].expr), exnewnode(expr.program, ';', 1, 0, NiL, (yyvsp[(5) - (5)].expr))); - } - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 362 "../../lib/expr/exparse.y" - {expr.declare=(yyvsp[(3) - (3)].expr)->type;} - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 363 "../../lib/expr/exparse.y" - { - register Switch_t* sw = expr.swstate; - - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (8)].id)->index, 1, INTEGER, (yyvsp[(3) - (8)].expr), exnewnode(expr.program, DEFAULT, 1, 0, sw->defcase, sw->firstcase)); - expr.swstate = expr.swstate->prev; - if (sw->base) - free(sw->base); - if (sw != &swstate) - free(sw); - expr.declare = 0; - } - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 375 "../../lib/expr/exparse.y" - { - loopop: - if (!(yyvsp[(2) - (3)].expr)) - { - (yyvsp[(2) - (3)].expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (yyvsp[(2) - (3)].expr)->data.constant.value.integer = 1; - } - else if (!INTEGRAL((yyvsp[(2) - (3)].expr)->type)) - (yyvsp[(2) - (3)].expr) = excast(expr.program, (yyvsp[(2) - (3)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (3)].id)->index, 1, INTEGER, (yyvsp[(2) - (3)].expr), NiL); - } - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 387 "../../lib/expr/exparse.y" - { - goto loopop; - } - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 391 "../../lib/expr/exparse.y" - { - if ((yyvsp[(2) - (3)].expr)) - { - if (expr.procedure && !expr.procedure->type) - exerror("return in void function"); - (yyvsp[(2) - (3)].expr) = excast(expr.program, (yyvsp[(2) - (3)].expr), expr.procedure ? expr.procedure->type : INTEGER, NiL, 0); - } - (yyval.expr) = exnewnode(expr.program, RETURN, 1, (yyvsp[(2) - (3)].expr) ? (yyvsp[(2) - (3)].expr)->type : 0, (yyvsp[(2) - (3)].expr), NiL); - } - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 403 "../../lib/expr/exparse.y" - { - register Switch_t* sw; - int n; - - if (expr.swstate) - { - if (!(sw = newof(0, Switch_t, 1, 0))) - { - exnospace(); - sw = &swstate; - } - sw->prev = expr.swstate; - } - else - sw = &swstate; - expr.swstate = sw; - sw->type = expr.declare; - sw->firstcase = 0; - sw->lastcase = 0; - sw->defcase = 0; - sw->def = 0; - n = 8; - if (!(sw->base = newof(0, Extype_t*, n, 0))) - { - exnospace(); - n = 0; - } - sw->cur = sw->base; - sw->last = sw->base + n; - } - break; - - case 28: -/* Line 1792 of yacc.c */ -#line 437 "../../lib/expr/exparse.y" - { - register Switch_t* sw = expr.swstate; - int n; - - (yyval.expr) = exnewnode(expr.program, CASE, 1, 0, (yyvsp[(2) - (2)].expr), NiL); - if (sw->cur > sw->base) - { - if (sw->lastcase) - sw->lastcase->data.select.next = (yyval.expr); - else - sw->firstcase = (yyval.expr); - sw->lastcase = (yyval.expr); - n = sw->cur - sw->base; - sw->cur = sw->base; - (yyval.expr)->data.select.constant = (Extype_t**)exalloc(expr.program, (n + 1) * sizeof(Extype_t*)); - memcpy((yyval.expr)->data.select.constant, sw->base, n * sizeof(Extype_t*)); - (yyval.expr)->data.select.constant[n] = 0; - } - else - (yyval.expr)->data.select.constant = 0; - if (sw->def) - { - sw->def = 0; - if (sw->defcase) - exerror("duplicate default in switch"); - else - sw->defcase = (yyvsp[(2) - (2)].expr); - } - } - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 473 "../../lib/expr/exparse.y" - { - int n; - - if (expr.swstate->cur >= expr.swstate->last) - { - n = expr.swstate->cur - expr.swstate->base; - if (!(expr.swstate->base = newof(expr.swstate->base, Extype_t*, 2 * n, 0))) - { - exerror("too many case labels for switch"); - n = 0; - } - expr.swstate->cur = expr.swstate->base + n; - expr.swstate->last = expr.swstate->base + 2 * n; - } - if (expr.swstate->cur) - { - (yyvsp[(2) - (3)].expr) = excast(expr.program, (yyvsp[(2) - (3)].expr), expr.swstate->type, NiL, 0); - *expr.swstate->cur++ = &((yyvsp[(2) - (3)].expr)->data.constant.value); - } - } - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 494 "../../lib/expr/exparse.y" - { - expr.swstate->def = 1; - } - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 500 "../../lib/expr/exparse.y" - { - (yyval.integer) = 0; - } - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 504 "../../lib/expr/exparse.y" - { - (yyval.integer) = 1; - } - break; - - case 36: -/* Line 1792 of yacc.c */ -#line 511 "../../lib/expr/exparse.y" - { - if ((yyvsp[(3) - (3)].expr)) - (yyval.expr) = (yyvsp[(1) - (3)].expr) ? exnewnode(expr.program, ',', 1, (yyvsp[(3) - (3)].expr)->type, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)) : (yyvsp[(3) - (3)].expr); - } - break; - - case 37: -/* Line 1792 of yacc.c */ -#line 517 "../../lib/expr/exparse.y" - {checkName ((yyvsp[(1) - (1)].id)); expr.id=(yyvsp[(1) - (1)].id);} - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 518 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - if (!(yyvsp[(1) - (4)].id)->type || expr.declare) - (yyvsp[(1) - (4)].id)->type = expr.declare; - if ((yyvsp[(4) - (4)].expr) && (yyvsp[(4) - (4)].expr)->op == PROCEDURE) - { - (yyvsp[(1) - (4)].id)->lex = PROCEDURE; - (yyvsp[(1) - (4)].id)->type = (yyvsp[(4) - (4)].expr)->type; - (yyvsp[(1) - (4)].id)->value = (yyvsp[(4) - (4)].expr); - } - else - { - (yyvsp[(1) - (4)].id)->lex = DYNAMIC; - (yyvsp[(1) - (4)].id)->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - if ((yyvsp[(3) - (4)].integer) && !(yyvsp[(1) - (4)].id)->local.pointer) - { - Dtdisc_t* disc; - - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - if ((yyvsp[(3) - (4)].integer) == INTEGER) { - disc->key = offsetof(Exassoc_t, key); - disc->size = sizeof(Extype_t); - disc->comparf = (Dtcompar_f)cmpKey; - } - else - disc->key = offsetof(Exassoc_t, name); - if (!((yyvsp[(1) - (4)].id)->local.pointer = (char*)dtopen(disc, Dtoset))) - exerror("%s: cannot initialize associative array", (yyvsp[(1) - (4)].id)->name); - (yyvsp[(1) - (4)].id)->index_type = (yyvsp[(3) - (4)].integer); /* -1 indicates no typechecking */ - } - if ((yyvsp[(4) - (4)].expr)) - { - if ((yyvsp[(4) - (4)].expr)->type != (yyvsp[(1) - (4)].id)->type) - { - (yyvsp[(4) - (4)].expr)->type = (yyvsp[(1) - (4)].id)->type; - (yyvsp[(4) - (4)].expr)->data.operand.right = excast(expr.program, (yyvsp[(4) - (4)].expr)->data.operand.right, (yyvsp[(1) - (4)].id)->type, NiL, 0); - } - (yyvsp[(4) - (4)].expr)->data.operand.left = exnewnode(expr.program, DYNAMIC, 0, (yyvsp[(1) - (4)].id)->type, NiL, NiL); - (yyvsp[(4) - (4)].expr)->data.operand.left->data.variable.symbol = (yyvsp[(1) - (4)].id); - (yyval.expr) = (yyvsp[(4) - (4)].expr); -#if UNUSED - if (!expr.program->frame && !expr.program->errors) - { - expr.assigned++; - exeval(expr.program, (yyval.expr), NiL); - } -#endif - } - else if (!(yyvsp[(3) - (4)].integer)) - (yyvsp[(1) - (4)].id)->value->data.value = exzero((yyvsp[(1) - (4)].id)->type); - } - } - break; - - case 45: -/* Line 1792 of yacc.c */ -#line 584 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 46: -/* Line 1792 of yacc.c */ -#line 588 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(2) - (2)].expr); - } - break; - - case 47: -/* Line 1792 of yacc.c */ -#line 594 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 601 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(2) - (3)].expr); - } - break; - - case 50: -/* Line 1792 of yacc.c */ -#line 605 "../../lib/expr/exparse.y" - { - (yyval.expr) = ((yyvsp[(4) - (4)].expr)->type == (yyvsp[(2) - (4)].id)->type) ? (yyvsp[(4) - (4)].expr) : excast(expr.program, (yyvsp[(4) - (4)].expr), (yyvsp[(2) - (4)].id)->type, NiL, 0); - } - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 609 "../../lib/expr/exparse.y" - { - int rel; - - relational: - rel = INTEGER; - goto coerce; - binary: - rel = 0; - coerce: - if (!(yyvsp[(1) - (3)].expr)->type) - { - if (!(yyvsp[(3) - (3)].expr)->type) - (yyvsp[(1) - (3)].expr)->type = (yyvsp[(3) - (3)].expr)->type = rel ? STRING : INTEGER; - else - (yyvsp[(1) - (3)].expr)->type = (yyvsp[(3) - (3)].expr)->type; - } - else if (!(yyvsp[(3) - (3)].expr)->type) - (yyvsp[(3) - (3)].expr)->type = (yyvsp[(1) - (3)].expr)->type; - if ((yyvsp[(1) - (3)].expr)->type != (yyvsp[(3) - (3)].expr)->type) - { - if ((yyvsp[(1) - (3)].expr)->type == STRING) - (yyvsp[(1) - (3)].expr) = excast(expr.program, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)->type, (yyvsp[(3) - (3)].expr), 0); - else if ((yyvsp[(3) - (3)].expr)->type == STRING) - (yyvsp[(3) - (3)].expr) = excast(expr.program, (yyvsp[(3) - (3)].expr), (yyvsp[(1) - (3)].expr)->type, (yyvsp[(1) - (3)].expr), 0); - else if ((yyvsp[(1) - (3)].expr)->type == FLOATING) - (yyvsp[(3) - (3)].expr) = excast(expr.program, (yyvsp[(3) - (3)].expr), FLOATING, (yyvsp[(1) - (3)].expr), 0); - else if ((yyvsp[(3) - (3)].expr)->type == FLOATING) - (yyvsp[(1) - (3)].expr) = excast(expr.program, (yyvsp[(1) - (3)].expr), FLOATING, (yyvsp[(3) - (3)].expr), 0); - } - if (!rel) - rel = ((yyvsp[(1) - (3)].expr)->type == STRING) ? STRING : (((yyvsp[(1) - (3)].expr)->type == UNSIGNED) ? UNSIGNED : (yyvsp[(3) - (3)].expr)->type); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(2) - (3)].op), 1, rel, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); - if (!expr.program->errors && (yyvsp[(1) - (3)].expr)->op == CONSTANT && (yyvsp[(3) - (3)].expr)->op == CONSTANT) - { - (yyval.expr)->data.constant.value = exeval(expr.program, (yyval.expr), NiL); - /* If a constant string, re-allocate from program heap. This is because the - * value was constructed from string operators, which create a value in the - * temporary heap, which is cleared when exeval is called again. - */ - if ((yyval.expr)->type == STRING) { - (yyval.expr)->data.constant.value.string = - vmstrdup(expr.program->vm, (yyval.expr)->data.constant.value.string); - } - (yyval.expr)->binary = 0; - (yyval.expr)->op = CONSTANT; - exfreenode(expr.program, (yyvsp[(1) - (3)].expr)); - exfreenode(expr.program, (yyvsp[(3) - (3)].expr)); - } - else if (!BUILTIN((yyvsp[(1) - (3)].expr)->type) || !BUILTIN((yyvsp[(3) - (3)].expr)->type)) { - checkBinary(expr.program, (yyvsp[(1) - (3)].expr), (yyval.expr), (yyvsp[(3) - (3)].expr)); - } - } - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 662 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 666 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 670 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 674 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 56: -/* Line 1792 of yacc.c */ -#line 678 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 57: -/* Line 1792 of yacc.c */ -#line 682 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 58: -/* Line 1792 of yacc.c */ -#line 686 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 690 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 60: -/* Line 1792 of yacc.c */ -#line 694 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 61: -/* Line 1792 of yacc.c */ -#line 698 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 62: -/* Line 1792 of yacc.c */ -#line 702 "../../lib/expr/exparse.y" - { - goto relational; - } - break; - - case 63: -/* Line 1792 of yacc.c */ -#line 706 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 64: -/* Line 1792 of yacc.c */ -#line 710 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 65: -/* Line 1792 of yacc.c */ -#line 714 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 66: -/* Line 1792 of yacc.c */ -#line 718 "../../lib/expr/exparse.y" - { - goto binary; - } - break; - - case 67: -/* Line 1792 of yacc.c */ -#line 722 "../../lib/expr/exparse.y" - { - logical: - if ((yyvsp[(1) - (3)].expr)->type == STRING) - (yyvsp[(1) - (3)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(1) - (3)].expr), NiL); - else if (!BUILTIN((yyvsp[(1) - (3)].expr)->type)) - (yyvsp[(1) - (3)].expr) = excast(expr.program, (yyvsp[(1) - (3)].expr), INTEGER, NiL, 0); - if ((yyvsp[(3) - (3)].expr)->type == STRING) - (yyvsp[(3) - (3)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(3) - (3)].expr), NiL); - else if (!BUILTIN((yyvsp[(3) - (3)].expr)->type)) - (yyvsp[(3) - (3)].expr) = excast(expr.program, (yyvsp[(3) - (3)].expr), INTEGER, NiL, 0); - goto binary; - } - break; - - case 68: -/* Line 1792 of yacc.c */ -#line 735 "../../lib/expr/exparse.y" - { - goto logical; - } - break; - - case 69: -/* Line 1792 of yacc.c */ -#line 739 "../../lib/expr/exparse.y" - { - if ((yyvsp[(1) - (3)].expr)->op == CONSTANT) - { - exfreenode(expr.program, (yyvsp[(1) - (3)].expr)); - (yyval.expr) = (yyvsp[(3) - (3)].expr); - } - else - (yyval.expr) = exnewnode(expr.program, ',', 1, (yyvsp[(3) - (3)].expr)->type, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); - } - break; - - case 70: -/* Line 1792 of yacc.c */ -#line 748 "../../lib/expr/exparse.y" - {expr.nolabel=1;} - break; - - case 71: -/* Line 1792 of yacc.c */ -#line 748 "../../lib/expr/exparse.y" - {expr.nolabel=0;} - break; - - case 72: -/* Line 1792 of yacc.c */ -#line 749 "../../lib/expr/exparse.y" - { - if (!(yyvsp[(4) - (7)].expr)->type) - { - if (!(yyvsp[(7) - (7)].expr)->type) - (yyvsp[(4) - (7)].expr)->type = (yyvsp[(7) - (7)].expr)->type = INTEGER; - else - (yyvsp[(4) - (7)].expr)->type = (yyvsp[(7) - (7)].expr)->type; - } - else if (!(yyvsp[(7) - (7)].expr)->type) - (yyvsp[(7) - (7)].expr)->type = (yyvsp[(4) - (7)].expr)->type; - if ((yyvsp[(1) - (7)].expr)->type == STRING) - (yyvsp[(1) - (7)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(1) - (7)].expr), NiL); - else if (!INTEGRAL((yyvsp[(1) - (7)].expr)->type)) - (yyvsp[(1) - (7)].expr) = excast(expr.program, (yyvsp[(1) - (7)].expr), INTEGER, NiL, 0); - if ((yyvsp[(4) - (7)].expr)->type != (yyvsp[(7) - (7)].expr)->type) - { - if ((yyvsp[(4) - (7)].expr)->type == STRING || (yyvsp[(7) - (7)].expr)->type == STRING) - exerror("if statement string type mismatch"); - else if ((yyvsp[(4) - (7)].expr)->type == FLOATING) - (yyvsp[(7) - (7)].expr) = excast(expr.program, (yyvsp[(7) - (7)].expr), FLOATING, NiL, 0); - else if ((yyvsp[(7) - (7)].expr)->type == FLOATING) - (yyvsp[(4) - (7)].expr) = excast(expr.program, (yyvsp[(4) - (7)].expr), FLOATING, NiL, 0); - } - if ((yyvsp[(1) - (7)].expr)->op == CONSTANT) - { - if ((yyvsp[(1) - (7)].expr)->data.constant.value.integer) - { - (yyval.expr) = (yyvsp[(4) - (7)].expr); - exfreenode(expr.program, (yyvsp[(7) - (7)].expr)); - } - else - { - (yyval.expr) = (yyvsp[(7) - (7)].expr); - exfreenode(expr.program, (yyvsp[(4) - (7)].expr)); - } - exfreenode(expr.program, (yyvsp[(1) - (7)].expr)); - } - else - (yyval.expr) = exnewnode(expr.program, '?', 1, (yyvsp[(4) - (7)].expr)->type, (yyvsp[(1) - (7)].expr), exnewnode(expr.program, ':', 1, (yyvsp[(4) - (7)].expr)->type, (yyvsp[(4) - (7)].expr), (yyvsp[(7) - (7)].expr))); - } - break; - - case 73: -/* Line 1792 of yacc.c */ -#line 790 "../../lib/expr/exparse.y" - { - iunary: - if ((yyvsp[(2) - (2)].expr)->type == STRING) - (yyvsp[(2) - (2)].expr) = exnewnode(expr.program, S2B, 1, INTEGER, (yyvsp[(2) - (2)].expr), NiL); - else if (!INTEGRAL((yyvsp[(2) - (2)].expr)->type)) - (yyvsp[(2) - (2)].expr) = excast(expr.program, (yyvsp[(2) - (2)].expr), INTEGER, NiL, 0); - unary: - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (2)].op), 1, (yyvsp[(2) - (2)].expr)->type == UNSIGNED ? INTEGER : (yyvsp[(2) - (2)].expr)->type, (yyvsp[(2) - (2)].expr), NiL); - if ((yyvsp[(2) - (2)].expr)->op == CONSTANT) - { - (yyval.expr)->data.constant.value = exeval(expr.program, (yyval.expr), NiL); - (yyval.expr)->binary = 0; - (yyval.expr)->op = CONSTANT; - exfreenode(expr.program, (yyvsp[(2) - (2)].expr)); - } - else if (!BUILTIN((yyvsp[(2) - (2)].expr)->type)) { - checkBinary(expr.program, (yyvsp[(2) - (2)].expr), (yyval.expr), 0); - } - } - break; - - case 74: -/* Line 1792 of yacc.c */ -#line 810 "../../lib/expr/exparse.y" - { - if ((yyvsp[(2) - (2)].id)->local.pointer == 0) - exerror("cannot apply '#' operator to non-array %s", (yyvsp[(2) - (2)].id)->name); - (yyval.expr) = exnewnode(expr.program, '#', 0, INTEGER, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(2) - (2)].id); - } - break; - - case 75: -/* Line 1792 of yacc.c */ -#line 817 "../../lib/expr/exparse.y" - { - goto iunary; - } - break; - - case 76: -/* Line 1792 of yacc.c */ -#line 821 "../../lib/expr/exparse.y" - { - goto unary; - } - break; - - case 77: -/* Line 1792 of yacc.c */ -#line 825 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(2) - (2)].expr); - } - break; - - case 78: -/* Line 1792 of yacc.c */ -#line 829 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ADDRESS, 0, T((yyvsp[(2) - (2)].expr)->type), (yyvsp[(2) - (2)].expr), NiL); - } - break; - - case 79: -/* Line 1792 of yacc.c */ -#line 833 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ARRAY, 1, T((yyvsp[(1) - (4)].id)->type), call(0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].expr)), (yyvsp[(3) - (4)].expr)); - } - break; - - case 80: -/* Line 1792 of yacc.c */ -#line 837 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, FUNCTION, 1, T((yyvsp[(1) - (4)].id)->type), call(0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].expr)), (yyvsp[(3) - (4)].expr)); -#ifdef UNUSED - if (!expr.program->disc->getf) - exerror("%s: function references not supported", (yyval.expr)->data.operand.left->data.variable.symbol->name); - else if (expr.program->disc->reff) - (*expr.program->disc->reff)(expr.program, (yyval.expr)->data.operand.left, (yyval.expr)->data.operand.left->data.variable.symbol, 0, NiL, EX_CALL, expr.program->disc); -#endif - } - break; - - case 81: -/* Line 1792 of yacc.c */ -#line 847 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewsub (expr.program, (yyvsp[(3) - (4)].expr), GSUB); - } - break; - - case 82: -/* Line 1792 of yacc.c */ -#line 851 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewsub (expr.program, (yyvsp[(3) - (4)].expr), SUB); - } - break; - - case 83: -/* Line 1792 of yacc.c */ -#line 855 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewsubstr (expr.program, (yyvsp[(3) - (4)].expr)); - } - break; - - case 84: -/* Line 1792 of yacc.c */ -#line 859 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewsplit (expr.program, (yyvsp[(1) - (6)].id)->index, (yyvsp[(5) - (6)].id), (yyvsp[(3) - (6)].expr), NiL); - } - break; - - case 85: -/* Line 1792 of yacc.c */ -#line 863 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewsplit (expr.program, (yyvsp[(1) - (8)].id)->index, (yyvsp[(5) - (8)].id), (yyvsp[(3) - (8)].expr), (yyvsp[(7) - (8)].expr)); - } - break; - - case 86: -/* Line 1792 of yacc.c */ -#line 867 "../../lib/expr/exparse.y" - { - if (!INTEGRAL((yyvsp[(3) - (4)].expr)->type)) - (yyvsp[(3) - (4)].expr) = excast(expr.program, (yyvsp[(3) - (4)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, EXIT, 1, INTEGER, (yyvsp[(3) - (4)].expr), NiL); - } - break; - - case 87: -/* Line 1792 of yacc.c */ -#line 873 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, RAND, 0, FLOATING, NiL, NiL); - } - break; - - case 88: -/* Line 1792 of yacc.c */ -#line 877 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, SRAND, 0, INTEGER, NiL, NiL); - } - break; - - case 89: -/* Line 1792 of yacc.c */ -#line 881 "../../lib/expr/exparse.y" - { - if (!INTEGRAL((yyvsp[(3) - (4)].expr)->type)) - (yyvsp[(3) - (4)].expr) = excast(expr.program, (yyvsp[(3) - (4)].expr), INTEGER, NiL, 0); - (yyval.expr) = exnewnode(expr.program, SRAND, 1, INTEGER, (yyvsp[(3) - (4)].expr), NiL); - } - break; - - case 90: -/* Line 1792 of yacc.c */ -#line 887 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CALL, 1, (yyvsp[(1) - (4)].id)->type, NiL, (yyvsp[(3) - (4)].expr)); - (yyval.expr)->data.call.procedure = (yyvsp[(1) - (4)].id); - } - break; - - case 91: -/* Line 1792 of yacc.c */ -#line 892 "../../lib/expr/exparse.y" - { - (yyval.expr) = exprint(expr.program, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].expr)); - } - break; - - case 92: -/* Line 1792 of yacc.c */ -#line 896 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (4)].id)->index, 0, (yyvsp[(1) - (4)].id)->type, NiL, NiL); - if ((yyvsp[(3) - (4)].expr) && (yyvsp[(3) - (4)].expr)->data.operand.left->type == INTEGER) - { - (yyval.expr)->data.print.descriptor = (yyvsp[(3) - (4)].expr)->data.operand.left; - (yyvsp[(3) - (4)].expr) = (yyvsp[(3) - (4)].expr)->data.operand.right; - } - else - switch ((yyvsp[(1) - (4)].id)->index) - { - case QUERY: - (yyval.expr)->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.print.descriptor->data.constant.value.integer = 2; - break; - case PRINTF: - (yyval.expr)->data.print.descriptor = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.print.descriptor->data.constant.value.integer = 1; - break; - case SPRINTF: - (yyval.expr)->data.print.descriptor = 0; - break; - } - (yyval.expr)->data.print.args = preprint((yyvsp[(3) - (4)].expr)); - } - break; - - case 93: -/* Line 1792 of yacc.c */ -#line 921 "../../lib/expr/exparse.y" - { - register Exnode_t* x; - - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (4)].id)->index, 0, (yyvsp[(1) - (4)].id)->type, NiL, NiL); - if ((yyvsp[(3) - (4)].expr) && (yyvsp[(3) - (4)].expr)->data.operand.left->type == INTEGER) - { - (yyval.expr)->data.scan.descriptor = (yyvsp[(3) - (4)].expr)->data.operand.left; - (yyvsp[(3) - (4)].expr) = (yyvsp[(3) - (4)].expr)->data.operand.right; - } - else - switch ((yyvsp[(1) - (4)].id)->index) - { - case SCANF: - (yyval.expr)->data.scan.descriptor = 0; - break; - case SSCANF: - if ((yyvsp[(3) - (4)].expr) && (yyvsp[(3) - (4)].expr)->data.operand.left->type == STRING) - { - (yyval.expr)->data.scan.descriptor = (yyvsp[(3) - (4)].expr)->data.operand.left; - (yyvsp[(3) - (4)].expr) = (yyvsp[(3) - (4)].expr)->data.operand.right; - } - else - exerror("%s: string argument expected", (yyvsp[(1) - (4)].id)->name); - break; - } - if (!(yyvsp[(3) - (4)].expr) || !(yyvsp[(3) - (4)].expr)->data.operand.left || (yyvsp[(3) - (4)].expr)->data.operand.left->type != STRING) - exerror("%s: format argument expected", (yyvsp[(1) - (4)].id)->name); - (yyval.expr)->data.scan.format = (yyvsp[(3) - (4)].expr)->data.operand.left; - for (x = (yyval.expr)->data.scan.args = (yyvsp[(3) - (4)].expr)->data.operand.right; x; x = x->data.operand.right) - { - if (x->data.operand.left->op != ADDRESS) - exerror("%s: address argument expected", (yyvsp[(1) - (4)].id)->name); - x->data.operand.left = x->data.operand.left->data.operand.left; - } - } - break; - - case 94: -/* Line 1792 of yacc.c */ -#line 957 "../../lib/expr/exparse.y" - { - if ((yyvsp[(2) - (2)].expr)) - { - if ((yyvsp[(1) - (2)].expr)->op == ID && !expr.program->disc->setf) - exerror("%s: variable assignment not supported", (yyvsp[(1) - (2)].expr)->data.variable.symbol->name); - else - { - if (!(yyvsp[(1) - (2)].expr)->type) - (yyvsp[(1) - (2)].expr)->type = (yyvsp[(2) - (2)].expr)->type; -#if 0 - else if ((yyvsp[(2) - (2)].expr)->type != (yyvsp[(1) - (2)].expr)->type && (yyvsp[(1) - (2)].expr)->type >= 0200) -#else - else if ((yyvsp[(2) - (2)].expr)->type != (yyvsp[(1) - (2)].expr)->type) -#endif - { - (yyvsp[(2) - (2)].expr)->type = (yyvsp[(1) - (2)].expr)->type; - (yyvsp[(2) - (2)].expr)->data.operand.right = excast(expr.program, (yyvsp[(2) - (2)].expr)->data.operand.right, (yyvsp[(1) - (2)].expr)->type, NiL, 0); - } - (yyvsp[(2) - (2)].expr)->data.operand.left = (yyvsp[(1) - (2)].expr); - (yyval.expr) = (yyvsp[(2) - (2)].expr); - } - } - } - break; - - case 95: -/* Line 1792 of yacc.c */ -#line 981 "../../lib/expr/exparse.y" - { - pre: - if ((yyvsp[(2) - (2)].expr)->type == STRING) - exerror("++ and -- invalid for string variables"); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(1) - (2)].op), 0, (yyvsp[(2) - (2)].expr)->type, (yyvsp[(2) - (2)].expr), NiL); - (yyval.expr)->subop = PRE; - } - break; - - case 96: -/* Line 1792 of yacc.c */ -#line 989 "../../lib/expr/exparse.y" - { - pos: - if ((yyvsp[(1) - (2)].expr)->type == STRING) - exerror("++ and -- invalid for string variables"); - (yyval.expr) = exnewnode(expr.program, (yyvsp[(2) - (2)].op), 0, (yyvsp[(1) - (2)].expr)->type, (yyvsp[(1) - (2)].expr), NiL); - (yyval.expr)->subop = POS; - } - break; - - case 97: -/* Line 1792 of yacc.c */ -#line 997 "../../lib/expr/exparse.y" - { - if ((yyvsp[(3) - (3)].id)->local.pointer == 0) - exerror("cannot apply IN to non-array %s", (yyvsp[(3) - (3)].id)->name); - if (((yyvsp[(3) - (3)].id)->index_type > 0) && ((yyvsp[(1) - (3)].expr)->type != (yyvsp[(3) - (3)].id)->index_type)) - exerror("%s indices must have type %s, not %s", - (yyvsp[(3) - (3)].id)->name, extypename(expr.program, (yyvsp[(3) - (3)].id)->index_type),extypename(expr.program, (yyvsp[(1) - (3)].expr)->type)); - (yyval.expr) = exnewnode(expr.program, IN_OP, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(3) - (3)].id); - (yyval.expr)->data.variable.index = (yyvsp[(1) - (3)].expr); - } - break; - - case 98: -/* Line 1792 of yacc.c */ -#line 1008 "../../lib/expr/exparse.y" - { - goto pre; - } - break; - - case 99: -/* Line 1792 of yacc.c */ -#line 1012 "../../lib/expr/exparse.y" - { - goto pos; - } - break; - - case 103: -/* Line 1792 of yacc.c */ -#line 1022 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CONSTANT, 0, (yyvsp[(1) - (1)].id)->type, NiL, NiL); - if (!expr.program->disc->reff) - exerror("%s: identifier references not supported", (yyvsp[(1) - (1)].id)->name); - else - (yyval.expr)->data.constant.value = (*expr.program->disc->reff)(expr.program, (yyval.expr), (yyvsp[(1) - (1)].id), NiL, NiL, EX_SCALAR, expr.program->disc); - } - break; - - case 104: -/* Line 1792 of yacc.c */ -#line 1030 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CONSTANT, 0, FLOATING, NiL, NiL); - (yyval.expr)->data.constant.value.floating = (yyvsp[(1) - (1)].floating); - } - break; - - case 105: -/* Line 1792 of yacc.c */ -#line 1035 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CONSTANT, 0, INTEGER, NiL, NiL); - (yyval.expr)->data.constant.value.integer = (yyvsp[(1) - (1)].integer); - } - break; - - case 106: -/* Line 1792 of yacc.c */ -#line 1040 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CONSTANT, 0, STRING, NiL, NiL); - (yyval.expr)->data.constant.value.string = (yyvsp[(1) - (1)].string); - } - break; - - case 107: -/* Line 1792 of yacc.c */ -#line 1045 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, CONSTANT, 0, UNSIGNED, NiL, NiL); - (yyval.expr)->data.constant.value.integer = (yyvsp[(1) - (1)].integer); - } - break; - - case 113: -/* Line 1792 of yacc.c */ -#line 1061 "../../lib/expr/exparse.y" - { - (yyval.expr) = makeVar(expr.program, (yyvsp[(1) - (2)].id), 0, 0, (yyvsp[(2) - (2)].reference)); - } - break; - - case 114: -/* Line 1792 of yacc.c */ -#line 1065 "../../lib/expr/exparse.y" - { - Exnode_t* n; - - n = exnewnode(expr.program, DYNAMIC, 0, (yyvsp[(1) - (3)].id)->type, NiL, NiL); - n->data.variable.symbol = (yyvsp[(1) - (3)].id); - n->data.variable.reference = 0; - if (((n->data.variable.index = (yyvsp[(2) - (3)].expr)) == 0) != ((yyvsp[(1) - (3)].id)->local.pointer == 0)) - exerror("%s: is%s an array", (yyvsp[(1) - (3)].id)->name, (yyvsp[(1) - (3)].id)->local.pointer ? "" : " not"); - if ((yyvsp[(1) - (3)].id)->local.pointer && ((yyvsp[(1) - (3)].id)->index_type > 0)) { - if ((yyvsp[(2) - (3)].expr)->type != (yyvsp[(1) - (3)].id)->index_type) - exerror("%s: indices must have type %s, not %s", - (yyvsp[(1) - (3)].id)->name, extypename(expr.program, (yyvsp[(1) - (3)].id)->index_type),extypename(expr.program, (yyvsp[(2) - (3)].expr)->type)); - } - if ((yyvsp[(3) - (3)].reference)) { - n->data.variable.dyna =exnewnode(expr.program, 0, 0, 0, NiL, NiL); - (yyval.expr) = makeVar(expr.program, (yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].expr), n, (yyvsp[(3) - (3)].reference)); - } - else (yyval.expr) = n; - } - break; - - case 115: -/* Line 1792 of yacc.c */ -#line 1085 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ID, 0, STRING, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(1) - (1)].id); - (yyval.expr)->data.variable.reference = 0; - (yyval.expr)->data.variable.index = 0; - (yyval.expr)->data.variable.dyna = 0; - if (!(expr.program->disc->flags & EX_UNDECLARED)) - exerror("unknown identifier"); - } - break; - - case 116: -/* Line 1792 of yacc.c */ -#line 1097 "../../lib/expr/exparse.y" - { - (yyval.integer) = 0; - } - break; - - case 117: -/* Line 1792 of yacc.c */ -#line 1101 "../../lib/expr/exparse.y" - { - (yyval.integer) = -1; - } - break; - - case 118: -/* Line 1792 of yacc.c */ -#line 1105 "../../lib/expr/exparse.y" - { - /* If DECLARE is VOID, its type is 0, so this acts like - * the empty case. - */ - if (INTEGRAL((yyvsp[(2) - (3)].id)->type)) - (yyval.integer) = INTEGER; - else - (yyval.integer) = (yyvsp[(2) - (3)].id)->type; - - } - break; - - case 119: -/* Line 1792 of yacc.c */ -#line 1118 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 120: -/* Line 1792 of yacc.c */ -#line 1122 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(2) - (3)].expr); - } - break; - - case 121: -/* Line 1792 of yacc.c */ -#line 1128 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 122: -/* Line 1792 of yacc.c */ -#line 1132 "../../lib/expr/exparse.y" - { - (yyval.expr) = (yyvsp[(1) - (1)].expr)->data.operand.left; - (yyvsp[(1) - (1)].expr)->data.operand.left = (yyvsp[(1) - (1)].expr)->data.operand.right = 0; - exfreenode(expr.program, (yyvsp[(1) - (1)].expr)); - } - break; - - case 123: -/* Line 1792 of yacc.c */ -#line 1140 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ',', 1, 0, exnewnode(expr.program, ',', 1, (yyvsp[(1) - (1)].expr)->type, (yyvsp[(1) - (1)].expr), NiL), NiL); - (yyval.expr)->data.operand.right = (yyval.expr)->data.operand.left; - } - break; - - case 124: -/* Line 1792 of yacc.c */ -#line 1145 "../../lib/expr/exparse.y" - { - (yyvsp[(1) - (3)].expr)->data.operand.right = (yyvsp[(1) - (3)].expr)->data.operand.right->data.operand.right = exnewnode(expr.program, ',', 1, (yyvsp[(1) - (3)].expr)->type, (yyvsp[(3) - (3)].expr), NiL); - } - break; - - case 125: -/* Line 1792 of yacc.c */ -#line 1151 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 126: -/* Line 1792 of yacc.c */ -#line 1155 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - if ((yyvsp[(1) - (1)].id)->type) - exerror("(void) expected"); - } - break; - - case 128: -/* Line 1792 of yacc.c */ -#line 1164 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ',', 1, (yyvsp[(1) - (1)].expr)->type, (yyvsp[(1) - (1)].expr), NiL); - } - break; - - case 129: -/* Line 1792 of yacc.c */ -#line 1168 "../../lib/expr/exparse.y" - { - register Exnode_t* x; - register Exnode_t* y; - - (yyval.expr) = (yyvsp[(1) - (3)].expr); - for (x = (yyvsp[(1) - (3)].expr); (y = x->data.operand.right); x = y); - x->data.operand.right = exnewnode(expr.program, ',', 1, (yyvsp[(3) - (3)].expr)->type, (yyvsp[(3) - (3)].expr), NiL); - } - break; - - case 130: -/* Line 1792 of yacc.c */ -#line 1178 "../../lib/expr/exparse.y" - {expr.declare=(yyvsp[(1) - (1)].id)->type;} - break; - - case 131: -/* Line 1792 of yacc.c */ -#line 1179 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, ID, 0, (yyvsp[(1) - (3)].id)->type, NiL, NiL); - (yyval.expr)->data.variable.symbol = (yyvsp[(3) - (3)].id); - (yyvsp[(3) - (3)].id)->lex = DYNAMIC; - (yyvsp[(3) - (3)].id)->type = (yyvsp[(1) - (3)].id)->type; - (yyvsp[(3) - (3)].id)->value = exnewnode(expr.program, 0, 0, 0, NiL, NiL); - expr.procedure->data.procedure.arity++; - expr.declare = 0; - } - break; - - case 132: -/* Line 1792 of yacc.c */ -#line 1191 "../../lib/expr/exparse.y" - { - (yyval.reference) = expr.refs = expr.lastref = 0; - } - break; - - case 133: -/* Line 1792 of yacc.c */ -#line 1195 "../../lib/expr/exparse.y" - { - Exref_t* r; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = (yyvsp[(1) - (1)].id); - expr.refs = r; - expr.lastref = r; - r->next = 0; - r->index = 0; - (yyval.reference) = expr.refs; - } - break; - - case 134: -/* Line 1792 of yacc.c */ -#line 1207 "../../lib/expr/exparse.y" - { - Exref_t* r; - Exref_t* l; - - r = ALLOCATE(expr.program, Exref_t); - r->symbol = (yyvsp[(3) - (3)].id); - r->index = 0; - r->next = 0; - l = ALLOCATE(expr.program, Exref_t); - l->symbol = (yyvsp[(2) - (3)].id); - l->index = 0; - l->next = r; - expr.refs = l; - expr.lastref = r; - (yyval.reference) = expr.refs; - } - break; - - case 135: -/* Line 1792 of yacc.c */ -#line 1226 "../../lib/expr/exparse.y" - { - (yyval.id) = (yyvsp[(2) - (2)].id); - } - break; - - case 136: -/* Line 1792 of yacc.c */ -#line 1230 "../../lib/expr/exparse.y" - { - (yyval.id) = (yyvsp[(2) - (2)].id); - } - break; - - case 137: -/* Line 1792 of yacc.c */ -#line 1235 "../../lib/expr/exparse.y" - { - (yyval.expr) = 0; - } - break; - - case 138: -/* Line 1792 of yacc.c */ -#line 1239 "../../lib/expr/exparse.y" - { - (yyval.expr) = exnewnode(expr.program, '=', 1, (yyvsp[(2) - (2)].expr)->type, NiL, (yyvsp[(2) - (2)].expr)); - (yyval.expr)->subop = (yyvsp[(1) - (2)].op); - } - break; - - case 140: -/* Line 1792 of yacc.c */ -#line 1246 "../../lib/expr/exparse.y" - { - register Dtdisc_t* disc; - - if (expr.procedure) - exerror("%s: nested function definitions not supported", expr.id->name); - expr.procedure = exnewnode(expr.program, PROCEDURE, 1, expr.declare, NiL, NiL); - if (!(disc = newof(0, Dtdisc_t, 1, 0))) - exnospace(); - disc->key = offsetof(Exid_t, name); - if (!streq(expr.id->name, "begin")) - { - if (!(expr.procedure->data.procedure.frame = dtopen(disc, Dtset)) || !dtview(expr.procedure->data.procedure.frame, expr.program->symbols)) - exnospace(); - expr.program->symbols = expr.program->frame = expr.procedure->data.procedure.frame; - expr.program->formals = 1; - } - expr.declare = 0; - } - break; - - case 141: -/* Line 1792 of yacc.c */ -#line 1263 "../../lib/expr/exparse.y" - { - expr.id->lex = PROCEDURE; - expr.id->type = expr.procedure->type; - expr.program->formals = 0; - expr.declare = 0; - } - break; - - case 142: -/* Line 1792 of yacc.c */ -#line 1269 "../../lib/expr/exparse.y" - { - (yyval.expr) = expr.procedure; - expr.procedure = 0; - if (expr.program->frame) - { - expr.program->symbols = expr.program->frame->view; - dtview(expr.program->frame, NiL); - expr.program->frame = 0; - } - (yyval.expr)->data.operand.left = (yyvsp[(3) - (8)].expr); - (yyval.expr)->data.operand.right = excast(expr.program, (yyvsp[(7) - (8)].expr), (yyval.expr)->type, NiL, 0); - - /* - * NOTE: procedure definition was slipped into the - * declaration initializer statement production, - * therefore requiring the statement terminator - */ - - exunlex(expr.program, ';'); - } - break; - - -/* Line 1792 of yacc.c */ -#line 3495 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - /* Make sure YYID is used. */ - return YYID (yyresult); -} - - -/* Line 2055 of yacc.c */ -#line 1291 "../../lib/expr/exparse.y" - - -#include "exgram.h" diff --git a/internal/ccall/expr/y.tab.h b/internal/ccall/expr/y.tab.h deleted file mode 100644 index 4d98d16..0000000 --- a/internal/ccall/expr/y.tab.h +++ /dev/null @@ -1,254 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - 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 . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_YY_Y_TAB_H_INCLUDED -# define YY_YY_Y_TAB_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - MINTOKEN = 258, - INTEGER = 259, - UNSIGNED = 260, - CHARACTER = 261, - FLOATING = 262, - STRING = 263, - VOIDTYPE = 264, - STATIC = 265, - ADDRESS = 266, - ARRAY = 267, - BREAK = 268, - CALL = 269, - CASE = 270, - CONSTANT = 271, - CONTINUE = 272, - DECLARE = 273, - DEFAULT = 274, - DYNAMIC = 275, - ELSE = 276, - EXIT = 277, - FOR = 278, - FUNCTION = 279, - GSUB = 280, - ITERATE = 281, - ITERATER = 282, - ID = 283, - IF = 284, - LABEL = 285, - MEMBER = 286, - NAME = 287, - POS = 288, - PRAGMA = 289, - PRE = 290, - PRINT = 291, - PRINTF = 292, - PROCEDURE = 293, - QUERY = 294, - RAND = 295, - RETURN = 296, - SCANF = 297, - SPLIT = 298, - SPRINTF = 299, - SRAND = 300, - SSCANF = 301, - SUB = 302, - SUBSTR = 303, - SWITCH = 304, - TOKENS = 305, - UNSET = 306, - WHILE = 307, - F2I = 308, - F2S = 309, - I2F = 310, - I2S = 311, - S2B = 312, - S2F = 313, - S2I = 314, - F2X = 315, - I2X = 316, - S2X = 317, - X2F = 318, - X2I = 319, - X2S = 320, - X2X = 321, - XPRINT = 322, - OR = 323, - AND = 324, - NE = 325, - EQ = 326, - GE = 327, - LE = 328, - RS = 329, - LS = 330, - IN_OP = 331, - UNARY = 332, - DEC = 333, - INC = 334, - CAST = 335, - MAXTOKEN = 336 - }; -#endif -/* Tokens. */ -#define MINTOKEN 258 -#define INTEGER 259 -#define UNSIGNED 260 -#define CHARACTER 261 -#define FLOATING 262 -#define STRING 263 -#define VOIDTYPE 264 -#define STATIC 265 -#define ADDRESS 266 -#define ARRAY 267 -#define BREAK 268 -#define CALL 269 -#define CASE 270 -#define CONSTANT 271 -#define CONTINUE 272 -#define DECLARE 273 -#define DEFAULT 274 -#define DYNAMIC 275 -#define ELSE 276 -#define EXIT 277 -#define FOR 278 -#define FUNCTION 279 -#define GSUB 280 -#define ITERATE 281 -#define ITERATER 282 -#define ID 283 -#define IF 284 -#define LABEL 285 -#define MEMBER 286 -#define NAME 287 -#define POS 288 -#define PRAGMA 289 -#define PRE 290 -#define PRINT 291 -#define PRINTF 292 -#define PROCEDURE 293 -#define QUERY 294 -#define RAND 295 -#define RETURN 296 -#define SCANF 297 -#define SPLIT 298 -#define SPRINTF 299 -#define SRAND 300 -#define SSCANF 301 -#define SUB 302 -#define SUBSTR 303 -#define SWITCH 304 -#define TOKENS 305 -#define UNSET 306 -#define WHILE 307 -#define F2I 308 -#define F2S 309 -#define I2F 310 -#define I2S 311 -#define S2B 312 -#define S2F 313 -#define S2I 314 -#define F2X 315 -#define I2X 316 -#define S2X 317 -#define X2F 318 -#define X2I 319 -#define X2S 320 -#define X2X 321 -#define XPRINT 322 -#define OR 323 -#define AND 324 -#define NE 325 -#define EQ 326 -#define GE 327 -#define LE 328 -#define RS 329 -#define LS 330 -#define IN_OP 331 -#define UNARY 332 -#define DEC 333 -#define INC 334 -#define CAST 335 -#define MAXTOKEN 336 - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -{ -/* Line 2058 of yacc.c */ -#line 39 "../../lib/expr/exparse.y" - - struct Exnode_s*expr; - double floating; - struct Exref_s* reference; - struct Exid_s* id; - Sflong_t integer; - int op; - char* string; - void* user; - struct Exbuf_s* buffer; - - -/* Line 2058 of yacc.c */ -#line 232 "y.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/internal/ccall/fdpgen.c b/internal/ccall/fdpgen.c deleted file mode 100644 index 013eeac..0000000 --- a/internal/ccall/fdpgen.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "fdpgen/comp.c" -#include "fdpgen/dbg.c" -#include "fdpgen/grid.c" -#include "fdpgen/fdpinit.c" -#include "fdpgen/layout.c" -#include "fdpgen/tlayout.c" -#include "fdpgen/xlayout.c" -#include "fdpgen/clusteredges.c" diff --git a/internal/ccall/fdpgen/clusteredges.c b/internal/ccall/fdpgen/clusteredges.c deleted file mode 100644 index 11f04e9..0000000 --- a/internal/ccall/fdpgen/clusteredges.c +++ /dev/null @@ -1,319 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* clusteredges.c: - * Written by Emden R. Gansner - * - * Code for handling spline edges around clusters. - */ - -/* uses PRIVATE interface */ -#define FDP_PRIVATE 1 - -#include "config.h" - -#include -#include -#include -#include "vispath.h" -#include "pack.h" - -typedef struct { - int cnt; - int sz; - Ppoly_t **obs; -} objlist; - -/* addObj: - * Add an object to the list. The array is increased if necessary. - */ -#define INIT_SZ 100 - -#if DEBUG > 1 -static void dumpObj(Ppoly_t * p) -{ - int j; - Ppoint_t pt; - for (j = 0; j < p->pn; j++) { - pt = p->ps[j]; - fprintf(stderr, " %.5g %.5g", pt.x, pt.y); - } - fputs("\n", stderr); -} - -static void dumpObjlist(objlist * l) -{ - int i; - for (i = 0; i < l->cnt; i++) { - dumpObj(l->obs[i]); - } -} -#endif - -static void addObj(objlist * l, Ppoly_t * obj) -{ - if (l->sz == l->cnt) { - if (l->obs) { - l->sz *= 2; - l->obs = RALLOC(l->sz, l->obs, Ppoly_t *); - } else { - l->obs = N_GNEW(INIT_SZ, Ppoly_t *); - l->sz = INIT_SZ; - } - } - l->obs[l->cnt++] = obj; -} - -/* freeObjlist: - * Release memory. - */ -static void freeObjlist(objlist * l) -{ - if (l) { - free(l->obs); - free(l); - } -} - -/* resetObjlist: - * Reset objlist so it can be reused, using - * the same memory. - */ -static void resetObjlist(objlist * l) -{ - l->cnt = 0; -} - -/* makeClustObs: - * Create an obstacle corresponding to a cluster's bbox. - */ -static Ppoly_t *makeClustObs(graph_t * g, expand_t* pm) -{ - Ppoly_t *obs = NEW(Ppoly_t); - boxf bb; - boxf newbb; - Ppoint_t ctr; - - bb = GD_bb(g); - obs->pn = 4; - obs->ps = N_NEW(4, Ppoint_t); - - ctr.x = (bb.UR.x + bb.LL.x) / 2.0; - ctr.y = (bb.UR.y + bb.LL.y) / 2.0; - - if (pm->doAdd) { - newbb.UR.x = bb.UR.x + pm->x; - newbb.UR.y = bb.UR.y + pm->y; - newbb.LL.x = bb.LL.x - pm->x; - newbb.LL.y = bb.LL.y - pm->y; - } - else { - double deltax = pm->x - 1.0; - double deltay = pm->y - 1.0; - newbb.UR.x = pm->x * bb.UR.x - deltax * ctr.x; - newbb.UR.y = pm->y * bb.UR.y - deltay * ctr.y; - newbb.LL.x = pm->x * bb.LL.x - deltax * ctr.x; - newbb.LL.y = pm->y * bb.LL.y - deltay * ctr.y; - } - - /* CW order */ - obs->ps[0].x = newbb.LL.x; - obs->ps[0].y = newbb.LL.y; - obs->ps[1].x = newbb.LL.x; - obs->ps[1].y = newbb.UR.y; - obs->ps[2].x = newbb.UR.x; - obs->ps[2].y = newbb.UR.y; - obs->ps[3].x = newbb.UR.x; - obs->ps[3].y = newbb.LL.y; - - return obs; -} - -/* addGraphObjs: - * Add all top-level clusters and nodes with g as their smallest - * containing graph to the list l. - * Don't add any objects equal to tex or hex. - * Return the list. - */ -static void -addGraphObjs(objlist * l, graph_t * g, void *tex, void *hex, expand_t* pm) -{ - node_t *n; - graph_t *sg; - int i; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if ((PARENT(n) == g) && (n != tex) && (n != hex) - && !IS_CLUST_NODE(n)) { - addObj(l, makeObstacle(n, pm, FALSE)); - } - } - for (i = 1; i <= GD_n_cluster(g); i++) { - sg = GD_clust(g)[i]; - if ((sg != tex) && (sg != hex)) { - addObj(l, makeClustObs(sg, pm)); - } - } -} - -/* raiseLevel: - * Add barrier objects for node n, in graph *gp of level maxlvl, up to - * level minlvl. - * Assume maxlvl > minlvl. - * Return appended list, plus pass back last cluster processed in gp. - */ -static void -raiseLevel(objlist * l, int maxlvl, void *ex, int minlvl, graph_t ** gp, - expand_t* pm) -{ - graph_t *g = *gp; - int i; - - for (i = maxlvl; i > minlvl; i--) { - addGraphObjs(l, g, ex, NULL, pm); - ex = g; - g = GPARENT(g); - } - *gp = (graph_t *) ex; -} - -/* objectList: - * Create array of all objects (nodes and clusters) to be avoided - * when routing edge e. Make sure it never adds the endpoints of the - * edge, or any graph containing the endpoints. - * Return the list. - * Assume e is not a loop. - */ -static objlist *objectList(edge_t * ep, expand_t* pm) -{ - node_t *h = aghead(ep); - node_t *t = agtail(ep); - graph_t *hg = PARENT(h); - graph_t *tg = PARENT(t); - int hlevel; - int tlevel; - void *hex; /* Objects to be excluded from list */ - void *tex; - objlist *list = NEW(objlist); - - /* If either endpoint is a cluster node, we move up one level */ - if (IS_CLUST_NODE(h)) { - hex = hg; - hg = GPARENT(hg); - } else - hex = h; - if (IS_CLUST_NODE(t)) { - tex = tg; - tg = GPARENT(tg); - } else - tex = t; - - hlevel = LEVEL(hg); - tlevel = LEVEL(tg); - if (hlevel > tlevel) { - raiseLevel(list, hlevel, hex, tlevel, &hg, pm); - hex = hg; - hg = GPARENT(hg); - } else if (tlevel > hlevel) { - raiseLevel(list, tlevel, tex, hlevel, &tg, pm); - tex = tg; - tg = GPARENT(tg); - } - - /* hg and tg always have the same level */ - while (hg != tg) { - addGraphObjs(list, hg, NULL, hex, pm); - addGraphObjs(list, tg, tex, NULL, pm); - hex = hg; - hg = GPARENT(hg); - tex = tg; - tg = GPARENT(tg); - } - addGraphObjs(list, tg, tex, hex, pm); - - return list; -} - -/* compoundEdges: - * Construct edges as splines, avoiding clusters when required. - * We still don't implement spline multiedges, so we just copy - * one spline to all the other edges. - * Returns 0 on success. Failure indicates the obstacle configuration - * for some edge had overlaps. - */ -int compoundEdges(graph_t * g, expand_t* pm, int edgetype) -{ - node_t *n; - node_t *head; - edge_t *e; - edge_t *e0; - objlist *objl = NULL; - path *P = NULL; - vconfig_t *vconfig; - int rv = 0; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - head = aghead(e); - if ((n == head) && ED_count(e)) { /* self arc */ - if (!P) { - P = NEW(path); - P->boxes = N_NEW(agnnodes(g) + 20 * 2 * 9, boxf); - } - makeSelfArcs(P, e, GD_nodesep(g)); - } else if (ED_count(e)) { - objl = objectList(e, pm); - if (Plegal_arrangement(objl->obs, objl->cnt)) { - vconfig = Pobsopen(objl->obs, objl->cnt); - if (!vconfig) { - agerr(AGWARN, "compoundEdges: could not construct obstacles - falling back to straight line edges\n"); - rv = 1; - continue; - } - } - else { - if (rv == 0) { - expand_t margin = sepFactor(g); - int pack = getPack (g, CL_OFFSET, CL_OFFSET); - agerr(AGWARN, "compoundEdges: nodes touch - falling back to straight line edges\n"); - if ((pack <= pm->x) || (pack <= pm->y)) - agerr(AGPREV, "pack value %d is smaller than esep (%.03f,%.03f)\n", pack, pm->x, pm->y); - else if ((margin.x <= pm->x) || (margin.y <= pm->y)) - agerr(AGPREV, "sep value (%.03f,%.03f) is smaller than esep (%.03f,%.03f)\n", - margin.x, margin.y, pm->x, pm->y); - rv = 1; - } - continue; - } - - /* For efficiency, it should be possible to copy the spline - * from the first edge to the rest. However, one has to deal - * with change in direction, different arrowheads, labels, etc. - */ - for (e0 = e; e0; e0 = ED_to_virt(e0)) { - ED_path(e0) = - getPath(e0, vconfig, 0, objl->obs, objl->cnt); - makeSpline(g, e0, objl->obs, objl->cnt, FALSE); - } - resetObjlist(objl); - } - } - } - freeObjlist(objl); - if (P) { - free(P->boxes); - free(P); - } - return rv; -} diff --git a/internal/ccall/fdpgen/clusteredges.h b/internal/ccall/fdpgen/clusteredges.h deleted file mode 100644 index 26137cd..0000000 --- a/internal/ccall/fdpgen/clusteredges.h +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CLUSTEREDGES_H -#define CLUSTEREDGES_H - -#include -#include - - extern int compoundEdges(graph_t * g, expand_t* pm, int splines); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/fdpgen/comp.c b/internal/ccall/fdpgen/comp.c deleted file mode 100644 index f16bcd7..0000000 --- a/internal/ccall/fdpgen/comp.c +++ /dev/null @@ -1,138 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* comp.c: - * Written by Emden R. Gansner - * - * Support for "connected components". Components are either connected - * or have a port node or have a pinned node. - * - */ - -/* use PRIVATE interface */ -#define FDP_PRIVATE 1 - -#include -#include -#include -#include - -#define MARK(n) (marks[ND_id(n)]) - -static void dfs(Agraph_t * g, Agnode_t * n, Agraph_t * out, char *marks) -{ - Agedge_t *e; - Agnode_t *other; - - MARK(n) = 1; - agsubnode(out,n,1); - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - if ((other = agtail(e)) == n) - other = aghead(e); - if (!MARK(other)) - dfs(g, other, out, marks); - } -} - -/* findCComp: - * Finds generalized connected components of graph g. - * This merges all components containing a port node or a pinned node. - * Assumes nodes have unique id's in range [0,agnnodes(g)-1]. - * Components are stored as subgraphs of g, with name sg_. - * Returns 0-terminated array of components. - * If cnt is non-0, count of components is stored there. - * If pinned is non-0, *pinned is set to 1 if there are pinned nodes. - * Note that if ports and/or pinned nodes exists, they will all be - * in the first component returned by findCComp. - */ -static int C_cnt = 0; -graph_t **findCComp(graph_t * g, int *cnt, int *pinned) -{ - node_t *n; - graph_t *subg; - char name[128]; - int c_cnt = 0; - char *marks; - bport_t *pp; - graph_t **comps; - graph_t **cp; - int pinflag = 0; - -/* fprintf (stderr, "comps of %s starting at %d \n", g->name, c_cnt); */ - marks = N_NEW(agnnodes(g), char); /* freed below */ - - /* Create component based on port nodes */ - subg = 0; - if ((pp = PORTS(g))) { - sprintf(name, "cc%s_%d", agnameof(g), c_cnt++ + C_cnt); - subg = agsubg(g, name,1); - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_alg(subg) = (void *) NEW(gdata); - PORTS(subg) = pp; - NPORTS(subg) = NPORTS(g); - for (; pp->n; pp++) { - if (MARK(pp->n)) - continue; - dfs(g, pp->n, subg, marks); - } - } - - /* Create/extend component based on pinned nodes */ - /* Note that ports cannot be pinned */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (MARK(n)) - continue; - if (ND_pinned(n) != P_PIN) - continue; - if (!subg) { - sprintf(name, "cc%s_%d", agnameof(g), c_cnt++ + C_cnt); - subg = agsubg(g, name,1); - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_alg(subg) = (void *) NEW(gdata); - } - pinflag = 1; - dfs(g, n, subg, marks); - } - if (subg) - nodeInduce(subg); - - /* Pick up remaining components */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (MARK(n)) - continue; - sprintf(name, "cc%s+%d", agnameof(g), c_cnt++ + C_cnt); - subg = agsubg(g, name,1); - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - GD_alg(subg) = (void *) NEW(gdata); - dfs(g, n, subg, marks); - nodeInduce(subg); - } - free(marks); - C_cnt += c_cnt; - - if (cnt) - *cnt = c_cnt; - if (pinned) - *pinned = pinflag; - /* freed in layout */ - comps = cp = N_NEW(c_cnt + 1, graph_t *); - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - *cp++ = subg; - c_cnt--; - } - assert(c_cnt == 0); - *cp = 0; - - return comps; -} diff --git a/internal/ccall/fdpgen/comp.h b/internal/ccall/fdpgen/comp.h deleted file mode 100644 index b7fab7d..0000000 --- a/internal/ccall/fdpgen/comp.h +++ /dev/null @@ -1,29 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef COMP_H -#define COMP_H - -#include - - extern graph_t **findCComp(graph_t *, int *, int *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/fdpgen/dbg.c b/internal/ccall/fdpgen/dbg.c deleted file mode 100644 index ca0a969..0000000 --- a/internal/ccall/fdpgen/dbg.c +++ /dev/null @@ -1,481 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* dbg.c: - * Written by Emden R. Gansner - * - * Simple debugging infrastructure - */ -#ifdef DEBUG - -#define FDP_PRIVATE - -#include -#include -#include -#include - -static int indent = -1; - -void incInd() -{ - indent++; -} - -void decInd() -{ - if (indent >= 0) - indent--; -} - -void prIndent(void) -{ - int i; - for (i = 0; i < indent; i++) - fputs(" ", stderr); -} - -void prEdge(edge_t *e,char *s) -{ - fprintf(stderr,"%s --", agnameof(agtail(e))); - fprintf(stderr,"%s%s", agnameof(aghead(e)),s); -} - -static void dumpBB(graph_t * g) -{ - boxf bb; - boxf b; - - bb = BB(g); - b = GD_bb(g); - prIndent(); - fprintf(stderr, " LL (%f,%f) UR (%f,%f)\n", bb.LL.x, bb.LL.y, - bb.UR.x, bb.UR.y); - prIndent(); - fprintf(stderr, " LL (%f,%f) UR (%f,%f)\n", b.LL.x, b.LL.y, - b.UR.x, b.UR.y); -} - -static void dumpSG(graph_t * g) -{ - graph_t *subg; - int i; - - if (GD_n_cluster(g) == 0) - return; - prIndent(); - fprintf(stderr, " {\n"); - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = (GD_clust(g))[i]; - prIndent(); - fprintf(stderr, " subgraph %s : %d nodes\n", agnameof(subg), - agnnodes(subg)); - dumpBB(subg); - incInd (); - dumpSG(subg); - decInd (); - } - prIndent(); - fprintf(stderr, " }\n"); -} - -/* dumpE: - */ -void dumpE(graph_t * g, int derived) -{ - Agnode_t *n; - Agedge_t *e; - Agedge_t **ep; - Agedge_t *el; - int i; - int deg; - - prIndent(); - fprintf(stderr, "Graph %s : %d nodes %d edges\n", agnameof(g), agnnodes(g), - agnedges(g)); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - deg = 0; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - deg++; - prIndent(); - prEdge(e,"\n"); - if (derived) { - for (i = 0, ep = (Agedge_t **) ED_to_virt(e); - i < ED_count(e); i++, ep++) { - el = *ep; - prIndent(); - prEdge(el,"\n"); - } - } - } - if (deg == 0) { /* no out edges */ - if (!agfstin(g, n)) /* no in edges */ - fprintf(stderr, " %s\n", agnameof(n)); - } - } - if (!derived) { - bport_t *pp; - if ((pp = PORTS(g))) { - int sz = NPORTS(g); - fprintf(stderr, " %d ports\n", sz); - while (pp->e) { - fprintf(stderr, " %s : ", agnameof(pp->n)); - prEdge(pp->e,"\n"); - pp++; - } - } - } -} - -/* dump: - */ -void dump(graph_t * g, int level, int doBB) -{ - node_t *n; - boxf bb; - double w, h; - pointf pos; - - if (Verbose < level) - return; - prIndent(); - fprintf(stderr, "Graph %s : %d nodes\n", agnameof(g), agnnodes(g)); - dumpBB(g); - if (Verbose > level) { - incInd(); - dumpSG(g); - decInd(); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - pos.x = ND_pos(n)[0]; - pos.y = ND_pos(n)[1]; - prIndent(); - w = ND_width(n); - h = ND_height(n); - if (doBB) { - bb.LL.x = pos.x - w / 2.0; - bb.LL.y = pos.y - h / 2.0; - bb.UR.x = bb.LL.x + w; - bb.UR.y = bb.LL.y + h; - fprintf(stderr, "%s: (%f,%f) ((%f,%f) , (%f,%f))\n", - agnameof(n), pos.x, pos.y, bb.LL.x, bb.LL.y, bb.UR.x, - bb.UR.y); - } else { - fprintf(stderr, "%s: (%f,%f) (%f,%f) \n", - agnameof(n), pos.x, pos.y, w, h); - } - } - } -} - -void dumpG(graph_t * g, char *fname, int expMode) -{ - FILE *fp; - - fp = fopen(fname, "w"); - if (!fp) { - fprintf(stderr, "Couldn not open %s \n", fname); - exit(1); - } - outputGraph(g, fp, expMode); - fclose(fp); -} - -/* #define BOX */ - -/* static char* pos_name = "pos"; */ -/* static char* lp_name = "lp"; */ - -double Scale = 0.0; -double ArrowScale = 1.0; - -#define ARROW_LENGTH 10 -#define ARROW_WIDTH 5 -/* #define DEGREES(rad) ((rad)/M_PI * 180.0) */ - -static char *plog = "%!PS-Adobe-2.0\n\n\ -/Times-Roman findfont 14 scalefont setfont\n\ -/lLabel {\n\ -\tmoveto\n\ -\tgsave\n\ -\tshow\n\ -\tgrestore\n\ -} def\n\ -/inch {\n\ -\t72 mul\n\ -} def\n\ -/doBox {\n\ -\tnewpath\n\ -\tmoveto\n\ -\t/ht exch def\n\ -\t/wd exch def\n\ -\t0 ht rlineto\n\ -\twd 0 rlineto\n\ -\t0 0 ht sub rlineto\n\ -\tclosepath\n\ -\tgsave\n\ -\t\t.9 setgray\n\ -\t\tfill\n\ -\tgrestore\n\ -\tstroke\n\ -} def\n\ -/drawCircle {\n\ -\t/r exch def\n\ -\t/y exch def\n\ -\t/x exch def\n\ -\tnewpath\n\ -\tx y r 0 360 arc\n\ -\tstroke\n\ -} def\n\ -/fillCircle {\n\ -\t/r exch def\n\ -\t/y exch def\n\ -\t/x exch def\n\ -\tnewpath\n\ -\tx y r 0 360 arc\n\ -\tfill\n\ -} def\n"; - -static char *elog = "showpage\n"; - -/* -static char* arrow = "/doArrow {\n\ -\t/arrowwidth exch def\n\ -\t/arrowlength exch def\n\ -\tgsave\n\ -\t\t3 1 roll\n\ -\t\ttranslate\n\ -\t\t\trotate\n\ -\t\t\tnewpath\n\ -\t\t\tarrowlength arrowwidth 2 div moveto\n\ -\t\t\t0 0 lineto\n\ -\t\t\tarrowlength arrowwidth -2 div lineto\n\ -\t\tclosepath fill\n\ -\t\tstroke\n\ -\tgrestore\n\ -} def\n"; -*/ - -static double PSWidth = 550.0; -static double PSHeight = 756.0; - -static void pswrite(Agraph_t * g, FILE * fp, int expMode) -{ - Agnode_t *n; - Agnode_t *h; - Agedge_t *e; - double minx, miny, maxx, maxy; - double scale, width, height; - int do_arrow; - int angle; - char *p; - double theta; - double arrow_w, arrow_l; - int portColor; - - fprintf(fp, "%s", plog); - -/* - if (agisdirected (g) && DoArrow) { - do_arrow = 1; - fprintf(fp,arrow); - } - else -*/ - do_arrow = 0; - - n = agfstnode(g); - minx = ND_pos(n)[0]; - miny = ND_pos(n)[1]; - maxx = ND_pos(n)[0]; - maxy = ND_pos(n)[1]; - n = agnxtnode(g, n); - for (; n; n = agnxtnode(g, n)) { - if (ND_pos(n)[0] < minx) - minx = ND_pos(n)[0]; - if (ND_pos(n)[1] < miny) - miny = ND_pos(n)[1]; - if (ND_pos(n)[0] > maxx) - maxx = ND_pos(n)[0]; - if (ND_pos(n)[1] > maxy) - maxy = ND_pos(n)[1]; - } - - /* Convert to points - */ - minx *= POINTS_PER_INCH; - miny *= POINTS_PER_INCH; - maxx *= POINTS_PER_INCH; - maxy *= POINTS_PER_INCH; - - /* Check for rotation - */ - if ((p = agget(g, "rotate")) && (*p != '\0') - && ((angle = atoi(p)) != 0)) { - fprintf(fp, "306 396 translate\n"); - fprintf(fp, "%d rotate\n", angle); - fprintf(fp, "-306 -396 translate\n"); - } - - /* If user gives scale factor, use it. - * Else if figure too large for standard PS page, scale it to fit. - */ - if (Scale > 0.0) - scale = Scale; - else { - width = maxx - minx + 20; - height = maxy - miny + 20; - if (width > PSWidth) { - if (height > PSHeight) { - scale = - (PSWidth / width < - PSHeight / height ? PSWidth / width : PSHeight / - height); - } else - scale = PSWidth / width; - } else if (height > PSHeight) { - scale = PSHeight / height; - } else - scale = 1.0; - } - - fprintf(fp, "%f %f translate\n", - (PSWidth - scale * (minx + maxx)) / 2.0, - (PSHeight - scale * (miny + maxy)) / 2.0); - fprintf(fp, "%f %f scale\n", scale, scale); - -/* - if (Verbose) - fprintf (stderr, "Region (%f,%f) (%f,%f), scale %f\n", - minx, miny, maxx, maxy, scale); -*/ - - if (do_arrow) { - arrow_w = ArrowScale * ARROW_WIDTH / scale; - arrow_l = ArrowScale * ARROW_LENGTH / scale; - } - - fprintf(fp, "0.0 setlinewidth\n"); -#ifdef SHOW_GRID - if (UseGrid) { - int i; - fprintf(fp, "%f %f 5 fillCircle\n", 0.0, 0.0); - for (i = 0; i < maxx; i += CellW) { - fprintf(fp, "%f 0.0 moveto %f %f lineto stroke\n", - (float) i, (float) i, maxy); - } - for (i = 0; i < maxy; i += CellH) { - fprintf(fp, "0.0 %f moveto %f %f lineto stroke\n", - (float) i, maxx, (float) i); - } - } -#endif - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (IS_PORT(n)) { - double r; - r = sqrt(ND_pos(n)[0] * ND_pos(n)[0] + - ND_pos(n)[1] * ND_pos(n)[1]); - fprintf(fp, "0 0 %f inch drawCircle\n", r); - break; - } - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - h = aghead(e); - fprintf(fp, "%f inch %f inch moveto %f inch %f inch lineto\n", - ND_pos(n)[0], ND_pos(n)[1], ND_pos(h)[0], - ND_pos(h)[1]); - fprintf(fp, "stroke\n"); - if (do_arrow) { - theta = - atan2(ND_pos(n)[1] - ND_pos(h)[1], - ND_pos(n)[0] - ND_pos(h)[0]); - fprintf(fp, "%f %f %.2f %.2f %.2f doArrow\n", - ND_pos(h)[0], ND_pos(h)[1], DEGREES(theta), - arrow_l, arrow_w); - } - - } - } - -#ifdef BOX - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - float wd, ht; - - data = getData(n); - wd = data->wd; - ht = data->ht; - fprintf(fp, "%f %f %f %f doBox\n", wd, ht, - data->pos.x - (wd / 2), data->pos.y - (ht / 2)); - } -#else - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - fprintf(fp, "%% %s\n", agnameof(n)); - if (expMode) { - double wd, ht; - double r; - wd = ND_width(n); - ht = ND_height(n); - r = sqrt((wd * wd / 4) + ht * ht / 4); - fprintf(fp, "%f inch %f inch %f inch %f inch doBox\n", wd, ht, - ND_pos(n)[0] - (wd / 2), ND_pos(n)[1] - (ht / 2)); - fprintf(fp, "%f inch %f inch %f inch drawCircle\n", - ND_pos(n)[0], ND_pos(n)[1], r); - } else { - if (IS_PORT(n)) { - if (!portColor) { - fprintf(fp, "0.667 1.000 1.000 sethsbcolor\n"); - portColor = 1; - } - } else { - if (portColor) { - fprintf(fp, "0.0 0.000 0.000 sethsbcolor\n"); - portColor = 0; - } - } - } - fprintf(fp, "%f inch %f inch %f fillCircle\n", ND_pos(n)[0], - ND_pos(n)[1], 3 / scale); - } -#endif - - fprintf(fp, "0.667 1.000 1.000 sethsbcolor\n"); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - h = aghead(e); - fprintf(fp, "%f inch %f inch moveto %f inch %f inch lineto\n", - ND_pos(n)[0], ND_pos(n)[1], ND_pos(h)[0], - ND_pos(h)[1]); - fprintf(fp, "stroke\n"); - if (do_arrow) { - theta = - atan2(ND_pos(n)[1] - ND_pos(h)[1], - ND_pos(n)[0] - ND_pos(h)[0]); - fprintf(fp, "%f %f %.2f %.2f %.2f doArrow\n", - ND_pos(h)[0], ND_pos(h)[1], DEGREES(theta), - arrow_l, arrow_w); - } - - } - } - - fprintf(fp, "%s", elog); -} - -void outputGraph(Agraph_t * g, FILE * fp, int expMode) -{ - pswrite(g, fp, expMode); -} - -#endif /* DEBUG */ diff --git a/internal/ccall/fdpgen/dbg.h b/internal/ccall/fdpgen/dbg.h deleted file mode 100644 index 8fd36f9..0000000 --- a/internal/ccall/fdpgen/dbg.h +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef FDPDBG_H -#define FDPDBG_H - -#ifdef DEBUG - -#include -#include -#include - - extern double Scale; - extern void outputGraph(Agraph_t *, FILE *, int); - - extern void incInd(void); - extern void decInd(void); - extern void prIndent(void); - - extern void dump(graph_t * g, int doAll, int doBB); - extern void dumpE(graph_t * g, int derived); - extern void dumpG(graph_t * g, char *fname, int); - -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/fdpgen/dummy.go b/internal/ccall/fdpgen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/fdpgen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/fdpgen/fdp.h b/internal/ccall/fdpgen/fdp.h deleted file mode 100644 index c68ceb5..0000000 --- a/internal/ccall/fdpgen/fdp.h +++ /dev/null @@ -1,139 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef FDP_H -#define FDP_H - -#include - -#ifdef FDP_PRIVATE - -#define NDIM 2 - -typedef struct bport_s { - edge_t *e; - node_t *n; - double alpha; -} bport_t; - -/* gdata is attached to the root graph, each cluster graph, - * and to each derived graph. - * Graphs also use "builtin" fields: - * n_cluster, clust - to record clusters - */ -typedef struct { - bport_t *ports; /* boundary ports. 0-terminated */ - int nports; /* no. of ports */ - boxf bb; /* bounding box of graph */ - int flags; - int level; /* depth in graph hierarchy */ - graph_t *parent; /* smallest containing cluster */ -#ifdef DEBUG - graph_t *orig; /* original of derived graph */ -#endif -} gdata; - -#define GDATA(g) ((gdata*)(GD_alg(g))) -#define BB(g) (GDATA(g)->bb) -#define PORTS(g) (GDATA(g)->ports) -#define NPORTS(g) (GDATA(g)->nports) -#define LEVEL(g) (GDATA(g)->level) -#define GPARENT(g) (GDATA(g)->parent) -#ifdef DEBUG -#define GORIG(g) (GDATA(g)->orig) -#endif - -#if 0 -/* ndata is attached to nodes in real graphs. - * Real nodes also use "builtin" fields: - * pos - position information - * width,height - node dimensions - * xsize,ysize - node dimensions in points - */ -typedef struct { - node_t *dn; /* points to corresponding derived node, - * which may represent the node or its - * containing cluster. */ - graph_t *parent; /* smallest containing cluster */ -} ndata; - -#define NDATA(n) ((ndata*)(ND_alg(n))) -#define DNODE(n) (NDATA(n)->dn) -#define PARENT(n) (NDATA(n)->parent) -#endif - -/* - * Real nodes use "builtin" fields: - * ND_pos - position information - * ND_width,ND_height - node dimensions - * ND_pinned - * ND_lw,ND_rw,ND_ht - node dimensions in points - * ND_id - * ND_shape, ND_shape_info - * - * In addition, we use two of the dot fields for parent and derived node. - * Previously, we attached these via ND_alg, but ND_alg may be needed for - * spline routing, and splines=compound also requires the parent field. - */ -#define DNODE(n) (ND_next(n)) -#define PARENT(n) (ND_clust(n)) - -/* dndata is attached to nodes in derived graphs. - * Derived nodes also use "builtin" fields: - * clust - for cluster nodes, points to cluster in real graph. - * pos - position information - * width,height - node dimensions - */ -typedef struct { - int deg; /* degree of node */ - int wdeg; /* weighted degree of node */ - node_t *dn; /* If derived node is not a cluster, */ - /* dn points real node. */ - double disp[NDIM]; /* incremental displacement */ -} dndata; - -#define DNDATA(n) ((dndata*)(ND_alg(n))) -#define DISP(n) (DNDATA(n)->disp) -#define ANODE(n) (DNDATA(n)->dn) -#define DEG(n) (DNDATA(n)->deg) -#define WDEG(n) (DNDATA(n)->wdeg) -#define IS_PORT(n) (!ANODE(n) && !ND_clust(n)) - -#endif /* FDP_PRIVATE */ - -#ifdef __cplusplus -extern "C" { -#endif - -struct fdpParms_s { - int useGrid; /* use grid for speed up */ - int useNew; /* encode x-K into attractive force */ - int numIters; /* actual iterations in layout */ - int unscaled; /* % of iterations used in pass 1 */ - double C; /* Repulsion factor in xLayout */ - double Tfact; /* scale temp from default expression */ - double K; /* spring constant; ideal distance */ - double T0; /* initial temperature */ -}; -typedef struct fdpParms_s fdpParms_t; - - extern void fdp_layout(Agraph_t * g); - extern void fdp_nodesize(node_t *, boolean); - extern void fdp_init_graph(Agraph_t * g); - extern void fdp_init_node_edge(Agraph_t * g); - extern void fdp_cleanup(Agraph_t * g); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/fdpgen/fdpinit.c b/internal/ccall/fdpgen/fdpinit.c deleted file mode 100644 index b390fcc..0000000 --- a/internal/ccall/fdpgen/fdpinit.c +++ /dev/null @@ -1,157 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* fdpinit.c: - * Written by Emden R. Gansner - * - * Mostly boilerplate initialization and cleanup code. - */ - -/* uses PRIVATE interface */ -#define FDP_PRIVATE 1 - -#include "tlayout.h" -#include "neatoprocs.h" -#include "agxbuf.h" - -static void initialPositions(graph_t * g) -{ - int i; - node_t *np; - attrsym_t *possym; - attrsym_t *pinsym; - double *pvec; - char *p; - char c; - - possym = agattr(g,AGNODE, "pos", NULL); - if (!possym) - return; - pinsym = agattr(g,AGNODE, "pin", NULL); - for (i = 0; (np = GD_neato_nlist(g)[i]); i++) { - p = agxget(np, possym); - if (p[0]) { - pvec = ND_pos(np); - c = '\0'; - if (sscanf(p, "%lf,%lf%c", pvec, pvec + 1, &c) >= 2) { - if (PSinputscale > 0.0) { - int i; - for (i = 0; i < NDIM; i++) - pvec[i] = pvec[i] / PSinputscale; - } - ND_pinned(np) = P_SET; - if ((c == '!') - || (pinsym && mapbool(agxget(np, pinsym)))) - ND_pinned(np) = P_PIN; - } else - fprintf(stderr, - "Warning: node %s, position %s, expected two floats\n", - agnameof(np), p); - } - } -} - -/* init_edge: - */ -static void init_edge(edge_t * e, attrsym_t * E_len) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - ED_factor(e) = late_double(e, E_weight, 1.0, 0.0); - ED_dist(e) = late_double(e, E_len, fdp_parms->K, 0.0); - - common_init_edge(e); -} - -static void init_node(node_t * n) -{ - common_init_node(n); - ND_pos(n) = N_NEW(GD_ndim(agraphof(n)), double); - gv_nodesize(n, GD_flip(agraphof(n))); -} - -void fdp_init_node_edge(graph_t * g) -{ - attrsym_t *E_len; - node_t *n; - edge_t *e; - int nn; - int i; - /* ndata* alg; */ - - aginit(g, AGNODE, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - processClusterEdges(g); - - /* Get node count after processClusterEdges(), as this function may - * add new nodes. - */ - nn = agnnodes(g); - /* alg = N_NEW(nn, ndata); */ - GD_neato_nlist(g) = N_NEW(nn + 1, node_t *); - - for (i = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) { - init_node (n); - /* ND_alg(n) = alg + i; */ - GD_neato_nlist(g)[i] = n; - ND_id(n) = i++; - } - - E_len = agattr(g,AGEDGE, "len", NULL); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - init_edge(e, E_len); - } - } - initialPositions(g); - -} - -static void cleanup_subgs(graph_t * g) -{ - graph_t *subg; - int i; - - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - free_label(GD_label(subg)); - if (GD_alg(subg)) { - free(PORTS(subg)); - free(GD_alg(subg)); - } - cleanup_subgs(subg); - } - free (GD_clust(g)); - if (g != agroot(g)) - agdelrec(g, "Agraphinfo_t"); -} - -static void fdp_cleanup_graph(graph_t * g) -{ - cleanup_subgs(g); - free(GD_neato_nlist(g)); - free(GD_alg(g)); -} - -void fdp_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - fdp_cleanup_graph(g); -} diff --git a/internal/ccall/fdpgen/grid.c b/internal/ccall/fdpgen/grid.c deleted file mode 100644 index 8a14e9c..0000000 --- a/internal/ccall/fdpgen/grid.c +++ /dev/null @@ -1,274 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * grid.c - * Written by Emden R. Gansner - * - * Support for grid to speed up layout. On each pass, nodes are - * put into grid cells. Given a node, repulsion is only computed - * for nodes in one of that nodes 9 adjacent grids. - */ - -/* uses PRIVATE interface for NOTUSED */ -#define FDP_PRIVATE 1 - -#include -#include -#include - - /* structure for maintaining a free list of cells */ -typedef struct _block { - cell *mem; /* block of cells */ - cell *cur; /* next available cell */ - cell *endp; /* after last cell */ - struct _block *next; /* next memory block */ -} block_t; - -/* newBlock: - * Create new block of size cells - */ -static block_t *newBlock(int size) -{ - block_t *newb; - - newb = GNEW(block_t); - newb->next = 0; - newb->mem = N_GNEW(size, cell); - newb->endp = newb->mem + size; - newb->cur = newb->mem; - - return newb; -} - -/* freeBlock: - * Free malloc'ed memory and block. - * Recurse to next block - */ -static void freeBlock(block_t * b) -{ - if (b) { - block_t *next = b->next; - free(b->mem); - free(b); - freeBlock(next); - } -} - -struct _grid { - Dt_t *data; /* cells indexed by (i,j) */ - block_t *cellMem; /* list of memory blocks for cells */ - block_t *cellCur; /* current block */ - int listSize; /* memory of nodes */ - node_list *listMem; /* list of memory for node items */ - node_list *listCur; /* next node item */ -}; - -/* getCell: - * Create a new cell using memory blocks. - */ -static cell *getCell(Grid * g) -{ - cell *cp; - block_t *bp = g->cellCur; /* current block */ - - if (bp->cur == bp->endp) { /* current block is full */ - if (bp->next == 0) { - bp->next = newBlock(2 * (bp->endp - bp->mem)); - } - bp = g->cellCur = bp->next; - bp->cur = bp->mem; - } - cp = bp->cur++; - return cp; -} - -static int ijcmpf(Dt_t * d, gridpt * p1, gridpt * p2, Dtdisc_t * disc) -{ - int diff; - - NOTUSED(d); - NOTUSED(disc); - if ((diff = (p1->i - p2->i))) - return diff; - else - return (p1->j - p2->j); -} - -static Grid *_grid; /* hack because can't attach info. to Dt_t */ - -/* newCell: - * Allocate a new cell from free store and initialize its indices - * This is used by the grid discipline to create cells. - */ -static void *newCell(Dt_t * d, void *obj, Dtdisc_t * disc) -{ - cell *cellp = (cell *) obj; - cell *newp; - - NOTUSED(disc); - newp = getCell(_grid); - newp->p.i = cellp->p.i; - newp->p.j = cellp->p.j; - newp->nodes = 0; - - return newp; -} - -/* newNode: - * Allocate a new node item from free store. - * Set node value and hook into list. - * A grid assumes the memory allocated in adjustGrid - * will be enough more all nodes added. - */ -static node_list *newNode(Grid * g, Agnode_t * n, node_list * nxt) -{ - node_list *newp; - - newp = g->listCur++; - newp->node = n; - newp->next = nxt; - - return newp; -} - -static Dtdisc_t gridDisc = { - offsetof(cell, p), - sizeof(gridpt), - offsetof(cell, link), - (Dtmake_f) newCell, - NIL(Dtfree_f), - (Dtcompar_f) ijcmpf, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* mkGrid: - * Create grid data structure. - * cellHint provides rough idea of how many cells - * may be needed. - */ -Grid *mkGrid(int cellHint) -{ - Grid *g; - - g = GNEW(Grid); - _grid = g; /* see comment above */ - g->data = dtopen(&gridDisc, Dtoset); - g->listMem = 0; - g->listSize = 0; - g->cellMem = newBlock(cellHint); - return g; -} - -/* adjustGrid: - * Set up node list for grid. Make sure the list - * can handle nnodes nodes. - * It is assumed no more than nnodes will be added - * to the grid. - */ -void adjustGrid(Grid * g, int nnodes) -{ - int nsize; - - if (nnodes > g->listSize) { - nsize = MAX(nnodes, 2 * (g->listSize)); - if (g->listMem) - free(g->listMem); - g->listMem = N_GNEW(nsize, node_list); - g->listSize = nsize; - } -} - -/* clearGrid: - * Reset grid. This clears the dictionary, - * and reuses available memory. - */ -void clearGrid(Grid * g) -{ - dtclear(g->data); - g->listCur = g->listMem; - g->cellCur = g->cellMem; - g->cellCur->cur = g->cellCur->mem; -} - -/* delGrid: - * Close and free all grid resources. - */ -void delGrid(Grid * g) -{ - dtclose(g->data); - freeBlock(g->cellMem); - free(g->listMem); - free(g); -} - -/* addGrid: - * Add node n to cell (i,j) in grid g. - */ -void addGrid(Grid * g, int i, int j, Agnode_t * n) -{ - cell *cellp; - cell key; - - key.p.i = i; - key.p.j = j; - cellp = dtinsert(g->data, &key); - cellp->nodes = newNode(g, n, cellp->nodes); - if (Verbose >= 3) { - fprintf(stderr, "grid(%d,%d): %s\n", i, j, agnameof(n)); - } -} - -typedef int (*walkfn_t) (Dt_t *, void *, void *); - -/* walkGrid: - * Apply function walkf to each cell in the grid. - * The second argument to walkf is the cell; the - * third argument is the grid. (The first argument - * is the dictionary.) walkf must return 0. - */ -void walkGrid(Grid * g, int (*walkf) (Dt_t *, cell *, Grid *)) -{ - dtwalk(g->data, (walkfn_t) walkf, g); -} - -/* findGrid; - * Return the cell, if any, corresponding to - * indices i,j - */ -cell *findGrid(Grid * g, int i, int j) -{ - cell key; - - key.p.i = i; - key.p.j = j; - return ((cell *) dtsearch(g->data, &key)); -} - -/* gLength: - * Return the number of nodes in a cell. - */ -int gLength(cell * p) -{ - int len = 0; - node_list *nodes = p->nodes; - - while (nodes) { - len++; - nodes = nodes->next; - } - return len; -} diff --git a/internal/ccall/fdpgen/grid.h b/internal/ccall/fdpgen/grid.h deleted file mode 100644 index 93fe56d..0000000 --- a/internal/ccall/fdpgen/grid.h +++ /dev/null @@ -1,56 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef GRID_H -#define GRID_H - -#include "config.h" - -#include -#include - - typedef struct _grid Grid; - - typedef struct _node_list { - Agnode_t *node; - struct _node_list *next; - } node_list; - - typedef struct { - int i, j; - } gridpt; - - typedef struct { - gridpt p; /* index of cell */ - node_list *nodes; /* nodes in cell */ - Dtlink_t link; /* cdt data */ - } cell; - - extern Grid *mkGrid(int); - extern void adjustGrid(Grid * g, int nnodes); - extern void clearGrid(Grid *); - extern void addGrid(Grid *, int, int, Agnode_t *); - extern void walkGrid(Grid *, int (*)(Dt_t *, cell *, Grid *)); - extern cell *findGrid(Grid *, int, int); - extern void delGrid(Grid *); - extern int gLength(cell * p); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/fdpgen/layout.c b/internal/ccall/fdpgen/layout.c deleted file mode 100644 index bd713c5..0000000 --- a/internal/ccall/fdpgen/layout.c +++ /dev/null @@ -1,1143 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* layout.c: - * Written by Emden R. Gansner - * - * This module provides the main bookkeeping for the fdp layout. - * In particular, it handles the recursion and the creation of - * ports and auxiliary graphs. - * - * TODO : can we use ports to aid in layout of edges? Note that - * at present, they are deleted. - * - * Can we delay all repositioning of nodes until evalPositions, so - * finalCC only sets the bounding boxes? - * - * Make sure multiple edges have an effect. - */ - -/* uses PRIVATE interface */ -#define FDP_PRIVATE 1 - -#include "config.h" -#ifdef HAVE_LIMITS_H -#include -#else -#ifdef HAVE_VALUES_H -#include -#endif -#endif -#include -#include -#include "tlayout.h" -#include "neatoprocs.h" -#include "adjust.h" -#include "comp.h" -#include "pack.h" -#include "clusteredges.h" -#include "dbg.h" -#include - -static jmp_buf jbuf; - -typedef struct { - graph_t* rootg; /* logical root; graph passed in to fdp_layout */ - attrsym_t *G_coord; - attrsym_t *G_width; - attrsym_t *G_height; - int gid; - pack_info pack; -} layout_info; - -typedef struct { - edge_t *e; - double alpha; - double dist2; -} erec; - -#define NEW_EDGE(e) (ED_to_virt(e) == 0) - -/* finalCC: - * Set graph bounding box given list of connected - * components, each with its bounding box set. - * If c_cnt > 1, then pts != NULL and gives translations for components. - * Add margin about whole graph unless isRoot is true. - * Reposition nodes based on final position of - * node's connected component. - * Also, entire layout is translated to origin. - */ -static void -finalCC(graph_t * g, int c_cnt, graph_t ** cc, point * pts, graph_t * rg, - layout_info* infop) -{ - attrsym_t * G_width = infop->G_width; - attrsym_t * G_height = infop->G_height; - graph_t *cg; - box b, bb; - boxf bbf; - point pt; - int margin; - graph_t **cp = cc; - point *pp = pts; - int isRoot = (rg == infop->rootg); - int isEmpty = 0; - - /* compute graph bounding box in points */ - if (c_cnt) { - cg = *cp++; - BF2B(GD_bb(cg), bb); - if (c_cnt > 1) { - pt = *pp++; - bb.LL.x += pt.x; - bb.LL.y += pt.y; - bb.UR.x += pt.x; - bb.UR.y += pt.y; - while ((cg = *cp++)) { - BF2B(GD_bb(cg), b); - pt = *pp++; - b.LL.x += pt.x; - b.LL.y += pt.y; - b.UR.x += pt.x; - b.UR.y += pt.y; - bb.LL.x = MIN(bb.LL.x, b.LL.x); - bb.LL.y = MIN(bb.LL.y, b.LL.y); - bb.UR.x = MAX(bb.UR.x, b.UR.x); - bb.UR.y = MAX(bb.UR.y, b.UR.y); - } - } - } else { /* empty graph */ - bb.LL.x = 0; - bb.LL.y = 0; - bb.UR.x = late_int(rg, G_width, POINTS(DEFAULT_NODEWIDTH), 3); - bb.UR.y = late_int(rg, G_height, POINTS(DEFAULT_NODEHEIGHT), 3); - isEmpty = 1; - } - - if (GD_label(rg)) { - point p; - int d; - - isEmpty = 0; - PF2P(GD_label(rg)->dimen, p); - d = p.x - (bb.UR.x - bb.LL.x); - if (d > 0) { /* height of label added below */ - d /= 2; - bb.LL.x -= d; - bb.UR.x += d; - } - } - - if (isRoot || isEmpty) - margin = 0; - else - margin = late_int (g, G_margin, CL_OFFSET, 0); - pt.x = -bb.LL.x + margin; - pt.y = -bb.LL.y + margin + GD_border(rg)[BOTTOM_IX].y; - bb.LL.x = 0; - bb.LL.y = 0; - bb.UR.x += pt.x + margin; - bb.UR.y += pt.y + margin + GD_border(rg)[TOP_IX].y; - - /* translate nodes */ - if (c_cnt) { - cp = cc; - pp = pts; - while ((cg = *cp++)) { - point p; - node_t *n; - pointf del; - - if (pp) { - p = *pp++; - p.x += pt.x; - p.y += pt.y; - } else { - p = pt; - } - del.x = PS2INCH(p.x); - del.y = PS2INCH(p.y); - for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) { - ND_pos(n)[0] += del.x; - ND_pos(n)[1] += del.y; - } - } - } - - bbf.LL.x = PS2INCH(bb.LL.x); - bbf.LL.y = PS2INCH(bb.LL.y); - bbf.UR.x = PS2INCH(bb.UR.x); - bbf.UR.y = PS2INCH(bb.UR.y); - BB(g) = bbf; - -} - -/* mkDeriveNode: - * Constructor for a node in a derived graph. - * Allocates dndata. - */ -static node_t *mkDeriveNode(graph_t * dg, char *name) -{ - node_t *dn; - - dn = agnode(dg, name,1); - agbindrec(dn, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - ND_alg(dn) = (void *) NEW(dndata); /* free in freeDeriveNode */ - ND_pos(dn) = N_GNEW(GD_ndim(dg), double); - /* fprintf (stderr, "Creating %s\n", dn->name); */ - return dn; -} - -static void freeDeriveNode(node_t * n) -{ - free(ND_alg(n)); - free(ND_pos(n)); - agdelrec(n, "Agnodeinfo_t"); -} - -static void freeGData(graph_t * g) -{ - free(GD_alg(g)); -} - -static void freeDerivedGraph(graph_t * g, graph_t ** cc) -{ - graph_t *cg; - node_t *dn; - node_t *dnxt; - edge_t *e; - - while ((cg = *cc++)) { - freeGData(cg); - agdelrec(cg, "Agraphinfo_t"); - } - if (PORTS(g)) - free(PORTS(g)); - freeGData(g); - agdelrec(g, "Agraphinfo_t"); - for (dn = agfstnode(g); dn; dn = dnxt) { - dnxt = agnxtnode(g, dn); - for (e = agfstout(g, dn); e; e = agnxtout(g, e)) { - free (ED_to_virt(e)); - agdelrec(e, "Agedgeinfo_t"); - } - freeDeriveNode(dn); - } - agclose(g); -} - -/* evalPositions: - * The input is laid out, but node coordinates - * are relative to smallest containing cluster. - * Walk through all nodes and clusters, translating - * the positions to absolute coordinates. - * Assume that when called, g's bounding box is - * in absolute coordinates and that box of root graph - * has LL at origin. - */ -static void evalPositions(graph_t * g, graph_t* rootg) -{ - int i; - graph_t *subg; - node_t *n; - boxf bb; - boxf sbb; - - bb = BB(g); - - /* translate nodes in g */ - if (g != rootg) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (PARENT(n) != g) - continue; - ND_pos(n)[0] += bb.LL.x; - ND_pos(n)[1] += bb.LL.y; - } - } - - /* translate top-level clusters and recurse */ - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - if (g != rootg) { - sbb = BB(subg); - sbb.LL.x += bb.LL.x; - sbb.LL.y += bb.LL.y; - sbb.UR.x += bb.LL.x; - sbb.UR.y += bb.LL.y; - BB(subg) = sbb; - } - evalPositions(subg, rootg); - } -} - -#define CL_CHUNK 10 - -typedef struct { - graph_t **cl; - int sz; - int cnt; -} clist_t; - -static void initCList(clist_t * clist) -{ - clist->cl = 0; - clist->sz = 0; - clist->cnt = 0; -} - -/* addCluster: - * Append a new cluster to the list. - * NOTE: cl[0] is empty. The clusters are in cl[1..cnt]. - * Normally, we increase the array when cnt == sz. - * The test for cnt > sz is necessary for the first time. - */ -static void addCluster(clist_t * clist, graph_t * subg) -{ - clist->cnt++; - if (clist->cnt >= clist->sz) { - clist->sz += CL_CHUNK; - clist->cl = RALLOC(clist->sz, clist->cl, graph_t *); - } - clist->cl[clist->cnt] = subg; -} - -#define BSZ 1000 - -/* portName: - * Generate a name for a port. - * We use the name of the subgraph and names of the nodes on the edge, - * if possible. Otherwise, we use the ids of the nodes. - * This is for debugging. For production, just use edge id and some - * id for the graph. Note that all the graphs are subgraphs of the - * root graph. - */ -static char *portName(graph_t * g, bport_t * p) -{ - edge_t *e = p->e; - node_t *h = aghead(e); - node_t *t = agtail(e); - static char buf[BSZ + 1]; - int len = 8; - - len += strlen(agnameof(g)) + strlen(agnameof(h)) + strlen(agnameof(t)); - if (len >= BSZ) - sprintf(buf, "_port_%s_%s_%s_%lld", agnameof(g), agnameof(t), agnameof(h), - (uint64_t)AGSEQ(e)); - else - sprintf(buf, "_port_%s_(%d)_(%d)_%lld",agnameof(g), ND_id(t), ND_id(h), - (uint64_t)AGSEQ(e)); - return buf; -} - -/* chkPos: - * If cluster has coords attribute, use to supply initial position - * of derived node. - * Only called if G_coord is defined. - * We also look at the parent graph's G_coord attribute. If this - * is identical to the child graph, we have to assume the child - * inherited it. - */ -static void chkPos(graph_t* g, node_t* n, layout_info* infop, boxf* bbp) -{ - char *p; - char *pp; - boxf bb; - char c; - graph_t *parent; - attrsym_t *G_coord = infop->G_coord; - - p = agxget(g, G_coord); - if (p[0]) { - if (g != infop->rootg) { - parent =agparent(g); - pp = agxget(parent, G_coord); - if ((pp == p) || !strcmp(p, pp)) - return; - } - c = '\0'; - if (sscanf(p, "%lf,%lf,%lf,%lf%c", - &bb.LL.x, &bb.LL.y, &bb.UR.x, &bb.UR.y, &c) >= 4) { - if (PSinputscale > 0.0) { - bb.LL.x /= PSinputscale; - bb.LL.y /= PSinputscale; - bb.UR.x /= PSinputscale; - bb.UR.y /= PSinputscale; - } - if (c == '!') - ND_pinned(n) = P_PIN; - else if (c == '?') - ND_pinned(n) = P_FIX; - else - ND_pinned(n) = P_SET; - *bbp = bb; - } else - agerr(AGWARN, "graph %s, coord %s, expected four doubles\n", - agnameof(g), p); - } -} - -/* addEdge: - * Add real edge e to its image de in the derived graph. - * We use the to_virt and count fields to store the list. - */ -static void addEdge(edge_t * de, edge_t * e) -{ - short cnt = ED_count(de); - edge_t **el; - - el = (edge_t **) (ED_to_virt(de)); - el = ALLOC(cnt + 1, el, edge_t *); - el[cnt] = e; - ED_to_virt(de) = (edge_t *) el; - ED_count(de)++; -} - -/* copyAttr: - * Copy given attribute from g to dg. - */ -static void -copyAttr (graph_t* g, graph_t* dg, char* attr) -{ - char* ov_val; - Agsym_t* ov; - - if ((ov = agattr(g,AGRAPH, attr, NULL))) { - ov_val = agxget(g,ov); - ov = agattr(dg,AGRAPH, attr, NULL); - if (ov) - agxset (dg, ov, ov_val); - else - agattr(dg, AGRAPH, attr, ov_val); - } -} - -/* deriveGraph: - * Create derived graph of g by collapsing clusters into - * nodes. An edge is created between nodes if there is - * an edge between two nodes in the clusters of the base graph. - * Such edges record all corresponding real edges. - * In addition, we add a node and edge for each port. - */ -static graph_t *deriveGraph(graph_t * g, layout_info * infop) -{ - graph_t *dg; - node_t *dn; - graph_t *subg; - char name[100]; - bport_t *pp; - node_t *n; - edge_t *de; - int i, id = 0; - - sprintf(name, "_dg_%d", infop->gid++); - if (Verbose >= 2) - fprintf(stderr, "derive graph %s of %s\n", name, agnameof(g)); - - dg = agopen("derived", Agstrictdirected,NIL(Agdisc_t *)); - agbindrec(dg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_alg(dg) = (void *) NEW(gdata); /* freed in freeDeriveGraph */ -#ifdef DEBUG - GORIG(dg) = g; -#endif - GD_ndim(dg) = GD_ndim(g); - - /* Copy attributes from g. - */ - copyAttr(g,dg,"overlap"); - copyAttr(g,dg,"sep"); - copyAttr(g,dg,"K"); - - /* create derived nodes from clusters */ - for (i = 1; i <= GD_n_cluster(g); i++) { - boxf fix_bb = {{ MAXDOUBLE, MAXDOUBLE },{ -MAXDOUBLE, -MAXDOUBLE }}; - subg = GD_clust(g)[i]; - - do_graph_label(subg); - dn = mkDeriveNode(dg, agnameof(subg)); - ND_clust(dn) = subg; - ND_id(dn) = id++; - if (infop->G_coord) - chkPos(subg, dn, infop, &fix_bb); - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - DNODE(n) = dn; -#ifdef UNIMPLEMENTED -/* This code starts the implementation of supporting pinned nodes - * within clusters. This needs more work. In particular, we may need - * a separate notion of pinning related to contained nodes, which will - * allow the cluster itself to wiggle. - */ - if (ND_pinned(n)) { - fix_bb.LL.x = MIN(fix_bb.LL.x, ND_pos(n)[0]); - fix_bb.LL.y = MIN(fix_bb.LL.y, ND_pos(n)[1]); - fix_bb.UR.x = MAX(fix_bb.UR.x, ND_pos(n)[0]); - fix_bb.UR.y = MAX(fix_bb.UR.y, ND_pos(n)[1]); - ND_pinned(dn) = MAX(ND_pinned(dn), ND_pinned(n)); - } -#endif - } - if (ND_pinned(dn)) { - ND_pos(dn)[0] = (fix_bb.LL.x + fix_bb.UR.x) / 2; - ND_pos(dn)[1] = (fix_bb.LL.y + fix_bb.UR.y) / 2; - } - } - - /* create derived nodes from remaining nodes */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (!DNODE(n)) { - if (PARENT(n) && (PARENT(n) != GPARENT(g))) { - agerr (AGERR, "node \"%s\" is contained in two non-comparable clusters \"%s\" and \"%s\"\n", agnameof(n), agnameof(g), agnameof(PARENT(n))); - longjmp (jbuf, 1); - } - PARENT(n) = g; - if (IS_CLUST_NODE(n)) - continue; - dn = mkDeriveNode(dg, agnameof(n)); - DNODE(n) = dn; - ND_id(dn) = id++; - ND_width(dn) = ND_width(n); - ND_height(dn) = ND_height(n); - ND_lw(dn) = ND_lw(n); - ND_rw(dn) = ND_rw(n); - ND_ht(dn) = ND_ht(n); - ND_shape(dn) = ND_shape(n); - ND_shape_info(dn) = ND_shape_info(n); - if (ND_pinned(n)) { - ND_pos(dn)[0] = ND_pos(n)[0]; - ND_pos(dn)[1] = ND_pos(n)[1]; - ND_pinned(dn) = ND_pinned(n); - } - ANODE(dn) = n; - } - } - - /* add edges */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - edge_t *e; - node_t *hd; - node_t *tl = DNODE(n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - hd = DNODE(aghead(e)); - if (hd == tl) - continue; - if (hd > tl) - de = agedge(dg, tl, hd, NULL,1); - else - de = agedge(dg, hd, tl, NULL,1); - agbindrec(de, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - ED_dist(de) = ED_dist(e); - ED_factor(de) = ED_factor(e); - /* fprintf (stderr, "edge %s -- %s\n", tl->name, hd->name); */ - WDEG(hd)++; - WDEG(tl)++; - if (NEW_EDGE(de)) { - DEG(hd)++; - DEG(tl)++; - } - addEdge(de, e); - } - } - - /* transform ports */ - if ((pp = PORTS(g))) { - bport_t *pq; - node_t *m; - int sz = NPORTS(g); - - /* freed in freeDeriveGraph */ - PORTS(dg) = pq = N_NEW(sz + 1, bport_t); - sz = 0; - while (pp->e) { - m = DNODE(pp->n); - /* Create port in derived graph only if hooks to internal node */ - if (m) { - dn = mkDeriveNode(dg, portName(g, pp)); - sz++; - ND_id(dn) = id++; - if (dn > m) - de = agedge(dg, m, dn, NULL,1); - else - de = agedge(dg, dn, m, NULL,1); - agbindrec(de, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - ED_dist(de) = ED_dist(pp->e); - ED_factor(de) = ED_factor(pp->e); - addEdge(de, pp->e); - WDEG(dn)++; - WDEG(m)++; - DEG(dn)++; /* ports are unique, so this will be the first and */ - DEG(m)++; /* only time the edge is touched. */ - pq->n = dn; - pq->alpha = pp->alpha; - pq->e = de; - pq++; - } - pp++; - } - NPORTS(dg) = sz; - } - - return dg; -} - -/* ecmp: - * Sort edges by angle, then distance. - */ -static int ecmp(const void *v1, const void *v2) -{ - erec *e1 = (erec *) v1; - erec *e2 = (erec *) v2; - if (e1->alpha > e2->alpha) - return 1; - else if (e1->alpha < e2->alpha) - return -1; - else if (e1->dist2 > e2->dist2) - return 1; - else if (e1->dist2 < e2->dist2) - return -1; - else - return 0; -} - -#define ANG (M_PI/90) /* Maximum angular change: 2 degrees */ - -/* getEdgeList: - * Generate list of edges in derived graph g using - * node n. The list is in counterclockwise order. - * This, of course, assumes we have an initial layout for g. - */ -static erec *getEdgeList(node_t * n, graph_t * g) -{ - erec *erecs; - int deg = DEG(n); - int i; - double dx, dy; - edge_t *e; - node_t *m; - - /* freed in expandCluster */ - erecs = N_NEW(deg + 1, erec); - i = 0; - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - if (aghead(e) == n) - m = agtail(e); - else - m = aghead(e); - dx = ND_pos(m)[0] - ND_pos(n)[0]; - dy = ND_pos(m)[1] - ND_pos(n)[1]; - erecs[i].e = e; - erecs[i].alpha = atan2(dy, dx); - erecs[i].dist2 = dx * dx + dy * dy; - i++; - } - assert(i == deg); - qsort(erecs, deg, sizeof(erec), ecmp); - - /* ensure no two angles are equal */ - if (deg >= 2) { - int j; - double a, inc, delta, bnd; - - i = 0; - while (i < deg - 1) { - a = erecs[i].alpha; - j = i + 1; - while ((j < deg) && (erecs[j].alpha == a)) - j++; - if (j == i + 1) - i = j; - else { - if (j == deg) - bnd = M_PI; /* all values equal up to end */ - else - bnd = erecs[j].alpha; - delta = (bnd - a) / (j - i); - if (delta > ANG) - delta = ANG; - inc = 0; - for (; i < j; i++) { - erecs[i].alpha += inc; - inc += delta; - } - } - } - } - - return erecs; -} - -/* genPorts: - * Given list of edges with node n in derived graph, add corresponding - * ports to port list pp, starting at index idx. Return next index. - * If an edge in the derived graph corresponds to multiple real edges, - * add them in order if address of n is smaller than other node address. - * Otherwise, reverse order. - * Attach angles. The value bnd gives next angle after er->alpha. - */ -static int -genPorts(node_t * n, erec * er, bport_t * pp, int idx, double bnd) -{ - node_t *other; - int cnt; - edge_t *e = er->e; - edge_t *el; - edge_t **ep; - double angle, delta; - int i, j, inc; - - cnt = ED_count(e); - - if (aghead(e) == n) - other = agtail(e); - else - other = aghead(e); - - delta = (bnd - er->alpha) / cnt; - angle = er->alpha; - if (delta > ANG) - delta = ANG; - - if (n < other) { - i = idx; - inc = 1; - } else { - i = idx + cnt - 1; - inc = -1; - angle += delta * (cnt - 1); - delta = -delta; - } - - ep = (edge_t **) (el = ED_to_virt(e)); - for (j = 0; j < ED_count(e); j++, ep++) { - el = *ep; - pp[i].e = el; - pp[i].n = (DNODE(agtail(el)) == n ? agtail(el) : aghead(el)); - pp[i].alpha = angle; - i += inc; - angle += delta; - } - return (idx + cnt); -} - -/* expandCluster; - * Given positioned derived graph cg with node n which corresponds - * to a cluster, generate a graph containing the interior of the - * cluster, plus port information induced by the layout of cg. - * Basically, we use the cluster subgraph to which n corresponds, - * attached with port information. - */ -static graph_t *expandCluster(node_t * n, graph_t * cg) -{ - erec *es; - erec *ep; - erec *next; - graph_t *sg = ND_clust(n); - bport_t *pp; - int sz = WDEG(n); - int idx = 0; - double bnd; - - if (sz != 0) { - /* freed in cleanup_subgs */ - pp = N_NEW(sz + 1, bport_t); - - /* create sorted list of edges of n */ - es = ep = getEdgeList(n, cg); - - /* generate ports from edges */ - while (ep->e) { - next = ep + 1; - if (next->e) - bnd = next->alpha; - else - bnd = 2 * M_PI + es->alpha; - idx = genPorts(n, ep, pp, idx, bnd); - ep = next; - } - assert(idx == sz); - - PORTS(sg) = pp; - NPORTS(sg) = sz; - free(es); - } - return sg; -} - -/* setClustNodes: - * At present, cluster nodes are not assigned a position during layout, - * but positioned in the center of its associated cluster. Because the - * dummy edge associated with a cluster node may not occur at a sufficient - * level of cluster, the edge may not be used during layout and we cannot - * therefore rely find these nodes via ports. - * - * In this implementation, we just do a linear pass over all nodes in the - * root graph. At some point, we may use a better method, like having each - * cluster contain its list of cluster nodes, or have the graph keep a list. - * - * As nodes, we need to assign cluster nodes the coordinates in the - * coordinates of its cluster p. Note that p's bbox is in its parent's - * coordinates. - * - * If routing, we may decide to place on cluster boundary, - * and use polyline. - */ -static void -setClustNodes(graph_t* root) -{ - boxf bb; - graph_t* p; - pointf ctr; - node_t *n; - double w, h, h_pts; - double h2, w2; - pointf *vertices; - - for (n = agfstnode(root); n; n = agnxtnode(root, n)) { - if (!IS_CLUST_NODE(n)) continue; - - p = PARENT(n); - bb = BB(p); /* bbox in parent cluster's coordinates */ - w = bb.UR.x - bb.LL.x; - h = bb.UR.y - bb.LL.y; - ctr.x = w / 2.0; - ctr.y = h / 2.0; - w2 = INCH2PS(w / 2.0); - h2 = INCH2PS(h / 2.0); - h_pts = INCH2PS(h); - ND_pos(n)[0] = ctr.x; - ND_pos(n)[1] = ctr.y; - ND_width(n) = w; - ND_height(n) = h; - /* ND_xsize(n) = POINTS(w); */ - ND_lw(n) = ND_rw(n) = w2; - ND_ht(n) = h_pts; - - vertices = ((polygon_t *) ND_shape_info(n))->vertices; - vertices[0].x = ND_rw(n); - vertices[0].y = h2; - vertices[1].x = -ND_lw(n); - vertices[1].y = h2; - vertices[2].x = -ND_lw(n); - vertices[2].y = -h2; - vertices[3].x = ND_rw(n); - vertices[3].y = -h2; - } -} - -/* layout: - * Given g with ports: - * Derive g' from g by reducing clusters to points (deriveGraph) - * Compute connected components of g' (findCComp) - * For each cc of g': - * Layout cc (tLayout) - * For each node n in cc of g' <-> cluster c in g: - * Add ports based on layout of cc to get c' (expandCluster) - * Layout c' (recursion) - * Remove ports from cc - * Expand nodes of cc to reflect size of c' (xLayout) - * Pack connected components to get layout of g (putGraphs) - * Translate layout so that bounding box of layout + margin - * has the origin as LL corner. - * Set position of top level clusters and real nodes. - * Set bounding box of graph - * - * TODO: - * - * Possibly should modify so that only do connected components - * on top-level derived graph. Unconnected parts of a cluster - * could just rattle within cluster boundaries. This may mix - * up components but give a tighter packing. - * - * Add edges per components to get better packing, rather than - * wait until the end. - */ -static -void layout(graph_t * g, layout_info * infop) -{ - point *pts = NULL; - graph_t *dg; - node_t *dn; - node_t *n; - graph_t *cg; - graph_t *sg; - graph_t **cc; - graph_t **pg; - int c_cnt; - int pinned; - xparams xpms; - -#ifdef DEBUG - incInd(); -#endif - if (Verbose) { -#ifdef DEBUG - prIndent(); -#endif - fprintf (stderr, "layout %s\n", agnameof(g)); - } - /* initialize derived node pointers */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - DNODE(n) = 0; - - dg = deriveGraph(g, infop); - cc = pg = findCComp(dg, &c_cnt, &pinned); - - while ((cg = *pg++)) { - node_t* nxtnode; - fdp_tLayout(cg, &xpms); - for (n = agfstnode(cg); n; n = nxtnode) { - nxtnode = agnxtnode(cg, n); - if (ND_clust(n)) { - pointf pt; - sg = expandCluster(n, cg); /* attach ports to sg */ - layout(sg, infop); - /* bb.LL == origin */ - ND_width(n) = BB(sg).UR.x; - ND_height(n) = BB(sg).UR.y; - pt.x = POINTS_PER_INCH * BB(sg).UR.x; - pt.y = POINTS_PER_INCH * BB(sg).UR.y; - ND_rw(n) = ND_lw(n) = pt.x/2; - ND_ht(n) = pt.y; - } else if (IS_PORT(n)) - agdelete(cg, n); /* remove ports from component */ - } - - /* Remove overlaps */ - if (agnnodes(cg) >= 2) { - if (g == infop->rootg) - normalize (cg); - fdp_xLayout(cg, &xpms); - } - /* set bounding box but don't use ports */ - /* setBB (cg); */ - } - - /* At this point, each connected component has its nodes correctly - * positioned. If we have multiple components, we pack them together. - * All nodes will be moved to their new positions. - * NOTE: packGraphs uses nodes in components, so if port nodes are - * not removed, it won't work. - */ - /* Handle special cases well: no ports to real internal nodes - * Place cluster edges separately, after layout. - * How to combine parts, especially with disparate components? - */ - if (c_cnt > 1) { - boolean *bp; - if (pinned) { - bp = N_NEW(c_cnt, boolean); - bp[0] = TRUE; - } else - bp = 0; - infop->pack.fixed = bp; - pts = putGraphs(c_cnt, cc, NULL, &infop->pack); - if (bp) - free(bp); - } else { - pts = NULL; - if (c_cnt == 1) - compute_bb(cc[0]); - } - - /* set bounding box of dg and reposition nodes */ - finalCC(dg, c_cnt, cc, pts, g, infop); - free (pts); - - /* record positions from derived graph to input graph */ - /* At present, this does not record port node info */ - /* In fact, as noted above, we have removed port nodes */ - for (dn = agfstnode(dg); dn; dn = agnxtnode(dg, dn)) { - if ((sg = ND_clust(dn))) { - BB(sg).LL.x = ND_pos(dn)[0] - ND_width(dn) / 2; - BB(sg).LL.y = ND_pos(dn)[1] - ND_height(dn) / 2; - BB(sg).UR.x = BB(sg).LL.x + ND_width(dn); - BB(sg).UR.y = BB(sg).LL.y + ND_height(dn); - } else if ((n = ANODE(dn))) { - ND_pos(n)[0] = ND_pos(dn)[0]; - ND_pos(n)[1] = ND_pos(dn)[1]; - } - } - BB(g) = BB(dg); -#ifdef DEBUG - if (g == infop->rootg) - dump(g, 1, 0); -#endif - - /* clean up temp graphs */ - freeDerivedGraph(dg, cc); - free(cc); - if (Verbose) { -#ifdef DEBUG - prIndent (); -#endif - fprintf (stderr, "end %s\n", agnameof(g)); - } -#ifdef DEBUG - decInd(); -#endif -} - -/* setBB; - * Set point box g->bb from inch box BB(g). - */ -static void setBB(graph_t * g) -{ - int i; - boxf bb; - - bb.LL.x = POINTS_PER_INCH * BB(g).LL.x; - bb.LL.y = POINTS_PER_INCH * BB(g).LL.y; - bb.UR.x = POINTS_PER_INCH * BB(g).UR.x; - bb.UR.y = POINTS_PER_INCH * BB(g).UR.y; - GD_bb(g) = bb; - for (i = 1; i <= GD_n_cluster(g); i++) { - setBB(GD_clust(g)[i]); - } -} - -/* init_info: - * Initialize graph-dependent information and - * state variable.s - */ -void init_info(graph_t * g, layout_info * infop) -{ - infop->G_coord = agattr(g,AGRAPH, "coords", NULL); - infop->G_width = agattr(g,AGRAPH, "width", NULL); - infop->G_height = agattr(g, AGRAPH,"height", NULL); - infop->rootg = g; - infop->gid = 0; - infop->pack.mode = getPackInfo(g, l_node, CL_OFFSET / 2, &(infop->pack)); -} - -/* mkClusters: - * Attach list of immediate child clusters. - * NB: By convention, the indexing starts at 1. - * If pclist is NULL, the graph is the root graph or a cluster - * If pclist is non-NULL, we are recursively scanning a non-cluster - * subgraph for cluster children. - */ -static void -mkClusters (graph_t * g, clist_t* pclist, graph_t* parent) -{ - graph_t* subg; - clist_t list; - clist_t* clist; - - if (pclist == NULL) { - clist = &list; - initCList(clist); - } - else - clist = pclist; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) - { - if (!strncmp(agnameof(subg), "cluster", 7)) { - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_alg(subg) = (void *) NEW(gdata); /* freed in cleanup_subgs */ - GD_ndim(subg) = GD_ndim(parent); - LEVEL(subg) = LEVEL(parent) + 1; - GPARENT(subg) = parent; - addCluster(clist, subg); - mkClusters(subg, NULL, subg); - } - else { - mkClusters(subg, clist, parent); - } - } - if (pclist == NULL) { - GD_n_cluster(g) = list.cnt; - if (list.cnt) - GD_clust(g) = RALLOC(list.cnt + 1, list.cl, graph_t*); - } -} - -void fdp_init_graph(Agraph_t * g) -{ - setEdgeType (g, ET_LINE); - GD_alg(g) = (void *) NEW(gdata); /* freed in cleanup_graph */ - GD_ndim(g) = late_int(g, agattr(g,AGRAPH, "dim", NULL), 2, 2); - Ndim = GD_ndim(g) = MIN(GD_ndim(g), MAXDIM); - - mkClusters (g, NULL, g); - fdp_initParams(g); - fdp_init_node_edge(g); -} - -void fdpLayout(graph_t * g) -{ - layout_info info; - - init_info(g, &info); - layout(g, &info); - setClustNodes(g); - evalPositions(g,g); - - /* Set bbox info for g and all clusters. This is needed for - * spline drawing. We already know the graph bbox is at the origin. - * On return from spline drawing, all bounding boxes should be correct. - */ - setBB(g); -} - -static void -fdpSplines (graph_t * g) -{ - int trySplines = 0; - int et = EDGE_TYPE(g); - - if (et > ET_ORTHO) { - if (et == ET_COMPOUND) { - trySplines = splineEdges(g, compoundEdges, ET_SPLINE); - /* When doing the edges again, accept edges done by compoundEdges */ - if (trySplines) - Nop = 2; - } - if (trySplines || (et != ET_COMPOUND)) { - if (HAS_CLUST_EDGE(g)) { - agerr(AGWARN, - "splines and cluster edges not supported - using line segments\n"); - et = ET_LINE; - } else { - spline_edges1(g, et); - } - } - Nop = 0; - } - if (State < GVSPLINES) - spline_edges1(g, et); -} - -void fdp_layout(graph_t * g) -{ - /* Agnode_t* n; */ - - double save_scale = PSinputscale; - - PSinputscale = get_inputscale (g); - fdp_init_graph(g); - if (setjmp(jbuf)) { - return; - } - fdpLayout(g); -#if 0 - /* free ND_alg field so it can be used in spline routing */ - if ((n = agfstnode(g))) - free(ND_alg(n)); -#endif - neato_set_aspect(g); - - if (EDGE_TYPE(g) != ET_NONE) fdpSplines (g); - - gv_postprocess(g, 0); - PSinputscale = save_scale; -} diff --git a/internal/ccall/fdpgen/tlayout.c b/internal/ccall/fdpgen/tlayout.c deleted file mode 100644 index 643e6dd..0000000 --- a/internal/ccall/fdpgen/tlayout.c +++ /dev/null @@ -1,703 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* tlayout.c: - * Written by Emden R. Gansner - * - * Module for initial layout, using point nodes and ports. - * - * Note: If interior nodes are not connected, they tend to fly apart, - * despite being tied to port nodes. This occurs because, as initially - * coded, as the nodes tend to straighten into a line, the radius - * grows causing more expansion. Is the problem really here and not - * with disconnected nodes in xlayout? If here, we can either forbid - * expansion or eliminate repulsion between nodes only connected - * via port nodes. - */ - -#include "config.h" - -/* uses PRIVATE interface */ -#define FDP_PRIVATE 1 - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#include -#include -#ifndef WIN32 -#include -#endif -#include -#include -#include -#include - -#ifndef HAVE_SRAND48 -#define srand48 srand -#endif -#ifndef HAVE_DRAND48 -extern double drand48(void); -#endif - -#include "tlayout.h" -#include "globals.h" - -#define D_useGrid (fdp_parms->useGrid) -#define D_useNew (fdp_parms->useNew) -#define D_numIters (fdp_parms->numIters) -#define D_unscaled (fdp_parms->unscaled) -#define D_C (fdp_parms->C) -#define D_Tfact (fdp_parms->Tfact) -#define D_K (fdp_parms->K) -#define D_T0 (fdp_parms->T0) - - /* Actual parameters used; initialized using fdp_parms, then possibly - * updated with graph-specific values. - */ -typedef struct { - int useGrid; /* use grid for speed up */ - int useNew; /* encode x-K into attractive force */ - long seed; /* seed for position RNG */ - int numIters; /* actual iterations in layout */ - int maxIters; /* max iterations in layout */ - int unscaled; /* % of iterations used in pass 1 */ - double C; /* Repulsion factor in xLayout */ - double Tfact; /* scale temp from default expression */ - double K; /* spring constant; ideal distance */ - double T0; /* initial temperature */ - int smode; /* seed mode */ - double Cell; /* grid cell size */ - double Cell2; /* Cell*Cell */ - double K2; /* K*K */ - double Wd; /* half-width of boundary */ - double Ht; /* half-height of boundary */ - double Wd2; /* Wd*Wd */ - double Ht2; /* Ht*Ht */ - int pass1; /* iterations used in pass 1 */ - int loopcnt; /* actual iterations in this pass */ -} parms_t; - -static parms_t parms; - -#define T_useGrid (parms.useGrid) -#define T_useNew (parms.useNew) -#define T_seed (parms.seed) -#define T_numIters (parms.numIters) -#define T_maxIters (parms.maxIters) -#define T_unscaled (parms.unscaled) -#define T_C (parms.C) -#define T_Tfact (parms.Tfact) -#define T_K (parms.K) -#define T_T0 (parms.T0) -#define T_smode (parms.smode) -#define T_Cell (parms.Cell) -#define T_Cell2 (parms.Cell2) -#define T_K2 (parms.K2) -#define T_Wd (parms.Wd) -#define T_Ht (parms.Ht) -#define T_Wd2 (parms.Wd2) -#define T_Ht2 (parms.Ht2) -#define T_pass1 (parms.pass1) -#define T_loopcnt (parms.loopcnt) - -#define EXPFACTOR 1.2 -#define DFLT_maxIters 600 -#define DFLT_K 0.3 -#define DFLT_Cell 0.0 -#define DFLT_seed 1 -#define DFLT_smode INIT_RANDOM - -static double cool(double temp, int t) -{ - return (T_T0 * (T_maxIters - t)) / T_maxIters; -} - -/* reset_params: - */ -static void reset_params(void) -{ - T_T0 = -1.0; -} - -/* init_params: - * Set parameters for expansion phase based on initial - * layout parameters. If T0 is not set, we set it here - * based on the size of the graph. In this case, we - * return 1, so that fdp_tLayout can unset T0, to be - * reset by a recursive call to fdp_tLayout. - */ -static int init_params(graph_t * g, xparams * xpms) -{ - int ret = 0; - - if (T_T0 == -1.0) { - int nnodes = agnnodes(g); - - T_T0 = T_Tfact * T_K * sqrt(nnodes) / 5; -#ifdef DEBUG - if (Verbose) { - prIndent(); - fprintf(stderr, "tlayout %s", agnameof(g)); - fprintf(stderr, "(%s) : T0 %f\n", agnameof(GORIG(g->root)), T_T0); - } -#endif - ret = 1; - } - - xpms->T0 = cool(T_T0, T_pass1); - xpms->K = T_K; - xpms->C = T_C; - xpms->numIters = T_maxIters - T_pass1; - - if (T_numIters >= 0) { - if (T_numIters <= T_pass1) { - T_loopcnt = T_numIters; - xpms->loopcnt = 0; - } else if (T_numIters <= T_maxIters) { - T_loopcnt = T_pass1; - xpms->loopcnt = T_numIters - T_pass1; - } - } else { - T_loopcnt = T_pass1; - xpms->loopcnt = xpms->numIters; - } - return ret; -} - -/* fdp_initParams: - * Initialize parameters based on root graph attributes. - */ -void fdp_initParams(graph_t * g) -{ - T_useGrid = D_useGrid; - T_useNew = D_useNew; - T_numIters = D_numIters; - T_unscaled = D_unscaled; - T_Cell = DFLT_Cell; - T_C = D_C; - T_Tfact = D_Tfact; - T_maxIters = late_int(g, agattr(g,AGRAPH, "maxiter", NULL), DFLT_maxIters, 0); - D_K = T_K = late_double(g, agattr(g,AGRAPH, "K", NULL), DFLT_K, 0.0); - if (D_T0 == -1.0) { - T_T0 = late_double(g, agattr(g,AGRAPH, "T0", NULL), -1.0, 0.0); - } else - T_T0 = D_T0; - T_seed = DFLT_seed; - T_smode = setSeed (g, DFLT_smode, &T_seed); - if (T_smode == INIT_SELF) { - agerr(AGWARN, "fdp does not support start=self - ignoring\n"); - T_seed = DFLT_smode; - } - - T_pass1 = (T_unscaled * T_maxIters) / 100; - T_K2 = T_K * T_K; - - if (T_useGrid) { - if (T_Cell <= 0.0) - T_Cell = 3 * T_K; - T_Cell2 = T_Cell * T_Cell; - } -#ifdef DEBUG - if (Verbose) { - prIndent(); - fprintf(stderr, - "Params %s : K %f T0 %f Tfact %f maxIters %d unscaled %d\n", - agnameof(g), - T_K, T_T0, T_Tfact, T_maxIters, T_unscaled); - } -#endif -} - -static void -doRep(node_t * p, node_t * q, double xdelta, double ydelta, double dist2) -{ - double force; - double dist; - - while (dist2 == 0.0) { - xdelta = 5 - rand() % 10; - ydelta = 5 - rand() % 10; - dist2 = xdelta * xdelta + ydelta * ydelta; - } - if (T_useNew) { - dist = sqrt(dist2); - force = T_K2 / (dist * dist2); - } else - force = T_K2 / dist2; - if (IS_PORT(p) && IS_PORT(q)) - force *= 10.0; - DISP(q)[0] += xdelta * force; - DISP(q)[1] += ydelta * force; - DISP(p)[0] -= xdelta * force; - DISP(p)[1] -= ydelta * force; -} - -/* applyRep: - * Repulsive force = (K*K)/d - * or K*K/d*d - */ -static void applyRep(Agnode_t * p, Agnode_t * q) -{ - double xdelta, ydelta; - - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - doRep(p, q, xdelta, ydelta, xdelta * xdelta + ydelta * ydelta); -} - -static void doNeighbor(Grid * grid, int i, int j, node_list * nodes) -{ - cell *cellp = findGrid(grid, i, j); - node_list *qs; - Agnode_t *p; - Agnode_t *q; - double xdelta, ydelta; - double dist2; - - if (cellp) { -#ifdef DEBUG - if (Verbose >= 3) { - prIndent(); - fprintf(stderr, " doNeighbor (%d,%d) : %d\n", i, j, - gLength(cellp)); - } -#endif - for (; nodes != 0; nodes = nodes->next) { - p = nodes->node; - for (qs = cellp->nodes; qs != 0; qs = qs->next) { - q = qs->node; - xdelta = (ND_pos(q))[0] - (ND_pos(p))[0]; - ydelta = (ND_pos(q))[1] - (ND_pos(p))[1]; - dist2 = xdelta * xdelta + ydelta * ydelta; - if (dist2 < T_Cell2) - doRep(p, q, xdelta, ydelta, dist2); - } - } - } -} - -static int gridRepulse(Dt_t * dt, cell * cellp, Grid * grid) -{ - node_list *nodes = cellp->nodes; - int i = cellp->p.i; - int j = cellp->p.j; - node_list *p; - node_list *q; - - NOTUSED(dt); -#ifdef DEBUG - if (Verbose >= 3) { - prIndent(); - fprintf(stderr, "gridRepulse (%d,%d) : %d\n", i, j, - gLength(cellp)); - } -#endif - for (p = nodes; p != 0; p = p->next) { - for (q = nodes; q != 0; q = q->next) - if (p != q) - applyRep(p->node, q->node); - } - - doNeighbor(grid, i - 1, j - 1, nodes); - doNeighbor(grid, i - 1, j, nodes); - doNeighbor(grid, i - 1, j + 1, nodes); - doNeighbor(grid, i, j - 1, nodes); - doNeighbor(grid, i, j + 1, nodes); - doNeighbor(grid, i + 1, j - 1, nodes); - doNeighbor(grid, i + 1, j, nodes); - doNeighbor(grid, i + 1, j + 1, nodes); - - return 0; -} - -/* applyAttr: - * Attractive force = weight*(d*d)/K - * or force = (d - L(e))*weight(e) - */ -static void applyAttr(Agnode_t * p, Agnode_t * q, Agedge_t * e) -{ - double xdelta, ydelta; - double force; - double dist; - double dist2; - - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - dist2 = xdelta * xdelta + ydelta * ydelta; - while (dist2 == 0.0) { - xdelta = 5 - rand() % 10; - ydelta = 5 - rand() % 10; - dist2 = xdelta * xdelta + ydelta * ydelta; - } - dist = sqrt(dist2); - if (T_useNew) - force = (ED_factor(e) * (dist - ED_dist(e))) / dist; - else - force = (ED_factor(e) * dist) / ED_dist(e); - DISP(q)[0] -= xdelta * force; - DISP(q)[1] -= ydelta * force; - DISP(p)[0] += xdelta * force; - DISP(p)[1] += ydelta * force; -} - -static void updatePos(Agraph_t * g, double temp, bport_t * pp) -{ - Agnode_t *n; - double temp2; - double len2; - double x, y, d; - double dx, dy; - - temp2 = temp * temp; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_pinned(n) & P_FIX) - continue; - dx = DISP(n)[0]; - dy = DISP(n)[1]; - len2 = dx * dx + dy * dy; - - /* limit by temperature */ - if (len2 < temp2) { - x = ND_pos(n)[0] + dx; - y = ND_pos(n)[1] + dy; - } else { - double fact = temp / (sqrt(len2)); - x = ND_pos(n)[0] + dx * fact; - y = ND_pos(n)[1] + dy * fact; - } - - /* if ports, limit by boundary */ - if (pp) { - d = sqrt((x * x) / T_Wd2 + (y * y) / T_Ht2); - if (IS_PORT(n)) { - ND_pos(n)[0] = x / d; - ND_pos(n)[1] = y / d; - } else if (d >= 1.0) { - ND_pos(n)[0] = 0.95 * x / d; - ND_pos(n)[1] = 0.95 * y / d; - } else { - ND_pos(n)[0] = x; - ND_pos(n)[1] = y; - } - } else { - ND_pos(n)[0] = x; - ND_pos(n)[1] = y; - } - } -} - -#define FLOOR(d) ((int)floor(d)) - -/* gAdjust: - */ -static void gAdjust(Agraph_t * g, double temp, bport_t * pp, Grid * grid) -{ - Agnode_t *n; - Agedge_t *e; - - if (temp <= 0.0) - return; - - clearGrid(grid); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - DISP(n)[0] = DISP(n)[1] = 0; - addGrid(grid, FLOOR((ND_pos(n))[0] / T_Cell), FLOOR((ND_pos(n))[1] / T_Cell), - n); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - if (n != aghead(e)) - applyAttr(n, aghead(e), e); - } - walkGrid(grid, gridRepulse); - - - updatePos(g, temp, pp); -} - -/* adjust: - */ -static void adjust(Agraph_t * g, double temp, bport_t * pp) -{ - Agnode_t *n; - Agnode_t *n1; - Agedge_t *e; - - if (temp <= 0.0) - return; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - DISP(n)[0] = DISP(n)[1] = 0; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (n1 = agnxtnode(g, n); n1; n1 = agnxtnode(g, n1)) { - applyRep(n, n1); - } - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (n != aghead(e)) - applyAttr(n, aghead(e), e); - } - } - - updatePos(g, temp, pp); -} - -/* initPositions: - * Create initial layout of nodes - * TODO : - * Position nodes near neighbors with positions. - * Use bbox to reset K. - */ -static pointf initPositions(graph_t * g, bport_t * pp) -{ - int nG = agnnodes(g) - NPORTS(g); - double size; - Agnode_t *np; - int n_pos = 0; /* no. of nodes with position info */ - box bb = { {0, 0}, {0, 0} }; - pointf ctr; /* center of boundary ellipse */ - long local_seed; - double PItimes2 = M_PI * 2.0; - - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - if (ND_pinned(np)) { - if (n_pos) { - bb.LL.x = MIN(ND_pos(np)[0], bb.LL.x); - bb.LL.y = MIN(ND_pos(np)[1], bb.LL.y); - bb.UR.x = MAX(ND_pos(np)[0], bb.UR.x); - bb.UR.y = MAX(ND_pos(np)[1], bb.UR.y); - } else { - bb.UR.x = bb.LL.x = ND_pos(np)[0]; - bb.UR.y = bb.LL.y = ND_pos(np)[1]; - } - n_pos++; - } - } - - size = T_K * (sqrt((double) nG) + 1.0); - T_Wd = T_Ht = EXPFACTOR * (size / 2.0); - if (n_pos == 1) { - ctr.x = bb.LL.x; - ctr.y = bb.LL.y; - } else if (n_pos > 1) { - double alpha, area, width, height, quot; - ctr.x = (bb.LL.x + bb.UR.x) / 2.0; - ctr.y = (bb.LL.y + bb.UR.y) / 2.0; - width = EXPFACTOR * (bb.UR.x - bb.LL.x); - height = EXPFACTOR * (bb.UR.y - bb.LL.y); - area = 4.0 * T_Wd * T_Ht; - quot = (width * height) / area; - if (quot >= 1.0) { /* If bbox has large enough area, use it */ - T_Wd = width / 2.0; - T_Ht = height / 2.0; - } else if (quot > 0.0) { /* else scale up to have enough area */ - quot = 2.0 * sqrt(quot); - T_Wd = width / quot; - T_Ht = height / quot; - } else { /* either width or height is 0 */ - if (width > 0) { - height = area / width; - T_Wd = width / 2.0; - T_Ht = height / 2.0; - } else if (height > 0) { - width = area / height; - T_Wd = width / 2.0; - T_Ht = height / 2.0; - } - /* If width = height = 0, use Wd and Ht as defined above for - * the case the n_pos == 0. - */ - } - - /* Construct enclosing ellipse */ - alpha = atan2(T_Ht, T_Wd); - T_Wd = T_Wd / cos(alpha); - T_Ht = T_Ht / sin(alpha); - } else { - ctr.x = ctr.y = 0; - } - T_Wd2 = T_Wd * T_Wd; - T_Ht2 = T_Ht * T_Ht; - - /* Set seed value */ - if (T_smode == INIT_RANDOM) - local_seed = T_seed; - else { -#if defined(MSWIN32) || defined(WIN32) - local_seed = time(NULL); -#else - local_seed = getpid() ^ time(NULL); -#endif - } - srand48(local_seed); - - /* If ports, place ports on and nodes within an ellipse centered at origin - * with halfwidth Wd and halfheight Ht. - * If no ports, place nodes within a rectangle centered at origin - * with halfwidth Wd and halfheight Ht. Nodes with a given position - * are translated. Wd and Ht are set to contain all positioned points. - * The reverse translation will be applied to all - * nodes at the end of the layout. - * TODO: place unfixed points using adjacent ports or fixed pts. - */ - if (pp) { -/* fprintf (stderr, "initPos %s ctr (%g,%g) Wd %g Ht %g\n", agnameof(g), ctr.x, ctr.y, T_Wd, T_Ht); */ - while (pp->e) { /* position ports on ellipse */ - np = pp->n; - ND_pos(np)[0] = T_Wd * cos(pp->alpha) + ctr.x; - ND_pos(np)[1] = T_Ht * sin(pp->alpha) + ctr.y; - ND_pinned(np) = P_SET; -/* fprintf (stderr, "%s pt (%g,%g) %g\n", agnameof(np), ND_pos(np)[0], ND_pos(np)[1], pp->alpha); */ - pp++; - } - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - if (IS_PORT(np)) - continue; - if (ND_pinned(np)) { - ND_pos(np)[0] -= ctr.x; - ND_pos(np)[1] -= ctr.y; - } else { - pointf p = { 0.0, 0.0 }; - int cnt = 0; - node_t *op; - edge_t *ep; - for (ep = agfstedge(g, np); ep; ep = agnxtedge(g, ep, np)) { - if (aghead(ep) == agtail(ep)) - continue; - op = (aghead(ep) == np ? agtail(ep) : aghead(ep)); - if (!hasPos(op)) - continue; - if (cnt) { - p.x = (p.x * cnt + ND_pos(op)[0]) / (cnt + 1); - p.y = (p.y * cnt + ND_pos(op)[1]) / (cnt + 1); - } else { - p.x = ND_pos(op)[0]; - p.y = ND_pos(op)[1]; - } - cnt++; - } - if (cnt > 1) { - ND_pos(np)[0] = p.x; - ND_pos(np)[1] = p.y; -/* fprintf (stderr, "%s 1 (%g,%g)\n", np->name, p.x, p.y); */ - } else if (cnt == 1) { - ND_pos(np)[0] = 0.98 * p.x + 0.1 * ctr.x; - ND_pos(np)[1] = 0.9 * p.y + 0.1 * ctr.y; -/* fprintf (stderr, "%s %d (%g,%g)\n", np->name, cnt, ND_pos(np)[0], ND_pos(np)[1]); */ - } else { - double angle = PItimes2 * drand48(); - double radius = 0.9 * drand48(); - ND_pos(np)[0] = radius * T_Wd * cos(angle); - ND_pos(np)[1] = radius * T_Ht * sin(angle); -/* fprintf (stderr, "%s 0 (%g,%g)\n", np->name, ND_pos(np)[0], ND_pos(np)[1]); */ - } - ND_pinned(np) = P_SET; - } - } - } else { - if (n_pos) { /* If positioned nodes */ - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - if (ND_pinned(np)) { - ND_pos(np)[0] -= ctr.x; - ND_pos(np)[1] -= ctr.y; - } else { - ND_pos(np)[0] = T_Wd * (2.0 * drand48() - 1.0); - ND_pos(np)[1] = T_Ht * (2.0 * drand48() - 1.0); - } - } - } else { /* No ports or positions; place randomly */ - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - ND_pos(np)[0] = T_Wd * (2.0 * drand48() - 1.0); - ND_pos(np)[1] = T_Ht * (2.0 * drand48() - 1.0); - } - } - } - - return ctr; -} - -void dumpstat(graph_t * g) -{ - double dx, dy; - double l, max2 = 0.0; - node_t *np; - edge_t *ep; - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - dx = DISP(np)[0]; - dy = DISP(np)[1]; - l = dx * dx + dy * dy; - if (l > max2) - max2 = l; - fprintf(stderr, "%s: (%f,%f) (%f,%f)\n", agnameof(np), - ND_pos(np)[0], ND_pos(np)[1], DISP(np)[0], DISP(np)[1]); - } - fprintf(stderr, "max delta = %f\n", sqrt(max2)); - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - for (ep = agfstout(g, np); ep; ep = agnxtout(g, ep)) { - dx = ND_pos(np)[0] - ND_pos(aghead(ep))[0]; - dy = ND_pos(np)[1] - ND_pos(aghead(ep))[1]; - fprintf(stderr, " %s -- %s (%f)\n", agnameof(np), - agnameof(aghead(ep)), sqrt(dx * dx + dy * dy)); - } - } -} - -/* fdp_tLayout: - * Given graph g with ports nodes, layout g respecting ports. - * If some node have position information, it may be useful to - * reset temperature and other parameters to reflect this. - */ -void fdp_tLayout(graph_t * g, xparams * xpms) -{ - int i; - int reset; - bport_t *pp = PORTS(g); - double temp; - Grid *grid; - pointf ctr; - Agnode_t *n; - - reset = init_params(g, xpms); - temp = T_T0; - - ctr = initPositions(g, pp); - - if (T_useGrid) { - grid = mkGrid(agnnodes(g)); - adjustGrid(grid, agnnodes(g)); - for (i = 0; i < T_loopcnt; i++) { - temp = cool(temp, i); - gAdjust(g, temp, pp, grid); - } - delGrid(grid); - } else { - for (i = 0; i < T_loopcnt; i++) { - temp = cool(temp, i); - adjust(g, temp, pp); - } - } - - if ((ctr.x != 0.0) || (ctr.y != 0.0)) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] += ctr.x; - ND_pos(n)[1] += ctr.y; - } - } -/* dumpstat (g); */ - if (reset) - reset_params(); -} diff --git a/internal/ccall/fdpgen/tlayout.h b/internal/ccall/fdpgen/tlayout.h deleted file mode 100644 index d301bce..0000000 --- a/internal/ccall/fdpgen/tlayout.h +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef TLAYOUT_H -#define TLAYOUT_H - -#include "fdp.h" -#include "xlayout.h" - -typedef enum { - seed_unset, seed_val, seed_time, seed_regular -} seedMode; - - extern void fdp_initParams(graph_t *); - extern void fdp_tLayout(graph_t *, xparams *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/fdpgen/xlayout.c b/internal/ccall/fdpgen/xlayout.c deleted file mode 100644 index a89f2c5..0000000 --- a/internal/ccall/fdpgen/xlayout.c +++ /dev/null @@ -1,562 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* xlayout.c: - * Written by Emden R. Gansner - * - * Layout routine to expand initial layout to accommodate node - * sizes. - */ - -#ifdef FIX -Allow sep to be absolute additive (margin of n points) -Increase less between tries -#endif - -/* uses PRIVATE interface */ -#define FDP_PRIVATE 1 - -#include -#include -#include -#include - -/* Use bbox based force function */ -/* #define MS */ -/* Use alternate force function */ -/* #define ALT */ -/* Add repulsive force even if nodes don't overlap */ -/* #define ORIG */ -#define BOX /* Use bbox to determine overlap, else use circles */ - -#define DFLT_overlap "9:prism" /* default overlap value */ - -#define WD2(n) (X_marg.doAdd ? (ND_width(n)/2.0 + X_marg.x): ND_width(n)*X_marg.x/2.0) -#define HT2(n) (X_marg.doAdd ? (ND_height(n)/2.0 + X_marg.y): ND_height(n)*X_marg.y/2.0) - -static xparams xParams = { - 60, /* numIters */ - 0.0, /* T0 */ - 0.3, /* K */ - 1.5, /* C */ - 0 /* loopcnt */ -}; -static double K2; -static expand_t X_marg; -static double X_nonov; -static double X_ov; - -void pr2graphs(Agraph_t *g0, Agraph_t *g1) -{ - fprintf(stderr,"%s",agnameof(g0)); - fprintf(stderr,"(%s)",agnameof(g1)); -} - -static double RAD(Agnode_t * n) -{ - double w = WD2(n); - double h = HT2(n); - return sqrt(w * w + h * h); -} - -/* xinit_params: - * Initialize local parameters - */ -static void xinit_params(graph_t* g, int n, xparams * xpms) -{ - xParams.K = xpms->K; - xParams.numIters = xpms->numIters; - xParams.T0 = xpms->T0; - xParams.loopcnt = xpms->loopcnt; - if (xpms->C > 0.0) - xParams.C = xpms->C; - K2 = xParams.K * xParams.K; - if (xParams.T0 == 0.0) - xParams.T0 = xParams.K * sqrt(n) / 5; -#ifdef DEBUG - if (Verbose) { - prIndent(); - fprintf(stderr, "xLayout "); - pr2graphs(g,GORIG(agroot(g))); - fprintf(stderr, " : n = %d K = %f T0 = %f loop %d C %f\n", - xParams.numIters, xParams.K, xParams.T0, xParams.loopcnt, - xParams.C); - } -#endif -} - -#define X_T0 xParams.T0 -#define X_K xParams.K -#define X_numIters xParams.numIters -#define X_loopcnt xParams.loopcnt -#define X_C xParams.C - - -static double _cool(int t) -{ - return (X_T0 * (X_numIters - t)) / X_numIters; -} - -#define EPSILON 0.01 - -#ifdef MS -/* dist: - * Distance between two points - */ -static double dist(pointf p, pointf q) -{ - double dx, dy; - - dx = p.x - q.x; - dy = p.y - q.y; - return (sqrt(dx * dx + dy * dy)); -} - -/* bBox: - * Compute bounding box of point - */ -static void bBox(node_t * p, pointf * ll, pointf * ur) -{ - double w2 = WD2(p); - double h2 = HT2(p); - - ur->x = ND_pos(p)[0] + w2; - ur->y = ND_pos(p)[1] + h2; - ll->x = ND_pos(p)[0] - w2; - ll->y = ND_pos(p)[1] - h2; -} - -/* boxDist: - * Return the distance between two boxes; 0 if they overlap - */ -static double boxDist(node_t * p, node_t * q) -{ - pointf p_ll, p_ur; - pointf q_ll, q_ur; - - bBox(p, &p_ll, &p_ur); - bBox(q, &q_ll, &q_ur); - - if (q_ll.x > p_ur.x) { - if (q_ll.y > p_ur.y) { - return (dist(p_ur, q_ll)); - } else if (q_ll.y >= p_ll.y) { - return (q_ll.x - p_ur.x); - } else { - if (q_ur.y >= p_ll.y) - return (q_ll.x - p_ur.x); - else { - p_ur.y = p_ll.y; /* p_ur is now lower right */ - q_ll.y = q_ur.y; /* q_ll is now upper left */ - return (dist(p_ur, q_ll)); - } - } - } else if (q_ll.x >= p_ll.x) { - if (q_ll.y > p_ur.y) { - return (q_ll.y - p_ur.x); - } else if (q_ll.y >= p_ll.y) { - return 0.0; - } else { - if (q_ur.y >= p_ll.y) - return 0.0; - else - return (p_ll.y - q_ur.y); - } - } else { - if (q_ll.y > p_ur.y) { - if (q_ur.x >= p_ll.x) - return (q_ll.y - p_ur.y); - else { - p_ur.x = p_ll.x; /* p_ur is now upper left */ - q_ll.x = q_ur.x; /* q_ll is now lower right */ - return (dist(p_ur, q_ll)); - } - } else if (q_ll.y >= p_ll.y) { - if (q_ur.x >= p_ll.x) - return 0.0; - else - return (p_ll.x - q_ur.x); - } else { - if (q_ur.x >= p_ll.x) { - if (q_ur.y >= p_ll.y) - return 0.0; - else - return (p_ll.y - q_ur.y); - } else { - if (q_ur.y >= p_ll.y) - return (p_ll.x - q_ur.x); - else - return (dist(p_ll, q_ur)); - } - } - } -} -#endif /* MS */ - -/* overlap: - * Return true if nodes overlap - */ -static int overlap(node_t * p, node_t * q) -{ -#if defined(BOX) - double xdelta, ydelta; - int ret; - - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - if (xdelta < 0) - xdelta = -xdelta; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - if (ydelta < 0) - ydelta = -ydelta; - ret = ((xdelta <= (WD2(p) + WD2(q))) && (ydelta <= (HT2(p) + HT2(q)))); - return ret; -#else - double dist2, xdelta, ydelta; - double din; - - din = RAD(p) + RAD(q); - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - dist2 = xdelta * xdelta + ydelta * ydelta; - return (dist2 <= (din * din)); -#endif -} - -/* cntOverlaps: - * Return number of overlaps. - */ -static int cntOverlaps(graph_t * g) -{ - node_t *p; - node_t *q; - int cnt = 0; - - for (p = agfstnode(g); p; p = agnxtnode(g, p)) { - for (q = agnxtnode(g, p); q; q = agnxtnode(g, q)) { - cnt += overlap(p, q); - } - } - return cnt; -} - -/* doRep: - * Return 1 if nodes overlap - */ -static int -_doRep(node_t * p, node_t * q, double xdelta, double ydelta, double dist2) -{ - int ov; - double force; - /* double dout, din; */ -#if defined(DEBUG) || defined(MS) || defined(ALT) - double dist; -#endif - /* double factor; */ - - while (dist2 == 0.0) { - xdelta = 5 - rand() % 10; - ydelta = 5 - rand() % 10; - dist2 = xdelta * xdelta + ydelta * ydelta; - } -#if defined(MS) - dout = boxDist(p, q); - if (dout < EPSILON) - dout = EPSILON; - dist = sqrt(dist2); - force = K2 / (dout * dist); -#elif defined(ALT) - force = K2 / dist2; - dist = sqrt(dist2); - din = RAD(p) + RAD(q); - if (ov = overlap(p, q)) { - factor = X_C; - } else { - ov = 0; - if (dist <= din + X_K) - factor = X_C * (X_K - (dist - din)) / X_K; - else - factor = 0.0; - } - force *= factor; -#elif defined(ORIG) - force = K2 / dist2; - if ((ov = overlap(p, q))) - force *= X_C; -#else - if ((ov = overlap(p, q))) - force = X_ov / dist2; - else - force = X_nonov / dist2; -#endif -#ifdef DEBUG - if (Verbose == 4) { - prIndent(); - dist = sqrt(dist2); - fprintf(stderr, " ov Fr %f dist %f\n", force * dist, dist); - } -#endif - DISP(q)[0] += xdelta * force; - DISP(q)[1] += ydelta * force; - DISP(p)[0] -= xdelta * force; - DISP(p)[1] -= ydelta * force; - return ov; -} - -/* applyRep: - * Repulsive force = (K*K)/d - * Return 1 if nodes overlap - */ -static int _applyRep(Agnode_t * p, Agnode_t * q) -{ - double xdelta, ydelta; - - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - return _doRep(p, q, xdelta, ydelta, xdelta * xdelta + ydelta * ydelta); -} - -static void _applyAttr(Agnode_t * p, Agnode_t * q) -{ - double xdelta, ydelta; - double force; - double dist; - double dout; - double din; - -#if defined(MS) - dout = boxDist(p, q); - if (dout == 0.0) - return; - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - dist = sqrt(xdelta * xdelta + ydelta * ydelta); - force = (dout * dout) / (X_K * dist); -#elif defined(ALT) - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - dist = sqrt(xdelta * xdelta + ydelta * ydelta); - din = RAD(p) + RAD(q); - if (dist < X_K + din) - return; - dout = dist - din; - force = (dout * dout) / ((X_K + din) * dist); -#else - if (overlap(p, q)) { -#ifdef DEBUG - if (Verbose == 4) { - prIndent(); - fprintf(stderr, "ov 1 Fa 0 din %f\n", RAD(p) + RAD(q)); - } -#endif - return; - } - xdelta = ND_pos(q)[0] - ND_pos(p)[0]; - ydelta = ND_pos(q)[1] - ND_pos(p)[1]; - dist = sqrt(xdelta * xdelta + ydelta * ydelta); - din = RAD(p) + RAD(q); - dout = dist - din; - force = (dout * dout) / ((X_K + din) * dist); -#endif -#ifdef DEBUG - if (Verbose == 4) { - prIndent(); - fprintf(stderr, " ov 0 Fa %f din %f \n", force * dist, din); - } -#endif - DISP(q)[0] -= xdelta * force; - DISP(q)[1] -= ydelta * force; - DISP(p)[0] += xdelta * force; - DISP(p)[1] += ydelta * force; -} - -/* adjust: - * Return 0 if definitely no overlaps. - * Return non-zero if we had overlaps before most recent move. - */ -static int _adjust(Agraph_t * g, double temp) -{ - Agnode_t *n; - Agnode_t *n1; - Agedge_t *e; - double temp2; - double len; - double len2; - double disp[NDIM]; /* incremental displacement */ - int overlaps = 0; - -#ifdef DEBUG - if (Verbose == 4) - fprintf(stderr, "=================\n"); -#endif - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - DISP(n)[0] = DISP(n)[1] = 0; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - int ov; - for (n1 = agnxtnode(g, n); n1; n1 = agnxtnode(g, n1)) { - ov = _applyRep(n, n1); -/* if (V && ov) */ - /* fprintf (stderr,"%s ov %s\n", n->name, n1->name); */ - overlaps += ov; - } - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - _applyAttr(n,aghead(e)); - } - } - if (overlaps == 0) - return 0; - - temp2 = temp * temp; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (ND_pinned(n) == P_PIN) - continue; - disp[0] = DISP(n)[0]; - disp[1] = DISP(n)[1]; - len2 = disp[0] * disp[0] + disp[1] * disp[1]; - - if (len2 < temp2) { - ND_pos(n)[0] += disp[0]; - ND_pos(n)[1] += disp[1]; - } else { - /* to avoid sqrt, consider abs(x) + abs(y) */ - len = sqrt(len2); - ND_pos(n)[0] += (disp[0] * temp) / len; - ND_pos(n)[1] += (disp[1] * temp) / len; - } - } - return overlaps; -} - -/* x_layout: - * Given graph g with initial layout, adjust g so that nodes - * do not overlap. - * Assume g is connected. - * g may have ports. At present, we do not use ports in the layout - * at this stage. - * Returns non-zero if overlaps still exist. - * TODO (possible): - * Allow X_T0 independent of T_TO or percentage of, so the cooling would - * be piecewise linear. This would allow longer, cooler expansion. - * In tries > 1, increase X_T0 and/or lengthen cooling - */ -static int x_layout(graph_t * g, xparams * pxpms, int tries) -{ - int i; - int try; - int ov; - double temp; - int nnodes = agnnodes(g); - int nedges = agnedges(g); - double K; - xparams xpms; - - X_marg = sepFactor (g); - if (X_marg.doAdd) { - X_marg.x = PS2INCH(X_marg.x); /* sepFactor is in points */ - X_marg.y = PS2INCH(X_marg.y); - } - ov = cntOverlaps(g); - if (ov == 0) - return 0; - - try = 0; - xpms = *pxpms; - K = xpms.K; - while (ov && (try < tries)) { - xinit_params(g, nnodes, &xpms); - X_ov = X_C * K2; - X_nonov = (nedges*X_ov*2.0)/(nnodes*(nnodes-1)); -#ifdef DEBUG - if (Verbose) { - prIndent(); - fprintf(stderr, "try %d (%d): %d overlaps on ", try, tries, ov); - pr2graphs(g,GORIG(agroot(g))); - fprintf(stderr," \n"); - } -#endif - - for (i = 0; i < X_loopcnt; i++) { - temp = _cool(i); - if (temp <= 0.0) - break; - ov = _adjust(g, temp); - if (ov == 0) - break; - } - try++; - xpms.K += K; /* increase distance */ - } -#ifdef DEBUG - if (Verbose && ov) - fprintf(stderr, "Warning: %d overlaps remain on ", ov); - pr2graphs(g,GORIG(agroot(g))); - fprintf(stderr,"\n"); -#endif - - return ov; -} - -/* fdp_xLayout: - * Use overlap parameter to determine if and how to remove overlaps. - * In addition to the usual values accepted by removeOverlap, overlap - * can begin with "n:" to indicate the given number of tries using - * x_layout to remove overlaps. - * Thus, - * NULL or "" => dflt overlap - * "mode" => "0:mode", i.e. removeOverlap with mode only - * "true" => "0:true", i.e., no overlap removal - * "n:" => n tries only - * "n:mode" => n tries, then removeOverlap with mode - * "0:" => no overlap removal - */ -void fdp_xLayout(graph_t * g, xparams * xpms) -{ - int tries; - char* ovlp = agget (g, "overlap"); - char* cp; - char* rest; - - if (Verbose) { -#ifdef DEBUG - prIndent(); -#endif - fprintf (stderr, "xLayout "); - } - if (!ovlp || (*ovlp == '\0')) { - ovlp = DFLT_overlap; - } - /* look for optional ":" or "number:" */ - if ((cp = strchr(ovlp, ':')) && ((cp == ovlp) || isdigit(*ovlp))) { - cp++; - rest = cp; - tries = atoi (ovlp); - if (tries < 0) tries = 0; - } - else { - tries = 0; - rest = ovlp; - } - if (Verbose) { -#ifdef DEBUG - prIndent(); -#endif - fprintf (stderr, "tries = %d, mode = %s\n", tries, rest); - } - if (tries && !x_layout(g, xpms, tries)) - return; - removeOverlapAs(g, rest); - -} diff --git a/internal/ccall/fdpgen/xlayout.h b/internal/ccall/fdpgen/xlayout.h deleted file mode 100644 index 3ebdc6c..0000000 --- a/internal/ccall/fdpgen/xlayout.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef XLAYOUT_H -#define XLAYOUT_H - -#include - - typedef struct { - int numIters; - double T0; - double K; - double C; - int loopcnt; - } xparams; - - extern void fdp_xLayout(graph_t *, xparams *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/glcomp/dummy.go b/internal/ccall/glcomp/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/glcomp/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/glcomp/glcompbutton.c b/internal/ccall/glcomp/glcompbutton.c deleted file mode 100644 index d14ef31..0000000 --- a/internal/ccall/glcomp/glcompbutton.c +++ /dev/null @@ -1,235 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompbutton.h" -#include "glcomplabel.h" -#include "glcompimage.h" -#include "glcompfont.h" -#include "glutils.h" -#include "glcompset.h" -#include "memory.h" -#include -#include - - -glCompButton *glCompButtonNew(glCompObj * par, GLfloat x, GLfloat y, - GLfloat w, GLfloat h, char *caption) -{ - glCompButton *p; -// glCompCommon* parent=&par->common; - p = NEW(glCompButton); - glCompInitCommon((glCompObj *) p, par, x, y); - p->objType = glButtonObj; - /*customize button color */ - p->common.color.R = GLCOMPSET_BUTTON_COLOR_R; - p->common.color.G = GLCOMPSET_BUTTON_COLOR_G; - p->common.color.B = GLCOMPSET_BUTTON_COLOR_B; - p->common.color.A = GLCOMPSET_BUTTON_COLOR_ALPHA; - - p->common.borderType = glBorderSolid; - - p->common.borderWidth = GLCOMPSET_BUTTON_BEVEL; - - p->common.width = w; - p->common.height = h; - p->status = 0; //0 not pressed 1 pressed; - p->groupid = 0; - p->common.callbacks.click = '\0'; - p->customptr = '\0'; - /*set event functions */ - - p->common.functions.draw = (glcompdrawfunc_t)glCompButtonDraw; - - p->common.functions.click = glCompButtonClick; - p->common.functions.doubleclick = glCompButtonDoubleClick; - p->common.functions.mousedown = glCompButtonMouseDown; - p->common.functions.mousein = glCompButtonMouseIn; - p->common.functions.mouseout = glCompButtonMouseOut; - p->common.functions.mouseover = glCompButtonMouseOver; - p->common.functions.mouseup = glCompButtonMouseUp; - - /*caption */ - p->common.font = glNewFontFromParent ((glCompObj *) p, NULL); - p->label = glCompLabelNew((glCompObj *) p, 0, 0, caption); - p->label->common.font->justify.VJustify = glFontVJustifyCenter; - p->label->common.font->justify.HJustify = glFontHJustifyCenter; - p->label->common.align = glAlignParent; - /*image */ - p->image = (glCompImage *) 0; - p->glyphPos = glButtonGlyphLeft; - return p; -} - -int glCompButtonAddPngGlyph(glCompButton * b, char *fileName) -{ - int rv; - /*delete if there is an existing image */ - if (b->image) - glCompImageDelete(b->image); - /*image on left for now */ - b->image = glCompImageNew((glCompObj *) b, 0, 0); - - rv = glCompImageLoadPng(b->image, fileName,1); - if (rv) { - b->image->common.anchor.leftAnchor = 1; - b->image->common.anchor.left = 0; - - b->image->common.anchor.topAnchor = 1; - b->image->common.anchor.top = 0; - - b->image->common.anchor.bottomAnchor = 1; - b->image->common.anchor.bottom = 0; - - b->label->common.anchor.leftAnchor = 1; - b->label->common.anchor.left = b->image->common.width; - b->label->common.anchor.rightAnchor = 1; - b->label->common.anchor.right = 0; - - b->label->common.anchor.topAnchor = 1; - b->label->common.anchor.top = 0; - - b->label->common.anchor.bottomAnchor = 1; - b->label->common.anchor.bottom = 0; - - b->label->common.align = glAlignNone; - } - return rv; -} - -void glCompButtonHide(glCompButton * p) -{ - p->common.visible = 0; - if (p->label) - p->label->common.visible = 0; - if (p->image) - p->image->common.visible = 0; -} - -void glCompButtonShow(glCompButton * p) -{ - p->common.visible = 1; - if (p->label) - p->label->common.visible = 1; - if (p->image) - p->image->common.visible = 1; -} - -void glCompButtonDraw(glCompButton * p) -{ - - glCompCommon ref; - ref = p->common; - glCompCalcWidget((glCompCommon *) p->common.parent, &p->common, &ref); - if (!p->common.visible) - return; - /*draw panel */ - glCompDrawRectPrism(&(ref.pos), ref.width, ref.height, - p->common.borderWidth, 0.01, &(ref.color), - !p->status); - if (p->label) - p->label->common.functions.draw((void *) p->label); - if (p->image) - p->image->common.functions.draw((void *) p->image); - if (p->common.callbacks.draw) - p->common.callbacks.draw((void *) p); /*user defined drawing routines are called here. */ -} - -void glCompButtonClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - glCompButton *p = (glCompButton *) o; - glCompObj *obj; - glCompSet *s = o->common.compset; - int ind = 0; - ((glCompButton *) o)->status=((glCompButton *) o)->refStatus ; - if (p->groupid > 0) - { - for (; ind < s->objcnt; ind++) { - obj = s->obj[ind]; - if ((obj->objType == glButtonObj)&&(obj!=o)) { - if (((glCompButton *) obj)->groupid == p->groupid) - ((glCompButton *) obj)->status = 0; - } - } - p->status = 1; - } - else { - if (p->groupid == -1) { - if (p->status == 0) - p->status = 1; - else - p->status = 0; - } else - p->status = 0; - } - if (p->common.callbacks.click) - p->common.callbacks.click((glCompObj *) p, x, y, t); -} - -void glCompButtonDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompButton *) obj)->common.callbacks.doubleclick) - ((glCompButton *) obj)->common.callbacks.doubleclick(obj, x, y, t); -} - -void glCompButtonMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - - - ((glCompButton *) obj)->refStatus = ((glCompButton *) obj)->status; - ((glCompButton *) obj)->status = 1; - if (((glCompButton *) obj)->common.callbacks.mousedown) - ((glCompButton *) obj)->common.callbacks.mousedown(obj, x, y, t); -} - -void glCompButtonMouseIn(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompButton *) obj)->common.callbacks.mousein) - ((glCompButton *) obj)->common.callbacks.mousein(obj, x, y); -} - -void glCompButtonMouseOut(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompButton *) obj)->common.callbacks.mouseout) - ((glCompButton *) obj)->common.callbacks.mouseout(obj, x, y); -} - -void glCompButtonMouseOver(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompButton *) obj)->common.callbacks.mouseover) - ((glCompButton *) obj)->common.callbacks.mouseover(obj, x, y); -} - -void glCompButtonMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - - if (((glCompButton *) obj)->common.callbacks.mouseup) - ((glCompButton *) obj)->common.callbacks.mouseup(obj, x, y, t); -} - - - - -void glCompButtonSetText(glCompButton * p, char *str) -{ -// replacestr(str, &p->text); -} diff --git a/internal/ccall/glcomp/glcompbutton.h b/internal/ccall/glcomp/glcompbutton.h deleted file mode 100644 index 82e40ba..0000000 --- a/internal/ccall/glcomp/glcompbutton.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPBUTTON_H -#define GLCOMPBUTTON_H - -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern glCompButton *glCompButtonNew(glCompObj * par, GLfloat x, - GLfloat y, GLfloat w, GLfloat h, - char *caption); - extern int glCompSetRemoveButton(glCompSet * s, glCompButton * p); - extern void glCompButtonDraw(glCompButton * p); - extern void glCompButtonSetText(glCompButton * p, char *str); - extern int glCompButtonAddPngGlyph(glCompButton * b, char *fileName); - extern void glCompButtonClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompButtonDoubleClick(glCompObj * o, GLfloat x, - GLfloat y, glMouseButtonType t); - extern void glCompButtonMouseDown(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompButtonMouseIn(glCompObj * o, GLfloat x, GLfloat y); - extern void glCompButtonMouseOut(glCompObj * o, GLfloat x, GLfloat y); - extern void glCompButtonMouseOver(glCompObj * o, GLfloat x, GLfloat y); - extern void glCompButtonMouseUp(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompButtonHide(glCompButton * p); - extern void glCompButtonShow(glCompButton * p); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcompdefs.h b/internal/ccall/glcomp/glcompdefs.h deleted file mode 100644 index 8417976..0000000 --- a/internal/ccall/glcomp/glcompdefs.h +++ /dev/null @@ -1,398 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPDEFS_H -#define GLCOMPDEFS_H - -#include -#include -#include -#include -#include -#ifdef WIN32 -#include -#include -#include -#endif -#include -#include -#include -#include -#include -#ifdef WIN32 -#define strdup _strdup -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -#define GLCOMPSET_PANEL_COLOR_R (GLfloat)0.16 -#define GLCOMPSET_PANEL_COLOR_G (GLfloat)0.44 -#define GLCOMPSET_PANEL_COLOR_B (GLfloat)0.87 -#define GLCOMPSET_PANEL_COLOR_ALPHA (GLfloat)0.5 -#define GLCOMPSET_PANEL_SHADOW_COLOR_R (GLfloat)0 -#define GLCOMPSET_PANEL_SHADOW_COLOR_G (GLfloat)0 -#define GLCOMPSET_PANEL_SHADOW_COLOR_B (GLfloat)0 -#define GLCOMPSET_PANEL_SHADOW_COLOR_A (GLfloat)0.3 -#define GLCOMPSET_PANEL_SHADOW_WIDTH (GLfloat)4 - -#define GLCOMPSET_BUTTON_COLOR_R (GLfloat)0 -#define GLCOMPSET_BUTTON_COLOR_G (GLfloat)1 -#define GLCOMPSET_BUTTON_COLOR_B (GLfloat)0.3 -#define GLCOMPSET_BUTTON_COLOR_ALPHA (GLfloat)0.6 -#define GLCOMPSET_BUTTON_THICKNESS (GLfloat)3 -#define GLCOMPSET_BUTTON_BEVEL_BRIGHTNESS (GLfloat)1.7 -#define GLCOMPSET_FONT_SIZE (GLfloat)14 - -#define GLCOMPSET_BUTTON_FONT_COLOR_R (GLfloat)0 -#define GLCOMPSET_BUTTON_FONT_COLOR_G (GLfloat)0 -#define GLCOMPSET_BUTTON_FONT_COLOR_B (GLfloat)0 -#define GLCOMPSET_BUTTON_FONT_COLOR_ALPHA (GLfloat)1 - -#define GLCOMPSET_FONT_SIZE_FACTOR (GLfloat)0.7 - -#define GLCOMPSET_LABEL_COLOR_R (GLfloat)0 -#define GLCOMPSET_LABEL_COLOR_G (GLfloat)0 -#define GLCOMPSET_LABEL_COLOR_B (GLfloat)0 -#define GLCOMPSET_LABEL_COLOR_ALPHA (GLfloat)1 - -#define GLCOMPSET_FONT_COLOR_R (GLfloat)0 -#define GLCOMPSET_FONT_COLOR_G (GLfloat)0 -#define GLCOMPSET_FONT_COLOR_B (GLfloat)0 -#define GLCOMPSET_FONT_COLOR_ALPHA (GLfloat)1 -#define GLCOMPSET_FONT_DESC "Times Italic" -#define GL_FONTOPTIMIZE 1 - - -#define GL_FONTVJUSTIFY 0 -#define GL_FONTHJUSTIFY 0 - - -#define DEFAULT_GLUT_FONT GLUT_BITMAP_HELVETICA_12 - -#define GLCOMPSET_BORDERWIDTH (GLfloat)2 -#define GLCOMPSET_PANEL_BORDERWIDTH (GLfloat)3 -#define GLCOMPSET_BUTTON_BEVEL (GLfloat)5 -#define GLCOMPSET_BEVEL_DIFF (GLfloat)0.001 -#define GLCOMPSET_DEFAULT_PAD (GLfloat)3 -#define GLCOMP_DEFAULT_WIDTH (GLfloat)10 -#define GLCOMP_DEFAULT_HEIGHT (GLfloat)10 - - - -#define FONT_MAX_LEN 1024 /* maximum chars to draw to the screen, used for buffers also */ -#define FONT_TAB_SPACE 4 /* spaces to draw for a tab, make option? */ - -#define C_DPI 16 -#define R_DPI 16 - - typedef enum { inverted_y, scientific_y } glCompOrientation; - typedef enum { gluttext, pangotext } glCompFontType; - typedef enum { glAlignNone, glAlignLeft, glAlignTop, glAlignBottom, - glAlignRight, glAlignParent, glAlignCenter } glCompAlignment; - - typedef enum { glFontVJustifyNone, glFontVJustifyTop, - glFontVJustifyBottom, glFontVJustifyCenter } glCompVJustify; - typedef enum { glFontHJustifyNone, glFontHJustifyLeft, - glFontHJustifyRight, glFontHJustifyCenter } glCompHJustify; - typedef enum { glButtonGlyphLeft, glButtonGlyphRight, glButtonGlyphTop, - glButtonGlyphBottom } glCompButtonGlyph; - typedef enum { glBorderNone, glBorderSolid, glBorderBevel, - glBorderCustom } glCompBorderType; - - typedef enum { glMouseDown, glMouseUp } glCompMouseStatus; - typedef enum { glMouseLeftButton, glMouseRightButton, - glMouseMiddleButton } glMouseButtonType; - - typedef enum { glTexImage, glTexLabel } glCompTexType; - typedef enum { glPanelObj, glButtonObj, glLabelObj, - glImageObj } glObjType; - - typedef struct _glCompButton glCompButton; - typedef struct _glCompObj glCompObj; - -/*call backs for widgets*/ - typedef void (*glcompdrawfunc_t) (void *obj); - typedef void (*glcompclickfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - typedef void (*glcompdoubleclickfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y, - glMouseButtonType t); - typedef void (*glcompmouseoverfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y); - typedef void (*glcompmouseinfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y); - typedef void (*glcompmouseoutfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y); - typedef void (*glcompmousedownfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - typedef void (*glcompmouseupfunc_t) (glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - typedef void (*glcompmousedragfunct_t) (glCompObj * obj, GLfloat dx, - GLfloat dy, - glMouseButtonType t); - - - - typedef struct _glCompAnchor { - - int topAnchor; /*anchor booleans */ - int leftAnchor; - int rightAnchor; - int bottomAnchor; - - GLfloat top; /*anchor values */ - GLfloat left; - GLfloat right; - GLfloat bottom; - - - } glCompAnchor; - - typedef struct _glCompJustify { - glCompVJustify VJustify; - glCompHJustify HJustify; - } glCompJustify; - - - - - typedef struct _glCompPoint { - GLfloat x, y, z; - } glCompPoint; - - typedef struct _glCompPointI { - int x, y; - } glCompPointI; - typedef struct { - int cnt; - int hotKey; - glCompPoint* pts; - }glCompPoly; - - typedef struct { - GLfloat R; - GLfloat G; - GLfloat B; - GLfloat A; //Alpha - int tag; - int test; - } glCompColor; - - - typedef struct _glCompRect { - glCompPoint pos; - GLfloat w; - GLfloat h; - } glCompRect; - - typedef struct _glCompTex { - GLuint id; - char *def; - char *text; - float width; - float height; - glCompTexType type; - int userCount; - int fontSize; - unsigned char *data; /*data */ - } glCompTex; - - - -/*opengl font*/ - typedef struct { - char *fontdesc; //font description , only used with pango fonts - glCompColor color; - glCompFontType type; - void *glutfont; /*glut font pointer if used */ - int transparent; - glCompTex *tex; /* texture, if type is pangotext */ - int size; - int reference; /*if font has references to parent */ - glCompJustify justify; - int is2D; - int optimize; - } glCompFont; - - typedef struct _glCompCallBacks { - glcompdrawfunc_t draw; - glcompclickfunc_t click; - glcompdoubleclickfunc_t doubleclick; - glcompmouseoverfunc_t mouseover; - glcompmouseinfunc_t mousein; - glcompmouseoutfunc_t mouseout; - glcompmousedownfunc_t mousedown; - glcompmouseupfunc_t mouseup; - glcompmousedragfunct_t mousedrag; - - } glCompCallBacks; - - -/* - common widget properties - also each widget has pointer to its parents common -*/ - typedef struct _glCompCommon { - glCompPoint pos; - glCompPoint refPos; /*calculated pos after anchors and aligns */ - GLfloat width, height; - GLfloat borderWidth; - glCompBorderType borderType; - glCompColor color; - int enabled; - int visible; - void *compset; // compset - void *parent; /*parent widget */ - int data; - glCompFont *font; //pointer to font to use - glCompAlignment align; - glCompAnchor anchor; - int layer; /*keep track of object order, what to draw on top */ - glCompCallBacks callbacks; - glCompCallBacks functions; - glCompJustify justify; - } glCompCommon; - -/*generic image*/ - typedef struct _glCompImage { - glObjType objType; /*always keep this here for each drawable object */ - glCompCommon common; - glCompTex *texture; - GLfloat width, height; /* width and height in world coords */ - /* char *pngFile; */ - int stretch; - } glCompImage; - -/*generic panel*/ - typedef struct _glCompPanel { - glObjType objType; /*always keep this here for each drawable object */ - glCompCommon common; - GLfloat shadowwidth; - glCompColor shadowcolor; - char *text; - glCompImage *image; - } glCompPanel; - -/*label*/ - typedef struct _glCompLabel { - glObjType objType; /*always keep this here for each drawable object */ - glCompCommon common; - int autosize; /*if 1 label sized is calculated from font */ - char *text; - int transparent; - } glCompLabel; - -/*buttons*/ - struct _glCompButton { - glObjType objType; /*always keep this here for each drawable object */ - glCompCommon common; - GLfloat width, height; - glCompLabel *label; - int status; //0 not pressed 1 pressed; - int refStatus; //0 not pressed 1 pressed; - int groupid; - glCompImage *image; /*glyph */ - glCompButtonGlyph glyphPos; - void *customptr; //general purpose void pointer to pass to call back - int data; - - }; - -/*texture based image*/ - -/*track bar*/ - typedef struct _glCompTrackBar { - glObjType objType; /*always keep this here for each drawable object */ - GLfloat width, height; - glCompPanel *outerpanel; - glCompPanel *trackline; - glCompPanel *indicator; - - GLfloat bevel; - glCompColor color; - glCompColor shadowcolor; - - - float value; - float maxvalue; - float minvalue; - int enabled; - int visible; - void *parentset; //parent compset - int data; - glCompFont *font; //pointer to font to use - glCompOrientation orientation; - - } glCompTrackBar; - -/*glCompFont container class*/ - typedef struct { - glCompFont **fonts; - int count; - int activefont; - char *font_directory; //location where the glfont files are stored - } fontset_t; - -/*object prototype*/ - struct _glCompObj { - glObjType objType; - glCompCommon common; - }; - - typedef struct _glCompMouse { - glCompMouseStatus status; - glMouseButtonType t; - glCompPoint initPos; /*current mouse pos,*/ - glCompPoint pos; /*current mouse pos,*/ - glCompPoint finalPos; /*current mouse pos,*/ - glCompPoint GLpos;/*3d converted opengl position*/ - glCompPoint GLinitPos;/*mouse button down pos*/ - glCompPoint GLfinalPos;/*mouse button up pos*/ - - GLfloat dragX, dragY;/*GLpos - GLinitpos*/ - glCompObj *clickedObj; - glCompCallBacks callbacks; - glCompCallBacks functions; - int down; - - - } glCompMouse; - - - -/*main widget set manager*/ - typedef struct { - glObjType objType; /*always keep this here for each drawable object */ - glCompCommon common; - - glCompObj **obj; - int objcnt; - glCompPanel **panels; - glCompButton **buttons; - glCompLabel **labels; - int groupCount; /*group id counter */ - int active; //0 dont draw, 1 draw - int enabled; //0 disabled 1 enabled(allow mouse interaction) - GLfloat clickedX, clickedY; - - int textureCount; - glCompTex **textures; - glCompMouse mouse; - } glCompSet; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcompfont.c b/internal/ccall/glcomp/glcompfont.c deleted file mode 100644 index aceb417..0000000 --- a/internal/ccall/glcomp/glcompfont.c +++ /dev/null @@ -1,527 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompfont.h" -#include "glcompset.h" -#include "glpangofont.h" -#include "glcomptexture.h" -#include "glutils.h" -#include "memory.h" -#include - -static void print_bitmap_string(void *font, char *s) -{ - if (s && strlen(s)) { - while (*s) { - glutBitmapCharacter(font, *s); -// glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, *s); - s++; - } - } -} - -#if 0 -void init_gl_vars(glCompFont * f) -{ - -/* glGetIntegerv(GL_POLYGON_MODE, f->glcache.poly); - - if (f->glcache.poly[0] != GL_FILL) - glPolygonMode(GL_FRONT, GL_FILL); - if (f->glcache.poly[1] != GL_FILL) - glPolygonMode(GL_BACK, GL_FILL); - - f->glcache.istextureon = glIsEnabled(GL_TEXTURE_2D); - if (!f->glcache.istextureon) - glEnable(GL_TEXTURE_2D); - f->glcache.isdepthon = glIsEnabled(GL_DEPTH_TEST); - if (f->glcache.isdepthon) - glDisable(GL_DEPTH_TEST); - f->glcache.islightingon = glIsEnabled(GL_LIGHTING); - if (f->glcache.islightingon) - glDisable(GL_LIGHTING); - glGetIntegerv(GL_MATRIX_MODE, &f->glcache.matrix); - - f->glcache.isblendon = glIsEnabled(GL_BLEND); - glGetIntegerv(GL_BLEND_SRC, &f->glcache.blendfrom); - glGetIntegerv(GL_BLEND_DST, &f->glcache.blendto); - if (&f->glcache.isblendon) - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/ -} - -void restore_gl_vars(glCompFont * f) -{ -/* if (f->glcache.poly[0] != GL_FILL) - glPolygonMode(GL_FRONT, f->glcache.poly[0]); - if (f->glcache.poly[1] != GL_FILL) - glPolygonMode(GL_BACK, f->glcache.poly[1]); - - if (f->glcache.islightingon) - glEnable(GL_LIGHTING); - - if (!f->glcache.isblendon) { - glDisable(GL_BLEND); - glBlendFunc(f->glcache.blendfrom, f->glcache.blendto); - } else - glBlendFunc(f->glcache.blendfrom, f->glcache.blendto); - - if (f->glcache.isdepthon) - glEnable(GL_DEPTH_TEST); - if (!f->glcache.istextureon) - glDisable(GL_TEXTURE_2D); - glMatrixMode(f->glcache.matrix);*/ -} -#endif -void glprintfglut(void *font, GLfloat xpos, GLfloat ypos, GLfloat zpos, - char *bf) -{ - glRasterPos3f(xpos, ypos, zpos + 0.001); - print_bitmap_string(font, bf); - - -} - -#if 0 -static void -glPrintf(glCompFont * font, GLfloat xpos, GLfloat ypos, GLfloat zpos, - GLfloat width, char *bf, int usez) -{ - -// GLfloat size = font->size; -// GLfloat x = xpos; -// GLfloat y = ypos; - - //set the color - glColor4f(font->color.R, font->color.G, font->color.B, font->color.A); - if (!font) - return; - if (font->type == gluttext) { - glprintfglut(font->glutfont, xpos, ypos, zpos, bf); - return; - } - -} - -void -glprintf(glCompFont * font, GLfloat xpos, GLfloat ypos, GLfloat zpos, - GLfloat width, char *bf) -{ - glPrintf(font, xpos, ypos, zpos, width, bf, 0); -} - -void -glprintfz(glCompFont * font, GLfloat xpos, GLfloat ypos, GLfloat zpos, - GLfloat width, char *bf) -{ - glPrintf(font, xpos, ypos, zpos, width, bf, 0); -} - -static int fontId(fontset_t * fontset, char *fontdesc) -{ - int ind = 0; - for (ind = 0; ind < fontset->count; ind++) { - if (strcmp(fontset->fonts[ind]->fontdesc, fontdesc) == 0) - return ind; - } - return -1; -} - -static int glutfontId(fontset_t * fontset, void *glutfont) -{ - int ind = 0; - for (ind = 0; ind < fontset->count; ind++) { - if (fontset->fonts[ind]->glutfont == glutfont) - return ind; - } - return -1; -} - - -static glCompFont *glut_font_init(void) -{ - glCompFont *font = NEW(glCompFont); - font->color.R = 1.00; - font->color.G = 1.00; - font->color.B = 1.00; - font->color.A = 1.00; - - -/* font->fontheight=12; - font->tIncX=0.0; - font->tIncY=0.0; - font->texId=-1; - font->fontdesc=(char*)0; - - - - - font->tIncX = (float)pow (C_DPI, -1); - font->tIncY = (float)pow (R_DPI, -1); - - - for (y = 1 - font->tIncY; y >= 0; y -= font->tIncY) - { - for (x = 0; x <= 1 - font->tIncX; x += font->tIncX, idx ++) - { - font->bmp[idx][0]=x; - font->bmp[idx][1]=y; - } - }*/ - return font; -} - -#endif -void glDeleteFont(glCompFont * f) -{ - if (f->fontdesc) - free(f->fontdesc); - if (f->tex) - glCompDeleteTexture(f->tex); - free(f); - -} - -glCompFont *glNewFont (glCompSet * s, char *text, glCompColor * c,glCompFontType type, char *fontdesc, int fs,int is2D) -{ - glCompFont *font = (glCompFont*) malloc(sizeof(glCompFont)); - font->reference = 0; - font->color.R = c->R; - font->color.G = c->G; - font->color.B = c->B; - font->color.A = c->A; - font->justify.VJustify = GL_FONTVJUSTIFY; - font->justify.HJustify = GL_FONTHJUSTIFY; - font->type=type; - font->is2D=is2D; - - if (font->type == gluttext) - font->glutfont = DEFAULT_GLUT_FONT; - else - font->glutfont = (void *) 0; - - font->fontdesc = strdup(fontdesc); - font->size = fs; - font->transparent = 1; - font->optimize = GL_FONTOPTIMIZE; - if (text) - font->tex = - glCompSetAddNewTexLabel(s, font->fontdesc, font->size, text, - is2D); - return font; - -} - - - -glCompFont *glNewFontFromParent(glCompObj * o, char *text) -{ - glCompCommon *parent; - glCompFont *font = NEW(glCompFont); - parent = o->common.parent; - if (parent) { - parent = o->common.parent; - font->reference = 1; - font->color.R = parent->font->color.R; - font->color.G = parent->font->color.G; - font->color.B = parent->font->color.B; - font->color.A = parent->font->color.A; - - font->type = parent->font->type; - font->glutfont = parent->font->glutfont; - font->fontdesc = strdup(parent->font->fontdesc); - font->size = parent->font->size; - font->transparent = parent->font->transparent; - font->justify.VJustify = parent->font->justify.VJustify; - font->justify.HJustify = parent->font->justify.HJustify; - font->optimize = parent->font->optimize; - font->is2D=parent->font->is2D; - if (text) { - if (strlen(text)) - font->tex = - glCompSetAddNewTexLabel(parent->compset, - font->fontdesc, font->size, - text, parent->font->is2D); - } - } else { /*no parent */ - - glCompColor c; - c.R = GLCOMPSET_FONT_COLOR_R; - c.G = GLCOMPSET_FONT_COLOR_G; - c.B = GLCOMPSET_FONT_COLOR_B; - c.A = GLCOMPSET_FONT_COLOR_ALPHA; - font = - glNewFont (o->common.compset, text, &c, pangotext, - GLCOMPSET_FONT_DESC, GLCOMPSET_FONT_SIZE,1); - } - return font; -} - -#if 0 - -#ifndef _WIN32 -#define TMPTEMP "/tmp/_sfXXXX" -#endif - -fontset_t *fontset_init() -{ - fontset_t *fs = NEW(fontset_t); - fs->activefont = -1; - fs->count = 0; -#ifdef _WIN32 - fs->font_directory = "c:/fontfiles"; //FIX ME -#else - fs->font_directory = strdup(TMPTEMP); - mkdtemp(fs->font_directory); -#endif - fs->fonts = 0; - return fs; -} - -static char *fontpath = NULL; -static size_t fontpathsz = 0; - -glCompFont *add_glut_font(fontset_t * fontset, void *glutfont) -{ - int id; - id = glutfontId(fontset, glutfont); - if (id == -1) { - fontset->fonts = - ALLOC(fontset->count + 1, fontset->fonts, glCompFont *); - fontset->fonts[fontset->count] = glut_font_init(); - fontset->fonts[fontset->count]->type = gluttext; - fontset->fonts[fontset->count]->glutfont = glutfont; - fontset->count++; - return fontset->fonts[fontset->count - 1]; - } else - return fontset->fonts[id]; -} - - -glCompFont *add_font(fontset_t * fontset, char *fontdesc, int fs) -{ - int id; - size_t sz; - - id = fontId(fontset, fontdesc); - if (id == -1) { - sz = strlen(fontset->font_directory) + strlen(fontdesc) + 6; - if (sz > fontpathsz) { - fontpathsz = 2 * sz; - fontpath = ALLOC(fontpathsz, fontpath, char); - } -/* sprintf(fontpath, "%s/%s.png", fontset->font_directory, fontdesc); - if (glCompCreateFontFile(fontdesc,fs, fontpath, (float) 32, (float) 32) == - 0) { - fontset->fonts = - ALLOC(fontset->count + 1, fontset->fonts, glCompFont *); - fontset->fonts[fontset->count] = tf = font_init(); - tf->fontdesc = strdup(fontdesc); - fontset->fonts[fontset->count]->type = pangotext; - glGenTextures(1, &(tf->texId)); //get opengl texture name - if ((tf->texId >= 0) && glCompLoadFontPNG(fontpath, tf->texId)) { - fontset->activefont = fontset->count; - fontset->count++; - return fontset->fonts[fontset->count - 1]; - } else - return NULL; - } else - return NULL; - } else - return fontset->fonts[id];*/ - } - - return NULL; -} - -void free_font_set(fontset_t * fontset) -{ - int ind; - for (ind = 0; ind < fontset->count; ind++) { -#ifndef _WIN32 - sprintf(fontpath, "%s/%s.png", fontset->font_directory, - fontset->fonts[ind]->fontdesc); - unlink(fontpath); -#endif - free(fontset->fonts[ind]->fontdesc); - free(fontset->fonts[ind]); - } - free(fontset->fonts); -#ifndef _WIN32 - if (fontset->font_directory) - rmdir(fontset->font_directory); -#endif - if (fontset->font_directory) - free(fontset->font_directory); - free(fontset); -} - -void fontColor(glCompFont * font, float r, float g, float b, float a) -{ - - font->color.R = r; - font->color.G = g; - font->color.B = b; - font->color.A = a; -} -#endif - -/*texture base 3d text rendering*/ -void glCompDrawText3D(glCompFont * f,GLfloat x,GLfloat y,GLfloat z,GLfloat w,GLfloat h) -{ - glEnable(GL_BLEND); // Turn Blending On - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_TEXTURE_2D); - glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glBindTexture(GL_TEXTURE_2D,f->tex->id); - glBegin(GL_QUADS); - glTexCoord2d(0.0f, 1.0f);glVertex3d(x,y,z); - glTexCoord2d(1.0f, 1.0f);glVertex3d(x+w,y,z); - glTexCoord2d(1.0f, 0.0f);glVertex3d(x+w,y+h,z); - glTexCoord2d(0.0f, 0.0f);glVertex3d(x,y+h,z); - glEnd(); - - glDisable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - -} -#if 0 -/*bitmap base 2D text rendering */ -static void change_fontC(unsigned char* d,int w,int h,glCompColor* c) -{ - int size=w*h*4; - int ind=0; - for (;ind <=size; ind=ind+4) - { - if(d[ind+3] != 0) - { - d[ind]=c->R*255; - d[ind+1]=c->G*255; - d[ind+2]=c->B*255; - d[ind+3]=c->A*255; - } - } -} -#endif - -void glCompDrawText(glCompFont * f,GLfloat x,GLfloat y) -{ -// change_fontC(f->tex->data,f->tex->width,f->tex->height,&f->color); - glRasterPos2f(x, y); - glDrawPixels(f->tex->width, f->tex->height, GL_RGBA, GL_UNSIGNED_BYTE, f->tex->data); -} - -/*text rendering functions, depends on a globject to retrieve stats*/ -void glCompRenderText(glCompFont * f, glCompObj * parentObj) -{ - static glCompCommon ref; - GLfloat x, y, z, w, h; - if (!f->tex) - return; - x = 0; - y = 0; - w = f->tex->width; - h = f->tex->height; - ref = parentObj->common; - z = ref.pos.z; - switch (f->justify.HJustify) - { - case glFontHJustifyNone: - case glFontHJustifyLeft: - x = ref.refPos.x; - break; - case glFontHJustifyRight: - x = ref.refPos.x + (ref.width - f->tex->width); - break; - case glFontHJustifyCenter: - x = ref.refPos.x + (ref.width - f->tex->width) / (GLfloat) 2.0; - break; - } - switch (f->justify.VJustify) { - case glFontVJustifyNone: - case glFontVJustifyBottom: - y = ref.pos.y; - break; - case glFontVJustifyTop: - x = ref.refPos.y + (ref.height - f->tex->height); - break; - case glFontVJustifyCenter: - y = ref.refPos.y + (ref.height - f->tex->height) / (GLfloat) 2.0; - break; - } - z=ref.refPos.z; - - glCompSetColor(&f->color); - glCompDrawText(f,x,y); - -} - -#if 0 -#define imageWidth 256 -#define imageHeight 256 -static GLubyte imageData[imageWidth][imageHeight][4]; -#endif - -#if 0 -int glCompLoadFontPNG(char *name, int id) -{ - GLubyte *imageData = NULL; - int imageWidth, imageHeight, idx2, c; - -// imageData = fontGetData (s, size, imageBits); - imageData = glCompLoadPng (name, &imageWidth, &imageHeight); - - c = 0; - idx2 = 0; -/* for (idx=0;idx < imageWidth*imageHeight+30000;idx=idx+1) - { - if (c!=imageData[idx]) - { - c=imageData[idx]; - printf ("%i) %i \n ",idx2,imageData[idx]); - } - - idx2++; - c=((((idx&0x8)==0)^((idx2&0x8))==0))*255; - imageData[idx][idx2][0] = c; - imageData[idx][idx2][1] = c; - imageData[idx][idx2][2] = c; - imageData[idx][idx2][3] = 255; - - }*/ - - - /* no image data */ - if (imageData == NULL) - return -1; - - glBindTexture(GL_TEXTURE_2D, id); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - /* glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - /* glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); -// glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE , GL_DECAL); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, imageWidth, imageHeight, 0, - GL_ALPHA, GL_UNSIGNED_BYTE, imageData); -// glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData); - - /* release data, its been uploaded */ - - return 1; -} -#endif diff --git a/internal/ccall/glcomp/glcompfont.h b/internal/ccall/glcomp/glcompfont.h deleted file mode 100644 index 6f5d0bc..0000000 --- a/internal/ccall/glcomp/glcompfont.h +++ /dev/null @@ -1,56 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef glCompFont_H -#define glCompFont_H - -#include -#include -#ifdef WIN32 -#include "glpangofont.h" -typedef float GLfloat; -#else -#include -#include -#endif -#include "glcompdefs.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif -#if 0 - void copy_font(glCompFont * targetfont, const glCompFont * sourcefont); - fontset_t *fontset_init(void); - void free_font_set(fontset_t * fontset); - glCompFont *add_font(fontset_t * fontset, char *fontdesc, int fs); - glCompFont *add_glut_font(fontset_t * fontset, void *glutfont); - void fontColor(glCompFont * font, float r, float g, float b, float a); - glCompFont *font_init(void); - int glCompLoadFontPNG(char *name, int id); - void glprintf(glCompFont *, GLfloat, GLfloat, GLfloat, GLfloat, char *); -#endif - - void glprintfglut(void *font, GLfloat xpos, GLfloat ypos, GLfloat zpos, char *bf); - - glCompFont *glNewFont(glCompSet * s, char *text, glCompColor * c, - glCompFontType type, char *fontdesc, int fs,int is2D); - glCompFont *glNewFontFromParent(glCompObj * o, char *text); - void glDeleteFont(glCompFont * f); - void glCompDrawText(glCompFont * f,GLfloat x,GLfloat y); - void glCompRenderText(glCompFont * f, glCompObj * parentObj); - void glCompDrawText3D(glCompFont * f,GLfloat x,GLfloat y,GLfloat z,GLfloat w,GLfloat h); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcompimage.c b/internal/ccall/glcomp/glcompimage.c deleted file mode 100644 index ca0bb49..0000000 --- a/internal/ccall/glcomp/glcompimage.c +++ /dev/null @@ -1,203 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompimage.h" -#include "glcompfont.h" -#include "glcompset.h" -#include "glutils.h" -#include "glcomptexture.h" -#include "memory.h" - -glCompImage *glCompImageNew(glCompObj * par, GLfloat x, GLfloat y) -{ - glCompImage *p; - p = NEW(glCompImage); - glCompInitCommon((glCompObj *) p, par, x, y); - p->objType = glImageObj; - //typedef enum {glPanelObj,glbuttonObj,glLabelObj,glImageObj}glObjType; - - p->objType = glImageObj; - p->stretch = 0; -#if 0 - p->pngFile = (char *) 0; -#endif - p->texture = NULL; - p->common.functions.draw = glCompImageDraw; - return p; -} - -/* glCompImageNewFile: - * Creates image from given input file. - * At present, we assume png input. - * Return 0 on failure. - */ -glCompImage *glCompImageNewFile (glCompObj * par, GLfloat x, GLfloat y, char* imgfile, int is2D) -{ - int imageWidth, imageHeight; - unsigned char *data = glCompLoadPng (imgfile, &imageWidth, &imageHeight); - glCompImage *p; - - if (!data) return NULL; - p = glCompImageNew (par, x, y); - if (!glCompImageLoad (p, data, imageWidth, imageHeight, is2D)) { - glCompImageDelete (p); - return NULL; - } - return p; -} - -void glCompImageDelete(glCompImage * p) -{ - glCompEmptyCommon(&p->common); -#if 0 - if (p->pngFile) - free(p->pngFile); -#endif - if (p->texture) - glCompDeleteTexture(p->texture); - free(p); -} - -int glCompImageLoad(glCompImage * i, unsigned char *data, int width, - int height,int is2D) -{ - if (data != NULL) { /*valid image data */ - glCompDeleteTexture(i->texture); - i->texture = - glCompSetAddNewTexImage(i->common.compset, width, height, data, - is2D); - if (i->texture) { - i->common.width = width; - i->common.height = height; - return 1; - } - - } - return 0; -} - - - -int glCompImageLoadPng(glCompImage * i, char *pngFile,int is2D) -{ - int imageWidth, imageHeight; - unsigned char *data; - data = glCompLoadPng (pngFile, &imageWidth, &imageHeight); - return glCompImageLoad(i, data, imageWidth, imageHeight,is2D); -} - -#if 0 -int glCompImageLoadRaw(glCompSet * s, glCompImage * i, char *rawFile,int is2D) -{ - int imageWidth, imageHeight; - unsigned char *data; - data = glCompLoadPng (rawFile, &imageWidth, &imageHeight); - return glCompImageLoad(i, data, imageWidth, imageHeight,is2D); -} -#endif - -void glCompImageDraw(void *obj) -{ - glCompImage *p = (glCompImage *) obj; - glCompCommon ref = p->common; - GLfloat w,h,d; - - glCompCalcWidget((glCompCommon *) p->common.parent, &p->common, &ref); - if (!p->common.visible) - return; - if (!p->texture) - return; - - if(p->texture->id <=0) - { - glRasterPos2f(ref.pos.x, ref.pos.y); - glDrawPixels(p->texture->width, p->texture->height, GL_RGBA,GL_UNSIGNED_BYTE, p->texture->data); - } - else - { -#if 0 - w=ref.width; - h=ref.height; -#endif - w = p->width; - h = p->height; - d=(GLfloat)p->common.layer* (GLfloat)GLCOMPSET_BEVEL_DIFF; - glDisable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glBindTexture(GL_TEXTURE_2D,p->texture->id); - glBegin(GL_QUADS); - glTexCoord2d(0.0f, 1.0f);glVertex3d(ref.pos.x,ref.pos.y,d); - glTexCoord2d(1.0f, 1.0f);glVertex3d(ref.pos.x+w,ref.pos.y,d); - glTexCoord2d(1.0f, 0.0f);glVertex3d(ref.pos.x+w,ref.pos.y+h,d); - glTexCoord2d(0.0f, 0.0f);glVertex3d(ref.pos.x,ref.pos.y+h,d); - glEnd(); - - - glDisable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - } - -} - -void glCompImageClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - if (o->common.callbacks.click) - o->common.callbacks.click(o, x, y, t); -} - -void glCompImageDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.doubleclick) - ((glCompImage *) obj)->common.callbacks.doubleclick(obj, x, y, t); -} - -void glCompImageMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.mousedown) - ((glCompImage *) obj)->common.callbacks.mousedown(obj, x, y, t); -} - -void glCompImageMouseIn(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.mousein) - ((glCompImage *) obj)->common.callbacks.mousein(obj, x, y); -} - -void glCompImageMouseOut(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.mouseout) - ((glCompImage *) obj)->common.callbacks.mouseout(obj, x, y); -} - -void glCompImageMouseOver(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.mouseover) - ((glCompImage *) obj)->common.callbacks.mouseover(obj, x, y); -} - -void glCompImageMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompImage *) obj)->common.callbacks.mouseup) - ((glCompImage *) obj)->common.callbacks.mouseup(obj, x, y, t); -} diff --git a/internal/ccall/glcomp/glcompimage.h b/internal/ccall/glcomp/glcompimage.h deleted file mode 100644 index 19b5028..0000000 --- a/internal/ccall/glcomp/glcompimage.h +++ /dev/null @@ -1,47 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPIMAGE_H -#define GLCOMPIMAGE_H - -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern glCompImage *glCompImageNewFile(glCompObj * par, GLfloat x, - GLfloat y, char* imgfile, int is2D); - extern glCompImage *glCompImageNew(glCompObj * par, GLfloat x, - GLfloat y); - extern void glCompImageDelete(glCompImage * p); - extern int glCompImageLoad(glCompImage * i, unsigned char *data, - int width, int height,int is2D); - extern int glCompImageLoadPng(glCompImage * i, char *pngFile,int is2D); - extern void glCompImageDraw(void *obj); - extern void glCompImageClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompImageDoubleClick(glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - extern void glCompImageMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompImageMouseIn(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompImageMouseOut(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompImageMouseOver(glCompObj * obj, GLfloat x, - GLfloat y); - extern void glCompImageMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcomplabel.c b/internal/ccall/glcomp/glcomplabel.c deleted file mode 100644 index 0463a23..0000000 --- a/internal/ccall/glcomp/glcomplabel.c +++ /dev/null @@ -1,144 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcomplabel.h" -#include "glcompfont.h" -#include "glcompset.h" -#include "glutils.h" -#include "memory.h" - -glCompLabel *glCompLabelNew(glCompObj * par, GLfloat x, GLfloat y, - char *text) -{ - glCompLabel *p; -// glCompCommon* parent=&par->common; - p = NEW(glCompLabel); - glCompInitCommon((glCompObj *) p, par, x, y); - p->objType = glLabelObj; - p->transparent=1; - //typedef enum {glPanelObj,glbuttonObj,glLabelObj,glImageObj}glObjType; - - p->text = strdup(text); - p->common.font = glNewFontFromParent ((glCompObj*)p, text); - p->common.functions.draw = (glcompdrawfunc_t)glCompLabelDraw; - - return p; -} - - -int glCompLabelDraw(glCompLabel * p) -{ - glCompCommon ref; - ref = p->common; - glCompCalcWidget((glCompCommon *) p->common.parent, &p->common, &ref); - /*draw background */ - if(!p->transparent) - { - glCompSetColor(&p->common.color); - glBegin(GL_QUADS); - glVertex3d(ref.refPos.x, ref.refPos.y, ref.refPos.z); - glVertex3d(ref.refPos.x + ref.width, ref.refPos.y, ref.refPos.z); - glVertex3d(ref.refPos.x + ref.width, ref.refPos.y + ref.height, - ref.refPos.z); - glVertex3d(ref.refPos.x, ref.refPos.y + ref.height, ref.refPos.z); - glEnd(); - } - glCompRenderText(p->common.font, (glCompObj *) p); - return 1; - -} -static void update_font(glCompLabel * p,char* text,char* desc,int fs) -{ - - glCompFont* temp=p->common.font; - if (strlen(text) >512) - return ; - - p->common.font=glNewFont (p->common.compset,text,&p->common.color,temp->type,desc,fs,temp->is2D); - if(temp) - glDeleteFont(temp); - if(p->text) - free(p->text); - p->text = strdup(text); - - -} - -void glCompLabelSetText(glCompLabel * p, char *text) -{ - glCompFont* temp=p->common.font; - update_font(p,text,temp->fontdesc,temp->size); -} -void glCompLabelSetFontSize(glCompLabel * p, int size) -{ - glCompFont* temp=p->common.font; - update_font(p,p->text,temp->fontdesc,size); -} -void glCompLabelSetFontName(glCompLabel * p, char* fontName) -{ - glCompFont* temp=p->common.font; - update_font(p,p->text,fontName,temp->size); -} - - -void glCompLabelClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - if (o->common.callbacks.click) - o->common.callbacks.click(o, x, y, t); -} - -void glCompLabelDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.doubleclick) - ((glCompLabel *) obj)->common.callbacks.doubleclick(obj, x, y, t); -} - -void glCompLabelMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.mousedown) - ((glCompLabel *) obj)->common.callbacks.mousedown(obj, x, y, t); -} - -void glCompLabelMouseIn(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.mousein) - ((glCompLabel *) obj)->common.callbacks.mousein(obj, x, y); -} - -void glCompLabelMouseOut(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.mouseout) - ((glCompLabel *) obj)->common.callbacks.mouseout(obj, x, y); -} - -void glCompLabelMouseOver(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.mouseover) - ((glCompLabel *) obj)->common.callbacks.mouseover(obj, x, y); -} - -void glCompLabelMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompLabel *) obj)->common.callbacks.mouseup) - ((glCompLabel *) obj)->common.callbacks.mouseup(obj, x, y, t); -} diff --git a/internal/ccall/glcomp/glcomplabel.h b/internal/ccall/glcomp/glcomplabel.h deleted file mode 100644 index 37961b1..0000000 --- a/internal/ccall/glcomp/glcomplabel.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPLABEL_H -#define GLCOMPLABEL_H - -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern glCompLabel *glCompLabelNew(glCompObj * par, GLfloat x, - GLfloat y, char *text); - extern int glCompSetAddLabel(glCompSet * s, glCompLabel * p); - extern int glCompSetRemoveLabel(glCompSet * s, glCompLabel * p); - -/*events*/ - extern int glCompLabelDraw(glCompLabel * p); - extern void glCompLabelClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompLabelDoubleClick(glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - extern void glCompLabelMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompLabelMouseIn(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompLabelMouseOut(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompLabelMouseOver(glCompObj * obj, GLfloat x, - GLfloat y); - extern void glCompLabelMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - - extern void glCompLabelSetText(glCompLabel * p, char *text); - extern void glCompLabelSetFontSize(glCompLabel * p, int size); - extern void glCompLabelSetFontName(glCompLabel * p, char* fontName); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcompmouse.c b/internal/ccall/glcomp/glcompmouse.c deleted file mode 100644 index 05ed2b2..0000000 --- a/internal/ccall/glcomp/glcompmouse.c +++ /dev/null @@ -1,83 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompmouse.h" -#include "glcompfont.h" -#include "glcompset.h" -#include "glutils.h" - -void glCompMouseInit(glCompMouse * m) -{ - m->functions.click = glCompClick; - m->functions.doubleclick = glCompDoubleClick; - m->functions.draw = NULL; - m->functions.mousedown = glCompMouseDown; - m->functions.mousedrag = glCompMouseDrag; - m->functions.mousein = glCompMouseIn; - m->functions.mouseout = glCompMouseOut; - m->functions.mouseover = glCompMouseOver; - m->functions.mouseup = glCompMouseUp; - - m->callbacks.click = NULL; - m->callbacks.doubleclick = NULL; - m->callbacks.draw = NULL; - m->callbacks.mousedown = NULL; - m->callbacks.mousedrag = NULL; - m->callbacks.mousein = NULL; - m->callbacks.mouseout = NULL; - m->callbacks.mouseover = NULL; - m->callbacks.mouseup = NULL; - m->dragX = 0; - m->dragY = 0; - m->down = 0; - -} -extern void glCompClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - -} -extern void glCompDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - -} - -extern void glCompMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - -} - -extern void glCompMouseIn(glCompObj * obj, GLfloat x, GLfloat y) -{ - -} -extern void glCompMouseOut(glCompObj * obj, GLfloat x, GLfloat y) -{ - -} -extern void glCompMouseOver(glCompObj * obj, GLfloat x, GLfloat y) -{ - -} -extern void glCompMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - -} -extern void glCompMouseDrag(glCompObj * obj, GLfloat dx, GLfloat dy, - glMouseButtonType t) -{ - -} diff --git a/internal/ccall/glcomp/glcompmouse.h b/internal/ccall/glcomp/glcompmouse.h deleted file mode 100644 index cd15d27..0000000 --- a/internal/ccall/glcomp/glcompmouse.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPMOUSE_H -#define GLCOMPMOUSE_H - -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*events*/ - extern void glCompMouseInit(glCompMouse * m); - extern void glCompClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompMouseIn(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompMouseOut(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompMouseOver(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompMouseDrag(glCompObj * obj, GLfloat dx, GLfloat dy, - glMouseButtonType t); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcomppanel.c b/internal/ccall/glcomp/glcomppanel.c deleted file mode 100644 index a8022f7..0000000 --- a/internal/ccall/glcomp/glcomppanel.c +++ /dev/null @@ -1,177 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcomppanel.h" -#include "glcompfont.h" -#include "glcompset.h" -#include "glcomptexture.h" -#include "glutils.h" -#include "memory.h" - -glCompPanel *glCompPanelNew(glCompObj * parentObj, GLfloat x, GLfloat y, - GLfloat w, GLfloat h) -{ - glCompPanel *p; -// glCompCommon* parent=&parentObj->common; - p = NEW(glCompPanel); - glCompInitCommon((glCompObj *) p, parentObj, (GLfloat) x, (GLfloat) y); - - p->shadowcolor.R = GLCOMPSET_PANEL_SHADOW_COLOR_R; - p->shadowcolor.G = GLCOMPSET_PANEL_SHADOW_COLOR_G; - p->shadowcolor.B = GLCOMPSET_PANEL_SHADOW_COLOR_B; - p->shadowcolor.A = GLCOMPSET_PANEL_SHADOW_COLOR_A; - p->shadowwidth = GLCOMPSET_PANEL_SHADOW_WIDTH; - p->common.borderWidth = GLCOMPSET_PANEL_BORDERWIDTH; - - - p->common.width = w; - p->common.height = h; - - p->common.font = glNewFontFromParent((glCompObj *) p, NULL); - p->text = (char *) 0; - p->common.functions.draw = (glcompdrawfunc_t)glCompPanelDraw; - p->image = (glCompImage *) 0; - return p; -} -void glCompSetPanelText(glCompPanel * p, char *t) -{ - replacestr(t, &p->text); - glCompDeleteTexture(p->common.font->tex); - p->common.font->tex = - glCompSetAddNewTexLabel(p->common.compset, - p->common.font->fontdesc, - p->common.font->size, p->text, 1); -} - -int glCompPanelDraw(glCompObj * o) -{ - glCompPanel *p; - glCompCommon ref; - glCompRect r; - p = (glCompPanel *) o; - ref = p->common; - glCompCalcWidget((glCompCommon *) p->common.parent, &p->common, &ref); - p->objType = glPanelObj; - //typedef enum {glPanelObj,glbuttonObj,glLabelObj,glImageObj}glObjType; - - - if (!p->common.visible) - return 0; - /*draw shadow */ - glColor4f((GLfloat) p->shadowcolor.R, (GLfloat) p->shadowcolor.G, - (GLfloat) p->shadowcolor.B, (GLfloat) p->shadowcolor.A); - r.h = p->shadowwidth; - r.w = ref.width; - r.pos.x = ref.pos.x + p->shadowwidth; - r.pos.y = ref.pos.y - p->shadowwidth; - r.pos.z = -0.001; - glCompDrawRectangle(&r); - r.h = ref.height; - r.w = p->shadowwidth; - r.pos.x = ref.pos.x + ref.width; - r.pos.y = ref.pos.y - p->shadowwidth; - r.pos.z = -0.001; - glCompDrawRectangle(&r); - /*draw panel */ - glCompDrawRectPrism(&(ref.pos), ref.width, ref.height, - p->common.borderWidth, 0.01, &(ref.color), 1); - /*draw image if there is */ - if (p->image) { - p->image->common.callbacks.draw((void *) p->image); - } - if (p->text) { - - - } - return 1; -} - - -int glCompPanelHide(glCompPanel * p) -{ - /* int ind = 0; */ - p->common.visible = 0; - return 1; - - -} - -int glCompPanelShow(glCompPanel * p) -{ - /* int ind = 0; */ - p->common.visible = 1; - return 1; - -} - -void glCompPanelClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - if (o->common.callbacks.click) - o->common.callbacks.click(o, x, y, t); -} - -void glCompPanelDoubleClick(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.doubleclick) - ((glCompPanel *) obj)->common.callbacks.doubleclick(obj, x, y, t); -} - -void glCompPanelMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.mousedown) - ((glCompPanel *) obj)->common.callbacks.mousedown(obj, x, y, t); -} - -void glCompPanelMouseIn(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.mousein) - ((glCompPanel *) obj)->common.callbacks.mousein(obj, x, y); -} - -void glCompPanelMouseOut(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.mouseout) - ((glCompPanel *) obj)->common.callbacks.mouseout(obj, x, y); -} - -void glCompPanelMouseOver(glCompObj * obj, GLfloat x, GLfloat y) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.mouseover) - ((glCompPanel *) obj)->common.callbacks.mouseover(obj, x, y); -} - -void glCompPanelMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - /*Put your internal code here */ - if (((glCompPanel *) obj)->common.callbacks.mouseup) - ((glCompPanel *) obj)->common.callbacks.mouseup(obj, x, y, t); -} - - -#if 0 - -void glCompPanelSetText(glCompPanel * p, char *str) -{ -// replacestr(str, &p->text); -} -#endif diff --git a/internal/ccall/glcomp/glcomppanel.h b/internal/ccall/glcomp/glcomppanel.h deleted file mode 100644 index a31090a..0000000 --- a/internal/ccall/glcomp/glcomppanel.h +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef GLCOMPPANEL_H -#define GLCOMPPANEL_H - -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern glCompPanel *glCompPanelNew(glCompObj * parentObj, GLfloat x, - GLfloat y, GLfloat w, GLfloat h); - extern int glCompSetAddPanel(glCompSet * s, glCompPanel * p); - extern int glCompSetRemovePanel(glCompSet * s, glCompPanel * p); - extern int glCompPanelShow(glCompPanel * p); - extern int glCompPanelHide(glCompPanel * p); - extern void glCompSetPanelText(glCompPanel * p, char *t); - -/*events*/ - extern int glCompPanelDraw(glCompObj * o); - extern void glCompPanelClick(glCompObj * o, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompPanelDoubleClick(glCompObj * obj, GLfloat x, - GLfloat y, glMouseButtonType t); - extern void glCompPanelMouseDown(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - extern void glCompPanelMouseIn(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompPanelMouseOut(glCompObj * obj, GLfloat x, GLfloat y); - extern void glCompPanelMouseOver(glCompObj * obj, GLfloat x, - GLfloat y); - extern void glCompPanelMouseUp(glCompObj * obj, GLfloat x, GLfloat y, - glMouseButtonType t); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcompset.c b/internal/ccall/glcomp/glcompset.c deleted file mode 100644 index ada1c5b..0000000 --- a/internal/ccall/glcomp/glcompset.c +++ /dev/null @@ -1,412 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompset.h" -#include "memory.h" -#include "glcomppanel.h" -#include "glcomplabel.h" -#include "glcompbutton.h" -#include "glcompmouse.h" - -#include "glutils.h" -//typedef enum {glPanelObj,glbuttonObj,glLabelObj,glImageObj}glObjType; - -static GLfloat startX, startY; - - - -void glCompGetObjectType(glCompObj * p) -{ - switch (p->objType) { - case glPanelObj: - printf("Panel\n"); - break; - case glButtonObj: - printf("Button\n"); - break; - case glImageObj: - printf("Image\n"); - break; - case glLabelObj: - printf("Label\n"); - break; - default: - printf("undefined object\n"); - break; - - } - -} - -static int glCompPointInObject(glCompObj * p, float x, float y) -{ - return ((x > p->common.refPos.x) - && (x < p->common.refPos.x + p->common.width) - && (y > p->common.refPos.y) - && (y < p->common.refPos.y + p->common.height)); -} - -glCompObj *glCompGetObjByMouse(glCompSet * s, glCompMouse * m, - int onlyClickable) -{ - int ind; - glCompObj *rv = NULL; - if (!s || !m) - return NULL; - for (ind = 0; ind < s->objcnt; ind++) { - if ((s->obj[ind]->common.visible) - && (glCompPointInObject(s->obj[ind], m->pos.x, m->pos.y))) { - if ((!rv) || (s->obj[ind]->common.layer >= rv->common.layer)) { - if (((onlyClickable) - && (s->obj[ind]->common.functions.click)) - || (!onlyClickable)) - rv = s->obj[ind]; - } - } - } - - return rv; -} - - -static void glCompMouseMove(void *obj, GLfloat x, GLfloat y) -{ - ((glCompSet *) obj)->mouse.pos.x = x; - ((glCompSet *) obj)->mouse.pos.y = - ((glCompObj *) obj)->common.height - y; - ((glCompSet *) obj)->mouse.pos.z = 0; - ((glCompSet *) obj)->mouse.dragY = - ((glCompSet *) obj)->mouse.pos.y - startY; - ((glCompSet *) obj)->mouse.dragX = - ((glCompSet *) obj)->mouse.pos.x - startX; - if (((glCompSet *) obj)->common.callbacks.mouseover) - ((glCompSet *) obj)->common.callbacks.mouseover(obj, x, y); -/* if (((glCompSet*)obj)->mouse.down) - printf ("%f %f \n",((glCompSet*)obj)->mouse.dragX,((glCompSet*)obj)->mouse.dragX);*/ -} - - - -static void glCompSetMouseClick(void *obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - if (((glCompSet *) obj)->common.callbacks.click) - ((glCompSet *) obj)->common.callbacks.click(obj, x, y, t); - - -} -static void glCompSetMouseDown(void *obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - ((glCompSet *) obj)->mouse.t = t; - if (t == glMouseLeftButton) { - ((glCompSet *) obj)->mouse.pos.x = x; - ((glCompSet *) obj)->mouse.pos.y = - ((glCompObj *) obj)->common.height - y; - ((glCompSet *) obj)->mouse.pos.z = 0; - ((glCompSet *) obj)->mouse.clickedObj = - glCompGetObjByMouse(((glCompObj *) obj)->common.compset, - &((glCompSet *) (((glCompObj *) obj)-> - common.compset))->mouse, - 1); - if (((glCompSet *) obj)->mouse.clickedObj) - if (((glCompSet *) obj)->mouse.clickedObj->common.functions. - mousedown) - ((glCompSet *) obj)->mouse.clickedObj->common.functions. - mousedown(((glCompSet *) obj)->mouse.clickedObj, x, y, - t); - } - ((glCompSet *) obj)->mouse.down = 1; - startX = x; - startY = ((glCompObj *) obj)->common.height - y; - if (((glCompSet *) obj)->common.callbacks.mousedown) - ((glCompSet *) obj)->common.callbacks.mousedown(obj, x, y, t); - - - - -} -static void glCompSetMouseUp(void *obj, GLfloat x, GLfloat y, - glMouseButtonType t) -{ - - static GLfloat tempX, tempY; - tempX = x; - tempY = ((glCompObj *) obj)->common.height - y; - - ((glCompSet *) obj)->mouse.down = 0; - if (t == glMouseLeftButton) { - glCompObj *o = NULL; - glCompObj *o_clicked = ((glCompSet *) obj)->mouse.clickedObj; - ((glCompSet *) obj)->mouse.pos.x = tempX; - ((glCompSet *) obj)->mouse.pos.y = tempY; - ((glCompSet *) obj)->mouse.pos.z = 0; - if (o_clicked) - o = glCompGetObjByMouse((glCompSet *) obj, - &((glCompSet *) obj)->mouse, 1); - if (!o) - return; - if (o == o_clicked) - o->common.functions.click(o, x, y, t); - } - if (((glCompSet *) obj)->common.callbacks.mouseup) - ((glCompSet *) obj)->common.callbacks.mouseup(obj, x, y, t); - /*check if mouse is clicked or dragged */ - if ((startX == (int) tempX) && (startY == tempY)) - glCompSetMouseClick(obj, x, y, t); - - - -} - - - -void glCompInitCommon(glCompObj * childObj, glCompObj * parentObj, - GLfloat x, GLfloat y) -{ - glCompCommon *c; - glCompCommon *parent; - c = &childObj->common; - c->align = glAlignNone; - c->anchor.bottom = 0; - c->anchor.left = 0; - c->anchor.top = 0; - c->anchor.right = 0; - c->anchor.leftAnchor = 0; - c->anchor.rightAnchor = 0; - c->anchor.topAnchor = 0; - c->anchor.bottomAnchor = 0; - c->data = 0; - c->enabled = 1; - c->height = GLCOMP_DEFAULT_HEIGHT;; - c->width = GLCOMP_DEFAULT_WIDTH; - c->visible = 1; - c->pos.x = x; - c->pos.y = y; - c->borderType = glBorderSolid; - c->borderWidth = GLCOMPSET_BORDERWIDTH; - - /*NULL function pointers */ - childObj->common.callbacks.click = NULL; - childObj->common.callbacks.doubleclick = NULL; - childObj->common.callbacks.draw = NULL; - childObj->common.callbacks.mousedown = NULL; - childObj->common.callbacks.mousein = NULL; - childObj->common.callbacks.mouseout = NULL; - childObj->common.callbacks.mouseover = NULL; - childObj->common.callbacks.mouseup = NULL; - - childObj->common.functions.click = NULL; - childObj->common.functions.doubleclick = NULL; - childObj->common.functions.draw = NULL; - childObj->common.functions.mousedown = NULL; - childObj->common.functions.mousein = NULL; - childObj->common.functions.mouseout = NULL; - childObj->common.functions.mouseover = NULL; - childObj->common.functions.mouseup = NULL; - - - - if (parentObj) { - c->parent = &parentObj->common; - parent = &parentObj->common; - copy_glcomp_color(&parent->color, &c->color); - c->layer = parent->layer + 1; - c->pos.z = parent->pos.z; - glCompSetAddObj((glCompSet *) parent->compset, childObj); - } else { - c->parent = NULL; - c->color.R = GLCOMPSET_PANEL_COLOR_R; - c->color.G = GLCOMPSET_PANEL_COLOR_G; - c->color.B = GLCOMPSET_PANEL_COLOR_B; - c->color.A = GLCOMPSET_PANEL_COLOR_ALPHA; - c->layer = 0; - c->pos.z = 0; - } - c->font = glNewFontFromParent(childObj, NULL); -} - -void glCompEmptyCommon(glCompCommon * c) -{ - glDeleteFont(c->font); -} -glCompSet *glCompSetNew(int w, int h) -{ - - glCompSet *s = NEW(glCompSet); - glCompInitCommon((glCompObj *) s, NULL, (GLfloat) 0, (GLfloat) 0); - s->common.width = (GLfloat) w; - s->common.height = (GLfloat) h; - s->groupCount = 0; - s->objcnt = 0; - s->obj = (glCompObj **) 0; - s->textureCount = 0; - s->textures = (glCompTex **) 0; - s->common.font = glNewFontFromParent((glCompObj *) s, NULL); - s->common.compset = (glCompSet *) s; - s->common.functions.mouseover = (glcompmouseoverfunc_t)glCompMouseMove; - s->common.functions.mousedown = (glcompmousedownfunc_t)glCompSetMouseDown; - s->common.functions.mouseup = (glcompmouseupfunc_t)glCompSetMouseUp; - glCompMouseInit(&s->mouse); - return s; -} - - - -void glCompSetAddObj(glCompSet * s, glCompObj * obj) -{ - s->objcnt++; - s->obj = realloc(s->obj, sizeof(glCompObj *) * s->objcnt); - s->obj[s->objcnt - 1] = obj; - obj->common.compset = s; -} - -#if 0 -// compiler reports this function is not used. - -//converts screen location to opengl coordinates -static void glCompSetGetPos(int x, int y, float *X, float *Y, float *Z) -{ - GLdouble wwinX; - GLdouble wwinY; - GLdouble wwinZ; - GLdouble posX, posY, posZ; - - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - - //draw a point to a not important location to get window coordinates - glBegin(GL_POINTS); - glVertex3f(10.00, 10.00, 0.00); - glEnd(); - gluProject(10.0, 10.0, 0.00, modelview, projection, viewport, &wwinX, - &wwinY, &wwinZ); - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX, - &posY, &posZ); - - *X = (float) posX; - *Y = (float) posY; - *Z = (float) posZ; -} -#endif - -void glCompDrawBegin(void) //pushes a gl stack -{ - int vPort[4]; - - glGetIntegerv(GL_VIEWPORT, vPort); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - - glOrtho(0, vPort[2], 0, vPort[3], -1, 1); - glMatrixMode(GL_MODELVIEW); - glEnable(GL_BLEND); - - glPushMatrix(); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - -} - -void glCompDrawEnd(void) //pops the gl stack -{ - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - - -} - -void glCompSetClear(glCompSet * s) -{ -/* int ind = 0; - for (ind = 0; ind < s->buttoncount; ind++) { - glCompSetRemoveButton(s, s->buttons[ind]); - } - free(s->buttons); - for (ind = 0; ind < s->labelcount; ind++) { - free(s->labels[ind]->text); - free(s->labels[ind]); - } - free(s->labels); - for (ind = 0; ind < s->panelcount; ind++) { - free(s->panels[ind]); - } - free(s->panels); - free(s);*/ -} - - - -int glCompSetDraw(glCompSet * s) -{ - int ind = 0; - glCompDrawBegin(); - for (; ind < s->objcnt; ind++) { - s->obj[ind]->common.functions.draw((void *) s->obj[ind]); - } - glCompDrawEnd(); - return 1; -} - -void glcompsetUpdateBorder(glCompSet * s, int w, int h) -{ - if (w > 0 && h > 0) { - s->common.width = (GLfloat) w; - s->common.height = (GLfloat) h; - } -} -extern int glcompsetGetGroupId(glCompSet * s) -{ - return s->groupCount; -} -extern int glcompsetNextGroupId(glCompSet * s) -{ - int rv = s->groupCount; - s->groupCount++; - return rv; -} - - - - -#if 0 -static void change_fonts(glCompSet * s, const texFont_t * sourcefont) -{ - int ind; - - for (ind = 0; ind < s->buttoncount; ind++) { - copy_font((s->buttons[ind]->font), sourcefont); - } - for (ind = 0; ind < s->labelcount; ind++) { - copy_font((s->labels[ind]->font), sourcefont); - - } - for (ind = 0; ind < s->panelcount; ind++) { - copy_font((s->panels[ind]->font), sourcefont); - } -} -#endif diff --git a/internal/ccall/glcomp/glcompset.h b/internal/ccall/glcomp/glcompset.h deleted file mode 100644 index 399ccdb..0000000 --- a/internal/ccall/glcomp/glcompset.h +++ /dev/null @@ -1,56 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/*Open GL basic component set - includes glPanel,glCompButton,glCompCustomButton,clCompLabel,glCompStyle -*/ -#ifndef GLCOMPSET_H -#define GLCOMPSET_H - -#include "glcompfont.h" -#include "glcomptextpng.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern void glCompInitCommon(glCompObj * childObj, - glCompObj * parentObj, GLfloat x, - GLfloat y); - void glCompEmptyCommon(glCompCommon * c); - extern glCompSet *glCompSetNew(int w, int h); - extern void glCompSetClear(glCompSet * s); - extern int glCompSetDraw(glCompSet * s); - extern int glCompSetHide(glCompSet * s); - extern int glCompSetShow(glCompSet * s); - extern int glCompSetClick(glCompSet * s, int x, int y); - extern int glCompSetRelease(glCompSet * s, int x, int y); - extern void glcompsetUpdateBorder(glCompSet * s, int w, int h); - extern int glcompsetNextGroupId(glCompSet * s); - extern int glcompsetGetGroupId(glCompSet * s); - extern void glCompDrawBegin(void); - extern void glCompDrawEnd(void); - extern void glCompSetAddObj(glCompSet * s, glCompObj * obj); - glCompObj *glCompGetObjByMouse(glCompSet * s, glCompMouse * m, - int onlyClickable); - extern void glCompGetObjectType(glCompObj * p); -/* - change all components's fonts in s - to sourcefont -*/ -/* void change_fonts(glCompSet * s,const texFont_t* sourcefont); */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glcomptextpng.c b/internal/ccall/glcomp/glcomptextpng.c deleted file mode 100644 index 82093cb..0000000 --- a/internal/ccall/glcomp/glcomptextpng.c +++ /dev/null @@ -1,149 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcompfont.h" -#include "memory.h" -#include -#include - -unsigned char *glCompLoadPng (char *filename, int *imageWidth, int *imageHeight) -{ - cairo_surface_t *surface; - cairo_format_t format; - int w, h; - unsigned char *d; - surface = NULL; - - surface = cairo_image_surface_create_from_png(filename); - if (!surface) return 0; - w = cairo_image_surface_get_width(surface); - h = cairo_image_surface_get_height(surface); - *imageWidth = w; - *imageHeight = h; - format = cairo_image_surface_get_format(surface); - d = cairo_image_surface_get_data(surface); - return d; -} - -#if 0 - -unsigned char *load_raw(char *filename, int width, int height) -{ - unsigned char *data; - FILE *file; - // allocate buffer - data = N_NEW(width * height * 3, unsigned char); - // open and read texture data - file = fopen(filename, "rb"); - fread(data, width * height * 3, 1, file); - fclose (file); - return data; -} - -unsigned char *load_png2(char *file_name, int *imageWidth, - int *imageHeight) -{ - unsigned char *imageData = NULL; - unsigned char header[8]; - int i, ii, b0, b1, b2, b3, pixeloffset; - long int c; - png_structp png_ptr; - png_infop info_ptr; - png_infop end_info; - png_bytepp row_pointers; //actual image data - int is_png = 0; - FILE *fp = fopen(file_name, "rb"); - if (!fp) { - return (unsigned char *) 0; - } - fread(header, 1, 8, fp); - is_png = !png_sig_cmp(header, 0, 8); - if (!is_png) { - fclose (fp); - printf("glcomp error:file is not a valid PNG file\n"); - return (unsigned char *) 0; - } - - png_ptr = png_create_read_struct - (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - fclose (fp); - printf("glcomp error:file can not be read\n"); - return (unsigned char *) 0; - } - - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - png_destroy_read_struct(&png_ptr, - (png_infopp) NULL, (png_infopp) NULL); - fclose (fp); - printf("glcomp error:PNG file header is corrupted\n"); - return (unsigned char *) 0; - } - - end_info = png_create_info_struct(png_ptr); - if (!end_info) { - printf("glcomp error:PNG file header is corrupted\n"); - fclose (fp); - png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); - return (unsigned char *) 0; - } - - - png_init_io(png_ptr, fp); - - png_set_sig_bytes(png_ptr, 8); //pass signature bytes - png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); //read real image data - - row_pointers = png_malloc(png_ptr, - info_ptr->height * sizeof(png_bytepp)); - row_pointers = png_get_rows(png_ptr, info_ptr); - *imageWidth = info_ptr->width; - *imageHeight = info_ptr->height; - imageData = N_NEW(info_ptr->height * info_ptr->width, unsigned char); - c = 0; - //decide what pixel offset to use, ro - pixeloffset = png_get_rowbytes(png_ptr, info_ptr) / info_ptr->width; - - b0 = -1; - b1 = -1; - b2 = -1; - b3 = -1; - - for (i = 0; i < (int) info_ptr->height; i++) { - for (ii = 0; ii < (int) png_get_rowbytes(png_ptr, info_ptr); - ii = ii + pixeloffset) { - imageData[c] = row_pointers[info_ptr->height - i - 1][ii]; - if ((b0 != row_pointers[info_ptr->height - i - 1][ii]) - || (b1 != row_pointers[info_ptr->height - i - 1][ii + 1]) - || (b2 != row_pointers[info_ptr->height - i - 1][ii + 2]) - || (b3 != - row_pointers[info_ptr->height - i - 1][ii + 3])) { - b0 = row_pointers[info_ptr->height - i - 1][ii]; - b1 = row_pointers[info_ptr->height - i - 1][ii + 1]; - b2 = row_pointers[info_ptr->height - i - 1][ii + 2]; - b3 = row_pointers[info_ptr->height - i - 1][ii + 3]; - } - c++; - } - } - //cleaning libpng mess - png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); - png_free(png_ptr, row_pointers); - - fclose (fp); - return imageData; -} -#endif - - diff --git a/internal/ccall/glcomp/glcomptextpng.h b/internal/ccall/glcomp/glcomptextpng.h deleted file mode 100644 index 04926b8..0000000 --- a/internal/ccall/glcomp/glcomptextpng.h +++ /dev/null @@ -1,14 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -unsigned char *glCompLoadPng (char *filename, int *imageWidth, int *imageHeight); diff --git a/internal/ccall/glcomp/glcomptexture.c b/internal/ccall/glcomp/glcomptexture.c deleted file mode 100644 index ba1c8f5..0000000 --- a/internal/ccall/glcomp/glcomptexture.c +++ /dev/null @@ -1,171 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glcomptexture.h" -#include "glpangofont.h" - -#include "memory.h" - -#if 0 -void glCompSetRemoveTexLabel(glCompSet * s, glCompFont * t) -{ -} -#endif - -static glCompTex *glCompSetAddNewTexture(glCompSet * s, int width, - int height, unsigned char *data, - int is2D,int fs) -{ - int Er, offset, ind; - glCompTex *t; - unsigned char *tarData; - unsigned char *srcData; - - if (!data) - return NULL; - - Er = 0; - t = NEW(glCompTex); - if (!is2D) { /*use opengl texture */ - glEnable(GL_TEXTURE_2D); - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glGenTextures(1, &t->id); //get next id - if (t->id < 0) /*for some opengl based error , texture couldnt be created */ - Er = 1; - else { - glBindTexture(GL_TEXTURE_2D, t->id); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, data); - glDisable(GL_TEXTURE_2D); - } - } - if (is2D && !Er) { - t->data = N_NEW(4 * width * height, unsigned char); - offset = 4; //RGBA mod,TO DO implement other modes - /*data upside down because of pango gl coord system */ - for (ind = 0; ind < height; ind++) { - srcData = data + (height - 1 - ind) * offset * width; - tarData = t->data + ind * offset * width; - memcpy(tarData, srcData, 4 * width); - } - } - - if (Er) { - free(data); - free(t); - return NULL; - } - t->userCount = 1; - t->width = (GLfloat) width; - t->height = (GLfloat) height; - if(s) - { - s->textureCount++; - s->textures = - realloc(s->textures, s->textureCount * sizeof(glCompTex *)); - s->textures[s->textureCount - 1] = t; - } - return t; - - -} - -glCompTex *glCompSetAddNewTexImage(glCompSet * s, int width, int height, - unsigned char *data, int is2D) -{ - - glCompTex *t; - if (!data) - return NULL; - t = glCompSetAddNewTexture(s, width, height, data, is2D,-1); - if (!t) - return NULL; - t->type = glTexImage; - return t; - -} - - - - -glCompTex *glCompSetAddNewTexLabel(glCompSet * s, char *def, int fs, - char *text, int is2D) -{ - int ind, Er, width, height; -// int ind2=0; - glCompTex *t; - cairo_surface_t *surface = NULL; - unsigned char *data; - data = (unsigned char *) 0; - Er = 0; - if (!def) - return NULL; - /*first check if the same label with same font def created before - if it was , return its id - */ - for (ind = 0; ind < s->textureCount; ind++) { - if (s->textures[ind]->type == glTexLabel) { - if ((strcmp(def, s->textures[ind]->def) == 0) - && (s->textures[ind]->type == glTexLabel) - && (strcmp(text, s->textures[ind]->text) == 0) - && (s->textures[ind]->fontSize==fs)) { - s->textures[ind]->userCount++; - return s->textures[ind]; - } - } - } - - - data = glCompCreatePangoTexture(def, fs, text, surface, &width, &height); - if (!data) /*pango error , */ - Er = 1; - t = glCompSetAddNewTexture(s, width, height, data, is2D,fs); - if (!t) - Er = 1; - cairo_surface_destroy(surface); - - if (Er) { - free(data); - free(t); - return NULL; - } - - t->def = strdup(def); - t->text = strdup(text); - t->type = glTexLabel; - return t; -} - -void glCompDeleteTexture(glCompTex * t) -{ - if (!t) - return; - t->userCount--; - if (!t->userCount) { - if (t->data) - free(t->data); - if (t->def) - free(t->def); - if (t->text) - free(t->text); - free(t); - } -} diff --git a/internal/ccall/glcomp/glcomptexture.h b/internal/ccall/glcomp/glcomptexture.h deleted file mode 100644 index 4e0cbe1..0000000 --- a/internal/ccall/glcomp/glcomptexture.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/*Open GL texture handling and storing mechanism - includes glPanel,glCompButton,glCompCustomButton,clCompLabel,glCompStyle -*/ - -#ifndef glCompFontURE_H -#define glCompFontURE_H - -#ifdef WIN32 -#include "windows.h" -#endif -#include -#include -#include -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - extern glCompTex *glCompSetAddNewTexImage(glCompSet * s, int width, - int height, - unsigned char *data, - int is2D); - extern glCompTex *glCompSetAddNewTexLabel(glCompSet * s, char *def, - int fs, char *text, - int is2D); - - extern void glCompDeleteTexture(glCompTex * t); -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glpangofont.c b/internal/ccall/glcomp/glpangofont.c deleted file mode 100644 index d76a8ff..0000000 --- a/internal/ccall/glcomp/glpangofont.c +++ /dev/null @@ -1,199 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glpangofont.h" - -#define DEFAULT_FONT_FAMILY "Arial" -#define DEFAULT_FONT_SIZE 32 -#define ANTIALIAS - -static int file_exists(const char *filename) -{ - FILE *file; - if ((file = fopen(filename, "r"))) { - fclose(file); - return 1; - } - return 0; -} - -static PangoLayout *get_pango_layout(char *markup_text, - char *fontdescription, int fontsize, - double *width, double *height) -{ - PangoFontDescription *desc; - PangoFontMap *fontmap; - PangoContext *context; - PangoLayout *layout; - int pango_width, pango_height; - char *text; - PangoAttrList *attr_list; - cairo_font_options_t *options; - fontmap = pango_cairo_font_map_get_default(); - context = - pango_cairo_font_map_create_context(PANGO_CAIRO_FONT_MAP(fontmap)); - options = cairo_font_options_create(); - - cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_GRAY); - - cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_FULL); - cairo_font_options_set_hint_metrics(options, CAIRO_HINT_METRICS_ON); - cairo_font_options_set_subpixel_order(options, - CAIRO_SUBPIXEL_ORDER_BGR); -// pango_cairo_context_set_font_options(context, options); - - desc = pango_font_description_from_string(fontdescription); -// pango_font_description_set_family(desc, "CENTAUR.TTF"); - pango_font_description_set_size(desc, (gint) (fontsize * PANGO_SCALE)); - -// pango_font_description_set_style (desc,PANGO_STYLE_ITALIC); - - if (!pango_parse_markup - (markup_text, -1, '\0', &attr_list, &text, NULL, NULL)) - return (PangoLayout *) 0; - layout = pango_layout_new(context); - pango_layout_set_text(layout, text, -1); - pango_layout_set_font_description(layout, desc); - pango_layout_set_attributes(layout, attr_list); - pango_font_description_free(desc); - pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER); - - if (width || height) - pango_layout_get_size(layout, &pango_width, &pango_height); - - if (width) - *width = (double) pango_width / PANGO_SCALE; - - if (height) - *height = (double) pango_height / PANGO_SCALE; - - return layout; -} - -static cairo_status_t -writer(void *closure, const unsigned char *data, unsigned int length) -{ - if (length == fwrite(data, 1, length, (FILE *) closure)) { - return CAIRO_STATUS_SUCCESS; - } - - return CAIRO_STATUS_WRITE_ERROR; -} - -int glCompCreateFontFile(char *fontdescription, int fs, char *fontfile, - float gw, float gh) -{ - - char buf[] = " "; - int ncolumns = 16; - int counter = 0; - int X = 0; - int Y = 0; - cairo_t *cr; - cairo_surface_t *surface; - PangoLayout *layout; - double width, height; - FILE *output_file; - int c; - int return_value = -1; - - if (file_exists(fontfile)) //checking if font file has already been created - return 0; - //create the right size canvas for character set - surface = - cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - (int) ((float) ncolumns * gw), - (int) (gh * (float) ncolumns)); - cr = cairo_create(surface); - //draw a rectangle with same size of canvas - cairo_rectangle(cr, 0, 0, (float) ncolumns * gw, - gh * (float) ncolumns); - //fill rectangle with black - cairo_set_source_rgb(cr, 0, 0, 0); - cairo_fill(cr); - //set pen color to white - cairo_set_source_rgb(cr, 1, 1, 1); - - for (c = 0; c < 256; c++) { - counter++; - if ((c != 38) && (c != 60) && (c != 128) && (c < 129)) - buf[0] = c; - else - buf[0] = ' '; - cairo_move_to(cr, X, Y); - layout = - get_pango_layout(buf, fontdescription, fs, &width, &height); - pango_cairo_show_layout(cr, layout); - X = X + (int) gw; - if (counter == ncolumns) { - X = 0; - Y = Y + (int) gh; - counter = 0; - } - } - - output_file = fopen(fontfile, "wb+"); - if (output_file) { - cairo_surface_write_to_png_stream(surface, writer, output_file); - return_value = 0; - } - fclose(output_file); - g_object_unref(layout); - cairo_destroy(cr); - cairo_surface_destroy(surface); - return return_value; -} - - -unsigned char *glCompCreatePangoTexture(char *fontdescription, int fontsize, - char *txt, cairo_surface_t * surface, - int *w, int *h) -{ - -// char buf[] = " "; -// int ncolumns = 16; -// int counter = 0; -// int X = 0; -// int Y = 0; - cairo_t *cr; - PangoLayout *layout; - double width, height; - - layout = - get_pango_layout(txt, fontdescription, fontsize, &width, &height); - //create the right size canvas for character set - surface = - cairo_image_surface_create(CAIRO_FORMAT_ARGB32, (int) width, - (int) height); -// surface =cairo_image_surface_create(CAIRO_FORMAT_A8,(int)width,(int)height); - - cr = cairo_create(surface); - //draw a rectangle with same size of canvas -// cairo_rectangle(cr, 5, 5, width*1.8,height*1.8); - //fill rectangle with black -// cairo_set_source_rgba(cr, 0.5, 0.5, 0.5,0.3); -// cairo_fill(cr); - //set pen color to white - cairo_set_source_rgba(cr, 1, 1, 1, 1); - //draw the text - pango_cairo_show_layout(cr, layout); - - - - *w = (int) width; - *h = (int) height; - g_object_unref(layout); - cairo_destroy(cr); - - return cairo_image_surface_get_data(surface); -} diff --git a/internal/ccall/glcomp/glpangofont.h b/internal/ccall/glcomp/glpangofont.h deleted file mode 100644 index 0780e9e..0000000 --- a/internal/ccall/glcomp/glpangofont.h +++ /dev/null @@ -1,36 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GLPANGOFONT_H -#define GLPANGOFONT_H -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -//creates a font file with given name and font description -//returns non-zero if fails - unsigned char *glCompCreatePangoTexture(char *fontdescription, - int fontsize, char *txt, - cairo_surface_t * surface, int *w, - int *h); - int glCompCreateFontFile(char *fontdescription, int fs, char *fontfile, - float gw, float gh); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/glcomp/glutils.c b/internal/ccall/glcomp/glutils.c deleted file mode 100644 index acac20d..0000000 --- a/internal/ccall/glcomp/glutils.c +++ /dev/null @@ -1,743 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "glutils.h" -#include "stdlib.h" -#include "string.h" -#include "glcompdefs.h" -/* #include "glexpose.h" */ - -/* at given depth value, tranforms 2d Window location to 3d gl coords*/ -int GetFixedOGLPos(int x, int y, float kts, GLfloat * X, GLfloat * Y, - GLfloat * Z) -{ - GLdouble wwinX; - GLdouble wwinY; - GLdouble wwinZ; - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - GLdouble posX, posY, posZ; - - glColor4f((GLfloat) 0, (GLfloat) 0, (GLfloat) 0, (GLfloat) 0.001); - glBegin(GL_POINTS); - glVertex3f((GLfloat) - 100.00, (GLfloat) - 100.00, (GLfloat) 1.00); - glEnd(); - - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - gluProject(-100.0, -100.0, 1.00, modelview, projection, viewport, - &wwinX, &wwinY, &wwinZ); - - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX, - &posY, &posZ); - *X = (GLfloat) posX; - *Y = (GLfloat) posY; - *Z = (GLfloat) posZ; - - return 1; - -} - -/*transforms 2d windows location to 3d gl coords but depth is calculated unlike the previous function*/ -int GetOGLPosRef(int x, int y, float *X, float *Y, float *Z) -{ - - GLdouble wwinX; - GLdouble wwinY; - GLdouble wwinZ; - GLdouble posX, posY, posZ; - - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - //glTranslatef (0.0,0.0,0.0); - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - - //draw a point to a not important location to get window coordinates - glColor4f((GLfloat) 0, (GLfloat) 0, (GLfloat) 0, (GLfloat) 0.001); - - glBegin(GL_POINTS); - glVertex3f(-100.00, -100.00, 0.00); - glEnd(); - gluProject(-100.0, -100.0, 0.00, modelview, projection, viewport, - &wwinX, &wwinY, &wwinZ); - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX, - &posY, &posZ); - - *X = (float) posX; - *Y = (float) posY; - *Z = (float) posZ; -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -// printf("==>(%d,%d,%d) -> (%f,%f,%f)\n",x,y,wwinZ,*X,*Y,*Z); - - - return 1; - -} - - -float GetOGLDistance(int l) -{ - - int x, y; - GLdouble wwinX; - GLdouble wwinY; - GLdouble wwinZ; - GLdouble posX, posY, posZ; - GLdouble posXX, posYY, posZZ; - - - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - - - - - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - - //draw a point to a not important location to get window coordinates - glColor4f((GLfloat) 0, (GLfloat) 0, (GLfloat) 0, (GLfloat) 0.001); - - glBegin(GL_POINTS); - glVertex3f(10.00, 10.00, 1.00); - glEnd(); - gluProject(10.0, 10.0, 1.00, modelview, projection, viewport, &wwinX, - &wwinY, &wwinZ); - x = 50; - y = 50; - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX, - &posY, &posZ); - x = x + l; - y = 50; - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, - &posXX, &posYY, &posZZ); -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - return ((float) (posXX - posX)); - -} - -/* - functions def: returns opengl coordinates of firt hit object by using screen coordinates - x,y; 2D screen coordiantes (usually received from mouse events - X,Y,Z; pointers to coordinates values to be calculated - return value: no return value - - -*/ - -void to3D(int x, int y, GLfloat * X, GLfloat * Y, GLfloat * Z) -{ - - int const WIDTH = 20; - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - GLfloat winZ[400]; - GLdouble posX, posY, posZ; - int idx; - static float comp; - - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - - winX = (float) x; - winY = (float) viewport[3] - (float) y; - - glReadPixels(x - WIDTH / 2, (int) winY - WIDTH / 2, WIDTH, WIDTH, - GL_DEPTH_COMPONENT, GL_FLOAT, &winZ); - comp = -9999999; - for (idx = 0; idx < WIDTH * WIDTH; idx++) { -// printf ("Z value:%f ",winZ[idx]); - if ((winZ[idx] > comp) && (winZ[idx] < 1)) - comp = winZ[idx]; - } -// printf ("\n"); - - gluUnProject(winX, winY, comp, modelview, projection, viewport, &posX, - &posY, &posZ); - - *X = (GLfloat) posX; - *Y = (GLfloat) posY; - *Z = (GLfloat) posZ; - return; - - - - - -} - - -int GetFixedOGLPoslocal(int x, int y, GLfloat * X, GLfloat * Y, - GLfloat * Z) -{ - GLdouble wwinX; - GLdouble wwinY; - GLdouble wwinZ; - - GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY; - GLdouble posX, posY, posZ; - - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); - glGetIntegerv(GL_VIEWPORT, viewport); - - - - glColor4f((GLfloat) 0, (GLfloat) 0, (GLfloat) 0, (GLfloat) 0.001); - glBegin(GL_POINTS); - glVertex3f(10.00, 10.00, 0.00); - glEnd(); - - gluProject(10.0, 10.0, 1.00, modelview, projection, viewport, &wwinX, - &wwinY, &wwinZ); - - winX = (float) x; - winY = (float) viewport[3] - (float) y; - gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX, - &posY, &posZ); - *X = (GLfloat) posX; - *Y = (GLfloat) posY; - *Z = (GLfloat) posZ; - -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - return 1; - -} -#if 0 -void linear_interpolate(float x1, float y1, float x2, float y2, float x3, - float *y3) -{ - - float a, b; - a = (y1 - y2) / (x1 - x2); - b = y1 - a * x1; - *y3 = a * x3 + b; -} - -int glreversecamera(ViewInfo * view) -{ - - glLoadIdentity(); - if (view->active_camera == -1) { - gluLookAt(view->panx, view->pany, 20, view->panx, - view->pany, 0.0, 0.0, 1.0, 0.0); - glScalef(1 * view->zoom * -1, 1 * view->zoom * -1, - 1 * view->zoom * -1); - } else { - glScalef(1 * view->cameras[view->active_camera]->r, - 1 * view->cameras[view->active_camera]->r, - 1 * view->cameras[view->active_camera]->r); - - } - - return 1; -} - -#endif -#include - - - -#if 0 -static glCompPoint add(glCompPoint p, glCompPoint q) -{ - p.x += q.x; - p.y += q.y; - p.z += q.z; - return p; -} -#endif - -static glCompPoint sub(glCompPoint p, glCompPoint q) -{ - p.x -= q.x; - p.y -= q.y; - p.z -= q.z; - return p; -} - -static double dot(glCompPoint p, glCompPoint q) -{ - return (p.x * q.x + p.y * q.y + p.z * q.z); -} - -static double len(glCompPoint p) -{ - return sqrt(dot(p, p)); -} - -#if 0 -static glCompPoint scale(double d, glCompPoint p) -{ - p.x *= (float) d; - p.y *= (float) d; - p.z *= (float) d; - return p; -} -#endif - -static glCompPoint blend(glCompPoint p, glCompPoint q, float m) -{ - glCompPoint r; - - r.x = p.x + m * (q.x - p.x); - r.y = p.y + m * (q.y - p.y); - r.z = p.z + m * (q.z - p.z); - return r; -} - -static double dist(glCompPoint p, glCompPoint q) -{ - return (len(sub(p, q))); -} - -#if 0 -static glCompPoint normalize(glCompPoint p) -{ - double d = len(p); - - return scale(1 / d, p); -} - -static glCompPoint intersect(line l, plane J) -{ - double t = -(J.d + dot(l.u, J.N)) / dot(l.v, J.N); - return (add(l.u, scale(t, l.v))); -} - -/* - * Given a line l determined by two points a and b, and a 3rd point p, - * return the distance between the point and the line - */ -double point_to_line_dist(glCompPoint p, glCompPoint a, glCompPoint b) -{ - line l; - plane J; - glCompPoint q; - - l.u = a; - l.v = normalize(sub(b, a)); - - J.N = l.v; - J.d = -dot(p, l.v); - - q = intersect(l, J); - - return (dist(p, q)); -} -#endif - - -/* - * Given a line segment determined by two points a and b, and a 3rd point p, - * return the distance between the point and the segment. - * If the perpendicular from p to the line a-b is outside of the segment, - * return the distance to the closer of a or b. - */ -double point_to_lineseg_dist(glCompPoint p, glCompPoint a, glCompPoint b) -{ - float U; - glCompPoint q; - glCompPoint ba = sub(b, a); - glCompPoint pa = sub(p, a); - - U = (float) (dot(pa, ba) / dot(ba, ba)); - - if (U > 1) - q = b; - else if (U < 0) - q = a; - else - q = blend(a, b, U); - - return dist(p, q); - -} - -#if 0 -/* - Calculates the parameters of a plane via given 3 points on it -*/ - -void make_plane(glCompPoint a, glCompPoint b, glCompPoint c, plane * P) -{ - P->N.x = a.y * (b.z - c.z) + b.y * (c.z - a.z) + c.y * (a.z - b.z); //+ - P->N.y = a.z * (b.x - c.x) + b.z * (c.x - a.x) + c.z * (a.x - b.x); //+ - P->N.z = a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y); //+ - P->d = - (a.x * (b.y * c.z - c.y * b.z) + b.x * (c.y * a.z - a.y * c.z) + - c.x * (a.y * b.z - b.y * a.z)) * -1; -} -#endif -void replacestr(char *source, char **target) -{ - - if (*target) - free(*target); - *target = strdup(source); -} - -#if 0 -/* - move a point on the great circle of it (spherical) - -*/ - -#define G_PI 3.1415926535897932384626433832795028841971693993751 -#define DEG2RAD G_PI/180 -int rot_spherex(plane J, float tet, glCompPoint P, glCompPoint * P2) -{ - if (tet > 0) { - tet = 5; - tet = (float) DEG2RAD *tet; - P2->x = - (float) (J.N.x * J.N.x + - (float) cos(tet) * (1 - J.N.x * J.N.x)) * P.x + - (J.N.x * J.N.y * (1 - (float) cos(tet)) - - J.N.z * (float) sin(tet)) - + (J.N.z * J.N.x * (1 - (float) cos(tet)) + - J.N.y * (float) sin(tet)) * P.z; - P2->y = - (float) (J.N.x * J.N.y * (1 - (float) cos(tet)) + - J.N.z * (float) sin(tet)) * P.x + (J.N.y * J.N.y + - (float) cos(tet) * - (1 - - J.N.y * J.N.y)) * - P.y + (J.N.y * J.N.z * (1 - (float) cos(tet)) - - J.N.x * (float) sin(tet)) * P.z; - P2->z = - (float) (J.N.z * J.N.x * (1 - (float) cos(tet)) - - J.N.y * (float) sin(tet)) * P.x + - (J.N.y * J.N.z * (1 - (float) cos(tet)) - + J.N.x * (float) sin(tet)) * P.y + (J.N.z * J.N.z + - (float) cos(tet) * (1 - - J.N. - z * - J.N. - z)) * - P.z; - return 1; - } else - return 0; - -} -#endif - -void glCompSelectionBox(glCompSet * s) -{ - static GLfloat x, y, w, h; -/* if (( h < 0) || (w < 0)) - { - glEnable(GL_LINE_STIPPLE); - glLineStipple(1, 15); - }*/ - - x = s->mouse.pos.x; - y = s->mouse.pos.y; - w = s->mouse.dragX; - h = s->mouse.dragY; - printf("%f %f %f %f \n", x, y, w, h); - glColor4f(1, 1, 1, 1); -/* glBegin(GL_POLYGON); - glVertex2f(x,y); - glVertex2f(x, y+h); - glVertex2f(x-w, y+h); - glVertex2f(x-w, y); - glVertex2f(x-w, y); - - glEnd();*/ - - glBegin(GL_POLYGON); - glVertex2f(0, 0); - glVertex2f(250, 0); - glVertex2f(250, 250); - glVertex2f(0, 250); - glVertex2f(0, 0); - - glEnd(); - - - glDisable(GL_LINE_STIPPLE); - - - -} - - - - - -void glCompCalcWidget(glCompCommon * parent, glCompCommon * child, - glCompCommon * ref) -{ - /*check alignments first , alignments overrides anchors */ - GLfloat borderWidth; - ref->height = child->height; - ref->width = child->width; - if(!parent) - { - child->refPos.x = child->pos.x; - child->refPos.y = child->pos.y; - return; - } - if (parent->borderType == glBorderNone) - borderWidth = 0; - else - borderWidth = parent->borderWidth; - if (child->align != glAlignNone) //if alignment, make sure width and height is no greater than parent - { - if (child->width > parent->width) - ref->width = parent->width - (float) 2.0 *borderWidth; - if (child->height > parent->height) - ref->height = parent->height - (float) 2.0 *borderWidth;; - - } - - ref->pos.x = parent->refPos.x + ref->pos.x + borderWidth; - ref->pos.y = parent->refPos.y + ref->pos.y + borderWidth; - - - switch (child->align) { - case glAlignLeft: - ref->pos.x = parent->refPos.x + borderWidth; - ref->pos.y = parent->refPos.y + borderWidth; - ref->height = parent->height - 2 * borderWidth; - break; - case glAlignRight: - ref->pos.x = - parent->refPos.x + parent->width - child->width - borderWidth; - ref->pos.y = parent->refPos.y + borderWidth; - ref->height = parent->height - 2 * borderWidth; - break; - - case glAlignTop: - ref->pos.y = - parent->refPos.y + parent->height - child->height - - borderWidth; - ref->pos.x = parent->refPos.x; - ref->width = parent->width - 2 * borderWidth; - break; - - case glAlignBottom: - ref->pos.y = parent->refPos.y + borderWidth; - ref->pos.x = parent->refPos.x + borderWidth; - ref->width = parent->width - 2 * borderWidth; - break; - case glAlignParent: - ref->pos.y = parent->refPos.y + borderWidth; - ref->pos.x = parent->refPos.x + borderWidth;; - ref->width = parent->width - 2 * borderWidth;; - ref->height = parent->height - 2 * borderWidth; - break; - case glAlignCenter: - case glAlignNone: - break; - } - if (child->align == glAlignNone) // No alignment , chekc anchors - { - ref->pos.x = parent->refPos.x + child->pos.x + borderWidth; - ref->pos.y = parent->refPos.y + child->pos.y + borderWidth; - - if (child->anchor.leftAnchor) - ref->pos.x = - parent->refPos.x + child->anchor.left + borderWidth; - if (child->anchor.bottomAnchor) - ref->pos.y = - parent->refPos.y + child->anchor.bottom + borderWidth; - - if (child->anchor.topAnchor) - ref->height = - parent->refPos.y + parent->height - ref->pos.y - - child->anchor.top - borderWidth; - if (child->anchor.rightAnchor) - ref->width = - parent->refPos.x + parent->width - ref->pos.x - - child->anchor.right - borderWidth; - } - child->refPos.x = ref->pos.x; - child->refPos.y = ref->pos.y; - child->width = ref->width; - child->height = ref->height; -} - -#if 0 -// compiler reports this function is not used - -static void glCompVertex(glCompPoint * p) -{ - glVertex3f(p->x, p->y, p->z); -} -#endif - -static void glCompQuadVertex(glCompPoint * p0, glCompPoint * p1, - glCompPoint * p2, glCompPoint * p3) -{ - glVertex3f(p0->x, p0->y, p0->z); - glVertex3f(p1->x, p1->y, p1->z); - glVertex3f(p2->x, p2->y, p2->z); - glVertex3f(p3->x, p3->y, p3->z); -} - -void glCompSetColor(glCompColor * c) -{ - glColor4f(c->R, c->G, c->B, c->A); -} - -void glCompDrawRectangle(glCompRect * r) -{ - glBegin(GL_QUADS); - glVertex3f(r->pos.x, r->pos.y, r->pos.z); - glVertex3f(r->pos.x + r->w, r->pos.y, r->pos.z); - glVertex3f(r->pos.x + r->w, r->pos.y + r->h, r->pos.z); - glVertex3f(r->pos.x, r->pos.y + r->h, r->pos.z); - glEnd(); -} -void glCompDrawRectPrism(glCompPoint * p, GLfloat w, GLfloat h, GLfloat b, - GLfloat d, glCompColor * c, int bumped) -{ - static GLfloat color_fac; - static glCompPoint A, B, C, D, E, F, G, H; - GLfloat dim = 1.00; - if (!bumped) { - color_fac = (GLfloat) 1.3; - b = b - 2; - dim = 0.5; - } else - color_fac = (GLfloat) 1 / (GLfloat) 1.3; - - - A.x = p->x; - A.y = p->y; - A.z = p->z; - B.x = p->x + w; - B.y = p->y; - B.z = p->z; - C.x = p->x + w; - C.y = p->y + h; - C.z = p->z; - D.x = p->x; - D.y = p->y + h; - D.z = p->z; - G.x = p->x + b; - G.y = p->y + b; - G.z = p->z + d; - H.x = p->x + w - b; - H.y = p->y + b; - H.z = p->z + d; - E.x = p->x + b; - E.y = p->y + h - b; - E.z = p->z + d; - F.x = p->x + w - b; - F.y = p->y + h - b; - F.z = p->z + d; - glBegin(GL_QUADS); - glColor4f(c->R * dim, c->G * dim, c->B * dim, c->A); - glCompQuadVertex(&G, &H, &F, &E); - - glColor4f(c->R * color_fac * dim, c->G * color_fac * dim, - c->B * color_fac * dim, c->A); - glCompQuadVertex(&A, &B, &H, &G); - glCompQuadVertex(&B, &H, &F, &C); - - glColor4f(c->R / color_fac * dim, c->G / color_fac * dim, - c->B / color_fac * dim, c->A); - glCompQuadVertex(&A, &G, &E, &D); - glCompQuadVertex(&E, &F, &C, &D); - glEnd(); - -} - -void copy_glcomp_color(glCompColor * source, glCompColor * target) -{ - target->R = source->R; - target->G = source->G; - target->B = source->B; - target->A = source->A; - -} - -#if 0 -static double area2(glCompPoint * p1p, glCompPoint * p2p, glCompPoint * p3p) -{ - double d; - - d = ((p1p->y - p2p->y) * (p3p->x - p2p->x)) - - ((p3p->y - p2p->y) * (p1p->x - p2p->x)); - return d; -} - - -enum {ISCCW, ISON, ISCW}; /* counterclockwise; collinear; clockwise */ -static int sideOf (glCompPoint * p1p, glCompPoint * p2p, glCompPoint * p3p) { - double d = area2 (p1p,p2p,p3p); - if (d < 0) return ISCCW; - else if (d > 0) return ISCW; - else return ISON; -} - -int lines_intersect (glCompPoint* a, glCompPoint* b, glCompPoint* c, glCompPoint* d) -{ - return ((sideOf(a,b,c) != sideOf(a,b,d)) && (sideOf(c,d,a) != sideOf(c,d,b))); -} -#endif -GLfloat distBetweenPts(glCompPoint A,glCompPoint B,float R) -{ - GLfloat rv=0; - rv=(A.x-B.x)*(A.x-B.x) + (A.y-B.y)*(A.y-B.y) +(A.z-B.z)*(A.z-B.z); - rv=sqrt(rv); - if (rv <=R) - return 0; - return rv; -} - -int is_point_in_rectangle(float X, float Y, float RX, float RY, float RW,float RH) -{ - if ((X >= RX) && (X <= (RX + RW)) && (Y >= RY) && (Y <= (RY + RH))) - return 1; - else - return 0; -} - - - - - - diff --git a/internal/ccall/glcomp/glutils.h b/internal/ccall/glcomp/glutils.h deleted file mode 100644 index 93ed697..0000000 --- a/internal/ccall/glcomp/glutils.h +++ /dev/null @@ -1,69 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GLUTILS_H -#define GLUTILS_H -#ifdef WIN32 -#include "windows.h" -#endif -#include -#include -#include "glcompdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct { - glCompPoint u, v; - } line; - typedef struct { - glCompPoint N; /* normal */ - double d; /* offset */ - } plane; - - - int GetFixedOGLPos(int, int, float, GLfloat *, GLfloat *, GLfloat * Z); - int GetOGLPosRef(int x, int y, float *X, float *Y, float *Z); - float GetOGLDistance(int l); - int GetFixedOGLPoslocal(int x, int y, GLfloat * X, GLfloat * Y, - GLfloat * Z); - void to3D(int x, int y, GLfloat * X, GLfloat * Y, GLfloat * Z); - double point_to_lineseg_dist(glCompPoint p, glCompPoint a, glCompPoint b); -#if 0 - void linear_interpolate(float, float, float, float, float, float *); - double point_to_line_dist(glCompPoint p, glCompPoint u, glCompPoint v); - int rot_spherex(plane J, float tet, glCompPoint P, glCompPoint * P2); - void make_plane(glCompPoint a, glCompPoint b, glCompPoint c, plane * P); - int lines_intersect (glCompPoint* a, glCompPoint* b, glCompPoint* c, glCompPoint* d); -#endif - void replacestr(char *source, char **target); - extern void glCompCalcWidget(glCompCommon * parent, - glCompCommon * child, glCompCommon * ref); - extern void glCompDrawRectangle(glCompRect * r); - extern void glCompDrawRectPrism(glCompPoint * p, GLfloat w, GLfloat h, - GLfloat b, GLfloat d, glCompColor * c, - int bumped); - extern void copy_glcomp_color(glCompColor * source, - glCompColor * target); - extern void glCompSetColor(glCompColor * c); - - void glCompSelectionBox(glCompSet * s); - extern GLfloat distBetweenPts(glCompPoint A,glCompPoint B,float R); - extern int is_point_in_rectangle(float X, float Y, float RX, float RY, float RW,float RH); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/gvc.c b/internal/ccall/gvc.c deleted file mode 100644 index 1e84b1c..0000000 --- a/internal/ccall/gvc.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "gvc/gvc.c" -#include "gvc/gvconfig.c" -#include "gvc/gvcontext.c" -#include "gvc/gvdevice.c" -#include "gvc/gvevent.c" -#include "gvc/gvjobs.c" -#include "gvc/gvlayout.c" -#include "gvc/gvloadimage.c" -#include "gvc/gvplugin.c" -#include "gvc/gvrender.c" -#include "gvc/gvtextlayout.c" -#include "gvc/gvtool_tred.c" -#include "gvc/gvusershape.c" diff --git a/internal/ccall/gvc.go b/internal/ccall/gvc.go deleted file mode 100644 index 1a2ed45..0000000 --- a/internal/ccall/gvc.go +++ /dev/null @@ -1,801 +0,0 @@ -package ccall - -/* -#cgo CFLAGS: -DGVLIBDIR=graphviz -#cgo CFLAGS: -Icdt -#cgo CFLAGS: -Icommon -#cgo CFLAGS: -Igvc -#cgo CFLAGS: -Ipathplan -#cgo CFLAGS: -Icgraph -#cgo CFLAGS: -Ifdpgen -#cgo CFLAGS: -Isfdpgen -#cgo CFLAGS: -Ixdot -#cgo CFLAGS: -Ilabel -#cgo CFLAGS: -Ipack -#cgo CFLAGS: -Iortho -#cgo CFLAGS: -Iosage -#cgo CFLAGS: -Ineatogen -#cgo CFLAGS: -Isparse -#cgo CFLAGS: -Icircogen -#cgo CFLAGS: -Irbtree -#cgo CFLAGS: -Ipatchwork -#cgo CFLAGS: -Itwopigen -#cgo CFLAGS: -I../ -#cgo CFLAGS: -I../libltdl -#cgo CFLAGS: -Wno-unused-result -Wno-format -Wno-pointer-to-int-cast -Wno-attributes -#include "config.h" -#include "gvc.h" -#include "gvcjob.h" -#include "cgraph.h" -#include -*/ -import "C" -import ( - "io" - "os" - "reflect" - "unsafe" -) - -type GVC struct { - c *C.GVC_t -} - -type GVJ struct { - c *C.GVJ_t -} - -type GVCommon struct { - c *C.GVCOMMON_t -} - -type ObjState struct { - c *C.obj_state_t -} - -type Pointf struct { - X float64 - Y float64 -} - -type Point struct { - X int - Y int -} - -type Box struct { - LL Point - UR Point -} - -type Boxf struct { - LL Pointf - UR Pointf -} - -type GVColor struct { - R uint - G uint - B uint - A uint -} - -func ToGVC(c *C.GVC_t) *GVC { - if c == nil { - return nil - } - return &GVC{c: c} -} - -func (g *GVC) C() *C.GVC_t { - if g == nil { - return nil - } - return g.c -} - -func ToGVJ(c *C.GVJ_t) *GVJ { - if c == nil { - return nil - } - return &GVJ{c: c} -} - -func (g *GVJ) C() *C.GVJ_t { - if g == nil { - return nil - } - return g.c -} - -func ToGVCommon(c *C.GVCOMMON_t) *GVCommon { - if c == nil { - return nil - } - return &GVCommon{c: c} -} - -func ToObjState(c *C.obj_state_t) *ObjState { - if c == nil { - return nil - } - return &ObjState{c: c} -} - -func ToPointf(c C.pointf) Pointf { - return Pointf{X: float64(c.x), Y: float64(c.y)} -} - -func ToPointsf(c *C.pointf, n C.int) []Pointf { - var p []C.pointf - v := (*reflect.SliceHeader)(unsafe.Pointer(&p)) - v.Cap = int(n) - v.Len = int(n) - v.Data = uintptr(unsafe.Pointer(c)) - points := make([]Pointf, 0, int(n)) - for _, point := range p { - points = append(points, ToPointf(point)) - } - return points -} - -func ToPoint(c C.point) Point { - return Point{X: int(c.x), Y: int(c.y)} -} - -func ToBoxf(c C.boxf) Boxf { - return Boxf{ - LL: ToPointf(c.LL), - UR: ToPointf(c.UR), - } -} - -func ToBox(c C.box) Box { - return Box{ - LL: ToPoint(c.LL), - UR: ToPoint(c.UR), - } -} - -func ToGVColor(c C.gvcolor_t) GVColor { - var rgba []byte - p := (*reflect.SliceHeader)(unsafe.Pointer(&rgba)) - p.Cap = 4 - p.Len = 4 - p.Data = uintptr(unsafe.Pointer(&c.u)) - return GVColor{ - R: uint(rgba[0]), - G: uint(rgba[1]), - B: uint(rgba[2]), - A: uint(rgba[3]), - } -} - -func (g *ObjState) Parent() *ObjState { - v := g.c.parent - if v == nil { - return nil - } - return &ObjState{c: v} -} - -type ObjType int - -const ( - ROOTGRAPH_OBJTYPE ObjType = iota - CLUSTER_OBJTYPE - NODE_OBJTYPE - EDGE_OBJTYPE -) - -func (g *ObjState) Type() ObjType { - return ObjType(g.c._type) -} - -func (g *ObjState) Graph() *Agraph { - v := (*C.Agraph_t)(unsafe.Pointer(&g.c.u)) - if v == nil { - return nil - } - return &Agraph{c: v} -} - -func (g *ObjState) SubGraph() *Agraph { - v := (*C.Agraph_t)(unsafe.Pointer(&g.c.u)) - if v == nil { - return nil - } - return &Agraph{c: v} -} - -func (g *ObjState) Node() *Agnode { - v := (*C.Agnode_t)(unsafe.Pointer(&g.c.u)) - if v == nil { - return nil - } - return &Agnode{c: v} -} - -func (g *ObjState) Edge() *Agedge { - v := (*C.Agedge_t)(unsafe.Pointer(&g.c.u)) - if v == nil { - return nil - } - return &Agedge{c: v} -} - -type EmitState int - -const ( - EMIT_GDRAW EmitState = iota - EMIT_CDRAW - EMIT_TDRAW - EMIT_HDRAW - EMIT_GLABEL - EMIT_CLABEL - EMIT_TLABEL - EMIT_HLABEL - EMIT_NDRAW - EMIT_EDRAW - EMIT_NLABEL - EMIT_ELABEL -) - -func (g *ObjState) EmitState() EmitState { - return EmitState(g.c.emit_state) -} - -func (g *ObjState) PenColor() GVColor { - return ToGVColor(g.c.pencolor) -} - -func (g *ObjState) FillColor() GVColor { - return ToGVColor(g.c.fillcolor) -} - -func (g *ObjState) StopColor() GVColor { - return ToGVColor(g.c.stopcolor) -} - -func (g *ObjState) GradientAngle() int { - return int(g.c.gradient_angle) -} - -func (g *ObjState) GradientFrac() float32 { - return float32(g.c.gradient_frac) -} - -type PenType int - -const ( - PEN_NONE PenType = iota - PEN_DASHED - PEN_DOTTED - PEN_SOLID -) - -type FillType int - -const ( - FILL_NONE FillType = iota - FILL_SOLID - FILL_LINEAR - FILL_RADIAL -) - -func (g *ObjState) Pen() PenType { - return PenType(g.c.pen) -} - -func (g *ObjState) Fill() FillType { - return FillType(g.c.fill) -} - -func (g *ObjState) PenWidth() float64 { - return float64(g.c.penwidth) -} - -func (g *ObjState) RawStyle() []string { - return []string{} -} - -func (g *ObjState) Z() float64 { - return float64(g.c.z) -} - -func (g *ObjState) TailZ() float64 { - return float64(g.c.tail_z) -} - -func (g *ObjState) HeadZ() float64 { - return float64(g.c.head_z) -} - -func (g *ObjState) Label() string { - return C.GoString(g.c.label) -} - -func (g *ObjState) XLabel() string { - return C.GoString(g.c.xlabel) -} - -func (g *ObjState) TailLabel() string { - return C.GoString(g.c.taillabel) -} - -func (g *ObjState) HeadLabel() string { - return C.GoString(g.c.headlabel) -} - -func (g *ObjState) URL() string { - return C.GoString(g.c.url) -} - -func (g *ObjState) ID() string { - return C.GoString(g.c.id) -} - -func (g *ObjState) LabelURL() string { - return C.GoString(g.c.labelurl) -} - -func (g *ObjState) TailURL() string { - return C.GoString(g.c.tailurl) -} - -func (g *ObjState) HeadURL() string { - return C.GoString(g.c.headurl) -} - -func (g *ObjState) Tooltip() string { - return C.GoString(g.c.tooltip) -} - -func (g *ObjState) LabelTooltip() string { - return C.GoString(g.c.labeltooltip) -} - -func (g *ObjState) TailTooltip() string { - return C.GoString(g.c.tailtooltip) -} - -func (g *ObjState) HeadTooltip() string { - return C.GoString(g.c.headtooltip) -} - -func (g *ObjState) Target() string { - return C.GoString(g.c.target) -} - -func (g *ObjState) LabelTarget() string { - return C.GoString(g.c.labeltarget) -} - -func (g *ObjState) TailTarget() string { - return C.GoString(g.c.tailtarget) -} - -func (g *ObjState) HeadTarget() string { - return C.GoString(g.c.headtarget) -} - -type MapShape int - -const ( - MAP_RECTANGLE MapShape = iota - MAP_CIRCLE - MAP_POLYGON -) - -func (g *ObjState) URLMapShape() MapShape { - return MapShape(g.c.url_map_shape) -} - -func (g *ObjState) URLMapN() int { - return int(g.c.url_map_n) -} - -func (g *ObjState) URLMapP() []Pointf { - return ToPointsf(g.c.url_map_p, g.c.url_map_n) -} - -func (g *ObjState) URLBsplinemapPolyN() int { - return int(g.c.url_bsplinemap_poly_n) -} - -func (g *ObjState) URLBsplinemapN() []int { - var p []C.int - v := (*reflect.SliceHeader)(unsafe.Pointer(&p)) - v.Cap = int(g.c.url_bsplinemap_poly_n) - v.Len = int(g.c.url_bsplinemap_poly_n) - v.Data = uintptr(unsafe.Pointer(g.c.url_bsplinemap_n)) - n := make([]int, 0, int(g.c.url_bsplinemap_poly_n)) - for _, pp := range p { - n = append(n, int(pp)) - } - return n -} - -func (g *ObjState) URLBsplinemapP() []Pointf { - return ToPointsf(g.c.url_bsplinemap_p, g.c.url_bsplinemap_poly_n) -} - -func (g *ObjState) TailEndURLMapN() int { - return int(g.c.tailendurl_map_n) -} - -func (g *ObjState) TailEndURLMapP() []Pointf { - return ToPointsf(g.c.tailendurl_map_p, g.c.tailendurl_map_n) -} - -func (g *ObjState) HeadEndURLMapN() int { - return int(g.c.headendurl_map_n) -} - -func (g *ObjState) HeadEndURLMapP() []Pointf { - return ToPointsf(g.c.headendurl_map_p, g.c.headendurl_map_n) -} - -func (g *GVJ) GVC() *GVC { - return ToGVC(g.c.gvc) -} - -func (g *GVJ) Next() *GVJ { - return ToGVJ(g.c.next) -} - -func (g *GVJ) NextActive() *GVJ { - return ToGVJ(g.c.next_active) -} - -func (g *GVJ) Common() *GVCommon { - return ToGVCommon(g.c.common) -} - -func (g *GVJ) Obj() *ObjState { - return ToObjState(g.c.obj) -} - -func (g *GVJ) InputFilename() string { - return C.GoString(g.c.input_filename) -} - -func (g *GVJ) GraphIndex() int { - return int(g.c.graph_index) -} - -func (g *GVJ) LayoutType() string { - return C.GoString(g.c.layout_type) -} - -func (g *GVJ) OutputFilename() string { - return C.GoString(g.c.output_filename) -} - -func (g *GVJ) OutputFile() *os.File { - fd := C.fileno(g.c.output_file) - return os.NewFile(uintptr(fd), g.OutputFilename()) -} - -func (g *GVJ) OutputData() []byte { - if g.c.output_data == nil { - return nil - } - return []byte(C.GoString(g.c.output_data)) -} - -func (g *GVJ) SetOutputData(v []byte) { - length := len(v) - g.c.output_data = (*C.char)(C.realloc(unsafe.Pointer(g.c.output_data), C.size_t(length))) - header := (*reflect.SliceHeader)(unsafe.Pointer(&v)) - C.memcpy(unsafe.Pointer(g.c.output_data), unsafe.Pointer(header.Data), C.size_t(length)) - g.c.output_data_position = C.uint(length) -} - -func (g *GVJ) OutputDataAllocated() uint { - return uint(g.c.output_data_allocated) -} - -func (g *GVJ) OutputDataPosition() uint { - return uint(g.c.output_data_position) -} - -func (g *GVJ) OutputLangname() string { - return C.GoString(g.c.output_langname) -} - -func (g *GVJ) OutputLang() int { - return int(g.c.output_lang) -} - -func (g *GVJ) DeviceDPI() Pointf { - return ToPointf(g.c.device_dpi) -} - -func (g *GVJ) DeviceSetsDPI() bool { - return g.c.device_sets_dpi == 1 -} - -func (g *GVJ) Display() unsafe.Pointer { - return g.c.display -} - -func (g *GVJ) Screen() int { - return int(g.c.screen) -} - -func (g *GVJ) Context() unsafe.Pointer { - return g.c.context -} - -func (g *GVJ) ExternalContext() bool { - return g.c.external_context == 1 -} - -func (g *GVJ) ImageData() []byte { - return []byte(C.GoString(g.c.imagedata)) -} - -func (g *GVJ) Flags() int { - return int(g.c.flags) -} - -func (g *GVJ) NumLayers() int { - return int(g.c.numLayers) -} - -func (g *GVJ) LayerNum() int { - return int(g.c.layerNum) -} - -func (g *GVJ) PagesArraySize() Point { - return ToPoint(g.c.pagesArraySize) -} - -func (g *GVJ) PagesArrayFirst() Point { - return ToPoint(g.c.pagesArrayFirst) -} - -func (g *GVJ) PagesArrayMajor() Point { - return ToPoint(g.c.pagesArrayMajor) -} - -func (g *GVJ) PagesArrayMinor() Point { - return ToPoint(g.c.pagesArrayMinor) -} - -func (g *GVJ) PagesArrayElem() Point { - return ToPoint(g.c.pagesArrayElem) -} - -func (g *GVJ) NumPages() int { - return int(g.c.numPages) -} - -func (g *GVJ) BB() Boxf { - return ToBoxf(g.c.bb) -} - -func (g *GVJ) Pad() Pointf { - return ToPointf(g.c.pad) -} - -func (g *GVJ) Clip() Boxf { - return ToBoxf(g.c.clip) -} - -func (g *GVJ) PageBox() Boxf { - return ToBoxf(g.c.pageBox) -} - -func (g *GVJ) PageSize() Pointf { - return ToPointf(g.c.pageSize) -} - -func (g *GVJ) Focus() Pointf { - return ToPointf(g.c.focus) -} - -func (g *GVJ) Zoom() float64 { - return float64(g.c.zoom) -} - -func (g *GVJ) Rotation() int { - return int(g.c.rotation) -} - -func (g *GVJ) View() Pointf { - return ToPointf(g.c.view) -} - -func (g *GVJ) CanvasBox() Boxf { - return ToBoxf(g.c.canvasBox) -} - -func (g *GVJ) Margin() Pointf { - return ToPointf(g.c.margin) -} - -func (g *GVJ) DPI() Pointf { - return ToPointf(g.c.dpi) -} - -func (g *GVJ) Width() uint { - return uint(g.c.width) -} - -func (g *GVJ) Height() uint { - return uint(g.c.height) -} - -func (g *GVJ) PageBoundingBox() Box { - return ToBox(g.c.pageBoundingBox) -} - -func (g *GVJ) BoundingBox() Box { - return ToBox(g.c.boundingBox) -} - -func (g *GVJ) Scale() Pointf { - return ToPointf(g.c.scale) -} - -func (g *GVJ) Translation() Pointf { - return ToPointf(g.c.translation) -} - -func (g *GVJ) DevScale() Pointf { - return ToPointf(g.c.devscale) -} - -func (g *GVJ) FitMode() bool { - return g.c.fit_mode == 1 -} - -func (g *GVJ) NeedsRefresh() bool { - return g.c.needs_refresh == 1 -} - -func (g *GVJ) Click() bool { - return g.c.click == 1 -} - -func (g *GVJ) HasGrown() bool { - return g.c.has_grown == 1 -} - -func (g *GVJ) HasBeenRendered() bool { - return g.c.has_been_rendered == 1 -} - -func (g *GVJ) Button() uint { - return uint(g.c.button) -} - -func (g *GVJ) Pointer() Pointf { - return ToPointf(g.c.pointer) -} - -func (g *GVJ) OldPointer() Pointf { - return ToPointf(g.c.oldpointer) -} - -func (g *GVJ) CurrentObj() unsafe.Pointer { - return g.c.current_obj -} - -func (g *GVJ) SelectedObj() unsafe.Pointer { - return g.c.selected_obj -} - -func (g *GVJ) ActiveTooltip() []byte { - return []byte(C.GoString(g.c.active_tooltip)) -} - -func (g *GVJ) SelectedHref() []byte { - return []byte(C.GoString(g.c.selected_href)) -} - -func (g *GVJ) Window() unsafe.Pointer { - return g.c.window -} - -func (g *GVJ) NumKeys() int { - return int(g.c.numkeys) -} - -func (g *GVJ) KeyCodes() unsafe.Pointer { - return g.c.keycodes -} - -func GvContext() *GVC { - v := C.gvContext() - if v == nil { - return nil - } - return &GVC{c: v} -} - -func GvcVersion(gvc *GVC) string { - return C.GoString(C.gvcVersion(gvc.C())) -} - -func GvcBuildDate(gvc *GVC) string { - return C.GoString(C.gvcBuildDate(gvc.C())) -} - -func GvNextInputGraph(gvc *GVC) *Agraph { - return ToAgraph(C.gvNextInputGraph(gvc.C())) -} - -func GvPluginsGraph(gvc *GVC) *Agraph { - return ToAgraph(C.gvPluginsGraph(gvc.C())) -} - -func GvLayout(gvc *GVC, g *Agraph, engine string) error { - C.gvLayout(gvc.C(), g.C(), C.CString(engine)) - return Aglasterr() -} - -func GvLayoutJobs(gvc *GVC, g *Agraph) error { - C.gvLayoutJobs(gvc.C(), g.C()) - return Aglasterr() -} - -func AttachAttrs(g *Agraph) { - C.attach_attrs(g.C()) -} - -func GvRenderData(gvc *GVC, g *Agraph, format string, w io.Writer) error { - var ( - buf *C.char - length C.uint - ) - C.gvRenderData(gvc.C(), g.C(), C.CString(format), &buf, &length) - if err := Aglasterr(); err != nil { - return err - } - defer C.gvFreeRenderData(buf) - var gobuf []byte - header := (*reflect.SliceHeader)(unsafe.Pointer(&gobuf)) - header.Cap = int(length) - header.Len = int(length) - header.Data = uintptr(unsafe.Pointer(buf)) - if _, err := w.Write(gobuf); err != nil { - return err - } - return nil -} - -func GvRenderFilename(gvc *GVC, g *Agraph, format, filename string) error { - C.gvRenderFilename(gvc.C(), g.C(), C.CString(format), C.CString(filename)) - return Aglasterr() -} - -func GvRenderContext(gvc *GVC, g *Agraph, format string, context unsafe.Pointer) error { - C.gvRenderContext(gvc.C(), g.C(), C.CString(format), context) - return Aglasterr() -} - -func GvRenderJobs(gvc *GVC, g *Agraph) error { - C.gvRenderJobs(gvc.C(), g.C()) - return Aglasterr() -} - -func GvFreeLayout(gvc *GVC, g *Agraph) error { - C.gvFreeLayout(gvc.C(), g.C()) - return Aglasterr() -} - -func GvFinalize(gvc *GVC) { - C.gvFinalize(gvc.C()) -} - -func GvFreeContext(gvc *GVC) error { - C.gvFreeContext(gvc.C()) - return Aglasterr() -} - -func GvToolTred(g *Agraph) int { - return int(C.gvToolTred(g.C())) -} diff --git a/internal/ccall/gvc/dummy.go b/internal/ccall/gvc/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/gvc/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/gvc/gvc.c b/internal/ccall/gvc/gvc.c deleted file mode 100644 index 8751271..0000000 --- a/internal/ccall/gvc/gvc.c +++ /dev/null @@ -1,256 +0,0 @@ - /* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvc.h" -#include "const.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" -#include "gvconfig.h" -#include "gvio.h" -#include - -#ifdef WIN32 /*dependencies*/ - #pragma comment( lib, "cgraph.lib" ) - #pragma comment( lib, "cdt.lib" ) - #pragma comment( lib, "ltdl.lib" ) - #pragma comment( lib, "xml2.lib" ) - #pragma comment( lib, "libexpat.lib" ) - #pragma comment( lib, "z.lib") - #pragma comment( lib, "rxspencer.lib") -#endif - - -GVC_t *gvContext(void) -{ - return gvContextPlugins(lt_preloaded_symbols, 1); - // GVC_t *gvc; - - //agattr(NULL, AGNODE, "label", NODENAME_ESC); - /* default to no builtins, demand loading enabled */ - //gvc = gvNEWcontext(NULL, TRUE); - //gvconfig(gvc, FALSE); /* configure for available plugins */ - //return gvc; -} - -GVC_t *gvContextPlugins(const lt_symlist_t *builtins, int demand_loading) -{ - GVC_t *gvc; - - agattr(NULL, AGNODE, "label", NODENAME_ESC); - gvc = gvNEWcontext(builtins, demand_loading); - gvconfig(gvc, FALSE); /* configure for available plugins */ - return gvc; -} - - - -/* gvLayout: - * Selects layout based on engine and binds it to gvc; - * does the layout and sets the graph's bbox. - * Return 0 on success. - */ -int gvLayout(GVC_t *gvc, graph_t *g, const char *engine) -{ - char buf[256]; - int rc; - - rc = gvlayout_select(gvc, engine); - if (rc == NO_SUPPORT) { - agerr (AGERR, "Layout type: \"%s\" not recognized. Use one of:%s\n", - engine, gvplugin_list(gvc, API_layout, engine)); - return -1; - } - - if (gvLayoutJobs(gvc, g) == -1) - return -1; - -/* set bb attribute for basic layout. - * doesn't yet include margins, scaling or page sizes because - * those depend on the renderer being used. */ - if (GD_drawing(g)->landscape) - sprintf(buf, "%d %d %d %d", - ROUND(GD_bb(g).LL.y), ROUND(GD_bb(g).LL.x), - ROUND(GD_bb(g).UR.y), ROUND(GD_bb(g).UR.x)); - else - sprintf(buf, "%d %d %d %d", - ROUND(GD_bb(g).LL.x), ROUND(GD_bb(g).LL.y), - ROUND(GD_bb(g).UR.x), ROUND(GD_bb(g).UR.y)); - agsafeset(g, "bb", buf, ""); - - return 0; -} - -/* Render layout in a specified format to an open FILE */ -int gvRender(GVC_t *gvc, graph_t *g, const char *format, FILE *out) -{ - int rc; - GVJ_t *job; - - g = g->root; - - /* create a job for the required format */ - rc = gvjobs_output_langname(gvc, format); - job = gvc->job; - if (rc == NO_SUPPORT) { - agerr (AGERR, "Format: \"%s\" not recognized. Use one of:%s\n", - format, gvplugin_list(gvc, API_device, format)); - return -1; - } - - job->output_lang = gvrender_select(job, job->output_langname); - if (!LAYOUT_DONE(g) && !(job->flags & LAYOUT_NOT_REQUIRED)) { - agerrorf( "Layout was not done\n"); - return -1; - } - job->output_file = out; - if (out == NULL) - job->flags |= OUTPUT_NOT_REQUIRED; - rc = gvRenderJobs(gvc, g); - gvrender_end_job(job); - gvjobs_delete(gvc); - - return rc; -} - -/* Render layout in a specified format to a file with the given name */ -int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *filename) -{ - int rc; - GVJ_t *job; - - g = g->root; - - /* create a job for the required format */ - rc = gvjobs_output_langname(gvc, format); - job = gvc->job; - if (rc == NO_SUPPORT) { - agerr(AGERR, "Format: \"%s\" not recognized. Use one of:%s\n", - format, gvplugin_list(gvc, API_device, format)); - return -1; - } - - job->output_lang = gvrender_select(job, job->output_langname); - if (!LAYOUT_DONE(g) && !(job->flags & LAYOUT_NOT_REQUIRED)) { - agerrorf( "Layout was not done\n"); - return -1; - } - gvjobs_output_filename(gvc, filename); - rc = gvRenderJobs(gvc, g); - gvrender_end_job(job); - gvdevice_finalize(job); - gvjobs_delete(gvc); - - return rc; -} - -/* Render layout in a specified format to an external context */ -int gvRenderContext(GVC_t *gvc, graph_t *g, const char *format, void *context) -{ - int rc; - GVJ_t *job; - - g = g->root; - - /* create a job for the required format */ - rc = gvjobs_output_langname(gvc, format); - job = gvc->job; - if (rc == NO_SUPPORT) { - agerr(AGERR, "Format: \"%s\" not recognized. Use one of:%s\n", - format, gvplugin_list(gvc, API_device, format)); - return -1; - } - - job->output_lang = gvrender_select(job, job->output_langname); - if (!LAYOUT_DONE(g) && !(job->flags & LAYOUT_NOT_REQUIRED)) { - agerrorf( "Layout was not done\n"); - return -1; - } - - job->context = context; - job->external_context = TRUE; - - rc = gvRenderJobs(gvc, g); - gvrender_end_job(job); - gvdevice_finalize(job); - gvjobs_delete(gvc); - - return rc; -} - -/* Render layout in a specified format to a malloc'ed string */ -int gvRenderData(GVC_t *gvc, graph_t *g, const char *format, char **result, unsigned int *length) -{ - int rc; - GVJ_t *job; - - g = g->root; - - /* create a job for the required format */ - rc = gvjobs_output_langname(gvc, format); - job = gvc->job; - if (rc == NO_SUPPORT) { - agerr(AGERR, "Format: \"%s\" not recognized. Use one of:%s\n", - format, gvplugin_list(gvc, API_device, format)); - return -1; - } - - job->output_lang = gvrender_select(job, job->output_langname); - if (!LAYOUT_DONE(g) && !(job->flags & LAYOUT_NOT_REQUIRED)) { - agerrorf( "Layout was not done\n"); - return -1; - } - -/* page size on Linux, Mac OS X and Windows */ -#define OUTPUT_DATA_INITIAL_ALLOCATION 4096 - - if(!result || !(*result = malloc(OUTPUT_DATA_INITIAL_ALLOCATION))) { - agerr(AGERR, "failure malloc'ing for result string"); - return -1; - } - - job->output_data = *result; - job->output_data_allocated = OUTPUT_DATA_INITIAL_ALLOCATION; - job->output_data_position = 0; - - rc = gvRenderJobs(gvc, g); - gvrender_end_job(job); - - if (rc == 0) { - *result = job->output_data; - *length = job->output_data_position; - } - gvjobs_delete(gvc); - - return rc; -} - -/* gvFreeRenderData: - * Utility routine to free memory allocated in gvRenderData, as the application code may use - * a different runtime library. - */ -void gvFreeRenderData (char* data) -{ - free (data); -} - -void gvAddLibrary(GVC_t *gvc, gvplugin_library_t *lib) -{ - gvconfig_plugin_install_from_library(gvc, NULL, lib); -} - -char **gvcInfo(GVC_t* gvc) { return gvc->common.info; } -char *gvcVersion(GVC_t* gvc) { return gvc->common.info[1]; } -char *gvcBuildDate(GVC_t* gvc) { return gvc->common.info[2]; } diff --git a/internal/ccall/gvc/gvc.h b/internal/ccall/gvc/gvc.h deleted file mode 100644 index bd65a36..0000000 --- a/internal/ccall/gvc/gvc.h +++ /dev/null @@ -1,127 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVC_H -#define GVC_H - -#include "types.h" -#include "gvplugin.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef GVDLL -#define extern __declspec(dllexport) -#else -#define extern -#endif - -/*visual studio*/ -#ifdef WIN32 -#ifndef GVC_EXPORTS -#undef extern -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - -#define LAYOUT_DONE(g) (agbindrec(g, "Agraphinfo_t", 0, TRUE) && GD_drawing(g)) - -/* misc */ -/* FIXME - this needs eliminating or renaming */ -extern void gvToggle(int); - -/* set up a graphviz context */ -extern GVC_t *gvNEWcontext(const lt_symlist_t *builtins, int demand_loading); - -/* set up a graphviz context - and init graph - retaining old API */ -extern GVC_t *gvContext(void); -/* set up a graphviz context - and init graph - with builtins */ -extern GVC_t *gvContextPlugins(const lt_symlist_t *builtins, int demand_loading); - -/* get information associated with a graphviz context */ -extern char **gvcInfo(GVC_t*); -extern char *gvcVersion(GVC_t*); -extern char *gvcBuildDate(GVC_t*); - -/* parse command line args - minimally argv[0] sets layout engine */ -extern int gvParseArgs(GVC_t *gvc, int argc, char **argv); -extern graph_t *gvNextInputGraph(GVC_t *gvc); -extern graph_t *gvPluginsGraph(GVC_t *gvc); - -/* Compute a layout using a specified engine */ -extern int gvLayout(GVC_t *gvc, graph_t *g, const char *engine); - -/* Compute a layout using layout engine from command line args */ -extern int gvLayoutJobs(GVC_t *gvc, graph_t *g); - -/* Render layout into string attributes of the graph */ -extern void attach_attrs(graph_t *g); - -/* Render layout in a specified format to an open FILE */ -extern int gvRender(GVC_t *gvc, graph_t *g, const char *format, FILE *out); - -/* Render layout in a specified format to a file with the given name */ -extern int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *filename); - -/* Render layout in a specified format to an external context */ -extern int gvRenderContext(GVC_t *gvc, graph_t *g, const char *format, void *context); - -/* Render layout in a specified format to a malloc'ed string */ -extern int gvRenderData(GVC_t *gvc, graph_t *g, const char *format, char **result, unsigned int *length); - -/* Free memory allocated and pointed to by *result in gvRenderData */ -extern void gvFreeRenderData (char* data); - -/* Render layout according to -T and -o options found by gvParseArgs */ -extern int gvRenderJobs(GVC_t *gvc, graph_t *g); - -/* Clean up layout data structures - layouts are not nestable (yet) */ -extern int gvFreeLayout(GVC_t *gvc, graph_t *g); - -/* Clean up graphviz context */ -extern void gvFinalize(GVC_t *gvc); -extern int gvFreeContext(GVC_t *gvc); - -/* Return list of plugins of type kind. - * kind would normally be "render" "layout" "textlayout" "device" "loadimage" - * The size of the list is stored in sz. - * The caller is responsible for freeing the storage. This involves - * freeing each item, then the list. - * Returns NULL on error, or if there are no plugins. - * In the former case, sz is unchanged; in the latter, sz = 0. - * - * At present, the str argument is unused, but may be used to modify - * the search as in gvplugin_list above. - */ -extern char** gvPluginList (GVC_t *gvc, const char* kind, int* sz, const char*); - -/** Add a library from your user application - * @param gvc Graphviz context to add library to - * @param lib library to add - */ -extern void gvAddLibrary(GVC_t *gvc, gvplugin_library_t *lib); - -/** Perform a Transitive Reduction on a graph - * @param g graph to be transformed. - */ -extern int gvToolTred(graph_t *g); - -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif /* GVC_H */ diff --git a/internal/ccall/gvc/gvcext.h b/internal/ccall/gvc/gvcext.h deleted file mode 100644 index 33225ca..0000000 --- a/internal/ccall/gvc/gvcext.h +++ /dev/null @@ -1,96 +0,0 @@ - -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Common header used by both clients and plugins */ - -#ifndef GVCEXT_H -#define GVCEXT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Define an apis array of name strings using an enumerated api_t as index. - * The enumerated type is defined here. The apis array is - * inititialized in gvplugin.c by redefining ELEM and reinvoking APIS. - */ -#define APIS ELEM(render) ELEM(layout) ELEM(textlayout) ELEM(device) ELEM(loadimage) - -/* - * Define api_t using names based on the plugin names with API_ prefixed. - */ -#define ELEM(x) API_##x, - typedef enum { APIS _DUMMY_ELEM_=0 } api_t; /* API_render, API_layout, ... */ - /* Stupid but true: The sole purpose of "_DUMMY_ELEM_=0" - * is to avoid a "," after the last element of the enum - * because some compilers when using "-pedantic" - * generate an error for about the dangling "," - * but only if this header is used from a .cpp file! - * Setting it to 0 makes sure that the enumeration - * does not define an extra value. (It does however - * define _DUMMY_ELEM_ as an enumeration symbol, - * but its value duplicates that of the first - * symbol in the enumeration - in this case "render".) - */ - - /* One could wonder why trailing "," in: - * int nums[]={1,2,3,}; - * is OK, but in: - * typedef enum {a,b,c,} abc_t; - * is not!!! - */ -#undef ELEM - - typedef struct GVJ_s GVJ_t; - typedef struct GVG_s GVG_t; - typedef struct GVC_s GVC_t; - - typedef struct { - const char *name; - void* address; - } lt_symlist_t; - - typedef struct gvplugin_available_s gvplugin_available_t; - -/*visual studio*/ -#ifdef WIN32 -#ifndef GVC_EXPORTS -__declspec(dllimport) lt_symlist_t lt_preloaded_symbols[PRLOADED_SYMBOL_N]; -#else -//__declspec(dllexport) lt_symlist_t lt_preloaded_symbols[]; -#if !defined(LTDL_H) -lt_symlist_t lt_preloaded_symbols[PRLOADED_SYMBOL_N]; -#endif -#endif -#endif -/*end visual studio*/ - -#ifndef WIN32 -#if defined(GVDLL) - __declspec(dllexport) lt_symlist_t lt_preloaded_symbols[PRLOADED_SYMBOL_N]; -#else -#if !defined(LTDL_H) - extern lt_symlist_t lt_preloaded_symbols[PRLOADED_SYMBOL_N]; -#endif -#endif -#endif - - -#ifdef __cplusplus -} -#endif - - - -#endif diff --git a/internal/ccall/gvc/gvcint.h b/internal/ccall/gvc/gvcint.h deleted file mode 100644 index 510819e..0000000 --- a/internal/ccall/gvc/gvcint.h +++ /dev/null @@ -1,158 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Common header used by both clients and plugins */ - -#ifndef GVCINT_H -#define GVCINT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "cdt.h" -#include "gvcommon.h" -#include "color.h" - - /* active plugin headers */ - typedef struct gvplugin_active_layout_s { - gvlayout_engine_t *engine; - int id; - gvlayout_features_t *features; - const char *type; - } gvplugin_active_layout_t; - - typedef struct gvplugin_active_textlayout_s { - gvtextlayout_engine_t *engine; - int id; - char *type; - } gvplugin_active_textlayout_t; - - typedef struct gvplugin_package_s gvplugin_package_t; - - struct gvplugin_package_s { - gvplugin_package_t *next; - char *path; - char *name; - }; - - struct gvplugin_available_s { - gvplugin_available_t *next; /* next plugin in linked list, or NULL */ - const char *typestr; /* type string, e.g. "png" or "ps" */ - int quality; /* Programmer assigned quality ranking within type (+ve or -ve int). - First implementation of type should be given "0" quality */ - gvplugin_package_t *package; /* details of library containing plugin */ - gvplugin_installed_t *typeptr; /* pointer to jumptable for plugin, - or NULL if not yet loaded */ - }; - - struct GVG_s { - GVC_t *gvc; /* parent gvc */ - GVG_t *next; /* next gvg in list */ - - char *input_filename; /* or NULL if stdin */ - int graph_index; /* index of graph within input_file */ - graph_t *g; - }; - -#define MAXNEST 4 - - struct GVC_s { - GVCOMMON_t common; - - char *config_path; - boolean config_found; - - /* gvParseArgs */ - char **input_filenames; /* null terminated array of input filenames */ - - /* gvNextInputGraph() */ - GVG_t *gvgs; /* linked list of graphs */ - GVG_t *gvg; /* current graph */ - - /* plugins */ -#define ELEM(x) +1 - /* APIS expands to "+1 +1 ... +1" to give the number of APIs */ - gvplugin_available_t *apis[ APIS ]; /* array of linked-list of plugins per api */ - gvplugin_available_t *api[ APIS ]; /* array of current plugins per api */ -#undef ELEM - gvplugin_package_t *packages; /* list of available packages */ - - /* externally provided write() displine */ - size_t (*write_fn) (GVJ_t *job, const char *s, size_t len); - - /* fonts and textlayout */ - Dtdisc_t textfont_disc; - Dt_t *textfont_dt; - gvplugin_active_textlayout_t textlayout; /* always use best avail for all jobs */ -// void (*free_layout) (void *layout); /* function for freeing layouts (mostly used by pango) */ - -/* FIXME - everything below should probably move to GVG_t */ - - /* gvrender_config() */ - GVJ_t *jobs; /* linked list of jobs */ - GVJ_t *job; /* current job */ - - graph_t *g; /* current graph */ - - /* gvrender_begin_job() */ - gvplugin_active_layout_t layout; - - char *graphname; /* name from graph */ - GVJ_t *active_jobs; /* linked list of active jobs */ - - /* pagination */ - char *pagedir; /* pagination order */ - pointf margin; /* margins in graph units */ - pointf pad; /* pad in graph units */ - pointf pageSize; /* pageSize in graph units, not including margins */ - point pb; /* page size - including margins (inches) */ - boxf bb; /* graph bb in graph units, not including margins */ - int rotation; /* rotation - 0 = portrait, 90 = landscape */ - boolean graph_sets_pad, graph_sets_margin, graph_sets_pageSize, graph_sets_rotation; - - /* layers */ - char *layerDelims; /* delimiters in layer names */ - char *layerListDelims; /* delimiters between layer ranges */ - char *layers; /* null delimited list of layer names */ - char **layerIDs; /* array of layer names */ - int numLayers; /* number of layers */ - int *layerlist; - - /* default font */ - char *defaultfontname; - double defaultfontsize; - - /* default line style */ - char **defaultlinestyle; - - /* render defaults set from graph */ - gvcolor_t bgcolor; /* background color */ - - /* whether to mangle font names (at least in SVG), usually false */ - int fontrenaming; - }; - -extern GVC_t* gvCloneGVC (GVC_t *); -extern void gvFreeCloneGVC (GVC_t *); - -#ifdef WIN32 -#define DIRSEP "\\" -#else -#define DIRSEP "/" -#endif - -#ifdef __cplusplus -} -#endif -#endif /* GVCINT_H */ diff --git a/internal/ccall/gvc/gvcjob.h b/internal/ccall/gvc/gvcjob.h deleted file mode 100644 index b7ebce2..0000000 --- a/internal/ccall/gvc/gvcjob.h +++ /dev/null @@ -1,377 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Common header used by both clients and plugins */ - -#ifndef GVCJOB_H -#define GVCJOB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "gvcommon.h" -#include "color.h" - -#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0])) - - typedef struct gvdevice_engine_s gvdevice_engine_t; - typedef struct gvformatter_engine_s gvformatter_engine_t; - typedef struct gvrender_engine_s gvrender_engine_t; - typedef struct gvlayout_engine_s gvlayout_engine_t; - typedef struct gvtextlayout_engine_s gvtextlayout_engine_t; - typedef struct gvloadimage_engine_s gvloadimage_engine_t; - - typedef enum { PEN_NONE, PEN_DASHED, PEN_DOTTED, PEN_SOLID } pen_type; - typedef enum { FILL_NONE, FILL_SOLID, FILL_LINEAR, FILL_RADIAL } fill_type; - typedef enum { FONT_REGULAR, FONT_BOLD, FONT_ITALIC } font_type; - typedef enum { LABEL_PLAIN, LABEL_HTML } label_type; - -#define PENWIDTH_NORMAL 1. -#define PENWIDTH_BOLD 2. - typedef enum { GVATTR_STRING, GVATTR_BOOL, GVATTR_COLOR } gvattr_t; - -/* The -T output formats listed below are examples only, they are not definitive or inclusive, - other outputs may use the flags now, or in the future - - Default emit order is breadth first graph walk order - EMIT_SORTED emits nodes before edges - EMIT_COLORS emits colors before nodes or edge -Tfig - EMIT_CLUSTERS_LAST emits cluster after nodes and edges - EMIT_PREORDER emit in preorder traversal ??? - EMIT_EDGE_SORTED emits edges before nodes - - GVDEVICE_DOES_PAGES provides pagination support -Tps - GVDEVICE_DOES_LAYERS provides support for layers -Tps - GVDEVICE_EVENTS supports mouse events -Tgtk, -Txlib - GVDEVICE_DOES_TRUECOLOR supports alpha channel -Tpng, -Tgtk, -Txlib - GVDEVICE_BINARY_FORMAT Suppresses \r\n substitution for linends - GVDEVICE_COMPRESSED_FORMAT controls libz compression - GVDEVICE_NO_WRITER used when gvdevice is not used because device uses its own writer, -Tming, devil outputs (FIXME seems to overlap OUTPUT_NOT_REQUIRED) - - GVRENDER_Y_GOES_DOWN device origin top left, y goes down, otherwise - device origin lower left, y goes up - GVRENDER_DOES_TRANSFORM device uses scale, translate, rotate to do its own - coordinate transformations, otherwise coordinates - are pre-transformed - GVRENDER_DOES_ARROWS renderer has its own idea of arrow shapes (deprecated) - GVRENDER_DOES_LABELS basically, maps don't need labels - GVRENDER_DOES_MAPS renderer encodes mapping information for mouse events -Tcmapx -Tsvg - GVRENDER_DOES_MAP_RECTANGLE supports a 2 coord rectngle optimization - GVRENDER_DOES_MAP_CIRCLE supports a 1 coord + radius circle optimization - GVRENDER_DOES_MAP_POLYGON supports polygons (basically, -Tsvg uses anchors, so doesn't need to support any map shapes) - GVRENDER_DOES_MAP_ELLIPSE supports a 2 coord ellipse optimization - GVRENDER_DOES_MAP_BSPLINE supports mapping of splines - GVRENDER_DOES_TOOLTIPS can represent tooltip info -Tcmapx, -Tsvg - GVRENDER_DOES_TARGETS can represent target info (open link in a new tab or window) - GVRENDER_DOES_Z render support 2.5D representation -Tvrml - GVRENDER_NO_WHITE_BG don't paint white background, assumes white paper -Tps - LAYOUT_NOT_REQUIRED don't perform layout -Tcanon - OUTPUT_NOT_REQUIRED don't use gvdevice for output (basically when agwrite() used instead) -Tcanon, -Txdot - */ - - -#define EMIT_SORTED (1<<0) -#define EMIT_COLORS (1<<1) -#define EMIT_CLUSTERS_LAST (1<<2) -#define EMIT_PREORDER (1<<3) -#define EMIT_EDGE_SORTED (1<<4) -#define GVDEVICE_DOES_PAGES (1<<5) -#define GVDEVICE_DOES_LAYERS (1<<6) -#define GVDEVICE_EVENTS (1<<7) -#define GVDEVICE_DOES_TRUECOLOR (1<<8) -#define GVDEVICE_BINARY_FORMAT (1<<9) -#define GVDEVICE_COMPRESSED_FORMAT (1<<10) -#define GVDEVICE_NO_WRITER (1<<11) -#define GVRENDER_Y_GOES_DOWN (1<<12) -#define GVRENDER_DOES_TRANSFORM (1<<13) -#define GVRENDER_DOES_ARROWS (1<<14) -#define GVRENDER_DOES_LABELS (1<<15) -#define GVRENDER_DOES_MAPS (1<<16) -#define GVRENDER_DOES_MAP_RECTANGLE (1<<17) -#define GVRENDER_DOES_MAP_CIRCLE (1<<18) -#define GVRENDER_DOES_MAP_POLYGON (1<<19) -#define GVRENDER_DOES_MAP_ELLIPSE (1<<20) -#define GVRENDER_DOES_MAP_BSPLINE (1<<21) -#define GVRENDER_DOES_TOOLTIPS (1<<22) -#define GVRENDER_DOES_TARGETS (1<<23) -#define GVRENDER_DOES_Z (1<<24) -#define GVRENDER_NO_WHITE_BG (1<<25) -#define LAYOUT_NOT_REQUIRED (1<<26) -#define OUTPUT_NOT_REQUIRED (1<<27) - - typedef struct { - int flags; - double default_pad; /* graph units */ - char **knowncolors; - int sz_knowncolors; - color_type_t color_type; - } gvrender_features_t; - - typedef struct { - int flags; - pointf default_margin; /* left/right, top/bottom - points */ - pointf default_pagesize;/* default page width, height - points */ - pointf default_dpi; - } gvdevice_features_t; - -#define LAYOUT_USES_RANKDIR (1<<0) - - typedef struct gvplugin_active_device_s { - gvdevice_engine_t *engine; - int id; - gvdevice_features_t *features; - const char *type; - } gvplugin_active_device_t; - - typedef struct gvplugin_active_render_s { - gvrender_engine_t *engine; - int id; - gvrender_features_t *features; - const char *type; - } gvplugin_active_render_t; - - typedef struct gvplugin_active_loadimage_t { - gvloadimage_engine_t *engine; - int id; - const char *type; - } gvplugin_active_loadimage_t; - - typedef struct gv_argvlist_s { - char **argv; - int argc; - int alloc; - } gv_argvlist_t; - - typedef struct gvdevice_callbacks_s { - void (*refresh) (GVJ_t * job); - void (*button_press) (GVJ_t * job, int button, pointf pointer); - void (*button_release) (GVJ_t * job, int button, pointf pointer); - void (*motion) (GVJ_t * job, pointf pointer); - void (*modify) (GVJ_t * job, const char *name, const char *value); - void (*del) (GVJ_t * job); /* can't use "delete" 'cos C++ stole it */ - void (*read) (GVJ_t * job, const char *filename, const char *layout); - void (*layout) (GVJ_t * job, const char *layout); - void (*render) (GVJ_t * job, const char *format, const char *filename); - } gvdevice_callbacks_t; - - typedef int (*gvevent_key_callback_t) (GVJ_t * job); - - typedef struct gvevent_key_binding_s { - char *keystring; - gvevent_key_callback_t callback; - } gvevent_key_binding_t; - - typedef enum {MAP_RECTANGLE, MAP_CIRCLE, MAP_POLYGON, } map_shape_t; - - typedef enum {ROOTGRAPH_OBJTYPE, CLUSTER_OBJTYPE, NODE_OBJTYPE, EDGE_OBJTYPE} obj_type; - - /* If this enum is changed, the implementation of xbuf and xbufs in - * gvrender_core_dot.c will probably need to be changed. - */ - typedef enum { - EMIT_GDRAW, EMIT_CDRAW, EMIT_TDRAW, EMIT_HDRAW, - EMIT_GLABEL, EMIT_CLABEL, EMIT_TLABEL, EMIT_HLABEL, - EMIT_NDRAW, EMIT_EDRAW, EMIT_NLABEL, EMIT_ELABEL, - } emit_state_t; - - typedef struct obj_state_s obj_state_t; - - struct obj_state_s { - obj_state_t *parent; - - obj_type type; - union { - graph_t *g; - graph_t *sg; - node_t *n; - edge_t *e; - } u; - - emit_state_t emit_state; - - gvcolor_t pencolor, fillcolor, stopcolor; - int gradient_angle; - float gradient_frac; - pen_type pen; - fill_type fill; - double penwidth; - char **rawstyle; - - double z, tail_z, head_z; /* z depths for 2.5D renderers such as vrml */ - - /* fully substituted text strings */ - char *label; - char *xlabel; - char *taillabel; - char *headlabel; - - char *url; /* if GVRENDER_DOES_MAPS */ - char *id; - char *labelurl; - char *tailurl; - char *headurl; - - char *tooltip; /* if GVRENDER_DOES_TOOLTIPS */ - char *labeltooltip; - char *tailtooltip; - char *headtooltip; - - char *target; /* if GVRENDER_DOES_TARGETS */ - char *labeltarget; - char *tailtarget; - char *headtarget; - - unsigned explicit_tooltip:1; - unsigned explicit_tailtooltip:1; - unsigned explicit_headtooltip:1; - unsigned explicit_labeltooltip:1; - unsigned explicit_tailtarget:1; - unsigned explicit_headtarget:1; - unsigned explicit_edgetarget:1; - unsigned explicit_tailurl:1; - unsigned explicit_headurl:1; - unsigned labeledgealigned:1; - - /* primary mapped region - node shape, edge labels */ - map_shape_t url_map_shape; - int url_map_n; /* number of points for url map if GVRENDER_DOES_MAPS */ - pointf *url_map_p; - - /* additonal mapped regions for edges */ - int url_bsplinemap_poly_n; /* number of polygons in url bspline map - if GVRENDER_DOES_MAPS && GVRENDER_DOES_MAP_BSPLINES */ - int *url_bsplinemap_n; /* array of url_bsplinemap_poly_n ints - of number of points in each polygon */ - pointf *url_bsplinemap_p; /* all the polygon points */ - - int tailendurl_map_n; /* tail end intersection with node */ - pointf *tailendurl_map_p; - - int headendurl_map_n; /* head end intersection with node */ - pointf *headendurl_map_p; - }; - -/* Note on units: - * points - a physical distance (1/72 inch) unaffected by zoom or dpi. - * graph units - related to physical distance by zoom. Equals points at zoom=1 - * device units - related to physical distance in points by dpi/72 - */ - - struct GVJ_s { - GVC_t *gvc; /* parent gvc */ - GVJ_t *next; /* linked list of jobs */ - GVJ_t *next_active; /* linked list of active jobs (e.g. multiple windows) */ - - GVCOMMON_t *common; - - obj_state_t *obj; /* objects can be nested (at least clusters can) - so keep object state on a stack */ - char *input_filename; - int graph_index; - - const char *layout_type; - - const char *output_filename; - FILE *output_file; - char *output_data; - unsigned int output_data_allocated; - unsigned int output_data_position; - - const char *output_langname; - int output_lang; - - gvplugin_active_render_t render; - gvplugin_active_device_t device; - gvplugin_active_loadimage_t loadimage; - gvdevice_callbacks_t *callbacks; - pointf device_dpi; - boolean device_sets_dpi; - - void *display; - int screen; - - void *context; /* gd or cairo surface */ - boolean external_context; /* context belongs to caller */ - char *imagedata; /* location of imagedata */ - - int flags; /* emit_graph flags */ - - int numLayers; /* number of layers */ - int layerNum; /* current layer - 1 based*/ - - point pagesArraySize; /* 2D size of page array */ - point pagesArrayFirst;/* 2D starting corner in */ - point pagesArrayMajor;/* 2D major increment */ - point pagesArrayMinor;/* 2D minor increment */ - point pagesArrayElem; /* 2D coord of current page - 0,0 based */ - int numPages; /* number of pages */ - - boxf bb; /* graph bb with padding - graph units */ - pointf pad; /* padding around bb - graph units */ - boxf clip; /* clip region in graph units */ - boxf pageBox; /* current page in graph units */ - pointf pageSize; /* page size in graph units */ - pointf focus; /* viewport focus - graph units */ - - double zoom; /* viewport zoom factor (points per graph unit) */ - int rotation; /* viewport rotation (degrees) 0=portrait, 90=landscape */ - - pointf view; /* viewport size - points */ - boxf canvasBox; /* viewport area - points */ - pointf margin; /* job-specific margin - points */ - - pointf dpi; /* device resolution device-units-per-inch */ - - unsigned int width; /* device width - device units */ - unsigned int height; /* device height - device units */ - box pageBoundingBox;/* rotated boundingBox - device units */ - box boundingBox; /* cumulative boundingBox over all pages - device units */ - - pointf scale; /* composite device to graph units (zoom and dpi) */ - pointf translation; /* composite translation */ - pointf devscale; /* composite device to points: dpi, y_goes_down */ - - boolean fit_mode, - needs_refresh, - click, - has_grown, - has_been_rendered; - - unsigned char button; /* active button */ - pointf pointer; /* pointer position in device units */ - pointf oldpointer; /* old pointer position in device units */ - - void *current_obj; /* graph object that pointer is in currently */ - - void *selected_obj; /* graph object that has been selected */ - /* (e.g. button 1 clicked on current obj) */ - char *active_tooltip; /* tooltip of active object - or NULL */ - char *selected_href; /* href of selected object - or NULL */ - gv_argvlist_t selected_obj_type_name; /* (e.g. "edge" "node3" "e" "->" "node5" "") */ - gv_argvlist_t selected_obj_attributes; /* attribute triplets: name, value, type */ - /* e.g. "color", "red", GVATTR_COLOR, - "style", "filled", GVATTR_BOOL, */ - - void *window; /* display-specific data for gvrender plugin */ - - /* keybindings for keyboard events */ - gvevent_key_binding_t *keybindings; - int numkeys; - void *keycodes; - }; - -#ifdef __cplusplus -} -#endif -#endif /* GVCJOB_H */ diff --git a/internal/ccall/gvc/gvcommon.h b/internal/ccall/gvc/gvcommon.h deleted file mode 100644 index 5271b04..0000000 --- a/internal/ccall/gvc/gvcommon.h +++ /dev/null @@ -1,40 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVCOMMON_H -#define GVCOMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct GVCOMMON_s { - char **info; - char *cmdname; - int verbose; - boolean config, auto_outfile_names; - void (*errorfn) (const char *fmt, ...); - const char **show_boxes; /* emit code for correct box coordinates */ - const char **lib; - - /* rendering state */ - int viewNum; /* current view - 1 based count of views, - all pages in all layers */ - const lt_symlist_t *builtins; - int demand_loading; - } GVCOMMON_t; - -#ifdef __cplusplus -} -#endif -#endif /* GVCOMMON_H */ diff --git a/internal/ccall/gvc/gvconfig.c b/internal/ccall/gvc/gvconfig.c deleted file mode 100644 index 997fffc..0000000 --- a/internal/ccall/gvc/gvconfig.c +++ /dev/null @@ -1,625 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvconfig.h" - -#include -#ifndef WIN32 -#include -#endif - -#ifdef ENABLE_LTDL -#include -#ifdef WIN32 -#include -#define GLOB_NOSPACE 1 /* Ran out of memory. */ -#define GLOB_ABORTED 2 /* Read error. */ -#define GLOB_NOMATCH 3 /* No matches found. */ -#define GLOB_NOSORT 4 -#define DMKEY "Software\\Microsoft" //key to look for library dir -typedef struct { - int gl_pathc; /* count of total paths so far */ - int gl_matchc; /* count of paths matching pattern */ - int gl_offs; /* reserved at beginning of gl_pathv */ - int gl_flags; /* returned flags */ - char **gl_pathv; /* list of paths matching pattern */ -} glob_t; -static void globfree (glob_t* pglob); -static int glob (GVC_t * gvc, char*, int, int (*errfunc)(const char *, int), glob_t*); -#else -#include -#endif -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#endif - -#ifdef __APPLE__ -#include -#endif - -#include "memory.h" -#include "const.h" -#include "types.h" - -#include "gvplugin.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" - -/* FIXME */ -extern Dt_t * textfont_dict_open(GVC_t *gvc); - -/* - A config for gvrender is a text file containing a - list of plugin librariess and their capabilities using a tcl-like - syntax - - Lines beginning with '#' are ignored as comments - - Blank lines are allowed and ignored. - - plugin_library_path packagename { - plugin_api { - plugin_type plugin_quality - ... - } - ... - ... - - e.g. - - /usr/lib/graphviz/libgvplugin_cairo.so cairo {renderer {x 0 png 10 ps -10}} - /usr/lib/graphviz/libgvplugin_gd.so gd {renderer {png 0 gif 0 jpg 0}} - - Internally the config is maintained as lists of plugin_types for each plugin_api. - If multiple plugins of the same type are found then the highest quality wins. - If equal quality then the last-one-installed wins (thus giving preference to - external plugins over internal builtins). - - */ - -static gvplugin_package_t * gvplugin_package_record(GVC_t * gvc, char *path, char *name) -{ - gvplugin_package_t *package = gmalloc(sizeof(gvplugin_package_t)); - package->path = (path) ? strdup(path) : NULL; - package->name = strdup(name); - package->next = gvc->packages; - gvc->packages = package; - return package; -} - -#ifdef ENABLE_LTDL -/* - separator - consume all non-token characters until next token. This includes: - comments: '#' ... '\n' - nesting: '{' - unnesting: '}' - whitespace: ' ','\t','\n' - - *nest is changed according to nesting/unnesting processed - */ -static void separator(int *nest, char **tokens) -{ - char c, *s; - - s = *tokens; - while ((c = *s)) { - /* #->eol = comment */ - if (c == '#') { - s++; - while ((c = *s)) { - s++; - if (c == '\n') - break; - } - continue; - } - if (c == '{') { - (*nest)++; - s++; - continue; - } - if (c == '}') { - (*nest)--; - s++; - continue; - } - if (c == ' ' || c == '\n' || c == '\t') { - s++; - continue; - } - break; - } - *tokens = s; -} - -/* - token - capture all characters until next separator, then consume separator, - return captured token, leave **tokens pointing to next token. - */ -static char *token(int *nest, char **tokens) -{ - char c, *s, *t; - - s = t = *tokens; - while ((c = *s)) { - if (c == '#' - || c == ' ' || c == '\t' || c == '\n' || c == '{' || c == '}') - break; - s++; - } - *tokens = s; - separator(nest, tokens); - *s = '\0'; - return t; -} - -static int gvconfig_plugin_install_from_config(GVC_t * gvc, char *s) -{ - char *path, *name, *api; - const char *type; - api_t gv_api; - int quality, rc; - int nest = 0; - gvplugin_package_t *package; - - separator(&nest, &s); - while (*s) { - path = token(&nest, &s); - if (nest == 0) - name = token(&nest, &s); - else - name = "x"; - package = gvplugin_package_record(gvc, path, name); - do { - api = token(&nest, &s); - gv_api = gvplugin_api(api); - do { - if (nest == 2) { - type = token(&nest, &s); - if (nest == 2) - quality = atoi(token(&nest, &s)); - else - quality = 0; - rc = gvplugin_install (gvc, gv_api, - type, quality, package, NULL); - if (!rc) { - agerr(AGERR, "config error: %s %s %s\n", path, api, type); - return 0; - } - } - } while (nest == 2); - } while (nest == 1); - } - return 1; -} -#endif - -void gvconfig_plugin_install_from_library(GVC_t * gvc, char *path, gvplugin_library_t *library) -{ - gvplugin_api_t *apis; - gvplugin_installed_t *types; - gvplugin_package_t *package; - int i; - - package = gvplugin_package_record(gvc, path, library->packagename); - for (apis = library->apis; (types = apis->types); apis++) { - for (i = 0; types[i].type; i++) { - gvplugin_install(gvc, apis->api, types[i].type, - types[i].quality, package, &types[i]); - } - } -} - -static void gvconfig_plugin_install_builtins(GVC_t * gvc) -{ - const lt_symlist_t *s; - const char *name; - - if (gvc->common.builtins == NULL) return; - - for (s = gvc->common.builtins; (name = s->name); s++) - if (name[0] == 'g' && strstr(name, "_LTX_library")) - gvconfig_plugin_install_from_library(gvc, NULL, - (gvplugin_library_t *)(s->address)); -} - -#ifdef ENABLE_LTDL -static void gvconfig_write_library_config(GVC_t *gvc, char *path, gvplugin_library_t *library, FILE *f) -{ - gvplugin_api_t *apis; - gvplugin_installed_t *types; - int i; - - fprintf(f, "%s %s {\n", path, library->packagename); - for (apis = library->apis; (types = apis->types); apis++) { - fprintf(f, "\t%s {\n", gvplugin_api_name(apis->api)); - for (i = 0; types[i].type; i++) { - /* verify that dependencies are available */ - if (! (gvplugin_load(gvc, apis->api, types[i].type))) - fprintf(f, "#FAILS"); - fprintf(f, "\t\t%s %d\n", types[i].type, types[i].quality); - } - fputs ("\t}\n", f); - } - fputs ("}\n", f); -} - -#define BSZ 1024 -#define DOTLIBS "/.libs" -#define STRLEN(s) (sizeof(s)-1) - -char * gvconfig_libdir(GVC_t * gvc) -{ - static char line[BSZ]; - static char *libdir; - static boolean dirShown = 0; - char *tmp; - - if (!libdir) { - libdir=getenv("GVBINDIR"); - if (!libdir) { -#ifdef WIN32 - int r; - char* s; - - MEMORY_BASIC_INFORMATION mbi; - if (VirtualQuery (&gvconfig_libdir, &mbi, sizeof(mbi)) == 0) { - agerr(AGERR,"failed to get handle for executable.\n"); - return 0; - } - r = GetModuleFileName ((HMODULE)mbi.AllocationBase, line, BSZ); - if (!r || (r == BSZ)) { - agerr(AGERR,"failed to get path for executable.\n"); - return 0; - } - s = strrchr(line,'\\'); - if (!s) { - agerr(AGERR,"no slash in path %s.\n", line); - return 0; - } - *s = '\0'; - libdir = line; -#else - libdir = "graphviz"; -#ifdef __APPLE__ - uint32_t i, c = _dyld_image_count(); - size_t len, ind; - const char* path; - for (i = 0; i < c; ++i) { - path = _dyld_get_image_name(i); - tmp = strstr(path, "/libgvc."); - if (tmp) { - if (tmp > path) { - /* Check for real /lib dir. Don't accept pre-install /.libs */ - char* s = tmp-1; - /* back up to previous slash (or head of string) */ - while ((*s != '/') && (s > path)) s--; - if (strncmp (s, DOTLIBS, STRLEN(DOTLIBS)) == 0) - continue; - } - - ind = tmp - path; /* byte offset */ - len = ind + sizeof("/graphviz"); - if (len < BSZ) - libdir = line; - else - libdir = gmalloc(len); - bcopy (path, libdir, ind); - /* plugins are in "graphviz" subdirectory */ - strcpy(libdir+ind, "/graphviz"); - break; - } - } -#else - FILE* f = fopen ("/proc/self/maps", "r"); - char* path; - if (f) { - while (!feof (f)) { - if (!fgets (line, sizeof (line), f)) - continue; - if (!strstr (line, " r-xp ")) - continue; - path = strchr (line, '/'); - if (!path) - continue; - tmp = strstr (path, "/libgvc."); - if (tmp) { - *tmp = 0; - /* Check for real /lib dir. Don't accept pre-install /.libs */ - if (strcmp(strrchr(path,'/'), "/.libs") == 0) - continue; - strcpy(line, path); /* use line buffer for result */ - strcat(line, "/graphviz"); /* plugins are in "graphviz" subdirectory */ - libdir = line; - break; - } - } - fclose (f); - } -#endif -#endif - } - } - if (gvc->common.verbose && !dirShown) { - fprintf (stderr, "libdir = \"%s\"\n", (libdir ? libdir : "")); - dirShown = 1; - } - return libdir; -} -#endif - -#ifdef ENABLE_LTDL -static void config_rescan(GVC_t *gvc, char *config_path) -{ - FILE *f = NULL; - glob_t globbuf; - char *config_glob, *config_re, *path, *libdir; - int i, rc, re_status; - gvplugin_library_t *library; - regex_t re; -#ifndef WIN32 - char *plugin_glob = "libgvplugin_*"; -#endif -#if defined(DARWIN_DYLIB) - char *plugin_re_beg = "[^0-9]\\."; - char *plugin_re_end = "\\.dylib$"; -#elif defined(__MINGW32__) - char *plugin_glob = "libgvplugin_*"; - char *plugin_re_beg = "[^0-9]-"; - char *plugin_re_end = "\\.dll$"; -#elif defined(__CYGWIN__) - plugin_glob = "cyggvplugin_*"; - char *plugin_re_beg = "[^0-9]-"; - char *plugin_re_end = "\\.dll$"; -#elif defined(WIN32) - char *plugin_glob = "gvplugin_*"; - char *plugin_re_beg = "[^0-9]"; - char *plugin_re_end = "\\.dll$"; -#elif ((defined(__hpux__) || defined(__hpux)) && !(defined(__ia64))) - char *plugin_re_beg = "\\.sl\\."; - char *plugin_re_end = "$"; -#else - /* Everyone else */ - char *plugin_re_beg = "\\.so\\."; - char *plugin_re_end= "$"; -#endif - - if (config_path) { - f = fopen(config_path,"w"); - if (!f) { - agerr(AGERR,"failed to open %s for write.\n", config_path); - exit(1); - } - - fprintf(f, "# This file was generated by \"dot -c\" at time of install.\n\n"); - fprintf(f, "# You may temporarily disable a plugin by removing or commenting out\n"); - fprintf(f, "# a line in this file, or you can modify its \"quality\" value to affect\n"); - fprintf(f, "# default plugin selection.\n\n"); - fprintf(f, "# Manual edits to this file **will be lost** on upgrade.\n\n"); - } - - libdir = gvconfig_libdir(gvc); - - config_re = gmalloc(strlen(plugin_re_beg) + 20 + strlen(plugin_re_end) + 1); - -#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) - sprintf(config_re,"%s%s", plugin_re_beg, plugin_re_end); -#elif defined(GVPLUGIN_VERSION) - sprintf(config_re,"%s%d%s", plugin_re_beg, GVPLUGIN_VERSION, plugin_re_end); -#else - sprintf(config_re,"%s[0-9]+%s", plugin_re_beg, plugin_re_end); -#endif - - if (regcomp(&re, config_re, REG_EXTENDED|REG_NOSUB) != 0) { - agerr(AGERR,"cannot compile regular expression %s", config_re); - } - - config_glob = gmalloc(strlen(libdir) + 1 + strlen(plugin_glob) + 1); - strcpy(config_glob, libdir); - strcat(config_glob, DIRSEP); - strcat(config_glob, plugin_glob); - - /* load all libraries even if can't save config */ - -#if defined(WIN32) - rc = glob(gvc, config_glob, GLOB_NOSORT, NULL, &globbuf); -#else - rc = glob(config_glob, GLOB_NOSORT, NULL, &globbuf); -#endif - if (rc == 0) { - for (i = 0; i < globbuf.gl_pathc; i++) { - re_status = regexec(&re, globbuf.gl_pathv[i], (size_t) 0, NULL, 0); - if (re_status == 0) { - library = gvplugin_library_load(gvc, globbuf.gl_pathv[i]); - if (library) { - gvconfig_plugin_install_from_library(gvc, globbuf.gl_pathv[i], library); - } - } - } - /* rescan with all libs loaded to check cross dependencies */ - for (i = 0; i < globbuf.gl_pathc; i++) { - re_status = regexec(&re, globbuf.gl_pathv[i], (size_t) 0, NULL, 0); - if (re_status == 0) { - library = gvplugin_library_load(gvc, globbuf.gl_pathv[i]); - if (library) { - path = strrchr(globbuf.gl_pathv[i],DIRSEP[0]); - if (path) - path++; - if (f && path) - gvconfig_write_library_config(gvc, path, library, f); - } - } - } - } - regfree(&re); - globfree(&globbuf); - free(config_glob); - free(config_re); - if (f) - fclose(f); -} -#endif - -/* - gvconfig - parse a config file and install the identified plugins - */ -void gvconfig(GVC_t * gvc, boolean rescan) -{ -#if 0 - gvplugin_library_t **libraryp; -#endif -#ifdef ENABLE_LTDL - int sz, rc; - struct stat config_st, libdir_st; - FILE *f = NULL; - char *config_text = NULL; - char *libdir; - char *config_file_name = GVPLUGIN_CONFIG_FILE; - -#define MAX_SZ_CONFIG 100000 -#endif - - /* builtins don't require LTDL */ - gvconfig_plugin_install_builtins(gvc); - - gvc->config_found = FALSE; -#ifdef __ENABLE_LTDL__ - if (gvc->common.demand_loading) { - /* see if there are any new plugins */ - libdir = gvconfig_libdir(gvc); - rc = stat(libdir, &libdir_st); - if (rc == -1) { - gvtextlayout_select(gvc); /* choose best available textlayout plugin immediately */ - /* if we fail to stat it then it probably doesn't exist so just fail silently */ - return; - } - - if (! gvc->config_path) { - gvc->config_path = gmalloc(strlen(libdir) + 1 + strlen(config_file_name) + 1); - strcpy(gvc->config_path, libdir); - strcat(gvc->config_path, DIRSEP); - strcat(gvc->config_path, config_file_name); - } - - if (rescan) { - config_rescan(gvc, gvc->config_path); - gvc->config_found = TRUE; - gvtextlayout_select(gvc); /* choose best available textlayout plugin immediately */ - return; - } - - /* load in the cached plugin library data */ - - rc = stat(gvc->config_path, &config_st); - if (rc == -1) { - gvtextlayout_select(gvc); /* choose best available textlayout plugin immediately */ - /* silently return without setting gvc->config_found = TRUE */ - return; - } - else if (config_st.st_size > MAX_SZ_CONFIG) { - agerr(AGERR,"%s is bigger than I can handle.\n", gvc->config_path); - } - else { - f = fopen(gvc->config_path,"r"); - if (!f) { - agerr (AGERR,"failed to open %s for read.\n", gvc->config_path); - return; - } - else { - config_text = gmalloc(config_st.st_size + 1); - sz = fread(config_text, 1, config_st.st_size, f); - if (sz == 0) { - agerr(AGERR,"%s is zero sized, or other read error.\n", gvc->config_path); - free(config_text); - } - else { - gvc->config_found = TRUE; - config_text[sz] = '\0'; /* make input into a null terminated string */ - rc = gvconfig_plugin_install_from_config(gvc, config_text); - /* NB. config_text not freed because we retain char* into it */ - } - } - if (f) { - fclose(f); - } - } - } -#endif - gvtextlayout_select(gvc); /* choose best available textlayout plugin immediately */ - textfont_dict_open(gvc); /* initialize font dict */ -} - -#ifdef ENABLE_LTDL -#ifdef WIN32 - -/* Emulating windows glob */ - -/* glob: - * Assumes only GLOB_NOSORT flag given. That is, there is no offset, - * and no previous call to glob. - */ - -static int -glob (GVC_t* gvc, char* pattern, int flags, int (*errfunc)(const char *, int), glob_t *pglob) -{ - char* libdir; - WIN32_FIND_DATA wfd; - HANDLE h; - char** str=0; - int arrsize=0; - int cnt = 0; - - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - - h = FindFirstFile (pattern, &wfd); - if (h == INVALID_HANDLE_VALUE) return GLOB_NOMATCH; - libdir = gvconfig_libdir(gvc); - do { - if (cnt >= arrsize-1) { - arrsize += 512; - if (str) str = (char**)realloc (str, arrsize*sizeof(char*)); - else str = (char**)malloc (arrsize*sizeof(char*)); - if (!str) return GLOB_NOSPACE; - } - str[cnt] = (char*)malloc (strlen(libdir)+1+strlen(wfd.cFileName)+1); - if (!str[cnt]) return GLOB_NOSPACE; - strcpy(str[cnt],libdir); - strcat(str[cnt],DIRSEP); - strcat(str[cnt],wfd.cFileName); - cnt++; - } while (FindNextFile (h, &wfd)); - str[cnt] = 0; - - pglob->gl_pathc = cnt; - pglob->gl_pathv = (char**)realloc(str, (cnt+1)*sizeof(char*)); - - return 0; -} - -static void -globfree (glob_t* pglob) -{ - int i; - for (i = 0; i < pglob->gl_pathc; i++) - free (pglob->gl_pathv[i]); - if (pglob->gl_pathv) - free (pglob->gl_pathv); -} -#endif -#endif diff --git a/internal/ccall/gvc/gvconfig.h b/internal/ccall/gvc/gvconfig.h deleted file mode 100644 index 5fa0861..0000000 --- a/internal/ccall/gvc/gvconfig.h +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Header used by plugins */ - -#ifndef GVCONFIG_H -#define GVCONFIG_H - -#include "gvplugin.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern void gvconfig_plugin_install_from_library(GVC_t * gvc, char *path, gvplugin_library_t *library); - -#ifdef __cplusplus -} -#endif -#endif /* GVCONFIG_H */ diff --git a/internal/ccall/gvc/gvcontext.c b/internal/ccall/gvc/gvcontext.c deleted file mode 100644 index 4ad388b..0000000 --- a/internal/ccall/gvc/gvcontext.c +++ /dev/null @@ -1,130 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - A gvcontext is a single instance of a GVC_t data structure providing - for a set of plugins for processing one graph at a time, and a job - description provividing for a sequence of graph jobs. - - Sometime in the future it may become the basis for a thread. - */ - -#include "config.h" - -#include - -#include "builddate.h" -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" -#include "gvc.h" - -/* from common/utils.c */ -extern void *zmalloc(size_t); - -/* from common/textspan.c */ -extern void textfont_dict_close(GVC_t *gvc); - -/* from common/emit.c */ -extern void emit_once_reset(void); - -/* from common/globals.c */ -extern int graphviz_errors; - -static char *LibInfo[] = { - "graphviz", /* Program */ - PACKAGE_VERSION, /* Version */ - BUILDDATE /* Build Date */ -}; - -GVC_t *gvNEWcontext(const lt_symlist_t *builtins, int demand_loading) -{ - GVC_t *gvc = zmalloc(sizeof(GVC_t)); - - if (gvc) { - gvc->common.info = LibInfo; - gvc->common.errorfn = agerrorf; - gvc->common.builtins = builtins; - gvc->common.demand_loading = demand_loading; - } - return gvc; -} - -void gvFinalize(GVC_t * gvc) -{ - if (gvc->active_jobs) - gvrender_end_job(gvc->active_jobs); -} - - -int gvFreeContext(GVC_t * gvc) -{ - GVG_t *gvg, *gvg_next; - gvplugin_package_t *package, *package_next; - gvplugin_available_t *api, *api_next; - -#define ELEM(x) +1 - /* See gvcext.h for APIS and gvcint.h for an example usage of "+1" - to get the number of APIs. */ - unsigned int num_apis = APIS, i; -#undef ELEM - - emit_once_reset(); - gvg_next = gvc->gvgs; - while ((gvg = gvg_next)) { - gvg_next = gvg->next; - free(gvg); - } - package_next = gvc->packages; - while ((package = package_next)) { - package_next = package->next; - free(package->path); - free(package->name); - free(package); - } - gvjobs_delete(gvc); - if (gvc->config_path) - free(gvc->config_path); - if (gvc->input_filenames) - free(gvc->input_filenames); - textfont_dict_close(gvc); - for (i = 0; i != num_apis; ++i) { - for (api = gvc->apis[i]; api != NULL; api = api_next) { - api_next = api->next; - free(api); - } - } - free(gvc); - return (graphviz_errors + agerrors()); -} - -GVC_t* gvCloneGVC (GVC_t * gvc0) -{ - GVC_t *gvc = zmalloc(sizeof(GVC_t)); - - gvc->common = gvc0->common; - memcpy (&gvc->apis, &gvc0->apis, sizeof(gvc->apis)); - memcpy (&gvc->api, &gvc0->api, sizeof(gvc->api)); - gvc->packages = gvc->packages; - - return gvc; -} - -void gvFreeCloneGVC (GVC_t * gvc) -{ - gvjobs_delete(gvc); - free(gvc); -} - diff --git a/internal/ccall/gvc/gvcproc.h b/internal/ccall/gvc/gvcproc.h deleted file mode 100644 index ccbc437..0000000 --- a/internal/ccall/gvc/gvcproc.h +++ /dev/null @@ -1,132 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* This is the public header for the callers of libgvc */ - -#ifndef GVCPROC_H -#define GVCPROC_H - -#define extern - -/* these are intended to be private entry points - see gvc.h for the public ones */ - -/* configuration */ - - extern char *gvconfig_libdir(GVC_t * gvc); - extern void gvconfig(GVC_t * gvc, boolean rescan); - extern char *gvhostname(void); - -/* plugins */ - - extern boolean gvplugin_install(GVC_t * gvc, api_t api, - const char *typestr, int quality, gvplugin_package_t *package, - gvplugin_installed_t * typeptr); - extern gvplugin_available_t *gvplugin_load(GVC_t * gvc, api_t api, const char *type); - extern gvplugin_library_t *gvplugin_library_load(GVC_t *gvc, char *path); - extern api_t gvplugin_api(char *str); - extern char * gvplugin_api_name(api_t api); - extern void gvplugin_write_status(GVC_t * gvc); - extern char *gvplugin_list(GVC_t * gvc, api_t api, const char *str); - - extern Agraph_t * gvplugin_graph(GVC_t * gvc); - -/* job */ - - extern void gvjobs_output_filename(GVC_t * gvc, const char *name); - extern boolean gvjobs_output_langname(GVC_t * gvc, const char *name); - extern GVJ_t *gvjobs_first(GVC_t * gvc); - extern GVJ_t *gvjobs_next(GVC_t * gvc); - extern void gvjobs_delete(GVC_t * gvc); - -/* emit */ - extern void gvemit_graph(GVC_t * gvc, graph_t * g); - -/* textlayout */ - - extern int gvtextlayout_select(GVC_t * gvc); - extern boolean gvtextlayout(GVC_t *gvc, textspan_t *span, char **fontpath); - -/* loadimage */ - extern void gvloadimage(GVJ_t *job, usershape_t *us, boxf b, boolean filled, const char *target); - -/* usershapes */ - extern point gvusershape_size_dpi(usershape_t *us, pointf dpi); - extern point gvusershape_size(graph_t *g, char *name); - extern usershape_t *gvusershape_find(const char *name); - -/* device */ - extern int gvdevice_initialize(GVJ_t * job); - extern void gvdevice_format(GVJ_t * job); - extern void gvdevice_finalize(GVJ_t * job); - -/* render */ - - extern pointf gvrender_ptf(GVJ_t *job, pointf p); - extern pointf* gvrender_ptf_A(GVJ_t *job, pointf *af, pointf *AF, int n); - - extern int gvrender_begin_job(GVJ_t * job); - extern void gvrender_end_job(GVJ_t * job); - extern int gvrender_select(GVJ_t * job, const char *lang); - extern int gvrender_features(GVJ_t * job); - extern void gvrender_begin_graph(GVJ_t * job, graph_t * g); - extern void gvrender_end_graph(GVJ_t * job); - extern void gvrender_begin_page(GVJ_t * job); - extern void gvrender_end_page(GVJ_t * job); - extern void gvrender_begin_layer(GVJ_t * job); - extern void gvrender_end_layer(GVJ_t * job); - extern void gvrender_begin_cluster(GVJ_t * job, graph_t * sg); - extern void gvrender_end_cluster(GVJ_t * job, graph_t *g); - extern void gvrender_begin_nodes(GVJ_t * job); - extern void gvrender_end_nodes(GVJ_t * job); - extern void gvrender_begin_edges(GVJ_t * job); - extern void gvrender_end_edges(GVJ_t * job); - extern void gvrender_begin_node(GVJ_t * job, node_t * n); - extern void gvrender_end_node(GVJ_t * job); - extern void gvrender_begin_edge(GVJ_t * job, edge_t * e); - extern void gvrender_end_edge(GVJ_t * job); - extern void gvrender_begin_anchor(GVJ_t * job, - char *href, char *tooltip, char *target, char *id); - extern void gvrender_end_anchor(GVJ_t * job); - extern void gvrender_begin_label(GVJ_t * job, label_type type); - extern void gvrender_end_label(GVJ_t * job); - extern void gvrender_textspan(GVJ_t * job, pointf p, textspan_t * span); - extern void gvrender_set_pencolor(GVJ_t * job, char *name); - extern void gvrender_set_penwidth(GVJ_t * job, double penwidth); - extern void gvrender_set_fillcolor(GVJ_t * job, char *name); - extern void gvrender_set_gradient_vals (GVJ_t * job, char *stopcolor, int angle, float frac); - - extern void gvrender_set_style(GVJ_t * job, char **s); - extern void gvrender_ellipse(GVJ_t * job, pointf * AF, int n, int filled); - extern void gvrender_polygon(GVJ_t* job, pointf* af, int n, int filled); - extern void gvrender_box(GVJ_t * job, boxf BF, int filled); - extern void gvrender_beziercurve(GVJ_t * job, pointf * AF, int n, - int arrow_at_start, int arrow_at_end, boolean filled); - extern void gvrender_polyline(GVJ_t * job, pointf * AF, int n); - extern void gvrender_comment(GVJ_t * job, char *str); - extern void gvrender_usershape(GVJ_t * job, char *name, pointf * AF, int n, boolean filled, char *imagescale); - -/* layout */ - - extern int gvlayout_select(GVC_t * gvc, const char *str); - extern int gvFreeLayout(GVC_t * gvc, Agraph_t * g); - extern int gvLayoutJobs(GVC_t * gvc, Agraph_t * g); - -/* argvlist */ - extern gv_argvlist_t *gvNEWargvlist(void); - extern void gv_argvlist_set_item(gv_argvlist_t *list, int index, char *item); - extern void gv_argvlist_reset(gv_argvlist_t *list); - extern void gv_argvlist_free(gv_argvlist_t *list); - -#undef extern - -#endif /* GVCPROC_H */ diff --git a/internal/ccall/gvc/gvdevice.c b/internal/ccall/gvc/gvdevice.c deleted file mode 100644 index b9588d0..0000000 --- a/internal/ccall/gvc/gvdevice.c +++ /dev/null @@ -1,563 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * This library forms the socket for run-time loadable device plugins. - */ - -#include "config.h" - -#include -#include -#include -#include - -#ifdef HAVE_ERRNO_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef WIN32 -#include -#include -#include "compat.h" -#endif - -#ifdef HAVE_LIBZ -#include - -#ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ -#endif -static char z_file_header[] = - {0x1f, 0x8b, /*magic*/ Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE}; - -static z_stream z_strm; -static unsigned char *df; -static unsigned int dfallocated; -static uint64_t crc; -#endif /* HAVE_LIBZ */ - -#include "const.h" -#include "memory.h" -#include "gvplugin_device.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" -#include "logic.h" -#include "gvio.h" - -static const int PAGE_ALIGN = 4095; /* align to a 4K boundary (less one), typical for Linux, Mac OS X and Windows memory allocation */ - -static size_t gvwrite_no_z (GVJ_t * job, const char *s, size_t len) -{ - if (job->gvc->write_fn) /* externally provided write dicipline */ - return (job->gvc->write_fn)(job, (char*)s, len); - if (job->output_data) { - if (len > job->output_data_allocated - (job->output_data_position + 1)) { - /* ensure enough allocation for string = null terminator */ - job->output_data_allocated = (job->output_data_position + len + 1 + PAGE_ALIGN) & ~PAGE_ALIGN; - job->output_data = realloc(job->output_data, job->output_data_allocated); - if (!job->output_data) { - (job->common->errorfn) ("memory allocation failure\n"); - exit(1); - } - } - memcpy(job->output_data + job->output_data_position, s, len); - job->output_data_position += len; - job->output_data[job->output_data_position] = '\0'; /* keep null termnated */ - return len; - } - else - return fwrite(s, sizeof(char), len, job->output_file); - return 0; -} - -static void auto_output_filename(GVJ_t *job) -{ - static char *buf; - static size_t bufsz; - char gidx[100]; /* large enough for '.' plus any integer */ - char *fn, *p, *q; - size_t len; - - if (job->graph_index) - sprintf(gidx, ".%d", job->graph_index + 1); - else - gidx[0] = '\0'; - if (!(fn = job->input_filename)) - fn = "noname.gv"; - len = strlen(fn) /* typically "something.gv" */ - + strlen(gidx) /* "", ".2", ".3", ".4", ... */ - + 1 /* "." */ - + strlen(job->output_langname) /* e.g. "png" */ - + 1; /* null terminaor */ - if (bufsz < len) { - bufsz = len + 10; - buf = realloc(buf, bufsz * sizeof(char)); - } - strcpy(buf, fn); - strcat(buf, gidx); - strcat(buf, "."); - p = strdup(job->output_langname); - while ((q = strrchr(p, ':'))) { - strcat(buf, q+1); - strcat(buf, "."); - *q = '\0'; - } - strcat(buf, p); - free(p); - - job->output_filename = buf; -} - -/* gvdevice_initialize: - * Return 0 on success, non-zero on failure - */ -int gvdevice_initialize(GVJ_t * job) -{ - gvdevice_engine_t *gvde = job->device.engine; - GVC_t *gvc = job->gvc; - - if (gvde && gvde->initialize) { - gvde->initialize(job); - } - else if (job->output_data) { - } - /* if the device has no initialization then it uses file output */ - else if (!job->output_file) { /* if not yet opened */ - if (gvc->common.auto_outfile_names) - auto_output_filename(job); - if (job->output_filename) { - job->output_file = fopen(job->output_filename, "w"); - if (job->output_file == NULL) { - (job->common->errorfn) ("Could not open \"%s\" for writing : %s\n", - job->output_filename, strerror(errno)); - /* perror(job->output_filename); */ - return(1); - } - } - else - job->output_file = stdout; - -#ifdef HAVE_SETMODE -#ifdef O_BINARY - if (job->flags & GVDEVICE_BINARY_FORMAT) -#ifdef WIN32 - _setmode(fileno(job->output_file), O_BINARY); -#else - setmode(fileno(job->output_file), O_BINARY); -#endif -#endif -#endif - } - - if (job->flags & GVDEVICE_COMPRESSED_FORMAT) { -#ifdef HAVE_LIBZ - z_stream *z = &z_strm; - - z->zalloc = 0; - z->zfree = 0; - z->opaque = 0; - z->next_in = NULL; - z->next_out = NULL; - z->avail_in = 0; - - crc = crc32(0L, Z_NULL, 0); - - if (deflateInit2(z, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY) != Z_OK) { - (job->common->errorfn) ("Error initializing for deflation\n"); - return(1); - } - gvwrite_no_z(job, z_file_header, sizeof(z_file_header)); -#else - (job->common->errorfn) ("No libz support.\n"); - return(1); -#endif - } - return 0; -} - -size_t gvwrite (GVJ_t * job, const char *s, size_t len) -{ - size_t ret, olen; - - if (!len || !s) - return 0; - - if (job->flags & GVDEVICE_COMPRESSED_FORMAT) { -#ifdef HAVE_LIBZ - z_streamp z = &z_strm; - size_t dflen; - -#ifdef HAVE_DEFLATEBOUND - dflen = deflateBound(z, len); -#else - /* deflateBound() is not available in older libz, e.g. from centos3 */ - dflen = 2 * len + dfallocated - z->avail_out; -#endif - if (dfallocated < dflen) { - dfallocated = (dflen + 1 + PAGE_ALIGN) & ~PAGE_ALIGN; - df = realloc(df, dfallocated); - if (! df) { - (job->common->errorfn) ("memory allocation failure\n"); - exit(1); - } - } - - crc = crc32(crc, (unsigned char*)s, len); - - z->next_in = (unsigned char*)s; - z->avail_in = len; - while (z->avail_in) { - z->next_out = df; - z->avail_out = dfallocated; - ret=deflate (z, Z_NO_FLUSH); - if (ret != Z_OK) { - (job->common->errorfn) ("deflation problem %d\n", ret); - exit(1); - } - - if ((olen = z->next_out - df)) { - ret = gvwrite_no_z (job, (char*)df, olen); - if (ret != olen) { - (job->common->errorfn) ("gvwrite_no_z problem %d\n", ret); - exit(1); - } - } - } - -#else - (job->common->errorfn) ("No libz support.\n"); - exit(1); -#endif - } - else { /* uncompressed write */ - ret = gvwrite_no_z (job, s, len); - if (ret != len) { - (job->common->errorfn) ("gvwrite_no_z problem %d\n", len); - exit(1); - } - } - return len; -} - -int gvferror (FILE* stream) -{ - GVJ_t *job = (GVJ_t*)stream; - - if (!job->gvc->write_fn && !job->output_data) - return ferror(job->output_file); - - return 0; -} - -size_t gvfwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - assert(size = sizeof(char)); - return gvwrite((GVJ_t*)stream, ptr, nmemb); -} - -int gvputs(GVJ_t * job, const char *s) -{ - size_t len = strlen(s); - - if (gvwrite (job, s, len) != len) { - return EOF; - } - return +1; -} - -int gvputc(GVJ_t * job, int c) -{ - const char cc = c; - - if (gvwrite (job, &cc, 1) != 1) { - return EOF; - } - return c; -} - -int gvflush (GVJ_t * job) -{ - if (job->output_file - && ! job->external_context - && ! job->gvc->write_fn) { - return fflush(job->output_file); - } - else - return 0; -} - -static void gvdevice_close(GVJ_t * job) -{ - if (job->output_filename - && job->output_file != stdout - && ! job->external_context) { - if (job->output_file) { - fclose(job->output_file); - job->output_file = NULL; - } - job->output_filename = NULL; - } -} - -void gvdevice_format(GVJ_t * job) -{ - gvdevice_engine_t *gvde = job->device.engine; - - if (gvde && gvde->format) - gvde->format(job); - gvflush (job); -} - -void gvdevice_finalize(GVJ_t * job) -{ - gvdevice_engine_t *gvde = job->device.engine; - boolean finalized_p = FALSE; - - if (job->flags & GVDEVICE_COMPRESSED_FORMAT) { -#ifdef HAVE_LIBZ - z_streamp z = &z_strm; - unsigned char out[8] = ""; - int ret; - int cnt = 0; - - z->next_in = out; - z->avail_in = 0; - z->next_out = df; - z->avail_out = dfallocated; - while ((ret = deflate (z, Z_FINISH)) == Z_OK && (cnt++ <= 100)) { - gvwrite_no_z(job, (char*)df, z->next_out - df); - z->next_out = df; - z->avail_out = dfallocated; - } - if (ret != Z_STREAM_END) { - (job->common->errorfn) ("deflation finish problem %d cnt=%d\n", ret, cnt); - exit(1); - } - gvwrite_no_z(job, (char*)df, z->next_out - df); - - ret = deflateEnd(z); - if (ret != Z_OK) { - (job->common->errorfn) ("deflation end problem %d\n", ret); - exit(1); - } - out[0] = crc; - out[1] = crc >> 8; - out[2] = crc >> 16; - out[3] = crc >> 24; - out[4] = z->total_in; - out[5] = z->total_in >> 8; - out[6] = z->total_in >> 16; - out[7] = z->total_in >> 24; - gvwrite_no_z(job, (char*)out, sizeof(out)); -#else - (job->common->errorfn) ("No libz support\n"); - exit(1); -#endif - } - - if (gvde) { - if (gvde->finalize) { - gvde->finalize(job); - finalized_p = TRUE; - } - } - - if (! finalized_p) { - /* if the device has no finalization then it uses file output */ - gvflush (job); - gvdevice_close(job); - } -} -/* gvprintf: - * Unless vsnprintf is available, this function is unsafe due to the fixed buffer size. - * It should only be used when the caller is sure the input will not - * overflow the buffer. In particular, it should be avoided for - * input coming from users. - */ -void gvprintf(GVJ_t * job, const char *format, ...) -{ - char buf[BUFSIZ]; - int len; - va_list argp; - char* bp = buf; - - va_start(argp, format); -#ifdef HAVE_VSNPRINTF - len = vsnprintf((char *)buf, BUFSIZ, format, argp); - if (len < 0) { - agerr (AGERR, "gvprintf: %s\n", strerror(errno)); - return; - } - else if (len >= BUFSIZ) { - /* C99 vsnprintf returns the length that would be required - * to write the string without truncation. - */ - bp = gmalloc(len + 1); - va_end(argp); - va_start(argp, format); - len = vsprintf(bp, format, argp); - } -#else - len = vsprintf((char *)buf, format, argp); -#endif - va_end(argp); - - gvwrite(job, bp, len); - if (bp != buf) - free (bp); -} - - -/* Test with: - * cc -DGVPRINTNUM_TEST gvprintnum.c -o gvprintnum - */ - -#define DECPLACES 4 -#define DECPLACES_SCALE 10000 - -/* use macro so maxnegnum is stated just once for both double and string versions */ -#define val_str(n, x) static double n = x; static char n##str[] = #x; -val_str(maxnegnum, -999999999999999.99) - -/* we use len and don't need the string to be terminated */ -/* #define TERMINATED_NUMBER_STRING */ - -/* Note. Returned string is only good until the next call to gvprintnum */ -static char * gvprintnum (size_t *len, double number) -{ - static char tmpbuf[sizeof(maxnegnumstr)]; /* buffer big enough for worst case */ - char *result = tmpbuf+sizeof(maxnegnumstr); /* init result to end of tmpbuf */ - long int N; - boolean showzeros, negative; - int digit, i; - - /* - number limited to a working range: maxnegnum >= n >= -maxnegnum - N = number * DECPLACES_SCALE rounded towards zero, - printing to buffer in reverse direction, - printing "." after DECPLACES - suppressing trailing "0" and "." - */ - - if (number < maxnegnum) { /* -ve limit */ - *len = sizeof(maxnegnumstr)-1; /* len doesn't include terminator */ - return maxnegnumstr;; - } - if (number > -maxnegnum) { /* +ve limit */ - *len = sizeof(maxnegnumstr)-2; /* len doesn't include terminator or sign */ - return maxnegnumstr+1; /* +1 to skip the '-' sign */ - } - number *= DECPLACES_SCALE; /* scale by DECPLACES_SCALE */ - if (number < 0.0) /* round towards zero */ - N = number - 0.5; - else - N = number + 0.5; - if (N == 0) { /* special case for exactly 0 */ - *len = 1; - return "0"; - } - if ((negative = (N < 0))) /* avoid "-0" by testing rounded int */ - N = -N; /* make number +ve */ -#ifdef TERMINATED_NUMBER_STRING - *--result = '\0'; /* terminate the result string */ -#endif - showzeros = FALSE; /* don't print trailing zeros */ - for (i = DECPLACES; N || i > 0; i--) { /* non zero remainder, - or still in fractional part */ - digit = N % 10; /* next least-significant digit */ - N /= 10; - if (digit || showzeros) { /* if digit is non-zero, - or if we are printing zeros */ - *--result = digit | '0'; /* convert digit to ascii */ - showzeros = TRUE; /* from now on we must print zeros */ - } - if (i == 1) { /* if completed fractional part */ - if (showzeros) /* if there was a non-zero fraction */ - *--result = '.'; /* print decimal point */ - showzeros = TRUE; /* print all digits in int part */ - } - } - if (negative) /* print "-" if needed */ - *--result = '-'; -#ifdef TERMINATED_NUMBER_STRING - *len = tmpbuf+sizeof(maxnegnumstr)-1 - result; -#else - *len = tmpbuf+sizeof(maxnegnumstr) - result; -#endif - return result; -} - - -#ifdef GVPRINTNUM_TEST -int main (int argc, char *argv[]) -{ - char *buf; - size_t len; - - double test[] = { - -maxnegnum*1.1, -maxnegnum*.9, - 1e8, 10.008, 10, 1, .1, .01, - .006, .005, .004, .001, 1e-8, - 0, -0, - -1e-8, -.001, -.004, -.005, -.006, - -.01, -.1, -1, -10, -10.008, -1e8, - maxnegnum*.9, maxnegnum*1.1 - }; - int i = sizeof(test) / sizeof(test[0]); - - while (i--) { - buf = gvprintnum(&len, test[i]); - fprintf (stdout, "%g = %s %d\n", test[i], buf, len); - } - - return 0; -} -#endif - -void gvprintdouble(GVJ_t * job, double num) -{ - char *buf; - size_t len; - - buf = gvprintnum(&len, num); - gvwrite(job, buf, len); -} - -void gvprintpointf(GVJ_t * job, pointf p) -{ - char *buf; - size_t len; - - buf = gvprintnum(&len, p.x); - gvwrite(job, buf, len); - gvwrite(job, " ", 1); - buf = gvprintnum(&len, p.y); - gvwrite(job, buf, len); -} - -void gvprintpointflist(GVJ_t * job, pointf *p, int n) -{ - int i = 0; - - while (TRUE) { - gvprintpointf(job, p[i]); - if (++i >= n) break; - gvwrite(job, " ", 1); - } -} - diff --git a/internal/ccall/gvc/gvevent.c b/internal/ccall/gvc/gvevent.c deleted file mode 100644 index d4a000f..0000000 --- a/internal/ccall/gvc/gvevent.c +++ /dev/null @@ -1,673 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "gvplugin_layout.h" -#include "gvcint.h" -#include "gvcproc.h" - -extern char *strdup_and_subst_obj(char *str, void * n); -extern void emit_graph(GVJ_t * job, graph_t * g); -extern boolean overlap_edge(edge_t *e, boxf b); -extern boolean overlap_node(node_t *n, boxf b); -extern int gvLayout(GVC_t *gvc, graph_t *g, const char *engine); -extern int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *filename); -extern void graph_cleanup(graph_t *g); - -#define PANFACTOR 10 -#define ZOOMFACTOR 1.1 -#define EPSILON .0001 - -static char *s_digraph = "digraph"; -static char *s_graph = "graph"; -static char *s_subgraph = "subgraph"; -static char *s_node = "node"; -static char *s_edge = "edge"; -static char *s_tooltip = "tooltip"; -static char *s_href = "href"; -static char *s_URL = "URL"; -static char *s_tailport = "tailport"; -static char *s_headport = "headport"; -static char *s_key = "key"; - -static void gv_graph_state(GVJ_t *job, graph_t *g) -{ - int j; - Agsym_t *a; - gv_argvlist_t *list; - - list = &(job->selected_obj_type_name); - j = 0; - if (g == agroot(g)) { - if (agisdirected(g)) - gv_argvlist_set_item(list, j++, s_digraph); - else - gv_argvlist_set_item(list, j++, s_graph); - } - else { - gv_argvlist_set_item(list, j++, s_subgraph); - } - gv_argvlist_set_item(list, j++, agnameof(g)); - list->argc = j; - - list = &(job->selected_obj_attributes); - a = NULL; - while ((a = agnxtattr(g, AGRAPH, a))) { - gv_argvlist_set_item(list, j++, a->name); - gv_argvlist_set_item(list, j++, agxget(g, a)); - gv_argvlist_set_item(list, j++, (char*)GVATTR_STRING); - } - list->argc = j; - - a = agfindgraphattr(g, s_href); - if (!a) - a = agfindgraphattr(g, s_URL); - if (a) - job->selected_href = strdup_and_subst_obj(agxget(g, a), (void*)g); -} - -static void gv_node_state(GVJ_t *job, node_t *n) -{ - int j; - Agsym_t *a; - Agraph_t *g; - gv_argvlist_t *list; - - list = &(job->selected_obj_type_name); - j = 0; - gv_argvlist_set_item(list, j++, s_node); - gv_argvlist_set_item(list, j++, agnameof(n)); - list->argc = j; - - list = &(job->selected_obj_attributes); - g = agroot(agraphof(n)); - a = NULL; - while ((a = agnxtattr(g, AGNODE, a))) { - gv_argvlist_set_item(list, j++, a->name); - gv_argvlist_set_item(list, j++, agxget(n, a)); - } - list->argc = j; - - a = agfindnodeattr(agraphof(n), s_href); - if (!a) - a = agfindnodeattr(agraphof(n), s_URL); - if (a) - job->selected_href = strdup_and_subst_obj(agxget(n, a), (void*)n); -} - -static void gv_edge_state(GVJ_t *job, edge_t *e) -{ - int j; - Agsym_t *a; - Agraph_t *g; - gv_argvlist_t *nlist, *alist; - - nlist = &(job->selected_obj_type_name); - - /* only tail, head, and key are strictly identifying properties, - * but we commonly alse use edge kind (e.g. "->") and tailport,headport - * in edge names */ - j = 0; - gv_argvlist_set_item(nlist, j++, s_edge); - gv_argvlist_set_item(nlist, j++, agnameof(agtail(e))); - j++; /* skip tailport slot for now */ - gv_argvlist_set_item(nlist, j++, agisdirected(agraphof(agtail(e)))?"->":"--"); - gv_argvlist_set_item(nlist, j++, agnameof(aghead(e))); - j++; /* skip headport slot for now */ - j++; /* skip key slot for now */ - nlist->argc = j; - - alist = &(job->selected_obj_attributes); - g = agroot(agraphof(aghead(e))); - a = NULL; - while ((a = agnxtattr(g, AGEDGE, a))) { - - /* tailport and headport can be shown as part of the name, but they - * are not identifying properties of the edge so we - * also list them as modifyable attributes. */ - if (strcmp(a->name,s_tailport) == 0) - gv_argvlist_set_item(nlist, 2, agxget(e, a)); - else if (strcmp(a->name,s_headport) == 0) - gv_argvlist_set_item(nlist, 5, agxget(e, a)); - - /* key is strictly an identifying property to distinguish multiple - * edges between the same node pair. Its non-writable, so - * no need to list it as an attribute as well. */ - else if (strcmp(a->name,s_key) == 0) { - gv_argvlist_set_item(nlist, 6, agxget(e, a)); - continue; - } - - gv_argvlist_set_item(alist, j++, a->name); - gv_argvlist_set_item(alist, j++, agxget(e, a)); - } - alist->argc = j; - - a = agfindedgeattr(agraphof(aghead(e)), s_href); - if (!a) - a = agfindedgeattr(agraphof(aghead(e)), s_URL); - if (a) - job->selected_href = strdup_and_subst_obj(agxget(e, a), (void*)e); -} - -static void gvevent_refresh(GVJ_t * job) -{ - graph_t *g = job->gvc->g; - - if (!job->selected_obj) { - job->selected_obj = g; - GD_gui_state(g) |= GUI_STATE_SELECTED; - gv_graph_state(job, g); - } - emit_graph(job, g); - job->has_been_rendered = TRUE; -} - -/* recursively find innermost cluster containing the point */ -static graph_t *gvevent_find_cluster(graph_t *g, boxf b) -{ - int i; - graph_t *sg; - boxf bb; - - for (i = 1; i <= GD_n_cluster(g); i++) { - sg = gvevent_find_cluster(GD_clust(g)[i], b); - if (sg) - return(sg); - } - B2BF(GD_bb(g), bb); - if (OVERLAP(b, bb)) - return g; - return NULL; -} - -static void * gvevent_find_obj(graph_t *g, boxf b) -{ - graph_t *sg; - node_t *n; - edge_t *e; - - /* edges might overlap nodes, so search them first */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - if (overlap_edge(e, b)) - return (void *)e; - /* search graph backwards to get topmost node, in case of overlap */ - for (n = aglstnode(g); n; n = agprvnode(g, n)) - if (overlap_node(n, b)) - return (void *)n; - /* search for innermost cluster */ - sg = gvevent_find_cluster(g, b); - if (sg) - return (void *)sg; - - /* otherwise - we're always in the graph */ - return (void *)g; -} - -static void gvevent_leave_obj(GVJ_t * job) -{ - void *obj = job->current_obj; - - if (obj) { - switch (agobjkind(obj)) { - case AGRAPH: - GD_gui_state((graph_t*)obj) &= ~GUI_STATE_ACTIVE; - break; - case AGNODE: - ND_gui_state((node_t*)obj) &= ~GUI_STATE_ACTIVE; - break; - case AGEDGE: - ED_gui_state((edge_t*)obj) &= ~GUI_STATE_ACTIVE; - break; - } - } - job->active_tooltip = NULL; -} - -static void gvevent_enter_obj(GVJ_t * job) -{ - void *obj; - graph_t *g; - edge_t *e; - node_t *n; - Agsym_t *a; - - if (job->active_tooltip) { - free(job->active_tooltip); - job->active_tooltip = NULL; - } - obj = job->current_obj; - if (obj) { - switch (agobjkind(obj)) { - case AGRAPH: - g = (graph_t*)obj; - GD_gui_state(g) |= GUI_STATE_ACTIVE; - a = agfindgraphattr(g, s_tooltip); - if (a) - job->active_tooltip = strdup_and_subst_obj(agxget(g, a), obj); - break; - case AGNODE: - n = (node_t*)obj; - ND_gui_state(n) |= GUI_STATE_ACTIVE; - a = agfindnodeattr(agraphof(n), s_tooltip); - if (a) - job->active_tooltip = strdup_and_subst_obj(agxget(n, a), obj); - break; - case AGEDGE: - e = (edge_t*)obj; - ED_gui_state(e) |= GUI_STATE_ACTIVE; - a = agfindedgeattr(agraphof(aghead(e)), s_tooltip); - if (a) - job->active_tooltip = strdup_and_subst_obj(agxget(e, a), obj); - break; - } - } -} - -static pointf pointer2graph (GVJ_t *job, pointf pointer) -{ - pointf p; - - /* transform position in device units to position in graph units */ - if (job->rotation) { - p.x = pointer.y / (job->zoom * job->devscale.y) - job->translation.x; - p.y = -pointer.x / (job->zoom * job->devscale.x) - job->translation.y; - } - else { - p.x = pointer.x / (job->zoom * job->devscale.x) - job->translation.x; - p.y = pointer.y / (job->zoom * job->devscale.y) - job->translation.y; - } - return p; -} - -/* CLOSEENOUGH is in 1/72 - probably should be a feature... */ -#define CLOSEENOUGH 1 - -static void gvevent_find_current_obj(GVJ_t * job, pointf pointer) -{ - void *obj; - boxf b; - double closeenough; - pointf p; - - p = pointer2graph (job, pointer); - - /* convert window point to graph coordinates */ - closeenough = CLOSEENOUGH / job->zoom; - - b.UR.x = p.x + closeenough; - b.UR.y = p.y + closeenough; - b.LL.x = p.x - closeenough; - b.LL.y = p.y - closeenough; - - obj = gvevent_find_obj(job->gvc->g, b); - if (obj != job->current_obj) { - gvevent_leave_obj(job); - job->current_obj = obj; - gvevent_enter_obj(job); - job->needs_refresh = 1; - } -} - -static void gvevent_select_current_obj(GVJ_t * job) -{ - void *obj; - - obj = job->selected_obj; - if (obj) { - switch (agobjkind(obj)) { - case AGRAPH: - GD_gui_state((graph_t*)obj) |= GUI_STATE_VISITED; - GD_gui_state((graph_t*)obj) &= ~GUI_STATE_SELECTED; - break; - case AGNODE: - ND_gui_state((node_t*)obj) |= GUI_STATE_VISITED; - ND_gui_state((node_t*)obj) &= ~GUI_STATE_SELECTED; - break; - case AGEDGE: - ED_gui_state((edge_t*)obj) |= GUI_STATE_VISITED; - ED_gui_state((edge_t*)obj) &= ~GUI_STATE_SELECTED; - break; - } - } - - if (job->selected_href) { - free(job->selected_href); - job->selected_href = NULL; - } - - obj = job->selected_obj = job->current_obj; - if (obj) { - switch (agobjkind(obj)) { - case AGRAPH: - GD_gui_state((graph_t*)obj) |= GUI_STATE_SELECTED; - gv_graph_state(job, (graph_t*)obj); - break; - case AGNODE: - ND_gui_state((node_t*)obj) |= GUI_STATE_SELECTED; - gv_node_state(job, (node_t*)obj); - break; - case AGEDGE: - ED_gui_state((edge_t*)obj) |= GUI_STATE_SELECTED; - gv_edge_state(job, (edge_t*)obj); - break; - } - } - -#if 0 -for (i = 0; i < job->selected_obj_type_name.argc; i++) - fprintf(stderr,"%s%s", job->selected_obj_type_name.argv[i], - (i==(job->selected_obj_type_name.argc - 1))?"\n":" "); -for (i = 0; i < job->selected_obj_attributes.argc; i++) - fprintf(stderr,"%s%s", job->selected_obj_attributes.argv[i], (i%2)?"\n":" = "); -fprintf(stderr,"\n"); -#endif -} - -static void gvevent_button_press(GVJ_t * job, int button, pointf pointer) -{ - switch (button) { - case 1: /* select / create in edit mode */ - gvevent_find_current_obj(job, pointer); - gvevent_select_current_obj(job); - job->click = 1; - job->button = button; - job->needs_refresh = 1; - break; - case 2: /* pan */ - job->click = 1; - job->button = button; - job->needs_refresh = 1; - break; - case 3: /* insert node or edge */ - gvevent_find_current_obj(job, pointer); - job->click = 1; - job->button = button; - job->needs_refresh = 1; - break; - case 4: - /* scrollwheel zoom in at current mouse x,y */ -/* FIXME - should code window 0,0 point as feature with Y_GOES_DOWN */ - job->fit_mode = 0; - if (job->rotation) { - job->focus.x -= (pointer.y - job->height / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.y); - job->focus.y += (pointer.x - job->width / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.x); - } - else { - job->focus.x += (pointer.x - job->width / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.x); - job->focus.y += (pointer.y - job->height / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.y); - } - job->zoom *= ZOOMFACTOR; - job->needs_refresh = 1; - break; - case 5: /* scrollwheel zoom out at current mouse x,y */ - job->fit_mode = 0; - job->zoom /= ZOOMFACTOR; - if (job->rotation) { - job->focus.x += (pointer.y - job->height / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.y); - job->focus.y -= (pointer.x - job->width / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.x); - } - else { - job->focus.x -= (pointer.x - job->width / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.x); - job->focus.y -= (pointer.y - job->height / 2.) - * (ZOOMFACTOR - 1.) / (job->zoom * job->devscale.y); - } - job->needs_refresh = 1; - break; - } - job->oldpointer = pointer; -} - -static void gvevent_button_release(GVJ_t *job, int button, pointf pointer) -{ - job->click = 0; - job->button = 0; -} - -static void gvevent_motion(GVJ_t * job, pointf pointer) -{ - /* dx,dy change in position, in device independent points */ - double dx = (pointer.x - job->oldpointer.x) / job->devscale.x; - double dy = (pointer.y - job->oldpointer.y) / job->devscale.y; - - if (fabs(dx) < EPSILON && fabs(dy) < EPSILON) /* ignore motion events with no motion */ - return; - - switch (job->button) { - case 0: /* drag with no button - */ - gvevent_find_current_obj(job, pointer); - break; - case 1: /* drag with button 1 - drag object */ - /* FIXME - to be implemented */ - break; - case 2: /* drag with button 2 - pan graph */ - if (job->rotation) { - job->focus.x -= dy / job->zoom; - job->focus.y += dx / job->zoom; - } - else { - job->focus.x -= dx / job->zoom; - job->focus.y -= dy / job->zoom; - } - job->needs_refresh = 1; - break; - case 3: /* drag with button 3 - drag inserted node or uncompleted edge */ - break; - } - job->oldpointer = pointer; -} - -static int quit_cb(GVJ_t * job) -{ - return 1; -} - -static int left_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->focus.x += PANFACTOR / job->zoom; - job->needs_refresh = 1; - return 0; -} - -static int right_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->focus.x -= PANFACTOR / job->zoom; - job->needs_refresh = 1; - return 0; -} - -static int up_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->focus.y += -(PANFACTOR / job->zoom); - job->needs_refresh = 1; - return 0; -} - -static int down_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->focus.y -= -(PANFACTOR / job->zoom); - job->needs_refresh = 1; - return 0; -} - -static int zoom_in_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->zoom *= ZOOMFACTOR; - job->needs_refresh = 1; - return 0; -} - -static int zoom_out_cb(GVJ_t * job) -{ - job->fit_mode = 0; - job->zoom /= ZOOMFACTOR; - job->needs_refresh = 1; - return 0; -} - -static int toggle_fit_cb(GVJ_t * job) -{ -/*FIXME - should allow for margins */ -/* - similar zoom_to_fit code exists in: */ -/* plugin/gtk/callbacks.c */ -/* plugin/xlib/gvdevice_xlib.c */ -/* lib/gvc/gvevent.c */ - - job->fit_mode = !job->fit_mode; - if (job->fit_mode) { - /* FIXME - this code looks wrong */ - int dflt_width, dflt_height; - dflt_width = job->width; - dflt_height = job->height; - job->zoom = - MIN((double) job->width / (double) dflt_width, - (double) job->height / (double) dflt_height); - job->focus.x = 0.0; - job->focus.y = 0.0; - job->needs_refresh = 1; - } - return 0; -} - -static void gvevent_modify (GVJ_t * job, const char *name, const char *value) -{ - /* FIXME */ -} - -static void gvevent_delete (GVJ_t * job) -{ - /* FIXME */ -} - -static void gvevent_read (GVJ_t * job, const char *filename, const char *layout) -{ - FILE *f; - GVC_t *gvc; - Agraph_t *g = NULL; - gvlayout_engine_t *gvle; - - gvc = job->gvc; - if (!filename) { - g = agread(stdin,NIL(Agdisc_t *)); // continue processing stdin - } - else { - f = fopen(filename, "r"); - if (!f) - return; /* FIXME - need some error handling */ - g = agread(f,NIL(Agdisc_t *)); - fclose(f); - } - - if (!g) - return; /* FIXME - need some error handling */ - - if (gvc->g) { - gvle = gvc->layout.engine; - if (gvle && gvle->cleanup) - gvle->cleanup(gvc->g); - graph_cleanup(gvc->g); - agclose(gvc->g); - } - - aginit (g, AGRAPH, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - aginit (g, AGNODE, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); - aginit (g, AGEDGE, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - gvc->g = g; - GD_gvc(g) = gvc; - if (gvLayout(gvc, g, layout) == -1) - return; /* FIXME - need some error handling */ - job->selected_obj = NULL; - job->current_obj = NULL; - job->needs_refresh = 1; -} - -static void gvevent_layout (GVJ_t * job, const char *layout) -{ - gvLayout(job->gvc, job->gvc->g, layout); -} - -static void gvevent_render (GVJ_t * job, const char *format, const char *filename) -{ -/* If gvc->jobs is set, a new job for doing the rendering won't be created. - * If gvc->active_jobs is set, this will be used in a call to gv_end_job. - * If we assume this function is called by an interactive front-end which - * actually wants to write a file, the above possibilities can cause problems, - * with either gvc->job being NULL or the creation of a new window. To avoid - * this, we null out these values for rendering the file, and restore them - * afterwards. John may have a better way around this. - */ - GVJ_t* save_jobs; - GVJ_t* save_active; - if (job->gvc->jobs && (job->gvc->job == NULL)) { - save_jobs = job->gvc->jobs; - save_active = job->gvc->active_jobs; - job->gvc->active_jobs = job->gvc->jobs = NULL; - } - else - save_jobs = NULL; - gvRenderFilename(job->gvc, job->gvc->g, format, filename); - if (save_jobs) { - job->gvc->jobs = save_jobs; - job->gvc->active_jobs = save_active; - } -} - - -gvevent_key_binding_t gvevent_key_binding[] = { - {"Q", quit_cb}, - {"Left", left_cb}, - {"KP_Left", left_cb}, - {"Right", right_cb}, - {"KP_Right", right_cb}, - {"Up", up_cb}, - {"KP_Up", up_cb}, - {"Down", down_cb}, - {"KP_Down", down_cb}, - {"plus", zoom_in_cb}, - {"KP_Add", zoom_in_cb}, - {"minus", zoom_out_cb}, - {"KP_Subtract", zoom_out_cb}, - {"F", toggle_fit_cb}, -}; - -int gvevent_key_binding_size = ARRAY_SIZE(gvevent_key_binding); - -gvdevice_callbacks_t gvdevice_callbacks = { - gvevent_refresh, - gvevent_button_press, - gvevent_button_release, - gvevent_motion, - gvevent_modify, - gvevent_delete, - gvevent_read, - gvevent_layout, - gvevent_render, -}; diff --git a/internal/ccall/gvc/gvio.h b/internal/ccall/gvc/gvio.h deleted file mode 100644 index b6d1258..0000000 --- a/internal/ccall/gvc/gvio.h +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVDEVICE_H -#define GVDEVICE_H - -#include "gvcjob.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef GVDLL -#define extern __declspec(dllexport) -#else -#define extern -#endif - -/*visual studio*/ -#ifdef WIN32 -#ifndef GVC_EXPORTS -#undef extern -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - - extern size_t gvwrite (GVJ_t * job, const char *s, size_t len); - extern size_t gvfwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream); - extern int gvferror (FILE *stream); - extern int gvputc(GVJ_t * job, int c); - extern int gvputs(GVJ_t * job, const char *s); - extern int gvflush (GVJ_t * job); - extern void gvprintf(GVJ_t * job, const char *format, ...); - extern void gvprintdouble(GVJ_t * job, double num); - extern void gvprintpointf(GVJ_t * job, pointf p); - extern void gvprintpointflist(GVJ_t * job, pointf *p, int n); - -#undef extern - -#ifdef __cplusplus -} -#endif - -#endif /* GVDEVICE_H */ diff --git a/internal/ccall/gvc/gvjobs.c b/internal/ccall/gvc/gvjobs.c deleted file mode 100644 index ec722b0..0000000 --- a/internal/ccall/gvc/gvjobs.c +++ /dev/null @@ -1,153 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "memory.h" -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" - -static GVJ_t *output_filename_job; -static GVJ_t *output_langname_job; - -/* - * -T and -o can be specified in any order relative to the other, e.g. - * -T -T -o -o - * -T -o -o -T - * The first -T is paired with the first -o, the second with the second, and so on. - * - * If there are more -T than -o, then the last -o is repeated for the remaining -T - * and vice-versa - * - * If there are no -T or -o then a single job is instantiated. - * - * If there is no -T on the first job, then "dot" is used. - * - * As many -R as are specified before a completed -T -o pair (according to the above rules) - * are used as renderer-specific switches for just that one job. -R must be restated for - * each job. - */ - -/* -o switches */ -void gvjobs_output_filename(GVC_t * gvc, const char *name) -{ - if (!gvc->jobs) { - output_filename_job = gvc->job = gvc->jobs = zmalloc(sizeof(GVJ_t)); - } else { - if (!output_filename_job) { - output_filename_job = gvc->jobs; - } else { - if (!output_filename_job->next) { - output_filename_job->next = zmalloc(sizeof(GVJ_t)); - } - output_filename_job = output_filename_job->next; - } - } - output_filename_job->output_filename = name; - output_filename_job->gvc = gvc; -} - -/* -T switches */ -boolean gvjobs_output_langname(GVC_t * gvc, const char *name) -{ - if (!gvc->jobs) { - output_langname_job = gvc->job = gvc->jobs = zmalloc(sizeof(GVJ_t)); - } else { - if (!output_langname_job) { - output_langname_job = gvc->jobs; - } else { - if (!output_langname_job->next) { - output_langname_job->next = zmalloc(sizeof(GVJ_t)); - } - output_langname_job = output_langname_job->next; - } - } - output_langname_job->output_langname = name; - output_langname_job->gvc = gvc; - - /* load it now to check that it exists */ - if (gvplugin_load(gvc, API_device, name)) - return TRUE; - return FALSE; -} - -GVJ_t *gvjobs_first(GVC_t * gvc) -{ - return (gvc->job = gvc->jobs); -} - -GVJ_t *gvjobs_next(GVC_t * gvc) -{ - GVJ_t *job = gvc->job->next; - - if (job) { - /* if langname not specified, then repeat previous value */ - if (!job->output_langname) - job->output_langname = gvc->job->output_langname; - /* if filename not specified, then leave NULL to indicate stdout */ - } - return (gvc->job = job); -} - -gv_argvlist_t *gvNEWargvlist(void) -{ - return (gv_argvlist_t*)zmalloc(sizeof(gv_argvlist_t)); -} - -void gv_argvlist_set_item(gv_argvlist_t *list, int index, char *item) -{ - if (index >= list->alloc) { - list->alloc = index + 10; - list->argv = grealloc(list->argv, (list->alloc)*(sizeof(char*))); - } - list->argv[index] = item; -} - -void gv_argvlist_reset(gv_argvlist_t *list) -{ - if (list->argv) - free(list->argv); - list->argv = NULL; - list->alloc = 0; - list->argc = 0; -} - -void gv_argvlist_free(gv_argvlist_t *list) -{ - if (list->argv) - free(list->argv); - free(list); -} - -void gvjobs_delete(GVC_t * gvc) -{ - GVJ_t *job, *j; - - job = gvc->jobs; - while ((j = job)) { - job = job->next; - gv_argvlist_reset(&(j->selected_obj_attributes)); - gv_argvlist_reset(&(j->selected_obj_type_name)); - if (j->active_tooltip) - free(j->active_tooltip); - if (j->selected_href) - free(j->selected_href); - free(j); - } - gvc->jobs = gvc->job = gvc->active_jobs = output_filename_job = output_langname_job = - NULL; - gvc->common.viewNum = 0; -} diff --git a/internal/ccall/gvc/gvlayout.c b/internal/ccall/gvc/gvlayout.c deleted file mode 100644 index 07b4a67..0000000 --- a/internal/ccall/gvc/gvlayout.c +++ /dev/null @@ -1,117 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * layout engine wrapper - * - */ - -#include "config.h" - -#include "const.h" -#include "gvplugin_layout.h" -#include "gvcint.h" -#include "cgraph.h" -#include "gvcproc.h" -#include "gvc.h" - -extern void graph_init(Agraph_t *g, boolean use_rankdir); -extern void graph_cleanup(Agraph_t *g); -extern void gv_fixLocale (int set); -extern void gv_initShapes (void); - -int gvlayout_select(GVC_t * gvc, const char *layout) -{ - gvplugin_available_t *plugin; - gvplugin_installed_t *typeptr; - - plugin = gvplugin_load(gvc, API_layout, layout); - if (plugin) { - typeptr = plugin->typeptr; - gvc->layout.type = typeptr->type; - gvc->layout.engine = (gvlayout_engine_t *) (typeptr->engine); - gvc->layout.id = typeptr->id; - gvc->layout.features = (gvlayout_features_t *) (typeptr->features); - return GVRENDER_PLUGIN; /* FIXME - need better return code */ - } - return NO_SUPPORT; -} - -/* gvLayoutJobs: - * Layout input graph g based on layout engine attached to gvc. - * Check that the root graph has been initialized. If not, initialize it. - * Return 0 on success. - */ -int gvLayoutJobs(GVC_t * gvc, Agraph_t * g) -{ - gvlayout_engine_t *gvle; - char *p; - int rc; - - agbindrec(g, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_gvc(g) = gvc; - if (g != agroot(g)) - GD_gvc(agroot(g)) = gvc; - - if ((p = agget(g, "layout"))) { - gvc->layout.engine = NULL; - rc = gvlayout_select(gvc, p); - if (rc == NO_SUPPORT) { - agerr (AGERR, "Layout type: \"%s\" not recognized. Use one of:%s\n", - p, gvplugin_list(gvc, API_layout, p)); - return -1; - } - } - - gvle = gvc->layout.engine; - if (! gvle) - return -1; - - gv_fixLocale (1); - graph_init(g, gvc->layout.features->flags & LAYOUT_USES_RANKDIR); - GD_drawing(agroot(g)) = GD_drawing(g); - gv_initShapes (); - if (gvle && gvle->layout) { - gvle->layout(g); - - - if (gvle->cleanup) - GD_cleanup(g) = gvle->cleanup; - } - gv_fixLocale (0); - return 0; -} - -/* gvFreeLayout: - * Free layout resources. - * First, if the graph has a layout-specific cleanup function attached, - * use it and reset. - * Then, if the root graph has not been cleaned up, clean it up and reset. - * Only the root graph has GD_drawing non-null. - */ -int gvFreeLayout(GVC_t * gvc, Agraph_t * g) -{ - /* skip if no Agraphinfo_t yet */ - if (! agbindrec(g, "Agraphinfo_t", 0, TRUE)) - return 0; - - if (GD_cleanup(g)) { - (GD_cleanup(g))(g); - GD_cleanup(g) = NULL; - } - - if (GD_drawing(g)) { - graph_cleanup(g); - } - return 0; -} diff --git a/internal/ccall/gvc/gvloadimage.c b/internal/ccall/gvc/gvloadimage.c deleted file mode 100644 index 1bb4e83..0000000 --- a/internal/ccall/gvc/gvloadimage.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * graphics code generator wrapper - * - * This library forms the socket for run-time loadable loadimage plugins. - */ - -#include "config.h" - -#include - -#include "const.h" -#include "gvplugin_loadimage.h" -#include "gvcint.h" -#include "gvcproc.h" - -/* for agerr() */ -#include "cgraph.h" - -static int gvloadimage_select(GVJ_t * job, char *str) -{ - gvplugin_available_t *plugin; - gvplugin_installed_t *typeptr; - - plugin = gvplugin_load(job->gvc, API_loadimage, str); - if (plugin) { - typeptr = plugin->typeptr; - job->loadimage.engine = (gvloadimage_engine_t *) (typeptr->engine); - job->loadimage.id = typeptr->id; - return GVRENDER_PLUGIN; - } - return NO_SUPPORT; -} - -void gvloadimage(GVJ_t * job, usershape_t *us, boxf b, boolean filled, const char *target) -{ - gvloadimage_engine_t *gvli; - char type[SMALLBUF]; - - assert(job); - assert(us); - assert(us->name); - assert(us->name[0]); - - strcpy(type, us->stringtype); - strcat(type, ":"); - strcat(type, target); - - if (gvloadimage_select(job, type) == NO_SUPPORT) - agerr (AGWARN, "No loadimage plugin for \"%s\"\n", type); - - if ((gvli = job->loadimage.engine) && gvli->loadimage) - gvli->loadimage(job, us, b, filled); -} diff --git a/internal/ccall/gvc/gvplugin.c b/internal/ccall/gvc/gvplugin.c deleted file mode 100644 index 43cb55e..0000000 --- a/internal/ccall/gvc/gvplugin.c +++ /dev/null @@ -1,792 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#ifdef ENABLE_LTDL -#include -#endif - -#include -#include "memory.h" -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" -#include "gvcint.h" -#include "gvcproc.h" -#include "gvio.h" - -#include "const.h" - -#ifndef HAVE_STRCASECMP -extern int strcasecmp(const char *s1, const char *s2); -#endif - -#ifdef WIN32 -#define strdup(x) _strdup(x) -#endif - -/* - * Define an apis array of name strings using an enumerated api_t as index. - * The enumerated type is defined gvplugin.h. The apis array is - * inititialized here by redefining ELEM and reinvoking APIS. - */ -#define ELEM(x) #x, -static char *api_names[] = { APIS }; /* "render", "layout", ... */ - -#undef ELEM - -/* translate a string api name to its type, or -1 on error */ -api_t gvplugin_api(char *str) -{ - int api; - - for (api = 0; api < ARRAY_SIZE(api_names); api++) { - if (strcmp(str, api_names[api]) == 0) - return (api_t) api; - } - return -1; /* invalid api */ -} - -/* translate api_t into string name, or NULL */ -char *gvplugin_api_name(api_t api) -{ - if (api >= ARRAY_SIZE(api_names)) - return NULL; - return api_names[api]; -} - -/* install a plugin description into the list of available plugins - * list is alpha sorted by type (not including :dependency), then - * quality sorted within the type, then, if qualities are the same, - * last install wins. - */ -boolean gvplugin_install(GVC_t * gvc, api_t api, const char *typestr, - int quality, gvplugin_package_t * package, gvplugin_installed_t * typeptr) -{ - gvplugin_available_t *plugin, **pnext; -#define TYPSIZ 63 - char *p, pins[TYPSIZ + 1], pnxt[TYPSIZ + 1]; - - strncpy(pins, typestr, TYPSIZ); - if ((p = strchr(pins, ':'))) - *p = '\0'; - - /* point to the beginning of the linked list of plugins for this api */ - pnext = &(gvc->apis[api]); - - /* keep alpha-sorted and insert new duplicates ahead of old */ - while (*pnext) { - strncpy(pnxt, (*pnext)->typestr, TYPSIZ); - if ((p = strchr(pnxt, ':'))) - *p = '\0'; - if (strcmp(pins, pnxt) <= 0) - break; - pnext = &((*pnext)->next); - } - - /* keep quality sorted within type and insert new duplicates ahead of old */ - while (*pnext) { - strncpy(pnxt, (*pnext)->typestr, TYPSIZ); - if ((p = strchr(pnxt, ':'))) - *p = '\0'; - if (strcmp(pins, pnxt) != 0) - break; - if (quality >= (*pnext)->quality) - break; - pnext = &((*pnext)->next); - } - - plugin = GNEW(gvplugin_available_t); - plugin->next = *pnext; - *pnext = plugin; - plugin->typestr = typestr; - plugin->quality = quality; - plugin->package = package; - plugin->typeptr = typeptr; /* null if not loaded */ - - return TRUE; -} - -/* Activate a plugin description in the list of available plugins. - * This is used when a plugin-library loaded because of demand for - * one of its plugins. It updates the available plugin data with - * pointers into the loaded library. - * NB the quality value is not replaced as it might have been - * manually changed in the config file. - */ -static boolean gvplugin_activate(GVC_t * gvc, api_t api, - const char *typestr, char *name, char *path, gvplugin_installed_t * typeptr) -{ - gvplugin_available_t **pnext; - - /* point to the beginning of the linked list of plugins for this api */ - pnext = &(gvc->apis[api]); - - while (*pnext) { - if ((strcasecmp(typestr, (*pnext)->typestr) == 0) - && (strcasecmp(name, (*pnext)->package->name) == 0) - && ((*pnext)->package->path != 0) - && (strcasecmp(path, (*pnext)->package->path) == 0)) { - (*pnext)->typeptr = typeptr; - return TRUE; - } - pnext = &((*pnext)->next); - } - return FALSE; -} - -gvplugin_library_t *gvplugin_library_load(GVC_t * gvc, char *path) -{ -#ifdef ENABLE_LTDL - lt_dlhandle hndl; - lt_ptr ptr; - char *s, *sym; - int len; - static char *p; - static int lenp; - char *libdir; - char *suffix = "_LTX_library"; - - if (!gvc->common.demand_loading) - return NULL; - - libdir = gvconfig_libdir(gvc); - len = strlen(libdir) + 1 + strlen(path) + 1; - if (len > lenp) { - lenp = len + 20; - if (p) - p = grealloc(p, lenp); - else - p = gmalloc(lenp); - } -#ifdef WIN32 - if (path[1] == ':') { -#else - if (path[0] == '/') { -#endif - strcpy(p, path); - } else { - strcpy(p, libdir); - strcat(p, DIRSEP); - strcat(p, path); - } - - if (lt_dlinit()) { - agerr(AGERR, "failed to init libltdl\n"); - return NULL; - } - //hndl = lt_dlopen(p); - if (!hndl) { - agerr(AGWARN, "Could not load \"%s\" - %s\n", p, (char *) lt_dlerror()); - return NULL; - } - if (gvc->common.verbose >= 2) - fprintf(stderr, "Loading %s\n", p); - - s = strrchr(p, DIRSEP[0]); - len = strlen(s); -#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) - if (len < strlen("/gvplugin_x")) { -#else - if (len < strlen("/libgvplugin_x")) { -#endif - agerr(AGERR, "invalid plugin path \"%s\"\n", p); - return NULL; - } - sym = gmalloc(len + strlen(suffix) + 1); -#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) - strcpy(sym, s + 1); /* strip leading "/" */ -#else - strcpy(sym, s + 4); /* strip leading "/lib" or "/cyg" */ -#endif -#if defined(__CYGWIN__) || defined(__MINGW32__) - s = strchr(sym, '-'); /* strip trailing "-1.dll" */ -#else - s = strchr(sym, '.'); /* strip trailing ".so.0" or ".dll" or ".sl" */ -#endif - strcpy(s, suffix); /* append "_LTX_library" */ - - //ptr = lt_dlsym(hndl, sym); - if (!ptr) { - agerr(AGERR, "failed to resolve %s in %s\n", sym, p); - free(sym); - return NULL; - } - free(sym); - return (gvplugin_library_t *) (ptr); -#else - agerr(AGERR, "dynamic loading not available\n"); - return NULL; -#endif -} - - -/* load a plugin of type=str - the str can optionally contain one or more ":dependencies" - - examples: - png - png:cairo - fully qualified: - png:cairo:cairo - png:cairo:gd - png:gd:gd - -*/ -gvplugin_available_t *gvplugin_load(GVC_t * gvc, api_t api, const char *str) -{ - gvplugin_available_t **pnext, *rv; - gvplugin_library_t *library; - gvplugin_api_t *apis; - gvplugin_installed_t *types; -#define TYPBUFSIZ 64 - char reqtyp[TYPBUFSIZ], typ[TYPBUFSIZ]; - char *reqdep, *dep = NULL, *reqpkg; - int i; - api_t apidep; - - if (api == API_device || api == API_loadimage) - /* api dependencies - FIXME - find better way to code these *s */ - apidep = API_render; - else - apidep = api; - - strncpy(reqtyp, str, TYPBUFSIZ - 1); - reqdep = strchr(reqtyp, ':'); - if (reqdep) { - *reqdep++ = '\0'; - reqpkg = strchr(reqdep, ':'); - if (reqpkg) - *reqpkg++ = '\0'; - } else - reqpkg = NULL; - - /* iterate the linked list of plugins for this api */ - for (pnext = &(gvc->apis[api]); *pnext; pnext = &((*pnext)->next)) { - strncpy(typ, (*pnext)->typestr, TYPBUFSIZ - 1); - dep = strchr(typ, ':'); - if (dep) - *dep++ = '\0'; - if (strcmp(typ, reqtyp)) - continue; /* types empty or mismatched */ - if (dep && reqdep && strcmp(dep, reqdep)) - continue; /* dependencies not empty, but mismatched */ - if (!reqpkg || strcmp(reqpkg, (*pnext)->package->name) == 0) { - /* found with no packagename constraints, or with required matching packagname */ - - if (dep && (apidep != api)) /* load dependency if needed, continue if can't find */ - if (!(gvplugin_load(gvc, apidep, dep))) - continue; - break; - } - } - rv = *pnext; - - if (rv && rv->typeptr == NULL) { - library = gvplugin_library_load(gvc, rv->package->path); - if (library) { - - /* Now activate the library with real type ptrs */ - for (apis = library->apis; (types = apis->types); apis++) { - for (i = 0; types[i].type; i++) { - /* NB. quality is not checked or replaced - * in case user has manually edited quality in config */ - gvplugin_activate(gvc, apis->api, types[i].type, library->packagename, rv->package->path, &types[i]); - } - } - if (gvc->common.verbose >= 1) - fprintf(stderr, "Activated plugin library: %s\n", rv->package->path ? rv->package->path : ""); - } - } - - /* one last check for successfull load */ - if (rv && rv->typeptr == NULL) - rv = NULL; - - if (rv && gvc->common.verbose >= 1) - fprintf(stderr, "Using %s: %s:%s\n", api_names[api], rv->typestr, rv->package->name); - - gvc->api[api] = rv; - return rv; -} - -/* assemble a string list of available plugins - * non-re-entrant as character store is shared - */ -char *gvplugin_list(GVC_t * gvc, api_t api, const char *str) -{ - static int first = 1; - gvplugin_available_t **pnext, **plugin; - char *bp; - char *s, *p, *q, *typestr_last; - boolean new = TRUE; - static agxbuf xb; - - /* check for valid str */ - if (!str) - return NULL; - - if (first) { - agxbinit(&xb, 0, 0); - first = 0; - } - - /* does str have a :path modifier? */ - s = strdup(str); - p = strchr(s, ':'); - if (p) - *p++ = '\0'; - - /* point to the beginning of the linked list of plugins for this api */ - plugin = &(gvc->apis[api]); - - if (p) { /* if str contains a ':', and if we find a match for the type, - then just list the alternative paths for the plugin */ - for (pnext = plugin; *pnext; pnext = &((*pnext)->next)) { - q = strdup((*pnext)->typestr); - if ((p = strchr(q, ':'))) - *p++ = '\0'; - /* list only the matching type, or all types if s is an empty string */ - if (!s[0] || strcasecmp(s, q) == 0) { - /* list each member of the matching type as "type:path" */ - agxbputc(&xb, ' '); - agxbput(&xb, (*pnext)->typestr); - agxbputc(&xb, ':'); - agxbput(&xb, (*pnext)->package->name); - new = FALSE; - } - free(q); - } - } - free(s); - if (new) { /* if the type was not found, or if str without ':', - then just list available types */ - typestr_last = NULL; - for (pnext = plugin; *pnext; pnext = &((*pnext)->next)) { - /* list only one instance of type */ - q = strdup((*pnext)->typestr); - if ((p = strchr(q, ':'))) - *p++ = '\0'; - if (!typestr_last || strcasecmp(typestr_last, q) != 0) { - /* list it as "type" i.e. w/o ":path" */ - agxbputc(&xb, ' '); - agxbput(&xb, q); - new = FALSE; - } - if (!typestr_last) - free(typestr_last); - typestr_last = q; - } - if (!typestr_last) - free(typestr_last); - } - if (new) - bp = ""; - else - bp = agxbuse(&xb); - return bp; -} - -/* gvPluginList: - * Return list of plugins of type kind. - * The size of the list is stored in sz. - * The caller is responsible for freeing the storage. This involves - * freeing each item, then the list. - * Returns NULL on error, or if there are no plugins. - * In the former case, sz is unchanged; in the latter, sz = 0. - * - * At present, the str argument is unused, but may be used to modify - * the search as in gvplugin_list above. - */ -char **gvPluginList(GVC_t * gvc, const char *kind, int *sz, const char *str) -{ - int api; - gvplugin_available_t **pnext, **plugin; - int cnt = 0; - char **list = NULL; - char *p, *q, *typestr_last; - - if (!kind) - return NULL; - for (api = 0; api < ARRAY_SIZE(api_names); api++) { - if (!strcasecmp(kind, api_names[api])) - break; - } - if (api == ARRAY_SIZE(api_names)) { - agerr(AGERR, "unrecognized api name \"%s\"\n", kind); - return NULL; - } - - /* point to the beginning of the linked list of plugins for this api */ - plugin = &(gvc->apis[api]); - typestr_last = NULL; - for (pnext = plugin; *pnext; pnext = &((*pnext)->next)) { - /* list only one instance of type */ - q = strdup((*pnext)->typestr); - if ((p = strchr(q, ':'))) - *p++ = '\0'; - if (!typestr_last || strcasecmp(typestr_last, q) != 0) { - list = RALLOC(cnt + 1, list, char *); - list[cnt++] = q; - } - typestr_last = q; - } - - *sz = cnt; - return list; -} - -void gvplugin_write_status(GVC_t * gvc) -{ - int api; - -#ifdef ENABLE_LTDL - if (gvc->common.demand_loading) { - fprintf(stderr, "The plugin configuration file:\n\t%s\n", gvc->config_path); - if (gvc->config_found) - fprintf(stderr, "\t\twas successfully loaded.\n"); - else - fprintf(stderr, "\t\twas not found or not usable. No on-demand plugins.\n"); - } else { - fprintf(stderr, "Demand loading of plugins is disabled.\n"); - } -#endif - - for (api = 0; api < ARRAY_SIZE(api_names); api++) { - if (gvc->common.verbose >= 2) - fprintf(stderr, " %s\t: %s\n", api_names[api], gvplugin_list(gvc, api, ":")); - else - fprintf(stderr, " %s\t: %s\n", api_names[api], gvplugin_list(gvc, api, "?")); - } - -} - -Agraph_t *gvplugin_graph(GVC_t * gvc) -{ - Agraph_t *g, *sg, *ssg; - Agnode_t *n, *m, *loadimage_n, *renderer_n, *device_n, *textlayout_n, *layout_n; - Agedge_t *e; - Agsym_t *a; - gvplugin_package_t *package; - gvplugin_available_t **pnext; - char bufa[100], *buf1, *buf2, bufb[100], *p, *q, *lq, *t; - int api, neededge_loadimage, neededge_device; - - g = agopen("G", Agdirected, NIL(Agdisc_t *)); - agattr(g, AGRAPH, "label", ""); - agattr(g, AGRAPH, "rankdir", ""); - agattr(g, AGRAPH, "rank", ""); - agattr(g, AGRAPH, "ranksep", ""); - agattr(g, AGNODE, "label", NODENAME_ESC); - agattr(g, AGNODE, "shape", ""); - agattr(g, AGNODE, "style", ""); - agattr(g, AGNODE, "width", ""); - agattr(g, AGEDGE, "style", ""); - - a = agfindgraphattr(g, "rankdir"); - agxset(g, a, "LR"); - - a = agfindgraphattr(g, "ranksep"); - agxset(g, a, "2.5"); - - a = agfindgraphattr(g, "label"); - agxset(g, a, "Plugins"); - - for (package = gvc->packages; package; package = package->next) { - loadimage_n = renderer_n = device_n = textlayout_n = layout_n = NULL; - neededge_loadimage = neededge_device = 0; - strcpy(bufa, "cluster_"); - strcat(bufa, package->name); - sg = agsubg(g, bufa, 1); - a = agfindgraphattr(sg, "label"); - agxset(sg, a, package->name); - strcpy(bufa, package->name); - strcat(bufa, "_"); - buf1 = bufa + strlen(bufa); - for (api = 0; api < ARRAY_SIZE(api_names); api++) { - strcpy(buf1, api_names[api]); - ssg = agsubg(sg, bufa, 1); - a = agfindgraphattr(ssg, "rank"); - agxset(ssg, a, "same"); - strcat(buf1, "_"); - buf2 = bufa + strlen(bufa); - for (pnext = &(gvc->apis[api]); *pnext; pnext = &((*pnext)->next)) { - if ((*pnext)->package == package) { - t = q = strdup((*pnext)->typestr); - if ((p = strchr(q, ':'))) - *p++ = '\0'; - /* Now p = renderer, e.g. "gd" - * and q = device, e.g. "png" - * or q = loadimage, e.g. "png" */ - switch (api) { - case API_device: - case API_loadimage: - /* draw device as box - record last device in plugin (if any) in device_n */ - /* draw loadimage as box - record last loadimage in plugin (if any) in loadimage_n */ - - /* hack for aliases */ - lq = q; - if (!strncmp(q, "jp", 2)) { - q = "jpg"; /* canonical - for node name */ - lq = "jpeg\\njpe\\njpg"; /* list - for label */ - } - else if (!strncmp(q, "tif", 3)) { - q = "tif"; - lq = "tiff\\ntif"; - } - else if (!strcmp(q, "x11") || !strcmp(q, "xlib")) { - q = "x11"; - lq = "x11\\nxlib"; - } - else if (!strcmp(q, "dot") || !strcmp(q, "gv")) { - q = "gv"; - lq = "gv\\ndot"; - } - - strcpy(buf2, q); - n = agnode(ssg, bufa, 1); - a = agfindnodeattr(g, "label"); - agxset(n, a, lq); - a = agfindnodeattr(g, "width"); - agxset(n, a, "1.0"); - a = agfindnodeattr(g, "shape"); - if (api == API_device) { - agxset(n, a, "box"); - device_n = n; - } - else { - agxset(n, a, "box"); - loadimage_n = n; - } - if (!(p && *p)) { - strcpy(bufb, "render_cg"); - m = agfindnode(sg, bufb); - if (!m) { - m = agnode(sg, bufb, 1); - a = agfindgraphattr(g, "label"); - agxset(m, a, "cg"); - } - agedge(sg, m, n, NULL, 1); - } - break; - case API_render: - /* draw renderers as ellipses - record last renderer in plugin (if any) in renderer_n */ - strcpy(bufb, api_names[api]); - strcat(bufb, "_"); - strcat(bufb, q); - renderer_n = n = agnode(ssg, bufb, 1); - a = agfindnodeattr(g, "label"); - agxset(n, a, q); - break; - case API_textlayout: - /* draw textlayout as invtriangle - record last textlayout in plugin (if any) in textlayout_n */ - /* FIXME? only one textlayout is loaded. Why? */ - strcpy(bufb, api_names[api]); - strcat(bufb, "_"); - strcat(bufb, q); - textlayout_n = n = agnode(ssg, bufb, 1); - a = agfindnodeattr(g, "shape"); - agxset(n, a, "invtriangle"); - a = agfindnodeattr(g, "label"); - agxset(n, a, "T"); - break; - case API_layout: - /* draw textlayout as hexagon - record last layout in plugin (if any) in layout_n */ - strcpy(bufb, api_names[api]); - strcat(bufb, "_"); - strcat(bufb, q); - layout_n = n = agnode(ssg, bufb, 1); - a = agfindnodeattr(g, "shape"); - agxset(n, a, "hexagon"); - a = agfindnodeattr(g, "label"); - agxset(n, a, q); - break; - default: - break; - } - free(t); - } - } - // add some invisible nodes (if needed) and invisible edges to - // improve layout of cluster - if (api == API_loadimage && !loadimage_n) { - neededge_loadimage = 1; - strcpy(buf2, "invis"); - loadimage_n = n = agnode(ssg, bufa, 1); - a = agfindnodeattr(g, "style"); - agxset(n, a, "invis"); - a = agfindnodeattr(g, "label"); - agxset(n, a, ""); - a = agfindnodeattr(g, "width"); - agxset(n, a, "1.0"); - - strcpy(buf2, "invis_src"); - n = agnode(g, bufa, 1); - a = agfindnodeattr(g, "style"); - agxset(n, a, "invis"); - a = agfindnodeattr(g, "label"); - agxset(n, a, ""); - - e = agedge(g, n, loadimage_n, NULL, 1); - a = agfindedgeattr(g, "style"); - agxset(e, a, "invis"); - } - if (api == API_render && !renderer_n) { - neededge_loadimage = 1; - neededge_device = 1; - strcpy(buf2, "invis"); - renderer_n = n = agnode(ssg, bufa, 1); - a = agfindnodeattr(g, "style"); - agxset(n, a, "invis"); - a = agfindnodeattr(g, "label"); - agxset(n, a, ""); - } - if (api == API_device && !device_n) { - neededge_device = 1; - strcpy(buf2, "invis"); - device_n = n = agnode(ssg, bufa, 1); - a = agfindnodeattr(g, "style"); - agxset(n, a, "invis"); - a = agfindnodeattr(g, "label"); - agxset(n, a, ""); - a = agfindnodeattr(g, "width"); - agxset(n, a, "1.0"); - } - } - if (neededge_loadimage) { - e = agedge(sg, loadimage_n, renderer_n, NULL, 1); - a = agfindedgeattr(g, "style"); - agxset(e, a, "invis"); - } - if (neededge_device) { - e = agedge(sg, renderer_n, device_n, NULL, 1); - a = agfindedgeattr(g, "style"); - agxset(e, a, "invis"); - } - if (textlayout_n) { - e = agedge(sg, loadimage_n, textlayout_n, NULL, 1); - a = agfindedgeattr(g, "style"); - agxset(e, a, "invis"); - } - if (layout_n) { - e = agedge(sg, loadimage_n, layout_n, NULL, 1); - a = agfindedgeattr(g, "style"); - agxset(e, a, "invis"); - } - } - - ssg = agsubg(g, "output_formats", 1); - a = agfindgraphattr(ssg, "rank"); - agxset(ssg, a, "same"); - for (package = gvc->packages; package; package = package->next) { - strcpy(bufa, package->name); - strcat(bufa, "_"); - buf1 = bufa + strlen(bufa); - for (api = 0; api < ARRAY_SIZE(api_names); api++) { - strcpy(buf1, api_names[api]); - strcat(buf1, "_"); - buf2 = bufa + strlen(bufa); - for (pnext = &(gvc->apis[api]); *pnext; pnext = &((*pnext)->next)) { - if ((*pnext)->package == package) { - t = q = strdup((*pnext)->typestr); - if ((p = strchr(q, ':'))) - *p++ = '\0'; - /* Now p = renderer, e.g. "gd" - * and q = device, e.g. "png" - * or q = imageloader, e.g. "png" */ - - /* hack for aliases */ - lq = q; - if (!strncmp(q, "jp", 2)) { - q = "jpg"; /* canonical - for node name */ - lq = "jpeg\\njpe\\njpg"; /* list - for label */ - } - else if (!strncmp(q, "tif", 3)) { - q = "tif"; - lq = "tiff\\ntif"; - } - else if (!strcmp(q, "x11") || !strcmp(q, "xlib")) { - q = "x11"; - lq = "x11\\nxlib"; - } - else if (!strcmp(q, "dot") || !strcmp(q, "gv")) { - q = "gv"; - lq = "gv\\ndot"; - } - - switch (api) { - case API_device: - strcpy(buf2, q); - n = agnode(g, bufa, 1); - strcpy(bufb, "output_"); - strcat(bufb, q); - m = agfindnode(ssg, bufb); - if (!m) { - m = agnode(ssg, bufb, 1); - a = agfindnodeattr(g, "label"); - agxset(m, a, lq); - a = agfindnodeattr(g, "shape"); - agxset(m, a, "note"); - } - e = agfindedge(g, n, m); - if (!e) - e = agedge(g, n, m, NULL, 1); - if (p && *p) { - strcpy(bufb, "render_"); - strcat(bufb, p); - m = agfindnode(ssg, bufb); - if (!m) - m = agnode(g, bufb, 1); - e = agfindedge(g, m, n); - if (!e) - e = agedge(g, m, n, NULL, 1); - } - break; - case API_loadimage: - strcpy(buf2, q); - n = agnode(g, bufa, 1); - strcpy(bufb, "input_"); - strcat(bufb, q); - m = agfindnode(g, bufb); - if (!m) { - m = agnode(g, bufb, 1); - a = agfindnodeattr(g, "label"); - agxset(m, a, lq); - a = agfindnodeattr(g, "shape"); - agxset(m, a, "note"); - } - e = agfindedge(g, m, n); - if (!e) - e = agedge(g, m, n, NULL, 1); - strcpy(bufb, "render_"); - strcat(bufb, p); - m = agfindnode(g, bufb); - if (!m) - m = agnode(g, bufb, 1); - e = agfindedge(g, n, m); - if (!e) - e = agedge(g, n, m, NULL, 1); - break; - default: - break; - } - free(t); - } - } - } - } - - return g; -} diff --git a/internal/ccall/gvc/gvplugin.h b/internal/ccall/gvc/gvplugin.h deleted file mode 100644 index f681d92..0000000 --- a/internal/ccall/gvc/gvplugin.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Header used by plugins */ - -#ifndef GVPLUGIN_H -#define GVPLUGIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "gvcext.h" - -/* - * Terminology: - * - * package - e.g. libgvplugin_cairo.so - * api - e.g. render - * type - e.g. "png", "ps" - */ - - typedef struct { - int id; /* an id that is only unique within a package - of plugins of the same api. - A renderer-type such as "png" in the cairo package - has an id that is different from the "ps" type - in the same package */ - const char *type; /* a string name, such as "png" or "ps" that - distinguishes different types withing the same - (renderer in this case) */ - int quality; /* an arbitrary integer used for ordering plugins of - the same type from different packages */ - void *engine; /* pointer to the jump table for the plugin */ - void *features; /* pointer to the feature description - void* because type varies by api */ - } gvplugin_installed_t; - - typedef struct { - api_t api; - gvplugin_installed_t *types; - } gvplugin_api_t; - - typedef struct { - char *packagename; /* used when this plugin is builtin and has - no pathname */ - gvplugin_api_t *apis; - } gvplugin_library_t; - -#ifdef __cplusplus -} -#endif -#endif /* GVPLUGIN_H */ diff --git a/internal/ccall/gvc/gvplugin_device.h b/internal/ccall/gvc/gvplugin_device.h deleted file mode 100644 index feadb05..0000000 --- a/internal/ccall/gvc/gvplugin_device.h +++ /dev/null @@ -1,34 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVDEVICE_PLUGIN_H -#define GVDEVICE_PLUGIN_H - -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" - -#ifdef __cplusplus -extern "C" { -#endif - - struct gvdevice_engine_s { - void (*initialize) (GVJ_t * firstjob); - void (*format) (GVJ_t * firstjob); - void (*finalize) (GVJ_t * firstjob); - }; - -#ifdef __cplusplus -} -#endif -#endif /* GVDEVICE_PLUGIN_H */ diff --git a/internal/ccall/gvc/gvplugin_layout.h b/internal/ccall/gvc/gvplugin_layout.h deleted file mode 100644 index 2d7b6fe..0000000 --- a/internal/ccall/gvc/gvplugin_layout.h +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_LAYOUT_H -#define GVPLUGIN_LAYOUT_H - -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" - -#ifdef __cplusplus -extern "C" { -#endif - - struct gvlayout_engine_s { - void (*layout) (graph_t * g); - void (*cleanup) (graph_t * g); - }; - -#ifdef __cplusplus -} -#endif -#endif /* GVPLUGIN_LAYOUT_H */ diff --git a/internal/ccall/gvc/gvplugin_loadimage.h b/internal/ccall/gvc/gvplugin_loadimage.h deleted file mode 100644 index 8a97727..0000000 --- a/internal/ccall/gvc/gvplugin_loadimage.h +++ /dev/null @@ -1,51 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_IMAGELOAD_H -#define GVPLUGIN_IMAGELOAD_H - -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef GVDLL -# define extern __declspec(dllexport) -#endif - -/*visual studio*/ -#ifdef WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - -extern boolean gvusershape_file_access(usershape_t *us); -extern void gvusershape_file_release(usershape_t *us); - - struct gvloadimage_engine_s { - void (*loadimage) (GVJ_t *job, usershape_t *us, boxf b, boolean filled); - }; - -#ifdef extern -#undef extern -#endif - -#ifdef __cplusplus -} -#endif -#endif /* GVPLUGIN_IMAGELOAD_H */ diff --git a/internal/ccall/gvc/gvplugin_render.h b/internal/ccall/gvc/gvplugin_render.h deleted file mode 100644 index 4738453..0000000 --- a/internal/ccall/gvc/gvplugin_render.h +++ /dev/null @@ -1,64 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_RENDER_H -#define GVPLUGIN_RENDER_H - -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" - -#ifdef __cplusplus -extern "C" { -#endif - - struct gvrender_engine_s { - void (*begin_job) (GVJ_t * job); - void (*end_job) (GVJ_t * job); - void (*begin_graph) (GVJ_t * job); - void (*end_graph) (GVJ_t * job); - void (*begin_layer) (GVJ_t * job, char *layername, - int layerNum, int numLayers); - void (*end_layer) (GVJ_t * job); - void (*begin_page) (GVJ_t * job); - void (*end_page) (GVJ_t * job); - void (*begin_cluster) (GVJ_t * job); - void (*end_cluster) (GVJ_t * job); - void (*begin_nodes) (GVJ_t * job); - void (*end_nodes) (GVJ_t * job); - void (*begin_edges) (GVJ_t * job); - void (*end_edges) (GVJ_t * job); - void (*begin_node) (GVJ_t * job); - void (*end_node) (GVJ_t * job); - void (*begin_edge) (GVJ_t * job); - void (*end_edge) (GVJ_t * job); - void (*begin_anchor) (GVJ_t * job, - char *href, char *tooltip, char *target, char *id); - void (*end_anchor) (GVJ_t * job); - void (*begin_label) (GVJ_t * job, label_type type); - void (*end_label) (GVJ_t * job); - void (*textspan) (GVJ_t * job, pointf p, textspan_t * span); - void (*resolve_color) (GVJ_t * job, gvcolor_t * color); - void (*ellipse) (GVJ_t * job, pointf * A, int filled); - void (*polygon) (GVJ_t * job, pointf * A, int n, int filled); - void (*beziercurve) (GVJ_t * job, pointf * A, int n, - int arrow_at_start, int arrow_at_end, int); - void (*polyline) (GVJ_t * job, pointf * A, int n); - void (*comment) (GVJ_t * job, char *comment); - void (*library_shape) (GVJ_t * job, char *name, pointf * A, int n, int filled); - }; - -#ifdef __cplusplus -} -#endif -#endif /* GVPLUGIN_RENDER_H */ diff --git a/internal/ccall/gvc/gvplugin_textlayout.h b/internal/ccall/gvc/gvplugin_textlayout.h deleted file mode 100644 index 8ce91ec..0000000 --- a/internal/ccall/gvc/gvplugin_textlayout.h +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_TEXTLAYOUT_H -#define GVPLUGIN_TEXTLAYOUT_H - -#include "types.h" -#include "gvplugin.h" -#include "gvcjob.h" -#include "gvcommon.h" - -#ifdef __cplusplus -extern "C" { -#endif - - struct gvtextlayout_engine_s { - boolean (*textlayout) (textspan_t *span, char** fontpath); - }; - -#ifdef __cplusplus -} -#endif -#endif /* GVPLUGIN_TEXTLAYOUT_H */ diff --git a/internal/ccall/gvc/gvrender.c b/internal/ccall/gvc/gvrender.c deleted file mode 100644 index 05771a4..0000000 --- a/internal/ccall/gvc/gvrender.c +++ /dev/null @@ -1,786 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * graphics code generator wrapper - * - * This library forms the socket for run-time loadable render plugins. - */ - -#include "config.h" - -#include -#include "memory.h" -#include "const.h" -#include "macros.h" -#include "colorprocs.h" -#include "gvplugin_render.h" -#include "cgraph.h" -#include "gvcint.h" -#include "geom.h" -#include "geomprocs.h" -#include "gvcproc.h" - -extern int emit_once(char *str); -extern shape_desc *find_user_shape(const char *name); -extern boolean mapbool(char *s); - -#ifndef HAVE_STRCASECMP -extern int strcasecmp(const char *s1, const char *s2); -#endif - -/* storage for temporary hacks until client API is FP */ -static pointf *AF; -static int sizeAF; -/* end hack */ - -int gvrender_select(GVJ_t * job, const char *str) -{ - GVC_t *gvc = job->gvc; - gvplugin_available_t *plugin; - gvplugin_installed_t *typeptr; - - gvplugin_load(gvc, API_device, str); - - /* When job is created, it is zeroed out. - * Some flags, such as OUTPUT_NOT_REQUIRED, may already be set, - * so don't reset. - */ - /* job->flags = 0; */ - plugin = gvc->api[API_device]; - if (plugin) { - typeptr = plugin->typeptr; - job->device.engine = (gvdevice_engine_t *) (typeptr->engine); - job->device.features = (gvdevice_features_t *) (typeptr->features); - job->device.id = typeptr->id; - job->device.type = plugin->typestr; - - job->flags |= job->device.features->flags; - } else - return NO_SUPPORT; /* FIXME - should differentiate problem */ - - /* The device plugin has a dependency on a render plugin, - * so the render plugin should be available as well now */ - plugin = gvc->api[API_render]; - if (plugin) { - typeptr = plugin->typeptr; - job->render.engine = (gvrender_engine_t *) (typeptr->engine); - job->render.features = (gvrender_features_t *) (typeptr->features); - job->render.type = plugin->typestr; - - job->flags |= job->render.features->flags; - - if (job->device.engine) - job->render.id = typeptr->id; - else - /* A null device engine indicates that the device id is also the renderer id - * and that the renderer doesn't need "device" functions. - * Device "features" settings are still available */ - job->render.id = job->device.id; - return GVRENDER_PLUGIN; - } - job->render.engine = NULL; - return NO_SUPPORT; /* FIXME - should differentiate problem */ -} - -int gvrender_features(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - int features = 0; - - if (gvre) { - features = job->render.features->flags; - } - return features; -} - -/* gvrender_begin_job: - * Return 0 on success - */ -int gvrender_begin_job(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvdevice_initialize(job)) - return 1; - if (gvre) { - if (gvre->begin_job) - gvre->begin_job(job); - } - return 0; -} - -void gvrender_end_job(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_job) - gvre->end_job(job); - } - job->gvc->common.lib = NULL; /* FIXME - minimally this doesn't belong here */ - gvdevice_finalize(job); -} - -/* font modifiers */ -#define REGULAR 0 -#define BOLD 1 -#define ITALIC 2 - -pointf gvrender_ptf(GVJ_t * job, pointf p) -{ - pointf rv, translation, scale; - - translation = job->translation; - scale.x = job->zoom * job->devscale.x; - scale.y = job->zoom * job->devscale.y; - - if (job->rotation) { - rv.x = -(p.y + translation.y) * scale.x; - rv.y = (p.x + translation.x) * scale.y; - } else { - rv.x = (p.x + translation.x) * scale.x; - rv.y = (p.y + translation.y) * scale.y; - } - return rv; -} - -/* transform an array of n points */ -/* *AF and *af must be preallocated */ -/* *AF can be the same as *af for inplace transforms */ -pointf *gvrender_ptf_A(GVJ_t * job, pointf * af, pointf * AF, int n) -{ - int i; - double t; - pointf translation, scale; - - translation = job->translation; - scale.x = job->zoom * job->devscale.x; - scale.y = job->zoom * job->devscale.y; - - if (job->rotation) { - for (i = 0; i < n; i++) { - t = -(af[i].y + translation.y) * scale.x; - AF[i].y = (af[i].x + translation.x) * scale.y; - AF[i].x = t; - } - } else { - for (i = 0; i < n; i++) { - AF[i].x = (af[i].x + translation.x) * scale.x; - AF[i].y = (af[i].y + translation.y) * scale.y; - } - } - return AF; -} - -static void gvrender_resolve_color(gvrender_features_t * features, - char *name, gvcolor_t * color) -{ - char *tok; - int rc; - - color->u.string = name; - color->type = COLOR_STRING; - tok = canontoken(name); - if (!features->knowncolors - || - (bsearch - (tok, features->knowncolors, features->sz_knowncolors, - sizeof(char *), (int(*)(const void*, const void*)) strcmp)) == NULL) { - /* if tok was not found in known_colors */ - rc = colorxlate(name, color, features->color_type); - if (rc != COLOR_OK) { - if (rc == COLOR_UNKNOWN) { - char *missedcolor = gmalloc(strlen(name) + 16); - sprintf(missedcolor, "color %s", name); - if (emit_once(missedcolor)) - agerr(AGWARN, "%s is not a known color.\n", name); - free(missedcolor); - } else { - agerr(AGERR, "error in colxlate()\n"); - } - } - } -} - -void gvrender_begin_graph(GVJ_t * job, graph_t * g) -{ - /* GVC_t *gvc = job->gvc; */ - gvrender_engine_t *gvre = job->render.engine; - /* char *s; */ - - if (gvre) { - /* render specific init */ - if (gvre->begin_graph) - gvre->begin_graph(job); - -#if 0 - /* background color */ - if (((s = agget(g, "bgcolor")) != 0) && s[0]) { - gvrender_resolve_color(job->render.features, s, - &(gvc->bgcolor)); - if (gvre->resolve_color) - gvre->resolve_color(job, &(gvc->bgcolor)); - } -#endif - - } -} - -void gvrender_end_graph(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_graph) - gvre->end_graph(job); - } - gvdevice_format(job); -} - -void gvrender_begin_page(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_page) - gvre->begin_page(job); - } -} - -void gvrender_end_page(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_page) - gvre->end_page(job); - } -} - -void gvrender_begin_layer(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_layer) - gvre->begin_layer(job, job->gvc->layerIDs[job->layerNum], - job->layerNum, job->numLayers); - } -} - -void gvrender_end_layer(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_layer) - gvre->end_layer(job); - } -} - -void gvrender_begin_cluster(GVJ_t * job, graph_t * sg) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_cluster) - gvre->begin_cluster(job); - } -} - -void gvrender_end_cluster(GVJ_t * job, graph_t * g) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_cluster) - gvre->end_cluster(job); - } -} - -void gvrender_begin_nodes(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_nodes) - gvre->begin_nodes(job); - } -} - -void gvrender_end_nodes(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_nodes) - gvre->end_nodes(job); - } -} - -void gvrender_begin_edges(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_edges) - gvre->begin_edges(job); - } -} - -void gvrender_end_edges(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_edges) - gvre->end_edges(job); - } -} - -void gvrender_begin_node(GVJ_t * job, node_t * n) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_node) - gvre->begin_node(job); - } -} - -void gvrender_end_node(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_node) - gvre->end_node(job); - } -} - -void gvrender_begin_edge(GVJ_t * job, edge_t * e) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_edge) - gvre->begin_edge(job); - } -} - -void gvrender_end_edge(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_edge) - gvre->end_edge(job); - } -} - -void gvrender_begin_anchor(GVJ_t * job, char *href, char *tooltip, - char *target, char *id) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_anchor) - gvre->begin_anchor(job, href, tooltip, target, id); - } -} - -void gvrender_end_anchor(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_anchor) - gvre->end_anchor(job); - } -} - -void gvrender_begin_label(GVJ_t * job, label_type type) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->begin_label) - gvre->begin_label(job, type); - } -} - -void gvrender_end_label(GVJ_t * job) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->end_label) - gvre->end_label(job); - } -} - -void gvrender_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - gvrender_engine_t *gvre = job->render.engine; - pointf PF; - - if (span->str && span->str[0] - && (!job->obj /* because of xdgen non-conformity */ - || job->obj->pen != PEN_NONE)) { - if (job->flags & GVRENDER_DOES_TRANSFORM) - PF = p; - else - PF = gvrender_ptf(job, p); - if (gvre) { - if (gvre->textspan) - gvre->textspan(job, PF, span); - } - } -} - -void gvrender_set_pencolor(GVJ_t * job, char *name) -{ - gvrender_engine_t *gvre = job->render.engine; - gvcolor_t *color = &(job->obj->pencolor); - char *cp = NULL; - - if ((cp = strstr(name, ":"))) /* if its a color list, then use only first */ - *cp = '\0'; - if (gvre) { - gvrender_resolve_color(job->render.features, name, color); - if (gvre->resolve_color) - gvre->resolve_color(job, color); - } - if (cp) /* restore color list */ - *cp = ':'; -} - -void gvrender_set_fillcolor(GVJ_t * job, char *name) -{ - gvrender_engine_t *gvre = job->render.engine; - gvcolor_t *color = &(job->obj->fillcolor); - char *cp = NULL; - - if ((cp = strstr(name, ":"))) /* if its a color list, then use only first */ - *cp = '\0'; - if (gvre) { - gvrender_resolve_color(job->render.features, name, color); - if (gvre->resolve_color) - gvre->resolve_color(job, color); - } - if (cp) - *cp = ':'; -} - -void gvrender_set_gradient_vals (GVJ_t * job, char *stopcolor, int angle, float frac) -{ - gvrender_engine_t *gvre = job->render.engine; - gvcolor_t *color = &(job->obj->stopcolor); - - if (gvre) { - gvrender_resolve_color(job->render.features, stopcolor, color); - if (gvre->resolve_color) - gvre->resolve_color(job, color); - } - job->obj->gradient_angle = angle; - job->obj->gradient_frac = frac; -} - -void gvrender_set_style(GVJ_t * job, char **s) -{ - gvrender_engine_t *gvre = job->render.engine; - obj_state_t *obj = job->obj; - char *line, *p; - - obj->rawstyle = s; - if (gvre) { - if (s) - while ((p = line = *s++)) { - if (streq(line, "solid")) - obj->pen = PEN_SOLID; - else if (streq(line, "dashed")) - obj->pen = PEN_DASHED; - else if (streq(line, "dotted")) - obj->pen = PEN_DOTTED; - else if (streq(line, "invis") || streq(line, "invisible")) - obj->pen = PEN_NONE; - else if (streq(line, "bold")) - obj->penwidth = PENWIDTH_BOLD; - else if (streq(line, "setlinewidth")) { - while (*p) - p++; - p++; - obj->penwidth = atof(p); - } else if (streq(line, "filled")) - obj->fill = FILL_SOLID; - else if (streq(line, "unfilled")) - obj->fill = FILL_NONE; - else if (streq(line, "tapered")); - else { - agerr(AGWARN, - "gvrender_set_style: unsupported style %s - ignoring\n", - line); - } - } - } -} - -void gvrender_ellipse(GVJ_t * job, pointf * pf, int n, int filled) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->ellipse && job->obj->pen != PEN_NONE) { - pointf af[2]; - - /* center */ - af[0].x = (pf[0].x + pf[1].x) / 2.; - af[0].y = (pf[0].y + pf[1].y) / 2.; - /* corner */ - af[1] = pf[1]; - - if (!(job->flags & GVRENDER_DOES_TRANSFORM)) - gvrender_ptf_A(job, af, af, 2); - gvre->ellipse(job, af, filled); - } - } -} - -void gvrender_polygon(GVJ_t * job, pointf * af, int n, int filled) -{ - int noPoly = 0; - gvcolor_t save_pencolor; - - gvrender_engine_t *gvre = job->render.engine; - if (gvre) { - if (gvre->polygon && job->obj->pen != PEN_NONE) { - if (filled & NO_POLY) { - noPoly = 1; - filled &= ~NO_POLY; - save_pencolor = job->obj->pencolor; - job->obj->pencolor = job->obj->fillcolor; - } - if (job->flags & GVRENDER_DOES_TRANSFORM) - gvre->polygon(job, af, n, filled); - else { - if (sizeAF < n) { - sizeAF = n + 10; - AF = grealloc(AF, sizeAF * sizeof(pointf)); - } - gvrender_ptf_A(job, af, AF, n); - gvre->polygon(job, AF, n, filled); - } - if (noPoly) - job->obj->pencolor = save_pencolor; - } - } -} - - -void gvrender_box(GVJ_t * job, boxf B, int filled) -{ - pointf A[4]; - - A[0] = B.LL; - A[2] = B.UR; - A[1].x = A[0].x; - A[1].y = A[2].y; - A[3].x = A[2].x; - A[3].y = A[0].y; - - gvrender_polygon(job, A, 4, filled); -} - -void gvrender_beziercurve(GVJ_t * job, pointf * af, int n, - int arrow_at_start, int arrow_at_end, - boolean filled) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->beziercurve && job->obj->pen != PEN_NONE) { - if (job->flags & GVRENDER_DOES_TRANSFORM) - gvre->beziercurve(job, af, n, arrow_at_start, arrow_at_end, - filled); - else { - if (sizeAF < n) { - sizeAF = n + 10; - AF = grealloc(AF, sizeAF * sizeof(pointf)); - } - gvrender_ptf_A(job, af, AF, n); - gvre->beziercurve(job, AF, n, arrow_at_start, arrow_at_end, - filled); - } - } - } -} - -void gvrender_polyline(GVJ_t * job, pointf * af, int n) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - if (gvre->polyline && job->obj->pen != PEN_NONE) { - if (job->flags & GVRENDER_DOES_TRANSFORM) - gvre->polyline(job, af, n); - else { - if (sizeAF < n) { - sizeAF = n + 10; - AF = grealloc(AF, sizeAF * sizeof(pointf)); - } - gvrender_ptf_A(job, af, AF, n); - gvre->polyline(job, AF, n); - } - } - } -} - -void gvrender_comment(GVJ_t * job, char *str) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (!str || !str[0]) - return; - - if (gvre) { - if (gvre->comment) - gvre->comment(job, str); - } -} - -static imagescale_t get_imagescale(char *s) -{ - if (*s == '\0') - return IMAGESCALE_FALSE; - if (!strcasecmp(s, "width")) - return IMAGESCALE_WIDTH; - if (!strcasecmp(s, "height")) - return IMAGESCALE_HEIGHT; - if (!strcasecmp(s, "both")) - return IMAGESCALE_BOTH; - if (mapbool(s)) - return IMAGESCALE_TRUE; - return IMAGESCALE_FALSE; -} - -/* gvrender_usershape: - * Scale image to fill polygon bounding box according to "imagescale" - */ -void gvrender_usershape(GVJ_t * job, char *name, pointf * a, int n, - boolean filled, char *imagescale) -{ - gvrender_engine_t *gvre = job->render.engine; - usershape_t *us; - double iw, ih, pw, ph; - double scalex, scaley; /* scale factors */ - boxf b; /* target box */ - int i; - point isz; - - assert(job); - assert(name); - assert(name[0]); - - if (!(us = gvusershape_find(name))) { - if (find_user_shape(name)) { - if (gvre && gvre->library_shape) - gvre->library_shape(job, name, a, n, filled); - } - return; - } - - isz = gvusershape_size_dpi(us, job->dpi); - if ((isz.x <= 0) && (isz.y <= 0)) - return; - - /* compute bb of polygon */ - b.LL = b.UR = a[0]; - for (i = 1; i < n; i++) { - EXPANDBP(b, a[i]); - } - - pw = b.UR.x - b.LL.x; - ph = b.UR.y - b.LL.y; - ih = (double) isz.y; - iw = (double) isz.x; - - scalex = pw / iw; - scaley = ph / ih; - - switch (get_imagescale(imagescale)) { - case IMAGESCALE_TRUE: - /* keep aspect ratio fixed by just using the smaller scale */ - if (scalex < scaley) { - iw *= scalex; - ih *= scalex; - } else { - iw *= scaley; - ih *= scaley; - } - break; - case IMAGESCALE_WIDTH: - iw *= scalex; - break; - case IMAGESCALE_HEIGHT: - ih *= scaley; - break; - case IMAGESCALE_BOTH: - iw *= scalex; - ih *= scaley; - break; - case IMAGESCALE_FALSE: - default: - break; - } - - /* if image is smaller than target area then center it */ - if (iw < pw) { - b.LL.x += (pw - iw) / 2.0; - b.UR.x -= (pw - iw) / 2.0; - } - if (ih < ph) { - b.LL.y += (ph - ih) / 2.0; - b.UR.y -= (ph - ih) / 2.0; - } - - /* convert from graph to device coordinates */ - if (!(job->flags & GVRENDER_DOES_TRANSFORM)) { - b.LL = gvrender_ptf(job, b.LL); - b.UR = gvrender_ptf(job, b.UR); - } - - if (b.LL.x > b.UR.x) { - double d = b.LL.x; - b.LL.x = b.UR.x; - b.UR.x = d; - } - if (b.LL.y > b.UR.y) { - double d = b.LL.y; - b.LL.y = b.UR.y; - b.UR.y = d; - } - if (gvre) { - gvloadimage(job, us, b, filled, job->render.type); - } -} - -void gvrender_set_penwidth(GVJ_t * job, double penwidth) -{ - gvrender_engine_t *gvre = job->render.engine; - - if (gvre) { - job->obj->penwidth = penwidth; - /*if (gvre->set_penwidth) gvre->set_penwidth(job, penwidth); */ - } -} diff --git a/internal/ccall/gvc/gvtextlayout.c b/internal/ccall/gvc/gvtextlayout.c deleted file mode 100644 index 96a5699..0000000 --- a/internal/ccall/gvc/gvtextlayout.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * textlayout engine wrapper - */ - -#include "config.h" - -#include "const.h" -#include "gvplugin_textlayout.h" -#include "gvcint.h" -#include "gvcproc.h" - -int gvtextlayout_select(GVC_t * gvc) -{ - gvplugin_available_t *plugin; - gvplugin_installed_t *typeptr; - - plugin = gvplugin_load(gvc, API_textlayout, "textlayout"); - if (plugin) { - typeptr = plugin->typeptr; - gvc->textlayout.engine = (gvtextlayout_engine_t *) (typeptr->engine); - return GVRENDER_PLUGIN; /* FIXME - need more suitable success code */ - } - return NO_SUPPORT; -} - -boolean gvtextlayout(GVC_t *gvc, textspan_t *span, char **fontpath) -{ - gvtextlayout_engine_t *gvte = gvc->textlayout.engine; - - if (gvte && gvte->textlayout) - return gvte->textlayout(span, fontpath); - return FALSE; -} diff --git a/internal/ccall/gvc/gvtool_tred.c b/internal/ccall/gvc/gvtool_tred.c deleted file mode 100644 index 763a79d..0000000 --- a/internal/ccall/gvc/gvtool_tred.c +++ /dev/null @@ -1,89 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Written by Stephen North - * Updated by Emden Gansner - * Adapted to gvToolTred(g) by John Ellson - */ - -/* - * performs an inplace transitive reduction on a graph - */ - -#include "config.h" -#include -#include "cgraph.h" -#include "gvc.h" - -typedef struct { - Agrec_t h; - int mark; -} Agmarknodeinfo_t; - -#define MARK(n) (((Agmarknodeinfo_t*)(n->base.data))->mark) - -#define agrootof(n) ((n)->root) - -static int dfs(Agnode_t * n, Agedge_t * link, int warn) -{ - Agedge_t *e; - Agedge_t *f; - Agraph_t *g = agrootof(n); - - MARK(n) = 1; - - for (e = agfstin(g, n); e; e = f) { - f = agnxtin(g, e); - if (e == link) - continue; - if (MARK(agtail(e))) - agdelete(g, e); - } - - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (MARK(aghead(e))) { - if (!warn) { - warn++; - fprintf(stderr, - "warning: %s has cycle(s), transitive reduction not unique\n", - agnameof(g)); - fprintf(stderr, "cycle involves edge %s -> %s\n", - agnameof(agtail(e)), agnameof(aghead(e))); - } - } else - warn = dfs(aghead(e), AGOUT2IN(e), warn); - } - - MARK(n) = 0; - return warn; -} - -int gvToolTred(Agraph_t * g) -{ - Agnode_t *n; - int warn = 0; - - if (agisdirected(g)) { - aginit(g, AGNODE, "info", sizeof(Agmarknodeinfo_t), TRUE); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - warn = dfs(n, NULL, warn); - } - agclean(g, AGNODE, "info"); - } else { - fprintf(stderr, "warning: %s is not a directed graph, not attempting tred\n", - agnameof(g)); - } - return 0; // FIXME - return proper errors -} diff --git a/internal/ccall/gvc/gvusershape.c b/internal/ccall/gvc/gvusershape.c deleted file mode 100644 index 68cdc5c..0000000 --- a/internal/ccall/gvc/gvusershape.c +++ /dev/null @@ -1,767 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#define GLOB_NOSPACE 1 /* Ran out of memory. */ -#define GLOB_ABORTED 2 /* Read error. */ -#define GLOB_NOMATCH 3 /* No matches found. */ -#define GLOB_NOSORT 4 -#define DMKEY "Software\\Microsoft" //key to look for library dir -#endif - -#ifndef WIN32 -#include -#endif - -#include "types.h" -#include "logic.h" -#include "memory.h" -#include "agxbuf.h" - -#define _BLD_gvc 1 -#include "utils.h" -#include "gvplugin_loadimage.h" - -extern char *Gvimagepath; -extern char *HTTPServerEnVar; -extern shape_desc *find_user_shape(const char *); - -static Dict_t *ImageDict; - -typedef struct { - char *template; - int size; - int type; - char *stringtype; -} knowntype_t; - -#define HDRLEN 20 - -#define PNG_MAGIC "\x89PNG\x0D\x0A\x1A\x0A" -#define PS_MAGIC "%!PS-Adobe-" -#define BMP_MAGIC "BM" -#define GIF_MAGIC "GIF8" -#define JPEG_MAGIC "\xFF\xD8\xFF\xE0" -#define PDF_MAGIC "%PDF-" -#define EPS_MAGIC "\xC5\xD0\xD3\xC6" -#define XML_MAGIC "f && fread(header, 1, HDRLEN, us->f) == HDRLEN) { - for (i = 0; i < sizeof(knowntypes) / sizeof(knowntype_t); i++) { - if (!memcmp (header, knowntypes[i].template, knowntypes[i].size)) { - us->stringtype = knowntypes[i].stringtype; - us->type = knowntypes[i].type; - if (us->type == FT_XML) { - /* check for SVG in case of XML */ - while (fgets(line, sizeof(line), us->f) != NULL) { - if (!memcmp(line, SVG_MAGIC, sizeof(SVG_MAGIC)-1)) { - us->stringtype = "svg"; - return (us->type = FT_SVG); - } - } - } - else if (us->type == FT_RIFF) { - /* check for WEBP in case of RIFF */ - if (!memcmp(header+8, WEBP_MAGIC, sizeof(WEBP_MAGIC)-1)) { - us->stringtype = "webp"; - return (us->type = FT_WEBP); - } - } - return us->type; - } - } - } - - us->stringtype = "(lib)"; - us->type = FT_NULL; - - return FT_NULL; -} - -static boolean get_int_lsb_first (FILE *f, unsigned int sz, unsigned int *val) -{ - int ch, i; - - *val = 0; - for (i = 0; i < sz; i++) { - ch = fgetc(f); - if (feof(f)) - return FALSE; - *val |= (ch << 8*i); - } - return TRUE; -} - -static boolean get_int_msb_first (FILE *f, unsigned int sz, unsigned int *val) -{ - int ch, i; - - *val = 0; - for (i = 0; i < sz; i++) { - ch = fgetc(f); - if (feof(f)) - return FALSE; - *val <<= 8; - *val |= ch; - } - return TRUE; -} - -static unsigned int svg_units_convert(double n, char *u) -{ - if (strcmp(u, "in") == 0) - return ROUND(n * POINTS_PER_INCH); - if (strcmp(u, "px") == 0) - return ROUND(n * POINTS_PER_INCH / 96); - if (strcmp(u, "pc") == 0) - return ROUND(n * POINTS_PER_INCH / 6); - if (strcmp(u, "pt") == 0 || strcmp(u, "\"") == 0) /* ugly!! - if there are no inits then the %2s get the trailing '"' */ - return ROUND(n); - if (strcmp(u, "cm") == 0) - return ROUND(n * POINTS_PER_CM); - if (strcmp(u, "mm") == 0) - return ROUND(n * POINTS_PER_MM); - return 0; -} - -static char* svg_attr_value_re = "([a-z][a-zA-Z]*)=\"([^\"]*)\""; - -#ifndef WIN32 -static regex_t re, *pre = NULL; -#endif - -static void svg_size (usershape_t *us) -{ -#ifndef WIN32 - unsigned int w = 0, h = 0; - double n, x0, y0, x1, y1; - char u[10]; - char *attribute, *value, *re_string; - char line[200]; - boolean wFlag = FALSE, hFlag = FALSE; -#define RE_NMATCH 4 - regmatch_t re_pmatch[RE_NMATCH]; - - /* compile on first use */ - if (! pre) { - if (regcomp(&re, svg_attr_value_re, REG_EXTENDED) != 0) { - agerr(AGERR,"cannot compile regular expression %s", svg_attr_value_re); - } - pre = &re; - } - - fseek(us->f, 0, SEEK_SET); - while (fgets(line, sizeof(line), us->f) != NULL && (!wFlag || !hFlag)) { - re_string = line; - while (regexec(&re, re_string, RE_NMATCH, re_pmatch, 0) == 0) { - re_string[re_pmatch[1].rm_eo] = '\0'; - re_string[re_pmatch[2].rm_eo] = '\0'; - attribute = re_string + re_pmatch[1].rm_so; - value = re_string + re_pmatch[2].rm_so; - re_string += re_pmatch[0].rm_eo + 1; - - if (strcmp(attribute,"width") == 0) { - if (sscanf(value, "%lf%2s", &n, u) == 2) { - w = svg_units_convert(n, u); - wFlag = TRUE; - } - else if (sscanf(value, "%lf", &n) == 1) { - w = svg_units_convert(n, "pt"); - wFlag = TRUE; - } - if (hFlag) - break; - } - else if (strcmp(attribute,"height") == 0) { - if (sscanf(value, "%lf%2s", &n, u) == 2) { - h = svg_units_convert(n, u); - hFlag = TRUE; - } - else if (sscanf(value, "%lf", &n) == 1) { - h = svg_units_convert(n, "pt"); - hFlag = TRUE; - } - if (wFlag) - break; - } - else if (strcmp(attribute,"viewBox") == 0 - && sscanf(value, "%lf %lf %lf %lf", &x0,&y0,&x1,&y1) == 4) { - w = x1 - x0 + 1; - h = y1 - y0 + 1; - wFlag = TRUE; - hFlag = TRUE; - break; - } - } - } - us->dpi = 0; - us->w = w; - us->h = h; -#endif -} - -static void png_size (usershape_t *us) -{ - unsigned int w, h; - - us->dpi = 0; - fseek(us->f, 16, SEEK_SET); - if (get_int_msb_first(us->f, 4, &w) && get_int_msb_first(us->f, 4, &h)) { - us->w = w; - us->h = h; - } -} - -static void ico_size (usershape_t *us) -{ - unsigned int w, h; - - us->dpi = 0; - fseek(us->f, 6, SEEK_SET); - if (get_int_msb_first(us->f, 1, &w) && get_int_msb_first(us->f, 1, &h)) { - us->w = w; - us->h = h; - } -} - - -// FIXME - how to get the size of a tiff image? -#if 0 -static void tiff_size (usershape_t *us) -{ - unsigned int w, h; - - us->dpi = 0; - fseek(us->f, 6, SEEK_SET); - if (get_int_msb_first(us->f, 1, &w) && get_int_msb_first(us->f, 1, &h)) { - us->w = w; - us->h = h; - } -} -#endif - -static void webp_size (usershape_t *us) -{ - unsigned int w, h; - - us->dpi = 0; - fseek(us->f, 15, SEEK_SET); - if (fgetc(us->f) == 'X') { //VP8X - fseek(us->f, 24, SEEK_SET); - if (get_int_lsb_first(us->f, 4, &w) && get_int_lsb_first(us->f, 4, &h)) { - us->w = w; - us->h = h; - } - } - else { //VP8 - fseek(us->f, 26, SEEK_SET); - if (get_int_lsb_first(us->f, 2, &w) && get_int_lsb_first(us->f, 2, &h)) { - us->w = w; - us->h = h; - } - } -} - -static void gif_size (usershape_t *us) -{ - unsigned int w, h; - - us->dpi = 0; - fseek(us->f, 6, SEEK_SET); - if (get_int_lsb_first(us->f, 2, &w) && get_int_lsb_first(us->f, 2, &h)) { - us->w = w; - us->h = h; - } -} - -static void bmp_size (usershape_t *us) { - unsigned int size_x_msw, size_x_lsw, size_y_msw, size_y_lsw; - - us->dpi = 0; - fseek (us->f, 16, SEEK_SET); - if ( get_int_lsb_first (us->f, 2, &size_x_msw) && - get_int_lsb_first (us->f, 2, &size_x_lsw) && - get_int_lsb_first (us->f, 2, &size_y_msw) && - get_int_lsb_first (us->f, 2, &size_y_lsw) ) { - us->w = size_x_msw << 16 | size_x_lsw; - us->h = size_y_msw << 16 | size_y_lsw; - } -} - -static void jpeg_size (usershape_t *us) { - unsigned int marker, length, size_x, size_y, junk; - - /* These are the markers that follow 0xff in the file. - * Other markers implicitly have a 2-byte length field that follows. - */ - static unsigned char standalone_markers [] = { - 0x01, /* Temporary */ - 0xd0, 0xd1, 0xd2, 0xd3, /* Reset */ - 0xd4, 0xd5, 0xd6, - 0xd7, - 0xd8, /* Start of image */ - 0xd9, /* End of image */ - 0 - }; - - us->dpi = 0; - while (TRUE) { - /* Now we must be at a 0xff or at a series of 0xff's. - * If that is not the case, or if we're at EOF, then there's - * a parsing error. - */ - if (! get_int_msb_first (us->f, 1, &marker)) - return; - - if (marker == 0xff) - continue; - - /* Ok.. marker now read. If it is not a stand-alone marker, - * then continue. If it's a Start Of Frame (0xc?), then we're there. - * If it's another marker with a length field, then skip ahead - * over that length field. - */ - - /* A stand-alone... */ - if (strchr ((char*)standalone_markers, marker)) - continue; - - /* Incase of a 0xc0 marker: */ - if (marker == 0xc0) { - /* Skip length and 2 lengths. */ - if ( get_int_msb_first (us->f, 3, &junk) && - get_int_msb_first (us->f, 2, &size_x) && - get_int_msb_first (us->f, 2, &size_y) ) { - - /* Store length. */ - us->h = size_x; - us->w = size_y; - } - return; - } - - /* Incase of a 0xc2 marker: */ - if (marker == 0xc2) { - /* Skip length and one more byte */ - if (! get_int_msb_first (us->f, 3, &junk)) - return; - - /* Get length and store. */ - if ( get_int_msb_first (us->f, 2, &size_x) && - get_int_msb_first (us->f, 2, &size_y) ) { - us->h = size_x; - us->w = size_y; - } - return; - } - - /* Any other marker is assumed to be followed by 2 bytes length. */ - if (! get_int_msb_first (us->f, 2, &length)) - return; - - fseek (us->f, length - 2, SEEK_CUR); - } -} - -static void ps_size (usershape_t *us) -{ - char line[BUFSIZ]; - boolean saw_bb; - int lx, ly, ux, uy; - char* linep; - - us->dpi = 72; - fseek(us->f, 0, SEEK_SET); - saw_bb = FALSE; - while (fgets(line, sizeof(line), us->f)) { - /* PostScript accepts \r as EOL, so using fgets () and looking for a - * bounding box comment at the beginning doesn't work in this case. - * As a heuristic, we first search for a bounding box comment in line. - * This obviously fails if not all of the numbers make it into the - * current buffer. This shouldn't be a problem, as the comment is - * typically near the beginning, and so should be read within the first - * BUFSIZ bytes (even on Windows where this is 512). - */ - if (!(linep = strstr (line, "%%BoundingBox:"))) - continue; - if (sscanf (linep, "%%%%BoundingBox: %d %d %d %d", &lx, &ly, &ux, &uy) == 4) { - saw_bb = TRUE; - break; - } - } - if (saw_bb) { - us->x = lx; - us->y = ly; - us->w = ux - lx; - us->h = uy - ly; - } -} - -#define KEY "/MediaBox" - -typedef struct { - char* s; - char* buf; - FILE* fp; -} stream_t; - -static unsigned char -nxtc (stream_t* str) -{ - if (fgets(str->buf, BUFSIZ, str->fp)) { - str->s = str->buf; - return *(str->s); - } - return '\0'; - -} - -#define strc(x) (*(x->s)?*(x->s):nxtc(x)) -#define stradv(x) (x->s++) - -static void -skipWS (stream_t* str) -{ - unsigned char c; - while ((c = strc(str))) { - if (isspace(c)) stradv(str); - else return; - } -} - -static int -scanNum (char* tok, double* dp) -{ - char* endp; - double d = strtod(tok, &endp); - - if (tok == endp) return 1; - *dp = d; - return 0; -} - -static void -getNum (stream_t* str, char* buf) -{ - int len = 0; - char c; - skipWS(str); - while ((c = strc(str)) && (isdigit(c) || (c == '.'))) { - buf[len++] = c; - stradv(str); - if (len == BUFSIZ-1) break; - } - buf[len] = '\0'; - - return; -} - -static int -_boxof (stream_t* str, boxf* bp) -{ - char tok[BUFSIZ]; - - skipWS(str); - if (strc(str) != '[') return 1; - stradv(str); - getNum(str, tok); - if (scanNum(tok,&bp->LL.x)) return 1; - getNum(str, tok); - if (scanNum(tok,&bp->LL.y)) return 1; - getNum(str, tok); - if (scanNum(tok,&bp->UR.x)) return 1; - getNum(str, tok); - if (scanNum(tok,&bp->UR.y)) return 1; - return 0; -} - -static int -bboxPDF (FILE* fp, boxf* bp) -{ - stream_t str; - char* s; - char buf[BUFSIZ]; - while (fgets(buf, BUFSIZ, fp)) { - if ((s = strstr(buf,KEY))) { - str.buf = buf; - str.s = s+(sizeof(KEY)-1); - str.fp = fp; - return _boxof(&str,bp); - } - } - return 1; -} - -static void pdf_size (usershape_t *us) -{ - boxf bb; - - us->dpi = 0; - fseek(us->f, 0, SEEK_SET); - if ( ! bboxPDF (us->f, &bb)) { - us->x = bb.LL.x; - us->y = bb.LL.y; - us->w = bb.UR.x - bb.LL.x; - us->h = bb.UR.y - bb.LL.y; - } -} - -static void usershape_close (Dict_t * dict, void * p, Dtdisc_t * disc) -{ - usershape_t *us = (usershape_t *)p; - - if (us->f) - fclose(us->f); - if (us->data && us->datafree) - us->datafree(us); - free (us); -} - -static Dtdisc_t ImageDictDisc = { - offsetof(usershape_t, name), /* key */ - -1, /* size */ - 0, /* link offset */ - NIL(Dtmake_f), - usershape_close, - NIL(Dtcompar_f), - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -usershape_t *gvusershape_find(const char *name) -{ - usershape_t *us; - - assert(name); - assert(name[0]); - - if (!ImageDict) - return NULL; - - us = dtmatch(ImageDict, name); - return us; -} - -#define MAX_USERSHAPE_FILES_OPEN 50 -boolean gvusershape_file_access(usershape_t *us) -{ - static int usershape_files_open_cnt; - const char *fn; - - assert(us); - assert(us->name); - assert(us->name[0]); - - if (us->f) - fseek(us->f, 0, SEEK_SET); - else { - if (! (fn = safefile(us->name))) { - agerr(AGWARN, "Filename \"%s\" is unsafe\n", us->name); - return FALSE; - } -#ifndef WIN32 - us->f = fopen(fn, "r"); -#else - us->f = fopen(fn, "rb"); -#endif - if (us->f == NULL) { - agerr(AGWARN, "%s while opening %s\n", strerror(errno), fn); - return FALSE; - } - if (usershape_files_open_cnt >= MAX_USERSHAPE_FILES_OPEN) - us->nocache = TRUE; - else - usershape_files_open_cnt++; - } - assert(us->f); - return TRUE; -} - -void gvusershape_file_release(usershape_t *us) -{ - if (us->nocache) { - if (us->f) { - fclose(us->f); - us->f = NULL; - } - } -} - -static void freeUsershape (usershape_t* us) -{ - if (us->name) agstrfree(0, (char*)us->name); - free (us); -} - -static usershape_t *gvusershape_open (const char *name) -{ - usershape_t *us; - - assert(name); - - if (!ImageDict) - ImageDict = dtopen(&ImageDictDisc, Dttree); - - if (! (us = gvusershape_find(name))) { - if (! (us = zmalloc(sizeof(usershape_t)))) - return NULL; - - us->name = agstrdup (0, (char*)name); - if (!gvusershape_file_access(us)) { - freeUsershape (us); - return NULL; - } - - assert(us->f); - - switch(imagetype(us)) { - case FT_NULL: - if (!(us->data = (void*)find_user_shape(us->name))) { - agerr(AGWARN, "\"%s\" was not found as a file or as a shape library member\n", us->name); - freeUsershape (us); - return NULL; - } - break; - case FT_GIF: - gif_size(us); - break; - case FT_PNG: - png_size(us); - break; - case FT_BMP: - bmp_size(us); - break; - case FT_JPEG: - jpeg_size(us); - break; - case FT_PS: - ps_size(us); - break; - case FT_WEBP: - webp_size(us); - break; - case FT_SVG: - svg_size(us); - break; - case FT_PDF: - pdf_size(us); - break; - case FT_ICO: - ico_size(us); - break; -// case FT_TIFF: -// tiff_size(us); -// break; - case FT_EPS: /* no eps_size code available */ - default: - break; - } - gvusershape_file_release(us); - dtinsert(ImageDict, us); - return us; - } - gvusershape_file_release(us); - return us; -} - -/* gvusershape_size_dpi: - * Return image size in points. - */ -point -gvusershape_size_dpi (usershape_t* us, pointf dpi) -{ - point rv; - - if (!us) { - rv.x = rv.y = -1; - } - else { - if (us->dpi != 0) { - dpi.x = dpi.y = us->dpi; - } - rv.x = us->w * POINTS_PER_INCH / dpi.x; - rv.y = us->h * POINTS_PER_INCH / dpi.y; - } - return rv; -} - -/* gvusershape_size: - * Loads user image from file name if not already loaded. - * Return image size in points. - */ -point gvusershape_size(graph_t * g, char *name) -{ - point rv; - pointf dpi; - static char* oldpath; - usershape_t* us; - - /* no shape file, no shape size */ - if (!name || (*name == '\0')) { - rv.x = rv.y = -1; - return rv; - } - - if (!HTTPServerEnVar && (oldpath != Gvimagepath)) { - oldpath = Gvimagepath; - if (ImageDict) { - dtclose(ImageDict); - ImageDict = NULL; - } - } - - if ((dpi.y = GD_drawing(g)->dpi) >= 1.0) - dpi.x = dpi.y; - else - dpi.x = dpi.y = (double)DEFAULT_DPI; - - us = gvusershape_open (name); - rv = gvusershape_size_dpi (us, dpi); - return rv; -} diff --git a/internal/ccall/gvpr/actions.c b/internal/ccall/gvpr/actions.c deleted file mode 100644 index 77dd754..0000000 --- a/internal/ccall/gvpr/actions.c +++ /dev/null @@ -1,1385 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Code for main functions in gpr - */ - -#include -#include -#include -#include "compile.h" -#include "sfstr.h" -#include -#include -#include - -#define KINDS(p) ((AGTYPE(p) == AGRAPH) ? "graph" : (AGTYPE(p) == AGNODE) ? "node" : "edge") - -/* sameG: - * Return common root if objects belong to same root graph. - * NULL otherwise - */ -Agraph_t *sameG(void *p1, void *p2, char *fn, char *msg) -{ - Agobj_t *obj1 = OBJ(p1); - Agobj_t *obj2 = OBJ(p2); - Agraph_t *root; - - root = agroot(agraphof(obj1)); - if (root != agroot(agraphof(obj2))) { - if (msg) - error(ERROR_WARNING, "%s in %s() belong to different graphs", - msg, fn); - else - error(ERROR_WARNING, - "%s and %s in %s() belong to different graphs", - KINDS(obj1), KINDS(obj2), fn); - return 0; - } else - return root; -} - -/* indexOf: - * Return index of leftmost string s2 in string s1, or -1 - */ -int indexOf(char *s1, char *s2) -{ - char c1 = *s2; - char c; - char *p; - int len2; - - if (c1 == '\0') - return 0; - p = s1; - len2 = strlen(s2) - 1; - while ((c = *p++)) { - if (c != c1) - continue; - if (strncmp(p, s2 + 1, len2) == 0) - return ((p - s1) - 1); - } - return -1; -} - -/* rindexOf: - * Return index of rightmost string s2 in string s1, or -1 - */ -int rindexOf(char *s1, char *s2) -{ - char c1 = *s2; - char c; - char *p; - int len1 = strlen(s1); - int len2 = strlen(s2); - - if (c1 == '\0') - return (len1); - p = s1 + (len1 - len2); - while (p >= s1) { - c = *p; - if ((c == c1) && (strncmp(p+1, s2+1, len2-1) == 0)) - return (p - s1); - else - p--; - } - return -1; -} - -/* match: - * Return index of pattern pat in string str, or -1 - */ -int match(char *str, char *pat) -{ - int sub[2]; - - if (strgrpmatch(str, pat, sub, 1, STR_MAXIMAL)) { - return (sub[0]); - } else - return -1; -} - -/* nodeInduce: - * Add all edges in root graph connecting two nodes in - * selected to selected. - */ -void nodeInduce(Agraph_t * selected) -{ - Agnode_t *n; - Agedge_t *e; - Agraph_t *base; - - if (!selected) - return; - base = agroot(selected); - if (base == selected) - return; - for (n = agfstnode(selected); n; n = agnxtnode(selected, n)) { - for (e = agfstout(base, n); e; e = agnxtout(base, e)) { - if (agsubnode(selected, aghead(e), FALSE)) - agsubedge(selected, e, TRUE); - } - } -} - -/* copyAttr: - * Copy attributes from src to tgt. Overrides currently - * defined values. - * FIX: we should probably use the default value of the source - * graph when initializing the attribute, rather than "". - * NOTE: We do not assume src and tgt have the same kind. - */ -int copyAttr(Agobj_t * src, Agobj_t * tgt) -{ - Agraph_t *srcg; - Agraph_t *tgtg; - Agsym_t *sym = 0; - Agsym_t *tsym = 0; - int skind = AGTYPE(src); - int tkind = AGTYPE(tgt); - char* val; - - srcg = agraphof(src); - tgtg = agraphof(tgt); - while ((sym = agnxtattr(srcg, skind, sym))) { - tsym = agattrsym(tgt, sym->name); - if (!tsym) - tsym = agattr(tgtg, tkind, sym->name, sym->defval); - val = agxget(src, sym); - if (aghtmlstr (val)) { - val = agstrdup_html (tgtg, val); - agxset(tgt, tsym, val); - agstrfree (tgtg, val); - } - else - agxset(tgt, tsym, val); - } - return 0; -} - -/* copy: - * Create new object of type AGTYPE(obj) with all of its - * attributes. - * If obj is an edge, only create end nodes if necessary. - * If obj is a graph, if g is null, create a top-level - * graph. Otherwise, create a subgraph of g. - * Assume obj != NULL. - */ -Agobj_t *copy(Agraph_t * g, Agobj_t * obj) -{ - Agobj_t *nobj = 0; - Agedge_t *e; - Agnode_t *h; - Agnode_t *t; - int kind = AGTYPE(obj); - char *name; - - if ((kind != AGRAPH) && !g) { - exerror("NULL graph with non-graph object in copy()"); - return 0; - } - - switch (kind) { - case AGNODE: - name = agnameof(obj); - nobj = (Agobj_t *) openNode(g, name); - break; - case AGRAPH: - name = agnameof(obj); - if (g) - nobj = (Agobj_t *) openSubg(g, name); - else - nobj = (Agobj_t *) openG(name, ((Agraph_t *) obj)->desc); - break; - case AGINEDGE: - case AGOUTEDGE: - e = (Agedge_t *) obj; - t = openNode(g, agnameof(agtail(e))); - h = openNode(g, agnameof(aghead(e))); - name = agnameof (AGMKOUT(e)); - nobj = (Agobj_t *) openEdge(g, t, h, name); - break; - } - if (nobj) - copyAttr(obj, nobj); - - return nobj; -} - -typedef struct { - Dtlink_t link; - Agedge_t *key; - Agedge_t *val; -} edgepair_t; - -static Agedge_t* -mapEdge (Dt_t* emap, Agedge_t* e) -{ - edgepair_t* ep = dtmatch (emap, &e); - if (ep) return ep->val; - else return NULL; -} - -/* cloneSubg: - * Clone subgraph sg in tgt. - */ -static Agraph_t *cloneSubg(Agraph_t * tgt, Agraph_t * g, Dt_t* emap) -{ - Agraph_t *ng; - Agraph_t *sg; - Agnode_t *t; - Agnode_t *newt; - Agedge_t *e; - Agedge_t *newe; - char* name; - - ng = (Agraph_t *) (copy(tgt, OBJ(g))); - if (!ng) - return 0; - for (t = agfstnode(g); t; t = agnxtnode(g, t)) { - newt = agnode(tgt, agnameof(t), 0); - if (!newt) { - exerror("node %s not found in cloned graph %s", - agnameof(t), agnameof(tgt)); - return 0; - } - else - agsubnode(ng, newt, 1); - } - for (t = agfstnode(g); t; t = agnxtnode(g, t)) { - for (e = agfstout(g, t); e; e = agnxtout(g, e)) { - newe = mapEdge (emap, e); - if (!newe) { - name = agnameof(AGMKOUT(e)); - if (name) - exerror("edge (%s,%s)[%s] not found in cloned graph %s", - agnameof(agtail(e)), agnameof(aghead(e)), - name, agnameof(tgt)); - else - exerror("edge (%s,%s) not found in cloned graph %s", - agnameof(agtail(e)), agnameof(aghead(e)), - agnameof(tgt)); - return 0; - } - else - agsubedge(ng, newe, 1); - } - } - for (sg = agfstsubg(g); sg; sg = agnxtsubg(sg)) { - if (!cloneSubg(ng, sg, emap)) { - exerror("error cloning subgraph %s from graph %s", - agnameof(sg), agnameof(g)); - return 0; - } - } - return ng; -} - -static int cmppair(Dt_t * d, Agedge_t** key1, Agedge_t** key2, Dtdisc_t * disc) -{ - if (*key1 > *key2) return 1; - else if (*key1 < *key2) return -1; - else return 0; -} - -static Dtdisc_t edgepair = { - offsetof(edgepair_t, key), - sizeof(Agedge_t*), - offsetof(edgepair_t, link), - NIL(Dtmake_f), - NIL(Dtfree_f), - (Dtcompar_f) cmppair, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -/* cloneGraph: - * Clone node, edge and subgraph structure from src to tgt. - */ -static void cloneGraph(Agraph_t * tgt, Agraph_t * src) -{ - Agedge_t *e; - Agedge_t *ne; - Agnode_t *t; - Agraph_t *sg; - char* name; - Dt_t* emap = dtopen (&edgepair, Dtoset); - edgepair_t* data = (edgepair_t*)malloc(sizeof(edgepair_t)*agnedges(src)); - edgepair_t* ep = data; - - for (t = agfstnode(src); t; t = agnxtnode(src, t)) { - if (!copy(tgt, OBJ(t))) { - exerror("error cloning node %s from graph %s", - agnameof(t), agnameof(src)); - } - } - for (t = agfstnode(src); t; t = agnxtnode(src, t)) { - for (e = agfstout(src, t); e; e = agnxtout(src, e)) { - if (!(ne = (Agedge_t*)copy(tgt, OBJ(e)))) { - name = agnameof(AGMKOUT(e)); - if (name) - exerror("error cloning edge (%s,%s)[%s] from graph %s", - agnameof(agtail(e)), agnameof(aghead(e)), - name, agnameof(src)); - else - exerror("error cloning edge (%s,%s) from graph %s", - agnameof(agtail(e)), agnameof(aghead(e)), - agnameof(src)); - return; - } - ep->key = e; - ep->val = ne; - dtinsert (emap, ep++); - } - } - for (sg = agfstsubg(src); sg; sg = agnxtsubg(sg)) { - if (!cloneSubg(tgt, sg, emap)) { - exerror("error cloning subgraph %s from graph %s", - agnameof(sg), agnameof(src)); - } - } - - dtclose (emap); - free (data); -} - -/* cloneG: - */ -Agraph_t *cloneG(Agraph_t * g, char* name) -{ - Agraph_t* ng; - - if (!name || (*name == '\0')) - name = agnameof (g); - ng = openG(name, g->desc); - if (ng) { - copyAttr((Agobj_t*)g, (Agobj_t*)ng); - cloneGraph(ng, g); - } - return ng; -} - -/* clone: - * Create new object of type AGTYPE(obj) with all of its - * attributes and substructure. - * If obj is an edge, end nodes are cloned if necessary. - * If obj is a graph, if g is null, create a clone top-level - * graph. Otherwise, create a clone subgraph of g. - * Assume obj != NULL. - */ -Agobj_t *clone(Agraph_t * g, Agobj_t * obj) -{ - Agobj_t *nobj = 0; - Agedge_t *e; - Agnode_t *h; - Agnode_t *t; - int kind = AGTYPE(obj); - char *name; - - if ((kind != AGRAPH) && !g) { - exerror("NULL graph with non-graph object in clone()"); - return 0; - } - - switch (kind) { - case AGNODE: /* same as copy node */ - name = agnameof(obj); - nobj = (Agobj_t *) openNode(g, name); - if (nobj) - copyAttr(obj, nobj); - break; - case AGRAPH: - name = agnameof(obj); - if (g) - nobj = (Agobj_t *) openSubg(g, name); - else - nobj = (Agobj_t *) openG(name, ((Agraph_t *) obj)->desc); - if (nobj) { - copyAttr(obj, nobj); - cloneGraph((Agraph_t *) nobj, (Agraph_t *) obj); - } - break; - case AGINEDGE: - case AGOUTEDGE: - e = (Agedge_t *) obj; - t = (Agnode_t *) clone(g, OBJ(agtail(e))); - h = (Agnode_t *) clone(g, OBJ(aghead(e))); - name = agnameof (AGMKOUT(e)); - nobj = (Agobj_t *) openEdge(g, t, h, name); - if (nobj) - copyAttr(obj, nobj); - break; - } - - return nobj; -} - -#define CCMARKED(n) (((nData(n))->iu.integer)&2) -#define CCMARK(n) (((nData(n))->iu.integer) |= 2) -#define CCUNMARK(n) (((nData(n))->iu.integer) &= ~2) - -static void cc_dfs(Agraph_t* g, Agraph_t * comp, Agnode_t * n) -{ - Agedge_t *e; - Agnode_t *other; - - CCMARK(n); - agidnode(comp, AGID(n), 1); - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - if (agtail(e) == n) - other = aghead(e); - else - other = agtail(e); - if (!CCMARKED(other)) - cc_dfs(g, comp, other); - } -} - -/* compOf: - * Return connected component of node. - */ -Agraph_t *compOf(Agraph_t * g, Agnode_t * n) -{ - Agraph_t *cg; - Agnode_t *np; - static int id; - char name[64]; - - if (!(n = agidnode(g, AGID(n), 0))) - return 0; /* n not in g */ - for (np = agfstnode(g); np; np = agnxtnode(g, np)) - CCUNMARK(np); - - sprintf(name, "_cc_%d", id++); - cg = openSubg(g, name); - cc_dfs(g, cg, n); - - return cg; -} - -/* isEdge: - * Return edge, if any, between t and h with given key. - * Edge is in g. - */ -Agedge_t *isEdge(Agraph_t* g, Agnode_t * t, Agnode_t * h, char *key) -{ - Agraph_t *root; - - root = sameG(t, h, "isEdge", "tail and head node"); - if (!root) - return 0; - if (g) { - if (root != agroot(g)) return 0; - } - else - g = root; - - return agedge(g, t, h, key, 0); -} - -/* addNode: - * Insert node n into subgraph g. - * Return image of n - */ -Agnode_t *addNode(Agraph_t * gp, Agnode_t * np, int doAdd) -{ - if (!sameG(gp, np, "addNode", 0)) - return 0; - return agsubnode(gp, np, doAdd); -} - -/* addEdge: - * Insert edge e into subgraph g. - * Return image of e - */ -Agedge_t *addEdge(Agraph_t * gp, Agedge_t * ep, int doAdd) -{ - if (!sameG(gp, ep, "addEdge", 0)) - return 0; - return agsubedge(gp, ep, doAdd); -} - -/* lockGraph: - * Set lock so that graph g will not be deleted. - * g must be a root graph. - * If v > 0, set lock - * If v = 0, unset lock and delete graph is necessary. - * If v < 0, no op - * Always return previous lock state. - * Return -1 on error. - */ -int lockGraph(Agraph_t * g, int v) -{ - gdata *data; - int oldv; - - if (g != agroot(g)) { - error(ERROR_WARNING, - "Graph argument to lock() is not a root graph"); - return -1; - } - data = gData(g); - oldv = data->lock & 1; - if (v > 0) - data->lock |= 1; - else if ((v == 0) && oldv) { - if (data->lock & 2) - agclose(g); - else - data->lock = 0; - } - return oldv; -} - -/* deleteObj: - * Remove obj from g. - * obj may belong to a subgraph of g, so we first must map - * obj to its version in g. - * If g is null, remove object from root graph. - * If obj is a (sub)graph, close it. The g parameter is unused. - * Return 0 on success, non-zero on failure. - */ -int deleteObj(Agraph_t * g, Agobj_t * obj) -{ - gdata *data; - if (AGTYPE(obj) == AGRAPH) { - g = (Agraph_t *) obj; - if (g != agroot(g)) - return agclose(g); - data = gData(g); - if (data->lock & 1) { - error(ERROR_WARNING, "Cannot delete locked graph %s", - agnameof(g)); - data->lock |= 2; - return -1; - } else - return agclose(g); - } - - /* node or edge */ - if (!g) - g = agroot(agraphof(obj)); - if (obj) - return agdelete(g, obj); - else - return -1; -} - -/* sfioWrite: - * If the graph is passed in from a library, its output discipline - * might not use sfio. In this case, we push an sfio discipline on - * the graph, write it, and then pop it off. - */ -int sfioWrite(Agraph_t * g, Sfio_t* fp, Agiodisc_t* dfltDisc) -{ - Agiodisc_t* saveio = NULL; - int rv; - - if (g->clos->disc.io != dfltDisc) { - saveio = g->clos->disc.io; - g->clos->disc.io = dfltDisc; - } - rv = agwrite (g, fp); - if (g->clos->disc.io != dfltDisc) { - g->clos->disc.io = saveio; - } - return rv; -} - -/* writeFile: - * Write graph into file f. - * Return 0 on success - */ -int writeFile(Agraph_t * g, char *f, Agiodisc_t* io) -{ - int rv; - Sfio_t *fp; - - if (!f) { - exerror("NULL string passed to writeG"); - return 1; - } - fp = sfopen(0, f, "w"); - if (!fp) { - exwarn("Could not open %s for writing in writeG", f); - return 1; - } - rv = sfioWrite(g, fp, io); - sfclose(fp); - return rv; -} - -/* readFile: - * Read graph from file f. - * Return 0 on failure - */ -Agraph_t *readFile(char *f) -{ - Agraph_t *gp; - Sfio_t *fp; - - if (!f) { - exerror("NULL string passed to readG"); - return 0; - } - fp = sfopen(0, f, "r"); - if (!fp) { - exwarn("Could not open %s for reading in readG", f); - return 0; - } - gp = readG(fp); - sfclose(fp); - - return gp; -} - -int fwriteFile(Expr_t * ex, Agraph_t * g, int fd, Agiodisc_t* io) -{ - Sfio_t *sp; - - if (fd < 0 || fd >= elementsof(ex->file) - || !((sp = ex->file[fd]))) { - exerror("fwriteG: %d: invalid descriptor", fd); - return 0; - } - return sfioWrite(g, sp, io); -} - -Agraph_t *freadFile(Expr_t * ex, int fd) -{ - Sfio_t *sp; - - if (fd < 0 || fd >= elementsof(ex->file) - || !((sp = ex->file[fd]))) { - exerror("freadG: %d: invalid descriptor", fd); - return 0; - } - return readG(sp); -} - -int openFile(Expr_t * ex, char *fname, char *mode) -{ - int idx; - - /* find open index */ - for (idx = 3; idx < elementsof(ex->file); idx++) - if (!ex->file[idx]) - break; - if (idx == elementsof(ex->file)) { - exerror("openF: no available descriptors"); - return -1; - } - ex->file[idx] = sfopen(0, fname, mode); - if (ex->file[idx]) - return idx; - else - return -1; -} - -int closeFile(Expr_t * ex, int fd) -{ - int rv; - - if ((0 <= fd) && (fd <= 2)) { - exerror("closeF: cannot close standard stream %d", fd); - return -1; - } - if (!ex->file[fd]) { - exerror("closeF: stream %d not open", fd); - return -1; - } - rv = sfclose(ex->file[fd]); - if (!rv) - ex->file[fd] = 0; - return rv; -} - -/* - * Read single line from stream. - * Return "" on EOF. - */ -char *readLine(Expr_t * ex, int fd) -{ - Sfio_t *sp; - int c; - Sfio_t *tmps; - char *line; - - if (fd < 0 || fd >= elementsof(ex->file) || !((sp = ex->file[fd]))) { - exerror("readL: %d: invalid descriptor", fd); - return ""; - } - tmps = sfstropen(); - while (((c = sfgetc(sp)) > 0) && (c != '\n')) - sfputc(tmps, c); - if (c == '\n') - sfputc(tmps, c); - line = exstring(ex, sfstruse(tmps)); - sfclose(tmps); - return line; -} - -/* compare: - * Lexicographic ordering of objects. - */ -int compare(Agobj_t * l, Agobj_t * r) -{ - char lkind, rkind; - if (l == NULL) { - if (r == NULL) - return 0; - else - return -1; - } else if (r == NULL) { - return 1; - } - if (AGID(l) < AGID(r)) - return -1; - else if (AGID(l) > AGID(r)) - return 1; - lkind = AGTYPE(l); - rkind = AGTYPE(r); - if (lkind == 3) - lkind = 2; - if (rkind == 3) - rkind = 2; - if (lkind == rkind) - return 0; - else if (lkind < rkind) - return -1; - else - return 1; -} - -/* toLower: - * Convert characters to lowercase - */ -char *toLower(Expr_t * pgm, char *s, Sfio_t* tmps) -{ - int c; - - while ((c = *s++)) - sfputc (tmps, tolower (c)); - - return exstring(pgm, sfstruse(tmps)); -} - -/* toUpper: - * Convert characters to uppercase - */ -char *toUpper(Expr_t * pgm, char *s, Sfio_t* tmps) -{ - int c; - - while ((c = *s++)) - sfputc (tmps, toupper (c)); - - return exstring(pgm, sfstruse(tmps)); -} - -/* toHtml: - * Create a string marked as HTML - */ -char *toHtml(Agraph_t* g, char *arg) -{ - return agstrdup_html (g, arg); -} - -/* canon: - * Canonicalize a string for printing. - */ -char *canon(Expr_t * pgm, char *arg) -{ - char *p; - - p = agcanonStr(arg); - if (p != arg) - p = exstring(pgm, p); - - return p; -} - -#include -#ifdef WIN32 -#include "compat.h" -#endif - -#include "arith.h" -#include "color.h" -#include "colortbl.h" - -static char* colorscheme; - -#ifdef _MSC_VER -extern int strcasecmp(const char *s1, const char *s2); -extern int strncasecmp(const char *s1, const char *s2, unsigned int n); -#endif - - -static void hsv2rgb(double h, double s, double v, - double *r, double *g, double *b) -{ - int i; - double f, p, q, t; - - if (s <= 0.0) { /* achromatic */ - *r = v; - *g = v; - *b = v; - } else { - if (h >= 1.0) - h = 0.0; - h = 6.0 * h; - i = (int) h; - f = h - (double) i; - p = v * (1 - s); - q = v * (1 - (s * f)); - t = v * (1 - (s * (1 - f))); - switch (i) { - case 0: - *r = v; - *g = t; - *b = p; - break; - case 1: - *r = q; - *g = v; - *b = p; - break; - case 2: - *r = p; - *g = v; - *b = t; - break; - case 3: - *r = p; - *g = q; - *b = v; - break; - case 4: - *r = t; - *g = p; - *b = v; - break; - case 5: - *r = v; - *g = p; - *b = q; - break; - } - } -} - -static void rgb2hsv(double r, double g, double b, - double *h, double *s, double *v) -{ - - double rgbmin, rgbmax; - double rc, bc, gc; - double ht = 0.0, st = 0.0; - - rgbmin = MIN(r, MIN(g, b)); - rgbmax = MAX(r, MAX(g, b)); - - if (rgbmax > 0.0) - st = (rgbmax - rgbmin) / rgbmax; - - if (st > 0.0) { - rc = (rgbmax - r) / (rgbmax - rgbmin); - gc = (rgbmax - g) / (rgbmax - rgbmin); - bc = (rgbmax - b) / (rgbmax - rgbmin); - if (r == rgbmax) - ht = bc - gc; - else if (g == rgbmax) - ht = 2 + rc - bc; - else if (b == rgbmax) - ht = 4 + gc - rc; - ht = ht * 60.0; - if (ht < 0.0) - ht += 360.0; - } - *h = ht / 360.0; - *v = rgbmax; - *s = st; -} - -static void rgb2cmyk(double r, double g, double b, double *c, double *m, - double *y, double *k) -{ - *c = 1.0 - r; - *m = 1.0 - g; - *y = 1.0 - b; - *k = *c < *m ? *c : *m; - *k = *y < *k ? *y : *k; - *c -= *k; - *m -= *k; - *y -= *k; -} - -static int colorcmpf(const void *p0, const void *p1) -{ - return strcasecmp(((hsvrgbacolor_t *) p0)->name, ((hsvrgbacolor_t *) p1)->name); -} - -static char *canontoken(char *str) -{ - static unsigned char *canon; - static int allocated; - unsigned char c, *p, *q; - int len; - - p = (unsigned char *) str; - len = strlen(str); - if (len >= allocated) { - allocated = len + 1 + 10; - canon = newof(canon, unsigned char, allocated, 0); - if (!canon) - return NULL; - } - q = (unsigned char *) canon; - while ((c = *p++)) { - /* if (isalnum(c) == FALSE) */ - /* continue; */ - if (isupper(c)) - c = tolower(c); - *q++ = c; - } - *q = '\0'; - return (char*)canon; -} - -/* fullColor: - * Return "/prefix/str" - */ -static char* fullColor (char* prefix, char* str) -{ - static char *fulls; - static int allocated; - int len = strlen (prefix) + strlen (str) + 3; - - if (len >= allocated) { - allocated = len + 10; - fulls = newof(fulls, char, allocated, 0); - } - sprintf (fulls, "/%s/%s", prefix, str); - return fulls; -} - -/* resolveColor: - * Resolve input color str allowing color scheme namespaces. - * 0) "black" => "black" - * "white" => "white" - * "lightgrey" => "lightgrey" - * NB: This is something of a hack due to the remaining codegen. - * Once these are gone, this case could be removed and all references - * to "black" could be replaced by "/X11/black". - * 1) No initial / => - * if colorscheme is defined and no "X11", return /colorscheme/str - * else return str - * 2) One initial / => return str+1 - * 3) Two initial /'s => - * a) If colorscheme is defined and not "X11", return /colorscheme/(str+2) - * b) else return (str+2) - * 4) Two /'s, not both initial => return str. - * - * Note that 1), 2), and 3b) allow the default X11 color scheme. - * - * In other words, - * xxx => /colorscheme/xxx if colorscheme is defined and not "X11" - * xxx => xxx otherwise - * /xxx => xxx - * /X11/yyy => yyy - * /xxx/yyy => /xxx/yyy - * //yyy => /colorscheme/yyy if colorscheme is defined and not "X11" - * //yyy => yyy otherwise - * - * At present, no other error checking is done. For example, - * yyy could be "". This will be caught later. - */ - -#define DFLT_SCHEME "X11/" /* Must have final '/' */ -#define DFLT_SCHEME_LEN ((sizeof(DFLT_SCHEME)-1)/sizeof(char)) -#define ISNONDFLT(s) ((s) && *(s) && strncasecmp(DFLT_SCHEME, s, DFLT_SCHEME_LEN-1)) - -static char* resolveColor (char* str) -{ - char* s; - char* ss; /* second slash */ - char* c2; /* second char */ - - if ((*str == 'b') || !strncmp(str+1,"lack",4)) return str; - if ((*str == 'w') || !strncmp(str+1,"hite",4)) return str; - if ((*str == 'l') || !strncmp(str+1,"ightgrey",8)) return str; - if (*str == '/') { /* if begins with '/' */ - c2 = str+1; - if ((ss = strchr(c2, '/'))) { /* if has second '/' */ - if (*c2 == '/') { /* if second '/' is second character */ - /* Do not compare against final '/' */ - if (ISNONDFLT(colorscheme)) - s = fullColor (colorscheme, c2+1); - else - s = c2+1; - } - else if (strncasecmp(DFLT_SCHEME, c2, DFLT_SCHEME_LEN)) s = str; - else s = ss + 1; - } - else s = c2; - } - else if (ISNONDFLT(colorscheme)) s = fullColor (colorscheme, str); - else s = str; - return canontoken(s); -} - -#undef S - -static -int colorxlate(char *str, gvcolor_t * color, color_type_t target_type) -{ - static hsvrgbacolor_t *last; - static unsigned char *canon; - static int allocated; - unsigned char *p, *q; - hsvrgbacolor_t fake; - unsigned char c; - double H, S, V, A, R, G, B; - double C, M, Y, K; - unsigned int r, g, b, a; - int len, rc; - - color->type = target_type; - - rc = COLOR_OK; - for (; *str == ' '; str++); /* skip over any leading whitespace */ - p = (unsigned char *) str; - - /* test for rgb value such as: "#ff0000" - or rgba value such as "#ff000080" */ - a = 255; /* default alpha channel value=opaque in case not supplied */ - if ((*p == '#') - && (sscanf((char *) p, "#%2x%2x%2x%2x", &r, &g, &b, &a) >= 3)) { - switch (target_type) { - case HSVA_DOUBLE: - R = (double) r / 255.0; - G = (double) g / 255.0; - B = (double) b / 255.0; - A = (double) a / 255.0; - rgb2hsv(R, G, B, &H, &S, &V); - color->u.HSVA[0] = H; - color->u.HSVA[1] = S; - color->u.HSVA[2] = V; - color->u.HSVA[3] = A; - break; - case RGBA_BYTE: - color->u.rgba[0] = r; - color->u.rgba[1] = g; - color->u.rgba[2] = b; - color->u.rgba[3] = a; - break; - case CMYK_BYTE: - R = (double) r / 255.0; - G = (double) g / 255.0; - B = (double) b / 255.0; - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C *255; - color->u.cmyk[1] = (int) M *255; - color->u.cmyk[2] = (int) Y *255; - color->u.cmyk[3] = (int) K *255; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = r * 65535 / 255; - color->u.rrggbbaa[1] = g * 65535 / 255; - color->u.rrggbbaa[2] = b * 65535 / 255; - color->u.rrggbbaa[3] = a * 65535 / 255; - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = (double) r / 255.0; - color->u.RGBA[1] = (double) g / 255.0; - color->u.RGBA[2] = (double) b / 255.0; - color->u.RGBA[3] = (double) a / 255.0; - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - - /* test for hsv value such as: ".6,.5,.3" */ - if (((c = *p) == '.') || isdigit(c)) { - int cnt; - len = strlen((char*)p); - if (len >= allocated) { - allocated = len + 1 + 10; - canon = newof(canon, unsigned char, allocated, 0); - if (! canon) { - rc = COLOR_MALLOC_FAIL; - return rc; - } - } - q = canon; - while ((c = *p++)) { - if (c == ',') - c = ' '; - *q++ = c; - } - *q = '\0'; - - if ((cnt = sscanf((char *) canon, "%lf%lf%lf%lf", &H, &S, &V, &A)) >= 3) { - /* clip to reasonable values */ - H = MAX(MIN(H, 1.0), 0.0); - S = MAX(MIN(S, 1.0), 0.0); - V = MAX(MIN(V, 1.0), 0.0); - if (cnt == 4) - A = MAX(MIN(A, 1.0), 0.0); - else - A = 1.0; - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = H; - color->u.HSVA[1] = S; - color->u.HSVA[2] = V; - color->u.HSVA[3] = A; - break; - case RGBA_BYTE: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.rgba[0] = (int) (R * 255); - color->u.rgba[1] = (int) (G * 255); - color->u.rgba[2] = (int) (B * 255); - color->u.rgba[3] = (int) (A * 255); - break; - case CMYK_BYTE: - hsv2rgb(H, S, V, &R, &G, &B); - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C *255; - color->u.cmyk[1] = (int) M *255; - color->u.cmyk[2] = (int) Y *255; - color->u.cmyk[3] = (int) K *255; - break; - case RGBA_WORD: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.rrggbbaa[0] = (int) (R * 65535); - color->u.rrggbbaa[1] = (int) (G * 65535); - color->u.rrggbbaa[2] = (int) (B * 65535); - color->u.rrggbbaa[3] = (int) (A * 65535); - break; - case RGBA_DOUBLE: - hsv2rgb(H, S, V, &R, &G, &B); - color->u.RGBA[0] = R; - color->u.RGBA[1] = G; - color->u.RGBA[2] = B; - color->u.RGBA[3] = A; - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - } - - /* test for known color name (generic, not renderer specific known names) */ - fake.name = resolveColor(str); - if (!fake.name) - return COLOR_MALLOC_FAIL; - if ((last == NULL) - || (last->name[0] != fake.name[0]) - || (strcmp(last->name, fake.name))) { - last = (hsvrgbacolor_t *) bsearch((void *) &fake, - (void *) color_lib, - sizeof(color_lib) / - sizeof(hsvrgbacolor_t), sizeof(fake), - colorcmpf); - } - if (last != NULL) { - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = ((double) last->h) / 255.0; - color->u.HSVA[1] = ((double) last->s) / 255.0; - color->u.HSVA[2] = ((double) last->v) / 255.0; - color->u.HSVA[3] = ((double) last->a) / 255.0; - break; - case RGBA_BYTE: - color->u.rgba[0] = last->r; - color->u.rgba[1] = last->g; - color->u.rgba[2] = last->b; - color->u.rgba[3] = last->a; - break; - case CMYK_BYTE: - R = (last->r) / 255.0; - G = (last->g) / 255.0; - B = (last->b) / 255.0; - rgb2cmyk(R, G, B, &C, &M, &Y, &K); - color->u.cmyk[0] = (int) C * 255; - color->u.cmyk[1] = (int) M * 255; - color->u.cmyk[2] = (int) Y * 255; - color->u.cmyk[3] = (int) K * 255; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = last->r * 65535 / 255; - color->u.rrggbbaa[1] = last->g * 65535 / 255; - color->u.rrggbbaa[2] = last->b * 65535 / 255; - color->u.rrggbbaa[3] = last->a * 65535 / 255; - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = last->r / 255.0; - color->u.RGBA[1] = last->g / 255.0; - color->u.RGBA[2] = last->b / 255.0; - color->u.RGBA[3] = last->a / 255.0; - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; - } - - /* if we're still here then we failed to find a valid color spec */ - rc = COLOR_UNKNOWN; - switch (target_type) { - case HSVA_DOUBLE: - color->u.HSVA[0] = color->u.HSVA[1] = color->u.HSVA[2] = 0.0; - color->u.HSVA[3] = 1.0; /* opaque */ - break; - case RGBA_BYTE: - color->u.rgba[0] = color->u.rgba[1] = color->u.rgba[2] = 0; - color->u.rgba[3] = 255; /* opaque */ - break; - case CMYK_BYTE: - color->u.cmyk[0] = - color->u.cmyk[1] = color->u.cmyk[2] = color->u.cmyk[3] = 0; - break; - case RGBA_WORD: - color->u.rrggbbaa[0] = color->u.rrggbbaa[1] = color->u.rrggbbaa[2] = 0; - color->u.rrggbbaa[3] = 65535; /* opaque */ - break; - case RGBA_DOUBLE: - color->u.RGBA[0] = color->u.RGBA[1] = color->u.RGBA[2] = 0.0; - color->u.RGBA[3] = 1.0; /* opaque */ - break; - case COLOR_STRING: - break; - case COLOR_INDEX: - break; - } - return rc; -} - -/* colorx: - * RGB, RGBA, HSV, HSVA, CMYK - */ -char *colorx (Expr_t* ex, char* incolor, char* fmt, Sfio_t* fp) -{ - gvcolor_t color = {0}; - color_type_t type; - int rc; - int alpha; - - if ((*fmt == '\0') || (*incolor == '\0')) - return ""; - if (*fmt == 'R') { - type = RGBA_BYTE; - if (!strcmp (fmt, "RGBA")) - alpha = 1; - else - alpha = 0; - } - else if (*fmt == 'H') { - type = HSVA_DOUBLE; - if (!strcmp (fmt, "HSVA")) - alpha = 1; - else - alpha = 0; - } - else if (*fmt == 'C') { - type = CMYK_BYTE; - } - else - return ""; - - rc = colorxlate (incolor, &color, type); - if (rc != COLOR_OK) - return ""; - - switch (type) { - case HSVA_DOUBLE : - sfprintf (fp, "%.03f %.03f %.03f", - color.u.HSVA[0], color.u.HSVA[1], color.u.HSVA[2]); - if (alpha) - sfprintf (fp, " %.03f", color.u.HSVA[3]); - break; - case RGBA_BYTE : - sfprintf (fp, "#%02x%02x%02x", - color.u.rgba[0], color.u.rgba[1], color.u.rgba[2]); - if (alpha) - sfprintf (fp, "%02x", color.u.rgba[3]); - break; - case CMYK_BYTE : - sfprintf (fp, "#%02x%02x%02x%02x", - color.u.cmyk[0], color.u.cmyk[1], color.u.cmyk[2], color.u.cmyk[3]); - break; - default : - break; - } - - return exstring(ex, sfstruse(fp)); -} - -#ifndef WIN32 - -#include -#include -#include -#include - - - -#ifndef HZ -#define HZ 60 -#endif -typedef struct tms mytime_t; -#define GET_TIME(S) times(&(S)) -#define DIFF_IN_SECS(S,T) ((S.tms_utime + S.tms_stime - T.tms_utime - T.tms_stime)/(double)HZ) - -#else - -#include - -typedef clock_t mytime_t; -#define GET_TIME(S) S = clock() -#define DIFF_IN_SECS(S,T) ((S - T) / (double)CLOCKS_PER_SEC) - -#endif - -static mytime_t T; - -void gvstart_timer(void) -{ - GET_TIME(T); -} - -double gvelapsed_sec(void) -{ - mytime_t S; - double rv; - - GET_TIME(S); - rv = DIFF_IN_SECS(S, T); - return rv; -} - diff --git a/internal/ccall/gvpr/actions.h b/internal/ccall/gvpr/actions.h deleted file mode 100644 index 514a64a..0000000 --- a/internal/ccall/gvpr/actions.h +++ /dev/null @@ -1,60 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef ACTIONS_H -#define ACTIONS_H - -#include "cgraph.h" -#include "expr.h" - - extern void nodeInduce(Agraph_t * selected); - extern Agobj_t *clone(Agraph_t * g, Agobj_t * obj); - extern Agraph_t *cloneG(Agraph_t * g, char* name); - extern Agobj_t *copy(Agraph_t * g, Agobj_t * obj); - extern int copyAttr(Agobj_t * obj, Agobj_t * obj1); - extern int indexOf(char *s1, char *s2); - extern int rindexOf(char *s1, char *s2); - extern int match(char *str, char *pat); - extern int lockGraph(Agraph_t * g, int); - extern Agraph_t *compOf(Agraph_t * g, Agnode_t * n); - extern Agedge_t *isEdge(Agraph_t* g, Agnode_t * t, Agnode_t * h, char *key); - extern Agnode_t *addNode(Agraph_t * g, Agnode_t * n, int doAdd); - extern Agedge_t *addEdge(Agraph_t * g, Agedge_t * e, int doAdd); - extern Agraph_t *sameG(void *p1, void *p2, char *fn, char *msg); - extern int compare(Agobj_t *, Agobj_t *); - extern int sfioWrite(Agraph_t *, Sfio_t*, Agiodisc_t*); - extern int writeFile(Agraph_t *, char *, Agiodisc_t*); - extern int fwriteFile(Expr_t *, Agraph_t *, int, Agiodisc_t*); - extern Agraph_t *readFile(char *); - extern Agraph_t *freadFile(Expr_t *, int); - extern int openFile(Expr_t *, char *, char *); - extern int closeFile(Expr_t *, int); - extern char *readLine(Expr_t *, int); - extern char *canon(Expr_t * pgm, char *); - extern char *toHtml(Agraph_t*, char *); - extern char *toLower(Expr_t * pgm, char *, Sfio_t*); - extern char *toUpper(Expr_t * pgm, char *, Sfio_t*); - extern int deleteObj(Agraph_t * g, Agobj_t * obj); - extern char *colorx (Expr_t* ex, char* incolor, char* fmt, Sfio_t* fp); - extern void gvstart_timer(void); - extern double gvelapsed_sec(void); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/compile.c b/internal/ccall/gvpr/compile.c deleted file mode 100644 index 01b0d25..0000000 --- a/internal/ccall/gvpr/compile.c +++ /dev/null @@ -1,2673 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Compile-time and run-time interface between gpr and libexpr - */ - -#include "config.h" -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include "compile.h" -#include -#include "cgraph.h" -#include -#include -#include "sfstr.h" -#include -#include -#include - -#define ISEDGE(e) (AGTYPE(e)&2) -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define MAX(a,b) ((a)>(b)?(a):(b)) - -#include - -#include "ctype.h" -#include "trie.c" - -#define BITS_PER_BYTE 8 -#ifdef HAVE_INTPTR_T -#define INT2PTR(t,v) ((t)(intptr_t)(v)) -#define PTR2INT(v) ((Sflong_t)(intptr_t)(v)) -#else -#define INT2PTR(t,v) ((t)(v)) -#define PTR2INT(v) ((Sflong_t)(v)) -#endif - -static int iofread(void *chan, char *buf, int bufsize) -{ - return read(sffileno((Sfio_t *) chan), buf, bufsize); -} - -static int ioputstr(void *chan, const char *str) -{ - return sfputr((Sfio_t *) chan, str, -1); -} - -static int ioflush(void *chan) -{ - return sfsync((Sfio_t *) chan); -} - -static Agiodisc_t gprIoDisc = { iofread, ioputstr, ioflush }; - -#ifdef WIN32 -static Agdisc_t gprDisc = { 0, 0, &gprIoDisc }; -#else -static Agdisc_t gprDisc = { &AgMemDisc, &AgIdDisc, &gprIoDisc }; -#endif - -/* nameOf: - * Return name of object. - * Assumes obj != NULL - */ -static char *nameOf(Expr_t * ex, Agobj_t * obj, Sfio_t* tmps) -{ - char *s; - char *key; - Agedge_t *e; - - switch (AGTYPE(obj)) { - case AGNODE: - case AGRAPH: - s = agnameof(obj); - break; - default: /* edge */ - e = (Agedge_t *) obj; - key = agnameof(AGMKOUT(e)); - sfputr(tmps, agnameof(AGTAIL(e)), -1); - if (agisdirected(agraphof(e))) - sfputr(tmps, "->", -1); - else - sfputr(tmps, "--", -1); - sfputr(tmps, agnameof(AGHEAD(e)), -1); - if (key && *key) { - sfputc(tmps, '['); - sfputr(tmps, key, -1); - sfputc(tmps, ']'); - } - s = exstring(ex, sfstruse(tmps)); - break; - } - return s; -} - -/* bbOf: - * If string as form "x,y,u,v" where is all are numeric, - * return "x,y" or "u,v", depending on getll, else return "" - */ -static char *bbOf(Expr_t * pgm, char *pt, int getll) -{ - double x, y, u, v; - char *s; - char *p; - int len; - - if (sscanf(pt, "%lf,%lf,%lf,%lf", &x, &y, &u, &v) == 4) { - p = strchr(pt, ','); - p = strchr(p + 1, ','); - if (getll) { - len = p - pt; - s = exstralloc(pgm, 0, len + 1); - strncpy(s, pt, len); - s[len] = '\0'; - } else - s = exstring(pgm, p + 1); - } else - s = ""; - return s; -} - -/* xyOf: - * If string as form "x,y" where is x and y are numeric, - * return "x" or "y", depending on getx, else return "" - */ -static char *xyOf(Expr_t * pgm, char *pt, int getx) -{ - double x, y; - char *v; - char *p; - int len; - - if (sscanf(pt, "%lf,%lf", &x, &y) == 2) { - p = strchr(pt, ','); - if (getx) { - len = p - pt; - v = exstralloc(pgm, 0, len + 1); - strncpy(v, pt, len); - v[len] = '\0'; - } else - v = exstring(pgm, p + 1); - } else - v = ""; - return v; -} - -/* posOf: - * Get pos data from node; store x or y into v if successful and return 0; - * else return -1 - */ -static int posOf(Agnode_t* np, int idx, double* v) -{ - static Agraph_t* root; - static Agsym_t* pos; - Agraph_t* nroot = agroot(np); - char* ps; - double p[2]; - - if (root != nroot) { - root = nroot; - pos = agattr(root, AGNODE, "pos", 0); - } - if (!pos) return -1; - ps = agxget(np, pos); - if (sscanf(ps, "%lf,%lf", &p[0], &p[1]) == 2) { - *v = p[idx]; - return 0; - } - else return -1; - -} - -#if DEBUG > 1 -static char *symName(Expr_t * ex, int op) -{ - if (op >= MINNAME && op <= MAXNAME) - return gprnames[op]; - else { - Sfio_t *sf = sfstropen(); - char *s; - - sfprintf(sf, "", op); - s = exstring(ex, sfstruse(sf)); - sfclose(sf); - return s; - } -} -#endif - -/* xargs: - * Convert string argument to graph to type of graph desired. - * u => undirected - * d => directed - * s => strict - * n => non-strict - * Case-insensitive - * By default, the graph is directed, non-strict. - */ -static Agdesc_t xargs(char *args) -{ - Agdesc_t desc = Agdirected; - char c; - - while ((c = *args++)) { - switch (c) { - case 'u': - case 'U': - desc.directed = 0; - break; - case 'd': - case 'D': - desc.directed = 1; - break; - case 's': - case 'S': - desc.strict = 1; - break; - case 'n': - case 'N': - desc.directed = 0; - break; - default: - error(ERROR_WARNING, "unknown graph descriptor '%c' : ignored", - c); - break; - } - } - return desc; -} - -/* deparse: - * Recreate string representation of expression involving - * a reference and a symbol. - * The parameter sf must be a string stream. - */ -static char *deparse(Expr_t * ex, Exnode_t * n, Sfio_t * sf) -{ - exdump(ex, n, sf); - return (sfstruse(sf)); -} - -/* deref: - * Evaluate reference to derive desired graph object. - * A reference is either DI* or II* - * The parameter objp is the current object. - * Assume ref is type-correct. - */ -static Agobj_t *deref(Expr_t * pgm, Exnode_t * x, Exref_t * ref, - Agobj_t * objp, Gpr_t * state) -{ - void *ptr; - - if (ref == 0) - return objp; - else if (ref->symbol->lex == DYNAMIC) { - ptr = - INT2PTR(void *, - x->data.variable.dyna->data.variable.dyna->data. - constant.value.integer); - if (!ptr) { - exerror("null reference %s in expression %s.%s", - ref->symbol->name, ref->symbol->name, deparse(pgm, x, - state->tmp)); - return ptr; - } else - return deref(pgm, x, ref->next, (Agobj_t *) ptr, state); - } else - switch (ref->symbol->index) { /* sym->lex == ID */ - case V_outgraph: - return deref(pgm, x, ref->next, (Agobj_t *) state->outgraph, - state); - break; - case V_this: - return deref(pgm, x, ref->next, state->curobj, state); - break; - case V_thisg: - return deref(pgm, x, ref->next, (Agobj_t *) state->curgraph, - state); - break; - case V_nextg: - return deref(pgm, x, ref->next, (Agobj_t *) state->nextgraph, - state); - break; - case V_targt: - return deref(pgm, x, ref->next, (Agobj_t *) state->target, - state); - break; - case V_travedge: - return deref(pgm, x, ref->next, (Agobj_t *) state->tvedge, - state); - break; - case V_travroot: - return deref(pgm, x, ref->next, (Agobj_t *) state->tvroot, - state); - break; - case V_travnext: - return deref(pgm, x, ref->next, (Agobj_t *) state->tvnext, - state); - break; - case M_head: - if (!objp && !(objp = state->curobj)) { - exerror("Current object $ not defined"); - return 0; - } - if (ISEDGE(objp)) - return deref(pgm, x, ref->next, - (Agobj_t *) AGHEAD((Agedge_t *) objp), state); - else - exerror("head of non-edge"); - break; - case M_tail: - if (!objp && !(objp = state->curobj)) { - exerror("Current object $ not defined"); - return 0; - } - if (ISEDGE(objp)) - return deref(pgm, x, ref->next, - (Agobj_t *) AGTAIL((Agedge_t *) objp), state); - else - exerror("tail of non-edge %x", objp); - break; - default: - exerror("%s : illegal reference", - ref->symbol->name); - break; - } - return 0; - -} - -/* assignable: - * Check that attribute is not a read-only, pseudo-attribute. - * Return 1 if okay; fatal otherwise. - */ -static int -assignable (Agobj_t *objp, unsigned char* name) -{ - unsigned int ch; - int rv; - unsigned char* p = name; - - TFA_Init(); - while ((TFA_State >= 0) && (ch = *p)) { - TFA_Advance(ch & ~127 ? 127 : ch); - p++; - } - rv = TFA_Definition(); - if (rv < 0) return 1; - - switch (AGTYPE(objp)) { - case AGRAPH : - if (rv & Y(G)) - exerror("Cannot assign to pseudo-graph attribute %s", name); - break; - case AGNODE : - if (rv & Y(V)) - exerror("Cannot assign to pseudo-node attribute %s", name); - break; - default : /* edge */ - if (rv & Y(E)) - exerror("Cannot assign to pseudo-edge attribute %s", name); - break; - } - return 1; -} - -/* setattr: - * Set object's attribute name to val. - * Initialize attribute if necessary. - */ -static int -setattr (Agobj_t *objp, char* name, char* val) -{ - Agsym_t *gsym = agattrsym(objp, name); - if (!gsym) { - gsym = agattr(agroot(agraphof(objp)), AGTYPE(objp), name, ""); - } - return agxset(objp, gsym, val); -} - -/* kindToStr: - */ -static char* -kindToStr (int kind) -{ - char* s; - - switch (kind) { - case AGRAPH : - s = "graph"; - break; - case AGNODE : - s = "node"; - break; - default : - s = "edge"; - break; - } - return s; -} - -/* kindOf: - * Return string rep of object's kind - */ -static char* -kindOf (Agobj_t* objp) -{ - return (kindToStr (agobjkind (objp))); -} - -/* lookup: - * Apply symbol to get field value of objp - * Assume objp != NULL - */ -static int lookup(Expr_t * pgm, Agobj_t * objp, Exid_t * sym, Extype_t * v, - Gpr_t *state) -{ - if (sym->lex == ID) { - switch (sym->index) { - case M_head: - if (ISEDGE(objp)) - v->integer = PTR2INT(AGHEAD((Agedge_t *) objp)); - else { - error(ERROR_WARNING, "head of non-edge"); - return -1; - } - break; - case M_tail: - if (ISEDGE(objp)) - v->integer = PTR2INT(AGTAIL((Agedge_t *) objp)); - else { - error(ERROR_WARNING, "tail of non-edge"); - return -1; - } - break; - case M_name: - v->string = nameOf(pgm, objp, state->tmp); - break; - case M_indegree: - if (AGTYPE(objp) == AGNODE) - v->integer = agdegree(agroot(objp), (Agnode_t *) objp, 1, 0); - else { - exerror("indegree of non-node"); - return -1; - } - break; - case M_outdegree: - if (AGTYPE(objp) == AGNODE) - v->integer = agdegree(agroot(objp), (Agnode_t *) objp, 0, 1); - else { - exerror("outdegree of non-node"); - return -1; - } - break; - case M_degree: - if (AGTYPE(objp) == AGNODE) - v->integer = agdegree(agroot(objp), (Agnode_t *) objp, 1, 1); - else { - exerror("degree of non-node"); - return -1; - } - break; - case M_X: - if (AGTYPE(objp) == AGNODE) { - if (posOf ((Agnode_t *) objp, 0, &(v->floating))) - exerror("no x coordinate for node \"%s\"", agnameof(objp)); - } else { - exerror("x coordinate of non-node"); - return -1; - } - break; - case M_Y: - if (AGTYPE(objp) == AGNODE) { - if (posOf ((Agnode_t *) objp, 1, &(v->floating))) - exerror("no y coordinate for node \"%s\"", agnameof(objp)); - } else { - exerror("x coordinate of non-node"); - return -1; - } - break; - case M_parent: - if (AGTYPE(objp) == AGRAPH) - v->integer = PTR2INT(agparent((Agraph_t *) objp)); - else { - exerror("parent of non-graph"); - return -1; - } - break; - case M_root: - v->integer = PTR2INT(agroot(agraphof(objp))); - break; - case M_n_edges: - if (AGTYPE(objp) == AGRAPH) - v->integer = agnedges((Agraph_t *) objp); - else { - exerror("n_edges of non-graph"); - return -1; - } - break; - case M_n_nodes: - if (AGTYPE(objp) == AGRAPH) - v->integer = agnnodes((Agraph_t *) objp); - else { - exerror("n_nodes of non-graph"); - return -1; - } - break; - case M_directed: - if (AGTYPE(objp) == AGRAPH) - v->integer = agisdirected((Agraph_t *) objp); - else { - exerror("directed of non-graph"); - return -1; - } - break; - case M_strict: - if (AGTYPE(objp) == AGRAPH) - v->integer = agisstrict((Agraph_t *) objp); - else { - exerror("strict of non-graph"); - return -1; - } - break; - default: - error(ERROR_WARNING, "%s : illegal reference", sym->name); - return -1; - break; - } - } else { - Agsym_t *gsym = agattrsym(objp, sym->name); - if (!gsym) { - gsym = agattr(agroot(agraphof(objp)), AGTYPE(objp), sym->name, ""); - error(ERROR_WARNING, "Using value of uninitialized %s attribute \"%s\" of \"%s\"", kindOf (objp), sym->name, nameOf(pgm, objp, state->tmp)); - } - v->string = agxget(objp, gsym); - } - - return 0; -} - -/* getArg: - * Return value associated with $n. - */ -static char *getArg(int n, Gpr_t * state) -{ - if (n >= state->argc) { - exerror("program references ARGV[%d] - undefined", n); - return 0; - } - return (state->argv[n]); -} - -/* setDfltAttr: - */ -static int -setDfltAttr (Agraph_t *gp, char* k, char* name, char* value) -{ - int kind; - - switch (*k) { - case 'G' : - kind = AGRAPH; - break; - case 'E' : - kind = AGEDGE; - break; - case 'N' : - kind = AGNODE; - break; - default : - error(ERROR_WARNING, "Unknown kind \"%s\" passed to setDflt()", k); - return 1; - break; - } - agattr(gp, kind, name, value); - return 0; -} - -/* toKind: - * Map string to object kind - */ -static int -toKind (char* k, char* fn) -{ - int kind; - - switch (*k) { - case 'G' : - kind = AGRAPH; - break; - case 'E' : - kind = AGEDGE; - break; - case 'N' : - kind = AGNODE; - break; - default : - exerror("Unknown kind \"%s\" passed to %s()", k, fn); - kind = 0; - break; - } - return kind; -} - -/* nxtAttr: - */ -static char* -nxtAttr (Agraph_t *gp, char* k, char* name) -{ - char* fn = (name ? "nxtAttr" : "fstAttr"); - int kind = toKind (k, fn); - Agsym_t* sym; - - if (name) { - sym = agattr (gp, kind, name, 0); - if (!sym) { - exerror("Third argument \"%s\" in nxtAttr() must be the name of an existing attribute", name); - return ""; - } - - } - else sym = NULL; - - sym = agnxtattr (gp, kind, sym); - if (sym) return sym->name; - else return ""; -} - -/* getDfltAttr: - */ -static char* -getDfltAttr (Agraph_t *gp, char* k, char* name) -{ - int kind = toKind (k, "getDflt"); - Agsym_t* sym = agattr (gp, kind, name, 0); - if (!sym) { - sym = agattr(gp, kind, name, ""); - error(ERROR_WARNING, "Uninitialized %s attribute \"%s\" in %s", - kindToStr (kind), name, "getDflt"); - } - return sym->defval; -} - -/* getval: - * Return value associated with gpr identifier. - */ -static Extype_t -getval(Expr_t * pgm, Exnode_t * node, Exid_t * sym, Exref_t * ref, - void *env, int elt, Exdisc_t * disc) -{ - Extype_t v; - Gpr_t *state; - Extype_t *args; - Agobj_t *objp; - Agobj_t *objp1; - char *key; - Agraph_t *gp; - Agnode_t *np; - Agnode_t *hp; - Agedge_t *ep; - char* name; - gvprbinding* bp; - - assert(sym->lex != CONSTANT); - if (elt == EX_CALL) { - args = (Extype_t *) env; - state = (Gpr_t *) (disc->user); - switch (sym->index) { - case F_graph: - gp = openG(args[0].string, xargs(args[1].string)); - v.integer = PTR2INT(gp); - break; - case F_subg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - gp = openSubg(gp, args[1].string); - v.integer = PTR2INT(gp); - } else { - error(ERROR_WARNING, "NULL graph passed to subg()"); - v.integer = 0; - } - break; - case F_issubg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - v.integer = PTR2INT(agsubg(gp, args[1].string, 0)); - } else { - error(ERROR_WARNING, "NULL graph passed to isSubg()"); - v.integer = 0; - } - break; - case F_fstsubg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - gp = agfstsubg(gp); - v.integer = PTR2INT(gp); - } else { - error(ERROR_WARNING, "NULL graph passed to fstsubg()"); - v.integer = 0; - } - break; - case F_nxtsubg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - gp = agnxtsubg(gp); - v.integer = PTR2INT(gp); - } else { - error(ERROR_WARNING, "NULL graph passed to nxtsubg()"); - v.integer = 0; - } - break; - case F_node: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - np = openNode(gp, args[1].string); - v.integer = PTR2INT(np); - } else { - error(ERROR_WARNING, "NULL graph passed to node()"); - v.integer = 0; - } - break; - case F_addnode: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to addNode()"); - v.integer = 0; - } else if (!np) { - error(ERROR_WARNING, "NULL node passed to addNode()"); - v.integer = 0; - } else - v.integer = PTR2INT(addNode(gp, np, 1)); - break; - case F_fstnode: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - np = agfstnode(gp); - v.integer = PTR2INT(np); - } else { - error(ERROR_WARNING, "NULL graph passed to fstnode()"); - v.integer = 0; - } - break; - case F_nxtnode: - np = INT2PTR(Agnode_t *, args[0].integer); - if (np) { - np = agnxtnode(agroot(np), np); - v.integer = PTR2INT(np); - } else { - error(ERROR_WARNING, "NULL node passed to nxtnode()"); - v.integer = 0; - } - break; - case F_nxtnodesg: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - np = agnxtnode(gp, np); - v.integer = PTR2INT(np); - } else { - error(ERROR_WARNING, "NULL node passed to nxtnode_sg()"); - v.integer = 0; - } - break; - case F_isnode: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - v.integer = PTR2INT(agnode(gp, args[1].string, 0)); - } else { - error(ERROR_WARNING, "NULL graph passed to isNode()"); - v.integer = 0; - } - break; - case F_issubnode: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - v.integer = PTR2INT(addNode(gp, np, 0)); - } else { - error(ERROR_WARNING, "NULL node passed to isSubnode()"); - v.integer = 0; - } - break; - case F_indegree: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - v.integer = agdegree(gp, np, 1, 0); - } else { - error(ERROR_WARNING, "NULL node passed to indegreeOf()"); - v.integer = 0; - } - break; - case F_outdegree: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - v.integer = agdegree(gp, np, 0, 1); - } else { - error(ERROR_WARNING, "NULL node passed to outdegreeOf()"); - v.integer = 0; - } - break; - case F_degree: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - v.integer = agdegree(gp, np, 1, 1); - } else { - error(ERROR_WARNING, "NULL node passed to degreeOf()"); - v.integer = 0; - } - break; - case F_isin: - gp = INT2PTR(Agraph_t *, args[0].integer); - objp = INT2PTR(Agobj_t *, args[1].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to isIn()"); - v.integer = 0; - } else if (!objp) { - error(ERROR_WARNING, "NULL object passed to isIn()"); - v.integer = 0; - } else - v.integer = agcontains (gp, objp); - break; - case F_compof: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to compOf()"); - v.integer = 0; - } else if (!np) { - error(ERROR_WARNING, "NULL node passed to compOf()"); - v.integer = 0; - } else - v.integer = PTR2INT(compOf(gp, np)); - break; - case F_kindof: - objp = INT2PTR(Agobj_t *, args[0].integer); - if (!objp) { - exerror("NULL object passed to kindOf()"); - v.string = 0; - } else switch (AGTYPE(objp)) { - case AGRAPH : - v.string = "G"; - break; - case AGNODE : - v.string = "N"; - break; - case AGINEDGE : - case AGOUTEDGE : - v.string = "E"; - break; - } - break; - case F_edge: - key = args[2].string; - if (*key == '\0') - key = 0; - np = INT2PTR(Agnode_t *, args[0].integer); - hp = INT2PTR(Agnode_t *, args[1].integer); - if (!np) { - error(ERROR_WARNING, "NULL tail node passed to edge()"); - v.integer = 0; - } else if (!hp) { - error(ERROR_WARNING, "NULL head node passed to edge()"); - v.integer = 0; - } else { - ep = openEdge(0, np, hp, key); - v.integer = PTR2INT(ep); - } - break; - case F_edgesg: - key = args[3].string; - if (*key == '\0') - key = 0; - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - hp = INT2PTR(Agnode_t *, args[2].integer); - if (!np) { - error(ERROR_WARNING, "NULL tail node passed to edge_sg()"); - v.integer = 0; - } else if (!hp) { - error(ERROR_WARNING, "NULL head node passed to edge_sg()"); - v.integer = 0; - } else { - ep = openEdge(gp, np, hp, key); - v.integer = PTR2INT(ep); - } - break; - case F_addedge: - gp = INT2PTR(Agraph_t *, args[0].integer); - ep = INT2PTR(Agedge_t *, args[1].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to addEdge()"); - v.integer = 0; - } else if (!ep) { - error(ERROR_WARNING, "NULL edge passed to addEdge()"); - v.integer = 0; - } else - v.integer = PTR2INT(addEdge(gp, ep, 1)); - break; - case F_opp: - ep = INT2PTR(Agedge_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!ep) { - error(ERROR_WARNING, "NULL edge passed to opp()"); - v.integer = 0; - } else if (!np) { - error(ERROR_WARNING, "NULL node passed to opp()"); - v.integer = 0; - } else { - if (aghead(ep) == np) - np = agtail(ep); - else - np = aghead(ep); - v.integer = PTR2INT(np); - } - break; - case F_isedge: - key = args[2].string; - if (*key == '\0') - key = 0; - np = INT2PTR(Agnode_t *, args[0].integer); - hp = INT2PTR(Agnode_t *, args[1].integer); - if (!np) { - error(ERROR_WARNING, "NULL tail node passed to isEdge()"); - v.integer = 0; - } else if (!hp) { - error(ERROR_WARNING, "NULL head node passed to isEdge()"); - v.integer = 0; - } else - v.integer = PTR2INT(isEdge(agroot(np), np, hp, key)); - break; - case F_isedgesg: - key = args[3].string; - if (*key == '\0') - key = 0; - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - hp = INT2PTR(Agnode_t *, args[2].integer); - if (!gp) - gp = agroot(np); - if (!np) { - error(ERROR_WARNING, "NULL tail node passed to isEdge_sg()"); - v.integer = 0; - } else if (!hp) { - error(ERROR_WARNING, "NULL head node passed to isEdge_sg()"); - v.integer = 0; - } else - v.integer = PTR2INT(isEdge(gp, np, hp, key)); - break; - case F_issubedge: - gp = INT2PTR(Agraph_t *, args[0].integer); - ep = INT2PTR(Agedge_t *, args[1].integer); - if (!gp) - gp = agroot(ep); - if (ep) { - v.integer = PTR2INT(addEdge(gp, ep, 0)); - } else { - error(ERROR_WARNING, "NULL edge passed to isSubedge()"); - v.integer = 0; - } - break; - case F_fstout: - np = INT2PTR(Agnode_t *, args[0].integer); - if (np) { - ep = agfstout(agroot(np), np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstout()"); - v.integer = 0; - } - break; - case F_fstoutsg: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - ep = agfstout(gp, np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstout_sg()"); - v.integer = 0; - } - break; - case F_nxtout: - ep = INT2PTR(Agedge_t *, args[0].integer); - if (ep) { - ep = agnxtout(agroot(ep), ep); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL edge passed to nxtout()"); - v.integer = 0; - } - break; - case F_nxtoutsg: - gp = INT2PTR(Agraph_t *, args[0].integer); - ep = INT2PTR(Agedge_t *, args[1].integer); - if (!gp) - gp = agroot(ep); - if (ep) { - ep = agnxtout(gp, ep); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL edge passed to nxtout_sg()"); - v.integer = 0; - } - break; - case F_fstin: - np = INT2PTR(Agnode_t *, args[0].integer); - if (np) { - ep = agfstin(agroot(np), np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstin()"); - v.integer = 0; - } - break; - case F_fstinsg: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - ep = agfstin(gp, np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstin_sg()"); - v.integer = 0; - } - break; - case F_nxtin: - ep = INT2PTR(Agedge_t *, args[0].integer); - if (ep) { - ep = agnxtin(agroot(ep), ep); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL edge passed to nxtin()"); - v.integer = 0; - } - break; - case F_nxtinsg: - gp = INT2PTR(Agraph_t *, args[0].integer); - ep = INT2PTR(Agedge_t *, args[1].integer); - if (!gp) - gp = agroot(ep); - if (ep) { - ep = agnxtin(gp, ep); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL edge passed to nxtin_sg()"); - v.integer = 0; - } - break; - case F_fstedge: - np = INT2PTR(Agnode_t *, args[0].integer); - if (np) { - ep = agfstedge(agroot(np), np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstedge()"); - v.integer = 0; - } - break; - case F_fstedgesg: - gp = INT2PTR(Agraph_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!gp) - gp = agroot(np); - if (np) { - ep = agfstedge(gp, np); - v.integer = PTR2INT(ep); - } else { - error(ERROR_WARNING, "NULL node passed to fstedge_sg()"); - v.integer = 0; - } - break; - case F_nxtedge: - ep = INT2PTR(Agedge_t *, args[0].integer); - np = INT2PTR(Agnode_t *, args[1].integer); - if (!ep) { - error(ERROR_WARNING, "NULL edge passed to nxtedge()"); - v.integer = 0; - } else if (!np) { - error(ERROR_WARNING, "NULL node passed to nxtedge()"); - v.integer = 0; - } else { - ep = agnxtedge(agroot(np), ep, np); - v.integer = PTR2INT(ep); - } - break; - case F_nxtedgesg: - gp = INT2PTR(Agraph_t *, args[0].integer); - ep = INT2PTR(Agedge_t *, args[1].integer); - np = INT2PTR(Agnode_t *, args[2].integer); - if (!gp) - gp = agroot(np); - if (!ep) { - error(ERROR_WARNING, "NULL edge passed to nxtedge_sg()"); - v.integer = 0; - } else if (!np) { - error(ERROR_WARNING, "NULL node passed to nxtedge_sg()"); - v.integer = 0; - } else { - ep = agnxtedge(gp, ep, np); - v.integer = PTR2INT(ep); - } - break; - case F_copy: - gp = INT2PTR(Agraph_t *, args[0].integer); - objp = INT2PTR(Agobj_t *, args[1].integer); - if (!objp) { - error(ERROR_WARNING, "NULL object passed to clone()"); - v.integer = 0; - } else - v.integer = PTR2INT(copy(gp, objp)); - break; - case F_clone: - gp = INT2PTR(Agraph_t *, args[0].integer); - objp = INT2PTR(Agobj_t *, args[1].integer); - if (!objp) { - error(ERROR_WARNING, "NULL object passed to clone()"); - v.integer = 0; - } else - v.integer = PTR2INT(clone(gp, objp)); - break; - case F_cloneG: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - gp = cloneG(gp, args[1].string); - v.integer = PTR2INT(gp); - } else { - error(ERROR_WARNING, "NULL graph passed to cloneG()"); - v.integer = 0; - } - break; - case F_copya: - objp = INT2PTR(Agobj_t *, args[0].integer); - objp1 = INT2PTR(Agobj_t *, args[1].integer); - if (!(objp && objp1)) { - error(ERROR_WARNING, "NULL object passed to copyA()"); - v.integer = 0; - } else - v.integer = copyAttr(objp, objp1); - break; - case F_induce: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to induce()"); - v.integer = 1; - } else { - nodeInduce(gp); - v.integer = 0; - } - break; - case F_write: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to write()"); - v.integer = 1; - } else - v.integer = sfioWrite (gp, state->outFile, state->dfltIO); - break; - case F_writeg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to writeG()"); - v.integer = 1; - } else - v.integer = writeFile(gp, args[1].string, state->dfltIO); - break; - case F_readg: - gp = readFile(args[0].string); - v.integer = PTR2INT(gp); - break; - case F_fwriteg: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to fwriteG()"); - v.integer = 1; - } else - v.integer = fwriteFile(pgm, gp, args[1].integer, state->dfltIO); - break; - case F_freadg: - gp = freadFile(pgm, args[0].integer); - v.integer = PTR2INT(gp); - break; - case F_openf: - v.integer = openFile(pgm, args[0].string, args[1].string); - break; - case F_closef: - v.integer = closeFile(pgm, args[0].integer); - break; - case F_readl: - v.string = readLine(pgm, args[0].integer); - break; - case F_isdirect: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to isDirect()"); - v.integer = 0; - } else { - v.integer = agisdirected(gp); - } - break; - case F_isstrict: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to isStrict()"); - v.integer = 0; - } else { - v.integer = agisstrict(gp); - } - break; - case F_delete: - gp = INT2PTR(Agraph_t *, args[0].integer); - objp = INT2PTR(Agobj_t *, args[1].integer); - if (!objp) { - error(ERROR_WARNING, "NULL object passed to delete()"); - v.integer = 1; - } else if (objp == (Agobj_t *) (state->curgraph)) { - error(ERROR_WARNING, "cannot delete current graph $G"); - v.integer = 1; - } else if (objp == (Agobj_t *) (state->target)) { - error(ERROR_WARNING, "cannot delete target graph $T"); - v.integer = 1; - } else if (objp == state->curobj) { - if (!(v.integer = deleteObj(gp, objp))) - state->curobj = NULL; - } else - v.integer = deleteObj(gp, objp); - break; - case F_lock: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to lock()"); - v.integer = -1; - } else - v.integer = lockGraph(gp, args[1].integer); - break; - case F_nnodes: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to nNodes()"); - v.integer = 0; - } else { - v.integer = agnnodes(gp); - } - break; - case F_nedges: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (!gp) { - error(ERROR_WARNING, "NULL graph passed to nEdges()"); - v.integer = 0; - } else { - v.integer = agnedges(gp); - } - break; - case F_atoi: - v.integer = atoi(args[0].string); - break; - case F_atof: - v.floating = atof(args[0].string); - break; - case F_sqrt: - v.floating = sqrt(args[0].floating); - break; - case F_cos: - v.floating = cos(args[0].floating); - break; - case F_sin: - v.floating = sin(args[0].floating); - break; - case F_atan2: - v.floating = atan2(args[0].floating, args[1].floating); - break; - case F_exp: - v.floating = exp(args[0].floating); - break; - case F_pow: - v.floating = pow(args[0].floating, args[1].floating); - break; - case F_log: - v.floating = log(args[0].floating); - break; - case F_min: - v.floating = MIN(args[0].floating, args[1].floating); - break; - case F_max: - v.floating = MAX(args[0].floating, args[1].floating); - break; - case F_sys: - v.integer = system(args[0].string); - break; - case F_hasattr: - case F_get: - objp = INT2PTR(Agobj_t *, args[0].integer); - name = args[1].string; - if (!objp) { - exerror("NULL object passed to aget()/hasAttr()"); - v.integer = 0; - } else if (!name) { - exerror("NULL name passed to aget()/hasAttr()"); - v.integer = 0; - } - else { - Agsym_t *gsym = agattrsym(objp, name); - if (sym->index == F_hasattr) - v.integer = (gsym != NULL); - else { - if (!gsym) { - gsym = agattr(agroot(agraphof(objp)), AGTYPE(objp), name, ""); - error(ERROR_WARNING, "Using value of %s uninitialized attribute \"%s\" of \"%s\" in aget()", kindOf (objp), name, nameOf(pgm, objp, state->tmp)); - } - v.string = agxget(objp, gsym); - } - } - break; - case F_set: - objp = INT2PTR(Agobj_t *, args[0].integer); - if (!objp) { - error(ERROR_WARNING, "NULL object passed to aset()"); - v.integer = 1; - } else { - char* name = args[1].string; - char* value = args[2].string; - if (!name) { - error(ERROR_WARNING, "NULL name passed to aset()"); - v.integer = 1; - } - else if (!value) { - error(ERROR_WARNING, "NULL value passed to aset()"); - v.integer = 1; - } - else { - v.integer = setattr(objp, name, value); - } - } - break; - case F_dset: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - char* kind = args[1].string; - char* name = args[2].string; - char* value = args[3].string; - if (!name) { - error(ERROR_WARNING, "NULL name passed to setDflt()"); - v.integer = 1; - } - else if (!value) { - error(ERROR_WARNING, "NULL value passed to setDflt()"); - v.integer = 1; - } - else if (!kind) { - error(ERROR_WARNING, "NULL kind passed to setDflt()"); - v.integer = 1; - } - else { - v.integer = setDfltAttr(gp, kind, name, value); - } - } else { - error(ERROR_WARNING, "NULL graph passed to node()"); - v.integer = 0; - } - break; - case F_fstattr: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - char* kind = args[1].string; - if (!kind) { - error(ERROR_ERROR,"NULL kind passed to fstAttr()"); - v.string = 0; - } - else { - v.string = nxtAttr (gp, kind, NULL); - } - } else { - exerror("NULL graph passed to fstAttr()"); - v.string = 0; - } - break; - case F_nxtattr: - case F_isattr: - case F_dget: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - char* kind = args[1].string; - char* name = args[2].string; - if (!name) { - exerror("NULL name passed to %s", sym->name); - v.string = 0; - } - else if (!kind) { - exerror("NULL kind passed to %s", sym->name); - v.string = 0; - } - else if (sym->index == F_isattr) { - v.integer = (agattr(gp, toKind (kind, sym->name), name, 0) != NULL); - } - else if (sym->index == F_nxtattr) { - v.string = nxtAttr (gp, kind, name); - } - else { - v.string = getDfltAttr(gp, kind, name); - } - } else { - exerror("NULL graph passed to %s", sym->name); - v.string = 0; - } - break; - case F_canon: - v.string = canon(pgm, args[0].string); - break; - case F_ishtml: - v.integer = aghtmlstr(args[0].string); - break; - case F_html: - gp = INT2PTR(Agraph_t *, args[0].integer); - if (gp) { - v.string = toHtml(gp, args[1].string); - } else { - error(ERROR_WARNING, "NULL graph passed to html()"); - v.string = 0; - } - break; - case F_tolower: - v.string = toLower(pgm, args[0].string, state->tmp); - break; - case F_colorx: - v.string = colorx(pgm, args[0].string, args[1].string, state->tmp); - break; - case F_strcmp: - if (args[0].string) { - if (args[1].string) - v.integer = strcmp(args[0].string,args[1].string); - else - v.integer = -1; - } else if (args[1].string) - v.integer = 1; - else - v.integer = 0; - break; - case F_toupper: - v.string = toUpper(pgm, args[0].string, state->tmp); - break; - case F_xof: - v.string = xyOf(pgm, args[0].string, 1); - break; - case F_yof: - v.string = xyOf(pgm, args[0].string, 0); - break; - case F_llof: - v.string = bbOf(pgm, args[0].string, 1); - break; - case F_urof: - v.string = bbOf(pgm, args[0].string, 0); - break; - case F_length: - v.integer = strlen(args[0].string); - break; - case F_index: - v.integer = indexOf(args[0].string, args[1].string); - break; - case F_rindex: - v.integer = rindexOf(args[0].string, args[1].string); - break; - case F_match: - v.integer = match(args[0].string, args[1].string); - break; - case F_call: - if ((bp = findBinding (state, args[0].string))) - v.integer = (bp->fn)(args[1].string); - else - v.integer = -1; - break; - default: - exerror("unknown function call: %s", sym->name); - } - return v; - } else if (elt == EX_ARRAY) { - args = (Extype_t *) env; - state = (Gpr_t *) (disc->user); - switch (sym->index) { - case A_ARGV: - v.string = getArg(args[0].integer, state); - break; - default: - exerror("unknown array name: %s", sym->name); - v.string = 0; - } - return v; - } - - state = (Gpr_t *) env; - if (ref) { - objp = deref(pgm, node, ref, 0, state); - if (!objp) - exerror("null reference in expression %s", - deparse(pgm, node, state->tmp)); - } else if ((sym->lex == ID) && (sym->index <= LAST_V)) { - switch (sym->index) { - case V_this: - v.integer = PTR2INT(state->curobj); - break; - case V_thisg: - v.integer = PTR2INT(state->curgraph); - break; - case V_nextg: - v.integer = PTR2INT(state->nextgraph); - break; - case V_targt: - v.integer = PTR2INT(state->target); - break; - case V_outgraph: - v.integer = PTR2INT(state->outgraph); - break; - case V_tgtname: - v.string = state->tgtname; - break; - case V_infname: - v.string = state->infname; - break; - case V_ARGC: - v.integer = state->argc; - break; - case V_travtype: - v.integer = state->tvt; - break; - case V_travroot: - v.integer = PTR2INT(state->tvroot); - break; - case V_travnext: - v.integer = PTR2INT(state->tvnext); - break; - case V_travedge: - v.integer = PTR2INT(state->tvedge); - break; - } - return v; - } else { - objp = state->curobj; - if (!objp) { - exerror("current object $ not defined as reference for %s", - deparse(pgm, node, state->tmp)); - } - } - - if (objp) { - if (lookup(pgm, objp, sym, &v, state)) { - exerror("in expression %s", deparse(pgm, node, state->tmp)); - v.integer = 0; - } - } - else - v.integer = 0; - - return v; -} - -#define MINTYPE (LAST_M+1) /* First type occurs after last M_ */ - -static char *typeName(Expr_t * pg, int op) -{ - return typenames[op - MINTYPE]; -} - -/* setval: - * Set sym to value v. - * Return -1 if not allowed. - * Assume already type correct. - */ -static int -setval(Expr_t * pgm, Exnode_t * x, Exid_t * sym, Exref_t * ref, - void *env, int elt, Extype_t v, Exdisc_t * disc) -{ - Gpr_t *state; - Agobj_t *objp; - Agnode_t *np; - int iv; - int rv = 0; - - state = (Gpr_t *) env; - if (ref) { - objp = deref(pgm, x, ref, 0, state); - if (!objp) { - exerror("in expression %s.%s", - ref->symbol->name, deparse(pgm, x, state->tmp)); - return -1; - } - } else if ((MINNAME <= sym->index) && (sym->index <= MAXNAME)) { - switch (sym->index) { - case V_outgraph: - state->outgraph = INT2PTR(Agraph_t *, v.integer); - break; - case V_travtype: - iv = v.integer; - if (validTVT(v.integer)) - state->tvt = (trav_type) iv; - else - error(1, "unexpected value %d assigned to %s : ignored", - iv, typeName(pgm, T_tvtyp)); - break; - case V_travroot: - np = INT2PTR(Agnode_t *, v.integer); - if (!np || (agroot(np) == state->curgraph)) - state->tvroot = np; - else { - error(1, "cannot set $tvroot, node %s not in $G : ignored", - agnameof(np)); - } - break; - case V_travnext: - np = INT2PTR(Agnode_t *, v.integer); - if (!np || (agroot(np) == state->curgraph)) { - state->tvnext = np; - state->flags |= GV_NEXT_SET; - } else { - error(1, "cannot set $tvnext, node %s not in $G : ignored", - agnameof(np)); - } - break; - case V_tgtname: - if (!streq(state->tgtname, v.string)) { - vmfree(pgm->vm, state->tgtname); - state->tgtname = vmstrdup(pgm->vm, v.string); - state->name_used = 0; - } - break; - default: - rv = -1; - break; - } - return rv; - } else { - objp = state->curobj; - if (!objp) { - exerror("current object $ undefined in expression %s", - deparse(pgm, x, state->tmp)); - return -1; - } - } - - assignable (objp, (unsigned char*)(sym->name)); - return setattr(objp, sym->name, v.string); -} - -static int codePhase; - -#define haveGraph ((1 <= codePhase) && (codePhase <= 4)) -#define haveTarget ((2 <= codePhase) && (codePhase <= 4)) -#define inWalk ((2 <= codePhase) && (codePhase <= 3)) - -/* typeChk: - * Type check input type against implied type of symbol sym. - * If okay, return result type; else return 0. - * For functions, input type set must intersect with function domain. - * This means type errors may occur, but these will be caught at runtime. - * For non-functions, input type must be 0. - */ -static tctype typeChk(tctype intype, Exid_t * sym) -{ - tctype dom = 0, rng = 0; - - switch (sym->lex) { - case DYNAMIC: - dom = 0; - switch (sym->type) { - case T_obj: - rng = YALL;; - break; - case T_node: - rng = Y(V); - break; - case T_graph: - rng = Y(G); - break; - case T_edge: - rng = Y(E); - break; - case INTEGER: - rng = Y(I); - break; - case FLOATING: - rng = Y(F); - break; - case STRING: - rng = Y(S); - break; - default: - exerror("unknown dynamic type %d of symbol %s", sym->type, - sym->name); - break; - } - break; - case ID: - if (sym->index <= MAXNAME) { - switch (sym->index) { - case V_travroot: - case V_this: - case V_thisg: - case V_nextg: - if (!haveGraph) - exerror - ("keyword %s cannot be used in BEGIN/END statements", - sym->name); - break; - case V_targt: - if (!haveTarget) - exerror - ("keyword %s cannot be used in BEGIN/BEG_G/END statements", - sym->name); - break; - } - dom = tchk[sym->index][0]; - rng = tchk[sym->index][1]; - } else { - dom = YALL; - rng = Y(S); - } - break; - case NAME: - if (!intype && !haveGraph) - exerror - ("undeclared, unmodified names like \"%s\" cannot be\nused in BEGIN and END statements", - sym->name); - dom = YALL; - rng = Y(S); - break; - default: - exerror("unexpected symbol in typeChk: name %s, lex %d", - sym->name, sym->lex); - break; - } - - if (dom) { - if (!intype) - intype = YALL; /* type of $ */ - if (!(dom & intype)) - rng = 0; - } else if (intype) - rng = 0; - return rng; -} - -/* typeChkExp: - * Type check variable expression. - */ -static tctype typeChkExp(Exref_t * ref, Exid_t * sym) -{ - tctype ty; - - if (ref) { - ty = typeChk(0, ref->symbol); - for (ref = ref->next; ty && ref; ref = ref->next) - ty = typeChk(ty, ref->symbol); - if (!ty) - return 0; - } else - ty = 0; - return typeChk(ty, sym); -} - -/* refval: - * Called during compilation for uses of references: abc.x - * Also for abc.f(..), type abc.v, "abc".x and CONSTANTS. - * The grammar has been altered to disallow the first 3. - * Type check expressions; return value unused. - */ -static Extype_t -refval(Expr_t * pgm, Exnode_t * node, Exid_t * sym, Exref_t * ref, - char *str, int elt, Exdisc_t * disc) -{ - Extype_t v; - if (sym->lex == CONSTANT) { - switch (sym->index) { - case C_flat: - v.integer = TV_flat; - break; - case C_ne: - v.integer = TV_ne; - break; - case C_en: - v.integer = TV_en; - break; - case C_bfs: - v.integer = TV_bfs; - break; - case C_dfs: - v.integer = TV_dfs; - break; - case C_fwd: - v.integer = TV_fwd; - break; - case C_rev: - v.integer = TV_rev; - break; - case C_postdfs: - v.integer = TV_postdfs; - break; - case C_postfwd: - v.integer = TV_postfwd; - break; - case C_postrev: - v.integer = TV_postrev; - break; - case C_prepostdfs: - v.integer = TV_prepostdfs; - break; - case C_prepostfwd: - v.integer = TV_prepostfwd; - break; - case C_prepostrev: - v.integer = TV_prepostrev; - break; - case C_null: - v.integer = 0; - break; - default: - v = exzero(node->type); - break; - } - } else { - if (!typeChkExp(ref, sym)) { - Gpr_t *state = (Gpr_t *) (disc->user); - exerror("type error using %s", - deparse(pgm, node, state->tmp)); - } - v = exzero(node->type); - } - return v; -} - -/* binary: - * Evaluate (l ex->op r) producing a value of type ex->type, - * stored in l. - * May be unary, with r = NULL - * Return -1 if operation cannot be done, 0 otherwise. - * If arg is > 0, operation unnecessary; just report possibility. - */ -int -binary(Expr_t * pg, Exnode_t * l, Exnode_t * ex, Exnode_t * r, int arg, - Exdisc_t * disc) -{ - Agobj_t *lobjp; - Agobj_t *robjp; - int ret = -1; - - if (BUILTIN(l->type)) - return -1; - if (r && BUILTIN(r->type)) - return -1; - if (!INTEGRAL(ex->type)) - return -1; - - if (l->type == T_tvtyp) { - int li, ri; - - if (!r) - return -1; /* Assume libexpr handled unary */ - if (r->type != T_tvtyp) - return -1; - - li = l->data.constant.value.integer; - ri = r->data.constant.value.integer; - switch (ex->op) { - case EQ: - if (arg) - return 0; - l->data.constant.value.integer = (li == ri); - ret = 0; - break; - case NE: - if (arg) - return 0; - l->data.constant.value.integer = (li != ri); - ret = 0; - break; - case '<': - if (arg) - return 0; - l->data.constant.value.integer = (li < ri); - ret = 0; - break; - case LE: - if (arg) - return 0; - l->data.constant.value.integer = (li <= ri); - ret = 0; - break; - case GE: - if (arg) - return 0; - l->data.constant.value.integer = (li >= ri); - ret = 0; - break; - case '>': - if (arg) - return 0; - l->data.constant.value.integer = (li > ri); - ret = 0; - break; - } - } - - /* l is a graph object; make sure r is also */ - if (r && (r->type == T_tvtyp)) - return -1; - - lobjp = INT2PTR(Agobj_t *, l->data.constant.value.integer); - if (r) - robjp = INT2PTR(Agobj_t *, r->data.constant.value.integer); - else - robjp = 0; - switch (ex->op) { - case EQ: - if (arg) - return 0; - l->data.constant.value.integer = !compare(lobjp, robjp); - ret = 0; - break; - case NE: - if (arg) - return 0; - l->data.constant.value.integer = compare(lobjp, robjp); - ret = 0; - break; - case '<': - if (arg) - return 0; - l->data.constant.value.integer = (compare(lobjp, robjp) < 0); - ret = 0; - break; - case LE: - if (arg) - return 0; - l->data.constant.value.integer = (compare(lobjp, robjp) <= 0); - ret = 0; - break; - case GE: - if (arg) - return 0; - l->data.constant.value.integer = (compare(lobjp, robjp) >= 0); - ret = 0; - break; - case '>': - if (arg) - return 0; - l->data.constant.value.integer = (compare(lobjp, robjp) > 0); - ret = 0; - break; - } - - return ret; -} - -/* strToTvtype: - */ -static int -strToTvtype (char* s) -{ - int rt = 0; - char* sfx; - - if (!strncmp(s, "TV_", 3)) { - sfx = s + 3; - if (!strcmp(sfx, "flat")) { - rt = TV_flat; - } else if (!strcmp(sfx, "ne")) { - rt = TV_ne; - } else if (!strcmp(sfx, "en")) { - rt = TV_en; - } else if (!strcmp(sfx, "bfs")) { - rt = TV_bfs; - } else if (!strcmp(sfx, "dfs")) { - rt = TV_dfs; - } else if (!strcmp(sfx, "fwd")) { - rt = TV_fwd; - } else if (!strcmp(sfx, "rev")) { - rt = TV_rev; - } else if (!strcmp(sfx, "postdfs")) { - rt = TV_postdfs; - } else if (!strcmp(sfx, "postfwd")) { - rt = TV_postfwd; - } else if (!strcmp(sfx, "postrev")) { - rt = TV_postrev; - } else if (!strcmp(sfx, "prepostdfs")) { - rt = TV_prepostdfs; - } else if (!strcmp(sfx, "prepostfwd")) { - rt = TV_prepostfwd; - } else if (!strcmp(sfx, "prepostrev")) { - rt = TV_prepostrev; - } else - exerror("illegal string \"%s\" for type tvtype_t", s); - } else - exerror("illegal string \"%s\" for type tvtype_t", s); - return rt; -} - -/* tvtypeToStr: - */ -static char* -tvtypeToStr (int v) -{ - char* s = 0; - - switch (v) { - case TV_flat: - s = "TV_flat"; - break; - case TV_ne: - s = "TV_ne"; - break; - case TV_en: - s = "TV_en"; - break; - case TV_bfs: - s = "TV_bfs"; - break; - case TV_dfs: - s = "TV_dfs"; - break; - case TV_fwd: - s = "TV_fwd"; - break; - case TV_rev: - s = "TV_rev"; - break; - case TV_postdfs: - s = "TV_postdfs"; - break; - case TV_postfwd: - s = "TV_postfwd"; - break; - case TV_postrev: - s = "TV_postrev"; - break; - case TV_prepostdfs: - s = "TV_prepostdfs"; - break; - case TV_prepostfwd: - s = "TV_prepostfwd"; - break; - case TV_prepostrev: - s = "TV_prepostrev"; - break; - default: - exerror("Unexpected value %d for type tvtype_t", - v); - break; - } - return s; -} - -/* stringOf: - * Convert value x to type string. - * Assume x does not have a built-in type - * Return -1 if conversion cannot be done, 0 otherwise. - * If arg is > 0, conversion unnecessary; just report possibility. - */ -static int stringOf(Expr_t * prog, register Exnode_t * x, int arg, Exdisc_t* disc) -{ - Agobj_t *objp; - int rv = 0; - - if (arg) - return 0; - - if (x->type == T_tvtyp) { - if (!(x->data.constant.value.string = - tvtypeToStr (x->data.constant.value.integer))) - rv = -1; - } else { - objp = INT2PTR(Agobj_t *, x->data.constant.value.integer); - if (!objp) { - exerror("cannot generate name for NULL %s", - typeName(prog, x->type)); - rv = -1; - } - else { - Gpr_t* state = (Gpr_t *) (disc->user); - x->data.constant.value.string = nameOf(prog, objp, state->tmp); - } - } - x->type = STRING; - return rv; -} - -/* convert: - * Convert value x of type x->type to type type. - * Return -1 if conversion cannot be done, 0 otherwise. - * If arg is > 0, conversion unnecessary; just report possibility. - * In particular, assume x != 0 if arg == 0. - * Use #ifdef OLD to remove graph object conversion to strings, - * as this seemed to dangerous. - */ -static int -convert(Expr_t * prog, register Exnode_t * x, int type, - register Exid_t * xref, int arg, Exdisc_t * disc) -{ - Agobj_t *objp; - int ret = -1; - - /* If both types are built-in, let libexpr handle */ - if (BUILTIN(type) && BUILTIN(x->type)) - return -1; - if ((type == T_obj) && (x->type <= T_obj)) - ret = 0; /* trivial cast from specific graph object to T_obj */ - else if ((type <= T_obj) && (x->type == INTEGER)) { - if (x->data.constant.value.integer == 0) - ret = 0; /* allow NULL pointer */ - } else if (type == INTEGER) { - ret = 0; - } else if (x->type == T_obj) { - /* check dynamic type */ - if (arg) { - if ((type != FLOATING) && (type <= T_obj)) - ret = 0; - } else { - objp = INT2PTR(Agobj_t *, x->data.constant.value.integer); - switch (type) { - case T_graph: - if (!objp || AGTYPE(objp) == AGRAPH) - ret = 0; - break; - case T_node: - if (!objp || AGTYPE(objp) == AGNODE) - ret = 0; - break; - case T_edge: - if (!objp || ISEDGE(objp)) - ret = 0; - break; -#ifdef OLD - case STRING: - x->data.constant.value.string = nameOf(prog, objp); - ret = 0; - break; -#endif - } - } - } else if (type == STRING) { - if (x->type == T_tvtyp) { - ret = 0; - if (!arg) { - x->data.constant.value.string = - tvtypeToStr (x->data.constant.value.integer); - } - } -#ifdef OLD - else { - objp = INT2PTR(Agobj_t *, x->data.constant.value.integer); - if (objp) { - x->data.constant.value.string = nameOf(prog, objp); - ret = 0; - } else - cvtError(xref, "Uninitialized object"); - } -#endif - } else if ((type == T_tvtyp) && (x->type == INTEGER)) { - if (arg) - ret = 0; - else if (validTVT(x->data.constant.value.integer)) - ret = 0; - else - exerror("Integer value %d not legal for type tvtype_t", - x->data.constant.value.integer); - } - /* in case libexpr hands us the trivial case */ - else if (x->type == type) { - ret = 0; - } else if (x->type == STRING) { - char *s; - if (type == T_tvtyp) { - if (arg) - ret = 0; - else { - ret = 0; - s = x->data.constant.value.string; - x->data.constant.value.integer = strToTvtype(s); - } - } - } - if (!arg && (ret == 0)) - x->type = type; - return ret; -} - -/* keyval; - * Calculate unique key for object. - * We use this to unify local copies of nodes and edges. - */ -static Extype_t keyval(Expr_t * pgm, Extype_t v, int type, Exdisc_t * disc) -{ - if (type <= T_obj) { - v.integer = AGID(INT2PTR(Agobj_t *, v.integer)); - } - return v; -} - -/* matchval: - * Pattern match strings. - */ -static int -matchval(Expr_t * pgm, Exnode_t * xstr, const char *str, Exnode_t * xpat, - const char *pat, void *env, Exdisc_t * disc) -{ - return strgrpmatch(str, pat, NiL, 0, - STR_MAXIMAL | STR_LEFT | STR_RIGHT); -} - -/* a2t: - * Convert type indices to symbolic name. - */ -static int - a2t[] = { 0, FLOATING, INTEGER, STRING, - T_node, T_edge, T_graph, T_obj -}; - -/* initDisc: - * Create and initialize expr discipline. - */ -static Exdisc_t *initDisc(Gpr_t * state) -{ - Exdisc_t *dp; - - dp = newof(0, Exdisc_t, 1, 0); - if (!dp) { - error(ERROR_ERROR, - "could not create libexp discipline: out of memory"); - return 0; - } - - dp->version = EX_VERSION; - dp->flags = EX_CHARSTRING | EX_UNDECLARED; - dp->symbols = symbols; - dp->convertf = convert; - dp->stringof = stringOf; - dp->binaryf = binary; - dp->typename = typeName; - if (state->errf) - dp->errorf = state->errf; - else - dp->errorf = (Exerror_f) errorf; - dp->keyf = keyval; - dp->getf = getval; - dp->reff = refval; - dp->setf = setval; - dp->matchf = matchval; - dp->exitf = state->exitf; - dp->types = a2t; - dp->user = state; - - state->dp = dp; /* dp is freed when state is freed */ - - return dp; -} - -/* compile: - * Compile given string, then extract and return - * typed expression. - */ -static Exnode_t *compile(Expr_t * prog, char *src, char *input, int line, - char *lbl, char *sfx, int kind) -{ - Exnode_t *e = 0; - Sfio_t *sf; - Sfio_t *prefix; - int rv; - - /* create input stream */ - if (sfx) { - sf = sfopen(0, sfx, "rs"); - if (input) { - prefix = sfopen(0, input, "rs"); - sfstack(sf, prefix); - } - } else - sf = sfopen(0, input, "rs"); - - /* prefixing label if necessary */ - if (lbl) { - prefix = sfopen(0, 0, "sr+"); - sfprintf(prefix, "%s:\n", lbl); - sfseek(prefix, 0, 0); - sfstack(sf, prefix); - line--; - } - - if (!src) - src = ""; - rv = excomp(prog, src, line, 0, sf); - sfclose(sf); - - if (rv >= 0 && (getErrorErrors() == 0)) - e = exexpr(prog, lbl, NiL, kind); - - return e; -} - -/* checkGuard: - * Check if guard is an assignment and warn. - */ -static void checkGuard(Exnode_t * gp, char *src, int line) -{ - gp = exnoncast(gp); - if (gp && exisAssign(gp)) { - if (src) { - setErrorFileLine (src, line); - } - error(ERROR_WARNING, "assignment used as bool in guard"); - } -} - -/* mkStmts: - */ -static case_stmt *mkStmts(Expr_t * prog, char *src, case_info * sp, - int cnt, char *lbl, Sfio_t *tmps) -{ - case_stmt *cs; - int i; - - cs = newof(0, case_stmt, cnt, 0); - - for (i = 0; i < cnt; i++) { - if (sp->guard) { - sfprintf(tmps, "%s_g%d", lbl, i); - cs[i].guard = compile(prog, src, sp->guard, sp->gstart, - sfstruse(tmps), 0, INTEGER); - if (getErrorErrors()) break; - checkGuard(cs[i].guard, src, sp->gstart); - } - if (sp->action) { - sfprintf(tmps, "%s_a%d", lbl, i); - cs[i].action = compile(prog, src, sp->action, sp->astart, - sfstruse(tmps), 0, INTEGER); - if (getErrorErrors()) break; - /* If no error but no compiled action, the input action must - * have been essentially an empty block, which should be - * considered different from a missing block. So, compile a - * trivial block. - */ - if (!cs[i].action) { - sfprintf(tmps, "%s__a%d", lbl, i); - cs[i].action = compile(prog, src, "1", sp->astart, - sfstruse(tmps), 0, INTEGER); - } - } - sp = sp->next; - } - - return cs; -} - -/* mkBlocks: - */ -static int mkBlock(comp_block* bp, Expr_t * prog, char *src, parse_block *inp, Sfio_t* tmps, int i) -{ - int rv = 0; - char label[BUFSIZ]; - - codePhase = 1; - if (inp->begg_stmt) { - sfprintf(tmps, "_begin_g_%d", i); - symbols[0].type = T_graph; - tchk[V_this][1] = Y(G); - bp->begg_stmt = compile(prog, src, inp->begg_stmt, - inp->l_beging, sfstruse(tmps), 0, VOIDTYPE); - if (getErrorErrors()) - goto finishBlk; - rv |= BEGG; - } - - codePhase = 2; - if (inp->node_stmts) { - symbols[0].type = T_node; - tchk[V_this][1] = Y(V); - bp->n_nstmts = inp->n_nstmts; - sprintf (label, "_nd%d", i); - bp->node_stmts = mkStmts(prog, src, inp->node_stmts, - inp->n_nstmts, label, tmps); - if (getErrorErrors()) - goto finishBlk; - bp->walks |= WALKSG; - } - - codePhase = 3; - if (inp->edge_stmts) { - symbols[0].type = T_edge; - tchk[V_this][1] = Y(E); - bp->n_estmts = inp->n_estmts; - sprintf (label, "_eg%d", i); - bp->edge_stmts = mkStmts(prog, src, inp->edge_stmts, - inp->n_estmts, label, tmps); - if (getErrorErrors()) - goto finishBlk; - bp->walks |= WALKSG; - } - - finishBlk: - if (getErrorErrors()) { - free (bp->node_stmts); - free (bp->edge_stmts); - bp->node_stmts = 0; - bp->edge_stmts = 0; - } - - return (rv | bp->walks); -} - -/* doFlags: - * Convert command line flags to actions in END_G. - */ -static char *doFlags(int flags, Sfio_t * s) -{ - sfprintf(s, "\n"); - if (flags & SRCOUT) - sfprintf(s, "$O = $G;\n"); - if (flags & INDUCE) - sfprintf(s, "induce($O);\n"); - return sfstruse(s); -} - -/* compileProg: - * Convert gpr sections in libexpr program. - */ -comp_prog *compileProg(parse_prog * inp, Gpr_t * state, int flags) -{ - comp_prog *p; - Sfio_t *tmps = state->tmp; - char *endg_sfx = 0; - int i, useflags = 0; - - /* Initialize default io */ - state->dfltIO = &gprIoDisc; - - /* Make sure we have enough bits for types */ - assert(BITS_PER_BYTE * sizeof(tctype) >= (1 << TBITS)); - - p = newof(0, comp_prog, 1, 0); - if (!p) { - error(ERROR_ERROR, - "could not create compiled program: out of memory"); - goto finish; - } - - if (flags) { - endg_sfx = strdup (doFlags(flags, tmps)); - if (*endg_sfx == '\0') - endg_sfx = 0; - } - - if (!(initDisc(state))) - goto finish; - - exinit(); - if (!(p->prog = exopen(state->dp))) - goto finish; - - codePhase = 0; - if (inp->begin_stmt) { - p->begin_stmt = compile(p->prog, inp->source, inp->begin_stmt, - inp->l_begin, 0, 0, VOIDTYPE); - if (getErrorErrors()) - goto finish; - } - - if (inp->blocks) { - comp_block* bp; - parse_block* ibp = inp->blocks; - - p->blocks = bp = newof(0, comp_block, inp->n_blocks, 0); - - for (i = 0; i < inp->n_blocks; bp++, i++) { - useflags |= mkBlock (bp, p->prog, inp->source, ibp, tmps, i); - if (getErrorErrors()) - goto finish; - else { - ibp = ibp->next; - p->n_blocks++; - } - } - } - p->flags = useflags; - - codePhase = 4; - if (inp->endg_stmt || endg_sfx) { - symbols[0].type = T_graph; - tchk[V_this][1] = Y(G); - p->endg_stmt = compile(p->prog, inp->source, inp->endg_stmt, - inp->l_endg, "_end_g", endg_sfx, VOIDTYPE); - if (getErrorErrors()) - goto finish; - } - - codePhase = 5; - if (inp->end_stmt) { - symbols[0].type = T_obj; - p->end_stmt = compile(p->prog, inp->source, inp->end_stmt, - inp->l_end, "_end_", 0, VOIDTYPE); - if (getErrorErrors()) - goto finish; - } - setErrorLine (0); /* execution errors have no line numbers */ - - if (p->end_stmt) - p->flags |= ENDG; - - finish: - if (getErrorErrors()) { - freeCompileProg (p); - p = 0; - } - free (endg_sfx); - - return p; -} - -void -freeCompileProg (comp_prog *p) -{ - comp_block* bp; - int i; - - if (!p) return; - - exclose (p->prog, 1); - for (i = 0; i < p->n_blocks; i++) { - bp = p->blocks + i; - free (bp->node_stmts); - free (bp->edge_stmts); - } - free (p->blocks); - free (p); -} - -/* walksGraph; - * Returns true if block actually has node or edge statements. - */ -int walksGraph(comp_block * p) -{ - return (p->walks); -} - -/* usesGraph; - * Returns true if program uses the graph, i.e., has - * N/E/BEG_G/END_G statments - */ -int usesGraph(comp_prog * p) -{ - return (p->flags); -} - -void ptchk(void) -{ - int i; - for (i = 0; i <= LAST_M; i++) - printf("%d: %d %d\n", i, tchk[i][0], tchk[i][1]); -} - -/* readG: - * Read graph from file and initialize - * dynamic data. - */ -Agraph_t *readG(Sfio_t * fp) -{ - Agraph_t *g; - -#ifdef WIN32 - gprDisc.mem = &AgMemDisc; - gprDisc.id = &AgIdDisc; -#endif - g = agread(fp, &gprDisc); - if (g) { - aginit(g, AGRAPH, UDATA, sizeof(gdata), 0); - aginit(g, AGNODE, UDATA, sizeof(ndata), 0); - aginit(g, AGEDGE, UDATA, sizeof(edata), 0); - } - return g; -} - -/* openG: - * Open graph and initialize dynamic data. - */ -Agraph_t *openG(char *name, Agdesc_t desc) -{ - Agraph_t *g; - -#ifdef WIN32 - gprDisc.mem = &AgMemDisc; - gprDisc.id = &AgIdDisc; -#endif - g = agopen(name, desc, &gprDisc); - if (g) - agbindrec(g, UDATA, sizeof(gdata), 0); - return g; -} - -/* openSubg: - * Open subgraph and initialize dynamic data. - */ -Agraph_t *openSubg(Agraph_t * g, char *name) -{ - Agraph_t *sg; - - sg = agsubg(g, name, 1); - if (sg && !aggetrec(sg, UDATA, 0)) - agbindrec(sg, UDATA, sizeof(gdata), 0); - return sg; -} - -/* openNode: - * Create node and initialize dynamic data. - */ -Agnode_t *openNode(Agraph_t * g, char *name) -{ - Agnode_t *np; - - np = agnode(g, name, 1); - if (np && !aggetrec(np, UDATA, 0)) - agbindrec(np, UDATA, sizeof(ndata), 0); - return np; -} - -/* openEdge: - * Create edge and initialize dynamic data. - */ -Agedge_t *openEdge(Agraph_t* g, Agnode_t * t, Agnode_t * h, char *key) -{ - Agedge_t *ep; - Agraph_t *root; - - root = sameG(t, h, "openEdge", "tail and head nodes"); - if (!root) - return 0; - if (g) { - if (!sameG(g, root, "openEdge", "subgraph and nodes")) - return 0; - } else - g = root; - - ep = agedge(g, t, h, key, 1); - if (ep && !aggetrec(ep, UDATA, 0)) - agbindrec(ep, UDATA, sizeof(edata), 0); - return ep; -} - diff --git a/internal/ccall/gvpr/compile.h b/internal/ccall/gvpr/compile.h deleted file mode 100644 index f3b0199..0000000 --- a/internal/ccall/gvpr/compile.h +++ /dev/null @@ -1,102 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef COMPILE_H -#define COMPILE_H - -#include -#include -#include -#include - - typedef struct { - Exnode_t *guard; - Exnode_t *action; - } case_stmt; - -#define UDATA "userval" - - typedef struct { - Agrec_t h; - /* Extype_t xu; */ - Extype_t iu; - Agedge_t* ine; - } nval_t; - - typedef struct { - Agrec_t h; - /* Extype_t xu; */ - /* Extype_t iu; */ - char lock; - } gval_t; - - typedef struct { - Agrec_t h; - /* Extype_t xu; */ - } uval_t; - -#define OBJ(p) ((Agobj_t*)p) - - typedef nval_t ndata; - typedef uval_t edata; - typedef gval_t gdata; - -#define nData(n) ((ndata*)(aggetrec(n,UDATA,0))) -#define gData(g) ((gdata*)(aggetrec(g,UDATA,0))) - -#define SRCOUT 0x1 -#define INDUCE 0x2 -#define CLONE 0x4 - -#define WALKSG 0x1 -#define BEGG 0x2 -#define ENDG 0x4 - - typedef struct { - Exnode_t *begg_stmt; - int walks; - int n_nstmts; - int n_estmts; - case_stmt *node_stmts; - case_stmt *edge_stmts; - } comp_block; - - typedef struct { - int flags; - Expr_t *prog; - Exnode_t *begin_stmt; - int n_blocks; - comp_block *blocks; - Exnode_t *endg_stmt; - Exnode_t *end_stmt; - } comp_prog; - - extern comp_prog *compileProg(parse_prog *, Gpr_t *, int); - extern void freeCompileProg (comp_prog *p); - extern int usesGraph(comp_prog *); - extern int walksGraph(comp_block *); - extern Agraph_t *readG(Sfio_t * fp); - extern Agraph_t *openG(char *name, Agdesc_t); - extern Agraph_t *openSubg(Agraph_t * g, char *name); - extern Agnode_t *openNode(Agraph_t * g, char *name); - extern Agedge_t *openEdge(Agraph_t* g, Agnode_t * t, Agnode_t * h, char *key); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/dummy.go b/internal/ccall/gvpr/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/gvpr/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/gvpr/gdefs.h b/internal/ccall/gvpr/gdefs.h deleted file mode 100644 index 88f724e..0000000 --- a/internal/ccall/gvpr/gdefs.h +++ /dev/null @@ -1,485 +0,0 @@ -#ifndef GDEFS_H -#define GDEFS_H - -/* generated by mkdefs; do not edit */ - -#define Y(i) (1<<(i)) - -#define V 0x4 /* NODE */ -#define E 0x5 /* EDGE */ -#define G 0x6 /* GRAPH */ -#define O 0x7 /* OBJECT */ -#define TV 0x8 /* TV_ */ -#define YALL (Y(V)|Y(E)|Y(G)) - -#define V_this 1 -#define V_thisg 2 -#define V_nextg 3 -#define V_targt 4 -#define V_outgraph 5 -#define V_tgtname 6 -#define V_infname 7 -#define V_travroot 8 -#define V_travnext 9 -#define V_travedge 10 -#define V_travtype 11 -#define V_ARGC 12 -#define M_degree 13 -#define M_X 14 -#define M_Y 15 -#define M_head 16 -#define M_tail 17 -#define M_name 18 -#define M_indegree 19 -#define M_outdegree 20 -#define M_root 21 -#define M_parent 22 -#define M_n_edges 23 -#define M_n_nodes 24 -#define M_directed 25 -#define M_strict 26 -#define T_node 27 -#define T_edge 28 -#define T_graph 29 -#define T_obj 30 -#define T_tvtyp 31 -#define A_ARGV 32 -#define F_graph 33 -#define F_subg 34 -#define F_issubg 35 -#define F_fstsubg 36 -#define F_nxtsubg 37 -#define F_node 38 -#define F_addnode 39 -#define F_fstnode 40 -#define F_nxtnode 41 -#define F_nxtnodesg 42 -#define F_isnode 43 -#define F_issubnode 44 -#define F_indegree 45 -#define F_outdegree 46 -#define F_degree 47 -#define F_isin 48 -#define F_edge 49 -#define F_edgesg 50 -#define F_addedge 51 -#define F_opp 52 -#define F_fstout 53 -#define F_nxtout 54 -#define F_fstin 55 -#define F_nxtin 56 -#define F_fstedge 57 -#define F_nxtedge 58 -#define F_fstoutsg 59 -#define F_nxtoutsg 60 -#define F_fstinsg 61 -#define F_nxtinsg 62 -#define F_fstedgesg 63 -#define F_nxtedgesg 64 -#define F_compof 65 -#define F_kindof 66 -#define F_index 67 -#define F_rindex 68 -#define F_isedge 69 -#define F_isedgesg 70 -#define F_issubedge 71 -#define F_length 72 -#define F_match 73 -#define F_write 74 -#define F_writeg 75 -#define F_readg 76 -#define F_fwriteg 77 -#define F_freadg 78 -#define F_openf 79 -#define F_closef 80 -#define F_readl 81 -#define F_induce 82 -#define F_isdirect 83 -#define F_isstrict 84 -#define F_delete 85 -#define F_clone 86 -#define F_cloneG 87 -#define F_copy 88 -#define F_copya 89 -#define F_lock 90 -#define F_nnodes 91 -#define F_nedges 92 -#define F_sqrt 93 -#define F_cos 94 -#define F_sin 95 -#define F_atan2 96 -#define F_exp 97 -#define F_pow 98 -#define F_log 99 -#define F_min 100 -#define F_max 101 -#define F_sys 102 -#define F_xof 103 -#define F_yof 104 -#define F_llof 105 -#define F_urof 106 -#define F_html 107 -#define F_ishtml 108 -#define F_canon 109 -#define F_get 110 -#define F_set 111 -#define F_dget 112 -#define F_dset 113 -#define F_hasattr 114 -#define F_isattr 115 -#define F_fstattr 116 -#define F_nxtattr 117 -#define F_tolower 118 -#define F_toupper 119 -#define F_strcmp 120 -#define F_atoi 121 -#define F_atof 122 -#define F_colorx 123 -#define F_call 124 -#define C_flat 125 -#define C_ne 126 -#define C_en 127 -#define C_bfs 128 -#define C_dfs 129 -#define C_fwd 130 -#define C_rev 131 -#define C_postdfs 132 -#define C_postfwd 133 -#define C_postrev 134 -#define C_prepostdfs 135 -#define C_prepostfwd 136 -#define C_prepostrev 137 -#define C_null 138 - -#define LAST_V 12 -#define LAST_M 26 -#define MINNAME 1 -#define MAXNAME 138 - -static Exid_t symbols[] = { - EX_ID ( "$", ID, V_this, T_obj, 0), - EX_ID ( "$G", ID, V_thisg, T_graph, 0), - EX_ID ( "$NG", ID, V_nextg, T_graph, 0), - EX_ID ( "$T", ID, V_targt, T_graph, 0), - EX_ID ( "$O", ID, V_outgraph, T_graph, 0), - EX_ID ( "$tgtname", ID, V_tgtname, STRING, 0), - EX_ID ( "$F", ID, V_infname, STRING, 0), - EX_ID ( "$tvroot", ID, V_travroot, T_node, 0), - EX_ID ( "$tvnext", ID, V_travnext, T_node, 0), - EX_ID ( "$tvedge", ID, V_travedge, T_edge, 0), - EX_ID ( "$tvtype", ID, V_travtype, T_tvtyp, 0), - EX_ID ( "ARGC", ID, V_ARGC, INTEGER, 0), - EX_ID ( "degree", ID, M_degree, INTEGER, 0), - EX_ID ( "X", ID, M_X, FLOATING, 0), - EX_ID ( "Y", ID, M_Y, FLOATING, 0), - EX_ID ( "head", ID, M_head, T_node, 0), - EX_ID ( "tail", ID, M_tail, T_node, 0), - EX_ID ( "name", ID, M_name, STRING, 0), - EX_ID ( "indegree", ID, M_indegree, INTEGER, 0), - EX_ID ( "outdegree", ID, M_outdegree, INTEGER, 0), - EX_ID ( "root", ID, M_root, T_graph, 0), - EX_ID ( "parent", ID, M_parent, T_graph, 0), - EX_ID ( "n_edges", ID, M_n_edges, INTEGER, 0), - EX_ID ( "n_nodes", ID, M_n_nodes, INTEGER, 0), - EX_ID ( "directed", ID, M_directed, INTEGER, 0), - EX_ID ( "strict", ID, M_strict, INTEGER, 0), - EX_ID ( "node_t", DECLARE, T_node, T_node, 0), - EX_ID ( "edge_t", DECLARE, T_edge, T_edge, 0), - EX_ID ( "graph_t", DECLARE, T_graph, T_graph, 0), - EX_ID ( "obj_t", DECLARE, T_obj, T_obj, 0), - EX_ID ( "tvtype_t", DECLARE, T_tvtyp, T_tvtyp, 0), - EX_ID ( "ARGV", ARRAY, A_ARGV, S|A(1,I), 0), - EX_ID ( "graph", FUNCTION, F_graph, G|A(1,S)|A(2,S), 0), - EX_ID ( "subg", FUNCTION, F_subg, G|A(1,G)|A(2,S), 0), - EX_ID ( "isSubg", FUNCTION, F_issubg, G|A(1,G)|A(2,S), 0), - EX_ID ( "fstsubg", FUNCTION, F_fstsubg, G|A(1,G), 0), - EX_ID ( "nxtsubg", FUNCTION, F_nxtsubg, G|A(1,G), 0), - EX_ID ( "node", FUNCTION, F_node, V|A(1,G)|A(2,S), 0), - EX_ID ( "subnode", FUNCTION, F_addnode, V|A(1,G)|A(2,V), 0), - EX_ID ( "fstnode", FUNCTION, F_fstnode, V|A(1,G), 0), - EX_ID ( "nxtnode", FUNCTION, F_nxtnode, V|A(1,V), 0), - EX_ID ( "nxtnode_sg", FUNCTION, F_nxtnodesg, V|A(1,G)|A(2,V), 0), - EX_ID ( "isNode", FUNCTION, F_isnode, V|A(1,G)|A(2,S), 0), - EX_ID ( "isSubnode", FUNCTION, F_issubnode, I|A(1,G)|A(2,V), 0), - EX_ID ( "indegreeOf", FUNCTION, F_indegree, I|A(1,G)|A(2,V), 0), - EX_ID ( "outdegreeOf", FUNCTION, F_outdegree, I|A(1,G)|A(2,V), 0), - EX_ID ( "degreeOf", FUNCTION, F_degree, I|A(1,G)|A(2,V), 0), - EX_ID ( "isIn", FUNCTION, F_isin, I|A(1,G)|A(2,O), 0), - EX_ID ( "edge", FUNCTION, F_edge, E|A(1,V)|A(2,V)|A(3,S), 0), - EX_ID ( "edge_sg", FUNCTION, F_edgesg, E|A(1,G)|A(2,V)|A(3,V)|A(4,S), 0), - EX_ID ( "subedge", FUNCTION, F_addedge, E|A(1,G)|A(2,E), 0), - EX_ID ( "opp", FUNCTION, F_opp, V|A(1,E)|A(2,V), 0), - EX_ID ( "fstout", FUNCTION, F_fstout, E|A(1,V), 0), - EX_ID ( "nxtout", FUNCTION, F_nxtout, E|A(1,E), 0), - EX_ID ( "fstin", FUNCTION, F_fstin, E|A(1,V), 0), - EX_ID ( "nxtin", FUNCTION, F_nxtin, E|A(1,E), 0), - EX_ID ( "fstedge", FUNCTION, F_fstedge, E|A(1,V), 0), - EX_ID ( "nxtedge", FUNCTION, F_nxtedge, E|A(1,E)|A(2,V), 0), - EX_ID ( "fstout_sg", FUNCTION, F_fstoutsg, E|A(1,G)|A(2,V), 0), - EX_ID ( "nxtout_sg", FUNCTION, F_nxtoutsg, E|A(1,G)|A(2,E), 0), - EX_ID ( "fstin_sg", FUNCTION, F_fstinsg, E|A(1,G)|A(2,V), 0), - EX_ID ( "nxtin_sg", FUNCTION, F_nxtinsg, E|A(1,G)|A(2,E), 0), - EX_ID ( "fstedge_sg", FUNCTION, F_fstedgesg, E|A(1,G)|A(2,V), 0), - EX_ID ( "nxtedge_sg", FUNCTION, F_nxtedgesg, E|A(1,G)|A(2,E)|A(3,V), 0), - EX_ID ( "compOf", FUNCTION, F_compof, G|A(1,G)|A(2,V), 0), - EX_ID ( "kindOf", FUNCTION, F_kindof, S|A(1,O), 0), - EX_ID ( "index", FUNCTION, F_index, I|A(1,S)|A(2,S), 0), - EX_ID ( "rindex", FUNCTION, F_rindex, I|A(1,S)|A(2,S), 0), - EX_ID ( "isEdge", FUNCTION, F_isedge, E|A(1,V)|A(2,V)|A(3,S), 0), - EX_ID ( "isEdge_sg", FUNCTION, F_isedgesg, E|A(1,G)|A(2,V)|A(3,V)|A(4,S), 0), - EX_ID ( "isSubedge", FUNCTION, F_issubedge, I|A(1,G)|A(2,E), 0), - EX_ID ( "length", FUNCTION, F_length, I|A(1,S), 0), - EX_ID ( "match", FUNCTION, F_match, I|A(1,S)|A(2,S), 0), - EX_ID ( "write", FUNCTION, F_write, I|A(1,G), 0), - EX_ID ( "writeG", FUNCTION, F_writeg, I|A(1,G)|A(2,S), 0), - EX_ID ( "readG", FUNCTION, F_readg, G|A(1,S), 0), - EX_ID ( "fwriteG", FUNCTION, F_fwriteg, I|A(1,G)|A(2,I), 0), - EX_ID ( "freadG", FUNCTION, F_freadg, G|A(1,I), 0), - EX_ID ( "openF", FUNCTION, F_openf, I|A(1,S)|A(2,S), 0), - EX_ID ( "closeF", FUNCTION, F_closef, I|A(1,I), 0), - EX_ID ( "readL", FUNCTION, F_readl, S|A(1,I), 0), - EX_ID ( "induce", FUNCTION, F_induce, I|A(1,G), 0), - EX_ID ( "isDirect", FUNCTION, F_isdirect, I|A(1,G), 0), - EX_ID ( "isStrict", FUNCTION, F_isstrict, I|A(1,G), 0), - EX_ID ( "delete", FUNCTION, F_delete, I|A(1,G)|A(2,O), 0), - EX_ID ( "clone", FUNCTION, F_clone, O|A(1,G)|A(2,O), 0), - EX_ID ( "cloneG", FUNCTION, F_cloneG, G|A(1,G)|A(2,S), 0), - EX_ID ( "copy", FUNCTION, F_copy, O|A(1,G)|A(2,O), 0), - EX_ID ( "copyA", FUNCTION, F_copya, I|A(1,O)|A(2,O), 0), - EX_ID ( "lock", FUNCTION, F_lock, I|A(1,G)|A(2,I), 0), - EX_ID ( "nNodes", FUNCTION, F_nnodes, I|A(1,G), 0), - EX_ID ( "nEdges", FUNCTION, F_nedges, I|A(1,G), 0), - EX_ID ( "sqrt", FUNCTION, F_sqrt, F|A(1,F), 0), - EX_ID ( "cos", FUNCTION, F_cos, F|A(1,F), 0), - EX_ID ( "sin", FUNCTION, F_sin, F|A(1,F), 0), - EX_ID ( "atan2", FUNCTION, F_atan2, F|A(1,F)|A(2,F), 0), - EX_ID ( "exp", FUNCTION, F_exp, F|A(1,F), 0), - EX_ID ( "pow", FUNCTION, F_pow, F|A(1,F)|A(2,F), 0), - EX_ID ( "log", FUNCTION, F_log, F|A(1,F), 0), - EX_ID ( "MIN", FUNCTION, F_min, F|A(1,F)|A(2,F), 0), - EX_ID ( "MAX", FUNCTION, F_max, F|A(1,F)|A(2,F), 0), - EX_ID ( "system", FUNCTION, F_sys, I|A(1,S), 0), - EX_ID ( "xOf", FUNCTION, F_xof, S|A(1,S), 0), - EX_ID ( "yOf", FUNCTION, F_yof, S|A(1,S), 0), - EX_ID ( "llOf", FUNCTION, F_llof, S|A(1,S), 0), - EX_ID ( "urOf", FUNCTION, F_urof, S|A(1,S), 0), - EX_ID ( "html", FUNCTION, F_html, S|A(1,G)|A(2,S), 0), - EX_ID ( "ishtml", FUNCTION, F_ishtml, I|A(1,S), 0), - EX_ID ( "canon", FUNCTION, F_canon, S|A(1,S), 0), - EX_ID ( "aget", FUNCTION, F_get, S|A(1,O)|A(2,S), 0), - EX_ID ( "aset", FUNCTION, F_set, I|A(1,O)|A(2,S)|A(3,S), 0), - EX_ID ( "getDflt", FUNCTION, F_dget, S|A(1,G)|A(2,S)|A(3,S), 0), - EX_ID ( "setDflt", FUNCTION, F_dset, I|A(1,G)|A(2,S)|A(3,S)|A(4,S), 0), - EX_ID ( "hasAttr", FUNCTION, F_hasattr, I|A(1,O)|A(2,S), 0), - EX_ID ( "isAttr", FUNCTION, F_isattr, I|A(1,G)|A(2,S)|A(3,S), 0), - EX_ID ( "fstAttr", FUNCTION, F_fstattr, S|A(1,G)|A(2,S), 0), - EX_ID ( "nxtAttr", FUNCTION, F_nxtattr, S|A(1,G)|A(2,S)|A(3,S), 0), - EX_ID ( "tolower", FUNCTION, F_tolower, S|A(1,S), 0), - EX_ID ( "toupper", FUNCTION, F_toupper, S|A(1,S), 0), - EX_ID ( "strcmp", FUNCTION, F_strcmp, I|A(1,S)|A(2,S), 0), - EX_ID ( "atoi", FUNCTION, F_atoi, I|A(1,S), 0), - EX_ID ( "atof", FUNCTION, F_atof, F|A(1,S), 0), - EX_ID ( "colorx", FUNCTION, F_colorx, S|A(1,S)|A(2,S), 0), - EX_ID ( "call", FUNCTION, F_call, I|A(1,S)|A(2,S), 0), - EX_ID ( "TV_flat", CONSTANT, C_flat, T_tvtyp, 0), - EX_ID ( "TV_ne", CONSTANT, C_ne, T_tvtyp, 0), - EX_ID ( "TV_en", CONSTANT, C_en, T_tvtyp, 0), - EX_ID ( "TV_bfs", CONSTANT, C_bfs, T_tvtyp, 0), - EX_ID ( "TV_dfs", CONSTANT, C_dfs, T_tvtyp, 0), - EX_ID ( "TV_fwd", CONSTANT, C_fwd, T_tvtyp, 0), - EX_ID ( "TV_rev", CONSTANT, C_rev, T_tvtyp, 0), - EX_ID ( "TV_postdfs", CONSTANT, C_postdfs, T_tvtyp, 0), - EX_ID ( "TV_postfwd", CONSTANT, C_postfwd, T_tvtyp, 0), - EX_ID ( "TV_postrev", CONSTANT, C_postrev, T_tvtyp, 0), - EX_ID ( "TV_prepostdfs", CONSTANT, C_prepostdfs, T_tvtyp, 0), - EX_ID ( "TV_prepostfwd", CONSTANT, C_prepostfwd, T_tvtyp, 0), - EX_ID ( "TV_prepostrev", CONSTANT, C_prepostrev, T_tvtyp, 0), - EX_ID ( "NULL", CONSTANT, C_null, T_obj, 0), - EX_ID ( {0}, 0, 0, 0, 0) -}; - -static char* typenames[] = { - "node_t", - "edge_t", - "graph_t", - "obj_t", - "tvtype_t", -}; - -#ifdef DEBUG -static char* gprnames[] = { - "", - "V_this", - "V_thisg", - "V_nextg", - "V_targt", - "V_outgraph", - "V_tgtname", - "V_infname", - "V_travroot", - "V_travnext", - "V_travedge", - "V_travtype", - "V_ARGC", - "M_degree", - "M_X", - "M_Y", - "M_head", - "M_tail", - "M_name", - "M_indegree", - "M_outdegree", - "M_root", - "M_parent", - "M_n_edges", - "M_n_nodes", - "M_directed", - "M_strict", - "T_node", - "T_edge", - "T_graph", - "T_obj", - "T_tvtyp", - "A_ARGV", - "F_graph", - "F_subg", - "F_issubg", - "F_fstsubg", - "F_nxtsubg", - "F_node", - "F_addnode", - "F_fstnode", - "F_nxtnode", - "F_nxtnodesg", - "F_isnode", - "F_issubnode", - "F_indegree", - "F_outdegree", - "F_degree", - "F_isin", - "F_edge", - "F_edgesg", - "F_addedge", - "F_opp", - "F_fstout", - "F_nxtout", - "F_fstin", - "F_nxtin", - "F_fstedge", - "F_nxtedge", - "F_fstoutsg", - "F_nxtoutsg", - "F_fstinsg", - "F_nxtinsg", - "F_fstedgesg", - "F_nxtedgesg", - "F_compof", - "F_kindof", - "F_index", - "F_rindex", - "F_isedge", - "F_isedgesg", - "F_issubedge", - "F_length", - "F_match", - "F_write", - "F_writeg", - "F_readg", - "F_fwriteg", - "F_freadg", - "F_openf", - "F_closef", - "F_readl", - "F_induce", - "F_isdirect", - "F_isstrict", - "F_delete", - "F_clone", - "F_cloneG", - "F_copy", - "F_copya", - "F_lock", - "F_nnodes", - "F_nedges", - "F_sqrt", - "F_cos", - "F_sin", - "F_atan2", - "F_exp", - "F_pow", - "F_log", - "F_min", - "F_max", - "F_sys", - "F_xof", - "F_yof", - "F_llof", - "F_urof", - "F_html", - "F_ishtml", - "F_canon", - "F_get", - "F_set", - "F_dget", - "F_dset", - "F_hasattr", - "F_isattr", - "F_fstattr", - "F_nxtattr", - "F_tolower", - "F_toupper", - "F_strcmp", - "F_atoi", - "F_atof", - "F_colorx", - "F_call", - "C_flat", - "C_ne", - "C_en", - "C_bfs", - "C_dfs", - "C_fwd", - "C_rev", - "C_postdfs", - "C_postfwd", - "C_postrev", - "C_prepostdfs", - "C_prepostfwd", - "C_prepostrev", - "C_null", -}; -#endif - -typedef unsigned short tctype; - -static tctype tchk[][2] = { - { 0, 0 }, - { 0, YALL }, - { 0, Y(G) }, - { 0, Y(G) }, - { 0, Y(G) }, - { 0, Y(G) }, - { 0, Y(S) }, - { 0, Y(S) }, - { 0, Y(V) }, - { 0, Y(V) }, - { 0, Y(E) }, - { 0, Y(TV) }, - { 0, Y(I) }, - { Y(V), Y(I) }, - { Y(V), Y(F) }, - { Y(V), Y(F) }, - { Y(E), Y(V) }, - { Y(E), Y(V) }, - { YALL, Y(S) }, - { Y(V), Y(I) }, - { Y(V), Y(I) }, - { YALL, Y(G) }, - { Y(G), Y(G) }, - { Y(G), Y(I) }, - { Y(G), Y(I) }, - { Y(G), Y(I) }, - { Y(G), Y(I) }, -}; - -#endif diff --git a/internal/ccall/gvpr/gprdata b/internal/ccall/gvpr/gprdata deleted file mode 100644 index f446567..0000000 --- a/internal/ccall/gvpr/gprdata +++ /dev/null @@ -1,138 +0,0 @@ -V_this "$" ID T_obj 0 YALL -V_thisg "$G" ID T_graph 0 Y(G) -V_nextg "$NG" ID T_graph 0 Y(G) -V_targt "$T" ID T_graph 0 Y(G) -V_outgraph "$O" ID T_graph 0 Y(G) -V_tgtname "$tgtname" ID STRING 0 Y(S) -V_infname "$F" ID STRING 0 Y(S) -V_travroot "$tvroot" ID T_node 0 Y(V) -V_travnext "$tvnext" ID T_node 0 Y(V) -V_travedge "$tvedge" ID T_edge 0 Y(E) -V_travtype "$tvtype" ID T_tvtyp 0 Y(TV) -V_ARGC "ARGC" ID INTEGER 0 Y(I) -M_degree "degree" ID INTEGER Y(V) Y(I) -M_X "X" ID FLOATING Y(V) Y(F) -M_Y "Y" ID FLOATING Y(V) Y(F) -M_head "head" ID T_node Y(E) Y(V) -M_tail "tail" ID T_node Y(E) Y(V) -M_name "name" ID STRING YALL Y(S) -M_indegree "indegree" ID INTEGER Y(V) Y(I) -M_outdegree "outdegree" ID INTEGER Y(V) Y(I) -M_root "root" ID T_graph YALL Y(G) -M_parent "parent" ID T_graph Y(G) Y(G) -M_n_edges "n_edges" ID INTEGER Y(G) Y(I) -M_n_nodes "n_nodes" ID INTEGER Y(G) Y(I) -M_directed "directed" ID INTEGER Y(G) Y(I) -M_strict "strict" ID INTEGER Y(G) Y(I) -T_node "node_t" DECLARE T_node -T_edge "edge_t" DECLARE T_edge -T_graph "graph_t" DECLARE T_graph -T_obj "obj_t" DECLARE T_obj -T_tvtyp "tvtype_t" DECLARE T_tvtyp -A_ARGV "ARGV" ARRAY S|A(1,I) -F_graph "graph" FUNCTION G|A(1,S)|A(2,S) -F_subg "subg" FUNCTION G|A(1,G)|A(2,S) -F_issubg "isSubg" FUNCTION G|A(1,G)|A(2,S) -F_fstsubg "fstsubg" FUNCTION G|A(1,G) -F_nxtsubg "nxtsubg" FUNCTION G|A(1,G) -F_node "node" FUNCTION V|A(1,G)|A(2,S) -F_addnode "subnode" FUNCTION V|A(1,G)|A(2,V) -F_fstnode "fstnode" FUNCTION V|A(1,G) -F_nxtnode "nxtnode" FUNCTION V|A(1,V) -F_nxtnodesg "nxtnode_sg" FUNCTION V|A(1,G)|A(2,V) -F_isnode "isNode" FUNCTION V|A(1,G)|A(2,S) -F_issubnode "isSubnode" FUNCTION I|A(1,G)|A(2,V) -F_indegree "indegreeOf" FUNCTION I|A(1,G)|A(2,V) -F_outdegree "outdegreeOf" FUNCTION I|A(1,G)|A(2,V) -F_degree "degreeOf" FUNCTION I|A(1,G)|A(2,V) -F_isin "isIn" FUNCTION I|A(1,G)|A(2,O) -F_edge "edge" FUNCTION E|A(1,V)|A(2,V)|A(3,S) -F_edgesg "edge_sg" FUNCTION E|A(1,G)|A(2,V)|A(3,V)|A(4,S) -F_addedge "subedge" FUNCTION E|A(1,G)|A(2,E) -F_opp "opp" FUNCTION V|A(1,E)|A(2,V) -F_fstout "fstout" FUNCTION E|A(1,V) -F_nxtout "nxtout" FUNCTION E|A(1,E) -F_fstin "fstin" FUNCTION E|A(1,V) -F_nxtin "nxtin" FUNCTION E|A(1,E) -F_fstedge "fstedge" FUNCTION E|A(1,V) -F_nxtedge "nxtedge" FUNCTION E|A(1,E)|A(2,V) -F_fstoutsg "fstout_sg" FUNCTION E|A(1,G)|A(2,V) -F_nxtoutsg "nxtout_sg" FUNCTION E|A(1,G)|A(2,E) -F_fstinsg "fstin_sg" FUNCTION E|A(1,G)|A(2,V) -F_nxtinsg "nxtin_sg" FUNCTION E|A(1,G)|A(2,E) -F_fstedgesg "fstedge_sg" FUNCTION E|A(1,G)|A(2,V) -F_nxtedgesg "nxtedge_sg" FUNCTION E|A(1,G)|A(2,E)|A(3,V) -F_compof "compOf" FUNCTION G|A(1,G)|A(2,V) -F_kindof "kindOf" FUNCTION S|A(1,O) -F_index "index" FUNCTION I|A(1,S)|A(2,S) -F_rindex "rindex" FUNCTION I|A(1,S)|A(2,S) -F_isedge "isEdge" FUNCTION E|A(1,V)|A(2,V)|A(3,S) -F_isedgesg "isEdge_sg" FUNCTION E|A(1,G)|A(2,V)|A(3,V)|A(4,S) -F_issubedge "isSubedge" FUNCTION I|A(1,G)|A(2,E) -F_length "length" FUNCTION I|A(1,S) -F_match "match" FUNCTION I|A(1,S)|A(2,S) -F_write "write" FUNCTION I|A(1,G) -F_writeg "writeG" FUNCTION I|A(1,G)|A(2,S) -F_readg "readG" FUNCTION G|A(1,S) -F_fwriteg "fwriteG" FUNCTION I|A(1,G)|A(2,I) -F_freadg "freadG" FUNCTION G|A(1,I) -F_openf "openF" FUNCTION I|A(1,S)|A(2,S) -F_closef "closeF" FUNCTION I|A(1,I) -F_readl "readL" FUNCTION S|A(1,I) -F_induce "induce" FUNCTION I|A(1,G) -F_isdirect "isDirect" FUNCTION I|A(1,G) -F_isstrict "isStrict" FUNCTION I|A(1,G) -F_delete "delete" FUNCTION I|A(1,G)|A(2,O) -F_clone "clone" FUNCTION O|A(1,G)|A(2,O) -F_cloneG "cloneG" FUNCTION G|A(1,G)|A(2,S) -F_copy "copy" FUNCTION O|A(1,G)|A(2,O) -F_copya "copyA" FUNCTION I|A(1,O)|A(2,O) -F_lock "lock" FUNCTION I|A(1,G)|A(2,I) -F_nnodes "nNodes" FUNCTION I|A(1,G) -F_nedges "nEdges" FUNCTION I|A(1,G) -F_sqrt "sqrt" FUNCTION F|A(1,F) -F_cos "cos" FUNCTION F|A(1,F) -F_sin "sin" FUNCTION F|A(1,F) -F_atan2 "atan2" FUNCTION F|A(1,F)|A(2,F) -F_exp "exp" FUNCTION F|A(1,F) -F_pow "pow" FUNCTION F|A(1,F)|A(2,F) -F_log "log" FUNCTION F|A(1,F) -F_min "MIN" FUNCTION F|A(1,F)|A(2,F) -F_max "MAX" FUNCTION F|A(1,F)|A(2,F) -F_sys "system" FUNCTION I|A(1,S) -F_xof "xOf" FUNCTION S|A(1,S) -F_yof "yOf" FUNCTION S|A(1,S) -F_llof "llOf" FUNCTION S|A(1,S) -F_urof "urOf" FUNCTION S|A(1,S) -F_html "html" FUNCTION S|A(1,G)|A(2,S) -F_ishtml "ishtml" FUNCTION I|A(1,S) -F_canon "canon" FUNCTION S|A(1,S) -F_get "aget" FUNCTION S|A(1,O)|A(2,S) -F_set "aset" FUNCTION I|A(1,O)|A(2,S)|A(3,S) -F_dget "getDflt" FUNCTION S|A(1,G)|A(2,S)|A(3,S) -F_dset "setDflt" FUNCTION I|A(1,G)|A(2,S)|A(3,S)|A(4,S) -F_hasattr "hasAttr" FUNCTION I|A(1,O)|A(2,S) -F_isattr "isAttr" FUNCTION I|A(1,G)|A(2,S)|A(3,S) -F_fstattr "fstAttr" FUNCTION S|A(1,G)|A(2,S) -F_nxtattr "nxtAttr" FUNCTION S|A(1,G)|A(2,S)|A(3,S) -F_tolower "tolower" FUNCTION S|A(1,S) -F_toupper "toupper" FUNCTION S|A(1,S) -F_strcmp "strcmp" FUNCTION I|A(1,S)|A(2,S) -F_atoi "atoi" FUNCTION I|A(1,S) -F_atof "atof" FUNCTION F|A(1,S) -F_colorx "colorx" FUNCTION S|A(1,S)|A(2,S) -F_call "call" FUNCTION I|A(1,S)|A(2,S) -C_flat "TV_flat" CONSTANT T_tvtyp -C_ne "TV_ne" CONSTANT T_tvtyp -C_en "TV_en" CONSTANT T_tvtyp -C_bfs "TV_bfs" CONSTANT T_tvtyp -C_dfs "TV_dfs" CONSTANT T_tvtyp -C_fwd "TV_fwd" CONSTANT T_tvtyp -C_rev "TV_rev" CONSTANT T_tvtyp -C_postdfs "TV_postdfs" CONSTANT T_tvtyp -C_postfwd "TV_postfwd" CONSTANT T_tvtyp -C_postrev "TV_postrev" CONSTANT T_tvtyp -C_prepostdfs "TV_prepostdfs" CONSTANT T_tvtyp -C_prepostfwd "TV_prepostfwd" CONSTANT T_tvtyp -C_prepostrev "TV_prepostrev" CONSTANT T_tvtyp -C_null "NULL" CONSTANT T_obj diff --git a/internal/ccall/gvpr/gprstate.c b/internal/ccall/gvpr/gprstate.c deleted file mode 100644 index 03fe109..0000000 --- a/internal/ccall/gvpr/gprstate.c +++ /dev/null @@ -1,149 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * gpr state - * - */ - -#ifdef WIN32 -#include "windows.h" -#include "shlwapi.h" -#endif - -#include -#include -#include - -static int name_used; - -int validTVT(int c) -{ - return ((TV_flat <= c) && (c <= TV_prepostrev)); -} - -void initGPRState(Gpr_t * state, Vmalloc_t * vm) -{ - state->tgtname = vmstrdup(vm, "gvpr_result"); -} - -Gpr_t *openGPRState(gpr_info* info) -{ - Gpr_t *state; - - if (!(state = newof(0, Gpr_t, 1, 0))) { - error(ERROR_ERROR, "Could not create gvpr state: out of memory"); - return state; - } - - if (!(state->tmp = sfstropen())) { - error(ERROR_ERROR, "Could not create state tmpfile"); - free (state); - return 0; - } - - state->tvt = TV_flat; - state->name_used = name_used; - state->tvroot = 0; - state->tvnext = 0; - state->tvedge = 0; - state->outFile = info->outFile; - state->argc = info->argc; - state->argv = info->argv; - state->errf = info->errf; - state->flags = info->flags; - - return state; -} - - -static int -bindingcmpf (const void *key, const void *ip) -{ - return strcmp (((gvprbinding*)key)->name, ((gvprbinding*)ip)->name); -} - -/* findBinding: - */ -gvprbinding* -findBinding (Gpr_t* state, char* fname) -{ - gvprbinding key; - gvprbinding* bp; - - if (!state->bindings) { - error(ERROR_ERROR,"call(\"%s\") failed: no bindings", fname); - return NULL; - } - if (!fname) { - error(ERROR_ERROR,"NULL function name for call()"); - return NULL; - } - - key.name = fname; - bp = (gvprbinding*)bsearch(&key, state->bindings, state->n_bindings, sizeof(gvprbinding), bindingcmpf); - if (!bp) - error(ERROR_ERROR, "No binding for \"%s\" in call()", fname); - return bp; -} - -/* addBindings: - * Validate input, sort lexicographically, and attach - */ -void addBindings (Gpr_t* state, gvprbinding* bindings) -{ - int n = 0; - gvprbinding* bp = bindings; - gvprbinding* buf; - gvprbinding* bufp; - - while (bp && bp->name) { - if (bp->fn) n++; - bp++; - } - - if (n == 0) return; - bufp = buf = newof(0, gvprbinding, n, 0); - bp = bindings; - while (bp->name) { - if (bp->fn) { - *bufp = *bp; - bufp++; - } - bp++; - } - qsort (buf, n, sizeof(gvprbinding), bindingcmpf); - - state->bindings = buf; - state->n_bindings = n; -} - -void closeGPRState(Gpr_t* state) -{ - if (!state) return; - name_used = state->name_used; - if (state->tmp) - sfclose (state->tmp); - free (state->dp); - free (state); -} - -#ifdef WIN32_DLL -int pathisrelative (char* path) -{ - return PathIsRelative(path); - -} -#endif - diff --git a/internal/ccall/gvpr/gprstate.h b/internal/ccall/gvpr/gprstate.h deleted file mode 100644 index 9ad8443..0000000 --- a/internal/ccall/gvpr/gprstate.h +++ /dev/null @@ -1,93 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef GPRSTATE_H -#define GPRSTATE_H - -#include "sfio.h" -#include "cgraph.h" -#include "ast.h" -#include "vmalloc.h" -#include "expr.h" -#include "gvpr.h" - - typedef enum { TV_flat, TV_ne, TV_en, - TV_bfs, - TV_dfs, TV_fwd, TV_rev, - TV_postdfs, TV_postfwd, TV_postrev, - TV_prepostdfs, TV_prepostfwd, TV_prepostrev, - } trav_type; - -/* Bits for flags variable. - */ - /* If set, gvpr calls exit() on errors */ -#define GV_USE_EXIT 1 - /* If set, gvpr stores output graphs in gvpropts */ -#define GV_USE_OUTGRAPH 2 -#define GV_USE_JUMP 4 - - typedef struct { - Agraph_t *curgraph; - Agraph_t *nextgraph; - Agraph_t *target; - Agraph_t *outgraph; - Agobj_t *curobj; - Sfio_t *tmp; - Exdisc_t *dp; - Exerror_f errf; - Exexit_f exitf; - char *tgtname; - char *infname; - Sfio_t *outFile; - Agiodisc_t* dfltIO; - trav_type tvt; - Agnode_t *tvroot; - Agnode_t *tvnext; - Agedge_t *tvedge; - int name_used; - int argc; - char **argv; - int flags; - gvprbinding* bindings; - int n_bindings; - } Gpr_t; - - typedef struct { - Sfio_t *outFile; - int argc; - char **argv; - Exerror_f errf; - Exexit_f exitf; - int flags; - } gpr_info; - - extern Gpr_t *openGPRState(gpr_info*); - extern void addBindings(Gpr_t* state, gvprbinding*); - extern gvprbinding* findBinding(Gpr_t* state, char*); - extern void closeGPRState(Gpr_t* state); - extern void initGPRState(Gpr_t *, Vmalloc_t *); - extern int validTVT(int); - -#ifdef WIN32 - extern int pathisrelative (char* path); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/gvpr.c b/internal/ccall/gvpr/gvpr.c deleted file mode 100644 index 00c721c..0000000 --- a/internal/ccall/gvpr/gvpr.c +++ /dev/null @@ -1,1109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * gpr: graph pattern recognizer - * - * Written by Emden Gansner - */ - - -#include "config.h" -#ifdef HAVE_UNISTD_H -#include -#else -#include "compat_unistd.h" -#endif -#include "builddate.h" -#include "gprstate.h" -#include "cgraph.h" -#include "globals.h" -#include "ingraphs.h" -#include "compile.h" -#include "queue.h" -#include "gvpr.h" -#include "actions.h" -#include "sfstr.h" -#include -#include -#include -#include -#include - -#ifndef DFLT_GVPRPATH -#define DFLT_GVPRPATH "." -#endif - -static char *Info[] = { - "gvpr", /* Program */ - PACKAGE_VERSION, /* Version */ - BUILDDATE /* Build Date */ -}; - -static const char *usage = - " [-o ] [-a ] ([-f ] | 'prog') [files]\n\ - -c - use source graph for output\n\ - -f - find program in file \n\ - -i - create node induced subgraph\n\ - -a - string arguments available as ARGV[0..]\n\ - -o - write output to ; stdout by default\n\ - -n - no read-ahead of input graphs\n\ - -q - turn off warning messages\n\ - -V - print version info\n\ - -? - print usage info\n\ -If no files are specified, stdin is used\n"; - -typedef struct { - char *cmdName; /* command name */ - Sfio_t *outFile; /* output stream; stdout default */ - char *program; /* program source */ - int useFile; /* true if program comes from a file */ - int compflags; - int readAhead; - char **inFiles; - int argc; - char **argv; - int state; /* > 0 : continue; <= 0 finish */ - int verbose; -} options; - -static Sfio_t *openOut(char *name) -{ - Sfio_t *outs; - - outs = sfopen(0, name, "w"); - if (outs == 0) { - error(ERROR_ERROR, "could not open %s for writing", name); - } - return outs; -} - -/* gettok: - * Tokenize a string. Tokens consist of either a non-empty string - * of non-space characters, or all characters between a pair of - * single or double quotes. As usual, we map - * \c -> c - * for all c - * Return next argument token, returning NULL if none. - * sp is updated to point to next character to be processed. - * NB. There must be white space between tokens. Otherwise, they - * are concatenated. - */ -static char *gettok(char **sp) -{ - char *s = *sp; - char *ws = s; - char *rs = s; - char c; - char q = '\0'; /* if non-0, in quote mode with quote char q */ - - while (isspace(*rs)) - rs++; - if ((c = *rs) == '\0') - return NULL; - while ((c = *rs)) { - if (q && (q == c)) { /* end quote */ - q = '\0'; - } else if (!q && ((c == '"') || (c == '\''))) { - q = c; - } else if (c == '\\') { - rs++; - c = *rs; - if (c) - *ws++ = c; - else { - error(ERROR_WARNING, - "backslash in argument followed by no character - ignored"); - rs--; - } - } else if (q || !isspace(c)) - *ws++ = c; - else - break; - rs++; - } - if (*rs) - rs++; - else if (q) - error(ERROR_WARNING, "no closing quote for argument %s", s); - *sp = rs; - *ws = '\0'; - return s; -} - -#define NUM_ARGS 100 - -/* parseArgs: - * Split s into whitespace separated tokens, allowing quotes. - * Append tokens to argument list and return new number of arguments. - * argc is the current number of arguments, with the arguments - * stored in *argv. - */ -static int parseArgs(char *s, int argc, char ***argv) -{ - int i, cnt = 0; - char *args[NUM_ARGS]; - char *t; - char **av; - - while ((t = gettok(&s))) { - if (cnt == NUM_ARGS) { - error(ERROR_WARNING, - "at most %d arguments allowed per -a flag - ignoring rest", - NUM_ARGS); - break; - } - args[cnt++] = t; - } - - if (cnt) { - int oldcnt = argc; - argc = oldcnt + cnt; - av = oldof(*argv, char *, argc, 0); - for (i = 0; i < cnt; i++) - av[oldcnt + i] = strdup(args[i]); - *argv = av; - } - return argc; -} - - -#ifdef WIN32 -#define PATHSEP '\\' -#define LISTSEP ';' -#else -#define PATHSEP '/' -#define LISTSEP ':' -#endif - -static Sfio_t* -concat (char* pfx, char* sfx, char** sp) -{ - Sfio_t *pathp; - if (!(pathp = sfstropen())) { - error(ERROR_ERROR, "Could not open buffer"); - return 0; - } - sfprintf(pathp, "%s%s", pfx, sfx); - *sp = sfstruse(pathp); - return pathp; -} - -/* resolve: - * Translate -f arg parameter into a pathname. - * If arg contains '/', return arg. - * Else search directories in GVPRPATH for arg. - * Return NULL on error. - * - * FIX - use pathinclude/pathfind - */ -static char *resolve(char *arg, int Verbose) -{ - char *path; - char *s; - char *cp; - char c; - char *fname = 0; - Sfio_t *fp; - Sfio_t *pathp = NULL; - size_t sz; - -#ifdef WIN32_DLL - if (!pathisrelative(arg)) -#else - if (strchr(arg, '/')) -#endif - return strdup(arg); - - path = getenv("GVPRPATH"); - if (!path) - path = getenv("GPRPATH"); // deprecated - if (path && (c = *path)) { - if (c == LISTSEP) { - pathp = concat(DFLT_GVPRPATH, path, &path); - } - else if ((c = path[strlen(path)-1]) == LISTSEP) { - pathp = concat(path, DFLT_GVPRPATH, &path); - } - } - else - path = DFLT_GVPRPATH; - if (Verbose) - fprintf (stderr, "PATH: %s\n", path); - if (!(fp = sfstropen())) { - error(ERROR_ERROR, "Could not open buffer"); - return 0; - } - - while (*path && !fname) { - if (*path == LISTSEP) { /* skip colons */ - path++; - continue; - } - cp = strchr(path, LISTSEP); - if (cp) { - sz = (size_t) (cp - path); - sfwrite(fp, path, sz); - path = cp + 1; /* skip past current colon */ - } else { - sz = sfprintf(fp, path); - path += sz; - } - sfputc(fp, PATHSEP); - sfprintf(fp, arg); - s = sfstruse(fp); - - if (access(s, R_OK) == 0) { - fname = strdup(s); - } - } - - if (!fname) - error(ERROR_ERROR, "Could not find file \"%s\" in GVPRPATH", arg); - - sfclose(fp); - if (pathp) - sfclose(pathp); - if (Verbose) - fprintf (stderr, "file %s resolved to %s\n", arg, fname); - return fname; -} - -static char* -getOptarg (int c, char** argp, int* argip, int argc, char** argv) -{ - char* rv; - char* arg = *argp; - int argi = *argip; - - if (*arg) { - rv = arg; - while (*arg) arg++; - *argp = arg; - } - else if (argi < argc) { - rv = argv[argi++]; - *argip = argi; - } - else { - rv = NULL; - error(ERROR_WARNING, "missing argument for option -%c", c); - } - return rv; -} - -/* doFlags: - * Process a command-line argument starting with a '-'. - * argi is the index of the next available item in argv[]. - * argc has its usual meaning. - * - * return > 0 given next argi value - * = 0 for exit with 0 - * < 0 for error - */ -static int -doFlags(char* arg, int argi, int argc, char** argv, options* opts) -{ - int c; - - while ((c = *arg++)) { - switch (c) { - case 'c': - opts->compflags |= SRCOUT; - break; - case 'C': - opts->compflags |= (SRCOUT|CLONE); - break; - case 'f': - if ((optarg = getOptarg(c, &arg, &argi, argc, argv)) && (opts->program = resolve(optarg, opts->verbose))) { - opts->useFile = 1; - } - else return -1; - break; - case 'i': - opts->compflags |= INDUCE; - break; - case 'n': - opts->readAhead = 0; - break; - case 'a': - if ((optarg = getOptarg(c, &arg, &argi, argc, argv))) { - opts->argc = parseArgs(optarg, opts->argc, &(opts->argv)); - } - else return -1; - break; - case 'o': - if (!(optarg = getOptarg(c, &arg, &argi, argc, argv)) || !(opts->outFile = openOut(optarg))) - return -1; - break; - case 'q': - setTraceLevel (ERROR_ERROR); /* Don't emit warning messages */ - break; - case 'v': - opts->verbose = 1; - break; - case 'V': - sfprintf(sfstderr, "%s version %s (%s)\n", - Info[0], Info[1], Info[2]); - return 0; - break; - case '?': - error(ERROR_USAGE|ERROR_WARNING, "%s", usage); - return 0; - break; - default : - error(ERROR_WARNING, "option -%c unrecognized", c); - break; - } - } - return argi; -} - -static void -freeOpts (options* opts) -{ - int i; - if (!opts) return; - if (opts->outFile != sfstdout) - sfclose (opts->outFile); - free (opts->inFiles); - if (opts->useFile) - free (opts->program); - if (opts->argc) { - for (i = 0; i < opts->argc; i++) - free (opts->argv[i]); - free (opts->argv); - } - free (opts); -} - -/* scanArgs: - * Parse command line options. - */ -static options* scanArgs(int argc, char **argv, gvpropts* uopts) -{ - int i, nfiles; - char** input_filenames; - char* arg; - options* opts = newof(0,options,1,0); - - opts->cmdName = argv[0]; - opts->state = 1; - opts->readAhead = 1; - setErrorId (opts->cmdName); - opts->verbose = 0; - - /* estimate number of file names */ - nfiles = 0; - for (i = 1; i < argc; i++) - if (argv[i] && argv[i][0] != '-') - nfiles++; - input_filenames = newof(0,char*,nfiles + 1,0); - - /* loop over arguments */ - nfiles = 0; - for (i = 1; i < argc; ) { - arg = argv[i++]; - if (*arg == '-') { - i = doFlags (arg+1, i, argc, argv, opts); - if (i <= 0) { - opts->state = i; - goto opts_done; - } - } else if (arg) - input_filenames[nfiles++] = arg; - } - - /* Handle additional semantics */ - if (opts->useFile == 0) { - if (nfiles == 0) { - error(ERROR_ERROR, - "No program supplied via argument or -f option"); - opts->state = -1; - } else { - opts->program = input_filenames[0]; - for (i = 1; i <= nfiles; i++) - input_filenames[i-1] = input_filenames[i]; - nfiles--; - } - } - if (nfiles == 0) { - opts->inFiles = 0; - free (input_filenames); - input_filenames = 0; - } - else - opts->inFiles = input_filenames; - - if (!(opts->outFile)) - opts->outFile = sfstdout; - - opts_done: - if (opts->state <= 0) { - if (opts->state < 0) - error(ERROR_USAGE|ERROR_ERROR, "%s", usage); - free (input_filenames); - } - - return opts; -} - -static Agobj_t* evalEdge(Gpr_t * state, Expr_t* prog, comp_block * xprog, Agedge_t * e) -{ - int i; - case_stmt *cs; - int okay; - - state->curobj = (Agobj_t *) e; - for (i = 0; i < xprog->n_estmts; i++) { - cs = xprog->edge_stmts + i; - if (cs->guard) - okay = (exeval(prog, cs->guard, state)).integer; - else - okay = 1; - if (okay) { - if (cs->action) - exeval(prog, cs->action, state); - else - agsubedge(state->target, e, TRUE); - } - } - return state->curobj; -} - -static Agobj_t* evalNode(Gpr_t * state, Expr_t* prog, comp_block * xprog, Agnode_t * n) -{ - int i; - case_stmt *cs; - int okay; - - state->curobj = (Agobj_t *) n; - for (i = 0; i < xprog->n_nstmts; i++) { - cs = xprog->node_stmts + i; - if (cs->guard) - okay = (exeval(prog, cs->guard, state)).integer; - else - okay = 1; - if (okay) { - if (cs->action) - exeval(prog, cs->action, state); - else - agsubnode(state->target, n, TRUE); - } - } - return (state->curobj); -} - -typedef struct { - Agnode_t *oldroot; - Agnode_t *prev; -} nodestream; - -static Agnode_t *nextNode(Gpr_t * state, nodestream * nodes) -{ - Agnode_t *np; - - if (state->tvroot != nodes->oldroot) { - np = nodes->oldroot = state->tvroot; - } else if (state->flags & GV_NEXT_SET) { - np = nodes->oldroot = state->tvroot = state->tvnext; - state->flags &= ~GV_NEXT_SET; - } else if (nodes->prev) { - np = nodes->prev = agnxtnode(state->curgraph, nodes->prev); - } else { - np = nodes->prev = agfstnode(state->curgraph); - } - return np; -} - -#define MARKED(x) (((x)->iu.integer)&1) -#define MARK(x) (((x)->iu.integer) = 1) -#define ONSTACK(x) (((x)->iu.integer)&2) -#define PUSH(x,e) (((x)->iu.integer)|=2,(x)->ine=(e)) -#define POP(x) (((x)->iu.integer)&=(~2)) - -typedef Agedge_t *(*fstedgefn_t) (Agraph_t *, Agnode_t *); -typedef Agedge_t *(*nxttedgefn_t) (Agraph_t *, Agedge_t *, Agnode_t *); - -#define PRE_VISIT 1 -#define POST_VISIT 2 - -typedef struct { - fstedgefn_t fstedge; - nxttedgefn_t nxtedge; - unsigned char undirected; - unsigned char visit; -} trav_fns; - -static trav_fns DFSfns = { agfstedge, agnxtedge, 1, 0 }; -static trav_fns FWDfns = { agfstout, (nxttedgefn_t) agnxtout, 0, 0 }; -static trav_fns REVfns = { agfstin, (nxttedgefn_t) agnxtin, 0, 0 }; - -static void travBFS(Gpr_t * state, Expr_t* prog, comp_block * xprog) -{ - nodestream nodes; - queue *q; - ndata *nd; - Agnode_t *n; - Agedge_t *cure; - Agedge_t *nxte; - Agraph_t *g = state->curgraph; - - q = mkQueue(); - nodes.oldroot = 0; - nodes.prev = 0; - while ((n = nextNode(state, &nodes))) { - nd = nData(n); - if (MARKED(nd)) - continue; - PUSH(nd, 0); - push(q, n); - while ((n = pull(q))) { - nd = nData(n); - MARK(nd); - POP(nd); - state->tvedge = nd->ine; - if (!evalNode(state, prog, xprog, n)) continue; - for (cure = agfstedge(g, n); cure; cure = nxte) { - nxte = agnxtedge(g, cure, n); - nd = nData(cure->node); - if (MARKED(nd)) - continue; - if (!evalEdge(state, prog, xprog, cure)) continue; - if (!ONSTACK(nd)) { - push(q, cure->node); - PUSH(nd,cure); - } - } - } - } - state->tvedge = 0; - freeQ(q); -} - -static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * fns) -{ - Agnode_t *n; - queue *stk; - Agnode_t *curn; - Agedge_t *cure; - Agedge_t *entry; - int more; - ndata *nd; - nodestream nodes; - Agedgepair_t seed; - - stk = mkStack(); - nodes.oldroot = 0; - nodes.prev = 0; - while ((n = nextNode(state, &nodes))) { - nd = nData(n); - if (MARKED(nd)) - continue; - seed.out.node = n; - seed.in.node = 0; - curn = n; - entry = &(seed.out); - state->tvedge = cure = 0; - MARK(nd); - PUSH(nd,0); - if (fns->visit & PRE_VISIT) - evalNode(state, prog, xprog, n); - more = 1; - while (more) { - if (cure) - cure = fns->nxtedge(state->curgraph, cure, curn); - else - cure = fns->fstedge(state->curgraph, curn); - if (cure) { - if (entry == agopp(cure)) /* skip edge used to get here */ - continue; - nd = nData(cure->node); - if (MARKED(nd)) { - /* For undirected DFS, visit an edge only if its head - * is on the stack, to avoid visiting it twice. - * This is no problem in directed DFS. - */ - if (fns->undirected) { - if (ONSTACK(nd)) - evalEdge(state, prog, xprog, cure); - } else - evalEdge(state, prog, xprog, cure); - } else { - evalEdge(state, prog, xprog, cure); - push(stk, entry); - state->tvedge = entry = cure; - curn = cure->node; - cure = 0; - if (fns->visit & PRE_VISIT) - evalNode(state, prog, xprog, curn); - MARK(nd); - PUSH(nd, entry); - } - } else { - if (fns->visit & POST_VISIT) - evalNode(state, prog, xprog, curn); - nd = nData(curn); - POP(nd); - cure = entry; - entry = (Agedge_t *) pull(stk); - if (entry == &(seed.out)) - state->tvedge = 0; - else - state->tvedge = entry; - if (entry) - curn = entry->node; - else - more = 0; - } - } - } - state->tvedge = 0; - freeQ(stk); -} - -static void travNodes(Gpr_t * state, Expr_t* prog, comp_block * xprog) -{ - Agnode_t *n; - Agnode_t *next; - Agraph_t *g = state->curgraph; - for (n = agfstnode(g); n; n = next) { - next = agnxtnode(g, n); - evalNode(state, prog, xprog, n); - } -} - -static void travEdges(Gpr_t * state, Expr_t* prog, comp_block * xprog) -{ - Agnode_t *n; - Agnode_t *next; - Agedge_t *e; - Agedge_t *nexte; - Agraph_t *g = state->curgraph; - for (n = agfstnode(g); n; n = next) { - next = agnxtnode(g, n); - for (e = agfstout(g, n); e; e = nexte) { - nexte = agnxtout(g, e); - evalEdge(state, prog, xprog, e); - } - } -} - -static void travFlat(Gpr_t * state, Expr_t* prog, comp_block * xprog) -{ - Agnode_t *n; - Agnode_t *next; - Agedge_t *e; - Agedge_t *nexte; - Agraph_t *g = state->curgraph; - for (n = agfstnode(g); n; n = next) { - next = agnxtnode(g, n); - if (!evalNode(state, prog, xprog, n)) continue; - if (xprog->n_estmts > 0) { - for (e = agfstout(g, n); e; e = nexte) { - nexte = agnxtout(g, e); - evalEdge(state, prog, xprog, e); - } - } - } -} - -/* doCleanup: - * Reset node traversal data - */ -static void doCleanup (Agraph_t* g) -{ - Agnode_t *n; - ndata *nd; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - nd = nData(n); - nd->ine = NULL; - nd->iu.integer = 0; - } -} - -/* traverse: - * return 1 if traversal requires cleanup - */ -static int traverse(Gpr_t * state, Expr_t* prog, comp_block * bp, int cleanup) -{ - char *target; - - if (!state->target) { - if (state->name_used) { - sfprintf(state->tmp, "%s%d", state->tgtname, state->name_used); - target = sfstruse(state->tmp); - } else - target = state->tgtname; - state->name_used++; - /* make sure target subgraph does not exist */ - while (agsubg (state->curgraph, target, 0)) { - state->name_used++; - sfprintf(state->tmp, "%s%d", state->tgtname, state->name_used); - target = sfstruse(state->tmp); - } - state->target = openSubg(state->curgraph, target); - } - if (!state->outgraph) - state->outgraph = state->target; - - switch (state->tvt) { - case TV_flat: - travFlat(state, prog, bp); - break; - case TV_bfs: - if (cleanup) doCleanup (state->curgraph); - travBFS(state, prog, bp); - cleanup = 1; - break; - case TV_dfs: - if (cleanup) doCleanup (state->curgraph); - DFSfns.visit = PRE_VISIT; - travDFS(state, prog, bp, &DFSfns); - cleanup = 1; - break; - case TV_fwd: - if (cleanup) doCleanup (state->curgraph); - FWDfns.visit = PRE_VISIT; - travDFS(state, prog, bp, &FWDfns); - cleanup = 1; - break; - case TV_rev: - if (cleanup) doCleanup (state->curgraph); - REVfns.visit = PRE_VISIT; - travDFS(state, prog, bp, &REVfns); - cleanup = 1; - break; - case TV_postdfs: - if (cleanup) doCleanup (state->curgraph); - DFSfns.visit = POST_VISIT; - travDFS(state, prog, bp, &DFSfns); - cleanup = 1; - break; - case TV_postfwd: - if (cleanup) doCleanup (state->curgraph); - FWDfns.visit = POST_VISIT; - travDFS(state, prog, bp, &FWDfns); - cleanup = 1; - break; - case TV_postrev: - if (cleanup) doCleanup (state->curgraph); - REVfns.visit = POST_VISIT | PRE_VISIT; - travDFS(state, prog, bp, &REVfns); - cleanup = 1; - break; - case TV_prepostdfs: - if (cleanup) doCleanup (state->curgraph); - DFSfns.visit = POST_VISIT | PRE_VISIT; - travDFS(state, prog, bp, &DFSfns); - cleanup = 1; - break; - case TV_prepostfwd: - if (cleanup) doCleanup (state->curgraph); - FWDfns.visit = POST_VISIT | PRE_VISIT; - travDFS(state, prog, bp, &FWDfns); - cleanup = 1; - break; - case TV_prepostrev: - if (cleanup) doCleanup (state->curgraph); - REVfns.visit = POST_VISIT; - travDFS(state, prog, bp, &REVfns); - cleanup = 1; - break; - case TV_ne: - travNodes(state, prog, bp); - travEdges(state, prog, bp); - break; - case TV_en: - travEdges(state, prog, bp); - travNodes(state, prog, bp); - break; - } - return cleanup; -} - -/* addOutputGraph: - * Append output graph to option struct. - * We know uopts and state->outgraph are non-NULL. - */ -static void -addOutputGraph (Gpr_t* state, gvpropts* uopts) -{ - Agraph_t* g = state->outgraph; - - if ((agroot(g) == state->curgraph) && !uopts->ingraphs) - g = (Agraph_t*)clone (0, (Agobj_t *)g); - - uopts->n_outgraphs++; - uopts->outgraphs = oldof(uopts->outgraphs,Agraph_t*,uopts->n_outgraphs,0); - uopts->outgraphs[uopts->n_outgraphs-1] = g; -} - -static void chkClose(Agraph_t * g) -{ - gdata *data; - - data = gData(g); - if (data->lock & 1) - data->lock |= 2; - else - agclose(g); -} - -static void *ing_open(char *f) -{ - return sfopen(0, f, "r"); -} - -static Agraph_t *ing_read(void *fp) -{ - return readG((Sfio_t *) fp); -} - -static int ing_close(void *fp) -{ - return sfclose((Sfio_t *) fp); -} - -static ingdisc ingDisc = { ing_open, ing_read, ing_close, 0 }; - -static void -setDisc (Sfio_t* sp, Sfdisc_t* dp, gvprwr fn) -{ - dp->readf = 0; - dp->writef = (Sfwrite_f)fn; - dp->seekf = 0; - dp->exceptf = 0; - dp->disc = 0; - dp = sfdisc (sp, dp); -} - -static jmp_buf jbuf; - -/* gvexitf: - * Only used if GV_USE_EXIT not set during exeval. - * This implies setjmp/longjmp set up. - */ -static void -gvexitf (Expr_t *handle, Exdisc_t *discipline, int v) -{ - longjmp (jbuf, v); -} - -static int -gverrorf (Expr_t *handle, Exdisc_t *discipline, int level, ...) -{ - va_list ap; - - va_start(ap, level); - errorv((discipline - && handle) ? *((char **) handle) : (char *) handle, level, ap); - va_end(ap); - - if (level >= ERROR_ERROR) { - Gpr_t *state = (Gpr_t*)(discipline->user); - if (state->flags & GV_USE_EXIT) - exit(1); - else if (state->flags & GV_USE_JUMP) - longjmp (jbuf, 1); - } - - return 0; -} - -/* gvpr: - * main loop for gvpr. - * Return 0 on success; non-zero on error. - * - * FIX/TODO: - * - close non-source/non-output graphs - * - flag to clone target graph? - * - remove assignment in boolean warning if wrapped in () - * - do automatic cast for array indices if type is known - * - array initialization - */ -int gvpr (int argc, char *argv[], gvpropts * uopts) -{ - Sfdisc_t errdisc; - Sfdisc_t outdisc; - parse_prog *prog = 0; - ingraph_state *ing = 0; - comp_prog *xprog = 0; - Gpr_t *state = 0; - gpr_info info; - int rv = 0; - options* opts = 0; - int cleanup, i, incoreGraphs; - Agraph_t* nextg = NULL; - - setErrorErrors (0); - ingDisc.dflt = sfstdin; - if (uopts) { - if (uopts->out) setDisc (sfstdout, &outdisc, uopts->out); - if (uopts->err) setDisc (sfstderr, &errdisc, uopts->err); - } - - opts = scanArgs(argc, argv, uopts); - if (opts->state <= 0) { - rv = opts->state; - goto finish; - } - - if (opts->verbose) - gvstart_timer (); - prog = parseProg(opts->program, opts->useFile); - if (!prog) { - rv = 1; - goto finish; - } - info.outFile = opts->outFile; - info.argc = opts->argc; - info.argv = opts->argv; - info.errf = (Exerror_f)gverrorf; - if (uopts) - info.flags = uopts->flags; - else - info.flags = 0; - if ((uopts->flags & GV_USE_EXIT)) - info.exitf = 0; - else - info.exitf = gvexitf; - state = openGPRState(&info); - if (!state) { - rv = 1; - goto finish; - } - if (uopts->bindings) - addBindings (state, uopts->bindings); - xprog = compileProg(prog, state, opts->compflags); - if (!xprog) { - rv = 1; - goto finish; - } - - initGPRState(state, xprog->prog->vm); - - if ((uopts->flags & GV_USE_OUTGRAPH)) { - uopts->outgraphs = 0; - uopts->n_outgraphs = 0; - } - - if (!(uopts->flags & GV_USE_EXIT)) { - state->flags |= GV_USE_JUMP; - if ((rv = setjmp (jbuf))) { - goto finish; - } - } - - if (uopts && uopts->ingraphs) - incoreGraphs = 1; - else - incoreGraphs = 0; - - if (opts->verbose) - sfprintf (sfstderr, "Parse/compile/init: %.2f secs.\n", gvelapsed_sec()); - /* do begin */ - if (xprog->begin_stmt) - exeval(xprog->prog, xprog->begin_stmt, state); - - /* if program is not null */ - if (usesGraph(xprog)) { - if (uopts && uopts->ingraphs) - ing = newIngGraphs(0, uopts->ingraphs, &ingDisc); - else - ing = newIng(0, opts->inFiles, &ingDisc); - - if (opts->verbose) gvstart_timer (); - for (state->curgraph = nextGraph(ing); state->curgraph; state->curgraph = nextg) { - if (opts->verbose) sfprintf (sfstderr, "Read graph: %.2f secs.\n", gvelapsed_sec()); - state->infname = fileName(ing); - if (opts->readAhead) - nextg = state->nextgraph = nextGraph(ing); - cleanup = 0; - - for (i = 0; i < xprog->n_blocks; i++) { - comp_block* bp = xprog->blocks + i; - - /* begin graph */ - if (incoreGraphs && (opts->compflags & CLONE)) - state->curgraph = (Agraph_t*)clone (0, (Agobj_t*)(state->curgraph)); - state->curobj = (Agobj_t *) state->curgraph; - state->tvroot = 0; - if (bp->begg_stmt) - exeval(xprog->prog, bp->begg_stmt, state); - - /* walk graph */ - if (walksGraph(bp)) { - cleanup = traverse(state, xprog->prog, bp, cleanup); - } - } - - /* end graph */ - state->curobj = (Agobj_t *) state->curgraph; - if (xprog->endg_stmt) - exeval(xprog->prog, xprog->endg_stmt, state); - if (opts->verbose) sfprintf (sfstderr, "Finish graph: %.2f secs.\n", gvelapsed_sec()); - - /* if $O == $G and $T is empty, delete $T */ - if ((state->outgraph == state->curgraph) && - (state->target) && !agnnodes(state->target)) - agdelete(state->curgraph, state->target); - - /* output graph, if necessary - * For this, the outgraph must be defined, and either - * be non-empty or the -c option was used. - */ - if (state->outgraph && (agnnodes(state->outgraph) - || (opts->compflags & SRCOUT))) { - if (uopts && (uopts->flags & GV_USE_OUTGRAPH)) - addOutputGraph (state, uopts); - else - sfioWrite (state->outgraph, opts->outFile, state->dfltIO); - } - - if (!incoreGraphs) - chkClose(state->curgraph); - state->target = 0; - state->outgraph = 0; - - if (opts->verbose) gvstart_timer (); - if (!opts->readAhead) - nextg = nextGraph(ing); - if (opts->verbose && nextg) sfprintf (sfstderr, "Read graph: %.2f secs.\n", gvelapsed_sec()); - } - } - - /* do end */ - state->curgraph = 0; - state->curobj = 0; - if (xprog->end_stmt) - exeval(xprog->prog, xprog->end_stmt, state); - - finish: - /* free all allocated resources */ - freeParseProg (prog); - freeCompileProg (xprog); - closeGPRState(state); - if (ing) closeIngraph (ing); - freeOpts (opts); - - if (uopts) { - if (uopts->out) sfdisc (sfstdout, 0); - if (uopts->err) sfdisc (sfstderr, 0); - } - - return rv; -} - diff --git a/internal/ccall/gvpr/gvpr.h b/internal/ccall/gvpr/gvpr.h deleted file mode 100644 index ec7a352..0000000 --- a/internal/ccall/gvpr/gvpr.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef GVPR_H -#define GVPR_H - -#include "cgraph.h" -#ifdef _MSC_VER -typedef int ssize_t; -#endif - -/* Bits for flags variable in gvprstate_t. - * Included here so that calling programs can use the first - * two in gvpropts.flags - */ - /* If set, gvpr calls exit() on errors */ -#define GV_USE_EXIT 1 - /* If set, gvpr stores output graphs in gvpropts */ -#define GV_USE_OUTGRAPH 2 - /* Use longjmp to return to top-level call in gvpr */ -#define GV_USE_JUMP 4 - /* $tvnext has been set but not used */ -#define GV_NEXT_SET 8 - - -typedef ssize_t (*gvprwr) (void*, const char *buf, size_t nbyte, void*); -typedef int (*gvpruserfn) (char *); -typedef struct { - char* name; - gvpruserfn fn; -} gvprbinding; - -typedef struct { - Agraph_t** ingraphs; /* NULL-terminated array of input graphs */ - int n_outgraphs; /* if GV_USE_OUTGRAPH set, output graphs */ - Agraph_t** outgraphs; - gvprwr out; /* write function for stdout */ - gvprwr err; /* write function for stderr */ - int flags; - gvprbinding* bindings; /* array of bindings, terminated with {NULL,NULL} */ -} gvpropts; - - extern int gvpr (int argc, char *argv[], gvpropts* opts); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/mkdefs.c b/internal/ccall/gvpr/mkdefs.c deleted file mode 100644 index b1d9b70..0000000 --- a/internal/ccall/gvpr/mkdefs.c +++ /dev/null @@ -1,206 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Generator of gpr include file from table data - * - */ - -#include -#include -#include -#include - -/******** Parameters **********/ - -#define MINNAME 1 - -/*************************/ - -static char *header = "#ifndef %s\n\ -#define %s\n\n\ -/* generated by mkdefs; do not edit */\n\n"; - -static char *prefix = "#define Y(i) (1<<(i))\n\ -\n\ -#define V 0x4 /* NODE */\n\ -#define E 0x5 /* EDGE */\n\ -#define G 0x6 /* GRAPH */\n\ -#define O 0x7 /* OBJECT */\n\ -#define TV 0x8 /* TV_ */\n\ -#define YALL (Y(V)|Y(E)|Y(G))\n\ -\n"; - -/*************************/ - -#define BSIZE 512 - -#define K_val 1 -#define K_member 2 - -typedef struct rec record; - -struct rec { - record *next; - char *symbol; - char *name; - char *lex; - char *type; - char *domain; - char *range; - char *data; - int kind; -}; - -static int lineno; -static int tokno; - -static record *newRec(record * curr) -{ - record *newr; - - newr = (record *) malloc(sizeof(record)); - if (!newr) { - fprintf(stderr, "mkdefs: out of memory, line %d\n", lineno); - exit(1); - } - curr->next = newr; - newr->next = 0; - return newr; -} - -static void genGuard(char *filename, char *guard) -{ - char c; - - while ((c = *filename++)) { - if (c == '.') - *guard++ = '_'; - else - *guard++ = toupper(c); - } - *guard = '\0'; -} - -static char *strTok(char *str) -{ - char *tk; - - tokno++; - tk = strtok(str, " \t\n"); - return tk; -} - -int main(int argc, char *argv[]) -{ - char *filename; - char *buf; - char *tk; - record vals; - record *recp = &vals; - FILE *fp; - char guard[100]; - int idx = MINNAME; - int lastval = 0; - int lastmem = 0; - - if (argc != 2) { - fprintf(stderr, "mkdefs: 1 argument necessary\n"); - exit(1); - } - filename = argv[1]; - - vals.next = 0; - buf = malloc(BSIZE); - while (fgets(buf, BSIZE, stdin)) { - lineno++; - tokno = 0; - tk = strTok(buf); - if ((!tk) || (*tk == '#')) - continue; /* comment */ - recp = newRec(recp); - if (*tk == 'V') - recp->kind = K_val; - else if (*tk == 'M') - recp->kind = K_member; - else - recp->kind = 0; - recp->data = buf; - recp->symbol = tk; - recp->name = strTok(0); - recp->lex = strTok(0); - recp->type = strTok(0); - if (recp->kind) { - recp->domain = strTok(0); - recp->range = strTok(0); - } - buf = malloc(BSIZE); - } - - fp = fopen(filename, "w"); - if (!fp) { - fprintf(stderr, "mkdefs: Could not open %s for writing\n", - filename); - exit(1); - } - - genGuard(filename, guard); - fprintf(fp, header, guard, guard); - fputs(prefix, fp); - - for (recp = vals.next; recp; recp = recp->next) { - if (recp->kind == K_val) - lastval = idx; - else if (recp->kind == K_member) - lastmem = idx; - fprintf(fp, "#define\t%s\t% 5d\n", recp->symbol, idx++); - } - idx--; - fprintf(fp, "\n#define LAST_V %d\n", lastval); - fprintf(fp, "#define LAST_M %d\n", lastmem); - fprintf(fp, "#define MINNAME %d\n#define MAXNAME %d\n\n", MINNAME, - idx); - - fprintf(fp, "static Exid_t symbols[] = {\n"); - for (recp = vals.next; recp; recp = recp->next) { - fprintf(fp, "\tEX_ID ( %s, %s, %s, %s, 0),\n", - recp->name, recp->lex, recp->symbol, recp->type); - } - fprintf(fp, "\tEX_ID ( {0}, 0, 0, 0, 0)\n};\n"); - - fprintf(fp, "\nstatic char* typenames[] = {\n"); - for (recp = vals.next; recp; recp = recp->next) { - if (*(recp->symbol) == 'T') - fprintf(fp, "\t%s,\n", recp->name); - } - fprintf(fp, "};\n"); - - fprintf(fp, "\n#ifdef DEBUG\nstatic char* gprnames[] = {\n\t\"\",\n"); - for (recp = vals.next; recp; recp = recp->next) { - fprintf(fp, "\t\"%s\",\n", recp->symbol); - } - fprintf(fp, "};\n#endif\n"); - - fprintf(fp, "\ntypedef unsigned short tctype;\n"); - fprintf(fp, "\nstatic tctype tchk[][2] = {\n\t{ 0, 0 },\n"); - for (recp = vals.next; recp; recp = recp->next) { - if (recp->kind) - fprintf(fp, "\t{ %s, %s },\n", recp->domain, recp->range); - } - fprintf(fp, "};\n"); - - fprintf(fp, "\n#endif\n"); - fclose(fp); - exit(0); -} diff --git a/internal/ccall/gvpr/parse.c b/internal/ccall/gvpr/parse.c deleted file mode 100644 index 969bbb8..0000000 --- a/internal/ccall/gvpr/parse.c +++ /dev/null @@ -1,624 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Top-level parsing of gpr code into blocks - * - */ - -#include -#include -#include -#include -#include -#include -#include - -static int lineno = 1; /* current line number */ -static int col0 = 1; /* true if char ptr is at column 0 */ -static int startLine = 1; /* set to start line of bracketd content */ -static int kwLine = 1; /* set to line of keyword */ - -static char *case_str[] = { - "BEGIN", - "END", - "BEG_G", - "END_G", - "N", - "E", - "EOF", - "ERROR", -}; - -/* caseStr: - * Convert case_t to string. - */ -static char *caseStr(case_t cs) -{ - return case_str[(int) cs]; -} - -/* eol: - * Eat characters until eol. - */ -static int eol (Sfio_t * str, Sfio_t * ostr) -{ - int c; - while ((c = sfgetc(str)) != '\n') { - if (c < 0) - return c; - } - lineno++; - col0 = 1; - if (ostr) - sfputc(ostr, c); - return c; -} - -/* readc: - * return character from input stream - * while keeping track of line number. - * Strip out comments, and return space or newline. - * If a newline is seen in comment and ostr - * is non-null, add newline to ostr. - */ -static int readc(Sfio_t * str, Sfio_t * ostr) -{ - int c; - int cc; - - switch (c = sfgetc(str)) { - case '\n': - lineno++; - col0 = 1; - break; - case '#': - if (col0) { /* shell comment */ - c = eol (str, ostr); - } - else col0 = 0; - break; - case '/': - cc = sfgetc(str); - switch (cc) { - case '*': /* in C comment */ - while (1) { - switch (c = sfgetc(str)) { - case '\n': - lineno++; - if (ostr) - sfputc(ostr, c); - break; - case '*': - switch (cc = sfgetc(str)) { - case -1: - return cc; - break; - case '\n': - lineno++; - if (ostr) - sfputc(ostr, cc); - break; - case '*': - sfungetc(str, cc); - break; - case '/': - col0 = 0; - return ' '; - break; - } - } - } - break; - case '/': /* in C++ comment */ - c = eol (str, ostr); - break; - default: /* not a comment */ - if (cc >= '\0') - sfungetc(str, cc); - break; - } - break; - default: - col0 = 0; - break; - } - return c; -} - -/* unreadc; - * push character back onto stream; - * if newline, reduce lineno. - */ -void unreadc(Sfio_t * str, int c) -{ - sfungetc(str, c); - if (c == '\n') - lineno--; -} - -/* skipWS: - */ -static int skipWS(Sfio_t * str) -{ - int c; - - while (1) { - c = readc(str, 0); - if (!isspace(c)) { - return c; - } - } -} - -/* parseID: - * Put initial alpha in buffer; - * add additional alphas, up to buffer size. - */ -static void parseID(Sfio_t * str, int c, char *buf, size_t bsize) -{ - int more = 1; - char *ptr = buf; - char *eptr = buf + (bsize - 1); - - *ptr++ = c; - while (more) { - c = readc(str, 0); - if (c < 0) - more = 0; - if (isalpha(c) || (c == '_')) { - if (ptr == eptr) - more = 0; - else - *ptr++ = c; - } else { - more = 0; - unreadc(str, c); - } - } - *ptr = '\0'; - -} - -#define BSIZE 8 - -/* parseKind: - * Look for keywords: BEGIN, END, BEG_G, END_G, N, E - * As side-effect, sets kwLine to line of keyword. - */ -static case_t parseKind(Sfio_t * str) -{ - int c; - char buf[BSIZE]; - case_t cs = Error; - - c = skipWS(str); - if (c < 0) - return Eof; - if (!isalpha(c)) { - error(ERROR_ERROR, - "expected keyword BEGIN/END/N/E...; found '%c', line %d", c, - lineno); - return Error; - } - - kwLine = lineno; - parseID(str, c, buf, BSIZE); - switch (c) { - case 'B': - if (strcmp(buf, "BEGIN") == 0) - cs = Begin; - if (strcmp(buf, "BEG_G") == 0) - cs = BeginG; - break; - case 'E': - if (buf[1] == '\0') - cs = Edge; - if (strcmp(buf, "END") == 0) - cs = End; - if (strcmp(buf, "END_G") == 0) - cs = EndG; - break; - case 'N': - if (buf[1] == '\0') - cs = Node; - break; - } - if (cs == Error) - error(ERROR_ERROR, "unexpected keyword \"%s\", line %d", buf, - kwLine); - return cs; -} - -/* endString: - * eat characters from ins, putting them into outs, - * up to and including a terminating character ec - * that is not escaped with a back quote. - */ -static int endString(Sfio_t * ins, Sfio_t * outs, char ec) -{ - int sline = lineno; - int c; - - while ((c = sfgetc(ins)) != ec) { - if (c == '\\') { - sfputc(outs, c); - c = sfgetc(ins); - } - if (c < 0) { - error(ERROR_ERROR, "unclosed string, start line %d", sline); - return c; - } - if (c == '\n') - lineno++; - sfputc(outs, (char) c); - } - sfputc(outs, c); - return 0; -} - -/* endBracket: - * eat characters from ins, putting them into outs, - * up to a terminating character ec. - * Strings are treated as atomic units: any ec in them - * is ignored. Since matching bc-ec pairs might nest, - * the function is called recursively. - */ -static int endBracket(Sfio_t * ins, Sfio_t * outs, char bc, char ec) -{ - int c; - - while (1) { - c = readc(ins, outs); - if ((c < 0) || (c == ec)) - return c; - else if (c == bc) { - sfputc(outs, (char) c); - c = endBracket(ins, outs, bc, ec); - if (c < 0) - return c; - else - sfputc(outs, (char) c); - } else if ((c == '\'') || (c == '"')) { - sfputc(outs, (char) c); - if (endString(ins, outs, c)) return -1; - } else - sfputc(outs, (char) c); - } -} - -/* parseBracket: - * parse paired expression : bc ec - * returning - * As a side-effect, set startLine to beginning of content. - */ -static char *parseBracket(Sfio_t * str, Sfio_t * buf, int bc, int ec) -{ - int c; - - c = skipWS(str); - if (c < 0) - return 0; - if (c != bc) { - unreadc(str, c); - return 0; - } - startLine = lineno; - c = endBracket(str, buf, bc, ec); - if (c < 0) { - if (!getErrorErrors()) - error(ERROR_ERROR, - "unclosed bracket %c%c expression, start line %d", bc, ec, - startLine); - return 0; - } - else - return strdup(sfstruse(buf)); -} - -/* parseAction: - */ -static char *parseAction(Sfio_t * str, Sfio_t * buf) -{ - return parseBracket(str, buf, '{', '}'); -} - -/* parseGuard: - */ -static char *parseGuard(Sfio_t * str, Sfio_t * buf) -{ - return parseBracket(str, buf, '[', ']'); -} - -/* parseCase: - * Recognize - * BEGIN - * END - * BEG_G - * END_G - * N - * E - * where - * guard = '[' ']' - * action = '{' '}' - */ -static case_t -parseCase(Sfio_t * str, char **guard, int *gline, char **action, - int *aline) -{ - case_t kind; - - Sfio_t *buf = sfstropen(); - - kind = parseKind(str); - switch (kind) { - case Begin: - case BeginG: - case End: - case EndG: - *action = parseAction(str, buf); - *aline = startLine; - if (getErrorErrors ()) - kind = Error; - break; - case Edge: - case Node: - *guard = parseGuard(str, buf); - *gline = startLine; - if (!getErrorErrors ()) { - *action = parseAction(str, buf); - *aline = startLine; - } - if (getErrorErrors ()) - kind = Error; - break; - case Eof: - case Error: /* to silence warnings */ - break; - } - - sfstrclose(buf); - return kind; -} - -/* addBlock: - * create new block and append to list; - * return new item as tail - */ -static parse_block *addBlock (parse_block * last, char *stmt, int line, - int n_nstmts, case_info *nodelist, int n_estmts, case_info *edgelist) -{ - parse_block* item = newof(0, parse_block, 1, 0); - - item->l_beging = line; - item->begg_stmt = stmt; - item->n_nstmts = n_nstmts; - item->n_estmts = n_estmts; - item->node_stmts = nodelist; - item->edge_stmts = edgelist; - if (last) - last->next = item; - - return item; -} - -/* addCase: - * create new case_info and append to list; - * return new item as tail - */ -static case_info *addCase(case_info * last, char *guard, int gline, - char *action, int line, int *cnt) -{ - case_info *item; - - if (!guard && !action) { - error(ERROR_WARNING, - "Case with neither guard nor action, line %d - ignored", - kwLine); - return last; - } - - *cnt = (*cnt) + 1; - item = newof(0, case_info, 1, 0); - item->guard = guard; - item->action = action; - item->next = 0; - if (guard) - item->gstart = gline; - if (action) - item->astart = line; - - if (last) - last->next = item; - - return item; -} - -/* bindAction: - * - */ -static void -bindAction(case_t cs, char *action, int aline, char **ap, int *lp) -{ - if (!action) - error(ERROR_WARNING, "%s with no action, line %d - ignored", - caseStr(cs), kwLine); - else if (*ap) - error(ERROR_ERROR, "additional %s section, line %d", caseStr(cs), - kwLine); - else { - *ap = action; - *lp = aline; - } -} - -/* parseProg: - * Parses input into gpr sections. - */ -parse_prog *parseProg(char *input, int isFile) -{ - parse_prog *prog; - Sfio_t *str; - char *mode; - char *guard = NULL; - char *action = NULL; - int more; - parse_block *blocklist = 0; - case_info *edgelist = 0; - case_info *nodelist = 0; - parse_block *blockl = 0; - case_info *edgel = 0; - case_info *nodel = 0; - int n_blocks = 0; - int n_nstmts = 0; - int n_estmts = 0; - int line = 0, gline = 0; - int l_beging = 0; - char *begg_stmt; - - - lineno = col0 = startLine = kwLine = 1; - prog = newof(0, parse_prog, 1, 0); - if (!prog) { - error(ERROR_ERROR, "parseProg: out of memory"); - return 0; - } - - if (isFile) { - mode = "r"; - prog->source = input; - - } else { - mode = "rs"; - prog->source = 0; /* command line */ - } - - str = sfopen(0, input, mode); - if (!str) { - if (isFile) - error(ERROR_ERROR, "could not open %s for reading", input); - else - error(ERROR_ERROR, "parseProg : unable to create sfio stream"); - free (prog); - return 0; - } - - begg_stmt = 0; - more = 1; - while (more) { - switch (parseCase(str, &guard, &gline, &action, &line)) { - case Begin: - bindAction(Begin, action, line, &(prog->begin_stmt), - &(prog->l_begin)); - break; - case BeginG: - if (action && (begg_stmt || nodelist || edgelist)) { /* non-empty block */ - blockl = addBlock(blockl, begg_stmt, l_beging, - n_nstmts, nodelist, n_estmts, edgelist); - if (!blocklist) - blocklist = blockl; - n_blocks++; - - /* reset values */ - n_nstmts = n_estmts = 0; - edgel = nodel = edgelist = nodelist = 0; - begg_stmt = 0; - } - bindAction(BeginG, action, line, &begg_stmt, &l_beging); - break; - case End: - bindAction(End, action, line, &(prog->end_stmt), - &(prog->l_end)); - break; - case EndG: - bindAction(EndG, action, line, &(prog->endg_stmt), - &(prog->l_endg)); - break; - case Eof: - more = 0; - break; - case Node: - nodel = addCase(nodel, guard, gline, action, line, &n_nstmts); - if (!nodelist) - nodelist = nodel; - break; - case Edge: - edgel = addCase(edgel, guard, gline, action, line, &n_estmts); - if (!edgelist) - edgelist = edgel; - break; - case Error: /* to silence warnings */ - more = 0; - break; - } - } - - if (begg_stmt || nodelist || edgelist) { /* non-empty block */ - blockl = addBlock(blockl, begg_stmt, l_beging, - n_nstmts, nodelist, n_estmts, edgelist); - if (!blocklist) - blocklist = blockl; - n_blocks++; - } - - prog->n_blocks = n_blocks; - prog->blocks = blocklist; - - sfclose(str); - - if (getErrorErrors ()) { - freeParseProg (prog); - prog = 0; - } - - return prog; -} - -static void -freeCaseList (case_info* ip) -{ - case_info* nxt; - while (ip) { - nxt = ip->next; - free (ip->guard); - free (ip->action); - free (ip); - ip = nxt; - } -} - -static void -freeBlocks (parse_block* ip) -{ - parse_block* nxt; - while (ip) { - nxt = ip->next; - free (ip->begg_stmt); - freeCaseList (ip->node_stmts); - freeCaseList (ip->edge_stmts); - ip = nxt; - } -} - -void -freeParseProg (parse_prog * prog) -{ - if (!prog) return; - free (prog->begin_stmt); - freeBlocks (prog->blocks); - free (prog->endg_stmt); - free (prog->end_stmt); - free (prog); -} - diff --git a/internal/ccall/gvpr/parse.h b/internal/ccall/gvpr/parse.h deleted file mode 100644 index e3077b0..0000000 --- a/internal/ccall/gvpr/parse.h +++ /dev/null @@ -1,59 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef PARSE_H -#define PARSE_H - - typedef enum { Begin = - 0, End, BeginG, EndG, Node, Edge, Eof, Error } case_t; - - typedef struct _case_info { - int gstart; - char *guard; - int astart; - char *action; - struct _case_info *next; - } case_info; - - typedef struct _parse_block { - int l_beging; - char *begg_stmt; - int n_nstmts; - int n_estmts; - case_info *node_stmts; - case_info *edge_stmts; - struct _parse_block *next; - } parse_block; - - typedef struct { - char *source; - int l_begin, l_end, l_endg; - char *begin_stmt; - int n_blocks; - parse_block *blocks; - char *endg_stmt; - char *end_stmt; - } parse_prog; - - extern parse_prog *parseProg(char *, int); - extern void freeParseProg (parse_prog *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/queue.c b/internal/ccall/gvpr/queue.c deleted file mode 100644 index 33db387..0000000 --- a/internal/ccall/gvpr/queue.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Queue implementation using cdt - * - */ - -#include -#include - -typedef struct { - Dtlink_t link; - void *np; -} nsitem; - -static void *makef(Dt_t * d, nsitem * obj, Dtdisc_t * disc) -{ - nsitem *p; - - p = oldof(0, nsitem, 1, 0); - p->np = obj->np; - return p; -} - -static void freef(Dt_t * d, nsitem * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static Dtdisc_t ndisc = { - offsetof(nsitem, np), - sizeof(void *), - offsetof(nsitem, link), - (Dtmake_f) makef, - (Dtfree_f) freef, - 0, - 0, - 0, - 0 -}; - -queue *mkQ(Dtmethod_t * meth) -{ - queue *nq; - - nq = dtopen(&ndisc, meth); - return nq; -} - -void push(queue * nq, void *n) -{ - nsitem obj; - - obj.np = n; - dtinsert(nq, &obj); -} - -void *pop(queue * nq, int delete) -{ - nsitem *obj; - void *n; - - obj = dtfirst(nq); - if (obj) { - n = obj->np; - if (delete) - dtdelete(nq, 0); - return n; - } else - return 0; -} - -void freeQ(queue * nq) -{ - dtclose(nq); -} diff --git a/internal/ccall/gvpr/queue.h b/internal/ccall/gvpr/queue.h deleted file mode 100644 index 5d21367..0000000 --- a/internal/ccall/gvpr/queue.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef QUEUE_H -#define QUEUE_H - -#include "cgraph.h" - - typedef Dt_t queue; - - extern queue *mkQ(Dtmethod_t *); - extern void push(queue *, void *); - extern void *pop(queue *, int remove); - extern void freeQ(queue *); - -/* pseudo-functions: -extern queue* mkStack(); -extern queue* mkQueue(); -extern void* pull(queue*); -extern void* head(queue*); - */ - -#define mkStack() mkQ(Dtstack) -#define mkQueue() mkQ(Dtqueue) -#define pull(q) (pop(q,1)) -#define head(q) (pop(q,0)) - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/gvpr/trie.c b/internal/ccall/gvpr/trie.c deleted file mode 100644 index aff27b2..0000000 --- a/internal/ccall/gvpr/trie.c +++ /dev/null @@ -1,136 +0,0 @@ -#define UNDERLINE - -#include "trieFA.h" - -TrieState TrieStateTbl[70] = { - { -1, 0, 0x3b8620 }, - { -1, 9, 0x440 }, - { -1, 11, 0x100 }, - { -1, 12, 0x80000 }, - { -1, 13, 0x40 }, - { -1, 14, 0x40 }, - { Y(V), 15, 0x0 }, - { -1, 15, 0x80000 }, - { -1, 16, 0x40 }, - { -1, 17, 0x10 }, - { -1, 18, 0x200000 }, - { -1, 19, 0x40 }, - { -1, 20, 0x20 }, - { Y(G), 21, 0x0 }, - { -1, 21, 0x40 }, - { -1, 22, 0x4 }, - { -1, 23, 0x20 }, - { Y(E), 24, 0x0 }, - { -1, 24, 0x8000 }, - { -1, 25, 0x20 }, - { -1, 26, 0x40 }, - { -1, 27, 0x100 }, - { -1, 28, 0x80000 }, - { -1, 29, 0x40 }, - { -1, 30, 0x40 }, - { Y(V), 31, 0x0 }, - { -1, 31, 0x5 }, - { -1, 33, 0x8040 }, - { -1, 35, 0x20 }, - { -1, 36, 0x100 }, - { -1, 37, 0x40 }, - { -1, 38, 0x100000 }, - { Y(G), 39, 0x0 }, - { -1, 39, 0x10000 }, - { -1, 40, 0x20 }, - { -1, 41, 0x40 }, - { -1, 42, 0x100000 }, - { Y(G), 43, 0x0 }, - { -1, 43, 0x4000 }, - { -1, 44, 0x40 }, - { YALL, 45, 0x0 }, - { -1, 45, 0x400000 }, - { -1, 46, 0x200000 }, - { -1, 47, 0x20 }, - { -1, 48, 0x40 }, - { -1, 49, 0x100 }, - { -1, 50, 0x80000 }, - { -1, 51, 0x40 }, - { -1, 52, 0x40 }, - { Y(V), 53, 0x0 }, - { -1, 53, 0x4 }, - { -1, 54, 0x80000 }, - { -1, 55, 0x40 }, - { -1, 56, 0x8000 }, - { -1, 57, 0x200000 }, - { Y(G), 58, 0x0 }, - { -1, 58, 0x10000 }, - { -1, 59, 0x10000 }, - { -1, 60, 0x200000 }, - { YALL, 61, 0x0 }, - { -1, 61, 0x200000 }, - { -1, 62, 0x80000 }, - { -1, 63, 0x400 }, - { -1, 64, 0x10 }, - { -1, 65, 0x200000 }, - { Y(G), 66, 0x0 }, - { -1, 66, 0x4 }, - { -1, 67, 0x400 }, - { -1, 68, 0x2000 }, - { Y(E), 69, 0x0 }, -}; -TrieTrans TrieTransTbl[69] = { - /* State 0 */ { 'd', 1 }, { 'h', 14 }, { 'i', 18 }, { 'n', 26 }, { 'o', 41 }, { 'p', 50 }, { 'r', 56 }, { 's', 60 }, { 't', 66 }, - /* State 1 */ { 'e', 2 }, { 'i', 7 }, - /* State 2 */ { 'g', 3 }, - /* State 3 */ { 'r', 4 }, - /* State 4 */ { 'e', 5 }, - /* State 5 */ { 'e', 6 }, - /* State 7 */ { 'r', 8 }, - /* State 8 */ { 'e', 9 }, - /* State 9 */ { 'c', 10 }, - /* State 10 */ { 't', 11 }, - /* State 11 */ { 'e', 12 }, - /* State 12 */ { 'd', 13 }, - /* State 14 */ { 'e', 15 }, - /* State 15 */ { 'a', 16 }, - /* State 16 */ { 'd', 17 }, - /* State 18 */ { 'n', 19 }, - /* State 19 */ { 'd', 20 }, - /* State 20 */ { 'e', 21 }, - /* State 21 */ { 'g', 22 }, - /* State 22 */ { 'r', 23 }, - /* State 23 */ { 'e', 24 }, - /* State 24 */ { 'e', 25 }, - /* State 26 */ { '_', 27 }, { 'a', 38 }, - /* State 27 */ { 'e', 28 }, { 'n', 33 }, - /* State 28 */ { 'd', 29 }, - /* State 29 */ { 'g', 30 }, - /* State 30 */ { 'e', 31 }, - /* State 31 */ { 's', 32 }, - /* State 33 */ { 'o', 34 }, - /* State 34 */ { 'd', 35 }, - /* State 35 */ { 'e', 36 }, - /* State 36 */ { 's', 37 }, - /* State 38 */ { 'm', 39 }, - /* State 39 */ { 'e', 40 }, - /* State 41 */ { 'u', 42 }, - /* State 42 */ { 't', 43 }, - /* State 43 */ { 'd', 44 }, - /* State 44 */ { 'e', 45 }, - /* State 45 */ { 'g', 46 }, - /* State 46 */ { 'r', 47 }, - /* State 47 */ { 'e', 48 }, - /* State 48 */ { 'e', 49 }, - /* State 50 */ { 'a', 51 }, - /* State 51 */ { 'r', 52 }, - /* State 52 */ { 'e', 53 }, - /* State 53 */ { 'n', 54 }, - /* State 54 */ { 't', 55 }, - /* State 56 */ { 'o', 57 }, - /* State 57 */ { 'o', 58 }, - /* State 58 */ { 't', 59 }, - /* State 60 */ { 't', 61 }, - /* State 61 */ { 'r', 62 }, - /* State 62 */ { 'i', 63 }, - /* State 63 */ { 'c', 64 }, - /* State 64 */ { 't', 65 }, - /* State 66 */ { 'a', 67 }, - /* State 67 */ { 'i', 68 }, - /* State 68 */ { 'l', 69 }, -}; diff --git a/internal/ccall/gvpr/trieFA.h b/internal/ccall/gvpr/trieFA.h deleted file mode 100644 index 6369e4a..0000000 --- a/internal/ccall/gvpr/trieFA.h +++ /dev/null @@ -1,87 +0,0 @@ -/* File - trieFA.h - * - * This file contains code to be included in the scanner file using a - * generated trie-based FA. - */ - -typedef struct { /* An entry in the FA state table */ - short def; /* If this state is an accepting state then*/ - /* this is the definition, otherwise -1. */ - short trans_base; /* The base index into the transition table.*/ - long mask; /* The transition mask. */ -}TrieState ; - -typedef struct { /* An entry in the FA transition table. */ - short c; /* The transition character (lowercase).*/ - short next_state; /* The next state. */ -}TrieTrans ; - -#ifdef UNDERLINE -static long CharMask[28] = { - 0x0000001, 0x0000000, 0x0000004, 0x0000008, - 0x0000010, 0x0000020, 0x0000040, 0x0000080, - 0x0000100, 0x0000200, 0x0000400, 0x0000800, - 0x0001000, 0x0002000, 0x0004000, 0x0008000, - 0x0010000, 0x0020000, 0x0040000, 0x0080000, - 0x0100000, 0x0200000, 0x0400000, 0x0800000, - 0x1000000, 0x2000000, 0x4000000, 0x8000000, -}; - -#define IN_MASK_RANGE(C) (islower(C) || ((C) == '_')) -#define MASK_INDEX(C) ((C) - '_') - -#else -static long CharMask[26] = { - 0x0000001, 0x0000002, 0x0000004, 0x0000008, - 0x0000010, 0x0000020, 0x0000040, 0x0000080, - 0x0000100, 0x0000200, 0x0000400, 0x0000800, - 0x0001000, 0x0002000, 0x0004000, 0x0008000, - 0x0010000, 0x0020000, 0x0040000, 0x0080000, - 0x0100000, 0x0200000, 0x0400000, 0x0800000, - 0x1000000, 0x2000000 -}; - -#define IN_MASK_RANGE(C) islower(C) -#define MASK_INDEX(C) ((C) - 'a') - -#endif - -static short TFA_State; - -/* TFA_Init: - * - * Initialize the trie FA. - */ -#define TFA_Init() TFA_State = 0 - -/* TFA_Advance: - * - * Advance to the next state (or -1) on the lowercase letter c. - */ -#define TFA_Advance(C) { \ - char c = C; \ - if (TFA_State >= 0) { \ - if (isupper(c)) \ - c = tolower(c); \ - else if (! IN_MASK_RANGE(c)) { \ - TFA_State = -1; \ - goto TFA_done; \ - } \ - if (TrieStateTbl[TFA_State].mask & CharMask[MASK_INDEX(c)]) { \ - short i = TrieStateTbl[TFA_State].trans_base; \ - while (TrieTransTbl[i].c != c) \ - i++; \ - TFA_State = TrieTransTbl[i].next_state; \ - } \ - else \ - TFA_State = -1; \ - } \ - TFA_done:; \ -} /* end of TFA_Advance. */ - -/* TFA_Definition: - * - * Return the definition (if any) associated with the current state. - */ -#define TFA_Definition() \ - ((TFA_State < 0) ? -1 : TrieStateTbl[TFA_State].def) diff --git a/internal/ccall/ingraphs/dummy.go b/internal/ccall/ingraphs/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/ingraphs/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/ingraphs/ingraphs.c b/internal/ccall/ingraphs/ingraphs.c deleted file mode 100644 index 7f0c6fb..0000000 --- a/internal/ccall/ingraphs/ingraphs.c +++ /dev/null @@ -1,218 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Written by Emden Gansner - */ - -#include -#include - -#define FREE_STATE 1 - -typedef struct { - char *dummy; -} Agraph_t; - -extern void agsetfile(char *); - -#include "ingraphs.h" - -/* nextFile: - * Set next available file. - * If Files is NULL, we just read from stdin. - */ -static void nextFile(ingraph_state * sp) -{ - void *rv = NULL; - char *fname; - - if (sp->u.Files == NULL) { - if (sp->ctr++ == 0) { - rv = sp->fns->dflt; - } - } else { - while ((fname = sp->u.Files[sp->ctr++])) { - if (*fname == '-') { - rv = sp->fns->dflt; - break; - } else if ((rv = sp->fns->openf(fname)) != 0) - break; - else { - fprintf(stderr, "Can't open %s\n", sp->u.Files[sp->ctr - 1]); - sp->errors++; - } - } - } - if (rv) - agsetfile(fileName(sp)); - sp->fp = rv; -} - -/* nextGraph: - * Read and return next graph; return NULL if done. - * Read graph from currently open file. If none, open next file. - */ -Agraph_t *nextGraph(ingraph_state * sp) -{ - Agraph_t *g; - - if (sp->ingraphs) { - g = (Agraph_t*)(sp->u.Graphs[sp->ctr]); - if (g) sp->ctr++; - return g; - } - if (sp->fp == NULL) - nextFile(sp); - g = NULL; - - while (sp->fp != NULL) { - if ((g = sp->fns->readf(sp->fp)) != 0) - break; - if (sp->u.Files) /* Only close if not using stdin */ - sp->fns->closef(sp->fp); - nextFile(sp); - } - return g; -} - -/* new_ing: - * Create new ingraph state. If sp is non-NULL, we - * assume user is supplying memory. - */ -static ingraph_state* -new_ing(ingraph_state * sp, char **files, Agraph_t** graphs, ingdisc * disc) -{ - if (!sp) { - sp = (ingraph_state *) malloc(sizeof(ingraph_state)); - if (!sp) { - fprintf(stderr, "ingraphs: out of memory\n"); - return 0; - } - sp->heap = 1; - } else - sp->heap = 0; - if (graphs) { - sp->ingraphs = 1; - sp->u.Graphs = graphs; - } - else { - sp->ingraphs = 0; - sp->u.Files = files; - } - sp->ctr = 0; - sp->errors = 0; - sp->fp = NULL; - sp->fns = (ingdisc *) malloc(sizeof(ingdisc)); - if (!sp->fns) { - fprintf(stderr, "ingraphs: out of memory\n"); - if (sp->heap) - free(sp); - return 0; - } - if (!disc->openf || !disc->readf || !disc->closef || !disc->dflt) { - free(sp->fns); - if (sp->heap) - free(sp); - fprintf(stderr, "ingraphs: NULL field in ingdisc argument\n"); - return 0; - } - *sp->fns = *disc; - return sp; -} - -ingraph_state* -newIng(ingraph_state * sp, char **files, ingdisc * disc) -{ - return new_ing(sp, files, 0, disc); -} - -/* newIngGraphs: - * Create new ingraph state using supplied graphs. If sp is non-NULL, we - * assume user is supplying memory. - */ -ingraph_state* -newIngGraphs(ingraph_state * sp , Agraph_t** graphs, ingdisc *disc) -{ - return new_ing(sp, 0, graphs, disc); -} - -static void *dflt_open(char *f) -{ - return fopen(f, "r"); -} - -static int dflt_close(void *fp) -{ - return fclose((FILE *) fp); -} - -typedef Agraph_t *(*xopengfn) (void *); - -static ingdisc dflt_disc = { dflt_open, 0, dflt_close, 0 }; - -/* newIngraph: - * At present, we require opf to be non-NULL. In - * theory, we could assume a function agread(FILE*,void*) - */ -ingraph_state *newIngraph(ingraph_state * sp, char **files, opengfn opf) -{ - if (!dflt_disc.dflt) - dflt_disc.dflt = stdin; - if (opf) - dflt_disc.readf = (xopengfn) opf; - else { - fprintf(stderr, "ingraphs: NULL graph reader\n"); - return 0; - } - return newIng(sp, files, &dflt_disc); -} - -/* closeIngraph: - * Close any open files and free discipline - * Free sp if necessary. - */ -void closeIngraph(ingraph_state * sp) -{ - if (!sp->ingraphs && sp->u.Files && sp->fp) - sp->fns->closef(sp->fp); - free(sp->fns); - if (sp->heap) - free(sp); -} - -/* fileName: - * Return name of current file being processed. - */ -char *fileName(ingraph_state * sp) -{ - char *fname; - - if (sp->ingraphs) { - return "<>"; - } - else if (sp->u.Files) { - if (sp->ctr) { - fname = sp->u.Files[sp->ctr - 1]; - if (*fname == '-') - return ""; - else - return fname; - } else - return "<>"; - } else - return ""; -} - -#include "config.h" diff --git a/internal/ccall/ingraphs/ingraphs.h b/internal/ccall/ingraphs/ingraphs.h deleted file mode 100644 index e27af85..0000000 --- a/internal/ccall/ingraphs/ingraphs.h +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef INGRAPHS_H -#define INGRAPHS_H - -/* The ingraphs library works with both libagraph and with - * libgraph, with all user-supplied data. For this to work, - * the include file relies upon its context to supply a - * definition of Agraph_t. - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - typedef Agraph_t *(*opengfn) (FILE *); - - typedef struct { - void *(*openf) (char *); - Agraph_t *(*readf) (void *); - int (*closef) (void *); - void *dflt; - } ingdisc; - - typedef struct { - union { - char** Files; - Agraph_t** Graphs; - } u; - int ctr; - int ingraphs; - void *fp; - ingdisc *fns; - char heap; - int errors; - } ingraph_state; - - extern ingraph_state *newIngraph(ingraph_state *, char **, opengfn); - extern ingraph_state *newIng(ingraph_state *, char **, ingdisc *); - extern ingraph_state *newIngGraphs(ingraph_state *, Agraph_t**, ingdisc *); - extern void closeIngraph(ingraph_state * sp); - extern Agraph_t *nextGraph(ingraph_state *); - extern char *fileName(ingraph_state *); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/label.c b/internal/ccall/label.c deleted file mode 100644 index 521bd31..0000000 --- a/internal/ccall/label.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "label/index.c" -#include "label/node.c" -#include "label/rectangle.c" -#include "label/split.q.c" -#include "label/xlabels.c" diff --git a/internal/ccall/label/dummy.go b/internal/ccall/label/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/label/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/label/index.c b/internal/ccall/label/index.c deleted file mode 100644 index 27c8498..0000000 --- a/internal/ccall/label/index.c +++ /dev/null @@ -1,481 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -#include "index.h" -#include -#include -#include "logic.h" -#include "memory.h" - -LeafList_t *RTreeNewLeafList(Leaf_t * lp) -{ - LeafList_t *llp; - - if ((llp = NEW(LeafList_t))) { - llp->leaf = lp; - llp->next = 0; - } - return llp; -} - -LeafList_t *RTreeLeafListAdd(LeafList_t * llp, Leaf_t * lp) -{ - LeafList_t *nlp; - if (!lp) - return llp; - - nlp = RTreeNewLeafList(lp); - nlp->next = llp; - return nlp; -} - -void RTreeLeafListFree(LeafList_t * llp) -{ - LeafList_t *tlp; - while (llp->next) { - tlp = llp->next; - free(llp); - llp = tlp; - } - free(llp); - return; -} - -/* Allocate space for a node in the list used in DeletRect to - * store Nodes that are too empty. - */ -static struct ListNode *RTreeNewListNode(void) -{ - return NEW(struct ListNode); -} - -#if UNUSED -static void RTreeFreeListNode(struct ListNode *p) -{ - free(p); -} -#endif - -/* Add a node to the reinsertion list. All its branches will later - * be reinserted into the index structure. - */ -static int RTreeReInsert(RTree_t * rtp, Node_t * n, struct ListNode **ee) -{ - register struct ListNode *l; - - if (!(l = RTreeNewListNode())) - return -1; - l->node = n; - l->next = *ee; - *ee = l; - return 0; -} - -RTree_t *RTreeOpen() -{ - RTree_t *rtp; - - if ((rtp = NEW(RTree_t))) - rtp->root = RTreeNewIndex(rtp); - return rtp; -} - -/* Make a new index, empty. Consists of a single node. */ -Node_t *RTreeNewIndex(RTree_t * rtp) -{ - Node_t *x; - x = RTreeNewNode(rtp); - x->level = 0; /* leaf */ - rtp->LeafCount++; - return x; -} - -static int RTreeClose2(RTree_t * rtp, Node_t * n) -{ - int i; - - if (n->level > 0) { - for (i = 0; i < NODECARD; i++) { - if (!n->branch[i].child) - continue; - if (!RTreeClose2(rtp, n->branch[i].child)) { - free(n->branch[i].child); - DisconBranch(n, i); - rtp->EntryCount--; - if (rtp->StatFlag) - rtp->ElimCount++; - } - } - } else { - for (i = 0; i < NODECARD; i++) { - if (!n->branch[i].child) - continue; - // free(n->branch[i].child); - DisconBranch(n, i); - rtp->EntryCount--; - if (rtp->StatFlag) - rtp->ElimCount++; - } - //free(n); - } - return 0; -} - - -int RTreeClose(RTree_t * rtp) -{ - RTreeClose2(rtp, rtp->root); - free(rtp->root); - free(rtp); - return 0; -} - -#ifdef RTDEBUG -/* Print out all the nodes in an index. -** Prints from root downward. -*/ -void PrintIndex(Node_t * n) -{ - int i; - Node_t *nn; - assert(n); - assert(n->level >= 0); - - if (n->level > 0) { - for (i = 0; i < NODECARD; i++) { - if ((nn = n->branch[i].child) != NULL) - PrintIndex(nn); - } - } - - PrintNode(n); -} - -/* Print out all the data rectangles in an index. -*/ -void PrintData(Node_t * n) -{ - int i; - Node_t *nn; - assert(n); - assert(n->level >= 0); - - if (n->level == 0) - PrintNode(n); - else { - for (i = 0; i < NODECARD; i++) { - if ((nn = n->branch[i].child) != NULL) - PrintData(nn); - } - } -} -#endif - -/* RTreeSearch in an index tree or subtree for all data retangles that -** overlap the argument rectangle. -** Returns the number of qualifying data rects. -*/ -LeafList_t *RTreeSearch(RTree_t * rtp, Node_t * n, Rect_t * r) -{ - register int i; - LeafList_t *llp = 0; - - assert(n); - assert(n->level >= 0); - assert(r); - - rtp->SeTouchCount++; - - if (n->level > 0) { /* this is an internal node in the tree */ - for (i = 0; i < NODECARD; i++) - if (n->branch[i].child && Overlap(r, &n->branch[i].rect)) { - LeafList_t *tlp = RTreeSearch(rtp, n->branch[i].child, r); - if (llp) { - LeafList_t *xlp = llp; - while (xlp->next) - xlp = xlp->next; - xlp->next = tlp; - } else - llp = tlp; - } - } else { /* this is a leaf node */ - for (i = 0; i < NODECARD; i++) { - if (n->branch[i].child && Overlap(r, &n->branch[i].rect)) { - llp = RTreeLeafListAdd(llp, (Leaf_t *) & n->branch[i]); -# ifdef RTDEBUG - PrintRect(&n->branch[i].rect); -# endif - } - } - } - return llp; -} - -/* Insert a data rectangle into an index structure. -** RTreeInsert provides for splitting the root; -** returns 1 if root was split, 0 if it was not. -** The level argument specifies the number of steps up from the leaf -** level to insert; e.g. a data rectangle goes in at level = 0. -** RTreeInsert2 does the recursion. -*/ -static int RTreeInsert2(RTree_t *, Rect_t *, void *, Node_t *, Node_t **, - int); -/*static int RTreeInsert2(RTree_t*, Rect_t*, int, Node_t*, Node_t**, int); */ - -int -RTreeInsert(RTree_t * rtp, Rect_t * r, void *data, Node_t ** n, int level) -{ - /* RTreeInsert(RTree_t*rtp, Rect_t*r, int data, Node_t**n, int level) { */ - register int i; - register Node_t *newroot; - Node_t *newnode=0; - Branch_t b; - int result = 0; - - - assert(r && n); - assert(level >= 0 && level <= (*n)->level); - for (i = 0; i < NUMDIMS; i++) - assert(r->boundary[i] <= r->boundary[NUMDIMS + i]); - -# ifdef RTDEBUG - fprintf(stderr, "RTreeInsert level=%d\n", level); -# endif - - if (rtp->StatFlag) { - if (rtp->Deleting) - rtp->ReInsertCount++; - else - rtp->InsertCount++; - } - if (!rtp->Deleting) - rtp->RectCount++; - - if (RTreeInsert2(rtp, r, data, *n, &newnode, level)) { /* root was split */ - if (rtp->StatFlag) { - if (rtp->Deleting) - rtp->DeTouchCount++; - else - rtp->InTouchCount++; - } - - newroot = RTreeNewNode(rtp); /* grow a new root, make tree taller */ - rtp->NonLeafCount++; - newroot->level = (*n)->level + 1; - b.rect = NodeCover(*n); - b.child = *n; - AddBranch(rtp, &b, newroot, NULL); - b.rect = NodeCover(newnode); - b.child = newnode; - AddBranch(rtp, &b, newroot, NULL); - *n = newroot; - // rtp->root = newroot; - rtp->EntryCount += 2; - result = 1; - } - - return result; -} - -/* Inserts a new data rectangle into the index structure. -** Recursively descends tree, propagates splits back up. -** Returns 0 if node was not split. Old node updated. -** If node was split, returns 1 and sets the pointer pointed to by -** new to point to the new node. Old node updated to become one of two. -** The level argument specifies the number of steps up from the leaf -** level to insert; e.g. a data rectangle goes in at level = 0. -*/ -static int -RTreeInsert2(RTree_t * rtp, Rect_t * r, void *data, - Node_t * n, Node_t ** new, int level) -{ - /*static int */ - /* RTreeInsert2(RTree_t*rtp, Rect_t*r, - int data, Node_t*n, Node_t**new, int level) { - */ - register int i=0; - Branch_t b; - Node_t *n2=0; - - assert(r && n && new); - assert(level >= 0 && level <= n->level); - - if (rtp->StatFlag) { - if (rtp->Deleting) - rtp->DeTouchCount++; - else - rtp->InTouchCount++; - } - - /* Still above level for insertion, go down tree recursively */ - if (n->level > level) { - i = PickBranch(r, n); - if (!RTreeInsert2(rtp, r, data, n->branch[i].child, &n2, level)) { /* recurse: child was not split */ - n->branch[i].rect = CombineRect(r, &(n->branch[i].rect)); - return 0; - } else { /* child was split */ - n->branch[i].rect = NodeCover(n->branch[i].child); - b.child = n2; - b.rect = NodeCover(n2); - rtp->EntryCount++; - return AddBranch(rtp, &b, n, new); - } - } else if (n->level == level) { /* at level for insertion. */ - /*Add rect, split if necessary */ - b.rect = *r; - b.child = (Node_t *) data; - rtp->EntryCount++; - return AddBranch(rtp, &b, n, new); - } else { /* Not supposed to happen */ - assert(FALSE); - return 0; - } -} - -static void FreeListNode(register struct ListNode *p) -{ - free(p); -} - -/* Delete a data rectangle from an index structure. -** Pass in a pointer to a Rect, the data of the record, ptr to ptr to root node. -** Returns 1 if record not found, 0 if success. -** RTreeDelete provides for eliminating the root. -*/ -static int RTreeDelete2(RTree_t *, Rect_t *, void *, Node_t *, - ListNode_t **); -/* static int RTreeDelete2(RTree_t*, Rect_t*, int, Node_t*, ListNode_t**); */ - -int RTreeDelete(RTree_t * rtp, Rect_t * r, void *data, Node_t ** nn) -{ - /* int */ - /* RTreeDelete(RTree_t*rtp, Rect_t*r, int data, Node_t**nn) { */ - register int i; - register Node_t *t; - struct ListNode *reInsertList = NULL; - register struct ListNode *e; - - assert(r && nn); - assert(*nn); - assert(data); - - rtp->Deleting = TRUE; - -# ifdef RTDEBUG - fprintf(stderr, "RTreeDelete\n"); -# endif - - if (!RTreeDelete2(rtp, r, data, *nn, &reInsertList)) { - /* found and deleted a data item */ - if (rtp->StatFlag) - rtp->DeleteCount++; - rtp->RectCount--; - - /* reinsert any branches from eliminated nodes */ - while (reInsertList) { - t = reInsertList->node; - for (i = 0; i < NODECARD; i++) { - if (t->branch[i].child) { - RTreeInsert(rtp, &(t->branch[i].rect), - /* (int)t->branch[i].child, nn, t->level); */ - t->branch[i].child, nn, t->level); - rtp->EntryCount--; - } - } - e = reInsertList; - reInsertList = reInsertList->next; - RTreeFreeNode(rtp, e->node); - FreeListNode(e); - } - - /* check for redundant root (not leaf, 1 child) and eliminate */ - if ((*nn)->count == 1 && (*nn)->level > 0) { - if (rtp->StatFlag) - rtp->ElimCount++; - rtp->EntryCount--; - for (i = 0; i < NODECARD; i++) { - if ((t = (*nn)->branch[i].child)) - break; - } - RTreeFreeNode(rtp, *nn); - *nn = t; - } - rtp->Deleting = FALSE; - return 0; - } else { - rtp->Deleting = FALSE; - return 1; - } -} - -/* Delete a rectangle from non-root part of an index structure. -** Called by RTreeDelete. Descends tree recursively, -** merges branches on the way back up. -*/ -static int -RTreeDelete2(RTree_t * rtp, Rect_t * r, void *data, Node_t * n, - ListNode_t ** ee) -/* static int */ -/* RTreeDelete2(RTree_t*rtp, Rect_t*r, int data, Node_t*n, ListNode_t**ee) */ -{ - register int i; - - assert(r && n && ee); - assert(data >= 0); - assert(n->level >= 0); - - if (rtp->StatFlag) - rtp->DeTouchCount++; - - if (n->level > 0) { /* not a leaf node */ - for (i = 0; i < NODECARD; i++) { - if (n->branch[i].child && Overlap(r, &(n->branch[i].rect))) { - if (!RTreeDelete2(rtp, r, data, n->branch[i].child, ee)) { /*recurse */ - if (n->branch[i].child->count >= rtp->MinFill) - n->branch[i].rect = NodeCover(n->branch[i].child); - else { /* not enough entries in child, eliminate child node */ - RTreeReInsert(rtp, n->branch[i].child, ee); - DisconBranch(n, i); - rtp->EntryCount--; - if (rtp->StatFlag) - rtp->ElimCount++; - } - return 0; - } - } - } - return 1; - } else { /* a leaf node */ - for (i = 0; i < NODECARD; i++) { - if (n->branch[i].child - && n->branch[i].child == (Node_t *) data) { - DisconBranch(n, i); - rtp->EntryCount--; - return 0; - } - } - return 1; - } -} - -#ifdef UNUSED -/* Allocate space for a node in the list used in DeletRect to -** store Nodes that are too empty. -*/ -struct ListNode *NewListNode() -{ - return (struct ListNode *) NEW(sizeof(struct ListNode)); -} - -#endif diff --git a/internal/ccall/label/index.h b/internal/ccall/label/index.h deleted file mode 100644 index 472d2e0..0000000 --- a/internal/ccall/label/index.h +++ /dev/null @@ -1,136 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef INDEX_H -#define INDEX_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * this library is derived from an archived home directory of Antonin Guttman - * that implemented the ideas described in - * "R-trees: a dynamic index structure for spatial searching" - * Antonin Guttman, University of California, Berkeley - * SIGMOD '84 Proceedings of the 1984 ACM SIGMOD international conference on Management of data - * ISBN:0-89791-128-8 - * http://dx.doi.org/10.1145/602259.602266 - * this copy of the code was retrieved from - * http://web.archive.org/web/20030210112132/http://www.es.ucsc.edu/~tonig/rtrees/ - * we are using the quadratic node splitter only - * we made a few cosmetic changes to fit our needs - * per Antonin there is no copyright - */ - -/* %W% %G% */ -/*----------------------------------------------------------------------------- -| Global definitions. ------------------------------------------------------------------------------*/ - -#ifndef NUMDIMS -#define NUMDIMS 2 -#endif /*NUMDIMS*/ -/* #define NDEBUG */ -#define NUMSIDES 2*NUMDIMS -/* branching factor of a node */ -/* #define NODECARD (int)((PGSIZE-(2*sizeof(int)))/sizeof(struct Branch))*/ -#define NODECARD 64 -typedef struct RTree RTree_t; - -#include -#include -#include - -#define CX(i) (i) -#define NX(i) (i+NUMDIMS) -#define CY(i) (i+1) -#define NY(i) (i+1+NUMDIMS) - -typedef struct Leaf { - Rect_t rect; - void *data; -} Leaf_t; - -typedef struct LeafList { - struct LeafList *next; - Leaf_t *leaf; -} LeafList_t; - -#ifndef METHODS -#define METHODS 1 -#endif /*METHODS*/ - struct RTree { - Node_t *root; - - SplitQ_t split; - - /* balance criterion for node splitting */ - int MinFill; - - /* times */ - long ElapsedTime; - float UserTime, SystemTime; - - int Deleting; - - /* variables for statistics */ - int StatFlag; /* tells if we are counting or not */ - /* counters affected only when StatFlag set */ - int InsertCount; - int DeleteCount; - int ReInsertCount; - int InSplitCount; - int DeSplitCount; - int ElimCount; - int EvalCount; - int InTouchCount; - int DeTouchCount; - int SeTouchCount; - int CallCount; - float SplitMeritSum; - - /* counters used even when StatFlag not set */ - int RectCount; - int NodeCount; - int LeafCount, NonLeafCount; - int EntryCount; - int SearchCount; - int HitCount; - -}; - -typedef struct ListNode { - struct ListNode *next; - struct Node *node; -} ListNode_t; - -RTree_t *RTreeOpen(void); -int RTreeClose(RTree_t * rtp); -Node_t *RTreeNewIndex(RTree_t * rtp); -LeafList_t *RTreeSearch(RTree_t *, Node_t *, Rect_t *); -int RTreeInsert(RTree_t *, Rect_t *, void *, Node_t **, int); -int RTreeDelete(RTree_t *, Rect_t *, void *, Node_t **); - -LeafList_t *RTreeNewLeafList(Leaf_t * lp); -LeafList_t *RTreeLeafListAdd(LeafList_t * llp, Leaf_t * lp); -void RTreeLeafListFree(LeafList_t * llp); - -#ifdef RTDEBUG -void PrintNode(Node_t *); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /*INDEX_H */ diff --git a/internal/ccall/label/node.c b/internal/ccall/label/node.c deleted file mode 100644 index 0285ca0..0000000 --- a/internal/ccall/label/node.c +++ /dev/null @@ -1,206 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include - -#include "index.h" -#include -#include -#include "node.h" - -/* Make a new node and initialize to have all branch cells empty. -*/ -Node_t *RTreeNewNode(RTree_t * rtp) -{ - register Node_t *n; - - rtp->NodeCount++; - n = (Node_t *) malloc(sizeof(Node_t)); - InitNode(n); - return n; -} - -void RTreeFreeNode(RTree_t * rtp, Node_t * p) -{ - rtp->NodeCount--; - if (p->level == 0) - rtp->LeafCount--; - else - rtp->NonLeafCount--; - free(p); -} - -/* Initialize a Node structure. -*/ -void InitNode(Node_t * n) -{ - register int i; - n->count = 0; - n->level = -1; - for (i = 0; i < NODECARD; i++) - InitBranch(&(n->branch[i])); -} - -/* Initialize one branch cell in a node. -*/ -void InitBranch(Branch_t * b) -{ - InitRect(&(b->rect)); - b->child = NULL; -} - -#ifdef RTDEBUG -/* Print out the data in a node. -*/ -void PrintNode(Node_t * n) -{ - int i; - assert(n); - - fprintf(stderr, "node"); - if (n->level == 0) - fprintf(stderr, " LEAF"); - else if (n->level > 0) - fprintf(stderr, " NONLEAF"); - else - fprintf(stderr, " TYPE=?"); - fprintf(stderr, " level=%d count=%d child address=%X\n", - n->level, n->count, (unsigned int) n); - - for (i = 0; i < NODECARD; i++) { - if (n->branch[i].child != NULL) - PrintBranch(i, &n->branch[i]); - } -} - -void PrintBranch(int i, Branch_t * b) -{ - fprintf(stderr, " child[%d] X%X\n", i, (unsigned int) b->child); - PrintRect(&(b->rect)); -} -#endif - -/* Find the smallest rectangle that includes all rectangles in -** branches of a node. -*/ -Rect_t NodeCover(Node_t * n) -{ - register int i, flag; - Rect_t r; - assert(n); - - InitRect(&r); - flag = 1; - for (i = 0; i < NODECARD; i++) - if (n->branch[i].child) { - if (flag) { - r = n->branch[i].rect; - flag = 0; - } else - r = CombineRect(&r, &(n->branch[i].rect)); - } - return r; -} - -/* Pick a branch. Pick the one that will need the smallest increase -** in area to accomodate the new rectangle. This will result in the -** least total area for the covering rectangles in the current node. -** In case of a tie, pick the one which was smaller before, to get -** the best resolution when searching. -*/ -int PickBranch(Rect_t * r, Node_t * n) -{ - register Rect_t *rr=0; - register int i=0, flag=1, increase=0, bestIncr=0, area=0, bestArea=0; - int best=0; - assert(r && n); - - for (i = 0; i < NODECARD; i++) { - if (n->branch[i].child) { - Rect_t rect; - rr = &n->branch[i].rect; - area = RectArea(rr); - /* increase = RectArea(&CombineRect(r, rr)) - area; */ - rect = CombineRect(r, rr); - increase = RectArea(&rect) - area; - if (increase < bestIncr || flag) { - best = i; - bestArea = area; - bestIncr = increase; - flag = 0; - } else if (increase == bestIncr && area < bestArea) { - best = i; - bestArea = area; - bestIncr = increase; - } -# ifdef RTDEBUG - fprintf(stderr, - "i=%d area before=%d area after=%d increase=%d\n", - i, area, area + increase, increase); -# endif - } - } -# ifdef RTDEBUG - fprintf(stderr, "\tpicked %d\n", best); -# endif - return best; -} - -/* Add a branch to a node. Split the node if necessary. -** Returns 0 if node not split. Old node updated. -** Returns 1 if node split, sets *new to address of new node. -** Old node updated, becomes one of two. -*/ -int AddBranch(RTree_t * rtp, Branch_t * b, Node_t * n, Node_t ** new) -{ - register int i; - - assert(b); - assert(n); - - if (n->count < NODECARD) { /* split won't be necessary */ - for (i = 0; i < NODECARD; i++) { /* find empty branch */ - if (n->branch[i].child == NULL) { - n->branch[i] = *b; - n->count++; - break; - } - } - assert(i < NODECARD); - return 0; - } else { - if (rtp->StatFlag) { - if (rtp->Deleting) - rtp->DeTouchCount++; - else - rtp->InTouchCount++; - } - assert(new); - SplitNode(rtp, n, b, new); - if (n->level == 0) - rtp->LeafCount++; - else - rtp->NonLeafCount++; - return 1; - } -} - -/* Disconnect a dependent node. -*/ -void DisconBranch(Node_t * n, int i) -{ - assert(n && i >= 0 && i < NODECARD); - assert(n->branch[i].child); - - InitBranch(&(n->branch[i])); - n->count--; -} diff --git a/internal/ccall/label/node.h b/internal/ccall/label/node.h deleted file mode 100644 index e6c76f4..0000000 --- a/internal/ccall/label/node.h +++ /dev/null @@ -1,51 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef NODE_H -#define NODE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct Branch { - Rect_t rect; - struct Node *child; -} Branch_t; - -typedef struct Node { - int count; - int level; /* 0 is leaf, others positive */ - struct Branch branch[NODECARD]; -} Node_t; - -void RTreeFreeNode(RTree_t *, Node_t *); -void InitNode(Node_t *); -void InitBranch(Branch_t *); -Rect_t NodeCover(Node_t *); -int PickBranch(Rect_t *, Node_t *); -int AddBranch(RTree_t *, Branch_t *, Node_t *, Node_t **); -void DisconBranch(Node_t *, int); -void PrintBranch(int, Branch_t *); -Node_t *RTreeNewNode(RTree_t *); -#ifdef RTDEBUG -void PrintNode(Node_t * n); -void PrintBranch(int i, Branch_t * b); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /*NODE_H */ diff --git a/internal/ccall/label/nrtmain.c b/internal/ccall/label/nrtmain.c deleted file mode 100644 index 40f43ab..0000000 --- a/internal/ccall/label/nrtmain.c +++ /dev/null @@ -1,330 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include - -#include -#include -#include "xlabels.h" - -#if 0 -#define POINTS_PER_INCH 72 -#define N_NEW(n,t) (t*)calloc((n),sizeof(t)) -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define MAX(a,b) ((a)>(b)?(a):(b)) -#define INT_MAX ((int)(~(unsigned)0 >> 1)) -#define INCH2PS(a_inches) ((a_inches)*(double)POINTS_PER_INCH) -#endif - -static char *progname; -static int Verbose; -extern pointf edgeMidpoint(graph_t * g, edge_t * e); - -static inline pointf pointfof(double x, double y) -{ - pointf r; - - r.x = x; - r.y = y; - return r; -} - -typedef struct { - GVC_t *gvc; - char *infname; - char *outfname; - FILE *inf; - FILE *outf; - char *lay; - char *fmt; - int force; -} opts_t; - -static pointf centerPt(xlabel_t * xlp) -{ - pointf p; - - p = xlp->pos; - p.x += (xlp->sz.x) / 2.0; - p.y += (xlp->sz.y) / 2.0; - - return p; -} - -static int -printData(object_t * objs, int n_objs, xlabel_t * lbls, int n_lbls, - label_params_t * params) -{ - int i; - fprintf(stderr, - "%d objs %d xlabels force=%d bb=(%.02f,%.02f) (%.02f,%.02f)\n", - n_objs, n_lbls, params->force, params->bb.LL.x, - params->bb.LL.y, params->bb.UR.x, params->bb.UR.y); - if (Verbose < 2) - return 0; - fprintf(stderr, "objects\n"); - for (i = 0; i < n_objs; i++) { - if(objs[i].lbl && objs[i].lbl->lbl) - fprintf (stderr, " [%d] %p %p (%.02f, %.02f) (%.02f, %.02f) %s\n", - i, &objs[i], objs[i].lbl, objs[i].pos.x,objs[i].pos.y, - objs[i].sz.x,objs[i].sz.y, - ((textlabel_t*)objs[i].lbl->lbl)->text ); - else - fprintf (stderr, " [%d] %p %p (%.02f, %.02f) (%.02f, %.02f)\n", - i, &objs[i], objs[i].lbl, objs[i].pos.x,objs[i].pos.y, - objs[i].sz.x,objs[i].sz.y); - } - fprintf(stderr, "xlabels\n"); - for (i = 0; i < n_lbls; i++) { - fprintf(stderr, " [%d] %p (%.02f, %.02f) (%.02f, %.02f) %s\n", - i, &lbls[i], lbls[i].pos.x, lbls[i].pos.y, - lbls[i].sz.x, lbls[i].sz.y, - ((textlabel_t *)lbls[i].lbl)->text); - } - return 0; -} - -int doxlabel(opts_t * opts) -{ - Agraph_t *gp; - object_t *objs; - xlabel_t *lbls; - int i, n_objs, n_lbls; - label_params_t params; - Agnode_t *np; - Agedge_t *ep; - int n_nlbls = 0, n_elbls = 0; - boxf bb; - textlabel_t *lp; - object_t *objp; - xlabel_t *xlp; - pointf ur; - - fprintf(stderr, "reading %s\n", opts->infname); - if (!(gp = agread(opts->inf))) { - fprintf(stderr, "%s: %s not a dot file\n", progname, - opts->infname); - exit(1); - } - fclose(opts->inf); - - fprintf(stderr, "laying out %s\n", opts->lay); - if (gvLayout(opts->gvc, gp, opts->lay)) { - fprintf(stderr, "%s: layout %s failed\n", progname, opts->lay); - exit(1); - } - - fprintf(stderr, "attach labels\n"); - /* In the real code, this should be optimized using GD_has_labels() */ - /* We could probably provide the number of node and edge xlabels */ - for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) { - if (ND_xlabel(np)) - n_nlbls++; - for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) { - if (ED_xlabel(ep)) - n_elbls++; - } - } - n_objs = agnnodes(gp) + n_elbls; - n_lbls = n_nlbls + n_elbls; - objp = objs = N_NEW(n_objs, object_t); - xlp = lbls = N_NEW(n_lbls, xlabel_t); - bb.LL = pointfof(INT_MAX, INT_MAX); - bb.UR = pointfof(-INT_MAX, -INT_MAX); - - for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) { - /* Add an obstacle per node */ - objp->sz.x = INCH2PS(ND_width(np)); - objp->sz.y = INCH2PS(ND_height(np)); - objp->pos = ND_coord(np); - objp->pos.x -= (objp->sz.x) / 2.0; - objp->pos.y -= (objp->sz.y) / 2.0; - - /* Adjust bounding box */ - bb.LL.x = MIN(bb.LL.x, objp->pos.x); - bb.LL.y = MIN(bb.LL.y, objp->pos.y); - ur.x = objp->pos.x + objp->sz.x; - ur.y = objp->pos.y + objp->sz.y; - bb.UR.x = MAX(bb.UR.x, ur.x); - bb.UR.y = MAX(bb.UR.y, ur.y); - - if (ND_xlabel(np)) { - xlp->sz = ND_xlabel(np)->dimen; - xlp->lbl = ND_xlabel(np); - xlp->set = 0; - objp->lbl = xlp; - xlp++; - } - objp++; - for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) { - if (ED_label(ep)) { - textlabel_t *lp = ED_label(ep); - lp->pos.x = lp->pos.y = 0.0; - } - if (!ED_xlabel(ep)) - continue; - objp->sz.x = 0; - objp->sz.y = 0; - objp->pos = edgeMidpoint(gp, ep); - - xlp->sz = ED_xlabel(ep)->dimen; - xlp->lbl = ED_xlabel(ep); - xlp->set = 0; - objp->lbl = xlp; - xlp++; - objp++; - } - } - - params.force = opts->force; - params.bb = bb; - if (Verbose) - printData(objs, n_objs, lbls, n_lbls, ¶ms); - placeLabels(objs, n_objs, lbls, n_lbls, ¶ms); - - fprintf(stderr, "read label positions\n"); - xlp = lbls; - for (i = 0; i < n_lbls; i++) { - if (xlp->set) { - lp = (textlabel_t *) (xlp->lbl); - lp->set = 1; - lp->pos = centerPt(xlp); - } - xlp++; - } - free(objs); - free(lbls); - - fprintf(stderr, "writing %s\n", opts->outfname); - gvRender(opts->gvc, gp, opts->fmt, opts->outf); - - /* clean up */ - fprintf(stderr, "cleaning up\n"); - gvFreeLayout(opts->gvc, gp); - agclose(gp); - return 0; -} - -int checkOpt(char *l, char *legal[], int n) -{ - int i; - for (i = 0; i < n; i++) { - if (strcmp(l, legal[i]) == 0) - return 1; - } - return 0; -} - -void usage(char *pp) -{ - fprintf(stderr, - "Usage: %s [-fv] [-V$level] [-T$fmt] [-l$layout] [-o$outfile] dotfile\n", - pp); - return; -} - -static FILE *openFile(char *name, char *mode) -{ - FILE *fp; - char *modestr; - - fp = fopen(name, mode); - if (!fp) { - if (*mode == 'r') - modestr = "reading"; - else - modestr = "writing"; - fprintf(stderr, "%s: could not open file %s for %s -- %s\n", - progname, name, modestr, strerror(errno)); - exit(1); - } - return (fp); -} - -static void init(int argc, char *argv[], opts_t * opts) -{ - int c, cnt; - char **optList; - opts->outf = stdout; - opts->outfname = "stdout"; - - progname = argv[0]; - opts->gvc = gvContext(); - opts->lay = "dot"; - opts->fmt = "ps"; - opts->force = 0; - - while ((c = getopt(argc, argv, "o:vFl:T:V:")) != EOF) { - switch (c) { - case 'F': - opts->force = 1; - break; - case 'l': - optList = gvPluginList(opts->gvc, "layout", &cnt, NULL); - if (checkOpt(optarg, optList, cnt)) - opts->lay = optarg; - else { - fprintf(stderr, "%s: unknown layout %s\n", progname, - optarg); - exit(1); - } - break; - case 'T': - optList = gvPluginList(opts->gvc, "device", &cnt, NULL); - if (checkOpt(optarg, optList, cnt)) - opts->fmt = optarg; - else { - fprintf(stderr, "%s: unknown format %s\n", progname, - optarg); - exit(1); - } - break; - case 'v': - Verbose = 1; - break; - case 'V': - Verbose = atoi(optarg); - break; - case 'o': - opts->outf = openFile(optarg, "w"); - opts->outfname = optarg; - break; - default: - usage(progname); - exit(1); - } - } - - if (optind < argc) { - opts->inf = openFile(argv[optind], "r"); - opts->infname = argv[optind]; - } else { - opts->inf = stdin; - opts->infname = ""; - } - - if (!opts->outf) { - opts->outf = stdout; - opts->outfname = ""; - } -} - -int main(int argc, char *argv[]) -{ - opts_t opts; - - init(argc, argv, &opts); - doxlabel(&opts); - return 0; -} diff --git a/internal/ccall/label/rectangle.c b/internal/ccall/label/rectangle.c deleted file mode 100644 index 8d7e3e3..0000000 --- a/internal/ccall/label/rectangle.c +++ /dev/null @@ -1,249 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "index.h" -#include -#include -#include -#include "logic.h" -#include "arith.h" -#include "rectangle.h" -#include - -#define Undefined(x) ((x)->boundary[0] > (x)->boundary[NUMDIMS]) - -extern Rect_t CoverAll; - -/*----------------------------------------------------------------------------- -| Initialize a rectangle to have all 0 coordinates. ------------------------------------------------------------------------------*/ -void InitRect(Rect_t * r) -{ - register int i; - for (i = 0; i < NUMSIDES; i++) - r->boundary[i] = 0; -} - -/*----------------------------------------------------------------------------- -| Return a rect whose first low side is higher than its opposite side - -| interpreted as an undefined rect. ------------------------------------------------------------------------------*/ -Rect_t NullRect() -{ - Rect_t r; - register int i; - - r.boundary[0] = 1; - r.boundary[NUMDIMS] = -1; - for (i = 1; i < NUMDIMS; i++) - r.boundary[i] = r.boundary[i + NUMDIMS] = 0; - return r; -} - -#ifdef UNUSED -/*----------------------------------------------------------------------------- -| Fills in random coordinates in a rectangle. -| The low side is guaranteed to be less than the high side. ------------------------------------------------------------------------------*/ -RandomRect(Rect_t * r) -{ - register int i, width; - for (i = 0; i < NUMDIMS; i++) { - /* width from 1 to 1000 / 4, more small ones */ - width = rand() % (1000 / 4) + 1; - - /* sprinkle a given size evenly but so they stay in [0,100] */ - r->boundary[i] = rand() % (1000 - width); /* low side */ - r->boundary[i + NUMDIMS] = r->boundary[i] + width; /* high side */ - } -} - -/*----------------------------------------------------------------------------- -| Fill in the boundaries for a random search rectangle. -| Pass in a pointer to a rect that contains all the data, -| and a pointer to the rect to be filled in. -| Generated rect is centered randomly anywhere in the data area, -| and has size from 0 to the size of the data area in each dimension, -| i.e. search rect can stick out beyond data area. ------------------------------------------------------------------------------*/ -SearchRect(Rect_t * search, Rect_t * data) -{ - register int i, j, size, center; - - assert(search); - assert(data); - - for (i = 0; i < NUMDIMS; i++) { - j = i + NUMDIMS; /* index for high side boundary */ - if (data->boundary[i] > INT_MIN && data->boundary[j] < INT_MAX) { - size = - (rand() % (data->boundary[j] - data->boundary[i] + 1)) / 2; - center = data->boundary[i] - + rand() % (data->boundary[j] - data->boundary[i] + 1); - search->boundary[i] = center - size / 2; - search->boundary[j] = center + size / 2; - } else { /* some open boundary, search entire dimension */ - search->boundary[i] = INT_MIN; - search->boundary[j] = INT_MAX; - } - } -} -#endif - -#ifdef RTDEBUG -/*----------------------------------------------------------------------------- -| Print rectangle lower upper bounds by dimension ------------------------------------------------------------------------------*/ -void PrintRect(Rect_t * r) -{ - register int i; - assert(r); - fprintf(stderr, "rect:"); - for (i = 0; i < NUMDIMS; i++) - fprintf(stderr, "\t%d\t%d\n", r->boundary[i], - r->boundary[i + NUMDIMS]); -} -#endif - -/*----------------------------------------------------------------------------- -| Calculate the n-dimensional area of a rectangle ------------------------------------------------------------------------------*/ - -#if SIZEOF_LONG_LONG > SIZEOF_INT -unsigned int RectArea(Rect_t * r) -{ - register int i; - unsigned int area; - assert(r); - - if (Undefined(r)) - return 0; - - /* - * XXX add overflow checks - */ - area = 1; - for (i = 0; i < NUMDIMS; i++) { - long long a_test = area * r->boundary[i + NUMDIMS] - r->boundary[i]; - if( a_test > UINT_MAX) { - agerr (AGERR, "label: area too large for rtree\n"); - return UINT_MAX; - } - area = a_test; - } - return area; -} -#else -unsigned int RectArea(Rect_t * r) -{ - register int i; - unsigned int area=1, a=1; - assert(r); - - if (Undefined(r)) return 0; - - /* - * XXX add overflow checks - */ - area = 1; - for (i = 0; i < NUMDIMS; i++) { - unsigned int b = r->boundary[i + NUMDIMS] - r->boundary[i]; - a *= b; - if( (a / b ) != area) { - agerr (AGERR, "label: area too large for rtree\n"); - return UINT_MAX; - } - area = a; - } - return area; -} -#endif /*SIZEOF_LONG_LONG > SIZEOF_INT*/ -#if 0 /*original code*/ -int RectArea(Rect_t * r) -{ - register int i, area=1; - assert(r); - - if (Undefined(r)) - return 0; - area = 1; - for (i = 0; i < NUMDIMS; i++) { - area *= r->boundary[i + NUMDIMS] - r->boundary[i]; - } - return area; -} -#endif - -/*----------------------------------------------------------------------------- -| Combine two rectangles, make one that includes both. ------------------------------------------------------------------------------*/ -Rect_t CombineRect(Rect_t * r, Rect_t * rr) -{ - register int i, j; - Rect_t new; - assert(r && rr); - - if (Undefined(r)) - return *rr; - if (Undefined(rr)) - return *r; - - for (i = 0; i < NUMDIMS; i++) { - new.boundary[i] = MIN(r->boundary[i], rr->boundary[i]); - j = i + NUMDIMS; - new.boundary[j] = MAX(r->boundary[j], rr->boundary[j]); - } - return new; -} - -/*----------------------------------------------------------------------------- -| Decide whether two rectangles overlap. ------------------------------------------------------------------------------*/ -int Overlap(Rect_t * r, Rect_t * s) -{ - register int i, j; - assert(r && s); - - for (i = 0; i < NUMDIMS; i++) { - j = i + NUMDIMS; /* index for high sides */ - if (r->boundary[i] > s->boundary[j] - || s->boundary[i] > r->boundary[j]) - return FALSE; - } - return TRUE; -} - -/*----------------------------------------------------------------------------- -| Decide whether rectangle r is contained in rectangle s. ------------------------------------------------------------------------------*/ -int Contained(Rect_t * r, Rect_t * s) -{ - register int i, j, result; - assert(r && s); - - /* undefined rect is contained in any other */ - if (Undefined(r)) - return TRUE; - /* no rect (except an undefined one) is contained in an undef rect */ - if (Undefined(s)) - return FALSE; - - result = TRUE; - for (i = 0; i < NUMDIMS; i++) { - j = i + NUMDIMS; /* index for high sides */ - result = result && r->boundary[i] >= s->boundary[i] - && r->boundary[j] <= s->boundary[j]; - } - return result; -} diff --git a/internal/ccall/label/rectangle.h b/internal/ccall/label/rectangle.h deleted file mode 100644 index dbda16f..0000000 --- a/internal/ccall/label/rectangle.h +++ /dev/null @@ -1,38 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef RECTANGLE_H -#define RECTANGLE_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Rect { - int boundary[NUMSIDES]; -} Rect_t; - -void InitRect(Rect_t * r); -#ifdef RTDEBUG -void PrintRect(Rect_t *); -#endif -unsigned int RectArea(Rect_t *); -int Overlap(Rect_t *, Rect_t *); -int Contained(Rect_t *, Rect_t *); -Rect_t CombineRect(Rect_t *, Rect_t *); -Rect_t NullRect(void); - -#ifdef __cplusplus -} -#endif - -#endif /*RECTANGLE_H */ diff --git a/internal/ccall/label/split.q.c b/internal/ccall/label/split.q.c deleted file mode 100644 index 8e93bd3..0000000 --- a/internal/ccall/label/split.q.c +++ /dev/null @@ -1,377 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "index.h" -#include -#include -#include "split.q.h" -#include "logic.h" - -/* Forward declarations */ -static void MethodZero(RTree_t * rtp); -static void InitPVars(RTree_t * rtp); -static void LoadNodes(RTree_t * rtp, Node_t * n, Node_t * q, - struct PartitionVars *p); -static void Classify(RTree_t * rtp, int i, int group); -static void PickSeeds(RTree_t * rtp); -static void GetBranches(RTree_t * rtp, Node_t * n, Branch_t * b); - -/*----------------------------------------------------------------------------- -| Split a node. -| Divides the nodes branches and the extra one between two nodes. -| Old node is one of the new ones, and one really new one is created. -| Tries more than one method for choosing a partition, uses best result. ------------------------------------------------------------------------------*/ -void SplitNode(RTree_t * rtp, Node_t * n, Branch_t * b, Node_t ** nn) -{ - register struct PartitionVars *p; - register int level; - int area; - - assert(n); - assert(b); - -#ifdef RTDEBUG - fprintf(stderr, "Splitting:\n"); - PrintNode(n); - fprintf(stderr, "new branch:\n"); - PrintBranch(-1, b); -#endif - - if (rtp->StatFlag) { - if (rtp->Deleting) - rtp->DeSplitCount++; - else - rtp->InSplitCount++; - } - - /* load all the branches into a buffer, initialize old node */ - level = n->level; - GetBranches(rtp, n, b); - -#ifdef RTDEBUG - { - int i; - /* Indicate that a split is about to take place */ - for (i = 0; i < NODECARD + 1; i++) { - PrintRect(&rtp->split.BranchBuf[i].rect); - } - PrintRect(&rtp->split.CoverSplit); - } -#endif - - /* find partition */ - p = &rtp->split.Partitions[0]; - MethodZero(rtp); - - area = RectArea(&p->cover[0]) + RectArea(&p->cover[1]); - - /* record how good the split was for statistics */ - if (rtp->StatFlag && !rtp->Deleting && area) - rtp->SplitMeritSum += (float) rtp->split.CoverSplitArea / area; - - /* put branches from buffer into 2 nodes according to chosen partition */ - *nn = RTreeNewNode(rtp); - (*nn)->level = n->level = level; - LoadNodes(rtp, n, *nn, p); - assert(n->count + (*nn)->count == NODECARD + 1); - -#ifdef RTDEBUG - PrintPVars(p); - fprintf(stderr, "group 0:\n"); - PrintNode(n); - fprintf(stderr, "group 1:\n"); - PrintNode(*nn); - fprintf(stderr, "\n"); -#endif - -} - -/*----------------------------------------------------------------------------- -| Load branch buffer with branches from full node plus the extra branch. ------------------------------------------------------------------------------*/ -static void GetBranches(RTree_t * rtp, Node_t * n, Branch_t * b) -{ - register int i; - - assert(n); - assert(b); - - /* load the branch buffer */ - for (i = 0; i < NODECARD; i++) { - assert(n->branch[i].child); /* node should have every entry full */ - rtp->split.BranchBuf[i] = n->branch[i]; - } - rtp->split.BranchBuf[NODECARD] = *b; - - /* calculate rect containing all in the set */ - rtp->split.CoverSplit = rtp->split.BranchBuf[0].rect; - for (i = 1; i < NODECARD + 1; i++) { - rtp->split.CoverSplit = CombineRect(&rtp->split.CoverSplit, - &rtp->split.BranchBuf[i].rect); - } - rtp->split.CoverSplitArea = RectArea(&rtp->split.CoverSplit); - - InitNode(n); -} - -/*----------------------------------------------------------------------------- -| Method #0 for choosing a partition: -| As the seeds for the two groups, pick the two rects that would waste the -| most area if covered by a single rectangle, i.e. evidently the worst pair -| to have in the same group. -| Of the remaining, one at a time is chosen to be put in one of the two groups. -| The one chosen is the one with the greatest difference in area expansion -| depending on which group - the rect most strongly attracted to one group -| and repelled from the other. -| If one group gets too full (more would force other group to violate min -| fill requirement) then other group gets the rest. -| These last are the ones that can go in either group most easily. ------------------------------------------------------------------------------*/ -static void MethodZero(RTree_t * rtp) -{ - register Rect_t *r; - register int i, growth0, growth1, diff, biggestDiff; - register int group, chosen = 0, betterGroup = 0; - - InitPVars(rtp); - PickSeeds(rtp); - - while (rtp->split.Partitions[0].count[0] + - rtp->split.Partitions[0].count[1] < NODECARD + 1 && - rtp->split.Partitions[0].count[0] < NODECARD + 1 - rtp->MinFill - && rtp->split.Partitions[0].count[1] < - NODECARD + 1 - rtp->MinFill) { - biggestDiff = -1; - for (i = 0; i < NODECARD + 1; i++) { - if (!rtp->split.Partitions[0].taken[i]) { - Rect_t rect; - r = &rtp->split.BranchBuf[i].rect; - /* growth0 = RectArea(&CombineRect(r, - &rtp->split.Partitions[0].cover[0])) - - rtp->split.Partitions[0].area[0]; - */ - /* growth1 = RectArea(&CombineRect(r, - &rtp->split.Partitions[0].cover[1])) - - rtp->split.Partitions[0].area[1]; - */ - rect = CombineRect(r, &rtp->split.Partitions[0].cover[0]); - growth0 = - RectArea(&rect) - rtp->split.Partitions[0].area[0]; - rect = CombineRect(r, &rtp->split.Partitions[0].cover[1]); - growth1 = - RectArea(&rect) - rtp->split.Partitions[0].area[1]; - diff = growth1 - growth0; - if (diff >= 0) - group = 0; - else { - group = 1; - diff = -diff; - } - - if (diff > biggestDiff) { - biggestDiff = diff; - chosen = i; - betterGroup = group; - } else if (diff == biggestDiff && - rtp->split.Partitions[0].count[group] < - rtp->split.Partitions[0].count[betterGroup]) { - chosen = i; - betterGroup = group; - } - } - } - Classify(rtp, chosen, betterGroup); - } - - /* if one group too full, put remaining rects in the other */ - if (rtp->split.Partitions[0].count[0] + - rtp->split.Partitions[0].count[1] < NODECARD + 1) { - group = 0; - if (rtp->split.Partitions[0].count[0] >= - NODECARD + 1 - rtp->MinFill) - group = 1; - for (i = 0; i < NODECARD + 1; i++) { - if (!rtp->split.Partitions[0].taken[i]) - Classify(rtp, i, group); - } - } - - assert(rtp->split.Partitions[0].count[0] + - rtp->split.Partitions[0].count[1] == NODECARD + 1); - assert(rtp->split.Partitions[0].count[0] >= rtp->MinFill - && rtp->split.Partitions[0].count[1] >= rtp->MinFill); -} - -/*----------------------------------------------------------------------------- -| Pick two rects from set to be the first elements of the two groups. -| Pick the two that waste the most area if covered by a single rectangle. ------------------------------------------------------------------------------*/ -static void PickSeeds(RTree_t * rtp) -{ - register int i, j; - unsigned int waste, worst; - int seed0 = 0, seed1 = 0; - unsigned int area[NODECARD + 1]; - - for (i = 0; i < NODECARD + 1; i++) - area[i] = RectArea(&rtp->split.BranchBuf[i].rect); - - //worst = -rtp->split.CoverSplitArea - 1; - worst=0; - for (i = 0; i < NODECARD; i++) { - for (j = i + 1; j < NODECARD + 1; j++) { - Rect_t rect; - /* waste = RectArea(&CombineRect(&rtp->split.BranchBuf[i].rect, - // &rtp->split.BranchBuf[j].rect)) - area[i] - area[j]; - */ - rect = CombineRect(&rtp->split.BranchBuf[i].rect, - &rtp->split.BranchBuf[j].rect); - waste = RectArea(&rect) - area[i] - area[j]; - if (waste > worst) { - worst = waste; - seed0 = i; - seed1 = j; - } - } - } - Classify(rtp, seed0, 0); - Classify(rtp, seed1, 1); -} - -/*----------------------------------------------------------------------------- -| Put a branch in one of the groups. ------------------------------------------------------------------------------*/ -static void Classify(RTree_t * rtp, int i, int group) -{ - - assert(!rtp->split.Partitions[0].taken[i]); - - rtp->split.Partitions[0].partition[i] = group; - rtp->split.Partitions[0].taken[i] = TRUE; - - if (rtp->split.Partitions[0].count[group] == 0) - rtp->split.Partitions[0].cover[group] = - rtp->split.BranchBuf[i].rect; - else - rtp->split.Partitions[0].cover[group] = - CombineRect(&rtp->split.BranchBuf[i].rect, - &rtp->split.Partitions[0].cover[group]); - rtp->split.Partitions[0].area[group] = - RectArea(&rtp->split.Partitions[0].cover[group]); - rtp->split.Partitions[0].count[group]++; - -# ifdef RTDEBUG - { - /* redraw entire group and its cover */ - int j; - MFBSetColor(WHITE); /* cover is white */ - PrintRect(&rtp->split.Partitions[0].cover[group]); - MFBSetColor(group + 3); /* group 0 green, group 1 blue */ - for (j = 0; j < NODECARD + 1; j++) { - if (rtp->split.Partitions[0].taken[j] && - rtp->split.Partitions[0].partition[j] == group) - PrintRect(&rtrtp->split.Partitions[0].BranchBuf[j].rect); - } - GraphChar(); - } -# endif -} - -/*----------------------------------------------------------------------------- -| Copy branches from the buffer into two nodes according to the partition. ------------------------------------------------------------------------------*/ -static void LoadNodes(RTree_t * rtp, Node_t * n, Node_t * q, - struct PartitionVars *p) -{ - register int i; - assert(n); - assert(q); - assert(p); - - for (i = 0; i < NODECARD + 1; i++) { - assert(rtp->split.Partitions[0].partition[i] == 0 || - rtp->split.Partitions[0].partition[i] == 1); - if (rtp->split.Partitions[0].partition[i] == 0) - AddBranch(rtp, &rtp->split.BranchBuf[i], n, NULL); - else if (rtp->split.Partitions[0].partition[i] == 1) - AddBranch(rtp, &rtp->split.BranchBuf[i], q, NULL); - } -} - -/*----------------------------------------------------------------------------- -| Initialize a PartitionVars structure. ------------------------------------------------------------------------------*/ -static void InitPVars(RTree_t * rtp) -{ - register int i; - - rtp->split.Partitions[0].count[0] = rtp->split.Partitions[0].count[1] = - 0; - rtp->split.Partitions[0].cover[0] = rtp->split.Partitions[0].cover[1] = - NullRect(); - rtp->split.Partitions[0].area[0] = rtp->split.Partitions[0].area[1] = - 0; - for (i = 0; i < NODECARD + 1; i++) { - rtp->split.Partitions[0].taken[i] = FALSE; - rtp->split.Partitions[0].partition[i] = -1; - } -} - -#ifdef RTDEBUG - -/*----------------------------------------------------------------------------- -| Print out data for a partition from PartitionVars struct. ------------------------------------------------------------------------------*/ -PrintPVars(RTree_t * rtp) -{ - register int i; - - fprintf(stderr, "\npartition:\n"); - for (i = 0; i < NODECARD + 1; i++) { - fprintf(stderr, "%3d\t", i); - } - fprintf(stderr, "\n"); - for (i = 0; i < NODECARD + 1; i++) { - if (rtp->split.Partitions[0].taken[i]) - fprintf(stderr, " t\t"); - else - fprintf(stderr, "\t"); - } - fprintf(stderr, "\n"); - for (i = 0; i < NODECARD + 1; i++) { - fprintf(stderr, "%3d\t", rtp->split.Partitions[0].partition[i]); - } - fprintf(stderr, "\n"); - - fprintf(stderr, "count[0] = %d area = %d\n", - rtp->split.Partitions[0].count[0], - rtp->split.Partitions[0].area[0]); - fprintf(stderr, "count[1] = %d area = %d\n", - rtp->split.Partitions[0].count[1], - rtp->split.Partitions[0].area[1]); - if (rtp->split.Partitions[0].area[0] + - rtp->split.Partitions[0].area[1] > 0) { - fprintf(stderr, "total area = %d effectiveness = %3.2f\n", - rtp->split.Partitions[0].area[0] + - rtp->split.Partitions[0].area[1], - (float) rtp->split.CoverSplitArea / - (rtp->split.Partitions[0].area[0] + - rtp->split.Partitions[0].area[1])); - } - fprintf(stderr, "cover[0]:\n"); - PrintRect(&rtp->split.Partitions[0].cover[0]); - - fprintf(stderr, "cover[1]:\n"); - PrintRect(&rtp->split.Partitions[0].cover[1]); -} -#endif diff --git a/internal/ccall/label/split.q.h b/internal/ccall/label/split.q.h deleted file mode 100644 index 7279bb7..0000000 --- a/internal/ccall/label/split.q.h +++ /dev/null @@ -1,51 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef SPLIT_Q_H -#define SPLIT_Q_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------------------------- -| Definitions and global variables. ------------------------------------------------------------------------------*/ -#include -#include - -#ifndef METHODS -#define METHODS 1 -#endif /*METHODS*/ -/* variables for finding a partition */ - struct PartitionVars { - int partition[NODECARD + 1]; - int taken[NODECARD + 1]; - int count[2]; - struct Rect cover[2]; - int area[2]; -}; - -typedef struct split_q_s { - struct Branch BranchBuf[NODECARD + 1]; - struct Rect CoverSplit; - unsigned int CoverSplitArea; - struct PartitionVars Partitions[METHODS]; -} SplitQ_t; - -void SplitNode(RTree_t *, Node_t *, Branch_t *, Node_t **); - -#ifdef __cplusplus -} -#endif - -#endif /*SPLIT_Q_H */ diff --git a/internal/ccall/label/xlabels.c b/internal/ccall/label/xlabels.c deleted file mode 100644 index 26146b9..0000000 --- a/internal/ccall/label/xlabels.c +++ /dev/null @@ -1,694 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#define XLABEL_INT -#include -#include - -extern int Verbose; - -static int icompare(Dt_t *, void *, void *, Dtdisc_t *); - -Dtdisc_t Hdisc = { offsetof(HDict_t, key), sizeof(int), -1, 0, 0, - icompare, 0, 0, 0 -}; - -static int icompare(Dt_t * dt, void * v1, void * v2, Dtdisc_t * disc) -{ - int k1 = *((int *) v1), k2 = *((int *) v2); - return k1 - k2; -} - -static XLabels_t *xlnew(object_t * objs, int n_objs, - xlabel_t * lbls, int n_lbls, - label_params_t * params) -{ - XLabels_t *xlp; - - xlp = NEW(XLabels_t); - - /* used to load the rtree in hilbert space filling curve order */ - if (!(xlp->hdx = dtopen(&Hdisc, Dtobag))) { - fprintf(stderr, "out of memory\n"); - goto bad; - } - - /* for querying intersection candidates */ - if (!(xlp->spdx = RTreeOpen())) { - fprintf(stderr, "out of memory\n"); - goto bad; - } - /* save arg pointers in the handle */ - xlp->objs = objs; - xlp->n_objs = n_objs; - xlp->lbls = lbls; - xlp->n_lbls = n_lbls; - xlp->params = params; - - return xlp; - - bad: - if (xlp->hdx) - dtclose(xlp->hdx); - if (xlp->spdx) - RTreeClose(xlp->spdx); - free(xlp); - return 0; -} - -static void xlfree(XLabels_t * xlp) -{ - RTreeClose(xlp->spdx); - free(xlp); - return; -} - -/***************************************************************************/ - -/* - * floorlog2 - largest base 2 integer logarithm less than n - * http://en.wikipedia.org/wiki/Binary_logarithm - * ultimately from http://www.hackersdelight.org/ - */ -static int floorLog2(unsigned int n) -{ - int pos = 0; - - if (n == 0) - return -1; - - if (n >= 1 << 16) { - n >>= 16; - pos += 16; - } - if (n >= 1 << 8) { - n >>= 8; - pos += 8; - } - if (n >= 1 << 4) { - n >>= 4; - pos += 4; - } - if (n >= 1 << 2) { - n >>= 2; - pos += 2; - } - if (n >= 1 << 1) { - pos += 1; - } - return pos; -} - -/* - * determine the order(depth) of the hilbert sfc so that we satisfy the - * precondition of hd_hil_s_from_xy() - */ -unsigned int xlhorder(XLabels_t * xlp) -{ - double maxx = xlp->params->bb.UR.x, maxy = xlp->params->bb.UR.y; - return floorLog2(maxx > maxy ? maxx : maxy) + 1; -} - -/* from http://www.hackersdelight.org/ site for the book by Henry S Warren */ -/* - * precondition - * pow(2, n) >= max(p.x, p.y) - */ -/* adapted from lams1.c -Given the "order" n of a Hilbert curve and coordinates x and y, this -program computes the length s of the curve from the origin to (x, y). -The square that the Hilbert curve traverses is of size 2**n by 2**n. - The method is that given in [Lam&Shap], described by the following -table. Here i = n-1 for the most significant bit of x and y, and i = 0 -for the least significant bits. - - x[i] y[i] | s[2i+1:2i] x y - -----------|------------------- - 0 0 | 00 y x - 0 1 | 01 x y - 1 0 | 11 ~y ~x - 1 1 | 10 x y - -To use this table, start at the most significant bits of x and y -(i = n - 1). If they are both 0 (first row), set the most significant -two bits of s to 00 and interchange x and y. (Actually, it is only -necessary to interchange the remaining bits of x and y.) If the most -significant bits of x and y are 10 (third row), output 11, interchange x -and y, and complement x and y. - Then, consider the next most significant bits of x and y (which may -have been changed by this process), and select the appropriate row of -the table to determine the next two bits of s, and how to change x and -y. Continue until the least significant bits of x and y have been -processed. */ - -static unsigned int hd_hil_s_from_xy(point p, int n) -{ - int i, x = p.x, y = p.y, xi, yi; - unsigned s; - - s = 0; /* Initialize. */ - for (i = n - 1; i >= 0; i--) { - xi = (x >> i) & 1; /* Get bit i of x. */ - yi = (y >> i) & 1; /* Get bit i of y. */ - s = 4 * s + 2 * xi + (xi ^ yi); /* Append two bits to s. */ - - x = x ^ y; /* These 3 lines swap */ - y = y ^ (x & (yi - 1)); /* x and y if yi = 0. */ - x = x ^ y; - x = x ^ (-xi & (yi - 1)); /* Complement x and y if */ - y = y ^ (-xi & (yi - 1)); /* xi = 1 and yi = 0. */ - } - return s; -} - -/* intersection test from - * from Real-Time Collision Detection 4.2.1 by Christer Ericson - * intersection area from - * http://stackoverflow.com/questions/4549544/total-area-of-intersecting-rectangles -*/ -static double aabbaabb(Rect_t * r, Rect_t * s) -{ - /* per dimension if( max < omin || min > omax) */ - double iminx, iminy, imaxx, imaxy; - if (r->boundary[2] < s->boundary[0] || r->boundary[0] > s->boundary[2]) - return 0; - if (r->boundary[3] < s->boundary[1] || r->boundary[1] > s->boundary[3]) - return 0; - - /* if we get here we have an intersection */ - - /* rightmost left edge of the 2 rectangles */ - iminx = - r->boundary[0] > s->boundary[0] ? r->boundary[0] : s->boundary[0]; - /* upmost bottom edge */ - iminy = - r->boundary[1] > s->boundary[1] ? r->boundary[1] : s->boundary[1]; - /* leftmost right edge */ - imaxx = - r->boundary[2] < s->boundary[2] ? r->boundary[2] : s->boundary[2]; - /* downmost top edge */ - imaxy = - r->boundary[3] < s->boundary[3] ? r->boundary[3] : s->boundary[3]; - return (imaxx - iminx) * (imaxy - iminy); -} - -/* - * test if objp1, a size 0 object is enclosed in the xlabel - * associated with objp - */ -static int lblenclosing(object_t * objp, object_t * objp1) -{ - xlabel_t * xlp = objp->lbl;; - - assert(objp1->sz.x == 0 && objp1->sz.y == 0); - - if(! xlp) return 0; - - return objp1->pos.x > xlp->pos.x && - objp1->pos.x < (xlp->pos.x + xlp->sz.x) && - objp1->pos.y > xlp->pos.y && - objp1->pos.y < (xlp->pos.y + xlp->sz.y); -} - -/*fill in rectangle from the object */ -static void objp2rect(object_t * op, Rect_t * r) -{ - r->boundary[0] = op->pos.x; - r->boundary[1] = op->pos.y; - r->boundary[2] = op->pos.x + op->sz.x; - r->boundary[3] = op->pos.y + op->sz.y; - return; -} - -/*fill in rectangle from the objects xlabel */ -static void objplp2rect(object_t * objp, Rect_t * r) -{ - xlabel_t *lp = objp->lbl; - r->boundary[0] = lp->pos.x; - r->boundary[1] = lp->pos.y; - r->boundary[2] = lp->pos.x + lp->sz.x; - r->boundary[3] = lp->pos.y + lp->sz.y; - return; -} - -/* compute boundary that encloses all possible label boundaries */ -static Rect_t objplpmks(XLabels_t * xlp, object_t * objp) -{ - Rect_t rect; - pointf p; - - p.x = p.y = 0.0; - if (objp->lbl) - p = objp->lbl->sz; - - rect.boundary[0] = (int) floor(objp->pos.x - p.x); - rect.boundary[1] = (int) floor(objp->pos.y - p.y); - - rect.boundary[2] = (int) ceil(objp->pos.x + objp->sz.x + p.x); - assert(rect.boundary[2] < INT_MAX); - rect.boundary[3] = (int) ceil(objp->pos.y + objp->sz.y + p.y); - assert(rect.boundary[3] < INT_MAX); - - return rect; -} - -/* determine the position clp will occupy in intrsx[] */ -static int getintrsxi(XLabels_t * xlp, object_t * op, object_t * cp) -{ - int i = -1; - xlabel_t *lp = op->lbl, *clp = cp->lbl; - assert(lp != clp); - - if (lp->set == 0 || clp->set == 0) - return i; - if ((op->pos.x == 0.0 && op->pos.y == 0.0) || - (cp->pos.x == 0.0 && cp->pos.y == 0.0)) - return i; - - if (cp->pos.y < op->pos.y) - if (cp->pos.x < op->pos.x) - i = XLPXPY; - else if (cp->pos.x > op->pos.x) - i = XLNXPY; - else - i = XLCXPY; - else if (cp->pos.y > op->pos.y) - if (cp->pos.x < op->pos.x) - i = XLPXNY; - else if (cp->pos.x > op->pos.x) - i = XLNXNY; - else - i = XLCXNY; - else if (cp->pos.x < op->pos.x) - i = XLPXCY; - else if (cp->pos.x > op->pos.x) - i = XLNXCY; - - return i; - -} - -/* record the intersecting objects label */ -static double -recordointrsx(XLabels_t * xlp, object_t * op, object_t * cp, Rect_t * rp, - double a, object_t * intrsx[XLNBR]) -{ - int i = getintrsxi(xlp, op, cp); - if (i < 0) - i = 5; - if (intrsx[i] != NULL) { - double sa, maxa = 0.0; - Rect_t srect; - /* keep maximally overlapping object */ - objp2rect(intrsx[i], &srect); - sa = aabbaabb(rp, &srect); - if (sa > a) - maxa = sa; - /*keep maximally overlapping label */ - if (intrsx[i]->lbl) { - objplp2rect(intrsx[i], &srect); - sa = aabbaabb(rp, &srect); - if (sa > a) - maxa = sa > maxa ? sa : maxa; - } - if (maxa > 0.0) - return maxa; - /*replace overlapping label/object pair */ - intrsx[i] = cp; - return a; - } - intrsx[i] = cp; - return a; -} - -/* record the intersecting label */ -static double -recordlintrsx(XLabels_t * xlp, object_t * op, object_t * cp, Rect_t * rp, - double a, object_t * intrsx[XLNBR]) -{ - int i = getintrsxi(xlp, op, cp); - if (i < 0) - i = 5; - if (intrsx[i] != NULL) { - double sa, maxa = 0.0; - Rect_t srect; - /* keep maximally overlapping object */ - objp2rect(intrsx[i], &srect); - sa = aabbaabb(rp, &srect); - if (sa > a) - maxa = sa; - /*keep maximally overlapping label */ - if (intrsx[i]->lbl) { - objplp2rect(intrsx[i], &srect); - sa = aabbaabb(rp, &srect); - if (sa > a) - maxa = sa > maxa ? sa : maxa; - } - if (maxa > 0.0) - return maxa; - /*replace overlapping label/object pair */ - intrsx[i] = cp; - return a; - } - intrsx[i] = cp; - return a; -} - -/* find the objects and labels intersecting lp */ -static BestPos_t -xlintersections(XLabels_t * xlp, object_t * objp, object_t * intrsx[XLNBR]) -{ - int i; - LeafList_t *ilp, *llp; - Rect_t rect, srect; - BestPos_t bp; - - assert(objp->lbl); - - bp.n = 0; - bp.area = 0.0; - bp.pos = objp->lbl->pos; - - for(i=0; in_objs; i++) { - if(objp == &xlp->objs[i]) continue; - if(xlp->objs[i].sz.x > 0 && xlp->objs[i].sz.y > 0) continue; - if(lblenclosing(objp, &xlp->objs[i]) ) { - bp.n++; - } - } - - objplp2rect(objp, &rect); - - llp = RTreeSearch(xlp->spdx, xlp->spdx->root, &rect); - if (!llp) - return bp; - - for (ilp = llp; ilp; ilp = ilp->next) { - double a, ra; - object_t *cp = ilp->leaf->data; - - if (cp == objp) - continue; - - /*label-object intersect */ - objp2rect(cp, &srect); - a = aabbaabb(&rect, &srect); - if (a > 0.0) { - ra = recordointrsx(xlp, objp, cp, &rect, a, intrsx); - bp.n++; - bp.area += ra; - } - /*label-label intersect */ - if (!cp->lbl || !cp->lbl->set) - continue; - objplp2rect(cp, &srect); - a = aabbaabb(&rect, &srect); - if (a > 0.0) { - ra = recordlintrsx(xlp, objp, cp, &rect, a, intrsx); - bp.n++; - bp.area += ra; - } - } - RTreeLeafListFree(llp); - return bp; -} - -/* - * xladjust - find a label position - * the individual tests at the top are intended to place a preference order - * on the position - */ -static BestPos_t xladjust(XLabels_t * xlp, object_t * objp) -{ - xlabel_t *lp = objp->lbl; - double xincr = ((2 * lp->sz.x) + objp->sz.x) / XLXDENOM; - double yincr = ((2 * lp->sz.y) + objp->sz.y) / XLYDENOM; - object_t *intrsx[XLNBR]; - BestPos_t bp, nbp; - - assert(objp->lbl); - - memset(intrsx, 0, sizeof(intrsx)); - - /*x left */ - lp->pos.x = objp->pos.x - lp->sz.x; - /*top */ - lp->pos.y = objp->pos.y + objp->sz.y; - bp = xlintersections(xlp, objp, intrsx); - if (bp.n == 0) - return bp; - /*mid */ - lp->pos.y = objp->pos.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - /*bottom */ - lp->pos.y = objp->pos.y - lp->sz.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - - /*x mid */ - lp->pos.x = objp->pos.x; - /*top */ - lp->pos.y = objp->pos.y + objp->sz.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - /*bottom */ - lp->pos.y = objp->pos.y - lp->sz.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - - /*x right */ - lp->pos.x = objp->pos.x + objp->sz.x; - /*top */ - lp->pos.y = objp->pos.y + objp->sz.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - /*mid */ - lp->pos.y = objp->pos.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - /*bottom */ - lp->pos.y = objp->pos.y - lp->sz.y; - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - - /*sliding from top left */ - if (intrsx[XLPXNY] || intrsx[XLCXNY] || intrsx[XLNXNY] || intrsx[XLPXCY] || intrsx[XLPXPY]) { /* have to move */ - if (!intrsx[XLCXNY] && !intrsx[XLNXNY]) { /* some room right? */ - /* slide along upper edge */ - for (lp->pos.x = objp->pos.x - lp->sz.x, - lp->pos.y = objp->pos.y + objp->sz.y; - lp->pos.x <= (objp->pos.x + objp->sz.x); - lp->pos.x += xincr) { - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - } - } - if (!intrsx[XLPXCY] && !intrsx[XLPXPY]) { /* some room down? */ - /* slide down left edge */ - for (lp->pos.x = objp->pos.x - lp->sz.x, - lp->pos.y = objp->pos.y + objp->sz.y; - lp->pos.y >= (objp->pos.y - lp->sz.y); - lp->pos.y -= yincr) { - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - - } - } - } - - /*sliding from bottom right */ - lp->pos.x = objp->pos.x + objp->sz.x; - lp->pos.y = objp->pos.y - lp->sz.y; - if (intrsx[XLNXPY] || intrsx[XLCXPY] || intrsx[XLPXPY] || intrsx[XLNXCY] || intrsx[XLNXNY]) { /* have to move */ - if (!intrsx[XLCXPY] && !intrsx[XLPXPY]) { /* some room left? */ - /* slide along lower edge */ - for (lp->pos.x = objp->pos.x + objp->sz.x, - lp->pos.y = objp->pos.y - lp->sz.y; - lp->pos.x >= (objp->pos.x - lp->sz.x); - lp->pos.x -= xincr) { - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - } - } - if (!intrsx[XLNXCY] && !intrsx[XLNXNY]) { /* some room up? */ - /* slide up right edge */ - for (lp->pos.x = objp->pos.x + objp->sz.x, - lp->pos.y = objp->pos.y - lp->sz.y; - lp->pos.y <= (objp->pos.y + objp->sz.y); - lp->pos.y += yincr) { - nbp = xlintersections(xlp, objp, intrsx); - if (nbp.n == 0) - return nbp; - if (nbp.area < bp.area) - bp = nbp; - } - } - } - return bp; -} - -/* load the hilbert sfc keyed tree */ -static int xlhdxload(XLabels_t * xlp) -{ - int i; - int order = xlhorder(xlp); - - for (i = 0; i < xlp->n_objs; i++) { - HDict_t *hp; - point pi; - - hp = NEW(HDict_t); - - hp->d.data = &xlp->objs[i]; - hp->d.rect = objplpmks(xlp, &xlp->objs[i]); - /* center of the labeling area */ - pi.x = hp->d.rect.boundary[0] + - (hp->d.rect.boundary[2] - hp->d.rect.boundary[0]) / 2; - pi.y = hp->d.rect.boundary[1] + - (hp->d.rect.boundary[3] - hp->d.rect.boundary[1]) / 2; - - hp->key = hd_hil_s_from_xy(pi, order); - -#if 0 - if (dtsearch(xlp->hdx, hp) != 0) { - free(hp); - continue; - } -#endif - if (!(dtinsert(xlp->hdx, hp))) - return -1; - } - return 0; -} - -static void xlhdxunload(XLabels_t * xlp) -{ - int size=dtsize(xlp->hdx), freed=0; - while(dtsize(xlp->hdx) ) { - void*vp=dtfinger(xlp->hdx); - assert(vp); - if(vp) { - dtdetach(xlp->hdx, vp); - free(vp); - freed++; - } - } - assert(size==freed); -} - -static int xlspdxload(XLabels_t * xlp) -{ - HDict_t *op=0; - - for (op = dtfirst(xlp->hdx); op; op = dtnext(xlp->hdx, op)) { - /* tree rectangle data node lvl */ - RTreeInsert(xlp->spdx, &op->d.rect, op->d.data, &xlp->spdx->root, 0); - } - return 0; -} - -static int xlinitialize(XLabels_t * xlp) -{ - int r=0; - if ((r = xlhdxload(xlp)) < 0) - return r; - if ((r = xlspdxload(xlp)) < 0) - return r; - xlhdxunload(xlp); - return dtclose(xlp->hdx); -} - -int -placeLabels(object_t * objs, int n_objs, - xlabel_t * lbls, int n_lbls, label_params_t * params) -{ - int r, i; - BestPos_t bp; - XLabels_t *xlp = xlnew(objs, n_objs, lbls, n_lbls, params); - if ((r = xlinitialize(xlp)) < 0) - return r; - - /* Place xlabel_t* lp near lp->obj so that the rectangle whose lower-left - * corner is lp->pos, and size is lp->sz does not intersect any object - * in objs (by convention, an object consisting of a single point - * intersects nothing) nor any other label, if possible. On input, - * lp->set is 0. - * - * On output, any label with a position should have this stored in - * lp->pos and have lp->set non-zero. - * - * If params->force is true, all labels must be positioned, even if - * overlaps are necessary. - * - * Return 0 if all labels could be placed without overlap; - * non-zero otherwise. - */ - r = 0; - for (i = 0; i < n_objs; i++) { - if (objs[i].lbl == 0) - continue; - bp = xladjust(xlp, &objs[i]); - if (bp.n == 0) { - objs[i].lbl->set = 1; - } else if(bp.area == 0) { - objs[i].lbl->pos.x = bp.pos.x; - objs[i].lbl->pos.y = bp.pos.y; - objs[i].lbl->set = 1; - } else if (params->force == 1) { - objs[i].lbl->pos.x = bp.pos.x; - objs[i].lbl->pos.y = bp.pos.y; - objs[i].lbl->set = 1; - } else { - r = 1; - } - } - xlfree(xlp); - return r; -} diff --git a/internal/ccall/label/xlabels.h b/internal/ccall/label/xlabels.h deleted file mode 100644 index 63286bd..0000000 --- a/internal/ccall/label/xlabels.h +++ /dev/null @@ -1,108 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef XLABELS_H -#define XLABELS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct { - pointf sz; /* Size of label (input) */ - pointf pos; /* Position of lower-left corner of label (output) */ - void *lbl; /* Pointer to label in the graph */ - unsigned char set; /* True if the position has been set (input/output) */ -} xlabel_t; - -typedef struct { - pointf pos; /* Position of lower-left corner of object */ - pointf sz; /* Size of object; may be zero for a point */ - xlabel_t *lbl; /* Label attached to object, or NULL */ -} object_t; - -typedef struct { - boxf bb; /* Bounding box of all objects */ - unsigned char force; /* If true, all labels must be placed */ -} label_params_t; - -int placeLabels(object_t * objs, int n_objs, - xlabel_t * lbls, int n_lbls, label_params_t * params); - -#ifdef XLABEL_INT -#include -#include -#include - -#ifndef XLNDSCALE -#define XLNDSCALE 72.0 -#endif /*XLNDSCALE*/ -#ifndef XLNBR -#define XLNBR 9 -#endif /*XLNBR*/ -#ifndef XLXDENOM -#define XLXDENOM 8 -#endif /*XLXDENOM*/ -#ifndef XLYDENOM -#define XLYDENOM 2 -#endif /*XLYDENOM*/ -#define XLNBR 9 -#define XLCNR 4 -#define XLNDSCALE 72.0 -#define XLODCR -1 -// indexes of neighbors in certain arrays -// the node of interest is usually in node 4 -// 6 7 8 -// 3 4 5 -// 0 1 2 -#define XLPXPY 0 -#define XLCXPY 1 -#define XLNXPY 2 -#define XLPXCY 3 -#define XLCXCY 4 -#define XLNXCY 5 -#define XLPXNY 6 -#define XLCXNY 7 -#define XLNXNY 8 - typedef struct best_p_s { - int n; - double area; - pointf pos; -} BestPos_t; - -typedef struct obyh { - Dtlink_t link; - int key; - Leaf_t d; -} HDict_t; - -typedef struct XLabels_s { - object_t *objs; - int n_objs; - xlabel_t *lbls; - int n_lbls; - label_params_t *params; - - Dt_t *hdx; // splay tree keyed with hilbert spatial codes - RTree_t *spdx; // rtree - -} XLabels_t; - -#endif /* XLABEL_INT */ - -#ifdef __cplusplus -} -#endif - -#endif /*XLABELS_H */ diff --git a/internal/ccall/mingle/agglomerative_bundling.c b/internal/ccall/mingle/agglomerative_bundling.c deleted file mode 100644 index 27aa9f2..0000000 --- a/internal/ccall/mingle/agglomerative_bundling.c +++ /dev/null @@ -1,774 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "types.h" -#include "globals.h" -#include "general.h" -#include "time.h" -#include "SparseMatrix.h" -#include "vector.h" -#include "edge_bundling.h" -#include "ink.h" -#include "agglomerative_bundling.h" -#include "nearest_neighbor_graph.h" - -#if OPENGL -#include "gl.h" -extern pedge *edges_global; -extern int nedges_global; -#endif - -enum {DEBUG=0}; - -static Agglomerative_Ink_Bundling Agglomerative_Ink_Bundling_init(SparseMatrix A, pedge *edges, int level){ - Agglomerative_Ink_Bundling grid; - int n = A->n, i; - - assert(SparseMatrix_is_symmetric(A, TRUE)); - - if (!A) return NULL; - assert(A->m == n); - grid = MALLOC(sizeof(struct Agglomerative_Ink_Bundling_struct)); - grid->level = level; - grid->n = n; - grid->A = A; - grid->P = NULL; - grid->R0 = NULL; - grid->R = NULL; - grid->next = NULL; - grid->prev = NULL; - grid->inks = MALLOC(sizeof(real)*(A->m)); - grid->edges = edges; - grid->delete_top_level_A = 0; - grid->total_ink = -1; - if (level == 0){ - real total_ink = 0; - for (i = 0; i < n; i++) { - (grid->inks)[i] = ink1(edges[i]); - total_ink += (grid->inks)[i]; - } - grid->total_ink = total_ink; - } - return grid; -} - -static void Agglomerative_Ink_Bundling_delete(Agglomerative_Ink_Bundling grid){ - if (!grid) return; - if (grid->A){ - if (grid->level == 0) { - if (grid->delete_top_level_A) SparseMatrix_delete(grid->A); - } else { - SparseMatrix_delete(grid->A); - } - } - SparseMatrix_delete(grid->P); - /* on level 0, R0 = NULL, on level 1, R0 = R */ - if (grid->level > 1) SparseMatrix_delete(grid->R0); - SparseMatrix_delete(grid->R); - FREE(grid->inks); - - Agglomerative_Ink_Bundling_delete(grid->next); - FREE(grid); -} - -static Agglomerative_Ink_Bundling Agglomerative_Ink_Bundling_establish(Agglomerative_Ink_Bundling grid, int *pick, real angle_param, real angle){ - /* pick is a work array of dimension n, with n the total number of original edges */ - int *matching; - SparseMatrix A = grid->A; - int n = grid->n, level = grid->level, nc = 0; - int *ia = A->ia, *ja = A->ja; - // real *a; - int i, j, k, jj, jc, jmax, ni, nj, npicks; - int *mask; - pedge *edges = grid->edges; - real *inks = grid->inks, *cinks, inki, inkj; - real gain, maxgain, minink, total_gain = 0; - int *ip = NULL, *jp = NULL, ie; - Vector *cedges;/* a table listing the content of bundled edges in the coarsen grid. - cedges[i] contain the list of origonal edges that make up the bundle i in the next level */ - real ink0, ink1, grand_total_ink = 0, grand_total_gain = 0; - point_t meet1, meet2; - - if (Verbose > 1) fprintf(stderr,"level ===================== %d, n = %d\n",grid->level, n); - cedges = MALLOC(sizeof(Vector)*n); - cinks = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) cedges[i] = Vector_new(1, sizeof(int), NULL); - - if (grid->level > 0){ - ip = grid->R0->ia; - jp = grid->R0->ja; - } - - matching = MALLOC(sizeof(int)*n); - mask = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - assert(n == A->n); - for (i = 0; i < n; i++) matching[i] = UNMATCHED; - - // a = (real*) A->a; - for (i = 0; i < n; i++){ - if (matching[i] != UNMATCHED) continue; - - /* find the best matching in ink saving */ - maxgain = 0; - minink = -1; - jmax = -1; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - - /* ink saving of merging i and j */ - if ((jc=matching[jj]) == UNMATCHED){ - /* neither i nor jj are matched */ - inki = inks[i]; inkj = inks[jj]; - if (ip && jp){/* not the first level */ - ni = (ip[i+1] - ip[i]);/* number of edges represented by i */ - nj = (ip[jj+1] - ip[jj]);/* number of edges represented by jj */ - MEMCPY(pick, &(jp[ip[i]]), sizeof(int)*ni); - MEMCPY(pick+ni, &(jp[ip[jj]]), sizeof(int)*nj); - } else {/* first level */ - pick[0] = i; pick[1] = jj; - ni = nj = 1; - } - if (Verbose && DEBUG) fprintf(stderr, "ink(%d)=%f, ink(%d)=%f", i, inki, jj, inkj); - } else { - /* j is already matched. Its content is on cedges[jc] */ - inki = inks[i]; inkj = cinks[jc]; - if (Verbose && DEBUG) fprintf(stderr, "ink(%d)=%f, ink(%d->%d)=%f", i, inki, jj, jc, inkj); - if (ip) { - ni = (ip[i+1] - ip[i]);/* number of edges represented by i */ - MEMCPY(pick, &(jp[ip[i]]), sizeof(int)*ni); - } else { - ni = 1; pick[0] = i; - } - nj = Vector_get_length(cedges[jc]); - npicks = ni; - for (k = 0; k < nj; k++) { - pick[npicks++] = *((int*) Vector_get(cedges[jc], k)); - } - } - - npicks = ni + nj; - ink1 = ink(edges, npicks, pick, &ink0, &meet1, &meet2, angle_param, angle); - if (Verbose && DEBUG) { - fprintf(stderr,", if merging {"); - for (k = 0; k < npicks; k++) fprintf(stderr,"%d,", pick[k]); - fprintf(stderr,"}, "); - fprintf(stderr, " ink0=%f, ink1=%f", inki+inkj, ink1); - } - - gain = inki + inkj - ink1; - if (Verbose && DEBUG) fprintf(stderr, " gain=%f", gain); - if (gain > maxgain){ - maxgain = gain; - minink = ink1; - jmax = jj; - if (Verbose && DEBUG) fprintf(stderr, "maxgain=%f", maxgain); - } - if (Verbose && DEBUG) fprintf(stderr, "\n"); - - - - } - - - /* now merge i and jmax */ - if (maxgain > 0){ - /* a good bundling of i and another edge jmax is found */ - total_gain += maxgain; - jc = matching[jmax]; - if (jc == UNMATCHED){/* i and j both unmatched. Add j in the table first */ - if (Verbose && DEBUG) printf("maxgain=%f, merge %d with best edge: %d to form coarsen edge %d. Ink=%f\n",maxgain, i, jmax, nc, minink); - matching[i] = matching[jmax] = nc; - if (ip){ - for (k = ip[jmax]; k < ip[jmax+1]; k++) { - ie = jp[k]; - Vector_add(cedges[nc], (void*) (&ie)); - } - } else { - Vector_add(cedges[nc], (void*) (&jmax)); - } - jc = nc; - nc++; - } else {/*j is already matched */ - if (Verbose && DEBUG) printf("maxgain=%f, merge %d with existing cluster %d\n",maxgain, i, jc); - matching[i] = jc; - grand_total_ink -= cinks[jc];/* ink of cluster jc was already added, and will be added again as part of a larger cluster with i, so dicount */ - } - } else {/*i can not match/bundle successfully */ - if (Verbose && DEBUG) fprintf(stderr, "no gain in bundling node %d\n",i); - assert(maxgain <= 0); - matching[i] = nc; - jc = nc; - minink = inks[i]; - nc++; - } - - - /* add i to the appropriate table */ - if (ip){ - for (k = ip[i]; k < ip[i+1]; k++) { - ie = jp[k]; - Vector_add(cedges[jc], (void*) (&ie)); - } - } else { - Vector_add(cedges[jc], (void*) (&i)); - } - cinks[jc] = minink; - grand_total_ink += minink; - grand_total_gain += maxgain; - - if (Verbose && DEBUG){ - fprintf(stderr," coarse edge[%d]={",jc); - for (k = 0; k < Vector_get_length(cedges[jc]); k++) { - fprintf(stderr,"%d,", *((int*) Vector_get(cedges[jc], k))); - } - fprintf(stderr,"}, grand_total_gain=%f\n",grand_total_gain); - } - - } - - if (nc >= 1 && total_gain > 0){ - /* now set up restriction and prolongation operator */ - SparseMatrix P, R, R1, R0, B, cA; - real one = 1.; - Agglomerative_Ink_Bundling cgrid; - - R1 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - for (i = 0; i < n; i++){ - jj = matching[i]; - SparseMatrix_coordinate_form_add_entries(R1, 1, &jj, &i, &one); - } - R = SparseMatrix_from_coordinate_format(R1); - SparseMatrix_delete(R1); - P = SparseMatrix_transpose(R); - B = SparseMatrix_multiply(R, A); - if (!B) goto RETURN; - cA = SparseMatrix_multiply(B, P); - if (!cA) goto RETURN; - SparseMatrix_delete(B); - grid->P = P; - grid->R = R; - - level++; - cgrid = Agglomerative_Ink_Bundling_init(cA, edges, level); - - - /* set up R0!!! */ - if (grid->R0){ - R0 = SparseMatrix_multiply(R, grid->R0); - } else { - assert(grid->level == 0); - R0 = R; - } - cgrid->R0 = R0; - cgrid->inks = cinks; - cgrid->total_ink = grand_total_ink; - - if (Verbose > 1) fprintf(stderr,"level %d->%d, edges %d -> %d, ink %f->%f , gain = %f, or %f\n", grid->level, cgrid->level, grid->n, - cgrid->n, grid->total_ink, grand_total_ink, grid->total_ink - grand_total_ink, grand_total_gain); - assert(ABS(grid->total_ink - cgrid->total_ink - grand_total_gain) <= 0.0001*grid->total_ink); - - cgrid = Agglomerative_Ink_Bundling_establish(cgrid, pick, angle_param, angle); - grid->next = cgrid; - cgrid->prev = grid; - - } else { - if (Verbose > 1) fprintf(stderr,"no more improvement, orig ink = %f, gain = %f, stop and final bundling found\n", grand_total_ink, grand_total_gain); - /* no more improvement, stop and final bundling found */ - for (i = 0; i < n; i++) matching[i] = i; - } - - RETURN: - FREE(matching); - for (i = 0; i < n; i++) Vector_delete(cedges[i]); - FREE(cedges); - FREE(mask); - return grid; -} - - -#ifndef NOTUSED -static Agglomerative_Ink_Bundling Agglomerative_Ink_Bundling_aggressive_establish(Agglomerative_Ink_Bundling grid, int *pick, real angle_param, real angle){ - /* this does a true single-linkage clustering: find the edge that gives the best saving, merge, find again. - As oppose to: find the edge of node i that gives the best ink saving, merge, then do the same for node i+1, etc etc. - Right now it is implemented as a quick hack to check whether it is worth while: it saves about 3% extra ink on airlines: from - 59% to 62% - */ - /* pick is a work array of dimension n, with n the total number of original edges */ - int *matching; - SparseMatrix A = grid->A; - int n = grid->n, level = grid->level, nc = 0; - int *ia = A->ia, *ja = A->ja; - // real *a; - int i, j, k, jj, jc = -1, jmax, imax, ni, nj, npicks; - int *mask; - pedge *edges = grid->edges; - real *inks = grid->inks, *cinks, inki, inkj; - real gain, maxgain, minink, total_gain = 0; - int *ip = NULL, *jp = NULL, ie; - Vector *cedges;/* a table listing the content of bundled edges in the coarsen grid. - cedges[i] contain the list of origonal edges that make up the bundle i in the next level */ - real ink0, ink1, grand_total_ink = 0, grand_total_gain = 0; - point_t meet1, meet2; - - if (Verbose > 1) fprintf(stderr,"level ===================== %d, n = %d\n",grid->level, n); - cedges = MALLOC(sizeof(Vector)*n); - cinks = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) cedges[i] = Vector_new(1, sizeof(int), NULL); - - if (grid->level > 0){ - ip = grid->R0->ia; - jp = grid->R0->ja; - } - - matching = MALLOC(sizeof(int)*n); - mask = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - assert(n == A->n); - for (i = 0; i < n; i++) matching[i] = UNMATCHED; - - //a = (real*) A->a; - - do { - maxgain = 0; - imax = -1; - jmax = -1; - minink = -1; - for (i = 0; i < n; i++){ - if (matching[i] != UNMATCHED) continue; - - /* find the best matching in ink saving */ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - - /* ink saving of merging i and j */ - if ((jc=matching[jj]) == UNMATCHED){ - /* neither i nor jj are matched */ - inki = inks[i]; inkj = inks[jj]; - if (ip && jp){/* not the first level */ - ni = (ip[i+1] - ip[i]);/* number of edges represented by i */ - nj = (ip[jj+1] - ip[jj]);/* number of edges represented by jj */ - MEMCPY(pick, &(jp[ip[i]]), sizeof(int)*ni); - MEMCPY(pick+ni, &(jp[ip[jj]]), sizeof(int)*nj); - } else {/* first level */ - pick[0] = i; pick[1] = jj; - ni = nj = 1; - } - if (Verbose && DEBUG) fprintf(stderr, "ink(%d)=%f, ink(%d)=%f", i, inki, jj, inkj); - } else { - /* j is already matched. Its content is on cedges[jc] */ - inki = inks[i]; inkj = cinks[jc]; - if (Verbose && DEBUG) fprintf(stderr, "ink(%d)=%f, ink(%d->%d)=%f", i, inki, jj, jc, inkj); - if (ip) { - ni = (ip[i+1] - ip[i]);/* number of edges represented by i */ - MEMCPY(pick, &(jp[ip[i]]), sizeof(int)*ni); - } else { - ni = 1; pick[0] = i; - } - nj = Vector_get_length(cedges[jc]); - npicks = ni; - for (k = 0; k < nj; k++) { - pick[npicks++] = *((int*) Vector_get(cedges[jc], k)); - } - } - - npicks = ni + nj; - ink1 = ink(edges, npicks, pick, &ink0, &meet1, &meet2, angle_param, angle); - if (Verbose && DEBUG) { - fprintf(stderr,", if merging {"); - for (k = 0; k < npicks; k++) fprintf(stderr,"%d,", pick[k]); - fprintf(stderr,"}, "); - fprintf(stderr, " ink0=%f, ink1=%f", inki+inkj, ink1); - } - - gain = inki + inkj - ink1; - if (Verbose && DEBUG) fprintf(stderr, " gain=%f", gain); - if (gain > maxgain){ - maxgain = gain; - minink = ink1; - jmax = jj; - imax = i; - if (Verbose && DEBUG) fprintf(stderr, "maxgain=%f", maxgain); - } - if (Verbose && DEBUG) fprintf(stderr, "\n"); - - - - } - } - - /* now merge i and jmax */ - if (maxgain > 0){ - /* a good bundling of i and another edge jmax is found */ - total_gain += maxgain; - jc = matching[jmax]; - if (jc == UNMATCHED){/* i and j both unmatched. Add j in the table first */ - if (Verbose && DEBUG) printf("maxgain=%f, merge %d with best edge: %d to form coarsen edge %d. Ink=%f\n",maxgain, imax, jmax, nc, minink); - matching[imax] = matching[jmax] = nc; - if (ip){ - for (k = ip[jmax]; k < ip[jmax+1]; k++) { - ie = jp[k]; - Vector_add(cedges[nc], (void*) (&ie)); - } - } else { - Vector_add(cedges[nc], (void*) (&jmax)); - } - jc = nc; - nc++; - } else {/*j is already matched */ - if (Verbose && DEBUG) printf("maxgain=%f, merge %d with existing cluster %d\n",maxgain, i, jc); - matching[imax] = jc; - grand_total_ink -= cinks[jc];/* ink of cluster jc was already added, and will be added again as part of a larger cluster with i, so dicount */ - } - /* add i to the appropriate table */ - if (ip){ - for (k = ip[imax]; k < ip[imax+1]; k++) { - ie = jp[k]; - Vector_add(cedges[jc], (void*) (&ie)); - } - } else { - Vector_add(cedges[jc], (void*) (&imax)); - } - cinks[jc] = minink; - grand_total_ink += minink; - grand_total_gain += maxgain; - } else {/*i can not match/bundle successfully */ - if (Verbose && DEBUG) fprintf(stderr, "no gain in bundling node %d\n",i); - for (i = 0; i < n; i++){ - assert(maxgain <= 0); - if (matching[i] == UNMATCHED){ - imax = i; - matching[imax] = nc; - jc = nc; - minink = inks[imax]; - nc++; - - if (ip){ - for (k = ip[imax]; k < ip[imax+1]; k++) { - ie = jp[k]; - Vector_add(cedges[jc], (void*) (&ie)); - } - } else { - Vector_add(cedges[jc], (void*) (&imax)); - } - cinks[jc] = minink; - grand_total_ink += minink; - grand_total_gain += maxgain; - - - - - } - } - } - - } while (maxgain > 0); - - - if (Verbose && DEBUG){ - fprintf(stderr," coarse edge[%d]={",jc); - for (k = 0; k < Vector_get_length(cedges[jc]); k++) { - fprintf(stderr,"%d,", *((int*) Vector_get(cedges[jc], k))); - } - fprintf(stderr,"}\n"); - } - - if (nc >= 1 && total_gain > 0){ - /* now set up restriction and prolongation operator */ - SparseMatrix P, R, R1, R0, B, cA; - real one = 1.; - Agglomerative_Ink_Bundling cgrid; - - R1 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - for (i = 0; i < n; i++){ - jj = matching[i]; - SparseMatrix_coordinate_form_add_entries(R1, 1, &jj, &i, &one); - } - R = SparseMatrix_from_coordinate_format(R1); - SparseMatrix_delete(R1); - P = SparseMatrix_transpose(R); - B = SparseMatrix_multiply(R, A); - if (!B) goto RETURN; - cA = SparseMatrix_multiply(B, P); - if (!cA) goto RETURN; - SparseMatrix_delete(B); - grid->P = P; - grid->R = R; - - level++; - cgrid = Agglomerative_Ink_Bundling_init(cA, edges, level); - - - /* set up R0!!! */ - if (grid->R0){ - R0 = SparseMatrix_multiply(R, grid->R0); - } else { - assert(grid->level == 0); - R0 = R; - } - cgrid->R0 = R0; - cgrid->inks = cinks; - cgrid->total_ink = grand_total_ink; - - if (Verbose > 1) fprintf(stderr,"level %d->%d, edges %d -> %d, ink %f->%f , gain = %f, or %f\n", grid->level, cgrid->level, grid->n, - cgrid->n, grid->total_ink, grand_total_ink, grid->total_ink - grand_total_ink, grand_total_gain); - assert(ABS(grid->total_ink - cgrid->total_ink - grand_total_gain) <= 0.0001*grid->total_ink); - - cgrid = Agglomerative_Ink_Bundling_aggressive_establish(cgrid, pick, angle_param, angle); - grid->next = cgrid; - cgrid->prev = grid; - - } else { - if (Verbose > 1) fprintf(stderr,"no more improvement, orig ink = %f, gain = %f, stop and final bundling found\n", grand_total_ink, grand_total_gain); - /* no more improvement, stop and final bundling found */ - for (i = 0; i < n; i++) matching[i] = i; - } - - RETURN: - FREE(matching); - for (i = 0; i < n; i++) Vector_delete(cedges[i]); - FREE(mask); - return grid; -} -#endif - -static Agglomerative_Ink_Bundling Agglomerative_Ink_Bundling_new(SparseMatrix A0, pedge *edges, real angle_param, real angle){ - /* give a link of edges and their nearest neighbor graph, return a multilevel of edge bundling based on ink saving */ - Agglomerative_Ink_Bundling grid; - int *pick; - SparseMatrix A = A0; - - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - grid = Agglomerative_Ink_Bundling_init(A, edges, 0); - - pick = MALLOC(sizeof(int)*A0->m); - - //grid = Agglomerative_Ink_Bundling_aggressive_establish(grid, pick, angle_param, angle); - grid = Agglomerative_Ink_Bundling_establish(grid, pick, angle_param, angle); - FREE(pick); - - if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */ - - return grid; -} - -static pedge* agglomerative_ink_bundling_internal(int dim, SparseMatrix A, pedge* edges, int nneighbors, int *recurse_level, int MAX_RECURSE_LEVEL, real angle_param, real angle, int open_gl, real *current_ink, real *ink00, int *flag){ - - int i, j, jj, k; - int *ia, *ja; - int *pick; - Agglomerative_Ink_Bundling grid, cgrid; - SparseMatrix R; - real ink0, ink1; - point_t meet1, meet2; - pedge e; - real TOL = 0.0001, wgt_all; - clock_t start; - - (*recurse_level)++; - if (Verbose > 1) fprintf(stderr, "agglomerative_ink_bundling_internal, recurse level ------- %d\n",*recurse_level); - - assert(A->m == A->n); - - *flag = 0; - - start = clock(); - grid = Agglomerative_Ink_Bundling_new(A, edges, angle_param, angle); - if (Verbose > 1) - fprintf(stderr, "CPU for agglomerative bundling %f\n", ((real) (clock() - start))/CLOCKS_PER_SEC); - ink0 = grid->total_ink; - - /* find coarsest */ - cgrid = grid; - while (cgrid->next){ - cgrid = cgrid->next; - } - ink1 = cgrid->total_ink; - - if (*current_ink < 0){ - *current_ink = *ink00 = ink0; - if (Verbose > 1) - fprintf(stderr,"initial total ink = %f\n",*current_ink); - } - if (ink1 < ink0){ - *current_ink -= ink0 - ink1; - } - - if (Verbose > 1) fprintf(stderr,"ink: %f->%f, edges: %d->%d, current ink = %f, percentage gain over original = %f\n", ink0, ink1, grid->n, cgrid->n, *current_ink, (ink0-ink1)/(*ink00)); - - /* if no meaningful improvement (0.0001%), out, else rebundle the middle section */ - if ((ink0-ink1)/(*ink00) < 0.000001 || *recurse_level > MAX_RECURSE_LEVEL) { - /* project bundles up */ - R = cgrid->R0; - if (R){ - ia = R->ia; - ja = R->ja; - for (i = 0; i < R->m; i++){ - pick = &(ja[ia[i]]); - - if (Verbose && DEBUG) fprintf(stderr,"calling ink2...\n"); - ink1 = ink(edges, ia[i+1]-ia[i], pick, &ink0, &meet1, &meet2, angle_param, angle); - if (Verbose && DEBUG) fprintf(stderr,"finish calling ink2...\n"); - assert(ABS(ink1 - cgrid->inks[i])<=MAX(TOL, TOL*ink1) && ink1 - ink0 <= TOL); - wgt_all = 0.; - if (ia[i+1]-ia[i] > 1){ - for (j = ia[i]; j < ia[i+1]; j++){ - /* make this edge 4 points, insert two meeting points at 1 and 2, make 3 the last point */ - jj = ja[j]; - edges[jj] = pedge_double(edges[jj]);/* has to call pedge_double twice: from 2 points to 3 points to 5 points. The last point not used, may be - improved later */ - e = edges[jj] = pedge_double(edges[jj]); - - e->wgts = REALLOC(e->wgts, sizeof(real)*4); - e->x[1*dim] = meet1.x; - e->x[1*dim+1] = meet1.y; - e->x[2*dim] = meet2.x; - e->x[2*dim+1] = meet2.y; - e->x[3*dim] = e->x[4*dim]; - e->x[3*dim+1] = e->x[4*dim+1]; - e->npoints = 4; - for (k = 0; k < 3; k++) e->wgts[k] = e->wgt; - wgt_all += e->wgt; - - } - for (j = ia[i]; j < ia[i+1]; j++){ - e = edges[ja[j]]; - e->wgts[1] = wgt_all; - } - } - - } - } - } else { - pedge *mid_edges, midedge;/* middle section of edges that will be bundled again */ - real *xx; - int ne, npp, l; - SparseMatrix A_mid; - real eps = 0., wgt, total_wgt = 0; - - /* make new edges using meet1 and meet2. - - call Agglomerative_Ink_Bundling_new - - inherit new edges to old edges - */ - - R = cgrid->R0; - assert(R && cgrid != grid);/* if ink improved, we should have gone at leat 1 level down! */ - ia = R->ia; - ja = R->ja; - ne = R->m; - mid_edges = MALLOC(sizeof(pedge)*ne); - xx = MALLOC(sizeof(real)*4*ne); - for (i = 0; i < R->m; i++){ - pick = &(ja[ia[i]]); - wgt = 0.; - for (j = ia[i]; j < ia[i+1]; j++) wgt += edges[j]->wgt; - total_wgt += wgt; - if (Verbose && DEBUG) fprintf(stderr,"calling ink3...\n"); - ink1 = ink(edges, ia[i+1]-ia[i], pick, &ink0, &meet1, &meet2, angle_param, angle); - if (Verbose && DEBUG) fprintf(stderr,"done calling ink3...\n"); - assert(ABS(ink1 - cgrid->inks[i])<=MAX(TOL, TOL*ink1) && ink1 - ink0 <= TOL); - xx[i*4 + 0] = meet1.x; - xx[i*4 + 1] = meet1.y; - xx[i*4 + 2] = meet2.x; - xx[i*4 + 3] = meet2.y; - mid_edges[i] = pedge_wgt_new(2, dim, &(xx[i*4]), wgt); - //mid_edges[i] = pedge_wgt_new(2, dim, &(xx[i*4]), 1.); - - } - - A_mid = nearest_neighbor_graph(ne, MIN(nneighbors, ne), 4, xx, eps); - - agglomerative_ink_bundling_internal(dim, A_mid, mid_edges, nneighbors, recurse_level, MAX_RECURSE_LEVEL, angle_param, angle, open_gl, current_ink, ink00, flag); - SparseMatrix_delete(A_mid); - FREE(xx); - - /* patching edges with the new mid-section */ - for (i = 0; i < R->m; i++){ - pick = &(ja[ia[i]]); - midedge = mid_edges[i]; - npp = midedge->npoints + 2; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - e = edges[jj] = pedge_wgts_realloc(edges[jj], npp); - - assert(e->npoints = 2); - for (l = 0; l < dim; l++){/* move the second point to the last */ - e->x[(npp - 1)*dim+l] = e->x[1*dim+l]; - } - - for (k = 0; k < midedge->npoints; k++){ - for (l = 0; l < dim; l++){ - e->x[(k+1)*dim+l] = midedge->x[k*dim+l]; - } - if (k < midedge->npoints - 1){ - if (midedge->wgts){ - e->wgts[(k+1)] = midedge->wgts[k]; - } else { - e->wgts[(k+1)] = midedge->wgt; - } - } - } - e->wgts[npp - 2] = e->wgts[0];/* the last interval take from the 1st interval */ - - - e->npoints = npp; - } -#ifdef OPENGL - if (open_gl & FALSE){ - nedges_global = grid->n; - edges_global = edges; - drawScene(); - // waitie(5./R->m); - } -#endif - } - - for (i = 0; i < ne; i++) pedge_delete(mid_edges[i]); - - } - - -#ifdef OPENGL - if (open_gl){ - nedges_global = grid->n; - edges_global = edges; - drawScene(); - // waitie(5./R->m); - } -#endif - - Agglomerative_Ink_Bundling_delete(grid); - - return edges; -} - - -pedge* agglomerative_ink_bundling(int dim, SparseMatrix A, pedge* edges, int nneighbor, int MAX_RECURSE_LEVEL, real angle_param, real angle, int open_gl, int *flag){ - int recurse_level = 0; - real current_ink = -1, ink0; - pedge *edges2; - - ink_count = 0; - edges2 = agglomerative_ink_bundling_internal(dim, A, edges, nneighbor, &recurse_level, MAX_RECURSE_LEVEL, angle_param, angle, open_gl, ¤t_ink, &ink0, flag); - - - if (Verbose > 1) - fprintf(stderr,"initial total ink = %f, final total ink = %f, inksaving = %f percent, total ink_calc = %f, avg ink_calc per edge = %f\n", ink0, current_ink, (ink0-current_ink)/ink0, ink_count, ink_count/(real) A->m); - return edges2; -} - diff --git a/internal/ccall/mingle/agglomerative_bundling.h b/internal/ccall/mingle/agglomerative_bundling.h deleted file mode 100644 index 0cbfd8e..0000000 --- a/internal/ccall/mingle/agglomerative_bundling.h +++ /dev/null @@ -1,34 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef AGGLOMERATIVE_BUNDLING_H -#define AGGLOMERATIVE_BUNDLING_H - -typedef struct Agglomerative_Ink_Bundling_struct *Agglomerative_Ink_Bundling; - -struct Agglomerative_Ink_Bundling_struct { - int level;/* 0, 1, ... */ - int n; - SparseMatrix A; /* n x n matrix, where n is the number of edges/bundles in this level */ - SparseMatrix P; /* prolongation matrix from level + 1 to level */ - SparseMatrix R0;/* this is basically R[level - 1].R[level - 2]...R[0], which gives the map of bundling i to the original edges: first row of R0 gives - the nodes on the finest grid corresponding to the coarsest node 1, etc */ - SparseMatrix R;/* striction mtrix from level to level + 1*/ - Agglomerative_Ink_Bundling next; - Agglomerative_Ink_Bundling prev; - real *inks; /* amount of ink needed to draw this edge/bundle. Dimension n. */ - real total_ink; /* amount of ink needed to draw this edge/bundle. Dimension n. */ - pedge* edges; /* the original edge info. This does not vary level to level and is of dimenion n0, where n0 is the number of original edges */ - int delete_top_level_A;/*whether the top level matrix should be deleted on garbage collecting the grid */ -}; - -pedge* agglomerative_ink_bundling(int dim, SparseMatrix A, pedge* edges, int nneighbor, int max_recursion, real angle_param, real angle, int open_gl, int *flag); - -#endif /* AGGLOMERATIVE_BUNDLING_H */ diff --git a/internal/ccall/mingle/dummy.go b/internal/ccall/mingle/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/mingle/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/mingle/edge_bundling.c b/internal/ccall/mingle/edge_bundling.c deleted file mode 100644 index 3648b3d..0000000 --- a/internal/ccall/mingle/edge_bundling.c +++ /dev/null @@ -1,831 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "types.h" -#include "globals.h" -#include "general.h" -#include "SparseMatrix.h" -#include "edge_bundling.h" -#include -#include "clustering.h" -#include "ink.h" -#include "agglomerative_bundling.h" - -#define SMALL 1.e-10 - -#ifdef OPENGL -#include "gl.h" -extern pedge *edges_global; -extern int *clusters_global; -#endif - -static real norm(int n, real *x){ - real res = 0; - int i; - - for (i = 0; i < n; i++) res += x[i]*x[i]; - return sqrt(res); - -} -static real sqr_dist(int dim, real *x, real *y){ - int i; - real res = 0; - for (i = 0; i < dim; i++) res += (x[i] - y[i])*(x[i] - y[i]); - return res; -} -static real dist(int dim, real *x, real *y){ - return sqrt(sqr_dist(dim,x,y)); -} - -pedge pedge_new(int np, int dim, real *x){ - pedge e; - - e = MALLOC(sizeof(struct pedge_struct)); - e->npoints = np; - e->dim = dim; - e->len = np; - e->x = MALLOC(dim*(e->len)*sizeof(real)); - MEMCPY(e->x, x, dim*(e->len)*sizeof(real)); - e->edge_length = dist(dim, &(x[0*dim]), &(x[(np-1)*dim])); - e->wgt = 1.; - e->wgts = NULL; - return e; - -} -pedge pedge_wgt_new(int np, int dim, real *x, real wgt){ - pedge e; - int i; - - e = MALLOC(sizeof(struct pedge_struct)); - e->npoints = np; - e->dim = dim; - e->len = np; - e->x = MALLOC(dim*(e->len)*sizeof(real)); - MEMCPY(e->x, x, dim*(e->len)*sizeof(real)); - e->edge_length = dist(dim, &(x[0*dim]), &(x[(np-1)*dim])); - e->wgt = wgt; - e->wgts = MALLOC(sizeof(real)*(np - 1)); - for (i = 0; i < np - 1; i++) e->wgts[i] = wgt; - return e; - -} -void pedge_delete(pedge e){ - FREE(e->x); - FREE(e); -} - -pedge pedge_flip(pedge e){ - /* flip the polyline so that last point becomes the first, second last the second, etc*/ - real *y; - real *x = e->x; - int i, dim = e->dim; - int n = e->npoints; - - y = MALLOC(sizeof(real)*e->dim); - for (i = 0; i < (e->npoints)/2; i++){ - MEMCPY(y, &(x[i*dim]), sizeof(real)*dim); - MEMCPY(&(x[(n-1-i)*dim]), &(x[i*dim]), sizeof(real)*dim); - MEMCPY(&(x[i*dim]), y, sizeof(real)*dim); - } - FREE(y); - return e; -} - -static real edge_compatibility(pedge e1, pedge e2){ - /* two edges are u1->v1, u2->v2. - return 1 if two edges are exactly the same, 0 if they are very different. - */ - real *u1, *v1, *u2, *v2, *u, dist1, dist2, len1, len2; - int dim = e1->dim, flipped = FALSE; - - u1 = e1->x; - v1 = (e1->x)+(e1->npoints)*dim-dim; - u2 = e2->x; - v2 = (e2->x)+(e2->npoints)*dim-dim; - dist1 = sqr_dist(dim, u1, u2) + sqr_dist(dim, v1, v2); - dist2 = sqr_dist(dim, u1, v2) + sqr_dist(dim, v1, u2); - if (dist1 > dist2){ - u = u2; - u2 = v2; - v2 = u; - dist1 = dist2; - flipped = TRUE; - } - len1 = dist(dim, u1, v1); - len2 = dist(dim, u2, v2); - //dist1 = MAX(0.1, dist1/(len1+len2+dist1)); - dist1 = MAX(0.1, dist1/(len1+len2+0.0001*dist1)); - if (flipped){ - return -1/dist1; - } else { - return 1/dist1; - } -} - -static real edge_compatibility_full(pedge e1, pedge e2){ - /* two edges are u1->v1, u2->v2. - return 1 if two edges are exactly the same, 0 if they are very different. - This is based on Holten and van Wijk's paper - */ - real *u1, *v1, *u2, *v2, *u, dist1, dist2, len1, len2, len; - real tmp, ca, cp, cs; - int dim = e1->dim, flipped = FALSE, i; - - u1 = e1->x; - v1 = (e1->x)+(e1->npoints)*dim-dim; - u2 = e2->x; - v2 = (e2->x)+(e2->npoints)*dim-dim; - dist1 = sqr_dist(dim, u1, u2) + sqr_dist(dim, v1, v2); - dist2 = sqr_dist(dim, u1, v2) + sqr_dist(dim, v1, u2); - if (dist1 > dist2){ - u = u2; - u2 = v2; - v2 = u; - dist1 = dist2; - flipped = TRUE; - } - len1 = MAX(dist(dim, u1, v1), SMALL); - len2 = MAX(dist(dim, u2, v2), SMALL); - len = 0.5*(len1+len2); - - /* angle compatability */ - ca = 0; - for (i = 0; i < dim; i++) - ca += (v1[i]-u1[i])*(v2[i]-u2[i]); - ca = ABS(ca/(len1*len2)); - assert(ca > -0.001); - - /* scale compatability */ - //cs = 2/(len1/len2+len2/len1); - cs = 2/(MAX(len1,len2)/len + len/MIN(len1, len2)); - assert(cs > -0.001 && cs < 1.001); - - /* position compatability */ - cp = 0; - for (i = 0; i < dim; i++) { - tmp = .5*(v1[i]+u1[i])-.5*(v2[i]+u2[i]); - cp += tmp*tmp; - } - cp = sqrt(cp); - cp = len/(len + cp); - assert(cp > -0.001 && cp < 1.001); - - /* visibility compatability */ - - //dist1 = MAX(0.1, dist1/(len1+len2+dist1)); - dist1 = cp*ca*cs; - if (flipped){ - return -dist1; - } else { - return dist1; - } -} - -static void fprint_rgb(FILE* fp, int r, int g, int b, int alpha){ - fprintf(fp,"#"); - if (r >= 16) { - fprintf(fp,"%2x",r); - } else { - fprintf(fp,"0%1x",r); - } - if (g >= 16) { - fprintf(fp,"%2x",g); - } else { - fprintf(fp,"0%1x",g); - } - if (b >= 16) { - fprintf(fp,"%2x",b); - } else { - fprintf(fp,"0%1x",b); - } - if (alpha >= 16) { - fprintf(fp,"%2x",alpha); - } else { - fprintf(fp,"0%1x",alpha); - } - -} - -void pedge_export_gv(FILE *fp, int ne, pedge *edges){ - pedge edge; - real *x, t; - int i, j, k, kk, dim, sta, sto; - real maxwgt = 0, len, len_total, len_total0; - int r, g, b; - // real tt1[3]={0.25,0.5,0.75}; - // real tt2[4]={0.2,0.4,0.6,0.8}; - real tt1[3]={0.15,0.5,0.85}; - real tt2[4]={0.15,0.4,0.6,0.85}; - real *tt; - - fprintf(fp,"strict graph{\n"); - /* points */ - for (i = 0; i < ne; i++){ - edge = edges[i]; - x = edge->x; - dim = edge->dim; - sta = 0; sto = edge->npoints - 1; - - fprintf(fp, "%d [pos=\"", i); - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp, ","); - fprintf(fp, "%f", x[sta*dim+k]); - } - fprintf(fp, "\"];\n"); - - fprintf(fp, "%d [pos=\"", i + ne); - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp, ","); - fprintf(fp, "%f", x[sto*dim+k]); - } - fprintf(fp, "\"];\n"); - - } - - /* figure out max number of bundled origional edges in a pedge */ - for (i = 0; i < ne; i++){ - edge = edges[i]; - if (edge->wgts){ - for (j = 0; j < edge->npoints - 1; j++){ - maxwgt = MAX(maxwgt, edge->wgts[j]); - } - } - } - - /* spline and colors */ - for (i = 0; i < ne; i++){ - fprintf(fp,"%d -- %d [pos=\"", i, i + ne); - edge = edges[i]; - x = edge->x; - dim = edge->dim; - /* splines */ - for (j = 0; j < edge->npoints; j++){ - if (j != 0) { - int mm = 3; - fprintf(fp," "); - /* there are ninterval+1 points, add 3*ninterval+2 points, get rid of internal ninternal-1 points, - make into 3*ninterval+4 points so that gviz spline rendering can work */ - if (j == 1 || j == edge->npoints - 1) { - /* every interval gets 3 points inmserted except the first and last one */ - tt = tt2; - mm = 4; - } else { - tt = tt1; - } - for (kk = 1; kk <= mm; kk++){ - //t = kk/(real) (mm+1); - t = tt[kk-1]; - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp,","); - fprintf(fp, "%f", (x[(j-1)*dim+k]*(1-t)+x[j*dim+k]*(t))); - } - fprintf(fp," "); - } - } - if (j == 0 || j == edge->npoints - 1){ - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp,","); - fprintf(fp, "%f", x[j*dim+k]); - } - } - } - /* colors based on how much bundling */ - if (edge->wgts){ - fprintf(fp, "\", wgts=\""); - for (j = 0; j < edge->npoints - 1; j++){ - if (j != 0) fprintf(fp,","); - fprintf(fp, "%f", edge->wgts[j]); - } - - len_total = 0; - len_total0 = 0; - fprintf(fp, "\", color=\""); - for (j = 0; j < edge->npoints - 1; j++){ - len = 0; - for (k = 0; k < dim; k++){ - len += (edge->x[dim*j+k] - edge->x[dim*(j+1)+k])*(edge->x[dim*j+k] - edge->x[dim*(j+1)+k]); - } - len = sqrt(len/k); - len_total0 += len; - } - for (j = 0; j < edge->npoints - 1; j++){ - len = 0; - for (k = 0; k < dim; k++){ - len += (edge->x[dim*j+k] - edge->x[dim*(j+1)+k])*(edge->x[dim*j+k] - edge->x[dim*(j+1)+k]); - } - len = sqrt(len/k); - len_total += len; - t = edge->wgts[j]/maxwgt; - /* interpotate between red (t = 1) to blue (t = 0) */ - r = 255*t; g = 0; b = 255*(1-t); b = 255*(1-t); - if (j != 0) fprintf(fp,":"); - fprint_rgb(fp, r, g, b, 85); - if (j < edge->npoints - 2) fprintf(fp,";%f",len/len_total0); - } - - } - fprintf(fp, "\"];\n"); - - } - fprintf(fp,"}\n"); -} - -void pedge_export_mma(FILE *fp, int ne, pedge *edges){ - pedge edge; - real *x; - int i, j, k, dim; - - fprintf(fp,"Graphics[{"); - /* points */ - fprintf(fp,"{Red, "); - for (i = 0; i < ne; i++){ - if (i != 0) fprintf(fp,","); - fprintf(fp,"Point["); - edge = edges[i]; - x = edge->x; - dim = edge->dim; - fprintf(fp, "{"); - for (j = 0; j < edge->npoints; j+= edge->npoints - 1){ - if (j != 0) fprintf(fp,","); - fprintf(fp, "{"); - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp,","); - fprintf(fp, "%f", x[j*dim+k]); - } - fprintf(fp, "}"); - } - fprintf(fp, "}"); - fprintf(fp, "]"); - } - fprintf(fp,"},\n{GrayLevel[0.5,0.2], "); - - /* spline */ - for (i = 0; i < ne; i++){ - if (i != 0) fprintf(fp,","); - fprintf(fp,"Spline["); - edge = edges[i]; - x = edge->x; - dim = edge->dim; - fprintf(fp, "{"); - for (j = 0; j < edge->npoints; j++){ - if (j != 0) fprintf(fp,","); - fprintf(fp, "{"); - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(fp,","); - fprintf(fp, "%f", x[j*dim+k]); - } - fprintf(fp, "}"); - } - fprintf(fp, "}"); - fprintf(fp, ", Bezier]"); - } - fprintf(fp,"}"); - - fprintf(fp,"}]\n"); -} - -#ifdef DEBUG -static void pedge_print(char *comments, pedge e){ - int i, j, dim; - dim = e->dim; - fprintf(stderr,"%s", comments); - for (i = 0; i < e->npoints; i++){ - if (i > 0) fprintf(stderr,","); - fprintf(stderr,"{"); - for (j = 0; j < dim; j++){ - if (j > 0) fprintf(stderr,","); - fprintf(stderr,"%f",e->x[dim*i+j]); - } - fprintf(stderr,"}"); - } - fprintf(stderr,"\n"); -} -#endif - -pedge pedge_realloc(pedge e, int n){ - if (n <= e->npoints) return e; - e->x = REALLOC(e->x, e->dim*n*sizeof(real)); - if (e->wgts) e->wgts = REALLOC(e->wgts, (n-1)*sizeof(real)); - e->len = n; - return e; -} -pedge pedge_wgts_realloc(pedge e, int n){ - /* diff from pedge_alloc: allocate wgts if do not exist and initialize to wgt */ - int i; - if (n <= e->npoints) return e; - e->x = REALLOC(e->x, e->dim*n*sizeof(real)); - if (!(e->wgts)){ - e->wgts = REALLOC(e->wgts, (n-1)*sizeof(real)); - for (i = 0; i < e->npoints; i++) e->wgts[i] = e->wgt; - } else { - e->wgts = REALLOC(e->wgts, (n-1)*sizeof(real)); - } - e->len = n; - return e; -} - - -pedge pedge_double(pedge e){ - /* double the number of points (more precisely, add a point between two points in the polyline */ - int npoints = e->npoints, len = e->len, i, dim = e->dim; - real *x; - int j, ii, ii2, np; - - assert(npoints >= 2); - // pedge_print("before doubling edge = ", e); - if (npoints*2-1 > len){ - len = 3*npoints; - e->x = REALLOC(e->x, dim*len*sizeof(real)); - } - x = e->x; - - for (i = npoints - 1; i >= 0; i--){ - ii = 2*i; - for (j = 0; j < dim; j++){ - x[dim*ii + j] = x[dim*i + j]; - } - } - - for (i = 0; i < npoints - 1; i++){ - ii = 2*i;/* left and right interpolant of a new point */ - ii2 = 2*(i+1); - for (j = 0; j < dim; j++){ - x[dim*(2*i + 1) + j] = 0.5*(x[dim*ii + j] + x[dim*ii2 + j]); - } - } - e->len = len; - np = e->npoints = 2*(e->npoints) - 1; - e->edge_length = dist(dim, &(x[0*dim]), &(x[(np-1)*dim])); - - //pedge_print("after doubling edge = ", e); - - return e; -} - -static void edge_tension_force(real *force, pedge e){ - real *x = e->x; - int dim = e->dim; - int np = e->npoints; - int i, left, right, j; - //real dist_left, dist_right; - real s; - - - /* tention force = ((np-1)*||2x-xleft-xright||)/||e||, so the force is norminal and unitless - */ - //s = (np-1)*(np-1)/MAX(SMALL, e->edge_length); - s = (np-1)/MAX(SMALL, e->edge_length); - for (i = 1; i <= np - 2; i++){ - left = i - 1; - right = i + 1; - // dist_left = dist(dim, &(x[i*dim]), &(x[left*dim])); - // dist_right = dist(dim, &(x[i*dim]), &(x[right*dim])); - for (j = 0; j < dim; j++) force[i*dim + j] += s*(x[left*dim + j] - x[i*dim + j]); - for (j = 0; j < dim; j++) force[i*dim + j] += s*(x[right*dim + j] - x[i*dim + j]); - } -} - - -#if 0 -static void edge_tension_force2(real *force, pedge e){ - /* in this version each node is pulled towards its original position on the line */ - real *x = e->x; - int dim = e->dim; - int np = e->npoints; - int i, j; - //int left, right; - //real dist_left, dist_right; - real s; - - - /* tention force = ((np-1)*||2x-xleft-xright||)/||e||, so the force is norminal and unitless - */ - s = .1/MAX(SMALL, e->edge_length); - for (i = 1; i <= np - 2; i++){ - //left = i - 1; - // right = i + 1; - // dist_left = dist(dim, &(x[i*dim]), &(x[left*dim])); - // dist_right = dist(dim, &(x[i*dim]), &(x[right*dim])); - for (j = 0; j < dim; j++) force[i*dim + j] += s*((i*x[0*dim + j]+(np-1-i)*x[(np-1)*dim + j])/(np-1) - x[i*dim + j]); - } -} -#endif - -static void edge_attraction_force(real similarity, pedge e1, pedge e2, real *force){ - /* attrractive force from x2 applied to x1 */ - real *x1 = e1->x, *x2 = e2->x; - int dim = e1->dim; - int np = e1->npoints; - int i, j; - real dist, s, ss; - real edge_length = e1->edge_length; - - - assert(e1->npoints == e2->npoints); - - /* attractive force = 1/d where d = D/||e1|| is the relative distance, D is the distance between e1 and e2. - so the force is norminal and unitless - */ - if (similarity > 0){ - s = edge_length; - s = similarity*edge_length; - for (i = 1; i <= np - 2; i++){ - dist = sqr_dist(dim, &(x1[i*dim]), &(x2[i*dim])); - if (dist < SMALL) dist = SMALL; - ss = s/(dist+0.1*edge_length*sqrt(dist)); - for (j = 0; j < dim; j++) force[i*dim + j] += ss*(x2[i*dim + j] - x1[i*dim + j]); - } - } else {/* clip e2 */ - s = -edge_length; - s = -similarity*edge_length; - for (i = 1; i <= np - 2; i++){ - dist = sqr_dist(dim, &(x1[i*dim]), &(x2[(np - 1 - i)*dim])); - if (dist < SMALL) dist = SMALL; - ss = s/(dist+0.1*edge_length*sqrt(dist)); - for (j = 0; j < dim; j++) force[i*dim + j] += ss*(x2[(np - 1 - i)*dim + j] - x1[i*dim + j]); - } - } - -} - -static pedge* force_directed_edge_bundling(SparseMatrix A, pedge* edges, int maxit, real step0, real K, int open_gl){ - int i, j, ne = A->n, k; - int *ia = A->ia, *ja = A->ja, iter = 0; - real *a = (real*) A->a; - pedge e1, e2; - real *force_t, *force_a; - int np = edges[0]->npoints, dim = edges[0]->dim; - real *x; - real step = step0; - real fnorm_a, fnorm_t, edge_length, start; - - if (Verbose > 1) - fprintf(stderr, "total interaction pairs = %d out of %d, avg neighbors per edge = %f\n",A->nz, A->m*A->m, A->nz/(real) A->m); - - force_t = MALLOC(sizeof(real)*dim*(np)); - force_a = MALLOC(sizeof(real)*dim*(np)); - while (step > 0.001 && iter < maxit){ - start = clock(); - iter++; - for (i = 0; i < ne; i++){ - for (j = 0; j < dim*np; j++) { - force_t[j] = 0.; - force_a[j] = 0.; - } - e1 = edges[i]; - x = e1->x; - //edge_tension_force2(force_t, e1); - edge_tension_force(force_t, e1); - for (j = ia[i]; j < ia[i+1]; j++){ - e2 = edges[ja[j]]; - edge_attraction_force(a[j], e1, e2, force_a); - } - fnorm_t = MAX(SMALL, norm(dim*(np - 2), &(force_t[1*dim]))); - fnorm_a = MAX(SMALL, norm(dim*(np - 2), &(force_a[1*dim]))); - edge_length = e1->edge_length; - - // fprintf(stderr,"tension force norm = %f att force norm = %f step = %f edge_length = %f\n",fnorm_t, fnorm_a, step, edge_length); - for (j = 1; j <= np - 2; j++){ - for (k = 0; k < dim; k++) { - x[j*dim + k] += step*edge_length*(force_t[j*dim+k] + K*force_a[j*dim+k])/(sqrt(fnorm_t*fnorm_t + K*K*fnorm_a*fnorm_a)); - } - } - - /* - fprintf(stderr,"edge %d",i); - for (j = 0; j < np; j++){ - if (j != 0) fprintf(stderr,","); - fprintf(stderr,"{"); - for (k = 0; k < dim; k++) { - if (k != 0) fprintf(stderr,","); - fprintf(stderr,"%f", x[j*dim+k]); - } - fprintf(stderr,"}"); - } - fprintf(stderr,"\n"); - */ - - } - step = step*0.9; - if (Verbose > 1) - fprintf(stderr, "iter ==== %d cpu = %f npoints = %d\n",iter, ((real) (clock() - start))/CLOCKS_PER_SEC, np - 2); - -#ifdef OPENGL - if (open_gl){ - edges_global = edges; - drawScene(); - } -#endif - - } - - FREE(force_t); - FREE(force_a); - return edges; -} - -static real absfun(real x){ - return ABS(x); -} - - - - -static pedge* modularity_ink_bundling(int dim, int ne, SparseMatrix B, pedge* edges, real angle_param, real angle){ - int *assignment = NULL, flag, nclusters; - real modularity; - int *clusterp, *clusters; - SparseMatrix D, C; - point_t meet1, meet2; - real ink0, ink1; - pedge e; - int i, j, jj; - int use_value_for_clustering = TRUE; - - //int use_value_for_clustering = FALSE; - - SparseMatrix BB; - - /* B may contain negative entries */ - BB = SparseMatrix_copy(B); - BB = SparseMatrix_apply_fun(BB, absfun); - modularity_clustering(BB, TRUE, 0, use_value_for_clustering, &nclusters, &assignment, &modularity, &flag); - SparseMatrix_delete(BB); - -#ifdef OPENGL - clusters_global = assignment; -#endif - - assert(!flag); - if (Verbose > 1) fprintf(stderr, "there are %d clusters, modularity = %f\n",nclusters, modularity); - - C = SparseMatrix_new(1, 1, 1, MATRIX_TYPE_PATTERN, FORMAT_COORD); - - for (i = 0; i < ne; i++){ - jj = assignment[i]; - SparseMatrix_coordinate_form_add_entries(C, 1, &jj, &i, NULL); - } - - D = SparseMatrix_from_coordinate_format(C); - SparseMatrix_delete(C); - clusterp = D->ia; - clusters = D->ja; - for (i = 0; i < nclusters; i++){ - ink1 = ink(edges, clusterp[i+1] - clusterp[i], &(clusters[clusterp[i]]), &ink0, &meet1, &meet2, angle_param, angle); - if (Verbose > 1) - fprintf(stderr,"nedges = %d ink0 = %f, ink1 = %f\n",clusterp[i+1] - clusterp[i], ink0, ink1); - if (ink1 < ink0){ - for (j = clusterp[i]; j < clusterp[i+1]; j++){ - /* make this edge 5 points, insert two meeting points at 1 and 2, make 3 the last point */ - edges[clusters[j]] = pedge_double(edges[clusters[j]]); - e = edges[clusters[j]] = pedge_double(edges[clusters[j]]); - e->x[1*dim] = meet1.x; - e->x[1*dim+1] = meet1.y; - e->x[2*dim] = meet2.x; - e->x[2*dim+1] = meet2.y; - e->x[3*dim] = e->x[4*dim]; - e->x[3*dim+1] = e->x[4*dim+1]; - e->npoints = 4; - } -#ifdef OPENGL - edges_global = edges; - drawScene(); -#endif - } - } - SparseMatrix_delete(D); - return edges; -} - -static SparseMatrix check_compatibility(SparseMatrix A, int ne, pedge *edges, int compatibility_method, real tol){ - /* go through the links and make sure edges are compatable */ - SparseMatrix B, C; - int *ia, *ja, i, j, jj; - real start; - real dist; - - B = SparseMatrix_new(1, 1, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - ia = A->ia; ja = A->ja; - //SparseMatrix_print("A",A); - start = clock(); - for (i = 0; i < ne; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (i == jj) continue; - if (compatibility_method == COMPATIBILITY_DIST){ - dist = edge_compatibility_full(edges[i], edges[jj]); - } else if (compatibility_method == COMPATIBILITY_FULL){ - dist = edge_compatibility(edges[i], edges[jj]); - } - /* - fprintf(stderr,"edge %d = {",i); - pedge_print("", edges[i]); - fprintf(stderr,"edge %d = {",jj); - pedge_print("", edges[jj]); - fprintf(stderr,"compatibility=%f\n",dist); - */ - - if (ABS(dist) > tol){ - B = SparseMatrix_coordinate_form_add_entries(B, 1, &i, &jj, &dist); - B = SparseMatrix_coordinate_form_add_entries(B, 1, &jj, &i, &dist); - } - } - } - C = SparseMatrix_from_coordinate_format(B); - //SparseMatrix_print("C",C); - SparseMatrix_delete(B); - B = C; - if (Verbose > 1) - fprintf(stderr, "edge compatibilitu time = %f\n",((real) (clock() - start))/CLOCKS_PER_SEC); - return B; -} - -pedge* edge_bundling(SparseMatrix A0, int dim, real *x, int maxit_outer, real K, int method, int nneighbor, int compatibility_method, - int max_recursion, real angle_param, real angle, int open_gl){ - /* bundle edges. - A: edge graph - x: edge i is at {p,q}, - . where p = x[2*dim*i : 2*dim*i+dim-1] - . and q = x[2*dim*i+dim : 2*dim*i+2*dim-1] - maxit_outer: max outer iteration for force directed bundling. Every outer iter subdivide each edge segment into 2. - K: norminal edge length in force directed bundling - method: which method to use. - nneighbor: number of neighbors to be used in forming nearest neighbor graph. Used only in agglomerative method - compatibility_method: which method to use to calculate compatibility. Used only in force directed. - max_recursion: used only in agglomerative method. Specify how many level of recursion to do to bundle bundled edges again - open_gl: whether to plot in X. - - */ - int ne = A0->m; - pedge *edges; - SparseMatrix A = A0, B = NULL; - int i; - real tol = 0.001; - int k; - real step0 = 0.1, start = 0.0; - int maxit = 10; - int flag; - - assert(A->n == ne); - edges = MALLOC(sizeof(pedge)*ne); - - for (i = 0; i < ne; i++){ - edges[i] = pedge_new(2, dim, &(x[dim*2*i])); - } - - A = SparseMatrix_symmetrize(A0, TRUE); - - - - if (Verbose) start = clock(); - if (method == METHOD_INK){ - - /* go through the links and make sure edges are compatable */ - B = check_compatibility(A, ne, edges, compatibility_method, tol); - - edges = modularity_ink_bundling(dim, ne, B, edges, angle_param, angle); - - } else if (method == METHOD_INK_AGGLOMERATE){ -#ifdef HAVE_ANN - /* plan: merge a node with its neighbors if doing so improve. Form coarsening graph, repeat until no more ink saving */ - edges = agglomerative_ink_bundling(dim, A, edges, nneighbor, max_recursion, angle_param, angle, open_gl, &flag); - assert(!flag); -#else - agerr (AGERR, "Graphviz built without approximate nearest neighbor library ANN; agglomerative inking not available\n"); - edges = edges; -#endif - } else if (method == METHOD_FD){/* FD method */ - - /* go through the links and make sure edges are compatable */ - B = check_compatibility(A, ne, edges, compatibility_method, tol); - - - for (k = 0; k < maxit_outer; k++){ - for (i = 0; i < ne; i++){ - edges[i] = pedge_double(edges[i]); - } - step0 = step0/2; - edges = force_directed_edge_bundling(B, edges, maxit, step0, K, open_gl); - } - - } else if (method == METHOD_NONE){ - edges = edges; - } else { - assert(0); - } - if (Verbose) - fprintf(stderr, "total edge bundling cpu = %f\n",((real) (clock() - start))/CLOCKS_PER_SEC); - if (B != A) SparseMatrix_delete(B); - if (A != A0) SparseMatrix_delete(A); - - return edges; -} diff --git a/internal/ccall/mingle/edge_bundling.h b/internal/ccall/mingle/edge_bundling.h deleted file mode 100644 index 7d6018d..0000000 --- a/internal/ccall/mingle/edge_bundling.h +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef EDGE_BUNDLING_H -#define EDGE_BUNDLING_H - -#include - -struct pedge_struct { - real wgt; /* weight, telling how many original edges this edge represent. If this edge consists of multiple sections of different weights then this is a lower bound. This only applied for agglomerative bundling */ - int npoints;/* number of poly points */ - int len;/* length of arra x. len >= npoints */ - int dim;/* dim >= 2. Point i is stored from x[i*dim]*/ - real edge_length; - real *x;/* coordinates of the npoints poly points. Dimension dim*npoints */ - real *wgts;/* number of original edges each section represnet. Dimension npoint - 1. This only applied for agglomerative bundling Null for other methods */ -}; - -typedef struct pedge_struct* pedge; - -pedge* edge_bundling(SparseMatrix A, int dim, real *x, int maxit_outer, real K, int method, int nneighbor, int compatibility_method, int max_recursion, real angle_param, real angle, int open_gl); -void pedge_delete(pedge e); -pedge pedge_realloc(pedge e, int np); -pedge pedge_wgts_realloc(pedge e, int n); -void pedge_export_mma(FILE *fp, int ne, pedge *edges); -void pedge_export_gv(FILE *fp, int ne, pedge *edges); -enum {METHOD_NONE = -1, METHOD_FD, METHOD_INK_AGGLOMERATE, METHOD_INK}; -enum {COMPATIBILITY_DIST = 0, COMPATIBILITY_FULL}; -pedge pedge_new(int np, int dim, real *x); -pedge pedge_wgt_new(int np, int dim, real *x, real wgt); -pedge pedge_double(pedge e); - -/* flip the polyline so that last point becomes the first, second last the second, etc*/ -pedge pedge_flip(pedge e); - - -#endif /* EDGE_BUNDLING_H */ - - diff --git a/internal/ccall/mingle/ink.c b/internal/ccall/mingle/ink.c deleted file mode 100644 index c4c4f9e..0000000 --- a/internal/ccall/mingle/ink.c +++ /dev/null @@ -1,357 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include "types.h" -#include "globals.h" -#include "general.h" -#include "SparseMatrix.h" -#include "edge_bundling.h" -#include "ink.h" - -double ink_count; - -static point_t addPoint (point_t a, point_t b) -{ - a.x += b.x; - a.y += b.y; - return a; -} - -static point_t subPoint (point_t a, point_t b) -{ - a.x -= b.x; - a.y -= b.y; - return a; -} - -static point_t scalePoint (point_t a, double d) -{ - a.x *= d; - a.y *= d; - return a; -} - -static double dotPoint(point_t a, point_t b){ - return a.x*b.x + a.y*b.y; -} - - -point_t Origin; - -/* sumLengths: - */ -static double sumLengths_avoid_bad_angle(point_t* points, int npoints, point_t end, point_t meeting, real angle_param) -{ - /* avoid sharp turns, we want cos_theta to be as close to -1 as possible */ - int i; - double len0, len, sum = 0; - double diff_x, diff_y, diff_x0, diff_y0; - double cos_theta, cos_max = -10; - - diff_x0 = end.x-meeting.x; - diff_y0 = end.y-meeting.y; - len0 = sum = sqrt(diff_x0*diff_x0+diff_y0*diff_y0); - - // distance form each of 'points' till 'meeting' - for (i=0; iprec && dotPoint(diff, diff) > 1.e-20); - - meeting = scalePoint(addPoint(first,fourth),0.5); - *meet = meeting; - - return sumLengths(points, npoints, end, meeting); - -} - -static double project_to_line(point_t pt, point_t left, point_t right, real angle){ - /* pt - ^ ^ - . \ \ - . \ \ - d . a\ \ - . \ \ - . \ \ - . c \ alpha \ b - .<------left:0 ----------------------------> right:1. Find the projection of pt on the left--right line. If the turning angle is small, - | | - |<-------f--------- - we should get a negative number. Let a := left->pt, b := left->right, then we are calculating: - c = |a| cos(a,b)/|b| b - d = a - c - f = -ctan(alpha)*|d|/|b| b - and the project of alpha degree on the left->right line is - c-f = |a| cos(a,b)/|b| b - -ctan(alpha)*|d|/|b| b - = (|a| a.b/(|a||b|) + ctan(alpha)|a-c|)/|b| b - = (a.b/|b| + ctan(alpha)|a-c|)/|b| b - the dimentionless projection is: - a.b/|b|^2 + ctan(alpha)|a-c|/|b| - = a.b/|b|^2 + ctan(alpha)|d|/|b| - */ - - - point_t b, a; - real bnorm, dnorm; - real alpha, ccord; - - if (angle <=0 || angle >= M_PI) return 2;/* return outside of the interval which should be handled as a sign of infeasible turning angle */ - alpha = angle; - - assert(alpha > 0 && alpha < M_PI); - b = subPoint(right, left); - a = subPoint(pt, left); - bnorm = MAX(1.e-10, dotPoint(b, b)); - ccord = dotPoint(b, a)/bnorm; - dnorm = dotPoint(a,a)/bnorm - ccord*ccord; - if (alpha == M_PI/2){ - return ccord; - } else { - // assert(dnorm >= MIN(-1.e-5, -1.e-5*bnorm)); - return ccord + sqrt(MAX(0, dnorm))/tan(alpha); - } -} - - - - - - - - - -/* ink: - * Compute minimal ink used the input edges are bundled. - * Assumes tails all occur on one side and heads on the other. - */ -double ink(pedge* edges, int numEdges, int *pick, double *ink0, point_t *meet1, point_t *meet2, real angle_param, real angle) -{ - int i; - point_t begin, end, mid, diff; - pedge e; - real *x; - point_t* sources = N_NEW(numEdges, point_t); - point_t* targets = N_NEW(numEdges, point_t); - double inkUsed; - //double eps = 1.0e-2; - double eps = 1.0e-2; - double cend = 0, cbegin = 0; - double wgt = 0; - - // fprintf(stderr,"in ink code ========\n"); - ink_count += numEdges; - - *ink0 = 0; - - /* canonicalize so that edges 1,2,3 and 3,2,1 gives the same optimal ink */ - if (pick) vector_sort_int(numEdges, pick, TRUE); - - begin = end = Origin; - for (i = 0; i < numEdges; i++) { - if (pick) { - e = edges[pick[i]]; - } else { - e = edges[i]; - } - x = e->x; - sources[i].x = x[0]; - sources[i].y = x[1]; - targets[i].x = x[e->dim*e->npoints - e->dim]; - targets[i].y = x[e->dim*e->npoints - e->dim + 1]; - (*ink0) += sqrt((sources[i].x - targets[i].x)*(sources[i].x - targets[i].x) + (sources[i].y - targets[i].y)*(sources[i].y - targets[i].y)); - begin = addPoint (begin, scalePoint(sources[i], e->wgt)); - end = addPoint (end, scalePoint(targets[i], e->wgt)); - wgt += e->wgt; - //fprintf(stderr,"source={%f,%f}, target = {%f,%f}\n",sources[i].x, sources[i].y, - //targets[i].x, targets[i].y); - } - - begin = scalePoint (begin, 1.0/wgt); - end = scalePoint (end, 1.0/wgt); - - - if (numEdges == 1){ - *meet1 = begin; - *meet2 = end; - //fprintf(stderr,"ink used = %f\n",*ink0); - free (sources); - free (targets); - return *ink0; - } - - /* shift the begin and end point to avoid sharp turns */ - for (i = 0; i < numEdges; i++) { - if (pick) { - e = edges[pick[i]]; - } else { - e = edges[i]; - } - x = e->x; - sources[i].x = x[0]; - sources[i].y = x[1]; - targets[i].x = x[e->dim*e->npoints - e->dim]; - targets[i].y = x[e->dim*e->npoints - e->dim + 1]; - /* begin(1) ----------- mid(0) */ - if (i == 0){ - cbegin = project_to_line(sources[i], begin, end, angle); - cend = project_to_line(targets[i], end, begin, angle); - } else { - cbegin = MAX(cbegin, project_to_line(sources[i], begin, end, angle)); - cend = MAX(cend, project_to_line(targets[i], end, begin, angle)); - } - } - - if (angle > 0 && angle < M_PI){ - if (cbegin + cend > 1 || cbegin > 1 || cend > 1){ - /* no point can be found that satisfies the angular constraints, so we give up and set ink to a large value */ - if (Verbose && 0) fprintf(stderr,"no point satisfying any angle constraints can be found. cbeg=%f cend=%f\n",cbegin,cend); - inkUsed = 1000*(*ink0); - *meet1 = *meet2 = mid; - free (sources); - free (targets); - return inkUsed; - } - /* make sure the turning angle is no more than alpha degree */ - cbegin = MAX(0, cbegin);/* make sure the new adjusted point is with in [begin,end] internal */ - diff = subPoint(end, begin); - begin = addPoint(begin, scalePoint(diff, cbegin)); - - cend = MAX(0, cend);/* make sure the new adjusted point is with in [end,begin] internal */ - end = subPoint(end, scalePoint(diff, cend)); - } - mid = scalePoint (addPoint(begin,end),0.5); - - inkUsed = (bestInk (sources, numEdges, begin, mid, eps, meet1, angle_param) - + bestInk (targets, numEdges, end, mid, eps, meet2, angle_param)); - //fprintf(stderr,"beg={%f,%f}, meet1={%f,%f}, meet2={%f,%f}, mid={%f,%f}, end={%f,%f}\n",begin.x, begin.y, meet1->x, meet1->y, meet2->x, meet2->y, - //mid.x, mid.y, end.x, end.y); - - //fprintf(stderr,"ink used = %f\n",inkUsed); - // fprintf(stderr,"{cb,ce}={%f, %f} end={%f,%f}, meet={%f,%f}, mid={%f,%f}\n",cbegin, cend, end.x, end.y, meet2->x, meet2->y, mid.x, mid.y); - free (sources); - free (targets); - return inkUsed; -} - - -double ink1(pedge e){ - - - real *x, xx, yy; - - real ink0 = 0; - - x = e->x; - xx = x[0] - x[e->dim*e->npoints - e->dim]; - yy = x[1] - x[e->dim*e->npoints - e->dim + 1]; - ink0 += sqrt(xx*xx + yy*yy); - return ink0; -} diff --git a/internal/ccall/mingle/ink.h b/internal/ccall/mingle/ink.h deleted file mode 100644 index 09be9f5..0000000 --- a/internal/ccall/mingle/ink.h +++ /dev/null @@ -1,37 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef INK_H -#define INK_H - -#include - -typedef struct { - double x, y; -} point_t; - -/* given a list of edges, find the best ink bundling by making them meet at 2 points - \ / - -meet1 ---------- meet2 - - / \ - edges: list of edges - numEdges: number of edges - pick: if not NULL, consider edges pick[0], pick[1], ..., pick[numedges-1], - . othetwise consider edges 0, 1, ..., numEdge-1 - ink0: ink needed if no bundling - meet1, meet2: meeting point - return: best ink needed if bundled. -*/ -double ink(pedge* edges, int numEdges, int *pick, double *ink0, point_t *meet1, point_t *meet2, real angle_param, real angle); -double ink1(pedge e); - -extern double ink_count; - -#endif /* INK_H */ diff --git a/internal/ccall/mingle/nearest_neighbor_graph.c b/internal/ccall/mingle/nearest_neighbor_graph.c deleted file mode 100644 index 8d09aa2..0000000 --- a/internal/ccall/mingle/nearest_neighbor_graph.c +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "general.h" -#include "SparseMatrix.h" -#include "nearest_neighbor_graph_ann.h" -#include "nearest_neighbor_graph.h" - -SparseMatrix nearest_neighbor_graph(int nPts, int num_neigbors, int dim, double *x, double eps){ - /* Gives a nearest neighbor graph of a list of dim-dimendional points. The result is a sparse matrix - of nPts x nPts, with num_neigbors entries per row. - - nPts: number of points - num_neigbors: number of neighbors needed - dim: dimension - eps: error tolerance - x: nPts*dim vector. The i-th point is x[i*dim : i*dim + dim - 1] - - */ - int *irn = NULL, *jcn = NULL, nz; - real *val = NULL; - SparseMatrix A; - int k = num_neigbors; - - /* need to *2 as we do two sweeps of neighbors, so could have repeats */ - irn = MALLOC(sizeof(int)*nPts*k*2); - jcn = MALLOC(sizeof(int)*nPts*k*2); - val = MALLOC(sizeof(double)*nPts*k*2); - -#ifdef HAVE_ANN - nearest_neighbor_graph_ann(nPts, dim, num_neigbors, eps, x, &nz, &irn, &jcn, &val); - - A = SparseMatrix_from_coordinate_arrays(nz, nPts, nPts, irn, jcn, (void *) val, MATRIX_TYPE_REAL, sizeof(real)); -#else - A = NULL; -#endif - - FREE(irn); - FREE(jcn); - FREE(val); - - return A; - - -} diff --git a/internal/ccall/mingle/nearest_neighbor_graph.h b/internal/ccall/mingle/nearest_neighbor_graph.h deleted file mode 100644 index 3a042eb..0000000 --- a/internal/ccall/mingle/nearest_neighbor_graph.h +++ /dev/null @@ -1,16 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef NEAREST_NEIGHBOR_GRAPH_H -#define NEAREST_NEIGHBOR_GRAPH_H - -SparseMatrix nearest_neighbor_graph(int nPts, int num_neigbors, int dim, double *x, double eps); - -#endif /* NEAREST_NEIGHBOR_GRAPH_H */ diff --git a/internal/ccall/mingle/nearest_neighbor_graph_ann.cpp b/internal/ccall/mingle/nearest_neighbor_graph_ann.cpp deleted file mode 100644 index 27f54ef..0000000 --- a/internal/ccall/mingle/nearest_neighbor_graph_ann.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#ifdef HAVE_ANN -//---------------------------------------------------------------------- -// File: get_nearest_neighb_graph.cpp -//---------------------------------------------------------------------- - -#include // C standard library -#include // C I/O (for sscanf) -#include // string manipulation -#include // file I/O -#include // ANN declarations - -using namespace std; // make std:: accessible -int dim = 4; // dimension - - -static void printPt(ostream &out, ANNpoint p) // print point -{ - out << "" << p[0]; - for (int i = 1; i < dim; i++) { - out << "," << p[i]; - } - out << ""; -} - -static void sortPtsX(int n, ANNpointArray pts){ - /* sort so that edges always go from left to right in x-doordinate */ - ANNpoint p; - ANNcoord x, y; - int i, j; - for (i = 0; i < n; i++){ - for (j = 0; j < dim; j++){ - p = pts[i]; - if (p[0] < p[2] || (p[0] == p[2] && p[1] < p[3])) continue; - x = p[0]; y = p[1]; - p[0] = p[2]; - p[1] = p[3]; - p[2] = x; - p[3] = y; - } - } -} - -static void sortPtsY(int n, ANNpointArray pts){ - /* sort so that edges always go from left to right in x-doordinate */ - ANNpoint p; - ANNcoord x, y; - int i, j; - for (i = 0; i < n; i++){ - for (j = 0; j < dim; j++){ - p = pts[i]; - if (p[1] < p[3] || (p[1] == p[3] && p[0] < p[2])) continue; - x = p[0]; y = p[1]; - p[0] = p[2]; - p[1] = p[3]; - p[2] = x; - p[3] = y; - } - } -} - - -extern "C" void nearest_neighbor_graph_ann(int nPts, int dim, int k, double eps, double *x, int *nz0, int **irn0, int **jcn0, double **val0); - -void nearest_neighbor_graph_ann(int nPts, int dim, int k, double eps, double *x, int *nz0, int **irn0, int **jcn0, double **val0){ - - /* Gives a nearest neighbor graph is a list of dim-dimendional points. The connectivity is in irn/jcn, and the distance in val. - - nPts: number of points - dim: dimension - k: number of neighbors needed - eps: error tolerance - x: nPts*dim vector. The i-th point is x[i*dim : i*dim + dim - 1] - nz: number of entries in the connectivity matrix irn/jcn/val - irn, jcn: the connectivity - val: the distance - - note that there could be repeates - */ - - ANNpointArray dataPts; // data points - ANNidxArray nnIdx; // near neighbor indices - ANNdistArray dists; // near neighbor distances - ANNkd_tree* kdTree; // search structure - - double *xx; - int *irn, *jcn; - double *val; - int nz; - - irn = *irn0; - jcn = *jcn0; - val = *val0; - - - dataPts = annAllocPts(nPts, dim); // allocate data points - nnIdx = new ANNidx[k]; // allocate near neigh indices - dists = new ANNdist[k]; // allocate near neighbor dists - - for (int i = 0; i < nPts; i++){ - xx = dataPts[i]; - for (int j = 0; j < dim; j++) xx[j] = x[i*dim + j]; - } - - //========= graph when sort based on x ======== - nz = 0; - sortPtsX(nPts, dataPts); - kdTree = new ANNkd_tree( // build search structure - dataPts, // the data points - nPts, // number of points - dim); // dimension of space - for (int ip = 0; ip < nPts; ip++){ - kdTree->annkSearch( // search - dataPts[ip], // query point - k, // number of near neighbors - nnIdx, // nearest neighbors (returned) - dists, // distance (returned) - eps); // error bound - - for (int i = 0; i < k; i++) { // print summary - if (nnIdx[i] == ip) continue; - val[nz] = dists[i]; - irn[nz] = ip; - jcn[nz++] = nnIdx[i]; - //cout << ip << "--" << nnIdx[i] << " [len = " << dists[i]<< ", weight = \"" << 1./(dists[i]) << "\", wt = \"" << 1./(dists[i]) << "\"]\n"; - //printPt(cout, dataPts[ip]); - //cout << "--"; - //printPt(cout, dataPts[nnIdx[i]]); - //cout << "\n"; - } - } - - - //========= graph when sort based on y ======== - sortPtsY(nPts, dataPts); - kdTree = new ANNkd_tree( // build search structure - dataPts, // the data points - nPts, // number of points - dim); // dimension of space - for (int ip = 0; ip < nPts; ip++){ - kdTree->annkSearch( // search - dataPts[ip], // query point - k, // number of near neighbors - nnIdx, // nearest neighbors (returned) - dists, // distance (returned) - eps); // error bound - - for (int i = 0; i < k; i++) { // print summary - if (nnIdx[i] == ip) continue; - val[nz] = dists[i]; - irn[nz] = ip; - jcn[nz++] = nnIdx[i]; - // cout << ip << "--" << nnIdx[i] << " [len = " << dists[i]<< ", weight = \"" << 1./(dists[i]) << "\", wt = \"" << 1./(dists[i]) << "\"]\n"; - } - } - - delete [] nnIdx; // clean things up - delete [] dists; - delete kdTree; - - *nz0 = nz; - - annClose(); // done with ANN - - - -} - -#endif /* HAVE_ANN */ diff --git a/internal/ccall/mingle/nearest_neighbor_graph_ann.h b/internal/ccall/mingle/nearest_neighbor_graph_ann.h deleted file mode 100644 index f30ee5b..0000000 --- a/internal/ccall/mingle/nearest_neighbor_graph_ann.h +++ /dev/null @@ -1,16 +0,0 @@ -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef NEAREST_NEIGHBOR_GRAPH_ANN_H -#define NEAREST_NEIGHBOR_GRAPH_ANN_H - -void nearest_neighbor_graph_ann(int nPts, int dim, int k, double eps, double *x, int *nz0, int **irn0, int **jcn0, double **val0); - -#endif /* NEAREST_NEIGHBOR_GRAPH_ANN_H */ diff --git a/internal/ccall/neatogen.c b/internal/ccall/neatogen.c deleted file mode 100644 index 0d034c4..0000000 --- a/internal/ccall/neatogen.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "neatogen/adjust.c" -#include "neatogen/circuit.c" -#include "neatogen/edges.c" -#include "neatogen/geometry.c" -#include "neatogen/heap.c" -#include "neatogen/hedges.c" -#include "neatogen/info.c" -#include "neatogen/neatoinit.c" -#include "neatogen/legal.c" -#include "neatogen/lu.c" -#include "neatogen/matinv.c" -#include "neatogen/memory.c" -#include "neatogen/poly.c" -#include "neatogen/printvis.c" -#include "neatogen/site.c" -#include "neatogen/solve.c" -#include "neatogen/neatosplines.c" -#include "neatogen/stuff.c" -#include "neatogen/voronoi.c" -#include "neatogen/stress.c" -#include "neatogen/kkutils.c" -#include "neatogen/matrix_ops.c" -#include "neatogen/embed_graph.c" -#include "neatogen/dijkstra.c" -#include "neatogen/conjgrad.c" -#include "neatogen/pca.c" -#include "neatogen/closest.c" -#include "neatogen/bfs.c" -#include "neatogen/constraint.c" -#include "neatogen/quad_prog_solve.c" -#include "neatogen/smart_ini_x.c" -#include "neatogen/constrained_majorization.c" -#include "neatogen/opt_arrangement.c" -#include "neatogen/overlap.c" -#include "neatogen/call_tri.c" -#include "neatogen/compute_hierarchy.c" -#include "neatogen/delaunay.c" -#include "neatogen/multispline.c" diff --git a/internal/ccall/neatogen/adjust.c b/internal/ccall/neatogen/adjust.c deleted file mode 100644 index 3f36fa2..0000000 --- a/internal/ccall/neatogen/adjust.c +++ /dev/null @@ -1,1331 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* adjust.c - * Routines for repositioning nodes after initial layout in - * order to reduce/remove node overlaps. - */ - -#include "neato.h" -#include "agxbuf.h" -#include "utils.h" -#include "ctype.h" -#include "voronoi.h" -#include "info.h" -#include "edges.h" -#include "site.h" -#include "heap.h" -#include "hedges.h" -#include "digcola.h" -#if ((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) -#include "overlap.h" -#endif -#ifdef IPSEPCOLA -#include "csolve_VPSC.h" -#include "quad_prog_vpsc.h" -#endif - -#define SEPFACT 0.8 /* default esep/sep */ - -static double margin = 0.05; /* Create initial bounding box by adding - * margin * dimension around box enclosing - * nodes. - */ -static double incr = 0.05; /* Increase bounding box by adding - * incr * dimension around box. - */ -static int iterations = -1; /* Number of iterations */ -static int useIter = 0; /* Use specified number of iterations */ - -static int doAll = 0; /* Move all nodes, regardless of overlap */ -static Site **sites; /* Array of pointers to sites; used in qsort */ -static Site **endSite; /* Sentinel on sites array */ -static Point nw, ne, sw, se; /* Corners of clipping window */ - -static Site **nextSite; - -static void setBoundBox(Point * ll, Point * ur) -{ - pxmin = ll->x; - pxmax = ur->x; - pymin = ll->y; - pymax = ur->y; - nw.x = sw.x = pxmin; - ne.x = se.x = pxmax; - nw.y = ne.y = pymax; - sw.y = se.y = pymin; -} - - /* freeNodes: - * Free node resources. - */ -static void freeNodes(void) -{ - int i; - Info_t *ip = nodeInfo; - - for (i = 0; i < nsites; i++) { - breakPoly(&ip->poly); - ip++; - } - polyFree(); - infoinit(); /* Free vertices */ - free(nodeInfo); -} - -/* chkBoundBox: - * Compute extremes of graph, then set up bounding box. - * If user supplied a bounding box, use that; - * else if "window" is a graph attribute, use that; - * otherwise, define bounding box as a percentage expansion of - * graph extremes. - * In the first two cases, check that graph fits in bounding box. - */ -static void chkBoundBox(Agraph_t * graph) -{ - char *marg; - Point ll, ur; - int i; - double x, y; - double xmin, xmax, ymin, ymax; - double xmn, xmx, ymn, ymx; - double ydelta, xdelta; - Info_t *ip; - Poly *pp; - /* int cnt; */ - - ip = nodeInfo; - pp = &ip->poly; - x = ip->site.coord.x; - y = ip->site.coord.y; - xmin = pp->origin.x + x; - ymin = pp->origin.y + y; - xmax = pp->corner.x + x; - ymax = pp->corner.y + y; - for (i = 1; i < nsites; i++) { - ip++; - pp = &ip->poly; - x = ip->site.coord.x; - y = ip->site.coord.y; - xmn = pp->origin.x + x; - ymn = pp->origin.y + y; - xmx = pp->corner.x + x; - ymx = pp->corner.y + y; - if (xmn < xmin) - xmin = xmn; - if (ymn < ymin) - ymin = ymn; - if (xmx > xmax) - xmax = xmx; - if (ymx > ymax) - ymax = ymx; - } - - marg = agget(graph, "voro_margin"); - if (marg && (*marg != '\0')) { - margin = atof(marg); - } - ydelta = margin * (ymax - ymin); - xdelta = margin * (xmax - xmin); - ll.x = xmin - xdelta; - ll.y = ymin - ydelta; - ur.x = xmax + xdelta; - ur.y = ymax + ydelta; - - setBoundBox(&ll, &ur); -} - - /* makeInfo: - * For each node in the graph, create a Info data structure - */ -static int makeInfo(Agraph_t * graph) -{ - Agnode_t *node; - int i; - Info_t *ip; - expand_t pmargin; - int (*polyf)(Poly *, Agnode_t *, float, float); - - nsites = agnnodes(graph); - geominit(); - - nodeInfo = N_GNEW(nsites, Info_t); - - node = agfstnode(graph); - ip = nodeInfo; - - pmargin = sepFactor (graph); - - if (pmargin.doAdd) { - polyf = makeAddPoly; - /* we need inches for makeAddPoly */ - pmargin.x = PS2INCH(pmargin.x); - pmargin.y = PS2INCH(pmargin.y); - } - - else polyf = makePoly; - for (i = 0; i < nsites; i++) { - ip->site.coord.x = ND_pos(node)[0]; - ip->site.coord.y = ND_pos(node)[1]; - - if (polyf(&ip->poly, node, pmargin.x, pmargin.y)) { - free (nodeInfo); - nodeInfo = NULL; - return 1; - } - - ip->site.sitenbr = i; - ip->site.refcnt = 1; - ip->node = node; - ip->verts = NULL; - node = agnxtnode(graph, node); - ip++; - } - return 0; -} - -/* sort sites on y, then x, coord */ -static int scomp(const void *S1, const void *S2) -{ - Site *s1, *s2; - - s1 = *(Site **) S1; - s2 = *(Site **) S2; - if (s1->coord.y < s2->coord.y) - return (-1); - if (s1->coord.y > s2->coord.y) - return (1); - if (s1->coord.x < s2->coord.x) - return (-1); - if (s1->coord.x > s2->coord.x) - return (1); - return (0); -} - - /* sortSites: - * Fill array of pointer to sites and sort the sites using scomp - */ -static void sortSites(void) -{ - int i; - Site **sp; - Info_t *ip; - - if (sites == 0) { - sites = N_GNEW(nsites, Site *); - endSite = sites + nsites; - } - - sp = sites; - ip = nodeInfo; - infoinit(); - for (i = 0; i < nsites; i++) { - *sp++ = &(ip->site); - ip->verts = NULL; - ip->site.refcnt = 1; - ip++; - } - - qsort(sites, nsites, sizeof(Site *), scomp); - - /* Reset site index for nextOne */ - nextSite = sites; - -} - -static void geomUpdate(int doSort) -{ - int i; - - if (doSort) - sortSites(); - - /* compute ranges */ - xmin = sites[0]->coord.x; - xmax = sites[0]->coord.x; - for (i = 1; i < nsites; i++) { - if (sites[i]->coord.x < xmin) - xmin = sites[i]->coord.x; - if (sites[i]->coord.x > xmax) - xmax = sites[i]->coord.x; - } - ymin = sites[0]->coord.y; - ymax = sites[nsites - 1]->coord.y; - - deltay = ymax - ymin; - deltax = xmax - xmin; -} - -static Site *nextOne(void) -{ - Site *s; - - if (nextSite < endSite) { - s = *nextSite++; - return (s); - } else - return ((Site *) NULL); -} - -/* rmEquality: - * Check for nodes with identical positions and tweak - * the positions. - */ -static void rmEquality(void) -{ - int i, cnt; - Site **ip; - Site **jp; - Site **kp; - double xdel; - - sortSites(); - ip = sites; - - while (ip < endSite) { - jp = ip + 1; - if ((jp >= endSite) || - ((*jp)->coord.x != (*ip)->coord.x) || - ((*jp)->coord.y != (*ip)->coord.y)) { - ip = jp; - continue; - } - - /* Find first node kp with position different from ip */ - cnt = 2; - kp = jp + 1; - while ((kp < endSite) && - ((*kp)->coord.x == (*ip)->coord.x) && - ((*kp)->coord.y == (*ip)->coord.y)) { - cnt++; - jp = kp; - kp = jp + 1; - } - - /* If next node exists and is on the same line */ - if ((kp < endSite) && ((*kp)->coord.y == (*ip)->coord.y)) { - xdel = ((*kp)->coord.x - (*ip)->coord.x) / cnt; - i = 1; - for (jp = ip + 1; jp < kp; jp++) { - (*jp)->coord.x += i * xdel; - i++; - } - } else { /* nothing is to the right */ - Info_t *info; - for (jp = ip + 1; jp < kp; ip++, jp++) { - info = nodeInfo + (*ip)->sitenbr; - xdel = info->poly.corner.x - info->poly.origin.x; - info = nodeInfo + (*jp)->sitenbr; - xdel += info->poly.corner.x - info->poly.origin.x; - (*jp)->coord.x = (*ip)->coord.x + xdel / 2; - } - } - ip = kp; - } -} - -/* countOverlap: - * Count number of node-node overlaps at iteration iter. - */ -static int countOverlap(int iter) -{ - int count = 0; - int i, j; - Info_t *ip = nodeInfo; - Info_t *jp; - - for (i = 0; i < nsites; i++) - nodeInfo[i].overlaps = 0; - - for (i = 0; i < nsites - 1; i++) { - jp = ip + 1; - for (j = i + 1; j < nsites; j++) { - if (polyOverlap - (ip->site.coord, &ip->poly, jp->site.coord, &jp->poly)) { - count++; - ip->overlaps = 1; - jp->overlaps = 1; - } - jp++; - } - ip++; - } - - if (Verbose > 1) - fprintf(stderr, "overlap [%d] : %d\n", iter, count); - return count; -} - -static void increaseBoundBox(void) -{ - double ydelta, xdelta; - Point ll, ur; - - ur.x = pxmax; - ur.y = pymax; - ll.x = pxmin; - ll.y = pymin; - - ydelta = incr * (ur.y - ll.y); - xdelta = incr * (ur.x - ll.x); - - ur.x += xdelta; - ur.y += ydelta; - ll.x -= xdelta; - ll.y -= ydelta; - - setBoundBox(&ll, &ur); -} - - /* areaOf: - * Area of triangle whose vertices are a,b,c - */ -static double areaOf(Point a, Point b, Point c) -{ - double area; - - area = - (double) (fabs - (a.x * (b.y - c.y) + b.x * (c.y - a.y) + - c.x * (a.y - b.y)) / 2); - return area; -} - - /* centroidOf: - * Compute centroid of triangle with vertices a, b, c. - * Return coordinates in x and y. - */ -static void centroidOf(Point a, Point b, Point c, double *x, double *y) -{ - *x = (a.x + b.x + c.x) / 3; - *y = (a.y + b.y + c.y) / 3; -} - - /* newpos; - * The new position is the centroid of the - * voronoi polygon. This is the weighted sum of the - * centroids of a triangulation, normalized to the - * total area. - */ -static void newpos(Info_t * ip) -{ - PtItem *anchor = ip->verts; - PtItem *p, *q; - double totalArea = 0.0; - double cx = 0.0; - double cy = 0.0; - double x; - double y; - double area; - - p = anchor->next; - q = p->next; - while (q != NULL) { - area = areaOf(anchor->p, p->p, q->p); - centroidOf(anchor->p, p->p, q->p, &x, &y); - cx = cx + area * x; - cy = cy + area * y; - totalArea = totalArea + area; - p = q; - q = q->next; - } - - ip->site.coord.x = cx / totalArea; - ip->site.coord.y = cy / totalArea; -} - - /* addCorners: - * Add corners of clipping window to appropriate sites. - * A site gets a corner if it is the closest site to that corner. - */ -static void addCorners(void) -{ - Info_t *ip = nodeInfo; - Info_t *sws = ip; - Info_t *nws = ip; - Info_t *ses = ip; - Info_t *nes = ip; - double swd = dist_2(&ip->site.coord, &sw); - double nwd = dist_2(&ip->site.coord, &nw); - double sed = dist_2(&ip->site.coord, &se); - double ned = dist_2(&ip->site.coord, &ne); - double d; - int i; - - ip++; - for (i = 1; i < nsites; i++) { - d = dist_2(&ip->site.coord, &sw); - if (d < swd) { - swd = d; - sws = ip; - } - d = dist_2(&ip->site.coord, &se); - if (d < sed) { - sed = d; - ses = ip; - } - d = dist_2(&ip->site.coord, &nw); - if (d < nwd) { - nwd = d; - nws = ip; - } - d = dist_2(&ip->site.coord, &ne); - if (d < ned) { - ned = d; - nes = ip; - } - ip++; - } - - addVertex(&sws->site, sw.x, sw.y); - addVertex(&ses->site, se.x, se.y); - addVertex(&nws->site, nw.x, nw.y); - addVertex(&nes->site, ne.x, ne.y); -} - - /* newPos: - * Calculate the new position of a site as the centroid - * of its voronoi polygon, if it overlaps other nodes. - * The polygons are finite by being clipped to the clipping - * window. - * We first add the corner of the clipping windows to the - * vertex lists of the appropriate sites. - */ -static void newPos(void) -{ - int i; - Info_t *ip = nodeInfo; - - addCorners(); - for (i = 0; i < nsites; i++) { - if (doAll || ip->overlaps) - newpos(ip); - ip++; - } -} - -/* cleanup: - * Cleanup voronoi memory. - * Note that PQcleanup and ELcleanup rely on the number - * of sites, so should at least be reset everytime we use - * vAdjust. - * This could be optimized, over multiple components or - * even multiple graphs, but probably not worth it. - */ -static void cleanup(void) -{ - PQcleanup(); - ELcleanup(); - siteinit(); /* free memory */ - edgeinit(); /* free memory */ -} - -static int vAdjust(void) -{ - int iterCnt = 0; - int overlapCnt = 0; - int badLevel = 0; - int increaseCnt = 0; - int cnt; - - if (!useIter || (iterations > 0)) - overlapCnt = countOverlap(iterCnt); - - if ((overlapCnt == 0) || (iterations == 0)) - return 0; - - rmEquality(); - geomUpdate(0); - voronoi(0, nextOne); - while (1) { - newPos(); - iterCnt++; - - if (useIter && (iterCnt == iterations)) - break; - cnt = countOverlap(iterCnt); - if (cnt == 0) - break; - if (cnt >= overlapCnt) - badLevel++; - else - badLevel = 0; - overlapCnt = cnt; - - switch (badLevel) { - case 0: - doAll = 1; - break; -/* - case 1: - doAll = 1; - break; -*/ - default: - doAll = 1; - increaseCnt++; - increaseBoundBox(); - break; - } - - geomUpdate(1); - voronoi(0, nextOne); - } - - if (Verbose) { - fprintf(stderr, "Number of iterations = %d\n", iterCnt); - fprintf(stderr, "Number of increases = %d\n", increaseCnt); - } - - cleanup(); - return 1; -} - -static double rePos(Point c) -{ - int i; - Info_t *ip = nodeInfo; - double f = 1.0 + incr; - - for (i = 0; i < nsites; i++) { - /* ip->site.coord.x = f*(ip->site.coord.x - c.x) + c.x; */ - /* ip->site.coord.y = f*(ip->site.coord.y - c.y) + c.y; */ - ip->site.coord.x = f * ip->site.coord.x; - ip->site.coord.y = f * ip->site.coord.y; - ip++; - } - return f; -} - -static int sAdjust(void) -{ - int iterCnt = 0; - int overlapCnt = 0; - int cnt; - Point center; - /* double sc; */ - - if (!useIter || (iterations > 0)) - overlapCnt = countOverlap(iterCnt); - - if ((overlapCnt == 0) || (iterations == 0)) - return 0; - - rmEquality(); - center.x = (pxmin + pxmax) / 2.0; - center.y = (pymin + pymax) / 2.0; - while (1) { - /* sc = */ rePos(center); - iterCnt++; - - if (useIter && (iterCnt == iterations)) - break; - cnt = countOverlap(iterCnt); - if (cnt == 0) - break; - } - - if (Verbose) { - fprintf(stderr, "Number of iterations = %d\n", iterCnt); - } - - return 1; -} - - /* updateGraph: - * Enter new node positions into the graph - */ -static void updateGraph(Agraph_t * graph) -{ - /* Agnode_t* node; */ - int i; - Info_t *ip; - /* char pos[100]; */ - - ip = nodeInfo; - for (i = 0; i < nsites; i++) { - ND_pos(ip->node)[0] = ip->site.coord.x; - ND_pos(ip->node)[1] = ip->site.coord.y; - ip++; - } -} - -#define ELS "|edgelabel|" -#define ELSN (sizeof(ELS)-1) - /* Return true if node name starts with ELS */ -#define IS_LNODE(n) (!strncmp(agnameof(n),ELS,ELSN)) - -/* getSizes: - * Set up array of half sizes in inches. - */ -double *getSizes(Agraph_t * g, pointf pad, int* n_elabels, int** elabels) -{ - Agnode_t *n; - real *sizes = N_GNEW(2 * agnnodes(g), real); - int i, nedge_nodes = 0; - int* elabs; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (elabels && IS_LNODE(n)) nedge_nodes++; - - i = ND_id(n); - sizes[i * 2] = ND_width(n) * .5 + pad.x; - sizes[i * 2 + 1] = ND_height(n) * .5 + pad.y; - } - - if (elabels && nedge_nodes) { - elabs = N_GNEW(nedge_nodes, int); - nedge_nodes = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (IS_LNODE(n)) - elabs[nedge_nodes++] = ND_id(n); - } - *elabels = elabs; - *n_elabels = nedge_nodes; - } - - return sizes; -} - -/* makeMatrix: - * Assumes g is connected and simple, i.e., we can have a->b and b->a - * but not a->b and a->b - */ -SparseMatrix makeMatrix(Agraph_t* g, int dim, SparseMatrix *D) -{ - SparseMatrix A = 0; - Agnode_t *n; - Agedge_t *e; - Agsym_t *sym; - int nnodes; - int nedges; - int i, row; - int *I; - int *J; - real *val; - real v; - int type = MATRIX_TYPE_REAL; - Agsym_t* symD = NULL; - real* valD = NULL; - - if (!g) - return NULL; - nnodes = agnnodes(g); - nedges = agnedges(g); - - /* Assign node ids */ - i = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ND_id(n) = i++; - - I = N_GNEW(nedges, int); - J = N_GNEW(nedges, int); - val = N_GNEW(nedges, real); - - sym = agfindedgeattr(g, "weight"); - if (D) { - symD = agfindedgeattr(g, "len"); - valD = N_NEW(nedges, real); - } - - i = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - row = ND_id(n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - I[i] = row; - J[i] = ND_id(aghead(e)); - if (!sym || (sscanf(agxget(e, sym), "%lf", &v) != 1)) - v = 1; - val[i] = v; - /* edge length */ - if (symD) { - if (sscanf (agxget (e, symD), "%lf", &v) != 1) v = 1; - valD[i] = v; - } - i++; - } - } - - A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, - val, type, sizeof(real)); - - if (D) *D = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, valD, type, sizeof(real)); - - free(I); - free(J); - free(val); - if (valD) free (valD); - - return A; -} - -#if ((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) -static int -fdpAdjust (graph_t* g, adjust_data* am) -{ - SparseMatrix A0 = makeMatrix(g, Ndim, NULL); - SparseMatrix A = A0; - real *sizes; - real *pos = N_NEW(Ndim * agnnodes(g), real); - Agnode_t *n; - int flag, i; - expand_t sep = sepFactor(g); - pointf pad; - - if (sep.doAdd) { - pad.x = PS2INCH(sep.x); - pad.y = PS2INCH(sep.y); - } else { - pad.x = PS2INCH(DFLT_MARGIN); - pad.y = PS2INCH(DFLT_MARGIN); - } - sizes = getSizes(g, pad, NULL, NULL); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - real* npos = pos + (Ndim * ND_id(n)); - for (i = 0; i < Ndim; i++) { - npos[i] = ND_pos(n)[i]; - } - } - - if (!SparseMatrix_is_symmetric(A, FALSE) - || A->type != MATRIX_TYPE_REAL) { - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } else { - A = SparseMatrix_remove_diagonal(A); - } - - remove_overlap(Ndim, A, pos, sizes, am->value, am->scaling, - ELSCHEME_NONE, 0, NULL, NULL, mapBool (agget(g, "overlap_shrink"), TRUE), &flag); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - real *npos = pos + (Ndim * ND_id(n)); - for (i = 0; i < Ndim; i++) { - ND_pos(n)[i] = npos[i]; - } - } - - free(sizes); - free(pos); - if (A != A0) - SparseMatrix_delete(A); - SparseMatrix_delete (A0); - - return flag; -} -#endif - -#ifdef IPSEPCOLA -static int -vpscAdjust(graph_t* G) -{ - int dim = 2; - int nnodes = agnnodes(G); - ipsep_options opt; - pointf* nsize = N_GNEW(nnodes, pointf); - float** coords = N_GNEW(dim, float*); - float* f_storage = N_GNEW(dim * nnodes, float); - int i, j; - Agnode_t* v; - expand_t margin; - - for (i = 0; i < dim; i++) { - coords[i] = f_storage + i * nnodes; - } - - j = 0; - for (v = agfstnode(G); v; v = agnxtnode(G, v)) { - for (i = 0; i < dim; i++) { - coords[i][j] = (float) (ND_pos(v)[i]); - } - nsize[j].x = ND_width(v); - nsize[j].y = ND_height(v); - j++; - } - - opt.diredges = 0; - opt.edge_gap = 0; - opt.noverlap = 2; - opt.clusters = NEW(cluster_data); - margin = sepFactor (G); - /* Multiply by 2 since opt.gap is the gap size, not the margin */ - if (margin.doAdd) { - opt.gap.x = 2.0*PS2INCH(margin.x); - opt.gap.y = 2.0*PS2INCH(margin.y); - } - else { - opt.gap.x = opt.gap.y = 2.0*PS2INCH(DFLT_MARGIN); - } - opt.nsize = nsize; - - removeoverlaps(nnodes, coords, &opt); - - j = 0; - for (v = agfstnode(G); v; v = agnxtnode(G, v)) { - for (i = 0; i < dim; i++) { - ND_pos(v)[i] = coords[i][j]; - } - j++; - } - - free (opt.clusters); - free (f_storage); - free (coords); - free (nsize); - return 0; -} -#endif - -/* angleSet: - * Return true if "normalize" is defined and valid; return angle in phi. - * Read angle as degrees, convert to radians. - * Guarantee -PI < phi <= PI. - */ -static int -angleSet (graph_t* g, double* phi) -{ - double ang; - char* p; - char* a = agget(g, "normalize"); - - if (!a || (*a == '\0')) - return 0; - ang = strtod (a, &p); - if (p == a) { /* no number */ - if (mapbool(a)) - ang = 0.0; - else - return 0; - } - while (ang > 180) ang -= 360; - while (ang <= -180) ang += 360; - - *phi = RADIANS(ang); - return 1; -} - -/* normalize: - * If normalize is set, move first node to origin, then - * rotate graph so that the angle of the first edge is given - * by the degrees from normalize. - * FIX: Generalize to allow rotation determined by graph shape. - */ -int normalize(graph_t * g) -{ - node_t *v; - edge_t *e; - double phi; - double cosv, sinv; - pointf p, orig; - int ret; - - if (!angleSet(g, &phi)) - return 0; - - v = agfstnode(g); - p.x = ND_pos(v)[0]; - p.y = ND_pos(v)[1]; - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - ND_pos(v)[0] -= p.x; - ND_pos(v)[1] -= p.y; - } - if (p.x || p.y) ret = 1; - else ret = 0; - - e = NULL; - for (v = agfstnode(g); v; v = agnxtnode(g, v)) - if ((e = agfstout(g, v))) - break; - if (e == NULL) - return ret; - - /* rotation necessary; pos => ccw */ - phi -= atan2(ND_pos(aghead(e))[1] - ND_pos(agtail(e))[1], - ND_pos(aghead(e))[0] - ND_pos(agtail(e))[0]); - - if (phi) { - orig.x = ND_pos(agtail(e))[0]; - orig.y = ND_pos(agtail(e))[1]; - cosv = cos(phi); - sinv = sin(phi); - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - p.x = ND_pos(v)[0] - orig.x; - p.y = ND_pos(v)[1] - orig.y; - ND_pos(v)[0] = p.x * cosv - p.y * sinv + orig.x; - ND_pos(v)[1] = p.x * sinv + p.y * cosv + orig.y; - } - return 1; - } - else return ret; -} - -typedef struct { - adjust_mode mode; - char *attrib; - int len; - char *print; -} lookup_t; - -#define STRLEN(s) ((sizeof(s)-1)/sizeof(char)) -#define ITEM(i,s,v) {i, s, STRLEN(s), v} - -/* Translation table from overlap values to algorithms. - * adjustMode[0] corresponds to overlap=true - * adjustMode[1] corresponds to overlap=false - */ -static lookup_t adjustMode[] = { - ITEM(AM_NONE, "", "none"), -#if ((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) - ITEM(AM_PRISM, "prism", "prism"), -#endif - ITEM(AM_VOR, "voronoi", "Voronoi"), - ITEM(AM_NSCALE, "scale", "scaling"), - ITEM(AM_COMPRESS, "compress", "compress"), - ITEM(AM_VPSC, "vpsc", "vpsc"), - ITEM(AM_IPSEP, "ipsep", "ipsep"), - ITEM(AM_SCALE, "oscale", "old scaling"), - ITEM(AM_SCALEXY, "scalexy", "x and y scaling"), - ITEM(AM_ORTHO, "ortho", "orthogonal constraints"), - ITEM(AM_ORTHO_YX, "ortho_yx", "orthogonal constraints"), - ITEM(AM_ORTHOXY, "orthoxy", "xy orthogonal constraints"), - ITEM(AM_ORTHOYX, "orthoyx", "yx orthogonal constraints"), - ITEM(AM_PORTHO, "portho", "pseudo-orthogonal constraints"), - ITEM(AM_PORTHO_YX, "portho_yx", "pseudo-orthogonal constraints"), - ITEM(AM_PORTHOXY, "porthoxy", "xy pseudo-orthogonal constraints"), - ITEM(AM_PORTHOYX, "porthoyx", "yx pseudo-orthogonal constraints"), -#if !((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) - ITEM(AM_PRISM, "prism", 0), -#endif - {AM_NONE, 0, 0, 0} -}; - - -/* setPrismValues: - * Initialize and set prism values - */ -static void -setPrismValues (Agraph_t* g, char* s, adjust_data* dp) -{ - int v; - - if ((sscanf (s, "%d", &v) > 0) && (v >= 0)) - dp->value = v; - else - dp->value = 1000; - dp->scaling = late_double(g, agfindgraphattr(g, "overlap_scaling"), -4.0, -1.e10); -} - -/* getAdjustMode: - * Convert string value to internal value of adjustment mode. - * If s is NULL or empty, return NONE. - */ -static adjust_data *getAdjustMode(Agraph_t* g, char *s, adjust_data* dp) -{ - lookup_t *ap = adjustMode + 1; - if ((s == NULL) || (*s == '\0')) { - dp->mode = adjustMode[0].mode; - dp->print = adjustMode[0].print; - } - else { - while (ap->attrib) { - if (!strncasecmp(s, ap->attrib, ap->len)) { - if (ap->print == NULL) { - agerr (AGWARN, "Overlap value \"%s\" unsupported - ignored\n", ap->attrib); - ap = &adjustMode[1]; - } - dp->mode = ap->mode; - dp->print = ap->print; - if (ap->mode == AM_PRISM) - setPrismValues (g, s + ap->len, dp); - break; - } - ap++; - } - if (ap->attrib == NULL ) { - int v = mapBool(s,'?'); - if (v == '?') { - agerr (AGWARN, "Unrecognized overlap value \"%s\" - using false\n", s); - v = FALSE; - } - if (v) { - dp->mode = adjustMode[0].mode; - dp->print = adjustMode[0].print; - } - else { - dp->mode = adjustMode[1].mode; - dp->print = adjustMode[1].print; - } - if (dp->mode == AM_PRISM) - setPrismValues (g, "", dp); - } - } - if (Verbose) { - fprintf(stderr, "overlap: %s value %d scaling %.04f\n", dp->print, dp->value, dp->scaling); - } - return dp; -} - -adjust_data *graphAdjustMode(graph_t *G, adjust_data* dp, char* dflt) -{ - char* am = agget(G, "overlap"); - return (getAdjustMode (G, am ? am : (dflt ? dflt : ""), dp)); -} - -#define ISZERO(d) ((fabs(d) < 0.000000001)) - -/* simpleScaling: - */ -static int simpleScale (graph_t* g) -{ - pointf sc; - node_t* n; - int i; - char* p; - - if ((p = agget(g, "scale"))) { - if ((i = sscanf(p, "%lf,%lf", &sc.x, &sc.y))) { - if (ISZERO(sc.x)) return 0; - if (i == 1) sc.y = sc.x; - else if (ISZERO(sc.y)) return 0; - if ((sc.y == 1) && (sc.x == 1)) return 0; - if (Verbose) - fprintf (stderr, "scale = (%.03f,%.03f)\n", sc.x, sc.y); - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - ND_pos(n)[0] *= sc.x; - ND_pos(n)[1] *= sc.y; - } - return 1; - } - } - return 0; -} - -/* removeOverlapWith: - * Use adjust_data to determine if and how to remove - * node overlaps. - * Return non-zero if nodes are moved. - */ -int -removeOverlapWith (graph_t * G, adjust_data* am) -{ - int ret, nret; - - if (agnnodes(G) < 2) - return 0; - - nret = normalize (G); - nret += simpleScale (G); - - if (am->mode == AM_NONE) - return nret; - - if (Verbose) - fprintf(stderr, "Adjusting %s using %s\n", agnameof(G), am->print); - - if (am->mode > AM_SCALE) { -/* start_timer(); */ - switch (am->mode) { - case AM_NSCALE: - ret = scAdjust(G, 1); - break; - case AM_SCALEXY: - ret = scAdjust(G, 0); - break; - case AM_PUSH: - /* scanAdjust (G, 1); */ - ret = 0; - break; - case AM_PUSHPULL: - /* scanAdjust (G, 0); */ - ret = 0; - break; - case AM_PORTHO_YX: - case AM_PORTHO: - case AM_PORTHOXY: - case AM_PORTHOYX: - case AM_ORTHO_YX: - case AM_ORTHO: - case AM_ORTHOXY: - case AM_ORTHOYX: - cAdjust(G, am->mode); - ret = 0; - break; - case AM_COMPRESS: - ret = scAdjust(G, -1); - break; -#if ((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) - case AM_PRISM: - ret = fdpAdjust(G, am); - break; -#endif -#ifdef IPSEPCOLA - case AM_IPSEP: - return nret; /* handled during layout */ - break; - case AM_VPSC: - ret = vpscAdjust(G); - break; -#endif - default: /* to silence warnings */ - if ((am->mode != AM_VOR) && (am->mode != AM_SCALE)) - agerr(AGWARN, "Unhandled adjust option %s\n", am->print); - ret = 0; - break; - } -/* fprintf (stderr, "%s %.4f sec\n", am->print, elapsed_sec()); */ - return nret+ret; - } - - /* create main array */ -/* start_timer(); */ - if (makeInfo(G)) { - freeNodes(); - free(sites); - sites = 0; - return nret; - } - - /* establish and verify bounding box */ - chkBoundBox(G); - - if (am->mode == AM_SCALE) - ret = sAdjust(); - else - ret = vAdjust(); - - if (ret) - updateGraph(G); - - freeNodes(); - free(sites); - sites = 0; -/* fprintf (stderr, "%s %.4f sec\n", am->print, elapsed_sec()); */ - - return ret+nret; -} - -/* removeOverlapAs: - * Use flag value to determine if and how to remove - * node overlaps. - */ -int -removeOverlapAs(graph_t * G, char* flag) -{ - adjust_data am; - - if (agnnodes(G) < 2) - return 0; - getAdjustMode(G, flag, &am); - return removeOverlapWith (G, &am); -} - -/* adjustNodes: - * Remove node overlap relying on graph's overlap attribute. - * Return non-zero if graph has changed. - */ -int adjustNodes(graph_t * G) -{ - return (removeOverlapAs(G, agget(G, "overlap"))); -} - -/* parseFactor: - * Convert "sep" attribute into expand_t. - * Input "+x,y" becomes {x,y,true} - * Input "x,y" becomes {1 + x/sepfact,1 + y/sepfact,false} - * Return 1 on success, 0 on failure - */ -static int -parseFactor (char* s, expand_t* pp, float sepfact, float dflt) -{ - int i; - float x, y; - - while (isspace(*s)) s++; - if (*s == '+') { - s++; - pp->doAdd = 1; - } - else pp->doAdd = 0; - - if ((i = sscanf(s, "%f,%f", &x, &y))) { - if (i == 1) y = x; - if (pp->doAdd) { - if (sepfact > 1) { - pp->x = MIN(dflt,x/sepfact); - pp->y = MIN(dflt,y/sepfact); - } - else if (sepfact < 1) { - pp->x = MAX(dflt,x/sepfact); - pp->y = MAX(dflt,y/sepfact); - } - else { - pp->x = x; - pp->y = y; - } - } - else { - pp->x = 1.0 + x/sepfact; - pp->y = 1.0 + y/sepfact; - } - return 1; - } - else return 0; -} - -/* sepFactor: - */ -expand_t -sepFactor(graph_t* g) -{ - expand_t pmargin; - char* marg; - - if ((marg = agget(g, "sep")) && parseFactor(marg, &pmargin, 1.0, 0)) { - } - else if ((marg = agget(g, "esep")) && parseFactor(marg, &pmargin, SEPFACT, DFLT_MARGIN)) { - } - else { /* default */ - pmargin.x = pmargin.y = DFLT_MARGIN; - pmargin.doAdd = 1; - } - if (Verbose) - fprintf (stderr, "Node separation: add=%d (%f,%f)\n", - pmargin.doAdd, pmargin.x, pmargin.y); - return pmargin; -} - -/* esepFactor: - * This value should be smaller than the sep value used to expand - * nodes during adjustment. If not, when the adjustment pass produces - * a fairly tight layout, the spline code will find that some nodes - * still overlap. - */ -expand_t -esepFactor(graph_t* g) -{ - expand_t pmargin; - char* marg; - - if ((marg = agget(g, "esep")) && parseFactor(marg, &pmargin, 1.0, 0)) { - } - else if ((marg = agget(g, "sep")) && parseFactor(marg, &pmargin, 1.0/SEPFACT, SEPFACT*DFLT_MARGIN)) { - } - else { - pmargin.x = pmargin.y = SEPFACT*DFLT_MARGIN; - pmargin.doAdd = 1; - } - if (Verbose) - fprintf (stderr, "Edge separation: add=%d (%f,%f)\n", - pmargin.doAdd, pmargin.x, pmargin.y); - return pmargin; -} diff --git a/internal/ccall/neatogen/adjust.h b/internal/ccall/neatogen/adjust.h deleted file mode 100644 index 603d9cf..0000000 --- a/internal/ccall/neatogen/adjust.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - - -#ifndef ADJUST_H -#define ADJUST_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "geom.h" -#include "SparseMatrix.h" - -#define DFLT_MARGIN 4 /* 4 points */ - -typedef enum { - AM_NONE, AM_VOR, - AM_SCALE, AM_NSCALE, AM_SCALEXY, AM_PUSH, AM_PUSHPULL, - AM_ORTHO, AM_ORTHO_YX, AM_ORTHOXY, AM_ORTHOYX, - AM_PORTHO, AM_PORTHO_YX, AM_PORTHOXY, AM_PORTHOYX, AM_COMPRESS, - AM_VPSC, AM_IPSEP, AM_PRISM -} adjust_mode; - -typedef struct { - adjust_mode mode; - char *print; - int value; - double scaling; -} adjust_data; - -typedef struct { - float x, y; - boolean doAdd; /* if true, x and y are in points */ -} expand_t; - - extern expand_t sepFactor(graph_t * G); - extern expand_t esepFactor(graph_t * G); - extern int adjustNodes(graph_t * G); - extern int normalize(graph_t * g); - extern int removeOverlapAs(graph_t*, char*); - extern int removeOverlapWith(graph_t*, adjust_data*); - extern int cAdjust(graph_t *, int); - extern int scAdjust(graph_t *, int); - extern adjust_data *graphAdjustMode(graph_t *G, adjust_data*, char* dflt); - extern double *getSizes(Agraph_t * g, pointf pad, int *n_elabels, int **elabels); - extern SparseMatrix makeMatrix(Agraph_t* g, int dim, SparseMatrix *D); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/neatogen/bfs.c b/internal/ccall/neatogen/bfs.c deleted file mode 100644 index 4ba1694..0000000 --- a/internal/ccall/neatogen/bfs.c +++ /dev/null @@ -1,170 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/****************************************** - - Breadth First Search - Computes single-source distances for - unweighted graphs - -******************************************/ - -#include "bfs.h" -#include -/* #include */ - -void bfs(int vertex, vtx_data * graph, int n, DistType * dist, Queue * Q) - /* compute vector 'dist' of distances of all nodes from 'vertex' */ -{ - int i; - int closestVertex, neighbor; - DistType closestDist = INT_MAX; - - /* initial distances with edge weights: */ - for (i = 0; i < n; i++) - dist[i] = -1; - dist[vertex] = 0; - - initQueue(Q, vertex); - - if (graph[0].ewgts == NULL) { - while (deQueue(Q, &closestVertex)) { - closestDist = dist[closestVertex]; - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - if (dist[neighbor] < -0.5) { /* first time to reach neighbor */ - dist[neighbor] = closestDist + 1; - enQueue(Q, neighbor); - } - } - } - } else { - while (deQueue(Q, &closestVertex)) { - closestDist = dist[closestVertex]; - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - if (dist[neighbor] < -0.5) { /* first time to reach neighbor */ - dist[neighbor] = - closestDist + - (DistType) graph[closestVertex].ewgts[i]; - enQueue(Q, neighbor); - } - } - } - } - - /* For dealing with disconnected graphs: */ - for (i = 0; i < n; i++) - if (dist[i] < -0.5) /* 'i' is not connected to 'vertex' */ - dist[i] = closestDist + 10; -} - -int -bfs_bounded(int vertex, vtx_data * graph, int n, DistType * dist, - Queue * Q, int bound, int *visited_nodes) - /* compute vector 'dist' of distances of all nodes from 'vertex' */ - /* ignore nodes whose distance to 'vertex' is more than bound */ -{ - /* we assume here, that all distances are initialized with -1 !!!! */ - - int i; - int num_visit; - int closestVertex, neighbor; - DistType closestDist; - /* initialize distances with edge weights: */ - /* for (i=0; i bound) { - dist[closestVertex] = -1; - break; - } else { - visited_nodes[num_visit++] = closestVertex; - } - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - if (dist[neighbor] < -0.5) { /* first time to reach neighbor */ - dist[neighbor] = closestDist + 1; - enQueue(Q, neighbor); - } - } - } - - /* set distances of all nodes in Queue to -1 */ - /* for next run */ - while (deQueue(Q, &closestVertex)) { - dist[closestVertex] = -1; - } - dist[vertex] = -1; - return num_visit; -} - -#ifndef __cplusplus - -void mkQueue(Queue * qp, int size) -{ - qp->data = N_GNEW(size, int); - qp->queueSize = size; - qp->start = qp->end = 0; -} - -Queue *newQueue(int size) -{ - Queue *qp = GNEW(Queue); - mkQueue(qp, size); - return qp; -} - -void freeQueue(Queue * qp) -{ - free(qp->data); -} - -void delQueue(Queue * qp) -{ - free(qp->data); - free(qp); -} - -void initQueue(Queue * qp, int startVertex) -{ - qp->data[0] = startVertex; - qp->start = 0; - qp->end = 1; -} - -boolean deQueue(Queue * qp, int *vertex) -{ - if (qp->start >= qp->end) - return FALSE; /* underflow */ - *vertex = qp->data[qp->start++]; - return TRUE; -} - -boolean enQueue(Queue * qp, int vertex) -{ - if (qp->end >= qp->queueSize) - return FALSE; /* overflow */ - qp->data[qp->end++] = vertex; - return TRUE; -} - -#endif diff --git a/internal/ccall/neatogen/bfs.h b/internal/ccall/neatogen/bfs.h deleted file mode 100644 index 4006c2e..0000000 --- a/internal/ccall/neatogen/bfs.h +++ /dev/null @@ -1,91 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _BFS_H_ -#define _BFS_H_ - -#include "defs.h" - -#ifdef __cplusplus - class Queue { - private: - int *data; - int queueSize; - int end; - int start; - public: - Queue(int size) { - data = new int[size]; - queueSize = size; - start = 0; - end = 0; - } ~Queue() { - delete[]data; - } void initQueue(int startVertex) { - data[0] = startVertex; - start = 0; - end = 1; - } - - bool dequeue(int &vertex) { - - if (start >= end) - return false; /* underflow */ - - vertex = data[start++]; - return true; - - } - - bool enqueue(int vertex) { - if (end >= queueSize) - return false; /* overflow */ - data[end++] = vertex; - return true; - } - }; - - - void bfs(int vertex, vtx_data * graph, int n, DistType * dist, - Queue & Q); - void bfs_bounded(int vertex, vtx_data * graph, int n, DistType * dist, - Queue & Q, int bound, int *visited_nodes, - int &num_visited_nodes); -#else - typedef struct { - int *data; - int queueSize; - int end; - int start; - } Queue; - - extern void mkQueue(Queue *, int); - extern void freeQueue(Queue *); - extern void initQueue(Queue *, int startVertex); - extern boolean deQueue(Queue *, int *); - extern boolean enQueue(Queue *, int); - - extern void bfs(int, vtx_data *, int, DistType *, Queue *); - extern int bfs_bounded(int, vtx_data *, int, DistType *, Queue *, int, - int *); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/call_tri.c b/internal/ccall/neatogen/call_tri.c deleted file mode 100644 index cf6605b..0000000 --- a/internal/ccall/neatogen/call_tri.c +++ /dev/null @@ -1,110 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "SparseMatrix.h" -#include "logic.h" -#include "memory.h" -#include "delaunay.h" - -SparseMatrix call_tri(int n, int dim, real * x) -{ - real one = 1; - int i, ii, jj; - SparseMatrix A; - SparseMatrix B; - int* edgelist = NULL; - real* xv = N_GNEW(n, real); - real* yv = N_GNEW(n, real); - int numberofedges; - - for (i = 0; i < n; i++) { - xv[i] = x[i * 2]; - yv[i] = x[i * 2 + 1]; - } - - if (n > 2) { - edgelist = delaunay_tri (xv, yv, n, &numberofedges); - } else { - numberofedges = 0; - } - - A = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - for (i = 0; i < numberofedges; i++) { - ii = edgelist[i * 2]; - jj = edgelist[i * 2 + 1]; - SparseMatrix_coordinate_form_add_entries(A, 1, &(ii), &(jj), &one); - } - if (n == 2) { /* if two points, add edge i->j */ - ii = 0; - jj = 1; - SparseMatrix_coordinate_form_add_entries(A, 1, &(ii), &(jj), &one); - } - for (i = 0; i < n; i++) { - SparseMatrix_coordinate_form_add_entries(A, 1, &i, &i, &one); - } - B = SparseMatrix_from_coordinate_format(A); - SparseMatrix_delete(A); - A = SparseMatrix_symmetrize(B, FALSE); - SparseMatrix_delete(B); - B = A; - - free (edgelist); - free (xv); - free (yv); - return B; -} - -SparseMatrix call_tri2(int n, int dim, real * xx) -{ - real *x, *y; - v_data *delaunay; - int i, j; - SparseMatrix A; - SparseMatrix B; - real one = 1; - x = N_GNEW(n, real); - y = N_GNEW(n, real); - - for (i = 0; i < n; i++) { - x[i] = xx[dim * i]; - y[i] = xx[dim * i + 1]; - } - - delaunay = UG_graph(x, y, n, 0); - - A = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - - for (i = 0; i < n; i++) { - for (j = 1; j < delaunay[i].nedges; j++) { - SparseMatrix_coordinate_form_add_entries(A, 1, &i, - &(delaunay[i]. - edges[j]), &one); - } - } - for (i = 0; i < n; i++) { - SparseMatrix_coordinate_form_add_entries(A, 1, &i, &i, &one); - } - B = SparseMatrix_from_coordinate_format(A); - B = SparseMatrix_symmetrize(B, FALSE); - SparseMatrix_delete(A); - - free (x); - free (y); - freeGraph (delaunay); - - return B; - -} - diff --git a/internal/ccall/neatogen/call_tri.h b/internal/ccall/neatogen/call_tri.h deleted file mode 100644 index 5f31507..0000000 --- a/internal/ccall/neatogen/call_tri.h +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CALL_TRI_H -#define CALL_TRI_H - -SparseMatrix call_tri(int n, int dim, real * x); -SparseMatrix call_tri2(int n, int dim, real * x); - -#endif - diff --git a/internal/ccall/neatogen/circuit.c b/internal/ccall/neatogen/circuit.c deleted file mode 100644 index d04fa05..0000000 --- a/internal/ccall/neatogen/circuit.c +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * this implements the resistor circuit current model for - * computing node distance, as an alternative to shortest-path. - * likely it could be improved by using edge weights, somehow. - * Return 1 if successful; 0 otherwise (e.g., graph is disconnected). - */ -#include "neato.h" - -int solveCircuit(int nG, double **Gm, double **Gm_inv) -{ - double sum; - int i, j; - - if (Verbose) - fprintf(stderr, "Calculating circuit model"); - - /* set diagonal entries to sum of conductances but ignore nth node */ - for (i = 0; i < nG; i++) { - sum = 0.0; - for (j = 0; j < nG; j++) - if (i != j) - sum += Gm[i][j]; - Gm[i][i] = -sum; - } - return matinv(Gm, Gm_inv, nG - 1); -} - -int circuit_model(graph_t * g, int nG) -{ - double **Gm; - double **Gm_inv; - int rv; - long i, j; - node_t *v; - edge_t *e; - - Gm = new_array(nG, nG, 0.0); - Gm_inv = new_array(nG, nG, 0.0); - - /* set non-diagonal entries */ - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - for (e = agfstedge(g, v); e; e = agnxtedge(g, e, v)) { - i = AGSEQ(agtail(e)); - j = AGSEQ(aghead(e)); - if (i == j) - continue; - /* conductance is 1/resistance */ - Gm[i][j] = Gm[j][i] = -1.0 / ED_dist(e); /* negate */ - } - } - - rv = solveCircuit(nG, Gm, Gm_inv); - - if (rv) - for (i = 0; i < nG; i++) { - for (j = 0; j < nG; j++) { - GD_dist(g)[i][j] = - Gm_inv[i][i] + Gm_inv[j][j] - 2.0 * Gm_inv[i][j]; - } - } - free_array(Gm); - free_array(Gm_inv); - return rv; -} diff --git a/internal/ccall/neatogen/closest.c b/internal/ccall/neatogen/closest.c deleted file mode 100644 index 8e624a5..0000000 --- a/internal/ccall/neatogen/closest.c +++ /dev/null @@ -1,368 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "kkutils.h" -#include "closest.h" -#include - -/***************************************** -** This module contains functions that ** -** given a 1-D layout construct a graph ** -** where close nodes in this layout are ** -** adjacent ** -*****************************************/ - -typedef struct { - /* this structure represents two nodes in the 1-D layout */ - int left; /* the left node in the pair */ - int right; /* the right node in the pair */ - double dist; /* distance between the nodes in the layout */ -} Pair; - -#define LT(p,q) ((p).dist < (q).dist) - -#define _EQ(p,q) ((p).dist == (q).dist) - -/* -Pair(int v, int u) {left=v; right=u;} -bool operator>(Pair other) {return dist>other.dist;} -bool operator>=(Pair other) {return dist>=other.dist;} -bool operator<(Pair other) {return distdata = N_GNEW(n, Pair); - s->max_size = n; - s->top = 0; -} - -static void freeStack(PairStack * s) -{ - free(s->data); -} - -#define push(s,x) { \ - if (s->top>=s->max_size) { \ - s->max_size *= 2; \ - s->data = (Pair*) realloc(s->data, s->max_size*sizeof(Pair)); \ - } \ - s->data[s->top++] = x; \ -} - -#define pop(s,x) ((s->top==0) ? FALSE : (s->top--, x = s->data[s->top], TRUE)) - -#define read_top(h,x) ((s->top==0) ? FALSE : (x = s->data[s->top-1], TRUE)) - -#define sub(h,i) (h->data[i]) - -/* An auxulliary data structure (a heap) for - * finding the closest pair in the layout - */ -typedef struct { - Pair *data; - int heapSize; - int maxSize; -} PairHeap; - -#define left(i) (2*(i)) -#define right(i) (2*(i)+1) -#define parent(i) ((i)/2) -#define insideHeap(h,i) ((i)heapSize) -#define _greaterPriority(h,i,j) \ - (LT(h->data[i],h->data[j]) || ((_EQ(h->data[i],h->data[j])) && (rand()%2))) - -#define _exchange(h,i,j) {Pair temp; \ - temp=h->data[i]; \ - h->data[i]=h->data[j]; \ - h->data[j]=temp; \ -} -#define _assign(h,i,j) {h->data[i]=h->data[j]} - -static void _heapify(PairHeap * h, int i) -{ - int l, r, largest; - while (1) { - l = left(i); - r = right(i); - if (insideHeap(h, l) && _greaterPriority(h, l, i)) - largest = l; - else - largest = i; - if (insideHeap(h, r) && _greaterPriority(h, r, largest)) - largest = r; - if (largest == i) - break; - - _exchange(h, largest, i); - i = largest; - } -} - -#ifdef UNUSED -static void mkHeap(PairHeap * h, int size) -{ - h->data = N_GNEW(size, Pair); - h->maxSize = size; - h->heapSize = 0; -} -#endif - -static void _freeHeap(PairHeap * h) -{ - free(h->data); -} - -static void _initHeap(PairHeap * h, double *place, int *ordering, int n) -{ - int i; - Pair edge; - int j; - - h->heapSize = n - 1; -#ifdef REDO - if (h->heapSize > h->maxSize) { - h->maxSize = h->heapSize; - h->data = (Pair *) realloc(h->data, h->maxSize * sizeof(Pair)); - } -#else - h->maxSize = h->heapSize; - h->data = N_GNEW(h->maxSize, Pair); -#endif - - for (i = 0; i < n - 1; i++) { - edge.left = ordering[i]; - edge.right = ordering[i + 1]; - edge.dist = place[ordering[i + 1]] - place[ordering[i]]; - h->data[i] = edge; - } - for (j = (n - 1) / 2; j >= 0; j--) { - _heapify(h, j); - } -} - -static boolean _extractMax(PairHeap * h, Pair * max) -{ - if (h->heapSize == 0) - return FALSE; - - *max = h->data[0]; - h->data[0] = h->data[h->heapSize - 1]; - h->heapSize--; - _heapify(h, 0); - return TRUE; -} - -static void _insert(PairHeap * h, Pair edge) -{ - int i = h->heapSize; - if (h->heapSize == h->maxSize) { - h->maxSize *= 2; - h->data = (Pair *) realloc(h->data, h->maxSize * sizeof(Pair)); - } - h->heapSize++; - h->data[i] = edge; - while (i > 0 && _greaterPriority(h, i, parent(i))) { - _exchange(h, i, parent(i)); - i = parent(i); - } -} - -/* -static bool -isheap(PairHeap* h) -{ - int i,l,r; - for (i=0; iheapSize; i++) { - l=left(i); r=right(i); - if (insideHeap(h,l) && greaterPriority(h,l,i)) - return FALSE; - if (insideHeap(h,r) && greaterPriority(h,r,i)) - return FALSE; - } - return TRUE; -} -*/ - -static void -find_closest_pairs(double *place, int n, int num_pairs, - PairStack * pairs_stack) -{ - /* Fill the stack 'pairs_stack' with 'num_pairs' closest pairs int the 1-D layout 'place' */ - int i; - PairHeap heap; - int *left = N_GNEW(n, int); - int *right = N_GNEW(n, int); - Pair pair = { 0, 0 }, new_pair; - - /* Order the nodes according to their place */ - int *ordering = N_GNEW(n, int); - int *inv_ordering = N_GNEW(n, int); - - for (i = 0; i < n; i++) { - ordering[i] = i; - } - quicksort_place(place, ordering, 0, n - 1); - for (i = 0; i < n; i++) { - inv_ordering[ordering[i]] = i; - } - - /* Intialize heap with all consecutive pairs */ - _initHeap(&heap, place, ordering, n); - - /* store the leftmost and rightmost neighbors of each node that were entered into heap */ - for (i = 1; i < n; i++) { - left[ordering[i]] = ordering[i - 1]; - } - for (i = 0; i < n - 1; i++) { - right[ordering[i]] = ordering[i + 1]; - } - - /* extract the 'num_pairs' closest pairs */ - for (i = 0; i < num_pairs; i++) { - int left_index; - int right_index; - int neighbor; - - if (!_extractMax(&heap, &pair)) { - break; /* not enough pairs */ - } - push(pairs_stack, pair); - /* insert to heap "descendant" pairs */ - left_index = inv_ordering[pair.left]; - right_index = inv_ordering[pair.right]; - if (left_index > 0) { - neighbor = ordering[left_index - 1]; - if (inv_ordering[right[neighbor]] < right_index) { - /* we have a new pair */ - new_pair.left = neighbor; - new_pair.right = pair.right; - new_pair.dist = place[pair.right] - place[neighbor]; - _insert(&heap, new_pair); - right[neighbor] = pair.right; - left[pair.right] = neighbor; - } - } - if (right_index < n - 1) { - neighbor = ordering[right_index + 1]; - if (inv_ordering[left[neighbor]] > left_index) { - /* we have a new pair */ - new_pair.left = pair.left; - new_pair.right = neighbor; - new_pair.dist = place[neighbor] - place[pair.left]; - _insert(&heap, new_pair); - left[neighbor] = pair.left; - right[pair.left] = neighbor; - } - } - } - free(left); - free(right); - free(ordering); - free(inv_ordering); - _freeHeap(&heap); -} - -static void add_edge(vtx_data * graph, int u, int v) -{ - int i; - for (i = 0; i < graph[u].nedges; i++) { - if (graph[u].edges[i] == v) { - /* edge already exist */ - return; - } - } - /* add the edge */ - graph[u].edges[graph[u].nedges++] = v; - graph[v].edges[graph[v].nedges++] = u; - if (graph[0].ewgts != NULL) { - graph[u].ewgts[0]--; - graph[v].ewgts[0]--; - } -} - -static void -construct_graph(int n, PairStack * edges_stack, vtx_data ** New_graph) -{ - /* construct an unweighted graph using the edges 'edges_stack' */ - int i; - vtx_data *new_graph; - - /* first compute new degrees and nedges; */ - int *degrees = N_GNEW(n, int); - int top = edges_stack->top; - int new_nedges = 2 * top + n; - Pair pair; - int *edges = N_GNEW(new_nedges, int); - float *weights = N_GNEW(new_nedges, float); - - for (i = 0; i < n; i++) { - degrees[i] = 1; /* save place for the self loop */ - } - for (i = 0; i < top; i++) { - pair = sub(edges_stack, i); - degrees[pair.left]++; - degrees[pair.right]++; - } - - /* copy graph into new_graph: */ - for (i = 0; i < new_nedges; i++) { - weights[i] = 1.0; - } - - *New_graph = new_graph = N_GNEW(n, vtx_data); - for (i = 0; i < n; i++) { - new_graph[i].nedges = 1; - new_graph[i].ewgts = weights; -#ifdef USE_STYLES - new_graph[i].styles = NULL; -#endif - new_graph[i].edges = edges; - *edges = i; /* self loop for Lap */ - *weights = 0; /* self loop weight for Lap */ - weights += degrees[i]; - edges += degrees[i]; /* reserve space for possible more edges */ - } - - free(degrees); - - /* add all edges from stack */ - while (pop(edges_stack, pair)) { - add_edge(new_graph, pair.left, pair.right); - } -} - -void -closest_pairs2graph(double *place, int n, int num_pairs, vtx_data ** graph) -{ - /* build a graph with with edges between the 'num_pairs' closest pairs in the 1-D space: 'place' */ - PairStack pairs_stack; - initStack(&pairs_stack, num_pairs); - find_closest_pairs(place, n, num_pairs, &pairs_stack); - construct_graph(n, &pairs_stack, graph); - freeStack(&pairs_stack); -} - -#undef _EQ -#undef _assign -#undef _exchange -#undef _greaterPriority diff --git a/internal/ccall/neatogen/closest.h b/internal/ccall/neatogen/closest.h deleted file mode 100644 index 215c8ec..0000000 --- a/internal/ccall/neatogen/closest.h +++ /dev/null @@ -1,31 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef CLOSEST_H -#define CLOSEST_H - -#include "defs.h" - - extern void closest_pairs2graph(double *, int, int, vtx_data **); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/compute_hierarchy.c b/internal/ccall/neatogen/compute_hierarchy.c deleted file mode 100644 index 1602a75..0000000 --- a/internal/ccall/neatogen/compute_hierarchy.c +++ /dev/null @@ -1,137 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#ifdef DIGCOLA -#include "kkutils.h" - -static int *given_levels = NULL; -/* - * This function partitions the graph nodes into levels - * according to the minimizer of the hierarchy energy. - * - * To allow more flexibility we define a new level only - * when the hierarchy energy shows a significant jump - * (to compensate for noise). - * This is controlled by two parameters: 'abs_tol' and - * 'relative_tol'. The smaller these two are, the more - * levels we'll get. - * More speciffically: - * We never consider gaps smaller than 'abs_tol' - * Additionally, we never consider gaps smaller than 'abs_tol'* - * - * The output is an ordering of the nodes according to - * their levels, as follows: - * First level: - * ordering[0],ordering[1],...ordering[levels[0]-1] - * Second level: - * ordering[levels[0]],ordering[levels[0]+1],...ordering[levels[1]-1] - * ... - * Last level: - * ordering[levels[num_levels-1]],ordering[levels[num_levels-1]+1],...ordering[n-1] - * - * Hence, the nodes were partitioned into 'num_levels'+1 - * levels. - * - * Please note that 'ordering[levels[i]]' contains the first node at level i+1, - * and not the last node of level i. - */ -int -compute_hierarchy(vtx_data * graph, int n, double abs_tol, - double relative_tol, double *given_coords, - int **orderingp, int **levelsp, int *num_levelsp) -{ - double *y; - int i, rv=0; - double spread; - int use_given_levels = FALSE; - int *ordering; - int *levels; - double tol; /* node 'i' precedes 'j' in hierachy iff y[i]-y[j]>tol */ - double hierarchy_span; - int num_levels; - - /* compute optimizer of hierarchy energy: 'y' */ - if (given_coords) { - y = given_coords; - } else { - y = N_GNEW(n, double); - if (compute_y_coords(graph, n, y, n)) { - rv = 1; - goto finish; - } - } - - /* sort nodes accoridng to their y-ordering */ - *orderingp = ordering = N_NEW(n, int); - for (i = 0; i < n; i++) { - ordering[i] = i; - } - quicksort_place(y, ordering, 0, n - 1); - - spread = y[ordering[n - 1]] - y[ordering[0]]; - - /* after spread is computed, we may take the y-coords as the given levels */ - if (given_levels) { - use_given_levels = TRUE; - for (i = 0; i < n; i++) { - use_given_levels = use_given_levels && given_levels[i] >= 0; - } - } - if (use_given_levels) { - for (i = 0; i < n; i++) { - y[i] = given_levels[i]; - ordering[i] = i; - } - quicksort_place(y, ordering, 0, n - 1); - } - - /* compute tolerance - * take the maximum between 'abs_tol' and a fraction of the average gap - * controlled by 'relative_tol' - */ - hierarchy_span = y[ordering[n - 1]] - y[ordering[0]]; - tol = MAX(abs_tol, relative_tol * hierarchy_span / (n - 1)); - /* 'hierarchy_span/(n-1)' - average gap between consecutive nodes */ - - - /* count how many levels the hierarchy contains (a SINGLE_LINK clustering */ - /* alternatively we could use COMPLETE_LINK clustering) */ - num_levels = 0; - for (i = 1; i < n; i++) { - if (y[ordering[i]] - y[ordering[i - 1]] > tol) { - num_levels++; - } - } - *num_levelsp = num_levels; - if (num_levels == 0) { - *levelsp = levels = N_GNEW(1, int); - levels[0] = n; - } else { - int count = 0; - *levelsp = levels = N_GNEW(num_levels, int); - for (i = 1; i < n; i++) { - if (y[ordering[i]] - y[ordering[i - 1]] > tol) { - levels[count++] = i; - } - } - } -finish: - if (!given_coords) { - free(y); - } - - return rv; -} - -#endif /* DIGCOLA */ diff --git a/internal/ccall/neatogen/conjgrad.c b/internal/ccall/neatogen/conjgrad.c deleted file mode 100644 index b90f0a4..0000000 --- a/internal/ccall/neatogen/conjgrad.c +++ /dev/null @@ -1,241 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "matrix_ops.h" -#include "conjgrad.h" -/* #include */ -#include - - -/************************* -** C.G. method - SPARSE * -*************************/ - -int conjugate_gradient - (vtx_data * A, double *x, double *b, int n, double tol, - int max_iterations) { - /* Solves Ax=b using Conjugate-Gradients method */ - /* 'x' and 'b' are orthogonalized against 1 */ - - int i, rv = 0; - - double alpha, beta, r_r, r_r_new, p_Ap; - double *r = N_GNEW(n, double); - double *p = N_GNEW(n, double); - double *Ap = N_GNEW(n, double); - double *Ax = N_GNEW(n, double); - double *alphap = N_GNEW(n, double); - - double *orth_b = N_GNEW(n, double); - copy_vector(n, b, orth_b); - orthog1(n, orth_b); - orthog1(n, x); - right_mult_with_vector(A, n, x, Ax); - vectors_subtraction(n, orth_b, Ax, r); - copy_vector(n, r, p); - r_r = vectors_inner_product(n, r, r); - - for (i = 0; i < max_iterations && max_abs(n, r) > tol; i++) { - right_mult_with_vector(A, n, p, Ap); - p_Ap = vectors_inner_product(n, p, Ap); - if (p_Ap == 0) - break; /*exit(1); */ - alpha = r_r / p_Ap; - - /* derive new x: */ - vectors_scalar_mult(n, p, alpha, alphap); - vectors_addition(n, x, alphap, x); - - /* compute values for next iteration: */ - if (i < max_iterations - 1) { /* not last iteration */ - vectors_scalar_mult(n, Ap, alpha, Ap); - vectors_subtraction(n, r, Ap, r); /* fast computation of r, the residual */ - - /* Alternaive accurate, but slow, computation of the residual - r */ - /* right_mult_with_vector(A, n, x, Ax); */ - /* vectors_subtraction(n,b,Ax,r); */ - - r_r_new = vectors_inner_product(n, r, r); - if (r_r == 0) { - agerr (AGERR, "conjugate_gradient: unexpected length 0 vector\n"); - rv = 1; - goto cleanup0; - } - beta = r_r_new / r_r; - r_r = r_r_new; - vectors_scalar_mult(n, p, beta, p); - vectors_addition(n, r, p, p); - } - } - -cleanup0 : - free(r); - free(p); - free(Ap); - free(Ax); - free(alphap); - free(orth_b); - - return rv; -} - - -/**************************** -** C.G. method - DENSE * -****************************/ - -int conjugate_gradient_f - (float **A, double *x, double *b, int n, double tol, - int max_iterations, boolean ortho1) { - /* Solves Ax=b using Conjugate-Gradients method */ - /* 'x' and 'b' are orthogonalized against 1 if 'ortho1=true' */ - - int i, rv = 0; - - double alpha, beta, r_r, r_r_new, p_Ap; - double *r = N_GNEW(n, double); - double *p = N_GNEW(n, double); - double *Ap = N_GNEW(n, double); - double *Ax = N_GNEW(n, double); - double *alphap = N_GNEW(n, double); - - double *orth_b = N_GNEW(n, double); - copy_vector(n, b, orth_b); - if (ortho1) { - orthog1(n, orth_b); - orthog1(n, x); - } - right_mult_with_vector_f(A, n, x, Ax); - vectors_subtraction(n, orth_b, Ax, r); - copy_vector(n, r, p); - r_r = vectors_inner_product(n, r, r); - - for (i = 0; i < max_iterations && max_abs(n, r) > tol; i++) { - right_mult_with_vector_f(A, n, p, Ap); - p_Ap = vectors_inner_product(n, p, Ap); - if (p_Ap == 0) - break; /*exit(1); */ - alpha = r_r / p_Ap; - - /* derive new x: */ - vectors_scalar_mult(n, p, alpha, alphap); - vectors_addition(n, x, alphap, x); - - /* compute values for next iteration: */ - if (i < max_iterations - 1) { /* not last iteration */ - vectors_scalar_mult(n, Ap, alpha, Ap); - vectors_subtraction(n, r, Ap, r); /* fast computation of r, the residual */ - - /* Alternaive accurate, but slow, computation of the residual - r */ - /* right_mult_with_vector(A, n, x, Ax); */ - /* vectors_subtraction(n,b,Ax,r); */ - - r_r_new = vectors_inner_product(n, r, r); - if (r_r == 0) { - rv = 1; - agerr (AGERR, "conjugate_gradient: unexpected length 0 vector\n"); - goto cleanup1; - } - beta = r_r_new / r_r; - r_r = r_r_new; - vectors_scalar_mult(n, p, beta, p); - vectors_addition(n, r, p, p); - } - } -cleanup1: - free(r); - free(p); - free(Ap); - free(Ax); - free(alphap); - free(orth_b); - - return rv; -} - -int -conjugate_gradient_mkernel(float *A, float *x, float *b, int n, - double tol, int max_iterations) -{ - /* Solves Ax=b using Conjugate-Gradients method */ - /* A is a packed symmetric matrix */ - /* matrux A is "packed" (only upper triangular portion exists, row-major); */ - - int i, rv = 0; - - double alpha, beta, r_r, r_r_new, p_Ap; - float *r = N_NEW(n, float); - float *p = N_NEW(n, float); - float *Ap = N_NEW(n, float); - float *Ax = N_NEW(n, float); - - /* centering x and b */ - orthog1f(n, x); - orthog1f(n, b); - - right_mult_with_vector_ff(A, n, x, Ax); - /* centering Ax */ - orthog1f(n, Ax); - - - vectors_substractionf(n, b, Ax, r); - copy_vectorf(n, r, p); - - r_r = vectors_inner_productf(n, r, r); - - for (i = 0; i < max_iterations && max_absf(n, r) > tol; i++) { - orthog1f(n, p); - orthog1f(n, x); - orthog1f(n, r); - - right_mult_with_vector_ff(A, n, p, Ap); - /* centering Ap */ - orthog1f(n, Ap); - - p_Ap = vectors_inner_productf(n, p, Ap); - if (p_Ap == 0) - break; - alpha = r_r / p_Ap; - - /* derive new x: */ - vectors_mult_additionf(n, x, (float) alpha, p); - - /* compute values for next iteration: */ - if (i < max_iterations - 1) { /* not last iteration */ - vectors_mult_additionf(n, r, (float) -alpha, Ap); - - - r_r_new = vectors_inner_productf(n, r, r); - - if (r_r == 0) { - rv = 1; - agerr (AGERR, "conjugate_gradient: unexpected length 0 vector\n"); - goto cleanup2; - } - beta = r_r_new / r_r; - r_r = r_r_new; - - vectors_scalar_multf(n, p, (float) beta, p); - - vectors_additionf(n, r, p, p); - } - } - -cleanup2 : - free(r); - free(p); - free(Ap); - free(Ax); - return rv; -} diff --git a/internal/ccall/neatogen/conjgrad.h b/internal/ccall/neatogen/conjgrad.h deleted file mode 100644 index 58b5fa7..0000000 --- a/internal/ccall/neatogen/conjgrad.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _CG_H_ -#define _CG_H_ - -#include "defs.h" - -/************************* - * C.G. method - SPARSE * - ************************/ - - extern int conjugate_gradient(vtx_data *, double *, double *, int, - double, int); - -/************************* - * C.G. method - DENSE * - ************************/ - - extern int conjugate_gradient_f(float **, double *, double *, int, - double, int, boolean); - - extern int conjugate_gradient_mkernel(float *, float *, float *, int, - double, int); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/constrained_majorization.c b/internal/ccall/neatogen/constrained_majorization.c deleted file mode 100644 index b5802bd..0000000 --- a/internal/ccall/neatogen/constrained_majorization.c +++ /dev/null @@ -1,544 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "digcola.h" -#ifdef DIGCOLA -#include -#include -#include -#include -#include -#include "stress.h" -#include "dijkstra.h" -#include "bfs.h" -#include "matrix_ops.h" -#include "kkutils.h" -#include "conjgrad.h" -#include "quad_prog_solver.h" -#include "matrix_ops.h" - -#define localConstrMajorIterations 15 -#define levels_sep_tol 1e-1 - -int stress_majorization_with_hierarchy(vtx_data * graph, /* Input graph in sparse representation */ - int n, /* Number of nodes */ - int nedges_graph, /* Number of edges */ - double **d_coords, /* Coordinates of nodes (output layout) */ - node_t ** nodes, /* Original nodes */ - int dim, /* Dimemsionality of layout */ - int opts, /* options */ - int model, /* difference model */ - int maxi, /* max iterations */ - double levels_gap) -{ - int iterations = 0; /* Output: number of iteration of the process */ - - /************************************************* - ** Computation of full, dense, unrestricted k-D ** - ** stress minimization by majorization ** - ** This function imposes HIERARCHY CONSTRAINTS ** - *************************************************/ - - int i, j, k; - boolean directionalityExist = FALSE; - float *lap1 = NULL; - float *dist_accumulator = NULL; - float *tmp_coords = NULL; - float **b = NULL; -#ifdef NONCORE - FILE *fp = NULL; -#endif - double *degrees = NULL; - float *lap2 = NULL; - int lap_length; - float *f_storage = NULL; - float **coords = NULL; - - double conj_tol = tolerance_cg; /* tolerance of Conjugate Gradient */ - float **unpackedLap = NULL; - CMajEnv *cMajEnv = NULL; - double y_0; - int length; - int smart_ini = opts & opt_smart_init; - DistType diameter; - float *Dij = NULL; - /* to compensate noises, we never consider gaps smaller than 'abs_tol' */ - double abs_tol = 1e-2; - /* Additionally, we never consider gaps smaller than 'abs_tol'* */ - double relative_tol = levels_sep_tol; - int *ordering = NULL, *levels = NULL; - float constant_term; - int count; - double degree; - int step; - float val; - double old_stress, new_stress; - boolean converged; - int len; - int num_levels; - float *hierarchy_boundaries; - - if (graph[0].edists != NULL) { - for (i = 0; i < n; i++) { - for (j = 1; j < graph[i].nedges; j++) { - directionalityExist = directionalityExist - || (graph[i].edists[j] != 0); - } - } - } - if (!directionalityExist) { - return stress_majorization_kD_mkernel(graph, n, nedges_graph, - d_coords, nodes, dim, opts, - model, maxi); - } - - /****************************************************************** - ** First, partition nodes into layers: These are our constraints ** - ******************************************************************/ - - if (smart_ini) { - double *x; - double *y; - if (dim > 2) { - /* the dim==2 case is handled below */ - if (stress_majorization_kD_mkernel(graph, n, nedges_graph, - d_coords + 1, nodes, dim - 1, - opts, model, 15) < 0) - return -1; - /* now copy the y-axis into the (dim-1)-axis */ - for (i = 0; i < n; i++) { - d_coords[dim - 1][i] = d_coords[1][i]; - } - } - - x = d_coords[0]; - y = d_coords[1]; - if (compute_y_coords(graph, n, y, n)) { - iterations = -1; - goto finish; - } - if (compute_hierarchy(graph, n, abs_tol, relative_tol, y, &ordering, - &levels, &num_levels)) { - iterations = -1; - goto finish; - } - if (num_levels < 1) { - /* no hierarchy found, use faster algorithm */ - return stress_majorization_kD_mkernel(graph, n, nedges_graph, - d_coords, nodes, dim, - opts, model, maxi); - } - - if (levels_gap > 0) { - /* ensure that levels are separated in the initial layout */ - double displacement = 0; - int stop; - for (i = 0; i < num_levels; i++) { - displacement += - MAX((double) 0, - levels_gap - (y[ordering[levels[i]]] + - displacement - - y[ordering[levels[i] - 1]])); - stop = i < num_levels - 1 ? levels[i + 1] : n; - for (j = levels[i]; j < stop; j++) { - y[ordering[j]] += displacement; - } - } - } - if (dim == 2) { - if (IMDS_given_dim(graph, n, y, x, Epsilon)) { - iterations = -1; - goto finish; - } - } - } else { - initLayout(graph, n, dim, d_coords, nodes); - if (compute_hierarchy(graph, n, abs_tol, relative_tol, NULL, &ordering, - &levels, &num_levels)) { - iterations = -1; - goto finish; - } - } - if (n == 1) - return 0; - - hierarchy_boundaries = N_GNEW(num_levels, float); - - /**************************************************** - ** Compute the all-pairs-shortest-distances matrix ** - ****************************************************/ - - if (maxi == 0) - return iterations; - - if (Verbose) - start_timer(); - - if (model == MODEL_SUBSET) { - /* weight graph to separate high-degree nodes */ - /* and perform slower Dijkstra-based computation */ - if (Verbose) - fprintf(stderr, "Calculating subset model"); - Dij = compute_apsp_artifical_weights_packed(graph, n); - } else if (model == MODEL_CIRCUIT) { - Dij = circuitModel(graph, n); - if (!Dij) { - agerr(AGWARN, - "graph is disconnected. Hence, the circuit model\n"); - agerr(AGPREV, - "is undefined. Reverting to the shortest path model.\n"); - } - } else if (model == MODEL_MDS) { - if (Verbose) - fprintf(stderr, "Calculating MDS model"); - Dij = mdsModel(graph, n); - } - if (!Dij) { - if (Verbose) - fprintf(stderr, "Calculating shortest paths"); - Dij = compute_apsp_packed(graph, n); - } - if (Verbose) { - fprintf(stderr, ": %.2f sec\n", elapsed_sec()); - fprintf(stderr, "Setting initial positions"); - start_timer(); - } - - diameter = -1; - length = n + n * (n - 1) / 2; - for (i = 0; i < length; i++) { - if (Dij[i] > diameter) { - diameter = (int) Dij[i]; - } - } - - if (!smart_ini) { - /* for numerical stability, scale down layout */ - /* No Jiggling, might conflict with constraints */ - double max = 1; - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - if (fabs(d_coords[i][j]) > max) { - max = fabs(d_coords[i][j]); - } - } - } - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - d_coords[i][j] *= 10 / max; - } - } - } - - if (levels_gap > 0) { - int length = n + n * (n - 1) / 2; - double sum1, sum2, scale_ratio; - int count; - sum1 = (float) (n * (n - 1) / 2); - sum2 = 0; - for (count = 0, i = 0; i < n - 1; i++) { - count++; // skip self distance - for (j = i + 1; j < n; j++, count++) { - sum2 += distance_kD(d_coords, dim, i, j) / Dij[count]; - } - } - scale_ratio = sum2 / sum1; - /* double scale_ratio=10; */ - for (i = 0; i < length; i++) { - Dij[i] *= (float) scale_ratio; - } - } - - /************************** - ** Layout initialization ** - **************************/ - - for (i = 0; i < dim; i++) { - orthog1(n, d_coords[i]); - } - - /* for the y-coords, don't center them, but translate them so y[0]=0 */ - y_0 = d_coords[1][0]; - for (i = 0; i < n; i++) { - d_coords[1][i] -= y_0; - } - - coords = N_GNEW(dim, float *); - f_storage = N_GNEW(dim * n, float); - for (i = 0; i < dim; i++) { - coords[i] = f_storage + i * n; - for (j = 0; j < n; j++) { - coords[i][j] = (float) (d_coords[i][j]); - } - } - - /* compute constant term in stress sum - * which is \sum_{i max_nodes_in_mem) { -#define FILENAME "tmp_Dij$$$.bin" - fp = fopen(FILENAME, "wb"); - fwrite(lap2, sizeof(float), lap_length, fp); - fclose(fp); - fp = NULL; - } -#endif - - /************************* - ** Layout optimization ** - *************************/ - - b = N_GNEW(dim, float *); - b[0] = N_GNEW(dim * n, float); - for (k = 1; k < dim; k++) { - b[k] = b[0] + k * n; - } - - tmp_coords = N_GNEW(n, float); - dist_accumulator = N_GNEW(n, float); -#ifdef NONCORE - if (n <= max_nodes_in_mem) { -#endif - lap1 = N_GNEW(lap_length, float); -#ifdef NONCORE - } else { - lap1 = lap2; - fp = fopen(FILENAME, "rb"); - fgetpos(fp, &pos); - } -#endif - - old_stress = DBL_MAX; /* at least one iteration */ - - unpackedLap = unpackMatrix(lap2, n); - cMajEnv = - initConstrainedMajorization(lap2, n, ordering, levels, num_levels); - - for (converged = FALSE, iterations = 0; - iterations < maxi && !converged; iterations++) { - - /* First, construct Laplacian of 1/(d_ij*|p_i-p_j|) */ - set_vector_val(n, 0, degrees); -#ifdef NONCORE - if (n <= max_nodes_in_mem) { -#endif - sqrt_vecf(lap_length, lap2, lap1); -#ifdef NONCORE - } else { - sqrt_vec(lap_length, lap1); - } -#endif - for (count = 0, i = 0; i < n - 1; i++) { - len = n - i - 1; - /* init 'dist_accumulator' with zeros */ - set_vector_valf(n, 0, dist_accumulator); - - /* put into 'dist_accumulator' all squared distances - * between 'i' and 'i'+1,...,'n'-1 - */ - for (k = 0; k < dim; k++) { - set_vector_valf(len, coords[k][i], tmp_coords); - vectors_mult_additionf(len, tmp_coords, -1, - coords[k] + i + 1); - square_vec(len, tmp_coords); - vectors_additionf(len, tmp_coords, dist_accumulator, - dist_accumulator); - } - - /* convert to 1/d_{ij} */ - invert_sqrt_vec(len, dist_accumulator); - /* detect overflows */ - for (j = 0; j < len; j++) { - if (dist_accumulator[j] >= FLT_MAX - || dist_accumulator[j] < 0) { - dist_accumulator[j] = 0; - } - } - - count++; /* save place for the main diagonal entry */ - degree = 0; - for (j = 0; j < len; j++, count++) { - val = lap1[count] *= dist_accumulator[j]; - degree += val; - degrees[i + j + 1] -= val; - } - degrees[i] -= degree; - } - for (step = n, count = 0, i = 0; i < n; i++, count += step, step--) { - lap1[count] = (float) degrees[i]; - } - - /* Now compute b[] (L^(X(t))*X(t)) */ - for (k = 0; k < dim; k++) { - /* b[k] := lap1*coords[k] */ - right_mult_with_vector_ff(lap1, n, coords[k], b[k]); - } - - /* compute new stress - * remember that the Laplacians are negated, so we subtract - * instead of add and vice versa - */ - new_stress = 0; - for (k = 0; k < dim; k++) { - new_stress += vectors_inner_productf(n, coords[k], b[k]); - } - new_stress *= 2; - new_stress += constant_term; // only after mult by 2 -#ifdef NONCORE - if (n > max_nodes_in_mem) { - /* restore lap2 from disk */ - fsetpos(fp, &pos); - fread(lap2, sizeof(float), lap_length, fp); - } -#endif - for (k = 0; k < dim; k++) { - right_mult_with_vector_ff(lap2, n, coords[k], tmp_coords); - new_stress -= vectors_inner_productf(n, coords[k], tmp_coords); - } - -#ifdef ALTERNATIVE_STRESS_CALC - { - double mat_stress = new_stress; - double compute_stress(float **coords, float *lap, int dim, - int n); - new_stress = compute_stress(coords, lap2, dim, n); - if (fabs(mat_stress - new_stress) / - min(mat_stress, new_stress) > 0.001) { - fprintf(stderr, - "Diff stress vals: %lf %lf (iteration #%d)\n", - mat_stress, new_stress, iterations); - } - } -#endif - /* check for convergence */ - converged = - fabs(new_stress - old_stress) / fabs(old_stress + 1e-10) < - Epsilon; - converged = converged || (iterations > 1 - && new_stress > old_stress); - /* in first iteration we allowed stress increase, which - * might result ny imposing constraints - */ - old_stress = new_stress; - - for (k = 0; k < dim; k++) { - /* now we find the optimizer of trace(X'LX)+X'B by solving 'dim' - * system of equations, thereby obtaining the new coordinates. - * If we use the constraints (given by the var's: 'ordering', - * 'levels' and 'num_levels'), we cannot optimize - * trace(X'LX)+X'B by simply solving equations, but we have - * to use a quadratic programming solver - * note: 'lap2' is a packed symmetric matrix, that is its - * upper-triangular part is arranged in a vector row-wise - * also note: 'lap2' is really the negated laplacian (the - * laplacian is -'lap2') - */ - - if (k == 1) { - /* use quad solver in the y-dimension */ - constrained_majorization_new_with_gaps(cMajEnv, b[k], - coords, dim, k, - localConstrMajorIterations, - hierarchy_boundaries, - levels_gap); - - } else { - /* use conjugate gradient for all dimensions except y */ - if (conjugate_gradient_mkernel(lap2, coords[k], b[k], n, - conj_tol, n)) { - iterations = -1; - goto finish; - } - } - } - } - free(hierarchy_boundaries); - deleteCMajEnv(cMajEnv); - - if (coords != NULL) { - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - d_coords[i][j] = coords[i][j]; - } - } - free(coords[0]); - free(coords); - } - - if (b) { - free(b[0]); - free(b); - } - free(tmp_coords); - free(dist_accumulator); - free(degrees); - free(lap2); - - -#ifdef NONCORE - if (n <= max_nodes_in_mem) { -#endif - free(lap1); -#ifdef NONCORE - } - if (fp) - fclose(fp); -#endif - -finish: - free(ordering); - - free(levels); - - if (unpackedLap) { - free(unpackedLap[0]); - free(unpackedLap); - } - return iterations; -} -#endif /* DIGCOLA */ diff --git a/internal/ccall/neatogen/constrained_majorization_ipsep.c b/internal/ccall/neatogen/constrained_majorization_ipsep.c deleted file mode 100644 index cd05402..0000000 --- a/internal/ccall/neatogen/constrained_majorization_ipsep.c +++ /dev/null @@ -1,496 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -/********************************************************** - * Based on constrained_majorization.c - * - * Perform stress majorization subject - * to separation constraints, for background see the paper: - * "IPSep-CoLa: An Incremental Procedure for Separation Constraint Layout of Graphs" - * by Tim Dwyer, Yehuda Koren and Kim Marriott - * - * Available separation constraints so far are: - * o Directed edge constraints - * o Node non-overlap constraints - * o Cluster containment constraints - * o Cluster/node non-overlap constraints - * - * Tim Dwyer, 2006 - **********************************************************/ - -#include "digcola.h" -#ifdef IPSEPCOLA -#include -#include -#include -#include -#include -#include "stress.h" -#include "dijkstra.h" -#include "bfs.h" -#include "matrix_ops.h" -#include "kkutils.h" -#include "conjgrad.h" -#include -#include "quad_prog_vpsc.h" -#include "quad_prog_solver.h" -#include "matrix_ops.h" - -#define localConstrMajorIterations 1000 - -int stress_majorization_cola(vtx_data * graph, /* Input graph in sparse representation */ - int n, /* Number of nodes */ - int nedges_graph, /* Number of edges */ - double **d_coords, /* Coordinates of nodes (output layout) */ - node_t ** nodes, /* Original nodes */ - int dim, /* Dimemsionality of layout */ - int model, /* difference model */ - int maxi, /* max iterations */ - ipsep_options * opt) -{ - int iterations = 0; /* Output: number of iteration of the process */ - - /************************************************* - ** Computation of full, dense, unrestricted k-D ** - ** stress minimization by majorization ** - ** This function imposes HIERARCHY CONSTRAINTS ** - *************************************************/ - - int i, j, k; - float *lap1 = NULL; - float *dist_accumulator = NULL; - float *tmp_coords = NULL; - float **b = NULL; - double *degrees = NULL; - float *lap2 = NULL; - int lap_length; - float *f_storage = NULL; - float **coords = NULL; - int orig_n = n; - - /*double conj_tol=tolerance_cg; *//* tolerance of Conjugate Gradient */ - CMajEnvVPSC *cMajEnvHor = NULL; - CMajEnvVPSC *cMajEnvVrt = NULL; - double y_0; - int length; - DistType diameter; - float *Dij = NULL; - float constant_term; - int count; - double degree; - int step; - float val; - double old_stress, new_stress = 0; - boolean converged; - int len; - double nsizeScale = 0; - float maxEdgeLen = 0; - double max = 1; - - initLayout(graph, n, dim, d_coords, nodes); - if (n == 1) - return 0; - - for (i = 0; i < n; i++) { - for (j = 1; j < graph[i].nedges; j++) { - maxEdgeLen = MAX(graph[i].ewgts[j], maxEdgeLen); - } - } - - /**************************************************** - ** Compute the all-pairs-shortest-distances matrix ** - ****************************************************/ - - if (maxi == 0) - return iterations; - - if (Verbose) - start_timer(); - - if (model == MODEL_SUBSET) { - /* weight graph to separate high-degree nodes */ - /* and perform slower Dijkstra-based computation */ - if (Verbose) - fprintf(stderr, "Calculating subset model"); - Dij = compute_apsp_artifical_weights_packed(graph, n); - } else if (model == MODEL_CIRCUIT) { - Dij = circuitModel(graph, n); - if (!Dij) { - agerr(AGWARN, - "graph is disconnected. Hence, the circuit model\n"); - agerr(AGPREV, - "is undefined. Reverting to the shortest path model.\n"); - } - } else if (model == MODEL_MDS) { - if (Verbose) - fprintf(stderr, "Calculating MDS model"); - Dij = mdsModel(graph, n); - } - if (!Dij) { - if (Verbose) - fprintf(stderr, "Calculating shortest paths"); - Dij = compute_apsp_packed(graph, n); - } - if (Verbose) { - fprintf(stderr, ": %.2f sec\n", elapsed_sec()); - fprintf(stderr, "Setting initial positions"); - start_timer(); - } - - diameter = -1; - length = n + n * (n - 1) / 2; - for (i = 0; i < length; i++) { - if (Dij[i] > diameter) { - diameter = (int) Dij[i]; - } - } - - /* for numerical stability, scale down layout */ - /* No Jiggling, might conflict with constraints */ - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - if (fabs(d_coords[i][j]) > max) { - max = fabs(d_coords[i][j]); - } - } - } - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - d_coords[i][j] *= 10 / max; - } - } - - /************************** - ** Layout initialization ** - **************************/ - - for (i = 0; i < dim; i++) { - orthog1(n, d_coords[i]); - } - - /* for the y-coords, don't center them, but translate them so y[0]=0 */ - y_0 = d_coords[1][0]; - for (i = 0; i < n; i++) { - d_coords[1][i] -= y_0; - } - if (Verbose) - fprintf(stderr, ": %.2f sec", elapsed_sec()); - - /************************** - ** Laplacian computation ** - **************************/ - - lap2 = Dij; - lap_length = n + n * (n - 1) / 2; - square_vec(lap_length, lap2); - /* compute off-diagonal entries */ - invert_vec(lap_length, lap2); - - if (opt->clusters->nclusters > 0) { - int nn = n + opt->clusters->nclusters * 2; - int clap_length = nn + nn * (nn - 1) / 2; - float *clap = N_GNEW(clap_length, float); - int c0, c1; - float v; - c0 = c1 = 0; - for (i = 0; i < nn; i++) { - for (j = 0; j < nn - i; j++) { - if (i < n && j < n - i) { - v = lap2[c0++]; - } else { - /* v=j==1?i%2:0; */ - if (j == 1 && i % 2 == 1) { - v = maxEdgeLen; - v *= v; - if (v > 0.01) { - v = 1.0 / v; - } - } else - v = 0; - } - clap[c1++] = v; - } - } - free(lap2); - lap2 = clap; - n = nn; - lap_length = clap_length; - } - /* compute diagonal entries */ - count = 0; - degrees = N_GNEW(n, double); - set_vector_val(n, 0, degrees); - for (i = 0; i < n - 1; i++) { - degree = 0; - count++; /* skip main diag entry */ - for (j = 1; j < n - i; j++, count++) { - val = lap2[count]; - degree += val; - degrees[i + j] -= val; - } - degrees[i] -= degree; - } - for (step = n, count = 0, i = 0; i < n; i++, count += step, step--) { - lap2[count] = (float) degrees[i]; - } - - coords = N_GNEW(dim, float *); - f_storage = N_GNEW(dim * n, float); - for (i = 0; i < dim; i++) { - coords[i] = f_storage + i * n; - for (j = 0; j < n; j++) { - coords[i][j] = j < orig_n ? (float) (d_coords[i][j]) : 0; - } - } - - /* compute constant term in stress sum - * which is \sum_{idiredges)) == NULL) { - iterations = -1; - goto finish; - } - - lap1 = N_GNEW(lap_length, float); - - for (converged = FALSE, iterations = 0; - iterations < maxi && !converged; iterations++) { - - /* First, construct Laplacian of 1/(d_ij*|p_i-p_j|) */ - set_vector_val(n, 0, degrees); - sqrt_vecf(lap_length, lap2, lap1); - for (count = 0, i = 0; i < n - 1; i++) { - len = n - i - 1; - /* init 'dist_accumulator' with zeros */ - set_vector_valf(n, 0, dist_accumulator); - - /* put into 'dist_accumulator' all squared distances - * between 'i' and 'i'+1,...,'n'-1 - */ - for (k = 0; k < dim; k++) { - set_vector_valf(len, coords[k][i], tmp_coords); - vectors_mult_additionf(len, tmp_coords, -1, - coords[k] + i + 1); - square_vec(len, tmp_coords); - vectors_additionf(len, tmp_coords, dist_accumulator, - dist_accumulator); - } - - /* convert to 1/d_{ij} */ - invert_sqrt_vec(len, dist_accumulator); - /* detect overflows */ - for (j = 0; j < len; j++) { - if (dist_accumulator[j] >= FLT_MAX - || dist_accumulator[j] < 0) { - dist_accumulator[j] = 0; - } - } - - count++; /* save place for the main diagonal entry */ - degree = 0; - for (j = 0; j < len; j++, count++) { - val = lap1[count] *= dist_accumulator[j]; - degree += val; - degrees[i + j + 1] -= val; - } - degrees[i] -= degree; - } - for (step = n, count = 0, i = 0; i < n; i++, count += step, step--) { - lap1[count] = (float) degrees[i]; - } - - /* Now compute b[] (L^(X(t))*X(t)) */ - for (k = 0; k < dim; k++) { - /* b[k] := lap1*coords[k] */ - right_mult_with_vector_ff(lap1, n, coords[k], b[k]); - } - - /* compute new stress - * remember that the Laplacians are negated, so we subtract - * instead of add and vice versa - */ - new_stress = 0; - for (k = 0; k < dim; k++) { - new_stress += vectors_inner_productf(n, coords[k], b[k]); - } - new_stress *= 2; - new_stress += constant_term; /* only after mult by 2 */ - for (k = 0; k < dim; k++) { - right_mult_with_vector_ff(lap2, n, coords[k], tmp_coords); - new_stress -= vectors_inner_productf(n, coords[k], tmp_coords); - } - -#ifdef ALTERNATIVE_STRESS_CALC - { - double mat_stress = new_stress; - double compute_stress(float **coords, float *lap, int dim, - int n); - new_stress = compute_stress(coords, lap2, dim, n); - if (fabs(mat_stress - new_stress) / - min(mat_stress, new_stress) > 0.001) { - fprintf(stderr, - "Diff stress vals: %lf %lf (iteration #%d)\n", - mat_stress, new_stress, iterations); - } - } -#endif - /* check for convergence */ - if (Verbose && (iterations % 1 == 0)) { - fprintf(stderr, "%.3f ", new_stress); - if (iterations % 10 == 0) - fprintf(stderr, "\n"); - } - converged = new_stress < old_stress - && fabs(new_stress - old_stress) / fabs(old_stress + 1e-10) < - Epsilon; - /*converged = converged || (iterations>1 && new_stress>old_stress); */ - /* in first iteration we allowed stress increase, which - * might result ny imposing constraints - */ - old_stress = new_stress; - - /* in determining non-overlap constraints we gradually scale up the - * size of nodes to avoid local minima - */ - if ((iterations >= maxi - 1 || converged) && opt->noverlap == 1 - && nsizeScale < 0.999) { - nsizeScale += 0.1; - if (Verbose) - fprintf(stderr, "nsizescale=%f,iterations=%d\n", - nsizeScale, iterations); - iterations = 0; - converged = FALSE; - } - - - /* now we find the optimizer of trace(X'LX)+X'B by solving 'dim' - * system of equations, thereby obtaining the new coordinates. - * If we use the constraints (given by the var's: 'ordering', - * 'levels' and 'num_levels'), we cannot optimize - * trace(X'LX)+X'B by simply solving equations, but we have - * to use a quadratic programming solver - * note: 'lap2' is a packed symmetric matrix, that is its - * upper-triangular part is arranged in a vector row-wise - * also note: 'lap2' is really the negated laplacian (the - * laplacian is -'lap2') - */ - - if (opt->noverlap == 1 && nsizeScale > 0.001) { - generateNonoverlapConstraints(cMajEnvHor, nsizeScale, coords, - 0, - nsizeScale < 0.5 ? FALSE : TRUE, - opt); - } - if (cMajEnvHor->m > 0) { -#ifdef MOSEK - if (opt->mosek) { - mosek_quad_solve_sep(cMajEnvHor->mosekEnv, n, b[0], - coords[0]); - } else -#endif /* MOSEK */ - constrained_majorization_vpsc(cMajEnvHor, b[0], coords[0], - localConstrMajorIterations); - } else { - /* if there are no constraints then use conjugate gradient - * optimisation which should be considerably faster - */ - if (conjugate_gradient_mkernel(lap2, coords[0], b[0], n, - tolerance_cg, n) < 0) { - iterations = -1; - goto finish; - } - } - if (opt->noverlap == 1 && nsizeScale > 0.001) { - generateNonoverlapConstraints(cMajEnvVrt, nsizeScale, coords, - 1, FALSE, opt); - } - if (cMajEnvVrt->m > 0) { -#ifdef MOSEK - if (opt->mosek) { - mosek_quad_solve_sep(cMajEnvVrt->mosekEnv, n, b[1], - coords[1]); - } else -#endif /* MOSEK */ - if (constrained_majorization_vpsc(cMajEnvVrt, b[1], coords[1], - localConstrMajorIterations) < 0) { - iterations = -1; - goto finish; - } - } else { - conjugate_gradient_mkernel(lap2, coords[1], b[1], n, - tolerance_cg, n); - } - } - if (Verbose) { - fprintf(stderr, "\nfinal e = %f %d iterations %.2f sec\n", - new_stress, iterations, elapsed_sec()); - } - deleteCMajEnvVPSC(cMajEnvHor); - deleteCMajEnvVPSC(cMajEnvVrt); - - if (opt->noverlap == 2) { - /* fprintf(stderr, "Removing overlaps as post-process...\n"); */ - removeoverlaps(orig_n, coords, opt); - } - -finish: - if (coords != NULL) { - for (i = 0; i < dim; i++) { - for (j = 0; j < orig_n; j++) { - d_coords[i][j] = coords[i][j]; - } - } - free(coords[0]); - free(coords); - } - - if (b) { - free(b[0]); - free(b); - } - free(tmp_coords); - free(dist_accumulator); - free(degrees); - free(lap2); - free(lap1); - - return iterations; -} -#endif /* IPSEPCOLA */ diff --git a/internal/ccall/neatogen/constraint.c b/internal/ccall/neatogen/constraint.c deleted file mode 100644 index 87873f3..0000000 --- a/internal/ccall/neatogen/constraint.c +++ /dev/null @@ -1,945 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include "neato.h" -#include "adjust.h" - -/* For precision, scale up before algorithms, then scale down */ -#define SCALE 10 -#define SCALE2 (SCALE/2) - -typedef struct nitem { - Dtlink_t link; - int val; - point pos; /* position for sorting */ - node_t *np; /* base node */ - node_t *cnode; /* corresponding node in constraint graph */ - node_t *vnode; /* corresponding node in neighbor graph */ - box bb; -} nitem; - -typedef int (*distfn) (box *, box *); -typedef int (*intersectfn) (nitem *, nitem *); - -static int cmpitem(Dt_t * d, int *p1, int *p2, Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - - return (*p1 - *p2); -} - -static Dtdisc_t constr = { - offsetof(nitem, val), - sizeof(int), - offsetof(nitem, link), - NIL(Dtmake_f), - NIL(Dtfree_f), - (Dtcompar_f) cmpitem, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -static int distY(box * b1, box * b2) -{ - return ((b1->UR.y - b1->LL.y) + (b2->UR.y - b2->LL.y)) / 2; -} - -static int distX(box * b1, box * b2) -{ - return ((b1->UR.x - b1->LL.x) + (b2->UR.x - b2->LL.x)) / 2; -} - -/* intersectX0: - * Return true if boxes could overlap if shifted in y but don't, - * or if actually overlap and an y move is smallest to remove overlap. - * Otherwise (no x overlap or a x move is smaller), return false. - * Assume q pos to above of p pos. - */ -static int intersectX0(nitem * p, nitem * q) -{ - int xdelta, ydelta; - int v = ((p->bb.LL.x <= q->bb.UR.x) && (q->bb.LL.x <= p->bb.UR.x)); - if (v == 0) /* no x overlap */ - return 0; - if (p->bb.UR.y < q->bb.LL.y) /* but boxes don't really overlap */ - return 1; - ydelta = distY(&p->bb,&q->bb) - (q->pos.y - p->pos.y); - if (q->pos.x >= p->pos.x) - xdelta = distX(&p->bb,&q->bb) - (q->pos.x - p->pos.x); - else - xdelta = distX(&p->bb,&q->bb) - (p->pos.x - q->pos.x); - return (ydelta <= xdelta); -} - -/* intersectY0: - * Return true if boxes could overlap if shifted in x but don't, - * or if actually overlap and an x move is smallest to remove overlap. - * Otherwise (no y overlap or a y move is smaller), return false. - * Assume q pos to right of p pos. - */ -static int intersectY0(nitem * p, nitem * q) -{ - int xdelta, ydelta; - int v = ((p->bb.LL.y <= q->bb.UR.y) && (q->bb.LL.y <= p->bb.UR.y)); - if (v == 0) /* no y overlap */ - return 0; - if (p->bb.UR.x < q->bb.LL.x) /* but boxes don't really overlap */ - return 1; - xdelta = distX(&p->bb,&q->bb) - (q->pos.x - p->pos.x); - if (q->pos.y >= p->pos.y) - ydelta = distY(&p->bb,&q->bb) - (q->pos.y - p->pos.y); - else - ydelta = distY(&p->bb,&q->bb) - (p->pos.y - q->pos.y); - return (xdelta <= ydelta); -} - -static int intersectY(nitem * p, nitem * q) -{ - return ((p->bb.LL.y <= q->bb.UR.y) && (q->bb.LL.y <= p->bb.UR.y)); -} - -static int intersectX(nitem * p, nitem * q) -{ - return ((p->bb.LL.x <= q->bb.UR.x) && (q->bb.LL.x <= p->bb.UR.x)); -} - -/* mapGraphs: - */ -static void mapGraphs(graph_t * g, graph_t * cg, distfn dist) -{ - node_t *n; - edge_t *e; - edge_t *ce; - node_t *t; - node_t *h; - nitem *tp; - nitem *hp; - int delta; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - tp = (nitem *) ND_alg(n); - t = tp->cnode; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - hp = (nitem *) ND_alg(aghead(e)); - delta = dist(&tp->bb, &hp->bb); - h = hp->cnode; - ce = agedge(cg, t, h, NULL, 1); - agbindrec(ce, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); - ED_weight(ce) = 1; - if (ED_minlen(ce) < delta) { - if (ED_minlen(ce) == 0.0) { - elist_append(ce, ND_out(t)); - elist_append(ce, ND_in(h)); - } - ED_minlen(ce) = delta; - } - } - } -} - -#if DEBUG > 1 -static int -indegree (graph_t * g, node_t *n) -{ - edge_t *e; - int cnt = 0; - for (e = agfstin(g,n); e; e = agnxtin(g,e)) cnt++; - return cnt; -} - -static int -outdegree (graph_t * g, node_t *n) -{ - edge_t *e; - int cnt = 0; - for (e = agfstout(g,n); e; e = agnxtout(g,e)) cnt++; - return cnt; -} - -static void -validate(graph_t * g) -{ - node_t *n; - edge_t *e; - int i, cnt; - - cnt = 0; - for (n = GD_nlist(g);n; n = ND_next(n)) { - assert(outdegree(g,n) == ND_out(n).size); - for (i = 0; (e = ND_out(n).list[i]); i++) { - assert(agtail(e) == n); - assert( e == agfindedge(g, n, aghead(e))); - } - assert(indegree(g,n) == ND_in(n).size); - for (i = 0; (e = ND_in(n).list[i]); i++) { - assert(aghead(e) == n); - assert( e == agfindedge(g, agtail(e), n)); - } - cnt++; - } - - assert (agnnodes(g) == cnt); -} -#endif - -#ifdef OLD -static node_t *newNode(graph_t * g) -{ - static int id = 0; - char buf[100]; - - sprintf(buf, "n%d", id++); - return agnode(g, buf); -} -#endif - -/* mkNConstraintG: - * Similar to mkConstraintG, except it doesn't enforce orthogonal - * ordering. If there is overlap, as defined by intersect, the - * nodes will kept/pushed apart in the current order. If not, no - * constraint is enforced. If a constraint edge is added, and it - * corresponds to a real edge, we increase the weight in an attempt - * to keep the resulting shift short. - */ -static graph_t *mkNConstraintG(graph_t * g, Dt_t * list, - intersectfn intersect, distfn dist) -{ - nitem *p; - nitem *nxp; - node_t *n; - edge_t *e; - node_t *lastn = NULL; - graph_t *cg = agopen("cg", Agstrictdirected, NIL(Agdisc_t *)); - agbindrec(cg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data - - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - n = agnode(cg, agnameof(p->np), 1); /* FIX */ - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - ND_alg(n) = p; - p->cnode = n; - alloc_elist(0, ND_in(n)); - alloc_elist(0, ND_out(n)); - if (lastn) { - ND_next(lastn) = n; - lastn = n; - } else { - lastn = GD_nlist(cg) = n; - } - } - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - for (nxp = (nitem *) dtlink(link, (Dtlink_t *) p); nxp; - nxp = (nitem *) dtlink(list, (Dtlink_t *) nxp)) { - e = NULL; - if (intersect(p, nxp)) { - double delta = dist(&p->bb, &nxp->bb); - e = agedge(cg, p->cnode, nxp->cnode, NULL, 1); - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); // edge custom data - assert (delta <= 0xFFFF); - ED_minlen(e) = delta; - ED_weight(e) = 1; - } - if (e && agfindedge(g,p->np, nxp->np)) { - ED_weight(e) = 100; - } -#if 0 - if (agfindedge(g,p->np, nxp->np)) { - if (e == NULL) - e = agedge(cg, p->cnode, nxp->cnode); - ED_weight(e) = 100; - /* If minlen < SCALE, the nodes can't conflict or there's - * an overlap but it will be removed in the orthogonal pass. - * So we just keep the node's basically where they are. - */ - if (SCALE > ED_minlen(e)) - ED_minlen(e) = SCALE; - } -#endif - } - } - - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - n = p->cnode; - for (e = agfstout(cg,n); e; e = agnxtout(cg,e)) { - elist_append(e, ND_out(n)); - elist_append(e, ND_in(aghead(e))); - } - } - - /* We could remove redundant constraints here. However, the cost of doing - * this may be a good deal more than the time saved in network simplex. - * Also, if the graph is changed, the ND_in and ND_out data has to be - * updated. - */ - return cg; -} -/* mkConstraintG: - */ -static graph_t *mkConstraintG(graph_t * g, Dt_t * list, - intersectfn intersect, distfn dist) -{ - nitem *p; - nitem *nxt = NULL; - nitem *nxp; - graph_t *vg; - node_t *prev = NULL; - node_t *root = NULL; - node_t *n = NULL; - edge_t *e; - int lcnt, cnt; - int oldval = -INT_MAX; -#ifdef OLD - double root_val; -#endif - node_t *lastn = NULL; - graph_t *cg = agopen("cg", Agstrictdirected, NIL(Agdisc_t *)); - agbindrec(cg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data - - /* count distinct nodes */ - cnt = 0; - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - if (oldval != p->val) { - oldval = p->val; - cnt++; - } - } - - /* construct basic chain to enforce left to right order */ - oldval = -INT_MAX; - lcnt = 0; - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - if (oldval != p->val) { - oldval = p->val; - /* n = newNode (cg); */ - n = agnode(cg, agnameof(p->np), 1); /* FIX */ - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - ND_alg(n) = p; - if (root) { - ND_next(lastn) = n; - lastn = n; - } else { - root = n; -#ifdef OLD - root_val = p->val; -#endif - lastn = GD_nlist(cg) = n; - } - alloc_elist(lcnt, ND_in(n)); - if (prev) { - if (prev == root) - alloc_elist(2 * (cnt - 1), ND_out(prev)); - else - alloc_elist(cnt - lcnt - 1, ND_out(prev)); - e = agedge(cg, prev, n, NULL, 1); - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); // edge custom data - ED_minlen(e) = SCALE; - ED_weight(e) = 1; - elist_append(e, ND_out(prev)); - elist_append(e, ND_in(n)); - } - lcnt++; - prev = n; - } - p->cnode = n; - } - alloc_elist(0, ND_out(prev)); - - /* add immediate right neighbor constraints - * Construct visibility graph, then perform transitive reduction. - * Remaining outedges are immediate right neighbors. - * FIX: Incremental algorithm to construct trans. reduction? - */ - vg = agopen("vg", Agstrictdirected, NIL(Agdisc_t *)); - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - n = agnode(vg, agnameof(p->np), 1); /* FIX */ - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - p->vnode = n; - ND_alg(n) = p; - } - oldval = -INT_MAX; - for (p = (nitem *) dtflatten(list); p; - p = (nitem *) dtlink(list, (Dtlink_t *) p)) { - if (oldval != p->val) { /* new pos: reset nxt */ - oldval = p->val; - for (nxt = (nitem *) dtlink(link, (Dtlink_t *) p); nxt; - nxt = (nitem *) dtlink(list, (Dtlink_t *) nxt)) { - if (nxt->val != oldval) - break; - } - if (!nxt) - break; - } - for (nxp = nxt; nxp; - nxp = (nitem *) dtlink(list, (Dtlink_t *) nxp)) { - if (intersect(p, nxp)) - agedge(vg, p->vnode, nxp->vnode, NULL, 1); - } - } - - /* Remove redundant constraints here. However, the cost of doing this - * may be a good deal more than the time saved in network simplex. Also, - * if the graph is changed, the ND_in and ND_out data has to be updated. - */ - mapGraphs(vg, cg, dist); - agclose(vg); - - /* add dummy constraints for absolute values and initial positions */ -#ifdef OLD - for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) { - node_t *vn; /* slack node for absolute value */ - node_t *an; /* node representing original position */ - - p = (nitem *) ND_alg(n); - if ((n == root) || (!p)) - continue; - vn = newNode(cg); - ND_next(lastn) = vn; - lastn = vn; - alloc_elist(0, ND_out(vn)); - alloc_elist(2, ND_in(vn)); - an = newNode(cg); - ND_next(lastn) = an; - lastn = an; - alloc_elist(1, ND_in(an)); - alloc_elist(1, ND_out(an)); - - e = agedge(cg, root, an, 1); - ED_minlen(e) = p->val - root_val; - elist_append(e, ND_out(root)); - elist_append(e, ND_in(an)); - - e = agedge(cg, an, vn, 1); - elist_append(e, ND_out(an)); - elist_append(e, ND_in(vn)); - - e = agedge(cg, n, vn, 1); - elist_append(e, ND_out(n)); - elist_append(e, ND_in(vn)); - } -#endif /* OLD */ - - return cg; -} - -static void closeGraph(graph_t * cg) -{ - node_t *n; - for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) { - free_list(ND_in(n)); - free_list(ND_out(n)); - } - agclose(cg); -} - -/* constrainX: - * Create the X constrains and solve. We use a linear objective function - * (absolute values rather than squares), so we can reuse network simplex. - * The constraints are encoded as a dag with edges having a minimum length. - */ -static void constrainX(graph_t* g, nitem* nlist, int nnodes, intersectfn ifn, - int ortho) -{ - Dt_t *list = dtopen(&constr, Dtobag); - nitem *p = nlist; - graph_t *cg; - int i; - - for (i = 0; i < nnodes; i++) { - p->val = p->pos.x; - dtinsert(list, p); - p++; - } - if (ortho) - cg = mkConstraintG(g, list, ifn, distX); - else - cg = mkNConstraintG(g, list, ifn, distX); - rank(cg, 2, INT_MAX); - - p = nlist; - for (i = 0; i < nnodes; i++) { - int newpos, oldpos, delta; - oldpos = p->pos.x; - newpos = ND_rank(p->cnode); - delta = newpos - oldpos; - p->pos.x = newpos; - p->bb.LL.x += delta; - p->bb.UR.x += delta; - p++; - } - - closeGraph(cg); - dtclose(list); -} - -/* constrainY: - * See constrainX. - */ -static void constrainY(graph_t* g, nitem* nlist, int nnodes, intersectfn ifn, - int ortho) -{ - Dt_t *list = dtopen(&constr, Dtobag); - nitem *p = nlist; - graph_t *cg; - int i; - - for (i = 0; i < nnodes; i++) { - p->val = p->pos.y; - dtinsert(list, p); - p++; - } - if (ortho) - cg = mkConstraintG(g, list, ifn, distY); - else - cg = mkNConstraintG(g, list, ifn, distY); - rank(cg, 2, INT_MAX); -#ifdef DEBUG - { - Agsym_t *mlsym = agattr(cg, AGEDGE, "minlen", ""); - Agsym_t *rksym = agattr(cg, AGNODE, "rank", ""); - char buf[100]; - node_t *n; - edge_t *e; - for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) { - sprintf(buf, "%d", ND_rank(n)); - agxset(n, rksym, buf); - for (e = agfstedge(cg, n); e; e = agnxtedge(cg, e, n)) { - sprintf(buf, "%d", ED_minlen(e)); - agxset(e, mlsym, buf); - } - } - } -#endif - - p = nlist; - for (i = 0; i < nnodes; i++) { - int newpos, oldpos, delta; - oldpos = p->pos.y; - newpos = ND_rank(p->cnode); - delta = newpos - oldpos; - p->pos.y = newpos; - p->bb.LL.y += delta; - p->bb.UR.y += delta; - p++; - } - - closeGraph(cg); - dtclose(list); -} - -#define overlap(pb,qb) \ - ((pb.LL.x <= qb.UR.x) && (qb.LL.x <= pb.UR.x) && \ - (pb.LL.y <= qb.UR.y) && (qb.LL.y <= pb.UR.y)) - -/* overlaps: - */ -static int overlaps(nitem * p, int cnt) -{ - int i, j; - nitem *pi = p; - nitem *pj; - - for (i = 0; i < cnt - 1; i++) { - pj = pi + 1; - for (j = i + 1; j < cnt; j++) { - if (overlap(pi->bb, pj->bb)) - return 1; - pj++; - } - pi++; - } - return 0; -} - -/* initItem: - */ -static void initItem(node_t * n, nitem * p, expand_t margin) -{ - int x = POINTS(SCALE * ND_pos(n)[0]); - int y = POINTS(SCALE * ND_pos(n)[1]); - int w2, h2; - box b; - - if (margin.doAdd) { - w2 = SCALE * (POINTS(ND_width(n)/2.0) + margin.x); - h2 = SCALE * (POINTS(ND_height(n)/2.0) + margin.y); - } - else { - w2 = POINTS(margin.x * SCALE2 * ND_width(n)); - h2 = POINTS(margin.y * SCALE2 * ND_height(n)); - } - - b.LL.x = x - w2; - b.LL.y = y - h2; - b.UR.x = x + w2; - b.UR.y = y + h2; - - p->pos.x = x; - p->pos.y = y; - p->np = n; - p->bb = b; -} - -/* cAdjust: - * Use optimization to remove overlaps. - * Modifications; - * - do y;x then x;y and use the better one - * - for all overlaps (or if overlap with leftmost nodes), add a constraint; - * constraint could move both x and y away, or the smallest, or some - * mixture. - * - follow by a scale down using actual shapes - * We use an optimization based on Marriott, Stuckey, Tam and He, - * "Removing Node Overlapping in Graph Layout Using Constrained Optimization", - * Constraints,8(2):143--172, 2003. - * We solve 2 constraint problem, one in X, one in Y. In each dimension, - * we require relative positions to remain the same. That is, if two nodes - * have the same x originally, they have the same x at the end, and if one - * node is to the left of another, it remains to the left. In addition, if - * two nodes could overlap by moving their X coordinates, we insert a constraint * to keep the two nodes sufficiently apart. Similarly, for Y. - * - * mode = AM_ORTHOXY => first X, then Y - * mode = AM_ORTHOYX => first Y, then X - * mode = AM_ORTHO => first X, then Y - * mode = AM_ORTHO_YX => first Y, then X - * In the last 2 cases, relax the constraints as follows: during the X pass, - * if two nodes actually intersect and a smaller move in the Y direction - * will remove the overlap, we don't force the nodes apart in the X direction, - * but leave it for the Y pass to remove any remaining overlaps. Without this, - * the X pass will remove all overlaps, and the Y pass only compresses in the - * Y direction, causing a skewing of the aspect ratio. - * - * mode = AM_ORTHOXY => first X, then Y - * mode = AM_ORTHOYX => first Y, then X - * mode = AM_ORTHO => first X, then Y - * mode = AM_ORTHO_YX => first Y, then X - */ -int cAdjust(graph_t * g, int mode) -{ - expand_t margin; - int ret, i, nnodes = agnnodes(g); - nitem *nlist = N_GNEW(nnodes, nitem); - nitem *p = nlist; - node_t *n; - - margin = sepFactor (g); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - initItem(n, p, margin); - p++; - } - - if (overlaps(nlist, nnodes)) { - point pt; - - switch ((adjust_mode)mode) { - case AM_ORTHOXY: - constrainX(g, nlist, nnodes, intersectY, 1); - constrainY(g, nlist, nnodes, intersectX, 1); - break; - case AM_ORTHOYX: - constrainY(g, nlist, nnodes, intersectX, 1); - constrainX(g, nlist, nnodes, intersectY, 1); - break; - case AM_ORTHO : - constrainX(g, nlist, nnodes, intersectY0, 1); - constrainY(g, nlist, nnodes, intersectX, 1); - case AM_ORTHO_YX : - constrainY(g, nlist, nnodes, intersectX0, 1); - constrainX(g, nlist, nnodes, intersectY, 1); - case AM_PORTHOXY: - constrainX(g, nlist, nnodes, intersectY, 0); - constrainY(g, nlist, nnodes, intersectX, 0); - break; - case AM_PORTHOYX: - constrainY(g, nlist, nnodes, intersectX, 0); - constrainX(g, nlist, nnodes, intersectY, 0); - break; - case AM_PORTHO_YX : - constrainY(g, nlist, nnodes, intersectX0, 0); - constrainX(g, nlist, nnodes, intersectY, 0); - break; - case AM_PORTHO : - default : - constrainX(g, nlist, nnodes, intersectY0, 0); - constrainY(g, nlist, nnodes, intersectX, 0); - break; - } - p = nlist; - for (i = 0; i < nnodes; i++) { - n = p->np; - pt = p->pos; - ND_pos(n)[0] = PS2INCH(pt.x) / SCALE; - ND_pos(n)[1] = PS2INCH(pt.y) / SCALE; - p++; - } - ret = 1; - } - else ret = 0; - free(nlist); - return ret; -} - -typedef struct { - pointf pos; /* position for sorting */ - boxf bb; - double wd2; - double ht2; - node_t *np; -} info; - -typedef int (*sortfn_t) (const void *, const void *); - -static int sortf(pointf * p, pointf * q) -{ - if (p->x < q->x) - return -1; - else if (p->x > q->x) - return 1; - else if (p->y < q->y) - return -1; - else if (p->y > q->y) - return 1; - else - return 0; -} - -static double compress(info * nl, int nn) -{ - info *p = nl; - info *q; - int i, j; - double s, sc = 0; - pointf pt; - - for (i = 0; i < nn; i++) { - q = p + 1; - for (j = i + 1; j < nn; j++) { - if (overlap(p->bb, q->bb)) - return 0; - if (p->pos.x == q->pos.x) - pt.x = HUGE_VAL; - else { - pt.x = (p->wd2 + q->wd2) / fabs(p->pos.x - q->pos.x); - } - if (p->pos.y == q->pos.y) - pt.y = HUGE_VAL; - else { - pt.y = (p->ht2 + q->ht2) / fabs(p->pos.y - q->pos.y); - } - if (pt.y < pt.x) - s = pt.y; - else - s = pt.x; - if (s > sc) - sc = s; - q++; - } - p++; - } - return sc; -} - -static pointf *mkOverlapSet(info * nl, int nn, int *cntp) -{ - info *p = nl; - info *q; - int sz = nn; - pointf *S = N_GNEW(sz + 1, pointf); - int i, j; - int cnt = 0; - - for (i = 0; i < nn; i++) { - q = p + 1; - for (j = i + 1; j < nn; j++) { - if (overlap(p->bb, q->bb)) { - pointf pt; - if (cnt == sz) { - sz += nn; - S = RALLOC(sz + 1, S, pointf); - } - if (p->pos.x == q->pos.x) - pt.x = HUGE_VAL; - else { - pt.x = (p->wd2 + q->wd2) / fabs(p->pos.x - q->pos.x); - if (pt.x < 1) - pt.x = 1; - } - if (p->pos.y == q->pos.y) - pt.y = HUGE_VAL; - else { - pt.y = (p->ht2 + q->ht2) / fabs(p->pos.y - q->pos.y); - if (pt.y < 1) - pt.y = 1; - } - S[++cnt] = pt; - } - q++; - } - p++; - } - - S = RALLOC(cnt + 1, S, pointf); - *cntp = cnt; - return S; -} - -static pointf computeScaleXY(pointf * aarr, int m) -{ - pointf *barr; - double cost, bestcost; - int k, best = 0; - pointf scale; - - aarr[0].x = 1; - aarr[0].y = HUGE_VAL; - qsort(aarr + 1, m, sizeof(pointf), (sortfn_t) sortf); - - barr = N_GNEW(m + 1, pointf); - barr[m].x = aarr[m].x; - barr[m].y = 1; - for (k = m - 1; k >= 0; k--) { - barr[k].x = aarr[k].x; - barr[k].y = MAX(aarr[k + 1].y, barr[k + 1].y); - } - - bestcost = HUGE_VAL; - for (k = 0; k <= m; k++) { - cost = barr[k].x * barr[k].y; - if (cost < bestcost) { - bestcost = cost; - best = k; - } - } - assert(bestcost < HUGE_VAL); - scale.x = barr[best].x; - scale.y = barr[best].y; - - return scale; -} - -/* computeScale: - * For each (x,y) in aarr, scale has to be bigger than the smallest one. - * So, the scale is the max min. - */ -static double computeScale(pointf * aarr, int m) -{ - int i; - double sc = 0; - double v; - pointf p; - - aarr++; - for (i = 1; i <= m; i++) { - p = *aarr++; - v = MIN(p.x, p.y); - if (v > sc) - sc = v; - } - return sc; -} - -/* scAdjust: - * Scale the layout. - * equal > 0 => scale uniformly in x and y to remove overlaps - * equal = 0 => scale separately in x and y to remove overlaps - * equal < 0 => scale down uniformly in x and y to remove excess space - * The last assumes there are no overlaps at present. - * Based on Marriott, Stuckey, Tam and He, - * "Removing Node Overlapping in Graph Layout Using Constrained Optimization", - * Constraints,8(2):143--172, 2003. - */ -int scAdjust(graph_t * g, int equal) -{ - int nnodes = agnnodes(g); - info *nlist = N_GNEW(nnodes, info); - info *p = nlist; - node_t *n; - pointf s; - int i; - expand_t margin; - pointf *aarr; - int m; - - margin = sepFactor (g); - if (margin.doAdd) { - /* we use inches below */ - margin.x = PS2INCH(margin.x); - margin.y = PS2INCH(margin.y); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - double w2, h2; - if (margin.doAdd) { - w2 = (ND_width(n) / 2.0) + margin.x; - h2 = (ND_height(n) / 2.0) + margin.y; - } - else { - w2 = margin.x * ND_width(n) / 2.0; - h2 = margin.y * ND_height(n) / 2.0; - } - p->pos.x = ND_pos(n)[0]; - p->pos.y = ND_pos(n)[1]; - p->bb.LL.x = p->pos.x - w2; - p->bb.LL.y = p->pos.y - h2; - p->bb.UR.x = p->pos.x + w2; - p->bb.UR.y = p->pos.y + h2; - p->wd2 = w2; - p->ht2 = h2; - p->np = n; - p++; - } - - if (equal < 0) { - s.x = s.y = compress(nlist, nnodes); - if (s.x == 0) { /* overlaps exist */ - free(nlist); - return 0; - } - if (Verbose) fprintf(stderr, "compress %g \n", s.x); - } else { - aarr = mkOverlapSet(nlist, nnodes, &m); - - if (m == 0) { /* no overlaps */ - free(aarr); - free(nlist); - return 0; - } - - if (equal) { - s.x = s.y = computeScale(aarr, m); - } else { - s = computeScaleXY(aarr, m); - } - free(aarr); - if (Verbose) fprintf(stderr, "scale by %g,%g \n", s.x, s.y); - } - - p = nlist; - for (i = 0; i < nnodes; i++) { - ND_pos(p->np)[0] = s.x * p->pos.x; - ND_pos(p->np)[1] = s.y * p->pos.y; - p++; - } - - free(nlist); - return 1; -} diff --git a/internal/ccall/neatogen/defs.h b/internal/ccall/neatogen/defs.h deleted file mode 100644 index 03fa9e1..0000000 --- a/internal/ccall/neatogen/defs.h +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _DEFS_H_ -#define _DEFS_H_ - -#include "neato.h" - -#include "sparsegraph.h" - -#ifdef DIGCOLA -#ifdef IPSEPCOLA - typedef struct cluster_data { - int nvars; /* total count of vars in clusters */ - int nclusters; /* number of clusters */ - int *clustersizes; /* number of vars in each cluster */ - int **clusters; /* list of var indices for constituents of each c */ - int ntoplevel; /* number of nodes not in any cluster */ - int *toplevel; /* array of nodes not in any cluster */ - boxf *bb; /* bounding box of each cluster */ - } cluster_data; -#endif -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/neatogen/delaunay.c b/internal/ccall/neatogen/delaunay.c deleted file mode 100644 index a7e4ef2..0000000 --- a/internal/ccall/neatogen/delaunay.c +++ /dev/null @@ -1,926 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include "cgraph.h" /* for agerr() and friends */ -#include "delaunay.h" -#include "memory.h" -#include "logic.h" - -#if __HAVE_GTS__ -#include - -static gboolean triangle_is_hole(GtsTriangle * t) -{ - GtsEdge *e1, *e2, *e3; - GtsVertex *v1, *v2, *v3; - gboolean ret; - - gts_triangle_vertices_edges(t, NULL, &v1, &v2, &v3, &e1, &e2, &e3); - - if ((GTS_IS_CONSTRAINT(e1) && GTS_SEGMENT(e1)->v1 != v1) || - (GTS_IS_CONSTRAINT(e2) && GTS_SEGMENT(e2)->v1 != v2) || - (GTS_IS_CONSTRAINT(e3) && GTS_SEGMENT(e3)->v1 != v3)) - ret = TRUE; - else ret = FALSE; - return ret; -} - -static guint delaunay_remove_holes(GtsSurface * surface) -{ - return gts_surface_foreach_face_remove(surface, - (GtsFunc) triangle_is_hole, NULL); -} - -/* Derived classes for vertices and faces so we can assign integer ids - * to make it easier to identify them. In particular, this allows the - * segments and faces to refer to vertices using the order in which - * they were passed in. - */ -typedef struct { - GtsVertex v; - int idx; -} GVertex; - -typedef struct { - GtsVertexClass parent_class; -} GVertexClass; - -static GVertexClass *g_vertex_class(void) -{ - static GVertexClass *klass = NULL; - - if (klass == NULL) { - GtsObjectClassInfo vertex_info = { - "GVertex", - sizeof(GVertex), - sizeof(GVertexClass), - (GtsObjectClassInitFunc) NULL, - (GtsObjectInitFunc) NULL, - (GtsArgSetFunc) NULL, - (GtsArgGetFunc) NULL - }; - klass = gts_object_class_new(GTS_OBJECT_CLASS(gts_vertex_class()), - &vertex_info); - } - - return klass; -} - -typedef struct { - GtsFace v; - int idx; -} GFace; - -typedef struct { - GtsFaceClass parent_class; -} GFaceClass; - -static GFaceClass *g_face_class(void) -{ - static GFaceClass *klass = NULL; - - if (klass == NULL) { - GtsObjectClassInfo face_info = { - "GFace", - sizeof(GFace), - sizeof(GFaceClass), - (GtsObjectClassInitFunc) NULL, - (GtsObjectInitFunc) NULL, - (GtsArgSetFunc) NULL, - (GtsArgGetFunc) NULL - }; - klass = gts_object_class_new(GTS_OBJECT_CLASS(gts_face_class()), - &face_info); - } - - return klass; -} - -/* destroy: - * Destroy each edge using v, then destroy v - */ -static void -destroy (GtsVertex* v) -{ - GSList * i; - - i = v->segments; - while (i) { - GSList * next = i->next; - gts_object_destroy (i->data); - i = next; - } - g_assert (v->segments == NULL); - gts_object_destroy(GTS_OBJECT(v)); -} - -/* tri: - * Main entry point to using GTS for triangulation. - * Input is npt points with x and y coordinates stored either separately - * in x[] and y[] (sepArr != 0) or consecutively in x[] (sepArr == 0). - * Optionally, the input can include nsegs line segments, whose endpoint - * indices are supplied in segs[2*i] and segs[2*i+1] yielding a constrained - * triangulation. - * - * The return value is the corresponding gts surface, which can be queries for - * the triangles and line segments composing the triangulation. - */ -static GtsSurface* -tri(double *x, double *y, int npt, int *segs, int nsegs, int sepArr) -{ - int i; - GtsSurface *surface; - GVertex **vertices = N_GNEW(npt, GVertex *); - GtsEdge **edges = N_GNEW(nsegs, GtsEdge*); - GSList *list = NULL; - GtsVertex *v1, *v2, *v3; - GtsTriangle *t; - GtsVertexClass *vcl = (GtsVertexClass *) g_vertex_class(); - GtsEdgeClass *ecl = GTS_EDGE_CLASS (gts_constraint_class ()); - - if (sepArr) { - for (i = 0; i < npt; i++) { - GVertex *p = (GVertex *) gts_vertex_new(vcl, x[i], y[i], 0); - p->idx = i; - vertices[i] = p; - } - } - else { - for (i = 0; i < npt; i++) { - GVertex *p = (GVertex *) gts_vertex_new(vcl, x[2*i], x[2*i+1], 0); - p->idx = i; - vertices[i] = p; - } - } - - /* N.B. Edges need to be created here, presumably before the - * the vertices are added to the face. In particular, they cannot - * be added created and added vi gts_delaunay_add_constraint() below. - */ - for (i = 0; i < nsegs; i++) { - edges[i] = gts_edge_new(ecl, - (GtsVertex *) (vertices[ segs[ 2 * i]]), - (GtsVertex *) (vertices[ segs[ 2 * i + 1]])); - } - - for (i = 0; i < npt; i++) - list = g_slist_prepend(list, vertices[i]); - t = gts_triangle_enclosing(gts_triangle_class(), list, 100.); - g_slist_free(list); - - gts_triangle_vertices(t, &v1, &v2, &v3); - - surface = gts_surface_new(gts_surface_class(), - (GtsFaceClass *) g_face_class(), - gts_edge_class(), - gts_vertex_class()); - gts_surface_add_face(surface, gts_face_new(gts_face_class(), - t->e1, t->e2, t->e3)); - - for (i = 0; i < npt; i++) { - GtsVertex *v1 = (GtsVertex *) vertices[i]; - GtsVertex *v = gts_delaunay_add_vertex(surface, v1, NULL); - - /* if v != NULL, it is a previously added pt with the same - * coordinates as v1, in which case we replace v1 with v - */ - if (v) { - /* agerr (AGWARN, "Duplicate point %d %d\n", i, ((GVertex*)v)->idx); */ - gts_vertex_replace (v1, v); - } - } - - for (i = 0; i < nsegs; i++) { - gts_delaunay_add_constraint(surface,GTS_CONSTRAINT(edges[i])); - } - - /* destroy enclosing triangle */ - gts_allow_floating_vertices = TRUE; - gts_allow_floating_edges = TRUE; -/* - gts_object_destroy(GTS_OBJECT(v1)); - gts_object_destroy(GTS_OBJECT(v2)); - gts_object_destroy(GTS_OBJECT(v3)); -*/ - destroy(v1); - destroy(v2); - destroy(v3); - gts_allow_floating_edges = FALSE; - gts_allow_floating_vertices = FALSE; - - if (nsegs) - delaunay_remove_holes(surface); - - free (edges); - free(vertices); - return surface; -} - -typedef struct { - int n; - v_data *delaunay; -} estats; - -static void cnt_edge (GtsSegment * e, estats* sp) -{ - sp->n++; - if (sp->delaunay) { - sp->delaunay[((GVertex*)(e->v1))->idx].nedges++; - sp->delaunay[((GVertex*)(e->v2))->idx].nedges++; - } -} - -static void -edgeStats (GtsSurface* s, estats* sp) -{ - gts_surface_foreach_edge (s, (GtsFunc) cnt_edge, sp); -} - -static void add_edge (GtsSegment * e, v_data* delaunay) -{ - int source = ((GVertex*)(e->v1))->idx; - int dest = ((GVertex*)(e->v2))->idx; - - delaunay[source].edges[delaunay[source].nedges++] = dest; - delaunay[dest].edges[delaunay[dest].nedges++] = source; -} - -v_data *delaunay_triangulation(double *x, double *y, int n) -{ - v_data *delaunay; - GtsSurface* s = tri(x, y, n, NULL, 0, 1); - int i, nedges; - int* edges; - estats stats; - - if (!s) return NULL; - - delaunay = N_GNEW(n, v_data); - - for (i = 0; i < n; i++) { - delaunay[i].ewgts = NULL; - delaunay[i].nedges = 1; - } - - stats.n = 0; - stats.delaunay = delaunay; - edgeStats (s, &stats); - nedges = stats.n; - edges = N_GNEW(2 * nedges + n, int); - - for (i = 0; i < n; i++) { - delaunay[i].edges = edges; - edges += delaunay[i].nedges; - delaunay[i].edges[0] = i; - delaunay[i].nedges = 1; - } - gts_surface_foreach_edge (s, (GtsFunc) add_edge, delaunay); - - gts_object_destroy (GTS_OBJECT (s)); - - return delaunay; -} - -typedef struct { - int n; - int* edges; -} estate; - -static void addEdge (GtsSegment * e, estate* es) -{ - int source = ((GVertex*)(e->v1))->idx; - int dest = ((GVertex*)(e->v2))->idx; - - es->edges[2*(es->n)] = source; - es->edges[2*(es->n)+1] = dest; - es->n += 1; -} - -/* If qsort_r ever becomes standardized, this should be used - * instead of having a global variable. - */ -static double* _vals; -typedef int (*qsort_cmpf) (const void *, const void *); - -static int -vcmp (int* a, int* b) -{ - double va = _vals[*a]; - double vb = _vals[*b]; - - if (va < vb) return -1; - else if (va > vb) return 1; - else return 0; -} - -/* delaunay_tri: - * Given n points whose coordinates are in the x[] and y[] - * arrays, compute a Delaunay triangulation of the points. - * The number of edges in the triangulation is returned in pnedges. - * The return value itself is an array e of 2*(*pnedges) integers, - * with edge i having points whose indices are e[2*i] and e[2*i+1]. - * - * If the points are collinear, GTS fails with 0 edges. - * In this case, we sort the points by x coordinates (or y coordinates - * if the points form a vertical line). We then return a "triangulation" - * consisting of the n-1 pairs of adjacent points. - */ -int *delaunay_tri(double *x, double *y, int n, int* pnedges) -{ - GtsSurface* s = tri(x, y, n, NULL, 0, 1); - int nedges; - int* edges; - estats stats; - estate state; - - if (!s) return NULL; - - stats.n = 0; - stats.delaunay = NULL; - edgeStats (s, &stats); - *pnedges = nedges = stats.n; - - if (nedges) { - edges = N_GNEW(2 * nedges, int); - state.n = 0; - state.edges = edges; - gts_surface_foreach_edge (s, (GtsFunc) addEdge, &state); - } - else { - int* vs = N_GNEW(n, int); - int* ip; - int i, hd, tl; - - *pnedges = nedges = n-1; - ip = edges = N_GNEW(2 * nedges, int); - - for (i = 0; i < n; i++) - vs[i] = i; - - if (x[0] == x[1]) /* vertical line */ - _vals = y; - else - _vals = x; - qsort (vs, n, sizeof(int), (qsort_cmpf)vcmp); - - tl = vs[0]; - for (i = 1; i < n; i++) { - hd = vs[i]; - *ip++ = tl; - *ip++ = hd; - tl = hd; - } - - free (vs); - } - - gts_object_destroy (GTS_OBJECT (s)); - - return edges; -} - -static void cntFace (GFace* fp, int* ip) -{ - fp->idx = *ip; - *ip += 1; -} - -typedef struct { - GtsSurface* s; - int* faces; - int* neigh; -} fstate; - -typedef struct { - int nneigh; - int* neigh; -} ninfo; - -static void addNeighbor (GFace* f, ninfo* es) -{ - es->neigh[es->nneigh] = f->idx; - es->nneigh++; -} - -static void addFace (GFace* f, fstate* es) -{ - int i, myid = f->idx; - int* ip = es->faces + 3*myid; - int* neigh = es->neigh + 3*myid; - ninfo ni; - GtsVertex *v1, *v2, *v3; - - gts_triangle_vertices (&f->v.triangle, &v1, &v2, &v3); - *ip++ = ((GVertex*)(v1))->idx; - *ip++ = ((GVertex*)(v2))->idx; - *ip++ = ((GVertex*)(v3))->idx; - - ni.nneigh = 0; - ni.neigh = neigh; - gts_face_foreach_neighbor ((GtsFace*)f, 0, (GtsFunc) addNeighbor, &ni); - for (i = ni.nneigh; i < 3; i++) - neigh[i] = -1; -} - -static void addTri (GFace* f, fstate* es) -{ - int myid = f->idx; - int* ip = es->faces + 3*myid; - GtsVertex *v1, *v2, *v3; - - gts_triangle_vertices (&f->v.triangle, &v1, &v2, &v3); - *ip++ = ((GVertex*)(v1))->idx; - *ip++ = ((GVertex*)(v2))->idx; - *ip++ = ((GVertex*)(v3))->idx; -} - -/* mkSurface: - * Given n points whose coordinates are in x[] and y[], and nsegs line - * segments whose end point indices are given in segs, return a surface - * corresponding the constrained Delaunay triangulation. - * The surface records the line segments, the triangles, and the neighboring - * triangles. - */ -surface_t* -mkSurface (double *x, double *y, int n, int* segs, int nsegs) -{ - GtsSurface* s = tri(x, y, n, segs, nsegs, 1); - estats stats; - estate state; - fstate statf; - surface_t* sf; - int nfaces = 0; - int* faces; - int* neigh; - - if (!s) return NULL; - - sf = GNEW(surface_t); - stats.n = 0; - stats.delaunay = NULL; - edgeStats (s, &stats); - nsegs = stats.n; - segs = N_GNEW(2 * nsegs, int); - - state.n = 0; - state.edges = segs; - gts_surface_foreach_edge (s, (GtsFunc) addEdge, &state); - - gts_surface_foreach_face (s, (GtsFunc) cntFace, &nfaces); - - faces = N_GNEW(3 * nfaces, int); - neigh = N_GNEW(3 * nfaces, int); - - statf.faces = faces; - statf.neigh = neigh; - gts_surface_foreach_face (s, (GtsFunc) addFace, &statf); - - sf->nedges = nsegs; - sf->edges = segs; - sf->nfaces = nfaces; - sf->faces = faces; - sf->neigh = neigh; - - gts_object_destroy (GTS_OBJECT (s)); - - return sf; -} - -/* get_triangles: - * Given n points whose coordinates are stored as (x[2*i],x[2*i+1]), - * compute a Delaunay triangulation of the points. - * The number of triangles in the triangulation is returned in tris. - * The return value t is an array of 3*(*tris) integers, - * with triangle i having points whose indices are t[3*i], t[3*i+1] and t[3*i+2]. - */ -int* -get_triangles (double *x, int n, int* tris) -{ - GtsSurface* s; - int nfaces = 0; - fstate statf; - - if (n <= 2) return NULL; - - s = tri(x, NULL, n, NULL, 0, 0); - if (!s) return NULL; - - gts_surface_foreach_face (s, (GtsFunc) cntFace, &nfaces); - statf.faces = N_GNEW(3 * nfaces, int); - gts_surface_foreach_face (s, (GtsFunc) addTri, &statf); - - gts_object_destroy (GTS_OBJECT (s)); - - *tris = nfaces; - return statf.faces; -} - -void -freeSurface (surface_t* s) -{ - free (s->edges); - free (s->faces); - free (s->neigh); -} -#elif HAVE_TRIANGLE -#define TRILIBRARY -#include "triangle.c" -#include "assert.h" -#include "general.h" - -int* -get_triangles (double *x, int n, int* tris) -{ - struct triangulateio in, mid, vorout; - int i; - - if (n <= 2) return NULL; - - in.numberofpoints = n; - in.numberofpointattributes = 0; - in.pointlist = (REAL *) N_GNEW(in.numberofpoints * 2, REAL); - - for (i = 0; i < n; i++){ - in.pointlist[i*2] = x[i*2]; - in.pointlist[i*2 + 1] = x[i*2 + 1]; - } - in.pointattributelist = NULL; - in.pointmarkerlist = NULL; - in.numberofsegments = 0; - in.numberofholes = 0; - in.numberofregions = 0; - in.regionlist = NULL; - mid.pointlist = (REAL *) NULL; /* Not needed if -N switch used. */ - mid.pointattributelist = (REAL *) NULL; - mid.pointmarkerlist = (int *) NULL; /* Not needed if -N or -B switch used. */ - mid.trianglelist = (int *) NULL; /* Not needed if -E switch used. */ - mid.triangleattributelist = (REAL *) NULL; - mid.neighborlist = (int *) NULL; /* Needed only if -n switch used. */ - mid.segmentlist = (int *) NULL; - mid.segmentmarkerlist = (int *) NULL; - mid.edgelist = (int *) NULL; /* Needed only if -e switch used. */ - mid.edgemarkerlist = (int *) NULL; /* Needed if -e used and -B not used. */ - vorout.pointlist = (REAL *) NULL; /* Needed only if -v switch used. */ - vorout.pointattributelist = (REAL *) NULL; - vorout.edgelist = (int *) NULL; /* Needed only if -v switch used. */ - vorout.normlist = (REAL *) NULL; /* Needed only if -v switch used. */ - - /* Triangulate the points. Switches are chosen to read and write a */ - /* PSLG (p), preserve the convex hull (c), number everything from */ - /* zero (z), assign a regional attribute to each element (A), and */ - /* produce an edge list (e), a Voronoi diagram (v), and a triangle */ - /* neighbor list (n). */ - - triangulate("Qenv", &in, &mid, &vorout); - assert (mid.numberofcorners == 3); - - *tris = mid.numberoftriangles; - - FREE(in.pointlist); - FREE(in.pointattributelist); - FREE(in.pointmarkerlist); - FREE(in.regionlist); - FREE(mid.pointlist); - FREE(mid.pointattributelist); - FREE(mid.pointmarkerlist); - FREE(mid.triangleattributelist); - FREE(mid.neighborlist); - FREE(mid.segmentlist); - FREE(mid.segmentmarkerlist); - FREE(mid.edgelist); - FREE(mid.edgemarkerlist); - FREE(vorout.pointlist); - FREE(vorout.pointattributelist); - FREE(vorout.edgelist); - FREE(vorout.normlist); - - return mid.trianglelist; -} - -// maybe it should be replaced by RNG - relative neigborhood graph, or by GG - gabriel graph -int* -delaunay_tri (double *x, double *y, int n, int* nedges) -{ - struct triangulateio in, out; - int i; - - in.pointlist = N_GNEW(2 * n, REAL); - for (i = 0; i < n; i++) { - in.pointlist[2 * i] = x[i]; - in.pointlist[2 * i + 1] = y[i]; - } - - in.pointattributelist = NULL; - in.pointmarkerlist = NULL; - in.numberofpoints = n; - in.numberofpointattributes = 0; - in.trianglearealist = NULL; - in.triangleattributelist = NULL; - in.numberoftriangleattributes = 0; - in.neighborlist = NULL; - in.segmentlist = NULL; - in.segmentmarkerlist = NULL; - in.holelist = NULL; - in.numberofholes = 0; - in.regionlist = NULL; - in.edgelist = NULL; - in.edgemarkerlist = NULL; - in.normlist = NULL; - - out.pointattributelist = NULL; - out.pointmarkerlist = NULL; - out.numberofpoints = n; - out.numberofpointattributes = 0; - out.trianglearealist = NULL; - out.triangleattributelist = NULL; - out.numberoftriangleattributes = 0; - out.neighborlist = NULL; - out.segmentlist = NULL; - out.segmentmarkerlist = NULL; - out.holelist = NULL; - out.numberofholes = 0; - out.regionlist = NULL; - out.edgelist = NULL; - out.edgemarkerlist = NULL; - out.normlist = NULL; - - triangulate("zQNEeB", &in, &out, NULL); - - *nedges = out.numberofedges; - free (in.pointlist); - free (in.pointattributelist); - free (in.pointmarkerlist); - free (in.trianglearealist); - free (in.triangleattributelist); - free (in.neighborlist); - free (in.segmentlist); - free (in.segmentmarkerlist); - free (in.holelist); - free (in.regionlist); - free (in.edgemarkerlist); - free (in.normlist); - free (out.pointattributelist); - free (out.pointmarkerlist); - free (out.trianglearealist); - free (out.triangleattributelist); - free (out.neighborlist); - free (out.segmentlist); - free (out.segmentmarkerlist); - free (out.holelist); - free (out.regionlist); - free (out.edgemarkerlist); - free (out.normlist); - return out.edgelist; -} - -v_data *delaunay_triangulation(double *x, double *y, int n) -{ - v_data *delaunay; - int nedges; - int *edges; - int source, dest; - int* edgelist = delaunay_tri (x, y, n, &nedges); - int i; - - delaunay = N_GNEW(n, v_data); - edges = N_GNEW(2 * nedges + n, int); - - for (i = 0; i < n; i++) { - delaunay[i].ewgts = NULL; - delaunay[i].nedges = 1; - } - - for (i = 0; i < 2 * nedges; i++) - delaunay[edgelist[i]].nedges++; - - for (i = 0; i < n; i++) { - delaunay[i].edges = edges; - edges += delaunay[i].nedges; - delaunay[i].edges[0] = i; - delaunay[i].nedges = 1; - } - for (i = 0; i < nedges; i++) { - source = edgelist[2 * i]; - dest = edgelist[2 * i + 1]; - delaunay[source].edges[delaunay[source].nedges++] = dest; - delaunay[dest].edges[delaunay[dest].nedges++] = source; - } - - free(edgelist); - return delaunay; -} - -surface_t* -mkSurface (double *x, double *y, int n, int* segs, int nsegs) -{ - agerr (AGERR, "mkSurface not yet implemented using Triangle library\n"); - assert (0); - return 0; -} -void -freeSurface (surface_t* s) -{ - agerr (AGERR, "freeSurface not yet implemented using Triangle library\n"); - assert (0); -} -#else -static char* err = "Graphviz built without any triangulation library\n"; -int* get_triangles (double *x, int n, int* tris) -{ - agerr(AGERR, "get_triangles: %s\n", err); - return 0; -} -v_data *delaunay_triangulation(double *x, double *y, int n) -{ - agerr(AGERR, "delaunay_triangulation: %s\n", err); - return 0; -} -int *delaunay_tri(double *x, double *y, int n, int* nedges) -{ - agerr(AGERR, "delaunay_tri: %s\n", err); - return 0; -} -surface_t* -mkSurface (double *x, double *y, int n, int* segs, int nsegs) -{ - agerr(AGERR, "mkSurface: %s\n", err); - return 0; -} -void -freeSurface (surface_t* s) -{ - agerr (AGERR, "freeSurface: %s\n", err); -} -#endif - -static void remove_edge(v_data * graph, int source, int dest) -{ - int i; - for (i = 1; i < graph[source].nedges; i++) { - if (graph[source].edges[i] == dest) { - graph[source].edges[i] = - graph[source].edges[--graph[source].nedges]; - break; - } - } -} - -v_data *UG_graph(double *x, double *y, int n, int accurate_computation) -{ - v_data *delaunay; - int i; - double dist_ij, dist_ik, dist_jk, x_i, y_i, x_j, y_j; - int j, k, neighbor_j, neighbor_k; - int removed; - - if (n == 2) { - int *edges = N_GNEW(4, int); - delaunay = N_GNEW(n, v_data); - delaunay[0].ewgts = NULL; - delaunay[0].edges = edges; - delaunay[0].nedges = 2; - delaunay[0].edges[0] = 0; - delaunay[0].edges[1] = 1; - delaunay[1].edges = edges + 2; - delaunay[1].ewgts = NULL; - delaunay[1].nedges = 2; - delaunay[1].edges[0] = 1; - delaunay[1].edges[1] = 0; - return delaunay; - } else if (n == 1) { - int *edges = N_GNEW(1, int); - delaunay = N_GNEW(n, v_data); - delaunay[0].ewgts = NULL; - delaunay[0].edges = edges; - delaunay[0].nedges = 1; - delaunay[0].edges[0] = 0; - return delaunay; - } - - delaunay = delaunay_triangulation(x, y, n); - - if (accurate_computation) { - for (i = 0; i < n; i++) { - x_i = x[i]; - y_i = y[i]; - for (j = 1; j < delaunay[i].nedges;) { - neighbor_j = delaunay[i].edges[j]; - if (neighbor_j < i) { - j++; - continue; - } - x_j = x[neighbor_j]; - y_j = y[neighbor_j]; - dist_ij = - (x_j - x_i) * (x_j - x_i) + (y_j - y_i) * (y_j - y_i); - removed = FALSE; - for (k = 0; k < n && !removed; k++) { - dist_ik = - (x[k] - x_i) * (x[k] - x_i) + (y[k] - - y_i) * (y[k] - y_i); - if (dist_ik < dist_ij) { - dist_jk = - (x[k] - x_j) * (x[k] - x_j) + (y[k] - - y_j) * (y[k] - - y_j); - if (dist_jk < dist_ij) { - // remove the edge beteween i and neighbor j - delaunay[i].edges[j] = - delaunay[i].edges[--delaunay[i].nedges]; - remove_edge(delaunay, neighbor_j, i); - removed = TRUE; - } - } - } - if (!removed) { - j++; - } - } - } - } else { - // remove all edges v-u if there is w, neighbor of u or v, that is closer to both u and v than dist(u,v) - for (i = 0; i < n; i++) { - x_i = x[i]; - y_i = y[i]; - for (j = 1; j < delaunay[i].nedges;) { - neighbor_j = delaunay[i].edges[j]; - x_j = x[neighbor_j]; - y_j = y[neighbor_j]; - dist_ij = - (x_j - x_i) * (x_j - x_i) + (y_j - y_i) * (y_j - y_i); - // now look at i'th neighbors to see whether there is a node in the "forbidden region" - // we will also go through neighbor_j's neighbors when we traverse the edge from its other side - removed = FALSE; - for (k = 1; k < delaunay[i].nedges && !removed; k++) { - neighbor_k = delaunay[i].edges[k]; - dist_ik = - (x[neighbor_k] - x_i) * (x[neighbor_k] - x_i) + - (y[neighbor_k] - y_i) * (y[neighbor_k] - y_i); - if (dist_ik < dist_ij) { - dist_jk = - (x[neighbor_k] - x_j) * (x[neighbor_k] - x_j) + - (y[neighbor_k] - y_j) * (y[neighbor_k] - y_j); - if (dist_jk < dist_ij) { - // remove the edge beteween i and neighbor j - delaunay[i].edges[j] = - delaunay[i].edges[--delaunay[i].nedges]; - remove_edge(delaunay, neighbor_j, i); - removed = TRUE; - } - } - } - if (!removed) { - j++; - } - } - } - } - return delaunay; -} - -void freeGraph (v_data * graph) -{ - if (graph != NULL) { - if (graph[0].edges != NULL) - free(graph[0].edges); - if (graph[0].ewgts != NULL) - free(graph[0].ewgts); - free(graph); - } -} - -void freeGraphData(vtx_data * graph) -{ - if (graph != NULL) { - if (graph[0].edges != NULL) - free(graph[0].edges); - if (graph[0].ewgts != NULL) - free(graph[0].ewgts); -#ifdef USE_STYLES - if (graph[0].styles != NULL) - free(graph[0].styles); -#endif -#ifdef DIGCOLA - if (graph[0].edists != NULL) - free(graph[0].edists); -#endif - free(graph); - } -} - diff --git a/internal/ccall/neatogen/delaunay.h b/internal/ccall/neatogen/delaunay.h deleted file mode 100644 index c178a5a..0000000 --- a/internal/ccall/neatogen/delaunay.h +++ /dev/null @@ -1,39 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef DELAUNAY_H -#define DELAUNAY_H - -#include "sparsegraph.h" - -typedef struct { - int nedges; /* no. of edges in triangulation */ - int* edges; /* 2*nsegs indices of points */ - int nfaces; /* no. of faces in triangulation */ - int* faces; /* 3*nfaces indices of points */ - int* neigh; /* 3*nfaces indices of neighbor triangles */ -} surface_t; - -v_data *delaunay_triangulation(double *x, double *y, int n); - -int *delaunay_tri (double *x, double *y, int n, int* nedges); - -int *get_triangles (double *x, int n, int* ntris); - -v_data *UG_graph(double *x, double *y, int n, int accurate_computation); - -surface_t* mkSurface (double *x, double *y, int n, int* segs, int nsegs); - -void freeSurface (surface_t* s); - -#endif diff --git a/internal/ccall/neatogen/digcola.h b/internal/ccall/neatogen/digcola.h deleted file mode 100644 index 84143a2..0000000 --- a/internal/ccall/neatogen/digcola.h +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef DIGCOLA_H -#define DIGCOLA_H - -#include -#ifdef DIGCOLA -extern int compute_y_coords(vtx_data*, int, double*, int); -extern int compute_hierarchy(vtx_data*, int, double, double, - double*, int**, int**, int*); -extern int IMDS_given_dim(vtx_data*, int, double*, double*, double); -extern int stress_majorization_with_hierarchy(vtx_data*, int, int, double**, - node_t**, int, int, int, int, double); -#ifdef IPSEPCOLA -typedef struct ipsep_options { - int diredges; /* 1=generate directed edge constraints */ - /* 2=generate directed hierarchy level constraints (DiG-CoLa) */ - double edge_gap; /* amount to force vertical separation of */ - /* start/end nodes */ - int noverlap; /* 1=generate non-overlap constraints */ - /* 2=remove overlaps after layout */ - pointf gap; /* hor and vert gap to enforce when removing overlap*/ - pointf* nsize; /* node widths and heights */ - cluster_data* clusters; - /* list of node indices for each cluster */ -#ifdef MOSEK - int mosek; /* use Mosek as constraint optimization engine */ -#endif /* MOSEK */ -} ipsep_options; - - /* stress majorization, for Constraint Layout */ -extern int stress_majorization_cola(vtx_data*, int, int, double**, node_t**, int, int, int, ipsep_options*); -#endif -#endif -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/dijkstra.c b/internal/ccall/neatogen/dijkstra.c deleted file mode 100644 index 4fd8605..0000000 --- a/internal/ccall/neatogen/dijkstra.c +++ /dev/null @@ -1,396 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/****************************************** - - Dijkstra algorithm - Computes single-source distances for - weighted graphs - -******************************************/ - - -#include "bfs.h" -#include "dijkstra.h" -#include -#include -/* #include */ - -#define MAX_DIST (double)INT_MAX - -typedef DistType Word; - -#define LOOP while(TRUE) - -/* This heap class is suited to the Dijkstra alg. - data[i]=vertexNum <==> index[vertexNum]=i -*/ - -#define left(i) (2*(i)) -#define right(i) (2*(i)+1) -#define parent(i) ((i)/2) -#define insideHeap(h,i) ((i)heapSize) -#define greaterPriority(h,i,j,dist) (dist[h->data[i]]data[j]]) -#define assign(h,i,j,index) {h->data[i]=h->data[j]; index[h->data[i]]=i;} -#define exchange(h,i,j,index) {int temp; \ - temp=h->data[i]; \ - h->data[i]=h->data[j]; \ - h->data[j]=temp; \ - index[h->data[i]]=i; \ - index[h->data[j]]=j; \ -} - -typedef struct { - int *data; - int heapSize; -} heap; - -static void heapify(heap * h, int i, int index[], Word dist[]) -{ - int l, r, largest; - while (1) { - l = left(i); - r = right(i); - if (insideHeap(h, l) && greaterPriority(h, l, i, dist)) - largest = l; - else - largest = i; - if (insideHeap(h, r) && greaterPriority(h, r, largest, dist)) - largest = r; - - if (largest == i) - break; - - exchange(h, largest, i, index); - i = largest; - } -} - -#ifdef OBSOLETE -/* originally, the code called mkHeap to allocate space, then - * initHeap to realloc the space. This is silly. - * Now we just call initHeap. - */ -static void mkHeap(heap * h, int size) -{ - h->data = N_GNEW(size, int); - h->heapSize = 0; -} -#endif - -static void freeHeap(heap * h) -{ - if (h->data) free(h->data); -} - -static void -initHeap(heap * h, int startVertex, int index[], Word dist[], int n) -{ - int i, count; - int j; /* We cannot use an unsigned value in this loop */ - /* h->data=(int*) realloc(h->data, (n-1)*sizeof(int)); */ - if (n == 1) h->data = NULL; - else h->data = N_GNEW(n - 1, int); - h->heapSize = n - 1; - - for (count = 0, i = 0; i < n; i++) - if (i != startVertex) { - h->data[count] = i; - index[i] = count; - count++; - } - - for (j = (n - 1) / 2; j >= 0; j--) - heapify(h, j, index, dist); -} - -static boolean extractMax(heap * h, int *max, int index[], Word dist[]) -{ - if (h->heapSize == 0) - return FALSE; - - *max = h->data[0]; - h->data[0] = h->data[h->heapSize - 1]; - index[h->data[0]] = 0; - h->heapSize--; - heapify(h, 0, index, dist); - - return TRUE; -} - -static void -increaseKey(heap * h, int increasedVertex, Word newDist, int index[], - Word dist[]) -{ - int placeInHeap; - int i; - - if (dist[increasedVertex] <= newDist) - return; - - placeInHeap = index[increasedVertex]; - - dist[increasedVertex] = newDist; - - i = placeInHeap; - while (i > 0 && dist[h->data[parent(i)]] > newDist) { /* can write here: greaterPriority(i,parent(i),dist) */ - assign(h, i, parent(i), index); - i = parent(i); - } - h->data[i] = increasedVertex; - index[increasedVertex] = i; -} - -void dijkstra(int vertex, vtx_data * graph, int n, DistType * dist) -{ - int i; - heap H; - int closestVertex, neighbor; - DistType closestDist, prevClosestDist = INT_MAX; - static int *index; - -#ifdef OBSOLETE - mkHeap(&H, n); -#endif - index = (int *) realloc(index, n * sizeof(int)); - - /* initial distances with edge weights: */ - for (i = 0; i < n; i++) - dist[i] = (DistType) MAX_DIST; - dist[vertex] = 0; - for (i = 1; i < graph[vertex].nedges; i++) - dist[graph[vertex].edges[i]] = (DistType) graph[vertex].ewgts[i]; - - initHeap(&H, vertex, index, dist, n); - - while (extractMax(&H, &closestVertex, index, dist)) { - closestDist = dist[closestVertex]; - if (closestDist == MAX_DIST) - break; - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - increaseKey(&H, neighbor, - closestDist + - (DistType) graph[closestVertex].ewgts[i], index, - dist); - } - prevClosestDist = closestDist; - } - - /* For dealing with disconnected graphs: */ - for (i = 0; i < n; i++) - if (dist[i] == MAX_DIST) /* 'i' is not connected to 'vertex' */ - dist[i] = prevClosestDist + 10; - freeHeap(&H); -} - - /* Dijkstra bounded to nodes in *unweighted* radius */ -int -dijkstra_bounded(int vertex, vtx_data * graph, int n, DistType * dist, - int bound, int *visited_nodes) - /* make dijkstra, but consider only nodes whose *unweighted* distance from 'vertex' */ - /* is at most 'bound' */ - /* MON-EFFICIENT implementation, see below. */ -{ - int num_visited_nodes; - int i; - static boolean *node_in_neighborhood = NULL; - static int size = 0; - static int *index; - Queue Q; - heap H; - int closestVertex, neighbor; - DistType closestDist; - int num_found = 0; - - /* first, perform BFS to find the nodes in the region */ - mkQueue(&Q, n); - /* remember that dist should be init. with -1's */ - for (i = 0; i < n; i++) { - dist[i] = -1; /* far, TOO COSTLY (O(n))! */ - } - num_visited_nodes = - bfs_bounded(vertex, graph, n, dist, &Q, bound, visited_nodes); - if (size < n) { - node_in_neighborhood = - (boolean *) realloc(node_in_neighborhood, n * sizeof(boolean)); - for (i = size; i < n; i++) { - node_in_neighborhood[i] = FALSE; - } - size = n; - } - for (i = 0; i < num_visited_nodes; i++) { - node_in_neighborhood[visited_nodes[i]] = TRUE; - } - - -#ifdef OBSOLETE - mkHeap(&H, n); -#endif - index = (int *) realloc(index, n * sizeof(int)); - - /* initial distances with edge weights: */ - for (i = 0; i < n; i++) /* far, TOO COSTLY (O(n))! */ - dist[i] = (DistType) MAX_DIST; - dist[vertex] = 0; - for (i = 1; i < graph[vertex].nedges; i++) - dist[graph[vertex].edges[i]] = (DistType) graph[vertex].ewgts[i]; - - /* again, TOO COSTLY (O(n)) to put all nodes in heap! */ - initHeap(&H, vertex, index, dist, n); - - while (num_found < num_visited_nodes - && extractMax(&H, &closestVertex, index, dist)) { - if (node_in_neighborhood[closestVertex]) { - num_found++; - } - closestDist = dist[closestVertex]; - if (closestDist == MAX_DIST) - break; - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - increaseKey(&H, neighbor, - closestDist + - (DistType) graph[closestVertex].ewgts[i], index, - dist); - } - } - - /* restore initial false-status of 'node_in_neighborhood' */ - for (i = 0; i < num_visited_nodes; i++) { - node_in_neighborhood[visited_nodes[i]] = FALSE; - } - freeHeap(&H); - freeQueue(&Q); - return num_visited_nodes; -} - -static void heapify_f(heap * h, int i, int index[], float dist[]) -{ - int l, r, largest; - while (1) { - l = left(i); - r = right(i); - if (insideHeap(h, l) && greaterPriority(h, l, i, dist)) - largest = l; - else - largest = i; - if (insideHeap(h, r) && greaterPriority(h, r, largest, dist)) - largest = r; - - if (largest == i) - break; - - exchange(h, largest, i, index); - i = largest; - } -} - -static void -initHeap_f(heap * h, int startVertex, int index[], float dist[], int n) -{ - int i, count; - int j; /* We cannot use an unsigned value in this loop */ - h->data = N_GNEW(n - 1, int); - h->heapSize = n - 1; - - for (count = 0, i = 0; i < n; i++) - if (i != startVertex) { - h->data[count] = i; - index[i] = count; - count++; - } - - for (j = (n - 1) / 2; j >= 0; j--) - heapify_f(h, j, index, dist); -} - -static boolean extractMax_f(heap * h, int *max, int index[], float dist[]) -{ - if (h->heapSize == 0) - return FALSE; - - *max = h->data[0]; - h->data[0] = h->data[h->heapSize - 1]; - index[h->data[0]] = 0; - h->heapSize--; - heapify_f(h, 0, index, dist); - - return TRUE; -} - -static void -increaseKey_f(heap * h, int increasedVertex, float newDist, int index[], - float dist[]) -{ - int placeInHeap; - int i; - - if (dist[increasedVertex] <= newDist) - return; - - placeInHeap = index[increasedVertex]; - - dist[increasedVertex] = newDist; - - i = placeInHeap; - while (i > 0 && dist[h->data[parent(i)]] > newDist) { /* can write here: greaterPriority(i,parent(i),dist) */ - assign(h, i, parent(i), index); - i = parent(i); - } - h->data[i] = increasedVertex; - index[increasedVertex] = i; -} - -/* dijkstra_f: - * Weighted shortest paths from vertex. - * Assume graph is connected. - */ -void dijkstra_f(int vertex, vtx_data * graph, int n, float *dist) -{ - int i; - heap H; - int closestVertex = 0, neighbor; - float closestDist; - int *index; - -#ifdef OBSOLETE - mkHeap(&H, n); -#endif - index = N_GNEW(n, int); - - /* initial distances with edge weights: */ - for (i = 0; i < n; i++) - dist[i] = MAXFLOAT; - dist[vertex] = 0; - for (i = 1; i < graph[vertex].nedges; i++) - dist[graph[vertex].edges[i]] = graph[vertex].ewgts[i]; - - initHeap_f(&H, vertex, index, dist, n); - - while (extractMax_f(&H, &closestVertex, index, dist)) { - closestDist = dist[closestVertex]; - if (closestDist == MAXFLOAT) - break; - for (i = 1; i < graph[closestVertex].nedges; i++) { - neighbor = graph[closestVertex].edges[i]; - increaseKey_f(&H, neighbor, - closestDist + graph[closestVertex].ewgts[i], - index, dist); - } - } - - freeHeap(&H); - free(index); -} diff --git a/internal/ccall/neatogen/dijkstra.h b/internal/ccall/neatogen/dijkstra.h deleted file mode 100644 index 2eb3894..0000000 --- a/internal/ccall/neatogen/dijkstra.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _DIJKSTRA_H_ -#define _DIJKSTRA_H_ - -#include "defs.h" - -#ifdef __cplusplus - void dijkstra(int vertex, vtx_data * graph, int n, DistType * dist); - -/* Dijkstra bounded to nodes in *unweighted* radius */ - void dijkstra_bounded(int vertex, vtx_data * graph, int n, - DistType * dist, int bound, int *visited_nodes, - int &num_visited_nodes); - -#else - extern void dijkstra(int, vtx_data *, int, DistType *); - extern void dijkstra_f(int, vtx_data *, int, float *); - - /* Dijkstra bounded to nodes in *unweighted* radius */ - extern int dijkstra_bounded(int, vtx_data *, int, DistType *, int, - int *); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/dummy.go b/internal/ccall/neatogen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/neatogen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/neatogen/edges.c b/internal/ccall/neatogen/edges.c deleted file mode 100644 index e7f83df..0000000 --- a/internal/ccall/neatogen/edges.c +++ /dev/null @@ -1,212 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "neato.h" -#include "mem.h" -#include "info.h" -#include "edges.h" -#include - - -double pxmin, pxmax, pymin, pymax; /* clipping window */ - -static int nedges; -static Freelist efl; - -void edgeinit() -{ - freeinit(&efl, sizeof(Edge)); - nedges = 0; -} - -Edge *bisect(Site * s1, Site * s2) -{ - double dx, dy, adx, ady; - Edge *newedge; - - newedge = (Edge *) getfree(&efl); - - newedge->reg[0] = s1; - newedge->reg[1] = s2; - ref(s1); - ref(s2); - newedge->ep[0] = (Site *) NULL; - newedge->ep[1] = (Site *) NULL; - - dx = s2->coord.x - s1->coord.x; - dy = s2->coord.y - s1->coord.y; - adx = dx > 0 ? dx : -dx; - ady = dy > 0 ? dy : -dy; - newedge->c = - s1->coord.x * dx + s1->coord.y * dy + (dx * dx + dy * dy) * 0.5; - if (adx > ady) { - newedge->a = 1.0; - newedge->b = dy / dx; - newedge->c /= dx; - } else { - newedge->b = 1.0; - newedge->a = dx / dy; - newedge->c /= dy; - }; - - newedge->edgenbr = nedges; -#ifdef STANDALONE - out_bisector(newedge); -#endif - nedges += 1; - return (newedge); -} - - -static void doSeg(Edge * e, double x1, double y1, double x2, double y2) -{ - addVertex(e->reg[0], x1, y1); - addVertex(e->reg[0], x2, y2); - addVertex(e->reg[1], x1, y1); - addVertex(e->reg[1], x2, y2); -} - -void clip_line(Edge * e) -{ - Site *s1, *s2; - double x1, x2, y1, y2; - - if (e->a == 1.0 && e->b >= 0.0) { - s1 = e->ep[1]; - s2 = e->ep[0]; - } else { - s1 = e->ep[0]; - s2 = e->ep[1]; - } - - if (e->a == 1.0) { - if (s1 != (Site *) NULL) { - y1 = s1->coord.y; - if (y1 > pymax) - return; - else if (y1 >= pymin) - x1 = s1->coord.x; - else { - y1 = pymin; - x1 = e->c - e->b * y1; - } - } else { - y1 = pymin; - x1 = e->c - e->b * y1; - } - - if (s2 != (Site *) NULL) { - y2 = s2->coord.y; - if (y2 < pymin) - return; - else if (y2 <= pymax) - x2 = s2->coord.x; - else { - y2 = pymax; - x2 = e->c - e->b * y2; - } - } else { - y2 = pymax; - x2 = e->c - e->b * y2; - } - - if (((x1 > pxmax) & (x2 > pxmax)) | ((x1 < pxmin) & (x2 < pxmin))) - return; - if (x1 > pxmax) { - x1 = pxmax; - y1 = (e->c - x1) / e->b; - }; - if (x1 < pxmin) { - x1 = pxmin; - y1 = (e->c - x1) / e->b; - }; - if (x2 > pxmax) { - x2 = pxmax; - y2 = (e->c - x2) / e->b; - }; - if (x2 < pxmin) { - x2 = pxmin; - y2 = (e->c - x2) / e->b; - }; - } else { - if (s1 != (Site *) NULL) { - x1 = s1->coord.x; - if (x1 > pxmax) - return; - else if (x1 >= pxmin) - y1 = s1->coord.y; - else { - x1 = pxmin; - y1 = e->c - e->a * x1; - } - } else { - x1 = pxmin; - y1 = e->c - e->a * x1; - } - - if (s2 != (Site *) NULL) { - x2 = s2->coord.x; - if (x2 < pxmin) - return; - else if (x2 <= pxmax) - y2 = s2->coord.y; - else { - x2 = pxmax; - y2 = e->c - e->a * x2; - } - } else { - x2 = pxmax; - y2 = e->c - e->a * x2; - } - - if (((y1 > pymax) & (y2 > pymax)) | ((y1 < pymin) & (y2 < pymin))) - return; - if (y1 > pymax) { - y1 = pymax; - x1 = (e->c - y1) / e->a; - }; - if (y1 < pymin) { - y1 = pymin; - x1 = (e->c - y1) / e->a; - }; - if (y2 > pymax) { - y2 = pymax; - x2 = (e->c - y2) / e->a; - }; - if (y2 < pymin) { - y2 = pymin; - x2 = (e->c - y2) / e->a; - }; - } - - doSeg(e, x1, y1, x2, y2); -#ifdef STANDALONE - if (doPS) - line(x1, y1, x2, y2); -#endif -} - -void endpoint(Edge * e, int lr, Site * s) -{ - e->ep[lr] = s; - ref(s); - if (e->ep[re - lr] == (Site *) NULL) - return; - clip_line(e); -#ifdef STANDALONE - out_ep(e); -#endif - deref(e->reg[le]); - deref(e->reg[re]); - makefree(e, &efl); -} diff --git a/internal/ccall/neatogen/edges.h b/internal/ccall/neatogen/edges.h deleted file mode 100644 index 411fbf7..0000000 --- a/internal/ccall/neatogen/edges.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef EDGES_H -#define EDGES_H - -#include "site.h" - - typedef struct Edge { - double a, b, c; /* edge on line ax + by = c */ - Site *ep[2]; /* endpoints (vertices) of edge; initially NULL */ - Site *reg[2]; /* sites forming edge */ - int edgenbr; - } Edge; - -#define le 0 -#define re 1 - - extern double pxmin, pxmax, pymin, pymax; /* clipping window */ - extern void edgeinit(void); - extern void endpoint(Edge *, int, Site *); - extern void clip_line(Edge * e); - extern Edge *bisect(Site *, Site *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/embed_graph.c b/internal/ccall/neatogen/embed_graph.c deleted file mode 100644 index d6ffe73..0000000 --- a/internal/ccall/neatogen/embed_graph.c +++ /dev/null @@ -1,124 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/************************************************ - - Functions for computing the high-dimensional - embedding and the PCA projection. - -************************************************/ - - -#include "dijkstra.h" -#include "bfs.h" -#include "kkutils.h" -#include "embed_graph.h" -#include -#include -#include -/* #include */ - -void embed_graph(vtx_data * graph, int n, int dim, DistType *** Coords, - int reweight_graph) -{ -/* Compute 'dim'-dimensional high-dimensional embedding (HDE) for the 'n' nodes - The embedding is based on chossing 'dim' pivots, and associating each - coordinate with a unique pivot, assigning it to the graph-theoretic distances - of all nodes from the pivots -*/ - - int i, j; - int node; - DistType *storage = N_GNEW(n * dim, DistType); - DistType **coords = *Coords; - DistType *dist = N_GNEW(n, DistType); /* this vector stores the distances of - each nodes to the selected "pivots" */ - float *old_weights = graph[0].ewgts; - Queue Q; - DistType max_dist = 0; - - if (coords != NULL) { - free(coords[0]); - free(coords); - } - - /* this matrix stores the distance between each node and each "pivot" */ - *Coords = coords = N_GNEW(dim, DistType *); - for (i = 0; i < dim; i++) - coords[i] = storage + i * n; - - if (reweight_graph) { - compute_new_weights(graph, n); - } - - /* select the first pivot */ - node = rand() % n; - - mkQueue(&Q, n); - if (reweight_graph) { - dijkstra(node, graph, n, coords[0]); - } else { - bfs(node, graph, n, coords[0], &Q); - } - - for (i = 0; i < n; i++) { - dist[i] = coords[0][i]; - if (dist[i] > max_dist) { - node = i; - max_dist = dist[i]; - } - } - - /* select other dim-1 nodes as pivots */ - for (i = 1; i < dim; i++) { - if (reweight_graph) { - dijkstra(node, graph, n, coords[i]); - } else { - bfs(node, graph, n, coords[i], &Q); - } - max_dist = 0; - for (j = 0; j < n; j++) { - dist[j] = MIN(dist[j], coords[i][j]); - if (dist[j] > max_dist) { - node = j; - max_dist = dist[j]; - } - } - - } - - free(dist); - - if (reweight_graph) { - restore_old_weights(graph, n, old_weights); - } - -} - - /* Make each axis centered around 0 */ -void center_coordinate(DistType ** coords, int n, int dim) -{ - int i, j; - double sum, avg; - for (i = 0; i < dim; i++) { - sum = 0; - for (j = 0; j < n; j++) { - sum += coords[i][j]; - } - avg = sum / n; - for (j = 0; j < n; j++) { - coords[i][j] -= (DistType) avg; - } - } -} diff --git a/internal/ccall/neatogen/embed_graph.h b/internal/ccall/neatogen/embed_graph.h deleted file mode 100644 index e9ca52a..0000000 --- a/internal/ccall/neatogen/embed_graph.h +++ /dev/null @@ -1,50 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef EMBED_GRAPH_H_ -#define EMBED_GRAPH_H_ - -#ifdef __cplusplus - - void embed_graph(vtx_data * graph, int n, int dim, - DistType ** (&coords), int); - void center_coordinate(DistType ** coords, int n, int dim); - void PCA(DistType ** coords, int dim, int n, double **(&new_coords), - int new_dim); - void PCA(DistType ** coords, int dim, int n, double **(&new_coords), - int dim1, int dim2, boolean recompute); - void PCA_orthog(DistType ** coords, int dim, int n, - double **(&new_coords), int new_dim, double *orthog); - void iterativePCA(DistType ** coords, int dim, int n, - double **(&new_coords)); - -#else -#include - - extern void embed_graph(vtx_data * graph, int n, int dim, DistType ***, - int); - extern void center_coordinate(DistType **, int, int); - -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/fPQ.h b/internal/ccall/neatogen/fPQ.h deleted file mode 100644 index 6a432eb..0000000 --- a/internal/ccall/neatogen/fPQ.h +++ /dev/null @@ -1,184 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include - -/* Priority queue: - * To work, the following have to be defined before this file is - * included: - * - PQTYPE : type of object stored in the queue - * - PQVTYPE : type of priority value - * - N_VAL(pq,n) : macro for (negative) priority value of object n in pq - * - N_IDX(pq,n) : macro for integer index > 0 of n in pq - * - guard, type PQTYPE, with N_VAL(guard) == 0 - * - * Priorities are stored as negative numbers, with the item with the least - * negative priority at the head (just after the guard). - */ - -#ifdef PQ_TYPES -typedef struct { - PQTYPE* pq; - int PQcnt; - int PQsize; -} PQ; -#endif - -#ifdef PQ_CODE -static void -PQgen(PQ* pq, int sz, PQTYPE guard) -{ - pq->pq = N_NEW(sz+1,PQTYPE); - pq->pq[0] = guard; - pq->PQsize = sz; - pq->PQcnt = 0; -} - -static void -PQfree(PQ* pq, int freeAll) -{ - free (pq->pq); - if (freeAll) free (pq); -} - -static void -PQinit(PQ* pq) -{ - pq->PQcnt = 0; -} - -#ifdef PQCHECK -static int -PQcheck (PQ* pq) -{ - int i; - - for (i = 1; i <= pq->PQcnt; i++) { - if (N_IDX(pq,pq->pq[i]) != i) { - return 1; - } - } - return 0; -} -#endif - -static void -PQupheap(PQ* ppq, int k) -{ - PQTYPE* pq = ppq->pq; - PQTYPE x = pq[k]; - PQVTYPE v = N_VAL(ppq,x); - int next = k/2; - PQTYPE n; - - while (N_VAL(ppq,n = pq[next]) < v) { - pq[k] = n; - N_IDX(ppq,n) = k; - k = next; - next /= 2; - } - pq[k] = x; - N_IDX(ppq,x) = k; -} - -static int -_PQinsert(PQ* pq, PQTYPE np) -{ - if (pq->PQcnt == pq->PQsize) { - agerr (AGERR, "Heap overflow\n"); - return (1); - } - pq->PQcnt++; - pq->pq[pq->PQcnt] = np; - PQupheap (pq, pq->PQcnt); -#ifdef PQCHECK - PQcheck(pq); -#endif - return 0; -} - -static void -PQdownheap (PQ* ppq, int k) -{ - PQTYPE* pq = ppq->pq; - PQTYPE x = pq[k]; - PQVTYPE v = N_VAL(ppq,x); - int lim = ppq->PQcnt/2; - PQTYPE n; - int j; - - while (k <= lim) { - j = k+k; - n = pq[j]; - if (j < ppq->PQcnt) { - if (N_VAL(ppq,n) < N_VAL(ppq,pq[j+1])) { - j++; - n = pq[j]; - } - } - if (v >= N_VAL(ppq,n)) break; - pq[k] = n; - N_IDX(ppq,n) = k; - k = j; - } - pq[k] = x; - N_IDX(ppq,x) = k; -} - -static PQTYPE -PQremove (PQ* pq) -{ - PQTYPE n; - - if (pq->PQcnt) { - n = pq->pq[1]; - pq->pq[1] = pq->pq[pq->PQcnt]; - pq->PQcnt--; - if (pq->PQcnt) PQdownheap (pq, 1); -#ifdef PQCHECK - PQcheck(pq); -#endif - return n; - } - else return pq->pq[0]; -} - -static void -PQupdate (PQ* pq, PQTYPE n, PQVTYPE d) -{ - N_VAL(pq,n) = d; - PQupheap (pq, N_IDX(pq,n)); -#ifdef PQCHECK - PQcheck(pq); -#endif -} - -#if DEBUG > 1 - -static void -PQprint (PQ* pq) -{ - int i; - PQTYPE n; - - fprintf (stderr, "Q: "); - for (i = 1; i <= pq->PQcnt; i++) { - n = pq->pq[i]; - fprintf (stderr, "(%d:%f) ", N_IDX(pq,n), N_VAL(pq,n)); - } - fprintf (stderr, "\n"); -} -#endif -#endif - diff --git a/internal/ccall/neatogen/geometry.c b/internal/ccall/neatogen/geometry.c deleted file mode 100644 index 8760b2f..0000000 --- a/internal/ccall/neatogen/geometry.c +++ /dev/null @@ -1,93 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "geometry.h" -#include - - -Point origin = { 0, 0 }; - -double xmin, xmax, ymin, ymax; /* min and max x and y values of sites */ -double deltax, /* xmax - xmin */ - deltay; /* ymax - ymin */ - -int nsites; -int sqrt_nsites; - -void geominit() -{ - double sn; - - sn = nsites + 4; - sqrt_nsites = (int) sqrt(sn); - /* deltay = ymax - ymin; */ - /* deltax = xmax - xmin; */ -} - -double dist_2(Point * pp, Point * qp) -{ - double dx = pp->x - qp->x; - double dy = pp->y - qp->y; - - return (dx * dx + dy * dy); -} - -void subpt(Point * a, Point b, Point c) -{ - a->x = b.x - c.x; - a->y = b.y - c.y; -} - -void addpt(Point * c, Point a, Point b) -{ - c->x = a.x + b.x; - c->y = a.y + b.y; -} - -double area_2(Point a, Point b, Point c) -{ - return ((a.y - b.y) * (c.x - b.x) - (c.y - b.y) * (a.x - b.x)); -} - -int leftOf(Point a, Point b, Point c) -{ - return (area_2(a, b, c) > 0); -} - -int intersection(Point a, Point b, Point c, Point d, Point * p) -{ - double s, t; /* The two parameters of the parametric eqns. */ - double denom; /* Denominator of solutions. */ - - denom = - a.x * (d.y - c.y) + - b.x * (c.y - d.y) + d.x * (b.y - a.y) + c.x * (a.y - b.y); - - /* If denom is zero, then the line segments are parallel. */ - /* In this case, return false even though the segments might overlap. */ - if (denom == 0.0) - return 0; - - s = (a.x * (d.y - c.y) + c.x * (a.y - d.y) + d.x * (c.y - a.y) - ) / denom; - t = -(a.x * (c.y - b.y) + b.x * (a.y - c.y) + c.x * (b.y - a.y) - ) / denom; - - p->x = a.x + s * (b.x - a.x); - p->y = a.y + s * (b.y - a.y); - - if ((0.0 <= s) && (s <= 1.0) && (0.0 <= t) && (t <= 1.0)) - return 1; - else - return 0; -} diff --git a/internal/ccall/neatogen/geometry.h b/internal/ccall/neatogen/geometry.h deleted file mode 100644 index 00c2767..0000000 --- a/internal/ccall/neatogen/geometry.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef GEOMETRY_H -#define GEOMETRY_H - -#ifdef HAVE_POINTF_S - typedef pointf Point; -#else - typedef struct Point { - double x, y; - } Point; -#endif - - extern Point origin; - - extern double xmin, xmax, ymin, ymax; /* extreme x,y values of sites */ - extern double deltax, deltay; /* xmax - xmin, ymax - ymin */ - - extern int nsites; /* Number of sites */ - extern int sqrt_nsites; - - extern void geominit(void); - extern double dist_2(Point *, Point *); /* Distance squared between two points */ - extern void subpt(Point * a, Point b, Point c); - extern void addpt(Point * a, Point b, Point c); - extern double area_2(Point a, Point b, Point c); - extern int leftOf(Point a, Point b, Point c); - extern int intersection(Point a, Point b, Point c, Point d, Point * p); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/heap.c b/internal/ccall/neatogen/heap.c deleted file mode 100644 index f101fc9..0000000 --- a/internal/ccall/neatogen/heap.c +++ /dev/null @@ -1,149 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "render.h" -#include - -#include "mem.h" -#include "hedges.h" -#include "heap.h" - - -static Halfedge *PQhash; -static int PQhashsize; -static int PQcount; -static int PQmin; - -static int PQbucket(Halfedge * he) -{ - int bucket; - double b; - - b = (he->ystar - ymin) / deltay * PQhashsize; - if (b < 0) - bucket = 0; - else if (b >= PQhashsize) - bucket = PQhashsize - 1; - else - bucket = b; - if (bucket < PQmin) - PQmin = bucket; - return (bucket); -} - -void PQinsert(Halfedge * he, Site * v, double offset) -{ - Halfedge *last, *next; - - he->vertex = v; - ref(v); - he->ystar = v->coord.y + offset; - last = &PQhash[PQbucket(he)]; - while ((next = last->PQnext) != (struct Halfedge *) NULL && - (he->ystar > next->ystar || - (he->ystar == next->ystar - && v->coord.x > next->vertex->coord.x))) { - last = next; - } - he->PQnext = last->PQnext; - last->PQnext = he; - PQcount += 1; -} - -void PQdelete(Halfedge * he) -{ - Halfedge *last; - - if (he->vertex != (Site *) NULL) { - last = &PQhash[PQbucket(he)]; - while (last->PQnext != he) - last = last->PQnext; - last->PQnext = he->PQnext; - PQcount -= 1; - deref(he->vertex); - he->vertex = (Site *) NULL; - } -} - - -int PQempty(void) -{ - return (PQcount == 0); -} - - -Point PQ_min(void) -{ - Point answer; - - while (PQhash[PQmin].PQnext == (struct Halfedge *) NULL) { - PQmin += 1; - } - answer.x = PQhash[PQmin].PQnext->vertex->coord.x; - answer.y = PQhash[PQmin].PQnext->ystar; - return (answer); -} - -Halfedge *PQextractmin(void) -{ - Halfedge *curr; - - curr = PQhash[PQmin].PQnext; - PQhash[PQmin].PQnext = curr->PQnext; - PQcount -= 1; - return (curr); -} - -void PQcleanup(void) -{ - free(PQhash); - PQhash = NULL; -} - -void PQinitialize(void) -{ - int i; - - PQcount = 0; - PQmin = 0; - PQhashsize = 4 * sqrt_nsites; - if (PQhash == NULL) - PQhash = N_GNEW(PQhashsize, Halfedge); - for (i = 0; i < PQhashsize; i += 1) - PQhash[i].PQnext = (Halfedge *) NULL; -} - -static void PQdumphe(Halfedge * p) -{ - printf(" [%p] %p %p %d %d %d %d %f\n", - p, p->ELleft, p->ELright, p->ELedge->edgenbr, - p->ELrefcnt, p->ELpm, (p->vertex ? p->vertex->sitenbr : -1), - p->ystar); -} - -void PQdump(void) -{ - int i; - Halfedge *p; - - for (i = 0; i < PQhashsize; i += 1) { - printf("[%d]\n", i); - p = PQhash[i].PQnext; - while (p != NULL) { - PQdumphe(p); - p = p->PQnext; - } - } - -} diff --git a/internal/ccall/neatogen/heap.h b/internal/ccall/neatogen/heap.h deleted file mode 100644 index 9958ead..0000000 --- a/internal/ccall/neatogen/heap.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef HEAP_H -#define HEAP_H - -#include "hedges.h" - - extern void PQinitialize(void); - extern void PQcleanup(void); - extern Halfedge *PQextractmin(void); - extern Point PQ_min(void); - extern int PQempty(void); - extern void PQdelete(Halfedge *); - extern void PQinsert(Halfedge *, Site *, double); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/hedges.c b/internal/ccall/neatogen/hedges.c deleted file mode 100644 index 3e205c4..0000000 --- a/internal/ccall/neatogen/hedges.c +++ /dev/null @@ -1,263 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "mem.h" -#include "hedges.h" -#include "render.h" - - -#define DELETED -2 - -Halfedge *ELleftend, *ELrightend; - -static Freelist hfl; -static int ELhashsize; -static Halfedge **ELhash; -static int ntry, totalsearch; - -void ELcleanup() -{ - freeinit(&hfl, sizeof **ELhash); - free(ELhash); - ELhash = NULL; -} - -void ELinitialize() -{ - int i; - - freeinit(&hfl, sizeof **ELhash); - ELhashsize = 2 * sqrt_nsites; - if (ELhash == NULL) - ELhash = N_GNEW(ELhashsize, Halfedge *); - for (i = 0; i < ELhashsize; i += 1) - ELhash[i] = (Halfedge *) NULL; - ELleftend = HEcreate((Edge *) NULL, 0); - ELrightend = HEcreate((Edge *) NULL, 0); - ELleftend->ELleft = (Halfedge *) NULL; - ELleftend->ELright = ELrightend; - ELrightend->ELleft = ELleftend; - ELrightend->ELright = (Halfedge *) NULL; - ELhash[0] = ELleftend; - ELhash[ELhashsize - 1] = ELrightend; -} - - -Site *hintersect(Halfedge * el1, Halfedge * el2) -{ - Edge *e1, *e2, *e; - Halfedge *el; - double d, xint, yint; - int right_of_site; - Site *v; - - e1 = el1->ELedge; - e2 = el2->ELedge; - if (e1 == (Edge *) NULL || e2 == (Edge *) NULL) - return ((Site *) NULL); - if (e1->reg[1] == e2->reg[1]) - return ((Site *) NULL); - - d = e1->a * e2->b - e1->b * e2->a; - if (-1.0e-10 < d && d < 1.0e-10) - return ((Site *) NULL); - - xint = (e1->c * e2->b - e2->c * e1->b) / d; - yint = (e2->c * e1->a - e1->c * e2->a) / d; - - if ((e1->reg[1]->coord.y < e2->reg[1]->coord.y) || - (e1->reg[1]->coord.y == e2->reg[1]->coord.y && - e1->reg[1]->coord.x < e2->reg[1]->coord.x)) { - el = el1; - e = e1; - } else { - el = el2; - e = e2; - }; - right_of_site = xint >= e->reg[1]->coord.x; - if ((right_of_site && el->ELpm == le) || - (!right_of_site && el->ELpm == re)) - return ((Site *) NULL); - - v = getsite(); - v->refcnt = 0; - v->coord.x = xint; - v->coord.y = yint; - return (v); -} - -/* returns 1 if p is to right of halfedge e */ -int right_of(Halfedge * el, Point * p) -{ - Edge *e; - Site *topsite; - int right_of_site, above, fast; - double dxp, dyp, dxs, t1, t2, t3, yl; - - e = el->ELedge; - topsite = e->reg[1]; - right_of_site = p->x > topsite->coord.x; - if (right_of_site && el->ELpm == le) - return (1); - if (!right_of_site && el->ELpm == re) - return (0); - - if (e->a == 1.0) { - dyp = p->y - topsite->coord.y; - dxp = p->x - topsite->coord.x; - fast = 0; - if ((!right_of_site & (e->b < 0.0)) | - (right_of_site & (e->b >= 0.0))) { - above = dyp >= e->b * dxp; - fast = above; - } else { - above = p->x + p->y * e->b > e->c; - if (e->b < 0.0) - above = !above; - if (!above) - fast = 1; - }; - if (!fast) { - dxs = topsite->coord.x - (e->reg[0])->coord.x; - above = e->b * (dxp * dxp - dyp * dyp) < - dxs * dyp * (1.0 + 2.0 * dxp / dxs + e->b * e->b); - if (e->b < 0.0) - above = !above; - }; - } else { /*e->b==1.0 */ - yl = e->c - e->a * p->x; - t1 = p->y - yl; - t2 = p->x - topsite->coord.x; - t3 = yl - topsite->coord.y; - above = t1 * t1 > t2 * t2 + t3 * t3; - }; - return (el->ELpm == le ? above : !above); -} - -Halfedge *HEcreate(Edge * e, char pm) -{ - Halfedge *answer; - answer = (Halfedge *) getfree(&hfl); - answer->ELedge = e; - answer->ELpm = pm; - answer->PQnext = (Halfedge *) NULL; - answer->vertex = (Site *) NULL; - answer->ELrefcnt = 0; - return (answer); -} - - -void ELinsert(Halfedge * lb, Halfedge * new) -{ - new->ELleft = lb; - new->ELright = lb->ELright; - (lb->ELright)->ELleft = new; - lb->ELright = new; -} - -/* Get entry from hash table, pruning any deleted nodes */ -static Halfedge *ELgethash(int b) -{ - Halfedge *he; - - if (b < 0 || b >= ELhashsize) - return ((Halfedge *) NULL); - he = ELhash[b]; - if (he == (Halfedge *) NULL || he->ELedge != (Edge *) DELETED) - return (he); - -/* Hash table points to deleted half edge. Patch as necessary. */ - ELhash[b] = (Halfedge *) NULL; - if ((he->ELrefcnt -= 1) == 0) - makefree(he, &hfl); - return ((Halfedge *) NULL); -} - -Halfedge *ELleftbnd(Point * p) -{ - int i, bucket; - Halfedge *he; - -/* Use hash table to get close to desired halfedge */ - bucket = (p->x - xmin) / deltax * ELhashsize; - if (bucket < 0) - bucket = 0; - if (bucket >= ELhashsize) - bucket = ELhashsize - 1; - he = ELgethash(bucket); - if (he == (Halfedge *) NULL) { - for (i = 1; 1; i += 1) { - if ((he = ELgethash(bucket - i)) != (Halfedge *) NULL) - break; - if ((he = ELgethash(bucket + i)) != (Halfedge *) NULL) - break; - }; - totalsearch += i; - }; - ntry += 1; -/* Now search linear list of halfedges for the corect one */ - if (he == ELleftend || (he != ELrightend && right_of(he, p))) { - do { - he = he->ELright; - } while (he != ELrightend && right_of(he, p)); - he = he->ELleft; - } else - do { - he = he->ELleft; - } while (he != ELleftend && !right_of(he, p)); - -/* Update hash table and reference counts */ - if (bucket > 0 && bucket < ELhashsize - 1) { - if (ELhash[bucket] != (Halfedge *) NULL) - ELhash[bucket]->ELrefcnt -= 1; - ELhash[bucket] = he; - ELhash[bucket]->ELrefcnt += 1; - }; - return (he); -} - - -/* This delete routine can't reclaim node, since pointers from hash - table may be present. */ -void ELdelete(Halfedge * he) -{ - (he->ELleft)->ELright = he->ELright; - (he->ELright)->ELleft = he->ELleft; - he->ELedge = (Edge *) DELETED; -} - - -Halfedge *ELright(Halfedge * he) -{ - return (he->ELright); -} - -Halfedge *ELleft(Halfedge * he) -{ - return (he->ELleft); -} - - -Site *leftreg(Halfedge * he) -{ - if (he->ELedge == (Edge *) NULL) - return (bottomsite); - return (he->ELpm == le ? he->ELedge->reg[le] : he->ELedge->reg[re]); -} - -Site *rightreg(Halfedge * he) -{ - if (he->ELedge == (Edge *) NULL) - return (bottomsite); - return (he->ELpm == le ? he->ELedge->reg[re] : he->ELedge->reg[le]); -} diff --git a/internal/ccall/neatogen/hedges.h b/internal/ccall/neatogen/hedges.h deleted file mode 100644 index e252a53..0000000 --- a/internal/ccall/neatogen/hedges.h +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef HEDGES_H -#define HEDGES_H - -#include "site.h" -#include "edges.h" - - typedef struct Halfedge { - struct Halfedge *ELleft, *ELright; - Edge *ELedge; - int ELrefcnt; - char ELpm; - Site *vertex; - double ystar; - struct Halfedge *PQnext; - } Halfedge; - - extern Halfedge *ELleftend, *ELrightend; - - extern void ELinitialize(void); - extern void ELcleanup(void); - extern int right_of(Halfedge *, Point *); - extern Site *hintersect(Halfedge *, Halfedge *); - extern Halfedge *HEcreate(Edge *, char); - extern void ELinsert(Halfedge *, Halfedge *); - extern Halfedge *ELleftbnd(Point *); - extern void ELdelete(Halfedge *); - extern Halfedge *ELleft(Halfedge *), *ELright(Halfedge *); - extern Halfedge *ELleftbnd(Point *); - extern Site *leftreg(Halfedge *), *rightreg(Halfedge *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/info.c b/internal/ccall/neatogen/info.c deleted file mode 100644 index c7b38e3..0000000 --- a/internal/ccall/neatogen/info.c +++ /dev/null @@ -1,207 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "neato.h" -#include -#include "mem.h" -#include "info.h" - - -Info_t *nodeInfo; /* Array of node info */ -static Freelist pfl; - -void infoinit() -{ - freeinit(&pfl, sizeof(PtItem)); -} - -/* compare: - * returns -1 if p < q - * 0 if p = q - * 1 if p > q - * if q if NULL, returns -1 - * Ordering is by angle from -pi/2 to 3pi/4. - * For equal angles (which should not happen in our context) - * ordering is by closeness to origin. - */ -static int compare(Point * o, PtItem * p, PtItem * q) -{ - double x0; - double y0; - double x1; - double y1; - double a, b; - - if (q == NULL) - return -1; - if ((p->p.x == q->p.x) && (p->p.y == q->p.y)) - return 0; - - x0 = ((double) (p->p.x)) - ((double) (o->x)); - y0 = ((double) (p->p.y)) - ((double) (o->y)); - x1 = ((double) (q->p.x)) - ((double) (o->x)); - y1 = ((double) (q->p.y)) - ((double) (o->y)); - if (x0 >= 0.0) { - if (x1 < 0.0) - return -1; - else if (x0 > 0.0) { - if (x1 > 0.0) { - a = y1 / x1; - b = y0 / x0; - if (b < a) - return -1; - else if (b > a) - return 1; - else if (x0 < x1) - return -1; - else - return 1; - } else { /* x1 == 0.0 */ - if (y1 > 0.0) - return -1; - else - return 1; - } - } else { /* x0 == 0.0 */ - if (x1 > 0.0) { - if (y0 <= 0.0) - return -1; - else - return 1; - } else { /* x1 == 0.0 */ - if (y0 < y1) { - if (y1 <= 0.0) - return 1; - else - return -1; - } else { - if (y0 <= 0.0) - return -1; - else - return 1; - } - } - } - } else { - if (x1 >= 0.0) - return 1; - else { - a = y1 / x1; - b = y0 / x0; - if (b < a) - return -1; - else if (b > a) - return 1; - else if (x0 > x1) - return -1; - else - return 1; - } - } -} - -#if 0 /* not used */ -static void printV(PtItem * vp) -{ - if (vp == NULL) { - fprintf(stderr, "\n"); - return; - } - - while (vp != NULL) { - fprintf(stderr, "(%.16f,%.16f)\n", vp->p.x, vp->p.y); - vp = vp->next; - } -} - -static void error(Info_t * ip, Site * s, double x, double y) -{ - fprintf(stderr, - "Unsorted vertex list for site %d (%.16f,%.16f), pt (%f,%f)\n", - s->sitenbr, s->coord.x, s->coord.y, x, y); - printV(ip->verts); -} -#endif - -#if 0 /* not used */ -static int sorted(Point * origin, PtItem * vp) -{ - PtItem *next; - - if (vp == NULL) - return 1; - next = vp->next; - - while (next != NULL) { - if (compare(origin, vp, next) <= 0) { - vp = next; - next = next->next; - } else { - fprintf(stderr, "(%.16f,%.16f) > (%.16f,%.16f)\n", - vp->p.x, vp->p.y, next->p.x, next->p.y); - return 0; - } - } - - return 1; - -} -#endif - -void addVertex(Site * s, double x, double y) -{ - Info_t *ip; - PtItem *p; - PtItem *curr; - PtItem *prev; - Point *origin = &(s->coord); - PtItem tmp; - int cmp; - - ip = nodeInfo + (s->sitenbr); - curr = ip->verts; - - tmp.p.x = x; - tmp.p.y = y; - - cmp = compare(origin, &tmp, curr); - if (cmp == 0) - return; - else if (cmp < 0) { - p = (PtItem *) getfree(&pfl); - p->p.x = x; - p->p.y = y; - p->next = curr; - ip->verts = p; - return; - } - - prev = curr; - curr = curr->next; - while ((cmp = compare(origin, &tmp, curr)) > 0) { - prev = curr; - curr = curr->next; - } - if (cmp == 0) - return; - p = (PtItem *) getfree(&pfl); - p->p.x = x; - p->p.y = y; - prev->next = p; - p->next = curr; - - /* This test should be unnecessary */ - /* if (!sorted(origin,ip->verts)) */ - /* error (ip,s,x,y); */ - -} diff --git a/internal/ccall/neatogen/info.h b/internal/ccall/neatogen/info.h deleted file mode 100644 index fc95c0f..0000000 --- a/internal/ccall/neatogen/info.h +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifndef INFO_H -#define INFO_H - -#include "voronoi.h" -#include "poly.h" - - typedef struct ptitem { /* Point list */ - struct ptitem *next; - Point p; - } PtItem; - - typedef struct { /* Info concerning site */ - Agnode_t *node; /* libgraph node */ - Site site; /* site used by voronoi code */ - int overlaps; /* true if node overlaps other nodes */ - Poly poly; /* polygon at node */ - PtItem *verts; /* sorted list of vertices of */ - /* voronoi polygon */ - } Info_t; - - extern Info_t *nodeInfo; /* Array of node info */ - - extern void infoinit(void); - /* Insert vertex into sorted list */ - extern void addVertex(Site *, double, double); -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/kkutils.c b/internal/ccall/neatogen/kkutils.c deleted file mode 100644 index 0c9f07a..0000000 --- a/internal/ccall/neatogen/kkutils.c +++ /dev/null @@ -1,290 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "bfs.h" -#include "dijkstra.h" -#include "kkutils.h" -#include -#include - -int common_neighbors(vtx_data * graph, int v, int u, int *v_vector) -{ - /* count number of common neighbors of 'v' and 'u' */ - int neighbor; - int num_shared_neighbors = 0; - int j; - for (j = 1; j < graph[u].nedges; j++) { - neighbor = graph[u].edges[j]; - if (v_vector[neighbor] > 0) { - /* a shared neighobr */ - num_shared_neighbors++; - } - } - return num_shared_neighbors; -} -void fill_neighbors_vec_unweighted(vtx_data * graph, int vtx, int *vtx_vec) -{ - /* a node is NOT a neighbor of itself! */ - /* unlike the other version of this function */ - int j; - for (j = 1; j < graph[vtx].nedges; j++) { - vtx_vec[graph[vtx].edges[j]] = 1; - } -} - -void empty_neighbors_vec(vtx_data * graph, int vtx, int *vtx_vec) -{ - int j; - /* a node is NOT a neighbor of itself! */ - /* unlike the other version ofthis function */ - for (j = 1; j < graph[vtx].nedges; j++) { - vtx_vec[graph[vtx].edges[j]] = 0; - } -} - -/* compute_apsp_dijkstra: - * Assumes the graph has weights - */ -static DistType **compute_apsp_dijkstra(vtx_data * graph, int n) -{ - int i; - DistType *storage; - DistType **dij; - - storage = N_GNEW(n * n, DistType); - dij = N_GNEW(n, DistType *); - for (i = 0; i < n; i++) - dij[i] = storage + i * n; - - for (i = 0; i < n; i++) { - dijkstra(i, graph, n, dij[i]); - } - return dij; -} - -static DistType **compute_apsp_simple(vtx_data * graph, int n) -{ - /* compute all pairs shortest path */ - /* for unweighted graph */ - int i; - DistType *storage = N_GNEW(n * n, int); - DistType **dij; - Queue Q; - - dij = N_GNEW(n, DistType *); - for (i = 0; i < n; i++) { - dij[i] = storage + i * n; - } - mkQueue(&Q, n); - for (i = 0; i < n; i++) { - bfs(i, graph, n, dij[i], &Q); - } - freeQueue(&Q); - return dij; -} - -DistType **compute_apsp(vtx_data * graph, int n) -{ - if (graph->ewgts) - return compute_apsp_dijkstra(graph, n); - else - return compute_apsp_simple(graph, n); -} - -DistType **compute_apsp_artifical_weights(vtx_data * graph, int n) -{ - DistType **Dij; - /* compute all-pairs-shortest-path-length while weighting the graph */ - /* so high-degree nodes are distantly located */ - - float *old_weights = graph[0].ewgts; - - compute_new_weights(graph, n); - Dij = compute_apsp_dijkstra(graph, n); - restore_old_weights(graph, n, old_weights); - return Dij; -} - - -/**********************/ -/* */ -/* Quick Sort */ -/* */ -/**********************/ - -static void -split_by_place(double *place, int *nodes, int first, int last, int *middle) -{ - unsigned int splitter=((unsigned int)rand()|((unsigned int)rand())<<16)%(unsigned int)(last-first+1)+(unsigned int)first; - int val; - double place_val; - int left = first + 1; - int right = last; - int temp; - - val = nodes[splitter]; - nodes[splitter] = nodes[first]; - nodes[first] = val; - place_val = place[val]; - - while (left < right) { - while (left < right && place[nodes[left]] <= place_val) - left++; - /* use here ">" and not ">=" to enable robustness - * by ensuring that ALL equal values move to the same side - */ - while (left < right && place[nodes[right]] > place_val) - right--; - if (left < right) { - temp = nodes[left]; - nodes[left] = nodes[right]; - nodes[right] = temp; - left++; - right--; /* (1) */ - - } - } - /* at this point either, left==right (meeting), or - * left=right+1 (because of (1)) - * we have to decide to which part the meeting point (or left) belongs. - * - * notice that always left>first, because of its initialization - */ - if (place[nodes[left]] > place_val) - left = left - 1; - *middle = left; - nodes[first] = nodes[left]; - nodes[left] = val; -} - -double distance_kD(double **coords, int dim, int i, int j) -{ - /* compute a k-D Euclidean distance between 'coords[*][i]' and 'coords[*][j]' */ - double sum = 0; - int k; - for (k = 0; k < dim; k++) { - sum += - (coords[k][i] - coords[k][j]) * (coords[k][i] - coords[k][j]); - } - return sqrt(sum); -} - -static float* fvals; -static int -fcmpf (int* ip1, int* ip2) -{ - float d1 = fvals[*ip1]; - float d2 = fvals[*ip2]; - if (d1 < d2) return -1; - else if (d1 > d2) return 1; - else return 0; -} - -void quicksort_placef(float *place, int *ordering, int first, int last) -{ - if (first < last) { - fvals = place; - qsort(ordering+first, last-first+1, sizeof(ordering[0]), (qsort_cmpf)fcmpf); - } -} - -static int -sorted_place(double * place, int * ordering, int first,int last) -{ - int i, isSorted = 1; - for (i=first+1; i<=last && isSorted; i++) { - if (place[ordering[i-1]]>place[ordering[i]]) { - isSorted = 0; - } - } - return isSorted; -} - -/* quicksort_place: - * For now, we keep the current implementation for stability, but - * we should consider replacing this with an implementation similar to - * quicksort_placef above. - */ -void quicksort_place(double *place, int *ordering, int first, int last) -{ - if (first < last) { - int middle; -#ifdef __cplusplus - split_by_place(place, ordering, first, last, middle); -#else - split_by_place(place, ordering, first, last, &middle); -#endif - quicksort_place(place, ordering, first, middle - 1); - quicksort_place(place, ordering, middle + 1, last); - /* Checking for "already sorted" dramatically improves running time - * and robustness (against uneven recursion) when not all values are - * distinct (thefore we expect emerging chunks of equal values) - * it never increased running time even when values were distinct - */ - if (!sorted_place(place,ordering,first,middle-1)) - quicksort_place(place,ordering,first,middle-1); - if (!sorted_place(place,ordering,middle+1,last)) - quicksort_place(place,ordering,middle+1,last); - } -} - -void compute_new_weights(vtx_data * graph, int n) -{ - /* Reweight graph so that high degree nodes will be separated */ - - int i, j; - int nedges = 0; - float *weights; - int *vtx_vec = N_GNEW(n, int); - int deg_i, deg_j, neighbor; - - for (i = 0; i < n; i++) { - nedges += graph[i].nedges; - } - weights = N_GNEW(nedges, float); - - for (i = 0; i < n; i++) { - vtx_vec[i] = 0; - } - - for (i = 0; i < n; i++) { - graph[i].ewgts = weights; - fill_neighbors_vec_unweighted(graph, i, vtx_vec); - deg_i = graph[i].nedges - 1; - for (j = 1; j <= deg_i; j++) { - neighbor = graph[i].edges[j]; - deg_j = graph[neighbor].nedges - 1; - weights[j] = - (float) (deg_i + deg_j - - 2 * common_neighbors(graph, i, neighbor, - vtx_vec)); - } - empty_neighbors_vec(graph, i, vtx_vec); - weights += graph[i].nedges; - } - free(vtx_vec); -} - -void restore_old_weights(vtx_data * graph, int n, float *old_weights) -{ - int i; - free(graph[0].ewgts); - graph[0].ewgts = NULL; - if (old_weights != NULL) { - for (i = 0; i < n; i++) { - graph[i].ewgts = old_weights; - old_weights += graph[i].nedges; - } - } -} diff --git a/internal/ccall/neatogen/kkutils.h b/internal/ccall/neatogen/kkutils.h deleted file mode 100644 index 6e5067f..0000000 --- a/internal/ccall/neatogen/kkutils.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef KKUTILS_H_ -#define KKUTILS_H_ - -#include "defs.h" - -#ifdef __cplusplus - - inline double distance_kD(double **coords, int dim, int i, int j) { - /* compute a k-D Euclidean distance between 'coords[*][i]' and 'coords[*][j]' */ - double sum = 0; - for (int k = 0; k < dim; k++) { - sum += - (coords[k][i] - coords[k][j]) * (coords[k][i] - - coords[k][j]); - } return sqrt(sum); - } - void compute_apsp(vtx_data * graph, int n, DistType ** (&Dij)); - void compute_apsp_artifical_weights(vtx_data * graph, int n, - DistType ** (&Dij)); - - void quicksort_place(double *place, int *ordering, int first, int last); - void free_graph(vtx_data * (&graph)); -#else - extern void fill_neighbors_vec_unweighted(vtx_data *, int vtx, - int *vtx_vec); - extern int common_neighbors(vtx_data *, int v, int u, int *); - extern void empty_neighbors_vec(vtx_data * graph, int vtx, - int *vtx_vec); - extern DistType **compute_apsp(vtx_data *, int); - extern DistType **compute_apsp_artifical_weights(vtx_data *, int); - extern double distance_kD(double **, int, int, int); - extern void quicksort_place(double *, int *, int, int); - extern void quicksort_placef(float *, int *, int, int); - extern void compute_new_weights(vtx_data * graph, int n); - extern void restore_old_weights(vtx_data * graph, int n, - float *old_weights); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/legal.c b/internal/ccall/neatogen/legal.c deleted file mode 100644 index b3d9edb..0000000 --- a/internal/ccall/neatogen/legal.c +++ /dev/null @@ -1,471 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "neato.h" -#include "pathutil.h" -#include - -static jmp_buf jbuf; - -#define MAXINTS 10000 /* modify this line to reflect the max no. of - intersections you want reported -- 50000 seems to break the program */ - -#define SLOPE(p,q) ( ( ( p.y ) - ( q.y ) ) / ( ( p.x ) - ( q.x ) ) ) - -#define EQ_PT(v,w) (((v).x == (w).x) && ((v).y == (w).y)) - -#define after(v) (((v)==((v)->poly->finish))?((v)->poly->start):((v)+1)) -#define prior(v) (((v)==((v)->poly->start))?((v)->poly->finish):((v)-1)) - -typedef struct active_edge active_edge; -typedef struct polygon polygon; - - typedef struct { - pointf pos; - polygon *poly; - active_edge *active; - } vertex ; - - struct polygon { - vertex *start, *finish; - boxf bb; - }; - - typedef struct { - vertex *firstv, *secondv; -#ifdef RECORD_INTERSECTS - polygon *firstp, *secondp; -#endif - double x, y; - } neato_intersection ; - - struct active_edge { - vertex *name; - struct active_edge *next, *last; - }; - typedef struct active_edge_list { - active_edge *first, *final; - int number; - } active_edge_list ; - typedef struct { - int nvertices, npolygons, ninters; - } data ; - - -/* find the sign of the area of each of the triangles - formed by adding a vertex of m to l - also find the sign of their product */ -static void sgnarea(vertex *l, vertex *m, int i[]) -{ - double a, b, c, d, e, f, g, h, t; - a = l->pos.x; - b = l->pos.y; - c = after(l)->pos.x - a; - d = after(l)->pos.y - b; - e = m->pos.x - a; - f = m->pos.y - b; - g = after(m)->pos.x - a; - h = after(m)->pos.y - b; - t = (c * f) - (d * e); - i[0] = ((t == 0) ? 0 : (t > 0 ? 1 : -1)); - t = (c * h) - (d * g); - i[1] = ((t == 0) ? 0 : (t > 0 ? 1 : -1)); - i[2] = i[0] * i[1]; -} - -/* determine if g lies between f and h */ -static int between(double f, double g, double h) -{ - if ((f == g) || (g == h)) - return (0); - return ((f < g) ? (g < h ? 1 : -1) : (h < g ? 1 : -1)); -} - -/* determine if vertex i of line m is on line l */ -static int online(vertex *l, vertex *m, int i) -{ - pointf a, b, c; - a = l->pos; - b = after(l)->pos; - c = (i == 0) ? m->pos : after(m)->pos; - return ((a.x == b.x) ? ((a.x == c.x) - && (-1 != - between(a.y, c.y, b.y))) : between(a.x, - c.x, - b.x)); -} - -#undef le - -/* determine point of detected intersections */ -static int intpoint(vertex *l, vertex *m, double *x, double *y, int cond) -{ - pointf ls, le, ms, me, pt1, pt2; - double m1, m2, c1, c2; - - if (cond <= 0) - return (0); - ls = l->pos; - le = after(l)->pos; - ms = m->pos; - me = after(m)->pos; - - switch (cond) { - - case 3: /* a simple intersection */ - if (ls.x == le.x) { - *x = ls.x; - *y = me.y + SLOPE(ms, me) * (*x - me.x); - } else if (ms.x == me.x) { - *x = ms.x; - *y = le.y + SLOPE(ls, le) * (*x - le.x); - } else { - m1 = SLOPE(ms, me); - m2 = SLOPE(ls, le); - c1 = ms.y - (m1 * ms.x); - c2 = ls.y - (m2 * ls.x); - *x = (c2 - c1) / (m1 - m2); - *y = ((m1 * c2) - (c1 * m2)) / (m1 - m2); - } - break; - - case 2: /* the two lines have a common segment */ - if (online(l, m, 0) == -1) { /* ms between ls and le */ - pt1 = ms; - pt2 = - (online(m, l, 1) == - -1) ? ((online(m, l, 0) == -1) ? le : ls) : me; - } else if (online(l, m, 1) == -1) { /* me between ls and le */ - pt1 = me; - pt2 = - (online(l, m, 0) == - -1) ? ((online(m, l, 0) == -1) ? le : ls) : ms; - } else { - /* may be degenerate? */ - if (online(m, l, 0) != -1) - return 0; - pt1 = ls; - pt2 = le; - } - - *x = (pt1.x + pt2.x) / 2; - *y = (pt1.y + pt2.y) / 2; - break; - - case 1: /* a vertex of line m is on line l */ - if ((ls.x - le.x) * (ms.y - ls.y) == (ls.y - le.y) * (ms.x - ls.x)) { - *x = ms.x; - *y = ms.y; - } else { - *x = me.x; - *y = me.y; - } - } /* end switch */ - return (1); -} - -static void -putSeg (int i, vertex* v) -{ - fprintf(stderr, "seg#%d : (%.3f, %.3f) (%.3f, %.3f)\n", - i, v->pos.x, v->pos.y, after(v)->pos.x, after(v)->pos.y); -} - -/* realIntersect: - * Return 1 if a real inatersection has been found - */ -static int -realIntersect (vertex *firstv, vertex *secondv, pointf p) -{ - pointf vft, vsd, avft, avsd; - - vft = firstv->pos; - avft = after(firstv)->pos; - vsd = secondv->pos; - avsd = after(secondv)->pos; - - if (((vft.x != avft.x) && (vsd.x != avsd.x)) || - ((vft.x == avft.x) && - !EQ_PT(vft, p) && - !EQ_PT(avft, p)) || - ((vsd.x == avsd.x) && - !EQ_PT(vsd, p) && !EQ_PT(avsd, p))) - { - if (Verbose > 1) { - fprintf(stderr, "\nintersection at %.3f %.3f\n", - p.x, p.y); - putSeg (1, firstv); - putSeg (2, secondv); - } - return 1; - } - else return 0; -} - -/* find_intersection: - * detect whether segments l and m intersect - * Return 1 if found; 0 otherwise; - */ -static int find_intersection(vertex *l, - vertex *m, - neato_intersection* ilist, data *input) -{ - double x, y; - pointf p; - int i[3]; - sgnarea(l, m, i); - - if (i[2] > 0) - return 0; - - if (i[2] < 0) { - sgnarea(m, l, i); - if (i[2] > 0) - return 0; - if (!intpoint - (l, m, &x, &y, (i[2] < 0) ? 3 : online(m, l, ABS(i[0])))) - return 0; - } - - else if (!intpoint(l, m, &x, &y, (i[0] == i[1]) ? - 2 * MAX(online(l, m, 0), - online(l, m, 1)) : online(l, m, ABS(i[0])))) - return 0; - -#ifdef RECORD_INTERSECTS - if (input->ninters >= MAXINTS) { - agerr(AGERR, "using too many intersections\n"); - exit(1); - } - - ilist[input->ninters].firstv = l; - ilist[input->ninters].secondv = m; - ilist[input->ninters].firstp = l->poly; - ilist[input->ninters].secondp = m->poly; - ilist[input->ninters].x = x; - ilist[input->ninters].y = y; - input->ninters++; -#endif - p.x = x; - p.y = y; - return realIntersect(l, m, p); -} - -static int gt(vertex **i, vertex **j) -{ - /* i > j if i.x > j.x or i.x = j.x and i.y > j.y */ - double t; - if ((t = (*i)->pos.x - (*j)->pos.x) != 0.) - return ((t > 0.) ? 1 : -1); - if ((t = (*i)->pos.y - (*j)->pos.y) == 0.) - return (0); - else - return ((t > 0.) ? 1 : -1); -} - -/* find_ints: - * Check for pairwise intersection of polygon sides - * Return 1 if intersection found, 0 otherwise. - */ -static int -find_ints(vertex vertex_list[], - polygon polygon_list[], - data *input, neato_intersection ilist[]) -{ - int i, j, k, found = 0; - active_edge_list all; - active_edge *new, *tempa; - vertex *pt1, *pt2, *templ, **pvertex; - - input->ninters = 0; - all.first = all.final = 0; - all.number = 0; - - pvertex = N_GNEW(input->nvertices, vertex *); - - for (i = 0; i < input->nvertices; i++) - pvertex[i] = vertex_list + i; - -/* sort vertices by x coordinate */ - qsort(pvertex, input->nvertices, sizeof(vertex *), - (int (*)(const void *, const void *))gt); - -/* walk through the vertices in order of increasing x coordinate */ - for (i = 0; i < input->nvertices; i++) { - pt1 = pvertex[i]; - templ = pt2 = prior(pvertex[i]); - for (k = 0; k < 2; k++) { /* each vertex has 2 edges */ - switch (gt(&pt1, &pt2)) { - - case -1: /* forward edge, test and insert */ - - /* test */ - for (tempa = all.first, j = 0; j < all.number; - j++, tempa = tempa->next) { - found = find_intersection(tempa->name, templ, ilist, input); - if (found) - goto finish; - } - - new = GNEW(active_edge); - if (all.number == 0) { - all.first = new; - new->last = 0; - } /* insert */ - else { - all.final->next = new; - new->last = all.final; - } - - new->name = templ; - new->next = 0; - templ->active = new; - all.final = new; - all.number++; - - break; /* end of case -1 */ - - case 1: /* backward edge, delete */ - - if ((tempa = templ->active) == 0) { - agerr(AGERR, "trying to delete a non-line\n"); - longjmp(jbuf, 1); - } - if (all.number == 1) - all.final = all.first = 0; /* delete the line */ - else if (tempa == all.first) { - all.first = all.first->next; - all.first->last = 0; - } else if (tempa == all.final) { - all.final = all.final->last; - all.final->next = 0; - } else { - tempa->last->next = tempa->next; - tempa->next->last = tempa->last; - } - free((char *) tempa); - all.number--; - templ->active = 0; - break; /* end of case 1 */ - - } /* end switch */ - - pt2 = after(pvertex[i]); - templ = pvertex[i]; /*second neighbor */ - } /* end k for loop */ - } /* end i for loop */ - -finish : - for (tempa = all.first, j = 0; j < all.number; - j++, tempa = new) { - new = tempa->next; - free (tempa); - } - free (pvertex); - return found; -} - -#define INBOX(p,bb) ((p.x <= bb.UR.x) && (p.x >= bb.LL.x) && (p.y <= bb.UR.y) && (p.y >= bb.LL.y)) -#define NESTED(a,b) (INBOX(a.LL,b) && INBOX(a.UR,b)) - -/* findInside: - * Check if one polygon is inside another. We know that each - * pair is either disjoint or one is inside the other. - * Return 1 if an intersection is found, 0 otherwise. - */ -static int -findInside(Ppoly_t ** polys, int n_polys, polygon* polygon_list) -{ - int i, j; - pointf pt; - Ppoly_t* p1; - Ppoly_t* p2; - - for (i = 0; i < n_polys; i++) { - p1 = polys[i]; - pt = p1->ps[0]; - for (j = i+1; j < n_polys; j++) { - p2 = polys[j]; - if (NESTED(polygon_list[i].bb,polygon_list[j].bb)) { - if (in_poly(*p2, pt)) return 1; - } - else if (NESTED(polygon_list[j].bb,polygon_list[i].bb)) { - if (in_poly(*p1, p2->ps[0])) return 1; - } - } - } - return 0; -} - -/* Plegal_arrangement: - * Check that none of the polygons overlap. - * Return 1 if okay; 0 otherwise. - */ -int Plegal_arrangement(Ppoly_t ** polys, int n_polys) -{ - int i, j, vno, nverts, found; - vertex *vertex_list; - polygon *polygon_list; - data input; - neato_intersection ilist[MAXINTS]; - boxf bb; - double x, y; - - polygon_list = N_GNEW(n_polys, polygon); - - for (i = nverts = 0; i < n_polys; i++) - nverts += polys[i]->pn; - - vertex_list = N_GNEW(nverts, vertex); - - for (i = vno = 0; i < n_polys; i++) { - polygon_list[i].start = &vertex_list[vno]; - bb.LL.x = bb.LL.y = MAXDOUBLE; - bb.UR.x = bb.UR.y = -MAXDOUBLE; - for (j = 0; j < polys[i]->pn; j++) { - x = polys[i]->ps[j].x; - y = polys[i]->ps[j].y; - bb.LL.x = MIN(bb.LL.x,x); - bb.LL.y = MIN(bb.LL.y,y); - bb.UR.x = MAX(bb.UR.x,x); - bb.UR.y = MAX(bb.UR.y,y); - vertex_list[vno].pos.x = x; - vertex_list[vno].pos.y = y; - vertex_list[vno].poly = &polygon_list[i]; - vertex_list[vno].active = 0; - vno++; - } - polygon_list[i].finish = &vertex_list[vno - 1]; - polygon_list[i].bb = bb; - } - - input.nvertices = nverts; - input.npolygons = n_polys; - - if (setjmp(jbuf)) { - free(polygon_list); - free(vertex_list); - return 0; - } - found = find_ints(vertex_list, polygon_list, &input, ilist); - - if (!found) { - found = findInside(polys, n_polys, polygon_list); - } - free(polygon_list); - free(vertex_list); - - return !found; -} - -#define le 0 diff --git a/internal/ccall/neatogen/lu.c b/internal/ccall/neatogen/lu.c deleted file mode 100644 index a8c8b85..0000000 --- a/internal/ccall/neatogen/lu.c +++ /dev/null @@ -1,162 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * This code was (mostly) written by Ken Turkowski, who said: - * - * Oh, that. I wrote it in college the first time. It's open source - I think I - * posted it after seeing so many people solve equations by inverting matrices - * by computing minors naïvely. - * -Ken - * - * The views represented here are mine and are not necessarily shared by - * my employer. - Ken Turkowski turk@apple.com - Immersive Media Technologist http://www.worldserver.com/turk/ - Apple Computer, Inc. - 1 Infinite Loop, MS 302-3VR - Cupertino, CA 95014 - */ - - - -/* This module solves linear equations in several variables (Ax = b) using - * LU decomposition with partial pivoting and row equilibration. Although - * slightly more work than Gaussian elimination, it is faster for solving - * several equations using the same coefficient matrix. It is - * particularly useful for matrix inversion, by sequentially solving the - * equations with the columns of the unit matrix. - * - * lu_decompose() decomposes the coefficient matrix into the LU matrix, - * and lu_solve() solves the series of matrix equations using the - * previous LU decomposition. - * - * Ken Turkowski (apple!turk) - * written 3/2/79, revised and enhanced 8/9/83. - */ - -#include -#include - -static double *scales; -static double **lu; -static int *ps; - -/* lu_decompose() decomposes the coefficient matrix A into upper and lower - * triangular matrices, the composite being the LU matrix. - * - * The arguments are: - * - * a - the (n x n) coefficient matrix - * n - the order of the matrix - * - * 1 is returned if the decomposition was successful, - * and 0 is returned if the coefficient matrix is singular. - */ - -int lu_decompose(double **a, int n) -{ - register int i, j, k; - int pivotindex = 0; - double pivot, biggest, mult, tempf; - - if (lu) - free_array(lu); - lu = new_array(n, n, 0.0); - if (ps) - free(ps); - ps = N_NEW(n, int); - if (scales) - free(scales); - scales = N_NEW(n, double); - - for (i = 0; i < n; i++) { /* For each row */ - /* Find the largest element in each row for row equilibration */ - biggest = 0.0; - for (j = 0; j < n; j++) - if (biggest < (tempf = fabs(lu[i][j] = a[i][j]))) - biggest = tempf; - if (biggest != 0.0) - scales[i] = 1.0 / biggest; - else { - scales[i] = 0.0; - return (0); /* Zero row: singular matrix */ - } - ps[i] = i; /* Initialize pivot sequence */ - } - - for (k = 0; k < n - 1; k++) { /* For each column */ - /* Find the largest element in each column to pivot around */ - biggest = 0.0; - for (i = k; i < n; i++) { - if (biggest < (tempf = fabs(lu[ps[i]][k]) * scales[ps[i]])) { - biggest = tempf; - pivotindex = i; - } - } - if (biggest == 0.0) - return (0); /* Zero column: singular matrix */ - if (pivotindex != k) { /* Update pivot sequence */ - j = ps[k]; - ps[k] = ps[pivotindex]; - ps[pivotindex] = j; - } - - /* Pivot, eliminating an extra variable each time */ - pivot = lu[ps[k]][k]; - for (i = k + 1; i < n; i++) { - lu[ps[i]][k] = mult = lu[ps[i]][k] / pivot; - if (mult != 0.0) { - for (j = k + 1; j < n; j++) - lu[ps[i]][j] -= mult * lu[ps[k]][j]; - } - } - } - - if (lu[ps[n - 1]][n - 1] == 0.0) - return (0); /* Singular matrix */ - return (1); -} - -/* lu_solve() solves the linear equation (Ax = b) after the matrix A has - * been decomposed with lu_decompose() into the lower and upper triangular - * matrices L and U. - * - * The arguments are: - * - * x - the solution vector - * b - the constant vector - * n - the order of the equation -*/ - -void lu_solve(double *x, double *b, int n) -{ - register int i, j; - double dot; - - /* Vector reduction using U triangular matrix */ - for (i = 0; i < n; i++) { - dot = 0.0; - for (j = 0; j < i; j++) - dot += lu[ps[i]][j] * x[j]; - x[i] = b[ps[i]] - dot; - } - - /* Back substitution, in L triangular matrix */ - for (i = n - 1; i >= 0; i--) { - dot = 0.0; - for (j = i + 1; j < n; j++) - dot += lu[ps[i]][j] * x[j]; - x[i] = (x[i] - dot) / lu[ps[i]][i]; - } -} diff --git a/internal/ccall/neatogen/matinv.c b/internal/ccall/neatogen/matinv.c deleted file mode 100644 index 35b56df..0000000 --- a/internal/ccall/neatogen/matinv.c +++ /dev/null @@ -1,71 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * This code was (mostly) written by Ken Turkowski, who said: - * - * Oh, that. I wrote it in college the first time. It's open source - I think I - * posted it after seeing so many people solve equations by inverting matrices - * by computing minors naïvely. - * -Ken - * - * The views represented here are mine and are not necessarily shared by - * my employer. - Ken Turkowski turk@apple.com - Immersive Media Technologist http://www.worldserver.com/turk/ - Apple Computer, Inc. - 1 Infinite Loop, MS 302-3VR - Cupertino, CA 95014 - */ - -/* Matinv() inverts the matrix A using LU decomposition. Arguments: - * A - the (n x n) matrix to be inverted - * Ainv - the (n x n) inverted matrix - * n - the order of the matrices A and Ainv - */ - -#include -#include "render.h" -extern int lu_decompose(double **a, int n); -extern void lu_solve(double *x, double *b, int n); - -int matinv(double **A, double **Ainv, int n) -{ - register int i, j; - double *b, temp; - - /* Decompose matrix into L and U triangular matrices */ - if (lu_decompose(A, n) == 0) - return (0); /* Singular */ - - /* Invert matrix by solving n simultaneous equations n times */ - b = N_NEW(n, double); - for (i = 0; i < n; i++) { - for (j = 0; j < n; j++) - b[j] = 0.0; - b[i] = 1.0; - lu_solve(Ainv[i], b, n); /* Into a row of Ainv: fix later */ - } - free(b); - - /* Transpose matrix */ - for (i = 0; i < n; i++) { - for (j = 0; j < i; j++) { - temp = Ainv[i][j]; - Ainv[i][j] = Ainv[j][i]; - Ainv[j][i] = temp; - } - } - - return (1); -} diff --git a/internal/ccall/neatogen/matrix_ops.c b/internal/ccall/neatogen/matrix_ops.c deleted file mode 100644 index cc0531e..0000000 --- a/internal/ccall/neatogen/matrix_ops.c +++ /dev/null @@ -1,803 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "matrix_ops.h" -#include "memory.h" -#include -#include -#include - -static double p_iteration_threshold = 1e-3; - -int -power_iteration(double **square_mat, int n, int neigs, double **eigs, - double *evals, int initialize) -{ - /* compute the 'neigs' top eigenvectors of 'square_mat' using power iteration */ - - int i, j; - double *tmp_vec = N_GNEW(n, double); - double *last_vec = N_GNEW(n, double); - double *curr_vector; - double len; - double angle; - double alpha; - int iteration = 0; - int largest_index; - double largest_eval; - int Max_iterations = 30 * n; - - double tol = 1 - p_iteration_threshold; - - if (neigs >= n) { - neigs = n; - } - - for (i = 0; i < neigs; i++) { - curr_vector = eigs[i]; - /* guess the i-th eigen vector */ - choose: - if (initialize) - for (j = 0; j < n; j++) - curr_vector[j] = rand() % 100; - /* orthogonalize against higher eigenvectors */ - for (j = 0; j < i; j++) { - alpha = -dot(eigs[j], 0, n - 1, curr_vector); - scadd(curr_vector, 0, n - 1, alpha, eigs[j]); - } - len = norm(curr_vector, 0, n - 1); - if (len < 1e-10) { - /* We have chosen a vector colinear with prvious ones */ - goto choose; - } - vecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector); - iteration = 0; - do { - iteration++; - cpvec(last_vec, 0, n - 1, curr_vector); - - right_mult_with_vector_d(square_mat, n, n, curr_vector, - tmp_vec); - cpvec(curr_vector, 0, n - 1, tmp_vec); - - /* orthogonalize against higher eigenvectors */ - for (j = 0; j < i; j++) { - alpha = -dot(eigs[j], 0, n - 1, curr_vector); - scadd(curr_vector, 0, n - 1, alpha, eigs[j]); - } - len = norm(curr_vector, 0, n - 1); - if (len < 1e-10 || iteration > Max_iterations) { - /* We have reached the null space (e.vec. associated with e.val. 0) */ - goto exit; - } - - vecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector); - angle = dot(curr_vector, 0, n - 1, last_vec); - } while (fabs(angle) < tol); - evals[i] = angle * len; /* this is the Rayleigh quotient (up to errors due to orthogonalization): - u*(A*u)/||A*u||)*||A*u||, where u=last_vec, and ||u||=1 - */ - } - exit: - for (; i < neigs; i++) { - /* compute the smallest eigenvector, which are */ - /* probably associated with eigenvalue 0 and for */ - /* which power-iteration is dangerous */ - curr_vector = eigs[i]; - /* guess the i-th eigen vector */ - for (j = 0; j < n; j++) - curr_vector[j] = rand() % 100; - /* orthogonalize against higher eigenvectors */ - for (j = 0; j < i; j++) { - alpha = -dot(eigs[j], 0, n - 1, curr_vector); - scadd(curr_vector, 0, n - 1, alpha, eigs[j]); - } - len = norm(curr_vector, 0, n - 1); - vecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector); - evals[i] = 0; - - } - - - /* sort vectors by their evals, for overcoming possible mis-convergence: */ - for (i = 0; i < neigs - 1; i++) { - largest_index = i; - largest_eval = evals[largest_index]; - for (j = i + 1; j < neigs; j++) { - if (largest_eval < evals[j]) { - largest_index = j; - largest_eval = evals[largest_index]; - } - } - if (largest_index != i) { /* exchange eigenvectors: */ - cpvec(tmp_vec, 0, n - 1, eigs[i]); - cpvec(eigs[i], 0, n - 1, eigs[largest_index]); - cpvec(eigs[largest_index], 0, n - 1, tmp_vec); - - evals[largest_index] = evals[i]; - evals[i] = largest_eval; - } - } - - free(tmp_vec); - free(last_vec); - - return (iteration <= Max_iterations); -} - - - -void -mult_dense_mat(double **A, float **B, int dim1, int dim2, int dim3, - float ***CC) -{ -/* - A is dim1 x dim2, B is dim2 x dim3, C = A x B -*/ - - double sum; - int i, j, k; - float *storage; - float **C = *CC; - if (C != NULL) { - storage = (float *) realloc(C[0], dim1 * dim3 * sizeof(A[0])); - *CC = C = (float **) realloc(C, dim1 * sizeof(A)); - } else { - storage = (float *) malloc(dim1 * dim3 * sizeof(A[0])); - *CC = C = (float **) malloc(dim1 * sizeof(A)); - } - - for (i = 0; i < dim1; i++) { - C[i] = storage; - storage += dim3; - } - - for (i = 0; i < dim1; i++) { - for (j = 0; j < dim3; j++) { - sum = 0; - for (k = 0; k < dim2; k++) { - sum += A[i][k] * B[k][j]; - } - C[i][j] = (float) (sum); - } - } -} - -void -mult_dense_mat_d(double **A, float **B, int dim1, int dim2, int dim3, - double ***CC) -{ -/* - A is dim1 x dim2, B is dim2 x dim3, C = A x B -*/ - double **C = *CC; - double *storage; - int i, j, k; - double sum; - - if (C != NULL) { - storage = (double *) realloc(C[0], dim1 * dim3 * sizeof(double)); - *CC = C = (double **) realloc(C, dim1 * sizeof(double *)); - } else { - storage = (double *) malloc(dim1 * dim3 * sizeof(double)); - *CC = C = (double **) malloc(dim1 * sizeof(double *)); - } - - for (i = 0; i < dim1; i++) { - C[i] = storage; - storage += dim3; - } - - for (i = 0; i < dim1; i++) { - for (j = 0; j < dim3; j++) { - sum = 0; - for (k = 0; k < dim2; k++) { - sum += A[i][k] * B[k][j]; - } - C[i][j] = sum; - } - } -} - -void -mult_sparse_dense_mat_transpose(vtx_data * A, double **B, int dim1, - int dim2, float ***CC) -{ -/* - A is dim1 x dim1 and sparse, B is dim2 x dim1, C = A x B -*/ - - float *storage; - int i, j, k; - double sum; - float *ewgts; - int *edges; - int nedges; - float **C = *CC; - if (C != NULL) { - storage = (float *) realloc(C[0], dim1 * dim2 * sizeof(A[0])); - *CC = C = (float **) realloc(C, dim1 * sizeof(A)); - } else { - storage = (float *) malloc(dim1 * dim2 * sizeof(A[0])); - *CC = C = (float **) malloc(dim1 * sizeof(A)); - } - - for (i = 0; i < dim1; i++) { - C[i] = storage; - storage += dim2; - } - - for (i = 0; i < dim1; i++) { - edges = A[i].edges; - ewgts = A[i].ewgts; - nedges = A[i].nedges; - for (j = 0; j < dim2; j++) { - sum = 0; - for (k = 0; k < nedges; k++) { - sum += ewgts[k] * B[j][edges[k]]; - } - C[i][j] = (float) (sum); - } - } -} - - - -/* Copy a range of a double vector to a double vector */ -void cpvec(double *copy, int beg, int end, double *vec) -{ - int i; - - copy = copy + beg; - vec = vec + beg; - for (i = end - beg + 1; i; i--) { - *copy++ = *vec++; - } -} - -/* Returns scalar product of two double n-vectors. */ -double dot(double *vec1, int beg, int end, double *vec2) -{ - int i; - double sum; - - sum = 0.0; - vec1 = vec1 + beg; - vec2 = vec2 + beg; - for (i = end - beg + 1; i; i--) { - sum += (*vec1++) * (*vec2++); - } - return (sum); -} - - -/* Scaled add - fills double vec1 with vec1 + alpha*vec2 over range*/ -void scadd(double *vec1, int beg, int end, double fac, double *vec2) -{ - int i; - - vec1 = vec1 + beg; - vec2 = vec2 + beg; - for (i = end - beg + 1; i; i--) { - (*vec1++) += fac * (*vec2++); - } -} - -/* Scale - fills vec1 with alpha*vec2 over range, double version */ -void vecscale(double *vec1, int beg, int end, double alpha, double *vec2) -{ - int i; - - vec1 += beg; - vec2 += beg; - for (i = end - beg + 1; i; i--) { - (*vec1++) = alpha * (*vec2++); - } -} - -/* Returns 2-norm of a double n-vector over range. */ -double norm(double *vec, int beg, int end) -{ - return (sqrt(dot(vec, beg, end, vec))); -} - - -#ifndef __cplusplus - -/* inline */ -void orthog1(int n, double *vec /* vector to be orthogonalized against 1 */ - ) -{ - int i; - double *pntr; - double sum; - - sum = 0.0; - pntr = vec; - for (i = n; i; i--) { - sum += *pntr++; - } - sum /= n; - pntr = vec; - for (i = n; i; i--) { - *pntr++ -= sum; - } -} - -#define RANGE 500 - -/* inline */ -void init_vec_orth1(int n, double *vec) -{ - /* randomly generate a vector orthogonal to 1 (i.e., with mean 0) */ - int i; - - for (i = 0; i < n; i++) - vec[i] = rand() % RANGE; - - orthog1(n, vec); -} - -/* inline */ -void -right_mult_with_vector(vtx_data * matrix, int n, double *vector, - double *result) -{ - int i, j; - - double res; - for (i = 0; i < n; i++) { - res = 0; - for (j = 0; j < matrix[i].nedges; j++) - res += matrix[i].ewgts[j] * vector[matrix[i].edges[j]]; - result[i] = res; - } - /* orthog1(n,vector); */ -} - -/* inline */ -void -right_mult_with_vector_f(float **matrix, int n, double *vector, - double *result) -{ - int i, j; - - double res; - for (i = 0; i < n; i++) { - res = 0; - for (j = 0; j < n; j++) - res += matrix[i][j] * vector[j]; - result[i] = res; - } - /* orthog1(n,vector); */ -} - -/* inline */ -void -vectors_subtraction(int n, double *vector1, double *vector2, - double *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = vector1[i] - vector2[i]; - } -} - -/* inline */ -void -vectors_addition(int n, double *vector1, double *vector2, double *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = vector1[i] + vector2[i]; - } -} - -#ifdef UNUSED -/* inline */ -void -vectors_mult_addition(int n, double *vector1, double alpha, - double *vector2) -{ - int i; - for (i = 0; i < n; i++) { - vector1[i] = vector1[i] + alpha * vector2[i]; - } -} -#endif - -/* inline */ -void -vectors_scalar_mult(int n, double *vector, double alpha, double *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = vector[i] * alpha; - } -} - -/* inline */ -void copy_vector(int n, double *source, double *dest) -{ - int i; - for (i = 0; i < n; i++) - dest[i] = source[i]; -} - -/* inline */ -double vectors_inner_product(int n, double *vector1, double *vector2) -{ - int i; - double result = 0; - for (i = 0; i < n; i++) { - result += vector1[i] * vector2[i]; - } - - return result; -} - -/* inline */ -double max_abs(int n, double *vector) -{ - double max_val = -1e50; - int i; - for (i = 0; i < n; i++) - if (fabs(vector[i]) > max_val) - max_val = fabs(vector[i]); - - return max_val; -} - -#ifdef UNUSED -/* inline */ -void orthogvec(int n, double *vec1, /* vector to be orthogonalized */ - double *vec2 /* normalized vector to be orthogonalized against */ - ) -{ - double alpha; - if (vec2 == NULL) { - return; - } - - alpha = -vectors_inner_product(n, vec1, vec2); - - vectors_mult_addition(n, vec1, alpha, vec2); -} - - /* sparse matrix extensions: */ - -/* inline */ -void mat_mult_vec(vtx_data * L, int n, double *vec, double *result) -{ - /* compute result= -L*vec */ - int i, j; - double sum; - int *edges; - float *ewgts; - - for (i = 0; i < n; i++) { - sum = 0; - edges = L[i].edges; - ewgts = L[i].ewgts; - for (j = 0; j < L[i].nedges; j++) { - sum -= ewgts[j] * vec[edges[j]]; - } - result[i] = sum; - } -} -#endif - -/* inline */ -void -right_mult_with_vector_transpose(double **matrix, - int dim1, int dim2, - double *vector, double *result) -{ - /* matrix is dim2 x dim1, vector has dim2 components, result=matrix^T x vector */ - int i, j; - - double res; - for (i = 0; i < dim1; i++) { - res = 0; - for (j = 0; j < dim2; j++) - res += matrix[j][i] * vector[j]; - result[i] = res; - } -} - -/* inline */ -void -right_mult_with_vector_d(double **matrix, - int dim1, int dim2, - double *vector, double *result) -{ - /* matrix is dim1 x dim2, vector has dim2 components, result=matrix x vector */ - int i, j; - - double res; - for (i = 0; i < dim1; i++) { - res = 0; - for (j = 0; j < dim2; j++) - res += matrix[i][j] * vector[j]; - result[i] = res; - } -} - - -/***************************** -** Single precision (float) ** -** version ** -*****************************/ - -/* inline */ -void orthog1f(int n, float *vec) -{ - int i; - float *pntr; - float sum; - - sum = 0.0; - pntr = vec; - for (i = n; i; i--) { - sum += *pntr++; - } - sum /= n; - pntr = vec; - for (i = n; i; i--) { - *pntr++ -= sum; - } -} - -#ifdef UNUSED -/* inline */ -void right_mult_with_vectorf - (vtx_data * matrix, int n, float *vector, float *result) { - int i, j; - - float res; - for (i = 0; i < n; i++) { - res = 0; - for (j = 0; j < matrix[i].nedges; j++) - res += matrix[i].ewgts[j] * vector[matrix[i].edges[j]]; - result[i] = res; - } -} - -/* inline */ -void right_mult_with_vector_fd - (float **matrix, int n, float *vector, double *result) { - int i, j; - - float res; - for (i = 0; i < n; i++) { - res = 0; - for (j = 0; j < n; j++) - res += matrix[i][j] * vector[j]; - result[i] = res; - } -} -#endif - -/* inline */ -void right_mult_with_vector_ff - (float *packed_matrix, int n, float *vector, float *result) { - /* packed matrix is the upper-triangular part of a symmetric matrix arranged in a vector row-wise */ - int i, j, index; - float vector_i; - - float res; - for (i = 0; i < n; i++) { - result[i] = 0; - } - for (index = 0, i = 0; i < n; i++) { - res = 0; - vector_i = vector[i]; - /* deal with main diag */ - res += packed_matrix[index++] * vector_i; - /* deal with off diag */ - for (j = i + 1; j < n; j++, index++) { - res += packed_matrix[index] * vector[j]; - result[j] += packed_matrix[index] * vector_i; - } - result[i] += res; - } -} - -/* inline */ -void -vectors_substractionf(int n, float *vector1, float *vector2, float *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = vector1[i] - vector2[i]; - } -} - -/* inline */ -void -vectors_additionf(int n, float *vector1, float *vector2, float *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = vector1[i] + vector2[i]; - } -} - -/* inline */ -void -vectors_mult_additionf(int n, float *vector1, float alpha, float *vector2) -{ - int i; - for (i = 0; i < n; i++) { - vector1[i] = vector1[i] + alpha * vector2[i]; - } -} - -/* inline */ -void vectors_scalar_multf(int n, float *vector, float alpha, float *result) -{ - int i; - for (i = 0; i < n; i++) { - result[i] = (float) vector[i] * alpha; - } -} - -/* inline */ -void copy_vectorf(int n, float *source, float *dest) -{ - int i; - for (i = 0; i < n; i++) - dest[i] = source[i]; -} - -/* inline */ -double vectors_inner_productf(int n, float *vector1, float *vector2) -{ - int i; - double result = 0; - for (i = 0; i < n; i++) { - result += vector1[i] * vector2[i]; - } - - return result; -} - -/* inline */ -void set_vector_val(int n, double val, double *result) -{ - int i; - for (i = 0; i < n; i++) - result[i] = val; -} - -/* inline */ -void set_vector_valf(int n, float val, float* result) -{ - int i; - for (i = 0; i < n; i++) - result[i] = val; -} - -/* inline */ -double max_absf(int n, float *vector) -{ - int i; - float max_val = -1e30f; - for (i = 0; i < n; i++) - if (fabs(vector[i]) > max_val) - max_val = (float) (fabs(vector[i])); - - return max_val; -} - -/* inline */ -void square_vec(int n, float *vec) -{ - int i; - for (i = 0; i < n; i++) { - vec[i] *= vec[i]; - } -} - -/* inline */ -void invert_vec(int n, float *vec) -{ - int i; - float v; - for (i = 0; i < n; i++) { - if ((v = vec[i]) != 0.0) - vec[i] = 1.0f / v; - } -} - -/* inline */ -void sqrt_vec(int n, float *vec) -{ - int i; - double d; - for (i = 0; i < n; i++) { - /* do this in two steps to avoid a bug in gcc-4.00 on AIX */ - d = sqrt(vec[i]); - vec[i] = (float) d; - } -} - -/* inline */ -void sqrt_vecf(int n, float *source, float *target) -{ - int i; - double d; - float v; - for (i = 0; i < n; i++) { - if ((v = source[i]) >= 0.0) { - /* do this in two steps to avoid a bug in gcc-4.00 on AIX */ - d = sqrt(v); - target[i] = (float) d; - } - } -} - -/* inline */ -void invert_sqrt_vec(int n, float *vec) -{ - int i; - double d; - float v; - for (i = 0; i < n; i++) { - if ((v = vec[i]) > 0.0) { - /* do this in two steps to avoid a bug in gcc-4.00 on AIX */ - d = 1. / sqrt(v); - vec[i] = (float) d; - } - } -} - -#ifdef UNUSED -/* inline */ -void init_vec_orth1f(int n, float *vec) -{ - /* randomly generate a vector orthogonal to 1 (i.e., with mean 0) */ - int i; - - for (i = 0; i < n; i++) - vec[i] = (float) (rand() % RANGE); - - orthog1f(n, vec); -} - - - /* sparse matrix extensions: */ - -/* inline */ -void mat_mult_vecf(vtx_data * L, int n, float *vec, float *result) -{ - /* compute result= -L*vec */ - int i, j; - float sum; - int *edges; - float *ewgts; - - for (i = 0; i < n; i++) { - sum = 0; - edges = L[i].edges; - ewgts = L[i].ewgts; - for (j = 0; j < L[i].nedges; j++) { - sum -= ewgts[j] * vec[edges[j]]; - } - result[i] = sum; - } -} -#endif - -#endif diff --git a/internal/ccall/neatogen/matrix_ops.h b/internal/ccall/neatogen/matrix_ops.h deleted file mode 100644 index 191d3c9..0000000 --- a/internal/ccall/neatogen/matrix_ops.h +++ /dev/null @@ -1,108 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _MATRIX_OPS_H_ -#define _MATRIX_OPS_H_ - -#include "sparsegraph.h" - - extern void cpvec(double *, int, int, double *); - extern double dot(double *, int, int, double *); - extern void scadd(double *, int, int, double, double *); - extern void vecscale(double *, int, int, double, double *); - extern double norm(double *, int, int); - - extern void orthog1(int n, double *vec); - extern void init_vec_orth1(int n, double *vec); - extern void right_mult_with_vector(vtx_data *, int, double *, - double *); - extern void right_mult_with_vector_f(float **, int, double *, - double *); - extern void vectors_subtraction(int, double *, double *, double *); - extern void vectors_addition(int, double *, double *, double *); - extern void vectors_scalar_mult(int, double *, double, double *); - extern void copy_vector(int n, double *source, double *dest); - extern double vectors_inner_product(int n, double *vector1, - double *vector2); - extern double max_abs(int n, double *vector); -#ifdef UNUSED - extern void vectors_mult_addition(int, double *, double, double *); - extern void orthogvec(int, double *, double *); -#endif - - /* sparse matrix extensions: */ - -#ifdef UNUSED - extern void mat_mult_vec(vtx_data * L, int n, double *vec, - double *result); -#endif - extern void right_mult_with_vector_transpose - (double **, int, int, double *, double *); - extern void right_mult_with_vector_d(double **, int, int, double *, - double *); - extern void mult_dense_mat(double **, float **, int, int, int, - float ***C); - extern void mult_dense_mat_d(double **, float **, int, int, int, - double ***CC); - extern void mult_sparse_dense_mat_transpose(vtx_data *, double **, int, - int, float ***); - extern int power_iteration(double **, int, int, double **, double *, int); - - -/***************************** -** Single precision (float) ** -** version ** -*****************************/ - - extern void orthog1f(int n, float *vec); -#ifdef UNUSED - extern void right_mult_with_vectorf(vtx_data *, int, float *, float *); - extern void right_mult_with_vector_fd(float **, int, float *, - double *); -#endif - extern void right_mult_with_vector_ff(float *, int, float *, float *); - extern void vectors_substractionf(int, float *, float *, float *); - extern void vectors_additionf(int n, float *vector1, float *vector2, - float *result); - extern void vectors_mult_additionf(int n, float *vector1, float alpha, - float *vector2); - extern void vectors_scalar_multf(int n, float *vector, float alpha, - float *result); - extern void copy_vectorf(int n, float *source, float *dest); - extern double vectors_inner_productf(int n, float *vector1, - float *vector2); - extern void set_vector_val(int n, double val, double *result); - extern void set_vector_valf(int n, float val, float * result); - extern double max_absf(int n, float *vector); - extern void square_vec(int n, float *vec); - extern void invert_vec(int n, float *vec); - extern void sqrt_vec(int n, float *vec); - extern void sqrt_vecf(int n, float *source, float *target); - extern void invert_sqrt_vec(int n, float *vec); -#ifdef UNUSED - extern void init_vec_orth1f(int n, float *vec); - extern void mat_mult_vecf(vtx_data * L, int n, float *vec, - float *result); -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/mem.h b/internal/ccall/neatogen/mem.h deleted file mode 100644 index e93029b..0000000 --- a/internal/ccall/neatogen/mem.h +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef MEMORY_H -#define MEMORY_H - -#ifndef NULL -#define NULL 0 -#endif - - /* Support for freelists */ - - typedef struct freelist { - struct freenode *head; /* List of free nodes */ - struct freeblock *blocklist; /* List of malloced blocks */ - int nodesize; /* Size of node */ - } Freelist; - - extern void *getfree(Freelist *); - extern void freeinit(Freelist *, int); - extern void makefree(void *, Freelist *); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/memory.c b/internal/ccall/neatogen/memory.c deleted file mode 100644 index 5d5c4c1..0000000 --- a/internal/ccall/neatogen/memory.c +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "geometry.h" -#include "render.h" - -typedef struct freenode { - struct freenode *nextfree; -} Freenode; - -typedef struct freeblock { - struct freeblock *next; - struct freenode *nodes; -} Freeblock; - -#include "mem.h" -#include -#include - -static int gcd(int y, int x) -{ - while (x != y) { - if (y < x) - x = x - y; - else - y = y - x; - } - return x; -} - -#define LCM(x,y) ((x)%(y) == 0 ? (x) : (y)%(x) == 0 ? (y) : x*(y/gcd(x,y))) - -void freeinit(Freelist * fl, int size) -{ - - fl->head = NULL; - fl->nodesize = LCM(size, sizeof(Freenode)); - if (fl->blocklist != NULL) { - Freeblock *bp, *np; - - bp = fl->blocklist; - while (bp != NULL) { - np = bp->next; - free(bp->nodes); - free(bp); - bp = np; - } - } - fl->blocklist = NULL; -} - -void *getfree(Freelist * fl) -{ - int i; - Freenode *t; - Freeblock *mem; - - if (fl->head == NULL) { - int size = fl->nodesize; - char *cp; - - mem = GNEW(Freeblock); - mem->nodes = gmalloc(sqrt_nsites * size); - cp = (char *) (mem->nodes); - for (i = 0; i < sqrt_nsites; i++) { - makefree(cp + i * size, fl); - } - mem->next = fl->blocklist; - fl->blocklist = mem; - } - t = fl->head; - fl->head = t->nextfree; - return ((void *) t); -} - -void makefree(void *curr, Freelist * fl) -{ - ((Freenode *) curr)->nextfree = fl->head; - fl->head = (Freenode *) curr; -} diff --git a/internal/ccall/neatogen/mosek_quad_solve.c b/internal/ccall/neatogen/mosek_quad_solve.c deleted file mode 100644 index 84bc51e..0000000 --- a/internal/ccall/neatogen/mosek_quad_solve.c +++ /dev/null @@ -1,581 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -/* - * Interface to Mosek (www.mosek.com) quadratic programming solver for solving - * instances of the "Variable Placement with Separation Constraints" problem, - * and also DiG-CoLa style level constraints. - * - * Tim Dwyer, 2006 - */ -#ifdef MOSEK -#include -#include -#include "defs.h" -#include "mosek_quad_solve.h" -#include "quad_prog_vpsc.h" - -/* #define DUMP_CONSTRAINTS */ -/* #define EQUAL_WIDTH_LEVELS */ - -static FILE *logfile; -static void MSKAPI printstr(void *handle, char str[]) -{ - fprintf(logfile, "%s", str); -} - -#define INIT_sub_val(a,b) \ - MSKidxt subi[2]; \ - double vali[2]; \ - subi[0] = a; \ - subi[1] = b; \ - vali[0] = 1.0; \ - vali[1] = -1.0; - -#define INIT_sub_val3(a,b,c) \ - MSKidxt subi[3]; \ - double vali[3]; \ - subi[0] = a; \ - subi[1] = b; \ - subi[2] = c; \ - vali[0] = 1.0; \ - vali[1] = -2.0; \ - vali[2] = 1.0; - -/********************** -lap: the upper RHS of the symmetric graph laplacian matrix which will be transformed - to the hessian of the non-linear part of the optimisation function -n: number of nodes (length of coords array) -ordering: array containing sequences of nodes for each level, - ie, ordering[levels[i]] is first node of (i+1)th level -level_indexes: array of starting node for each level in ordering - ie, levels[i] is index to first node of (i+1)th level - also, levels[0] is number of nodes in first level - and, levels[i]-levels[i-1] is number of nodes in ith level - and, n - levels[num_divisions-1] is number of nodes in last level -num_divisions: number of divisions between levels, ie number of levels - 1 -separation: the minimum separation between nodes on different levels -***********************/ -MosekEnv *mosek_init_hier(float *lap, int n, int *ordering, - int *level_indexes, int num_divisions, - float separation) -{ - int count = 0; - int i, j, num_levels = num_divisions + 1; - int num_constraints; - MosekEnv *mskEnv = GNEW(MosekEnv); - DigColaLevel *levels; - int nonzero_lapsize = (n * (n - 1)) / 2; - /* vars for nodes (except x0) + dummy nodes between levels - * x0 is fixed at 0, and therefore is not included in the opt problem - * add 2 more vars for top and bottom constraints - */ - mskEnv->num_variables = n + num_divisions + 1; - - logfile = fopen("quad_solve_log", "w"); - levels = assign_digcola_levels(ordering, n, level_indexes, num_divisions); -#ifdef DUMP_CONSTRAINTS - print_digcola_levels(logfile, levels, num_levels); -#endif - - /* nonlinear coefficients matrix of objective function */ - /* int lapsize=mskEnv->num_variables+(mskEnv->num_variables*(mskEnv->num_variables-1))/2; */ - mskEnv->qval = N_GNEW(nonzero_lapsize, double); - mskEnv->qsubi = N_GNEW(nonzero_lapsize, int); - mskEnv->qsubj = N_GNEW(nonzero_lapsize, int); - - /* solution vector */ - mskEnv->xx = N_GNEW(mskEnv->num_variables, double); - - /* constraint matrix */ - separation /= 2.0; /* separation between each node and it's adjacent constraint */ - num_constraints = get_num_digcola_constraints(levels, - num_levels) + num_divisions + 1; - /* constraints of the form x_i - x_j >= sep so 2 non-zero entries per constraint in LHS matrix - * except x_0 (fixed at 0) constraints which have 1 nz val each. - */ -#ifdef EQUAL_WIDTH_LEVELS - num_constraints += num_divisions; -#endif - /* pointer to beginning of nonzero sequence in a column */ - - for (i = 0; i < n - 1; i++) { - for (j = i; j < n - 1; j++) { - mskEnv->qval[count] = -2 * lap[count + n]; - assert(mskEnv->qval[count] != 0); - mskEnv->qsubi[count] = j; - mskEnv->qsubj[count] = i; - count++; - } - } -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "Q=["); - int lapcntr = n; - for (i = 0; i < mskEnv->num_variables; i++) { - if (i != 0) - fprintf(logfile, ";"); - for (j = 0; j < mskEnv->num_variables; j++) { - if (j < i || i >= n - 1 || j >= n - 1) { - fprintf(logfile, "0 "); - } else { - fprintf(logfile, "%f ", -2 * lap[lapcntr++]); - } - } - } - fprintf(logfile, "]\nQ=Q-diag(diag(Q))+Q'\n"); -#endif - fprintf(logfile, "\n"); - /* Make the mosek environment. */ - mskEnv->r = MSK_makeenv(&mskEnv->env, NULL, NULL, NULL, NULL); - - /* Check whether the return code is ok. */ - if (mskEnv->r == MSK_RES_OK) { - /* Directs the log stream to the user - * specified procedure 'printstr'. - */ - MSK_linkfunctoenvstream(mskEnv->env, MSK_STREAM_LOG, NULL, - printstr); - } - - /* Initialize the environment. */ - mskEnv->r = MSK_initenv(mskEnv->env); - if (mskEnv->r == MSK_RES_OK) { - /* Make the optimization task. */ - mskEnv->r = - MSK_maketask(mskEnv->env, num_constraints, - mskEnv->num_variables, &mskEnv->task); - - if (mskEnv->r == MSK_RES_OK) { - int c_ind = 0; - int c_var = n - 1; - mskEnv->r = - MSK_linkfunctotaskstream(mskEnv->task, MSK_STREAM_LOG, - NULL, printstr); - /* Resize the task. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_resizetask(mskEnv->task, num_constraints, mskEnv->num_variables, 0, /* no cones!! */ - /* each constraint applies to 2 vars */ - 2 * num_constraints + - num_divisions, nonzero_lapsize); - - /* Append the constraints. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_append(mskEnv->task, 1, num_constraints); - - /* Append the variables. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = - MSK_append(mskEnv->task, 0, mskEnv->num_variables); - /* Put variable bounds. */ - for (j = 0; - j < mskEnv->num_variables && mskEnv->r == MSK_RES_OK; ++j) - mskEnv->r = - MSK_putbound(mskEnv->task, 0, j, MSK_BK_RA, - -MSK_INFINITY, MSK_INFINITY); - for (j = 0; j < levels[0].num_nodes && mskEnv->r == MSK_RES_OK; - j++) { - int node = levels[0].nodes[j] - 1; - if (node >= 0) { - INIT_sub_val(c_var,node); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 2, subi, vali); - } else { - /* constraint for y0 (fixed at 0) */ - mskEnv->r = - MSK_putaij(mskEnv->task, c_ind, c_var, 1.0); - } - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_LO, - separation, MSK_INFINITY); - c_ind++; - } - for (i = 0; i < num_divisions && mskEnv->r == MSK_RES_OK; i++) { - c_var = n + i; - for (j = 0; - j < levels[i].num_nodes && mskEnv->r == MSK_RES_OK; - j++) { - /* create separation constraint a>=b+separation */ - int node = levels[i].nodes[j] - 1; - if (node >= 0) { /* no constraint for fixed node */ - INIT_sub_val(node,c_var); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 2, subi, - vali); - } else { - /* constraint for y0 (fixed at 0) */ - mskEnv->r = - MSK_putaij(mskEnv->task, c_ind, c_var, -1.0); - } - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_LO, - separation, MSK_INFINITY); - c_ind++; - } - for (j = 0; - j < levels[i + 1].num_nodes - && mskEnv->r == MSK_RES_OK; j++) { - int node = levels[i + 1].nodes[j] - 1; - if (node >= 0) { - INIT_sub_val(c_var,node); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 2, subi, - vali); - } else { - /* constraint for y0 (fixed at 0) */ - mskEnv->r = - MSK_putaij(mskEnv->task, c_ind, c_var, 1.0); - } - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_LO, - separation, MSK_INFINITY); - c_ind++; - } - } - c_var = n + i; - for (j = 0; j < levels[i].num_nodes && mskEnv->r == MSK_RES_OK; - j++) { - /* create separation constraint a>=b+separation */ - int node = levels[i].nodes[j] - 1; - if (node >= 0) { /* no constraint for fixed node */ - INIT_sub_val(node,c_var); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 2, subi, vali); - } else { - /* constraint for y0 (fixed at 0) */ - mskEnv->r = - MSK_putaij(mskEnv->task, c_ind, c_var, -1.0); - } - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_LO, - separation, MSK_INFINITY); - c_ind++; - } - /* create constraints preserving the order of dummy vars */ - for (i = 0; i < num_divisions + 1 && mskEnv->r == MSK_RES_OK; - i++) { - int c_var = n - 1 + i, c_var2 = c_var + 1; - INIT_sub_val(c_var,c_var2); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 2, subi, vali); - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_LO, 0, - MSK_INFINITY); - c_ind++; - } -#ifdef EQUAL_WIDTH_LEVELS - for (i = 1; i < num_divisions + 1 && mskEnv->r == MSK_RES_OK; - i++) { - int c_var = n - 1 + i, c_var_lo = c_var - 1, c_var_hi = - c_var + 1; - INIT_sub_val3(c_var_lo, c_var, c_var_h); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, c_ind, 3, subi, vali); - mskEnv->r = - MSK_putbound(mskEnv->task, 1, c_ind, MSK_BK_FX, 0, 0); - c_ind++; - } -#endif - assert(c_ind == num_constraints); -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "A=["); - for (i = 0; i < num_constraints; i++) { - if (i != 0) - fprintf(logfile, ";"); - for (j = 0; j < mskEnv->num_variables; j++) { - double aij; - MSK_getaij(mskEnv->task, i, j, &aij); - fprintf(logfile, "%f ", aij); - } - } - fprintf(logfile, "]\n"); - fprintf(logfile, "b=["); - for (i = 0; i < num_constraints; i++) { - fprintf(logfile, "%f ", separation); - } - fprintf(logfile, "]\n"); -#endif - if (mskEnv->r == MSK_RES_OK) { - /* - * The lower triangular part of the Q - * matrix in the objective is specified. - */ - mskEnv->r = - MSK_putqobj(mskEnv->task, nonzero_lapsize, - mskEnv->qsubi, mskEnv->qsubj, - mskEnv->qval); - } - } - } - delete_digcola_levels(levels, num_levels); - return mskEnv; -} - -/* -b: coefficients of linear part of optimisation function -n: number of nodes -coords: optimal y* vector, coord[i] is coordinate of node[i] -hierarchy_boundaries: y coord of boundaries between levels - (ie, solution values for the dummy variables used in constraints) -*/ -void mosek_quad_solve_hier(MosekEnv * mskEnv, float *b, int n, - float *coords, float *hierarchy_boundaries) -{ - int i, j; - for (i = 1; i < n && mskEnv->r == MSK_RES_OK; i++) { - mskEnv->r = MSK_putcj(mskEnv->task, i - 1, -2 * b[i]); - } -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "x0=["); - for (j = 0; j < mskEnv->num_variables; j++) { - fprintf(logfile, "%f ", j < n ? b[j] : 0); - } - fprintf(logfile, "]\n"); - fprintf(logfile, "f=["); - double *c = N_GNEW(mskEnv->num_variables, double); - MSK_getc(mskEnv->task, c); - for (j = 0; j < mskEnv->num_variables; j++) { - fprintf(logfile, "%f ", c[j]); - } - free(c); - fprintf(logfile, "]\n"); -#endif - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_optimize(mskEnv->task); - - if (mskEnv->r == MSK_RES_OK) { - MSK_getsolutionslice(mskEnv->task, - MSK_SOL_ITR, - MSK_SOL_ITEM_XX, - 0, mskEnv->num_variables, mskEnv->xx); - -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "Primal solution\n"); -#endif - coords[0] = 0; - for (j = 0; j < mskEnv->num_variables; ++j) { -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "x[%d]: %.2f\n", j, mskEnv->xx[j]); -#endif - if (j < n - 1) { - coords[j + 1] = -mskEnv->xx[j]; - } else if (j >= n && j < mskEnv->num_variables - 1) { - hierarchy_boundaries[j - n] = -mskEnv->xx[j]; - } - } - } - fprintf(logfile, "Return code: %d\n", mskEnv->r); -} - -/********************** -lap: the upper RHS of the symmetric graph laplacian matrix which will be transformed - to the hessian of the non-linear part of the optimisation function - has dimensions num_variables, dummy vars do not have entries in lap -cs: array of pointers to separation constraints -***********************/ -MosekEnv *mosek_init_sep(float *lap, int num_variables, int num_dummy_vars, - Constraint ** cs, int num_constraints) -{ - int i, j; - MosekEnv *mskEnv = GNEW(MosekEnv); - int count = 0; - int nonzero_lapsize = num_variables * (num_variables - 1) / 2; - /* fix var 0 */ - mskEnv->num_variables = num_variables + num_dummy_vars - 1; - - fprintf(stderr, "MOSEK!\n"); - logfile = fopen("quad_solve_log", "w"); - - /* nonlinear coefficients matrix of objective function */ - mskEnv->qval = N_GNEW(nonzero_lapsize, double); - mskEnv->qsubi = N_GNEW(nonzero_lapsize, int); - mskEnv->qsubj = N_GNEW(nonzero_lapsize, int); - - /* solution vector */ - mskEnv->xx = N_GNEW(mskEnv->num_variables, double); - - /* pointer to beginning of nonzero sequence in a column */ - - for (i = 0; i < num_variables - 1; i++) { - for (j = i; j < num_variables - 1; j++) { - mskEnv->qval[count] = -2 * lap[count + num_variables]; - /* assert(mskEnv->qval[count]!=0); */ - mskEnv->qsubi[count] = j; - mskEnv->qsubj[count] = i; - count++; - } - } -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "Q=["); - count = 0; - for (i = 0; i < num_variables - 1; i++) { - if (i != 0) - fprintf(logfile, ";"); - for (j = 0; j < num_variables - 1; j++) { - if (j < i) { - fprintf(logfile, "0 "); - } else { - fprintf(logfile, "%f ", -2 * lap[num_variables + count++]); - } - } - } - fprintf(logfile, "]\nQ=Q-diag(diag(Q))+Q'\n"); -#endif - /* Make the mosek environment. */ - mskEnv->r = MSK_makeenv(&mskEnv->env, NULL, NULL, NULL, NULL); - - /* Check whether the return code is ok. */ - if (mskEnv->r == MSK_RES_OK) { - /* Directs the log stream to the user - specified procedure 'printstr'. */ - MSK_linkfunctoenvstream(mskEnv->env, MSK_STREAM_LOG, NULL, - printstr); - } - - /* Initialize the environment. */ - mskEnv->r = MSK_initenv(mskEnv->env); - if (mskEnv->r == MSK_RES_OK) { - /* Make the optimization task. */ - mskEnv->r = - MSK_maketask(mskEnv->env, num_constraints, - mskEnv->num_variables, &mskEnv->task); - - if (mskEnv->r == MSK_RES_OK) { - mskEnv->r = - MSK_linkfunctotaskstream(mskEnv->task, MSK_STREAM_LOG, - NULL, printstr); - /* Resize the task. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_resizetask(mskEnv->task, num_constraints, mskEnv->num_variables, 0, /* no cones!! */ - /* number of non-zero constraint matrix entries: - * each constraint applies to 2 vars - */ - 2 * num_constraints, - nonzero_lapsize); - - /* Append the constraints. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_append(mskEnv->task, 1, num_constraints); - - /* Append the variables. */ - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = - MSK_append(mskEnv->task, 0, mskEnv->num_variables); - /* Put variable bounds. */ - for (j = 0; - j < mskEnv->num_variables && mskEnv->r == MSK_RES_OK; j++) - mskEnv->r = - MSK_putbound(mskEnv->task, 0, j, MSK_BK_RA, - -MSK_INFINITY, MSK_INFINITY); - for (i = 0; i < num_constraints; i++) { - int u = getLeftVarID(cs[i]) - 1; - int v = getRightVarID(cs[i]) - 1; - double separation = getSeparation(cs[i]); - if (u < 0) { - mskEnv->r = - MSK_putbound(mskEnv->task, 0, v, MSK_BK_RA, - -MSK_INFINITY, -separation); - assert(mskEnv->r == MSK_RES_OK); - } else if (v < 0) { - mskEnv->r = - MSK_putbound(mskEnv->task, 0, u, MSK_BK_RA, - separation, MSK_INFINITY); - assert(mskEnv->r == MSK_RES_OK); - } else { - /* fprintf(stderr,"u=%d,v=%d,sep=%f\n",u,v,separation); */ - INIT_sub_val(u,v); - mskEnv->r = - MSK_putavec(mskEnv->task, 1, i, 2, subi, vali); - assert(mskEnv->r == MSK_RES_OK); - mskEnv->r = - MSK_putbound(mskEnv->task, 1, i, MSK_BK_LO, - separation, MSK_INFINITY); - assert(mskEnv->r == MSK_RES_OK); - } - } - if (mskEnv->r == MSK_RES_OK) { - /* - * The lower triangular part of the Q - * matrix in the objective is specified. - */ - mskEnv->r = - MSK_putqobj(mskEnv->task, nonzero_lapsize, - mskEnv->qsubi, mskEnv->qsubj, - mskEnv->qval); - assert(mskEnv->r == MSK_RES_OK); - } - } - } - return mskEnv; -} - -/* -n: size of b and coords, may be smaller than mskEnv->num_variables if we -have dummy vars -b: coefficients of linear part of optimisation function -coords: optimal y* vector, coord[i] is coordinate of node[i] -*/ -void mosek_quad_solve_sep(MosekEnv * mskEnv, int n, float *b, - float *coords) -{ - int i, j; - assert(n <= mskEnv->num_variables + 1); - for (i = 0; i < n - 1 && mskEnv->r == MSK_RES_OK; i++) { - mskEnv->r = MSK_putcj(mskEnv->task, i, -2 * b[i + 1]); - } - if (mskEnv->r == MSK_RES_OK) - mskEnv->r = MSK_optimize(mskEnv->task); - - if (mskEnv->r == MSK_RES_OK) { - MSK_getsolutionslice(mskEnv->task, - MSK_SOL_ITR, - MSK_SOL_ITEM_XX, - 0, mskEnv->num_variables, mskEnv->xx); - -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "Primal solution\n"); -#endif - coords[0] = 0; - for (j = 1; j <= n; j++) { -#ifdef DUMP_CONSTRAINTS - fprintf(logfile, "x[%d]: %.2f\n", j, mskEnv->xx[j - 1]); -#endif - coords[j] = -mskEnv->xx[j - 1]; - } - } - fprintf(logfile, "Return code: %d\n", mskEnv->r); -} - -/* -please call to clean up -*/ -void mosek_delete(MosekEnv * mskEnv) -{ - MSK_deletetask(&mskEnv->task); - MSK_deleteenv(&mskEnv->env); - - if (logfile) { - fclose(logfile); - logfile = NULL; - } - free(mskEnv->qval); - free(mskEnv->qsubi); - free(mskEnv->qsubj); - free(mskEnv->xx); - free(mskEnv); -} -#endif /* MOSEK */ diff --git a/internal/ccall/neatogen/mosek_quad_solve.h b/internal/ccall/neatogen/mosek_quad_solve.h deleted file mode 100644 index 37a35b2..0000000 --- a/internal/ccall/neatogen/mosek_quad_solve.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#ifdef MOSEK -#ifndef _QSOLVE_H_ -#define _QSOLVE_H_ - -#include /* Include the MOSEK definition file. */ -#include "types.h" -#include - -typedef struct { - int r; - MSKenv_t env; - MSKtask_t task; - double *qval; - int *qsubi,*qsubj; - double *xx; - int num_variables; -} MosekEnv; - -MosekEnv* mosek_init_hier(float* lap, int n,int *ordering,int *level_indexes,int num_divisions, float separation); -void mosek_quad_solve_hier(MosekEnv*,float *b,int n,float* coords, float *hierarchy_boundaries); -MosekEnv* mosek_init_sep(float* lap, int nv, int ndv, Constraint** cs, int m); -void mosek_quad_solve_sep(MosekEnv*,int n,float *b,float* coords); -void mosek_delete(MosekEnv*); - - -#endif /* _QSOLVE_H_ */ -#endif /* MOSEK */ diff --git a/internal/ccall/neatogen/multispline.c b/internal/ccall/neatogen/multispline.c deleted file mode 100644 index 730dc4c..0000000 --- a/internal/ccall/neatogen/multispline.c +++ /dev/null @@ -1,1391 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include - - -static boolean _spline_merge(node_t * n) -{ - return FALSE; -} - -static boolean _swap_ends_p(edge_t * e) -{ - return FALSE; -} - -static splineInfo _sinfo = { _swap_ends_p, _spline_merge }; - -typedef struct { - int i, j; -} ipair; - -typedef struct _tri { - ipair v; - struct _tri *nxttri; -} tri; - -typedef struct { - Ppoly_t poly; /* base polygon used for routing an edge */ - tri **triMap; /* triMap[j] is list of all opposite sides of - triangles containing vertex j, represented - as the indices of the two points in poly */ -} tripoly_t; - -/* - * Support for map from I x I -> I - */ -typedef struct { - Dtlink_t link; /* cdt data */ - int a[2]; /* key */ - int t; -} item; - -static int cmpItem(Dt_t * d, int p1[], int p2[], Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - - if (p1[0] < p2[0]) - return -1; - else if (p1[0] > p2[0]) - return 1; - else if (p1[1] < p2[1]) - return -1; - else if (p1[1] > p2[1]) - return 1; - else - return 0; -} - -/* newItem: - */ -static void *newItem(Dt_t * d, item * objp, Dtdisc_t * disc) -{ - item *newp = NEW(item); - - NOTUSED(disc); - newp->a[0] = objp->a[0]; - newp->a[1] = objp->a[1]; - newp->t = objp->t; - - return newp; -} - -static void freeItem(Dt_t * d, item * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static Dtdisc_t itemdisc = { - offsetof(item, a), - 2 * sizeof(int), - offsetof(item, link), - (Dtmake_f) newItem, - (Dtfree_f) freeItem, - (Dtcompar_f) cmpItem, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -static void addMap(Dt_t * map, int a, int b, int t) -{ - item it; - int tmp; - if (a > b) { - tmp = a; - a = b; - b = tmp; - } - it.a[0] = a; - it.a[1] = b; - it.t = t; - dtinsert(map, &it); -} - -/* mapSegToTri: - * Create mapping from indices of side endpoints to triangle id - * We use a set rather than a bag because the segments used for lookup - * will always be a side of a polygon and hence have a unique triangle. - */ -static Dt_t *mapSegToTri(surface_t * sf) -{ - Dt_t *map = dtopen(&itemdisc, Dtoset); - int i, a, b, c; - int *ps = sf->faces; - for (i = 0; i < sf->nfaces; i++) { - a = *ps++; - b = *ps++; - c = *ps++; - addMap(map, a, b, i); - addMap(map, b, c, i); - addMap(map, c, a, i); - } - return map; -} - -static int findMap(Dt_t * map, int a, int b) -{ - item it; - item *ip; - if (a > b) { - int tmp = a; - a = b; - b = tmp; - } - it.a[0] = a; - it.a[1] = b; - ip = (item *) dtsearch(map, &it); - assert(ip); - return ip->t; -} - -/* - * Support for map from I -> I - */ - -typedef struct { - Dtlink_t link; /* cdt data */ - int i; /* key */ - int j; -} Ipair; - -static int cmpIpair(Dt_t * d, int *p1, int *p2, Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - - return (*p1 - *p2); -} - -static void *newIpair(Dt_t * d, Ipair * objp, Dtdisc_t * disc) -{ - Ipair *newp = NEW(Ipair); - - NOTUSED(disc); - newp->i = objp->i; - newp->j = objp->j; - - return newp; -} - -static void freeIpair(Dt_t * d, Ipair * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static Dtdisc_t ipairdisc = { - offsetof(Ipair, i), - sizeof(int), - offsetof(Ipair, link), - (Dtmake_f) newIpair, - (Dtfree_f) freeIpair, - (Dtcompar_f) cmpIpair, - NIL(Dthash_f), - NIL(Dtmemory_f), - NIL(Dtevent_f) -}; - -static void vmapAdd(Dt_t * map, int i, int j) -{ - Ipair obj; - obj.i = i; - obj.j = j; - dtinsert(map, &obj); -} - -static int vMap(Dt_t * map, int i) -{ - Ipair *ip; - ip = (Ipair *) dtmatch(map, &i); - return ip->j; -} - -/* mapTri: - * Map vertex indices from router_t to tripoly_t coordinates. - */ -static void mapTri(Dt_t * map, tri * tp) -{ - for (; tp; tp = tp->nxttri) { - tp->v.i = vMap(map, tp->v.i); - tp->v.j = vMap(map, tp->v.j); - } -} - -/* addTri: - */ -static tri * -addTri(int i, int j, tri * oldp) -{ - tri *tp = NEW(tri); - tp->v.i = i; - tp->v.j = j; - tp->nxttri = oldp; - return tp; -} - -/* bisect: - * Return the angle bisecting the angle pp--cp--np - */ -static double _bisect(pointf pp, pointf cp, pointf np) -{ - double theta, phi; - theta = atan2(np.y - cp.y, np.x - cp.x); - phi = atan2(pp.y - cp.y, pp.x - cp.x); - return (theta + phi) / 2.0; -} - -/* raySeg: - * Check if ray v->w intersects segment a--b. - */ -static int raySeg(pointf v, pointf w, pointf a, pointf b) -{ - int wa = wind(v, w, a); - int wb = wind(v, w, b); - if (wa == wb) - return 0; - if (wa == 0) { - return (wind(v, b, w) * wind(v, b, a) >= 0); - } else { - return (wind(v, a, w) * wind(v, a, b) >= 0); - } -} - -/* raySegIntersect: - * Find the point p where ray v->w intersects segment ai-bi, if any. - * Return 1 on success, 0 on failure - */ -static int -raySegIntersect(pointf v, pointf w, pointf a, pointf b, pointf * p) -{ - if (raySeg(v, w, a, b)) - return line_intersect(v, w, a, b, p); - else - return 0; -} - -#ifdef DEVDBG -#include -#endif - -/* triPoint: - * Given the triangle vertex v, and point w so that v->w points - * into the polygon, return where the ray v->w intersects the - * polygon. The search uses all of the opposite sides of triangles - * with v as vertex. - * Return 0 on success; 1 on failure. - */ -static int -triPoint(tripoly_t * trip, int vx, pointf v, pointf w, pointf * ip) -{ - tri *tp; - - for (tp = trip->triMap[vx]; tp; tp = tp->nxttri) { - if (raySegIntersect - (v, w, trip->poly.ps[tp->v.i], trip->poly.ps[tp->v.j], ip)) - return 0; - } -#ifdef DEVDBG - psInit(); - psComment ("Failure in triPoint"); - psColor("0 0 1"); - psSeg (v, w); - for (tp = trip->triMap[vx]; tp; tp = tp->nxttri) { - psTri(v, trip->poly.ps[tp->v.i], trip->poly.ps[tp->v.j]); - } - psOut(stderr); -#endif - return 1; -} - -/* ctrlPtIdx: - * Find the index of v in the points polys->ps. - * We start at 1 since the point corresponding to 0 - * will never be used as v. - */ -static int ctrlPtIdx(pointf v, Ppoly_t * polys) -{ - pointf w; - int i; - for (i = 1; i < polys->pn; i++) { - w = polys->ps[i]; - if ((w.x == v.x) && (w.y == v.y)) - return i; - } - return -1; -} - -#define SEP 15 - -/* mkCtrlPts: - * Generate mult points associated with v. - * The points will lie on the ray bisecting the angle prev--v--nxt. - * The first point will aways be v. - * The rest are positioned equally spaced with maximum spacing SEP. - * In addition, they all lie within the polygon trip->poly. - * Parameter s gives the index after which a vertex lies on the - * opposite side. This is necessary to get the "curvature" of the - * path correct. - */ -static pointf *mkCtrlPts(int s, int mult, pointf prev, pointf v, - pointf nxt, tripoly_t * trip) -{ - pointf *ps; - int idx = ctrlPtIdx(v, &(trip->poly)); - int i; - double d, sep, theta, sinTheta, cosTheta; - pointf q, w; - - if (idx < 0) - return NULL; - - ps = N_GNEW(mult, pointf); - theta = _bisect(prev, v, nxt); - sinTheta = sin(theta); - cosTheta = cos(theta); - w.x = v.x + 100 * cosTheta; - w.y = v.y + 100 * sinTheta; - if (idx > s) { - if (wind(prev, v, w) != 1) { - sinTheta *= -1; - cosTheta *= -1; - w.x = v.x + 100 * cosTheta; - w.y = v.y + 100 * sinTheta; - } - } else if (wind(prev, v, w) != -1) { - sinTheta *= -1; - cosTheta *= -1; - w.x = v.x + 100 * cosTheta; - w.y = v.y + 100 * sinTheta; - } - - if (triPoint(trip, idx, v, w, &q)) { - return 0; - } - - d = DIST(q, v); - if (d >= mult * SEP) - sep = SEP; - else - sep = d / mult; - if (idx < s) { - for (i = 0; i < mult; i++) { - ps[i].x = v.x + i * sep * cosTheta; - ps[i].y = v.y + i * sep * sinTheta; - } - } else { - for (i = 0; i < mult; i++) { - ps[mult - i - 1].x = v.x + i * sep * cosTheta; - ps[mult - i - 1].y = v.y + i * sep * sinTheta; - } - } - return ps; -} - -/* - * Simple graph structure for recording the triangle graph. - */ - -typedef struct { - int ne; /* no. of edges. */ - int *edges; /* indices of edges adjacent to node. */ - pointf ctr; /* center of triangle. */ -} tnode; - -typedef struct { - int t, h; /* indices of head and tail nodes */ - ipair seg; /* indices of points forming shared segment */ - double dist; /* length of edge; usually distance between centers */ -} tedge; - -typedef struct { - tnode *nodes; - tedge *edges; - int nedges; /* no. of edges; no. of nodes is stored in router_t */ -} tgraph; - -struct router_s { - int pn; /* no. of points */ - pointf *ps; /* all points in configuration */ - int *obs; /* indices in obstacle i are obs[i]...obs[i+1]-1 */ - int *tris; /* indices of triangle i are tris[3*i]...tris[3*i+2] */ - Dt_t *trimap; /* map from obstacle side (a,b) to index of adj. triangle */ - int tn; /* no. of nodes in tg */ - tgraph *tg; /* graph of triangles */ -}; - -/* triCenter: - * Given an array of points and 3 integer indices, - * compute and return the center of the triangle. - */ -static pointf triCenter(pointf * pts, int *idxs) -{ - pointf a = pts[*idxs++]; - pointf b = pts[*idxs++]; - pointf c = pts[*idxs++]; - pointf p; - p.x = (a.x + b.x + c.x) / 3.0; - p.y = (a.y + b.y + c.y) / 3.0; - return p; -} - -#define MARGIN 32 - -/* bbox: - * Compute bounding box of polygons, and return it - * with an added margin of MARGIN. - * Store total number of points in *np. - */ -static boxf _bbox(Ppoly_t** obsp, int npoly, int *np) -{ - boxf bb; - int i, j, cnt = 0; - pointf p; - Ppoly_t* obs; - - bb.LL.x = bb.LL.y = MAXDOUBLE; - bb.UR.x = bb.UR.y = -MAXDOUBLE; - - for (i = 0; i < npoly; i++) { - obs = *obsp++; - for (j = 0; j < obs->pn; j++) { - p = obs->ps[j]; - if (p.x < bb.LL.x) - bb.LL.x = p.x; - if (p.x > bb.UR.x) - bb.UR.x = p.x; - if (p.y < bb.LL.y) - bb.LL.y = p.y; - if (p.y > bb.UR.y) - bb.UR.y = p.y; - cnt++; - } - } - - *np = cnt; - - bb.LL.x -= MARGIN; - bb.LL.y -= MARGIN; - bb.UR.x += MARGIN; - bb.UR.y += MARGIN; - - return bb; -} - -static int *mkTriIndices(surface_t * sf) -{ - int *tris = N_GNEW(3 * sf->nfaces, int); - memcpy(tris, sf->faces, 3 * sf->nfaces * sizeof(int)); - return tris; -} - -/* degT: - * Given a pointer to an array of 3 integers, return - * the number not equal to -1 - */ -static int degT(int *ip) -{ - ip++; - if (*ip++ == -1) - return 1; - if (*ip == -1) - return 2; - else - return 3; -} - -/* sharedEdge: - * Returns a pair of integer (x,y), x < y, where x and y are the - * indices of the two vertices of the shared edge. - */ -static ipair sharedEdge(int *p, int *q) -{ - ipair pt; - int tmp, p1, p2; - p1 = *p; - p2 = *(p + 1); - if (p1 == *q) { - if ((p2 != *(q + 1)) && (p2 != *(q + 2))) { - p2 = *(p + 2); - } - } else if (p1 == *(q + 1)) { - if ((p2 != *q) && (p2 != *(q + 2))) { - p2 = *(p + 2); - } - } else if (p1 == *(q + 2)) { - if ((p2 != *q) && (p2 != *(q + 1))) { - p2 = *(p + 2); - } - } else { - p1 = *(p + 2); - } - - if (p1 > p2) { - tmp = p1; - p1 = p2; - p2 = tmp; - } - pt.i = p1; - pt.j = p2; - return pt; -} - -/* addTriEdge: - * Add an edge to g, with tail t, head h, distance d, and shared - * segment seg. - */ -static void addTriEdge(tgraph * g, int t, int h, double d, ipair seg) -{ - tedge *ep = g->edges + g->nedges; - tnode *tp = g->nodes + t; - tnode *hp = g->nodes + h; - - ep->t = t; - ep->h = h; - ep->dist = DIST(tp->ctr, hp->ctr); - ep->seg = seg; - - tp->edges[tp->ne++] = g->nedges; - hp->edges[hp->ne++] = g->nedges; - - g->nedges++; -} - -static void freeTriGraph(tgraph * tg) -{ - free(tg->nodes->edges); - free(tg->nodes); - free(tg->edges); - free(tg); -} - -/* mkTriGraph: - * Generate graph with triangles as nodes and an edge iff two triangles - * share an edge. - */ -static tgraph *mkTriGraph(surface_t * sf, int maxv, pointf * pts) -{ - tgraph *g; - tnode *np; - int j, i, ne = 0; - int *edgei; - int *jp; - - /* ne is twice no. of edges */ - for (i = 0; i < 3 * sf->nfaces; i++) - if (sf->neigh[i] != -1) - ne++; - - g = GNEW(tgraph); - - /* plus 2 for nodes added as endpoints of an edge */ - g->nodes = N_GNEW(sf->nfaces + 2, tnode); - - /* allow 1 possible extra edge per triangle, plus - * obstacles can have at most maxv triangles touching - */ - edgei = N_GNEW(sf->nfaces + ne + 2 * maxv, int); - g->edges = N_GNEW(ne/2 + 2 * maxv, tedge); - g->nedges = 0; - - for (i = 0; i < sf->nfaces; i++) { - np = g->nodes + i; - np->ne = 0; - np->edges = edgei; - np->ctr = triCenter(pts, sf->faces + 3 * i); - edgei += degT(sf->neigh + 3 * i) + 1; - } - /* initialize variable nodes */ - np = g->nodes + i; - np->ne = 0; - np->edges = edgei; - np++; - np->ne = 0; - np->edges = edgei + maxv; - - for (i = 0; i < sf->nfaces; i++) { - np = g->nodes + i; - jp = sf->neigh + 3 * i; - ne = 0; - while ((ne < 3) && ((j = *jp++) != -1)) { - if (i < j) { - double dist = DIST(np->ctr, (g->nodes + j)->ctr); - ipair seg = - sharedEdge(sf->faces + 3 * i, sf->faces + 3 * j); - addTriEdge(g, i, j, dist, seg); - } - ne++; - } - } - - return g; -} - -void freeRouter(router_t * rtr) -{ - free(rtr->ps); - free(rtr->obs); - free(rtr->tris); - dtclose(rtr->trimap); - freeTriGraph(rtr->tg); - free(rtr); -} - -#ifdef DEVDBG -static void -prTriPoly (tripoly_t *poly, int si, int ei) -{ - FILE* fp = fopen ("dumppoly","w"); - - psInit(); - psPoly (&(poly->poly)); - psPoint (poly->poly.ps[si]); - psPoint (poly->poly.ps[ei]); - psOut(fp); - fclose(fp); -} - -static void -prTriGraph (router_t* rtr, int n) -{ - FILE* fp = fopen ("dump","w"); - int i; - pointf* pts = rtr->ps; - tnode* nodes = rtr->tg->nodes; - char buf[BUFSIZ]; - - psInit(); - for (i=0;i < rtr->tn; i++) { - pointf a = pts[rtr->tris[3*i]]; - pointf b = pts[rtr->tris[3*i+1]]; - pointf c = pts[rtr->tris[3*i+2]]; - psTri (a, b,c); - sprintf (buf, "%d", i); - psTxt (buf, nodes[i].ctr); - } - for (i=rtr->tn;i < n; i++) { - sprintf (buf, "%d", i); - psTxt (buf, nodes[i].ctr); - } - psColor ("1 0 0"); - for (i=0;i < rtr->tg->nedges; i++) { - tedge* e = rtr->tg->edges+i; - psSeg (nodes[e->t].ctr, nodes[e->h].ctr); - } - psOut(fp); - fclose(fp); -} -#endif - -router_t *mkRouter(Ppoly_t** obsp, int npoly) -{ - router_t *rtr = NEW(router_t); - Ppoly_t* obs; - boxf bb; - pointf *pts; - int npts; - surface_t *sf; - int *segs; - double *x; - double *y; - int maxv = 4; /* default max. no. of vertices in an obstacle; set below */ - /* points in obstacle i have indices obsi[i] through obsi[i+1]-1 in pts - */ - int *obsi = N_NEW(npoly + 1, int); - int i, j, ix = 4, six = 0; - - bb = _bbox(obsp, npoly, &npts); - npts += 4; /* 4 points of bounding box */ - pts = N_GNEW(npts, pointf); /* all points are stored in pts */ - segs = N_GNEW(2 * npts, int); /* indices of points forming segments */ - - /* store bounding box in CCW order */ - pts[0] = bb.LL; - pts[1].x = bb.UR.x; - pts[1].y = bb.LL.y; - pts[2] = bb.UR; - pts[3].x = bb.LL.x; - pts[3].y = bb.UR.y; - for (i = 1; i <= 4; i++) { - segs[six++] = i - 1; - if (i < 4) - segs[six++] = i; - else - segs[six++] = 0; - } - - /* store obstacles in CW order and generate constraint segments */ - for (i = 0; i < npoly; i++) { - obsi[i] = ix; - obs = *obsp++; - for (j = 1; j <= obs->pn; j++) { - segs[six++] = ix; - if (j < obs->pn) - segs[six++] = ix + 1; - else - segs[six++] = obsi[i]; - pts[ix++] = obs->ps[j - 1]; - } - if (obs->pn > maxv) - maxv = obs->pn; - } - obsi[i] = ix; - - /* copy points into coordinate arrays */ - x = N_GNEW(npts, double); - y = N_GNEW(npts, double); - for (i = 0; i < npts; i++) { - x[i] = pts[i].x; - y[i] = pts[i].y; - } - sf = mkSurface(x, y, npts, segs, npts); - free(x); - free(y); - free(segs); - - rtr->ps = pts; - rtr->pn = npts; - rtr->obs = obsi; - rtr->tris = mkTriIndices(sf); - rtr->trimap = mapSegToTri(sf); - rtr->tn = sf->nfaces; - rtr->tg = mkTriGraph(sf, maxv, pts); - - freeSurface(sf); - return rtr; -} - -/* finishEdge: - * Finish edge generation, clipping to nodes and adding arrowhead - * if necessary, and adding edge labels - */ -static void -finishEdge (graph_t* g, edge_t* e, Ppoly_t spl, int flip, pointf p, pointf q) -{ - int j; - pointf *spline = N_GNEW(spl.pn, pointf); - pointf p1, q1; - - if (flip) { - for (j = 0; j < spl.pn; j++) { - spline[spl.pn - 1 - j] = spl.ps[j]; - } - p1 = q; - q1 = p; - } - else { - for (j = 0; j < spl.pn; j++) { - spline[j] = spl.ps[j]; - } - p1 = p; - q1 = q; - } - if (Verbose > 1) - fprintf(stderr, "spline %s %s\n", agnameof(agtail(e)), agnameof(aghead(e))); - clip_and_install(e, aghead(e), spline, spl.pn, &_sinfo); - free(spline); - - addEdgeLabels(g, e, p1, q1); -} - -#define EQPT(p,q) (((p).x==(q).x)&&((p).y==(q).y)) - -/* tweakEnd: - * Hack because path routing doesn't know about the interiors - * of polygons. If the first or last segment of the shortest path - * lies along one of the polygon boundaries, the path may flip - * inside the polygon. To avoid this, we shift the point a bit. - * - * If the edge p(=poly.ps[s])-q of the shortest path is also an - * edge of the border polygon, move p slightly inside the polygon - * and return it. If prv and nxt are the two vertices adjacent to - * p in the polygon, let m be the midpoint of prv--nxt. We then - * move a tiny bit along the ray p->m. - * - * Otherwise, return p unchanged. - */ -static Ppoint_t -tweakEnd (Ppoly_t poly, int s, Ppolyline_t pl, Ppoint_t q) -{ - Ppoint_t prv, nxt, p; - - p = poly.ps[s]; - nxt = poly.ps[(s + 1) % poly.pn]; - if (s == 0) - prv = poly.ps[poly.pn-1]; - else - prv = poly.ps[s - 1]; - if (EQPT(q, nxt) || EQPT(q, prv) ){ - Ppoint_t m; - double d; - m.x = (nxt.x + prv.x)/2.0 - p.x; - m.y = (nxt.y + prv.y)/2.0 - p.y; - d = LEN(m.x,m.y); - p.x += 0.1*m.x/d; - p.y += 0.1*m.y/d; - } - return p; -} - -static void -tweakPath (Ppoly_t poly, int s, int t, Ppolyline_t pl) -{ - pl.ps[0] = tweakEnd (poly, s, pl, pl.ps[1]); - pl.ps[pl.pn-1] = tweakEnd (poly, t, pl, pl.ps[pl.pn-2]); -} - - -/* genroute: - * Generate splines for e and cohorts. - * Edges go from s to t. - * Return 0 on success. - */ -static int -genroute(graph_t* g, tripoly_t * trip, int s, int t, edge_t * e, int doPolyline) -{ - pointf eps[2]; - Pvector_t evs[2]; - pointf **cpts = NULL; /* lists of control points */ - Ppoly_t poly; - Ppolyline_t pl, spl; - int i, j; - Ppolyline_t mmpl; - Pedge_t *medges = N_GNEW(trip->poly.pn, Pedge_t); - int pn; - int mult = ED_count(e); - node_t* head = aghead(e); - int rv = 0; - - poly.ps = NULL; - pl.pn = 0; - eps[0].x = trip->poly.ps[s].x, eps[0].y = trip->poly.ps[s].y; - eps[1].x = trip->poly.ps[t].x, eps[1].y = trip->poly.ps[t].y; - if (Pshortestpath(&(trip->poly), eps, &pl) < 0) { - agerr(AGWARN, "Could not create control points for multiple spline for edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - rv = 1; - goto finish; - } - - if (pl.pn == 2) { - makeStraightEdge(agraphof(head), e, doPolyline, &_sinfo); - goto finish; - } - - evs[0].x = evs[0].y = 0; - evs[1].x = evs[1].y = 0; - - if ((mult == 1) || Concentrate) { - poly = trip->poly; - for (j = 0; j < poly.pn; j++) { - medges[j].a = poly.ps[j]; - medges[j].b = poly.ps[(j + 1) % poly.pn]; - } - tweakPath (poly, s, t, pl); - if (Proutespline(medges, poly.pn, pl, evs, &spl) < 0) { - agerr(AGWARN, "Could not create control points for multiple spline for edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - rv = 1; - goto finish; - } - finishEdge (g, e, spl, aghead(e) != head, eps[0], eps[1]); - free(medges); - - return 0; - } - - pn = 2 * (pl.pn - 1); - - cpts = N_NEW(pl.pn - 2, pointf *); - for (i = 0; i < pl.pn - 2; i++) { - cpts[i] = - mkCtrlPts(t, mult+1, pl.ps[i], pl.ps[i + 1], pl.ps[i + 2], trip); - if (!cpts[i]) { - agerr(AGWARN, "Could not create control points for multiple spline for edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - rv = 1; - goto finish; - } - } - - poly.ps = N_GNEW(pn, pointf); - poly.pn = pn; - - for (i = 0; i < mult; i++) { - poly.ps[0] = eps[0]; - for (j = 1; j < pl.pn - 1; j++) { - poly.ps[j] = cpts[j - 1][i]; - } - poly.ps[pl.pn - 1] = eps[1]; - for (j = 1; j < pl.pn - 1; j++) { - poly.ps[pn - j] = cpts[j - 1][i + 1]; - } - if (Pshortestpath(&poly, eps, &mmpl) < 0) { - agerr(AGWARN, "Could not create control points for multiple spline for edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - rv = 1; - goto finish; - } - - if (doPolyline) { - make_polyline (mmpl, &spl); - } - else { - for (j = 0; j < poly.pn; j++) { - medges[j].a = poly.ps[j]; - medges[j].b = poly.ps[(j + 1) % poly.pn]; - } - tweakPath (poly, 0, pl.pn-1, mmpl); - if (Proutespline(medges, poly.pn, mmpl, evs, &spl) < 0) { - agerr(AGWARN, "Could not create control points for multiple spline for edge (%s,%s)\n", - agnameof(agtail(e)), agnameof(aghead(e))); - rv = 1; - goto finish; - } - } - finishEdge (g, e, spl, aghead(e) != head, eps[0], eps[1]); - - e = ED_to_virt(e); - } - -finish : - if (cpts) { - for (i = 0; i < pl.pn - 2; i++) - free(cpts[i]); - free(cpts); - } - free(medges); - free(poly.ps); - return rv; -} - -#define NSMALL -0.0000000001 - -/* inCone: - * Returns true iff q is in the convex cone a-b-c - */ -static int -inCone (pointf a, pointf b, pointf c, pointf q) -{ - return ((area2(q,a,b) >= NSMALL) && (area2(q,b,c) >= NSMALL)); -} - -static pointf north = {0, 1}; -static pointf northeast = {1, 1}; -static pointf east = {1, 0}; -static pointf southeast = {1, -1}; -static pointf south = {0, -1}; -static pointf southwest = {-1, -1}; -static pointf west = {-1, 0}; -static pointf northwest = {-1, 1}; - -/* addEndpoint: - * Add node to graph representing spline end point p inside obstruction obs_id. - * For each side of obstruction, add edge from p to corresponding triangle. - * The node id of the new node in the graph is v_id. - * If p lies on the side of its node (sides != 0), we limit the triangles - * to those within 45 degrees of each side of the natural direction of p. - */ -static void addEndpoint(router_t * rtr, pointf p, node_t* v, int v_id, int sides) -{ - int obs_id = ND_lim(v); - int starti = rtr->obs[obs_id]; - int endi = rtr->obs[obs_id + 1]; - pointf* pts = rtr->ps; - int i, t; - double d; - pointf vr, v0, v1; - - switch (sides) { - case TOP : - vr = add_pointf (p, north); - v0 = add_pointf (p, northwest); - v1 = add_pointf (p, northeast); - break; - case TOP|RIGHT : - vr = add_pointf (p, northeast); - v0 = add_pointf (p, north); - v1 = add_pointf (p, east); - break; - case RIGHT : - vr = add_pointf (p, east); - v0 = add_pointf (p, northeast); - v1 = add_pointf (p, southeast); - break; - case BOTTOM|RIGHT : - vr = add_pointf (p, southeast); - v0 = add_pointf (p, east); - v1 = add_pointf (p, south); - break; - case BOTTOM : - vr = add_pointf (p, south); - v0 = add_pointf (p, southeast); - v1 = add_pointf (p, southwest); - break; - case BOTTOM|LEFT : - vr = add_pointf (p, southwest); - v0 = add_pointf (p, south); - v1 = add_pointf (p, west); - break; - case LEFT : - vr = add_pointf (p, west); - v0 = add_pointf (p, southwest); - v1 = add_pointf (p, northwest); - break; - case TOP|LEFT : - vr = add_pointf (p, northwest); - v0 = add_pointf (p, west); - v1 = add_pointf (p, north); - break; - case 0 : - break; - default : - assert (0); - break; - } - - rtr->tg->nodes[v_id].ne = 0; - rtr->tg->nodes[v_id].ctr = p; - for (i = starti; i < endi; i++) { - ipair seg; - seg.i = i; - if (i < endi - 1) - seg.j = i + 1; - else - seg.j = starti; - t = findMap(rtr->trimap, seg.i, seg.j); - if (sides && !inCone (v0, p, v1, pts[seg.i]) && !inCone (v0, p, v1, pts[seg.j]) && !raySeg(p,vr,pts[seg.i],pts[seg.j])) - continue; - d = DIST(p, (rtr->tg->nodes + t)->ctr); - addTriEdge(rtr->tg, v_id, t, d, seg); - } -} - -/* edgeToSeg: - * Given edge from i to j, find segment associated - * with the edge. - * - * This lookup could be made faster by modifying the - * shortest path algorithm to store the edges rather than - * the nodes. - */ -static ipair edgeToSeg(tgraph * tg, int i, int j) -{ - ipair ip; - tnode *np = tg->nodes + i; - tedge *ep; - - for (i = 0; i < np->ne; i++) { - ep = tg->edges + np->edges[i]; - if ((ep->t == j) || (ep->h == j)) - return (ep->seg); - } - - assert(0); - return ip; -} - -static void -freeTripoly (tripoly_t* trip) -{ - int i; - tri* tp; - tri* nxt; - - free (trip->poly.ps); - for (i = 0; i < trip->poly.pn; i++) { - for (tp = trip->triMap[i]; tp; tp = nxt) { - nxt = tp->nxttri; - free (tp); - } - } - free (trip->triMap); - free (trip); -} - -/* Auxiliary data structure used to translate a path of rectangles - * into a polygon. Each side_t represents a vertex on one side of - * the polygon. v is the index of the vertex in the global router_t, - * and ts is a linked list of the indices of segments of sides opposite - * to v in some triangle on the path. These lists will be translated - * to polygon indices by mapTri, and stored in tripoly_t.triMap. - */ -typedef struct { - int v; - tri *ts; -} side_t; - -/* mkPoly: - * Construct simple polygon from shortest path from t to s in g. - * dad gives the indices of the triangles on path. - * sx used to store index of s in points. - * index of t is always 0 - */ -static tripoly_t *mkPoly(router_t * rtr, int *dad, int s, int t, - pointf p_s, pointf p_t, int *sx) -{ - tripoly_t *ps; - int nxt; - ipair p; - int nt = 0; - side_t *side1; - side_t *side2; - int i, idx; - int cnt1 = 0; - int cnt2 = 0; - pointf *pts; - pointf *pps; - /* maps vertex index used in router_t to vertex index used in tripoly */ - Dt_t *vmap; - tri **trim; - - /* count number of triangles in path */ - for (nxt = dad[t]; nxt != s; nxt = dad[nxt]) - nt++; - - side1 = N_NEW(nt + 4, side_t); - side2 = N_NEW(nt + 4, side_t); - - nxt = dad[t]; - p = edgeToSeg(rtr->tg, nxt, t); - side1[cnt1].ts = addTri(-1, p.j, NULL); - side1[cnt1++].v = p.i; - side2[cnt2].ts = addTri(-1, p.i, NULL); - side2[cnt2++].v = p.j; - - t = nxt; - for (nxt = dad[t]; nxt >= 0; nxt = dad[nxt]) { - p = edgeToSeg(rtr->tg, t, nxt); - if (p.i == side1[cnt1 - 1].v) { - side1[cnt1 - 1].ts = - addTri(side2[cnt2 - 1].v, p.j, side1[cnt1 - 1].ts); - side2[cnt2 - 1].ts = - addTri(side1[cnt1 - 1].v, p.j, side2[cnt2 - 1].ts); - side2[cnt2].ts = - addTri(side2[cnt2 - 1].v, side1[cnt1 - 1].v, NULL); - side2[cnt2++].v = p.j; - } else if (p.i == side2[cnt2 - 1].v) { - side1[cnt1 - 1].ts = - addTri(side2[cnt2 - 1].v, p.j, side1[cnt1 - 1].ts); - side2[cnt2 - 1].ts = - addTri(side1[cnt1 - 1].v, p.j, side2[cnt2 - 1].ts); - side1[cnt1].ts = - addTri(side2[cnt2 - 1].v, side1[cnt1 - 1].v, NULL); - side1[cnt1++].v = p.j; - } else if (p.j == side1[cnt1 - 1].v) { - side1[cnt1 - 1].ts = - addTri(side2[cnt2 - 1].v, p.i, side1[cnt1 - 1].ts); - side2[cnt2 - 1].ts = - addTri(side1[cnt1 - 1].v, p.i, side2[cnt2 - 1].ts); - side2[cnt2].ts = - addTri(side2[cnt2 - 1].v, side1[cnt1 - 1].v, NULL); - side2[cnt2++].v = p.i; - } else { - side1[cnt1 - 1].ts = - addTri(side2[cnt2 - 1].v, p.i, side1[cnt1 - 1].ts); - side2[cnt2 - 1].ts = - addTri(side1[cnt1 - 1].v, p.i, side2[cnt2 - 1].ts); - side1[cnt1].ts = - addTri(side2[cnt2 - 1].v, side1[cnt1 - 1].v, NULL); - side1[cnt1++].v = p.i; - } - t = nxt; - } - side1[cnt1 - 1].ts = addTri(-2, side2[cnt2 - 1].v, side1[cnt1 - 1].ts); - side2[cnt2 - 1].ts = addTri(-2, side1[cnt1 - 1].v, side2[cnt2 - 1].ts); - - /* store points in pts starting with t in 0, - * then side1, then s, then side2 - */ - vmap = dtopen(&ipairdisc, Dtoset); - vmapAdd(vmap, -1, 0); - vmapAdd(vmap, -2, cnt1 + 1); - pps = pts = N_GNEW(nt + 4, pointf); - trim = N_NEW(nt + 4, tri *); - *pps++ = p_t; - idx = 1; - for (i = 0; i < cnt1; i++) { - vmapAdd(vmap, side1[i].v, idx); - *pps++ = rtr->ps[side1[i].v]; - trim[idx++] = side1[i].ts; - } - *pps++ = p_s; - idx++; - for (i = cnt2 - 1; i >= 0; i--) { - vmapAdd(vmap, side2[i].v, idx); - *pps++ = rtr->ps[side2[i].v]; - trim[idx++] = side2[i].ts; - } - - for (i = 0; i < nt + 4; i++) { - mapTri(vmap, trim[i]); - } - - ps = NEW(tripoly_t); - ps->poly.pn = nt + 4; /* nt triangles gives nt+2 points plus s and t */ - ps->poly.ps = pts; - ps->triMap = trim; - - free (side1); - free (side2); - dtclose(vmap); - *sx = cnt1 + 1; /* index of s in ps */ - return ps; -} - -/* resetGraph: - * Remove edges and nodes added for current edge routing - */ -static void resetGraph(tgraph * g, int ncnt, int ecnt) -{ - int i; - tnode *np = g->nodes; - g->nedges = ecnt; - for (i = 0; i < ncnt; i++) { - if (np->edges + np->ne == (np + 1)->edges) - np->ne--; - np++; - } -} - -#define PQTYPE int -#define PQVTYPE float - -#define PQ_TYPES -#include "fPQ.h" -#undef PQ_TYPES - -typedef struct { - PQ pq; - PQVTYPE *vals; - int *idxs; -} PPQ; - -#define N_VAL(pq,n) ((PPQ*)pq)->vals[n] -#define N_IDX(pq,n) ((PPQ*)pq)->idxs[n] - -#define PQ_CODE -#include "fPQ.h" -#undef PQ_CODE - -#define N_DAD(n) dad[n] -#define E_WT(e) (e->dist) -#define UNSEEN -MAXFLOAT - -/* triPath: - * Find the shortest path with lengths in g from - * v0 to v1. The returned vector (dad) encodes the - * shorted path from v1 to v0. That path is given by - * v1, dad[v1], dad[dad[v1]], ..., v0. - */ -static int * -triPath(tgraph * g, int n, int v0, int v1, PQ * pq) -{ - int i, j, adjn; - double d; - tnode *np; - tedge *e; - int *dad = N_NEW(n, int); - - for (i = 0; i < pq->PQsize; i++) - N_VAL(pq, i) = UNSEEN; - - PQinit(pq); - N_DAD(v0) = -1; - N_VAL(pq, v0) = 0; - if (_PQinsert(pq, v0)) - return NULL; - - while ((i = PQremove(pq)) != -1) { - N_VAL(pq, i) *= -1; - if (i == v1) - break; - np = g->nodes + i; - for (j = 0; j < np->ne; j++) { - e = g->edges + np->edges[j]; - if (e->t == i) - adjn = e->h; - else - adjn = e->t; - if (N_VAL(pq, adjn) < 0) { - d = -(N_VAL(pq, i) + E_WT(e)); - if (N_VAL(pq, adjn) == UNSEEN) { - N_VAL(pq, adjn) = d; - N_DAD(adjn) = i; - if (_PQinsert(pq, adjn)) return NULL; - } else if (N_VAL(pq, adjn) < d) { - PQupdate(pq, adjn, d); - N_DAD(adjn) = i; - } - } - } - } - return dad; -} - -/* makeMultiSpline: - * FIX: we don't really use the shortest path provided by ED_path, - * so avoid in neato spline code. - * Return 0 on success. - */ -int makeMultiSpline(graph_t* g, edge_t* e, router_t * rtr, int doPolyline) -{ - Ppolyline_t line = ED_path(e); - node_t *t = agtail(e); - node_t *h = aghead(e); - pointf t_p = line.ps[0]; - pointf h_p = line.ps[line.pn - 1]; - tripoly_t *poly; - int idx; - int *sp; - int t_id = rtr->tn; - int h_id = rtr->tn + 1; - int ecnt = rtr->tg->nedges; - PPQ pq; - PQTYPE *idxs; - PQVTYPE *vals; - int ret; - - /* Add endpoints to triangle graph */ - addEndpoint(rtr, t_p, t, t_id, ED_tail_port(e).side); - addEndpoint(rtr, h_p, h, h_id, ED_head_port(e).side); - - /* Initialize priority queue */ - PQgen(&pq.pq, rtr->tn + 2, -1); - idxs = N_GNEW(pq.pq.PQsize + 1, PQTYPE); - vals = N_GNEW(pq.pq.PQsize + 1, PQVTYPE); - vals[0] = 0; - pq.vals = vals + 1; - pq.idxs = idxs + 1; - - /* Find shortest path of triangles */ - sp = triPath(rtr->tg, rtr->tn+2, h_id, t_id, (PQ *) & pq); - - free(vals); - free(idxs); - PQfree(&(pq.pq), 0); - - /* Use path of triangles to generate guiding polygon */ - if (sp) { - poly = mkPoly(rtr, sp, h_id, t_id, h_p, t_p, &idx); - free(sp); - - /* Generate multiple splines using polygon */ - ret = genroute(g, poly, 0, idx, e, doPolyline); - freeTripoly (poly); - } - else ret = -1; - - resetGraph(rtr->tg, rtr->tn, ecnt); - return ret; -} diff --git a/internal/ccall/neatogen/multispline.h b/internal/ccall/neatogen/multispline.h deleted file mode 100644 index bac0444..0000000 --- a/internal/ccall/neatogen/multispline.h +++ /dev/null @@ -1,26 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef MULTISPLINE_H -#define MULTISPLINE_H - -#include -#include - -typedef struct router_s router_t; - -extern void freeRouter (router_t* rtr); -extern router_t* mkRouter (Ppoly_t** obs, int npoly); -extern int makeMultiSpline(graph_t* g, edge_t* e, router_t * rtr, int); - -#endif diff --git a/internal/ccall/neatogen/neato.h b/internal/ccall/neatogen/neato.h deleted file mode 100644 index a7a59c3..0000000 --- a/internal/ccall/neatogen/neato.h +++ /dev/null @@ -1,40 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#ifndef NEATO_H -#define NEATO_H - -#include "config.h" - -#define MODEL_SHORTPATH 0 -#define MODEL_CIRCUIT 1 -#define MODEL_SUBSET 2 -#define MODEL_MDS 3 - -#define MODE_KK 0 -#define MODE_MAJOR 1 -#define MODE_HIER 2 -#define MODE_IPSEP 3 - -#define INIT_ERROR -1 -#define INIT_SELF 0 -#define INIT_REGULAR 1 -#define INIT_RANDOM 2 - -#include "render.h" -#include "pathplan.h" -#include "neatoprocs.h" -#include "adjust.h" - -#endif /* NEATO_H */ diff --git a/internal/ccall/neatogen/neatoinit.c b/internal/ccall/neatogen/neatoinit.c deleted file mode 100644 index 61c53b3..0000000 --- a/internal/ccall/neatogen/neatoinit.c +++ /dev/null @@ -1,1506 +0,0 @@ -/* Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include -#ifndef WIN32 -#include -#endif -#include - -#include "neato.h" -#include "pack.h" -#include "stress.h" -#ifdef DIGCOLA -#include "digcola.h" -#endif -#include "kkutils.h" -#include "pointset.h" - -#ifndef HAVE_SRAND48 -#define srand48 srand -#endif - -static attrsym_t *N_pos; -static int Pack; /* If >= 0, layout components separately and pack together - * The value of Pack gives margins around graphs. - */ -static char *cc_pfx = "_neato_cc"; - -void neato_init_node(node_t * n) -{ - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); //node custom data - common_init_node(n); - ND_pos(n) = N_NEW(GD_ndim(agraphof(n)), double); - gv_nodesize(n, GD_flip(agraphof(n))); -} - -static void neato_init_edge(edge_t * e) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - common_init_edge(e); - ED_factor(e) = late_double(e, E_weight, 1.0, 1.0); -} - -int user_pos(attrsym_t * posptr, attrsym_t * pinptr, node_t * np, int nG) -{ - double *pvec; - char *p, c; - double z; - - if (posptr == NULL) - return FALSE; - pvec = ND_pos(np); - p = agxget(np, posptr); - if (p[0]) { - c = '\0'; - if ((Ndim >= 3) && - (sscanf(p, "%lf,%lf,%lf%c", pvec, pvec+1, pvec+2, &c) >= 3)){ - ND_pinned(np) = P_SET; - if (PSinputscale > 0.0) { - int i; - for (i = 0; i < Ndim; i++) - pvec[i] = pvec[i] / PSinputscale; - } - if (Ndim > 3) - jitter_d(np, nG, 3); - if ((c == '!') || (pinptr && mapbool(agxget(np, pinptr)))) - ND_pinned(np) = P_PIN; - return TRUE; - } - else if (sscanf(p, "%lf,%lf%c", pvec, pvec + 1, &c) >= 2) { - ND_pinned(np) = P_SET; - if (PSinputscale > 0.0) { - int i; - for (i = 0; i < Ndim; i++) - pvec[i] = pvec[i] / PSinputscale; - } - if (Ndim > 2) { - if (N_z && (p = agxget(np, N_z)) && (sscanf(p,"%lf",&z) == 1)) { - if (PSinputscale > 0.0) { - pvec[2] = z / PSinputscale; - } - else - pvec[2] = z; - jitter_d(np, nG, 3); - } - else - jitter3d(np, nG); - } - if ((c == '!') || (pinptr && mapbool(agxget(np, pinptr)))) - ND_pinned(np) = P_PIN; - return TRUE; - } else - agerr(AGERR, "node %s, position %s, expected two doubles\n", - agnameof(np), p); - } - return FALSE; -} - -static void neato_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; - int nG = agnnodes(g); - attrsym_t *N_pin; - - N_pos = agfindnodeattr(g, "pos"); - N_pin = agfindnodeattr(g, "pin"); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - neato_init_node(n); - user_pos(N_pos, N_pin, n, nG); /* set user position if given */ - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - neato_init_edge(e); - } -} - -static void neato_cleanup_graph(graph_t * g) -{ - if (Nop || (Pack < 0)) - free_scan_graph(g); - if (g != agroot(g)) - agclean(g, AGRAPH , "Agraphinfo_t"); -} - -void neato_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - neato_cleanup_graph(g); -} - -static int numFields(unsigned char *pos) -{ - int cnt = 0; - unsigned char c; - - do { - while (isspace(*pos)) - pos++; /* skip white space */ - if ((c = *pos)) { /* skip token */ - cnt++; - while ((c = *pos) && !isspace(c) && (c != ';')) - pos++; - } - } while (isspace(c)); - return cnt; -} - -static void set_label(void* obj, textlabel_t * l, char *name) -{ - double x, y; - char *lp; - lp = agget(obj, name); - if (lp && (sscanf(lp, "%lf,%lf", &x, &y) == 2)) { - l->pos = pointfof(x, y); - l->set = TRUE; - } -} - -#ifdef IPSEPCOLA -static cluster_data* cluster_map(graph_t *mastergraph, graph_t *g) -{ - graph_t *subg; - node_t *n; - /* array of arrays of node indices in each cluster */ - int **cs,*cn; - int i,j,nclusters=0; - boolean* assigned = N_NEW(agnnodes(g), boolean); - cluster_data *cdata = GNEW(cluster_data); - - cdata->ntoplevel = agnnodes(g); - for (subg = agfstsubg(mastergraph); subg; subg = agnxtsubg(subg)) { - if (!strncmp(agnameof(subg), "cluster", 7)) { - nclusters++; - } - } - cdata->nvars=0; - cdata->nclusters = nclusters; - cs = cdata->clusters = N_GNEW(nclusters,int*); - cn = cdata->clustersizes = N_GNEW(nclusters,int); - for (subg = agfstsubg(mastergraph); subg; subg = agnxtsubg(subg)) { - /* clusters are processed by separate calls to ordered_edges */ - if (!strncmp(agnameof(subg), "cluster", 7)) { - int *c; - - *cn = agnnodes(subg); - cdata->nvars += *cn; - c = *cs++ = N_GNEW(*cn++,int); - /* fprintf(stderr,"Cluster with %d nodes...\n",agnnodes(subg)); */ - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - node_t *gn; - int ind = 0; - for (gn = agfstnode(g); gn; gn = agnxtnode(g, gn)) { - if(AGSEQ(gn)==AGSEQ(n)) break; - ind++; - } - /* fprintf(stderr," node=%s, id=%d, ind=%d\n",agnameof(n),n->id,ind); */ - *c++=ind; - assigned[ind]=TRUE; - cdata->ntoplevel--; - } - } - } - cdata->bb=N_GNEW(cdata->nclusters,boxf); - cdata->toplevel=N_GNEW(cdata->ntoplevel,int); - for(i=j=0;itoplevel[j++]=i; - } - } - assert(cdata->ntoplevel==agnnodes(g)-cdata->nvars); - free (assigned); - return cdata; -} - -static void freeClusterData(cluster_data *c) { - if(c->nclusters>0) { - free(c->clusters[0]); - free(c->clusters); - free(c->clustersizes); - free(c->toplevel); - free(c->bb); - } - free(c); -} -#endif - -/* user_spline: - * Attempt to use already existing pos info for spline - * Return 1 if successful, 0 otherwise. - * Assume E_pos != NULL and ED_spl(e) == NULL. - */ -static int user_spline(attrsym_t * E_pos, edge_t * e) -{ - char *pos; - int i, n, npts, nc; - pointf *ps = 0; - pointf *pp; - double x, y; - int sflag = 0, eflag = 0; - pointf sp = { 0, 0 }, ep = { 0, 0}; - bezier *newspl; - int more = 1; - int stype, etype; - static boolean warned; - - pos = agxget(e, E_pos); - if (*pos == '\0') - return 0; - - arrow_flags(e, &stype, &etype); - do { - /* check for s head */ - i = sscanf(pos, "s,%lf,%lf%n", &x, &y, &nc); - if (i == 2) { - sflag = 1; - pos = pos + nc; - sp.x = x; - sp.y = y; - } - - /* check for e head */ - i = sscanf(pos, " e,%lf,%lf%n", &x, &y, &nc); - if (i == 2) { - eflag = 1; - pos = pos + nc; - ep.x = x; - ep.y = y; - } - - npts = numFields((unsigned char *) pos); /* count potential points */ - n = npts; - if ((n < 4) || (n % 3 != 1)) { - gv_free_splines(e); - if (!warned) { - warned = 1; - agerr(AGWARN, "pos attribute for edge (%s,%s) doesn't have 3n+1 points\n", agnameof(agtail(e)), agnameof(aghead(e))); - } - return 0; - } - ps = ALLOC(n, 0, pointf); - pp = ps; - while (n) { - i = sscanf(pos, "%lf,%lf%n", &x, &y, &nc); - if (i < 2) { - if (!warned) { - warned = 1; - agerr(AGWARN, "syntax error in pos attribute for edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - } - free(ps); - gv_free_splines(e); - return 0; - } - pos = pos + nc; - pp->x = x; - pp->y = y; - pp++; - n--; - } - while (isspace(*pos)) pos++; - if (*pos == '\0') - more = 0; - else - pos++; - - /* parsed successfully; create spline */ - newspl = new_spline(e, npts); - if (sflag) { - newspl->sflag = stype; - newspl->sp = sp; - } - if (eflag) { - newspl->eflag = etype; - newspl->ep = ep; - } - for (i = 0; i < npts; i++) { - newspl->list[i] = ps[i]; - } - free(ps); - } while (more); - - if (ED_label(e)) - set_label(e, ED_label(e), "lp"); - if (ED_xlabel(e)) - set_label(e, ED_xlabel(e), "xlp"); - if (ED_head_label(e)) - set_label(e, ED_head_label(e), "head_lp"); - if (ED_tail_label(e)) - set_label(e, ED_tail_label(e), "tail_lp"); - - return 1; -} - -/* Nop can be: - * 0 - do full layout - * 1 - assume initial node positions, do (optional) adjust and all splines - * 2 - assume final node and edges positions, do nothing except compute - * missing splines - */ - - /* Indicates the amount of edges with position information */ -typedef enum { NoEdges, SomeEdges, AllEdges } pos_edge; - -/* nop_init_edges: - * Check edges for position info. - * If position info exists, check for edge label positions. - * Return number of edges with position info. - */ -static pos_edge nop_init_edges(Agraph_t * g) -{ - node_t *n; - edge_t *e; - int nedges = 0; - attrsym_t *E_pos; - - if (agnedges(g) == 0) - return AllEdges; - - E_pos = agfindedgeattr(g, "pos"); - if (!E_pos || (Nop < 2)) - return NoEdges; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if (user_spline(E_pos, e)) { - nedges++; - } - } - } - if (nedges) { - if (nedges == agnedges(g)) - return AllEdges; - else - return SomeEdges; - } else - return NoEdges; -} - -/* freeEdgeInfo: - */ -static void freeEdgeInfo (Agraph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_free_splines(e); - free_label(ED_label(e)); - free_label(ED_xlabel(e)); - free_label(ED_head_label(e)); - free_label(ED_tail_label(e)); - } - } -} - -/* chkBB: - * Scans for a correct bb attribute. If available, sets it - * in the graph and returns 1. - */ -#define BS "%lf,%lf,%lf,%lf" - -static int chkBB(Agraph_t * g, attrsym_t * G_bb, boxf* bbp) -{ - char *s; - boxf bb; - - s = agxget(g, G_bb); - if (sscanf(s, BS, &bb.LL.x, &bb.LL.y, &bb.UR.x, &bb.UR.y) == 4) { - if (bb.LL.y > bb.UR.y) { - /* If the LL.y coordinate is bigger than the UR.y coordinate, - * we assume the input was produced using -y, so we normalize - * the bb. - */ - double tmp = bb.LL.y; - bb.LL.y = bb.UR.y; - bb.UR.y = tmp; - } - *bbp = bb; - return 1; - } else - return 0; -} - -static void add_cluster(Agraph_t * g, Agraph_t * subg) -{ - int cno; - cno = ++(GD_n_cluster(g)); - GD_clust(g) = ZALLOC(cno + 1, GD_clust(g), graph_t *, GD_n_cluster(g)); - GD_clust(g)[cno] = subg; - do_graph_label(subg); -} - - -static void nop_init_graphs(Agraph_t *, attrsym_t *, attrsym_t *); - -/* dfs: - * Process subgraph subg of parent graph g - * If subg is a cluster, add its bounding box, if any; attach to - * cluster array of parent, and recursively initialize subg. - * If not a cluster, recursively call this function on the subgraphs - * of subg, using parentg as the parent graph. - */ -static void -dfs(Agraph_t * subg, Agraph_t * parentg, attrsym_t * G_lp, attrsym_t * G_bb) -{ - boxf bb; - - if (!strncmp(agnameof(subg), "cluster", 7) && chkBB(subg, G_bb, &bb)) { - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - GD_bb(subg) = bb; - add_cluster(parentg, subg); - nop_init_graphs(subg, G_lp, G_bb); - } else { - graph_t *sg; - for (sg = agfstsubg(subg); sg; sg = agnxtsubg(sg)) { - dfs(sg, parentg, G_lp, G_bb); - } - } -} - -/* nop_init_graphs: - * Read in clusters and graph label info. - * A subgraph is a cluster if its name starts with "cluster" and - * it has a valid bb. - */ -static void -nop_init_graphs(Agraph_t * g, attrsym_t * G_lp, attrsym_t * G_bb) -{ - graph_t *subg; - char *s; - double x, y; - - if (GD_label(g) && G_lp) { - s = agxget(g, G_lp); - if (sscanf(s, "%lf,%lf", &x, &y) == 2) { - GD_label(g)->pos = pointfof(x, y); - GD_label(g)->set = TRUE; - } - } - - if (!G_bb) - return; - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - dfs(subg, g, G_lp, G_bb); - } -} - -/* init_nop: - * This assumes all nodes have been positioned. - * It also assumes none of the relevant fields in A*info_t have been set. - * The input may provide additional position information for - * clusters, edges and labels. If certain position information - * is missing, init_nop will use a standard neato technique to - * supply it. - * - * If adjust is false, init_nop does nothing but initialize all - * of the basic graph information. No tweaking of positions or - * filling in edge splines is done. - * - * Returns 0 on normal success, 1 if layout has a background, and -1 - * on failure. - */ -int init_nop(Agraph_t * g, int adjust) -{ - int i; - node_t *np; - pos_edge posEdges; /* How many edges have spline info */ - attrsym_t *G_lp = agfindgraphattr(g, "lp"); - attrsym_t *G_bb = agfindgraphattr(g, "bb"); - int didAdjust = 0; /* Have nodes been moved? */ - int haveBackground; - boolean translate = !mapBool(agget(g, "notranslate"), FALSE); - - /* If G_bb not defined, define it */ - if (!G_bb) - G_bb = agattr(g, AGRAPH, "bb", ""); - - scan_graph(g); /* mainly to set up GD_neato_nlist */ - for (i = 0; (np = GD_neato_nlist(g)[i]); i++) { - if (!hasPos(np) && strncmp(agnameof(np), "cluster", 7)) { - agerr(AGERR, "node %s in graph %s has no position\n", - agnameof(np), agnameof(g)); - return -1; - } - if (ND_xlabel(np)) - set_label(np, ND_xlabel(np), "xlp"); - } - nop_init_graphs(g, G_lp, G_bb); - posEdges = nop_init_edges(g); - - if (GD_drawing(g)->xdots) { - haveBackground = 1; - GD_drawing(g)->ratio_kind = R_NONE; /* Turn off any aspect change if background present */ - } - else - haveBackground = 0; - - if (adjust && (Nop == 1) && !haveBackground) - didAdjust = adjustNodes(g); - - if (didAdjust) { - if (GD_label(g)) GD_label(g)->set = FALSE; -/* FIX: - * - if nodes are moved, clusters are no longer valid. - */ - } - - compute_bb(g); - - /* Adjust bounding box for any background */ - if (haveBackground) - GD_bb(g) = xdotBB (g); - - /* At this point, all bounding boxes should be correctly defined. - */ - - if (!adjust) { - node_t *n; - State = GVSPLINES; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_coord(n).x = POINTS_PER_INCH * (ND_pos(n)[0]); - ND_coord(n).y = POINTS_PER_INCH * (ND_pos(n)[1]); - } - } - else { - boolean didShift; - if (translate && !haveBackground && ((GD_bb(g).LL.x != 0)||(GD_bb(g).LL.y != 0))) - neato_translate (g); - didShift = neato_set_aspect(g); - /* if we have some edge positions and we either shifted or adjusted, free edge positions */ - if ((posEdges != NoEdges) && (didShift || didAdjust)) { - freeEdgeInfo (g); - posEdges = NoEdges; - } - if (posEdges != AllEdges) - spline_edges0(g, FALSE); /* add edges */ - else - State = GVSPLINES; - } - - return haveBackground; -} - -static void neato_init_graph (Agraph_t * g) -{ - int outdim; - - setEdgeType (g, ET_LINE); - outdim = late_int(g, agfindgraphattr(g, "dimen"), 2, 2); - GD_ndim(agroot(g)) = late_int(g, agfindgraphattr(g, "dim"), outdim, 2); - Ndim = GD_ndim(g->root) = MIN(GD_ndim(g->root), MAXDIM); - GD_odim(g->root) = MIN(outdim, Ndim); - neato_init_node_edge(g); -} - -static int neatoModel(graph_t * g) -{ - char *p = agget(g, "model"); - char c; - - if (!p || (!(c = *p))) /* if p is NULL or "" */ - return MODEL_SHORTPATH; - if ((c == 'c') && streq(p, "circuit")) - return MODEL_CIRCUIT; - if (c == 's') { - if (streq(p, "subset")) - return MODEL_SUBSET; - else if (streq(p, "shortpath")) - return MODEL_SHORTPATH; - } - if ((c == 'm') && streq(p, "mds")) { - if (agattr(g, AGEDGE, "len", 0)) - return MODEL_MDS; - else { - agerr(AGWARN, - "edges in graph %s have no len attribute. Hence, the mds model\n", agnameof(g)); - agerr(AGPREV, "is inappropriate. Reverting to the shortest path model.\n"); - return MODEL_SHORTPATH; - } - } - agerr(AGWARN, - "Unknown value %s for attribute \"model\" in graph %s - ignored\n", - p, agnameof(g)); - return MODEL_SHORTPATH; -} - -/* neatoMode: - */ -static int neatoMode(graph_t * g) -{ - char *str; - int mode = MODE_MAJOR; /* default mode */ - - str = agget(g, "mode"); - if (str && *str) { - if (streq(str, "KK")) - mode = MODE_KK; - else if (streq(str, "major")) - mode = MODE_MAJOR; -#ifdef DIGCOLA - else if (streq(str, "hier")) - mode = MODE_HIER; -#ifdef IPSEPCOLA - else if (streq(str, "ipsep")) - mode = MODE_IPSEP; -#endif -#endif - else - agerr(AGWARN, - "Illegal value %s for attribute \"mode\" in graph %s - ignored\n", - str, agnameof(g)); - } - - return mode; -} - -/* checkEdge: - * - */ -static int checkEdge(PointMap * pm, edge_t * ep, int idx) -{ - int i = ND_id(agtail(ep)); - int j = ND_id(aghead(ep)); - int tmp; - - if (i > j) { - tmp = i; - i = j; - j = tmp; - } - return insertPM(pm, i, j, idx); -} - -#ifdef DIGCOLA -/* dfsCycle: - * dfs for breaking cycles in vtxdata - */ -static void -dfsCycle (vtx_data* graph, int i,int mode, node_t* nodes[]) -{ - node_t *np, *hp; - int j, e, f; - /* if mode is IPSEP make it an in-edge - * at both ends, so that an edge constraint won't be generated! - */ - double x = (mode==MODE_IPSEP?-1.0:1.0); - - np = nodes[i]; - ND_mark(np) = TRUE; - ND_onstack(np) = TRUE; - for (e = 1; e < graph[i].nedges; e++) { - if (graph[i].edists[e] == 1.0) continue; /* in edge */ - j = graph[i].edges[e]; - hp = nodes[j]; - if (ND_onstack(hp)) { /* back edge: reverse it */ - graph[i].edists[e] = x; - for (f = 1; (f < graph[j].nedges) &&(graph[j].edges[f] != i); f++) ; - assert (f < graph[j].nedges); - graph[j].edists[f] = -1.0; - } - else if (ND_mark(hp) == FALSE) dfsCycle(graph, j, mode, nodes); - - } - ND_onstack(np) = FALSE; -} - -/* acyclic: - * Do a dfs of the vtx_data, looking for cycles, reversing edges. - */ -static void -acyclic (vtx_data* graph, int nv, int mode, node_t* nodes[]) -{ - int i; - node_t* np; - - for (i = 0; i < nv; i++) { - np = nodes[i]; - ND_mark(np) = FALSE; - ND_onstack(np) = FALSE; - } - for (i = 0; i < nv; i++) { - if (ND_mark(nodes[i])) continue; - dfsCycle (graph, i, mode, nodes); - } - -} -#endif - -/* makeGraphData: - * Create sparse graph representation via arrays. - * Each node is represented by a vtx_data. - * The index of each neighbor is stored in the edges array; - * the corresponding edge lengths and weights go on ewgts and eweights. - * We do not allocate the latter 2 if the graph does not use them. - * By convention, graph[i].edges[0] == i. - * The values graph[i].ewgts[0] and graph[i].eweights[0] are left undefined. - * - * In constructing graph from g, we neglect loops. We track multiedges (ignoring - * direction). Edge weights are additive; the final edge length is the max. - * - * If direction is used, we set the edists field, -1 for tail, +1 for head. - * graph[i].edists[0] is left undefined. If multiedges exist, the direction - * of the first one encountered is used. Finally, a pass is made to guarantee - * the graph is acyclic. - * - */ -static vtx_data *makeGraphData(graph_t * g, int nv, int *nedges, int mode, int model, node_t*** nodedata) -{ - vtx_data *graph; - node_t** nodes; - int ne = agnedges(g); /* upper bound */ - int *edges; - float *ewgts = NULL; - node_t *np; - edge_t *ep; - float *eweights = NULL; -#ifdef DIGCOLA - float *edists = NULL; -#endif - attrsym_t *haveLen; - int haveWt; - int haveDir; - PointMap *ps = newPM(); - int i, i_nedges, idx; - - /* lengths and weights unused in reweight model */ - if (model == MODEL_SUBSET) { - haveLen = FALSE; - haveWt = FALSE; - } else { - haveLen = agattr(g, AGEDGE, "len", 0) ; - haveWt = (E_weight != 0); - } - if (mode == MODE_HIER || mode == MODE_IPSEP) - haveDir = TRUE; - else - haveDir = FALSE; - - graph = N_GNEW(nv, vtx_data); - nodes = N_GNEW(nv, node_t*); - edges = N_GNEW(2 * ne + nv, int); /* reserve space for self loops */ - if (haveLen || haveDir) - ewgts = N_GNEW(2 * ne + nv, float); - if (haveWt) - eweights = N_GNEW(2 * ne + nv, float); -#ifdef DIGCOLA - if (haveDir) - edists = N_GNEW(2*ne+nv,float); -#endif - - i = 0; - ne = 0; - for (np = agfstnode(g); np; np = agnxtnode(g, np)) { - int j = 1; /* index of neighbors */ - clearPM(ps); - assert(ND_id(np) == i); - nodes[i] = np; - graph[i].edges = edges++; /* reserve space for the self loop */ - if (haveLen || haveDir) - graph[i].ewgts = ewgts++; - else - graph[i].ewgts = NULL; - if (haveWt) - graph[i].eweights = eweights++; - else - graph[i].eweights = NULL; -#ifdef DIGCOLA - if (haveDir) { - graph[i].edists = edists++; - } - else - graph[i].edists = NULL; -#endif - i_nedges = 1; /* one for the self */ - - for (ep = agfstedge(g, np); ep; ep = agnxtedge(g, ep, np)) { - if (aghead(ep) == agtail(ep)) - continue; /* ignore loops */ - idx = checkEdge(ps, ep, j); - if (idx != j) { /* seen before */ - if (haveWt) - graph[i].eweights[idx] += ED_factor(ep); - if (haveLen) { - int curlen = graph[i].ewgts[idx]; - graph[i].ewgts[idx] = MAX(ED_dist(ep), curlen); - } - } else { - node_t *vp = (((agtail(ep)) == np) ? aghead(ep) : agtail(ep)); - ne++; - j++; - - *edges++ = ND_id(vp); - if (haveWt) - *eweights++ = ED_factor(ep); - if (haveLen) - *ewgts++ = ED_dist(ep); - else if (haveDir) - *ewgts++ = 1.0; -#ifdef DIGCOLA - if (haveDir) { - char *s = agget(ep,"dir"); - if(s&&!strncmp(s,"none",4)) { - *edists++ = 0; - } else { - *edists++ = (np == aghead(ep) ? 1.0 : -1.0); - } - } -#endif - i_nedges++; - } - } - - graph[i].nedges = i_nedges; - graph[i].edges[0] = i; -#ifdef USE_STYLES - graph[i].styles = NULL; -#endif - i++; - } -#ifdef DIGCOLA - if (haveDir) { - /* Make graph acyclic */ - acyclic (graph, nv, mode, nodes); - } -#endif - - ne /= 2; /* every edge is counted twice */ - - /* If necessary, release extra memory. */ - if (ne != agnedges(g)) { - edges = RALLOC(2 * ne + nv, graph[0].edges, int); - if (haveLen) - ewgts = RALLOC(2 * ne + nv, graph[0].ewgts, float); - if (haveWt) - eweights = RALLOC(2 * ne + nv, graph[0].eweights, float); - - for (i = 0; i < nv; i++) { - int sz = graph[i].nedges; - graph[i].edges = edges; - edges += sz; - if (haveLen) { - graph[i].ewgts = ewgts; - ewgts += sz; - } - if (haveWt) { - graph[i].eweights = eweights; - eweights += sz; - } - } - } - - *nedges = ne; - if (nodedata) - *nodedata = nodes; - else - free (nodes); - freePM(ps); - return graph; -} - -static void initRegular(graph_t * G, int nG) -{ - double a, da; - node_t *np; - - a = 0.0; - da = (2 * M_PI) / nG; - for (np = agfstnode(G); np; np = agnxtnode(G, np)) { - ND_pos(np)[0] = nG * Spring_coeff * cos(a); - ND_pos(np)[1] = nG * Spring_coeff * sin(a); - ND_pinned(np) = P_SET; - a = a + da; - if (Ndim > 2) - jitter3d(np, nG); - } -} - -#define SLEN(s) (sizeof(s)-1) -#define SMART "self" -#define REGULAR "regular" -#define RANDOM "random" - -/* setSeed: - * Analyze "start" attribute. If unset, return dflt. - * If it begins with self, regular, or random, return set init to same, - * else set init to dflt. - * If init is random, look for value integer suffix to use a seed; if not - * found, use time to set seed and store seed in graph. - * Return seed in seedp. - * Return init. - */ -int -setSeed (graph_t * G, int dflt, long* seedp) -{ - char smallbuf[32]; - char *p = agget(G, "start"); - int init = dflt; - - if (!p || (*p == '\0')) return dflt; - if (isalpha(*(unsigned char *)p)) { - if (!strncmp(p, SMART, SLEN(SMART))) { - init = INIT_SELF; - p += SLEN(SMART); - } else if (!strncmp(p, REGULAR, SLEN(REGULAR))) { - init = INIT_REGULAR; - p += SLEN(REGULAR); - } else if (!strncmp(p, RANDOM, SLEN(RANDOM))) { - init = INIT_RANDOM; - p += SLEN(RANDOM); - } - else init = dflt; - } - else if (isdigit(*(unsigned char *)p)) { - init = INIT_RANDOM; - } - - if (init == INIT_RANDOM) { - long seed; - /* Check for seed value */ - if (!isdigit(*(unsigned char *)p) || sscanf(p, "%ld", &seed) < 1) { -#if defined(MSWIN32) || defined(WIN32) - seed = (unsigned) time(NULL); -#else - seed = (unsigned) getpid() ^ (unsigned) time(NULL); -#endif - sprintf(smallbuf, "%ld", seed); - agset(G, "start", smallbuf); - } - *seedp = seed; - } - return init; -} - -/* checkExp: - * Allow various weights for the scale factor in used to calculate stress. - * At present, only 1 or 2 are allowed, with 2 the default. - */ -#define exp_name "stresswt" - -static int checkExp (graph_t * G) -{ - int exp = late_int(G, agfindgraphattr(G, exp_name), 2, 0); - if ((exp == 0) || (exp > 2)) { - agerr (AGWARN, "%s attribute value must be 1 or 2 - ignoring\n", exp_name); - exp = 2; - } - return exp; -} - -/* checkStart: - * Analyzes start attribute, setting seed. - * If set, - * If start is regular, places nodes and returns INIT_REGULAR. - * If start is self, returns INIT_SELF. - * If start is random, returns INIT_RANDOM - * Set RNG seed - * else return default - * - */ -int checkStart(graph_t * G, int nG, int dflt) -{ - long seed; - int init; - - seed = 1; - init = setSeed (G, dflt, &seed); - if (N_pos && (init != INIT_RANDOM)) { - agerr(AGWARN, "node positions are ignored unless start=random\n"); - } - if (init == INIT_REGULAR) initRegular(G, nG); - srand48(seed); - return init; -} - -#ifdef DEBUG_COLA -void dumpData(graph_t * g, vtx_data * gp, int nv, int ne) -{ - node_t *v; - int i, j, n; - - fprintf(stderr, "#nodes %d #edges %d\n", nv, ne); - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - fprintf(stderr, "\"%s\" %d\n", agnameof(v), ND_id(v)); - } - for (i = 0; i < nv; i++) { - n = gp[i].nedges; - fprintf(stderr, "[%d] %d\n", i, n); - for (j = 0; j < n; j++) { - fprintf(stderr, " %3d", gp[i].edges[j]); - } - fputs("\n", stderr); - if (gp[i].ewgts) { - fputs(" ewgts", stderr); - for (j = 0; j < n; j++) { - fprintf(stderr, " %3f", gp[i].ewgts[j]); - } - fputs("\n", stderr); - } - if (gp[i].eweights) { - fputs(" eweights", stderr); - for (j = 0; j < n; j++) { - fprintf(stderr, " %3f", gp[i].eweights[j]); - } - fputs("\n", stderr); - } - if (gp[i].edists) { - fputs(" edists", stderr); - for (j = 0; j < n; j++) { - fprintf(stderr, " %3f", gp[i].edists[j]); - } - fputs("\n", stderr); - } - fputs("\n", stderr); - - } -} -void dumpClusterData (cluster_data* dp) -{ - int i, j, sz; - - fprintf (stderr, "nvars %d nclusters %d ntoplevel %d\n", dp->nvars, dp->nclusters, dp->ntoplevel); - fprintf (stderr, "Clusters:\n"); - for (i = 0; i < dp->nclusters; i++) { - sz = dp->clustersizes[i]; - fprintf (stderr, " [%d] %d vars\n", i, sz); - for (j = 0; j < sz; j++) - fprintf (stderr, " %d", dp->clusters[i][j]); - fprintf (stderr, "\n"); - } - - - fprintf (stderr, "Toplevel:\n"); - for (i = 0; i < dp->ntoplevel; i++) - fprintf (stderr, " %d\n", dp->toplevel[i]); - - fprintf (stderr, "Boxes:\n"); - for (i = 0; i < dp->nclusters; i++) { - boxf bb = dp->bb[i]; - fprintf (stderr, " (%f,%f) (%f,%f)\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } -} -void dumpOpts (ipsep_options* opp, int nv) -{ - int i; - - fprintf (stderr, "diredges %d edge_gap %f noverlap %d gap (%f,%f)\n", opp->diredges, opp->edge_gap, opp->noverlap, opp->gap.x, opp->gap.y); - for (i = 0; i < nv; i++) - fprintf (stderr, " (%f,%f)\n", opp->nsize[i].x, opp->nsize[i].y); - if (opp->clusters) - dumpClusterData (opp->clusters); -} -#endif - -/* majorization: - * Solve stress using majorization. - * Old neato attributes to incorporate: - * weight - * mode will be MODE_MAJOR, MODE_HIER or MODE_IPSEP - */ -static void -majorization(graph_t *mg, graph_t * g, int nv, int mode, int model, int dim, int steps, adjust_data* am) -{ - double **coords; - int ne; - int i, rv = 0; - node_t *v; - vtx_data *gp; - node_t** nodes; -#ifdef DIGCOLA -#ifdef IPSEPCOLA - expand_t margin; -#endif -#endif - int init = checkStart(g, nv, (mode == MODE_HIER ? INIT_SELF : INIT_RANDOM)); - int opts = checkExp (g); - - if (init == INIT_SELF) - opts |= opt_smart_init; - - coords = N_GNEW(dim, double *); - coords[0] = N_GNEW(nv * dim, double); - for (i = 1; i < Ndim; i++) { - coords[i] = coords[0] + i * nv; - } - if (Verbose) { - fprintf(stderr, "model %d smart_init %d stresswt %d iterations %d tol %f\n", - model, (init == INIT_SELF), opts & opt_exp_flag, MaxIter, Epsilon); - fprintf(stderr, "convert graph: "); - start_timer(); - fprintf(stderr, "majorization\n"); -// fprintf(stderr, "%i\n", count_nodes(g)); - } - gp = makeGraphData(g, nv, &ne, mode, model, &nodes); - - if (Verbose) { - fprintf(stderr, "%d nodes %.2f sec\n", nv, elapsed_sec()); - } - -#ifdef DIGCOLA - if (mode != MODE_MAJOR) { - double lgap = late_double(g, agfindgraphattr(g, "levelsgap"), 0.0, -MAXDOUBLE); - if (mode == MODE_HIER) { - rv = stress_majorization_with_hierarchy(gp, nv, ne, coords, nodes, Ndim, - opts, model, MaxIter, lgap); - } -#ifdef IPSEPCOLA - else { - char* str; - ipsep_options opt; - pointf* nsize; - cluster_data *cs = (cluster_data*)cluster_map(mg,g); - nsize = N_GNEW(nv, pointf); - opt.edge_gap = lgap; -#ifdef MOSEK - opt.mosek = 0; -#endif /* MOSEK */ - opt.nsize = nsize; - opt.clusters = cs; - str = agget(g, "diredgeconstraints"); - if (mapbool(str)) { - opt.diredges = 1; - if(Verbose) - fprintf(stderr,"Generating Edge Constraints...\n"); - } else if (str && !strncasecmp(str,"hier",4)) { - opt.diredges = 2; - if(Verbose) - fprintf(stderr,"Generating DiG-CoLa Edge Constraints...\n"); - } - else opt.diredges = 0; - if (am->mode == AM_IPSEP) { - opt.noverlap = 1; - if(Verbose) - fprintf(stderr,"Generating Non-overlap Constraints...\n"); - } else if (am->mode == AM_VPSC) { - opt.noverlap = 2; - if(Verbose) - fprintf(stderr,"Removing overlaps as postprocess...\n"); - } - else opt.noverlap = 0; -#ifdef MOSEK - str = agget(g, "mosek"); - if(str && !strncmp(str,"true",4)) { - opt.mosek = 1; - if(Verbose) - fprintf(stderr,"Using Mosek for constraint optimization...\n"); - } -#endif /* MOSEK */ - margin = sepFactor (g); - /* Multiply by 2 since opt.gap is the gap size, not the margin */ - if (margin.doAdd) { - opt.gap.x = 2.0*PS2INCH(margin.x); - opt.gap.y = 2.0*PS2INCH(margin.y); - } - else opt.gap.x = opt.gap.y = 2.0*PS2INCH(DFLT_MARGIN); - if(Verbose) - fprintf(stderr,"gap=%f,%f\n",opt.gap.x,opt.gap.y); - for (i=0, v = agfstnode(g); v; v = agnxtnode(g, v),i++) { - nsize[i].x = ND_width(v); - nsize[i].y = ND_height(v); - } - -#ifdef DEBUG_COLA - fprintf (stderr, "nv %d ne %d Ndim %d model %d MaxIter %d\n", nv, ne, Ndim, model, MaxIter); - fprintf (stderr, "Nodes:\n"); - for (i = 0; i < nv; i++) { - fprintf (stderr, " %s (%f,%f)\n", nodes[i]->name, coords[0][i], coords[1][i]); - } - fprintf (stderr, "\n"); - dumpData(g, gp, nv, ne); - fprintf (stderr, "\n"); - dumpOpts (&opt, nv); -#endif - rv = stress_majorization_cola(gp, nv, ne, coords, nodes, Ndim, model, MaxIter, &opt); - freeClusterData(cs); - free (nsize); - } -#endif - } - else -#endif - rv = stress_majorization_kD_mkernel(gp, nv, ne, coords, nodes, Ndim, opts, model, MaxIter); - - if (rv < 0) { - agerr(AGPREV, "layout aborted\n"); - } - else for (v = agfstnode(g); v; v = agnxtnode(g, v)) { /* store positions back in nodes */ - int idx = ND_id(v); - int i; - for (i = 0; i < Ndim; i++) { - ND_pos(v)[i] = coords[i][idx]; - } - } - freeGraphData(gp); - free(coords[0]); - free(coords); - free(nodes); -} - -static void subset_model(Agraph_t * G, int nG) -{ - int i, j, ne; - DistType **Dij; - vtx_data *gp; - - gp = makeGraphData(G, nG, &ne, MODE_KK, MODEL_SUBSET, NULL); - Dij = compute_apsp_artifical_weights(gp, nG); - for (i = 0; i < nG; i++) { - for (j = 0; j < nG; j++) { - GD_dist(G)[i][j] = Dij[i][j]; - } - } - free(Dij[0]); - free(Dij); - freeGraphData(gp); -} - -/* mds_model: - * Assume the matrix already contains shortest path values. - * Use the actual lengths provided the input for edges. - */ -static void mds_model(graph_t * g, int nG) -{ - long i, j; - node_t *v; - edge_t *e; - - for (v = agfstnode(g); v; v = agnxtnode(g, v)) { - for (e = agfstout(g, v); e; e = agnxtout(g, e)) { - i = AGSEQ(agtail(e)); - j = AGSEQ(aghead(e)); - if (i == j) - continue; - GD_dist(g)[i][j] = GD_dist(g)[j][i] = ED_dist(e); - } - } -} - -/* kkNeato: - * Solve using gradient descent a la Kamada-Kawai. - */ -static void kkNeato(Agraph_t * g, int nG, int model) -{ - if (model == MODEL_SUBSET) { - subset_model(g, nG); - } else if (model == MODEL_CIRCUIT) { - if (!circuit_model(g, nG)) { - agerr(AGWARN, - "graph %s is disconnected. Hence, the circuit model\n", - agnameof(g)); - agerr(AGPREV, - "is undefined. Reverting to the shortest path model.\n"); - agerr(AGPREV, - "Alternatively, consider running neato using -Gpack=true or decomposing\n"); - agerr(AGPREV, "the graph into connected components.\n"); - shortest_path(g, nG); - } - } else if (model == MODEL_MDS) { - shortest_path(g, nG); - mds_model(g, nG); - } else - shortest_path(g, nG); - initial_positions(g, nG); - diffeq_model(g, nG); - if (Verbose) { - fprintf(stderr, "Solving model %d iterations %d tol %f\n", - model, MaxIter, Epsilon); - start_timer(); - } - solve_model(g, nG); -} - -/* neatoLayout: - * Use stress optimization to layout a single component - */ -static void -neatoLayout(Agraph_t * mg, Agraph_t * g, int layoutMode, int layoutModel, - adjust_data* am) -{ - int nG; - char *str; - - if ((str = agget(g, "maxiter"))) - MaxIter = atoi(str); - else if (layoutMode == MODE_MAJOR) - MaxIter = DFLT_ITERATIONS; - else - MaxIter = 100 * agnnodes(g); - - nG = scan_graph_mode(g, layoutMode); - if ((nG < 2) || (MaxIter < 0)) - return; - if (layoutMode) - majorization(mg, g, nG, layoutMode, layoutModel, Ndim, MaxIter, am); - else - kkNeato(g, nG, layoutModel); -} - -/* addZ; - * If dimension == 3 and z attribute is declared, - * attach z value to nodes if not defined. - */ -static void addZ (Agraph_t* g) -{ - node_t* n; - char buf[BUFSIZ]; - - if ((Ndim >= 3) && N_z) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - sprintf(buf, "%lf", POINTS_PER_INCH * (ND_pos(n)[2])); - agxset(n, N_z, buf); - } - } -} - -#ifdef IPSEPCOLA -static void -addCluster (graph_t* g) -{ - graph_t *subg; - for (subg = agfstsubg(agroot(g)); subg; subg = agnxtsubg(subg)) { - if (!strncmp(agnameof(subg), "cluster", 7)) { - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - add_cluster(g, subg); - compute_bb(subg); - } - } -} -#endif - -/* doEdges: - * Simple wrapper to compute graph's bb, then route edges after - * a possible aspect ratio adjustment. - */ -static void doEdges(Agraph_t* g) -{ - compute_bb(g); - spline_edges0(g, TRUE); -} - -/* neato_layout: - */ -void neato_layout(Agraph_t * g) -{ - int layoutMode; - int model; - pack_mode mode; - pack_info pinfo; - adjust_data am; - double save_scale = PSinputscale; - - if (Nop) { - int ret; - PSinputscale = POINTS_PER_INCH; - neato_init_graph(g); - addZ (g); - ret = init_nop(g, 1); - if (ret < 0) { - agerr(AGPREV, "as required by the -n flag\n"); - return; - } - else gv_postprocess(g, 0); - } else { - boolean noTranslate = mapBool(agget(g, "notranslate"), FALSE); - PSinputscale = get_inputscale (g); - neato_init_graph(g); - layoutMode = neatoMode(g); - graphAdjustMode (g, &am, 0); - model = neatoModel(g); - mode = getPackModeInfo (g, l_undef, &pinfo); - Pack = getPack(g, -1, CL_OFFSET); - /* pack if just packmode defined. */ - if (mode == l_undef) { - /* If the user has not indicated packing but we are - * using the new neato, turn packing on. - */ - if ((Pack < 0) && layoutMode) - Pack = CL_OFFSET; - pinfo.mode = l_node; - } else if (Pack < 0) - Pack = CL_OFFSET; - if (Pack >= 0) { - graph_t *gc; - graph_t **cc; - int n_cc; - int i; - boolean pin; - - cc = pccomps(g, &n_cc, cc_pfx, &pin); - - if (n_cc > 1) { - boolean *bp; - for (i = 0; i < n_cc; i++) { - gc = cc[i]; - nodeInduce(gc); - neatoLayout(g, gc, layoutMode, model, &am); - removeOverlapWith(gc, &am); - setEdgeType (gc, ET_LINE); - if (noTranslate) doEdges(gc); - else spline_edges(gc); - } - if (pin) { - bp = N_NEW(n_cc, boolean); - bp[0] = TRUE; - } else - bp = 0; - pinfo.margin = Pack; - pinfo.fixed = bp; - pinfo.doSplines = 1; - packGraphs(n_cc, cc, g, &pinfo); - if (bp) - free(bp); - } - else { - neatoLayout(g, g, layoutMode, model, &am); - removeOverlapWith(g, &am); - if (noTranslate) doEdges(g); - else spline_edges(g); - } - compute_bb(g); - addZ (g); - - /* cleanup and remove component subgraphs */ - for (i = 0; i < n_cc; i++) { - gc = cc[i]; - free_scan_graph(gc); - agdelrec (gc, "Agraphinfo_t"); - agdelete(g, gc); - } - free (cc); -#ifdef IPSEPCOLA - addCluster (g); -#endif - } else { - neatoLayout(g, g, layoutMode, model, &am); - removeOverlapWith(g, &am); - addZ (g); - if (noTranslate) doEdges(g); - else spline_edges(g); - } - gv_postprocess(g, !noTranslate); - } - PSinputscale = save_scale; -} diff --git a/internal/ccall/neatogen/neatoprocs.h b/internal/ccall/neatogen/neatoprocs.h deleted file mode 100644 index 63173c1..0000000 --- a/internal/ccall/neatogen/neatoprocs.h +++ /dev/null @@ -1,79 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef NEATOPROCS_H -#define NEATOPROCS_H - -#ifdef __cplusplus -extern "C" { -#endif -#include "adjust.h" - - extern int allow_edits(int); - extern void avoid_cycling(graph_t *, Agnode_t *, double *); - extern int checkStart(graph_t * G, int nG, int); - extern Agnode_t *choose_node(graph_t *, int); - extern int circuit_model(graph_t *, int); - extern void D2E(Agraph_t *, int, int, double *); - extern void diffeq_model(graph_t *, int); - extern double distvec(double *, double *, double *); - extern void final_energy(graph_t *, int); - extern double fpow32(double); - extern Ppolyline_t getPath(edge_t *, vconfig_t *, int, Ppoly_t **, - int); - extern void heapdown(Agnode_t *); - extern void heapup(Agnode_t *); - extern void initial_positions(graph_t *, int); - extern int init_port(Agnode_t *, Agedge_t *, char *, boolean); - extern void jitter3d(Agnode_t *, int); - extern void jitter_d(Agnode_t *, int, int); - extern Ppoly_t *makeObstacle(node_t * n, expand_t*, boolean ); - extern void makeSelfArcs(path * P, edge_t * e, int stepx); - extern void makeSpline(graph_t*, edge_t *, Ppoly_t **, int, boolean); - extern void make_spring(graph_t *, Agnode_t *, Agnode_t *, double); - extern void move_node(graph_t *, int, Agnode_t *); - extern int init_nop(graph_t * g, int); - extern void neato_cleanup(graph_t * g); - extern node_t *neato_dequeue(void); - extern void neato_enqueue(node_t *); - extern void neato_init_node(node_t * n); - extern void neato_layout(Agraph_t * g); - extern int Plegal_arrangement(Ppoly_t ** polys, int n_polys); - extern void randompos(Agnode_t *, int); - extern void s1(graph_t *, node_t *); - extern int scan_graph(graph_t *); - extern int scan_graph_mode(graph_t * G, int mode); - extern void free_scan_graph(graph_t *); - extern int setSeed (graph_t*, int dflt, long* seedp); - extern void shortest_path(graph_t *, int); - extern void solve(double *, double *, double *, int); - extern void solve_model(graph_t *, int); - extern int solveCircuit(int nG, double **Gm, double **Gm_inv); - extern void spline_edges(Agraph_t *); - extern void spline_edges0(Agraph_t *, boolean); - extern int spline_edges1(graph_t * g, int); - extern int splineEdges(graph_t *, - int (*edgefn) (graph_t *, expand_t*, int), int); - extern void neato_translate(Agraph_t * g); - extern boolean neato_set_aspect(graph_t * g); - extern void toggle(int); - extern int user_pos(Agsym_t *, Agsym_t *, Agnode_t *, int); - extern double **new_array(int i, int j, double val); - extern void free_array(double **rv); - extern int matinv(double **A, double **Ainv, int n); - -#undef extern -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/neatogen/neatosplines.c b/internal/ccall/neatogen/neatosplines.c deleted file mode 100644 index 40a6e62..0000000 --- a/internal/ccall/neatogen/neatosplines.c +++ /dev/null @@ -1,1107 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include "neato.h" -#include "adjust.h" -#include "pathplan.h" -#include "vispath.h" -#include "multispline.h" -#ifndef HAVE_DRAND48 -extern double drand48(void); -#endif - -#ifdef ORTHO -#include -#endif - -extern void printvis(vconfig_t * cp); -extern int in_poly(Ppoly_t argpoly, Ppoint_t q); - - -static boolean spline_merge(node_t * n) -{ - return FALSE; -} - -static boolean swap_ends_p(edge_t * e) -{ - return FALSE; -} - -static splineInfo sinfo = { swap_ends_p, spline_merge }; - -static void -make_barriers(Ppoly_t ** poly, int npoly, int pp, int qp, - Pedge_t ** barriers, int *n_barriers) -{ - int i, j, k, n, b; - Pedge_t *bar; - - n = 0; - for (i = 0; i < npoly; i++) { - if (i == pp) - continue; - if (i == qp) - continue; - n = n + poly[i]->pn; - } - bar = N_GNEW(n, Pedge_t); - b = 0; - for (i = 0; i < npoly; i++) { - if (i == pp) - continue; - if (i == qp) - continue; - for (j = 0; j < poly[i]->pn; j++) { - k = j + 1; - if (k >= poly[i]->pn) - k = 0; - bar[b].a = poly[i]->ps[j]; - bar[b].b = poly[i]->ps[k]; - b++; - } - } - assert(b == n); - *barriers = bar; - *n_barriers = n; -} - -/* genPt: - */ -static Ppoint_t genPt(double x, double y, pointf c) -{ - Ppoint_t p; - - p.x = x + c.x; - p.y = y + c.y; - return p; -} - - -/* recPt: - */ -static Ppoint_t recPt(double x, double y, pointf c, expand_t* m) -{ - Ppoint_t p; - - p.x = (x * m->x) + c.x; - p.y = (y * m->y) + c.y; - return p; -} - -typedef struct { - node_t *n1; - pointf p1; - node_t *n2; - pointf p2; -} edgeinfo; -typedef struct { - Dtlink_t link; - edgeinfo id; - edge_t *e; -} edgeitem; - -static void *newitem(Dt_t * d, edgeitem * obj, Dtdisc_t * disc) -{ - edgeitem *newp; - - NOTUSED(disc); - newp = NEW(edgeitem); - newp->id = obj->id; - newp->e = obj->e; - ED_count(newp->e) = 1; - - return newp; -} - -static void freeitem(Dt_t * d, edgeitem * obj, Dtdisc_t * disc) -{ - free(obj); -} - -static int -cmpitems(Dt_t * d, edgeinfo * key1, edgeinfo * key2, Dtdisc_t * disc) -{ - int x; - - if (key1->n1 > key2->n1) - return 1; - if (key1->n1 < key2->n1) - return -1; - if (key1->n2 > key2->n2) - return 1; - if (key1->n2 < key2->n2) - return -1; - - if ((x = key1->p1.x - key2->p1.x)) - return x; - if ((x = key1->p1.y - key2->p1.y)) - return x; - if ((x = key1->p2.x - key2->p2.x)) - return x; - return (key1->p2.y - key2->p2.y); -} - -Dtdisc_t edgeItemDisc = { - offsetof(edgeitem, id), - sizeof(edgeinfo), - offsetof(edgeitem, link), - (Dtmake_f) newitem, - (Dtfree_f) freeitem, - (Dtcompar_f) cmpitems, - 0, - 0, - 0 -}; - -/* equivEdge: - * See if we have already encountered an edge between the same - * node:port pairs. If so, return the earlier edge. If not, - * this edge is added to map and returned. - * We first have to canonicalize the key fields using a lexicographic - * ordering. - */ -static edge_t *equivEdge(Dt_t * map, edge_t * e) -{ - edgeinfo test; - edgeitem dummy; - edgeitem *ip; - - if (agtail(e) < aghead(e)) { - test.n1 = agtail(e); - test.p1 = ED_tail_port(e).p; - test.n2 = aghead(e); - test.p2 = ED_head_port(e).p; - } else if (agtail(e) > aghead(e)) { - test.n2 = agtail(e); - test.p2 = ED_tail_port(e).p; - test.n1 = aghead(e); - test.p1 = ED_head_port(e).p; - } else { - pointf hp = ED_head_port(e).p; - pointf tp = ED_tail_port(e).p; - if (tp.x < hp.x) { - test.p1 = tp; - test.p2 = hp; - } else if (tp.x > hp.x) { - test.p1 = hp; - test.p2 = tp; - } else if (tp.y < hp.y) { - test.p1 = tp; - test.p2 = hp; - } else if (tp.y > hp.y) { - test.p1 = hp; - test.p2 = tp; - } else { - test.p1 = test.p2 = tp; - } - test.n2 = test.n1 = agtail(e); - } - dummy.id = test; - dummy.e = e; - ip = dtinsert(map, &dummy); - return ip->e; -} - - -/* makeSelfArcs: - * Generate loops. We use the library routine makeSelfEdge - * which also places the labels. - * We have to handle port labels here. - * as well as update the bbox from edge labels. - */ -void makeSelfArcs(path * P, edge_t * e, int stepx) -{ - int cnt = ED_count(e); - - if ((cnt == 1) || Concentrate) { - edge_t *edges1[1]; - edges1[0] = e; - makeSelfEdge(P, edges1, 0, 1, stepx, stepx, &sinfo); - if (ED_label(e)) - updateBB(agraphof(agtail(e)), ED_label(e)); - makePortLabels(e); - } else { - int i; - edge_t **edges = N_GNEW(cnt, edge_t *); - for (i = 0; i < cnt; i++) { - edges[i] = e; - e = ED_to_virt(e); - } - makeSelfEdge(P, edges, 0, cnt, stepx, stepx, &sinfo); - for (i = 0; i < cnt; i++) { - e = edges[i]; - if (ED_label(e)) - updateBB(agraphof(agtail(e)), ED_label(e)); - makePortLabels(e); - } - free(edges); - } -} - -/* makeObstacle: - * Given a node, return an obstacle reflecting the - * node's geometry. pmargin specifies how much space to allow - * around the polygon. - * Returns the constructed polygon on success, NULL on failure. - * Failure means the node shape is not supported. - * - * If isOrtho is true, we have to use the bounding box of each node. - * - * The polygon has its vertices in CW order. - * - */ -Ppoly_t *makeObstacle(node_t * n, expand_t* pmargin, boolean isOrtho) -{ - Ppoly_t *obs; - polygon_t *poly; - double adj = 0.0; - int j, sides; - pointf polyp; - boxf b; - pointf pt; - field_t *fld; - epsf_t *desc; - int isPoly; - pointf* verts = NULL; - pointf vs[4]; - pointf p; - pointf margin; - - switch (shapeOf(n)) { - case SH_POLY: - case SH_POINT: - obs = NEW(Ppoly_t); - poly = (polygon_t *) ND_shape_info(n); - if (isOrtho) { - isPoly = 1; - sides = 4; - verts = vs; - margin.x = margin.y = 0; - /* For fixedshape, we can't use the width and height, as this includes - * the label. We only want to use the actual node shape. - */ - if (poly->option & FIXEDSHAPE) { - b = polyBB (poly); - vs[0] = b.LL; - vs[1].x = b.UR.x; - vs[1].y = b.LL.y; - vs[2] = b.UR; - vs[3].x = b.LL.x; - vs[3].y = b.UR.y; - } else { - p.x = -ND_lw(n); - p.y = -ND_ht(n)/2.0; - vs[0] = p; - p.x = ND_lw(n); - vs[1] = p; - p.y = ND_ht(n)/2.0; - vs[2] = p; - p.x = -ND_lw(n); - vs[3] = p; - } - } - else if (poly->sides >= 3) { - isPoly = 1; - sides = poly->sides; - verts = poly->vertices; - margin.x = pmargin->x; - margin.y = pmargin->y; - } else { /* ellipse */ - isPoly = 0; - sides = 8; - adj = drand48() * .01; - } - obs->pn = sides; - obs->ps = N_NEW(sides, Ppoint_t); - /* assuming polys are in CCW order, and pathplan needs CW */ - for (j = 0; j < sides; j++) { - double xmargin = 0.0, ymargin = 0.0; - if (isPoly) { - if (pmargin->doAdd) { - if (sides == 4) { - switch (j) { - case 0 : - xmargin = margin.x; - ymargin = margin.y; - break; - case 1 : - xmargin = -margin.x; - ymargin = margin.y; - break; - case 2 : - xmargin = -margin.x; - ymargin = -margin.y; - break; - case 3 : - xmargin = margin.x; - ymargin = -margin.y; - break; - } - polyp.x = verts[j].x + xmargin; - polyp.y = verts[j].y + ymargin; - } - else { - double h = LEN(verts[j].x,verts[j].y); - polyp.x = verts[j].x * (1.0 + margin.x/h); - polyp.y = verts[j].y * (1.0 + margin.y/h); - } - } - else { - polyp.x = verts[j].x * margin.x; - polyp.y = verts[j].y * margin.y; - } - } else { - double c, s; - c = cos(2.0 * M_PI * j / sides + adj); - s = sin(2.0 * M_PI * j / sides + adj); - if (pmargin->doAdd) { - polyp.x = c*(ND_lw(n)+ND_rw(n)+pmargin->x) / 2.0; - polyp.y = s*(ND_ht(n)+pmargin->y) / 2.0; - } - else { - polyp.x = pmargin->x * c * (ND_lw(n) + ND_rw(n)) / 2.0; - polyp.y = pmargin->y * s * ND_ht(n) / 2.0; - } - } - obs->ps[sides - j - 1].x = polyp.x + ND_coord(n).x; - obs->ps[sides - j - 1].y = polyp.y + ND_coord(n).y; - } - break; - case SH_RECORD: - fld = (field_t *) ND_shape_info(n); - b = fld->b; - obs = NEW(Ppoly_t); - obs->pn = 4; - obs->ps = N_NEW(4, Ppoint_t); - /* CW order */ - pt = ND_coord(n); - if (pmargin->doAdd) { - obs->ps[0] = genPt(b.LL.x-pmargin->x, b.LL.y-pmargin->y, pt); - obs->ps[1] = genPt(b.LL.x-pmargin->x, b.UR.y+pmargin->y, pt); - obs->ps[2] = genPt(b.UR.x+pmargin->x, b.UR.y+pmargin->y, pt); - obs->ps[3] = genPt(b.UR.x+pmargin->x, b.LL.y-pmargin->y, pt); - } - else { - obs->ps[0] = recPt(b.LL.x, b.LL.y, pt, pmargin); - obs->ps[1] = recPt(b.LL.x, b.UR.y, pt, pmargin); - obs->ps[2] = recPt(b.UR.x, b.UR.y, pt, pmargin); - obs->ps[3] = recPt(b.UR.x, b.LL.y, pt, pmargin); - } - break; - case SH_EPSF: - desc = (epsf_t *) (ND_shape_info(n)); - obs = NEW(Ppoly_t); - obs->pn = 4; - obs->ps = N_NEW(4, Ppoint_t); - /* CW order */ - pt = ND_coord(n); - if (pmargin->doAdd) { - obs->ps[0] = genPt(-ND_lw(n)-pmargin->x, -ND_ht(n)-pmargin->y,pt); - obs->ps[1] = genPt(-ND_lw(n)-pmargin->x, ND_ht(n)+pmargin->y,pt); - obs->ps[2] = genPt(ND_rw(n)+pmargin->x, ND_ht(n)+pmargin->y,pt); - obs->ps[3] = genPt(ND_rw(n)+pmargin->x, -ND_ht(n)-pmargin->y,pt); - } - else { - obs->ps[0] = recPt(-ND_lw(n), -ND_ht(n), pt, pmargin); - obs->ps[1] = recPt(-ND_lw(n), ND_ht(n), pt, pmargin); - obs->ps[2] = recPt(ND_rw(n), ND_ht(n), pt, pmargin); - obs->ps[3] = recPt(ND_rw(n), -ND_ht(n), pt, pmargin); - } - break; - default: - obs = NULL; - break; - } - return obs; -} - -/* getPath - * Construct the shortest path from one endpoint of e to the other. - * The obstacles and their number are given by obs and npoly. - * vconfig is a precomputed data structure to help in the computation. - * If chkPts is true, the function finds the polygons, if any, containing - * the endpoints and tells the shortest path computation to ignore them. - * Assumes this info is set in ND_lim, usually from _spline_edges. - * Returns the shortest path. - */ -Ppolyline_t -getPath(edge_t * e, vconfig_t * vconfig, int chkPts, Ppoly_t ** obs, - int npoly) -{ - Ppolyline_t line; - int pp, qp; - Ppoint_t p, q; - - p = add_pointf(ND_coord(agtail(e)), ED_tail_port(e).p); - q = add_pointf(ND_coord(aghead(e)), ED_head_port(e).p); - - /* determine the polygons (if any) that contain the endpoints */ - pp = qp = POLYID_NONE; - if (chkPts) { - pp = ND_lim(agtail(e)); - qp = ND_lim(aghead(e)); -/* - for (i = 0; i < npoly; i++) { - if ((pp == POLYID_NONE) && in_poly(*obs[i], p)) - pp = i; - if ((qp == POLYID_NONE) && in_poly(*obs[i], q)) - qp = i; - } -*/ - } - Pobspath(vconfig, p, pp, q, qp, &line); - return line; -} - -/* makePolyline: - */ -static void -makePolyline(graph_t* g, edge_t * e) -{ - Ppolyline_t spl, line = ED_path(e); - Ppoint_t p0, q0; - - p0 = line.ps[0]; - q0 = line.ps[line.pn - 1]; - make_polyline (line, &spl); - if (Verbose > 1) - fprintf(stderr, "polyline %s %s\n", agnameof(agtail(e)), agnameof(aghead(e))); - clip_and_install(e, aghead(e), spl.ps, spl.pn, &sinfo); - addEdgeLabels(g, e, p0, q0); -} - -/* makeSpline: - * Construct a spline connecting the endpoints of e, avoiding the npoly - * obstacles obs. - * The resultant spline is attached to the edge, the positions of any - * edge labels are computed, and the graph's bounding box is recomputed. - * - * If chkPts is true, the function checks if one or both of the endpoints - * is on or inside one of the obstacles and, if so, tells the shortest path - * computation to ignore them. - */ -void makeSpline(graph_t* g, edge_t * e, Ppoly_t ** obs, int npoly, boolean chkPts) -{ - Ppolyline_t line, spline; - Pvector_t slopes[2]; - int i, n_barriers; - int pp, qp; - Ppoint_t p, q; - Pedge_t *barriers; - - line = ED_path(e); - p = line.ps[0]; - q = line.ps[line.pn - 1]; - /* determine the polygons (if any) that contain the endpoints */ - pp = qp = POLYID_NONE; - if (chkPts) - for (i = 0; i < npoly; i++) { - if ((pp == POLYID_NONE) && in_poly(*obs[i], p)) - pp = i; - if ((qp == POLYID_NONE) && in_poly(*obs[i], q)) - qp = i; - } - - make_barriers(obs, npoly, pp, qp, &barriers, &n_barriers); - slopes[0].x = slopes[0].y = 0.0; - slopes[1].x = slopes[1].y = 0.0; - if (Proutespline(barriers, n_barriers, line, slopes, &spline) < 0) { - agerr (AGERR, "makeSpline: failed to make spline edge (%s,%s)\n", agnameof(agtail(e)), agnameof(aghead(e))); - return; - } - - /* north why did you ever use int coords */ - if (Verbose > 1) - fprintf(stderr, "spline %s %s\n", agnameof(agtail(e)), agnameof(aghead(e))); - clip_and_install(e, aghead(e), spline.ps, spline.pn, &sinfo); - free(barriers); - addEdgeLabels(g, e, p, q); -} - - /* True if either head or tail has a port on its boundary */ -#define BOUNDARY_PORT(e) ((ED_tail_port(e).side)||(ED_head_port(e).side)) - -/* _spline_edges: - * Basic default routine for creating edges. - * If splines are requested, we construct the obstacles. - * If not, or nodes overlap, the function reverts to line segments. - * NOTE: intra-cluster edges are not constrained to - * remain in the cluster's bounding box and, conversely, a cluster's box - * is not altered to reflect intra-cluster edges. - * If Nop > 1 and the spline exists, it is just copied. - * NOTE: if edgetype = ET_NONE, we shouldn't be here. - */ -static int _spline_edges(graph_t * g, expand_t* pmargin, int edgetype) -{ - node_t *n; - edge_t *e; - edge_t *e0; - Ppoly_t **obs = 0; - Ppoly_t *obp; - int cnt, i = 0, npoly; - vconfig_t *vconfig = 0; - path *P = NULL; - int useEdges = (Nop > 1); - int legal = 0; - -#ifdef HAVE_GTS - router_t* rtr = 0; -#endif - - /* build configuration */ - if (edgetype >= ET_PLINE) { - obs = N_NEW(agnnodes(g), Ppoly_t *); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - obp = makeObstacle(n, pmargin, edgetype == ET_ORTHO); - if (obp) { - ND_lim(n) = i; - obs[i++] = obp; - } - else - ND_lim(n) = POLYID_NONE; - } - } else { - obs = 0; - } - npoly = i; - if (obs) { - if ((legal = Plegal_arrangement(obs, npoly))) { - if (edgetype != ET_ORTHO) vconfig = Pobsopen(obs, npoly); - } - else { - if (edgetype == ET_ORTHO) - agerr(AGWARN, "the bounding boxes of some nodes touch - falling back to straight line edges\n"); - else - agerr(AGWARN, "some nodes with margin (%.02f,%.02f) touch - falling back to straight line edges\n", pmargin->x, pmargin->y); - } - } - - /* route edges */ - if (Verbose) - fprintf(stderr, "Creating edges using %s\n", - (legal && (edgetype == ET_ORTHO)) ? "orthogonal lines" : - (vconfig ? (edgetype == ET_SPLINE ? "splines" : "polylines") : - "line segments")); - if (vconfig) { - /* path-finding pass */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - ED_path(e) = getPath(e, vconfig, TRUE, obs, npoly); - } - } - } -#ifdef ORTHO - else if (legal && (edgetype == ET_ORTHO)) { - orthoEdges (g, 0); - useEdges = 1; - } -#endif - - /* spline-drawing pass */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { -/* fprintf (stderr, "%s -- %s %d\n", agnameof(agtail(e)), agnameof(aghead(e)), ED_count(e)); */ - node_t *head = aghead(e); - if (useEdges && ED_spl(e)) { - addEdgeLabels(g, e, - add_pointf(ND_coord(n), ED_tail_port(e).p), - add_pointf(ND_coord(head), ED_head_port(e).p)); - } - else if (ED_count(e) == 0) continue; /* only do representative */ - else if (n == head) { /* self arc */ - if (!P) { - P = NEW(path); - P->boxes = N_NEW(agnnodes(g) + 20 * 2 * 9, boxf); - } - makeSelfArcs(P, e, GD_nodesep(g->root)); - } else if (vconfig) { /* ET_SPLINE or ET_PLINE */ -#ifdef HAVE_GTS - if ((ED_count(e) > 1) || BOUNDARY_PORT(e)) { - int fail = 0; - if ((ED_path(e).pn == 2) && !BOUNDARY_PORT(e)) - /* if a straight line can connect the ends */ - makeStraightEdge(g, e, edgetype, &sinfo); - else { - if (!rtr) rtr = mkRouter (obs, npoly); - fail = makeMultiSpline(g, e, rtr, edgetype == ET_PLINE); - } - if (!fail) continue; - } - /* We can probably remove this branch and just use - * makeMultiSpline. It can also catch the makeStraightEdge - * case. We could then eliminate all of the vconfig stuff. - */ -#endif - cnt = ED_count(e); - if (Concentrate) cnt = 1; /* only do representative */ - e0 = e; - for (i = 0; i < cnt; i++) { - if (edgetype == ET_SPLINE) - makeSpline(g, e0, obs, npoly, TRUE); - else - makePolyline(g, e0); - e0 = ED_to_virt(e0); - } - } else { - makeStraightEdge(g, e, edgetype, &sinfo); - } - } - } - -#ifdef HAVE_GTS - if (rtr) - freeRouter (rtr); -#endif - - if (vconfig) - Pobsclose (vconfig); - if (P) { - free(P->boxes); - free(P); - } - if (obs) { - for (i=0; i < npoly; i++) - free (obs[i]); - free (obs); - } - return 0; -} - -/* splineEdges: - * Main wrapper code for generating edges. - * Sets desired separation. - * Coalesces equivalent edges (edges * with the same endpoints). - * It then calls the edge generating function, and marks the - * spline phase complete. - * Returns 0 on success. - * - * The edge function is given the graph, the separation to be added - * around obstacles, and the type of edge. It must guarantee - * that all bounding boxes are current; in particular, the bounding box of - * g must reflect the addition of the edges. - */ -int -splineEdges(graph_t * g, int (*edgefn) (graph_t *, expand_t*, int), - int edgetype) -{ - node_t *n; - edge_t *e; - expand_t margin; - Dt_t *map; - - margin = esepFactor (g); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - resolvePorts (e); - } - } - - /* find equivalent edges */ - map = dtopen(&edgeItemDisc, Dtoset); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if ((Nop > 1 && ED_spl(e))) { - /* If Nop > 1 (use given edges) and e has a spline, it - * should have its own equivalence class. - */ - ED_count(e)++; - } else { - edge_t *leader = equivEdge(map, e); - if (leader != e) { - ED_count(leader)++; - ED_to_virt(e) = ED_to_virt(leader); - ED_to_virt(leader) = e; - } - } - } - } - dtclose(map); - - if (edgefn(g, &margin, edgetype)) - return 1; - - State = GVSPLINES; - return 0; -} - -/* spline_edges1: - * Construct edges using default algorithm and given splines value. - * Return 0 on success. - */ -int spline_edges1(graph_t * g, int edgetype) -{ - return splineEdges(g, _spline_edges, edgetype); -} - -/* spline_edges0: - * Sets the graph's aspect ratio. - * Check splines attribute and construct edges using default algorithm. - * If the splines attribute is defined but equal to "", skip edge routing. - * - * Assumes u.bb for has been computed for g and all clusters - * (not just top-level clusters), and that GD_bb(g).LL is at the origin. - * - * This last criterion is, I believe, mainly to simplify the code - * in neato_set_aspect. It would be good to remove this constraint, - * as this would allow nodes pinned on input to have the same coordinates - * when output in dot or plain format. - * - */ -void spline_edges0(graph_t * g, boolean set_aspect) -{ - int et = EDGE_TYPE (g); - if (set_aspect) neato_set_aspect(g); - if (et == ET_NONE) return; -#ifndef ORTHO - if (et == ET_ORTHO) { - agerr (AGWARN, "Orthogonal edges not yet supported\n"); - et = ET_PLINE; - GD_flags(g->root) &= ~ET_ORTHO; - GD_flags(g->root) |= ET_PLINE; - } -#endif - spline_edges1(g, et); -} - -/* shiftClusters: - */ -static void -shiftClusters (graph_t * g, pointf offset) -{ - int i; - - for (i = 1; i <= GD_n_cluster(g); i++) { - shiftClusters (GD_clust(g)[i], offset); - } - - GD_bb(g).UR.x -= offset.x; - GD_bb(g).UR.y -= offset.y; - GD_bb(g).LL.x -= offset.x; - GD_bb(g).LL.y -= offset.y; -} - -/* spline_edges: - * Compute bounding box, translate graph to origin, - * then construct all edges. - */ -void spline_edges(graph_t * g) -{ - node_t *n; - pointf offset; - - compute_bb(g); - offset.x = PS2INCH(GD_bb(g).LL.x); - offset.y = PS2INCH(GD_bb(g).LL.y); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] -= offset.x; - ND_pos(n)[1] -= offset.y; - } - - shiftClusters (g, GD_bb(g).LL); - spline_edges0(g, TRUE); -} - -/* scaleEdge: - * Scale edge by given factor. - * Assume ED_spl != NULL. - */ -static void scaleEdge(edge_t * e, double xf, double yf) -{ - int i, j; - pointf *pt; - bezier *bez; - pointf delh, delt; - - delh.x = POINTS_PER_INCH * (ND_pos(aghead(e))[0] * (xf - 1.0)); - delh.y = POINTS_PER_INCH * (ND_pos(aghead(e))[1] * (yf - 1.0)); - delt.x = POINTS_PER_INCH * (ND_pos(agtail(e))[0] * (xf - 1.0)); - delt.y = POINTS_PER_INCH * (ND_pos(agtail(e))[1] * (yf - 1.0)); - - bez = ED_spl(e)->list; - for (i = 0; i < ED_spl(e)->size; i++) { - pt = bez->list; - for (j = 0; j < bez->size; j++) { - if ((i == 0) && (j == 0)) { - pt->x += delt.x; - pt->y += delt.y; - } - else if ((i == ED_spl(e)->size-1) && (j == bez->size-1)) { - pt->x += delh.x; - pt->y += delh.y; - } - else { - pt->x *= xf; - pt->y *= yf; - } - pt++; - } - if (bez->sflag) { - bez->sp.x += delt.x; - bez->sp.y += delt.y; - } - if (bez->eflag) { - bez->ep.x += delh.x; - bez->ep.y += delh.y; - } - bez++; - } - - if (ED_label(e) && ED_label(e)->set) { - ED_label(e)->pos.x *= xf; - ED_label(e)->pos.y *= yf; - } - if (ED_head_label(e) && ED_head_label(e)->set) { - ED_head_label(e)->pos.x += delh.x; - ED_head_label(e)->pos.y += delh.y; - } - if (ED_tail_label(e) && ED_tail_label(e)->set) { - ED_tail_label(e)->pos.x += delt.x; - ED_tail_label(e)->pos.y += delt.y; - } -} - -/* scaleBB: - * Scale bounding box of clusters of g by given factors. - */ -static void scaleBB(graph_t * g, double xf, double yf) -{ - int i; - - GD_bb(g).UR.x *= xf; - GD_bb(g).UR.y *= yf; - GD_bb(g).LL.x *= xf; - GD_bb(g).LL.y *= yf; - - if (GD_label(g) && GD_label(g)->set) { - GD_label(g)->pos.x *= xf; - GD_label(g)->pos.y *= yf; - } - - for (i = 1; i <= GD_n_cluster(g); i++) - scaleBB(GD_clust(g)[i], xf, yf); -} - -/* translateE: - * Translate edge by offset. - * Assume ED_spl(e) != NULL - */ -static void translateE(edge_t * e, pointf offset) -{ - int i, j; - pointf *pt; - bezier *bez; - - bez = ED_spl(e)->list; - for (i = 0; i < ED_spl(e)->size; i++) { - pt = bez->list; - for (j = 0; j < bez->size; j++) { - pt->x -= offset.x; - pt->y -= offset.y; - pt++; - } - if (bez->sflag) { - bez->sp.x -= offset.x; - bez->sp.y -= offset.y; - } - if (bez->eflag) { - bez->ep.x -= offset.x; - bez->ep.y -= offset.y; - } - bez++; - } - - if (ED_label(e) && ED_label(e)->set) { - ED_label(e)->pos.x -= offset.x; - ED_label(e)->pos.y -= offset.y; - } - if (ED_xlabel(e) && ED_xlabel(e)->set) { - ED_xlabel(e)->pos.x -= offset.x; - ED_xlabel(e)->pos.y -= offset.y; - } - if (ED_head_label(e) && ED_head_label(e)->set) { - ED_head_label(e)->pos.x -= offset.x; - ED_head_label(e)->pos.y -= offset.y; - } - if (ED_tail_label(e) && ED_tail_label(e)->set) { - ED_tail_label(e)->pos.x -= offset.x; - ED_tail_label(e)->pos.y -= offset.y; - } -} - -/* translateG: - */ -static void translateG(Agraph_t * g, pointf offset) -{ - int i; - - GD_bb(g).UR.x -= offset.x; - GD_bb(g).UR.y -= offset.y; - GD_bb(g).LL.x -= offset.x; - GD_bb(g).LL.y -= offset.y; - - if (GD_label(g) && GD_label(g)->set) { - GD_label(g)->pos.x -= offset.x; - GD_label(g)->pos.y -= offset.y; - } - - for (i = 1; i <= GD_n_cluster(g); i++) - translateG(GD_clust(g)[i], offset); -} - -/* neato_translate: - */ -void neato_translate(Agraph_t * g) -{ - node_t *n; - edge_t *e; - pointf offset; - pointf ll; - - ll = GD_bb(g).LL; - - offset.x = PS2INCH(ll.x); - offset.y = PS2INCH(ll.y); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] -= offset.x; - ND_pos(n)[1] -= offset.y; - if (ND_xlabel(n) && ND_xlabel(n)->set) { - ND_xlabel(n)->pos.x -= ll.x; - ND_xlabel(n)->pos.y -= ll.y; - } - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - if (ED_spl(e)) - translateE(e, ll); - } - translateG(g, ll); -} - -/* _neato_set_aspect; - * Assume all bounding boxes are correct. - * Return false if no transform is performed. This includes - * the possiblity that a translation was done. - */ -static boolean _neato_set_aspect(graph_t * g) -{ - double xf, yf, actual, desired; - node_t *n; - boolean translated = FALSE; - - if (g->root != g) - return FALSE; - - /* compute_bb(g); */ - if (GD_drawing(g)->ratio_kind) { - if (GD_bb(g).LL.x || GD_bb(g).LL.y) { - translated = TRUE; - neato_translate (g); - } - /* normalize */ - if (GD_flip(g)) { - double t = GD_bb(g).UR.x; - GD_bb(g).UR.x = GD_bb(g).UR.y; - GD_bb(g).UR.y = t; - } - if (GD_drawing(g)->ratio_kind == R_FILL) { - /* fill is weird because both X and Y can stretch */ - if (GD_drawing(g)->size.x <= 0) - return (translated || FALSE); - xf = (double) GD_drawing(g)->size.x / GD_bb(g).UR.x; - yf = (double) GD_drawing(g)->size.y / GD_bb(g).UR.y; - /* handle case where one or more dimensions is too big */ - if ((xf < 1.0) || (yf < 1.0)) { - if (xf < yf) { - yf = yf / xf; - xf = 1.0; - } else { - xf = xf / yf; - yf = 1.0; - } - } - } else if (GD_drawing(g)->ratio_kind == R_EXPAND) { - if (GD_drawing(g)->size.x <= 0) - return (translated || FALSE); - xf = (double) GD_drawing(g)->size.x / GD_bb(g).UR.x; - yf = (double) GD_drawing(g)->size.y / GD_bb(g).UR.y; - if ((xf > 1.0) && (yf > 1.0)) { - double scale = MIN(xf, yf); - xf = yf = scale; - } else - return (translated || FALSE); - } else if (GD_drawing(g)->ratio_kind == R_VALUE) { - desired = GD_drawing(g)->ratio; - actual = (GD_bb(g).UR.y) / (GD_bb(g).UR.x); - if (actual < desired) { - yf = desired / actual; - xf = 1.0; - } else { - xf = actual / desired; - yf = 1.0; - } - } else - return (translated || FALSE); - if (GD_flip(g)) { - double t = xf; - xf = yf; - yf = t; - } - - if (Nop > 1) { - edge_t *e; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - if (ED_spl(e)) - scaleEdge(e, xf, yf); - } - } - /* Not relying on neato_nlist here allows us not to have to - * allocate it in the root graph and the connected components. - */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] = ND_pos(n)[0] * xf; - ND_pos(n)[1] = ND_pos(n)[1] * yf; - } - scaleBB(g, xf, yf); - return TRUE; - } - else - return FALSE; -} - -/* neato_set_aspect: - * Sets aspect ratio if necessary; real work done in _neato_set_aspect; - * This also copies the internal layout coordinates (ND_pos) to the - * external ones (ND_coord). - * - * Return true if some node moved. - */ -boolean neato_set_aspect(graph_t * g) -{ - node_t *n; - boolean moved = FALSE; - - /* setting aspect ratio only makes sense on root graph */ - moved = _neato_set_aspect(g); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_coord(n).x = POINTS_PER_INCH * (ND_pos(n)[0]); - ND_coord(n).y = POINTS_PER_INCH * (ND_pos(n)[1]); - } - return moved; -} - diff --git a/internal/ccall/neatogen/opt_arrangement.c b/internal/ccall/neatogen/opt_arrangement.c deleted file mode 100644 index 54ff4c1..0000000 --- a/internal/ccall/neatogen/opt_arrangement.c +++ /dev/null @@ -1,92 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "digcola.h" -#ifdef DIGCOLA -#include "matrix_ops.h" -#include "conjgrad.h" - -static void construct_b(vtx_data * graph, int n, double *b) -{ - /* construct a vector - b s.t. -b[i]=\sum_j -w_{ij}*\delta_{ij} - * (the "balance vector") - * Note that we build -b and not b, since our matrix is not the - * real laplacian L, but its negation: -L. - * So instead of solving Lx=b, we will solve -Lx=-b - */ - int i, j; - - double b_i = 0; - - for (i = 0; i < n; i++) { - b_i = 0; - if (graph[0].edists == NULL) { - continue; - } - for (j = 1; j < graph[i].nedges; j++) { /* skip the self loop */ - b_i += graph[i].ewgts[j] * graph[i].edists[j]; - } - b[i] = b_i; - } -} - -#define hierarchy_cg_tol 1e-3 - -int -compute_y_coords(vtx_data * graph, int n, double *y_coords, - int max_iterations) -{ - /* Find y coords of a directed graph by solving L*x = b */ - int i, j, rv = 0; - double *b = N_NEW(n, double); - double tol = hierarchy_cg_tol; - int nedges = 0; - float *uniform_weights; - float *old_ewgts = graph[0].ewgts; - - construct_b(graph, n, b); - - init_vec_orth1(n, y_coords); - - for (i = 0; i < n; i++) { - nedges += graph[i].nedges; - } - - /* replace original edge weights (which are lengths) with uniform weights */ - /* for computing the optimal arrangement */ - uniform_weights = N_GNEW(nedges, float); - for (i = 0; i < n; i++) { - graph[i].ewgts = uniform_weights; - uniform_weights[0] = (float) -(graph[i].nedges - 1); - for (j = 1; j < graph[i].nedges; j++) { - uniform_weights[j] = 1; - } - uniform_weights += graph[i].nedges; - } - - if (conjugate_gradient(graph, y_coords, b, n, tol, max_iterations) < 0) { - rv = 1; - } - - /* restore original edge weights */ - free(graph[0].ewgts); - for (i = 0; i < n; i++) { - graph[i].ewgts = old_ewgts; - old_ewgts += graph[i].nedges; - } - - free(b); - return rv; -} - -#endif /* DIGCOLA */ diff --git a/internal/ccall/neatogen/overlap.c b/internal/ccall/neatogen/overlap.c deleted file mode 100644 index f09f8c3..0000000 --- a/internal/ccall/neatogen/overlap.c +++ /dev/null @@ -1,695 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#if ((defined(HAVE_GTS) || defined(HAVE_TRIANGLE)) && defined(SFDP)) - -#include "SparseMatrix.h" -#include "overlap.h" -#include "call_tri.h" -#include "red_black_tree.h" -#include "types.h" -#include "memory.h" -#include "globals.h" -#include - -static void ideal_distance_avoid_overlap(int dim, SparseMatrix A, real *x, real *width, real *ideal_distance, real *tmax, real *tmin){ - /* if (x1>x2 && y1 > y2) we want either x1 + t (x1-x2) - x2 > (width1+width2), or y1 + t (y1-y2) - y2 > (height1+height2), - hence t = MAX(expandmin, MIN(expandmax, (width1+width2)/(x1-x2) - 1, (height1+height2)/(y1-y2) - 1)), and - new ideal distance = (1+t) old_distance. t can be negative sometimes. - The result ideal distance is set to negative if the edge needs shrinking - */ - int i, j, jj; - int *ia = A->ia, *ja = A->ja; - real dist, dx, dy, wx, wy, t; - real expandmax = 1.5, expandmin = 1; - - *tmax = 0; - *tmin = 1.e10; - assert(SparseMatrix_is_symmetric(A, FALSE)); - for (i = 0; i < A->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - dist = distance(x, dim, i, jj); - dx = ABS(x[i*dim] - x[jj*dim]); - dy = ABS(x[i*dim+1] - x[jj*dim+1]); - wx = width[i*dim]+width[jj*dim]; - wy = width[i*dim+1]+width[jj*dim+1]; - if (dx < MACHINEACC*wx && dy < MACHINEACC*wy){ - ideal_distance[j] = sqrt(wx*wx+wy*wy); - *tmax = 2; - } else { - if (dx < MACHINEACC*wx){ - t = wy/dy; - } else if (dy < MACHINEACC*wy){ - t = wx/dx; - } else { - t = MIN(wx/dx, wy/dy); - } - if (t > 1) t = MAX(t, 1.001);/* no point in things like t = 1.00000001 as this slow down convergence */ - *tmax = MAX(*tmax, t); - *tmin = MIN(*tmin, t); - t = MIN(expandmax, t); - t = MAX(expandmin, t); - if (t > 1) { - ideal_distance[j] = t*dist; - } else { - ideal_distance[j] = -t*dist; - } - } - - } - } - return; -} - -#define collide(i,j) ((ABS(x[(i)*dim] - x[(j)*dim]) < width[(i)*dim]+width[(j)*dim]) || (ABS(x[(i)*dim+1] - x[(j)*dim+1]) < width[(i)*dim+1]+width[(j)*dim+1])) - -enum {INTV_OPEN, INTV_CLOSE}; - -struct scan_point_struct{ - int node; - real x; - int status; -}; - -typedef struct scan_point_struct scan_point; - - -static int comp_scan_points(const void *p, const void *q){ - scan_point *pp = (scan_point *) p; - scan_point *qq = (scan_point *) q; - if (pp->x > qq->x){ - return 1; - } else if (pp->x < qq->x){ - return -1; - } else { - if (pp->node > qq->node){ - return 1; - } else if (pp->node < qq->node){ - return -1; - } - return 0; - } - return 0; -} - - -void NodeDest(void* a) { - /* free((int*)a);*/ -} - - - -int NodeComp(const void* a,const void* b) { - return comp_scan_points(a,b); - -} - -void NodePrint(const void* a) { - scan_point *aa; - - aa = (scan_point *) a; - fprintf(stderr, "node {%d, %f, %d}\n", aa->node, aa->x, aa->status); - -} - -void InfoPrint(void* a) { - ; -} - -void InfoDest(void *a){ - ; -} - -static SparseMatrix get_overlap_graph(int dim, int n, real *x, real *width, int check_overlap_only){ - /* if check_overlap_only = TRUE, we only check whether there is one overlap */ - scan_point *scanpointsx, *scanpointsy; - int i, k, neighbor; - SparseMatrix A = NULL, B = NULL; - rb_red_blk_node *newNode, *newNode0, *newNode2 = NULL; - rb_red_blk_tree* treey; - real one = 1; - - A = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - - scanpointsx = N_GNEW(2*n,scan_point); - for (i = 0; i < n; i++){ - scanpointsx[2*i].node = i; - scanpointsx[2*i].x = x[i*dim] - width[i*dim]; - scanpointsx[2*i].status = INTV_OPEN; - scanpointsx[2*i+1].node = i+n; - scanpointsx[2*i+1].x = x[i*dim] + width[i*dim]; - scanpointsx[2*i+1].status = INTV_CLOSE; - } - qsort(scanpointsx, 2*n, sizeof(scan_point), comp_scan_points); - - scanpointsy = N_GNEW(2*n,scan_point); - for (i = 0; i < n; i++){ - scanpointsy[i].node = i; - scanpointsy[i].x = x[i*dim+1] - width[i*dim+1]; - scanpointsy[i].status = INTV_OPEN; - scanpointsy[i+n].node = i; - scanpointsy[i+n].x = x[i*dim+1] + width[i*dim+1]; - scanpointsy[i+n].status = INTV_CLOSE; - } - - - treey = RBTreeCreate(NodeComp,NodeDest,InfoDest,NodePrint,InfoPrint); - - for (i = 0; i < 2*n; i++){ -#ifdef DEBUG_RBTREE - fprintf(stderr," k = %d node = %d x====%f\n",(scanpointsx[i].node)%n, (scanpointsx[i].node), (scanpointsx[i].x)); -#endif - - k = (scanpointsx[i].node)%n; - - - if (scanpointsx[i].status == INTV_OPEN){ -#ifdef DEBUG_RBTREE - fprintf(stderr, "inserting..."); - treey->PrintKey(&(scanpointsy[k])); -#endif - - RBTreeInsert(treey, &(scanpointsy[k]), NULL); /* add both open and close int for y */ - -#ifdef DEBUG_RBTREE - fprintf(stderr, "inserting2..."); - treey->PrintKey(&(scanpointsy[k+n])); -#endif - - RBTreeInsert(treey, &(scanpointsy[k+n]), NULL); - } else { - real bsta, bbsta, bsto, bbsto; int ii; - - assert(scanpointsx[i].node >= n); - - newNode = newNode0 = RBExactQuery(treey, &(scanpointsy[k + n])); - ii = ((scan_point *)newNode->key)->node; - assert(ii < n); - bsta = scanpointsy[ii].x; bsto = scanpointsy[ii+n].x; - -#ifdef DEBUG_RBTREE - fprintf(stderr, "poping..%d....yinterval={%f,%f}\n", scanpointsy[k + n].node, bsta, bsto); - treey->PrintKey(newNode->key); -#endif - - assert(treey->nil != newNode); - while ((newNode) && ((newNode = TreePredecessor(treey, newNode)) != treey->nil)){ - neighbor = (((scan_point *)newNode->key)->node)%n; - bbsta = scanpointsy[neighbor].x; bbsto = scanpointsy[neighbor+n].x;/* the y-interval of the node that has one end of the interval lower than the top of the leaving interval (bsto) */ -#ifdef DEBUG_RBTREE - fprintf(stderr," predecessor is node %d y = %f\n", ((scan_point *)newNode->key)->node, ((scan_point *)newNode->key)->x); -#endif - if (neighbor != k){ - if (ABS(0.5*(bsta+bsto) - 0.5*(bbsta+bbsto)) < 0.5*(bsto-bsta) + 0.5*(bbsto-bbsta)){/* if the distance of the centers of the interval is less than sum of width, we have overlap */ - A = SparseMatrix_coordinate_form_add_entries(A, 1, &neighbor, &k, &one); -#ifdef DEBUG_RBTREE - fprintf(stderr,"====================================== %d %d\n",k,neighbor); -#endif - if (check_overlap_only) goto check_overlap_RETURN; - } - } else { - newNode2 = newNode; - } - - } - -#ifdef DEBUG_RBTREE - fprintf(stderr, "deleteing..."); - treey->PrintKey(newNode0->key); -#endif - - if (newNode0) RBDelete(treey,newNode0); - - - if (newNode2 && newNode2 != treey->nil && newNode2 != newNode0) { - -#ifdef DEBUG_RBTREE - fprintf(stderr, "deleteing2..."); - treey->PrintKey(newNode2->key); -#endif - - if (newNode0) RBDelete(treey,newNode2); - } - - } - } - -check_overlap_RETURN: - FREE(scanpointsx); - FREE(scanpointsy); - RBTreeDestroy(treey); - - B = SparseMatrix_from_coordinate_format(A); - SparseMatrix_delete(A); - A = SparseMatrix_symmetrize(B, FALSE); - SparseMatrix_delete(B); - if (Verbose) fprintf(stderr, "found %d clashes\n", A->nz); - return A; -} - - - -/* ============================== label overlap smoother ==================*/ - - -static void relative_position_constraints_delete(void *d){ - relative_position_constraints data; - if (!d) return; - data = (relative_position_constraints) d; - if (data->irn) FREE(data->irn); - if (data->jcn) FREE(data->jcn); - if (data->val) FREE(data->val); - /* other stuff inside relative_position_constraints is assed back to the user hence no need to deallocator*/ - FREE(d); -} - -static relative_position_constraints relative_position_constraints_new(SparseMatrix A_constr, int edge_labeling_scheme, int n_constr_nodes, int *constr_nodes){ - relative_position_constraints data; - assert(A_constr); - data = MALLOC(sizeof(struct relative_position_constraints_struct)); - data->constr_penalty = 1; - data->edge_labeling_scheme = edge_labeling_scheme; - data->n_constr_nodes = n_constr_nodes; - data->constr_nodes = constr_nodes; - data->A_constr = A_constr; - data->irn = NULL; - data->jcn = NULL; - data->val = NULL; - - return data; -} -static void scale_coord(int dim, int m, real *x, real scale){ - int i; - for (i = 0; i < dim*m; i++) { - x[i] *= scale; - } -} - -real overlap_scaling(int dim, int m, real *x, real *width, real scale_sta, real scale_sto, real epsilon, int maxiter){ - /* do a bisection between scale_sta and scale_sto, up to maxiter iterations or till interval <= epsilon, to find the best scaling to avoid overlap - m: number of points - x: the coordinates - width: label size - scale_sta: starting bracket. If <= 0, assumed 0. If > 0, we will test this first and if no overlap, return. - scale_sto: stopping bracket. This must be overlap free if positive. If <= 0, we will find automatically by doubling from scale_sta, or epsilon if scale_sta <= 0. - typically usage: - - for shrinking down a layout to reduce white space, we will assume scale_sta and scale_sto are both given and positive, and scale_sta is the current guess. - - for scaling up, we assume scale_sta, scale_sto <= 0 - */ - real scale = -1, scale_best = -1; - SparseMatrix C = NULL; - int check_overlap_only = 1; - int overlap = 0; - real two = 2; - int iter = 0; - - assert(epsilon > 0); - - if (scale_sta <= 0) { - scale_sta = 0; - } else { - scale_coord(dim, m, x, scale_sta); - C = get_overlap_graph(dim, m, x, width, check_overlap_only); - if (!C || C->nz == 0) { - if (Verbose) fprintf(stderr," shrinking with %f works\n", scale_sta); - SparseMatrix_delete(C); - return scale_sta; - } - scale_coord(dim, m, x, 1./scale_sta); - SparseMatrix_delete(C); - } - - if (scale_sto < 0){ - if (scale_sta == 0) { - scale_sto = epsilon; - } else { - scale_sto = scale_sta; - } - scale_coord(dim, m, x, scale_sto); - do { - scale_sto *= two; - scale_coord(dim, m, x, two); - C = get_overlap_graph(dim, m, x, width, check_overlap_only); - overlap = (C && C->nz > 0); - SparseMatrix_delete(C); - } while (overlap); - scale_coord(dim, m, x, 1/scale_sto);/* unscale */ - } - - scale_best = scale_sto; - while (iter++ < maxiter && scale_sto - scale_sta > epsilon){ - - if (Verbose) fprintf(stderr,"in overlap_scaling iter=%d, maxiter=%d, scaling bracket: {%f,%f}\n", iter, maxiter, scale_sta, scale_sto); - - scale = 0.5*(scale_sta + scale_sto); - scale_coord(dim, m, x, scale); - C = get_overlap_graph(dim, m, x, width, check_overlap_only); - scale_coord(dim, m, x, 1./scale);/* unscale */ - overlap = (C && C->nz > 0); - SparseMatrix_delete(C); - if (overlap){ - scale_sta = scale; - } else { - scale_best = scale_sto = scale; - } - } - - /* final scaling */ - scale_coord(dim, m, x, scale_best); - return scale_best; -} - -OverlapSmoother OverlapSmoother_new(SparseMatrix A, int m, - int dim, real lambda0, real *x, real *width, int include_original_graph, int neighborhood_only, - real *max_overlap, real *min_overlap, - int edge_labeling_scheme, int n_constr_nodes, int *constr_nodes, SparseMatrix A_constr, int shrink - ){ - OverlapSmoother sm; - int i, j, k, *iw, *jw, jdiag; - SparseMatrix B; - real *lambda, *d, *w, diag_d, diag_w, dist; - - assert((!A) || SparseMatrix_is_symmetric(A, FALSE)); - - sm = GNEW(struct OverlapSmoother_struct); - sm->scheme = SM_SCHEME_NORMAL; - if (constr_nodes && n_constr_nodes > 0 && edge_labeling_scheme != ELSCHEME_NONE){ - sm->scheme = SM_SCHEME_NORMAL_ELABEL; - sm->data = relative_position_constraints_new(A_constr, edge_labeling_scheme, n_constr_nodes, constr_nodes); - sm->data_deallocator = relative_position_constraints_delete; - } else { - sm->data = NULL; - } - - sm->tol_cg = 0.01; - sm->maxit_cg = sqrt((double) A->m); - - lambda = sm->lambda = N_GNEW(m,real); - for (i = 0; i < m; i++) sm->lambda[i] = lambda0; - - B= call_tri(m, dim, x); - - if (!neighborhood_only){ - SparseMatrix C, D; - C = get_overlap_graph(dim, m, x, width, 0); - D = SparseMatrix_add(B, C); - SparseMatrix_delete(B); - SparseMatrix_delete(C); - B = D; - } - if (include_original_graph){ - sm->Lw = SparseMatrix_add(A, B); - SparseMatrix_delete(B); - } else { - sm->Lw = B; - } - sm->Lwd = SparseMatrix_copy(sm->Lw); - -#ifdef DEBUG - { - FILE *fp; - fp = fopen("/tmp/111","w"); - export_embedding(fp, dim, sm->Lwd, x, NULL); - fclose(fp); - } -#endif - - if (!(sm->Lw) || !(sm->Lwd)) { - OverlapSmoother_delete(sm); - return NULL; - } - - assert((sm->Lwd)->type == MATRIX_TYPE_REAL); - - ideal_distance_avoid_overlap(dim, sm->Lwd, x, width, (real*) (sm->Lwd->a), max_overlap, min_overlap); - - /* no overlap at all! */ - if (*max_overlap < 1 && shrink){ - real scale_sta = MIN(1, *max_overlap*1.0001), scale_sto = 1; - - if (Verbose) fprintf(stderr," no overlap (overlap = %f), rescale to shrink\n", *max_overlap - 1); - - scale_sta = overlap_scaling(dim, m, x, width, scale_sta, scale_sto, 0.0001, 15); - - *max_overlap = 1; - goto RETURN; - } - - iw = sm->Lw->ia; jw = sm->Lw->ja; - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - - for (i = 0; i < m; i++){ - diag_d = diag_w = 0; - jdiag = -1; - for (j = iw[i]; j < iw[i+1]; j++){ - k = jw[j]; - if (k == i){ - jdiag = j; - continue; - } - if (d[j] > 0){/* those edges that needs expansion */ - w[j] = -100/d[j]/d[j]; - /*w[j] = 100/d[j]/d[j];*/ - } else {/* those that needs shrinking is set to negative in ideal_distance_avoid_overlap */ - /*w[j] = 1/d[j]/d[j];*/ - w[j] = -1/d[j]/d[j]; - d[j] = -d[j]; - } - dist = d[j]; - diag_w += w[j]; - d[j] = w[j]*dist; - diag_d += d[j]; - - } - - lambda[i] *= (-diag_w);/* alternatively don't do that then we have a constant penalty term scaled by lambda0 */ - - assert(jdiag >= 0); - w[jdiag] = -diag_w + lambda[i]; - d[jdiag] = -diag_d; - } - RETURN: - return sm; -} - -void OverlapSmoother_delete(OverlapSmoother sm){ - - StressMajorizationSmoother_delete(sm); - -} - -real OverlapSmoother_smooth(OverlapSmoother sm, int dim, real *x){ - int maxit_sm = 1;/* only using 1 iteration of stress majorization - is found to give better results and save time! */ - real res = StressMajorizationSmoother_smooth(sm, dim, x, maxit_sm, 0.001); -#ifdef DEBUG - {FILE *fp; - fp = fopen("/tmp/222","w"); - export_embedding(fp, dim, sm->Lwd, x, NULL); - fclose(fp);} -#endif - return res; -} - -/*================================= end OverlapSmoother =============*/ - -static void scale_to_edge_length(int dim, SparseMatrix A, real *x, real avg_label_size){ - real dist; - int i; - - if (!A) return; - dist = average_edge_length(A, dim, x); - if (Verbose) fprintf(stderr,"avg edge len=%f avg_label-size= %f\n", dist, avg_label_size); - - - dist = avg_label_size/MAX(dist, MACHINEACC); - - for (i = 0; i < dim*A->m; i++) x[i] *= dist; -} - -static void print_bounding_box(int n, int dim, real *x){ - real *xmin, *xmax; - int i, k; - - xmin = N_GNEW(dim,real); - xmax = N_GNEW(dim,real); - - for (i = 0; i < dim; i++) xmin[i]=xmax[i] = x[i]; - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - xmin[k] = MIN(xmin[k],x[i*dim+k]); - xmax[k] = MAX(xmax[k],x[i*dim+k]); - } - } - fprintf(stderr,"bounding box = \n"); - for (i = 0; i < dim; i++) fprintf(stderr,"{%f,%f}, ",xmin[i], xmax[i]); - fprintf(stderr,"\n"); - - FREE(xmin); - FREE(xmax); -} - -static int check_convergence(real max_overlap, real res, int has_penalty_terms, real epsilon){ - if (!has_penalty_terms) return (max_overlap <= 1); - return res < epsilon; -} - -void remove_overlap(int dim, SparseMatrix A, real *x, real *label_sizes, int ntry, real initial_scaling, - int edge_labeling_scheme, int n_constr_nodes, int *constr_nodes, SparseMatrix A_constr, int do_shrinking, int *flag){ - /* - edge_labeling_scheme: if ELSCHEME_NONE, n_constr_nodes/constr_nodes/A_constr are not used - - n_constr_nodes: number of nodes that has constraints, these are nodes that is - . constrained to be close to the average of its neighbors. - constr_nodes: a list of nodes that need to be constrained. If NULL, unused. - A_constr: neighbors of node i are in the row i of this matrix. i needs to sit - . in between these neighbors as much as possible. this must not be NULL - . if constr_nodes != NULL. - - */ - - real lambda = 0.00; - OverlapSmoother sm; - int include_original_graph = 0, i; - real LARGE = 100000; - real avg_label_size, res = LARGE; - real max_overlap = 0, min_overlap = 999; - int neighborhood_only = TRUE; - int has_penalty_terms = FALSE; - real epsilon = 0.005; - int shrink = 0; - -#ifdef TIME - clock_t cpu; -#endif - -#ifdef TIME - cpu = clock(); -#endif - - if (!label_sizes) return; - - if (initial_scaling < 0) { - avg_label_size = 0; - for (i = 0; i < A->m; i++) avg_label_size += label_sizes[i*dim]+label_sizes[i*dim+1]; - /* for (i = 0; i < A->m; i++) avg_label_size += 2*MAX(label_sizes[i*dim],label_sizes[i*dim+1]);*/ - avg_label_size /= A->m; - scale_to_edge_length(dim, A, x, -initial_scaling*avg_label_size); - } else if (initial_scaling > 0){ - scale_to_edge_length(dim, A, x, initial_scaling); - } - - if (!ntry) return; - - *flag = 0; - -#ifdef DEBUG - _statistics[0] = _statistics[1] = 0.; - {FILE*fp; - fp = fopen("x1","w"); - for (i = 0; i < A->m; i++){ - fprintf(fp, "%f %f\n",x[i*2],x[i*2+1]); - } - fclose(fp); - } -#endif - -#ifdef ANIMATE - {FILE*fp; - fp = fopen("/tmp/m","wa"); - fprintf(fp,"{"); -#endif - - has_penalty_terms = (edge_labeling_scheme != ELSCHEME_NONE && n_constr_nodes > 0); - for (i = 0; i < ntry; i++){ - if (Verbose) print_bounding_box(A->m, dim, x); - sm = OverlapSmoother_new(A, A->m, dim, lambda, x, label_sizes, include_original_graph, neighborhood_only, - &max_overlap, &min_overlap, edge_labeling_scheme, n_constr_nodes, constr_nodes, A_constr, shrink); - if (Verbose) fprintf(stderr, "overlap removal neighbors only?= %d iter -- %d, overlap factor = %g underlap factor = %g\n", neighborhood_only, i, max_overlap - 1, min_overlap); - if (check_convergence(max_overlap, res, has_penalty_terms, epsilon)){ - - OverlapSmoother_delete(sm); - if (neighborhood_only == FALSE){ - break; - } else { - res = LARGE; - neighborhood_only = FALSE; if (do_shrinking) shrink = 1; - continue; - } - } - - res = OverlapSmoother_smooth(sm, dim, x); - if (Verbose) fprintf(stderr,"res = %f\n",res); -#ifdef ANIMATE - if (i != 0) fprintf(fp,","); - export_embedding(fp, dim, A, x, label_sizes); -#endif - OverlapSmoother_delete(sm); - } - if (Verbose) fprintf(stderr, "overlap removal neighbors only?= %d iter -- %d, overlap factor = %g underlap factor = %g\n", neighborhood_only, i, max_overlap - 1, min_overlap); - -#ifdef ANIMATE - fprintf(fp,"}"); - fclose(fp); - } -#endif - - if (has_penalty_terms){ - /* now do without penalty */ - remove_overlap(dim, A, x, label_sizes, ntry, 0., - ELSCHEME_NONE, 0, NULL, NULL, do_shrinking, flag); - } - -#ifdef DEBUG - fprintf(stderr," number of cg iter = %f, number of stress majorization iter = %f number of overlap removal try = %d\n", - _statistics[0], _statistics[1], i - 1); - - {FILE*fp; - fp = fopen("x2","w"); - for (i = 0; i < A->m; i++){ - fprintf(fp, "%f %f\n",x[i*2],x[i*2+1]); - } - fclose(fp); - } -#endif - -#ifdef DEBUG - {FILE*fp; - fp = fopen("/tmp/m","w"); - if (A) export_embedding(fp, dim, A, x, label_sizes); - fclose(fp); - } -#endif -#ifdef TIME - fprintf(stderr, "post processing %f\n",((real) (clock() - cpu)) / CLOCKS_PER_SEC); -#endif -} - -#else -#include "types.h" -#include "SparseMatrix.h" -void remove_overlap(int dim, SparseMatrix A, int m, real *x, real *label_sizes, int ntry, real initial_scaling, int do_shrinking, int *flag) -{ - static int once; - - if (once == 0) { - once = 1; - agerr(AGERR, "remove_overlap: Graphviz not built with triangulation library\n"); - } -} -#endif diff --git a/internal/ccall/neatogen/overlap.h b/internal/ccall/neatogen/overlap.h deleted file mode 100644 index 9673f41..0000000 --- a/internal/ccall/neatogen/overlap.h +++ /dev/null @@ -1,58 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef OVERLAP_H -#define OVERLAP_H - -#include "post_process.h" - -typedef StressMajorizationSmoother OverlapSmoother; - -#define OverlapSmoother_struct StressMajorizationSmoother_struct - -void OverlapSmoother_delete(OverlapSmoother sm); - -OverlapSmoother OverlapSmoother_new(SparseMatrix A, int m, - int dim, real lambda0, real *x, real *width, int include_original_graph, int neighborhood_only, - real *max_overlap, real *min_overlap, - int edge_labeling_scheme, int n_constr_nodes, int *constr_nodes, SparseMatrix A_constr, int shrink - ); - -enum {ELSCHEME_NONE = 0, ELSCHEME_PENALTY, ELSCHEME_PENALTY2, ELSCHEME_STRAIGHTLINE_PENALTY, ELSCHEME_STRAIGHTLINE_PENALTY2}; - -struct relative_position_constraints_struct{ - real constr_penalty; /* penalty parameter used in making edge labels as much on the line as possible */ - int edge_labeling_scheme;/* specifying whether to treat node of the form |edgelabel|* as a special node representing an edge label. - 0 (no action, default), 1 (penalty based method to make that kind of node close to the center of its neighbor), - 2 (penalty based method to make that kind of node close to the "old" center of its neighbor), - 3 (two step process of overlap removal and straightening) */ - int n_constr_nodes;/*n_constr_nodes: number of nodes that has constraints, these are nodes that is - constrained to be close to the average of its neighbors.*/ - int *constr_nodes;/*constr_nodes: a list of nodes that need to be constrained. If NULL, unused.*/ - int *irn;/* working arrays to hold the Laplacian of the constrain graph */ - int *jcn; - real *val; - SparseMatrix A_constr; /*A_constr: neighbors of node i are in the row i of this matrix. i needs to sit - in between these neighbors as much as possible. this must not be NULL - if constr_nodes != NULL.*/ - -}; - -typedef struct relative_position_constraints_struct* relative_position_constraints; - -real OverlapSmoother_smooth(OverlapSmoother sm, int dim, real *x); - -void remove_overlap(int dim, SparseMatrix A, real *x, real *label_sizes, int ntry, real initial_scaling, - int edge_labeling_scheme, int n_constr_nodes, int *constr_nodes, SparseMatrix A_constr, int doShrink, int *flag); -real overlap_scaling(int dim, int m, real *x, real *width, real scale_sta, real scale_sto, real epsilon, int maxiter); -#endif diff --git a/internal/ccall/neatogen/pca.c b/internal/ccall/neatogen/pca.c deleted file mode 100644 index 4fa7eb0..0000000 --- a/internal/ccall/neatogen/pca.c +++ /dev/null @@ -1,140 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "matrix_ops.h" -#include "pca.h" -#include "closest.h" -#include -#include -#include - -static int num_pairs = 4; - -void -PCA_alloc(DistType ** coords, int dim, int n, double **new_coords, - int new_dim) -{ - double **DD = NULL; /* dim*dim matrix: coords*coords^T */ - double sum; - int i, j, k; - double **eigs = NULL; - double *evals = NULL; - double *storage_ptr; - - eigs = N_GNEW(new_dim, double *); - for (i = 0; i < new_dim; i++) - eigs[i] = N_GNEW(dim, double); - evals = N_GNEW(new_dim, double); - - DD = N_GNEW(dim, double *); - storage_ptr = N_GNEW(dim * dim, double); - for (i = 0; i < dim; i++) { - DD[i] = storage_ptr; - storage_ptr += dim; - } - - for (i = 0; i < dim; i++) { - for (j = 0; j <= i; j++) { - /* compute coords[i]*coords[j] */ - sum = 0; - for (k = 0; k < n; k++) { - sum += coords[i][k] * coords[j][k]; - } - DD[i][j] = DD[j][i] = sum; - } - } - - power_iteration(DD, dim, new_dim, eigs, evals, TRUE); - - for (j = 0; j < new_dim; j++) { - for (i = 0; i < n; i++) { - sum = 0; - for (k = 0; k < dim; k++) { - sum += coords[k][i] * eigs[j][k]; - } - new_coords[j][i] = sum; - } - } - - for (i = 0; i < new_dim; i++) - free(eigs[i]); - free(eigs); - free(evals); - free(DD[0]); - free(DD); -} - -boolean -iterativePCA_1D(double **coords, int dim, int n, double *new_direction) -{ - vtx_data *laplacian; - float **mat1 = NULL; - double **mat = NULL; - double eval; - - /* Given that first projection of 'coords' is 'coords[0]' - compute another projection direction 'new_direction' - that scatters points that are close in 'coords[0]' - */ - - /* find the nodes that were close in 'coords[0]' */ - /* and construct appropriate Laplacian */ - closest_pairs2graph(coords[0], n, num_pairs * n, &laplacian); - - /* Compute coords*Lap*coords^T */ - mult_sparse_dense_mat_transpose(laplacian, coords, n, dim, &mat1); - mult_dense_mat_d(coords, mat1, dim, n, dim, &mat); - free(mat1[0]); - free(mat1); - - /* Compute direction */ - return power_iteration(mat, dim, 1, &new_direction, &eval, TRUE); -/* ?? When is mat freed? */ -} - -#ifdef UNUSED - -double dist(double **coords, int dim, int p1, int p2) -{ - int i; - double sum = 0; - - for (i = 0; i < dim; i++) { - sum += - (coords[i][p1] - coords[i][p2]) * (coords[i][p1] - - coords[i][p2]); - } - return sqrt(sum); -} - - -void weight_laplacian(double **X, int n, int dim, vtx_data * laplacian) -{ - int i, j, neighbor; - - int *edges; - float *ewgts; - for (i = 0; i < n; i++) { - edges = laplacian[i].edges; - ewgts = laplacian[i].ewgts; - *ewgts = 0; - for (j = 1; j < laplacian[i].nedges; j++) { - neighbor = edges[j]; - *ewgts -= ewgts[j] = - float (-1.0 / (dist(X, dim, i, neighbor) + 1e-10)); - } - } -} - -#endif diff --git a/internal/ccall/neatogen/pca.h b/internal/ccall/neatogen/pca.h deleted file mode 100644 index 5f0850c..0000000 --- a/internal/ccall/neatogen/pca.h +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef PCA_H -#define PCA_H - -#include "defs.h" - - extern void PCA_alloc(DistType **, int, int, double **, int); - extern boolean iterativePCA_1D(double **, int, int, double *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/poly.c b/internal/ccall/neatogen/poly.c deleted file mode 100644 index fb37748..0000000 --- a/internal/ccall/neatogen/poly.c +++ /dev/null @@ -1,542 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* poly.c - */ - -#include "neato.h" -#include -#include -#include -#include "poly.h" -#include "geom.h" -#include "mem.h" - -#define BOX 1 -#define ISBOX(p) ((p)->kind & BOX) -#define CIRCLE 2 -#define ISCIRCLE(p) ((p)->kind & CIRCLE) - -static int maxcnt = 0; -static Point *tp1 = NULL; -static Point *tp2 = NULL; -static Point *tp3 = NULL; - -void polyFree() -{ - maxcnt = 0; - free(tp1); - free(tp2); - free(tp3); - tp1 = NULL; - tp2 = NULL; - tp3 = NULL; -} - -void breakPoly(Poly * pp) -{ - free(pp->verts); -} - -static void bbox(Point * verts, int cnt, Point * o, Point * c) -{ - double xmin, ymin, xmax, ymax; - int i; - - xmin = xmax = verts->x; - ymin = ymax = verts->y; - for (i = 1; i < cnt; i++) { - verts++; - if (verts->x < xmin) - xmin = verts->x; - if (verts->y < ymin) - ymin = verts->y; - if (verts->x > xmax) - xmax = verts->x; - if (verts->y > ymax) - ymax = verts->y; - } - o->x = xmin; - o->y = ymin; - c->x = xmax; - c->y = ymax; -} - -#ifdef OLD -static void inflate(Point * prev, Point * cur, Point * next, double margin) -{ - double theta = atan2(prev->y - cur->y, prev->x - cur->x); - double phi = atan2(next->y - cur->y, next->x - cur->x); - double beta = (theta + phi) / 2.0; - double gamma = (M_PI + phi - theta) / 2.0; - double denom; - - denom = cos(gamma); - cur->x -= margin * (cos(beta)) / denom; - cur->y -= margin * (sin(beta)) / denom; -} - -static void inflatePts(Point * verts, int cnt, double margin) -{ - int i; - Point first; - Point savepoint; - Point prevpoint; - Point *prev = &prevpoint; - Point *cur; - Point *next; - - first = verts[0]; - prevpoint = verts[cnt - 1]; - cur = &verts[0]; - next = &verts[1]; - for (i = 0; i < cnt - 1; i++) { - savepoint = *cur; - inflate(prev, cur, next, margin); - cur++; - next++; - prevpoint = savepoint; - } - - next = &first; - inflate(prev, cur, next, margin); -} -#else -static void inflatePts(Point * verts, int cnt, float xmargin, float ymargin) -{ - int i; - Point *cur; - - cur = &verts[0]; - for (i = 0; i < cnt; i++) { - cur->x *= xmargin; - cur->y *= ymargin; - cur++; - } -} -#endif - -static int isBox(Point * verts, int cnt) -{ - if (cnt != 4) - return 0; - - if (verts[0].y == verts[1].y) - return ((verts[2].y == verts[3].y) && - (verts[0].x == verts[3].x) && (verts[1].x == verts[2].x)); - else - return ((verts[0].x == verts[1].x) && - (verts[2].x == verts[3].x) && - (verts[0].y == verts[3].y) && (verts[1].y == verts[2].y)); -} - -static Point makeScaledTransPoint(int x, int y, float dx, float dy) -{ - Point rv; - rv.x = PS2INCH(x) + dx; - rv.y = PS2INCH(y) + dy; - return rv; -} - -static Point makeScaledPoint(double x, double y) -{ - Point rv; - rv.x = PS2INCH(x); - rv.y = PS2INCH(y); - return rv; -} - -static Point *genRound(Agnode_t * n, int *sidep, float xm, float ym) -{ - int sides = 0; - Point *verts; - char *p = agget(n, "samplepoints"); - int i; - - if (p) - sides = atoi(p); - if (sides < 3) - sides = DFLT_SAMPLE; - verts = N_GNEW(sides, Point); - for (i = 0; i < sides; i++) { - verts[i].x = - (ND_width(n) / 2.0 + xm) * cos(i / (double) sides * M_PI * 2.0); - verts[i].y = - (ND_height(n) / 2.0 + ym) * sin(i / (double) sides * M_PI * 2.0); - } - *sidep = sides; - return verts; -} - -#define PUTPT(P,X,Y) ((P).x=(X),(P).y=(Y)) - -int makeAddPoly(Poly * pp, Agnode_t * n, float xmargin, float ymargin) -{ - int i; - int sides; - Point *verts; - polygon_t *poly; - boxf b; - - if (ND_clust(n)) { - Point b; - sides = 4; - b.x = ND_width(n) / 2.0 + xmargin; - b.y = ND_height(n) / 2.0 + ymargin; - pp->kind = BOX; - verts = N_GNEW(sides, Point); - PUTPT(verts[0], b.x, b.y); - PUTPT(verts[1], -b.x, b.y); - PUTPT(verts[2], -b.x, -b.y); - PUTPT(verts[3], b.x, -b.y); - } else - switch (shapeOf(n)) { - case SH_POLY: - poly = (polygon_t *) ND_shape_info(n); - sides = poly->sides; - - if (streq(ND_shape(n)->name, "box")) - pp->kind = BOX; - else if (streq(ND_shape(n)->name, "polygon") - && isBox(poly->vertices, sides)) - pp->kind = BOX; - else if ((poly->sides < 3) && poly->regular) - pp->kind = CIRCLE; - else - pp->kind = 0; - - if (sides >= 3) { /* real polygon */ - verts = N_GNEW(sides, Point); - if (pp->kind == BOX) { - /* To do an additive margin, we rely on knowing that - * the vertices are CCW starting from the UR - */ - verts[0].x = PS2INCH(poly->vertices[0].x) + xmargin; - verts[0].y = PS2INCH(poly->vertices[0].y) + ymargin; - verts[1].x = PS2INCH(poly->vertices[1].x) - xmargin; - verts[1].y = PS2INCH(poly->vertices[1].y) + ymargin; - verts[2].x = PS2INCH(poly->vertices[2].x) - xmargin; - verts[2].y = PS2INCH(poly->vertices[2].y) - ymargin; - verts[3].x = PS2INCH(poly->vertices[3].x) + xmargin; - verts[3].y = PS2INCH(poly->vertices[3].y) - ymargin; - - } - else { - for (i = 0; i < sides; i++) { - double h = LEN(poly->vertices[i].x,poly->vertices[i].y); - verts[i].x = poly->vertices[i].x * (1.0 + xmargin/h); - verts[i].y = poly->vertices[i].y * (1.0 + ymargin/h); - verts[i].x = PS2INCH(verts[i].x); - verts[i].y = PS2INCH(verts[i].y); - } - } - } else - verts = genRound(n, &sides, xmargin, ymargin); - break; - case SH_RECORD: - sides = 4; - verts = N_GNEW(sides, Point); - b = ((field_t *) ND_shape_info(n))->b; - verts[0] = makeScaledTransPoint(b.LL.x, b.LL.y, -xmargin, -ymargin); - verts[1] = makeScaledTransPoint(b.UR.x, b.LL.y, xmargin, -ymargin); - verts[2] = makeScaledTransPoint(b.UR.x, b.UR.y, xmargin, ymargin); - verts[3] = makeScaledTransPoint(b.LL.x, b.UR.y, -xmargin, ymargin); - pp->kind = BOX; - break; - case SH_POINT: - pp->kind = CIRCLE; - verts = genRound(n, &sides, xmargin, ymargin); - break; - default: - agerr(AGERR, "makeAddPoly: unknown shape type %s\n", - ND_shape(n)->name); - return 1; - } - - pp->verts = verts; - pp->nverts = sides; - bbox(verts, sides, &pp->origin, &pp->corner); - - if (sides > maxcnt) - maxcnt = sides; - return 0; -} - -int makePoly(Poly * pp, Agnode_t * n, float xmargin, float ymargin) -{ - int i; - int sides; - Point *verts; - polygon_t *poly; - boxf b; - - if (ND_clust(n)) { - Point b; - sides = 4; - b.x = ND_width(n) / 2.0; - b.y = ND_height(n) / 2.0; - pp->kind = BOX; - verts = N_GNEW(sides, Point); - PUTPT(verts[0], b.x, b.y); - PUTPT(verts[1], -b.x, b.y); - PUTPT(verts[2], -b.x, -b.y); - PUTPT(verts[3], b.x, -b.y); - } else - switch (shapeOf(n)) { - case SH_POLY: - poly = (polygon_t *) ND_shape_info(n); - sides = poly->sides; - if (sides >= 3) { /* real polygon */ - verts = N_GNEW(sides, Point); - for (i = 0; i < sides; i++) { - verts[i].x = PS2INCH(poly->vertices[i].x); - verts[i].y = PS2INCH(poly->vertices[i].y); - } - } else - verts = genRound(n, &sides, 0, 0); - - if (streq(ND_shape(n)->name, "box")) - pp->kind = BOX; - else if (streq(ND_shape(n)->name, "polygon") - && isBox(verts, sides)) - pp->kind = BOX; - else if ((poly->sides < 3) && poly->regular) - pp->kind = CIRCLE; - else - pp->kind = 0; - - break; - case SH_RECORD: - sides = 4; - verts = N_GNEW(sides, Point); - b = ((field_t *) ND_shape_info(n))->b; - verts[0] = makeScaledPoint(b.LL.x, b.LL.y); - verts[1] = makeScaledPoint(b.UR.x, b.LL.y); - verts[2] = makeScaledPoint(b.UR.x, b.UR.y); - verts[3] = makeScaledPoint(b.LL.x, b.UR.y); - pp->kind = BOX; - break; - case SH_POINT: - pp->kind = CIRCLE; - verts = genRound(n, &sides, 0, 0); - break; - default: - agerr(AGERR, "makePoly: unknown shape type %s\n", - ND_shape(n)->name); - return 1; - } - -#ifdef OLD - if (margin != 0.0) - inflatePts(verts, sides, margin); -#else - if ((xmargin != 1.0) || (ymargin != 1.0)) - inflatePts(verts, sides, xmargin, ymargin); -#endif - - pp->verts = verts; - pp->nverts = sides; - bbox(verts, sides, &pp->origin, &pp->corner); - - if (sides > maxcnt) - maxcnt = sides; - return 0; -} - -static int -pintersect(Point originp, Point cornerp, Point originq, Point cornerq) -{ - return ((originp.x <= cornerq.x) && (originq.x <= cornerp.x) && - (originp.y <= cornerq.y) && (originq.y <= cornerp.y)); -} - -#define Pin 1 -#define Qin 2 -#define Unknown 0 - -#define advance(A,B,N) (B++, A = (A+1)%N) - -static int edgesIntersect(Point * P, Point * Q, int n, int m) -{ - int a = 0; - int b = 0; - int aa = 0; - int ba = 0; - int a1, b1; - Point A, B; - double cross; - int bHA, aHB; - Point p; - int inflag = Unknown; - /* int i = 0; */ - /* int Reset = 0; */ - - do { - a1 = (a + n - 1) % n; - b1 = (b + m - 1) % m; - - subpt(&A, P[a], P[a1]); - subpt(&B, Q[b], Q[b1]); - - cross = area_2(origin, A, B); - bHA = leftOf(P[a1], P[a], Q[b]); - aHB = leftOf(Q[b1], Q[b], P[a]); - - /* If A & B intersect, update inflag. */ - if (intersection(P[a1], P[a], Q[b1], Q[b], &p)) - return 1; - - /* Advance rules. */ - if ((cross == 0) && !bHA && !aHB) { - if (inflag == Pin) - advance(b, ba, m); - else - advance(a, aa, n); - } else if (cross >= 0) - if (bHA) - advance(a, aa, n); - else { - advance(b, ba, m); - } else { /* if ( cross < 0 ) */ - - if (aHB) - advance(b, ba, m); - else - advance(a, aa, n); - } - - } while (((aa < n) || (ba < m)) && (aa < 2 * n) && (ba < 2 * m)); - - return 0; - -} - -/* inPoly: - * Return 1 if q is inside polygon vertex[] - * Assume points are in CCW order - */ -static int inPoly(Point vertex[], int n, Point q) -{ - int i, i1; /* point index; i1 = i-1 mod n */ - double x; /* x intersection of e with ray */ - double crossings = 0; /* number of edge/ray crossings */ - - if (tp3 == NULL) - tp3 = N_GNEW(maxcnt, Point); - - /* Shift so that q is the origin. */ - for (i = 0; i < n; i++) { - tp3[i].x = vertex[i].x - q.x; - tp3[i].y = vertex[i].y - q.y; - } - - /* For each edge e=(i-1,i), see if crosses ray. */ - for (i = 0; i < n; i++) { - i1 = (i + n - 1) % n; - - /* if edge is horizontal, test to see if the point is on it */ - if ((tp3[i].y == 0) && (tp3[i1].y == 0)) { - if ((tp3[i].x * tp3[i1].x) < 0) { - return 1; - } else { - continue; - } - } - - /* if e straddles the x-axis... */ - if (((tp3[i].y >= 0) && (tp3[i1].y <= 0)) || - ((tp3[i1].y >= 0) && (tp3[i].y <= 0))) { - /* e straddles ray, so compute intersection with ray. */ - x = (tp3[i].x * tp3[i1].y - tp3[i1].x * tp3[i].y) - / (double) (tp3[i1].y - tp3[i].y); - - /* if intersect at origin, we've found intersection */ - if (x == 0) - return 1;; - - /* crosses ray if strictly positive intersection. */ - if (x > 0) { - if ((tp3[i].y == 0) || (tp3[i1].y == 0)) { - crossings += .5; /* goes thru vertex */ - } else { - crossings += 1.0; - } - } - } - } - - /* q inside if an odd number of crossings. */ - if ((((int) crossings) % 2) == 1) - return 1; - else - return 0; -} - -static int inBox(Point p, Point origin, Point corner) -{ - return ((p.x <= corner.x) && - (p.x >= origin.x) && (p.y <= corner.y) && (p.y >= origin.y)); - -} - -static void transCopy(Point * inp, int cnt, Point off, Point * outp) -{ - int i; - - for (i = 0; i < cnt; i++) { - outp->x = inp->x + off.x; - outp->y = inp->y + off.y; - inp++; - outp++; - } -} - -int polyOverlap(Point p, Poly * pp, Point q, Poly * qp) -{ - Point op, cp; - Point oq, cq; - - /* translate bounding boxes */ - addpt(&op, p, pp->origin); - addpt(&cp, p, pp->corner); - addpt(&oq, q, qp->origin); - addpt(&cq, q, qp->corner); - - /* If bounding boxes don't overlap, done */ - if (!pintersect(op, cp, oq, cq)) - return 0; - - if (ISBOX(pp) && ISBOX(qp)) - return 1; - if (ISCIRCLE(pp) && ISCIRCLE(qp)) { - double d = - (pp->corner.x - pp->origin.x + qp->corner.x - qp->origin.x); - double dx = p.x - q.x; - double dy = p.y - q.y; - if ((dx * dx + dy * dy) > (d * d) / 4.0) - return 0; - else - return 1; - } - - if (tp1 == NULL) { - tp1 = N_GNEW(maxcnt, Point); - tp2 = N_GNEW(maxcnt, Point); - } - - transCopy(pp->verts, pp->nverts, p, tp1); - transCopy(qp->verts, qp->nverts, q, tp2); - return (edgesIntersect(tp1, tp2, pp->nverts, qp->nverts) || - (inBox(*tp1, oq, cq) && inPoly(tp2, qp->nverts, *tp1)) || - (inBox(*tp2, op, cp) && inPoly(tp1, pp->nverts, *tp2))); -} diff --git a/internal/ccall/neatogen/poly.h b/internal/ccall/neatogen/poly.h deleted file mode 100644 index 16a43aa..0000000 --- a/internal/ccall/neatogen/poly.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef POLY_H -#define POLY_H - -#include "geometry.h" - - typedef struct { - Point origin; - Point corner; - int nverts; - Point *verts; - int kind; - } Poly; - - extern void polyFree(void); - extern int polyOverlap(Point, Poly *, Point, Poly *); - extern int makePoly(Poly *, Agnode_t *, float, float); - extern int makeAddPoly(Poly *, Agnode_t *, float, float); - extern void breakPoly(Poly *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/printvis.c b/internal/ccall/neatogen/printvis.c deleted file mode 100644 index 0206584..0000000 --- a/internal/ccall/neatogen/printvis.c +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include - -typedef Ppoint_t ppoint; - - -void printvis(vconfig_t * cp) -{ - int i, j; - int *next, *prev; - ppoint *pts; - array2 arr; - - next = cp->next; - prev = cp->prev; - pts = cp->P; - arr = cp->vis; - - printf("this next prev point\n"); - for (i = 0; i < cp->N; i++) - printf("%3d %3d %3d (%f,%f)\n", i, next[i], prev[i], - (double) pts[i].x, (double) pts[i].y); - - printf("\n\n"); - - for (i = 0; i < cp->N; i++) { - for (j = 0; j < cp->N; j++) - printf("%4.1f ", arr[i][j]); - printf("\n"); - } -} diff --git a/internal/ccall/neatogen/quad_prog_solve.c b/internal/ccall/neatogen/quad_prog_solve.c deleted file mode 100644 index 969eeb9..0000000 --- a/internal/ccall/neatogen/quad_prog_solve.c +++ /dev/null @@ -1,1007 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "digcola.h" -#ifdef DIGCOLA -#include -#include -#include -#include -#include -#include -#include "matrix_ops.h" -#include "kkutils.h" -#include "quad_prog_solver.h" - -#define quad_prog_tol 1e-2 - -float **unpackMatrix(float *packedMat, int n) -{ - float **mat; - int i, j, k; - - mat = N_GNEW(n, float *); - mat[0] = N_GNEW(n * n, float); - set_vector_valf(n * n, 0, mat[0]); - for (i = 1; i < n; i++) { - mat[i] = mat[0] + i * n; - } - - for (i = 0, k = 0; i < n; i++) { - for (j = i; j < n; j++, k++) { - mat[j][i] = mat[i][j] = packedMat[k]; - } - } - return mat; -} - -static void ensureMonotonicOrdering(float *place, int n, int *ordering) -{ - /* ensure that 'ordering' is monotonically increasing by 'place', */ - /* this also implies that levels are separated in the initial layout */ - int i, node; - float lower_bound = place[ordering[0]]; - for (i = 1; i < n; i++) { - node = ordering[i]; - if (place[node] < lower_bound) { - place[node] = lower_bound; - } - lower_bound = place[node]; - } -} - -static void -ensureMonotonicOrderingWithGaps(float *place, int n, int *ordering, - int *levels, int num_levels, - float levels_gap) -{ - /* ensure that levels are separated in the initial layout and that - * places are monotonic increasing within layer - */ - - int i; - int node, level, max_in_level; - float lower_bound = (float) -1e9; - - level = -1; - max_in_level = 0; - for (i = 0; i < n; i++) { - if (i >= max_in_level) { - /* we are entering a new level */ - level++; - if (level == num_levels) { - /* last_level */ - max_in_level = n; - } else { - max_in_level = levels[level]; - } - lower_bound = - i > 0 ? place[ordering[i - 1]] + levels_gap : (float) -1e9; - quicksort_placef(place, ordering, i, max_in_level - 1); - } - - node = ordering[i]; - if (place[node] < lower_bound) { - place[node] = lower_bound; - } - } -} - -static void -computeHierarchyBoundaries(float *place, int n, int *ordering, int *levels, - int num_levels, float *hierarchy_boundaries) -{ - int i; - for (i = 0; i < num_levels; i++) { - hierarchy_boundaries[i] = place[ordering[levels[i] - 1]]; - } -} - - -int -constrained_majorization_new(CMajEnv * e, float *b, float **coords, - int cur_axis, int dims, int max_iterations, - float *hierarchy_boundaries, float levels_gap) -{ - int n = e->n; - float *place = coords[cur_axis]; - float **lap = e->A; - int *ordering = e->ordering; - int *levels = e->levels; - int num_levels = e->num_levels; - int i, j; - float new_place_i; - boolean converged = FALSE; - float upper_bound, lower_bound; - int node; - int left, right; - float cur_place; - float des_place_block; - float block_deg; - float toBlockConnectivity; - float *lap_node; - int block_len; - int first_next_level; - int level = -1, max_in_level = 0; - float *desired_place; - float *prefix_desired_place; - float *suffix_desired_place; - int *block; - int *lev; - int counter; - - if (max_iterations <= 0) { - return 0; - } - if (levels_gap != 0) { - return constrained_majorization_new_with_gaps(e, b, coords, - cur_axis, dims, - max_iterations, - hierarchy_boundaries, - levels_gap); - } - - /* ensureMonotonicOrderingWithGaps(place, n, ordering, levels, num_levels); */ - ensureMonotonicOrdering(place, n, ordering); - /* it is important that in 'ordering' nodes are always sorted by layers, - * and within a layer by 'place' - */ - - /* the desired place of each individual node in the current block */ - desired_place = e->fArray1; - /* the desired place of each prefix of current block */ - prefix_desired_place = e->fArray2; - /* the desired place of each suffix of current block */ - suffix_desired_place = e->fArray3; - /* current block (nodes connected by active constraints) */ - block = e->iArray1; - - lev = e->iArray2; /* level of each node */ - for (i = 0; i < n; i++) { - if (i >= max_in_level) { - /* we are entering a new level */ - level++; - if (level == num_levels) { - /* last_level */ - max_in_level = n; - } else { - max_in_level = levels[level]; - } - } - node = ordering[i]; - lev[node] = level; - } - - for (counter = 0; counter < max_iterations && !converged; counter++) { - converged = TRUE; - lower_bound = -1e9; /* no lower bound for first level */ - for (left = 0; left < n; left = right) { - int best_i; - double max_movement; - double movement; - float prefix_des_place, suffix_des_place; - /* compute a block 'ordering[left]...ordering[right-1]' of - * nodes with the same coordinate: - */ - cur_place = place[ordering[left]]; - for (right = left + 1; right < n; right++) { - if (place[ordering[right]] != cur_place) { - break; - } - } - - /* compute desired place of nodes in block: */ - for (i = left; i < right; i++) { - node = ordering[i]; - new_place_i = -b[node]; - lap_node = lap[node]; - for (j = 0; j < n; j++) { - if (j == node) { - continue; - } - new_place_i += lap_node[j] * place[j]; - } - desired_place[node] = new_place_i / (-lap_node[node]); - } - - /* reorder block by levels, and within levels by "relaxed" desired position */ - block_len = 0; - first_next_level = 0; - for (i = left; i < right; i = first_next_level) { - level = lev[ordering[i]]; - if (level == num_levels) { - /* last_level */ - first_next_level = right; - } else { - first_next_level = MIN(right, levels[level]); - } - - /* First, collect all nodes with desired places smaller than current place */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] < cur_place) { - block[block_len++] = node; - } - } - /* Second, collect all nodes with desired places equal to current place */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] == cur_place) { - block[block_len++] = node; - } - } - /* Third, collect all nodes with desired places greater than current place */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] > cur_place) { - block[block_len++] = node; - } - } - } - - /* loop through block and compute desired places of its prefixes */ - des_place_block = 0; - block_deg = 0; - for (i = 0; i < block_len; i++) { - node = block[i]; - toBlockConnectivity = 0; - lap_node = lap[node]; - for (j = 0; j < i; j++) { - toBlockConnectivity -= lap_node[block[j]]; - } - toBlockConnectivity *= 2; - /* update block stats */ - des_place_block = - (block_deg * des_place_block + - (-lap_node[node]) * desired_place[node] + - toBlockConnectivity * cur_place) / (block_deg - - lap_node[node] + - toBlockConnectivity); - prefix_desired_place[i] = des_place_block; - block_deg += toBlockConnectivity - lap_node[node]; - } - - /* loop through block and compute desired places of its suffixes */ - des_place_block = 0; - block_deg = 0; - for (i = block_len - 1; i >= 0; i--) { - node = block[i]; - toBlockConnectivity = 0; - lap_node = lap[node]; - for (j = i + 1; j < block_len; j++) { - toBlockConnectivity -= lap_node[block[j]]; - } - toBlockConnectivity *= 2; - /* update block stats */ - des_place_block = - (block_deg * des_place_block + - (-lap_node[node]) * desired_place[node] + - toBlockConnectivity * cur_place) / (block_deg - - lap_node[node] + - toBlockConnectivity); - suffix_desired_place[i] = des_place_block; - block_deg += toBlockConnectivity - lap_node[node]; - } - - - /* now, find best place to split block */ - best_i = -1; - max_movement = 0; - for (i = 0; i < block_len; i++) { - suffix_des_place = suffix_desired_place[i]; - prefix_des_place = - i > 0 ? prefix_desired_place[i - 1] : suffix_des_place; - /* limit moves to ensure that the prefix is placed before the suffix */ - if (suffix_des_place < prefix_des_place) { - if (suffix_des_place < cur_place) { - if (prefix_des_place > cur_place) { - prefix_des_place = cur_place; - } - suffix_des_place = prefix_des_place; - } else if (prefix_des_place > cur_place) { - prefix_des_place = suffix_des_place; - } - } - movement = - (block_len - i) * fabs(suffix_des_place - cur_place) + - i * fabs(prefix_des_place - cur_place); - if (movement > max_movement) { - max_movement = movement; - best_i = i; - } - } - /* Actually move prefix and suffix */ - if (best_i >= 0) { - suffix_des_place = suffix_desired_place[best_i]; - prefix_des_place = - best_i > - 0 ? prefix_desired_place[best_i - - 1] : suffix_des_place; - - /* compute right border of feasible move */ - if (right >= n) { - /* no nodes after current block */ - upper_bound = 1e9; - } else { - upper_bound = place[ordering[right]]; - } - suffix_des_place = MIN(suffix_des_place, upper_bound); - prefix_des_place = MAX(prefix_des_place, lower_bound); - - /* limit moves to ensure that the prefix is placed before the suffix */ - if (suffix_des_place < prefix_des_place) { - if (suffix_des_place < cur_place) { - if (prefix_des_place > cur_place) { - prefix_des_place = cur_place; - } - suffix_des_place = prefix_des_place; - } else if (prefix_des_place > cur_place) { - prefix_des_place = suffix_des_place; - } - } - - /* move prefix: */ - for (i = 0; i < best_i; i++) { - place[block[i]] = prefix_des_place; - } - /* move suffix: */ - for (i = best_i; i < block_len; i++) { - place[block[i]] = suffix_des_place; - } - - lower_bound = suffix_des_place; /* lower bound for next block */ - - /* reorder 'ordering' to reflect change of places - * Note that it is enough to reorder the level where - * the split was done - */ -#if 0 - int max_in_level, min_in_level; - - level = lev[best_i]; - if (level == num_levels) { - /* last_level */ - max_in_level = MIN(right, n); - } else { - max_in_level = MIN(right, levels[level]); - } - if (level == 0) { - /* first level */ - min_in_level = MAX(left, 0); - } else { - min_in_level = MAX(left, levels[level - 1]); - } -#endif - for (i = left; i < right; i++) { - ordering[i] = block[i - left]; - } - converged = converged - && fabs(prefix_des_place - cur_place) < quad_prog_tol - && fabs(suffix_des_place - cur_place) < quad_prog_tol; - - } else { - /* no movement */ - lower_bound = cur_place; /* lower bound for next block */ - } - - } - } - - computeHierarchyBoundaries(place, n, ordering, levels, num_levels, - hierarchy_boundaries); - - return counter; -} - -#ifdef IPSEPCOLA -static float *place; -static int compare_incr(const void *a, const void *b) -{ - if (place[*(int *) a] > place[*(int *) b]) { - return 1; - } else if (place[*(int *) a] < place[*(int *) b]) { - return -1; - } - return 0; -} - -/* -While not converged: move everything towards the optimum, then satisfy constraints with as little displacement as possible. -Returns number of iterations before convergence. -*/ -int constrained_majorization_gradient_projection(CMajEnv * e, - float *b, float **coords, - int ndims, int cur_axis, - int max_iterations, - float - *hierarchy_boundaries, - float levels_gap) -{ - - int i, j, counter; - int *ordering = e->ordering; - int *levels = e->levels; - int num_levels = e->num_levels; - boolean converged = FALSE; - float *g = e->fArray1; - float *old_place = e->fArray2; - float *d = e->fArray4; - float test = 0, tmptest = 0; - float beta; - - if (max_iterations == 0) - return 0; - - place = coords[cur_axis]; -#ifdef CONMAJ_LOGGING - double prev_stress = 0; - static int call_no = 0; - for (i = 0; i < e->n; i++) { - prev_stress += 2 * b[i] * place[i]; - for (j = 0; j < e->n; j++) { - prev_stress -= e->A[i][j] * place[j] * place[i]; - } - } - FILE *logfile = fopen("constrained_majorization_log", "a"); - - fprintf(logfile, "grad proj %d: stress=%f\n", call_no, prev_stress); -#endif - for (counter = 0; counter < max_iterations && !converged; counter++) { - float alpha; - float numerator = 0, denominator = 0, r; - converged = TRUE; - /* find steepest descent direction */ - for (i = 0; i < e->n; i++) { - old_place[i] = place[i]; - g[i] = 2 * b[i]; - for (j = 0; j < e->n; j++) { - g[i] -= 2 * e->A[i][j] * place[j]; - } - } - for (i = 0; i < e->n; i++) { - numerator += g[i] * g[i]; - r = 0; - for (j = 0; j < e->n; j++) { - r += 2 * e->A[i][j] * g[j]; - } - denominator -= r * g[i]; - } - alpha = numerator / denominator; - for (i = 0; i < e->n; i++) { - if (alpha > 0 && alpha < 1000) { - place[i] -= alpha * g[i]; - } - } - if (num_levels) - qsort((int *) ordering, (size_t) levels[0], sizeof(int), - compare_incr); - /* project to constraint boundary */ - for (i = 0; i < num_levels; i++) { - int endOfLevel = i == num_levels - 1 ? e->n : levels[i + 1]; - int ui, li, u, l; - - /* ensure monotic increase in position within levels */ - qsort((int *) ordering + levels[i], - (size_t) endOfLevel - levels[i], sizeof(int), - compare_incr); - /* If there are overlapping levels find offending nodes and place at average position */ - ui = levels[i]; li = ui - 1; - l = ordering[li--]; u = ordering[ui++]; - if (place[l] + levels_gap > place[u]) { - float sum = - place[l] + place[u] - levels_gap * (e->lev[l] + - e->lev[u]), w = 2; - float avgPos = sum / w; - float pos; - boolean finished; - do { - finished = TRUE; - if (ui < endOfLevel) { - u = ordering[ui]; - pos = place[u] - levels_gap * e->lev[u]; - if (pos < avgPos) { - ui++; - w++; - sum += pos; - avgPos = sum / w; - finished = FALSE; - } - } - - if (li >= 0) { - l = ordering[li]; - pos = place[l] - levels_gap * e->lev[l]; - if (pos > avgPos) { - li--; - w++; - sum += pos; - avgPos = sum / w; - finished = FALSE; - } - } - } while (!finished); - for (j = li + 1; j < ui; j++) { - place[ordering[j]] = - avgPos + levels_gap * e->lev[ordering[j]]; - } - } - } - /* set place to the intersection of old_place-g and boundary and compute d, the vector from intersection pnt to projection pnt */ - for (i = 0; i < e->n; i++) { - d[i] = place[i] - old_place[i]; - } - /* now compute beta */ - numerator = 0, denominator = 0; - for (i = 0; i < e->n; i++) { - numerator += g[i] * d[i]; - r = 0; - for (j = 0; j < e->n; j++) { - r += 2 * e->A[i][j] * d[j]; - } - denominator += r * d[i]; - } - beta = numerator / denominator; - - for (i = 0; i < e->n; i++) { - if (beta > 0 && beta < 1.0) { - place[i] = old_place[i] + beta * d[i]; - } - tmptest = fabs(place[i] - old_place[i]); - if (test < tmptest) - test = tmptest; - } - computeHierarchyBoundaries(place, e->n, ordering, levels, - num_levels, hierarchy_boundaries); -#if 0 - if (num_levels) - qsort((int *) ordering, (size_t) levels[0], sizeof(int), - compare_incr); - for (i = 0; i < num_levels; i++) { - int endOfLevel = i == num_levels - 1 ? e->n : levels[i + 1]; - /* ensure monotic increase in position within levels */ - qsort((int *) ordering + levels[i], - (size_t) endOfLevel - levels[i], sizeof(int), - compare_incr); - /* If there are overlapping levels find offending nodes and place at average position */ - int l = ordering[levels[i] - 1], u = ordering[levels[i]]; - /* assert(place[l]+levels_gap<=place[u]+0.00001); */ - } -#endif -#ifdef CONMAJ_LOGGING - double stress = 0; - for (i = 0; i < e->n; i++) { - stress += 2 * b[i] * place[i]; - for (j = 0; j < e->n; j++) { - stress -= e->A[i][j] * place[j] * place[i]; - } - } - fprintf(logfile, "%d: stress=%f, test=%f, %s\n", call_no, stress, - test, (stress >= prev_stress) ? "No Improvement" : ""); - prev_stress = stress; -#endif - if (test > quad_prog_tol) { - converged = FALSE; - } - } -#ifdef CONMAJ_LOGGING - call_no++; - fclose(logfile); -#endif - return counter; -} -#endif - -int -constrained_majorization_new_with_gaps(CMajEnv * e, float *b, - float **coords, int ndims, - int cur_axis, int max_iterations, - float *hierarchy_boundaries, - float levels_gap) -{ - float *place = coords[cur_axis]; - int i, j; - int n = e->n; - float **lap = e->A; - int *ordering = e->ordering; - int *levels = e->levels; - int num_levels = e->num_levels; - float new_place_i; - boolean converged = FALSE; - float upper_bound, lower_bound; - int node; - int left, right; - float cur_place; - float des_place_block; - float block_deg; - float toBlockConnectivity; - float *lap_node; - float *desired_place; - float *prefix_desired_place; - float *suffix_desired_place; - int *block; - int block_len; - int first_next_level; - int *lev; - int level = -1, max_in_level = 0; - int counter; - float *gap; - float total_gap, target_place; - - if (max_iterations <= 0) { - return 0; - } - - ensureMonotonicOrderingWithGaps(place, n, ordering, levels, num_levels, - levels_gap); - /* it is important that in 'ordering' nodes are always sorted by layers, - * and within a layer by 'place' - */ - - /* the desired place of each individual node in the current block */ - desired_place = e->fArray1; - /* the desired place of each prefix of current block */ - prefix_desired_place = e->fArray2; - /* the desired place of each suffix of current block */ - suffix_desired_place = e->fArray3; - /* current block (nodes connected by active constraints) */ - block = e->iArray1; - - lev = e->iArray2; /* level of each node */ - for (i = 0; i < n; i++) { - if (i >= max_in_level) { - /* we are entering a new level */ - level++; - if (level == num_levels) { - /* last_level */ - max_in_level = n; - } else { - max_in_level = levels[level]; - } - } - node = ordering[i]; - lev[node] = level; - } - - /* displacement of block's nodes from block's reference point */ - gap = e->fArray4; - - for (counter = 0; counter < max_iterations && !converged; counter++) { - converged = TRUE; - lower_bound = -1e9; /* no lower bound for first level */ - for (left = 0; left < n; left = right) { - int best_i; - double max_movement; - double movement; - float prefix_des_place, suffix_des_place; - /* compute a block 'ordering[left]...ordering[right-1]' of - * nodes connected with active constraints - */ - cur_place = place[ordering[left]]; - total_gap = 0; - target_place = cur_place; - gap[ordering[left]] = 0; - for (right = left + 1; right < n; right++) { - if (lev[right] > lev[right - 1]) { - /* we are entering a new level */ - target_place += levels_gap; /* note that 'levels_gap' may be negative */ - total_gap += levels_gap; - } - node = ordering[right]; -#if 0 - if (place[node] != target_place) -#endif - /* not sure if this is better than 'place[node]!=target_place' */ - if (fabs(place[node] - target_place) > 1e-9) { - break; - } - gap[node] = place[node] - cur_place; - } - - /* compute desired place of block's reference point according - * to each node in the block: - */ - for (i = left; i < right; i++) { - node = ordering[i]; - new_place_i = -b[node]; - lap_node = lap[node]; - for (j = 0; j < n; j++) { - if (j == node) { - continue; - } - new_place_i += lap_node[j] * place[j]; - } - desired_place[node] = - new_place_i / (-lap_node[node]) - gap[node]; - } - - /* reorder block by levels, and within levels - * by "relaxed" desired position - */ - block_len = 0; - first_next_level = 0; - for (i = left; i < right; i = first_next_level) { - level = lev[ordering[i]]; - if (level == num_levels) { - /* last_level */ - first_next_level = right; - } else { - first_next_level = MIN(right, levels[level]); - } - - /* First, collect all nodes with desired places smaller - * than current place - */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] < cur_place) { - block[block_len++] = node; - } - } - /* Second, collect all nodes with desired places equal - * to current place - */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] == cur_place) { - block[block_len++] = node; - } - } - /* Third, collect all nodes with desired places greater - * than current place - */ - for (j = i; j < first_next_level; j++) { - node = ordering[j]; - if (desired_place[node] > cur_place) { - block[block_len++] = node; - } - } - } - - /* loop through block and compute desired places of its prefixes */ - des_place_block = 0; - block_deg = 0; - for (i = 0; i < block_len; i++) { - node = block[i]; - toBlockConnectivity = 0; - lap_node = lap[node]; - for (j = 0; j < i; j++) { - toBlockConnectivity -= lap_node[block[j]]; - } - toBlockConnectivity *= 2; - /* update block stats */ - des_place_block = - (block_deg * des_place_block + - (-lap_node[node]) * desired_place[node] + - toBlockConnectivity * cur_place) / (block_deg - - lap_node[node] + - toBlockConnectivity); - prefix_desired_place[i] = des_place_block; - block_deg += toBlockConnectivity - lap_node[node]; - } - - if (block_len == n) { - /* fix is needed since denominator was 0 in this case */ - prefix_desired_place[n - 1] = cur_place; /* a "neutral" value */ - } - - /* loop through block and compute desired places of its suffixes */ - des_place_block = 0; - block_deg = 0; - for (i = block_len - 1; i >= 0; i--) { - node = block[i]; - toBlockConnectivity = 0; - lap_node = lap[node]; - for (j = i + 1; j < block_len; j++) { - toBlockConnectivity -= lap_node[block[j]]; - } - toBlockConnectivity *= 2; - /* update block stats */ - des_place_block = - (block_deg * des_place_block + - (-lap_node[node]) * desired_place[node] + - toBlockConnectivity * cur_place) / (block_deg - - lap_node[node] + - toBlockConnectivity); - suffix_desired_place[i] = des_place_block; - block_deg += toBlockConnectivity - lap_node[node]; - } - - if (block_len == n) { - /* fix is needed since denominator was 0 in this case */ - suffix_desired_place[0] = cur_place; /* a "neutral" value? */ - } - - - /* now, find best place to split block */ - best_i = -1; - max_movement = 0; - for (i = 0; i < block_len; i++) { - suffix_des_place = suffix_desired_place[i]; - prefix_des_place = - i > 0 ? prefix_desired_place[i - 1] : suffix_des_place; - /* limit moves to ensure that the prefix is placed before the suffix */ - if (suffix_des_place < prefix_des_place) { - if (suffix_des_place < cur_place) { - if (prefix_des_place > cur_place) { - prefix_des_place = cur_place; - } - suffix_des_place = prefix_des_place; - } else if (prefix_des_place > cur_place) { - prefix_des_place = suffix_des_place; - } - } - movement = - (block_len - i) * fabs(suffix_des_place - cur_place) + - i * fabs(prefix_des_place - cur_place); - if (movement > max_movement) { - max_movement = movement; - best_i = i; - } - } - /* Actually move prefix and suffix */ - if (best_i >= 0) { - suffix_des_place = suffix_desired_place[best_i]; - prefix_des_place = - best_i > - 0 ? prefix_desired_place[best_i - - 1] : suffix_des_place; - - /* compute right border of feasible move */ - if (right >= n) { - /* no nodes after current block */ - upper_bound = 1e9; - } else { - /* notice that we have to deduct 'gap[block[block_len-1]]' - * since all computations should be relative to - * the block's reference point - */ - if (lev[ordering[right]] > lev[ordering[right - 1]]) { - upper_bound = - place[ordering[right]] - levels_gap - - gap[block[block_len - 1]]; - } else { - upper_bound = - place[ordering[right]] - - gap[block[block_len - 1]]; - } - } - suffix_des_place = MIN(suffix_des_place, upper_bound); - prefix_des_place = MAX(prefix_des_place, lower_bound); - - /* limit moves to ensure that the prefix is placed before the suffix */ - if (suffix_des_place < prefix_des_place) { - if (suffix_des_place < cur_place) { - if (prefix_des_place > cur_place) { - prefix_des_place = cur_place; - } - suffix_des_place = prefix_des_place; - } else if (prefix_des_place > cur_place) { - prefix_des_place = suffix_des_place; - } - } - - /* move prefix: */ - for (i = 0; i < best_i; i++) { - place[block[i]] = prefix_des_place + gap[block[i]]; - } - /* move suffix: */ - for (i = best_i; i < block_len; i++) { - place[block[i]] = suffix_des_place + gap[block[i]]; - } - - - /* compute lower bound for next block */ - if (right < n - && lev[ordering[right]] > lev[ordering[right - 1]]) { - lower_bound = place[block[block_len - 1]] + levels_gap; - } else { - lower_bound = place[block[block_len - 1]]; - } - - - /* reorder 'ordering' to reflect change of places - * Note that it is enough to reorder the level where - * the split was done - */ -#if 0 - int max_in_level, min_in_level; - - level = lev[best_i]; - if (level == num_levels) { - /* last_level */ - max_in_level = MIN(right, n); - } else { - max_in_level = MIN(right, levels[level]); - } - if (level == 0) { - /* first level */ - min_in_level = MAX(left, 0); - } else { - min_in_level = MAX(left, levels[level - 1]); - } -#endif - for (i = left; i < right; i++) { - ordering[i] = block[i - left]; - } - converged = converged - && fabs(prefix_des_place - cur_place) < quad_prog_tol - && fabs(suffix_des_place - cur_place) < quad_prog_tol; - - - } else { - /* no movement */ - /* compute lower bound for next block */ - if (right < n - && lev[ordering[right]] > lev[ordering[right - 1]]) { - lower_bound = place[block[block_len - 1]] + levels_gap; - } else { - lower_bound = place[block[block_len - 1]]; - } - } - } - orthog1f(n, place); /* for numerical stability, keep ||place|| small */ - computeHierarchyBoundaries(place, n, ordering, levels, num_levels, - hierarchy_boundaries); - } - - return counter; -} - -void deleteCMajEnv(CMajEnv * e) -{ - free(e->A[0]); - free(e->A); - free(e->lev); - free(e->fArray1); - free(e->fArray2); - free(e->fArray3); - free(e->fArray4); - free(e->iArray1); - free(e->iArray2); - free(e->iArray3); - free(e->iArray4); - free(e); -} - -CMajEnv *initConstrainedMajorization(float *packedMat, int n, - int *ordering, int *levels, - int num_levels) -{ - int i, level = -1, start_of_level_above = 0; - CMajEnv *e = GNEW(CMajEnv); - e->A = NULL; - e->n = n; - e->ordering = ordering; - e->levels = levels; - e->num_levels = num_levels; - e->A = unpackMatrix(packedMat, n); - e->lev = N_GNEW(n, int); - for (i = 0; i < e->n; i++) { - if (i >= start_of_level_above) { - level++; - start_of_level_above = - (level == num_levels) ? e->n : levels[level]; - } - e->lev[ordering[i]] = level; - } - e->fArray1 = N_GNEW(n, float); - e->fArray2 = N_GNEW(n, float); - e->fArray3 = N_GNEW(n, float); - e->fArray4 = N_GNEW(n, float); - e->iArray1 = N_GNEW(n, int); - e->iArray2 = N_GNEW(n, int); - e->iArray3 = N_GNEW(n, int); - e->iArray4 = N_GNEW(n, int); - return e; -} -#endif /* DIGCOLA */ diff --git a/internal/ccall/neatogen/quad_prog_solver.h b/internal/ccall/neatogen/quad_prog_solver.h deleted file mode 100644 index ccf29d8..0000000 --- a/internal/ccall/neatogen/quad_prog_solver.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _CMAJ_H_ -#define _CMAJ_H_ - -#ifdef DIGCOLA - -typedef struct { - float **A; - int n; - int *lev; - int *iArray1; - int *iArray2; - int *iArray3; - int *iArray4; - float *fArray1; - float *fArray2; - float *fArray3; - float *fArray4; - float *A_r; - int *ordering; - int *levels; - int num_levels; -}CMajEnv; - -extern CMajEnv* initConstrainedMajorization(float *, int, int*, int*, int); - -extern int constrained_majorization_new(CMajEnv*, float*, float**, - int, int, int, float*, float); - -extern int constrained_majorization_new_with_gaps(CMajEnv*, float*, float**, - int, int, int, float*, float); -#ifdef IPSEPCOLA -extern int constrained_majorization_gradient_projection(CMajEnv *e, - float * b, float ** coords, int ndims, int cur_axis, int max_iterations, - float * hierarchy_boundaries,float levels_gap); -#endif -extern void deleteCMajEnv(CMajEnv *e); - -extern float** unpackMatrix(float * packedMat, int n); - -#endif - -#endif /* _CMAJ_H_ */ - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/quad_prog_vpsc.c b/internal/ccall/neatogen/quad_prog_vpsc.c deleted file mode 100644 index 3621e6c..0000000 --- a/internal/ccall/neatogen/quad_prog_vpsc.c +++ /dev/null @@ -1,701 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -/********************************************************** - * - * Solve a quadratic function f(X) = X' e->A X + b X - * subject to a set of separation constraints e->cs - * - * Tim Dwyer, 2006 - **********************************************************/ - -#include "digcola.h" -#ifdef IPSEPCOLA -#include -#include -#include -#include -#include -#include -#include "matrix_ops.h" -#include "kkutils.h" -#include -#include "quad_prog_vpsc.h" -#include "quad_prog_solver.h" - -/* #define CONMAJ_LOGGING 1 */ -#define quad_prog_tol 1e-4 - -/* - * Use gradient-projection to solve Variable Placement with Separation Constraints problem. - */ -int -constrained_majorization_vpsc(CMajEnvVPSC * e, float *b, float *place, - int max_iterations) -{ - int i, j, counter; - float *g, *old_place, *d; - /* for laplacian computation need number of real vars and those - * dummy vars included in lap - */ - int n = e->nv + e->nldv; - boolean converged = FALSE; -#ifdef CONMAJ_LOGGING - static int call_no = 0; -#endif /* CONMAJ_LOGGING */ - - if (max_iterations == 0) - return 0; - g = e->fArray1; - old_place = e->fArray2; - d = e->fArray3; - /* fprintf(stderr,"Entered: constrained_majorization_vpsc, #constraints=%d\n",e->m); */ - if (e->m > 0) { - for (i = 0; i < n; i++) { - setVariableDesiredPos(e->vs[i], place[i]); - } - /* fprintf(stderr," calling satisfyVPSC...\n"); */ - satisfyVPSC(e->vpsc); - for (i = 0; i < n; i++) { - place[i] = getVariablePos(e->vs[i]); - /* fprintf(stderr,"vs[%d]=%f\n",i,place[i]); */ - } - /* fprintf(stderr," done.\n"); */ - } -#ifdef CONMAJ_LOGGING - float prev_stress = 0; - for (i = 0; i < n; i++) { - prev_stress += 2 * b[i] * place[i]; - for (j = 0; j < n; j++) { - prev_stress -= e->A[i][j] * place[j] * place[i]; - } - } - FILE *logfile = fopen("constrained_majorization_log", "a"); - - /* fprintf(logfile,"grad proj %d: stress=%f\n",call_no,prev_stress); */ -#endif - - for (counter = 0; counter < max_iterations && !converged; counter++) { - float test = 0; - float alpha, beta; - float numerator = 0, denominator = 0, r; - /* fprintf(stderr,"."); */ - converged = TRUE; - /* find steepest descent direction */ - for (i = 0; i < n; i++) { - old_place[i] = place[i]; - g[i] = 2 * b[i]; - for (j = 0; j < n; j++) { - g[i] -= 2 * e->A[i][j] * place[j]; - } - } - for (i = 0; i < n; i++) { - numerator += g[i] * g[i]; - r = 0; - for (j = 0; j < n; j++) { - r += 2 * e->A[i][j] * g[j]; - } - denominator -= r * g[i]; - } - if (denominator != 0) - alpha = numerator / denominator; - else - alpha = 1.0; - for (i = 0; i < n; i++) { - place[i] -= alpha * g[i]; - } - if (e->m > 0) { - /* project to constraint boundary */ - for (i = 0; i < n; i++) { - setVariableDesiredPos(e->vs[i], place[i]); - } - satisfyVPSC(e->vpsc); - for (i = 0; i < n; i++) { - place[i] = getVariablePos(e->vs[i]); - } - } - /* set place to the intersection of old_place-g and boundary and - * compute d, the vector from intersection pnt to projection pnt - */ - for (i = 0; i < n; i++) { - d[i] = place[i] - old_place[i]; - } - /* now compute beta */ - numerator = 0, denominator = 0; - for (i = 0; i < n; i++) { - numerator += g[i] * d[i]; - r = 0; - for (j = 0; j < n; j++) { - r += 2 * e->A[i][j] * d[j]; - } - denominator += r * d[i]; - } - if (denominator != 0.0) - beta = numerator / denominator; - else - beta = 1.0; - - for (i = 0; i < n; i++) { - /* beta > 1.0 takes us back outside the feasible region - * beta < 0 clearly not useful and may happen due to numerical imp. - */ - if (beta > 0 && beta < 1.0) { - place[i] = old_place[i] + beta * d[i]; - } - test += fabs(place[i] - old_place[i]); - } -#ifdef CONMAJ_LOGGING - float stress = 0; - for (i = 0; i < n; i++) { - stress += 2 * b[i] * place[i]; - for (j = 0; j < n; j++) { - stress -= e->A[i][j] * place[j] * place[i]; - } - } - fprintf(logfile, "%d: stress=%f, test=%f, %s\n", call_no, stress, - test, (stress >= prev_stress) ? "No Improvement" : ""); - prev_stress = stress; -#endif - if (test > quad_prog_tol) { - converged = FALSE; - } - } -#ifdef CONMAJ_LOGGING - call_no++; - fclose(logfile); -#endif - return counter; -} - -/* - * Set up environment and global constraints (dir-edge constraints, containment constraints - * etc). - * - * diredges: 0=no dir edge constraints - * 1=one separation constraint for each edge (in acyclic subgraph) - * 2=DiG-CoLa level constraints - */ -CMajEnvVPSC *initCMajVPSC(int n, float *packedMat, vtx_data * graph, - ipsep_options * opt, int diredges) -{ - int i, j; - /* nv is the number of real nodes */ - int nConCs; - /* fprintf(stderr,"Entered initCMajVPSC\n"); */ - CMajEnvVPSC *e = GNEW(CMajEnvVPSC); - e->A = NULL; - e->packedMat = packedMat; - /* if we have clusters then we'll need two constraints for each var in - * a cluster */ - e->nldv = 2 * opt->clusters->nclusters; - e->nv = n - e->nldv; - e->ndv = 0; - - e->gcs = NULL; - e->vs = N_GNEW(n, Variable *); - for (i = 0; i < n; i++) { - e->vs[i] = newVariable(i, 1.0, 1.0); - } - e->gm = 0; - if (diredges == 1) { - if (Verbose) - fprintf(stderr, " generate edge constraints...\n"); - for (i = 0; i < e->nv; i++) { - for (j = 1; j < graph[i].nedges; j++) { - /* fprintf(stderr,"edist=%f\n",graph[i].edists[j]); */ - if (graph[i].edists[j] > 0.01) { - e->gm++; - } - } - } - e->gcs = newConstraints(e->gm); - e->gm = 0; - for (i = 0; i < e->nv; i++) { - for (j = 1; j < graph[i].nedges; j++) { - int u = i, v = graph[i].edges[j]; - if (graph[i].edists[j] > 0) { - e->gcs[e->gm++] = - newConstraint(e->vs[u], e->vs[v], opt->edge_gap); - } - } - } - } else if (diredges == 2) { - int *ordering = NULL, *ls = NULL, cvar; - double halfgap; - DigColaLevel *levels; - Variable **vs = e->vs; - /* e->ndv is the number of dummy variables required, one for each boundary */ - if (compute_hierarchy(graph, e->nv, 1e-2, 1e-1, NULL, &ordering, &ls, - &e->ndv)) return NULL; - levels = assign_digcola_levels(ordering, e->nv, ls, e->ndv); - if (Verbose) - fprintf(stderr, "Found %d DiG-CoLa boundaries\n", e->ndv); - e->gm = - get_num_digcola_constraints(levels, e->ndv + 1) + e->ndv - 1; - e->gcs = newConstraints(e->gm); - e->gm = 0; - e->vs = N_GNEW(n + e->ndv, Variable *); - for (i = 0; i < n; i++) { - e->vs[i] = vs[i]; - } - free(vs); - /* create dummy vars */ - for (i = 0; i < e->ndv; i++) { - /* dummy vars should have 0 weight */ - cvar = n + i; - e->vs[cvar] = newVariable(cvar, 1.0, 0.000001); - } - halfgap = opt->edge_gap; - for (i = 0; i < e->ndv; i++) { - cvar = n + i; - /* outgoing constraints for each var in level below boundary */ - for (j = 0; j < levels[i].num_nodes; j++) { - e->gcs[e->gm++] = - newConstraint(e->vs[levels[i].nodes[j]], e->vs[cvar], - halfgap); - } - /* incoming constraints for each var in level above boundary */ - for (j = 0; j < levels[i + 1].num_nodes; j++) { - e->gcs[e->gm++] = - newConstraint(e->vs[cvar], - e->vs[levels[i + 1].nodes[j]], halfgap); - } - } - /* constraints between adjacent boundary dummy vars */ - for (i = 0; i < e->ndv - 1; i++) { - e->gcs[e->gm++] = - newConstraint(e->vs[n + i], e->vs[n + i + 1], 0); - } - } - /* fprintf(stderr," generate edge constraints... done: n=%d,m=%d\n",e->n,e->gm); */ - if (opt->clusters->nclusters > 0) { - /* fprintf(stderr," generate cluster containment constraints...\n"); */ - Constraint **ecs = e->gcs; - nConCs = 2 * opt->clusters->nvars; - e->gcs = newConstraints(e->gm + nConCs); - for (i = 0; i < e->gm; i++) { - e->gcs[i] = ecs[i]; - } - if (ecs != NULL) - deleteConstraints(0, ecs); - for (i = 0; i < opt->clusters->nclusters; i++) { - for (j = 0; j < opt->clusters->clustersizes[i]; j++) { - Variable *v = e->vs[opt->clusters->clusters[i][j]]; - Variable *cl = e->vs[e->nv + 2 * i]; - Variable *cr = e->vs[e->nv + 2 * i + 1]; - e->gcs[e->gm++] = newConstraint(cl, v, 0); - e->gcs[e->gm++] = newConstraint(v, cr, 0); - } - } - /* fprintf(stderr," containment constraints... done: \n"); */ - } - - e->m = 0; - e->cs = NULL; - if (e->gm > 0) { - e->vpsc = newIncVPSC(n + e->ndv, e->vs, e->gm, e->gcs); - e->m = e->gm; - e->cs = e->gcs; - } - if (packedMat != NULL) { - e->A = unpackMatrix(packedMat, n); - } -#ifdef MOSEK - e->mosekEnv = NULL; - if (opt->mosek) { - e->mosekEnv = - mosek_init_sep(e->packedMat, n, e->ndv, e->gcs, e->gm); - } -#endif - - e->fArray1 = N_GNEW(n, float); - e->fArray2 = N_GNEW(n, float); - e->fArray3 = N_GNEW(n, float); - if (Verbose) - fprintf(stderr, - " initCMajVPSC done: %d global constraints generated.\n", - e->m); - return e; -} - -void deleteCMajEnvVPSC(CMajEnvVPSC * e) -{ - int i; - if (e->A != NULL) { - free(e->A[0]); - free(e->A); - } - if (e->m > 0) { - deleteVPSC(e->vpsc); - if (e->cs != e->gcs && e->gcs != NULL) - deleteConstraints(0, e->gcs); - deleteConstraints(e->m, e->cs); - for (i = 0; i < e->nv + e->nldv + e->ndv; i++) { - deleteVariable(e->vs[i]); - } - free(e->vs); - } - free(e->fArray1); - free(e->fArray2); - free(e->fArray3); -#ifdef MOSEK - if (e->mosekEnv) { - mosek_delete(e->mosekEnv); - } -#endif /* MOSEK */ - free(e); -} - -/* generate non-overlap constraints inside each cluster, including dummy - * nodes at bounds of cluster - * generate constraints again for top level nodes and clusters treating - * clusters as rectangles of dim (l,r,b,t) - * for each cluster map in-constraints to l out-constraints to r - * - * For now, we'll keep the global containment constraints already - * generated for each cluster, and simply generate non-overlap constraints - * for all nodes and then an additional set of non-overlap constraints for - * clusters that we'll map back to the dummy vars as above. - */ -void generateNonoverlapConstraints(CMajEnvVPSC * e, - float nsizeScale, - float **coords, - int k, - boolean transitiveClosure, - ipsep_options * opt) -{ - Constraint **csol, **csolptr; - int i, j, mol = 0; - int n = e->nv + e->nldv; -#ifdef WIN32 - boxf* bb = N_GNEW (n, boxf); -#else - boxf bb[n]; -#endif - boolean genclusters = opt->clusters->nclusters > 0; - if (genclusters) { - /* n is the number of real variables, not dummy cluster vars */ - n -= 2 * opt->clusters->nclusters; - } - if (k == 0) { - /* grow a bit in the x dimension, so that if overlap is resolved - * horizontally then it won't be considered overlapping vertically - */ - nsizeScale *= 1.0001; - } - for (i = 0; i < n; i++) { - bb[i].LL.x = - coords[0][i] - nsizeScale * opt->nsize[i].x / 2.0 - - opt->gap.x / 2.0; - bb[i].UR.x = - coords[0][i] + nsizeScale * opt->nsize[i].x / 2.0 + - opt->gap.x / 2.0; - bb[i].LL.y = - coords[1][i] - nsizeScale * opt->nsize[i].y / 2.0 - - opt->gap.y / 2.0; - bb[i].UR.y = - coords[1][i] + nsizeScale * opt->nsize[i].y / 2.0 + - opt->gap.y / 2.0; - } - if (genclusters) { -#ifdef WIN32 - Constraint ***cscl = N_GNEW(opt->clusters->nclusters + 1, Constraint**); - int* cm = N_GNEW(opt->clusters->nclusters + 1, int); -#else - Constraint **cscl[opt->clusters->nclusters + 1]; - int cm[opt->clusters->nclusters + 1]; -#endif - for (i = 0; i < opt->clusters->nclusters; i++) { - int cn = opt->clusters->clustersizes[i]; -#ifdef WIN32 - Variable** cvs = N_GNEW(cn + 2, Variable*); - boxf* cbb = N_GNEW(cn + 2, boxf); -#else - Variable *cvs[cn + 2]; - boxf cbb[cn + 2]; -#endif - /* compute cluster bounding bb */ - boxf container; - container.LL.x = container.LL.y = DBL_MAX; - container.UR.x = container.UR.y = -DBL_MAX; - for (j = 0; j < cn; j++) { - int iv = opt->clusters->clusters[i][j]; - cvs[j] = e->vs[iv]; - B2BF(bb[iv], cbb[j]); - EXPANDBB(container, bb[iv]); - } - B2BF(container, opt->clusters->bb[i]); - cvs[cn] = e->vs[n + 2 * i]; - cvs[cn + 1] = e->vs[n + 2 * i + 1]; - B2BF(container, cbb[cn]); - B2BF(container, cbb[cn + 1]); - if (k == 0) { - cbb[cn].UR.x = container.LL.x + 0.0001; - cbb[cn + 1].LL.x = container.UR.x - 0.0001; - cm[i] = - genXConstraints(cn + 2, cbb, cvs, &cscl[i], - transitiveClosure); - } else { - cbb[cn].UR.y = container.LL.y + 0.0001; - cbb[cn + 1].LL.y = container.UR.y - 0.0001; - cm[i] = genYConstraints(cn + 2, cbb, cvs, &cscl[i]); - } - mol += cm[i]; -#ifdef WIN32 - free (cvs); - free (cbb); -#endif - } - /* generate top level constraints */ - { - int cn = opt->clusters->ntoplevel + opt->clusters->nclusters; -#ifdef WIN32 - Variable** cvs = N_GNEW(cn,Variable*); - boxf* cbb = N_GNEW(cn, boxf); -#else - Variable *cvs[cn]; - boxf cbb[cn]; -#endif - for (i = 0; i < opt->clusters->ntoplevel; i++) { - int iv = opt->clusters->toplevel[i]; - cvs[i] = e->vs[iv]; - B2BF(bb[iv], cbb[i]); - } - /* make dummy variables for clusters */ - for (i = opt->clusters->ntoplevel; i < cn; i++) { - cvs[i] = newVariable(123 + i, 1, 1); - j = i - opt->clusters->ntoplevel; - B2BF(opt->clusters->bb[j], cbb[i]); - } - i = opt->clusters->nclusters; - if (k == 0) { - cm[i] = - genXConstraints(cn, cbb, cvs, &cscl[i], - transitiveClosure); - } else { - cm[i] = genYConstraints(cn, cbb, cvs, &cscl[i]); - } - /* remap constraints from tmp dummy vars to cluster l and r vars */ - for (i = opt->clusters->ntoplevel; i < cn; i++) { - double dgap; - j = i - opt->clusters->ntoplevel; - /* dgap is the change in required constraint gap. - * since we are going from a source rectangle the size - * of the cluster bounding box to a zero width (in x dim, - * zero height in y dim) rectangle, the change will be - * half the bb width. - */ - if (k == 0) { - dgap = -(cbb[i].UR.x - cbb[i].LL.x) / 2.0; - } else { - dgap = -(cbb[i].UR.y - cbb[i].LL.y) / 2.0; - } - remapInConstraints(cvs[i], e->vs[n + 2 * j], dgap); - remapOutConstraints(cvs[i], e->vs[n + 2 * j + 1], dgap); - /* there may be problems with cycles between - * cluster non-overlap and diredge constraints, - * to resolve: - * - * for each constraint c:v->cvs[i]: - * if exists diredge constraint u->v where u in c: - * remap v->cl to cr->v (gap = height(v)/2) - * - * in = getInConstraints(cvs[i]) - * for(c : in) { - * assert(c.right==cvs[i]); - * vin = getOutConstraints(v=c.left) - * for(d : vin) { - * if(d.left.cluster==i): - * tmp = d.left - * d.left = d.right - * d.right = tmp - * d.gap = height(d.right)/2 - * } - * } - * - */ - deleteVariable(cvs[i]); - } - mol += cm[opt->clusters->nclusters]; -#ifdef WIN32 - free (cvs); - free (cbb); -#endif - } - csolptr = csol = newConstraints(mol); - for (i = 0; i < opt->clusters->nclusters + 1; i++) { - /* copy constraints into csol */ - for (j = 0; j < cm[i]; j++) { - *csolptr++ = cscl[i][j]; - } - deleteConstraints(0, cscl[i]); - } -#ifdef WIN32 - free (cscl); - free (cm); -#endif - } else { - if (k == 0) { - mol = genXConstraints(n, bb, e->vs, &csol, transitiveClosure); - } else { - mol = genYConstraints(n, bb, e->vs, &csol); - } - } - /* remove constraints from previous iteration */ - if (e->m > 0) { - /* can't reuse instance of VPSC when constraints change! */ - deleteVPSC(e->vpsc); - for (i = e->gm == 0 ? 0 : e->gm; i < e->m; i++) { - /* delete previous overlap constraints */ - deleteConstraint(e->cs[i]); - } - /* just delete the array, not the elements */ - if (e->cs != e->gcs) - deleteConstraints(0, e->cs); - } - /* if we have no global constraints then the overlap constraints - * are all we have to worry about. - * Otherwise, we have to copy the global and overlap constraints - * into the one array - */ - if (e->gm == 0) { - e->m = mol; - e->cs = csol; - } else { - e->m = mol + e->gm; - e->cs = newConstraints(e->m); - for (i = 0; i < e->m; i++) { - if (i < e->gm) { - e->cs[i] = e->gcs[i]; - } else { - e->cs[i] = csol[i - e->gm]; - } - } - /* just delete the array, not the elements */ - deleteConstraints(0, csol); - } - if (Verbose) - fprintf(stderr, " generated %d constraints\n", e->m); - e->vpsc = newIncVPSC(e->nv + e->nldv + e->ndv, e->vs, e->m, e->cs); -#ifdef MOSEK - if (opt->mosek) { - if (e->mosekEnv != NULL) { - mosek_delete(e->mosekEnv); - } - e->mosekEnv = - mosek_init_sep(e->packedMat, e->nv + e->nldv, e->ndv, e->cs, - e->m); - } -#endif -#ifdef WIN32 - free (bb); -#endif -} - -/* - * Statically remove overlaps, that is remove all overlaps by moving each node as - * little as possible. - */ -void removeoverlaps(int n, float **coords, ipsep_options * opt) -{ - int i; - CMajEnvVPSC *e = initCMajVPSC(n, NULL, NULL, opt, 0); - generateNonoverlapConstraints(e, 1.0, coords, 0, TRUE, opt); - solveVPSC(e->vpsc); - for (i = 0; i < n; i++) { - coords[0][i] = getVariablePos(e->vs[i]); - } - generateNonoverlapConstraints(e, 1.0, coords, 1, FALSE, opt); - solveVPSC(e->vpsc); - for (i = 0; i < n; i++) { - coords[1][i] = getVariablePos(e->vs[i]); - } - deleteCMajEnvVPSC(e); -} - -/* - unpack the "ordering" array into an array of DigColaLevel -*/ -DigColaLevel *assign_digcola_levels(int *ordering, int n, int *level_inds, - int num_divisions) -{ - int i, j; - DigColaLevel *l = N_GNEW(num_divisions + 1, DigColaLevel); - /* first level */ - l[0].num_nodes = level_inds[0]; - l[0].nodes = N_GNEW(l[0].num_nodes, int); - for (i = 0; i < l[0].num_nodes; i++) { - l[0].nodes[i] = ordering[i]; - } - /* second through second last level */ - for (i = 1; i < num_divisions; i++) { - l[i].num_nodes = level_inds[i] - level_inds[i - 1]; - l[i].nodes = N_GNEW(l[i].num_nodes, int); - for (j = 0; j < l[i].num_nodes; j++) { - l[i].nodes[j] = ordering[level_inds[i - 1] + j]; - } - } - /* last level */ - if (num_divisions > 0) { - l[num_divisions].num_nodes = n - level_inds[num_divisions - 1]; - l[num_divisions].nodes = N_GNEW(l[num_divisions].num_nodes, int); - for (i = 0; i < l[num_divisions].num_nodes; i++) { - l[num_divisions].nodes[i] = - ordering[level_inds[num_divisions - 1] + i]; - } - } - return l; -} -void delete_digcola_levels(DigColaLevel * l, int num_levels) -{ - int i; - for (i = 0; i < num_levels; i++) { - free(l[i].nodes); - } - free(l); -} -void print_digcola_levels(FILE * logfile, DigColaLevel * levels, - int num_levels) -{ - int i, j; - fprintf(logfile, "levels:\n"); - for (i = 0; i < num_levels; i++) { - fprintf(logfile, " l[%d]:", i); - for (j = 0; j < levels[i].num_nodes; j++) { - fprintf(logfile, "%d ", levels[i].nodes[j]); - } - fprintf(logfile, "\n"); - } -} - -/********************* -get number of separation constraints based on the number of nodes in each level -ie, num_sep_constraints = sum_i^{num_levels-1} (|L[i]|+|L[i+1]|) -**********************/ -int get_num_digcola_constraints(DigColaLevel * levels, int num_levels) -{ - int i, nc = 0; - for (i = 1; i < num_levels; i++) { - nc += levels[i].num_nodes + levels[i - 1].num_nodes; - } - nc += levels[0].num_nodes + levels[num_levels - 1].num_nodes; - return nc; -} - -#endif /* IPSEPCOLA */ diff --git a/internal/ccall/neatogen/quad_prog_vpsc.h b/internal/ccall/neatogen/quad_prog_vpsc.h deleted file mode 100644 index e69bcee..0000000 --- a/internal/ccall/neatogen/quad_prog_vpsc.h +++ /dev/null @@ -1,95 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -/********************************************************** -* Written by Tim Dwyer for the graphviz package * -* http://www.graphviz.org/ * -* * -**********************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _QUAD_PROG_VPSC_H_ -#define _QUAD_PROG_VPSC_H_ - -#ifdef DIGCOLA - -#include "defs.h" -#include "digcola.h" -#ifdef MOSEK -#include "mosek_quad_solve.h" -#endif /* MOSEK */ - -typedef struct CMajEnvVPSC { - float **A; - float *packedMat; - int nv; /* number of actual vars */ - int nldv; /* number of dummy nodes included in lap matrix */ - int ndv; /* number of dummy nodes not included in lap matrix */ - Variable **vs; - int m; /* total number of constraints for next iteration */ - int gm; /* number of global constraints */ - Constraint **cs; - /* global constraints are persistant throughout optimisation process */ - Constraint **gcs; - VPSC *vpsc; - float *fArray1; /* utility arrays - reusable memory */ - float *fArray2; - float *fArray3; -#ifdef MOSEK - MosekEnv *mosekEnv; -#endif /* MOSEK */ -} CMajEnvVPSC; - -extern CMajEnvVPSC* initCMajVPSC(int n, float *packedMat, vtx_data* graph, ipsep_options *opt, int diredges); - -extern int constrained_majorization_vpsc(CMajEnvVPSC*, float*, float*, int); - -extern void deleteCMajEnvVPSC(CMajEnvVPSC *e); -extern void generateNonoverlapConstraints( - CMajEnvVPSC* e, - float nsizeScale, - float** coords, - int k, - boolean transitiveClosure, - ipsep_options* opt -); - -extern void removeoverlaps(int,float**,ipsep_options*); - -typedef struct { - int *nodes; - int num_nodes; -} DigColaLevel; - -/* - * unpack the "ordering" array into an array of DigColaLevel (as defined above) - */ -extern DigColaLevel* assign_digcola_levels(int *ordering, int n, int *level_inds, int num_divisions); -extern void delete_digcola_levels(DigColaLevel *l, int num_levels); -extern void print_digcola_levels(FILE* logfile, DigColaLevel *levels, int num_levels); -int get_num_digcola_constraints(DigColaLevel *levels, int num_levels); -#endif - -#endif /* _QUAD_PROG_VPSC_H_ */ - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/site.c b/internal/ccall/neatogen/site.c deleted file mode 100644 index d3e970a..0000000 --- a/internal/ccall/neatogen/site.c +++ /dev/null @@ -1,73 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "mem.h" -#include "site.h" -#include - - -int siteidx; -Site *bottomsite; - -static Freelist sfl; -static int nvertices; - -void siteinit() -{ - /* double sn; */ - - freeinit(&sfl, sizeof(Site)); - nvertices = 0; - /* sn = nsites+4; */ - /* sqrt_nsites = sqrt(sn); */ -} - - -Site *getsite() -{ - return ((Site *) getfree(&sfl)); -} - -double dist(Site * s, Site * t) -{ - double ans; - double dx, dy; - - dx = s->coord.x - t->coord.x; - dy = s->coord.y - t->coord.y; - ans = sqrt(dx * dx + dy * dy); - return ans; -} - - -void makevertex(Site * v) -{ - v->sitenbr = nvertices; - nvertices += 1; -#ifdef STANDALONE - out_vertex(v); -#endif -} - - -void deref(Site * v) -{ - v->refcnt -= 1; - if (v->refcnt == 0) - makefree(v, &sfl); -} - -void ref(Site * v) -{ - v->refcnt += 1; -} diff --git a/internal/ccall/neatogen/site.h b/internal/ccall/neatogen/site.h deleted file mode 100644 index ae282d4..0000000 --- a/internal/ccall/neatogen/site.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef SITE_H -#define SITE_H - -#include "geometry.h" - - /* Sites are also used as vertices on line segments */ - typedef struct Site { - Point coord; - int sitenbr; - int refcnt; - } Site; - - extern int siteidx; - extern Site *bottomsite; - - extern void siteinit(void); - extern Site *getsite(void); - extern double dist(Site *, Site *); /* Distance between two sites */ - extern void deref(Site *); /* Increment refcnt of site */ - extern void ref(Site *); /* Decrement refcnt of site */ - extern void makevertex(Site *); /* Transform a site into a vertex */ -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/smart_ini_x.c b/internal/ccall/neatogen/smart_ini_x.c deleted file mode 100644 index 7a20a0b..0000000 --- a/internal/ccall/neatogen/smart_ini_x.c +++ /dev/null @@ -1,394 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "digcola.h" -#ifdef DIGCOLA -#include "kkutils.h" -#include "matrix_ops.h" -#include "conjgrad.h" - -static void -standardize(double* orthog, int nvtxs) -{ - double len, avg = 0; - int i; - for (i=0; i=n) { - neigs=n; - } - - for (i=0; i0 ? (DistType)sqrt(diff) : 0; - } - } - } - - /* Compute the balance vector: */ - for (i=0; i=y[j]) { - balance[i]+=Dij[i][j]*(-lap[i][j]); // w_{ij}*delta_{ij} - } - else { - balance[i]-=Dij[i][j]*(-lap[i][j]); // w_{ij}*delta_{ij} - } - } - } - - for (converged=FALSE,iterations2=0; iterations2<200 && !converged; iterations2++) { - if (conjugate_gradient_f(lap, y, balance, n, conj_tol, n, TRUE) < 0) { - rv = 1; - goto cleanup; - } - converged=TRUE; - for (i=0; i=y[j]) { - b+=Dij[i][j]*(-lap[i][j]); - - } - else { - b-=Dij[i][j]*(-lap[i][j]); - - } - } - if ((b != balance[i]) && (fabs(1-b/balance[i])>1e-5)) { - converged=FALSE; - balance[i]=b; - } - } - } - - for (i=0; i -#include -#include -#include "render.h" -#define asub(i,j) a[(i)*n + (j)] - - -void solve(double *a, double *b, double *c, int n) -{ /*a[n][n],b[n],c[n] */ - double *asave, *csave; - double amax, dum, pivot; - register int i, ii, j; - register int k, m, mp; - register int istar, ip; - register int nm, nsq, t; - - istar = 0; /* quiet warnings */ - nsq = n * n; - asave = N_GNEW(nsq, double); - csave = N_GNEW(n, double); - - for (i = 0; i < n; i++) - csave[i] = c[i]; - for (i = 0; i < nsq; i++) - asave[i] = a[i]; - /* eliminate ith unknown */ - nm = n - 1; - for (i = 0; i < nm; i++) { - /* find largest pivot */ - amax = 0.; - for (ii = i; ii < n; ii++) { - dum = fabs(asub(ii, i)); - if (dum < amax) - continue; - istar = ii; - amax = dum; - } - /* return if pivot is too small */ - if (amax < 1.e-10) - goto bad; - /* switch rows */ - for (j = i; j < n; j++) { - t = istar * n + j; - dum = a[t]; - a[t] = a[i * n + j]; - a[i * n + j] = dum; - } - dum = c[istar]; - c[istar] = c[i]; - c[i] = dum; - /*pivot */ - ip = i + 1; - for (ii = ip; ii < n; ii++) { - pivot = a[ii * n + i] / a[i * n + i]; - c[ii] = c[ii] - pivot * c[i]; - for (j = 0; j < n; j++) - a[ii * n + j] = a[ii * n + j] - pivot * a[i * n + j]; - } - } - /* return if last pivot is too small */ - if (fabs(a[n * n - 1]) < 1.e-10) - goto bad; - b[n - 1] = c[n - 1] / a[n * n - 1]; - /* back substitute */ - for (k = 0; k < nm; k++) { - m = n - k - 2; - b[m] = c[m]; - mp = m + 1; - for (j = mp; j < n; j++) - b[m] = b[m] - a[m * n + j] * b[j]; - b[m] = b[m] / a[m * n + m]; - } - /* restore original a,c */ - for (i = 0; i < n; i++) - c[i] = csave[i]; - for (i = 0; i < nsq; i++) - a[i] = asave[i]; - free(asave); - free(csave); - return; - bad: - printf("ill-conditioned\n"); - free(asave); - free(csave); - return; -} diff --git a/internal/ccall/neatogen/sparsegraph.h b/internal/ccall/neatogen/sparsegraph.h deleted file mode 100644 index c971836..0000000 --- a/internal/ccall/neatogen/sparsegraph.h +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef SPARSEGRAPH_H -#define SPARSEGRAPH_H - -#include "config.h" - -#ifdef __cplusplus - enum Style { regular, invisible }; - struct vtx_data { - int nedges; - int *edges; - float *ewgts; - Style *styles; - float *edists; /* directed dist reflecting the direction of the edge */ - }; - - typedef int DistType; /* must be signed!! */ -#if 0 - inline double max(double x, double y) { - if (x >= y) - return x; - else - return y; - } inline double min(double x, double y) { - if (x <= y) - return x; - else - return y; - } - - inline int max(int x, int y) { - if (x >= y) - return x; - else - return y; - } - - inline int min(int x, int y) { - if (x <= y) - return x; - else - return y; - } -#endif - - struct Point { - double x; - double y; - int operator==(Point other) { - return x == other.x && y == other.y; - }}; -#else - -#ifdef USE_STYLES - typedef enum { regular, invisible } Style; -#endif - typedef struct { - int nedges; /* no. of neighbors, including self */ - int *edges; /* edges[0..(nedges-1)] are neighbors; edges[0] is self */ - float *ewgts; /* preferred edge lengths */ - } v_data; - - typedef struct { - int nedges; /* no. of neighbors, including self */ - int *edges; /* edges[0..(nedges-1)] are neighbors; edges[0] is self */ - float *ewgts; /* preferred edge lengths */ - float *eweights; /* edge weights */ -#ifdef USE_STYLES - Style *styles; -#endif -#ifdef DIGCOLA - float *edists; /* directed dist reflecting the direction of the edge */ -#endif - } vtx_data; - - typedef int DistType; /* must be signed!! */ - -extern void freeGraphData(vtx_data * graph); -extern void freeGraph(v_data * graph); - -#endif - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/stress.c b/internal/ccall/neatogen/stress.c deleted file mode 100644 index 4ba4e28..0000000 --- a/internal/ccall/neatogen/stress.c +++ /dev/null @@ -1,1315 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "neato.h" -#include "dijkstra.h" -#include "bfs.h" -#include "pca.h" -#include "matrix_ops.h" -#include "conjgrad.h" -#include "embed_graph.h" -#include "kkutils.h" -#include "stress.h" -#include -#include -#include - - -#ifndef HAVE_DRAND48 -extern double drand48(void); -#endif - -#define Dij2 /* If defined, the terms in the stress energy are normalized - by d_{ij}^{-2} otherwise, they are normalized by d_{ij}^{-1} - */ - -#ifdef NONCORE -/* Set 'max_nodes_in_mem' so that - * 4*(max_nodes_in_mem^2) is smaller than the available memory (in bytes) - * 4 = sizeof(float) - */ -#define max_nodes_in_mem 18000 -#endif - - /* relevant when using sparse distance matrix not within subspace */ -#define smooth_pivots true - -/* dimensionality of subspace; relevant - * when optimizing within subspace) - */ -#define stress_pca_dim 50 - - /* a structure used for storing sparse distance matrix */ -typedef struct { - int nedges; - int *edges; - DistType *edist; - boolean free_mem; -} dist_data; - -static double compute_stressf(float **coords, float *lap, int dim, int n, int exp) -{ - /* compute the overall stress */ - - int i, j, l, neighbor, count; - double sum, dist, Dij; - sum = 0; - for (count = 0, i = 0; i < n - 1; i++) { - count++; /* skip diagonal entry */ - for (j = 1; j < n - i; j++, count++) { - dist = 0; - neighbor = i + j; - for (l = 0; l < dim; l++) { - dist += - (coords[l][i] - coords[l][neighbor]) * (coords[l][i] - - coords[l] - [neighbor]); - } - dist = sqrt(dist); - if (exp == 2) { -#ifdef Dij2 - Dij = 1.0 / sqrt(lap[count]); - sum += (Dij - dist) * (Dij - dist) * (lap[count]); -#else - Dij = 1.0 / lap[count]; - sum += (Dij - dist) * (Dij - dist) * (lap[count]); -#endif - } else { - Dij = 1.0 / lap[count]; - sum += (Dij - dist) * (Dij - dist) * (lap[count]); - } - } - } - - return sum; -} - -static double -compute_stress1(double **coords, dist_data * distances, int dim, int n, int exp) -{ - /* compute the overall stress */ - - int i, j, l, node; - double sum, dist, Dij; - sum = 0; - if (exp == 2) { - for (i = 0; i < n; i++) { - for (j = 0; j < distances[i].nedges; j++) { - node = distances[i].edges[j]; - if (node <= i) { - continue; - } - dist = 0; - for (l = 0; l < dim; l++) { - dist += - (coords[l][i] - coords[l][node]) * (coords[l][i] - - coords[l] - [node]); - } - dist = sqrt(dist); - Dij = distances[i].edist[j]; -#ifdef Dij2 - sum += (Dij - dist) * (Dij - dist) / (Dij * Dij); -#else - sum += (Dij - dist) * (Dij - dist) / Dij; -#endif - } - } - } else { - for (i = 0; i < n; i++) { - for (j = 0; j < distances[i].nedges; j++) { - node = distances[i].edges[j]; - if (node <= i) { - continue; - } - dist = 0; - for (l = 0; l < dim; l++) { - dist += - (coords[l][i] - coords[l][node]) * (coords[l][i] - - coords[l] - [node]); - } - dist = sqrt(dist); - Dij = distances[i].edist[j]; - sum += (Dij - dist) * (Dij - dist) / Dij; - } - } - } - - return sum; -} - -/* initLayout: - * Initialize node coordinates. If the node already has - * a position, use it. - * Return true if some node is fixed. - */ -int -initLayout(vtx_data * graph, int n, int dim, double **coords, - node_t ** nodes) -{ - node_t *np; - double *xp; - double *yp; - double *pt; - int i, d; - int pinned = 0; - - xp = coords[0]; - yp = coords[1]; - for (i = 0; i < n; i++) { - np = nodes[i]; - if (hasPos(np)) { - pt = ND_pos(np); - *xp++ = *pt++; - *yp++ = *pt++; - if (dim > 2) { - for (d = 2; d < dim; d++) - coords[d][i] = *pt++; - } - if (isFixed(np)) - pinned = 1; - } else { - *xp++ = drand48(); - *yp++ = drand48(); - if (dim > 2) { - for (d = 2; d < dim; d++) - coords[d][i] = drand48(); - } - } - } - - for (d = 0; d < dim; d++) - orthog1(n, coords[d]); - - return pinned; -} - -float *circuitModel(vtx_data * graph, int nG) -{ - int i, j, e, rv, count; - float *Dij = N_NEW(nG * (nG + 1) / 2, float); - double **Gm; - double **Gm_inv; - - Gm = new_array(nG, nG, 0.0); - Gm_inv = new_array(nG, nG, 0.0); - - /* set non-diagonal entries */ - if (graph->ewgts) { - for (i = 0; i < nG; i++) { - for (e = 1; e < graph[i].nedges; e++) { - j = graph[i].edges[e]; - /* conductance is 1/resistance */ - Gm[i][j] = Gm[j][i] = -1.0 / graph[i].ewgts[e]; /* negate */ - } - } - } else { - for (i = 0; i < nG; i++) { - for (e = 1; e < graph[i].nedges; e++) { - j = graph[i].edges[e]; - /* conductance is 1/resistance */ - Gm[i][j] = Gm[j][i] = -1.0; /* ewgts are all 1 */ - } - } - } - - rv = solveCircuit(nG, Gm, Gm_inv); - - if (rv) { - float v; - count = 0; - for (i = 0; i < nG; i++) { - for (j = i; j < nG; j++) { - if (i == j) - v = 0.0; - else - v = (float) (Gm_inv[i][i] + Gm_inv[j][j] - - 2.0 * Gm_inv[i][j]); - Dij[count++] = v; - } - } - } else { - free(Dij); - Dij = NULL; - } - free_array(Gm); - free_array(Gm_inv); - return Dij; -} - -/* sparse_stress_subspace_majorization_kD: - * Optimization of the stress function using sparse distance matrix, within a vector-space - * Fastest and least accurate method - * - * NOTE: We use integral shortest path values here, assuming - * this is only to get an initial layout. In general, if edge lengths - * are involved, we may end up with 0 length edges. - */ -static int sparse_stress_subspace_majorization_kD(vtx_data * graph, /* Input graph in sparse representation */ - int n, /* Number of nodes */ - int nedges_graph, /* Number of edges */ - double **coords, /* coordinates of nodes (output layout) */ - int dim, /* dimemsionality of layout */ - int smart_ini, /* smart initialization */ - int exp, /* scale exponent */ - int reweight_graph, /* difference model */ - int n_iterations, /* max #iterations */ - int dist_bound, /* neighborhood size in sparse distance matrix */ - int num_centers /* #pivots in sparse distance matrix */ - ) -{ - int iterations; /* output: number of iteration of the process */ - - double conj_tol = tolerance_cg; /* tolerance of Conjugate Gradient */ - - /************************************************* - ** Computation of pivot-based, sparse, subspace-restricted ** - ** k-D stress minimization by majorization ** - *************************************************/ - - int i, j, k, node; - - /************************************************* - ** First compute the subspace in which we optimize ** - ** The subspace is the high-dimensional embedding ** - *************************************************/ - - int subspace_dim = MIN(stress_pca_dim, n); /* overall dimensionality of subspace */ - double **subspace = N_GNEW(subspace_dim, double *); - double *d_storage = N_GNEW(subspace_dim * n, double); - int num_centers_local; - DistType **full_coords; - /* if i is a pivot than CenterIndex[i] is its index, otherwise CenterIndex[i]= -1 */ - int *CenterIndex; - int *invCenterIndex; /* list the pivot nodes */ - Queue Q; - float *old_weights; - /* this matrix stores the distance between each node and each "center" */ - DistType **Dij; - /* this vector stores the distances of each node to the selected "centers" */ - DistType *dist; - DistType max_dist; - DistType *storage; - int *visited_nodes; - dist_data *distances; - int available_space; - int *storage1 = NULL; - DistType *storage2 = NULL; - int num_visited_nodes; - int num_neighbors; - int index; - int nedges; - DistType *dist_list; - vtx_data *lap; - int *edges; - float *ewgts; - double degree; - double **directions; - float **tmp_mat; - float **matrix; - double dist_ij; - double *b; - double *b_restricted; - double L_ij; - double old_stress, new_stress; - boolean converged; - - for (i = 0; i < subspace_dim; i++) { - subspace[i] = d_storage + i * n; - } - - /* compute PHDE: */ - num_centers_local = MIN(n, MAX(2 * subspace_dim, 50)); - full_coords = NULL; - /* High dimensional embedding */ - embed_graph(graph, n, num_centers_local, &full_coords, reweight_graph); - /* Centering coordinates */ - center_coordinate(full_coords, n, num_centers_local); - /* PCA */ - PCA_alloc(full_coords, num_centers_local, n, subspace, subspace_dim); - - free(full_coords[0]); - free(full_coords); - - /************************************************* - ** Compute the sparse-shortest-distances matrix 'distances' ** - *************************************************/ - - CenterIndex = N_GNEW(n, int); - for (i = 0; i < n; i++) { - CenterIndex[i] = -1; - } - invCenterIndex = NULL; - - mkQueue(&Q, n); - old_weights = graph[0].ewgts; - - if (reweight_graph) { - /* weight graph to separate high-degree nodes */ - /* in the future, perform slower Dijkstra-based computation */ - compute_new_weights(graph, n); - } - - /* compute sparse distance matrix */ - /* first select 'num_centers' pivots from which we compute distance */ - /* to all other nodes */ - - Dij = NULL; - dist = N_GNEW(n, DistType); - if (num_centers == 0) { /* no pivots, skip pivots-to-nodes distance calculation */ - goto after_pivots_selection; - } - - invCenterIndex = N_GNEW(num_centers, int); - - storage = N_GNEW(n * num_centers, DistType); - Dij = N_GNEW(num_centers, DistType *); - for (i = 0; i < num_centers; i++) - Dij[i] = storage + i * n; - - /* select 'num_centers' pivots that are uniformaly spreaded over the graph */ - - /* the first pivots is selected randomly */ - node = rand() % n; - CenterIndex[node] = 0; - invCenterIndex[0] = node; - - if (reweight_graph) { - dijkstra(node, graph, n, Dij[0]); - } else { - bfs(node, graph, n, Dij[0], &Q); - } - - /* find the most distant node from first pivot */ - max_dist = 0; - for (i = 0; i < n; i++) { - dist[i] = Dij[0][i]; - if (dist[i] > max_dist) { - node = i; - max_dist = dist[i]; - } - } - /* select other dim-1 nodes as pivots */ - for (i = 1; i < num_centers; i++) { - CenterIndex[node] = i; - invCenterIndex[i] = node; - if (reweight_graph) { - dijkstra(node, graph, n, Dij[i]); - } else { - bfs(node, graph, n, Dij[i], &Q); - } - max_dist = 0; - for (j = 0; j < n; j++) { - dist[j] = MIN(dist[j], Dij[i][j]); - if (dist[j] > max_dist - || (dist[j] == max_dist && rand() % (j + 1) == 0)) { - node = j; - max_dist = dist[j]; - } - } - } - - after_pivots_selection: - - /* Construct a sparse distance matrix 'distances' */ - - /* initialize dist to -1, important for 'bfs_bounded(..)' */ - for (i = 0; i < n; i++) { - dist[i] = -1; - } - - visited_nodes = N_GNEW(n, int); - distances = N_GNEW(n, dist_data); - available_space = 0; - nedges = 0; - for (i = 0; i < n; i++) { - if (CenterIndex[i] >= 0) { /* a pivot node */ - distances[i].edges = N_GNEW(n - 1, int); - distances[i].edist = N_GNEW(n - 1, DistType); - distances[i].nedges = n - 1; - nedges += n - 1; - distances[i].free_mem = TRUE; - index = CenterIndex[i]; - for (j = 0; j < i; j++) { - distances[i].edges[j] = j; - distances[i].edist[j] = Dij[index][j]; - } - for (j = i + 1; j < n; j++) { - distances[i].edges[j - 1] = j; - distances[i].edist[j - 1] = Dij[index][j]; - } - continue; - } - - /* a non pivot node */ - - if (dist_bound > 0) { - if (reweight_graph) { - num_visited_nodes = - dijkstra_bounded(i, graph, n, dist, dist_bound, - visited_nodes); - } else { - num_visited_nodes = - bfs_bounded(i, graph, n, dist, &Q, dist_bound, - visited_nodes); - } - /* filter the pivots out of the visited nodes list, and the self loop: */ - for (j = 0; j < num_visited_nodes;) { - if (CenterIndex[visited_nodes[j]] < 0 - && visited_nodes[j] != i) { - /* not a pivot or self loop */ - j++; - } else { - dist[visited_nodes[j]] = -1; - visited_nodes[j] = visited_nodes[--num_visited_nodes]; - } - } - } else { - num_visited_nodes = 0; - } - num_neighbors = num_visited_nodes + num_centers; - if (num_neighbors > available_space) { - available_space = (dist_bound + 1) * n; - storage1 = N_GNEW(available_space, int); - storage2 = N_GNEW(available_space, DistType); - distances[i].free_mem = TRUE; - } else { - distances[i].free_mem = FALSE; - } - distances[i].edges = storage1; - distances[i].edist = storage2; - distances[i].nedges = num_neighbors; - nedges += num_neighbors; - for (j = 0; j < num_visited_nodes; j++) { - storage1[j] = visited_nodes[j]; - storage2[j] = dist[visited_nodes[j]]; - dist[visited_nodes[j]] = -1; - } - /* add all pivots: */ - for (j = num_visited_nodes; j < num_neighbors; j++) { - index = j - num_visited_nodes; - storage1[j] = invCenterIndex[index]; - storage2[j] = Dij[index][i]; - } - - storage1 += num_neighbors; - storage2 += num_neighbors; - available_space -= num_neighbors; - } - - free(dist); - free(visited_nodes); - - if (Dij != NULL) { - free(Dij[0]); - free(Dij); - } - - /************************************************* - ** Laplacian computation ** - *************************************************/ - - lap = N_GNEW(n, vtx_data); - edges = N_GNEW(nedges + n, int); - ewgts = N_GNEW(nedges + n, float); - for (i = 0; i < n; i++) { - lap[i].edges = edges; - lap[i].ewgts = ewgts; - lap[i].nedges = distances[i].nedges + 1; /*add the self loop */ - dist_list = distances[i].edist - 1; /* '-1' since edist[0] goes for number '1' entry in the lap */ - degree = 0; - if (exp == 2) { - for (j = 1; j < lap[i].nedges; j++) { - edges[j] = distances[i].edges[j - 1]; -#ifdef Dij2 - ewgts[j] = (float) -1.0 / ((float) dist_list[j] * (float) dist_list[j]); /* cast to float to prevent overflow */ -#else - ewgts[j] = -1.0 / (float) dist_list[j]; -#endif - degree -= ewgts[j]; - } - } else { - for (j = 1; j < lap[i].nedges; j++) { - edges[j] = distances[i].edges[j - 1]; - ewgts[j] = -1.0 / (float) dist_list[j]; - degree -= ewgts[j]; - } - } - edges[0] = i; - ewgts[0] = (float) degree; - edges += lap[i].nedges; - ewgts += lap[i].nedges; - } - - /************************************************* - ** initialize direction vectors ** - ** to get an intial layout ** - *************************************************/ - - /* the layout is subspace*directions */ - directions = N_GNEW(dim, double *); - directions[0] = N_GNEW(dim * subspace_dim, double); - for (i = 1; i < dim; i++) { - directions[i] = directions[0] + i * subspace_dim; - } - - if (smart_ini) { - /* smart initialization */ - for (k = 0; k < dim; k++) { - for (i = 0; i < subspace_dim; i++) { - directions[k][i] = 0; - } - } - if (dim != 2) { - /* use the first vectors in the eigenspace */ - /* each direction points to its "principal axes" */ - for (k = 0; k < dim; k++) { - directions[k][k] = 1; - } - } else { - /* for the frequent 2-D case we prefer iterative-PCA over PCA */ - /* Note that we don't want to mix the Lap's eigenspace with the HDE */ - /* in the computation since they have different scales */ - - directions[0][0] = 1; /* first pca projection vector */ - if (!iterativePCA_1D(subspace, subspace_dim, n, directions[1])) { - for (k = 0; k < subspace_dim; k++) { - directions[1][k] = 0; - } - directions[1][1] = 1; - } - } - - } else { - /* random initialization */ - for (k = 0; k < dim; k++) { - for (i = 0; i < subspace_dim; i++) { - directions[k][i] = (double) (rand()) / RAND_MAX; - } - } - } - - /* compute initial k-D layout */ - - for (k = 0; k < dim; k++) { - right_mult_with_vector_transpose(subspace, n, subspace_dim, - directions[k], coords[k]); - } - - /************************************************* - ** compute restriction of the laplacian to subspace: ** - *************************************************/ - - tmp_mat = NULL; - matrix = NULL; - mult_sparse_dense_mat_transpose(lap, subspace, n, subspace_dim, - &tmp_mat); - mult_dense_mat(subspace, tmp_mat, subspace_dim, n, subspace_dim, - &matrix); - free(tmp_mat[0]); - free(tmp_mat); - - /************************************************* - ** Layout optimization ** - *************************************************/ - - b = N_GNEW(n, double); - b_restricted = N_GNEW(subspace_dim, double); - old_stress = compute_stress1(coords, distances, dim, n, exp); - for (converged = FALSE, iterations = 0; - iterations < n_iterations && !converged; iterations++) { - - /* Axis-by-axis optimization: */ - for (k = 0; k < dim; k++) { - /* compute the vector b */ - /* multiply on-the-fly with distance-based laplacian */ - /* (for saving storage we don't construct this Lap explicitly) */ - for (i = 0; i < n; i++) { - degree = 0; - b[i] = 0; - dist_list = distances[i].edist - 1; - edges = lap[i].edges; - ewgts = lap[i].ewgts; - for (j = 1; j < lap[i].nedges; j++) { - node = edges[j]; - dist_ij = distance_kD(coords, dim, i, node); - if (dist_ij > 1e-30) { /* skip zero distances */ - L_ij = -ewgts[j] * dist_list[j] / dist_ij; /* L_ij=w_{ij}*d_{ij}/dist_{ij} */ - degree -= L_ij; - b[i] += L_ij * coords[k][node]; - } - } - b[i] += degree * coords[k][i]; - } - right_mult_with_vector_d(subspace, subspace_dim, n, b, - b_restricted); - if (conjugate_gradient_f(matrix, directions[k], b_restricted, - subspace_dim, conj_tol, subspace_dim, - FALSE)) { - iterations = -1; - goto finish0; - } - right_mult_with_vector_transpose(subspace, n, subspace_dim, - directions[k], coords[k]); - } - - if ((converged = (iterations % 2 == 0))) { /* check for convergence each two iterations */ - new_stress = compute_stress1(coords, distances, dim, n, exp); - converged = - fabs(new_stress - old_stress) / (new_stress + 1e-10) < - Epsilon; - old_stress = new_stress; - } - } -finish0: - free(b_restricted); - free(b); - - if (reweight_graph) { - restore_old_weights(graph, n, old_weights); - } - - for (i = 0; i < n; i++) { - if (distances[i].free_mem) { - free(distances[i].edges); - free(distances[i].edist); - } - } - - free(distances); - free(lap[0].edges); - free(lap[0].ewgts); - free(lap); - free(CenterIndex); - free(invCenterIndex); - free(directions[0]); - free(directions); - if (matrix != NULL) { - free(matrix[0]); - free(matrix); - } - free(subspace[0]); - free(subspace); - freeQueue(&Q); - - return iterations; -} - -/* compute_weighted_apsp_packed: - * Edge lengths can be any float > 0 - */ -static float *compute_weighted_apsp_packed(vtx_data * graph, int n) -{ - int i, j, count; - float *Dij = N_NEW(n * (n + 1) / 2, float); - - float *Di = N_NEW(n, float); - Queue Q; - - mkQueue(&Q, n); - - count = 0; - for (i = 0; i < n; i++) { - dijkstra_f(i, graph, n, Di); - for (j = i; j < n; j++) { - Dij[count++] = Di[j]; - } - } - free(Di); - freeQueue(&Q); - return Dij; -} - - -/* mdsModel: - * Update matrix with actual edge lengths - */ -float *mdsModel(vtx_data * graph, int nG) -{ - int i, j, e; - float *Dij; - int shift = 0; - double delta = 0.0; - - if (graph->ewgts == NULL) - return 0; - - /* first, compute shortest paths to fill in non-edges */ - Dij = compute_weighted_apsp_packed(graph, nG); - - /* then, replace edge entries will user-supplied len */ - for (i = 0; i < nG; i++) { - shift += i; - for (e = 1; e < graph[i].nedges; e++) { - j = graph[i].edges[e]; - if (j < i) - continue; - delta += fabsf(Dij[i * nG + j - shift] - graph[i].ewgts[e]); - Dij[i * nG + j - shift] = graph[i].ewgts[e]; - } - } - if (Verbose) { - fprintf(stderr, "mdsModel: delta = %f\n", delta); - } - return Dij; -} - -/* compute_apsp_packed: - * Assumes integral weights > 0. - */ -float *compute_apsp_packed(vtx_data * graph, int n) -{ - int i, j, count; - float *Dij = N_NEW(n * (n + 1) / 2, float); - - DistType *Di = N_NEW(n, DistType); - Queue Q; - - mkQueue(&Q, n); - - count = 0; - for (i = 0; i < n; i++) { - bfs(i, graph, n, Di, &Q); - for (j = i; j < n; j++) { - Dij[count++] = ((float) Di[j]); - } - } - free(Di); - freeQueue(&Q); - return Dij; -} - -#define max(x,y) ((x)>(y)?(x):(y)) - -float *compute_apsp_artifical_weights_packed(vtx_data * graph, int n) -{ - /* compute all-pairs-shortest-path-length while weighting the graph */ - /* so high-degree nodes are distantly located */ - - float *Dij; - int i, j; - float *old_weights = graph[0].ewgts; - int nedges = 0; - float *weights; - int *vtx_vec; - int deg_i, deg_j, neighbor; - - for (i = 0; i < n; i++) { - nedges += graph[i].nedges; - } - - weights = N_NEW(nedges, float); - vtx_vec = N_NEW(n, int); - for (i = 0; i < n; i++) { - vtx_vec[i] = 0; - } - - if (graph->ewgts) { - for (i = 0; i < n; i++) { - fill_neighbors_vec_unweighted(graph, i, vtx_vec); - deg_i = graph[i].nedges - 1; - for (j = 1; j <= deg_i; j++) { - neighbor = graph[i].edges[j]; - deg_j = graph[neighbor].nedges - 1; - weights[j] = (float) - max((float) - (deg_i + deg_j - - 2 * common_neighbors(graph, i, neighbor, - vtx_vec)), - graph[i].ewgts[j]); - } - empty_neighbors_vec(graph, i, vtx_vec); - graph[i].ewgts = weights; - weights += graph[i].nedges; - } - Dij = compute_weighted_apsp_packed(graph, n); - } else { - for (i = 0; i < n; i++) { - graph[i].ewgts = weights; - fill_neighbors_vec_unweighted(graph, i, vtx_vec); - deg_i = graph[i].nedges - 1; - for (j = 1; j <= deg_i; j++) { - neighbor = graph[i].edges[j]; - deg_j = graph[neighbor].nedges - 1; - weights[j] = - ((float) deg_i + deg_j - - 2 * common_neighbors(graph, i, neighbor, vtx_vec)); - } - empty_neighbors_vec(graph, i, vtx_vec); - weights += graph[i].nedges; - } - Dij = compute_apsp_packed(graph, n); - } - - free(vtx_vec); - free(graph[0].ewgts); - graph[0].ewgts = NULL; - if (old_weights != NULL) { - for (i = 0; i < n; i++) { - graph[i].ewgts = old_weights; - old_weights += graph[i].nedges; - } - } - return Dij; -} - -#if DEBUG > 1 -static void dumpMatrix(float *Dij, int n) -{ - int i, j, count = 0; - for (i = 0; i < n; i++) { - for (j = i; j < n; j++) { - fprintf(stderr, "%.02f ", Dij[count++]); - } - fputs("\n", stderr); - } -} -#endif - -/* Accumulator type for diagonal of Laplacian. Needs to be as large - * as possible. Use long double; configure to double if necessary. - */ -#define DegType long double - -/* stress_majorization_kD_mkernel: - * At present, if any nodes have pos set, smart_ini is false. - */ -int stress_majorization_kD_mkernel(vtx_data * graph, /* Input graph in sparse representation */ - int n, /* Number of nodes */ - int nedges_graph, /* Number of edges */ - double **d_coords, /* coordinates of nodes (output layout) */ - node_t ** nodes, /* original nodes */ - int dim, /* dimemsionality of layout */ - int opts, /* options */ - int model, /* model */ - int maxi /* max iterations */ - ) -{ - int iterations; /* output: number of iteration of the process */ - - double conj_tol = tolerance_cg; /* tolerance of Conjugate Gradient */ - float *Dij = NULL; - int i, j, k; - float **coords = NULL; - float *f_storage = NULL; - float constant_term; - int count; - DegType degree; - int lap_length; - float *lap2 = NULL; - DegType *degrees = NULL; - int step; - float val; - double old_stress, new_stress; - boolean converged; - float **b = NULL; - float *tmp_coords = NULL; - float *dist_accumulator = NULL; - float *lap1 = NULL; - int smart_ini = opts & opt_smart_init; - int exp = opts & opt_exp_flag; - int len; - int havePinned; /* some node is pinned */ -#ifdef ALTERNATIVE_STRESS_CALC - double mat_stress; -#endif -#ifdef NONCORE - FILE *fp = NULL; -#endif - - - /************************************************* - ** Computation of full, dense, unrestricted k-D ** - ** stress minimization by majorization ** - *************************************************/ - - /**************************************************** - ** Compute the all-pairs-shortest-distances matrix ** - ****************************************************/ - - if (maxi < 0) - return 0; - - if (Verbose) - start_timer(); - - if (model == MODEL_SUBSET) { - /* weight graph to separate high-degree nodes */ - /* and perform slower Dijkstra-based computation */ - if (Verbose) - fprintf(stderr, "Calculating subset model"); - Dij = compute_apsp_artifical_weights_packed(graph, n); - } else if (model == MODEL_CIRCUIT) { - Dij = circuitModel(graph, n); - if (!Dij) { - agerr(AGWARN, - "graph is disconnected. Hence, the circuit model\n"); - agerr(AGPREV, - "is undefined. Reverting to the shortest path model.\n"); - } - } else if (model == MODEL_MDS) { - if (Verbose) - fprintf(stderr, "Calculating MDS model"); - Dij = mdsModel(graph, n); - } - if (!Dij) { - if (Verbose) - fprintf(stderr, "Calculating shortest paths"); - if (graph->ewgts) - Dij = compute_weighted_apsp_packed(graph, n); - else - Dij = compute_apsp_packed(graph, n); - } - - if (Verbose) { - fprintf(stderr, ": %.2f sec\n", elapsed_sec()); - fprintf(stderr, "Setting initial positions"); - start_timer(); - } - - /************************** - ** Layout initialization ** - **************************/ - - if (smart_ini && (n > 1)) { - havePinned = 0; - /* optimize layout quickly within subspace */ - /* perform at most 50 iterations within 30-D subspace to - get an estimate */ - if (sparse_stress_subspace_majorization_kD(graph, n, nedges_graph, - d_coords, dim, smart_ini, exp, - (model == MODEL_SUBSET), 50, - neighborhood_radius_subspace, - num_pivots_stress) < 0) { - iterations = -1; - goto finish1; - } - - for (i = 0; i < dim; i++) { - /* for numerical stability, scale down layout */ - double max = 1; - for (j = 0; j < n; j++) { - if (fabs(d_coords[i][j]) > max) { - max = fabs(d_coords[i][j]); - } - } - for (j = 0; j < n; j++) { - d_coords[i][j] /= max; - } - /* add small random noise */ - for (j = 0; j < n; j++) { - d_coords[i][j] += 1e-6 * (drand48() - 0.5); - } - orthog1(n, d_coords[i]); - } - } else { - havePinned = initLayout(graph, n, dim, d_coords, nodes); - } - if (Verbose) - fprintf(stderr, ": %.2f sec", elapsed_sec()); - if ((n == 1) || (maxi == 0)) - return 0; - - if (Verbose) { - fprintf(stderr, ": %.2f sec\n", elapsed_sec()); - fprintf(stderr, "Setting up stress function"); - start_timer(); - } - coords = N_NEW(dim, float *); - f_storage = N_NEW(dim * n, float); - for (i = 0; i < dim; i++) { - coords[i] = f_storage + i * n; - for (j = 0; j < n; j++) { - coords[i][j] = ((float) d_coords[i][j]); - } - } - - /* compute constant term in stress sum */ - /* which is \sum_{i max_nodes_in_mem) { -#define FILENAME "tmp_Dij$$$.bin" - fp = fopen(FILENAME, "wb"); - fwrite(lap2, sizeof(float), lap_length, fp); - fclose(fp); - fp = NULL; - } -#endif - - /************************* - ** Layout optimization ** - *************************/ - - b = N_NEW(dim, float *); - b[0] = N_NEW(dim * n, float); - for (k = 1; k < dim; k++) { - b[k] = b[0] + k * n; - } - - tmp_coords = N_NEW(n, float); - dist_accumulator = N_NEW(n, float); - lap1 = NULL; -#ifdef NONCORE - if (n <= max_nodes_in_mem) { - lap1 = N_NEW(lap_length, float); - } else { - lap1 = lap2; - fp = fopen(FILENAME, "rb"); - fgetpos(fp, &pos); - } -#else - lap1 = N_NEW(lap_length, float); -#endif - - -#ifdef USE_MAXFLOAT - old_stress = MAXFLOAT; /* at least one iteration */ -#else - old_stress = MAXDOUBLE; /* at least one iteration */ -#endif - if (Verbose) { - fprintf(stderr, ": %.2f sec\n", elapsed_sec()); - fprintf(stderr, "Solving model: "); - start_timer(); - } - - for (converged = FALSE, iterations = 0; - iterations < maxi && !converged; iterations++) { - - /* First, construct Laplacian of 1/(d_ij*|p_i-p_j|) */ - /* set_vector_val(n, 0, degrees); */ - memset(degrees, 0, n * sizeof(DegType)); - if (exp == 2) { -#ifdef Dij2 -#ifdef NONCORE - if (n <= max_nodes_in_mem) { - sqrt_vecf(lap_length, lap2, lap1); - } else { - sqrt_vec(lap_length, lap1); - } -#else - sqrt_vecf(lap_length, lap2, lap1); -#endif -#endif - } - for (count = 0, i = 0; i < n - 1; i++) { - len = n - i - 1; - /* init 'dist_accumulator' with zeros */ - set_vector_valf(len, 0, dist_accumulator); - - /* put into 'dist_accumulator' all squared distances between 'i' and 'i'+1,...,'n'-1 */ - for (k = 0; k < dim; k++) { - set_vector_valf(len, coords[k][i], tmp_coords); - vectors_mult_additionf(len, tmp_coords, -1, - coords[k] + i + 1); - square_vec(len, tmp_coords); - vectors_additionf(len, tmp_coords, dist_accumulator, - dist_accumulator); - } - - /* convert to 1/d_{ij} */ - invert_sqrt_vec(len, dist_accumulator); - /* detect overflows */ - for (j = 0; j < len; j++) { - if (dist_accumulator[j] >= MAXFLOAT - || dist_accumulator[j] < 0) { - dist_accumulator[j] = 0; - } - } - - count++; /* save place for the main diagonal entry */ - degree = 0; - if (exp == 2) { - for (j = 0; j < len; j++, count++) { -#ifdef Dij2 - val = lap1[count] *= dist_accumulator[j]; -#else - val = lap1[count] = dist_accumulator[j]; -#endif - degree += val; - degrees[i + j + 1] -= val; - } - } else { - for (j = 0; j < len; j++, count++) { - val = lap1[count] = dist_accumulator[j]; - degree += val; - degrees[i + j + 1] -= val; - } - } - degrees[i] -= degree; - } - for (step = n, count = 0, i = 0; i < n; i++, count += step, step--) { - lap1[count] = degrees[i]; - } - - /* Now compute b[] */ - for (k = 0; k < dim; k++) { - /* b[k] := lap1*coords[k] */ - right_mult_with_vector_ff(lap1, n, coords[k], b[k]); - } - - - /* compute new stress */ - /* remember that the Laplacians are negated, so we subtract instead of add and vice versa */ - new_stress = 0; - for (k = 0; k < dim; k++) { - new_stress += vectors_inner_productf(n, coords[k], b[k]); - } - new_stress *= 2; - new_stress += constant_term; /* only after mult by 2 */ -#ifdef NONCORE - if (n > max_nodes_in_mem) { - /* restore lap2 from memory */ - fsetpos(fp, &pos); - fread(lap2, sizeof(float), lap_length, fp); - } -#endif - for (k = 0; k < dim; k++) { - right_mult_with_vector_ff(lap2, n, coords[k], tmp_coords); - new_stress -= vectors_inner_productf(n, coords[k], tmp_coords); - } -#ifdef ALTERNATIVE_STRESS_CALC - mat_stress = new_stress; - new_stress = compute_stressf(coords, lap2, dim, n); - if (fabs(mat_stress - new_stress) / min(mat_stress, new_stress) > - 0.001) { - fprintf(stderr, "Diff stress vals: %lf %lf (iteration #%d)\n", - mat_stress, new_stress, iterations); - } -#endif - /* Invariant: old_stress > 0. In theory, old_stress >= new_stress - * but we use fabs in case of numerical error. - */ - { - double diff = old_stress - new_stress; - double change = ABS(diff); - converged = (((change / old_stress) < Epsilon) - || (new_stress < Epsilon)); - } - old_stress = new_stress; - - for (k = 0; k < dim; k++) { - node_t *np; - if (havePinned) { - copy_vectorf(n, coords[k], tmp_coords); - if (conjugate_gradient_mkernel(lap2, tmp_coords, b[k], n, - conj_tol, n) < 0) { - iterations = -1; - goto finish1; - } - for (i = 0; i < n; i++) { - np = nodes[i]; - if (!isFixed(np)) - coords[k][i] = tmp_coords[i]; - } - } else { - if (conjugate_gradient_mkernel(lap2, coords[k], b[k], n, - conj_tol, n) < 0) { - iterations = -1; - goto finish1; - } - } - } - if (Verbose && (iterations % 5 == 0)) { - fprintf(stderr, "%.3f ", new_stress); - if ((iterations + 5) % 50 == 0) - fprintf(stderr, "\n"); - } - } - if (Verbose) { - fprintf(stderr, "\nfinal e = %f %d iterations %.2f sec\n", - compute_stressf(coords, lap2, dim, n, exp), - iterations, elapsed_sec()); - } - - for (i = 0; i < dim; i++) { - for (j = 0; j < n; j++) { - d_coords[i][j] = coords[i][j]; - } - } -#ifdef NONCORE - if (fp) - fclose(fp); -#endif -finish1: - free(f_storage); - free(coords); - - free(lap2); - if (b) { - free(b[0]); - free(b); - } - free(tmp_coords); - free(dist_accumulator); - free(degrees); - free(lap1); - return iterations; -} diff --git a/internal/ccall/neatogen/stress.h b/internal/ccall/neatogen/stress.h deleted file mode 100644 index e11699c..0000000 --- a/internal/ccall/neatogen/stress.h +++ /dev/null @@ -1,69 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifndef STRESS_H -#define STRESS_H - -#include "defs.h" - -#define tolerance_cg 1e-3 - -#define DFLT_ITERATIONS 200 - -#define DFLT_TOLERANCE 1e-4 - - /* some possible values for 'num_pivots_stress' */ -#define num_pivots_stress 40 -#define num_pivots_smart_ini 0 -#define num_pivots_no_ini 50 - - /* relevant when using sparse distance matrix - * when optimizing within subspace it can be set to 0 - * otherwise, recommended value is above zero (usually around 3-6) - * some possible values for 'neighborhood_radius' - */ -#define neighborhood_radius_unrestricted 4 -#define neighborhood_radius_subspace 0 - -#define opt_smart_init 0x4 -#define opt_exp_flag 0x3 - - /* Full dense stress optimization (equivalent to Kamada-Kawai's energy) */ - /* Slowest and most accurate optimization */ - extern int stress_majorization_kD_mkernel(vtx_data * graph, /* Input graph in sparse representation */ - int n, /* Number of nodes */ - int nedges_graph, /* Number of edges */ - double **coords, /* coordinates of nodes (output layout) */ - node_t **nodes, /* original nodes */ - int dim, /* dimemsionality of layout */ - int opts, /* option flags */ - int model, /* model */ - int maxi /* max iterations */ - ); - -extern float *compute_apsp_packed(vtx_data * graph, int n); -extern float *compute_apsp_artifical_weights_packed(vtx_data * graph, int n); -extern float* circuitModel(vtx_data * graph, int nG); -extern float* mdsModel (vtx_data * graph, int nG); -extern int initLayout(vtx_data * graph, int n, int dim, double **coords, node_t** nodes); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/neatogen/stuff.c b/internal/ccall/neatogen/stuff.c deleted file mode 100644 index 483c14c..0000000 --- a/internal/ccall/neatogen/stuff.c +++ /dev/null @@ -1,774 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include "neato.h" -#include "stress.h" -#include -#ifndef WIN32 -#include -#endif - -static double Epsilon2; - - -double fpow32(double x) -{ - x = sqrt(x); - return x * x * x; -} - -double distvec(double *p0, double *p1, double *vec) -{ - int k; - double dist = 0.0; - - for (k = 0; k < Ndim; k++) { - vec[k] = p0[k] - p1[k]; - dist += (vec[k] * vec[k]); - } - dist = sqrt(dist); - return dist; -} - -double **new_array(int m, int n, double ival) -{ - double **rv; - double *mem; - int i, j; - - rv = N_NEW(m, double *); - mem = N_NEW(m * n, double); - for (i = 0; i < m; i++) { - rv[i] = mem; - mem = mem + n; - for (j = 0; j < n; j++) - rv[i][j] = ival; - } - return rv; -} - -void free_array(double **rv) -{ - if (rv) { - free(rv[0]); - free(rv); - } -} - - -static double ***new_3array(int m, int n, int p, double ival) -{ - double ***rv; - int i, j, k; - - rv = N_NEW(m + 1, double **); - for (i = 0; i < m; i++) { - rv[i] = N_NEW(n + 1, double *); - for (j = 0; j < n; j++) { - rv[i][j] = N_NEW(p, double); - for (k = 0; k < p; k++) - rv[i][j][k] = ival; - } - rv[i][j] = NULL; /* NULL terminate so we can clean up */ - } - rv[i] = NULL; - return rv; -} - -static void free_3array(double ***rv) -{ - int i, j; - - if (rv) { - for (i = 0; rv[i]; i++) { - for (j = 0; rv[i][j]; j++) - free(rv[i][j]); - free(rv[i]); - } - free(rv); - } -} - - -/* lenattr: - * Return 1 if attribute not defined - * Return 2 if attribute string bad - */ -static int lenattr(edge_t* e, Agsym_t* index, double* val) -{ - char* s; - - if (index == NULL) - return 1; - - s = agxget(e, index); - if (*s == '\0') return 1; - - if ((sscanf(s, "%lf", val) < 1) || (*val < 0) || ((*val == 0) && !Nop)) { - agerr(AGWARN, "bad edge len \"%s\"", s); - return 2; - } - else - return 0; -} - - -/* degreeKind; - * Returns degree of n ignoring loops and multiedges. - * Returns 0, 1 or many (2) - * For case of 1, returns other endpoint of edge. - */ -static int degreeKind(graph_t * g, node_t * n, node_t ** op) -{ - edge_t *ep; - int deg = 0; - node_t *other = NULL; - - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if (aghead(ep) == agtail(ep)) - continue; /* ignore loops */ - if (deg == 1) { - if (((agtail(ep) == n) && (aghead(ep) == other)) || /* ignore multiedge */ - ((agtail(ep) == other) && (aghead(ep) == n))) - continue; - return 2; - } else { /* deg == 0 */ - if (agtail(ep) == n) - other = aghead(ep); - else - other = agtail(ep); - *op = other; - deg++; - } - } - return deg; -} - - -/* prune: - * np is at end of a chain. If its degree is 0, remove it. - * If its degree is 1, remove it and recurse. - * If its degree > 1, stop. - * The node next is the next node to be visited during iteration. - * If it is equal to a node being deleted, set it to next one. - * Delete from root graph, since G may be a connected component subgraph. - * Return next. - */ -static node_t *prune(graph_t * G, node_t * np, node_t * next) -{ - node_t *other; - int deg; - - while (np) { - deg = degreeKind(G, np, &other); - if (deg == 0) { - if (next == np) - next = agnxtnode(G, np); - agdelete(G->root, np); - np = 0; - } else if (deg == 1) { - if (next == np) - next = agnxtnode(G, np); - agdelete(G->root, np); - np = other; - } else - np = 0; - - } - return next; -} - -static double setEdgeLen(graph_t * G, node_t * np, Agsym_t* lenx, double dfltlen) -{ - edge_t *ep; - double total_len = 0.0; - double len; - int err; - - for (ep = agfstout(G, np); ep; ep = agnxtout(G, ep)) { - if ((err = lenattr(ep, lenx, &len))) { - if (err == 2) agerr(AGPREV, " in %s - setting to %.02f\n", agnameof(G), dfltlen); - len = dfltlen; - } - ED_dist(ep) = len; - total_len += len; - } - return total_len; -} - -/* scan_graph_mode: - * Prepare the graph and data structures depending on the layout mode. - * If Reduce is true, eliminate singletons and trees. Since G may be a - * subgraph, we remove the nodes from the root graph. - * Return the number of nodes in the reduced graph. - */ -int scan_graph_mode(graph_t * G, int mode) -{ - int i, nV, nE, deg; - char *str; - node_t *np, *xp, *other; - double total_len = 0.0; - double dfltlen = 1.0; - Agsym_t* lenx; - - if (Verbose) - fprintf(stderr, "Scanning graph %s, %d nodes\n", agnameof(G), - agnnodes(G)); - - - /* Eliminate singletons and trees */ - if (Reduce) { - for (np = agfstnode(G); np; np = xp) { - xp = agnxtnode(G, np); - deg = degreeKind(G, np, &other); - if (deg == 0) { /* singleton node */ - agdelete(G->root, np); - } else if (deg == 1) { - agdelete(G->root, np); - xp = prune(G, other, xp); - } - } - } - - nV = agnnodes(G); - nE = agnedges(G); - - lenx = agattr(G, AGEDGE, "len", 0); - if (mode == MODE_KK) { - Epsilon = .0001 * nV; - getdouble(G, "epsilon", &Epsilon); - if ((str = agget(G->root, "Damping"))) - Damping = atof(str); - else - Damping = .99; - GD_neato_nlist(G) = N_NEW(nV + 1, node_t *); - for (i = 0, np = agfstnode(G); np; np = agnxtnode(G, np)) { - GD_neato_nlist(G)[i] = np; - ND_id(np) = i++; - ND_heapindex(np) = -1; - total_len += setEdgeLen(G, np, lenx, dfltlen); - } - } else { - Epsilon = DFLT_TOLERANCE; - getdouble(G, "epsilon", &Epsilon); - for (i = 0, np = agfstnode(G); np; np = agnxtnode(G, np)) { - ND_id(np) = i++; - total_len += setEdgeLen(G, np, lenx, dfltlen); - } - } - - str = agget(G, "defaultdist"); - if (str && str[0]) - Initial_dist = MAX(Epsilon, atof(str)); - else - Initial_dist = total_len / (nE > 0 ? nE : 1) * sqrt(nV) + 1; - - if (!Nop && (mode == MODE_KK)) { - GD_dist(G) = new_array(nV, nV, Initial_dist); - GD_spring(G) = new_array(nV, nV, 1.0); - GD_sum_t(G) = new_array(nV, Ndim, 1.0); - GD_t(G) = new_3array(nV, nV, Ndim, 0.0); - } - - return nV; -} - -int scan_graph(graph_t * g) -{ - return scan_graph_mode(g, MODE_KK); -} - -void free_scan_graph(graph_t * g) -{ - free(GD_neato_nlist(g)); - if (!Nop) { - free_array(GD_dist(g)); - free_array(GD_spring(g)); - free_array(GD_sum_t(g)); - free_3array(GD_t(g)); - GD_t(g) = NULL; - } -} - -void jitter_d(node_t * np, int nG, int n) -{ - int k; - for (k = n; k < Ndim; k++) - ND_pos(np)[k] = nG * drand48(); -} - -void jitter3d(node_t * np, int nG) -{ - jitter_d(np, nG, 2); -} - -void randompos(node_t * np, int nG) -{ - ND_pos(np)[0] = nG * drand48(); - ND_pos(np)[1] = nG * drand48(); - if (Ndim > 2) - jitter3d(np, nG); -} - -void initial_positions(graph_t * G, int nG) -{ - int init, i; - node_t *np; - static int once = 0; - - if (Verbose) - fprintf(stderr, "Setting initial positions\n"); - - init = checkStart(G, nG, INIT_RANDOM); - if (init == INIT_REGULAR) - return; - if ((init == INIT_SELF) && (once == 0)) { - agerr(AGWARN, "start=%s not supported with mode=self - ignored\n"); - once = 1; - } - - for (i = 0; (np = GD_neato_nlist(G)[i]); i++) { - if (hasPos(np)) - continue; - randompos(np, 1); - } -} - -void diffeq_model(graph_t * G, int nG) -{ - int i, j, k; - double dist, **D, **K, del[MAXDIM], f; - node_t *vi, *vj; - edge_t *e; - - if (Verbose) { - fprintf(stderr, "Setting up spring model: "); - start_timer(); - } - /* init springs */ - K = GD_spring(G); - D = GD_dist(G); - for (i = 0; i < nG; i++) { - for (j = 0; j < i; j++) { - f = Spring_coeff / (D[i][j] * D[i][j]); - if ((e = agfindedge(G, GD_neato_nlist(G)[i], GD_neato_nlist(G)[j]))) - f = f * ED_factor(e); - K[i][j] = K[j][i] = f; - } - } - - /* init differential equation solver */ - for (i = 0; i < nG; i++) - for (k = 0; k < Ndim; k++) - GD_sum_t(G)[i][k] = 0.0; - - for (i = 0; (vi = GD_neato_nlist(G)[i]); i++) { - for (j = 0; j < nG; j++) { - if (i == j) - continue; - vj = GD_neato_nlist(G)[j]; - dist = distvec(ND_pos(vi), ND_pos(vj), del); - for (k = 0; k < Ndim; k++) { - GD_t(G)[i][j][k] = - GD_spring(G)[i][j] * (del[k] - - GD_dist(G)[i][j] * del[k] / - dist); - GD_sum_t(G)[i][k] += GD_t(G)[i][j][k]; - } - } - } - if (Verbose) { - fprintf(stderr, "%.2f sec\n", elapsed_sec()); - } -} - -/* total_e: - * Return 2*energy of system. - */ -static double total_e(graph_t * G, int nG) -{ - int i, j, d; - double e = 0.0; /* 2*energy */ - double t0; /* distance squared */ - double t1; - node_t *ip, *jp; - - for (i = 0; i < nG - 1; i++) { - ip = GD_neato_nlist(G)[i]; - for (j = i + 1; j < nG; j++) { - jp = GD_neato_nlist(G)[j]; - for (t0 = 0.0, d = 0; d < Ndim; d++) { - t1 = (ND_pos(ip)[d] - ND_pos(jp)[d]); - t0 += t1 * t1; - } - e = e + GD_spring(G)[i][j] * - (t0 + GD_dist(G)[i][j] * GD_dist(G)[i][j] - - 2.0 * GD_dist(G)[i][j] * sqrt(t0)); - } - } - return e; -} - -void solve_model(graph_t * G, int nG) -{ - node_t *np; - - Epsilon2 = Epsilon * Epsilon; - - while ((np = choose_node(G, nG))) { - move_node(G, nG, np); - } - if (Verbose) { - fprintf(stderr, "\nfinal e = %f", total_e(G, nG)); - fprintf(stderr, " %d%s iterations %.2f sec\n", - GD_move(G), (GD_move(G) == MaxIter ? "!" : ""), - elapsed_sec()); - } - if (GD_move(G) == MaxIter) - agerr(AGWARN, "Max. iterations (%d) reached on graph %s\n", - MaxIter, agnameof(G)); -} - -void update_arrays(graph_t * G, int nG, int i) -{ - int j, k; - double del[MAXDIM], dist, old; - node_t *vi, *vj; - - vi = GD_neato_nlist(G)[i]; - for (k = 0; k < Ndim; k++) - GD_sum_t(G)[i][k] = 0.0; - for (j = 0; j < nG; j++) { - if (i == j) - continue; - vj = GD_neato_nlist(G)[j]; - dist = distvec(ND_pos(vi), ND_pos(vj), del); - for (k = 0; k < Ndim; k++) { - old = GD_t(G)[i][j][k]; - GD_t(G)[i][j][k] = - GD_spring(G)[i][j] * (del[k] - - GD_dist(G)[i][j] * del[k] / dist); - GD_sum_t(G)[i][k] += GD_t(G)[i][j][k]; - old = GD_t(G)[j][i][k]; - GD_t(G)[j][i][k] = -GD_t(G)[i][j][k]; - GD_sum_t(G)[j][k] += (GD_t(G)[j][i][k] - old); - } - } -} - -#define Msub(i,j) M[(i)*Ndim+(j)] -void D2E(graph_t * G, int nG, int n, double *M) -{ - int i, l, k; - node_t *vi, *vn; - double scale, sq, t[MAXDIM]; - double **K = GD_spring(G); - double **D = GD_dist(G); - - vn = GD_neato_nlist(G)[n]; - for (l = 0; l < Ndim; l++) - for (k = 0; k < Ndim; k++) - Msub(l, k) = 0.0; - for (i = 0; i < nG; i++) { - if (n == i) - continue; - vi = GD_neato_nlist(G)[i]; - sq = 0.0; - for (k = 0; k < Ndim; k++) { - t[k] = ND_pos(vn)[k] - ND_pos(vi)[k]; - sq += (t[k] * t[k]); - } - scale = 1 / fpow32(sq); - for (k = 0; k < Ndim; k++) { - for (l = 0; l < k; l++) - Msub(l, k) += K[n][i] * D[n][i] * t[k] * t[l] * scale; - Msub(k, k) += - K[n][i] * (1.0 - D[n][i] * (sq - (t[k] * t[k])) * scale); - } - } - for (k = 1; k < Ndim; k++) - for (l = 0; l < k; l++) - Msub(k, l) = Msub(l, k); -} - -void final_energy(graph_t * G, int nG) -{ - fprintf(stderr, "iterations = %d final e = %f\n", GD_move(G), - total_e(G, nG)); -} - -node_t *choose_node(graph_t * G, int nG) -{ - int i, k; - double m, max; - node_t *choice, *np; - static int cnt = 0; -#if 0 - double e; - static double save_e = MAXDOUBLE; -#endif - - cnt++; - if (GD_move(G) >= MaxIter) - return NULL; -#if 0 - if ((cnt % 100) == 0) { - e = total_e(G, nG); - if (e - save_e > 0) - return NULL; - save_e = e; - } -#endif - max = 0.0; - choice = NULL; - for (i = 0; i < nG; i++) { - np = GD_neato_nlist(G)[i]; - if (ND_pinned(np) > P_SET) - continue; - for (m = 0.0, k = 0; k < Ndim; k++) - m += (GD_sum_t(G)[i][k] * GD_sum_t(G)[i][k]); - /* could set the color=energy of the node here */ - if (m > max) { - choice = np; - max = m; - } - } - if (max < Epsilon2) - choice = NULL; - else { - if (Verbose && (cnt % 100 == 0)) { - fprintf(stderr, "%.3f ", sqrt(max)); - if (cnt % 1000 == 0) - fprintf(stderr, "\n"); - } -#if 0 - e = total_e(G, nG); - if (fabs((e - save_e) / save_e) < 1e-5) { - choice = NULL; - } -#endif - } - return choice; -} - -void move_node(graph_t * G, int nG, node_t * n) -{ - int i, m; - static double *a, b[MAXDIM], c[MAXDIM]; - - m = ND_id(n); - a = ALLOC(Ndim * Ndim, a, double); - D2E(G, nG, m, a); - for (i = 0; i < Ndim; i++) - c[i] = -GD_sum_t(G)[m][i]; - solve(a, b, c, Ndim); - for (i = 0; i < Ndim; i++) { - b[i] = (Damping + 2 * (1 - Damping) * drand48()) * b[i]; - ND_pos(n)[i] += b[i]; - } - GD_move(G)++; - update_arrays(G, nG, m); - if (test_toggle()) { - double sum = 0; - for (i = 0; i < Ndim; i++) { - sum += fabs(b[i]); - } /* Why not squared? */ - sum = sqrt(sum); - fprintf(stderr, "%s %.3f\n", agnameof(n), sum); - } -} - -static node_t **Heap; -static int Heapsize; -static node_t *Src; - -void heapup(node_t * v) -{ - int i, par; - node_t *u; - - for (i = ND_heapindex(v); i > 0; i = par) { - par = (i - 1) / 2; - u = Heap[par]; - if (ND_dist(u) <= ND_dist(v)) - break; - Heap[par] = v; - ND_heapindex(v) = par; - Heap[i] = u; - ND_heapindex(u) = i; - } -} - -void heapdown(node_t * v) -{ - int i, left, right, c; - node_t *u; - - i = ND_heapindex(v); - while ((left = 2 * i + 1) < Heapsize) { - right = left + 1; - if ((right < Heapsize) - && (ND_dist(Heap[right]) < ND_dist(Heap[left]))) - c = right; - else - c = left; - u = Heap[c]; - if (ND_dist(v) <= ND_dist(u)) - break; - Heap[c] = v; - ND_heapindex(v) = c; - Heap[i] = u; - ND_heapindex(u) = i; - i = c; - } -} - -void neato_enqueue(node_t * v) -{ - int i; - - assert(ND_heapindex(v) < 0); - i = Heapsize++; - ND_heapindex(v) = i; - Heap[i] = v; - if (i > 0) - heapup(v); -} - -node_t *neato_dequeue(void) -{ - int i; - node_t *rv, *v; - - if (Heapsize == 0) - return NULL; - rv = Heap[0]; - i = --Heapsize; - v = Heap[i]; - Heap[0] = v; - ND_heapindex(v) = 0; - if (i > 1) - heapdown(v); - ND_heapindex(rv) = -1; - return rv; -} - -void shortest_path(graph_t * G, int nG) -{ - node_t *v; - - Heap = N_NEW(nG + 1, node_t *); - if (Verbose) { - fprintf(stderr, "Calculating shortest paths: "); - start_timer(); - } - for (v = agfstnode(G); v; v = agnxtnode(G, v)) - s1(G, v); - if (Verbose) { - fprintf(stderr, "%.2f sec\n", elapsed_sec()); - } - free(Heap); -} - -void s1(graph_t * G, node_t * node) -{ - node_t *v, *u; - edge_t *e; - int t; - double f; - - for (t = 0; (v = GD_neato_nlist(G)[t]); t++) - ND_dist(v) = Initial_dist; - Src = node; - ND_dist(Src) = 0; - ND_hops(Src) = 0; - neato_enqueue(Src); - - while ((v = neato_dequeue())) { - if (v != Src) - make_spring(G, Src, v, ND_dist(v)); - for (e = agfstedge(G, v); e; e = agnxtedge(G, e, v)) { - if ((u = agtail(e)) == v) - u = aghead(e); - f = ND_dist(v) + ED_dist(e); - if (ND_dist(u) > f) { - ND_dist(u) = f; - if (ND_heapindex(u) >= 0) - heapup(u); - else { - ND_hops(u) = ND_hops(v) + 1; - neato_enqueue(u); - } - } - } - } -} - -void make_spring(graph_t * G, node_t * u, node_t * v, double f) -{ - int i, j; - - i = ND_id(u); - j = ND_id(v); - GD_dist(G)[i][j] = GD_dist(G)[j][i] = f; -} - -int allow_edits(int nsec) -{ -#ifdef INTERACTIVE - static int onetime = TRUE; - static FILE *fp; - static fd_set fd; - static struct timeval tv; - - char buf[256], name[256]; - double x, y; - node_t *np; - - if (onetime) { - fp = fopen("/dev/tty", "r"); - if (fp == NULL) - exit(1); - setbuf(fp, NULL); - tv.tv_usec = 0; - onetime = FALSE; - } - tv.tv_sec = nsec; - FD_ZERO(&fd); - FD_SET(fileno(fp), &fd); - if (select(32, &fd, (fd_set *) 0, (fd_set *) 0, &tv) > 0) { - fgets(buf, sizeof(buf), fp); - switch (buf[0]) { - case 'm': /* move node */ - if (sscanf(buf + 1, "%s %lf%lf", name, &x, &y) == 3) { - np = getnode(G, name); - if (np) { - NP_pos(np)[0] = x; - NP_pos(np)[1] = y; - diffeq_model(); - } - } - break; - case 'q': - return FALSE; - default: - agerr(AGERR, "unknown command '%s', ignored\n", buf); - } - return TRUE; - } -#endif - return FALSE; -} diff --git a/internal/ccall/neatogen/voronoi.c b/internal/ccall/neatogen/voronoi.c deleted file mode 100644 index dac489d..0000000 --- a/internal/ccall/neatogen/voronoi.c +++ /dev/null @@ -1,121 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "mem.h" -#include "geometry.h" -#include "edges.h" -#include "hedges.h" -#include "heap.h" -#include "voronoi.h" - - -void voronoi(int triangulate, Site * (*nextsite) (void)) -{ - Site *newsite, *bot, *top, *temp, *p; - Site *v; - Point newintstar = {0}; - char pm; - Halfedge *lbnd, *rbnd, *llbnd, *rrbnd, *bisector; - Edge *e; - - edgeinit(); - siteinit(); - PQinitialize(); - bottomsite = (*nextsite) (); -#ifdef STANDALONE - out_site(bottomsite); -#endif - ELinitialize(); - - newsite = (*nextsite) (); - while (1) { - if (!PQempty()) - newintstar = PQ_min(); - - if (newsite != (struct Site *) NULL && (PQempty() - || newsite->coord.y < - newintstar.y - || (newsite->coord.y == - newintstar.y - && newsite->coord.x < - newintstar.x))) { - /* new site is smallest */ -#ifdef STANDALONE - out_site(newsite); -#endif - lbnd = ELleftbnd(&(newsite->coord)); - rbnd = ELright(lbnd); - bot = rightreg(lbnd); - e = bisect(bot, newsite); - bisector = HEcreate(e, le); - ELinsert(lbnd, bisector); - if ((p = hintersect(lbnd, bisector)) != (struct Site *) NULL) { - PQdelete(lbnd); - PQinsert(lbnd, p, dist(p, newsite)); - } - lbnd = bisector; - bisector = HEcreate(e, re); - ELinsert(lbnd, bisector); - if ((p = hintersect(bisector, rbnd)) != (struct Site *) NULL) - PQinsert(bisector, p, dist(p, newsite)); - newsite = (*nextsite) (); - } else if (!PQempty()) { - /* intersection is smallest */ - lbnd = PQextractmin(); - llbnd = ELleft(lbnd); - rbnd = ELright(lbnd); - rrbnd = ELright(rbnd); - bot = leftreg(lbnd); - top = rightreg(rbnd); -#ifdef STANDALONE - out_triple(bot, top, rightreg(lbnd)); -#endif - v = lbnd->vertex; - makevertex(v); - endpoint(lbnd->ELedge, lbnd->ELpm, v); - endpoint(rbnd->ELedge, rbnd->ELpm, v); - ELdelete(lbnd); - PQdelete(rbnd); - ELdelete(rbnd); - pm = le; - if (bot->coord.y > top->coord.y) { - temp = bot; - bot = top; - top = temp; - pm = re; - } - e = bisect(bot, top); - bisector = HEcreate(e, pm); - ELinsert(llbnd, bisector); - endpoint(e, re - pm, v); - deref(v); - if ((p = hintersect(llbnd, bisector)) != (struct Site *) NULL) { - PQdelete(llbnd); - PQinsert(llbnd, p, dist(p, bot)); - } - if ((p = hintersect(bisector, rrbnd)) != (struct Site *) NULL) { - PQinsert(bisector, p, dist(p, bot)); - } - } else - break; - } - - for (lbnd = ELright(ELleftend); lbnd != ELrightend; - lbnd = ELright(lbnd)) { - e = lbnd->ELedge; - clip_line(e); -#ifdef STANDALONE - out_ep(e); -#endif - } -} diff --git a/internal/ccall/neatogen/voronoi.h b/internal/ccall/neatogen/voronoi.h deleted file mode 100644 index 2f4c7b4..0000000 --- a/internal/ccall/neatogen/voronoi.h +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef VORONOI_H -#define VORONOI_H - -#include "site.h" - - extern void voronoi(int, Site * (*)(void)); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/ortho.c b/internal/ccall/ortho.c deleted file mode 100644 index 5da1b83..0000000 --- a/internal/ccall/ortho.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "ortho/fPQ.c" -#include "ortho/maze.c" -#include "ortho/ortho.c" -#include "ortho/partition.c" -#include "ortho/rawgraph.c" -#include "ortho/sgraph.c" -#include "ortho/trapezoid.c" diff --git a/internal/ccall/ortho/dummy.go b/internal/ccall/ortho/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/ortho/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/ortho/fPQ.c b/internal/ccall/ortho/fPQ.c deleted file mode 100644 index 41d873c..0000000 --- a/internal/ccall/ortho/fPQ.c +++ /dev/null @@ -1,160 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Priority Queue Code for shortest path in graph */ - -#include "config.h" -#include -#include - -#include "fPQ.h" - -static snode** pq; -static int PQcnt; -static snode guard; -static int PQsize; - -void -PQgen(int sz) -{ - if (!pq) { - pq = N_NEW(sz+1,snode*); - pq[0] = &guard; - PQsize = sz; - } - PQcnt = 0; -} - -void -PQfree(void) -{ - free (pq); - pq = NULL; - PQcnt = 0; -} - -void -PQinit(void) -{ - PQcnt = 0; -} - -void -PQcheck (void) -{ - int i; - - for (i = 1; i <= PQcnt; i++) { - if (N_IDX(pq[i]) != i) { - assert (0); - } - } -} - -void -PQupheap(int k) -{ - snode* x = pq[k]; - int v = x->n_val; - int next = k/2; - snode* n; - - while (N_VAL(n = pq[next]) < v) { - pq[k] = n; - N_IDX(n) = k; - k = next; - next /= 2; - } - pq[k] = x; - N_IDX(x) = k; -} - -int -PQ_insert(snode* np) -{ - if (PQcnt == PQsize) { - agerr (AGERR, "Heap overflow\n"); - return (1); - } - PQcnt++; - pq[PQcnt] = np; - PQupheap (PQcnt); - PQcheck(); - return 0; -} - -void -PQdownheap (int k) -{ - snode* x = pq[k]; - int v = N_VAL(x); - int lim = PQcnt/2; - snode* n; - int j; - - while (k <= lim) { - j = k+k; - n = pq[j]; - if (j < PQcnt) { - if (N_VAL(n) < N_VAL(pq[j+1])) { - j++; - n = pq[j]; - } - } - if (v >= N_VAL(n)) break; - pq[k] = n; - N_IDX(n) = k; - k = j; - } - pq[k] = x; - N_IDX(x) = k; -} - -snode* -PQremove (void) -{ - snode* n; - - if (PQcnt) { - n = pq[1]; - pq[1] = pq[PQcnt]; - PQcnt--; - if (PQcnt) PQdownheap (1); - PQcheck(); - return n; - } - else return 0; -} - -void -PQupdate (snode* n, int d) -{ - N_VAL(n) = d; - PQupheap (n->n_idx); - PQcheck(); -} - -void -PQprint (void) -{ - int i; - snode* n; - - fprintf (stderr, "Q: "); - for (i = 1; i <= PQcnt; i++) { - n = pq[i]; - fprintf (stderr, "%d(%d:%d) ", - n->index, N_IDX(n), N_VAL(n)); - } - fprintf (stderr, "\n"); -} diff --git a/internal/ccall/ortho/fPQ.h b/internal/ccall/ortho/fPQ.h deleted file mode 100644 index fba181c..0000000 --- a/internal/ccall/ortho/fPQ.h +++ /dev/null @@ -1,185 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Priority Queue Code for shortest path in graph */ - -#include -/* typedef snode** PQ; */ - -#define N_VAL(n) (n)->n_val -#define N_IDX(n) (n)->n_idx -#define N_DAD(n) (n)->n_dad -#define N_EDGE(n) (n)->n_edge -#define E_WT(e) (e->weight) -#define E_INCR(e) (e->incr) - -#ifdef INLINEPQ - -#include "assert.h" -static snode** pq; -static int PQcnt; -static snode guard; -static int PQsize; - -static void -PQgen(int sz) -{ - if (!pq) { - pq = N_NEW(sz+1,snode*); - pq[0] = &guard; - PQsize = sz; - } - PQcnt = 0; -} - -static void -PQfree() -{ - free (pq); - pq = NULL; - PQcnt = 0; -} - -static void -PQinit() -{ - PQcnt = 0; -} - -static void -PQcheck () -{ - int i; - - for (i = 1; i <= PQcnt; i++) { - if (N_IDX(pq[i]) != i) { - assert (0); - } - } -} - -static void -PQupheap(int k) -{ - snode* x; - x = pq[k]; - int v = x->n_val; - int next = k/2; - snode* n; - - while (N_VAL(n = pq[next]) < v) { - pq[k] = n; - N_IDX(n) = k; - k = next; - next /= 2; - } - pq[k] = x; - N_IDX(x) = k; -} - -static int -PQ_insert(snode* np) -{ - if (PQcnt == PQsize) { - agerr (AGERR, "Heap overflow\n"); - return 1; - } - PQcnt++; - pq[PQcnt] = np; - PQupheap (PQcnt); - PQcheck(); - return 0; -} - -static void -PQdownheap (int k) -{ - snode* x = pq[k]; - int v = N_VAL(x); - int lim = PQcnt/2; - snode* n; - int j; - - while (k <= lim) { - j = k+k; - n = pq[j]; - if (j < PQcnt) { - if (N_VAL(n) < N_VAL(pq[j+1])) { - j++; - n = pq[j]; - } - } - if (v >= N_VAL(n)) break; - pq[k] = n; - N_IDX(n) = k; - k = j; - } - pq[k] = x; - N_IDX(x) = k; -} - -static snode* -PQremove () -{ - snode* n; - - if (PQcnt) { - n = pq[1]; - pq[1] = pq[PQcnt]; - PQcnt--; - if (PQcnt) PQdownheap (1); - PQcheck(); - return n; - } - else return 0; -} - -static void -PQupdate (snode* n, int d) -{ - N_VAL(n) = d; - PQupheap (n->n_idx); - PQcheck(); -} - -static void -PQprint () -{ - int i; - snode* n; - - fprintf (stderr, "Q: "); - for (i = 1; i <= PQcnt; i++) { - n = pq[i]; - fprintf (stderr, "%s(%d:%d) ", - n->index, N_IDX(n), N_VAL(n)); - } - fprintf (stderr, "\n"); -} -#else - -#ifndef FPQ_H -#define FPQ_H - -void PQgen(int sz); -void PQfree(void); -void PQinit(void); -void PQcheck (void); -void PQupheap(int); -int PQ_insert(snode* np); -void PQdownheap (int k); -snode* PQremove (void); -void PQupdate (snode* n, int d); -void PQprint (void); -#endif -#endif diff --git a/internal/ccall/ortho/maze.c b/internal/ccall/ortho/maze.c deleted file mode 100644 index 3f04ea7..0000000 --- a/internal/ccall/ortho/maze.c +++ /dev/null @@ -1,518 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -//#define DEBUG - -#include -#include -#include -#include -#include -/* #include */ - -#define MARGIN 36; - -#ifdef DEBUG -char* pre = "%!PS-Adobe-2.0\n\ -/node {\n\ - /Y exch def\n\ - /X exch def\n\ - /y exch def\n\ - /x exch def\n\ - newpath\n\ - x y moveto\n\ - x Y lineto\n\ - X Y lineto\n\ - X y lineto\n\ - closepath fill\n\ -} def\n\ -/cell {\n\ - /Y exch def\n\ - /X exch def\n\ - /y exch def\n\ - /x exch def\n\ - newpath\n\ - x y moveto\n\ - x Y lineto\n\ - X Y lineto\n\ - X y lineto\n\ - closepath stroke\n\ -} def\n"; - -char* post = "showpage\n"; - -static void -psdump (cell* gcells, int n_gcells, boxf BB, boxf* rects, int nrect) -{ - int i; - boxf bb; - box absbb; - - absbb.LL.y = absbb.LL.x = 10; - absbb.UR.x = absbb.LL.x + BB.UR.x - BB.LL.x; - absbb.UR.y = absbb.LL.y + BB.UR.y - BB.LL.y; - fputs (pre, stderr); - fprintf (stderr, "%%%%Page: 1 1\n%%%%PageBoundingBox: %d %d %d %d\n", - absbb.LL.x, absbb.LL.y, absbb.UR.x, absbb.UR.y); - - - fprintf (stderr, "%f %f translate\n", 10-BB.LL.x, 10-BB.LL.y); - fputs ("0 0 1 setrgbcolor\n", stderr); - for (i = 0; i < n_gcells; i++) { - bb = gcells[i].bb; - fprintf (stderr, "%f %f %f %f node\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } - fputs ("0 0 0 setrgbcolor\n", stderr); - for (i = 0; i < nrect; i++) { - bb = rects[i]; - fprintf (stderr, "%f %f %f %f cell\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } - fputs ("1 0 0 setrgbcolor\n", stderr); - fprintf (stderr, "%f %f %f %f cell\n", BB.LL.x, BB.LL.y, BB.UR.x, BB.UR.y); - fputs (post, stderr); -} -#endif - -static int -vcmpid(Dt_t* d, pointf* key1, pointf* key2, Dtdisc_t* disc) -{ - if (key1->x > key2->x) return 1; - else if (key1->x < key2->x) return -1; - else if (key1->y > key2->y) return 1; - else if (key1->y < key2->y) return -1; - else return 0; -} - -static int -hcmpid(Dt_t* d, pointf* key1, pointf* key2, Dtdisc_t* disc) -{ - if (key1->y > key2->y) return 1; - else if (key1->y < key2->y) return -1; - else if (key1->x > key2->x) return 1; - else if (key1->x < key2->x) return -1; - else return 0; -} - -typedef struct { - snode* np; - pointf p; - Dtlink_t link; -} snodeitem; - -static Dtdisc_t vdictDisc = { - offsetof(snodeitem,p), - sizeof(pointf), - offsetof(snodeitem,link), - 0, - 0, - (Dtcompar_f)vcmpid, - 0, - 0, - 0 -}; -static Dtdisc_t hdictDisc = { - offsetof(snodeitem,p), - sizeof(pointf), - offsetof(snodeitem,link), - 0, - 0, - (Dtcompar_f)hcmpid, - 0, - 0, - 0 -}; - -#define delta 1 /* weight of length */ -#define mu 500 /* weight of bends */ - -#define BEND(g,e) ((g->nodes + e->v1)->isVert != (g->nodes + e->v2)->isVert) -#define HORZ(g,e) ((g->nodes + e->v1)->isVert) -#define BIG 16384 -#define CHANSZ(w) (((w)-3)/2) -#define IS_SMALL(v) (CHANSZ(v) < 2) -/* #define CHANSZ(w) (w) */ - -/* updateWt: - * At present, we use a step function. When a bound is reached, the weight - * becomes huge. We might consider bumping up the weight more gradually, the - * thinner the channel, the faster the weight rises. - */ -static void -updateWt (cell* cp, sedge* ep, int sz) -{ - ep->cnt++; - if (ep->cnt > sz) { - ep->cnt = 0; - ep->weight += BIG; - } -} - -/* updateWts: - * Iterate over edges in a cell, adjust weights as necessary. - * It always updates the bent edges belonging to a cell. - * A horizontal/vertical edge is updated only if the edge traversed - * is bent, or if it is the traversed edge. - */ -void -updateWts (sgraph* g, cell* cp, sedge* ep) -{ - int i; - sedge* e; - int isBend = BEND(g,ep); - int hsz = CHANSZ (cp->bb.UR.y - cp->bb.LL.y); - int vsz = CHANSZ (cp->bb.UR.x - cp->bb.LL.x); - int minsz = MIN(hsz, vsz); - - /* Bend edges are added first */ - for (i = 0; i < cp->nedges; i++) { - e = cp->edges[i]; - if (!BEND(g,e)) break; - updateWt (cp, e, minsz); -} - - for (; i < cp->nedges; i++) { - e = cp->edges[i]; - if (isBend || (e == ep)) updateWt (cp, e, (HORZ(g,e)?hsz:vsz)); - } -} - -/* markSmall: - * cp corresponds to a real node. If it is small, its associated cells should - * be marked as usable. - */ -static void -markSmall (cell* cp, sgraph* g) -{ - int i; - snode* onp; - cell* ocp; - - if (IS_SMALL(cp->bb.UR.y-cp->bb.LL.y)) { - for (i = 0; i < cp->nsides; i++) { - onp = cp->sides[i]; - if (!onp->isVert) continue; - if (onp->cells[0] == cp) { /* onp on the right of cp */ - ocp = onp->cells[1]; - ocp->flags |= MZ_SMALLV; - while ((onp = ocp->sides[M_RIGHT]) && !IsNode(onp->cells[1])) { - ocp = onp->cells[1]; - ocp->flags |= MZ_SMALLV; - } - } - else { /* onp on the left of cp */ - ocp = onp->cells[0]; - ocp->flags |= MZ_SMALLV; - while ((onp = ocp->sides[M_LEFT]) && !IsNode(onp->cells[0])) { - ocp = onp->cells[0]; - ocp->flags |= MZ_SMALLV; - } - } - } - } - - if (IS_SMALL(cp->bb.UR.x-cp->bb.LL.x)) { - for (i = 0; i < cp->nsides; i++) { - onp = cp->sides[i]; - if (onp->isVert) continue; - if (onp->cells[0] == cp) { /* onp on the top of cp */ - ocp = onp->cells[1]; - ocp->flags |= MZ_SMALLH; - while ((onp = ocp->sides[M_TOP]) && !IsNode(onp->cells[1])) { - ocp = onp->cells[1]; - ocp->flags |= MZ_SMALLH; - } - } - else { /* onp on the bottom of cp */ - ocp = onp->cells[0]; - ocp->flags |= MZ_SMALLH; - while ((onp = ocp->sides[M_BOTTOM]) && !IsNode(onp->cells[0])) { - ocp = onp->cells[0]; - ocp->flags |= MZ_SMALLH; - } - } - } - } -} - -static void -createSEdges (cell* cp, sgraph* g) -{ - boxf bb = cp->bb; - double hwt = delta*(bb.UR.x-bb.LL.x); - double vwt = delta*(bb.UR.y-bb.LL.y); - double wt = (hwt + vwt)/2.0 + mu; - - /* We automatically make small channels have high cost to guide routes to - * more spacious channels. - */ - if (IS_SMALL(bb.UR.y-bb.LL.y) && !IsSmallV(cp)) { - hwt = BIG; - wt = BIG; - } - if (IS_SMALL(bb.UR.x-bb.LL.x) && !IsSmallH(cp)) { - vwt = BIG; - wt = BIG; - } - - if (cp->sides[M_LEFT] && cp->sides[M_TOP]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_LEFT], cp->sides[M_TOP], wt); - if (cp->sides[M_TOP] && cp->sides[M_RIGHT]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_TOP], cp->sides[M_RIGHT], wt); - if (cp->sides[M_LEFT] && cp->sides[M_BOTTOM]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_LEFT], cp->sides[M_BOTTOM], wt); - if (cp->sides[M_BOTTOM] && cp->sides[M_RIGHT]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_BOTTOM], cp->sides[M_RIGHT], wt); - if (cp->sides[M_TOP] && cp->sides[M_BOTTOM]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_TOP], cp->sides[M_BOTTOM], vwt); - if (cp->sides[M_LEFT] && cp->sides[M_RIGHT]) - cp->edges[cp->nedges++] = createSEdge (g, cp->sides[M_LEFT], cp->sides[M_RIGHT], hwt); -} - -static snode* -findSVert (sgraph* g, Dt_t* cdt, pointf p, snodeitem* ditems, boolean isVert) -{ - snodeitem* n = dtmatch (cdt, &p); - - if (!n) { - snode* np = createSNode (g); - assert(ditems); - n = ditems + np->index; - n->p = p; - n->np = np; - np->isVert = isVert; - dtinsert (cdt, n); - } - - return n->np; -} - -static void -chkSgraph (sgraph* g) -{ - int i; - snode* np; - - for (i = 0; i < g->nnodes; i++) { - np = g->nodes+i; - if (!np->cells[0]) fprintf (stderr, "failed at node %d[0]\n", i); - assert (np->cells[0]); - if (!np->cells[1]) fprintf (stderr, "failed at node %d[1]\n", i); - assert (np->cells[1]); - } - -} - -/* mkMazeGraph: - */ -static sgraph* -mkMazeGraph (maze* mp, boxf bb) -{ - int nsides, i, ncnt, maxdeg; - int bound = 4*mp->ncells; - sgraph* g = createSGraph (bound + 2); - Dt_t* vdict = dtopen(&vdictDisc,Dtoset); - Dt_t* hdict = dtopen(&hdictDisc,Dtoset); - snodeitem* ditems = N_NEW(bound, snodeitem); - snode** sides; - - /* For each cell, create if necessary and attach a node in search - * corresponding to each internal face. The node also gets - * a pointer to the cell. - */ - sides = N_NEW(4*mp->ncells, snode*); - ncnt = 0; - for (i = 0; i < mp->ncells; i++) { - cell* cp = mp->cells+i; - snode* np; - pointf pt; - - cp->nsides = 4; - cp->sides = sides + 4*i; - if (cp->bb.UR.x < bb.UR.x) { - pt.x = cp->bb.UR.x; - pt.y = cp->bb.LL.y; - np = findSVert (g, vdict, pt, ditems, TRUE); - np->cells[0] = cp; - cp->sides[M_RIGHT] = np; - } - if (cp->bb.UR.y < bb.UR.y) { - pt.x = cp->bb.LL.x; - pt.y = cp->bb.UR.y; - np = findSVert (g, hdict, pt, ditems, FALSE); - np->cells[0] = cp; - cp->sides[M_TOP] = np; - } - if (cp->bb.LL.x > bb.LL.x) { - np = findSVert (g, vdict, cp->bb.LL, ditems, TRUE); - np->cells[1] = cp; - cp->sides[M_LEFT] = np; - } - if (cp->bb.LL.y > bb.LL.y) { - np = findSVert (g, hdict, cp->bb.LL, ditems, FALSE); - np->cells[1] = cp; - cp->sides[M_BOTTOM] = np; - } - } - - /* For each gcell, corresponding to a node in the input graph, - * connect it to its corresponding search nodes. - */ - maxdeg = 0; - sides = N_NEW(g->nnodes, snode*); - nsides = 0; - for (i = 0; i < mp->ngcells; i++) { - cell* cp = mp->gcells+i; - pointf pt; - snodeitem* np; - - cp->sides = sides+nsides; - pt = cp->bb.LL; - np = dtmatch (hdict, &pt); - for (; np && np->p.x < cp->bb.UR.x; np = dtnext (hdict, np)) { - cp->sides[cp->nsides++] = np->np; - np->np->cells[1] = cp; - } - np = dtmatch (vdict, &pt); - for (; np && np->p.y < cp->bb.UR.y; np = dtnext (vdict, np)) { - cp->sides[cp->nsides++] = np->np; - np->np->cells[1] = cp; - } - pt.y = cp->bb.UR.y; - np = dtmatch (hdict, &pt); - for (; np && np->p.x < cp->bb.UR.x; np = dtnext (hdict, np)) { - cp->sides[cp->nsides++] = np->np; - np->np->cells[0] = cp; - } - pt.x = cp->bb.UR.x; - pt.y = cp->bb.LL.y; - np = dtmatch (vdict, &pt); - for (; np && np->p.y < cp->bb.UR.y; np = dtnext (vdict, np)) { - cp->sides[cp->nsides++] = np->np; - np->np->cells[0] = cp; - } - nsides += cp->nsides; - if (cp->nsides > maxdeg) maxdeg = cp->nsides; - } - /* sides = RALLOC (nsides, sides, snode*); */ - - /* Mark cells that are small because of a small node, not because of the close - * alignment of two rectangles. - */ - for (i = 0; i < mp->ngcells; i++) { - cell* cp = mp->gcells+i; - markSmall (cp, g); - } - - /* Set index of two dummy nodes used for real nodes */ - g->nodes[g->nnodes].index = g->nnodes; - g->nodes[g->nnodes+1].index = g->nnodes+1; - - /* create edges - * For each ordinary cell, there can be at most 6 edges. - * At most 2 gcells will be used at a time, and each of these - * can have at most degree maxdeg. - */ - initSEdges (g, maxdeg); - for (i = 0; i < mp->ncells; i++) { - cell* cp = mp->cells+i; - createSEdges (cp, g); - } - - /* tidy up memory */ - /* g->nodes = RALLOC (g->nnodes+2, g->nodes, snode); */ - /* g->edges = RALLOC (g->nedges+2*maxdeg, g->edges, sedge); */ - dtclose (vdict); - dtclose (hdict); - free (ditems); - -chkSgraph (g); - /* save core graph state */ - gsave(g); - return g; -} - -/* mkMaze: - */ -maze* -mkMaze (graph_t* g, int doLbls) -{ - node_t* n; - maze* mp = NEW(maze); - boxf* rects; - int i, nrect; - cell* cp; - double w2, h2; - boxf bb, BB; - - mp->ngcells = agnnodes(g); - cp = mp->gcells = N_NEW(mp->ngcells, cell); - - BB.LL.x = BB.LL.y = MAXDOUBLE; - BB.UR.x = BB.UR.y = -MAXDOUBLE; - for (n = agfstnode (g); n; n = agnxtnode(g,n)) { - w2 = ND_xsize(n)/2.0; - if (w2 < 1) w2 = 1; - h2 = ND_ysize(n)/2.0; - if (h2 < 1) h2 = 1; - bb.LL.x = ND_coord(n).x - w2; - bb.UR.x = ND_coord(n).x + w2; - bb.LL.y = ND_coord(n).y - h2; - bb.UR.y = ND_coord(n).y + h2; - BB.LL.x = MIN(BB.LL.x, bb.LL.x); - BB.LL.y = MIN(BB.LL.y, bb.LL.y); - BB.UR.x = MAX(BB.UR.x, bb.UR.x); - BB.UR.y = MAX(BB.UR.y, bb.UR.y); - cp->bb = bb; - cp->flags |= MZ_ISNODE; - ND_alg(n) = cp; - cp++; - } - - if (doLbls) { - } - - BB.LL.x -= MARGIN; - BB.LL.y -= MARGIN; - BB.UR.x += MARGIN; - BB.UR.y += MARGIN; - rects = partition (mp->gcells, mp->ngcells, &nrect, BB); - -#ifdef DEBUG - if (odb_flags & ODB_MAZE) psdump (mp->gcells, mp->ngcells, BB, rects, nrect); -#endif - mp->cells = N_NEW(nrect, cell); - mp->ncells = nrect; - for (i = 0; i < nrect; i++) { - mp->cells[i].bb = rects[i]; - } - free (rects); - - mp->sg = mkMazeGraph (mp, BB); - return mp; -} - -void freeMaze (maze* mp) -{ - free (mp->cells[0].sides); - free (mp->gcells[0].sides); - free (mp->cells); - free (mp->gcells); - freeSGraph (mp->sg); - dtclose (mp->hchans); - dtclose (mp->vchans); - free (mp); -} - diff --git a/internal/ccall/ortho/maze.h b/internal/ccall/ortho/maze.h deleted file mode 100644 index 89891e4..0000000 --- a/internal/ccall/ortho/maze.h +++ /dev/null @@ -1,67 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef MAZE_H -#define MAZE_H - -#include - -enum {M_RIGHT=0, M_TOP, M_LEFT, M_BOTTOM}; - -#define MZ_ISNODE 1 -#define MZ_VSCAN 2 -#define MZ_HSCAN 4 -#define MZ_SMALLV 8 -#define MZ_SMALLH 16 - - /* cell corresponds to node */ -#define IsNode(cp) (cp->flags & MZ_ISNODE) - /* cell already inserted in vertical channel */ -#define IsVScan(cp) (cp->flags & MZ_VSCAN) - /* cell already inserted in horizontal channel */ -#define IsHScan(cp) (cp->flags & MZ_HSCAN) - /* cell has small height corresponding to a small height node */ -#define IsSmallV(cp) (cp->flags & MZ_SMALLV) - /* cell has small width corresponding to a small width node */ -#define IsSmallH(cp) (cp->flags & MZ_SMALLH) - -typedef struct cell { - int flags; - int nedges; - sedge* edges[6]; - int nsides; - snode** sides; - boxf bb; -} cell; - -typedef struct { - int ncells, ngcells; - cell* cells; /* cells not corresponding to graph nodes */ - cell* gcells; /* cells corresponding to graph nodes */ - sgraph* sg; - Dt_t* hchans; - Dt_t* vchans; -} maze; - -extern maze* mkMaze (graph_t*, int); -extern void freeMaze (maze*); -void updateWts (sgraph* g, cell* cp, sedge* ep); -#ifdef DEBUG -extern int odb_flags; -#define ODB_MAZE 1 -#define ODB_SGRAPH 2 -#define ODB_ROUTE 4 -#define ODB_CHANG 8 -#define ODB_IGRAPH 16 -#endif -#endif diff --git a/internal/ccall/ortho/ortho.c b/internal/ccall/ortho/ortho.c deleted file mode 100644 index 09f9aa4..0000000 --- a/internal/ccall/ortho/ortho.c +++ /dev/null @@ -1,1561 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* TODO: - * In dot, prefer bottom or top routing - * In general, prefer closest side to closest side routing. - * Edge labels - * Ports/compass points - * ordering attribute - * Weights on edges in nodes - * Edge concentrators? - */ - -#include "config.h" - -//#define DEBUG -#include -#include -#include -#include "fPQ.h" -#include "memory.h" -#include "geomprocs.h" -#include "globals.h" -#include "render.h" -#include "pointset.h" -typedef struct { - int d; - Agedge_t* e; -} epair_t; - -static jmp_buf jbuf; - -#ifdef DEBUG -static void emitSearchGraph (FILE* fp, sgraph* sg); -static void emitGraph (FILE* fp, maze* mp, int n_edges, route* route_list, epair_t[]); -int odb_flags; -#endif - -#define CELL(n) ((cell*)ND_alg(n)) -#define MID(a,b) (((a)+(b))/2.0) -#define SC 1 - -/* cellOf: - * Given 2 snodes sharing a cell, return the cell. - */ -static cell* -cellOf (snode* p, snode* q) -{ - cell* cp = p->cells[0]; - if ((cp == q->cells[0]) || (cp == q->cells[1])) return cp; - else return p->cells[1]; -} - -static pointf -midPt (cell* cp) -{ - pointf p; - p.x = MID(cp->bb.LL.x,cp->bb.UR.x); - p.y = MID(cp->bb.LL.y,cp->bb.UR.y); - return p; -} - -/* sidePt: - * Given a cell and an snode on one of its sides, return the - * midpoint of the side. - */ -static pointf -sidePt (snode* ptr, cell* cp) -{ - pointf pt; - if (cp == ptr->cells[1]) { - if (ptr->isVert) { - pt.x = cp->bb.LL.x; - pt.y = MID(cp->bb.LL.y,cp->bb.UR.y); - } - else { - pt.x = MID(cp->bb.LL.x,cp->bb.UR.x); - pt.y = cp->bb.LL.y; - } - } - else { - if (ptr->isVert) { - pt.x = cp->bb.UR.x; - pt.y = MID(cp->bb.LL.y,cp->bb.UR.y); - } - else { - pt.x = MID(cp->bb.LL.x,cp->bb.UR.x); - pt.y = cp->bb.UR.y; - } - } - return pt; -} - -/* setSet: - * Initialize and normalize segments. - * p1 stores smaller value - * Assume b1 != b2 - */ -static void -setSeg (segment* sp, int dir, double fix, double b1, double b2, int l1, int l2) -{ - sp->isVert = dir; - sp->comm_coord = fix; - if (b1 < b2) { - sp->p.p1 = b1; - sp->p.p2 = b2; - sp->l1 = l1; - sp->l2 = l2; - sp->flipped = 0; - } - else { - sp->p.p2 = b1; - sp->p.p1 = b2; - sp->l2 = l1; - sp->l1 = l2; - sp->flipped = 1; - } -} - -/* Convert route in shortest path graph to route - * of segments. This records the first and last cells, - * plus cells where the path bends. - * Note that the shortest path will always have at least 4 nodes: - * the two dummy nodes representing the center of the two real nodes, - * and the two nodes on the boundary of the two real nodes. - */ -#define PUSH(rte,P) (rte.p[rte.n++] = P) - -static route -convertSPtoRoute (sgraph* g, snode* fst, snode* lst) -{ - route rte; - snode* ptr; - snode* next; - snode* prev; /* node in shortest path just previous to next */ - int i, sz = 0; - cell* cp; - cell* ncp; - segment seg; - double fix, b1, b2; - int l1, l2; - pointf bp1, bp2, prevbp = {0.0,0.0}; /* bend points */ - - /* count no. of nodes in shortest path */ - for (ptr = fst; ptr; ptr = N_DAD(ptr)) sz++; - rte.n = 0; - rte.segs = N_NEW(sz-2, segment); /* at most sz-2 segments */ - - seg.prev = seg.next = 0; - ptr = prev = N_DAD(fst); - next = N_DAD(ptr); - if (IsNode(ptr->cells[0])) - cp = ptr->cells[1]; - else - cp = ptr->cells[0]; - bp1 = sidePt (ptr, cp); - while (N_DAD(next)!=NULL) { - ncp = cellOf (prev, next); - updateWts (g, ncp, N_EDGE(ptr)); - - /* add seg if path bends or at end */ - if ((ptr->isVert != next->isVert) || (N_DAD(next) == lst)) { - if (ptr->isVert != next->isVert) - bp2 = midPt (ncp); - else - bp2 = sidePt(next, ncp); - if (ptr->isVert) { /* horizontal segment */ - if (ptr == N_DAD(fst)) l1 = B_NODE; - else if (prevbp.y > bp1.y) l1 = B_UP; - else l1 = B_DOWN; - if (ptr->isVert != next->isVert) { - if (next->cells[0] == ncp) l2 = B_UP; - else l2 = B_DOWN; - } - else l2 = B_NODE; - fix = cp->bb.LL.y; - b1 = cp->bb.LL.x; - b2 = ncp->bb.LL.x; - } - else { /* vertical segment */ - if (ptr == N_DAD(fst)) l1 = B_NODE; - else if (prevbp.x > bp1.x) l1 = B_RIGHT; - else l1 = B_LEFT; - if (ptr->isVert != next->isVert) { - if (next->cells[0] == ncp) l2 = B_RIGHT; - else l2 = B_LEFT; - } - else l2 = B_NODE; - fix = cp->bb.LL.x; - b1 = cp->bb.LL.y; - b2 = ncp->bb.LL.y; - } - setSeg (&seg, !ptr->isVert, fix, b1, b2, l1, l2); - rte.segs[rte.n++] = seg; - cp = ncp; - prevbp = bp1; - bp1 = bp2; - if ((ptr->isVert != next->isVert) && (N_DAD(next) == lst)) { - bp2 = sidePt(next, ncp); - l2 = B_NODE; - if (next->isVert) { /* horizontal segment */ - if (prevbp.y > bp1.y) l1 = B_UP; - else l1 = B_DOWN; - fix = cp->bb.LL.y; - b1 = cp->bb.LL.x; - b2 = ncp->bb.LL.x; - } - else { - if (prevbp.x > bp1.x) l1 = B_RIGHT; - else l1 = B_LEFT; - fix = cp->bb.LL.x; - b1 = cp->bb.LL.y; - b2 = ncp->bb.LL.y; - } - setSeg (&seg, !next->isVert, fix, b1, b2, l1, l2); - rte.segs[rte.n++] = seg; - } - ptr = next; - } - prev = next; - next = N_DAD(next); - } - - rte.segs = realloc (rte.segs, rte.n*sizeof(segment)); - for (i=0; i 0) - rte.segs[i].prev = rte.segs + (i-1); - if (i < rte.n-1) - rte.segs[i].next = rte.segs + (i+1); - } - - return rte; -} - -typedef struct { - Dtlink_t link; - double v; - Dt_t* chans; -} chanItem; - -static void -freeChannel (Dt_t* d, channel* cp, Dtdisc_t* disc) -{ - free_graph (cp->G); - free (cp->seg_list); - free (cp); -} - -static void -freeChanItem (Dt_t* d, chanItem* cp, Dtdisc_t* disc) -{ - dtclose (cp->chans); - free (cp); -} - -/* chancmpid: - * Compare intervals. Two intervals are equal if one contains - * the other. Otherwise, the one with the smaller p1 value is - * less. - * This combines two separate functions into one. Channels are - * disjoint, so we really only need to key on p1. - * When searching for a channel containing a segment, we rely on - * interval containment to return the correct channel. - */ -static int -chancmpid(Dt_t* d, paird* key1, paird* key2, Dtdisc_t* disc) -{ - if (key1->p1 > key2->p1) { - if (key1->p2 <= key2->p2) return 0; - else return 1; - } - else if (key1->p1 < key2->p1) { - if (key1->p2 >= key2->p2) return 0; - else return -1; - } - else return 0; -} - -static int -dcmpid(Dt_t* d, double* key1, double* key2, Dtdisc_t* disc) -{ - if (*key1 > *key2) return 1; - else if (*key1 < *key2) return -1; - else return 0; -} - -static Dtdisc_t chanDisc = { - offsetof(channel,p), - sizeof(paird), - offsetof(channel,link), - 0, - (Dtfree_f)freeChannel, - (Dtcompar_f)chancmpid, - 0, - 0, - 0 -}; - -static Dtdisc_t chanItemDisc = { - offsetof(chanItem,v), - sizeof(double), - offsetof(chanItem,link), - 0, - (Dtfree_f)freeChanItem, - (Dtcompar_f)dcmpid, - 0, - 0, - 0 -}; - -static void -addChan (Dt_t* chdict, channel* cp, double j) -{ - chanItem* subd = dtmatch (chdict, &j); - - if (!subd) { - subd = NEW (chanItem); - subd->v = j; - subd->chans = dtopen (&chanDisc, Dtoset); - dtinsert (chdict, subd); - } - dtinsert (subd->chans, cp); -} - -static Dt_t* -extractHChans (maze* mp) -{ - int i; - snode* np; - Dt_t* hchans = dtopen (&chanItemDisc, Dtoset); - - for (i = 0; i < mp->ncells; i++) { - channel* chp; - cell* cp = mp->cells+i; - cell* nextcp; - if (IsHScan(cp)) continue; - - /* move left */ - while ((np = cp->sides[M_LEFT]) && (nextcp = np->cells[0]) && - !IsNode(nextcp)) { - cp = nextcp; - } - - chp = NEW(channel); - chp->cp = cp; - chp->p.p1 = cp->bb.LL.x; - - /* move right */ - cp->flags |= MZ_HSCAN; - while ((np = cp->sides[M_RIGHT]) && (nextcp = np->cells[1]) && - !IsNode(nextcp)) { - cp = nextcp; - cp->flags |= MZ_HSCAN; - } - - chp->p.p2 = cp->bb.UR.x; - addChan (hchans, chp, chp->cp->bb.LL.y); - } - return hchans; -} - -static Dt_t* -extractVChans (maze* mp) -{ - int i; - snode* np; - Dt_t* vchans = dtopen (&chanItemDisc, Dtoset); - - for (i = 0; i < mp->ncells; i++) { - channel* chp; - cell* cp = mp->cells+i; - cell* nextcp; - if (IsVScan(cp)) continue; - - /* move down */ - while ((np = cp->sides[M_BOTTOM]) && (nextcp = np->cells[0]) && - !IsNode(nextcp)) { - cp = nextcp; - } - - chp = NEW(channel); - chp->cp = cp; - chp->p.p1 = cp->bb.LL.y; - - /* move up */ - cp->flags |= MZ_VSCAN; - while ((np = cp->sides[M_TOP]) && (nextcp = np->cells[1]) && - !IsNode(nextcp)) { - cp = nextcp; - cp->flags |= MZ_VSCAN; - } - - chp->p.p2 = cp->bb.UR.y; - addChan (vchans, chp, chp->cp->bb.LL.x); - } - return vchans; -} - -static void -insertChan (channel* chan, segment* seg) -{ - seg->ind_no = chan->cnt++; - chan->seg_list = ALLOC(chan->cnt, chan->seg_list, segment*); - chan->seg_list[chan->cnt-1] = seg; -} - -static channel* -chanSearch (Dt_t* chans, segment* seg) -{ - channel* cp; - chanItem* chani = dtmatch (chans, &seg->comm_coord); - assert (chani); - cp = dtmatch (chani->chans, &seg->p); - assert (cp); - return cp; -} - -static void -assignSegs (int nrtes, route* route_list, maze* mp) -{ - channel* chan; - int i, j; - - for (i=0;iisVert) - chan = chanSearch(mp->vchans, seg); - else - chan = chanSearch(mp->hchans, seg); - insertChan (chan, seg); - } - } -} - -/* addLoop: - * Add two temporary nodes to sgraph corresponding to two ends of a loop at cell cp, i - * represented by dp and sp. - */ -static void -addLoop (sgraph* sg, cell* cp, snode* dp, snode* sp) -{ - int i; - int onTop; - pointf midp = midPt (cp); - - for (i = 0; i < cp->nsides; i++) { - cell* ocp; - pointf p; - double wt; - snode* onp = cp->sides[i]; - - if (onp->isVert) continue; - if (onp->cells[0] == cp) { - onTop = 1; - ocp = onp->cells[1]; - } - else { - onTop = 0; - ocp = onp->cells[0]; - } - p = sidePt (onp, ocp); - wt = fabs(p.x - midp.x) + fabs(p.y - midp.y); - if (onTop) - createSEdge (sg, sp, onp, 0); /* FIX weight */ - else - createSEdge (sg, dp, onp, 0); /* FIX weight */ - } - sg->nnodes += 2; -} - -/* addNodeEdges: - * Add temporary node to sgraph corresponding to cell cp, represented - * by np. - */ -static void -addNodeEdges (sgraph* sg, cell* cp, snode* np) -{ - int i; - pointf midp = midPt (cp); - - for (i = 0; i < cp->nsides; i++) { - snode* onp = cp->sides[i]; - cell* ocp; - pointf p; - double wt; - - if (onp->cells[0] == cp) - ocp = onp->cells[1]; - else - ocp = onp->cells[0]; - p = sidePt (onp, ocp); - wt = fabs(p.x - midp.x) + fabs(p.y - midp.y); - createSEdge (sg, np, onp, 0); /* FIX weight */ - } - sg->nnodes++; -#ifdef DEBUG - np->cells[0] = np->cells[1] = cp; -#endif -} - -#ifdef DEBUG - -#include -static char* bendToStr (bend b) -{ - char* s = NULL; - switch (b) { - case B_NODE : - s = "B_NODE"; - break; - case B_UP : - s = "B_UP"; - break; - case B_LEFT : - s = "B_LEFT"; - break; - case B_DOWN : - s = "B_DOWN"; - break; - case B_RIGHT : - s = "B_RIGHT"; - break; - } - return s; -} - -static void putSeg (FILE* fp, segment* seg) -{ - if (seg->isVert) - fprintf (fp, "((%f,%f),(%f,%f)) %s %s", seg->comm_coord, seg->p.p1, - seg->comm_coord, seg->p.p2, bendToStr (seg->l1), bendToStr (seg->l2)); - else - fprintf (fp, "((%f,%f),(%f,%f)) %s %s", seg->p.p1,seg->comm_coord, - seg->p.p2, seg->comm_coord, bendToStr (seg->l1), bendToStr (seg->l2)); -} - -static void -dumpChanG (channel* cp, int v) -{ - int k; - intitem* ip; - Dt_t* adj; - - if (cp->cnt < 2) return; - fprintf (stderr, "channel %d (%f,%f)\n", v, cp->p.p1, cp->p.p2); - for (k=0;kcnt;k++) { - adj = cp->G->vertices[k].adj_list; - if (dtsize(adj) == 0) continue; - putSeg (stderr, cp->seg_list[k]); - fputs (" ->\n", stderr); - for (ip = (intitem*)dtfirst(adj); ip; ip = (intitem*)dtnext(adj, ip)) { - fputs (" ", stderr); - putSeg (stderr, cp->seg_list[ip->id]); - fputs ("\n", stderr); - } - } -} -#endif - -static void -assignTrackNo (Dt_t* chans) -{ - Dt_t* lp; - Dtlink_t* l1; - Dtlink_t* l2; - channel* cp; - int k; - - for (l1 = dtflatten (chans); l1; l1 = dtlink(chans,l1)) { - lp = ((chanItem*)l1)->chans; - for (l2 = dtflatten (lp); l2; l2 = dtlink(lp,l2)) { - cp = (channel*)l2; - if (cp->cnt) { -#ifdef DEBUG - if (odb_flags & ODB_CHANG) dumpChanG (cp, ((chanItem*)l1)->v); -#endif - top_sort (cp->G); - for (k=0;kcnt;k++) - cp->seg_list[k]->track_no = cp->G->vertices[k].topsort_order+1; - } - } - } -} - -static void -create_graphs(Dt_t* chans) -{ - Dt_t* lp; - Dtlink_t* l1; - Dtlink_t* l2; - channel* cp; - - for (l1 = dtflatten (chans); l1; l1 = dtlink(chans,l1)) { - lp = ((chanItem*)l1)->chans; - for (l2 = dtflatten (lp); l2; l2 = dtlink(lp,l2)) { - cp = (channel*)l2; - cp->G = make_graph (cp->cnt); - } - } -} - -static int -eqEndSeg (bend S1l2, bend S2l2, bend T1, bend T2) -{ - if (((S1l2==T2)&&(S2l2=!T2)) - || ((S1l2==B_NODE)&&(S2l2==T1))) - return(0); - else - return(-1); -} - -static int -overlapSeg (segment* S1, segment* S2, bend T1, bend T2) -{ - if(S1->p.p2p.p2) { - if(S1->l2==T1&&S2->l1==T2) return(-1); - else if(S1->l2==T2&&S2->l1==T1) return(1); - else return(0); - } - else if(S1->p.p2==S2->p.p2) { - if(S2->l1==T2) return eqEndSeg (S1->l2, S2->l2, T1, T2); - else return -1*eqEndSeg (S2->l2, S1->l2, T1, T2); - } - else { /* S1->p.p2>S2->p.p2 */ - if(S2->l1==T2&&S2->l2==T2) return(-1); - else if (S2->l1==T1&&S2->l2==T1) return(1); - else return(0); - } -} - -static int -ellSeg (bend S1l1, bend S1l2, bend T) -{ - if (S1l1 == T) { - if (S1l2== T) return -1; - else return 0; - } - else return 1; -} - -static int -segCmp (segment* S1, segment* S2, bend T1, bend T2) -{ - /* no overlap */ - if((S1->p.p2p.p1)||(S1->p.p1>S2->p.p2)) return(0); - /* left endpoint of S2 inside S1 */ - if(S1->p.p1p.p1&&S2->p.p1p.p2) - return overlapSeg (S1, S2, T1, T2); - /* left endpoint of S1 inside S2 */ - else if(S2->p.p1p.p1&&S1->p.p1p.p2) - return -1*overlapSeg (S2, S1, T1, T2); - else if(S1->p.p1==S2->p.p1) { - if(S1->p.p2==S2->p.p2) { - if((S1->l1==S2->l1)&&(S1->l2==S2->l2)) - return(0); - else if (S2->l1==S2->l2) { - if(S2->l1==T1) return(1); - else if(S2->l1==T2) return(-1); - else if ((S1->l1!=T1)&&(S1->l2!=T1)) return (1); - else if ((S1->l1!=T2)&&(S1->l2!=T2)) return (-1); - else return 0; - } - else if ((S2->l1==T1)&&(S2->l2==T2)) { - if ((S1->l1!=T1)&&(S1->l2==T2)) return 1; - else if ((S1->l1==T1)&&(S1->l2!=T2)) return -1; - else return 0; - } - else if ((S2->l2==T1)&&(S2->l1==T2)) { - if ((S1->l2!=T1)&&(S1->l1==T2)) return 1; - else if ((S1->l2==T1)&&(S1->l1!=T2)) return -1; - else return 0; - } - else if ((S2->l1==B_NODE)&&(S2->l2==T1)) { - return ellSeg (S1->l1, S1->l2, T1); - } - else if ((S2->l1==B_NODE)&&(S2->l2==T2)) { - return -1*ellSeg (S1->l1, S1->l2, T2); - } - else if ((S2->l1==T1)&&(S2->l2==B_NODE)) { - return ellSeg (S1->l2, S1->l1, T1); - } - else { /* ((S2->l1==T2)&&(S2->l2==B_NODE)) */ - return -1*ellSeg (S1->l2, S1->l1, T2); - } - } - else if(S1->p.p2p.p2) { - if(S1->l2==T1) - return eqEndSeg (S2->l1, S1->l1, T1, T2); - else - return -1*eqEndSeg (S2->l1, S1->l1, T1, T2); - } - else { /* S1->p.p2>S2->p.p2 */ - if(S2->l2==T2) - return eqEndSeg (S1->l1, S2->l1, T1, T2); - else - return -1*eqEndSeg (S1->l1, S2->l1, T1, T2); - } - } - else if(S1->p.p2==S2->p.p1) { - if(S1->l2==S2->l1) return(0); - else if(S1->l2==T2) return(1); - else return(-1); - } - else { /* S1->p.p1==S2->p.p2 */ - if(S1->l1==S2->l2) return(0); - else if(S1->l1==T2) return(1); - else return(-1); - } - assert(0); - return 0; -} - -/* Function seg_cmp returns - * -1 if S1 HAS TO BE to the right/below S2 to avoid a crossing, - * 0 if a crossing is unavoidable or there is no crossing at all or - * the segments are parallel, - * 1 if S1 HAS TO BE to the left/above S2 to avoid a crossing - * - * Note: This definition means horizontal segments have track numbers - * increasing as y decreases, while vertical segments have track numbers - * increasing as x increases. It would be good to make this consistent, - * with horizontal track numbers increasing with y. This can be done by - * switching B_DOWN and B_UP in the first call to segCmp. At present, - * though, I'm not sure what assumptions are made in handling parallel - * segments, so we leave the code alone for the time being. - */ -static int -seg_cmp(segment* S1, segment* S2) -{ - if(S1->isVert!=S2->isVert||S1->comm_coord!=S2->comm_coord) { - agerr (AGERR, "incomparable segments !! -- Aborting\n"); - longjmp(jbuf, 1); - } - if(S1->isVert) - return segCmp (S1, S2, B_RIGHT, B_LEFT); - else - return segCmp (S1, S2, B_DOWN, B_UP); -} - -static void -add_edges_in_G(channel* cp) -{ - int x,y; - segment** seg_list = cp->seg_list; - int size = cp->cnt; - rawgraph* G = cp->G; - - for(x=0;x+1chans; - for (l2 = dtflatten (lp); l2; l2 = dtlink(lp,l2)) { - cp = (channel*)l2; - if (cp->cnt) - add_edges_in_G(cp); - } - } -} - -static segment* -next_seg(segment* seg, int dir) -{ - assert(seg); - if (!dir) - return(seg->prev); - else - return(seg->next); -} - -/* propagate_prec propagates the precedence relationship along - * a series of parallel segments on 2 edges - */ -static int -propagate_prec(segment* seg, int prec, int hops, int dir) -{ - int x; - int ans=prec; - segment* next; - segment* current; - - current = seg; - for(x=1;x<=hops;x++) { - next = next_seg(current, dir); - if(!current->isVert) { - if(next->comm_coord==current->p.p1) { - if(current->l1==B_UP) ans *= -1; - } - else { - if(current->l2==B_DOWN) ans *= -1; - } - } - else { - if(next->comm_coord==current->p.p1) { - if(current->l1==B_RIGHT) ans *= -1; - } - else { - if(current->l2==B_LEFT) ans *= -1; - } - } - current = next; - } - return(ans); -} - -static int -is_parallel(segment* s1, segment* s2) -{ - assert (s1->comm_coord==s2->comm_coord); - return ((s1->p.p1==s2->p.p1)&& - (s1->p.p2==s2->p.p2)&& - (s1->l1==s2->l1)&& - (s1->l2==s2->l2)); -} - -/* decide_point returns the number of hops needed in the given directions - * along the 2 edges to get to a deciding point (or NODES) and also puts - * into prec the appropriate dependency (follows same convention as seg_cmp) - */ -static pair -decide_point(segment* si, segment* sj, int dir1, int dir2) -{ - int prec, ans = 0, temp; - pair ret; - segment* np1; - segment* np2; - - while ((np1 = next_seg(si,dir1)) && (np2 = next_seg(sj,dir2)) && - is_parallel(np1, np2)) { - ans++; - si = np1; - sj = np2; - } - if (!np1) - prec = 0; - else if (!np2) - assert(0); /* FIXME */ - else { - temp = seg_cmp(np1, np2); - prec = propagate_prec(np1, temp, ans+1, 1-dir1); - } - - ret.a = ans; - ret.b = prec; - return(ret); -} - -/* sets the edges for a series of parallel segments along two edges starting - * from segment i, segment j. It is assumed that the edge should be from - * segment i to segment j - the dependency is appropriately propagated - */ -static void -set_parallel_edges (segment* seg1, segment* seg2, int dir1, int dir2, int hops, - maze* mp) -{ - int x; - channel* chan; - channel* nchan; - segment* prev1; - segment* prev2; - - if (seg1->isVert) - chan = chanSearch(mp->vchans, seg1); - else - chan = chanSearch(mp->hchans, seg1); - insert_edge(chan->G, seg1->ind_no, seg2->ind_no); - - for (x=1;x<=hops;x++) { - prev1 = next_seg(seg1, dir1); - prev2 = next_seg(seg2, dir2); - if(!seg1->isVert) { - nchan = chanSearch(mp->vchans, prev1); - if(prev1->comm_coord==seg1->p.p1) { - if(seg1->l1==B_UP) { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - else - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - } - else { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - else - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - } - } - else { - if(seg1->l2==B_UP) { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G,prev1->ind_no, prev2->ind_no); - else - insert_edge(nchan->G,prev2->ind_no, prev1->ind_no); - } - else { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - else - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - } - } - } - else { - nchan = chanSearch(mp->hchans, prev1); - if(prev1->comm_coord==seg1->p.p1) { - if(seg1->l1==B_LEFT) { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - else - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - } - else { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - else - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - } - } - else { - if(seg1->l2==B_LEFT) { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - else - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - } - else { - if(edge_exists(chan->G, seg1->ind_no, seg2->ind_no)) - insert_edge(nchan->G, prev1->ind_no, prev2->ind_no); - else - insert_edge(nchan->G, prev2->ind_no, prev1->ind_no); - } - } - } - chan = nchan; - seg1 = prev1; - seg2 = prev2; - } -} - -/* removes the edge between segments after the resolution of a conflict - */ -static void -removeEdge(segment* seg1, segment* seg2, int dir, maze* mp) -{ - segment* ptr1; - segment* ptr2; - channel* chan; - - ptr1 = seg1; - ptr2 = seg2; - while(is_parallel(ptr1, ptr2)) { - ptr1 = next_seg(ptr1, 1); - ptr2 = next_seg(ptr2, dir); - } - if(ptr1->isVert) - chan = chanSearch(mp->vchans, ptr1); - else - chan = chanSearch(mp->hchans, ptr1); - remove_redge (chan->G, ptr1->ind_no, ptr2->ind_no); -} - -static void -addPEdges (channel* cp, maze* mp) -{ - int i,j; - /* dir[1,2] are used to figure out whether we should use prev - * pointers or next pointers -- 0 : decrease, 1 : increase - */ - int dir; - /* number of hops along the route to get to the deciding points */ - pair hops; - /* precedences of the deciding points : same convention as - * seg_cmp function - */ - int prec1, prec2; - pair p; - rawgraph* G = cp->G; - segment** segs = cp->seg_list; - - for(i=0;i+1cnt;i++) { - for(j=i+1;jcnt;j++) { - if (!edge_exists(G,i,j) && !edge_exists(G,j,i)) { - if (is_parallel(segs[i], segs[j])) { - /* get_directions */ - if(segs[i]->prev==0) { - if(segs[j]->prev==0) - dir = 0; - else - dir = 1; - } - else if(segs[j]->prev==0) { - dir = 1; - } - else { - if(segs[i]->prev->comm_coord==segs[j]->prev->comm_coord) - dir = 0; - else - dir = 1; - } - - p = decide_point(segs[i], segs[j], 0, dir); - hops.a = p.a; - prec1 = p.b; - p = decide_point(segs[i], segs[j], 1, 1-dir); - hops.b = p.a; - prec2 = p.b; - - switch(prec1) { - case -1 : - set_parallel_edges (segs[j], segs[i], dir, 0, hops.a, mp); - set_parallel_edges (segs[j], segs[i], 1-dir, 1, hops.b, mp); - if(prec2==1) - removeEdge (segs[i], segs[j], 1-dir, mp); - break; - case 0 : - switch(prec2) { - case -1: - set_parallel_edges (segs[j], segs[i], dir, 0, hops.a, mp); - set_parallel_edges (segs[j], segs[i], 1-dir, 1, hops.b, mp); - break; - case 0 : - set_parallel_edges (segs[i], segs[j], 0, dir, hops.a, mp); - set_parallel_edges (segs[i], segs[j], 1, 1-dir, hops.b, mp); - break; - case 1: - set_parallel_edges (segs[i], segs[j], 0, dir, hops.a, mp); - set_parallel_edges (segs[i], segs[j], 1, 1-dir, hops.b, mp); - break; - } - break; - case 1 : - set_parallel_edges (segs[i], segs[j], 0, dir, hops.a, mp); - set_parallel_edges (segs[i], segs[j], 1, 1-dir, hops.b, mp); - if(prec2==-1) - removeEdge (segs[i], segs[j], 1-dir, mp); - break; - } - } - } - } - } -} - -static void -add_p_edges (Dt_t* chans, maze* mp) -{ - Dt_t* lp; - Dtlink_t* l1; - Dtlink_t* l2; - - for (l1 = dtflatten (chans); l1; l1 = dtlink(chans,l1)) { - lp = ((chanItem*)l1)->chans; - for (l2 = dtflatten (lp); l2; l2 = dtlink(lp,l2)) { - addPEdges ((channel*)l2, mp); - } - } -} - -static void -assignTracks (int nrtes, route* route_list, maze* mp) -{ - /* Create the graphs for each channel */ - create_graphs(mp->hchans); - create_graphs(mp->vchans); - - /* add edges between non-parallel segments */ - add_np_edges(mp->hchans); - add_np_edges(mp->vchans); - - /* add edges between parallel segments + remove appropriate edges */ - add_p_edges(mp->hchans, mp); - add_p_edges(mp->vchans, mp); - - /* Assign the tracks after a top sort */ - assignTrackNo (mp->hchans); - assignTrackNo (mp->vchans); -} - -static double -vtrack (segment* seg, maze* m) -{ - channel* chp = chanSearch(m->vchans, seg); - double f = ((double)seg->track_no)/(chp->cnt+1); - double left = chp->cp->bb.LL.x; - double right = chp->cp->bb.UR.x; - return left + f*(right-left); -} - -static int -htrack (segment* seg, maze* m) -{ - channel* chp = chanSearch(m->hchans, seg); - double f = 1.0 - ((double)seg->track_no)/(chp->cnt+1); - double lo = chp->cp->bb.LL.y; - double hi = chp->cp->bb.UR.y; - return lo + f*(hi-lo); -} - -static pointf -addPoints(pointf p0, pointf p1) -{ - p0.x += p1.x; - p0.y += p1.y; - return p0; -} - -static void -attachOrthoEdges (Agraph_t* g, maze* mp, int n_edges, route* route_list, splineInfo *sinfo, epair_t es[], int doLbls) -{ - int irte = 0; - int i, ipt, npts; - pointf* ispline = 0; - int splsz = 0; - pointf p, p1, q1; - route rte; - segment* seg; - Agedge_t* e; - textlabel_t* lbl; - - for (; irte < n_edges; irte++) { - e = es[irte].e; - p1 = addPoints(ND_coord(agtail(e)), ED_tail_port(e).p); - q1 = addPoints(ND_coord(aghead(e)), ED_head_port(e).p); - - rte = route_list[irte]; - npts = 1 + 3*rte.n; - if (npts > splsz) { - if (ispline) free (ispline); - ispline = N_GNEW(npts, pointf); - splsz = npts; - } - - seg = rte.segs; - if (seg->isVert) { - p.x = vtrack(seg, mp); - p.y = p1.y; - } - else { - p.y = htrack(seg, mp); - p.x = p1.x; - } - ispline[0] = ispline[1] = p; - ipt = 2; - - for (i = 1;iisVert) - p.x = vtrack(seg, mp); - else - p.y = htrack(seg, mp); - ispline[ipt+2] = ispline[ipt+1] = ispline[ipt] = p; - ipt += 3; - } - - if (seg->isVert) { - p.x = vtrack(seg, mp); - p.y = q1.y; - } - else { - p.y = htrack(seg, mp); - p.x = q1.x; - } - ispline[ipt] = ispline[ipt+1] = p; - if (Verbose > 1) - fprintf(stderr, "ortho %s %s\n", agnameof(agtail(e)),agnameof(aghead(e))); - clip_and_install(e, aghead(e), ispline, npts, sinfo); - if (doLbls && (lbl = ED_label(e)) && !lbl->set) - addEdgeLabels(g, e, p1, q1); - } - free(ispline); -} - -static int -edgeLen (Agedge_t* e) -{ - pointf p = ND_coord(agtail(e)); - pointf q = ND_coord(aghead(e)); - return (int)DIST2(p,q); -} - -static int edgecmp(epair_t* e0, epair_t* e1) -{ - return (e0->d - e1->d); -} - -static boolean spline_merge(node_t * n) -{ - return FALSE; -} - -static boolean swap_ends_p(edge_t * e) -{ - return FALSE; -} - -static splineInfo sinfo = { swap_ends_p, spline_merge, 1, 1 }; - -/* orthoEdges: - * For edges without position information, construct an orthogonal routing. - * If doLbls is true, use edge label info when available to guide routing, - * and set label pos for those edges for which this info is not available. - */ -void -orthoEdges (Agraph_t* g, int doLbls) -{ - sgraph* sg; - maze* mp; - int n_edges; - route* route_list; - int i, gstart; - Agnode_t* n; - Agedge_t* e; - snode* sn; - snode* dn; - epair_t* es = N_GNEW(agnedges(g), epair_t); - cell* start; - cell* dest; - PointSet* ps; - textlabel_t* lbl; - - if (Concentrate) - ps = newPS(); - -#ifdef DEBUG - { - char* s = agget(g, "odb"); - char c; - odb_flags = 0; - if (s && (*s != '\0')) { - while ((c = *s++)) { - switch (c) { - case 'c' : - odb_flags |= ODB_CHANG; // emit channel graph - break; - case 'i' : - odb_flags |= (ODB_SGRAPH|ODB_IGRAPH); // emit search graphs - break; - case 'm' : - odb_flags |= ODB_MAZE; // emit maze - break; - case 'r' : - odb_flags |= ODB_ROUTE; // emit routes in maze - break; - case 's' : - odb_flags |= ODB_SGRAPH; // emit search graph - break; - } - } - } - } -#endif - if (doLbls) { - agerr(AGWARN, "Orthogonal edges do not currently handle edge labels. Try using xlabels.\n"); - doLbls = 0; - } - mp = mkMaze (g, doLbls); - sg = mp->sg; -#ifdef DEBUG - if (odb_flags & ODB_SGRAPH) emitSearchGraph (stderr, sg); -#endif - - /* store edges to be routed in es, along with their lengths */ - n_edges = 0; - for (n = agfstnode (g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g,e)) { - if ((Nop == 2) && ED_spl(e)) continue; - if (Concentrate) { - int ti = AGSEQ(agtail(e)); - int hi = AGSEQ(aghead(e)); - if (ti <= hi) { - if (isInPS (ps,ti,hi)) continue; - else addPS (ps,ti,hi); - } - else { - if (isInPS (ps,hi,ti)) continue; - else addPS (ps,hi,ti); - } - } - es[n_edges].e = e; - es[n_edges].d = edgeLen (e); - n_edges++; - } - } - - route_list = N_NEW (n_edges, route); - - qsort((char *)es, n_edges, sizeof(epair_t), (qsort_cmpf) edgecmp); - - gstart = sg->nnodes; - PQgen (sg->nnodes+2); - sn = &sg->nodes[gstart]; - dn = &sg->nodes[gstart+1]; - for (i = 0; i < n_edges; i++) { -#ifdef DEBUG - if ((i > 0) && (odb_flags & ODB_IGRAPH)) emitSearchGraph (stderr, sg); -#endif - e = es[i].e; - start = CELL(agtail(e)); - dest = CELL(aghead(e)); - - if (doLbls && (lbl = ED_label(e)) && lbl->set) { - } - else { - if (start == dest) - addLoop (sg, start, dn, sn); - else { - addNodeEdges (sg, dest, dn); - addNodeEdges (sg, start, sn); - } - if (shortPath (sg, dn, sn)) goto orthofinish; - } - - route_list[i] = convertSPtoRoute(sg, sn, dn); - reset (sg); - } - PQfree (); - - mp->hchans = extractHChans (mp); - mp->vchans = extractVChans (mp); - assignSegs (n_edges, route_list, mp); - if (setjmp(jbuf)) - goto orthofinish; - assignTracks (n_edges, route_list, mp); -#ifdef DEBUG - if (odb_flags & ODB_ROUTE) emitGraph (stderr, mp, n_edges, route_list, es); -#endif - attachOrthoEdges (g, mp, n_edges, route_list, &sinfo, es, doLbls); - -orthofinish: - if (Concentrate) - freePS (ps); - - for (i=0; i < n_edges; i++) - free (route_list[i].segs); - free (route_list); - freeMaze (mp); - free (es); -} - -#ifdef DEBUG -#include -/* #include */ -#define TRANS 10 - -static char* prolog2 = -"%%!PS-Adobe-2.0\n\ -%%%%BoundingBox: (atend)\n\ -/point {\n\ - /Y exch def\n\ - /X exch def\n\ - newpath\n\ - X Y 3 0 360 arc fill\n\ -} def\n\ -/cell {\n\ - /Y exch def\n\ - /X exch def\n\ - /y exch def\n\ - /x exch def\n\ - newpath\n\ - x y moveto\n\ - x Y lineto\n\ - X Y lineto\n\ - X y lineto\n\ - closepath stroke\n\ -} def\n\ -/node {\n\ - /u exch def\n\ - /r exch def\n\ - /d exch def\n\ - /l exch def\n\ - newpath l d moveto\n\ - r d lineto r u lineto l u lineto\n\ - closepath fill\n\ -} def\n\ -\n"; - -static char* epilog2 = -"showpage\n\ -%%%%Trailer\n\ -%%%%BoundingBox: %d %d %d %d\n"; - -static point -coordOf (cell* cp, snode* np) -{ - point p; - if (cp->sides[M_TOP] == np) { - p.x = (cp->bb.LL.x + cp->bb.UR.x)/2; - p.y = cp->bb.UR.y; - } - else if (cp->sides[M_BOTTOM] == np) { - p.x = (cp->bb.LL.x + cp->bb.UR.x)/2; - p.y = cp->bb.LL.y; - } - else if (cp->sides[M_LEFT] == np) { - p.y = (cp->bb.LL.y + cp->bb.UR.y)/2; - p.x = cp->bb.LL.x; - } - else if (cp->sides[M_RIGHT] == np) { - p.y = (cp->bb.LL.y + cp->bb.UR.y)/2; - p.x = cp->bb.UR.x; - } - return p; -} - -static boxf -emitEdge (FILE* fp, Agedge_t* e, route rte, maze* m, int ix, boxf bb) -{ - int i, x, y; - boxf n = CELL(agtail(e))->bb; - segment* seg = rte.segs; - if (seg->isVert) { - x = vtrack(seg, m); - y = (n.UR.y + n.LL.y)/2; - } - else { - y = htrack(seg, m); - x = (n.UR.x + n.LL.x)/2; - } - bb.LL.x = MIN(bb.LL.x, SC*x); - bb.LL.y = MIN(bb.LL.y, SC*y); - bb.UR.x = MAX(bb.UR.x, SC*x); - bb.UR.y = MAX(bb.UR.y, SC*y); - fprintf (fp, "newpath %d %d moveto\n", SC*x, SC*y); - - for (i = 1;iisVert) { - x = vtrack(seg, m); - } - else { - y = htrack(seg, m); - } - bb.LL.x = MIN(bb.LL.x, SC*x); - bb.LL.y = MIN(bb.LL.y, SC*y); - bb.UR.x = MAX(bb.UR.x, SC*x); - bb.UR.y = MAX(bb.UR.y, SC*y); - fprintf (fp, "%d %d lineto\n", SC*x, SC*y); - } - - n = CELL(aghead(e))->bb; - if (seg->isVert) { - x = vtrack(seg, m); - y = (n.UR.y + n.LL.y)/2; - } - else { - y = htrack(seg, m); - x = (n.LL.x + n.UR.x)/2; - } - bb.LL.x = MIN(bb.LL.x, SC*x); - bb.LL.y = MIN(bb.LL.y, SC*y); - bb.UR.x = MAX(bb.UR.x, SC*x); - bb.UR.y = MAX(bb.UR.y, SC*y); - fprintf (fp, "%d %d lineto stroke\n", SC*x, SC*y); - - return bb; -} - -static void -emitSearchGraph (FILE* fp, sgraph* sg) -{ - cell* cp; - snode* np; - sedge* ep; - point p; - int i; - fputs ("graph G {\n", fp); - fputs (" node[shape=point]\n", fp); - for (i = 0; i < sg->nnodes; i++) { - np = sg->nodes+i; - cp = np->cells[0]; - if (cp == np->cells[1]) { - pointf pf = midPt (cp); - p.x = pf.x; - p.y = pf.y; - } - else { - if (IsNode(cp)) cp = np->cells[1]; - p = coordOf (cp, np); - } - fprintf (fp, " %d [pos=\"%d,%d\"]\n", i, p.x, p.y); - } - for (i = 0; i < sg->nedges; i++) { - ep = sg->edges+i; - fprintf (fp, " %d -- %d[len=\"%f\"]\n", ep->v1, ep->v2, ep->weight); - } - fputs ("}\n", fp); -} - -static void -emitGraph (FILE* fp, maze* mp, int n_edges, route* route_list, epair_t es[]) -{ - int i; - boxf bb, absbb; - box bbox; - - absbb.LL.x = absbb.LL.y = MAXDOUBLE; - absbb.UR.x = absbb.UR.y = -MAXDOUBLE; - - fprintf (fp, "%s", prolog2); - fprintf (fp, "%d %d translate\n", TRANS, TRANS); - - fputs ("0 0 1 setrgbcolor\n", fp); - for (i = 0; i < mp->ngcells; i++) { - bb = mp->gcells[i].bb; - fprintf (fp, "%f %f %f %f node\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } - - for (i = 0; i < n_edges; i++) { - absbb = emitEdge (fp, es[i].e, route_list[i], mp, i, absbb); - } - - fputs ("0.8 0.8 0.8 setrgbcolor\n", fp); - for (i = 0; i < mp->ncells; i++) { - bb = mp->cells[i].bb; - fprintf (fp, "%f %f %f %f cell\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - absbb.LL.x = MIN(absbb.LL.x, bb.LL.x); - absbb.LL.y = MIN(absbb.LL.y, bb.LL.y); - absbb.UR.x = MAX(absbb.UR.x, bb.UR.x); - absbb.UR.y = MAX(absbb.UR.y, bb.UR.y); - } - - bbox.LL.x = absbb.LL.x + TRANS; - bbox.LL.y = absbb.LL.y + TRANS; - bbox.UR.x = absbb.UR.x + TRANS; - bbox.UR.y = absbb.UR.y + TRANS; - fprintf (fp, epilog2, bbox.LL.x, bbox.LL.y, bbox.UR.x, bbox.UR.y); -} -#endif diff --git a/internal/ccall/ortho/ortho.h b/internal/ccall/ortho/ortho.h deleted file mode 100644 index 99cd7d7..0000000 --- a/internal/ccall/ortho/ortho.h +++ /dev/null @@ -1,19 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef ORTHO_H -#define ORTHO_H -#include - -void orthoEdges (Agraph_t* g, int useLbls); -#endif diff --git a/internal/ccall/ortho/partition.c b/internal/ccall/ortho/partition.c deleted file mode 100644 index 0899650..0000000 --- a/internal/ccall/ortho/partition.c +++ /dev/null @@ -1,769 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include - -#define NPOINTS 4 /* only rectangles */ -#define TRSIZE(ss) (5*(ss)+1) - -#define TR_FROM_UP 1 /* for traverse-direction */ -#define TR_FROM_DN 2 - -#define SP_SIMPLE_LRUP 1 /* for splitting trapezoids */ -#define SP_SIMPLE_LRDN 2 -#define SP_2UP_2DN 3 -#define SP_2UP_LEFT 4 -#define SP_2UP_RIGHT 5 -#define SP_2DN_LEFT 6 -#define SP_2DN_RIGHT 7 -#define SP_NOSPLIT -1 - -#define DOT(v0, v1) ((v0).x * (v1).x + (v0).y * (v1).y) -#define CROSS_SINE(v0, v1) ((v0).x * (v1).y - (v1).x * (v0).y) -#define LENGTH(v0) (sqrt((v0).x * (v0).x + (v0).y * (v0).y)) - -#ifndef HAVE_SRAND48 -#define srand48 srand -#endif -#ifdef WIN32 -extern double drand48(void); -#endif - -typedef struct { - int vnum; - int next; /* Circularly linked list */ - int prev; /* describing the monotone */ - int marked; /* polygon */ -} monchain_t; - -typedef struct { - pointf pt; - int vnext[4]; /* next vertices for the 4 chains */ - int vpos[4]; /* position of v in the 4 chains */ - int nextfree; -} vertexchain_t; - -static int chain_idx, mon_idx; - /* Table to hold all the monotone */ - /* polygons . Each monotone polygon */ - /* is a circularly linked list */ -static monchain_t* mchain; - /* chain init. information. This */ - /* is used to decide which */ - /* monotone polygon to split if */ - /* there are several other */ - /* polygons touching at the same */ - /* vertex */ -static vertexchain_t* vert; - /* contains position of any vertex in */ - /* the monotone chain for the polygon */ -static int* mon; - -/* return a new mon structure from the table */ -#define newmon() (++mon_idx) -/* return a new chain element from the table */ -#define new_chain_element() (++chain_idx) - -static void -convert (boxf bb, int flip, int ccw, pointf* pts) -{ - pts[0] = bb.LL; - pts[2] = bb.UR; - if (ccw) { - pts[1].x = bb.UR.x; - pts[1].y = bb.LL.y; - pts[3].x = bb.LL.x; - pts[3].y = bb.UR.y; - } - else { - pts[1].x = bb.LL.x; - pts[1].y = bb.UR.y; - pts[3].x = bb.UR.x; - pts[3].y = bb.LL.y; - } - if (flip) { - int i; - for (i = 0; i < NPOINTS; i++) { - double tmp = pts[i].y; - pts[i].y = pts[i].x; - pts[i].x = -tmp; - } - } -} - -static int -store (segment_t* seg, int first, pointf* pts) -{ - int i, last = first + NPOINTS - 1; - int j = 0; - - for (i = first; i <= last; i++, j++) { - if (i == first) { - seg[i].next = first+1; - seg[i].prev = last; - } - else if (i == last) { - seg[i].next = first; - seg[i].prev = last-1; - } - else { - seg[i].next = i+1; - seg[i].prev = i-1; - } - seg[i].is_inserted = FALSE; - seg[seg[i].prev].v1 = seg[i].v0 = pts[j]; - } - return (last+1); -} - -static void -genSegments (cell* cells, int ncells, boxf bb, segment_t* seg, int flip) -{ - int j = 0, i = 1; - pointf pts[4]; - - convert (bb, flip, 1, pts); - i = store (seg, i, pts); - for (j = 0; j < ncells; j++) { - convert (cells[j].bb, flip, 0, pts); - i = store (seg, i, pts); - } -} - -/* Generate a random permutation of the segments 1..n */ -static void -generateRandomOrdering(int n, int* permute) -{ - int i, j, tmp; - for (i = 0; i <= n; i++) permute[i] = i; - - for (i = 1; i <= n; i++) { - j = i + drand48() * (n + 1 - i); - if (j != i) { - tmp = permute[i]; - permute [i] = permute[j]; - permute [j] = tmp; - } - } -} - -/* Function returns TRUE if the trapezoid lies inside the polygon */ -static int -inside_polygon (trap_t *t, segment_t* seg) -{ - int rseg = t->rseg; - - if (t->state == ST_INVALID) - return 0; - - if ((t->lseg <= 0) || (t->rseg <= 0)) - return 0; - - if (((t->u0 <= 0) && (t->u1 <= 0)) || - ((t->d0 <= 0) && (t->d1 <= 0))) /* triangle */ - return (_greater_than(&seg[rseg].v1, &seg[rseg].v0)); - - return 0; -} - -static double -get_angle (pointf *vp0, pointf *vpnext, pointf *vp1) -{ - pointf v0, v1; - - v0.x = vpnext->x - vp0->x; - v0.y = vpnext->y - vp0->y; - - v1.x = vp1->x - vp0->x; - v1.y = vp1->y - vp0->y; - - if (CROSS_SINE(v0, v1) >= 0) /* sine is positive */ - return DOT(v0, v1)/LENGTH(v0)/LENGTH(v1); - else - return (-1.0 * DOT(v0, v1)/LENGTH(v0)/LENGTH(v1) - 2); -} - -/* (v0, v1) is the new diagonal to be added to the polygon. Find which */ -/* chain to use and return the positions of v0 and v1 in p and q */ -static int -get_vertex_positions (int v0, int v1, int *ip, int *iq) -{ - vertexchain_t *vp0, *vp1; - register int i; - double angle, temp; - int tp = 0, tq = 0; - - vp0 = &vert[v0]; - vp1 = &vert[v1]; - - /* p is identified as follows. Scan from (v0, v1) rightwards till */ - /* you hit the first segment starting from v0. That chain is the */ - /* chain of our interest */ - - angle = -4.0; - for (i = 0; i < 4; i++) - { - if (vp0->vnext[i] <= 0) - continue; - if ((temp = get_angle(&vp0->pt, &(vert[vp0->vnext[i]].pt), - &vp1->pt)) > angle) - { - angle = temp; - tp = i; - } - } - - *ip = tp; - - /* Do similar actions for q */ - - angle = -4.0; - for (i = 0; i < 4; i++) - { - if (vp1->vnext[i] <= 0) - continue; - if ((temp = get_angle(&vp1->pt, &(vert[vp1->vnext[i]].pt), - &vp0->pt)) > angle) - { - angle = temp; - tq = i; - } - } - - *iq = tq; - - return 0; -} - -/* v0 and v1 are specified in anti-clockwise order with respect to - * the current monotone polygon mcur. Split the current polygon into - * two polygons using the diagonal (v0, v1) - */ -static int -make_new_monotone_poly (int mcur, int v0, int v1) -{ - int p, q, ip, iq; - int mnew = newmon(); - int i, j, nf0, nf1; - vertexchain_t *vp0, *vp1; - - vp0 = &vert[v0]; - vp1 = &vert[v1]; - - get_vertex_positions(v0, v1, &ip, &iq); - - p = vp0->vpos[ip]; - q = vp1->vpos[iq]; - - /* At this stage, we have got the positions of v0 and v1 in the */ - /* desired chain. Now modify the linked lists */ - - i = new_chain_element(); /* for the new list */ - j = new_chain_element(); - - mchain[i].vnum = v0; - mchain[j].vnum = v1; - - mchain[i].next = mchain[p].next; - mchain[mchain[p].next].prev = i; - mchain[i].prev = j; - mchain[j].next = i; - mchain[j].prev = mchain[q].prev; - mchain[mchain[q].prev].next = j; - - mchain[p].next = q; - mchain[q].prev = p; - - nf0 = vp0->nextfree; - nf1 = vp1->nextfree; - - vp0->vnext[ip] = v1; - - vp0->vpos[nf0] = i; - vp0->vnext[nf0] = mchain[mchain[i].next].vnum; - vp1->vpos[nf1] = j; - vp1->vnext[nf1] = v0; - - vp0->nextfree++; - vp1->nextfree++; - -#ifdef DEBUG - fprintf(stderr, "make_poly: mcur = %d, (v0, v1) = (%d, %d)\n", - mcur, v0, v1); - fprintf(stderr, "next posns = (p, q) = (%d, %d)\n", p, q); -#endif - - mon[mcur] = p; - mon[mnew] = i; - return mnew; -} - -/* recursively visit all the trapezoids */ -static int -traverse_polygon (int* visited, boxf* decomp, int size, segment_t* seg, trap_t* tr, - int mcur, int trnum, int from, int flip, int dir) -{ - trap_t *t = &tr[trnum]; - int mnew; - int v0, v1; - int retval; - int do_switch = FALSE; - - if ((trnum <= 0) || visited[trnum]) - return size; - - visited[trnum] = TRUE; - - if ((t->hi.y > t->lo.y) && - (seg[t->lseg].v0.x == seg[t->lseg].v1.x) && - (seg[t->rseg].v0.x == seg[t->rseg].v1.x)) { - if (flip) { - decomp[size].LL.x = t->lo.y; - decomp[size].LL.y = -seg[t->rseg].v0.x; - decomp[size].UR.x = t->hi.y; - decomp[size].UR.y = -seg[t->lseg].v0.x; - } else { - decomp[size].LL.x = seg[t->lseg].v0.x; - decomp[size].LL.y = t->lo.y; - decomp[size].UR.x = seg[t->rseg].v0.x; - decomp[size].UR.y = t->hi.y; - } - size++; - } - - /* We have much more information available here. */ - /* rseg: goes upwards */ - /* lseg: goes downwards */ - - /* Initially assume that dir = TR_FROM_DN (from the left) */ - /* Switch v0 and v1 if necessary afterwards */ - - - /* special cases for triangles with cusps at the opposite ends. */ - /* take care of this first */ - if ((t->u0 <= 0) && (t->u1 <= 0)) - { - if ((t->d0 > 0) && (t->d1 > 0)) /* downward opening triangle */ - { - v0 = tr[t->d1].lseg; - v1 = t->lseg; - if (from == t->d1) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - } - } - else - { - retval = SP_NOSPLIT; /* Just traverse all neighbours */ - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - } - } - - else if ((t->d0 <= 0) && (t->d1 <= 0)) - { - if ((t->u0 > 0) && (t->u1 > 0)) /* upward opening triangle */ - { - v0 = t->rseg; - v1 = tr[t->u0].rseg; - if (from == t->u1) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - } - } - else - { - retval = SP_NOSPLIT; /* Just traverse all neighbours */ - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - } - } - - else if ((t->u0 > 0) && (t->u1 > 0)) - { - if ((t->d0 > 0) && (t->d1 > 0)) /* downward + upward cusps */ - { - v0 = tr[t->d1].lseg; - v1 = tr[t->u0].rseg; - retval = SP_2UP_2DN; - if (((dir == TR_FROM_DN) && (t->d1 == from)) || - ((dir == TR_FROM_UP) && (t->u1 == from))) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - } - } - else /* only downward cusp */ - { - if (_equal_to(&t->lo, &seg[t->lseg].v1)) - { - v0 = tr[t->u0].rseg; - v1 = seg[t->lseg].next; - - retval = SP_2UP_LEFT; - if ((dir == TR_FROM_UP) && (t->u0 == from)) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - } - } - else - { - v0 = t->rseg; - v1 = tr[t->u0].rseg; - retval = SP_2UP_RIGHT; - if ((dir == TR_FROM_UP) && (t->u1 == from)) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - } - } - } - } - else if ((t->u0 > 0) || (t->u1 > 0)) /* no downward cusp */ - { - if ((t->d0 > 0) && (t->d1 > 0)) /* only upward cusp */ - { - if (_equal_to(&t->hi, &seg[t->lseg].v0)) - { - v0 = tr[t->d1].lseg; - v1 = t->lseg; - retval = SP_2DN_LEFT; - if (!((dir == TR_FROM_DN) && (t->d0 == from))) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - } - } - else - { - v0 = tr[t->d1].lseg; - v1 = seg[t->rseg].next; - - retval = SP_2DN_RIGHT; - if ((dir == TR_FROM_DN) && (t->d1 == from)) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - } - } - } - else /* no cusp */ - { - if (_equal_to(&t->hi, &seg[t->lseg].v0) && - _equal_to(&t->lo, &seg[t->rseg].v0)) - { - v0 = t->rseg; - v1 = t->lseg; - retval = SP_SIMPLE_LRDN; - if (dir == TR_FROM_UP) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - } - } - else if (_equal_to(&t->hi, &seg[t->rseg].v1) && - _equal_to(&t->lo, &seg[t->lseg].v1)) - { - v0 = seg[t->rseg].next; - v1 = seg[t->lseg].next; - - retval = SP_SIMPLE_LRUP; - if (dir == TR_FROM_UP) - { - do_switch = TRUE; - mnew = make_new_monotone_poly(mcur, v1, v0); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->d0, trnum, flip, TR_FROM_UP); - } - else - { - mnew = make_new_monotone_poly(mcur, v0, v1); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mnew, t->u1, trnum, flip, TR_FROM_DN); - } - } - else /* no split possible */ - { - retval = SP_NOSPLIT; - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u0, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d0, trnum, flip, TR_FROM_UP); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->u1, trnum, flip, TR_FROM_DN); - size = traverse_polygon (visited, decomp, size, seg, tr, mcur, t->d1, trnum, flip, TR_FROM_UP); - } - } - } - - return size; -} - -static int -monotonate_trapezoids(int nsegs, segment_t*seg, trap_t* tr, - int flip, boxf* decomp) -{ - int i, size; - int tr_start; - int tr_size = TRSIZE(nsegs); - int* visited = N_NEW(tr_size,int); - - mchain = N_NEW(tr_size, monchain_t); - vert = N_NEW(nsegs+1,vertexchain_t); - mon = N_NEW(nsegs, int); - - /* First locate a trapezoid which lies inside the polygon */ - /* and which is triangular */ - for (i = 0; i < TRSIZE(nsegs); i++) - if (inside_polygon(&tr[i], seg)) break; - tr_start = i; - - /* Initialise the mon data-structure and start spanning all the */ - /* trapezoids within the polygon */ - - for (i = 1; i <= nsegs; i++) { - mchain[i].prev = seg[i].prev; - mchain[i].next = seg[i].next; - mchain[i].vnum = i; - vert[i].pt = seg[i].v0; - vert[i].vnext[0] = seg[i].next; /* next vertex */ - vert[i].vpos[0] = i; /* locn. of next vertex */ - vert[i].nextfree = 1; - } - - chain_idx = nsegs; - mon_idx = 0; - mon[0] = 1; /* position of any vertex in the first */ - /* chain */ - - /* traverse the polygon */ - if (tr[tr_start].u0 > 0) - size = traverse_polygon (visited, decomp, 0, seg, tr, 0, tr_start, tr[tr_start].u0, flip, TR_FROM_UP); - else if (tr[tr_start].d0 > 0) - size = traverse_polygon (visited, decomp, 0, seg, tr, 0, tr_start, tr[tr_start].d0, flip, TR_FROM_DN); - else - size = 0; - - free (visited); - free (mchain); - free (vert); - free (mon); - - /* return the number of rects created */ - return size; -} - -static int -rectIntersect (boxf *d, const boxf *r0, const boxf *r1) -{ - double t; - - t = (r0->LL.x > r1->LL.x) ? r0->LL.x : r1->LL.x; - d->UR.x = (r0->UR.x < r1->UR.x) ? r0->UR.x : r1->UR.x; - d->LL.x = t; - - t = (r0->LL.y > r1->LL.y) ? r0->LL.y : r1->LL.y; - d->UR.y = (r0->UR.y < r1->UR.y) ? r0->UR.y : r1->UR.y; - d->LL.y = t; - - if ((d->LL.x >= d->UR.x) || - (d->LL.y >= d->UR.y)) - return 0; - - return 1; -} - -#if _DEBUG -static void -dumpTrap (trap_t* tr, int n) -{ - int i; - for (i = 1; i <= n; i++) { - tr++; - fprintf (stderr, "%d : %d %d (%f,%f) (%f,%f) %d %d %d %d\n", i, - tr->lseg, tr->rseg, tr->hi.x, tr->hi.y, tr->lo.x, tr->lo.y, - tr->u0, tr->u1, tr->d0, tr->d1); - fprintf (stderr, " %d %d %d %d\n", tr->sink, tr->usave, - tr->uside, tr->state); - } - fprintf (stderr, "====\n"); -} - -static void -dumpSegs (segment_t* sg, int n) -{ - int i; - for (i = 1; i <= n; i++) { - sg++; - fprintf (stderr, "%d : (%f,%f) (%f,%f) %d %d %d %d %d\n", i, - sg->v0.x, sg->v0.y, sg->v1.x, sg->v1.y, - sg->is_inserted, sg->root0, sg->root1, sg->next, sg->prev); - } - fprintf (stderr, "====\n"); -} -#endif - -boxf* -partition (cell* cells, int ncells, int* nrects, boxf bb) -{ - int nsegs = 4*(ncells+1); - segment_t* segs = N_GNEW(nsegs+1, segment_t); - int* permute = N_NEW(nsegs+1, int); - int hd_size, vd_size; - int i, j, cnt = 0; - boxf* rs; - int ntraps = TRSIZE(nsegs); - trap_t* trs = N_GNEW(ntraps, trap_t); - boxf* hor_decomp = N_NEW(ntraps, boxf); - boxf* vert_decomp = N_NEW(ntraps, boxf); - int nt; - - /* fprintf (stderr, "cells = %d segs = %d traps = %d\n", ncells, nsegs, ntraps); */ - genSegments (cells, ncells, bb, segs, 0); -#if 0 -fprintf (stderr, "%d\n\n", ncells+1); -for (i = 1; i<= nsegs; i++) { - if (i%4 == 1) fprintf(stderr, "4\n"); - fprintf (stderr, "%f %f\n", segs[i].v0.x, segs[i].v0.y); - if (i%4 == 0) fprintf(stderr, "\n"); -} -#endif - srand48(173); - generateRandomOrdering (nsegs, permute); - nt = construct_trapezoids(nsegs, segs, permute, ntraps, trs); - /* fprintf (stderr, "hor traps = %d\n", nt); */ - hd_size = monotonate_trapezoids (nsegs, segs, trs, 0, hor_decomp); - - genSegments (cells, ncells, bb, segs, 1); - generateRandomOrdering (nsegs, permute); - nt = construct_trapezoids(nsegs, segs, permute, ntraps, trs); - /* fprintf (stderr, "ver traps = %d\n", nt); */ - vd_size = monotonate_trapezoids (nsegs, segs, trs, 1, vert_decomp); - - rs = N_NEW (hd_size*vd_size, boxf); - for (i=0; i - -extern boxf* partition (cell*, int, int*, boxf); - -#endif diff --git a/internal/ccall/ortho/rawgraph.c b/internal/ccall/ortho/rawgraph.c deleted file mode 100644 index ba3f7bc..0000000 --- a/internal/ccall/ortho/rawgraph.c +++ /dev/null @@ -1,163 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - /* Implements graph.h */ - -#include "config.h" - -#include "rawgraph.h" -#include "memory.h" -#include "intset.h" - -#define UNSCANNED 0 -#define SCANNING 1 -#define SCANNED 2 - -rawgraph* -make_graph(int n) -{ - int i; - rawgraph* g = NEW(rawgraph); - g->nvs = n; - g->vertices = N_NEW(n, vertex); - for(i=0;ivertices[i].adj_list = openIntSet (); - g->vertices[i].color = UNSCANNED; - } - return g; -} - -void -free_graph(rawgraph* g) -{ - int i; - for(i=0;invs;i++) - dtclose(g->vertices[i].adj_list); - free (g->vertices); - free (g); -} - -void -insert_edge(rawgraph* g, int v1, int v2) -{ - intitem obj; - - obj.id = v2; - dtinsert(g->vertices[v1].adj_list,&obj); -} - -void -remove_redge(rawgraph* g, int v1, int v2) -{ - intitem obj; - obj.id = v2; - dtdelete (g->vertices[v1].adj_list, &obj); - obj.id = v1; - dtdelete (g->vertices[v2].adj_list, &obj); -} - -int -edge_exists(rawgraph* g, int v1, int v2) -{ - return (dtmatch (g->vertices[v1].adj_list, &v2) != 0); -} - -typedef struct { - int top; - int* vals; -} stack; - -static stack* -mkStack (int i) -{ - stack* sp = NEW(stack); - sp->vals = N_NEW(i,int); - sp->top = -1; - return sp; -} - -static void -freeStack (stack* s) -{ - free (s->vals); - free (s); -} - -static void -pushStack (stack* s, int i) -{ - s->top++; - s->vals[s->top] = i; -} - -static int -popStack (stack* s) -{ - int v; - - if (s->top == -1) return -1; - v = s->vals[s->top]; - s->top--; - return v; -} - -static int -DFS_visit(rawgraph* g, int v, int time, stack* sp) -{ - Dt_t* adj; - Dtlink_t* link; - int id; - vertex* vp; - - vp = g->vertices + v; - vp->color = SCANNING; - /* g->vertices[v].d = time; */ - adj = vp->adj_list; - time = time + 1; - - for(link = dtflatten (adj); link; link = dtlink(adj,link)) { - id = ((intitem*)dtobj(adj,link))->id; - if(g->vertices[id].color == UNSCANNED) - time = DFS_visit(g, id, time, sp); - } - vp->color = SCANNED; - /* g->vertices[v].f = time; */ - pushStack (sp, v); - return (time + 1); -} - -void -top_sort(rawgraph* g) -{ - int i, v; - int time = 0; - int count = 0; - stack* sp; - - if (g->nvs == 0) return; - if (g->nvs == 1) { - g->vertices[0].topsort_order = count; - return; - } - - sp = mkStack (g->nvs); - for(i=0;invs;i++) { - if(g->vertices[i].color == UNSCANNED) - time = DFS_visit(g, i, time, sp); - } - while((v = popStack(sp)) >= 0) { - g->vertices[v].topsort_order = count; - count++; - } - freeStack (sp); -} diff --git a/internal/ccall/ortho/rawgraph.h b/internal/ccall/ortho/rawgraph.h deleted file mode 100644 index 6ff6a41..0000000 --- a/internal/ccall/ortho/rawgraph.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef RAWGRAPH_H -#define RAWGRAPH_H - -#include - -typedef struct { - int color; - int topsort_order; - Dt_t* adj_list; /* adj_list */ -} vertex; - -typedef struct { - int nvs; - vertex* vertices; -} rawgraph; - -extern rawgraph* make_graph(int n); /* makes a graph wih n vertices, 0 edges */ -extern void free_graph(rawgraph*); - /* inserts edge FROM v1 to v2 */ -extern void insert_edge(rawgraph*, int v1, int v2); - /* removes any edge between v1 to v2 -- irrespective of direction */ -extern void remove_redge(rawgraph*, int v1, int v2); - /* tests if there is an edge FROM v1 TO v2 */ -extern int edge_exists(rawgraph*, int v1, int v2); - /* topologically sorts the directed graph */ -extern void top_sort(rawgraph*); - -#endif diff --git a/internal/ccall/ortho/sgraph.c b/internal/ccall/ortho/sgraph.c deleted file mode 100644 index 490b949..0000000 --- a/internal/ccall/ortho/sgraph.c +++ /dev/null @@ -1,271 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include -#include "memory.h" -#include "sgraph.h" -#include "fPQ.h" - -#if 0 -/* Max. number of maze segments around a node */ -static int MaxNodeBoundary = 100; - -typedef struct { - int left, right, up, down; -} irect; - -/* nodes in the search graph correspond to line segments in the - * grid formed by n_hlines horizontal lines and n_vlines vertical lines. - * The vertical segments are enumerated first, top to bottom, left to right. - * Then the horizontal segments left to right, top to bottom. For example, - * with an array of 4 vertical and 3 horizontal lines, we have - * - * |--14--|--15--|--16--| - * 1 3 5 7 - * |--11--|--12--|--13--| - * 0 2 4 6 - * |-- 8--|-- 9--|--10--| - */ -static irect -get_indices(orthograph* OG,int i, int j) -{ - irect r; - int hl = OG->n_hlines-1; - int vl = OG->n_vlines-1; - r.left = i*hl + j; - r.right = r.left + hl; - r.down = (vl+1)*hl + j*vl + i; - r.up = r.down + vl; - return r; -} - -static irect -find_boundary(orthograph* G, int n) -{ - rect R = G->Nodes[n]; - irect r; - int i; - - for (i = 0; i < G->n_vlines; i++) { - if (R.left == G->v_lines[i]) { - r.left = i; - break; - } - } - for (; i < G->n_vlines; i++) { - if (R.right == G->v_lines[i]) { - r.right = i; - break; - } - } - for (i = 0; i < G->n_hlines; i++) { - if (R.down == G->h_lines[i]) { - r.down = i; - break; - } - } - for (; i < G->n_hlines; i++) { - if (R.up == G->h_lines[i]) { - r.up = i; - break; - } - } - return r; -} -#endif - -void -gsave (sgraph* G) -{ - int i; - G->save_nnodes = G->nnodes; - G->save_nedges = G->nedges; - for (i = 0; i < G->nnodes; i++) - G->nodes[i].save_n_adj = G->nodes[i].n_adj; -} - -void -reset(sgraph* G) -{ - int i; - G->nnodes = G->save_nnodes; - G->nedges = G->save_nedges; - for (i = 0; i < G->nnodes; i++) - G->nodes[i].n_adj = G->nodes[i].save_n_adj; - for (; i < G->nnodes+2; i++) - G->nodes[i].n_adj = 0; -} - -void -initSEdges (sgraph* g, int maxdeg) -{ - int i; - int* adj = N_NEW (6*g->nnodes + 2*maxdeg, int); - g->edges = N_NEW (3*g->nnodes + maxdeg, sedge); - for (i = 0; i < g->nnodes; i++) { - g->nodes[i].adj_edge_list = adj; - adj += 6; - } - for (; i < g->nnodes+2; i++) { - g->nodes[i].adj_edge_list = adj; - adj += maxdeg; - } -} - -sgraph* -createSGraph (int nnodes) -{ - sgraph* g = NEW(sgraph); - - /* create the nodes vector in the search graph */ - g->nnodes = 0; - g->nodes = N_NEW(nnodes, snode); - return g; -} - -snode* -createSNode (sgraph* g) -{ - snode* np = g->nodes+g->nnodes; - np->index = g->nnodes; - g->nnodes++; - return np; -} - -static void -addEdgeToNode (snode* np, sedge* e, int idx) -{ - np->adj_edge_list[np->n_adj] = idx; - np->n_adj++; -} - -sedge* -createSEdge (sgraph* g, snode* v1, snode* v2, double wt) -{ - sedge* e; - int idx = g->nedges++; - - e = g->edges + idx; - e->v1 = v1->index; - e->v2 = v2->index; - e->weight = wt; - e->cnt = 0; - - addEdgeToNode (v1, e, idx); - addEdgeToNode (v2, e, idx); - - return e; -} - -void -freeSGraph (sgraph* g) -{ - free (g->nodes[0].adj_edge_list); - free (g->nodes); - free (g->edges); - free (g); -} - -#include "fPQ.h" - -/* shortest path: - * Constructs the path of least weight between from and to. - * - * Assumes graph, node and edge type, and that nodes - * have associated values N_VAL, N_IDX, and N_DAD, the first two - * being ints, the last being a node*. Edges have a E_WT function - * to specify the edge length or weight. - * - * Assumes there are functions: - * agnnodes: graph -> int number of nodes in the graph - * agfstnode, agnxtnode : iterators over the nodes in the graph - * agfstedge, agnxtedge : iterators over the edges attached to a node - * adjacentNode : given an edge e and an endpoint n of e, returns the - * other endpoint. - * - * The path is given by - * to, N_DAD(to), N_DAD(N_DAD(to)), ..., from - */ - -#define UNSEEN INT_MIN - -static snode* -adjacentNode(sgraph* g, sedge* e, snode* n) -{ - if (e->v1==n->index) - return (&(g->nodes[e->v2])); - else - return (&(g->nodes[e->v1])); -} - -int -shortPath (sgraph* g, snode* from, snode* to) -{ - snode* n; - sedge* e; - snode* adjn; - int d; - int x, y; - - for (x = 0; xnnodes; x++) { - snode* temp; - temp = &(g->nodes[x]); - N_VAL(temp) = UNSEEN; - } - - PQinit(); - if (PQ_insert (from)) return 1; - N_DAD(from) = NULL; - N_VAL(from) = 0; - - while ((n = PQremove())) { -#ifdef DEBUG - fprintf (stderr, "process %d\n", n->index); -#endif - N_VAL(n) *= -1; - if (n == to) break; - for (y=0; yn_adj; y++) { - e = &(g->edges[n->adj_edge_list[y]]); - adjn = adjacentNode(g, e, n); - if (N_VAL(adjn) < 0) { - d = -(N_VAL(n) + E_WT(e)); - if (N_VAL(adjn) == UNSEEN) { -#ifdef DEBUG - fprintf (stderr, "new %d (%d)\n", adjn->index, -d); -#endif - N_VAL(adjn) = d; - if (PQ_insert(adjn)) return 1; - N_DAD(adjn) = n; - N_EDGE(adjn) = e; - } - else { - if (N_VAL(adjn) < d) { -#ifdef DEBUG - fprintf (stderr, "adjust %d (%d)\n", adjn->index, -d); -#endif - PQupdate(adjn, d); - N_DAD(adjn) = n; - N_EDGE(adjn) = e; - } - } - } - } - } - - /* PQfree(); */ - return 0; -} - diff --git a/internal/ccall/ortho/sgraph.h b/internal/ccall/ortho/sgraph.h deleted file mode 100644 index 69a35a5..0000000 --- a/internal/ccall/ortho/sgraph.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef SEARCH_G_H -#define SEARCH_G_H - -#include "structures.h" - -typedef struct snode snode; -typedef struct sedge sedge; - -struct snode { - int n_val, n_idx; - snode* n_dad; - sedge* n_edge; - short n_adj; - short save_n_adj; - struct cell* cells[2]; - - /* edges incident on this node - * -- stored as indices of the edges array in the graph - */ - int* adj_edge_list; - int index; - boolean isVert; /* true if node corresponds to vertical segment */ -}; - -struct sedge { - double weight; /* weight of edge */ - int cnt; /* paths using edge */ - /* end-points of the edge - * -- stored as indices of the nodes vector in the graph - */ - int v1, v2; -}; - -typedef struct { - int nnodes, nedges; - int save_nnodes, save_nedges; - snode* nodes; - sedge* edges; -} sgraph; - -extern void reset(sgraph*); -extern void gsave(sgraph*); -extern sgraph* createSGraph(int); -extern void freeSGraph (sgraph*); -extern void initSEdges (sgraph* g, int maxdeg); -extern int shortPath (sgraph* g, snode* from, snode* to); -extern snode* createSNode (sgraph*); -extern sedge* createSEdge (sgraph* g, snode* v0, snode* v1, double wt); - -#endif diff --git a/internal/ccall/ortho/structures.h b/internal/ccall/ortho/structures.h deleted file mode 100644 index 3df5ebb..0000000 --- a/internal/ccall/ortho/structures.h +++ /dev/null @@ -1,94 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef STRUCTURES_H -#define STRUCTURES_H - -#include "types.h" -#include "cgraph.h" -#include "rawgraph.h" - -typedef struct { - double p1, p2; -} paird; - -typedef struct { - int a,b; -} pair; - -typedef struct { - pair t1, t2; -} pair2; - -typedef enum {B_NODE, B_UP, B_LEFT, B_DOWN, B_RIGHT} bend; - -/* Example : segment connecting maze point (3,2) - * and (3,8) has isVert = 1, common coordinate = 3, p1 = 2, p2 = 8 - */ -typedef struct segment { - boolean isVert; - boolean flipped; - double comm_coord; /* the common coordinate */ - paird p; /* end points */ - bend l1, l2; - int ind_no; /* index number of this segment in its channel */ - int track_no; /* track number assigned in the channel */ - struct segment* prev; - struct segment* next; -} segment; - -typedef struct { - int n; - segment* segs; -} route; - -typedef struct { - Dtlink_t link; - paird p; /* extrema of channel */ - int cnt; /* number of segments */ - segment** seg_list; /* array of segment pointers */ - rawgraph* G; - struct cell* cp; -} channel; - -#if 0 -typedef struct { - int i1, i2, j; - int cnt; - int* seg_list; /* list of indices of the segment list */ - - rawgraph* G; -} hor_channel; - -typedef struct { - hor_channel* hs; - int cnt; -} vhor_channel; - -typedef struct { - int i, j1, j2; - int cnt; - int* seg_list; /* list of indices of the segment list */ - - rawgraph* G; -} vert_channel; - -typedef struct { - vert_channel* vs; - int cnt; -} vvert_channel; -#endif - -#define N_DAD(n) (n)->n_dad - -#endif diff --git a/internal/ccall/ortho/trap.h b/internal/ccall/ortho/trap.h deleted file mode 100644 index 4432727..0000000 --- a/internal/ccall/ortho/trap.h +++ /dev/null @@ -1,58 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef TRAP_H -#define TRAP_H - -/* Segment attributes */ - -typedef struct { - pointf v0, v1; /* two endpoints */ - int is_inserted; /* inserted in trapezoidation yet ? */ - int root0, root1; /* root nodes in Q */ - int next; /* Next logical segment */ - int prev; /* Previous segment */ -} segment_t; - - -/* Trapezoid attributes */ - -typedef struct { - int lseg, rseg; /* two adjoining segments */ - pointf hi, lo; /* max/min y-values */ - int u0, u1; - int d0, d1; - int sink; /* pointer to corresponding in Q */ - int usave, uside; /* I forgot what this means */ - int state; -} trap_t; - -#define ST_VALID 1 /* for trapezium state */ -#define ST_INVALID 2 - -#define C_EPS 1.0e-7 /* tolerance value: Used for making */ - /* all decisions about collinearity or */ - /* left/right of segment. Decrease */ - /* this value if the input points are */ - /* spaced very close together */ -#define FP_EQUAL(s, t) (fabs(s - t) <= C_EPS) - -#define _equal_to(v0,v1) \ - (FP_EQUAL((v0)->y, (v1)->y) && FP_EQUAL((v0)->x, (v1)->x)) - -#define _greater_than(v0, v1) \ - (((v0)->y > (v1)->y + C_EPS) ? TRUE : (((v0)->y < (v1)->y - C_EPS) ? FALSE : ((v0)->x > (v1)->x))) - -extern int construct_trapezoids(int, segment_t*, int*, int, trap_t*); - -#endif diff --git a/internal/ccall/ortho/trapezoid.c b/internal/ccall/ortho/trapezoid.c deleted file mode 100644 index a7d9435..0000000 --- a/internal/ccall/ortho/trapezoid.c +++ /dev/null @@ -1,1082 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include -#include -#include -#ifndef __USE_ISOC99 -#define __USE_ISOC99 -#endif -#include -#include -#include -#include -#include - -#ifndef HAVE_LOG2 -#define log2(x) (log(x)/log(2)) -#endif - -/* Node types */ - -#define T_X 1 -#define T_Y 2 -#define T_SINK 3 - -#define FIRSTPT 1 /* checking whether pt. is inserted */ -#define LASTPT 2 - -#define S_LEFT 1 /* for merge-direction */ -#define S_RIGHT 2 - -#define INF 1<<30 - -#define CROSS(v0, v1, v2) (((v1).x - (v0).x)*((v2).y - (v0).y) - \ - ((v1).y - (v0).y)*((v2).x - (v0).x)) - -typedef struct { - int nodetype; /* Y-node or S-node */ - int segnum; - pointf yval; - int trnum; - int parent; /* doubly linked DAG */ - int left, right; /* children */ -} qnode_t; - -/* static int chain_idx, op_idx, mon_idx; */ -static int q_idx; -static int tr_idx; -static int QSIZE; -static int TRSIZE; - -/* Return a new node to be added into the query tree */ -static int newnode(void) -{ - if (q_idx < QSIZE) - return q_idx++; - else { - fprintf(stderr, "newnode: Query-table overflow\n"); - assert(0); - return -1; - } -} - -/* Return a free trapezoid */ -static int newtrap(trap_t* tr) -{ - if (tr_idx < TRSIZE) { - tr[tr_idx].lseg = -1; - tr[tr_idx].rseg = -1; - tr[tr_idx].state = ST_VALID; - return tr_idx++; - } - else { - fprintf(stderr, "newtrap: Trapezoid-table overflow %d\n", tr_idx); - assert(0); - return -1; - } -} - -/* Return the maximum of the two points into the yval structure */ -static int _max (pointf *yval, pointf *v0, pointf *v1) -{ - if (v0->y > v1->y + C_EPS) - *yval = *v0; - else if (FP_EQUAL(v0->y, v1->y)) - { - if (v0->x > v1->x + C_EPS) - *yval = *v0; - else - *yval = *v1; - } - else - *yval = *v1; - - return 0; -} - -/* Return the minimum of the two points into the yval structure */ -static int _min (pointf *yval, pointf *v0, pointf *v1) -{ - if (v0->y < v1->y - C_EPS) - *yval = *v0; - else if (FP_EQUAL(v0->y, v1->y)) - { - if (v0->x < v1->x) - *yval = *v0; - else - *yval = *v1; - } - else - *yval = *v1; - - return 0; -} - -static int _greater_than_equal_to (pointf *v0, pointf *v1) -{ - if (v0->y > v1->y + C_EPS) - return TRUE; - else if (v0->y < v1->y - C_EPS) - return FALSE; - else - return (v0->x >= v1->x); -} - -static int _less_than (pointf *v0, pointf *v1) -{ - if (v0->y < v1->y - C_EPS) - return TRUE; - else if (v0->y > v1->y + C_EPS) - return FALSE; - else - return (v0->x < v1->x); -} - -/* Initilialise the query structure (Q) and the trapezoid table (T) - * when the first segment is added to start the trapezoidation. The - * query-tree starts out with 4 trapezoids, one S-node and 2 Y-nodes - * - * 4 - * ----------------------------------- - * \ - * 1 \ 2 - * \ - * ----------------------------------- - * 3 - */ - -static int -init_query_structure(int segnum, segment_t* seg, trap_t* tr, qnode_t* qs) -{ - int i1, i2, i3, i4, i5, i6, i7, root; - int t1, t2, t3, t4; - segment_t *s = &seg[segnum]; - - i1 = newnode(); - qs[i1].nodetype = T_Y; - _max(&qs[i1].yval, &s->v0, &s->v1); /* root */ - root = i1; - - qs[i1].right = i2 = newnode(); - qs[i2].nodetype = T_SINK; - qs[i2].parent = i1; - - qs[i1].left = i3 = newnode(); - qs[i3].nodetype = T_Y; - _min(&qs[i3].yval, &s->v0, &s->v1); /* root */ - qs[i3].parent = i1; - - qs[i3].left = i4 = newnode(); - qs[i4].nodetype = T_SINK; - qs[i4].parent = i3; - - qs[i3].right = i5 = newnode(); - qs[i5].nodetype = T_X; - qs[i5].segnum = segnum; - qs[i5].parent = i3; - - qs[i5].left = i6 = newnode(); - qs[i6].nodetype = T_SINK; - qs[i6].parent = i5; - - qs[i5].right = i7 = newnode(); - qs[i7].nodetype = T_SINK; - qs[i7].parent = i5; - - t1 = newtrap(tr); /* middle left */ - t2 = newtrap(tr); /* middle right */ - t3 = newtrap(tr); /* bottom-most */ - t4 = newtrap(tr); /* topmost */ - - tr[t1].hi = tr[t2].hi = tr[t4].lo = qs[i1].yval; - tr[t1].lo = tr[t2].lo = tr[t3].hi = qs[i3].yval; - tr[t4].hi.y = (double) (INF); - tr[t4].hi.x = (double) (INF); - tr[t3].lo.y = (double) -1* (INF); - tr[t3].lo.x = (double) -1* (INF); - tr[t1].rseg = tr[t2].lseg = segnum; - tr[t1].u0 = tr[t2].u0 = t4; - tr[t1].d0 = tr[t2].d0 = t3; - tr[t4].d0 = tr[t3].u0 = t1; - tr[t4].d1 = tr[t3].u1 = t2; - - tr[t1].sink = i6; - tr[t2].sink = i7; - tr[t3].sink = i4; - tr[t4].sink = i2; - - tr[t1].state = tr[t2].state = ST_VALID; - tr[t3].state = tr[t4].state = ST_VALID; - - qs[i2].trnum = t4; - qs[i4].trnum = t3; - qs[i6].trnum = t1; - qs[i7].trnum = t2; - - s->is_inserted = TRUE; - return root; -} - -/* Retun TRUE if the vertex v is to the left of line segment no. - * segnum. Takes care of the degenerate cases when both the vertices - * have the same y--cood, etc. - */ -static int -is_left_of (int segnum, segment_t* seg, pointf *v) -{ - segment_t *s = &seg[segnum]; - double area; - - if (_greater_than(&s->v1, &s->v0)) /* seg. going upwards */ - { - if (FP_EQUAL(s->v1.y, v->y)) - { - if (v->x < s->v1.x) - area = 1.0; - else - area = -1.0; - } - else if (FP_EQUAL(s->v0.y, v->y)) - { - if (v->x < s->v0.x) - area = 1.0; - else - area = -1.0; - } - else - area = CROSS(s->v0, s->v1, (*v)); - } - else /* v0 > v1 */ - { - if (FP_EQUAL(s->v1.y, v->y)) - { - if (v->x < s->v1.x) - area = 1.0; - else - area = -1.0; - } - else if (FP_EQUAL(s->v0.y, v->y)) - { - if (v->x < s->v0.x) - area = 1.0; - else - area = -1.0; - } - else - area = CROSS(s->v1, s->v0, (*v)); - } - - if (area > 0.0) - return TRUE; - else - return FALSE; -} - -/* Returns true if the corresponding endpoint of the given segment is */ -/* already inserted into the segment tree. Use the simple test of */ -/* whether the segment which shares this endpoint is already inserted */ -static int inserted (int segnum, segment_t* seg, int whichpt) -{ - if (whichpt == FIRSTPT) - return seg[seg[segnum].prev].is_inserted; - else - return seg[seg[segnum].next].is_inserted; -} - -/* This is query routine which determines which trapezoid does the - * point v lie in. The return value is the trapezoid number. - */ -static int -locate_endpoint (pointf *v, pointf *vo, int r, segment_t* seg, qnode_t* qs) -{ - qnode_t *rptr = &qs[r]; - - switch (rptr->nodetype) { - case T_SINK: - return rptr->trnum; - - case T_Y: - if (_greater_than(v, &rptr->yval)) /* above */ - return locate_endpoint(v, vo, rptr->right, seg, qs); - else if (_equal_to(v, &rptr->yval)) /* the point is already */ - { /* inserted. */ - if (_greater_than(vo, &rptr->yval)) /* above */ - return locate_endpoint(v, vo, rptr->right, seg, qs); - else - return locate_endpoint(v, vo, rptr->left, seg, qs); /* below */ - } - else - return locate_endpoint(v, vo, rptr->left, seg, qs); /* below */ - - case T_X: - if (_equal_to(v, &seg[rptr->segnum].v0) || - _equal_to(v, &seg[rptr->segnum].v1)) - { - if (FP_EQUAL(v->y, vo->y)) /* horizontal segment */ - { - if (vo->x < v->x) - return locate_endpoint(v, vo, rptr->left, seg, qs); /* left */ - else - return locate_endpoint(v, vo, rptr->right, seg, qs); /* right */ - } - - else if (is_left_of(rptr->segnum, seg, vo)) - return locate_endpoint(v, vo, rptr->left, seg, qs); /* left */ - else - return locate_endpoint(v, vo, rptr->right, seg, qs); /* right */ - } - else if (is_left_of(rptr->segnum, seg, v)) - return locate_endpoint(v, vo, rptr->left, seg, qs); /* left */ - else - return locate_endpoint(v, vo, rptr->right, seg, qs); /* right */ - - default: - fprintf(stderr, "unexpected case in locate_endpoint\n"); - assert (0); - break; - } - return 1; /* stop warning */ -} - -/* Thread in the segment into the existing trapezoidation. The - * limiting trapezoids are given by tfirst and tlast (which are the - * trapezoids containing the two endpoints of the segment. Merges all - * possible trapezoids which flank this segment and have been recently - * divided because of its insertion - */ -static void -merge_trapezoids (int segnum, int tfirst, int tlast, int side, trap_t* tr, - qnode_t* qs) -{ - int t, tnext, cond; - int ptnext; - - /* First merge polys on the LHS */ - t = tfirst; - while ((t > 0) && _greater_than_equal_to(&tr[t].lo, &tr[tlast].lo)) - { - if (side == S_LEFT) - cond = ((((tnext = tr[t].d0) > 0) && (tr[tnext].rseg == segnum)) || - (((tnext = tr[t].d1) > 0) && (tr[tnext].rseg == segnum))); - else - cond = ((((tnext = tr[t].d0) > 0) && (tr[tnext].lseg == segnum)) || - (((tnext = tr[t].d1) > 0) && (tr[tnext].lseg == segnum))); - - if (cond) - { - if ((tr[t].lseg == tr[tnext].lseg) && - (tr[t].rseg == tr[tnext].rseg)) /* good neighbours */ - { /* merge them */ - /* Use the upper node as the new node i.e. t */ - - ptnext = qs[tr[tnext].sink].parent; - - if (qs[ptnext].left == tr[tnext].sink) - qs[ptnext].left = tr[t].sink; - else - qs[ptnext].right = tr[t].sink; /* redirect parent */ - - - /* Change the upper neighbours of the lower trapezoids */ - - if ((tr[t].d0 = tr[tnext].d0) > 0) { - if (tr[tr[t].d0].u0 == tnext) - tr[tr[t].d0].u0 = t; - else if (tr[tr[t].d0].u1 == tnext) - tr[tr[t].d0].u1 = t; - } - - if ((tr[t].d1 = tr[tnext].d1) > 0) { - if (tr[tr[t].d1].u0 == tnext) - tr[tr[t].d1].u0 = t; - else if (tr[tr[t].d1].u1 == tnext) - tr[tr[t].d1].u1 = t; - } - - tr[t].lo = tr[tnext].lo; - tr[tnext].state = ST_INVALID; /* invalidate the lower */ - /* trapezium */ - } - else /* not good neighbours */ - t = tnext; - } - else /* do not satisfy the outer if */ - t = tnext; - - } /* end-while */ - -} - -/* Add in the new segment into the trapezoidation and update Q and T - * structures. First locate the two endpoints of the segment in the - * Q-structure. Then start from the topmost trapezoid and go down to - * the lower trapezoid dividing all the trapezoids in between . - */ -static int -add_segment (int segnum, segment_t* seg, trap_t* tr, qnode_t* qs) -{ - segment_t s; - int tu, tl, sk, tfirst, tlast; - int tfirstr = 0, tlastr = 0, tfirstl = 0, tlastl = 0; - int i1, i2, t, tn; - pointf tpt; - int tritop = 0, tribot = 0, is_swapped; - int tmptriseg; - - s = seg[segnum]; - if (_greater_than(&s.v1, &s.v0)) /* Get higher vertex in v0 */ - { - int tmp; - tpt = s.v0; - s.v0 = s.v1; - s.v1 = tpt; - tmp = s.root0; - s.root0 = s.root1; - s.root1 = tmp; - is_swapped = TRUE; - } - else is_swapped = FALSE; - - if ((is_swapped) ? !inserted(segnum, seg, LASTPT) : - !inserted(segnum, seg, FIRSTPT)) /* insert v0 in the tree */ - { - int tmp_d; - - tu = locate_endpoint(&s.v0, &s.v1, s.root0, seg, qs); - tl = newtrap(tr); /* tl is the new lower trapezoid */ - tr[tl].state = ST_VALID; - tr[tl] = tr[tu]; - tr[tu].lo.y = tr[tl].hi.y = s.v0.y; - tr[tu].lo.x = tr[tl].hi.x = s.v0.x; - tr[tu].d0 = tl; - tr[tu].d1 = 0; - tr[tl].u0 = tu; - tr[tl].u1 = 0; - - if (((tmp_d = tr[tl].d0) > 0) && (tr[tmp_d].u0 == tu)) - tr[tmp_d].u0 = tl; - if (((tmp_d = tr[tl].d0) > 0) && (tr[tmp_d].u1 == tu)) - tr[tmp_d].u1 = tl; - - if (((tmp_d = tr[tl].d1) > 0) && (tr[tmp_d].u0 == tu)) - tr[tmp_d].u0 = tl; - if (((tmp_d = tr[tl].d1) > 0) && (tr[tmp_d].u1 == tu)) - tr[tmp_d].u1 = tl; - - /* Now update the query structure and obtain the sinks for the */ - /* two trapezoids */ - - i1 = newnode(); /* Upper trapezoid sink */ - i2 = newnode(); /* Lower trapezoid sink */ - sk = tr[tu].sink; - - qs[sk].nodetype = T_Y; - qs[sk].yval = s.v0; - qs[sk].segnum = segnum; /* not really reqd ... maybe later */ - qs[sk].left = i2; - qs[sk].right = i1; - - qs[i1].nodetype = T_SINK; - qs[i1].trnum = tu; - qs[i1].parent = sk; - - qs[i2].nodetype = T_SINK; - qs[i2].trnum = tl; - qs[i2].parent = sk; - - tr[tu].sink = i1; - tr[tl].sink = i2; - tfirst = tl; - } - else /* v0 already present */ - { /* Get the topmost intersecting trapezoid */ - tfirst = locate_endpoint(&s.v0, &s.v1, s.root0, seg, qs); - tritop = 1; - } - - - if ((is_swapped) ? !inserted(segnum, seg, FIRSTPT) : - !inserted(segnum, seg, LASTPT)) /* insert v1 in the tree */ - { - int tmp_d; - - tu = locate_endpoint(&s.v1, &s.v0, s.root1, seg, qs); - - tl = newtrap(tr); /* tl is the new lower trapezoid */ - tr[tl].state = ST_VALID; - tr[tl] = tr[tu]; - tr[tu].lo.y = tr[tl].hi.y = s.v1.y; - tr[tu].lo.x = tr[tl].hi.x = s.v1.x; - tr[tu].d0 = tl; - tr[tu].d1 = 0; - tr[tl].u0 = tu; - tr[tl].u1 = 0; - - if (((tmp_d = tr[tl].d0) > 0) && (tr[tmp_d].u0 == tu)) - tr[tmp_d].u0 = tl; - if (((tmp_d = tr[tl].d0) > 0) && (tr[tmp_d].u1 == tu)) - tr[tmp_d].u1 = tl; - - if (((tmp_d = tr[tl].d1) > 0) && (tr[tmp_d].u0 == tu)) - tr[tmp_d].u0 = tl; - if (((tmp_d = tr[tl].d1) > 0) && (tr[tmp_d].u1 == tu)) - tr[tmp_d].u1 = tl; - - /* Now update the query structure and obtain the sinks for the */ - /* two trapezoids */ - - i1 = newnode(); /* Upper trapezoid sink */ - i2 = newnode(); /* Lower trapezoid sink */ - sk = tr[tu].sink; - - qs[sk].nodetype = T_Y; - qs[sk].yval = s.v1; - qs[sk].segnum = segnum; /* not really reqd ... maybe later */ - qs[sk].left = i2; - qs[sk].right = i1; - - qs[i1].nodetype = T_SINK; - qs[i1].trnum = tu; - qs[i1].parent = sk; - - qs[i2].nodetype = T_SINK; - qs[i2].trnum = tl; - qs[i2].parent = sk; - - tr[tu].sink = i1; - tr[tl].sink = i2; - tlast = tu; - } - else /* v1 already present */ - { /* Get the lowermost intersecting trapezoid */ - tlast = locate_endpoint(&s.v1, &s.v0, s.root1, seg, qs); - tribot = 1; - } - - /* Thread the segment into the query tree creating a new X-node */ - /* First, split all the trapezoids which are intersected by s into */ - /* two */ - - t = tfirst; /* topmost trapezoid */ - - while ((t > 0) && - _greater_than_equal_to(&tr[t].lo, &tr[tlast].lo)) - /* traverse from top to bot */ - { - int t_sav, tn_sav; - sk = tr[t].sink; - i1 = newnode(); /* left trapezoid sink */ - i2 = newnode(); /* right trapezoid sink */ - - qs[sk].nodetype = T_X; - qs[sk].segnum = segnum; - qs[sk].left = i1; - qs[sk].right = i2; - - qs[i1].nodetype = T_SINK; /* left trapezoid (use existing one) */ - qs[i1].trnum = t; - qs[i1].parent = sk; - - qs[i2].nodetype = T_SINK; /* right trapezoid (allocate new) */ - qs[i2].trnum = tn = newtrap(tr); - tr[tn].state = ST_VALID; - qs[i2].parent = sk; - - if (t == tfirst) - tfirstr = tn; - if (_equal_to(&tr[t].lo, &tr[tlast].lo)) - tlastr = tn; - - tr[tn] = tr[t]; - tr[t].sink = i1; - tr[tn].sink = i2; - t_sav = t; - tn_sav = tn; - - /* error */ - - if ((tr[t].d0 <= 0) && (tr[t].d1 <= 0)) /* case cannot arise */ - { - fprintf(stderr, "add_segment: error\n"); - break; - } - - /* only one trapezoid below. partition t into two and make the */ - /* two resulting trapezoids t and tn as the upper neighbours of */ - /* the sole lower trapezoid */ - - else if ((tr[t].d0 > 0) && (tr[t].d1 <= 0)) - { /* Only one trapezoid below */ - if ((tr[t].u0 > 0) && (tr[t].u1 > 0)) - { /* continuation of a chain from abv. */ - if (tr[t].usave > 0) /* three upper neighbours */ - { - if (tr[t].uside == S_LEFT) - { - tr[tn].u0 = tr[t].u1; - tr[t].u1 = -1; - tr[tn].u1 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[tn].u0].d0 = tn; - tr[tr[tn].u1].d0 = tn; - } - else /* intersects in the right */ - { - tr[tn].u1 = -1; - tr[tn].u0 = tr[t].u1; - tr[t].u1 = tr[t].u0; - tr[t].u0 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[t].u1].d0 = t; - tr[tr[tn].u0].d0 = tn; - } - - tr[t].usave = tr[tn].usave = 0; - } - else /* No usave.... simple case */ - { - tr[tn].u0 = tr[t].u1; - tr[t].u1 = tr[tn].u1 = -1; - tr[tr[tn].u0].d0 = tn; - } - } - else - { /* fresh seg. or upward cusp */ - int tmp_u = tr[t].u0; - int td0, td1; - if (((td0 = tr[tmp_u].d0) > 0) && - ((td1 = tr[tmp_u].d1) > 0)) - { /* upward cusp */ - if ((tr[td0].rseg > 0) && - !is_left_of(tr[td0].rseg, seg, &s.v1)) - { - tr[t].u0 = tr[t].u1 = tr[tn].u1 = -1; - tr[tr[tn].u0].d1 = tn; - } - else /* cusp going leftwards */ - { - tr[tn].u0 = tr[tn].u1 = tr[t].u1 = -1; - tr[tr[t].u0].d0 = t; - } - } - else /* fresh segment */ - { - tr[tr[t].u0].d0 = t; - tr[tr[t].u0].d1 = tn; - } - } - - if (FP_EQUAL(tr[t].lo.y, tr[tlast].lo.y) && - FP_EQUAL(tr[t].lo.x, tr[tlast].lo.x) && tribot) - { /* bottom forms a triangle */ - - if (is_swapped) - tmptriseg = seg[segnum].prev; - else - tmptriseg = seg[segnum].next; - - if ((tmptriseg > 0) && is_left_of(tmptriseg, seg, &s.v0)) - { - /* L-R downward cusp */ - tr[tr[t].d0].u0 = t; - tr[tn].d0 = tr[tn].d1 = -1; - } - else - { - /* R-L downward cusp */ - tr[tr[tn].d0].u1 = tn; - tr[t].d0 = tr[t].d1 = -1; - } - } - else - { - if ((tr[tr[t].d0].u0 > 0) && (tr[tr[t].d0].u1 > 0)) - { - if (tr[tr[t].d0].u0 == t) /* passes thru LHS */ - { - tr[tr[t].d0].usave = tr[tr[t].d0].u1; - tr[tr[t].d0].uside = S_LEFT; - } - else - { - tr[tr[t].d0].usave = tr[tr[t].d0].u0; - tr[tr[t].d0].uside = S_RIGHT; - } - } - tr[tr[t].d0].u0 = t; - tr[tr[t].d0].u1 = tn; - } - - t = tr[t].d0; - } - - - else if ((tr[t].d0 <= 0) && (tr[t].d1 > 0)) - { /* Only one trapezoid below */ - if ((tr[t].u0 > 0) && (tr[t].u1 > 0)) - { /* continuation of a chain from abv. */ - if (tr[t].usave > 0) /* three upper neighbours */ - { - if (tr[t].uside == S_LEFT) - { - tr[tn].u0 = tr[t].u1; - tr[t].u1 = -1; - tr[tn].u1 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[tn].u0].d0 = tn; - tr[tr[tn].u1].d0 = tn; - } - else /* intersects in the right */ - { - tr[tn].u1 = -1; - tr[tn].u0 = tr[t].u1; - tr[t].u1 = tr[t].u0; - tr[t].u0 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[t].u1].d0 = t; - tr[tr[tn].u0].d0 = tn; - } - - tr[t].usave = tr[tn].usave = 0; - } - else /* No usave.... simple case */ - { - tr[tn].u0 = tr[t].u1; - tr[t].u1 = tr[tn].u1 = -1; - tr[tr[tn].u0].d0 = tn; - } - } - else - { /* fresh seg. or upward cusp */ - int tmp_u = tr[t].u0; - int td0, td1; - if (((td0 = tr[tmp_u].d0) > 0) && - ((td1 = tr[tmp_u].d1) > 0)) - { /* upward cusp */ - if ((tr[td0].rseg > 0) && - !is_left_of(tr[td0].rseg, seg, &s.v1)) - { - tr[t].u0 = tr[t].u1 = tr[tn].u1 = -1; - tr[tr[tn].u0].d1 = tn; - } - else - { - tr[tn].u0 = tr[tn].u1 = tr[t].u1 = -1; - tr[tr[t].u0].d0 = t; - } - } - else /* fresh segment */ - { - tr[tr[t].u0].d0 = t; - tr[tr[t].u0].d1 = tn; - } - } - - if (FP_EQUAL(tr[t].lo.y, tr[tlast].lo.y) && - FP_EQUAL(tr[t].lo.x, tr[tlast].lo.x) && tribot) - { /* bottom forms a triangle */ - /* int tmpseg; */ - - if (is_swapped) - tmptriseg = seg[segnum].prev; - else - tmptriseg = seg[segnum].next; - - /* if ((tmpseg > 0) && is_left_of(tmpseg, seg, &s.v0)) */ - if ((tmptriseg > 0) && is_left_of(tmptriseg, seg, &s.v0)) - { - /* L-R downward cusp */ - tr[tr[t].d1].u0 = t; - tr[tn].d0 = tr[tn].d1 = -1; - } - else - { - /* R-L downward cusp */ - tr[tr[tn].d1].u1 = tn; - tr[t].d0 = tr[t].d1 = -1; - } - } - else - { - if ((tr[tr[t].d1].u0 > 0) && (tr[tr[t].d1].u1 > 0)) - { - if (tr[tr[t].d1].u0 == t) /* passes thru LHS */ - { - tr[tr[t].d1].usave = tr[tr[t].d1].u1; - tr[tr[t].d1].uside = S_LEFT; - } - else - { - tr[tr[t].d1].usave = tr[tr[t].d1].u0; - tr[tr[t].d1].uside = S_RIGHT; - } - } - tr[tr[t].d1].u0 = t; - tr[tr[t].d1].u1 = tn; - } - - t = tr[t].d1; - } - - /* two trapezoids below. Find out which one is intersected by */ - /* this segment and proceed down that one */ - - else - { - /* int tmpseg = tr[tr[t].d0].rseg; */ - double y0, yt; - pointf tmppt; - int tnext, i_d0, i_d1; - - i_d0 = i_d1 = FALSE; - if (FP_EQUAL(tr[t].lo.y, s.v0.y)) - { - if (tr[t].lo.x > s.v0.x) - i_d0 = TRUE; - else - i_d1 = TRUE; - } - else - { - tmppt.y = y0 = tr[t].lo.y; - yt = (y0 - s.v0.y)/(s.v1.y - s.v0.y); - tmppt.x = s.v0.x + yt * (s.v1.x - s.v0.x); - - if (_less_than(&tmppt, &tr[t].lo)) - i_d0 = TRUE; - else - i_d1 = TRUE; - } - - /* check continuity from the top so that the lower-neighbour */ - /* values are properly filled for the upper trapezoid */ - - if ((tr[t].u0 > 0) && (tr[t].u1 > 0)) - { /* continuation of a chain from abv. */ - if (tr[t].usave > 0) /* three upper neighbours */ - { - if (tr[t].uside == S_LEFT) - { - tr[tn].u0 = tr[t].u1; - tr[t].u1 = -1; - tr[tn].u1 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[tn].u0].d0 = tn; - tr[tr[tn].u1].d0 = tn; - } - else /* intersects in the right */ - { - tr[tn].u1 = -1; - tr[tn].u0 = tr[t].u1; - tr[t].u1 = tr[t].u0; - tr[t].u0 = tr[t].usave; - - tr[tr[t].u0].d0 = t; - tr[tr[t].u1].d0 = t; - tr[tr[tn].u0].d0 = tn; - } - - tr[t].usave = tr[tn].usave = 0; - } - else /* No usave.... simple case */ - { - tr[tn].u0 = tr[t].u1; - tr[tn].u1 = -1; - tr[t].u1 = -1; - tr[tr[tn].u0].d0 = tn; - } - } - else - { /* fresh seg. or upward cusp */ - int tmp_u = tr[t].u0; - int td0, td1; - if (((td0 = tr[tmp_u].d0) > 0) && - ((td1 = tr[tmp_u].d1) > 0)) - { /* upward cusp */ - if ((tr[td0].rseg > 0) && - !is_left_of(tr[td0].rseg, seg, &s.v1)) - { - tr[t].u0 = tr[t].u1 = tr[tn].u1 = -1; - tr[tr[tn].u0].d1 = tn; - } - else - { - tr[tn].u0 = tr[tn].u1 = tr[t].u1 = -1; - tr[tr[t].u0].d0 = t; - } - } - else /* fresh segment */ - { - tr[tr[t].u0].d0 = t; - tr[tr[t].u0].d1 = tn; - } - } - - if (FP_EQUAL(tr[t].lo.y, tr[tlast].lo.y) && - FP_EQUAL(tr[t].lo.x, tr[tlast].lo.x) && tribot) - { - /* this case arises only at the lowest trapezoid.. i.e. - tlast, if the lower endpoint of the segment is - already inserted in the structure */ - - tr[tr[t].d0].u0 = t; - tr[tr[t].d0].u1 = -1; - tr[tr[t].d1].u0 = tn; - tr[tr[t].d1].u1 = -1; - - tr[tn].d0 = tr[t].d1; - tr[t].d1 = tr[tn].d1 = -1; - - tnext = tr[t].d1; - } - else if (i_d0) - /* intersecting d0 */ - { - tr[tr[t].d0].u0 = t; - tr[tr[t].d0].u1 = tn; - tr[tr[t].d1].u0 = tn; - tr[tr[t].d1].u1 = -1; - - /* new code to determine the bottom neighbours of the */ - /* newly partitioned trapezoid */ - - tr[t].d1 = -1; - - tnext = tr[t].d0; - } - else /* intersecting d1 */ - { - tr[tr[t].d0].u0 = t; - tr[tr[t].d0].u1 = -1; - tr[tr[t].d1].u0 = t; - tr[tr[t].d1].u1 = tn; - - /* new code to determine the bottom neighbours of the */ - /* newly partitioned trapezoid */ - - tr[tn].d0 = tr[t].d1; - tr[tn].d1 = -1; - - tnext = tr[t].d1; - } - - t = tnext; - } - - tr[t_sav].rseg = tr[tn_sav].lseg = segnum; - } /* end-while */ - - /* Now combine those trapezoids which share common segments. We can */ - /* use the pointers to the parent to connect these together. This */ - /* works only because all these new trapezoids have been formed */ - /* due to splitting by the segment, and hence have only one parent */ - - tfirstl = tfirst; - tlastl = tlast; - merge_trapezoids(segnum, tfirstl, tlastl, S_LEFT, tr, qs); - merge_trapezoids(segnum, tfirstr, tlastr, S_RIGHT, tr, qs); - - seg[segnum].is_inserted = TRUE; - return 0; -} - -/* Update the roots stored for each of the endpoints of the segment. - * This is done to speed up the location-query for the endpoint when - * the segment is inserted into the trapezoidation subsequently - */ -static void -find_new_roots(int segnum, segment_t* seg, trap_t* tr, qnode_t* qs) -{ - segment_t *s = &seg[segnum]; - - if (s->is_inserted) return; - - s->root0 = locate_endpoint(&s->v0, &s->v1, s->root0, seg, qs); - s->root0 = tr[s->root0].sink; - - s->root1 = locate_endpoint(&s->v1, &s->v0, s->root1, seg, qs); - s->root1 = tr[s->root1].sink; -} - -/* Get log*n for given n */ -static int math_logstar_n(int n) -{ - register int i; - double v; - - for (i = 0, v = (double) n; v >= 1; i++) - v = log2(v); - - return (i - 1); -} - -static int math_N(int n, int h) -{ - register int i; - double v; - - for (i = 0, v = (int) n; i < h; i++) - v = log2(v); - - return (int) ceil((double) 1.0*n/v); -} - -/* Main routine to perform trapezoidation */ -int -construct_trapezoids(int nseg, segment_t* seg, int* permute, int ntraps, - trap_t* tr) -{ - int i; - int root, h; - int segi = 1; - qnode_t* qs; - - QSIZE = 2*ntraps; - TRSIZE = ntraps; - qs = N_NEW (2*ntraps, qnode_t); - q_idx = tr_idx = 1; - memset((void *)tr, 0, ntraps*sizeof(trap_t)); - - /* Add the first segment and get the query structure and trapezoid */ - /* list initialised */ - - root = init_query_structure(permute[segi++], seg, tr, qs); - - for (i = 1; i <= nseg; i++) - seg[i].root0 = seg[i].root1 = root; - - for (h = 1; h <= math_logstar_n(nseg); h++) { - for (i = math_N(nseg, h -1) + 1; i <= math_N(nseg, h); i++) - add_segment(permute[segi++], seg, tr, qs); - - /* Find a new root for each of the segment endpoints */ - for (i = 1; i <= nseg; i++) - find_new_roots(i, seg, tr, qs); - } - - for (i = math_N(nseg, math_logstar_n(nseg)) + 1; i <= nseg; i++) - add_segment(permute[segi++], seg, tr, qs); - - free (qs); - return tr_idx; -} - diff --git a/internal/ccall/osage.c b/internal/ccall/osage.c deleted file mode 100644 index 5948838..0000000 --- a/internal/ccall/osage.c +++ /dev/null @@ -1 +0,0 @@ -#include "osage/osageinit.c" diff --git a/internal/ccall/osage/dummy.go b/internal/ccall/osage/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/osage/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/osage/osage.h b/internal/ccall/osage/osage.h deleted file mode 100644 index fc8198f..0000000 --- a/internal/ccall/osage/osage.h +++ /dev/null @@ -1,28 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CLUSTER_H -#define CLUSTER_H - -#include "render.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern void cluster_layout(Agraph_t * g); -extern void cluster_cleanup(Agraph_t * g); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/osage/osageinit.c b/internal/ccall/osage/osageinit.c deleted file mode 100644 index a8e1fdb..0000000 --- a/internal/ccall/osage/osageinit.c +++ /dev/null @@ -1,397 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* FIX: handle cluster labels */ -/* - * Written by Emden R. Gansner - */ - -#include "osage.h" -#include "neatoprocs.h" -#include "pack.h" - -#define CL_CHUNK 10 -#define DFLT_SZ 18 -#define PARENT(n) ((Agraph_t*)ND_alg(n)) - -static void -indent (int i) -{ - for (; i > 0; i--) - fputs (" ", stderr); -} - -typedef struct { - Agraph_t** cl; - int sz; - int cnt; -} clist_t; - -static void initCList(clist_t * clist) -{ - clist->cl = 0; - clist->sz = 0; - clist->cnt = 0; -} - -/* addCluster: - * Append a new cluster to the list. - * NOTE: cl[0] is empty. The clusters are in cl[1..cnt]. - * Normally, we increase the array when cnt == sz. - * The test for cnt > sz is necessary for the first time. - */ -static void addCluster(clist_t * clist, graph_t * subg) -{ - clist->cnt++; - if (clist->cnt >= clist->sz) { - clist->sz += CL_CHUNK; - clist->cl = RALLOC(clist->sz, clist->cl, graph_t *); - } - clist->cl[clist->cnt] = subg; -} - -static void cluster_init_graph(graph_t * g) -{ - Agnode_t *n; - Agedge_t *e; - - setEdgeType (g, ET_LINE); - Ndim = GD_ndim(g)=2; /* The algorithm only makes sense in 2D */ - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - neato_init_node (n); - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //edge custom data - common_init_edge(e); - } - } -} - -/* layout: - */ -static void -layout (Agraph_t* g, int depth) -{ - int i, j, total, nv; - int nvs = 0; /* no. of nodes in subclusters */ - Agnode_t* n; - Agraph_t* subg; - boxf* gs; - point* pts; - boxf bb, rootbb; - pointf p; - pack_info pinfo; - pack_mode pmode; - double margin; - void** children; - Agsym_t* cattr = NULL; - Agsym_t* vattr = NULL; - Agraph_t* root = g->root; - - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "layout %s\n", agnameof(g)); - } - - /* Lay out subclusters */ - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - layout (subg, depth+1); - nvs += agnnodes (subg); - } - - nv = agnnodes(g); - total = (nv - nvs) + GD_n_cluster(g); - - if ((total == 0) && (GD_label(g) == NULL)) { - GD_bb(g).LL.x = GD_bb(g).LL.y = 0; - GD_bb(g).UR.x = GD_bb(g).UR.y = DFLT_SZ; - return; - } - - pmode = getPackInfo(g, l_array, DFLT_MARGIN, &pinfo); - if (pmode < l_graph) pinfo.mode = l_graph; - - /* add user sort values if necessary */ - if ((pinfo.mode == l_array) && (pinfo.flags & PK_USER_VALS)) { - cattr = agattr(root, AGRAPH, "sortv", 0); - vattr = agattr(root, AGNODE, "sortv", 0); - if (cattr || vattr) - pinfo.vals = N_NEW(total, packval_t); - else - agerr (AGWARN, "Graph %s has array packing with user values but no \"sortv\" attributes are defined.", - agnameof(g)); - } - - gs = N_NEW(total, boxf); - children = N_NEW(total, void*); - j = 0; - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - gs[j] = GD_bb(subg); - if (pinfo.vals && cattr) { - pinfo.vals[j] = late_int (subg, cattr, 0, 0); - } - children[j++] = subg; - } - - if (nv-nvs > 0) { - for (n = agfstnode (g); n; n = agnxtnode (g,n)) { - if (ND_alg(n)) continue; - ND_alg(n) = g; - bb.LL.y = bb.LL.x = 0; - bb.UR.x = ND_xsize(n); - bb.UR.y = ND_ysize(n); - gs[j] = bb; - if (pinfo.vals && vattr) { - pinfo.vals[j] = late_int (n, vattr, 0, 0); - } - children[j++] = n; - } - } - - /* pack rectangles */ - pts = putRects (total, gs, &pinfo); - if (pinfo.vals) { - free (pinfo.vals); - } - - rootbb.LL = pointfof(INT_MAX, INT_MAX); - rootbb.UR = pointfof(-INT_MAX, -INT_MAX); - - /* reposition children relative to GD_bb(g) */ - for (j = 0; j < total; j++) { - P2PF(pts[j],p); - bb = gs[j]; - bb.LL.x += p.x; - bb.UR.x += p.x; - bb.LL.y += p.y; - bb.UR.y += p.y; - EXPANDBB(rootbb, bb); - if (j < GD_n_cluster(g)) { - subg = (Agraph_t*)children[j]; - GD_bb(subg) = bb; - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f %f %f\n", agnameof(subg), bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } - } - else { - n = (Agnode_t*)children[j]; - ND_coord(n) = mid_pointf (bb.LL, bb.UR); - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f\n", agnameof(n), ND_coord(n).x, ND_coord(n).y); - } - } - } - - if (GD_label(g)) { - pointf p; - double d; - - p = GD_label(g)->dimen; - if (total == 0) { - rootbb.LL.x = 0; - rootbb.LL.y = 0; - rootbb.UR.x = p.x; - rootbb.UR.y = p.y; - - } - d = p.x - (rootbb.UR.x - rootbb.LL.x); - if (d > 0) { /* height of label is added below */ - d /= 2; - rootbb.LL.x -= d; - rootbb.UR.x += d; - } - } - - if (depth > 0) - margin = pinfo.margin/2.0; - else - margin = 0; - rootbb.LL.x -= margin; - rootbb.UR.x += margin; - rootbb.LL.y -= (margin + GD_border(g)[BOTTOM_IX].y); - rootbb.UR.y += (margin + GD_border(g)[TOP_IX].y); - - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f %f %f\n", agnameof(g), rootbb.LL.x, rootbb.LL.y, rootbb.UR.x, rootbb.UR.y); - } - - /* Translate so that rootbb.LL is origin. - * This makes the repositioning simpler; we just translate the clusters and nodes in g by - * the final bb.ll of g. - */ - for (j = 0; j < total; j++) { - if (j < GD_n_cluster(g)) { - subg = (Agraph_t*)children[j]; - bb = GD_bb(subg); - bb.LL = sub_pointf(bb.LL, rootbb.LL); - bb.UR = sub_pointf(bb.UR, rootbb.LL); - GD_bb(subg) = bb; - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f %f %f\n", agnameof(subg), bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); - } - } - else { - n = (Agnode_t*)children[j]; - ND_coord(n) = sub_pointf (ND_coord(n), rootbb.LL); - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f\n", agnameof(n), ND_coord(n).x, ND_coord(n).y); - } - } - } - - rootbb.UR = sub_pointf(rootbb.UR, rootbb.LL); - rootbb.LL = sub_pointf(rootbb.LL, rootbb.LL); - GD_bb(g) = rootbb; - - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f %f %f\n", agnameof(g), rootbb.LL.x, rootbb.LL.y, rootbb.UR.x, rootbb.UR.y); - } - - free (gs); - free (children); - free (pts); -} - -static void -reposition (Agraph_t* g, int depth) -{ - boxf sbb, bb = GD_bb(g); - Agnode_t* n; - Agraph_t* subg; - int i; - - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "reposition %s\n", agnameof(g)); - } - - /* translate nodes in g but not in a subcluster */ - if (depth) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (PARENT(n) != g) - continue; - ND_coord(n).x += bb.LL.x; - ND_coord(n).y += bb.LL.y; - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f\n", agnameof(n), ND_coord(n).x, ND_coord(n).y); - } - } - } - - /* translate top-level clusters and recurse */ - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - if (depth) { - sbb = GD_bb(subg); - sbb.LL.x += bb.LL.x; - sbb.LL.y += bb.LL.y; - sbb.UR.x += bb.LL.x; - sbb.UR.y += bb.LL.y; - if (Verbose > 1) { - indent (depth); - fprintf (stderr, "%s : %f %f %f %f\n", agnameof(subg), sbb.LL.x, sbb.LL.y, sbb.UR.x, sbb.UR.y); - } - GD_bb(subg) = sbb; - } - reposition (subg, depth+1); - } - -} - -static void -mkClusters (Agraph_t* g, clist_t* pclist, Agraph_t* parent) -{ - graph_t* subg; - clist_t list; - clist_t* clist; - - if (pclist == NULL) { - clist = &list; - initCList(clist); - } - else - clist = pclist; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (!strncmp(agnameof(subg), "cluster", 7)) { - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); - do_graph_label (subg); - addCluster(clist, subg); - mkClusters(subg, NULL, subg); - } - else { - mkClusters(subg, clist, parent); - } - } - if (pclist == NULL) { - GD_n_cluster(g) = list.cnt; - if (list.cnt) - GD_clust(g) = RALLOC(list.cnt + 1, list.cl, graph_t*); - } -} - -void osage_layout(Agraph_t *g) -{ - cluster_init_graph(g); - mkClusters(g, NULL, g); - layout(g, 0); - reposition (g, 0); - - if (GD_drawing(g)->ratio_kind) { - Agnode_t* n; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] = PS2INCH(ND_coord(n).x); - ND_pos(n)[1] = PS2INCH(ND_coord(n).y); - } - spline_edges0(g, TRUE); - } - else { - int et = EDGE_TYPE (g); - if (et != ET_NONE) spline_edges1(g, et); - } - dotneato_postprocess(g); -} - -static void cleanup_graphs (Agraph_t *g) -{ - graph_t *subg; - int i; - - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - free_label(GD_label(subg)); - cleanup_graphs (subg); - } - free (GD_clust(g)); -} - -void osage_cleanup(Agraph_t *g) -{ - node_t *n; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - gv_cleanup_node(n); - } - cleanup_graphs(g); -} diff --git a/internal/ccall/pack.c b/internal/ccall/pack.c deleted file mode 100644 index 7517d99..0000000 --- a/internal/ccall/pack.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "pack/ccomps.c" -#include "pack/pack.c" diff --git a/internal/ccall/pack/ccomps.c b/internal/ccall/pack/ccomps.c deleted file mode 100644 index a268b58..0000000 --- a/internal/ccall/pack/ccomps.c +++ /dev/null @@ -1,721 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include "render.h" -#include "pack.h" - -static jmp_buf jbuf; - -#define MARKED(stk,n) ((stk)->markfn(n,-1)) -#define MARK(stk,n) ((stk)->markfn(n,1)) -#define UNMARK(stk,n) ((stk)->markfn(n,0)) - -typedef struct blk_t { - Agnode_t **data; - Agnode_t **endp; - struct blk_t *prev; - struct blk_t *next; -} blk_t; - -typedef struct { - blk_t *fstblk; - blk_t *curblk; - Agnode_t **curp; - void (*actionfn) (Agnode_t *, void *); - int (*markfn) (Agnode_t *, int); -} stk_t; - -#define INITBUF 1024 -#define BIGBUF 1000000 - -static void initStk(stk_t* sp, blk_t* bp, Agnode_t** base, void (*actionfn) (Agnode_t *, void *), - int (*markfn) (Agnode_t *, int)) -{ - bp->data = base; - bp->endp = bp->data + INITBUF; - bp->prev = bp->next = NULL; - sp->curblk = sp->fstblk = bp; - sp->curp = sp->curblk->data; - sp->actionfn = actionfn; - sp->markfn = markfn; -} - -static void freeBlk (blk_t* bp) -{ - free (bp->data); - free (bp); -} - -static void freeStk (stk_t* sp) -{ - blk_t* bp; - blk_t* nxtbp; - - for (bp = sp->fstblk->next; bp; bp = nxtbp) { - nxtbp = bp->next; - freeBlk (bp); - } -} - -static void push(stk_t* sp, Agnode_t * np) -{ - if (sp->curp == sp->curblk->endp) { - if (sp->curblk->next == NULL) { - blk_t *bp = GNEW(blk_t); - if (bp == 0) { - agerr(AGERR, "gc: Out of memory\n"); - longjmp(jbuf, 1); - } - bp->prev = sp->curblk; - bp->next = NULL; - bp->data = N_GNEW(BIGBUF, Agnode_t *); - if (bp->data == 0) { - agerr(AGERR, "gc: Out of memory\n"); - longjmp(jbuf, 1); - } - bp->endp = bp->data + BIGBUF; - sp->curblk->next = bp; - } - sp->curblk = sp->curblk->next; - sp->curp = sp->curblk->data; - } - MARK(sp,np); - *sp->curp++ = np; -} - -static Agnode_t *pop(stk_t* sp) -{ - if (sp->curp == sp->curblk->data) { - if (sp->curblk == sp->fstblk) - return 0; - sp->curblk = sp->curblk->prev; - sp->curp = sp->curblk->endp; - } - sp->curp--; - return *sp->curp; -} - - -static int dfs(Agraph_t * g, Agnode_t * n, void *state, stk_t* stk) -{ - Agedge_t *e; - Agnode_t *other; - int cnt = 0; - - push (stk, n); - while ((n = pop(stk))) { - cnt++; - if (stk->actionfn) stk->actionfn(n, state); - for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) { - if ((other = agtail(e)) == n) - other = aghead(e); - if (!MARKED(stk,other)) - push(stk, other); - } - } - return cnt; -} - -static int isLegal(char *p) -{ - unsigned char c; - - while ((c = *(unsigned char *) p++)) { - if ((c != '_') && !isalnum(c)) - return 0; - } - - return 1; -} - -/* insertFn: - */ -static void insertFn(Agnode_t * n, void *state) -{ - agsubnode((Agraph_t *) state,n,1); -} - -/* markFn: - */ -static int markFn (Agnode_t* n, int v) -{ - int ret; - if (v < 0) return ND_mark(n); - ret = ND_mark(n); - ND_mark(n) = v; - return ret; -} - -/* setPrefix: - */ -static char* -setPrefix (char* pfx, int* lenp, char* buf, int buflen) -{ - int len; - char* name; - - if (!pfx || !isLegal(pfx)) { - pfx = "_cc_"; - } - len = strlen(pfx); - if (len + 25 <= buflen) - name = buf; - else { - if (!(name = (char *) gmalloc(len + 25))) return NULL; - } - strcpy(name, pfx); - *lenp = len; - return name; -} - -/* pccomps: - * Return an array of subgraphs consisting of the connected - * components of graph g. The number of components is returned in ncc. - * All pinned nodes are in one component. - * If pfx is non-null and a legal graph name, we use it as the prefix - * for the name of the subgraphs created. If not, a simple default is used. - * If pinned is non-null, *pinned set to 1 if pinned nodes found - * and the first component is the one containing the pinned nodes. - * Note that the component subgraphs do not contain any edges. These must - * be obtained from the root graph. - * Return NULL on error or if graph is empty. - */ -Agraph_t **pccomps(Agraph_t * g, int *ncc, char *pfx, boolean * pinned) -{ - int c_cnt = 0; - char buffer[SMALLBUF]; - char *name; - Agraph_t *out = 0; - Agnode_t *n; - Agraph_t **ccs; - int len; - int bnd = 10; - boolean pin = FALSE; - stk_t stk; - blk_t blk; - Agnode_t* base[INITBUF]; - int error = 0; - - if (agnnodes(g) == 0) { - *ncc = 0; - return 0; - } - name = setPrefix (pfx, &len, buffer, SMALLBUF); - - ccs = N_GNEW(bnd, Agraph_t *); - - initStk (&stk, &blk, base, insertFn, markFn); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - UNMARK(&stk,n); - - if (setjmp(jbuf)) { - error = 1; - goto packerror; - } - /* Component with pinned nodes */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (MARKED(&stk,n) || !isPinned(n)) - continue; - if (!out) { - sprintf(name + len, "%d", c_cnt); - out = agsubg(g, name,1); - agbindrec(out, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - ccs[c_cnt] = out; - c_cnt++; - pin = TRUE; - } - dfs (g, n, out, &stk); - } - - /* Remaining nodes */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (MARKED(&stk,n)) - continue; - sprintf(name + len, "%d", c_cnt); - out = agsubg(g, name,1); - agbindrec(out, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - dfs(g, n, out, &stk); - if (c_cnt == bnd) { - bnd *= 2; - ccs = RALLOC(bnd, ccs, Agraph_t *); - } - ccs[c_cnt] = out; - c_cnt++; - } -packerror: - freeStk (&stk); - if (name != buffer) - free(name); - if (error) { - int i; - *ncc = 0; - for (i=0; i < c_cnt; i++) { - agclose (ccs[i]); - } - free (ccs); - ccs = NULL; - } - else { - ccs = RALLOC(c_cnt, ccs, Agraph_t *); - *ncc = c_cnt; - *pinned = pin; - } - return ccs; -} - -/* ccomps: - * Return an array of subgraphs consisting of the connected - * components of graph g. The number of components is returned in ncc. - * If pfx is non-null and a legal graph name, we use it as the prefix - * for the name of the subgraphs created. If not, a simple default is used. - * Note that the component subgraphs do not contain any edges. These must - * be obtained from the root graph. - * Returns NULL on error or if graph is empty. - */ -Agraph_t **ccomps(Agraph_t * g, int *ncc, char *pfx) -{ - int c_cnt = 0; - char buffer[SMALLBUF]; - char *name; - Agraph_t *out; - Agnode_t *n; - Agraph_t **ccs; - int len; - int bnd = 10; - stk_t stk; - blk_t blk; - Agnode_t* base[INITBUF]; - - if (agnnodes(g) == 0) { - *ncc = 0; - return 0; - } - name = setPrefix (pfx, &len, buffer, SMALLBUF); - - ccs = N_GNEW(bnd, Agraph_t *); - initStk (&stk, &blk, base, insertFn, markFn); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - UNMARK(&stk,n); - - if (setjmp(jbuf)) { - freeStk (&stk); - free (ccs); - if (name != buffer) - free(name); - *ncc = 0; - return NULL; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (MARKED(&stk,n)) - continue; - sprintf(name + len, "%d", c_cnt); - out = agsubg(g, name,1); - agbindrec(out, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data - dfs(g, n, out, &stk); - if (c_cnt == bnd) { - bnd *= 2; - ccs = RALLOC(bnd, ccs, Agraph_t *); - } - ccs[c_cnt] = out; - c_cnt++; - } - freeStk (&stk); - ccs = RALLOC(c_cnt, ccs, Agraph_t *); - if (name != buffer) - free(name); - *ncc = c_cnt; - return ccs; -} - -typedef struct { - Agrec_t h; - char cc_subg; /* true iff subgraph corresponds to a component */ -} ccgraphinfo_t; - -typedef struct { - Agrec_t h; - char mark; - union { - Agraph_t* g; - Agnode_t* n; - void* v; - } ptr; -} ccgnodeinfo_t; - -#define GRECNAME "ccgraphinfo" -#define NRECNAME "ccgnodeinfo" -#define GD_cc_subg(g) (((ccgraphinfo_t*)aggetrec(g, GRECNAME, FALSE))->cc_subg) -#ifdef DEBUG -Agnode_t* -dnodeOf (Agnode_t* v) -{ - ccgnodeinfo_t* ip = (ccgnodeinfo_t*)aggetrec(v, NRECNAME, FALSE); - if (ip) - return ip->ptr.n; - fprintf (stderr, "nodeinfo undefined\n"); - return 0; -} -void -dnodeSet (Agnode_t* v, Agnode_t* n) -{ - ((ccgnodeinfo_t*)aggetrec(v, NRECNAME, FALSE))->ptr.n = n; -} -#else -#define dnodeOf(v) (((ccgnodeinfo_t*)aggetrec(v, NRECNAME, FALSE))->ptr.n) -#define dnodeSet(v,w) (((ccgnodeinfo_t*)aggetrec(v, NRECNAME, FALSE))->ptr.n=w) -#endif - -#define ptrOf(np) (((ccgnodeinfo_t*)((np)->base.data))->ptr.v) -#define nodeOf(np) (((ccgnodeinfo_t*)((np)->base.data))->ptr.n) -#define clustOf(np) (((ccgnodeinfo_t*)((np)->base.data))->ptr.g) -#define clMark(n) (((ccgnodeinfo_t*)(n->base.data))->mark) - -/* isCluster: - * Return true if graph is a cluster - */ -#define isCluster(g) (strncmp(agnameof(g), "cluster", 7) == 0) - -/* deriveClusters: - * Construct nodes in derived graph corresponding top-level clusters. - * Since a cluster might be wrapped in a subgraph, we need to traverse - * down into the tree of subgraphs - */ -static void deriveClusters(Agraph_t* dg, Agraph_t * g) -{ - Agraph_t *subg; - Agnode_t *dn; - Agnode_t *n; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (isCluster(subg)) { - dn = agnode(dg, agnameof(subg), 1); - agbindrec (dn, NRECNAME, sizeof(ccgnodeinfo_t), TRUE); - clustOf(dn) = subg; - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - if (dnodeOf(n)) { - fprintf (stderr, "Error: node \"%s\" belongs to two non-nested clusters \"%s\" and \"%s\"\n", - agnameof (n), agnameof(subg), agnameof(dnodeOf(n))); - } - dnodeSet(n,dn); - } - } - else { - deriveClusters (dg, subg); - } - } -} - -/* deriveGraph: - * Create derived graph dg of g where nodes correspond to top-level nodes - * or clusters, and there is an edge in dg if there is an edge in g - * between any nodes in the respective clusters. - */ -static Agraph_t *deriveGraph(Agraph_t * g) -{ - Agraph_t *dg; - Agnode_t *dn; - Agnode_t *n; - - dg = agopen("dg", Agstrictundirected, (Agdisc_t *) 0); - - deriveClusters (dg, g); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (dnodeOf(n)) - continue; - dn = agnode(dg, agnameof(n), 1); - agbindrec (dn, NRECNAME, sizeof(ccgnodeinfo_t), TRUE); - nodeOf(dn) = n; - dnodeSet(n,dn); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - Agedge_t *e; - Agnode_t *hd; - Agnode_t *tl = dnodeOf(n); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - hd = aghead(e); - hd = dnodeOf(hd); - if (hd == tl) - continue; - if (hd > tl) - agedge(dg, tl, hd, 0, 1); - else - agedge(dg, hd, tl, 0, 1); - } - } - - return dg; -} - -/* unionNodes: - * Add all nodes in cluster nodes of dg to g - */ -static void unionNodes(Agraph_t * dg, Agraph_t * g) -{ - Agnode_t *n; - Agnode_t *dn; - Agraph_t *clust; - - for (dn = agfstnode(dg); dn; dn = agnxtnode(dg, dn)) { - if (AGTYPE(ptrOf(dn)) == AGNODE) { - agsubnode(g, nodeOf(dn), 1); - } else { - clust = clustOf(dn); - for (n = agfstnode(clust); n; n = agnxtnode(clust, n)) - agsubnode(g, n, 1); - } - } -} - -/* clMarkFn: - */ -static int clMarkFn (Agnode_t* n, int v) -{ - int ret; - if (v < 0) return clMark(n); - ret = clMark(n); - clMark(n) = v; - return ret; -} - -/* node_induce: - * Using the edge set of eg, add to g any edges - * with both endpoints in g. - * Returns the number of edges added. - */ -int node_induce(Agraph_t * g, Agraph_t* eg) -{ - Agnode_t *n; - Agedge_t *e; - int e_cnt = 0; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(eg, n); e; e = agnxtout(eg, e)) { - if (agsubnode(g, aghead(e),0)) { - agsubedge(g,e,1); - e_cnt++; - } - } - } - return e_cnt; -} - - -typedef struct { - Agrec_t h; - Agraph_t* orig; -} orig_t; - -#define ORIG_REC "orig" - -Agraph_t* -mapClust(Agraph_t *cl) -{ - orig_t* op = (orig_t*)aggetrec(cl, ORIG_REC, 0); - assert (op); - return op->orig; -} - -/* projectG: - * If any nodes of subg are in g, create a subgraph of g - * and fill it with all nodes of subg in g and their induced - * edges in subg. Copy the attributes of subg to g. Return the subgraph. - * If not, return null. - * If subg is a cluster, the new subgraph will contain a pointer to it - * in the record "orig". - */ -static Agraph_t *projectG(Agraph_t * subg, Agraph_t * g, int inCluster) -{ - Agraph_t *proj = 0; - Agnode_t *n; - Agnode_t *m; - orig_t *op; - - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) { - if ((m = agfindnode(g, agnameof(n)))) { - if (proj == 0) { - proj = agsubg(g, agnameof(subg), 1); - } - agsubnode(proj, m, 1); - } - } - if (!proj && inCluster) { - proj = agsubg(g, agnameof(subg), 1); - } - if (proj) { - node_induce(proj, subg); - agcopyattr(subg, proj); - if (isCluster(proj)) { - op = agbindrec(proj,ORIG_REC, sizeof(orig_t), 0); - op->orig = subg; - } - } - - return proj; -} - -/* subgInduce: - * Project subgraphs of root graph on subgraph. - * If non-empty, add to subgraph. - */ -static void -subgInduce(Agraph_t * root, Agraph_t * g, int inCluster) -{ - Agraph_t *subg; - Agraph_t *proj; - int in_cluster; - -/* fprintf (stderr, "subgInduce %s inCluster %d\n", agnameof(root), inCluster); */ - for (subg = agfstsubg(root); subg; subg = agnxtsubg(subg)) { - if (GD_cc_subg(subg)) - continue; - if ((proj = projectG(subg, g, inCluster))) { - in_cluster = (inCluster || isCluster(subg)); - subgInduce(subg, proj, in_cluster); - } - } -} - -static void -subGInduce(Agraph_t* g, Agraph_t * out) -{ - subgInduce(g, out, 0); -} - -/* cccomps: - * Decompose g into "connected" components, where nodes are connected - * either by an edge or by being in the same cluster. The components - * are returned in an array of subgraphs. ncc indicates how many components - * there are. The subgraphs use the prefix pfx in their names, if non-NULL. - * Note that cluster subgraph of the main graph, corresponding to a component, - * is cloned within the subgraph. Each cloned cluster contains a record pointing - * to the real cluster. - */ -Agraph_t **cccomps(Agraph_t * g, int *ncc, char *pfx) -{ - Agraph_t *dg; - long n_cnt, c_cnt, e_cnt; - char *name; - Agraph_t *out; - Agraph_t *dout; - Agnode_t *dn; - char buffer[SMALLBUF]; - Agraph_t **ccs; - stk_t stk; - blk_t blk; - Agnode_t* base[INITBUF]; - int len, sz = sizeof(ccgraphinfo_t); - - if (agnnodes(g) == 0) { - *ncc = 0; - return 0; - } - - /* Bind ccgraphinfo to graph and all subgraphs */ - aginit(g, AGRAPH, GRECNAME, -sz, FALSE); - - /* Bind ccgraphinfo to graph and all subgraphs */ - aginit(g, AGNODE, NRECNAME, sizeof(ccgnodeinfo_t), FALSE); - - name = setPrefix (pfx, &len, buffer, SMALLBUF); - - dg = deriveGraph(g); - - ccs = N_GNEW(agnnodes(dg), Agraph_t *); - initStk (&stk, &blk, base, insertFn, clMarkFn); - - c_cnt = 0; - for (dn = agfstnode(dg); dn; dn = agnxtnode(dg, dn)) { - if (MARKED(&stk,dn)) - continue; - sprintf(name + len, "%ld", c_cnt); - dout = agsubg(dg, name, 1); - out = agsubg(g, name, 1); - agbindrec(out, GRECNAME, sizeof(ccgraphinfo_t), FALSE); - GD_cc_subg(out) = 1; - n_cnt = dfs(dg, dn, dout, &stk); - unionNodes(dout, out); - e_cnt = nodeInduce(out); - subGInduce(g, out); - ccs[c_cnt] = out; - agdelete(dg, dout); - if (Verbose) - fprintf(stderr, "(%4ld) %7ld nodes %7ld edges\n", - c_cnt, n_cnt, e_cnt); - c_cnt++; - } - - if (Verbose) - fprintf(stderr, " %7d nodes %7d edges %7ld components %s\n", - agnnodes(g), agnedges(g), c_cnt, agnameof(g)); - - agclose(dg); - agclean (g, AGRAPH, GRECNAME); - agclean (g, AGNODE, NRECNAME); - freeStk (&stk); - ccs = RALLOC(c_cnt, ccs, Agraph_t *); - if (name != buffer) - free(name); - *ncc = c_cnt; - return ccs; -} - -/* isConnected: - * Returns 1 if the graph is connected. - * Returns 0 if the graph is not connected. - * Returns -1 if the graph is error. - */ -int isConnected(Agraph_t * g) -{ - Agnode_t *n; - int ret = 1; - int cnt = 0; - stk_t stk; - blk_t blk; - Agnode_t* base[INITBUF]; - - if (agnnodes(g) == 0) - return 1; - - initStk (&stk, &blk, base, NULL, markFn); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - UNMARK(&stk,n); - - if (setjmp(jbuf)) { - freeStk (&stk); - return -1; - } - - n = agfstnode(g); - cnt = dfs(g, agfstnode(g), NULL, &stk); - if (cnt != agnnodes(g)) - ret = 0; - freeStk (&stk); - return ret; -} - -/* nodeInduce: - * Given a subgraph, adds all edges in the root graph both of whose - * endpoints are in the subgraph. - * If g is a connected component, this will be all edges attached to - * any node in g. - * Returns the number of edges added. - */ -int nodeInduce(Agraph_t * g) -{ - return node_induce (g, g->root); -} diff --git a/internal/ccall/pack/dummy.go b/internal/ccall/pack/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/pack/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/pack/pack.c b/internal/ccall/pack/pack.c deleted file mode 100644 index ae3d767..0000000 --- a/internal/ccall/pack/pack.c +++ /dev/null @@ -1,1413 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* Module for packing disconnected graphs together. - * Based on "Disconnected Graph Layout and the Polyomino Packing Approach", - * K. Freivalds et al., GD0'01, LNCS 2265, pp. 378-391. - */ - -#include -#include -#include "render.h" -#include "pack.h" -#include "pointset.h" -#include - -#define strneq(a,b,n) (!strncmp(a,b,n)) - -#define C 100 /* Max. avg. polyomino size */ - -#define MOVEPT(p) ((p).x += dx, (p).y += dy) -/* Given cell size s, GRID(x:double,s:int) returns how many cells are required by size x */ -#define GRID(x,s) ((int)ceil((x)/(s))) -/* Given grid cell size s, CVAL(v:int,s:int) returns index of cell containing point v */ -#define CVAL(v,s) ((v) >= 0 ? (v)/(s) : (((v)+1)/(s))-1) -/* Given grid cell size s, CELL(p:point,s:int) sets p to cell containing point p */ -#define CELL(p,s) ((p).x = CVAL((p).x,s), (p).y = CVAL((p).y,(s))) - -typedef struct { - int perim; /* half size of bounding rectangle perimeter */ - point *cells; /* cells in covering polyomino */ - int nc; /* no. of cells */ - int index; /* index in original array */ -} ginfo; - -typedef struct { - double width, height; - int index; /* index in original array */ -} ainfo; - -/* computeStep: - * Compute grid step size. This is a root of the - * quadratic equation al^2 +bl + c, where a, b and - * c are defined below. - */ -static int computeStep(int ng, boxf* bbs, int margin) -{ - double l1, l2; - double a, b, c, d, r; - double W, H; /* width and height of graph, with margin */ - int i, root; - - a = C * ng - 1; - c = 0; - b = 0; - for (i = 0; i < ng; i++) { - boxf bb = bbs[i]; - W = bb.UR.x - bb.LL.x + 2 * margin; - H = bb.UR.y - bb.LL.y + 2 * margin; - b -= (W + H); - c -= (W * H); - } - d = b * b - 4.0 * a * c; - if (d < 0) { - agerr(AGERR, "libpack: disc = %f ( < 0)\n", d); - return -1; - } - r = sqrt(d); - l1 = (-b + r) / (2 * a); - l2 = (-b - r) / (2 * a); - root = (int) l1; - if (root == 0) root = 1; - if (Verbose > 2) { - fprintf(stderr, "Packing: compute grid size\n"); - fprintf(stderr, "a %f b %f c %f d %f r %f\n", a, b, c, d, r); - fprintf(stderr, "root %d (%f) %d (%f)\n", root, l1, (int) l2, - l2); - fprintf(stderr, " r1 %f r2 %f\n", a * l1 * l1 + b * l1 + c, - a * l2 * l2 + b * l2 + c); - } - - return root; -} - -/* cmpf; - * Comparison function for polyominoes. - * Size is determined by perimeter. - */ -static int cmpf(const void *X, const void *Y) -{ - ginfo *x = *(ginfo **) X; - ginfo *y = *(ginfo **) Y; - /* flip order to get descending array */ - return (y->perim - x->perim); -} - -/* fillLine: - * Mark cells crossed by line from cell p to cell q. - * Bresenham's algorithm, from Graphics Gems I, pp. 99-100. - */ -/* static */ -void fillLine(pointf p, pointf q, PointSet * ps) -{ - int x1 = ROUND(p.x); - int y1 = ROUND(p.y); - int x2 = ROUND(q.x); - int y2 = ROUND(q.y); - int d, x, y, ax, ay, sx, sy, dx, dy; - - dx = x2 - x1; - ax = ABS(dx) << 1; - sx = SGN(dx); - dy = y2 - y1; - ay = ABS(dy) << 1; - sy = SGN(dy); - -/* fprintf (stderr, "fillLine %d %d - %d %d\n", x1,y1,x2,y2); */ - x = x1; - y = y1; - if (ax > ay) { /* x dominant */ - d = ay - (ax >> 1); - for (;;) { -/* fprintf (stderr, " addPS %d %d\n", x,y); */ - addPS(ps, x, y); - if (x == x2) - return; - if (d >= 0) { - y += sy; - d -= ax; - } - x += sx; - d += ay; - } - } else { /* y dominant */ - d = ax - (ay >> 1); - for (;;) { -/* fprintf (stderr, " addPS %d %d\n", x,y); */ - addPS(ps, x, y); - if (y == y2) - return; - if (d >= 0) { - x += sx; - d -= ay; - } - y += sy; - d += ax; - } - } -} - -/* fillEdge: - * It appears that spline_edges always have the start point at the - * beginning and the end point at the end. - */ -static void -fillEdge(Agedge_t * e, point p, PointSet * ps, int dx, int dy, - int ssize, int doS) -{ - int j, k; - bezier bz; - pointf pt, hpt; - Agnode_t *h; - - P2PF(p, pt); - - /* If doS is false or the edge has not splines, use line segment */ - if (!doS || !ED_spl(e)) { - h = aghead(e); - hpt = coord(h); - MOVEPT(hpt); - CELL(hpt, ssize); - fillLine(pt, hpt, ps); - return; - } - - for (j = 0; j < ED_spl(e)->size; j++) { - bz = ED_spl(e)->list[j]; - if (bz.sflag) { - pt = bz.sp; - hpt = bz.list[0]; - k = 1; - } else { - pt = bz.list[0]; - hpt = bz.list[1]; - k = 2; - } - MOVEPT(pt); - CELL(pt, ssize); - MOVEPT(hpt); - CELL(hpt, ssize); - fillLine(pt, hpt, ps); - - for (; k < bz.size; k++) { - pt = hpt; - hpt = bz.list[k]; - MOVEPT(hpt); - CELL(hpt, ssize); - fillLine(pt, hpt, ps); - } - - if (bz.eflag) { - pt = hpt; - hpt = bz.ep; - MOVEPT(hpt); - CELL(hpt, ssize); - fillLine(pt, hpt, ps); - } - } - -} - -/* genBox: - * Generate polyomino info from graph using the bounding box of - * the graph. - */ -static void -genBox(boxf bb0, ginfo * info, int ssize, int margin, point center, char* s) -{ - PointSet *ps; - int W, H; - point UR, LL; - box bb; - int x, y; - - BF2B(bb0, bb); - ps = newPS(); - - LL.x = center.x - margin; - LL.y = center.y - margin; - UR.x = center.x + bb.UR.x - bb.LL.x + margin; - UR.y = center.y + bb.UR.y - bb.LL.y + margin; - CELL(LL, ssize); - CELL(UR, ssize); - - for (x = LL.x; x <= UR.x; x++) - for (y = LL.y; y <= UR.y; y++) - addPS(ps, x, y); - - info->cells = pointsOf(ps); - info->nc = sizeOf(ps); - W = GRID(bb0.UR.x - bb0.LL.x + 2 * margin, ssize); - H = GRID(bb0.UR.y - bb0.LL.y + 2 * margin, ssize); - info->perim = W + H; - - if (Verbose > 2) { - int i; - fprintf(stderr, "%s no. cells %d W %d H %d\n", - s, info->nc, W, H); - for (i = 0; i < info->nc; i++) - fprintf(stderr, " %d %d cell\n", info->cells[i].x, - info->cells[i].y); - } - - freePS(ps); -} - -/* genPoly: - * Generate polyomino info from graph. - * We add all cells covered partially by the bounding box of the - * node. If doSplines is true and an edge has a spline, we use the - * polyline determined by the control point. Otherwise, - * we use each cell crossed by a straight edge between the head and tail. - * If mode = l_clust, we use the graph's GD_clust array to treat the - * top level clusters like large nodes. - * Returns 0 if okay. - */ -static int -genPoly(Agraph_t * root, Agraph_t * g, ginfo * info, - int ssize, pack_info * pinfo, point center) -{ - PointSet *ps; - int W, H; - point LL, UR; - point pt, s2; - pointf ptf; - Agraph_t *eg; /* graph containing edges */ - Agnode_t *n; - Agedge_t *e; - int x, y; - int dx, dy; - graph_t *subg; - int margin = pinfo->margin; - int doSplines = pinfo->doSplines; - box bb; - - if (root) - eg = root; - else - eg = g; - - ps = newPS(); - dx = center.x - ROUND(GD_bb(g).LL.x); - dy = center.y - ROUND(GD_bb(g).LL.y); - - if (pinfo->mode == l_clust) { - int i; - void **alg; - - /* backup the alg data */ - alg = N_GNEW(agnnodes(g), void *); - for (i = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) { - alg[i++] = ND_alg(n); - ND_alg(n) = 0; - } - - /* do bbox of top clusters */ - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - BF2B(GD_bb(subg), bb); - if ((bb.UR.x > bb.LL.x) && (bb.UR.y > bb.LL.y)) { - MOVEPT(bb.LL); - MOVEPT(bb.UR); - bb.LL.x -= margin; - bb.LL.y -= margin; - bb.UR.x += margin; - bb.UR.y += margin; - CELL(bb.LL, ssize); - CELL(bb.UR, ssize); - - for (x = bb.LL.x; x <= bb.UR.x; x++) - for (y = bb.LL.y; y <= bb.UR.y; y++) - addPS(ps, x, y); - - /* note which nodes are in clusters */ - for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) - ND_clust(n) = subg; - } - } - - /* now do remaining nodes and edges */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ptf = coord(n); - PF2P(ptf, pt); - MOVEPT(pt); - if (!ND_clust(n)) { /* n is not in a top-level cluster */ - s2.x = margin + ND_xsize(n) / 2; - s2.y = margin + ND_ysize(n) / 2; - LL = sub_point(pt, s2); - UR = add_point(pt, s2); - CELL(LL, ssize); - CELL(UR, ssize); - - for (x = LL.x; x <= UR.x; x++) - for (y = LL.y; y <= UR.y; y++) - addPS(ps, x, y); - - CELL(pt, ssize); - for (e = agfstout(eg, n); e; e = agnxtout(eg, e)) { - fillEdge(e, pt, ps, dx, dy, ssize, doSplines); - } - } else { - CELL(pt, ssize); - for (e = agfstout(eg, n); e; e = agnxtout(eg, e)) { - if (ND_clust(n) == ND_clust(aghead(e))) - continue; - fillEdge(e, pt, ps, dx, dy, ssize, doSplines); - } - } - } - - /* restore the alg data */ - for (i = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_alg(n)= alg[i++]; - } - free(alg); - - } else - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ptf = coord(n); - PF2P(ptf, pt); - MOVEPT(pt); - s2.x = margin + ND_xsize(n) / 2; - s2.y = margin + ND_ysize(n) / 2; - LL = sub_point(pt, s2); - UR = add_point(pt, s2); - CELL(LL, ssize); - CELL(UR, ssize); - - for (x = LL.x; x <= UR.x; x++) - for (y = LL.y; y <= UR.y; y++) - addPS(ps, x, y); - - CELL(pt, ssize); - for (e = agfstout(eg, n); e; e = agnxtout(eg, e)) { - fillEdge(e, pt, ps, dx, dy, ssize, doSplines); - } - } - - info->cells = pointsOf(ps); - info->nc = sizeOf(ps); - W = GRID(GD_bb(g).UR.x - GD_bb(g).LL.x + 2 * margin, ssize); - H = GRID(GD_bb(g).UR.y - GD_bb(g).LL.y + 2 * margin, ssize); - info->perim = W + H; - - if (Verbose > 2) { - int i; - fprintf(stderr, "%s no. cells %d W %d H %d\n", - agnameof(g), info->nc, W, H); - for (i = 0; i < info->nc; i++) - fprintf(stderr, " %d %d cell\n", info->cells[i].x, - info->cells[i].y); - } - - freePS(ps); - return 0; -} - -/* fits: - * Check if polyomino fits at given point. - * If so, add cells to pointset, store point in place and return true. - */ -static int -fits(int x, int y, ginfo * info, PointSet * ps, point * place, int step, boxf* bbs) -{ - point *cells = info->cells; - int n = info->nc; - point cell; - int i; - point LL; - - for (i = 0; i < n; i++) { - cell = *cells; - cell.x += x; - cell.y += y; - if (inPS(ps, cell)) - return 0; - cells++; - } - - PF2P(bbs[info->index].LL, LL); - place->x = step * x - LL.x; - place->y = step * y - LL.y; - - cells = info->cells; - for (i = 0; i < n; i++) { - cell = *cells; - cell.x += x; - cell.y += y; - insertPS(ps, cell); - cells++; - } - - if (Verbose >= 2) - fprintf(stderr, "cc (%d cells) at (%d,%d) (%d,%d)\n", n, x, y, - place->x, place->y); - return 1; -} - -/* placeFixed: - * Position fixed graph. Store final translation and - * fill polyomino set. Note that polyomino set for the - * graph is constructed where it will be. - */ -static void -placeFixed(ginfo * info, PointSet * ps, point * place, point center) -{ - point *cells = info->cells; - int n = info->nc; - int i; - - place->x = -center.x; - place->y = -center.y; - - for (i = 0; i < n; i++) { - insertPS(ps, *cells++); - } - - if (Verbose >= 2) - fprintf(stderr, "cc (%d cells) at (%d,%d)\n", n, place->x, - place->y); -} - -/* placeGraph: - * Search for points on concentric "circles" out - * from the origin. Check if polyomino can be placed - * with bounding box origin at point. - * First graph (i == 0) is centered on the origin if possible. - */ -static void -placeGraph(int i, ginfo * info, PointSet * ps, point * place, int step, - int margin, boxf* bbs) -{ - int x, y; - int W, H; - int bnd; - boxf bb = bbs[info->index]; - - if (i == 0) { - W = GRID(bb.UR.x - bb.LL.x + 2 * margin, step); - H = GRID(bb.UR.y - bb.LL.y + 2 * margin, step); - if (fits(-W / 2, -H / 2, info, ps, place, step, bbs)) - return; - } - - if (fits(0, 0, info, ps, place, step, bbs)) - return; - W = ceil(bb.UR.x - bb.LL.x); - H = ceil(bb.UR.y - bb.LL.y); - if (W >= H) { - for (bnd = 1;; bnd++) { - x = 0; - y = -bnd; - for (; x < bnd; x++) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; y < bnd; y++) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; x > -bnd; x--) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; y > -bnd; y--) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; x < 0; x++) - if (fits(x, y, info, ps, place, step, bbs)) - return; - } - } else { - for (bnd = 1;; bnd++) { - y = 0; - x = -bnd; - for (; y > -bnd; y--) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; x < bnd; x++) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; y < bnd; y++) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; x > -bnd; x--) - if (fits(x, y, info, ps, place, step, bbs)) - return; - for (; y > 0; y--) - if (fits(x, y, info, ps, place, step, bbs)) - return; - } - } -} - -#ifdef DEBUG -void dumpp(ginfo * info, char *pfx) -{ - point *cells = info->cells; - int i, c_cnt = info->nc; - - fprintf(stderr, "%s\n", pfx); - for (i = 0; i < c_cnt; i++) { - fprintf(stderr, "%d %d box\n", cells[i].x, cells[i].y); - } -} -#endif - -static packval_t* userVals; - -/* ucmpf; - * Sort by user values. - */ -static int ucmpf(const void *X, const void *Y) -{ - ainfo* x = *(ainfo **) X; - ainfo* y = *(ainfo **) Y; - - int dX = userVals[x->index]; - int dY = userVals[y->index]; - if (dX > dY) return 1; - else if (dX < dY) return -1; - else return 0; -} - -/* acmpf; - * Sort by height + width - */ -static int acmpf(const void *X, const void *Y) -{ - ainfo* x = *(ainfo **) X; - ainfo* y = *(ainfo **) Y; -#if 0 - if (x->height < y->height) return 1; - else if (x->height > y->height) return -1; - else if (x->width < y->width) return 1; - else if (x->width > y->width) return -1; - else return 0; -#endif - double dX = x->height + x->width; - double dY = y->height + y->width; - if (dX < dY) return 1; - else if (dX > dY) return -1; - else return 0; -} - -#define INC(m,c,r) \ - if (m){ c++; if (c == nc) { c = 0; r++; } } \ - else { r++; if (r == nr) { r = 0; c++; } } - -/* arrayRects: - */ -static point * -arrayRects (int ng, boxf* gs, pack_info* pinfo) -{ - int i; - int nr = 0, nc; - int r, c; - ainfo *info; - ainfo *ip; - ainfo **sinfo; - double* widths; - double* heights; - double v, wd, ht; - point* places = N_NEW(ng, point); - boxf bb; - int sz, rowMajor; - - /* set up no. of rows and columns */ - sz = pinfo->sz; - if (pinfo->flags & PK_COL_MAJOR) { - rowMajor = 0; - if (sz > 0) { - nr = sz; - nc = (ng + (nr-1))/nr; - } - else { - nr = ceil(sqrt(ng)); - nc = (ng + (nr-1))/nr; - } - } - else { - rowMajor = 1; - if (sz > 0) { - nc = sz; - nr = (ng + (nc-1))/nc; - } - else { - nc = ceil(sqrt(ng)); - nr = (ng + (nc-1))/nc; - } - } - if (Verbose) - fprintf (stderr, "array packing: %s %d rows %d columns\n", (rowMajor?"row major":"column major"), nr, nc); - widths = N_NEW(nc+1, double); - heights = N_NEW(nr+1, double); - - ip = info = N_NEW(ng, ainfo); - for (i = 0; i < ng; i++, ip++) { - bb = gs[i]; - ip->width = bb.UR.x - bb.LL.x + pinfo->margin; - ip->height = bb.UR.y - bb.LL.y + pinfo->margin; - ip->index = i; - } - - sinfo = N_NEW(ng, ainfo*); - for (i = 0; i < ng; i++) { - sinfo[i] = info + i; - } - - if (pinfo->vals) { - userVals = pinfo->vals; - qsort(sinfo, ng, sizeof(ainfo *), ucmpf); - } - else if (!(pinfo->flags & PK_INPUT_ORDER)) { - qsort(sinfo, ng, sizeof(ainfo *), acmpf); - } - - /* compute column widths and row heights */ - r = c = 0; - for (i = 0; i < ng; i++, ip++) { - ip = sinfo[i]; - widths[c] = MAX(widths[c],ip->width); - heights[r] = MAX(heights[r],ip->height); - INC(rowMajor,c,r); - } - - /* convert widths and heights to positions */ - wd = 0; - for (i = 0; i <= nc; i++) { - v = widths[i]; - widths[i] = wd; - wd += v; - } - - ht = 0; - for (i = nr; 0 < i; i--) { - v = heights[i-1]; - heights[i] = ht; - ht += v; - } - heights[0] = ht; - - /* position rects */ - r = c = 0; - for (i = 0; i < ng; i++, ip++) { - int idx; - ip = sinfo[i]; - idx = ip->index; - bb = gs[idx]; - if (pinfo->flags & PK_LEFT_ALIGN) - places[idx].x = widths[c]; - else if (pinfo->flags & PK_RIGHT_ALIGN) - places[idx].x = widths[c+1] - (bb.UR.x - bb.LL.x); - else - places[idx].x = (widths[c] + widths[c+1] - bb.UR.x - bb.LL.x)/2.0; - if (pinfo->flags & PK_TOP_ALIGN) - places[idx].y = heights[r] - (bb.UR.y - bb.LL.y); - else if (pinfo->flags & PK_BOT_ALIGN) - places[idx].y = heights[r+1]; - else - places[idx].y = (heights[r] + heights[r+1] - bb.UR.y - bb.LL.y)/2.0; - INC(rowMajor,c,r); - } - - free (info); - free (sinfo); - free (widths); - free (heights); - return places; -} - -static point* -polyRects(int ng, boxf* gs, pack_info * pinfo) -{ - int stepSize; - ginfo *info; - ginfo **sinfo; - point *places; - Dict_t *ps; - int i; - point center; - - /* calculate grid size */ - stepSize = computeStep(ng, gs, pinfo->margin); - if (Verbose) - fprintf(stderr, "step size = %d\n", stepSize); - if (stepSize <= 0) - return 0; - - /* generate polyomino cover for the rectangles */ - center.x = center.y = 0; - info = N_NEW(ng, ginfo); - for (i = 0; i < ng; i++) { - info[i].index = i; - genBox(gs[i], info + i, stepSize, pinfo->margin, center, ""); - } - - /* sort */ - sinfo = N_NEW(ng, ginfo *); - for (i = 0; i < ng; i++) { - sinfo[i] = info + i; - } - qsort(sinfo, ng, sizeof(ginfo *), cmpf); - - ps = newPS(); - places = N_NEW(ng, point); - for (i = 0; i < ng; i++) - placeGraph(i, sinfo[i], ps, places + (sinfo[i]->index), - stepSize, pinfo->margin, gs); - - free(sinfo); - for (i = 0; i < ng; i++) - free(info[i].cells); - free(info); - freePS(ps); - - if (Verbose > 1) - for (i = 0; i < ng; i++) - fprintf(stderr, "pos[%d] %d %d\n", i, places[i].x, - places[i].y); - - return places; -} - -/* polyGraphs: - * Given a collection of graphs, reposition them in the plane - * to not overlap but pack "nicely". - * ng is the number of graphs - * gs is a pointer to an array of graph pointers - * root gives the graph containing the edges; if null, the function - * looks in each graph in gs for its edges - * pinfo->margin gives the amount of extra space left around nodes in points - * If pinfo->doSplines is true, use edge splines, if computed, - * in calculating polyomino. - * pinfo->mode specifies the packing granularity and technique: - * l_node : pack at the node/cluster level - * l_graph : pack at the bounding box level - * Returns array of points to which graphs should be translated; - * the array needs to be freed; - * Returns NULL if problem occur or if ng == 0. - * - * Depends on graph fields GD_bb, node fields ND_pos(inches), ND_xsize and - * ND_ysize, and edge field ED_spl. - * - * FIX: fixed mode does not always work. The fixed ones get translated - * back to be centered on the origin. - * FIX: Check CELL and GRID macros for negative coordinates - * FIX: Check width and height computation - */ -static point* -polyGraphs(int ng, Agraph_t ** gs, Agraph_t * root, pack_info * pinfo) -{ - int stepSize; - ginfo *info; - ginfo **sinfo; - point *places; - Dict_t *ps; - int i; - boolean *fixed = pinfo->fixed; - int fixed_cnt = 0; - box bb, fixed_bb = { {0, 0}, {0, 0} }; - point center; - boxf* bbs; - - if (ng <= 0) - return 0; - - /* update bounding box info for each graph */ - /* If fixed, compute bbox of fixed graphs */ - for (i = 0; i < ng; i++) { - Agraph_t *g = gs[i]; - compute_bb(g); - if (fixed && fixed[i]) { - BF2B(GD_bb(g), bb); - if (fixed_cnt) { - fixed_bb.LL.x = MIN(bb.LL.x, fixed_bb.LL.x); - fixed_bb.LL.y = MIN(bb.LL.y, fixed_bb.LL.y); - fixed_bb.UR.x = MAX(bb.UR.x, fixed_bb.UR.x); - fixed_bb.UR.y = MAX(bb.UR.y, fixed_bb.UR.y); - } else - fixed_bb = bb; - fixed_cnt++; - } - if (Verbose > 2) { - fprintf(stderr, "bb[%s] %.5g %.5g %.5g %.5g\n", agnameof(g), - GD_bb(g).LL.x, GD_bb(g).LL.y, - GD_bb(g).UR.x, GD_bb(g).UR.y); - } - } - - /* calculate grid size */ - bbs = N_GNEW(ng, boxf); - for (i = 0; i < ng; i++) - bbs[i] = GD_bb(gs[i]); - stepSize = computeStep(ng, bbs, pinfo->margin); - if (Verbose) - fprintf(stderr, "step size = %d\n", stepSize); - if (stepSize <= 0) - return 0; - - /* generate polyomino cover for the graphs */ - if (fixed) { - center.x = (fixed_bb.LL.x + fixed_bb.UR.x) / 2; - center.y = (fixed_bb.LL.y + fixed_bb.UR.y) / 2; - } else - center.x = center.y = 0; - info = N_NEW(ng, ginfo); - for (i = 0; i < ng; i++) { - Agraph_t *g = gs[i]; - info[i].index = i; - if (pinfo->mode == l_graph) - genBox(GD_bb(g), info + i, stepSize, pinfo->margin, center, agnameof(g)); - else if (genPoly(root, gs[i], info + i, stepSize, pinfo, center)) { - return 0; - } - } - - /* sort */ - sinfo = N_NEW(ng, ginfo *); - for (i = 0; i < ng; i++) { - sinfo[i] = info + i; - } - qsort(sinfo, ng, sizeof(ginfo *), cmpf); - - ps = newPS(); - places = N_NEW(ng, point); - if (fixed) { - for (i = 0; i < ng; i++) { - if (fixed[i]) - placeFixed(sinfo[i], ps, places + (sinfo[i]->index), - center); - } - for (i = 0; i < ng; i++) { - if (!fixed[i]) - placeGraph(i, sinfo[i], ps, places + (sinfo[i]->index), - stepSize, pinfo->margin, bbs); - } - } else { - for (i = 0; i < ng; i++) - placeGraph(i, sinfo[i], ps, places + (sinfo[i]->index), - stepSize, pinfo->margin, bbs); - } - - free(sinfo); - for (i = 0; i < ng; i++) - free(info[i].cells); - free(info); - freePS(ps); - free (bbs); - - if (Verbose > 1) - for (i = 0; i < ng; i++) - fprintf(stderr, "pos[%d] %d %d\n", i, places[i].x, - places[i].y); - - return places; -} - -point *putGraphs(int ng, Agraph_t ** gs, Agraph_t * root, - pack_info * pinfo) -{ - int i, v; - boxf* bbs; - Agraph_t* g; - point* pts = NULL; - char* s; - - if (ng <= 0) return NULL; - - if (pinfo->mode <= l_graph) - return polyGraphs (ng, gs, root, pinfo); - - bbs = N_GNEW(ng, boxf); - - for (i = 0; i < ng; i++) { - g = gs[i]; - compute_bb(g); - bbs[i] = GD_bb(g); - } - - if (pinfo->mode == l_array) { - if (pinfo->flags & PK_USER_VALS) { - pinfo->vals = N_NEW(ng, packval_t); - for (i = 0; i < ng; i++) { - s = agget (gs[i], "sortv"); - if (s && (sscanf (s, "%d", &v) > 0) && (v >= 0)) - pinfo->vals[i] = v; - } - - } - pts = arrayRects (ng, bbs, pinfo); - if (pinfo->flags & PK_USER_VALS) - free (pinfo->vals); - } - - free (bbs); - - return pts; -} - -point * -putRects(int ng, boxf* bbs, pack_info* pinfo) -{ - if (ng <= 0) return NULL; - if ((pinfo->mode == l_node) || (pinfo->mode == l_clust)) return NULL; - if (pinfo->mode == l_graph) - return polyRects (ng, bbs, pinfo); - else if (pinfo->mode == l_array) - return arrayRects (ng, bbs, pinfo); - else - return NULL; -} - -/* packRects: - * Packs rectangles. - * ng - number of rectangles - * bbs - array of rectangles - * info - parameters used in packing - * This decides where to layout the rectangles and repositions - * the bounding boxes. - * - * Returns 0 on success. - */ -int -packRects(int ng, boxf* bbs, pack_info* pinfo) -{ - int i; - point *pp; - boxf bb; - point p; - - if (ng < 0) return -1; - if (ng <= 1) return 0; - - pp = putRects(ng, bbs, pinfo); - if (!pp) - return 1; - - for (i = 0; i < ng; i++) { - bb = bbs[i]; - p = pp[i]; - bb.LL.x += p.x; - bb.UR.x += p.x; - bb.LL.y += p.y; - bb.UR.y += p.y; - bbs[i] = bb; - } - free(pp); - return 0; -} - -/* shiftEdge: - * Translate all of the edge components by the given offset. - */ -static void shiftEdge(Agedge_t * e, int dx, int dy) -{ - int j, k; - bezier bz; - - if (ED_label(e)) - MOVEPT(ED_label(e)->pos); - if (ED_xlabel(e)) - MOVEPT(ED_xlabel(e)->pos); - if (ED_head_label(e)) - MOVEPT(ED_head_label(e)->pos); - if (ED_tail_label(e)) - MOVEPT(ED_tail_label(e)->pos); - - if (ED_spl(e) == NULL) - return; - - for (j = 0; j < ED_spl(e)->size; j++) { - bz = ED_spl(e)->list[j]; - for (k = 0; k < bz.size; k++) - MOVEPT(bz.list[k]); - if (bz.sflag) - MOVEPT(ED_spl(e)->list[j].sp); - if (bz.eflag) - MOVEPT(ED_spl(e)->list[j].ep); - } -} - -/* shiftGraph: - */ -static void shiftGraph(Agraph_t * g, int dx, int dy) -{ - graph_t *subg; - boxf bb = GD_bb(g); - int i; - - bb = GD_bb(g); - bb.LL.x += dx; - bb.UR.x += dx; - bb.LL.y += dy; - bb.UR.y += dy; - GD_bb(g) = bb; - - if (GD_label(g) && GD_label(g)->set) - MOVEPT(GD_label(g)->pos); - - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - shiftGraph(subg, dx, dy); - } -} - -/* shiftGraphs: - * The function takes ng graphs gs and a similar - * number of points pp and translates each graph so - * that the lower left corner of the bounding box of graph gs[i] is at - * point ps[i]. To do this, it assumes the bb field in - * Agraphinfo_t accurately reflects the current graph layout. - * The graph is repositioned by translating the pos and coord fields of - * each node appropriately. - * - * If doSplines is non-zero, the function also translates splines coordinates - * of each edge, if they have been calculated. In addition, edge labels are - * repositioned. - * - * If root is non-NULL, it is taken as the root graph of - * the graphs in gs and is used to find the edges. Otherwise, the function - * uses the edges found in each graph gs[i]. - * - * It returns 0 on success. - * - * This function uses the bb field in Agraphinfo_t, - * the pos and coord fields in nodehinfo_t and - * the spl field in Aedgeinfo_t. - */ -int -shiftGraphs(int ng, Agraph_t ** gs, point * pp, Agraph_t * root, - int doSplines) -{ - int i; - int dx, dy; - double fx, fy; - point p; - Agraph_t *g; - Agraph_t *eg; - Agnode_t *n; - Agedge_t *e; - - if (ng <= 0) - return abs(ng); - - for (i = 0; i < ng; i++) { - g = gs[i]; - if (root) - eg = root; - else - eg = g; - p = pp[i]; - dx = p.x; - dy = p.y; - fx = PS2INCH(dx); - fy = PS2INCH(dy); - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_pos(n)[0] += fx; - ND_pos(n)[1] += fy; - MOVEPT(ND_coord(n)); - if (ND_xlabel(n)) { - MOVEPT(ND_xlabel(n)->pos); - } - if (doSplines) { - for (e = agfstout(eg, n); e; e = agnxtout(eg, e)) - shiftEdge(e, dx, dy); - } - } - shiftGraph(g, dx, dy); - } - - return 0; -} - -/* packGraphs: - * Packs graphs. - * ng - number of graphs - * gs - pointer to array of graphs - * root - graph used to find edges - * info - parameters used in packing - * info->doSplines - if true, use already computed spline control points - * This decides where to layout the graphs and repositions the graph's - * position info. - * - * Returns 0 on success. - */ -int packGraphs(int ng, Agraph_t ** gs, Agraph_t * root, pack_info * info) -{ - int ret; - point *pp = putGraphs(ng, gs, root, info); - - if (!pp) - return 1; - ret = shiftGraphs(ng, gs, pp, root, info->doSplines); - free(pp); - return ret; -} - -/* packSubgraphs: - * Packs subgraphs of given root graph, then recalculates root's bounding box. - * Note that it does not recompute subgraph bounding boxes. - * Cluster bounding boxes are recomputed in shiftGraphs. - */ -int -packSubgraphs(int ng, Agraph_t ** gs, Agraph_t * root, pack_info * info) -{ - int ret; - - ret = packGraphs(ng, gs, root, info); - if (ret == 0) { - int i, j; - boxf bb; - graph_t* g; - - compute_bb(root); - bb = GD_bb(root); - for (i = 0; i < ng; i++) { - g = gs[i]; - for (j = 1; j <= GD_n_cluster(g); j++) { - EXPANDBB(bb,GD_bb(GD_clust(g)[j])); - } - } - GD_bb(root) = bb; - } - return ret; -} - -/* pack_graph: - * Pack subgraphs followed by postprocessing. - */ -int -pack_graph(int ng, Agraph_t** gs, Agraph_t* root, boolean* fixed) -{ - int ret; - pack_info info; - - getPackInfo(root, l_graph, CL_OFFSET, &info); - info.doSplines = 1; - info.fixed = fixed; - ret = packSubgraphs(ng, gs, root, &info); - if (ret == 0) dotneato_postprocess (root); - return ret; -} - -#define ARRAY "array" -#define ASPECT "aspect" -#define SLEN(s) (sizeof(s)/sizeof(char) - 1) - -static char* -chkFlags (char* p, pack_info* pinfo) -{ - int c, more; - - if (*p != '_') return p; - p++; - more = 1; - while (more && (c = *p)) { - switch (c) { - case 'c' : - pinfo->flags |= PK_COL_MAJOR; - p++; - break; - case 'i' : - pinfo->flags |= PK_INPUT_ORDER; - p++; - break; - case 'u' : - pinfo->flags |= PK_USER_VALS; - p++; - break; - case 't' : - pinfo->flags |= PK_TOP_ALIGN; - p++; - break; - case 'b' : - pinfo->flags |= PK_BOT_ALIGN; - p++; - break; - case 'l' : - pinfo->flags |= PK_LEFT_ALIGN; - p++; - break; - case 'r' : - pinfo->flags |= PK_RIGHT_ALIGN; - p++; - break; - default : - more = 0; - break; - } - } - return p; -} - -static char* -mode2Str (pack_mode m) -{ - char *s; - - switch (m) { - case l_clust: - s = "cluster"; - break; - case l_node: - s = "node"; - break; - case l_graph: - s = "graph"; - break; - case l_array: - s = "array"; - break; - case l_aspect: - s = "aspect"; - break; - case l_undef: - default: - s = "undefined"; - break; - } - return s; -} - -/* parsePackModeInfo; - * Return pack_mode of graph using "packmode" attribute. - * If not defined, return dflt - */ -pack_mode -parsePackModeInfo(char* p, pack_mode dflt, pack_info* pinfo) -{ - float v; - int i; - - assert (pinfo); - pinfo->flags = 0; - pinfo->mode = dflt; - pinfo->sz = 0; - pinfo->vals = NULL; - if (p && *p) { - switch (*p) { - case 'a': - if (strneq(p, ARRAY, SLEN(ARRAY))) { - pinfo->mode = l_array; - p += SLEN(ARRAY); - p = chkFlags (p, pinfo); - if ((sscanf (p, "%d", &i)>0) && (i > 0)) - pinfo->sz = i; - } - else if (strneq(p, ASPECT, SLEN(ASPECT))) { - pinfo->mode = l_aspect; - if ((sscanf (p + SLEN(ARRAY), "%f", &v)>0) && (v > 0)) - pinfo->aspect = v; - else - pinfo->aspect = 1; - } - break; -#ifdef NOT_IMPLEMENTED - case 'b': - if (streq(p, "bisect")) - pinfo->mode = l_bisect; - break; -#endif - case 'c': - if (streq(p, "cluster")) - pinfo->mode = l_clust; - break; - case 'g': - if (streq(p, "graph")) - pinfo->mode = l_graph; - break; -#ifdef NOT_IMPLEMENTED - case 'h': - if (streq(p, "hull")) - pinfo->mode = l_hull; - break; -#endif - case 'n': - if (streq(p, "node")) - pinfo->mode = l_node; - break; -#ifdef NOT_IMPLEMENTED - case 't': - if (streq(p, "tile")) - pinfo->mode = l_tile; - break; -#endif - } - } - - if (Verbose) { - fprintf (stderr, "pack info:\n"); - fprintf (stderr, " mode %s\n", mode2Str(pinfo->mode)); - if (pinfo->mode == l_aspect) - fprintf (stderr, " aspect %f\n", pinfo->aspect); - fprintf (stderr, " size %d\n", pinfo->sz); - fprintf (stderr, " flags %d\n", pinfo->flags); - } - return pinfo->mode; -} - -/* getPackModeInfo; - * Return pack_mode of graph using "packmode" attribute. - * If not defined, return dflt - */ -pack_mode -getPackModeInfo(Agraph_t * g, pack_mode dflt, pack_info* pinfo) -{ - return parsePackModeInfo (agget(g, "packmode"), dflt, pinfo); -} - -pack_mode -getPackMode(Agraph_t * g, pack_mode dflt) -{ - pack_info info; - return getPackModeInfo (g, dflt, &info); -} - -/* getPack: - * Return "pack" attribute of g. - * If not defined or negative, return not_def. - * If defined but not specified, return dflt. - */ -int getPack(Agraph_t * g, int not_def, int dflt) -{ - char *p; - int i; - int v = not_def; - - if ((p = agget(g, "pack"))) { - if ((sscanf(p, "%d", &i) == 1) && (i >= 0)) - v = i; - else if ((*p == 't') || (*p == 'T')) - v = dflt; - } - - return v; -} - -pack_mode -getPackInfo(Agraph_t * g, pack_mode dflt, int dfltMargin, pack_info* pinfo) -{ - assert (pinfo); - - pinfo->margin = getPack(g, dfltMargin, dfltMargin); - if (Verbose) { - fprintf (stderr, " margin %d\n", pinfo->margin); - } - pinfo->doSplines = 0; - pinfo->fixed = 0; - getPackModeInfo(g, dflt, pinfo); - - return pinfo->mode; -} - - diff --git a/internal/ccall/pack/pack.h b/internal/ccall/pack/pack.h deleted file mode 100644 index eba152f..0000000 --- a/internal/ccall/pack/pack.h +++ /dev/null @@ -1,94 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - - -#ifndef _PACK_H -#define _PACK_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#include "types.h" - -/* Type indicating granularity and method - * l_undef - unspecified - * l_node - polyomino using nodes and edges - * l_clust - polyomino using nodes and edges and top-level clusters - * (assumes ND_clust(n) unused by application) - * l_graph - polyomino using computer graph bounding box - * l_array - array based on graph bounding boxes - * l_aspect - tiling based on graph bounding boxes preserving aspect ratio - * l_hull - polyomino using convex hull (unimplemented) - * l_tile - tiling using graph bounding box (unimplemented) - * l_bisect - alternate bisection using graph bounding box (unimplemented) - */ - typedef enum { l_undef, l_clust, l_node, l_graph, l_array, l_aspect } pack_mode; - -#define PK_COL_MAJOR (1 << 0) -#define PK_USER_VALS (1 << 1) -#define PK_LEFT_ALIGN (1 << 2) -#define PK_RIGHT_ALIGN (1 << 3) -#define PK_TOP_ALIGN (1 << 4) -#define PK_BOT_ALIGN (1 << 5) -#define PK_INPUT_ORDER (1 << 6) - -typedef unsigned int packval_t; - - typedef struct { - float aspect; /* desired aspect ratio */ - int sz; /* row/column size size */ - unsigned int margin; /* margin left around objects, in points */ - int doSplines; /* use splines in constructing graph shape */ - pack_mode mode; /* granularity and method */ - boolean *fixed; /* fixed[i] == true implies g[i] should not be moved */ - packval_t* vals; /* for arrays, sort numbers */ - int flags; - } pack_info; - -/*visual studio*/ -#ifdef WIN32 -#ifndef GVC_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - - extern point *putRects(int ng, boxf* bbs, pack_info* pinfo); - extern int packRects(int ng, boxf* bbs, pack_info* pinfo); - - extern point *putGraphs(int, Agraph_t **, Agraph_t *, pack_info *); - extern int packGraphs(int, Agraph_t **, Agraph_t *, pack_info *); - extern int packSubgraphs(int, Agraph_t **, Agraph_t *, pack_info *); - extern int pack_graph(int ng, Agraph_t** gs, Agraph_t* root, boolean* fixed); - - extern int shiftGraphs(int, Agraph_t**, point*, Agraph_t*, int); - - extern pack_mode getPackMode(Agraph_t * g, pack_mode dflt); - extern int getPack(Agraph_t *, int not_def, int dflt); - extern pack_mode getPackInfo(Agraph_t * g, pack_mode dflt, int dfltMargin, pack_info*); - extern pack_mode getPackModeInfo(Agraph_t * g, pack_mode dflt, pack_info*); - extern pack_mode parsePackModeInfo(char* p, pack_mode dflt, pack_info* pinfo); - - extern int isConnected(Agraph_t *); - extern Agraph_t **ccomps(Agraph_t *, int *, char *); - extern Agraph_t **cccomps(Agraph_t *, int *, char *); - extern Agraph_t **pccomps(Agraph_t *, int *, char *, boolean *); - extern int nodeInduce(Agraph_t *); - extern Agraph_t *mapClust(Agraph_t *); -#undef extern -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/pack/ptest.c b/internal/ccall/pack/ptest.c deleted file mode 100644 index 99bc9b3..0000000 --- a/internal/ccall/pack/ptest.c +++ /dev/null @@ -1,414 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include "render.h" -#include "neatoprocs.h" -#include "pack.h" - -/* Test driver for libpack library. - * Input consists of graphs in dot format. - * If -c is not specified, the graphs must have pos information, - * typically the output of one of the layout programs using -Tdot. - * -c computes connected components of input graphs - * Otherwise, ptest packs the input graphs. - * -s causes all the input graphs to be combined - * into a single output graph, ready to be sent to neato -s -n2. - * Otherwise, each graph is output separately, but with the - * appropriately adjusted coordinates. - * -e causes the packing to not use edge splines, if any. - * If any input graph does not have spline info, -e goes into - * effect automatically. - * -m specifies the margin, in points, about each graph. - */ -char *Info[] = { - "ptest", /* Program */ - "1.0", /* Version */ - DATE /* Build Date */ -}; - -static int margin = 8; -static int doEdges = 1; -static int doComps = 0; -static int verbose = 0; -static char **Files = 0; -static int nFiles = 0; -static int single = 0; - -static char *useString = "Usage: ptest [-cesv?] [-m ] \n\ - -c - components\n\ - -e - no edges\n\ - -m n - set margine\n\ - -v - verbose\n\ - -s - single graph\n\ - -? - print usage\n\ -If no files are specified, stdin is used\n"; - -static void usage(int v) -{ - printf(useString); - exit(v); -} - -static void init(int argc, char *argv[]) -{ - int c; - - aginit(); - while ((c = getopt(argc, argv, ":escvm:?")) != -1) { - switch (c) { - case 'e': - doEdges = 0; - break; - case 'c': - doComps = 1; - break; - case 'm': - margin = atoi(optarg); - break; - case 's': - single = 1; - break; - case 'v': - verbose = 1; - Verbose = 1; - break; - case '?': - if (optopt == '?') - usage(0); - else - fprintf(stderr, - "ptest: option -%c unrecognized - ignored\n", c); - break; - } - } - argv += optind; - argc -= optind; - - if (argc) { - Files = argv; - nFiles = argc; - } - -} - -static int numFields(char *pos) -{ - int cnt = 0; - char c; - - while (isspace(*pos)) - pos++; - while (*pos) { - cnt++; - while ((c = *pos) && !isspace(c)) - pos++; /* skip token */ - while (isspace(*pos)) - pos++; - } - return cnt; -} - -static point *user_spline(attrsym_t * symptr, edge_t * e, int *np) -{ - char *pos; - int i, n, nc; - point *ps = 0; - point *pp; - double x, y; - - if (symptr == NULL) - return 0; - pos = agxget(e, symptr->index); - if (*pos == '\0') - return 0; - n = numFields(pos); - *np = n; - if (n > 1) { - ps = ALLOC(n, 0, point); - pp = ps; - while (n) { - i = sscanf(pos, "%lf,%lf%n", &x, &y, &nc); - if (i < 2) { - free(ps); - ps = 0; - break; - } - pos = pos + nc; - pp->x = (int) x; - pp->y = (int) y; - pp++; - n--; - } - } - return ps; -} - -static void initPos(Agraph_t * g) -{ - Agnode_t *n; - Agedge_t *e; - double *pvec; - char *p; - point *sp; - int pn; - attrsym_t *N_pos = agfindnodeattr(g, "pos"); - attrsym_t *E_pos = agfindedgeattr(g, "pos"); - - assert(N_pos); - if (!E_pos) { - if (doEdges) - fprintf(stderr, "Warning: turning off doEdges, graph %s\n", - g->name); - doEdges = 0; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - pvec = ND_pos(n); - p = agxget(n, N_pos->index); - if (p[0] && (sscanf(p, "%lf,%lf", pvec, pvec + 1) == 2)) { - int i; - for (i = 0; i < NDIM; i++) - pvec[i] = pvec[i] / PSinputscale; - } else { - fprintf(stderr, "could not find pos for node %s in graph %s\n", - n->name, g->name); - exit(1); - } - ND_coord_i(n).x = POINTS(ND_pos(n)[0]); - ND_coord_i(n).y = POINTS(ND_pos(n)[1]); - } - - if (doEdges) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - if ((sp = user_spline(E_pos, e, &pn)) != 0) { - clip_and_install(e, sp, pn); - free(sp); - } else { - fprintf(stderr, - "Missing edge pos for edge %s - %s in graph %s\n", - n->name, e->head->name, g->name); - exit(1); - } - } - } - } -} - -static void ptest_nodesize(node_t * n, boolean flip) -{ - int w; - - w = ND_xsize(n) = POINTS(ND_width(n)); - ND_lw(n) = ND_rw(n) = w / 2; - ND_ht(n) = ND_ysize(n) = POINTS(ND_height(n)); -} - - -static void ptest_initNode(node_t * n) -{ - char *str; - ND_width(n) = - late_double(n, N_width, DEFAULT_NODEWIDTH, MIN_NODEWIDTH); - ND_height(n) = - late_double(n, N_height, DEFAULT_NODEHEIGHT, MIN_NODEWIDTH); - if (N_label == NULL) - str = NODENAME_ESC; - else - str = agxget(n, N_label->index); - str = strdup_and_subst(str, NODENAME_ESC, n->name); - ND_label(n) = make_label(str, - late_double(n, N_fontsize, DEFAULT_FONTSIZE, - MIN_FONTSIZE), late_nnstring(n, - N_fontname, - DEFAULT_FONTNAME), - late_nnstring(n, N_fontcolor, DEFAULT_COLOR), - n->graph); - ND_shape(n) = bind_shape(late_nnstring(n, N_shape, DEFAULT_NODESHAPE)); - ND_shape(n)->initfn(n); /* ### need to quantize ? */ - ptest_nodesize(n, n->GD_flip(graph)); - - -} - -static void ptest_initGraph(graph_t * g) -{ - node_t *n; - /* edge_t *e; */ - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) - ptest_initNode(n); -/* - for (n = agfstnode(g); n; n = agnxtnode(g,n)) { - for (e = agfstout(g,n); e; e = agnxtout(g,e)) ptest_initEdge(e); - } -*/ -} - -static void dumpG(graph_t * g) -{ - node_t *n; - /* point p; */ - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - fprintf(stderr, " node %s \n", n->name); - - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - fprintf(stderr, " %s - %s \n", e->tail->name, e->head->name); - } -#ifdef OLD - p = coord(n); - fprintf(stderr, " %s pos (%f,%f) (%d,%d)\n", - n->name, ND_pos(n)[0], ND_pos(n)[1], p.x, p.y); - fprintf(stderr, " width %f height %f xsize %d ysize %d\n", - ND_width(n), ND_height(n), ND_xsize(n), ND_ysize(n)); -#endif - } -} - -static void copyPos(Agraph_t * g) -{ - Agnode_t *n; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_coord_i(n).x = POINTS(ND_pos(n)[0]); - ND_coord_i(n).y = POINTS(ND_pos(n)[1]); - } -} - -main(int argc, char *argv[]) -{ - Agraph_t **gs; - Agraph_t **ccs; - Agraph_t *g; - Agraph_t *gp; - char *fname; - FILE *fp; - int cnt; - int i; - - init(argc, argv); - if (!Files) { - fprintf(stderr, "No input files given\n"); - exit(1); - } - - PSinputscale = POINTS_PER_INCH; - if (doComps) { - if (verbose) - fprintf(stderr, "do Comps\n"); - while (fname = *Files++) { - fp = fopen(fname, "r"); - if (!fp) { - fprintf(stderr, "Could not open %s\n", fname); - continue; - } - g = agread(fp); - fclose(fp); - if (!g) { - fprintf(stderr, "Could not read graph\n"); - continue; - } - printf("%s %d nodes %d edges %sconnected\n", - g->name, agnnodes(g), agnedges(g), - (isConnected(g) ? "" : "not ")); - gs = ccomps(g, &cnt, "abc"); - for (i = 0; i < cnt; i++) { - gp = gs[i]; - printf(" %s %d nodes %d edges\n", gp->name, agnnodes(gp), - agnedges(gp)); - } - } - } else { - gs = N_GNEW(nFiles, Agraph_t *); - cnt = 0; - while (fname = Files[cnt]) { - fp = fopen(fname, "r"); - if (!fp) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - g = agread(fp); - fclose(fp); - if (!g) { - fprintf(stderr, "Could not read graph\n"); - exit(1); - } - if (!single) { - graph_init(g); - ptest_initGraph(g); - } - initPos(g); - /* if (Verbose) dumpG (g); */ - gs[cnt++] = g; - } - if (single) { - Agraph_t *root; - Agnode_t *n; - Agnode_t *np; - Agnode_t *tp; - Agnode_t *hp; - Agedge_t *e; - Agedge_t *ep; - root = agopen("root", 0); - agedgeattr(root, "pos", ""); - for (i = 0; i < cnt; i++) { - g = gs[i]; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (agfindnode(root, n->name)) { - fprintf(stderr, - "Error: node %s in graph %d (%s) previously added\n", - n->name, i, Files[i]); - exit(1); - } - np = agnode(root, n->name); - ND_pos(np)[0] = ND_pos(n)[0]; - ND_pos(np)[1] = ND_pos(n)[1]; - ND_coord_i(np).x = ND_coord_i(n).x; - ND_coord_i(np).y = ND_coord_i(n).y; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - tp = agfindnode(root, n->name); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - hp = agfindnode(root, e->head->name); - ep = agedge(root, tp, hp); - ED_spl(ep) = ED_spl(e); - } - } - } - graph_init(root); - ptest_initGraph(root); - ccs = ccomps(root, &cnt, 0); - packGraphs(cnt, ccs, root, margin, doEdges); - if (!doEdges) - copyPos(root); - else - State = GVSPLINES; - attach_attrs(root); - for (i = 0; i < cnt; i++) { - agdelete(root, ccs[i]); - } - agwrite(root, stdout); - } else { - packGraphs(cnt, gs, 0, margin, doEdges); - if (doEdges) - State = GVSPLINES; - for (i = 0; i < cnt; i++) { - if (!doEdges) - copyPos(gs[i]); - attach_attrs(gs[i]); - agwrite(gs[i], stdout); - } - } - } -} diff --git a/internal/ccall/patchwork.c b/internal/ccall/patchwork.c deleted file mode 100644 index 59ba6d4..0000000 --- a/internal/ccall/patchwork.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "patchwork/patchwork.c" -#include "patchwork/patchworkinit.c" -#include "patchwork/tree_map.c" diff --git a/internal/ccall/patchwork/dummy.go b/internal/ccall/patchwork/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/patchwork/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/patchwork/patchwork.c b/internal/ccall/patchwork/patchwork.c deleted file mode 100644 index 9de4b29..0000000 --- a/internal/ccall/patchwork/patchwork.c +++ /dev/null @@ -1,289 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include -#include "render.h" - -typedef struct treenode_t treenode_t; -struct treenode_t { - double area; - double child_area; - rectangle r; - treenode_t *leftchild, *rightsib; - union { - Agraph_t *subg; - Agnode_t *n; - } u; - int kind; - int n_children; -}; - -#define DFLT_SZ 1.0 -#define SCALE 1000.0 /* scale up so that 1 is a reasonable default size */ - -#ifdef DEBUG -void dumpTree (treenode_t* r, int ind) -{ - int i; - treenode_t* cp; - - for (i=0; i < ind; i++) fputs(" ", stderr); - fprintf (stderr, "%s (%f)\n", (r->kind == AGNODE?agnameof(r->u.n):agnameof(r->u.subg)), r->area); - for (cp = r->leftchild; cp; cp = cp->rightsib) - dumpTree (cp, ind+1); -} -#endif - -/* fullArea: - * Allow extra area for specified inset. Assume p->kind = AGRAPH - * and p->child_area is set. At present, inset is additive; we - * may want to allow a multiplicative inset as well. - */ -static double fullArea (treenode_t* p, attrsym_t* mp) -{ - double m = late_double (p->u.subg, mp, 0, 0); - if (m == 0) return p->child_area; - else { - double wid = (2.0*m + sqrt(p->child_area)); - return wid*wid; - } -} - -static double getArea (void* obj, attrsym_t* ap) -{ - double area = late_double (obj, ap, DFLT_SZ, 0); - if (area == 0) area = DFLT_SZ; - area *= SCALE; - return area; -} - -/* mkTreeNode: - */ -static treenode_t* mkTreeNode (Agnode_t* n, attrsym_t* ap) -{ - treenode_t *p = NEW(treenode_t); - - p->area = getArea (n, ap); - p->kind = AGNODE; - p->u.n = n; - - return p; -} - -#define INSERT(cp) if(!first) first=cp; if(prev) prev->rightsib=cp; prev=cp; - -/* mkTree: - * Recursively build tree from graph - * Pre-condition: agnnodes(g) != 0 - */ -static treenode_t *mkTree (Agraph_t * g, attrsym_t* gp, attrsym_t* ap, attrsym_t* mp) -{ - treenode_t *p = NEW(treenode_t); - Agraph_t *subg; - Agnode_t *n; - treenode_t *cp; - treenode_t *first = 0; - treenode_t *prev = 0; - int i, n_children = 0; - double area = 0; - - p->kind = AGRAPH; - p->u.subg = g; - - for (i = 1; i <= GD_n_cluster(g); i++) { - subg = GD_clust(g)[i]; - cp = mkTree (subg, gp, ap, mp); - n_children++; - area += cp->area; - INSERT(cp); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (SPARENT(n)) - continue; - cp = mkTreeNode (n, ap); - n_children++; - area += cp->area; - INSERT(cp); - SPARENT(n) = g; - } - - p->n_children = n_children; - if (n_children) { - p->child_area = area; - p->area = fullArea (p, mp); - } - else { - p->area = getArea (g, gp); - } - p->leftchild = first; - - return p; -} - -static int nodecmp (treenode_t** p0, treenode_t** p1) -{ - double diff = (*p0)->area - (*p1)->area; - - if (diff < 0) return 1; - else if (diff > 0) return -1; - else return 0; -} - -static void layoutTree(treenode_t * tree) -{ - rectangle *recs; - treenode_t** nodes; - double* areas_sorted; - int i, nc; - treenode_t* cp; - - /* if (tree->kind == AGNODE) return; */ - if (tree->n_children == 0) return; - - nc = tree->n_children; - nodes = N_NEW(nc, treenode_t*); - cp = tree->leftchild; - for (i = 0; i < nc; i++) { - nodes[i] = cp; - cp = cp->rightsib; - } - - qsort (nodes, nc, sizeof(treenode_t*), (qsort_cmpf)nodecmp); - areas_sorted = N_NEW(nc,double); - for (i = 0; i < nc; i++) { - areas_sorted[i] = nodes[i]->area; - } - if (tree->area == tree->child_area) - recs = tree_map(nc, areas_sorted, tree->r); - else { - rectangle crec; - double disc, delta, m, h = tree->r.size[1], w = tree->r.size[0]; - crec.x[0] = tree->r.x[0]; - crec.x[1] = tree->r.x[1]; - delta = h - w; - disc = sqrt(delta*delta + 4.0*tree->child_area); - m = (h + w - disc)/2.0; - crec.size[0] = w - m; - crec.size[1] = h - m; - recs = tree_map(nc, areas_sorted, crec); - } - if (Verbose) - fprintf (stderr, "rec %f %f %f %f\n", tree->r.x[0], tree->r.x[1], tree->r.size[0], tree->r.size[1]); - for (i = 0; i < nc; i++) { - nodes[i]->r = recs[i]; - if (Verbose) - fprintf (stderr, "%f - %f %f %f %f = %f (%f %f %f %f)\n", areas_sorted[i], - recs[i].x[0]-recs[i].size[0]*0.5, recs[i].x[1]-recs[i].size[1]*0.5, - recs[i].x[0]+recs[i].size[0]*0.5, recs[i].x[1]+recs[i].size[1]*0.5, recs[i].size[0]*recs[i].size[1], - recs[i].x[0], recs[i].x[1], recs[i].size[0], recs[i].size[1]); - - } - free (nodes); - free (areas_sorted); - free (recs); - - cp = tree->leftchild; - for (i = 0; i < nc; i++) { - if (cp->kind == AGRAPH) - layoutTree (cp); - cp = cp->rightsib; - } -} - -static void finishNode(node_t * n) -{ - char buf [40]; - if (N_fontsize) { - char* str = agxget(n, N_fontsize); - if (*str == '\0') { - sprintf (buf, "%.03f", ND_ht(n)*0.7); - agxset(n, N_fontsize, buf); - } - } - common_init_node (n); -} - -static void walkTree(treenode_t * tree) -{ - treenode_t *p; - Agnode_t *n; - pointf center; - rectangle rr; - boxf r; - double x0, y0, wd, ht; - - if (tree->kind == AGRAPH) { - for (p = tree->leftchild; p; p = p->rightsib) - walkTree (p); - x0 = tree->r.x[0]; - y0 = tree->r.x[1]; - wd = tree->r.size[0]; - ht = tree->r.size[1]; - r.LL.x = x0 - wd/2.0; - r.LL.y = y0 - ht/2.0; - r.UR.x = r.LL.x + wd; - r.UR.y = r.LL.y + ht; - GD_bb(tree->u.subg) = r; - } - else { - rr = tree->r; - center.x = rr.x[0]; - center.y = rr.x[1]; - - n = tree->u.n; - ND_coord(n) = center; - ND_width(n) = PS2INCH(rr.size[0]); - ND_height(n) = PS2INCH(rr.size[1]); - gv_nodesize(n, GD_flip(agraphof(n))); - finishNode(n); - if (Verbose) - fprintf(stderr,"%s coord %.5g %.5g ht %f width %f\n", - agnameof(n), ND_coord(n).x, ND_coord(n).y, ND_ht(n), ND_xsize(n)); - } -} - -/* freeTree: - */ -static void freeTree (treenode_t* tp) -{ - treenode_t* cp = tp->leftchild; - int i, nc = tp->n_children; - - for (i = 0; i < nc; i++) { - freeTree (cp); - cp = cp->rightsib; - } - free (tp); -} - -/* patchworkLayout: - */ -void patchworkLayout(Agraph_t * g) -{ - treenode_t* root; - attrsym_t * ap = agfindnodeattr(g, "area"); - attrsym_t * gp = agfindgraphattr(g, "area"); - attrsym_t * mp = agfindgraphattr(g, "inset"); - double total; - - root = mkTree (g,gp,ap,mp); - total = root->area; - root->r = rectangle_new(0, 0, sqrt(total + 0.1), sqrt(total + 0.1)); - layoutTree(root); - walkTree(root); - freeTree (root); -} diff --git a/internal/ccall/patchwork/patchwork.h b/internal/ccall/patchwork/patchwork.h deleted file mode 100644 index ee3df7a..0000000 --- a/internal/ccall/patchwork/patchwork.h +++ /dev/null @@ -1,38 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef PATCHWORK_H -#define PATCHWORK_H - -#include "render.h" -#include "fdp.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct { - graph_t *parent; - } rdata; - -#define RDATA(n) ((rdata*)(ND_alg(n))) -#define SPARENT(n) (RDATA(n)->parent) - -extern void patchwork_layout(Agraph_t * g); -extern void patchwork_cleanup(Agraph_t * g); -extern void patchworkLayout(Agraph_t *g); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/patchwork/patchworkinit.c b/internal/ccall/patchwork/patchworkinit.c deleted file mode 100644 index 3e49161..0000000 --- a/internal/ccall/patchwork/patchworkinit.c +++ /dev/null @@ -1,176 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "patchwork.h" -#include "adjust.h" -#include "pack.h" -#include "neatoprocs.h" - -/* the following code shamelessly copied from lib/fdpgen/layout.c -and should be extracted and made into a common function */ - -#define CL_CHUNK 10 - -typedef struct { - graph_t **cl; - int sz; - int cnt; -} clist_t; - -static void initCList(clist_t * clist) -{ - clist->cl = 0; - clist->sz = 0; - clist->cnt = 0; -} - -/* addCluster: - * Append a new cluster to the list. - * NOTE: cl[0] is empty. The clusters are in cl[1..cnt]. - * Normally, we increase the array when cnt == sz. - * The test for cnt > sz is necessary for the first time. - */ -static void addCluster(clist_t * clist, graph_t * subg) -{ - clist->cnt++; - if (clist->cnt >= clist->sz) { - clist->sz += CL_CHUNK; - clist->cl = RALLOC(clist->sz, clist->cl, graph_t *); - } - clist->cl[clist->cnt] = subg; -} - -/* mkClusters: - * Attach list of immediate child clusters. - * NB: By convention, the indexing starts at 1. - * If pclist is NULL, the graph is the root graph or a cluster - * If pclist is non-NULL, we are recursively scanning a non-cluster - * subgraph for cluster children. - */ -static void -mkClusters (graph_t * g, clist_t* pclist, graph_t* parent) -{ - graph_t* subg; - clist_t list; - clist_t* clist; - - if (pclist == NULL) { - clist = &list; - initCList(clist); - } - else - clist = pclist; - - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - if (!strncmp(agnameof(subg), "cluster", 7)) { - agbindrec(subg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); -#ifdef FDP_GEN - GD_alg(subg) = (void *) NEW(gdata); /* freed in cleanup_subgs */ - GD_ndim(subg) = GD_ndim(parent); - LEVEL(subg) = LEVEL(parent) + 1; - GPARENT(subg) = parent; -#endif - addCluster(clist, subg); - mkClusters(subg, NULL, subg); - } - else { - mkClusters(subg, clist, parent); - } - } - if (pclist == NULL) { - GD_n_cluster(g) = list.cnt; - if (list.cnt) - GD_clust(g) = RALLOC(list.cnt + 1, list.cl, graph_t*); - } -} - -static void patchwork_init_node(node_t * n) -{ - agset(n,"shape","box"); - /* common_init_node_opt(n,FALSE); */ -} - -static void patchwork_init_edge(edge_t * e) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agnodeinfo_t), TRUE); // edge custom data - /* common_init_edge(e); */ -} - -static void patchwork_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; - int i = 0; - rdata* alg = N_NEW(agnnodes(g), rdata); - - GD_neato_nlist(g) = N_NEW(agnnodes(g) + 1, node_t *); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - agbindrec(n, "Agnodeinfo_t", sizeof(Agnodeinfo_t), TRUE); // node custom data - ND_alg(n) = alg + i; - GD_neato_nlist(g)[i++] = n; - patchwork_init_node(n); - - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - patchwork_init_edge(e); - } - } -} - -static void patchwork_init_graph(graph_t * g) -{ - N_shape = agattr(g, AGNODE, "shape","box"); - setEdgeType (g, ET_LINE); - /* GD_ndim(g) = late_int(g,agfindattr(g,"dim"),2,2); */ - Ndim = GD_ndim(g) = 2; /* The algorithm only makes sense in 2D */ - mkClusters(g, NULL, g); - patchwork_init_node_edge(g); -} - -/* patchwork_layout: - * The current version makes no use of edges, neither for a notion of connectivity - * nor during drawing. - */ -void patchwork_layout(Agraph_t *g) -{ - patchwork_init_graph(g); - - if ((agnnodes(g) == 0) && (GD_n_cluster(g) == 0)) return; - - patchworkLayout (g); - - dotneato_postprocess(g); -} - -static void patchwork_cleanup_graph(graph_t * g) -{ - free(GD_neato_nlist(g)); - if (g != agroot(g)) - agclean(g, AGRAPH , "Agraphinfo_t"); -} - -void patchwork_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - n = agfstnode(g); - if (!n) return; - free (ND_alg(n)); - for (; n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - patchwork_cleanup_graph(g); -} diff --git a/internal/ccall/patchwork/tree_map.c b/internal/ccall/patchwork/tree_map.c deleted file mode 100644 index baa2073..0000000 --- a/internal/ccall/patchwork/tree_map.c +++ /dev/null @@ -1,127 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "render.h" -#include "tree_map.h" - -static void squarify(int n, real *area, rectangle *recs, int nadded, real maxarea, real minarea, real totalarea, - real asp, rectangle fillrec){ - /* add a list of area in fillrec using squarified treemap alg. - n: number of items to add - area: area of these items, Sum to 1 (?). - nadded: number of items already added - maxarea: maxarea of already added items - minarea: min areas of already added items - asp: current worst aspect ratio of the already added items so far - fillrec: the rectangle to be filled in. - */ - real w = MIN(fillrec.size[0], fillrec.size[1]); - int i; - - if (n <= 0) return; - - if (Verbose) { - fprintf(stderr, "trying to add to rect {%f +/- %f, %f +/- %f}\n",fillrec.x[0], fillrec.size[0], fillrec.x[1], fillrec.size[1]); - fprintf(stderr, "total added so far = %d\n", nadded); - } - - if (nadded == 0){ - nadded = 1; - maxarea = minarea = area[0]; - asp = MAX(area[0]/(w*w), (w*w)/area[0]); - totalarea = area[0]; - squarify(n, area, recs, nadded, maxarea, minarea, totalarea, asp, fillrec); - } else { - real newmaxarea, newminarea, s, h, maxw, minw, newasp, hh, ww, xx, yy; - if (nadded < n){ - newmaxarea = MAX(maxarea, area[nadded]); - newminarea = MIN(minarea, area[nadded]); - s = totalarea + area[nadded]; - h = s/w; - maxw = newmaxarea/h; - minw = newminarea/h; - newasp = MAX(h/minw, maxw/h);/* same as MAX{s^2/(w^2*newminarea), (w^2*newmaxarea)/(s^2)}*/ - } - if (nadded < n && newasp <= asp){/* aspectio improved, keep adding */ - squarify(n, area, recs, ++nadded, newmaxarea, newminarea, s, newasp, fillrec); - } else { - /* aspectio worsen if add another area, fixed the already added recs */ - if (Verbose) fprintf(stderr,"adding %d items, total area = %f, w = %f, area/w=%f\n",nadded, totalarea, w, totalarea/w); - if (w == fillrec.size[0]){/* tall rec. fix the items along x direction, left to right, at top*/ - hh = totalarea/w; - xx = fillrec.x[0] - fillrec.size[0]/2; - for (i = 0; i < nadded; i++){ - recs[i].size[1] = hh; - ww = area[i]/hh; - recs[i].size[0] = ww; - recs[i].x[1] = fillrec.x[1] + 0.5*(fillrec.size[1]) - hh/2; - recs[i].x[0] = xx + ww/2; - xx += ww; - } - fillrec.x[1] -= hh/2;/* the new empty space is below the filled space */ - fillrec.size[1] -= hh; - } else {/* short rec. fix along y top to bot, at left*/ - ww = totalarea/w; - yy = fillrec.x[1] + fillrec.size[1]/2; - for (i = 0; i < nadded; i++){ - recs[i].size[0] = ww; - hh = area[i]/ww; - recs[i].size[1] = hh; - recs[i].x[0] = fillrec.x[0] - 0.5*(fillrec.size[0]) + ww/2; - recs[i].x[1] = yy - hh/2; - yy -= hh; - } - fillrec.x[0] += ww/2;/* the new empty space is right of the filled space */ - fillrec.size[0] -= ww; - } - squarify(n - nadded, area + nadded, recs + nadded, 0, 0., 0., 0., 1., fillrec); - } - - } -} - -/* tree_map: - * Perform a squarified treemap layout on a single level. - * n - number of rectangles - * area - area of rectangles - * fillred - rectangle to be filled - * return array of rectangles - */ -rectangle* tree_map(int n, real *area, rectangle fillrec){ - /* fill a rectangle rec with n items, each item i has area[i] area. */ - rectangle *recs; - int i; - real total = 0, minarea = 1., maxarea = 0., asp = 1, totalarea = 0; - int nadded = 0; - - for (i = 0; i < n; i++) total += area[i]; - /* make sure there is enough area */ - if (total > fillrec.size[0] * fillrec.size[1] + 0.001) - return NULL; - - recs = N_NEW(n,rectangle); - squarify(n, area, recs, nadded, maxarea, minarea, totalarea, asp, fillrec); - return recs; -} - -/* rectangle_new: - * Create and initialize a new rectangle structure - */ -rectangle rectangle_new(real x, real y, real width, real height){ - rectangle r; - r.x[0] = x; - r.x[1] = y; - r.size[0] = width; - r.size[1] = height; - return r; -} diff --git a/internal/ccall/patchwork/tree_map.h b/internal/ccall/patchwork/tree_map.h deleted file mode 100644 index 12bc904..0000000 --- a/internal/ccall/patchwork/tree_map.h +++ /dev/null @@ -1,28 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef TREE_MAP_H -#define TREE_MAP_H - -#include - -typedef struct rectangle_struct { - real x[2];/* center */ - real size[2]; /* total width/height*/ -} rectangle; - -extern rectangle* tree_map(int n, real *area, rectangle fillrec); - -extern rectangle rectangle_new(real x, real y, real width, real height); - -#endif diff --git a/internal/ccall/pathplan.c b/internal/ccall/pathplan.c deleted file mode 100644 index 89ace28..0000000 --- a/internal/ccall/pathplan.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "pathplan/cvt.c" -#include "pathplan/inpoly.c" -#include "pathplan/route.c" -#include "pathplan/shortest.c" -#include "pathplan/shortestpth.c" -#include "pathplan/solvers.c" -#include "pathplan/triang.c" -#include "pathplan/util.c" -#include "pathplan/visibility.c" diff --git a/internal/ccall/pathplan/cvt.c b/internal/ccall/pathplan/cvt.c deleted file mode 100644 index f5115d3..0000000 --- a/internal/ccall/pathplan/cvt.c +++ /dev/null @@ -1,345 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include "vis.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -typedef Ppoint_t ilcoord_t; - -#ifdef DEBUG -static void printVconfig(vconfig_t * cp); -static void printVis(char *lbl, COORD * vis, int n); -static void printDad(int *vis, int n); -#endif - -#ifdef GASP -static void gasp_print_obstacles(vconfig_t * conf); -static void gasp_print_point(Ppoint_t p); -static void gasp_print_polyline(Ppolyline_t * route); -static void gasp_print_bezier(Ppolyline_t * route); -#endif - -#if 0 /* not used */ -static void *myrealloc(void *p, size_t newsize) -{ - void *rv; - - if (p == (void *) 0) - rv = malloc(newsize); - else - rv = realloc(p, newsize); - return rv; -} -#endif - -static void *mymalloc(size_t newsize) -{ - void *rv; - - if (newsize > 0) - rv = malloc(newsize); - else - rv = (void *) 0; - return rv; -} - - -vconfig_t *Pobsopen(Ppoly_t ** obs, int n_obs) -{ - vconfig_t *rv; - int poly_i, pt_i, i, n; - int start, end; - - rv = malloc(sizeof(vconfig_t)); - if (!rv) { - return NULL; - } - - /* get storage */ - n = 0; - for (poly_i = 0; poly_i < n_obs; poly_i++) - n = n + obs[poly_i]->pn; - rv->P = mymalloc(n * sizeof(Ppoint_t)); - rv->start = mymalloc((n_obs + 1) * sizeof(int)); - rv->next = mymalloc(n * sizeof(int)); - rv->prev = mymalloc(n * sizeof(int)); - rv->N = n; - rv->Npoly = n_obs; - - /* build arrays */ - i = 0; - for (poly_i = 0; poly_i < n_obs; poly_i++) { - start = i; - rv->start[poly_i] = start; - end = start + obs[poly_i]->pn - 1; - for (pt_i = 0; pt_i < obs[poly_i]->pn; pt_i++) { - rv->P[i] = obs[poly_i]->ps[pt_i]; - rv->next[i] = i + 1; - rv->prev[i] = i - 1; - i++; - } - rv->next[end] = start; - rv->prev[start] = end; - } - rv->start[poly_i] = i; - visibility(rv); - return rv; -} - -void Pobsclose(vconfig_t * config) -{ - free(config->P); - free(config->start); - free(config->next); - free(config->prev); - if (config->vis) { - free(config->vis[0]); - free(config->vis); - } - free(config); -} - -int Pobspath(vconfig_t * config, Ppoint_t p0, int poly0, Ppoint_t p1, - int poly1, Ppolyline_t * output_route) -{ - int i, j, *dad; - size_t opn; - Ppoint_t *ops; - COORD *ptvis0, *ptvis1; - -#ifdef GASP - gasp_print_obstacles(config); -#endif - ptvis0 = ptVis(config, poly0, p0); - ptvis1 = ptVis(config, poly1, p1); - -#ifdef GASP - gasp_print_point(p0); - gasp_print_point(p1); -#endif - dad = makePath(p0, poly0, ptvis0, p1, poly1, ptvis1, config); - - opn = 1; - for (i = dad[config->N]; i != config->N + 1; i = dad[i]) - opn++; - opn++; - ops = malloc(opn * sizeof(Ppoint_t)); - - j = opn - 1; - ops[j--] = p1; - for (i = dad[config->N]; i != config->N + 1; i = dad[i]) - ops[j--] = config->P[i]; - ops[j] = p0; - assert(j == 0); - -#ifdef DEBUG - printVconfig(config); - printVis("p", ptvis0, config->N + 1); - printVis("q", ptvis1, config->N + 1); - printDad(dad, config->N + 1); -#endif - - if (ptvis0) - free(ptvis0); - if (ptvis1) - free(ptvis1); - - output_route->pn = opn; - output_route->ps = ops; -#ifdef GASP - gasp_print_polyline(output_route); -#endif - free(dad); - return TRUE; -} - -int Pobsbarriers(vconfig_t * config, Pedge_t ** barriers, int *n_barriers) -{ - int i, j; - - *barriers = malloc(config->N * sizeof(Pedge_t)); - *n_barriers = config->N; - - for (i = 0; i < config->N; i++) { - barriers[i]->a.x = config->P[i].x; - barriers[i]->a.y = config->P[i].y; - j = config->next[i]; - barriers[i]->b.x = config->P[j].x; - barriers[i]->b.y = config->P[j].y; - } - return 1; -} - -#ifdef DEBUG -static void printVconfig(vconfig_t * cp) -{ - int i, j; - int *next, *prev; - Ppoint_t *pts; - array2 arr; - - next = cp->next; - prev = cp->prev; - pts = cp->P; - arr = cp->vis; - - printf("this next prev point\n"); - for (i = 0; i < cp->N; i++) - printf("%3d %3d %3d (%3g,%3g)\n", i, next[i], prev[i], - pts[i].x, pts[i].y); - - printf("\n\n"); - - for (i = 0; i < cp->N; i++) { - for (j = 0; j < cp->N; j++) - printf("%4.1f ", arr[i][j]); - printf("\n"); - } -} - -static void printVis(char *lbl, COORD * vis, int n) -{ - int i; - - printf("%s: ", lbl); - for (i = 0; i < n; i++) - printf("%4.1f ", vis[i]); - printf("\n"); -} - -static void printDad(int *vis, int n) -{ - int i; - - printf(" "); - for (i = 0; i < n; i++) { - printf("%3d ", i); - } - printf("\n"); - printf("dad: "); - for (i = 0; i < n; i++) { - printf("%3d ", vis[i]); - } - printf("\n"); -} -#endif - -#ifdef GASP - -static Ppoint_t Bezpt[1000]; -static int Bezctr; - -static void addpt(Ppoint_t p) -{ - if ((Bezctr == 0) || - (Bezpt[Bezctr - 1].x != p.x) || (Bezpt[Bezctr - 1].y != p.y)) - Bezpt[Bezctr++] = p; -} - -#define W_DEGREE 5 -static ilcoord_t Bezier(ilcoord_t * V, int degree, double t, - ilcoord_t * Left, ilcoord_t * Right) -{ - int i, j; /* Index variables */ - ilcoord_t Vtemp[W_DEGREE + 1][W_DEGREE + 1]; - - /* Copy control points */ - for (j = 0; j <= degree; j++) { - Vtemp[0][j] = V[j]; - } - - /* Triangle computation */ - for (i = 1; i <= degree; i++) { - for (j = 0; j <= degree - i; j++) { - Vtemp[i][j].x = - (1.0 - t) * Vtemp[i - 1][j].x + t * Vtemp[i - 1][j + 1].x; - Vtemp[i][j].y = - (1.0 - t) * Vtemp[i - 1][j].y + t * Vtemp[i - 1][j + 1].y; - } - } - - if (Left != NIL(ilcoord_t *)) - for (j = 0; j <= degree; j++) - Left[j] = Vtemp[j][0]; - if (Right != NIL(ilcoord_t *)) - for (j = 0; j <= degree; j++) - Right[j] = Vtemp[degree - j][j]; - return (Vtemp[degree][0]); -} - -static void append_bezier(Ppoint_t * bezier) -{ - double a; - ilcoord_t left[4], right[4]; - - a = fabs(area2(bezier[0], bezier[1], bezier[2])) - + fabs(area2(bezier[2], bezier[3], bezier[0])); - if (a < .5) { - addpt(bezier[0]); - addpt(bezier[3]); - } else { - (void) Bezier(bezier, 3, .5, left, right); - append_bezier(left); - append_bezier(right); - } -} - -FILE *GASPout = stderr; - -static void gasp_print_point(Ppoint_t p) -{ - fprintf(GASPout, "%3g %3g\n", p.x, p.y); -} - -void gasp_print_obstacles(vconfig_t * conf) -{ - int i, j; - Ppoly_t poly; - - fprintf(GASPout, "%d\n", conf->Npoly); - for (i = 0; i < conf->Npoly; i++) { - poly.ps = &(conf->P[conf->start[i]]); - poly.pn = conf->start[i + 1] - conf->start[i]; - fprintf(GASPout, "%d\n", poly.pn); - for (j = 0; j < poly.pn; j++) - gasp_print_point(poly.ps[j]); - } -} - -void gasp_print_bezier(Ppolyline_t * route) -{ - int i; - - Bezctr = 0; - for (i = 0; i + 3 < route->pn; i += 3) - append_bezier(route->ps + i); - fprintf(GASPout, "%d\n", Bezctr); - for (i = 0; i < Bezctr; i++) - gasp_print_point(Bezpt[i]); - Bezctr = 0; -} - -void gasp_print_polyline(Ppolyline_t * route) -{ - int i; - - fprintf(GASPout, "%d\n", route->pn); - for (i = 0; i < route->pn; i++) - gasp_print_point(route->ps[i]); -} -#endif diff --git a/internal/ccall/pathplan/dummy.go b/internal/ccall/pathplan/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/pathplan/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/pathplan/inpoly.c b/internal/ccall/pathplan/inpoly.c deleted file mode 100644 index d508e66..0000000 --- a/internal/ccall/pathplan/inpoly.c +++ /dev/null @@ -1,42 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * in_poly - * - * Test if a point is inside a polygon. - * The polygon must be convex with vertices in CW order. - */ - -#include -#include "vispath.h" -#include "pathutil.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -int in_poly(Ppoly_t poly, Ppoint_t q) -{ - int i, i1; /* point index; i1 = i-1 mod n */ - int n; - Ppoint_t *P; - - P = poly.ps; - n = poly.pn; - for (i = 0; i < n; i++) { - i1 = (i + n - 1) % n; - if (wind(P[i1],P[i],q) == 1) return FALSE; - } - return TRUE; -} diff --git a/internal/ccall/pathplan/path.lefty b/internal/ccall/pathplan/path.lefty deleted file mode 100644 index 82413de..0000000 --- a/internal/ccall/pathplan/path.lefty +++ /dev/null @@ -1,212 +0,0 @@ -path = [ - 'data' = [ - ]; - 'defvattr' = [ - 'vieworig' = ['x' = 1; 'y' = 1;]; - 'viewsize' = ['x' = 820; 'y' = 520;]; - 'wrect' = [ - 0 = ['x' = -400; 'y' = 0;]; - 1 = ['x' = 400; 'y' = 500;]; - ]; - 'vsize' = ['x' = 800; 'y' = 500;]; - 'w2v' = 1; - ]; -]; -path.init = function () { - local i, j, n, s, t, start, end; - - path.createview (null); - i = 0; - fd = openio ('file', '/tmp/ek', 'r'); -# while ((path.descs[i] = path.readdesc ())) -# i = i + 1; - echo ('ready'); -}; -path.createview = function (attr) { - local name, vieworig, viewsize; - name = attr.name; - if (~attr.name) - name = 'PATH'; - vieworig = attr.vieworig; - if (~attr.vieworig) - vieworig = path.defvattr.vieworig; - viewsize = attr.viewsize; - if (~attr.viewsize) - viewsize = path.defvattr.viewsize; - path.view = createwidget (-1, [ - 'type' = 'view'; - 'name' = name; - 'origin' = vieworig; - 'size' = viewsize; - ]); - path.scroll = createwidget (path.view, ['type' = 'scroll';]); - widgets[path.view].closeview = path.closeview; - path.canvas = createwidget (path.scroll, ['type' = 'canvas';]); - setwidgetattr (path.canvas, [ - 'window' = path.data.defvattr.wrect; - 'viewport' = viewsize; - ]); - clear (path.canvas); - if (attr.funcs) { - for (fid in attr.funcs) - widgets[path.canvas][fid] = attr.funcs[fid]; - } else { - widgets[path.canvas].leftup = path.leftup; - widgets[path.canvas].leftmove = path.leftmove; - widgets[path.canvas].leftdown = path.leftdown; - widgets[path.canvas].middledown = path.middledown; - widgets[path.canvas].middlemove = path.middlemove; - widgets[path.canvas].middleup = path.middleup; - widgets[path.canvas].rightdown = path.rightdown; - widgets[path.canvas].rightmove = path.rightmove; - widgets[path.canvas].rightup = path.rightup; - widgets[path.canvas].keyup = path.keyup; - widgets[path.canvas].keydown = path.keydown; - widgets[path.canvas].redraw = path.redraw; - } - setwidgetattr (path.canvas, ['color' = [2 = 'red';];]); - setwidgetattr (path.canvas, ['color' = [3 = 'green';];]); - return path.canvas; -}; -path.readdesc = function () { - local desc, s, t, n, i; - - wrect = [ - 0 = ['x' = 9999; 'y' = 9999;]; - 1 = ['x' = -9999; 'y' = -9999;]; - ]; - if (~(s = readline (fd))) { - echo ('EOF/0', 'choice', 'ok'); - return; - } -echo ('> ', s); - if (s ~= 'edge') { - ask ('error in file/0', 'choice', 'ok'); - return; - } - if (~(s = readline (fd))) { - ask ('EOF/01', 'choice', 'ok'); - return; - } - desc.tail = s; - if (~(s = readline (fd))) { - ask ('EOF/02', 'choice', 'ok'); - return; - } - desc.head = s; - if (~(s = readline (fd))) { - ask ('EOF', 'choice', 'ok'); - return; - } - if (s ~= 'points') { - ask ('error in file', 'choice', 'ok'); - return; - } - s = readline (fd); - n = ston (s); - for (i = 0; i < n; i = i + 1) { - s = readline (fd); - t = split (s, ' '); - desc.points[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);]; - if (wrect[0].x > desc.points[i].x - 10) - wrect[0].x = desc.points[i].x - 10; - if (wrect[0].y > desc.points[i].y - 10) - wrect[0].y = desc.points[i].y - 10; - if (wrect[1].x < desc.points[i].x + 10) - wrect[1].x = desc.points[i].x + 10; - if (wrect[1].y < desc.points[i].y + 10) - wrect[1].y = desc.points[i].y + 10; - } - desc.points[i] = copy (desc.points[0]); - if (~(s = readline (fd))) { - ask ('EOF/2', 'choice', 'ok'); - return; - } - if (s ~= 'splpoints') { - ask ('error in file/2', 'choice', 'ok'); - return; - } - s = readline (fd); - n = ston (s); - for (i = 0; i < n; i = i + 1) { - s = readline (fd); - t = split (s, ' '); - desc.splpoints[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);]; - if (wrect[0].x > desc.splpoints[i].x - 10) - wrect[0].x = desc.splpoints[i].x - 10; - if (wrect[0].y > desc.splpoints[i].y - 10) - wrect[0].y = desc.splpoints[i].y - 10; - if (wrect[1].x < desc.splpoints[i].x + 10) - wrect[1].x = desc.splpoints[i].x + 10; - if (wrect[1].y < desc.splpoints[i].y + 10) - wrect[1].y = desc.splpoints[i].y + 10; - } - desc.wrect = wrect; - return desc; -}; -path.drawdesc = function (desc) { - local i; - - tt = getwidgetattr (path.canvas, [0 = 'size';]); - wrect = copy (desc.wrect); - r1 = (wrect[1].x - wrect[0].x) / (wrect[1].y - wrect[0].y); - r2 = tt.size.x / tt.size.y; - if (r1 > r2) - wrect[1].y = wrect[0].y + (wrect[1].x - wrect[0].x) / r2; - else - wrect[1].x = wrect[0].x + (wrect[1].y - wrect[0].y) * r2; - setwidgetattr (path.canvas, ['window' = wrect;]); - clear (path.canvas); -# for (i = 0; desc.points[i]; i = i + 1) { -# text (path.canvas, null, -# ['x' = desc.points[i].x + 10; 'y' = desc.points[i].y;], -# concat ('p ', i), 'fixed', 14, 'lc'); -# } - polygon (path.canvas, null, desc.points); - for (i = 0; desc.splpoints[i]; i = i + 1) { - text (path.canvas, null, - ['x' = desc.splpoints[i].x + 10; 'y' = desc.splpoints[i].y;], - concat ('sp ', i), 'fixed', 14, 'lc'); - } -# polygon (path.canvas, null, desc.splpoints); - splinegon (path.canvas, null, desc.splpoints); - text (path.canvas, null, - ['x' = desc.wrect[0].x + 1; 'y' = desc.wrect[0].y + 10;], - concat (tail, ' -> ', head), 'fixed', 14, 'lc'); -}; -path.redraw = function (data) { - path.drawdesc (path.desc); -}; -path.keyup = function (data) { - if (data.key == 'n') { - clear (path.canvas); - if ((path.desc = path.readdesc ())) - path.drawdesc (path.desc); - } else if (data.key == ' ') - path.redraw (data); -}; -path.init (); -monitorfile = function (data) { -echo (111); - if (~(tail = readline (0))) { - echo ('eof1'); - exit (); - } -echo (222); - if (~(head = readline (0))) { - echo ('eof2'); - exit (); - } -echo (head); -echo (333); - for (i in path.descs) { - desc = path.descs[i]; - if (desc.tail == tail & desc.head == head) { -echo (111122222); - path.drawdesc (desc); - break; - } - } -echo (444); -}; -monitor ('on', 0); diff --git a/internal/ccall/pathplan/pathgeom.h b/internal/ccall/pathplan/pathgeom.h deleted file mode 100644 index 5215782..0000000 --- a/internal/ccall/pathplan/pathgeom.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#ifndef _PATHGEOM_INCLUDE -#define _PATHGEOM_INCLUDE - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef HAVE_POINTF_S - typedef struct pointf_s Ppoint_t; - typedef struct pointf_s Pvector_t; -#else - typedef struct Pxy_t { - double x, y; - } Pxy_t; - - typedef struct Pxy_t Ppoint_t; - typedef struct Pxy_t Pvector_t; -#endif - - typedef struct Ppoly_t { - Ppoint_t *ps; - int pn; - } Ppoly_t; - - typedef Ppoly_t Ppolyline_t; - - typedef struct Pedge_t { - Ppoint_t a, b; - } Pedge_t; - -/* opaque state handle for visibility graph operations */ - typedef struct vconfig_s vconfig_t; - - void freePath(Ppolyline_t* p); -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/pathplan/pathplan.h b/internal/ccall/pathplan/pathplan.h deleted file mode 100644 index 244e998..0000000 --- a/internal/ccall/pathplan/pathplan.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - - -#ifndef _PATH_INCLUDE -#define _PATH_INCLUDE - -#include "pathgeom.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -#if defined(_BLD_pathplan) && defined(__EXPORT__) -# define extern __EXPORT__ -#endif - -/* find shortest euclidean path within a simple polygon */ - extern int Pshortestpath(Ppoly_t * boundary, Ppoint_t endpoints[2], - Ppolyline_t * output_route); - -/* fit a spline to an input polyline, without touching barrier segments */ - extern int Proutespline(Pedge_t * barriers, int n_barriers, - Ppolyline_t input_route, - Pvector_t endpoint_slopes[2], - Ppolyline_t * output_route); - -/* utility function to convert from a set of polygonal obstacles to barriers */ - extern int Ppolybarriers(Ppoly_t ** polys, int npolys, - Pedge_t ** barriers, int *n_barriers); - -/* function to convert a polyline into a spline representation */ - extern void make_polyline(Ppolyline_t line, Ppolyline_t* sline); - -#undef extern - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/pathplan/pathutil.h b/internal/ccall/pathplan/pathutil.h deleted file mode 100644 index de9d75b..0000000 --- a/internal/ccall/pathplan/pathutil.h +++ /dev/null @@ -1,56 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - - -#ifndef _PATHUTIL_INCLUDE -#define _PATHUTIL_INCLUDE -#define _BLD_pathplan 1 - -#include "config.h" -#include "pathplan.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef NOT -#define NOT(x) (!(x)) -#endif -#ifndef FALSE -#define FALSE 0 -#define TRUE (NOT(FALSE)) -#endif - -/*visual studio*/ -#ifdef _WIN32 -#ifndef PATHPLAN_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - typedef double COORD; - extern COORD area2(Ppoint_t, Ppoint_t, Ppoint_t); - extern int wind(Ppoint_t a, Ppoint_t b, Ppoint_t c); - extern COORD dist2(Ppoint_t, Ppoint_t); - extern int intersect(Ppoint_t a, Ppoint_t b, Ppoint_t c, Ppoint_t d); - - int in_poly(Ppoly_t argpoly, Ppoint_t q); - Ppoly_t copypoly(Ppoly_t); - void freepoly(Ppoly_t); - -#undef extern -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/pathplan/route.c b/internal/ccall/pathplan/route.c deleted file mode 100644 index 68e7789..0000000 --- a/internal/ccall/pathplan/route.c +++ /dev/null @@ -1,708 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include -#ifdef HAVE_MALLOC_H -#include -#endif -#include -#include "pathutil.h" -#include "solvers.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -#define EPSILON1 1E-3 -#define EPSILON2 1E-6 - -#define ABS(a) ((a) >= 0 ? (a) : -(a)) - -typedef struct tna_t { - double t; - Ppoint_t a[2]; -} tna_t; - -#define prerror(msg) \ - fprintf (stderr, "libpath/%s:%d: %s\n", __FILE__, __LINE__, (msg)) - -#define DISTSQ(a, b) ( \ - (((a).x - (b).x) * ((a).x - (b).x)) + (((a).y - (b).y) * ((a).y - (b).y)) \ -) - -#define POINTSIZE sizeof (Ppoint_t) - -#define LT(pa, pbp) ((pa.y > pbp->y) || ((pa.y == pbp->y) && (pa.x < pbp->x))) -#define GT(pa, pbp) ((pa.y < pbp->y) || ((pa.y == pbp->y) && (pa.x > pbp->x))) - -typedef struct p2e_t { - Ppoint_t *pp; - Pedge_t *ep; -} p2e_t; - -typedef struct elist_t { - Pedge_t *ep; - struct elist_t *next, *prev; -} elist_t; - -static jmp_buf jbuf; - -#if 0 -static p2e_t *p2es; -static int p2en; -#endif - -#if 0 -static elist_t *elist; -#endif - -static Ppoint_t *route_ops; -static int route_opn, route_opl; - -static int reallyroutespline(Pedge_t *, int, - Ppoint_t *, int, Ppoint_t, Ppoint_t); -static int mkspline(Ppoint_t *, int, tna_t *, Ppoint_t, Ppoint_t, - Ppoint_t *, Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int splinefits(Pedge_t *, int, Ppoint_t, Pvector_t, Ppoint_t, - Pvector_t, Ppoint_t *, int); -static int splineisinside(Pedge_t *, int, Ppoint_t *); -static int splineintersectsline(Ppoint_t *, Ppoint_t *, double *); -static void points2coeff(double, double, double, double, double *); -static void addroot(double, double *, int *); - -static Pvector_t normv(Pvector_t); - -static void _growroute_ops(int); - -static Ppoint_t add(Ppoint_t, Ppoint_t); -static Ppoint_t sub(Ppoint_t, Ppoint_t); -static double dist(Ppoint_t, Ppoint_t); -static Ppoint_t scale(Ppoint_t, double); -static double dot(Ppoint_t, Ppoint_t); -static double B0(double t); -static double B1(double t); -static double B2(double t); -static double B3(double t); -static double B01(double t); -static double B23(double t); -#if 0 -static int cmpp2efunc(const void *, const void *); - -static void listdelete(Pedge_t *); -static void listreplace(Pedge_t *, Pedge_t *); -static void listinsert(Pedge_t *, Ppoint_t); -#endif - -/* Proutespline: - * Given a set of edgen line segments edges as obstacles, a template - * path input, and endpoint vectors evs, construct a spline fitting the - * input and endpoing vectors, and return in output. - * Return 0 on success and -1 on failure, including no memory. - */ -int Proutespline(Pedge_t * edges, int edgen, Ppolyline_t input, - Ppoint_t * evs, Ppolyline_t * output) -{ -#if 0 - Ppoint_t p0, p1, p2, p3; - Ppoint_t *pp; - Pvector_t v1, v2, v12, v23; - int ipi, route_opi; - int ei, p2ei; - Pedge_t *e0p, *e1p; -#endif - Ppoint_t *inps; - int inpn; - - /* unpack into previous format rather than modify legacy code */ - inps = input.ps; - inpn = input.pn; - -#if 0 - if (!(p2es = (p2e_t *) malloc(sizeof(p2e_t) * (p2en = edgen * 2)))) { - prerror("cannot malloc p2es"); - return -1; - } - for (ei = 0, p2ei = 0; ei < edgen; ei++) { - if (edges[ei].a.x == edges[ei].b.x - && edges[ei].a.y == edges[ei].b.y) - continue; - p2es[p2ei].pp = &edges[ei].a; - p2es[p2ei++].ep = &edges[ei]; - p2es[p2ei].pp = &edges[ei].b; - p2es[p2ei++].ep = &edges[ei]; - } - p2en = p2ei; - qsort(p2es, p2en, sizeof(p2e_t), cmpp2efunc); - elist = NULL; - for (p2ei = 0; p2ei < p2en; p2ei += 2) { - pp = p2es[p2ei].pp; -#if DEBUG >= 1 - fprintf(stderr, "point: %d %lf %lf\n", p2ei, pp->x, pp->y); -#endif - e0p = p2es[p2ei].ep; - e1p = p2es[p2ei + 1].ep; - p0 = (&e0p->a == p2es[p2ei].pp) ? e0p->b : e0p->a; - p1 = (&e0p->a == p2es[p2ei + 1].pp) ? e1p->b : e1p->a; - if (LT(p0, pp) && LT(p1, pp)) { - listdelete(e0p), listdelete(e1p); - } else if (GT(p0, pp) && GT(p1, pp)) { - listinsert(e0p, *pp), listinsert(e1p, *pp); - } else { - if (LT(p0, pp)) - listreplace(e0p, e1p); - else - listreplace(e1p, e0p); - } - } -#endif - if (setjmp(jbuf)) - return -1; - - /* generate the splines */ - evs[0] = normv(evs[0]); - evs[1] = normv(evs[1]); - route_opl = 0; - _growroute_ops(4); - route_ops[route_opl++] = inps[0]; - if (reallyroutespline(edges, edgen, inps, inpn, evs[0], evs[1]) == -1) - return -1; - output->pn = route_opl; - output->ps = route_ops; - -#if 0 - fprintf(stderr, "edge\na\nb\n"); - fprintf(stderr, "points\n%d\n", inpn); - for (ipi = 0; ipi < inpn; ipi++) - fprintf(stderr, "%f %f\n", inps[ipi].x, inps[ipi].y); - fprintf(stderr, "splpoints\n%d\n", route_opl); - for (route_opi = 0; route_opi < route_opl; route_opi++) - fprintf(stderr, "%f %f\n", route_ops[route_opi].x, route_ops[route_opi].y); -#endif - - return 0; -} - -static int reallyroutespline(Pedge_t * edges, int edgen, - Ppoint_t * inps, int inpn, Ppoint_t ev0, - Ppoint_t ev1) -{ - Ppoint_t p1, p2, cp1, cp2, p; - Pvector_t v1, v2, splitv, splitv1, splitv2; - double maxd, d, t; - int maxi, i, spliti; - - static tna_t *tnas; - static int tnan; - - if (tnan < inpn) { - if (!tnas) { - if (!(tnas = malloc(sizeof(tna_t) * inpn))) - return -1; - } else { - if (!(tnas = realloc(tnas, sizeof(tna_t) * inpn))) - return -1; - } - tnan = inpn; - } - tnas[0].t = 0; - for (i = 1; i < inpn; i++) - tnas[i].t = tnas[i - 1].t + dist(inps[i], inps[i - 1]); - for (i = 1; i < inpn; i++) - tnas[i].t /= tnas[inpn - 1].t; - for (i = 0; i < inpn; i++) { - tnas[i].a[0] = scale(ev0, B1(tnas[i].t)); - tnas[i].a[1] = scale(ev1, B2(tnas[i].t)); - } - if (mkspline(inps, inpn, tnas, ev0, ev1, &p1, &v1, &p2, &v2) == -1) - return -1; - if (splinefits(edges, edgen, p1, v1, p2, v2, inps, inpn)) - return 0; - cp1 = add(p1, scale(v1, 1 / 3.0)); - cp2 = sub(p2, scale(v2, 1 / 3.0)); - for (maxd = -1, maxi = -1, i = 1; i < inpn - 1; i++) { - t = tnas[i].t; - p.x = B0(t) * p1.x + B1(t) * cp1.x + B2(t) * cp2.x + B3(t) * p2.x; - p.y = B0(t) * p1.y + B1(t) * cp1.y + B2(t) * cp2.y + B3(t) * p2.y; - if ((d = dist(p, inps[i])) > maxd) - maxd = d, maxi = i; - } - spliti = maxi; - splitv1 = normv(sub(inps[spliti], inps[spliti - 1])); - splitv2 = normv(sub(inps[spliti + 1], inps[spliti])); - splitv = normv(add(splitv1, splitv2)); - reallyroutespline(edges, edgen, inps, spliti + 1, ev0, splitv); - reallyroutespline(edges, edgen, &inps[spliti], inpn - spliti, splitv, - ev1); - return 0; -} - -static int mkspline(Ppoint_t * inps, int inpn, tna_t * tnas, Ppoint_t ev0, - Ppoint_t ev1, Ppoint_t * sp0, Ppoint_t * sv0, - Ppoint_t * sp1, Ppoint_t * sv1) -{ - Ppoint_t tmp; - double c[2][2], x[2], det01, det0X, detX1; - double d01, scale0, scale3; - int i; - - scale0 = scale3 = 0.0; - c[0][0] = c[0][1] = c[1][0] = c[1][1] = 0.0; - x[0] = x[1] = 0.0; - for (i = 0; i < inpn; i++) { - c[0][0] += dot(tnas[i].a[0], tnas[i].a[0]); - c[0][1] += dot(tnas[i].a[0], tnas[i].a[1]); - c[1][0] = c[0][1]; - c[1][1] += dot(tnas[i].a[1], tnas[i].a[1]); - tmp = sub(inps[i], add(scale(inps[0], B01(tnas[i].t)), - scale(inps[inpn - 1], B23(tnas[i].t)))); - x[0] += dot(tnas[i].a[0], tmp); - x[1] += dot(tnas[i].a[1], tmp); - } - det01 = c[0][0] * c[1][1] - c[1][0] * c[0][1]; - det0X = c[0][0] * x[1] - c[0][1] * x[0]; - detX1 = x[0] * c[1][1] - x[1] * c[0][1]; - if (ABS(det01) >= 1e-6) { - scale0 = detX1 / det01; - scale3 = det0X / det01; - } - if (ABS(det01) < 1e-6 || scale0 <= 0.0 || scale3 <= 0.0) { - d01 = dist(inps[0], inps[inpn - 1]) / 3.0; - scale0 = d01; - scale3 = d01; - } - *sp0 = inps[0]; - *sv0 = scale(ev0, scale0); - *sp1 = inps[inpn - 1]; - *sv1 = scale(ev1, scale3); - return 0; -} - -static double dist_n(Ppoint_t * p, int n) -{ - int i; - double rv; - - rv = 0.0; - for (i = 1; i < n; i++) { - rv += - sqrt((p[i].x - p[i - 1].x) * (p[i].x - p[i - 1].x) + - (p[i].y - p[i - 1].y) * (p[i].y - p[i - 1].y)); - } - return rv; -} - -static int splinefits(Pedge_t * edges, int edgen, Ppoint_t pa, - Pvector_t va, Ppoint_t pb, Pvector_t vb, - Ppoint_t * inps, int inpn) -{ - Ppoint_t sps[4]; - double a, b; -#if 0 - double d; -#endif - int pi; - int forceflag; - int first = 1; - - forceflag = (inpn == 2 ? 1 : 0); - -#if 0 - d = sqrt((pb.x - pa.x) * (pb.x - pa.x) + - (pb.y - pa.y) * (pb.y - pa.y)); - a = d, b = d; -#else - a = b = 4; -#endif - for (;;) { - sps[0].x = pa.x; - sps[0].y = pa.y; - sps[1].x = pa.x + a * va.x / 3.0; - sps[1].y = pa.y + a * va.y / 3.0; - sps[2].x = pb.x - b * vb.x / 3.0; - sps[2].y = pb.y - b * vb.y / 3.0; - sps[3].x = pb.x; - sps[3].y = pb.y; - - /* shortcuts (paths shorter than the shortest path) not allowed - - * they must be outside the constraint polygon. this can happen - * if the candidate spline intersects the constraint polygon exactly - * on sides or vertices. maybe this could be more elegant, but - * it solves the immediate problem. we could also try jittering the - * constraint polygon, or computing the candidate spline more carefully, - * for example using the path. SCN */ - - if (first && (dist_n(sps, 4) < (dist_n(inps, inpn) - EPSILON1))) - return 0; - first = 0; - - if (splineisinside(edges, edgen, &sps[0])) { - _growroute_ops(route_opl + 4); - for (pi = 1; pi < 4; pi++) - route_ops[route_opl].x = sps[pi].x, route_ops[route_opl++].y = sps[pi].y; -#if defined(DEBUG) && DEBUG >= 1 - fprintf(stderr, "success: %f %f\n", a, b); -#endif - return 1; - } - if (a == 0 && b == 0) { - if (forceflag) { - _growroute_ops(route_opl + 4); - for (pi = 1; pi < 4; pi++) - route_ops[route_opl].x = sps[pi].x, route_ops[route_opl++].y = sps[pi].y; -#if defined(DEBUG) && DEBUG >= 1 - fprintf(stderr, "forced straight line: %f %f\n", a, b); -#endif - return 1; - } - break; - } - if (a > .01) - a /= 2, b /= 2; - else - a = b = 0; - } -#if defined(DEBUG) && DEBUG >= 1 - fprintf(stderr, "failure\n"); -#endif - return 0; -} - -static int splineisinside(Pedge_t * edges, int edgen, Ppoint_t * sps) -{ - double roots[4]; - int rooti, rootn; - int ei; - Ppoint_t lps[2], ip; - double t, ta, tb, tc, td; - - for (ei = 0; ei < edgen; ei++) { - lps[0] = edges[ei].a, lps[1] = edges[ei].b; - /* if ((rootn = splineintersectsline (sps, lps, roots)) == 4) - return 1; */ - if ((rootn = splineintersectsline(sps, lps, roots)) == 4) - continue; - for (rooti = 0; rooti < rootn; rooti++) { - if (roots[rooti] < EPSILON2 || roots[rooti] > 1 - EPSILON2) - continue; - t = roots[rooti]; - td = t * t * t; - tc = 3 * t * t * (1 - t); - tb = 3 * t * (1 - t) * (1 - t); - ta = (1 - t) * (1 - t) * (1 - t); - ip.x = ta * sps[0].x + tb * sps[1].x + - tc * sps[2].x + td * sps[3].x; - ip.y = ta * sps[0].y + tb * sps[1].y + - tc * sps[2].y + td * sps[3].y; - if (DISTSQ(ip, lps[0]) < EPSILON1 || - DISTSQ(ip, lps[1]) < EPSILON1) - continue; - return 0; - } - } - return 1; -} - -static int splineintersectsline(Ppoint_t * sps, Ppoint_t * lps, - double *roots) -{ - double scoeff[4], xcoeff[2], ycoeff[2]; - double xroots[3], yroots[3], tv, sv, rat; - int rootn, xrootn, yrootn, i, j; - - xcoeff[0] = lps[0].x; - xcoeff[1] = lps[1].x - lps[0].x; - ycoeff[0] = lps[0].y; - ycoeff[1] = lps[1].y - lps[0].y; - rootn = 0; - if (xcoeff[1] == 0) { - if (ycoeff[1] == 0) { - points2coeff(sps[0].x, sps[1].x, sps[2].x, sps[3].x, scoeff); - scoeff[0] -= xcoeff[0]; - xrootn = solve3(scoeff, xroots); - points2coeff(sps[0].y, sps[1].y, sps[2].y, sps[3].y, scoeff); - scoeff[0] -= ycoeff[0]; - yrootn = solve3(scoeff, yroots); - if (xrootn == 4) - if (yrootn == 4) - return 4; - else - for (j = 0; j < yrootn; j++) - addroot(yroots[j], roots, &rootn); - else if (yrootn == 4) - for (i = 0; i < xrootn; i++) - addroot(xroots[i], roots, &rootn); - else - for (i = 0; i < xrootn; i++) - for (j = 0; j < yrootn; j++) - if (xroots[i] == yroots[j]) - addroot(xroots[i], roots, &rootn); - return rootn; - } else { - points2coeff(sps[0].x, sps[1].x, sps[2].x, sps[3].x, scoeff); - scoeff[0] -= xcoeff[0]; - xrootn = solve3(scoeff, xroots); - if (xrootn == 4) - return 4; - for (i = 0; i < xrootn; i++) { - tv = xroots[i]; - if (tv >= 0 && tv <= 1) { - points2coeff(sps[0].y, sps[1].y, sps[2].y, sps[3].y, - scoeff); - sv = scoeff[0] + tv * (scoeff[1] + tv * - (scoeff[2] + tv * scoeff[3])); - sv = (sv - ycoeff[0]) / ycoeff[1]; - if ((0 <= sv) && (sv <= 1)) - addroot(tv, roots, &rootn); - } - } - return rootn; - } - } else { - rat = ycoeff[1] / xcoeff[1]; - points2coeff(sps[0].y - rat * sps[0].x, sps[1].y - rat * sps[1].x, - sps[2].y - rat * sps[2].x, sps[3].y - rat * sps[3].x, - scoeff); - scoeff[0] += rat * xcoeff[0] - ycoeff[0]; - xrootn = solve3(scoeff, xroots); - if (xrootn == 4) - return 4; - for (i = 0; i < xrootn; i++) { - tv = xroots[i]; - if (tv >= 0 && tv <= 1) { - points2coeff(sps[0].x, sps[1].x, sps[2].x, sps[3].x, - scoeff); - sv = scoeff[0] + tv * (scoeff[1] + - tv * (scoeff[2] + tv * scoeff[3])); - sv = (sv - xcoeff[0]) / xcoeff[1]; - if ((0 <= sv) && (sv <= 1)) - addroot(tv, roots, &rootn); - } - } - return rootn; - } -} - -static void points2coeff(double v0, double v1, double v2, double v3, - double *coeff) -{ - coeff[3] = v3 + 3 * v1 - (v0 + 3 * v2); - coeff[2] = 3 * v0 + 3 * v2 - 6 * v1; - coeff[1] = 3 * (v1 - v0); - coeff[0] = v0; -} - -static void addroot(double root, double *roots, int *rootnp) -{ - if (root >= 0 && root <= 1) - roots[*rootnp] = root, (*rootnp)++; -} - -static Pvector_t normv(Pvector_t v) -{ - double d; - - d = v.x * v.x + v.y * v.y; - if (d > 1e-6) { - d = sqrt(d); - v.x /= d, v.y /= d; - } - return v; -} - -static void _growroute_ops(int newroute_opn) -{ - if (newroute_opn <= route_opn) - return; - if (!route_ops) { - if (!(route_ops = (Ppoint_t *) malloc(POINTSIZE * newroute_opn))) { - prerror("cannot malloc route_ops"); - longjmp(jbuf,1); - } - } else { - if (!(route_ops = (Ppoint_t *) realloc((void *) route_ops, - POINTSIZE * newroute_opn))) { - prerror("cannot realloc route_ops"); - longjmp(jbuf,1); - } - } - route_opn = newroute_opn; -} - -static Ppoint_t add(Ppoint_t p1, Ppoint_t p2) -{ - p1.x += p2.x, p1.y += p2.y; - return p1; -} - -static Ppoint_t sub(Ppoint_t p1, Ppoint_t p2) -{ - p1.x -= p2.x, p1.y -= p2.y; - return p1; -} - -static double dist(Ppoint_t p1, Ppoint_t p2) -{ - double dx, dy; - - dx = p2.x - p1.x, dy = p2.y - p1.y; - return sqrt(dx * dx + dy * dy); -} - -static Ppoint_t scale(Ppoint_t p, double c) -{ - p.x *= c, p.y *= c; - return p; -} - -static double dot(Ppoint_t p1, Ppoint_t p2) -{ - return p1.x * p2.x + p1.y * p2.y; -} - -static double B0(double t) -{ - double tmp = 1.0 - t; - return tmp * tmp * tmp; -} - -static double B1(double t) -{ - double tmp = 1.0 - t; - return 3 * t * tmp * tmp; -} - -static double B2(double t) -{ - double tmp = 1.0 - t; - return 3 * t * t * tmp; -} - -static double B3(double t) -{ - return t * t * t; -} - -static double B01(double t) -{ - double tmp = 1.0 - t; - return tmp * tmp * (tmp + 3 * t); -} - -static double B23(double t) -{ - double tmp = 1.0 - t; - return t * t * (3 * tmp + t); -} - -#if 0 -static int cmpp2efunc(const void *v0p, const void *v1p) -{ - p2e_t *p2e0p, *p2e1p; - double x0, x1; - - p2e0p = (p2e_t *) v0p, p2e1p = (p2e_t *) v1p; - if (p2e0p->pp->y > p2e1p->pp->y) - return -1; - else if (p2e0p->pp->y < p2e1p->pp->y) - return 1; - if (p2e0p->pp->x < p2e1p->pp->x) - return -1; - else if (p2e0p->pp->x > p2e1p->pp->x) - return 1; - x0 = (p2e0p->pp == &p2e0p->ep->a) ? p2e0p->ep->b.x : p2e0p->ep->a.x; - x1 = (p2e1p->pp == &p2e1p->ep->a) ? p2e1p->ep->b.x : p2e1p->ep->a.x; - if (x0 < x1) - return -1; - else if (x0 > x1) - return 1; - return 0; -} - -static void listdelete(Pedge_t * ep) -{ - elist_t *lp; - - for (lp = elist; lp; lp = lp->next) { - if (lp->ep != ep) - continue; - if (lp->prev) - lp->prev->next = lp->next; - if (lp->next) - lp->next->prev = lp->prev; - if (elist == lp) - elist = lp->next; - free(lp); - return; - } - if (!lp) { - prerror("cannot find list element to delete"); - abort(); - } -} - -static void listreplace(Pedge_t * oldep, Pedge_t * newep) -{ - elist_t *lp; - - for (lp = elist; lp; lp = lp->next) { - if (lp->ep != oldep) - continue; - lp->ep = newep; - return; - } - if (!lp) { - prerror("cannot find list element to replace"); - abort(); - } -} - -static void listinsert(Pedge_t * ep, Ppoint_t p) -{ - elist_t *lp, *newlp, *lastlp; - double lx; - - if (!(newlp = (elist_t *) malloc(sizeof(elist_t)))) { - prerror("cannot malloc newlp"); - abort(); - } - newlp->ep = ep; - newlp->next = newlp->prev = NULL; - if (!elist) { - elist = newlp; - return; - } - for (lp = elist; lp; lp = lp->next) { - lastlp = lp; - lx = lp->ep->a.x + (lp->ep->b.x - lp->ep->a.x) * (p.y - - lp->ep->a.y) / - (lp->ep->b.y - lp->ep->a.y); - if (lx <= p.x) - continue; - if (lp->prev) - lp->prev->next = newlp; - newlp->prev = lp->prev; - newlp->next = lp; - lp->prev = newlp; - if (elist == lp) - elist = newlp; - return; - } - lastlp->next = newlp; - newlp->prev = lastlp; - if (!elist) - elist = newlp; -} -#endif diff --git a/internal/ccall/pathplan/shortest.c b/internal/ccall/pathplan/shortest.c deleted file mode 100644 index 8958098..0000000 --- a/internal/ccall/pathplan/shortest.c +++ /dev/null @@ -1,604 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include -#ifdef HAVE_MALLOC_H -#include -#endif -#include -#include -#include "pathutil.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -#define ISCCW 1 -#define ISCW 2 -#define ISON 3 - -#define DQ_FRONT 1 -#define DQ_BACK 2 - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - -#define prerror(msg) \ - fprintf (stderr, "libpath/%s:%d: %s\n", __FILE__, __LINE__, (msg)) - -#define POINTSIZE sizeof (Ppoint_t) - -typedef struct pointnlink_t { - Ppoint_t *pp; - struct pointnlink_t *link; -} pointnlink_t; - -#define POINTNLINKSIZE sizeof (pointnlink_t) -#define POINTNLINKPSIZE sizeof (pointnlink_t *) - -typedef struct tedge_t { - pointnlink_t *pnl0p; - pointnlink_t *pnl1p; - struct triangle_t *ltp; - struct triangle_t *rtp; -} tedge_t; - -typedef struct triangle_t { - int mark; - struct tedge_t e[3]; -} triangle_t; - -#define TRIANGLESIZE sizeof (triangle_t) - -typedef struct deque_t { - pointnlink_t **pnlps; - int pnlpn, fpnlpi, lpnlpi, apex; -} deque_t; - -static jmp_buf jbuf; -static pointnlink_t *pnls, **pnlps; -static int pnln, pnll; - -static triangle_t *tris; -static int trin, tril; - -static deque_t dq; - -static Ppoint_t *ops; -static int opn; - -static void _triangulate(pointnlink_t **, int); -static int isdiagonal(int, int, pointnlink_t **, int); -static void loadtriangle(pointnlink_t *, pointnlink_t *, pointnlink_t *); -static void connecttris(int, int); -static int marktripath(int, int); - -static void add2dq(int, pointnlink_t *); -static void splitdq(int, int); -static int finddqsplit(pointnlink_t *); - -static int ccw(Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int intersects(Ppoint_t *, Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int between(Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int pointintri(int, Ppoint_t *); - -static void growpnls(int); -static void growtris(int); -static void growdq(int); -static void growops(int); - -/* Pshortestpath: - * Find a shortest path contained in the polygon polyp going between the - * points supplied in eps. The resulting polyline is stored in output. - * Return 0 on success, -1 on bad input, -2 on memory allocation problem. - */ -int Pshortestpath(Ppoly_t * polyp, Ppoint_t * eps, Ppolyline_t * output) -{ - int pi, minpi; - double minx; - Ppoint_t p1, p2, p3; - int trii, trij, ftrii, ltrii; - int ei; - pointnlink_t epnls[2], *lpnlp, *rpnlp, *pnlp; - triangle_t *trip; - int splitindex; -#ifdef DEBUG - int pnli; -#endif - - if (setjmp(jbuf)) - return -2; - /* make space */ - growpnls(polyp->pn); - pnll = 0; - tril = 0; - growdq(polyp->pn * 2); - dq.fpnlpi = dq.pnlpn / 2, dq.lpnlpi = dq.fpnlpi - 1; - - /* make sure polygon is CCW and load pnls array */ - for (pi = 0, minx = HUGE_VAL, minpi = -1; pi < polyp->pn; pi++) { - if (minx > polyp->ps[pi].x) - minx = polyp->ps[pi].x, minpi = pi; - } - p2 = polyp->ps[minpi]; - p1 = polyp->ps[((minpi == 0) ? polyp->pn - 1 : minpi - 1)]; - p3 = polyp->ps[((minpi == polyp->pn - 1) ? 0 : minpi + 1)]; - if (((p1.x == p2.x && p2.x == p3.x) && (p3.y > p2.y)) || - ccw(&p1, &p2, &p3) != ISCCW) { - for (pi = polyp->pn - 1; pi >= 0; pi--) { - if (pi < polyp->pn - 1 - && polyp->ps[pi].x == polyp->ps[pi + 1].x - && polyp->ps[pi].y == polyp->ps[pi + 1].y) - continue; - pnls[pnll].pp = &polyp->ps[pi]; - pnls[pnll].link = &pnls[pnll % polyp->pn]; - pnlps[pnll] = &pnls[pnll]; - pnll++; - } - } else { - for (pi = 0; pi < polyp->pn; pi++) { - if (pi > 0 && polyp->ps[pi].x == polyp->ps[pi - 1].x && - polyp->ps[pi].y == polyp->ps[pi - 1].y) - continue; - pnls[pnll].pp = &polyp->ps[pi]; - pnls[pnll].link = &pnls[pnll % polyp->pn]; - pnlps[pnll] = &pnls[pnll]; - pnll++; - } - } - -#if defined(DEBUG) && DEBUG >= 1 - fprintf(stderr, "points\n%d\n", pnll); - for (pnli = 0; pnli < pnll; pnli++) - fprintf(stderr, "%f %f\n", pnls[pnli].pp->x, pnls[pnli].pp->y); -#endif - - /* generate list of triangles */ - _triangulate(pnlps, pnll); - -#if defined(DEBUG) && DEBUG >= 2 - fprintf(stderr, "triangles\n%d\n", tril); - for (trii = 0; trii < tril; trii++) - for (ei = 0; ei < 3; ei++) - fprintf(stderr, "%f %f\n", tris[trii].e[ei].pnl0p->pp->x, - tris[trii].e[ei].pnl0p->pp->y); -#endif - - /* connect all pairs of triangles that share an edge */ - for (trii = 0; trii < tril; trii++) - for (trij = trii + 1; trij < tril; trij++) - connecttris(trii, trij); - - /* find first and last triangles */ - for (trii = 0; trii < tril; trii++) - if (pointintri(trii, &eps[0])) - break; - if (trii == tril) { - prerror("source point not in any triangle"); - return -1; - } - ftrii = trii; - for (trii = 0; trii < tril; trii++) - if (pointintri(trii, &eps[1])) - break; - if (trii == tril) { - prerror("destination point not in any triangle"); - return -1; - } - ltrii = trii; - - /* mark the strip of triangles from eps[0] to eps[1] */ - if (!marktripath(ftrii, ltrii)) { - prerror("cannot find triangle path"); - /* a straight line is better than failing */ - growops(2); - output->pn = 2; - ops[0] = eps[0], ops[1] = eps[1]; - output->ps = ops; - return 0; - } - - /* if endpoints in same triangle, use a single line */ - if (ftrii == ltrii) { - growops(2); - output->pn = 2; - ops[0] = eps[0], ops[1] = eps[1]; - output->ps = ops; - return 0; - } - - /* build funnel and shortest path linked list (in add2dq) */ - epnls[0].pp = &eps[0], epnls[0].link = NULL; - epnls[1].pp = &eps[1], epnls[1].link = NULL; - add2dq(DQ_FRONT, &epnls[0]); - dq.apex = dq.fpnlpi; - trii = ftrii; - while (trii != -1) { - trip = &tris[trii]; - trip->mark = 2; - - /* find the left and right points of the exiting edge */ - for (ei = 0; ei < 3; ei++) - if (trip->e[ei].rtp && trip->e[ei].rtp->mark == 1) - break; - if (ei == 3) { /* in last triangle */ - if (ccw(&eps[1], dq.pnlps[dq.fpnlpi]->pp, - dq.pnlps[dq.lpnlpi]->pp) == ISCCW) - lpnlp = dq.pnlps[dq.lpnlpi], rpnlp = &epnls[1]; - else - lpnlp = &epnls[1], rpnlp = dq.pnlps[dq.lpnlpi]; - } else { - pnlp = trip->e[(ei + 1) % 3].pnl1p; - if (ccw(trip->e[ei].pnl0p->pp, pnlp->pp, - trip->e[ei].pnl1p->pp) == ISCCW) - lpnlp = trip->e[ei].pnl1p, rpnlp = trip->e[ei].pnl0p; - else - lpnlp = trip->e[ei].pnl0p, rpnlp = trip->e[ei].pnl1p; - } - - /* update deque */ - if (trii == ftrii) { - add2dq(DQ_BACK, lpnlp); - add2dq(DQ_FRONT, rpnlp); - } else { - if (dq.pnlps[dq.fpnlpi] != rpnlp - && dq.pnlps[dq.lpnlpi] != rpnlp) { - /* add right point to deque */ - splitindex = finddqsplit(rpnlp); - splitdq(DQ_BACK, splitindex); - add2dq(DQ_FRONT, rpnlp); - /* if the split is behind the apex, then reset apex */ - if (splitindex > dq.apex) - dq.apex = splitindex; - } else { - /* add left point to deque */ - splitindex = finddqsplit(lpnlp); - splitdq(DQ_FRONT, splitindex); - add2dq(DQ_BACK, lpnlp); - /* if the split is in front of the apex, then reset apex */ - if (splitindex < dq.apex) - dq.apex = splitindex; - } - } - trii = -1; - for (ei = 0; ei < 3; ei++) - if (trip->e[ei].rtp && trip->e[ei].rtp->mark == 1) { - trii = trip->e[ei].rtp - tris; - break; - } - } - -#if defined(DEBUG) && DEBUG >= 1 - fprintf(stderr, "polypath"); - for (pnlp = &epnls[1]; pnlp; pnlp = pnlp->link) - fprintf(stderr, " %f %f", pnlp->pp->x, pnlp->pp->y); - fprintf(stderr, "\n"); -#endif - - for (pi = 0, pnlp = &epnls[1]; pnlp; pnlp = pnlp->link) - pi++; - growops(pi); - output->pn = pi; - for (pi = pi - 1, pnlp = &epnls[1]; pnlp; pi--, pnlp = pnlp->link) - ops[pi] = *pnlp->pp; - output->ps = ops; - - return 0; -} - -/* triangulate polygon */ -static void _triangulate(pointnlink_t ** pnlps, int pnln) -{ - int pnli, pnlip1, pnlip2; - - if (pnln > 3) - { - for (pnli = 0; pnli < pnln; pnli++) - { - pnlip1 = (pnli + 1) % pnln; - pnlip2 = (pnli + 2) % pnln; - if (isdiagonal(pnli, pnlip2, pnlps, pnln)) - { - loadtriangle(pnlps[pnli], pnlps[pnlip1], pnlps[pnlip2]); - for (pnli = pnlip1; pnli < pnln - 1; pnli++) - pnlps[pnli] = pnlps[pnli + 1]; - _triangulate(pnlps, pnln - 1); - return; - } - } - prerror("triangulation failed"); - } - else - loadtriangle(pnlps[0], pnlps[1], pnlps[2]); -} - -/* check if (i, i + 2) is a diagonal */ -static int isdiagonal(int pnli, int pnlip2, pointnlink_t ** pnlps, - int pnln) -{ - int pnlip1, pnlim1, pnlj, pnljp1, res; - - /* neighborhood test */ - pnlip1 = (pnli + 1) % pnln; - pnlim1 = (pnli + pnln - 1) % pnln; - /* If P[pnli] is a convex vertex [ pnli+1 left of (pnli-1,pnli) ]. */ - if (ccw(pnlps[pnlim1]->pp, pnlps[pnli]->pp, pnlps[pnlip1]->pp) == - ISCCW) - res = - (ccw(pnlps[pnli]->pp, pnlps[pnlip2]->pp, pnlps[pnlim1]->pp) == - ISCCW) - && (ccw(pnlps[pnlip2]->pp, pnlps[pnli]->pp, pnlps[pnlip1]->pp) - == ISCCW); - /* Assume (pnli - 1, pnli, pnli + 1) not collinear. */ - else - res = (ccw(pnlps[pnli]->pp, pnlps[pnlip2]->pp, - pnlps[pnlip1]->pp) == ISCW); - if (!res) - return FALSE; - - /* check against all other edges */ - for (pnlj = 0; pnlj < pnln; pnlj++) { - pnljp1 = (pnlj + 1) % pnln; - if (!((pnlj == pnli) || (pnljp1 == pnli) || - (pnlj == pnlip2) || (pnljp1 == pnlip2))) - if (intersects(pnlps[pnli]->pp, pnlps[pnlip2]->pp, - pnlps[pnlj]->pp, pnlps[pnljp1]->pp)) - return FALSE; - } - return TRUE; -} - -static void loadtriangle(pointnlink_t * pnlap, pointnlink_t * pnlbp, - pointnlink_t * pnlcp) -{ - triangle_t *trip; - int ei; - - /* make space */ - if (tril >= trin) - growtris(trin + 20); - trip = &tris[tril++]; - trip->mark = 0; - trip->e[0].pnl0p = pnlap, trip->e[0].pnl1p = pnlbp, trip->e[0].rtp = - NULL; - trip->e[1].pnl0p = pnlbp, trip->e[1].pnl1p = pnlcp, trip->e[1].rtp = - NULL; - trip->e[2].pnl0p = pnlcp, trip->e[2].pnl1p = pnlap, trip->e[2].rtp = - NULL; - for (ei = 0; ei < 3; ei++) - trip->e[ei].ltp = trip; -} - -/* connect a pair of triangles at their common edge (if any) */ -static void connecttris(int tri1, int tri2) -{ - triangle_t *tri1p, *tri2p; - int ei, ej; - - for (ei = 0; ei < 3; ei++) { - for (ej = 0; ej < 3; ej++) { - tri1p = &tris[tri1], tri2p = &tris[tri2]; - if ((tri1p->e[ei].pnl0p->pp == tri2p->e[ej].pnl0p->pp && - tri1p->e[ei].pnl1p->pp == tri2p->e[ej].pnl1p->pp) || - (tri1p->e[ei].pnl0p->pp == tri2p->e[ej].pnl1p->pp && - tri1p->e[ei].pnl1p->pp == tri2p->e[ej].pnl0p->pp)) - tri1p->e[ei].rtp = tri2p, tri2p->e[ej].rtp = tri1p; - } - } -} - -/* find and mark path from trii, to trij */ -static int marktripath(int trii, int trij) -{ - int ei; - - if (tris[trii].mark) - return FALSE; - tris[trii].mark = 1; - if (trii == trij) - return TRUE; - for (ei = 0; ei < 3; ei++) - if (tris[trii].e[ei].rtp && - marktripath(tris[trii].e[ei].rtp - tris, trij)) - return TRUE; - tris[trii].mark = 0; - return FALSE; -} - -/* add a new point to the deque, either front or back */ -static void add2dq(int side, pointnlink_t * pnlp) -{ - if (side == DQ_FRONT) { - if (dq.lpnlpi - dq.fpnlpi >= 0) - pnlp->link = dq.pnlps[dq.fpnlpi]; /* shortest path links */ - dq.fpnlpi--; - dq.pnlps[dq.fpnlpi] = pnlp; - } else { - if (dq.lpnlpi - dq.fpnlpi >= 0) - pnlp->link = dq.pnlps[dq.lpnlpi]; /* shortest path links */ - dq.lpnlpi++; - dq.pnlps[dq.lpnlpi] = pnlp; - } -} - -static void splitdq(int side, int index) -{ - if (side == DQ_FRONT) - dq.lpnlpi = index; - else - dq.fpnlpi = index; -} - -static int finddqsplit(pointnlink_t * pnlp) -{ - int index; - - for (index = dq.fpnlpi; index < dq.apex; index++) - if (ccw(dq.pnlps[index + 1]->pp, dq.pnlps[index]->pp, pnlp->pp) == - ISCCW) - return index; - for (index = dq.lpnlpi; index > dq.apex; index--) - if (ccw(dq.pnlps[index - 1]->pp, dq.pnlps[index]->pp, pnlp->pp) == - ISCW) - return index; - return dq.apex; -} - -/* ccw test: CCW, CW, or co-linear */ -static int ccw(Ppoint_t * p1p, Ppoint_t * p2p, Ppoint_t * p3p) -{ - double d; - - d = ((p1p->y - p2p->y) * (p3p->x - p2p->x)) - - ((p3p->y - p2p->y) * (p1p->x - p2p->x)); - return (d > 0) ? ISCCW : ((d < 0) ? ISCW : ISON); -} - -/* line to line intersection */ -static int intersects(Ppoint_t * pap, Ppoint_t * pbp, - Ppoint_t * pcp, Ppoint_t * pdp) -{ - int ccw1, ccw2, ccw3, ccw4; - - if (ccw(pap, pbp, pcp) == ISON || ccw(pap, pbp, pdp) == ISON || - ccw(pcp, pdp, pap) == ISON || ccw(pcp, pdp, pbp) == ISON) { - if (between(pap, pbp, pcp) || between(pap, pbp, pdp) || - between(pcp, pdp, pap) || between(pcp, pdp, pbp)) - return TRUE; - } else { - ccw1 = (ccw(pap, pbp, pcp) == ISCCW) ? 1 : 0; - ccw2 = (ccw(pap, pbp, pdp) == ISCCW) ? 1 : 0; - ccw3 = (ccw(pcp, pdp, pap) == ISCCW) ? 1 : 0; - ccw4 = (ccw(pcp, pdp, pbp) == ISCCW) ? 1 : 0; - return (ccw1 ^ ccw2) && (ccw3 ^ ccw4); - } - return FALSE; -} - -/* is pbp between pap and pcp */ -static int between(Ppoint_t * pap, Ppoint_t * pbp, Ppoint_t * pcp) -{ - Ppoint_t p1, p2; - - p1.x = pbp->x - pap->x, p1.y = pbp->y - pap->y; - p2.x = pcp->x - pap->x, p2.y = pcp->y - pap->y; - if (ccw(pap, pbp, pcp) != ISON) - return FALSE; - return (p2.x * p1.x + p2.y * p1.y >= 0) && - (p2.x * p2.x + p2.y * p2.y <= p1.x * p1.x + p1.y * p1.y); -} - -static int pointintri(int trii, Ppoint_t * pp) -{ - int ei, sum; - - for (ei = 0, sum = 0; ei < 3; ei++) - if (ccw(tris[trii].e[ei].pnl0p->pp, - tris[trii].e[ei].pnl1p->pp, pp) != ISCW) - sum++; - return (sum == 3 || sum == 0); -} - -static void growpnls(int newpnln) -{ - if (newpnln <= pnln) - return; - if (!pnls) { - if (!(pnls = (pointnlink_t *) malloc(POINTNLINKSIZE * newpnln))) { - prerror("cannot malloc pnls"); - longjmp(jbuf,1); - } - if (!(pnlps = (pointnlink_t **) malloc(POINTNLINKPSIZE * newpnln))) { - prerror("cannot malloc pnlps"); - longjmp(jbuf,1); - } - } else { - if (!(pnls = (pointnlink_t *) realloc((void *) pnls, - POINTNLINKSIZE * newpnln))) { - prerror("cannot realloc pnls"); - longjmp(jbuf,1); - } - if (!(pnlps = (pointnlink_t **) realloc((void *) pnlps, - POINTNLINKPSIZE * - newpnln))) { - prerror("cannot realloc pnlps"); - longjmp(jbuf,1); - } - } - pnln = newpnln; -} - -static void growtris(int newtrin) -{ - if (newtrin <= trin) - return; - if (!tris) { - if (!(tris = (triangle_t *) malloc(TRIANGLESIZE * newtrin))) { - prerror("cannot malloc tris"); - longjmp(jbuf,1); - } - } else { - if (!(tris = (triangle_t *) realloc((void *) tris, - TRIANGLESIZE * newtrin))) { - prerror("cannot realloc tris"); - longjmp(jbuf,1); - } - } - trin = newtrin; -} - -static void growdq(int newdqn) -{ - if (newdqn <= dq.pnlpn) - return; - if (!dq.pnlps) { - if (! - (dq.pnlps = - (pointnlink_t **) malloc(POINTNLINKPSIZE * newdqn))) { - prerror("cannot malloc dq.pnls"); - longjmp(jbuf,1); - } - } else { - if (!(dq.pnlps = (pointnlink_t **) realloc((void *) dq.pnlps, - POINTNLINKPSIZE * - newdqn))) { - prerror("cannot realloc dq.pnls"); - longjmp(jbuf,1); - } - } - dq.pnlpn = newdqn; -} - -static void growops(int newopn) -{ - if (newopn <= opn) - return; - if (!ops) { - if (!(ops = (Ppoint_t *) malloc(POINTSIZE * newopn))) { - prerror("cannot malloc ops"); - longjmp(jbuf,1); - } - } else { - if (!(ops = (Ppoint_t *) realloc((void *) ops, - POINTSIZE * newopn))) { - prerror("cannot realloc ops"); - longjmp(jbuf,1); - } - } - opn = newopn; -} diff --git a/internal/ccall/pathplan/shortestpth.c b/internal/ccall/pathplan/shortestpth.c deleted file mode 100644 index 85b49b4..0000000 --- a/internal/ccall/pathplan/shortestpth.c +++ /dev/null @@ -1,116 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "vis.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -static COORD unseen = (double) INT_MAX; - -/* shortestPath: - * Given a VxV weighted adjacency matrix, compute the shortest - * path vector from root to target. The returned vector (dad) encodes the - * shorted path from target to the root. That path is given by - * i, dad[i], dad[dad[i]], ..., root - * We have dad[root] = -1. - * - * Based on Dijkstra's algorithm (Sedgewick, 2nd. ed., p. 466). - * - * This implementation only uses the lower left triangle of the - * adjacency matrix, i.e., the values a[i][j] where i >= j. - */ -int *shortestPath(int root, int target, int V, array2 wadj) -{ - int *dad; - COORD *vl; - COORD *val; - int min; - int k, t; - - /* allocate arrays */ - dad = (int *) malloc(V * sizeof(int)); - vl = (COORD *) malloc((V + 1) * sizeof(COORD)); /* One extra for sentinel */ - val = vl + 1; - - /* initialize arrays */ - for (k = 0; k < V; k++) { - dad[k] = -1; - val[k] = -unseen; - } - val[-1] = -(unseen + (COORD) 1); /* Set sentinel */ - min = root; - - /* use (min >= 0) to fill entire tree */ - while (min != target) { - k = min; - val[k] *= -1; - min = -1; - if (val[k] == unseen) - val[k] = 0; - - for (t = 0; t < V; t++) { - if (val[t] < 0) { - COORD newpri; - COORD wkt; - - /* Use lower triangle */ - if (k >= t) - wkt = wadj[k][t]; - else - wkt = wadj[t][k]; - - newpri = -(val[k] + wkt); - if ((wkt != 0) && (val[t] < newpri)) { - val[t] = newpri; - dad[t] = k; - } - if (val[t] > val[min]) - min = t; - } - } - } - - free(vl); - return dad; -} - -/* makePath: - * Given two points p and q in two polygons pp and qp of a vconfig_t conf, - * and the visibility vectors of p and q relative to conf, - * compute the shortest path from p to q. - * If dad is the returned array and V is the number of polygon vertices in - * conf, then the path is V(==q), dad[V], dad[dad[V]], ..., V+1(==p). - * NB: This is the only path that is guaranteed to be valid. - * We have dad[V+1] = -1. - * - */ -int *makePath(Ppoint_t p, int pp, COORD * pvis, - Ppoint_t q, int qp, COORD * qvis, vconfig_t * conf) -{ - int V = conf->N; - - if (directVis(p, pp, q, qp, conf)) { - int *dad = (int *) malloc(sizeof(int) * (V + 2)); - dad[V] = V + 1; - dad[V + 1] = -1; - return dad; - } else { - array2 wadj = conf->vis; - wadj[V] = qvis; - wadj[V + 1] = pvis; - return (shortestPath(V + 1, V, V + 2, wadj)); - } -} diff --git a/internal/ccall/pathplan/solvers.c b/internal/ccall/pathplan/solvers.c deleted file mode 100644 index e3f6571..0000000 --- a/internal/ccall/pathplan/solvers.c +++ /dev/null @@ -1,113 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" -#include -#include "solvers.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -#ifndef HAVE_CBRT -#define cbrt(x) ((x < 0) ? (-1*pow(-x, 1.0/3.0)) : pow (x, 1.0/3.0)) -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define EPS 1E-7 -#define AEQ0(x) (((x) < EPS) && ((x) > -EPS)) - -int solve3(double *coeff, double *roots) -{ - double a, b, c, d; - int rootn, i; - double p, q, disc, b_over_3a, c_over_a, d_over_a; - double r, theta, temp, alpha, beta; - - a = coeff[3], b = coeff[2], c = coeff[1], d = coeff[0]; - if (AEQ0(a)) - return solve2(coeff, roots); - b_over_3a = b / (3 * a); - c_over_a = c / a; - d_over_a = d / a; - - p = b_over_3a * b_over_3a; - q = 2 * b_over_3a * p - b_over_3a * c_over_a + d_over_a; - p = c_over_a / 3 - p; - disc = q * q + 4 * p * p * p; - - if (disc < 0) { - r = .5 * sqrt(-disc + q * q); - theta = atan2(sqrt(-disc), -q); - temp = 2 * cbrt(r); - roots[0] = temp * cos(theta / 3); - roots[1] = temp * cos((theta + M_PI + M_PI) / 3); - roots[2] = temp * cos((theta - M_PI - M_PI) / 3); - rootn = 3; - } else { - alpha = .5 * (sqrt(disc) - q); - beta = -q - alpha; - roots[0] = cbrt(alpha) + cbrt(beta); - if (disc > 0) - rootn = 1; - else - roots[1] = roots[2] = -.5 * roots[0], rootn = 3; - } - - for (i = 0; i < rootn; i++) - roots[i] -= b_over_3a; - - return rootn; -} - -int solve2(double *coeff, double *roots) -{ - double a, b, c; - double disc, b_over_2a, c_over_a; - - a = coeff[2], b = coeff[1], c = coeff[0]; - if (AEQ0(a)) - return solve1(coeff, roots); - b_over_2a = b / (2 * a); - c_over_a = c / a; - - disc = b_over_2a * b_over_2a - c_over_a; - if (disc < 0) - return 0; - else if (disc == 0) { - roots[0] = -b_over_2a; - return 1; - } else { - roots[0] = -b_over_2a + sqrt(disc); - roots[1] = -2 * b_over_2a - roots[0]; - return 2; - } -} - -int solve1(double *coeff, double *roots) -{ - double a, b; - - a = coeff[1], b = coeff[0]; - if (AEQ0(a)) { - if (AEQ0(b)) - return 4; - else - return 0; - } - roots[0] = -b / a; - return 1; -} diff --git a/internal/ccall/pathplan/solvers.h b/internal/ccall/pathplan/solvers.h deleted file mode 100644 index 93fd07c..0000000 --- a/internal/ccall/pathplan/solvers.h +++ /dev/null @@ -1,31 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _SOLVERS_INCLUDE -#define _SOLVERS_INCLUDE - - extern int solve3(double *, double *); - extern int solve2(double *, double *); - extern int solve1(double *, double *); - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/pathplan/tri.h b/internal/ccall/pathplan/tri.h deleted file mode 100644 index b27daed..0000000 --- a/internal/ccall/pathplan/tri.h +++ /dev/null @@ -1,28 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include - -/* Points in polygon must be in CCW order */ - int Ptriangulate(Ppoly_t * polygon, - void (*fn) (void *closure, Ppoint_t tri[]), - void *vc); - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/pathplan/triang.c b/internal/ccall/pathplan/triang.c deleted file mode 100644 index 71d22d4..0000000 --- a/internal/ccall/pathplan/triang.c +++ /dev/null @@ -1,189 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include -#include -#include "pathutil.h" -#include "tri.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -typedef struct lvertex_2_t { - double x, y; -} lvertex_2_t; - -typedef struct dpd_triangle { - Ppoint_t *v[3]; -} ltriangle_t; - -#define ISCCW 1 -#define ISCW 2 -#define ISON 3 - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - -static jmp_buf jbuf; -static int dpd_ccw(Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int dpd_isdiagonal(int, int, Ppoint_t **, int); -static int dpd_intersects(Ppoint_t *, Ppoint_t *, Ppoint_t *, Ppoint_t *); -static int dpd_between(Ppoint_t *, Ppoint_t *, Ppoint_t *); -static void triangulate(Ppoint_t ** pointp, int pointn, - void (*fn) (void *, Ppoint_t *), void *vc); - -static int dpd_ccw(Ppoint_t * p1, Ppoint_t * p2, Ppoint_t * p3) -{ - double d = - ((p1->y - p2->y) * (p3->x - p2->x)) - - ((p3->y - p2->y) * (p1->x - p2->x)); - return (d > 0) ? ISCW : ((d < 0) ? ISCCW : ISON); -} - -/* Ptriangulate: - * Return 0 on success; non-zero on error. - */ -int Ptriangulate(Ppoly_t * polygon, void (*fn) (void *, Ppoint_t *), - void *vc) -{ - int i; - int pointn; - Ppoint_t **pointp; - - pointn = polygon->pn; - - pointp = (Ppoint_t **) malloc(pointn * sizeof(Ppoint_t *)); - - for (i = 0; i < pointn; i++) - pointp[i] = &(polygon->ps[i]); - - if (setjmp(jbuf)) { - free(pointp); - return 1; - } - triangulate(pointp, pointn, fn, vc); - - free(pointp); - return 0; -} - -/* triangulate: - * Triangulates the given polygon. - * Throws an exception if no diagonal exists. - */ -static void -triangulate(Ppoint_t ** pointp, int pointn, - void (*fn) (void *, Ppoint_t *), void *vc) -{ - int i, ip1, ip2, j; - Ppoint_t A[3]; - if (pointn > 3) { - for (i = 0; i < pointn; i++) { - ip1 = (i + 1) % pointn; - ip2 = (i + 2) % pointn; - if (dpd_isdiagonal(i, ip2, pointp, pointn)) { - A[0] = *pointp[i]; - A[1] = *pointp[ip1]; - A[2] = *pointp[ip2]; - fn(vc, A); - j = 0; - for (i = 0; i < pointn; i++) - if (i != ip1) - pointp[j++] = pointp[i]; - triangulate(pointp, pointn - 1, fn, vc); - return; - } - } - longjmp(jbuf,1); - } else { - A[0] = *pointp[0]; - A[1] = *pointp[1]; - A[2] = *pointp[2]; - fn(vc, A); - } -} - -/* check if (i, i + 2) is a diagonal */ -static int dpd_isdiagonal(int i, int ip2, Ppoint_t ** pointp, int pointn) -{ - int ip1, im1, j, jp1, res; - - /* neighborhood test */ - ip1 = (i + 1) % pointn; - im1 = (i + pointn - 1) % pointn; - /* If P[i] is a convex vertex [ i+1 left of (i-1,i) ]. */ - if (dpd_ccw(pointp[im1], pointp[i], pointp[ip1]) == ISCCW) - res = (dpd_ccw(pointp[i], pointp[ip2], pointp[im1]) == ISCCW) && - (dpd_ccw(pointp[ip2], pointp[i], pointp[ip1]) == ISCCW); - /* Assume (i - 1, i, i + 1) not collinear. */ - else - res = ((dpd_ccw(pointp[i], pointp[ip2], pointp[ip1]) == ISCW) - ); -/* - && - (dpd_ccw (pointp[ip2], pointp[i], pointp[im1]) != ISCW)); -*/ - if (!res) { - return FALSE; - } - - /* check against all other edges */ - for (j = 0; j < pointn; j++) { - jp1 = (j + 1) % pointn; - if (!((j == i) || (jp1 == i) || (j == ip2) || (jp1 == ip2))) - if (dpd_intersects - (pointp[i], pointp[ip2], pointp[j], pointp[jp1])) { - return FALSE; - } - } - return TRUE; -} - -/* line to line intersection */ -static int dpd_intersects(Ppoint_t * pa, Ppoint_t * pb, Ppoint_t * pc, - Ppoint_t * pd) -{ - int ccw1, ccw2, ccw3, ccw4; - - if (dpd_ccw(pa, pb, pc) == ISON || dpd_ccw(pa, pb, pd) == ISON || - dpd_ccw(pc, pd, pa) == ISON || dpd_ccw(pc, pd, pb) == ISON) { - if (dpd_between(pa, pb, pc) || dpd_between(pa, pb, pd) || - dpd_between(pc, pd, pa) || dpd_between(pc, pd, pb)) - return TRUE; - } else { - ccw1 = (dpd_ccw(pa, pb, pc) == ISCCW) ? 1 : 0; - ccw2 = (dpd_ccw(pa, pb, pd) == ISCCW) ? 1 : 0; - ccw3 = (dpd_ccw(pc, pd, pa) == ISCCW) ? 1 : 0; - ccw4 = (dpd_ccw(pc, pd, pb) == ISCCW) ? 1 : 0; - return (ccw1 ^ ccw2) && (ccw3 ^ ccw4); - } - return FALSE; -} - -static int dpd_between(Ppoint_t * pa, Ppoint_t * pb, Ppoint_t * pc) -{ - Ppoint_t pba, pca; - - pba.x = pb->x - pa->x, pba.y = pb->y - pa->y; - pca.x = pc->x - pa->x, pca.y = pc->y - pa->y; - if (dpd_ccw(pa, pb, pc) != ISON) - return FALSE; - return (pca.x * pba.x + pca.y * pba.y >= 0) && - (pca.x * pca.x + pca.y * pca.y <= pba.x * pba.x + pba.y * pba.y); -} diff --git a/internal/ccall/pathplan/util.c b/internal/ccall/pathplan/util.c deleted file mode 100644 index e2d31ce..0000000 --- a/internal/ccall/pathplan/util.c +++ /dev/null @@ -1,107 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include -#include -#include "pathutil.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -#define ALLOC(size,ptr,type) (ptr? (type*)realloc(ptr,(size)*sizeof(type)):(type*)malloc((size)*sizeof(type))) - -Ppoly_t copypoly(Ppoly_t argpoly) -{ - Ppoly_t rv; - int i; - - rv.pn = argpoly.pn; - rv.ps = malloc(sizeof(Ppoint_t) * argpoly.pn); - for (i = 0; i < argpoly.pn; i++) - rv.ps[i] = argpoly.ps[i]; - return rv; -} - -void freePath(Ppolyline_t* p) -{ - free(p->ps); - free(p); -} - -void freepoly(Ppoly_t argpoly) -{ - free(argpoly.ps); -} - -int Ppolybarriers(Ppoly_t ** polys, int npolys, Pedge_t ** barriers, - int *n_barriers) -{ - Ppoly_t pp; - int i, j, k, n, b; - Pedge_t *bar; - - n = 0; - for (i = 0; i < npolys; i++) - n = n + polys[i]->pn; - - bar = malloc(n * sizeof(Pedge_t)); - - b = 0; - for (i = 0; i < npolys; i++) { - pp = *polys[i]; - for (j = 0; j < pp.pn; j++) { - k = j + 1; - if (k >= pp.pn) - k = 0; - bar[b].a = pp.ps[j]; - bar[b].b = pp.ps[k]; - b++; - } - } - assert(b == n); - *barriers = bar; - *n_barriers = n; - return 1; -} - -/* make_polyline: - */ -void -make_polyline(Ppolyline_t line, Ppolyline_t* sline) -{ - static int isz = 0; - static Ppoint_t* ispline = 0; - int i, j; - int npts = 4 + 3*(line.pn-2); - - if (npts > isz) { - ispline = ALLOC(npts, ispline, Ppoint_t); - isz = npts; - } - - j = i = 0; - ispline[j+1] = ispline[j] = line.ps[i]; - j += 2; - i++; - for (; i < line.pn-1; i++) { - ispline[j+2] = ispline[j+1] = ispline[j] = line.ps[i]; - j += 3; - } - ispline[j+1] = ispline[j] = line.ps[i]; - - sline->pn = npts; - sline->ps = ispline; -} - diff --git a/internal/ccall/pathplan/vis.h b/internal/ccall/pathplan/vis.h deleted file mode 100644 index a3534ca..0000000 --- a/internal/ccall/pathplan/vis.h +++ /dev/null @@ -1,84 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#ifndef VISIBILITY_H -#define VISIBILITY_H - -#include -#include -#include -#include -#include "config.h" -#include "vispath.h" -#include "pathutil.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef COORD **array2; - -#define OBSCURED 0.0 - -#ifndef EQ -#define EQ(p,q) ((p.x == q.x) && (p.y == q.y)) -#endif - -#ifndef NEQ -#define NEQ(p,q) (!EQ(p,q)) -#endif - -#ifndef NIL -#define NIL(p) ((p)0) -#endif - -#ifndef CW -#define CW 0 -#endif - -#ifndef CCW -#define CCW 1 -#endif - - struct vconfig_s { - int Npoly; - int N; /* number of points in walk of barriers */ - Ppoint_t *P; /* barrier points */ - int *start; - int *next; - int *prev; - - /* this is computed from the above */ - array2 vis; - }; -#ifdef _WIN32 -#ifndef PATHPLAN_EXPORTS -#define extern __declspec(dllimport) -#endif -#endif -/*end visual studio*/ - - extern COORD *ptVis(vconfig_t *, int, Ppoint_t); - extern int directVis(Ppoint_t, int, Ppoint_t, int, vconfig_t *); - extern void visibility(vconfig_t *); - extern int *makePath(Ppoint_t p, int pp, COORD * pvis, - Ppoint_t q, int qp, COORD * qvis, - vconfig_t * conf); - -#undef extern - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/pathplan/visibility.c b/internal/ccall/pathplan/visibility.c deleted file mode 100644 index c62dea6..0000000 --- a/internal/ccall/pathplan/visibility.c +++ /dev/null @@ -1,450 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "vis.h" - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - - /* TRANSPARENT means router sees past colinear obstacles */ -#ifdef TRANSPARENT -#define INTERSECT(a,b,c,d,e) intersect1((a),(b),(c),(d),(e)) -#else -#define INTERSECT(a,b,c,d,e) intersect((a),(b),(c),(d)) -#endif - -/* allocArray: - * Allocate a VxV array of COORD values. - * (array2 is a pointer to an array of pointers; the array is - * accessed in row-major order.) - * The values in the array are initialized to 0. - * Add extra rows. - */ -static array2 allocArray(int V, int extra) -{ - int i; - array2 arr; - COORD *p; - - arr = (COORD **) malloc((V + extra) * sizeof(COORD *)); - p = (COORD *) calloc(V * V, sizeof(COORD)); - for (i = 0; i < V; i++) { - arr[i] = p; - p += V; - } - for (i = V; i < V + extra; i++) - arr[i] = (COORD *) 0; - - return arr; -} - -/* area2: - * Returns twice the area of triangle abc. - */ -COORD area2(Ppoint_t a, Ppoint_t b, Ppoint_t c) -{ - return ((a.y - b.y) * (c.x - b.x) - (c.y - b.y) * (a.x - b.x)); -} - -/* wind: - * Returns 1, 0, -1 if the points abc are counterclockwise, - * collinear, or clockwise. - */ -int wind(Ppoint_t a, Ppoint_t b, Ppoint_t c) -{ - COORD w; - - w = ((a.y - b.y) * (c.x - b.x) - (c.y - b.y) * (a.x - b.x)); - /* need to allow for small math errors. seen with "gcc -O2 -mcpu=i686 -ffast-math" */ - return (w > .0001) ? 1 : ((w < -.0001) ? -1 : 0); -} - -#if 0 /* NOT USED */ -/* open_intersect: - * Returns true iff segment ab intersects segment cd. - * NB: segments are considered open sets - */ -static int open_intersect(Ppoint_t a, Ppoint_t b, Ppoint_t c, Ppoint_t d) -{ - return (((area2(a, b, c) > 0 && area2(a, b, d) < 0) || - (area2(a, b, c) < 0 && area2(a, b, d) > 0)) - && - ((area2(c, d, a) > 0 && area2(c, d, b) < 0) || - (area2(c, d, a) < 0 && area2(c, d, b) > 0))); -} -#endif - -/* inBetween: - * Return true if c is in (a,b), assuming a,b,c are collinear. - */ -int inBetween(Ppoint_t a, Ppoint_t b, Ppoint_t c) -{ - if (a.x != b.x) /* not vertical */ - return (((a.x < c.x) && (c.x < b.x)) - || ((b.x < c.x) && (c.x < a.x))); - else - return (((a.y < c.y) && (c.y < b.y)) - || ((b.y < c.y) && (c.y < a.y))); -} - - /* TRANSPARENT means router sees past colinear obstacles */ -#ifdef TRANSPARENT -/* intersect1: - * Returns true if the polygon segment [q,n) blocks a and b from seeing - * each other. - * More specifically, returns true iff the two segments intersect as open - * sets, or if q lies on (a,b) and either n and p lie on - * different sides of (a,b), i.e., wind(a,b,n)*wind(a,b,p) < 0, or the polygon - * makes a left turn at q, i.e., wind(p,q,n) > 0. - * - * We are assuming the p,q,n are three consecutive vertices of a barrier - * polygon with the polygon interior to the right of p-q-n. - * - * Note that given the constraints of our problem, we could probably - * simplify this code even more. For example, if abq are collinear, but - * q is not in (a,b), we could return false since n will not be in (a,b) - * nor will the (a,b) intersect (q,n). - * - * Also note that we are computing w_abq twice in a tour of a polygon, - * once for each edge of which it is a vertex. - */ -static int intersect1(Ppoint_t a, Ppoint_t b, Ppoint_t q, Ppoint_t n, - Ppoint_t p) -{ - int w_abq; - int w_abn; - int w_qna; - int w_qnb; - - w_abq = wind(a, b, q); - w_abn = wind(a, b, n); - - /* If q lies on (a,b),... */ - if ((w_abq == 0) && inBetween(a, b, q)) { - return ((w_abn * wind(a, b, p) < 0) || (wind(p, q, n) > 0)); - } else { - w_qna = wind(q, n, a); - w_qnb = wind(q, n, b); - /* True if q and n are on opposite sides of ab, - * and a and b are on opposite sides of qn. - */ - return (((w_abq * w_abn) < 0) && ((w_qna * w_qnb) < 0)); - } -} -#else - -/* intersect: - * Returns true if the segment [c,d] blocks a and b from seeing each other. - * More specifically, returns true iff c or d lies on (a,b) or the two - * segments intersect as open sets. - */ -int intersect(Ppoint_t a, Ppoint_t b, Ppoint_t c, Ppoint_t d) -{ - int a_abc; - int a_abd; - int a_cda; - int a_cdb; - - a_abc = wind(a, b, c); - if ((a_abc == 0) && inBetween(a, b, c)) { - return 1; - } - a_abd = wind(a, b, d); - if ((a_abd == 0) && inBetween(a, b, d)) { - return 1; - } - a_cda = wind(c, d, a); - a_cdb = wind(c, d, b); - - /* True if c and d are on opposite sides of ab, - * and a and b are on opposite sides of cd. - */ - return (((a_abc * a_abd) < 0) && ((a_cda * a_cdb) < 0)); -} -#endif - -/* in_cone: - * Returns true iff point b is in the cone a0,a1,a2 - * NB: the cone is considered a closed set - */ -static int in_cone(Ppoint_t a0, Ppoint_t a1, Ppoint_t a2, Ppoint_t b) -{ - int m = wind(b, a0, a1); - int p = wind(b, a1, a2); - - if (wind(a0, a1, a2) > 0) - return (m >= 0 && p >= 0); /* convex at a */ - else - return (m >= 0 || p >= 0); /* reflex at a */ -} - -#if 0 /* NOT USED */ -/* in_open_cone: - * Returns true iff point b is in the cone a0,a1,a2 - * NB: the cone is considered an open set - */ -static int in_open_cone(Ppoint_t a0, Ppoint_t a1, Ppoint_t a2, Ppoint_t b) -{ - int m = wind(b, a0, a1); - int p = wind(b, a1, a2); - - if (wind(a0, a1, a2) >= 0) - return (m > 0 && p > 0); /* convex at a */ - else - return (m > 0 || p > 0); /* reflex at a */ -} -#endif - -/* dist2: - * Returns the square of the distance between points a and b. - */ -COORD dist2(Ppoint_t a, Ppoint_t b) -{ - COORD delx = a.x - b.x; - COORD dely = a.y - b.y; - - return (delx * delx + dely * dely); -} - -/* dist: - * Returns the distance between points a and b. - */ -static COORD _dist(Ppoint_t a, Ppoint_t b) -{ - return sqrt(dist2(a, b)); -} - -static int inCone(int i, int j, Ppoint_t pts[], int nextPt[], int prevPt[]) -{ - return in_cone(pts[prevPt[i]], pts[i], pts[nextPt[i]], pts[j]); -} - -/* clear: - * Return true if no polygon line segment non-trivially intersects - * the segment [pti,ptj], ignoring segments in [start,end). - */ -static int clear(Ppoint_t pti, Ppoint_t ptj, - int start, int end, - int V, Ppoint_t pts[], int nextPt[], int prevPt[]) -{ - int k; - - for (k = 0; k < start; k++) { - if (INTERSECT(pti, ptj, pts[k], pts[nextPt[k]], pts[prevPt[k]])) - return 0; - } - for (k = end; k < V; k++) { - if (INTERSECT(pti, ptj, pts[k], pts[nextPt[k]], pts[prevPt[k]])) - return 0; - } - return 1; -} - -/* compVis: - * Compute visibility graph of vertices of polygons. - * Only do polygons from index startp to end. - * If two nodes cannot see each other, the matrix entry is 0. - * If two nodes can see each other, the matrix entry is the distance - * between them. - */ -static void compVis(vconfig_t * conf, int start) -{ - int V = conf->N; - Ppoint_t *pts = conf->P; - int *nextPt = conf->next; - int *prevPt = conf->prev; - array2 wadj = conf->vis; - int j, i, previ; - COORD d; - - for (i = start; i < V; i++) { - /* add edge between i and previ. - * Note that this works for the cases of polygons of 1 and 2 - * vertices, though needless work is done. - */ - previ = prevPt[i]; - d = _dist(pts[i], pts[previ]); - wadj[i][previ] = d; - wadj[previ][i] = d; - - /* Check remaining, earlier vertices */ - if (previ == i - 1) - j = i - 2; - else - j = i - 1; - for (; j >= 0; j--) { - if (inCone(i, j, pts, nextPt, prevPt) && - inCone(j, i, pts, nextPt, prevPt) && - clear(pts[i], pts[j], V, V, V, pts, nextPt, prevPt)) { - /* if i and j see each other, add edge */ - d = _dist(pts[i], pts[j]); - wadj[i][j] = d; - wadj[j][i] = d; - } - } - } -} - -/* visibility: - * Given a vconfig_t conf, representing polygonal barriers, - * compute the visibility graph of the vertices of conf. - * The graph is stored in conf->vis. - */ -void visibility(vconfig_t * conf) -{ - conf->vis = allocArray(conf->N, 2); - compVis(conf, 0); -} - -/* polyhit: - * Given a vconfig_t conf, as above, and a point, - * return the index of the polygon that contains - * the point, or else POLYID_NONE. - */ -static int polyhit(vconfig_t * conf, Ppoint_t p) -{ - int i; - Ppoly_t poly; - - for (i = 0; i < conf->Npoly; i++) { - poly.ps = &(conf->P[conf->start[i]]); - poly.pn = conf->start[i + 1] - conf->start[i]; - if (in_poly(poly, p)) - return i; - } - return POLYID_NONE; -} - -/* ptVis: - * Given a vconfig_t conf, representing polygonal barriers, - * and a point within one of the polygons, compute the point's - * visibility vector relative to the vertices of the remaining - * polygons, i.e., pretend the argument polygon is invisible. - * - * If pp is NIL, ptVis computes the visibility vector for p - * relative to all barrier vertices. - */ -COORD *ptVis(vconfig_t * conf, int pp, Ppoint_t p) -{ - int V = conf->N; - Ppoint_t *pts = conf->P; - int *nextPt = conf->next; - int *prevPt = conf->prev; - int k; - int start, end; - COORD *vadj; - Ppoint_t pk; - COORD d; - - vadj = (COORD *) malloc((V + 2) * sizeof(COORD)); - - - if (pp == POLYID_UNKNOWN) - pp = polyhit(conf, p); - if (pp >= 0) { - start = conf->start[pp]; - end = conf->start[pp + 1]; - } else { - start = V; - end = V; - } - - for (k = 0; k < start; k++) { - pk = pts[k]; - if (in_cone(pts[prevPt[k]], pk, pts[nextPt[k]], p) && - clear(p, pk, start, end, V, pts, nextPt, prevPt)) { - /* if p and pk see each other, add edge */ - d = _dist(p, pk); - vadj[k] = d; - } else - vadj[k] = 0; - } - - for (k = start; k < end; k++) - vadj[k] = 0; - - for (k = end; k < V; k++) { - pk = pts[k]; - if (in_cone(pts[prevPt[k]], pk, pts[nextPt[k]], p) && - clear(p, pk, start, end, V, pts, nextPt, prevPt)) { - /* if p and pk see each other, add edge */ - d = _dist(p, pk); - vadj[k] = d; - } else - vadj[k] = 0; - } - vadj[V] = 0; - vadj[V + 1] = 0; - - return vadj; - -} - -/* directVis: - * Given two points, return true if the points can directly see each other. - * If a point is associated with a polygon, the edges of the polygon - * are ignored when checking visibility. - */ -int directVis(Ppoint_t p, int pp, Ppoint_t q, int qp, vconfig_t * conf) -{ - int V = conf->N; - Ppoint_t *pts = conf->P; - int *nextPt = conf->next; - /* int* prevPt = conf->prev; */ - int k; - int s1, e1; - int s2, e2; - - if (pp < 0) { - s1 = 0; - e1 = 0; - if (qp < 0) { - s2 = 0; - e2 = 0; - } else { - s2 = conf->start[qp]; - e2 = conf->start[qp + 1]; - } - } else if (qp < 0) { - s1 = 0; - e1 = 0; - s2 = conf->start[pp]; - e2 = conf->start[pp + 1]; - } else if (pp <= qp) { - s1 = conf->start[pp]; - e1 = conf->start[pp + 1]; - s2 = conf->start[qp]; - e2 = conf->start[qp + 1]; - } else { - s1 = conf->start[qp]; - e1 = conf->start[qp + 1]; - s2 = conf->start[pp]; - e2 = conf->start[pp + 1]; - } - - for (k = 0; k < s1; k++) { - if (INTERSECT(p, q, pts[k], pts[nextPt[k]], pts[prevPt[k]])) - return 0; - } - for (k = e1; k < s2; k++) { - if (INTERSECT(p, q, pts[k], pts[nextPt[k]], pts[prevPt[k]])) - return 0; - } - for (k = e2; k < V; k++) { - if (INTERSECT(p, q, pts[k], pts[nextPt[k]], pts[prevPt[k]])) - return 0; - } - return 1; -} diff --git a/internal/ccall/pathplan/vispath.h b/internal/ccall/pathplan/vispath.h deleted file mode 100644 index db9baef..0000000 --- a/internal/ccall/pathplan/vispath.h +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - - -#ifndef _VIS_INCLUDE -#define _VIS_INCLUDE - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_BLD_pathplan) && defined(__EXPORT__) -# define extern __EXPORT__ -#endif - -/* open a visibility graph - * Points in polygonal obstacles must be in clockwise order. - */ - extern vconfig_t *Pobsopen(Ppoly_t ** obstacles, int n_obstacles); - -/* close a visibility graph, freeing its storage */ - extern void Pobsclose(vconfig_t * config); - -/* route a polyline from p0 to p1, avoiding obstacles. - * if an endpoint is inside an obstacle, pass the polygon's index >=0 - * if the endpoint is not inside an obstacle, pass POLYID_NONE - * if the endpoint location is not known, pass POLYID_UNKNOWN - */ - - extern int Pobspath(vconfig_t * config, Ppoint_t p0, int poly0, - Ppoint_t p1, int poly1, - Ppolyline_t * output_route); - -#define POLYID_NONE -1111 -#define POLYID_UNKNOWN -2222 - -#undef extern - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/plugin.c b/internal/ccall/plugin.c deleted file mode 100644 index 76f3c40..0000000 --- a/internal/ccall/plugin.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "config.h" - -#include "../plugin/core/gvplugin_core.c" -#include "../plugin/core/gvrender_core_dot.c" -#include "../plugin/core/gvrender_core_json.c" -#include "../plugin/core/gvrender_core_fig.c" -#include "../plugin/core/gvrender_core_map.c" -#include "../plugin/core/gvrender_core_mp.c" -#include "../plugin/core/gvrender_core_ps.c" -#include "../plugin/core/gvrender_core_svg.c" -#include "../plugin/core/gvrender_core_tk.c" -#include "../plugin/core/gvrender_core_vml.c" -#include "../plugin/core/gvrender_core_pov.c" -#include "../plugin/core/gvrender_core_pic.c" -#include "../plugin/core/gvloadimage_core.c" - -#include "../plugin/dot_layout/gvlayout_dot_layout.c" -#include "../plugin/dot_layout/gvplugin_dot_layout.c" - -#include "../plugin/neato_layout/gvlayout_neato_layout.c" -#include "../plugin/neato_layout/gvplugin_neato_layout.c" diff --git a/internal/ccall/rbtree.c b/internal/ccall/rbtree.c deleted file mode 100644 index 878c82d..0000000 --- a/internal/ccall/rbtree.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "rbtree/misc.c" -#include "rbtree/red_black_tree.c" -#include "rbtree/stack.c" diff --git a/internal/ccall/rbtree/dummy.go b/internal/ccall/rbtree/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/rbtree/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/rbtree/misc.c b/internal/ccall/rbtree/misc.c deleted file mode 100755 index 3f0d186..0000000 --- a/internal/ccall/rbtree/misc.c +++ /dev/null @@ -1,72 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#include "config.h" - -#include "misc.h" -#include - -jmp_buf rb_jbuf; - -/***********************************************************************/ -/* FUNCTION: void Assert(int assertion, char* error) */ -/**/ -/* INPUTS: assertion should be a predicated that the programmer */ -/* assumes to be true. If this assumption is not true the message */ -/* error is printed and the program exits. */ -/**/ -/* OUTPUT: None. */ -/**/ -/* Modifies input: none */ -/**/ -/* Note: If DEBUG_ASSERT is not defined then assertions should not */ -/* be in use as they will slow down the code. Therefore the */ -/* compiler will complain if an assertion is used when */ -/* DEBUG_ASSERT is undefined. */ -/***********************************************************************/ - - -void Assert(int assertion, char* error) { - if(!assertion) { - fprintf(stderr, "Assertion Failed: %s\n",error); - longjmp(rb_jbuf, 1); - } -} - - - -/***********************************************************************/ -/* FUNCTION: SafeMalloc */ -/**/ -/* INPUTS: size is the size to malloc */ -/**/ -/* OUTPUT: returns pointer to allocated memory if succesful */ -/**/ -/* EFFECT: mallocs new memory. If malloc fails, prints error message */ -/* and terminates program. */ -/**/ -/* Modifies Input: none */ -/**/ -/***********************************************************************/ - -void * SafeMalloc(size_t size) { - void * result; - - if ( (result = malloc(size)) ) { /* assignment intentional */ - return(result); - } else { - fprintf(stderr, "memory overflow: malloc failed in SafeMalloc."); - /* printf(" Exiting Program.\n"); */ - longjmp(rb_jbuf, 2); - return(0); - } -} -/* NullFunction does nothing it is included so that it can be passed */ -/* as a function to RBTreeCreate when no other suitable function has */ -/* been defined */ - -void NullFunction(void * junk) { ; } diff --git a/internal/ccall/rbtree/misc.h b/internal/ccall/rbtree/misc.h deleted file mode 100755 index be440ee..0000000 --- a/internal/ccall/rbtree/misc.h +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#ifndef INC_E_MISC_ -#define INC_E_MISC_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -extern jmp_buf rb_jbuf; - -/* CONVENTIONS: All data structures for red-black trees have the prefix */ -/* "rb_" to prevent name conflicts. */ -/* */ -/* Function names: Each word in a function name begins with */ -/* a capital letter. An example funcntion name is */ -/* CreateRedTree(a,b,c). Furthermore, each function name */ -/* should begin with a capital letter to easily distinguish */ -/* them from variables. */ -/* */ -/* Variable names: Each word in a variable name begins with */ -/* a capital letter EXCEPT the first letter of the variable */ -/* name. For example, int newLongInt. Global variables have */ -/* names beginning with "g". An example of a global */ -/* variable name is gNewtonsConstant. */ - -void Assert(int assertion, char* error); -void * SafeMalloc(size_t size); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/internal/ccall/rbtree/red_black_tree.c b/internal/ccall/rbtree/red_black_tree.c deleted file mode 100755 index d53ec6b..0000000 --- a/internal/ccall/rbtree/red_black_tree.c +++ /dev/null @@ -1,694 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#include "config.h" - -#include "red_black_tree.h" -#include "stdio.h" - -/***********************************************************************/ -/* FUNCTION: RBTreeCreate */ -/**/ -/* INPUTS: All the inputs are names of functions. CompFunc takes to */ -/* void pointers to keys and returns 1 if the first arguement is */ -/* "greater than" the second. DestFunc takes a pointer to a key and */ -/* destroys it in the appropriate manner when the node containing that */ -/* key is deleted. InfoDestFunc is similiar to DestFunc except it */ -/* recieves a pointer to the info of a node and destroys it. */ -/* PrintFunc recieves a pointer to the key of a node and prints it. */ -/* PrintInfo recieves a pointer to the info of a node and prints it. */ -/* If RBTreePrint is never called the print functions don't have to be */ -/* defined and NullFunction can be used. */ -/**/ -/* OUTPUT: This function returns a pointer to the newly created */ -/* red-black tree. */ -/**/ -/* Modifies Input: none */ -/***********************************************************************/ - -rb_red_blk_tree* RBTreeCreate( int (*CompFunc) (const void*,const void*), - void (*DestFunc) (void*), - void (*InfoDestFunc) (void*), - void (*PrintFunc) (const void*), - void (*PrintInfo)(void*)) { - rb_red_blk_tree* newTree = NULL; - rb_red_blk_node* temp; - - if (setjmp(rb_jbuf)) { - if (newTree) { - if (newTree->nil) free (newTree->nil); - free (newTree); - } - return NULL; - } - newTree=(rb_red_blk_tree*) SafeMalloc(sizeof(rb_red_blk_tree)); - newTree->nil = newTree->root = NULL; - newTree->Compare= CompFunc; - newTree->DestroyKey= DestFunc; - newTree->PrintKey= PrintFunc; - newTree->PrintInfo= PrintInfo; - newTree->DestroyInfo= InfoDestFunc; - - /* see the comment in the rb_red_blk_tree structure in red_black_tree.h */ - /* for information on nil and root */ - temp=newTree->nil= (rb_red_blk_node*) SafeMalloc(sizeof(rb_red_blk_node)); - temp->parent=temp->left=temp->right=temp; - temp->red=0; - temp->key=0; - temp=newTree->root= (rb_red_blk_node*) SafeMalloc(sizeof(rb_red_blk_node)); - temp->parent=temp->left=temp->right=newTree->nil; - temp->key=0; - temp->red=0; - return(newTree); -} - -/***********************************************************************/ -/* FUNCTION: LeftRotate */ -/**/ -/* INPUTS: This takes a tree so that it can access the appropriate */ -/* root and nil pointers, and the node to rotate on. */ -/**/ -/* OUTPUT: None */ -/**/ -/* Modifies Input: tree, x */ -/**/ -/* EFFECTS: Rotates as described in _Introduction_To_Algorithms by */ -/* Cormen, Leiserson, Rivest (Chapter 14). Basically this */ -/* makes the parent of x be to the left of x, x the parent of */ -/* its parent before the rotation and fixes other pointers */ -/* accordingly. */ -/***********************************************************************/ - -void LeftRotate(rb_red_blk_tree* tree, rb_red_blk_node* x) { - rb_red_blk_node* y; - rb_red_blk_node* nil=tree->nil; - - /* I originally wrote this function to use the sentinel for */ - /* nil to avoid checking for nil. However this introduces a */ - /* very subtle bug because sometimes this function modifies */ - /* the parent pointer of nil. This can be a problem if a */ - /* function which calls LeftRotate also uses the nil sentinel */ - /* and expects the nil sentinel's parent pointer to be unchanged */ - /* after calling this function. For example, when RBDeleteFixUP */ - /* calls LeftRotate it expects the parent pointer of nil to be */ - /* unchanged. */ - - y=x->right; - x->right=y->left; - - if (y->left != nil) y->left->parent=x; /* used to use sentinel here */ - /* and do an unconditional assignment instead of testing for nil */ - - y->parent=x->parent; - - /* instead of checking if x->parent is the root as in the book, we */ - /* count on the root sentinel to implicitly take care of this case */ - if( x == x->parent->left) { - x->parent->left=y; - } else { - x->parent->right=y; - } - y->left=x; - x->parent=y; - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not red in LeftRotate"); -#endif -} - - -/***********************************************************************/ -/* FUNCTION: RighttRotate */ -/**/ -/* INPUTS: This takes a tree so that it can access the appropriate */ -/* root and nil pointers, and the node to rotate on. */ -/**/ -/* OUTPUT: None */ -/**/ -/* Modifies Input?: tree, y */ -/**/ -/* EFFECTS: Rotates as described in _Introduction_To_Algorithms by */ -/* Cormen, Leiserson, Rivest (Chapter 14). Basically this */ -/* makes the parent of x be to the left of x, x the parent of */ -/* its parent before the rotation and fixes other pointers */ -/* accordingly. */ -/***********************************************************************/ - -void RightRotate(rb_red_blk_tree* tree, rb_red_blk_node* y) { - rb_red_blk_node* x; - rb_red_blk_node* nil=tree->nil; - - /* I originally wrote this function to use the sentinel for */ - /* nil to avoid checking for nil. However this introduces a */ - /* very subtle bug because sometimes this function modifies */ - /* the parent pointer of nil. This can be a problem if a */ - /* function which calls LeftRotate also uses the nil sentinel */ - /* and expects the nil sentinel's parent pointer to be unchanged */ - /* after calling this function. For example, when RBDeleteFixUP */ - /* calls LeftRotate it expects the parent pointer of nil to be */ - /* unchanged. */ - - x=y->left; - y->left=x->right; - - if (nil != x->right) x->right->parent=y; /*used to use sentinel here */ - /* and do an unconditional assignment instead of testing for nil */ - - /* instead of checking if x->parent is the root as in the book, we */ - /* count on the root sentinel to implicitly take care of this case */ - x->parent=y->parent; - if( y == y->parent->left) { - y->parent->left=x; - } else { - y->parent->right=x; - } - x->right=y; - y->parent=x; - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not red in RightRotate"); -#endif -} - -/***********************************************************************/ -/* FUNCTION: TreeInsertHelp */ -/**/ -/* INPUTS: tree is the tree to insert into and z is the node to insert */ -/**/ -/* OUTPUT: none */ -/**/ -/* Modifies Input: tree, z */ -/**/ -/* EFFECTS: Inserts z into the tree as if it were a regular binary tree */ -/* using the algorithm described in _Introduction_To_Algorithms_ */ -/* by Cormen et al. This funciton is only intended to be called */ -/* by the RBTreeInsert function and not by the user */ -/***********************************************************************/ - -void TreeInsertHelp(rb_red_blk_tree* tree, rb_red_blk_node* z) { - /* This function should only be called by InsertRBTree (see above) */ - rb_red_blk_node* x; - rb_red_blk_node* y; - rb_red_blk_node* nil=tree->nil; - - z->left=z->right=nil; - y=tree->root; - x=tree->root->left; - while( x != nil) { - y=x; - if (1 == tree->Compare(x->key,z->key)) { /* x.key > z.key */ - x=x->left; - } else { /* x,key <= z.key */ - x=x->right; - } - } - z->parent=y; - if ( (y == tree->root) || - (1 == tree->Compare(y->key,z->key))) { /* y.key > z.key */ - y->left=z; - } else { - y->right=z; - } - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not red in TreeInsertHelp"); -#endif -} - -/* Before calling Insert RBTree the node x should have its key set */ - -/***********************************************************************/ -/* FUNCTION: RBTreeInsert */ -/**/ -/* INPUTS: tree is the red-black tree to insert a node which has a key */ -/* pointed to by key and info pointed to by info. */ -/**/ -/* OUTPUT: This function returns a pointer to the newly inserted node */ -/* which is guarunteed to be valid until this node is deleted. */ -/* What this means is if another data structure stores this */ -/* pointer then the tree does not need to be searched when this */ -/* is to be deleted. */ -/**/ -/* Modifies Input: tree */ -/**/ -/* EFFECTS: Creates a node node which contains the appropriate key and */ -/* info pointers and inserts it into the tree. */ -/***********************************************************************/ - -rb_red_blk_node * RBTreeInsert(rb_red_blk_tree* tree, void* key, void* info) { - rb_red_blk_node * y; - rb_red_blk_node * x; - rb_red_blk_node * newNode; - - if (setjmp(rb_jbuf)) - return NULL; - x=(rb_red_blk_node*) SafeMalloc(sizeof(rb_red_blk_node)); - x->key=key; - x->info=info; - - TreeInsertHelp(tree,x); - newNode=x; - x->red=1; - while(x->parent->red) { /* use sentinel instead of checking for root */ - if (x->parent == x->parent->parent->left) { - y=x->parent->parent->right; - if (y->red) { - x->parent->red=0; - y->red=0; - x->parent->parent->red=1; - x=x->parent->parent; - } else { - if (x == x->parent->right) { - x=x->parent; - LeftRotate(tree,x); - } - x->parent->red=0; - x->parent->parent->red=1; - RightRotate(tree,x->parent->parent); - } - } else { /* case for x->parent == x->parent->parent->right */ - y=x->parent->parent->left; - if (y->red) { - x->parent->red=0; - y->red=0; - x->parent->parent->red=1; - x=x->parent->parent; - } else { - if (x == x->parent->left) { - x=x->parent; - RightRotate(tree,x); - } - x->parent->red=0; - x->parent->parent->red=1; - LeftRotate(tree,x->parent->parent); - } - } - } - tree->root->left->red=0; - return(newNode); - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not red in RBTreeInsert"); - Assert(!tree->root->red,"root not red in RBTreeInsert"); -#endif -} - -/***********************************************************************/ -/* FUNCTION: TreeSuccessor */ -/**/ -/* INPUTS: tree is the tree in question, and x is the node we want the */ -/* the successor of. */ -/**/ -/* OUTPUT: This function returns the successor of x or NULL if no */ -/* successor exists. */ -/**/ -/* Modifies Input: none */ -/**/ -/* Note: uses the algorithm in _Introduction_To_Algorithms_ */ -/***********************************************************************/ - -rb_red_blk_node* TreeSuccessor(rb_red_blk_tree* tree,rb_red_blk_node* x) { - rb_red_blk_node* y; - rb_red_blk_node* nil=tree->nil; - rb_red_blk_node* root=tree->root; - - if (nil != (y = x->right)) { /* assignment to y is intentional */ - while(y->left != nil) { /* returns the minium of the right subtree of x */ - y=y->left; - } - return(y); - } else { - y=x->parent; - while(x == y->right) { /* sentinel used instead of checking for nil */ - x=y; - y=y->parent; - } - if (y == root) return(nil); - return(y); - } -} - -/***********************************************************************/ -/* FUNCTION: Treepredecessor */ -/**/ -/* INPUTS: tree is the tree in question, and x is the node we want the */ -/* the predecessor of. */ -/**/ -/* OUTPUT: This function returns the predecessor of x or NULL if no */ -/* predecessor exists. */ -/**/ -/* Modifies Input: none */ -/**/ -/* Note: uses the algorithm in _Introduction_To_Algorithms_ */ -/***********************************************************************/ - -rb_red_blk_node* TreePredecessor(rb_red_blk_tree* tree, rb_red_blk_node* x) { - rb_red_blk_node* y; - rb_red_blk_node* nil=tree->nil; - rb_red_blk_node* root=tree->root; - - if (nil != (y = x->left)) { /* assignment to y is intentional */ - while(y->right != nil) { /* returns the maximum of the left subtree of x */ - y=y->right; - } - return(y); - } else { - y=x->parent; - while(x == y->left) { - if (y == root) return(nil); - x=y; - y=y->parent; - } - return(y); - } -} - -/***********************************************************************/ -/* FUNCTION: InorderTreePrint */ -/**/ -/* INPUTS: tree is the tree to print and x is the current inorder node */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECTS: This function recursively prints the nodes of the tree */ -/* inorder using the PrintKey and PrintInfo functions. */ -/**/ -/* Modifies Input: none */ -/**/ -/* Note: This function should only be called from RBTreePrint */ -/***********************************************************************/ - -void InorderTreePrint(rb_red_blk_tree* tree, rb_red_blk_node* x) { - rb_red_blk_node* nil=tree->nil; - rb_red_blk_node* root=tree->root; - if (x != tree->nil) { - InorderTreePrint(tree,x->left); - printf("info="); - tree->PrintInfo(x->info); - printf(" key="); - tree->PrintKey(x->key); - printf(" l->key="); - if( x->left == nil) printf("NULL"); else tree->PrintKey(x->left->key); - printf(" r->key="); - if( x->right == nil) printf("NULL"); else tree->PrintKey(x->right->key); - printf(" p->key="); - if( x->parent == root) printf("NULL"); else tree->PrintKey(x->parent->key); - printf(" red=%i\n",x->red); - InorderTreePrint(tree,x->right); - } -} - - -/***********************************************************************/ -/* FUNCTION: TreeDestHelper */ -/**/ -/* INPUTS: tree is the tree to destroy and x is the current node */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECTS: This function recursively destroys the nodes of the tree */ -/* postorder using the DestroyKey and DestroyInfo functions. */ -/**/ -/* Modifies Input: tree, x */ -/**/ -/* Note: This function should only be called by RBTreeDestroy */ -/***********************************************************************/ - -void TreeDestHelper(rb_red_blk_tree* tree, rb_red_blk_node* x) { - rb_red_blk_node* nil=tree->nil; - if (x != nil) { - TreeDestHelper(tree,x->left); - TreeDestHelper(tree,x->right); - tree->DestroyKey(x->key); - tree->DestroyInfo(x->info); - free(x); - } -} - - -/***********************************************************************/ -/* FUNCTION: RBTreeDestroy */ -/**/ -/* INPUTS: tree is the tree to destroy */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECT: Destroys the key and frees memory */ -/**/ -/* Modifies Input: tree */ -/**/ -/***********************************************************************/ - -void RBTreeDestroy(rb_red_blk_tree* tree) { - TreeDestHelper(tree,tree->root->left); - free(tree->root); - free(tree->nil); - free(tree); -} - - -/***********************************************************************/ -/* FUNCTION: RBTreePrint */ -/**/ -/* INPUTS: tree is the tree to print */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECT: This function recursively prints the nodes of the tree */ -/* inorder using the PrintKey and PrintInfo functions. */ -/**/ -/* Modifies Input: none */ -/**/ -/***********************************************************************/ - -void RBTreePrint(rb_red_blk_tree* tree) { - InorderTreePrint(tree,tree->root->left); -} - - -/***********************************************************************/ -/* FUNCTION: RBExactQuery */ -/**/ -/* INPUTS: tree is the tree to print and q is a pointer to the key */ -/* we are searching for */ -/**/ -/* OUTPUT: returns the a node with key equal to q. If there are */ -/* multiple nodes with key equal to q this function returns */ -/* the one highest in the tree */ -/**/ -/* Modifies Input: none */ -/**/ -/***********************************************************************/ - -rb_red_blk_node* RBExactQuery(rb_red_blk_tree* tree, void* q) { - rb_red_blk_node* x=tree->root->left; - rb_red_blk_node* nil=tree->nil; - int compVal; - if (x == nil) return(0); - compVal=tree->Compare(x->key,(int*) q); - while(0 != compVal) {/*assignemnt*/ - if (1 == compVal) { /* x->key > q */ - x=x->left; - } else { - x=x->right; - } - if ( x == nil) return(0); - compVal=tree->Compare(x->key,(int*) q); - } - return(x); -} - - -/***********************************************************************/ -/* FUNCTION: RBDeleteFixUp */ -/**/ -/* INPUTS: tree is the tree to fix and x is the child of the spliced */ -/* out node in RBTreeDelete. */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECT: Performs rotations and changes colors to restore red-black */ -/* properties after a node is deleted */ -/**/ -/* Modifies Input: tree, x */ -/**/ -/* The algorithm from this function is from _Introduction_To_Algorithms_ */ -/***********************************************************************/ - -void RBDeleteFixUp(rb_red_blk_tree* tree, rb_red_blk_node* x) { - rb_red_blk_node* root=tree->root->left; - rb_red_blk_node* w; - - while( (!x->red) && (root != x)) { - if (x == x->parent->left) { - w=x->parent->right; - if (w->red) { - w->red=0; - x->parent->red=1; - LeftRotate(tree,x->parent); - w=x->parent->right; - } - if ( (!w->right->red) && (!w->left->red) ) { - w->red=1; - x=x->parent; - } else { - if (!w->right->red) { - w->left->red=0; - w->red=1; - RightRotate(tree,w); - w=x->parent->right; - } - w->red=x->parent->red; - x->parent->red=0; - w->right->red=0; - LeftRotate(tree,x->parent); - x=root; /* this is to exit while loop */ - } - } else { /* the code below is has left and right switched from above */ - w=x->parent->left; - if (w->red) { - w->red=0; - x->parent->red=1; - RightRotate(tree,x->parent); - w=x->parent->left; - } - if ( (!w->right->red) && (!w->left->red) ) { - w->red=1; - x=x->parent; - } else { - if (!w->left->red) { - w->right->red=0; - w->red=1; - LeftRotate(tree,w); - w=x->parent->left; - } - w->red=x->parent->red; - x->parent->red=0; - w->left->red=0; - RightRotate(tree,x->parent); - x=root; /* this is to exit while loop */ - } - } - } - x->red=0; - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not black in RBDeleteFixUp"); -#endif -} - - -/***********************************************************************/ -/* FUNCTION: RBDelete */ -/**/ -/* INPUTS: tree is the tree to delete node z from */ -/**/ -/* OUTPUT: none */ -/**/ -/* EFFECT: Deletes z from tree and frees the key and info of z */ -/* using DestoryKey and DestoryInfo. Then calls */ -/* RBDeleteFixUp to restore red-black properties */ -/**/ -/* Modifies Input: tree, z */ -/**/ -/* The algorithm from this function is from _Introduction_To_Algorithms_ */ -/***********************************************************************/ - -void RBDelete(rb_red_blk_tree* tree, rb_red_blk_node* z){ - rb_red_blk_node* y; - rb_red_blk_node* x; - rb_red_blk_node* nil=tree->nil; - rb_red_blk_node* root=tree->root; - - y= ((z->left == nil) || (z->right == nil)) ? z : TreeSuccessor(tree,z); - x= (y->left == nil) ? y->right : y->left; - if (root == (x->parent = y->parent)) { /* assignment of y->p to x->p is intentional */ - root->left=x; - } else { - if (y == y->parent->left) { - y->parent->left=x; - } else { - y->parent->right=x; - } - } - if (y != z) { /* y should not be nil in this case */ - -#ifdef DEBUG_ASSERT - Assert( (y!=tree->nil),"y is nil in RBDelete\n"); -#endif - /* y is the node to splice out and x is its child */ - - if (!(y->red)) RBDeleteFixUp(tree,x); - - tree->DestroyKey(z->key); - tree->DestroyInfo(z->info); - y->left=z->left; - y->right=z->right; - y->parent=z->parent; - y->red=z->red; - z->left->parent=z->right->parent=y; - if (z == z->parent->left) { - z->parent->left=y; - } else { - z->parent->right=y; - } - free(z); - } else { - tree->DestroyKey(y->key); - tree->DestroyInfo(y->info); - if (!(y->red)) RBDeleteFixUp(tree,x); - free(y); - } - -#ifdef DEBUG_ASSERT - Assert(!tree->nil->red,"nil not black in RBDelete"); -#endif -} - - -/***********************************************************************/ -/* FUNCTION: RBEnumerate */ -/**/ -/* INPUTS: tree is the tree to look for keys >= low */ -/* and <= high with respect to the Compare function */ -/**/ -/* OUTPUT: stack containing pointers to the nodes between [low,high] */ -/**/ -/* Modifies Input: none */ -/***********************************************************************/ - -stk_stack* RBEnumerate(rb_red_blk_tree* tree, void* low, void* high) { - stk_stack* enumResultStack; - rb_red_blk_node* nil=tree->nil; - rb_red_blk_node* x=tree->root->left; - rb_red_blk_node* lastBest=nil; - - if (setjmp(rb_jbuf)) { - return NULL; - } - enumResultStack=StackCreate(); - while(nil != x) { - if ( 1 == (tree->Compare(x->key,high)) ) { /* x->key > high */ - x=x->left; - } else { - lastBest=x; - x=x->right; - } - } - while ( (lastBest != nil) && (1 != tree->Compare(low,lastBest->key))) { - StackPush(enumResultStack,lastBest); - lastBest=TreePredecessor(tree,lastBest); - } - return(enumResultStack); -} - - - - - - - diff --git a/internal/ccall/rbtree/red_black_tree.h b/internal/ccall/rbtree/red_black_tree.h deleted file mode 100755 index ba822a5..0000000 --- a/internal/ccall/rbtree/red_black_tree.h +++ /dev/null @@ -1,87 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#ifndef RED_BLACK_TREE_H -#define RED_BLACK_TREE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef DMALLOC -#include -#endif -#include "misc.h" -#include "stack.h" - -/* CONVENTIONS: All data structures for red-black trees have the prefix */ -/* "rb_" to prevent name conflicts. */ -/* */ -/* Function names: Each word in a function name begins with */ -/* a capital letter. An example funcntion name is */ -/* CreateRedTree(a,b,c). Furthermore, each function name */ -/* should begin with a capital letter to easily distinguish */ -/* them from variables. */ -/* */ -/* Variable names: Each word in a variable name begins with */ -/* a capital letter EXCEPT the first letter of the variable */ -/* name. For example, int newLongInt. Global variables have */ -/* names beginning with "g". An example of a global */ -/* variable name is gNewtonsConstant. */ - -/* comment out the line below to remove all the debugging assertion */ -/* checks from the compiled code. */ -/* #define DEBUG_ASSERT 1 */ - -typedef struct rb_red_blk_node { - void* key; - void* info; - int red; /* if red=0 then the node is black */ - struct rb_red_blk_node* left; - struct rb_red_blk_node* right; - struct rb_red_blk_node* parent; -} rb_red_blk_node; - - -/* Compare(a,b) should return 1 if *a > *b, -1 if *a < *b, and 0 otherwise */ -/* Destroy(a) takes a pointer to whatever key might be and frees it accordingly */ -typedef struct rb_red_blk_tree { - int (*Compare)(const void* a, const void* b); - void (*DestroyKey)(void* a); - void (*DestroyInfo)(void* a); - void (*PrintKey)(const void* a); - void (*PrintInfo)(void* a); - /* A sentinel is used for root and for nil. These sentinels are */ - /* created when RBTreeCreate is caled. root->left should always */ - /* point to the node which is the root of the tree. nil points to a */ - /* node which should always be black but has aribtrary children and */ - /* parent and no key or info. The point of using these sentinels is so */ - /* that the root and nil nodes do not require special cases in the code */ - rb_red_blk_node* root; - rb_red_blk_node* nil; -} rb_red_blk_tree; - -rb_red_blk_tree* RBTreeCreate(int (*CompFunc)(const void*, const void*), - void (*DestFunc)(void*), - void (*InfoDestFunc)(void*), - void (*PrintFunc)(const void*), - void (*PrintInfo)(void*)); -rb_red_blk_node * RBTreeInsert(rb_red_blk_tree*, void* key, void* info); -void RBTreePrint(rb_red_blk_tree*); -void RBDelete(rb_red_blk_tree* , rb_red_blk_node* ); -void RBTreeDestroy(rb_red_blk_tree*); -rb_red_blk_node* TreePredecessor(rb_red_blk_tree*,rb_red_blk_node*); -rb_red_blk_node* TreeSuccessor(rb_red_blk_tree*,rb_red_blk_node*); -rb_red_blk_node* RBExactQuery(rb_red_blk_tree*, void*); -stk_stack * RBEnumerate(rb_red_blk_tree* tree,void* low, void* high); -void NullFunction(void*); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/rbtree/simple_test.sh b/internal/ccall/rbtree/simple_test.sh deleted file mode 100755 index 8610c70..0000000 --- a/internal/ccall/rbtree/simple_test.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -eval `dmalloc -l logfile -i 100 high` -./test_rb<top : 0); -} - -stk_stack * StackJoin(stk_stack * stack1, stk_stack * stack2) { - if (!stack1->tail) { - free(stack1); - return(stack2); - } else { - stack1->tail->next=stack2->top; - stack1->tail=stack2->tail; - free(stack2); - return(stack1); - } -} - -stk_stack * StackCreate() { - stk_stack * newStack; - - newStack=(stk_stack *) SafeMalloc(sizeof(stk_stack)); - newStack->top=newStack->tail=NULL; - return(newStack); -} - - -void StackPush(stk_stack * theStack, DATA_TYPE newInfoPointer) { - stk_stack_node * newNode; - - if(!theStack->top) { - newNode=(stk_stack_node *) SafeMalloc(sizeof(stk_stack_node)); - newNode->info=newInfoPointer; - newNode->next=theStack->top; - theStack->top=newNode; - theStack->tail=newNode; - } else { - newNode=(stk_stack_node *) SafeMalloc(sizeof(stk_stack_node)); - newNode->info=newInfoPointer; - newNode->next=theStack->top; - theStack->top=newNode; - } - -} - -DATA_TYPE StackPop(stk_stack * theStack) { - DATA_TYPE popInfo; - stk_stack_node * oldNode; - - if(theStack->top) { - popInfo=theStack->top->info; - oldNode=theStack->top; - theStack->top=theStack->top->next; - free(oldNode); - if (!theStack->top) theStack->tail=NULL; - } else { - popInfo=NULL; - } - return(popInfo); -} - -void StackDestroy(stk_stack * theStack,void DestFunc(void * a)) { - if(theStack) { - stk_stack_node * x=theStack->top; - stk_stack_node * y; - while(x) { - y=x->next; - DestFunc(x->info); - free(x); - x=y; - } - free(theStack); - } -} - diff --git a/internal/ccall/rbtree/stack.h b/internal/ccall/rbtree/stack.h deleted file mode 100755 index fe9395e..0000000 --- a/internal/ccall/rbtree/stack.h +++ /dev/null @@ -1,66 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#ifndef STACK_H -#define STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* needed for intptr_t */ -#include "config.h" -#include - -#include "misc.h" - -/* CONVENTIONS: All data structures for stacks have the prefix */ -/* "stk_" to prevent name conflicts. */ -/* */ -/* Function names: Each word in a function name begins with */ -/* a capital letter. An example funcntion name is */ -/* CreateRedTree(a,b,c). Furthermore, each function name */ -/* should begin with a capital letter to easily distinguish */ -/* them from variables. */ -/* */ -/* Variable names: Each word in a variable name begins with */ -/* a capital letter EXCEPT the first letter of the variable */ -/* name. For example, int newLongInt. Global variables have */ -/* names beginning with "g". An example of a global */ -/* variable name is gNewtonsConstant. */ - -/* if DATA_TYPE is undefined then stack.h and stack.c will be code for */ -/* stacks of void *, if they are defined then they will be stacks of the */ -/* appropriate data_type */ - -#ifndef DATA_TYPE -#define DATA_TYPE void * -#endif - -typedef struct stk_stack_node { - DATA_TYPE info; - struct stk_stack_node * next; -} stk_stack_node; - -typedef struct stk_stack { - stk_stack_node * top; - stk_stack_node * tail; -} stk_stack ; - -/* These functions are all very straightforward and self-commenting so */ -/* I didn't think additional comments would be useful */ -stk_stack * StackJoin(stk_stack * stack1, stk_stack * stack2); -stk_stack * StackCreate(void); -void StackPush(stk_stack * theStack, DATA_TYPE newInfoPointer); -void * StackPop(stk_stack * theStack); -intptr_t StackNotEmpty(stk_stack *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/ccall/rbtree/test_red_black_tree.c b/internal/ccall/rbtree/test_red_black_tree.c deleted file mode 100755 index 91e63c2..0000000 --- a/internal/ccall/rbtree/test_red_black_tree.c +++ /dev/null @@ -1,153 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/********************************************************** -* See the LICENSE file for copyright infomation. * -**********************************************************/ - -#include "config.h" - -#include"red_black_tree.h" -#include -#include - - -/* this file has functions to test a red-black tree of integers */ - -void IntDest(void* a) { - free((int*)a); -} - - - -int IntComp(const void* a,const void* b) { - if( *(int*)a > *(int*)b) return(1); - if( *(int*)a < *(int*)b) return(-1); - return(0); -} - -void IntPrint(const void* a) { - printf("%i",*(int*)a); -} - -void InfoPrint(void* a) { - ; -} - -void InfoDest(void *a){ - ; -} - -int main() { - stk_stack* enumResult; - int option=0; - int newKey,newKey2; - int* newInt; - rb_red_blk_node* newNode; - rb_red_blk_tree* tree; - - tree=RBTreeCreate(IntComp,IntDest,InfoDest,IntPrint,InfoPrint); - while(option!=8) { - printf("choose one of the following:\n"); - printf("(1) add to tree\n(2) delete from tree\n(3) query\n"); - printf("(4) find predecessor\n(5) find sucessor\n(6) enumerate\n"); - printf("(7) print tree\n(8) quit\n"); - do option=fgetc(stdin); while(-1 != option && isspace(option)); - option-='0'; - switch(option) - { - case 1: - { - printf("type key for new node\n"); - scanf("%i",&newKey); - newInt=(int*) malloc(sizeof(int)); - *newInt=newKey; - RBTreeInsert(tree,newInt,0); - } - break; - - case 2: - { - printf("type key of node to remove\n"); - scanf("%i",&newKey); - if ( ( newNode=RBExactQuery(tree,&newKey ) ) ) RBDelete(tree,newNode);/*assignment*/ - else printf("key not found in tree, no action taken\n"); - } - break; - - case 3: - { - printf("type key of node to query for\n"); - scanf("%i",&newKey); - if ( ( newNode = RBExactQuery(tree,&newKey) ) ) {/*assignment*/ - printf("data found in tree at location %i\n",(int)newNode); - } else { - printf("data not in tree\n"); - } - } - break; - case 4: - { - printf("type key of node to find predecessor of\n"); - scanf("%i",&newKey); - if ( ( newNode = RBExactQuery(tree,&newKey) ) ) {/*assignment*/ - newNode=TreePredecessor(tree,newNode); - if(tree->nil == newNode) { - printf("there is no predecessor for that node (it is a minimum)\n"); - } else { - printf("predecessor has key %i\n",*(int*)newNode->key); - } - } else { - printf("data not in tree\n"); - } - } - break; - case 5: - { - printf("type key of node to find successor of\n"); - scanf("%i",&newKey); - if ( (newNode = RBExactQuery(tree,&newKey) ) ) { - newNode=TreeSuccessor(tree,newNode); - if(tree->nil == newNode) { - printf("there is no successor for that node (it is a maximum)\n"); - } else { - printf("successor has key %i\n",*(int*)newNode->key); - } - } else { - printf("data not in tree\n"); - } - } - break; - case 6: - { - printf("type low and high keys to see all keys between them\n"); - scanf("%i %i",&newKey,&newKey2); - enumResult=RBEnumerate(tree,&newKey,&newKey2); - while ( (newNode = StackPop(enumResult)) ) { - tree->PrintKey(newNode->key); - printf("\n"); - } - free(enumResult); - } - break; - case 7: - { - RBTreePrint(tree); - } - break; - case 8: - { - RBTreeDestroy(tree); - return 0; - } - break; - default: - printf("Invalid input; Please try again.\n"); - } - } - return 0; -} - - - - diff --git a/internal/ccall/sfdpgen.c b/internal/ccall/sfdpgen.c deleted file mode 100644 index e0c8d99..0000000 --- a/internal/ccall/sfdpgen.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "sfdpgen/sfdpinit.c" -#include "sfdpgen/spring_electrical.c" -#include "sfdpgen/sparse_solve.c" -#include "sfdpgen/post_process.c" -#include "sfdpgen/stress_model.c" -#include "sfdpgen/uniform_stress.c" -#include "sfdpgen/Multilevel.c" -#include "sfdpgen/PriorityQueue.c" diff --git a/internal/ccall/sfdpgen/Multilevel.c b/internal/ccall/sfdpgen/Multilevel.c deleted file mode 100644 index add0f9f..0000000 --- a/internal/ccall/sfdpgen/Multilevel.c +++ /dev/null @@ -1,1318 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "Multilevel.h" -#include "PriorityQueue.h" -#include "memory.h" -#include "logic.h" -#include "assert.h" -#include "arith.h" - - -Multilevel_control Multilevel_control_new(int scheme, int mode){ - Multilevel_control ctrl; - - ctrl = GNEW(struct Multilevel_control_struct); - ctrl->minsize = 4; - ctrl->min_coarsen_factor = 0.75; - ctrl->maxlevel = 1<<30; - ctrl->randomize = TRUE; - /* now set in spring_electrical_control_new(), as well as by command line argument -c - ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST; - ctrl->coarsen_scheme = COARSEN_INDEPENDENT_VERTEX_SET_RS; - ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE; - ctrl->coarsen_scheme = COARSEN_HYBRID; - ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST; - ctrl->coarsen_mode = COARSEN_MODE_FORCEFUL; or COARSEN_MODE_GENTLE; - */ - - ctrl->coarsen_scheme = scheme; - ctrl->coarsen_mode = mode; - return ctrl; -} - -void Multilevel_control_delete(Multilevel_control ctrl){ - FREE(ctrl); -} - -static Multilevel Multilevel_init(SparseMatrix A, SparseMatrix D, real *node_weights){ - Multilevel grid; - if (!A) return NULL; - assert(A->m == A->n); - grid = GNEW(struct Multilevel_struct); - grid->level = 0; - grid->n = A->n; - grid->A = A; - grid->D = D; - grid->P = NULL; - grid->R = NULL; - grid->node_weights = node_weights; - grid->next = NULL; - grid->prev = NULL; - grid->delete_top_level_A = FALSE; - return grid; -} - -void Multilevel_delete(Multilevel grid){ - if (!grid) return; - if (grid->A){ - if (grid->level == 0) { - if (grid->delete_top_level_A) { - SparseMatrix_delete(grid->A); - if (grid->D) SparseMatrix_delete(grid->D); - } - } else { - SparseMatrix_delete(grid->A); - if (grid->D) SparseMatrix_delete(grid->D); - } - } - SparseMatrix_delete(grid->P); - SparseMatrix_delete(grid->R); - if (grid->node_weights && grid->level > 0) FREE(grid->node_weights); - Multilevel_delete(grid->next); - FREE(grid); -} - -static void maximal_independent_vertex_set(SparseMatrix A, int randomize, int **vset, int *nvset, int *nzc){ - int i, ii, j, *ia, *ja, m, n, *p = NULL; - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *vset = N_GNEW(m,int); - for (i = 0; i < m; i++) (*vset)[i] = MAX_IND_VTX_SET_U; - *nvset = 0; - *nzc = 0; - - if (!randomize){ - for (i = 0; i < m; i++){ - if ((*vset)[i] == MAX_IND_VTX_SET_U){ - (*vset)[i] = (*nvset)++; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - (*vset)[ja[j]] = MAX_IND_VTX_SET_F; - (*nzc)++; - } - } - } - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if ((*vset)[i] == MAX_IND_VTX_SET_U){ - (*vset)[i] = (*nvset)++; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - (*vset)[ja[j]] = MAX_IND_VTX_SET_F; - (*nzc)++; - } - } - } - FREE(p); - } - (*nzc) += *nvset; -} - - -static void maximal_independent_vertex_set_RS(SparseMatrix A, int randomize, int **vset, int *nvset, int *nzc){ - /* The Ruge-Stuben coarsening scheme. Initially all vertices are in the U set (with marker MAX_IND_VTX_SET_U), - with gain equal to their degree. Select vertex with highest gain into a C set (with - marker >= MAX_IND_VTX_SET_C), and their neighbors j in F set (with marker MAX_IND_VTX_SET_F). The neighbors of - j that are in the U set get their gains incremented by 1. So overall - gain[k] = |{neighbor of k in U set}|+2*|{neighbors of k in F set}|. - nzc is the number of entries in the restriction matrix - */ - int i, jj, ii, *p = NULL, j, k, *ia, *ja, m, n, gain, removed, nf = 0; - PriorityQueue q; - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *vset = N_GNEW(m,int); - for (i = 0; i < m; i++) { - (*vset)[i] = MAX_IND_VTX_SET_U; - } - *nvset = 0; - *nzc = 0; - - q = PriorityQueue_new(m, 2*(m-1)); - - if (!randomize){ - for (i = 0; i < m; i++) - PriorityQueue_push(q, i, ia[i+1] - ia[i]); - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - PriorityQueue_push(q, i, ia[i+1] - ia[i]); - } - FREE(p); - } - - while (PriorityQueue_pop(q, &i, &gain)){ - assert((*vset)[i] == MAX_IND_VTX_SET_U); - (*vset)[i] = (*nvset)++; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - assert((*vset)[jj] == MAX_IND_VTX_SET_U || (*vset)[jj] == MAX_IND_VTX_SET_F); - if (i == jj) continue; - - if ((*vset)[jj] == MAX_IND_VTX_SET_U){ - removed = PriorityQueue_remove(q, jj); - assert(removed); - (*vset)[jj] = MAX_IND_VTX_SET_F; - nf++; - - for (k = ia[jj]; k < ia[jj+1]; k++){ - if (jj == ja[k]) continue; - if ((*vset)[ja[k]] == MAX_IND_VTX_SET_U){ - gain = PriorityQueue_get_gain(q, ja[k]); - assert(gain >= 0); - PriorityQueue_push(q, ja[k], gain + 1); - } - } - } - (*nzc)++; - } - } - (*nzc) += *nvset; - PriorityQueue_delete(q); - -} - - - -static void maximal_independent_edge_set(SparseMatrix A, int randomize, int **matching, int *nmatch){ - int i, ii, j, *ia, *ja, m, n, *p = NULL; - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *matching = N_GNEW(m,int); - for (i = 0; i < m; i++) (*matching)[i] = i; - *nmatch = n; - - if (!randomize){ - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - (*matching)[ja[j]] = i; - (*matching)[i] = ja[j]; - (*nmatch)--; - } - } - } - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - (*matching)[ja[j]] = i; - (*matching)[i] = ja[j]; - (*nmatch)--; - } - } - } - FREE(p); - } -} - - - -static void maximal_independent_edge_set_heavest_edge_pernode(SparseMatrix A, int randomize, int **matching, int *nmatch){ - int i, ii, j, *ia, *ja, m, n, *p = NULL; - real *a, amax = 0; - int first = TRUE, jamax = 0; - - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *matching = N_GNEW(m,int); - for (i = 0; i < m; i++) (*matching)[i] = i; - *nmatch = n; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - assert(A->type == MATRIX_TYPE_REAL); - - a = (real*) A->a; - if (!randomize){ - for (i = 0; i < m; i++){ - first = TRUE; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - (*matching)[jamax] = i; - (*matching)[i] = jamax; - (*nmatch)--; - } - } - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if ((*matching)[i] != i) continue; - first = TRUE; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - (*matching)[jamax] = i; - (*matching)[i] = jamax; - (*nmatch)--; - } - } - FREE(p); - } -} - - - - - -#define node_degree(i) (ia[(i)+1] - ia[(i)]) - -static void maximal_independent_edge_set_heavest_edge_pernode_leaves_first(SparseMatrix A, int randomize, int **cluster, int **clusterp, int *ncluster){ - int i, ii, j, *ia, *ja, m, n, *p = NULL, q; - real *a, amax = 0; - int first = TRUE, jamax = 0; - int *matched, nz, ncmax = 0, nz0, nzz,k ; - enum {UNMATCHED = -2, MATCHED = -1}; - - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *cluster = N_GNEW(m,int); - *clusterp = N_GNEW((m+1),int); - matched = N_GNEW(m,int); - - for (i = 0; i < m; i++) matched[i] = i; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - assert(A->type == MATRIX_TYPE_REAL); - - *ncluster = 0; - (*clusterp)[0] = 0; - nz = 0; - a = (real*) A->a; - if (!randomize){ - for (i = 0; i < m; i++){ - if (matched[i] == MATCHED || node_degree(i) != 1) continue; - q = ja[ia[i]]; - assert(matched[q] != MATCHED); - matched[q] = MATCHED; - (*cluster)[nz++] = q; - for (j = ia[q]; j < ia[q+1]; j++){ - if (q == ja[j]) continue; - if (node_degree(ja[j]) == 1){ - matched[ja[j]] = MATCHED; - (*cluster)[nz++] = ja[j]; - } - } - ncmax = MAX(ncmax, nz - (*clusterp)[*ncluster]); - nz0 = (*clusterp)[*ncluster]; - if (nz - nz0 <= MAX_CLUSTER_SIZE){ - (*clusterp)[++(*ncluster)] = nz; - } else { - (*clusterp)[++(*ncluster)] = ++nz0; - nzz = nz0; - for (k = nz0; k < nz && nzz < nz; k++){ - nzz += MAX_CLUSTER_SIZE - 1; - nzz = MIN(nz, nzz); - (*clusterp)[++(*ncluster)] = nzz; - } - } - - } - #ifdef DEBUG_print - if (Verbose) - fprintf(stderr, "%d leaves and parents for %d clusters, largest cluster = %d\n",nz, *ncluster, ncmax); -#endif - for (i = 0; i < m; i++){ - first = TRUE; - if (matched[i] == MATCHED) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - matched[jamax] = MATCHED; - matched[i] = MATCHED; - (*cluster)[nz++] = i; - (*cluster)[nz++] = jamax; - (*clusterp)[++(*ncluster)] = nz; - } - } - - /* dan yi dian, wu ban */ - for (i = 0; i < m; i++){ - if (matched[i] == i){ - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - assert(nz == n); - - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if (matched[i] == MATCHED || node_degree(i) != 1) continue; - q = ja[ia[i]]; - assert(matched[q] != MATCHED); - matched[q] = MATCHED; - (*cluster)[nz++] = q; - for (j = ia[q]; j < ia[q+1]; j++){ - if (q == ja[j]) continue; - if (node_degree(ja[j]) == 1){ - matched[ja[j]] = MATCHED; - (*cluster)[nz++] = ja[j]; - } - } - ncmax = MAX(ncmax, nz - (*clusterp)[*ncluster]); - nz0 = (*clusterp)[*ncluster]; - if (nz - nz0 <= MAX_CLUSTER_SIZE){ - (*clusterp)[++(*ncluster)] = nz; - } else { - (*clusterp)[++(*ncluster)] = ++nz0; - nzz = nz0; - for (k = nz0; k < nz && nzz < nz; k++){ - nzz += MAX_CLUSTER_SIZE - 1; - nzz = MIN(nz, nzz); - (*clusterp)[++(*ncluster)] = nzz; - } - } - } - - #ifdef DEBUG_print - if (Verbose) - fprintf(stderr, "%d leaves and parents for %d clusters, largest cluster = %d\n",nz, *ncluster, ncmax); -#endif - for (ii = 0; ii < m; ii++){ - i = p[ii]; - first = TRUE; - if (matched[i] == MATCHED) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - matched[jamax] = MATCHED; - matched[i] = MATCHED; - (*cluster)[nz++] = i; - (*cluster)[nz++] = jamax; - (*clusterp)[++(*ncluster)] = nz; - } - } - - /* dan yi dian, wu ban */ - for (i = 0; i < m; i++){ - if (matched[i] == i){ - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - - FREE(p); - } - - FREE(matched); -} - - - -static void maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(SparseMatrix A, int randomize, int **cluster, int **clusterp, int *ncluster){ - int i, ii, j, *ia, *ja, m, n, *p = NULL; - real *a, amax = 0; - int first = TRUE, jamax = 0; - int *matched, nz, nz0; - enum {UNMATCHED = -2, MATCHED = -1}; - int nsuper, *super = NULL, *superp = NULL; - - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *cluster = N_GNEW(m,int); - *clusterp = N_GNEW((m+1),int); - matched = N_GNEW(m,int); - - for (i = 0; i < m; i++) matched[i] = i; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - assert(A->type == MATRIX_TYPE_REAL); - - SparseMatrix_decompose_to_supervariables(A, &nsuper, &super, &superp); - - *ncluster = 0; - (*clusterp)[0] = 0; - nz = 0; - a = (real*) A->a; - - for (i = 0; i < nsuper; i++){ - if (superp[i+1] - superp[i] <= 1) continue; - nz0 = (*clusterp)[*ncluster]; - for (j = superp[i]; j < superp[i+1]; j++){ - matched[super[j]] = MATCHED; - (*cluster)[nz++] = super[j]; - if (nz - nz0 >= MAX_CLUSTER_SIZE){ - (*clusterp)[++(*ncluster)] = nz; - nz0 = nz; - } - } - if (nz > nz0) (*clusterp)[++(*ncluster)] = nz; - } - - if (!randomize){ - for (i = 0; i < m; i++){ - first = TRUE; - if (matched[i] == MATCHED) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - matched[jamax] = MATCHED; - matched[i] = MATCHED; - (*cluster)[nz++] = i; - (*cluster)[nz++] = jamax; - (*clusterp)[++(*ncluster)] = nz; - } - } - - /* dan yi dian, wu ban */ - for (i = 0; i < m; i++){ - if (matched[i] == i){ - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - assert(nz == n); - - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - first = TRUE; - if (matched[i] == MATCHED) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){ - if (first) { - amax = a[j]; - jamax = ja[j]; - first = FALSE; - } else { - if (a[j] > amax){ - amax = a[j]; - jamax = ja[j]; - } - } - } - } - if (!first){ - matched[jamax] = MATCHED; - matched[i] = MATCHED; - (*cluster)[nz++] = i; - (*cluster)[nz++] = jamax; - (*clusterp)[++(*ncluster)] = nz; - } - } - - /* dan yi dian, wu ban */ - for (i = 0; i < m; i++){ - if (matched[i] == i){ - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - FREE(p); - - } - - FREE(super); - - FREE(superp); - - FREE(matched); -} - -static int scomp(const void *s1, const void *s2){ - real *ss1, *ss2; - ss1 = (real*) s1; - ss2 = (real*) s2; - - if ((ss1)[1] > (ss2)[1]){ - return -1; - } else if ((ss1)[1] < (ss2)[1]){ - return 1; - } - return 0; -} - -static void maximal_independent_edge_set_heavest_cluster_pernode_leaves_first(SparseMatrix A, int csize, - int randomize, int **cluster, int **clusterp, int *ncluster){ - int i, ii, j, *ia, *ja, m, n, *p = NULL, q, iv; - real *a; - int *matched, nz, nz0, nzz,k, nv; - enum {UNMATCHED = -2, MATCHED = -1}; - real *vlist; - - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *cluster = N_GNEW(m,int); - *clusterp = N_GNEW((m+1),int); - matched = N_GNEW(m,int); - vlist = N_GNEW(2*m,real); - - for (i = 0; i < m; i++) matched[i] = i; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - assert(A->type == MATRIX_TYPE_REAL); - - *ncluster = 0; - (*clusterp)[0] = 0; - nz = 0; - a = (real*) A->a; - - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if (matched[i] == MATCHED || node_degree(i) != 1) continue; - q = ja[ia[i]]; - assert(matched[q] != MATCHED); - matched[q] = MATCHED; - (*cluster)[nz++] = q; - for (j = ia[q]; j < ia[q+1]; j++){ - if (q == ja[j]) continue; - if (node_degree(ja[j]) == 1){ - matched[ja[j]] = MATCHED; - (*cluster)[nz++] = ja[j]; - } - } - nz0 = (*clusterp)[*ncluster]; - if (nz - nz0 <= MAX_CLUSTER_SIZE){ - (*clusterp)[++(*ncluster)] = nz; - } else { - (*clusterp)[++(*ncluster)] = ++nz0; - nzz = nz0; - for (k = nz0; k < nz && nzz < nz; k++){ - nzz += MAX_CLUSTER_SIZE - 1; - nzz = MIN(nz, nzz); - (*clusterp)[++(*ncluster)] = nzz; - } - } - } - - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if (matched[i] == MATCHED) continue; - nv = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){ - vlist[2*nv] = ja[j]; - vlist[2*nv+1] = a[j]; - nv++; - } - } - if (nv > 0){ - qsort(vlist, nv, sizeof(real)*2, scomp); - for (j = 0; j < MIN(csize - 1, nv); j++){ - iv = (int) vlist[2*j]; - matched[iv] = MATCHED; - (*cluster)[nz++] = iv; - } - matched[i] = MATCHED; - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - - /* dan yi dian, wu ban */ - for (i = 0; i < m; i++){ - if (matched[i] == i){ - (*cluster)[nz++] = i; - (*clusterp)[++(*ncluster)] = nz; - } - } - FREE(p); - - - FREE(matched); -} -static void maximal_independent_edge_set_heavest_edge_pernode_scaled(SparseMatrix A, int randomize, int **matching, int *nmatch){ - int i, ii, j, *ia, *ja, m, n, *p = NULL; - real *a, amax = 0; - int first = TRUE, jamax = 0; - - assert(A); - assert(SparseMatrix_known_strucural_symmetric(A)); - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - assert(n == m); - *matching = N_GNEW(m,int); - for (i = 0; i < m; i++) (*matching)[i] = i; - *nmatch = n; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - assert(A->type == MATRIX_TYPE_REAL); - - a = (real*) A->a; - if (!randomize){ - for (i = 0; i < m; i++){ - first = TRUE; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - if (first) { - amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]); - jamax = ja[j]; - first = FALSE; - } else { - if (a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]) > amax){ - amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]); - jamax = ja[j]; - } - } - } - } - if (!first){ - (*matching)[jamax] = i; - (*matching)[i] = jamax; - (*nmatch)--; - } - } - } else { - p = random_permutation(m); - for (ii = 0; ii < m; ii++){ - i = p[ii]; - if ((*matching)[i] != i) continue; - first = TRUE; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){ - if (first) { - amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]); - jamax = ja[j]; - first = FALSE; - } else { - if (a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]) > amax){ - amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]); - jamax = ja[j]; - } - } - } - } - if (!first){ - (*matching)[jamax] = i; - (*matching)[i] = jamax; - (*nmatch)--; - } - } - FREE(p); - } -} - -SparseMatrix DistanceMatrix_restrict_cluster(int ncluster, int *clusterp, int *cluster, SparseMatrix P, SparseMatrix R, SparseMatrix D){ -#if 0 - /* this construct a distance matrix of a coarse graph, for a coarsen give by merging all nodes in eahc cluster */ - SparseMatrix cD = NULL; - int i, j, nzc; - int **irn, **jcn; - real **val; - int n = D->m; - int *assignment = NULL; - int nz; - int *id = D->ia, jd = D->ja; - int *mask = NULL; - int *nnodes, *mask; - real *d = NULL; - - - assert(D->m == D->n); - if (!D) return NULL; - if (D->a && D->type == MATRIX_TYPE_REAL) d = (real*) D->val; - - irn = N_GNEW(ncluster,int*); - jcn = N_GNEW(ncluster,int*); - val = N_GNEW(ncluster,real*); - assignment = N_GNEW(n,int); - nz = N_GNEW(ncluster,int); - mask = N_GNEW(n,int); - nnodes = N_GNEW(ncluster,int); - - - /* find ncluster-subgrahs induced by the ncluster -clusters, find the diameter of each, - then use the radius as the distance from the supernode to the rest of the "world" - */ - for (i = 0; i < ncluster; i++) nz[i] = 0; - for (i = 0; i < ncluster; i++){ - for (j = clusterp[i]; j < clusterp[i+1]; j++){ - assert(clusterp[i+1] > clusterp[i]); - assignment[cluster[j]] = i; - } - } - - for (i = 0; i < n; i++){/* figure out how many entries per submatrix */ - ic = asignment[i]; - for (j = id[i]; j < id[i+1]; j++){ - if (i != jd[j] && ic == assignment[jd[j]]) { - nz[ic]++; - } - } - } - for (i = 0; i < ncluster; i++) { - irn[i] = N_GNEW(nz[i],int); - jcn[i] = N_GNEW(nz[i],int); - val[i] = N_GNEW(nz[i],int); - val[i] = NULL; - } - - - for (i = 0; i < ncluster; i++) nz[i] = 0;/* get subgraphs */ - for (i = 0; i < n; i++) mask[i] = -1; - for (i = 0; i < ncluster; i++) nnodes[i] = -1; - for (i = 0; i < n; i++){ - ic = asignment[i]; - ii = mask[i]; - if (ii < 0){ - mask[i] = ii = nnodes[ic]; - nnodes[ic]++; - } - for (j = id[i]; j < id[i+1]; j++){ - jc = assignment[jd[j]]; - if (i != jd[j] && ic == jc) { - jj = mask[jd[j]]; - if (jj < 0){ - mask[jd[j]] = jj = nnodes[jc]; - nnodes[jc]++; - } - irn[ic][nz[ic]] = ii; - jcn[ic][nz[ic]] = jj; - if (d) val[ic][nz[ic]] = d[j]; - } - } - } - - for (i = 0; i < ncluster; i++){/* form subgraphs */ - SparseMatrix A; - A = SparseMatrix_from_coordinate_arrays(nz[nz[i]], nnodes[i], nnodes[i], irn[i], jcn[i], (void*) val[i], MATRIX_TYPE_REAL); - - SparseMatrix_delete(A); - } - - - for (i = 0; i < ncluster; i++){ - for (j = clusterp[i]; j < clusterp[i+1]; j++){ - assert(clusterp[i+1] > clusterp[i]); - irn[nzc] = cluster[j]; - jcn[nzc] = i; - val[nzc++] = 1.; - } - } - assert(nzc == n); - cD = SparseMatrix_multiply3(R, D, P); - - SparseMatrix_set_symmetric(cD); - SparseMatrix_set_pattern_symmetric(cD); - cD = SparseMatrix_remove_diagonal(cD); - - FREE(nz); - FREE(assignment); - for (i = 0; i < ncluster; i++){ - FREE(irn[i]); - FREE(jcn[i]); - FREE(val[i]); - } - FREE(irn); FREE(jcn); FREE(val); - FREE(mask); - FREE(nnodes); - - return cD; -#endif - return NULL; -} - -SparseMatrix DistanceMatrix_restrict_matching(int *matching, SparseMatrix D){ - if (!D) return NULL; - assert(0);/* not yet implemented! */ - return NULL; -} - -SparseMatrix DistanceMatrix_restrict_filtering(int *mask, int is_C, int is_F, SparseMatrix D){ - /* max independent vtx set based coarsening. Coarsen nodes has mask >= is_C. Fine nodes == is_F. */ - if (!D) return NULL; - assert(0);/* not yet implemented! */ - return NULL; -} - -static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, SparseMatrix D, SparseMatrix *cD, - real *node_wgt, real **cnode_wgt, - SparseMatrix *P, SparseMatrix *R, Multilevel_control ctrl, int *coarsen_scheme_used){ - int *matching = NULL, nmatch = 0, nc, nzc, n, i; - int *irn = NULL, *jcn = NULL, *ia = NULL, *ja = NULL; - real *val = NULL; - SparseMatrix B = NULL; - int *vset = NULL, nvset, ncov, j; - int *cluster=NULL, *clusterp=NULL, ncluster; - - assert(A->m == A->n); - *cA = NULL; - *cD = NULL; - *P = NULL; - *R = NULL; - n = A->m; - - *coarsen_scheme_used = ctrl->coarsen_scheme; - - switch (ctrl->coarsen_scheme){ - case COARSEN_HYBRID: -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "hybrid scheme, try COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST first\n"); -#endif - *coarsen_scheme_used = ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST; - Multilevel_coarsen_internal(A, cA, D, cD, node_wgt, cnode_wgt, P, R, ctrl, coarsen_scheme_used); - - if (!(*cA)) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "switching to COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST\n"); -#endif - *coarsen_scheme_used = ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST; - Multilevel_coarsen_internal(A, cA, D, cD, node_wgt, cnode_wgt, P, R, ctrl, coarsen_scheme_used); - } - - if (!(*cA)) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "switching to COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST\n"); -#endif - *coarsen_scheme_used = ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST; - Multilevel_coarsen_internal(A, cA, D, cD, node_wgt, cnode_wgt, P, R, ctrl, coarsen_scheme_used); - } - - if (!(*cA)) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "switching to COARSEN_INDEPENDENT_VERTEX_SET\n"); -#endif - *coarsen_scheme_used = ctrl->coarsen_scheme = COARSEN_INDEPENDENT_VERTEX_SET; - Multilevel_coarsen_internal(A, cA, D, cD, node_wgt, cnode_wgt, P, R, ctrl, coarsen_scheme_used); - } - - - if (!(*cA)) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "switching to COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE\n"); -#endif - *coarsen_scheme_used = ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE; - Multilevel_coarsen_internal(A, cA, D, cD, node_wgt, cnode_wgt, P, R, ctrl, coarsen_scheme_used); - } - ctrl->coarsen_scheme = COARSEN_HYBRID; - break; - case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST: - case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST: - case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST: - if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST) { - maximal_independent_edge_set_heavest_edge_pernode_leaves_first(A, ctrl->randomize, &cluster, &clusterp, &ncluster); - } else if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST) { - maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(A, ctrl->randomize, &cluster, &clusterp, &ncluster); - } else { - maximal_independent_edge_set_heavest_cluster_pernode_leaves_first(A, 4, ctrl->randomize, &cluster, &clusterp, &ncluster); - } - assert(ncluster <= n); - nc = ncluster; - if ((ctrl->coarsen_mode == COARSEN_MODE_GENTLE && nc > ctrl->min_coarsen_factor*n) || nc == n || nc < ctrl->minsize) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "nc = %d, nf = %d, minsz = %d, coarsen_factor = %f coarsening stops\n",nc, n, ctrl->minsize, ctrl->min_coarsen_factor); -#endif - goto RETURN; - } - irn = N_GNEW(n,int); - jcn = N_GNEW(n,int); - val = N_GNEW(n,real); - nzc = 0; - for (i = 0; i < ncluster; i++){ - for (j = clusterp[i]; j < clusterp[i+1]; j++){ - assert(clusterp[i+1] > clusterp[i]); - irn[nzc] = cluster[j]; - jcn[nzc] = i; - val[nzc++] = 1.; - } - } - assert(nzc == n); - *P = SparseMatrix_from_coordinate_arrays(nzc, n, nc, irn, jcn, (void *) val, MATRIX_TYPE_REAL, sizeof(real)); - *R = SparseMatrix_transpose(*P); - - *cD = DistanceMatrix_restrict_cluster(ncluster, clusterp, cluster, *P, *R, D); - - *cA = SparseMatrix_multiply3(*R, A, *P); - - /* - B = SparseMatrix_multiply(*R, A); - if (!B) goto RETURN; - *cA = SparseMatrix_multiply(B, *P); - */ - if (!*cA) goto RETURN; - - SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE); - *R = SparseMatrix_divide_row_by_degree(*R); - SparseMatrix_set_symmetric(*cA); - SparseMatrix_set_pattern_symmetric(*cA); - *cA = SparseMatrix_remove_diagonal(*cA); - - - - break; - case COARSEN_INDEPENDENT_EDGE_SET: - maximal_independent_edge_set(A, ctrl->randomize, &matching, &nmatch); - case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE: - if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE) - maximal_independent_edge_set_heavest_edge_pernode(A, ctrl->randomize, &matching, &nmatch); - case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_DEGREE_SCALED: - if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_DEGREE_SCALED) - maximal_independent_edge_set_heavest_edge_pernode_scaled(A, ctrl->randomize, &matching, &nmatch); - nc = nmatch; - if ((ctrl->coarsen_mode == COARSEN_MODE_GENTLE && nc > ctrl->min_coarsen_factor*n) || nc == n || nc < ctrl->minsize) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "nc = %d, nf = %d, minsz = %d, coarsen_factor = %f coarsening stops\n",nc, n, ctrl->minsize, ctrl->min_coarsen_factor); -#endif - goto RETURN; - } - irn = N_GNEW(n,int); - jcn = N_GNEW(n,int); - val = N_GNEW(n,real); - nzc = 0; nc = 0; - for (i = 0; i < n; i++){ - if (matching[i] >= 0){ - if (matching[i] == i){ - irn[nzc] = i; - jcn[nzc] = nc; - val[nzc++] = 1.; - } else { - irn[nzc] = i; - jcn[nzc] = nc; - val[nzc++] = 1; - irn[nzc] = matching[i]; - jcn[nzc] = nc; - val[nzc++] = 1; - matching[matching[i]] = -1; - } - nc++; - matching[i] = -1; - } - } - assert(nc == nmatch); - assert(nzc == n); - *P = SparseMatrix_from_coordinate_arrays(nzc, n, nc, irn, jcn, (void *) val, MATRIX_TYPE_REAL, sizeof(real)); - *R = SparseMatrix_transpose(*P); - *cA = SparseMatrix_multiply3(*R, A, *P); - /* - B = SparseMatrix_multiply(*R, A); - if (!B) goto RETURN; - *cA = SparseMatrix_multiply(B, *P); - */ - if (!*cA) goto RETURN; - SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE); - *R = SparseMatrix_divide_row_by_degree(*R); - SparseMatrix_set_symmetric(*cA); - SparseMatrix_set_pattern_symmetric(*cA); - *cA = SparseMatrix_remove_diagonal(*cA); - - - *cD = DistanceMatrix_restrict_matching(matching, D); - *cD=NULL; - - break; - case COARSEN_INDEPENDENT_VERTEX_SET: - case COARSEN_INDEPENDENT_VERTEX_SET_RS: - if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_VERTEX_SET){ - maximal_independent_vertex_set(A, ctrl->randomize, &vset, &nvset, &nzc); - } else { - maximal_independent_vertex_set_RS(A, ctrl->randomize, &vset, &nvset, &nzc); - } - ia = A->ia; - ja = A->ja; - nc = nvset; - if ((ctrl->coarsen_mode == COARSEN_MODE_GENTLE && nc > ctrl->min_coarsen_factor*n) || nc == n || nc < ctrl->minsize) { -#ifdef DEBUG_PRINT - if (Verbose) - fprintf(stderr, "nc = %d, nf = %d, minsz = %d, coarsen_factor = %f coarsening stops\n",nc, n, ctrl->minsize, ctrl->min_coarsen_factor); -#endif - goto RETURN; - } - irn = N_GNEW(nzc,int); - jcn = N_GNEW(nzc,int); - val = N_GNEW(nzc,real); - nzc = 0; - for (i = 0; i < n; i++){ - if (vset[i] == MAX_IND_VTX_SET_F){ - ncov = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (vset[ja[j]] >= MAX_IND_VTX_SET_C){ - ncov++; - } - } - assert(ncov > 0); - for (j = ia[i]; j < ia[i+1]; j++){ - if (vset[ja[j]] >= MAX_IND_VTX_SET_C){ - irn[nzc] = i; - jcn[nzc] = vset[ja[j]]; - val[nzc++] = 1./(double) ncov; - } - } - } else { - assert(vset[i] >= MAX_IND_VTX_SET_C); - irn[nzc] = i; - jcn[nzc] = vset[i]; - val[nzc++] = 1.; - } - } - - *P = SparseMatrix_from_coordinate_arrays(nzc, n, nc, irn, jcn, (void *) val, MATRIX_TYPE_REAL, sizeof(real)); - *R = SparseMatrix_transpose(*P); - *cA = SparseMatrix_multiply3(*R, A, *P); - if (!*cA) goto RETURN; - SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE); - SparseMatrix_set_symmetric(*cA); - SparseMatrix_set_pattern_symmetric(*cA); - *cA = SparseMatrix_remove_diagonal(*cA); - - *cD = DistanceMatrix_restrict_filtering(vset, MAX_IND_VTX_SET_C, MAX_IND_VTX_SET_F, D); - break; - default: - goto RETURN; - } - RETURN: - if (matching) FREE(matching); - if (vset) FREE(vset); - if (irn) FREE(irn); - if (jcn) FREE(jcn); - if (val) FREE(val); - if (B) SparseMatrix_delete(B); - - if(cluster) FREE(cluster); - if(clusterp) FREE(clusterp); -} - -void Multilevel_coarsen(SparseMatrix A, SparseMatrix *cA, SparseMatrix D, SparseMatrix *cD, real *node_wgt, real **cnode_wgt, - SparseMatrix *P, SparseMatrix *R, Multilevel_control ctrl, int *coarsen_scheme_used){ - SparseMatrix cA0 = A, cD0 = NULL, P0 = NULL, R0 = NULL, M; - real *cnode_wgt0 = NULL; - int nc = 0, n; - - *P = NULL; *R = NULL; *cA = NULL; *cnode_wgt = NULL, *cD = NULL; - - n = A->n; - - do {/* this loop force a sufficient reduction */ - node_wgt = cnode_wgt0; - Multilevel_coarsen_internal(A, &cA0, D, &cD0, node_wgt, &cnode_wgt0, &P0, &R0, ctrl, coarsen_scheme_used); - if (!cA0) return; - nc = cA0->n; -#ifdef DEBUG_PRINT - if (Verbose) fprintf(stderr,"nc=%d n = %d\n",nc,n); -#endif - if (*P){ - assert(*R); - M = SparseMatrix_multiply(*P, P0); - SparseMatrix_delete(*P); - SparseMatrix_delete(P0); - *P = M; - M = SparseMatrix_multiply(R0, *R); - SparseMatrix_delete(*R); - SparseMatrix_delete(R0); - *R = M; - } else { - *P = P0; - *R = R0; - } - - if (*cA) SparseMatrix_delete(*cA); - *cA = cA0; - if (*cD) SparseMatrix_delete(*cD); - *cD = cD0; - - if (*cnode_wgt) FREE(*cnode_wgt); - *cnode_wgt = cnode_wgt0; - A = cA0; - D = cD0; - node_wgt = cnode_wgt0; - cnode_wgt0 = NULL; - } while (nc > ctrl->min_coarsen_factor*n && ctrl->coarsen_mode == COARSEN_MODE_FORCEFUL); - -} - -void print_padding(int n){ - int i; - for (i = 0; i < n; i++) fputs (" ", stderr); -} -static Multilevel Multilevel_establish(Multilevel grid, Multilevel_control ctrl){ - Multilevel cgrid; - int coarsen_scheme_used; - real *cnode_weights = NULL; - SparseMatrix P, R, A, cA, D, cD; - -#ifdef DEBUG_PRINT - if (Verbose) { - print_padding(grid->level); - fprintf(stderr, "level -- %d, n = %d, nz = %d nz/n = %f\n", grid->level, grid->n, grid->A->nz, grid->A->nz/(double) grid->n); - } -#endif - A = grid->A; - D = grid->D; - if (grid->level >= ctrl->maxlevel - 1) { -#ifdef DEBUG_PRINT - if (Verbose) { - print_padding(grid->level); - fprintf(stderr, " maxlevel reached, coarsening stops\n"); - } -#endif - return grid; - } - Multilevel_coarsen(A, &cA, D, &cD, grid->node_weights, &cnode_weights, &P, &R, ctrl, &coarsen_scheme_used); - if (!cA) return grid; - - cgrid = Multilevel_init(cA, cD, cnode_weights); - grid->next = cgrid; - cgrid->coarsen_scheme_used = coarsen_scheme_used; - cgrid->level = grid->level + 1; - cgrid->n = cA->m; - cgrid->A = cA; - cgrid->D = cD; - cgrid->P = P; - grid->R = R; - cgrid->prev = grid; - cgrid = Multilevel_establish(cgrid, ctrl); - return grid; - -} - -Multilevel Multilevel_new(SparseMatrix A0, SparseMatrix D0, real *node_weights, Multilevel_control ctrl){ - /* A: the weighting matrix. D: the distance matrix, could be NULL. If not null, the two matrices must have the same sparsity pattern */ - Multilevel grid; - SparseMatrix A = A0, D = D0; - - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - if (D && (!SparseMatrix_is_symmetric(D, FALSE) || D->type != MATRIX_TYPE_REAL)){ - D = SparseMatrix_symmetrize_nodiag(D, FALSE); - } - grid = Multilevel_init(A, D, node_weights); - grid = Multilevel_establish(grid, ctrl); - if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */ - return grid; -} - - -Multilevel Multilevel_get_coarsest(Multilevel grid){ - while (grid->next){ - grid = grid->next; - } - return grid; -} - diff --git a/internal/ccall/sfdpgen/Multilevel.h b/internal/ccall/sfdpgen/Multilevel.h deleted file mode 100644 index 1f981dc..0000000 --- a/internal/ccall/sfdpgen/Multilevel.h +++ /dev/null @@ -1,72 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef MULTILEVEL_H -#define MULTILEVEL_H - -#include "SparseMatrix.h" - -typedef struct Multilevel_struct *Multilevel; - -struct Multilevel_struct { - int level;/* 0, 1, ... */ - int n; - SparseMatrix A;/* the weighting matrix */ - SparseMatrix D;/* the distance matrix. A and D should have same pattern, - but different entry values. For spring-electrical method, D = NULL. */ - SparseMatrix P; - SparseMatrix R; - real *node_weights; - Multilevel next; - Multilevel prev; - int delete_top_level_A; - int coarsen_scheme_used;/* to get from previous level to here */ -}; - -enum {MAX_IND_VTX_SET_U = -100, MAX_IND_VTX_SET_F = -1, MAX_IND_VTX_SET_C = 0}; - -enum {MAX_CLUSTER_SIZE = 4}; - -enum {EDGE_BASED_STA, COARSEN_INDEPENDENT_EDGE_SET, COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE, COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST, COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST, COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_DEGREE_SCALED, COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST, EDGE_BASED_STO, VERTEX_BASED_STA, COARSEN_INDEPENDENT_VERTEX_SET, COARSEN_INDEPENDENT_VERTEX_SET_RS, VERTEX_BASED_STO, COARSEN_HYBRID}; - -enum {COARSEN_MODE_GENTLE, COARSEN_MODE_FORCEFUL}; - -struct Multilevel_control_struct { - int minsize; - real min_coarsen_factor; - int maxlevel; - int randomize; - int coarsen_scheme; - int coarsen_mode; -}; - -typedef struct Multilevel_control_struct *Multilevel_control; - -Multilevel_control Multilevel_control_new(int scheme, int mode); - -void Multilevel_control_delete(Multilevel_control ctrl); - -void Multilevel_delete(Multilevel grid); - -Multilevel Multilevel_new(SparseMatrix A, SparseMatrix D, real *node_weights, Multilevel_control ctrl); - -Multilevel Multilevel_get_coarsest(Multilevel grid); - -void print_padding(int n); - -#define Multilevel_is_finest(grid) (!((grid)->prev)) -#define Multilevel_is_coarsest(grid) (!((grid)->next)) - -void Multilevel_coarsen(SparseMatrix A, SparseMatrix *cA, SparseMatrix D, SparseMatrix *cD, real *node_wgt, real **cnode_wgt, - SparseMatrix *P, SparseMatrix *R, Multilevel_control ctrl, int *coarsen_scheme_used); -#endif diff --git a/internal/ccall/sfdpgen/PriorityQueue.c b/internal/ccall/sfdpgen/PriorityQueue.c deleted file mode 100644 index cc48038..0000000 --- a/internal/ccall/sfdpgen/PriorityQueue.c +++ /dev/null @@ -1,198 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "LinkedList.h" -#include "PriorityQueue.h" -#include "memory.h" -#include "logic.h" -#include "assert.h" -#include "arith.h" - -#define MALLOC gmalloc -#define REALLOC grealloc -#define FREE free -#define MEMCPY memcpy - - -PriorityQueue PriorityQueue_new(int n, int ngain){ - PriorityQueue q; - int i; - q = N_GNEW(1,struct PriorityQueue_struct); - q->count = 0; - q->n = n; - q->ngain = ngain; - q->gain_max = -1;/* no entries yet */ - q->buckets = N_GNEW((ngain+1),DoubleLinkedList); - for (i = 0; i < ngain+1; i++) (q->buckets)[i] = NULL; - - q->where = N_GNEW((n+1),DoubleLinkedList); - for (i = 0; i < n+1; i++) (q->where)[i] = NULL; - - q->gain = N_GNEW((n+1),int); - for (i = 0; i < n+1; i++) (q->gain)[i] = -999; - return q; - -} - -void PriorityQueue_delete(PriorityQueue q){ - int i; - - if (q){ - if (q->buckets){ - for (i = 0; i < q->ngain+1; i++) DoubleLinkedList_delete((q->buckets)[i], free); - FREE(q->buckets); - } - - if (q->where){ - FREE(q->where); - } - - FREE(q->gain); - FREE(q); - } -} - -PriorityQueue PriorityQueue_push(PriorityQueue q, int i, int gain){ - DoubleLinkedList l; - int *data, gainold; - - assert(q); - assert(gain <= q->ngain); - - - if (!(q->where)[i]){ - /* this entry is no in the queue yet, so this is a new addition */ - - (q->count)++; - if (gain > q->gain_max) q->gain_max = gain; - q->gain[i] = gain; - - data = N_GNEW(1,int); - data[0] = i; - if ((l = (q->buckets)[gain])){ - (q->buckets)[gain] = (q->where)[i] = DoubleLinkedList_prepend(l, data); - } else { - (q->buckets)[gain] = (q->where)[i] = DoubleLinkedList_new(data); - } - - } else { - /* update gain for an exisiting entry */ - l = q->where[i]; - gainold = q->gain[i]; - q->where[i] = NULL; - (q->count)--; - DoubleLinkedList_delete_element(l, free, &((q->buckets)[gainold])); - return PriorityQueue_push(q, i, gain); - } - return q; -} - -int PriorityQueue_pop(PriorityQueue q, int *i, int *gain){ - int gain_max; - DoubleLinkedList l; - int *data; - - if (!q || q->count <= 0) return 0; - *gain = gain_max = q->gain_max; - (q->count)--; - l = (q->buckets)[gain_max]; - data = (int*) DoubleLinkedList_get_data(l); - *i = data[0]; - - DoubleLinkedList_delete_element(l, free, &((q->buckets)[gain_max])); - if (!(q->buckets)[gain_max]){/* the bin that contain the best gain is empty now after poping */ - while (gain_max >= 0 && !(q->buckets)[gain_max]) gain_max--; - q->gain_max = gain_max; - } - q->where[*i] = NULL; - q->gain[*i] = -999; - return 1; -} - - - - -int PriorityQueue_get_gain(PriorityQueue q, int i){ - return q->gain[i]; -} - -int PriorityQueue_remove(PriorityQueue q, int i){ - /* remove an entry from the queue. If error, return 0. */ - int gain, gain_max; - DoubleLinkedList l; - - if (!q || q->count <= 0) return 0; - gain = q->gain[i]; - (q->count)--; - l = (q->where)[i]; - - DoubleLinkedList_delete_element(l, free, &((q->buckets)[gain])); - - if (gain == (gain_max = q->gain_max) && !(q->buckets)[gain_max]){/* the bin that contain the best gain is empty now after poping */ - while (gain_max >= 0 && !(q->buckets)[gain_max]) gain_max--; - q->gain_max = gain_max; - } - q->where[i] = NULL; - q->gain[i] = -999; - return 1; -} - -/* - -main(){ - int i, gain; - - - PriorityQueue q; - q = PriorityQueue_new(10,100); - PriorityQueue_push(q, 3, 1); - PriorityQueue_push(q, 2, 2); - PriorityQueue_push(q, 4, 2); - PriorityQueue_push(q, 5, 2); - PriorityQueue_push(q, 1, 100); - PriorityQueue_push(q, 2, 1); - while (PriorityQueue_pop(q, &i, &gain)){ - printf("i = %d gain = %d\n", i, gain); - } - - printf("=========\n"); - PriorityQueue_push(q, 3, 1); - PriorityQueue_push(q, 2, 2); - PriorityQueue_push(q, 4, 2); - PriorityQueue_push(q, 5, 2); - PriorityQueue_push(q, 1, 100); - PriorityQueue_push(q, 2, 1); - PriorityQueue_push(q, 2, 100); - while (PriorityQueue_pop(q, &i, &gain)){ - printf("i = %d gain = %d\n", i, gain); - } - - - printf("====after removing 3 and 2 =====\n"); - PriorityQueue_push(q, 3, 1); - PriorityQueue_push(q, 2, 2); - PriorityQueue_push(q, 4, 2); - PriorityQueue_push(q, 5, 2); - PriorityQueue_push(q, 1, 100); - PriorityQueue_push(q, 2, 1); - PriorityQueue_push(q, 2, 100); - PriorityQueue_remove(q, 3); - PriorityQueue_remove(q, 2); - while (PriorityQueue_pop(q, &i, &gain)){ - printf("i = %d gain = %d\n", i, gain); - } - PriorityQueue_delete(q); - -} - -*/ diff --git a/internal/ccall/sfdpgen/PriorityQueue.h b/internal/ccall/sfdpgen/PriorityQueue.h deleted file mode 100644 index 4481e82..0000000 --- a/internal/ccall/sfdpgen/PriorityQueue.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef PRIORITY_QUEUE_H -#define PRIORITY_QUEUE_H -#include "LinkedList.h" -struct PriorityQueue_struct { - /* a simple priority queue structure: entries are all integers, gains are all integers in [0, gainmax], total n elements */ - int count;/* how many entries are in?*/ - - /* max index value of an entry */ - int n; - - /* only ngain buckets are allowed */ - int ngain; - - /* current highest gain */ - int gain_max; - - /* the ngain buckets. Each bucket i holds all entries with gain = i.*/ - DoubleLinkedList *buckets; - - /* a mapping which maps an entry's index to an element in a DoubleLinkedList */ - DoubleLinkedList *where; - - /* the gain of entry i is gain[i] */ - int *gain; -}; - -typedef struct PriorityQueue_struct *PriorityQueue; - - -PriorityQueue PriorityQueue_new(int n, int ngain); - -void PriorityQueue_delete(PriorityQueue q); - -/* if entry i is already in the list, then an update of gain is carried out*/ -PriorityQueue PriorityQueue_push(PriorityQueue q, int i, int gain); - -int PriorityQueue_pop(PriorityQueue q, int *i, int *gain);/* return 0 if nmothing left, 1 otherwise */ - -int PriorityQueue_remove(PriorityQueue q, int i);/* return 0 if error */ -int PriorityQueue_get_gain(PriorityQueue q, int i); - -#endif diff --git a/internal/ccall/sfdpgen/dummy.go b/internal/ccall/sfdpgen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/sfdpgen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/sfdpgen/post_process.c b/internal/ccall/sfdpgen/post_process.c deleted file mode 100644 index 57cc987..0000000 --- a/internal/ccall/sfdpgen/post_process.c +++ /dev/null @@ -1,1334 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "types.h" -#include "memory.h" -#include "globals.h" - -#include "sparse_solve.h" -#include "post_process.h" -#include "overlap.h" -#include "spring_electrical.h" -#include "call_tri.h" -#include "sfdpinternal.h" - -#define node_degree(i) (ia[(i)+1] - ia[(i)]) - -#ifdef UNUSED -static void get_neighborhood_precision_recall(char *outfile, SparseMatrix A0, real *ideal_dist_matrix, real *dist_matrix){ - SparseMatrix A = A0; - int i, j, k, n = A->m; - // int *ia, *ja; - int *g_order = NULL, *p_order = NULL;/* ordering using graph/physical distance */ - real *gdist, *pdist, radius; - int np_neighbors; - int ng_neighbors; /*number of (graph theoretical) neighbors */ - real node_dist;/* distance of a node to the center node */ - real true_positive; - real recall; - FILE *fp; - - fp = fopen(outfile,"w"); - - if (!SparseMatrix_is_symmetric(A, FALSE)){ - A = SparseMatrix_symmetrize(A, FALSE); - } - // ia = A->ia; - // ja = A->ja; - - for (k = 5; k <= 50; k+= 5){ - recall = 0; - for (i = 0; i < n; i++){ - gdist = &(ideal_dist_matrix[i*n]); - vector_ordering(n, gdist, &g_order, TRUE); - pdist = &(dist_matrix[i*n]); - vector_ordering(n, pdist, &p_order, TRUE); - ng_neighbors = MIN(n-1, k); /* set the number of closest neighbor in the graph space to consider, excluding the node itself */ - np_neighbors = ng_neighbors;/* set the number of closest neighbor in the embedding to consider, excluding the node itself */ - radius = pdist[p_order[np_neighbors]]; - true_positive = 0; - for (j = 1; j <= ng_neighbors; j++){ - node_dist = pdist[g_order[j]];/* the phisical distance for j-th closest node (in graph space) */ - if (node_dist <= radius) true_positive++; - } - recall += true_positive/np_neighbors; - } - recall /= n; - - fprintf(fp,"%d %f\n", k, recall); - } - fprintf(stderr,"wrote precision/recall in file %s\n", outfile); - fclose(fp); - - if (A != A0) SparseMatrix_delete(A); - FREE(g_order); FREE(p_order); -} - - - -void dump_distance_edge_length(char *outfile, SparseMatrix A, int dim, real *x){ - int weighted = TRUE; - int n, i, j, nzz; - real *dist_matrix = NULL; - int flag; - real *dij, *xij, wij, top = 0, bot = 0, t; - - int *p = NULL; - real dmin, dmax, xmax, xmin, bsta, bwidth, *xbin, x25, x75, median; - int nbins = 30, nsta, nz = 0; - FILE *fp; - - fp = fopen(outfile,"w"); - - flag = SparseMatrix_distance_matrix(A, weighted, &dist_matrix); - assert(!flag); - - n = A->m; - dij = MALLOC(sizeof(real)*(n*(n-1)/2)); - xij = MALLOC(sizeof(real)*(n*(n-1)/2)); - for (i = 0; i < n; i++){ - for (j = i+1; j < n; j++){ - dij[nz] = dist_matrix[i*n+j]; - xij[nz] = distance(x, dim, i, j); - if (dij[nz] > 0){ - wij = 1/(dij[nz]*dij[nz]); - } else { - wij = 1; - } - top += wij * dij[nz] * xij[nz]; - bot += wij*xij[nz]*xij[nz]; - nz++; - } - } - if (bot > 0){ - t = top/bot; - } else { - t = 1; - } - fprintf(stderr,"scaling factor = %f\n", t); - - for (i = 0; i < nz; i++) xij[i] *= t; - - vector_ordering(nz, dij, &p, TRUE); - dmin = dij[p[0]]; - dmax = dij[p[nz-1]]; - nbins = MIN(nbins, dmax/MAX(1,dmin));/* scale by dmin since edge length of 1 is treated as 72 points in stress/maxent/full_stress */ - bwidth = (dmax - dmin)/nbins; - - nsta = 0; bsta = dmin; - xbin = MALLOC(sizeof(real)*nz); - nzz = nz; - - for (i = 0; i < nbins; i++){ - /* the bin is [dmin + i*(dmax-dmin)/nbins, dmin + (i+1)*(dmax-dmin)/nbins] */ - nz = 0; xmin = xmax = xij[p[nsta]]; - while (nsta < nzz && dij[p[nsta]] >= bsta && dij[p[nsta]] <= bsta + bwidth){ - xbin[nz++] = xij[p[nsta]]; - xmin = MIN(xmin, xij[p[nsta]]); - xmax = MAX(xmax, xij[p[nsta]]); - nsta++; - } - /* find the median, and 25/75% */ - if (nz > 0){ - median = vector_median(nz, xbin); - x25 = vector_percentile(nz, xbin, 0.25); - x75 = vector_percentile(nz, xbin, 0.75); - fprintf(fp, "%d %f %f %f %f %f %f %f\n", nz, bsta, bsta + bwidth, xmin, x25, median, x75, xmax); - } else { - xmin = xmax = median = x25 = x75 = (bsta + 0.5*bwidth); - } - bsta += bwidth; - } - - FREE(dij); FREE(xij); FREE(xbin); FREE(p); - FREE(dist_matrix); - -} - -real get_full_stress(SparseMatrix A, int dim, real *x, int weighting_scheme){ - /* get the full weighted stress, \sum_ij w_ij (t ||x_i-x_j||^2-d_ij)^2, where t - is the optimal scaling factor t = \sum w_ij ||x_i-x_j||^2/(\sum w_ij d_ij ||x_i - x_j||), - - Matrix A is assume to be sparse and a full distance matrix will be generated. - We assume undirected graph and only check an undirected edge i--j, not i->j and j->i. - */ - int weighted = TRUE; - int n, i, j; - real *ideal_dist_matrix = NULL, *dist_matrix; - int flag; - real t, top = 0, bot = 0, lstress, stress = 0, dij, wij, xij; - real sne_disimilarity = 0; - - flag = SparseMatrix_distance_matrix(A, weighted, &ideal_dist_matrix); - assert(!flag); - - n = A->m; - dist_matrix = MALLOC(sizeof(real)*n*n); - - for (i = 0; i < n; i++){ - for (j = i+1; j < n; j++){ - dij = ideal_dist_matrix[i*n+j]; - assert(dij >= 0); - xij = distance(x, dim, i, j); - if (dij > 0){ - switch (weighting_scheme){ - case WEIGHTING_SCHEME_SQR_DIST: - wij = 1/(dij*dij); - break; - case WEIGHTING_SCHEME_INV_DIST: - wij = 1/(dij); - break; - break; - case WEIGHTING_SCHEME_NONE: - wij = 1; - default: - assert(0); - } - } else { - wij = 1; - } - top += wij * dij * xij; - bot += wij*xij*xij; - } - } - if (bot > 0){ - t = top/bot; - } else { - t = 1; - } - - for (i = 0; i < n; i++){ - dist_matrix[i*n+i] = 0.; - for (j = i+1; j < n; j++){ - dij = ideal_dist_matrix[i*n+j]; - assert(dij >= 0); - xij = distance(x, dim, i, j); - dist_matrix[i*n+j] = xij*t; - dist_matrix[j*n+i] = xij*t; - if (dij > 0){ - wij = 1/(dij*dij); - } else { - wij = 1; - } - lstress = (xij*t - dij); - stress += wij*lstress*lstress; - } - } - - {int K = 20; - sne_disimilarity = get_sne_disimilarity(n, ideal_dist_matrix, dist_matrix, K); - } - - get_neighborhood_precision_recall("/tmp/recall.txt", A, ideal_dist_matrix, dist_matrix); - get_neighborhood_precision_recall("/tmp/precision.txt", A, dist_matrix, ideal_dist_matrix); - - fprintf(stderr,"sne_disimilarity = %f\n",sne_disimilarity); - if (n > 0) fprintf(stderr,"sstress per edge = %f\n",stress/n/(n-1)*2); - - FREE(dist_matrix); - FREE(ideal_dist_matrix); - return stress; -} -#endif - - -SparseMatrix ideal_distance_matrix(SparseMatrix A, int dim, real *x){ - /* find the ideal distance between edges, either 1, or |N[i] \Union N[j]| - |N[i] \Intersection N[j]| - */ - SparseMatrix D; - int *ia, *ja, i, j, k, l, nz; - real *d; - int *mask = NULL; - real len, di, sum, sumd; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - - D = SparseMatrix_copy(A); - ia = D->ia; - ja = D->ja; - if (D->type != MATRIX_TYPE_REAL){ - FREE(D->a); - D->type = MATRIX_TYPE_REAL; - D->a = N_GNEW(D->nz,real); - } - d = (real*) D->a; - - mask = N_GNEW(D->m,int); - for (i = 0; i < D->m; i++) mask[i] = -1; - - for (i = 0; i < D->m; i++){ - di = node_degree(i); - mask[i] = i; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - mask[ja[j]] = i; - } - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (i == k) continue; - len = di + node_degree(k); - for (l = ia[k]; l < ia[k+1]; l++){ - if (mask[ja[l]] == i) len--; - } - d[j] = len; - assert(len > 0); - } - - } - - sum = 0; sumd = 0; - nz = 0; - for (i = 0; i < D->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - nz++; - sum += distance(x, dim, i, ja[j]); - sumd += d[j]; - } - } - sum /= nz; sumd /= nz; - sum = sum/sumd; - - for (i = 0; i < D->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - d[j] = sum*d[j]; - } - } - - - return D; -} - - -StressMajorizationSmoother StressMajorizationSmoother2_new(SparseMatrix A, int dim, real lambda0, real *x, - int ideal_dist_scheme){ - /* use up to dist 2 neighbor */ - /* use up to dist 2 neighbor. This is used in overcoming pherical effect with ideal distance of - 2-neighbors equal graph distance etc. - */ - StressMajorizationSmoother sm; - int i, j, k, l, m = A->m, *ia = A->ia, *ja = A->ja, *iw, *jw, *id, *jd; - int *mask, nz; - real *d, *w, *lambda; - real *avg_dist, diag_d, diag_w, dist, s = 0, stop = 0, sbot = 0; - SparseMatrix ID; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - - ID = ideal_distance_matrix(A, dim, x); - - sm = GNEW(struct StressMajorizationSmoother_struct); - sm->scaling = 1.; - sm->data = NULL; - sm->scheme = SM_SCHEME_NORMAL; - sm->tol_cg = 0.01; - sm->maxit_cg = (int)sqrt((double) A->m); - - lambda = sm->lambda = N_GNEW(m,real); - for (i = 0; i < m; i++) sm->lambda[i] = lambda0; - mask = N_GNEW(m,int); - - avg_dist = N_GNEW(m,real); - - for (i = 0; i < m ;i++){ - avg_dist[i] = 0; - nz = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - avg_dist[i] += distance(x, dim, i, ja[j]); - nz++; - } - assert(nz > 0); - avg_dist[i] /= nz; - } - - - for (i = 0; i < m; i++) mask[i] = -1; - - nz = 0; - for (i = 0; i < m; i++){ - mask[i] = i; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (mask[k] != i){ - mask[k] = i; - nz++; - } - } - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - for (l = ia[k]; l < ia[k+1]; l++){ - if (mask[ja[l]] != i){ - mask[ja[l]] = i; - nz++; - } - } - } - } - - sm->Lw = SparseMatrix_new(m, m, nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - sm->Lwd = SparseMatrix_new(m, m, nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - if (!(sm->Lw) || !(sm->Lwd)) { - StressMajorizationSmoother_delete(sm); - return NULL; - } - - iw = sm->Lw->ia; jw = sm->Lw->ja; - - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - - id = sm->Lwd->ia; jd = sm->Lwd->ja; - iw[0] = id[0] = 0; - - nz = 0; - for (i = 0; i < m; i++){ - mask[i] = i+m; - diag_d = diag_w = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (mask[k] != i+m){ - mask[k] = i+m; - - jw[nz] = k; - if (ideal_dist_scheme == IDEAL_GRAPH_DIST){ - dist = 1; - } else if (ideal_dist_scheme == IDEAL_AVG_DIST){ - dist = (avg_dist[i] + avg_dist[k])*0.5; - } else if (ideal_dist_scheme == IDEAL_POWER_DIST){ - dist = pow(distance_cropped(x,dim,i,k),.4); - } else { - fprintf(stderr,"ideal_dist_scheme value wrong"); - assert(0); - exit(1); - } - - /* - w[nz] = -1./(ia[i+1]-ia[i]+ia[ja[j]+1]-ia[ja[j]]); - w[nz] = -2./(avg_dist[i]+avg_dist[k]);*/ - /* w[nz] = -1.;*//* use unit weight for now, later can try 1/(deg(i)+deg(k)) */ - w[nz] = -1/(dist*dist); - - diag_w += w[nz]; - - jd[nz] = k; - /* - d[nz] = w[nz]*distance(x,dim,i,k); - d[nz] = w[nz]*dd[j]; - d[nz] = w[nz]*(avg_dist[i] + avg_dist[k])*0.5; - */ - d[nz] = w[nz]*dist; - stop += d[nz]*distance(x,dim,i,k); - sbot += d[nz]*dist; - diag_d += d[nz]; - - nz++; - } - } - - /* distance 2 neighbors */ - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - for (l = ia[k]; l < ia[k+1]; l++){ - if (mask[ja[l]] != i+m){ - mask[ja[l]] = i+m; - - if (ideal_dist_scheme == IDEAL_GRAPH_DIST){ - dist = 2; - } else if (ideal_dist_scheme == IDEAL_AVG_DIST){ - dist = (avg_dist[i] + 2*avg_dist[k] + avg_dist[ja[l]])*0.5; - } else if (ideal_dist_scheme == IDEAL_POWER_DIST){ - dist = pow(distance_cropped(x,dim,i,ja[l]),.4); - } else { - fprintf(stderr,"ideal_dist_scheme value wrong"); - assert(0); - exit(1); - } - - jw[nz] = ja[l]; - /* - w[nz] = -1/(ia[i+1]-ia[i]+ia[ja[l]+1]-ia[ja[l]]); - w[nz] = -2/(avg_dist[i] + 2*avg_dist[k] + avg_dist[ja[l]]);*/ - /* w[nz] = -1.;*//* use unit weight for now, later can try 1/(deg(i)+deg(k)) */ - - w[nz] = -1/(dist*dist); - - diag_w += w[nz]; - - jd[nz] = ja[l]; - /* - d[nz] = w[nz]*(distance(x,dim,i,k)+distance(x,dim,k,ja[l])); - d[nz] = w[nz]*(dd[j]+dd[l]); - d[nz] = w[nz]*(avg_dist[i] + 2*avg_dist[k] + avg_dist[ja[l]])*0.5; - */ - d[nz] = w[nz]*dist; - stop += d[nz]*distance(x,dim,ja[l],k); - sbot += d[nz]*dist; - diag_d += d[nz]; - - nz++; - } - } - } - jw[nz] = i; - lambda[i] *= (-diag_w);/* alternatively don't do that then we have a constant penalty term scaled by lambda0 */ - - w[nz] = -diag_w + lambda[i]; - jd[nz] = i; - d[nz] = -diag_d; - nz++; - - iw[i+1] = nz; - id[i+1] = nz; - } - s = stop/sbot; - for (i = 0; i < nz; i++) d[i] *= s; - - sm->scaling = s; - sm->Lw->nz = nz; - sm->Lwd->nz = nz; - - FREE(mask); - FREE(avg_dist); - SparseMatrix_delete(ID); - return sm; -} - -StressMajorizationSmoother SparseStressMajorizationSmoother_new(SparseMatrix A, int dim, real lambda0, real *x, - int weighting_scheme, int scale_initial_coord){ - /* solve a stress model to achieve the ideal distance among a sparse set of edges recorded in A. - A must be a real matrix. - */ - StressMajorizationSmoother sm; - int i, j, k, m = A->m, *ia, *ja, *iw, *jw, *id, *jd; - int nz; - real *d, *w, *lambda; - real diag_d, diag_w, *a, dist, s = 0, stop = 0, sbot = 0; - real xdot = 0; - - assert(SparseMatrix_is_symmetric(A, FALSE) && A->type == MATRIX_TYPE_REAL); - - /* if x is all zero, make it random */ - for (i = 0; i < m*dim; i++) xdot += x[i]*x[i]; - if (xdot == 0){ - for (i = 0; i < m*dim; i++) x[i] = 72*drand(); - } - - ia = A->ia; - ja = A->ja; - a = (real*) A->a; - - - sm = MALLOC(sizeof(struct StressMajorizationSmoother_struct)); - sm->scaling = 1.; - sm->data = NULL; - sm->scheme = SM_SCHEME_NORMAL; - sm->D = A; - sm->tol_cg = 0.01; - sm->maxit_cg = (int)sqrt((double) A->m); - - lambda = sm->lambda = MALLOC(sizeof(real)*m); - for (i = 0; i < m; i++) sm->lambda[i] = lambda0; - - nz = A->nz; - - sm->Lw = SparseMatrix_new(m, m, nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - sm->Lwd = SparseMatrix_new(m, m, nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - if (!(sm->Lw) || !(sm->Lwd)) { - StressMajorizationSmoother_delete(sm); - return NULL; - } - - iw = sm->Lw->ia; jw = sm->Lw->ja; - id = sm->Lwd->ia; jd = sm->Lwd->ja; - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - iw[0] = id[0] = 0; - - nz = 0; - for (i = 0; i < m; i++){ - diag_d = diag_w = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (k != i){ - - jw[nz] = k; - dist = a[j]; - switch (weighting_scheme){ - case WEIGHTING_SCHEME_SQR_DIST: - if (dist*dist == 0){ - w[nz] = -100000; - } else { - w[nz] = -1/(dist*dist); - } - break; - case WEIGHTING_SCHEME_INV_DIST: - if (dist*dist == 0){ - w[nz] = -100000; - } else { - w[nz] = -1/(dist); - } - break; - case WEIGHTING_SCHEME_NONE: - w[nz] = -1; - break; - default: - assert(0); - return NULL; - } - diag_w += w[nz]; - jd[nz] = k; - d[nz] = w[nz]*dist; - - stop += d[nz]*distance(x,dim,i,k); - sbot += d[nz]*dist; - diag_d += d[nz]; - - nz++; - } - } - - jw[nz] = i; - lambda[i] *= (-diag_w);/* alternatively don't do that then we have a constant penalty term scaled by lambda0 */ - w[nz] = -diag_w + lambda[i]; - - jd[nz] = i; - d[nz] = -diag_d; - nz++; - - iw[i+1] = nz; - id[i+1] = nz; - } - if (scale_initial_coord){ - s = stop/sbot; - } else { - s = 1.; - } - if (s == 0) { - return NULL; - } - for (i = 0; i < nz; i++) d[i] *= s; - - - sm->scaling = s; - sm->Lw->nz = nz; - sm->Lwd->nz = nz; - - return sm; -} - -static real total_distance(int m, int dim, real* x, real* y){ - real total = 0, dist = 0; - int i, j; - - for (i = 0; i < m; i++){ - dist = 0.; - for (j = 0; j < dim; j++){ - dist += (y[i*dim+j] - x[i*dim+j])*(y[i*dim+j] - x[i*dim+j]); - } - total += sqrt(dist); - } - return total; - -} - - - -void SparseStressMajorizationSmoother_delete(SparseStressMajorizationSmoother sm){ - StressMajorizationSmoother_delete(sm); -} - - -real SparseStressMajorizationSmoother_smooth(SparseStressMajorizationSmoother sm, int dim, real *x, int maxit_sm, real tol){ - - return StressMajorizationSmoother_smooth(sm, dim, x, maxit_sm, tol); - - -} -static void get_edge_label_matrix(relative_position_constraints data, int m, int dim, real *x, SparseMatrix *LL, real **rhs){ - int edge_labeling_scheme = data->edge_labeling_scheme; - int n_constr_nodes = data->n_constr_nodes; - int *constr_nodes = data->constr_nodes; - SparseMatrix A_constr = data->A_constr; - int *ia = A_constr->ia, *ja = A_constr->ja, ii, jj, nz, l, ll, i, j; - int *irn = data->irn, *jcn = data->jcn; - real *val = data->val, dist, kk, k; - real *x00 = NULL; - SparseMatrix Lc = NULL; - real constr_penalty = data->constr_penalty; - - if (edge_labeling_scheme == ELSCHEME_PENALTY || edge_labeling_scheme == ELSCHEME_STRAIGHTLINE_PENALTY){ - /* for an node with two neighbors j--i--k, and assume i needs to be between j and k, then the contribution to P is - . i j k - i 1 -0.5 -0.5 - j -0.5 0.25 0.25 - k -0.5 0.25 0.25 - in general, if i has m neighbors j, k, ..., then - p_ii = 1 - p_jj = 1/m^2 - p_ij = -1/m - p jk = 1/m^2 - . i j k - i 1 -1/m -1/m ... - j -1/m 1/m^2 1/m^2 ... - k -1/m 1/m^2 1/m^2 ... - */ - if (!irn){ - assert((!jcn) && (!val)); - nz = 0; - for (i = 0; i < n_constr_nodes; i++){ - ii = constr_nodes[i]; - k = ia[ii+1] - ia[ii];/*usually k = 2 */ - nz += (int)((k+1)*(k+1)); - - } - irn = data->irn = MALLOC(sizeof(int)*nz); - jcn = data->jcn = MALLOC(sizeof(int)*nz); - val = data->val = MALLOC(sizeof(double)*nz); - } - nz = 0; - for (i = 0; i < n_constr_nodes; i++){ - ii = constr_nodes[i]; - jj = ja[ia[ii]]; ll = ja[ia[ii] + 1]; - if (jj == ll) continue; /* do not do loops */ - dist = distance_cropped(x, dim, jj, ll); - dist *= dist; - - k = ia[ii+1] - ia[ii];/* usually k = 2 */ - kk = k*k; - irn[nz] = ii; jcn[nz] = ii; val[nz++] = constr_penalty/(dist); - k = constr_penalty/(k*dist); kk = constr_penalty/(kk*dist); - for (j = ia[ii]; j < ia[ii+1]; j++){ - irn[nz] = ii; jcn[nz] = ja[j]; val[nz++] = -k; - } - for (j = ia[ii]; j < ia[ii+1]; j++){ - jj = ja[j]; - irn[nz] = jj; jcn[nz] = ii; val[nz++] = -k; - for (l = ia[ii]; l < ia[ii+1]; l++){ - ll = ja[l]; - irn[nz] = jj; jcn[nz] = ll; val[nz++] = kk; - } - } - } - Lc = SparseMatrix_from_coordinate_arrays(nz, m, m, irn, jcn, val, MATRIX_TYPE_REAL, sizeof(real)); - } else if (edge_labeling_scheme == ELSCHEME_PENALTY2 || edge_labeling_scheme == ELSCHEME_STRAIGHTLINE_PENALTY2){ - /* for an node with two neighbors j--i--k, and assume i needs to be between the old position of j and k, then the contribution to P is - 1/d_jk, and to the right hand side: {0,...,average_position_of_i's neighbor if i is an edge node,...} - */ - if (!irn){ - assert((!jcn) && (!val)); - nz = n_constr_nodes; - irn = data->irn = MALLOC(sizeof(int)*nz); - jcn = data->jcn = MALLOC(sizeof(int)*nz); - val = data->val = MALLOC(sizeof(double)*nz); - } - x00 = MALLOC(sizeof(real)*m*dim); - for (i = 0; i < m*dim; i++) x00[i] = 0; - nz = 0; - for (i = 0; i < n_constr_nodes; i++){ - ii = constr_nodes[i]; - jj = ja[ia[ii]]; ll = ja[ia[ii] + 1]; - dist = distance_cropped(x, dim, jj, ll); - irn[nz] = ii; jcn[nz] = ii; val[nz++] = constr_penalty/(dist); - for (j = ia[ii]; j < ia[ii+1]; j++){ - jj = ja[j]; - for (l = 0; l < dim; l++){ - x00[ii*dim+l] += x[jj*dim+l]; - } - } - for (l = 0; l < dim; l++) { - x00[ii*dim+l] *= constr_penalty/(dist)/(ia[ii+1] - ia[ii]); - } - } - Lc = SparseMatrix_from_coordinate_arrays(nz, m, m, irn, jcn, val, MATRIX_TYPE_REAL, sizeof(real)); - - } - *LL = Lc; - *rhs = x00; -} - -real get_stress(int m, int dim, int *iw, int *jw, real *w, real *d, real *x, real scaling, void *data, int weighted){ - int i, j; - real res = 0., dist; - /* we use the fact that d_ij = w_ij*graph_dist(i,j). Also, d_ij and x are scalinged by *scaling, so divide by it to get actual unscaled streee. */ - for (i = 0; i < m; i++){ - for (j = iw[i]; j < iw[i+1]; j++){ - if (i == jw[j]) { - continue; - } - dist = d[j]/w[j];/* both negative*/ - if (weighted){ - res += -w[j]*(dist - distance(x, dim, i, jw[j]))*(dist - distance(x, dim, i, jw[j])); - } else { - res += (dist - distance(x, dim, i, jw[j]))*(dist - distance(x, dim, i, jw[j])); - } - } - } - return 0.5*res/scaling/scaling; - -} - -static void uniform_stress_augment_rhs(int m, int dim, real *x, real *y, real alpha, real M){ - int i, j, k; - real dist, distij; - for (i = 0; i < m; i++){ - for (j = i+1; j < m; j++){ - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - distij = (x[i*dim+k] - x[j*dim+k])/dist; - y[i*dim+k] += alpha*M*distij; - y[j*dim+k] += alpha*M*(-distij); - } - } - } -} - -static real uniform_stress_solve(SparseMatrix Lw, real alpha, int dim, real *x0, real *rhs, real tol, int maxit, int *flag){ - Operator Ax; - Operator Precon; - - Ax = Operator_uniform_stress_matmul(Lw, alpha); - Precon = Operator_uniform_stress_diag_precon_new(Lw, alpha); - - return cg(Ax, Precon, Lw->m, dim, x0, rhs, tol, maxit, flag); - -} - -real StressMajorizationSmoother_smooth(StressMajorizationSmoother sm, int dim, real *x, int maxit_sm, real tol) { - SparseMatrix Lw = sm->Lw, Lwd = sm->Lwd, Lwdd = NULL; - int i, j, k, m, *id, *jd, *iw, *jw, idiag, flag = 0, iter = 0; - real *w, *dd, *d, *y = NULL, *x0 = NULL, *x00 = NULL, diag, diff = 1, *lambda = sm->lambda, res, alpha = 0., M = 0.; - SparseMatrix Lc = NULL; - real dij, dist; - - - Lwdd = SparseMatrix_copy(Lwd); - m = Lw->m; - x0 = N_GNEW(dim*m,real); - if (!x0) goto RETURN; - - x0 = MEMCPY(x0, x, sizeof(real)*dim*m); - y = N_GNEW(dim*m,real); - if (!y) goto RETURN; - - id = Lwd->ia; jd = Lwd->ja; - d = (real*) Lwd->a; - dd = (real*) Lwdd->a; - w = (real*) Lw->a; - iw = Lw->ia; jw = Lw->ja; - -#ifdef DEBUG_PRINT - if (Verbose) fprintf(stderr, "initial stress = %f\n", get_stress(m, dim, iw, jw, w, d, x, sm->scaling, sm->data, 1)); -#endif - /* for the additional matrix L due to the position constraints */ - if (sm->scheme == SM_SCHEME_NORMAL_ELABEL){ - get_edge_label_matrix(sm->data, m, dim, x, &Lc, &x00); - if (Lc) Lw = SparseMatrix_add(Lw, Lc); - } else if (sm->scheme == SM_SCHEME_UNIFORM_STRESS){ - alpha = ((real*) (sm->data))[0]; - M = ((real*) (sm->data))[1]; - } - - while (iter++ < maxit_sm && diff > tol){ -#ifdef GVIEWER - if (Gviewer) { - drawScene(); - if (iter%2 == 0) gviewer_dump_current_frame(); - } -#endif - - if (sm->scheme != SM_SCHEME_STRESS_APPROX){ - for (i = 0; i < m; i++){ - idiag = -1; - diag = 0.; - for (j = id[i]; j < id[i+1]; j++){ - if (i == jd[j]) { - idiag = j; - continue; - } - - dist = distance(x, dim, i, jd[j]); - //if (d[j] >= -0.0001*dist){ - // /* sometimes d[j] = 0 and ||x_i-x_j||=0*/ - // dd[j] = d[j]/MAX(0.0001, dist); - if (d[j] == 0){ - dd[j] = 0; - } else { - if (dist == 0){ - dij = d[j]/w[j];/* the ideal distance */ - /* perturb so points do not sit at the same place */ - for (k = 0; k < dim; k++) x[jd[j]*dim+k] += 0.0001*(drand()+.0001)*dij; - dist = distance(x, dim, i, jd[j]); - } - dd[j] = d[j]/dist; - -#if 0 - /* if two points are at the same place, we do not want a huge entry, - as this cause problem with CG./ In any case, - at thw limit d[j] == ||x[i] - x[jd[j]]||, - or close. */ - if (dist < -d[j]*0.0000001){ - dd[j] = -10000.; - } else { - dd[j] = d[j]/dist; - } -#endif - - } - diag += dd[j]; - } - assert(idiag >= 0); - dd[idiag] = -diag; - } - /* solve (Lw+lambda*I) x = Lwdd y + lambda x0 */ - - SparseMatrix_multiply_dense(Lwdd, FALSE, x, FALSE, &y, FALSE, dim); - } else { - for (i = 0; i < m; i++){ - for (j = 0; j < dim; j++){ - y[i*dim+j] = 0;/* for stress_approx scheme, the whole rhs is calculated in stress_maxent_augment_rhs */ - } - } - } - - if (lambda){/* is there a penalty term? */ - for (i = 0; i < m; i++){ - for (j = 0; j < dim; j++){ - y[i*dim+j] += lambda[i]*x0[i*dim+j]; - } - } - } - - /* additional term added to the rhs */ - switch (sm->scheme){ - case SM_SCHEME_NORMAL_ELABEL: { - for (i = 0; i < m; i++){ - for (j = 0; j < dim; j++){ - y[i*dim+j] += x00[i*dim+j]; - } - } - break; - } - case SM_SCHEME_UNIFORM_STRESS:{/* this part can be done more efficiently using octree approximation */ - uniform_stress_augment_rhs(m, dim, x, y, alpha, M); - break; - } -#if UNIMPEMENTED - case SM_SCHEME_MAXENT:{ -#ifdef GVIEWER - if (Gviewer){ - char *lab; - lab = MALLOC(sizeof(char)*100); - sprintf(lab,"maxent. alpha=%10.2g, iter=%d",stress_maxent_data_get_alpha(sm->data), iter); - gviewer_set_label(lab); - FREE(lab); - } -#endif - stress_maxent_augment_rhs_fast(sm, dim, x, y, &flag); - if (flag) goto RETURN; - break; - } - case SM_SCHEME_STRESS_APPROX:{ - stress_approx_augment_rhs(sm, dim, x, y, &flag); - if (flag) goto RETURN; - break; - } - case SM_SCHEME_STRESS:{ -#ifdef GVIEWER - if (Gviewer){ - char *lab; - lab = MALLOC(sizeof(char)*100); - sprintf(lab,"pmds(k), iter=%d", iter); - gviewer_set_label(lab); - FREE(lab); - } -#endif - } -#endif /* UNIMPEMENTED */ - default: - break; - } - -#ifdef DEBUG_PRINT - if (Verbose) { - fprintf(stderr, "stress1 = %g\n",get_stress(m, dim, iw, jw, w, d, x, sm->scaling, sm->data, 1)); - } -#endif - - if (sm->scheme == SM_SCHEME_UNIFORM_STRESS){ - res = uniform_stress_solve(Lw, alpha, dim, x, y, sm->tol_cg, sm->maxit_cg, &flag); - } else { - res = SparseMatrix_solve(Lw, dim, x, y, sm->tol_cg, sm->maxit_cg, SOLVE_METHOD_CG, &flag); - //res = SparseMatrix_solve(Lw, dim, x, y, sm->tol_cg, 1, SOLVE_METHOD_JACOBI, &flag); - } - - if (flag) goto RETURN; -#ifdef DEBUG_PRINT - if (Verbose) fprintf(stderr, "stress2 = %g\n",get_stress(m, dim, iw, jw, w, d, y, sm->scaling, sm->data, 1)); -#endif - diff = total_distance(m, dim, x, y)/sqrt(vector_product(m*dim, x, x)); -#ifdef DEBUG_PRINT - if (Verbose){ - fprintf(stderr, "Outer iter = %d, cg res = %g, ||x_{k+1}-x_k||/||x_k|| = %g\n",iter, res, diff); - } -#endif - - - MEMCPY(x, y, sizeof(real)*m*dim); - } - -#ifdef DEBUG - _statistics[1] += iter-1; -#endif - -#ifdef DEBUG_PRINT - if (Verbose) fprintf(stderr, "iter = %d, final stress = %f\n", iter, get_stress(m, dim, iw, jw, w, d, x, sm->scaling, sm->data, 1)); -#endif - - RETURN: - SparseMatrix_delete(Lwdd); - if (Lc) { - SparseMatrix_delete(Lc); - SparseMatrix_delete(Lw); - } - - if (x0) FREE(x0); - if (y) FREE(y); - if (x00) FREE(x00); - return diff; - -} - -void StressMajorizationSmoother_delete(StressMajorizationSmoother sm){ - if (!sm) return; - if (sm->Lw) SparseMatrix_delete(sm->Lw); - if (sm->Lwd) SparseMatrix_delete(sm->Lwd); - if (sm->lambda) FREE(sm->lambda); - if (sm->data) sm->data_deallocator(sm->data); - FREE(sm); -} - - -TriangleSmoother TriangleSmoother_new(SparseMatrix A, int dim, real lambda0, real *x, int use_triangularization){ - TriangleSmoother sm; - int i, j, k, m = A->m, *ia = A->ia, *ja = A->ja, *iw, *jw, jdiag, nz; - SparseMatrix B; - real *avg_dist, *lambda, *d, *w, diag_d, diag_w, dist; - real s = 0, stop = 0, sbot = 0; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - - avg_dist = N_GNEW(m,real); - - for (i = 0; i < m ;i++){ - avg_dist[i] = 0; - nz = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - avg_dist[i] += distance(x, dim, i, ja[j]); - nz++; - } - assert(nz > 0); - avg_dist[i] /= nz; - } - - sm = N_GNEW(1,struct TriangleSmoother_struct); - sm->scaling = 1; - sm->data = NULL; - sm->scheme = SM_SCHEME_NORMAL; - sm->tol_cg = 0.01; - sm->maxit_cg = (int)sqrt((double) A->m); - - lambda = sm->lambda = N_GNEW(m,real); - for (i = 0; i < m; i++) sm->lambda[i] = lambda0; - - if (m > 2){ - if (use_triangularization){ - B= call_tri(m, dim, x); - } else { - B= call_tri2(m, dim, x); - } - } else { - B = SparseMatrix_copy(A); - } - - - - sm->Lw = SparseMatrix_add(A, B); - - SparseMatrix_delete(B); - sm->Lwd = SparseMatrix_copy(sm->Lw); - if (!(sm->Lw) || !(sm->Lwd)) { - TriangleSmoother_delete(sm); - return NULL; - } - - iw = sm->Lw->ia; jw = sm->Lw->ja; - - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - - for (i = 0; i < m; i++){ - diag_d = diag_w = 0; - jdiag = -1; - for (j = iw[i]; j < iw[i+1]; j++){ - k = jw[j]; - if (k == i){ - jdiag = j; - continue; - } - /* w[j] = -1./(ia[i+1]-ia[i]+ia[ja[j]+1]-ia[ja[j]]); - w[j] = -2./(avg_dist[i]+avg_dist[k]); - w[j] = -1.*/;/* use unit weight for now, later can try 1/(deg(i)+deg(k)) */ - dist = pow(distance_cropped(x,dim,i,k),0.6); - w[j] = 1/(dist*dist); - diag_w += w[j]; - - /* d[j] = w[j]*distance(x,dim,i,k); - d[j] = w[j]*(avg_dist[i] + avg_dist[k])*0.5;*/ - d[j] = w[j]*dist; - stop += d[j]*distance(x,dim,i,k); - sbot += d[j]*dist; - diag_d += d[j]; - - } - - lambda[i] *= (-diag_w);/* alternatively don't do that then we have a constant penalty term scaled by lambda0 */ - - assert(jdiag >= 0); - w[jdiag] = -diag_w + lambda[i]; - d[jdiag] = -diag_d; - } - - s = stop/sbot; - for (i = 0; i < iw[m]; i++) d[i] *= s; - sm->scaling = s; - - FREE(avg_dist); - - return sm; -} - -void TriangleSmoother_delete(TriangleSmoother sm){ - - StressMajorizationSmoother_delete(sm); - -} - -void TriangleSmoother_smooth(TriangleSmoother sm, int dim, real *x){ - - StressMajorizationSmoother_smooth(sm, dim, x, 50, 0.001); -} - - - - -/* ================================ spring and spring-electrical based smoother ================ */ -SpringSmoother SpringSmoother_new(SparseMatrix A, int dim, spring_electrical_control ctrl, real *x){ - SpringSmoother sm; - int i, j, k, l, m = A->m, *ia = A->ia, *ja = A->ja, *id, *jd; - int *mask, nz; - real *d, *dd; - real *avg_dist; - SparseMatrix ID = NULL; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - - ID = ideal_distance_matrix(A, dim, x); - dd = (real*) ID->a; - - sm = N_GNEW(1,struct SpringSmoother_struct); - mask = N_GNEW(m,int); - - avg_dist = N_GNEW(m,real); - - for (i = 0; i < m ;i++){ - avg_dist[i] = 0; - nz = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - avg_dist[i] += distance(x, dim, i, ja[j]); - nz++; - } - assert(nz > 0); - avg_dist[i] /= nz; - } - - - for (i = 0; i < m; i++) mask[i] = -1; - - nz = 0; - for (i = 0; i < m; i++){ - mask[i] = i; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (mask[k] != i){ - mask[k] = i; - nz++; - } - } - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - for (l = ia[k]; l < ia[k+1]; l++){ - if (mask[ja[l]] != i){ - mask[ja[l]] = i; - nz++; - } - } - } - } - - sm->D = SparseMatrix_new(m, m, nz, MATRIX_TYPE_REAL, FORMAT_CSR); - if (!(sm->D)){ - SpringSmoother_delete(sm); - return NULL; - } - - id = sm->D->ia; jd = sm->D->ja; - d = (real*) sm->D->a; - id[0] = 0; - - nz = 0; - for (i = 0; i < m; i++){ - mask[i] = i+m; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (mask[k] != i+m){ - mask[k] = i+m; - jd[nz] = k; - d[nz] = (avg_dist[i] + avg_dist[k])*0.5; - d[nz] = dd[j]; - nz++; - } - } - - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - for (l = ia[k]; l < ia[k+1]; l++){ - if (mask[ja[l]] != i+m){ - mask[ja[l]] = i+m; - jd[nz] = ja[l]; - d[nz] = (avg_dist[i] + 2*avg_dist[k] + avg_dist[ja[l]])*0.5; - d[nz] = dd[j]+dd[l]; - nz++; - } - } - } - id[i+1] = nz; - } - sm->D->nz = nz; - sm->ctrl = spring_electrical_control_new(); - *(sm->ctrl) = *ctrl; - sm->ctrl->random_start = FALSE; - sm->ctrl->multilevels = 1; - sm->ctrl->step /= 2; - sm->ctrl->maxiter = 20; - - FREE(mask); - FREE(avg_dist); - SparseMatrix_delete(ID); - - return sm; -} - - -void SpringSmoother_delete(SpringSmoother sm){ - if (!sm) return; - if (sm->D) SparseMatrix_delete(sm->D); - if (sm->ctrl) spring_electrical_control_delete(sm->ctrl); -} - - - - -void SpringSmoother_smooth(SpringSmoother sm, SparseMatrix A, real *node_weights, int dim, real *x){ - int flag = 0; - - spring_electrical_spring_embedding(dim, A, sm->D, sm->ctrl, node_weights, x, &flag); - assert(!flag); - -} - -/*=============================== end of spring and spring-electrical based smoother =========== */ - -void post_process_smoothing(int dim, SparseMatrix A, spring_electrical_control ctrl, real *node_weights, real *x, int *flag){ -#ifdef TIME - clock_t cpu; -#endif - -#ifdef TIME - cpu = clock(); -#endif - *flag = 0; - - switch (ctrl->smoothing){ - case SMOOTHING_RNG: - case SMOOTHING_TRIANGLE:{ - TriangleSmoother sm; - - if (A->m > 2) { /* triangles need at least 3 nodes */ - if (ctrl->smoothing == SMOOTHING_RNG){ - sm = TriangleSmoother_new(A, dim, 0, x, FALSE); - } else { - sm = TriangleSmoother_new(A, dim, 0, x, TRUE); - } - TriangleSmoother_smooth(sm, dim, x); - TriangleSmoother_delete(sm); - } - break; - } - case SMOOTHING_STRESS_MAJORIZATION_GRAPH_DIST: - case SMOOTHING_STRESS_MAJORIZATION_POWER_DIST: - case SMOOTHING_STRESS_MAJORIZATION_AVG_DIST: - { - StressMajorizationSmoother sm; - int k, dist_scheme = IDEAL_AVG_DIST; - - if (ctrl->smoothing == SMOOTHING_STRESS_MAJORIZATION_GRAPH_DIST){ - dist_scheme = IDEAL_GRAPH_DIST; - } else if (ctrl->smoothing == SMOOTHING_STRESS_MAJORIZATION_AVG_DIST){ - dist_scheme = IDEAL_AVG_DIST; - } else if (ctrl->smoothing == SMOOTHING_STRESS_MAJORIZATION_POWER_DIST){ - dist_scheme = IDEAL_POWER_DIST; - } - - for (k = 0; k < 1; k++){ - sm = StressMajorizationSmoother2_new(A, dim, 0.05, x, dist_scheme); - StressMajorizationSmoother_smooth(sm, dim, x, 50, 0.001); - StressMajorizationSmoother_delete(sm); - } - break; - } - case SMOOTHING_SPRING:{ - SpringSmoother sm; - int k; - - for (k = 0; k < 1; k++){ - sm = SpringSmoother_new(A, dim, ctrl, x); - SpringSmoother_smooth(sm, A, node_weights, dim, x); - SpringSmoother_delete(sm); - } - - break; - } - - }/* end switch between smoothing methods */ - -#ifdef TIME - if (Verbose) fprintf(stderr, "post processing %f\n",((real) (clock() - cpu)) / CLOCKS_PER_SEC); -#endif -} diff --git a/internal/ccall/sfdpgen/post_process.h b/internal/ccall/sfdpgen/post_process.h deleted file mode 100644 index b063141..0000000 --- a/internal/ccall/sfdpgen/post_process.h +++ /dev/null @@ -1,96 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef POST_PROCESS_H -#define POST_PROCESS_H - -#include "spring_electrical.h" - -enum {SM_SCHEME_NORMAL, SM_SCHEME_NORMAL_ELABEL, SM_SCHEME_UNIFORM_STRESS, SM_SCHEME_MAXENT, SM_SCHEME_STRESS_APPROX, SM_SCHEME_STRESS}; - -struct StressMajorizationSmoother_struct { - SparseMatrix D;/* distance matrix. The diagonal is removed hence the ia, ja structure is different from Lw and Lwd!! */ - SparseMatrix Lw;/* the weighted laplacian. with offdiag = -1/w_ij */ - SparseMatrix Lwd;/* the laplacian like matrix with offdiag = -scaling*d_ij/w_ij. RHS in stress majorization = Lwd.x */ - real* lambda; - void (*data_deallocator)(void*); - void *data; - int scheme; - real scaling;/* scaling. It is multiplied to Lwd. need to divide coordinate x at the end of the stress majorization process */ - real tol_cg;/* tolerance and maxit for conjugate gradient that solves the Laplacian system. - typically the Laplacian only needs to be solved very crudely as it is part of an - outer iteration.*/ - int maxit_cg; -}; - -typedef struct StressMajorizationSmoother_struct *StressMajorizationSmoother; - -void StressMajorizationSmoother_delete(StressMajorizationSmoother sm); - -enum {IDEAL_GRAPH_DIST, IDEAL_AVG_DIST, IDEAL_POWER_DIST}; -StressMajorizationSmoother StressMajorizationSmoother2_new(SparseMatrix A, int dim, real lambda, real *x, int ideal_dist_scheme); - -real StressMajorizationSmoother_smooth(StressMajorizationSmoother sm, int dim, real *x, int maxit, real tol); -/*-------------------- triangle/neirhborhood graph based smoother ------------------- */ -typedef StressMajorizationSmoother TriangleSmoother; - -#define TriangleSmoother_struct StressMajorizationSmoother_struct - -void TriangleSmoother_delete(TriangleSmoother sm); - -TriangleSmoother TriangleSmoother_new(SparseMatrix A, int dim, real lambda, real *x, int use_triangularization); - -void TriangleSmoother_smooth(TriangleSmoother sm, int dim, real *x); - - - -/*------------------ spring and spring-electrical based smoother */ - -struct SpringSmoother_struct { - SparseMatrix D; - spring_electrical_control ctrl; -}; - -typedef struct SpringSmoother_struct *SpringSmoother; - -SpringSmoother SpringSmoother_new(SparseMatrix A, int dim, spring_electrical_control ctrl, real *x); - -void SpringSmoother_delete(SpringSmoother sm); - -void SpringSmoother_smooth(SpringSmoother sm, SparseMatrix A, real *node_weights, int dim, real *x); -/*------------------------------------------------------------------*/ - -void post_process_smoothing(int dim, SparseMatrix A, spring_electrical_control ctrl, real *node_weights, real *x, int *flag); - -/*-------------------- sparse stress majorizationp ------------------- */ -typedef StressMajorizationSmoother SparseStressMajorizationSmoother; - -#define SparseStressMajorizationSmoother_struct StressMajorizationSmoother_struct - -void SparseStressMajorizationSmoother_delete(SparseStressMajorizationSmoother sm); - -enum {WEIGHTING_SCHEME_NONE, WEIGHTING_SCHEME_INV_DIST, WEIGHTING_SCHEME_SQR_DIST}; -SparseStressMajorizationSmoother SparseStressMajorizationSmoother_new(SparseMatrix A, int dim, real lambda, real *x, - int weighting_scheme, int scale_initial_coord); - -real SparseStressMajorizationSmoother_smooth(SparseStressMajorizationSmoother sm, int dim, real *x, int maxit_sm, real tol); - -real get_stress(int m, int dim, int *iw, int *jw, real *w, real *d, real *x, real scaling, void *data, int weighted); - -real get_full_stress(SparseMatrix A, int dim, real *x, int weighting_scheme); -void dump_distance_edge_length(char *outfile, SparseMatrix A, int dim, real *x); - -/*--------------------------------------------------------------*/ - -#endif - diff --git a/internal/ccall/sfdpgen/sfdp.h b/internal/ccall/sfdpgen/sfdp.h deleted file mode 100644 index 7ccf8ff..0000000 --- a/internal/ccall/sfdpgen/sfdp.h +++ /dev/null @@ -1,26 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef SFDP_H -#define SFDP_H - -#include "config.h" - -#include "render.h" - -void sfdp_layout (graph_t * g); -void sfdp_cleanup (graph_t * g); -int fdpAdjust (graph_t * g); - -#endif - diff --git a/internal/ccall/sfdpgen/sfdpinit.c b/internal/ccall/sfdpgen/sfdpinit.c deleted file mode 100644 index f2719fe..0000000 --- a/internal/ccall/sfdpgen/sfdpinit.c +++ /dev/null @@ -1,415 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" -#ifdef HAVE_LIMITS_H -#include -#else -#ifdef HAVE_VALUES_H -#include -#endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void sfdp_init_edge(edge_t * e) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //node custom data - common_init_edge(e); -} - -static void sfdp_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; -#if 0 - int nnodes = agnnodes(g); - attrsym_t *N_pos = agfindnodeattr(g, "pos"); -#endif - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - neato_init_node(n); -#if 0 - FIX so that user positions works with multiscale - user_pos(N_pos, NULL, n, nnodes); -#endif - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - sfdp_init_edge(e); - } -} - -static void sfdp_init_graph(Agraph_t * g) -{ - int outdim; - - setEdgeType(g, ET_LINE); - outdim = late_int(g, agfindgraphattr(g, "dimen"), 2, 2); - GD_ndim(agroot(g)) = late_int(g, agfindgraphattr(g, "dim"), outdim, 2); - Ndim = GD_ndim(agroot(g)) = MIN(GD_ndim(agroot(g)), MAXDIM); - GD_odim(agroot(g)) = MIN(outdim, Ndim); - sfdp_init_node_edge(g); -} - -/* getPos: - */ -static real *getPos(Agraph_t * g, spring_electrical_control ctrl) -{ - Agnode_t *n; - real *pos = N_NEW(Ndim * agnnodes(g), real); - int ix, i; - - if (agfindnodeattr(g, "pos") == NULL) - return pos; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - i = ND_id(n); - if (hasPos(n)) { - for (ix = 0; ix < Ndim; ix++) { - pos[i * Ndim + ix] = ND_pos(n)[ix]; - } - } - } - - return pos; -} - -static void sfdpLayout(graph_t * g, spring_electrical_control ctrl, - int hops, pointf pad) -{ - real *sizes; - real *pos; - Agnode_t *n; - int flag, i; - int n_edge_label_nodes = 0, *edge_label_nodes = NULL; - SparseMatrix D = NULL; - SparseMatrix A; - - if (ctrl->method == METHOD_SPRING_MAXENT) /* maxent can work with distance matrix */ - A = makeMatrix(g, Ndim, &D); - else - A = makeMatrix(g, Ndim, NULL); - - if (ctrl->overlap >= 0) { - if (ctrl->edge_labeling_scheme > 0) - sizes = getSizes(g, pad, &n_edge_label_nodes, &edge_label_nodes); - else - sizes = getSizes(g, pad, NULL, NULL); - } - else - sizes = NULL; - pos = getPos(g, ctrl); - - switch (ctrl->method) { - case METHOD_SPRING_ELECTRICAL: - case METHOD_SPRING_MAXENT: - multilevel_spring_electrical_embedding(Ndim, A, D, ctrl, NULL, sizes, pos, n_edge_label_nodes, edge_label_nodes, &flag); - break; - case METHOD_UNIFORM_STRESS: - uniform_stress(Ndim, A, pos, &flag); - break; - case METHOD_STRESS:{ - int maxit = 200; - real tol = 0.001; - int weighted = TRUE; - - if (!D){ - D = SparseMatrix_get_real_adjacency_matrix_symmetrized(A);/* all distance 1 */ - weighted = FALSE; - } else { - D = SparseMatrix_symmetrize_nodiag(D, FALSE); - weighted = TRUE; - } - if (hops > 0){ - SparseMatrix DD; - DD = SparseMatrix_distance_matrix_khops(hops, D, weighted); - if (Verbose){ - fprintf(stderr,"extracted a %d-neighborhood graph of %d edges from a graph of %d edges\n", - hops, (DD->nz)/2, (D->nz/2)); - } - SparseMatrix_delete(D); - D = DD; - } - - stress_model(Ndim, A, D, &pos, TRUE, maxit, tol, &flag); - } - break; - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - real *npos = pos + (Ndim * ND_id(n)); - for (i = 0; i < Ndim; i++) { - ND_pos(n)[i] = npos[i]; - } - } - - free(sizes); - free(pos); - SparseMatrix_delete (A); - if (D) SparseMatrix_delete (D); - if (edge_label_nodes) FREE(edge_label_nodes); -} - -#if UNUSED -static int -late_mode (graph_t* g, Agsym_t* sym, int dflt) -{ - char* s; - int v; - int rv; - - if (!sym) return dflt; - s = agxget (g, sym); - if (isdigit(*s)) { - if ((v = atoi (s)) <= METHOD_UNIFORM_STRESS) - rv = v; - else - rv = dflt; - } - else if (isalpha(*s)) { - if (!strcasecmp(s, "spring")) - rv = METHOD_SPRING_ELECTRICAL; - else if (!strcasecmp(s, "maxent")) - rv = METHOD_SPRING_MAXENT; - else if (!strcasecmp(s, "stress")) - rv = METHOD_STRESS; - else if (!strcasecmp(s, "uniform")) - rv = METHOD_UNIFORM_STRESS; - else { - agerr (AGWARN, "Unknown value \"%s\" for mode attribute\n", s); - rv = dflt; - } - } - else - rv = dflt; - return rv; -} -#endif - -static int -late_smooth (graph_t* g, Agsym_t* sym, int dflt) -{ - char* s; - int v; - int rv; - - if (!sym) return dflt; - s = agxget (g, sym); - if (isdigit(*s)) { -#if (HAVE_GTS || HAVE_TRIANGLE) - if ((v = atoi (s)) <= SMOOTHING_RNG) -#else - if ((v = atoi (s)) <= SMOOTHING_SPRING) -#endif - rv = v; - else - rv = dflt; - } - else if (isalpha(*s)) { - if (!strcasecmp(s, "avg_dist")) - rv = SMOOTHING_STRESS_MAJORIZATION_AVG_DIST; - else if (!strcasecmp(s, "graph_dist")) - rv = SMOOTHING_STRESS_MAJORIZATION_GRAPH_DIST; - else if (!strcasecmp(s, "none")) - rv = SMOOTHING_NONE; - else if (!strcasecmp(s, "power_dist")) - rv = SMOOTHING_STRESS_MAJORIZATION_POWER_DIST; -#if (HAVE_GTS || HAVE_TRIANGLE) - else if (!strcasecmp(s, "rng")) - rv = SMOOTHING_RNG; -#endif - else if (!strcasecmp(s, "spring")) - rv = SMOOTHING_SPRING; -#if (HAVE_GTS || HAVE_TRIANGLE) - else if (!strcasecmp(s, "triangle")) - rv = SMOOTHING_TRIANGLE; -#endif - else - rv = dflt; - } - else - rv = dflt; - return rv; -} - -static int -late_quadtree_scheme (graph_t* g, Agsym_t* sym, int dflt) -{ - char* s; - int v; - int rv; - - if (!sym) return dflt; - s = agxget (g, sym); - if (isdigit(*s)) { - if ((v = atoi (s)) <= QUAD_TREE_FAST && v >= QUAD_TREE_NONE){ - rv = v; - } else { - rv = dflt; - } - } else if (isalpha(*s)) { - if (!strcasecmp(s, "none") || !strcasecmp(s, "false") ){ - rv = QUAD_TREE_NONE; - } else if (!strcasecmp(s, "normal") || !strcasecmp(s, "true") || !strcasecmp(s, "yes")){ - rv = QUAD_TREE_NORMAL; - } else if (!strcasecmp(s, "fast")){ - rv = QUAD_TREE_FAST; - } else { - rv = dflt; - } - } else { - rv = dflt; - } - return rv; -} - - -/* tuneControl: - * Use user values to reset control - * - * Possible parameters: - * ctrl->use_node_weights - */ -static void -tuneControl (graph_t* g, spring_electrical_control ctrl) -{ - long seed; - int init; - - seed = ctrl->random_seed; - init = setSeed (g, INIT_RANDOM, &seed); - if (init != INIT_RANDOM) { - agerr(AGWARN, "sfdp only supports start=random\n"); - } - ctrl->random_seed = seed; - - ctrl->K = late_double(g, agfindgraphattr(g, "K"), -1.0, 0.0); - ctrl->p = -1.0*late_double(g, agfindgraphattr(g, "repulsiveforce"), -AUTOP, 0.0); - ctrl->multilevels = late_int(g, agfindgraphattr(g, "levels"), INT_MAX, 0); - ctrl->smoothing = late_smooth(g, agfindgraphattr(g, "smoothing"), SMOOTHING_NONE); - ctrl->tscheme = late_quadtree_scheme(g, agfindgraphattr(g, "quadtree"), QUAD_TREE_NORMAL); - /* ctrl->method = late_mode(g, agfindgraphattr(g, "mode"), METHOD_SPRING_ELECTRICAL); */ - ctrl->method = METHOD_SPRING_ELECTRICAL; - ctrl->beautify_leaves = mapBool (agget(g, "beautify"), FALSE); - ctrl->do_shrinking = mapBool (agget(g, "overlap_shrink"), TRUE); - ctrl->rotation = late_double(g, agfindgraphattr(g, "rotation"), 0.0, -MAXDOUBLE); - ctrl->edge_labeling_scheme = late_int(g, agfindgraphattr(g, "label_scheme"), 0, 0); - if (ctrl->edge_labeling_scheme > 4) { - agerr (AGWARN, "label_scheme = %d > 4 : ignoring\n", ctrl->edge_labeling_scheme); - ctrl->edge_labeling_scheme = 0; - } -} - -void sfdp_layout(graph_t * g) -{ - int doAdjust; - adjust_data am; - int hops = -1; - sfdp_init_graph(g); - doAdjust = (Ndim == 2); - - if (agnnodes(g)) { - Agraph_t **ccs; - Agraph_t *sg; - int ncc; - int i; - expand_t sep; - pointf pad; - spring_electrical_control ctrl = spring_electrical_control_new(); - - tuneControl (g, ctrl); -#if (HAVE_GTS || HAVE_TRIANGLE) - graphAdjustMode(g, &am, "prism0"); -#else - graphAdjustMode(g, &am, 0); -#endif - - if ((am.mode == AM_PRISM) && doAdjust) { - doAdjust = 0; /* overlap removal done in sfdp */ - ctrl->overlap = am.value; - ctrl->initial_scaling = am.scaling; - sep = sepFactor(g); - if (sep.doAdd) { - pad.x = PS2INCH(sep.x); - pad.y = PS2INCH(sep.y); - } else { - pad.x = PS2INCH(DFLT_MARGIN); - pad.y = PS2INCH(DFLT_MARGIN); - } - } - else { - /* Turn off overlap removal in sfdp if prism not used */ - ctrl->overlap = -1; - } - - if (Verbose) - spring_electrical_control_print(ctrl); - - ccs = ccomps(g, &ncc, 0); - if (ncc == 1) { - sfdpLayout(g, ctrl, hops, pad); - if (doAdjust) removeOverlapWith(g, &am); - spline_edges(g); - } else { - pack_info pinfo; - getPackInfo(g, l_node, CL_OFFSET, &pinfo); - pinfo.doSplines = 1; - - for (i = 0; i < ncc; i++) { - sg = ccs[i]; - nodeInduce(sg); - sfdpLayout(sg, ctrl, hops, pad); - if (doAdjust) removeOverlapWith(sg, &am); - setEdgeType(sg, ET_LINE); - spline_edges(sg); - } - packSubgraphs(ncc, ccs, g, &pinfo); - } - for (i = 0; i < ncc; i++) { - agdelete(g, ccs[i]); - } - free(ccs); - spring_electrical_control_delete(ctrl); - } - - dotneato_postprocess(g); -} - -static void sfdp_cleanup_graph(graph_t * g) -{ -} - -void sfdp_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - sfdp_cleanup_graph(g); -} - diff --git a/internal/ccall/sfdpgen/sfdpinternal.h b/internal/ccall/sfdpgen/sfdpinternal.h deleted file mode 100644 index ada05e2..0000000 --- a/internal/ccall/sfdpgen/sfdpinternal.h +++ /dev/null @@ -1,20 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef SFDPINTERNAL_H -#define SFDPINTERNAL_H - -#include - -#endif - diff --git a/internal/ccall/sfdpgen/sparse_solve.c b/internal/ccall/sfdpgen/sparse_solve.c deleted file mode 100644 index 14b4f23..0000000 --- a/internal/ccall/sfdpgen/sparse_solve.c +++ /dev/null @@ -1,321 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include "sparse_solve.h" -#include "sfdpinternal.h" -#include "memory.h" -#include "logic.h" -#include "math.h" -#include "arith.h" -#include "types.h" -#include "globals.h" - -/* #define DEBUG_PRINT */ - -struct uniform_stress_matmul_data{ - real alpha; - SparseMatrix A; -}; - - -void Operator_uniform_stress_matmul_delete(Operator o){ - FREE(o->data); -} - -real *Operator_uniform_stress_matmul_apply(Operator o, real *x, real *y){ - struct uniform_stress_matmul_data *d = (struct uniform_stress_matmul_data*) (o->data); - SparseMatrix A = d->A; - real alpha = d->alpha; - real xsum = 0.; - int m = A->m, i; - - SparseMatrix_multiply_vector(A, x, &y, FALSE); - - /* alpha*V*x */ - for (i = 0; i < m; i++) xsum += x[i]; - - for (i = 0; i < m; i++) y[i] += alpha*(m*x[i] - xsum); - - return y; -} - - - -Operator Operator_uniform_stress_matmul(SparseMatrix A, real alpha){ - Operator o; - struct uniform_stress_matmul_data *d; - - o = MALLOC(sizeof(struct Operator_struct)); - o->data = d = MALLOC(sizeof(struct uniform_stress_matmul_data)); - d->alpha = alpha; - d->A = A; - o->Operator_apply = Operator_uniform_stress_matmul_apply; - return o; -} - - -real *Operator_matmul_apply(Operator o, real *x, real *y){ - SparseMatrix A = (SparseMatrix) o->data; - SparseMatrix_multiply_vector(A, x, &y, FALSE); - return y; -} - -Operator Operator_matmul_new(SparseMatrix A){ - Operator o; - - o = GNEW(struct Operator_struct); - o->data = (void*) A; - o->Operator_apply = Operator_matmul_apply; - return o; -} - - -void Operator_matmul_delete(Operator o){ - if (o) FREE(o); -} - - -real* Operator_diag_precon_apply(Operator o, real *x, real *y){ - int i, m; - real *diag = (real*) o->data; - m = (int) diag[0]; - diag++; - for (i = 0; i < m; i++) y[i] = x[i]*diag[i]; - return y; -} - - -Operator Operator_uniform_stress_diag_precon_new(SparseMatrix A, real alpha){ - Operator o; - real *diag; - int i, j, m = A->m, *ia = A->ia, *ja = A->ja; - real *a = (real*) A->a; - - assert(A->type == MATRIX_TYPE_REAL); - - assert(a); - - o = MALLOC(sizeof(struct Operator_struct)); - o->data = MALLOC(sizeof(real)*(m + 1)); - diag = (real*) o->data; - - diag[0] = m; - diag++; - for (i = 0; i < m; i++){ - diag[i] = 1./(m-1); - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j] && ABS(a[j]) > 0) diag[i] = 1./((m-1)*alpha+a[j]); - } - } - - o->Operator_apply = Operator_diag_precon_apply; - - return o; -} - - -Operator Operator_diag_precon_new(SparseMatrix A){ - Operator o; - real *diag; - int i, j, m = A->m, *ia = A->ia, *ja = A->ja; - real *a = (real*) A->a; - - assert(A->type == MATRIX_TYPE_REAL); - - assert(a); - - o = N_GNEW(1,struct Operator_struct); - o->data = N_GNEW((A->m + 1),real); - diag = (real*) o->data; - - diag[0] = m; - diag++; - for (i = 0; i < m; i++){ - diag[i] = 1.; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j] && ABS(a[j]) > 0) diag[i] = 1./a[j]; - } - } - - o->Operator_apply = Operator_diag_precon_apply; - - return o; -} - -void Operator_diag_precon_delete(Operator o){ - if (o->data) FREE(o->data); - if (o) FREE(o); -} - -static real conjugate_gradient(Operator A, Operator precon, int n, real *x, real *rhs, real tol, int maxit, int *flag){ - real *z, *r, *p, *q, res = 10*tol, alpha; - real rho = 1.0e20, rho_old = 1, res0, beta; - real* (*Ax)(Operator o, real *in, real *out) = A->Operator_apply; - real* (*Minvx)(Operator o, real *in, real *out) = precon->Operator_apply; - int iter = 0; - - z = N_GNEW(n,real); - r = N_GNEW(n,real); - p = N_GNEW(n,real); - q = N_GNEW(n,real); - - r = Ax(A, x, r); - r = vector_subtract_to(n, rhs, r); - - res0 = res = sqrt(vector_product(n, r, r))/n; -#ifdef DEBUG_PRINT - if (Verbose){ - fprintf(stderr, "on entry, cg iter = %d of %d, residual = %g, tol = %g\n", iter, maxit, res, tol); - } -#endif - - while ((iter++) < maxit && res > tol*res0){ - z = Minvx(precon, r, z); - rho = vector_product(n, r, z); - - if (iter > 1){ - beta = rho/rho_old; - p = vector_saxpy(n, z, p, beta); - } else { - MEMCPY(p, z, sizeof(real)*n); - } - - q = Ax(A, p, q); - - alpha = rho/vector_product(n, p, q); - - x = vector_saxpy2(n, x, p, alpha); - r = vector_saxpy2(n, r, q, -alpha); - - res = sqrt(vector_product(n, r, r))/n; - -#ifdef DEBUG_PRINT - if (Verbose && 0){ - fprintf(stderr, " cg iter = %d, residual = %g, relative res = %g\n", iter, res, res/res0); - } -#endif - - - - rho_old = rho; - } - FREE(z); FREE(r); FREE(p); FREE(q); -#ifdef DEBUG - _statistics[0] += iter - 1; -#endif - -#ifdef DEBUG_PRINT - if (Verbose){ - fprintf(stderr, " cg iter = %d, residual = %g, relative res = %g\n", iter, res, res/res0); - } -#endif - return res; -} - -real cg(Operator Ax, Operator precond, int n, int dim, real *x0, real *rhs, real tol, int maxit, int *flag){ - real *x, *b, res = 0; - int k, i; - x = N_GNEW(n, real); - b = N_GNEW(n, real); - for (k = 0; k < dim; k++){ - for (i = 0; i < n; i++) { - x[i] = x0[i*dim+k]; - b[i] = rhs[i*dim+k]; - } - - res += conjugate_gradient(Ax, precond, n, x, b, tol, maxit, flag); - for (i = 0; i < n; i++) { - rhs[i*dim+k] = x[i]; - } - } - FREE(x); - FREE(b); - return res; - -} - -real* jacobi(SparseMatrix A, int dim, real *x0, real *rhs, int maxit, int *flag){ - /* maxit iteration of jacobi */ - real *x, *y, *b, sum, diag, *a; - int k, i, j, n = A->n, *ia, *ja, iter; - x = MALLOC(sizeof(real)*n); - y = MALLOC(sizeof(real)*n); - b = MALLOC(sizeof(real)*n); - assert(A->type = MATRIX_TYPE_REAL); - ia = A->ia; ja = A->ja; a = (real*) A->a; - - for (k = 0; k < dim; k++){ - for (i = 0; i < n; i++) { - x[i] = x0[i*dim+k]; - b[i] = rhs[i*dim+k]; - } - - for (iter = 0; iter < maxit; iter++){ - for (i = 0; i < n; i++){ - sum = 0; diag = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] != i){ - sum += a[j]*x[ja[j]]; - } else { - diag = a[j]; - } - } - if (sum == 0) fprintf(stderr,"neighb=%d\n",ia[i+1]-ia[i]); - assert(diag != 0); - y[i] = (b[i] - sum)/diag; - - } - MEMCPY(x, y, sizeof(real)*n); - } - - for (i = 0; i < n; i++) { - rhs[i*dim+k] = x[i]; - } - } - - - FREE(x); - FREE(y); - FREE(b); - return rhs; - -} - -real SparseMatrix_solve(SparseMatrix A, int dim, real *x0, real *rhs, real tol, int maxit, int method, int *flag){ - Operator Ax, precond; - int n = A->m; - real res = 0; - *flag = 0; - - switch (method){ - case SOLVE_METHOD_CG: - Ax = Operator_matmul_new(A); - precond = Operator_diag_precon_new(A); - res = cg(Ax, precond, n, dim, x0, rhs, tol, maxit, flag); - Operator_matmul_delete(Ax); - Operator_diag_precon_delete(precond); - break; - case SOLVE_METHOD_JACOBI:{ - jacobi(A, dim, x0, rhs, maxit, flag); - break; - } - default: - assert(0); - break; - - } - return res; -} - diff --git a/internal/ccall/sfdpgen/sparse_solve.h b/internal/ccall/sfdpgen/sparse_solve.h deleted file mode 100644 index 53617fb..0000000 --- a/internal/ccall/sfdpgen/sparse_solve.h +++ /dev/null @@ -1,38 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#ifndef SPARSE_SOLVER_H -#define SPARSE_SOLVER_H - -#include "SparseMatrix.h" - -enum {SOLVE_METHOD_CG, SOLVE_METHOD_JACOBI}; - -typedef struct Operator_struct *Operator; - -struct Operator_struct { - void *data; - real* (*Operator_apply)(Operator o, real *in, real *out); -}; - -real cg(Operator Ax, Operator precond, int n, int dim, real *x0, real *rhs, real tol, int maxit, int *flag); - -real SparseMatrix_solve(SparseMatrix A, int dim, real *x0, real *rhs, real tol, int maxit, int method, int *flag); - -Operator Operator_uniform_stress_matmul(SparseMatrix A, real alpha); - -Operator Operator_uniform_stress_diag_precon_new(SparseMatrix A, real alpha); - -#endif - diff --git a/internal/ccall/sfdpgen/spring_electrical.c b/internal/ccall/sfdpgen/spring_electrical.c deleted file mode 100644 index da6cf0d..0000000 --- a/internal/ccall/sfdpgen/spring_electrical.c +++ /dev/null @@ -1,2287 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "SparseMatrix.h" -#include "spring_electrical.h" -#include "QuadTree.h" -#include "Multilevel.h" -#include "post_process.h" -#include "overlap.h" -#include "types.h" -#include "memory.h" -#include "arith.h" -#include "logic.h" -#include "math.h" -#include "globals.h" -#include -#include - -#define PI M_PI - -spring_electrical_control spring_electrical_control_new(){ - spring_electrical_control ctrl; - ctrl = MALLOC(sizeof(struct spring_electrical_control_struct)); - ctrl->p = AUTOP;/*a negativve number default to -1. repulsive force = dist^p */ - ctrl->q = 1;/*a positive number default to 1. Only apply to maxent. - attractive force = dist^q. Stress energy = (||x_i-x_j||-d_ij)^{q+1} */ - ctrl->random_start = TRUE;/* whether to apply SE from a random layout, or from exisiting layout */ - ctrl->K = -1;/* the natural distance. If K < 0, K will be set to the average distance of an edge */ - ctrl->C = 0.2;/* another parameter. f_a(i,j) = C*dist(i,j)^2/K * d_ij, f_r(i,j) = K^(3-p)/dist(i,j)^(-p). By default C = 0.2. */ - ctrl->multilevels = FALSE;/* if <=1, single level */ - - //ctrl->multilevel_coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET; - //ctrl->multilevel_coarsen_mode = COARSEN_MODE_GENTLE; - - ctrl->multilevel_coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST; /* pass on to Multilevel_control->coarsen_scheme */ - ctrl->multilevel_coarsen_mode = COARSEN_MODE_FORCEFUL;/*alternative: COARSEN_MODE_GENTLE. pass on to Multilevel_control->coarsen_mode */ - - - ctrl->quadtree_size = 45;/* cut off size above which quadtree approximation is used */ - ctrl->max_qtree_level = 10;/* max level of quadtree */ - ctrl->bh = 0.6;/* Barnes-Hutt constant, if width(snode)/dist[i,snode] < bh, treat snode as a supernode.*/ - ctrl->tol = 0.001;/* minimum different between two subsequence config before terminating. ||x-xold||_infinity < tol/K */ - ctrl->maxiter = 500; - ctrl->cool = 0.90;/* default 0.9 */ - ctrl->step = 0.1; - ctrl->adaptive_cooling = TRUE; - ctrl->random_seed = 123; - ctrl->beautify_leaves = FALSE; - ctrl->use_node_weights = FALSE; - ctrl->smoothing = SMOOTHING_NONE; - ctrl->overlap = 0; - ctrl->do_shrinking = 1; - ctrl->tscheme = QUAD_TREE_HYBRID; - ctrl->method = METHOD_SPRING_ELECTRICAL; - ctrl->initial_scaling = -4; - ctrl->rotation = 0.; - ctrl->edge_labeling_scheme = 0; - return ctrl; -} - -void spring_electrical_control_delete(spring_electrical_control ctrl){ - FREE(ctrl); -} - -static char* smoothings[] = { - "NONE", "STRESS_MAJORIZATION_GRAPH_DIST", "STRESS_MAJORIZATION_AVG_DIST", "STRESS_MAJORIZATION_POWER_DIST", "SPRING", "TRIANGLE", "RNG" -}; - -static char* tschemes[] = { - "NONE", "NORMAL", "FAST", "HYBRID" -}; - -static char* methods[] = { - "SPRING_ELECTRICAL", "SPRING_MAXENT", "STRESS_MAXENT", "STRESS_APPROX", "STRESS", "UNIFORM_STRESS", "FULL_STRESS", "NONE" -}; - -void spring_electrical_control_print(spring_electrical_control ctrl){ - fprintf (stderr, "spring_electrical_control:\n"); - fprintf (stderr, " repulsive and attractive exponents: %.03f %.03f\n", ctrl->p, ctrl->q); - fprintf (stderr, " random start %d seed %d\n", ctrl->random_start, ctrl->random_seed); - fprintf (stderr, " K : %.03f C : %.03f\n", ctrl->K, ctrl->C); - fprintf (stderr, " max levels %d coarsen_scheme %d coarsen_node %d\n", ctrl->multilevels, - ctrl->multilevel_coarsen_scheme,ctrl->multilevel_coarsen_mode); - fprintf (stderr, " quadtree size %d max_level %d\n", ctrl->quadtree_size, ctrl->max_qtree_level); - fprintf (stderr, " Barnes-Hutt constant %.03f tolerance %.03f maxiter %d\n", ctrl->bh, ctrl->tol, ctrl->maxiter); - fprintf (stderr, " cooling %.03f step size %.03f adaptive %d\n", ctrl->cool, ctrl->step, ctrl->adaptive_cooling); - fprintf (stderr, " beautify_leaves %d node weights %d rotation %.03f\n", - ctrl->beautify_leaves, ctrl->use_node_weights, ctrl->rotation); - fprintf (stderr, " smoothing %s overlap %d initial_scaling %d do_shrinking %f\n", - smoothings[ctrl->smoothing], ctrl->overlap, ctrl->do_shrinking, ctrl->initial_scaling); - fprintf (stderr, " octree scheme %s method %s\n", tschemes[ctrl->tscheme], methods[ctrl->method]); - fprintf (stderr, " edge_labeling_scheme %d\n", ctrl->edge_labeling_scheme); -} - -void oned_optimizer_delete(oned_optimizer opt){ - FREE(opt); -} - -oned_optimizer oned_optimizer_new(int i){ - oned_optimizer opt; - opt = MALLOC(sizeof(struct oned_optimizer_struct)); - opt->i = i; - opt->direction = OPT_INIT; - return opt; -} - -void oned_optimizer_train(oned_optimizer opt, real work){ - int i = opt->i; - - assert(i >= 0); - opt->work[i] = work; - if (opt->direction == OPT_INIT){ - if (opt->i == MAX_I){ - opt->direction = OPT_DOWN; - opt->i = opt->i - 1; - } else { - opt->direction = OPT_UP; - opt->i = MIN(MAX_I, opt->i + 1); - } - } else if (opt->direction == OPT_UP){ - /* fprintf(stderr, "{current_level, prev_level} = {%d,%d}, {work, work_prev} = {%f,%f}",i,i-1,opt->work[i], opt->work[i-1]);*/ - assert(i >= 1); - if (opt->work[i] < opt->work[i-1] && opt->i < MAX_I){ - /* fprintf(stderr, "keep going up to level %d\n",opt->i+1);*/ - opt->i = MIN(MAX_I, opt->i + 1); - } else { - /* fprintf(stderr, "going down to level %d\n",opt->i-1);*/ - (opt->i)--; - opt->direction = OPT_DOWN; - } - } else { - assert(i < MAX_I); - /* fprintf(stderr, "{current_level, prev_level} = {%d,%d}, {work, work_prev} = {%f,%f}",i,i+1,opt->work[i], opt->work[i+1]);*/ - if (opt->work[i] < opt->work[i+1] && opt->i > 0){ - /* fprintf(stderr, "keep going down to level %d\n",opt->i-1);*/ - opt->i = MAX(0, opt->i-1); - } else { - /* fprintf(stderr, "keep up to level %d\n",opt->i+1);*/ - (opt->i)++; - opt->direction = OPT_UP; - } - } -} - -int oned_optimizer_get(oned_optimizer opt){ - return opt->i; -} - - -real average_edge_length(SparseMatrix A, int dim, real *coord){ - real dist = 0, d; - int *ia = A->ia, *ja = A->ja, i, j, k; - assert(SparseMatrix_is_symmetric(A, TRUE)); - - if (ia[A->m] == 0) return 1; - for (i = 0; i < A->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - d = 0; - for (k = 0; k < dim; k++){ - d += (coord[dim*i+k] - coord[dim*ja[j]])*(coord[dim*i+k] - coord[dim*ja[j]]); - } - dist += sqrt(d); - } - } - return dist/ia[A->m]; -} - -#ifdef ENERGY -static real spring_electrical_energy(int dim, SparseMatrix A, real *x, real p, real CRK, real KP){ - /* 1. Grad[||x-y||^k,x] = k||x-y||^(k-1)*0.5*(x-y)/||x-y|| = k/2*||x-y||^(k-2) (x-y) - which should equal to -force (force = -gradient), - hence energy for force ||x-y||^m (y-x) is ||x-y||^(m+2)*2/(m+2) where m != 2 - 2. Grad[Log[||x-y||],x] = 1/||x-y||*0.5*(x-y)/||x-y|| = 0.5*(x-y)/||x-y||^2, - hence the energy to give force ||x-y||^-2 (x-y) is -2*Log[||x-y||] - - */ - int i, j, k, *ia = A->ia, *ja = A->ja, n = A->m; - real energy = 0, dist; - - for (i = 0; i < n; i++){ - /* attractive force C^((2-p)/3) ||x_i-x_j||/K * (x_j - x_i) */ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - dist = distance(x, dim, i, ja[j]); - energy += CRK*pow(dist, 3.)*2./3.; - } - - /* repulsive force K^(1 - p)/||x_i-x_j||^(1 - p) (x_i - x_j) */ - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - energy += -KP*2*log(dist); - } else { - energy += -KP*pow(dist,p+1)*2/(p+1); - } - } - } - } - return energy; -} - -#endif - -void export_embedding(FILE *fp, int dim, SparseMatrix A, real *x, real *width){ - int i, j, k, *ia=A->ia, *ja = A->ja; - int ne = 0; - real xsize, ysize, xmin, xmax, ymin, ymax; - - xmax = xmin = x[0]; - ymax = ymin = x[1]; - for (i = 0; i < A->m; i++){ - xmax = MAX(xmax, x[i*dim]); - xmin = MIN(xmin, x[i*dim]); - ymax = MAX(ymax, x[i*dim+1]); - ymin = MIN(ymin, x[i*dim+1]); - } - xsize = xmax-xmin; - ysize = ymax-ymin; - xsize = MAX(xsize, ysize); - - if (dim == 2){ - fprintf(fp,"Graphics[{GrayLevel[0.5],Line[{"); - } else { - fprintf(fp,"Graphics3D[{GrayLevel[0.5],Line[{"); - } - for (i = 0; i < A->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - ne++; - if (ne > 1) fprintf(fp, ","); - fprintf(fp, "{{"); - for (k = 0; k < dim; k++) { - if (k > 0) fprintf(fp,","); - fprintf(fp, "%f",x[i*dim+k]); - } - fprintf(fp, "},{"); - for (k = 0; k < dim; k++) { - if (k > 0) fprintf(fp,","); - fprintf(fp, "%f",x[ja[j]*dim+k]); - } - fprintf(fp, "}}"); - } - } - - fprintf(fp,"}],Hue[%f]",/*drand()*/1.); - - if (width && dim == 2){ - for (i = 0; i < A->m; i++){ - if (i >= 0) fprintf(fp,","); - fprintf(fp,"(*width={%f,%f}, x = {%f,%f}*){GrayLevel[.5,.5],Rectangle[{%f,%f},{%f,%f}]}", width[i*dim], width[i*dim+1], x[i*dim], x[i*dim + 1], - x[i*dim] - width[i*dim], x[i*dim+1] - width[i*dim+1], - x[i*dim] + width[i*dim], x[i*dim+1] + width[i*dim+1]); - } - } - - if (A->m < 100){ - for (i = 0; i < A->m; i++){ - if (i >= 0) fprintf(fp,","); - fprintf(fp,"Text[%d,{",i+1); - for (k = 0; k < dim; k++) { - if (k > 0) fprintf(fp,","); - fprintf(fp, "%f",x[i*dim+k]); - } - fprintf(fp,"}]"); - } - } else if (A->m < 500000){ - fprintf(fp, ", Point[{"); - for (i = 0; i < A->m; i++){ - if (i > 0) fprintf(fp,","); - fprintf(fp,"{"); - for (k = 0; k < dim; k++) { - if (k > 0) fprintf(fp,","); - fprintf(fp, "%f",x[i*dim+k]); - } - fprintf(fp,"}"); - } - fprintf(fp, "}]"); - } else { - fprintf(fp,"{}"); - } - - - fprintf(fp,"},ImageSize->%f]\n", 2*xsize/2); - -} - -static real update_step(int adaptive_cooling, real step, real Fnorm, real Fnorm0, real cool){ - - if (!adaptive_cooling) { - return cool*step; - } - if (Fnorm >= Fnorm0){ - step = cool*step; - } else if (Fnorm > 0.95*Fnorm0){ - // step = step; - } else { - step = 0.99*step/cool; - } - return step; -} - - -#define node_degree(i) (ia[(i)+1] - ia[(i)]) - -void check_real_array_size(real **a, int len, int *lenmax){ - if (len >= *lenmax){ - *lenmax = len + MAX((int) 0.2*len, 10); - *a = REALLOC(*a, sizeof(real)*(*lenmax)); - } - -} -void check_int_array_size(int **a, int len, int *lenmax){ - if (len >= *lenmax){ - *lenmax = len + MAX((int) 0.2*len, 10); - *a = REALLOC(*a, sizeof(int)*(*lenmax)); - } - -} - -real get_angle(real *x, int dim, int i, int j){ - /* between [0, 2Pi)*/ - int k; - real y[2], res; - real eps = 0.00001; - for (k = 0; k < 2; k++){ - y[k] = x[j*dim+k] - x[i*dim+k]; - } - if (ABS(y[0]) <= ABS(y[1])*eps){ - if (y[1] > 0) return 0.5*PI; - return 1.5*PI; - } - res = atan(y[1]/y[0]); - if (y[0] > 0){ - if (y[1] < 0) res = 2*PI+res; - } else if (y[0] < 0){ - res = res + PI; - } - return res; -} - -int comp_real(const void *x, const void *y){ - real *xx = (real*) x; - real *yy = (real*) y; - - if (*xx > *yy){ - return 1; - } else if (*xx < *yy){ - return -1; - } - return 0; -} -static void sort_real(int n, real *a){ - qsort(a, n, sizeof(real), comp_real); -} - - -static void set_leaves(real *x, int dim, real dist, real ang, int i, int j){ - x[dim*j] = cos(ang)*dist + x[dim*i]; - x[dim*j+1] = sin(ang)*dist + x[dim*i+1]; -} - -static void beautify_leaves(int dim, SparseMatrix A, real *x){ - int m = A->m, i, j, *ia = A->ia, *ja = A->ja, k; - int *checked, p; - real dist; - int nleaves, nleaves_max = 10; - real *angles, maxang, ang1 = 0, ang2 = 0, pad, step; - int *leaves, nangles_max = 10, nangles; - - assert(!SparseMatrix_has_diagonal(A)); - - checked = MALLOC(sizeof(int)*m); - angles = MALLOC(sizeof(real)*nangles_max); - leaves = MALLOC(sizeof(int)*nleaves_max); - - - for (i = 0; i < m; i++) checked[i] = FALSE; - - for (i = 0; i < m; i++){ - if (ia[i+1] - ia[i] != 1) continue; - if (checked[i]) continue; - p = ja[ia[i]]; - if (!checked[p]){ - checked[p] = TRUE; - dist = 0; nleaves = 0; nangles = 0; - for (j = ia[p]; j < ia[p+1]; j++){ - if (node_degree(ja[j]) == 1){ - checked[ja[j]] = TRUE; - check_int_array_size(&leaves, nleaves, &nleaves_max); - dist += distance(x, dim, p, ja[j]); - leaves[nleaves] = ja[j]; - nleaves++; - } else { - check_real_array_size(&angles, nangles, &nangles_max); - angles[nangles++] = get_angle(x, dim, p, ja[j]); - } - } - assert(nleaves > 0); - dist /= nleaves; - if (nangles > 0){ - sort_real(nangles, angles); - maxang = 0; - for (k = 0; k < nangles - 1; k++){ - if (angles[k+1] - angles[k] > maxang){ - maxang = angles[k+1] - angles[k]; - ang1 = angles[k]; ang2 = angles[k+1]; - } - } - if (2*PI + angles[0] - angles[nangles - 1] > maxang){ - maxang = 2*PI + angles[0] - angles[nangles - 1]; - ang1 = angles[nangles - 1]; - ang2 = 2*PI + angles[0]; - } - } else { - ang1 = 0; ang2 = 2*PI; maxang = 2*PI; - } - pad = MAX(maxang - PI*0.166667*(nleaves-1), 0)*0.5; - ang1 += pad*0.95; - ang2 -= pad*0.95; -ang1 = 0; ang2 = 2*PI; maxang = 2*PI; - assert(ang2 >= ang1); - step = 0.; - if (nleaves > 1) step = (ang2 - ang1)/(nleaves - 1); - for (i = 0; i < nleaves; i++) { - set_leaves(x, dim, dist, ang1, p, leaves[i]); - ang1 += step; - } - } - } - - - FREE(checked); - FREE(angles); - FREE(leaves); -} - -void force_print(FILE *fp, int n, int dim, real *x, real *force){ - int i, k; - - fprintf(fp,"Graphics[{"); - for (i = 0; i < n; i++){ - if (i > 0) fprintf(fp, ","); - fprintf(fp, "Arrow[{{"); - for (k = 0; k < dim; k++){ - if (k > 0) fprintf(fp, ","); - fprintf(fp, "%f",x[i*dim+k]); - } - fprintf(fp, "},{"); - for (k = 0; k < dim; k++){ - if (k > 0) fprintf(fp, ","); - fprintf(fp, "%f",x[i*dim+k]+0.5*force[i*dim+k]); - } - fprintf(fp, "}}]"); - } - fprintf(fp,","); - for (i = 0; i < n; i++){ - if (i > 0) fprintf(fp, ","); - fprintf(fp, "Tooltip[Point[{"); - for (k = 0; k < dim; k++){ - if (k > 0) fprintf(fp, ","); - fprintf(fp, "%f",x[i*dim+k]); - } - fprintf(fp, "}],%d]",i); - } - - - - - fprintf(fp,"}]\n"); - -} - - -void spring_electrical_embedding_fast(int dim, SparseMatrix A0, spring_electrical_control ctrl, real *node_weights, real *x, int *flag){ - /* x is a point to a 1D array, x[i*dim+j] gives the coordinate of the i-th node at dimension j. */ - SparseMatrix A = A0; - int m, n; - int i, j, k; - real p = ctrl->p, K = ctrl->K, C = ctrl->C, CRK, tol = ctrl->tol, maxiter = ctrl->maxiter, cool = ctrl->cool, step = ctrl->step, KP; - int *ia = NULL, *ja = NULL; - real *xold = NULL; - real *f = NULL, dist, F, Fnorm = 0, Fnorm0; - int iter = 0; - int adaptive_cooling = ctrl->adaptive_cooling; - QuadTree qt = NULL; - real counts[4], *force = NULL; -#ifdef TIME - clock_t start, end, start0; - real qtree_cpu = 0, qtree_cpu0 = 0, qtree_new_cpu = 0, qtree_new_cpu0 = 0; - real total_cpu = 0; - start0 = clock(); -#endif - int max_qtree_level = ctrl->max_qtree_level; - oned_optimizer qtree_level_optimizer = NULL; - - if (!A || maxiter <= 0) return; - - m = A->m, n = A->n; - if (n <= 0 || dim <= 0) return; - - qtree_level_optimizer = oned_optimizer_new(max_qtree_level); - - *flag = 0; - if (m != n) { - *flag = ERROR_NOT_SQUARE_MATRIX; - goto RETURN; - } - assert(A->format == FORMAT_CSR); - A = SparseMatrix_symmetrize(A, TRUE); - ia = A->ia; - ja = A->ja; - - if (ctrl->random_start){ - srand(ctrl->random_seed); - for (i = 0; i < dim*n; i++) x[i] = drand(); - } - if (K < 0){ - ctrl->K = K = average_edge_length(A, dim, x); - } - if (C < 0) ctrl->C = C = 0.2; - if (p >= 0) ctrl->p = p = -1; - KP = pow(K, 1 - p); - CRK = pow(C, (2.-p)/3.)/K; - - xold = MALLOC(sizeof(real)*dim*n); - force = MALLOC(sizeof(real)*dim*n); - - do { -#ifdef TIME - //start2 = clock(); -#endif - -#ifdef GVIEWER - if (Gviewer){ - char *lab; - lab = MALLOC(sizeof(char)*100); - sprintf(lab,"sfdp, iter=%d", iter); - gviewer_set_label(lab); - gviewer_reset_graph_coord(A, dim, x); - drawScene(); - gviewer_dump_current_frame(); - //if ((adaptive_cooling && iter%100 == 0) || (!adaptive_cooling && iter%10 == 0)) gviewer_dump_current_frame(); - FREE(lab); - } -#endif - - iter++; - xold = MEMCPY(xold, x, sizeof(real)*dim*n); - Fnorm0 = Fnorm; - Fnorm = 0.; - - max_qtree_level = oned_optimizer_get(qtree_level_optimizer); - -#ifdef TIME - start = clock(); -#endif - if (ctrl->use_node_weights){ - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, node_weights); - } else { - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - } - -#ifdef TIME - qtree_new_cpu += ((real) (clock() - start))/CLOCKS_PER_SEC; -#endif - - /* repulsive force */ -#ifdef TIME - start = clock(); -#endif - - QuadTree_get_repulsive_force(qt, force, x, ctrl->bh, p, KP, counts, flag); - - assert(!(*flag)); - -#ifdef TIME - end = clock(); - qtree_cpu += ((real) (end - start)) / CLOCKS_PER_SEC; -#endif - - /* attractive force C^((2-p)/3) ||x_i-x_j||/K * (x_j - x_i) */ - for (i = 0; i < n; i++){ - f = &(force[i*dim]); - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - dist = distance(x, dim, i, ja[j]); - for (k = 0; k < dim; k++){ - f[k] -= CRK*(x[i*dim+k] - x[ja[j]*dim+k])*dist; - } - } - } - - - /* move */ - for (i = 0; i < n; i++){ - f = &(force[i*dim]); - F = 0.; - for (k = 0; k < dim; k++) F += f[k]*f[k]; - F = sqrt(F); - Fnorm += F; - if (F > 0) for (k = 0; k < dim; k++) f[k] /= F; - for (k = 0; k < dim; k++) x[i*dim+k] += step*f[k]; - }/* done vertex i */ - - - - if (qt) { -#ifdef TIME - start = clock(); -#endif - QuadTree_delete(qt); -#ifdef TIME - end = clock(); - qtree_new_cpu += ((real) (end - start)) / CLOCKS_PER_SEC; -#endif - -#ifdef TIME - qtree_cpu0 = qtree_cpu - qtree_cpu0; - qtree_new_cpu0 = qtree_new_cpu - qtree_new_cpu0; - /* if (Verbose) fprintf(stderr, "\r iter=%d cpu=%.2f, quadtree=%.2f quad_force=%.2f other=%.2f counts={%.2f,%.2f,%.2f} step=%f Fnorm=%f nz=%d K=%f qtree_lev = %d", - iter, ((real) (clock() - start2)) / CLOCKS_PER_SEC, qtree_new_cpu0, - qtree_cpu0,((real) (clock() - start2))/CLOCKS_PER_SEC - qtree_cpu0 - qtree_new_cpu0, - counts[0], counts[1], counts[2], - step, Fnorm, A->nz,K,max_qtree_level); - */ - qtree_cpu0 = qtree_cpu; - qtree_new_cpu0 = qtree_new_cpu; -#endif - oned_optimizer_train(qtree_level_optimizer, counts[0]+0.85*counts[1]+3.3*counts[2]); - } else { - if (Verbose) { - fprintf(stderr, "\r iter = %d, step = %f Fnorm = %f nz = %d K = %f ",iter, step, Fnorm, A->nz,K); -#ifdef ENERGY - fprintf(stderr, "energy = %f\n",spring_electrical_energy(dim, A, x, p, CRK, KP)); -#endif - } - } - - step = update_step(adaptive_cooling, step, Fnorm, Fnorm0, cool); - } while (step > tol && iter < maxiter); - -#ifdef DEBUG_PRINT - if (Verbose && 0) fputs("\n", stderr); -#endif - - -#ifdef DEBUG_PRINT - if (Verbose) { - fprintf(stderr, "\n iter = %d, step = %f Fnorm = %f nz = %d K = %f ",iter, step, Fnorm, A->nz, K); - } -#endif - - if (ctrl->beautify_leaves) beautify_leaves(dim, A, x); - -#ifdef TIME - total_cpu += ((real) (clock() - start0)) / CLOCKS_PER_SEC; - if (Verbose) fprintf(stderr, "\n time for qtree = %f, qtree_force = %f, total cpu = %f\n",qtree_new_cpu, qtree_cpu, total_cpu); -#endif - - - RETURN: - oned_optimizer_delete(qtree_level_optimizer); - ctrl->max_qtree_level = max_qtree_level; - - if (xold) FREE(xold); - if (A != A0) SparseMatrix_delete(A); - if (force) FREE(force); - -} - - -void spring_electrical_embedding_slow(int dim, SparseMatrix A0, spring_electrical_control ctrl, real *node_weights, real *x, int *flag){ - /* a version that does vertex moves in one go, instead of one at a time, use for debugging the fast version. Quadtree is not used. */ - /* x is a point to a 1D array, x[i*dim+j] gives the coordinate of the i-th node at dimension j. */ - SparseMatrix A = A0; - int m, n; - int i, j, k; - real p = ctrl->p, K = ctrl->K, C = ctrl->C, CRK, tol = ctrl->tol, maxiter = ctrl->maxiter, cool = ctrl->cool, step = ctrl->step, KP; - int *ia = NULL, *ja = NULL; - real *xold = NULL; - real *f = NULL, dist, F, Fnorm = 0, Fnorm0; - int iter = 0; - int adaptive_cooling = ctrl->adaptive_cooling; - QuadTree qt = NULL; - int USE_QT = FALSE; - int nsuper = 0, nsupermax = 10; - real *center = NULL, *supernode_wgts = NULL, *distances = NULL, nsuper_avg, counts = 0, counts_avg = 0; - real *force; -#ifdef TIME - clock_t start, end, start0, start2; - real qtree_cpu = 0, qtree_cpu0 = 0; - real total_cpu = 0; - start0 = clock(); -#endif - int max_qtree_level = ctrl->max_qtree_level; - oned_optimizer qtree_level_optimizer = NULL; - - fprintf(stderr,"spring_electrical_embedding_slow"); - if (!A || maxiter <= 0) return; - - m = A->m, n = A->n; - if (n <= 0 || dim <= 0) return; - force = MALLOC(sizeof(real)*n*dim); - - if (n >= ctrl->quadtree_size) { - USE_QT = TRUE; - qtree_level_optimizer = oned_optimizer_new(max_qtree_level); - center = MALLOC(sizeof(real)*nsupermax*dim); - supernode_wgts = MALLOC(sizeof(real)*nsupermax); - distances = MALLOC(sizeof(real)*nsupermax); - } - USE_QT = FALSE; - *flag = 0; - if (m != n) { - *flag = ERROR_NOT_SQUARE_MATRIX; - goto RETURN; - } - assert(A->format == FORMAT_CSR); - A = SparseMatrix_symmetrize(A, TRUE); - ia = A->ia; - ja = A->ja; - - if (ctrl->random_start){ - srand(ctrl->random_seed); - for (i = 0; i < dim*n; i++) x[i] = drand(); - } - if (K < 0){ - ctrl->K = K = average_edge_length(A, dim, x); - } - if (C < 0) ctrl->C = C = 0.2; - if (p >= 0) ctrl->p = p = -1; - KP = pow(K, 1 - p); - CRK = pow(C, (2.-p)/3.)/K; - -#ifdef DEBUG_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout_0_"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - f = MALLOC(sizeof(real)*dim); - xold = MALLOC(sizeof(real)*dim*n); - do { - for (i = 0; i < dim*n; i++) force[i] = 0; - - iter++; - xold = MEMCPY(xold, x, sizeof(real)*dim*n); - Fnorm0 = Fnorm; - Fnorm = 0.; - nsuper_avg = 0; - - if (USE_QT) { - max_qtree_level = oned_optimizer_get(qtree_level_optimizer); - if (ctrl->use_node_weights){ - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, node_weights); - } else { - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - } - } -#ifdef TIME - start2 = clock(); -#endif - - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) f[k] = 0.; - /* repulsive force K^(1 - p)/||x_i-x_j||^(1 - p) (x_i - x_j) */ - if (USE_QT){ -#ifdef TIME - start = clock(); -#endif - QuadTree_get_supernodes(qt, ctrl->bh, &(x[dim*i]), i, &nsuper, &nsupermax, - ¢er, &supernode_wgts, &distances, &counts, flag); -#ifdef TIME - end = clock(); - qtree_cpu += ((real) (end - start)) / CLOCKS_PER_SEC; -#endif - counts_avg += counts; - nsuper_avg += nsuper; - if (*flag) goto RETURN; - for (j = 0; j < nsuper; j++){ - dist = MAX(distances[j], MINDIST); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/(dist*dist); - } else { - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - if (ctrl->use_node_weights && node_weights){ - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } - } - for (k = 0; k < dim; k++) force[i*dim+k] += f[k]; - } - - - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) f[k] = 0.; - /* attractive force C^((2-p)/3) ||x_i-x_j||/K * (x_j - x_i) */ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - dist = distance(x, dim, i, ja[j]); - for (k = 0; k < dim; k++){ - f[k] -= CRK*(x[i*dim+k] - x[ja[j]*dim+k])*dist; - } - } - for (k = 0; k < dim; k++) force[i*dim+k] += f[k]; - } - - - - for (i = 0; i < n; i++){ - /* normalize force */ - for (k = 0; k < dim; k++) f[k] = force[i*dim+k]; - - F = 0.; - for (k = 0; k < dim; k++) F += f[k]*f[k]; - F = sqrt(F); - Fnorm += F; - - if (F > 0) for (k = 0; k < dim; k++) f[k] /= F; - - for (k = 0; k < dim; k++) x[i*dim+k] += step*f[k]; - - }/* done vertex i */ - - if (qt) { - QuadTree_delete(qt); - nsuper_avg /= n; - counts_avg /= n; -#ifdef TIME - qtree_cpu0 = qtree_cpu - qtree_cpu0; - if (Verbose && 0) fprintf(stderr, "\n cpu this outer iter = %f, quadtree time = %f other time = %f\n",((real) (clock() - start2)) / CLOCKS_PER_SEC, qtree_cpu0,((real) (clock() - start2))/CLOCKS_PER_SEC - qtree_cpu0); - qtree_cpu0 = qtree_cpu; -#endif - if (Verbose && 0) fprintf(stderr, "nsuper_avg=%f, counts_avg = %f 2*nsuper+counts=%f\n",nsuper_avg,counts_avg, 2*nsuper_avg+counts_avg); - oned_optimizer_train(qtree_level_optimizer, 5*nsuper_avg + counts_avg); - } - -#ifdef ENERGY - if (Verbose) { - fprintf(stderr, "\r iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d K = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz,K); - fprintf(stderr, "energy = %f\n",spring_electrical_energy(dim, A, x, p, CRK, KP)); - } -#endif - - - step = update_step(adaptive_cooling, step, Fnorm, Fnorm0, cool); - } while (step > tol && iter < maxiter); - -#ifdef DEBUG_PRINT - if (Verbose && 0) fputs("\n", stderr); -#endif - -#ifdef DEBUG_PRINT_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - -#ifdef DEBUG_PRINT - if (Verbose) { - if (USE_QT){ - fprintf(stderr, "iter = %d, step = %f Fnorm = %f qt_level = %d nsuper = %d nz = %d K = %f ",iter, step, Fnorm, max_qtree_level, (int) nsuper_avg,A->nz,K); - } else { - fprintf(stderr, "iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d K = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz,K); - } - } -#endif - - if (ctrl->beautify_leaves) beautify_leaves(dim, A, x); - -#ifdef TIME - total_cpu += ((real) (clock() - start0)) / CLOCKS_PER_SEC; - if (Verbose) fprintf(stderr, "time for supernode = %f, total cpu = %f\n",qtree_cpu, total_cpu); -#endif - - RETURN: - if (USE_QT) { - oned_optimizer_delete(qtree_level_optimizer); - ctrl->max_qtree_level = max_qtree_level; - } - if (xold) FREE(xold); - if (A != A0) SparseMatrix_delete(A); - if (f) FREE(f); - if (center) FREE(center); - if (supernode_wgts) FREE(supernode_wgts); - if (distances) FREE(distances); - FREE(force); - -} - - - -void spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control ctrl, real *node_weights, real *x, int *flag){ - /* x is a point to a 1D array, x[i*dim+j] gives the coordinate of the i-th node at dimension j. */ - SparseMatrix A = A0; - int m, n; - int i, j, k; - real p = ctrl->p, K = ctrl->K, C = ctrl->C, CRK, tol = ctrl->tol, maxiter = ctrl->maxiter, cool = ctrl->cool, step = ctrl->step, KP; - int *ia = NULL, *ja = NULL; - real *xold = NULL; - real *f = NULL, dist, F, Fnorm = 0, Fnorm0; - int iter = 0; - int adaptive_cooling = ctrl->adaptive_cooling; - QuadTree qt = NULL; - int USE_QT = FALSE; - int nsuper = 0, nsupermax = 10; - real *center = NULL, *supernode_wgts = NULL, *distances = NULL, nsuper_avg, counts = 0, counts_avg = 0; -#ifdef TIME - clock_t start, end, start0, start2; - real qtree_cpu = 0, qtree_cpu0 = 0; - real total_cpu = 0; - start0 = clock(); -#endif - int max_qtree_level = ctrl->max_qtree_level; - oned_optimizer qtree_level_optimizer = NULL; - - if (!A || maxiter <= 0) return; - - m = A->m, n = A->n; - if (n <= 0 || dim <= 0) return; - - if (n >= ctrl->quadtree_size) { - USE_QT = TRUE; - qtree_level_optimizer = oned_optimizer_new(max_qtree_level); - center = MALLOC(sizeof(real)*nsupermax*dim); - supernode_wgts = MALLOC(sizeof(real)*nsupermax); - distances = MALLOC(sizeof(real)*nsupermax); - } - *flag = 0; - if (m != n) { - *flag = ERROR_NOT_SQUARE_MATRIX; - goto RETURN; - } - assert(A->format == FORMAT_CSR); - A = SparseMatrix_symmetrize(A, TRUE); - ia = A->ia; - ja = A->ja; - - if (ctrl->random_start){ - srand(ctrl->random_seed); - for (i = 0; i < dim*n; i++) x[i] = drand(); - } - if (K < 0){ - ctrl->K = K = average_edge_length(A, dim, x); - } - if (C < 0) ctrl->C = C = 0.2; - if (p >= 0) ctrl->p = p = -1; - KP = pow(K, 1 - p); - CRK = pow(C, (2.-p)/3.)/K; - -#ifdef DEBUG_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout_0_"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - f = MALLOC(sizeof(real)*dim); - xold = MALLOC(sizeof(real)*dim*n); - do { - - //#define VIS_MULTILEVEL -#ifdef VIS_MULTILEVEL - { - FILE *f; - char fname[10000]; - static int count = 0; - sprintf(fname, "/tmp/multilevel_%d",count++); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif -#ifdef GVIEWER - if (Gviewer){ - char *lab; - lab = MALLOC(sizeof(char)*100); - sprintf(lab,"sfdp, adaptive_cooling = %d iter=%d", adaptive_cooling, iter); - gviewer_set_label(lab); - gviewer_reset_graph_coord(A, dim, x); - drawScene(); - gviewer_dump_current_frame(); - //if ((adaptive_cooling && iter%100 == 0) || (!adaptive_cooling && iter%10 == 0)) gviewer_dump_current_frame(); - FREE(lab); - } -#endif - - iter++; - xold = MEMCPY(xold, x, sizeof(real)*dim*n); - Fnorm0 = Fnorm; - Fnorm = 0.; - nsuper_avg = 0; - counts_avg = 0; - - if (USE_QT) { - - max_qtree_level = oned_optimizer_get(qtree_level_optimizer); - if (ctrl->use_node_weights){ - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, node_weights); - } else { - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - } - - - } -#ifdef TIME - start2 = clock(); -#endif - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) f[k] = 0.; - /* attractive force C^((2-p)/3) ||x_i-x_j||/K * (x_j - x_i) */ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - dist = distance(x, dim, i, ja[j]); - for (k = 0; k < dim; k++){ - f[k] -= CRK*(x[i*dim+k] - x[ja[j]*dim+k])*dist; - } - } - - /* repulsive force K^(1 - p)/||x_i-x_j||^(1 - p) (x_i - x_j) */ - if (USE_QT){ -#ifdef TIME - start = clock(); -#endif - QuadTree_get_supernodes(qt, ctrl->bh, &(x[dim*i]), i, &nsuper, &nsupermax, - ¢er, &supernode_wgts, &distances, &counts, flag); - -#ifdef TIME - end = clock(); - qtree_cpu += ((real) (end - start)) / CLOCKS_PER_SEC; -#endif - counts_avg += counts; - nsuper_avg += nsuper; - if (*flag) goto RETURN; - for (j = 0; j < nsuper; j++){ - dist = MAX(distances[j], MINDIST); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/(dist*dist); - } else { - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - if (ctrl->use_node_weights && node_weights){ - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } - } - - /* normalize force */ - F = 0.; - for (k = 0; k < dim; k++) F += f[k]*f[k]; - F = sqrt(F); - Fnorm += F; - - if (F > 0) for (k = 0; k < dim; k++) f[k] /= F; - - for (k = 0; k < dim; k++) x[i*dim+k] += step*f[k]; - - }/* done vertex i */ - - if (qt) { - QuadTree_delete(qt); - nsuper_avg /= n; - counts_avg /= n; -#ifdef TIME - qtree_cpu0 = qtree_cpu - qtree_cpu0; - if (Verbose && 0) fprintf(stderr, "\n cpu this outer iter = %f, quadtree time = %f other time = %f\n",((real) (clock() - start2)) / CLOCKS_PER_SEC, qtree_cpu0,((real) (clock() - start2))/CLOCKS_PER_SEC - qtree_cpu0); - qtree_cpu0 = qtree_cpu; -#endif - if (Verbose & 0) fprintf(stderr, "nsuper_avg=%f, counts_avg = %f 2*nsuper+counts=%f\n",nsuper_avg,counts_avg, 2*nsuper_avg+counts_avg); - oned_optimizer_train(qtree_level_optimizer, 5*nsuper_avg + counts_avg); - } - -#ifdef ENERGY - if (Verbose) { - fprintf(stderr, "\r iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d K = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz,K); - fprintf(stderr, "energy = %f\n",spring_electrical_energy(dim, A, x, p, CRK, KP)); - } -#endif - - - step = update_step(adaptive_cooling, step, Fnorm, Fnorm0, cool); - } while (step > tol && iter < maxiter); - -#ifdef DEBUG_PRINT - if (Verbose && 0) fputs("\n", stderr); -#endif - -#ifdef DEBUG_PRINT_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - -#ifdef DEBUG_PRINT - if (Verbose) { - if (USE_QT){ - fprintf(stderr, "iter = %d, step = %f Fnorm = %f qt_level = %d nsuper = %d nz = %d K = %f ",iter, step, Fnorm, max_qtree_level, (int) nsuper_avg,A->nz,K); - } else { - fprintf(stderr, "iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d K = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz,K); - } - } -#endif - - if (ctrl->beautify_leaves) beautify_leaves(dim, A, x); - -#ifdef TIME - total_cpu += ((real) (clock() - start0)) / CLOCKS_PER_SEC; - if (Verbose) fprintf(stderr, "time for supernode = %f, total cpu = %f\n",qtree_cpu, total_cpu); -#endif - - RETURN: - if (USE_QT) { - oned_optimizer_delete(qtree_level_optimizer); - ctrl->max_qtree_level = max_qtree_level; - } - if (xold) FREE(xold); - if (A != A0) SparseMatrix_delete(A); - if (f) FREE(f); - if (center) FREE(center); - if (supernode_wgts) FREE(supernode_wgts); - if (distances) FREE(distances); - -} - -static void scale_coord(int n, int dim, real *x, int *id, int *jd, real *d, real dj){ - int i, j, k; - real w_ij, dist, s = 0, stop = 0, sbot = 0., nz = 0; - - if (dj == 0.) return; - for (i = 0; i < n; i++){ - for (j = id[i]; j < id[i+1]; j++){ - if (jd[j] == i) continue; - dist = distance_cropped(x, dim, i, jd[j]); - if (d){ - dj = d[j]; - } - assert(dj > 0); - w_ij = 1./(dj*dj); - /* spring force */ - for (k = 0; k < dim; k++){ - stop += w_ij*dj*dist; - sbot += w_ij*dist*dist; - } - s += dist; nz++; - } - } - s = stop/sbot; - for (i = 0; i < n*dim; i++) x[i] *= s; - fprintf(stderr,"scaling factor = %f\n",s); -} - -static real dmean_get(int n, int *id, int *jd, real* d){ - real dmean = 0; - int i, j; - - if (!d) return 1.; - for (i = 0; i < n; i++){ - for (j = id[i]; j < id[i+1]; j++){ - dmean += d[j]; - } - } - return dmean/((real) id[n]); -} - -void spring_maxent_embedding(int dim, SparseMatrix A0, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *x, real rho, int *flag){ - /* x is a point to a 1D array, x[i*dim+j] gives the coordinate of the i-th node at dimension j. - - Minimize \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij)^2 - \rho \Sum_{(i,j)\NotIn E} Log ||x_i-x_j|| - - or - - Minimize \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij)^2 - \rho \Sum_{(i,j)\NotIn E} ||x_i-x_j||^p - - The derivatives are - - d E/d x_i = \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij) (x_i-x_j)/||x_i-x_j|| - \rho \Sum_{(i,j)\NotIn E} (x_i-x_j)/||x_i-x_j||^2 - - or - - d E/d x_i = \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij) (x_i-x_j)/||x_i-x_j|| - \rho \Sum_{(i,j)\NotIn E} ||x_i-x_j||^(p-2) (x_i-x_j) - - if D == NULL, unit weight assumed - - */ - SparseMatrix A = A0; - int m, n; - int i, j, k; - real p = ctrl->p, C = ctrl->C, tol = ctrl->tol, maxiter = ctrl->maxiter, cool = ctrl->cool, step = ctrl->step, w_ij, dj = 1.; - int *ia = NULL, *ja = NULL; - int *id = NULL, *jd = NULL; - real *d, dmean; - real *xold = NULL; - real *f = NULL, dist, F, Fnorm = 0, Fnorm0; - int iter = 0; - int adaptive_cooling = ctrl->adaptive_cooling; - QuadTree qt = NULL; - int USE_QT = FALSE; - int nsuper = 0, nsupermax = 10; - real *center = NULL, *supernode_wgts = NULL, *distances = NULL, nsuper_avg, counts = 0; - int max_qtree_level = 10; -#ifdef DEBUG - double stress = 0; -#endif - - if (!A || maxiter <= 0) return; - m = A->m, n = A->n; - if (n <= 0 || dim <= 0) return; - - if (ctrl->tscheme != QUAD_TREE_NONE && n >= ctrl->quadtree_size) { - USE_QT = TRUE; - center = MALLOC(sizeof(real)*nsupermax*dim); - supernode_wgts = MALLOC(sizeof(real)*nsupermax); - distances = MALLOC(sizeof(real)*nsupermax); - } - - *flag = 0; - if (m != n) { - *flag = ERROR_NOT_SQUARE_MATRIX; - goto RETURN; - } - - - assert(A->format == FORMAT_CSR); - A = SparseMatrix_symmetrize(A, TRUE); - ia = A->ia; - ja = A->ja; - if (D){ - id = D->ia; - jd = D->ja; - d = (real*) D->a; - } else { - id = ia; jd = ja; d = NULL; - } - if (rho < 0) { - dmean = dmean_get(n, id, jd, d); - rho = rho*(id[n]/((((real) n)*((real) n)) - id[n]))/pow(dmean, p+1); - fprintf(stderr,"dmean = %f, rho = %f\n",dmean, rho); - } - - if (ctrl->random_start){ - fprintf(stderr, "send random coordinates\n"); - srand(ctrl->random_seed); - for (i = 0; i < dim*n; i++) x[i] = drand(); - /* rescale x to give minimum stress: - Min \Sum_{(i,j)\in E} w_ij (s ||x_i-x_j||-d_ij)^2 - thus - s = (\Sum_{(ij)\in E} w_ij d_ij ||x_i-x_j||)/(\Sum_{(i,j)\in E} w_ij ||x_i-x_j||^2) - */ - - } - scale_coord(n, dim, x, id, jd, d, dj); - - - - if (C < 0) ctrl->C = C = 0.2; - if (p >= 0) ctrl->p = p = -1; - -#ifdef DEBUG_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout_0_"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - f = MALLOC(sizeof(real)*dim); - xold = MALLOC(sizeof(real)*dim*n); - do { - iter++; - xold = MEMCPY(xold, x, sizeof(real)*dim*n); - Fnorm0 = Fnorm; - Fnorm = 0.; - nsuper_avg = 0; -#ifdef DEBUG - stress = 0; -#endif - - if (USE_QT) { - if (ctrl->use_node_weights){ - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, node_weights); - } else { - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - } - } - - /* - . d E/d x_i = \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij) (x_i-x_j)/||x_i-x_j|| - \rho \Sum_{(i,j)\NotIn E} (x_i-x_j)/||x_i-x_j||^2 - or - . d E/d x_i = \Sum_{(i,j)\in E} w_ij (||x_i-x_j||-d_ij) (x_i-x_j)/||x_i-x_j|| - \rho \Sum_{(i,j)\NotIn E} ||x_i-x_j||^(p-2) (x_i-x_j) - */ - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) f[k] = 0.; - - /* spring (attractive or repulsive) force w_ij (||x_i-x_j||-d_ij) (x_i-x_j)/||x_i-x_j|| */ - for (j = id[i]; j < id[i+1]; j++){ - if (jd[j] == i) continue; - dist = distance_cropped(x, dim, i, jd[j]); - if (d){ - dj = d[j]; - } - assert(dj > 0); - /* spring force */ - if (ctrl->q == 2){ - w_ij = 1./(dj*dj*dj); - for (k = 0; k < dim; k++){ - f[k] += -w_ij*(x[i*dim+k] - x[jd[j]*dim+k])*(dist - dj)*(dist - dj)/dist; - } - } else if (ctrl->q == 1){/* square stress force */ - w_ij = 1./(dj*dj); - for (k = 0; k < dim; k++){ - f[k] += -w_ij*(x[i*dim+k] - x[jd[j]*dim+k])*(dist - dj)/dist; - } - } else { - w_ij = 1./pow(dj, ctrl->q + 1); - for (k = 0; k < dim; k++){ - f[k] += -w_ij*(x[i*dim+k] - x[jd[j]*dim+k])*pow(dist - dj, ctrl->q)/dist; - } - } - -#ifdef DEBUG - w_ij = 1./(dj*dj); - for (k = 0; k < dim; k++){ - stress += (dist - dj)*(dist - dj)*w_ij; - } -#endif - - - /* discount repulsive force between neighboring vertices which will be applied next, that way there is no - repulsive forces between neighboring vertices */ - if (ctrl->use_node_weights && node_weights){ - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] -= rho*node_weights[j]*(x[i*dim+k] - x[jd[j]*dim+k])/(dist*dist); - } else { - f[k] -= rho*node_weights[j]*(x[i*dim+k] - x[jd[j]*dim+k])/pow(dist, 1.- p); - } - } - } else { - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] -= rho*(x[i*dim+k] - x[jd[j]*dim+k])/(dist*dist); - } else { - f[k] -= rho*(x[i*dim+k] - x[jd[j]*dim+k])/pow(dist, 1.- p); - } - } - - } - - } - - /* repulsive force ||x_i-x_j||^(1 - p) (x_i - x_j) */ - if (USE_QT){ - QuadTree_get_supernodes(qt, ctrl->bh, &(x[dim*i]), i, &nsuper, &nsupermax, - ¢er, &supernode_wgts, &distances, &counts, flag); - nsuper_avg += nsuper; - if (*flag) goto RETURN; - for (j = 0; j < nsuper; j++){ - dist = MAX(distances[j], MINDIST); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += rho*supernode_wgts[j]*(x[i*dim+k] - center[j*dim+k])/(dist*dist); - } else { - f[k] += rho*supernode_wgts[j]*(x[i*dim+k] - center[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - if (ctrl->use_node_weights && node_weights){ - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += rho*node_weights[j]*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += rho*node_weights[j]*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += rho*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += rho*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } - } - - /* normalize force */ - F = 0.; - for (k = 0; k < dim; k++) F += f[k]*f[k]; - F = sqrt(F); - Fnorm += F; - - if (F > 0) for (k = 0; k < dim; k++) f[k] /= F; - - for (k = 0; k < dim; k++) x[i*dim+k] += step*f[k]; - - }/* done vertex i */ - - if (qt) QuadTree_delete(qt); - nsuper_avg /= n; -#ifdef DEBUG_PRINT - stress /= (double) A->nz; - if (Verbose) { - fprintf(stderr, "\r iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d stress = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz, stress); - } -#endif - - step = update_step(adaptive_cooling, step, Fnorm, Fnorm0, cool); - } while (step > tol && iter < maxiter); - -#ifdef DEBUG_PRINT - if (Verbose) fputs("\n", stderr); -#endif - - - if (ctrl->beautify_leaves) beautify_leaves(dim, A, x); - - RETURN: - if (xold) FREE(xold); - if (A != A0) SparseMatrix_delete(A); - if (f) FREE(f); - if (center) FREE(center); - if (supernode_wgts) FREE(supernode_wgts); - if (distances) FREE(distances); - -} - - - -void spring_electrical_spring_embedding(int dim, SparseMatrix A0, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *x, int *flag){ - /* x is a point to a 1D array, x[i*dim+j] gives the coordinate of the i-th node at dimension j. Same as the spring-electrical except we also - introduce force due to spring length - */ - SparseMatrix A = A0; - int m, n; - int i, j, k; - real p = ctrl->p, K = ctrl->K, C = ctrl->C, CRK, tol = ctrl->tol, maxiter = ctrl->maxiter, cool = ctrl->cool, step = ctrl->step, KP; - int *ia = NULL, *ja = NULL; - int *id = NULL, *jd = NULL; - real *d; - real *xold = NULL; - real *f = NULL, dist, F, Fnorm = 0, Fnorm0; - int iter = 0; - int adaptive_cooling = ctrl->adaptive_cooling; - QuadTree qt = NULL; - int USE_QT = FALSE; - int nsuper = 0, nsupermax = 10; - real *center = NULL, *supernode_wgts = NULL, *distances = NULL, nsuper_avg, counts = 0; - int max_qtree_level = 10; - - if (!A || maxiter <= 0) return; - m = A->m, n = A->n; - if (n <= 0 || dim <= 0) return; - - if (n >= ctrl->quadtree_size) { - USE_QT = TRUE; - center = MALLOC(sizeof(real)*nsupermax*dim); - supernode_wgts = MALLOC(sizeof(real)*nsupermax); - distances = MALLOC(sizeof(real)*nsupermax); - } - *flag = 0; - if (m != n) { - *flag = ERROR_NOT_SQUARE_MATRIX; - goto RETURN; - } - assert(A->format == FORMAT_CSR); - A = SparseMatrix_symmetrize(A, TRUE); - ia = A->ia; - ja = A->ja; - id = D->ia; - jd = D->ja; - d = (real*) D->a; - - if (ctrl->random_start){ - srand(ctrl->random_seed); - for (i = 0; i < dim*n; i++) x[i] = drand(); - } - if (K < 0){ - ctrl->K = K = average_edge_length(A, dim, x); - } - if (C < 0) ctrl->C = C = 0.2; - if (p >= 0) ctrl->p = p = -1; - KP = pow(K, 1 - p); - CRK = pow(C, (2.-p)/3.)/K; - -#ifdef DEBUG_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout_0_"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - f = MALLOC(sizeof(real)*dim); - xold = MALLOC(sizeof(real)*dim*n); - do { - iter++; - xold = MEMCPY(xold, x, sizeof(real)*dim*n); - Fnorm0 = Fnorm; - Fnorm = 0.; - nsuper_avg = 0; - - if (USE_QT) { - if (ctrl->use_node_weights){ - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, node_weights); - } else { - qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL); - } - } - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) f[k] = 0.; - /* attractive force C^((2-p)/3) ||x_i-x_j||/K * (x_j - x_i) */ - - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - dist = distance(x, dim, i, ja[j]); - for (k = 0; k < dim; k++){ - f[k] -= CRK*(x[i*dim+k] - x[ja[j]*dim+k])*dist; - } - } - - for (j = id[i]; j < id[i+1]; j++){ - if (jd[j] == i) continue; - dist = distance_cropped(x, dim, i, jd[j]); - for (k = 0; k < dim; k++){ - if (dist < d[j]){ - f[k] += 0.2*CRK*(x[i*dim+k] - x[jd[j]*dim+k])*(dist - d[j])*(dist - d[j])/dist; - } else { - f[k] -= 0.2*CRK*(x[i*dim+k] - x[jd[j]*dim+k])*(dist - d[j])*(dist - d[j])/dist; - } - /* f[k] -= 0.2*CRK*(x[i*dim+k] - x[jd[j]*dim+k])*(dist - d[j]);*/ - } - } - - /* repulsive force K^(1 - p)/||x_i-x_j||^(1 - p) (x_i - x_j) */ - if (USE_QT){ - QuadTree_get_supernodes(qt, ctrl->bh, &(x[dim*i]), i, &nsuper, &nsupermax, - ¢er, &supernode_wgts, &distances, &counts, flag); - nsuper_avg += nsuper; - if (*flag) goto RETURN; - for (j = 0; j < nsuper; j++){ - dist = MAX(distances[j], MINDIST); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/(dist*dist); - } else { - f[k] += supernode_wgts[j]*KP*(x[i*dim+k] - center[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - if (ctrl->use_node_weights && node_weights){ - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += node_weights[j]*KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } else { - for (j = 0; j < n; j++){ - if (j == i) continue; - dist = distance_cropped(x, dim, i, j); - for (k = 0; k < dim; k++){ - if (p == -1){ - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/(dist*dist); - } else { - f[k] += KP*(x[i*dim+k] - x[j*dim+k])/pow(dist, 1.- p); - } - } - } - } - } - - /* normalize force */ - F = 0.; - for (k = 0; k < dim; k++) F += f[k]*f[k]; - F = sqrt(F); - Fnorm += F; - - if (F > 0) for (k = 0; k < dim; k++) f[k] /= F; - - for (k = 0; k < dim; k++) x[i*dim+k] += step*f[k]; - - }/* done vertex i */ - - if (qt) QuadTree_delete(qt); - nsuper_avg /= n; -#ifdef DEBUG_PRINT - if (Verbose && 0) { - fprintf(stderr, "\r iter = %d, step = %f Fnorm = %f nsuper = %d nz = %d K = %f ",iter, step, Fnorm, (int) nsuper_avg,A->nz,K); -#ifdef ENERGY - fprintf(stderr, "energy = %f\n",spring_electrical_energy(dim, A, x, p, CRK, KP)); -#endif - } -#endif - - step = update_step(adaptive_cooling, step, Fnorm, Fnorm0, cool); - } while (step > tol && iter < maxiter); - -#ifdef DEBUG_PRINT - if (Verbose && 0) fputs("\n", stderr); -#endif - -#ifdef DEBUG_PRINT_0 - { - FILE *f; - char fname[10000]; - strcpy(fname,"/tmp/graph_layout"); - sprintf(&(fname[strlen(fname)]), "%d",n); - f = fopen(fname,"w"); - export_embedding(f, dim, A, x, NULL); - fclose(f); - } -#endif - - if (ctrl->beautify_leaves) beautify_leaves(dim, A, x); - - RETURN: - if (xold) FREE(xold); - if (A != A0) SparseMatrix_delete(A); - if (f) FREE(f); - if (center) FREE(center); - if (supernode_wgts) FREE(supernode_wgts); - if (distances) FREE(distances); - -} - - - - -void print_matrix(real *x, int n, int dim){ - int i, k; - printf("{"); - for (i = 0; i < n; i++){ - if (i != 0) printf(","); - printf("{"); - for (k = 0; k < dim; k++) { - if (k != 0) printf(","); - printf("%f",x[i*dim+k]); - } - printf("}"); - } - printf("}\n"); -} - -/* -static void interpolate2(int dim, SparseMatrix A, real *x){ - int i, j, k, *ia = A->ia, *ja = A->ja, nz, m = A->m; - real alpha = 0.5, beta, *y; - - y = MALLOC(sizeof(real)*dim*m); - for (k = 0; k < dim*m; k++) y[k] = 0; - for (i = 0; i < m; i++){ - nz = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - nz++; - for (k = 0; k < dim; k++){ - y[i*dim+k] += x[ja[j]*dim + k]; - } - } - if (nz > 0){ - beta = (1-alpha)/nz; - for (k = 0; k < dim; k++) y[i*dim+k] = alpha*x[i*dim+k] + beta*y[i*dim+k]; - } - } - for (k = 0; k < dim*m; k++) x[k] = y[k]; - - FREE(y); -} - -*/ - -void interpolate_coord(int dim, SparseMatrix A, real *x){ - int i, j, k, *ia = A->ia, *ja = A->ja, nz; - real alpha = 0.5, beta, *y; - - y = MALLOC(sizeof(real)*dim); - for (i = 0; i < A->m; i++){ - for (k = 0; k < dim; k++) y[k] = 0; - nz = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - nz++; - for (k = 0; k < dim; k++){ - y[k] += x[ja[j]*dim + k]; - } - } - if (nz > 0){ - beta = (1-alpha)/nz; - for (k = 0; k < dim; k++) x[i*dim+k] = alpha*x[i*dim+k] + beta*y[k]; - } - } - - FREE(y); -} -static void prolongate(int dim, SparseMatrix A, SparseMatrix P, SparseMatrix R, real *x, real *y, int coarsen_scheme_used, real delta){ - int nc, *ia, *ja, i, j, k; - SparseMatrix_multiply_dense(P, FALSE, x, FALSE, &y, FALSE, dim); - - /* xu yao rao dong */ - if (coarsen_scheme_used > EDGE_BASED_STA && coarsen_scheme_used < EDGE_BASED_STO){ - interpolate_coord(dim, A, y); - nc = R->m; - ia = R->ia; - ja = R->ja; - for (i = 0; i < nc; i++){ - for (j = ia[i]+1; j < ia[i+1]; j++){ - for (k = 0; k < dim; k++){ - y[ja[j]*dim + k] += delta*(drand() - 0.5); - } - } - } - } -} - - - -int power_law_graph(SparseMatrix A){ - int *mask, m, max = 0, i, *ia = A->ia, *ja = A->ja, j, deg; - int res = FALSE; - m = A->m; - mask = MALLOC(sizeof(int)*(m+1)); - - for (i = 0; i < m + 1; i++){ - mask[i] = 0; - } - - for (i = 0; i < m; i++){ - deg = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) continue; - deg++; - } - mask[deg]++; - max = MAX(max, mask[deg]); - } - if (mask[1] > 0.8*max && mask[1] > 0.3*m) res = TRUE; - FREE(mask); - return res; -} - -void pcp_rotate(int n, int dim, real *x){ - int i, k,l; - real y[4], axis[2], center[2], dist, x0, x1; - - assert(dim == 2); - for (i = 0; i < dim*dim; i++) y[i] = 0; - for (i = 0; i < dim; i++) center[i] = 0; - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - center[k] += x[i*dim+k]; - } - } - for (i = 0; i < dim; i++) center[i] /= n; - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - x[dim*i+k] = x[dim*i+k] - center[k]; - } - } - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - for (l = 0; l < dim; l++){ - y[dim*k+l] += x[i*dim+k]*x[i*dim+l]; - } - } - } - if (y[1] == 0) { - axis[0] = 0; axis[1] = 1; - } else { - /* Eigensystem[{{x0, x1}, {x1, x3}}] = - {{(x0 + x3 - Sqrt[x0^2 + 4*x1^2 - 2*x0*x3 + x3^2])/2, - (x0 + x3 + Sqrt[x0^2 + 4*x1^2 - 2*x0*x3 + x3^2])/2}, - {{-(-x0 + x3 + Sqrt[x0^2 + 4*x1^2 - 2*x0*x3 + x3^2])/(2*x1), 1}, - {-(-x0 + x3 - Sqrt[x0^2 + 4*x1^2 - 2*x0*x3 + x3^2])/(2*x1), 1}}} - */ - axis[0] = -(-y[0] + y[3] - sqrt(y[0]*y[0]+4*y[1]*y[1]-2*y[0]*y[3]+y[3]*y[3]))/(2*y[1]); - axis[1] = 1; - } - dist = sqrt(1+axis[0]*axis[0]); - axis[0] = axis[0]/dist; - axis[1] = axis[1]/dist; - for (i = 0; i < n; i++){ - x0 = x[dim*i]*axis[0]+x[dim*i+1]*axis[1]; - x1 = -x[dim*i]*axis[1]+x[dim*i+1]*axis[0]; - x[dim*i] = x0; - x[dim*i + 1] = x1; - - } - - -} - -static void rotate(int n, int dim, real *x, real angle){ - int i, k; - real axis[2], center[2], x0, x1; - real radian = 3.14159/180; - - assert(dim == 2); - for (i = 0; i < dim; i++) center[i] = 0; - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - center[k] += x[i*dim+k]; - } - } - for (i = 0; i < dim; i++) center[i] /= n; - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - x[dim*i+k] = x[dim*i+k] - center[k]; - } - } - axis[0] = cos(-angle*radian); - axis[1] = sin(-angle*radian); - for (i = 0; i < n; i++){ - x0 = x[dim*i]*axis[0]+x[dim*i+1]*axis[1]; - x1 = -x[dim*i]*axis[1]+x[dim*i+1]*axis[0]; - x[dim*i] = x0; - x[dim*i + 1] = x1; - } - - -} - -static void attach_edge_label_coordinates(int dim, SparseMatrix A, int n_edge_label_nodes, int *edge_label_nodes, real *x, real *x2){ - int *mask; - int i, ii, j, k; - int nnodes = 0; - real len; - - mask = MALLOC(sizeof(int)*A->m); - - for (i = 0; i < A->m; i++) mask[i] = 1; - for (i = 0; i < n_edge_label_nodes; i++) { - if (edge_label_nodes[i] >= 0 && edge_label_nodes[i] < A->m) mask[edge_label_nodes[i]] = -1; - } - - for (i = 0; i < A->m; i++) { - if (mask[i] >= 0) mask[i] = nnodes++; - } - - - for (i = 0; i < A->m; i++){ - if (mask[i] >= 0){ - for (k = 0; k < dim; k++) x[i*dim+k] = x2[mask[i]*dim+k]; - } - } - - for (i = 0; i < n_edge_label_nodes; i++){ - ii = edge_label_nodes[i]; - len = A->ia[ii+1] - A->ia[ii]; - assert(len >= 2); /* should just be 2 */ - assert(mask[ii] < 0); - for (k = 0; k < dim; k++) { - x[ii*dim+k] = 0; - } - for (j = A->ia[ii]; j < A->ia[ii+1]; j++){ - for (k = 0; k < dim; k++){ - x[ii*dim+k] += x[(A->ja[j])*dim+k]; - } - } - for (k = 0; k < dim; k++) { - x[ii*dim+k] /= len; - } - } - - FREE(mask); -} - -static SparseMatrix shorting_edge_label_nodes(SparseMatrix A, int n_edge_label_nodes, int *edge_label_nodes){ - int *mask; - int i, id = 0, nz, j, jj, ii; - int *ia = A->ia, *ja = A->ja, *irn = NULL, *jcn = NULL; - SparseMatrix B; - - mask = MALLOC(sizeof(int)*A->m); - - for (i = 0; i < A->m; i++) mask[i] = 1; - - for (i = 0; i < n_edge_label_nodes; i++){ - mask[edge_label_nodes[i]] = -1; - } - - for (i = 0; i < A->m; i++) { - if (mask[i] > 0) mask[i] = id++; - } - - nz = 0; - for (i = 0; i < A->m; i++){ - if (mask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (mask[ja[j]] >= 0) { - nz++; - continue; - } - ii = ja[j]; - for (jj = ia[ii]; jj < ia[ii+1]; jj++){ - if (ja[jj] != i && mask[ja[jj]] >= 0) nz++; - } - } - } - - if (nz > 0) { - irn = MALLOC(sizeof(int)*nz); - jcn = MALLOC(sizeof(int)*nz); - } - - nz = 0; - for (i = 0; i < A->m; i++){ - if (mask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (mask[ja[j]] >= 0) { - irn[nz] = mask[i]; - jcn[nz++] = mask[ja[j]]; - continue; - } - ii = ja[j]; - for (jj = ia[ii]; jj < ia[ii+1]; jj++){ - if (ja[jj] != i && mask[ja[jj]] >= 0) { - irn[nz] = mask[i]; - jcn[nz++] = mask[ja[jj]]; - if (mask[i] == 68 || mask[ja[jj]] == 68){ - fprintf(stderr, "%d %d\n",mask[i], mask[ja[jj]]); - mask[i] = mask[i]; - } - } - } - } - } - - B = SparseMatrix_from_coordinate_arrays(nz, id, id, irn, jcn, NULL, MATRIX_TYPE_PATTERN, sizeof(real)); - - FREE(irn); - FREE(jcn); - FREE(mask); - return B; - -} - -static void multilevel_spring_electrical_embedding_core(int dim, SparseMatrix A0, SparseMatrix D0, spring_electrical_control ctrl, real *node_weights, real *label_sizes, - real *x, int n_edge_label_nodes, int *edge_label_nodes, int *flag){ - - - Multilevel_control mctrl = NULL; - int n, plg, coarsen_scheme_used; - SparseMatrix A = A0, D = D0, P = NULL; - Multilevel grid, grid0; - real *xc = NULL, *xf = NULL; - struct spring_electrical_control_struct ctrl0; -#ifdef TIME - clock_t cpu; -#endif - - ctrl0 = *ctrl; - -#ifdef TIME - cpu = clock(); -#endif - - *flag = 0; - if (!A) return; - n = A->n; - if (n <= 0 || dim <= 0) return; - - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - if (ctrl->method == METHOD_SPRING_MAXENT){ - A = SparseMatrix_symmetrize_nodiag(A, FALSE); - assert(D0); - D = SparseMatrix_symmetrize_nodiag(D, FALSE); - } else { - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - } else { - if (ctrl->method == METHOD_SPRING_MAXENT){ - assert(D0); - D = SparseMatrix_remove_diagonal(D); - } - A = SparseMatrix_remove_diagonal(A); - } - - /* we first generate a layout discarding (shorting) the edge labels nodes, then assign the edge label nodes at the average of their neighbors */ - if ((ctrl->edge_labeling_scheme == ELSCHEME_STRAIGHTLINE_PENALTY || ctrl->edge_labeling_scheme == ELSCHEME_STRAIGHTLINE_PENALTY2) - && n_edge_label_nodes > 0){ - SparseMatrix A2; - - real *x2 = MALLOC(sizeof(real)*(A->m)*dim); - A2 = shorting_edge_label_nodes(A, n_edge_label_nodes, edge_label_nodes); - multilevel_spring_electrical_embedding(dim, A2, NULL, ctrl, NULL, NULL, x2, 0, NULL, flag); - - assert(!(*flag)); - attach_edge_label_coordinates(dim, A, n_edge_label_nodes, edge_label_nodes, x, x2); - remove_overlap(dim, A, x, label_sizes, ctrl->overlap, ctrl->initial_scaling, - ctrl->edge_labeling_scheme, n_edge_label_nodes, edge_label_nodes, A, ctrl->do_shrinking, flag); - SparseMatrix_delete(A2); - FREE(x2); - if (A != A0) SparseMatrix_delete(A); - - return; - } - - mctrl = Multilevel_control_new(ctrl->multilevel_coarsen_scheme, ctrl->multilevel_coarsen_mode); - mctrl->maxlevel = ctrl->multilevels; - grid0 = Multilevel_new(A, D, node_weights, mctrl); - - grid = Multilevel_get_coarsest(grid0); - if (Multilevel_is_finest(grid)){ - xc = x; - } else { - xc = MALLOC(sizeof(real)*grid->n*dim); - } - - plg = power_law_graph(A); - if (ctrl->p == AUTOP){ - ctrl->p = -1; - if (plg) ctrl->p = -1.8; - } - - do { -#ifdef DEBUG_PRINT - if (Verbose) { - print_padding(grid->level); - if (Multilevel_is_coarsest(grid)){ - fprintf(stderr, "coarsest level -- %d, n = %d\n", grid->level, grid->n); - } else { - fprintf(stderr, "level -- %d, n = %d\n", grid->level, grid->n); - } - } -#endif - if (ctrl->method == METHOD_SPRING_ELECTRICAL){ - if (ctrl->tscheme == QUAD_TREE_NONE){ - spring_electrical_embedding_slow(dim, grid->A, ctrl, grid->node_weights, xc, flag); - } else if (ctrl->tscheme == QUAD_TREE_FAST || (ctrl->tscheme == QUAD_TREE_HYBRID && grid->A->m > QUAD_TREE_HYBRID_SIZE)){ - if (ctrl->tscheme == QUAD_TREE_HYBRID && grid->A->m > 10 && Verbose){ - fprintf(stderr, "QUAD_TREE_HYBRID, size larger than %d, switch to fast quadtree", QUAD_TREE_HYBRID_SIZE); - } - spring_electrical_embedding_fast(dim, grid->A, ctrl, grid->node_weights, xc, flag); - } else if (ctrl->tscheme == QUAD_TREE_NORMAL){ - spring_electrical_embedding(dim, grid->A, ctrl, grid->node_weights, xc, flag); - } else { - spring_electrical_embedding(dim, grid->A, ctrl, grid->node_weights, xc, flag); - } - } else if (ctrl->method == METHOD_SPRING_MAXENT){ - double rho = 0.05; - - ctrl->step = 1; - ctrl->adaptive_cooling = TRUE; - if (Multilevel_is_coarsest(grid)){ - ctrl->maxiter=500; - rho = 0.5; - } else { - ctrl->maxiter=100; - } - - if (Multilevel_is_finest(grid)) {/* gradually reduce influence of entropy */ - spring_maxent_embedding(dim, grid->A, grid->D, ctrl, grid->node_weights, xc, rho, flag); - ctrl->random_start = FALSE; - ctrl->step = .05; - ctrl->adaptive_cooling = FALSE; - spring_maxent_embedding(dim, grid->A, grid->D, ctrl, grid->node_weights, xc, rho/2, flag); - spring_maxent_embedding(dim, grid->A, grid->D, ctrl, grid->node_weights, xc, rho/8, flag); - spring_maxent_embedding(dim, grid->A, grid->D, ctrl, grid->node_weights, xc, rho/32, flag); - } else { - spring_maxent_embedding(dim, grid->A, grid->D, ctrl, grid->node_weights, xc, rho, flag); - } - } else { - assert(0); - } - if (Multilevel_is_finest(grid)) break; - if (*flag) { - FREE(xc); - goto RETURN; - } - P = grid->P; - coarsen_scheme_used = grid->coarsen_scheme_used; - grid = grid->prev; - if (Multilevel_is_finest(grid)){ - xf = x; - } else { - xf = MALLOC(sizeof(real)*grid->n*dim); - } - prolongate(dim, grid->A, P, grid->R, xc, xf, coarsen_scheme_used, (ctrl->K)*0.001); - FREE(xc); - xc = xf; - ctrl->random_start = FALSE; - ctrl->K = ctrl->K * 0.75; - ctrl->adaptive_cooling = FALSE; - if (grid->next->coarsen_scheme_used > VERTEX_BASED_STA && - grid->next->coarsen_scheme_used < VERTEX_BASED_STO){ - ctrl->step = 1; - } else { - ctrl->step = .1; - } - } while (grid); - -#ifdef TIME - if (Verbose) - fprintf(stderr, "layout time %f\n",((real) (clock() - cpu)) / CLOCKS_PER_SEC); - cpu = clock(); -#endif - - post_process_smoothing(dim, A, ctrl, node_weights, x, flag); - - if (Verbose) fprintf(stderr, "ctrl->overlap=%d\n",ctrl->overlap); - - /* rotation has to be done before overlap removal, since rotation could induce overlaps */ - if (dim == 2){ - pcp_rotate(n, dim, x); - } - if (ctrl->rotation != 0) rotate(n, dim, x, ctrl->rotation); - - - remove_overlap(dim, A, x, label_sizes, ctrl->overlap, ctrl->initial_scaling, - ctrl->edge_labeling_scheme, n_edge_label_nodes, edge_label_nodes, A, ctrl->do_shrinking, flag); - - RETURN: - *ctrl = ctrl0; - if (A != A0) SparseMatrix_delete(A); - if (D && D != D0) SparseMatrix_delete(D); - Multilevel_control_delete(mctrl); - Multilevel_delete(grid0); -} - -#ifdef GVIEWER -struct multilevel_spring_electrical_embedding_data { - int dim; - SparseMatrix A; - SparseMatrix D; - spring_electrical_control ctrl; - real *node_weights; - real *label_sizes; - real *x; - int n_edge_label_nodes; - int *edge_label_nodes; - int *flag; -}; - -void multilevel_spring_electrical_embedding_gv(void* data){ - struct multilevel_spring_electrical_embedding_data* d; - - d = (struct multilevel_spring_electrical_embedding_data*) data; - multilevel_spring_electrical_embedding_core(d->dim, d->A, d->D, d->ctrl, d->node_weights, d->label_sizes, d->x, d->n_edge_label_nodes, d->edge_label_nodes, d->flag); - gviewer_reset_graph_coord(d->A, d->dim, d->x);/* A inside spring_electrical gets deleted */ -} -void multilevel_spring_electrical_embedding(int dim, SparseMatrix A, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *label_sizes, - real *x, int n_edge_label_nodes, int *edge_label_nodes, int *flag){ - struct multilevel_spring_electrical_embedding_data data = {dim, A, D, ctrl, node_weights, label_sizes, x, n_edge_label_nodes, edge_label_nodes, flag}; - - int argcc = 1; - char **argvv; - - if (!Gviewer) return multilevel_spring_electrical_embedding_core(dim, A, D, ctrl, node_weights, label_sizes, x, n_edge_label_nodes, edge_label_nodes, flag); - - argcc = 1; - argvv = malloc(sizeof(char*)*argcc); - argvv[0] = malloc(sizeof(char)); - argvv[0][0] = '1'; - - gviewer_set_edge_color_scheme(COLOR_SCHEME_NO); - //gviewer_set_edge_color_scheme(COLOR_SCHEME_MEDIAN_AS_GREEN); - gviewer_toggle_bgcolor(); - //gviewer_toggle_vertex(); - //gviewer_init(&argcc, argvv, 0.01, 20, 60, 2*1010, 2*770, A, dim, x, &(data), multilevel_spring_electrical_embedding_gv); - gviewer_init(&argcc, argvv, 0.01, 20, 60, 320, 320, A, dim, x, &(data), multilevel_spring_electrical_embedding_gv); - free(argvv); - -} -#else -void multilevel_spring_electrical_embedding(int dim, SparseMatrix A, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *label_sizes, - real *x, int n_edge_label_nodes, int *edge_label_nodes, int *flag){ - multilevel_spring_electrical_embedding_core(dim, A, D, ctrl, node_weights, label_sizes, x, n_edge_label_nodes, edge_label_nodes, flag); -} -#endif diff --git a/internal/ccall/sfdpgen/spring_electrical.h b/internal/ccall/sfdpgen/spring_electrical.h deleted file mode 100644 index 4297890..0000000 --- a/internal/ccall/sfdpgen/spring_electrical.h +++ /dev/null @@ -1,102 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef SPRING_ELECTRICAL_H -#define SPRING_ELECTRICAL_H - -#include - -enum {ERROR_NOT_SQUARE_MATRIX = -100}; - -/* a flag to indicate that p should be set auto */ -#define AUTOP -1.0001234 - -enum {SMOOTHING_NONE, SMOOTHING_STRESS_MAJORIZATION_GRAPH_DIST, SMOOTHING_STRESS_MAJORIZATION_AVG_DIST, SMOOTHING_STRESS_MAJORIZATION_POWER_DIST, SMOOTHING_SPRING, SMOOTHING_TRIANGLE, SMOOTHING_RNG}; - -enum {QUAD_TREE_HYBRID_SIZE = 10000}; - -enum {QUAD_TREE_NONE = 0, QUAD_TREE_NORMAL, QUAD_TREE_FAST, QUAD_TREE_HYBRID}; - -enum {METHOD_STA = -1, METHOD_SPRING_ELECTRICAL, METHOD_SPRING_MAXENT, METHOD_STRESS_MAXENT, METHOD_STRESS_APPROX, METHOD_STRESS, METHOD_UNIFORM_STRESS, METHOD_FULL_STRESS, METHOD_NONE, METHOD_STO}; - -struct spring_electrical_control_struct { - real p;/*a negativve real number default to -1. repulsive force = dist^p */ - real q;/*a positive real number default to 2. attractive force = dist^q */ - int random_start;/* whether to apply SE from a random layout, or from exisiting layout */ - real K;/* the natural distance. If K < 0, K will be set to the average distance of an edge */ - real C;/* another parameter. f_a(i,j) = C*dist(i,j)^2/K * d_ij, f_r(i,j) = K^(3-p)/dist(i,j)^(-p). By default C = 0.2. */ - int multilevels;/* if <=1, single level */ - int multilevel_coarsen_scheme;/* pass on to Multilevel_control->coarsen_scheme */ - int multilevel_coarsen_mode;/* pass on to Multilevel_control->coarsen_mode */ - int quadtree_size;/* cut off size above which quadtree approximation is used */ - int max_qtree_level;/* max level of quadtree */ - real bh;/* Barnes-Hutt constant, if width(snode)/dist[i,snode] < bh, treat snode as a supernode. default 0.2*/ - real tol;/* minimum different between two subsequence config before terminating. ||x-xold|| < tol */ - int maxiter; - real cool;/* default 0.9 */ - real step;/* initial step size */ - int adaptive_cooling; - int random_seed; - int beautify_leaves; - int use_node_weights; - int smoothing; - int overlap; - int do_shrinking; - int tscheme; /* octree scheme. 0 (no octree), 1 (normal), 2 (fast) */ - int method;/* spring_electical, spring_maxent */ - real initial_scaling;/* how to scale the layout of the graph before passing to overlap removal algorithm. - positive values are absolute in points, negative values are relative - to average label size. - */ - real rotation;/* degree of rotation */ - int edge_labeling_scheme; /* specifying whether to treat node of the form |edgelabel|* as a special node representing an edge label. - 0 (no action, default), 1 (penalty based method to make that kind of node close to the center of its neighbor), - 1 (penalty based method to make that kind of node close to the old center of its neighbor), - 3 (two step process of overlap removal and straightening) */ -}; - -typedef struct spring_electrical_control_struct *spring_electrical_control; - -spring_electrical_control spring_electrical_control_new(void); -void spring_electrical_control_print(spring_electrical_control ctrl); - -void spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control ctrl, real *node_weights, real *x, int *flag); -void spring_electrical_embedding_fast(int dim, SparseMatrix A0, spring_electrical_control ctrl, real *node_weights, real *x, int *flag); - -void multilevel_spring_electrical_embedding(int dim, SparseMatrix A0, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *label_sizes, - real *x, int n_edge_label_nodes, int *edge_label_nodes, int *flag); - -void export_embedding(FILE *fp, int dim, SparseMatrix A, real *x, real *width); -void spring_electrical_control_delete(spring_electrical_control ctrl); -void print_matrix(real *x, int n, int dim); - -real average_edge_length(SparseMatrix A, int dim, real *coord); - -void spring_electrical_spring_embedding(int dim, SparseMatrix A, SparseMatrix D, spring_electrical_control ctrl, real *node_weights, real *x, int *flag); -void force_print(FILE *fp, int n, int dim, real *x, real *force); - -enum {MAX_I = 20, OPT_UP = 1, OPT_DOWN = -1, OPT_INIT = 0}; -struct oned_optimizer_struct{ - int i; - real work[MAX_I+1]; - int direction; -}; -typedef struct oned_optimizer_struct *oned_optimizer; -void oned_optimizer_delete(oned_optimizer opt); -oned_optimizer oned_optimizer_new(int i); -void oned_optimizer_train(oned_optimizer opt, real work); -int oned_optimizer_get(oned_optimizer opt); -void interpolate_coord(int dim, SparseMatrix A, real *x); -int power_law_graph(SparseMatrix A); -void pcp_rotate(int n, int dim, real *x); -#endif diff --git a/internal/ccall/sfdpgen/stress_model.c b/internal/ccall/sfdpgen/stress_model.c deleted file mode 100644 index b53bc40..0000000 --- a/internal/ccall/sfdpgen/stress_model.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "general.h" -#include "SparseMatrix.h" -#include "spring_electrical.h" -#include "post_process.h" -#include "stress_model.h" - -void stress_model_core(int dim, SparseMatrix B, real **x, int edge_len_weighted, int maxit_sm, real tol, int *flag){ - int m; - SparseStressMajorizationSmoother sm; - real lambda = 0; - /*int maxit_sm = 1000, i; tol = 0.001*/ - int i; - SparseMatrix A = B; - - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - if (A->type == MATRIX_TYPE_REAL){ - A = SparseMatrix_symmetrize(A, FALSE); - A = SparseMatrix_remove_diagonal(A); - } else { - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - } - A = SparseMatrix_remove_diagonal(A); - - *flag = 0; - m = A->m; - if (!x) { - *x = MALLOC(sizeof(real)*m*dim); - srand(123); - for (i = 0; i < dim*m; i++) (*x)[i] = drand(); - } - - if (edge_len_weighted){ - sm = SparseStressMajorizationSmoother_new(A, dim, lambda, *x, WEIGHTING_SCHEME_SQR_DIST, TRUE);/* do not under weight the long distances */ - //sm = SparseStressMajorizationSmoother_new(A, dim, lambda, *x, WEIGHTING_SCHEME_INV_DIST, TRUE);/* do not under weight the long distances */ - } else { - sm = SparseStressMajorizationSmoother_new(A, dim, lambda, *x, WEIGHTING_SCHEME_NONE, TRUE);/* weight the long distances */ - } - - if (!sm) { - *flag = -1; - goto RETURN; - } - - - sm->tol_cg = 0.1; /* we found that there is no need to solve the Laplacian accurately */ - sm->scheme = SM_SCHEME_STRESS; - SparseStressMajorizationSmoother_smooth(sm, dim, *x, maxit_sm, tol); - for (i = 0; i < dim*m; i++) { - (*x)[i] /= sm->scaling; - } - SparseStressMajorizationSmoother_delete(sm); - - RETURN: - if (A != B) SparseMatrix_delete(A); - -} - - -#ifdef GVIEWER -#include "gviewer.h" -#include "get_ps.h" -struct stress_model_data { - int dim; - SparseMatrix D; - real **x; - int edge_len_weighted; - int maxit_sm; - real tol; - int *flag; -}; - -void stress_model_gv(void* data){ - struct stress_model_data* d; - - d = (struct stress_model_data*) data; - return stress_model_core(d->dim, d->D, d->x, d->edge_len_weighted, d->maxit_sm, d->tol, d->flag); -} -void stress_model(int dim, SparseMatrix A, SparseMatrix D, real **x, int edge_len_weighted, int maxit_sm, real tol, int *flag){ - struct stress_model_data data = {dim, D, x, edge_len_weighted, maxit_sm, tol, flag}; - - int argcc = 1; - char **argvv; - - if (!Gviewer) return stress_model_core(dim, D, x, edge_len_weighted, maxit_sm, tol, flag); - argcc = 1; - argvv = malloc(sizeof(char*)*argcc); - argvv[0] = malloc(sizeof(char)); - argvv[0][0] = '1'; - // gviewer_init(&argcc, argvv, 0.1, 20, 60, 2*1010, 2*770, A, dim, *x, &(data), stress_model_gv); - gviewer_set_edge_color_scheme(COLOR_SCHEME_NO); - gviewer_toggle_bgcolor(); - gviewer_init(&argcc, argvv, 0.1, 20, 60, 720, 720, A, dim, *x, &(data), stress_model_gv); - free(argvv); - -} -#else -void stress_model(int dim, SparseMatrix A, SparseMatrix D, real **x, int edge_len_weighted, int maxit_sm, real tol, int *flag){ - stress_model_core(dim, D, x, edge_len_weighted, maxit_sm, tol, flag); -} -#endif - diff --git a/internal/ccall/sfdpgen/stress_model.h b/internal/ccall/sfdpgen/stress_model.h deleted file mode 100644 index a4e8fb0..0000000 --- a/internal/ccall/sfdpgen/stress_model.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef STRESS_MODEL_H -#define STRESS_MODEL_H - -void stress_model(int dim, SparseMatrix A, SparseMatrix D, real **x, int edge_len_weighted, int maxit, real tol, int *flag); - -#endif diff --git a/internal/ccall/sfdpgen/uniform_stress.c b/internal/ccall/sfdpgen/uniform_stress.c deleted file mode 100644 index 2326907..0000000 --- a/internal/ccall/sfdpgen/uniform_stress.c +++ /dev/null @@ -1,186 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "general.h" -#include "SparseMatrix.h" -#include "spring_electrical.h" -#include "post_process.h" -#include "sparse_solve.h" -#include -#include "uniform_stress.h" - -/* uniform stress solves the model: - -\Sum_{i<->j} (||x_i-x_j||-1)^2 + alpha * \Sum_{i!=j} (||x_i-x_j||^2-M)^2 - -This is somewhat similar to the binary stress model - -*/ - -UniformStressSmoother UniformStressSmoother_new(int dim, SparseMatrix A, real *x, real alpha, real M, int *flag){ - UniformStressSmoother sm; - int i, j, k, m = A->m, *ia = A->ia, *ja = A->ja, *iw, *jw, *id, *jd; - int nz; - real *d, *w, *a = (real*) A->a; - real diag_d, diag_w, dist, epsilon = 0.01; - - assert(SparseMatrix_is_symmetric(A, FALSE)); - - sm = MALLOC(sizeof(struct StressMajorizationSmoother_struct)); - sm->data = NULL; - sm->scheme = SM_SCHEME_UNIFORM_STRESS; - sm->lambda = NULL; - sm->data = MALLOC(sizeof(real)*2); - ((real*) sm->data)[0] = alpha; - ((real*) sm->data)[1] = M; - sm->data_deallocator = FREE; - sm->tol_cg = 0.01; - sm->maxit_cg = (int)sqrt((double) A->m); - - /* Lw and Lwd have diagonals */ - sm->Lw = SparseMatrix_new(m, m, A->nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - sm->Lwd = SparseMatrix_new(m, m, A->nz + m, MATRIX_TYPE_REAL, FORMAT_CSR); - iw = sm->Lw->ia; jw = sm->Lw->ja; - id = sm->Lwd->ia; jd = sm->Lwd->ja; - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - - if (!(sm->Lw) || !(sm->Lwd)) { - StressMajorizationSmoother_delete(sm); - return NULL; - } - - iw = sm->Lw->ia; jw = sm->Lw->ja; - id = sm->Lwd->ia; jd = sm->Lwd->ja; - w = (real*) sm->Lw->a; d = (real*) sm->Lwd->a; - iw[0] = id[0] = 0; - - nz = 0; - for (i = 0; i < m; i++){ - diag_d = diag_w = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - k = ja[j]; - if (k != i){ - dist = MAX(ABS(a[j]), epsilon); - jd[nz] = jw[nz] = k; - w[nz] = -1/(dist*dist); - w[nz] = -1.; - d[nz] = w[nz]*dist; - diag_w += w[nz]; - diag_d += d[nz]; - nz++; - } - } - jd[nz] = jw[nz] = i; - w[nz] = -diag_w; - d[nz] = -diag_d; - nz++; - - iw[i+1] = nz; - id[i+1] = nz; - - } - - sm->Lw->nz = nz; - sm->Lwd->nz = nz; - - return sm; -} - - -void UniformStressSmoother_delete(UniformStressSmoother sm){ - - StressMajorizationSmoother_delete(sm); - -} - -real UniformStressSmoother_smooth(UniformStressSmoother sm, int dim, real *x, int maxit_sm) { - - return StressMajorizationSmoother_smooth(sm, dim, x, maxit_sm, 0.001); - -} - -SparseMatrix get_distance_matrix(SparseMatrix A, real scaling){ - /* get a distance matrix from a graph, at the moment we just symmetrize the matrix. At the moment if the matrix is not real, - we just assume distance of 1 among edges. Then we apply scaling to the entire matrix */ - SparseMatrix B; - real *val; - int i; - - if (A->type == MATRIX_TYPE_REAL){ - B = SparseMatrix_symmetrize(A, FALSE); - } else { - B = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - val = (real*) B->a; - if (scaling != 1) for (i = 0; i < B->nz; i++) val[i] *= scaling; - return B; -} - -extern void scale_to_box(real xmin, real ymin, real xmax, real ymax, int n, int dim, real *x); - -void uniform_stress(int dim, SparseMatrix A, real *x, int *flag){ - UniformStressSmoother sm; - real lambda0 = 10.1, M = 100, scaling = 1.; - int maxit = 300, samepoint = TRUE, i, k, n = A->m; - SparseMatrix B = NULL; - - *flag = 0; - - /* just set random initial for now */ - for (i = 0; i < dim*n; i++) { - x[i] = M*drand(); - } - - /* make sure x is not all at the same point */ - for (i = 1; i < n; i++){ - for (k = 0; k < dim; k++) { - if (ABS(x[0*dim+k] - x[i*dim+k]) > MACHINEACC){ - samepoint = FALSE; - i = n; - break; - } - } - } - - if (samepoint){ - srand(1); -#ifdef DEBUG_PRINT - fprintf(stderr,"input coordinates to uniform_stress are the same, use random coordinates as initial input"); -#endif - for (i = 0; i < dim*n; i++) x[i] = M*drand(); - } - - B = get_distance_matrix(A, scaling); - assert(SparseMatrix_is_symmetric(B, FALSE)); - - sm = UniformStressSmoother_new(dim, B, x, 1000000*lambda0, M, flag); - UniformStressSmoother_smooth(sm, dim, x, maxit); - UniformStressSmoother_delete(sm); - - sm = UniformStressSmoother_new(dim, B, x, 10000*lambda0, M, flag); - UniformStressSmoother_smooth(sm, dim, x, maxit); - UniformStressSmoother_delete(sm); - - sm = UniformStressSmoother_new(dim, B, x, 100*lambda0, M, flag); - UniformStressSmoother_smooth(sm, dim, x, maxit); - UniformStressSmoother_delete(sm); - - sm = UniformStressSmoother_new(dim, B, x, lambda0, M, flag); - UniformStressSmoother_smooth(sm, dim, x, maxit); - UniformStressSmoother_delete(sm); - - scale_to_box(0,0,7*70,10*70,A->m,dim,x);; - - SparseMatrix_delete(B); - -} diff --git a/internal/ccall/sfdpgen/uniform_stress.h b/internal/ccall/sfdpgen/uniform_stress.h deleted file mode 100644 index 2f41299..0000000 --- a/internal/ccall/sfdpgen/uniform_stress.h +++ /dev/null @@ -1,29 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef UNIFORMSTRESS_H -#define UNIFORMSTRESS_H - -#include - -typedef StressMajorizationSmoother UniformStressSmoother; - -#define UniformStressSmoother_struct StressMajorizationSmoother_struct - -void UniformStressSmoother_delete(UniformStressSmoother sm); - -UniformStressSmoother UniformStressSmoother_new(int dim, SparseMatrix A, real *x, real alpha, real M, int *flag); - -void uniform_stress(int dim, SparseMatrix A, real *x, int *flag); - -#endif diff --git a/internal/ccall/sfio/README b/internal/ccall/sfio/README deleted file mode 100644 index 3860ad9..0000000 --- a/internal/ccall/sfio/README +++ /dev/null @@ -1,63 +0,0 @@ -DIRECTORY HIERARCHY: - -This directory hierarchy has the source of Sfio, the Safe/Fast I/O library. - -. : source code for Sfio. -./features: source code for generating configuration parameters. -./Sfio_f: function versions of sfio macros. -./Stdio_s: the source level compatibility package. -./Stdio_b: the binary level compatibility package. -./Sfio_dc: a collection of functions to create useful disciplines. -./Sfio_t: a set of regression tests for the Sfio library. -./Stdio_t: a set of regression tests for certain Stdio behaviors and - for the compatibility packages. - -SOFTWARE CONSTRUCTION: - -The build procedure is based on the iffe language for automatic -configuration. An iffe interpreter and its manual pages are included in -this code distribution. See the files in ./features for examples of iffe -probes to generate configuration parameters. - -Two sets of libraries will be built: - libsfio.a and libstdio.a: for uni-threaded applications, and - libsfio-mt.a and libstdio-mt.a: for multi-threaded applications. - -Depending on the local platform, an application using the multi-threaded -libraries may need to specify a thread library for linkage. For example, -below are the known requirements for a few popular platforms: - - Irix, Linux, Solaris systems: -lpthread - Hpux: -lcma - BSD: none - -SFIO DISCIPLINES: - -IO disciplines allow applications to extend stream data processing. -See the Sfio manual pages for detail on creating discipline structures -and inserting them into streams. The directory Sfio_dc contains a number -of useful disciplines, including one to uncompress a file compressed -by the Unix compress program and one to make reading DOS text files more -comfortable by translating \r\n to \n. - -Disciplines are reusable code, please contribute any interesting disciplines -that you come up with. This is best done by sending such code to me at -the address below. Sharing reusable code means that the name space must -be managed. Therefore, I recommend that each discipline package provides -the following public interface: - -Sfdisc_t* sfdcXXX(Sfio_t* f, other arguments): - Create a discipline of the type XXX and insert it into the - stream f. For example, the below call create a discipline that - make the stream "f" act as if it's the union of the "n" streams - given in "array". - sfdcunion(Sfio_t* f, Sfio_t** array, int n); - -CORRESPONDENCE: -Comments, etc. should be sent to: - - Phong Vo - AT&T Labs - Research - 180 Park Avenue - Florham Park, NJ 07932 - e-mail: kpv@research.att.com diff --git a/internal/ccall/sfio/Sfio_f/_sfclrerr.c b/internal/ccall/sfio/Sfio_f/_sfclrerr.c deleted file mode 100644 index 25ce5e0..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfclrerr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfclrerr - -int sfclrerr(reg Sfio_t * f) -{ - return __sf_clrerr(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfdlen.c b/internal/ccall/sfio/Sfio_f/_sfdlen.c deleted file mode 100644 index ab71d58..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfdlen.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfdlen - -int sfdlen(reg Sfdouble_t v) -{ - return __sf_dlen(v); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfeof.c b/internal/ccall/sfio/Sfio_f/_sfeof.c deleted file mode 100644 index 42d976f..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfeof.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfeof - -int sfeof(reg Sfio_t * f) -{ - return __sf_eof(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sferror.c b/internal/ccall/sfio/Sfio_f/_sferror.c deleted file mode 100644 index 499a687..0000000 --- a/internal/ccall/sfio/Sfio_f/_sferror.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sferror - -int sferror(reg Sfio_t * f) -{ - return __sf_error(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sffileno.c b/internal/ccall/sfio/Sfio_f/_sffileno.c deleted file mode 100644 index 4e87495..0000000 --- a/internal/ccall/sfio/Sfio_f/_sffileno.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sffileno - -int sffileno(reg Sfio_t * f) -{ - return __sf_fileno(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfgetc.c b/internal/ccall/sfio/Sfio_f/_sfgetc.c deleted file mode 100644 index 229c78d..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfgetc.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfgetc - -int sfgetc(reg Sfio_t * f) -{ - return __sf_getc(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfllen.c b/internal/ccall/sfio/Sfio_f/_sfllen.c deleted file mode 100644 index 954b703..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfllen.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfllen - -int sfllen(reg Sflong_t v) -{ - return __sf_llen(v); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfputc.c b/internal/ccall/sfio/Sfio_f/_sfputc.c deleted file mode 100644 index 53e5d83..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfputc.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfputc - -int sfputc(reg Sfio_t * f, reg int c) -{ - return __sf_putc(f, c); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfputd.c b/internal/ccall/sfio/Sfio_f/_sfputd.c deleted file mode 100644 index 1017c43..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfputd.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfputd - -int sfputd(reg Sfio_t * f, Sfdouble_t d) -{ - return __sf_putd(f, d); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfputl.c b/internal/ccall/sfio/Sfio_f/_sfputl.c deleted file mode 100644 index 7bd08d2..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfputl.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfputl - -int sfputl(reg Sfio_t * f, Sflong_t l) -{ - return __sf_putl(f, l); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfputm.c b/internal/ccall/sfio/Sfio_f/_sfputm.c deleted file mode 100644 index 2107b39..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfputm.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfputm - -int sfputm(reg Sfio_t * f, Sfulong_t u, Sfulong_t m) -{ - return __sf_putm(f, u, m); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfputu.c b/internal/ccall/sfio/Sfio_f/_sfputu.c deleted file mode 100644 index ce65aee..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfputu.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfputu - -int sfputu(reg Sfio_t * f, Sfulong_t u) -{ - return __sf_putu(f, u); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfslen.c b/internal/ccall/sfio/Sfio_f/_sfslen.c deleted file mode 100644 index b076d52..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfslen.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfslen - -ssize_t sfslen(void) -{ - return __sf_slen(); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfstacked.c b/internal/ccall/sfio/Sfio_f/_sfstacked.c deleted file mode 100644 index 440a333..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfstacked.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfstacked - -int sfstacked(reg Sfio_t * f) -{ - return __sf_stacked(f); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfulen.c b/internal/ccall/sfio/Sfio_f/_sfulen.c deleted file mode 100644 index 1c0afdc..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfulen.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfulen - -int sfulen(reg Sfulong_t v) -{ - return __sf_ulen(v); -} diff --git a/internal/ccall/sfio/Sfio_f/_sfvalue.c b/internal/ccall/sfio/Sfio_f/_sfvalue.c deleted file mode 100644 index e172ed9..0000000 --- a/internal/ccall/sfio/Sfio_f/_sfvalue.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#undef sfvalue - -ssize_t sfvalue(reg Sfio_t * f) -{ - return __sf_value(f); -} diff --git a/internal/ccall/sfio/Sfio_f/dummy.go b/internal/ccall/sfio/Sfio_f/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/sfio/Sfio_f/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/sfio/dummy.go b/internal/ccall/sfio/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/sfio/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/sfio/sfclose.c b/internal/ccall/sfio/sfclose.c deleted file mode 100644 index fdc22ec..0000000 --- a/internal/ccall/sfio/sfclose.c +++ /dev/null @@ -1,155 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Close a stream. A file stream is synced before closing. -** -** Written by Kiem-Phong Vo -*/ - -int sfclose(reg Sfio_t * f) -{ - reg int local, ex, rv; - void *data = NIL(void *); - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - - if (!(f->mode & SF_INIT) && - SFMODE(f, local) != (f->mode & SF_RDWR) && - SFMODE(f, local) != (f->mode & (SF_READ | SF_SYNCED)) && - _sfmode(f, 0, local) < 0) - SFMTXRETURN(f, -1); - - /* closing a stack of streams */ - while (f->push) { - reg Sfio_t *pop; - - if (!(pop = (*_Sfstack) (f, NIL(Sfio_t *)))) - SFMTXRETURN(f, -1); - if (sfclose(pop) < 0) { - (*_Sfstack) (f, pop); - SFMTXRETURN(f, -1); - } - } - - rv = 0; - if (f->disc == _Sfudisc) /* closing the ungetc stream */ - f->disc = NIL(Sfdisc_t *); - else if (f->file >= 0) { /* sync file pointer */ - f->bits |= SF_ENDING; - rv = sfsync(f); - } - - SFLOCK(f, 0); - - /* raise discipline exceptions */ - if (f->disc - && (ex = - SFRAISE(f, local ? SF_NEW : SF_CLOSING, NIL(void *))) != 0) - SFMTXRETURN(f, ex); - - if (!local && f->pool) { /* remove from pool */ - if (f->pool == &_Sfpool) { - reg int n; - - POOLMTXLOCK(&_Sfpool); - for (n = 0; n < _Sfpool.n_sf; ++n) { - if (_Sfpool.sf[n] != f) - continue; - /* found it */ - _Sfpool.n_sf -= 1; - for (; n < _Sfpool.n_sf; ++n) - _Sfpool.sf[n] = _Sfpool.sf[n + 1]; - break; - } - POOLMTXUNLOCK(&_Sfpool); - } else { - f->mode &= ~SF_LOCK; - /**/ ASSERT(_Sfpmove); - if ((*_Sfpmove) (f, -1) < 0) { - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - } - f->mode |= SF_LOCK; - } - f->pool = NIL(Sfpool_t *); - } - - if (f->data && (!local || (f->flags & SF_STRING) || (f->bits & SF_MMAP))) { /* free buffer */ -#ifdef MAP_TYPE - if (f->bits & SF_MMAP) - SFMUNMAP(f, f->data, f->endb - f->data); - else -#endif - if (f->flags & SF_MALLOC) - data = (void *) f->data; - - f->data = NIL(uchar *); - f->size = -1; - } - - /* zap the file descriptor */ - if (_Sfnotify) - (*_Sfnotify) (f, SF_CLOSING, f->file); - if (f->file >= 0 && !(f->flags & SF_STRING)) - CLOSE(f->file); - f->file = -1; - - SFKILL(f); - f->flags &= SF_STATIC; - f->here = 0; - f->extent = -1; - f->endb = f->endr = f->endw = f->next = f->data; - - /* zap any associated auxiliary buffer */ - if (f->rsrv) { - free(f->rsrv); - f->rsrv = NIL(Sfrsrv_t *); - } - - /* delete any associated sfpopen-data */ - if (f->proc) - rv = _sfpclose(f); - - /* destroy the mutex */ - if (f->mutex) { - vtmtxclrlock(f->mutex); - if (f != sfstdin && f != sfstdout && f != sfstderr) { - vtmtxclose(f->mutex); - f->mutex = NIL(Vtmutex_t *); - } - } - - if (!local) { - if (f->disc && (ex = SFRAISE(f, SF_FINAL, NIL(void *))) != 0) { - rv = ex; - goto done; - } - - if (!(f->flags & SF_STATIC)) - free(f); - else { - f->disc = NIL(Sfdisc_t *); - f->stdio = NIL(void *); - f->mode = SF_AVAIL; - } - } - - done: - if (data) - free(data); - return rv; -} diff --git a/internal/ccall/sfio/sfclrlock.c b/internal/ccall/sfio/sfclrlock.c deleted file mode 100644 index 047db9e..0000000 --- a/internal/ccall/sfio/sfclrlock.c +++ /dev/null @@ -1,50 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Function to clear a locked stream. -** This is useful for programs that longjmp from the mid of an sfio function. -** There is no guarantee on data integrity in such a case. -** -** Written by Kiem-Phong Vo -*/ -int sfclrlock(reg Sfio_t * f) -{ - int rv; - - /* already closed */ - if (f && (f->mode & SF_AVAIL)) - return 0; - - SFMTXSTART(f, 0); - - /* clear error bits */ - f->flags &= ~(SF_ERROR | SF_EOF); - - /* clear peek locks */ - if (f->mode & SF_PKRD) { - f->here -= f->endb - f->next; - f->endb = f->next; - } - - SFCLRBITS(f); - - /* throw away all lock bits except for stacking state SF_PUSH */ - f->mode &= - (SF_RDWR | SF_INIT | SF_POOL | SF_PUSH | SF_SYNCED | SF_STDIO); - - rv = (f->mode & SF_PUSH) ? 0 : (f->flags & SF_FLAGS); - - SFMTXRETURN(f, rv); -} diff --git a/internal/ccall/sfio/sfcvt.c b/internal/ccall/sfio/sfcvt.c deleted file mode 100644 index b9020ee..0000000 --- a/internal/ccall/sfio/sfcvt.c +++ /dev/null @@ -1,218 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Convert a floating point value to ASCII -** -** Written by Kiem-Phong Vo -*/ - -static char *Inf = "Inf", *Zero = "0"; -#define SF_INTPART (SF_IDIGITS/2) -#define SF_INFINITE ((_Sfi = 3), Inf) -#define SF_ZERO ((_Sfi = 1), Zero) - -/** - * @param dv value to convert - * @param n_digit number of digits wanted - * @param decpt return decimal point - * @param sign return sign - * @param format conversion format - */ -char *_sfcvt(void * dv, int n_digit, int *decpt, int *sign, int format) -{ - reg char *sp; - reg long n, v; - reg char *ep, *buf, *endsp; - static char *Buf; - - /* set up local buffer */ - if (!Buf && !(Buf = (char *) malloc(SF_MAXDIGITS))) - return SF_INFINITE; - - *sign = *decpt = 0; - -#if !defined(_ast_fltmax_double) - if (format & SFFMT_LDOUBLE) { - Sfdouble_t dval = *((Sfdouble_t *) dv); - - if (dval == 0.) - return SF_ZERO; - else if ((*sign = (dval < 0.))) /* assignment = */ - dval = -dval; - - n = 0; - if (dval >= (Sfdouble_t) SF_MAXLONG) { /* scale to a small enough number to fit an int */ - v = SF_MAXEXP10 - 1; - do { - if (dval < _Sfpos10[v]) - v -= 1; - else { - dval *= _Sfneg10[v]; - if ((n += (1 << v)) >= SF_IDIGITS) - return SF_INFINITE; - } - } while (dval >= (Sfdouble_t) SF_MAXLONG); - } - *decpt = (int) n; - - buf = sp = Buf + SF_INTPART; - if ((v = (int) dval) != 0) { /* translate the integer part */ - dval -= (Sfdouble_t) v; - - sfucvt(v, sp, n, ep, long, ulong); - - n = buf - sp; - if ((*decpt += (int) n) >= SF_IDIGITS) - return SF_INFINITE; - buf = sp; - sp = Buf + SF_INTPART; - } else - n = 0; - - /* remaining number of digits to compute; add 1 for later rounding */ - n = (((format & SFFMT_EFORMAT) - || *decpt <= 0) ? 1 : *decpt + 1) - n; - if (n_digit > 0) - n += n_digit; - - if ((ep = (sp + n)) > (endsp = Buf + (SF_MAXDIGITS - 2))) - ep = endsp; - if (sp > ep) - sp = ep; - else { - if ((format & SFFMT_EFORMAT) && *decpt == 0 && dval > 0.) { - Sfdouble_t d; - while ((int) (d = dval * 10.) == 0) { - dval = d; - *decpt -= 1; - } - } - - while (sp < ep) { /* generate fractional digits */ - if (dval <= 0.) { /* fill with 0's */ - do { - *sp++ = '0'; - } while (sp < ep); - goto done; - } else if ((n = (long) (dval *= 10.)) < 10) { - *sp++ = '0' + n; - dval -= n; - } else { /* n == 10 */ - do { - *sp++ = '9'; - } while (sp < ep); - } - } - } - } else -#endif - { - double dval = *((double *) dv); - - if (dval == 0.) - return SF_ZERO; - else if ((*sign = (dval < 0.))) /* assignment = */ - dval = -dval; - - n = 0; - if (dval >= (double) SF_MAXLONG) { /* scale to a small enough number to fit an int */ - v = SF_MAXEXP10 - 1; - do { - if (dval < _Sfpos10[v]) - v -= 1; - else { - dval *= _Sfneg10[v]; - if ((n += (1 << v)) >= SF_IDIGITS) - return SF_INFINITE; - } - } while (dval >= (double) SF_MAXLONG); - } - *decpt = (int) n; - - buf = sp = Buf + SF_INTPART; - if ((v = (int) dval) != 0) { /* translate the integer part */ - dval -= (double) v; - - sfucvt(v, sp, n, ep, long, ulong); - - n = buf - sp; - if ((*decpt += (int) n) >= SF_IDIGITS) - return SF_INFINITE; - buf = sp; - sp = Buf + SF_INTPART; - } else - n = 0; - - /* remaining number of digits to compute; add 1 for later rounding */ - n = (((format & SFFMT_EFORMAT) - || *decpt <= 0) ? 1 : *decpt + 1) - n; - if (n_digit > 0) - n += n_digit; - - if ((ep = (sp + n)) > (endsp = Buf + (SF_MAXDIGITS - 2))) - ep = endsp; - if (sp > ep) - sp = ep; - else { - if ((format & SFFMT_EFORMAT) && *decpt == 0 && dval > 0.) { - reg double d; - while ((int) (d = dval * 10.) == 0) { - dval = d; - *decpt -= 1; - } - } - - while (sp < ep) { /* generate fractional digits */ - if (dval <= 0.) { /* fill with 0's */ - do { - *sp++ = '0'; - } while (sp < ep); - goto done; - } else if ((n = (int) (dval *= 10.)) < 10) { - *sp++ = (char) ('0' + n); - dval -= n; - } else { /* n == 10 */ - do { - *sp++ = '9'; - } while (sp < ep); - } - } - } - } - - if (ep <= buf) - ep = buf + 1; - else if (ep < endsp) { /* round the last digit */ - *--sp += 5; - while (*sp > '9') { - *sp = '0'; - if (sp > buf) - *--sp += 1; - else { /* next power of 10 */ - *sp = '1'; - *decpt += 1; - if (!(format & SFFMT_EFORMAT)) { /* add one more 0 for %f precision */ - ep[-1] = '0'; - ep += 1; - } - } - } - } - - done: - *--ep = '\0'; - _Sfi = ep - buf; - return buf; -} diff --git a/internal/ccall/sfio/sfdisc.c b/internal/ccall/sfio/sfdisc.c deleted file mode 100644 index e1492e6..0000000 --- a/internal/ccall/sfio/sfdisc.c +++ /dev/null @@ -1,143 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Set a new discipline for a stream. -** -** Written by Kiem-Phong Vo -*/ - -Sfdisc_t *sfdisc(reg Sfio_t * f, reg Sfdisc_t * disc) -{ - reg Sfdisc_t *d, *rdisc; - reg Sfread_f oreadf; - reg Sfwrite_f owritef; - reg Sfseek_f oseekf; - ssize_t n; - - SFMTXSTART(f, NIL(Sfdisc_t *)); - - if ((f->flags & SF_READ) && f->proc && (f->mode & SF_WRITE)) { /* make sure in read mode to check for read-ahead data */ - if (_sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, NIL(Sfdisc_t *)); - } else if ((f->mode & SF_RDWR) != f->mode && _sfmode(f, 0, 0) < 0) - SFMTXRETURN(f, NIL(Sfdisc_t *)); - - SFLOCK(f, 0); - rdisc = NIL(Sfdisc_t *); - - /* synchronize before switching to a new discipline */ - if (!(f->flags & SF_STRING)) { - if (((f->mode & SF_WRITE) && f->next > f->data) || - (f->mode & SF_READ) || f->disc == _Sfudisc) - (void) SFSYNC(f); - - if (((f->mode & SF_WRITE) && (n = f->next - f->data) > 0) || - ((f->mode & SF_READ) && f->extent < 0 - && (n = f->endb - f->next) > 0)) { - reg Sfexcept_f exceptf; - reg int rv = 0; - - exceptf = disc ? disc->exceptf : - f->disc ? f->disc->exceptf : NIL(Sfexcept_f); - - /* check with application for course of action */ - if (exceptf) { - SFOPEN(f, 0); - rv = (*exceptf) (f, SF_DBUFFER, &n, disc ? disc : f->disc); - SFLOCK(f, 0); - } - - /* can't switch discipline at this time */ - if (rv <= 0) - goto done; - } - } - - /* save old readf, writef, and seekf to see if stream need reinit */ -#define GETDISCF(func,iof,type) \ - { for(d = f->disc; d && !d->iof; d = d->disc) ; \ - func = d ? d->iof : NIL(type); \ - } - GETDISCF(oreadf, readf, Sfread_f); - GETDISCF(owritef, writef, Sfwrite_f); - GETDISCF(oseekf, seekf, Sfseek_f); - - if (disc == SF_POPDISC) { /* popping, warn the being popped discipline */ - if (!(d = f->disc)) - goto done; - disc = d->disc; - if (d->exceptf) { - SFOPEN(f, 0); - if ((*(d->exceptf)) (f, SF_DPOP, (void *) disc, d) < 0) - goto done; - SFLOCK(f, 0); - } - f->disc = disc; - rdisc = d; - } else { /* pushing, warn being pushed discipline */ - do { /* loop to handle the case where d may pop itself */ - d = f->disc; - if (d && d->exceptf) { - SFOPEN(f, 0); - if ((*(d->exceptf)) (f, SF_DPUSH, (void *) disc, d) < 0) - goto done; - SFLOCK(f, 0); - } - } while (d != f->disc); - - /* make sure we are not creating an infinite loop */ - for (; d; d = d->disc) - if (d == disc) - goto done; - - /* set new disc */ - disc->disc = f->disc; - f->disc = disc; - rdisc = disc; - } - - if (!(f->flags & SF_STRING)) { /* this stream may have to be reinitialized */ - reg int reinit = 0; -#define DISCF(dst,iof,type) (dst ? dst->iof : NIL(type)) -#define REINIT(oiof,iof,type) \ - if(!reinit) \ - { for(d = f->disc; d && !d->iof; d = d->disc) ; \ - if(DISCF(d,iof,type) != oiof) \ - reinit = 1; \ - } - - REINIT(oreadf, readf, Sfread_f); - REINIT(owritef, writef, Sfwrite_f); - REINIT(oseekf, seekf, Sfseek_f); - - if (reinit) { - SETLOCAL(f); - f->bits &= ~SF_NULL; /* turn off /dev/null handling */ - if ((f->bits & SF_MMAP) || (f->mode & SF_INIT)) - sfsetbuf(f, NIL(void *), (size_t) SF_UNBOUND); - else if (f->data == f->tiny) - sfsetbuf(f, NIL(void *), 0); - else { - int flags = f->flags; - sfsetbuf(f, (void *) f->data, f->size); - f->flags |= (flags & SF_MALLOC); - } - } - } - - done: - SFOPEN(f, 0); - SFMTXRETURN(f, rdisc); -} diff --git a/internal/ccall/sfio/sfdlen.c b/internal/ccall/sfio/sfdlen.c deleted file mode 100644 index 2b4f8b0..0000000 --- a/internal/ccall/sfio/sfdlen.c +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Return the length of a double value if coded in a portable format -** -** Written by Kiem-Phong Vo -*/ - -int _sfdlen(Sfdouble_t v) -{ -#define N_ARRAY (16*sizeof(Sfdouble_t)) - reg int n, w; - Sfdouble_t x; - int exp; - - if (v < 0) - v = -v; - - /* make the magnitude of v < 1 */ - if (v != 0.) - v = frexp(v, &exp); - else - exp = 0; - - for (w = 1; w <= N_ARRAY; ++w) { /* get 2^SF_PRECIS precision at a time */ - n = (int) (x = ldexp(v, SF_PRECIS)); - v = x - n; - if (v <= 0.) - break; - } - - return 1 + sfulen(exp) + w; -} diff --git a/internal/ccall/sfio/sfexcept.c b/internal/ccall/sfio/sfexcept.c deleted file mode 100644 index bd8e0d1..0000000 --- a/internal/ccall/sfio/sfexcept.c +++ /dev/null @@ -1,118 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Function to handle io exceptions. -** Written by Kiem-Phong Vo -*/ - -/** - * @param f stream where the exception happened - * @param type type that was performed - * @param io return value that indicated exception - * @param disc discipline in use - */ -int _sfexcept(Sfio_t * f, int type, ssize_t io, Sfdisc_t * disc) -{ - reg int ev, local, lock; - reg ssize_t size; - reg uchar *data; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - lock = f->mode & SF_LOCK; - - if (local && io <= 0) - f->flags |= io < 0 ? SF_ERROR : SF_EOF; - - if (disc && disc->exceptf) { /* let the stream be generally accessible for this duration */ - if (local && lock) - SFOPEN(f, 0); - - /* so that exception handler knows what we are asking for */ - _Sfi = f->val = io; - ev = (*(disc->exceptf)) (f, type, &io, disc); - - /* relock if necessary */ - if (local && lock) - SFLOCK(f, 0); - - if (io > 0 && !(f->flags & SF_STRING)) - SFMTXRETURN(f, ev); - if (ev < 0) - SFMTXRETURN(f, SF_EDONE); - if (ev > 0) - SFMTXRETURN(f, SF_EDISC); - } - - if (f->flags & SF_STRING) { - if (type == SF_READ) - goto chk_stack; - else if (type != SF_WRITE && type != SF_SEEK) - SFMTXRETURN(f, SF_EDONE); - if (local && io >= 0) { - if (f->size >= 0 && !(f->flags & SF_MALLOC)) - goto chk_stack; - /* extend buffer */ - if ((size = f->size) < 0) - size = 0; - if ((io -= size) <= 0) - io = SF_GRAIN; - size = ((size + io + SF_GRAIN - 1) / SF_GRAIN) * SF_GRAIN; - if (f->size > 0) - data = (uchar *) realloc((char *) f->data, size); - else - data = (uchar *) malloc(size); - if (!data) - goto chk_stack; - f->endb = data + size; - f->next = data + (f->next - f->data); - f->endr = f->endw = f->data = data; - f->size = size; - } - SFMTXRETURN(f, SF_EDISC); - } - - if (errno == EINTR) { - if (_Sfexiting || (f->bits & SF_ENDING)) /* stop being a hero */ - SFMTXRETURN(f, SF_EDONE); - - /* a normal interrupt, we can continue */ - errno = 0; - f->flags &= ~(SF_EOF | SF_ERROR); - SFMTXRETURN(f, SF_ECONT); - } - - chk_stack: - if (local && f->push && ((type == SF_READ && f->next >= f->endb) || (type == SF_WRITE && f->next <= f->data))) { /* pop the stack */ - reg Sfio_t *pf; - - if (lock) - SFOPEN(f, 0); - - /* pop and close */ - pf = (*_Sfstack) (f, NIL(Sfio_t *)); - if ((ev = sfclose(pf)) < 0) /* can't close, restack */ - (*_Sfstack) (f, pf); - - if (lock) - SFLOCK(f, 0); - - ev = ev < 0 ? SF_EDONE : SF_ESTACK; - } else - ev = SF_EDONE; - - SFMTXRETURN(f, ev); -} diff --git a/internal/ccall/sfio/sfexit.c b/internal/ccall/sfio/sfexit.c deleted file mode 100644 index 33cc463..0000000 --- a/internal/ccall/sfio/sfexit.c +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* -** Any required functions for process exiting. -** Written by Kiem-Phong Vo -*/ - -#if _lib_waitpid -int _Sf_no_need_for_waitpid; -#else - -/* we need to supply our own waitpid here so that sfpclose() can wait -** for the right process to die. -*/ -typedef struct _wait_ { - int pid; - int status; - struct _wait_ *next; -} Waitpid_t; - -static Waitpid_t *Wait; - -#ifndef WIN32 -waitpid(int pid, int *status, int options) -{ - int id, ps; - Waitpid_t *w; - Waitpid_t *last; - - /* we don't know options */ - if (options != 0) - return -1; - - vtmtxlock(_Sfmutex); - - for (w = Wait, last = NIL(Waitpid_t *); w; last = w, w = w->next) { - if (pid > 0 && pid != w->pid) - continue; - - if (last) - last->next = w->next; - else - Wait = w->next; - if (status) - *status = w->status; - pid = w->pid; - free(w); - - vtmtxunlock(_Sfmutex); - return pid; - } - - while ((id = wait(&ps)) >= 0) { - if (pid <= 0 || id == pid) { - if (status) - *status = ps; - - vtmtxunlock(_Sfmutex); - return pid; - } - - if (!(w = (Waitpid_t *) malloc(sizeof(Waitpid_t)))) - continue; - - w->pid = id; - w->status = ps; - w->next = Wait; - Wait = w; - } - - vtmtxunlock(_Sfmutex); - return -1; -} - -#endif /*_lib_waitpid*/ - -#endif diff --git a/internal/ccall/sfio/sfextern.c b/internal/ccall/sfio/sfextern.c deleted file mode 100644 index 20b096a..0000000 --- a/internal/ccall/sfio/sfextern.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* External variables and functions used only by Sfio -** Written by Kiem-Phong Vo -*/ - -/* code to initialize mutexes */ -static Vtmutex_t Sfmutex; -static Vtonce_t Sfonce = VTONCE_INITDATA; -static void _sfoncef(void) -{ - vtmtxopen(_Sfmutex, VT_INIT); - vtmtxopen(&_Sfpool.mutex, VT_INIT); - vtmtxopen(sfstdin->mutex, VT_INIT); - vtmtxopen(sfstdout->mutex, VT_INIT); - vtmtxopen(sfstderr->mutex, VT_INIT); - _Sfdone = 1; -} - -/* global variables used internally to the package */ -Sfextern_t _Sfextern = { 0, /* _Sfpage */ - {NIL(Sfpool_t *), 0, 0, 0, NIL(Sfio_t **)}, /* _Sfpool */ - NIL(int (*)(Sfio_t *, int)), /* _Sfpmove */ - NIL(Sfio_t * (*)(Sfio_t *, Sfio_t *)), /* _Sfstack */ - NIL(void (*)(Sfio_t *, int, int)), /* _Sfnotify */ - NIL(int (*)(Sfio_t *)), /* _Sfstdsync */ - {NIL(Sfread_f), /* _Sfudisc */ - NIL(Sfwrite_f), - NIL(Sfseek_f), - NIL(Sfexcept_f), - NIL(Sfdisc_t *) - }, - NIL(void (*)(void)), /* _Sfcleanup */ - 0, /* _Sfexiting */ - 0, /* _Sfdone */ - &Sfonce, /* _Sfonce */ - _sfoncef, /* _Sfoncef */ - &Sfmutex /* _Sfmutex */ -}; - -/* accessible to application code for a few fast macro functions */ -ssize_t _Sfi = -1; - -#if vt_threaded -static Vtmutex_t _Sfmtxin, _Sfmtxout, _Sfmtxerr; -#define SFMTXIN (&_Sfmtxin) -#define SFMTXOUT (&_Sfmtxout) -#define SFMTXERR (&_Sfmtxerr) -#else -#define SFMTXIN (0) -#define SFMTXOUT (0) -#define SFMTXERR (0) -#endif - -Sfio_t _Sfstdin = SFNEW(NIL(char *), -1, 0, - (SF_READ | SF_STATIC | SF_MTSAFE), NIL(Sfdisc_t *), - SFMTXIN); -Sfio_t _Sfstdout = SFNEW(NIL(char *), -1, 1, - (SF_WRITE | SF_STATIC | SF_MTSAFE), - NIL(Sfdisc_t *), SFMTXOUT); -Sfio_t _Sfstderr = SFNEW(NIL(char *), -1, 2, - (SF_WRITE | SF_STATIC | SF_MTSAFE), - NIL(Sfdisc_t *), SFMTXERR); - -Sfio_t *sfstdin = &_Sfstdin; -Sfio_t *sfstdout = &_Sfstdout; -Sfio_t *sfstderr = &_Sfstderr; - -extern ssize_t _Sfi; -extern Sfio_t _Sfstdin; -extern Sfio_t _Sfstdout; -extern Sfio_t _Sfstderr; -extern Sfio_t *sfstdin; -extern Sfio_t *sfstdout; -extern Sfio_t *sfstderr; diff --git a/internal/ccall/sfio/sffcvt.c b/internal/ccall/sfio/sffcvt.c deleted file mode 100644 index 1e035a2..0000000 --- a/internal/ccall/sfio/sffcvt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/** - * @param dval value to convert - * @param n_digit number of digits wanted - * @param decpt to return decimal point - * @param sign to return sign - */ -char *sffcvt(double dval, int n_digit, int *decpt, int *sign) -{ - return _sfcvt(&dval, n_digit, decpt, sign, 0); -} diff --git a/internal/ccall/sfio/sffilbuf.c b/internal/ccall/sfio/sffilbuf.c deleted file mode 100644 index e44c668..0000000 --- a/internal/ccall/sfio/sffilbuf.c +++ /dev/null @@ -1,94 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Fill the buffer of a stream with data. -** If n < 0, sffilbuf() attempts to fill the buffer if it's empty. -** If n == 0, if the buffer is not empty, just return the first byte; -** otherwise fill the buffer and return the first byte. -** If n > 0, even if the buffer is not empty, try a read to get as -** close to n as possible. n is reset to -1 if stack pops. -** -** Written by Kiem-Phong Vo -*/ - -/** - * @param f fill the read buffer of this stream - * @param n see above - */ -int _sffilbuf(Sfio_t * f, reg int n) -{ - reg ssize_t r; - reg int first, local, rcrv, rc, justseek; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - - /* any peek data must be preserved across stacked streams */ - rcrv = f->mode & (SF_RC | SF_RV | SF_LOCK); - rc = f->getr; - - justseek = f->bits & SF_JUSTSEEK; - f->bits &= ~SF_JUSTSEEK; - - for (first = 1;; first = 0, (f->mode &= ~SF_LOCK)) { /* check mode */ - if (SFMODE(f, local) != SF_READ && _sfmode(f, SF_READ, local) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, local); - - /* current extent of available data */ - if ((r = f->endb - f->next) > 0) { /* on first iteration, n is amount beyond current buffer; - afterward, n is the exact amount requested */ - if ((first && n <= 0) || (!first && n <= r) || - (f->flags & SF_STRING)) - break; - - /* try shifting left to make room for new data */ - if (!(f->bits & SF_MMAP) && f->next > f->data && - n > (f->size - (f->endb - f->data))) { - memcpy(f->data, f->next, r); - f->next = f->data; - f->endb = f->data + r; - } - } else if (!(f->flags & SF_STRING) && !(f->bits & SF_MMAP)) - f->next = f->endb = f->endr = f->data; - - if (f->bits & SF_MMAP) - r = n > 0 ? n : f->size; - else if (!(f->flags & SF_STRING)) { - r = f->size - (f->endb - f->data); /* available buffer */ - if (n > 0) { - if (r > n && f->extent < 0 && (f->flags & SF_SHARE)) - r = n; /* read only as much as requested */ - else if (justseek && n <= f->iosz && f->iosz <= f->size) - r = f->iosz; /* limit buffer filling */ - } - } - - /* SFRD takes care of discipline read and stack popping */ - f->mode |= rcrv; - f->getr = rc; - if ((r = SFRD(f, f->endb, r, f->disc)) >= 0) { - r = f->endb - f->next; - break; - } - } - - SFOPEN(f, local); - - rcrv = (n == 0) ? (r > 0 ? (int) (*f->next++) : EOF) : (int) r; - - SFMTXRETURN(f, rcrv); -} diff --git a/internal/ccall/sfio/sfflsbuf.c b/internal/ccall/sfio/sfflsbuf.c deleted file mode 100644 index e54ce8e..0000000 --- a/internal/ccall/sfio/sfflsbuf.c +++ /dev/null @@ -1,100 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write a buffer out to a file descriptor or -** extending a buffer for a SF_STRING stream. -** -** Written by Kiem-Phong Vo -*/ - -/** - * @param f write out the buffered content of this stream - * @param c if c>=0, c is also written out - */ -int _sfflsbuf(reg Sfio_t * f, reg int c) -{ - reg ssize_t n, w; - reg uchar *data; - uchar outc; - reg int local, isall; - int inpc = c; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - - for (;; f->mode &= ~SF_LOCK) { /* check stream mode */ - if (SFMODE(f, local) != SF_WRITE - && _sfmode(f, SF_WRITE, local) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, local); - - /* current data extent */ - n = f->next - (data = f->data); - - if (n == (f->endb - data) && (f->flags & SF_STRING)) { /* extend string stream buffer */ - (void) SFWR(f, data, 1, f->disc); - - /* !(f->flags&SF_STRING) is required because exception - handlers may turn a string stream to a file stream */ - if (f->next < f->endb || !(f->flags & SF_STRING)) - n = f->next - (data = f->data); - else { - SFOPEN(f, local); - SFMTXRETURN(f, -1); - } - } - - if (c >= 0) { /* write into buffer */ - if (n < (f->endb - (data = f->data))) { - *f->next++ = c; - if (c == '\n' && - (f->flags & SF_LINE) && !(f->flags & SF_STRING)) { - c = -1; - n += 1; - } else - break; - } else if (n == 0) { /* unbuffered io */ - outc = (uchar) c; - data = &outc; - c = -1; - n = 1; - } - } - - if (n == 0 || (f->flags & SF_STRING)) - break; - - isall = SFISALL(f, isall); - if ((w = SFWR(f, data, n, f->disc)) > 0) { - if ((n -= w) > 0) /* save unwritten data, then resume */ - memcpy((char *) f->data, (char *) data + w, n); - f->next = f->data + n; - if (c < 0 && (!isall || n == 0)) - break; - } else if (w == 0) { - SFOPEN(f, local); - SFMTXRETURN(f, -1); - } else if (c < 0) - break; - } - - SFOPEN(f, local); - - if (inpc < 0) - inpc = f->endb - f->next; - - SFMTXRETURN(f, inpc); -} diff --git a/internal/ccall/sfio/sfgetd.c b/internal/ccall/sfio/sfgetd.c deleted file mode 100644 index 535b2cb..0000000 --- a/internal/ccall/sfio/sfgetd.c +++ /dev/null @@ -1,64 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read a portably coded double value -** -** Written by Kiem-Phong Vo -*/ - -Sfdouble_t sfgetd(Sfio_t * f) -{ - reg uchar *s, *ends, c; - reg int p, sign, exp; - Sfdouble_t v; - - SFMTXSTART(f, -1.); - - if ((sign = sfgetc(f)) < 0 || (exp = (int) sfgetu(f)) < 0) - SFMTXRETURN(f, -1.); - - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, -1.); - - SFLOCK(f, 0); - - v = 0.; - for (;;) { /* fast read for data */ - if (SFRPEEK(f, s, p) <= 0) { - f->flags |= SF_ERROR; - v = -1.; - goto done; - } - - for (ends = s + p; s < ends;) { - c = *s++; - v += SFUVALUE(c); - v = ldexp(v, -SF_PRECIS); - if (!(c & SF_MORE)) { - f->next = s; - goto done; - } - } - f->next = s; - } - - done: - v = ldexp(v, (sign & 02) ? -exp : exp); - if (sign & 01) - v = -v; - - SFOPEN(f, 0); - SFMTXRETURN(f, v); -} diff --git a/internal/ccall/sfio/sfgetl.c b/internal/ccall/sfio/sfgetl.c deleted file mode 100644 index a85cd9a..0000000 --- a/internal/ccall/sfio/sfgetl.c +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read a long value coded in a portable format. -** -** Written by Kiem-Phong Vo -*/ - -Sflong_t sfgetl(reg Sfio_t * f) -{ - Sflong_t v; - reg uchar *s, *ends, c; - reg int p; - - SFMTXSTART(f, (Sflong_t) (-1)); - - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, (Sflong_t) (-1)); - SFLOCK(f, 0); - - for (v = 0;;) { - if (SFRPEEK(f, s, p) <= 0) { - f->flags |= SF_ERROR; - v = (Sflong_t) (-1); - goto done; - } - for (ends = s + p; s < ends;) { - c = *s++; - if (c & SF_MORE) - v = ((Sfulong_t) v << SF_UBITS) | SFUVALUE(c); - else { /* special translation for this byte */ - v = ((Sfulong_t) v << SF_SBITS) | SFSVALUE(c); - f->next = s; - v = (c & SF_SIGN) ? -v - 1 : v; - goto done; - } - } - f->next = s; - } - done: - SFOPEN(f, 0); - SFMTXRETURN(f, v); -} diff --git a/internal/ccall/sfio/sfgetm.c b/internal/ccall/sfio/sfgetm.c deleted file mode 100644 index cd3e5ed..0000000 --- a/internal/ccall/sfio/sfgetm.c +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read an unsigned long value coded portably for a given range. -** -** Written by Kiem-Phong Vo -*/ - -Sfulong_t sfgetm(reg Sfio_t * f, Sfulong_t m) -{ - Sfulong_t v; - reg uchar *s, *ends, c; - reg int p; - - SFMTXSTART(f, (Sfulong_t) (-1)); - - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, (Sfulong_t) (-1)); - - SFLOCK(f, 0); - - for (v = 0;;) { - if (SFRPEEK(f, s, p) <= 0) { - f->flags |= SF_ERROR; - v = (Sfulong_t) (-1); - goto done; - } - for (ends = s + p; s < ends;) { - c = *s++; - v = (v << SF_BBITS) | SFBVALUE(c); - if ((m >>= SF_BBITS) <= 0) { - f->next = s; - goto done; - } - } - f->next = s; - } - done: - SFOPEN(f, 0); - SFMTXRETURN(f, v); -} diff --git a/internal/ccall/sfio/sfgetr.c b/internal/ccall/sfio/sfgetr.c deleted file mode 100644 index 30fbcbc..0000000 --- a/internal/ccall/sfio/sfgetr.c +++ /dev/null @@ -1,142 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read a record delineated by a character. -** The record length can be accessed via sfvalue(f). -** -** Written by Kiem-Phong Vo -*/ - -/** - * @param f stream to read from. r11 on vax - * @param rc record separator. r10 on Vax - * @param type - */ -char *sfgetr(reg Sfio_t * f, reg int rc, int type) -{ - reg ssize_t n; - reg uchar *s, *ends, *us; - reg ssize_t un; - reg int found; - reg Sfrsrv_t *rsrv; - - SFMTXSTART(f, NIL(char *)); - - if (rc < 0 || (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0)) - SFMTXRETURN(f, NIL(char *)); - SFLOCK(f, 0); - - /* buffer to be returned */ - rsrv = NIL(Sfrsrv_t *); - us = NIL(uchar *); - un = 0; - found = 0; - - /* compatibility mode */ - type = type < 0 ? SF_LASTR : type == 1 ? SF_STRING : type; - - if (type & SF_LASTR) { /* return the broken record */ - if ((rsrv = f->rsrv) && (un = -rsrv->slen) > 0) { - us = rsrv->data; - found = 1; - } - goto done; - } - - while (!found) { /* fill buffer if necessary */ - if ((n = (ends = f->endb) - (s = f->next)) <= 0) { /* for unseekable devices, peek-read 1 record */ - f->getr = rc; - f->mode |= SF_RC; - - /* fill buffer the conventional way */ - if (SFRPEEK(f, s, n) <= 0) { - us = NIL(uchar *); - goto done; - } else { - ends = s + n; - if (f->mode & SF_RC) { - s = ends[-1] == rc ? ends - 1 : ends; - goto do_copy; - } - } - } -#if _lib_memchr - if (!(s = (uchar *) memchr((char *) s, rc, n))) - s = ends; -#else - while (*s != rc) - if ((s += 1) == ends) - break; -#endif - do_copy: - if (s < ends) { - s += 1; /* include the separator */ - found = 1; - - if (!us && (!(type & SF_STRING) || !(f->flags & SF_STRING) || ((f->flags & SF_STRING) && (f->bits & SF_BOTH)))) { /* returning data in buffer */ - us = f->next; - un = s - f->next; - f->next = s; - goto done; - } - } - - /* amount to be read */ - n = s - f->next; - - /* get internal buffer */ - if (!rsrv || rsrv->size < un + n + 1) { - if (rsrv) - rsrv->slen = un; - if ((rsrv = _sfrsrv(f, un + n + 1)) != NIL(Sfrsrv_t *)) - us = rsrv->data; - else { - us = NIL(uchar *); - goto done; - } - } - - /* now copy data */ - s = us + un; - un += n; - ends = f->next; - f->next += n; - MEMCPY(s, ends, n); - } - - done: - _Sfi = f->val = un; - f->getr = 0; - if (found && rc != 0 && (type & SF_STRING)) { - us[un - 1] = '\0'; - if (us >= f->data && us < f->endb) { - f->getr = rc; - f->mode |= SF_GETR; - } - } - - /* prepare for a call to get the broken record */ - if (rsrv) - rsrv->slen = found ? 0 : -un; - - SFOPEN(f, 0); - - if (us && (type & SF_LOCKR)) { - f->mode |= SF_PEEK | SF_GETR; - f->endr = f->data; - } - - SFMTXRETURN(f, (char *) us); -} diff --git a/internal/ccall/sfio/sfgetu.c b/internal/ccall/sfio/sfgetu.c deleted file mode 100644 index 8d3f897..0000000 --- a/internal/ccall/sfio/sfgetu.c +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read an unsigned long value coded in a portable format. -** -** Written by Kiem-Phong Vo -*/ - -Sfulong_t sfgetu(reg Sfio_t * f) -{ - Sfulong_t v; - reg uchar *s, *ends, c; - reg int p; - - SFMTXSTART(f, (Sfulong_t) (-1)); - - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, (Sfulong_t) (-1)); - - SFLOCK(f, 0); - - for (v = 0;;) { - if (SFRPEEK(f, s, p) <= 0) { - f->flags |= SF_ERROR; - v = (Sfulong_t) (-1); - goto done; - } - for (ends = s + p; s < ends;) { - c = *s++; - v = (v << SF_UBITS) | SFUVALUE(c); - if (!(c & SF_MORE)) { - f->next = s; - goto done; - } - } - f->next = s; - } - done: - SFOPEN(f, 0); - SFMTXRETURN(f, v); -} diff --git a/internal/ccall/sfio/sfhdr.h b/internal/ccall/sfio/sfhdr.h deleted file mode 100644 index 9558c03..0000000 --- a/internal/ccall/sfio/sfhdr.h +++ /dev/null @@ -1,939 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _SFHDR_H -#define _SFHDR_H 1 -#if !defined(_BLD_sfio) && !defined(_BLD_stdio) -#define _BLD_sfio 1 -#endif - -#include - -/* Internal definitions for sfio. -** Written by Kiem-Phong Vo -*/ - -#include "FEATURE/sfio" -#include "sfio_t.h" - -/* note that the macro vt_threaded has effect on vthread.h */ -#include - -#if defined(__mips) && __mips == 2 && !defined(_NO_LARGEFILE64_SOURCE) -#define _NO_LARGEFILE64_SOURCE 1 -#endif -#if !defined(_NO_LARGEFILE64_SOURCE) && \ - _lib_lseek64 && _lib_stat64 && _lib_mmap64 && defined(_typ_off64_t) && \ - _typ_struct_stat64 -# if !defined(_LARGEFILE64_SOURCE) -# define _LARGEFILE64_SOURCE 1 -# endif -#else -# undef _LARGEFILE64_SOURCE -#endif - -/* when building the binary compatibility package, a number of header files - are not needed and they may get in the way so we remove them here. -*/ -#if defined(_SFBINARY_H) -#undef _sys_stat -#undef _hdr_stat -#undef _lib_poll -#undef _stream_peek -#undef _socket_peek -#undef _hdr_vfork -#undef _sys_vfork -#undef _lib_vfork -#undef _hdr_math -#undef _sys_mman -#undef _sys_ioctl -#endif - -#include -#include -#include -#include - -#if _sys_stat -#include -#else -#if _hdr_stat -#include -#ifndef _sys_stat -#define _sys_stat 1 -#endif -#endif -#endif /*_sys_stat*/ - -#ifndef _sys_stat -#define _sys_stat 0 -#endif - -#include - -#if _hdr_unistd -#include -#endif - -#include -#include - -#if vt_threaded - -/* initialization */ -#define SFONCE() (_Sfdone ? 0 : vtonce(_Sfonce,_Sfoncef)) - -/* to lock/unlock a stream on entering and returning from some function */ -#define SFMTXLOCK(f) (((f)->flags&SF_MTSAFE) ? sfmutex(f,SFMTX_LOCK) : 0) -#define SFMTXUNLOCK(f) (((f)->flags&SF_MTSAFE) ? sfmutex(f,SFMTX_UNLOCK) : 0) -#define SFMTXSTART(f,v) { if(!f || SFMTXLOCK(f) != 0) return(v); } -#define SFMTXRETURN(f,v) { SFMTXUNLOCK(f); return(v); } - -/* start and end critical region for a pool */ -#define POOLMTXLOCK(p) ( vtmtxlock(&(p)->mutex) ) -#define POOLMTXUNLOCK(p) ( vtmtxunlock(&(p)->mutex) ) -#define POOLMTXSTART(p) { POOLMTXLOCK(p); } -#define POOLMTXRETURN(p,v) { POOLMTXUNLOCK(p); return(v); } - -#else /*!vt_threaded */ - -#undef SF_MTSAFE /* no need to worry about thread-safety */ -#define SF_MTSAFE 0 - -#define SFONCE() (void)(0) - -#define SFMTXLOCK(f) (void)(0) -#define SFMTXUNLOCK(f) (void)(0) -#define SFMTXSTART(f,v) { if(!f) return(v); } -#define SFMTXRETURN(f,v) { return(v); } - -#define POOLMTXLOCK(p) -#define POOLMTXUNLOCK(p) -#define POOLMTXSTART(p) -#define POOLMTXRETURN(p,v) { return(v); } - -#endif /*vt_threaded */ - - -/* functions for polling readiness of streams */ -#if _lib_select -#undef _lib_poll -#else -#if _lib_poll_fd_1 || _lib_poll_fd_2 -#define _lib_poll 1 -#endif -#endif /*_lib_select_*/ - -#if defined(_lib_poll) -#include - -#if _lib_poll_fd_1 -#define SFPOLL(pfd,n,tm) poll((pfd),(ulong)(n),(tm)) -#else -#define SFPOLL(pfd,n,tm) poll((ulong)(n),(pfd),(tm)) -#endif -#endif /*_lib_poll*/ - -#if _stream_peek -#include -#endif - -#if _socket_peek -#include -#endif - -/* to test for executable access mode of a file */ -#ifndef X_OK -#define X_OK 01 -#endif - -/* alternative process forking */ -#if _lib_vfork && !defined(fork) && !defined(sparc) && !defined(__sparc) -#if defined(_hdr_vfork) -#include -#endif -#if defined(_sys_vfork) -#include -#endif -#define fork vfork -#endif - -#if _lib_unlink -#define remove unlink -#endif - -#if _hdr_math -#include -#endif - -#if !defined(_ast_fltmax_double) - -#if defined(_lib_qfrexp) && _lib_qldexp -#define _has_expfuncs 1 -#define frexp qfrexp -#define ldexp qldexp -#else -#define _has_expfuncs 0 -#endif - -#endif/*_ast_fltmax_double*/ - -/* 64-bit vs 32-bit file stuff */ -#if _sys_stat -#ifdef _LARGEFILE64_SOURCE - typedef struct stat64 Stat_t; -#define lseek lseek64 -#define stat stat64 -#define fstat fstat64 -#define off_t off64_t -#else - typedef struct stat Stat_t; -#endif -#endif - -/* to get rid of pesky compiler warnings */ -#define NOTUSED(x) (void)(x) - -/* Private flags in the "bits" field */ -#define SF_MMAP 00000001 /* in memory mapping mode */ -#define SF_BOTH 00000002 /* both read/write */ -#define SF_HOLE 00000004 /* a hole of zero's was created */ -#define SF_NULL 00000010 /* stream is /dev/null */ -#define SF_SEQUENTIAL 00000020 /* sequential access */ -#define SF_JUSTSEEK 00000040 /* just did a sfseek */ - -/* this bit signals sfmutex() not to create a mutex for a private stream */ -#define SF_PRIVATE 00000200 /* private stream to Sfio */ - -/* on closing, don't be a hero about reread/rewrite on interrupts */ -#define SF_ENDING 00000400 - -/* private flags that must be cleared in sfclrlock */ -#define SF_DCDOWN 00001000 /* recurse down the discipline stack */ -#define SF_MVSIZE 00002000 -#define SFMVSET(f) (((f)->size *= SF_NMAP), ((f)->bits |= SF_MVSIZE) ) -#define SFMVUNSET(f) (!((f)->bits&SF_MVSIZE) ? 0 : \ - (((f)->bits &= ~SF_MVSIZE), ((f)->size /= SF_NMAP)) ) -#define SFCLRBITS(f) (SFMVUNSET(f), ((f)->bits &= ~(SF_DCDOWN|SF_MVSIZE)) ) - -/* bits for the mode field, SF_INIT defined in sfio_t.h */ -#define SF_RC 00000010 /* peeking for a record */ -#define SF_RV 00000020 /* reserve without read or most write */ -#define SF_LOCK 00000040 /* stream is locked for io op */ -#define SF_PUSH 00000100 /* stream has been pushed */ -#define SF_POOL 00000200 /* stream is in a pool but not current */ -#define SF_PEEK 00000400 /* there is a pending peek */ -#define SF_PKRD 00001000 /* did a peek read */ -#define SF_GETR 00002000 /* did a getr on this stream */ -#define SF_SYNCED 00004000 /* stream was synced */ -#define SF_STDIO 00010000 /* given up the buffer to stdio */ -#define SF_AVAIL 00020000 /* was closed, available for reuse */ -#define SF_LOCAL 00100000 /* sentinel for a local call */ - -#ifdef DEBUG -#define ASSERT(p) ((p) ? 0 : (abort(),0) ) -#else -#define ASSERT(p) -#endif - -/* short-hands */ -#define NIL(t) ((t)0) -#define reg register -#ifndef uchar -#define uchar unsigned char -#endif -#ifndef ulong -#define ulong uint64_t -#endif -#ifndef uint -#define uint unsigned int -#endif -#ifndef ushort -#define ushort unsigned short -#endif - -#define SECOND 1000 /* millisecond units */ - -/* macros do determine stream types from Stat_t data */ -#ifndef S_IFMT -#define S_IFMT 0 -#endif -#ifndef S_IFDIR -#define S_IFDIR 0 -#endif -#ifndef S_IFREG -#define S_IFREG 0 -#endif -#ifndef S_IFCHR -#define S_IFCHR 0 -#endif -#ifndef S_IFIFO -#define S_IFIFO 0 -#endif - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) -#endif -#ifndef S_ISREG -#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) -#endif -#ifndef S_ISCHR -#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) -#endif - -#ifndef S_ISFIFO -# ifdef S_IFIFO -# define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) -# else -# define S_ISFIFO(m) (0) -# endif -#endif - -#if defined(S_IRUSR) && defined(S_IWUSR) && defined(S_IRGRP) && defined(S_IWGRP) && defined(S_IROTH) && defined(S_IWOTH) -#define SF_CREATMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) -#else -#define SF_CREATMODE 0666 -#endif - -/* set close-on-exec */ -#ifdef F_SETFD -# ifndef FD_CLOEXEC -# define FD_CLOEXEC 1 -# endif /*FD_CLOEXEC */ -# define SETCLOEXEC(fd) ((void)fcntl((fd),F_SETFD,FD_CLOEXEC)) -#else -# ifdef FIOCLEX -# define SETCLOEXEC(fd) ((void)ioctl((fd),FIOCLEX,0)) -# else -# define SETCLOEXEC(fd) -# endif /*FIOCLEX*/ -#endif /*F_SETFD */ -/* a couple of error number that we use, default values are like Linux */ -#ifndef EINTR -#define EINTR 4 -#endif -#ifndef EBADF -#define EBADF 9 -#endif -#ifndef EAGAIN -#define EAGAIN 11 -#endif -#ifndef ENOMEM -#define ENOMEM 12 -#endif -#ifndef EINVAL -#define EINVAL 22 -#endif -#ifndef ESPIPE -#define ESPIPE 29 -#endif -/* see if we can use memory mapping for io */ -#if defined(_mmap_worthy) -# ifdef _LARGEFILE64_SOURCE -# undef mmap -# endif -# if _sys_mman -# include -# endif -# ifdef _LARGEFILE64_SOURCE -# ifndef off_t -# define off_t off64_t -# endif -# define mmap mmap64 -# endif -#endif -/* function to get the decimal point for local environment */ -#if _lib_locale -#ifdef MAXFLOAT /* we don't need these, so we zap them to avoid compiler warnings */ -#undef MAXFLOAT -#endif -#ifdef MAXSHORT -#undef MAXSHORT -#endif -#ifdef MAXINT -#undef MAXINT -#endif -#ifdef MAXLONG -#undef MAXLONG -#endif -#include -#define SFSETLOCALE(decimal,thousand) \ - { struct lconv* lv; \ - if((decimal) == 0) \ - { (decimal) = '.'; \ - if((lv = localeconv())) \ - { if(lv->decimal_point && lv->decimal_point[0]) \ - (decimal) = lv->decimal_point[0]; \ - if(lv->thousands_sep && lv->thousands_sep[0]) \ - (thousand) = lv->thousands_sep[0]; \ - } \ - } \ - } -#else -#define SFSETLOCALE(decimal,thousand) -#endif -/* stream pool structure. */ - typedef struct _sfpool_s Sfpool_t; - struct _sfpool_s { - Sfpool_t *next; - int mode; /* type of pool */ - int s_sf; /* size of pool array */ - int n_sf; /* number currently in pool */ - Sfio_t **sf; /* array of streams */ - Sfio_t *array[3]; /* start with 3 */ - Vtmutex_t mutex; /* mutex lock object */ - }; - -/* reserve buffer structure */ - typedef struct _sfrsrv_s Sfrsrv_t; - struct _sfrsrv_s { - ssize_t slen; /* last string length */ - ssize_t size; /* buffer size */ - uchar data[1]; /* data buffer */ - }; - -/* co-process structure */ - typedef struct _sfproc_s Sfproc_t; - struct _sfproc_s { - int pid; /* process id */ - uchar *rdata; /* read data being cached */ - int ndata; /* size of cached data */ - int size; /* buffer size */ - int file; /* saved file descriptor */ - int sigp; /* sigpipe protection needed */ - }; - -/* extensions to sfvprintf/sfvscanf */ -#define FP_SET(fp,fn) (fp < 0 ? (fn += 1) : (fn = fp) ) -#define FP_WIDTH 0 -#define FP_PRECIS 1 -#define FP_BASE 2 -#define FP_STR 3 -#define FP_SIZE 4 -#define FP_INDEX 5 /* index size */ - - typedef struct _fmt_s Fmt_t; - typedef struct _fmtpos_s Fmtpos_t; - typedef union { - int i, *ip; - long l, *lp; - short h, *hp; - uint ui; - ulong ul; - ushort uh; - Sflong_t ll, *llp; - Sfulong_t lu; - Sfdouble_t ld; - double d; - float f; - char c, *s, **sp; - void *vp; - Sffmt_t *ft; - } Argv_t; - - struct _fmt_s { - char *form; /* format string */ - va_list args; /* corresponding arglist */ - - char *oform; /* original format string */ - va_list oargs; /* original arg list */ - int argn; /* number of args already used */ - Fmtpos_t *fp; /* position list */ - - Sffmt_t *ft; /* formatting environment */ - Sffmtevent_f eventf; /* event function */ - Fmt_t *next; /* stack frame pointer */ - }; - - struct _fmtpos_s { - Sffmt_t ft; /* environment */ - Argv_t argv; /* argument value */ - int fmt; /* original format */ - int need[FP_INDEX]; /* positions depending on */ - }; - -#define LEFTP '(' -#define RIGHTP ')' -#define QUOTE '\'' - -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif - -#define FMTSET(ft, frm,ags, fv, sz, flgs, wid,pr,bs, ts,ns) \ - ((ft->form = (char*)frm), va_copy(ft->args,ags), \ - (ft->fmt = fv), (ft->size = sz), \ - (ft->flags = (flgs&SFFMT_SET)), \ - (ft->width = wid), (ft->precis = pr), (ft->base = bs), \ - (ft->t_str = ts), (ft->n_str = ns) ) -#define FMTGET(ft, frm,ags, fv, sz, flgs, wid,pr,bs) \ - ((frm = ft->form), va_copy(ags,ft->args), (fv = ft->fmt), (sz = ft->size), \ - (flgs = (flgs&~(SFFMT_SET))|(ft->flags&SFFMT_SET)), \ - (wid = ft->width), (pr = ft->precis), (bs = ft->base) ) -#define FMTCMP(sz, type, maxtype) \ - (sz == sizeof(type) || (sz == 0 && sizeof(type) == sizeof(maxtype)) || \ - (sz == 64 && sz == sizeof(type)*CHAR_BIT) ) - -/* format flags&types, must coexist with those in sfio.h */ -#define SFFMT_FORBIDDEN 00077777777 /* for sfio.h only */ -#define SFFMT_EFORMAT 01000000000 /* sfcvt converting %e */ -#define SFFMT_MINUS 02000000000 /* minus sign */ - -#define SFFMT_TYPES (SFFMT_SHORT|SFFMT_SSHORT | SFFMT_LONG|SFFMT_LLONG|\ - SFFMT_LDOUBLE | SFFMT_IFLAG|SFFMT_JFLAG| \ - SFFMT_TFLAG | SFFMT_ZFLAG ) - -/* type of elements to be converted */ -#define SFFMT_INT 001 /* %d,%i */ -#define SFFMT_UINT 002 /* %u,o,x etc. */ -#define SFFMT_FLOAT 004 /* %f,e,g etc. */ -#define SFFMT_BYTE 010 /* %c */ -#define SFFMT_POINTER 020 /* %p, %n */ -#define SFFMT_CLASS 040 /* %[ */ - -/* local variables used across sf-functions */ -#define _Sfpage (_Sfextern.sf_page) -#define _Sfpool (_Sfextern.sf_pool) -#define _Sfpmove (_Sfextern.sf_pmove) -#define _Sfstack (_Sfextern.sf_stack) -#define _Sfnotify (_Sfextern.sf_notify) -#define _Sfstdsync (_Sfextern.sf_stdsync) -#define _Sfudisc (&(_Sfextern.sf_udisc)) -#define _Sfcleanup (_Sfextern.sf_cleanup) -#define _Sfexiting (_Sfextern.sf_exiting) -#define _Sfdone (_Sfextern.sf_done) -#define _Sfonce (_Sfextern.sf_once) -#define _Sfoncef (_Sfextern.sf_oncef) -#define _Sfmutex (_Sfextern.sf_mutex) - typedef struct _sfextern_s { - ssize_t sf_page; - struct _sfpool_s sf_pool; - int (*sf_pmove) (Sfio_t *, int); - Sfio_t *(*sf_stack) (Sfio_t *, Sfio_t *); - void (*sf_notify) (Sfio_t *, int, int); - int (*sf_stdsync) (Sfio_t *); - struct _sfdisc_s sf_udisc; - void (*sf_cleanup) (void); - int sf_exiting; - int sf_done; - Vtonce_t *sf_once; - void (*sf_oncef) (void); - Vtmutex_t *sf_mutex; - } Sfextern_t; - -/* get the real value of a byte in a coded long or ulong */ -#define SFUVALUE(v) (((ulong)(v))&(SF_MORE-1)) -#define SFSVALUE(v) ((( long)(v))&(SF_SIGN-1)) -#define SFBVALUE(v) (((ulong)(v))&(SF_BYTE-1)) - -/* amount of precision to get in each iteration during coding of doubles */ -#define SF_PRECIS (SF_UBITS-1) - -/* grain size for buffer increment */ -#define SF_GRAIN 1024 -#define SF_PAGE ((ssize_t)(SF_GRAIN*sizeof(int)*2)) - -/* when the buffer is empty, certain io requests may be better done directly - on the given application buffers. The below condition determines when. -*/ -#define SFDIRECT(f,n) (((ssize_t)(n) >= (f)->size) || \ - ((n) >= SF_GRAIN && (ssize_t)(n) >= (f)->size/16 ) ) - -/* number of pages to memory map at a time */ -#define SF_NMAP 8 - -/* set/unset sequential states for mmap */ -#if defined(_lib_madvise) && defined(MADV_SEQUENTIAL) && defined(MADV_NORMAL) -#define SFMMSEQON(f,a,s) (void)(madvise((caddr_t)(a),(size_t)(s),MADV_SEQUENTIAL) ) -#define SFMMSEQOFF(f,a,s) (void)(madvise((caddr_t)(a),(size_t)(s),MADV_NORMAL) ) -#else -#define SFMMSEQON(f,a,s) -#define SFMMSEQOFF(f,a,s) -#endif - -#define SFMUNMAP(f,a,s) (munmap((caddr_t)(a),(size_t)(s)), \ - ((f)->endb = (f)->endr = (f)->endw = (f)->next = \ - (f)->data = NIL(uchar*)) ) - -#ifndef MAP_VARIABLE -#define MAP_VARIABLE 0 -#endif -#ifndef _mmap_fixed -#define _mmap_fixed 0 -#endif - -/* the bottomless bit bucket */ -#define DEVNULL "/dev/null" -#define SFSETNULL(f) ((f)->extent = (Sfoff_t)(-1), (f)->bits |= SF_NULL) -#define SFISNULL(f) ((f)->extent < 0 && ((f)->bits&SF_NULL) ) - -#define SFKILL(f) ((f)->mode = (SF_AVAIL|SF_LOCK) ) -#define SFKILLED(f) (((f)->mode&(SF_AVAIL|SF_LOCK)) == (SF_AVAIL|SF_LOCK) ) - -/* exception types */ -#define SF_EDONE 0 /* stop this operation and return */ -#define SF_EDISC 1 /* discipline says it's ok */ -#define SF_ESTACK 2 /* stack was popped */ -#define SF_ECONT 3 /* can continue normally */ - -#define SETLOCAL(f) ((f)->mode |= SF_LOCAL) -#define GETLOCAL(f,v) ((v) = ((f)->mode&SF_LOCAL), (f)->mode &= ~SF_LOCAL, (void)(v)) -#define SFWRALL(f) ((f)->mode |= SF_RV) -#define SFISALL(f,v) ((((v) = (f)->mode&SF_RV) ? ((f)->mode &= ~SF_RV) : 0), \ - ((v) || (f)->extent < 0 || \ - ((f)->flags&(SF_SHARE|SF_APPENDWR|SF_WHOLE)) ) ) -#define SFSK(f,a,o,d) (SETLOCAL(f),sfsk(f,(Sfoff_t)a,o,d)) -#define SFRD(f,b,n,d) (SETLOCAL(f),sfrd(f,(void*)b,n,d)) -#define SFWR(f,b,n,d) (SETLOCAL(f),sfwr(f,(void*)b,n,d)) -#define SFSYNC(f) (SETLOCAL(f),sfsync(f)) -#define SFCLOSE(f) (SETLOCAL(f),sfclose(f)) -#define SFFLSBUF(f,n) (SETLOCAL(f),_sfflsbuf(f,n)) -#define SFFILBUF(f,n) (SETLOCAL(f),_sffilbuf(f,n)) -#define SFSETBUF(f,s,n) (SETLOCAL(f),sfsetbuf(f,s,n)) -#define SFWRITE(f,s,n) (SETLOCAL(f),sfwrite(f,s,n)) -#define SFREAD(f,s,n) (SETLOCAL(f),sfread(f,s,n)) -#define SFSEEK(f,p,t) (SETLOCAL(f),sfseek(f,p,t)) -#define SFNPUTC(f,c,n) (SETLOCAL(f),sfnputc(f,c,n)) -#define SFRAISE(f,e,d) (SETLOCAL(f),sfraise(f,e,d)) - -/* lock/open a stream */ -#define SFMODE(f,l) ((f)->mode & ~(SF_RV|SF_RC|((l) ? SF_LOCK : 0)) ) -#define SFLOCK(f,l) (void)((f)->mode |= SF_LOCK, (f)->endr = (f)->endw = (f)->data) -#define _SFOPENRD(f) ((f)->endr = ((f)->flags&SF_MTSAFE) ? (f)->data : (f)->endb) -#define _SFOPENWR(f) ((f)->endw = ((f)->flags&(SF_MTSAFE|SF_LINE)) ? (f)->data : (f)->endb) -#define _SFOPEN(f) ((f)->mode == SF_READ ? _SFOPENRD(f) : \ - (f)->mode == SF_WRITE ? _SFOPENWR(f) : \ - ((f)->endw = (f)->endr = (f)->data) ) -#define SFOPEN(f,l) (void)((l) ? 0 : \ - ((f)->mode &= ~(SF_LOCK|SF_RC|SF_RV), _SFOPEN(f), 0) ) - -/* check to see if the stream can be accessed */ -#define SFFROZEN(f) ((f)->mode&(SF_PUSH|SF_LOCK|SF_PEEK) ? 1 : \ - ((f)->mode&SF_STDIO) ? (*_Sfstdsync)(f) : 0) - - -/* set discipline code */ -#define SFDISC(f,dc,iof) \ - { Sfdisc_t* d; \ - if(!(dc)) \ - d = (dc) = (f)->disc; \ - else d = (f->bits&SF_DCDOWN) ? ((dc) = (dc)->disc) : (dc); \ - while(d && !(d->iof)) d = d->disc; \ - if(d) (dc) = d; \ - } -#define SFDCRD(f,buf,n,dc,rv) \ - { int dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \ - rv = (*dc->readf)(f,buf,n,dc); \ - if(!dcdown) f->bits &= ~SF_DCDOWN; \ - } -#define SFDCWR(f,buf,n,dc,rv) \ - { int dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \ - rv = (*dc->writef)(f,buf,n,dc); \ - if(!dcdown) f->bits &= ~SF_DCDOWN; \ - } -#define SFDCSK(f,addr,type,dc,rv) \ - { int dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \ - rv = (*dc->seekf)(f,addr,type,dc); \ - if(!dcdown) f->bits &= ~SF_DCDOWN; \ - } - -/* fast peek of a stream */ -#define _SFAVAIL(f,s,n) ((n) = (f)->endb - ((s) = (f)->next) ) -#define SFRPEEK(f,s,n) (_SFAVAIL(f,s,n) > 0 ? (n) : \ - ((n) = SFFILBUF(f,-1), (s) = (f)->next, (n)) ) -#define SFWPEEK(f,s,n) (_SFAVAIL(f,s,n) > 0 ? (n) : \ - ((n) = SFFLSBUF(f,-1), (s) = (f)->next, (n)) ) - -/* more than this for a line buffer, we might as well flush */ -#define HIFORLINE 128 - -/* safe closing function */ -#define CLOSE(f) { while(close(f) < 0 && errno == EINTR) errno = 0; } - -/* string stream extent */ -#define SFSTRSIZE(f) { Sfoff_t s = (f)->next - (f)->data; \ - if(s > (f)->here) \ - { (f)->here = s; if(s > (f)->extent) (f)->extent = s; } \ - } - -/* control flags for open() */ -#ifdef O_CREAT -#define _has_oflags 1 -#else /* for example, research UNIX */ -#define _has_oflags 0 -#define O_CREAT 004 -#define O_TRUNC 010 -#define O_APPEND 020 -#define O_EXCL 040 - -#ifndef O_RDONLY -#define O_RDONLY 000 -#endif -#ifndef O_WRONLY -#define O_WRONLY 001 -#endif -#ifndef O_RDWR -#define O_RDWR 002 -#endif -#endif /*O_CREAT */ - -#ifndef O_BINARY -#define O_BINARY 000 -#endif -#ifndef O_TEXT -#define O_TEXT 000 -#endif -#ifndef O_TEMPORARY -#define O_TEMPORARY 000 -#endif - -#define SF_RADIX 64 /* maximum integer conversion base */ - -#define SF_MAXINT ((int)(((uint)~0) >> 1)) -#define SF_MAXLONG ((long)(((ulong)~0L) >> 1)) - -#define SF_MAXCHAR ((uchar)(~0)) - -/* floating point to ascii conversion */ -#define SF_MAXEXP10 6 -#define SF_MAXPOW10 (1 << SF_MAXEXP10) -#if !defined(_ast_fltmax_double) -#define SF_FDIGITS 1024 /* max allowed fractional digits */ -#define SF_IDIGITS (8*1024) /* max number of digits in int part */ -#else -#define SF_FDIGITS 256 /* max allowed fractional digits */ -#define SF_IDIGITS 1024 /* max number of digits in int part */ -#endif -#define SF_MAXDIGITS (((SF_FDIGITS+SF_IDIGITS)/sizeof(int) + 1)*sizeof(int)) - -/* tables for numerical translation */ -#define _Sfpos10 (_Sftable.sf_pos10) -#define _Sfneg10 (_Sftable.sf_neg10) -#define _Sfdec (_Sftable.sf_dec) -#define _Sfdigits (_Sftable.sf_digits) -#define _Sfcvinitf (_Sftable.sf_cvinitf) -#define _Sfcvinit (_Sftable.sf_cvinit) -#define _Sffmtposf (_Sftable.sf_fmtposf) -#define _Sffmtintf (_Sftable.sf_fmtintf) -#define _Sfcv36 (_Sftable.sf_cv36) -#define _Sfcv64 (_Sftable.sf_cv64) -#define _Sftype (_Sftable.sf_type) - typedef struct _sftab_ { - Sfdouble_t sf_pos10[SF_MAXEXP10]; /* positive powers of 10 */ - Sfdouble_t sf_neg10[SF_MAXEXP10]; /* negative powers of 10 */ - uchar sf_dec[200]; /* ascii reps of values < 100 */ - char *sf_digits; /* digits for general bases */ - int (*sf_cvinitf) (void); /* initialization function */ - int sf_cvinit; /* initialization state */ - Fmtpos_t *(*sf_fmtposf) (Sfio_t *, const char *, va_list, int); - char *(*sf_fmtintf) (const char *, int *); - uchar sf_cv36[SF_MAXCHAR + 1]; /* conversion for base [2-36] */ - uchar sf_cv64[SF_MAXCHAR + 1]; /* conversion for base [37-64] */ - uchar sf_type[SF_MAXCHAR + 1]; /* conversion formats&types */ - } Sftab_t; - -/* thread-safe macro/function to initialize _Sfcv* conversion tables */ -#define SFCVINIT() (_Sfcvinit ? 1 : (_Sfcvinit = (*_Sfcvinitf)()) ) - -/* sfucvt() converts decimal integers to ASCII */ -#define SFDIGIT(v,scale,digit) \ - { if(v < 5*scale) \ - if(v < 2*scale) \ - if(v < 1*scale) \ - { digit = '0'; } \ - else { digit = '1'; v -= 1*scale; } \ - else if(v < 3*scale) \ - { digit = '2'; v -= 2*scale; } \ - else if(v < 4*scale) \ - { digit = '3'; v -= 3*scale; } \ - else { digit = '4'; v -= 4*scale; } \ - else if(v < 7*scale) \ - if(v < 6*scale) \ - { digit = '5'; v -= 5*scale; } \ - else { digit = '6'; v -= 6*scale; } \ - else if(v < 8*scale) \ - { digit = '7'; v -= 7*scale; } \ - else if(v < 9*scale) \ - { digit = '8'; v -= 8*scale; } \ - else { digit = '9'; v -= 9*scale; } \ - } -#define sfucvt(v,s,n,list,type,utype) \ - { while((utype)v >= 10000) \ - { n = v; v = (type)(((utype)v)/10000); \ - n = (type)((utype)n - ((utype)v)*10000); \ - s -= 4; SFDIGIT(n,1000,s[0]); SFDIGIT(n,100,s[1]); \ - s[2] = *(list = (char*)_Sfdec + (n <<= 1)); s[3] = *(list+1); \ - } \ - if(v < 100) \ - { if(v < 10) \ - { s -= 1; s[0] = (char)('0'+v); \ - } else \ - { s -= 2; s[0] = *(list = (char*)_Sfdec + (v <<= 1)); s[1] = *(list+1); \ - } \ - } else \ - { if(v < 1000) \ - { s -= 3; SFDIGIT(v,100,s[0]); \ - s[1] = *(list = (char*)_Sfdec + (v <<= 1)); s[2] = *(list+1); \ - } else \ - { s -= 4; SFDIGIT(v,1000,s[0]); SFDIGIT(v,100,s[1]); \ - s[2] = *(list = (char*)_Sfdec + (v <<= 1)); s[3] = *(list+1); \ - } \ - } \ - } - -/* handy functions */ -#undef min -#undef max -#define min(x,y) ((x) < (y) ? (x) : (y)) -#define max(x,y) ((x) > (y) ? (x) : (y)) - -/* fast functions for memory copy and memory clear */ -#if _lib_bcopy && !_lib_memcpy -#define memcpy(to,fr,n) bcopy((fr),(to),(n)) -#endif -#if _lib_bzero && !_lib_memset -#define memclear(s,n) bzero((s),(n)) -#else -#define memclear(s,n) memset((s),'\0',(n)) -#endif - -/* note that MEMCPY advances the associated pointers */ -#define MEMCPY(to,fr,n) \ - switch(n) \ - { default : memcpy((void*)to,(void*)fr,n); to += n; fr += n; break; \ - case 7 : *to++ = *fr++; \ - case 6 : *to++ = *fr++; \ - case 5 : *to++ = *fr++; \ - case 4 : *to++ = *fr++; \ - case 3 : *to++ = *fr++; \ - case 2 : *to++ = *fr++; \ - case 1 : *to++ = *fr++; \ - } -#define MEMSET(s,c,n) \ - switch(n) \ - { default : memset((void*)s,(int)c,n); s += n; break; \ - case 7 : *s++ = c; \ - case 6 : *s++ = c; \ - case 5 : *s++ = c; \ - case 4 : *s++ = c; \ - case 3 : *s++ = c; \ - case 2 : *s++ = c; \ - case 1 : *s++ = c; \ - } - - extern Sfextern_t _Sfextern; - extern Sftab_t _Sftable; - - extern int _sfpopen(Sfio_t *, int, int, int); - extern int _sfpclose(Sfio_t *); - extern int _sfmode(Sfio_t *, int, int); - extern int _sftype(const char *, int *, int *); - extern int _sfexcept(Sfio_t *, int, ssize_t, Sfdisc_t *); - extern Sfrsrv_t *_sfrsrv(Sfio_t *, ssize_t); - extern int _sfsetpool(Sfio_t *); - extern char *_sfcvt(void *, int, int *, int *, int); - extern char **_sfgetpath(char *); - extern Sfdouble_t _sfstrtod(const char *, char **); - -#if !_lib_strtod -#define strtod _sfstrtod -#endif - -#ifndef errno - extern int errno; -#endif - -/* for portable encoding of double values */ -#if !__STDC__ -#ifndef WIN32 - extern double frexp(double, int *); - extern double ldexp(double, int); -#endif -#endif - -#if !_sys_mman - extern void *mmap(void *, size_t, int, int, int, off_t); - extern int munmap(void *, size_t); -#endif - -#ifdef WIN32 -#undef SF_ERROR -#include -#define SF_ERROR 0000400 /* an error happened */ -#else -#if !_hdr_unistd - extern int close(int); - extern ssize_t read(int, void *, size_t); - extern ssize_t write(int, const void *, size_t); - extern off_t lseek(int, off_t, int); - extern int dup(int); - extern int isatty(int); - extern int wait(int *); - extern int pipe(int *); - extern int access(const char *, int); - extern uint sleep(uint); - extern int execl(const char *, const char *, ...); - extern int execv(const char *, char **); -#if !defined(fork) - extern int fork(void); -#endif -#if _lib_unlink - extern int unlink(const char *); -#endif - -#endif /*_hdr_unistd*/ -#endif /* WIN32 */ - -#if _lib_bcopy && !_proto_bcopy - extern void bcopy(const void *, void *, size_t); -#endif -#if _lib_bzero && !_proto_bzero - extern void bzero(void *, size_t); -#endif - - extern time_t time(time_t *); - extern int waitpid(int, int *, int); -#ifndef WIN32 - extern void _exit(int); -#endif - typedef int (*Onexit_f)(void); - extern Onexit_f onexit(Onexit_f); - -#if _sys_stat - extern int fstat(int, Stat_t *); -#endif - -#if _lib_vfork && !defined(_hdr_vfork) && !defined(_sys_vfork) - extern pid_t vfork(void); -#endif /*_lib_vfork*/ - -#if defined(_lib_poll) -#if _lib_poll_fd_1 - extern int poll(struct pollfd *, ulong, int); -#else - extern int poll(ulong, struct pollfd *, int); -#endif -#endif /*_lib_poll*/ - -#if _proto_open && defined(__cplusplus) - extern int open(const char *, int, ...); -#endif - -#endif /*_SFHDR_H*/ -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/sfio/sfio.h b/internal/ccall/sfio/sfio.h deleted file mode 100644 index a332bba..0000000 --- a/internal/ccall/sfio/sfio.h +++ /dev/null @@ -1,448 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _SFIO_H -#define _SFIO_H 1 - -#define SFIO_VERSION 20010201L - -/* Public header file for the sfio library -** -** Written by Kiem-Phong Vo -*/ - -#include "config.h" - -#ifdef HAVE_SYS_TYPES_H -# include -#endif // HAVE_SYS_TYPES_H - -#include - -#ifdef UNUSED -/* to prevent stdio.h from being included */ -#ifndef __stdio_h__ -#define __stdio_h__ 1 -#endif -#ifndef _stdio_h_ -#define _stdio_h_ 1 -#endif -#ifndef _stdio_h -#define _stdio_h 1 -#endif -#ifndef __h_stdio__ -#define __h_stdio__ 1 -#endif -#ifndef _h_stdio_ -#define _h_stdio_ 1 -#endif -#ifndef _h_stdio -#define _h_stdio 1 -#endif -#ifndef __STDIO_H__ -#define __STDIO_H__ 1 -#endif -#ifndef _STDIO_H_ -#define _STDIO_H_ 1 -#endif -#ifndef _STDIO_H -#define _STDIO_H 1 -#endif -#ifndef __H_STDIO__ -#define __H_STDIO__ 1 -#endif -#ifndef _H_STDIO_ -#define _H_STDIO_ 1 -#endif -#ifndef _H_STDIO -#define _H_STDIO 1 -#endif -#ifndef _stdio_included -#define _stdio_included 1 -#endif -#ifndef _included_stdio -#define _included_stdio 1 -#endif -#ifndef _INCLUDED_STDIO -#define _INCLUDED_STDIO 1 -#endif -#ifndef _STDIO_INCLUDED -#define _STDIO_INCLUDED 1 -#endif -#ifndef _INC_STDIO -#define _INC_STDIO 1 -#endif - -#define _FILE_DEFINED 1 /* stop Windows from defining FILE */ -#define _FILEDEFED 1 /* stop SUNOS5.8 from defining FILE */ -#ifndef FILE -#define FILE struct _sfio_s /* because certain stdarg.h needs FILE */ -#endif -#endif - -/* Sfoff_t should be large enough for largest file address */ - - -#define Sfoff_t long long -#define Sflong_t long long -#define Sfulong_t unsigned long long -#define Sfdouble_t long double - - typedef struct _sfio_s Sfio_t; - - typedef struct _sfdisc_s Sfdisc_t; - typedef ssize_t(*Sfread_f) - (Sfio_t *, void *, size_t, Sfdisc_t *); - typedef ssize_t(*Sfwrite_f) - (Sfio_t *, const void *, size_t, Sfdisc_t *); - typedef Sfoff_t(*Sfseek_f) (Sfio_t *, Sfoff_t, int, Sfdisc_t *); - typedef int (*Sfexcept_f) (Sfio_t *, int, void *, Sfdisc_t *); - -/* discipline structure */ - struct _sfdisc_s { - Sfread_f readf; /* read function */ - Sfwrite_f writef; /* write function */ - Sfseek_f seekf; /* seek function */ - Sfexcept_f exceptf; /* to handle exceptions */ - Sfdisc_t *disc; /* the continuing discipline */ - }; - -/* a file structure */ - struct _sfio_s { - unsigned char *next; /* next position to read/write from */ - unsigned char *endw; /* end of write buffer */ - unsigned char *endr; /* end of read buffer */ - unsigned char *endb; /* end of buffer */ - Sfio_t *push; /* the stream that was pushed on */ - unsigned short flags; /* type of stream */ - short file; /* file descriptor */ - unsigned char *data; /* base of data buffer */ - ssize_t size; /* buffer size */ - ssize_t val; /* values or string lengths */ -#ifdef _SFIO_PRIVATE - _SFIO_PRIVATE -#endif - }; - -/* formatting environment */ - typedef struct _sffmt_s Sffmt_t; - typedef int (*Sffmtext_f)(Sfio_t *, void *, Sffmt_t *); - typedef int (*Sffmtevent_f)(Sfio_t *, int, void *, Sffmt_t *); - struct _sffmt_s { - long version; /* version of this structure */ - Sffmtext_f extf; /* function to process arguments */ - Sffmtevent_f eventf; /* process events */ - - char *form; /* format string to stack */ - va_list args; /* corresponding arg list */ - - int fmt; /* format character */ - ssize_t size; /* object size */ - int flags; /* formatting flags */ - int width; /* width of field */ - int precis; /* precision required */ - int base; /* conversion base */ - - char *t_str; /* type string */ - ssize_t n_str; /* length of t_str */ - - void *noop; /* as yet unused */ - }; -#define sffmtversion(fe,type) \ - (type ? ((fe)->version = SFIO_VERSION) : (fe)->version) - -#define SFFMT_SSHORT 00000010 /* 'hh' flag, char */ -#define SFFMT_TFLAG 00000020 /* 't' flag, ptrdiff_t */ -#define SFFMT_ZFLAG 00000040 /* 'z' flag, size_t */ - -#define SFFMT_LEFT 00000100 /* left-justification */ -#define SFFMT_SIGN 00000200 /* must have a sign */ -#define SFFMT_BLANK 00000400 /* if not signed, prepend a blank */ -#define SFFMT_ZERO 00001000 /* zero-padding on the left */ -#define SFFMT_ALTER 00002000 /* alternate formatting */ -#define SFFMT_THOUSAND 00004000 /* thousand grouping */ -#define SFFMT_SKIP 00010000 /* skip assignment in scanf() */ -#define SFFMT_SHORT 00020000 /* 'h' flag */ -#define SFFMT_LONG 00040000 /* 'l' flag */ -#define SFFMT_LLONG 00100000 /* 'll' flag */ -#define SFFMT_LDOUBLE 00200000 /* 'L' flag */ -#define SFFMT_VALUE 00400000 /* value is returned */ -#define SFFMT_ARGPOS 01000000 /* getting arg for $ patterns */ -#define SFFMT_IFLAG 02000000 /* 'I' flag */ -#define SFFMT_JFLAG 04000000 /* 'j' flag, intmax_t */ -#define SFFMT_SET 07777770 /* flags settable on calling extf */ - -/* for sfmutex() call */ -#define SFMTX_LOCK 0 /* up mutex count */ -#define SFMTX_TRYLOCK 1 /* try to up mutex count */ -#define SFMTX_UNLOCK 2 /* down mutex count */ -#define SFMTX_CLRLOCK 3 /* clear mutex count */ - -/* various constants */ -#ifndef NULL -#define NULL 0 -#endif -#ifndef EOF -#define EOF (-1) -#endif -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - - -/* bits for various types of files */ -#define SF_READ 0000001 /* open for reading */ -#define SF_WRITE 0000002 /* open for writing */ -#define SF_STRING 0000004 /* a string stream */ - -#define SF_APPENDWR 0000010 /* file is in append mode only. */ -#if defined(_mac_SF_APPEND) && !_mac_SF_APPEND -#define SF_APPEND SF_APPENDWR /* this was the original append bit */ - /* but BSDI stat.h now uses this symbol. */ - /* So we leave it out in such cases. */ -#endif - -#define SF_MALLOC 0000020 /* buffer is malloc-ed */ -#define SF_LINE 0000040 /* line buffering */ -#define SF_SHARE 0000100 /* stream with shared file descriptor */ -#define SF_EOF 0000200 /* eof was detected */ -#define SF_ERROR 0000400 /* an error happened */ -#define SF_STATIC 0001000 /* a stream that cannot be freed */ -#define SF_IOCHECK 0002000 /* call exceptf before doing IO */ -#define SF_PUBLIC 0004000 /* SF_SHARE and follow physical seek */ -#define SF_MTSAFE 0010000 /* need thread safety */ -#define SF_WHOLE 0020000 /* preserve wholeness of sfwrite/sfputr */ - -#define SF_FLAGS 0077177 /* PUBLIC FLAGS PASSABLE TO SFNEW() */ -#define SF_SETS 0027163 /* flags passable to sfset() */ - -#ifndef KPVDEL -#define SF_BUFCONST 0400000 /* unused flag - for compatibility only */ -#endif - -/* for sfgetr/sfreserve to hold a record */ -#define SF_LOCKR 0000010 /* lock record, stop access to stream */ -#define SF_LASTR 0000020 /* get the last incomplete record */ - -/* exception events: SF_NEW(0), SF_READ(1), SF_WRITE(2) and the below */ -#define SF_SEEK 3 /* seek error */ - -#define SF_CLOSING 4 /* stream is about to be closed. */ -#if defined(_mac_SF_CLOSE) && !_mac_SF_CLOSE -#define SF_CLOSE SF_CLOSING /* this was the original close event */ - /* but AIX now uses this symbol. So we */ - /* avoid defining it in such cases. */ -#endif - -#define SF_DPUSH 5 /* when discipline is being pushed */ -#define SF_DPOP 6 /* when discipline is being popped */ -#define SF_DPOLL 7 /* see if stream is ready for I/O */ -#define SF_DBUFFER 8 /* buffer not empty during push or pop */ -#define SF_SYNC 9 /* announcing start/end synchronization */ -#define SF_PURGE 10 /* a sfpurge() call was issued */ -#define SF_FINAL 11 /* closing is done except stream free */ -#define SF_READY 12 /* a polled stream is ready */ -#define SF_LOCKED 13 /* stream is in a locked state */ -#define SF_ATEXIT 14 /* process is exiting */ -#define SF_EVENT 100 /* start of user-defined events */ - -/* for stack and disciplines */ -#define SF_POPSTACK ((Sfio_t*)0) /* pop the stream stack */ -#define SF_POPDISC ((Sfdisc_t*)0) /* pop the discipline stack */ - -/* for the notify function and discipline exception */ -#define SF_NEW 0 /* new stream */ -#define SF_SETFD (-1) /* about to set the file descriptor */ - -#define SF_BUFSIZE 8192 /* default buffer size */ -#define SF_UNBOUND (-1) /* unbounded buffer size */ - - extern ssize_t _Sfi; - -#if defined(_BLD_sfio) && defined(GVDLL) -#define extern __declspec(dllexport) -#endif -/* standard in/out/err streams */ - extern Sfio_t *sfstdin; - extern Sfio_t *sfstdout; - extern Sfio_t *sfstderr; - extern Sfio_t _Sfstdin; - extern Sfio_t _Sfstdout; - extern Sfio_t _Sfstderr; -#undef extern - -#if defined(_DLL) && defined(_DLL_INDIRECT_DATA) -/* The Uwin shared library environment requires these to be defined - in a global structure set up by the Uwin start-up procedure. -*/ -#define sfstdin ((Sfio_t*)_ast_dll->_ast_stdin) -#define sfstdout ((Sfio_t*)_ast_dll->_ast_stdout) -#define sfstderr ((Sfio_t*)_ast_dll->_ast_stderr) -#endif - -#if defined(_BLD_sfio) && defined(__EXPORT__) -#define extern __EXPORT__ -#endif - - extern Sfio_t *sfnew(Sfio_t *, void *, size_t, int, int); - extern Sfio_t *sfopen(Sfio_t *, const char *, const char *); - extern Sfio_t *sfpopen(Sfio_t *, const char *, const char *); - extern Sfio_t *sfstack(Sfio_t *, Sfio_t *); - extern Sfio_t *sfswap(Sfio_t *, Sfio_t *); - extern Sfio_t *sftmp(size_t); - extern int sfpurge(Sfio_t *); - extern int sfpoll(Sfio_t **, int, int); - extern void *sfreserve(Sfio_t *, ssize_t, int); - extern int sfsync(Sfio_t *); - extern int sfclrlock(Sfio_t *); - extern void *sfsetbuf(Sfio_t *, void *, size_t); - extern Sfdisc_t *sfdisc(Sfio_t *, Sfdisc_t *); - extern int sfraise(Sfio_t *, int, void *); - extern int sfnotify(void (*)(Sfio_t *, int, int)); - extern int sfset(Sfio_t *, int, int); - extern int sfsetfd(Sfio_t *, int); - extern Sfio_t *sfpool(Sfio_t *, Sfio_t *, int); - extern ssize_t sfread(Sfio_t *, void *, size_t); - extern ssize_t sfwrite(Sfio_t *, const void *, size_t); - extern Sfoff_t sfmove(Sfio_t *, Sfio_t *, Sfoff_t, int); - extern int sfclose(Sfio_t *); - extern Sfoff_t sftell(Sfio_t *); - extern Sfoff_t sfseek(Sfio_t *, Sfoff_t, int); - extern ssize_t sfputr(Sfio_t *, const char *, int); - extern char *sfgetr(Sfio_t *, int, int); - extern ssize_t sfnputc(Sfio_t *, int, size_t); - extern int sfungetc(Sfio_t *, int); - extern int sfprintf(Sfio_t *, const char *, ...); - extern char *sfprints(const char *, ...); - extern int sfsprintf(char *, int, const char *, ...); - extern int sfvsprintf(char *, int, const char *, va_list); - extern int sfvprintf(Sfio_t *, const char *, va_list); - extern int sfscanf(Sfio_t *, const char *, ...); - extern int sfsscanf(const char *, const char *, ...); - extern int sfvsscanf(const char *, const char *, va_list); - extern int sfvscanf(Sfio_t *, const char *, va_list); - extern int sfresize(Sfio_t *, Sfoff_t); - -/* mutex locking for thread-safety */ - extern int sfmutex(Sfio_t *, int); - -/* io functions with discipline continuation */ - extern ssize_t sfrd(Sfio_t *, void *, size_t, Sfdisc_t *); - extern ssize_t sfwr(Sfio_t *, const void *, size_t, Sfdisc_t *); - extern Sfoff_t sfsk(Sfio_t *, Sfoff_t, int, Sfdisc_t *); - extern ssize_t sfpkrd(int, void *, size_t, int, long, int); - -/* portable handling of primitive types */ - extern int sfdlen(Sfdouble_t); - extern int sfllen(Sflong_t); - extern int sfulen(Sfulong_t); - - extern int sfputd(Sfio_t *, Sfdouble_t); - extern int sfputl(Sfio_t *, Sflong_t); - extern int sfputu(Sfio_t *, Sfulong_t); - extern int sfputm(Sfio_t *, Sfulong_t, Sfulong_t); - extern int sfputc(Sfio_t *, int); - - extern Sfdouble_t sfgetd(Sfio_t *); - extern Sflong_t sfgetl(Sfio_t *); - extern Sfulong_t sfgetu(Sfio_t *); - extern Sfulong_t sfgetm(Sfio_t *, Sfulong_t); - extern int sfgetc(Sfio_t *); - - extern int _sfputd(Sfio_t *, Sfdouble_t); - extern int _sfputl(Sfio_t *, Sflong_t); - extern int _sfputu(Sfio_t *, Sfulong_t); - extern int _sfputm(Sfio_t *, Sfulong_t, Sfulong_t); - extern int _sfflsbuf(Sfio_t *, int); - - extern int _sffilbuf(Sfio_t *, int); - - extern int _sfdlen(Sfdouble_t); - extern int _sfllen(Sflong_t); - extern int _sfulen(Sfulong_t); - -/* miscellaneous function analogues of fast in-line functions */ - extern Sfoff_t sfsize(Sfio_t *); - extern int sfclrerr(Sfio_t *); - extern int sfeof(Sfio_t *); - extern int sferror(Sfio_t *); - extern int sffileno(Sfio_t *); - extern int sfstacked(Sfio_t *); - extern ssize_t sfvalue(Sfio_t *); - extern ssize_t sfslen(void); - -#undef extern - -/* coding long integers in a portable and compact fashion */ -#define SF_SBITS 6 -#define SF_UBITS 7 -#define SF_BBITS 8 -#define SF_SIGN (1 << SF_SBITS) -#define SF_MORE (1 << SF_UBITS) -#define SF_BYTE (1 << SF_BBITS) -#define SF_U1 SF_MORE -#define SF_U2 (SF_U1*SF_U1) -#define SF_U3 (SF_U2*SF_U1) -#define SF_U4 (SF_U3*SF_U1) -#if defined(__cplusplus) -#define _SF_(f) (f) -#else -#define _SF_(f) ((Sfio_t*)(f)) -#endif -#define __sf_putd(f,v) (_sfputd(_SF_(f),(Sfdouble_t)(v))) -#define __sf_putl(f,v) (_sfputl(_SF_(f),(Sflong_t)(v))) -#define __sf_putu(f,v) (_sfputu(_SF_(f),(Sfulong_t)(v))) -#define __sf_putm(f,v,m) (_sfputm(_SF_(f),(Sfulong_t)(v),(Sfulong_t)(m))) -#define __sf_putc(f,c) (_SF_(f)->next >= _SF_(f)->endw ? \ - _sfflsbuf(_SF_(f),(int)((unsigned char)(c))) : \ - (int)(*_SF_(f)->next++ = (unsigned char)(c)) ) -#define __sf_getc(f) (_SF_(f)->next >= _SF_(f)->endr ? _sffilbuf(_SF_(f),0) : \ - (int)(*_SF_(f)->next++) ) -#define __sf_dlen(v) (_sfdlen((Sfdouble_t)(v)) ) -#define __sf_llen(v) (_sfllen((Sflong_t)(v)) ) -#define __sf_ulen(v) ((Sfulong_t)(v) < SF_U1 ? 1 : (Sfulong_t)(v) < SF_U2 ? 2 : \ - (Sfulong_t)(v) < SF_U3 ? 3 : (Sfulong_t)(v) < SF_U4 ? 4 : 5) -#define __sf_fileno(f) ((f) ? _SF_(f)->file : -1) -#define __sf_eof(f) ((f) ? (_SF_(f)->flags&SF_EOF) : 0) -#define __sf_error(f) ((f) ? (_SF_(f)->flags&SF_ERROR) : 0) -#define __sf_clrerr(f) ((f) ? (_SF_(f)->flags &= ~(SF_ERROR|SF_EOF)) : 0) -#define __sf_stacked(f) ((f) ? (_SF_(f)->push != (Sfio_t*)0) : 0) -#define __sf_value(f) ((f) ? (_SF_(f)->val) : 0) -#define __sf_slen() (_Sfi) - -#define sfputd(f,v) ( __sf_putd((f),(v)) ) -#define sfputl(f,v) ( __sf_putl((f),(v)) ) -#define sfputu(f,v) ( __sf_putu((f),(v)) ) -#define sfputm(f,v,m) ( __sf_putm((f),(v),(m)) ) -#define sfputc(f,c) ( __sf_putc((f),(c)) ) -#define sfgetc(f) ( __sf_getc(f) ) -#define sfdlen(v) ( __sf_dlen(v) ) -#define sfllen(v) ( __sf_llen(v) ) -#define sfulen(v) ( __sf_ulen(v) ) -#define sffileno(f) ( __sf_fileno(f) ) -#define sfeof(f) ( __sf_eof(f) ) -#define sferror(f) ( __sf_error(f) ) -#define sfclrerr(f) ( __sf_clrerr(f) ) -#define sfstacked(f) ( __sf_stacked(f) ) -#define sfvalue(f) ( __sf_value(f) ) -#define sfslen() ( __sf_slen() ) -#endif /* _SFIO_H */ -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/sfio/sfio_t.h b/internal/ccall/sfio/sfio_t.h deleted file mode 100644 index efa4855..0000000 --- a/internal/ccall/sfio/sfio_t.h +++ /dev/null @@ -1,117 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _SFIO_T_H -#define _SFIO_T_H 1 - -/* This header file is for library writers who need to know certain -** internal info concerning the full Sfio_t structure. Including this -** file means that you agree to track closely with sfio development -** in case its internal architecture is changed. -** -** Written by Kiem-Phong Vo -*/ - -/* the parts of Sfio_t private to sfio functions */ -#define _SFIO_PRIVATE \ - Sfoff_t extent; /* current file size */ \ - Sfoff_t here; /* current physical location */ \ - unsigned char getr; /* the last sfgetr separator */ \ - unsigned char tiny[1];/* for unbuffered read stream */ \ - unsigned short bits; /* private flags */ \ - unsigned int mode; /* current io mode */ \ - struct _sfdisc_s* disc; /* discipline */ \ - struct _sfpool_s* pool; /* the pool containing this */ \ - struct _sfrsrv_s* rsrv; /* reserved buffer */ \ - struct _sfproc_s* proc; /* coprocess id, etc. */ \ - void* mutex; /* mutex for thread-safety */ \ - void* stdio; /* stdio FILE if any */ \ - Sfoff_t lpos; /* last seek position */ \ - size_t iosz; /* prefer size for I/O */ - -#include "sfio.h" - -/* mode bit to indicate that the structure hasn't been initialized */ -#define SF_INIT 0000004 - -/* short-hand for common stream types */ -#define SF_RDWR (SF_READ|SF_WRITE) -#define SF_RDSTR (SF_READ|SF_STRING) -#define SF_WRSTR (SF_WRITE|SF_STRING) -#define SF_RDWRSTR (SF_RDWR|SF_STRING) - -/* for static initialization of an Sfio_t structure */ -#define SFNEW(data,size,file,type,disc,mutex) \ - { (unsigned char*)(data), /* next */ \ - (unsigned char*)(data), /* endw */ \ - (unsigned char*)(data), /* endr */ \ - (unsigned char*)(data), /* endb */ \ - (Sfio_t*)0, /* push */ \ - (unsigned short)((type)&SF_FLAGS), /* flags */ \ - (short)(file), /* file */ \ - (unsigned char*)(data), /* data */ \ - (ssize_t)(size), /* size */ \ - (ssize_t)(-1), /* val */ \ - (Sfoff_t)0, /* extent */ \ - (Sfoff_t)0, /* here */ \ - 0, /* getr */ \ - {0}, /* tiny */ \ - 0, /* bits */ \ - (unsigned int)(((type)&(SF_RDWR))|SF_INIT), /* mode */ \ - (struct _sfdisc_s*)(disc), /* disc */ \ - (struct _sfpool_s*)0, /* pool */ \ - (struct _sfrsrv_s*)0, /* rsrv */ \ - (struct _sfproc_s*)0, /* proc */ \ - (mutex), /* mutex */ \ - (void*)0, /* stdio */ \ - (Sfoff_t)0, /* lpos */ \ - (size_t)0 /* iosz */ \ - } - -/* function to clear an Sfio_t structure */ -#define SFCLEAR(f,mtx) \ - ( (f)->next = (unsigned char*)0, /* next */ \ - (f)->endw = (unsigned char*)0, /* endw */ \ - (f)->endr = (unsigned char*)0, /* endr */ \ - (f)->endb = (unsigned char*)0, /* endb */ \ - (f)->push = (Sfio_t*)0, /* push */ \ - (f)->flags = (unsigned short)0, /* flags */ \ - (f)->file = -1, /* file */ \ - (f)->data = (unsigned char*)0, /* data */ \ - (f)->size = (ssize_t)(-1), /* size */ \ - (f)->val = (ssize_t)(-1), /* val */ \ - (f)->extent = (Sfoff_t)(-1), /* extent */ \ - (f)->here = (Sfoff_t)0, /* here */ \ - (f)->getr = 0, /* getr */ \ - (f)->tiny[0] = 0, /* tiny */ \ - (f)->bits = 0, /* bits */ \ - (f)->mode = 0, /* mode */ \ - (f)->disc = (struct _sfdisc_s*)0, /* disc */ \ - (f)->pool = (struct _sfpool_s*)0, /* pool */ \ - (f)->rsrv = (struct _sfrsrv_s*)0, /* rsrv */ \ - (f)->proc = (struct _sfproc_s*)0, /* proc */ \ - (f)->mutex = (mtx), /* mutex */ \ - (f)->stdio = (void*)0, /* stdio */ \ - (f)->lpos = (Sfoff_t)0, /* lpos */ \ - (f)->iosz = (size_t)0 /* iosz */ \ - ) - -#endif /* _SFIO_T_H */ - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/sfio/sfllen.c b/internal/ccall/sfio/sfllen.c deleted file mode 100644 index 2807af6..0000000 --- a/internal/ccall/sfio/sfllen.c +++ /dev/null @@ -1,26 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Get size of a long value coded in a portable format -** -** Written by Kiem-Phong Vo -*/ -int _sfllen(Sflong_t v) -{ - if (v < 0) - v = -(v + 1); - v = (Sfulong_t) v >> SF_SBITS; - return 1 + (v > 0 ? sfulen(v) : 0); -} diff --git a/internal/ccall/sfio/sfmode.c b/internal/ccall/sfio/sfmode.c deleted file mode 100644 index 4ffeeb0..0000000 --- a/internal/ccall/sfio/sfmode.c +++ /dev/null @@ -1,518 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" -static char *Version = "\n@(#)sfio (AT&T Labs - kpv) 2001-02-01\0\n"; - -/* Functions to set a given stream to some desired mode -** -** Written by Kiem-Phong Vo. -** -** Modifications: -** 06/27/1990 (first version) -** 01/06/1991 -** 07/08/1991 -** 06/18/1992 -** 02/02/1993 -** 05/25/1993 -** 02/07/1994 -** 05/21/1996 -** 08/01/1997 -** 08/01/1998 (extended formatting) -** 09/09/1999 (thread-safe) -** 02/01/2001 (adaptive buffering) -*/ - -/* the below is for protecting the application from SIGPIPE */ -#include -typedef void (*Sfsignal_f) (int); -static int _Sfsigp = 0; /* # of streams needing SIGPIPE protection */ - -/* done at exiting time */ -static void _sfcleanup(void) -{ - reg Sfpool_t *p; - reg Sfio_t *f; - reg int n; - reg int pool; - - f = (Sfio_t *) Version; /* shut compiler warning */ - - /* set this so that no more buffering is allowed for write streams */ - _Sfexiting = 1001; - - sfsync(NIL(Sfio_t *)); - - for (p = &_Sfpool; p; p = p->next) { - for (n = 0; n < p->n_sf; ++n) { - if (!(f = p->sf[n]) || SFFROZEN(f)) - continue; - - SFLOCK(f, 0); - SFMTXLOCK(f); - - /* let application know that we are leaving */ - (void) SFRAISE(f, SF_ATEXIT, NIL(void *)); - - if (f->flags & SF_STRING) - continue; - - /* from now on, write streams are unbuffered */ - pool = f->mode & SF_POOL; - f->mode &= ~SF_POOL; - if ((f->flags & SF_WRITE) && !(f->mode & SF_WRITE)) - (void) _sfmode(f, SF_WRITE, 1); - if (((f->bits & SF_MMAP) && f->data) || - ((f->mode & SF_WRITE) && f->next == f->data)) - (void) SFSETBUF(f, NIL(void *), 0); - f->mode |= pool; - - SFMTXUNLOCK(f); - SFOPEN(f, 0); - } - } -} - -/* put into discrete pool */ -int _sfsetpool(Sfio_t * f) -{ - reg Sfpool_t *p; - reg Sfio_t **array; - reg int n, rv; - - if (!_Sfcleanup) { - _Sfcleanup = _sfcleanup; - (void) atexit(_sfcleanup); - } - - if (!(p = f->pool)) - p = f->pool = &_Sfpool; - - POOLMTXSTART(p); - - rv = -1; - - if (p->n_sf >= p->s_sf) { - if (p->s_sf == 0) { /* initialize pool array */ - p->s_sf = sizeof(p->array) / sizeof(p->array[0]); - p->sf = p->array; - } else { /* allocate a larger array */ - n = (p->sf != p->array ? p->s_sf : (p->s_sf / 4 + 1) * 4) + 4; - if (!(array = (Sfio_t **) malloc(n * sizeof(Sfio_t *)))) - goto done; - - /* move old array to new one */ - memcpy((void *) array, (void *) p->sf, - p->n_sf * sizeof(Sfio_t *)); - if (p->sf != p->array) - free((void *) p->sf); - - p->sf = array; - p->s_sf = n; - } - } - - /* always add at end of array because if this was done during some sort - of walk thru all streams, we'll want the new stream to be seen. - */ - p->sf[p->n_sf++] = f; - rv = 0; - - done: - POOLMTXRETURN(p, rv); -} - -/* create an auxiliary buffer for sfgetr/sfreserve/sfputr */ -Sfrsrv_t *_sfrsrv(reg Sfio_t * f, reg ssize_t size) -{ - Sfrsrv_t *rsrv, *rs; - - /* make buffer if nothing yet */ - size = ((size + SF_GRAIN - 1) / SF_GRAIN) * SF_GRAIN; - if (!(rsrv = f->rsrv) || size > rsrv->size) { - if (!(rs = (Sfrsrv_t *) malloc(size + sizeof(Sfrsrv_t)))) - size = -1; - else { - if (rsrv) { - if (rsrv->slen > 0) - memcpy(rs, rsrv, sizeof(Sfrsrv_t) + rsrv->slen); - free(rsrv); - } - f->rsrv = rsrv = rs; - rsrv->size = size; - rsrv->slen = 0; - } - } - - if (rsrv && size > 0) - rsrv->slen = 0; - - return size >= 0 ? rsrv : NIL(Sfrsrv_t *); -} - -#ifdef SIGPIPE -static void ignoresig(int sig) -{ - signal(sig, ignoresig); -} -#endif - -/** - * @param f - * @param fd - * @param pid - * @param stdio stdio popen() does not reset SIGPIPE handler - */ -int _sfpopen(reg Sfio_t * f, int fd, int pid, int stdio) -{ - reg Sfproc_t *p; - - if (f->proc) - return 0; - - if (!(p = f->proc = (Sfproc_t *) malloc(sizeof(Sfproc_t)))) - return -1; - - p->pid = pid; - p->size = p->ndata = 0; - p->rdata = NIL(uchar *); - p->file = fd; - p->sigp = (!stdio && pid >= 0 && (f->flags & SF_WRITE)) ? 1 : 0; - -#ifdef SIGPIPE /* protect from broken pipe signal */ - if (p->sigp) { - Sfsignal_f handler; - - vtmtxlock(_Sfmutex); - if ((handler = signal(SIGPIPE, ignoresig)) != SIG_DFL && - handler != ignoresig) - signal(SIGPIPE, handler); /* honor user handler */ - _Sfsigp += 1; - vtmtxunlock(_Sfmutex); - } -#endif - - return 0; -} - -/** - * @param f stream to close - */ -int _sfpclose(reg Sfio_t * f) -{ - Sfproc_t *p; - int pid, status; - - if (!(p = f->proc)) - return -1; - f->proc = NIL(Sfproc_t *); - - if (p->rdata) - free(p->rdata); - - if (p->pid < 0) - status = 0; - else { /* close the associated stream */ - if (p->file >= 0) - CLOSE(p->file); - - /* wait for process termination */ -#ifndef WIN32 - while ((pid = waitpid(p->pid, &status, 0)) == -1 - && errno == EINTR); -#endif - if (pid < 0) - status = -1; - -#ifdef SIGPIPE - vtmtxlock(_Sfmutex); - if (p->sigp && (_Sfsigp -= 1) <= 0) { - Sfsignal_f handler; - if ((handler = signal(SIGPIPE, SIG_DFL)) != SIG_DFL && - handler != ignoresig) - signal(SIGPIPE, handler); /* honor user handler */ - _Sfsigp = 0; - } - vtmtxunlock(_Sfmutex); -#endif - } - - free(p); - return status; -} - -static int _sfpmode(Sfio_t * f, int type) -{ - Sfproc_t *p; - - if (!(p = f->proc)) - return -1; - - if (type == SF_WRITE) { /* save unread data */ - p->ndata = f->endb - f->next; - if (p->ndata > p->size) { - if (p->rdata) - free((char *) p->rdata); - if ((p->rdata = (uchar *) malloc(p->ndata))) - p->size = p->ndata; - else { - p->size = 0; - return -1; - } - } - if (p->ndata > 0) - memcpy((void *) p->rdata, (void *) f->next, p->ndata); - f->endb = f->data; - } else { /* restore read data */ - if (p->ndata > f->size) /* may lose data!!! */ - p->ndata = f->size; - if (p->ndata > 0) { - memcpy((void *) f->data, (void *) p->rdata, p->ndata); - f->endb = f->data + p->ndata; - p->ndata = 0; - } - } - - /* switch file descriptor */ - if (p->pid >= 0) { - type = f->file; - f->file = p->file; - p->file = type; - } - - return 0; -} - -/** - * @param f change r/w mode and sync file pointer for this stream - * @param wanted desired mode - * @param local a local call - */ -int _sfmode(reg Sfio_t * f, reg int wanted, reg int local) -{ - reg int n; - Sfoff_t addr; - reg int rv = 0; - - SFONCE(); /* initialize mutexes */ - - if ((!local && SFFROZEN(f)) - || (!(f->flags & SF_STRING) && f->file < 0)) { - if (local || !f->disc || !f->disc->exceptf) { - local = 1; - goto err_notify; - } - - for (;;) { - if ((rv = (*f->disc->exceptf) (f, SF_LOCKED, 0, f->disc)) < 0) - return rv; - if ((!local && SFFROZEN(f)) || - (!(f->flags & SF_STRING) && f->file < 0)) { - if (rv == 0) { - local = 1; - goto err_notify; - } else - continue; - } else - break; - } - } - - if (f->mode & SF_GETR) { - f->mode &= ~SF_GETR; -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && (f->tiny[0] += 1) >= (4 * SF_NMAP)) { /* turn off mmap to avoid page faulting */ - sfsetbuf(f, (void *) f->tiny, (size_t) SF_UNBOUND); - f->tiny[0] = 0; - } else -#endif - if (f->getr) { - f->next[-1] = f->getr; - f->getr = 0; - } - } - - if (f->mode & SF_STDIO) /* synchronizing with stdio pointers */ - (*_Sfstdsync) (f); - - if (f->disc == _Sfudisc && wanted == SF_WRITE && - sfclose((*_Sfstack) (f, NIL(Sfio_t *))) < 0) { - local = 1; - goto err_notify; - } - - if (f->mode & SF_POOL) { /* move to head of pool */ - if (f == f->pool->sf[0] || (*_Sfpmove) (f, 0) < 0) { - local = 1; - goto err_notify; - } - f->mode &= ~SF_POOL; - } - - SFLOCK(f, local); - - /* buffer initialization */ - wanted &= SF_RDWR; - if (f->mode & SF_INIT) { - if (!f->pool && _sfsetpool(f) < 0) { - rv = -1; - goto done; - } - - if (wanted == 0) - goto done; - - if (wanted != (int) (f->mode & SF_RDWR) && !(f->flags & wanted)) - goto err_notify; - - if ((f->flags & SF_STRING) && f->size >= 0 && f->data) { - f->mode &= ~SF_INIT; - f->extent = ((f->flags & SF_READ) || (f->bits & SF_BOTH)) ? - f->size : 0; - f->here = 0; - f->endb = f->data + f->size; - f->next = f->endr = f->endw = f->data; - if (f->mode & SF_READ) - f->endr = f->endb; - else - f->endw = f->endb; - } else { - n = f->flags; - (void) SFSETBUF(f, f->data, f->size); - f->flags |= (n & SF_MALLOC); - } - } - - if (wanted == (int) SFMODE(f, 1)) - goto done; - - switch (SFMODE(f, 1)) { - case SF_WRITE: /* switching to SF_READ */ - if (wanted == 0 || wanted == SF_WRITE) - break; - if (!(f->flags & SF_READ)) - goto err_notify; - else if (f->flags & SF_STRING) { - SFSTRSIZE(f); - f->endb = f->data + f->extent; - f->mode = SF_READ; - break; - } - - /* reset buffer */ - if (f->next > f->data && SFFLSBUF(f, -1) < 0) - goto err_notify; - - if (f->size == 0) { /* unbuffered */ - f->data = f->tiny; - f->size = sizeof(f->tiny); - } - f->next = f->endr = f->endw = f->endb = f->data; - f->mode = SF_READ | SF_LOCK; - - /* restore saved read data for coprocess */ - if (f->proc && _sfpmode(f, wanted) < 0) - goto err_notify; - - break; - - case (SF_READ | SF_SYNCED): /* a previously sync-ed read stream */ - if (wanted != SF_WRITE) { /* just reset the pointers */ - f->mode = SF_READ | SF_LOCK; - - /* see if must go with new physical location */ - if ((f->flags & (SF_SHARE | SF_PUBLIC)) == - (SF_SHARE | SF_PUBLIC) - && (addr = SFSK(f, 0, SEEK_CUR, f->disc)) != f->here) { -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - f->endb = f->endr = f->endw = f->next = f->data; - f->here = addr; - } else { - addr = f->here + (f->endb - f->next); - if (SFSK(f, addr, SEEK_SET, f->disc) < 0) - goto err_notify; - f->here = addr; - } - - break; - } - /* fall thru */ - - case SF_READ: /* switching to SF_WRITE */ - if (wanted != SF_WRITE) - break; - else if (!(f->flags & SF_WRITE)) - goto err_notify; - else if (f->flags & SF_STRING) { - f->endb = f->data + f->size; - f->mode = SF_WRITE | SF_LOCK; - break; - } - - /* save unread data before switching mode */ - if (f->proc && _sfpmode(f, wanted) < 0) - goto err_notify; - - /* reset buffer and seek pointer */ - if (!(f->mode & SF_SYNCED)) { - n = f->endb - f->next; - if (f->extent >= 0 && (n > 0 || (f->data && (f->bits & SF_MMAP)))) { /* reset file pointer */ - addr = f->here - n; - if (SFSK(f, addr, SEEK_SET, f->disc) < 0) - goto err_notify; - f->here = addr; - } - } - - f->mode = SF_WRITE | SF_LOCK; -#ifdef MAP_TYPE - if (f->bits & SF_MMAP) { - if (f->data) - SFMUNMAP(f, f->data, f->endb - f->data); - (void) SFSETBUF(f, (void *) f->tiny, (size_t) SF_UNBOUND); - } -#endif - if (f->data == f->tiny) { - f->endb = f->data = f->next = NIL(uchar *); - f->size = 0; - } else - f->endb = (f->next = f->data) + f->size; - - break; - - default: /* unknown case */ - err_notify: - if ((wanted &= SF_RDWR) == 0 - && (wanted = f->flags & SF_RDWR) == SF_RDWR) - wanted = SF_READ; - - /* set errno for operations that access wrong stream type */ - if (wanted != (f->mode & SF_RDWR) && f->file >= 0) - errno = EBADF; - - if (_Sfnotify) /* notify application of the error */ - (*_Sfnotify) (f, wanted, f->file); - - rv = -1; - break; - } - - done: - SFOPEN(f, local); - return rv; -} diff --git a/internal/ccall/sfio/sfmove.c b/internal/ccall/sfio/sfmove.c deleted file mode 100644 index 0da8e51..0000000 --- a/internal/ccall/sfio/sfmove.c +++ /dev/null @@ -1,246 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Move data from one stream to another. -** This code is written so that it'll work even in the presence -** of stacking streams, pool, and discipline. -** If you must change it, be gentle. -** -** Written by Kiem-Phong Vo. -*/ -#define MAX_SSIZE ((ssize_t)((~((size_t)0)) >> 1)) - -/** - * @param fr moving data from this stream - * @param fw moving data to this stream - * @param n number of bytes/records to move. <0 for unbounded move - * @param rc record separator - */ -Sfoff_t sfmove(Sfio_t * fr, Sfio_t * fw, Sfoff_t n, reg int rc) -{ - reg uchar *cp, *next; - reg ssize_t r, w; - reg uchar *endb; - reg int direct; - Sfoff_t n_move; - uchar *rbuf = NIL(uchar *); - ssize_t rsize = 0; - - SFMTXSTART(fr, (Sfoff_t) 0); - if (fw) - SFMTXLOCK(fw); - - for (n_move = 0; n != 0;) { /* get the streams into the right mode */ - if (fr->mode != SF_READ && _sfmode(fr, SF_READ, 0) < 0) - goto done; - - SFLOCK(fr, 0); - - /* flush the write buffer as necessary to make room */ - if (fw) { - if (fw->mode != SF_WRITE && _sfmode(fw, SF_WRITE, 0) < 0) - break; - SFLOCK(fw, 0); - if (fw->next >= fw->endb || - (fw->next > fw->data && fr->extent < 0 && - (fw->extent < 0 || (fw->flags & SF_SHARE)))) - if (SFFLSBUF(fw, -1) < 0) - break; - } - - /* about to move all, set map to a large amount */ - if (n < 0 && (fr->bits & SF_MMAP) && !(fr->bits & SF_MVSIZE)) { - SFMVSET(fr); - - if (rc < 0) /* data will be accessed sequentially */ - fr->bits |= SF_SEQUENTIAL; - } - - /* try reading a block of data */ - direct = 0; - if ((r = fr->endb - (next = fr->next)) <= 0) { /* amount of data remained to be read */ - if ((w = n > MAX_SSIZE ? MAX_SSIZE : (ssize_t) n) < 0) { - if (fr->extent < 0) - w = fr->data == fr->tiny ? SF_GRAIN : fr->size; - else if ((fr->extent - fr->here) > SF_NMAP * SF_PAGE) - w = SF_NMAP * SF_PAGE; - else - w = (ssize_t) (fr->extent - fr->here); - } - - /* use a decent buffer for data transfer but make sure - that if we overread, the left over can be retrieved - */ - if (!(fr->flags & SF_STRING) && !(fr->bits & SF_MMAP) && - (n < 0 || fr->extent >= 0)) { - reg ssize_t maxw = 4 * (_Sfpage > 0 ? _Sfpage : SF_PAGE); - - /* direct transfer to a seekable write stream */ - if (fw && fw->extent >= 0 && w <= (fw->endb - fw->next)) { - w = fw->endb - (next = fw->next); - direct = SF_WRITE; - } else if (w > fr->size && maxw > fr->size) { /* making our own buffer */ - if (w >= maxw) - w = maxw; - else - w = ((w + fr->size - 1) / fr->size) * fr->size; - if (rsize <= 0 && (rbuf = (uchar *) malloc(w))) - rsize = w; - if (rbuf) { - next = rbuf; - w = rsize; - direct = SF_STRING; - } - } - } - - if (!direct) { /* make sure we don't read too far ahead */ - if (n > 0 && fr->extent < 0 && (fr->flags & SF_SHARE)) { - if (rc >= 0) { /* try peeking a large buffer */ - fr->mode |= SF_RV; - if ((r = SFFILBUF(fr, -1)) > 0) - goto done_filbuf; - else if (n > 1 && !fr->disc) { - r = sfpkrd(fr->file, - (void *) fr->data, - fr->size, rc, -1, (int) (-n)); - if (r <= 0) - goto one_r; - fr->next = fr->data; - fr->endb = fr->endr = fr->next + r; - goto done_filbuf; - } else { /* get a single record */ - one_r:fr->getr = rc; - fr->mode |= SF_RC; - r = -1; - } - } else if ((Sfoff_t) (r = fr->size) > n) - r = (ssize_t) n; - } else - r = -1; - if ((r = SFFILBUF(fr, r)) <= 0) - break; - done_filbuf: - next = fr->next; - } else { /* actual amount to be read */ - if (rc < 0 && n > 0 && n < w) - w = (ssize_t) n; - - if ((r = SFRD(fr, next, w, fr->disc)) > 0) - fr->next = fr->endb = fr->endr = fr->data; - else if (r == 0) - break; /* eof */ - else - goto again; /* popped stack */ - } - } - - /* compute the extent of data to be moved */ - endb = next + r; - if (rc < 0) { - if (n > 0) { - if (r > n) - r = (ssize_t) n; - n -= r; - } - n_move += r; - cp = next + r; - } else { /* count records */ - reg int rdwr = (fr->flags & SF_MALLOC) || - (fr->bits & (SF_BOTH | SF_MMAP)); - if (rdwr) { - w = endb[-1]; - endb[-1] = rc; - } else - w = 0; - for (cp = next; cp < endb;) { /* find the line extent */ - if (rdwr) - while (*cp++ != rc); - else - while (r-- && *cp++ != rc); - if (cp < endb || w == rc) { - n_move += 1; - if (n > 0 && (n -= 1) == 0) - break; - } - } - if (rdwr) - endb[-1] = w; - r = cp - next; - if (fr->mode & SF_PKRD) { /* advance the read point by proper amount */ - fr->mode &= ~SF_PKRD; - (void) read(fr->file, (void *) next, r); - fr->here += r; - if (!direct) - fr->endb = cp; - else - endb = cp; - } - } - - if (!direct) - fr->next += r; - else if ((w = endb - cp) > 0) { /* move left-over to read stream */ - if (w > fr->size) - w = fr->size; - memcpy((void *) fr->data, (void *) cp, w); - fr->endb = fr->data + w; - if ((w = endb - (cp + w)) > 0) - (void) SFSK(fr, (Sfoff_t) (-w), SEEK_CUR, fr->disc); - } - - if (fw) { - if (direct == SF_WRITE) - fw->next += r; - else if (r <= (fw->endb - fw->next)) { - memcpy((void *) fw->next, (void *) next, r); - fw->next += r; - } else if ((w = SFWRITE(fw, (void *) next, r)) != r) { /* a write error happened */ - if (w > 0) { - r -= w; - if (rc < 0) - n_move -= r; - } - if (fr->extent >= 0) - (void) SFSEEK(fr, (Sfoff_t) (-r), 1); - break; - } - } - - again: - SFOPEN(fr, 0); - if (fw) - SFOPEN(fw, 0); - } - - done: - if (n < 0 && (fr->bits & SF_MMAP) && (fr->bits & SF_MVSIZE)) { /* back to normal access mode */ - SFMVUNSET(fr); - if ((fr->bits & SF_SEQUENTIAL) && (fr->data)) - SFMMSEQOFF(fr, fr->data, fr->endb - fr->data); - fr->bits &= ~SF_SEQUENTIAL; - } - - if (rbuf) - free(rbuf); - - SFOPEN(fr, 0); - if (fw) { - SFOPEN(fw, 0); - SFMTXUNLOCK(fw); - } - - SFMTXRETURN(fr, n_move); -} diff --git a/internal/ccall/sfio/sfmutex.c b/internal/ccall/sfio/sfmutex.c deleted file mode 100644 index 883a0fd..0000000 --- a/internal/ccall/sfio/sfmutex.c +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Obtain/release exclusive use of a stream. -** -** Written by Kiem-Phong Vo. -*/ - -/* the main locking/unlocking interface */ -int sfmutex(Sfio_t * f, int type) -{ -#if !vt_threaded - return 0; -#else - - SFONCE(); - - if (!f) - return -1; - - if (!f->mutex) { - if (f->bits & SF_PRIVATE) - return 0; - - vtmtxlock(_Sfmutex); - f->mutex = vtmtxopen(NIL(Vtmutex_t *), VT_INIT); - vtmtxunlock(_Sfmutex); - if (!f->mutex) - return -1; - } - - if (type == SFMTX_LOCK) - return vtmtxlock(f->mutex); - else if (type == SFMTX_TRYLOCK) - return vtmtxtrylock(f->mutex); - else if (type == SFMTX_UNLOCK) - return vtmtxunlock(f->mutex); - else if (type == SFMTX_CLRLOCK) - return vtmtxclrlock(f->mutex); - else - return -1; -#endif /*vt_threaded */ -} diff --git a/internal/ccall/sfio/sfnew.c b/internal/ccall/sfio/sfnew.c deleted file mode 100644 index 854b425..0000000 --- a/internal/ccall/sfio/sfnew.c +++ /dev/null @@ -1,118 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Fundamental function to create a new stream. -** The argument flags defines the type of stream and the scheme -** of buffering. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param oldf old stream to be reused - * @param buf a buffer to read/write, if NULL, will be allocated - * @param size buffer size if buf is given or desired buffer size - * @param file file descriptor to read/write from - * @param flags type of file stream - */ -Sfio_t *sfnew(Sfio_t * oldf, void * buf, size_t size, int file, - int flags) -{ - reg Sfio_t *f; - reg int sflags; - - SFONCE(); /* initialize mutexes */ - - if (!(flags & SF_RDWR)) - return NIL(Sfio_t *); - - sflags = 0; - if ((f = oldf)) { - if (flags & SF_EOF) { - if (f != sfstdin && f != sfstdout && f != sfstderr) - f->mutex = NIL(Vtmutex_t *); - SFCLEAR(f, f->mutex); - oldf = NIL(Sfio_t *); - } else if (f->mode & SF_AVAIL) { /* only allow SF_STATIC to be already closed */ - if (!(f->flags & SF_STATIC)) - return NIL(Sfio_t *); - sflags = f->flags; - oldf = NIL(Sfio_t *); - } else { /* reopening an open stream, close it first */ - sflags = f->flags; - - if (((f->mode & SF_RDWR) != f->mode && _sfmode(f, 0, 0) < 0) || - SFCLOSE(f) < 0) - return NIL(Sfio_t *); - - if (f->data - && ((flags & SF_STRING) || size != (size_t) SF_UNBOUND)) { - if (sflags & SF_MALLOC) - free((void *) f->data); - f->data = NIL(uchar *); - } - if (!f->data) - sflags &= ~SF_MALLOC; - } - } - - if (!f) { /* reuse a standard stream structure if possible */ - if (!(flags & SF_STRING) && file >= 0 && file <= 2) { - f = file == 0 ? sfstdin : file == 1 ? sfstdout : sfstderr; - if (f) { - if (f->mode & SF_AVAIL) { - sflags = f->flags; - SFCLEAR(f, f->mutex); - } else - f = NIL(Sfio_t *); - } - } - - if (!f) { - if (!(f = (Sfio_t *) malloc(sizeof(Sfio_t)))) - return NIL(Sfio_t *); - SFCLEAR(f, NIL(Vtmutex_t *)); - } - } - - /* create a mutex */ -#if vt_threaded - if (!f->mutex) - f->mutex = vtmtxopen(NIL(Vtmutex_t *), VT_INIT); -#endif - - /* stream type */ - f->mode = (flags & SF_READ) ? SF_READ : SF_WRITE; - f->flags = (flags & SF_FLAGS) | (sflags & (SF_MALLOC | SF_STATIC)); - f->bits = (flags & SF_RDWR) == SF_RDWR ? SF_BOTH : 0; - f->file = file; - f->here = f->extent = 0; - f->getr = f->tiny[0] = 0; - - f->mode |= SF_INIT; - if (size != (size_t) SF_UNBOUND) { - f->size = size; - f->data = size <= 0 ? NIL(uchar *) : (uchar *) buf; - } - f->endb = f->endr = f->endw = f->next = f->data; - - if (_Sfnotify) - (*_Sfnotify) (f, SF_NEW, f->file); - - if (f->flags & SF_STRING) - (void) _sfmode(f, f->mode & SF_RDWR, 0); - - return f; -} diff --git a/internal/ccall/sfio/sfnotify.c b/internal/ccall/sfio/sfnotify.c deleted file mode 100644 index 3822934..0000000 --- a/internal/ccall/sfio/sfnotify.c +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - - -/* Set the function to be called when a stream is opened or closed -** -** Written by Kiem-Phong Vo. -*/ -int sfnotify(void (*notify) (Sfio_t *, int, int)) -{ - _Sfnotify = notify; - return 0; -} diff --git a/internal/ccall/sfio/sfnputc.c b/internal/ccall/sfio/sfnputc.c deleted file mode 100644 index fb13604..0000000 --- a/internal/ccall/sfio/sfnputc.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write out a character n times -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f file to write - * @param c char to be written - * @param number of time to repeat - */ -ssize_t sfnputc(reg Sfio_t * f, reg int c, reg size_t n) -{ - reg uchar *ps; - reg ssize_t p, w; - uchar buf[128]; - reg int local; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - if (SFMODE(f, local) != SF_WRITE && _sfmode(f, SF_WRITE, local) < 0) - SFMTXRETURN(f, -1); - - SFLOCK(f, local); - - /* write into a suitable buffer */ - if ((size_t) (p = (f->endb - (ps = f->next))) < n) { - ps = buf; - p = sizeof(buf); - } - if ((size_t) p > n) - p = n; - MEMSET(ps, c, p); - ps -= p; - - w = n; - if (ps == f->next) { /* simple sfwrite */ - f->next += p; - if (c == '\n') - (void) SFFLSBUF(f, -1); - goto done; - } - - for (;;) { /* hard write of data */ - if ((p = SFWRITE(f, (void *) ps, p)) <= 0 || (n -= p) <= 0) { - w -= n; - goto done; - } - if ((size_t) p > n) - p = n; - } - done: - SFOPEN(f, local); - SFMTXRETURN(f, w); -} diff --git a/internal/ccall/sfio/sfopen.c b/internal/ccall/sfio/sfopen.c deleted file mode 100644 index 19b8323..0000000 --- a/internal/ccall/sfio/sfopen.c +++ /dev/null @@ -1,189 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" -#ifdef WIN32 -#include "io.h" -#endif - -/* Open a file/string for IO. -** If f is not nil, it is taken as an existing stream that should be -** closed and its structure reused for the new stream. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f old stream structure - * @param file file/string to be opened - * @param mode mode of the stream - */ -Sfio_t *sfopen(reg Sfio_t * f, const char *file, const char *mode) -{ - int fd, oldfd, oflags, sflags; - - /* get the control flags */ - if ((sflags = _sftype(mode, &oflags, NIL(int *))) == 0) - return NIL(Sfio_t *); - - /* usually used on the standard streams to change control flags */ - -#ifndef WIN32 - if (f && !file && (f->mode & SF_INIT)) { - SFMTXSTART(f, NIL(Sfio_t *)); - - if (f->mode & SF_INIT) { /* paranoia in case another thread snuck in */ - if (f->file >= 0 && !(f->flags & SF_STRING) && (oflags &= (O_TEXT | O_BINARY | O_APPEND)) != 0) { /* set the wanted file access control flags */ - int ctl = fcntl(f->file, F_GETFL, 0); - ctl = (ctl & ~(O_TEXT | O_BINARY | O_APPEND)) | oflags; - fcntl(f->file, F_SETFL, ctl); - } - /* set all non read-write flags */ - f->flags |= (sflags & (SF_FLAGS & ~SF_RDWR)); - - /* reset read/write modes */ - if ((sflags &= SF_RDWR) != 0) { - f->flags = (f->flags & ~SF_RDWR) | sflags; - - if ((f->flags & SF_RDWR) == SF_RDWR) - f->bits |= SF_BOTH; - else - f->bits &= ~SF_BOTH; - - if (f->flags & SF_READ) - f->mode = (f->mode & ~SF_WRITE) | SF_READ; - else - f->mode = (f->mode & ~SF_READ) | SF_WRITE; - } - - SFMTXRETURN(f, f); - } else - SFMTXRETURN(f, NIL(Sfio_t *)); - } - -#endif - if (sflags & SF_STRING) { - f = sfnew(f, (char *) file, - file ? (size_t) strlen((char *) file) : (size_t) - SF_UNBOUND, -1, sflags); - } else { - if (!file) - return NIL(Sfio_t *); - -#if _has_oflags /* open the file */ - while ((fd = open((char *) file, oflags, SF_CREATMODE)) < 0 - && errno == EINTR) - errno = 0; -#else - while ((fd = open(file, oflags & (O_WRONLY | O_RDWR))) < 0 - && errno == EINTR) - errno = 0; - if (fd >= 0) { - if ((oflags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) { - CLOSE(fd); /* error: file already exists */ - return NIL(Sfio_t *); - } - if (oflags & O_TRUNC) { /* truncate file */ - reg int tf; - while ((tf = creat(file, SF_CREATMODE)) < 0 && - errno == EINTR) - errno = 0; - CLOSE(tf); - } - } else if (oflags & O_CREAT) { - while ((fd = creat(file, SF_CREATMODE)) < 0 && errno == EINTR) - errno = 0; - if (!(oflags & O_WRONLY)) { /* the file now exists, reopen it for read/write */ - CLOSE(fd); - while ((fd = open(file, oflags & (O_WRONLY | O_RDWR))) < 0 - && errno == EINTR) - errno = 0; - } - } -#endif - if (fd < 0) - return NIL(Sfio_t *); - - /* we may have to reset the file descriptor to its old value */ - oldfd = f ? f->file : -1; - if ((f = sfnew(f, NIL(char *), (size_t) SF_UNBOUND, fd, sflags)) - && oldfd >= 0) - (void) sfsetfd(f, oldfd); - } - - return f; -} - -int _sftype(reg const char *mode, int *oflagsp, int *uflagp) -{ - reg int sflags, oflags, uflag; - - if (!mode) - return 0; - - /* construct the open flags */ - sflags = oflags = uflag = 0; - while (1) - switch (*mode++) { - case 'w': - sflags |= SF_WRITE; - oflags |= O_WRONLY | O_CREAT; - if (!(sflags & SF_READ)) - oflags |= O_TRUNC; - continue; - case 'a': - sflags |= SF_WRITE | SF_APPENDWR; - oflags |= O_WRONLY | O_APPEND | O_CREAT; - continue; - case 'r': - sflags |= SF_READ; - oflags |= O_RDONLY; - continue; - case 's': - sflags |= SF_STRING; - continue; - case 'b': - oflags |= O_BINARY; - continue; - case 't': - oflags |= O_TEXT; - continue; - case 'x': - oflags |= O_EXCL; - continue; - case '+': - if (sflags) - sflags |= SF_READ | SF_WRITE; - continue; - case 'm': - sflags |= SF_MTSAFE; - uflag = 0; - continue; - case 'u': - sflags &= ~SF_MTSAFE; - uflag = 1; - continue; - default: - if (!(oflags & O_CREAT)) - oflags &= ~O_EXCL; - if ((sflags & SF_RDWR) == SF_RDWR) - oflags = (oflags & ~(O_RDONLY | O_WRONLY)) | O_RDWR; - if (oflagsp) - *oflagsp = oflags; - if (uflagp) - *uflagp = uflag; - if ((sflags & (SF_STRING | SF_RDWR)) == SF_STRING) - sflags |= SF_READ; - return sflags; - } -} diff --git a/internal/ccall/sfio/sfpkrd.c b/internal/ccall/sfio/sfpkrd.c deleted file mode 100644 index d0176fe..0000000 --- a/internal/ccall/sfio/sfpkrd.c +++ /dev/null @@ -1,248 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" -#ifndef FIONREAD -#if _sys_ioctl -#include -#endif -#endif - -/* Read/Peek a record from an unseekable device -** -** Written by Kiem-Phong Vo. -*/ - -#define STREAM_PEEK 001 -#define SOCKET_PEEK 002 - -/** - * @param fd file descriptor - * @param argbuf buffer to read data - * @param n buffer size - * @param rc record character - * @param tm time-out - * @param action >0: peeking, if rc>=0, get action records, - * <0: no peeking, if rc>=0, get -action records, - * =0: no peeking, if rc>=0, must get a single record - */ -ssize_t sfpkrd(int fd, void * argbuf, size_t n, int rc, long tm, - int action) -{ - reg ssize_t r; - reg int ntry, t; - reg char *buf = (char *) argbuf, *endbuf; - - if (rc < 0 && tm < 0 && action <= 0) - return read(fd, buf, n); - - t = (action > 0 || rc >= 0) ? (STREAM_PEEK | SOCKET_PEEK) : 0; -#if !_stream_peek - t &= ~STREAM_PEEK; -#endif -#if !_socket_peek - t &= ~SOCKET_PEEK; -#endif - - for (ntry = 0; ntry < 2; ++ntry) { - r = -1; -#if _stream_peek - if ((t & STREAM_PEEK) && (ntry == 1 || tm < 0)) { - struct strpeek pbuf; - pbuf.flags = 0; - pbuf.ctlbuf.maxlen = -1; - pbuf.ctlbuf.len = 0; - pbuf.ctlbuf.buf = NIL(char *); - pbuf.databuf.maxlen = n; - pbuf.databuf.buf = buf; - pbuf.databuf.len = 0; - - if ((r = ioctl(fd, I_PEEK, &pbuf)) < 0) { - if (errno == EINTR) - return -1; - t &= ~STREAM_PEEK; - } else { - t &= ~SOCKET_PEEK; - if (r > 0 && (r = pbuf.databuf.len) <= 0) { - if (action <= 0) /* read past eof */ - r = read(fd, buf, 1); - return r; - } - if (r == 0) - r = -1; - else if (r > 0) - break; - } - } -#endif /* stream_peek */ - - if (ntry == 1) - break; - - /* poll or select to see if data is present. */ - while (tm >= 0 || action > 0 || - /* block until there is data before peeking again */ - ((t & STREAM_PEEK) && rc >= 0) || - /* let select be interrupted instead of recv which autoresumes */ - (t & SOCKET_PEEK)) { - r = -2; -#if _lib_poll - if (r == -2) { - struct pollfd po; - po.fd = fd; - po.events = POLLIN; - po.revents = 0; - - if ((r = SFPOLL(&po, 1, tm)) < 0) { - if (errno == EINTR) - return -1; - else if (errno == EAGAIN) { - errno = 0; - continue; - } else - r = -2; - } else - r = (po.revents & POLLIN) ? 1 : -1; - } -#endif /*_lib_poll*/ -#if _lib_select - if (r == -2) { -#if _hpux_threads && vt_threaded -#define fd_set int -#endif - fd_set rd; - struct timeval tmb, *tmp; - FD_ZERO(&rd); - FD_SET(fd, &rd); - if (tm < 0) - tmp = NIL(struct timeval *); - else { - tmp = &tmb; - tmb.tv_sec = tm / SECOND; - tmb.tv_usec = (tm % SECOND) * SECOND; - } - r = select(fd + 1, &rd, NIL(fd_set *), NIL(fd_set *), tmp); - if (r < 0) { - if (errno == EINTR) - return -1; - else if (errno == EAGAIN) { - errno = 0; - continue; - } else - r = -2; - } else - r = FD_ISSET(fd, &rd) ? 1 : -1; - } -#endif /*_lib_select*/ - if (r == -2) { -#if !_lib_poll && !_lib_select /* both poll and select cann't be used */ -#ifdef FIONREAD /* quick and dirty check for availability */ - long nsec = tm < 0 ? 0 : (tm + 999) / 1000; - while (nsec > 0 && r < 0) { - long avail = -1; - if ((r = ioctl(fd, FIONREAD, &avail)) < 0) { - if (errno == EINTR) - return -1; - else if (errno == EAGAIN) { - errno = 0; - continue; - } else { /* ioctl failed completely */ - r = -2; - break; - } - } else - r = avail <= 0 ? -1 : (ssize_t) avail; - - if (r < 0 && nsec-- > 0) - sleep(1); - } -#endif -#endif - } - - if (r > 0) { /* there is data now */ - if (action <= 0 && rc < 0) - return read(fd, buf, n); - else - r = -1; - } else if (tm >= 0) /* timeout exceeded */ - return -1; - else - r = -1; - break; - } - -#if _socket_peek - if (t & SOCKET_PEEK) { - while ((r = recv(fd, (char *) buf, n, MSG_PEEK)) < 0) { - if (errno == EINTR) - return -1; - else if (errno == EAGAIN) { - errno = 0; - continue; - } - t &= ~SOCKET_PEEK; - break; - } - if (r >= 0) { - t &= ~STREAM_PEEK; - if (r > 0) - break; - else { /* read past eof */ - if (action <= 0) - r = read(fd, buf, 1); - return r; - } - } - } -#endif - } - - if (r < 0) { - if (tm >= 0 || action > 0) - return -1; - else { /* get here means: tm < 0 && action <= 0 && rc >= 0 */ - /* number of records read at a time */ - if ((action = action ? -action : 1) > (int) n) - action = n; - r = 0; - while ((t = read(fd, buf, action)) > 0) { - r += t; - for (endbuf = buf + t; buf < endbuf;) - if (*buf++ == rc) - action -= 1; - if (action == 0 || (int) (n - r) < action) - break; - } - return r == 0 ? t : r; - } - } - - /* successful peek, find the record end */ - if (rc >= 0) { - reg char *sp; - - t = action == 0 ? 1 : action < 0 ? -action : action; - for (endbuf = (sp = buf) + r; sp < endbuf;) - if (*sp++ == rc) - if ((t -= 1) == 0) - break; - r = sp - buf; - } - - /* advance */ - if (action <= 0) - r = read(fd, buf, r); - - return r; -} diff --git a/internal/ccall/sfio/sfpoll.c b/internal/ccall/sfio/sfpoll.c deleted file mode 100644 index cb6b0c6..0000000 --- a/internal/ccall/sfio/sfpoll.c +++ /dev/null @@ -1,230 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Poll a set of streams to see if any is available for I/O. -** Ready streams are moved to front of array but retain the -** same relative order. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param fa array of streams to poll - * @param n number of streams in array - * @param tm the amount of time in ms to wait for selecting - */ -int sfpoll(Sfio_t ** fa, reg int n, int tm) -{ - reg int r, c, m; - reg Sfio_t *f; - reg Sfdisc_t *d; - reg int *status, *check; - - if (n <= 0 || !fa) - return -1; - - if (!(status = (int *) malloc(2 * n * sizeof(int)))) - return -1; - else - check = status + n; - - /* this loop partitions the streams into 3 sets: Check, Ready, Notready */ - retry:for (r = c = 0; r < n; ++r) { - f = fa[r]; - - /* this loop pops a stream stack as necessary */ - for (;;) { /* check accessibility */ - m = f->mode & SF_RDWR; - if ((int) f->mode != m && _sfmode(f, m, 0) < 0) - goto do_never; - - /* clearly ready */ - if (f->next < f->endb) - goto do_ready; - - /* has discipline, ask its opinion */ - for (d = f->disc; d; d = d->disc) - if (d->exceptf) - break; - if (d) { - if ((m = (*d->exceptf) (f, SF_DPOLL, &tm, d)) < 0) - goto do_never; - else if (m > 0) - goto do_ready; - /*else check file descriptor */ - } - - /* unseekable stream, must check for blockability */ - if (f->extent < 0) - goto do_check; - - /* string/regular streams with no possibility of blocking */ - if (!f->push) - goto do_ready; - - /* stacked regular file stream with I/O possibility */ - if (!(f->flags & SF_STRING) && - ((f->mode & SF_WRITE) || f->here < f->extent)) - goto do_ready; - - /* at an apparent eof, pop stack if ok, then recheck */ - SETLOCAL(f); - switch (_sfexcept(f, f->mode & SF_RDWR, 0, f->disc)) { - case SF_EDONE: - if (f->flags & SF_STRING) - goto do_never; - else - goto do_ready; - case SF_EDISC: - if (f->flags & SF_STRING) - goto do_ready; - case SF_ESTACK: - case SF_ECONT: - continue; - } - } - - do_check: /* local function to set a stream for further checking */ - { - status[r] = 0; - check[c] = r; - c += 1; - continue; - } - - do_ready: /* local function to set the ready streams */ - { - status[r] = 1; - continue; - } - - do_never: /* local function to set the not-ready streams */ - { - status[r] = -1; - continue; - } - } - -#if _lib_poll - if (c > 0) { - struct pollfd *fds; - - /* construct the poll array */ - if (!(fds = (struct pollfd *) malloc(c * sizeof(struct pollfd)))) - return -1; - for (r = 0; r < c; r++) { - fds[r].fd = fa[check[r]]->file; - fds[r].events = - (fa[check[r]]->mode & SF_READ) ? POLLIN : POLLOUT; - fds[r].revents = 0; - } - - for (;;) { /* this loop takes care of interrupts */ - if ((r = SFPOLL(fds, c, tm)) == 0) - break; - else if (r < 0) { - if (errno == EINTR || errno == EAGAIN) { - errno = 0; - continue; - } else - break; - } - - for (r = 0; r < c; ++r) { - f = fa[check[r]]; - if (((f->mode & SF_READ) && (fds[r].revents & POLLIN)) || - ((f->mode & SF_WRITE) && (fds[r].revents & POLLOUT))) - status[check[r]] = 1; - } - break; - } - - free((void *) fds); - } -#endif /*_lib_poll*/ - -#if _lib_select - if (c > 0) { - fd_set rd, wr; - struct timeval tmb, *tmp; - - FD_ZERO(&rd); - FD_ZERO(&wr); - m = 0; - for (r = 0; r < c; ++r) { - f = fa[check[r]]; - if (f->file > m) - m = f->file; - if (f->mode & SF_READ) - FD_SET(f->file, &rd); - else - FD_SET(f->file, &wr); - } - if (tm < 0) - tmp = NIL(struct timeval *); - else { - tmp = &tmb; - tmb.tv_sec = tm / SECOND; - tmb.tv_usec = (tm % SECOND) * SECOND; - } - for (;;) { - if ((r = select(m + 1, &rd, &wr, NIL(fd_set *), tmp)) == 0) - break; - else if (r < 0) { - if (errno == EINTR) - continue; - else - break; - } - - for (r = 0; r < c; ++r) { - f = fa[check[r]]; - if (((f->mode & SF_READ) && FD_ISSET(f->file, &rd)) || - ((f->mode & SF_WRITE) && FD_ISSET(f->file, &wr))) - status[check[r]] = 1; - } - break; - } - } -#endif /*_lib_select*/ - - /* call exception functions */ - for (c = 0; c < n; ++c) { - if (status[c] <= 0) - continue; - if ((d = fa[c]->disc) && d->exceptf) { - if ((r = (*d->exceptf) (fa[c], SF_READY, (void *) 0, d)) < 0) - goto done; - else if (r > 0) - goto retry; - } - } - - /* move ready streams to the front */ - for (r = c = 0; c < n; ++c) { - if (status[c] > 0) { - if (c > r) { - f = fa[r]; - fa[r] = fa[c]; - fa[c] = f; - } - r += 1; - } - } - - done: - free((void *) status); - return r; -} diff --git a/internal/ccall/sfio/sfpool.c b/internal/ccall/sfio/sfpool.c deleted file mode 100644 index dffb2d6..0000000 --- a/internal/ccall/sfio/sfpool.c +++ /dev/null @@ -1,332 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Management of pools of streams. -** If pf is not nil, f is pooled with pf and f becomes current; -** otherwise, f is isolated from its pool. flag can be one of -** 0 or SF_SHARE. -** -** Written by Kiem-Phong Vo. -*/ - -/* Note that we do not free the space for a pool once it is allocated. -** This is to prevent memory faults in calls such as sfsync(NULL) that walk the pool -** link list and during such walks may free up streams&pools. Free pools will be -** reused in newpool(). -*/ -static int delpool(reg Sfpool_t * p) -{ - POOLMTXSTART(p); - - if (p->s_sf && p->sf != p->array) - free((void *) p->sf); - p->mode = SF_AVAIL; - - POOLMTXRETURN(p, 0); -} - -static Sfpool_t *newpool(reg int mode) -{ - reg Sfpool_t *p, *last = &_Sfpool; - - /* look to see if there is a free pool */ - for (last = &_Sfpool, p = last->next; p; last = p, p = p->next) { - if (p->mode == SF_AVAIL) { - p->mode = 0; - break; - } - } - - if (!p) { - POOLMTXLOCK(last); - - if (!(p = (Sfpool_t *) malloc(sizeof(Sfpool_t)))) { - POOLMTXUNLOCK(last); - return NIL(Sfpool_t *); - } - - vtmtxopen(&p->mutex, VT_INIT); /* initialize mutex */ - - p->mode = 0; - p->n_sf = 0; - p->next = NIL(Sfpool_t *); - last->next = p; - - POOLMTXUNLOCK(last); - } - - POOLMTXSTART(p); - - p->mode = mode & SF_SHARE; - p->s_sf = sizeof(p->array) / sizeof(p->array[0]); - p->sf = p->array; - - POOLMTXRETURN(p, p); -} - -/* move a stream to head */ -/** - * @param p the pool - * @param f the stream - * @param n current position in pool - */ -static int _sfphead(Sfpool_t * p, Sfio_t * f, int n) -{ - reg Sfio_t *head; - reg ssize_t k, w, v; - reg int rv; - - POOLMTXSTART(p); - - if (n == 0) - POOLMTXRETURN(p, 0); - - head = p->sf[0]; - if (SFFROZEN(head)) - POOLMTXRETURN(p, -1); - - SFLOCK(head, 0); - rv = -1; - - if (!(p->mode & SF_SHARE)) { - if (SFSYNC(head) < 0) - goto done; - } else { /* shared pool, data can be moved among streams */ - if (SFMODE(head, 1) != SF_WRITE && _sfmode(head, SF_WRITE, 1) < 0) - goto done; - /**/ ASSERT((f->mode & (SF_WRITE | SF_POOL)) == - (SF_WRITE | SF_POOL)); - /**/ ASSERT(f->next == f->data); - - v = head->next - head->data; /* pending data */ - if ((k = v - (f->endb - f->data)) <= 0) - k = 0; - else { /* try to write out amount exceeding f's capacity */ - if ((w = SFWR(head, head->data, k, head->disc)) == k) - v -= k; - else { /* write failed, recover buffer then quit */ - if (w > 0) { - v -= w; - memcpy(head->data, (head->data + w), v); - } - head->next = head->data + v; - goto done; - } - } - - /* move data from head to f */ - if ((head->data + k) != f->data) - memcpy(f->data, (head->data + k), v); - f->next = f->data + v; - } - - f->mode &= ~SF_POOL; - head->mode |= SF_POOL; - head->next = head->endr = head->endw = head->data; - - p->sf[n] = head; - p->sf[0] = f; - rv = 0; - - done: - head->mode &= ~SF_LOCK; /* partially unlock because it's no longer head */ - - POOLMTXRETURN(p, rv); -} - -/* delete a stream from its pool */ -/** - * @param p the pool - * @param f the stream - * @param n position in pool - */ -static int _sfpdelete(Sfpool_t * p, Sfio_t * f, int n) -{ - POOLMTXSTART(p); - - p->n_sf -= 1; - for (; n < p->n_sf; ++n) - p->sf[n] = p->sf[n + 1]; - - f->pool = NIL(Sfpool_t *); - f->mode &= ~SF_POOL; - - if (p->n_sf == 0 || p == &_Sfpool) { - if (p != &_Sfpool) - delpool(p); - goto done; - } - - /* !_Sfpool, make sure head stream is an open stream */ - for (n = 0; n < p->n_sf; ++n) - if (!SFFROZEN(p->sf[n])) - break; - if (n < p->n_sf && n > 0) { - f = p->sf[n]; - p->sf[n] = p->sf[0]; - p->sf[0] = f; - } - - /* head stream has SF_POOL off */ - f = p->sf[0]; - f->mode &= ~SF_POOL; - if (!SFFROZEN(f)) - _SFOPEN(f); - - /* if only one stream left, delete pool */ - if (p->n_sf == 1) { - _sfpdelete(p, f, 0); - _sfsetpool(f); - } - - done: - POOLMTXRETURN(p, 0); -} - -/** - * @param f - * @param type <0 : deleting, 0: move-to-front, >0: inserting - */ -static int _sfpmove(reg Sfio_t * f, reg int type) -{ - reg Sfpool_t *p; - reg int n; - - if (type > 0) - return _sfsetpool(f); - else { - if (!(p = f->pool)) - return -1; - for (n = p->n_sf - 1; n >= 0; --n) - if (p->sf[n] == f) - break; - if (n < 0) - return -1; - - return type == 0 ? _sfphead(p, f, n) : _sfpdelete(p, f, n); - } -} - -Sfio_t *sfpool(reg Sfio_t * f, reg Sfio_t * pf, reg int mode) -{ - reg Sfpool_t *p; - reg Sfio_t *rv; - - _Sfpmove = _sfpmove; - - if (!f) { /* return head of pool of pf regardless of lock states */ - if (!pf) - return NIL(Sfio_t *); - else if (!pf->pool || pf->pool == &_Sfpool) - return pf; - else - return pf->pool->sf[0]; - } - - if (f) { /* check for permissions */ - SFMTXLOCK(f); - if ((f->mode & SF_RDWR) != f->mode && _sfmode(f, 0, 0) < 0) { - SFMTXUNLOCK(f); - return NIL(Sfio_t *); - } - if (f->disc == _Sfudisc) - (void) sfclose((*_Sfstack) (f, NIL(Sfio_t *))); - } - if (pf) { - SFMTXLOCK(pf); - if ((pf->mode & SF_RDWR) != pf->mode && _sfmode(pf, 0, 0) < 0) { - if (f) - SFMTXUNLOCK(f); - SFMTXUNLOCK(pf); - return NIL(Sfio_t *); - } - if (pf->disc == _Sfudisc) - (void) sfclose((*_Sfstack) (pf, NIL(Sfio_t *))); - } - - /* f already in the same pool with pf */ - if (f == pf || (pf && f->pool == pf->pool && f->pool != &_Sfpool)) { - if (f) - SFMTXUNLOCK(f); - if (pf) - SFMTXUNLOCK(pf); - return pf; - } - - /* lock streams before internal manipulations */ - rv = NIL(Sfio_t *); - SFLOCK(f, 0); - if (pf) - SFLOCK(pf, 0); - - if (!pf) { /* deleting f from its current pool */ - if (!(p = f->pool) || p == &_Sfpool || - _sfpmove(f, -1) < 0 || _sfsetpool(f) < 0) - goto done; - - if ((p = f->pool) == &_Sfpool || p->n_sf <= 0) - rv = f; - else - rv = p->sf[0]; /* return head of pool */ - goto done; - } - - if (pf->pool && pf->pool != &_Sfpool) /* always use current mode */ - mode = pf->pool->mode; - - if (mode & SF_SHARE) { /* can only have write streams */ - if (SFMODE(f, 1) != SF_WRITE && _sfmode(f, SF_WRITE, 1) < 0) - goto done; - if (SFMODE(pf, 1) != SF_WRITE && _sfmode(pf, SF_WRITE, 1) < 0) - goto done; - if (f->next > f->data && SFSYNC(f) < 0) /* start f clean */ - goto done; - } - - if (_sfpmove(f, -1) < 0) /* isolate f from current pool */ - goto done; - - if (!(p = pf->pool) || p == &_Sfpool) { /* making a new pool */ - if (!(p = newpool(mode))) - goto done; - if (_sfpmove(pf, -1) < 0) /* isolate pf from its current pool */ - goto done; - pf->pool = p; - p->sf[0] = pf; - p->n_sf += 1; - } - - f->pool = p; /* add f to pf's pool */ - if (_sfsetpool(f) < 0) - goto done; - - /**/ ASSERT(p->sf[0] == pf && p->sf[p->n_sf - 1] == f); - SFOPEN(pf, 0); - SFOPEN(f, 0); - if (_sfpmove(f, 0) < 0) /* make f head of pool */ - goto done; - rv = pf; - - done: - if (f) { - SFOPEN(f, 0); - SFMTXUNLOCK(f); - } - if (pf) { - SFOPEN(pf, 0); - SFMTXUNLOCK(pf); - } - return rv; -} diff --git a/internal/ccall/sfio/sfpopen.c b/internal/ccall/sfio/sfpopen.c deleted file mode 100644 index 55810d7..0000000 --- a/internal/ccall/sfio/sfpopen.c +++ /dev/null @@ -1,243 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Create a coprocess. -** Written by Kiem-Phong Vo. -*/ - -#define EXIT_NOTFOUND 127 - -#define READ 0 -#define WRITE 1 - -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif -static char Meta[1 << CHAR_BIT], **Path; - -/* execute command directly if possible; else use the shell */ -static void execute(const char *argcmd) -{ - reg char *s, *cmd, **argv, **p, *interp; - reg int n; - - /* define interpreter */ - if (!(interp = getenv("SHELL")) || !interp[0]) - interp = "/bin/sh"; - - if (strcmp(interp, "/bin/sh") != 0 && strcmp(interp, "/bin/ksh") != 0) { - if (access(interp, X_OK) == 0) - goto do_interp; - else - interp = "/bin/sh"; - } - - /* if there is a meta character, let the shell do it */ - for (s = (char *) argcmd; *s; ++s) - if (Meta[(uchar) s[0]]) - goto do_interp; - - /* try to construct argv */ - if (!(cmd = (char *) malloc(strlen(argcmd) + 1))) - goto do_interp; - strcpy(cmd, argcmd); - if (!(argv = (char **) malloc(16 * sizeof(char *)))) - goto do_interp; - for (n = 0, s = cmd;;) { - while (isspace(s[0])) - s += 1; - if (s[0] == 0) - break; - - /* new argument */ - argv[n++] = s; - if ((n % 16) == 0 - && !(argv = - (char **) realloc(argv, (n + 16) * sizeof(char *)))) - goto do_interp; - - /* make this into a C string */ - while (s[0] && !isspace(s[0])) - s += 1; - if (!s[0]) - *s++ = 0; - } - if (n == 0) - goto do_interp; - argv[n] = NIL(char *); - - /* get the command name */ - cmd = argv[0]; - for (s = cmd + strlen(cmd) - 1; s >= cmd; --s) - if (*s == '/') - break; - argv[0] = s + 1; - - /* Non-standard pathnames as in nDFS should be handled by the shell */ - for (s = cmd + strlen(cmd) - 1; s >= cmd + 2; --s) - if (s[0] == '.' && s[-1] == '.' && s[-2] == '.') - goto do_interp; - - if (cmd[0] == '/' || - (cmd[0] == '.' && cmd[1] == '/') || - (cmd[0] == '.' && cmd[1] == '.' && cmd[2] == '/')) { - if (access(cmd, X_OK) != 0) - goto do_interp; - else - execv(cmd, argv); - } else { - for (p = Path; *p; ++p) { - s = sfprints("%s/%s", *p, cmd); - if (access(s, X_OK) == 0) - execv(s, argv); - } - } - - /* if get here, let the interpreter do it */ - do_interp: - for (s = interp + strlen(interp) - 1; s >= interp; --s) - if (*s == '/') - break; - execl(interp, s + 1, "-c", argcmd, NIL(char *)); - _exit(EXIT_NOTFOUND); -} - -#ifndef WIN32 -/** - * @param f - * @param command command to execute - * @param mode mode of the stream - */ -Sfio_t *sfpopen(Sfio_t * f, const char *command, const char *mode) -{ - reg int pid, fd, pkeep, ckeep, sflags; - int stdio, parent[2], child[2]; - Sfio_t sf; - - /* set shell meta characters */ - if (Meta[0] == 0) { - reg char *s; - Meta[0] = 1; - for (s = "!@#$%&*(){}[]:;<>~`'|\"\\"; *s; ++s) - Meta[(uchar) s[0]] = 1; - } - if (!Path) - Path = _sfgetpath("PATH"); - - /* sanity check */ - if (!command || !command[0] - || !(sflags = _sftype(mode, NIL(int *), NIL(int *)))) - return NIL(Sfio_t *); - - /* make pipes */ - parent[0] = parent[1] = child[0] = child[1] = -1; - if (pipe(parent) < 0) - goto error; - if ((sflags & SF_RDWR) == SF_RDWR && pipe(child) < 0) - goto error; - - switch ((pid = fork())) { - default: /* in parent process */ - if (sflags & SF_READ) { - pkeep = READ; - ckeep = WRITE; - } else { - pkeep = WRITE; - ckeep = READ; - } - - if (f == (Sfio_t *) (-1)) { /* stdio compatibility mode */ - f = NIL(Sfio_t *); - stdio = 1; - } else - stdio = 0; - - /* make the streams */ - if (! - (f = - sfnew(f, NIL(void *), (size_t) SF_UNBOUND, parent[pkeep], - sflags))) - goto error; - CLOSE(parent[!pkeep]); - SETCLOEXEC(parent[pkeep]); - - if ((sflags & SF_RDWR) == SF_RDWR) { - CLOSE(child[!ckeep]); - SETCLOEXEC(child[ckeep]); - } - - /* save process info */ - fd = (sflags & SF_RDWR) == SF_RDWR ? child[ckeep] : -1; - if (_sfpopen(f, fd, pid, stdio) < 0) { - (void) sfclose(f); - goto error; - } - - return f; - - case 0: /* in child process */ - /* determine what to keep */ - if (sflags & SF_READ) { - pkeep = WRITE; - ckeep = READ; - } else { - pkeep = READ; - ckeep = WRITE; - } - - /* zap fd that we don't need */ - CLOSE(parent[!pkeep]); - if ((sflags & SF_RDWR) == SF_RDWR) - CLOSE(child[!ckeep]); - - /* use sfsetfd to make these descriptors the std-ones */ - SFCLEAR(&sf, NIL(Vtmutex_t *)); - - /* must be careful so not to close something useful */ - if ((sflags & SF_RDWR) == SF_RDWR && pkeep == child[ckeep]) - if ((child[ckeep] = dup(pkeep)) < 0) - _exit(EXIT_NOTFOUND); - - if (parent[pkeep] != pkeep) { - sf.file = parent[pkeep]; - CLOSE(pkeep); - if (sfsetfd(&sf, pkeep) != pkeep) - _exit(EXIT_NOTFOUND); - } - - if ((sflags & SF_RDWR) == SF_RDWR && child[ckeep] != ckeep) { - sf.file = child[ckeep]; - CLOSE(ckeep); - if (sfsetfd(&sf, ckeep) != ckeep) - _exit(EXIT_NOTFOUND); - } - - execute(command); - return NIL(Sfio_t *); - - case -1: /* error */ - error: - if (parent[0] >= 0) { - CLOSE(parent[0]); - CLOSE(parent[1]); - } - if (child[0] >= 0) { - CLOSE(child[0]); - CLOSE(child[1]); - } - return NIL(Sfio_t *); - } -} -#endif diff --git a/internal/ccall/sfio/sfprintf.c b/internal/ccall/sfio/sfprintf.c deleted file mode 100644 index 62521ee..0000000 --- a/internal/ccall/sfio/sfprintf.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Print data with a given format -** -** Written by Kiem-Phong Vo. -*/ - -int sfprintf(Sfio_t * f, const char *form, ...) -{ - va_list args; - reg int rv; - - va_start(args, form); - rv = sfvprintf(f, form, args); - - va_end(args); - return rv; -} - -int sfvsprintf(char *s, int n, const char *form, va_list args) -{ - Sfio_t f; - reg int rv; - - if (!s || n <= 0) - return -1; - - /* make a fake stream */ - SFCLEAR(&f, NIL(Vtmutex_t *)); - f.flags = SF_STRING | SF_WRITE; - f.bits = SF_PRIVATE; - f.mode = SF_WRITE; - f.size = n - 1; - f.data = f.next = f.endr = (uchar *) s; - f.endb = f.endw = f.data + f.size; - - rv = sfvprintf(&f, form, args); - *f.next = '\0'; - _Sfi = f.next - f.data; - - return rv; -} - -int sfsprintf(char *s, int n, const char *form, ...) -{ - va_list args; - reg int rv; - va_start(args, form); - rv = sfvsprintf(s, n, form, args); - va_end(args); - - return rv; -} diff --git a/internal/ccall/sfio/sfprints.c b/internal/ccall/sfio/sfprints.c deleted file mode 100644 index 1d933df..0000000 --- a/internal/ccall/sfio/sfprints.c +++ /dev/null @@ -1,47 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Construct a string with the given format and data. -** This function allocates space as necessary to store the string. -** This avoids overflow problems typical with sprintf() in stdio. -** -** Written by Kiem-Phong Vo. -*/ - -char *sfprints(const char *form, ...) -{ - va_list args; - reg int rv; - static Sfio_t *f; - va_start(args, form); - - /* make a fake stream */ - if (!f && - !(f = sfnew(NIL(Sfio_t *), NIL(char *), (size_t) SF_UNBOUND, - -1, SF_WRITE | SF_STRING))) { - va_end(args); - return NIL(char *); - } - - sfseek(f, (Sfoff_t) 0, 0); - rv = sfvprintf(f, form, args); - va_end(args); - - if (rv < 0 || sfputc(f, '\0') < 0) - return NIL(char *); - - _Sfi = (f->next - f->data) - 1; - return (char *) f->data; -} diff --git a/internal/ccall/sfio/sfpurge.c b/internal/ccall/sfio/sfpurge.c deleted file mode 100644 index 58da67e..0000000 --- a/internal/ccall/sfio/sfpurge.c +++ /dev/null @@ -1,86 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Delete all pending data in the buffer -** -** Written by Kiem-Phong Vo. -*/ - -int sfpurge(reg Sfio_t * f) -{ - reg int mode; - - SFMTXSTART(f, -1); - - if ((mode = f->mode & SF_RDWR) != (int) f->mode - && _sfmode(f, mode, 0) < 0) - SFMTXRETURN(f, -1); - - if ((f->flags & SF_IOCHECK) && f->disc && f->disc->exceptf) - (void) (*f->disc->exceptf) (f, SF_PURGE, (void *) ((int) 1), - f->disc); - - if (f->disc == _Sfudisc) - (void) sfclose((*_Sfstack) (f, NIL(Sfio_t *))); - - /* cannot purge read string streams */ - if ((f->flags & SF_STRING) && (f->mode & SF_READ)) - goto done; - - SFLOCK(f, 0); - - /* if memory map must be a read stream, pretend data is gone */ -#ifdef MAP_TYPE - if (f->bits & SF_MMAP) { - f->here -= f->endb - f->next; - if (f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - SFSK(f, f->here, SEEK_SET, f->disc); - } - SFOPEN(f, 0); - SFMTXRETURN(f, 0); - } -#endif - - switch (f->mode & ~SF_LOCK) { - default: - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - case SF_WRITE: - f->next = f->data; - if (!f->proc || !(f->flags & SF_READ) || !(f->mode & SF_WRITE)) - break; - - /* 2-way pipe, must clear read buffer */ - (void) _sfmode(f, SF_READ, 1); - /* fall through */ - case SF_READ: - if (f->extent >= 0 && f->endb > f->next) { - f->here -= f->endb - f->next; - SFSK(f, f->here, SEEK_SET, f->disc); - } - f->endb = f->next = f->data; - break; - } - - SFOPEN(f, 0); - - done: - if ((f->flags & SF_IOCHECK) && f->disc && f->disc->exceptf) - (void) (*f->disc->exceptf) (f, SF_PURGE, (void *) ((int) 0), - f->disc); - - SFMTXRETURN(f, 0); -} diff --git a/internal/ccall/sfio/sfputd.c b/internal/ccall/sfio/sfputd.c deleted file mode 100644 index e5459ee..0000000 --- a/internal/ccall/sfio/sfputd.c +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -#include - -/* Write out a floating point value in a portable format -** -** Written by Kiem-Phong Vo. -*/ - -int _sfputd(Sfio_t * f, Sfdouble_t v) -{ -#define N_ARRAY (16*sizeof(Sfdouble_t)) - reg ssize_t n, w; - reg uchar *s, *ends; - int exp; - uchar c[N_ARRAY]; - double x; - - SFMTXSTART(f, -1); - - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - /* get the sign of v */ - if (v < 0.) { - v = -v; - n = 1; - } else - n = 0; - -#if !defined(_ast_fltmax_double) /* don't know how to do these yet */ - if (v > DBL_MAX && !_has_expfuncs) { - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - } -#endif - - /* make the magnitude of v < 1 */ - if (v != 0.) - v = frexp(v, &exp); - else - exp = 0; - - /* code the sign of v and exp */ - if ((w = exp) < 0) { - n |= 02; - w = -w; - } - - /* write out the signs and the exp */ - SFOPEN(f, 0); - if (sfputc(f, n) < 0 || (w = sfputu(f, w)) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - w += 1; - - s = (ends = &c[0]) + sizeof(c); - while (s > ends) { /* get 2^SF_PRECIS precision at a time */ - n = (int) (x = ldexp(v, SF_PRECIS)); - *--s = n | SF_MORE; - v = x - n; - if (v <= 0.) - break; - } - - /* last byte is not SF_MORE */ - ends = &c[0] + sizeof(c) - 1; - *ends &= ~SF_MORE; - - /* write out coded bytes */ - n = ends - s + 1; - w = SFWRITE(f, (void *) s, n) == n ? w + n : -1; - - SFOPEN(f, 0); - SFMTXRETURN(f, w); -} diff --git a/internal/ccall/sfio/sfputl.c b/internal/ccall/sfio/sfputl.c deleted file mode 100644 index 14a8690..0000000 --- a/internal/ccall/sfio/sfputl.c +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write out a long value in a portable format -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f write a portable long to this stream - * @param v the value to be written - */ -int _sfputl(reg Sfio_t * f, Sflong_t v) -{ -#define N_ARRAY (2*sizeof(Sflong_t)) - reg uchar *s, *ps; - reg ssize_t n, p; - uchar c[N_ARRAY]; - - SFMTXSTART(f, -1); - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - s = ps = &(c[N_ARRAY - 1]); - if (v < 0) { /* add 1 to avoid 2-complement problems with -SF_MAXINT */ - v = -(v + 1); - *s = (uchar) (SFSVALUE(v) | SF_SIGN); - } else - *s = (uchar) (SFSVALUE(v)); - v = (Sfulong_t) v >> SF_SBITS; - - while (v > 0) { - *--s = (uchar) (SFUVALUE(v) | SF_MORE); - v = (Sfulong_t) v >> SF_UBITS; - } - n = (ps - s) + 1; - - if (n > 8 || SFWPEEK(f, ps, p) < n) - n = SFWRITE(f, (void *) s, n); /* write the hard way */ - else { - switch (n) { - case 8: - *ps++ = *s++; - case 7: - *ps++ = *s++; - case 6: - *ps++ = *s++; - case 5: - *ps++ = *s++; - case 4: - *ps++ = *s++; - case 3: - *ps++ = *s++; - case 2: - *ps++ = *s++; - case 1: - *ps++ = *s++; - } - f->next = ps; - } - - SFOPEN(f, 0); - SFMTXRETURN(f, n); -} diff --git a/internal/ccall/sfio/sfputm.c b/internal/ccall/sfio/sfputm.c deleted file mode 100644 index 517fcb3..0000000 --- a/internal/ccall/sfio/sfputm.c +++ /dev/null @@ -1,74 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write out an unsigned long value in a portable format. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f write a portable ulong to this stream - * @param v the unsigned value to be written - * @param max the max value of the range - */ -int _sfputm(reg Sfio_t * f, Sfulong_t v, Sfulong_t max) -{ -#define N_ARRAY (2*sizeof(Sfulong_t)) - reg uchar *s, *ps; - reg ssize_t n, p; - uchar c[N_ARRAY]; - - SFMTXSTART(f, -1); - - if (v > max || (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0)) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - /* code v as integers in base SF_UBASE */ - s = ps = &(c[N_ARRAY - 1]); - *s = (uchar) SFBVALUE(v); - while ((max >>= SF_BBITS) > 0) { - v >>= SF_BBITS; - *--s = (uchar) SFBVALUE(v); - } - n = (ps - s) + 1; - - if (n > 8 || SFWPEEK(f, ps, p) < n) - n = SFWRITE(f, (void *) s, n); /* write the hard way */ - else { - switch (n) { - case 8: - *ps++ = *s++; - case 7: - *ps++ = *s++; - case 6: - *ps++ = *s++; - case 5: - *ps++ = *s++; - case 4: - *ps++ = *s++; - case 3: - *ps++ = *s++; - case 2: - *ps++ = *s++; - case 1: - *ps++ = *s++; - } - f->next = ps; - } - - SFOPEN(f, 0); - SFMTXRETURN(f, (int) n); -} diff --git a/internal/ccall/sfio/sfputr.c b/internal/ccall/sfio/sfputr.c deleted file mode 100644 index ecde414..0000000 --- a/internal/ccall/sfio/sfputr.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Put out a null-terminated string -** -** Written by Kiem-Phong Vo. -*/ -/** - * @param f write to this stream - * @param s string to write - * @param rc record separator - */ -ssize_t sfputr(reg Sfio_t * f, const char *s, reg int rc) -{ - reg ssize_t p, n, w; - reg uchar *ps; - - SFMTXSTART(f, -1); - - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, -1); - - SFLOCK(f, 0); - - for (w = 0; (*s || rc >= 0);) { - SFWPEEK(f, ps, p); - - if (p == 0 || (f->flags & SF_WHOLE)) { - n = strlen(s); - if (p >= (n + (rc < 0 ? 0 : 1))) { /* buffer can hold everything */ - if (n > 0) { - memcpy(ps, s, n); - ps += n; - w += n; - } - if (rc >= 0) { - *ps++ = rc; - w += 1; - } - f->next = ps; - } else { /* create a reserve buffer to hold data */ - Sfrsrv_t *rsrv; - - p = n + (rc >= 0 ? 1 : 0); - if (!(rsrv = _sfrsrv(f, p))) - n = 0; - else { - if (n > 0) - memcpy(rsrv->data, s, n); - if (rc >= 0) - rsrv->data[n] = rc; - if ((n = SFWRITE(f, rsrv->data, p)) < 0) - n = 0; - } - - w += n; - } - break; - } - - if (*s == 0) { - *ps++ = rc; - f->next = ps; - w += 1; - break; - } -#if _lib_memccpy - if ((ps = (uchar *) memccpy(ps, s, '\0', p)) != NIL(uchar *)) - ps -= 1; - else - ps = f->next + p; - s += ps - f->next; -#else - for (; p > 0; --p, ++ps, ++s) - if ((*ps = *s) == 0) - break; -#endif - w += ps - f->next; - f->next = ps; - } - - /* sync unseekable shared streams */ - if (f->extent < 0 && (f->flags & SF_SHARE)) - (void) SFFLSBUF(f, -1); - - /* check for line buffering */ - else if ((f->flags & SF_LINE) && !(f->flags & SF_STRING) - && (n = f->next - f->data) > 0) { - if (n > w) - n = w; - f->next -= n; - (void) SFWRITE(f, (void *) f->next, n); - } - - SFOPEN(f, 0); - SFMTXRETURN(f, w); -} diff --git a/internal/ccall/sfio/sfputu.c b/internal/ccall/sfio/sfputu.c deleted file mode 100644 index 2324d54..0000000 --- a/internal/ccall/sfio/sfputu.c +++ /dev/null @@ -1,73 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write out an unsigned long value in a portable format. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f write a portable ulong to this stream - * @param v the unsigned value to be written - * @param - * @param - */ -int _sfputu(reg Sfio_t * f, Sfulong_t v) -{ -#define N_ARRAY (2*sizeof(Sfulong_t)) - reg uchar *s, *ps; - reg ssize_t n, p; - uchar c[N_ARRAY]; - - SFMTXSTART(f, -1); - - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - /* code v as integers in base SF_UBASE */ - s = ps = &(c[N_ARRAY - 1]); - *s = (uchar) SFUVALUE(v); - while ((v >>= SF_UBITS)) - *--s = (uchar) (SFUVALUE(v) | SF_MORE); - n = (ps - s) + 1; - - if (n > 8 || SFWPEEK(f, ps, p) < n) - n = SFWRITE(f, (void *) s, n); /* write the hard way */ - else { - switch (n) { - case 8: - *ps++ = *s++; - case 7: - *ps++ = *s++; - case 6: - *ps++ = *s++; - case 5: - *ps++ = *s++; - case 4: - *ps++ = *s++; - case 3: - *ps++ = *s++; - case 2: - *ps++ = *s++; - case 1: - *ps++ = *s++; - } - f->next = ps; - } - - SFOPEN(f, 0); - SFMTXRETURN(f, (int) n); -} diff --git a/internal/ccall/sfio/sfraise.c b/internal/ccall/sfio/sfraise.c deleted file mode 100644 index 9abecaa..0000000 --- a/internal/ccall/sfio/sfraise.c +++ /dev/null @@ -1,64 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Invoke event handlers for a stream -** -** Written by Kiem-Phong Vo. -*/ -/** - * @param f stream - * @param type type of event - * @param data associated data - * @param - */ -int sfraise(Sfio_t * f, int type, void * data) -{ - reg Sfdisc_t *disc, *next, *d; - reg int local, rv; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - if (!SFKILLED(f) && - !(local && - (type == SF_NEW || type == SF_CLOSING || - type == SF_FINAL || type == SF_ATEXIT)) && - SFMODE(f, local) != (f->mode & SF_RDWR) - && _sfmode(f, 0, local) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, local); - - for (disc = f->disc; disc;) { - next = disc->disc; - - if (disc->exceptf) { - SFOPEN(f, 0); - if ((rv = (*disc->exceptf) (f, type, data, disc)) != 0) - SFMTXRETURN(f, rv); - SFLOCK(f, 0); - } - - if ((disc = next)) { /* make sure that "next" hasn't been popped */ - for (d = f->disc; d; d = d->disc) - if (d == disc) - break; - if (!d) - disc = f->disc; - } - } - - SFOPEN(f, local); - SFMTXRETURN(f, 0); -} diff --git a/internal/ccall/sfio/sfrd.c b/internal/ccall/sfio/sfrd.c deleted file mode 100644 index 5605589..0000000 --- a/internal/ccall/sfio/sfrd.c +++ /dev/null @@ -1,296 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Internal function to do a hard read. -** This knows about discipline and memory mapping, peek read. -** -** Written by Kiem-Phong Vo. -*/ - -/* synchronize unseekable write streams */ -static void _sfwrsync(void) -{ - reg Sfpool_t *p; - reg Sfio_t *f; - reg int n; - - /* sync all pool heads */ - for (p = _Sfpool.next; p; p = p->next) { - if (p->n_sf <= 0) - continue; - f = p->sf[0]; - if (!SFFROZEN(f) && f->next > f->data && - (f->mode & SF_WRITE) && f->extent < 0) - (void) _sfflsbuf(f, -1); - } - - /* and all the ones in the discrete pool */ - for (n = 0; n < _Sfpool.n_sf; ++n) { - f = _Sfpool.sf[n]; - - if (!SFFROZEN(f) && f->next > f->data && - (f->mode & SF_WRITE) && f->extent < 0) - (void) _sfflsbuf(f, -1); - } -} - -ssize_t sfrd(reg Sfio_t * f, reg void * buf, reg size_t n, - Sfdisc_t * disc) -{ - Sfoff_t r; - reg Sfdisc_t *dc; - reg int local, rcrv, dosync, oerrno; - - SFMTXSTART(f, -1); - - GETLOCAL(f, local); - if ((rcrv = f->mode & (SF_RC | SF_RV))) - f->mode &= ~(SF_RC | SF_RV); - f->bits &= ~SF_JUSTSEEK; - - if (f->mode & SF_PKRD) - SFMTXRETURN(f, -1); - - if (!local && !(f->bits & SF_DCDOWN)) { /* an external user's call */ - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, -1); - if (f->next < f->endb) { - if (SFSYNC(f) < 0) - SFMTXRETURN(f, -1); -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - f->next = f->endb = f->endr = f->endw = f->data; - } - } - - for (dosync = 0;;) { /* stream locked by sfsetfd() */ - if (!(f->flags & SF_STRING) && f->file < 0) - SFMTXRETURN(f, 0); - - f->flags &= ~(SF_EOF | SF_ERROR); - - dc = disc; - if (f->flags & SF_STRING) { - if ((r = (f->data + f->extent) - f->next) < 0) - r = 0; - if (r <= 0) - goto do_except; - SFMTXRETURN(f, (ssize_t) r); - } - - /* warn that a read is about to happen */ - SFDISC(f, dc, readf); - if (dc && dc->exceptf && (f->flags & SF_IOCHECK)) { - reg int rv; - if (local) - SETLOCAL(f); - if ((rv = _sfexcept(f, SF_READ, n, dc)) > 0) - n = rv; - else if (rv < 0) { - f->flags |= SF_ERROR; - SFMTXRETURN(f, (ssize_t) rv); - } - } -#ifdef MAP_TYPE - if (f->bits & SF_MMAP) { - reg ssize_t a, round; - Stat_t st; - - /* determine if we have to copy data to buffer */ - if ((uchar *) buf >= f->data && (uchar *) buf <= f->endb) { - n += f->endb - f->next; - buf = NIL(char *); - } - - /* actual seek location */ - if ((f->flags & (SF_SHARE | SF_PUBLIC)) == - (SF_SHARE | SF_PUBLIC) - && (r = SFSK(f, (Sfoff_t) 0, SEEK_CUR, dc)) != f->here) - f->here = r; - else - f->here -= f->endb - f->next; - - /* before mapping, make sure we have data to map */ - if ((f->flags & SF_SHARE) - || (size_t) (r = f->extent - f->here) < n) { - if ((r = fstat(f->file, &st)) < 0) - goto do_except; - if ((r = (f->extent = st.st_size) - f->here) <= 0) { - r = 0; /* eof */ - goto do_except; - } - } - - /* make sure current position is page aligned */ - if ((a = (size_t) (f->here % _Sfpage)) != 0) { - f->here -= a; - r += a; - } - - /* map minimal requirement */ - if (r > (round = (1 + (n + a) / f->size) * f->size)) - r = round; - - if (f->data) - SFMUNMAP(f, f->data, f->endb - f->data); - - for (;;) { - f->data = (uchar *) mmap((caddr_t) 0, (size_t) r, - (PROT_READ | PROT_WRITE), - MAP_PRIVATE, - f->file, (off_t) f->here); - if (f->data && (caddr_t) f->data != (caddr_t) (-1)) - break; - else { - f->data = NIL(uchar *); - if ((r >>= 1) < (_Sfpage * SF_NMAP) || - (errno != EAGAIN && errno != ENOMEM)) - break; - } - } - - if (f->data) { - if (f->bits & SF_SEQUENTIAL) - SFMMSEQON(f, f->data, r); - f->next = f->data + a; - f->endr = f->endb = f->data + r; - f->endw = f->data; - f->here += r; - - /* make known our seek location */ - (void) SFSK(f, f->here, SEEK_SET, dc); - - if (buf) { - if (n > (size_t) (r - a)) - n = (ssize_t) (r - a); - memcpy(buf, f->next, n); - f->next += n; - } else - n = f->endb - f->next; - - SFMTXRETURN(f, n); - } else { - r = -1; - f->here += a; - - /* reset seek pointer to its physical location */ - (void) SFSK(f, f->here, SEEK_SET, dc); - - /* make a buffer */ - (void) SFSETBUF(f, (void *) f->tiny, - (size_t) SF_UNBOUND); - - if (!buf) { - buf = (void *) f->data; - n = f->size; - } - } - } -#endif - - /* sync unseekable write streams to prevent deadlock */ - if (!dosync && f->extent < 0) { - dosync = 1; - _sfwrsync(); - } - - /* make sure file pointer is right */ - if (f->extent >= 0 && (f->flags & SF_SHARE)) { - if (!(f->flags & SF_PUBLIC)) - f->here = SFSK(f, f->here, SEEK_SET, dc); - else - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, dc); - } - - oerrno = errno; - errno = 0; - - if (dc && dc->readf) { - int share = f->flags & SF_SHARE; - - if (rcrv) /* pass on rcrv for possible continuations */ - f->mode |= rcrv; - /* tell readf that no peeking necessary */ - else - f->flags &= ~SF_SHARE; - - SFDCRD(f, buf, n, dc, r); - - /* reset flags */ - if (rcrv) - f->mode &= ~rcrv; - else - f->flags |= share; - } else if (SFISNULL(f)) - r = 0; - else if (f->extent < 0 && (f->flags & SF_SHARE) && rcrv) { /* try peek read */ - r = sfpkrd(f->file, (char *) buf, n, - (rcrv & SF_RC) ? (int) f->getr : -1, - -1L, (rcrv & SF_RV) ? 1 : 0); - if (r > 0) { - if (rcrv & SF_RV) - f->mode |= SF_PKRD; - else - f->mode |= SF_RC; - } - } else - r = read(f->file, buf, n); - - if (errno == 0) - errno = oerrno; - - if (r > 0) { - if (!(f->bits & SF_DCDOWN)) { /* not a continuation call */ - if (!(f->mode & SF_PKRD)) { - f->here += r; - if (f->extent >= 0 && f->extent < f->here) - f->extent = f->here; - } - if ((uchar *) buf >= f->data && - (uchar *) buf < f->data + f->size) - f->endb = f->endr = ((uchar *) buf) + r; - } - - SFMTXRETURN(f, (ssize_t) r); - } - - do_except: - if (local) - SETLOCAL(f); - switch (_sfexcept(f, SF_READ, (ssize_t) r, dc)) { - case SF_ECONT: - goto do_continue; - case SF_EDONE: - n = local ? 0 : (ssize_t) r; - SFMTXRETURN(f, n); - case SF_EDISC: - if (!local && !(f->flags & SF_STRING)) - goto do_continue; - /* else fall thru */ - case SF_ESTACK: - SFMTXRETURN(f, -1); - } - - do_continue: - for (dc = f->disc; dc; dc = dc->disc) - if (dc == disc) - break; - disc = dc; - } -} diff --git a/internal/ccall/sfio/sfread.c b/internal/ccall/sfio/sfread.c deleted file mode 100644 index eb8d1c2..0000000 --- a/internal/ccall/sfio/sfread.c +++ /dev/null @@ -1,127 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read n bytes from a stream into a buffer -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f read from this stream - * @param buf buffer to read into - * @param n number of bytes to be read - * @param - */ -ssize_t sfread(reg Sfio_t * f, void * buf, reg size_t n) -{ - reg uchar *s, *begs; - reg ssize_t r; - reg int local, justseek; - - SFMTXSTART(f, (ssize_t) (-1)); - - GETLOCAL(f, local); - justseek = f->bits & SF_JUSTSEEK; - f->bits &= ~SF_JUSTSEEK; - - if (!buf) - SFMTXRETURN(f, (ssize_t) (-1)); - - /* release peek lock */ - if (f->mode & SF_PEEK) { - if (!(f->mode & SF_READ)) - SFMTXRETURN(f, (ssize_t) (-1)); - - if (f->mode & SF_GETR) { - if (((uchar *) buf + f->val) != f->next && - (!f->rsrv || f->rsrv->data != (uchar *) buf)) - SFMTXRETURN(f, (ssize_t) (-1)); - f->mode &= ~SF_PEEK; - SFMTXRETURN(f, 0); - } else { - if ((uchar *) buf != f->next) - SFMTXRETURN(f, (ssize_t) (-1)); - f->mode &= ~SF_PEEK; - if (f->mode & SF_PKRD) { /* actually read the data now */ - f->mode &= ~SF_PKRD; - if (n > 0) - n = (r = read(f->file, f->data, n)) < 0 ? 0 : r; - f->endb = f->data + n; - f->here += n; - } - f->next += n; - f->endr = f->endb; - SFMTXRETURN(f, n); - } - } - - s = begs = (uchar *) buf; - for (;; f->mode &= ~SF_LOCK) { /* check stream mode */ - if (SFMODE(f, local) != SF_READ && _sfmode(f, SF_READ, local) < 0) { - n = s > begs ? s - begs : (size_t) (-1); - SFMTXRETURN(f, (ssize_t) n); - } - - SFLOCK(f, local); - - if ((r = f->endb - f->next) > 0) { /* has buffered data */ - if (r > (ssize_t) n) - r = (ssize_t) n; - if (s != f->next) - memcpy(s, f->next, r); - f->next += r; - s += r; - n -= r; - } - - if (n <= 0) /* all done */ - break; - - if (!(f->flags & SF_STRING) && !(f->bits & SF_MMAP)) { - f->next = f->endb = f->data; - - /* exact IO is desirable for these cases */ - if (SFDIRECT(f, n) || ((f->flags & SF_SHARE) && f->extent < 0)) - r = (ssize_t) n; - else if (justseek && n <= f->iosz && f->iosz <= f->size) - r = f->iosz; /* limit buffering */ - else - r = f->size; /* full buffering */ - - /* if read almost full size, then just do it direct */ - if (r > (ssize_t) n && (r - r / 8) <= (ssize_t) n) - r = (ssize_t) n; - - /* read directly to user's buffer */ - if (r == (ssize_t) n && (r = SFRD(f, s, r, f->disc)) >= 0) { - s += r; - n -= r; - if (r == 0 || n == 0) /* eof or eob */ - break; - } else - goto do_filbuf; - } else { - do_filbuf: - if (justseek) - f->bits |= SF_JUSTSEEK; - if (SFFILBUF(f, -1) <= 0) - break; - } - } - - SFOPEN(f, local); - r = s - begs; - SFMTXRETURN(f, r); -} diff --git a/internal/ccall/sfio/sfreserve.c b/internal/ccall/sfio/sfreserve.c deleted file mode 100644 index 0ac6d3e..0000000 --- a/internal/ccall/sfio/sfreserve.c +++ /dev/null @@ -1,148 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Reserve a segment of data or buffer. -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f file to peek - * @param size size of peek - * @param type LOCKR: lock stream, LASTR: last record - */ -void *sfreserve(reg Sfio_t * f, ssize_t size, int type) -{ - reg ssize_t n, sz; - reg Sfrsrv_t *rsrv; - reg void *data; - reg int mode; - - SFMTXSTART(f, NIL(void *)); - - /* initialize io states */ - rsrv = NIL(Sfrsrv_t *); - _Sfi = f->val = -1; - - /* return the last record */ - if (type == SF_LASTR) { - if ((rsrv = f->rsrv) && (n = -rsrv->slen) > 0) { - rsrv->slen = 0; - _Sfi = f->val = n; - SFMTXRETURN(f, (void *) rsrv->data); - } else - SFMTXRETURN(f, NIL(void *)); - } - - if (type > 0 && !(type == SF_LOCKR || type == 1)) - SFMTXRETURN(f, NIL(void *)); - - if ((sz = size) == 0 && type != 0) { /* only return the current status and possibly lock stream */ - if ((f->mode & SF_RDWR) != f->mode && _sfmode(f, 0, 0) < 0) - SFMTXRETURN(f, NIL(void *)); - - SFLOCK(f, 0); - if ((n = f->endb - f->next) < 0) - n = 0; - - if (!f->data && type > 0) - rsrv = _sfrsrv(f, 0); - - goto done; - } - if (sz < 0) - sz = -sz; - - /* iterate until get to a stream that has data or buffer space */ - for (;;) { /* prefer read mode so that data is always valid */ - if (!(mode = (f->flags & SF_READ))) - mode = SF_WRITE; - if ((int) f->mode != mode && _sfmode(f, mode, 0) < 0) { - n = -1; - goto done; - } - - SFLOCK(f, 0); - - if ((n = f->endb - f->next) < 0) /* possible for string+rw */ - n = 0; - - if (n > 0 && n >= sz) /* all done */ - break; - - /* do a buffer refill or flush */ - if (f->mode & SF_WRITE) - (void) SFFLSBUF(f, -1); - else if (type > 0 && f->extent < 0 && (f->flags & SF_SHARE)) { - if (n == 0) { /* peek-read only if there is no buffered data */ - f->mode |= SF_RV; - (void) SFFILBUF(f, sz == 0 ? -1 : (sz - n)); - } - if ((n = f->endb - f->next) < sz) { - if (f->mode & SF_PKRD) { - f->endb = f->endr = f->next; - f->mode &= ~SF_PKRD; - } - goto done; - } - } else - (void) SFFILBUF(f, sz == 0 ? -1 : (sz - n)); - - /* now have data */ - if ((n = f->endb - f->next) > 0) - break; - else if (n < 0) - n = 0; - - /* this test fails only if unstacked to an opposite stream */ - if ((f->mode & mode) != 0) - break; - } - - if (n > 0 && n < sz && (f->mode & mode) != 0) { /* try to accomodate request size */ - if (f->flags & SF_STRING) { - if ((f->mode & SF_WRITE) && (f->flags & SF_MALLOC)) { - (void) SFWR(f, f->next, sz, f->disc); - n = f->endb - f->next; - } - } else if (f->mode & SF_WRITE) { - if (type > 0 && (rsrv = _sfrsrv(f, sz))) - n = sz; - } else { /*if(f->mode&SF_READ) */ - if (type <= 0 && (rsrv = _sfrsrv(f, sz)) && - (n = SFREAD(f, (void *) rsrv->data, sz)) < sz) - rsrv->slen = -n; - } - } - - done: - /* return true buffer size */ - _Sfi = f->val = n; - - SFOPEN(f, 0); - - if ((sz > 0 && n < sz) || (n == 0 && type <= 0)) - SFMTXRETURN(f, NIL(void *)); - - if ((data = rsrv ? (void *) rsrv->data : (void *) f->next)) { - if (type > 0) { - f->mode |= SF_PEEK; - f->endr = f->endw = f->data; - } else if (data == (void *) f->next) - f->next += (size >= 0 ? size : n); - } - - SFMTXRETURN(f, data); -} diff --git a/internal/ccall/sfio/sfresize.c b/internal/ccall/sfio/sfresize.c deleted file mode 100644 index 5d353e5..0000000 --- a/internal/ccall/sfio/sfresize.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Resize a stream. - Written by Kiem-Phong Vo. -*/ - -int sfresize(Sfio_t * f, Sfoff_t size) -{ - SFMTXSTART(f, -1); - - if (size < 0 || f->extent < 0 || - (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0)) - SFMTXRETURN(f, -1); - - SFLOCK(f, 0); - - if (f->flags & SF_STRING) { - SFSTRSIZE(f); - - if (f->extent >= size) { - if ((f->flags & SF_MALLOC) && (f->next - f->data) <= size) { - size_t s = (((size_t) size + 1023) / 1024) * 1024; - void *d; - if (s < f->size && (d = realloc(f->data, s))) { - f->data = d; - f->size = s; - f->extent = s; - } - } - memclear((char *) (f->data + size), (int) (f->extent - size)); - } else { - if (SFSK(f, size, SEEK_SET, f->disc) != size) - SFMTXRETURN(f, -1); - memclear((char *) (f->data + f->extent), - (int) (size - f->extent)); - } - } else { - if (f->next > f->data) - SFSYNC(f); -#if _lib_ftruncate - if (ftruncate(f->file, size) < 0) - SFMTXRETURN(f, -1); -#else - SFMTXRETURN(f, -1); -#endif - } - - f->extent = size; - - SFOPEN(f, 0); - - SFMTXRETURN(f, 0); -} diff --git a/internal/ccall/sfio/sfscanf.c b/internal/ccall/sfio/sfscanf.c deleted file mode 100644 index cf4e5ca..0000000 --- a/internal/ccall/sfio/sfscanf.c +++ /dev/null @@ -1,58 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Read formated data from a stream -** -** Written by Kiem-Phong Vo. -*/ - -int sfscanf(Sfio_t * f, const char *form, ...) -{ - va_list args; - reg int rv; - va_start(args, form); - rv = (f && form) ? sfvscanf(f, form, args) : -1; - va_end(args); - return rv; -} - -int sfvsscanf(const char *s, const char *form, va_list args) -{ - Sfio_t f; - - if (!s || !form) - return -1; - - /* make a fake stream */ - SFCLEAR(&f, NIL(Vtmutex_t *)); - f.flags = SF_STRING | SF_READ; - f.bits = SF_PRIVATE; - f.mode = SF_READ; - f.size = strlen((char *) s); - f.data = f.next = f.endw = (uchar *) s; - f.endb = f.endr = f.data + f.size; - - return sfvscanf(&f, form, args); -} - -int sfsscanf(const char *s, const char *form, ...) -{ - va_list args; - reg int rv; - va_start(args, form); - rv = (s && form) ? sfvsscanf(s, form, args) : -1; - va_end(args); - return rv; -} diff --git a/internal/ccall/sfio/sfseek.c b/internal/ccall/sfio/sfseek.c deleted file mode 100644 index 8dc08ea..0000000 --- a/internal/ccall/sfio/sfseek.c +++ /dev/null @@ -1,270 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Set the IO pointer to a specific location in the stream -** -** Written by Kiem-Phong Vo. -*/ - -static void newpos(Sfio_t * f, Sfoff_t p) -{ -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - f->next = f->endr = f->endw = f->data; - f->endb = (f->mode & SF_WRITE) ? f->data + f->size : f->data; - if ((f->here = p) < 0) { - f->extent = -1; - f->here = 0; - } -} - -/** - * @param f seek to a new location in this stream - * @param p place to seek to - * @param type 0: from org, 1: from here, 2: from end - */ -Sfoff_t sfseek(Sfio_t * f, Sfoff_t p, int type) -{ - Sfoff_t r, s; - size_t a, b, c; - int mode, local, hardseek, mustsync; - - SFMTXSTART(f, (Sfoff_t) (-1)); - - GETLOCAL(f, local); - - hardseek = (type | f->flags) & (SF_SHARE | SF_PUBLIC); - - if (hardseek && f->mode == (SF_READ | SF_SYNCED)) { - newpos(f, f->here); - f->mode = SF_READ; - } - - /* set and initialize the stream to a definite mode */ - if ((int) SFMODE(f, local) != (mode = f->mode & SF_RDWR)) { - int flags = f->flags; - - if (hardseek & SF_PUBLIC) /* seek ptr must follow file descriptor */ - f->flags |= SF_SHARE | SF_PUBLIC; - mode = _sfmode(f, mode, local); - if (hardseek & SF_PUBLIC) - f->flags = flags; - - if (mode < 0) - SFMTXRETURN(f, (Sfoff_t) (-1)); - } - - mustsync = (type & SF_SHARE) && !(type & SF_PUBLIC) && - (f->mode & SF_READ) && !(f->flags & SF_STRING); - - /* Xopen-compliant */ - if ((type &= (SEEK_SET | SEEK_CUR | SEEK_END)) != SEEK_SET && - type != SEEK_CUR && type != SEEK_END) { - errno = EINVAL; - SFMTXRETURN(f, (Sfoff_t) (-1)); - } - - if (f->extent < 0) { /* let system call set errno */ - (void) SFSK(f, (Sfoff_t) 0, SEEK_CUR, f->disc); - SFMTXRETURN(f, (Sfoff_t) (-1)); - } - - /* throw away ungetc data */ - if (f->disc == _Sfudisc) - (void) sfclose((*_Sfstack) (f, NIL(Sfio_t *))); - - /* lock the stream for internal manipulations */ - SFLOCK(f, local); - - /* clear error and eof bits */ - f->flags &= ~(SF_EOF | SF_ERROR); - - while (f->flags & SF_STRING) { - SFSTRSIZE(f); - - if (type == SEEK_CUR) - r = p + (f->next - f->data); - else if (type == SEEK_END) - r = p + f->extent; - else - r = p; - - if (r >= 0 && r <= f->size) { - p = r; - f->next = f->data + p; - f->here = p; - if (p > f->extent) - memclear((char *) (f->data + f->extent), - (int) (p - f->extent)); - goto done; - } - - /* check exception handler, note that this may pop stream */ - if (SFSK(f, r, SEEK_SET, f->disc) != r) { - p = -1; - goto done; - } else if (!(f->flags & SF_STRING)) { - p = r; - goto done; - } - } - - if (f->mode & SF_WRITE) { /* see if we can avoid flushing buffer */ - if (!hardseek && type < SEEK_END && !(f->flags & SF_APPENDWR)) { - s = f->here + (f->next - f->data); - r = p + (type == SEEK_SET ? 0 : s); - if (r == s) { - p = r; - goto done; - } - } - - if (f->next > f->data && SFSYNC(f) < 0) { - p = -1; - goto done; - } - } - - if (type == SEEK_END || (f->mode & SF_WRITE)) { - if ((hardseek & SF_PUBLIC) || type == SEEK_END) - p = SFSK(f, p, type, f->disc); - else { - r = p + (type == SEEK_CUR ? f->here : 0); - p = (hardseek - || r != f->here) ? SFSK(f, r, SEEK_SET, f->disc) : r; - } - if (p >= 0) - newpos(f, p); - - goto done; - } - - /* if get here, must be a read stream */ - s = f->here - (f->endb - f->next); - r = p + (type == SEEK_CUR ? s : 0); - if (r <= f->here && r >= (f->here - (f->endb - f->data))) { - if ((hardseek || (type == SEEK_CUR && p == 0))) { - if ((s = SFSK(f, (Sfoff_t) 0, SEEK_CUR, f->disc)) == f->here || - (s >= 0 && !(hardseek & SF_PUBLIC) && - (s = SFSK(f, f->here, SEEK_SET, f->disc)) == f->here)) - goto near_done; - else if (s < 0) { - p = -1; - goto done; - } else { - newpos(f, s); - hardseek = 0; - } - } else { - near_done: - f->next = f->endb - (f->here - r); - p = r; - goto done; - } - } - - /* desired position */ - if ((p += type == SEEK_CUR ? s : 0) < 0) - goto done; - -#ifdef MAP_TYPE - if (f->bits & SF_MMAP) { /* if mmap is not great, stop mmaping if moving around too much */ -#if _mmap_worthy < 2 - if ((f->next - f->data) < ((f->endb - f->data) / 4)) { - SFSETBUF(f, (void *) f->tiny, (size_t) SF_UNBOUND); - hardseek = 1; /* this forces a hard seek below */ - } else -#endif - { /* for mmap, f->here can be virtual */ - newpos(f, p); - goto done; - } - } -#endif - - b = f->endb - f->data; /* amount of buffered data */ - c = f->next - f->data; /* amount of data consumed */ - - if (b > 0) { /* gradually reduce wastage */ - if (b <= SF_GRAIN) - f->iosz = SF_GRAIN; - else { - c *= 2; - a = c + 3 * (b - c) / 4; - a = ((a + SF_GRAIN - 1) / SF_GRAIN) * SF_GRAIN; - - b = ((b + SF_GRAIN - 1) / SF_GRAIN) * SF_GRAIN; - - f->iosz = a < b ? a : c < b / 2 ? b / 2 : b; - } - } - /* else, believe previous setting of f->iosz */ - - if (f->iosz >= f->size) - f->iosz = 0; - - /* buffer is now considered empty */ - f->next = f->endr = f->endb = f->data; - - /* small backseeks often come in bunches, so seek back as far as possible */ - if (p < f->lpos && f->size > SF_GRAIN && (p + SF_GRAIN) > s) { - if ((r = s - f->size) < 0) - r = 0; - } else { - r = p; - - /* seeking around and wasting data, be conservative */ - if (f->iosz > 0 && (p > f->lpos || p < f->lpos - f->size)) - f->bits |= SF_JUSTSEEK; - } - - if ((hardseek || r != f->here) - && (f->here = SFSK(f, r, SEEK_SET, f->disc)) != r) { - if (r < p) /* now try to just get to p */ - f->here = SFSK(f, p, SEEK_SET, f->disc); - if (f->here != p) - p = -1; - goto done; - } - - if (r < p) { /* read to cover p */ - (void) SFRD(f, f->data, f->size, f->disc); - if (p <= f->here && p >= (f->here - (f->endb - f->data))) - f->next = f->endb - (size_t) (f->here - p); - else { /* recover from read failure by just seeking to p */ - f->next = f->endb = f->data; - if ((f->here = SFSK(f, p, SEEK_SET, f->disc)) != p) - p = -1; - } - } - - done: - if (f->here < 0) { /* hasn't been the best of time */ - f->extent = -1; - f->here = 0; - } - - f->lpos = p; - - SFOPEN(f, local); - - if (mustsync) - sfsync(f); - SFMTXRETURN(f, p); -} diff --git a/internal/ccall/sfio/sfset.c b/internal/ccall/sfio/sfset.c deleted file mode 100644 index 0d75481..0000000 --- a/internal/ccall/sfio/sfset.c +++ /dev/null @@ -1,76 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Set some control flags or file descript for the stream -** -** Written by Kiem-Phong Vo. -*/ - -int sfset(reg Sfio_t * f, reg int flags, reg int set) -{ - reg int oflags; - - SFMTXSTART(f, 0); - - if (flags == 0 && set == 0) - SFMTXRETURN(f, (f->flags & SF_FLAGS)); - - if ((oflags = (f->mode & SF_RDWR)) != (int) f->mode - && _sfmode(f, oflags, 0) < 0) - SFMTXRETURN(f, 0); - - if (flags == 0) - SFMTXRETURN(f, (f->flags & SF_FLAGS)); - - SFLOCK(f, 0); - - /* preserve at least one rd/wr flag */ - oflags = f->flags; - if (!(f->bits & SF_BOTH) || (flags & SF_RDWR) == SF_RDWR) - flags &= ~SF_RDWR; - - /* set the flag */ - if (set) - f->flags |= (flags & SF_SETS); - else - f->flags &= ~(flags & SF_SETS); - - /* must have at least one of read/write */ - if (!(f->flags & SF_RDWR)) - f->flags |= (oflags & SF_RDWR); - - if (f->extent < 0) - f->flags &= ~SF_APPENDWR; - - /* turn to appropriate mode as necessary */ - if ((flags &= SF_RDWR)) { - if (!set) { - if (flags == SF_READ) - flags = SF_WRITE; - else - flags = SF_READ; - } - if ((flags == SF_WRITE && !(f->mode & SF_WRITE)) || - (flags == SF_READ && !(f->mode & (SF_READ | SF_SYNCED)))) - (void) _sfmode(f, flags, 1); - } - - /* if not shared or unseekable, public means nothing */ - if (!(f->flags & SF_SHARE) || f->extent < 0) - f->flags &= ~SF_PUBLIC; - - SFOPEN(f, 0); - SFMTXRETURN(f, (oflags & SF_FLAGS)); -} diff --git a/internal/ccall/sfio/sfsetbuf.c b/internal/ccall/sfio/sfsetbuf.c deleted file mode 100644 index 00552f9..0000000 --- a/internal/ccall/sfio/sfsetbuf.c +++ /dev/null @@ -1,335 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#if defined(__STDPP__directive) && defined(__STDPP__hide) -__STDPP__directive pragma pp:hide getpagesize -#else -#define getpagesize ______getpagesize -#endif - -#include "sfhdr.h" - -#if defined(__STDPP__directive) && defined(__STDPP__hide) -__STDPP__directive pragma pp:nohide getpagesize -#else -#undef getpagesize -#endif - -#if _lib_getpagesize -#ifdef __cplusplus -extern "C" { -#endif - extern int getpagesize(void); -#ifdef __cplusplus -} -#endif -#endif -/* Set a (new) buffer for a stream. -** If size < 0, it is assigned a suitable value depending on the -** kind of stream. The actual buffer size allocated is dependent -** on how much memory is available. -** -** Written by Kiem-Phong Vo. -*/ -#if !_sys_stat - struct stat { - int st_mode; - int st_size; -}; -#define fstat(fd,st) (-1) -#endif /*_sys_stat*/ - -/** - * @param f stream to be buffered - * @param buf new buffer - * @param size buffer size, -1 for default size - */ -void *sfsetbuf(reg Sfio_t * f, reg void * buf, reg size_t size) -{ - reg int sf_malloc; - reg uchar *obuf; - reg Sfdisc_t *disc; - reg ssize_t osize, blksize; - reg int oflags, init, local; -#ifdef MAP_TYPE - reg int okmmap; -#endif - Stat_t st; - - SFONCE(); - - SFMTXSTART(f, NIL(void *)); - - GETLOCAL(f, local); - - if (size == 0 && buf) { /* special case to get buffer info */ - _Sfi = f->val = - (f->bits & SF_MMAP) ? (f->endb - f->data) : f->size; - SFMTXRETURN(f, (void *) f->data); - } - - /* cleanup actions already done, don't allow write buffering any more */ - if (_Sfexiting && !(f->flags & SF_STRING) && (f->mode & SF_WRITE)) { - buf = NIL(void *); - size = 0; - } - - if ((init = f->mode & SF_INIT)) { - if (!f->pool && _sfsetpool(f) < 0) - SFMTXRETURN(f, NIL(void *)); - } else if ((f->mode & SF_RDWR) != SFMODE(f, local) - && _sfmode(f, 0, local) < 0) - SFMTXRETURN(f, NIL(void *)); - - if (init) - f->mode = (f->mode & SF_RDWR) | SF_LOCK; - else { - int rv; - - /* make sure there is no hidden read data */ - if (f->proc && (f->flags & SF_READ) && (f->mode & SF_WRITE) && - _sfmode(f, SF_READ, local) < 0) - SFMTXRETURN(f, NIL(void *)); - - /* synchronize first */ - SFLOCK(f, local); - rv = SFSYNC(f); - SFOPEN(f, local); - if (rv < 0) - SFMTXRETURN(f, NIL(void *)); - - /* turn off the SF_SYNCED bit because buffer is changing */ - f->mode &= ~SF_SYNCED; - } - - SFLOCK(f, local); - - blksize = 0; - oflags = f->flags; - -#ifdef MAP_TYPE - /* see if memory mapping is possible (see sfwrite for SF_BOTH) */ - okmmap = (buf || (f->flags & SF_STRING) - || (f->flags & SF_RDWR) == SF_RDWR) ? 0 : 1; - - /* save old buffer info */ - if (f->bits & SF_MMAP) { - if (f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } - } else -#endif - if (f->data == f->tiny) { - f->data = NIL(uchar *); - f->size = 0; - } - obuf = f->data; - osize = f->size; - - f->flags &= ~SF_MALLOC; - f->bits &= ~SF_MMAP; - - /* pure read/string streams must have a valid string */ - if ((f->flags & (SF_RDWR | SF_STRING)) == SF_RDSTR && - (size == (size_t) SF_UNBOUND || !buf)) - size = 0; - - /* set disc to the first discipline with a seekf */ - for (disc = f->disc; disc; disc = disc->disc) - if (disc->seekf) - break; - - if ((init || local) && !(f->flags & SF_STRING)) { /* ASSERT(f->file >= 0) */ - st.st_mode = 0; - - /* if has discipline, set size by discipline if possible */ - if (!_sys_stat || disc) { - if ((f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, disc)) < 0) - goto unseekable; - else { - Sfoff_t e; - if ((e = SFSK(f, (Sfoff_t) 0, SEEK_END, disc)) >= 0) - f->extent = e > f->here ? e : f->here; - (void) SFSK(f, f->here, SEEK_SET, disc); - goto setbuf; - } - } - - /* get file descriptor status */ - if (fstat((int) f->file, &st) < 0) - f->here = -1; - else { -#if _sys_stat && _stat_blksize /* preferred io block size */ - if ((blksize = (ssize_t) st.st_blksize) > 0) - while ((blksize + (ssize_t) st.st_blksize) <= SF_PAGE) - blksize += (ssize_t) st.st_blksize; -#endif -#ifdef MAP_TYPE - if (S_ISDIR(st.st_mode) || (int) st.st_size < SF_GRAIN) - okmmap = 0; -#endif - if (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode)) - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, f->disc); - else - f->here = -1; - -#if O_TEXT /* no memory mapping with O_TEXT because read()/write() alter data stream */ -#ifdef MAP_TYPE - if (okmmap && f->here >= 0 && - (fcntl((int) f->file, F_GETFL, 0) & O_TEXT)) - okmmap = 0; -#endif -#endif - } - - if (f->here >= 0) { - f->extent = (Sfoff_t) st.st_size; - - /* seekable std-devices are share-public by default */ - if (f == sfstdin || f == sfstdout || f == sfstderr) - f->flags |= SF_SHARE | SF_PUBLIC; - } else { - unseekable: - f->extent = -1; - f->here = 0; - - if (init) { - if (S_ISCHR(st.st_mode)) { - int oerrno = errno; - - blksize = SF_GRAIN; - - /* set line mode for terminals */ - if (!(f->flags & SF_LINE) && isatty(f->file)) - f->flags |= SF_LINE; -#if _sys_stat - else { /* special case /dev/null */ - reg int dev, ino; - dev = (int) st.st_dev; - ino = (int) st.st_ino; - if (stat(DEVNULL, &st) >= 0 && - dev == (int) st.st_dev && - ino == (int) st.st_ino) - SFSETNULL(f); - } -#endif - errno = oerrno; - } - - /* initialize side buffer for r+w unseekable streams */ - if (!f->proc && (f->bits & SF_BOTH)) - (void) _sfpopen(f, -1, -1, 0); - } - } - - /* set page size, this is also the desired default buffer size */ - if (_Sfpage <= 0) { -#if _lib_getpagesize - if ((_Sfpage = (size_t) getpagesize()) <= 0) -#endif - _Sfpage = SF_PAGE; - } - } -#ifdef MAP_TYPE - if (okmmap && size && (f->mode & SF_READ) && f->extent >= 0) { /* see if we can try memory mapping */ - if (!disc) - for (disc = f->disc; disc; disc = disc->disc) - if (disc->readf) - break; - if (!disc) { - f->bits |= SF_MMAP; - if (size == (size_t) SF_UNBOUND) { - if (blksize > _Sfpage) - size = blksize * SF_NMAP; - else - size = _Sfpage * SF_NMAP; - if (size > 256 * 1024) - size = 256 * 1024; - } - } - } -#endif - - /* get buffer space */ - setbuf: - if (size == (size_t) SF_UNBOUND) { /* define a default size suitable for block transfer */ - if (init && osize > 0) - size = osize; - else if (f == sfstderr && (f->mode & SF_WRITE)) - size = 0; - else if (f->flags & SF_STRING) - size = SF_GRAIN; - else if ((f->flags & SF_READ) && !(f->bits & SF_BOTH) && - f->extent > 0 && f->extent < (Sfoff_t) _Sfpage) - size = - (((size_t) f->extent + SF_GRAIN - - 1) / SF_GRAIN) * SF_GRAIN; - else if ((ssize_t) (size = _Sfpage) < blksize) - size = blksize; - - buf = NIL(void *); - } - - sf_malloc = 0; - if (size > 0 && !buf && !(f->bits & SF_MMAP)) { /* try to allocate a buffer */ - if (obuf && size == (size_t) osize && init) { - buf = (void *) obuf; - obuf = NIL(uchar *); - sf_malloc = (oflags & SF_MALLOC); - } - if (!buf) { /* do allocation */ - while (!buf && size > 0) { - if ((buf = (void *) malloc(size))) - break; - else - size /= 2; - } - if (size > 0) - sf_malloc = SF_MALLOC; - } - } - - if (size == 0 && !(f->flags & SF_STRING) && !(f->bits & SF_MMAP) && (f->mode & SF_READ)) { /* use the internal buffer */ - size = sizeof(f->tiny); - buf = (void *) f->tiny; - } - - /* set up new buffer */ - f->size = size; - f->next = f->data = f->endr = f->endw = (uchar *) buf; - f->endb = (f->mode & SF_READ) ? f->data : f->data + size; - if (f->flags & SF_STRING) { /* these fields are used to test actual size - see sfseek() */ - f->extent = (!sf_malloc && - ((f->flags & SF_READ) - || (f->bits & SF_BOTH))) ? size : 0; - f->here = 0; - - /* read+string stream should have all data available */ - if ((f->mode & SF_READ) && !sf_malloc) - f->endb = f->data + size; - } - - f->flags = (f->flags & ~SF_MALLOC) | sf_malloc; - - if (obuf && obuf != f->data && osize > 0 && (oflags & SF_MALLOC)) { - free((void *) obuf); - obuf = NIL(uchar *); - } - - _Sfi = f->val = obuf ? osize : 0; - - SFOPEN(f, local); - - SFMTXRETURN(f, (void *) obuf); -} diff --git a/internal/ccall/sfio/sfsetfd.c b/internal/ccall/sfio/sfsetfd.c deleted file mode 100644 index d1aedf6..0000000 --- a/internal/ccall/sfio/sfsetfd.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Change the file descriptor -** -** Written by Kiem-Phong Vo. -*/ - -static int _sfdup(reg int fd, reg int newfd) -{ - reg int dupfd; - -#ifdef F_DUPFD /* the simple case */ - while ((dupfd = fcntl(fd, F_DUPFD, newfd)) < 0 && errno == EINTR) - errno = 0; - return dupfd; - -#else /* do it the hard way */ - if ((dupfd = dup(fd)) < 0 || dupfd >= newfd) - return dupfd; - - /* dup() succeeded but didn't get the right number, recurse */ - newfd = _sfdup(fd, newfd); - - /* close the one that didn't match */ - CLOSE(dupfd); - - return newfd; -#endif -} - -int sfsetfd(reg Sfio_t * f, reg int newfd) -{ - reg int oldfd; - - SFMTXSTART(f, -1); - - if (f->flags & SF_STRING) - SFMTXRETURN(f, -1); - - if ((f->mode & SF_INIT) && f->file < 0) { /* restoring file descriptor after a previous freeze */ - if (newfd < 0) - SFMTXRETURN(f, -1); - } else { /* change file descriptor */ - if ((f->mode & SF_RDWR) != f->mode && _sfmode(f, 0, 0) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - oldfd = f->file; - if (oldfd >= 0) { - if (newfd >= 0) { - if ((newfd = _sfdup(oldfd, newfd)) < 0) { - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - } - CLOSE(oldfd); - } else { /* sync stream if necessary */ - if (((f->mode & SF_WRITE) && f->next > f->data) || - (f->mode & SF_READ) || f->disc == _Sfudisc) { - if (SFSYNC(f) < 0) { - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - } - } - - if (((f->mode & SF_WRITE) && f->next > f->data) || - ((f->mode & SF_READ) && f->extent < 0 && - f->next < f->endb)) { - SFOPEN(f, 0); - SFMTXRETURN(f, -1); - } -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - - /* make stream appears uninitialized */ - f->endb = f->endr = f->endw = f->data; - f->extent = f->here = 0; - f->mode = (f->mode & SF_RDWR) | SF_INIT; - f->bits &= ~SF_NULL; /* off /dev/null handling */ - } - } - - SFOPEN(f, 0); - } - - /* notify changes */ - if (_Sfnotify) - (*_Sfnotify) (f, SF_SETFD, newfd); - - f->file = newfd; - - SFMTXRETURN(f, newfd); -} diff --git a/internal/ccall/sfio/sfsize.c b/internal/ccall/sfio/sfsize.c deleted file mode 100644 index 8ff1087..0000000 --- a/internal/ccall/sfio/sfsize.c +++ /dev/null @@ -1,95 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Get the size of a stream. -** -** Written by Kiem-Phong Vo. -*/ -Sfoff_t sfsize(reg Sfio_t * f) -{ - Sfdisc_t *disc; - reg int mode; - Sfoff_t s; - - SFMTXSTART(f, (Sfoff_t) (-1)); - - if ((mode = f->mode & SF_RDWR) != (int) f->mode - && _sfmode(f, mode, 0) < 0) - SFMTXRETURN(f, (Sfoff_t) (-1)); - - if (f->flags & SF_STRING) { - SFSTRSIZE(f); - SFMTXRETURN(f, f->extent); - } - - SFLOCK(f, 0); - - s = f->here; - - if (f->extent >= 0) { - if (f->flags & (SF_SHARE | SF_APPENDWR)) { - for (disc = f->disc; disc; disc = disc->disc) - if (disc->seekf) - break; - if (!_sys_stat || disc) { - Sfoff_t e; - if ((e = SFSK(f, 0, SEEK_END, disc)) >= 0) - f->extent = e; - if (SFSK(f, f->here, SEEK_SET, disc) != f->here) - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, disc); - } -#if _sys_stat - else { - Stat_t st; - if (fstat(f->file, &st) < 0) - f->extent = -1; - else if ((f->extent = st.st_size) < f->here) - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, disc); - } -#endif - } - - if ((f->flags & (SF_SHARE | SF_PUBLIC)) == (SF_SHARE | SF_PUBLIC)) - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, f->disc); - } - - if (f->here != s && (f->mode & SF_READ)) { /* buffered data is known to be invalid */ -#ifdef MAP_TYPE - if ((f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - f->next = f->endb = f->endr = f->endw = f->data; - } - - if (f->here < 0) - f->extent = -1; - else if (f->extent < f->here) - f->extent = f->here; - - if ((s = f->extent) >= 0) { - if (f->flags & SF_APPENDWR) - s += (f->next - f->data); - else if (f->mode & SF_WRITE) { - s = f->here + (f->next - f->data); - if (s < f->extent) - s = f->extent; - } - } - - SFOPEN(f, 0); - SFMTXRETURN(f, s); -} diff --git a/internal/ccall/sfio/sfsk.c b/internal/ccall/sfio/sfsk.c deleted file mode 100644 index 2b82c1b..0000000 --- a/internal/ccall/sfio/sfsk.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Seek function that knows discipline -** -** Written by Kiem-Phong Vo. -*/ -Sfoff_t sfsk(reg Sfio_t * f, Sfoff_t addr, reg int type, Sfdisc_t * disc) -{ - Sfoff_t p; - reg Sfdisc_t *dc; - reg ssize_t s; - reg int local, mode; - - SFMTXSTART(f, (Sfoff_t) (-1)); - - GETLOCAL(f, local); - if (!local && !(f->bits & SF_DCDOWN)) { - if ((mode = f->mode & SF_RDWR) != (int) f->mode - && _sfmode(f, mode, 0) < 0) - SFMTXRETURN(f, (Sfoff_t) (-1)); - if (SFSYNC(f) < 0) - SFMTXRETURN(f, (Sfoff_t) (-1)); -#if MAP_TYPE - if (f->mode == SF_READ && (f->bits & SF_MMAP) && f->data) { - SFMUNMAP(f, f->data, f->endb - f->data); - f->data = NIL(uchar *); - } -#endif - f->next = f->endb = f->endr = f->endw = f->data; - } - - if ((type &= (SEEK_SET | SEEK_CUR | SEEK_END)) > SEEK_END) - SFMTXRETURN(f, (Sfoff_t) (-1)); - - for (;;) { - dc = disc; - if (f->flags & SF_STRING) { - SFSTRSIZE(f); - if (type == SEEK_SET) - s = (ssize_t) addr; - else if (type == SEEK_CUR) - s = (ssize_t) (addr + f->here); - else - s = (ssize_t) (addr + f->extent); - } else { - SFDISC(f, dc, seekf); - if (dc && dc->seekf) { - SFDCSK(f, addr, type, dc, p); - } else { - p = lseek(f->file, (off_t) addr, type); - } - if (p >= 0) - SFMTXRETURN(f, p); - s = -1; - } - - if (local) - SETLOCAL(f); - switch (_sfexcept(f, SF_SEEK, s, dc)) { - case SF_EDISC: - case SF_ECONT: - if (f->flags & SF_STRING) - SFMTXRETURN(f, (Sfoff_t) s); - goto do_continue; - default: - SFMTXRETURN(f, (Sfoff_t) (-1)); - } - - do_continue: - for (dc = f->disc; dc; dc = dc->disc) - if (dc == disc) - break; - disc = dc; - } -} diff --git a/internal/ccall/sfio/sfstack.c b/internal/ccall/sfio/sfstack.c deleted file mode 100644 index b3cbbe9..0000000 --- a/internal/ccall/sfio/sfstack.c +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - - -/* Push/pop streams -** -** Written by Kiem-Phong Vo. -*/ - -#define STKMTXLOCK(f1,f2) \ - { if(f1) SFMTXLOCK(f1); \ - if(f2) SFMTXLOCK(f2); \ - } -#define STKMTXRETURN(f1,f2,rv) \ - { if(f1) SFMTXUNLOCK(f1); \ - if(f2) SFMTXUNLOCK(f2); \ - return(rv); \ - } - -/** - * @param f1 base of stack - * @param f2 top of stack - */ -Sfio_t *sfstack(Sfio_t * f1, Sfio_t * f2) -{ - reg int n; - reg Sfio_t *rf; - reg Sfrsrv_t *rsrv; - reg Vtmutex_t *mtx; - - STKMTXLOCK(f1, f2); - - if (f1 && (f1->mode & SF_RDWR) != f1->mode && _sfmode(f1, 0, 0) < 0) - STKMTXRETURN(f1, f2, NIL(Sfio_t *)); - if (f2 && (f2->mode & SF_RDWR) != f2->mode && _sfmode(f2, 0, 0) < 0) - STKMTXRETURN(f1, f2, NIL(Sfio_t *)); - if (!f1) - STKMTXRETURN(f1, f2, f2); - - /* give access to other internal functions */ - _Sfstack = sfstack; - - if (f2 == SF_POPSTACK) { - if (!(f2 = f1->push)) - STKMTXRETURN(f1, f2, NIL(Sfio_t *)); - f2->mode &= ~SF_PUSH; - } else { - if (f2->push) - STKMTXRETURN(f1, f2, NIL(Sfio_t *)); - if (f1->pool && f1->pool != &_Sfpool && f1->pool != f2->pool && f1 == f1->pool->sf[0]) { /* get something else to pool front since f1 will be locked */ - for (n = 1; n < f1->pool->n_sf; ++n) { - if (SFFROZEN(f1->pool->sf[n])) - continue; - (*_Sfpmove) (f1->pool->sf[n], 0); - break; - } - } - } - - if (f2->pool && f2->pool != &_Sfpool && f2 != f2->pool->sf[0]) - (*_Sfpmove) (f2, 0); - - /* swap streams */ - sfswap(f1, f2); - - /* but the reserved buffer and mutex must remain the same */ - rsrv = f1->rsrv; - f1->rsrv = f2->rsrv; - f2->rsrv = rsrv; - mtx = f1->mutex; - f1->mutex = f2->mutex; - f2->mutex = mtx; - - SFLOCK(f1, 0); - SFLOCK(f2, 0); - - if (f2->push != f2) { /* freeze the pushed stream */ - f2->mode |= SF_PUSH; - f1->push = f2; - rf = f1; - } else { /* unfreeze the just exposed stream */ - f1->mode &= ~SF_PUSH; - f2->push = NIL(Sfio_t *); - rf = f2; - } - - SFOPEN(f1, 0); - SFOPEN(f2, 0); - - STKMTXRETURN(f1, f2, rf); -} diff --git a/internal/ccall/sfio/sfstrtod.c b/internal/ccall/sfio/sfstrtod.c deleted file mode 100644 index b4d2cb9..0000000 --- a/internal/ccall/sfio/sfstrtod.c +++ /dev/null @@ -1,139 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Convert a Sfdouble_t value represented in an ASCII format into -** the internal Sfdouble_t representation. -** -** Written by Kiem-Phong Vo. -*/ - -#define BATCH (2*sizeof(int)) /* accumulate this many digits at a time */ -#define IPART 0 /* doing integer part */ -#define FPART 1 /* doing fractional part */ -#define EPART 2 /* doing exponent part */ - -static Sfdouble_t sfpow10(reg int n) -{ - Sfdouble_t dval; - - switch (n) { - case -3: - return .001; - case -2: - return .01; - case -1: - return .1; - case 0: - return 1.; - case 1: - return 10.; - case 2: - return 100.; - case 3: - return 1000.; - } - - if (n < 0) { - dval = .0001; - for (n += 4; n < 0; n += 1) - dval /= 10.; - } else { - dval = 10000.; - for (n -= 4; n > 0; n -= 1) - dval *= 10.; - } - - return dval; -} - -/** - * @param s string to convert - * @param retp to return the remainder of string - */ -Sfdouble_t _sfstrtod(reg const char *s, char **retp) -{ - reg int n, c, m; - reg int mode, fexp, sign, expsign; - Sfdouble_t dval; -#if _lib_locale - char decpoint = 0, thousand; - SFSETLOCALE(decpoint, thousand); -#else -#define decpoint '.' -#endif - - /* skip initial blanks */ - while (isspace(*s)) - ++s; - - /* get the sign */ - if ((sign = (*s == '-')) || *s == '+') - s += 1; - - mode = IPART; - fexp = expsign = 0; - dval = 0.; - while (*s) { /* accumulate a handful of the digits */ - for (m = BATCH, n = 0; m > 0; --m, ++s) { /* get and process a char */ - c = *s; - if (isdigit(c)) - n = 10 * n + (c - '0'); - else - break; - } - - /* number of digits accumulated */ - m = BATCH - m; - - if (mode == IPART) { /* doing the integer part */ - if (dval == 0.) - dval = (Sfdouble_t) n; - else - dval = dval * sfpow10(m) + (Sfdouble_t) n; - } else if (mode == FPART) { /* doing the fractional part */ - fexp -= m; - if (n > 0) - dval += n * sfpow10(fexp); - } else if (n) { /* doing the exponent part */ - if (expsign) - n = -n; - dval *= sfpow10(n); - } - - if (!c) - break; - - if (m < BATCH) { /* detected a non-digit */ - if (c == decpoint) { /* start the fractional part or no match */ - if (mode != IPART) - break; - mode = FPART; - s += 1; - } else if (c == 'e' || c == 'E') { - if (mode == EPART) - break; - mode = EPART; - c = *++s; - if ((expsign = (c == '-')) || c == '+') - s += 1; - } else - break; - } - } - - if (retp) - *retp = (char *) s; - return sign ? -dval : dval; -} diff --git a/internal/ccall/sfio/sfswap.c b/internal/ccall/sfio/sfswap.c deleted file mode 100644 index cdc3912..0000000 --- a/internal/ccall/sfio/sfswap.c +++ /dev/null @@ -1,108 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Swap two streams. If the second argument is NULL, -** a new stream will be created. Always return the second argument -** or the new stream. Note that this function will always work -** unless streams are locked by SF_PUSH. -** -** Written by Kiem-Phong Vo. -*/ - -Sfio_t *sfswap(reg Sfio_t * f1, reg Sfio_t * f2) -{ - Sfio_t tmp; - int f1pool, f2pool, f1mode, f2mode, f1flags, f2flags; - - if (!f1 || (f1->mode & SF_AVAIL) - || (SFFROZEN(f1) && (f1->mode & SF_PUSH))) - return NIL(Sfio_t *); - if (f2 && SFFROZEN(f2) && (f2->mode & SF_PUSH)) - return NIL(Sfio_t *); - if (f1 == f2) - return f2; - - f1mode = f1->mode; - SFLOCK(f1, 0); - f1->mode |= SF_PUSH; /* make sure there is no recursion on f1 */ - - if (f2) { - f2mode = f2->mode; - SFLOCK(f2, 0); - f2->mode |= SF_PUSH; /* make sure there is no recursion on f2 */ - } else { - f2 = f1->file == 0 ? sfstdin : - f1->file == 1 ? sfstdout : - f1->file == 2 ? sfstderr : NIL(Sfio_t *); - if ((!f2 || !(f2->mode & SF_AVAIL))) { - if (!(f2 = (Sfio_t *) malloc(sizeof(Sfio_t)))) { - f1->mode = f1mode; - SFOPEN(f1, 0); - return NIL(Sfio_t *); - } - - SFCLEAR(f2, NIL(Vtmutex_t *)); - } - f2->mode = SF_AVAIL | SF_LOCK; - f2mode = SF_AVAIL; - } - - if (!f1->pool) - f1pool = -1; - else - for (f1pool = f1->pool->n_sf - 1; f1pool >= 0; --f1pool) - if (f1->pool->sf[f1pool] == f1) - break; - if (!f2->pool) - f2pool = -1; - else - for (f2pool = f2->pool->n_sf - 1; f2pool >= 0; --f2pool) - if (f2->pool->sf[f2pool] == f2) - break; - - f1flags = f1->flags; - f2flags = f2->flags; - - /* swap image and pool entries */ - memcpy((void *) (&tmp), (void *) f1, sizeof(Sfio_t)); - memcpy((void *) f1, (void *) f2, sizeof(Sfio_t)); - memcpy((void *) f2, (void *) (&tmp), sizeof(Sfio_t)); - if (f2pool >= 0) - f1->pool->sf[f2pool] = f1; - if (f1pool >= 0) - f2->pool->sf[f1pool] = f2; - - if (f2flags & SF_STATIC) - f2->flags |= SF_STATIC; - else - f2->flags &= ~SF_STATIC; - - if (f1flags & SF_STATIC) - f1->flags |= SF_STATIC; - else - f1->flags &= ~SF_STATIC; - - if (f2mode & SF_AVAIL) { /* swapping to a closed stream */ - if (!(f1->flags & SF_STATIC)) - free(f1); - } else { - f1->mode = f2mode; - SFOPEN(f1, 0); - } - - f2->mode = f1mode; - SFOPEN(f2, 0); - return f2; -} diff --git a/internal/ccall/sfio/sfsync.c b/internal/ccall/sfio/sfsync.c deleted file mode 100644 index 608e45d..0000000 --- a/internal/ccall/sfio/sfsync.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Synchronize data in buffers with the file system. -** If f is nil, all streams are sync-ed -** -** Written by Kiem-Phong Vo. -*/ - -static int _sfall(void) -{ - reg Sfpool_t *p, *next; - reg Sfio_t *f; - reg int n, rv; - reg int nsync, count, loop; -#define MAXLOOP 3 - - for (loop = 0; loop < MAXLOOP; ++loop) { - rv = nsync = count = 0; - for (p = &_Sfpool; p; p = next) { /* find the next legitimate pool */ - for (next = p->next; next; next = next->next) - if (next->n_sf > 0) - break; - - /* walk the streams for _Sfpool only */ - for (n = 0; n < ((p == &_Sfpool) ? p->n_sf : 1); ++n) { - count += 1; - f = p->sf[n]; - - if (f->flags & SF_STRING) - goto did_sync; - if (SFFROZEN(f)) - continue; - if ((f->mode & SF_READ) && (f->mode & SF_SYNCED)) - goto did_sync; - if ((f->mode & SF_READ) && !(f->bits & SF_MMAP) && - f->next == f->endb) - goto did_sync; - if ((f->mode & SF_WRITE) && !(f->bits & SF_HOLE) && - f->next == f->data) - goto did_sync; - - if (sfsync(f) < 0) - rv = -1; - - did_sync: - nsync += 1; - } - } - - if (nsync == count) - break; - } - return rv; -} - -/** - * @param f stream to be synchronized - */ -int sfsync(reg Sfio_t * f) -{ - int local, rv, mode; - Sfio_t *origf; - - if (!(origf = f)) - return _sfall(); - - SFMTXSTART(origf, -1); - - GETLOCAL(origf, local); - - if (origf->disc == _Sfudisc) /* throw away ungetc */ - (void) sfclose((*_Sfstack) (origf, NIL(Sfio_t *))); - - rv = 0; - - if ((origf->mode & SF_RDWR) != SFMODE(origf, local) - && _sfmode(origf, 0, local) < 0) { - rv = -1; - goto done; - } - - for (; f; f = f->push) { - if ((f->flags & SF_IOCHECK) && f->disc && f->disc->exceptf) - (void) (*f->disc->exceptf) (f, SF_SYNC, (void *) ((int) 1), - f->disc); - - SFLOCK(f, local); - - /* pretend that this stream is not on a stack */ - mode = f->mode & SF_PUSH; - f->mode &= ~SF_PUSH; - - /* these streams do not need synchronization */ - if ((f->flags & SF_STRING) || (f->mode & SF_SYNCED)) - goto next; - - if ((f->mode & SF_WRITE) && (f->next > f->data || (f->bits & SF_HOLE))) { /* sync the buffer, make sure pool don't move */ - reg int pool = f->mode & SF_POOL; - f->mode &= ~SF_POOL; - if (f->next > f->data && (SFWRALL(f), SFFLSBUF(f, -1)) < 0) - rv = -1; - if (!SFISNULL(f) && (f->bits & SF_HOLE)) { /* realize a previously created hole of 0's */ - if (SFSK(f, (Sfoff_t) (-1), SEEK_CUR, f->disc) >= 0) - (void) SFWR(f, "", 1, f->disc); - f->bits &= ~SF_HOLE; - } - f->mode |= pool; - } - - if ((f->mode & SF_READ) && f->extent >= 0 && ((f->bits & SF_MMAP) || f->next < f->endb)) { /* make sure the file pointer is at the right place */ - f->here -= (f->endb - f->next); - f->endr = f->endw = f->data; - f->mode = SF_READ | SF_SYNCED | SF_LOCK; - (void) SFSK(f, f->here, SEEK_SET, f->disc); - - if ((f->flags & SF_SHARE) && !(f->flags & SF_PUBLIC) && - !(f->bits & SF_MMAP)) { - f->endb = f->next = f->data; - f->mode &= ~SF_SYNCED; - } - } - - next: - f->mode |= mode; - SFOPEN(f, local); - - if ((f->flags & SF_IOCHECK) && f->disc && f->disc->exceptf) - (void) (*f->disc->exceptf) (f, SF_SYNC, (void *) ((int) 0), - f->disc); - } - - done: - if (!local && f && (f->mode & SF_POOL) && f->pool - && f != f->pool->sf[0]) - SFSYNC(f->pool->sf[0]); - - SFMTXRETURN(origf, rv); -} diff --git a/internal/ccall/sfio/sftable.c b/internal/ccall/sfio/sftable.c deleted file mode 100644 index 79a8ddb..0000000 --- a/internal/ccall/sfio/sftable.c +++ /dev/null @@ -1,477 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Dealing with $ argument addressing stuffs. -** -** Written by Kiem-Phong Vo. -*/ - -static char *sffmtint(const char *str, int *v) -{ - for (*v = 0; isdigit(*str); ++str) - *v = *v * 10 + (*str - '0'); - *v -= 1; - return (char *) str; -} - -static Fmtpos_t *sffmtpos(Sfio_t * f, const char *form, va_list args, - int type) -{ - int base, fmt, flags, dot, width, precis; - ssize_t n_str, size = 0; - char *t_str, *sp; - int v, n, skip, dollar; - char decimal, thousand; - Sffmt_t *ft, savft; - Fmtpos_t *fp; /* position array of arguments */ - int argp, argn, maxp, need[FP_INDEX]; - - if (type < 0) - fp = NIL(Fmtpos_t *); - else if (!(fp = sffmtpos(f, form, args, -1))) - return NIL(Fmtpos_t *); - - dollar = 0; - decimal = thousand = 0; - argn = maxp = -1; - while ((n = *form)) { - if (n != '%') { /* collect the non-pattern chars */ - sp = (char *) form++; - while (*form && *form != '%') - form += 1; - continue; - } else - form += 1; - if (*form == 0) - break; - else if (*form == '%') { - form += 1; - continue; - } - - if (*form == '*' && type > 0) { /* skip in scanning */ - skip = 1; - form += 1; - argp = -1; - } else { /* get the position of this argument */ - skip = 0; - sp = sffmtint(form, &argp); - if (*sp == '$') { - dollar = 1; - form = sp + 1; - } else - argp = -1; - } - - flags = dot = 0; - t_str = NIL(char *); - n_str = 0; - size = width = precis = base = -1; - for (n = 0; n < FP_INDEX; ++n) - need[n] = -1; - - loop_flags: /* LOOP FOR \0, %, FLAGS, WIDTH, PRECISION, BASE, TYPE */ - switch ((fmt = *form++)) { - case LEFTP: /* get the type enclosed in balanced parens */ - t_str = (char *) form; - for (v = 1;;) { - switch (*form++) { - case 0: /* not balancable, retract */ - form = t_str; - t_str = NIL(char *); - n_str = 0; - goto loop_flags; - case LEFTP: /* increasing nested level */ - v += 1; - continue; - case RIGHTP: /* decreasing nested level */ - if ((v -= 1) != 0) - continue; - n_str = form - t_str; - if (*t_str == '*') { - t_str = sffmtint(t_str + 1, &n); - if (*t_str == '$') - dollar = 1; - else - n = -1; - if ((n = FP_SET(n, argn)) > maxp) - maxp = n; - if (fp && fp[n].ft.fmt == 0) { - fp[n].ft.fmt = LEFTP; - fp[n].ft.form = (char *) form; - } - need[FP_STR] = n; - } - goto loop_flags; - } - } - - case '-': - flags |= SFFMT_LEFT; - flags &= ~SFFMT_ZERO; - goto loop_flags; - case '0': - if (!(flags & SFFMT_LEFT)) - flags |= SFFMT_ZERO; - goto loop_flags; - case ' ': - if (!(flags & SFFMT_SIGN)) - flags |= SFFMT_BLANK; - goto loop_flags; - case '+': - flags |= SFFMT_SIGN; - flags &= ~SFFMT_BLANK; - goto loop_flags; - case '#': - flags |= SFFMT_ALTER; - goto loop_flags; - case QUOTE: - SFSETLOCALE(decimal, thousand); - if (thousand) - flags |= SFFMT_THOUSAND; - goto loop_flags; - - case '.': - if ((dot += 1) == 2) - base = 0; /* for %s,%c */ - if (isdigit(*form)) { - fmt = *form++; - goto dot_size; - } else if (*form != '*') - goto loop_flags; - else - form += 1; /* drop thru below */ - - case '*': - form = sffmtint(form, &n); - if (*form == '$') { - dollar = 1; - form += 1; - } else - n = -1; - if ((n = FP_SET(n, argn)) > maxp) - maxp = n; - if (fp && fp[n].ft.fmt == 0) { - fp[n].ft.fmt = '.'; - fp[n].ft.size = dot; - fp[n].ft.form = (char *) form; - } - if (dot <= 2) - need[dot] = n; - goto loop_flags; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - dot_size: - for (v = fmt - '0', fmt = *form; isdigit(fmt); fmt = *++form) - v = v * 10 + (fmt - '0'); - if (dot == 0) - width = v; - else if (dot == 1) - precis = v; - else if (dot == 2) - base = v; - goto loop_flags; - - case 'I': /* object length */ - size = 0; - flags = (flags & ~SFFMT_TYPES) | SFFMT_IFLAG; - if (isdigit(*form)) { - for (n = *form; isdigit(n); n = *++form) - size = size * 10 + (n - '0'); - } else if (*form == '*') { - form = sffmtint(form + 1, &n); - if (*form == '$') { - dollar = 1; - form += 1; - } else - n = -1; - if ((n = FP_SET(n, argn)) > maxp) - maxp = n; - if (fp && fp[n].ft.fmt == 0) { - fp[n].ft.fmt = 'I'; - fp[n].ft.size = sizeof(int); - fp[n].ft.form = (char *) form; - } - need[FP_SIZE] = n; - } - goto loop_flags; - - case 'l': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'l') { - form += 1; - flags |= SFFMT_LLONG; - } else - flags |= SFFMT_LONG; - goto loop_flags; - case 'h': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'h') { - form += 1; - flags |= SFFMT_SSHORT; - } else - flags |= SFFMT_SHORT; - goto loop_flags; - case 'L': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_LDOUBLE; - goto loop_flags; - } - - if (flags & (SFFMT_TYPES & ~SFFMT_IFLAG)) { - if ((_Sftype[fmt] & (SFFMT_INT | SFFMT_UINT)) || fmt == 'n') { - size = (flags & SFFMT_LLONG) ? sizeof(Sflong_t) : - (flags & SFFMT_LONG) ? sizeof(long) : - (flags & SFFMT_SHORT) ? sizeof(short) : - (flags & SFFMT_SSHORT) ? sizeof(char) : - (flags & SFFMT_JFLAG) ? sizeof(Sflong_t) : - (flags & SFFMT_TFLAG) ? sizeof(ptrdiff_t) : - (flags & SFFMT_ZFLAG) ? sizeof(size_t) : -1; - } else if (_Sftype[fmt] & SFFMT_FLOAT) { - size = (flags & SFFMT_LDOUBLE) ? sizeof(Sfdouble_t) : - (flags & (SFFMT_LONG | SFFMT_LLONG)) ? - sizeof(double) : -1; - } - } - - if (skip) - continue; - - if ((argp = FP_SET(argp, argn)) > maxp) - maxp = argp; - - if (dollar && fmt == '!') - return NIL(Fmtpos_t *); - - if (fp && fp[argp].ft.fmt == 0) { - fp[argp].ft.form = (char *) form; - fp[argp].ft.fmt = fp[argp].fmt = fmt; - fp[argp].ft.size = size; - fp[argp].ft.flags = flags; - fp[argp].ft.width = width; - fp[argp].ft.precis = precis; - fp[argp].ft.base = base; - fp[argp].ft.t_str = t_str; - fp[argp].ft.n_str = n_str; - for (n = 0; n < FP_INDEX; ++n) - fp[argp].need[n] = need[n]; - } - } - - if (!fp) { /* constructing position array only */ - if (!dollar - || !(fp = (Fmtpos_t *) malloc((maxp + 1) * sizeof(Fmtpos_t)))) - return NIL(Fmtpos_t *); - for (n = 0; n <= maxp; ++n) - fp[n].ft.fmt = 0; - return fp; - } - - /* get value for positions */ - for (n = 0, ft = NIL(Sffmt_t *); n <= maxp; ++n) { - if (fp[n].ft.fmt == 0) { /* gap: pretend it's a 'd' pattern */ - fp[n].ft.fmt = 'd'; - fp[n].ft.width = 0; - fp[n].ft.precis = 0; - fp[n].ft.base = 0; - fp[n].ft.size = 0; - fp[n].ft.t_str = 0; - fp[n].ft.n_str = 0; - fp[n].ft.flags = 0; - for (v = 0; v < FP_INDEX; ++v) - fp[n].need[v] = -1; - } - - if (ft && ft->extf) { - fp[n].ft.version = ft->version; - fp[n].ft.extf = ft->extf; - fp[n].ft.eventf = ft->eventf; - if ((v = fp[n].need[FP_WIDTH]) >= 0 && v < n) - fp[n].ft.width = fp[v].argv.i; - if ((v = fp[n].need[FP_PRECIS]) >= 0 && v < n) - fp[n].ft.precis = fp[v].argv.i; - if ((v = fp[n].need[FP_BASE]) >= 0 && v < n) - fp[n].ft.base = fp[v].argv.i; - if ((v = fp[n].need[FP_STR]) >= 0 && v < n) - fp[n].ft.t_str = fp[v].argv.s; - if ((v = fp[n].need[FP_SIZE]) >= 0 && v < n) - fp[n].ft.size = fp[v].argv.i; - - memcpy(ft, &fp[n].ft, sizeof(Sffmt_t)); - va_copy(ft->args, args); - ft->flags |= SFFMT_ARGPOS; - v = (*ft->extf) (f, (void *) (&fp[n].argv), ft); - va_copy(args, ft->args); - memcpy(&fp[n].ft, ft, sizeof(Sffmt_t)); - if (v < 0) { - memcpy(ft, &savft, sizeof(Sffmt_t)); - ft = NIL(Sffmt_t *); - } - - if (!(fp[n].ft.flags & SFFMT_VALUE)) - goto arg_list; - } else { - arg_list: - if (fp[n].ft.fmt == LEFTP) { - fp[n].argv.s = va_arg(args, char *); - fp[n].ft.size = strlen(fp[n].argv.s); - } else if (fp[n].ft.fmt == '.' || fp[n].ft.fmt == 'I') - fp[n].argv.i = va_arg(args, int); - else if (fp[n].ft.fmt == '!') { - if (ft) - memcpy(ft, &savft, sizeof(Sffmt_t)); - fp[n].argv.ft = ft = va_arg(args, Sffmt_t *); - if (ft->form) - ft = NIL(Sffmt_t *); - if (ft) - memcpy(&savft, ft, sizeof(Sffmt_t)); - } else if (type > 0) /* from sfvscanf */ - fp[n].argv.vp = va_arg(args, void *); - else - switch (_Sftype[fp[n].ft.fmt]) { - case SFFMT_INT: - case SFFMT_UINT: -#if !_ast_intmax_long - if (FMTCMP(size, Sflong_t, Sflong_t)) - fp[n].argv.ll = va_arg(args, Sflong_t); - else -#endif - if (FMTCMP(size, long, Sflong_t)) - fp[n].argv.l = va_arg(args, long); - else - fp[n].argv.i = va_arg(args, int); - break; - case SFFMT_FLOAT: -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - fp[n].argv.ld = va_arg(args, Sfdouble_t); - else -#endif - fp[n].argv.d = va_arg(args, double); - break; - case SFFMT_POINTER: - fp[n].argv.vp = va_arg(args, void *); - break; - case SFFMT_BYTE: - if (fp[n].ft.base >= 0) - fp[n].argv.s = va_arg(args, char *); - else - fp[n].argv.c = (char) va_arg(args, int); - break; - default: /* unknown pattern */ - break; - } - } - } - - if (ft) - memcpy(ft, &savft, sizeof(Sffmt_t)); - return fp; -} - - -/* function to initialize conversion tables */ -static int sfcvinit(void) -{ - reg int d, l; - - for (d = 0; d <= SF_MAXCHAR; ++d) { - _Sfcv36[d] = SF_RADIX; - _Sfcv64[d] = SF_RADIX; - } - - /* [0-9] */ - for (d = 0; d < 10; ++d) { - _Sfcv36[(uchar) _Sfdigits[d]] = d; - _Sfcv64[(uchar) _Sfdigits[d]] = d; - } - - /* [a-z] */ - for (; d < 36; ++d) { - _Sfcv36[(uchar) _Sfdigits[d]] = d; - _Sfcv64[(uchar) _Sfdigits[d]] = d; - } - - /* [A-Z] */ - for (l = 10; d < 62; ++l, ++d) { - _Sfcv36[(uchar) _Sfdigits[d]] = l; - _Sfcv64[(uchar) _Sfdigits[d]] = d; - } - - /* remaining digits */ - for (; d < SF_RADIX; ++d) { - _Sfcv36[(uchar) _Sfdigits[d]] = d; - _Sfcv64[(uchar) _Sfdigits[d]] = d; - } - - _Sftype['d'] = _Sftype['i'] = SFFMT_INT; - _Sftype['u'] = _Sftype['o'] = _Sftype['x'] = _Sftype['X'] = SFFMT_UINT; - _Sftype['e'] = _Sftype['E'] = - _Sftype['g'] = _Sftype['G'] = _Sftype['f'] = SFFMT_FLOAT; - _Sftype['s'] = _Sftype['n'] = _Sftype['p'] = _Sftype['!'] = - SFFMT_POINTER; - _Sftype['c'] = SFFMT_BYTE; - _Sftype['['] = SFFMT_CLASS; - - return 1; -} - -/* table for floating point and integer conversions */ -Sftab_t _Sftable = { - {1e1, 1e2, 1e4, 1e8, 1e16, 1e32} - , /* _Sfpos10 */ - - {1e-1, 1e-2, 1e-4, 1e-8, 1e-16, 1e-32} - , /* _Sfneg10 */ - - {'0', '0', '0', '1', '0', '2', '0', '3', '0', '4', /* _Sfdec */ - '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', - '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', - '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', - '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', - '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', - '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', - '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', - '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', - '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', - '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', - '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', - '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', - '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', - '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', - '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', - '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', - '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', - '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', - '9', '5', '9', '6', '9', '7', '9', '8', '9', '9', - } - , - - "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_", - - sfcvinit, 0, - sffmtpos, - sffmtint -}; diff --git a/internal/ccall/sfio/sftell.c b/internal/ccall/sfio/sftell.c deleted file mode 100644 index 913c6fd..0000000 --- a/internal/ccall/sfio/sftell.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Tell the current location in a given stream -** -** Written by Kiem-Phong Vo. -*/ - -Sfoff_t sftell(reg Sfio_t * f) -{ - reg int mode; - Sfoff_t p; - - SFMTXSTART(f, (Sfoff_t) (-1)); - - /* set the stream to the right mode */ - if ((mode = f->mode & SF_RDWR) != (int) f->mode - && _sfmode(f, mode, 0) < 0) - SFMTXRETURN(f, (Sfoff_t) (-1)); - - /* throw away ungetc data */ - if (f->disc == _Sfudisc) - (void) sfclose((*_Sfstack) (f, NIL(Sfio_t *))); - - if (f->flags & SF_STRING) - SFMTXRETURN(f, (Sfoff_t) (f->next - f->data)); - - /* let sfseek() handle the hard case */ - if (f->extent >= 0 && (f->flags & (SF_SHARE | SF_APPENDWR))) - p = sfseek(f, (Sfoff_t) 0, 1); - else - p = f->here + ((f->mode & SF_WRITE) ? f->next - f->data : f->next - - f->endb); - - SFMTXRETURN(f, p); -} diff --git a/internal/ccall/sfio/sftmp.c b/internal/ccall/sfio/sftmp.c deleted file mode 100644 index 52a6375..0000000 --- a/internal/ccall/sfio/sftmp.c +++ /dev/null @@ -1,352 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Create a temporary stream for read/write. -** The stream is originally created as a memory-resident stream. -** When this memory is exceeded, a real temp file will be created. -** The temp file creation sequence is somewhat convoluted so that -** pool/stack/discipline will work correctly. -** -** Written by David Korn and Kiem-Phong Vo. -*/ - -#if _tmp_rmfail - -/* File not removable while there is an open file descriptor. -** To ensure that temp files are properly removed, we need: -** 1. A discipline to remove a file when the corresponding stream is closed. -** Care must be taken to close the file descriptor before removing the -** file because systems such as NT do not allow file removal while -** there is an open file handle. -** 2. An atexit() function is set up to close temp files when process exits. -** 3. On systems with O_TEMPORARY (e.g., NT), this is used to further ensure -** that temp files will be removed after the last handle is closed. -*/ - -typedef struct _file_s File_t; -struct _file_s { - File_t *next; /* link list */ - Sfio_t *f; /* associated stream */ - char name[1]; /* temp file name */ -}; - -static File_t *File; /* list pf temp files */ - -static int _tmprmfile(Sfio_t * f, int type, void * val, Sfdisc_t * disc) -{ - reg File_t *ff, *last; - - NOTUSED(val); - - if (type == SF_DPOP) /* don't allow this to pop */ - return -1; - - if (type == SF_CLOSING) { - vtmtxlock(_Sfmutex); - for (last = NIL(File_t *), ff = File; ff; last = ff, ff = ff->next) - if (ff->f == f) - break; - if (ff) { - if (!last) - File = ff->next; - else - last->next = ff->next; - - if (_Sfnotify) - (*_Sfnotify) (f, SF_CLOSING, f->file); - CLOSE(f->file); - f->file = -1; - while (remove(ff->name) < 0 && errno == EINTR) - errno = 0; - - free((void *) ff); - } - vtmtxunlock(_Sfmutex); - } - - return 0; -} - -static void _rmfiles(void) -{ - reg File_t *ff, *next; - - vtmtxlock(_Sfmutex); - for (ff = File; ff; ff = next) { - next = ff->next; - _tmprmfile(ff->f, SF_CLOSING, NIL(void *), ff->f->disc); - } - vtmtxunlock(_Sfmutex); -} - -static Sfdisc_t Rmdisc = - { NIL(Sfread_f), NIL(Sfwrite_f), NIL(Sfseek_f), _tmprmfile, -NIL(Sfdisc_t *) }; - -#endif /*_tmp_rmfail*/ - -static int _rmtmp(Sfio_t * f, char *file) -{ -#if _tmp_rmfail /* remove only when stream is closed */ - reg File_t *ff; - - if (!File) - atexit(_rmfiles); - - if (!(ff = (File_t *) malloc(sizeof(File_t) + strlen(file)))) - return -1; - vtmtxlock(_Sfmutex); - ff->f = f; - strcpy(ff->name, file); - ff->next = File; - File = ff; - vtmtxunlock(_Sfmutex); - -#else /* can remove now */ - while (remove(file) < 0 && errno == EINTR) - errno = 0; -#endif - - return 0; -} - -#include -#define TMPDFLT "/tmp" -static char **Tmppath, **Tmpcur; - -char **_sfgetpath(char *path) -{ - reg char *p, **dirs; - reg int n; - - if (!(path = getenv(path))) - return NIL(char **); - - for (p = path, n = 0;;) { /* count number of directories */ - while (*p == ':') - ++p; - if (*p == 0) - break; - n += 1; - while (*p && *p != ':') /* skip dir name */ - ++p; - } - if (n == 0 || !(dirs = (char **) malloc((n + 1) * sizeof(char *)))) - return NIL(char **); - if (!(p = (char *) malloc(strlen(path) + 1))) { - free(dirs); - return NIL(char **); - } - strcpy(p, path); - for (n = 0;; ++n) { - while (*p == ':') - ++p; - if (*p == 0) - break; - dirs[n] = p; - while (*p && *p != ':') - ++p; - if (*p == ':') - *p++ = 0; - } - dirs[n] = NIL(char *); - - return dirs; -} - -static int _tmpfd(Sfio_t * f) -{ - reg char *file; - reg int fd; - int t; - - /* set up path of dirs to create temp files */ - if (!Tmppath && !(Tmppath = _sfgetpath("TMPPATH"))) { - if (!(Tmppath = (char **) malloc(2 * sizeof(char *)))) - return -1; - if (!(file = getenv("TMPDIR"))) - file = TMPDFLT; - if (!(Tmppath[0] = (char *) malloc(strlen(file) + 1))) { - free(Tmppath); - Tmppath = NIL(char **); - return -1; - } - strcpy(Tmppath[0], file); - Tmppath[1] = NIL(char *); - } - - /* set current directory to create this temp file */ - if (Tmpcur) - Tmpcur += 1; - if (!Tmpcur || !Tmpcur[0]) - Tmpcur = Tmppath; - - file = NIL(char *); - fd = -1; - for (t = 0; t < 10; ++t) { /* compute a random name */ - static ulong Key, A; - if (A == 0 || t > 0) { /* get a quasi-random coefficient */ - reg int r; - A = (ulong) time(NIL(time_t *)) ^ (((ulong) (&t)) >> 3); - if (Key == 0) - Key = (A >> 16) | ((A & 0xffff) << 16); - A ^= Key; - if ((r = (A - 1) & 03) != 0) /* Knuth vol.2, page.16, Thm.A */ - A += 4 - r; - } - - Key = A * Key + 987654321; - file = sfprints("%s/sf%3.3.32lu.%3.3.32lu", - Tmpcur[0], (Key >> 15) & 0x7fff, Key & 0x7fff); - - if (!file) - return -1; -#if _has_oflags - if ((fd = - open(file, O_RDWR | O_CREAT | O_EXCL | O_TEMPORARY, - SF_CREATMODE)) >= 0) - break; -#else - if ((fd = open(file, O_RDONLY)) >= 0) { /* file already exists */ - CLOSE(fd); - fd = -1; - } else if ((fd = creat(file, SF_CREATMODE)) >= 0) { /* reopen for read and write */ - CLOSE(fd); - if ((fd = open(file, O_RDWR)) >= 0) - break; - - /* don't know what happened but must remove file */ - while (remove(file) < 0 && errno == EINTR) - errno = 0; - } -#endif - } - - if (fd >= 0) - _rmtmp(f, file); - - return fd; -} - -static int _tmpexcept(Sfio_t * f, int type, void * val, Sfdisc_t * disc) -{ - reg int fd, m; - reg Sfio_t *sf; - Sfio_t newf, savf; - void (*notifyf) (Sfio_t *, int, int); - - NOTUSED(val); - - /* the discipline needs to change only under the following exceptions */ - if (type != SF_WRITE && type != SF_SEEK && - type != SF_DPUSH && type != SF_DPOP && type != SF_DBUFFER) - return 0; - - /* notify function */ - notifyf = _Sfnotify; - - /* try to create the temp file */ - SFCLEAR(&newf, NIL(Vtmutex_t *)); - newf.flags = SF_STATIC; - newf.mode = SF_AVAIL; - - if ((fd = _tmpfd(f)) < 0) - return -1; - - /* make sure that the notify function won't be called here since - we are only interested in creating the file, not the stream */ - _Sfnotify = 0; - sf = sfnew(&newf, NIL(void *), (size_t) SF_UNBOUND, fd, - SF_READ | SF_WRITE); - _Sfnotify = notifyf; - if (!sf) - return -1; - - if (newf.mutex) { /* don't need a mutex for this stream */ - vtmtxclrlock(newf.mutex); - vtmtxclose(newf.mutex); - newf.mutex = NIL(Vtmutex_t *); - } - - /* make sure that new stream has the same mode */ - if ((m = f->flags & (SF_READ | SF_WRITE)) != (SF_READ | SF_WRITE)) - sfset(sf, ((~m) & (SF_READ | SF_WRITE)), 0); - sfset(sf, (f->mode & (SF_READ | SF_WRITE)), 1); - - /* now remake the old stream into the new image */ - memcpy((void *) (&savf), (void *) f, sizeof(Sfio_t)); - memcpy((void *) f, (void *) sf, sizeof(Sfio_t)); - f->push = savf.push; - f->pool = savf.pool; - f->rsrv = savf.rsrv; - f->proc = savf.proc; - f->mutex = savf.mutex; - f->stdio = savf.stdio; - - if (savf.data) { - SFSTRSIZE(&savf); - if (!(savf.flags & SF_MALLOC)) - (void) sfsetbuf(f, (void *) savf.data, savf.size); - if (savf.extent > 0) - (void) sfwrite(f, (void *) savf.data, (size_t) savf.extent); - (void) sfseek(f, (Sfoff_t) (savf.next - savf.data), 0); - if ((savf.flags & SF_MALLOC)) - free((void *) savf.data); - } - - /* announce change of status */ - if (notifyf) - (*notifyf) (f, SF_NEW, f->file); - - f->disc = disc->disc; - - /* erase all traces of newf */ - newf.data = newf.endb = newf.endr = newf.endw = NIL(uchar *); - newf.file = -1; - sfclose(&newf); - - return 1; -} - -Sfio_t *sftmp(reg size_t s) -{ - reg Sfio_t *f; - static Sfdisc_t Tmpdisc = - { NIL(Sfread_f), NIL(Sfwrite_f), NIL(Sfseek_f), _tmpexcept, -#if _tmp_rmfail - &Rmdisc -#else - NIL(Sfdisc_t *) -#endif - }; - - /* start with a memory resident stream */ - if (! - (f = - sfnew(NIL(Sfio_t *), NIL(char *), s, -1, - SF_STRING | SF_READ | SF_WRITE))) - return NIL(Sfio_t *); - - if (s != (size_t) SF_UNBOUND) /* set up a discipline for out-of-bound, etc. */ - f->disc = &Tmpdisc; - - /* make the file now */ - if (s == 0 && _tmpexcept(f, SF_DPOP, NIL(void *), f->disc) < 0) { - sfclose(f); - return NIL(Sfio_t *); - } - - return f; -} diff --git a/internal/ccall/sfio/sfungetc.c b/internal/ccall/sfio/sfungetc.c deleted file mode 100644 index d968395..0000000 --- a/internal/ccall/sfio/sfungetc.c +++ /dev/null @@ -1,92 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Push back one byte to a given SF_READ stream -** -** Written by Kiem-Phong Vo. -*/ -static int _uexcept(reg Sfio_t * f, reg int type, void * val, - reg Sfdisc_t * disc) -{ - NOTUSED(val); - - /* hmm! This should never happen */ - if (disc != _Sfudisc) - return -1; - - /* close the unget stream */ - if (type != SF_CLOSING) - (void) sfclose((*_Sfstack) (f, NIL(Sfio_t *))); - - return 1; -} - -/** - * @param f push back one byte to this stream - * @param c the value to be pushed back - */ -int sfungetc(reg Sfio_t * f, reg int c) -{ - reg Sfio_t *uf; - - SFMTXSTART(f, -1) - - if (c < 0 || (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0)) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - /* fast handling of the typical unget */ - if (f->next > f->data && f->next[-1] == (uchar) c) { - f->next -= 1; - goto done; - } - - /* make a string stream for unget characters */ - if (f->disc != _Sfudisc) { - if (!(uf = sfnew(NIL(Sfio_t *), NIL(char *), (size_t) SF_UNBOUND, - -1, SF_STRING | SF_READ))) { - c = -1; - goto done; - } - _Sfudisc->exceptf = _uexcept; - sfdisc(uf, _Sfudisc); - SFOPEN(f, 0); - (void) sfstack(f, uf); - SFLOCK(f, 0); - } - - /* space for data */ - if (f->next == f->data) { - reg uchar *data; - if (f->size < 0) - f->size = 0; - if (!(data = (uchar *) malloc(f->size + 16))) { - c = -1; - goto done; - } - f->flags |= SF_MALLOC; - if (f->data) - memcpy((char *) (data + 16), (char *) f->data, f->size); - f->size += 16; - f->data = data; - f->next = data + 16; - f->endb = data + f->size; - } - - *--f->next = (uchar) c; - done: - SFOPEN(f, 0); - SFMTXRETURN(f, c); -} diff --git a/internal/ccall/sfio/sfvprintf.c b/internal/ccall/sfio/sfvprintf.c deleted file mode 100644 index 7d80a38..0000000 --- a/internal/ccall/sfio/sfvprintf.c +++ /dev/null @@ -1,1060 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* The engine for formatting data -** -** Written by Kiem-Phong Vo. -*/ - -#define HIGHBITI (~((~((uint)0)) >> 1)) -#define HIGHBITL (~((~((Sfulong_t)0)) >> 1)) - -#define SFFMT_PREFIX (SFFMT_MINUS|SFFMT_SIGN|SFFMT_BLANK) - -#define FPRECIS 6 /* default precision for floats */ - - -/** - * @param f file to print to - * @param form format to use - * @param args arg list if !argf - */ -int sfvprintf(Sfio_t * f, const char *form, va_list args) -{ - reg int v = 0, n_s, base, fmt, flags; - Sflong_t lv; - reg char *sp, *ssp, *endsp, *ep, *endep; - int dot, width, precis, n, n_output; - int sign, decpt; - ssize_t size; - double dval; -#if !defined(_ast_fltmax_double) - Sfdouble_t ldval; -#endif - char *tls[2], **ls; /* for %..[separ]s */ - char *t_str; /* stuff between () */ - ssize_t n_str; /* its length */ - - Argv_t argv; /* for extf to return value */ - Sffmt_t *ft; /* format environment */ - Fmt_t *fm, *fmstk; /* stack contexts */ - - char *oform; /* original format string */ - va_list oargs; /* original arg list */ - Fmtpos_t *fp; /* arg position list */ - int argp, argn; /* arg position and number */ - -#define SLACK 1024 - char buf[SF_MAXDIGITS + SLACK], data[SF_GRAIN]; - char decimal = 0, thousand = 0; - - /* fast io system */ - reg uchar *d, *endd; - reg int w; -#define SFBUF(f) (d = f->next, endd = f->endb) -#define SFINIT(f) (SFBUF(f), n_output = 0) -#define SFEND(f) ((n_output += d - f->next), (f->next = d)) -#define SFputc(f,c) \ - { if(d < endd) { *d++ = (uchar)c; } \ - else \ - { SFEND(f); n_output += (w = SFFLSBUF(f,c)) >= 0 ? 1 : 0; SFBUF(f); \ - if(w < 0) goto done; \ - } \ - } -#define SFnputc(f,c,n) \ - { if((endd-d) >= n) { while(n--) *d++ = (uchar)c; } \ - else \ - { SFEND(f); n_output += (w = SFNPUTC(f,c,n)) > 0 ? w : 0; SFBUF(f); \ - if(n != w) goto done; n = 0;\ - } \ - } -#define SFwrite(f,s,n) \ - { if((endd-d) >= n) { MEMCPY(d,s,n); } \ - else \ - { SFEND(f); n_output += (w = SFWRITE(f,(void*)s,n)) > 0 ? w : 0; SFBUF(f); \ - if(n != w) goto done; \ - } \ - } - - SFCVINIT(); /* initialize conversion tables */ - - SFMTXSTART(f, -1); - - if (!form) - SFMTXRETURN(f, -1); - - /* make sure stream is in write mode and buffer is not NULL */ - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, -1); - - SFLOCK(f, 0); - - if (!f->data && !(f->flags & SF_STRING)) { - f->data = f->next = (uchar *) data; - f->endb = f->data + sizeof(data); - } - SFINIT(f); - - tls[1] = NIL(char *); - - fmstk = NIL(Fmt_t *); - ft = NIL(Sffmt_t *); - - oform = (char *) form; - va_copy(oargs, args); - fp = NIL(Fmtpos_t *); - argn = -1; - - loop_fmt: - while ((n = *form)) { - if (n != '%') { /* collect the non-pattern chars */ - sp = (char *) form++; - while (*form && *form != '%') - form += 1; - n = form - sp; - SFwrite(f, sp, n); - continue; - } else - form += 1; - - flags = 0; - size = width = precis = base = n_s = argp = -1; - ssp = _Sfdigits; - endep = ep = NIL(char *); - endsp = sp = buf + (sizeof(buf) - 1); - t_str = NIL(char *); - n_str = dot = 0; - - loop_flags: /* LOOP FOR \0, %, FLAGS, WIDTH, PRECISION, BASE, TYPE */ - switch ((fmt = *form++)) { - case '\0': - SFputc(f, '%'); - goto pop_fmt; - case '%': - SFputc(f, '%'); - continue; - - case LEFTP: /* get the type enclosed in balanced parens */ - t_str = (char *) form; - for (v = 1;;) { - switch (*form++) { - case 0: /* not balancable, retract */ - form = t_str; - t_str = NIL(char *); - n_str = 0; - goto loop_flags; - case LEFTP: /* increasing nested level */ - v += 1; - continue; - case RIGHTP: /* decreasing nested level */ - if ((v -= 1) != 0) - continue; - if (*t_str != '*') - n_str = (form - 1) - t_str; - else { - t_str = (*_Sffmtintf) (t_str + 1, &n); - if (*t_str == '$') { - if (!fp && !(fp = (*_Sffmtposf) - (f, oform, oargs, 0))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) { - t_str = fp[n].argv.s; - n_str = fp[n].ft.size; - } else if (ft && ft->extf) { - FMTSET(ft, form, args, - LEFTP, 0, 0, 0, 0, 0, NIL(char *), 0); - n = (*ft->extf) - (f, (void *) & argv, ft); - if (n < 0) - goto pop_fmt; - if (!(ft->flags & SFFMT_VALUE)) - goto t_arg; - if ((t_str = argv.s) && - (n_str = (int) ft->size) < 0) - n_str = strlen(t_str); - } else { - t_arg: - if ((t_str = va_arg(args, char *))) - n_str = strlen(t_str); - } - } - goto loop_flags; - } - } - - case '-': - flags = (flags & ~SFFMT_ZERO) | SFFMT_LEFT; - goto loop_flags; - case '0': - if (!(flags & SFFMT_LEFT)) - flags |= SFFMT_ZERO; - goto loop_flags; - case ' ': - if (!(flags & SFFMT_SIGN)) - flags |= SFFMT_BLANK; - goto loop_flags; - case '+': - flags = (flags & ~SFFMT_BLANK) | SFFMT_SIGN; - goto loop_flags; - case '#': - flags |= SFFMT_ALTER; - goto loop_flags; - case QUOTE: - SFSETLOCALE(decimal, thousand); - if (thousand) - flags |= SFFMT_THOUSAND; - goto loop_flags; - - case '.': - dot += 1; - if (dot == 1) { /* so base can be defined without setting precis */ - if (*form != '.') - precis = 0; - } else if (dot == 2) { - base = 0; /* for %s,%c */ - if (*form == 'c' || *form == 's') - goto loop_flags; - if (*form && !isalnum(*form) && - (form[1] == 'c' || form[1] == 's')) { - if (*form == '*') - goto do_star; - else { - base = *form++; - goto loop_flags; - } - } - } - - if (isdigit(*form)) { - fmt = *form++; - goto dot_size; - } else if (*form != '*') - goto loop_flags; - do_star: - form += 1; /* fall thru for '*' */ - case '*': - form = (*_Sffmtintf) (form, &n); - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 0))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) - v = fp[n].argv.i; - else if (ft && ft->extf) { - FMTSET(ft, form, args, '.', dot, 0, 0, 0, 0, NIL(char *), - 0); - if ((*ft->extf) (f, (void *) (&argv), ft) < 0) - goto pop_fmt; - if (ft->flags & SFFMT_VALUE) - v = argv.i; - else - v = (dot <= 2) ? va_arg(args, int) : 0; - } else - v = dot <= 2 ? va_arg(args, int) : 0; - goto dot_set; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - dot_size: - for (v = fmt - '0'; isdigit(*form); ++form) - v = v * 10 + (*form - '0'); - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 0))) - goto pop_fmt; - argp = v - 1; - goto loop_flags; - } - dot_set: - if (dot == 0) { - if ((width = v) < 0) { - width = -width; - flags = (flags & ~SFFMT_ZERO) | SFFMT_LEFT; - } - } else if (dot == 1) - precis = v; - else if (dot == 2) - base = v; - goto loop_flags; - - case 'I': /* object length */ - size = 0; - flags = (flags & ~SFFMT_TYPES) | SFFMT_IFLAG; - if (isdigit(*form)) { - for (n = *form; isdigit(n); n = *++form) - size = size * 10 + (n - '0'); - } else if (*form == '*') { - form = (*_Sffmtintf) (form + 1, &n); - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 0))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) /* use position list */ - size = fp[n].argv.i; - else if (ft && ft->extf) { - FMTSET(ft, form, args, 'I', sizeof(int), 0, 0, 0, 0, - NIL(char *), 0); - if ((*ft->extf) (f, (void *) (&argv), ft) < 0) - goto pop_fmt; - if (ft->flags & SFFMT_VALUE) - size = argv.i; - else - size = va_arg(args, int); - } else - size = va_arg(args, int); - } - goto loop_flags; - - case 'l': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'l') { - form += 1; - flags |= SFFMT_LLONG; - } else - flags |= SFFMT_LONG; - goto loop_flags; - case 'h': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'h') { - form += 1; - flags |= SFFMT_SSHORT; - } else - flags |= SFFMT_SHORT; - goto loop_flags; - case 'L': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_LDOUBLE; - goto loop_flags; - - case 'j': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_JFLAG; - goto loop_flags; - case 'z': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_ZFLAG; - goto loop_flags; - case 't': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_TFLAG; - goto loop_flags; - } - - /* set the correct size */ - if (flags & (SFFMT_TYPES & ~SFFMT_IFLAG)) { - if ((_Sftype[fmt] & (SFFMT_INT | SFFMT_UINT)) || fmt == 'n') { - size = (flags & SFFMT_LLONG) ? sizeof(Sflong_t) : - (flags & SFFMT_LONG) ? sizeof(long) : - (flags & SFFMT_SHORT) ? sizeof(short) : - (flags & SFFMT_SSHORT) ? sizeof(char) : - (flags & SFFMT_JFLAG) ? sizeof(Sflong_t) : - (flags & SFFMT_TFLAG) ? sizeof(ptrdiff_t) : - (flags & SFFMT_ZFLAG) ? sizeof(size_t) : -1; - } else if (_Sftype[fmt] & SFFMT_FLOAT) { - size = (flags & SFFMT_LDOUBLE) ? sizeof(Sfdouble_t) : - (flags & (SFFMT_LONG | SFFMT_LLONG)) ? - sizeof(double) : -1; - } - } - - argp = FP_SET(argp, argn); - if (fp) { - if (ft && ft->extf && fp[argp].ft.fmt != fp[argp].fmt) - fmt = fp[argp].ft.fmt; - argv = fp[argp].argv; - size = fp[argp].ft.size; - } else if (ft && ft->extf) { /* extended processing */ - FMTSET(ft, form, args, fmt, size, flags, width, precis, base, - t_str, n_str); - SFEND(f); - SFOPEN(f, 0); - v = (*ft->extf) (f, (void *) (&argv), ft); - SFLOCK(f, 0); - SFBUF(f); - - if (v < 0) - goto pop_fmt; - else if (v == 0) { /* extf did not output */ - FMTGET(ft, form, args, fmt, size, flags, width, precis, - base); - if (!(ft->flags & SFFMT_VALUE)) - goto get_val; - } else if (v > 0) { /* extf output v bytes */ - n_output += v; - continue; - } - } else { - get_val: - switch (_Sftype[fmt]) { - case SFFMT_INT: - case SFFMT_UINT: -#if !_ast_intmax_long - if (FMTCMP(size, Sflong_t, Sflong_t)) - argv.ll = va_arg(args, Sflong_t); - else -#endif - if (FMTCMP(size, long, Sflong_t)) - argv.l = va_arg(args, long); - else - argv.i = va_arg(args, int); - break; - case SFFMT_FLOAT: -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - argv.ld = va_arg(args, Sfdouble_t); - else -#endif - argv.d = va_arg(args, double); - break; - case SFFMT_POINTER: - argv.vp = va_arg(args, void *); - break; - case SFFMT_BYTE: - if (base >= 0) - argv.s = va_arg(args, char *); - else - argv.c = (char) va_arg(args, int); - break; - default: /* unknown pattern */ - break; - } - } - - switch (fmt) { /* PRINTF DIRECTIVES */ - default: /* unknown directive */ - form -= 1; - argn -= 1; - continue; - - case '!': /* stacking a new environment */ - if (!fp) - fp = (*_Sffmtposf) (f, oform, oargs, 0); - else - goto pop_fmt; - - if (!argv.ft) - goto pop_fmt; - if (!argv.ft->form && ft) { /* change extension functions */ - if (ft->eventf && - (*ft->eventf) (f, SF_DPOP, (void *) form, ft) < 0) - continue; - fmstk->ft = ft = argv.ft; - } else { /* stack a new environment */ - if (!(fm = (Fmt_t *) malloc(sizeof(Fmt_t)))) - goto done; - - if (argv.ft->form) { - fm->form = (char *) form; - va_copy(fm->args, args); - - fm->oform = oform; - va_copy(fm->oargs, oargs); - fm->argn = argn; - fm->fp = fp; - - form = argv.ft->form; - va_copy(args, argv.ft->args); - argn = -1; - fp = NIL(Fmtpos_t *); - } else - fm->form = NIL(char *); - - fm->eventf = argv.ft->eventf; - fm->ft = ft; - fm->next = fmstk; - fmstk = fm; - ft = argv.ft; - } - continue; - - case 's': - if (base >= 0) { /* list of strings */ - if (!(ls = argv.sp) || !ls[0]) - continue; - } else { - if (!(sp = argv.s)) - sp = "(null)"; - ls = tls; - tls[0] = sp; - } - for (sp = *ls;;) { - if ((v = size) >= 0) { - if (precis >= 0 && v > precis) - v = precis; - } else if (precis < 0) - v = strlen(sp); - else { /* precis >= 0 means min(strlen,precis) */ - for (v = 0; v < precis; ++v) - if (sp[v] == 0) - break; - } - if ((n = width - v) > 0) { - if (flags & SFFMT_ZERO) { - SFnputc(f, '0', n); - } else if (!(flags & SFFMT_LEFT)) { - SFnputc(f, ' ', n); - } - } - SFwrite(f, sp, v); - if (n > 0) { - SFnputc(f, ' ', n); - } - if (!(sp = *++ls)) - break; - else if (base > 0) { - SFputc(f, base); - } - } - continue; - - case 'c': /* an array of characters */ - if (base >= 0) { - if (!(sp = argv.s) || !sp[0]) - continue; - } else { - fmt = (int) argv.c; - sp = buf; - buf[0] = fmt; - buf[1] = 0; - } - if (precis <= 0) - precis = 1; - for (fmt = *sp;;) { - if ((n = width - precis) > 0 && !(flags & SFFMT_LEFT)) { - SFnputc(f, ' ', n)}; - v = precis; - SFnputc(f, fmt, v); - if (n > 0) { - SFnputc(f, ' ', n)}; - if (!(fmt = *++sp)) - break; - else if (base > 0) { - SFputc(f, base); - } - } - continue; - - case 'n': /* return current output length */ - SFEND(f); -#if !_ast_intmax_long - if (FMTCMP(size, Sflong_t, Sflong_t)) - *((Sflong_t *) argv.vp) = (Sflong_t) n_output; - else -#endif - if (FMTCMP(size, long, Sflong_t)) - *((long *) argv.vp) = (long) n_output; - else if (sizeof(short) < sizeof(int) && - FMTCMP(size, short, Sflong_t)) - *((short *) argv.vp) = (short) n_output; - else if (size == sizeof(char)) - *((char *) argv.vp) = (char) n_output; - else - *((int *) argv.vp) = (int) n_output; - - continue; - - case 'p': /* pointer value */ - fmt = 'x'; - base = 16; - n_s = 15; - n = 4; - flags = - (flags & ~(SFFMT_SIGN | SFFMT_BLANK | SFFMT_ZERO)) | - SFFMT_ALTER; -#if _more_void_int - lv = (Sflong_t) ((Sfulong_t) argv.vp); - goto long_cvt; -#else - v = (int) ((uint) argv.vp); - goto int_cvt; -#endif - case 'o': - base = 8; - n_s = 7; - n = 3; - flags &= ~(SFFMT_SIGN | SFFMT_BLANK); - goto int_arg; - case 'X': - ssp = "0123456789ABCDEF"; - case 'x': - base = 16; - n_s = 15; - n = 4; - flags &= ~(SFFMT_SIGN | SFFMT_BLANK); - goto int_arg; - case 'i': - fmt = 'd'; - goto d_format; - case 'u': - flags &= ~(SFFMT_SIGN | SFFMT_BLANK); - case 'd': - d_format: - if (base < 2 || base > SF_RADIX) - base = 10; - if ((base & (n_s = base - 1)) == 0) { - if (base < 8) - n = base < 4 ? 1 : 2; - else if (base < 32) - n = base < 16 ? 3 : 4; - else - n = base < 64 ? 5 : 6; - } else - n_s = base == 10 ? -1 : 0; - - int_arg: -#if !_ast_intmax_long || _more_long_int || _more_void_int - if (FMTCMP(size, Sflong_t, Sflong_t)) { - lv = argv.ll; - goto long_cvt; - } else if (FMTCMP(size, long, Sflong_t)) { - if (fmt == 'd') - lv = (Sflong_t) argv.l; - else - lv = (Sflong_t) ((ulong) argv.l); - long_cvt: - if (lv == 0 && precis == 0) - break; - if (lv < 0 && fmt == 'd') { - flags |= SFFMT_MINUS; - if (lv == HIGHBITL) { /* avoid overflow */ - lv = (Sflong_t) (HIGHBITL / base); - *--sp = _Sfdigits[HIGHBITL - - ((Sfulong_t) lv) * base]; - } else - lv = -lv; - } - if (n_s < 0) { /* base 10 */ - reg Sflong_t nv; - sfucvt(lv, sp, nv, ssp, Sflong_t, Sfulong_t); - } else if (n_s > 0) { /* base power-of-2 */ - do { - *--sp = ssp[lv & n_s]; - } while ((lv = ((Sfulong_t) lv) >> n)); - } else { /* general base */ - do { - *--sp = ssp[((Sfulong_t) lv) % base]; - } while ((lv = ((Sfulong_t) lv) / base)); - } - } else -#endif - if (sizeof(short) < sizeof(int) - && FMTCMP(size, short, Sflong_t)) { - if (ft && ft->extf && (ft->flags & SFFMT_VALUE)) { - if (fmt == 'd') - v = (int) ((short) argv.h); - else - v = (int) ((ushort) argv.h); - } else { - if (fmt == 'd') - v = (int) ((short) argv.i); - else - v = (int) ((ushort) argv.i); - } - goto int_cvt; - } else if (size == sizeof(char)) { - if (ft && ft->extf && (ft->flags & SFFMT_VALUE)) { - if (fmt == 'd') - v = (int) ((char) argv.c); - else - v = (int) ((uchar) argv.c); - } else { - if (fmt == 'd') - v = (int) ((char) argv.i); - else - v = (int) ((uchar) argv.i); - } - goto int_cvt; - } else { - v = argv.i; - int_cvt: - if (v == 0 && precis == 0) - break; - if (v < 0 && fmt == 'd') { - flags |= SFFMT_MINUS; - if (v == HIGHBITI) { /* avoid overflow */ - v = (int) (HIGHBITI / base); - *--sp = _Sfdigits[HIGHBITI - ((uint) v) * base]; - } else - v = -v; - } - if (n_s < 0) { /* base 10 */ - sfucvt(v, sp, n, ssp, int, uint); - } else if (n_s > 0) { /* base power-of-2 */ - do { - *--sp = ssp[v & n_s]; - } while ((v = ((uint) v) >> n)); - } else { /* n_s == 0, general base */ - do { - *--sp = ssp[((uint) v) % base]; - } while ((v = ((uint) v) / base)); - } - } - - if (n_s < 0 && (flags & SFFMT_THOUSAND) - && (n = endsp - sp) > 3) { - if ((n %= 3) == 0) - n = 3; - for (ep = buf + SLACK, endep = ep + n;;) { - while (ep < endep) - *ep++ = *sp++; - if (sp == endsp) - break; - if (sp <= endsp - 3) - *ep++ = thousand; - endep = ep + 3; - } - sp = buf + SLACK; - endsp = ep; - } - - /* zero padding for precision if have room in buffer */ - if (precis > 0 && (precis -= (endsp - sp)) < (sp - buf) - 64) - while (precis-- > 0) - *--sp = '0'; - - if (flags & SFFMT_ALTER) { /* prefix */ - if (fmt == 'o') { - if (*sp != '0') - *--sp = '0'; - } else { - if (width > 0 && (flags & SFFMT_ZERO)) { /* do 0 padding first */ - if (fmt == 'x' || fmt == 'X') - n = 0; - else if (dot < 2) - n = width; - else - n = base < 10 ? 2 : 3; - n += (flags & (SFFMT_MINUS | SFFMT_SIGN)) ? 1 : 0; - n = width - (n + (endsp - sp)); - while (n-- > 0) - *--sp = '0'; - } - if (fmt == 'x' || fmt == 'X') { - *--sp = (char) fmt; - *--sp = '0'; - } else if (dot >= 2) { /* base#value notation */ - *--sp = '#'; - if (base < 10) - *--sp = (char) ('0' + base); - else { - *--sp = _Sfdec[(base <<= 1) + 1]; - *--sp = _Sfdec[base]; - } - } - } - } - - break; - - case 'g': - case 'G': /* these ultimately become %e or %f */ - case 'e': - case 'E': - case 'f': -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - ldval = argv.ld; - else -#endif - if (!(ft && ft->extf && (ft->flags & SFFMT_VALUE)) || - FMTCMP(size, double, Sfdouble_t)) - dval = argv.d; - else - dval = (double) argv.f; - - if (fmt == 'e' || fmt == 'E') { - n = (precis = precis < 0 ? FPRECIS : precis) + 1; -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) { - ep = _sfcvt(&ldval, min(n, SF_FDIGITS), - &decpt, &sign, - SFFMT_EFORMAT | SFFMT_LDOUBLE); - } else -#endif - { - ep = _sfcvt(&dval, min(n, SF_FDIGITS), - &decpt, &sign, SFFMT_EFORMAT); - } - goto e_format; - } else if (fmt == 'f' || fmt == 'F') { - precis = precis < 0 ? FPRECIS : precis; -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) { - ep = _sfcvt(&ldval, min(precis, SF_FDIGITS), - &decpt, &sign, SFFMT_LDOUBLE); - } else -#endif - { - ep = _sfcvt(&dval, min(precis, SF_FDIGITS), - &decpt, &sign, 0); - } - goto f_format; - } - - /* 'g' or 'G' format */ - precis = precis < 0 ? FPRECIS : precis == 0 ? 1 : precis; -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) { - ep = _sfcvt(&ldval, min(precis, SF_FDIGITS), - &decpt, &sign, SFFMT_EFORMAT | SFFMT_LDOUBLE); - if (ldval == 0.) - decpt = 1; - else if (*ep == 'I') - goto infinite; - } else -#endif - { - ep = _sfcvt(&dval, min(precis, SF_FDIGITS), - &decpt, &sign, SFFMT_EFORMAT); - if (dval == 0.) - decpt = 1; - else if (*ep == 'I') - goto infinite; - } - - if (!(flags & SFFMT_ALTER)) { /* zap trailing 0s */ - if ((n = sfslen()) > precis) - n = precis; - while ((n -= 1) >= 1 && ep[n] == '0'); - n += 1; - } else - n = precis; - - if (decpt < -3 || decpt > precis) { - precis = n - 1; - goto e_format; - } else { - precis = n - decpt; - goto f_format; - } - - e_format: /* build the x.yyyy string */ - if (isalpha(*ep)) - goto infinite; - sp = endsp = buf + 1; /* reserve space for sign */ - *endsp++ = *ep ? *ep++ : '0'; - - SFSETLOCALE(decimal, thousand); - if (precis > 0 || (flags & SFFMT_ALTER)) - *endsp++ = decimal; - ssp = endsp; - endep = ep + precis; - while ((*endsp++ = *ep++) && ep <= endep); - precis -= (endsp -= 1) - ssp; - - /* build the exponent */ - ep = endep = buf + (sizeof(buf) - 1); -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - dval = ldval ? 1. : 0.; /* so the below test works */ -#endif - if (dval != 0.) { - if ((n = decpt - 1) < 0) - n = -n; - while (n > 9) { - v = n; - n /= 10; - *--ep = (char) ('0' + (v - n * 10)); - } - } else - n = 0; - *--ep = (char) ('0' + n); - if (endep - ep <= 1) /* at least 2 digits */ - *--ep = '0'; - - /* the e/Exponent separator and sign */ - *--ep = (decpt > 0 || dval == 0.) ? '+' : '-'; - *--ep = isupper(fmt) ? 'E' : 'e'; - - goto end_efg; - - f_format: /* data before the decimal point */ - if (isalpha(*ep)) { - infinite: - endsp = (sp = ep) + sfslen(); - ep = endep; - precis = 0; - goto end_efg; - } - - SFSETLOCALE(decimal, thousand); - endsp = sp = buf + 1; /* save a space for sign */ - endep = ep + decpt; - if (decpt > 3 && (flags & SFFMT_THOUSAND)) { - if ((n = decpt % 3) == 0) - n = 3; - while (ep < endep && (*endsp++ = *ep++)) { - if (--n == 0 && (ep <= endep - 3)) { - *endsp++ = thousand; - n = 3; - } - } - } else { - while (ep < endep && (*endsp++ = *ep++)); - } - if (endsp == sp) - *endsp++ = '0'; - - if (precis > 0 || (flags & SFFMT_ALTER)) - *endsp++ = decimal; - - if ((n = -decpt) > 0) { /* output zeros for negative exponent */ - ssp = endsp + min(n, precis); - precis -= n; - while (endsp < ssp) - *endsp++ = '0'; - } - - ssp = endsp; - endep = ep + precis; - while ((*endsp++ = *ep++) && ep <= endep); - precis -= (endsp -= 1) - ssp; - ep = endep; - end_efg: - flags |= SFFMT_FLOAT; - if (sign) - flags |= SFFMT_MINUS; - break; - } - - if (flags == 0 && width <= 0) - goto do_output; - - if (flags & SFFMT_PREFIX) - fmt = - (flags & SFFMT_MINUS) ? '-' : (flags & SFFMT_SIGN) ? '+' : - ' '; - - n = (endsp - sp) + (endep - ep) + (precis <= 0 ? 0 : precis) + - ((flags & SFFMT_PREFIX) ? 1 : 0); - if ((v = width - n) <= 0) - v = 0; - else if (!(flags & SFFMT_ZERO)) { /* right padding */ - if (flags & SFFMT_LEFT) - v = -v; - else if (flags & SFFMT_PREFIX) { /* blank padding, output prefix now */ - *--sp = fmt; - flags &= ~SFFMT_PREFIX; - } - } - - if (flags & SFFMT_PREFIX) { /* put out the prefix */ - SFputc(f, fmt); - if (fmt != ' ') - flags |= SFFMT_ZERO; - } - - if ((n = v) > 0) { /* left padding */ - v = (flags & SFFMT_ZERO) ? '0' : ' '; - SFnputc(f, v, n); - } - - if ((n = precis) > 0 && !(flags & SFFMT_FLOAT)) { /* padding for integer precision */ - SFnputc(f, '0', n); - precis = 0; - } - - do_output: - if ((n = endsp - sp) > 0) - SFwrite(f, sp, n); - - if (flags & (SFFMT_FLOAT | SFFMT_LEFT)) { /* SFFMT_FLOAT: right padding for float precision */ - if ((n = precis) > 0) - SFnputc(f, '0', n); - - /* SFFMT_FLOAT: the exponent of %eE */ - if ((n = endep - (sp = ep)) > 0) - SFwrite(f, sp, n); - - /* SFFMT_LEFT: right padding */ - if ((n = -v) > 0) - SFnputc(f, ' ', n); - } - } - - pop_fmt: - if (fp) { - free(fp); - fp = NIL(Fmtpos_t *); - } - while ((fm = fmstk)) { /* pop the format stack and continue */ - if (fm->eventf) { - if (!form || !form[0]) - (*fm->eventf) (f, SF_FINAL, NIL(void *), ft); - else if ((*fm->eventf) (f, SF_DPOP, (void *) form, ft) < 0) - goto loop_fmt; - } - - fmstk = fm->next; - if ((form = fm->form)) { - va_copy(args, fm->args); - oform = fm->oform; - va_copy(oargs, fm->oargs); - argn = fm->argn; - fp = fm->fp; - } - ft = fm->ft; - free(fm); - if (form && form[0]) - goto loop_fmt; - } - - done: - if (fp) - free(fp); - while ((fm = fmstk)) { - if (fm->eventf) - (*fm->eventf) (f, SF_FINAL, NIL(void *), fm->ft); - fmstk = fm->next; - free(fm); - } - - SFEND(f); - - n = f->next - f->data; - if ((d = f->data) == (uchar *) data) - f->endw = f->endr = f->endb = f->data = NIL(uchar *); - f->next = f->data; - - if ((((flags = f->flags) & SF_SHARE) && !(flags & SF_PUBLIC)) || - (n > 0 && (d == (uchar *) data || (flags & SF_LINE)))) - (void) SFWRITE(f, (void *) d, n); - else - f->next += n; - - SFOPEN(f, 0); - SFMTXRETURN(f, n_output); -} diff --git a/internal/ccall/sfio/sfvscanf.c b/internal/ccall/sfio/sfvscanf.c deleted file mode 100644 index c36e74b..0000000 --- a/internal/ccall/sfio/sfvscanf.c +++ /dev/null @@ -1,796 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* The main engine for reading formatted data -** -** Written by Kiem-Phong Vo. -*/ - -#define MAXWIDTH (int)(((uint)~0)>>1) /* max amount to scan */ - -/** - * @param form format string - * @param accept accepted characters are set to 1 - */ -static char *setclass(reg char *form, reg char *accept) -{ - reg int fmt, c, yes; - - if ((fmt = *form++) == '^') { /* we want the complement of this set */ - yes = 0; - fmt = *form++; - } else - yes = 1; - - for (c = 0; c <= SF_MAXCHAR; ++c) - accept[c] = !yes; - - if (fmt == ']' || fmt == '-') { /* special first char */ - accept[fmt] = yes; - fmt = *form++; - } - - for (; fmt != ']'; fmt = *form++) { /* done */ - if (!fmt) - return (form - 1); - - /* interval */ - if (fmt != '-' || form[0] == ']' || form[-2] > form[0]) - accept[fmt] = yes; - else - for (c = form[-2] + 1; c < form[0]; ++c) - accept[c] = yes; - } - - return form; -} - -static void _sfbuf(Sfio_t * f, int *rs) -{ - if (f->next >= f->endb) { - if (*rs > 0) { /* try peeking for a share stream if possible */ - f->mode |= SF_RV; - if (SFFILBUF(f, -1) > 0) { - f->mode |= SF_PEEK; - return; - } - *rs = -1; /* can't peek, back to normal reads */ - } - (void) SFFILBUF(f, -1); - } -} - -/** - * @param f file to be scanned - * @param form scanning format - * @param args - */ -int sfvscanf(Sfio_t * f, reg const char *form, va_list args) -{ - reg uchar *d, *endd, *data; - reg int inp, shift, base, width; - ssize_t size; - int fmt, flags, dot, n_assign, v, n, n_input; - char *sp; - char accept[SF_MAXDIGITS]; - - Argv_t argv; - Sffmt_t *ft; - Fmt_t *fm, *fmstk; - - Fmtpos_t *fp; - char *oform; - va_list oargs; - int argp, argn; - - void *value; /* location to assign scanned value */ - char *t_str; - ssize_t n_str; - int rs; - -#define SFBUF(f) (_sfbuf(f,&rs), (data = d = f->next), (endd = f->endb) ) -#define SFLEN(f) (d-data) -#define SFEND(f) ((n_input += d-data), \ - (rs > 0 ? SFREAD(f,(void*)data,d-data) : ((f->next = d), 0)) ) -#define SFGETC(f,c) ((c) = (d < endd || (SFEND(f), SFBUF(f), d < endd)) ? \ - (int)(*d++) : -1 ) -#define SFUNGETC(f,c) (--d) - - SFMTXSTART(f, -1); - - if (!form) - SFMTXRETURN(f, -1); - - if (f->mode != SF_READ && _sfmode(f, SF_READ, 0) < 0) - SFMTXRETURN(f, -1); - SFLOCK(f, 0); - - rs = (f->extent < 0 && (f->flags & SF_SHARE)) ? 1 : 0; - - SFCVINIT(); /* initialize conversion tables */ - - SFBUF(f); - n_assign = n_input = 0; - - inp = -1; - - fmstk = NIL(Fmt_t *); - ft = NIL(Sffmt_t *); - - fp = NIL(Fmtpos_t *); - argn = -1; - oform = (char *) form; - va_copy(oargs, args); - - loop_fmt: - while ((fmt = *form++)) { - if (fmt != '%') { - if (isspace(fmt)) { - if (fmt != '\n' || !(f->flags & SF_LINE)) - fmt = -1; - for (;;) { - if (SFGETC(f, inp) < 0 || inp == fmt) - goto loop_fmt; - else if (!isspace(inp)) { - SFUNGETC(f, inp); - goto loop_fmt; - } - } - } else { - match_1: - if (SFGETC(f, inp) != fmt) { - if (inp >= 0) - SFUNGETC(f, inp); - goto pop_fmt; - } - } - continue; - } - - if (*form == '%') { - form += 1; - goto match_1; - } - - if (*form == '\0') - goto pop_fmt; - - if (*form == '*') { - flags = SFFMT_SKIP; - form += 1; - } else - flags = 0; - - /* matching some pattern */ - base = 10; - size = -1; - width = dot = 0; - t_str = NIL(char *); - n_str = 0; - value = NIL(void *); - argp = -1; - - loop_flags: /* LOOP FOR FLAGS, WIDTH, BASE, TYPE */ - switch ((fmt = *form++)) { - case LEFTP: /* get the type which is enclosed in balanced () */ - t_str = (char *) form; - for (v = 1;;) { - switch (*form++) { - case 0: /* not balanceable, retract */ - form = t_str; - t_str = NIL(char *); - n_str = 0; - goto loop_flags; - case LEFTP: /* increasing nested level */ - v += 1; - continue; - case RIGHTP: /* decreasing nested level */ - if ((v -= 1) != 0) - continue; - if (*t_str != '*') - n_str = (form - 1) - t_str; - else { - t_str = (*_Sffmtintf) (t_str + 1, &n); - if (*t_str == '$') { - if (!fp && !(fp = (*_Sffmtposf) - (f, oform, oargs, 1))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) { - t_str = fp[n].argv.s; - n_str = fp[n].ft.size; - } else if (ft && ft->extf) { - FMTSET(ft, form, args, - LEFTP, 0, 0, 0, 0, 0, NIL(char *), 0); - n = (*ft->extf) - (f, (void *) & argv, ft); - if (n < 0) - goto pop_fmt; - if (!(ft->flags & SFFMT_VALUE)) - goto t_arg; - if ((t_str = argv.s) && - (n_str = (int) ft->size) < 0) - n_str = strlen(t_str); - } else { - t_arg: - if ((t_str = va_arg(args, char *))) - n_str = strlen(t_str); - } - } - goto loop_flags; - } - } - - case '#': /* alternative format */ - flags |= SFFMT_ALTER; - goto loop_flags; - - case '.': /* width & base */ - dot += 1; - if (isdigit(*form)) { - fmt = *form++; - goto dot_size; - } else if (*form == '*') { - form = (*_Sffmtintf) (form + 1, &n); - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 1))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) - v = fp[n].argv.i; - else if (ft && ft->extf) { - FMTSET(ft, form, args, '.', dot, 0, 0, 0, 0, - NIL(char *), 0); - if ((*ft->extf) (f, (void *) (&argv), ft) < 0) - goto pop_fmt; - if (ft->flags & SFFMT_VALUE) - v = argv.i; - else - v = (dot <= 2) ? va_arg(args, int) : 0; - } else - v = (dot <= 2) ? va_arg(args, int) : 0; - if (v < 0) - v = 0; - goto dot_set; - } else - goto loop_flags; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - dot_size: - for (v = fmt - '0'; isdigit(*form); ++form) - v = v * 10 + (*form - '0'); - - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 1))) - goto pop_fmt; - argp = v - 1; - goto loop_flags; - } - - dot_set: - if (dot == 0 || dot == 1) - width = v; - else if (dot == 2) - base = v; - goto loop_flags; - - case 'I': /* object size */ - size = 0; - flags = (flags & ~SFFMT_TYPES) | SFFMT_IFLAG; - if (isdigit(*form)) { - for (n = *form; isdigit(n); n = *++form) - size = size * 10 + (n - '0'); - } else if (*form == '*') { - form = (*_Sffmtintf) (form + 1, &n); - if (*form == '$') { - form += 1; - if (!fp && !(fp = (*_Sffmtposf) (f, oform, oargs, 1))) - goto pop_fmt; - n = FP_SET(n, argn); - } else - n = FP_SET(-1, argn); - - if (fp) /* use position list */ - size = fp[n].argv.i; - else if (ft && ft->extf) { - FMTSET(ft, form, args, 'I', sizeof(int), 0, 0, 0, 0, - NIL(char *), 0); - if ((*ft->extf) (f, (void *) (&argv), ft) < 0) - goto pop_fmt; - if (ft->flags & SFFMT_VALUE) - size = argv.i; - else - size = va_arg(args, int); - } else - size = va_arg(args, int); - } - goto loop_flags; - - case 'l': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'l') { - form += 1; - flags |= SFFMT_LLONG; - } else - flags |= SFFMT_LONG; - goto loop_flags; - case 'h': - size = -1; - flags &= ~SFFMT_TYPES; - if (*form == 'h') { - form += 1; - flags |= SFFMT_SSHORT; - } else - flags |= SFFMT_SHORT; - goto loop_flags; - case 'L': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_LDOUBLE; - goto loop_flags; - case 'j': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_JFLAG; - goto loop_flags; - case 'z': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_ZFLAG; - goto loop_flags; - case 't': - size = -1; - flags = (flags & ~SFFMT_TYPES) | SFFMT_TFLAG; - goto loop_flags; - } - - /* set object size */ - if (flags & (SFFMT_TYPES & ~SFFMT_IFLAG)) { - if ((_Sftype[fmt] & (SFFMT_INT | SFFMT_UINT)) || fmt == 'n') { - size = (flags & SFFMT_LLONG) ? sizeof(Sflong_t) : - (flags & SFFMT_LONG) ? sizeof(long) : - (flags & SFFMT_SHORT) ? sizeof(short) : - (flags & SFFMT_SSHORT) ? sizeof(char) : - (flags & SFFMT_JFLAG) ? sizeof(Sflong_t) : - (flags & SFFMT_TFLAG) ? sizeof(ptrdiff_t) : - (flags & SFFMT_ZFLAG) ? sizeof(size_t) : -1; - } else if (_Sftype[fmt] & SFFMT_FLOAT) { - size = (flags & SFFMT_LDOUBLE) ? sizeof(Sfdouble_t) : - (flags & (SFFMT_LONG | SFFMT_LLONG)) ? - sizeof(double) : -1; - } - } - - argp = FP_SET(argp, argn); - if (fp) { - if (!(fp[argp].ft.flags & SFFMT_SKIP)) { - n_assign += 1; - value = fp[argp].argv.vp; - size = fp[argp].ft.size; - if (ft && ft->extf && fp[argp].ft.fmt != fp[argp].fmt) - fmt = fp[argp].ft.fmt; - } else - flags |= SFFMT_SKIP; - } else if (ft && ft->extf) { - FMTSET(ft, form, args, fmt, size, flags, width, 0, base, t_str, - n_str); - SFEND(f); - SFOPEN(f, 0); - v = (*ft->extf) (f, (void *) & argv, ft); - SFLOCK(f, 0); - SFBUF(f); - - if (v < 0) - goto pop_fmt; - else if (v == 0) { /* extf did not use input stream */ - FMTGET(ft, form, args, fmt, size, flags, width, n, base); - if ((ft->flags & SFFMT_VALUE) && !(ft->flags & SFFMT_SKIP)) - value = argv.vp; - } else { /* v > 0: number of input bytes consumed */ - n_input += v; - if (!(ft->flags & SFFMT_SKIP)) - n_assign += 1; - continue; - } - } - - if (_Sftype[fmt] == 0) /* unknown pattern */ - continue; - - if (fmt == '!') { - if (!fp) - fp = (*_Sffmtposf) (f, oform, oargs, 1); - else - goto pop_fmt; - - if (!(argv.ft = va_arg(args, Sffmt_t *))) - continue; - if (!argv.ft->form && ft) { /* change extension functions */ - if (ft->eventf && - (*ft->eventf) (f, SF_DPOP, (void *) form, ft) < 0) - continue; - fmstk->ft = ft = argv.ft; - } else { /* stack a new environment */ - if (!(fm = (Fmt_t *) malloc(sizeof(Fmt_t)))) - goto done; - - if (argv.ft->form) { - fm->form = (char *) form; - va_copy(fm->args, args); - - fm->oform = oform; - va_copy(fm->oargs, oargs); - fm->argn = argn; - fm->fp = fp; - - form = argv.ft->form; - va_copy(args, argv.ft->args); - argn = -1; - fp = NIL(Fmtpos_t *); - } else - fm->form = NIL(char *); - - fm->eventf = argv.ft->eventf; - fm->ft = ft; - fm->next = fmstk; - fmstk = fm; - ft = argv.ft; - } - continue; - } - - /* get the address to assign value */ - if (!value && !(flags & SFFMT_SKIP)) - value = va_arg(args, void *); - - if (fmt == 'n') { /* return length of consumed input */ -#if !_ast_intmax_long - if (FMTCMP(size, Sflong_t, Sflong_t)) - *((Sflong_t *) value) = (Sflong_t) (n_input + SFLEN(f)); - else -#endif - if (sizeof(long) > sizeof(int) && FMTCMP(size, long, Sflong_t)) - *((long *) value) = (long) (n_input + SFLEN(f)); - else if (sizeof(short) < sizeof(int) && - FMTCMP(size, short, Sflong_t)) - *((short *) value) = (short) (n_input + SFLEN(f)); - else if (size == sizeof(char)) - *((char *) value) = (char) (n_input + SFLEN(f)); - else - *((int *) value) = (int) (n_input + SFLEN(f)); - continue; - } - - /* if get here, start scanning input */ - if (width == 0) - width = fmt == 'c' ? 1 : MAXWIDTH; - - /* define the first input character */ - if (fmt == 'c' || fmt == '[') - SFGETC(f, inp); - else { - do { - SFGETC(f, inp); - } - while (isspace(inp)) /* skip starting blanks */ - ; - } - if (inp < 0) - goto done; - - if (_Sftype[fmt] == SFFMT_FLOAT) { - reg char *val; - reg int dot, exponent; - - val = accept; - if (width >= SF_MAXDIGITS) - width = SF_MAXDIGITS - 1; - dot = exponent = 0; - do { - if (isdigit(inp)) - *val++ = inp; - else if (inp == '.') { /* too many dots */ - if (dot++ > 0) - break; - *val++ = '.'; - } else if (inp == 'e' || inp == 'E') { /* too many e,E */ - if (exponent++ > 0) - break; - *val++ = inp; - if (--width <= 0 || SFGETC(f, inp) < 0 || - (inp != '-' && inp != '+' && !isdigit(inp))) - break; - *val++ = inp; - } else if (inp == '-' || inp == '+') { /* too many signs */ - if (val > accept) - break; - *val++ = inp; - } else - break; - - } while (--width > 0 && SFGETC(f, inp) >= 0); - - if (value) { - *val = '\0'; -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - argv.ld = _sfstrtod(accept, NIL(char **)); - else -#endif - argv.d = (double) strtod(accept, NIL(char **)); - } - - if (value) { - n_assign += 1; -#if !defined(_ast_fltmax_double) - if (FMTCMP(size, Sfdouble_t, Sfdouble_t)) - *((Sfdouble_t *) value) = argv.ld; - else -#endif - if (FMTCMP(size, double, Sfdouble_t)) - *((double *) value) = argv.d; - else - *((float *) value) = (float) argv.d; - } - } else if (_Sftype[fmt] == SFFMT_UINT || fmt == 'p') { - if (inp == '-') { - SFUNGETC(f, inp); - goto pop_fmt; - } else - goto int_cvt; - } else if (_Sftype[fmt] == SFFMT_INT) { - int_cvt: - if (inp == '-' || inp == '+') { - if (inp == '-') - flags |= SFFMT_MINUS; - while (--width > 0 && SFGETC(f, inp) >= 0) - if (!isspace(inp)) - break; - } - if (inp < 0) - goto done; - - if (fmt == 'o') - base = 8; - else if (fmt == 'x' || fmt == 'p') - base = 16; - else if (fmt == 'i' && inp == '0') { /* self-described data */ - base = 8; - if (width > 1) { /* peek to see if it's a base-16 */ - if (SFGETC(f, inp) >= 0) { - if (inp == 'x' || inp == 'X') - base = 16; - SFUNGETC(f, inp); - } - inp = '0'; - } - } - - /* now convert */ - argv.lu = 0; - if (base == 16) { - sp = (char *) _Sfcv36; - shift = 4; - if (sp[inp] >= 16) { - SFUNGETC(f, inp); - goto pop_fmt; - } - if (inp == '0' && --width > 0) { /* skip leading 0x or 0X */ - if (SFGETC(f, inp) >= 0 && - (inp == 'x' || inp == 'X') && --width > 0) - SFGETC(f, inp); - } - if (inp >= 0 && sp[inp] < 16) - goto base_shift; - } else if (base == 10) { /* fast base 10 conversion */ - if (inp < '0' || inp > '9') { - SFUNGETC(f, inp); - goto pop_fmt; - } - - do { - argv.lu = - (argv.lu << 3) + (argv.lu << 1) + (inp - '0'); - } while (--width > 0 && SFGETC(f, inp) >= '0' - && inp <= '9'); - - if (fmt == 'i' && inp == '#' && !(flags & SFFMT_ALTER)) { - base = (int) argv.lu; - if (base < 2 || base > SF_RADIX) - goto pop_fmt; - argv.lu = 0; - sp = base <= 36 ? (char *) _Sfcv36 : (char *) _Sfcv64; - if (--width > 0 && - SFGETC(f, inp) >= 0 && sp[inp] < base) - goto base_conv; - } - } else { /* other bases */ - sp = base <= 36 ? (char *) _Sfcv36 : (char *) _Sfcv64; - if (base < 2 || base > SF_RADIX || sp[inp] >= base) { - SFUNGETC(f, inp); - goto pop_fmt; - } - - base_conv: /* check for power of 2 conversions */ - if ((base & ~(base - 1)) == base) { - if (base < 8) - shift = base < 4 ? 1 : 2; - else if (base < 32) - shift = base < 16 ? 3 : 4; - else - shift = base < 64 ? 5 : 6; - - base_shift:do { - argv.lu = (argv.lu << shift) + sp[inp]; - } while (--width > 0 && - SFGETC(f, inp) >= 0 && sp[inp] < base); - } else { - do { - argv.lu = (argv.lu * base) + sp[inp]; - } while (--width > 0 && - SFGETC(f, inp) >= 0 && sp[inp] < base); - } - } - - if (flags & SFFMT_MINUS) - argv.ll = -argv.ll; - - if (value) { - n_assign += 1; - - if (fmt == 'p') -#if _more_void_int - *((void **) value) = (void *) ((ulong) argv.lu); -#else - *((void **) value) = (void *) ((uint) argv.lu); -#endif -#if !_ast_intmax_long - else if (FMTCMP(size, Sflong_t, Sflong_t)) - *((Sflong_t *) value) = argv.ll; -#endif - else if (sizeof(long) > sizeof(int) && - FMTCMP(size, long, Sflong_t)) { - if (fmt == 'd' || fmt == 'i') - *((long *) value) = (long) argv.ll; - else - *((ulong *) value) = (ulong) argv.lu; - } else if (sizeof(short) < sizeof(int) && - FMTCMP(size, short, Sflong_t)) { - if (fmt == 'd' || fmt == 'i') - *((short *) value) = (short) argv.ll; - else - *((ushort *) value) = (ushort) argv.lu; - } else if (size == sizeof(char)) { - if (fmt == 'd' || fmt == 'i') - *((char *) value) = (char) argv.ll; - else - *((uchar *) value) = (uchar) argv.lu; - } else { - if (fmt == 'd' || fmt == 'i') - *((int *) value) = (int) argv.ll; - else - *((uint *) value) = (uint) argv.lu; - } - } - } else if (fmt == 's' || fmt == 'c' || fmt == '[') { - if (size < 0) - size = MAXWIDTH; - if (value) { - argv.s = (char *) value; - if (fmt != 'c') - size -= 1; - } else - size = 0; - - n = 0; - if (fmt == 's') { - do { - if (isspace(inp)) - break; - if ((n += 1) <= size) - *argv.s++ = inp; - } while (--width > 0 && SFGETC(f, inp) >= 0); - } else if (fmt == 'c') { - do { - if ((n += 1) <= size) - *argv.s++ = inp; - } while (--width > 0 && SFGETC(f, inp) >= 0); - } else { /* if(fmt == '[') */ - form = setclass((char *) form, accept); - do { - if (!accept[inp]) { - if (n > 0 || (flags & SFFMT_ALTER)) - break; - else { - SFUNGETC(f, inp); - goto pop_fmt; - } - } - if ((n += 1) <= size) - *argv.s++ = inp; - } while (--width > 0 && SFGETC(f, inp) >= 0); - } - - if (value && (n > 0 || fmt == '[')) { - n_assign += 1; - if (fmt != 'c' && size >= 0) - *argv.s = '\0'; - } - } - - if (width > 0 && inp >= 0) - SFUNGETC(f, inp); - } - - pop_fmt: - if (fp) { - free(fp); - fp = NIL(Fmtpos_t *); - } - while ((fm = fmstk)) { /* pop the format stack and continue */ - if (fm->eventf) { - if (!form || !form[0]) - (*fm->eventf) (f, SF_FINAL, NIL(void *), ft); - else if ((*fm->eventf) (f, SF_DPOP, (void *) form, ft) < 0) - goto loop_fmt; - } - - fmstk = fm->next; - if ((form = fm->form)) { - va_copy(args, fm->args); - oform = fm->oform; - va_copy(oargs, fm->oargs); - argn = fm->argn; - fp = fm->fp; - } - ft = fm->ft; - free(fm); - if (form && form[0]) - goto loop_fmt; - } - - done: - if (fp) - free(fp); - while ((fm = fmstk)) { - if (fm->eventf) - (*fm->eventf) (f, SF_FINAL, NIL(void *), fm->ft); - fmstk = fm->next; - free(fm); - } - - SFEND(f); - SFOPEN(f, 0); - - if (n_assign == 0 && inp < 0) - n_assign = -1; - - SFMTXRETURN(f, n_assign); -} diff --git a/internal/ccall/sfio/sfwr.c b/internal/ccall/sfio/sfwr.c deleted file mode 100644 index 2ec8ef1..0000000 --- a/internal/ccall/sfio/sfwr.c +++ /dev/null @@ -1,218 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write with discipline. -** -** Written by Kiem-Phong Vo. -*/ - -/* hole preserving writes */ -static ssize_t sfoutput(Sfio_t * f, reg char *buf, reg size_t n) -{ - reg char *sp, *wbuf, *endbuf; - reg ssize_t s, w, wr; - - s = w = 0; - wbuf = buf; - endbuf = buf + n; - while (n > 0) { - if ((ssize_t) n < _Sfpage) { /* no hole possible */ - buf += n; - s = n = 0; - } else - while ((ssize_t) n >= _Sfpage) { /* see if a hole of 0's starts here */ - sp = buf + 1; - if (buf[0] == 0 && buf[_Sfpage - 1] == 0) { /* check byte at a time until int-aligned */ - while (((ulong) sp) % sizeof(int)) { - if (*sp != 0) - goto chk_hole; - sp += 1; - } - - /* check using int to speed up */ - while (sp < endbuf) { - if (*((int *) sp) != 0) - goto chk_hole; - sp += sizeof(int); - } - - /* check the remaining bytes */ - if (sp > endbuf) { - sp -= sizeof(int); - while (sp < endbuf) { - if (*sp != 0) - goto chk_hole; - sp += 1; - } - } - } - - chk_hole: - if ((s = sp - buf) >= _Sfpage) /* found a hole */ - break; - - /* skip a dirty page */ - n -= _Sfpage; - buf += _Sfpage; - } - - /* write out current dirty pages */ - if (buf > wbuf) { - if ((ssize_t) n < _Sfpage) { - buf = endbuf; - n = s = 0; - } - if ((wr = write(f->file, wbuf, buf - wbuf)) > 0) { - w += wr; - f->bits &= ~SF_HOLE; - } - if (wr != (buf - wbuf)) - break; - wbuf = buf; - } - - /* seek to a rounded boundary within the hole */ - if (s >= _Sfpage) { - s = (s / _Sfpage) * _Sfpage; - if (SFSK(f, (Sfoff_t) s, SEEK_CUR, NIL(Sfdisc_t *)) < 0) - break; - w += s; - n -= s; - wbuf = (buf += s); - f->bits |= SF_HOLE; - - if (n > 0) { /* next page must be dirty */ - s = (ssize_t) n <= _Sfpage ? 1 : _Sfpage; - buf += s; - n -= s; - } - } - } - - return w > 0 ? w : -1; -} - -ssize_t sfwr(reg Sfio_t * f, reg const void * buf, reg size_t n, - reg Sfdisc_t * disc) -{ - reg ssize_t w; - reg Sfdisc_t *dc; - reg int local, oerrno; - - SFMTXSTART(f, (ssize_t) (-1)); - - GETLOCAL(f, local); - if (!local && !(f->bits & SF_DCDOWN)) { /* an external user's call */ - if (f->mode != SF_WRITE && _sfmode(f, SF_WRITE, 0) < 0) - SFMTXRETURN(f, (ssize_t) (-1)); - if (f->next > f->data && SFSYNC(f) < 0) - SFMTXRETURN(f, (ssize_t) (-1)); - } - - for (;;) { /* stream locked by sfsetfd() */ - if (!(f->flags & SF_STRING) && f->file < 0) - SFMTXRETURN(f, (ssize_t) 0); - - /* clear current error states */ - f->flags &= ~(SF_EOF | SF_ERROR); - - dc = disc; - if (f->flags & SF_STRING) /* total required buffer */ - w = n + (f->next - f->data); - else { /* warn that a write is about to happen */ - SFDISC(f, dc, writef); - if (dc && dc->exceptf && (f->flags & SF_IOCHECK)) { - reg int rv; - if (local) - SETLOCAL(f); - if ((rv = _sfexcept(f, SF_WRITE, n, dc)) > 0) - n = rv; - else if (rv < 0) { - f->flags |= SF_ERROR; - SFMTXRETURN(f, rv); - } - } - - if (f->extent >= 0) { /* make sure we are at the right place to write */ - if (f->flags & SF_APPENDWR) { - if (f->here != f->extent || (f->flags & SF_SHARE)) { - f->here = SFSK(f, (Sfoff_t) 0, SEEK_END, dc); - f->extent = f->here; - } - } else if ((f->flags & SF_SHARE) - && !(f->flags & SF_PUBLIC)) - f->here = SFSK(f, f->here, SEEK_SET, dc); - } - - oerrno = errno; - errno = 0; - - if (dc && dc->writef) { - SFDCWR(f, buf, n, dc, w); - } else if (SFISNULL(f)) - w = n; - else if (f->flags & SF_WHOLE) - goto do_write; - else if ((ssize_t) n >= _Sfpage && - !(f->flags & (SF_SHARE | SF_APPENDWR)) && - f->here == f->extent && (f->here % _Sfpage) == 0) { - if ((w = sfoutput(f, (char *) buf, n)) <= 0) - goto do_write; - } else { - do_write: - if ((w = write(f->file, (char *) buf, n)) > 0) - f->bits &= ~SF_HOLE; - } - - if (errno == 0) - errno = oerrno; - - if (w > 0) { - if (!(f->bits & SF_DCDOWN)) { - if (f->flags & (SF_APPENDWR | SF_PUBLIC)) - f->here = SFSK(f, (Sfoff_t) 0, SEEK_CUR, dc); - else - f->here += w; - if (f->extent >= 0 && f->here > f->extent) - f->extent = f->here; - } - - SFMTXRETURN(f, (ssize_t) w); - } - } - - if (local) - SETLOCAL(f); - switch (_sfexcept(f, SF_WRITE, w, dc)) { - case SF_ECONT: - goto do_continue; - case SF_EDONE: - w = local ? 0 : w; - SFMTXRETURN(f, (ssize_t) w); - case SF_EDISC: - if (!local && !(f->flags & SF_STRING)) - goto do_continue; - /* else fall thru */ - case SF_ESTACK: - SFMTXRETURN(f, (ssize_t) (-1)); - } - - do_continue: - for (dc = f->disc; dc; dc = dc->disc) - if (dc == disc) - break; - disc = dc; - } -} diff --git a/internal/ccall/sfio/sfwrite.c b/internal/ccall/sfio/sfwrite.c deleted file mode 100644 index d6d0527..0000000 --- a/internal/ccall/sfio/sfwrite.c +++ /dev/null @@ -1,148 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "sfhdr.h" - -/* Write data out to the file system -** -** Written by Kiem-Phong Vo. -*/ - -/** - * @param f write to this stream - * @param buf buffer to be written - * @param n number of bytes - */ -ssize_t sfwrite(reg Sfio_t * f, const void * buf, reg size_t n) -{ - reg uchar *s, *begs, *next; - reg ssize_t w; - reg int local; - - SFMTXSTART(f, (ssize_t) (-1)); - - GETLOCAL(f, local); - - if (!buf) - SFMTXRETURN(f, (ssize_t) (-1)); - - /* release peek lock */ - if (f->mode & SF_PEEK) { - if (!(f->mode & SF_WRITE) && (f->flags & SF_RDWR) != SF_RDWR) - SFMTXRETURN(f, (ssize_t) (-1)); - - if ((uchar *) buf != f->next && - (!f->rsrv || f->rsrv->data != (uchar *) buf)) - SFMTXRETURN(f, (ssize_t) (-1)); - - f->mode &= ~SF_PEEK; - - if (f->mode & SF_PKRD) { /* read past peeked data */ - char buf[16]; - reg ssize_t r; - - for (w = n; w > 0;) { - if ((r = w) > sizeof(buf)) - r = sizeof(buf); - if ((r = read(f->file, buf, r)) <= 0) { - n -= w; - break; - } else - w -= r; - } - - f->mode &= ~SF_PKRD; - f->endb = f->data + n; - f->here += n; - } - - if ((f->mode & SF_READ) && f->proc) - f->next += n; - } - - s = begs = (uchar *) buf; - for (;; f->mode &= ~SF_LOCK) { /* check stream mode */ - if (SFMODE(f, local) != SF_WRITE - && _sfmode(f, SF_WRITE, local) < 0) { - w = s > begs ? s - begs : -1; - SFMTXRETURN(f, w); - } - - SFLOCK(f, local); - - w = f->endb - f->next; - - if (s == f->next) { /* after sfreserve */ - if (w > (ssize_t) n) - w = (ssize_t) n; - f->next = (s += w); - n -= w; - break; - } - - /* attempt to create space in buffer */ - if (w == 0 || ((f->flags & SF_WHOLE) && w < (ssize_t) n)) { - if (f->flags & SF_STRING) { /* extend buffer */ - (void) SFWR(f, s, n - w, f->disc); - if ((w = f->endb - f->next) < (ssize_t) n) - break; - } else if (f->next > f->data) { - (void) SFFLSBUF(f, -1); - if ((w = f->endb - f->next) < (ssize_t) n && - (f->flags & SF_WHOLE) && f->next > f->data) - break; - } - } - - if (!(f->flags & SF_STRING) && f->next == f->data && SFDIRECT(f, n)) { /* bypass buffering */ - if ((w = SFWR(f, s, n, f->disc)) <= 0) - break; - } else { - if (w > (ssize_t) n) - w = (ssize_t) n; - if (w <= 0) /* no forward progress possible */ - break; - memcpy(f->next, s, w); - f->next += w; - } - - s += w; - if ((n -= w) <= 0) - break; - } - - /* always flush buffer for share streams */ - if (f->extent < 0 && (f->flags & SF_SHARE) && !(f->flags & SF_PUBLIC)) - (void) SFFLSBUF(f, -1); - - /* check to see if buffer should be flushed */ - else if (n == 0 && (f->flags & SF_LINE) && !(f->flags & SF_STRING)) { - if ((ssize_t) (n = f->next - f->data) > (w = s - begs)) - n = w; - if (n > 0 && n < HIFORLINE) { - for (next = f->next - 1; n > 0; --n, --next) { - if (*next == '\n') { - n = HIFORLINE; - break; - } - } - } - if (n >= HIFORLINE) - (void) SFFLSBUF(f, -1); - } - - SFOPEN(f, local); - - w = s - begs; - SFMTXRETURN(f, w); -} diff --git a/internal/ccall/sfio/vthread.h b/internal/ccall/sfio/vthread.h deleted file mode 100644 index 72d1702..0000000 --- a/internal/ccall/sfio/vthread.h +++ /dev/null @@ -1,178 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _VTHREAD_H -#define _VTHREAD_H 1 - -#define VTHREAD_VERSION 20001201L - -/* Header for the Vthread library. -** Note that the macro vt_threaded may be defined -** outside of vthread.h to suppress threading. -** -** Written by Kiem-Phong Vo -*/ - -#include - -#include "config.h" - -#ifdef HAVE_SYS_TYPES_H -# include -#endif // HAVE_SYS_TYPES_H - -#undef vt_threaded - -#ifndef vt_threaded -#define vt_threaded 0 -#endif - -/* common attributes for various structures */ -#define VT_RUNNING 000000001 /* thread is running */ -#define VT_SUSPENDED 000000002 /* thread is suspended */ -#define VT_WAITED 000000004 /* thread has been waited */ -#define VT_FREE 000010000 /* object can be freed */ -#define VT_INIT 000020000 /* object was initialized */ -#define VT_BITS 000030007 /* bits that we care about */ - -/* directives for vtset() */ -#define VT_STACK 1 /* set stack size */ - - typedef struct _vtmutex_s Vtmutex_t; - typedef struct _vtonce_s Vtonce_t; - typedef struct _vthread_s Vthread_t; - -#ifndef EINVAL -#define EINVAL 22 -#endif -#ifndef EBUSY -#define EBUSY 16 -#endif -#ifndef EDEADLK -#define EDEADLK 45 -#endif -#ifndef EPERM -#define EPERM 1 -#endif - - extern Vthread_t *vtopen(Vthread_t *, int); - extern int vtclose(Vthread_t *); - extern int vtset(Vthread_t *, int, void *); - extern int vtrun(Vthread_t *, void *(*)(void *), void *); - extern int vtkill(Vthread_t *); - extern int vtwait(Vthread_t *); - -/* extern int vtonce(Vtonce_t *, void (*)()); */ - - extern Vtmutex_t *vtmtxopen(Vtmutex_t *, int); - extern int vtmtxclose(Vtmutex_t *); - extern int vtmtxlock(Vtmutex_t *); - extern int vtmtxtrylock(Vtmutex_t *); - extern int vtmtxunlock(Vtmutex_t *); - extern int vtmtxclrlock(Vtmutex_t *); - - extern void *vtstatus(Vthread_t *); - extern int vterror(Vthread_t *); - extern int vtmtxerror(Vtmutex_t *); - extern int vtonceerror(Vtonce_t *); - -#if defined(vt_threaded) && vt_threaded -/* mutex structure */ - struct _vtmutex_s { - _vtmtx_t lock; - int count; - _vtid_t owner; - int state; - int error; - }; - -/* structure for states of thread */ - struct _vthread_s { - _vtself_t self; /* self-handle */ - _vtid_t id; /* thread id */ - _vtattr_t attrs; /* attributes */ - size_t stack; /* stack size */ - int state; /* execution state */ - int error; /* error status */ - void *exit; /* exit value */ - }; - -/* structure for exactly once execution */ - struct _vtonce_s { - int done; - _vtonce_t once; - int error; - }; - -#if defined(_WIN32) -#define VTONCE_INITDATA {0, 0} -#else -#define VTONCE_INITDATA {0, PTHREAD_ONCE_INIT } -#endif - -#define vtstatus(vt) ((vt)->exit) -#define vterror(vt) ((vt)->error) -#define vtmtxerror(mtx) ((mtx)->error) -#define vtonceerror(once) ((once)->error) - -#endif /*vt_threaded */ - -/* fake structures and functions */ -#if defined(vt_threaded) && !vt_threaded - struct _vtmutex_s { - int error; - }; - struct _vtattr_s { - int error; - }; - struct _vthread_s { - int error; - }; - struct _vtonce_s { - int error; - }; - -#define VTONCE_INITDATA {0} - -#define vtopen(vt,flgs) ((Vthread_t*)0) -#define vtclose(vt) (-1) -#define vtkill(vt) (-1) -#define vtwait(vt) (-1) -#define vtrun(vt,fn,arg) (-1) - -#define vtset(vt,t,v) (-1) -#define vtonce(on,fu) (-1) - -#define vtmtxopen(mtx,flgs) (void)((Vtmutex_t*)0) -#define vtmtxclose(mtx) (void)(-1) -#define vtmtxlock(mtx) (void)(-1) -#define vtmtxtrylock(mtx) (-1) -#define vtmtxunlock(mtx) (void)(-1) -#define vtmtxclrlock(mtx) (void)(-1) - -#define vtstatus(vt) ((void*)0) -#define vterror(vt) (0) -#define vtmtxerror(mtx) (0) -#define vtonceerror(once) (0) - -#endif /*!vt_threaded */ - -#endif /*_VTHREAD_H*/ - -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/sparse.c b/internal/ccall/sparse.c deleted file mode 100644 index 5e903b1..0000000 --- a/internal/ccall/sparse.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "sparse/SparseMatrix.c" -#include "sparse/general.c" -#include "sparse/BinaryHeap.c" -#include "sparse/IntStack.c" -#include "sparse/vector.c" -#include "sparse/DotIO.c" -#include "sparse/LinkedList.c" -#include "sparse/colorutil.c" -#include "sparse/color_palette.c" -#include "sparse/mq.c" -#include "sparse/clustering.c" -#include "sparse/QuadTree.c" diff --git a/internal/ccall/sparse/BinaryHeap.c b/internal/ccall/sparse/BinaryHeap.c deleted file mode 100644 index 0321efd..0000000 --- a/internal/ccall/sparse/BinaryHeap.c +++ /dev/null @@ -1,291 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "BinaryHeap.h" - -BinaryHeap BinaryHeap_new(int (*cmp)(void*item1, void*item2)){ - BinaryHeap h; - int max_len = 1<<8, i; - - h = MALLOC(sizeof(struct BinaryHeap_struct)); - h->max_len = max_len; - h->len = 0; - h->heap = MALLOC(sizeof(void*)*max_len); - h->id_to_pos = MALLOC(sizeof(int)*max_len); - for (i = 0; i < max_len; i++) (h->id_to_pos)[i] = -1; - - h->pos_to_id = MALLOC(sizeof(int)*max_len); - h->id_stack = IntStack_new(); - h->cmp = cmp; - return h; -} - - -void BinaryHeap_delete(BinaryHeap h, void (*del)(void* item)){ - int i; - if (!h) return; - FREE(h->id_to_pos); - FREE(h->pos_to_id); - IntStack_delete(h->id_stack); - if (del) for (i = 0; i < h->len; i++) del((h->heap)[i]); - FREE(h->heap); - FREE(h); -} - -static BinaryHeap BinaryHeap_realloc(BinaryHeap h){ - int max_len0 = h->max_len, max_len = h->max_len, i; - max_len = max_len + MAX(0.2*max_len, 10); - h->max_len = max_len; - - h->heap = REALLOC(h->heap, sizeof(void*)*max_len); - if (!(h->heap)) return NULL; - - h->id_to_pos = REALLOC(h->id_to_pos, sizeof(int)*max_len); - if (!(h->id_to_pos)) return NULL; - - h->pos_to_id = REALLOC(h->pos_to_id, sizeof(int)*max_len); - if (!(h->pos_to_id)) return NULL; - - for (i = max_len0; i < max_len; i++) (h->id_to_pos)[i] = -1; - return h; - -} - -#define ParentPos(pos) (pos - 1)/2 -#define ChildrenPos1(pos) (2*(pos)+1) -#define ChildrenPos2(pos) (2*(pos)+2) - -static void swap(BinaryHeap h, int parentPos, int nodePos){ - int parentID, nodeID; - void *tmp; - void **heap = h->heap; - int *id_to_pos = h->id_to_pos, *pos_to_id = h->pos_to_id; - - assert(parentPos < h->len); - assert(nodePos < h->len); - - parentID = pos_to_id[parentPos]; - nodeID = pos_to_id[nodePos]; - - tmp = heap[parentPos]; - heap[parentPos] = heap[nodePos]; - heap[nodePos] = tmp; - - pos_to_id[parentPos] = nodeID; - id_to_pos[nodeID] = parentPos; - - pos_to_id[nodePos] = parentID; - id_to_pos[parentID] = nodePos; - -} - -static int siftUp(BinaryHeap h, int nodePos){ - int parentPos; - - void **heap = h->heap; - - - if (nodePos != 0) { - parentPos = ParentPos(nodePos); - - if ((h->cmp)(heap[parentPos], heap[nodePos]) == 1) {/* if smaller than parent, swap */ - swap(h, parentPos, nodePos); - nodePos = siftUp(h, parentPos); - } - } - return nodePos; -} - -static int siftDown(BinaryHeap h, int nodePos){ - int childPos, childPos1, childPos2; - - void **heap = h->heap; - - - childPos1 = ChildrenPos1(nodePos); - childPos2 = ChildrenPos2(nodePos); - if (childPos1 > h->len - 1) return nodePos;/* no child */ - if (childPos1 == h->len - 1) { - childPos = childPos1;/* one child */ - } else {/* two child */ - if ((h->cmp)(heap[childPos1], heap[childPos2]) == 1){ /* pick the smaller of the two child */ - childPos = childPos2; - } else { - childPos = childPos1; - } - } - - if ((h->cmp)(heap[nodePos], heap[childPos]) == 1) { - /* if larger than child, swap */ - swap(h, nodePos, childPos); - nodePos = siftDown(h, childPos); - } - - return nodePos; -} - -int BinaryHeap_insert(BinaryHeap h, void *item){ - int len = h->len, id = len, flag, pos; - - /* insert an item, and return its ID. This ID can be used later to extract the item */ - if (len > h->max_len - 1) { - if (BinaryHeap_realloc(h) == NULL) return BinaryHeap_error_malloc; - } - - /* check if we have IDs in the stack to reuse. If no, then assign the last pos as the ID */ - id = IntStack_pop(h->id_stack, &flag); - if (flag) id = len; - - h->heap[len] = item; - h->id_to_pos[id] = len; - h->pos_to_id[len] = id; - - (h->len)++; - - pos = siftUp(h, len); - assert(h->id_to_pos[id] == pos); - assert(h->pos_to_id[pos] == id); - - - return id; -} - - -void* BinaryHeap_get_min(BinaryHeap h){ - /* return the min item */ - return h->heap[0]; -} - -void* BinaryHeap_extract_min(BinaryHeap h){ - /* return and remove the min item */ - if (h->len == 0) return NULL; - return BinaryHeap_extract_item(h, (h->pos_to_id)[0]); -} - -void* BinaryHeap_extract_item(BinaryHeap h, int id){ - /* extract an item with ID out and delete it */ - void *item; - int *id_to_pos = h->id_to_pos; - int pos; - - if (id >= h->max_len) return NULL; - - pos = id_to_pos[id]; - - if (pos < 0) return NULL; - - assert(pos < h->len); - - item = (h->heap)[pos]; - - IntStack_push(h->id_stack, id); - - if (pos < h->len - 1){/* move the last item to occupy the position of extracted item */ - swap(h, pos, h->len - 1); - (h->len)--; - pos = siftUp(h, pos); - pos = siftDown(h, pos); - } else { - (h->len)--; - } - - (h->id_to_pos)[id] = -1; - - return item; - -} - -int BinaryHeap_reset(BinaryHeap h, int id, void *item){ - /* reset value of an item with specified id */ - int pos; - - if (id >= h->max_len) return -1; - pos = h->id_to_pos[id]; - if (pos < 0) return -1; - - h->heap[pos] = item; - - pos = siftUp(h, pos); - - pos = siftDown(h, pos); - - return pos; - -} -void* BinaryHeap_get_item(BinaryHeap h, int id){ - /* get an item with ID out, without deleting */ - int pos; - - if (id >= h->max_len) return NULL; - - pos = h->id_to_pos[id]; - - if (pos < 0) return NULL; - return (h->heap)[pos]; -} - -void BinaryHeap_sanity_check(BinaryHeap h){ - int i, key_spare, parentPos, *id_to_pos = h->id_to_pos, *pos_to_id = h->pos_to_id; - void **heap = h->heap; - int *mask; - - /* check that this is a binary heap: children is smaller than parent */ - for (i = 1; i < h->len; i++){ - parentPos = ParentPos(i); - assert((h->cmp)(heap[i], heap[parentPos]) >= 0); - } - - mask = MALLOC(sizeof(int)*(h->len + IntStack_get_length(h->id_stack))); - for (i = 0; i < h->len + IntStack_get_length(h->id_stack); i++) mask[i] = -1; - - /* check that spare keys has negative id_to_pos mapping */ - for (i = 0; i <= h->id_stack->last; i++){ - key_spare = h->id_stack->stack[i]; - assert(h->id_to_pos[key_spare] < 0); - mask[key_spare] = 1;/* mask spare ID */ - } - - /* check that - pos_to_id[id_to_pos[i]] = i, for i not in the id_stack & i < length(id_stack)+len - id_to_pos[pos_to_id[i]] = i, 0 <= i < len - */ - for (i = 1; i < h->len; i++){ - assert(mask[pos_to_id[i]] == -1);/* that id is in use so can't be spare */ - mask[pos_to_id[i]] = 1; - assert(id_to_pos[pos_to_id[i]] == i); - } - - /* all IDs, spare or in use, are ccounted for and give a contiguous set */ - for (i = 0; i < h->len + IntStack_get_length(h->id_stack); i++) assert(mask[i] =- 1); - - FREE(mask); -} -void BinaryHeap_print(BinaryHeap h, void (*pnt)(void*)){ - int i, k = 2; - - for (i = 0; i < h->len; i++){ - pnt(h->heap[i]); - fprintf(stderr, "(%d) ",(h->pos_to_id)[i]); - if (i == k-2) { - fprintf(stderr, "\n"); - k *= 2; - } - } - fprintf(stderr, "\nSpare keys ="); - for (i = 0; i <= h->id_stack->last; i++){ - fprintf(stderr,"%d(%d) ",h->id_stack->stack[i], h->id_to_pos[h->id_stack->stack[i]]); - } - fprintf(stderr, "\n"); -} - - diff --git a/internal/ccall/sparse/BinaryHeap.h b/internal/ccall/sparse/BinaryHeap.h deleted file mode 100644 index 9464425..0000000 --- a/internal/ccall/sparse/BinaryHeap.h +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef BinaryHeap_H -#define BinaryHeap_H - -#include "general.h" -#include "IntStack.h" - -/* binary heap code. - Caution: items inserted should be kept untouched, e.g., the value of the item should be kepted unchanged while the heap is still in use! - To change the valud of am item, use BinaryHeap_reset -*/ - -struct BinaryHeap_struct { - int max_len;/* storage allocated for the heap */ - int len;/*number of elements in the heap so far. <= maxlen */ - void **heap; - int *id_to_pos;/* this array store the position of an item with ID. For ID that was not in use, - i.e., no in pos_to_id[1:len], - id_to_pos[id] = -1 - */ - int *pos_to_id;/* this array stores the ID of item at position pos. - pos_to_id[id_to_pos[i]] = i, for i not in the id_stack & i < length(id_stack)+len - id_to_pos[pos_to_id[i]] = i, 0 <= i < len - */ - IntStack id_stack;/* a stack that store IDs that is no longer used, to - be assigned to newly inserted elements. - For sanity check, the union of items in - the id_stack, and that is pos_to_id[1:len], - should form a set of contiguous numbers - {1, 2, ..., len, ...} - */ - int (*cmp)(void*item1, void*item2);/* comparison function. Return 1,0,-1 - if item1 >, =, < item2 */ -}; - -enum {BinaryHeap_error_malloc = -10}; - -typedef struct BinaryHeap_struct* BinaryHeap; - -BinaryHeap BinaryHeap_new(int (*cmp)(void*item1, void*item2)); - - -void BinaryHeap_delete(BinaryHeap h, void (*del)(void* item));/* delete not just the heap data structure, but also the data items - through a user supplied del function. */ - -int BinaryHeap_insert(BinaryHeap h, void *item);/* insert an item, and return its ID. - This ID can be used later to extract the item. ID - are always nonnegative. If the return value is - negative, it is an error message */ - -void* BinaryHeap_get_min(BinaryHeap h);/* return the min item */ - -void* BinaryHeap_extract_min(BinaryHeap h);/* return and remove the min item */ - -void* BinaryHeap_extract_item(BinaryHeap h, int id);/* extract an item with ID out and delete it */ - -void* BinaryHeap_get_item(BinaryHeap h, int id);/* get an item with ID out, without deleting */ - -int BinaryHeap_reset(BinaryHeap h, int id, void *item);/* reset value of an item with specified id. Return new pos. If ID is invalue, return -1 */ - -void BinaryHeap_print(BinaryHeap h, void (*pnt)(void*)); - -void BinaryHeap_sanity_check(BinaryHeap h); - -#endif diff --git a/internal/ccall/sparse/DotIO.c b/internal/ccall/sparse/DotIO.c deleted file mode 100644 index 99d2c92..0000000 --- a/internal/ccall/sparse/DotIO.c +++ /dev/null @@ -1,1202 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#define STANDALONE -#include "general.h" -#include "DotIO.h" -#include "clustering.h" -#include "mq.h" -/* #include "spring_electrical.h" */ -#include "color_palette.h" -#include "colorutil.h" - -#ifndef POINTS -#define POINTS(inch) 72*(inch) -#endif - -typedef struct { - Agrec_t h; - unsigned int id; -} Agnodeinfo_t; - -#define ND_id(n) (((Agnodeinfo_t*)((n)->base.data))->id) - -#if 0 -static void -posStr (int len_buf, char* buf, int dim, real* x, double sc) -{ - char s[1000]; - int i; - int len = 0; - - buf[0] = '\0'; - for (i = 0; i < dim; i++){ - if (i < dim - 1){ - sprintf(s,"%f,",sc*x[i]); - } else { - sprintf(s,"%f",sc*x[i]); - } - len += strlen(s); - assert(len < len_buf); - buf = strcat(buf, s); - } -} - -static void -attach_embedding (Agraph_t* g, int dim, double sc, real *x) -{ - Agsym_t* sym = agattr(g, AGNODE, "pos", NULL); - Agnode_t* n; -#define SLEN 1024 - char buf[SLEN]; - int i = 0; - - if (!sym) - sym = agattr (g, AGNODE, "pos", ""); - - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - assert (i == ND_id(n)); - posStr (SLEN, buf, dim, x + i*dim, sc); - agxset (n, sym, buf); - i++; - } - -} -#endif - -static void color_string(int slen, char *buf, int dim, real *color){ - if (dim > 3 || dim < 1){ - fprintf(stderr,"can only 1, 2 or 3 dimensional color space. with color value between 0 to 1\n"); - assert(0); - } - assert(slen >= 3); - if (dim == 3){ - sprintf(buf,"#%02x%02x%02x", MIN((unsigned int)(color[0]*255),255), - MIN((unsigned int) (color[1]*255), 255), MIN((unsigned int)(color[2]*255), 255)); - } else if (dim == 1){ - sprintf(buf,"#%02x%02x%02x", MIN((unsigned int)(color[0]*255),255), - MIN((unsigned int) (color[0]*255), 255), MIN((unsigned int)(color[0]*255), 255)); - } else if (dim == 2){ - sprintf(buf,"#%02x%02x%02x", MIN((unsigned int)(color[0]*255),255), - 0, MIN((unsigned int)(color[1]*255), 255)); - } -} - -void attach_edge_colors(Agraph_t* g, int dim, real *colors){ - /* colors is array of dim*nedges, with color for edge i at colors[dim*i, dim(i+1)) - */ - Agsym_t* sym = agattr(g, AGEDGE, "color", 0); - Agedge_t* e; - Agnode_t* n; - enum {slen = 1024}; - char buf[slen]; - int row, col; - int ie = 0; - - if (!sym) - sym = agattr (g, AGEDGE, "color", ""); - - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - row = ND_id(n); - for (e = agfstout (g, n); e; e = agnxtout (g, e)) { - col = ND_id(aghead(e)); - if (row == col) continue; - color_string(slen, buf, dim, colors + ie*dim); - agxset(e, sym, buf); - ie++; - } - } - -} - -/* SparseMatrix_read_dot: - * Wrapper for reading dot graph from file - */ -Agraph_t* -SparseMatrix_read_dot(FILE* f) -{ - Agraph_t* g; - g = agread (f, 0); - aginit(g, AGNODE, "nodeinfo", sizeof(Agnodeinfo_t), TRUE); - return g; -} - -/* SparseMatrix_import_dot: - * Assumes g is connected and simple, i.e., we can have a->b and b->a - * but not a->b and a->b - */ -SparseMatrix -SparseMatrix_import_dot (Agraph_t* g, int dim, real **label_sizes, real **x, int *n_edge_label_nodes, int **edge_label_nodes, int format, SparseMatrix *D) -{ - SparseMatrix A = 0; - Agnode_t* n; - Agedge_t* e; - Agsym_t *sym, *symD = NULL; - Agsym_t *psym; - int nnodes; - int nedges; - int i, row; - int* I; - int* J; - real *val, *valD = NULL; - real v; - int type = MATRIX_TYPE_REAL; - size_t sz = sizeof(real); - real padding = 10; - int nedge_nodes = 0; - - - - if (!g) return NULL; - nnodes = agnnodes (g); - nedges = agnedges (g); - if (format != FORMAT_CSR && format != FORMAT_COORD) { - fprintf (stderr, "Format %d not supported\n", format); - exit (1); - } - - /* Assign node ids */ - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) - ND_id(n) = i++; - - if (format == FORMAT_COORD){ - A = SparseMatrix_new(i, i, nedges, MATRIX_TYPE_REAL, format); - A->nz = nedges; - I = A->ia; - J = A->ja; - val = (real*) A->a; - } else { - I = N_NEW(nedges, int); - J = N_NEW(nedges, int); - val = N_NEW(nedges, real); - } - - - if (format == FORMAT_COORD){ - A = SparseMatrix_new(i, i, nedges, MATRIX_TYPE_REAL, format); - A->nz = nedges; - I = A->ia; - J = A->ja; - val = (real*) A->a; - } else { - I = N_NEW(nedges, int); - J = N_NEW(nedges, int); - val = N_NEW(nedges, real); - } - - sym = agattr(g, AGEDGE, "weight", NULL); - if (D) { - symD = agattr(g, AGEDGE, "len", NULL); - valD = N_NEW(nedges, real); - } - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - if (edge_label_nodes && strncmp(agnameof(n), "|edgelabel|",11)==0) nedge_nodes++; - row = ND_id(n); - for (e = agfstout (g, n); e; e = agnxtout (g, e)) { - I[i] = row; - J[i] = ND_id(aghead(e)); - - /* edge weight */ - if (sym) { - if (sscanf (agxget(e,sym), "%lf", &v) != 1) v = 1; - } else { - v = 1; - } - val[i] = v; - - /* edge length */ - if (symD) { - if (sscanf (agxget (e, symD), "%lf", &v) != 1) { - v = 72; - } else { - v *= 72;/* len is specified in inch. Convert to points */ - } - valD[i] = v; - } else if (valD) { - valD[i] = 72; - } - - i++; - } - } - - if (edge_label_nodes) { - *edge_label_nodes = MALLOC(sizeof(int)*nedge_nodes); - nedge_nodes = 0; - } - - - if (label_sizes) *label_sizes = MALLOC(sizeof(real)*2*nnodes); - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - real sz; - i = ND_id(n); - if (edge_label_nodes && strncmp(agnameof(n), "|edgelabel|",11)==0) { - (*edge_label_nodes)[nedge_nodes++] = i; - } - if (label_sizes){ - if (agget(n, "width") && agget(n, "height")){ - sscanf(agget(n, "width"), "%lf", &sz); - /* (*label_sizes)[i*2] = POINTS(sz)*.6;*/ - (*label_sizes)[i*2] = POINTS(sz)*.5 + padding*0.5; - sscanf(agget(n, "height"), "%lf", &sz); - /*(*label_sizes)[i*2+1] = POINTS(sz)*.6;*/ - (*label_sizes)[i*2+1] = POINTS(sz)*.5 + padding*0.5; - } else { - (*label_sizes)[i*2] = 4*POINTS(0.75)*.5; - (*label_sizes)[i*2+1] = 4*POINTS(0.5)*.5; - } - } - } - - if (x && (psym = agattr(g, AGNODE, "pos", NULL))) { - int has_positions = TRUE; - char* pval; - if (!(*x)) { - *x = MALLOC(sizeof(real)*dim*nnodes); - assert(*x); - } - for (n = agfstnode (g); n && has_positions; n = agnxtnode (g, n)) { - real xx,yy, zz,ww; - int nitems; - i = ND_id(n); - if ((pval = agxget(n, psym)) && *pval) { - if (dim == 2){ - nitems = sscanf(pval, "%lf,%lf", &xx, &yy); - if (nitems != 2) { - has_positions = FALSE; - agerr(AGERR, "Node \"%s\" pos has %d < 2 values", agnameof(n), nitems); - } - (*x)[i*dim] = xx; - (*x)[i*dim+1] = yy; - } else if (dim == 3){ - nitems = sscanf(pval, "%lf,%lf,%lf", &xx, &yy, &zz); - if (nitems != 3) { - has_positions = FALSE; - agerr(AGERR, "Node \"%s\" pos has %d < 3 values", agnameof(n), nitems); - } - (*x)[i*dim] = xx; - (*x)[i*dim+1] = yy; - (*x)[i*dim+2] = zz; - } else if (dim == 4){ - nitems = sscanf(pval, "%lf,%lf,%lf,%lf", &xx, &yy, &zz,&ww); - if (nitems != 4) { - has_positions = FALSE; - agerr(AGERR, "Node \"%s\" pos has %d < 4 values", agnameof(n), nitems); - } - (*x)[i*dim] = xx; - (*x)[i*dim+1] = yy; - (*x)[i*dim+2] = zz; - (*x)[i*dim+3] = ww; - } else if (dim == 1){ - nitems = sscanf(pval, "%lf", &xx); - if (nitems != 1) return NULL; - (*x)[i*dim] = xx; - } else { - assert(0); - } - } else { - has_positions = FALSE; - agerr(AGERR, "Node \"%s\" lacks position info", agnameof(n)); - } - } - if (!has_positions) { - FREE(*x); - *x = NULL; - } - } - else if (x) - agerr (AGERR, "Error: graph %s has missing \"pos\" information", agnameof(g)); - - if (format == FORMAT_CSR) A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, val, type, sz); - if (edge_label_nodes) *n_edge_label_nodes = nedge_nodes; - - if (D) *D = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, valD, type, sz); - - if (format != FORMAT_COORD){ - FREE(I); - FREE(J); - FREE(val); - } - if (valD) FREE(valD); - - return A; -} - - -static real dist(int dim, real *x, real *y){ - int k; - real d = 0; - for (k = 0; k < dim; k++) d += (x[k] - y[k])*(x[k]-y[k]); - return sqrt(d); -} - -/* get spline info */ -int Import_dot_splines(Agraph_t* g, int *ne, char ***xsplines){ - /* get the list of splines for the edges in the order they appear, and store as a list of strings in xspline. - If *xsplines = NULL, it will be allocated. On exit (*xsplines)[i] is the control point string for the i-th edge. This string - is of the form "x1,y1 x2,y2...", the two end points of the edge is not included per Dot format - Return 1 if success. 0 if not. - */ - Agnode_t* n; - Agedge_t* e; - Agsym_t *sym; - int nedges; - int i; - - if (!g){ - return 0; - } - - *ne = nedges = agnedges (g); - - /* Assign node ids */ - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) - ND_id(n) = i++; - - sym = agattr(g, AGEDGE, "pos", 0); - if (!sym) return 0; - - if (!(*xsplines)) *xsplines = malloc(sizeof(char*)*nedges); - - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - for (e = agfstout (g, n); e; e = agnxtout (g, e)) { - /* edge weight */ - if (sym) { - char *pos = agxget (e, sym); - (*xsplines)[i] = malloc(sizeof(char)*(strlen(pos)+1)); - strcpy((*xsplines)[i], pos); - } else { - (*xsplines)[i] = NULL; - } - i++; - } - } - return 1; -} - -void edgelist_export(FILE* f, SparseMatrix A, int dim, real *x){ - int n = A->m, *ia = A->ia, *ja = A->ja; - int i, j, len; - real max_edge_len, min_edge_len; - - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - max_edge_len = MAX(max_edge_len, dist(dim, &x[dim*i], &x[dim*ja[j]])); - if (min_edge_len < 0){ - min_edge_len = dist(dim, &x[dim*i], &x[dim*ja[j]]); - } else { - min_edge_len = MIN(min_edge_len, dist(dim, &x[dim*i], &x[dim*ja[j]])); - } - } - } - /* format: - n - nz - dim - x (length n*dim) - min_edge_length - max_edge_length - v1 - neighbors of v1 - v2 - neighbors of v2 - ... - */ - fprintf(stderr,"writing a total of %d edges\n",A->nz); - fwrite(&(A->n), sizeof(int), 1, f); - fwrite(&(A->nz), sizeof(int), 1, f); - fwrite(&dim, sizeof(int), 1, f); - fwrite(x, sizeof(real), dim*n, f); - fwrite(&min_edge_len, sizeof(real), 1, f); - fwrite(&max_edge_len, sizeof(real), 1, f); - for (i = 0; i < n; i++){ - if (i%1000 == 0) fprintf(stderr,"%6.2f%% done\r", i/(real) n*100); - fwrite(&i, sizeof(int), 1, f); - len = ia[i+1] - ia[i]; - fwrite(&len, sizeof(int), 1, f); - fwrite(&(ja[ia[i]]), sizeof(int), len, f); - } -} - - -void dump_coordinates(char *name, int n, int dim, real *x){ - char fn[1000]; - FILE *fp; - int i, k; - - if (!name){ - name = ""; - } else { - name = strip_dir(name); - } - - strcpy(fn, name); - strcat(fn,".x"); - fp = fopen(fn,"w"); - fprintf(fp, "%d %d\n",n, dim); - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++){ - fprintf(fp,"%f ",x[i*dim+k]); - } - fprintf(fp,"\n"); - } - fclose(fp); - -} - -static Agnode_t* -mkNode (Agraph_t* g, char* name) -{ - Agnode_t* n = agnode(g, name, 1); - agbindrec(n, "info", sizeof(Agnodeinfo_t), TRUE); - return n; -} - -Agraph_t* -makeDotGraph (SparseMatrix A, char *name, int dim, real *x, int with_color, int with_label, int use_matrix_value) -{ - Agraph_t* g; - Agnode_t* n; - Agnode_t* h; - Agedge_t* e; - int i, j; - char buf[1024], buf2[1024]; - Agsym_t *sym, *sym2 = NULL, *sym3 = NULL; - int* ia=A->ia; - int* ja=A->ja; - real* val = (real*)(A->a); - Agnode_t** arr = N_NEW (A->m, Agnode_t*); - real *color = NULL; - char cstring[8]; - char *label_string; - - if (!name){ - name = "stdin"; - } else { - name = strip_dir(name); - } - label_string = MALLOC(sizeof(char)*1000); - - if (SparseMatrix_known_undirected(A)){ - g = agopen ("G", Agundirected, 0); - } else { - g = agopen ("G", Agdirected, 0); - } - sprintf (buf, "%f", 1.0); - - label_string = strcpy(label_string, name); - label_string = strcat(label_string, ". "); - sprintf (buf, "%d", A->m); - label_string = strcat(label_string, buf); - label_string = strcat(label_string, " nodes, "); - sprintf (buf, "%d", A->nz); - label_string = strcat(label_string, buf); - /* label_string = strcat(label_string, " edges. Created by Yifan Hu");*/ - label_string = strcat(label_string, " edges."); - - - if (with_label) sym = agattr(g, AGRAPH, "label", label_string); - sym = agattr(g, AGRAPH, "fontcolor", "#808090"); - if (with_color) sym = agattr(g, AGRAPH, "bgcolor", "black"); - sym = agattr(g, AGRAPH, "outputorder", "edgesfirst"); - - if (A->m > 100) { - /* -Estyle=setlinewidth(0.0)' -Eheadclip=false -Etailclip=false -Nstyle=invis*/ - agattr(g, AGNODE, "style", "invis"); - } else { - /* width=0, height = 0, label="", style=filled*/ - agattr(g, AGNODE, "shape", "point"); - if (A->m < 50){ - agattr(g, AGNODE, "width", "0.03"); - } else { - agattr(g, AGNODE, "width", "0"); - } - agattr(g, AGNODE, "label", ""); - agattr(g, AGNODE, "style", "filled"); - if (with_color) { - agattr(g, AGNODE, "color", "#FF0000"); - } else { - agattr(g, AGNODE, "color", "#000000"); - } - } - - agattr(g, AGEDGE, "headclip", "false"); - agattr(g, AGEDGE, "tailclip", "false"); - if (A->m < 50){ - agattr(g, AGEDGE, "style", "setlinewidth(2)"); - } else if (A->m < 500){ - agattr(g, AGEDGE, "style", "setlinewidth(0.5)"); - } else if (A->m < 5000){ - agattr(g, AGEDGE, "style", "setlinewidth(0.1)"); - } else { - agattr(g, AGEDGE, "style", "setlinewidth(0.0)"); - } - - if (with_color) { - sym2 = agattr(g, AGEDGE, "color", ""); - sym3 = agattr(g, AGEDGE, "wt", ""); - } - for (i = 0; i < A->m; i++) { - sprintf (buf, "%d", i); - n = mkNode (g, buf); - ND_id(n) = i; - arr[i] = n; - } - - if (with_color){ - real maxdist = 0.; - real mindist = 0.; - int first = TRUE; - color = malloc(sizeof(real)*A->nz); - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - if (A->type != MATRIX_TYPE_REAL || !use_matrix_value){ - for (j = ia[i]; j < ia[i+1]; j++) { - color[j] = distance(x, dim, i, ja[j]); - if (i != ja[j]){ - if (first){ - mindist = color[j]; - first = FALSE; - } else { - mindist = MIN(mindist, color[j]); - } - } - maxdist = MAX(color[j], maxdist); - } - } else { - for (j = ia[i]; j < ia[i+1]; j++) { - color[j] = ABS(val[j]); - if (i != ja[j]){ - if (first){ - mindist = color[j]; - first = FALSE; - } else { - mindist = MIN(mindist, color[j]); - } - } - maxdist = MAX(color[j], maxdist); - } - } - } - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - for (j = ia[i]; j < ia[i+1]; j++) { - if (i != ja[j]){ - color[j] = ((color[j] - mindist)/MAX(maxdist-mindist, 0.000001)); - } else { - color[j] = 0; - } - } - } - } - - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - for (j = ia[i]; j < ia[i+1]; j++) { - h = arr [ja[j]]; - if (val){ - switch (A->type){ - case MATRIX_TYPE_REAL: - sprintf (buf, "%f", ((real*)A->a)[j]); - break; - case MATRIX_TYPE_INTEGER: - sprintf (buf, "%d", ((int*)A->a)[j]); - break; - case MATRIX_TYPE_COMPLEX:/* take real part as weight */ - sprintf (buf, "%f", ((real*)A->a)[2*j]); - break; - } - if (with_color) { - if (i != ja[j]){ - sprintf (buf2, "%s", hue2rgb(.65*color[j], cstring)); - } else { - sprintf (buf2, "#000000"); - } - } - } else { - sprintf (buf, "%f", 1.); - if (with_color) { - if (i != ja[j]){ - sprintf (buf2, "%s", hue2rgb(.65*color[j], cstring)); - } else { - sprintf (buf2, "#000000"); - } - } - } - e = agedge (g, n, h, NULL, 1); - if (with_color) { - agxset (e, sym2, buf2); - sprintf (buf2, "%f", color[j]); - agxset (e, sym3, buf2); - } - } - } - - FREE(color); - FREE (arr); - FREE(label_string); - return g; -} - - -char *cat_string(char *s1, char *s2){ - char *s; - s = malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1+1)); - strcpy(s,s1); - strcat(s,"|"); - strcat(s,s2); - return s; -} - -char *cat_string3(char *s1, char *s2, char *s3, int id){ - char *s; - char sid[1000]; - sprintf(sid,"%d",id); - s = malloc(sizeof(char)*(strlen(s1)+strlen(s2)+strlen(s3)+strlen(sid)+1+3)); - strcpy(s,s1); - strcat(s,"|"); - strcat(s,s2); - strcat(s,"|"); - strcat(s,s3); - strcat(s,"|"); - strcat(s,sid); - return s; -} - - -Agraph_t *convert_edge_labels_to_nodes(Agraph_t* g){ - if (!g) return NULL; - - Agnode_t *n, *newnode; - Agraph_t *dg; - - int nnodes; - int nedges; - - - Agedge_t *ep, *e; - int i = 0; - Agnode_t **ndmap = NULL; - char *s; - char *elabel; - int id = 0; - - Agsym_t* sym = agattr(g, AGEDGE, "label", NULL); - - dg = agopen("test", g->desc, 0); - - nnodes = agnnodes (g); - nedges = agnedges (g); - - ndmap = malloc(sizeof(Agnode_t *)*nnodes); - - agattr(dg, AGNODE, "label", "\\N"); - agattr(dg, AGNODE, "shape", "ellipse"); - agattr(dg, AGNODE, "width","0.00001"); - agattr(dg, AGNODE, "height", "0.00001"); - agattr(dg, AGNODE, "margin","0."); - agattr(dg, AGEDGE, "arrowsize", "0.5"); - - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - newnode = mkNode(dg, agnameof(n)); - agset(newnode,"shape","box"); - ndmap[i] = newnode; - ND_id(n) = i++; - } - - - /* - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if (agtail(ep) == n) continue; - agedge(dg, ndmap[ND_id(agtail(ep))], ndmap[ND_id(aghead(ep))]); - } - } - */ - - - - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if (agtail(ep) == n && (aghead(ep) != n)) continue; - if (sym && (elabel = agxget(ep,sym)) && strcmp(elabel,"") != 0) { - s = cat_string3("|edgelabel",agnameof(agtail(ep)), agnameof(aghead(ep)), id++); - newnode = mkNode(dg,s); - agset(newnode,"label",elabel); - agset(newnode,"shape","plaintext"); - e = agedge(dg, ndmap[ND_id(agtail(ep))], newnode, NULL, 1); - agset(e, "arrowsize","0"); - agedge(dg, newnode, ndmap[ND_id(aghead(ep))], NULL, 1); - free(s); - } else { - agedge(dg, ndmap[ND_id(agtail(ep))], ndmap[ND_id(aghead(ep))], NULL, 1); - } - } - } - - free(ndmap); - return dg; - } - -Agraph_t* assign_random_edge_color(Agraph_t* g){ - char cstring[8]; - char buf2[1024]; - Agsym_t *sym2; - Agnode_t* n; - Agedge_t *ep; - - sym2 = agattr(g, AGEDGE, "color", ""); - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - sprintf (buf2, "%s", hue2rgb(0.65*drand(), cstring)); - agxset (ep, sym2, buf2); - } - } - - return g; - } - - -static int hex2int(char h){ - if (h >= '0' && h <= '9') return h - '0'; - if (h >= 'a' && h <= 'f') return 10 + h - 'a'; - if (h >= 'A' && h <= 'F') return 10 + h - 'A'; - return 0; -} -static float hexcol2rgb(char *h){ - return (hex2int(h[0])*16 + hex2int(h[1]))/255.; -} - -void Dot_SetClusterColor(Agraph_t* g, float *rgb_r, float *rgb_g, float *rgb_b, int *clusters){ - - Agnode_t* n; - char scluster[20]; - int i; - Agsym_t* clust_clr_sym = agattr(g, AGNODE, "clustercolor", NULL); - - if (!clust_clr_sym) clust_clr_sym = agattr(g, AGNODE, "clustercolor", "-1"); - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - if (rgb_r && rgb_g && rgb_b) { - rgb2hex((rgb_r)[(clusters)[i]],(rgb_g)[(clusters)[i]],(rgb_b)[(clusters)[i]], scluster, NULL); - //sprintf(scluster,"#%2x%2x%2x", (int) (255*((rgb_r)[(clusters)[i]])), (int) (255*((rgb_g)[(clusters)[i]])), (int) (255*((rgb_b)[(clusters)[i]]))); - } - agxset(n,clust_clr_sym,scluster); - } -} - -SparseMatrix Import_coord_clusters_from_dot(Agraph_t* g, int maxcluster, int dim, int *nn, real **label_sizes, real **x, int **clusters, float **rgb_r, float **rgb_g, float **rgb_b, float **fsz, char ***labels, int default_color_scheme, int clustering_scheme, int useClusters){ - SparseMatrix A = 0; - Agnode_t* n; - Agedge_t* e; - Agsym_t* sym; - Agsym_t* clust_sym; - Agsym_t* clust_clr_sym; - int nnodes; - int nedges; - int i, row, ic,nc, j; - int* I; - int* J; - real* val; - real v; - int type = MATRIX_TYPE_REAL; - size_t sz = sizeof(real); - char scluster[100]; - float ff; - - int MAX_GRPS, MIN_GRPS, noclusterinfo = FALSE, first = TRUE; - float *pal; - int max_color = MAX_COLOR; - - switch (default_color_scheme){ - case COLOR_SCHEME_BLUE_YELLOW: - pal = &(palette_blue_to_yellow[0][0]); - break; - case COLOR_SCHEME_WHITE_RED: - pal = &(palette_white_to_red[0][0]); - break; - case COLOR_SCHEME_GREY_RED: - pal = &(palette_grey_to_red[0][0]); - break; - case COLOR_SCHEME_GREY: - pal = &(palette_grey[0][0]); - break; - case COLOR_SCHEME_PASTEL: - pal = &(palette_pastel[0][0]); - break; - case COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED: - fprintf(stderr," HERE!\n"); - pal = &(palette_sequential_singlehue_red[0][0]); - break; - case COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED_LIGHTER: - fprintf(stderr," HERE!\n"); - pal = &(palette_sequential_singlehue_red_lighter[0][0]); - break; - case COLOR_SCHEME_PRIMARY: - pal = &(palette_primary[0][0]); - break; - case COLOR_SCHEME_ADAM_BLEND: - pal = &(palette_adam_blend[0][0]); - break; - case COLOR_SCHEME_ADAM: - pal = &(palette_adam[0][0]); - max_color = 11; - break; - case COLOR_SCHEME_NONE: - pal = NULL; - break; - default: - pal = &(palette_pastel[0][0]); - break; - } - - if (!g) return NULL; - nnodes = agnnodes (g); - nedges = agnedges (g); - *nn = nnodes; - - /* Assign node ids */ - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) - ND_id(n) = i++; - - /* form matrix */ - I = N_NEW(nedges, int); - J = N_NEW(nedges, int); - val = N_NEW(nedges, real); - - sym = agattr(g, AGEDGE, "weight", NULL); - clust_sym = agattr(g, AGNODE, "cluster", NULL); - clust_clr_sym = agattr(g, AGNODE, "clustercolor", NULL); - //sym = agattr(g, AGEDGE, "wt", NULL); - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - row = ND_id(n); - for (e = agfstout (g, n); e; e = agnxtout (g, e)) { - I[i] = row; - J[i] = ND_id(aghead(e)); - if (sym) { - if (sscanf (agxget(e,sym), "%lf", &v) != 1) - v = 1; - } - else - v = 1; - val[i] = v; - i++; - } - } - A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, val, type, sz); - - /* get clustering info */ - *clusters = MALLOC(sizeof(int)*nnodes); - nc = 1; - MIN_GRPS = 0; - /* if useClusters, the nodes in each top-level cluster subgraph are assigned to - * clusters 2, 3, .... Any nodes not in a cluster subgraph are tossed into cluster 1. - */ - if (useClusters) { - Agraph_t* sg; - int gid = 1; - memset (*clusters, 0, sizeof(int)*nnodes); - for (sg = agfstsubg(g); sg; sg = agnxtsubg(sg)) { - if (strncmp(agnameof(sg), "cluster", 7)) continue; - gid++; - for (n = agfstnode(sg); n; n = agnxtnode (sg, n)) { - i = ND_id(n); - if ((*clusters)[i]) - fprintf (stderr, "Warning: node %s appears in multiple clusters.\n", agnameof(n)); - else - (*clusters)[i] = gid; - } - } - for (n = agfstnode(g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - if ((*clusters)[i] == 0) - (*clusters)[i] = 1; - } - MIN_GRPS = 1; - nc = gid; - } - else if (clust_sym) { - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - if ((sscanf(agxget(n,clust_sym), "%d", &ic)>0)) { - (*clusters)[i] = ic; - nc = MAX(nc, ic); - if (first){ - MIN_GRPS = ic; - first = FALSE; - } else { - MIN_GRPS = MIN(MIN_GRPS, ic); - } - } else { - noclusterinfo = TRUE; - break; - } - } - } - else - noclusterinfo = TRUE; - MAX_GRPS = nc; - - if (noclusterinfo) { - int use_value = TRUE, flag = 0; - real modularity; - if (!clust_sym) clust_sym = agattr(g,AGNODE,"cluster","-1"); - - if (clustering_scheme == CLUSTERING_MQ){ - mq_clustering(A, FALSE, maxcluster, use_value, - &nc, clusters, &modularity, &flag); - } else if (clustering_scheme == CLUSTERING_MODULARITY){ - modularity_clustering(A, FALSE, maxcluster, use_value, - &nc, clusters, &modularity, &flag); - } else { - assert(0); - } - for (i = 0; i < nnodes; i++) (*clusters)[i]++;/* make into 1 based */ - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - sprintf(scluster,"%d",(*clusters)[i]); - agxset(n,clust_sym,scluster); - } - MIN_GRPS = 1; - MAX_GRPS = nc; - if (Verbose){ - fprintf(stderr," no complement clustering info in dot file, using modularity clustering. Modularity = %f, ncluster=%d\n",modularity, nc); - } - } - - *label_sizes = MALLOC(sizeof(real)*dim*nnodes); - if (pal || (!noclusterinfo && clust_clr_sym)){ - *rgb_r = MALLOC(sizeof(float)*(1+MAX_GRPS)); - *rgb_g = MALLOC(sizeof(float)*(1+MAX_GRPS)); - *rgb_b = MALLOC(sizeof(float)*(1+MAX_GRPS)); - } else { - *rgb_r = NULL; - *rgb_g = NULL; - *rgb_b = NULL; - } - *fsz = MALLOC(sizeof(float)*nnodes); - *labels = MALLOC(sizeof(char*)*nnodes); - - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - gvcolor_t color; - real sz; - i = ND_id(n); - if (agget(n, "width") && agget(n, "height")){ - sscanf(agget(n, "width"), "%lf", &sz); - (*label_sizes)[i*2] = POINTS(sz*0.5); - sscanf(agget(n, "height"), "%lf", &sz); - (*label_sizes)[i*2+1] = POINTS(sz*0.5); - } else { - (*label_sizes)[i*2] = POINTS(0.75/2); - (*label_sizes)[i*2+1] = POINTS(0.5*2); - } - - if (agget(n, "fontsize")){ - sscanf(agget(n, "fontsize"), "%f", &ff); - (*fsz)[i] = ff; - } else { - (*fsz)[i] = 14; - } - - if (agget(n, "label") && strcmp(agget(n, "label"), "") != 0 && strcmp(agget(n, "label"), "\\N") != 0){ - char *lbs; - lbs = agget(n, "label"); - (*labels)[i] = MALLOC(sizeof(char)*(strlen(lbs)+1)); - strcpy((*labels)[i], lbs); - } else { - (*labels)[i] = MALLOC(sizeof(char)*(strlen(agnameof(n))+1)); - strcpy((*labels)[i], agnameof(n)); - } - - - - j = (*clusters)[i]; - if (MAX_GRPS-MIN_GRPS < max_color) { - j = (j-MIN_GRPS)*((int)((max_color-1)/MAX((MAX_GRPS-MIN_GRPS),1))); - } else { - j = (j-MIN_GRPS)%max_color; - } - - if (pal){ - // assert((*clusters)[i] >= 0 && (*clusters)[i] <= MAX_GRPS); - (*rgb_r)[(*clusters)[i]] = pal[3*j+0]; - (*rgb_g)[(*clusters)[i]] = pal[3*j+1]; - (*rgb_b)[(*clusters)[i]] = pal[3*j+2]; - } - - if (!noclusterinfo && clust_clr_sym && (colorxlate(agxget(n,clust_clr_sym),&color,RGBA_DOUBLE) == COLOR_OK)) { - (*rgb_r)[(*clusters)[i]] = color.u.RGBA[0]; - (*rgb_g)[(*clusters)[i]] = color.u.RGBA[1]; - (*rgb_b)[(*clusters)[i]] = color.u.RGBA[2]; - } - - if (!noclusterinfo && agget(n, "cluster") && agget(n, "clustercolor") && strlen(agget(n, "clustercolor") ) >= 7 && pal){ - char cc[10]; - strcpy(cc, agget(n, "clustercolor")); - (*rgb_r)[(*clusters)[i]] = hexcol2rgb(cc+1); - (*rgb_g)[(*clusters)[i]] = hexcol2rgb(cc+3); - (*rgb_b)[(*clusters)[i]] = hexcol2rgb(cc+5); - } - - } - - - if (x){ - int has_position = FALSE; - *x = MALLOC(sizeof(real)*dim*nnodes); - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - real xx,yy; - i = ND_id(n); - if (agget(n, "pos")){ - has_position = TRUE; - sscanf(agget(n, "pos"), "%lf,%lf", &xx, &yy); - (*x)[i*dim] = xx; - (*x)[i*dim+1] = yy; - } else { - fprintf(stderr,"WARNING: pos field missing for node %d, set to origin\n",i); - (*x)[i*dim] = 0; - (*x)[i*dim+1] = 0; - } - } - if (!has_position){ - FREE(*x); - *x = NULL; - } - } - - - FREE(I); - FREE(J); - FREE(val); - - return A; -} - -void attached_clustering(Agraph_t* g, int maxcluster, int clustering_scheme){ - SparseMatrix A = 0; - Agnode_t* n; - Agedge_t* e; - Agsym_t *sym, *clust_sym; - int nnodes; - int nedges; - int i, row,nc; - int* I; - int* J; - real* val; - real v; - int type = MATRIX_TYPE_REAL; - size_t sz = sizeof(real); - char scluster[100]; - - - int *clusters; - - - - if (!g) return; - nnodes = agnnodes (g); - nedges = agnedges (g); - - /* Assign node ids */ - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) - ND_id(n) = i++; - - /* form matrix */ - I = N_NEW(nedges, int); - J = N_NEW(nedges, int); - val = N_NEW(nedges, real); - - sym = agattr(g, AGEDGE, "weight", NULL); - clust_sym = agattr(g, AGNODE, "cluster", NULL); - - i = 0; - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - row = ND_id(n); - for (e = agfstout (g, n); e; e = agnxtout (g, e)) { - I[i] = row; - J[i] = ND_id(aghead(e)); - if (sym) { - if (sscanf (agxget(e,sym), "%lf", &v) != 1) - v = 1; - } - else - v = 1; - val[i] = v; - i++; - } - } - A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, val, type, sz); - - clusters = MALLOC(sizeof(int)*nnodes); - - { - int use_value = TRUE, flag = 0; - real modularity; - if (!clust_sym) clust_sym = agattr(g,AGNODE,"cluster","-1"); - - if (clustering_scheme == CLUSTERING_MQ){ - mq_clustering(A, FALSE, maxcluster, use_value, - &nc, &clusters, &modularity, &flag); - } else if (clustering_scheme == CLUSTERING_MODULARITY){ - modularity_clustering(A, FALSE, maxcluster, use_value, - &nc, &clusters, &modularity, &flag); - } else { - assert(0); - } - for (i = 0; i < nnodes; i++) (clusters)[i]++;/* make into 1 based */ - for (n = agfstnode (g); n; n = agnxtnode (g, n)) { - i = ND_id(n); - sprintf(scluster,"%d",(clusters)[i]); - agxset(n,clust_sym,scluster); - } - if (Verbose){ - fprintf(stderr," no complement clustering info in dot file, using modularity clustering. Modularity = %f, ncluster=%d\n",modularity, nc); - } - } - - FREE(I); - FREE(J); - FREE(val); - FREE(clusters); - - SparseMatrix_delete(A); - -} - - - -void initDotIO (Agraph_t *g) -{ - aginit(g, AGNODE, "info", sizeof(Agnodeinfo_t), TRUE); -} - -void setDotNodeID (Agnode_t* n, int v) -{ - ND_id(n) = v; -} - -int getDotNodeID (Agnode_t* n) -{ - return ND_id(n); -} - - -#undef POINTS diff --git a/internal/ccall/sparse/DotIO.h b/internal/ccall/sparse/DotIO.h deleted file mode 100644 index f5fc1fe..0000000 --- a/internal/ccall/sparse/DotIO.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef DOTIO_H -#define DOTIO_H - -#include -#include "SparseMatrix.h" - -enum {COLOR_SCHEME_NONE, COLOR_SCHEME_PASTEL = 1, COLOR_SCHEME_BLUE_YELLOW, COLOR_SCHEME_WHITE_RED, COLOR_SCHEME_GREY_RED, COLOR_SCHEME_PRIMARY, COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED, COLOR_SCHEME_ADAM, COLOR_SCHEME_ADAM_BLEND, COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED_LIGHTER, COLOR_SCHEME_GREY}; -extern void initDotIO (Agraph_t *g); -extern Agraph_t* SparseMatrix_read_dot(FILE*); - -extern void setDotNodeID (Agnode_t* n, int v); -extern int getDotNodeID (Agnode_t* n); - -extern void attach_edge_colors(Agraph_t* g, int dim, real *colors); - -extern void attach_embedding(Agraph_t *g, int dim, double sc, real *x); - -extern SparseMatrix SparseMatrix_import_dot(Agraph_t* g, int dim, real **label_sizes, real **x, int *n_edge_label_nodes, - int **edge_label_nodes, int format, SparseMatrix *D); -extern Agraph_t* makeDotGraph (SparseMatrix, char *title, int dim, real *x, int with_color, int with_label, int use_matrix_value); -Agraph_t *convert_edge_labels_to_nodes(Agraph_t* g); -Agraph_t* assign_random_edge_color(Agraph_t* g); -void dump_coordinates(char *name, int n, int dim, real *x); -void edgelist_export(FILE* f, SparseMatrix A, int dim, double *x); -char * hue2rgb(real hue, char *color); - -SparseMatrix Import_coord_clusters_from_dot(Agraph_t* g, int maxcluster, int dim, int *nn, real **label_sizes, real **x, int **clusters, float **rgb_r, float **rgb_g, float **rgb_b, float **fsz, char ***labels, int default_color_scheme, int clustering_scheme, int useClusters); - -void Dot_SetClusterColor(Agraph_t* g, float *rgb_r, float *rgb_g, float *rgb_b, int *clustering); -void attached_clustering(Agraph_t* g, int maxcluster, int clustering_scheme); - -int Import_dot_splines(Agraph_t* g, int *ne, char ***xsplines); -#endif diff --git a/internal/ccall/sparse/IntStack.c b/internal/ccall/sparse/IntStack.c deleted file mode 100644 index 8961174..0000000 --- a/internal/ccall/sparse/IntStack.c +++ /dev/null @@ -1,95 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "general.h" -#include "IntStack.h" - -IntStack IntStack_new(void){ - IntStack s; - int max_len = 1<<5; - - s = MALLOC(sizeof(struct IntStack_struct)); - s->max_len = max_len; - s->last = -1; - s->stack = MALLOC(sizeof(int)*max_len); - return s; -} - -void IntStack_delete(IntStack s){ - if (s){ - FREE(s->stack); - FREE(s); - } -} - -static IntStack IntStack_realloc(IntStack s){ - int max_len = s->max_len; - - max_len = max_len + MAX(10,0.2*max_len); - s->max_len = max_len; - s->stack = REALLOC(s->stack, sizeof(int)*max_len); - if (!s->stack) return NULL; - return s; -} - -int IntStack_push(IntStack s, int i){ - /* add an item and return the pos. Return negative value of malloc failed */ - if (s->last >= s->max_len - 1){ - if (!(IntStack_realloc(s))) return -1; - } - s->stack[++(s->last)] = i; - return s->last; -} -int IntStack_pop(IntStack s, int *flag){ - /* remove the last item. If none exist, return -1 */ - *flag = 0; - if (s->last < 0){ - *flag = -1; - return -1; - } - return s->stack[(s->last)--]; -} -void IntStack_print(IntStack s){ - /* remove the last item. If none exist, return -1 */ - int i; - for (i = 0; i <= s->last; i++) fprintf(stderr,"%d,",s->stack[i]); - fprintf(stderr,"\n"); -} - -/* -main(){ - - IntStack s; - int i, len = 1, pos, flag; - - for (;;){ - s = IntStack_new(); - fprintf(stderr,"=============== stack with %d elements ============\n",len); - for (i = 0; i < len; i++){ - pos = IntStack_push(s, i); - if (pos < 0){ - fprintf(stderr," fail to push element %d, quit\n", i); - exit(1); - } - } - for (i = 0; i < len+1; i++){ - IntStack_pop(s, &flag); - if (flag) { - fprintf(stderr, "no more element\n"); - } - } - IntStack_delete(s); - len *= 2; - } -} -*/ diff --git a/internal/ccall/sparse/IntStack.h b/internal/ccall/sparse/IntStack.h deleted file mode 100644 index a1bfbe8..0000000 --- a/internal/ccall/sparse/IntStack.h +++ /dev/null @@ -1,39 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef IntStack_H -#define IntStack_H - -/* last in first out integer stack */ -struct IntStack_struct{ - int last;/* position of the last element, If empty, last = -1 */ - int max_len; - int *stack; -}; - -typedef struct IntStack_struct* IntStack; - -IntStack IntStack_new(void); - -void IntStack_delete(IntStack s); - -#define IntStack_get_length(s) (1+(s)->last) - -int IntStack_push(IntStack s, int i);/* add an item and return the pos (>=0). - Return negative value of malloc failed */ - -int IntStack_pop(IntStack s, int *flag);/* remove the last item. If none exist, flag = -1, and return -1. */ - -void IntStack_print(IntStack s); - -#endif diff --git a/internal/ccall/sparse/LinkedList.c b/internal/ccall/sparse/LinkedList.c deleted file mode 100644 index 43350b0..0000000 --- a/internal/ccall/sparse/LinkedList.c +++ /dev/null @@ -1,190 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "LinkedList.h" -#include "memory.h" -#define MALLOC gmalloc -#define REALLOC grealloc -#define FREE free -#define MEMCPY memcpy - - - -SingleLinkedList SingleLinkedList_new(void *data){ - SingleLinkedList head; - head = GNEW(struct SingleLinkedList_struct); - head->data = data; - head->next = NULL; - return head; -} - -SingleLinkedList SingleLinkedList_new_int(int i){ - int *data; - data = malloc(sizeof(int)); - data[0] = i; - return SingleLinkedList_new((void*) data); -} - - -void SingleLinkedList_delete(SingleLinkedList head, void (*linklist_deallocator)(void*)){ - SingleLinkedList next; - - if (!head) return; - do { - next = head->next; - if (head->data) linklist_deallocator(head->data); - if (head) FREE(head); - head = next; - } while (head); - -} - - -SingleLinkedList SingleLinkedList_prepend(SingleLinkedList l, void *data){ - SingleLinkedList head = SingleLinkedList_new(data); - head->next = l; - return head; -} - -SingleLinkedList SingleLinkedList_prepend_int(SingleLinkedList l, int i){ - int *data; - data = malloc(sizeof(int)); - data[0] = i; - return SingleLinkedList_prepend(l, (void*) data); -} - -void* SingleLinkedList_get_data(SingleLinkedList l){ - return l->data; -} - -SingleLinkedList SingleLinkedList_get_next(SingleLinkedList l){ - return l->next; -} -void SingleLinkedList_print(SingleLinkedList head, void (*linkedlist_print)(void*)){ - - if (!head) return; - do { - if (head->data) linkedlist_print(head->data); - head = head->next; - } while (head); - -} - - -DoubleLinkedList DoubleLinkedList_new(void *data){ - DoubleLinkedList head; - head = GNEW(struct DoubleLinkedList_struct); - head->data = data; - head->next = NULL; - head->prev = NULL; - return head; -} - -void DoubleLinkedList_delete(DoubleLinkedList head, void (*linklist_deallocator)(void*)){ - DoubleLinkedList next; - - if (!head) return; - do { - next = head->next; - if (head->data) linklist_deallocator(head->data); - if (head) FREE(head); - head = next; - } while (head); - -} - - -DoubleLinkedList DoubleLinkedList_prepend(DoubleLinkedList l, void *data){ - DoubleLinkedList head = DoubleLinkedList_new(data); - if (l){ - head->next = l; - l->prev = head; - } - return head; -} - -void* DoubleLinkedList_get_data(DoubleLinkedList l){ - return l->data; -} - -DoubleLinkedList DoubleLinkedList_get_next(DoubleLinkedList l){ - return l->next; -} - -void DoubleLinkedList_print(DoubleLinkedList head, void (*linkedlist_print)(void*)){ - - if (!head) return; - do { - if (head->data) linkedlist_print(head->data); - head = head->next; - } while (head); - -} - -void DoubleLinkedList_delete_element(DoubleLinkedList l, void (*linklist_deallocator)(void*), DoubleLinkedList *head){ - /* delete an entry in the chain of linked list. If the head changes due to this (if l is the first element in the list), update */ - DoubleLinkedList next, prev; - - if (l){ - next = l->next; - prev = l->prev; - - if (l->data) linklist_deallocator(l->data); - FREE(l); - l = NULL; - - if (next) next->prev = prev; - if (prev) prev->next = next; - if (!prev) *head = next; - } -} - - -/* -static void print_int(void *d){ - int *i = (int*) d; - printf("%d\n",*i); -} - -main(){ - DoubleLinkedList l, ll; - - int i, *j; - - for (;;){ - j = malloc(sizeof(int)); - j[0] = -1; - l = DoubleLinkedList_new((void*) j); - - for (i = 0; i < 10; i++){ - j = malloc(sizeof(int)); - j[0] = i; - l = DoubleLinkedList_prepend(l, (void*) j); - - } - DoubleLinkedList_print(l, print_int); - - ll = DoubleLinkedList_get_next(l); - DoubleLinkedList_delete_element(ll, free, &l); - printf("after delete 8\n"); - DoubleLinkedList_print(l, print_int); - - DoubleLinkedList_delete_element(l, free, &l); - printf("after delete first elemnt\n"); - DoubleLinkedList_print(l, print_int); - - DoubleLinkedList_delete(l, free); - } -} - -*/ diff --git a/internal/ccall/sparse/LinkedList.h b/internal/ccall/sparse/LinkedList.h deleted file mode 100644 index b36683f..0000000 --- a/internal/ccall/sparse/LinkedList.h +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef LINKED_LIST_H -#define LINKED_LIST_H - -typedef struct SingleLinkedList_struct* SingleLinkedList; - -struct SingleLinkedList_struct { - void *data; - SingleLinkedList next; -}; - -SingleLinkedList SingleLinkedList_new(void *data); -SingleLinkedList SingleLinkedList_new_int(int i); -void SingleLinkedList_delete(SingleLinkedList head, void (*linklist_deallocator)(void*)); -SingleLinkedList SingleLinkedList_prepend(SingleLinkedList l, void *data); -SingleLinkedList SingleLinkedList_prepend_int(SingleLinkedList l, int i); - -void* SingleLinkedList_get_data(SingleLinkedList l); - -SingleLinkedList SingleLinkedList_get_next(SingleLinkedList l); - -void SingleLinkedList_print(SingleLinkedList head, void (*linkedlist_print)(void*)); - - -typedef struct DoubleLinkedList_struct* DoubleLinkedList; - -struct DoubleLinkedList_struct { - void *data; - DoubleLinkedList next; - DoubleLinkedList prev; -}; - -DoubleLinkedList DoubleLinkedList_new(void *data); -void DoubleLinkedList_delete(DoubleLinkedList head, void (*linklist_deallocator)(void*)); -DoubleLinkedList DoubleLinkedList_prepend(DoubleLinkedList l, void *data); - -void* DoubleLinkedList_get_data(DoubleLinkedList l); - -DoubleLinkedList DoubleLinkedList_get_next(DoubleLinkedList l); - -void DoubleLinkedList_delete_element(DoubleLinkedList l, void (*linklist_deallocator)(void*), DoubleLinkedList *head); -#endif diff --git a/internal/ccall/sparse/QuadTree.c b/internal/ccall/sparse/QuadTree.c deleted file mode 100644 index 424f4dc..0000000 --- a/internal/ccall/sparse/QuadTree.c +++ /dev/null @@ -1,737 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "general.h" -#include "geom.h" -#include "arith.h" -#include "math.h" -#include "LinkedList.h" -#include "QuadTree.h" - -extern real distance_cropped(real *x, int dim, int i, int j); - -struct node_data_struct { - real node_weight; - real *coord; - real id; - void *data; -}; - -typedef struct node_data_struct *node_data; - - -static node_data node_data_new(int dim, real weight, real *coord, int id){ - node_data nd; - int i; - nd = MALLOC(sizeof(struct node_data_struct)); - nd->node_weight = weight; - nd->coord = MALLOC(sizeof(real)*dim); - nd->id = id; - for (i = 0; i < dim; i++) nd->coord[i] = coord[i]; - nd->data = NULL; - return nd; -} - -void node_data_delete(void *d){ - node_data nd = (node_data) d; - FREE(nd->coord); - /*delete outside if (nd->data) FREE(nd->data);*/ - FREE(nd); -} - -real node_data_get_weight(void *d){ - node_data nd = (node_data) d; - return nd->node_weight; -} - -real* node_data_get_coord(void *d){ - node_data nd = (node_data) d; - return nd->coord; -} - -int node_data_get_id(void *d){ - node_data nd = (node_data) d; - return nd->id; -} - -#define node_data_get_data(d) (((node_data) (d))->data) - - -void check_or_realloc_arrays(int dim, int *nsuper, int *nsupermax, real **center, real **supernode_wgts, real **distances){ - - if (*nsuper >= *nsupermax) { - *nsupermax = *nsuper + MAX(10, (int) 0.2*(*nsuper)); - *center = REALLOC(*center, sizeof(real)*(*nsupermax)*dim); - *supernode_wgts = REALLOC(*supernode_wgts, sizeof(real)*(*nsupermax)); - *distances = REALLOC(*distances, sizeof(real)*(*nsupermax)); - } -} - -void QuadTree_get_supernodes_internal(QuadTree qt, real bh, real *point, int nodeid, int *nsuper, int *nsupermax, real **center, real **supernode_wgts, real **distances, real *counts, int *flag){ - SingleLinkedList l; - real *coord, dist; - int dim, i; - - (*counts)++; - - if (!qt) return; - dim = qt->dim; - l = qt->l; - if (l){ - while (l){ - check_or_realloc_arrays(dim, nsuper, nsupermax, center, supernode_wgts, distances); - if (node_data_get_id(SingleLinkedList_get_data(l)) != nodeid){ - coord = node_data_get_coord(SingleLinkedList_get_data(l)); - for (i = 0; i < dim; i++){ - (*center)[dim*(*nsuper)+i] = coord[i]; - } - (*supernode_wgts)[*nsuper] = node_data_get_weight(SingleLinkedList_get_data(l)); - (*distances)[*nsuper] = point_distance(point, coord, dim); - (*nsuper)++; - } - l = SingleLinkedList_get_next(l); - } - } - - if (qt->qts){ - dist = point_distance(qt->center, point, dim); - if (qt->width < bh*dist){ - check_or_realloc_arrays(dim, nsuper, nsupermax, center, supernode_wgts, distances); - for (i = 0; i < dim; i++){ - (*center)[dim*(*nsuper)+i] = qt->average[i]; - } - (*supernode_wgts)[*nsuper] = qt->total_weight; - (*distances)[*nsuper] = point_distance(qt->average, point, dim); - (*nsuper)++; - } else { - for (i = 0; i < 1<qts[i], bh, point, nodeid, nsuper, nsupermax, center, - supernode_wgts, distances, counts, flag); - } - } - } - -} - -void QuadTree_get_supernodes(QuadTree qt, real bh, real *point, int nodeid, int *nsuper, - int *nsupermax, real **center, real **supernode_wgts, real **distances, double *counts, int *flag){ - int dim = qt->dim; - - (*counts) = 0; - - *nsuper = 0; - - *flag = 0; - *nsupermax = 10; - if (!*center) *center = MALLOC(sizeof(real)*(*nsupermax)*dim); - if (!*supernode_wgts) *supernode_wgts = MALLOC(sizeof(real)*(*nsupermax)); - if (!*distances) *distances = MALLOC(sizeof(real)*(*nsupermax)); - QuadTree_get_supernodes_internal(qt, bh, point, nodeid, nsuper, nsupermax, center, supernode_wgts, distances, counts, flag); - -} - - -static real *get_or_assign_node_force(real *force, int i, SingleLinkedList l, int dim){ - - real *f = (real*) node_data_get_data(SingleLinkedList_get_data(l)); - - if (!f){ - node_data_get_data(SingleLinkedList_get_data(l)) = &(force[i*dim]); - f = (real*) node_data_get_data(SingleLinkedList_get_data(l)); - } - return f; -} -static real *get_or_alloc_force_qt(QuadTree qt, int dim){ - int i; - real *force = (real*) qt->data; - if (!force){ - qt->data = MALLOC(sizeof(real)*dim); - force = (real*) qt->data; - for (i = 0; i < dim; i++) force[i] = 0.; - } - return force; -} - -static void QuadTree_repulsive_force_interact(QuadTree qt1, QuadTree qt2, real *x, real *force, real bh, real p, real KP, real *counts){ - /* calculate the all to all reopulsive force and accumulate on each node of the quadtree if an interaction is possible. - force[i*dim+j], j=1,...,dim is teh force on node i - */ - SingleLinkedList l1, l2; - real *x1, *x2, dist, wgt1, wgt2, f, *f1, *f2, w1, w2; - int dim, i, j, i1, i2, k; - QuadTree qt11, qt12; - - if (!qt1 || !qt2) return; - assert(qt1->n > 0 && qt2->n > 0); - dim = qt1->dim; - - l1 = qt1->l; - l2 = qt2->l; - - /* far enough, calculate repulsive force */ - dist = point_distance(qt1->average, qt2->average, dim); - if (qt1->width + qt2->width < bh*dist){ - counts[0]++; - x1 = qt1->average; - w1 = qt1->total_weight; - f1 = get_or_alloc_force_qt(qt1, dim); - x2 = qt2->average; - w2 = qt2->total_weight; - f2 = get_or_alloc_force_qt(qt2, dim); - assert(dist > 0); - for (k = 0; k < dim; k++){ - if (p == -1){ - f = w1*w2*KP*(x1[k] - x2[k])/(dist*dist); - } else { - f = w1*w2*KP*(x1[k] - x2[k])/pow(dist, 1.- p); - } - f1[k] += f; - f2[k] -= f; - } - return; - } - - - /* both at leaves, calculate repulsive force */ - if (l1 && l2){ - while (l1){ - x1 = node_data_get_coord(SingleLinkedList_get_data(l1)); - wgt1 = node_data_get_weight(SingleLinkedList_get_data(l1)); - i1 = node_data_get_id(SingleLinkedList_get_data(l1)); - f1 = get_or_assign_node_force(force, i1, l1, dim); - l2 = qt2->l; - while (l2){ - x2 = node_data_get_coord(SingleLinkedList_get_data(l2)); - wgt2 = node_data_get_weight(SingleLinkedList_get_data(l2)); - i2 = node_data_get_id(SingleLinkedList_get_data(l2)); - f2 = get_or_assign_node_force(force, i2, l2, dim); - if ((qt1 == qt2 && i2 < i1) || i1 == i2) { - l2 = SingleLinkedList_get_next(l2); - continue; - } - counts[1]++; - dist = distance_cropped(x, dim, i1, i2); - for (k = 0; k < dim; k++){ - if (p == -1){ - f = wgt1*wgt2*KP*(x1[k] - x2[k])/(dist*dist); - } else { - f = wgt1*wgt2*KP*(x1[k] - x2[k])/pow(dist, 1.- p); - } - f1[k] += f; - f2[k] -= f; - } - l2 = SingleLinkedList_get_next(l2); - } - l1 = SingleLinkedList_get_next(l1); - } - return; - } - - - /* identical, split one */ - if (qt1 == qt2){ - for (i = 0; i < 1<qts[i]; - for (j = i; j < 1<qts[j]; - QuadTree_repulsive_force_interact(qt11, qt12, x, force, bh, p, KP, counts); - } - } - } else { - /* split the one with bigger box, or one not at the last level */ - if (qt1->width > qt2->width && !l1){ - for (i = 0; i < 1<qts[i]; - QuadTree_repulsive_force_interact(qt11, qt2, x, force, bh, p, KP, counts); - } - } else if (qt2->width > qt1->width && !l2){ - for (i = 0; i < 1<qts[i]; - QuadTree_repulsive_force_interact(qt11, qt1, x, force, bh, p, KP, counts); - } - } else if (!l1){/* pick one that is not at the last level */ - for (i = 0; i < 1<qts[i]; - QuadTree_repulsive_force_interact(qt11, qt2, x, force, bh, p, KP, counts); - } - } else if (!l2){ - for (i = 0; i < 1<qts[i]; - QuadTree_repulsive_force_interact(qt11, qt1, x, force, bh, p, KP, counts); - } - } else { - assert(0); /* can be both at the leaf level since that should be catched at the beginning of this func. */ - } - } -} - -static void QuadTree_repulsive_force_accumulate(QuadTree qt, real *force, real *counts){ - /* push down forces on cells into the node level */ - real wgt, wgt2; - real *f, *f2; - SingleLinkedList l = qt->l; - int i, k, dim; - QuadTree qt2; - - dim = qt->dim; - wgt = qt->total_weight; - f = get_or_alloc_force_qt(qt, dim); - assert(wgt > 0); - counts[2]++; - - if (l){ - while (l){ - i = node_data_get_id(SingleLinkedList_get_data(l)); - f2 = get_or_assign_node_force(force, i, l, dim); - wgt2 = node_data_get_weight(SingleLinkedList_get_data(l)); - wgt2 = wgt2/wgt; - for (k = 0; k < dim; k++) f2[k] += wgt2*f[k]; - l = SingleLinkedList_get_next(l); - } - return; - } - - for (i = 0; i < 1<qts[i]; - if (!qt2) continue; - assert(qt2->n > 0); - f2 = get_or_alloc_force_qt(qt2, dim); - wgt2 = qt2->total_weight; - wgt2 = wgt2/wgt; - for (k = 0; k < dim; k++) f2[k] += wgt2*f[k]; - QuadTree_repulsive_force_accumulate(qt2, force, counts); - } - -} - -void QuadTree_get_repulsive_force(QuadTree qt, real *force, real *x, real bh, real p, real KP, real *counts, int *flag){ - /* get repulsice force by a more efficient algortihm: we consider two cells, if they are well separated, we - calculate the overall repulsive force on the cell level, if not well separated, we divide one of the cell. - If both cells are at the leaf level, we calcuaulate repulsicve force among individual nodes. Finally - we accumulate forces at the cell levels to teh node level - qt: the quadtree - x: current coordinates for node i is x[i*dim+j], j = 0, ..., dim-1 - force: the repulsice force, an array of length dim*nnodes, the force for node i is at force[i*dim+j], j = 0, ..., dim - 1 - bh: Barnes-Hut coefficient. If width_cell1+width_cell2 < bh*dist_between_cells, we treat each cell as a supernode. - p: the repulsive force power - KP: pow(K, 1 - p) - counts: array of size 4. - . counts[0]: number of cell-cell interaction - . counts[1]: number of cell-node interaction - . counts[2]: number of total cells in the quadtree - . Al normalized by dividing by number of nodes - */ - int n = qt->n, dim = qt->dim, i; - - for (i = 0; i < 4; i++) counts[i] = 0; - - *flag = 0; - - for (i = 0; i < dim*n; i++) force[i] = 0; - - QuadTree_repulsive_force_interact(qt, qt, x, force, bh, p, KP, counts); - QuadTree_repulsive_force_accumulate(qt, force, counts); - for (i = 0; i < 4; i++) counts[i] /= n; - -} -QuadTree QuadTree_new_from_point_list(int dim, int n, int max_level, real *coord, real *weight){ - /* form a new QuadTree data structure from a list of coordinates of n points - coord: of length n*dim, point i sits at [i*dim, i*dim+dim - 1] - weight: node weight of lentgth n. If NULL, unit weight assumed. - */ - real *xmin, *xmax, *center, width; - QuadTree qt = NULL; - int i, k; - - xmin = MALLOC(sizeof(real)*dim); - xmax = MALLOC(sizeof(real)*dim); - center = MALLOC(sizeof(real)*dim); - if (!xmin || !xmax || !center) { - FREE(xmin); - FREE(xmax); - FREE(center); - return NULL; - } - - for (i = 0; i < dim; i++) xmin[i] = coord[i]; - for (i = 0; i < dim; i++) xmax[i] = coord[i]; - - for (i = 1; i < n; i++){ - for (k = 0; k < dim; k++){ - xmin[k] = MIN(xmin[k], coord[i*dim+k]); - xmax[k] = MAX(xmax[k], coord[i*dim+k]); - } - } - - width = xmax[0] - xmin[0]; - for (i = 0; i < dim; i++) { - center[i] = (xmin[i] + xmax[i])*0.5; - width = MAX(width, xmax[i] - xmin[i]); - } - if (width == 0) width = 0.00001;/* if we only have one point, width = 0! */ - width *= 0.52; - qt = QuadTree_new(dim, center, width, max_level); - - if (weight){ - for (i = 0; i < n; i++){ - qt = QuadTree_add(qt, &(coord[i*dim]), weight[i], i); - } - } else { - for (i = 0; i < n; i++){ - qt = QuadTree_add(qt, &(coord[i*dim]), 1, i); - } - } - - - FREE(xmin); - FREE(xmax); - FREE(center); - return qt; -} - -QuadTree QuadTree_new(int dim, real *center, real width, int max_level){ - QuadTree q; - int i; - q = MALLOC(sizeof(struct QuadTree_struct)); - q->dim = dim; - q->n = 0; - q->center = MALLOC(sizeof(real)*dim); - for (i = 0; i < dim; i++) q->center[i] = center[i]; - assert(width > 0); - q->width = width; - q->total_weight = 0; - q->average = NULL; - q->qts = NULL; - q->l = NULL; - q->max_level = max_level; - q->data = NULL; - return q; -} - -void QuadTree_delete(QuadTree q){ - int i, dim; - if (!q) return; - dim = q->dim; - FREE(q->center); - FREE(q->average); - if (q->data) FREE(q->data); - if (q->qts){ - for (i = 0; i < 1<qts[i]); - } - FREE(q->qts); - } - SingleLinkedList_delete(q->l, node_data_delete); - FREE(q); -} - -static int QuadTree_get_quadrant(int dim, real *center, real *coord){ - /* find the quadrant that a point of coordinates coord is going into with reference to the center. - if coord - center == {+,-,+,+} = {1,0,1,1}, then it will sit in the i-quadrant where - i's binary representation is 1011 (that is, decimal 11). - */ - int d = 0, i; - - for (i = dim - 1; i >= 0; i--){ - if (coord[i] - center[i] < 0){ - d = 2*d; - } else { - d = 2*d+1; - } - } - return d; -} - -QuadTree QuadTree_new_in_quadrant(int dim, real *center, real width, int max_level, int i){ - /* a new quadtree in quadrant i of the original cell. The original cell is centered at 'center". - The new cell have width "width". - */ - QuadTree qt; - int k; - - qt = QuadTree_new(dim, center, width, max_level); - center = qt->center;/* right now this has the center for the parent */ - for (k = 0; k < dim; k++){/* decompose child id into binary, if {1,0}, say, then - add {width/2, -width/2} to the parents' center - to get the child's center. */ - if (i%2 == 0){ - center[k] -= width; - } else { - center[k] += width; - } - i = (i - i%2)/2; - } - return qt; - -} -static QuadTree QuadTree_add_internal(QuadTree q, real *coord, real weight, int id, int level){ - int i, dim = q->dim, ii; - node_data nd = NULL; - - int max_level = q->max_level; - int idd; - - /* Make sure that coord is within bounding box */ - for (i = 0; i < q->dim; i++) { - if (coord[i] < q->center[i] - q->width - 1.e5*MACHINEACC*q->width || coord[i] > q->center[i] + q->width + 1.e5*MACHINEACC*q->width) { -#ifdef DEBUG_PRINT - fprintf(stderr,"coordinate %f is outside of the box:{%f, %f}, \n(q->center[i] - q->width) - coord[i] =%g, coord[i]-(q->center[i] + q->width) = %g\n",coord[i], (q->center[i] - q->width), (q->center[i] + q->width), - (q->center[i] - q->width) - coord[i], coord[i]-(q->center[i] + q->width)); -#endif - //return NULL; - } - } - - if (q->n == 0){ - /* if this node is empty right now */ - q->n = 1; - q->total_weight = weight; - q->average = MALLOC(sizeof(real)*dim); - for (i = 0; i < q->dim; i++) q->average[i] = coord[i]; - nd = node_data_new(q->dim, weight, coord, id); - assert(!(q->l)); - q->l = SingleLinkedList_new(nd); - } else if (level < max_level){ - /* otherwise open up into 2^dim quadtrees unless the level is too high */ - q->total_weight += weight; - for (i = 0; i < q->dim; i++) q->average[i] = ((q->average[i])*q->n + coord[i])/(q->n + 1); - if (!q->qts){ - q->qts = MALLOC(sizeof(QuadTree)*(1<qts[i] = NULL; - }/* done adding new quadtree, now add points to them */ - - /* insert the old node (if exist) and the current node into the appropriate child quadtree */ - ii = QuadTree_get_quadrant(dim, q->center, coord); - assert(ii < 1<= 0); - if (q->qts[ii] == NULL) q->qts[ii] = QuadTree_new_in_quadrant(q->dim, q->center, (q->width)/2, max_level, ii); - - q->qts[ii] = QuadTree_add_internal(q->qts[ii], coord, weight, id, level + 1); - assert(q->qts[ii]); - - if (q->l){ - idd = node_data_get_id(SingleLinkedList_get_data(q->l)); - assert(q->n == 1); - coord = node_data_get_coord(SingleLinkedList_get_data(q->l)); - weight = node_data_get_weight(SingleLinkedList_get_data(q->l)); - ii = QuadTree_get_quadrant(dim, q->center, coord); - assert(ii < 1<= 0); - - if (q->qts[ii] == NULL) q->qts[ii] = QuadTree_new_in_quadrant(q->dim, q->center, (q->width)/2, max_level, ii); - - q->qts[ii] = QuadTree_add_internal(q->qts[ii], coord, weight, idd, level + 1); - assert(q->qts[ii]); - - /* delete the old node data on parent */ - SingleLinkedList_delete(q->l, node_data_delete); - q->l = NULL; - } - - (q->n)++; - } else { - assert(!(q->qts)); - /* level is too high, append data in the linked list */ - (q->n)++; - q->total_weight += weight; - for (i = 0; i < q->dim; i++) q->average[i] = ((q->average[i])*q->n + coord[i])/(q->n + 1); - nd = node_data_new(q->dim, weight, coord, id); - assert(q->l); - q->l = SingleLinkedList_prepend(q->l, nd); - } - return q; -} - - -QuadTree QuadTree_add(QuadTree q, real *coord, real weight, int id){ - if (!q) return q; - return QuadTree_add_internal(q, coord, weight, id, 0); - -} - -static void draw_polygon(FILE *fp, int dim, real *center, real width){ - /* pliot the enclosing square */ - if (dim < 2 || dim > 3) return; - fprintf(fp,"(*in c*){Line[{"); - - if (dim == 2){ - fprintf(fp, "{%f, %f}", center[0] + width, center[1] + width); - fprintf(fp, ",{%f, %f}", center[0] - width, center[1] + width); - fprintf(fp, ",{%f, %f}", center[0] - width, center[1] - width); - fprintf(fp, ",{%f, %f}", center[0] + width, center[1] - width); - fprintf(fp, ",{%f, %f}", center[0] + width, center[1] + width); - } else if (dim == 3){ - /* top */ - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] + width, center[1] + width, center[2] + width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] + width, center[2] + width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] - width, center[2] + width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] - width, center[2] + width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] + width, center[2] + width); - fprintf(fp,"},"); - /* bot */ - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] + width, center[1] + width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] + width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] - width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] - width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] + width, center[2] - width); - fprintf(fp,"},"); - /* for sides */ - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] + width, center[1] + width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] + width, center[2] + width); - fprintf(fp,"},"); - - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] - width, center[1] + width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] + width, center[2] + width); - fprintf(fp,"},"); - - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] + width, center[1] - width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] + width, center[1] - width, center[2] + width); - fprintf(fp,"},"); - - fprintf(fp,"{"); - fprintf(fp, "{%f, %f, %f}", center[0] - width, center[1] - width, center[2] - width); - fprintf(fp, ",{%f, %f, %f}", center[0] - width, center[1] - width, center[2] + width); - fprintf(fp,"}"); - } - - - fprintf(fp, "}]}(*end C*)"); - - -} -static void QuadTree_print_internal(FILE *fp, QuadTree q, int level){ - /* dump a quad tree in Mathematica format. */ - SingleLinkedList l, l0; - real *coord; - int i, dim; - - if (!q) return; - - draw_polygon(fp, q->dim, q->center, q->width); - dim = q->dim; - - l0 = l = q->l; - if (l){ - printf(",(*a*) {Red,"); - while (l){ - if (l != l0) printf(","); - coord = node_data_get_coord(SingleLinkedList_get_data(l)); - fprintf(fp, "(*node %d*) Point[{", node_data_get_id(SingleLinkedList_get_data(l))); - for (i = 0; i < dim; i++){ - if (i != 0) printf(","); - fprintf(fp, "%f",coord[i]); - } - fprintf(fp, "}]"); - l = SingleLinkedList_get_next(l); - } - fprintf(fp, "}"); - } - - if (q->qts){ - for (i = 0; i < 1<qts[i], level + 1); - fprintf(fp, "}"); - } - } - - -} - -void QuadTree_print(FILE *fp, QuadTree q){ - if (!fp) return; - if (q->dim == 2){ - fprintf(fp, "Graphics[{"); - } else if (q->dim == 3){ - fprintf(fp, "Graphics3D[{"); - } else { - return; - } - QuadTree_print_internal(fp, q, 0); - if (q->dim == 2){ - fprintf(fp, "}, PlotRange -> All, Frame -> True, FrameTicks -> True]\n"); - } else { - fprintf(fp, "}, PlotRange -> All]\n"); - } -} - - - - -static void QuadTree_get_nearest_internal(QuadTree qt, real *x, real *y, real *min, int *imin, int tentative, int *flag){ - /* get the narest point years to {x[0], ..., x[dim]} and store in y.*/ - SingleLinkedList l; - real *coord, dist; - int dim, i, iq = -1; - real qmin; - real *point = x; - - *flag = 0; - if (!qt) return; - dim = qt->dim; - l = qt->l; - if (l){ - while (l){ - coord = node_data_get_coord(SingleLinkedList_get_data(l)); - dist = point_distance(point, coord, dim); - if(*min < 0 || dist < *min) { - *min = dist; - *imin = node_data_get_id(SingleLinkedList_get_data(l)); - for (i = 0; i < dim; i++) y[i] = coord[i]; - } - l = SingleLinkedList_get_next(l); - } - } - - if (qt->qts){ - dist = point_distance(qt->center, point, dim); - if (*min >= 0 && (dist - sqrt((real) dim) * qt->width > *min)){ - return; - } else { - if (tentative){/* quick first approximation*/ - qmin = -1; - for (i = 0; i < 1<qts[i]){ - dist = point_distance(qt->qts[i]->average, point, dim); - if (dist < qmin || qmin < 0){ - qmin = dist; iq = i; - } - } - } - assert(iq >= 0); - QuadTree_get_nearest_internal(qt->qts[iq], x, y, min, imin, tentative, flag); - } else { - for (i = 0; i < 1<qts[i], x, y, min, imin, tentative, flag); - } - } - } - } - -} - - -void QuadTree_get_nearest(QuadTree qt, real *x, real *ymin, int *imin, real *min, int *flag){ - - *flag = 0; - *min = -1; - - QuadTree_get_nearest_internal(qt, x, ymin, min, imin, TRUE, flag); - - QuadTree_get_nearest_internal(qt, x, ymin, min, imin, FALSE, flag); - - -} diff --git a/internal/ccall/sparse/QuadTree.h b/internal/ccall/sparse/QuadTree.h deleted file mode 100644 index 358cb78..0000000 --- a/internal/ccall/sparse/QuadTree.h +++ /dev/null @@ -1,64 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef QUAD_TREE_H -#define QUAD_TREE_H - -#include "LinkedList.h" -/* #include "sfdpinternal.h" */ -#include - -typedef struct QuadTree_struct *QuadTree; - -struct QuadTree_struct { - /* a data structure containing coordinates of n items, their average is in "average". - The current level is a square or cube of width "width", which is subdivided into - 2^dim QuadTrees qts. At the last level, all coordinates are stored in a single linked list l. - total_weight is the combined weights of the nodes */ - int n;/* number of items */ - real total_weight; - int dim; - real *center;/* center of the bounding box, array of dimension dim. Allocated inside */ - real width;/* center +/- width gives the lower/upper bound, so really width is the - "radius" */ - real *average;/* the average coordinates. Array of length dim. Allocated inside */ - QuadTree *qts;/* subtree . If dim = 2, there are 4, dim = 3 gives 8 */ - SingleLinkedList l; - int max_level; - void *data; -}; - - -QuadTree QuadTree_new(int dim, real *center, real width, int max_level); - -void QuadTree_delete(QuadTree q); - -QuadTree QuadTree_add(QuadTree q, real *coord, real weight, int id);/* coord is copied in */ - -void QuadTree_print(FILE *fp, QuadTree q); - -QuadTree QuadTree_new_from_point_list(int dim, int n, int max_level, real *coord, real *weight); - -real point_distance(real *p1, real *p2, int dim); - -void QuadTree_get_supernodes(QuadTree qt, real bh, real *point, int nodeid, int *nsuper, - int *nsupermax, real **center, real **supernode_wgts, real **distances, real *counts, int *flag); - -void QuadTree_get_repulsive_force(QuadTree qt, real *force, real *x, real bh, real p, real KP, real *counts, int *flag); - -/* find the nearest point and put in ymin, index in imin and distance in min */ -void QuadTree_get_nearest(QuadTree qt, real *x, real *ymin, int *imin, real *min, int *flag); - -QuadTree QuadTree_new_in_quadrant(int dim, real *center, real width, int max_level, int i); - -#endif diff --git a/internal/ccall/sparse/SparseMatrix.c b/internal/ccall/sparse/SparseMatrix.c deleted file mode 100644 index 777c908..0000000 --- a/internal/ccall/sparse/SparseMatrix.c +++ /dev/null @@ -1,4187 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include -#include "logic.h" -#include "memory.h" -#include "arith.h" -#include "SparseMatrix.h" -#include "BinaryHeap.h" -#if PQ -#include "LinkedList.h" -#include "PriorityQueue.h" -#endif - -static size_t size_of_matrix_type(int type){ - int size = 0; - switch (type){ - case MATRIX_TYPE_REAL: - size = sizeof(real); - break; - case MATRIX_TYPE_COMPLEX: - size = 2*sizeof(real); - break; - case MATRIX_TYPE_INTEGER: - size = sizeof(int); - break; - case MATRIX_TYPE_PATTERN: - size = 0; - break; - case MATRIX_TYPE_UNKNOWN: - size = 0; - break; - default: - size = 0; - break; - } - - return size; -} - -SparseMatrix SparseMatrix_sort(SparseMatrix A){ - SparseMatrix B; - B = SparseMatrix_transpose(A); - SparseMatrix_delete(A); - A = SparseMatrix_transpose(B); - SparseMatrix_delete(B); - return A; -} -SparseMatrix SparseMatrix_make_undirected(SparseMatrix A){ - /* make it strictly low diag only, and set flag to undirected */ - SparseMatrix B; - B = SparseMatrix_symmetrize(A, FALSE); - SparseMatrix_set_undirected(B); - return SparseMatrix_remove_upper(B); -} -SparseMatrix SparseMatrix_transpose(SparseMatrix A){ - if (!A) return NULL; - - int *ia = A->ia, *ja = A->ja, *ib, *jb, nz = A->nz, m = A->m, n = A->n, type = A->type, format = A->format; - SparseMatrix B; - int i, j; - - assert(A->format == FORMAT_CSR);/* only implemented for CSR right now */ - - B = SparseMatrix_new(n, m, nz, type, format); - B->nz = nz; - ib = B->ia; - jb = B->ja; - - for (i = 0; i <= n; i++) ib[i] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - ib[ja[j]+1]++; - } - } - - for (i = 0; i < n; i++) ib[i+1] += ib[i]; - - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jb[ib[ja[j]]] = i; - b[ib[ja[j]]++] = a[j]; - } - } - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jb[ib[ja[j]]] = i; - b[2*ib[ja[j]]] = a[2*j]; - b[2*ib[ja[j]]+1] = a[2*j+1]; - ib[ja[j]]++; - } - } - break; - } - case MATRIX_TYPE_INTEGER:{ - int *ai = (int*) A->a; - int *bi = (int*) B->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jb[ib[ja[j]]] = i; - bi[ib[ja[j]]++] = ai[j]; - } - } - break; - } - case MATRIX_TYPE_PATTERN: - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jb[ib[ja[j]]++] = i; - } - } - break; - case MATRIX_TYPE_UNKNOWN: - SparseMatrix_delete(B); - return NULL; - default: - SparseMatrix_delete(B); - return NULL; - } - - - for (i = n-1; i >= 0; i--) ib[i+1] = ib[i]; - ib[0] = 0; - - - return B; -} - -SparseMatrix SparseMatrix_symmetrize(SparseMatrix A, int pattern_symmetric_only){ - SparseMatrix B; - if (SparseMatrix_is_symmetric(A, pattern_symmetric_only)) return SparseMatrix_copy(A); - B = SparseMatrix_transpose(A); - if (!B) return NULL; - A = SparseMatrix_add(A, B); - SparseMatrix_delete(B); - SparseMatrix_set_symmetric(A); - SparseMatrix_set_pattern_symmetric(A); - return A; -} - -SparseMatrix SparseMatrix_symmetrize_nodiag(SparseMatrix A, int pattern_symmetric_only){ - SparseMatrix B; - if (SparseMatrix_is_symmetric(A, pattern_symmetric_only)) { - B = SparseMatrix_copy(A); - return SparseMatrix_remove_diagonal(B); - } - B = SparseMatrix_transpose(A); - if (!B) return NULL; - A = SparseMatrix_add(A, B); - SparseMatrix_delete(B); - SparseMatrix_set_symmetric(A); - SparseMatrix_set_pattern_symmetric(A); - return SparseMatrix_remove_diagonal(A); -} - -int SparseMatrix_is_symmetric(SparseMatrix A, int test_pattern_symmetry_only){ - if (!A) return FALSE; - - /* assume no repeated entries! */ - SparseMatrix B; - int *ia, *ja, *ib, *jb, type, m; - int *mask; - int res = FALSE; - int i, j; - assert(A->format == FORMAT_CSR);/* only implemented for CSR right now */ - - if (SparseMatrix_known_symmetric(A)) return TRUE; - if (test_pattern_symmetry_only && SparseMatrix_known_strucural_symmetric(A)) return TRUE; - - if (A->m != A->n) return FALSE; - - B = SparseMatrix_transpose(A); - if (!B) return FALSE; - - ia = A->ia; - ja = A->ja; - ib = B->ia; - jb = B->ja; - m = A->m; - - mask = MALLOC(sizeof(int)*((size_t) m)); - for (i = 0; i < m; i++) mask[i] = -1; - - type = A->type; - if (test_pattern_symmetry_only) type = MATRIX_TYPE_PATTERN; - - switch (type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - for (i = 0; i <= m; i++) if (ia[i] != ib[i]) goto RETURN; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = j; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ia[i]) goto RETURN; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (ABS(b[j] - a[mask[jb[j]]]) > SYMMETRY_EPSILON) goto RETURN; - } - } - res = TRUE; - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - for (i = 0; i <= m; i++) if (ia[i] != ib[i]) goto RETURN; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = j; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ia[i]) goto RETURN; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (ABS(b[2*j] - a[2*mask[jb[j]]]) > SYMMETRY_EPSILON) goto RETURN; - if (ABS(b[2*j+1] - a[2*mask[jb[j]]+1]) > SYMMETRY_EPSILON) goto RETURN; - } - } - res = TRUE; - break; - } - case MATRIX_TYPE_INTEGER:{ - int *ai = (int*) A->a; - int *bi = (int*) B->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = j; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ia[i]) goto RETURN; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (bi[j] != ai[mask[jb[j]]]) goto RETURN; - } - } - res = TRUE; - break; - } - case MATRIX_TYPE_PATTERN: - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = j; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ia[i]) goto RETURN; - } - } - res = TRUE; - break; - case MATRIX_TYPE_UNKNOWN: - goto RETURN; - break; - default: - goto RETURN; - break; - } - - if (test_pattern_symmetry_only){ - SparseMatrix_set_pattern_symmetric(A); - } else { - SparseMatrix_set_symmetric(A); - SparseMatrix_set_pattern_symmetric(A); - } - RETURN: - FREE(mask); - - SparseMatrix_delete(B); - return res; -} - -static SparseMatrix SparseMatrix_init(int m, int n, int type, size_t sz, int format){ - SparseMatrix A; - - - A = MALLOC(sizeof(struct SparseMatrix_struct)); - A->m = m; - A->n = n; - A->nz = 0; - A->nzmax = 0; - A->type = type; - A->size = sz; - switch (format){ - case FORMAT_COORD: - A->ia = NULL; - break; - case FORMAT_CSC: - case FORMAT_CSR: - default: - A->ia = MALLOC(sizeof(int)*((size_t)(m+1))); - } - A->ja = NULL; - A->a = NULL; - A->format = format; - A->property = 0; - clear_flag(A->property, MATRIX_PATTERN_SYMMETRIC); - clear_flag(A->property, MATRIX_SYMMETRIC); - clear_flag(A->property, MATRIX_SKEW); - clear_flag(A->property, MATRIX_HERMITIAN); - return A; -} - -static SparseMatrix SparseMatrix_alloc(SparseMatrix A, int nz){ - int format = A->format; - size_t nz_t = (size_t) nz; /* size_t is 64 bit on 64 bit machine. Using nz*A->size can overflow. */ - - A->a = NULL; - switch (format){ - case FORMAT_COORD: - A->ia = MALLOC(sizeof(int)*nz_t); - A->ja = MALLOC(sizeof(int)*nz_t); - A->a = MALLOC(A->size*nz_t); - break; - case FORMAT_CSR: - case FORMAT_CSC: - default: - A->ja = MALLOC(sizeof(int)*nz_t); - if (A->size > 0 && nz_t > 0) { - A->a = MALLOC(A->size*nz_t); - } - break; - } - A->nzmax = nz; - return A; -} - -static SparseMatrix SparseMatrix_realloc(SparseMatrix A, int nz){ - int format = A->format; - size_t nz_t = (size_t) nz; /* size_t is 64 bit on 64 bit machine. Using nz*A->size can overflow. */ - - switch (format){ - case FORMAT_COORD: - A->ia = REALLOC(A->ia, sizeof(int)*nz_t); - A->ja = REALLOC(A->ja, sizeof(int)*nz_t); - if (A->size > 0) { - if (A->a){ - A->a = REALLOC(A->a, A->size*nz_t); - } else { - A->a = MALLOC(A->size*nz_t); - } - } - break; - case FORMAT_CSR: - case FORMAT_CSC: - default: - A->ja = REALLOC(A->ja, sizeof(int)*nz_t); - if (A->size > 0) { - if (A->a){ - A->a = REALLOC(A->a, A->size*nz_t); - } else { - A->a = MALLOC(A->size*nz_t); - } - } - break; - } - A->nzmax = nz; - return A; -} - -SparseMatrix SparseMatrix_new(int m, int n, int nz, int type, int format){ - /* return a sparse matrix skeleton with row dimension m and storage nz. If nz == 0, - only row pointers are allocated */ - SparseMatrix A; - size_t sz; - - sz = size_of_matrix_type(type); - A = SparseMatrix_init(m, n, type, sz, format); - - if (nz > 0) A = SparseMatrix_alloc(A, nz); - return A; - -} -SparseMatrix SparseMatrix_general_new(int m, int n, int nz, int type, size_t sz, int format){ - /* return a sparse matrix skeleton with row dimension m and storage nz. If nz == 0, - only row pointers are allocated. this is more general and allow elements to be - any data structure, not just real/int/complex etc - */ - SparseMatrix A; - - A = SparseMatrix_init(m, n, type, sz, format); - - if (nz > 0) A = SparseMatrix_alloc(A, nz); - return A; - -} - -void SparseMatrix_delete(SparseMatrix A){ - /* return a sparse matrix skeleton with row dimension m and storage nz. If nz == 0, - only row pointers are allocated */ - if (!A) return; - if (A->ia) FREE(A->ia); - if (A->ja) FREE(A->ja); - if (A->a) FREE(A->a); - FREE(A); -} -void SparseMatrix_print_csr(char *c, SparseMatrix A){ - int *ia, *ja; - real *a; - int *ai; - int i, j, m = A->m; - - assert (A->format == FORMAT_CSR); - printf("%s\n SparseArray[{",c); - ia = A->ia; - ja = A->ja; - a = A->a; - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - printf("{%d, %d}->%f",i+1, ja[j]+1, a[j]); - if (j != ia[m]-1) printf(","); - } - } - break; - case MATRIX_TYPE_COMPLEX: - a = (real*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - printf("{%d, %d}->%f + %f I",i+1, ja[j]+1, a[2*j], a[2*j+1]); - if (j != ia[m]-1) printf(","); - } - } - printf("\n"); - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - printf("{%d, %d}->%d",i+1, ja[j]+1, ai[j]); - if (j != ia[m]-1) printf(","); - } - } - printf("\n"); - break; - case MATRIX_TYPE_PATTERN: - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - printf("{%d, %d}->_",i+1, ja[j]+1); - if (j != ia[m]-1) printf(","); - } - } - printf("\n"); - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } - printf("},{%d, %d}]\n", m, A->n); - -} - - - -void SparseMatrix_print_coord(char *c, SparseMatrix A){ - int *ia, *ja; - real *a; - int *ai; - int i, m = A->m; - - assert (A->format == FORMAT_COORD); - printf("%s\n SparseArray[{",c); - ia = A->ia; - ja = A->ja; - a = A->a; - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - for (i = 0; i < A->nz; i++){ - printf("{%d, %d}->%f",ia[i]+1, ja[i]+1, a[i]); - if (i != A->nz - 1) printf(","); - } - printf("\n"); - break; - case MATRIX_TYPE_COMPLEX: - a = (real*) A->a; - for (i = 0; i < A->nz; i++){ - printf("{%d, %d}->%f + %f I",ia[i]+1, ja[i]+1, a[2*i], a[2*i+1]); - if (i != A->nz - 1) printf(","); - } - printf("\n"); - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - for (i = 0; i < A->nz; i++){ - printf("{%d, %d}->%d",ia[i]+1, ja[i]+1, ai[i]); - if (i != A->nz) printf(","); - } - printf("\n"); - break; - case MATRIX_TYPE_PATTERN: - for (i = 0; i < A->nz; i++){ - printf("{%d, %d}->_",ia[i]+1, ja[i]+1); - if (i != A->nz - 1) printf(","); - } - printf("\n"); - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } - printf("},{%d, %d}]\n", m, A->n); - -} - - - - -void SparseMatrix_print(char *c, SparseMatrix A){ - switch (A->format){ - case FORMAT_CSR: - SparseMatrix_print_csr(c, A); - break; - case FORMAT_CSC: - assert(0);/* not implemented yet... - SparseMatrix_print_csc(c, A);*/ - break; - case FORMAT_COORD: - SparseMatrix_print_coord(c, A); - break; - default: - assert(0); - } -} - - - - - -static void SparseMatrix_export_csr(FILE *f, SparseMatrix A){ - int *ia, *ja; - real *a; - int *ai; - int i, j, m = A->m; - - switch (A->type){ - case MATRIX_TYPE_REAL: - fprintf(f,"%%%%MatrixMarket matrix coordinate real general\n"); - break; - case MATRIX_TYPE_COMPLEX: - fprintf(f,"%%%%MatrixMarket matrix coordinate complex general\n"); - break; - case MATRIX_TYPE_INTEGER: - fprintf(f,"%%%%MatrixMarket matrix coordinate integer general\n"); - break; - case MATRIX_TYPE_PATTERN: - fprintf(f,"%%%%MatrixMarket matrix coordinate pattern general\n"); - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } - - fprintf(f,"%d %d %d\n",A->m,A->n,A->nz); - ia = A->ia; - ja = A->ja; - a = A->a; - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - fprintf(f, "%d %d %16.8g\n",i+1, ja[j]+1, a[j]); - } - } - break; - case MATRIX_TYPE_COMPLEX: - a = (real*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - fprintf(f, "%d %d %16.8g %16.8g\n",i+1, ja[j]+1, a[2*j], a[2*j+1]); - } - } - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - fprintf(f, "%d %d %d\n",i+1, ja[j]+1, ai[j]); - } - } - break; - case MATRIX_TYPE_PATTERN: - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - fprintf(f, "%d %d\n",i+1, ja[j]+1); - } - } - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } - -} - -void SparseMatrix_export_binary_fp(FILE *f, SparseMatrix A){ - - fwrite(&(A->m), sizeof(int), 1, f); - fwrite(&(A->n), sizeof(int), 1, f); - fwrite(&(A->nz), sizeof(int), 1, f); - fwrite(&(A->nzmax), sizeof(int), 1, f); - fwrite(&(A->type), sizeof(int), 1, f); - fwrite(&(A->format), sizeof(int), 1, f); - fwrite(&(A->property), sizeof(int), 1, f); - fwrite(&(A->size), sizeof(size_t), 1, f); - if (A->format == FORMAT_COORD){ - fwrite(A->ia, sizeof(int), A->nz, f); - } else { - fwrite(A->ia, sizeof(int), A->m + 1, f); - } - fwrite(A->ja, sizeof(int), A->nz, f); - if (A->size > 0) fwrite(A->a, A->size, A->nz, f); - -} - -void SparseMatrix_export_binary(char *name, SparseMatrix A, int *flag){ - FILE *f; - - *flag = 0; - f = fopen(name, "wb"); - if (!f) { - *flag = 1; - return; - } - SparseMatrix_export_binary_fp(f, A); - fclose(f); - -} - - - -SparseMatrix SparseMatrix_import_binary_fp(FILE *f){ - SparseMatrix A = NULL; - int m, n, nz, nzmax, type, format, property, iread; - size_t sz; - - iread = fread(&m, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&n, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&nz, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&nzmax, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&type, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&format, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&property, sizeof(int), 1, f); - if (iread != 1) return NULL; - iread = fread(&sz, sizeof(size_t), 1, f); - if (iread != 1) return NULL; - - A = SparseMatrix_general_new(m, n, nz, type, sz, format); - A->nz = nz; - A->property = property; - - if (format == FORMAT_COORD){ - iread = fread(A->ia, sizeof(int), A->nz, f); - if (iread != A->nz) return NULL; - } else { - iread = fread(A->ia, sizeof(int), A->m + 1, f); - if (iread != A->m + 1) return NULL; - } - iread = fread(A->ja, sizeof(int), A->nz, f); - if (iread != A->nz) return NULL; - - if (A->size > 0) { - iread = fread(A->a, A->size, A->nz, f); - if (iread != A->nz) return NULL; - } - fclose(f); - return A; -} - - -SparseMatrix SparseMatrix_import_binary(char *name){ - SparseMatrix A = NULL; - FILE *f; - f = fopen(name, "rb"); - - A = SparseMatrix_import_binary_fp(f); - return A; -} - -static void SparseMatrix_export_coord(FILE *f, SparseMatrix A){ - int *ia, *ja; - real *a; - int *ai; - int i; - - switch (A->type){ - case MATRIX_TYPE_REAL: - fprintf(f,"%%%%MatrixMarket matrix coordinate real general\n"); - break; - case MATRIX_TYPE_COMPLEX: - fprintf(f,"%%%%MatrixMarket matrix coordinate complex general\n"); - break; - case MATRIX_TYPE_INTEGER: - fprintf(f,"%%%%MatrixMarket matrix coordinate integer general\n"); - break; - case MATRIX_TYPE_PATTERN: - fprintf(f,"%%%%MatrixMarket matrix coordinate pattern general\n"); - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } - - fprintf(f,"%d %d %d\n",A->m,A->n,A->nz); - ia = A->ia; - ja = A->ja; - a = A->a; - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - for (i = 0; i < A->nz; i++){ - fprintf(f, "%d %d %16.8g\n",ia[i]+1, ja[i]+1, a[i]); - } - break; - case MATRIX_TYPE_COMPLEX: - a = (real*) A->a; - for (i = 0; i < A->nz; i++){ - fprintf(f, "%d %d %16.8g %16.8g\n",ia[i]+1, ja[i]+1, a[2*i], a[2*i+1]); - } - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - for (i = 0; i < A->nz; i++){ - fprintf(f, "%d %d %d\n",ia[i]+1, ja[i]+1, ai[i]); - } - break; - case MATRIX_TYPE_PATTERN: - for (i = 0; i < A->nz; i++){ - fprintf(f, "%d %d\n",ia[i]+1, ja[i]+1); - } - break; - case MATRIX_TYPE_UNKNOWN: - return; - default: - return; - } -} - - - -void SparseMatrix_export(FILE *f, SparseMatrix A){ - - switch (A->format){ - case FORMAT_CSR: - SparseMatrix_export_csr(f, A); - break; - case FORMAT_CSC: - assert(0);/* not implemented yet... - SparseMatrix_print_csc(c, A);*/ - break; - case FORMAT_COORD: - SparseMatrix_export_coord(f, A); - break; - default: - assert(0); - } -} - - -SparseMatrix SparseMatrix_from_coordinate_format(SparseMatrix A){ - /* convert a sparse matrix in coordinate form to one in compressed row form.*/ - int *irn, *jcn; - - void *a = A->a; - - assert(A->format == FORMAT_COORD); - if (A->format != FORMAT_COORD) { - return NULL; - } - irn = A->ia; - jcn = A->ja; - return SparseMatrix_from_coordinate_arrays(A->nz, A->m, A->n, irn, jcn, a, A->type, A->size); - -} -SparseMatrix SparseMatrix_from_coordinate_format_not_compacted(SparseMatrix A, int what_to_sum){ - /* convert a sparse matrix in coordinate form to one in compressed row form.*/ - int *irn, *jcn; - - void *a = A->a; - - assert(A->format == FORMAT_COORD); - if (A->format != FORMAT_COORD) { - return NULL; - } - irn = A->ia; - jcn = A->ja; - return SparseMatrix_from_coordinate_arrays_not_compacted(A->nz, A->m, A->n, irn, jcn, a, A->type, A->size, what_to_sum); - -} - -static SparseMatrix SparseMatrix_from_coordinate_arrays_internal(int nz, int m, int n, int *irn, int *jcn, void *val0, int type, size_t sz, int sum_repeated){ - /* convert a sparse matrix in coordinate form to one in compressed row form. - nz: number of entries - irn: row indices 0-based - jcn: column indices 0-based - val values if not NULL - type: matrix type - */ - - SparseMatrix A = NULL; - int *ia, *ja; - real *a, *val; - int *ai, *vali; - int i; - - assert(m > 0 && n > 0 && nz >= 0); - - if (m <=0 || n <= 0 || nz < 0) return NULL; - A = SparseMatrix_general_new(m, n, nz, type, sz, FORMAT_CSR); - assert(A); - if (!A) return NULL; - ia = A->ia; - ja = A->ja; - - for (i = 0; i <= m; i++){ - ia[i] = 0; - } - - switch (type){ - case MATRIX_TYPE_REAL: - val = (real*) val0; - a = (real*) A->a; - for (i = 0; i < nz; i++){ - if (irn[i] < 0 || irn[i] >= m || jcn[i] < 0 || jcn[i] >= n) { - assert(0); - return NULL; - } - ia[irn[i]+1]++; - } - for (i = 0; i < m; i++) ia[i+1] += ia[i]; - for (i = 0; i < nz; i++){ - a[ia[irn[i]]] = val[i]; - ja[ia[irn[i]]++] = jcn[i]; - } - for (i = m; i > 0; i--) ia[i] = ia[i - 1]; - ia[0] = 0; - break; - case MATRIX_TYPE_COMPLEX: - val = (real*) val0; - a = (real*) A->a; - for (i = 0; i < nz; i++){ - if (irn[i] < 0 || irn[i] >= m || jcn[i] < 0 || jcn[i] >= n) { - assert(0); - return NULL; - } - ia[irn[i]+1]++; - } - for (i = 0; i < m; i++) ia[i+1] += ia[i]; - for (i = 0; i < nz; i++){ - a[2*ia[irn[i]]] = *(val++); - a[2*ia[irn[i]]+1] = *(val++); - ja[ia[irn[i]]++] = jcn[i]; - } - for (i = m; i > 0; i--) ia[i] = ia[i - 1]; - ia[0] = 0; - break; - case MATRIX_TYPE_INTEGER: - vali = (int*) val0; - ai = (int*) A->a; - for (i = 0; i < nz; i++){ - if (irn[i] < 0 || irn[i] >= m || jcn[i] < 0 || jcn[i] >= n) { - assert(0); - return NULL; - } - ia[irn[i]+1]++; - } - for (i = 0; i < m; i++) ia[i+1] += ia[i]; - for (i = 0; i < nz; i++){ - ai[ia[irn[i]]] = vali[i]; - ja[ia[irn[i]]++] = jcn[i]; - } - for (i = m; i > 0; i--) ia[i] = ia[i - 1]; - ia[0] = 0; - break; - case MATRIX_TYPE_PATTERN: - for (i = 0; i < nz; i++){ - if (irn[i] < 0 || irn[i] >= m || jcn[i] < 0 || jcn[i] >= n) { - assert(0); - return NULL; - } - ia[irn[i]+1]++; - } - for (i = 0; i < m; i++) ia[i+1] += ia[i]; - for (i = 0; i < nz; i++){ - ja[ia[irn[i]]++] = jcn[i]; - } - for (i = m; i > 0; i--) ia[i] = ia[i - 1]; - ia[0] = 0; - break; - case MATRIX_TYPE_UNKNOWN: - for (i = 0; i < nz; i++){ - if (irn[i] < 0 || irn[i] >= m || jcn[i] < 0 || jcn[i] >= n) { - assert(0); - return NULL; - } - ia[irn[i]+1]++; - } - for (i = 0; i < m; i++) ia[i+1] += ia[i]; - MEMCPY(A->a, val0, A->size*((size_t)nz)); - for (i = 0; i < nz; i++){ - ja[ia[irn[i]]++] = jcn[i]; - } - for (i = m; i > 0; i--) ia[i] = ia[i - 1]; - ia[0] = 0; - break; - default: - assert(0); - return NULL; - } - A->nz = nz; - - - - if(sum_repeated) A = SparseMatrix_sum_repeat_entries(A, sum_repeated); - - return A; -} - - -SparseMatrix SparseMatrix_from_coordinate_arrays(int nz, int m, int n, int *irn, int *jcn, void *val0, int type, size_t sz){ - return SparseMatrix_from_coordinate_arrays_internal(nz, m, n, irn, jcn, val0, type, sz, SUM_REPEATED_ALL); -} - - -SparseMatrix SparseMatrix_from_coordinate_arrays_not_compacted(int nz, int m, int n, int *irn, int *jcn, void *val0, int type, size_t sz, int what_to_sum){ - return SparseMatrix_from_coordinate_arrays_internal(nz, m, n, irn, jcn, val0, type, sz, what_to_sum); -} - -SparseMatrix SparseMatrix_add(SparseMatrix A, SparseMatrix B){ - int m, n; - SparseMatrix C = NULL; - int *mask = NULL; - int *ia = A->ia, *ja = A->ja, *ib = B->ia, *jb = B->ja, *ic, *jc; - int i, j, nz, nzmax; - - assert(A && B); - assert(A->format == B->format && A->format == FORMAT_CSR);/* other format not yet supported */ - assert(A->type == B->type); - m = A->m; - n = A->n; - if (m != B->m || n != B->n) return NULL; - - nzmax = A->nz + B->nz;/* just assume that no entries overlaps for speed */ - - C = SparseMatrix_new(m, n, nzmax, A->type, FORMAT_CSR); - if (!C) goto RETURN; - ic = C->ia; - jc = C->ja; - - mask = MALLOC(sizeof(int)*((size_t) n)); - - for (i = 0; i < n; i++) mask[i] = -1; - - nz = 0; - ic[0] = 0; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = nz; - jc[nz] = ja[j]; - c[nz] = a[j]; - nz++; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ic[i]){ - jc[nz] = jb[j]; - c[nz++] = b[j]; - } else { - c[mask[jb[j]]] += b[j]; - } - } - ic[i+1] = nz; - } - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = nz; - jc[nz] = ja[j]; - c[2*nz] = a[2*j]; - c[2*nz+1] = a[2*j+1]; - nz++; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ic[i]){ - jc[nz] = jb[j]; - c[2*nz] = b[2*j]; - c[2*nz+1] = b[2*j+1]; - nz++; - } else { - c[2*mask[jb[j]]] += b[2*j]; - c[2*mask[jb[j]]+1] += b[2*j+1]; - } - } - ic[i+1] = nz; - } - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - int *b = (int*) B->a; - int *c = (int*) C->a; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = nz; - jc[nz] = ja[j]; - c[nz] = a[j]; - nz++; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ic[i]){ - jc[nz] = jb[j]; - c[nz] = b[j]; - nz++; - } else { - c[mask[jb[j]]] += b[j]; - } - } - ic[i+1] = nz; - } - break; - } - case MATRIX_TYPE_PATTERN:{ - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = nz; - jc[nz] = ja[j]; - nz++; - } - for (j = ib[i]; j < ib[i+1]; j++){ - if (mask[jb[j]] < ic[i]){ - jc[nz] = jb[j]; - nz++; - } - } - ic[i+1] = nz; - } - break; - } - case MATRIX_TYPE_UNKNOWN: - break; - default: - break; - } - C->nz = nz; - - RETURN: - if (mask) FREE(mask); - - return C; -} - - - -static void dense_transpose(real *v, int m, int n){ - /* transpose an m X n matrix in place. Well, we do no really do it without xtra memory. This is possibe, but too complicated for ow */ - int i, j; - real *u; - u = MALLOC(sizeof(real)*((size_t) m)*((size_t) n)); - MEMCPY(u,v, sizeof(real)*((size_t) m)*((size_t) n)); - - for (i = 0; i < m; i++){ - for (j = 0; j < n; j++){ - v[j*m+i] = u[i*n+j]; - } - } - FREE(u); -} - - -static void SparseMatrix_multiply_dense1(SparseMatrix A, real *v, real **res, int dim, int transposed, int res_transposed){ - /* A v or A^T v where v a dense matrix of second dimension dim. Real only for now. */ - int i, j, k, *ia, *ja, n, m; - real *a, *u; - - assert(A->format == FORMAT_CSR); - assert(A->type == MATRIX_TYPE_REAL); - - a = (real*) A->a; - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - u = *res; - - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t) m)*((size_t) dim)); - for (i = 0; i < m; i++){ - for (k = 0; k < dim; k++) u[i*dim+k] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - for (k = 0; k < dim; k++) u[i*dim+k] += a[j]*v[ja[j]*dim+k]; - } - } - if (res_transposed) dense_transpose(u, m, dim); - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t) n)*((size_t) dim)); - for (i = 0; i < n*dim; i++) u[i] = 0.; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - for (k = 0; k < dim; k++) u[ja[j]*dim + k] += a[j]*v[i*dim + k]; - } - } - if (res_transposed) dense_transpose(u, n, dim); - } - - *res = u; - - -} - -static void SparseMatrix_multiply_dense2(SparseMatrix A, real *v, real **res, int dim, int transposed, int res_transposed){ - /* A v^T or A^T v^T where v a dense matrix of second dimension n or m. Real only for now. - transposed = FALSE: A*V^T, with A dimension m x n, V dimension dim x n, v[i*n+j] gives V[i,j]. Result of dimension m x dim - transposed = TRUE: A^T*V^T, with A dimension m x n, V dimension dim x m. v[i*m+j] gives V[i,j]. Result of dimension n x dim - */ - real *u, *rr; - int i, m, n; - assert(A->format == FORMAT_CSR); - assert(A->type == MATRIX_TYPE_REAL); - u = *res; - m = A->m; - n = A->n; - - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t)m)*((size_t) dim)); - for (i = 0; i < dim; i++){ - rr = &(u[m*i]); - SparseMatrix_multiply_vector(A, &(v[n*i]), &rr, transposed); - } - if (!res_transposed) dense_transpose(u, dim, m); - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t)n)*((size_t)dim)); - for (i = 0; i < dim; i++){ - rr = &(u[n*i]); - SparseMatrix_multiply_vector(A, &(v[m*i]), &rr, transposed); - } - if (!res_transposed) dense_transpose(u, dim, n); - } - - *res = u; - - -} - - - -void SparseMatrix_multiply_dense(SparseMatrix A, int ATransposed, real *v, int vTransposed, real **res, int res_transposed, int dim){ - /* depend on value of {ATranspose, vTransposed}, assume res_transposed == FALSE - {FALSE, FALSE}: A * V, with A dimension m x n, with V of dimension n x dim. v[i*dim+j] gives V[i,j]. Result of dimension m x dim - {TRUE, FALSE}: A^T * V, with A dimension m x n, with V of dimension m x dim. v[i*dim+j] gives V[i,j]. Result of dimension n x dim - {FALSE, TRUE}: A*V^T, with A dimension m x n, V dimension dim x n, v[i*n+j] gives V[i,j]. Result of dimension m x dim - {TRUE, TRUE}: A^T*V^T, with A dimension m x n, V dimension dim x m. v[i*m+j] gives V[i,j]. Result of dimension n x dim - - furthermore, if res_transpose d== TRUE, then the result is transposed. Hence if res_transposed == TRUE - - {FALSE, FALSE}: V^T A^T, with A dimension m x n, with V of dimension n x dim. v[i*dim+j] gives V[i,j]. Result of dimension dim x dim - {TRUE, FALSE}: V^T A, with A dimension m x n, with V of dimension m x dim. v[i*dim+j] gives V[i,j]. Result of dimension dim x n - {FALSE, TRUE}: V*A^T, with A dimension m x n, V dimension dim x n, v[i*n+j] gives V[i,j]. Result of dimension dim x m - {TRUE, TRUE}: V A, with A dimension m x n, V dimension dim x m. v[i*m+j] gives V[i,j]. Result of dimension dim x n - */ - - if (!vTransposed) { - SparseMatrix_multiply_dense1(A, v, res, dim, ATransposed, res_transposed); - } else { - SparseMatrix_multiply_dense2(A, v, res, dim, ATransposed, res_transposed); - } - -} - - - -void SparseMatrix_multiply_vector(SparseMatrix A, real *v, real **res, int transposed){ - /* A v or A^T v. Real only for now. */ - int i, j, *ia, *ja, n, m; - real *a, *u = NULL; - int *ai; - assert(A->format == FORMAT_CSR); - assert(A->type == MATRIX_TYPE_REAL || A->type == MATRIX_TYPE_INTEGER); - - ia = A->ia; - ja = A->ja; - m = A->m; - n = A->n; - u = *res; - - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - if (v){ - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t)m)); - for (i = 0; i < m; i++){ - u[i] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - u[i] += a[j]*v[ja[j]]; - } - } - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t)n)); - for (i = 0; i < n; i++) u[i] = 0.; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - u[ja[j]] += a[j]*v[i]; - } - } - } - } else { - /* v is assumed to be all 1's */ - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t)m)); - for (i = 0; i < m; i++){ - u[i] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - u[i] += a[j]; - } - } - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t)n)); - for (i = 0; i < n; i++) u[i] = 0.; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - u[ja[j]] += a[j]; - } - } - } - } - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - if (v){ - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t)m)); - for (i = 0; i < m; i++){ - u[i] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - u[i] += ai[j]*v[ja[j]]; - } - } - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t)n)); - for (i = 0; i < n; i++) u[i] = 0.; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - u[ja[j]] += ai[j]*v[i]; - } - } - } - } else { - /* v is assumed to be all 1's */ - if (!transposed){ - if (!u) u = MALLOC(sizeof(real)*((size_t)m)); - for (i = 0; i < m; i++){ - u[i] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - u[i] += ai[j]; - } - } - } else { - if (!u) u = MALLOC(sizeof(real)*((size_t)n)); - for (i = 0; i < n; i++) u[i] = 0.; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - u[ja[j]] += ai[j]; - } - } - } - } - break; - default: - assert(0); - u = NULL; - } - *res = u; - -} - - - -SparseMatrix SparseMatrix_scaled_by_vector(SparseMatrix A, real *v, int apply_to_row){ - /* A SCALED BY VECOTR V IN ROW/COLUMN. Real only for now. */ - int i, j, *ia, *ja, m; - real *a; - assert(A->format == FORMAT_CSR); - assert(A->type == MATRIX_TYPE_REAL); - - a = (real*) A->a; - ia = A->ia; - ja = A->ja; - m = A->m; - - - if (!apply_to_row){ - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - a[j] *= v[ja[j]]; - } - } - } else { - for (i = 0; i < m; i++){ - if (v[i] != 0){ - for (j = ia[i]; j < ia[i+1]; j++){ - a[j] *= v[i]; - } - } - } - } - return A; - -} -SparseMatrix SparseMatrix_multiply_by_scaler(SparseMatrix A, real s){ - /* A scaled by a number */ - int i, j, *ia, m; - real *a, *b = NULL; - int *ai; - assert(A->format == FORMAT_CSR); - - switch (A->type){ - case MATRIX_TYPE_INTEGER: - b = MALLOC(sizeof(real)*A->nz); - ai = (int*) A->a; - for (i = 0; i < A->nz; i++) b[i] = ai[i]; - FREE(A->a); - A->a = b; - A->type = MATRIX_TYPE_REAL; - case MATRIX_TYPE_REAL: - a = (real*) A->a; - ia = A->ia; - m = A->m; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - a[j] *= s; - } - } - break; - case MATRIX_TYPE_COMPLEX: - a = (real*) A->a; - ia = A->ia; - m = A->m; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - a[2*j] *= s; - a[2*j+1] *= s; - } - } - - break; - default: - fprintf(stderr,"warning: scaling of matrix this type is not supported\n"); - } - - return A; - -} - - -SparseMatrix SparseMatrix_multiply(SparseMatrix A, SparseMatrix B){ - int m; - SparseMatrix C = NULL; - int *mask = NULL; - int *ia = A->ia, *ja = A->ja, *ib = B->ia, *jb = B->ja, *ic, *jc; - int i, j, k, jj, type, nz; - - assert(A->format == B->format && A->format == FORMAT_CSR);/* other format not yet supported */ - - m = A->m; - if (A->n != B->m) return NULL; - if (A->type != B->type){ -#ifdef DEBUG - printf("in SparseMatrix_multiply, the matrix types do not match, right now only multiplication of matrices of the same type is supported\n"); -#endif - return NULL; - } - type = A->type; - - mask = MALLOC(sizeof(int)*((size_t)(B->n))); - if (!mask) return NULL; - - for (i = 0; i < B->n; i++) mask[i] = -1; - - nz = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (k = ib[jj]; k < ib[jj+1]; k++){ - if (mask[jb[k]] != -i - 2){ - if ((nz+1) <= nz) { -#ifdef DEBUG_PRINT - fprintf(stderr,"overflow in SparseMatrix_multiply !!!\n"); -#endif - return NULL; - } - nz++; - mask[jb[k]] = -i - 2; - } - } - } - } - - C = SparseMatrix_new(m, B->n, nz, type, FORMAT_CSR); - if (!C) goto RETURN; - ic = C->ia; - jc = C->ja; - - nz = 0; - - switch (type){ - case MATRIX_TYPE_REAL: - { - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - ic[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (k = ib[jj]; k < ib[jj+1]; k++){ - if (mask[jb[k]] < ic[i]){ - mask[jb[k]] = nz; - jc[nz] = jb[k]; - c[nz] = a[j]*b[k]; - nz++; - } else { - assert(jc[mask[jb[k]]] == jb[k]); - c[mask[jb[k]]] += a[j]*b[k]; - } - } - } - ic[i+1] = nz; - } - } - break; - case MATRIX_TYPE_COMPLEX: - { - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - a = (real*) A->a; - b = (real*) B->a; - c = (real*) C->a; - ic[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (k = ib[jj]; k < ib[jj+1]; k++){ - if (mask[jb[k]] < ic[i]){ - mask[jb[k]] = nz; - jc[nz] = jb[k]; - c[2*nz] = a[2*j]*b[2*k] - a[2*j+1]*b[2*k+1];/*real part */ - c[2*nz+1] = a[2*j]*b[2*k+1] + a[2*j+1]*b[2*k];/*img part */ - nz++; - } else { - assert(jc[mask[jb[k]]] == jb[k]); - c[2*mask[jb[k]]] += a[2*j]*b[2*k] - a[2*j+1]*b[2*k+1];/*real part */ - c[2*mask[jb[k]]+1] += a[2*j]*b[2*k+1] + a[2*j+1]*b[2*k];/*img part */ - } - } - } - ic[i+1] = nz; - } - } - break; - case MATRIX_TYPE_INTEGER: - { - int *a = (int*) A->a; - int *b = (int*) B->a; - int *c = (int*) C->a; - ic[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (k = ib[jj]; k < ib[jj+1]; k++){ - if (mask[jb[k]] < ic[i]){ - mask[jb[k]] = nz; - jc[nz] = jb[k]; - c[nz] = a[j]*b[k]; - nz++; - } else { - assert(jc[mask[jb[k]]] == jb[k]); - c[mask[jb[k]]] += a[j]*b[k]; - } - } - } - ic[i+1] = nz; - } - } - break; - case MATRIX_TYPE_PATTERN: - ic[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (k = ib[jj]; k < ib[jj+1]; k++){ - if (mask[jb[k]] < ic[i]){ - mask[jb[k]] = nz; - jc[nz] = jb[k]; - nz++; - } else { - assert(jc[mask[jb[k]]] == jb[k]); - } - } - } - ic[i+1] = nz; - } - break; - case MATRIX_TYPE_UNKNOWN: - default: - SparseMatrix_delete(C); - C = NULL; goto RETURN; - break; - } - - C->nz = nz; - - RETURN: - FREE(mask); - return C; - -} - - - -SparseMatrix SparseMatrix_multiply3(SparseMatrix A, SparseMatrix B, SparseMatrix C){ - int m; - SparseMatrix D = NULL; - int *mask = NULL; - int *ia = A->ia, *ja = A->ja, *ib = B->ia, *jb = B->ja, *ic = C->ia, *jc = C->ja, *id, *jd; - int i, j, k, l, ll, jj, type, nz; - - assert(A->format == B->format && A->format == FORMAT_CSR);/* other format not yet supported */ - - m = A->m; - if (A->n != B->m) return NULL; - if (B->n != C->m) return NULL; - - if (A->type != B->type || B->type != C->type){ -#ifdef DEBUG - printf("in SparseMatrix_multiply, the matrix types do not match, right now only multiplication of matrices of the same type is supported\n"); -#endif - return NULL; - } - type = A->type; - - mask = MALLOC(sizeof(int)*((size_t)(C->n))); - if (!mask) return NULL; - - for (i = 0; i < C->n; i++) mask[i] = -1; - - nz = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (l = ib[jj]; l < ib[jj+1]; l++){ - ll = jb[l]; - for (k = ic[ll]; k < ic[ll+1]; k++){ - if (mask[jc[k]] != -i - 2){ - if ((nz+1) <= nz) { -#ifdef DEBUG_PRINT - fprintf(stderr,"overflow in SparseMatrix_multiply !!!\n"); -#endif - return NULL; - } - nz++; - mask[jc[k]] = -i - 2; - } - } - } - } - } - - D = SparseMatrix_new(m, C->n, nz, type, FORMAT_CSR); - if (!D) goto RETURN; - id = D->ia; - jd = D->ja; - - nz = 0; - - switch (type){ - case MATRIX_TYPE_REAL: - { - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - real *d = (real*) D->a; - id[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (l = ib[jj]; l < ib[jj+1]; l++){ - ll = jb[l]; - for (k = ic[ll]; k < ic[ll+1]; k++){ - if (mask[jc[k]] < id[i]){ - mask[jc[k]] = nz; - jd[nz] = jc[k]; - d[nz] = a[j]*b[l]*c[k]; - nz++; - } else { - assert(jd[mask[jc[k]]] == jc[k]); - d[mask[jc[k]]] += a[j]*b[l]*c[k]; - } - } - } - } - id[i+1] = nz; - } - } - break; - case MATRIX_TYPE_COMPLEX: - { - real *a = (real*) A->a; - real *b = (real*) B->a; - real *c = (real*) C->a; - real *d = (real*) D->a; - id[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (l = ib[jj]; l < ib[jj+1]; l++){ - ll = jb[l]; - for (k = ic[ll]; k < ic[ll+1]; k++){ - if (mask[jc[k]] < id[i]){ - mask[jc[k]] = nz; - jd[nz] = jc[k]; - d[2*nz] = (a[2*j]*b[2*l] - a[2*j+1]*b[2*l+1])*c[2*k] - - (a[2*j]*b[2*l+1] + a[2*j+1]*b[2*l])*c[2*k+1];/*real part */ - d[2*nz+1] = (a[2*j]*b[2*l+1] + a[2*j+1]*b[2*l])*c[2*k] - + (a[2*j]*b[2*l] - a[2*j+1]*b[2*l+1])*c[2*k+1];/*img part */ - nz++; - } else { - assert(jd[mask[jc[k]]] == jc[k]); - d[2*mask[jc[k]]] += (a[2*j]*b[2*l] - a[2*j+1]*b[2*l+1])*c[2*k] - - (a[2*j]*b[2*l+1] + a[2*j+1]*b[2*l])*c[2*k+1];/*real part */ - d[2*mask[jc[k]]+1] += (a[2*j]*b[2*l+1] + a[2*j+1]*b[2*l])*c[2*k] - + (a[2*j]*b[2*l] - a[2*j+1]*b[2*l+1])*c[2*k+1];/*img part */ - } - } - } - } - id[i+1] = nz; - } - } - break; - case MATRIX_TYPE_INTEGER: - { - int *a = (int*) A->a; - int *b = (int*) B->a; - int *c = (int*) C->a; - int *d = (int*) D->a; - id[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (l = ib[jj]; l < ib[jj+1]; l++){ - ll = jb[l]; - for (k = ic[ll]; k < ic[ll+1]; k++){ - if (mask[jc[k]] < id[i]){ - mask[jc[k]] = nz; - jd[nz] = jc[k]; - d[nz] += a[j]*b[l]*c[k]; - nz++; - } else { - assert(jd[mask[jc[k]]] == jc[k]); - d[mask[jc[k]]] += a[j]*b[l]*c[k]; - } - } - } - } - id[i+1] = nz; - } - } - break; - case MATRIX_TYPE_PATTERN: - id[0] = 0; - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - for (l = ib[jj]; l < ib[jj+1]; l++){ - ll = jb[l]; - for (k = ic[ll]; k < ic[ll+1]; k++){ - if (mask[jc[k]] < id[i]){ - mask[jc[k]] = nz; - jd[nz] = jc[k]; - nz++; - } else { - assert(jd[mask[jc[k]]] == jc[k]); - } - } - } - } - id[i+1] = nz; - } - break; - case MATRIX_TYPE_UNKNOWN: - default: - SparseMatrix_delete(D); - D = NULL; goto RETURN; - break; - } - - D->nz = nz; - - RETURN: - FREE(mask); - return D; - -} - -/* For complex matrix: - if what_to_sum = SUM_REPEATED_REAL_PART, we find entries {i,j,x + i y} and sum the x's if {i,j,Round(y)} are the same - if what_to_sum = SUM_REPEATED_REAL_PART, we find entries {i,j,x + i y} and sum the y's if {i,j,Round(x)} are the same - so a matrix like {{1,1,2+3i},{1,2,3+4i},{1,1,5+3i},{1,2,4+5i},{1,2,4+4i}} becomes - {{1,1,2+5+3i},{1,2,3+4+4i},{1,2,4+5i}}. - - Really this kind of thing is best handled using a 3D sparse matrix like - {{{1,1,3},2},{{1,2,4},3},{{1,1,3},5},{{1,2,4},4}}, - which is then aggreted into - {{{1,1,3},2+5},{{1,2,4},3+4},{{1,1,3},5}} - but unfortunately I do not have such object implemented yet. - - - For other matrix, what_to_sum = SUM_REPEATED_REAL_PART is the same as what_to_sum = SUM_REPEATED_IMAGINARY_PART - or what_to_sum = SUM_REPEATED_ALL. In this implementation we assume that - the {j,y} pairs are dense, so we usea 2D array for hashing -*/ -SparseMatrix SparseMatrix_sum_repeat_entries(SparseMatrix A, int what_to_sum){ - /* sum repeated entries in the same row, i.e., {1,1}->1, {1,1}->2 becomes {1,1}->3 */ - int *ia = A->ia, *ja = A->ja, type = A->type, n = A->n; - int *mask = NULL, nz = 0, i, j, sta; - - if (what_to_sum == SUM_REPEATED_NONE) return A; - - mask = MALLOC(sizeof(int)*((size_t)n)); - for (i = 0; i < n; i++) mask[i] = -1; - - switch (type){ - case MATRIX_TYPE_REAL: - { - real *a = (real*) A->a; - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (mask[ja[j]] < ia[i]){ - ja[nz] = ja[j]; - a[nz] = a[j]; - mask[ja[j]] = nz++; - } else { - assert(ja[mask[ja[j]]] == ja[j]); - a[mask[ja[j]]] += a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - } - break; - case MATRIX_TYPE_COMPLEX: - { - real *a = (real*) A->a; - if (what_to_sum == SUM_REPEATED_ALL){ - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (mask[ja[j]] < ia[i]){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - mask[ja[j]] = nz++; - } else { - assert(ja[mask[ja[j]]] == ja[j]); - a[2*mask[ja[j]]] += a[2*j]; - a[2*mask[ja[j]]+1] += a[2*j+1]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - } else if (what_to_sum == SUM_IMGINARY_KEEP_LAST_REAL){ - /* merge {i,j,R1,I1} and {i,j,R2,I2} into {i,j,R1+R2,I2}*/ - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (mask[ja[j]] < ia[i]){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - mask[ja[j]] = nz++; - } else { - assert(ja[mask[ja[j]]] == ja[j]); - a[2*mask[ja[j]]] += a[2*j]; - a[2*mask[ja[j]]+1] = a[2*j+1]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - } else if (what_to_sum == SUM_REPEATED_REAL_PART){ - int ymin, ymax, id; - ymax = ymin = a[1]; - nz = 0; - for (i = 0; i < A->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - ymax = MAX(ymax, (int) a[2*nz+1]); - ymin = MIN(ymin, (int) a[2*nz+1]); - nz++; - } - } - FREE(mask); - mask = MALLOC(sizeof(int)*((size_t)n)*((size_t)(ymax-ymin+1))); - for (i = 0; i < n*(ymax-ymin+1); i++) mask[i] = -1; - - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - id = ja[j] + ((int)a[2*j+1] - ymin)*n; - if (mask[id] < ia[i]){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - mask[id] = nz++; - } else { - assert(id < n*(ymax-ymin+1)); - assert(ja[mask[id]] == ja[j]); - a[2*mask[id]] += a[2*j]; - a[2*mask[id]+1] = a[2*j+1]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - - } else if (what_to_sum == SUM_REPEATED_IMAGINARY_PART){ - int xmin, xmax, id; - xmax = xmin = a[1]; - nz = 0; - for (i = 0; i < A->m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - xmax = MAX(xmax, (int) a[2*nz]); - xmin = MAX(xmin, (int) a[2*nz]); - nz++; - } - } - FREE(mask); - mask = MALLOC(sizeof(int)*((size_t)n)*((size_t)(xmax-xmin+1))); - for (i = 0; i < n*(xmax-xmin+1); i++) mask[i] = -1; - - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - id = ja[j] + ((int)a[2*j] - xmin)*n; - if (mask[id] < ia[i]){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - mask[id] = nz++; - } else { - assert(ja[mask[id]] == ja[j]); - a[2*mask[id]] = a[2*j]; - a[2*mask[id]+1] += a[2*j+1]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - - } - } - break; - case MATRIX_TYPE_INTEGER: - { - int *a = (int*) A->a; - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (mask[ja[j]] < ia[i]){ - ja[nz] = ja[j]; - a[nz] = a[j]; - mask[ja[j]] = nz++; - } else { - assert(ja[mask[ja[j]]] == ja[j]); - a[mask[ja[j]]] += a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - } - break; - case MATRIX_TYPE_PATTERN: - { - nz = 0; - sta = ia[0]; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (mask[ja[j]] < ia[i]){ - ja[nz] = ja[j]; - mask[ja[j]] = nz++; - } else { - assert(ja[mask[ja[j]]] == ja[j]); - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - } - break; - case MATRIX_TYPE_UNKNOWN: - return NULL; - break; - default: - return NULL; - break; - } - A->nz = nz; - FREE(mask); - return A; -} - -SparseMatrix SparseMatrix_coordinate_form_add_entries(SparseMatrix A, int nentries, int *irn, int *jcn, void *val){ - int nz, nzmax, i; - - assert(A->format == FORMAT_COORD); - if (nentries <= 0) return A; - nz = A->nz; - nzmax = A->nzmax; - - if (nz + nentries >= A->nzmax){ - nzmax = nz + nentries; - nzmax = MAX(10, (int) 0.2*nzmax) + nzmax; - A = SparseMatrix_realloc(A, nzmax); - } - MEMCPY((char*) A->ia + ((size_t)nz)*sizeof(int)/sizeof(char), irn, sizeof(int)*((size_t)nentries)); - MEMCPY((char*) A->ja + ((size_t)nz)*sizeof(int)/sizeof(char), jcn, sizeof(int)*((size_t)nentries)); - if (A->size) MEMCPY((char*) A->a + ((size_t)nz)*A->size/sizeof(char), val, A->size*((size_t)nentries)); - for (i = 0; i < nentries; i++) { - if (irn[i] >= A->m) A->m = irn[i]+1; - if (jcn[i] >= A->n) A->n = jcn[i]+1; - } - A->nz += nentries; - return A; -} - - -SparseMatrix SparseMatrix_remove_diagonal(SparseMatrix A){ - int i, j, *ia, *ja, nz, sta; - - if (!A) return A; - - nz = 0; - ia = A->ia; - ja = A->ja; - sta = ia[0]; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] != i){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] != i){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - nz++; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] != i){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_PATTERN:{ - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] != i){ - ja[nz++] = ja[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_UNKNOWN: - return NULL; - default: - return NULL; - } - - return A; -} - - -SparseMatrix SparseMatrix_remove_upper(SparseMatrix A){/* remove diag and upper diag */ - int i, j, *ia, *ja, nz, sta; - - if (!A) return A; - - nz = 0; - ia = A->ia; - ja = A->ja; - sta = ia[0]; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] < i){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] < i){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - nz++; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] < i){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_PATTERN:{ - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ja[j] < i){ - ja[nz++] = ja[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_UNKNOWN: - return NULL; - default: - return NULL; - } - - clear_flag(A->property, MATRIX_PATTERN_SYMMETRIC); - clear_flag(A->property, MATRIX_SYMMETRIC); - clear_flag(A->property, MATRIX_SKEW); - clear_flag(A->property, MATRIX_HERMITIAN); - return A; -} - - - - -SparseMatrix SparseMatrix_divide_row_by_degree(SparseMatrix A){ - int i, j, *ia, *ja; - real deg; - - if (!A) return A; - - ia = A->ia; - ja = A->ja; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - deg = ia[i+1] - ia[i]; - for (j = ia[i]; j < ia[i+1]; j++){ - a[j] = a[j]/deg; - } - } - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - deg = ia[i+1] - ia[i]; - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] != i){ - a[2*j] = a[2*j]/deg; - a[2*j+1] = a[2*j+1]/deg; - } - } - } - break; - } - case MATRIX_TYPE_INTEGER:{ - assert(0);/* this operation would not make sense for int matrix */ - break; - } - case MATRIX_TYPE_PATTERN:{ - break; - } - case MATRIX_TYPE_UNKNOWN: - return NULL; - default: - return NULL; - } - - return A; -} - - -SparseMatrix SparseMatrix_get_real_adjacency_matrix_symmetrized(SparseMatrix A){ - /* symmetric, all entries to 1, diaginal removed */ - int i, *ia, *ja, nz, m, n; - real *a; - SparseMatrix B; - - if (!A) return A; - - nz = A->nz; - ia = A->ia; - ja = A->ja; - n = A->n; - m = A->m; - - if (n != m) return NULL; - - B = SparseMatrix_new(m, n, nz, MATRIX_TYPE_PATTERN, FORMAT_CSR); - - MEMCPY(B->ia, ia, sizeof(int)*((size_t)(m+1))); - MEMCPY(B->ja, ja, sizeof(int)*((size_t)nz)); - B->nz = A->nz; - - A = SparseMatrix_symmetrize(B, TRUE); - SparseMatrix_delete(B); - A = SparseMatrix_remove_diagonal(A); - A->a = MALLOC(sizeof(real)*((size_t)(A->nz))); - a = (real*) A->a; - for (i = 0; i < A->nz; i++) a[i] = 1.; - A->type = MATRIX_TYPE_REAL; - A->size = sizeof(real); - return A; -} - - - -SparseMatrix SparseMatrix_normalize_to_rowsum1(SparseMatrix A){ - int i, j; - real sum, *a; - - if (!A) return A; - if (A->format != FORMAT_CSR && A->type != MATRIX_TYPE_REAL) { -#ifdef DEBUG - printf("only CSR and real matrix supported.\n"); -#endif - return A; - } - - a = (real*) A->a; - for (i = 0; i < A->m; i++){ - sum = 0; - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - sum += a[j]; - } - if (sum != 0){ - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - a[j] /= sum; - } - } - } - return A; -} - - - -SparseMatrix SparseMatrix_normalize_by_row(SparseMatrix A){ - int i, j; - real max, *a; - - if (!A) return A; - if (A->format != FORMAT_CSR && A->type != MATRIX_TYPE_REAL) { -#ifdef DEBUG - printf("only CSR and real matrix supported.\n"); -#endif - return A; - } - - a = (real*) A->a; - for (i = 0; i < A->m; i++){ - max = 0; - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - max = MAX(ABS(a[j]), max); - } - if (max != 0){ - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - a[j] /= max; - } - } - } - return A; -} - - -SparseMatrix SparseMatrix_to_complex(SparseMatrix A){ - int i, *ia, *ja; - - if (!A) return A; - if (A->format != FORMAT_CSR) { -#ifdef DEBUG - printf("only CSR format supported.\n"); -#endif - return A; - } - - ia = A->ia; - ja = A->ja; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - int nz = A->nz; - A->a = a = REALLOC(a, 2*sizeof(real)*nz); - for (i = nz - 1; i >= 0; i--){ - a[2*i] = a[i]; - a[2*i - 1] = 0; - } - A->type = MATRIX_TYPE_COMPLEX; - A->size = 2*sizeof(real); - break; - } - case MATRIX_TYPE_COMPLEX:{ - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - int nz = A->nz; - real *aa = A->a = MALLOC(2*sizeof(real)*nz); - for (i = nz - 1; i >= 0; i--){ - aa[2*i] = (real) a[i]; - aa[2*i - 1] = 0; - } - A->type = MATRIX_TYPE_COMPLEX; - A->size = 2*sizeof(real); - FREE(a); - break; - } - case MATRIX_TYPE_PATTERN:{ - break; - } - case MATRIX_TYPE_UNKNOWN: - return NULL; - default: - return NULL; - } - - return A; -} - - -SparseMatrix SparseMatrix_apply_fun(SparseMatrix A, double (*fun)(double x)){ - int i, j; - real *a; - - - if (!A) return A; - if (A->format != FORMAT_CSR && A->type != MATRIX_TYPE_REAL) { -#ifdef DEBUG - printf("only CSR and real matrix supported.\n"); -#endif - return A; - } - - - a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - a[j] = fun(a[j]); - } - } - return A; -} - -SparseMatrix SparseMatrix_apply_fun_general(SparseMatrix A, void (*fun)(int i, int j, int n, double *x)){ - int i, j; - real *a; - int len = 1; - - if (!A) return A; - if (A->format != FORMAT_CSR || (A->type != MATRIX_TYPE_REAL&&A->type != MATRIX_TYPE_COMPLEX)) { -#ifdef DEBUG - printf("SparseMatrix_apply_fun: only CSR and real/complex matrix supported.\n"); -#endif - return A; - } - if (A->type == MATRIX_TYPE_COMPLEX) len = 2; - - a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = A->ia[i]; j < A->ia[i+1]; j++){ - fun(i, A->ja[j], len, &a[len*j]); - } - } - return A; -} - - -SparseMatrix SparseMatrix_crop(SparseMatrix A, real epsilon){ - int i, j, *ia, *ja, nz, sta; - - if (!A) return A; - - nz = 0; - ia = A->ia; - ja = A->ja; - sta = ia[0]; - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ABS(a[j]) > epsilon){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (sqrt(a[2*j]*a[2*j]+a[2*j+1]*a[2*j+1]) > epsilon){ - ja[nz] = ja[j]; - a[2*nz] = a[2*j]; - a[2*nz+1] = a[2*j+1]; - nz++; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - for (i = 0; i < A->m; i++){ - for (j = sta; j < ia[i+1]; j++){ - if (ABS(a[j]) > epsilon){ - ja[nz] = ja[j]; - a[nz++] = a[j]; - } - } - sta = ia[i+1]; - ia[i+1] = nz; - } - A->nz = nz; - break; - } - case MATRIX_TYPE_PATTERN:{ - break; - } - case MATRIX_TYPE_UNKNOWN: - return NULL; - default: - return NULL; - } - - return A; -} - -SparseMatrix SparseMatrix_copy(SparseMatrix A){ - SparseMatrix B; - if (!A) return A; - B = SparseMatrix_general_new(A->m, A->n, A->nz, A->type, A->size, A->format); - MEMCPY(B->ia, A->ia, sizeof(int)*((size_t)(A->m+1))); - MEMCPY(B->ja, A->ja, sizeof(int)*((size_t)(A->ia[A->m]))); - if (A->a) MEMCPY(B->a, A->a, A->size*((size_t)A->nz)); - B->property = A->property; - B->nz = A->nz; - return B; -} - -int SparseMatrix_has_diagonal(SparseMatrix A){ - - int i, j, m = A->m, *ia = A->ia, *ja = A->ja; - - for (i = 0; i < m; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (i == ja[j]) return TRUE; - } - } - return FALSE; -} - -void SparseMatrix_level_sets_internal(int khops, SparseMatrix A, int root, int *nlevel, int **levelset_ptr, int **levelset, int **mask, int reinitialize_mask){ - /* mask is assumed to be initialized to negative if provided. - . On exit, mask = levels for visited nodes (1 for root, 2 for its neighbors, etc), - . unless reinitialize_mask = TRUE, in which case mask = -1. - khops: max number of hops allowed. If khops < 0, no limit is applied. - A: the graph, undirected - root: starting node - nlevel: max distance to root from any node (in the connected comp) - levelset_ptr, levelset: the level sets - */ - int i, j, sta = 0, sto = 1, nz, ii; - int m = A->m, *ia = A->ia, *ja = A->ja; - - if (!(*levelset_ptr)) *levelset_ptr = MALLOC(sizeof(int)*((size_t)(m+2))); - if (!(*levelset)) *levelset = MALLOC(sizeof(int)*((size_t)m)); - if (!(*mask)) { - *mask = malloc(sizeof(int)*((size_t)m)); - for (i = 0; i < m; i++) (*mask)[i] = UNMASKED; - } - - *nlevel = 0; - assert(root >= 0 && root < m); - (*levelset_ptr)[0] = 0; - (*levelset_ptr)[1] = 1; - (*levelset)[0] = root; - (*mask)[root] = 1; - *nlevel = 1; - nz = 1; - sta = 0; sto = 1; - while (sto > sta && (khops < 0 || *nlevel <= khops)){ - for (i = sta; i < sto; i++){ - ii = (*levelset)[i]; - for (j = ia[ii]; j < ia[ii+1]; j++){ - if (ii == ja[j]) continue; - if ((*mask)[ja[j]] < 0){ - (*levelset)[nz++] = ja[j]; - (*mask)[ja[j]] = *nlevel + 1; - } - } - } - (*levelset_ptr)[++(*nlevel)] = nz; - sta = sto; - sto = nz; - } - if (khops < 0 || *nlevel <= khops){ - (*nlevel)--; - } - if (reinitialize_mask) for (i = 0; i < (*levelset_ptr)[*nlevel]; i++) (*mask)[(*levelset)[i]] = UNMASKED; -} - -void SparseMatrix_level_sets(SparseMatrix A, int root, int *nlevel, int **levelset_ptr, int **levelset, int **mask, int reinitialize_mask){ - - int khops = -1; - - return SparseMatrix_level_sets_internal(khops, A, root, nlevel, levelset_ptr, levelset, mask, reinitialize_mask); - -} -void SparseMatrix_level_sets_khops(int khops, SparseMatrix A, int root, int *nlevel, int **levelset_ptr, int **levelset, int **mask, int reinitialize_mask){ - - return SparseMatrix_level_sets_internal(khops, A, root, nlevel, levelset_ptr, levelset, mask, reinitialize_mask); - -} - -void SparseMatrix_weakly_connected_components(SparseMatrix A0, int *ncomp, int **comps, int **comps_ptr){ - SparseMatrix A = A0; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL, nlevel; - int m = A->m, i, nn; - - if (!SparseMatrix_is_symmetric(A, TRUE)){ - A = SparseMatrix_symmetrize(A, TRUE); - } - if (!(*comps_ptr)) *comps_ptr = MALLOC(sizeof(int)*((size_t)(m+1))); - - *ncomp = 0; - (*comps_ptr)[0] = 0; - for (i = 0; i < m; i++){ - if (i == 0 || mask[i] < 0) { - SparseMatrix_level_sets(A, i, &nlevel, &levelset_ptr, &levelset, &mask, FALSE); - if (i == 0) *comps = levelset; - nn = levelset_ptr[nlevel]; - levelset += nn; - (*comps_ptr)[(*ncomp)+1] = (*comps_ptr)[(*ncomp)] + nn; - (*ncomp)++; - } - - } - if (A != A0) SparseMatrix_delete(A); - if (levelset_ptr) FREE(levelset_ptr); - - FREE(mask); -} - - - -struct nodedata_struct { - real dist;/* distance to root */ - int id;/*node id */ -}; -typedef struct nodedata_struct* nodedata; - -static int cmp(void*i, void*j){ - nodedata d1, d2; - - d1 = (nodedata) i; - d2 = (nodedata) j; - if (d1->dist > d2->dist){ - return 1; - } else if (d1->dist == d2->dist){ - return 0; - } else { - return -1; - } -} - -static int Dijkstra_internal(SparseMatrix A, int root, real *dist, int *nlist, int *list, real *dist_max, int *mask){ - /* Find the shortest path distance of all nodes to root. If khops >= 0, the shortest ath is of distance <= khops, - - A: the nxn connectivity matrix. Entries are assumed to be nonnegative. Absolute value will be taken if - . entry value is negative. - dist: length n. On on exit contain the distance from root to every other node. dist[root] = 0. dist[i] = distance from root to node i. - . if the graph is disconnetced, unreachable node have a distance -1. - . note: ||root - list[i]|| =!= dist[i] !!!, instead, ||root - list[i]|| == dist[list[i]] - nlist: number of nodes visited - list: length n. the list of node in order of their extraction from the heap. - . The distance from root to last in the list should be the maximum - dist_max: the maximum distance, should be realized at node list[nlist-1]. - mask: if NULL, not used. Othewise, only nodes i with mask[i] > 0 will be considered - return: 0 if every node is reachable. -1 if not */ - - int m = A->m, i, j, jj, *ia = A->ia, *ja = A->ja, heap_id; - BinaryHeap h; - real *a = NULL, *aa; - int *ai; - nodedata ndata, ndata_min; - enum {UNVISITED = -2, FINISHED = -1}; - int *heap_ids; /* node ID to heap ID array. Initialised to UNVISITED. - Set to FINISHED after extracted as min from heap */ - int found = 0; - - assert(SparseMatrix_is_symmetric(A, TRUE)); - - assert(m == A->n); - - switch (A->type){ - case MATRIX_TYPE_COMPLEX: - aa = (real*) A->a; - a = MALLOC(sizeof(real)*((size_t)(A->nz))); - for (i = 0; i < A->nz; i++) a[i] = aa[i*2]; - break; - case MATRIX_TYPE_REAL: - a = (real*) A->a; - break; - case MATRIX_TYPE_INTEGER: - ai = (int*) A->a; - a = MALLOC(sizeof(real)*((size_t)(A->nz))); - for (i = 0; i < A->nz; i++) a[i] = (real) ai[i]; - break; - case MATRIX_TYPE_PATTERN: - a = MALLOC(sizeof(real)*((size_t)A->nz)); - for (i = 0; i < A->nz; i++) a[i] = 1.; - break; - default: - assert(0);/* no such matrix type */ - } - - heap_ids = MALLOC(sizeof(int)*((size_t)m)); - for (i = 0; i < m; i++) { - dist[i] = -1; - heap_ids[i] = UNVISITED; - } - - h = BinaryHeap_new(cmp); - assert(h); - - /* add root as the first item in the heap */ - ndata = MALLOC(sizeof(struct nodedata_struct)); - ndata->dist = 0; - ndata->id = root; - heap_ids[root] = BinaryHeap_insert(h, ndata); - - assert(heap_ids[root] >= 0);/* by design heap ID from BinaryHeap_insert >=0*/ - - while ((ndata_min = BinaryHeap_extract_min(h))){ - i = ndata_min->id; - dist[i] = ndata_min->dist; - list[found++] = i; - heap_ids[i] = FINISHED; - //fprintf(stderr," =================\n min extracted is id=%d, dist=%f\n",i, ndata_min->dist); - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - heap_id = heap_ids[jj]; - - if (jj == i || heap_id == FINISHED || (mask && mask[jj] < 0)) continue; - - if (heap_id == UNVISITED){ - ndata = MALLOC(sizeof(struct nodedata_struct)); - ndata->dist = ABS(a[j]) + ndata_min->dist; - ndata->id = jj; - heap_ids[jj] = BinaryHeap_insert(h, ndata); - //fprintf(stderr," set neighbor id=%d, dist=%f, hid = %d, a[%d]=%f, dist=%f\n",jj, ndata->dist, heap_ids[jj], jj, a[j], ndata->dist); - - } else { - ndata = BinaryHeap_get_item(h, heap_id); - ndata->dist = MIN(ndata->dist, ABS(a[j]) + ndata_min->dist); - assert(ndata->id == jj); - BinaryHeap_reset(h, heap_id, ndata); - //fprintf(stderr," reset neighbor id=%d, dist=%f, hid = %d, a[%d]=%f, dist=%f\n",jj, ndata->dist,heap_id, jj, a[j], ndata->dist); - } - } - FREE(ndata_min); - } - *nlist = found; - *dist_max = dist[i]; - - - BinaryHeap_delete(h, FREE); - FREE(heap_ids); - if (a && a != A->a) FREE(a); - if (found == m || mask){ - return 0; - } else { - return -1; - } -} - -static int Dijkstra(SparseMatrix A, int root, real *dist, int *nlist, int *list, real *dist_max){ - return Dijkstra_internal(A, root, dist, nlist, list, dist_max, NULL); -} - -static int Dijkstra_masked(SparseMatrix A, int root, real *dist, int *nlist, int *list, real *dist_max, int *mask){ - /* this makes the algorithm only consider nodes that are masked. - nodes are masked as 1, 2, ..., mask_max, which is (the number of hops from root)+1. - Only paths consists of nodes that are masked are allowed. */ - - return Dijkstra_internal(A, root, dist, nlist, list, dist_max, mask); -} - -real SparseMatrix_pseudo_diameter_weighted(SparseMatrix A0, int root, int aggressive, int *end1, int *end2, int *connectedQ){ - /* weighted graph. But still assume to be undirected. unsymmetric matrix ill be symmetrized */ - SparseMatrix A = A0; - int m = A->m, i, *list = NULL, nlist; - int flag; - real *dist = NULL, dist_max = -1, dist0 = -1; - int roots[5], iroots, end11, end22; - - if (!SparseMatrix_is_symmetric(A, TRUE)){ - A = SparseMatrix_symmetrize(A, TRUE); - } - assert(m == A->n); - - dist = MALLOC(sizeof(real)*((size_t)m)); - list = MALLOC(sizeof(int)*((size_t)m)); - nlist = 1; - list[nlist-1] = root; - - assert(SparseMatrix_is_symmetric(A, TRUE)); - - do { - dist0 = dist_max; - root = list[nlist - 1]; - flag = Dijkstra(A, root, dist, &nlist, list, &dist_max); - //fprintf(stderr,"after Dijkstra, {%d,%d}-%f\n",root, list[nlist-1], dist_max); - assert(dist[list[nlist-1]] == dist_max); - assert(root == list[0]); - assert(nlist > 0); - } while (dist_max > dist0); - - *connectedQ = (!flag); - assert((dist_max - dist0)/MAX(1, MAX(ABS(dist0), ABS(dist_max))) < 1.e-10); - - *end1 = root; - *end2 = list[nlist-1]; - //fprintf(stderr,"after search for diameter, diam = %f, ends = {%d,%d}\n", dist_max, *end1, *end2); - - if (aggressive){ - iroots = 0; - for (i = MAX(0, nlist - 6); i < nlist - 1; i++){ - roots[iroots++] = list[i]; - } - for (i = 0; i < iroots; i++){ - root = roots[i]; - dist0 = dist_max; - fprintf(stderr,"search for diameter again from root=%d\n", root); - dist_max = SparseMatrix_pseudo_diameter_weighted(A, root, FALSE, &end11, &end22, connectedQ); - if (dist_max > dist0){ - *end1 = end11; *end2 = end22; - } else { - dist_max = dist0; - } - } - fprintf(stderr,"after aggressive search for diameter, diam = %f, ends = {%d,%d}\n", dist_max, *end1, *end2); - } - - FREE(dist); - FREE(list); - - if (A != A0) SparseMatrix_delete(A); - return dist_max; - -} - -real SparseMatrix_pseudo_diameter_unweighted(SparseMatrix A0, int root, int aggressive, int *end1, int *end2, int *connectedQ){ - /* assume unit edge length! unsymmetric matrix ill be symmetrized */ - SparseMatrix A = A0; - int m = A->m, i; - int nlevel; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - int nlevel0 = 0; - int roots[5], iroots, enda, endb; - - if (!SparseMatrix_is_symmetric(A, TRUE)){ - A = SparseMatrix_symmetrize(A, TRUE); - } - - assert(SparseMatrix_is_symmetric(A, TRUE)); - - SparseMatrix_level_sets(A, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - // fprintf(stderr,"after level set, {%d,%d}=%d\n",levelset[0], levelset[levelset_ptr[nlevel]-1], nlevel); - - *connectedQ = (levelset_ptr[nlevel] == m); - while (nlevel0 < nlevel){ - nlevel0 = nlevel; - root = levelset[levelset_ptr[nlevel] - 1]; - SparseMatrix_level_sets(A, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - //fprintf(stderr,"after level set, {%d,%d}=%d\n",levelset[0], levelset[levelset_ptr[nlevel]-1], nlevel); - } - *end1 = levelset[0]; - *end2 = levelset[levelset_ptr[nlevel]-1]; - - if (aggressive){ - nlevel0 = nlevel; - iroots = 0; - for (i = levelset_ptr[nlevel-1]; i < MIN(levelset_ptr[nlevel], levelset_ptr[nlevel-1]+5); i++){ - iroots++; - roots[i - levelset_ptr[nlevel-1]] = levelset[i]; - } - for (i = 0; i < iroots; i++){ - root = roots[i]; - nlevel = (int) SparseMatrix_pseudo_diameter_unweighted(A, root, FALSE, &enda, &endb, connectedQ); - if (nlevel > nlevel0) { - nlevel0 = nlevel; - *end1 = enda; - *end2 = endb; - } - } - } - - FREE(levelset_ptr); - FREE(levelset); - FREE(mask); - if (A != A0) SparseMatrix_delete(A); - return (real) nlevel0 - 1; -} - -real SparseMatrix_pseudo_diameter_only(SparseMatrix A){ - int end1, end2, connectedQ; - return SparseMatrix_pseudo_diameter_unweighted(A, 0, FALSE, &end1, &end2, &connectedQ); -} - -int SparseMatrix_connectedQ(SparseMatrix A0){ - int root = 0, nlevel, *levelset_ptr = NULL, *levelset = NULL, *mask = NULL, connected; - SparseMatrix A = A0; - - if (!SparseMatrix_is_symmetric(A, TRUE)){ - if (A->m != A->n) return FALSE; - A = SparseMatrix_symmetrize(A, TRUE); - } - - SparseMatrix_level_sets(A, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - connected = (levelset_ptr[nlevel] == A->m); - - FREE(levelset_ptr); - FREE(levelset); - FREE(mask); - if (A != A0) SparseMatrix_delete(A); - - return connected; -} - - -void SparseMatrix_decompose_to_supervariables(SparseMatrix A, int *ncluster, int **cluster, int **clusterp){ - /* nodes for a super variable if they share exactly the same neighbors. This is know as modules in graph theory. - We work on columns only and columns with the same pattern are grouped as a super variable - */ - int *ia = A->ia, *ja = A->ja, n = A->n, m = A->m; - int *super = NULL, *nsuper = NULL, i, j, *mask = NULL, isup, *newmap, isuper; - - super = MALLOC(sizeof(int)*((size_t)(n))); - nsuper = MALLOC(sizeof(int)*((size_t)(n+1))); - mask = MALLOC(sizeof(int)*((size_t)n)); - newmap = MALLOC(sizeof(int)*((size_t)n)); - nsuper++; - - isup = 0; - for (i = 0; i < n; i++) super[i] = isup;/* every node belongs to super variable 0 by default */ - nsuper[0] = n; - for (i = 0; i < n; i++) mask[i] = -1; - isup++; - - for (i = 0; i < m; i++){ -#ifdef DEBUG_PRINT1 - printf("\n"); - printf("doing row %d-----\n",i+1); -#endif - for (j = ia[i]; j < ia[i+1]; j++){ - isuper = super[ja[j]]; - nsuper[isuper]--;/* those entries will move to a different super vars*/ - } - for (j = ia[i]; j < ia[i+1]; j++){ - isuper = super[ja[j]]; - if (mask[isuper] < i){ - mask[isuper] = i; - if (nsuper[isuper] == 0){/* all nodes in the isuper group exist in this row */ -#ifdef DEBUG_PRINT1 - printf("node %d keep super node id %d\n",ja[j]+1,isuper+1); -#endif - nsuper[isuper] = 1; - newmap[isuper] = isuper; - } else { - newmap[isuper] = isup; - nsuper[isup] = 1; -#ifdef DEBUG_PRINT1 - printf("make node %d into supernode %d\n",ja[j]+1,isup+1); -#endif - super[ja[j]] = isup++; - } - } else { -#ifdef DEBUG_PRINT1 - printf("node %d join super node %d\n",ja[j]+1,newmap[isuper]+1); -#endif - super[ja[j]] = newmap[isuper]; - nsuper[newmap[isuper]]++; - } - } -#ifdef DEBUG_PRINT1 - printf("nsuper="); - for (j = 0; j < isup; j++) printf("(%d,%d),",j+1,nsuper[j]); - printf("\n"); -#endif - } -#ifdef DEBUG_PRINT1 - for (i = 0; i < n; i++){ - printf("node %d is in supernode %d\n",i, super[i]); - } -#endif -#ifdef PRINT - fprintf(stderr, "n = %d, nsup = %d\n",n,isup); -#endif - /* now accumulate super nodes */ - nsuper--; - nsuper[0] = 0; - for (i = 0; i < isup; i++) nsuper[i+1] += nsuper[i]; - - *cluster = newmap; - for (i = 0; i < n; i++){ - isuper = super[i]; - (*cluster)[nsuper[isuper]++] = i; - } - for (i = isup; i > 0; i--) nsuper[i] = nsuper[i-1]; - nsuper[0] = 0; - *clusterp = nsuper; - *ncluster = isup; - -#ifdef PRINT - for (i = 0; i < *ncluster; i++){ - printf("{"); - for (j = (*clusterp)[i]; j < (*clusterp)[i+1]; j++){ - printf("%d, ",(*cluster)[j]); - } - printf("},"); - } - printf("\n"); -#endif - - FREE(mask); - FREE(super); - -} - -SparseMatrix SparseMatrix_get_augmented(SparseMatrix A){ - /* convert matrix A to an augmente dmatrix {{0,A},{A^T,0}} */ - int *irn = NULL, *jcn = NULL; - void *val = NULL; - int nz = A->nz, type = A->type; - int m = A->m, n = A->n, i, j; - SparseMatrix B = NULL; - if (!A) return NULL; - if (nz > 0){ - irn = MALLOC(sizeof(int)*((size_t)nz)*2); - jcn = MALLOC(sizeof(int)*((size_t)nz)*2); - } - - if (A->a){ - assert(A->size != 0 && nz > 0); - val = MALLOC(A->size*2*((size_t)nz)); - MEMCPY(val, A->a, A->size*((size_t)nz)); - MEMCPY((void*)(((char*) val) + ((size_t)nz)*A->size), A->a, A->size*((size_t)nz)); - } - - nz = 0; - for (i = 0; i < m; i++){ - for (j = (A->ia)[i]; j < (A->ia)[i+1]; j++){ - irn[nz] = i; - jcn[nz++] = (A->ja)[j] + m; - } - } - for (i = 0; i < m; i++){ - for (j = (A->ia)[i]; j < (A->ia)[i+1]; j++){ - jcn[nz] = i; - irn[nz++] = (A->ja)[j] + m; - } - } - - B = SparseMatrix_from_coordinate_arrays(nz, m + n, m + n, irn, jcn, val, type, A->size); - SparseMatrix_set_symmetric(B); - SparseMatrix_set_pattern_symmetric(B); - if (irn) FREE(irn); - if (jcn) FREE(jcn); - if (val) FREE(val); - return B; - -} - -SparseMatrix SparseMatrix_to_square_matrix(SparseMatrix A, int bipartite_options){ - SparseMatrix B; - switch (bipartite_options){ - case BIPARTITE_RECT: - if (A->m == A->n) return A; - break; - case BIPARTITE_PATTERN_UNSYM: - if (A->m == A->n && SparseMatrix_is_symmetric(A, TRUE)) return A; - break; - case BIPARTITE_UNSYM: - if (A->m == A->n && SparseMatrix_is_symmetric(A, FALSE)) return A; - break; - case BIPARTITE_ALWAYS: - break; - default: - assert(0); - } - B = SparseMatrix_get_augmented(A); - SparseMatrix_delete(A); - return B; -} - -SparseMatrix SparseMatrix_get_submatrix(SparseMatrix A, int nrow, int ncol, int *rindices, int *cindices){ - /* get the submatrix from row/columns indices[0,...,l-1]. - row rindices[i] will be the new row i - column cindices[i] will be the new column i. - if rindices = NULL, it is assume that 1 -- nrow is needed. Same for cindices/ncol. - */ - int nz = 0, i, j, *irn, *jcn, *ia = A->ia, *ja = A->ja, m = A->m, n = A->n; - int *cmask, *rmask; - void *v = NULL; - SparseMatrix B = NULL; - int irow = 0, icol = 0; - - if (nrow <= 0 || ncol <= 0) return NULL; - - - - rmask = MALLOC(sizeof(int)*((size_t)m)); - cmask = MALLOC(sizeof(int)*((size_t)n)); - for (i = 0; i < m; i++) rmask[i] = -1; - for (i = 0; i < n; i++) cmask[i] = -1; - - if (rindices){ - for (i = 0; i < nrow; i++) { - if (rindices[i] >= 0 && rindices[i] < m){ - rmask[rindices[i]] = irow++; - } - } - } else { - for (i = 0; i < nrow; i++) { - rmask[i] = irow++; - } - } - - if (cindices){ - for (i = 0; i < ncol; i++) { - if (cindices[i] >= 0 && cindices[i] < n){ - cmask[cindices[i]] = icol++; - } - } - } else { - for (i = 0; i < ncol; i++) { - cmask[i] = icol++; - } - } - - for (i = 0; i < m; i++){ - if (rmask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (cmask[ja[j]] < 0) continue; - nz++; - } - } - - - switch (A->type){ - case MATRIX_TYPE_REAL:{ - real *a = (real*) A->a; - real *val; - irn = MALLOC(sizeof(int)*((size_t)nz)); - jcn = MALLOC(sizeof(int)*((size_t)nz)); - val = MALLOC(sizeof(real)*((size_t)nz)); - - nz = 0; - for (i = 0; i < m; i++){ - if (rmask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (cmask[ja[j]] < 0) continue; - irn[nz] = rmask[i]; - jcn[nz] = cmask[ja[j]]; - val[nz++] = a[j]; - } - } - v = (void*) val; - break; - } - case MATRIX_TYPE_COMPLEX:{ - real *a = (real*) A->a; - real *val; - - irn = MALLOC(sizeof(int)*((size_t)nz)); - jcn = MALLOC(sizeof(int)*((size_t)nz)); - val = MALLOC(sizeof(real)*2*((size_t)nz)); - - nz = 0; - for (i = 0; i < m; i++){ - if (rmask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (cmask[ja[j]] < 0) continue; - irn[nz] = rmask[i]; - jcn[nz] = cmask[ja[j]]; - val[2*nz] = a[2*j]; - val[2*nz+1] = a[2*j+1]; - nz++; - } - } - v = (void*) val; - break; - } - case MATRIX_TYPE_INTEGER:{ - int *a = (int*) A->a; - int *val; - - irn = MALLOC(sizeof(int)*((size_t)nz)); - jcn = MALLOC(sizeof(int)*((size_t)nz)); - val = MALLOC(sizeof(int)*((size_t)nz)); - - nz = 0; - for (i = 0; i < m; i++){ - if (rmask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (cmask[ja[j]] < 0) continue; - irn[nz] = rmask[i]; - jcn[nz] = cmask[ja[j]]; - val[nz] = a[j]; - nz++; - } - } - v = (void*) val; - break; - } - case MATRIX_TYPE_PATTERN: - irn = MALLOC(sizeof(int)*((size_t)nz)); - jcn = MALLOC(sizeof(int)*((size_t)nz)); - nz = 0; - for (i = 0; i < m; i++){ - if (rmask[i] < 0) continue; - for (j = ia[i]; j < ia[i+1]; j++){ - if (cmask[ja[j]] < 0) continue; - irn[nz] = rmask[i]; - jcn[nz++] = cmask[ja[j]]; - } - } - break; - case MATRIX_TYPE_UNKNOWN: - FREE(rmask); - FREE(cmask); - return NULL; - default: - FREE(rmask); - FREE(cmask); - return NULL; - } - - B = SparseMatrix_from_coordinate_arrays(nz, nrow, ncol, irn, jcn, v, A->type, A->size); - FREE(cmask); - FREE(rmask); - FREE(irn); - FREE(jcn); - if (v) FREE(v); - - - return B; - -} - -SparseMatrix SparseMatrix_exclude_submatrix(SparseMatrix A, int nrow, int ncol, int *rindices, int *cindices){ - /* get a submatrix by excluding rows and columns */ - int *r, *c, nr, nc, i; - SparseMatrix B; - - if (nrow <= 0 && ncol <= 0) return A; - - r = MALLOC(sizeof(int)*((size_t)A->m)); - c = MALLOC(sizeof(int)*((size_t)A->n)); - - for (i = 0; i < A->m; i++) r[i] = i; - for (i = 0; i < A->n; i++) c[i] = i; - for (i = 0; i < nrow; i++) { - if (rindices[i] >= 0 && rindices[i] < A->m){ - r[rindices[i]] = -1; - } - } - for (i = 0; i < ncol; i++) { - if (cindices[i] >= 0 && cindices[i] < A->n){ - c[cindices[i]] = -1; - } - } - - nr = nc = 0; - for (i = 0; i < A->m; i++) { - if (r[i] > 0) r[nr++] = r[i]; - } - for (i = 0; i < A->n; i++) { - if (c[i] > 0) c[nc++] = c[i]; - } - - B = SparseMatrix_get_submatrix(A, nr, nc, r, c); - - FREE(r); - FREE(c); - return B; - -} - -SparseMatrix SparseMatrix_largest_component(SparseMatrix A){ - SparseMatrix B; - int ncomp; - int *comps = NULL; - int *comps_ptr = NULL; - int i; - int nmax, imax = 0; - - if (!A) return NULL; - A = SparseMatrix_to_square_matrix(A, BIPARTITE_RECT); - SparseMatrix_weakly_connected_components(A, &ncomp, &comps, &comps_ptr); - if (ncomp == 1) { - B = A; - } else { - nmax = 0; - for (i = 0; i < ncomp; i++){ - if (nmax < comps_ptr[i+1] - comps_ptr[i]){ - nmax = comps_ptr[i+1] - comps_ptr[i]; - imax = i; - } - } - B = SparseMatrix_get_submatrix(A, nmax, nmax, &comps[comps_ptr[imax]], &comps[comps_ptr[imax]]); - } - FREE(comps); - FREE(comps_ptr); - return B; - - -} - -SparseMatrix SparseMatrix_delete_sparse_columns(SparseMatrix A, int threshold, int **new2old, int *nnew, int inplace){ - /* delete sparse columns of threshold or less entries in A. After than number of columns will be nnew, and - the mapping from new matrix column to old matrix column is new2old. - On entry, if new2old is NULL, it is allocated. - */ - SparseMatrix B; - int *ia, *ja; - int *old2new; - int i; - old2new = MALLOC(sizeof(int)*((size_t)A->n)); - for (i = 0; i < A->n; i++) old2new[i] = -1; - - *nnew = 0; - B = SparseMatrix_transpose(A); - ia = B->ia; ja = B->ja; - for (i = 0; i < B->m; i++){ - if (ia[i+1] > ia[i] + threshold){ - (*nnew)++; - } - } - if (!(*new2old)) *new2old = MALLOC(sizeof(int)*((size_t)(*nnew))); - - *nnew = 0; - for (i = 0; i < B->m; i++){ - if (ia[i+1] > ia[i] + threshold){ - (*new2old)[*nnew] = i; - old2new[i] = *nnew; - (*nnew)++; - } - } - SparseMatrix_delete(B); - - if (inplace){ - B = A; - } else { - B = SparseMatrix_copy(A); - } - ia = B->ia; ja = B->ja; - for (i = 0; i < ia[B->m]; i++){ - assert(old2new[ja[i]] >= 0); - ja[i] = old2new[ja[i]]; - } - B->n = *nnew; - - FREE(old2new); - return B; - - -} - -SparseMatrix SparseMatrix_delete_empty_columns(SparseMatrix A, int **new2old, int *nnew, int inplace){ - return SparseMatrix_delete_sparse_columns(A, 0, new2old, nnew, inplace); -} - -SparseMatrix SparseMatrix_set_entries_to_real_one(SparseMatrix A){ - real *a; - int i; - - if (A->a) FREE(A->a); - A->a = MALLOC(sizeof(real)*((size_t)A->nz)); - a = (real*) (A->a); - for (i = 0; i < A->nz; i++) a[i] = 1.; - A->type = MATRIX_TYPE_REAL; - A->size = sizeof(real); - return A; - -} - -SparseMatrix SparseMatrix_complement(SparseMatrix A, int undirected){ - /* find the complement graph A^c, such that {i,h}\in E(A_c) iff {i,j} \notin E(A). Only structural matrix is returned. */ - SparseMatrix B = A; - int *ia, *ja; - int m = A->m, n = A->n; - int *mask, nz = 0; - int *irn, *jcn; - int i, j; - - if (undirected) B = SparseMatrix_symmetrize(A, TRUE); - assert(m == n); - - ia = B->ia; ja = B->ja; - mask = MALLOC(sizeof(int)*((size_t)n)); - irn = MALLOC(sizeof(int)*(((size_t)n)*((size_t)n) - ((size_t)A->nz))); - jcn = MALLOC(sizeof(int)*(((size_t)n)*((size_t)n) - ((size_t)A->nz))); - - for (i = 0; i < n; i++){ - mask[i] = -1; - } - - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - mask[ja[j]] = i; - } - for (j = 0; j < n; j++){ - if (mask[j] != i){ - irn[nz] = i; - jcn[nz++] = j; - } - } - } - - if (B != A) SparseMatrix_delete(B); - B = SparseMatrix_from_coordinate_arrays(nz, m, n, irn, jcn, NULL, MATRIX_TYPE_PATTERN, 0); - FREE(irn); - FREE(jcn); - return B; -} - -int SparseMatrix_k_centers(SparseMatrix D0, int weighted, int K, int root, int **centers, int centering, real **dist0){ - /* - Input: - D: the graph. If weighted, the entry values is used. - weighted: whether to treat the graph as weighted - K: the number of centers - root: the start node to find the k center. - centering: whether the distance should be centered so that sum_k dist[n*k+i] = 0 - Output: - centers: the list of nodes that form the k-centers. If centers = NULL on input, it will be allocated. - dist: of dimension k*n, dist[k*n: (k+1)*n) gives the distance of every node to the k-th center. - return: flag. if not zero, the graph is not connected, or out of memory. - */ - SparseMatrix D = D0; - int m = D->m, n = D->n; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - int aggressive = FALSE; - int connectedQ, end1, end2; - enum {K_CENTER_DISCONNECTED = 1, K_CENTER_MEM}; - real *dist_min = NULL, *dist_sum = NULL, dmax, dsum; - real *dist = NULL; - int nlist, *list = NULL; - int flag = 0, i, j, k, nlevel; - int check_connected = FALSE; - - if (!SparseMatrix_is_symmetric(D, FALSE)){ - D = SparseMatrix_symmetrize(D, FALSE); - } - - assert(m == n); - - dist_min = MALLOC(sizeof(real)*n); - dist_sum = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) dist_min[i] = -1; - for (i = 0; i < n; i++) dist_sum[i] = 0; - if (!(*centers)) *centers = MALLOC(sizeof(int)*K); - if (!(*dist0)) *dist0 = MALLOC(sizeof(real)*K*n); - if (!weighted){ - dist = MALLOC(sizeof(real)*n); - SparseMatrix_pseudo_diameter_unweighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (check_connected && !connectedQ) { - flag = K_CENTER_DISCONNECTED; - goto RETURN; - } - root = end1; - for (k = 0; k < K; k++){ - (*centers)[k] = root; - // fprintf(stderr,"k = %d, root = %d\n",k, root+1); - SparseMatrix_level_sets(D, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - if (check_connected) assert(levelset_ptr[nlevel] == n); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - (*dist0)[k*n+levelset[j]] = i; - if (k == 0){ - dist_min[levelset[j]] = i; - } else { - dist_min[levelset[j]] = MIN(dist_min[levelset[j]], i); - } - dist_sum[levelset[j]] += i; - } - } - - /* root = argmax_i min_roots dist(i, roots) */ - dmax = dist_min[0]; - dsum = dist_sum[0]; - root = 0; - for (i = 0; i < n; i++) { - if (!check_connected && dist_min[i] < 0) continue;/* if the graph is disconnected, then we can not count on every node to be in level set. - Usee dist_min<0 to identify those not in level set */ - if (dmax < dist_min[i] || (dmax == dist_min[i] && dsum < dist_sum[i])){/* tie break with avg dist */ - dmax = dist_min[i]; - dsum = dist_sum[i]; - root = i; - } - } - } - } else { - SparseMatrix_pseudo_diameter_weighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (check_connected && !connectedQ) return K_CENTER_DISCONNECTED; - root = end1; - list = MALLOC(sizeof(int)*n); - - for (k = 0; k < K; k++){ - //fprintf(stderr,"k = %d, root = %d\n",k, root+1); - (*centers)[k] = root; - dist = &((*dist0)[k*n]); - flag = Dijkstra(D, root, dist, &nlist, list, &dmax); - if (flag){ - flag = K_CENTER_MEM; - goto RETURN; - } - if (check_connected) assert(nlist == n); - for (i = 0; i < n; i++){ - if (k == 0){ - dist_min[i] = dist[i]; - } else { - dist_min[i] = MIN(dist_min[i], dist[i]); - } - dist_sum[i] += dist[i]; - } - - /* root = argmax_i min_roots dist(i, roots) */ - dmax = dist_min[0]; - dsum = dist_sum[0]; - root = 0; - for (i = 0; i < n; i++) { - if (!check_connected && dist_min[i] < 0) continue;/* if the graph is disconnected, then we can not count on every node to be in level set. - Usee dist_min<0 to identify those not in level set */ - if (dmax < dist_min[i] || (dmax == dist_min[i] && dsum < dist_sum[i])){/* tie break with avg dist */ - dmax = dist_min[i]; - dsum = dist_sum[i]; - root = i; - } - } - } - dist = NULL; - } - - if (centering){ - for (i = 0; i < n; i++) dist_sum[i] /= k; - for (k = 0; k < K; k++){ - for (i = 0; i < n; i++){ - (*dist0)[k*n+i] -= dist_sum[i]; - } - } - } - - RETURN: - if (levelset_ptr) FREE(levelset_ptr); - if (levelset) FREE(levelset); - if (mask) FREE(mask); - - if (D != D0) SparseMatrix_delete(D); - if (dist) FREE(dist); - if (dist_min) FREE(dist_min); - if (dist_sum) FREE(dist_sum); - if (list) FREE(list); - return flag; - -} - - - -int SparseMatrix_k_centers_user(SparseMatrix D0, int weighted, int K, int *centers_user, int centering, real **dist0){ - /* - Input: - D: the graph. If weighted, the entry values is used. - weighted: whether to treat the graph as weighted - K: the number of centers - root: the start node to find the k center. - centering: whether the distance should be centered so that sum_k dist[n*k+i] = 0 - centers_user: the list of nodes that form the k-centers, GIVEN BY THE USER - Output: - dist: of dimension k*n, dist[k*n: (k+1)*n) gives the distance of every node to the k-th center. - return: flag. if not zero, the graph is not connected, or out of memory. - */ - SparseMatrix D = D0; - int m = D->m, n = D->n; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - int aggressive = FALSE; - int connectedQ, end1, end2; - enum {K_CENTER_DISCONNECTED = 1, K_CENTER_MEM}; - real *dist_min = NULL, *dist_sum = NULL, dmax; - real *dist = NULL; - int nlist, *list = NULL; - int flag = 0, i, j, k, nlevel; - int root; - - if (!SparseMatrix_is_symmetric(D, FALSE)){ - D = SparseMatrix_symmetrize(D, FALSE); - } - - assert(m == n); - - dist_min = MALLOC(sizeof(real)*n); - dist_sum = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) dist_sum[i] = 0; - if (!(*dist0)) *dist0 = MALLOC(sizeof(real)*K*n); - if (!weighted){ - dist = MALLOC(sizeof(real)*n); - root = centers_user[0]; - SparseMatrix_pseudo_diameter_unweighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (!connectedQ) { - flag = K_CENTER_DISCONNECTED; - goto RETURN; - } - for (k = 0; k < K; k++){ - root = centers_user[k]; - SparseMatrix_level_sets(D, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - assert(levelset_ptr[nlevel] == n); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - (*dist0)[k*n+levelset[j]] = i; - if (k == 0){ - dist_min[levelset[j]] = i; - } else { - dist_min[levelset[j]] = MIN(dist_min[levelset[j]], i); - } - dist_sum[levelset[j]] += i; - } - } - - } - } else { - root = centers_user[0]; - SparseMatrix_pseudo_diameter_weighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (!connectedQ) return K_CENTER_DISCONNECTED; - list = MALLOC(sizeof(int)*n); - - for (k = 0; k < K; k++){ - root = centers_user[k]; - // fprintf(stderr,"k = %d, root = %d\n",k, root+1); - dist = &((*dist0)[k*n]); - flag = Dijkstra(D, root, dist, &nlist, list, &dmax); - if (flag){ - flag = K_CENTER_MEM; - dist = NULL; - goto RETURN; - } - assert(nlist == n); - for (i = 0; i < n; i++){ - if (k == 0){ - dist_min[i] = dist[i]; - } else { - dist_min[i] = MIN(dist_min[i], dist[i]); - } - dist_sum[i] += dist[i]; - } - - } - dist = NULL; - } - - if (centering){ - for (i = 0; i < n; i++) dist_sum[i] /= k; - for (k = 0; k < K; k++){ - for (i = 0; i < n; i++){ - (*dist0)[k*n+i] -= dist_sum[i]; - } - } - } - - RETURN: - if (levelset_ptr) FREE(levelset_ptr); - if (levelset) FREE(levelset); - if (mask) FREE(mask); - - if (D != D0) SparseMatrix_delete(D); - if (dist) FREE(dist); - if (dist_min) FREE(dist_min); - if (dist_sum) FREE(dist_sum); - if (list) FREE(list); - return flag; - -} - - - - -SparseMatrix SparseMatrix_from_dense(int m, int n, real *x){ - /* wrap a mxn matrix into a sparse matrix. the {i,j} entry of the matrix is in x[i*n+j], 0<=iia[0] = 0; - for (i = 1; i <= m; i++) (A->ia)[i] = (A->ia)[i-1] + n; - - ja = A->ja; - a = (real*) A->a; - for (i = 0; i < m; i++){ - for (j = 0; j < n; j++) { - ja[j] = j; - a[j] = x[i*n+j]; - } - ja += n; a += j; - } - A->nz = m*n; - return A; - -} - - -int SparseMatrix_distance_matrix(SparseMatrix D0, int weighted, real **dist0){ - /* - Input: - D: the graph. If weighted, the entry values is used. - weighted: whether to treat the graph as weighted - Output: - dist: of dimension nxn, dist[i*n+j] gives the distance of node i to j. - return: flag. if not zero, the graph is not connected, or out of memory. - */ - SparseMatrix D = D0; - int m = D->m, n = D->n; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - real *dist = NULL; - int nlist, *list = NULL; - int flag = 0, i, j, k, nlevel; - real dmax; - - if (!SparseMatrix_is_symmetric(D, FALSE)){ - D = SparseMatrix_symmetrize(D, FALSE); - } - - assert(m == n); - - if (!(*dist0)) *dist0 = MALLOC(sizeof(real)*n*n); - for (i = 0; i < n*n; i++) (*dist0)[i] = -1; - - if (!weighted){ - for (k = 0; k < n; k++){ - SparseMatrix_level_sets(D, k, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - assert(levelset_ptr[nlevel] == n); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - (*dist0)[k*n+levelset[j]] = i; - } - } - } - } else { - list = MALLOC(sizeof(int)*n); - for (k = 0; k < n; k++){ - dist = &((*dist0)[k*n]); - flag = Dijkstra(D, k, dist, &nlist, list, &dmax); - } - } - - if (levelset_ptr) FREE(levelset_ptr); - if (levelset) FREE(levelset); - if (mask) FREE(mask); - - if (D != D0) SparseMatrix_delete(D); - if (list) FREE(list); - return flag; - -} - -SparseMatrix SparseMatrix_distance_matrix_k_centers(int K, SparseMatrix D, int weighted){ - /* return a sparse matrix whichj represent teh k-center and distance from every node to them. - The matrix will have k*n entries - */ - int flag; - real *dist = NULL; - int m = D->m, n = D->n; - int root = 0; - int *centers = NULL; - real d; - int i, j, center; - SparseMatrix B, C; - int centering = FALSE; - - assert(m == n); - - B = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - - flag = SparseMatrix_k_centers(D, weighted, K, root, ¢ers, centering, &dist); - assert(!flag); - - for (i = 0; i < K; i++){ - center = centers[i]; - for (j = 0; j < n; j++){ - d = dist[i*n + j]; - B = SparseMatrix_coordinate_form_add_entries(B, 1, ¢er, &j, &d); - B = SparseMatrix_coordinate_form_add_entries(B, 1, &j, ¢er, &d); - } - } - - C = SparseMatrix_from_coordinate_format(B); - SparseMatrix_delete(B); - - FREE(centers); - FREE(dist); - return C; -} - -SparseMatrix SparseMatrix_distance_matrix_khops(int khops, SparseMatrix D0, int weighted){ - /* - Input: - khops: number of hops allow. If khops < 0, this will give a dense distances. Otherwise it gives a sparse matrix that represent the k-neighborhood graph - D: the graph. If weighted, the entry values is used. - weighted: whether to treat the graph as weighted - Output: - DD: of dimension nxn. DD[i,j] gives the shortest path distance, subject to the fact that the short oath must be of <= khops. - return: flag. if not zero, the graph is not connected, or out of memory. - */ - SparseMatrix D = D0, B, C; - int m = D->m, n = D->n; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - real *dist = NULL; - int nlist, *list = NULL; - int flag = 0, i, j, k, itmp, nlevel; - real dmax, dtmp; - - if (!SparseMatrix_is_symmetric(D, FALSE)){ - D = SparseMatrix_symmetrize(D, FALSE); - } - - assert(m == n); - - B = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - - if (!weighted){ - for (k = 0; k < n; k++){ - SparseMatrix_level_sets_khops(khops, D, k, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - itmp = levelset[j]; dtmp = i; - if (k != itmp) B = SparseMatrix_coordinate_form_add_entries(B, 1, &k, &itmp, &dtmp); - } - } - } - } else { - list = MALLOC(sizeof(int)*n); - dist = MALLOC(sizeof(real)*n); - /* - Dijkstra_khops(khops, D, 60, dist, &nlist, list, &dmax); - for (j = 0; j < nlist; j++){ - fprintf(stderr,"{%d,%d}=%f,",60,list[j],dist[list[j]]); - } - fprintf(stderr,"\n"); - Dijkstra_khops(khops, D, 94, dist, &nlist, list, &dmax); - for (j = 0; j < nlist; j++){ - fprintf(stderr,"{%d,%d}=%f,",94,list[j],dist[list[j]]); - } - fprintf(stderr,"\n"); - exit(1); - - */ - - for (k = 0; k < n; k++){ - SparseMatrix_level_sets_khops(khops, D, k, &nlevel, &levelset_ptr, &levelset, &mask, FALSE); - assert(nlevel-1 <= khops);/* the first level is the root */ - flag = Dijkstra_masked(D, k, dist, &nlist, list, &dmax, mask); - assert(!flag); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - assert(mask[levelset[j]] == i+1); - mask[levelset[j]] = -1; - } - } - for (j = 0; j < nlist; j++){ - itmp = list[j]; dtmp = dist[itmp]; - if (k != itmp) B = SparseMatrix_coordinate_form_add_entries(B, 1, &k, &itmp, &dtmp); - } - } - } - - C = SparseMatrix_from_coordinate_format(B); - SparseMatrix_delete(B); - - if (levelset_ptr) FREE(levelset_ptr); - if (levelset) FREE(levelset); - if (mask) FREE(mask); - if (dist) FREE(dist); - - if (D != D0) SparseMatrix_delete(D); - if (list) FREE(list); - /* I can not find a reliable way to make the matrix symmetric. Right now I use a mask array to - limit consider of only nodes with in k hops, but even this is not symmetric. e.g., - . 10 10 10 10 - .A---B---C----D----E - . 2 | | 2 - . G----F - . 2 - If we set hops = 4, and from A, it can not see F (which is 5 hops), hence distance(A,E) =40 - but from E, it can see all nodes (all within 4 hops), so distance(E, A)=36. - . - may be there is a better way to ensure symmetric, but for now we just symmetrize it - */ - D = SparseMatrix_symmetrize(C, FALSE); - SparseMatrix_delete(C); - return D; - -} - -#if PQ -void SparseMatrix_kcore_decomposition(SparseMatrix A, int *coreness_max0, int **coreness_ptr0, int **coreness_list0){ - /* give an undirected graph A, find the k-coreness of each vertex - A: a graph. Will be made undirected and self loop removed - coreness_max: max core number. - coreness_ptr: array of size (coreness_max + 2), element [corness_ptr[i], corness_ptr[i+1]) - . of array coreness_list gives the vertices with core i, i <= coreness_max - coreness_list: array of size n = A->m - */ - SparseMatrix B; - int i, j, *ia, *ja, n = A->m, nz, istatus, neighb; - PriorityQueue pq = NULL; - int gain, deg, k, deg_max = 0, deg_old; - int *coreness_ptr, *coreness_list, coreness_now; - int *mask; - - assert(A->m == A->n); - B = SparseMatrix_symmetrize(A, FALSE); - B = SparseMatrix_remove_diagonal(B); - ia = B->ia; - ja = B->ja; - - mask = MALLOC(sizeof(int)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - pq = PriorityQueue_new(n, n-1); - for (i = 0; i < n; i++){ - deg = ia[i+1] - ia[i]; - deg_max = MAX(deg_max, deg); - gain = n - 1 - deg; - pq = PriorityQueue_push(pq, i, gain); - //fprintf(stderr,"insert %d with gain %d\n",i, gain); - } - - - coreness_ptr = MALLOC(sizeof(int)*(deg_max+2)); - coreness_list = MALLOC(sizeof(int)*n); - deg_old = 0; - coreness_ptr[deg_old] = 0; - coreness_now = 0; - - nz = 0; - while (PriorityQueue_pop(pq, &k, &gain)){ - deg = (n-1) - gain; - if (deg > deg_old) { - //fprintf(stderr,"deg = %d, cptr[%d--%d]=%d\n",deg, deg_old + 1, deg, nz); - for (j = deg_old + 1; j <= deg; j++) coreness_ptr[j] = nz; - coreness_now = deg; - deg_old = deg; - } - coreness_list[nz++] = k; - mask[k] = coreness_now; - //fprintf(stderr,"=== \nremove node %d with gain %d, mask with %d, nelement=%d\n",k, gain, coreness_now, pq->count); - for (j = ia[k]; j < ia[k+1]; j++){ - neighb = ja[j]; - if (mask[neighb] < 0){ - gain = PriorityQueue_get_gain(pq, neighb); - //fprintf(stderr,"update node %d with gain %d, nelement=%d\n",neighb, gain+1, pq->count); - istatus = PriorityQueue_remove(pq, neighb); - assert(istatus != 0); - pq = PriorityQueue_push(pq, neighb, gain + 1); - } - } - } - coreness_ptr[coreness_now + 1] = nz; - - *coreness_max0 = coreness_now; - *coreness_ptr0 = coreness_ptr; - *coreness_list0 = coreness_list; - - if (Verbose){ - for (i = 0; i <= coreness_now; i++){ - if (coreness_ptr[i+1] - coreness_ptr[i] > 0){ - fprintf(stderr,"num_in_core[%d] = %d: ",i, coreness_ptr[i+1] - coreness_ptr[i]); -#if 0 - for (j = coreness_ptr[i]; j < coreness_ptr[i+1]; j++){ - fprintf(stderr,"%d,",coreness_list[j]); - } -#endif - fprintf(stderr,"\n"); - } - } - } - if (Verbose) - - - if (B != A) SparseMatrix_delete(B); - FREE(mask); -} - -void SparseMatrix_kcoreness(SparseMatrix A, int **coreness){ - - int coreness_max, *coreness_ptr = NULL, *coreness_list = NULL, i, j; - - if (!(*coreness)) coreness = MALLOC(sizeof(int)*A->m); - - SparseMatrix_kcore_decomposition(A, &coreness_max, &coreness_ptr, &coreness_list); - - for (i = 0; i <= coreness_max; i++){ - for (j = coreness_ptr[i]; j < coreness_ptr[i+1]; j++){ - (*coreness)[coreness_list[j]] = i; - } - } - - assert(coreness_ptr[coreness_ptr[coreness_max+1]] = A->m); - -} - - - - -void SparseMatrix_khair_decomposition(SparseMatrix A, int *hairness_max0, int **hairness_ptr0, int **hairness_list0){ - /* define k-hair as the largest subgraph of the graph such that the degree of each node is <=k. - Give an undirected graph A, find the k-hairness of each vertex - A: a graph. Will be made undirected and self loop removed - hairness_max: max hair number. - hairness_ptr: array of size (hairness_max + 2), element [corness_ptr[i], corness_ptr[i+1]) - . of array hairness_list gives the vertices with hair i, i <= hairness_max - hairness_list: array of size n = A->m - */ - SparseMatrix B; - int i, j, jj, *ia, *ja, n = A->m, nz, istatus, neighb; - PriorityQueue pq = NULL; - int gain, deg = 0, k, deg_max = 0, deg_old; - int *hairness_ptr, *hairness_list, l; - int *mask; - - assert(A->m == A->n); - B = SparseMatrix_symmetrize(A, FALSE); - B = SparseMatrix_remove_diagonal(B); - ia = B->ia; - ja = B->ja; - - mask = MALLOC(sizeof(int)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - pq = PriorityQueue_new(n, n-1); - for (i = 0; i < n; i++){ - deg = ia[i+1] - ia[i]; - deg_max = MAX(deg_max, deg); - gain = deg; - pq = PriorityQueue_push(pq, i, gain); - } - - - hairness_ptr = MALLOC(sizeof(int)*(deg_max+2)); - hairness_list = MALLOC(sizeof(int)*n); - deg_old = deg_max; - hairness_ptr[deg_old + 1] = n; - - nz = n - 1; - while (PriorityQueue_pop(pq, &k, &gain)){ - deg = gain; - mask[k] = deg; - - if (deg < deg_old) { - //fprintf(stderr,"cptr[%d--%d]=%d\n",deg, deg_old + 1, nz); - for (j = deg_old; j >= deg; j--) hairness_ptr[j] = nz + 1; - - for (jj = hairness_ptr[deg_old]; jj < hairness_ptr [deg_old+1]; jj++){ - l = hairness_list[jj]; - //fprintf(stderr,"=== \nremove node hairness_list[%d]= %d, mask with %d, nelement=%d\n",jj, l, deg_old, pq->count); - for (j = ia[l]; j < ia[l+1]; j++){ - neighb = ja[j]; - if (neighb == k) deg--;/* k was masked. But we do need to update ts degree */ - if (mask[neighb] < 0){ - gain = PriorityQueue_get_gain(pq, neighb); - //fprintf(stderr,"update node %d with deg %d, nelement=%d\n",neighb, gain-1, pq->count); - istatus = PriorityQueue_remove(pq, neighb); - assert(istatus != 0); - pq = PriorityQueue_push(pq, neighb, gain - 1); - } - } - } - mask[k] = 0;/* because a bunch of nodes are removed, k may not be the best node! Unmask */ - pq = PriorityQueue_push(pq, k, deg); - PriorityQueue_pop(pq, &k, &gain); - deg = gain; - mask[k] = deg; - deg_old = deg; - } - //fprintf(stderr,"-------- node with highes deg is %d, deg = %d\n",k,deg); - //fprintf(stderr,"hairness_lisrt[%d]=%d, mask[%d] = %d\n",nz,k, k, deg); - assert(deg == deg_old); - hairness_list[nz--] = k; - } - hairness_ptr[deg] = nz + 1; - assert(nz + 1 == 0); - for (i = 0; i < deg; i++) hairness_ptr[i] = 0; - - *hairness_max0 = deg_max; - *hairness_ptr0 = hairness_ptr; - *hairness_list0 = hairness_list; - - if (Verbose){ - for (i = 0; i <= deg_max; i++){ - if (hairness_ptr[i+1] - hairness_ptr[i] > 0){ - fprintf(stderr,"num_in_hair[%d] = %d: ",i, hairness_ptr[i+1] - hairness_ptr[i]); -#if 0 - for (j = hairness_ptr[i]; j < hairness_ptr[i+1]; j++){ - fprintf(stderr,"%d,",hairness_list[j]); - } -#endif - fprintf(stderr,"\n"); - } - } - } - if (Verbose) - - - if (B != A) SparseMatrix_delete(B); - FREE(mask); -} - - -void SparseMatrix_khairness(SparseMatrix A, int **hairness){ - - int hairness_max, *hairness_ptr = NULL, *hairness_list = NULL, i, j; - - if (!(*hairness)) hairness = MALLOC(sizeof(int)*A->m); - - SparseMatrix_khair_decomposition(A, &hairness_max, &hairness_ptr, &hairness_list); - - for (i = 0; i <= hairness_max; i++){ - for (j = hairness_ptr[i]; j < hairness_ptr[i+1]; j++){ - (*hairness)[hairness_list[j]] = i; - } - } - - assert(hairness_ptr[hairness_ptr[hairness_max+1]] = A->m); - -} -#endif - -void SparseMatrix_page_rank(SparseMatrix A, real teleport_probablity, int weighted, real epsilon, real **page_rank){ - /* A(i,j)/Sum_k A(i,k) gives the probablity of the random surfer walking from i to j - A: n x n square matrix - weighted: whether to use the wedge weights (matrix entries) - page_rank: array of length n. If *page_rank was null on entry, will be assigned. - - */ - int n = A->n; - int i, j; - int *ia = A->ia, *ja = A->ja; - real *x, *y, *diag, res; - real *a = NULL; - int iter = 0; - - assert(A->m == n); - assert(teleport_probablity >= 0); - - if (weighted){ - switch (A->type){ - case MATRIX_TYPE_REAL: - a = (real*) A->a; - break; - case MATRIX_TYPE_COMPLEX:/* take real part */ - a = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) a[i] = ((real*) A->a)[2*i]; - break; - case MATRIX_TYPE_INTEGER: - a = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) a[i] = ((int*) A->a)[i]; - break; - case MATRIX_TYPE_PATTERN: - case MATRIX_TYPE_UNKNOWN: - default: - weighted = FALSE; - break; - } - } - - - if (!(*page_rank)) *page_rank = MALLOC(sizeof(real)*n); - x = *page_rank; - - diag = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) diag[i] = 0; - y = MALLOC(sizeof(real)*n); - - for (i = 0; i < n; i++) x[i] = 1./n; - - /* find the column sum */ - if (weighted){ - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - diag[i] += ABS(a[j]); - } - } - } else { - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - diag[i]++; - } - } - } - for (i = 0; i < n; i++) diag[i] = 1./MAX(diag[i], MACHINEACC); - - /* iterate */ - do { - iter++; - for (i = 0; i < n; i++) y[i] = 0; - if (weighted){ - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - y[ja[j]] += a[j]*x[i]*diag[i]; - } - } - } else { - for (i = 0; i < n; i++){ - for (j = ia[i]; j < ia[i+1]; j++){ - if (ja[j] == i) continue; - y[ja[j]] += x[i]*diag[i]; - } - } - } - for (i = 0; i < n; i++){ - y[i] = (1-teleport_probablity)*y[i] + teleport_probablity/n; - } - - /* - fprintf(stderr,"\n============\nx="); - for (i = 0; i < n; i++) fprintf(stderr,"%f,",x[i]); - fprintf(stderr,"\nx="); - for (i = 0; i < n; i++) fprintf(stderr,"%f,",y[i]); - fprintf(stderr,"\n"); - */ - - res = 0; - for (i = 0; i < n; i++) res += ABS(x[i] - y[i]); - if (Verbose) fprintf(stderr,"page rank iter -- %d, res = %f\n",iter, res); - MEMCPY(x, y, sizeof(real)*n); - } while (res > epsilon); - - FREE(y); - FREE(diag); - if (a && a != A->a) FREE(a); -} diff --git a/internal/ccall/sparse/SparseMatrix.h b/internal/ccall/sparse/SparseMatrix.h deleted file mode 100644 index 0a6dacb..0000000 --- a/internal/ccall/sparse/SparseMatrix.h +++ /dev/null @@ -1,184 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ -#ifndef SPARSEMATRIX_H -#define SPARSEMATRIX_H - -#include -#include - -#define SYMMETRY_EPSILON 0.0000001 -enum {FORMAT_CSC, FORMAT_CSR, FORMAT_COORD}; -enum {UNMASKED = -10, MASKED = 1}; -enum {MATRIX_PATTERN_SYMMETRIC = 1<<0, MATRIX_SYMMETRIC = 1<<1, MATRIX_SKEW = 1<<2, MATRIX_HERMITIAN = 1<<3, MATRIX_UNDIRECTED = 1<<4}; -enum {BIPARTITE_RECT = 0, BIPARTITE_PATTERN_UNSYM, BIPARTITE_UNSYM, BIPARTITE_ALWAYS}; - - -struct SparseMatrix_struct { - int m; /* row dimension */ - int n; /* column dimension */ - int nz;/* The actual length used is nz, for CSR/CSC matrix this is the same as ia[n] */ - int nzmax; /* the current length of ja and a (if exists) allocated.*/ - int type; /* whether it is real/complex matrix, or pattern only */ - int *ia; /* row pointer for CSR format, or row indices for coordinate format. 0-based */ - int *ja; /* column indices. 0-based */ - void *a; /* entry values. If NULL, pattern matrix */ - int format;/* whether it is CSR, CSC, COORD. By default it is in CSR format */ - int property; /* pattern_symmetric/symmetric/skew/hermitian*/ - int size;/* size of each entry. This allows for general matrix where each entry is, say, a matrix itself */ -}; - -typedef struct SparseMatrix_struct* SparseMatrix; - -enum {MATRIX_TYPE_REAL = 1<<0, MATRIX_TYPE_COMPLEX = 1<<1, MATRIX_TYPE_INTEGER = 1<<2, MATRIX_TYPE_PATTERN = 1<<3, MATRIX_TYPE_UNKNOWN = 1<<4}; - -/* SparseMatrix_general is more general and allow elements to be - any data structure, not just real/int/complex etc */ -SparseMatrix SparseMatrix_new(int m, int n, int nz, int type, int format); -SparseMatrix SparseMatrix_general_new(int m, int n, int nz, int type, size_t sz, int format); - -/* this version sum repeated entries */ -SparseMatrix SparseMatrix_from_coordinate_format(SparseMatrix A); -/* what_to_sum is SUM_REPEATED_NONE, SUM_REPEATED_ALL, SUM_REPEATED_REAL_PART, SUM_REPEATED_IMAGINARY_PART, SUM_IMGINARY_KEEP_LAST_REAL*/ -SparseMatrix SparseMatrix_from_coordinate_format_not_compacted(SparseMatrix A, int what_to_sum); - -SparseMatrix SparseMatrix_from_coordinate_arrays(int nz, int m, int n, int *irn, int *jcn, void *val, int type, size_t sz); -SparseMatrix SparseMatrix_from_coordinate_arrays_not_compacted(int nz, int m, int n, int *irn, int *jcn, void *val, int type, size_t sz, int what_to_sum); - - -void SparseMatrix_print(char *, SparseMatrix A);/*print to stdout in Mathematica format*/ - -void SparseMatrix_export(FILE *f, SparseMatrix A);/* export into MM format except the header */ - -SparseMatrix SparseMatrix_import_binary(char *name); -SparseMatrix SparseMatrix_import_binary_fp(FILE *f);/* import into a preopenned file */ - -void SparseMatrix_export_binary(char *name, SparseMatrix A, int *flag); -void SparseMatrix_export_binary_fp(FILE *f, SparseMatrix A);/* export binary into a file preopened */ - -void SparseMatrix_delete(SparseMatrix A); - -SparseMatrix SparseMatrix_add(SparseMatrix A, SparseMatrix B); -SparseMatrix SparseMatrix_multiply(SparseMatrix A, SparseMatrix B); -SparseMatrix SparseMatrix_multiply3(SparseMatrix A, SparseMatrix B, SparseMatrix C); - -/* For complex matrix: - if what_to_sum = SUM_REPEATED_REAL_PART, we find entries {i,j,x + i y} and sum the x's if {i,j,Round(y)} are the same - if what_to_sum = SUM_REPEATED_IMAGINARY_PART, we find entries {i,j,x + i y} and sum the y's if {i,j,Round(x)} are the same - For other matrix, what_to_sum = SUM_REPEATED_REAL_PART is the same as what_to_sum = SUM_REPEATED_IMAGINARY_PART - or what_to_sum = SUM_REPEATED_ALL - if what_to_sum = SUM_IMGINARY_KEEP_LAST_REAL, we merge {i,j,R1,I1} and {i,j,R2,I2} into {i,j,R1+R2,I2}. Useful if I1 and I2 are time stamps, - . and we use this to indicate that a user watched R1+R2 seconds, last watch is I2. -*/ -enum {SUM_REPEATED_NONE = 0, SUM_REPEATED_ALL, SUM_REPEATED_REAL_PART, SUM_REPEATED_IMAGINARY_PART, SUM_IMGINARY_KEEP_LAST_REAL}; -SparseMatrix SparseMatrix_sum_repeat_entries(SparseMatrix A, int what_to_sum); -SparseMatrix SparseMatrix_coordinate_form_add_entries(SparseMatrix A, int nentries, int *irn, int *jcn, void *val); -int SparseMatrix_is_symmetric(SparseMatrix A, int test_pattern_symmetry_only); -SparseMatrix SparseMatrix_transpose(SparseMatrix A); -SparseMatrix SparseMatrix_symmetrize(SparseMatrix A, int pattern_symmetric_only); -SparseMatrix SparseMatrix_symmetrize_nodiag(SparseMatrix A, int pattern_symmetric_only); -void SparseMatrix_multiply_vector(SparseMatrix A, real *v, real **res, int transposed);/* if v = NULL, v is assumed to be {1,1,...,1}*/ -SparseMatrix SparseMatrix_remove_diagonal(SparseMatrix A); -SparseMatrix SparseMatrix_remove_upper(SparseMatrix A);/* remove diag and upper diag */ -SparseMatrix SparseMatrix_divide_row_by_degree(SparseMatrix A); -SparseMatrix SparseMatrix_get_real_adjacency_matrix_symmetrized(SparseMatrix A); /* symmetric, all entries to 1, diaginal removed */ -SparseMatrix SparseMatrix_normalize_to_rowsum1(SparseMatrix A);/* for real only! */ -void SparseMatrix_multiply_dense(SparseMatrix A, int ATranspose, real *v, int vTransposed, real **res, int res_transpose, int dim); -SparseMatrix SparseMatrix_apply_fun(SparseMatrix A, double (*fun)(double x));/* for real only! */ -SparseMatrix SparseMatrix_apply_fun_general(SparseMatrix A, void (*fun)(int i, int j, int n, double *x));/* for real and complex (n=2) */ -SparseMatrix SparseMatrix_copy(SparseMatrix A); -int SparseMatrix_has_diagonal(SparseMatrix A); -SparseMatrix SparseMatrix_normalize_by_row(SparseMatrix A);/* divide by max of each row */ -SparseMatrix SparseMatrix_crop(SparseMatrix A, real epsilon);/*remove any entry <= epsilon*/ -SparseMatrix SparseMatrix_scaled_by_vector(SparseMatrix A, real *v, int apply_to_row); -SparseMatrix SparseMatrix_multiply_by_scaler(SparseMatrix A, real s); -SparseMatrix SparseMatrix_make_undirected(SparseMatrix A);/* make it strictly low diag only, and set flag to undirected */ -int SparseMatrix_connectedQ(SparseMatrix A); -real SparseMatrix_pseudo_diameter_only(SparseMatrix A); -real SparseMatrix_pseudo_diameter_weighted(SparseMatrix A0, int root, int aggressive, int *end1, int *end2, int *connectedQ); /* assume real distances, unsymmetric matrix ill be symmetrized */ -real SparseMatrix_pseudo_diameter_unweighted(SparseMatrix A0, int root, int aggressive, int *end1, int *end2, int *connectedQ); /* assume unit edge length, unsymmetric matrix ill be symmetrized */ -void SparseMatrix_level_sets(SparseMatrix A, int root, int *nlevel, int **levelset_ptr, int **levelset, int **mask, int reintialize_mask); -void SparseMatrix_level_sets_khops(int khops, SparseMatrix A, int root, int *nlevel, int **levelset_ptr, int **levelset, int **mask, int reintialize_mask); -void SparseMatrix_weakly_connected_components(SparseMatrix A0, int *ncomp, int **comps, int **comps_ptr); -void SparseMatrix_decompose_to_supervariables(SparseMatrix A, int *ncluster, int **cluster, int **clusterp); -SparseMatrix SparseMatrix_get_submatrix(SparseMatrix A, int nrow, int ncol, int *rindices, int *cindices); -SparseMatrix SparseMatrix_exclude_submatrix(SparseMatrix A, int nrow, int ncol, int *rindices, int *cindices); - -SparseMatrix SparseMatrix_get_augmented(SparseMatrix A); - -/* bipartite_options: - BIPARTITE_RECT -- turn rectangular matrix into square), - BIPARTITE_PATTERN_UNSYM -- pattern unsummetric as bipartite - BIPARTITE_UNSYM -- unsymmetric as square - BIPARTITE_ALWAYS -- always as square -*/ -SparseMatrix SparseMatrix_to_square_matrix(SparseMatrix A, int bipartite_options); - -SparseMatrix SparseMatrix_largest_component(SparseMatrix A); - -/* columns with <= threhold entries are deleted */ -SparseMatrix SparseMatrix_delete_empty_columns(SparseMatrix A, int **new2old, int *nnew, int inplace); -SparseMatrix SparseMatrix_delete_sparse_columns(SparseMatrix A, int threshold, int **new2old, int *nnew, int inplace); - -SparseMatrix SparseMatrix_sort(SparseMatrix A); - -SparseMatrix SparseMatrix_set_entries_to_real_one(SparseMatrix A); - -SparseMatrix SparseMatrix_complement(SparseMatrix A, int undirected); - -int SparseMatrix_k_centers(SparseMatrix D, int weighted, int K, int root, - int **centers, int centering, real **dist); - -int SparseMatrix_k_centers_user(SparseMatrix D, int weighted, int K, - int *centers_user, int centering, real **dist); - -SparseMatrix SparseMatrix_distance_matrix_k_centers(int K, SparseMatrix D, int weighted); - -int SparseMatrix_distance_matrix(SparseMatrix A, int weighted, real **dist_matrix); -SparseMatrix SparseMatrix_distance_matrix_khops(int khops, SparseMatrix A, int weighted); -SparseMatrix SparseMatrix_distance_matrix_k_centers(int K, SparseMatrix D, int weighted); - -void SparseMatrix_kcoreness(SparseMatrix A, int **coreness);/* assign coreness to each node */ -void SparseMatrix_kcore_decomposition(SparseMatrix A, int *coreness_max0, int **coreness_ptr0, int **coreness_list0);/* return the decomposition */ - -void SparseMatrix_khairness(SparseMatrix A, int **hairness);/* assign hairness to each node */ -void SparseMatrix_khair_decomposition(SparseMatrix A, int *hairness_max0, int **hairness_ptr0, int **hairness_list0);/* return the decomposition */ - -SparseMatrix SparseMatrix_from_dense(int m, int n, real *x); - -void SparseMatrix_page_rank(SparseMatrix A, real teleport_probablity, int weighted, real epsilon, real **page_rank); - - -#define SparseMatrix_set_undirected(A) set_flag((A)->property, MATRIX_UNDIRECTED) -#define SparseMatrix_set_symmetric(A) set_flag((A)->property, MATRIX_SYMMETRIC) -#define SparseMatrix_set_pattern_symmetric(A) set_flag((A)->property, MATRIX_PATTERN_SYMMETRIC) -#define SparseMatrix_set_skew(A) set_flag((A)->property, MATRIX_SKEW) -#define SparseMatrix_set_hemitian(A) set_flag((A)->property, MATRIX_HERMITIAN) - - -#define SparseMatrix_clear_undirected(A) clear_flag((A)->property, MATRIX_UNDIRECTED) -#define SparseMatrix_clear_symmetric(A) clear_flag((A)->property, MATRIX_SYMMETRIC) -#define SparseMatrix_clear_pattern_symmetric(A) clear_flag((A)->property, MATRIX_PATTERN_SYMMETRIC) -#define SparseMatrix_clear_skew(A) clear_flag((A)->property, MATRIX_SKEW) -#define SparseMatrix_clear_hemitian(A) clear_flag((A)->property, MATRIX_HERMITIAN) - - -#define SparseMatrix_known_undirected(A) test_flag((A)->property, MATRIX_UNDIRECTED) -#define SparseMatrix_known_symmetric(A) test_flag((A)->property, MATRIX_SYMMETRIC) -#define SparseMatrix_known_strucural_symmetric(A) test_flag((A)->property, MATRIX_PATTERN_SYMMETRIC) -#define SparseMatrix_known_skew(A) test_flag((A)->property, MATRIX_SKEW) -#define SparseMatrix_known_hemitian(A) test_flag((A)->property, MATRIX_HERMITIAN) - - - - -#endif diff --git a/internal/ccall/sparse/clustering.c b/internal/ccall/sparse/clustering.c deleted file mode 100644 index b1dbba4..0000000 --- a/internal/ccall/sparse/clustering.c +++ /dev/null @@ -1,385 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#define STANDALONE -#include "general.h" -#include "SparseMatrix.h" -#include "clustering.h" - - - -static Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_init(SparseMatrix A, int level){ - Multilevel_Modularity_Clustering grid; - int n = A->n, i, j; - - assert(A->type == MATRIX_TYPE_REAL); - assert(SparseMatrix_is_symmetric(A, FALSE)); - - if (!A) return NULL; - assert(A->m == n); - grid = MALLOC(sizeof(struct Multilevel_Modularity_Clustering_struct)); - grid->level = level; - grid->n = n; - grid->A = A; - grid->P = NULL; - grid->R = NULL; - grid->next = NULL; - grid->prev = NULL; - grid->delete_top_level_A = FALSE; - grid->matching = MALLOC(sizeof(real)*(n)); - grid->deg = NULL; - grid->agglomerate_regardless = FALSE; - - if (level == 0){ - real modularity = 0; - int *ia = A->ia, *ja = A->ja, n = A->n; - real deg_total = 0; - real *deg, *a = (real*) (A->a); - real *indeg; - - grid->deg_total = 0.; - grid->deg = MALLOC(sizeof(real)*(n)); - deg = grid->deg; - - indeg = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++){ - deg[i] = 0; - indeg[i] = 0.; - for (j = ia[i]; j < ia[i+1]; j++){ - deg[i] += a[j]; - if (ja[j] == i) indeg[i] = a[j]; - } - deg_total += deg[i]; - } - if (deg_total == 0) deg_total = 1; - for (i = 0; i < n; i++){ - modularity += (indeg[i] - deg[i]*deg[i]/deg_total)/deg_total; - } - grid->deg_total = deg_total; - grid->deg = deg; - grid->modularity = modularity; - FREE(indeg); - } - - - return grid; -} - -static void Multilevel_Modularity_Clustering_delete(Multilevel_Modularity_Clustering grid){ - if (!grid) return; - if (grid->A){ - if (grid->level == 0) { - if (grid->delete_top_level_A) SparseMatrix_delete(grid->A); - } else { - SparseMatrix_delete(grid->A); - } - } - SparseMatrix_delete(grid->P); - SparseMatrix_delete(grid->R); - FREE(grid->matching); - FREE(grid->deg); - - Multilevel_Modularity_Clustering_delete(grid->next); - FREE(grid); -} - -static Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_establish(Multilevel_Modularity_Clustering grid, int ncluster_target){ - int *matching = grid->matching; - SparseMatrix A = grid->A; - int n = grid->n, level = grid->level, nc = 0; - real modularity = 0; - int *ia = A->ia, *ja = A->ja; - real *a; - real *deg = grid->deg; - real *deg_new; - int i, j, jj, jc, jmax; - real inv_deg_total = 1./(grid->deg_total); - real *deg_inter, gain; - int *mask; - real maxgain; - real total_gain = 0; - modularity = grid->modularity; - - deg_new = MALLOC(sizeof(real)*n); - deg_inter = MALLOC(sizeof(real)*n); - mask = MALLOC(sizeof(int)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - assert(n == A->n); - for (i = 0; i < n; i++) matching[i] = UNMATCHED; - - /* gain in merging node i into cluster j is - deg(i,j)/deg_total - 2*deg(i)*deg(j)/deg_total^2 - */ - a = (real*) A->a; - for (i = 0; i < n; i++){ - if (matching[i] != UNMATCHED) continue; - /* accumulate connections between i and clusters */ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - if ((jc=matching[jj]) != UNMATCHED){ - if (mask[jc] != i) { - mask[jc] = i; - deg_inter[jc] = a[j]; - } else { - deg_inter[jc] += a[j]; - } - } - } - - maxgain = 0; - jmax = -1; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - if ((jc=matching[jj]) == UNMATCHED){ - /* the first 2 is due to the fact that deg_iter gives edge weight from i to jj, but there are also edges from jj to i */ - gain = (2*a[j] - 2*deg[i]*deg[jj]*inv_deg_total)*inv_deg_total; - } else { - if (deg_inter[jc] > 0){ - /* the first 2 is due to the fact that deg_iter gives edge weight from i to jc, but there are also edges from jc to i */ - gain = (2*deg_inter[jc] - 2*deg[i]*deg_new[jc]*inv_deg_total)*inv_deg_total; - // printf("mod = %f deg_inter[jc] =%f, deg[i] = %f, deg_new[jc]=%f, gain = %f\n",modularity, deg_inter[jc],deg[i],deg_new[jc],gain); - deg_inter[jc] = -1; /* so that we do not redo the calulation when we hit another neighbor in cluster jc */ - } else { - gain = -1; - } - } - if (jmax < 0 || gain > maxgain){ - maxgain = gain; - jmax = jj; - } - - } - - /* now merge i and jmax */ - if (maxgain > 0 || grid->agglomerate_regardless){ - total_gain += maxgain; - jc = matching[jmax]; - if (jc == UNMATCHED){ - //fprintf(stderr, "maxgain=%f, merge %d, %d\n",maxgain, i, jmax); - matching[i] = matching[jmax] = nc; - deg_new[nc] = deg[i] + deg[jmax]; - nc++; - } else { - //fprintf(stderr, "maxgain=%f, merge with existing cluster %d, %d\n",maxgain, i, jc); - deg_new[jc] += deg[i]; - matching[i] = jc; - } - } else { - assert(maxgain <= 0); - matching[i] = nc; - deg_new[nc] = deg[i]; - nc++; - } - - } - - if (Verbose) fprintf(stderr,"modularity = %f new modularity = %f level = %d, n = %d, nc = %d, gain = %g\n", modularity, modularity + total_gain, - level, n, nc, total_gain); - - /* !!!!!!!!!!!!!!!!!!!!!! */ - if (ncluster_target > 0){ - if (nc <= ncluster_target && n >= ncluster_target){ - if (n - ncluster_target > ncluster_target - nc){/* ncluster = nc */ - - } else if (n - ncluster_target <= ncluster_target - nc){/* ncluster_target close to n */ - fprintf(stderr,"ncluster_target = %d, close to n=%d\n", ncluster_target, n); - for (i = 0; i < n; i++) matching[i] = i; - FREE(deg_new); - goto RETURN; - } - } else if (n < ncluster_target){ - fprintf(stderr,"n < target\n"); - for (i = 0; i < n; i++) matching[i] = i; - FREE(deg_new); - goto RETURN; - } - } - - if (nc >= 1 && (total_gain > 0 || nc < n)){ - /* now set up restriction and prolongation operator */ - SparseMatrix P, R, R0, B, cA; - real one = 1.; - Multilevel_Modularity_Clustering cgrid; - - R0 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - for (i = 0; i < n; i++){ - jj = matching[i]; - SparseMatrix_coordinate_form_add_entries(R0, 1, &jj, &i, &one); - } - R = SparseMatrix_from_coordinate_format(R0); - SparseMatrix_delete(R0); - P = SparseMatrix_transpose(R); - B = SparseMatrix_multiply(R, A); - if (!B) goto RETURN; - cA = SparseMatrix_multiply(B, P); - if (!cA) goto RETURN; - SparseMatrix_delete(B); - grid->P = P; - grid->R = R; - level++; - cgrid = Multilevel_Modularity_Clustering_init(cA, level); - deg_new = REALLOC(deg_new, nc*sizeof(real)); - cgrid->deg = deg_new; - cgrid->modularity = grid->modularity + total_gain; - cgrid->deg_total = grid->deg_total; - cgrid = Multilevel_Modularity_Clustering_establish(cgrid, ncluster_target); - grid->next = cgrid; - cgrid->prev = grid; - } else { - /* if we want a small number of cluster but right now we have too many, we will force agglomeration */ - if (ncluster_target > 0 && nc > ncluster_target && !(grid->agglomerate_regardless)){ - grid->agglomerate_regardless = TRUE; - FREE(deg_inter); - FREE(mask); - FREE(deg_new); - return Multilevel_Modularity_Clustering_establish(grid, ncluster_target); - } - /* no more improvement, stop and final clustering found */ - for (i = 0; i < n; i++) matching[i] = i; - FREE(deg_new); - } - - RETURN: - FREE(deg_inter); - FREE(mask); - return grid; -} - -static Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_new(SparseMatrix A0, int ncluster_target){ - /* ncluster_target is used to specify the target number of cluster desired, e.g., ncluster_target=10 means that around 10 clusters - is desired. The resulting clustering will give as close to this number as possible. - If this number != the optimal number of clusters, the resulting modularity may be lower, or equal to, the optimal modularity. - . Agglomeration will be forced even if that reduces the modularity when there are too many clusters. It will stop when nc <= ncluster_target <= nc2, - . where nc and nc2 are the number of clusters in the current and next level of clustering. The final cluster number will be - . selected among nc or nc2, which ever is closer to ncluster_target. - Default: ncluster_target <= 0 */ - - Multilevel_Modularity_Clustering grid; - SparseMatrix A = A0; - - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - grid = Multilevel_Modularity_Clustering_init(A, 0); - - grid = Multilevel_Modularity_Clustering_establish(grid, ncluster_target); - - if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */ - return grid; -} - - -static void hierachical_modularity_clustering(SparseMatrix A, int ncluster_target, - int *nclusters, int **assignment, real *modularity, int *flag){ - /* find a clustering of vertices by maximize modularity - A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1. - - ncluster_target: is used to specify the target number of cluster desired, e.g., ncluster_target=10 means that around 10 clusters - is desired. The resulting clustering will give as close to this number as possible. - If this number != the optimal number of clusters, the resulting modularity may be lower, or equal to, the optimal modularity. - . Agglomeration will be forced even if that reduces the modularity when there are too many clusters. It will stop when nc <= ncluster_target <= nc2, - . where nc and nc2 are the number of clusters in the current and next level of clustering. The final cluster number will be - . selected among nc or nc2, which ever is closer to ncluster_target. - Default: ncluster_target <= 0 - - nclusters: on output the number of clusters - assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters - */ - - Multilevel_Modularity_Clustering grid, cgrid; - int *matching, i; - SparseMatrix P; - real *u; - assert(A->m == A->n); - - *modularity = 0.; - - *flag = 0; - - grid = Multilevel_Modularity_Clustering_new(A, ncluster_target); - - /* find coarsest */ - cgrid = grid; - while (cgrid->next){ - cgrid = cgrid->next; - } - - /* project clustering up */ - u = MALLOC(sizeof(real)*cgrid->n); - for (i = 0; i < cgrid->n; i++) u[i] = (real) (cgrid->matching)[i]; - *nclusters = cgrid->n; - *modularity = cgrid->modularity; - - while (cgrid->prev){ - real *v = NULL; - P = cgrid->prev->P; - SparseMatrix_multiply_vector(P, u, &v, FALSE); - FREE(u); - u = v; - cgrid = cgrid->prev; - } - - if (*assignment){ - matching = *assignment; - } else { - matching = MALLOC(sizeof(int)*(grid->n)); - *assignment = matching; - } - for (i = 0; i < grid->n; i++) (matching)[i] = (int) u[i]; - FREE(u); - - Multilevel_Modularity_Clustering_delete(grid); - -} - - - -void modularity_clustering(SparseMatrix A, int inplace, int ncluster_target, int use_value, - int *nclusters, int **assignment, real *modularity, int *flag){ - /* find a clustering of vertices by maximize modularity - A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1. - inplace: whether A can e modified. If true, A will be modified by removing diagonal. - ncluster_target: is used to specify the target number of cluster desired, e.g., ncluster_target=10 means that around 10 clusters - is desired. The resulting clustering will give as close to this number as possible. - If this number != the optimal number of clusters, the resulting modularity may be lower, or equal to, the optimal modularity. - . Agglomeration will be forced even if that reduces the modularity when there are too many clusters. It will stop when nc <= ncluster_target <= nc2, - . where nc and nc2 are the number of clusters in the current and next level of clustering. The final cluster number will be - . selected among nc or nc2, which ever is closer to ncluster_target. - Default: ncluster_target <= 0 - nclusters: on output the number of clusters - assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters - */ - SparseMatrix B; - - *flag = 0; - - assert(A->m == A->n); - - B = SparseMatrix_symmetrize(A, FALSE); - - if (!inplace && B == A) { - B = SparseMatrix_copy(A); - } - - B = SparseMatrix_remove_diagonal(B); - - if (B->type != MATRIX_TYPE_REAL || !use_value) B = SparseMatrix_set_entries_to_real_one(B); - - hierachical_modularity_clustering(B, ncluster_target, nclusters, assignment, modularity, flag); - - if (B != A) SparseMatrix_delete(B); - -} diff --git a/internal/ccall/sparse/clustering.h b/internal/ccall/sparse/clustering.h deleted file mode 100644 index af297bc..0000000 --- a/internal/ccall/sparse/clustering.h +++ /dev/null @@ -1,57 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CLUSTERING_H -#define CLUSTERING_H - -typedef struct Multilevel_Modularity_Clustering_struct *Multilevel_Modularity_Clustering; - -struct Multilevel_Modularity_Clustering_struct { - int level;/* 0, 1, ... */ - int n; - SparseMatrix A; /* n x n matrix */ - SparseMatrix P; - SparseMatrix R; - Multilevel_Modularity_Clustering next; - Multilevel_Modularity_Clustering prev; - int delete_top_level_A; - int *matching; /* dimension n. matching[i] is the clustering assignment of node i */ - real modularity; - real deg_total; /* total edge weights, including self-edges */ - real *deg;/* dimension n. deg[i] equal to the sum of edge weights connected to vertex i. I.e., sum of row i */ - int agglomerate_regardless;/* whether to agglomerate nodes even if this causes modularity reduction. This is used if we want to force - agglomeration so as to get less clusters - */ - - -}; - -enum {CLUSTERING_MODULARITY = 0, CLUSTERING_MQ}; - -/* find a clustering of vertices by maximize modularity - A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1. - inplace: whether A can e modified. If true, A will be modified by removing diagonal. - - maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters - . is desired. this may not always be realized, and modularity may be low when this is specified. Default: maxcluster = 0 (no limit) - - use_value: whether to use the entry value, or treat edge weights as 1. - nclusters: on output the number of clusters - assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters. - . If *assignment = NULL on entry, it will be allocated. Otherwise used. - modularity: achieve modularity -*/ -void modularity_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value, - int *nclusters, int **assignment, real *modularity, int *flag); - -#endif diff --git a/internal/ccall/sparse/color_palette.c b/internal/ccall/sparse/color_palette.c deleted file mode 100644 index f2a5208..0000000 --- a/internal/ccall/sparse/color_palette.c +++ /dev/null @@ -1,7548 +0,0 @@ - -/************************************************************************* - * Copyright (c) 2013 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "color_palette.h" -#include "string.h" -#include "macros.h" - -int knownColorScheme (char* name) -{ - int r, g, b; - - return streq(name,"rgb") - || streq(name,"lab") - || streq(name,"gray") - || color_palettes_Q(name) - || (sscanf(name,"#%02X%02X%02X", &r, &g, &b) == 3); -} - -char *color_palettes_get(char *color_palette_name){ - int i; - for (i = 0; i < npalettes; i++){ - if (strcmp(color_palette_name, color_palettes[i][0]) == 0){ - return color_palettes[i][1]; - } - } - return NULL; -} - -void color_palettes_name_print(FILE *fp){ - int i; - - for (i = 0; i < npalettes; i++){ - if (i != 0) fprintf(fp,", "); - fprintf(fp,"%s", color_palettes[i][0]); - } -} - -int color_palettes_Q(char *color_palette_name){ - int i; - for (i = 0; i < npalettes; i++){ - if (strcmp(color_palette_name, color_palettes[i][0]) == 0){ - return 1; - } - } - return 0; -} - - -char *color_palettes[npalettes][2] = {{"accent3","#7fc97f,#beaed4,#fdc086"}, - {"accent4","#7fc97f,#beaed4,#fdc086,#ffff99"}, - {"accent5","#7fc97f,#beaed4,#fdc086,#ffff99,#386cb0"}, - {"accent6","#7fc97f,#beaed4,#fdc086,#ffff99,#386cb0,#f0027f"}, - {"accent7","#7fc97f,#beaed4,#fdc086,#ffff99,#386cb0,#f0027f,#bf5b17"}, - {"accent8","#7fc97f,#beaed4,#fdc086,#ffff99,#386cb0,#f0027f,#bf5b17,#666666"}, - {"blues3","#deebf7,#9ecae1,#3182bd"}, - {"blues4","#eff3ff,#bdd7e7,#6baed6,#2171b5"}, - {"blues5","#eff3ff,#bdd7e7,#6baed6,#3182bd,#08519c"}, - {"blues6","#eff3ff,#c6dbef,#9ecae1,#6baed6,#3182bd,#08519c"}, - {"blues7","#eff3ff,#c6dbef,#9ecae1,#6baed6,#4292c6,#2171b5,#084594"}, - {"blues8","#f7fbff,#deebf7,#c6dbef,#9ecae1,#6baed6,#4292c6,#2171b5,#084594"}, - {"blues9","#f7fbff,#deebf7,#c6dbef,#9ecae1,#6baed6,#4292c6,#2171b5,#08519c,#08306b"}, - {"brbg10","#543005,#8c510a,#bf812d,#dfc27d,#f6e8c3,#c7eae5,#80cdc1,#35978f,#01665e,#003c30"}, - {"brbg11","#543005,#8c510a,#bf812d,#dfc27d,#f6e8c3,#f5f5f5,#c7eae5,#80cdc1,#35978f,#01665e,#003c30"}, - {"brbg3","#d8b365,#f5f5f5,#5ab4ac"}, - {"brbg4","#a6611a,#dfc27d,#80cdc1,#018571"}, - {"brbg5","#a6611a,#dfc27d,#f5f5f5,#80cdc1,#018571"}, - {"brbg6","#8c510a,#d8b365,#f6e8c3,#c7eae5,#5ab4ac,#01665e"}, - {"brbg7","#8c510a,#d8b365,#f6e8c3,#f5f5f5,#c7eae5,#5ab4ac,#01665e"}, - {"brbg8","#8c510a,#bf812d,#dfc27d,#f6e8c3,#c7eae5,#80cdc1,#35978f,#01665e"}, - {"brbg9","#8c510a,#bf812d,#dfc27d,#f6e8c3,#f5f5f5,#c7eae5,#80cdc1,#35978f,#01665e"}, - {"bugn3","#e5f5f9,#99d8c9,#2ca25f"}, - {"bugn4","#edf8fb,#b2e2e2,#66c2a4,#238b45"}, - {"bugn5","#edf8fb,#b2e2e2,#66c2a4,#2ca25f,#006d2c"}, - {"bugn6","#edf8fb,#ccece6,#99d8c9,#66c2a4,#2ca25f,#006d2c"}, - {"bugn7","#edf8fb,#ccece6,#99d8c9,#66c2a4,#41ae76,#238b45,#005824"}, - {"bugn8","#f7fcfd,#e5f5f9,#ccece6,#99d8c9,#66c2a4,#41ae76,#238b45,#005824"}, - {"bugn9","#f7fcfd,#e5f5f9,#ccece6,#99d8c9,#66c2a4,#41ae76,#238b45,#006d2c,#00441b"}, - {"bupu3","#e0ecf4,#9ebcda,#8856a7"}, - {"bupu4","#edf8fb,#b3cde3,#8c96c6,#88419d"}, - {"bupu5","#edf8fb,#b3cde3,#8c96c6,#8856a7,#810f7c"}, - {"bupu6","#edf8fb,#bfd3e6,#9ebcda,#8c96c6,#8856a7,#810f7c"}, - {"bupu7","#edf8fb,#bfd3e6,#9ebcda,#8c96c6,#8c6bb1,#88419d,#6e016b"}, - {"bupu8","#f7fcfd,#e0ecf4,#bfd3e6,#9ebcda,#8c96c6,#8c6bb1,#88419d,#6e016b"}, - {"bupu9","#f7fcfd,#e0ecf4,#bfd3e6,#9ebcda,#8c96c6,#8c6bb1,#88419d,#810f7c,#4d004b"}, - {"dark23","#1b9e77,#d95f02,#7570b3"}, - {"dark24","#1b9e77,#d95f02,#7570b3,#e7298a"}, - {"dark25","#1b9e77,#d95f02,#7570b3,#e7298a,#66a61e"}, - {"dark26","#1b9e77,#d95f02,#7570b3,#e7298a,#66a61e,#e6ab02"}, - {"dark27","#1b9e77,#d95f02,#7570b3,#e7298a,#66a61e,#e6ab02,#a6761d"}, - {"dark28","#1b9e77,#d95f02,#7570b3,#e7298a,#66a61e,#e6ab02,#a6761d,#666666"}, - {"gnbu3","#e0f3db,#a8ddb5,#43a2ca"}, - {"gnbu4","#f0f9e8,#bae4bc,#7bccc4,#2b8cbe"}, - {"gnbu5","#f0f9e8,#bae4bc,#7bccc4,#43a2ca,#0868ac"}, - {"gnbu6","#f0f9e8,#ccebc5,#a8ddb5,#7bccc4,#43a2ca,#0868ac"}, - {"gnbu7","#f0f9e8,#ccebc5,#a8ddb5,#7bccc4,#4eb3d3,#2b8cbe,#08589e"}, - {"gnbu8","#f7fcf0,#e0f3db,#ccebc5,#a8ddb5,#7bccc4,#4eb3d3,#2b8cbe,#08589e"}, - {"gnbu9","#f7fcf0,#e0f3db,#ccebc5,#a8ddb5,#7bccc4,#4eb3d3,#2b8cbe,#0868ac,#084081"}, - {"greens3","#e5f5e0,#a1d99b,#31a354"}, - {"greens4","#edf8e9,#bae4b3,#74c476,#238b45"}, - {"greens5","#edf8e9,#bae4b3,#74c476,#31a354,#006d2c"}, - {"greens6","#edf8e9,#c7e9c0,#a1d99b,#74c476,#31a354,#006d2c"}, - {"greens7","#edf8e9,#c7e9c0,#a1d99b,#74c476,#41ab5d,#238b45,#005a32"}, - {"greens8","#f7fcf5,#e5f5e0,#c7e9c0,#a1d99b,#74c476,#41ab5d,#238b45,#005a32"}, - {"greens9","#f7fcf5,#e5f5e0,#c7e9c0,#a1d99b,#74c476,#41ab5d,#238b45,#006d2c,#00441b"}, - {"greys3","#f0f0f0,#bdbdbd,#636363"}, - {"greys4","#f7f7f7,#cccccc,#969696,#525252"}, - {"greys5","#f7f7f7,#cccccc,#969696,#636363,#252525"}, - {"greys6","#f7f7f7,#d9d9d9,#bdbdbd,#969696,#636363,#252525"}, - {"greys7","#f7f7f7,#d9d9d9,#bdbdbd,#969696,#737373,#525252,#252525"}, - {"greys8","#ffffff,#f0f0f0,#d9d9d9,#bdbdbd,#969696,#737373,#525252,#252525"}, - {"greys9","#ffffff,#f0f0f0,#d9d9d9,#bdbdbd,#969696,#737373,#525252,#252525,#000000"}, - {"oranges3","#fee6ce,#fdae6b,#e6550d"}, - {"oranges4","#feedde,#fdbe85,#fd8d3c,#d94701"}, - {"oranges5","#feedde,#fdbe85,#fd8d3c,#e6550d,#a63603"}, - {"oranges6","#feedde,#fdd0a2,#fdae6b,#fd8d3c,#e6550d,#a63603"}, - {"oranges7","#feedde,#fdd0a2,#fdae6b,#fd8d3c,#f16913,#d94801,#8c2d04"}, - {"oranges8","#fff5eb,#fee6ce,#fdd0a2,#fdae6b,#fd8d3c,#f16913,#d94801,#8c2d04"}, - {"oranges9","#fff5eb,#fee6ce,#fdd0a2,#fdae6b,#fd8d3c,#f16913,#d94801,#a63603,#7f2704"}, - {"orrd3","#fee8c8,#fdbb84,#e34a33"}, - {"orrd4","#fef0d9,#fdcc8a,#fc8d59,#d7301f"}, - {"orrd5","#fef0d9,#fdcc8a,#fc8d59,#e34a33,#b30000"}, - {"orrd6","#fef0d9,#fdd49e,#fdbb84,#fc8d59,#e34a33,#b30000"}, - {"orrd7","#fef0d9,#fdd49e,#fdbb84,#fc8d59,#ef6548,#d7301f,#990000"}, - {"orrd8","#fff7ec,#fee8c8,#fdd49e,#fdbb84,#fc8d59,#ef6548,#d7301f,#990000"}, - {"orrd9","#fff7ec,#fee8c8,#fdd49e,#fdbb84,#fc8d59,#ef6548,#d7301f,#b30000,#7f0000"}, - {"paired10","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6,#6a3d9a"}, - {"paired11","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6,#6a3d9a,#ffff99"}, - {"paired12","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6,#6a3d9a,#ffff99,#b15928"}, - {"paired3","#a6cee3,#1f78b4,#b2df8a"}, - {"paired4","#a6cee3,#1f78b4,#b2df8a,#33a02c"}, - {"paired5","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99"}, - {"paired6","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c"}, - {"paired7","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f"}, - {"paired8","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00"}, - {"paired9","#a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6"}, - {"pastel13","#fbb4ae,#b3cde3,#ccebc5"}, - {"pastel14","#fbb4ae,#b3cde3,#ccebc5,#decbe4"}, - {"pastel15","#fbb4ae,#b3cde3,#ccebc5,#decbe4,#fed9a6"}, - {"pastel16","#fbb4ae,#b3cde3,#ccebc5,#decbe4,#fed9a6,#ffffcc"}, - {"pastel17","#fbb4ae,#b3cde3,#ccebc5,#decbe4,#fed9a6,#ffffcc,#e5d8bd"}, - {"pastel18","#fbb4ae,#b3cde3,#ccebc5,#decbe4,#fed9a6,#ffffcc,#e5d8bd,#fddaec"}, - {"pastel19","#fbb4ae,#b3cde3,#ccebc5,#decbe4,#fed9a6,#ffffcc,#e5d8bd,#fddaec,#f2f2f2"}, - {"pastel23","#b3e2cd,#fdcdac,#cbd5e8"}, - {"pastel24","#b3e2cd,#fdcdac,#cbd5e8,#f4cae4"}, - {"pastel25","#b3e2cd,#fdcdac,#cbd5e8,#f4cae4,#e6f5c9"}, - {"pastel26","#b3e2cd,#fdcdac,#cbd5e8,#f4cae4,#e6f5c9,#fff2ae"}, - {"pastel27","#b3e2cd,#fdcdac,#cbd5e8,#f4cae4,#e6f5c9,#fff2ae,#f1e2cc"}, - {"pastel28","#b3e2cd,#fdcdac,#cbd5e8,#f4cae4,#e6f5c9,#fff2ae,#f1e2cc,#cccccc"}, - {"piyg10","#8e0152,#c51b7d,#de77ae,#f1b6da,#fde0ef,#e6f5d0,#b8e186,#7fbc41,#4d9221,#276419"}, - {"piyg11","#8e0152,#c51b7d,#de77ae,#f1b6da,#fde0ef,#f7f7f7,#e6f5d0,#b8e186,#7fbc41,#4d9221,#276419"}, - {"piyg3","#e9a3c9,#f7f7f7,#a1d76a"}, - {"piyg4","#d01c8b,#f1b6da,#b8e186,#4dac26"}, - {"piyg5","#d01c8b,#f1b6da,#f7f7f7,#b8e186,#4dac26"}, - {"piyg6","#c51b7d,#e9a3c9,#fde0ef,#e6f5d0,#a1d76a,#4d9221"}, - {"piyg7","#c51b7d,#e9a3c9,#fde0ef,#f7f7f7,#e6f5d0,#a1d76a,#4d9221"}, - {"piyg8","#c51b7d,#de77ae,#f1b6da,#fde0ef,#e6f5d0,#b8e186,#7fbc41,#4d9221"}, - {"piyg9","#c51b7d,#de77ae,#f1b6da,#fde0ef,#f7f7f7,#e6f5d0,#b8e186,#7fbc41,#4d9221"}, - {"prgn10","#40004b,#762a83,#9970ab,#c2a5cf,#e7d4e8,#d9f0d3,#a6dba0,#5aae61,#1b7837,#00441b"}, - {"prgn11","#40004b,#762a83,#9970ab,#c2a5cf,#e7d4e8,#f7f7f7,#d9f0d3,#a6dba0,#5aae61,#1b7837,#00441b"}, - {"prgn3","#af8dc3,#f7f7f7,#7fbf7b"}, - {"prgn4","#7b3294,#c2a5cf,#a6dba0,#008837"}, - {"prgn5","#7b3294,#c2a5cf,#f7f7f7,#a6dba0,#008837"}, - {"prgn6","#762a83,#af8dc3,#e7d4e8,#d9f0d3,#7fbf7b,#1b7837"}, - {"prgn7","#762a83,#af8dc3,#e7d4e8,#f7f7f7,#d9f0d3,#7fbf7b,#1b7837"}, - {"prgn8","#762a83,#9970ab,#c2a5cf,#e7d4e8,#d9f0d3,#a6dba0,#5aae61,#1b7837"}, - {"prgn9","#762a83,#9970ab,#c2a5cf,#e7d4e8,#f7f7f7,#d9f0d3,#a6dba0,#5aae61,#1b7837"}, - {"pubu3","#ece7f2,#a6bddb,#2b8cbe"}, - {"pubu4","#f1eef6,#bdc9e1,#74a9cf,#0570b0"}, - {"pubu5","#f1eef6,#bdc9e1,#74a9cf,#2b8cbe,#045a8d"}, - {"pubu6","#f1eef6,#d0d1e6,#a6bddb,#74a9cf,#2b8cbe,#045a8d"}, - {"pubu7","#f1eef6,#d0d1e6,#a6bddb,#74a9cf,#3690c0,#0570b0,#034e7b"}, - {"pubu8","#fff7fb,#ece7f2,#d0d1e6,#a6bddb,#74a9cf,#3690c0,#0570b0,#034e7b"}, - {"pubu9","#fff7fb,#ece7f2,#d0d1e6,#a6bddb,#74a9cf,#3690c0,#0570b0,#045a8d,#023858"}, - {"pubugn3","#ece2f0,#a6bddb,#1c9099"}, - {"pubugn4","#f6eff7,#bdc9e1,#67a9cf,#02818a"}, - {"pubugn5","#f6eff7,#bdc9e1,#67a9cf,#1c9099,#016c59"}, - {"pubugn6","#f6eff7,#d0d1e6,#a6bddb,#67a9cf,#1c9099,#016c59"}, - {"pubugn7","#f6eff7,#d0d1e6,#a6bddb,#67a9cf,#3690c0,#02818a,#016450"}, - {"pubugn8","#fff7fb,#ece2f0,#d0d1e6,#a6bddb,#67a9cf,#3690c0,#02818a,#016450"}, - {"pubugn9","#fff7fb,#ece2f0,#d0d1e6,#a6bddb,#67a9cf,#3690c0,#02818a,#016c59,#014636"}, - {"puor10","#7f3b08,#b35806,#e08214,#fdb863,#fee0b6,#d8daeb,#b2abd2,#8073ac,#542788,#2d004b"}, - {"puor11","#7f3b08,#b35806,#e08214,#fdb863,#fee0b6,#f7f7f7,#d8daeb,#b2abd2,#8073ac,#542788,#2d004b"}, - {"puor3","#f1a340,#f7f7f7,#998ec3"}, - {"puor4","#e66101,#fdb863,#b2abd2,#5e3c99"}, - {"puor5","#e66101,#fdb863,#f7f7f7,#b2abd2,#5e3c99"}, - {"puor6","#b35806,#f1a340,#fee0b6,#d8daeb,#998ec3,#542788"}, - {"puor7","#b35806,#f1a340,#fee0b6,#f7f7f7,#d8daeb,#998ec3,#542788"}, - {"puor8","#b35806,#e08214,#fdb863,#fee0b6,#d8daeb,#b2abd2,#8073ac,#542788"}, - {"puor9","#b35806,#e08214,#fdb863,#fee0b6,#f7f7f7,#d8daeb,#b2abd2,#8073ac,#542788"}, - {"purd3","#e7e1ef,#c994c7,#dd1c77"}, - {"purd4","#f1eef6,#d7b5d8,#df65b0,#ce1256"}, - {"purd5","#f1eef6,#d7b5d8,#df65b0,#dd1c77,#980043"}, - {"purd6","#f1eef6,#d4b9da,#c994c7,#df65b0,#dd1c77,#980043"}, - {"purd7","#f1eef6,#d4b9da,#c994c7,#df65b0,#e7298a,#ce1256,#91003f"}, - {"purd8","#f7f4f9,#e7e1ef,#d4b9da,#c994c7,#df65b0,#e7298a,#ce1256,#91003f"}, - {"purd9","#f7f4f9,#e7e1ef,#d4b9da,#c994c7,#df65b0,#e7298a,#ce1256,#980043,#67001f"}, - {"purples3","#efedf5,#bcbddc,#756bb1"}, - {"purples4","#f2f0f7,#cbc9e2,#9e9ac8,#6a51a3"}, - {"purples5","#f2f0f7,#cbc9e2,#9e9ac8,#756bb1,#54278f"}, - {"purples6","#f2f0f7,#dadaeb,#bcbddc,#9e9ac8,#756bb1,#54278f"}, - {"purples7","#f2f0f7,#dadaeb,#bcbddc,#9e9ac8,#807dba,#6a51a3,#4a1486"}, - {"purples8","#fcfbfd,#efedf5,#dadaeb,#bcbddc,#9e9ac8,#807dba,#6a51a3,#4a1486"}, - {"purples9","#fcfbfd,#efedf5,#dadaeb,#bcbddc,#9e9ac8,#807dba,#6a51a3,#54278f,#3f007d"}, - {"rdbu10","#67001f,#b2182b,#d6604d,#f4a582,#fddbc7,#d1e5f0,#92c5de,#4393c3,#2166ac,#053061"}, - {"rdbu11","#67001f,#b2182b,#d6604d,#f4a582,#fddbc7,#f7f7f7,#d1e5f0,#92c5de,#4393c3,#2166ac,#053061"}, - {"rdbu3","#ef8a62,#f7f7f7,#67a9cf"}, - {"rdbu4","#ca0020,#f4a582,#92c5de,#0571b0"}, - {"rdbu5","#ca0020,#f4a582,#f7f7f7,#92c5de,#0571b0"}, - {"rdbu6","#b2182b,#ef8a62,#fddbc7,#d1e5f0,#67a9cf,#2166ac"}, - {"rdbu7","#b2182b,#ef8a62,#fddbc7,#f7f7f7,#d1e5f0,#67a9cf,#2166ac"}, - {"rdbu8","#b2182b,#d6604d,#f4a582,#fddbc7,#d1e5f0,#92c5de,#4393c3,#2166ac"}, - {"rdbu9","#b2182b,#d6604d,#f4a582,#fddbc7,#f7f7f7,#d1e5f0,#92c5de,#4393c3,#2166ac"}, - {"rdgy10","#67001f,#b2182b,#d6604d,#f4a582,#fddbc7,#e0e0e0,#bababa,#878787,#4d4d4d,#1a1a1a"}, - {"rdgy11","#67001f,#b2182b,#d6604d,#f4a582,#fddbc7,#ffffff,#e0e0e0,#bababa,#878787,#4d4d4d,#1a1a1a"}, - {"rdgy3","#ef8a62,#ffffff,#999999"}, - {"rdgy4","#ca0020,#f4a582,#bababa,#404040"}, - {"rdgy5","#ca0020,#f4a582,#ffffff,#bababa,#404040"}, - {"rdgy6","#b2182b,#ef8a62,#fddbc7,#e0e0e0,#999999,#4d4d4d"}, - {"rdgy7","#b2182b,#ef8a62,#fddbc7,#ffffff,#e0e0e0,#999999,#4d4d4d"}, - {"rdgy8","#b2182b,#d6604d,#f4a582,#fddbc7,#e0e0e0,#bababa,#878787,#4d4d4d"}, - {"rdgy9","#b2182b,#d6604d,#f4a582,#fddbc7,#ffffff,#e0e0e0,#bababa,#878787,#4d4d4d"}, - {"rdpu3","#fde0dd,#fa9fb5,#c51b8a"}, - {"rdpu4","#feebe2,#fbb4b9,#f768a1,#ae017e"}, - {"rdpu5","#feebe2,#fbb4b9,#f768a1,#c51b8a,#7a0177"}, - {"rdpu6","#feebe2,#fcc5c0,#fa9fb5,#f768a1,#c51b8a,#7a0177"}, - {"rdpu7","#feebe2,#fcc5c0,#fa9fb5,#f768a1,#dd3497,#ae017e,#7a0177"}, - {"rdpu8","#fff7f3,#fde0dd,#fcc5c0,#fa9fb5,#f768a1,#dd3497,#ae017e,#7a0177"}, - {"rdpu9","#fff7f3,#fde0dd,#fcc5c0,#fa9fb5,#f768a1,#dd3497,#ae017e,#7a0177,#49006a"}, - {"rdylbu10","#a50026,#d73027,#f46d43,#fdae61,#fee090,#e0f3f8,#abd9e9,#74add1,#4575b4,#313695"}, - {"rdylbu11","#a50026,#d73027,#f46d43,#fdae61,#fee090,#ffffbf,#e0f3f8,#abd9e9,#74add1,#4575b4,#313695"}, - {"rdylbu3","#fc8d59,#ffffbf,#91bfdb"}, - {"rdylbu4","#d7191c,#fdae61,#abd9e9,#2c7bb6"}, - {"rdylbu5","#d7191c,#fdae61,#ffffbf,#abd9e9,#2c7bb6"}, - {"rdylbu6","#d73027,#fc8d59,#fee090,#e0f3f8,#91bfdb,#4575b4"}, - {"rdylbu7","#d73027,#fc8d59,#fee090,#ffffbf,#e0f3f8,#91bfdb,#4575b4"}, - {"rdylbu8","#d73027,#f46d43,#fdae61,#fee090,#e0f3f8,#abd9e9,#74add1,#4575b4"}, - {"rdylbu9","#d73027,#f46d43,#fdae61,#fee090,#ffffbf,#e0f3f8,#abd9e9,#74add1,#4575b4"}, - {"rdylgn10","#a50026,#d73027,#f46d43,#fdae61,#fee08b,#d9ef8b,#a6d96a,#66bd63,#1a9850,#006837"}, - {"rdylgn11","#a50026,#d73027,#f46d43,#fdae61,#fee08b,#ffffbf,#d9ef8b,#a6d96a,#66bd63,#1a9850,#006837"}, - {"rdylgn3","#fc8d59,#ffffbf,#91cf60"}, - {"rdylgn4","#d7191c,#fdae61,#a6d96a,#1a9641"}, - {"rdylgn5","#d7191c,#fdae61,#ffffbf,#a6d96a,#1a9641"}, - {"rdylgn6","#d73027,#fc8d59,#fee08b,#d9ef8b,#91cf60,#1a9850"}, - {"rdylgn7","#d73027,#fc8d59,#fee08b,#ffffbf,#d9ef8b,#91cf60,#1a9850"}, - {"rdylgn8","#d73027,#f46d43,#fdae61,#fee08b,#d9ef8b,#a6d96a,#66bd63,#1a9850"}, - {"rdylgn9","#d73027,#f46d43,#fdae61,#fee08b,#ffffbf,#d9ef8b,#a6d96a,#66bd63,#1a9850"}, - {"reds3","#fee0d2,#fc9272,#de2d26"}, - {"reds4","#fee5d9,#fcae91,#fb6a4a,#cb181d"}, - {"reds5","#fee5d9,#fcae91,#fb6a4a,#de2d26,#a50f15"}, - {"reds6","#fee5d9,#fcbba1,#fc9272,#fb6a4a,#de2d26,#a50f15"}, - {"reds7","#fee5d9,#fcbba1,#fc9272,#fb6a4a,#ef3b2c,#cb181d,#99000d"}, - {"reds8","#fff5f0,#fee0d2,#fcbba1,#fc9272,#fb6a4a,#ef3b2c,#cb181d,#99000d"}, - {"reds9","#fff5f0,#fee0d2,#fcbba1,#fc9272,#fb6a4a,#ef3b2c,#cb181d,#a50f15,#67000d"}, - {"set13","#e41a1c,#377eb8,#4daf4a"}, - {"set14","#e41a1c,#377eb8,#4daf4a,#984ea3"}, - {"set15","#e41a1c,#377eb8,#4daf4a,#984ea3,#ff7f00"}, - {"set16","#e41a1c,#377eb8,#4daf4a,#984ea3,#ff7f00,#ffff33"}, - {"set17","#e41a1c,#377eb8,#4daf4a,#984ea3,#ff7f00,#ffff33,#a65628"}, - {"set18","#e41a1c,#377eb8,#4daf4a,#984ea3,#ff7f00,#ffff33,#a65628,#f781bf"}, - {"set19","#e41a1c,#377eb8,#4daf4a,#984ea3,#ff7f00,#ffff33,#a65628,#f781bf,#999999"}, - {"set23","#66c2a5,#fc8d62,#8da0cb"}, - {"set24","#66c2a5,#fc8d62,#8da0cb,#e78ac3"}, - {"set25","#66c2a5,#fc8d62,#8da0cb,#e78ac3,#a6d854"}, - {"set26","#66c2a5,#fc8d62,#8da0cb,#e78ac3,#a6d854,#ffd92f"}, - {"set27","#66c2a5,#fc8d62,#8da0cb,#e78ac3,#a6d854,#ffd92f,#e5c494"}, - {"set28","#66c2a5,#fc8d62,#8da0cb,#e78ac3,#a6d854,#ffd92f,#e5c494,#b3b3b3"}, - {"set310","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9,#bc80bd"}, - {"set311","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9,#bc80bd,#ccebc5"}, - {"set312","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9,#bc80bd,#ccebc5,#ffed6f"}, - {"set33","#8dd3c7,#ffffb3,#bebada"}, - {"set34","#8dd3c7,#ffffb3,#bebada,#fb8072"}, - {"set35","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3"}, - {"set36","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462"}, - {"set37","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69"}, - {"set38","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5"}, - {"set39","#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9"}, - {"spectral10","#9e0142,#d53e4f,#f46d43,#fdae61,#fee08b,#e6f598,#abdda4,#66c2a5,#3288bd,#5e4fa2"}, - {"spectral11","#9e0142,#d53e4f,#f46d43,#fdae61,#fee08b,#ffffbf,#e6f598,#abdda4,#66c2a5,#3288bd,#5e4fa2"}, - {"spectral3","#fc8d59,#ffffbf,#99d594"}, - {"spectral4","#d7191c,#fdae61,#abdda4,#2b83ba"}, - {"spectral5","#d7191c,#fdae61,#ffffbf,#abdda4,#2b83ba"}, - {"spectral6","#d53e4f,#fc8d59,#fee08b,#e6f598,#99d594,#3288bd"}, - {"spectral7","#d53e4f,#fc8d59,#fee08b,#ffffbf,#e6f598,#99d594,#3288bd"}, - {"spectral8","#d53e4f,#f46d43,#fdae61,#fee08b,#e6f598,#abdda4,#66c2a5,#3288bd"}, - {"spectral9","#d53e4f,#f46d43,#fdae61,#fee08b,#ffffbf,#e6f598,#abdda4,#66c2a5,#3288bd"}, - {"ylgn3","#f7fcb9,#addd8e,#31a354"}, - {"ylgn4","#ffffcc,#c2e699,#78c679,#238443"}, - {"ylgn5","#ffffcc,#c2e699,#78c679,#31a354,#006837"}, - {"ylgn6","#ffffcc,#d9f0a3,#addd8e,#78c679,#31a354,#006837"}, - {"ylgn7","#ffffcc,#d9f0a3,#addd8e,#78c679,#41ab5d,#238443,#005a32"}, - {"ylgn8","#ffffe5,#f7fcb9,#d9f0a3,#addd8e,#78c679,#41ab5d,#238443,#005a32"}, - {"ylgn9","#ffffe5,#f7fcb9,#d9f0a3,#addd8e,#78c679,#41ab5d,#238443,#006837,#004529"}, - {"ylgnbu3","#edf8b1,#7fcdbb,#2c7fb8"}, - {"ylgnbu4","#ffffcc,#a1dab4,#41b6c4,#225ea8"}, - {"ylgnbu5","#ffffcc,#a1dab4,#41b6c4,#2c7fb8,#253494"}, - {"ylgnbu6","#ffffcc,#c7e9b4,#7fcdbb,#41b6c4,#2c7fb8,#253494"}, - {"ylgnbu7","#ffffcc,#c7e9b4,#7fcdbb,#41b6c4,#1d91c0,#225ea8,#0c2c84"}, - {"ylgnbu8","#ffffd9,#edf8b1,#c7e9b4,#7fcdbb,#41b6c4,#1d91c0,#225ea8,#0c2c84"}, - {"ylgnbu9","#ffffd9,#edf8b1,#c7e9b4,#7fcdbb,#41b6c4,#1d91c0,#225ea8,#253494,#081d58"}, - {"ylorbr3","#fff7bc,#fec44f,#d95f0e"}, - {"ylorbr4","#ffffd4,#fed98e,#fe9929,#cc4c02"}, - {"ylorbr5","#ffffd4,#fed98e,#fe9929,#d95f0e,#993404"}, - {"ylorbr6","#ffffd4,#fee391,#fec44f,#fe9929,#d95f0e,#993404"}, - {"ylorbr7","#ffffd4,#fee391,#fec44f,#fe9929,#ec7014,#cc4c02,#8c2d04"}, - {"ylorbr8","#ffffe5,#fff7bc,#fee391,#fec44f,#fe9929,#ec7014,#cc4c02,#8c2d04"}, - {"ylorbr9","#ffffe5,#fff7bc,#fee391,#fec44f,#fe9929,#ec7014,#cc4c02,#993404,#662506"}, - {"ylorrd3","#ffeda0,#feb24c,#f03b20"}, - {"ylorrd4","#ffffb2,#fecc5c,#fd8d3c,#e31a1c"}, - {"ylorrd5","#ffffb2,#fecc5c,#fd8d3c,#f03b20,#bd0026"}, - {"ylorrd6","#ffffb2,#fed976,#feb24c,#fd8d3c,#f03b20,#bd0026"}, - {"ylorrd7","#ffffb2,#fed976,#feb24c,#fd8d3c,#fc4e2a,#e31a1c,#b10026"}, - {"ylorrd8","#ffffcc,#ffeda0,#fed976,#feb24c,#fd8d3c,#fc4e2a,#e31a1c,#b10026"}, - {"ylorrd9","#ffffcc,#ffeda0,#fed976,#feb24c,#fd8d3c,#fc4e2a,#e31a1c,#bd0026,#800026"}}; - - - -float palette_pastel[1001][3] = {{0.984313725490196f, 0.7058823529411764f, 0.6823529411764706f}, - {0.9831843137254901f, 0.7062745098039215f, 0.6831843137254903f}, - {0.9820549019607843f, 0.7066666666666666f, 0.6840156862745098f}, - {0.9809254901960783f, 0.7070588235294117f, 0.6848470588235295f}, - {0.9797960784313725f, 0.7074509803921568f, 0.685678431372549f}, - {0.9786666666666666f, 0.7078431372549019f, 0.6865098039215687f}, - {0.9775372549019608f, 0.708235294117647f, 0.6873411764705882f}, - {0.9764078431372548f, 0.7086274509803921f, 0.6881725490196079f}, - {0.975278431372549f, 0.7090196078431372f, 0.6890039215686274f}, - {0.9741490196078431f, 0.7094117647058823f, 0.6898352941176471f}, - {0.9730196078431372f, 0.7098039215686274f, 0.6906666666666667f}, - {0.9718901960784313f, 0.7101960784313724f, 0.6914980392156863f}, - {0.9707607843137255f, 0.7105882352941176f, 0.6923294117647059f}, - {0.9696313725490195f, 0.7109803921568627f, 0.6931607843137255f}, - {0.9685019607843137f, 0.7113725490196078f, 0.6939921568627451f}, - {0.9673725490196078f, 0.7117647058823529f, 0.6948235294117647f}, - {0.9662431372549019f, 0.7121568627450979f, 0.6956549019607843f}, - {0.965113725490196f, 0.7125490196078431f, 0.6964862745098039f}, - {0.9639843137254901f, 0.7129411764705882f, 0.6973176470588236f}, - {0.9628549019607843f, 0.7133333333333333f, 0.6981490196078431f}, - {0.9617254901960783f, 0.7137254901960783f, 0.6989803921568628f}, - {0.9605960784313725f, 0.7141176470588235f, 0.6998117647058824f}, - {0.9594666666666666f, 0.7145098039215686f, 0.700643137254902f}, - {0.9583372549019608f, 0.7149019607843137f, 0.7014745098039216f}, - {0.9572078431372548f, 0.7152941176470587f, 0.7023058823529412f}, - {0.956078431372549f, 0.7156862745098038f, 0.7031372549019608f}, - {0.9549490196078431f, 0.716078431372549f, 0.7039686274509804f}, - {0.9538196078431372f, 0.7164705882352941f, 0.7048f}, - {0.9526901960784313f, 0.7168627450980392f, 0.7056313725490196f}, - {0.9515607843137255f, 0.7172549019607842f, 0.7064627450980392f}, - {0.9504313725490195f, 0.7176470588235293f, 0.7072941176470589f}, - {0.9493019607843136f, 0.7180392156862745f, 0.7081254901960784f}, - {0.9481725490196078f, 0.7184313725490196f, 0.7089568627450981f}, - {0.9470431372549019f, 0.7188235294117646f, 0.7097882352941176f}, - {0.945913725490196f, 0.7192156862745097f, 0.7106196078431373f}, - {0.9447843137254901f, 0.7196078431372549f, 0.7114509803921569f}, - {0.9436549019607843f, 0.72f, 0.7122823529411765f}, - {0.9425254901960783f, 0.720392156862745f, 0.7131137254901961f}, - {0.9413960784313725f, 0.7207843137254901f, 0.7139450980392157f}, - {0.9402666666666666f, 0.7211764705882352f, 0.7147764705882353f}, - {0.9391372549019608f, 0.7215686274509804f, 0.7156078431372549f}, - {0.9380078431372548f, 0.7219607843137255f, 0.7164392156862746f}, - {0.936878431372549f, 0.7223529411764705f, 0.7172705882352941f}, - {0.9357490196078431f, 0.7227450980392156f, 0.7181019607843138f}, - {0.9346196078431372f, 0.7231372549019608f, 0.7189333333333333f}, - {0.9334901960784313f, 0.7235294117647059f, 0.719764705882353f}, - {0.9323607843137255f, 0.7239215686274509f, 0.7205960784313725f}, - {0.9312313725490196f, 0.724313725490196f, 0.7214274509803922f}, - {0.9301019607843136f, 0.7247058823529411f, 0.7222588235294117f}, - {0.9289725490196078f, 0.7250980392156863f, 0.7230901960784314f}, - {0.9278431372549019f, 0.7254901960784313f, 0.7239215686274509f}, - {0.926713725490196f, 0.7258823529411764f, 0.7247529411764706f}, - {0.9255843137254901f, 0.7262745098039215f, 0.7255843137254903f}, - {0.9244549019607843f, 0.7266666666666666f, 0.7264156862745098f}, - {0.9233254901960783f, 0.7270588235294118f, 0.7272470588235294f}, - {0.9221960784313725f, 0.7274509803921568f, 0.728078431372549f}, - {0.9210666666666666f, 0.7278431372549019f, 0.7289098039215687f}, - {0.9199372549019608f, 0.728235294117647f, 0.7297411764705882f}, - {0.9188078431372548f, 0.7286274509803922f, 0.7305725490196079f}, - {0.917678431372549f, 0.7290196078431372f, 0.7314039215686274f}, - {0.9165490196078431f, 0.7294117647058823f, 0.7322352941176471f}, - {0.9154196078431371f, 0.7298039215686274f, 0.7330666666666666f}, - {0.9142901960784313f, 0.7301960784313725f, 0.7338980392156863f}, - {0.9131607843137255f, 0.7305882352941176f, 0.7347294117647059f}, - {0.9120313725490196f, 0.7309803921568627f, 0.7355607843137255f}, - {0.9109019607843136f, 0.7313725490196078f, 0.7363921568627451f}, - {0.9097725490196078f, 0.7317647058823529f, 0.7372235294117647f}, - {0.9086431372549019f, 0.7321568627450981f, 0.7380549019607843f}, - {0.907513725490196f, 0.7325490196078431f, 0.7388862745098039f}, - {0.9063843137254901f, 0.7329411764705882f, 0.7397176470588236f}, - {0.9052549019607843f, 0.7333333333333333f, 0.7405490196078431f}, - {0.9041254901960784f, 0.7337254901960784f, 0.7413803921568628f}, - {0.9029960784313725f, 0.7341176470588235f, 0.7422117647058823f}, - {0.9018666666666666f, 0.7345098039215686f, 0.743043137254902f}, - {0.9007372549019608f, 0.7349019607843137f, 0.7438745098039216f}, - {0.8996078431372548f, 0.7352941176470588f, 0.7447058823529412f}, - {0.898478431372549f, 0.7356862745098038f, 0.7455372549019608f}, - {0.8973490196078431f, 0.736078431372549f, 0.7463686274509804f}, - {0.8962196078431373f, 0.7364705882352941f, 0.7472f}, - {0.8950901960784313f, 0.7368627450980392f, 0.7480313725490196f}, - {0.8939607843137254f, 0.7372549019607842f, 0.7488627450980392f}, - {0.8928313725490196f, 0.7376470588235293f, 0.7496941176470588f}, - {0.8917019607843136f, 0.7380392156862745f, 0.7505254901960784f}, - {0.8905725490196078f, 0.7384313725490196f, 0.751356862745098f}, - {0.8894431372549019f, 0.7388235294117647f, 0.7521882352941176f}, - {0.888313725490196f, 0.7392156862745097f, 0.7530196078431373f}, - {0.8871843137254901f, 0.7396078431372549f, 0.7538509803921569f}, - {0.8860549019607843f, 0.74f, 0.7546823529411765f}, - {0.8849254901960784f, 0.7403921568627451f, 0.755513725490196f}, - {0.8837960784313725f, 0.7407843137254901f, 0.7563450980392157f}, - {0.8826666666666666f, 0.7411764705882352f, 0.7571764705882353f}, - {0.8815372549019608f, 0.7415686274509804f, 0.7580078431372549f}, - {0.8804078431372548f, 0.7419607843137255f, 0.7588392156862745f}, - {0.879278431372549f, 0.7423529411764705f, 0.7596705882352941f}, - {0.8781490196078431f, 0.7427450980392156f, 0.7605019607843138f}, - {0.8770196078431372f, 0.7431372549019608f, 0.7613333333333333f}, - {0.8758901960784313f, 0.7435294117647059f, 0.762164705882353f}, - {0.8747607843137254f, 0.743921568627451f, 0.7629960784313725f}, - {0.8736313725490196f, 0.744313725490196f, 0.7638274509803922f}, - {0.8725019607843136f, 0.7447058823529411f, 0.7646588235294117f}, - {0.8713725490196078f, 0.7450980392156863f, 0.7654901960784314f}, - {0.8702431372549019f, 0.7454901960784314f, 0.7663215686274509f}, - {0.869113725490196f, 0.7458823529411764f, 0.7671529411764706f}, - {0.8679843137254901f, 0.7462745098039215f, 0.7679843137254903f}, - {0.8668549019607843f, 0.7466666666666666f, 0.7688156862745098f}, - {0.8657254901960784f, 0.7470588235294118f, 0.7696470588235294f}, - {0.8645960784313725f, 0.7474509803921568f, 0.770478431372549f}, - {0.8634666666666666f, 0.7478431372549019f, 0.7713098039215687f}, - {0.8623372549019608f, 0.748235294117647f, 0.7721411764705882f}, - {0.8612078431372548f, 0.7486274509803922f, 0.7729725490196078f}, - {0.8600784313725489f, 0.7490196078431373f, 0.7738039215686274f}, - {0.8589490196078431f, 0.7494117647058823f, 0.7746352941176471f}, - {0.8578196078431373f, 0.7498039215686274f, 0.7754666666666666f}, - {0.8566901960784313f, 0.7501960784313725f, 0.7762980392156863f}, - {0.8555607843137254f, 0.7505882352941177f, 0.7771294117647058f}, - {0.8544313725490196f, 0.7509803921568627f, 0.7779607843137255f}, - {0.8533019607843136f, 0.7513725490196078f, 0.778792156862745f}, - {0.8521725490196078f, 0.7517647058823529f, 0.7796235294117647f}, - {0.8510431372549019f, 0.7521568627450981f, 0.7804549019607843f}, - {0.8499137254901961f, 0.7525490196078432f, 0.7812862745098039f}, - {0.8487843137254901f, 0.7529411764705882f, 0.7821176470588235f}, - {0.8476549019607843f, 0.7533333333333333f, 0.7829490196078431f}, - {0.8465254901960784f, 0.7537254901960784f, 0.7837803921568627f}, - {0.8453960784313725f, 0.7541176470588236f, 0.7846117647058823f}, - {0.8442666666666666f, 0.7545098039215686f, 0.785443137254902f}, - {0.8431372549019607f, 0.7549019607843137f, 0.7862745098039216f}, - {0.8420078431372549f, 0.7552941176470588f, 0.7871058823529411f}, - {0.840878431372549f, 0.7556862745098039f, 0.7879372549019608f}, - {0.8397490196078431f, 0.756078431372549f, 0.7887686274509804f}, - {0.8386196078431372f, 0.7564705882352941f, 0.7896f}, - {0.8374901960784313f, 0.7568627450980392f, 0.7904313725490196f}, - {0.8363607843137254f, 0.7572549019607843f, 0.7912627450980392f}, - {0.8352313725490196f, 0.7576470588235295f, 0.7920941176470588f}, - {0.8341019607843136f, 0.7580392156862745f, 0.7929254901960784f}, - {0.8329725490196078f, 0.7584313725490196f, 0.793756862745098f}, - {0.8318431372549019f, 0.7588235294117647f, 0.7945882352941176f}, - {0.830713725490196f, 0.7592156862745097f, 0.7954196078431373f}, - {0.8295843137254901f, 0.7596078431372549f, 0.7962509803921568f}, - {0.8284549019607843f, 0.76f, 0.7970823529411765f}, - {0.8273254901960784f, 0.7603921568627451f, 0.797913725490196f}, - {0.8261960784313724f, 0.7607843137254902f, 0.7987450980392157f}, - {0.8250666666666666f, 0.7611764705882353f, 0.7995764705882353f}, - {0.8239372549019607f, 0.7615686274509804f, 0.8004078431372549f}, - {0.8228078431372549f, 0.7619607843137255f, 0.8012392156862745f}, - {0.8216784313725489f, 0.7623529411764706f, 0.8020705882352941f}, - {0.8205490196078431f, 0.7627450980392156f, 0.8029019607843138f}, - {0.8194196078431373f, 0.7631372549019608f, 0.8037333333333333f}, - {0.8182901960784313f, 0.7635294117647059f, 0.8045647058823528f}, - {0.8171607843137254f, 0.763921568627451f, 0.8053960784313725f}, - {0.8160313725490196f, 0.764313725490196f, 0.8062274509803922f}, - {0.8149019607843137f, 0.7647058823529411f, 0.8070588235294117f}, - {0.8137725490196078f, 0.7650980392156863f, 0.8078901960784314f}, - {0.8126431372549019f, 0.7654901960784314f, 0.8087215686274509f}, - {0.8115137254901961f, 0.7658823529411765f, 0.8095529411764706f}, - {0.8103843137254901f, 0.7662745098039215f, 0.8103843137254901f}, - {0.8092549019607842f, 0.7666666666666666f, 0.8112156862745098f}, - {0.8081254901960784f, 0.7670588235294118f, 0.8120470588235293f}, - {0.8069960784313726f, 0.7674509803921569f, 0.812878431372549f}, - {0.8058666666666666f, 0.7678431372549019f, 0.8137098039215687f}, - {0.8047372549019607f, 0.768235294117647f, 0.8145411764705882f}, - {0.8036078431372549f, 0.7686274509803922f, 0.8153725490196078f}, - {0.8024784313725489f, 0.7690196078431373f, 0.8162039215686274f}, - {0.8013490196078431f, 0.7694117647058824f, 0.8170352941176471f}, - {0.8002196078431372f, 0.7698039215686274f, 0.8178666666666666f}, - {0.7990901960784313f, 0.7701960784313726f, 0.8186980392156863f}, - {0.7979607843137254f, 0.7705882352941177f, 0.8195294117647058f}, - {0.7968313725490195f, 0.7709803921568628f, 0.8203607843137255f}, - {0.7957019607843137f, 0.7713725490196078f, 0.821192156862745f}, - {0.7945725490196078f, 0.7717647058823529f, 0.8220235294117647f}, - {0.7934431372549019f, 0.7721568627450981f, 0.8228549019607843f}, - {0.792313725490196f, 0.7725490196078432f, 0.8236862745098039f}, - {0.7911843137254901f, 0.7729411764705882f, 0.8245176470588236f}, - {0.7900549019607842f, 0.7733333333333333f, 0.8253490196078431f}, - {0.7889254901960784f, 0.7737254901960784f, 0.8261803921568627f}, - {0.7877960784313724f, 0.7741176470588236f, 0.8270117647058823f}, - {0.7866666666666666f, 0.7745098039215687f, 0.827843137254902f}, - {0.7855372549019608f, 0.7749019607843137f, 0.8286745098039215f}, - {0.7844078431372549f, 0.7752941176470588f, 0.8295058823529411f}, - {0.7832784313725489f, 0.7756862745098039f, 0.8303372549019608f}, - {0.7821490196078431f, 0.7760784313725491f, 0.8311686274509804f}, - {0.7810196078431372f, 0.7764705882352941f, 0.832f}, - {0.7798901960784314f, 0.7768627450980392f, 0.8328313725490195f}, - {0.7787607843137254f, 0.7772549019607843f, 0.8336627450980392f}, - {0.7776313725490196f, 0.7776470588235294f, 0.8344941176470588f}, - {0.7765019607843137f, 0.7780392156862745f, 0.8353254901960784f}, - {0.7753725490196077f, 0.7784313725490196f, 0.836156862745098f}, - {0.7742431372549019f, 0.7788235294117647f, 0.8369882352941176f}, - {0.7731137254901961f, 0.7792156862745098f, 0.8378196078431372f}, - {0.7719843137254901f, 0.779607843137255f, 0.8386509803921568f}, - {0.7708549019607842f, 0.78f, 0.8394823529411765f}, - {0.7697254901960784f, 0.7803921568627451f, 0.840313725490196f}, - {0.7685960784313725f, 0.7807843137254902f, 0.8411450980392157f}, - {0.7674666666666666f, 0.7811764705882354f, 0.8419764705882353f}, - {0.7663372549019607f, 0.7815686274509804f, 0.8428078431372549f}, - {0.7652078431372549f, 0.7819607843137255f, 0.8436392156862744f}, - {0.7640784313725489f, 0.7823529411764706f, 0.8444705882352941f}, - {0.7629490196078431f, 0.7827450980392157f, 0.8453019607843137f}, - {0.7618196078431372f, 0.7831372549019608f, 0.8461333333333333f}, - {0.7606901960784314f, 0.7835294117647059f, 0.8469647058823528f}, - {0.7595607843137254f, 0.783921568627451f, 0.8477960784313725f}, - {0.7584313725490195f, 0.7843137254901961f, 0.8486274509803922f}, - {0.7573019607843137f, 0.7847058823529411f, 0.8494588235294117f}, - {0.7561725490196078f, 0.7850980392156863f, 0.8502901960784314f}, - {0.7550431372549019f, 0.7854901960784314f, 0.8511215686274509f}, - {0.753913725490196f, 0.7858823529411765f, 0.8519529411764706f}, - {0.7527843137254902f, 0.7862745098039216f, 0.8527843137254901f}, - {0.7516549019607842f, 0.7866666666666666f, 0.8536156862745098f}, - {0.7505254901960784f, 0.7870588235294118f, 0.8544470588235293f}, - {0.7493960784313725f, 0.7874509803921569f, 0.855278431372549f}, - {0.7482666666666666f, 0.787843137254902f, 0.8561098039215685f}, - {0.7471372549019607f, 0.788235294117647f, 0.8569411764705882f}, - {0.7460078431372549f, 0.7886274509803921f, 0.8577725490196078f}, - {0.7448784313725489f, 0.7890196078431373f, 0.8586039215686274f}, - {0.7437490196078431f, 0.7894117647058824f, 0.8594352941176471f}, - {0.7426196078431372f, 0.7898039215686274f, 0.8602666666666666f}, - {0.7414901960784314f, 0.7901960784313725f, 0.8610980392156862f}, - {0.7403607843137254f, 0.7905882352941177f, 0.8619294117647058f}, - {0.7392313725490196f, 0.7909803921568628f, 0.8627607843137255f}, - {0.7381019607843137f, 0.7913725490196079f, 0.863592156862745f}, - {0.7369725490196077f, 0.7917647058823529f, 0.8644235294117647f}, - {0.7358431372549019f, 0.7921568627450981f, 0.8652549019607843f}, - {0.7347137254901961f, 0.7925490196078432f, 0.8660862745098039f}, - {0.7335843137254902f, 0.7929411764705883f, 0.8669176470588235f}, - {0.7324549019607842f, 0.7933333333333333f, 0.8677490196078431f}, - {0.7313254901960784f, 0.7937254901960784f, 0.8685803921568627f}, - {0.7301960784313725f, 0.7941176470588236f, 0.8694117647058823f}, - {0.7290666666666665f, 0.7945098039215687f, 0.870243137254902f}, - {0.7279372549019607f, 0.7949019607843137f, 0.8710745098039215f}, - {0.7268078431372549f, 0.7952941176470588f, 0.8719058823529411f}, - {0.725678431372549f, 0.7956862745098039f, 0.8727372549019607f}, - {0.724549019607843f, 0.7960784313725491f, 0.8735686274509804f}, - {0.7234196078431372f, 0.7964705882352942f, 0.8744f}, - {0.7222901960784314f, 0.7968627450980392f, 0.8752313725490195f}, - {0.7211607843137254f, 0.7972549019607843f, 0.8760627450980392f}, - {0.7200313725490195f, 0.7976470588235295f, 0.8768941176470588f}, - {0.7189019607843137f, 0.7980392156862746f, 0.8777254901960784f}, - {0.7177725490196079f, 0.7984313725490196f, 0.878556862745098f}, - {0.7166431372549019f, 0.7988235294117647f, 0.8793882352941176f}, - {0.715513725490196f, 0.7992156862745099f, 0.8802196078431372f}, - {0.7143843137254902f, 0.799607843137255f, 0.8810509803921568f}, - {0.7132549019607843f, 0.8f, 0.8818823529411765f}, - {0.7121254901960784f, 0.8003921568627451f, 0.882713725490196f}, - {0.7109960784313725f, 0.8007843137254902f, 0.8835450980392157f}, - {0.7098666666666666f, 0.8011764705882354f, 0.8843764705882352f}, - {0.7087372549019607f, 0.8015686274509805f, 0.8852078431372549f}, - {0.7076078431372548f, 0.8019607843137255f, 0.8860392156862744f}, - {0.706478431372549f, 0.8023529411764706f, 0.8868705882352941f}, - {0.7053490196078431f, 0.8027450980392157f, 0.8877019607843137f}, - {0.7042196078431372f, 0.8031372549019609f, 0.8885333333333333f}, - {0.7030901960784313f, 0.8035294117647059f, 0.8893647058823528f}, - {0.7019607843137254f, 0.803921568627451f, 0.8901960784313725f}, - {0.7023529411764705f, 0.8043921568627451f, 0.8897254901960784f}, - {0.7027450980392156f, 0.8048627450980392f, 0.8892549019607843f}, - {0.7031372549019608f, 0.8053333333333333f, 0.8887843137254902f}, - {0.7035294117647058f, 0.8058039215686275f, 0.888313725490196f}, - {0.7039215686274509f, 0.8062745098039216f, 0.8878431372549019f}, - {0.704313725490196f, 0.8067450980392157f, 0.8873725490196078f}, - {0.7047058823529412f, 0.8072156862745098f, 0.8869019607843137f}, - {0.7050980392156863f, 0.8076862745098039f, 0.8864313725490196f}, - {0.7054901960784313f, 0.8081568627450981f, 0.8859607843137254f}, - {0.7058823529411764f, 0.8086274509803922f, 0.8854901960784313f}, - {0.7062745098039215f, 0.8090980392156863f, 0.8850196078431372f}, - {0.7066666666666667f, 0.8095686274509805f, 0.884549019607843f}, - {0.7070588235294117f, 0.8100392156862746f, 0.8840784313725489f}, - {0.7074509803921568f, 0.8105098039215687f, 0.8836078431372548f}, - {0.7078431372549019f, 0.8109803921568628f, 0.8831372549019607f}, - {0.7082352941176471f, 0.8114509803921569f, 0.8826666666666666f}, - {0.7086274509803921f, 0.811921568627451f, 0.8821960784313725f}, - {0.7090196078431372f, 0.8123921568627451f, 0.8817254901960784f}, - {0.7094117647058823f, 0.8128627450980392f, 0.8812549019607843f}, - {0.7098039215686274f, 0.8133333333333334f, 0.8807843137254902f}, - {0.7101960784313726f, 0.8138039215686275f, 0.880313725490196f}, - {0.7105882352941176f, 0.8142745098039216f, 0.8798431372549019f}, - {0.7109803921568627f, 0.8147450980392157f, 0.8793725490196078f}, - {0.7113725490196078f, 0.8152156862745098f, 0.8789019607843137f}, - {0.7117647058823529f, 0.8156862745098039f, 0.8784313725490196f}, - {0.712156862745098f, 0.816156862745098f, 0.8779607843137255f}, - {0.7125490196078431f, 0.8166274509803921f, 0.8774901960784314f}, - {0.7129411764705882f, 0.8170980392156864f, 0.8770196078431372f}, - {0.7133333333333333f, 0.8175686274509805f, 0.876549019607843f}, - {0.7137254901960784f, 0.8180392156862746f, 0.8760784313725489f}, - {0.7141176470588235f, 0.8185098039215687f, 0.8756078431372548f}, - {0.7145098039215686f, 0.8189803921568628f, 0.8751372549019607f}, - {0.7149019607843137f, 0.8194509803921569f, 0.8746666666666666f}, - {0.7152941176470587f, 0.819921568627451f, 0.8741960784313725f}, - {0.7156862745098039f, 0.8203921568627451f, 0.8737254901960784f}, - {0.716078431372549f, 0.8208627450980392f, 0.8732549019607843f}, - {0.7164705882352941f, 0.8213333333333334f, 0.8727843137254901f}, - {0.7168627450980392f, 0.8218039215686275f, 0.872313725490196f}, - {0.7172549019607842f, 0.8222745098039216f, 0.8718431372549019f}, - {0.7176470588235294f, 0.8227450980392157f, 0.8713725490196078f}, - {0.7180392156862745f, 0.8232156862745098f, 0.8709019607843137f}, - {0.7184313725490196f, 0.8236862745098039f, 0.8704313725490196f}, - {0.7188235294117646f, 0.824156862745098f, 0.8699607843137255f}, - {0.7192156862745097f, 0.8246274509803921f, 0.8694901960784314f}, - {0.7196078431372549f, 0.8250980392156863f, 0.8690196078431373f}, - {0.72f, 0.8255686274509804f, 0.8685490196078431f}, - {0.720392156862745f, 0.8260392156862745f, 0.868078431372549f}, - {0.7207843137254901f, 0.8265098039215686f, 0.8676078431372549f}, - {0.7211764705882353f, 0.8269803921568628f, 0.8671372549019607f}, - {0.7215686274509804f, 0.8274509803921569f, 0.8666666666666666f}, - {0.7219607843137255f, 0.827921568627451f, 0.8661960784313725f}, - {0.7223529411764705f, 0.8283921568627451f, 0.8657254901960784f}, - {0.7227450980392156f, 0.8288627450980393f, 0.8652549019607843f}, - {0.7231372549019608f, 0.8293333333333334f, 0.8647843137254901f}, - {0.7235294117647059f, 0.8298039215686275f, 0.864313725490196f}, - {0.7239215686274509f, 0.8302745098039216f, 0.8638431372549019f}, - {0.724313725490196f, 0.8307450980392157f, 0.8633725490196078f}, - {0.7247058823529411f, 0.8312156862745098f, 0.8629019607843137f}, - {0.7250980392156863f, 0.8316862745098039f, 0.8624313725490196f}, - {0.7254901960784313f, 0.832156862745098f, 0.8619607843137255f}, - {0.7258823529411764f, 0.8326274509803921f, 0.8614901960784314f}, - {0.7262745098039215f, 0.8330980392156863f, 0.8610196078431372f}, - {0.7266666666666667f, 0.8335686274509804f, 0.8605490196078431f}, - {0.7270588235294118f, 0.8340392156862745f, 0.860078431372549f}, - {0.7274509803921568f, 0.8345098039215686f, 0.8596078431372549f}, - {0.7278431372549019f, 0.8349803921568627f, 0.8591372549019608f}, - {0.7282352941176471f, 0.8354509803921568f, 0.8586666666666667f}, - {0.7286274509803922f, 0.835921568627451f, 0.8581960784313725f}, - {0.7290196078431372f, 0.8363921568627452f, 0.8577254901960784f}, - {0.7294117647058823f, 0.8368627450980393f, 0.8572549019607842f}, - {0.7298039215686274f, 0.8373333333333334f, 0.8567843137254901f}, - {0.7301960784313726f, 0.8378039215686275f, 0.856313725490196f}, - {0.7305882352941176f, 0.8382745098039216f, 0.8558431372549019f}, - {0.7309803921568627f, 0.8387450980392157f, 0.8553725490196078f}, - {0.7313725490196078f, 0.8392156862745098f, 0.8549019607843137f}, - {0.7317647058823529f, 0.8396862745098039f, 0.8544313725490196f}, - {0.7321568627450981f, 0.840156862745098f, 0.8539607843137255f}, - {0.7325490196078431f, 0.8406274509803922f, 0.8534901960784314f}, - {0.7329411764705882f, 0.8410980392156863f, 0.8530196078431372f}, - {0.7333333333333333f, 0.8415686274509804f, 0.8525490196078431f}, - {0.7337254901960785f, 0.8420392156862745f, 0.852078431372549f}, - {0.7341176470588235f, 0.8425098039215686f, 0.8516078431372549f}, - {0.7345098039215686f, 0.8429803921568627f, 0.8511372549019608f}, - {0.7349019607843137f, 0.8434509803921568f, 0.8506666666666667f}, - {0.7352941176470588f, 0.843921568627451f, 0.8501960784313725f}, - {0.735686274509804f, 0.8443921568627452f, 0.8497254901960783f}, - {0.736078431372549f, 0.8448627450980393f, 0.8492549019607842f}, - {0.7364705882352941f, 0.8453333333333334f, 0.8487843137254901f}, - {0.7368627450980392f, 0.8458039215686275f, 0.848313725490196f}, - {0.7372549019607844f, 0.8462745098039216f, 0.8478431372549019f}, - {0.7376470588235294f, 0.8467450980392157f, 0.8473725490196078f}, - {0.7380392156862745f, 0.8472156862745098f, 0.8469019607843137f}, - {0.7384313725490196f, 0.8476862745098039f, 0.8464313725490196f}, - {0.7388235294117647f, 0.848156862745098f, 0.8459607843137255f}, - {0.7392156862745098f, 0.8486274509803922f, 0.8454901960784313f}, - {0.7396078431372549f, 0.8490980392156863f, 0.8450196078431372f}, - {0.74f, 0.8495686274509804f, 0.8445490196078431f}, - {0.7403921568627451f, 0.8500392156862745f, 0.844078431372549f}, - {0.7407843137254901f, 0.8505098039215686f, 0.8436078431372549f}, - {0.7411764705882353f, 0.8509803921568627f, 0.8431372549019608f}, - {0.7415686274509804f, 0.8514509803921568f, 0.8426666666666667f}, - {0.7419607843137255f, 0.8519215686274509f, 0.8421960784313726f}, - {0.7423529411764705f, 0.852392156862745f, 0.8417254901960785f}, - {0.7427450980392156f, 0.8528627450980392f, 0.8412549019607843f}, - {0.7431372549019608f, 0.8533333333333333f, 0.8407843137254902f}, - {0.7435294117647059f, 0.8538039215686274f, 0.8403137254901961f}, - {0.743921568627451f, 0.8542745098039215f, 0.839843137254902f}, - {0.744313725490196f, 0.8547450980392157f, 0.8393725490196078f}, - {0.7447058823529411f, 0.8552156862745098f, 0.8389019607843137f}, - {0.7450980392156863f, 0.855686274509804f, 0.8384313725490196f}, - {0.7454901960784314f, 0.8561568627450981f, 0.8379607843137254f}, - {0.7458823529411764f, 0.8566274509803922f, 0.8374901960784313f}, - {0.7462745098039215f, 0.8570980392156863f, 0.8370196078431372f}, - {0.7466666666666667f, 0.8575686274509804f, 0.8365490196078431f}, - {0.7470588235294118f, 0.8580392156862745f, 0.836078431372549f}, - {0.7474509803921568f, 0.8585098039215686f, 0.8356078431372549f}, - {0.7478431372549019f, 0.8589803921568627f, 0.8351372549019608f}, - {0.748235294117647f, 0.8594509803921568f, 0.8346666666666667f}, - {0.7486274509803922f, 0.859921568627451f, 0.8341960784313726f}, - {0.7490196078431373f, 0.8603921568627451f, 0.8337254901960784f}, - {0.7494117647058823f, 0.8608627450980392f, 0.8332549019607843f}, - {0.7498039215686274f, 0.8613333333333333f, 0.8327843137254902f}, - {0.7501960784313726f, 0.8618039215686274f, 0.8323137254901961f}, - {0.7505882352941177f, 0.8622745098039215f, 0.831843137254902f}, - {0.7509803921568627f, 0.8627450980392157f, 0.8313725490196078f}, - {0.7513725490196078f, 0.8632156862745098f, 0.8309019607843137f}, - {0.7517647058823529f, 0.863686274509804f, 0.8304313725490196f}, - {0.7521568627450981f, 0.8641568627450981f, 0.8299607843137254f}, - {0.7525490196078432f, 0.8646274509803922f, 0.8294901960784313f}, - {0.7529411764705882f, 0.8650980392156863f, 0.8290196078431372f}, - {0.7533333333333333f, 0.8655686274509804f, 0.8285490196078431f}, - {0.7537254901960785f, 0.8660392156862745f, 0.828078431372549f}, - {0.7541176470588236f, 0.8665098039215686f, 0.8276078431372549f}, - {0.7545098039215686f, 0.8669803921568627f, 0.8271372549019608f}, - {0.7549019607843137f, 0.8674509803921568f, 0.8266666666666667f}, - {0.7552941176470588f, 0.867921568627451f, 0.8261960784313725f}, - {0.755686274509804f, 0.8683921568627451f, 0.8257254901960784f}, - {0.756078431372549f, 0.8688627450980392f, 0.8252549019607843f}, - {0.7564705882352941f, 0.8693333333333333f, 0.8247843137254902f}, - {0.7568627450980392f, 0.8698039215686274f, 0.8243137254901961f}, - {0.7572549019607844f, 0.8702745098039215f, 0.823843137254902f}, - {0.7576470588235295f, 0.8707450980392157f, 0.8233725490196078f}, - {0.7580392156862745f, 0.8712156862745097f, 0.8229019607843138f}, - {0.7584313725490196f, 0.871686274509804f, 0.8224313725490195f}, - {0.7588235294117647f, 0.8721568627450981f, 0.8219607843137254f}, - {0.7592156862745099f, 0.8726274509803922f, 0.8214901960784313f}, - {0.7596078431372549f, 0.8730980392156863f, 0.8210196078431372f}, - {0.76f, 0.8735686274509804f, 0.8205490196078431f}, - {0.7603921568627451f, 0.8740392156862745f, 0.820078431372549f}, - {0.7607843137254902f, 0.8745098039215686f, 0.8196078431372549f}, - {0.7611764705882353f, 0.8749803921568627f, 0.8191372549019608f}, - {0.7615686274509804f, 0.8754509803921569f, 0.8186666666666667f}, - {0.7619607843137255f, 0.875921568627451f, 0.8181960784313725f}, - {0.7623529411764706f, 0.8763921568627451f, 0.8177254901960784f}, - {0.7627450980392158f, 0.8768627450980392f, 0.8172549019607843f}, - {0.7631372549019608f, 0.8773333333333333f, 0.8167843137254902f}, - {0.7635294117647059f, 0.8778039215686274f, 0.8163137254901961f}, - {0.763921568627451f, 0.8782745098039215f, 0.815843137254902f}, - {0.764313725490196f, 0.8787450980392156f, 0.8153725490196079f}, - {0.7647058823529412f, 0.8792156862745097f, 0.8149019607843138f}, - {0.7650980392156863f, 0.879686274509804f, 0.8144313725490195f}, - {0.7654901960784314f, 0.8801568627450981f, 0.8139607843137254f}, - {0.7658823529411765f, 0.8806274509803922f, 0.8134901960784313f}, - {0.7662745098039216f, 0.8810980392156863f, 0.8130196078431372f}, - {0.7666666666666667f, 0.8815686274509804f, 0.8125490196078431f}, - {0.7670588235294118f, 0.8820392156862745f, 0.812078431372549f}, - {0.7674509803921569f, 0.8825098039215686f, 0.8116078431372549f}, - {0.7678431372549019f, 0.8829803921568627f, 0.8111372549019608f}, - {0.7682352941176471f, 0.8834509803921569f, 0.8106666666666666f}, - {0.7686274509803922f, 0.883921568627451f, 0.8101960784313725f}, - {0.7690196078431373f, 0.8843921568627451f, 0.8097254901960784f}, - {0.7694117647058824f, 0.8848627450980392f, 0.8092549019607843f}, - {0.7698039215686274f, 0.8853333333333333f, 0.8087843137254902f}, - {0.7701960784313726f, 0.8858039215686274f, 0.8083137254901961f}, - {0.7705882352941177f, 0.8862745098039215f, 0.807843137254902f}, - {0.7709803921568628f, 0.8867450980392156f, 0.8073725490196079f}, - {0.7713725490196078f, 0.8872156862745098f, 0.8069019607843138f}, - {0.7717647058823529f, 0.8876862745098039f, 0.8064313725490196f}, - {0.7721568627450981f, 0.888156862745098f, 0.8059607843137255f}, - {0.7725490196078432f, 0.8886274509803921f, 0.8054901960784314f}, - {0.7729411764705882f, 0.8890980392156862f, 0.8050196078431373f}, - {0.7733333333333333f, 0.8895686274509804f, 0.8045490196078431f}, - {0.7737254901960784f, 0.8900392156862744f, 0.8040784313725491f}, - {0.7741176470588236f, 0.8905098039215686f, 0.8036078431372549f}, - {0.7745098039215687f, 0.8909803921568628f, 0.8031372549019608f}, - {0.7749019607843137f, 0.8914509803921569f, 0.8026666666666666f}, - {0.7752941176470588f, 0.891921568627451f, 0.8021960784313725f}, - {0.775686274509804f, 0.8923921568627451f, 0.8017254901960784f}, - {0.7760784313725491f, 0.8928627450980392f, 0.8012549019607843f}, - {0.7764705882352941f, 0.8933333333333333f, 0.8007843137254902f}, - {0.7768627450980392f, 0.8938039215686274f, 0.8003137254901961f}, - {0.7772549019607844f, 0.8942745098039215f, 0.799843137254902f}, - {0.7776470588235295f, 0.8947450980392156f, 0.7993725490196079f}, - {0.7780392156862745f, 0.8952156862745098f, 0.7989019607843137f}, - {0.7784313725490196f, 0.8956862745098039f, 0.7984313725490196f}, - {0.7788235294117647f, 0.896156862745098f, 0.7979607843137255f}, - {0.7792156862745099f, 0.8966274509803921f, 0.7974901960784314f}, - {0.779607843137255f, 0.8970980392156862f, 0.7970196078431373f}, - {0.78f, 0.8975686274509803f, 0.7965490196078432f}, - {0.7803921568627451f, 0.8980392156862744f, 0.7960784313725491f}, - {0.7807843137254902f, 0.8985098039215687f, 0.7956078431372549f}, - {0.7811764705882354f, 0.8989803921568627f, 0.7951372549019609f}, - {0.7815686274509804f, 0.8994509803921569f, 0.7946666666666666f}, - {0.7819607843137255f, 0.899921568627451f, 0.7941960784313725f}, - {0.7823529411764706f, 0.9003921568627451f, 0.7937254901960784f}, - {0.7827450980392157f, 0.9008627450980392f, 0.7932549019607843f}, - {0.7831372549019608f, 0.9013333333333333f, 0.7927843137254902f}, - {0.7835294117647059f, 0.9018039215686274f, 0.7923137254901961f}, - {0.783921568627451f, 0.9022745098039215f, 0.791843137254902f}, - {0.7843137254901961f, 0.9027450980392157f, 0.7913725490196079f}, - {0.7847058823529413f, 0.9032156862745098f, 0.7909019607843137f}, - {0.7850980392156863f, 0.9036862745098039f, 0.7904313725490196f}, - {0.7854901960784314f, 0.904156862745098f, 0.7899607843137255f}, - {0.7858823529411765f, 0.9046274509803921f, 0.7894901960784314f}, - {0.7862745098039217f, 0.9050980392156862f, 0.7890196078431373f}, - {0.7866666666666667f, 0.9055686274509803f, 0.7885490196078432f}, - {0.7870588235294118f, 0.9060392156862744f, 0.7880784313725491f}, - {0.7874509803921569f, 0.9065098039215687f, 0.7876078431372548f}, - {0.787843137254902f, 0.9069803921568627f, 0.7871372549019608f}, - {0.7882352941176471f, 0.9074509803921569f, 0.7866666666666666f}, - {0.7886274509803922f, 0.907921568627451f, 0.7861960784313725f}, - {0.7890196078431373f, 0.9083921568627451f, 0.7857254901960784f}, - {0.7894117647058824f, 0.9088627450980392f, 0.7852549019607843f}, - {0.7898039215686274f, 0.9093333333333333f, 0.7847843137254902f}, - {0.7901960784313726f, 0.9098039215686274f, 0.7843137254901961f}, - {0.7905882352941177f, 0.9102745098039215f, 0.783843137254902f}, - {0.7909803921568628f, 0.9107450980392157f, 0.7833725490196078f}, - {0.7913725490196079f, 0.9112156862745098f, 0.7829019607843137f}, - {0.791764705882353f, 0.9116862745098039f, 0.7824313725490196f}, - {0.7921568627450981f, 0.912156862745098f, 0.7819607843137255f}, - {0.7925490196078432f, 0.9126274509803921f, 0.7814901960784314f}, - {0.7929411764705883f, 0.9130980392156862f, 0.7810196078431373f}, - {0.7933333333333333f, 0.9135686274509803f, 0.7805490196078432f}, - {0.7937254901960784f, 0.9140392156862744f, 0.7800784313725491f}, - {0.7941176470588236f, 0.9145098039215686f, 0.779607843137255f}, - {0.7945098039215687f, 0.9149803921568627f, 0.7791372549019608f}, - {0.7949019607843137f, 0.9154509803921568f, 0.7786666666666667f}, - {0.7952941176470588f, 0.9159215686274509f, 0.7781960784313726f}, - {0.795686274509804f, 0.916392156862745f, 0.7777254901960785f}, - {0.7960784313725491f, 0.9168627450980391f, 0.7772549019607844f}, - {0.7964705882352942f, 0.9173333333333333f, 0.7767843137254902f}, - {0.7968627450980392f, 0.9178039215686273f, 0.7763137254901962f}, - {0.7972549019607844f, 0.9182745098039216f, 0.775843137254902f}, - {0.7976470588235295f, 0.9187450980392157f, 0.7753725490196078f}, - {0.7980392156862746f, 0.9192156862745098f, 0.7749019607843137f}, - {0.7984313725490196f, 0.9196862745098039f, 0.7744313725490196f}, - {0.7988235294117647f, 0.920156862745098f, 0.7739607843137255f}, - {0.7992156862745099f, 0.9206274509803921f, 0.7734901960784314f}, - {0.799607843137255f, 0.9210980392156862f, 0.7730196078431373f}, - {0.8f, 0.9215686274509803f, 0.7725490196078432f}, - {0.8002823529411766f, 0.9210666666666666f, 0.773035294117647f}, - {0.800564705882353f, 0.9205647058823528f, 0.773521568627451f}, - {0.8008470588235295f, 0.9200627450980392f, 0.7740078431372549f}, - {0.801129411764706f, 0.9195607843137255f, 0.7744941176470589f}, - {0.8014117647058824f, 0.9190588235294117f, 0.7749803921568628f}, - {0.8016941176470589f, 0.918556862745098f, 0.7754666666666667f}, - {0.8019764705882353f, 0.9180549019607842f, 0.7759529411764706f}, - {0.8022588235294118f, 0.9175529411764706f, 0.7764392156862745f}, - {0.8025411764705883f, 0.9170509803921568f, 0.7769254901960785f}, - {0.8028235294117647f, 0.9165490196078431f, 0.7774117647058824f}, - {0.8031058823529412f, 0.9160470588235293f, 0.7778980392156863f}, - {0.8033882352941177f, 0.9155450980392156f, 0.7783843137254902f}, - {0.8036705882352941f, 0.9150431372549019f, 0.7788705882352942f}, - {0.8039529411764706f, 0.9145411764705882f, 0.7793568627450981f}, - {0.8042352941176472f, 0.9140392156862744f, 0.779843137254902f}, - {0.8045176470588236f, 0.9135372549019607f, 0.7803294117647059f}, - {0.8048000000000001f, 0.913035294117647f, 0.7808156862745098f}, - {0.8050823529411765f, 0.9125333333333333f, 0.7813019607843138f}, - {0.805364705882353f, 0.9120313725490196f, 0.7817882352941177f}, - {0.8056470588235295f, 0.9115294117647058f, 0.7822745098039215f}, - {0.8059294117647059f, 0.9110274509803921f, 0.7827607843137255f}, - {0.8062117647058824f, 0.9105254901960783f, 0.7832470588235294f}, - {0.8064941176470589f, 0.9100235294117647f, 0.7837333333333334f}, - {0.8067764705882353f, 0.9095215686274509f, 0.7842196078431373f}, - {0.8070588235294118f, 0.9090196078431372f, 0.7847058823529413f}, - {0.8073411764705882f, 0.9085176470588234f, 0.7851921568627451f}, - {0.8076235294117647f, 0.9080156862745097f, 0.785678431372549f}, - {0.8079058823529413f, 0.907513725490196f, 0.786164705882353f}, - {0.8081882352941177f, 0.9070117647058823f, 0.7866509803921569f}, - {0.8084705882352942f, 0.9065098039215685f, 0.7871372549019608f}, - {0.8087529411764707f, 0.9060078431372548f, 0.7876235294117647f}, - {0.8090352941176471f, 0.9055058823529412f, 0.7881098039215687f}, - {0.8093176470588236f, 0.9050039215686274f, 0.7885960784313726f}, - {0.8096000000000001f, 0.9045019607843137f, 0.7890823529411765f}, - {0.8098823529411765f, 0.9039999999999999f, 0.7895686274509804f}, - {0.810164705882353f, 0.9034980392156862f, 0.7900549019607843f}, - {0.8104470588235294f, 0.9029960784313725f, 0.7905411764705883f}, - {0.8107294117647059f, 0.9024941176470588f, 0.7910274509803922f}, - {0.8110117647058824f, 0.901992156862745f, 0.7915137254901962f}, - {0.8112941176470588f, 0.9014901960784313f, 0.792f}, - {0.8115764705882353f, 0.9009882352941175f, 0.7924862745098039f}, - {0.8118588235294119f, 0.9004862745098039f, 0.7929725490196079f}, - {0.8121411764705883f, 0.8999843137254901f, 0.7934588235294118f}, - {0.8124235294117648f, 0.8994823529411764f, 0.7939450980392158f}, - {0.8127058823529413f, 0.8989803921568627f, 0.7944313725490196f}, - {0.8129882352941177f, 0.8984784313725489f, 0.7949176470588235f}, - {0.8132705882352942f, 0.8979764705882353f, 0.7954039215686275f}, - {0.8135529411764706f, 0.8974745098039215f, 0.7958901960784314f}, - {0.8138352941176471f, 0.8969725490196078f, 0.7963764705882354f}, - {0.8141176470588236f, 0.896470588235294f, 0.7968627450980392f}, - {0.8144f, 0.8959686274509803f, 0.7973490196078432f}, - {0.8146823529411765f, 0.8954666666666666f, 0.7978352941176471f}, - {0.814964705882353f, 0.8949647058823529f, 0.798321568627451f}, - {0.8152470588235294f, 0.8944627450980391f, 0.798807843137255f}, - {0.815529411764706f, 0.8939607843137254f, 0.7992941176470588f}, - {0.8158117647058825f, 0.8934588235294116f, 0.7997803921568628f}, - {0.8160941176470589f, 0.892956862745098f, 0.8002666666666667f}, - {0.8163764705882354f, 0.8924549019607843f, 0.8007529411764707f}, - {0.8166588235294118f, 0.8919529411764705f, 0.8012392156862745f}, - {0.8169411764705883f, 0.8914509803921568f, 0.8017254901960784f}, - {0.8172235294117648f, 0.890949019607843f, 0.8022117647058824f}, - {0.8175058823529412f, 0.8904470588235294f, 0.8026980392156863f}, - {0.8177882352941177f, 0.8899450980392156f, 0.8031843137254903f}, - {0.8180705882352942f, 0.8894431372549019f, 0.8036705882352941f}, - {0.8183529411764706f, 0.8889411764705881f, 0.8041568627450981f}, - {0.8186352941176471f, 0.8884392156862744f, 0.804643137254902f}, - {0.8189176470588235f, 0.8879372549019607f, 0.8051294117647059f}, - {0.8192f, 0.887435294117647f, 0.8056156862745099f}, - {0.8194823529411766f, 0.8869333333333332f, 0.8061019607843137f}, - {0.819764705882353f, 0.8864313725490195f, 0.8065882352941177f}, - {0.8200470588235295f, 0.8859294117647059f, 0.8070745098039216f}, - {0.820329411764706f, 0.8854274509803921f, 0.8075607843137256f}, - {0.8206117647058824f, 0.8849254901960784f, 0.8080470588235295f}, - {0.8208941176470589f, 0.8844235294117646f, 0.8085333333333333f}, - {0.8211764705882354f, 0.8839215686274509f, 0.8090196078431373f}, - {0.8214588235294118f, 0.8834196078431371f, 0.8095058823529412f}, - {0.8217411764705883f, 0.8829176470588235f, 0.8099921568627451f}, - {0.8220235294117647f, 0.8824156862745097f, 0.810478431372549f}, - {0.8223058823529412f, 0.8819137254901961f, 0.8109647058823529f}, - {0.8225882352941176f, 0.8814117647058823f, 0.8114509803921568f}, - {0.8228705882352941f, 0.8809098039215686f, 0.8119372549019608f}, - {0.8231529411764706f, 0.8804078431372548f, 0.8124235294117647f}, - {0.823435294117647f, 0.8799058823529411f, 0.8129098039215686f}, - {0.8237176470588236f, 0.8794039215686275f, 0.8133960784313725f}, - {0.8240000000000001f, 0.8789019607843137f, 0.8138823529411765f}, - {0.8242823529411765f, 0.8784f, 0.8143686274509804f}, - {0.824564705882353f, 0.8778980392156862f, 0.8148549019607843f}, - {0.8248470588235295f, 0.8773960784313725f, 0.8153411764705882f}, - {0.8251294117647059f, 0.8768941176470588f, 0.8158274509803921f}, - {0.8254117647058824f, 0.8763921568627451f, 0.8163137254901961f}, - {0.8256941176470588f, 0.8758901960784313f, 0.8168f}, - {0.8259764705882353f, 0.8753882352941176f, 0.817286274509804f}, - {0.8262588235294118f, 0.8748862745098038f, 0.8177725490196078f}, - {0.8265411764705882f, 0.8743843137254902f, 0.8182588235294117f}, - {0.8268235294117647f, 0.8738823529411764f, 0.8187450980392157f}, - {0.8271058823529412f, 0.8733803921568627f, 0.8192313725490196f}, - {0.8273882352941176f, 0.872878431372549f, 0.8197176470588236f}, - {0.8276705882352942f, 0.8723764705882353f, 0.8202039215686274f}, - {0.8279529411764706f, 0.8718745098039216f, 0.8206901960784314f}, - {0.8282352941176471f, 0.8713725490196078f, 0.8211764705882353f}, - {0.8285176470588236f, 0.8708705882352941f, 0.8216627450980392f}, - {0.8288f, 0.8703686274509803f, 0.8221490196078431f}, - {0.8290823529411765f, 0.8698666666666666f, 0.822635294117647f}, - {0.829364705882353f, 0.8693647058823529f, 0.823121568627451f}, - {0.8296470588235294f, 0.8688627450980392f, 0.8236078431372549f}, - {0.8299294117647059f, 0.8683607843137254f, 0.8240941176470588f}, - {0.8302117647058824f, 0.8678588235294117f, 0.8245803921568627f}, - {0.8304941176470588f, 0.867356862745098f, 0.8250666666666666f}, - {0.8307764705882353f, 0.8668549019607843f, 0.8255529411764706f}, - {0.8310588235294118f, 0.8663529411764705f, 0.8260392156862745f}, - {0.8313411764705883f, 0.8658509803921568f, 0.8265254901960785f}, - {0.8316235294117648f, 0.865349019607843f, 0.8270117647058823f}, - {0.8319058823529412f, 0.8648470588235294f, 0.8274980392156862f}, - {0.8321882352941177f, 0.8643450980392157f, 0.8279843137254902f}, - {0.8324705882352942f, 0.8638431372549019f, 0.8284705882352941f}, - {0.8327529411764706f, 0.8633411764705882f, 0.828956862745098f}, - {0.8330352941176471f, 0.8628392156862744f, 0.8294431372549019f}, - {0.8333176470588236f, 0.8623372549019608f, 0.8299294117647059f}, - {0.8336f, 0.861835294117647f, 0.8304156862745098f}, - {0.8338823529411765f, 0.8613333333333333f, 0.8309019607843137f}, - {0.8341647058823529f, 0.8608313725490195f, 0.8313882352941177f}, - {0.8344470588235294f, 0.8603294117647058f, 0.8318745098039215f}, - {0.8347294117647059f, 0.8598274509803921f, 0.8323607843137255f}, - {0.8350117647058823f, 0.8593254901960784f, 0.8328470588235294f}, - {0.8352941176470589f, 0.8588235294117647f, 0.8333333333333333f}, - {0.8355764705882354f, 0.8583215686274509f, 0.8338196078431372f}, - {0.8358588235294118f, 0.8578196078431372f, 0.8343058823529411f}, - {0.8361411764705883f, 0.8573176470588235f, 0.8347921568627451f}, - {0.8364235294117648f, 0.8568156862745098f, 0.835278431372549f}, - {0.8367058823529412f, 0.856313725490196f, 0.835764705882353f}, - {0.8369882352941177f, 0.8558117647058823f, 0.8362509803921568f}, - {0.8372705882352941f, 0.8553098039215685f, 0.8367372549019607f}, - {0.8375529411764706f, 0.8548078431372549f, 0.8372235294117647f}, - {0.8378352941176471f, 0.8543058823529411f, 0.8377098039215686f}, - {0.8381176470588235f, 0.8538039215686274f, 0.8381960784313726f}, - {0.8384f, 0.8533019607843136f, 0.8386823529411764f}, - {0.8386823529411765f, 0.8528f, 0.8391686274509804f}, - {0.838964705882353f, 0.8522980392156863f, 0.8396549019607843f}, - {0.8392470588235295f, 0.8517960784313725f, 0.8401411764705882f}, - {0.8395294117647059f, 0.8512941176470588f, 0.8406274509803922f}, - {0.8398117647058824f, 0.850792156862745f, 0.841113725490196f}, - {0.8400941176470589f, 0.8502901960784313f, 0.8416f}, - {0.8403764705882353f, 0.8497882352941176f, 0.8420862745098039f}, - {0.8406588235294118f, 0.8492862745098039f, 0.8425725490196079f}, - {0.8409411764705883f, 0.8487843137254901f, 0.8430588235294117f}, - {0.8412235294117647f, 0.8482823529411764f, 0.8435450980392156f}, - {0.8415058823529412f, 0.8477803921568627f, 0.8440313725490196f}, - {0.8417882352941177f, 0.847278431372549f, 0.8445176470588235f}, - {0.8420705882352941f, 0.8467764705882352f, 0.8450039215686275f}, - {0.8423529411764706f, 0.8462745098039215f, 0.8454901960784313f}, - {0.8426352941176471f, 0.8457725490196077f, 0.8459764705882353f}, - {0.8429176470588235f, 0.845270588235294f, 0.8464627450980392f}, - {0.8432000000000001f, 0.8447686274509804f, 0.8469490196078431f}, - {0.8434823529411765f, 0.8442666666666666f, 0.8474352941176471f}, - {0.843764705882353f, 0.8437647058823529f, 0.8479215686274509f}, - {0.8440470588235295f, 0.8432627450980391f, 0.8484078431372549f}, - {0.8443294117647059f, 0.8427607843137255f, 0.8488941176470588f}, - {0.8446117647058824f, 0.8422588235294117f, 0.8493803921568628f}, - {0.8448941176470589f, 0.841756862745098f, 0.8498666666666667f}, - {0.8451764705882353f, 0.8412549019607842f, 0.8503529411764705f}, - {0.8454588235294118f, 0.8407529411764705f, 0.8508392156862745f}, - {0.8457411764705882f, 0.8402509803921567f, 0.8513254901960784f}, - {0.8460235294117647f, 0.8397490196078431f, 0.8518117647058824f}, - {0.8463058823529412f, 0.8392470588235293f, 0.8522980392156863f}, - {0.8465882352941176f, 0.8387450980392156f, 0.8527843137254902f}, - {0.8468705882352942f, 0.8382431372549018f, 0.8532705882352941f}, - {0.8471529411764707f, 0.8377411764705882f, 0.853756862745098f}, - {0.8474352941176471f, 0.8372392156862745f, 0.854243137254902f}, - {0.8477176470588236f, 0.8367372549019607f, 0.8547294117647058f}, - {0.8480000000000001f, 0.836235294117647f, 0.8552156862745098f}, - {0.8482823529411765f, 0.8357333333333332f, 0.8557019607843137f}, - {0.848564705882353f, 0.8352313725490196f, 0.8561882352941176f}, - {0.8488470588235294f, 0.8347294117647058f, 0.8566745098039216f}, - {0.8491294117647059f, 0.8342274509803921f, 0.8571607843137254f}, - {0.8494117647058824f, 0.8337254901960783f, 0.8576470588235294f}, - {0.8496941176470588f, 0.8332235294117646f, 0.8581333333333333f}, - {0.8499764705882353f, 0.832721568627451f, 0.8586196078431372f}, - {0.8502588235294118f, 0.8322196078431372f, 0.8591058823529412f}, - {0.8505411764705882f, 0.8317176470588235f, 0.859592156862745f}, - {0.8508235294117648f, 0.8312156862745097f, 0.860078431372549f}, - {0.8511058823529412f, 0.830713725490196f, 0.8605647058823529f}, - {0.8513882352941177f, 0.8302117647058823f, 0.8610509803921569f}, - {0.8516705882352942f, 0.8297098039215686f, 0.8615372549019608f}, - {0.8519529411764706f, 0.8292078431372548f, 0.8620235294117646f}, - {0.8522352941176471f, 0.8287058823529411f, 0.8625098039215686f}, - {0.8525176470588236f, 0.8282039215686274f, 0.8629960784313725f}, - {0.8528f, 0.8277019607843137f, 0.8634823529411765f}, - {0.8530823529411765f, 0.8271999999999999f, 0.8639686274509804f}, - {0.853364705882353f, 0.8266980392156862f, 0.8644549019607843f}, - {0.8536470588235294f, 0.8261960784313724f, 0.8649411764705882f}, - {0.8539294117647059f, 0.8256941176470587f, 0.8654274509803921f}, - {0.8542117647058824f, 0.825192156862745f, 0.8659137254901961f}, - {0.8544941176470588f, 0.8246901960784313f, 0.8664f}, - {0.8547764705882354f, 0.8241882352941176f, 0.8668862745098039f}, - {0.8550588235294118f, 0.8236862745098038f, 0.8673725490196078f}, - {0.8553411764705883f, 0.8231843137254902f, 0.8678588235294118f}, - {0.8556235294117648f, 0.8226823529411764f, 0.8683450980392157f}, - {0.8559058823529412f, 0.8221803921568627f, 0.8688313725490195f}, - {0.8561882352941177f, 0.8216784313725489f, 0.8693176470588235f}, - {0.8564705882352942f, 0.8211764705882352f, 0.8698039215686274f}, - {0.8567529411764706f, 0.8206745098039214f, 0.8702901960784314f}, - {0.8570352941176471f, 0.8201725490196078f, 0.8707764705882353f}, - {0.8573176470588235f, 0.819670588235294f, 0.8712627450980392f}, - {0.8576f, 0.8191686274509804f, 0.871749019607843f}, - {0.8578823529411764f, 0.8186666666666667f, 0.872235294117647f}, - {0.8581647058823529f, 0.8181647058823529f, 0.8727215686274509f}, - {0.8584470588235295f, 0.8176627450980392f, 0.8732078431372549f}, - {0.8587294117647059f, 0.8171607843137254f, 0.8736941176470587f}, - {0.8590117647058824f, 0.8166588235294118f, 0.8741803921568627f}, - {0.8592941176470589f, 0.816156862745098f, 0.8746666666666666f}, - {0.8595764705882353f, 0.8156549019607843f, 0.8751529411764705f}, - {0.8598588235294118f, 0.8151529411764705f, 0.8756392156862745f}, - {0.8601411764705883f, 0.8146509803921569f, 0.8761254901960783f}, - {0.8604235294117647f, 0.8141490196078431f, 0.8766117647058823f}, - {0.8607058823529412f, 0.8136470588235294f, 0.8770980392156862f}, - {0.8609882352941176f, 0.8131450980392156f, 0.8775843137254902f}, - {0.8612705882352941f, 0.8126431372549019f, 0.878070588235294f}, - {0.8615529411764706f, 0.8121411764705881f, 0.8785568627450979f}, - {0.861835294117647f, 0.8116392156862745f, 0.8790431372549019f}, - {0.8621176470588235f, 0.8111372549019608f, 0.8795294117647058f}, - {0.8624f, 0.810635294117647f, 0.8800156862745098f}, - {0.8626823529411765f, 0.8101333333333333f, 0.8805019607843136f}, - {0.862964705882353f, 0.8096313725490196f, 0.8809882352941176f}, - {0.8632470588235295f, 0.8091294117647059f, 0.8814745098039215f}, - {0.8635294117647059f, 0.8086274509803921f, 0.8819607843137254f}, - {0.8638117647058824f, 0.8081254901960784f, 0.8824470588235294f}, - {0.8640941176470588f, 0.8076235294117646f, 0.8829333333333332f}, - {0.8643764705882353f, 0.8071215686274509f, 0.8834196078431372f}, - {0.8646588235294118f, 0.8066196078431372f, 0.8839058823529411f}, - {0.8649411764705882f, 0.8061176470588235f, 0.8843921568627451f}, - {0.8652235294117647f, 0.8056156862745097f, 0.884878431372549f}, - {0.8655058823529412f, 0.805113725490196f, 0.8853647058823528f}, - {0.8657882352941176f, 0.8046117647058824f, 0.8858509803921568f}, - {0.8660705882352941f, 0.8041098039215686f, 0.8863372549019607f}, - {0.8663529411764705f, 0.8036078431372549f, 0.8868235294117647f}, - {0.8666352941176471f, 0.8031058823529411f, 0.8873098039215686f}, - {0.8669176470588236f, 0.8026039215686274f, 0.8877960784313725f}, - {0.8672f, 0.8021019607843136f, 0.8882823529411764f}, - {0.8674823529411765f, 0.8016f, 0.8887686274509803f}, - {0.867764705882353f, 0.8010980392156862f, 0.8892549019607843f}, - {0.8680470588235294f, 0.8005960784313725f, 0.8897411764705881f}, - {0.8683294117647059f, 0.8000941176470587f, 0.8902274509803921f}, - {0.8686117647058824f, 0.7995921568627451f, 0.890713725490196f}, - {0.8688941176470588f, 0.7990901960784313f, 0.8912f}, - {0.8691764705882353f, 0.7985882352941176f, 0.8916862745098039f}, - {0.8694588235294118f, 0.7980862745098039f, 0.8921725490196077f}, - {0.8697411764705882f, 0.7975843137254901f, 0.8926588235294117f}, - {0.8700235294117648f, 0.7970823529411765f, 0.8931450980392156f}, - {0.8703058823529412f, 0.7965803921568627f, 0.8936313725490196f}, - {0.8705882352941177f, 0.796078431372549f, 0.8941176470588235f}, - {0.8710901960784314f, 0.7962980392156862f, 0.8931450980392156f}, - {0.8715921568627452f, 0.7965176470588234f, 0.8921725490196077f}, - {0.8720941176470588f, 0.7967372549019607f, 0.8911999999999999f}, - {0.8725960784313725f, 0.796956862745098f, 0.8902274509803921f}, - {0.8730980392156863f, 0.7971764705882353f, 0.8892549019607843f}, - {0.8736f, 0.7973960784313725f, 0.8882823529411764f}, - {0.8741019607843138f, 0.7976156862745097f, 0.8873098039215686f}, - {0.8746039215686274f, 0.797835294117647f, 0.8863372549019607f}, - {0.8751058823529412f, 0.7980549019607842f, 0.8853647058823528f}, - {0.8756078431372549f, 0.7982745098039216f, 0.884392156862745f}, - {0.8761098039215687f, 0.7984941176470588f, 0.8834196078431372f}, - {0.8766117647058824f, 0.798713725490196f, 0.8824470588235294f}, - {0.8771137254901961f, 0.7989333333333333f, 0.8814745098039215f}, - {0.8776156862745098f, 0.7991529411764705f, 0.8805019607843136f}, - {0.8781176470588236f, 0.7993725490196077f, 0.8795294117647058f}, - {0.8786196078431373f, 0.7995921568627451f, 0.8785568627450979f}, - {0.879121568627451f, 0.7998117647058823f, 0.8775843137254902f}, - {0.8796235294117647f, 0.8000313725490196f, 0.8766117647058823f}, - {0.8801254901960784f, 0.8002509803921568f, 0.8756392156862745f}, - {0.8806274509803922f, 0.800470588235294f, 0.8746666666666666f}, - {0.8811294117647059f, 0.8006901960784313f, 0.8736941176470587f}, - {0.8816313725490197f, 0.8009098039215686f, 0.8727215686274509f}, - {0.8821333333333333f, 0.8011294117647059f, 0.871749019607843f}, - {0.8826352941176471f, 0.8013490196078431f, 0.8707764705882353f}, - {0.8831372549019608f, 0.8015686274509803f, 0.8698039215686274f}, - {0.8836392156862746f, 0.8017882352941176f, 0.8688313725490195f}, - {0.8841411764705882f, 0.8020078431372548f, 0.8678588235294117f}, - {0.884643137254902f, 0.8022274509803922f, 0.8668862745098038f}, - {0.8851450980392157f, 0.8024470588235294f, 0.865913725490196f}, - {0.8856470588235295f, 0.8026666666666666f, 0.8649411764705881f}, - {0.8861490196078432f, 0.8028862745098039f, 0.8639686274509804f}, - {0.8866509803921568f, 0.8031058823529411f, 0.8629960784313725f}, - {0.8871529411764706f, 0.8033254901960784f, 0.8620235294117646f}, - {0.8876549019607843f, 0.8035450980392156f, 0.8610509803921568f}, - {0.8881568627450981f, 0.8037647058823529f, 0.8600784313725489f}, - {0.8886588235294118f, 0.8039843137254902f, 0.859105882352941f}, - {0.8891607843137255f, 0.8042039215686274f, 0.8581333333333332f}, - {0.8896627450980392f, 0.8044235294117646f, 0.8571607843137254f}, - {0.890164705882353f, 0.8046431372549019f, 0.8561882352941176f}, - {0.8906666666666667f, 0.8048627450980391f, 0.8552156862745097f}, - {0.8911686274509805f, 0.8050823529411765f, 0.8542431372549019f}, - {0.8916705882352941f, 0.8053019607843137f, 0.853270588235294f}, - {0.8921725490196079f, 0.805521568627451f, 0.8522980392156861f}, - {0.8926745098039216f, 0.8057411764705882f, 0.8513254901960783f}, - {0.8931764705882353f, 0.8059607843137254f, 0.8503529411764705f}, - {0.8936784313725491f, 0.8061803921568627f, 0.8493803921568627f}, - {0.8941803921568627f, 0.8064f, 0.8484078431372548f}, - {0.8946823529411765f, 0.8066196078431372f, 0.847435294117647f}, - {0.8951843137254902f, 0.8068392156862745f, 0.8464627450980391f}, - {0.895686274509804f, 0.8070588235294117f, 0.8454901960784312f}, - {0.8961882352941177f, 0.807278431372549f, 0.8445176470588235f}, - {0.8966901960784314f, 0.8074980392156862f, 0.8435450980392156f}, - {0.8971921568627451f, 0.8077176470588235f, 0.8425725490196078f}, - {0.8976941176470589f, 0.8079372549019608f, 0.8415999999999999f}, - {0.8981960784313726f, 0.808156862745098f, 0.840627450980392f}, - {0.8986980392156864f, 0.8083764705882353f, 0.8396549019607842f}, - {0.8992f, 0.8085960784313725f, 0.8386823529411763f}, - {0.8997019607843137f, 0.8088156862745097f, 0.8377098039215686f}, - {0.9002039215686275f, 0.8090352941176471f, 0.8367372549019607f}, - {0.9007058823529412f, 0.8092549019607843f, 0.8357647058823529f}, - {0.901207843137255f, 0.8094745098039215f, 0.834792156862745f}, - {0.9017098039215686f, 0.8096941176470588f, 0.8338196078431371f}, - {0.9022117647058824f, 0.809913725490196f, 0.8328470588235293f}, - {0.9027137254901961f, 0.8101333333333333f, 0.8318745098039215f}, - {0.9032156862745099f, 0.8103529411764706f, 0.8309019607843137f}, - {0.9037176470588236f, 0.8105725490196078f, 0.8299294117647058f}, - {0.9042196078431373f, 0.8107921568627451f, 0.8289568627450979f}, - {0.904721568627451f, 0.8110117647058823f, 0.8279843137254901f}, - {0.9052235294117648f, 0.8112313725490196f, 0.8270117647058822f}, - {0.9057254901960785f, 0.8114509803921568f, 0.8260392156862744f}, - {0.9062274509803923f, 0.811670588235294f, 0.8250666666666666f}, - {0.9067294117647059f, 0.8118901960784314f, 0.8240941176470588f}, - {0.9072313725490196f, 0.8121098039215686f, 0.8231215686274509f}, - {0.9077333333333334f, 0.8123294117647059f, 0.822149019607843f}, - {0.9082352941176471f, 0.8125490196078431f, 0.8211764705882352f}, - {0.9087372549019608f, 0.8127686274509803f, 0.8202039215686273f}, - {0.9092392156862745f, 0.8129882352941176f, 0.8192313725490195f}, - {0.9097411764705883f, 0.8132078431372549f, 0.8182588235294117f}, - {0.910243137254902f, 0.8134274509803922f, 0.8172862745098038f}, - {0.9107450980392158f, 0.8136470588235294f, 0.816313725490196f}, - {0.9112470588235295f, 0.8138666666666666f, 0.8153411764705881f}, - {0.9117490196078432f, 0.8140862745098039f, 0.8143686274509803f}, - {0.9122509803921569f, 0.8143058823529411f, 0.8133960784313725f}, - {0.9127529411764705f, 0.8145254901960783f, 0.8124235294117647f}, - {0.9132549019607843f, 0.8147450980392157f, 0.8114509803921569f}, - {0.913756862745098f, 0.8149647058823529f, 0.810478431372549f}, - {0.9142588235294118f, 0.8151843137254902f, 0.8095058823529412f}, - {0.9147607843137255f, 0.8154039215686274f, 0.8085333333333333f}, - {0.9152627450980392f, 0.8156235294117646f, 0.8075607843137255f}, - {0.9157647058823529f, 0.8158431372549019f, 0.8065882352941176f}, - {0.9162666666666667f, 0.8160627450980391f, 0.8056156862745099f}, - {0.9167686274509804f, 0.8162823529411765f, 0.804643137254902f}, - {0.9172705882352941f, 0.8165019607843137f, 0.8036705882352941f}, - {0.9177725490196078f, 0.8167215686274509f, 0.8026980392156863f}, - {0.9182745098039216f, 0.8169411764705882f, 0.8017254901960784f}, - {0.9187764705882353f, 0.8171607843137254f, 0.8007529411764706f}, - {0.919278431372549f, 0.8173803921568626f, 0.7997803921568627f}, - {0.9197803921568628f, 0.8176f, 0.798807843137255f}, - {0.9202823529411764f, 0.8178196078431372f, 0.7978352941176471f}, - {0.9207843137254902f, 0.8180392156862745f, 0.7968627450980392f}, - {0.9212862745098039f, 0.8182588235294117f, 0.7958901960784314f}, - {0.9217882352941177f, 0.8184784313725489f, 0.7949176470588235f}, - {0.9222901960784313f, 0.8186980392156862f, 0.7939450980392156f}, - {0.9227921568627451f, 0.8189176470588235f, 0.7929725490196078f}, - {0.9232941176470588f, 0.8191372549019608f, 0.792f}, - {0.9237960784313726f, 0.819356862745098f, 0.7910274509803922f}, - {0.9242980392156863f, 0.8195764705882352f, 0.7900549019607843f}, - {0.9248f, 0.8197960784313725f, 0.7890823529411765f}, - {0.9253019607843137f, 0.8200156862745097f, 0.7881098039215686f}, - {0.9258039215686275f, 0.8202352941176471f, 0.7871372549019607f}, - {0.9263058823529412f, 0.8204549019607843f, 0.7861647058823529f}, - {0.926807843137255f, 0.8206745098039215f, 0.7851921568627451f}, - {0.9273098039215686f, 0.8208941176470588f, 0.7842196078431373f}, - {0.9278117647058823f, 0.821113725490196f, 0.7832470588235294f}, - {0.9283137254901961f, 0.8213333333333332f, 0.7822745098039215f}, - {0.9288156862745098f, 0.8215529411764706f, 0.7813019607843137f}, - {0.9293176470588236f, 0.8217725490196078f, 0.7803294117647058f}, - {0.9298196078431372f, 0.8219921568627451f, 0.779356862745098f}, - {0.930321568627451f, 0.8222117647058823f, 0.7783843137254902f}, - {0.9308235294117647f, 0.8224313725490195f, 0.7774117647058824f}, - {0.9313254901960785f, 0.8226509803921568f, 0.7764392156862745f}, - {0.9318274509803922f, 0.822870588235294f, 0.7754666666666666f}, - {0.9323294117647059f, 0.8230901960784314f, 0.7744941176470588f}, - {0.9328313725490196f, 0.8233098039215686f, 0.7735215686274509f}, - {0.9333333333333333f, 0.8235294117647058f, 0.7725490196078431f}, - {0.9338352941176471f, 0.8237490196078431f, 0.7715764705882353f}, - {0.9343372549019608f, 0.8239686274509803f, 0.7706039215686274f}, - {0.9348392156862745f, 0.8241882352941177f, 0.7696313725490196f}, - {0.9353411764705882f, 0.8244078431372549f, 0.7686588235294117f}, - {0.935843137254902f, 0.8246274509803921f, 0.7676862745098039f}, - {0.9363450980392157f, 0.8248470588235294f, 0.7667137254901961f}, - {0.9368470588235295f, 0.8250666666666666f, 0.7657411764705881f}, - {0.9373490196078431f, 0.8252862745098039f, 0.7647686274509804f}, - {0.9378509803921569f, 0.8255058823529411f, 0.7637960784313725f}, - {0.9383529411764706f, 0.8257254901960784f, 0.7628235294117647f}, - {0.9388549019607844f, 0.8259450980392157f, 0.7618509803921568f}, - {0.9393568627450981f, 0.8261647058823529f, 0.760878431372549f}, - {0.9398588235294117f, 0.8263843137254901f, 0.7599058823529412f}, - {0.9403607843137255f, 0.8266039215686274f, 0.7589333333333332f}, - {0.9408627450980392f, 0.8268235294117646f, 0.7579607843137255f}, - {0.941364705882353f, 0.827043137254902f, 0.7569882352941176f}, - {0.9418666666666666f, 0.8272627450980392f, 0.7560156862745098f}, - {0.9423686274509804f, 0.8274823529411764f, 0.7550431372549019f}, - {0.9428705882352941f, 0.8277019607843137f, 0.754070588235294f}, - {0.9433725490196079f, 0.8279215686274509f, 0.7530980392156863f}, - {0.9438745098039216f, 0.8281411764705882f, 0.7521254901960783f}, - {0.9443764705882354f, 0.8283607843137255f, 0.7511529411764706f}, - {0.944878431372549f, 0.8285803921568627f, 0.7501803921568627f}, - {0.9453803921568628f, 0.8288f, 0.7492078431372549f}, - {0.9458823529411765f, 0.8290196078431372f, 0.748235294117647f}, - {0.9463843137254903f, 0.8292392156862745f, 0.7472627450980391f}, - {0.9468862745098039f, 0.8294588235294117f, 0.7462901960784314f}, - {0.9473882352941176f, 0.8296784313725489f, 0.7453176470588235f}, - {0.9478901960784314f, 0.8298980392156863f, 0.7443450980392157f}, - {0.9483921568627451f, 0.8301176470588235f, 0.7433725490196078f}, - {0.9488941176470589f, 0.8303372549019608f, 0.7424f}, - {0.9493960784313726f, 0.830556862745098f, 0.7414274509803921f}, - {0.9498980392156863f, 0.8307764705882352f, 0.7404549019607842f}, - {0.9504f, 0.8309960784313726f, 0.7394823529411765f}, - {0.9509019607843138f, 0.8312156862745098f, 0.7385098039215686f}, - {0.9514039215686275f, 0.831435294117647f, 0.7375372549019608f}, - {0.9519058823529412f, 0.8316549019607843f, 0.7365647058823529f}, - {0.9524078431372549f, 0.8318745098039215f, 0.735592156862745f}, - {0.9529098039215687f, 0.8320941176470588f, 0.7346196078431372f}, - {0.9534117647058824f, 0.832313725490196f, 0.7336470588235293f}, - {0.9539137254901962f, 0.8325333333333333f, 0.7326745098039216f}, - {0.9544156862745098f, 0.8327529411764706f, 0.7317019607843137f}, - {0.9549176470588235f, 0.8329725490196078f, 0.7307294117647058f}, - {0.9554196078431373f, 0.8331921568627451f, 0.729756862745098f}, - {0.955921568627451f, 0.8334117647058823f, 0.7287843137254901f}, - {0.9564235294117648f, 0.8336313725490195f, 0.7278117647058823f}, - {0.9569254901960784f, 0.8338509803921569f, 0.7268392156862744f}, - {0.9574274509803922f, 0.8340705882352941f, 0.7258666666666667f}, - {0.9579294117647059f, 0.8342901960784314f, 0.7248941176470588f}, - {0.9584313725490197f, 0.8345098039215686f, 0.7239215686274509f}, - {0.9589333333333334f, 0.8347294117647058f, 0.7229490196078431f}, - {0.959435294117647f, 0.8349490196078431f, 0.7219764705882352f}, - {0.9599372549019608f, 0.8351686274509804f, 0.7210039215686274f}, - {0.9604392156862745f, 0.8353882352941177f, 0.7200313725490195f}, - {0.9609411764705883f, 0.8356078431372549f, 0.7190588235294118f}, - {0.961443137254902f, 0.8358274509803921f, 0.7180862745098039f}, - {0.9619450980392157f, 0.8360470588235294f, 0.717113725490196f}, - {0.9624470588235294f, 0.8362666666666666f, 0.7161411764705882f}, - {0.9629490196078432f, 0.836486274509804f, 0.7151686274509803f}, - {0.9634509803921569f, 0.8367058823529412f, 0.7141960784313726f}, - {0.9639529411764707f, 0.8369254901960784f, 0.7132235294117646f}, - {0.9644549019607843f, 0.8371450980392157f, 0.7122509803921568f}, - {0.9649568627450981f, 0.8373647058823529f, 0.711278431372549f}, - {0.9654588235294118f, 0.8375843137254901f, 0.7103058823529411f}, - {0.9659607843137256f, 0.8378039215686275f, 0.7093333333333333f}, - {0.9664627450980392f, 0.8380235294117647f, 0.7083607843137254f}, - {0.966964705882353f, 0.838243137254902f, 0.7073882352941177f}, - {0.9674666666666667f, 0.8384627450980392f, 0.7064156862745097f}, - {0.9679686274509804f, 0.8386823529411764f, 0.7054431372549019f}, - {0.9684705882352942f, 0.8389019607843137f, 0.7044705882352941f}, - {0.9689725490196079f, 0.8391215686274509f, 0.7034980392156862f}, - {0.9694745098039216f, 0.8393411764705883f, 0.7025254901960784f}, - {0.9699764705882353f, 0.8395607843137255f, 0.7015529411764705f}, - {0.9704784313725491f, 0.8397803921568627f, 0.7005803921568627f}, - {0.9709803921568628f, 0.84f, 0.6996078431372548f}, - {0.9714823529411765f, 0.8402196078431372f, 0.698635294117647f}, - {0.9719843137254902f, 0.8404392156862744f, 0.6976627450980392f}, - {0.972486274509804f, 0.8406588235294118f, 0.6966901960784313f}, - {0.9729882352941177f, 0.840878431372549f, 0.6957176470588234f}, - {0.9734901960784315f, 0.8410980392156863f, 0.6947450980392156f}, - {0.9739921568627452f, 0.8413176470588235f, 0.6937725490196078f}, - {0.9744941176470588f, 0.8415372549019607f, 0.6928f}, - {0.9749960784313726f, 0.841756862745098f, 0.6918274509803921f}, - {0.9754980392156863f, 0.8419764705882353f, 0.6908549019607843f}, - {0.976f, 0.8421960784313725f, 0.6898823529411765f}, - {0.9765019607843137f, 0.8424156862745098f, 0.6889098039215686f}, - {0.9770039215686275f, 0.842635294117647f, 0.6879372549019608f}, - {0.9775058823529412f, 0.8428549019607843f, 0.6869647058823529f}, - {0.9780078431372549f, 0.8430745098039215f, 0.6859921568627452f}, - {0.9785098039215686f, 0.8432941176470587f, 0.6850196078431373f}, - {0.9790117647058824f, 0.8435137254901961f, 0.6840470588235295f}, - {0.9795137254901961f, 0.8437333333333333f, 0.6830745098039216f}, - {0.9800156862745097f, 0.8439529411764706f, 0.6821019607843137f}, - {0.9805176470588235f, 0.8441725490196078f, 0.681129411764706f}, - {0.9810196078431372f, 0.844392156862745f, 0.680156862745098f}, - {0.981521568627451f, 0.8446117647058823f, 0.6791843137254903f}, - {0.9820235294117647f, 0.8448313725490195f, 0.6782117647058824f}, - {0.9825254901960785f, 0.8450509803921569f, 0.6772392156862745f}, - {0.9830274509803921f, 0.8452705882352941f, 0.6762666666666667f}, - {0.9835294117647059f, 0.8454901960784313f, 0.6752941176470588f}, - {0.9840313725490196f, 0.8457098039215686f, 0.6743215686274511f}, - {0.9845333333333334f, 0.8459294117647058f, 0.6733490196078431f}, - {0.985035294117647f, 0.8461490196078431f, 0.6723764705882354f}, - {0.9855372549019608f, 0.8463686274509804f, 0.6714039215686275f}, - {0.9860392156862745f, 0.8465882352941176f, 0.6704313725490196f}, - {0.9865411764705883f, 0.8468078431372549f, 0.6694588235294118f}, - {0.987043137254902f, 0.8470274509803921f, 0.6684862745098039f}, - {0.9875450980392158f, 0.8472470588235294f, 0.6675137254901962f}, - {0.9880470588235294f, 0.8474666666666666f, 0.6665411764705883f}, - {0.9885490196078431f, 0.8476862745098039f, 0.6655686274509804f}, - {0.9890509803921569f, 0.8479058823529412f, 0.6645960784313726f}, - {0.9895529411764706f, 0.8481254901960784f, 0.6636235294117647f}, - {0.9900549019607843f, 0.8483450980392157f, 0.6626509803921569f}, - {0.990556862745098f, 0.8485647058823529f, 0.661678431372549f}, - {0.9910588235294118f, 0.8487843137254901f, 0.6607058823529413f}, - {0.9915607843137255f, 0.8490039215686275f, 0.6597333333333334f}, - {0.9920627450980393f, 0.8492235294117647f, 0.6587607843137255f}, - {0.9925647058823529f, 0.849443137254902f, 0.6577882352941177f}, - {0.9930666666666667f, 0.8496627450980392f, 0.6568156862745098f}, - {0.9935686274509804f, 0.8498823529411764f, 0.655843137254902f}, - {0.9940705882352942f, 0.8501019607843137f, 0.6548705882352941f}, - {0.9945725490196079f, 0.850321568627451f, 0.6538980392156863f}, - {0.9950745098039215f, 0.8505411764705882f, 0.6529254901960785f}, - {0.9955764705882353f, 0.8507607843137255f, 0.6519529411764706f}, - {0.996078431372549f, 0.8509803921568627f, 0.6509803921568628f}}; - -float palette_blue_to_yellow[1001][3]={{0.f, 0.f, 1.f}, {0.001f, 0.001f, 0.999f}, {0.002f, 0.002f, 0.998f}, - {0.003f, 0.003f, 0.997f}, {0.004f, 0.004f, 0.996f}, {0.005f, 0.005f, 0.995f}, - {0.006f, 0.006f, 0.994f}, {0.007f, 0.007f, 0.993f}, {0.008f, 0.008f, 0.992f}, - {0.009000000000000001f, 0.009000000000000001f, 0.991f}, {0.01f, 0.01f, 0.99f}, - {0.011f, 0.011f, 0.989f}, {0.012f, 0.012f, 0.988f}, - {0.013000000000000001f, 0.013000000000000001f, 0.987f}, {0.014f, 0.014f, 0.986f}, - {0.015f, 0.015f, 0.985f}, {0.016f, 0.016f, 0.984f}, {0.017f, 0.017f, 0.983f}, - {0.018000000000000002f, 0.018000000000000002f, 0.982f}, {0.019f, 0.019f, 0.981f}, - {0.02f, 0.02f, 0.98f}, {0.021f, 0.021f, 0.979f}, {0.022f, 0.022f, 0.978f}, - {0.023f, 0.023f, 0.977f}, {0.024f, 0.024f, 0.976f}, {0.025f, 0.025f, 0.975f}, - {0.026000000000000002f, 0.026000000000000002f, 0.974f}, {0.027f, 0.027f, 0.973f}, - {0.028f, 0.028f, 0.972f}, {0.029f, 0.029f, 0.971f}, {0.03f, 0.03f, 0.97f}, - {0.031f, 0.031f, 0.969f}, {0.032f, 0.032f, 0.968f}, {0.033f, 0.033f, 0.967f}, - {0.034f, 0.034f, 0.966f}, {0.035f, 0.035f, 0.965f}, - {0.036000000000000004f, 0.036000000000000004f, 0.964f}, {0.037f, 0.037f, 0.963f}, - {0.038f, 0.038f, 0.962f}, {0.039f, 0.039f, 0.961f}, {0.04f, 0.04f, 0.96f}, - {0.041f, 0.041f, 0.959f}, {0.042f, 0.042f, 0.958f}, - {0.043000000000000003f, 0.043000000000000003f, 0.957f}, {0.044f, 0.044f, 0.956f}, - {0.045f, 0.045f, 0.955f}, {0.046f, 0.046f, 0.954f}, {0.047f, 0.047f, 0.953f}, - {0.048f, 0.048f, 0.952f}, {0.049f, 0.049f, 0.951f}, {0.05f, 0.05f, 0.95f}, - {0.051000000000000004f, 0.051000000000000004f, 0.949f}, - {0.052000000000000005f, 0.052000000000000005f, 0.948f}, {0.053f, 0.053f, 0.947f}, - {0.054f, 0.054f, 0.946f}, {0.055f, 0.055f, 0.945f}, {0.056f, 0.056f, 0.944f}, - {0.057f, 0.057f, 0.943f}, {0.058f, 0.058f, 0.942f}, - {0.059000000000000004f, 0.059000000000000004f, 0.941f}, {0.06f, 0.06f, 0.94f}, - {0.061f, 0.061f, 0.9390000000000001f}, {0.062f, 0.062f, 0.938f}, - {0.063f, 0.063f, 0.937f}, {0.064f, 0.064f, 0.9359999999999999f}, - {0.065f, 0.065f, 0.935f}, {0.066f, 0.066f, 0.9339999999999999f}, - {0.067f, 0.067f, 0.933f}, {0.068f, 0.068f, 0.9319999999999999f}, - {0.069f, 0.069f, 0.931f}, {0.07f, 0.07f, 0.9299999999999999f}, - {0.07100000000000001f, 0.07100000000000001f, 0.929f}, - {0.07200000000000001f, 0.07200000000000001f, 0.9279999999999999f}, - {0.073f, 0.073f, 0.927f}, {0.074f, 0.074f, 0.926f}, {0.075f, 0.075f, 0.925f}, - {0.076f, 0.076f, 0.924f}, {0.077f, 0.077f, 0.923f}, {0.078f, 0.078f, 0.922f}, - {0.079f, 0.079f, 0.921f}, {0.08f, 0.08f, 0.92f}, {0.081f, 0.081f, 0.919f}, - {0.082f, 0.082f, 0.918f}, {0.083f, 0.083f, 0.917f}, {0.084f, 0.084f, 0.916f}, - {0.085f, 0.085f, 0.915f}, {0.08600000000000001f, 0.08600000000000001f, 0.914f}, - {0.08700000000000001f, 0.08700000000000001f, 0.913f}, {0.088f, 0.088f, 0.912f}, - {0.089f, 0.089f, 0.911f}, {0.09f, 0.09f, 0.91f}, {0.091f, 0.091f, 0.909f}, - {0.092f, 0.092f, 0.908f}, {0.093f, 0.093f, 0.907f}, {0.094f, 0.094f, 0.906f}, - {0.095f, 0.095f, 0.905f}, {0.096f, 0.096f, 0.904f}, {0.097f, 0.097f, 0.903f}, - {0.098f, 0.098f, 0.902f}, {0.099f, 0.099f, 0.901f}, {0.1f, 0.1f, 0.9f}, - {0.101f, 0.101f, 0.899f}, {0.10200000000000001f, 0.10200000000000001f, 0.898f}, - {0.10300000000000001f, 0.10300000000000001f, 0.897f}, - {0.10400000000000001f, 0.10400000000000001f, 0.896f}, {0.105f, 0.105f, 0.895f}, - {0.106f, 0.106f, 0.894f}, {0.107f, 0.107f, 0.893f}, {0.108f, 0.108f, 0.892f}, - {0.109f, 0.109f, 0.891f}, {0.11f, 0.11f, 0.89f}, {0.111f, 0.111f, 0.889f}, - {0.112f, 0.112f, 0.888f}, {0.113f, 0.113f, 0.887f}, {0.114f, 0.114f, 0.886f}, - {0.115f, 0.115f, 0.885f}, {0.116f, 0.116f, 0.884f}, {0.117f, 0.117f, 0.883f}, - {0.11800000000000001f, 0.11800000000000001f, 0.882f}, - {0.11900000000000001f, 0.11900000000000001f, 0.881f}, {0.12f, 0.12f, 0.88f}, - {0.121f, 0.121f, 0.879f}, {0.122f, 0.122f, 0.878f}, {0.123f, 0.123f, 0.877f}, - {0.124f, 0.124f, 0.876f}, {0.125f, 0.125f, 0.875f}, {0.126f, 0.126f, 0.874f}, - {0.127f, 0.127f, 0.873f}, {0.128f, 0.128f, 0.872f}, {0.129f, 0.129f, 0.871f}, - {0.13f, 0.13f, 0.87f}, {0.131f, 0.131f, 0.869f}, {0.132f, 0.132f, 0.868f}, - {0.133f, 0.133f, 0.867f}, {0.134f, 0.134f, 0.866f}, {0.135f, 0.135f, 0.865f}, - {0.136f, 0.136f, 0.864f}, {0.137f, 0.137f, 0.863f}, {0.138f, 0.138f, 0.862f}, - {0.139f, 0.139f, 0.861f}, {0.14f, 0.14f, 0.86f}, {0.14100000000000001f, - 0.14100000000000001f, 0.859f}, {0.14200000000000002f, 0.14200000000000002f, - 0.858f}, {0.14300000000000002f, 0.14300000000000002f, 0.857f}, - {0.14400000000000002f, 0.14400000000000002f, 0.856f}, {0.145f, 0.145f, 0.855f}, - {0.146f, 0.146f, 0.854f}, {0.147f, 0.147f, 0.853f}, {0.148f, 0.148f, 0.852f}, - {0.149f, 0.149f, 0.851f}, {0.15f, 0.15f, 0.85f}, {0.151f, 0.151f, 0.849f}, - {0.152f, 0.152f, 0.848f}, {0.153f, 0.153f, 0.847f}, {0.154f, 0.154f, 0.846f}, - {0.155f, 0.155f, 0.845f}, {0.156f, 0.156f, 0.844f}, {0.157f, 0.157f, 0.843f}, - {0.158f, 0.158f, 0.842f}, {0.159f, 0.159f, 0.841f}, {0.16f, 0.16f, 0.84f}, - {0.161f, 0.161f, 0.839f}, {0.162f, 0.162f, 0.838f}, {0.163f, 0.163f, 0.837f}, - {0.164f, 0.164f, 0.836f}, {0.165f, 0.165f, 0.835f}, {0.166f, 0.166f, 0.834f}, - {0.167f, 0.167f, 0.833f}, {0.168f, 0.168f, 0.832f}, {0.169f, 0.169f, 0.831f}, - {0.17f, 0.17f, 0.83f}, {0.171f, 0.171f, 0.829f}, {0.17200000000000001f, - 0.17200000000000001f, 0.828f}, {0.17300000000000001f, 0.17300000000000001f, - 0.827f}, {0.17400000000000002f, 0.17400000000000002f, 0.826f}, - {0.17500000000000002f, 0.17500000000000002f, 0.825f}, - {0.176f, 0.176f, 0.8240000000000001f}, {0.177f, 0.177f, 0.823f}, - {0.178f, 0.178f, 0.8220000000000001f}, {0.179f, 0.179f, 0.821f}, - {0.18f, 0.18f, 0.8200000000000001f}, {0.181f, 0.181f, 0.819f}, - {0.182f, 0.182f, 0.8180000000000001f}, {0.183f, 0.183f, 0.817f}, - {0.184f, 0.184f, 0.8160000000000001f}, {0.185f, 0.185f, 0.815f}, - {0.186f, 0.186f, 0.8140000000000001f}, {0.187f, 0.187f, 0.813f}, - {0.188f, 0.188f, 0.812f}, {0.189f, 0.189f, 0.8109999999999999f}, - {0.19f, 0.19f, 0.81f}, {0.191f, 0.191f, 0.8089999999999999f}, - {0.192f, 0.192f, 0.808f}, {0.193f, 0.193f, 0.8069999999999999f}, - {0.194f, 0.194f, 0.806f}, {0.195f, 0.195f, 0.8049999999999999f}, - {0.196f, 0.196f, 0.804f}, {0.197f, 0.197f, 0.8029999999999999f}, - {0.198f, 0.198f, 0.802f}, {0.199f, 0.199f, 0.8009999999999999f}, {0.2f, 0.2f, 0.8f}, - {0.201f, 0.201f, 0.7989999999999999f}, {0.202f, 0.202f, 0.798f}, - {0.203f, 0.203f, 0.7969999999999999f}, {0.20400000000000001f, - 0.20400000000000001f, 0.796f}, {0.20500000000000002f, 0.20500000000000002f, - 0.7949999999999999f}, {0.20600000000000002f, 0.20600000000000002f, 0.794f}, - {0.20700000000000002f, 0.20700000000000002f, 0.7929999999999999f}, - {0.20800000000000002f, 0.20800000000000002f, 0.792f}, {0.209f, 0.209f, 0.791f}, - {0.21f, 0.21f, 0.79f}, {0.211f, 0.211f, 0.789f}, {0.212f, 0.212f, 0.788f}, - {0.213f, 0.213f, 0.787f}, {0.214f, 0.214f, 0.786f}, {0.215f, 0.215f, 0.785f}, - {0.216f, 0.216f, 0.784f}, {0.217f, 0.217f, 0.783f}, {0.218f, 0.218f, 0.782f}, - {0.219f, 0.219f, 0.781f}, {0.22f, 0.22f, 0.78f}, {0.221f, 0.221f, 0.779f}, - {0.222f, 0.222f, 0.778f}, {0.223f, 0.223f, 0.777f}, {0.224f, 0.224f, 0.776f}, - {0.225f, 0.225f, 0.775f}, {0.226f, 0.226f, 0.774f}, {0.227f, 0.227f, 0.773f}, - {0.228f, 0.228f, 0.772f}, {0.229f, 0.229f, 0.771f}, {0.23f, 0.23f, 0.77f}, - {0.231f, 0.231f, 0.769f}, {0.232f, 0.232f, 0.768f}, {0.233f, 0.233f, 0.767f}, - {0.234f, 0.234f, 0.766f}, {0.23500000000000001f, 0.23500000000000001f, 0.765f}, - {0.23600000000000002f, 0.23600000000000002f, 0.764f}, - {0.23700000000000002f, 0.23700000000000002f, 0.763f}, - {0.23800000000000002f, 0.23800000000000002f, 0.762f}, - {0.23900000000000002f, 0.23900000000000002f, 0.761f}, {0.24f, 0.24f, 0.76f}, - {0.241f, 0.241f, 0.759f}, {0.242f, 0.242f, 0.758f}, {0.243f, 0.243f, 0.757f}, - {0.244f, 0.244f, 0.756f}, {0.245f, 0.245f, 0.755f}, {0.246f, 0.246f, 0.754f}, - {0.247f, 0.247f, 0.753f}, {0.248f, 0.248f, 0.752f}, {0.249f, 0.249f, 0.751f}, - {0.25f, 0.25f, 0.75f}, {0.251f, 0.251f, 0.749f}, {0.252f, 0.252f, 0.748f}, - {0.253f, 0.253f, 0.747f}, {0.254f, 0.254f, 0.746f}, {0.255f, 0.255f, 0.745f}, - {0.256f, 0.256f, 0.744f}, {0.257f, 0.257f, 0.743f}, {0.258f, 0.258f, 0.742f}, - {0.259f, 0.259f, 0.741f}, {0.26f, 0.26f, 0.74f}, {0.261f, 0.261f, 0.739f}, - {0.262f, 0.262f, 0.738f}, {0.263f, 0.263f, 0.737f}, {0.264f, 0.264f, 0.736f}, - {0.265f, 0.265f, 0.735f}, {0.266f, 0.266f, 0.734f}, {0.267f, 0.267f, 0.733f}, - {0.268f, 0.268f, 0.732f}, {0.269f, 0.269f, 0.731f}, {0.27f, 0.27f, 0.73f}, - {0.271f, 0.271f, 0.729f}, {0.272f, 0.272f, 0.728f}, {0.273f, 0.273f, 0.727f}, - {0.274f, 0.274f, 0.726f}, {0.275f, 0.275f, 0.725f}, {0.276f, 0.276f, 0.724f}, - {0.277f, 0.277f, 0.723f}, {0.278f, 0.278f, 0.722f}, {0.279f, 0.279f, 0.721f}, - {0.28f, 0.28f, 0.72f}, {0.281f, 0.281f, 0.719f}, {0.28200000000000003f, - 0.28200000000000003f, 0.718f}, {0.28300000000000003f, 0.28300000000000003f, - 0.717f}, {0.28400000000000003f, 0.28400000000000003f, 0.716f}, - {0.28500000000000003f, 0.28500000000000003f, 0.715f}, - {0.28600000000000003f, 0.28600000000000003f, 0.714f}, - {0.28700000000000003f, 0.28700000000000003f, 0.713f}, - {0.28800000000000003f, 0.28800000000000003f, 0.712f}, - {0.289f, 0.289f, 0.7110000000000001f}, {0.29f, 0.29f, 0.71f}, - {0.291f, 0.291f, 0.7090000000000001f}, {0.292f, 0.292f, 0.708f}, - {0.293f, 0.293f, 0.7070000000000001f}, {0.294f, 0.294f, 0.706f}, - {0.295f, 0.295f, 0.7050000000000001f}, {0.296f, 0.296f, 0.704f}, - {0.297f, 0.297f, 0.7030000000000001f}, {0.298f, 0.298f, 0.702f}, - {0.299f, 0.299f, 0.7010000000000001f}, {0.3f, 0.3f, 0.7f}, - {0.301f, 0.301f, 0.6990000000000001f}, {0.302f, 0.302f, 0.698f}, - {0.303f, 0.303f, 0.6970000000000001f}, {0.304f, 0.304f, 0.696f}, - {0.305f, 0.305f, 0.6950000000000001f}, {0.306f, 0.306f, 0.694f}, - {0.307f, 0.307f, 0.6930000000000001f}, {0.308f, 0.308f, 0.692f}, - {0.309f, 0.309f, 0.6910000000000001f}, {0.31f, 0.31f, 0.69f}, - {0.311f, 0.311f, 0.6890000000000001f}, {0.312f, 0.312f, 0.688f}, - {0.313f, 0.313f, 0.687f}, {0.314f, 0.314f, 0.6859999999999999f}, - {0.315f, 0.315f, 0.685f}, {0.316f, 0.316f, 0.6839999999999999f}, - {0.317f, 0.317f, 0.683f}, {0.318f, 0.318f, 0.6819999999999999f}, - {0.319f, 0.319f, 0.681f}, {0.32f, 0.32f, 0.6799999999999999f}, - {0.321f, 0.321f, 0.679f}, {0.322f, 0.322f, 0.6779999999999999f}, - {0.323f, 0.323f, 0.677f}, {0.324f, 0.324f, 0.6759999999999999f}, - {0.325f, 0.325f, 0.675f}, {0.326f, 0.326f, 0.6739999999999999f}, - {0.327f, 0.327f, 0.673f}, {0.328f, 0.328f, 0.6719999999999999f}, - {0.329f, 0.329f, 0.671f}, {0.33f, 0.33f, 0.6699999999999999f}, - {0.331f, 0.331f, 0.669f}, {0.332f, 0.332f, 0.6679999999999999f}, - {0.333f, 0.333f, 0.667f}, {0.334f, 0.334f, 0.6659999999999999f}, - {0.335f, 0.335f, 0.665f}, {0.336f, 0.336f, 0.6639999999999999f}, - {0.337f, 0.337f, 0.663f}, {0.338f, 0.338f, 0.6619999999999999f}, - {0.339f, 0.339f, 0.661f}, {0.34f, 0.34f, 0.6599999999999999f}, - {0.341f, 0.341f, 0.659f}, {0.342f, 0.342f, 0.6579999999999999f}, - {0.343f, 0.343f, 0.657f}, {0.34400000000000003f, 0.34400000000000003f, - 0.6559999999999999f}, {0.34500000000000003f, 0.34500000000000003f, 0.655f}, - {0.34600000000000003f, 0.34600000000000003f, 0.6539999999999999f}, - {0.34700000000000003f, 0.34700000000000003f, 0.653f}, - {0.34800000000000003f, 0.34800000000000003f, 0.6519999999999999f}, - {0.34900000000000003f, 0.34900000000000003f, 0.651f}, - {0.35000000000000003f, 0.35000000000000003f, 0.6499999999999999f}, - {0.35100000000000003f, 0.35100000000000003f, 0.649f}, {0.352f, 0.352f, 0.648f}, - {0.353f, 0.353f, 0.647f}, {0.354f, 0.354f, 0.646f}, {0.355f, 0.355f, 0.645f}, - {0.356f, 0.356f, 0.644f}, {0.357f, 0.357f, 0.643f}, {0.358f, 0.358f, 0.642f}, - {0.359f, 0.359f, 0.641f}, {0.36f, 0.36f, 0.64f}, {0.361f, 0.361f, 0.639f}, - {0.362f, 0.362f, 0.638f}, {0.363f, 0.363f, 0.637f}, {0.364f, 0.364f, 0.636f}, - {0.365f, 0.365f, 0.635f}, {0.366f, 0.366f, 0.634f}, {0.367f, 0.367f, 0.633f}, - {0.368f, 0.368f, 0.632f}, {0.369f, 0.369f, 0.631f}, {0.37f, 0.37f, 0.63f}, - {0.371f, 0.371f, 0.629f}, {0.372f, 0.372f, 0.628f}, {0.373f, 0.373f, 0.627f}, - {0.374f, 0.374f, 0.626f}, {0.375f, 0.375f, 0.625f}, {0.376f, 0.376f, 0.624f}, - {0.377f, 0.377f, 0.623f}, {0.378f, 0.378f, 0.622f}, {0.379f, 0.379f, 0.621f}, - {0.38f, 0.38f, 0.62f}, {0.381f, 0.381f, 0.619f}, {0.382f, 0.382f, 0.618f}, - {0.383f, 0.383f, 0.617f}, {0.384f, 0.384f, 0.616f}, {0.385f, 0.385f, 0.615f}, - {0.386f, 0.386f, 0.614f}, {0.387f, 0.387f, 0.613f}, {0.388f, 0.388f, 0.612f}, - {0.389f, 0.389f, 0.611f}, {0.39f, 0.39f, 0.61f}, {0.391f, 0.391f, 0.609f}, - {0.392f, 0.392f, 0.608f}, {0.393f, 0.393f, 0.607f}, {0.394f, 0.394f, 0.606f}, - {0.395f, 0.395f, 0.605f}, {0.396f, 0.396f, 0.604f}, {0.397f, 0.397f, 0.603f}, - {0.398f, 0.398f, 0.602f}, {0.399f, 0.399f, 0.601f}, {0.4f, 0.4f, 0.6f}, - {0.401f, 0.401f, 0.599f}, {0.402f, 0.402f, 0.598f}, {0.403f, 0.403f, 0.597f}, - {0.404f, 0.404f, 0.596f}, {0.405f, 0.405f, 0.595f}, {0.406f, 0.406f, 0.594f}, - {0.40700000000000003f, 0.40700000000000003f, 0.593f}, - {0.40800000000000003f, 0.40800000000000003f, 0.592f}, - {0.40900000000000003f, 0.40900000000000003f, 0.591f}, - {0.41000000000000003f, 0.41000000000000003f, 0.59f}, - {0.41100000000000003f, 0.41100000000000003f, 0.589f}, - {0.41200000000000003f, 0.41200000000000003f, 0.588f}, - {0.41300000000000003f, 0.41300000000000003f, 0.587f}, - {0.41400000000000003f, 0.41400000000000003f, 0.586f}, - {0.41500000000000004f, 0.41500000000000004f, 0.585f}, - {0.41600000000000004f, 0.41600000000000004f, 0.584f}, {0.417f, 0.417f, 0.583f}, - {0.418f, 0.418f, 0.5820000000000001f}, {0.419f, 0.419f, 0.581f}, - {0.42f, 0.42f, 0.5800000000000001f}, {0.421f, 0.421f, 0.579f}, - {0.422f, 0.422f, 0.5780000000000001f}, {0.423f, 0.423f, 0.577f}, - {0.424f, 0.424f, 0.5760000000000001f}, {0.425f, 0.425f, 0.575f}, - {0.426f, 0.426f, 0.5740000000000001f}, {0.427f, 0.427f, 0.573f}, - {0.428f, 0.428f, 0.5720000000000001f}, {0.429f, 0.429f, 0.571f}, - {0.43f, 0.43f, 0.5700000000000001f}, {0.431f, 0.431f, 0.569f}, - {0.432f, 0.432f, 0.5680000000000001f}, {0.433f, 0.433f, 0.567f}, - {0.434f, 0.434f, 0.5660000000000001f}, {0.435f, 0.435f, 0.565f}, - {0.436f, 0.436f, 0.5640000000000001f}, {0.437f, 0.437f, 0.563f}, - {0.438f, 0.438f, 0.562f}, {0.439f, 0.439f, 0.5609999999999999f}, - {0.44f, 0.44f, 0.56f}, {0.441f, 0.441f, 0.5589999999999999f}, - {0.442f, 0.442f, 0.558f}, {0.443f, 0.443f, 0.5569999999999999f}, - {0.444f, 0.444f, 0.556f}, {0.445f, 0.445f, 0.5549999999999999f}, - {0.446f, 0.446f, 0.554f}, {0.447f, 0.447f, 0.5529999999999999f}, - {0.448f, 0.448f, 0.552f}, {0.449f, 0.449f, 0.5509999999999999f}, - {0.45f, 0.45f, 0.55f}, {0.451f, 0.451f, 0.5489999999999999f}, - {0.452f, 0.452f, 0.548f}, {0.453f, 0.453f, 0.5469999999999999f}, - {0.454f, 0.454f, 0.546f}, {0.455f, 0.455f, 0.5449999999999999f}, - {0.456f, 0.456f, 0.544f}, {0.457f, 0.457f, 0.5429999999999999f}, - {0.458f, 0.458f, 0.542f}, {0.459f, 0.459f, 0.5409999999999999f}, - {0.46f, 0.46f, 0.54f}, {0.461f, 0.461f, 0.5389999999999999f}, - {0.462f, 0.462f, 0.538f}, {0.463f, 0.463f, 0.5369999999999999f}, - {0.464f, 0.464f, 0.536f}, {0.465f, 0.465f, 0.5349999999999999f}, - {0.466f, 0.466f, 0.534f}, {0.467f, 0.467f, 0.5329999999999999f}, - {0.468f, 0.468f, 0.532f}, {0.46900000000000003f, 0.46900000000000003f, - 0.5309999999999999f}, {0.47000000000000003f, 0.47000000000000003f, 0.53f}, - {0.47100000000000003f, 0.47100000000000003f, 0.5289999999999999f}, - {0.47200000000000003f, 0.47200000000000003f, 0.528f}, - {0.47300000000000003f, 0.47300000000000003f, 0.5269999999999999f}, - {0.47400000000000003f, 0.47400000000000003f, 0.526f}, - {0.47500000000000003f, 0.47500000000000003f, 0.5249999999999999f}, - {0.47600000000000003f, 0.47600000000000003f, 0.524f}, - {0.47700000000000004f, 0.47700000000000004f, 0.5229999999999999f}, - {0.47800000000000004f, 0.47800000000000004f, 0.522f}, - {0.47900000000000004f, 0.47900000000000004f, 0.5209999999999999f}, - {0.48f, 0.48f, 0.52f}, {0.481f, 0.481f, 0.519f}, {0.482f, 0.482f, 0.518f}, - {0.483f, 0.483f, 0.517f}, {0.484f, 0.484f, 0.516f}, {0.485f, 0.485f, 0.515f}, - {0.486f, 0.486f, 0.514f}, {0.487f, 0.487f, 0.513f}, {0.488f, 0.488f, 0.512f}, - {0.489f, 0.489f, 0.511f}, {0.49f, 0.49f, 0.51f}, {0.491f, 0.491f, 0.509f}, - {0.492f, 0.492f, 0.508f}, {0.493f, 0.493f, 0.507f}, {0.494f, 0.494f, 0.506f}, - {0.495f, 0.495f, 0.505f}, {0.496f, 0.496f, 0.504f}, {0.497f, 0.497f, 0.503f}, - {0.498f, 0.498f, 0.502f}, {0.499f, 0.499f, 0.501f}, {0.5f, 0.5f, 0.5f}, - {0.501f, 0.501f, 0.499f}, {0.502f, 0.502f, 0.498f}, {0.503f, 0.503f, 0.497f}, - {0.504f, 0.504f, 0.496f}, {0.505f, 0.505f, 0.495f}, {0.506f, 0.506f, 0.494f}, - {0.507f, 0.507f, 0.493f}, {0.508f, 0.508f, 0.492f}, {0.509f, 0.509f, 0.491f}, - {0.51f, 0.51f, 0.49f}, {0.511f, 0.511f, 0.489f}, {0.512f, 0.512f, 0.488f}, - {0.513f, 0.513f, 0.487f}, {0.514f, 0.514f, 0.486f}, {0.515f, 0.515f, 0.485f}, - {0.516f, 0.516f, 0.484f}, {0.517f, 0.517f, 0.483f}, {0.518f, 0.518f, 0.482f}, - {0.519f, 0.519f, 0.481f}, {0.52f, 0.52f, 0.48f}, {0.521f, 0.521f, 0.479f}, - {0.522f, 0.522f, 0.478f}, {0.523f, 0.523f, 0.477f}, {0.524f, 0.524f, 0.476f}, - {0.525f, 0.525f, 0.475f}, {0.526f, 0.526f, 0.474f}, {0.527f, 0.527f, 0.473f}, - {0.528f, 0.528f, 0.472f}, {0.529f, 0.529f, 0.471f}, {0.53f, 0.53f, 0.47f}, - {0.531f, 0.531f, 0.469f}, {0.532f, 0.532f, 0.46799999999999997f}, - {0.533f, 0.533f, 0.46699999999999997f}, {0.534f, 0.534f, 0.46599999999999997f}, - {0.535f, 0.535f, 0.46499999999999997f}, {0.536f, 0.536f, 0.46399999999999997f}, - {0.537f, 0.537f, 0.46299999999999997f}, {0.538f, 0.538f, 0.46199999999999997f}, - {0.539f, 0.539f, 0.46099999999999997f}, {0.54f, 0.54f, 0.45999999999999996f}, - {0.541f, 0.541f, 0.45899999999999996f}, {0.542f, 0.542f, 0.45799999999999996f}, - {0.543f, 0.543f, 0.45699999999999996f}, {0.544f, 0.544f, 0.45599999999999996f}, - {0.545f, 0.545f, 0.45499999999999996f}, {0.546f, 0.546f, 0.45399999999999996f}, - {0.547f, 0.547f, 0.45299999999999996f}, {0.548f, 0.548f, 0.45199999999999996f}, - {0.549f, 0.549f, 0.45099999999999996f}, {0.55f, 0.55f, 0.44999999999999996f}, - {0.551f, 0.551f, 0.44899999999999995f}, {0.552f, 0.552f, 0.44799999999999995f}, - {0.553f, 0.553f, 0.44699999999999995f}, {0.554f, 0.554f, 0.44599999999999995f}, - {0.555f, 0.555f, 0.44499999999999995f}, {0.556f, 0.556f, 0.44399999999999995f}, - {0.557f, 0.557f, 0.44299999999999995f}, {0.558f, 0.558f, 0.44199999999999995f}, - {0.559f, 0.559f, 0.44099999999999995f}, {0.56f, 0.56f, 0.43999999999999995f}, - {0.561f, 0.561f, 0.43899999999999995f}, {0.562f, 0.562f, 0.43799999999999994f}, - {0.5630000000000001f, 0.5630000000000001f, 0.43699999999999994f}, - {0.5640000000000001f, 0.5640000000000001f, 0.43599999999999994f}, - {0.5650000000000001f, 0.5650000000000001f, 0.43499999999999994f}, - {0.5660000000000001f, 0.5660000000000001f, 0.43399999999999994f}, - {0.5670000000000001f, 0.5670000000000001f, 0.43299999999999994f}, - {0.5680000000000001f, 0.5680000000000001f, 0.43199999999999994f}, - {0.5690000000000001f, 0.5690000000000001f, 0.43099999999999994f}, - {0.5700000000000001f, 0.5700000000000001f, 0.42999999999999994f}, - {0.5710000000000001f, 0.5710000000000001f, 0.42899999999999994f}, - {0.5720000000000001f, 0.5720000000000001f, 0.42799999999999994f}, - {0.5730000000000001f, 0.5730000000000001f, 0.42699999999999994f}, - {0.5740000000000001f, 0.5740000000000001f, 0.42599999999999993f}, - {0.5750000000000001f, 0.5750000000000001f, 0.42499999999999993f}, - {0.5760000000000001f, 0.5760000000000001f, 0.42399999999999993f}, - {0.577f, 0.577f, 0.42300000000000004f}, {0.578f, 0.578f, 0.42200000000000004f}, - {0.579f, 0.579f, 0.42100000000000004f}, {0.58f, 0.58f, 0.42000000000000004f}, - {0.581f, 0.581f, 0.41900000000000004f}, {0.582f, 0.582f, 0.41800000000000004f}, - {0.583f, 0.583f, 0.41700000000000004f}, {0.584f, 0.584f, 0.41600000000000004f}, - {0.585f, 0.585f, 0.41500000000000004f}, {0.586f, 0.586f, 0.41400000000000003f}, - {0.587f, 0.587f, 0.41300000000000003f}, {0.588f, 0.588f, 0.41200000000000003f}, - {0.589f, 0.589f, 0.41100000000000003f}, {0.59f, 0.59f, 0.41000000000000003f}, - {0.591f, 0.591f, 0.40900000000000003f}, {0.592f, 0.592f, 0.40800000000000003f}, - {0.593f, 0.593f, 0.40700000000000003f}, {0.594f, 0.594f, 0.406f}, - {0.595f, 0.595f, 0.405f}, {0.596f, 0.596f, 0.404f}, {0.597f, 0.597f, 0.403f}, - {0.598f, 0.598f, 0.402f}, {0.599f, 0.599f, 0.401f}, {0.6f, 0.6f, 0.4f}, - {0.601f, 0.601f, 0.399f}, {0.602f, 0.602f, 0.398f}, {0.603f, 0.603f, 0.397f}, - {0.604f, 0.604f, 0.396f}, {0.605f, 0.605f, 0.395f}, {0.606f, 0.606f, 0.394f}, - {0.607f, 0.607f, 0.393f}, {0.608f, 0.608f, 0.392f}, {0.609f, 0.609f, 0.391f}, - {0.61f, 0.61f, 0.39f}, {0.611f, 0.611f, 0.389f}, {0.612f, 0.612f, 0.388f}, - {0.613f, 0.613f, 0.387f}, {0.614f, 0.614f, 0.386f}, {0.615f, 0.615f, 0.385f}, - {0.616f, 0.616f, 0.384f}, {0.617f, 0.617f, 0.383f}, {0.618f, 0.618f, 0.382f}, - {0.619f, 0.619f, 0.381f}, {0.62f, 0.62f, 0.38f}, {0.621f, 0.621f, 0.379f}, - {0.622f, 0.622f, 0.378f}, {0.623f, 0.623f, 0.377f}, {0.624f, 0.624f, 0.376f}, - {0.625f, 0.625f, 0.375f}, {0.626f, 0.626f, 0.374f}, {0.627f, 0.627f, 0.373f}, - {0.628f, 0.628f, 0.372f}, {0.629f, 0.629f, 0.371f}, {0.63f, 0.63f, 0.37f}, - {0.631f, 0.631f, 0.369f}, {0.632f, 0.632f, 0.368f}, {0.633f, 0.633f, 0.367f}, - {0.634f, 0.634f, 0.366f}, {0.635f, 0.635f, 0.365f}, {0.636f, 0.636f, 0.364f}, - {0.637f, 0.637f, 0.363f}, {0.638f, 0.638f, 0.362f}, {0.639f, 0.639f, 0.361f}, - {0.64f, 0.64f, 0.36f}, {0.641f, 0.641f, 0.359f}, {0.642f, 0.642f, 0.358f}, - {0.643f, 0.643f, 0.357f}, {0.644f, 0.644f, 0.356f}, {0.645f, 0.645f, 0.355f}, - {0.646f, 0.646f, 0.354f}, {0.647f, 0.647f, 0.353f}, {0.648f, 0.648f, 0.352f}, - {0.649f, 0.649f, 0.351f}, {0.65f, 0.65f, 0.35f}, {0.651f, 0.651f, 0.349f}, - {0.652f, 0.652f, 0.348f}, {0.653f, 0.653f, 0.347f}, {0.654f, 0.654f, 0.346f}, - {0.655f, 0.655f, 0.345f}, {0.656f, 0.656f, 0.344f}, - {0.657f, 0.657f, 0.34299999999999997f}, {0.658f, 0.658f, 0.34199999999999997f}, - {0.659f, 0.659f, 0.34099999999999997f}, {0.66f, 0.66f, 0.33999999999999997f}, - {0.661f, 0.661f, 0.33899999999999997f}, {0.662f, 0.662f, 0.33799999999999997f}, - {0.663f, 0.663f, 0.33699999999999997f}, {0.664f, 0.664f, 0.33599999999999997f}, - {0.665f, 0.665f, 0.33499999999999996f}, {0.666f, 0.666f, 0.33399999999999996f}, - {0.667f, 0.667f, 0.33299999999999996f}, {0.668f, 0.668f, 0.33199999999999996f}, - {0.669f, 0.669f, 0.33099999999999996f}, {0.67f, 0.67f, 0.32999999999999996f}, - {0.671f, 0.671f, 0.32899999999999996f}, {0.672f, 0.672f, 0.32799999999999996f}, - {0.673f, 0.673f, 0.32699999999999996f}, {0.674f, 0.674f, 0.32599999999999996f}, - {0.675f, 0.675f, 0.32499999999999996f}, {0.676f, 0.676f, 0.32399999999999995f}, - {0.677f, 0.677f, 0.32299999999999995f}, {0.678f, 0.678f, 0.32199999999999995f}, - {0.679f, 0.679f, 0.32099999999999995f}, {0.68f, 0.68f, 0.31999999999999995f}, - {0.681f, 0.681f, 0.31899999999999995f}, {0.682f, 0.682f, 0.31799999999999995f}, - {0.683f, 0.683f, 0.31699999999999995f}, {0.684f, 0.684f, 0.31599999999999995f}, - {0.685f, 0.685f, 0.31499999999999995f}, {0.686f, 0.686f, 0.31399999999999995f}, - {0.687f, 0.687f, 0.31299999999999994f}, {0.6880000000000001f, - 0.6880000000000001f, 0.31199999999999994f}, - {0.6890000000000001f, 0.6890000000000001f, 0.31099999999999994f}, - {0.6900000000000001f, 0.6900000000000001f, 0.30999999999999994f}, - {0.6910000000000001f, 0.6910000000000001f, 0.30899999999999994f}, - {0.6920000000000001f, 0.6920000000000001f, 0.30799999999999994f}, - {0.6930000000000001f, 0.6930000000000001f, 0.30699999999999994f}, - {0.6940000000000001f, 0.6940000000000001f, 0.30599999999999994f}, - {0.6950000000000001f, 0.6950000000000001f, 0.30499999999999994f}, - {0.6960000000000001f, 0.6960000000000001f, 0.30399999999999994f}, - {0.6970000000000001f, 0.6970000000000001f, 0.30299999999999994f}, - {0.6980000000000001f, 0.6980000000000001f, 0.30199999999999994f}, - {0.6990000000000001f, 0.6990000000000001f, 0.30099999999999993f}, - {0.7000000000000001f, 0.7000000000000001f, 0.29999999999999993f}, - {0.7010000000000001f, 0.7010000000000001f, 0.29899999999999993f}, - {0.7020000000000001f, 0.7020000000000001f, 0.29799999999999993f}, - {0.7030000000000001f, 0.7030000000000001f, 0.29699999999999993f}, - {0.704f, 0.704f, 0.29600000000000004f}, {0.705f, 0.705f, 0.29500000000000004f}, - {0.706f, 0.706f, 0.29400000000000004f}, {0.707f, 0.707f, 0.29300000000000004f}, - {0.708f, 0.708f, 0.29200000000000004f}, {0.709f, 0.709f, 0.29100000000000004f}, - {0.71f, 0.71f, 0.29000000000000004f}, {0.711f, 0.711f, 0.28900000000000003f}, - {0.712f, 0.712f, 0.28800000000000003f}, {0.713f, 0.713f, 0.28700000000000003f}, - {0.714f, 0.714f, 0.28600000000000003f}, {0.715f, 0.715f, 0.28500000000000003f}, - {0.716f, 0.716f, 0.28400000000000003f}, {0.717f, 0.717f, 0.28300000000000003f}, - {0.718f, 0.718f, 0.28200000000000003f}, {0.719f, 0.719f, 0.281f}, - {0.72f, 0.72f, 0.28f}, {0.721f, 0.721f, 0.279f}, {0.722f, 0.722f, 0.278f}, - {0.723f, 0.723f, 0.277f}, {0.724f, 0.724f, 0.276f}, {0.725f, 0.725f, 0.275f}, - {0.726f, 0.726f, 0.274f}, {0.727f, 0.727f, 0.273f}, {0.728f, 0.728f, 0.272f}, - {0.729f, 0.729f, 0.271f}, {0.73f, 0.73f, 0.27f}, {0.731f, 0.731f, 0.269f}, - {0.732f, 0.732f, 0.268f}, {0.733f, 0.733f, 0.267f}, {0.734f, 0.734f, 0.266f}, - {0.735f, 0.735f, 0.265f}, {0.736f, 0.736f, 0.264f}, {0.737f, 0.737f, 0.263f}, - {0.738f, 0.738f, 0.262f}, {0.739f, 0.739f, 0.261f}, {0.74f, 0.74f, 0.26f}, - {0.741f, 0.741f, 0.259f}, {0.742f, 0.742f, 0.258f}, {0.743f, 0.743f, 0.257f}, - {0.744f, 0.744f, 0.256f}, {0.745f, 0.745f, 0.255f}, {0.746f, 0.746f, 0.254f}, - {0.747f, 0.747f, 0.253f}, {0.748f, 0.748f, 0.252f}, {0.749f, 0.749f, 0.251f}, - {0.75f, 0.75f, 0.25f}, {0.751f, 0.751f, 0.249f}, {0.752f, 0.752f, 0.248f}, - {0.753f, 0.753f, 0.247f}, {0.754f, 0.754f, 0.246f}, {0.755f, 0.755f, 0.245f}, - {0.756f, 0.756f, 0.244f}, {0.757f, 0.757f, 0.243f}, {0.758f, 0.758f, 0.242f}, - {0.759f, 0.759f, 0.241f}, {0.76f, 0.76f, 0.24f}, {0.761f, 0.761f, 0.239f}, - {0.762f, 0.762f, 0.238f}, {0.763f, 0.763f, 0.237f}, {0.764f, 0.764f, 0.236f}, - {0.765f, 0.765f, 0.235f}, {0.766f, 0.766f, 0.23399999999999999f}, - {0.767f, 0.767f, 0.23299999999999998f}, {0.768f, 0.768f, 0.23199999999999998f}, - {0.769f, 0.769f, 0.23099999999999998f}, {0.77f, 0.77f, 0.22999999999999998f}, - {0.771f, 0.771f, 0.22899999999999998f}, {0.772f, 0.772f, 0.22799999999999998f}, - {0.773f, 0.773f, 0.22699999999999998f}, {0.774f, 0.774f, 0.22599999999999998f}, - {0.775f, 0.775f, 0.22499999999999998f}, {0.776f, 0.776f, 0.22399999999999998f}, - {0.777f, 0.777f, 0.22299999999999998f}, {0.778f, 0.778f, 0.22199999999999998f}, - {0.779f, 0.779f, 0.22099999999999997f}, {0.78f, 0.78f, 0.21999999999999997f}, - {0.781f, 0.781f, 0.21899999999999997f}, {0.782f, 0.782f, 0.21799999999999997f}, - {0.783f, 0.783f, 0.21699999999999997f}, {0.784f, 0.784f, 0.21599999999999997f}, - {0.785f, 0.785f, 0.21499999999999997f}, {0.786f, 0.786f, 0.21399999999999997f}, - {0.787f, 0.787f, 0.21299999999999997f}, {0.788f, 0.788f, 0.21199999999999997f}, - {0.789f, 0.789f, 0.21099999999999997f}, {0.79f, 0.79f, 0.20999999999999996f}, - {0.791f, 0.791f, 0.20899999999999996f}, {0.792f, 0.792f, 0.20799999999999996f}, - {0.793f, 0.793f, 0.20699999999999996f}, {0.794f, 0.794f, 0.20599999999999996f}, - {0.795f, 0.795f, 0.20499999999999996f}, {0.796f, 0.796f, 0.20399999999999996f}, - {0.797f, 0.797f, 0.20299999999999996f}, {0.798f, 0.798f, 0.20199999999999996f}, - {0.799f, 0.799f, 0.20099999999999996f}, {0.8f, 0.8f, 0.19999999999999996f}, - {0.801f, 0.801f, 0.19899999999999995f}, {0.802f, 0.802f, 0.19799999999999995f}, - {0.803f, 0.803f, 0.19699999999999995f}, {0.804f, 0.804f, 0.19599999999999995f}, - {0.805f, 0.805f, 0.19499999999999995f}, {0.806f, 0.806f, 0.19399999999999995f}, - {0.807f, 0.807f, 0.19299999999999995f}, {0.808f, 0.808f, 0.19199999999999995f}, - {0.809f, 0.809f, 0.19099999999999995f}, {0.81f, 0.81f, 0.18999999999999995f}, - {0.811f, 0.811f, 0.18899999999999995f}, {0.812f, 0.812f, 0.18799999999999994f}, - {0.8130000000000001f, 0.8130000000000001f, 0.18699999999999994f}, - {0.8140000000000001f, 0.8140000000000001f, 0.18599999999999994f}, - {0.8150000000000001f, 0.8150000000000001f, 0.18499999999999994f}, - {0.8160000000000001f, 0.8160000000000001f, 0.18399999999999994f}, - {0.8170000000000001f, 0.8170000000000001f, 0.18299999999999994f}, - {0.8180000000000001f, 0.8180000000000001f, 0.18199999999999994f}, - {0.8190000000000001f, 0.8190000000000001f, 0.18099999999999994f}, - {0.8200000000000001f, 0.8200000000000001f, 0.17999999999999994f}, - {0.8210000000000001f, 0.8210000000000001f, 0.17899999999999994f}, - {0.8220000000000001f, 0.8220000000000001f, 0.17799999999999994f}, - {0.8230000000000001f, 0.8230000000000001f, 0.17699999999999994f}, - {0.8240000000000001f, 0.8240000000000001f, 0.17599999999999993f}, - {0.8250000000000001f, 0.8250000000000001f, 0.17499999999999993f}, - {0.8260000000000001f, 0.8260000000000001f, 0.17399999999999993f}, - {0.8270000000000001f, 0.8270000000000001f, 0.17299999999999993f}, - {0.8280000000000001f, 0.8280000000000001f, 0.17199999999999993f}, - {0.8290000000000001f, 0.8290000000000001f, 0.17099999999999993f}, - {0.8300000000000001f, 0.8300000000000001f, 0.16999999999999993f}, - {0.8310000000000001f, 0.8310000000000001f, 0.16899999999999993f}, - {0.8320000000000001f, 0.8320000000000001f, 0.16799999999999993f}, - {0.833f, 0.833f, 0.16700000000000004f}, {0.834f, 0.834f, 0.16600000000000004f}, - {0.835f, 0.835f, 0.16500000000000004f}, {0.836f, 0.836f, 0.16400000000000003f}, - {0.837f, 0.837f, 0.16300000000000003f}, {0.838f, 0.838f, 0.16200000000000003f}, - {0.839f, 0.839f, 0.16100000000000003f}, {0.84f, 0.84f, 0.16000000000000003f}, - {0.841f, 0.841f, 0.15900000000000003f}, {0.842f, 0.842f, 0.15800000000000003f}, - {0.843f, 0.843f, 0.15700000000000003f}, {0.844f, 0.844f, 0.15600000000000003f}, - {0.845f, 0.845f, 0.15500000000000003f}, {0.846f, 0.846f, 0.15400000000000003f}, - {0.847f, 0.847f, 0.15300000000000002f}, {0.848f, 0.848f, 0.15200000000000002f}, - {0.849f, 0.849f, 0.15100000000000002f}, {0.85f, 0.85f, 0.15000000000000002f}, - {0.851f, 0.851f, 0.14900000000000002f}, {0.852f, 0.852f, 0.14800000000000002f}, - {0.853f, 0.853f, 0.14700000000000002f}, {0.854f, 0.854f, 0.14600000000000002f}, - {0.855f, 0.855f, 0.14500000000000002f}, {0.856f, 0.856f, 0.14400000000000002f}, - {0.857f, 0.857f, 0.14300000000000002f}, {0.858f, 0.858f, 0.14200000000000002f}, - {0.859f, 0.859f, 0.14100000000000001f}, {0.86f, 0.86f, 0.14f}, - {0.861f, 0.861f, 0.139f}, {0.862f, 0.862f, 0.138f}, {0.863f, 0.863f, 0.137f}, - {0.864f, 0.864f, 0.136f}, {0.865f, 0.865f, 0.135f}, {0.866f, 0.866f, 0.134f}, - {0.867f, 0.867f, 0.133f}, {0.868f, 0.868f, 0.132f}, {0.869f, 0.869f, 0.131f}, - {0.87f, 0.87f, 0.13f}, {0.871f, 0.871f, 0.129f}, {0.872f, 0.872f, 0.128f}, - {0.873f, 0.873f, 0.127f}, {0.874f, 0.874f, 0.126f}, {0.875f, 0.875f, 0.125f}, - {0.876f, 0.876f, 0.124f}, {0.877f, 0.877f, 0.123f}, {0.878f, 0.878f, 0.122f}, - {0.879f, 0.879f, 0.121f}, {0.88f, 0.88f, 0.12f}, {0.881f, 0.881f, 0.119f}, - {0.882f, 0.882f, 0.118f}, {0.883f, 0.883f, 0.11699999999999999f}, - {0.884f, 0.884f, 0.11599999999999999f}, {0.885f, 0.885f, 0.11499999999999999f}, - {0.886f, 0.886f, 0.11399999999999999f}, {0.887f, 0.887f, 0.11299999999999999f}, - {0.888f, 0.888f, 0.11199999999999999f}, {0.889f, 0.889f, 0.11099999999999999f}, - {0.89f, 0.89f, 0.10999999999999999f}, {0.891f, 0.891f, 0.10899999999999999f}, - {0.892f, 0.892f, 0.10799999999999998f}, {0.893f, 0.893f, 0.10699999999999998f}, - {0.894f, 0.894f, 0.10599999999999998f}, {0.895f, 0.895f, 0.10499999999999998f}, - {0.896f, 0.896f, 0.10399999999999998f}, {0.897f, 0.897f, 0.10299999999999998f}, - {0.898f, 0.898f, 0.10199999999999998f}, {0.899f, 0.899f, 0.10099999999999998f}, - {0.9f, 0.9f, 0.09999999999999998f}, {0.901f, 0.901f, 0.09899999999999998f}, - {0.902f, 0.902f, 0.09799999999999998f}, {0.903f, 0.903f, 0.09699999999999998f}, - {0.904f, 0.904f, 0.09599999999999997f}, {0.905f, 0.905f, 0.09499999999999997f}, - {0.906f, 0.906f, 0.09399999999999997f}, {0.907f, 0.907f, 0.09299999999999997f}, - {0.908f, 0.908f, 0.09199999999999997f}, {0.909f, 0.909f, 0.09099999999999997f}, - {0.91f, 0.91f, 0.08999999999999997f}, {0.911f, 0.911f, 0.08899999999999997f}, - {0.912f, 0.912f, 0.08799999999999997f}, {0.913f, 0.913f, 0.08699999999999997f}, - {0.914f, 0.914f, 0.08599999999999997f}, {0.915f, 0.915f, 0.08499999999999996f}, - {0.916f, 0.916f, 0.08399999999999996f}, {0.917f, 0.917f, 0.08299999999999996f}, - {0.918f, 0.918f, 0.08199999999999996f}, {0.919f, 0.919f, 0.08099999999999996f}, - {0.92f, 0.92f, 0.07999999999999996f}, {0.921f, 0.921f, 0.07899999999999996f}, - {0.922f, 0.922f, 0.07799999999999996f}, {0.923f, 0.923f, 0.07699999999999996f}, - {0.924f, 0.924f, 0.07599999999999996f}, {0.925f, 0.925f, 0.07499999999999996f}, - {0.926f, 0.926f, 0.07399999999999995f}, {0.927f, 0.927f, 0.07299999999999995f}, - {0.928f, 0.928f, 0.07199999999999995f}, {0.929f, 0.929f, 0.07099999999999995f}, - {0.93f, 0.93f, 0.06999999999999995f}, {0.931f, 0.931f, 0.06899999999999995f}, - {0.932f, 0.932f, 0.06799999999999995f}, {0.933f, 0.933f, 0.06699999999999995f}, - {0.934f, 0.934f, 0.06599999999999995f}, {0.935f, 0.935f, 0.06499999999999995f}, - {0.936f, 0.936f, 0.06399999999999995f}, {0.937f, 0.937f, 0.06299999999999994f}, - {0.9380000000000001f, 0.9380000000000001f, 0.061999999999999944f}, - {0.9390000000000001f, 0.9390000000000001f, 0.06099999999999994f}, - {0.9400000000000001f, 0.9400000000000001f, 0.05999999999999994f}, - {0.9410000000000001f, 0.9410000000000001f, 0.05899999999999994f}, - {0.9420000000000001f, 0.9420000000000001f, 0.05799999999999994f}, - {0.9430000000000001f, 0.9430000000000001f, 0.05699999999999994f}, - {0.9440000000000001f, 0.9440000000000001f, 0.05599999999999994f}, - {0.9450000000000001f, 0.9450000000000001f, 0.05499999999999994f}, - {0.9460000000000001f, 0.9460000000000001f, 0.05399999999999994f}, - {0.9470000000000001f, 0.9470000000000001f, 0.052999999999999936f}, - {0.9480000000000001f, 0.9480000000000001f, 0.051999999999999935f}, - {0.9490000000000001f, 0.9490000000000001f, 0.050999999999999934f}, - {0.9500000000000001f, 0.9500000000000001f, 0.04999999999999993f}, - {0.9510000000000001f, 0.9510000000000001f, 0.04899999999999993f}, - {0.9520000000000001f, 0.9520000000000001f, 0.04799999999999993f}, - {0.9530000000000001f, 0.9530000000000001f, 0.04699999999999993f}, - {0.9540000000000001f, 0.9540000000000001f, 0.04599999999999993f}, - {0.9550000000000001f, 0.9550000000000001f, 0.04499999999999993f}, - {0.9560000000000001f, 0.9560000000000001f, 0.04399999999999993f}, - {0.9570000000000001f, 0.9570000000000001f, 0.04299999999999993f}, - {0.9580000000000001f, 0.9580000000000001f, 0.041999999999999926f}, - {0.9590000000000001f, 0.9590000000000001f, 0.040999999999999925f}, - {0.96f, 0.96f, 0.040000000000000036f}, {0.961f, 0.961f, 0.039000000000000035f}, - {0.962f, 0.962f, 0.038000000000000034f}, {0.963f, 0.963f, 0.03700000000000003f}, - {0.964f, 0.964f, 0.03600000000000003f}, {0.965f, 0.965f, 0.03500000000000003f}, - {0.966f, 0.966f, 0.03400000000000003f}, {0.967f, 0.967f, 0.03300000000000003f}, - {0.968f, 0.968f, 0.03200000000000003f}, {0.969f, 0.969f, 0.031000000000000028f}, - {0.97f, 0.97f, 0.030000000000000027f}, {0.971f, 0.971f, 0.029000000000000026f}, - {0.972f, 0.972f, 0.028000000000000025f}, {0.973f, 0.973f, 0.027000000000000024f}, - {0.974f, 0.974f, 0.026000000000000023f}, {0.975f, 0.975f, 0.025000000000000022f}, - {0.976f, 0.976f, 0.02400000000000002f}, {0.977f, 0.977f, 0.02300000000000002f}, - {0.978f, 0.978f, 0.02200000000000002f}, {0.979f, 0.979f, 0.02100000000000002f}, - {0.98f, 0.98f, 0.020000000000000018f}, {0.981f, 0.981f, 0.019000000000000017f}, - {0.982f, 0.982f, 0.018000000000000016f}, {0.983f, 0.983f, 0.017000000000000015f}, - {0.984f, 0.984f, 0.016000000000000014f}, {0.985f, 0.985f, 0.015000000000000013f}, - {0.986f, 0.986f, 0.014000000000000012f}, {0.987f, 0.987f, 0.013000000000000012f}, - {0.988f, 0.988f, 0.01200000000000001f}, {0.989f, 0.989f, 0.01100000000000001f}, - {0.99f, 0.99f, 0.010000000000000009f}, {0.991f, 0.991f, 0.009000000000000008f}, - {0.992f, 0.992f, 0.008000000000000007f}, {0.993f, 0.993f, 0.007000000000000006f}, - {0.994f, 0.994f, 0.006000000000000005f}, {0.995f, 0.995f, 0.0050000000000000044f}, - {0.996f, 0.996f, 0.0040000000000000036f}, - {0.997f, 0.997f, 0.0030000000000000027f}, - {0.998f, 0.998f, 0.0020000000000000018f}, - {0.999f, 0.999f, 0.0010000000000000009f}, {1.f, 1.f, 0.f}}; - - - - - - -float palette_grey_to_red[1001][3]={{0.99f, 0.99f, 0.99f}, {0.99001f, 0.98901f, 0.98901f}, - {0.99002f, 0.98802f, 0.98802f}, {0.99003f, 0.98703f, 0.98703f}, - {0.99004f, 0.98604f, 0.98604f}, {0.99005f, 0.98505f, 0.98505f}, - {0.9900599999999999f, 0.98406f, 0.98406f}, {0.99007f, 0.98307f, 0.98307f}, - {0.99008f, 0.98208f, 0.98208f}, {0.99009f, 0.98109f, 0.98109f}, - {0.9901f, 0.9801f, 0.9801f}, {0.99011f, 0.97911f, 0.97911f}, - {0.99012f, 0.97812f, 0.97812f}, {0.99013f, 0.9771299999999999f, - 0.9771299999999999f}, {0.99014f, 0.97614f, 0.97614f}, - {0.99015f, 0.97515f, 0.97515f}, {0.99016f, 0.97416f, 0.97416f}, - {0.99017f, 0.97317f, 0.97317f}, {0.99018f, 0.97218f, 0.97218f}, - {0.99019f, 0.97119f, 0.97119f}, {0.9902f, 0.9702f, 0.9702f}, - {0.99021f, 0.96921f, 0.96921f}, {0.99022f, 0.96822f, 0.96822f}, - {0.9902299999999999f, 0.96723f, 0.96723f}, {0.99024f, 0.96624f, 0.96624f}, - {0.99025f, 0.9652499999999999f, 0.9652499999999999f}, - {0.99026f, 0.96426f, 0.96426f}, {0.99027f, 0.96327f, 0.96327f}, - {0.9902799999999999f, 0.96228f, 0.96228f}, {0.99029f, 0.96129f, 0.96129f}, - {0.9903f, 0.9603f, 0.9603f}, {0.99031f, 0.95931f, 0.95931f}, - {0.99032f, 0.95832f, 0.95832f}, {0.99033f, 0.95733f, 0.95733f}, - {0.99034f, 0.95634f, 0.95634f}, {0.99035f, 0.95535f, 0.95535f}, - {0.99036f, 0.95436f, 0.95436f}, {0.99037f, 0.95337f, 0.95337f}, - {0.99038f, 0.95238f, 0.95238f}, {0.99039f, 0.95139f, 0.95139f}, - {0.9904f, 0.9504f, 0.9504f}, {0.99041f, 0.94941f, 0.94941f}, - {0.99042f, 0.94842f, 0.94842f}, {0.99043f, 0.94743f, 0.94743f}, - {0.99044f, 0.94644f, 0.94644f}, {0.9904499999999999f, 0.94545f, 0.94545f}, - {0.99046f, 0.94446f, 0.94446f}, {0.99047f, 0.94347f, 0.94347f}, - {0.99048f, 0.94248f, 0.94248f}, {0.99049f, 0.9414899999999999f, - 0.9414899999999999f}, {0.9904999999999999f, 0.9405f, 0.9405f}, - {0.99051f, 0.93951f, 0.93951f}, {0.99052f, 0.93852f, 0.93852f}, - {0.99053f, 0.93753f, 0.93753f}, {0.99054f, 0.93654f, 0.93654f}, - {0.99055f, 0.93555f, 0.93555f}, {0.99056f, 0.93456f, 0.93456f}, - {0.99057f, 0.93357f, 0.93357f}, {0.99058f, 0.93258f, 0.93258f}, - {0.99059f, 0.93159f, 0.93159f}, {0.9906f, 0.9306f, 0.9306f}, - {0.99061f, 0.92961f, 0.92961f}, {0.99062f, 0.92862f, 0.92862f}, - {0.99063f, 0.92763f, 0.92763f}, {0.99064f, 0.92664f, 0.92664f}, - {0.99065f, 0.92565f, 0.92565f}, {0.99066f, 0.92466f, 0.92466f}, - {0.9906699999999999f, 0.92367f, 0.92367f}, {0.99068f, 0.92268f, 0.92268f}, - {0.99069f, 0.92169f, 0.92169f}, {0.9907f, 0.9207f, 0.9207f}, - {0.99071f, 0.91971f, 0.91971f}, {0.99072f, 0.91872f, 0.91872f}, - {0.99073f, 0.9177299999999999f, 0.9177299999999999f}, - {0.99074f, 0.91674f, 0.91674f}, {0.99075f, 0.91575f, 0.91575f}, - {0.99076f, 0.91476f, 0.91476f}, {0.99077f, 0.91377f, 0.91377f}, - {0.99078f, 0.91278f, 0.91278f}, {0.99079f, 0.91179f, 0.91179f}, - {0.9908f, 0.9107999999999999f, 0.9107999999999999f}, - {0.99081f, 0.90981f, 0.90981f}, {0.99082f, 0.90882f, 0.90882f}, - {0.99083f, 0.90783f, 0.90783f}, {0.9908399999999999f, 0.90684f, 0.90684f}, - {0.99085f, 0.90585f, 0.90585f}, {0.99086f, 0.90486f, 0.90486f}, - {0.99087f, 0.90387f, 0.90387f}, {0.99088f, 0.90288f, 0.90288f}, - {0.9908899999999999f, 0.90189f, 0.90189f}, {0.9909f, 0.9009f, 0.9009f}, - {0.99091f, 0.89991f, 0.89991f}, {0.99092f, 0.8989199999999999f, - 0.8989199999999999f}, {0.99093f, 0.89793f, 0.89793f}, - {0.99094f, 0.89694f, 0.89694f}, {0.99095f, 0.89595f, 0.89595f}, - {0.99096f, 0.89496f, 0.89496f}, {0.99097f, 0.8939699999999999f, - 0.8939699999999999f}, {0.99098f, 0.89298f, 0.89298f}, - {0.99099f, 0.89199f, 0.89199f}, {0.991f, 0.891f, 0.891f}, - {0.99101f, 0.89001f, 0.89001f}, {0.99102f, 0.88902f, 0.88902f}, - {0.99103f, 0.88803f, 0.88803f}, {0.99104f, 0.8870399999999999f, - 0.8870399999999999f}, {0.99105f, 0.88605f, 0.88605f}, - {0.9910599999999999f, 0.88506f, 0.88506f}, {0.99107f, 0.88407f, 0.88407f}, - {0.99108f, 0.88308f, 0.88308f}, {0.99109f, 0.88209f, 0.88209f}, - {0.9911f, 0.8811f, 0.8811f}, {0.99111f, 0.88011f, 0.88011f}, - {0.99112f, 0.87912f, 0.87912f}, {0.99113f, 0.87813f, 0.87813f}, - {0.99114f, 0.87714f, 0.87714f}, {0.99115f, 0.87615f, 0.87615f}, - {0.99116f, 0.8751599999999999f, 0.8751599999999999f}, - {0.99117f, 0.87417f, 0.87417f}, {0.99118f, 0.87318f, 0.87318f}, - {0.99119f, 0.87219f, 0.87219f}, {0.9912f, 0.8712f, 0.8712f}, - {0.99121f, 0.87021f, 0.87021f}, {0.99122f, 0.86922f, 0.86922f}, - {0.9912299999999999f, 0.86823f, 0.86823f}, {0.99124f, 0.86724f, 0.86724f}, - {0.99125f, 0.86625f, 0.86625f}, {0.99126f, 0.86526f, 0.86526f}, - {0.99127f, 0.86427f, 0.86427f}, {0.9912799999999999f, 0.86328f, 0.86328f}, - {0.99129f, 0.86229f, 0.86229f}, {0.9913f, 0.8613f, 0.8613f}, - {0.99131f, 0.86031f, 0.86031f}, {0.99132f, 0.85932f, 0.85932f}, - {0.99133f, 0.85833f, 0.85833f}, {0.99134f, 0.85734f, 0.85734f}, - {0.99135f, 0.85635f, 0.85635f}, {0.99136f, 0.85536f, 0.85536f}, - {0.99137f, 0.85437f, 0.85437f}, {0.99138f, 0.85338f, 0.85338f}, - {0.99139f, 0.85239f, 0.85239f}, {0.9914f, 0.8513999999999999f, - 0.8513999999999999f}, {0.99141f, 0.85041f, 0.85041f}, - {0.99142f, 0.84942f, 0.84942f}, {0.99143f, 0.84843f, 0.84843f}, - {0.99144f, 0.84744f, 0.84744f}, {0.9914499999999999f, 0.84645f, 0.84645f}, - {0.99146f, 0.84546f, 0.84546f}, {0.99147f, 0.84447f, 0.84447f}, - {0.99148f, 0.84348f, 0.84348f}, {0.99149f, 0.84249f, 0.84249f}, - {0.9915f, 0.8415f, 0.8415f}, {0.99151f, 0.84051f, 0.84051f}, - {0.99152f, 0.83952f, 0.83952f}, {0.99153f, 0.83853f, 0.83853f}, - {0.99154f, 0.83754f, 0.83754f}, {0.99155f, 0.83655f, 0.83655f}, - {0.99156f, 0.83556f, 0.83556f}, {0.99157f, 0.83457f, 0.83457f}, - {0.99158f, 0.83358f, 0.83358f}, {0.99159f, 0.8325899999999999f, - 0.8325899999999999f}, {0.9916f, 0.8316f, 0.8316f}, {0.99161f, 0.83061f, 0.83061f}, - {0.99162f, 0.82962f, 0.82962f}, {0.99163f, 0.82863f, 0.82863f}, - {0.99164f, 0.8276399999999999f, 0.8276399999999999f}, - {0.99165f, 0.82665f, 0.82665f}, {0.99166f, 0.82566f, 0.82566f}, - {0.9916699999999999f, 0.82467f, 0.82467f}, {0.99168f, 0.82368f, 0.82368f}, - {0.99169f, 0.8226899999999999f, 0.8226899999999999f}, {0.9917f, 0.8217f, 0.8217f}, - {0.99171f, 0.8207099999999999f, 0.8207099999999999f}, - {0.99172f, 0.81972f, 0.81972f}, {0.99173f, 0.81873f, 0.81873f}, - {0.99174f, 0.8177399999999999f, 0.8177399999999999f}, - {0.99175f, 0.81675f, 0.81675f}, {0.99176f, 0.81576f, 0.81576f}, - {0.99177f, 0.81477f, 0.81477f}, {0.99178f, 0.81378f, 0.81378f}, - {0.99179f, 0.81279f, 0.81279f}, {0.9918f, 0.8118f, 0.8118f}, - {0.99181f, 0.81081f, 0.81081f}, {0.99182f, 0.80982f, 0.80982f}, - {0.99183f, 0.8088299999999999f, 0.8088299999999999f}, - {0.9918399999999999f, 0.80784f, 0.80784f}, {0.99185f, 0.80685f, 0.80685f}, - {0.99186f, 0.80586f, 0.80586f}, {0.99187f, 0.80487f, 0.80487f}, - {0.99188f, 0.8038799999999999f, 0.8038799999999999f}, - {0.9918899999999999f, 0.80289f, 0.80289f}, {0.9919f, 0.8019000000000001f, - 0.8019000000000001f}, {0.99191f, 0.80091f, 0.80091f}, - {0.99192f, 0.79992f, 0.79992f}, {0.99193f, 0.79893f, 0.79893f}, - {0.99194f, 0.79794f, 0.79794f}, {0.99195f, 0.79695f, 0.79695f}, - {0.99196f, 0.79596f, 0.79596f}, {0.99197f, 0.79497f, 0.79497f}, - {0.99198f, 0.79398f, 0.79398f}, {0.99199f, 0.79299f, 0.79299f}, - {0.992f, 0.792f, 0.792f}, {0.99201f, 0.79101f, 0.79101f}, - {0.99202f, 0.79002f, 0.79002f}, {0.99203f, 0.78903f, 0.78903f}, - {0.99204f, 0.78804f, 0.78804f}, {0.99205f, 0.78705f, 0.78705f}, - {0.9920599999999999f, 0.78606f, 0.78606f}, {0.99207f, 0.7850699999999999f, - 0.7850699999999999f}, {0.99208f, 0.78408f, 0.78408f}, - {0.99209f, 0.7830900000000001f, 0.7830900000000001f}, {0.9921f, 0.7821f, 0.7821f}, - {0.99211f, 0.78111f, 0.78111f}, {0.99212f, 0.78012f, 0.78012f}, - {0.99213f, 0.77913f, 0.77913f}, {0.99214f, 0.77814f, 0.77814f}, - {0.99215f, 0.77715f, 0.77715f}, {0.99216f, 0.77616f, 0.77616f}, - {0.99217f, 0.77517f, 0.77517f}, {0.99218f, 0.77418f, 0.77418f}, - {0.99219f, 0.77319f, 0.77319f}, {0.9922f, 0.7722f, 0.7722f}, - {0.99221f, 0.77121f, 0.77121f}, {0.99222f, 0.77022f, 0.77022f}, - {0.99223f, 0.76923f, 0.76923f}, {0.99224f, 0.76824f, 0.76824f}, - {0.99225f, 0.76725f, 0.76725f}, {0.99226f, 0.7662599999999999f, - 0.7662599999999999f}, {0.99227f, 0.76527f, 0.76527f}, - {0.9922799999999999f, 0.76428f, 0.76428f}, {0.99229f, 0.76329f, 0.76329f}, - {0.9923f, 0.7623f, 0.7623f}, {0.99231f, 0.7613099999999999f, 0.7613099999999999f}, - {0.99232f, 0.76032f, 0.76032f}, {0.99233f, 0.75933f, 0.75933f}, - {0.99234f, 0.75834f, 0.75834f}, {0.99235f, 0.75735f, 0.75735f}, - {0.99236f, 0.7563599999999999f, 0.7563599999999999f}, - {0.99237f, 0.75537f, 0.75537f}, {0.99238f, 0.7543799999999999f, - 0.7543799999999999f}, {0.99239f, 0.75339f, 0.75339f}, {0.9924f, 0.7524f, 0.7524f}, - {0.99241f, 0.75141f, 0.75141f}, {0.99242f, 0.75042f, 0.75042f}, - {0.99243f, 0.74943f, 0.74943f}, {0.99244f, 0.74844f, 0.74844f}, - {0.9924499999999999f, 0.74745f, 0.74745f}, {0.99246f, 0.74646f, 0.74646f}, - {0.99247f, 0.74547f, 0.74547f}, {0.99248f, 0.74448f, 0.74448f}, - {0.99249f, 0.74349f, 0.74349f}, {0.9924999999999999f, 0.7424999999999999f, - 0.7424999999999999f}, {0.99251f, 0.74151f, 0.74151f}, - {0.99252f, 0.74052f, 0.74052f}, {0.99253f, 0.73953f, 0.73953f}, - {0.99254f, 0.73854f, 0.73854f}, {0.99255f, 0.7375499999999999f, - 0.7375499999999999f}, {0.99256f, 0.73656f, 0.73656f}, - {0.99257f, 0.7355700000000001f, 0.7355700000000001f}, - {0.99258f, 0.73458f, 0.73458f}, {0.99259f, 0.73359f, 0.73359f}, - {0.9926f, 0.7325999999999999f, 0.7325999999999999f}, - {0.99261f, 0.73161f, 0.73161f}, {0.99262f, 0.73062f, 0.73062f}, - {0.99263f, 0.72963f, 0.72963f}, {0.99264f, 0.72864f, 0.72864f}, - {0.99265f, 0.7276499999999999f, 0.7276499999999999f}, - {0.99266f, 0.72666f, 0.72666f}, {0.9926699999999999f, 0.72567f, 0.72567f}, - {0.99268f, 0.72468f, 0.72468f}, {0.99269f, 0.7236899999999999f, - 0.7236899999999999f}, {0.9927f, 0.7226999999999999f, 0.7226999999999999f}, - {0.99271f, 0.72171f, 0.72171f}, {0.99272f, 0.72072f, 0.72072f}, - {0.99273f, 0.71973f, 0.71973f}, {0.99274f, 0.7187399999999999f, - 0.7187399999999999f}, {0.99275f, 0.71775f, 0.71775f}, - {0.99276f, 0.71676f, 0.71676f}, {0.99277f, 0.71577f, 0.71577f}, - {0.99278f, 0.71478f, 0.71478f}, {0.99279f, 0.7137899999999999f, - 0.7137899999999999f}, {0.9928f, 0.7128f, 0.7128f}, - {0.99281f, 0.7118099999999999f, 0.7118099999999999f}, - {0.99282f, 0.71082f, 0.71082f}, {0.99283f, 0.70983f, 0.70983f}, - {0.99284f, 0.7088399999999999f, 0.7088399999999999f}, - {0.99285f, 0.70785f, 0.70785f}, {0.99286f, 0.70686f, 0.70686f}, - {0.99287f, 0.70587f, 0.70587f}, {0.99288f, 0.70488f, 0.70488f}, - {0.9928899999999999f, 0.70389f, 0.70389f}, {0.9929f, 0.7029000000000001f, - 0.7029000000000001f}, {0.99291f, 0.70191f, 0.70191f}, - {0.99292f, 0.70092f, 0.70092f}, {0.99293f, 0.6999299999999999f, - 0.6999299999999999f}, {0.99294f, 0.69894f, 0.69894f}, - {0.99295f, 0.6979500000000001f, 0.6979500000000001f}, - {0.99296f, 0.69696f, 0.69696f}, {0.99297f, 0.69597f, 0.69597f}, - {0.99298f, 0.6949799999999999f, 0.6949799999999999f}, - {0.99299f, 0.69399f, 0.69399f}, {0.993f, 0.6930000000000001f, - 0.6930000000000001f}, {0.99301f, 0.69201f, 0.69201f}, - {0.99302f, 0.69102f, 0.69102f}, {0.99303f, 0.6900299999999999f, - 0.6900299999999999f}, {0.99304f, 0.68904f, 0.68904f}, - {0.99305f, 0.68805f, 0.68805f}, {0.9930599999999999f, 0.68706f, 0.68706f}, - {0.99307f, 0.68607f, 0.68607f}, {0.99308f, 0.68508f, 0.68508f}, - {0.99309f, 0.68409f, 0.68409f}, {0.9931f, 0.6831f, 0.6831f}, - {0.99311f, 0.68211f, 0.68211f}, {0.99312f, 0.68112f, 0.68112f}, - {0.99313f, 0.68013f, 0.68013f}, {0.99314f, 0.67914f, 0.67914f}, - {0.99315f, 0.67815f, 0.67815f}, {0.99316f, 0.67716f, 0.67716f}, - {0.99317f, 0.6761699999999999f, 0.6761699999999999f}, - {0.99318f, 0.67518f, 0.67518f}, {0.99319f, 0.6741900000000001f, - 0.6741900000000001f}, {0.9932f, 0.6732f, 0.6732f}, {0.99321f, 0.67221f, 0.67221f}, - {0.99322f, 0.6712199999999999f, 0.6712199999999999f}, - {0.99323f, 0.67023f, 0.67023f}, {0.99324f, 0.6692400000000001f, - 0.6692400000000001f}, {0.99325f, 0.66825f, 0.66825f}, - {0.99326f, 0.66726f, 0.66726f}, {0.99327f, 0.6662699999999999f, - 0.6662699999999999f}, {0.9932799999999999f, 0.66528f, 0.66528f}, - {0.99329f, 0.66429f, 0.66429f}, {0.9933f, 0.6633f, 0.6633f}, - {0.99331f, 0.66231f, 0.66231f}, {0.99332f, 0.6613199999999999f, - 0.6613199999999999f}, {0.99333f, 0.66033f, 0.66033f}, - {0.99334f, 0.65934f, 0.65934f}, {0.99335f, 0.65835f, 0.65835f}, - {0.99336f, 0.6573599999999999f, 0.6573599999999999f}, - {0.99337f, 0.6563699999999999f, 0.6563699999999999f}, - {0.99338f, 0.65538f, 0.65538f}, {0.99339f, 0.65439f, 0.65439f}, - {0.9934f, 0.6534f, 0.6534f}, {0.99341f, 0.6524099999999999f, 0.6524099999999999f}, - {0.99342f, 0.6514199999999999f, 0.6514199999999999f}, - {0.99343f, 0.65043f, 0.65043f}, {0.99344f, 0.64944f, 0.64944f}, - {0.9934499999999999f, 0.64845f, 0.64845f}, {0.99346f, 0.6474599999999999f, - 0.6474599999999999f}, {0.99347f, 0.64647f, 0.64647f}, - {0.99348f, 0.6454799999999999f, 0.6454799999999999f}, - {0.99349f, 0.64449f, 0.64449f}, {0.9935f, 0.6435f, 0.6435f}, - {0.99351f, 0.6425099999999999f, 0.6425099999999999f}, - {0.99352f, 0.6415200000000001f, 0.6415200000000001f}, - {0.99353f, 0.64053f, 0.64053f}, {0.99354f, 0.63954f, 0.63954f}, - {0.99355f, 0.63855f, 0.63855f}, {0.99356f, 0.63756f, 0.63756f}, - {0.99357f, 0.6365700000000001f, 0.6365700000000001f}, - {0.99358f, 0.63558f, 0.63558f}, {0.99359f, 0.63459f, 0.63459f}, - {0.9936f, 0.6335999999999999f, 0.6335999999999999f}, - {0.99361f, 0.63261f, 0.63261f}, {0.99362f, 0.6316200000000001f, - 0.6316200000000001f}, {0.99363f, 0.63063f, 0.63063f}, - {0.99364f, 0.62964f, 0.62964f}, {0.99365f, 0.6286499999999999f, - 0.6286499999999999f}, {0.99366f, 0.62766f, 0.62766f}, - {0.9936699999999999f, 0.6266700000000001f, 0.6266700000000001f}, - {0.99368f, 0.62568f, 0.62568f}, {0.99369f, 0.62469f, 0.62469f}, - {0.9937f, 0.6236999999999999f, 0.6236999999999999f}, - {0.99371f, 0.62271f, 0.62271f}, {0.99372f, 0.62172f, 0.62172f}, - {0.99373f, 0.62073f, 0.62073f}, {0.99374f, 0.61974f, 0.61974f}, - {0.99375f, 0.61875f, 0.61875f}, {0.99376f, 0.61776f, 0.61776f}, - {0.99377f, 0.61677f, 0.61677f}, {0.99378f, 0.61578f, 0.61578f}, - {0.99379f, 0.61479f, 0.61479f}, {0.9938f, 0.6138f, 0.6138f}, - {0.99381f, 0.61281f, 0.61281f}, {0.99382f, 0.61182f, 0.61182f}, - {0.99383f, 0.61083f, 0.61083f}, {0.99384f, 0.6098399999999999f, - 0.6098399999999999f}, {0.99385f, 0.60885f, 0.60885f}, - {0.99386f, 0.6078600000000001f, 0.6078600000000001f}, - {0.99387f, 0.60687f, 0.60687f}, {0.99388f, 0.60588f, 0.60588f}, - {0.9938899999999999f, 0.6048899999999999f, 0.6048899999999999f}, - {0.9939f, 0.6039f, 0.6039f}, {0.99391f, 0.6029100000000001f, 0.6029100000000001f}, - {0.99392f, 0.60192f, 0.60192f}, {0.99393f, 0.60093f, 0.60093f}, - {0.99394f, 0.5999399999999999f, 0.5999399999999999f}, - {0.99395f, 0.59895f, 0.59895f}, {0.99396f, 0.59796f, 0.59796f}, - {0.99397f, 0.59697f, 0.59697f}, {0.99398f, 0.59598f, 0.59598f}, - {0.99399f, 0.5949899999999999f, 0.5949899999999999f}, {0.994f, 0.594f, 0.594f}, - {0.99401f, 0.59301f, 0.59301f}, {0.99402f, 0.59202f, 0.59202f}, - {0.99403f, 0.5910299999999999f, 0.5910299999999999f}, - {0.99404f, 0.5900399999999999f, 0.5900399999999999f}, - {0.99405f, 0.58905f, 0.58905f}, {0.9940599999999999f, 0.58806f, 0.58806f}, - {0.99407f, 0.58707f, 0.58707f}, {0.99408f, 0.5860799999999999f, - 0.5860799999999999f}, {0.99409f, 0.5850899999999999f, 0.5850899999999999f}, - {0.9941f, 0.5841f, 0.5841f}, {0.99411f, 0.58311f, 0.58311f}, - {0.99412f, 0.58212f, 0.58212f}, {0.99413f, 0.5811299999999999f, - 0.5811299999999999f}, {0.99414f, 0.5801399999999999f, 0.5801399999999999f}, - {0.99415f, 0.5791499999999999f, 0.5791499999999999f}, - {0.99416f, 0.57816f, 0.57816f}, {0.99417f, 0.57717f, 0.57717f}, - {0.99418f, 0.57618f, 0.57618f}, {0.99419f, 0.5751900000000001f, - 0.5751900000000001f}, {0.9942f, 0.5742f, 0.5742f}, {0.99421f, 0.57321f, 0.57321f}, - {0.99422f, 0.57222f, 0.57222f}, {0.99423f, 0.57123f, 0.57123f}, - {0.99424f, 0.5702400000000001f, 0.5702400000000001f}, - {0.99425f, 0.56925f, 0.56925f}, {0.99426f, 0.56826f, 0.56826f}, - {0.99427f, 0.5672699999999999f, 0.5672699999999999f}, - {0.9942799999999999f, 0.56628f, 0.56628f}, {0.99429f, 0.5652900000000001f, - 0.5652900000000001f}, {0.9943f, 0.5643f, 0.5643f}, {0.99431f, 0.56331f, 0.56331f}, - {0.99432f, 0.5623199999999999f, 0.5623199999999999f}, - {0.99433f, 0.56133f, 0.56133f}, {0.99434f, 0.5603400000000001f, - 0.5603400000000001f}, {0.99435f, 0.55935f, 0.55935f}, - {0.99436f, 0.55836f, 0.55836f}, {0.99437f, 0.5573699999999999f, - 0.5573699999999999f}, {0.99438f, 0.55638f, 0.55638f}, - {0.99439f, 0.55539f, 0.55539f}, {0.9944f, 0.5544f, 0.5544f}, - {0.99441f, 0.55341f, 0.55341f}, {0.99442f, 0.5524199999999999f, - 0.5524199999999999f}, {0.99443f, 0.55143f, 0.55143f}, - {0.99444f, 0.55044f, 0.55044f}, {0.99445f, 0.54945f, 0.54945f}, - {0.99446f, 0.54846f, 0.54846f}, {0.99447f, 0.54747f, 0.54747f}, - {0.99448f, 0.54648f, 0.54648f}, {0.99449f, 0.54549f, 0.54549f}, - {0.9944999999999999f, 0.5445f, 0.5445f}, {0.99451f, 0.5435099999999999f, - 0.5435099999999999f}, {0.99452f, 0.54252f, 0.54252f}, - {0.99453f, 0.54153f, 0.54153f}, {0.99454f, 0.54054f, 0.54054f}, - {0.99455f, 0.53955f, 0.53955f}, {0.99456f, 0.5385599999999999f, - 0.5385599999999999f}, {0.99457f, 0.53757f, 0.53757f}, - {0.99458f, 0.5365800000000001f, 0.5365800000000001f}, - {0.99459f, 0.53559f, 0.53559f}, {0.9946f, 0.5346f, 0.5346f}, - {0.99461f, 0.5336099999999999f, 0.5336099999999999f}, - {0.99462f, 0.53262f, 0.53262f}, {0.99463f, 0.53163f, 0.53163f}, - {0.99464f, 0.53064f, 0.53064f}, {0.99465f, 0.52965f, 0.52965f}, - {0.99466f, 0.5286599999999999f, 0.5286599999999999f}, - {0.9946699999999999f, 0.52767f, 0.52767f}, {0.99468f, 0.52668f, 0.52668f}, - {0.99469f, 0.52569f, 0.52569f}, {0.9947f, 0.5246999999999999f, - 0.5246999999999999f}, {0.99471f, 0.5237099999999999f, 0.5237099999999999f}, - {0.99472f, 0.52272f, 0.52272f}, {0.99473f, 0.52173f, 0.52173f}, - {0.99474f, 0.52074f, 0.52074f}, {0.99475f, 0.5197499999999999f, - 0.5197499999999999f}, {0.99476f, 0.5187599999999999f, 0.5187599999999999f}, - {0.99477f, 0.51777f, 0.51777f}, {0.99478f, 0.51678f, 0.51678f}, - {0.99479f, 0.51579f, 0.51579f}, {0.9948f, 0.5148f, 0.5148f}, - {0.99481f, 0.51381f, 0.51381f}, {0.99482f, 0.51282f, 0.51282f}, - {0.99483f, 0.51183f, 0.51183f}, {0.99484f, 0.51084f, 0.51084f}, - {0.99485f, 0.50985f, 0.50985f}, {0.99486f, 0.5088600000000001f, - 0.5088600000000001f}, {0.99487f, 0.50787f, 0.50787f}, - {0.99488f, 0.50688f, 0.50688f}, {0.9948899999999999f, 0.50589f, 0.50589f}, - {0.9949f, 0.5049f, 0.5049f}, {0.99491f, 0.5039100000000001f, 0.5039100000000001f}, - {0.99492f, 0.50292f, 0.50292f}, {0.99493f, 0.50193f, 0.50193f}, - {0.99494f, 0.5009399999999999f, 0.5009399999999999f}, - {0.99495f, 0.49995f, 0.49995f}, {0.99496f, 0.49896f, 0.49896f}, - {0.99497f, 0.49797f, 0.49797f}, {0.99498f, 0.49698f, 0.49698f}, - {0.99499f, 0.49599f, 0.49599f}, {0.995f, 0.495f, 0.495f}, - {0.99501f, 0.49401f, 0.49401f}, {0.99502f, 0.49302f, 0.49302f}, - {0.99503f, 0.49202999999999997f, 0.49202999999999997f}, - {0.99504f, 0.49104f, 0.49104f}, {0.99505f, 0.49005f, 0.49005f}, - {0.99506f, 0.48905999999999994f, 0.48905999999999994f}, - {0.99507f, 0.48807f, 0.48807f}, {0.99508f, 0.48707999999999996f, - 0.48707999999999996f}, {0.99509f, 0.48609f, 0.48609f}, - {0.9951f, 0.4851f, 0.4851f}, {0.99511f, 0.48411000000000004f, - 0.48411000000000004f}, {0.99512f, 0.48312f, 0.48312f}, - {0.99513f, 0.48212999999999995f, 0.48212999999999995f}, - {0.99514f, 0.48114f, 0.48114f}, {0.99515f, 0.48014999999999997f, - 0.48014999999999997f}, {0.99516f, 0.47916000000000003f, 0.47916000000000003f}, - {0.99517f, 0.47817f, 0.47817f}, {0.99518f, 0.47717999999999994f, - 0.47717999999999994f}, {0.99519f, 0.47619f, 0.47619f}, - {0.9952f, 0.47519999999999996f, 0.47519999999999996f}, - {0.99521f, 0.47421f, 0.47421f}, {0.99522f, 0.47322f, 0.47322f}, - {0.99523f, 0.4722299999999999f, 0.4722299999999999f}, - {0.99524f, 0.47124f, 0.47124f}, {0.99525f, 0.47024999999999995f, - 0.47024999999999995f}, {0.99526f, 0.46926f, 0.46926f}, - {0.99527f, 0.46826999999999996f, 0.46826999999999996f}, - {0.9952799999999999f, 0.4672799999999999f, 0.4672799999999999f}, - {0.99529f, 0.46629f, 0.46629f}, {0.9953f, 0.46529999999999994f, - 0.46529999999999994f}, {0.99531f, 0.46431f, 0.46431f}, - {0.99532f, 0.46331999999999995f, 0.46331999999999995f}, - {0.99533f, 0.46233f, 0.46233f}, {0.99534f, 0.46134f, 0.46134f}, - {0.99535f, 0.4603499999999999f, 0.4603499999999999f}, - {0.99536f, 0.45936f, 0.45936f}, {0.99537f, 0.45836999999999994f, - 0.45836999999999994f}, {0.99538f, 0.45738f, 0.45738f}, - {0.99539f, 0.45638999999999996f, 0.45638999999999996f}, - {0.9954f, 0.4553999999999999f, 0.4553999999999999f}, - {0.99541f, 0.45441f, 0.45441f}, {0.99542f, 0.45341999999999993f, - 0.45341999999999993f}, {0.99543f, 0.45243f, 0.45243f}, - {0.99544f, 0.45143999999999995f, 0.45143999999999995f}, - {0.99545f, 0.4504499999999999f, 0.4504499999999999f}, - {0.99546f, 0.44945999999999997f, 0.44945999999999997f}, - {0.99547f, 0.4484699999999999f, 0.4484699999999999f}, - {0.99548f, 0.44748f, 0.44748f}, {0.99549f, 0.44648999999999994f, - 0.44648999999999994f}, {0.9955f, 0.4455f, 0.4455f}, - {0.99551f, 0.44450999999999996f, 0.44450999999999996f}, - {0.99552f, 0.4435199999999999f, 0.4435199999999999f}, - {0.99553f, 0.44253f, 0.44253f}, {0.99554f, 0.44153999999999993f, - 0.44153999999999993f}, {0.99555f, 0.44055f, 0.44055f}, - {0.99556f, 0.43955999999999995f, 0.43955999999999995f}, - {0.99557f, 0.4385699999999999f, 0.4385699999999999f}, - {0.99558f, 0.43757999999999997f, 0.43757999999999997f}, - {0.99559f, 0.4365899999999999f, 0.4365899999999999f}, {0.9956f, 0.4356f, 0.4356f}, - {0.99561f, 0.43460999999999994f, 0.43460999999999994f}, - {0.99562f, 0.4336199999999999f, 0.4336199999999999f}, - {0.99563f, 0.43262999999999996f, 0.43262999999999996f}, - {0.99564f, 0.4316399999999999f, 0.4316399999999999f}, - {0.99565f, 0.43065f, 0.43065f}, {0.99566f, 0.42965999999999993f, - 0.42965999999999993f}, {0.9956699999999999f, 0.4286699999999999f, - 0.4286699999999999f}, {0.99568f, 0.42767999999999995f, 0.42767999999999995f}, - {0.99569f, 0.4266899999999999f, 0.4266899999999999f}, - {0.9957f, 0.42569999999999997f, 0.42569999999999997f}, - {0.99571f, 0.4247099999999999f, 0.4247099999999999f}, - {0.99572f, 0.42372f, 0.42372f}, {0.99573f, 0.42272999999999994f, - 0.42272999999999994f}, {0.99574f, 0.4217399999999999f, 0.4217399999999999f}, - {0.99575f, 0.42074999999999996f, 0.42074999999999996f}, - {0.99576f, 0.4197599999999999f, 0.4197599999999999f}, - {0.99577f, 0.4187700000000001f, 0.4187700000000001f}, - {0.99578f, 0.41778000000000004f, 0.41778000000000004f}, - {0.99579f, 0.41679f, 0.41679f}, {0.9958f, 0.41580000000000006f, - 0.41580000000000006f}, {0.99581f, 0.41481f, 0.41481f}, - {0.99582f, 0.4138200000000001f, 0.4138200000000001f}, - {0.99583f, 0.41283000000000003f, 0.41283000000000003f}, - {0.99584f, 0.41184f, 0.41184f}, {0.99585f, 0.41085000000000005f, - 0.41085000000000005f}, {0.99586f, 0.40986f, 0.40986f}, - {0.99587f, 0.40887000000000007f, 0.40887000000000007f}, - {0.99588f, 0.40788f, 0.40788f}, {0.9958899999999999f, 0.40689f, 0.40689f}, - {0.9959f, 0.40590000000000004f, 0.40590000000000004f}, - {0.99591f, 0.40491f, 0.40491f}, {0.99592f, 0.40392000000000006f, - 0.40392000000000006f}, {0.99593f, 0.40293f, 0.40293f}, - {0.99594f, 0.4019400000000001f, 0.4019400000000001f}, - {0.99595f, 0.40095000000000003f, 0.40095000000000003f}, - {0.99596f, 0.39996f, 0.39996f}, {0.99597f, 0.39897000000000005f, - 0.39897000000000005f}, {0.99598f, 0.39798f, 0.39798f}, - {0.99599f, 0.39699000000000007f, 0.39699000000000007f}, {0.996f, 0.396f, 0.396f}, - {0.99601f, 0.39501f, 0.39501f}, {0.99602f, 0.39402000000000004f, - 0.39402000000000004f}, {0.99603f, 0.39303f, 0.39303f}, - {0.99604f, 0.39204000000000006f, 0.39204000000000006f}, - {0.99605f, 0.39105f, 0.39105f}, {0.99606f, 0.39005999999999996f, - 0.39005999999999996f}, {0.99607f, 0.38907f, 0.38907f}, - {0.99608f, 0.38808f, 0.38808f}, {0.99609f, 0.38709000000000005f, - 0.38709000000000005f}, {0.9961f, 0.3861f, 0.3861f}, - {0.99611f, 0.38511000000000006f, 0.38511000000000006f}, - {0.99612f, 0.38412f, 0.38412f}, {0.99613f, 0.38312999999999997f, - 0.38312999999999997f}, {0.99614f, 0.38214000000000004f, 0.38214000000000004f}, - {0.99615f, 0.38115f, 0.38115f}, {0.99616f, 0.38016000000000005f, - 0.38016000000000005f}, {0.99617f, 0.37917f, 0.37917f}, - {0.99618f, 0.37817999999999996f, 0.37817999999999996f}, - {0.99619f, 0.37719f, 0.37719f}, {0.9962f, 0.3762f, 0.3762f}, - {0.99621f, 0.37521000000000004f, 0.37521000000000004f}, - {0.99622f, 0.37422f, 0.37422f}, {0.99623f, 0.37322999999999995f, - 0.37322999999999995f}, {0.99624f, 0.37224f, 0.37224f}, - {0.99625f, 0.37124999999999997f, 0.37124999999999997f}, - {0.99626f, 0.37026000000000003f, 0.37026000000000003f}, - {0.99627f, 0.36927f, 0.36927f}, {0.9962799999999999f, 0.36827999999999994f, - 0.36827999999999994f}, {0.99629f, 0.36729f, 0.36729f}, - {0.9963f, 0.36629999999999996f, 0.36629999999999996f}, - {0.99631f, 0.36531f, 0.36531f}, {0.99632f, 0.36432f, 0.36432f}, - {0.99633f, 0.36333000000000004f, 0.36333000000000004f}, - {0.99634f, 0.36234f, 0.36234f}, {0.99635f, 0.36134999999999995f, - 0.36134999999999995f}, {0.99636f, 0.36036f, 0.36036f}, - {0.99637f, 0.35936999999999997f, 0.35936999999999997f}, - {0.99638f, 0.35838000000000003f, 0.35838000000000003f}, - {0.99639f, 0.35739f, 0.35739f}, {0.9964f, 0.35639999999999994f, - 0.35639999999999994f}, {0.99641f, 0.35541f, 0.35541f}, - {0.99642f, 0.35441999999999996f, 0.35441999999999996f}, - {0.99643f, 0.35343f, 0.35343f}, {0.99644f, 0.35244f, 0.35244f}, - {0.99645f, 0.35144999999999993f, 0.35144999999999993f}, - {0.99646f, 0.35046f, 0.35046f}, {0.99647f, 0.34946999999999995f, - 0.34946999999999995f}, {0.99648f, 0.34848f, 0.34848f}, - {0.99649f, 0.34748999999999997f, 0.34748999999999997f}, - {0.9964999999999999f, 0.34650000000000003f, 0.34650000000000003f}, - {0.99651f, 0.34551f, 0.34551f}, {0.99652f, 0.34451999999999994f, - 0.34451999999999994f}, {0.99653f, 0.34353f, 0.34353f}, - {0.99654f, 0.34253999999999996f, 0.34253999999999996f}, - {0.99655f, 0.34155f, 0.34155f}, {0.99656f, 0.34056f, 0.34056f}, - {0.99657f, 0.3395699999999999f, 0.3395699999999999f}, - {0.99658f, 0.33858f, 0.33858f}, {0.99659f, 0.33758999999999995f, - 0.33758999999999995f}, {0.9966f, 0.3366f, 0.3366f}, - {0.99661f, 0.33560999999999996f, 0.33560999999999996f}, - {0.99662f, 0.3346199999999999f, 0.3346199999999999f}, - {0.99663f, 0.33363f, 0.33363f}, {0.99664f, 0.33263999999999994f, - 0.33263999999999994f}, {0.99665f, 0.33165f, 0.33165f}, - {0.99666f, 0.33065999999999995f, 0.33065999999999995f}, - {0.99667f, 0.3296699999999999f, 0.3296699999999999f}, - {0.99668f, 0.32867999999999997f, 0.32867999999999997f}, - {0.99669f, 0.3276899999999999f, 0.3276899999999999f}, {0.9967f, 0.3267f, 0.3267f}, - {0.99671f, 0.32570999999999994f, 0.32570999999999994f}, - {0.99672f, 0.32472f, 0.32472f}, {0.99673f, 0.32372999999999996f, - 0.32372999999999996f}, {0.99674f, 0.3227399999999999f, 0.3227399999999999f}, - {0.99675f, 0.32175f, 0.32175f}, {0.99676f, 0.32075999999999993f, - 0.32075999999999993f}, {0.99677f, 0.31977f, 0.31977f}, - {0.99678f, 0.31877999999999995f, 0.31877999999999995f}, - {0.99679f, 0.3177899999999999f, 0.3177899999999999f}, - {0.9968f, 0.31679999999999997f, 0.31679999999999997f}, - {0.99681f, 0.3158099999999999f, 0.3158099999999999f}, - {0.99682f, 0.31482f, 0.31482f}, {0.99683f, 0.31382999999999994f, - 0.31382999999999994f}, {0.99684f, 0.3128399999999999f, 0.3128399999999999f}, - {0.99685f, 0.31184999999999996f, 0.31184999999999996f}, - {0.99686f, 0.3108599999999999f, 0.3108599999999999f}, - {0.99687f, 0.30987f, 0.30987f}, {0.99688f, 0.30887999999999993f, - 0.30887999999999993f}, {0.9968899999999999f, 0.3078899999999999f, - 0.3078899999999999f}, {0.9969f, 0.30689999999999995f, 0.30689999999999995f}, - {0.99691f, 0.3059099999999999f, 0.3059099999999999f}, - {0.99692f, 0.30491999999999997f, 0.30491999999999997f}, - {0.99693f, 0.3039299999999999f, 0.3039299999999999f}, - {0.99694f, 0.30294f, 0.30294f}, {0.99695f, 0.30194999999999994f, - 0.30194999999999994f}, {0.99696f, 0.3009599999999999f, 0.3009599999999999f}, - {0.99697f, 0.29996999999999996f, 0.29996999999999996f}, - {0.99698f, 0.2989799999999999f, 0.2989799999999999f}, - {0.99699f, 0.29799f, 0.29799f}, {0.997f, 0.29699999999999993f, - 0.29699999999999993f}, {0.99701f, 0.2960099999999999f, 0.2960099999999999f}, - {0.99702f, 0.29501999999999995f, 0.29501999999999995f}, - {0.99703f, 0.2940299999999999f, 0.2940299999999999f}, - {0.99704f, 0.2930400000000001f, 0.2930400000000001f}, - {0.99705f, 0.29205000000000003f, 0.29205000000000003f}, - {0.99706f, 0.29106f, 0.29106f}, {0.99707f, 0.29007000000000005f, - 0.29007000000000005f}, {0.99708f, 0.28908f, 0.28908f}, - {0.99709f, 0.28809000000000007f, 0.28809000000000007f}, - {0.9971f, 0.2871f, 0.2871f}, {0.99711f, 0.2861100000000001f, 0.2861100000000001f}, - {0.99712f, 0.28512000000000004f, 0.28512000000000004f}, - {0.99713f, 0.28413f, 0.28413f}, {0.99714f, 0.28314000000000006f, - 0.28314000000000006f}, {0.99715f, 0.28215f, 0.28215f}, - {0.99716f, 0.2811600000000001f, 0.2811600000000001f}, - {0.99717f, 0.28017000000000003f, 0.28017000000000003f}, - {0.99718f, 0.27918f, 0.27918f}, {0.99719f, 0.27819000000000005f, - 0.27819000000000005f}, {0.9972f, 0.2772f, 0.2772f}, - {0.99721f, 0.27621000000000007f, 0.27621000000000007f}, - {0.99722f, 0.27522f, 0.27522f}, {0.99723f, 0.27423f, 0.27423f}, - {0.99724f, 0.27324000000000004f, 0.27324000000000004f}, - {0.99725f, 0.27225f, 0.27225f}, {0.99726f, 0.27126000000000006f, - 0.27126000000000006f}, {0.99727f, 0.27027f, 0.27027f}, - {0.9972799999999999f, 0.26927999999999996f, 0.26927999999999996f}, - {0.99729f, 0.26829000000000003f, 0.26829000000000003f}, - {0.9973f, 0.2673f, 0.2673f}, {0.99731f, 0.26631000000000005f, - 0.26631000000000005f}, {0.99732f, 0.26532f, 0.26532f}, - {0.99733f, 0.26433000000000006f, 0.26433000000000006f}, - {0.99734f, 0.26334f, 0.26334f}, {0.99735f, 0.26234999999999997f, - 0.26234999999999997f}, {0.99736f, 0.26136000000000004f, 0.26136000000000004f}, - {0.99737f, 0.26037f, 0.26037f}, {0.99738f, 0.25938000000000005f, - 0.25938000000000005f}, {0.99739f, 0.25839f, 0.25839f}, - {0.9974f, 0.25739999999999996f, 0.25739999999999996f}, - {0.99741f, 0.25641f, 0.25641f}, {0.99742f, 0.25542f, 0.25542f}, - {0.99743f, 0.25443000000000005f, 0.25443000000000005f}, - {0.99744f, 0.25344f, 0.25344f}, {0.99745f, 0.25244999999999995f, - 0.25244999999999995f}, {0.99746f, 0.25146f, 0.25146f}, - {0.99747f, 0.25046999999999997f, 0.25046999999999997f}, - {0.99748f, 0.24948000000000004f, 0.24948000000000004f}, - {0.99749f, 0.24849f, 0.24849f}, {0.9975f, 0.24750000000000005f, - 0.24750000000000005f}, {0.99751f, 0.24651f, 0.24651f}, - {0.99752f, 0.24551999999999996f, 0.24551999999999996f}, - {0.99753f, 0.24453000000000003f, 0.24453000000000003f}, - {0.99754f, 0.24353999999999998f, 0.24353999999999998f}, - {0.99755f, 0.24255000000000004f, 0.24255000000000004f}, - {0.99756f, 0.24156f, 0.24156f}, {0.99757f, 0.24056999999999995f, - 0.24056999999999995f}, {0.99758f, 0.23958000000000002f, 0.23958000000000002f}, - {0.99759f, 0.23858999999999997f, 0.23858999999999997f}, - {0.9976f, 0.23760000000000003f, 0.23760000000000003f}, - {0.99761f, 0.23661f, 0.23661f}, {0.99762f, 0.23561999999999994f, - 0.23561999999999994f}, {0.99763f, 0.23463f, 0.23463f}, - {0.99764f, 0.23363999999999996f, 0.23363999999999996f}, - {0.99765f, 0.23265000000000002f, 0.23265000000000002f}, - {0.99766f, 0.23165999999999998f, 0.23165999999999998f}, - {0.99767f, 0.23066999999999993f, 0.23066999999999993f}, - {0.99768f, 0.22968f, 0.22968f}, {0.99769f, 0.22868999999999995f, - 0.22868999999999995f}, {0.9977f, 0.2277f, 0.2277f}, - {0.99771f, 0.22670999999999997f, 0.22670999999999997f}, - {0.99772f, 0.22572000000000003f, 0.22572000000000003f}, - {0.99773f, 0.22472999999999999f, 0.22472999999999999f}, - {0.99774f, 0.22373999999999994f, 0.22373999999999994f}, - {0.99775f, 0.22275f, 0.22275f}, {0.99776f, 0.22175999999999996f, - 0.22175999999999996f}, {0.99777f, 0.22077000000000002f, 0.22077000000000002f}, - {0.99778f, 0.21977999999999998f, 0.21977999999999998f}, - {0.99779f, 0.21878999999999993f, 0.21878999999999993f}, - {0.9978f, 0.2178f, 0.2178f}, {0.99781f, 0.21680999999999995f, - 0.21680999999999995f}, {0.99782f, 0.21582f, 0.21582f}, - {0.99783f, 0.21482999999999997f, 0.21482999999999997f}, - {0.99784f, 0.21383999999999992f, 0.21383999999999992f}, - {0.99785f, 0.21284999999999998f, 0.21284999999999998f}, - {0.99786f, 0.21185999999999994f, 0.21185999999999994f}, - {0.99787f, 0.21087f, 0.21087f}, {0.99788f, 0.20987999999999996f, - 0.20987999999999996f}, {0.9978899999999999f, 0.2088899999999999f, - 0.2088899999999999f}, {0.9979f, 0.20789999999999997f, 0.20789999999999997f}, - {0.99791f, 0.20690999999999993f, 0.20690999999999993f}, - {0.99792f, 0.20592f, 0.20592f}, {0.99793f, 0.20492999999999995f, - 0.20492999999999995f}, {0.99794f, 0.20394f, 0.20394f}, - {0.99795f, 0.20294999999999996f, 0.20294999999999996f}, - {0.99796f, 0.20195999999999992f, 0.20195999999999992f}, - {0.99797f, 0.20096999999999998f, 0.20096999999999998f}, - {0.99798f, 0.19997999999999994f, 0.19997999999999994f}, - {0.99799f, 0.19899f, 0.19899f}, {0.998f, 0.19799999999999995f, - 0.19799999999999995f}, {0.99801f, 0.1970099999999999f, 0.1970099999999999f}, - {0.99802f, 0.19601999999999997f, 0.19601999999999997f}, - {0.99803f, 0.19502999999999993f, 0.19502999999999993f}, - {0.99804f, 0.19404f, 0.19404f}, {0.99805f, 0.19304999999999994f, - 0.19304999999999994f}, {0.99806f, 0.1920599999999999f, 0.1920599999999999f}, - {0.99807f, 0.19106999999999996f, 0.19106999999999996f}, - {0.99808f, 0.19007999999999992f, 0.19007999999999992f}, - {0.99809f, 0.18908999999999998f, 0.18908999999999998f}, - {0.9981f, 0.18809999999999993f, 0.18809999999999993f}, - {0.99811f, 0.18711f, 0.18711f}, {0.99812f, 0.18611999999999995f, - 0.18611999999999995f}, {0.99813f, 0.1851299999999999f, 0.1851299999999999f}, - {0.99814f, 0.18413999999999997f, 0.18413999999999997f}, - {0.99815f, 0.18314999999999992f, 0.18314999999999992f}, - {0.99816f, 0.18216f, 0.18216f}, {0.99817f, 0.18116999999999994f, - 0.18116999999999994f}, {0.99818f, 0.1801799999999999f, 0.1801799999999999f}, - {0.99819f, 0.17918999999999996f, 0.17918999999999996f}, - {0.9982f, 0.17819999999999991f, 0.17819999999999991f}, - {0.99821f, 0.17720999999999998f, 0.17720999999999998f}, - {0.99822f, 0.17621999999999993f, 0.17621999999999993f}, - {0.99823f, 0.17522999999999989f, 0.17522999999999989f}, - {0.99824f, 0.17423999999999995f, 0.17423999999999995f}, - {0.99825f, 0.1732499999999999f, 0.1732499999999999f}, - {0.99826f, 0.17225999999999997f, 0.17225999999999997f}, - {0.99827f, 0.17126999999999992f, 0.17126999999999992f}, - {0.99828f, 0.17027999999999988f, 0.17027999999999988f}, - {0.99829f, 0.16928999999999994f, 0.16928999999999994f}, - {0.9983f, 0.1682999999999999f, 0.1682999999999999f}, - {0.99831f, 0.16730999999999996f, 0.16730999999999996f}, - {0.99832f, 0.1663199999999999f, 0.1663199999999999f}, - {0.99833f, 0.1653300000000001f, 0.1653300000000001f}, - {0.99834f, 0.16434000000000004f, 0.16434000000000004f}, - {0.99835f, 0.16335f, 0.16335f}, {0.99836f, 0.16236000000000006f, - 0.16236000000000006f}, {0.99837f, 0.16137f, 0.16137f}, - {0.99838f, 0.16038000000000008f, 0.16038000000000008f}, - {0.99839f, 0.15939000000000003f, 0.15939000000000003f}, - {0.9984f, 0.15839999999999999f, 0.15839999999999999f}, - {0.99841f, 0.15741000000000005f, 0.15741000000000005f}, - {0.99842f, 0.15642f, 0.15642f}, {0.99843f, 0.15543000000000007f, - 0.15543000000000007f}, {0.99844f, 0.15444000000000002f, 0.15444000000000002f}, - {0.99845f, 0.15344999999999998f, 0.15344999999999998f}, - {0.99846f, 0.15246000000000004f, 0.15246000000000004f}, - {0.99847f, 0.15147f, 0.15147f}, {0.99848f, 0.15048000000000006f, - 0.15048000000000006f}, {0.99849f, 0.14949f, 0.14949f}, - {0.9984999999999999f, 0.14849999999999997f, 0.14849999999999997f}, - {0.99851f, 0.14751000000000003f, 0.14751000000000003f}, - {0.99852f, 0.14651999999999998f, 0.14651999999999998f}, - {0.99853f, 0.14553000000000005f, 0.14553000000000005f}, - {0.99854f, 0.14454f, 0.14454f}, {0.99855f, 0.14355000000000007f, - 0.14355000000000007f}, {0.99856f, 0.14256000000000002f, 0.14256000000000002f}, - {0.99857f, 0.14156999999999997f, 0.14156999999999997f}, - {0.99858f, 0.14058000000000004f, 0.14058000000000004f}, - {0.99859f, 0.13959f, 0.13959f}, {0.9986f, 0.13860000000000006f, - 0.13860000000000006f}, {0.99861f, 0.13761f, 0.13761f}, - {0.99862f, 0.13661999999999996f, 0.13661999999999996f}, - {0.99863f, 0.13563000000000003f, 0.13563000000000003f}, - {0.99864f, 0.13463999999999998f, 0.13463999999999998f}, - {0.99865f, 0.13365000000000005f, 0.13365000000000005f}, - {0.99866f, 0.13266f, 0.13266f}, {0.99867f, 0.13166999999999995f, - 0.13166999999999995f}, {0.99868f, 0.13068000000000002f, 0.13068000000000002f}, - {0.99869f, 0.12968999999999997f, 0.12968999999999997f}, - {0.9987f, 0.12870000000000004f, 0.12870000000000004f}, - {0.99871f, 0.12771f, 0.12771f}, {0.99872f, 0.12672000000000005f, - 0.12672000000000005f}, {0.99873f, 0.12573f, 0.12573f}, - {0.99874f, 0.12473999999999996f, 0.12473999999999996f}, - {0.99875f, 0.12375000000000003f, 0.12375000000000003f}, - {0.99876f, 0.12275999999999998f, 0.12275999999999998f}, - {0.99877f, 0.12177000000000004f, 0.12177000000000004f}, - {0.99878f, 0.12078f, 0.12078f}, {0.99879f, 0.11978999999999995f, - 0.11978999999999995f}, {0.9988f, 0.11880000000000002f, 0.11880000000000002f}, - {0.99881f, 0.11780999999999997f, 0.11780999999999997f}, - {0.99882f, 0.11682000000000003f, 0.11682000000000003f}, - {0.99883f, 0.11582999999999999f, 0.11582999999999999f}, - {0.99884f, 0.11483999999999994f, 0.11483999999999994f}, - {0.99885f, 0.11385f, 0.11385f}, {0.99886f, 0.11285999999999996f, - 0.11285999999999996f}, {0.99887f, 0.11187000000000002f, 0.11187000000000002f}, - {0.99888f, 0.11087999999999998f, 0.11087999999999998f}, - {0.99889f, 0.10988999999999993f, 0.10988999999999993f}, - {0.9989f, 0.1089f, 0.1089f}, {0.99891f, 0.10790999999999995f, - 0.10790999999999995f}, {0.99892f, 0.10692000000000002f, 0.10692000000000002f}, - {0.99893f, 0.10592999999999997f, 0.10592999999999997f}, - {0.99894f, 0.10494000000000003f, 0.10494000000000003f}, - {0.99895f, 0.10394999999999999f, 0.10394999999999999f}, - {0.99896f, 0.10295999999999994f, 0.10295999999999994f}, - {0.99897f, 0.10197f, 0.10197f}, {0.99898f, 0.10097999999999996f, - 0.10097999999999996f}, {0.99899f, 0.09999000000000002f, 0.09999000000000002f}, - {0.999f, 0.09899999999999998f, 0.09899999999999998f}, - {0.99901f, 0.09800999999999993f, 0.09800999999999993f}, - {0.99902f, 0.09702f, 0.09702f}, {0.99903f, 0.09602999999999995f, - 0.09602999999999995f}, {0.99904f, 0.09504000000000001f, 0.09504000000000001f}, - {0.99905f, 0.09404999999999997f, 0.09404999999999997f}, - {0.99906f, 0.09305999999999992f, 0.09305999999999992f}, - {0.99907f, 0.09206999999999999f, 0.09206999999999999f}, - {0.99908f, 0.09107999999999994f, 0.09107999999999994f}, - {0.99909f, 0.09009f, 0.09009f}, {0.9991f, 0.08909999999999996f, - 0.08909999999999996f}, {0.99911f, 0.08811000000000002f, 0.08811000000000002f}, - {0.99912f, 0.08711999999999998f, 0.08711999999999998f}, - {0.99913f, 0.08612999999999993f, 0.08612999999999993f}, - {0.99914f, 0.08514f, 0.08514f}, {0.99915f, 0.08414999999999995f, - 0.08414999999999995f}, {0.99916f, 0.08316000000000001f, 0.08316000000000001f}, - {0.99917f, 0.08216999999999997f, 0.08216999999999997f}, - {0.99918f, 0.08117999999999992f, 0.08117999999999992f}, - {0.99919f, 0.08018999999999998f, 0.08018999999999998f}, - {0.9992f, 0.07919999999999994f, 0.07919999999999994f}, - {0.99921f, 0.07821f, 0.07821f}, {0.99922f, 0.07721999999999996f, - 0.07721999999999996f}, {0.99923f, 0.07622999999999991f, 0.07622999999999991f}, - {0.99924f, 0.07523999999999997f, 0.07523999999999997f}, - {0.99925f, 0.07424999999999993f, 0.07424999999999993f}, - {0.99926f, 0.07325999999999999f, 0.07325999999999999f}, - {0.99927f, 0.07226999999999995f, 0.07226999999999995f}, - {0.99928f, 0.0712799999999999f, 0.0712799999999999f}, - {0.99929f, 0.07028999999999996f, 0.07028999999999996f}, - {0.9993f, 0.06929999999999992f, 0.06929999999999992f}, - {0.99931f, 0.06830999999999998f, 0.06830999999999998f}, - {0.99932f, 0.06731999999999994f, 0.06731999999999994f}, - {0.99933f, 0.06633f, 0.06633f}, {0.99934f, 0.06533999999999995f, - 0.06533999999999995f}, {0.99935f, 0.06434999999999991f, 0.06434999999999991f}, - {0.99936f, 0.06335999999999997f, 0.06335999999999997f}, - {0.99937f, 0.062369999999999925f, 0.062369999999999925f}, - {0.99938f, 0.06137999999999999f, 0.06137999999999999f}, - {0.99939f, 0.060389999999999944f, 0.060389999999999944f}, - {0.9994f, 0.0593999999999999f, 0.0593999999999999f}, - {0.99941f, 0.05840999999999996f, 0.05840999999999996f}, - {0.99942f, 0.057419999999999916f, 0.057419999999999916f}, - {0.99943f, 0.05642999999999998f, 0.05642999999999998f}, - {0.99944f, 0.055439999999999934f, 0.055439999999999934f}, - {0.99945f, 0.05444999999999989f, 0.05444999999999989f}, - {0.99946f, 0.05345999999999995f, 0.05345999999999995f}, - {0.99947f, 0.052469999999999906f, 0.052469999999999906f}, - {0.99948f, 0.05147999999999997f, 0.05147999999999997f}, - {0.99949f, 0.050489999999999924f, 0.050489999999999924f}, - {0.9995f, 0.04949999999999999f, 0.04949999999999999f}, - {0.99951f, 0.04850999999999994f, 0.04850999999999994f}, - {0.99952f, 0.047519999999999896f, 0.047519999999999896f}, - {0.99953f, 0.04652999999999996f, 0.04652999999999996f}, - {0.99954f, 0.045539999999999914f, 0.045539999999999914f}, - {0.99955f, 0.04454999999999998f, 0.04454999999999998f}, - {0.99956f, 0.04355999999999993f, 0.04355999999999993f}, - {0.99957f, 0.042569999999999886f, 0.042569999999999886f}, - {0.99958f, 0.04157999999999995f, 0.04157999999999995f}, - {0.99959f, 0.040589999999999904f, 0.040589999999999904f}, - {0.9996f, 0.03960000000000008f, 0.03960000000000008f}, - {0.99961f, 0.03861000000000003f, 0.03861000000000003f}, - {0.99962f, 0.03761999999999999f, 0.03761999999999999f}, - {0.99963f, 0.03663000000000005f, 0.03663000000000005f}, - {0.99964f, 0.035640000000000005f, 0.035640000000000005f}, - {0.99965f, 0.03465000000000007f, 0.03465000000000007f}, - {0.99966f, 0.03366000000000002f, 0.03366000000000002f}, - {0.99967f, 0.03266999999999998f, 0.03266999999999998f}, - {0.99968f, 0.03168000000000004f, 0.03168000000000004f}, - {0.99969f, 0.030689999999999995f, 0.030689999999999995f}, - {0.9997f, 0.02970000000000006f, 0.02970000000000006f}, - {0.99971f, 0.028710000000000013f, 0.028710000000000013f}, - {0.99972f, 0.027720000000000078f, 0.027720000000000078f}, - {0.99973f, 0.02673000000000003f, 0.02673000000000003f}, - {0.99974f, 0.025739999999999985f, 0.025739999999999985f}, - {0.99975f, 0.02475000000000005f, 0.02475000000000005f}, - {0.99976f, 0.023760000000000003f, 0.023760000000000003f}, - {0.99977f, 0.022770000000000068f, 0.022770000000000068f}, - {0.99978f, 0.02178000000000002f, 0.02178000000000002f}, - {0.99979f, 0.020789999999999975f, 0.020789999999999975f}, - {0.9998f, 0.01980000000000004f, 0.01980000000000004f}, - {0.99981f, 0.018809999999999993f, 0.018809999999999993f}, - {0.99982f, 0.017820000000000058f, 0.017820000000000058f}, - {0.99983f, 0.01683000000000001f, 0.01683000000000001f}, - {0.99984f, 0.015839999999999965f, 0.015839999999999965f}, - {0.99985f, 0.01485000000000003f, 0.01485000000000003f}, - {0.99986f, 0.013859999999999983f, 0.013859999999999983f}, - {0.99987f, 0.012870000000000048f, 0.012870000000000048f}, - {0.99988f, 0.011880000000000002f, 0.011880000000000002f}, - {0.99989f, 0.010889999999999955f, 0.010889999999999955f}, - {0.9999f, 0.00990000000000002f, 0.00990000000000002f}, - {0.99991f, 0.008909999999999973f, 0.008909999999999973f}, - {0.99992f, 0.007920000000000038f, 0.007920000000000038f}, - {0.99993f, 0.006929999999999992f, 0.006929999999999992f}, - {0.99994f, 0.005940000000000056f, 0.005940000000000056f}, - {0.99995f, 0.00495000000000001f, 0.00495000000000001f}, - {0.99996f, 0.0039599999999999635f, 0.0039599999999999635f}, - {0.99997f, 0.002970000000000028f, 0.002970000000000028f}, - {0.99998f, 0.0019799999999999818f, 0.0019799999999999818f}, - {0.99999f, 0.0009900000000000464f, 0.0009900000000000464f}, {1.f, 0.f, 0.f}}; - - - -float palette_white_to_red[1001][3]={{1.f, 1.f, 1.f}, {0.99001f, 0.98901f, 0.98901f}, - {0.99002f, 0.98802f, 0.98802f}, {0.99003f, 0.98703f, 0.98703f}, - {0.99004f, 0.98604f, 0.98604f}, {0.99005f, 0.98505f, 0.98505f}, - {0.9900599999999999f, 0.98406f, 0.98406f}, {0.99007f, 0.98307f, 0.98307f}, - {0.99008f, 0.98208f, 0.98208f}, {0.99009f, 0.98109f, 0.98109f}, - {0.9901f, 0.9801f, 0.9801f}, {0.99011f, 0.97911f, 0.97911f}, - {0.99012f, 0.97812f, 0.97812f}, {0.99013f, 0.9771299999999999f, - 0.9771299999999999f}, {0.99014f, 0.97614f, 0.97614f}, - {0.99015f, 0.97515f, 0.97515f}, {0.99016f, 0.97416f, 0.97416f}, - {0.99017f, 0.97317f, 0.97317f}, {0.99018f, 0.97218f, 0.97218f}, - {0.99019f, 0.97119f, 0.97119f}, {0.9902f, 0.9702f, 0.9702f}, - {0.99021f, 0.96921f, 0.96921f}, {0.99022f, 0.96822f, 0.96822f}, - {0.9902299999999999f, 0.96723f, 0.96723f}, {0.99024f, 0.96624f, 0.96624f}, - {0.99025f, 0.9652499999999999f, 0.9652499999999999f}, - {0.99026f, 0.96426f, 0.96426f}, {0.99027f, 0.96327f, 0.96327f}, - {0.9902799999999999f, 0.96228f, 0.96228f}, {0.99029f, 0.96129f, 0.96129f}, - {0.9903f, 0.9603f, 0.9603f}, {0.99031f, 0.95931f, 0.95931f}, - {0.99032f, 0.95832f, 0.95832f}, {0.99033f, 0.95733f, 0.95733f}, - {0.99034f, 0.95634f, 0.95634f}, {0.99035f, 0.95535f, 0.95535f}, - {0.99036f, 0.95436f, 0.95436f}, {0.99037f, 0.95337f, 0.95337f}, - {0.99038f, 0.95238f, 0.95238f}, {0.99039f, 0.95139f, 0.95139f}, - {0.9904f, 0.9504f, 0.9504f}, {0.99041f, 0.94941f, 0.94941f}, - {0.99042f, 0.94842f, 0.94842f}, {0.99043f, 0.94743f, 0.94743f}, - {0.99044f, 0.94644f, 0.94644f}, {0.9904499999999999f, 0.94545f, 0.94545f}, - {0.99046f, 0.94446f, 0.94446f}, {0.99047f, 0.94347f, 0.94347f}, - {0.99048f, 0.94248f, 0.94248f}, {0.99049f, 0.9414899999999999f, - 0.9414899999999999f}, {0.9904999999999999f, 0.9405f, 0.9405f}, - {0.99051f, 0.93951f, 0.93951f}, {0.99052f, 0.93852f, 0.93852f}, - {0.99053f, 0.93753f, 0.93753f}, {0.99054f, 0.93654f, 0.93654f}, - {0.99055f, 0.93555f, 0.93555f}, {0.99056f, 0.93456f, 0.93456f}, - {0.99057f, 0.93357f, 0.93357f}, {0.99058f, 0.93258f, 0.93258f}, - {0.99059f, 0.93159f, 0.93159f}, {0.9906f, 0.9306f, 0.9306f}, - {0.99061f, 0.92961f, 0.92961f}, {0.99062f, 0.92862f, 0.92862f}, - {0.99063f, 0.92763f, 0.92763f}, {0.99064f, 0.92664f, 0.92664f}, - {0.99065f, 0.92565f, 0.92565f}, {0.99066f, 0.92466f, 0.92466f}, - {0.9906699999999999f, 0.92367f, 0.92367f}, {0.99068f, 0.92268f, 0.92268f}, - {0.99069f, 0.92169f, 0.92169f}, {0.9907f, 0.9207f, 0.9207f}, - {0.99071f, 0.91971f, 0.91971f}, {0.99072f, 0.91872f, 0.91872f}, - {0.99073f, 0.9177299999999999f, 0.9177299999999999f}, - {0.99074f, 0.91674f, 0.91674f}, {0.99075f, 0.91575f, 0.91575f}, - {0.99076f, 0.91476f, 0.91476f}, {0.99077f, 0.91377f, 0.91377f}, - {0.99078f, 0.91278f, 0.91278f}, {0.99079f, 0.91179f, 0.91179f}, - {0.9908f, 0.9107999999999999f, 0.9107999999999999f}, - {0.99081f, 0.90981f, 0.90981f}, {0.99082f, 0.90882f, 0.90882f}, - {0.99083f, 0.90783f, 0.90783f}, {0.9908399999999999f, 0.90684f, 0.90684f}, - {0.99085f, 0.90585f, 0.90585f}, {0.99086f, 0.90486f, 0.90486f}, - {0.99087f, 0.90387f, 0.90387f}, {0.99088f, 0.90288f, 0.90288f}, - {0.9908899999999999f, 0.90189f, 0.90189f}, {0.9909f, 0.9009f, 0.9009f}, - {0.99091f, 0.89991f, 0.89991f}, {0.99092f, 0.8989199999999999f, - 0.8989199999999999f}, {0.99093f, 0.89793f, 0.89793f}, - {0.99094f, 0.89694f, 0.89694f}, {0.99095f, 0.89595f, 0.89595f}, - {0.99096f, 0.89496f, 0.89496f}, {0.99097f, 0.8939699999999999f, - 0.8939699999999999f}, {0.99098f, 0.89298f, 0.89298f}, - {0.99099f, 0.89199f, 0.89199f}, {0.991f, 0.891f, 0.891f}, - {0.99101f, 0.89001f, 0.89001f}, {0.99102f, 0.88902f, 0.88902f}, - {0.99103f, 0.88803f, 0.88803f}, {0.99104f, 0.8870399999999999f, - 0.8870399999999999f}, {0.99105f, 0.88605f, 0.88605f}, - {0.9910599999999999f, 0.88506f, 0.88506f}, {0.99107f, 0.88407f, 0.88407f}, - {0.99108f, 0.88308f, 0.88308f}, {0.99109f, 0.88209f, 0.88209f}, - {0.9911f, 0.8811f, 0.8811f}, {0.99111f, 0.88011f, 0.88011f}, - {0.99112f, 0.87912f, 0.87912f}, {0.99113f, 0.87813f, 0.87813f}, - {0.99114f, 0.87714f, 0.87714f}, {0.99115f, 0.87615f, 0.87615f}, - {0.99116f, 0.8751599999999999f, 0.8751599999999999f}, - {0.99117f, 0.87417f, 0.87417f}, {0.99118f, 0.87318f, 0.87318f}, - {0.99119f, 0.87219f, 0.87219f}, {0.9912f, 0.8712f, 0.8712f}, - {0.99121f, 0.87021f, 0.87021f}, {0.99122f, 0.86922f, 0.86922f}, - {0.9912299999999999f, 0.86823f, 0.86823f}, {0.99124f, 0.86724f, 0.86724f}, - {0.99125f, 0.86625f, 0.86625f}, {0.99126f, 0.86526f, 0.86526f}, - {0.99127f, 0.86427f, 0.86427f}, {0.9912799999999999f, 0.86328f, 0.86328f}, - {0.99129f, 0.86229f, 0.86229f}, {0.9913f, 0.8613f, 0.8613f}, - {0.99131f, 0.86031f, 0.86031f}, {0.99132f, 0.85932f, 0.85932f}, - {0.99133f, 0.85833f, 0.85833f}, {0.99134f, 0.85734f, 0.85734f}, - {0.99135f, 0.85635f, 0.85635f}, {0.99136f, 0.85536f, 0.85536f}, - {0.99137f, 0.85437f, 0.85437f}, {0.99138f, 0.85338f, 0.85338f}, - {0.99139f, 0.85239f, 0.85239f}, {0.9914f, 0.8513999999999999f, - 0.8513999999999999f}, {0.99141f, 0.85041f, 0.85041f}, - {0.99142f, 0.84942f, 0.84942f}, {0.99143f, 0.84843f, 0.84843f}, - {0.99144f, 0.84744f, 0.84744f}, {0.9914499999999999f, 0.84645f, 0.84645f}, - {0.99146f, 0.84546f, 0.84546f}, {0.99147f, 0.84447f, 0.84447f}, - {0.99148f, 0.84348f, 0.84348f}, {0.99149f, 0.84249f, 0.84249f}, - {0.9915f, 0.8415f, 0.8415f}, {0.99151f, 0.84051f, 0.84051f}, - {0.99152f, 0.83952f, 0.83952f}, {0.99153f, 0.83853f, 0.83853f}, - {0.99154f, 0.83754f, 0.83754f}, {0.99155f, 0.83655f, 0.83655f}, - {0.99156f, 0.83556f, 0.83556f}, {0.99157f, 0.83457f, 0.83457f}, - {0.99158f, 0.83358f, 0.83358f}, {0.99159f, 0.8325899999999999f, - 0.8325899999999999f}, {0.9916f, 0.8316f, 0.8316f}, {0.99161f, 0.83061f, 0.83061f}, - {0.99162f, 0.82962f, 0.82962f}, {0.99163f, 0.82863f, 0.82863f}, - {0.99164f, 0.8276399999999999f, 0.8276399999999999f}, - {0.99165f, 0.82665f, 0.82665f}, {0.99166f, 0.82566f, 0.82566f}, - {0.9916699999999999f, 0.82467f, 0.82467f}, {0.99168f, 0.82368f, 0.82368f}, - {0.99169f, 0.8226899999999999f, 0.8226899999999999f}, {0.9917f, 0.8217f, 0.8217f}, - {0.99171f, 0.8207099999999999f, 0.8207099999999999f}, - {0.99172f, 0.81972f, 0.81972f}, {0.99173f, 0.81873f, 0.81873f}, - {0.99174f, 0.8177399999999999f, 0.8177399999999999f}, - {0.99175f, 0.81675f, 0.81675f}, {0.99176f, 0.81576f, 0.81576f}, - {0.99177f, 0.81477f, 0.81477f}, {0.99178f, 0.81378f, 0.81378f}, - {0.99179f, 0.81279f, 0.81279f}, {0.9918f, 0.8118f, 0.8118f}, - {0.99181f, 0.81081f, 0.81081f}, {0.99182f, 0.80982f, 0.80982f}, - {0.99183f, 0.8088299999999999f, 0.8088299999999999f}, - {0.9918399999999999f, 0.80784f, 0.80784f}, {0.99185f, 0.80685f, 0.80685f}, - {0.99186f, 0.80586f, 0.80586f}, {0.99187f, 0.80487f, 0.80487f}, - {0.99188f, 0.8038799999999999f, 0.8038799999999999f}, - {0.9918899999999999f, 0.80289f, 0.80289f}, {0.9919f, 0.8019000000000001f, - 0.8019000000000001f}, {0.99191f, 0.80091f, 0.80091f}, - {0.99192f, 0.79992f, 0.79992f}, {0.99193f, 0.79893f, 0.79893f}, - {0.99194f, 0.79794f, 0.79794f}, {0.99195f, 0.79695f, 0.79695f}, - {0.99196f, 0.79596f, 0.79596f}, {0.99197f, 0.79497f, 0.79497f}, - {0.99198f, 0.79398f, 0.79398f}, {0.99199f, 0.79299f, 0.79299f}, - {0.992f, 0.792f, 0.792f}, {0.99201f, 0.79101f, 0.79101f}, - {0.99202f, 0.79002f, 0.79002f}, {0.99203f, 0.78903f, 0.78903f}, - {0.99204f, 0.78804f, 0.78804f}, {0.99205f, 0.78705f, 0.78705f}, - {0.9920599999999999f, 0.78606f, 0.78606f}, {0.99207f, 0.7850699999999999f, - 0.7850699999999999f}, {0.99208f, 0.78408f, 0.78408f}, - {0.99209f, 0.7830900000000001f, 0.7830900000000001f}, {0.9921f, 0.7821f, 0.7821f}, - {0.99211f, 0.78111f, 0.78111f}, {0.99212f, 0.78012f, 0.78012f}, - {0.99213f, 0.77913f, 0.77913f}, {0.99214f, 0.77814f, 0.77814f}, - {0.99215f, 0.77715f, 0.77715f}, {0.99216f, 0.77616f, 0.77616f}, - {0.99217f, 0.77517f, 0.77517f}, {0.99218f, 0.77418f, 0.77418f}, - {0.99219f, 0.77319f, 0.77319f}, {0.9922f, 0.7722f, 0.7722f}, - {0.99221f, 0.77121f, 0.77121f}, {0.99222f, 0.77022f, 0.77022f}, - {0.99223f, 0.76923f, 0.76923f}, {0.99224f, 0.76824f, 0.76824f}, - {0.99225f, 0.76725f, 0.76725f}, {0.99226f, 0.7662599999999999f, - 0.7662599999999999f}, {0.99227f, 0.76527f, 0.76527f}, - {0.9922799999999999f, 0.76428f, 0.76428f}, {0.99229f, 0.76329f, 0.76329f}, - {0.9923f, 0.7623f, 0.7623f}, {0.99231f, 0.7613099999999999f, 0.7613099999999999f}, - {0.99232f, 0.76032f, 0.76032f}, {0.99233f, 0.75933f, 0.75933f}, - {0.99234f, 0.75834f, 0.75834f}, {0.99235f, 0.75735f, 0.75735f}, - {0.99236f, 0.7563599999999999f, 0.7563599999999999f}, - {0.99237f, 0.75537f, 0.75537f}, {0.99238f, 0.7543799999999999f, - 0.7543799999999999f}, {0.99239f, 0.75339f, 0.75339f}, {0.9924f, 0.7524f, 0.7524f}, - {0.99241f, 0.75141f, 0.75141f}, {0.99242f, 0.75042f, 0.75042f}, - {0.99243f, 0.74943f, 0.74943f}, {0.99244f, 0.74844f, 0.74844f}, - {0.9924499999999999f, 0.74745f, 0.74745f}, {0.99246f, 0.74646f, 0.74646f}, - {0.99247f, 0.74547f, 0.74547f}, {0.99248f, 0.74448f, 0.74448f}, - {0.99249f, 0.74349f, 0.74349f}, {0.9924999999999999f, 0.7424999999999999f, - 0.7424999999999999f}, {0.99251f, 0.74151f, 0.74151f}, - {0.99252f, 0.74052f, 0.74052f}, {0.99253f, 0.73953f, 0.73953f}, - {0.99254f, 0.73854f, 0.73854f}, {0.99255f, 0.7375499999999999f, - 0.7375499999999999f}, {0.99256f, 0.73656f, 0.73656f}, - {0.99257f, 0.7355700000000001f, 0.7355700000000001f}, - {0.99258f, 0.73458f, 0.73458f}, {0.99259f, 0.73359f, 0.73359f}, - {0.9926f, 0.7325999999999999f, 0.7325999999999999f}, - {0.99261f, 0.73161f, 0.73161f}, {0.99262f, 0.73062f, 0.73062f}, - {0.99263f, 0.72963f, 0.72963f}, {0.99264f, 0.72864f, 0.72864f}, - {0.99265f, 0.7276499999999999f, 0.7276499999999999f}, - {0.99266f, 0.72666f, 0.72666f}, {0.9926699999999999f, 0.72567f, 0.72567f}, - {0.99268f, 0.72468f, 0.72468f}, {0.99269f, 0.7236899999999999f, - 0.7236899999999999f}, {0.9927f, 0.7226999999999999f, 0.7226999999999999f}, - {0.99271f, 0.72171f, 0.72171f}, {0.99272f, 0.72072f, 0.72072f}, - {0.99273f, 0.71973f, 0.71973f}, {0.99274f, 0.7187399999999999f, - 0.7187399999999999f}, {0.99275f, 0.71775f, 0.71775f}, - {0.99276f, 0.71676f, 0.71676f}, {0.99277f, 0.71577f, 0.71577f}, - {0.99278f, 0.71478f, 0.71478f}, {0.99279f, 0.7137899999999999f, - 0.7137899999999999f}, {0.9928f, 0.7128f, 0.7128f}, - {0.99281f, 0.7118099999999999f, 0.7118099999999999f}, - {0.99282f, 0.71082f, 0.71082f}, {0.99283f, 0.70983f, 0.70983f}, - {0.99284f, 0.7088399999999999f, 0.7088399999999999f}, - {0.99285f, 0.70785f, 0.70785f}, {0.99286f, 0.70686f, 0.70686f}, - {0.99287f, 0.70587f, 0.70587f}, {0.99288f, 0.70488f, 0.70488f}, - {0.9928899999999999f, 0.70389f, 0.70389f}, {0.9929f, 0.7029000000000001f, - 0.7029000000000001f}, {0.99291f, 0.70191f, 0.70191f}, - {0.99292f, 0.70092f, 0.70092f}, {0.99293f, 0.6999299999999999f, - 0.6999299999999999f}, {0.99294f, 0.69894f, 0.69894f}, - {0.99295f, 0.6979500000000001f, 0.6979500000000001f}, - {0.99296f, 0.69696f, 0.69696f}, {0.99297f, 0.69597f, 0.69597f}, - {0.99298f, 0.6949799999999999f, 0.6949799999999999f}, - {0.99299f, 0.69399f, 0.69399f}, {0.993f, 0.6930000000000001f, - 0.6930000000000001f}, {0.99301f, 0.69201f, 0.69201f}, - {0.99302f, 0.69102f, 0.69102f}, {0.99303f, 0.6900299999999999f, - 0.6900299999999999f}, {0.99304f, 0.68904f, 0.68904f}, - {0.99305f, 0.68805f, 0.68805f}, {0.9930599999999999f, 0.68706f, 0.68706f}, - {0.99307f, 0.68607f, 0.68607f}, {0.99308f, 0.68508f, 0.68508f}, - {0.99309f, 0.68409f, 0.68409f}, {0.9931f, 0.6831f, 0.6831f}, - {0.99311f, 0.68211f, 0.68211f}, {0.99312f, 0.68112f, 0.68112f}, - {0.99313f, 0.68013f, 0.68013f}, {0.99314f, 0.67914f, 0.67914f}, - {0.99315f, 0.67815f, 0.67815f}, {0.99316f, 0.67716f, 0.67716f}, - {0.99317f, 0.6761699999999999f, 0.6761699999999999f}, - {0.99318f, 0.67518f, 0.67518f}, {0.99319f, 0.6741900000000001f, - 0.6741900000000001f}, {0.9932f, 0.6732f, 0.6732f}, {0.99321f, 0.67221f, 0.67221f}, - {0.99322f, 0.6712199999999999f, 0.6712199999999999f}, - {0.99323f, 0.67023f, 0.67023f}, {0.99324f, 0.6692400000000001f, - 0.6692400000000001f}, {0.99325f, 0.66825f, 0.66825f}, - {0.99326f, 0.66726f, 0.66726f}, {0.99327f, 0.6662699999999999f, - 0.6662699999999999f}, {0.9932799999999999f, 0.66528f, 0.66528f}, - {0.99329f, 0.66429f, 0.66429f}, {0.9933f, 0.6633f, 0.6633f}, - {0.99331f, 0.66231f, 0.66231f}, {0.99332f, 0.6613199999999999f, - 0.6613199999999999f}, {0.99333f, 0.66033f, 0.66033f}, - {0.99334f, 0.65934f, 0.65934f}, {0.99335f, 0.65835f, 0.65835f}, - {0.99336f, 0.6573599999999999f, 0.6573599999999999f}, - {0.99337f, 0.6563699999999999f, 0.6563699999999999f}, - {0.99338f, 0.65538f, 0.65538f}, {0.99339f, 0.65439f, 0.65439f}, - {0.9934f, 0.6534f, 0.6534f}, {0.99341f, 0.6524099999999999f, 0.6524099999999999f}, - {0.99342f, 0.6514199999999999f, 0.6514199999999999f}, - {0.99343f, 0.65043f, 0.65043f}, {0.99344f, 0.64944f, 0.64944f}, - {0.9934499999999999f, 0.64845f, 0.64845f}, {0.99346f, 0.6474599999999999f, - 0.6474599999999999f}, {0.99347f, 0.64647f, 0.64647f}, - {0.99348f, 0.6454799999999999f, 0.6454799999999999f}, - {0.99349f, 0.64449f, 0.64449f}, {0.9935f, 0.6435f, 0.6435f}, - {0.99351f, 0.6425099999999999f, 0.6425099999999999f}, - {0.99352f, 0.6415200000000001f, 0.6415200000000001f}, - {0.99353f, 0.64053f, 0.64053f}, {0.99354f, 0.63954f, 0.63954f}, - {0.99355f, 0.63855f, 0.63855f}, {0.99356f, 0.63756f, 0.63756f}, - {0.99357f, 0.6365700000000001f, 0.6365700000000001f}, - {0.99358f, 0.63558f, 0.63558f}, {0.99359f, 0.63459f, 0.63459f}, - {0.9936f, 0.6335999999999999f, 0.6335999999999999f}, - {0.99361f, 0.63261f, 0.63261f}, {0.99362f, 0.6316200000000001f, - 0.6316200000000001f}, {0.99363f, 0.63063f, 0.63063f}, - {0.99364f, 0.62964f, 0.62964f}, {0.99365f, 0.6286499999999999f, - 0.6286499999999999f}, {0.99366f, 0.62766f, 0.62766f}, - {0.9936699999999999f, 0.6266700000000001f, 0.6266700000000001f}, - {0.99368f, 0.62568f, 0.62568f}, {0.99369f, 0.62469f, 0.62469f}, - {0.9937f, 0.6236999999999999f, 0.6236999999999999f}, - {0.99371f, 0.62271f, 0.62271f}, {0.99372f, 0.62172f, 0.62172f}, - {0.99373f, 0.62073f, 0.62073f}, {0.99374f, 0.61974f, 0.61974f}, - {0.99375f, 0.61875f, 0.61875f}, {0.99376f, 0.61776f, 0.61776f}, - {0.99377f, 0.61677f, 0.61677f}, {0.99378f, 0.61578f, 0.61578f}, - {0.99379f, 0.61479f, 0.61479f}, {0.9938f, 0.6138f, 0.6138f}, - {0.99381f, 0.61281f, 0.61281f}, {0.99382f, 0.61182f, 0.61182f}, - {0.99383f, 0.61083f, 0.61083f}, {0.99384f, 0.6098399999999999f, - 0.6098399999999999f}, {0.99385f, 0.60885f, 0.60885f}, - {0.99386f, 0.6078600000000001f, 0.6078600000000001f}, - {0.99387f, 0.60687f, 0.60687f}, {0.99388f, 0.60588f, 0.60588f}, - {0.9938899999999999f, 0.6048899999999999f, 0.6048899999999999f}, - {0.9939f, 0.6039f, 0.6039f}, {0.99391f, 0.6029100000000001f, 0.6029100000000001f}, - {0.99392f, 0.60192f, 0.60192f}, {0.99393f, 0.60093f, 0.60093f}, - {0.99394f, 0.5999399999999999f, 0.5999399999999999f}, - {0.99395f, 0.59895f, 0.59895f}, {0.99396f, 0.59796f, 0.59796f}, - {0.99397f, 0.59697f, 0.59697f}, {0.99398f, 0.59598f, 0.59598f}, - {0.99399f, 0.5949899999999999f, 0.5949899999999999f}, {0.994f, 0.594f, 0.594f}, - {0.99401f, 0.59301f, 0.59301f}, {0.99402f, 0.59202f, 0.59202f}, - {0.99403f, 0.5910299999999999f, 0.5910299999999999f}, - {0.99404f, 0.5900399999999999f, 0.5900399999999999f}, - {0.99405f, 0.58905f, 0.58905f}, {0.9940599999999999f, 0.58806f, 0.58806f}, - {0.99407f, 0.58707f, 0.58707f}, {0.99408f, 0.5860799999999999f, - 0.5860799999999999f}, {0.99409f, 0.5850899999999999f, 0.5850899999999999f}, - {0.9941f, 0.5841f, 0.5841f}, {0.99411f, 0.58311f, 0.58311f}, - {0.99412f, 0.58212f, 0.58212f}, {0.99413f, 0.5811299999999999f, - 0.5811299999999999f}, {0.99414f, 0.5801399999999999f, 0.5801399999999999f}, - {0.99415f, 0.5791499999999999f, 0.5791499999999999f}, - {0.99416f, 0.57816f, 0.57816f}, {0.99417f, 0.57717f, 0.57717f}, - {0.99418f, 0.57618f, 0.57618f}, {0.99419f, 0.5751900000000001f, - 0.5751900000000001f}, {0.9942f, 0.5742f, 0.5742f}, {0.99421f, 0.57321f, 0.57321f}, - {0.99422f, 0.57222f, 0.57222f}, {0.99423f, 0.57123f, 0.57123f}, - {0.99424f, 0.5702400000000001f, 0.5702400000000001f}, - {0.99425f, 0.56925f, 0.56925f}, {0.99426f, 0.56826f, 0.56826f}, - {0.99427f, 0.5672699999999999f, 0.5672699999999999f}, - {0.9942799999999999f, 0.56628f, 0.56628f}, {0.99429f, 0.5652900000000001f, - 0.5652900000000001f}, {0.9943f, 0.5643f, 0.5643f}, {0.99431f, 0.56331f, 0.56331f}, - {0.99432f, 0.5623199999999999f, 0.5623199999999999f}, - {0.99433f, 0.56133f, 0.56133f}, {0.99434f, 0.5603400000000001f, - 0.5603400000000001f}, {0.99435f, 0.55935f, 0.55935f}, - {0.99436f, 0.55836f, 0.55836f}, {0.99437f, 0.5573699999999999f, - 0.5573699999999999f}, {0.99438f, 0.55638f, 0.55638f}, - {0.99439f, 0.55539f, 0.55539f}, {0.9944f, 0.5544f, 0.5544f}, - {0.99441f, 0.55341f, 0.55341f}, {0.99442f, 0.5524199999999999f, - 0.5524199999999999f}, {0.99443f, 0.55143f, 0.55143f}, - {0.99444f, 0.55044f, 0.55044f}, {0.99445f, 0.54945f, 0.54945f}, - {0.99446f, 0.54846f, 0.54846f}, {0.99447f, 0.54747f, 0.54747f}, - {0.99448f, 0.54648f, 0.54648f}, {0.99449f, 0.54549f, 0.54549f}, - {0.9944999999999999f, 0.5445f, 0.5445f}, {0.99451f, 0.5435099999999999f, - 0.5435099999999999f}, {0.99452f, 0.54252f, 0.54252f}, - {0.99453f, 0.54153f, 0.54153f}, {0.99454f, 0.54054f, 0.54054f}, - {0.99455f, 0.53955f, 0.53955f}, {0.99456f, 0.5385599999999999f, - 0.5385599999999999f}, {0.99457f, 0.53757f, 0.53757f}, - {0.99458f, 0.5365800000000001f, 0.5365800000000001f}, - {0.99459f, 0.53559f, 0.53559f}, {0.9946f, 0.5346f, 0.5346f}, - {0.99461f, 0.5336099999999999f, 0.5336099999999999f}, - {0.99462f, 0.53262f, 0.53262f}, {0.99463f, 0.53163f, 0.53163f}, - {0.99464f, 0.53064f, 0.53064f}, {0.99465f, 0.52965f, 0.52965f}, - {0.99466f, 0.5286599999999999f, 0.5286599999999999f}, - {0.9946699999999999f, 0.52767f, 0.52767f}, {0.99468f, 0.52668f, 0.52668f}, - {0.99469f, 0.52569f, 0.52569f}, {0.9947f, 0.5246999999999999f, - 0.5246999999999999f}, {0.99471f, 0.5237099999999999f, 0.5237099999999999f}, - {0.99472f, 0.52272f, 0.52272f}, {0.99473f, 0.52173f, 0.52173f}, - {0.99474f, 0.52074f, 0.52074f}, {0.99475f, 0.5197499999999999f, - 0.5197499999999999f}, {0.99476f, 0.5187599999999999f, 0.5187599999999999f}, - {0.99477f, 0.51777f, 0.51777f}, {0.99478f, 0.51678f, 0.51678f}, - {0.99479f, 0.51579f, 0.51579f}, {0.9948f, 0.5148f, 0.5148f}, - {0.99481f, 0.51381f, 0.51381f}, {0.99482f, 0.51282f, 0.51282f}, - {0.99483f, 0.51183f, 0.51183f}, {0.99484f, 0.51084f, 0.51084f}, - {0.99485f, 0.50985f, 0.50985f}, {0.99486f, 0.5088600000000001f, - 0.5088600000000001f}, {0.99487f, 0.50787f, 0.50787f}, - {0.99488f, 0.50688f, 0.50688f}, {0.9948899999999999f, 0.50589f, 0.50589f}, - {0.9949f, 0.5049f, 0.5049f}, {0.99491f, 0.5039100000000001f, 0.5039100000000001f}, - {0.99492f, 0.50292f, 0.50292f}, {0.99493f, 0.50193f, 0.50193f}, - {0.99494f, 0.5009399999999999f, 0.5009399999999999f}, - {0.99495f, 0.49995f, 0.49995f}, {0.99496f, 0.49896f, 0.49896f}, - {0.99497f, 0.49797f, 0.49797f}, {0.99498f, 0.49698f, 0.49698f}, - {0.99499f, 0.49599f, 0.49599f}, {0.995f, 0.495f, 0.495f}, - {0.99501f, 0.49401f, 0.49401f}, {0.99502f, 0.49302f, 0.49302f}, - {0.99503f, 0.49202999999999997f, 0.49202999999999997f}, - {0.99504f, 0.49104f, 0.49104f}, {0.99505f, 0.49005f, 0.49005f}, - {0.99506f, 0.48905999999999994f, 0.48905999999999994f}, - {0.99507f, 0.48807f, 0.48807f}, {0.99508f, 0.48707999999999996f, - 0.48707999999999996f}, {0.99509f, 0.48609f, 0.48609f}, - {0.9951f, 0.4851f, 0.4851f}, {0.99511f, 0.48411000000000004f, - 0.48411000000000004f}, {0.99512f, 0.48312f, 0.48312f}, - {0.99513f, 0.48212999999999995f, 0.48212999999999995f}, - {0.99514f, 0.48114f, 0.48114f}, {0.99515f, 0.48014999999999997f, - 0.48014999999999997f}, {0.99516f, 0.47916000000000003f, 0.47916000000000003f}, - {0.99517f, 0.47817f, 0.47817f}, {0.99518f, 0.47717999999999994f, - 0.47717999999999994f}, {0.99519f, 0.47619f, 0.47619f}, - {0.9952f, 0.47519999999999996f, 0.47519999999999996f}, - {0.99521f, 0.47421f, 0.47421f}, {0.99522f, 0.47322f, 0.47322f}, - {0.99523f, 0.4722299999999999f, 0.4722299999999999f}, - {0.99524f, 0.47124f, 0.47124f}, {0.99525f, 0.47024999999999995f, - 0.47024999999999995f}, {0.99526f, 0.46926f, 0.46926f}, - {0.99527f, 0.46826999999999996f, 0.46826999999999996f}, - {0.9952799999999999f, 0.4672799999999999f, 0.4672799999999999f}, - {0.99529f, 0.46629f, 0.46629f}, {0.9953f, 0.46529999999999994f, - 0.46529999999999994f}, {0.99531f, 0.46431f, 0.46431f}, - {0.99532f, 0.46331999999999995f, 0.46331999999999995f}, - {0.99533f, 0.46233f, 0.46233f}, {0.99534f, 0.46134f, 0.46134f}, - {0.99535f, 0.4603499999999999f, 0.4603499999999999f}, - {0.99536f, 0.45936f, 0.45936f}, {0.99537f, 0.45836999999999994f, - 0.45836999999999994f}, {0.99538f, 0.45738f, 0.45738f}, - {0.99539f, 0.45638999999999996f, 0.45638999999999996f}, - {0.9954f, 0.4553999999999999f, 0.4553999999999999f}, - {0.99541f, 0.45441f, 0.45441f}, {0.99542f, 0.45341999999999993f, - 0.45341999999999993f}, {0.99543f, 0.45243f, 0.45243f}, - {0.99544f, 0.45143999999999995f, 0.45143999999999995f}, - {0.99545f, 0.4504499999999999f, 0.4504499999999999f}, - {0.99546f, 0.44945999999999997f, 0.44945999999999997f}, - {0.99547f, 0.4484699999999999f, 0.4484699999999999f}, - {0.99548f, 0.44748f, 0.44748f}, {0.99549f, 0.44648999999999994f, - 0.44648999999999994f}, {0.9955f, 0.4455f, 0.4455f}, - {0.99551f, 0.44450999999999996f, 0.44450999999999996f}, - {0.99552f, 0.4435199999999999f, 0.4435199999999999f}, - {0.99553f, 0.44253f, 0.44253f}, {0.99554f, 0.44153999999999993f, - 0.44153999999999993f}, {0.99555f, 0.44055f, 0.44055f}, - {0.99556f, 0.43955999999999995f, 0.43955999999999995f}, - {0.99557f, 0.4385699999999999f, 0.4385699999999999f}, - {0.99558f, 0.43757999999999997f, 0.43757999999999997f}, - {0.99559f, 0.4365899999999999f, 0.4365899999999999f}, {0.9956f, 0.4356f, 0.4356f}, - {0.99561f, 0.43460999999999994f, 0.43460999999999994f}, - {0.99562f, 0.4336199999999999f, 0.4336199999999999f}, - {0.99563f, 0.43262999999999996f, 0.43262999999999996f}, - {0.99564f, 0.4316399999999999f, 0.4316399999999999f}, - {0.99565f, 0.43065f, 0.43065f}, {0.99566f, 0.42965999999999993f, - 0.42965999999999993f}, {0.9956699999999999f, 0.4286699999999999f, - 0.4286699999999999f}, {0.99568f, 0.42767999999999995f, 0.42767999999999995f}, - {0.99569f, 0.4266899999999999f, 0.4266899999999999f}, - {0.9957f, 0.42569999999999997f, 0.42569999999999997f}, - {0.99571f, 0.4247099999999999f, 0.4247099999999999f}, - {0.99572f, 0.42372f, 0.42372f}, {0.99573f, 0.42272999999999994f, - 0.42272999999999994f}, {0.99574f, 0.4217399999999999f, 0.4217399999999999f}, - {0.99575f, 0.42074999999999996f, 0.42074999999999996f}, - {0.99576f, 0.4197599999999999f, 0.4197599999999999f}, - {0.99577f, 0.4187700000000001f, 0.4187700000000001f}, - {0.99578f, 0.41778000000000004f, 0.41778000000000004f}, - {0.99579f, 0.41679f, 0.41679f}, {0.9958f, 0.41580000000000006f, - 0.41580000000000006f}, {0.99581f, 0.41481f, 0.41481f}, - {0.99582f, 0.4138200000000001f, 0.4138200000000001f}, - {0.99583f, 0.41283000000000003f, 0.41283000000000003f}, - {0.99584f, 0.41184f, 0.41184f}, {0.99585f, 0.41085000000000005f, - 0.41085000000000005f}, {0.99586f, 0.40986f, 0.40986f}, - {0.99587f, 0.40887000000000007f, 0.40887000000000007f}, - {0.99588f, 0.40788f, 0.40788f}, {0.9958899999999999f, 0.40689f, 0.40689f}, - {0.9959f, 0.40590000000000004f, 0.40590000000000004f}, - {0.99591f, 0.40491f, 0.40491f}, {0.99592f, 0.40392000000000006f, - 0.40392000000000006f}, {0.99593f, 0.40293f, 0.40293f}, - {0.99594f, 0.4019400000000001f, 0.4019400000000001f}, - {0.99595f, 0.40095000000000003f, 0.40095000000000003f}, - {0.99596f, 0.39996f, 0.39996f}, {0.99597f, 0.39897000000000005f, - 0.39897000000000005f}, {0.99598f, 0.39798f, 0.39798f}, - {0.99599f, 0.39699000000000007f, 0.39699000000000007f}, {0.996f, 0.396f, 0.396f}, - {0.99601f, 0.39501f, 0.39501f}, {0.99602f, 0.39402000000000004f, - 0.39402000000000004f}, {0.99603f, 0.39303f, 0.39303f}, - {0.99604f, 0.39204000000000006f, 0.39204000000000006f}, - {0.99605f, 0.39105f, 0.39105f}, {0.99606f, 0.39005999999999996f, - 0.39005999999999996f}, {0.99607f, 0.38907f, 0.38907f}, - {0.99608f, 0.38808f, 0.38808f}, {0.99609f, 0.38709000000000005f, - 0.38709000000000005f}, {0.9961f, 0.3861f, 0.3861f}, - {0.99611f, 0.38511000000000006f, 0.38511000000000006f}, - {0.99612f, 0.38412f, 0.38412f}, {0.99613f, 0.38312999999999997f, - 0.38312999999999997f}, {0.99614f, 0.38214000000000004f, 0.38214000000000004f}, - {0.99615f, 0.38115f, 0.38115f}, {0.99616f, 0.38016000000000005f, - 0.38016000000000005f}, {0.99617f, 0.37917f, 0.37917f}, - {0.99618f, 0.37817999999999996f, 0.37817999999999996f}, - {0.99619f, 0.37719f, 0.37719f}, {0.9962f, 0.3762f, 0.3762f}, - {0.99621f, 0.37521000000000004f, 0.37521000000000004f}, - {0.99622f, 0.37422f, 0.37422f}, {0.99623f, 0.37322999999999995f, - 0.37322999999999995f}, {0.99624f, 0.37224f, 0.37224f}, - {0.99625f, 0.37124999999999997f, 0.37124999999999997f}, - {0.99626f, 0.37026000000000003f, 0.37026000000000003f}, - {0.99627f, 0.36927f, 0.36927f}, {0.9962799999999999f, 0.36827999999999994f, - 0.36827999999999994f}, {0.99629f, 0.36729f, 0.36729f}, - {0.9963f, 0.36629999999999996f, 0.36629999999999996f}, - {0.99631f, 0.36531f, 0.36531f}, {0.99632f, 0.36432f, 0.36432f}, - {0.99633f, 0.36333000000000004f, 0.36333000000000004f}, - {0.99634f, 0.36234f, 0.36234f}, {0.99635f, 0.36134999999999995f, - 0.36134999999999995f}, {0.99636f, 0.36036f, 0.36036f}, - {0.99637f, 0.35936999999999997f, 0.35936999999999997f}, - {0.99638f, 0.35838000000000003f, 0.35838000000000003f}, - {0.99639f, 0.35739f, 0.35739f}, {0.9964f, 0.35639999999999994f, - 0.35639999999999994f}, {0.99641f, 0.35541f, 0.35541f}, - {0.99642f, 0.35441999999999996f, 0.35441999999999996f}, - {0.99643f, 0.35343f, 0.35343f}, {0.99644f, 0.35244f, 0.35244f}, - {0.99645f, 0.35144999999999993f, 0.35144999999999993f}, - {0.99646f, 0.35046f, 0.35046f}, {0.99647f, 0.34946999999999995f, - 0.34946999999999995f}, {0.99648f, 0.34848f, 0.34848f}, - {0.99649f, 0.34748999999999997f, 0.34748999999999997f}, - {0.9964999999999999f, 0.34650000000000003f, 0.34650000000000003f}, - {0.99651f, 0.34551f, 0.34551f}, {0.99652f, 0.34451999999999994f, - 0.34451999999999994f}, {0.99653f, 0.34353f, 0.34353f}, - {0.99654f, 0.34253999999999996f, 0.34253999999999996f}, - {0.99655f, 0.34155f, 0.34155f}, {0.99656f, 0.34056f, 0.34056f}, - {0.99657f, 0.3395699999999999f, 0.3395699999999999f}, - {0.99658f, 0.33858f, 0.33858f}, {0.99659f, 0.33758999999999995f, - 0.33758999999999995f}, {0.9966f, 0.3366f, 0.3366f}, - {0.99661f, 0.33560999999999996f, 0.33560999999999996f}, - {0.99662f, 0.3346199999999999f, 0.3346199999999999f}, - {0.99663f, 0.33363f, 0.33363f}, {0.99664f, 0.33263999999999994f, - 0.33263999999999994f}, {0.99665f, 0.33165f, 0.33165f}, - {0.99666f, 0.33065999999999995f, 0.33065999999999995f}, - {0.99667f, 0.3296699999999999f, 0.3296699999999999f}, - {0.99668f, 0.32867999999999997f, 0.32867999999999997f}, - {0.99669f, 0.3276899999999999f, 0.3276899999999999f}, {0.9967f, 0.3267f, 0.3267f}, - {0.99671f, 0.32570999999999994f, 0.32570999999999994f}, - {0.99672f, 0.32472f, 0.32472f}, {0.99673f, 0.32372999999999996f, - 0.32372999999999996f}, {0.99674f, 0.3227399999999999f, 0.3227399999999999f}, - {0.99675f, 0.32175f, 0.32175f}, {0.99676f, 0.32075999999999993f, - 0.32075999999999993f}, {0.99677f, 0.31977f, 0.31977f}, - {0.99678f, 0.31877999999999995f, 0.31877999999999995f}, - {0.99679f, 0.3177899999999999f, 0.3177899999999999f}, - {0.9968f, 0.31679999999999997f, 0.31679999999999997f}, - {0.99681f, 0.3158099999999999f, 0.3158099999999999f}, - {0.99682f, 0.31482f, 0.31482f}, {0.99683f, 0.31382999999999994f, - 0.31382999999999994f}, {0.99684f, 0.3128399999999999f, 0.3128399999999999f}, - {0.99685f, 0.31184999999999996f, 0.31184999999999996f}, - {0.99686f, 0.3108599999999999f, 0.3108599999999999f}, - {0.99687f, 0.30987f, 0.30987f}, {0.99688f, 0.30887999999999993f, - 0.30887999999999993f}, {0.9968899999999999f, 0.3078899999999999f, - 0.3078899999999999f}, {0.9969f, 0.30689999999999995f, 0.30689999999999995f}, - {0.99691f, 0.3059099999999999f, 0.3059099999999999f}, - {0.99692f, 0.30491999999999997f, 0.30491999999999997f}, - {0.99693f, 0.3039299999999999f, 0.3039299999999999f}, - {0.99694f, 0.30294f, 0.30294f}, {0.99695f, 0.30194999999999994f, - 0.30194999999999994f}, {0.99696f, 0.3009599999999999f, 0.3009599999999999f}, - {0.99697f, 0.29996999999999996f, 0.29996999999999996f}, - {0.99698f, 0.2989799999999999f, 0.2989799999999999f}, - {0.99699f, 0.29799f, 0.29799f}, {0.997f, 0.29699999999999993f, - 0.29699999999999993f}, {0.99701f, 0.2960099999999999f, 0.2960099999999999f}, - {0.99702f, 0.29501999999999995f, 0.29501999999999995f}, - {0.99703f, 0.2940299999999999f, 0.2940299999999999f}, - {0.99704f, 0.2930400000000001f, 0.2930400000000001f}, - {0.99705f, 0.29205000000000003f, 0.29205000000000003f}, - {0.99706f, 0.29106f, 0.29106f}, {0.99707f, 0.29007000000000005f, - 0.29007000000000005f}, {0.99708f, 0.28908f, 0.28908f}, - {0.99709f, 0.28809000000000007f, 0.28809000000000007f}, - {0.9971f, 0.2871f, 0.2871f}, {0.99711f, 0.2861100000000001f, 0.2861100000000001f}, - {0.99712f, 0.28512000000000004f, 0.28512000000000004f}, - {0.99713f, 0.28413f, 0.28413f}, {0.99714f, 0.28314000000000006f, - 0.28314000000000006f}, {0.99715f, 0.28215f, 0.28215f}, - {0.99716f, 0.2811600000000001f, 0.2811600000000001f}, - {0.99717f, 0.28017000000000003f, 0.28017000000000003f}, - {0.99718f, 0.27918f, 0.27918f}, {0.99719f, 0.27819000000000005f, - 0.27819000000000005f}, {0.9972f, 0.2772f, 0.2772f}, - {0.99721f, 0.27621000000000007f, 0.27621000000000007f}, - {0.99722f, 0.27522f, 0.27522f}, {0.99723f, 0.27423f, 0.27423f}, - {0.99724f, 0.27324000000000004f, 0.27324000000000004f}, - {0.99725f, 0.27225f, 0.27225f}, {0.99726f, 0.27126000000000006f, - 0.27126000000000006f}, {0.99727f, 0.27027f, 0.27027f}, - {0.9972799999999999f, 0.26927999999999996f, 0.26927999999999996f}, - {0.99729f, 0.26829000000000003f, 0.26829000000000003f}, - {0.9973f, 0.2673f, 0.2673f}, {0.99731f, 0.26631000000000005f, - 0.26631000000000005f}, {0.99732f, 0.26532f, 0.26532f}, - {0.99733f, 0.26433000000000006f, 0.26433000000000006f}, - {0.99734f, 0.26334f, 0.26334f}, {0.99735f, 0.26234999999999997f, - 0.26234999999999997f}, {0.99736f, 0.26136000000000004f, 0.26136000000000004f}, - {0.99737f, 0.26037f, 0.26037f}, {0.99738f, 0.25938000000000005f, - 0.25938000000000005f}, {0.99739f, 0.25839f, 0.25839f}, - {0.9974f, 0.25739999999999996f, 0.25739999999999996f}, - {0.99741f, 0.25641f, 0.25641f}, {0.99742f, 0.25542f, 0.25542f}, - {0.99743f, 0.25443000000000005f, 0.25443000000000005f}, - {0.99744f, 0.25344f, 0.25344f}, {0.99745f, 0.25244999999999995f, - 0.25244999999999995f}, {0.99746f, 0.25146f, 0.25146f}, - {0.99747f, 0.25046999999999997f, 0.25046999999999997f}, - {0.99748f, 0.24948000000000004f, 0.24948000000000004f}, - {0.99749f, 0.24849f, 0.24849f}, {0.9975f, 0.24750000000000005f, - 0.24750000000000005f}, {0.99751f, 0.24651f, 0.24651f}, - {0.99752f, 0.24551999999999996f, 0.24551999999999996f}, - {0.99753f, 0.24453000000000003f, 0.24453000000000003f}, - {0.99754f, 0.24353999999999998f, 0.24353999999999998f}, - {0.99755f, 0.24255000000000004f, 0.24255000000000004f}, - {0.99756f, 0.24156f, 0.24156f}, {0.99757f, 0.24056999999999995f, - 0.24056999999999995f}, {0.99758f, 0.23958000000000002f, 0.23958000000000002f}, - {0.99759f, 0.23858999999999997f, 0.23858999999999997f}, - {0.9976f, 0.23760000000000003f, 0.23760000000000003f}, - {0.99761f, 0.23661f, 0.23661f}, {0.99762f, 0.23561999999999994f, - 0.23561999999999994f}, {0.99763f, 0.23463f, 0.23463f}, - {0.99764f, 0.23363999999999996f, 0.23363999999999996f}, - {0.99765f, 0.23265000000000002f, 0.23265000000000002f}, - {0.99766f, 0.23165999999999998f, 0.23165999999999998f}, - {0.99767f, 0.23066999999999993f, 0.23066999999999993f}, - {0.99768f, 0.22968f, 0.22968f}, {0.99769f, 0.22868999999999995f, - 0.22868999999999995f}, {0.9977f, 0.2277f, 0.2277f}, - {0.99771f, 0.22670999999999997f, 0.22670999999999997f}, - {0.99772f, 0.22572000000000003f, 0.22572000000000003f}, - {0.99773f, 0.22472999999999999f, 0.22472999999999999f}, - {0.99774f, 0.22373999999999994f, 0.22373999999999994f}, - {0.99775f, 0.22275f, 0.22275f}, {0.99776f, 0.22175999999999996f, - 0.22175999999999996f}, {0.99777f, 0.22077000000000002f, 0.22077000000000002f}, - {0.99778f, 0.21977999999999998f, 0.21977999999999998f}, - {0.99779f, 0.21878999999999993f, 0.21878999999999993f}, - {0.9978f, 0.2178f, 0.2178f}, {0.99781f, 0.21680999999999995f, - 0.21680999999999995f}, {0.99782f, 0.21582f, 0.21582f}, - {0.99783f, 0.21482999999999997f, 0.21482999999999997f}, - {0.99784f, 0.21383999999999992f, 0.21383999999999992f}, - {0.99785f, 0.21284999999999998f, 0.21284999999999998f}, - {0.99786f, 0.21185999999999994f, 0.21185999999999994f}, - {0.99787f, 0.21087f, 0.21087f}, {0.99788f, 0.20987999999999996f, - 0.20987999999999996f}, {0.9978899999999999f, 0.2088899999999999f, - 0.2088899999999999f}, {0.9979f, 0.20789999999999997f, 0.20789999999999997f}, - {0.99791f, 0.20690999999999993f, 0.20690999999999993f}, - {0.99792f, 0.20592f, 0.20592f}, {0.99793f, 0.20492999999999995f, - 0.20492999999999995f}, {0.99794f, 0.20394f, 0.20394f}, - {0.99795f, 0.20294999999999996f, 0.20294999999999996f}, - {0.99796f, 0.20195999999999992f, 0.20195999999999992f}, - {0.99797f, 0.20096999999999998f, 0.20096999999999998f}, - {0.99798f, 0.19997999999999994f, 0.19997999999999994f}, - {0.99799f, 0.19899f, 0.19899f}, {0.998f, 0.19799999999999995f, - 0.19799999999999995f}, {0.99801f, 0.1970099999999999f, 0.1970099999999999f}, - {0.99802f, 0.19601999999999997f, 0.19601999999999997f}, - {0.99803f, 0.19502999999999993f, 0.19502999999999993f}, - {0.99804f, 0.19404f, 0.19404f}, {0.99805f, 0.19304999999999994f, - 0.19304999999999994f}, {0.99806f, 0.1920599999999999f, 0.1920599999999999f}, - {0.99807f, 0.19106999999999996f, 0.19106999999999996f}, - {0.99808f, 0.19007999999999992f, 0.19007999999999992f}, - {0.99809f, 0.18908999999999998f, 0.18908999999999998f}, - {0.9981f, 0.18809999999999993f, 0.18809999999999993f}, - {0.99811f, 0.18711f, 0.18711f}, {0.99812f, 0.18611999999999995f, - 0.18611999999999995f}, {0.99813f, 0.1851299999999999f, 0.1851299999999999f}, - {0.99814f, 0.18413999999999997f, 0.18413999999999997f}, - {0.99815f, 0.18314999999999992f, 0.18314999999999992f}, - {0.99816f, 0.18216f, 0.18216f}, {0.99817f, 0.18116999999999994f, - 0.18116999999999994f}, {0.99818f, 0.1801799999999999f, 0.1801799999999999f}, - {0.99819f, 0.17918999999999996f, 0.17918999999999996f}, - {0.9982f, 0.17819999999999991f, 0.17819999999999991f}, - {0.99821f, 0.17720999999999998f, 0.17720999999999998f}, - {0.99822f, 0.17621999999999993f, 0.17621999999999993f}, - {0.99823f, 0.17522999999999989f, 0.17522999999999989f}, - {0.99824f, 0.17423999999999995f, 0.17423999999999995f}, - {0.99825f, 0.1732499999999999f, 0.1732499999999999f}, - {0.99826f, 0.17225999999999997f, 0.17225999999999997f}, - {0.99827f, 0.17126999999999992f, 0.17126999999999992f}, - {0.99828f, 0.17027999999999988f, 0.17027999999999988f}, - {0.99829f, 0.16928999999999994f, 0.16928999999999994f}, - {0.9983f, 0.1682999999999999f, 0.1682999999999999f}, - {0.99831f, 0.16730999999999996f, 0.16730999999999996f}, - {0.99832f, 0.1663199999999999f, 0.1663199999999999f}, - {0.99833f, 0.1653300000000001f, 0.1653300000000001f}, - {0.99834f, 0.16434000000000004f, 0.16434000000000004f}, - {0.99835f, 0.16335f, 0.16335f}, {0.99836f, 0.16236000000000006f, - 0.16236000000000006f}, {0.99837f, 0.16137f, 0.16137f}, - {0.99838f, 0.16038000000000008f, 0.16038000000000008f}, - {0.99839f, 0.15939000000000003f, 0.15939000000000003f}, - {0.9984f, 0.15839999999999999f, 0.15839999999999999f}, - {0.99841f, 0.15741000000000005f, 0.15741000000000005f}, - {0.99842f, 0.15642f, 0.15642f}, {0.99843f, 0.15543000000000007f, - 0.15543000000000007f}, {0.99844f, 0.15444000000000002f, 0.15444000000000002f}, - {0.99845f, 0.15344999999999998f, 0.15344999999999998f}, - {0.99846f, 0.15246000000000004f, 0.15246000000000004f}, - {0.99847f, 0.15147f, 0.15147f}, {0.99848f, 0.15048000000000006f, - 0.15048000000000006f}, {0.99849f, 0.14949f, 0.14949f}, - {0.9984999999999999f, 0.14849999999999997f, 0.14849999999999997f}, - {0.99851f, 0.14751000000000003f, 0.14751000000000003f}, - {0.99852f, 0.14651999999999998f, 0.14651999999999998f}, - {0.99853f, 0.14553000000000005f, 0.14553000000000005f}, - {0.99854f, 0.14454f, 0.14454f}, {0.99855f, 0.14355000000000007f, - 0.14355000000000007f}, {0.99856f, 0.14256000000000002f, 0.14256000000000002f}, - {0.99857f, 0.14156999999999997f, 0.14156999999999997f}, - {0.99858f, 0.14058000000000004f, 0.14058000000000004f}, - {0.99859f, 0.13959f, 0.13959f}, {0.9986f, 0.13860000000000006f, - 0.13860000000000006f}, {0.99861f, 0.13761f, 0.13761f}, - {0.99862f, 0.13661999999999996f, 0.13661999999999996f}, - {0.99863f, 0.13563000000000003f, 0.13563000000000003f}, - {0.99864f, 0.13463999999999998f, 0.13463999999999998f}, - {0.99865f, 0.13365000000000005f, 0.13365000000000005f}, - {0.99866f, 0.13266f, 0.13266f}, {0.99867f, 0.13166999999999995f, - 0.13166999999999995f}, {0.99868f, 0.13068000000000002f, 0.13068000000000002f}, - {0.99869f, 0.12968999999999997f, 0.12968999999999997f}, - {0.9987f, 0.12870000000000004f, 0.12870000000000004f}, - {0.99871f, 0.12771f, 0.12771f}, {0.99872f, 0.12672000000000005f, - 0.12672000000000005f}, {0.99873f, 0.12573f, 0.12573f}, - {0.99874f, 0.12473999999999996f, 0.12473999999999996f}, - {0.99875f, 0.12375000000000003f, 0.12375000000000003f}, - {0.99876f, 0.12275999999999998f, 0.12275999999999998f}, - {0.99877f, 0.12177000000000004f, 0.12177000000000004f}, - {0.99878f, 0.12078f, 0.12078f}, {0.99879f, 0.11978999999999995f, - 0.11978999999999995f}, {0.9988f, 0.11880000000000002f, 0.11880000000000002f}, - {0.99881f, 0.11780999999999997f, 0.11780999999999997f}, - {0.99882f, 0.11682000000000003f, 0.11682000000000003f}, - {0.99883f, 0.11582999999999999f, 0.11582999999999999f}, - {0.99884f, 0.11483999999999994f, 0.11483999999999994f}, - {0.99885f, 0.11385f, 0.11385f}, {0.99886f, 0.11285999999999996f, - 0.11285999999999996f}, {0.99887f, 0.11187000000000002f, 0.11187000000000002f}, - {0.99888f, 0.11087999999999998f, 0.11087999999999998f}, - {0.99889f, 0.10988999999999993f, 0.10988999999999993f}, - {0.9989f, 0.1089f, 0.1089f}, {0.99891f, 0.10790999999999995f, - 0.10790999999999995f}, {0.99892f, 0.10692000000000002f, 0.10692000000000002f}, - {0.99893f, 0.10592999999999997f, 0.10592999999999997f}, - {0.99894f, 0.10494000000000003f, 0.10494000000000003f}, - {0.99895f, 0.10394999999999999f, 0.10394999999999999f}, - {0.99896f, 0.10295999999999994f, 0.10295999999999994f}, - {0.99897f, 0.10197f, 0.10197f}, {0.99898f, 0.10097999999999996f, - 0.10097999999999996f}, {0.99899f, 0.09999000000000002f, 0.09999000000000002f}, - {0.999f, 0.09899999999999998f, 0.09899999999999998f}, - {0.99901f, 0.09800999999999993f, 0.09800999999999993f}, - {0.99902f, 0.09702f, 0.09702f}, {0.99903f, 0.09602999999999995f, - 0.09602999999999995f}, {0.99904f, 0.09504000000000001f, 0.09504000000000001f}, - {0.99905f, 0.09404999999999997f, 0.09404999999999997f}, - {0.99906f, 0.09305999999999992f, 0.09305999999999992f}, - {0.99907f, 0.09206999999999999f, 0.09206999999999999f}, - {0.99908f, 0.09107999999999994f, 0.09107999999999994f}, - {0.99909f, 0.09009f, 0.09009f}, {0.9991f, 0.08909999999999996f, - 0.08909999999999996f}, {0.99911f, 0.08811000000000002f, 0.08811000000000002f}, - {0.99912f, 0.08711999999999998f, 0.08711999999999998f}, - {0.99913f, 0.08612999999999993f, 0.08612999999999993f}, - {0.99914f, 0.08514f, 0.08514f}, {0.99915f, 0.08414999999999995f, - 0.08414999999999995f}, {0.99916f, 0.08316000000000001f, 0.08316000000000001f}, - {0.99917f, 0.08216999999999997f, 0.08216999999999997f}, - {0.99918f, 0.08117999999999992f, 0.08117999999999992f}, - {0.99919f, 0.08018999999999998f, 0.08018999999999998f}, - {0.9992f, 0.07919999999999994f, 0.07919999999999994f}, - {0.99921f, 0.07821f, 0.07821f}, {0.99922f, 0.07721999999999996f, - 0.07721999999999996f}, {0.99923f, 0.07622999999999991f, 0.07622999999999991f}, - {0.99924f, 0.07523999999999997f, 0.07523999999999997f}, - {0.99925f, 0.07424999999999993f, 0.07424999999999993f}, - {0.99926f, 0.07325999999999999f, 0.07325999999999999f}, - {0.99927f, 0.07226999999999995f, 0.07226999999999995f}, - {0.99928f, 0.0712799999999999f, 0.0712799999999999f}, - {0.99929f, 0.07028999999999996f, 0.07028999999999996f}, - {0.9993f, 0.06929999999999992f, 0.06929999999999992f}, - {0.99931f, 0.06830999999999998f, 0.06830999999999998f}, - {0.99932f, 0.06731999999999994f, 0.06731999999999994f}, - {0.99933f, 0.06633f, 0.06633f}, {0.99934f, 0.06533999999999995f, - 0.06533999999999995f}, {0.99935f, 0.06434999999999991f, 0.06434999999999991f}, - {0.99936f, 0.06335999999999997f, 0.06335999999999997f}, - {0.99937f, 0.062369999999999925f, 0.062369999999999925f}, - {0.99938f, 0.06137999999999999f, 0.06137999999999999f}, - {0.99939f, 0.060389999999999944f, 0.060389999999999944f}, - {0.9994f, 0.0593999999999999f, 0.0593999999999999f}, - {0.99941f, 0.05840999999999996f, 0.05840999999999996f}, - {0.99942f, 0.057419999999999916f, 0.057419999999999916f}, - {0.99943f, 0.05642999999999998f, 0.05642999999999998f}, - {0.99944f, 0.055439999999999934f, 0.055439999999999934f}, - {0.99945f, 0.05444999999999989f, 0.05444999999999989f}, - {0.99946f, 0.05345999999999995f, 0.05345999999999995f}, - {0.99947f, 0.052469999999999906f, 0.052469999999999906f}, - {0.99948f, 0.05147999999999997f, 0.05147999999999997f}, - {0.99949f, 0.050489999999999924f, 0.050489999999999924f}, - {0.9995f, 0.04949999999999999f, 0.04949999999999999f}, - {0.99951f, 0.04850999999999994f, 0.04850999999999994f}, - {0.99952f, 0.047519999999999896f, 0.047519999999999896f}, - {0.99953f, 0.04652999999999996f, 0.04652999999999996f}, - {0.99954f, 0.045539999999999914f, 0.045539999999999914f}, - {0.99955f, 0.04454999999999998f, 0.04454999999999998f}, - {0.99956f, 0.04355999999999993f, 0.04355999999999993f}, - {0.99957f, 0.042569999999999886f, 0.042569999999999886f}, - {0.99958f, 0.04157999999999995f, 0.04157999999999995f}, - {0.99959f, 0.040589999999999904f, 0.040589999999999904f}, - {0.9996f, 0.03960000000000008f, 0.03960000000000008f}, - {0.99961f, 0.03861000000000003f, 0.03861000000000003f}, - {0.99962f, 0.03761999999999999f, 0.03761999999999999f}, - {0.99963f, 0.03663000000000005f, 0.03663000000000005f}, - {0.99964f, 0.035640000000000005f, 0.035640000000000005f}, - {0.99965f, 0.03465000000000007f, 0.03465000000000007f}, - {0.99966f, 0.03366000000000002f, 0.03366000000000002f}, - {0.99967f, 0.03266999999999998f, 0.03266999999999998f}, - {0.99968f, 0.03168000000000004f, 0.03168000000000004f}, - {0.99969f, 0.030689999999999995f, 0.030689999999999995f}, - {0.9997f, 0.02970000000000006f, 0.02970000000000006f}, - {0.99971f, 0.028710000000000013f, 0.028710000000000013f}, - {0.99972f, 0.027720000000000078f, 0.027720000000000078f}, - {0.99973f, 0.02673000000000003f, 0.02673000000000003f}, - {0.99974f, 0.025739999999999985f, 0.025739999999999985f}, - {0.99975f, 0.02475000000000005f, 0.02475000000000005f}, - {0.99976f, 0.023760000000000003f, 0.023760000000000003f}, - {0.99977f, 0.022770000000000068f, 0.022770000000000068f}, - {0.99978f, 0.02178000000000002f, 0.02178000000000002f}, - {0.99979f, 0.020789999999999975f, 0.020789999999999975f}, - {0.9998f, 0.01980000000000004f, 0.01980000000000004f}, - {0.99981f, 0.018809999999999993f, 0.018809999999999993f}, - {0.99982f, 0.017820000000000058f, 0.017820000000000058f}, - {0.99983f, 0.01683000000000001f, 0.01683000000000001f}, - {0.99984f, 0.015839999999999965f, 0.015839999999999965f}, - {0.99985f, 0.01485000000000003f, 0.01485000000000003f}, - {0.99986f, 0.013859999999999983f, 0.013859999999999983f}, - {0.99987f, 0.012870000000000048f, 0.012870000000000048f}, - {0.99988f, 0.011880000000000002f, 0.011880000000000002f}, - {0.99989f, 0.010889999999999955f, 0.010889999999999955f}, - {0.9999f, 0.00990000000000002f, 0.00990000000000002f}, - {0.99991f, 0.008909999999999973f, 0.008909999999999973f}, - {0.99992f, 0.007920000000000038f, 0.007920000000000038f}, - {0.99993f, 0.006929999999999992f, 0.006929999999999992f}, - {0.99994f, 0.005940000000000056f, 0.005940000000000056f}, - {0.99995f, 0.00495000000000001f, 0.00495000000000001f}, - {0.99996f, 0.0039599999999999635f, 0.0039599999999999635f}, - {0.99997f, 0.002970000000000028f, 0.002970000000000028f}, - {0.99998f, 0.0019799999999999818f, 0.0019799999999999818f}, - {0.99999f, 0.0009900000000000464f, 0.0009900000000000464f}, {1.f, 0.f, 0.f}}; -float palette_grey[1001][3]={{0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, - {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, - 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, - 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}, {0.99f, 0.99f, 0.99f}}; - -/*11 class divergin */ -float palette_primary[1001][3]={{0.6196078431372549f, 0.00392156862745098f, 0.2588235294117647f}, - {0.621764705882353f, 0.006313725490196077f, 0.2593333333333333f}, - {0.623921568627451f, 0.008705882352941174f, 0.25984313725490193f}, - {0.626078431372549f, 0.011098039215686273f, 0.26035294117647056f}, - {0.6282352941176471f, 0.01349019607843137f, 0.2608627450980392f}, - {0.6303921568627451f, 0.01588235294117647f, 0.2613725490196078f}, - {0.6325490196078432f, 0.018274509803921566f, 0.26188235294117646f}, - {0.6347058823529412f, 0.020666666666666663f, 0.2623921568627451f}, - {0.6368627450980392f, 0.02305882352941176f, 0.2629019607843137f}, - {0.6390196078431373f, 0.025450980392156857f, 0.26341176470588235f}, - {0.6411764705882353f, 0.027843137254901958f, 0.263921568627451f}, - {0.6433333333333333f, 0.03023529411764705f, 0.2644313725490196f}, - {0.6454901960784314f, 0.03262745098039215f, 0.26494117647058824f}, - {0.6476470588235295f, 0.03501960784313725f, 0.2654509803921568f}, - {0.6498039215686274f, 0.037411764705882346f, 0.26596078431372544f}, - {0.6519607843137255f, 0.03980392156862744f, 0.26647058823529407f}, - {0.6541176470588236f, 0.04219607843137254f, 0.2669803921568627f}, - {0.6562745098039215f, 0.044588235294117644f, 0.26749019607843133f}, - {0.6584313725490196f, 0.046980392156862734f, 0.26799999999999996f}, - {0.6605882352941177f, 0.04937254901960783f, 0.2685098039215686f}, - {0.6627450980392157f, 0.051764705882352935f, 0.2690196078431372f}, - {0.6649019607843137f, 0.05415686274509803f, 0.26952941176470585f}, - {0.6670588235294118f, 0.05654901960784312f, 0.2700392156862745f}, - {0.6692156862745098f, 0.058941176470588226f, 0.2705490196078431f}, - {0.6713725490196079f, 0.06133333333333332f, 0.27105882352941174f}, - {0.6735294117647059f, 0.06372549019607843f, 0.27156862745098037f}, - {0.6756862745098039f, 0.0661176470588235f, 0.272078431372549f}, - {0.677843137254902f, 0.06850980392156861f, 0.27258823529411763f}, - {0.68f, 0.07090196078431371f, 0.27309803921568626f}, - {0.682156862745098f, 0.07329411764705882f, 0.2736078431372549f}, - {0.6843137254901961f, 0.0756862745098039f, 0.2741176470588235f}, - {0.6864705882352942f, 0.07807843137254901f, 0.27462745098039215f}, - {0.6886274509803921f, 0.0804705882352941f, 0.2751372549019608f}, - {0.6907843137254902f, 0.0828627450980392f, 0.2756470588235294f}, - {0.6929411764705883f, 0.08525490196078431f, 0.27615686274509804f}, - {0.6950980392156862f, 0.0876470588235294f, 0.27666666666666667f}, - {0.6972549019607843f, 0.09003921568627449f, 0.2771764705882353f}, - {0.6994117647058824f, 0.09243137254901959f, 0.2776862745098039f}, - {0.7015686274509804f, 0.09482352941176468f, 0.2781960784313725f}, - {0.7037254901960784f, 0.09721568627450979f, 0.27870588235294114f}, - {0.7058823529411765f, 0.09960784313725489f, 0.27921568627450977f}, - {0.7080392156862745f, 0.10199999999999998f, 0.2797254901960784f}, - {0.7101960784313726f, 0.10439215686274508f, 0.280235294117647f}, - {0.7123529411764706f, 0.10678431372549016f, 0.28074509803921566f}, - {0.7145098039215686f, 0.10917647058823526f, 0.2812549019607843f}, - {0.7166666666666667f, 0.11156862745098037f, 0.2817647058823529f}, - {0.7188235294117648f, 0.11396078431372547f, 0.28227450980392155f}, - {0.7209803921568627f, 0.11635294117647056f, 0.2827843137254902f}, - {0.7231372549019608f, 0.11874509803921567f, 0.2832941176470588f}, - {0.7252941176470589f, 0.12113725490196077f, 0.28380392156862744f}, - {0.7274509803921569f, 0.12352941176470586f, 0.28431372549019607f}, - {0.7296078431372549f, 0.12592156862745096f, 0.2848235294117647f}, - {0.731764705882353f, 0.12831372549019604f, 0.2853333333333333f}, - {0.733921568627451f, 0.13070588235294117f, 0.28584313725490196f}, - {0.736078431372549f, 0.13309803921568625f, 0.2863529411764706f}, - {0.7382352941176471f, 0.13549019607843132f, 0.2868627450980392f}, - {0.7403921568627451f, 0.13788235294117646f, 0.28737254901960785f}, - {0.7425490196078431f, 0.14027450980392153f, 0.2878823529411765f}, - {0.7447058823529412f, 0.14266666666666666f, 0.2883921568627451f}, - {0.7468627450980392f, 0.14505882352941174f, 0.28890196078431374f}, - {0.7490196078431373f, 0.14745098039215682f, 0.28941176470588237f}, - {0.7511764705882353f, 0.14984313725490195f, 0.289921568627451f}, - {0.7533333333333334f, 0.15223529411764702f, 0.29043137254901963f}, - {0.7554901960784314f, 0.1546274509803921f, 0.29094117647058826f}, - {0.7576470588235295f, 0.15701960784313723f, 0.2914509803921569f}, - {0.7598039215686274f, 0.1594117647058823f, 0.29196078431372546f}, - {0.7619607843137255f, 0.16180392156862744f, 0.2924705882352941f}, - {0.7641176470588236f, 0.16419607843137252f, 0.2929803921568627f}, - {0.7662745098039216f, 0.16658823529411765f, 0.29349019607843135f}, - {0.7684313725490196f, 0.16898039215686272f, 0.294f}, - {0.7705882352941177f, 0.1713725490196078f, 0.2945098039215686f}, - {0.7727450980392156f, 0.17376470588235288f, 0.29501960784313724f}, - {0.7749019607843137f, 0.176156862745098f, 0.2955294117647059f}, - {0.7770588235294118f, 0.17854901960784308f, 0.2960392156862745f}, - {0.7792156862745098f, 0.18094117647058822f, 0.29654901960784313f}, - {0.7813725490196078f, 0.1833333333333333f, 0.29705882352941176f}, - {0.7835294117647059f, 0.18572549019607837f, 0.2975686274509804f}, - {0.7856862745098039f, 0.1881176470588235f, 0.298078431372549f}, - {0.787843137254902f, 0.19050980392156858f, 0.29858823529411765f}, - {0.79f, 0.1929019607843137f, 0.2990980392156863f}, - {0.7921568627450981f, 0.19529411764705878f, 0.2996078431372549f}, - {0.7943137254901961f, 0.19768627450980386f, 0.30011764705882354f}, - {0.7964705882352942f, 0.200078431372549f, 0.3006274509803922f}, - {0.7986274509803921f, 0.20247058823529407f, 0.3011372549019608f}, - {0.8007843137254902f, 0.2048627450980392f, 0.30164705882352943f}, - {0.8029411764705883f, 0.20725490196078428f, 0.30215686274509806f}, - {0.8050980392156862f, 0.20964705882352935f, 0.30266666666666664f}, - {0.8072549019607843f, 0.21203921568627443f, 0.30317647058823527f}, - {0.8094117647058824f, 0.21443137254901956f, 0.3036862745098039f}, - {0.8115686274509804f, 0.21682352941176464f, 0.30419607843137253f}, - {0.8137254901960784f, 0.21921568627450977f, 0.30470588235294116f}, - {0.8158823529411765f, 0.22160784313725485f, 0.3052156862745098f}, - {0.8180392156862746f, 0.22399999999999998f, 0.3057254901960784f}, - {0.8201960784313725f, 0.22639215686274505f, 0.30623529411764705f}, - {0.8223529411764706f, 0.22878431372549013f, 0.3067450980392157f}, - {0.8245098039215686f, 0.23117647058823526f, 0.3072549019607843f}, - {0.8266666666666667f, 0.23356862745098034f, 0.30776470588235294f}, - {0.8288235294117647f, 0.23596078431372547f, 0.30827450980392157f}, - {0.8309803921568628f, 0.23835294117647055f, 0.3087843137254902f}, - {0.8331372549019608f, 0.24074509803921562f, 0.30929411764705883f}, - {0.8352941176470589f, 0.24313725490196078f, 0.30980392156862746f}, - {0.8365098039215687f, 0.24498039215686274f, 0.30933333333333335f}, - {0.8377254901960784f, 0.2468235294117647f, 0.30886274509803924f}, - {0.8389411764705883f, 0.24866666666666667f, 0.3083921568627451f}, - {0.840156862745098f, 0.25050980392156863f, 0.307921568627451f}, - {0.8413725490196079f, 0.25235294117647056f, 0.30745098039215685f}, - {0.8425882352941176f, 0.25419607843137254f, 0.30698039215686274f}, - {0.8438039215686275f, 0.2560392156862745f, 0.3065098039215686f}, - {0.8450196078431372f, 0.25788235294117645f, 0.3060392156862745f}, - {0.8462352941176471f, 0.25972549019607843f, 0.3055686274509804f}, - {0.8474509803921568f, 0.26156862745098036f, 0.3050980392156863f}, - {0.8486666666666667f, 0.26341176470588235f, 0.3046274509803922f}, - {0.8498823529411765f, 0.26525490196078433f, 0.30415686274509807f}, - {0.8510980392156863f, 0.26709803921568626f, 0.30368627450980396f}, - {0.8523137254901961f, 0.26894117647058824f, 0.3032156862745098f}, - {0.8535294117647059f, 0.27078431372549017f, 0.3027450980392157f}, - {0.8547450980392157f, 0.27262745098039215f, 0.30227450980392156f}, - {0.8559607843137255f, 0.27447058823529413f, 0.30180392156862745f}, - {0.8571764705882353f, 0.27631372549019606f, 0.30133333333333334f}, - {0.8583921568627451f, 0.27815686274509804f, 0.30086274509803923f}, - {0.8596078431372549f, 0.27999999999999997f, 0.3003921568627451f}, - {0.8608235294117648f, 0.28184313725490195f, 0.299921568627451f}, - {0.8620392156862745f, 0.2836862745098039f, 0.2994509803921569f}, - {0.8632549019607844f, 0.28552941176470586f, 0.29898039215686273f}, - {0.8644705882352941f, 0.28737254901960785f, 0.2985098039215686f}, - {0.865686274509804f, 0.2892156862745098f, 0.2980392156862745f}, - {0.8669019607843137f, 0.29105882352941176f, 0.2975686274509804f}, - {0.8681176470588235f, 0.29290196078431374f, 0.2970980392156863f}, - {0.8693333333333333f, 0.29474509803921567f, 0.29662745098039217f}, - {0.8705490196078431f, 0.29658823529411765f, 0.29615686274509806f}, - {0.871764705882353f, 0.2984313725490196f, 0.29568627450980395f}, - {0.8729803921568627f, 0.30027450980392156f, 0.29521568627450984f}, - {0.8741960784313726f, 0.3021176470588235f, 0.29474509803921567f}, - {0.8754117647058823f, 0.3039607843137255f, 0.29427450980392156f}, - {0.8766274509803922f, 0.30580392156862746f, 0.29380392156862745f}, - {0.8778431372549019f, 0.3076470588235294f, 0.29333333333333333f}, - {0.8790588235294118f, 0.30949019607843137f, 0.2928627450980392f}, - {0.8802745098039215f, 0.3113333333333333f, 0.2923921568627451f}, - {0.8814901960784314f, 0.3131764705882353f, 0.291921568627451f}, - {0.8827058823529411f, 0.3150196078431372f, 0.2914509803921569f}, - {0.883921568627451f, 0.3168627450980392f, 0.2909803921568628f}, - {0.8851372549019608f, 0.31870588235294117f, 0.29050980392156867f}, - {0.8863529411764706f, 0.3205490196078431f, 0.2900392156862745f}, - {0.8875686274509804f, 0.3223921568627451f, 0.2895686274509804f}, - {0.8887843137254902f, 0.32423529411764707f, 0.2890980392156863f}, - {0.89f, 0.326078431372549f, 0.28862745098039216f}, - {0.8912156862745098f, 0.327921568627451f, 0.28815686274509805f}, - {0.8924313725490196f, 0.3297647058823529f, 0.28768627450980394f}, - {0.8936470588235293f, 0.3316078431372549f, 0.28721568627450983f}, - {0.8948627450980392f, 0.3334509803921568f, 0.2867450980392157f}, - {0.896078431372549f, 0.3352941176470588f, 0.28627450980392155f}, - {0.8972941176470588f, 0.3371372549019608f, 0.28580392156862744f}, - {0.8985098039215687f, 0.3389803921568627f, 0.2853333333333333f}, - {0.8997254901960784f, 0.3408235294117647f, 0.2848627450980392f}, - {0.9009411764705882f, 0.3426666666666667f, 0.2843921568627451f}, - {0.902156862745098f, 0.3445098039215686f, 0.283921568627451f}, - {0.9033725490196078f, 0.3463529411764706f, 0.2834509803921569f}, - {0.9045882352941176f, 0.3481960784313725f, 0.28298039215686277f}, - {0.9058039215686274f, 0.3500392156862745f, 0.28250980392156866f}, - {0.9070196078431372f, 0.3518823529411764f, 0.28203921568627455f}, - {0.908235294117647f, 0.3537254901960784f, 0.2815686274509804f}, - {0.9094509803921569f, 0.3555686274509804f, 0.28109803921568627f}, - {0.9106666666666666f, 0.3574117647058823f, 0.28062745098039216f}, - {0.9118823529411765f, 0.3592549019607843f, 0.28015686274509805f}, - {0.9130980392156862f, 0.3610980392156863f, 0.27968627450980393f}, - {0.9143137254901961f, 0.3629411764705882f, 0.2792156862745098f}, - {0.9155294117647058f, 0.3647843137254902f, 0.2787450980392157f}, - {0.9167450980392157f, 0.3666274509803921f, 0.2782745098039216f}, - {0.9179607843137254f, 0.3684705882352941f, 0.27780392156862743f}, - {0.9191764705882353f, 0.37031372549019603f, 0.2773333333333333f}, - {0.9203921568627451f, 0.372156862745098f, 0.2768627450980392f}, - {0.9216078431372549f, 0.374f, 0.2763921568627451f}, - {0.9228235294117646f, 0.3758431372549019f, 0.275921568627451f}, - {0.9240392156862745f, 0.37768627450980385f, 0.2754509803921569f}, - {0.9252549019607843f, 0.37952941176470584f, 0.27498039215686276f}, - {0.926470588235294f, 0.3813725490196078f, 0.27450980392156865f}, - {0.9276862745098039f, 0.38321568627450975f, 0.27403921568627454f}, - {0.9289019607843136f, 0.38505882352941173f, 0.27356862745098043f}, - {0.9301176470588235f, 0.3869019607843137f, 0.27309803921568626f}, - {0.9313333333333333f, 0.38874509803921564f, 0.27262745098039215f}, - {0.9325490196078431f, 0.3905882352941176f, 0.27215686274509804f}, - {0.9337647058823529f, 0.3924313725490196f, 0.2716862745098039f}, - {0.9349803921568627f, 0.39427450980392154f, 0.2712156862745098f}, - {0.9361960784313725f, 0.3961176470588235f, 0.2707450980392157f}, - {0.9374117647058823f, 0.3979607843137255f, 0.2702745098039216f}, - {0.9386274509803921f, 0.39980392156862743f, 0.2698039215686275f}, - {0.9398431372549019f, 0.40164705882352936f, 0.26933333333333337f}, - {0.9410588235294117f, 0.40349019607843134f, 0.2688627450980392f}, - {0.9422745098039215f, 0.4053333333333333f, 0.2683921568627451f}, - {0.9434901960784313f, 0.40717647058823525f, 0.267921568627451f}, - {0.9447058823529411f, 0.4090196078431372f, 0.26745098039215687f}, - {0.9459215686274509f, 0.4108627450980392f, 0.26698039215686276f}, - {0.9471372549019608f, 0.41270588235294114f, 0.26650980392156864f}, - {0.9483529411764705f, 0.41454901960784307f, 0.26603921568627453f}, - {0.9495686274509804f, 0.41639215686274506f, 0.2655686274509804f}, - {0.9507843137254901f, 0.41823529411764704f, 0.2650980392156863f}, - {0.952f, 0.42007843137254897f, 0.26462745098039214f}, - {0.9532156862745097f, 0.42192156862745095f, 0.26415686274509803f}, - {0.9544313725490196f, 0.42376470588235293f, 0.2636862745098039f}, - {0.9556470588235293f, 0.42560784313725486f, 0.2632156862745098f}, - {0.9568627450980391f, 0.42745098039215684f, 0.2627450980392157f}, - {0.9572156862745097f, 0.43f, 0.263921568627451f}, - {0.9575686274509804f, 0.43254901960784314f, 0.2650980392156863f}, - {0.9579215686274509f, 0.43509803921568624f, 0.2662745098039216f}, - {0.9582745098039215f, 0.4376470588235294f, 0.26745098039215687f}, - {0.958627450980392f, 0.44019607843137254f, 0.26862745098039215f}, - {0.9589803921568627f, 0.4427450980392157f, 0.2698039215686275f}, - {0.9593333333333333f, 0.4452941176470588f, 0.27098039215686276f}, - {0.9596862745098038f, 0.44784313725490194f, 0.27215686274509804f}, - {0.9600392156862745f, 0.4503921568627451f, 0.2733333333333333f}, - {0.960392156862745f, 0.45294117647058824f, 0.27450980392156865f}, - {0.9607450980392156f, 0.45549019607843133f, 0.27568627450980393f}, - {0.9610980392156863f, 0.4580392156862745f, 0.2768627450980392f}, - {0.9614509803921568f, 0.46058823529411763f, 0.2780392156862745f}, - {0.9618039215686274f, 0.4631372549019608f, 0.2792156862745098f}, - {0.962156862745098f, 0.46568627450980393f, 0.2803921568627451f}, - {0.9625098039215686f, 0.468235294117647f, 0.2815686274509804f}, - {0.9628627450980392f, 0.4707843137254902f, 0.2827450980392157f}, - {0.9632156862745097f, 0.47333333333333333f, 0.283921568627451f}, - {0.9635686274509804f, 0.4758823529411765f, 0.28509803921568627f}, - {0.9639215686274509f, 0.4784313725490196f, 0.28627450980392155f}, - {0.9642745098039215f, 0.4809803921568627f, 0.2874509803921569f}, - {0.9646274509803922f, 0.4835294117647059f, 0.28862745098039216f}, - {0.9649803921568627f, 0.486078431372549f, 0.28980392156862744f}, - {0.9653333333333333f, 0.4886274509803922f, 0.2909803921568627f}, - {0.9656862745098038f, 0.49117647058823527f, 0.29215686274509806f}, - {0.9660392156862745f, 0.4937254901960784f, 0.29333333333333333f}, - {0.966392156862745f, 0.49627450980392157f, 0.2945098039215686f}, - {0.9667450980392156f, 0.49882352941176467f, 0.2956862745098039f}, - {0.9670980392156863f, 0.5013725490196078f, 0.2968627450980392f}, - {0.9674509803921568f, 0.503921568627451f, 0.2980392156862745f}, - {0.9678039215686274f, 0.5064705882352941f, 0.2992156862745098f}, - {0.968156862745098f, 0.5090196078431373f, 0.3003921568627451f}, - {0.9685098039215686f, 0.5115686274509804f, 0.3015686274509804f}, - {0.9688627450980392f, 0.5141176470588236f, 0.3027450980392157f}, - {0.9692156862745098f, 0.5166666666666666f, 0.303921568627451f}, - {0.9695686274509804f, 0.5192156862745098f, 0.3050980392156863f}, - {0.9699215686274509f, 0.5217647058823529f, 0.30627450980392157f}, - {0.9702745098039215f, 0.5243137254901961f, 0.30745098039215685f}, - {0.9706274509803922f, 0.5268627450980392f, 0.3086274509803921f}, - {0.9709803921568627f, 0.5294117647058824f, 0.30980392156862746f}, - {0.9713333333333333f, 0.5319607843137255f, 0.31098039215686274f}, - {0.9716862745098039f, 0.5345098039215687f, 0.312156862745098f}, - {0.9720392156862745f, 0.5370588235294117f, 0.31333333333333335f}, - {0.972392156862745f, 0.5396078431372549f, 0.31450980392156863f}, - {0.9727450980392156f, 0.542156862745098f, 0.3156862745098039f}, - {0.9730980392156863f, 0.5447058823529412f, 0.3168627450980392f}, - {0.9734509803921568f, 0.5472549019607843f, 0.3180392156862745f}, - {0.9738039215686274f, 0.5498039215686275f, 0.3192156862745098f}, - {0.974156862745098f, 0.5523529411764706f, 0.3203921568627451f}, - {0.9745098039215686f, 0.5549019607843138f, 0.32156862745098036f}, - {0.9748627450980392f, 0.5574509803921568f, 0.3227450980392157f}, - {0.9752156862745098f, 0.56f, 0.323921568627451f}, - {0.9755686274509804f, 0.5625490196078431f, 0.32509803921568625f}, - {0.9759215686274509f, 0.5650980392156862f, 0.3262745098039216f}, - {0.9762745098039216f, 0.5676470588235294f, 0.32745098039215687f}, - {0.9766274509803922f, 0.5701960784313725f, 0.32862745098039214f}, - {0.9769803921568627f, 0.5727450980392157f, 0.3298039215686274f}, - {0.9773333333333333f, 0.5752941176470588f, 0.3309803921568627f}, - {0.9776862745098039f, 0.577843137254902f, 0.33215686274509804f}, - {0.9780392156862745f, 0.580392156862745f, 0.3333333333333333f}, - {0.978392156862745f, 0.5829411764705883f, 0.3345098039215686f}, - {0.9787450980392157f, 0.5854901960784313f, 0.33568627450980393f}, - {0.9790980392156863f, 0.5880392156862745f, 0.3368627450980392f}, - {0.9794509803921568f, 0.5905882352941176f, 0.3380392156862745f}, - {0.9798039215686274f, 0.5931372549019608f, 0.3392156862745098f}, - {0.9801568627450981f, 0.5956862745098039f, 0.3403921568627451f}, - {0.9805098039215686f, 0.5982352941176471f, 0.3415686274509804f}, - {0.9808627450980392f, 0.6007843137254902f, 0.34274509803921566f}, - {0.9812156862745098f, 0.6033333333333334f, 0.34392156862745094f}, - {0.9815686274509804f, 0.6058823529411765f, 0.34509803921568627f}, - {0.981921568627451f, 0.6084313725490196f, 0.34627450980392155f}, - {0.9822745098039216f, 0.6109803921568627f, 0.3474509803921568f}, - {0.9826274509803922f, 0.6135294117647059f, 0.34862745098039216f}, - {0.9829803921568627f, 0.616078431372549f, 0.34980392156862744f}, - {0.9833333333333334f, 0.6186274509803922f, 0.3509803921568627f}, - {0.983686274509804f, 0.6211764705882353f, 0.352156862745098f}, - {0.9840392156862745f, 0.6237254901960785f, 0.3533333333333333f}, - {0.9843921568627451f, 0.6262745098039215f, 0.3545098039215686f}, - {0.9847450980392157f, 0.6288235294117647f, 0.3556862745098039f}, - {0.9850980392156863f, 0.6313725490196078f, 0.35686274509803917f}, - {0.9854509803921568f, 0.633921568627451f, 0.3580392156862745f}, - {0.9858039215686275f, 0.6364705882352941f, 0.3592156862745098f}, - {0.9861568627450981f, 0.6390196078431373f, 0.36039215686274506f}, - {0.9865098039215686f, 0.6415686274509804f, 0.3615686274509804f}, - {0.9868627450980393f, 0.6441176470588236f, 0.3627450980392157f}, - {0.9872156862745098f, 0.6466666666666666f, 0.36392156862745095f}, - {0.9875686274509804f, 0.6492156862745098f, 0.36509803921568623f}, - {0.987921568627451f, 0.6517647058823529f, 0.3662745098039215f}, - {0.9882745098039216f, 0.6543137254901961f, 0.36745098039215685f}, - {0.9886274509803922f, 0.6568627450980392f, 0.3686274509803921f}, - {0.9889803921568627f, 0.6594117647058824f, 0.3698039215686274f}, - {0.9893333333333334f, 0.6619607843137255f, 0.37098039215686274f}, - {0.989686274509804f, 0.6645098039215687f, 0.372156862745098f}, - {0.9900392156862745f, 0.6670588235294117f, 0.3733333333333333f}, - {0.9903921568627452f, 0.669607843137255f, 0.37450980392156863f}, - {0.9907450980392157f, 0.672156862745098f, 0.3756862745098039f}, - {0.9910980392156863f, 0.6747058823529412f, 0.3768627450980392f}, - {0.9914509803921568f, 0.6772549019607843f, 0.37803921568627447f}, - {0.9918039215686275f, 0.6798039215686275f, 0.3792156862745098f}, - {0.9921568627450981f, 0.6823529411764706f, 0.3803921568627451f}, - {0.9921960784313726f, 0.6843137254901961f, 0.38203921568627447f}, - {0.9922352941176471f, 0.6862745098039216f, 0.3836862745098039f}, - {0.9922745098039216f, 0.6882352941176471f, 0.3853333333333333f}, - {0.9923137254901961f, 0.6901960784313725f, 0.38698039215686275f}, - {0.9923529411764707f, 0.692156862745098f, 0.38862745098039214f}, - {0.9923921568627452f, 0.6941176470588235f, 0.39027450980392153f}, - {0.9924313725490196f, 0.696078431372549f, 0.391921568627451f}, - {0.9924705882352941f, 0.6980392156862745f, 0.39356862745098037f}, - {0.9925098039215686f, 0.7000000000000001f, 0.39521568627450976f}, - {0.9925490196078431f, 0.7019607843137255f, 0.3968627450980392f}, - {0.9925882352941177f, 0.703921568627451f, 0.3985098039215686f}, - {0.9926274509803922f, 0.7058823529411765f, 0.40015686274509804f}, - {0.9926666666666667f, 0.707843137254902f, 0.40180392156862743f}, - {0.9927058823529412f, 0.7098039215686275f, 0.4034509803921568f}, - {0.9927450980392157f, 0.711764705882353f, 0.40509803921568627f}, - {0.9927843137254903f, 0.7137254901960784f, 0.40674509803921566f}, - {0.9928235294117648f, 0.7156862745098039f, 0.4083921568627451f}, - {0.9928627450980393f, 0.7176470588235294f, 0.4100392156862745f}, - {0.9929019607843137f, 0.7196078431372549f, 0.4116862745098039f}, - {0.9929411764705882f, 0.7215686274509804f, 0.41333333333333333f}, - {0.9929803921568627f, 0.7235294117647059f, 0.4149803921568627f}, - {0.9930196078431373f, 0.7254901960784313f, 0.4166274509803921f}, - {0.9930588235294118f, 0.7274509803921568f, 0.41827450980392156f}, - {0.9930980392156863f, 0.7294117647058823f, 0.41992156862745095f}, - {0.9931372549019608f, 0.7313725490196079f, 0.42156862745098034f}, - {0.9931764705882353f, 0.7333333333333334f, 0.4232156862745098f}, - {0.9932156862745098f, 0.7352941176470589f, 0.4248627450980392f}, - {0.9932549019607844f, 0.7372549019607844f, 0.4265098039215686f}, - {0.9932941176470589f, 0.7392156862745098f, 0.428156862745098f}, - {0.9933333333333334f, 0.7411764705882353f, 0.4298039215686274f}, - {0.9933725490196079f, 0.7431372549019608f, 0.43145098039215685f}, - {0.9934117647058823f, 0.7450980392156863f, 0.43309803921568624f}, - {0.9934509803921568f, 0.7470588235294118f, 0.4347450980392157f}, - {0.9934901960784314f, 0.7490196078431373f, 0.4363921568627451f}, - {0.9935294117647059f, 0.7509803921568627f, 0.43803921568627446f}, - {0.9935686274509804f, 0.7529411764705882f, 0.4396862745098039f}, - {0.9936078431372549f, 0.7549019607843137f, 0.4413333333333333f}, - {0.9936470588235294f, 0.7568627450980392f, 0.4429803921568627f}, - {0.993686274509804f, 0.7588235294117647f, 0.44462745098039214f}, - {0.9937254901960785f, 0.7607843137254902f, 0.4462745098039215f}, - {0.993764705882353f, 0.7627450980392156f, 0.44792156862745097f}, - {0.9938039215686275f, 0.7647058823529412f, 0.44956862745098036f}, - {0.993843137254902f, 0.7666666666666666f, 0.45121568627450975f}, - {0.9938823529411764f, 0.7686274509803922f, 0.4528627450980392f}, - {0.993921568627451f, 0.7705882352941177f, 0.4545098039215686f}, - {0.9939607843137255f, 0.7725490196078432f, 0.45615686274509804f}, - {0.994f, 0.7745098039215687f, 0.4578039215686274f}, - {0.9940392156862745f, 0.7764705882352941f, 0.4594509803921568f}, - {0.994078431372549f, 0.7784313725490196f, 0.46109803921568626f}, - {0.9941176470588236f, 0.7803921568627451f, 0.46274509803921565f}, - {0.9941568627450981f, 0.7823529411764706f, 0.46439215686274504f}, - {0.9941960784313726f, 0.7843137254901961f, 0.4660392156862745f}, - {0.9942352941176471f, 0.7862745098039216f, 0.4676862745098039f}, - {0.9942745098039216f, 0.788235294117647f, 0.46933333333333327f}, - {0.9943137254901961f, 0.7901960784313725f, 0.4709803921568627f}, - {0.9943529411764707f, 0.792156862745098f, 0.4726274509803921f}, - {0.9943921568627451f, 0.7941176470588236f, 0.47427450980392155f}, - {0.9944313725490196f, 0.7960784313725491f, 0.47592156862745094f}, - {0.9944705882352941f, 0.7980392156862746f, 0.47756862745098033f}, - {0.9945098039215686f, 0.8f, 0.4792156862745098f}, - {0.9945490196078431f, 0.8019607843137255f, 0.48086274509803917f}, - {0.9945882352941177f, 0.803921568627451f, 0.4825098039215686f}, - {0.9946274509803922f, 0.8058823529411765f, 0.484156862745098f}, - {0.9946666666666667f, 0.807843137254902f, 0.4858039215686274f}, - {0.9947058823529412f, 0.8098039215686275f, 0.48745098039215684f}, - {0.9947450980392157f, 0.8117647058823529f, 0.48909803921568623f}, - {0.9947843137254903f, 0.8137254901960784f, 0.4907450980392156f}, - {0.9948235294117648f, 0.8156862745098039f, 0.49239215686274507f}, - {0.9948627450980392f, 0.8176470588235294f, 0.4940392156862745f}, - {0.9949019607843137f, 0.8196078431372549f, 0.4956862745098039f}, - {0.9949411764705882f, 0.8215686274509804f, 0.4973333333333333f}, - {0.9949803921568627f, 0.8235294117647058f, 0.4989803921568627f}, - {0.9950196078431373f, 0.8254901960784313f, 0.5006274509803921f}, - {0.9950588235294118f, 0.8274509803921568f, 0.5022745098039215f}, - {0.9950980392156863f, 0.8294117647058823f, 0.503921568627451f}, - {0.9951372549019608f, 0.8313725490196078f, 0.5055686274509803f}, - {0.9951764705882353f, 0.8333333333333333f, 0.5072156862745097f}, - {0.9952156862745098f, 0.8352941176470589f, 0.5088627450980392f}, - {0.9952549019607844f, 0.8372549019607843f, 0.5105098039215685f}, - {0.9952941176470589f, 0.8392156862745098f, 0.512156862745098f}, - {0.9953333333333334f, 0.8411764705882353f, 0.5138039215686274f}, - {0.9953725490196078f, 0.8431372549019608f, 0.5154509803921569f}, - {0.9954117647058823f, 0.8450980392156863f, 0.5170980392156862f}, - {0.9954509803921568f, 0.8470588235294118f, 0.5187450980392156f}, - {0.9954901960784314f, 0.8490196078431372f, 0.5203921568627451f}, - {0.9955294117647059f, 0.8509803921568627f, 0.5220392156862744f}, - {0.9955686274509804f, 0.8529411764705882f, 0.5236862745098039f}, - {0.9956078431372549f, 0.8549019607843137f, 0.5253333333333333f}, - {0.9956470588235294f, 0.8568627450980392f, 0.5269803921568627f}, - {0.995686274509804f, 0.8588235294117647f, 0.5286274509803921f}, - {0.9957254901960785f, 0.8607843137254902f, 0.5302745098039215f}, - {0.995764705882353f, 0.8627450980392157f, 0.531921568627451f}, - {0.9958039215686275f, 0.8647058823529412f, 0.5335686274509803f}, - {0.9958431372549019f, 0.8666666666666667f, 0.5352156862745098f}, - {0.9958823529411764f, 0.8686274509803922f, 0.5368627450980392f}, - {0.995921568627451f, 0.8705882352941177f, 0.5385098039215686f}, - {0.9959607843137255f, 0.8725490196078431f, 0.540156862745098f}, - {0.996f, 0.8745098039215686f, 0.5418039215686274f}, - {0.9960392156862745f, 0.8764705882352941f, 0.5434509803921568f}, - {0.996078431372549f, 0.8784313725490196f, 0.5450980392156862f}, - {0.9961176470588236f, 0.8796470588235294f, 0.5471372549019607f}, - {0.9961568627450981f, 0.8808627450980392f, 0.5491764705882353f}, - {0.9961960784313726f, 0.882078431372549f, 0.5512156862745098f}, - {0.9962352941176471f, 0.8832941176470588f, 0.5532549019607843f}, - {0.9962745098039216f, 0.8845098039215686f, 0.5552941176470588f}, - {0.9963137254901961f, 0.8857254901960784f, 0.5573333333333332f}, - {0.9963529411764706f, 0.8869411764705882f, 0.5593725490196078f}, - {0.9963921568627451f, 0.888156862745098f, 0.5614117647058823f}, - {0.9964313725490196f, 0.8893725490196078f, 0.5634509803921568f}, - {0.9964705882352941f, 0.8905882352941177f, 0.5654901960784313f}, - {0.9965098039215686f, 0.8918039215686274f, 0.5675294117647058f}, - {0.9965490196078431f, 0.8930196078431373f, 0.5695686274509804f}, - {0.9965882352941177f, 0.894235294117647f, 0.5716078431372549f}, - {0.9966274509803922f, 0.8954509803921569f, 0.5736470588235294f}, - {0.9966666666666667f, 0.8966666666666666f, 0.5756862745098039f}, - {0.9967058823529412f, 0.8978823529411765f, 0.5777254901960784f}, - {0.9967450980392157f, 0.8990980392156863f, 0.5797647058823528f}, - {0.9967843137254903f, 0.9003137254901961f, 0.5818039215686274f}, - {0.9968235294117647f, 0.9015294117647059f, 0.5838431372549019f}, - {0.9968627450980392f, 0.9027450980392157f, 0.5858823529411764f}, - {0.9969019607843137f, 0.9039607843137255f, 0.5879215686274509f}, - {0.9969411764705882f, 0.9051764705882352f, 0.5899607843137255f}, - {0.9969803921568627f, 0.9063921568627451f, 0.592f}, - {0.9970196078431373f, 0.9076078431372548f, 0.5940392156862745f}, - {0.9970588235294118f, 0.9088235294117647f, 0.596078431372549f}, - {0.9970980392156863f, 0.9100392156862745f, 0.5981176470588235f}, - {0.9971372549019608f, 0.9112549019607843f, 0.6001568627450979f}, - {0.9971764705882353f, 0.9124705882352941f, 0.6021960784313725f}, - {0.9972156862745098f, 0.9136862745098039f, 0.604235294117647f}, - {0.9972549019607844f, 0.9149019607843137f, 0.6062745098039215f}, - {0.9972941176470589f, 0.9161176470588235f, 0.608313725490196f}, - {0.9973333333333333f, 0.9173333333333333f, 0.6103529411764705f}, - {0.9973725490196078f, 0.9185490196078432f, 0.6123921568627451f}, - {0.9974117647058823f, 0.9197647058823529f, 0.6144313725490196f}, - {0.9974509803921568f, 0.9209803921568628f, 0.6164705882352941f}, - {0.9974901960784314f, 0.9221960784313725f, 0.6185098039215686f}, - {0.9975294117647059f, 0.9234117647058824f, 0.6205490196078431f}, - {0.9975686274509804f, 0.9246274509803921f, 0.6225882352941177f}, - {0.9976078431372549f, 0.925843137254902f, 0.6246274509803921f}, - {0.9976470588235294f, 0.9270588235294117f, 0.6266666666666666f}, - {0.997686274509804f, 0.9282745098039216f, 0.6287058823529411f}, - {0.9977254901960785f, 0.9294901960784314f, 0.6307450980392156f}, - {0.997764705882353f, 0.9307058823529412f, 0.6327843137254902f}, - {0.9978039215686274f, 0.931921568627451f, 0.6348235294117647f}, - {0.9978431372549019f, 0.9331372549019608f, 0.6368627450980392f}, - {0.9978823529411764f, 0.9343529411764706f, 0.6389019607843137f}, - {0.997921568627451f, 0.9355686274509804f, 0.6409411764705882f}, - {0.9979607843137255f, 0.9367843137254902f, 0.6429803921568628f}, - {0.998f, 0.938f, 0.6450196078431372f}, - {0.9980392156862745f, 0.9392156862745098f, 0.6470588235294117f}, - {0.998078431372549f, 0.9404313725490197f, 0.6490980392156862f}, - {0.9981176470588236f, 0.9416470588235294f, 0.6511372549019607f}, - {0.9981568627450981f, 0.9428627450980392f, 0.6531764705882352f}, - {0.9981960784313726f, 0.944078431372549f, 0.6552156862745098f}, - {0.9982352941176471f, 0.9452941176470588f, 0.6572549019607843f}, - {0.9982745098039216f, 0.9465098039215686f, 0.6592941176470588f}, - {0.998313725490196f, 0.9477254901960784f, 0.6613333333333333f}, - {0.9983529411764706f, 0.9489411764705882f, 0.6633725490196078f}, - {0.9983921568627451f, 0.950156862745098f, 0.6654117647058824f}, - {0.9984313725490196f, 0.9513725490196079f, 0.6674509803921569f}, - {0.9984705882352941f, 0.9525882352941176f, 0.6694901960784313f}, - {0.9985098039215686f, 0.9538039215686275f, 0.6715294117647058f}, - {0.9985490196078431f, 0.9550196078431372f, 0.6735686274509803f}, - {0.9985882352941177f, 0.9562352941176471f, 0.6756078431372549f}, - {0.9986274509803922f, 0.9574509803921568f, 0.6776470588235294f}, - {0.9986666666666667f, 0.9586666666666667f, 0.6796862745098039f}, - {0.9987058823529412f, 0.9598823529411765f, 0.6817254901960784f}, - {0.9987450980392157f, 0.9610980392156863f, 0.6837647058823529f}, - {0.9987843137254901f, 0.9623137254901961f, 0.6858039215686275f}, - {0.9988235294117647f, 0.9635294117647059f, 0.687843137254902f}, - {0.9988627450980392f, 0.9647450980392157f, 0.6898823529411764f}, - {0.9989019607843137f, 0.9659607843137255f, 0.6919215686274509f}, - {0.9989411764705882f, 0.9671764705882353f, 0.6939607843137254f}, - {0.9989803921568627f, 0.968392156862745f, 0.696f}, - {0.9990196078431373f, 0.9696078431372549f, 0.6980392156862745f}, - {0.9990588235294118f, 0.9708235294117646f, 0.700078431372549f}, - {0.9990980392156863f, 0.9720392156862745f, 0.7021176470588235f}, - {0.9991372549019608f, 0.9732549019607843f, 0.704156862745098f}, - {0.9991764705882353f, 0.9744705882352941f, 0.7061960784313726f}, - {0.9992156862745099f, 0.9756862745098039f, 0.7082352941176471f}, - {0.9992549019607844f, 0.9769019607843137f, 0.7102745098039216f}, - {0.9992941176470588f, 0.9781176470588235f, 0.7123137254901961f}, - {0.9993333333333333f, 0.9793333333333334f, 0.7143529411764706f}, - {0.9993725490196078f, 0.9805490196078431f, 0.716392156862745f}, - {0.9994117647058823f, 0.981764705882353f, 0.7184313725490196f}, - {0.9994509803921569f, 0.9829803921568627f, 0.7204705882352941f}, - {0.9994901960784314f, 0.9841960784313726f, 0.7225098039215686f}, - {0.9995294117647059f, 0.9854117647058823f, 0.7245490196078431f}, - {0.9995686274509804f, 0.9866274509803922f, 0.7265882352941176f}, - {0.9996078431372549f, 0.9878431372549019f, 0.7286274509803922f}, - {0.9996470588235294f, 0.9890588235294118f, 0.7306666666666666f}, - {0.999686274509804f, 0.9902745098039216f, 0.7327058823529411f}, - {0.9997254901960785f, 0.9914901960784314f, 0.7347450980392156f}, - {0.9997647058823529f, 0.9927058823529412f, 0.7367843137254901f}, - {0.9998039215686274f, 0.993921568627451f, 0.7388235294117647f}, - {0.9998431372549019f, 0.9951372549019608f, 0.7408627450980392f}, - {0.9998823529411764f, 0.9963529411764706f, 0.7429019607843137f}, - {0.999921568627451f, 0.9975686274509804f, 0.7449411764705882f}, - {0.9999607843137255f, 0.9987843137254901f, 0.7469803921568627f}, - {1.f, 1.f, 0.7490196078431373f}, - {0.9990196078431373f, 0.9996078431372549f, 0.7474901960784314f}, - {0.9980392156862745f, 0.9992156862745099f, 0.7459607843137255f}, - {0.9970588235294118f, 0.9988235294117647f, 0.7444313725490196f}, - {0.996078431372549f, 0.9984313725490196f, 0.7429019607843137f}, - {0.9950980392156863f, 0.9980392156862745f, 0.7413725490196078f}, - {0.9941176470588236f, 0.9976470588235294f, 0.7398431372549019f}, - {0.9931372549019608f, 0.9972549019607844f, 0.738313725490196f}, - {0.9921568627450981f, 0.9968627450980392f, 0.7367843137254902f}, - {0.9911764705882353f, 0.9964705882352941f, 0.7352549019607844f}, - {0.9901960784313726f, 0.996078431372549f, 0.7337254901960785f}, - {0.9892156862745098f, 0.995686274509804f, 0.7321960784313726f}, - {0.9882352941176471f, 0.9952941176470588f, 0.7306666666666667f}, - {0.9872549019607844f, 0.9949019607843137f, 0.7291372549019608f}, - {0.9862745098039216f, 0.9945098039215686f, 0.7276078431372549f}, - {0.9852941176470589f, 0.9941176470588236f, 0.726078431372549f}, - {0.9843137254901961f, 0.9937254901960785f, 0.7245490196078431f}, - {0.9833333333333333f, 0.9933333333333333f, 0.7230196078431372f}, - {0.9823529411764705f, 0.9929411764705882f, 0.7214901960784313f}, - {0.9813725490196078f, 0.9925490196078431f, 0.7199607843137255f}, - {0.9803921568627451f, 0.9921568627450981f, 0.7184313725490196f}, - {0.9794117647058823f, 0.991764705882353f, 0.7169019607843137f}, - {0.9784313725490196f, 0.9913725490196078f, 0.7153725490196079f}, - {0.9774509803921568f, 0.9909803921568627f, 0.713843137254902f}, - {0.9764705882352941f, 0.9905882352941177f, 0.7123137254901961f}, - {0.9754901960784313f, 0.9901960784313726f, 0.7107843137254902f}, - {0.9745098039215686f, 0.9898039215686275f, 0.7092549019607843f}, - {0.9735294117647059f, 0.9894117647058823f, 0.7077254901960784f}, - {0.9725490196078431f, 0.9890196078431372f, 0.7061960784313726f}, - {0.9715686274509804f, 0.9886274509803922f, 0.7046666666666667f}, - {0.9705882352941176f, 0.9882352941176471f, 0.7031372549019608f}, - {0.9696078431372549f, 0.9878431372549019f, 0.7016078431372549f}, - {0.9686274509803922f, 0.9874509803921568f, 0.700078431372549f}, - {0.9676470588235294f, 0.9870588235294118f, 0.6985490196078431f}, - {0.9666666666666667f, 0.9866666666666667f, 0.6970196078431372f}, - {0.9656862745098039f, 0.9862745098039216f, 0.6954901960784313f}, - {0.9647058823529412f, 0.9858823529411764f, 0.6939607843137255f}, - {0.9637254901960784f, 0.9854901960784314f, 0.6924313725490197f}, - {0.9627450980392157f, 0.9850980392156863f, 0.6909019607843138f}, - {0.961764705882353f, 0.9847058823529412f, 0.6893725490196079f}, - {0.9607843137254902f, 0.9843137254901961f, 0.687843137254902f}, - {0.9598039215686275f, 0.983921568627451f, 0.6863137254901961f}, - {0.9588235294117647f, 0.9835294117647059f, 0.6847843137254902f}, - {0.957843137254902f, 0.9831372549019608f, 0.6832549019607843f}, - {0.9568627450980393f, 0.9827450980392157f, 0.6817254901960784f}, - {0.9558823529411765f, 0.9823529411764707f, 0.6801960784313725f}, - {0.9549019607843138f, 0.9819607843137255f, 0.6786666666666666f}, - {0.953921568627451f, 0.9815686274509804f, 0.6771372549019608f}, - {0.9529411764705883f, 0.9811764705882353f, 0.6756078431372549f}, - {0.9519607843137254f, 0.9807843137254902f, 0.674078431372549f}, - {0.9509803921568627f, 0.9803921568627452f, 0.6725490196078432f}, - {0.95f, 0.98f, 0.6710196078431373f}, - {0.9490196078431372f, 0.9796078431372549f, 0.6694901960784314f}, - {0.9480392156862745f, 0.9792156862745098f, 0.6679607843137255f}, - {0.9470588235294117f, 0.9788235294117648f, 0.6664313725490196f}, - {0.946078431372549f, 0.9784313725490196f, 0.6649019607843137f}, - {0.9450980392156862f, 0.9780392156862745f, 0.6633725490196078f}, - {0.9441176470588235f, 0.9776470588235294f, 0.661843137254902f}, - {0.9431372549019608f, 0.9772549019607844f, 0.6603137254901961f}, - {0.942156862745098f, 0.9768627450980393f, 0.6587843137254902f}, - {0.9411764705882353f, 0.9764705882352941f, 0.6572549019607843f}, - {0.9401960784313725f, 0.976078431372549f, 0.6557254901960784f}, - {0.9392156862745098f, 0.9756862745098039f, 0.6541960784313725f}, - {0.9382352941176471f, 0.9752941176470589f, 0.6526666666666666f}, - {0.9372549019607843f, 0.9749019607843138f, 0.6511372549019607f}, - {0.9362745098039216f, 0.9745098039215686f, 0.649607843137255f}, - {0.9352941176470588f, 0.9741176470588235f, 0.6480784313725491f}, - {0.9343137254901961f, 0.9737254901960785f, 0.6465490196078432f}, - {0.9333333333333333f, 0.9733333333333334f, 0.6450196078431373f}, - {0.9323529411764706f, 0.9729411764705882f, 0.6434901960784314f}, - {0.9313725490196079f, 0.9725490196078431f, 0.6419607843137255f}, - {0.9303921568627451f, 0.972156862745098f, 0.6404313725490196f}, - {0.9294117647058824f, 0.971764705882353f, 0.6389019607843137f}, - {0.9284313725490196f, 0.9713725490196079f, 0.6373725490196078f}, - {0.9274509803921569f, 0.9709803921568627f, 0.6358431372549019f}, - {0.9264705882352942f, 0.9705882352941176f, 0.634313725490196f}, - {0.9254901960784314f, 0.9701960784313726f, 0.6327843137254902f}, - {0.9245098039215687f, 0.9698039215686275f, 0.6312549019607843f}, - {0.9235294117647059f, 0.9694117647058824f, 0.6297254901960785f}, - {0.9225490196078432f, 0.9690196078431372f, 0.6281960784313725f}, - {0.9215686274509804f, 0.9686274509803922f, 0.6266666666666667f}, - {0.9205882352941177f, 0.9682352941176471f, 0.6251372549019608f}, - {0.919607843137255f, 0.967843137254902f, 0.6236078431372549f}, - {0.9186274509803922f, 0.9674509803921569f, 0.622078431372549f}, - {0.9176470588235294f, 0.9670588235294117f, 0.6205490196078431f}, - {0.9166666666666666f, 0.9666666666666667f, 0.6190196078431373f}, - {0.915686274509804f, 0.9662745098039216f, 0.6174901960784314f}, - {0.9147058823529413f, 0.9658823529411765f, 0.6159607843137255f}, - {0.9137254901960784f, 0.9654901960784315f, 0.6144313725490196f}, - {0.9127450980392157f, 0.9650980392156863f, 0.6129019607843137f}, - {0.9117647058823529f, 0.9647058823529412f, 0.6113725490196078f}, - {0.9107843137254902f, 0.9643137254901961f, 0.609843137254902f}, - {0.9098039215686274f, 0.963921568627451f, 0.608313725490196f}, - {0.9088235294117647f, 0.963529411764706f, 0.6067843137254902f}, - {0.907843137254902f, 0.9631372549019608f, 0.6052549019607842f}, - {0.9068627450980392f, 0.9627450980392157f, 0.6037254901960785f}, - {0.9058823529411765f, 0.9623529411764706f, 0.6021960784313726f}, - {0.9049019607843137f, 0.9619607843137256f, 0.6006666666666667f}, - {0.903921568627451f, 0.9615686274509804f, 0.5991372549019608f}, - {0.9029411764705882f, 0.9611764705882353f, 0.5976078431372549f}, - {0.9019607843137255f, 0.9607843137254902f, 0.596078431372549f}, - {0.8996470588235295f, 0.959843137254902f, 0.5965490196078431f}, - {0.8973333333333333f, 0.9589019607843138f, 0.5970196078431372f}, - {0.8950196078431373f, 0.9579607843137256f, 0.5974901960784313f}, - {0.8927058823529412f, 0.9570196078431373f, 0.5979607843137255f}, - {0.8903921568627451f, 0.956078431372549f, 0.5984313725490196f}, - {0.888078431372549f, 0.9551372549019608f, 0.5989019607843137f}, - {0.8857647058823529f, 0.9541960784313726f, 0.5993725490196078f}, - {0.8834509803921569f, 0.9532549019607843f, 0.5998431372549019f}, - {0.8811372549019608f, 0.9523137254901961f, 0.600313725490196f}, - {0.8788235294117647f, 0.9513725490196079f, 0.6007843137254902f}, - {0.8765098039215686f, 0.9504313725490197f, 0.6012549019607843f}, - {0.8741960784313726f, 0.9494901960784314f, 0.6017254901960785f}, - {0.8718823529411764f, 0.9485490196078432f, 0.6021960784313726f}, - {0.8695686274509804f, 0.9476078431372549f, 0.6026666666666667f}, - {0.8672549019607844f, 0.9466666666666667f, 0.6031372549019608f}, - {0.8649411764705882f, 0.9457254901960784f, 0.6036078431372549f}, - {0.8626274509803922f, 0.9447843137254902f, 0.604078431372549f}, - {0.8603137254901961f, 0.943843137254902f, 0.6045490196078431f}, - {0.858f, 0.9429019607843138f, 0.6050196078431372f}, - {0.855686274509804f, 0.9419607843137255f, 0.6054901960784314f}, - {0.8533725490196078f, 0.9410196078431373f, 0.6059607843137255f}, - {0.8510588235294118f, 0.9400784313725491f, 0.6064313725490196f}, - {0.8487450980392157f, 0.9391372549019608f, 0.6069019607843137f}, - {0.8464313725490196f, 0.9381960784313725f, 0.6073725490196078f}, - {0.8441176470588235f, 0.9372549019607843f, 0.6078431372549019f}, - {0.8418039215686275f, 0.9363137254901961f, 0.608313725490196f}, - {0.8394901960784313f, 0.9353725490196079f, 0.6087843137254901f}, - {0.8371764705882353f, 0.9344313725490196f, 0.6092549019607842f}, - {0.8348627450980393f, 0.9334901960784314f, 0.6097254901960784f}, - {0.8325490196078431f, 0.9325490196078432f, 0.6101960784313725f}, - {0.8302352941176471f, 0.931607843137255f, 0.6106666666666667f}, - {0.827921568627451f, 0.9306666666666666f, 0.6111372549019608f}, - {0.8256078431372549f, 0.9297254901960784f, 0.6116078431372549f}, - {0.8232941176470588f, 0.9287843137254902f, 0.612078431372549f}, - {0.8209803921568627f, 0.927843137254902f, 0.6125490196078431f}, - {0.8186666666666667f, 0.9269019607843137f, 0.6130196078431372f}, - {0.8163529411764706f, 0.9259607843137255f, 0.6134901960784314f}, - {0.8140392156862745f, 0.9250196078431373f, 0.6139607843137255f}, - {0.8117254901960784f, 0.9240784313725491f, 0.6144313725490196f}, - {0.8094117647058824f, 0.9231372549019609f, 0.6149019607843137f}, - {0.8070980392156862f, 0.9221960784313725f, 0.6153725490196078f}, - {0.8047843137254902f, 0.9212549019607843f, 0.6158431372549019f}, - {0.8024705882352942f, 0.9203137254901961f, 0.616313725490196f}, - {0.800156862745098f, 0.9193725490196079f, 0.6167843137254901f}, - {0.797843137254902f, 0.9184313725490196f, 0.6172549019607843f}, - {0.7955294117647058f, 0.9174901960784314f, 0.6177254901960784f}, - {0.7932156862745098f, 0.9165490196078432f, 0.6181960784313725f}, - {0.7909019607843137f, 0.915607843137255f, 0.6186666666666666f}, - {0.7885882352941176f, 0.9146666666666667f, 0.6191372549019607f}, - {0.7862745098039216f, 0.9137254901960785f, 0.6196078431372549f}, - {0.7839607843137255f, 0.9127843137254902f, 0.620078431372549f}, - {0.7816470588235294f, 0.911843137254902f, 0.6205490196078431f}, - {0.7793333333333333f, 0.9109019607843137f, 0.6210196078431373f}, - {0.7770196078431373f, 0.9099607843137255f, 0.6214901960784314f}, - {0.7747058823529411f, 0.9090196078431373f, 0.6219607843137255f}, - {0.7723921568627451f, 0.9080784313725491f, 0.6224313725490196f}, - {0.770078431372549f, 0.9071372549019608f, 0.6229019607843137f}, - {0.7677647058823529f, 0.9061960784313726f, 0.6233725490196078f}, - {0.7654509803921569f, 0.9052549019607844f, 0.6238431372549019f}, - {0.7631372549019608f, 0.9043137254901961f, 0.624313725490196f}, - {0.7608235294117647f, 0.9033725490196078f, 0.6247843137254901f}, - {0.7585098039215686f, 0.9024313725490196f, 0.6252549019607843f}, - {0.7561960784313725f, 0.9014901960784314f, 0.6257254901960784f}, - {0.7538823529411764f, 0.9005490196078432f, 0.6261960784313725f}, - {0.7515686274509803f, 0.899607843137255f, 0.6266666666666666f}, - {0.7492549019607843f, 0.8986666666666667f, 0.6271372549019607f}, - {0.7469411764705882f, 0.8977254901960785f, 0.6276078431372548f}, - {0.7446274509803921f, 0.8967843137254903f, 0.6280784313725489f}, - {0.742313725490196f, 0.8958431372549019f, 0.6285490196078432f}, - {0.74f, 0.8949019607843137f, 0.6290196078431372f}, - {0.7376862745098038f, 0.8939607843137255f, 0.6294901960784314f}, - {0.7353725490196078f, 0.8930196078431373f, 0.6299607843137255f}, - {0.7330588235294118f, 0.892078431372549f, 0.6304313725490196f}, - {0.7307450980392156f, 0.8911372549019608f, 0.6309019607843137f}, - {0.7284313725490196f, 0.8901960784313726f, 0.6313725490196078f}, - {0.7261176470588235f, 0.8892549019607844f, 0.6318431372549019f}, - {0.7238039215686274f, 0.888313725490196f, 0.632313725490196f}, - {0.7214901960784313f, 0.8873725490196078f, 0.6327843137254902f}, - {0.7191764705882353f, 0.8864313725490196f, 0.6332549019607843f}, - {0.7168627450980392f, 0.8854901960784314f, 0.6337254901960784f}, - {0.7145490196078431f, 0.8845490196078432f, 0.6341960784313725f}, - {0.7122352941176471f, 0.8836078431372549f, 0.6346666666666666f}, - {0.7099215686274509f, 0.8826666666666667f, 0.6351372549019607f}, - {0.7076078431372549f, 0.8817254901960785f, 0.6356078431372548f}, - {0.7052941176470587f, 0.8807843137254903f, 0.6360784313725489f}, - {0.7029803921568627f, 0.879843137254902f, 0.636549019607843f}, - {0.7006666666666667f, 0.8789019607843138f, 0.6370196078431372f}, - {0.6983529411764706f, 0.8779607843137255f, 0.6374901960784313f}, - {0.6960392156862745f, 0.8770196078431373f, 0.6379607843137254f}, - {0.6937254901960784f, 0.876078431372549f, 0.6384313725490196f}, - {0.6914117647058823f, 0.8751372549019608f, 0.6389019607843137f}, - {0.6890980392156862f, 0.8741960784313726f, 0.6393725490196078f}, - {0.6867843137254901f, 0.8732549019607844f, 0.6398431372549019f}, - {0.684470588235294f, 0.8723137254901961f, 0.640313725490196f}, - {0.682156862745098f, 0.8713725490196078f, 0.6407843137254902f}, - {0.6798431372549019f, 0.8704313725490196f, 0.6412549019607843f}, - {0.6775294117647058f, 0.8694901960784314f, 0.6417254901960784f}, - {0.6752156862745098f, 0.8685490196078431f, 0.6421960784313725f}, - {0.6729019607843136f, 0.8676078431372549f, 0.6426666666666666f}, - {0.6705882352941176f, 0.8666666666666667f, 0.6431372549019607f}, - {0.6678823529411764f, 0.8656078431372549f, 0.6431764705882352f}, - {0.6651764705882353f, 0.8645490196078431f, 0.6432156862745098f}, - {0.662470588235294f, 0.8634901960784314f, 0.6432549019607843f}, - {0.6597647058823529f, 0.8624313725490196f, 0.6432941176470588f}, - {0.6570588235294117f, 0.8613725490196079f, 0.6433333333333333f}, - {0.6543529411764706f, 0.8603137254901961f, 0.6433725490196078f}, - {0.6516470588235294f, 0.8592549019607844f, 0.6434117647058823f}, - {0.6489411764705882f, 0.8581960784313726f, 0.6434509803921568f}, - {0.646235294117647f, 0.8571372549019608f, 0.6434901960784313f}, - {0.6435294117647058f, 0.856078431372549f, 0.6435294117647058f}, - {0.6408235294117647f, 0.8550196078431372f, 0.6435686274509803f}, - {0.6381176470588235f, 0.8539607843137255f, 0.6436078431372548f}, - {0.6354117647058823f, 0.8529019607843138f, 0.6436470588235293f}, - {0.6327058823529411f, 0.851843137254902f, 0.6436862745098039f}, - {0.63f, 0.8507843137254902f, 0.6437254901960784f}, - {0.6272941176470588f, 0.8497254901960785f, 0.6437647058823529f}, - {0.6245882352941176f, 0.8486666666666667f, 0.6438039215686274f}, - {0.6218823529411764f, 0.8476078431372549f, 0.6438431372549019f}, - {0.6191764705882352f, 0.8465490196078431f, 0.6438823529411765f}, - {0.6164705882352941f, 0.8454901960784313f, 0.643921568627451f}, - {0.6137647058823529f, 0.8444313725490196f, 0.6439607843137255f}, - {0.6110588235294118f, 0.8433725490196079f, 0.6439999999999999f}, - {0.6083529411764705f, 0.8423137254901961f, 0.6440392156862744f}, - {0.6056470588235294f, 0.8412549019607843f, 0.6440784313725489f}, - {0.6029411764705882f, 0.8401960784313726f, 0.6441176470588235f}, - {0.600235294117647f, 0.8391372549019608f, 0.644156862745098f}, - {0.5975294117647059f, 0.838078431372549f, 0.6441960784313725f}, - {0.5948235294117646f, 0.8370196078431372f, 0.644235294117647f}, - {0.5921176470588235f, 0.8359607843137254f, 0.6442745098039215f}, - {0.5894117647058823f, 0.8349019607843138f, 0.644313725490196f}, - {0.5867058823529412f, 0.833843137254902f, 0.6443529411764706f}, - {0.584f, 0.8327843137254902f, 0.6443921568627451f}, - {0.5812941176470587f, 0.8317254901960784f, 0.6444313725490196f}, - {0.5785882352941176f, 0.8306666666666667f, 0.6444705882352941f}, - {0.5758823529411764f, 0.8296078431372549f, 0.6445098039215686f}, - {0.5731764705882353f, 0.8285490196078431f, 0.644549019607843f}, - {0.5704705882352941f, 0.8274901960784313f, 0.6445882352941176f}, - {0.567764705882353f, 0.8264313725490197f, 0.6446274509803921f}, - {0.5650588235294117f, 0.8253725490196079f, 0.6446666666666666f}, - {0.5623529411764706f, 0.8243137254901961f, 0.6447058823529411f}, - {0.5596470588235294f, 0.8232549019607843f, 0.6447450980392156f}, - {0.5569411764705882f, 0.8221960784313725f, 0.6447843137254902f}, - {0.554235294117647f, 0.8211372549019608f, 0.6448235294117647f}, - {0.5515294117647058f, 0.820078431372549f, 0.6448627450980392f}, - {0.5488235294117647f, 0.8190196078431372f, 0.6449019607843137f}, - {0.5461176470588235f, 0.8179607843137255f, 0.6449411764705882f}, - {0.5434117647058824f, 0.8169019607843138f, 0.6449803921568628f}, - {0.5407058823529411f, 0.815843137254902f, 0.6450196078431373f}, - {0.538f, 0.8147843137254902f, 0.6450588235294118f}, - {0.5352941176470588f, 0.8137254901960784f, 0.6450980392156862f}, - {0.5325882352941176f, 0.8126666666666666f, 0.6451372549019607f}, - {0.5298823529411765f, 0.8116078431372549f, 0.6451764705882352f}, - {0.5271764705882352f, 0.8105490196078431f, 0.6452156862745098f}, - {0.5244705882352941f, 0.8094901960784313f, 0.6452549019607843f}, - {0.5217647058823529f, 0.8084313725490196f, 0.6452941176470588f}, - {0.5190588235294118f, 0.8073725490196079f, 0.6453333333333333f}, - {0.5163529411764706f, 0.8063137254901961f, 0.6453725490196078f}, - {0.5136470588235293f, 0.8052549019607843f, 0.6454117647058824f}, - {0.5109411764705882f, 0.8041960784313725f, 0.6454509803921569f}, - {0.5082352941176471f, 0.8031372549019608f, 0.6454901960784314f}, - {0.5055294117647059f, 0.802078431372549f, 0.6455294117647059f}, - {0.5028235294117647f, 0.8010196078431373f, 0.6455686274509804f}, - {0.5001176470588236f, 0.7999607843137255f, 0.6456078431372549f}, - {0.49741176470588233f, 0.7989019607843137f, 0.6456470588235295f}, - {0.49470588235294116f, 0.797843137254902f, 0.6456862745098039f}, - {0.492f, 0.7967843137254902f, 0.6457254901960784f}, - {0.4892941176470588f, 0.7957254901960784f, 0.6457647058823529f}, - {0.48658823529411765f, 0.7946666666666666f, 0.6458039215686274f}, - {0.48388235294117643f, 0.7936078431372549f, 0.6458431372549019f}, - {0.4811764705882353f, 0.7925490196078431f, 0.6458823529411765f}, - {0.47847058823529415f, 0.7914901960784314f, 0.645921568627451f}, - {0.475764705882353f, 0.7904313725490196f, 0.6459607843137255f}, - {0.47305882352941175f, 0.7893725490196078f, 0.646f}, - {0.47035294117647064f, 0.7883137254901961f, 0.6460392156862745f}, - {0.4676470588235294f, 0.7872549019607843f, 0.6460784313725491f}, - {0.46494117647058825f, 0.7861960784313725f, 0.6461176470588236f}, - {0.4622352941176471f, 0.7851372549019607f, 0.6461568627450981f}, - {0.45952941176470585f, 0.784078431372549f, 0.6461960784313726f}, - {0.45682352941176474f, 0.7830196078431373f, 0.646235294117647f}, - {0.4541176470588235f, 0.7819607843137255f, 0.6462745098039215f}, - {0.45141176470588235f, 0.7809019607843137f, 0.6463137254901961f}, - {0.4487058823529412f, 0.779843137254902f, 0.6463529411764706f}, - {0.446f, 0.7787843137254902f, 0.6463921568627451f}, - {0.44329411764705884f, 0.7777254901960784f, 0.6464313725490196f}, - {0.4405882352941176f, 0.7766666666666666f, 0.6464705882352941f}, - {0.4378823529411765f, 0.7756078431372548f, 0.6465098039215686f}, - {0.43517647058823533f, 0.7745490196078431f, 0.6465490196078432f}, - {0.43247058823529416f, 0.7734901960784314f, 0.6465882352941177f}, - {0.42976470588235294f, 0.7724313725490196f, 0.6466274509803922f}, - {0.4270588235294118f, 0.7713725490196078f, 0.6466666666666667f}, - {0.4243529411764706f, 0.770313725490196f, 0.6467058823529412f}, - {0.42164705882352943f, 0.7692549019607843f, 0.6467450980392158f}, - {0.41894117647058826f, 0.7681960784313725f, 0.6467843137254902f}, - {0.4162352941176471f, 0.7671372549019607f, 0.6468235294117647f}, - {0.4135294117647059f, 0.7660784313725489f, 0.6468627450980392f}, - {0.4108235294117647f, 0.7650196078431373f, 0.6469019607843137f}, - {0.40811764705882353f, 0.7639607843137255f, 0.6469411764705882f}, - {0.40541176470588236f, 0.7629019607843137f, 0.6469803921568628f}, - {0.4027058823529412f, 0.7618431372549019f, 0.6470196078431373f}, - {0.4f, 0.7607843137254902f, 0.6470588235294118f}, - {0.3979607843137255f, 0.7585098039215686f, 0.648f}, - {0.395921568627451f, 0.756235294117647f, 0.6489411764705882f}, - {0.3938823529411765f, 0.7539607843137255f, 0.6498823529411765f}, - {0.391843137254902f, 0.7516862745098039f, 0.6508235294117647f}, - {0.3898039215686275f, 0.7494117647058823f, 0.651764705882353f}, - {0.38776470588235296f, 0.7471372549019607f, 0.6527058823529412f}, - {0.38572549019607844f, 0.7448627450980392f, 0.6536470588235295f}, - {0.3836862745098039f, 0.7425882352941177f, 0.6545882352941177f}, - {0.38164705882352945f, 0.740313725490196f, 0.6555294117647059f}, - {0.37960784313725493f, 0.7380392156862745f, 0.6564705882352941f}, - {0.3775686274509804f, 0.7357647058823529f, 0.6574117647058824f}, - {0.3755294117647059f, 0.7334901960784314f, 0.6583529411764706f}, - {0.37349019607843137f, 0.7312156862745097f, 0.6592941176470588f}, - {0.3714509803921569f, 0.7289411764705882f, 0.6602352941176471f}, - {0.3694117647058824f, 0.7266666666666667f, 0.6611764705882354f}, - {0.36737254901960786f, 0.724392156862745f, 0.6621176470588236f}, - {0.36533333333333334f, 0.7221176470588235f, 0.6630588235294118f}, - {0.3632941176470588f, 0.7198431372549019f, 0.664f}, - {0.36125490196078436f, 0.7175686274509804f, 0.6649411764705883f}, - {0.35921568627450984f, 0.7152941176470587f, 0.6658823529411765f}, - {0.3571764705882353f, 0.7130196078431372f, 0.6668235294117647f}, - {0.3551372549019608f, 0.7107450980392157f, 0.6677647058823529f}, - {0.3530980392156863f, 0.7084705882352941f, 0.6687058823529413f}, - {0.35105882352941176f, 0.7061960784313726f, 0.6696470588235295f}, - {0.34901960784313724f, 0.7039215686274509f, 0.6705882352941177f}, - {0.34698039215686277f, 0.7016470588235294f, 0.6715294117647059f}, - {0.34494117647058825f, 0.6993725490196078f, 0.6724705882352942f}, - {0.34290196078431373f, 0.6970980392156862f, 0.6734117647058824f}, - {0.3408627450980392f, 0.6948235294117646f, 0.6743529411764706f}, - {0.33882352941176475f, 0.6925490196078431f, 0.6752941176470588f}, - {0.3367843137254902f, 0.6902745098039216f, 0.676235294117647f}, - {0.3347450980392157f, 0.688f, 0.6771764705882354f}, - {0.3327058823529412f, 0.6857254901960784f, 0.6781176470588236f}, - {0.33066666666666666f, 0.6834509803921568f, 0.6790588235294118f}, - {0.32862745098039214f, 0.6811764705882353f, 0.68f}, - {0.3265882352941177f, 0.6789019607843138f, 0.6809411764705883f}, - {0.32454901960784316f, 0.6766274509803921f, 0.6818823529411765f}, - {0.32250980392156864f, 0.6743529411764706f, 0.6828235294117647f}, - {0.3204705882352941f, 0.672078431372549f, 0.6837647058823529f}, - {0.3184313725490196f, 0.6698039215686274f, 0.6847058823529412f}, - {0.31639215686274513f, 0.6675294117647058f, 0.6856470588235295f}, - {0.3143529411764706f, 0.6652549019607843f, 0.6865882352941177f}, - {0.3123137254901961f, 0.6629803921568628f, 0.6875294117647059f}, - {0.31027450980392157f, 0.6607058823529411f, 0.6884705882352942f}, - {0.30823529411764705f, 0.6584313725490196f, 0.6894117647058824f}, - {0.30619607843137253f, 0.656156862745098f, 0.6903529411764706f}, - {0.30415686274509807f, 0.6538823529411765f, 0.6912941176470588f}, - {0.30211764705882355f, 0.6516078431372548f, 0.6922352941176471f}, - {0.300078431372549f, 0.6493333333333333f, 0.6931764705882353f}, - {0.2980392156862745f, 0.6470588235294117f, 0.6941176470588235f}, - {0.29600000000000004f, 0.6447843137254902f, 0.6950588235294118f}, - {0.2939607843137255f, 0.6425098039215686f, 0.6960000000000001f}, - {0.291921568627451f, 0.640235294117647f, 0.6969411764705883f}, - {0.2898823529411765f, 0.6379607843137255f, 0.6978823529411765f}, - {0.28784313725490196f, 0.635686274509804f, 0.6988235294117647f}, - {0.28580392156862744f, 0.6334117647058823f, 0.699764705882353f}, - {0.2837647058823529f, 0.6311372549019607f, 0.7007058823529412f}, - {0.2817254901960784f, 0.6288627450980392f, 0.7016470588235294f}, - {0.27968627450980393f, 0.6265882352941177f, 0.7025882352941176f}, - {0.2776470588235294f, 0.624313725490196f, 0.703529411764706f}, - {0.2756078431372549f, 0.6220392156862745f, 0.7044705882352942f}, - {0.27356862745098043f, 0.619764705882353f, 0.7054117647058824f}, - {0.2715294117647059f, 0.6174901960784314f, 0.7063529411764706f}, - {0.2694901960784314f, 0.6152156862745097f, 0.7072941176470589f}, - {0.26745098039215687f, 0.6129411764705882f, 0.7082352941176471f}, - {0.26541176470588235f, 0.6106666666666667f, 0.7091764705882353f}, - {0.2633725490196078f, 0.6083921568627451f, 0.7101176470588235f}, - {0.2613333333333333f, 0.6061176470588235f, 0.7110588235294117f}, - {0.2592941176470588f, 0.6038431372549019f, 0.7120000000000001f}, - {0.25725490196078427f, 0.6015686274509804f, 0.7129411764705883f}, - {0.25521568627450986f, 0.5992941176470589f, 0.7138823529411765f}, - {0.25317647058823534f, 0.5970196078431372f, 0.7148235294117647f}, - {0.2511372549019608f, 0.5947450980392157f, 0.715764705882353f}, - {0.2490980392156863f, 0.5924705882352941f, 0.7167058823529412f}, - {0.24705882352941178f, 0.5901960784313726f, 0.7176470588235294f}, - {0.24501960784313725f, 0.587921568627451f, 0.7185882352941176f}, - {0.24298039215686273f, 0.5856470588235294f, 0.719529411764706f}, - {0.24094117647058824f, 0.5833725490196078f, 0.7204705882352942f}, - {0.23890196078431372f, 0.5810980392156863f, 0.7214117647058824f}, - {0.2368627450980392f, 0.5788235294117647f, 0.7223529411764706f}, - {0.2348235294117647f, 0.5765490196078431f, 0.7232941176470589f}, - {0.2327843137254902f, 0.5742745098039216f, 0.7242352941176471f}, - {0.23074509803921567f, 0.5720000000000001f, 0.7251764705882353f}, - {0.22870588235294118f, 0.5697254901960784f, 0.7261176470588235f}, - {0.22666666666666666f, 0.5674509803921568f, 0.7270588235294118f}, - {0.22462745098039216f, 0.5651764705882353f, 0.728f}, - {0.22258823529411764f, 0.5629019607843138f, 0.7289411764705882f}, - {0.22054901960784315f, 0.5606274509803921f, 0.7298823529411765f}, - {0.21850980392156863f, 0.5583529411764706f, 0.7308235294117648f}, - {0.2164705882352941f, 0.5560784313725491f, 0.731764705882353f}, - {0.21443137254901962f, 0.5538039215686275f, 0.7327058823529412f}, - {0.2123921568627451f, 0.5515294117647059f, 0.7336470588235294f}, - {0.21035294117647058f, 0.5492549019607843f, 0.7345882352941177f}, - {0.20831372549019608f, 0.5469803921568628f, 0.7355294117647059f}, - {0.20627450980392156f, 0.5447058823529412f, 0.7364705882352942f}, - {0.20423529411764704f, 0.5424313725490196f, 0.7374117647058824f}, - {0.20219607843137252f, 0.5401568627450981f, 0.7383529411764707f}, - {0.20015686274509803f, 0.5378823529411765f, 0.7392941176470589f}, - {0.1981176470588235f, 0.5356078431372548f, 0.7402352941176471f}, - {0.19607843137254902f, 0.5333333333333333f, 0.7411764705882353f}, - {0.19780392156862744f, 0.5310980392156862f, 0.7401176470588235f}, - {0.19952941176470587f, 0.5288627450980392f, 0.7390588235294118f}, - {0.2012549019607843f, 0.5266274509803921f, 0.738f}, - {0.20298039215686275f, 0.5243921568627451f, 0.7369411764705882f}, - {0.20470588235294118f, 0.522156862745098f, 0.7358823529411765f}, - {0.2064313725490196f, 0.519921568627451f, 0.7348235294117648f}, - {0.20815686274509804f, 0.5176862745098039f, 0.733764705882353f}, - {0.20988235294117646f, 0.5154509803921569f, 0.7327058823529412f}, - {0.2116078431372549f, 0.5132156862745098f, 0.7316470588235294f}, - {0.21333333333333332f, 0.5109803921568628f, 0.7305882352941176f}, - {0.21505882352941175f, 0.5087450980392156f, 0.7295294117647059f}, - {0.2167843137254902f, 0.5065098039215686f, 0.7284705882352941f}, - {0.21850980392156863f, 0.5042745098039215f, 0.7274117647058824f}, - {0.22023529411764706f, 0.5020392156862745f, 0.7263529411764706f}, - {0.22196078431372548f, 0.49980392156862746f, 0.7252941176470589f}, - {0.2236862745098039f, 0.4975686274509804f, 0.7242352941176471f}, - {0.22541176470588237f, 0.49533333333333335f, 0.7231764705882353f}, - {0.2271372549019608f, 0.4930980392156863f, 0.7221176470588235f}, - {0.22886274509803922f, 0.49086274509803923f, 0.7210588235294118f}, - {0.23058823529411765f, 0.4886274509803922f, 0.72f}, - {0.23231372549019608f, 0.4863921568627451f, 0.7189411764705882f}, - {0.2340392156862745f, 0.48415686274509806f, 0.7178823529411765f}, - {0.23576470588235293f, 0.481921568627451f, 0.7168235294117647f}, - {0.23749019607843136f, 0.47968627450980394f, 0.715764705882353f}, - {0.23921568627450981f, 0.47745098039215683f, 0.7147058823529412f}, - {0.24094117647058824f, 0.47521568627450983f, 0.7136470588235294f}, - {0.24266666666666667f, 0.4729803921568628f, 0.7125882352941176f}, - {0.2443921568627451f, 0.4707450980392157f, 0.7115294117647059f}, - {0.24611764705882352f, 0.4685098039215686f, 0.7104705882352941f}, - {0.24784313725490195f, 0.4662745098039216f, 0.7094117647058824f}, - {0.2495686274509804f, 0.4640392156862745f, 0.7083529411764706f}, - {0.25129411764705883f, 0.4618039215686275f, 0.7072941176470589f}, - {0.25301960784313726f, 0.45956862745098037f, 0.7062352941176471f}, - {0.2547450980392157f, 0.4573333333333333f, 0.7051764705882353f}, - {0.2564705882352941f, 0.45509803921568626f, 0.7041176470588235f}, - {0.25819607843137254f, 0.45286274509803925f, 0.7030588235294117f}, - {0.25992156862745097f, 0.45062745098039214f, 0.702f}, - {0.2616470588235294f, 0.44839215686274514f, 0.7009411764705883f}, - {0.2633725490196078f, 0.446156862745098f, 0.6998823529411765f}, - {0.2650980392156863f, 0.44392156862745097f, 0.6988235294117647f}, - {0.2668235294117647f, 0.4416862745098039f, 0.697764705882353f}, - {0.26854901960784316f, 0.43945098039215685f, 0.6967058823529412f}, - {0.27027450980392154f, 0.4372156862745098f, 0.6956470588235294f}, - {0.272f, 0.4349803921568628f, 0.6945882352941176f}, - {0.27372549019607845f, 0.4327450980392157f, 0.6935294117647058f}, - {0.2754509803921569f, 0.4305098039215686f, 0.6924705882352942f}, - {0.2771764705882353f, 0.42827450980392157f, 0.6914117647058824f}, - {0.27890196078431373f, 0.4260392156862745f, 0.6903529411764706f}, - {0.28062745098039216f, 0.42380392156862745f, 0.6892941176470588f}, - {0.2823529411764706f, 0.4215686274509804f, 0.6882352941176471f}, - {0.284078431372549f, 0.41933333333333334f, 0.6871764705882353f}, - {0.28580392156862744f, 0.4170980392156863f, 0.6861176470588235f}, - {0.28752941176470587f, 0.4148627450980392f, 0.6850588235294117f}, - {0.2892549019607843f, 0.41262745098039216f, 0.6839999999999999f}, - {0.2909803921568628f, 0.4103921568627451f, 0.6829411764705883f}, - {0.29270588235294115f, 0.40815686274509805f, 0.6818823529411765f}, - {0.29443137254901963f, 0.405921568627451f, 0.6808235294117647f}, - {0.29615686274509806f, 0.40368627450980393f, 0.6797647058823529f}, - {0.2978823529411765f, 0.4014509803921569f, 0.6787058823529412f}, - {0.2996078431372549f, 0.3992156862745098f, 0.6776470588235294f}, - {0.30133333333333334f, 0.39698039215686276f, 0.6765882352941176f}, - {0.30305882352941177f, 0.3947450980392157f, 0.6755294117647059f}, - {0.3047843137254902f, 0.39250980392156865f, 0.6744705882352942f}, - {0.3065098039215686f, 0.3902745098039216f, 0.6734117647058824f}, - {0.30823529411764705f, 0.38803921568627453f, 0.6723529411764706f}, - {0.3099607843137255f, 0.3858039215686275f, 0.6712941176470588f}, - {0.3116862745098039f, 0.3835686274509804f, 0.670235294117647f}, - {0.3134117647058824f, 0.3813333333333333f, 0.6691764705882353f}, - {0.3151372549019608f, 0.3790980392156863f, 0.6681176470588235f}, - {0.31686274509803924f, 0.3768627450980392f, 0.6670588235294117f}, - {0.3185882352941176f, 0.3746274509803922f, 0.666f}, - {0.3203137254901961f, 0.3723921568627451f, 0.6649411764705883f}, - {0.32203921568627447f, 0.37015686274509807f, 0.6638823529411765f}, - {0.32376470588235295f, 0.367921568627451f, 0.6628235294117647f}, - {0.3254901960784314f, 0.36568627450980395f, 0.6617647058823529f}, - {0.3272156862745098f, 0.3634509803921569f, 0.6607058823529411f}, - {0.32894117647058824f, 0.36121568627450984f, 0.6596470588235294f}, - {0.33066666666666666f, 0.3589803921568628f, 0.6585882352941176f}, - {0.3323921568627451f, 0.3567450980392157f, 0.6575294117647059f}, - {0.3341176470588235f, 0.3545098039215686f, 0.6564705882352941f}, - {0.335843137254902f, 0.3522745098039216f, 0.6554117647058824f}, - {0.3375686274509804f, 0.3500392156862745f, 0.6543529411764706f}, - {0.33929411764705886f, 0.3478039215686275f, 0.6532941176470588f}, - {0.34101960784313723f, 0.3455686274509804f, 0.652235294117647f}, - {0.3427450980392157f, 0.3433333333333334f, 0.6511764705882352f}, - {0.3444705882352941f, 0.3410980392156863f, 0.6501176470588235f}, - {0.34619607843137257f, 0.33886274509803926f, 0.6490588235294117f}, - {0.34792156862745094f, 0.3366274509803922f, 0.648f}, - {0.3496470588235294f, 0.33439215686274515f, 0.6469411764705882f}, - {0.35137254901960785f, 0.33215686274509804f, 0.6458823529411765f}, - {0.3530980392156863f, 0.32992156862745103f, 0.6448235294117647f}, - {0.3548235294117647f, 0.3276862745098039f, 0.6437647058823529f}, - {0.35654901960784313f, 0.3254509803921569f, 0.6427058823529411f}, - {0.3582745098039216f, 0.3232156862745098f, 0.6416470588235293f}, - {0.36f, 0.3209803921568628f, 0.6405882352941176f}, - {0.36172549019607847f, 0.3187450980392157f, 0.6395294117647059f}, - {0.36345098039215684f, 0.3165098039215687f, 0.6384705882352941f}, - {0.3651764705882353f, 0.3142745098039216f, 0.6374117647058823f}, - {0.36690196078431375f, 0.3120392156862745f, 0.6363529411764706f}, - {0.3686274509803922f, 0.30980392156862746f, 0.6352941176470588f}}; - -/*(Table[Blend[ - Map[(RGBColor @@ # &), ({{255, 245, 240}, {254, 224, 210}, {252, - 187, 161}, {252, 146, 114}, {251, 106, 74}, {239, 59, - 44}, {203, 24, 29}, {165, 15, 21}, {103, 0, 13}}/255), {1}], - x/1000], {x, 0, 1000, 1.}] /. RGBColor -> List) >> /tmp/1*/ - -float palette_sequential_singlehue_red[1001][3]={{1.f, 0.9607843137254902f, 0.9411764705882353f}, - {0.9999686274509804f, 0.9601254901960785f, 0.9402352941176471f}, - {0.9999372549019608f, 0.9594666666666667f, 0.9392941176470588f}, - {0.9999058823529412f, 0.958807843137255f, 0.9383529411764706f}, - {0.9998745098039216f, 0.9581490196078432f, 0.9374117647058824f}, - {0.9998431372549019f, 0.9574901960784314f, 0.936470588235294f}, - {0.9998117647058824f, 0.9568313725490196f, 0.9355294117647058f}, - {0.9997803921568628f, 0.9561725490196079f, 0.9345882352941176f}, - {0.9997490196078431f, 0.9555137254901961f, 0.9336470588235294f}, - {0.9997176470588235f, 0.9548549019607844f, 0.9327058823529412f}, - {0.999686274509804f, 0.9541960784313726f, 0.9317647058823529f}, - {0.9996549019607843f, 0.9535372549019608f, 0.9308235294117647f}, - {0.9996235294117647f, 0.952878431372549f, 0.9298823529411765f}, - {0.999592156862745f, 0.9522196078431373f, 0.9289411764705883f}, - {0.9995607843137255f, 0.9515607843137255f, 0.9279999999999999f}, - {0.9995294117647059f, 0.9509019607843138f, 0.9270588235294117f}, - {0.9994980392156863f, 0.950243137254902f, 0.9261176470588235f}, - {0.9994666666666666f, 0.9495843137254902f, 0.9251764705882353f}, - {0.9994352941176471f, 0.9489254901960784f, 0.924235294117647f}, - {0.9994039215686275f, 0.9482666666666667f, 0.9232941176470588f}, - {0.9993725490196078f, 0.9476078431372549f, 0.9223529411764706f}, - {0.9993411764705883f, 0.9469490196078432f, 0.9214117647058824f}, - {0.9993098039215687f, 0.9462901960784313f, 0.9204705882352942f}, - {0.999278431372549f, 0.9456313725490196f, 0.9195294117647058f}, - {0.9992470588235294f, 0.9449725490196078f, 0.9185882352941176f}, - {0.9992156862745099f, 0.9443137254901961f, 0.9176470588235294f}, - {0.9991843137254902f, 0.9436549019607843f, 0.9167058823529411f}, - {0.9991529411764706f, 0.9429960784313726f, 0.9157647058823529f}, - {0.9991215686274509f, 0.9423372549019609f, 0.9148235294117647f}, - {0.9990901960784314f, 0.941678431372549f, 0.9138823529411765f}, - {0.9990588235294118f, 0.9410196078431373f, 0.9129411764705883f}, - {0.9990274509803921f, 0.9403607843137255f, 0.912f}, - {0.9989960784313725f, 0.9397019607843138f, 0.9110588235294117f}, - {0.998964705882353f, 0.939043137254902f, 0.9101176470588235f}, - {0.9989333333333333f, 0.9383843137254902f, 0.9091764705882353f}, - {0.9989019607843137f, 0.9377254901960784f, 0.908235294117647f}, - {0.9988705882352942f, 0.9370666666666667f, 0.9072941176470588f}, - {0.9988392156862745f, 0.9364078431372549f, 0.9063529411764706f}, - {0.9988078431372549f, 0.9357490196078432f, 0.9054117647058824f}, - {0.9987764705882353f, 0.9350901960784314f, 0.9044705882352941f}, - {0.9987450980392157f, 0.9344313725490196f, 0.9035294117647059f}, - {0.9987137254901961f, 0.9337725490196078f, 0.9025882352941176f}, - {0.9986823529411765f, 0.9331137254901961f, 0.9016470588235294f}, - {0.9986509803921568f, 0.9324549019607843f, 0.9007058823529411f}, - {0.9986196078431373f, 0.9317960784313726f, 0.8997647058823529f}, - {0.9985882352941177f, 0.9311372549019608f, 0.8988235294117647f}, - {0.998556862745098f, 0.930478431372549f, 0.8978823529411765f}, - {0.9985254901960784f, 0.9298196078431372f, 0.8969411764705882f}, - {0.9984941176470589f, 0.9291607843137255f, 0.896f}, - {0.9984627450980392f, 0.9285019607843137f, 0.8950588235294117f}, - {0.9984313725490196f, 0.927843137254902f, 0.8941176470588235f}, - {0.9984f, 0.9271843137254903f, 0.8931764705882352f}, - {0.9983686274509804f, 0.9265254901960784f, 0.892235294117647f}, - {0.9983372549019608f, 0.9258666666666667f, 0.8912941176470588f}, - {0.9983058823529412f, 0.9252078431372549f, 0.8903529411764706f}, - {0.9982745098039216f, 0.9245490196078432f, 0.8894117647058823f}, - {0.998243137254902f, 0.9238901960784314f, 0.8884705882352941f}, - {0.9982117647058824f, 0.9232313725490197f, 0.8875294117647059f}, - {0.9981803921568627f, 0.9225725490196078f, 0.8865882352941177f}, - {0.9981490196078432f, 0.9219137254901961f, 0.8856470588235293f}, - {0.9981176470588236f, 0.9212549019607843f, 0.8847058823529411f}, - {0.9980862745098039f, 0.9205960784313726f, 0.8837647058823529f}, - {0.9980549019607843f, 0.9199372549019608f, 0.8828235294117647f}, - {0.9980235294117648f, 0.919278431372549f, 0.8818823529411765f}, - {0.9979921568627451f, 0.9186196078431372f, 0.8809411764705882f}, - {0.9979607843137255f, 0.9179607843137255f, 0.88f}, - {0.9979294117647058f, 0.9173019607843137f, 0.8790588235294118f}, - {0.9978980392156863f, 0.916643137254902f, 0.8781176470588234f}, - {0.9978666666666667f, 0.9159843137254902f, 0.8771764705882352f}, - {0.997835294117647f, 0.9153254901960785f, 0.876235294117647f}, - {0.9978039215686274f, 0.9146666666666666f, 0.8752941176470588f}, - {0.9977725490196079f, 0.9140078431372549f, 0.8743529411764706f}, - {0.9977411764705882f, 0.9133490196078431f, 0.8734117647058823f}, - {0.9977098039215686f, 0.9126901960784314f, 0.8724705882352941f}, - {0.9976784313725491f, 0.9120313725490197f, 0.8715294117647059f}, - {0.9976470588235294f, 0.9113725490196078f, 0.8705882352941177f}, - {0.9976156862745098f, 0.910713725490196f, 0.8696470588235294f}, - {0.9975843137254902f, 0.9100549019607843f, 0.8687058823529411f}, - {0.9975529411764706f, 0.9093960784313726f, 0.8677647058823529f}, - {0.997521568627451f, 0.9087372549019608f, 0.8668235294117647f}, - {0.9974901960784314f, 0.9080784313725491f, 0.8658823529411764f}, - {0.9974588235294117f, 0.9074196078431372f, 0.8649411764705882f}, - {0.9974274509803922f, 0.9067607843137255f, 0.864f}, - {0.9973960784313726f, 0.9061019607843137f, 0.8630588235294118f}, - {0.9973647058823529f, 0.905443137254902f, 0.8621176470588234f}, - {0.9973333333333333f, 0.9047843137254902f, 0.8611764705882352f}, - {0.9973019607843138f, 0.9041254901960785f, 0.860235294117647f}, - {0.9972705882352941f, 0.9034666666666666f, 0.8592941176470588f}, - {0.9972392156862745f, 0.9028078431372549f, 0.8583529411764705f}, - {0.9972078431372549f, 0.9021490196078431f, 0.8574117647058823f}, - {0.9971764705882353f, 0.9014901960784314f, 0.8564705882352941f}, - {0.9971450980392157f, 0.9008313725490196f, 0.8555294117647059f}, - {0.9971137254901961f, 0.9001725490196079f, 0.8545882352941176f}, - {0.9970823529411765f, 0.899513725490196f, 0.8536470588235294f}, - {0.9970509803921569f, 0.8988549019607843f, 0.8527058823529412f}, - {0.9970196078431373f, 0.8981960784313725f, 0.8517647058823529f}, - {0.9969882352941176f, 0.8975372549019608f, 0.8508235294117646f}, - {0.9969568627450981f, 0.896878431372549f, 0.8498823529411764f}, - {0.9969254901960785f, 0.8962196078431373f, 0.8489411764705882f}, - {0.9968941176470588f, 0.8955607843137254f, 0.848f}, - {0.9968627450980392f, 0.8949019607843137f, 0.8470588235294118f}, - {0.9968313725490197f, 0.894243137254902f, 0.8461176470588235f}, - {0.9968f, 0.8935843137254902f, 0.8451764705882352f}, - {0.9967686274509804f, 0.8929254901960784f, 0.844235294117647f}, - {0.9967372549019607f, 0.8922666666666667f, 0.8432941176470587f}, - {0.9967058823529412f, 0.8916078431372549f, 0.8423529411764705f}, - {0.9966745098039216f, 0.8909490196078431f, 0.8414117647058823f}, - {0.996643137254902f, 0.8902901960784314f, 0.8404705882352941f}, - {0.9966117647058824f, 0.8896313725490196f, 0.8395294117647059f}, - {0.9965803921568628f, 0.8889725490196079f, 0.8385882352941176f}, - {0.9965490196078431f, 0.888313725490196f, 0.8376470588235294f}, - {0.9965176470588235f, 0.8876549019607843f, 0.8367058823529412f}, - {0.996486274509804f, 0.8869960784313725f, 0.8357647058823529f}, - {0.9964549019607843f, 0.8863372549019608f, 0.8348235294117646f}, - {0.9964235294117647f, 0.885678431372549f, 0.8338823529411764f}, - {0.9963921568627451f, 0.8850196078431373f, 0.8329411764705882f}, - {0.9963607843137255f, 0.8843607843137254f, 0.832f}, - {0.9963294117647059f, 0.8837019607843137f, 0.8310588235294117f}, - {0.9962980392156863f, 0.8830431372549019f, 0.8301176470588235f}, - {0.9962666666666666f, 0.8823843137254902f, 0.8291764705882353f}, - {0.9962352941176471f, 0.8817254901960784f, 0.8282352941176471f}, - {0.9962039215686275f, 0.8810666666666667f, 0.8272941176470587f}, - {0.9961725490196078f, 0.8804078431372548f, 0.8263529411764705f}, - {0.9961411764705882f, 0.8797490196078431f, 0.8254117647058823f}, - {0.9961098039215687f, 0.8790901960784314f, 0.8244705882352941f}, - {0.996078431372549f, 0.8784313725490196f, 0.8235294117647058f}, - {0.9960156862745099f, 0.8772705882352941f, 0.8219921568627451f}, - {0.9959529411764706f, 0.8761098039215686f, 0.8204549019607843f}, - {0.9958901960784314f, 0.8749490196078431f, 0.8189176470588235f}, - {0.9958274509803922f, 0.8737882352941176f, 0.8173803921568628f}, - {0.995764705882353f, 0.8726274509803922f, 0.8158431372549019f}, - {0.9957019607843137f, 0.8714666666666666f, 0.8143058823529411f}, - {0.9956392156862746f, 0.8703058823529412f, 0.8127686274509803f}, - {0.9955764705882353f, 0.8691450980392157f, 0.8112313725490196f}, - {0.9955137254901961f, 0.8679843137254901f, 0.8096941176470588f}, - {0.9954509803921568f, 0.8668235294117647f, 0.808156862745098f}, - {0.9953882352941177f, 0.8656627450980392f, 0.8066196078431372f}, - {0.9953254901960784f, 0.8645019607843137f, 0.8050823529411764f}, - {0.9952627450980392f, 0.8633411764705882f, 0.8035450980392156f}, - {0.9952f, 0.8621803921568627f, 0.8020078431372548f}, - {0.9951372549019608f, 0.8610196078431372f, 0.800470588235294f}, - {0.9950745098039215f, 0.8598588235294118f, 0.7989333333333333f}, - {0.9950117647058824f, 0.8586980392156862f, 0.7973960784313725f}, - {0.9949490196078431f, 0.8575372549019608f, 0.7958588235294117f}, - {0.9948862745098039f, 0.8563764705882353f, 0.794321568627451f}, - {0.9948235294117648f, 0.8552156862745098f, 0.7927843137254902f}, - {0.9947607843137255f, 0.8540549019607843f, 0.7912470588235294f}, - {0.9946980392156863f, 0.8528941176470588f, 0.7897098039215686f}, - {0.9946352941176471f, 0.8517333333333333f, 0.7881725490196079f}, - {0.9945725490196079f, 0.8505725490196079f, 0.786635294117647f}, - {0.9945098039215686f, 0.8494117647058823f, 0.7850980392156862f}, - {0.9944470588235295f, 0.8482509803921569f, 0.7835607843137254f}, - {0.9943843137254902f, 0.8470901960784314f, 0.7820235294117647f}, - {0.994321568627451f, 0.8459294117647058f, 0.7804862745098039f}, - {0.9942588235294118f, 0.8447686274509804f, 0.7789490196078431f}, - {0.9941960784313726f, 0.8436078431372549f, 0.7774117647058824f}, - {0.9941333333333333f, 0.8424470588235294f, 0.7758745098039215f}, - {0.9940705882352942f, 0.8412862745098039f, 0.7743372549019607f}, - {0.9940078431372549f, 0.8401254901960784f, 0.7727999999999999f}, - {0.9939450980392157f, 0.838964705882353f, 0.7712627450980392f}, - {0.9938823529411764f, 0.8378039215686274f, 0.7697254901960784f}, - {0.9938196078431373f, 0.8366431372549019f, 0.7681882352941176f}, - {0.9937568627450981f, 0.8354823529411765f, 0.7666509803921568f}, - {0.9936941176470588f, 0.834321568627451f, 0.7651137254901961f}, - {0.9936313725490197f, 0.8331607843137254f, 0.7635764705882353f}, - {0.9935686274509804f, 0.832f, 0.7620392156862744f}, - {0.9935058823529412f, 0.8308392156862745f, 0.7605019607843136f}, - {0.993443137254902f, 0.8296784313725489f, 0.7589647058823529f}, - {0.9933803921568628f, 0.8285176470588235f, 0.7574274509803921f}, - {0.9933176470588235f, 0.827356862745098f, 0.7558901960784313f}, - {0.9932549019607844f, 0.8261960784313725f, 0.7543529411764706f}, - {0.9931921568627451f, 0.825035294117647f, 0.7528156862745098f}, - {0.9931294117647059f, 0.8238745098039215f, 0.7512784313725489f}, - {0.9930666666666667f, 0.8227137254901961f, 0.7497411764705881f}, - {0.9930039215686275f, 0.8215529411764706f, 0.7482039215686274f}, - {0.9929411764705882f, 0.820392156862745f, 0.7466666666666666f}, - {0.992878431372549f, 0.8192313725490196f, 0.7451294117647058f}, - {0.9928156862745098f, 0.8180705882352941f, 0.743592156862745f}, - {0.9927529411764706f, 0.8169098039215686f, 0.7420549019607843f}, - {0.9926901960784315f, 0.8157490196078431f, 0.7405176470588235f}, - {0.9926274509803922f, 0.8145882352941176f, 0.7389803921568627f}, - {0.992564705882353f, 0.8134274509803922f, 0.737443137254902f}, - {0.9925019607843137f, 0.8122666666666667f, 0.7359058823529412f}, - {0.9924392156862746f, 0.8111058823529411f, 0.7343686274509804f}, - {0.9923764705882353f, 0.8099450980392157f, 0.7328313725490195f}, - {0.9923137254901961f, 0.8087843137254902f, 0.7312941176470588f}, - {0.9922509803921569f, 0.8076235294117646f, 0.729756862745098f}, - {0.9921882352941177f, 0.8064627450980392f, 0.7282196078431372f}, - {0.9921254901960784f, 0.8053019607843137f, 0.7266823529411764f}, - {0.9920627450980393f, 0.8041411764705882f, 0.7251450980392157f}, - {0.992f, 0.8029803921568627f, 0.7236078431372549f}, - {0.9919372549019608f, 0.8018196078431372f, 0.7220705882352941f}, - {0.9918745098039216f, 0.8006588235294118f, 0.7205333333333332f}, - {0.9918117647058824f, 0.7994980392156863f, 0.7189960784313725f}, - {0.9917490196078431f, 0.7983372549019607f, 0.7174588235294117f}, - {0.991686274509804f, 0.7971764705882353f, 0.7159215686274509f}, - {0.9916235294117647f, 0.7960156862745098f, 0.7143843137254902f}, - {0.9915607843137255f, 0.7948549019607842f, 0.7128470588235294f}, - {0.9914980392156864f, 0.7936941176470588f, 0.7113098039215686f}, - {0.9914352941176471f, 0.7925333333333333f, 0.7097725490196078f}, - {0.9913725490196079f, 0.7913725490196077f, 0.7082352941176471f}, - {0.9913098039215686f, 0.7902117647058823f, 0.7066980392156862f}, - {0.9912470588235295f, 0.7890509803921568f, 0.7051607843137254f}, - {0.9911843137254902f, 0.7878901960784314f, 0.7036235294117646f}, - {0.991121568627451f, 0.7867294117647058f, 0.7020862745098039f}, - {0.9910588235294118f, 0.7855686274509803f, 0.7005490196078431f}, - {0.9909960784313726f, 0.7844078431372549f, 0.6990117647058823f}, - {0.9909333333333333f, 0.7832470588235294f, 0.6974745098039214f}, - {0.9908705882352942f, 0.7820862745098038f, 0.6959372549019607f}, - {0.9908078431372549f, 0.7809254901960784f, 0.6944f}, - {0.9907450980392157f, 0.7797647058823529f, 0.6928627450980391f}, - {0.9906823529411765f, 0.7786039215686275f, 0.6913254901960784f}, - {0.9906196078431373f, 0.7774431372549019f, 0.6897882352941176f}, - {0.990556862745098f, 0.7762823529411764f, 0.6882509803921568f}, - {0.9904941176470589f, 0.775121568627451f, 0.686713725490196f}, - {0.9904313725490197f, 0.7739607843137255f, 0.6851764705882353f}, - {0.9903686274509804f, 0.7727999999999999f, 0.6836392156862745f}, - {0.9903058823529413f, 0.7716392156862745f, 0.6821019607843137f}, - {0.990243137254902f, 0.770478431372549f, 0.680564705882353f}, - {0.9901803921568628f, 0.7693176470588234f, 0.6790274509803922f}, - {0.9901176470588235f, 0.768156862745098f, 0.6774901960784313f}, - {0.9900549019607844f, 0.7669960784313725f, 0.6759529411764705f}, - {0.9899921568627451f, 0.7658352941176471f, 0.6744156862745098f}, - {0.989929411764706f, 0.7646745098039215f, 0.672878431372549f}, - {0.9898666666666667f, 0.763513725490196f, 0.6713411764705882f}, - {0.9898039215686275f, 0.7623529411764706f, 0.6698039215686274f}, - {0.9897411764705882f, 0.7611921568627451f, 0.6682666666666666f}, - {0.9896784313725491f, 0.7600313725490195f, 0.6667294117647058f}, - {0.9896156862745098f, 0.7588705882352941f, 0.665192156862745f}, - {0.9895529411764706f, 0.7577098039215686f, 0.6636549019607842f}, - {0.9894901960784314f, 0.756549019607843f, 0.6621176470588235f}, - {0.9894274509803922f, 0.7553882352941176f, 0.6605803921568627f}, - {0.9893647058823529f, 0.7542274509803921f, 0.6590431372549019f}, - {0.9893019607843138f, 0.7530666666666666f, 0.6575058823529412f}, - {0.9892392156862746f, 0.7519058823529411f, 0.6559686274509804f}, - {0.9891764705882353f, 0.7507450980392156f, 0.6544313725490196f}, - {0.9891137254901962f, 0.7495843137254902f, 0.6528941176470587f}, - {0.9890509803921569f, 0.7484235294117646f, 0.651356862745098f}, - {0.9889882352941177f, 0.7472627450980391f, 0.6498196078431372f}, - {0.9889254901960784f, 0.7461019607843137f, 0.6482823529411764f}, - {0.9888627450980393f, 0.7449411764705882f, 0.6467450980392156f}, - {0.9888f, 0.7437803921568626f, 0.6452078431372549f}, - {0.9887372549019608f, 0.7426196078431372f, 0.6436705882352941f}, - {0.9886745098039216f, 0.7414588235294117f, 0.6421333333333333f}, - {0.9886117647058824f, 0.7402980392156863f, 0.6405960784313726f}, - {0.9885490196078431f, 0.7391372549019608f, 0.6390588235294117f}, - {0.988486274509804f, 0.7379764705882352f, 0.6375215686274509f}, - {0.9884235294117647f, 0.7368156862745098f, 0.6359843137254901f}, - {0.9883607843137255f, 0.7356549019607843f, 0.6344470588235294f}, - {0.9882980392156863f, 0.7344941176470587f, 0.6329098039215686f}, - {0.9882352941176471f, 0.7333333333333333f, 0.6313725490196078f}, - {0.9882352941176471f, 0.7320470588235294f, 0.6298980392156862f}, - {0.9882352941176471f, 0.7307607843137255f, 0.6284235294117647f}, - {0.9882352941176471f, 0.7294745098039215f, 0.6269490196078431f}, - {0.9882352941176471f, 0.7281882352941176f, 0.6254745098039215f}, - {0.9882352941176471f, 0.7269019607843137f, 0.624f}, - {0.9882352941176471f, 0.7256156862745098f, 0.6225254901960784f}, - {0.9882352941176471f, 0.7243294117647058f, 0.6210509803921568f}, - {0.9882352941176471f, 0.7230431372549019f, 0.6195764705882353f}, - {0.9882352941176471f, 0.721756862745098f, 0.6181019607843137f}, - {0.9882352941176471f, 0.7204705882352941f, 0.6166274509803922f}, - {0.9882352941176471f, 0.7191843137254902f, 0.6151529411764706f}, - {0.9882352941176471f, 0.7178980392156862f, 0.613678431372549f}, - {0.9882352941176471f, 0.7166117647058823f, 0.6122039215686275f}, - {0.9882352941176471f, 0.7153254901960784f, 0.6107294117647059f}, - {0.9882352941176471f, 0.7140392156862745f, 0.6092549019607842f}, - {0.9882352941176471f, 0.7127529411764705f, 0.6077803921568627f}, - {0.9882352941176471f, 0.7114666666666666f, 0.6063058823529411f}, - {0.9882352941176471f, 0.7101803921568627f, 0.6048313725490195f}, - {0.9882352941176471f, 0.7088941176470588f, 0.603356862745098f}, - {0.9882352941176471f, 0.7076078431372548f, 0.6018823529411764f}, - {0.9882352941176471f, 0.7063215686274509f, 0.6004078431372548f}, - {0.9882352941176471f, 0.705035294117647f, 0.5989333333333333f}, - {0.9882352941176471f, 0.7037490196078431f, 0.5974588235294117f}, - {0.9882352941176471f, 0.7024627450980392f, 0.5959843137254901f}, - {0.9882352941176471f, 0.7011764705882352f, 0.5945098039215686f}, - {0.9882352941176471f, 0.6998901960784313f, 0.593035294117647f}, - {0.9882352941176471f, 0.6986039215686274f, 0.5915607843137254f}, - {0.9882352941176471f, 0.6973176470588235f, 0.5900862745098039f}, - {0.9882352941176471f, 0.6960313725490195f, 0.5886117647058823f}, - {0.9882352941176471f, 0.6947450980392156f, 0.5871372549019608f}, - {0.9882352941176471f, 0.6934588235294117f, 0.5856627450980392f}, - {0.9882352941176471f, 0.6921725490196078f, 0.5841882352941176f}, - {0.9882352941176471f, 0.6908862745098039f, 0.5827137254901961f}, - {0.9882352941176471f, 0.6895999999999999f, 0.5812392156862745f}, - {0.9882352941176471f, 0.688313725490196f, 0.5797647058823528f}, - {0.9882352941176471f, 0.6870274509803921f, 0.5782901960784314f}, - {0.9882352941176471f, 0.6857411764705882f, 0.5768156862745097f}, - {0.9882352941176471f, 0.6844549019607842f, 0.5753411764705881f}, - {0.9882352941176471f, 0.6831686274509804f, 0.5738666666666667f}, - {0.9882352941176471f, 0.6818823529411765f, 0.5723921568627451f}, - {0.9882352941176471f, 0.6805960784313725f, 0.5709176470588235f}, - {0.9882352941176471f, 0.6793098039215686f, 0.569443137254902f}, - {0.9882352941176471f, 0.6780235294117647f, 0.5679686274509804f}, - {0.9882352941176471f, 0.6767372549019608f, 0.5664941176470588f}, - {0.9882352941176471f, 0.6754509803921568f, 0.5650196078431373f}, - {0.9882352941176471f, 0.6741647058823529f, 0.5635450980392157f}, - {0.9882352941176471f, 0.672878431372549f, 0.5620705882352941f}, - {0.9882352941176471f, 0.6715921568627451f, 0.5605960784313726f}, - {0.9882352941176471f, 0.6703058823529411f, 0.559121568627451f}, - {0.9882352941176471f, 0.6690196078431372f, 0.5576470588235294f}, - {0.9882352941176471f, 0.6677333333333333f, 0.5561725490196079f}, - {0.9882352941176471f, 0.6664470588235294f, 0.5546980392156863f}, - {0.9882352941176471f, 0.6651607843137255f, 0.5532235294117647f}, - {0.9882352941176471f, 0.6638745098039215f, 0.5517490196078432f}, - {0.9882352941176471f, 0.6625882352941176f, 0.5502745098039216f}, - {0.9882352941176471f, 0.6613019607843137f, 0.5488f}, - {0.9882352941176471f, 0.6600156862745098f, 0.5473254901960785f}, - {0.9882352941176471f, 0.6587294117647058f, 0.5458509803921568f}, - {0.9882352941176471f, 0.6574431372549019f, 0.5443764705882352f}, - {0.9882352941176471f, 0.656156862745098f, 0.5429019607843137f}, - {0.9882352941176471f, 0.6548705882352941f, 0.5414274509803921f}, - {0.9882352941176471f, 0.6535843137254902f, 0.5399529411764706f}, - {0.9882352941176471f, 0.6522980392156862f, 0.538478431372549f}, - {0.9882352941176471f, 0.6510117647058823f, 0.5370039215686274f}, - {0.9882352941176471f, 0.6497254901960784f, 0.5355294117647059f}, - {0.9882352941176471f, 0.6484392156862745f, 0.5340549019607843f}, - {0.9882352941176471f, 0.6471529411764705f, 0.5325803921568627f}, - {0.9882352941176471f, 0.6458666666666666f, 0.5311058823529412f}, - {0.9882352941176471f, 0.6445803921568627f, 0.5296313725490196f}, - {0.9882352941176471f, 0.6432941176470588f, 0.528156862745098f}, - {0.9882352941176471f, 0.6420078431372549f, 0.5266823529411765f}, - {0.9882352941176471f, 0.6407215686274509f, 0.5252078431372549f}, - {0.9882352941176471f, 0.639435294117647f, 0.5237333333333334f}, - {0.9882352941176471f, 0.6381490196078431f, 0.5222588235294118f}, - {0.9882352941176471f, 0.6368627450980392f, 0.5207843137254902f}, - {0.9882352941176471f, 0.6355764705882352f, 0.5193098039215687f}, - {0.9882352941176471f, 0.6342901960784313f, 0.5178352941176471f}, - {0.9882352941176471f, 0.6330039215686274f, 0.5163607843137255f}, - {0.9882352941176471f, 0.6317176470588235f, 0.514886274509804f}, - {0.9882352941176471f, 0.6304313725490196f, 0.5134117647058823f}, - {0.9882352941176471f, 0.6291450980392156f, 0.5119372549019607f}, - {0.9882352941176471f, 0.6278588235294117f, 0.5104627450980392f}, - {0.9882352941176471f, 0.6265725490196078f, 0.5089882352941176f}, - {0.9882352941176471f, 0.6252862745098039f, 0.507513725490196f}, - {0.9882352941176471f, 0.6239999999999999f, 0.5060392156862745f}, - {0.9882352941176471f, 0.622713725490196f, 0.5045647058823529f}, - {0.9882352941176471f, 0.6214274509803921f, 0.5030901960784313f}, - {0.9882352941176471f, 0.6201411764705882f, 0.5016156862745098f}, - {0.9882352941176471f, 0.6188549019607843f, 0.5001411764705882f}, - {0.9882352941176471f, 0.6175686274509803f, 0.49866666666666665f}, - {0.9882352941176471f, 0.6162823529411764f, 0.4971921568627451f}, - {0.9882352941176471f, 0.6149960784313725f, 0.4957176470588235f}, - {0.9882352941176471f, 0.6137098039215686f, 0.49424313725490193f}, - {0.9882352941176471f, 0.6124235294117646f, 0.4927686274509804f}, - {0.9882352941176471f, 0.6111372549019607f, 0.49129411764705877f}, - {0.9882352941176471f, 0.6098509803921568f, 0.4898196078431372f}, - {0.9882352941176471f, 0.6085647058823529f, 0.48834509803921566f}, - {0.9882352941176471f, 0.607278431372549f, 0.48687058823529406f}, - {0.9882352941176471f, 0.605992156862745f, 0.4853960784313725f}, - {0.9882352941176471f, 0.6047058823529411f, 0.48392156862745095f}, - {0.9882352941176471f, 0.6034196078431372f, 0.48244705882352934f}, - {0.9882352941176471f, 0.6021333333333333f, 0.4809725490196079f}, - {0.9882352941176471f, 0.6008470588235294f, 0.47949803921568634f}, - {0.9882352941176471f, 0.5995607843137255f, 0.47802352941176474f}, - {0.9882352941176471f, 0.5982745098039215f, 0.4765490196078432f}, - {0.9882352941176471f, 0.5969882352941176f, 0.47507450980392163f}, - {0.9882352941176471f, 0.5957019607843137f, 0.4736f}, - {0.9882352941176471f, 0.5944156862745098f, 0.47212549019607847f}, - {0.9882352941176471f, 0.5931294117647059f, 0.4706509803921569f}, - {0.9882352941176471f, 0.591843137254902f, 0.4691764705882353f}, - {0.9882352941176471f, 0.590556862745098f, 0.46770196078431375f}, - {0.9882352941176471f, 0.5892705882352941f, 0.4662274509803922f}, - {0.9882352941176471f, 0.5879843137254902f, 0.4647529411764706f}, - {0.9882352941176471f, 0.5866980392156862f, 0.4632784313725491f}, - {0.9882352941176471f, 0.5854117647058823f, 0.4618039215686275f}, - {0.9882352941176471f, 0.5841254901960784f, 0.4603294117647059f}, - {0.9882352941176471f, 0.5828392156862745f, 0.4588549019607844f}, - {0.9882352941176471f, 0.5815529411764706f, 0.45738039215686277f}, - {0.9882352941176471f, 0.5802666666666666f, 0.4559058823529412f}, - {0.9882352941176471f, 0.5789803921568627f, 0.45443137254901966f}, - {0.9882352941176471f, 0.5776941176470588f, 0.45295686274509805f}, - {0.9882352941176471f, 0.5764078431372549f, 0.4514823529411765f}, - {0.9882352941176471f, 0.5751215686274509f, 0.45000784313725495f}, - {0.9882352941176471f, 0.573835294117647f, 0.44853333333333334f}, - {0.9882352941176471f, 0.5725490196078431f, 0.4470588235294118f}, - {0.9882039215686275f, 0.5712941176470588f, 0.44580392156862747f}, - {0.9881725490196079f, 0.5700392156862745f, 0.44454901960784315f}, - {0.9881411764705883f, 0.5687843137254902f, 0.44329411764705884f}, - {0.9881098039215687f, 0.5675294117647058f, 0.4420392156862745f}, - {0.988078431372549f, 0.5662745098039216f, 0.4407843137254902f}, - {0.9880470588235295f, 0.5650196078431372f, 0.4395294117647059f}, - {0.9880156862745099f, 0.563764705882353f, 0.4382745098039216f}, - {0.9879843137254902f, 0.5625098039215686f, 0.43701960784313726f}, - {0.9879529411764706f, 0.5612549019607843f, 0.43576470588235294f}, - {0.9879215686274511f, 0.5599999999999999f, 0.4345098039215686f}, - {0.9878901960784314f, 0.5587450980392157f, 0.4332549019607843f}, - {0.9878588235294118f, 0.5574901960784313f, 0.432f}, - {0.9878274509803922f, 0.556235294117647f, 0.4307450980392157f}, - {0.9877960784313726f, 0.5549803921568627f, 0.42949019607843136f}, - {0.987764705882353f, 0.5537254901960784f, 0.42823529411764705f}, - {0.9877333333333334f, 0.552470588235294f, 0.42698039215686273f}, - {0.9877019607843137f, 0.5512156862745098f, 0.4257254901960784f}, - {0.9876705882352942f, 0.5499607843137254f, 0.4244705882352941f}, - {0.9876392156862746f, 0.5487058823529412f, 0.4232156862745098f}, - {0.9876078431372549f, 0.5474509803921568f, 0.42196078431372547f}, - {0.9875764705882353f, 0.5461960784313725f, 0.42070588235294115f}, - {0.9875450980392158f, 0.5449411764705882f, 0.41945098039215684f}, - {0.9875137254901961f, 0.5436862745098039f, 0.4181960784313725f}, - {0.9874823529411765f, 0.5424313725490195f, 0.41694117647058826f}, - {0.9874509803921568f, 0.5411764705882353f, 0.4156862745098039f}, - {0.9874196078431373f, 0.5399215686274509f, 0.4144313725490196f}, - {0.9873882352941177f, 0.5386666666666666f, 0.41317647058823526f}, - {0.987356862745098f, 0.5374117647058823f, 0.411921568627451f}, - {0.9873254901960784f, 0.536156862745098f, 0.4106666666666667f}, - {0.9872941176470589f, 0.5349019607843136f, 0.40941176470588236f}, - {0.9872627450980392f, 0.5336470588235294f, 0.40815686274509805f}, - {0.9872313725490196f, 0.532392156862745f, 0.40690196078431373f}, - {0.9872f, 0.5311372549019607f, 0.4056470588235294f}, - {0.9871686274509804f, 0.5298823529411765f, 0.4043921568627451f}, - {0.9871372549019608f, 0.5286274509803921f, 0.4031372549019608f}, - {0.9871058823529412f, 0.5273725490196077f, 0.40188235294117647f}, - {0.9870745098039215f, 0.5261176470588235f, 0.40062745098039215f}, - {0.987043137254902f, 0.5248627450980392f, 0.39937254901960784f}, - {0.9870117647058824f, 0.5236078431372548f, 0.3981176470588235f}, - {0.9869803921568627f, 0.5223529411764706f, 0.3968627450980392f}, - {0.9869490196078431f, 0.5210980392156862f, 0.3956078431372549f}, - {0.9869176470588236f, 0.5198431372549019f, 0.39435294117647063f}, - {0.9868862745098039f, 0.5185882352941177f, 0.3930980392156863f}, - {0.9868549019607843f, 0.5173333333333333f, 0.391843137254902f}, - {0.9868235294117648f, 0.516078431372549f, 0.3905882352941177f}, - {0.9867921568627451f, 0.5148235294117647f, 0.38933333333333336f}, - {0.9867607843137255f, 0.5135686274509804f, 0.38807843137254905f}, - {0.9867294117647059f, 0.512313725490196f, 0.38682352941176473f}, - {0.9866980392156863f, 0.5110588235294118f, 0.3855686274509804f}, - {0.9866666666666667f, 0.5098039215686274f, 0.3843137254901961f}, - {0.986635294117647f, 0.5085490196078432f, 0.3830588235294118f}, - {0.9866039215686274f, 0.5072941176470588f, 0.38180392156862747f}, - {0.9865725490196079f, 0.5060392156862745f, 0.38054901960784315f}, - {0.9865411764705883f, 0.5047843137254902f, 0.37929411764705884f}, - {0.9865098039215686f, 0.5035294117647059f, 0.3780392156862745f}, - {0.986478431372549f, 0.5022745098039215f, 0.3767843137254902f}, - {0.9864470588235295f, 0.5010196078431373f, 0.3755294117647059f}, - {0.9864156862745098f, 0.49976470588235294f, 0.37427450980392163f}, - {0.9863843137254902f, 0.49850980392156863f, 0.37301960784313726f}, - {0.9863529411764705f, 0.4972549019607843f, 0.371764705882353f}, - {0.986321568627451f, 0.496f, 0.3705098039215686f}, - {0.9862901960784314f, 0.4947450980392157f, 0.36925490196078437f}, - {0.9862588235294117f, 0.49349019607843136f, 0.368f}, - {0.9862274509803921f, 0.49223529411764705f, 0.36674509803921573f}, - {0.9861960784313726f, 0.49098039215686273f, 0.36549019607843136f}, - {0.9861647058823529f, 0.4897254901960784f, 0.3642352941176471f}, - {0.9861333333333333f, 0.4884705882352941f, 0.36298039215686273f}, - {0.9861019607843137f, 0.4872156862745098f, 0.36172549019607847f}, - {0.9860705882352941f, 0.48596078431372547f, 0.36047058823529415f}, - {0.9860392156862745f, 0.48470588235294115f, 0.35921568627450984f}, - {0.9860078431372549f, 0.48345098039215684f, 0.3579607843137255f}, - {0.9859764705882352f, 0.4821960784313725f, 0.3567058823529412f}, - {0.9859450980392157f, 0.4809411764705882f, 0.3554509803921569f}, - {0.9859137254901961f, 0.4796862745098039f, 0.3541960784313726f}, - {0.9858823529411764f, 0.4784313725490196f, 0.35294117647058826f}, - {0.9858509803921568f, 0.4771764705882353f, 0.35168627450980394f}, - {0.9858196078431373f, 0.47592156862745094f, 0.3504313725490196f}, - {0.9857882352941176f, 0.4746666666666667f, 0.3491764705882353f}, - {0.985756862745098f, 0.4734117647058823f, 0.347921568627451f}, - {0.9857254901960784f, 0.47215686274509805f, 0.3466666666666667f}, - {0.9856941176470588f, 0.4709019607843137f, 0.34541176470588236f}, - {0.9856627450980392f, 0.4696470588235294f, 0.34415686274509805f}, - {0.9856313725490196f, 0.46839215686274505f, 0.34290196078431373f}, - {0.9856f, 0.4671372549019608f, 0.3416470588235294f}, - {0.9855686274509804f, 0.46588235294117647f, 0.3403921568627451f}, - {0.9855372549019608f, 0.46462745098039215f, 0.3391372549019608f}, - {0.9855058823529411f, 0.46337254901960784f, 0.33788235294117647f}, - {0.9854745098039216f, 0.4621176470588235f, 0.33662745098039215f}, - {0.985443137254902f, 0.4608627450980392f, 0.33537254901960784f}, - {0.9854117647058823f, 0.4596078431372549f, 0.3341176470588235f}, - {0.9853803921568627f, 0.4583529411764706f, 0.3328627450980392f}, - {0.9853490196078432f, 0.45709803921568626f, 0.3316078431372549f}, - {0.9853176470588235f, 0.45584313725490194f, 0.33035294117647057f}, - {0.9852862745098039f, 0.4545882352941176f, 0.32909803921568626f}, - {0.9852549019607842f, 0.4533333333333333f, 0.32784313725490194f}, - {0.9852235294117647f, 0.452078431372549f, 0.3265882352941176f}, - {0.9851921568627451f, 0.4508235294117647f, 0.3253333333333333f}, - {0.9851607843137254f, 0.44956862745098036f, 0.324078431372549f}, - {0.9851294117647058f, 0.44831372549019605f, 0.3228235294117647f}, - {0.9850980392156863f, 0.44705882352941173f, 0.32156862745098036f}, - {0.9850666666666666f, 0.4458039215686274f, 0.3203137254901961f}, - {0.985035294117647f, 0.4445490196078431f, 0.31905882352941173f}, - {0.9850039215686274f, 0.4432941176470588f, 0.31780392156862747f}, - {0.9849725490196078f, 0.44203921568627447f, 0.3165490196078431f}, - {0.9849411764705882f, 0.4407843137254902f, 0.31529411764705884f}, - {0.9849098039215686f, 0.43952941176470595f, 0.3140392156862746f}, - {0.9848784313725489f, 0.4382745098039216f, 0.3127843137254902f}, - {0.9848470588235294f, 0.4370196078431373f, 0.31152941176470594f}, - {0.9848156862745098f, 0.43576470588235294f, 0.31027450980392157f}, - {0.9847843137254901f, 0.4345098039215687f, 0.3090196078431373f}, - {0.9847529411764705f, 0.4332549019607843f, 0.30776470588235294f}, - {0.984721568627451f, 0.43200000000000005f, 0.3065098039215687f}, - {0.9846901960784313f, 0.4307450980392157f, 0.30525490196078436f}, - {0.9846588235294117f, 0.4294901960784314f, 0.30400000000000005f}, - {0.9846274509803921f, 0.42823529411764705f, 0.30274509803921573f}, - {0.9845960784313725f, 0.4269803921568628f, 0.3014901960784314f}, - {0.9845647058823529f, 0.42572549019607847f, 0.3002352941176471f}, - {0.9845333333333333f, 0.42447058823529416f, 0.2989803921568628f}, - {0.9845019607843136f, 0.42321568627450984f, 0.29772549019607847f}, - {0.9844705882352941f, 0.4219607843137255f, 0.29647058823529415f}, - {0.9844392156862745f, 0.4207058823529412f, 0.29521568627450984f}, - {0.9844078431372548f, 0.4194509803921569f, 0.2939607843137255f}, - {0.9843764705882352f, 0.4181960784313726f, 0.2927058823529412f}, - {0.9843450980392157f, 0.41694117647058826f, 0.2914509803921569f}, - {0.984313725490196f, 0.41568627450980394f, 0.2901960784313726f}, - {0.9839372549019607f, 0.4142117647058824f, 0.28925490196078435f}, - {0.9835607843137254f, 0.4127372549019608f, 0.2883137254901961f}, - {0.9831843137254901f, 0.41126274509803923f, 0.28737254901960785f}, - {0.9828078431372549f, 0.4097882352941177f, 0.2864313725490196f}, - {0.9824313725490196f, 0.40831372549019607f, 0.2854901960784314f}, - {0.9820549019607843f, 0.4068392156862745f, 0.2845490196078432f}, - {0.981678431372549f, 0.40536470588235296f, 0.2836078431372549f}, - {0.9813019607843136f, 0.4038901960784314f, 0.2826666666666667f}, - {0.9809254901960783f, 0.4024156862745098f, 0.28172549019607845f}, - {0.9805490196078431f, 0.40094117647058825f, 0.28078431372549023f}, - {0.9801725490196078f, 0.3994666666666667f, 0.27984313725490195f}, - {0.9797960784313725f, 0.3979921568627451f, 0.27890196078431373f}, - {0.9794196078431372f, 0.39651764705882353f, 0.2779607843137255f}, - {0.9790431372549019f, 0.395043137254902f, 0.2770196078431373f}, - {0.9786666666666666f, 0.39356862745098037f, 0.276078431372549f}, - {0.9782901960784314f, 0.3920941176470588f, 0.2751372549019608f}, - {0.9779137254901961f, 0.39061960784313726f, 0.27419607843137256f}, - {0.9775372549019608f, 0.3891450980392157f, 0.27325490196078434f}, - {0.9771607843137254f, 0.3876705882352941f, 0.27231372549019606f}, - {0.9767843137254901f, 0.38619607843137255f, 0.27137254901960783f}, - {0.9764078431372548f, 0.384721568627451f, 0.2704313725490196f}, - {0.9760313725490195f, 0.3832470588235294f, 0.2694901960784314f}, - {0.9756549019607843f, 0.38177254901960783f, 0.26854901960784316f}, - {0.975278431372549f, 0.3802980392156863f, 0.2676078431372549f}, - {0.9749019607843137f, 0.37882352941176467f, 0.26666666666666666f}, - {0.9745254901960784f, 0.3773490196078431f, 0.26572549019607844f}, - {0.9741490196078431f, 0.37587450980392156f, 0.2647843137254902f}, - {0.9737725490196077f, 0.37439999999999996f, 0.26384313725490194f}, - {0.9733960784313725f, 0.3729254901960784f, 0.2629019607843137f}, - {0.9730196078431372f, 0.37145098039215685f, 0.2619607843137255f}, - {0.9726431372549019f, 0.3699764705882353f, 0.26101960784313727f}, - {0.9722666666666666f, 0.3685019607843137f, 0.260078431372549f}, - {0.9718901960784313f, 0.36702745098039213f, 0.25913725490196077f}, - {0.971513725490196f, 0.3655529411764706f, 0.25819607843137254f}, - {0.9711372549019608f, 0.36407843137254897f, 0.2572549019607843f}, - {0.9707607843137255f, 0.3626039215686274f, 0.25631372549019604f}, - {0.9703843137254902f, 0.36112941176470587f, 0.2553725490196078f}, - {0.9700078431372549f, 0.3596549019607843f, 0.2544313725490196f}, - {0.9696313725490195f, 0.3581803921568627f, 0.2534901960784314f}, - {0.9692549019607842f, 0.35670588235294115f, 0.25254901960784315f}, - {0.9688784313725489f, 0.3552313725490196f, 0.25160784313725487f}, - {0.9685019607843137f, 0.353756862745098f, 0.25066666666666665f}, - {0.9681254901960784f, 0.35228235294117644f, 0.24972549019607843f}, - {0.9677490196078431f, 0.3508078431372549f, 0.24878431372549017f}, - {0.9673725490196078f, 0.3493333333333333f, 0.24784313725490192f}, - {0.9669960784313725f, 0.3478588235294117f, 0.2469019607843137f}, - {0.9666196078431372f, 0.34638431372549017f, 0.24596078431372548f}, - {0.966243137254902f, 0.34490980392156856f, 0.24501960784313723f}, - {0.9658666666666667f, 0.343435294117647f, 0.24407843137254898f}, - {0.9654901960784313f, 0.34196078431372545f, 0.24313725490196075f}, - {0.965113725490196f, 0.34048627450980384f, 0.24219607843137253f}, - {0.9647372549019607f, 0.3390117647058823f, 0.24125490196078428f}, - {0.9643607843137254f, 0.33753725490196074f, 0.24031372549019606f}, - {0.9639843137254901f, 0.33606274509803913f, 0.2393725490196078f}, - {0.9636078431372549f, 0.3345882352941176f, 0.23843137254901958f}, - {0.9632313725490196f, 0.333113725490196f, 0.23749019607843133f}, - {0.9628549019607843f, 0.33163921568627447f, 0.2365490196078431f}, - {0.962478431372549f, 0.3301647058823529f, 0.23560784313725486f}, - {0.9621019607843136f, 0.3286901960784313f, 0.23466666666666663f}, - {0.9617254901960783f, 0.32721568627450975f, 0.23372549019607838f}, - {0.9613490196078431f, 0.3257411764705882f, 0.23278431372549016f}, - {0.9609725490196078f, 0.3242666666666666f, 0.2318431372549019f}, - {0.9605960784313725f, 0.32279215686274504f, 0.2309019607843137f}, - {0.9602196078431372f, 0.3213176470588235f, 0.22996078431372546f}, - {0.9598431372549019f, 0.3198431372549019f, 0.2290196078431372f}, - {0.9594666666666666f, 0.3183686274509803f, 0.22807843137254896f}, - {0.9590901960784314f, 0.31689411764705877f, 0.22713725490196074f}, - {0.9587137254901961f, 0.31541960784313716f, 0.22619607843137252f}, - {0.9583372549019608f, 0.3139450980392156f, 0.22525490196078427f}, - {0.9579607843137254f, 0.31247058823529406f, 0.22431372549019601f}, - {0.9575843137254901f, 0.31099607843137245f, 0.2233725490196078f}, - {0.9572078431372548f, 0.3095215686274509f, 0.22243137254901957f}, - {0.9568313725490195f, 0.30804705882352934f, 0.22149019607843132f}, - {0.9564549019607843f, 0.30657254901960773f, 0.22054901960784307f}, - {0.956078431372549f, 0.3050980392156862f, 0.21960784313725484f}, - {0.9557019607843137f, 0.3036235294117646f, 0.21866666666666662f}, - {0.9553254901960784f, 0.30214901960784324f, 0.21772549019607848f}, - {0.9549490196078432f, 0.30067450980392163f, 0.21678431372549023f}, - {0.9545725490196079f, 0.2992000000000001f, 0.215843137254902f}, - {0.9541960784313726f, 0.2977254901960785f, 0.21490196078431378f}, - {0.9538196078431372f, 0.2962509803921569f, 0.21396078431372553f}, - {0.9534431372549019f, 0.29477647058823536f, 0.21301960784313728f}, - {0.9530666666666666f, 0.2933019607843138f, 0.21207843137254906f}, - {0.9526901960784314f, 0.2918274509803922f, 0.21113725490196084f}, - {0.9523137254901961f, 0.29035294117647065f, 0.21019607843137258f}, - {0.9519372549019608f, 0.2888784313725491f, 0.20925490196078433f}, - {0.9515607843137255f, 0.2874039215686275f, 0.2083137254901961f}, - {0.9511843137254902f, 0.28592941176470593f, 0.2073725490196079f}, - {0.9508078431372549f, 0.2844549019607844f, 0.20643137254901964f}, - {0.9504313725490197f, 0.28298039215686277f, 0.2054901960784314f}, - {0.9500549019607843f, 0.2815058823529413f, 0.20454901960784316f}, - {0.949678431372549f, 0.28003137254901966f, 0.20360784313725494f}, - {0.9493019607843137f, 0.27855686274509806f, 0.20266666666666672f}, - {0.9489254901960784f, 0.27708235294117656f, 0.20172549019607847f}, - {0.9485490196078431f, 0.27560784313725495f, 0.20078431372549022f}, - {0.9481725490196078f, 0.2741333333333334f, 0.199843137254902f}, - {0.9477960784313726f, 0.27265882352941184f, 0.19890196078431377f}, - {0.9474196078431373f, 0.27118431372549023f, 0.19796078431372552f}, - {0.947043137254902f, 0.2697098039215687f, 0.19701960784313727f}, - {0.9466666666666667f, 0.2682352941176471f, 0.19607843137254904f}, - {0.9462901960784313f, 0.2667607843137255f, 0.19513725490196082f}, - {0.945913725490196f, 0.26528627450980397f, 0.19419607843137257f}, - {0.9455372549019608f, 0.2638117647058824f, 0.19325490196078432f}, - {0.9451607843137255f, 0.2623372549019608f, 0.1923137254901961f}, - {0.9447843137254902f, 0.26086274509803925f, 0.19137254901960787f}, - {0.9444078431372549f, 0.2593882352941177f, 0.19043137254901962f}, - {0.9440313725490196f, 0.2579137254901961f, 0.18949019607843137f}, - {0.9436549019607843f, 0.25643921568627454f, 0.18854901960784315f}, - {0.9432784313725491f, 0.254964705882353f, 0.18760784313725493f}, - {0.9429019607843138f, 0.2534901960784314f, 0.18666666666666668f}, - {0.9425254901960785f, 0.2520156862745099f, 0.18572549019607842f}, - {0.9421490196078431f, 0.25054117647058827f, 0.1847843137254902f}, - {0.9417725490196078f, 0.2490666666666667f, 0.18384313725490198f}, - {0.9413960784313725f, 0.24759215686274513f, 0.18290196078431376f}, - {0.9410196078431372f, 0.24611764705882355f, 0.1819607843137255f}, - {0.940643137254902f, 0.24464313725490197f, 0.18101960784313725f}, - {0.9402666666666667f, 0.24316862745098042f, 0.18007843137254903f}, - {0.9398901960784314f, 0.24169411764705884f, 0.1791372549019608f}, - {0.9395137254901961f, 0.24021960784313728f, 0.17819607843137256f}, - {0.9391372549019608f, 0.2387450980392157f, 0.1772549019607843f}, - {0.9387607843137254f, 0.23727058823529412f, 0.17631372549019608f}, - {0.9383843137254901f, 0.23579607843137257f, 0.17537254901960786f}, - {0.9380078431372549f, 0.234321568627451f, 0.1744313725490196f}, - {0.9376313725490196f, 0.23284705882352943f, 0.17349019607843136f}, - {0.9372549019607843f, 0.23137254901960785f, 0.17254901960784313f}, - {0.9361254901960784f, 0.23027450980392158f, 0.17207843137254902f}, - {0.9349960784313726f, 0.22917647058823531f, 0.1716078431372549f}, - {0.9338666666666666f, 0.22807843137254902f, 0.17113725490196077f}, - {0.9327372549019608f, 0.22698039215686275f, 0.17066666666666666f}, - {0.9316078431372549f, 0.22588235294117648f, 0.17019607843137255f}, - {0.930478431372549f, 0.2247843137254902f, 0.16972549019607844f}, - {0.9293490196078431f, 0.2236862745098039f, 0.1692549019607843f}, - {0.9282196078431373f, 0.22258823529411764f, 0.1687843137254902f}, - {0.9270901960784314f, 0.22149019607843137f, 0.16831372549019608f}, - {0.9259607843137255f, 0.2203921568627451f, 0.16784313725490196f}, - {0.9248313725490196f, 0.21929411764705883f, 0.16737254901960782f}, - {0.9237019607843137f, 0.21819607843137254f, 0.1669019607843137f}, - {0.9225725490196078f, 0.21709803921568627f, 0.1664313725490196f}, - {0.9214431372549019f, 0.216f, 0.1659607843137255f}, - {0.9203137254901961f, 0.21490196078431373f, 0.16549019607843135f}, - {0.9191843137254901f, 0.21380392156862743f, 0.16501960784313724f}, - {0.9180549019607843f, 0.21270588235294116f, 0.16454901960784313f}, - {0.9169254901960784f, 0.2116078431372549f, 0.16407843137254902f}, - {0.9157960784313726f, 0.21050980392156862f, 0.1636078431372549f}, - {0.9146666666666666f, 0.20941176470588235f, 0.16313725490196077f}, - {0.9135372549019608f, 0.20831372549019606f, 0.16266666666666665f}, - {0.9124078431372549f, 0.20721568627450979f, 0.16219607843137254f}, - {0.9112784313725489f, 0.20611764705882352f, 0.16172549019607843f}, - {0.9101490196078431f, 0.20501960784313725f, 0.1612549019607843f}, - {0.9090196078431372f, 0.20392156862745098f, 0.16078431372549018f}, - {0.9078901960784314f, 0.20282352941176468f, 0.16031372549019607f}, - {0.9067607843137254f, 0.2017254901960784f, 0.15984313725490196f}, - {0.9056313725490196f, 0.20062745098039214f, 0.15937254901960782f}, - {0.9045019607843137f, 0.19952941176470587f, 0.1589019607843137f}, - {0.9033725490196078f, 0.1984313725490196f, 0.1584313725490196f}, - {0.9022431372549019f, 0.1973333333333333f, 0.15796078431372548f}, - {0.9011137254901961f, 0.19623529411764704f, 0.15749019607843134f}, - {0.8999843137254901f, 0.19513725490196077f, 0.15701960784313723f}, - {0.8988549019607843f, 0.19403921568627447f, 0.15654901960784312f}, - {0.8977254901960784f, 0.1929411764705882f, 0.156078431372549f}, - {0.8965960784313725f, 0.19184313725490193f, 0.1556078431372549f}, - {0.8954666666666666f, 0.19074509803921566f, 0.15513725490196076f}, - {0.8943372549019607f, 0.1896470588235294f, 0.15466666666666665f}, - {0.8932078431372549f, 0.1885490196078431f, 0.15419607843137254f}, - {0.8920784313725489f, 0.18745098039215682f, 0.15372549019607842f}, - {0.8909490196078431f, 0.18635294117647055f, 0.15325490196078428f}, - {0.8898196078431372f, 0.18525490196078429f, 0.15278431372549017f}, - {0.8886901960784314f, 0.18415686274509802f, 0.15231372549019606f}, - {0.8875607843137254f, 0.18305882352941172f, 0.15184313725490195f}, - {0.8864313725490196f, 0.18196078431372545f, 0.1513725490196078f}, - {0.8853019607843137f, 0.18086274509803918f, 0.1509019607843137f}, - {0.8841725490196077f, 0.1797647058823529f, 0.1504313725490196f}, - {0.8830431372549019f, 0.17866666666666664f, 0.14996078431372548f}, - {0.881913725490196f, 0.17756862745098034f, 0.14949019607843134f}, - {0.8807843137254902f, 0.17647058823529407f, 0.14901960784313723f}, - {0.8796549019607842f, 0.1753725490196078f, 0.1485490196078431f}, - {0.8785254901960784f, 0.1742745098039215f, 0.148078431372549f}, - {0.8773960784313725f, 0.17317647058823527f, 0.1476078431372549f}, - {0.8762666666666666f, 0.17207843137254897f, 0.14713725490196075f}, - {0.8751372549019607f, 0.1709803921568627f, 0.14666666666666664f}, - {0.8740078431372549f, 0.16988235294117643f, 0.14619607843137253f}, - {0.872878431372549f, 0.16878431372549013f, 0.14572549019607842f}, - {0.871749019607843f, 0.1676862745098039f, 0.14525490196078428f}, - {0.8706196078431372f, 0.1665882352941176f, 0.14478431372549017f}, - {0.8694901960784313f, 0.16549019607843132f, 0.14431372549019605f}, - {0.8683607843137254f, 0.16439215686274505f, 0.14384313725490194f}, - {0.8672313725490195f, 0.16329411764705876f, 0.1433725490196078f}, - {0.8661019607843137f, 0.1621960784313725f, 0.1429019607843137f}, - {0.8649725490196077f, 0.16109803921568622f, 0.14243137254901958f}, - {0.8638431372549019f, 0.15999999999999995f, 0.14196078431372547f}, - {0.862713725490196f, 0.15890196078431368f, 0.14149019607843133f}, - {0.8615843137254902f, 0.15780392156862738f, 0.14101960784313722f}, - {0.8604549019607842f, 0.1567058823529411f, 0.1405490196078431f}, - {0.8593254901960783f, 0.15560784313725484f, 0.140078431372549f}, - {0.8581960784313725f, 0.15450980392156854f, 0.13960784313725488f}, - {0.8570666666666665f, 0.1534117647058823f, 0.13913725490196074f}, - {0.8559372549019607f, 0.152313725490196f, 0.13866666666666663f}, - {0.8548078431372548f, 0.15121568627450974f, 0.13819607843137252f}, - {0.853678431372549f, 0.15011764705882347f, 0.13772549019607838f}, - {0.852549019607843f, 0.14901960784313717f, 0.13725490196078427f}, - {0.8514196078431372f, 0.14792156862745093f, 0.13678431372549016f}, - {0.8502901960784313f, 0.14682352941176463f, 0.13631372549019605f}, - {0.8491607843137254f, 0.14572549019607836f, 0.13584313725490194f}, - {0.8480313725490196f, 0.1446274509803922f, 0.13537254901960785f}, - {0.8469019607843138f, 0.14352941176470593f, 0.13490196078431374f}, - {0.8457725490196079f, 0.14243137254901966f, 0.13443137254901963f}, - {0.8446431372549019f, 0.14133333333333337f, 0.1339607843137255f}, - {0.8435137254901961f, 0.1402352941176471f, 0.13349019607843138f}, - {0.8423843137254902f, 0.13913725490196083f, 0.13301960784313727f}, - {0.8412549019607843f, 0.13803921568627456f, 0.13254901960784315f}, - {0.8401254901960784f, 0.1369411764705883f, 0.13207843137254904f}, - {0.8389960784313726f, 0.135843137254902f, 0.13160784313725493f}, - {0.8378666666666666f, 0.13474509803921572f, 0.1311372549019608f}, - {0.8367372549019608f, 0.13364705882352945f, 0.13066666666666668f}, - {0.8356078431372549f, 0.13254901960784315f, 0.13019607843137257f}, - {0.8344784313725491f, 0.1314509803921569f, 0.12972549019607843f}, - {0.8333490196078431f, 0.13035294117647062f, 0.12925490196078432f}, - {0.8322196078431372f, 0.12925490196078435f, 0.1287843137254902f}, - {0.8310901960784314f, 0.12815686274509808f, 0.1283137254901961f}, - {0.8299607843137254f, 0.12705882352941178f, 0.12784313725490198f}, - {0.8288313725490196f, 0.12596078431372554f, 0.12737254901960784f}, - {0.8277019607843137f, 0.12486274509803924f, 0.12690196078431373f}, - {0.8265725490196079f, 0.12376470588235297f, 0.12643137254901962f}, - {0.8254431372549019f, 0.12266666666666669f, 0.12596078431372548f}, - {0.8243137254901961f, 0.12156862745098042f, 0.12549019607843137f}, - {0.8231843137254902f, 0.12047058823529415f, 0.12501960784313726f}, - {0.8220549019607843f, 0.11937254901960787f, 0.12454901960784315f}, - {0.8209254901960784f, 0.1182745098039216f, 0.12407843137254904f}, - {0.8197960784313725f, 0.11717647058823531f, 0.12360784313725491f}, - {0.8186666666666667f, 0.11607843137254904f, 0.12313725490196079f}, - {0.8175372549019607f, 0.11498039215686276f, 0.12266666666666667f}, - {0.8164078431372549f, 0.11388235294117649f, 0.12219607843137256f}, - {0.815278431372549f, 0.1127843137254902f, 0.12172549019607844f}, - {0.8141490196078431f, 0.11168627450980394f, 0.12125490196078431f}, - {0.8130196078431372f, 0.11058823529411767f, 0.1207843137254902f}, - {0.8118901960784314f, 0.10949019607843138f, 0.12031372549019609f}, - {0.8107607843137254f, 0.10839215686274511f, 0.11984313725490196f}, - {0.8096313725490196f, 0.10729411764705883f, 0.11937254901960784f}, - {0.8085019607843137f, 0.10619607843137255f, 0.11890196078431373f}, - {0.8073725490196078f, 0.10509803921568628f, 0.11843137254901961f}, - {0.8062431372549019f, 0.10400000000000001f, 0.11796078431372549f}, - {0.805113725490196f, 0.10290196078431374f, 0.11749019607843138f}, - {0.8039843137254902f, 0.10180392156862747f, 0.11701960784313725f}, - {0.8028549019607842f, 0.10070588235294117f, 0.11654901960784314f}, - {0.8017254901960784f, 0.0996078431372549f, 0.11607843137254903f}, - {0.8005960784313725f, 0.09850980392156863f, 0.1156078431372549f}, - {0.7994666666666667f, 0.09741176470588236f, 0.11513725490196078f}, - {0.7983372549019607f, 0.09631372549019607f, 0.11466666666666667f}, - {0.7972078431372549f, 0.0952156862745098f, 0.11419607843137256f}, - {0.796078431372549f, 0.09411764705882353f, 0.11372549019607843f}, - {0.7948862745098039f, 0.09383529411764706f, 0.11347450980392157f}, - {0.7936941176470588f, 0.09355294117647059f, 0.11322352941176471f}, - {0.7925019607843137f, 0.09327058823529412f, 0.11297254901960783f}, - {0.7913098039215686f, 0.09298823529411765f, 0.11272156862745097f}, - {0.7901176470588235f, 0.09270588235294118f, 0.11247058823529411f}, - {0.7889254901960784f, 0.09242352941176471f, 0.11221960784313725f}, - {0.7877333333333333f, 0.09214117647058823f, 0.11196862745098039f}, - {0.7865411764705882f, 0.09185882352941176f, 0.11171764705882353f}, - {0.7853490196078431f, 0.09157647058823529f, 0.11146666666666666f}, - {0.784156862745098f, 0.09129411764705882f, 0.1112156862745098f}, - {0.7829647058823529f, 0.09101176470588235f, 0.11096470588235294f}, - {0.7817725490196078f, 0.09072941176470588f, 0.11071372549019608f}, - {0.7805803921568627f, 0.09044705882352941f, 0.11046274509803922f}, - {0.7793882352941176f, 0.09016470588235294f, 0.11021176470588234f}, - {0.7781960784313725f, 0.08988235294117647f, 0.10996078431372548f}, - {0.7770039215686274f, 0.0896f, 0.10970980392156862f}, - {0.7758117647058823f, 0.08931764705882353f, 0.10945882352941176f}, - {0.7746196078431372f, 0.08903529411764705f, 0.1092078431372549f}, - {0.7734274509803921f, 0.08875294117647058f, 0.10895686274509803f}, - {0.772235294117647f, 0.0884705882352941f, 0.10870588235294117f}, - {0.7710431372549019f, 0.08818823529411764f, 0.1084549019607843f}, - {0.7698509803921568f, 0.08790588235294117f, 0.10820392156862745f}, - {0.7686588235294117f, 0.0876235294117647f, 0.10795294117647058f}, - {0.7674666666666666f, 0.08734117647058823f, 0.10770196078431372f}, - {0.7662745098039215f, 0.08705882352941176f, 0.10745098039215685f}, - {0.7650823529411764f, 0.08677647058823529f, 0.10719999999999999f}, - {0.7638901960784313f, 0.08649411764705882f, 0.10694901960784313f}, - {0.7626980392156862f, 0.08621176470588235f, 0.10669803921568627f}, - {0.7615058823529411f, 0.08592941176470588f, 0.10644705882352941f}, - {0.760313725490196f, 0.08564705882352941f, 0.10619607843137255f}, - {0.759121568627451f, 0.08536470588235293f, 0.10594509803921567f}, - {0.7579294117647059f, 0.08508235294117646f, 0.10569411764705881f}, - {0.7567372549019608f, 0.08479999999999999f, 0.10544313725490195f}, - {0.7555450980392157f, 0.08451764705882352f, 0.10519215686274509f}, - {0.7543529411764706f, 0.08423529411764705f, 0.10494117647058823f}, - {0.7531607843137255f, 0.08395294117647058f, 0.10469019607843136f}, - {0.7519686274509804f, 0.08367058823529411f, 0.1044392156862745f}, - {0.7507764705882353f, 0.08338823529411764f, 0.10418823529411764f}, - {0.7495843137254902f, 0.08310588235294117f, 0.10393725490196078f}, - {0.7483921568627451f, 0.0828235294117647f, 0.10368627450980392f}, - {0.7472f, 0.08254117647058823f, 0.10343529411764704f}, - {0.7460078431372549f, 0.08225882352941175f, 0.10318431372549018f}, - {0.7448156862745098f, 0.08197647058823529f, 0.10293333333333332f}, - {0.7436235294117647f, 0.0816941176470588f, 0.10268235294117646f}, - {0.7424313725490196f, 0.08141176470588234f, 0.1024313725490196f}, - {0.7412392156862745f, 0.08112941176470587f, 0.10218039215686273f}, - {0.7400470588235294f, 0.0808470588235294f, 0.10192941176470587f}, - {0.7388549019607843f, 0.08056470588235293f, 0.101678431372549f}, - {0.7376627450980392f, 0.08028235294117646f, 0.10142745098039214f}, - {0.736470588235294f, 0.07999999999999999f, 0.10117647058823528f}, - {0.7352784313725489f, 0.07971764705882352f, 0.10092549019607842f}, - {0.7340862745098038f, 0.07943529411764705f, 0.10067450980392155f}, - {0.7328941176470587f, 0.07915294117647058f, 0.10042352941176469f}, - {0.7317019607843136f, 0.07887058823529411f, 0.10017254901960783f}, - {0.7305098039215685f, 0.07858823529411763f, 0.09992156862745097f}, - {0.7293176470588234f, 0.07830588235294117f, 0.09967058823529411f}, - {0.7281254901960783f, 0.07802352941176469f, 0.09941960784313725f}, - {0.7269333333333332f, 0.07774117647058822f, 0.09916862745098037f}, - {0.7257411764705881f, 0.07745882352941175f, 0.09891764705882351f}, - {0.724549019607843f, 0.07717647058823528f, 0.09866666666666665f}, - {0.7233568627450979f, 0.07689411764705881f, 0.09841568627450979f}, - {0.7221647058823528f, 0.07661176470588234f, 0.09816470588235293f}, - {0.7209725490196077f, 0.07632941176470587f, 0.09791372549019606f}, - {0.7197803921568626f, 0.0760470588235294f, 0.0976627450980392f}, - {0.7185882352941175f, 0.07576470588235293f, 0.09741176470588234f}, - {0.7173960784313724f, 0.07548235294117644f, 0.09716078431372548f}, - {0.7162039215686273f, 0.07519999999999999f, 0.09690980392156862f}, - {0.7150117647058822f, 0.0749176470588235f, 0.09665882352941174f}, - {0.7138196078431371f, 0.07463529411764704f, 0.09640784313725488f}, - {0.712627450980392f, 0.07435294117647057f, 0.09615686274509802f}, - {0.7114352941176469f, 0.0740705882352941f, 0.09590588235294116f}, - {0.7102431372549018f, 0.07378823529411763f, 0.0956549019607843f}, - {0.7090509803921567f, 0.07350588235294116f, 0.09540392156862743f}, - {0.7078588235294117f, 0.07322352941176469f, 0.09515294117647058f}, - {0.7066666666666666f, 0.07294117647058822f, 0.0949019607843137f}, - {0.7054745098039215f, 0.07265882352941175f, 0.09465098039215684f}, - {0.7042823529411764f, 0.07237647058823528f, 0.09439999999999998f}, - {0.7030901960784313f, 0.07209411764705881f, 0.09414901960784312f}, - {0.7018980392156862f, 0.07181176470588232f, 0.09389803921568626f}, - {0.7007058823529411f, 0.07152941176470587f, 0.09364705882352939f}, - {0.699513725490196f, 0.07124705882352939f, 0.09339607843137253f}, - {0.6983215686274509f, 0.07096470588235292f, 0.09314509803921567f}, - {0.6971294117647059f, 0.07068235294117647f, 0.09289411764705884f}, - {0.6959372549019608f, 0.0704f, 0.09264313725490197f}, - {0.6947450980392157f, 0.07011764705882353f, 0.0923921568627451f}, - {0.6935529411764706f, 0.06983529411764706f, 0.09214117647058824f}, - {0.6923607843137255f, 0.0695529411764706f, 0.09189019607843138f}, - {0.6911686274509804f, 0.06927058823529413f, 0.09163921568627452f}, - {0.6899764705882353f, 0.06898823529411766f, 0.09138823529411766f}, - {0.6887843137254902f, 0.06870588235294119f, 0.09113725490196078f}, - {0.6875921568627451f, 0.06842352941176472f, 0.09088627450980392f}, - {0.6864f, 0.06814117647058825f, 0.09063529411764706f}, - {0.6852078431372549f, 0.06785882352941178f, 0.0903843137254902f}, - {0.6840156862745098f, 0.0675764705882353f, 0.09013333333333334f}, - {0.6828235294117647f, 0.06729411764705884f, 0.08988235294117647f}, - {0.6816313725490196f, 0.06701176470588235f, 0.08963137254901961f}, - {0.6804392156862745f, 0.06672941176470588f, 0.08938039215686275f}, - {0.6792470588235294f, 0.06644705882352941f, 0.08912941176470589f}, - {0.6780549019607843f, 0.06616470588235294f, 0.08887843137254903f}, - {0.6768627450980392f, 0.06588235294117648f, 0.08862745098039215f}, - {0.6756705882352941f, 0.0656f, 0.0883764705882353f}, - {0.674478431372549f, 0.06531764705882354f, 0.08812549019607843f}, - {0.6732862745098039f, 0.06503529411764707f, 0.08787450980392157f}, - {0.6720941176470588f, 0.0647529411764706f, 0.08762352941176471f}, - {0.6709019607843137f, 0.06447058823529413f, 0.08737254901960785f}, - {0.6697098039215686f, 0.06418823529411766f, 0.08712156862745099f}, - {0.6685176470588235f, 0.06390588235294117f, 0.08687058823529412f}, - {0.6673254901960785f, 0.06362352941176472f, 0.08661960784313726f}, - {0.6661333333333334f, 0.06334117647058823f, 0.0863686274509804f}, - {0.6649411764705883f, 0.06305882352941176f, 0.08611764705882353f}, - {0.6637490196078432f, 0.0627764705882353f, 0.08586666666666667f}, - {0.6625568627450981f, 0.062494117647058825f, 0.0856156862745098f}, - {0.661364705882353f, 0.062211764705882355f, 0.08536470588235294f}, - {0.6601725490196079f, 0.061929411764705886f, 0.08511372549019608f}, - {0.6589803921568628f, 0.061647058823529416f, 0.08486274509803922f}, - {0.6577882352941177f, 0.06136470588235294f, 0.08461176470588236f}, - {0.6565960784313726f, 0.06108235294117647f, 0.08436078431372548f}, - {0.6554039215686275f, 0.0608f, 0.08410980392156862f}, - {0.6542117647058824f, 0.06051764705882353f, 0.08385882352941176f}, - {0.6530196078431373f, 0.06023529411764706f, 0.0836078431372549f}, - {0.6518274509803922f, 0.05995294117647059f, 0.08335686274509804f}, - {0.6506352941176471f, 0.059670588235294114f, 0.08310588235294117f}, - {0.649443137254902f, 0.059388235294117644f, 0.08285490196078431f}, - {0.6482509803921569f, 0.059105882352941175f, 0.08260392156862745f}, - {0.6470588235294118f, 0.058823529411764705f, 0.08235294117647059f}, - {0.6451137254901961f, 0.05835294117647059f, 0.08210196078431373f}, - {0.6431686274509805f, 0.05788235294117647f, 0.08185098039215687f}, - {0.6412235294117647f, 0.05741176470588235f, 0.08159999999999999f}, - {0.639278431372549f, 0.05694117647058823f, 0.08134901960784313f}, - {0.6373333333333333f, 0.05647058823529411f, 0.08109803921568627f}, - {0.6353882352941177f, 0.055999999999999994f, 0.08084705882352941f}, - {0.633443137254902f, 0.055529411764705876f, 0.08059607843137255f}, - {0.6314980392156863f, 0.05505882352941176f, 0.08034509803921569f}, - {0.6295529411764706f, 0.054588235294117646f, 0.08009411764705882f}, - {0.6276078431372549f, 0.05411764705882353f, 0.07984313725490196f}, - {0.6256627450980392f, 0.05364705882352941f, 0.0795921568627451f}, - {0.6237176470588235f, 0.05317647058823529f, 0.07934117647058823f}, - {0.6217725490196079f, 0.05270588235294117f, 0.07909019607843137f}, - {0.6198274509803922f, 0.05223529411764705f, 0.0788392156862745f}, - {0.6178823529411764f, 0.051764705882352935f, 0.07858823529411764f}, - {0.6159372549019608f, 0.051294117647058816f, 0.07833725490196078f}, - {0.6139921568627451f, 0.0508235294117647f, 0.07808627450980392f}, - {0.6120470588235294f, 0.05035294117647058f, 0.07783529411764706f}, - {0.6101019607843137f, 0.04988235294117646f, 0.07758431372549018f}, - {0.6081568627450981f, 0.04941176470588234f, 0.07733333333333332f}, - {0.6062117647058823f, 0.048941176470588224f, 0.07708235294117646f}, - {0.6042666666666666f, 0.048470588235294106f, 0.0768313725490196f}, - {0.602321568627451f, 0.04799999999999999f, 0.07658039215686274f}, - {0.6003764705882353f, 0.047529411764705876f, 0.07632941176470588f}, - {0.5984313725490196f, 0.04705882352941175f, 0.07607843137254901f}, - {0.5964862745098038f, 0.04658823529411764f, 0.07582745098039215f}, - {0.5945411764705882f, 0.04611764705882351f, 0.07557647058823529f}, - {0.5925960784313725f, 0.0456470588235294f, 0.07532549019607843f}, - {0.5906509803921568f, 0.04517647058823528f, 0.07507450980392157f}, - {0.5887058823529412f, 0.044705882352941165f, 0.0748235294117647f}, - {0.5867607843137255f, 0.044235294117647046f, 0.07457254901960783f}, - {0.5848156862745097f, 0.04376470588235293f, 0.07432156862745097f}, - {0.582870588235294f, 0.04329411764705881f, 0.07407058823529411f}, - {0.5809254901960784f, 0.04282352941176469f, 0.07381960784313725f}, - {0.5789803921568627f, 0.04235294117647057f, 0.07356862745098039f}, - {0.577035294117647f, 0.041882352941176454f, 0.07331764705882352f}, - {0.5750901960784314f, 0.041411764705882335f, 0.07306666666666665f}, - {0.5731450980392157f, 0.04094117647058822f, 0.0728156862745098f}, - {0.5711999999999999f, 0.040470588235294105f, 0.07256470588235293f}, - {0.5692549019607842f, 0.03999999999999998f, 0.07231372549019607f}, - {0.5673098039215686f, 0.03952941176470587f, 0.0720627450980392f}, - {0.5653647058823529f, 0.03905882352941174f, 0.07181176470588234f}, - {0.5634196078431372f, 0.03858823529411763f, 0.07156078431372548f}, - {0.5614745098039216f, 0.038117647058823506f, 0.07130980392156862f}, - {0.5595294117647058f, 0.037647058823529395f, 0.07105882352941176f}, - {0.5575843137254901f, 0.03717647058823527f, 0.07080784313725488f}, - {0.5556392156862744f, 0.03670588235294116f, 0.07055686274509802f}, - {0.5536941176470588f, 0.03623529411764704f, 0.07030588235294116f}, - {0.5517490196078431f, 0.03576470588235292f, 0.0700549019607843f}, - {0.5498039215686273f, 0.0352941176470588f, 0.06980392156862744f}, - {0.5478588235294117f, 0.034823529411764684f, 0.06955294117647058f}, - {0.545913725490196f, 0.034352941176470565f, 0.06930196078431371f}, - {0.5439686274509803f, 0.03388235294117645f, 0.06905098039215685f}, - {0.5420235294117647f, 0.03341176470588233f, 0.06879999999999999f}, - {0.540078431372549f, 0.03294117647058821f, 0.06854901960784313f}, - {0.5381333333333332f, 0.0324705882352941f, 0.06829803921568627f}, - {0.5361882352941176f, 0.03199999999999997f, 0.0680470588235294f}, - {0.5342431372549019f, 0.03152941176470586f, 0.06779607843137253f}, - {0.5322980392156862f, 0.03105882352941174f, 0.06754509803921567f}, - {0.5303529411764705f, 0.03058823529411762f, 0.06729411764705881f}, - {0.5284078431372549f, 0.030117647058823502f, 0.06704313725490195f}, - {0.5264627450980391f, 0.029647058823529384f, 0.06679215686274509f}, - {0.5245176470588234f, 0.02917647058823527f, 0.06654117647058821f}, - {0.5225725490196078f, 0.02870588235294115f, 0.06629019607843135f}, - {0.5206274509803921f, 0.028235294117647032f, 0.0660392156862745f}, - {0.5186823529411764f, 0.027764705882352914f, 0.06578823529411763f}, - {0.5167372549019607f, 0.027294117647058795f, 0.06553725490196077f}, - {0.5147921568627449f, 0.026823529411764677f, 0.0652862745098039f}, - {0.5128470588235293f, 0.026352941176470558f, 0.06503529411764704f}, - {0.5109019607843136f, 0.02588235294117644f, 0.06478431372549018f}, - {0.508956862745098f, 0.02541176470588232f, 0.06453333333333332f}, - {0.5070117647058823f, 0.024941176470588203f, 0.06428235294117646f}, - {0.5050666666666666f, 0.024470588235294084f, 0.06403137254901958f}, - {0.5031215686274508f, 0.023999999999999966f, 0.06378039215686274f}, - {0.5011764705882352f, 0.023529411764705847f, 0.06352941176470586f}, - {0.4992313725490195f, 0.023058823529411736f, 0.063278431372549f}, - {0.4972862745098038f, 0.022588235294117617f, 0.06302745098039214f}, - {0.4953411764705881f, 0.0221176470588235f, 0.06277647058823528f}, - {0.49339607843137245f, 0.02164705882352938f, 0.06252549019607842f}, - {0.49145098039215673f, 0.021176470588235262f, 0.062274509803921546f}, - {0.489505882352941f, 0.020705882352941143f, 0.062023529411764686f}, - {0.4875607843137254f, 0.020235294117647025f, 0.061772549019607825f}, - {0.4856156862745097f, 0.019764705882352906f, 0.061521568627450965f}, - {0.48367058823529396f, 0.019294117647058788f, 0.0612705882352941f}, - {0.4817254901960785f, 0.018823529411764725f, 0.06101960784313726f}, - {0.47978039215686286f, 0.018352941176470607f, 0.0607686274509804f}, - {0.47783529411764714f, 0.017882352941176488f, 0.06051764705882354f}, - {0.4758901960784314f, 0.01741176470588237f, 0.06026666666666668f}, - {0.47394509803921575f, 0.01694117647058825f, 0.060015686274509816f}, - {0.4720000000000001f, 0.016470588235294133f, 0.05976470588235295f}, - {0.47005490196078437f, 0.016000000000000014f, 0.05951372549019608f}, - {0.4681098039215687f, 0.015529411764705896f, 0.05926274509803922f}, - {0.46616470588235304f, 0.015058823529411777f, 0.05901176470588236f}, - {0.4642196078431373f, 0.014588235294117659f, 0.0587607843137255f}, - {0.4622745098039216f, 0.01411764705882354f, 0.05850980392156863f}, - {0.460329411764706f, 0.013647058823529422f, 0.058258823529411766f}, - {0.45838431372549027f, 0.013176470588235303f, 0.058007843137254905f}, - {0.45643921568627455f, 0.012705882352941185f, 0.057756862745098045f}, - {0.4544941176470589f, 0.012235294117647066f, 0.057505882352941184f}, - {0.4525490196078432f, 0.011764705882352955f, 0.05725490196078432f}, - {0.4506039215686275f, 0.011294117647058836f, 0.05700392156862746f}, - {0.4486588235294118f, 0.010823529411764718f, 0.05675294117647059f}, - {0.44671372549019617f, 0.0103529411764706f, 0.05650196078431373f}, - {0.44476862745098045f, 0.009882352941176481f, 0.05625098039215687f}, - {0.4428235294117647f, 0.009411764705882363f, 0.05600000000000001f}, - {0.44087843137254906f, 0.008941176470588244f, 0.05574901960784314f}, - {0.4389333333333334f, 0.008470588235294126f, 0.05549803921568627f}, - {0.4369882352941177f, 0.008000000000000007f, 0.05524705882352941f}, - {0.435043137254902f, 0.007529411764705889f, 0.05499607843137255f}, - {0.43309803921568635f, 0.00705882352941177f, 0.05474509803921569f}, - {0.4311529411764706f, 0.006588235294117652f, 0.054494117647058825f}, - {0.4292078431372549f, 0.006117647058823533f, 0.054243137254901964f}, - {0.42726274509803924f, 0.005647058823529415f, 0.0539921568627451f}, - {0.4253176470588236f, 0.005176470588235296f, 0.05374117647058824f}, - {0.42337254901960786f, 0.004705882352941178f, 0.053490196078431376f}, - {0.4214274509803922f, 0.004235294117647059f, 0.053239215686274516f}, - {0.41948235294117653f, 0.003764705882352948f, 0.05298823529411765f}, - {0.4175372549019608f, 0.0032941176470588293f, 0.05273725490196078f}, - {0.4155921568627451f, 0.002823529411764711f, 0.05248627450980392f}, - {0.4136470588235294f, 0.0023529411764705924f, 0.05223529411764706f}, - {0.41170196078431376f, 0.001882352941176474f, 0.0519843137254902f}, - {0.40975686274509804f, 0.0014117647058823554f, 0.05173333333333333f}, - {0.4078117647058824f, 0.000941176470588237f, 0.051482352941176465f}, - {0.4058666666666667f, 0.0004705882352941185f, 0.051231372549019605f}, - {0.403921568627451f, 0.f, 0.050980392156862744f}}; - -/*(Table[Blend[ - Map[(RGBColor @@ # &), ({{255, 245, 240}, {254, 224, 210}, {252, - 187, 161}, {252, 146, 114}, {251, 106, 74}}/255), {1}], - x/1000], {x, 0, 1000, 1.}] /. RGBColor -> List) >> /tmp/1 -*/ -float palette_sequential_singlehue_red_lighter[1001][3]={{1.f, 0.9607843137254902f, 0.9411764705882353f}, - {0.9999843137254902f, 0.9604549019607843f, 0.9407058823529412f}, - {0.9999686274509804f, 0.9601254901960785f, 0.9402352941176471f}, - {0.9999529411764706f, 0.9597960784313726f, 0.939764705882353f}, - {0.9999372549019608f, 0.9594666666666667f, 0.9392941176470588f}, - {0.999921568627451f, 0.9591372549019608f, 0.9388235294117647f}, - {0.9999058823529412f, 0.958807843137255f, 0.9383529411764706f}, - {0.9998901960784313f, 0.9584784313725491f, 0.9378823529411765f}, - {0.9998745098039216f, 0.9581490196078432f, 0.9374117647058824f}, - {0.9998588235294118f, 0.9578196078431372f, 0.9369411764705882f}, - {0.9998431372549019f, 0.9574901960784314f, 0.936470588235294f}, - {0.9998274509803922f, 0.9571607843137255f, 0.9359999999999999f}, - {0.9998117647058824f, 0.9568313725490196f, 0.9355294117647058f}, - {0.9997960784313725f, 0.9565019607843137f, 0.9350588235294117f}, - {0.9997803921568628f, 0.9561725490196079f, 0.9345882352941176f}, - {0.9997647058823529f, 0.955843137254902f, 0.9341176470588235f}, - {0.9997490196078431f, 0.9555137254901961f, 0.9336470588235294f}, - {0.9997333333333334f, 0.9551843137254902f, 0.9331764705882353f}, - {0.9997176470588235f, 0.9548549019607844f, 0.9327058823529412f}, - {0.9997019607843137f, 0.9545254901960785f, 0.932235294117647f}, - {0.999686274509804f, 0.9541960784313726f, 0.9317647058823529f}, - {0.9996705882352941f, 0.9538666666666666f, 0.9312941176470588f}, - {0.9996549019607843f, 0.9535372549019608f, 0.9308235294117647f}, - {0.9996392156862746f, 0.9532078431372549f, 0.9303529411764706f}, - {0.9996235294117647f, 0.952878431372549f, 0.9298823529411765f}, - {0.9996078431372549f, 0.9525490196078432f, 0.9294117647058824f}, - {0.999592156862745f, 0.9522196078431373f, 0.9289411764705883f}, - {0.9995764705882353f, 0.9518901960784314f, 0.928470588235294f}, - {0.9995607843137255f, 0.9515607843137255f, 0.9279999999999999f}, - {0.9995450980392157f, 0.9512313725490197f, 0.9275294117647058f}, - {0.9995294117647059f, 0.9509019607843138f, 0.9270588235294117f}, - {0.9995137254901961f, 0.9505725490196079f, 0.9265882352941176f}, - {0.9994980392156863f, 0.950243137254902f, 0.9261176470588235f}, - {0.9994823529411765f, 0.9499137254901961f, 0.9256470588235294f}, - {0.9994666666666666f, 0.9495843137254902f, 0.9251764705882353f}, - {0.9994509803921569f, 0.9492549019607843f, 0.9247058823529412f}, - {0.9994352941176471f, 0.9489254901960784f, 0.924235294117647f}, - {0.9994196078431372f, 0.9485960784313726f, 0.9237647058823529f}, - {0.9994039215686275f, 0.9482666666666667f, 0.9232941176470588f}, - {0.9993882352941177f, 0.9479372549019608f, 0.9228235294117647f}, - {0.9993725490196078f, 0.9476078431372549f, 0.9223529411764706f}, - {0.999356862745098f, 0.9472784313725491f, 0.9218823529411765f}, - {0.9993411764705883f, 0.9469490196078432f, 0.9214117647058824f}, - {0.9993254901960784f, 0.9466196078431373f, 0.9209411764705883f}, - {0.9993098039215687f, 0.9462901960784313f, 0.9204705882352942f}, - {0.9992941176470588f, 0.9459607843137255f, 0.9199999999999999f}, - {0.999278431372549f, 0.9456313725490196f, 0.9195294117647058f}, - {0.9992627450980393f, 0.9453019607843137f, 0.9190588235294117f}, - {0.9992470588235294f, 0.9449725490196078f, 0.9185882352941176f}, - {0.9992313725490196f, 0.944643137254902f, 0.9181176470588235f}, - {0.9992156862745099f, 0.9443137254901961f, 0.9176470588235294f}, - {0.9992f, 0.9439843137254902f, 0.9171764705882353f}, - {0.9991843137254902f, 0.9436549019607843f, 0.9167058823529411f}, - {0.9991686274509803f, 0.9433254901960785f, 0.916235294117647f}, - {0.9991529411764706f, 0.9429960784313726f, 0.9157647058823529f}, - {0.9991372549019608f, 0.9426666666666667f, 0.9152941176470588f}, - {0.9991215686274509f, 0.9423372549019609f, 0.9148235294117647f}, - {0.9991058823529412f, 0.9420078431372549f, 0.9143529411764706f}, - {0.9990901960784314f, 0.941678431372549f, 0.9138823529411765f}, - {0.9990745098039215f, 0.9413490196078431f, 0.9134117647058824f}, - {0.9990588235294118f, 0.9410196078431373f, 0.9129411764705883f}, - {0.999043137254902f, 0.9406901960784314f, 0.9124705882352941f}, - {0.9990274509803921f, 0.9403607843137255f, 0.912f}, - {0.9990117647058824f, 0.9400313725490196f, 0.9115294117647058f}, - {0.9989960784313725f, 0.9397019607843138f, 0.9110588235294117f}, - {0.9989803921568627f, 0.9393725490196079f, 0.9105882352941176f}, - {0.998964705882353f, 0.939043137254902f, 0.9101176470588235f}, - {0.9989490196078431f, 0.938713725490196f, 0.9096470588235294f}, - {0.9989333333333333f, 0.9383843137254902f, 0.9091764705882353f}, - {0.9989176470588236f, 0.9380549019607843f, 0.9087058823529411f}, - {0.9989019607843137f, 0.9377254901960784f, 0.908235294117647f}, - {0.9988862745098039f, 0.9373960784313725f, 0.9077647058823529f}, - {0.9988705882352942f, 0.9370666666666667f, 0.9072941176470588f}, - {0.9988549019607843f, 0.9367372549019608f, 0.9068235294117647f}, - {0.9988392156862745f, 0.9364078431372549f, 0.9063529411764706f}, - {0.9988235294117647f, 0.936078431372549f, 0.9058823529411765f}, - {0.9988078431372549f, 0.9357490196078432f, 0.9054117647058824f}, - {0.9987921568627451f, 0.9354196078431373f, 0.9049411764705882f}, - {0.9987764705882353f, 0.9350901960784314f, 0.9044705882352941f}, - {0.9987607843137255f, 0.9347607843137256f, 0.904f}, - {0.9987450980392157f, 0.9344313725490196f, 0.9035294117647059f}, - {0.9987294117647059f, 0.9341019607843137f, 0.9030588235294117f}, - {0.9987137254901961f, 0.9337725490196078f, 0.9025882352941176f}, - {0.9986980392156862f, 0.933443137254902f, 0.9021176470588235f}, - {0.9986823529411765f, 0.9331137254901961f, 0.9016470588235294f}, - {0.9986666666666667f, 0.9327843137254902f, 0.9011764705882352f}, - {0.9986509803921568f, 0.9324549019607843f, 0.9007058823529411f}, - {0.9986352941176471f, 0.9321254901960785f, 0.900235294117647f}, - {0.9986196078431373f, 0.9317960784313726f, 0.8997647058823529f}, - {0.9986039215686274f, 0.9314666666666667f, 0.8992941176470588f}, - {0.9985882352941177f, 0.9311372549019608f, 0.8988235294117647f}, - {0.9985725490196079f, 0.930807843137255f, 0.8983529411764706f}, - {0.998556862745098f, 0.930478431372549f, 0.8978823529411765f}, - {0.9985411764705883f, 0.9301490196078431f, 0.8974117647058824f}, - {0.9985254901960784f, 0.9298196078431372f, 0.8969411764705882f}, - {0.9985098039215686f, 0.9294901960784314f, 0.8964705882352941f}, - {0.9984941176470589f, 0.9291607843137255f, 0.896f}, - {0.998478431372549f, 0.9288313725490196f, 0.8955294117647059f}, - {0.9984627450980392f, 0.9285019607843137f, 0.8950588235294117f}, - {0.9984470588235295f, 0.9281725490196079f, 0.8945882352941176f}, - {0.9984313725490196f, 0.927843137254902f, 0.8941176470588235f}, - {0.9984156862745098f, 0.9275137254901961f, 0.8936470588235293f}, - {0.9984f, 0.9271843137254903f, 0.8931764705882352f}, - {0.9983843137254902f, 0.9268549019607843f, 0.8927058823529411f}, - {0.9983686274509804f, 0.9265254901960784f, 0.892235294117647f}, - {0.9983529411764706f, 0.9261960784313725f, 0.8917647058823529f}, - {0.9983372549019608f, 0.9258666666666667f, 0.8912941176470588f}, - {0.998321568627451f, 0.9255372549019608f, 0.8908235294117647f}, - {0.9983058823529412f, 0.9252078431372549f, 0.8903529411764706f}, - {0.9982901960784314f, 0.924878431372549f, 0.8898823529411765f}, - {0.9982745098039216f, 0.9245490196078432f, 0.8894117647058823f}, - {0.9982588235294118f, 0.9242196078431373f, 0.8889411764705882f}, - {0.998243137254902f, 0.9238901960784314f, 0.8884705882352941f}, - {0.9982274509803921f, 0.9235607843137255f, 0.888f}, - {0.9982117647058824f, 0.9232313725490197f, 0.8875294117647059f}, - {0.9981960784313726f, 0.9229019607843137f, 0.8870588235294118f}, - {0.9981803921568627f, 0.9225725490196078f, 0.8865882352941177f}, - {0.998164705882353f, 0.9222431372549019f, 0.8861176470588235f}, - {0.9981490196078432f, 0.9219137254901961f, 0.8856470588235293f}, - {0.9981333333333333f, 0.9215843137254902f, 0.8851764705882352f}, - {0.9981176470588236f, 0.9212549019607843f, 0.8847058823529411f}, - {0.9981019607843137f, 0.9209254901960784f, 0.884235294117647f}, - {0.9980862745098039f, 0.9205960784313726f, 0.8837647058823529f}, - {0.9980705882352942f, 0.9202666666666667f, 0.8832941176470588f}, - {0.9980549019607843f, 0.9199372549019608f, 0.8828235294117647f}, - {0.9980392156862745f, 0.919607843137255f, 0.8823529411764706f}, - {0.9980235294117648f, 0.919278431372549f, 0.8818823529411765f}, - {0.9980078431372549f, 0.9189490196078431f, 0.8814117647058823f}, - {0.9979921568627451f, 0.9186196078431372f, 0.8809411764705882f}, - {0.9979764705882354f, 0.9182901960784313f, 0.8804705882352941f}, - {0.9979607843137255f, 0.9179607843137255f, 0.88f}, - {0.9979450980392157f, 0.9176313725490196f, 0.8795294117647059f}, - {0.9979294117647058f, 0.9173019607843137f, 0.8790588235294118f}, - {0.9979137254901961f, 0.9169725490196079f, 0.8785882352941177f}, - {0.9978980392156863f, 0.916643137254902f, 0.8781176470588234f}, - {0.9978823529411764f, 0.9163137254901961f, 0.8776470588235293f}, - {0.9978666666666667f, 0.9159843137254902f, 0.8771764705882352f}, - {0.9978509803921569f, 0.9156549019607844f, 0.8767058823529411f}, - {0.997835294117647f, 0.9153254901960785f, 0.876235294117647f}, - {0.9978196078431373f, 0.9149960784313725f, 0.8757647058823529f}, - {0.9978039215686274f, 0.9146666666666666f, 0.8752941176470588f}, - {0.9977882352941176f, 0.9143372549019608f, 0.8748235294117647f}, - {0.9977725490196079f, 0.9140078431372549f, 0.8743529411764706f}, - {0.997756862745098f, 0.913678431372549f, 0.8738823529411764f}, - {0.9977411764705882f, 0.9133490196078431f, 0.8734117647058823f}, - {0.9977254901960785f, 0.9130196078431373f, 0.8729411764705882f}, - {0.9977098039215686f, 0.9126901960784314f, 0.8724705882352941f}, - {0.9976941176470588f, 0.9123607843137255f, 0.872f}, - {0.9976784313725491f, 0.9120313725490197f, 0.8715294117647059f}, - {0.9976627450980392f, 0.9117019607843138f, 0.8710588235294118f}, - {0.9976470588235294f, 0.9113725490196078f, 0.8705882352941177f}, - {0.9976313725490196f, 0.9110431372549019f, 0.8701176470588236f}, - {0.9976156862745098f, 0.910713725490196f, 0.8696470588235294f}, - {0.9976f, 0.9103843137254902f, 0.8691764705882352f}, - {0.9975843137254902f, 0.9100549019607843f, 0.8687058823529411f}, - {0.9975686274509804f, 0.9097254901960784f, 0.868235294117647f}, - {0.9975529411764706f, 0.9093960784313726f, 0.8677647058823529f}, - {0.9975372549019608f, 0.9090666666666667f, 0.8672941176470588f}, - {0.997521568627451f, 0.9087372549019608f, 0.8668235294117647f}, - {0.9975058823529411f, 0.9084078431372549f, 0.8663529411764705f}, - {0.9974901960784314f, 0.9080784313725491f, 0.8658823529411764f}, - {0.9974745098039216f, 0.9077490196078432f, 0.8654117647058823f}, - {0.9974588235294117f, 0.9074196078431372f, 0.8649411764705882f}, - {0.997443137254902f, 0.9070901960784313f, 0.8644705882352941f}, - {0.9974274509803922f, 0.9067607843137255f, 0.864f}, - {0.9974117647058823f, 0.9064313725490196f, 0.8635294117647059f}, - {0.9973960784313726f, 0.9061019607843137f, 0.8630588235294118f}, - {0.9973803921568628f, 0.9057725490196078f, 0.8625882352941177f}, - {0.9973647058823529f, 0.905443137254902f, 0.8621176470588234f}, - {0.9973490196078432f, 0.9051137254901961f, 0.8616470588235294f}, - {0.9973333333333333f, 0.9047843137254902f, 0.8611764705882352f}, - {0.9973176470588235f, 0.9044549019607843f, 0.8607058823529411f}, - {0.9973019607843138f, 0.9041254901960785f, 0.860235294117647f}, - {0.9972862745098039f, 0.9037960784313726f, 0.8597647058823529f}, - {0.9972705882352941f, 0.9034666666666666f, 0.8592941176470588f}, - {0.9972549019607844f, 0.9031372549019607f, 0.8588235294117647f}, - {0.9972392156862745f, 0.9028078431372549f, 0.8583529411764705f}, - {0.9972235294117647f, 0.902478431372549f, 0.8578823529411764f}, - {0.9972078431372549f, 0.9021490196078431f, 0.8574117647058823f}, - {0.9971921568627451f, 0.9018196078431373f, 0.8569411764705882f}, - {0.9971764705882353f, 0.9014901960784314f, 0.8564705882352941f}, - {0.9971607843137255f, 0.9011607843137255f, 0.856f}, - {0.9971450980392157f, 0.9008313725490196f, 0.8555294117647059f}, - {0.9971294117647059f, 0.9005019607843138f, 0.8550588235294118f}, - {0.9971137254901961f, 0.9001725490196079f, 0.8545882352941176f}, - {0.9970980392156863f, 0.899843137254902f, 0.8541176470588235f}, - {0.9970823529411765f, 0.899513725490196f, 0.8536470588235294f}, - {0.9970666666666667f, 0.8991843137254902f, 0.8531764705882352f}, - {0.9970509803921569f, 0.8988549019607843f, 0.8527058823529412f}, - {0.997035294117647f, 0.8985254901960784f, 0.852235294117647f}, - {0.9970196078431373f, 0.8981960784313725f, 0.8517647058823529f}, - {0.9970039215686275f, 0.8978666666666667f, 0.8512941176470588f}, - {0.9969882352941176f, 0.8975372549019608f, 0.8508235294117646f}, - {0.9969725490196079f, 0.8972078431372549f, 0.8503529411764705f}, - {0.9969568627450981f, 0.896878431372549f, 0.8498823529411764f}, - {0.9969411764705882f, 0.8965490196078432f, 0.8494117647058823f}, - {0.9969254901960785f, 0.8962196078431373f, 0.8489411764705882f}, - {0.9969098039215687f, 0.8958901960784313f, 0.8484705882352941f}, - {0.9968941176470588f, 0.8955607843137254f, 0.848f}, - {0.9968784313725491f, 0.8952313725490196f, 0.8475294117647059f}, - {0.9968627450980392f, 0.8949019607843137f, 0.8470588235294118f}, - {0.9968470588235294f, 0.8945725490196078f, 0.8465882352941176f}, - {0.9968313725490197f, 0.894243137254902f, 0.8461176470588235f}, - {0.9968156862745098f, 0.8939137254901961f, 0.8456470588235294f}, - {0.9968f, 0.8935843137254902f, 0.8451764705882352f}, - {0.9967843137254903f, 0.8932549019607843f, 0.8447058823529412f}, - {0.9967686274509804f, 0.8929254901960784f, 0.844235294117647f}, - {0.9967529411764706f, 0.8925960784313726f, 0.8437647058823529f}, - {0.9967372549019607f, 0.8922666666666667f, 0.8432941176470587f}, - {0.996721568627451f, 0.8919372549019607f, 0.8428235294117646f}, - {0.9967058823529412f, 0.8916078431372549f, 0.8423529411764705f}, - {0.9966901960784313f, 0.891278431372549f, 0.8418823529411764f}, - {0.9966745098039216f, 0.8909490196078431f, 0.8414117647058823f}, - {0.9966588235294118f, 0.8906196078431372f, 0.8409411764705882f}, - {0.996643137254902f, 0.8902901960784314f, 0.8404705882352941f}, - {0.9966274509803922f, 0.8899607843137255f, 0.84f}, - {0.9966117647058824f, 0.8896313725490196f, 0.8395294117647059f}, - {0.9965960784313725f, 0.8893019607843137f, 0.8390588235294117f}, - {0.9965803921568628f, 0.8889725490196079f, 0.8385882352941176f}, - {0.9965647058823529f, 0.888643137254902f, 0.8381176470588235f}, - {0.9965490196078431f, 0.888313725490196f, 0.8376470588235294f}, - {0.9965333333333334f, 0.8879843137254901f, 0.8371764705882353f}, - {0.9965176470588235f, 0.8876549019607843f, 0.8367058823529412f}, - {0.9965019607843137f, 0.8873254901960784f, 0.836235294117647f}, - {0.996486274509804f, 0.8869960784313725f, 0.8357647058823529f}, - {0.9964705882352941f, 0.8866666666666667f, 0.8352941176470587f}, - {0.9964549019607843f, 0.8863372549019608f, 0.8348235294117646f}, - {0.9964392156862745f, 0.8860078431372549f, 0.8343529411764705f}, - {0.9964235294117647f, 0.885678431372549f, 0.8338823529411764f}, - {0.996407843137255f, 0.8853490196078431f, 0.8334117647058823f}, - {0.9963921568627451f, 0.8850196078431373f, 0.8329411764705882f}, - {0.9963764705882353f, 0.8846901960784314f, 0.8324705882352941f}, - {0.9963607843137255f, 0.8843607843137254f, 0.832f}, - {0.9963450980392157f, 0.8840313725490196f, 0.8315294117647059f}, - {0.9963294117647059f, 0.8837019607843137f, 0.8310588235294117f}, - {0.9963137254901961f, 0.8833725490196078f, 0.8305882352941176f}, - {0.9962980392156863f, 0.8830431372549019f, 0.8301176470588235f}, - {0.9962823529411765f, 0.8827137254901961f, 0.8296470588235294f}, - {0.9962666666666666f, 0.8823843137254902f, 0.8291764705882353f}, - {0.9962509803921569f, 0.8820549019607843f, 0.8287058823529412f}, - {0.9962352941176471f, 0.8817254901960784f, 0.8282352941176471f}, - {0.9962196078431372f, 0.8813960784313726f, 0.827764705882353f}, - {0.9962039215686275f, 0.8810666666666667f, 0.8272941176470587f}, - {0.9961882352941177f, 0.8807372549019608f, 0.8268235294117646f}, - {0.9961725490196078f, 0.8804078431372548f, 0.8263529411764705f}, - {0.9961568627450981f, 0.880078431372549f, 0.8258823529411764f}, - {0.9961411764705882f, 0.8797490196078431f, 0.8254117647058823f}, - {0.9961254901960784f, 0.8794196078431372f, 0.8249411764705882f}, - {0.9961098039215687f, 0.8790901960784314f, 0.8244705882352941f}, - {0.9960941176470588f, 0.8787607843137255f, 0.824f}, - {0.996078431372549f, 0.8784313725490196f, 0.8235294117647058f}, - {0.9960470588235294f, 0.8778509803921568f, 0.8227607843137255f}, - {0.9960156862745099f, 0.8772705882352941f, 0.8219921568627451f}, - {0.9959843137254902f, 0.8766901960784313f, 0.8212235294117647f}, - {0.9959529411764706f, 0.8761098039215686f, 0.8204549019607843f}, - {0.995921568627451f, 0.8755294117647059f, 0.8196862745098039f}, - {0.9958901960784314f, 0.8749490196078431f, 0.8189176470588235f}, - {0.9958588235294118f, 0.8743686274509804f, 0.8181490196078431f}, - {0.9958274509803922f, 0.8737882352941176f, 0.8173803921568628f}, - {0.9957960784313725f, 0.8732078431372549f, 0.8166117647058823f}, - {0.995764705882353f, 0.8726274509803922f, 0.8158431372549019f}, - {0.9957333333333334f, 0.8720470588235294f, 0.8150745098039215f}, - {0.9957019607843137f, 0.8714666666666666f, 0.8143058823529411f}, - {0.9956705882352941f, 0.8708862745098039f, 0.8135372549019607f}, - {0.9956392156862746f, 0.8703058823529412f, 0.8127686274509803f}, - {0.9956078431372549f, 0.8697254901960784f, 0.8119999999999999f}, - {0.9955764705882353f, 0.8691450980392157f, 0.8112313725490196f}, - {0.9955450980392156f, 0.8685647058823529f, 0.8104627450980392f}, - {0.9955137254901961f, 0.8679843137254901f, 0.8096941176470588f}, - {0.9954823529411765f, 0.8674039215686274f, 0.8089254901960784f}, - {0.9954509803921568f, 0.8668235294117647f, 0.808156862745098f}, - {0.9954196078431373f, 0.866243137254902f, 0.8073882352941176f}, - {0.9953882352941177f, 0.8656627450980392f, 0.8066196078431372f}, - {0.995356862745098f, 0.8650823529411764f, 0.8058509803921569f}, - {0.9953254901960784f, 0.8645019607843137f, 0.8050823529411764f}, - {0.9952941176470589f, 0.863921568627451f, 0.804313725490196f}, - {0.9952627450980392f, 0.8633411764705882f, 0.8035450980392156f}, - {0.9952313725490196f, 0.8627607843137255f, 0.8027764705882352f}, - {0.9952f, 0.8621803921568627f, 0.8020078431372548f}, - {0.9951686274509804f, 0.8615999999999999f, 0.8012392156862744f}, - {0.9951372549019608f, 0.8610196078431372f, 0.800470588235294f}, - {0.9951058823529412f, 0.8604392156862745f, 0.7997019607843137f}, - {0.9950745098039215f, 0.8598588235294118f, 0.7989333333333333f}, - {0.995043137254902f, 0.859278431372549f, 0.7981647058823529f}, - {0.9950117647058824f, 0.8586980392156862f, 0.7973960784313725f}, - {0.9949803921568627f, 0.8581176470588235f, 0.7966274509803921f}, - {0.9949490196078431f, 0.8575372549019608f, 0.7958588235294117f}, - {0.9949176470588236f, 0.856956862745098f, 0.7950901960784313f}, - {0.9948862745098039f, 0.8563764705882353f, 0.794321568627451f}, - {0.9948549019607843f, 0.8557960784313725f, 0.7935529411764706f}, - {0.9948235294117648f, 0.8552156862745098f, 0.7927843137254902f}, - {0.9947921568627451f, 0.854635294117647f, 0.7920156862745098f}, - {0.9947607843137255f, 0.8540549019607843f, 0.7912470588235294f}, - {0.9947294117647059f, 0.8534745098039216f, 0.790478431372549f}, - {0.9946980392156863f, 0.8528941176470588f, 0.7897098039215686f}, - {0.9946666666666667f, 0.852313725490196f, 0.7889411764705883f}, - {0.9946352941176471f, 0.8517333333333333f, 0.7881725490196079f}, - {0.9946039215686274f, 0.8511529411764706f, 0.7874039215686274f}, - {0.9945725490196079f, 0.8505725490196079f, 0.786635294117647f}, - {0.9945411764705883f, 0.8499921568627451f, 0.7858666666666666f}, - {0.9945098039215686f, 0.8494117647058823f, 0.7850980392156862f}, - {0.994478431372549f, 0.8488313725490196f, 0.7843294117647058f}, - {0.9944470588235295f, 0.8482509803921569f, 0.7835607843137254f}, - {0.9944156862745098f, 0.8476705882352941f, 0.7827921568627451f}, - {0.9943843137254902f, 0.8470901960784314f, 0.7820235294117647f}, - {0.9943529411764707f, 0.8465098039215686f, 0.7812549019607843f}, - {0.994321568627451f, 0.8459294117647058f, 0.7804862745098039f}, - {0.9942901960784314f, 0.8453490196078431f, 0.7797176470588235f}, - {0.9942588235294118f, 0.8447686274509804f, 0.7789490196078431f}, - {0.9942274509803922f, 0.8441882352941177f, 0.7781803921568627f}, - {0.9941960784313726f, 0.8436078431372549f, 0.7774117647058824f}, - {0.994164705882353f, 0.8430274509803921f, 0.776643137254902f}, - {0.9941333333333333f, 0.8424470588235294f, 0.7758745098039215f}, - {0.9941019607843138f, 0.8418666666666667f, 0.7751058823529411f}, - {0.9940705882352942f, 0.8412862745098039f, 0.7743372549019607f}, - {0.9940392156862745f, 0.8407058823529412f, 0.7735686274509803f}, - {0.9940078431372549f, 0.8401254901960784f, 0.7727999999999999f}, - {0.9939764705882354f, 0.8395450980392156f, 0.7720313725490195f}, - {0.9939450980392157f, 0.838964705882353f, 0.7712627450980392f}, - {0.9939137254901961f, 0.8383843137254902f, 0.7704941176470588f}, - {0.9938823529411764f, 0.8378039215686274f, 0.7697254901960784f}, - {0.9938509803921569f, 0.8372235294117647f, 0.768956862745098f}, - {0.9938196078431373f, 0.8366431372549019f, 0.7681882352941176f}, - {0.9937882352941176f, 0.8360627450980391f, 0.7674196078431372f}, - {0.9937568627450981f, 0.8354823529411765f, 0.7666509803921568f}, - {0.9937254901960785f, 0.8349019607843137f, 0.7658823529411765f}, - {0.9936941176470588f, 0.834321568627451f, 0.7651137254901961f}, - {0.9936627450980392f, 0.8337411764705882f, 0.7643450980392157f}, - {0.9936313725490197f, 0.8331607843137254f, 0.7635764705882353f}, - {0.9936f, 0.8325803921568627f, 0.7628078431372549f}, - {0.9935686274509804f, 0.832f, 0.7620392156862744f}, - {0.9935372549019608f, 0.8314196078431372f, 0.761270588235294f}, - {0.9935058823529412f, 0.8308392156862745f, 0.7605019607843136f}, - {0.9934745098039216f, 0.8302588235294117f, 0.7597333333333333f}, - {0.993443137254902f, 0.8296784313725489f, 0.7589647058823529f}, - {0.9934117647058823f, 0.8290980392156863f, 0.7581960784313725f}, - {0.9933803921568628f, 0.8285176470588235f, 0.7574274509803921f}, - {0.9933490196078432f, 0.8279372549019608f, 0.7566588235294117f}, - {0.9933176470588235f, 0.827356862745098f, 0.7558901960784313f}, - {0.9932862745098039f, 0.8267764705882352f, 0.755121568627451f}, - {0.9932549019607844f, 0.8261960784313725f, 0.7543529411764706f}, - {0.9932235294117647f, 0.8256156862745098f, 0.7535843137254902f}, - {0.9931921568627451f, 0.825035294117647f, 0.7528156862745098f}, - {0.9931607843137256f, 0.8244549019607843f, 0.7520470588235294f}, - {0.9931294117647059f, 0.8238745098039215f, 0.7512784313725489f}, - {0.9930980392156863f, 0.8232941176470587f, 0.7505098039215685f}, - {0.9930666666666667f, 0.8227137254901961f, 0.7497411764705881f}, - {0.9930352941176471f, 0.8221333333333333f, 0.7489725490196077f}, - {0.9930039215686275f, 0.8215529411764706f, 0.7482039215686274f}, - {0.9929725490196079f, 0.8209725490196078f, 0.747435294117647f}, - {0.9929411764705882f, 0.820392156862745f, 0.7466666666666666f}, - {0.9929098039215687f, 0.8198117647058824f, 0.7458980392156862f}, - {0.992878431372549f, 0.8192313725490196f, 0.7451294117647058f}, - {0.9928470588235294f, 0.8186509803921569f, 0.7443607843137254f}, - {0.9928156862745098f, 0.8180705882352941f, 0.743592156862745f}, - {0.9927843137254903f, 0.8174901960784313f, 0.7428235294117647f}, - {0.9927529411764706f, 0.8169098039215686f, 0.7420549019607843f}, - {0.992721568627451f, 0.8163294117647059f, 0.7412862745098039f}, - {0.9926901960784315f, 0.8157490196078431f, 0.7405176470588235f}, - {0.9926588235294118f, 0.8151686274509804f, 0.7397490196078431f}, - {0.9926274509803922f, 0.8145882352941176f, 0.7389803921568627f}, - {0.9925960784313725f, 0.8140078431372548f, 0.7382117647058823f}, - {0.992564705882353f, 0.8134274509803922f, 0.737443137254902f}, - {0.9925333333333334f, 0.8128470588235294f, 0.7366745098039216f}, - {0.9925019607843137f, 0.8122666666666667f, 0.7359058823529412f}, - {0.9924705882352941f, 0.8116862745098039f, 0.7351372549019608f}, - {0.9924392156862746f, 0.8111058823529411f, 0.7343686274509804f}, - {0.9924078431372549f, 0.8105254901960784f, 0.7336f}, - {0.9923764705882353f, 0.8099450980392157f, 0.7328313725490195f}, - {0.9923450980392157f, 0.8093647058823529f, 0.7320627450980391f}, - {0.9923137254901961f, 0.8087843137254902f, 0.7312941176470588f}, - {0.9922823529411765f, 0.8082039215686274f, 0.7305254901960784f}, - {0.9922509803921569f, 0.8076235294117646f, 0.729756862745098f}, - {0.9922196078431372f, 0.807043137254902f, 0.7289882352941176f}, - {0.9921882352941177f, 0.8064627450980392f, 0.7282196078431372f}, - {0.9921568627450981f, 0.8058823529411765f, 0.7274509803921568f}, - {0.9921254901960784f, 0.8053019607843137f, 0.7266823529411764f}, - {0.9920941176470589f, 0.8047215686274509f, 0.7259137254901961f}, - {0.9920627450980393f, 0.8041411764705882f, 0.7251450980392157f}, - {0.9920313725490196f, 0.8035607843137255f, 0.7243764705882353f}, - {0.992f, 0.8029803921568627f, 0.7236078431372549f}, - {0.9919686274509805f, 0.8024f, 0.7228392156862745f}, - {0.9919372549019608f, 0.8018196078431372f, 0.7220705882352941f}, - {0.9919058823529412f, 0.8012392156862744f, 0.7213019607843136f}, - {0.9918745098039216f, 0.8006588235294118f, 0.7205333333333332f}, - {0.991843137254902f, 0.800078431372549f, 0.7197647058823529f}, - {0.9918117647058824f, 0.7994980392156863f, 0.7189960784313725f}, - {0.9917803921568628f, 0.7989176470588235f, 0.7182274509803921f}, - {0.9917490196078431f, 0.7983372549019607f, 0.7174588235294117f}, - {0.9917176470588236f, 0.7977568627450979f, 0.7166901960784313f}, - {0.991686274509804f, 0.7971764705882353f, 0.7159215686274509f}, - {0.9916549019607843f, 0.7965960784313725f, 0.7151529411764705f}, - {0.9916235294117647f, 0.7960156862745098f, 0.7143843137254902f}, - {0.9915921568627452f, 0.795435294117647f, 0.7136156862745098f}, - {0.9915607843137255f, 0.7948549019607842f, 0.7128470588235294f}, - {0.9915294117647059f, 0.7942745098039216f, 0.712078431372549f}, - {0.9914980392156864f, 0.7936941176470588f, 0.7113098039215686f}, - {0.9914666666666667f, 0.793113725490196f, 0.7105411764705882f}, - {0.9914352941176471f, 0.7925333333333333f, 0.7097725490196078f}, - {0.9914039215686274f, 0.7919529411764705f, 0.7090039215686275f}, - {0.9913725490196079f, 0.7913725490196077f, 0.7082352941176471f}, - {0.9913411764705883f, 0.7907921568627451f, 0.7074666666666666f}, - {0.9913098039215686f, 0.7902117647058823f, 0.7066980392156862f}, - {0.991278431372549f, 0.7896313725490196f, 0.7059294117647058f}, - {0.9912470588235295f, 0.7890509803921568f, 0.7051607843137254f}, - {0.9912156862745098f, 0.788470588235294f, 0.704392156862745f}, - {0.9911843137254902f, 0.7878901960784314f, 0.7036235294117646f}, - {0.9911529411764706f, 0.7873098039215686f, 0.7028549019607843f}, - {0.991121568627451f, 0.7867294117647058f, 0.7020862745098039f}, - {0.9910901960784314f, 0.7861490196078431f, 0.7013176470588235f}, - {0.9910588235294118f, 0.7855686274509803f, 0.7005490196078431f}, - {0.9910274509803921f, 0.7849882352941175f, 0.6997803921568627f}, - {0.9909960784313726f, 0.7844078431372549f, 0.6990117647058823f}, - {0.990964705882353f, 0.7838274509803921f, 0.698243137254902f}, - {0.9909333333333333f, 0.7832470588235294f, 0.6974745098039214f}, - {0.9909019607843138f, 0.7826666666666666f, 0.6967058823529411f}, - {0.9908705882352942f, 0.7820862745098038f, 0.6959372549019607f}, - {0.9908392156862745f, 0.7815058823529412f, 0.6951686274509804f}, - {0.9908078431372549f, 0.7809254901960784f, 0.6944f}, - {0.9907764705882354f, 0.7803450980392157f, 0.6936313725490196f}, - {0.9907450980392157f, 0.7797647058823529f, 0.6928627450980391f}, - {0.9907137254901961f, 0.7791843137254901f, 0.6920941176470587f}, - {0.9906823529411765f, 0.7786039215686275f, 0.6913254901960784f}, - {0.9906509803921569f, 0.7780235294117647f, 0.690556862745098f}, - {0.9906196078431373f, 0.7774431372549019f, 0.6897882352941176f}, - {0.9905882352941177f, 0.7768627450980392f, 0.6890196078431372f}, - {0.990556862745098f, 0.7762823529411764f, 0.6882509803921568f}, - {0.9905254901960785f, 0.7757019607843136f, 0.6874823529411764f}, - {0.9904941176470589f, 0.775121568627451f, 0.686713725490196f}, - {0.9904627450980392f, 0.7745411764705882f, 0.6859450980392157f}, - {0.9904313725490197f, 0.7739607843137255f, 0.6851764705882353f}, - {0.9904000000000001f, 0.7733803921568627f, 0.6844078431372549f}, - {0.9903686274509804f, 0.7727999999999999f, 0.6836392156862745f}, - {0.9903372549019608f, 0.7722196078431373f, 0.6828705882352941f}, - {0.9903058823529413f, 0.7716392156862745f, 0.6821019607843137f}, - {0.9902745098039216f, 0.7710588235294117f, 0.6813333333333333f}, - {0.990243137254902f, 0.770478431372549f, 0.680564705882353f}, - {0.9902117647058823f, 0.7698980392156862f, 0.6797960784313726f}, - {0.9901803921568628f, 0.7693176470588234f, 0.6790274509803922f}, - {0.9901490196078432f, 0.7687372549019608f, 0.6782588235294118f}, - {0.9901176470588235f, 0.768156862745098f, 0.6774901960784313f}, - {0.9900862745098039f, 0.7675764705882353f, 0.6767215686274509f}, - {0.9900549019607844f, 0.7669960784313725f, 0.6759529411764705f}, - {0.9900235294117647f, 0.7664156862745097f, 0.6751843137254901f}, - {0.9899921568627451f, 0.7658352941176471f, 0.6744156862745098f}, - {0.9899607843137255f, 0.7652549019607843f, 0.6736470588235294f}, - {0.989929411764706f, 0.7646745098039215f, 0.672878431372549f}, - {0.9898980392156863f, 0.7640941176470588f, 0.6721098039215686f}, - {0.9898666666666667f, 0.763513725490196f, 0.6713411764705882f}, - {0.9898352941176471f, 0.7629333333333332f, 0.6705725490196078f}, - {0.9898039215686275f, 0.7623529411764706f, 0.6698039215686274f}, - {0.9897725490196079f, 0.7617725490196078f, 0.6690352941176471f}, - {0.9897411764705882f, 0.7611921568627451f, 0.6682666666666666f}, - {0.9897098039215687f, 0.7606117647058823f, 0.6674980392156862f}, - {0.9896784313725491f, 0.7600313725490195f, 0.6667294117647058f}, - {0.9896470588235294f, 0.7594509803921567f, 0.6659607843137254f}, - {0.9896156862745098f, 0.7588705882352941f, 0.665192156862745f}, - {0.9895843137254903f, 0.7582901960784313f, 0.6644235294117646f}, - {0.9895529411764706f, 0.7577098039215686f, 0.6636549019607842f}, - {0.989521568627451f, 0.7571294117647058f, 0.6628862745098039f}, - {0.9894901960784314f, 0.756549019607843f, 0.6621176470588235f}, - {0.9894588235294118f, 0.7559686274509804f, 0.6613490196078431f}, - {0.9894274509803922f, 0.7553882352941176f, 0.6605803921568627f}, - {0.9893960784313726f, 0.7548078431372548f, 0.6598117647058823f}, - {0.9893647058823529f, 0.7542274509803921f, 0.6590431372549019f}, - {0.9893333333333334f, 0.7536470588235293f, 0.6582745098039215f}, - {0.9893019607843138f, 0.7530666666666666f, 0.6575058823529412f}, - {0.9892705882352941f, 0.7524862745098039f, 0.6567372549019608f}, - {0.9892392156862746f, 0.7519058823529411f, 0.6559686274509804f}, - {0.989207843137255f, 0.7513254901960784f, 0.6552f}, - {0.9891764705882353f, 0.7507450980392156f, 0.6544313725490196f}, - {0.9891450980392157f, 0.7501647058823528f, 0.6536627450980392f}, - {0.9891137254901962f, 0.7495843137254902f, 0.6528941176470587f}, - {0.9890823529411765f, 0.7490039215686274f, 0.6521254901960784f}, - {0.9890509803921569f, 0.7484235294117646f, 0.651356862745098f}, - {0.9890196078431372f, 0.7478431372549019f, 0.6505882352941176f}, - {0.9889882352941177f, 0.7472627450980391f, 0.6498196078431372f}, - {0.9889568627450981f, 0.7466823529411764f, 0.6490509803921568f}, - {0.9889254901960784f, 0.7461019607843137f, 0.6482823529411764f}, - {0.9888941176470588f, 0.7455215686274509f, 0.647513725490196f}, - {0.9888627450980393f, 0.7449411764705882f, 0.6467450980392156f}, - {0.9888313725490196f, 0.7443607843137254f, 0.6459764705882353f}, - {0.9888f, 0.7437803921568626f, 0.6452078431372549f}, - {0.9887686274509805f, 0.7432f, 0.6444392156862745f}, - {0.9887372549019608f, 0.7426196078431372f, 0.6436705882352941f}, - {0.9887058823529412f, 0.7420392156862745f, 0.6429019607843137f}, - {0.9886745098039216f, 0.7414588235294117f, 0.6421333333333333f}, - {0.988643137254902f, 0.7408784313725489f, 0.641364705882353f}, - {0.9886117647058824f, 0.7402980392156863f, 0.6405960784313726f}, - {0.9885803921568628f, 0.7397176470588235f, 0.6398274509803922f}, - {0.9885490196078431f, 0.7391372549019608f, 0.6390588235294117f}, - {0.9885176470588236f, 0.738556862745098f, 0.6382901960784313f}, - {0.988486274509804f, 0.7379764705882352f, 0.6375215686274509f}, - {0.9884549019607843f, 0.7373960784313724f, 0.6367529411764705f}, - {0.9884235294117647f, 0.7368156862745098f, 0.6359843137254901f}, - {0.9883921568627452f, 0.736235294117647f, 0.6352156862745097f}, - {0.9883607843137255f, 0.7356549019607843f, 0.6344470588235294f}, - {0.9883294117647059f, 0.7350745098039215f, 0.633678431372549f}, - {0.9882980392156863f, 0.7344941176470587f, 0.6329098039215686f}, - {0.9882666666666667f, 0.7339137254901961f, 0.6321411764705882f}, - {0.9882352941176471f, 0.7333333333333333f, 0.6313725490196078f}, - {0.9882352941176471f, 0.7326901960784313f, 0.6306352941176471f}, - {0.9882352941176471f, 0.7320470588235294f, 0.6298980392156862f}, - {0.9882352941176471f, 0.7314039215686274f, 0.6291607843137255f}, - {0.9882352941176471f, 0.7307607843137255f, 0.6284235294117647f}, - {0.9882352941176471f, 0.7301176470588234f, 0.6276862745098039f}, - {0.9882352941176471f, 0.7294745098039215f, 0.6269490196078431f}, - {0.9882352941176471f, 0.7288313725490195f, 0.6262117647058824f}, - {0.9882352941176471f, 0.7281882352941176f, 0.6254745098039215f}, - {0.9882352941176471f, 0.7275450980392156f, 0.6247372549019607f}, - {0.9882352941176471f, 0.7269019607843137f, 0.624f}, - {0.9882352941176471f, 0.7262588235294117f, 0.6232627450980391f}, - {0.9882352941176471f, 0.7256156862745098f, 0.6225254901960784f}, - {0.9882352941176471f, 0.7249725490196078f, 0.6217882352941176f}, - {0.9882352941176471f, 0.7243294117647058f, 0.6210509803921568f}, - {0.9882352941176471f, 0.7236862745098038f, 0.620313725490196f}, - {0.9882352941176471f, 0.7230431372549019f, 0.6195764705882353f}, - {0.9882352941176471f, 0.7223999999999999f, 0.6188392156862745f}, - {0.9882352941176471f, 0.721756862745098f, 0.6181019607843137f}, - {0.9882352941176471f, 0.721113725490196f, 0.6173647058823529f}, - {0.9882352941176471f, 0.7204705882352941f, 0.6166274509803922f}, - {0.9882352941176471f, 0.7198274509803921f, 0.6158901960784313f}, - {0.9882352941176471f, 0.7191843137254902f, 0.6151529411764706f}, - {0.9882352941176471f, 0.7185411764705881f, 0.6144156862745098f}, - {0.9882352941176471f, 0.7178980392156862f, 0.613678431372549f}, - {0.9882352941176471f, 0.7172549019607842f, 0.6129411764705882f}, - {0.9882352941176471f, 0.7166117647058823f, 0.6122039215686275f}, - {0.9882352941176471f, 0.7159686274509803f, 0.6114666666666666f}, - {0.9882352941176471f, 0.7153254901960784f, 0.6107294117647059f}, - {0.9882352941176471f, 0.7146823529411764f, 0.6099921568627451f}, - {0.9882352941176471f, 0.7140392156862745f, 0.6092549019607842f}, - {0.9882352941176471f, 0.7133960784313724f, 0.6085176470588235f}, - {0.9882352941176471f, 0.7127529411764705f, 0.6077803921568627f}, - {0.9882352941176471f, 0.7121098039215685f, 0.6070431372549019f}, - {0.9882352941176471f, 0.7114666666666666f, 0.6063058823529411f}, - {0.9882352941176471f, 0.7108235294117646f, 0.6055686274509804f}, - {0.9882352941176471f, 0.7101803921568627f, 0.6048313725490195f}, - {0.9882352941176471f, 0.7095372549019607f, 0.6040941176470588f}, - {0.9882352941176471f, 0.7088941176470588f, 0.603356862745098f}, - {0.9882352941176471f, 0.7082509803921568f, 0.6026196078431372f}, - {0.9882352941176471f, 0.7076078431372548f, 0.6018823529411764f}, - {0.9882352941176471f, 0.7069647058823528f, 0.6011450980392157f}, - {0.9882352941176471f, 0.7063215686274509f, 0.6004078431372548f}, - {0.9882352941176471f, 0.7056784313725489f, 0.5996705882352941f}, - {0.9882352941176471f, 0.705035294117647f, 0.5989333333333333f}, - {0.9882352941176471f, 0.704392156862745f, 0.5981960784313725f}, - {0.9882352941176471f, 0.7037490196078431f, 0.5974588235294117f}, - {0.9882352941176471f, 0.7031058823529411f, 0.596721568627451f}, - {0.9882352941176471f, 0.7024627450980392f, 0.5959843137254901f}, - {0.9882352941176471f, 0.7018196078431371f, 0.5952470588235294f}, - {0.9882352941176471f, 0.7011764705882352f, 0.5945098039215686f}, - {0.9882352941176471f, 0.7005333333333332f, 0.5937725490196077f}, - {0.9882352941176471f, 0.6998901960784313f, 0.593035294117647f}, - {0.9882352941176471f, 0.6992470588235293f, 0.5922980392156862f}, - {0.9882352941176471f, 0.6986039215686274f, 0.5915607843137254f}, - {0.9882352941176471f, 0.6979607843137254f, 0.5908235294117646f}, - {0.9882352941176471f, 0.6973176470588235f, 0.5900862745098039f}, - {0.9882352941176471f, 0.6966745098039215f, 0.5893490196078431f}, - {0.9882352941176471f, 0.6960313725490195f, 0.5886117647058823f}, - {0.9882352941176471f, 0.6953882352941175f, 0.5878745098039215f}, - {0.9882352941176471f, 0.6947450980392156f, 0.5871372549019608f}, - {0.9882352941176471f, 0.6941019607843136f, 0.5863999999999999f}, - {0.9882352941176471f, 0.6934588235294117f, 0.5856627450980392f}, - {0.9882352941176471f, 0.6928156862745097f, 0.5849254901960784f}, - {0.9882352941176471f, 0.6921725490196078f, 0.5841882352941176f}, - {0.9882352941176471f, 0.6915294117647058f, 0.5834509803921568f}, - {0.9882352941176471f, 0.6908862745098039f, 0.5827137254901961f}, - {0.9882352941176471f, 0.6902431372549018f, 0.5819764705882352f}, - {0.9882352941176471f, 0.6895999999999999f, 0.5812392156862745f}, - {0.9882352941176471f, 0.6889568627450979f, 0.5805019607843137f}, - {0.9882352941176471f, 0.688313725490196f, 0.5797647058823528f}, - {0.9882352941176471f, 0.687670588235294f, 0.5790274509803921f}, - {0.9882352941176471f, 0.6870274509803921f, 0.5782901960784314f}, - {0.9882352941176471f, 0.6863843137254901f, 0.5775529411764705f}, - {0.9882352941176471f, 0.6857411764705882f, 0.5768156862745097f}, - {0.9882352941176471f, 0.6850980392156862f, 0.576078431372549f}, - {0.9882352941176471f, 0.6844549019607842f, 0.5753411764705881f}, - {0.9882352941176471f, 0.6838117647058823f, 0.5746039215686275f}, - {0.9882352941176471f, 0.6831686274509804f, 0.5738666666666667f}, - {0.9882352941176471f, 0.6825254901960784f, 0.5731294117647059f}, - {0.9882352941176471f, 0.6818823529411765f, 0.5723921568627451f}, - {0.9882352941176471f, 0.6812392156862745f, 0.5716549019607844f}, - {0.9882352941176471f, 0.6805960784313725f, 0.5709176470588235f}, - {0.9882352941176471f, 0.6799529411764705f, 0.5701803921568628f}, - {0.9882352941176471f, 0.6793098039215686f, 0.569443137254902f}, - {0.9882352941176471f, 0.6786666666666666f, 0.5687058823529412f}, - {0.9882352941176471f, 0.6780235294117647f, 0.5679686274509804f}, - {0.9882352941176471f, 0.6773803921568627f, 0.5672313725490197f}, - {0.9882352941176471f, 0.6767372549019608f, 0.5664941176470588f}, - {0.9882352941176471f, 0.6760941176470588f, 0.5657568627450981f}, - {0.9882352941176471f, 0.6754509803921568f, 0.5650196078431373f}, - {0.9882352941176471f, 0.6748078431372548f, 0.5642823529411765f}, - {0.9882352941176471f, 0.6741647058823529f, 0.5635450980392157f}, - {0.9882352941176471f, 0.6735215686274509f, 0.562807843137255f}, - {0.9882352941176471f, 0.672878431372549f, 0.5620705882352941f}, - {0.9882352941176471f, 0.672235294117647f, 0.5613333333333334f}, - {0.9882352941176471f, 0.6715921568627451f, 0.5605960784313726f}, - {0.9882352941176471f, 0.6709490196078431f, 0.5598588235294117f}, - {0.9882352941176471f, 0.6703058823529411f, 0.559121568627451f}, - {0.9882352941176471f, 0.6696627450980392f, 0.5583843137254902f}, - {0.9882352941176471f, 0.6690196078431372f, 0.5576470588235294f}, - {0.9882352941176471f, 0.6683764705882352f, 0.5569098039215686f}, - {0.9882352941176471f, 0.6677333333333333f, 0.5561725490196079f}, - {0.9882352941176471f, 0.6670901960784313f, 0.555435294117647f}, - {0.9882352941176471f, 0.6664470588235294f, 0.5546980392156863f}, - {0.9882352941176471f, 0.6658039215686274f, 0.5539607843137255f}, - {0.9882352941176471f, 0.6651607843137255f, 0.5532235294117647f}, - {0.9882352941176471f, 0.6645176470588234f, 0.5524862745098039f}, - {0.9882352941176471f, 0.6638745098039215f, 0.5517490196078432f}, - {0.9882352941176471f, 0.6632313725490195f, 0.5510117647058823f}, - {0.9882352941176471f, 0.6625882352941176f, 0.5502745098039216f}, - {0.9882352941176471f, 0.6619450980392156f, 0.5495372549019608f}, - {0.9882352941176471f, 0.6613019607843137f, 0.5488f}, - {0.9882352941176471f, 0.6606588235294117f, 0.5480627450980392f}, - {0.9882352941176471f, 0.6600156862745098f, 0.5473254901960785f}, - {0.9882352941176471f, 0.6593725490196078f, 0.5465882352941176f}, - {0.9882352941176471f, 0.6587294117647058f, 0.5458509803921568f}, - {0.9882352941176471f, 0.6580862745098038f, 0.5451137254901961f}, - {0.9882352941176471f, 0.6574431372549019f, 0.5443764705882352f}, - {0.9882352941176471f, 0.6567999999999999f, 0.5436392156862745f}, - {0.9882352941176471f, 0.656156862745098f, 0.5429019607843137f}, - {0.9882352941176471f, 0.655513725490196f, 0.5421647058823529f}, - {0.9882352941176471f, 0.6548705882352941f, 0.5414274509803921f}, - {0.9882352941176471f, 0.6542274509803921f, 0.5406901960784314f}, - {0.9882352941176471f, 0.6535843137254902f, 0.5399529411764706f}, - {0.9882352941176471f, 0.6529411764705881f, 0.5392156862745098f}, - {0.9882352941176471f, 0.6522980392156862f, 0.538478431372549f}, - {0.9882352941176471f, 0.6516549019607842f, 0.5377411764705883f}, - {0.9882352941176471f, 0.6510117647058823f, 0.5370039215686274f}, - {0.9882352941176471f, 0.6503686274509803f, 0.5362666666666667f}, - {0.9882352941176471f, 0.6497254901960784f, 0.5355294117647059f}, - {0.9882352941176471f, 0.6490823529411764f, 0.5347921568627451f}, - {0.9882352941176471f, 0.6484392156862745f, 0.5340549019607843f}, - {0.9882352941176471f, 0.6477960784313725f, 0.5333176470588236f}, - {0.9882352941176471f, 0.6471529411764705f, 0.5325803921568627f}, - {0.9882352941176471f, 0.6465098039215685f, 0.531843137254902f}, - {0.9882352941176471f, 0.6458666666666666f, 0.5311058823529412f}, - {0.9882352941176471f, 0.6452235294117646f, 0.5303686274509803f}, - {0.9882352941176471f, 0.6445803921568627f, 0.5296313725490196f}, - {0.9882352941176471f, 0.6439372549019607f, 0.5288941176470588f}, - {0.9882352941176471f, 0.6432941176470588f, 0.528156862745098f}, - {0.9882352941176471f, 0.6426509803921568f, 0.5274196078431372f}, - {0.9882352941176471f, 0.6420078431372549f, 0.5266823529411765f}, - {0.9882352941176471f, 0.6413647058823528f, 0.5259450980392156f}, - {0.9882352941176471f, 0.6407215686274509f, 0.5252078431372549f}, - {0.9882352941176471f, 0.6400784313725489f, 0.5244705882352941f}, - {0.9882352941176471f, 0.639435294117647f, 0.5237333333333334f}, - {0.9882352941176471f, 0.638792156862745f, 0.5229960784313725f}, - {0.9882352941176471f, 0.6381490196078431f, 0.5222588235294118f}, - {0.9882352941176471f, 0.6375058823529411f, 0.521521568627451f}, - {0.9882352941176471f, 0.6368627450980392f, 0.5207843137254902f}, - {0.9882352941176471f, 0.6362196078431372f, 0.5200470588235294f}, - {0.9882352941176471f, 0.6355764705882352f, 0.5193098039215687f}, - {0.9882352941176471f, 0.6349333333333332f, 0.5185725490196078f}, - {0.9882352941176471f, 0.6342901960784313f, 0.5178352941176471f}, - {0.9882352941176471f, 0.6336470588235293f, 0.5170980392156863f}, - {0.9882352941176471f, 0.6330039215686274f, 0.5163607843137255f}, - {0.9882352941176471f, 0.6323607843137254f, 0.5156235294117647f}, - {0.9882352941176471f, 0.6317176470588235f, 0.514886274509804f}, - {0.9882352941176471f, 0.6310745098039215f, 0.5141490196078431f}, - {0.9882352941176471f, 0.6304313725490196f, 0.5134117647058823f}, - {0.9882352941176471f, 0.6297882352941175f, 0.5126745098039216f}, - {0.9882352941176471f, 0.6291450980392156f, 0.5119372549019607f}, - {0.9882352941176471f, 0.6285019607843136f, 0.5112f}, - {0.9882352941176471f, 0.6278588235294117f, 0.5104627450980392f}, - {0.9882352941176471f, 0.6272156862745097f, 0.5097254901960784f}, - {0.9882352941176471f, 0.6265725490196078f, 0.5089882352941176f}, - {0.9882352941176471f, 0.6259294117647058f, 0.5082509803921569f}, - {0.9882352941176471f, 0.6252862745098039f, 0.507513725490196f}, - {0.9882352941176471f, 0.624643137254902f, 0.5067764705882353f}, - {0.9882352941176471f, 0.6239999999999999f, 0.5060392156862745f}, - {0.9882352941176471f, 0.6233568627450979f, 0.5053019607843137f}, - {0.9882352941176471f, 0.622713725490196f, 0.5045647058823529f}, - {0.9882352941176471f, 0.622070588235294f, 0.5038274509803922f}, - {0.9882352941176471f, 0.6214274509803921f, 0.5030901960784313f}, - {0.9882352941176471f, 0.6207843137254901f, 0.5023529411764706f}, - {0.9882352941176471f, 0.6201411764705882f, 0.5016156862745098f}, - {0.9882352941176471f, 0.6194980392156862f, 0.500878431372549f}, - {0.9882352941176471f, 0.6188549019607843f, 0.5001411764705882f}, - {0.9882352941176471f, 0.6182117647058822f, 0.49940392156862745f}, - {0.9882352941176471f, 0.6175686274509803f, 0.49866666666666665f}, - {0.9882352941176471f, 0.6169254901960783f, 0.49792941176470584f}, - {0.9882352941176471f, 0.6162823529411764f, 0.4971921568627451f}, - {0.9882352941176471f, 0.6156392156862744f, 0.4964549019607843f}, - {0.9882352941176471f, 0.6149960784313725f, 0.4957176470588235f}, - {0.9882352941176471f, 0.6143529411764705f, 0.49498039215686274f}, - {0.9882352941176471f, 0.6137098039215686f, 0.49424313725490193f}, - {0.9882352941176471f, 0.6130666666666666f, 0.4935058823529411f}, - {0.9882352941176471f, 0.6124235294117646f, 0.4927686274509804f}, - {0.9882352941176471f, 0.6117803921568626f, 0.4920313725490196f}, - {0.9882352941176471f, 0.6111372549019607f, 0.49129411764705877f}, - {0.9882352941176471f, 0.6104941176470587f, 0.490556862745098f}, - {0.9882352941176471f, 0.6098509803921568f, 0.4898196078431372f}, - {0.9882352941176471f, 0.6092078431372548f, 0.4890823529411764f}, - {0.9882352941176471f, 0.6085647058823529f, 0.48834509803921566f}, - {0.9882352941176471f, 0.6079215686274508f, 0.48760784313725486f}, - {0.9882352941176471f, 0.607278431372549f, 0.48687058823529406f}, - {0.9882352941176471f, 0.6066352941176469f, 0.4861333333333333f}, - {0.9882352941176471f, 0.605992156862745f, 0.4853960784313725f}, - {0.9882352941176471f, 0.605349019607843f, 0.4846588235294117f}, - {0.9882352941176471f, 0.6047058823529411f, 0.48392156862745095f}, - {0.9882352941176471f, 0.6040627450980391f, 0.4831843137254902f}, - {0.9882352941176471f, 0.6034196078431372f, 0.48244705882352934f}, - {0.9882352941176471f, 0.6027764705882352f, 0.4817098039215686f}, - {0.9882352941176471f, 0.6021333333333333f, 0.4809725490196079f}, - {0.9882352941176471f, 0.6014901960784313f, 0.4802352941176471f}, - {0.9882352941176471f, 0.6008470588235294f, 0.47949803921568634f}, - {0.9882352941176471f, 0.6002039215686275f, 0.47876078431372554f}, - {0.9882352941176471f, 0.5995607843137255f, 0.47802352941176474f}, - {0.9882352941176471f, 0.5989176470588236f, 0.477286274509804f}, - {0.9882352941176471f, 0.5982745098039215f, 0.4765490196078432f}, - {0.9882352941176471f, 0.5976313725490197f, 0.4758117647058824f}, - {0.9882352941176471f, 0.5969882352941176f, 0.47507450980392163f}, - {0.9882352941176471f, 0.5963450980392156f, 0.4743372549019608f}, - {0.9882352941176471f, 0.5957019607843137f, 0.4736f}, - {0.9882352941176471f, 0.5950588235294118f, 0.47286274509803927f}, - {0.9882352941176471f, 0.5944156862745098f, 0.47212549019607847f}, - {0.9882352941176471f, 0.5937725490196079f, 0.47138823529411766f}, - {0.9882352941176471f, 0.5931294117647059f, 0.4706509803921569f}, - {0.9882352941176471f, 0.5924862745098038f, 0.4699137254901961f}, - {0.9882352941176471f, 0.591843137254902f, 0.4691764705882353f}, - {0.9882352941176471f, 0.5912f, 0.46843921568627456f}, - {0.9882352941176471f, 0.590556862745098f, 0.46770196078431375f}, - {0.9882352941176471f, 0.589913725490196f, 0.46696470588235295f}, - {0.9882352941176471f, 0.5892705882352941f, 0.4662274509803922f}, - {0.9882352941176471f, 0.5886274509803922f, 0.4654901960784314f}, - {0.9882352941176471f, 0.5879843137254902f, 0.4647529411764706f}, - {0.9882352941176471f, 0.5873411764705883f, 0.46401568627450984f}, - {0.9882352941176471f, 0.5866980392156862f, 0.4632784313725491f}, - {0.9882352941176471f, 0.5860549019607844f, 0.46254117647058823f}, - {0.9882352941176471f, 0.5854117647058823f, 0.4618039215686275f}, - {0.9882352941176471f, 0.5847686274509803f, 0.46106666666666674f}, - {0.9882352941176471f, 0.5841254901960784f, 0.4603294117647059f}, - {0.9882352941176471f, 0.5834823529411765f, 0.4595921568627451f}, - {0.9882352941176471f, 0.5828392156862745f, 0.4588549019607844f}, - {0.9882352941176471f, 0.5821960784313726f, 0.4581176470588235f}, - {0.9882352941176471f, 0.5815529411764706f, 0.45738039215686277f}, - {0.9882352941176471f, 0.5809098039215685f, 0.456643137254902f}, - {0.9882352941176471f, 0.5802666666666666f, 0.4559058823529412f}, - {0.9882352941176471f, 0.5796235294117646f, 0.4551686274509804f}, - {0.9882352941176471f, 0.5789803921568627f, 0.45443137254901966f}, - {0.9882352941176471f, 0.5783372549019608f, 0.45369411764705886f}, - {0.9882352941176471f, 0.5776941176470588f, 0.45295686274509805f}, - {0.9882352941176471f, 0.5770509803921569f, 0.4522196078431373f}, - {0.9882352941176471f, 0.5764078431372549f, 0.4514823529411765f}, - {0.9882352941176471f, 0.575764705882353f, 0.4507450980392157f}, - {0.9882352941176471f, 0.5751215686274509f, 0.45000784313725495f}, - {0.9882352941176471f, 0.574478431372549f, 0.44927058823529414f}, - {0.9882352941176471f, 0.573835294117647f, 0.44853333333333334f}, - {0.9882352941176471f, 0.573192156862745f, 0.4477960784313726f}, - {0.9882352941176471f, 0.5725490196078431f, 0.4470588235294118f}, - {0.9882196078431373f, 0.5719215686274509f, 0.44643137254901966f}, - {0.9882039215686275f, 0.5712941176470588f, 0.44580392156862747f}, - {0.9881882352941177f, 0.5706666666666667f, 0.44517647058823534f}, - {0.9881725490196079f, 0.5700392156862745f, 0.44454901960784315f}, - {0.9881568627450981f, 0.5694117647058823f, 0.443921568627451f}, - {0.9881411764705883f, 0.5687843137254902f, 0.44329411764705884f}, - {0.9881254901960784f, 0.568156862745098f, 0.4426666666666667f}, - {0.9881098039215687f, 0.5675294117647058f, 0.4420392156862745f}, - {0.9880941176470589f, 0.5669019607843137f, 0.4414117647058824f}, - {0.988078431372549f, 0.5662745098039216f, 0.4407843137254902f}, - {0.9880627450980393f, 0.5656470588235294f, 0.4401568627450981f}, - {0.9880470588235295f, 0.5650196078431372f, 0.4395294117647059f}, - {0.9880313725490196f, 0.564392156862745f, 0.43890196078431376f}, - {0.9880156862745099f, 0.563764705882353f, 0.4382745098039216f}, - {0.988f, 0.5631372549019608f, 0.43764705882352944f}, - {0.9879843137254902f, 0.5625098039215686f, 0.43701960784313726f}, - {0.9879686274509805f, 0.5618823529411764f, 0.43639215686274513f}, - {0.9879529411764706f, 0.5612549019607843f, 0.43576470588235294f}, - {0.9879372549019608f, 0.5606274509803921f, 0.4351372549019608f}, - {0.9879215686274511f, 0.5599999999999999f, 0.4345098039215686f}, - {0.9879058823529412f, 0.5593725490196078f, 0.4338823529411765f}, - {0.9878901960784314f, 0.5587450980392157f, 0.4332549019607843f}, - {0.9878745098039216f, 0.5581176470588235f, 0.4326274509803922f}, - {0.9878588235294118f, 0.5574901960784313f, 0.432f}, - {0.987843137254902f, 0.5568627450980391f, 0.43137254901960786f}, - {0.9878274509803922f, 0.556235294117647f, 0.4307450980392157f}, - {0.9878117647058824f, 0.5556078431372549f, 0.43011764705882355f}, - {0.9877960784313726f, 0.5549803921568627f, 0.42949019607843136f}, - {0.9877803921568628f, 0.5543529411764705f, 0.42886274509803923f}, - {0.987764705882353f, 0.5537254901960784f, 0.42823529411764705f}, - {0.9877490196078431f, 0.5530980392156862f, 0.4276078431372549f}, - {0.9877333333333334f, 0.552470588235294f, 0.42698039215686273f}, - {0.9877176470588236f, 0.5518431372549019f, 0.4263529411764706f}, - {0.9877019607843137f, 0.5512156862745098f, 0.4257254901960784f}, - {0.987686274509804f, 0.5505882352941176f, 0.4250980392156863f}, - {0.9876705882352942f, 0.5499607843137254f, 0.4244705882352941f}, - {0.9876549019607843f, 0.5493333333333332f, 0.42384313725490197f}, - {0.9876392156862746f, 0.5487058823529412f, 0.4232156862745098f}, - {0.9876235294117647f, 0.548078431372549f, 0.42258823529411765f}, - {0.9876078431372549f, 0.5474509803921568f, 0.42196078431372547f}, - {0.9875921568627452f, 0.5468235294117647f, 0.42133333333333334f}, - {0.9875764705882353f, 0.5461960784313725f, 0.42070588235294115f}, - {0.9875607843137255f, 0.5455686274509803f, 0.420078431372549f}, - {0.9875450980392158f, 0.5449411764705882f, 0.41945098039215684f}, - {0.9875294117647059f, 0.5443137254901961f, 0.4188235294117647f}, - {0.9875137254901961f, 0.5436862745098039f, 0.4181960784313725f}, - {0.9874980392156864f, 0.5430588235294117f, 0.4175686274509804f}, - {0.9874823529411765f, 0.5424313725490195f, 0.41694117647058826f}, - {0.9874666666666667f, 0.5418039215686274f, 0.4163137254901961f}, - {0.9874509803921568f, 0.5411764705882353f, 0.4156862745098039f}, - {0.9874352941176471f, 0.5405490196078431f, 0.41505882352941176f}, - {0.9874196078431373f, 0.5399215686274509f, 0.4144313725490196f}, - {0.9874039215686274f, 0.5392941176470588f, 0.41380392156862744f}, - {0.9873882352941177f, 0.5386666666666666f, 0.41317647058823526f}, - {0.9873725490196079f, 0.5380392156862744f, 0.4125490196078431f}, - {0.987356862745098f, 0.5374117647058823f, 0.411921568627451f}, - {0.9873411764705883f, 0.5367843137254902f, 0.4112941176470588f}, - {0.9873254901960784f, 0.536156862745098f, 0.4106666666666667f}, - {0.9873098039215686f, 0.5355294117647058f, 0.4100392156862745f}, - {0.9872941176470589f, 0.5349019607843136f, 0.40941176470588236f}, - {0.987278431372549f, 0.5342745098039215f, 0.4087843137254902f}, - {0.9872627450980392f, 0.5336470588235294f, 0.40815686274509805f}, - {0.9872470588235295f, 0.5330196078431372f, 0.40752941176470586f}, - {0.9872313725490196f, 0.532392156862745f, 0.40690196078431373f}, - {0.9872156862745098f, 0.5317647058823529f, 0.40627450980392155f}, - {0.9872f, 0.5311372549019607f, 0.4056470588235294f}, - {0.9871843137254902f, 0.5305098039215685f, 0.40501960784313723f}, - {0.9871686274509804f, 0.5298823529411765f, 0.4043921568627451f}, - {0.9871529411764706f, 0.5292549019607843f, 0.4037647058823529f}, - {0.9871372549019608f, 0.5286274509803921f, 0.4031372549019608f}, - {0.987121568627451f, 0.5279999999999999f, 0.4025098039215686f}, - {0.9871058823529412f, 0.5273725490196077f, 0.40188235294117647f}, - {0.9870901960784314f, 0.5267450980392157f, 0.4012549019607843f}, - {0.9870745098039215f, 0.5261176470588235f, 0.40062745098039215f}, - {0.9870588235294118f, 0.5254901960784313f, 0.39999999999999997f}, - {0.987043137254902f, 0.5248627450980392f, 0.39937254901960784f}, - {0.9870274509803921f, 0.524235294117647f, 0.39874509803921565f}, - {0.9870117647058824f, 0.5236078431372548f, 0.3981176470588235f}, - {0.9869960784313726f, 0.5229803921568627f, 0.39749019607843133f}, - {0.9869803921568627f, 0.5223529411764706f, 0.3968627450980392f}, - {0.986964705882353f, 0.5217254901960784f, 0.396235294117647f}, - {0.9869490196078431f, 0.5210980392156862f, 0.3956078431372549f}, - {0.9869333333333333f, 0.5204705882352941f, 0.3949803921568628f}, - {0.9869176470588236f, 0.5198431372549019f, 0.39435294117647063f}, - {0.9869019607843137f, 0.5192156862745099f, 0.3937254901960785f}, - {0.9868862745098039f, 0.5185882352941177f, 0.3930980392156863f}, - {0.9868705882352942f, 0.5179607843137255f, 0.3924705882352942f}, - {0.9868549019607843f, 0.5173333333333333f, 0.391843137254902f}, - {0.9868392156862745f, 0.5167058823529411f, 0.39121568627450987f}, - {0.9868235294117648f, 0.516078431372549f, 0.3905882352941177f}, - {0.9868078431372549f, 0.5154509803921569f, 0.38996078431372555f}, - {0.9867921568627451f, 0.5148235294117647f, 0.38933333333333336f}, - {0.9867764705882353f, 0.5141960784313726f, 0.38870588235294123f}, - {0.9867607843137255f, 0.5135686274509804f, 0.38807843137254905f}, - {0.9867450980392157f, 0.5129411764705882f, 0.3874509803921569f}, - {0.9867294117647059f, 0.512313725490196f, 0.38682352941176473f}, - {0.9867137254901961f, 0.511686274509804f, 0.3861960784313726f}, - {0.9866980392156863f, 0.5110588235294118f, 0.3855686274509804f}, - {0.9866823529411765f, 0.5104313725490196f, 0.3849411764705883f}, - {0.9866666666666667f, 0.5098039215686274f, 0.3843137254901961f}, - {0.9866509803921568f, 0.5091764705882353f, 0.38368627450980397f}, - {0.986635294117647f, 0.5085490196078432f, 0.3830588235294118f}, - {0.9866196078431373f, 0.507921568627451f, 0.38243137254901965f}, - {0.9866039215686274f, 0.5072941176470588f, 0.38180392156862747f}, - {0.9865882352941177f, 0.5066666666666667f, 0.38117647058823534f}, - {0.9865725490196079f, 0.5060392156862745f, 0.38054901960784315f}, - {0.986556862745098f, 0.5054117647058823f, 0.379921568627451f}, - {0.9865411764705883f, 0.5047843137254902f, 0.37929411764705884f}, - {0.9865254901960784f, 0.5041568627450981f, 0.3786666666666667f}, - {0.9865098039215686f, 0.5035294117647059f, 0.3780392156862745f}, - {0.9864941176470589f, 0.5029019607843137f, 0.3774117647058824f}, - {0.986478431372549f, 0.5022745098039215f, 0.3767843137254902f}, - {0.9864627450980392f, 0.5016470588235294f, 0.3761568627450981f}, - {0.9864470588235295f, 0.5010196078431373f, 0.3755294117647059f}, - {0.9864313725490196f, 0.5003921568627451f, 0.37490196078431376f}, - {0.9864156862745098f, 0.49976470588235294f, 0.37427450980392163f}, - {0.9863999999999999f, 0.4991372549019608f, 0.37364705882352944f}, - {0.9863843137254902f, 0.49850980392156863f, 0.37301960784313726f}, - {0.9863686274509804f, 0.49788235294117644f, 0.3723921568627451f}, - {0.9863529411764705f, 0.4972549019607843f, 0.371764705882353f}, - {0.9863372549019608f, 0.4966274509803922f, 0.3711372549019608f}, - {0.986321568627451f, 0.496f, 0.3705098039215686f}, - {0.9863058823529411f, 0.4953725490196078f, 0.3698823529411765f}, - {0.9862901960784314f, 0.4947450980392157f, 0.36925490196078437f}, - {0.9862745098039216f, 0.49411764705882355f, 0.3686274509803922f}, - {0.9862588235294117f, 0.49349019607843136f, 0.368f}, - {0.986243137254902f, 0.4928627450980392f, 0.36737254901960786f}, - {0.9862274509803921f, 0.49223529411764705f, 0.36674509803921573f}, - {0.9862117647058823f, 0.4916078431372549f, 0.36611764705882355f}, - {0.9861960784313726f, 0.49098039215686273f, 0.36549019607843136f}, - {0.9861803921568627f, 0.49035294117647055f, 0.36486274509803923f}, - {0.9861647058823529f, 0.4897254901960784f, 0.3642352941176471f}, - {0.9861490196078432f, 0.4890980392156863f, 0.3636078431372549f}, - {0.9861333333333333f, 0.4884705882352941f, 0.36298039215686273f}, - {0.9861176470588235f, 0.48784313725490197f, 0.3623529411764706f}, - {0.9861019607843137f, 0.4872156862745098f, 0.36172549019607847f}, - {0.9860862745098039f, 0.48658823529411765f, 0.3610980392156863f}, - {0.9860705882352941f, 0.48596078431372547f, 0.36047058823529415f}, - {0.9860549019607843f, 0.48533333333333334f, 0.35984313725490197f}, - {0.9860392156862745f, 0.48470588235294115f, 0.35921568627450984f}, - {0.9860235294117647f, 0.484078431372549f, 0.35858823529411765f}, - {0.9860078431372549f, 0.48345098039215684f, 0.3579607843137255f}, - {0.9859921568627451f, 0.4828235294117647f, 0.35733333333333334f}, - {0.9859764705882352f, 0.4821960784313725f, 0.3567058823529412f}, - {0.9859607843137255f, 0.4815686274509804f, 0.356078431372549f}, - {0.9859450980392157f, 0.4809411764705882f, 0.3554509803921569f}, - {0.9859294117647058f, 0.4803137254901961f, 0.3548235294117647f}, - {0.9859137254901961f, 0.4796862745098039f, 0.3541960784313726f}, - {0.9858980392156863f, 0.47905882352941176f, 0.3535686274509804f}, - {0.9858823529411764f, 0.4784313725490196f, 0.35294117647058826f}, - {0.9858666666666667f, 0.47780392156862744f, 0.3523137254901961f}, - {0.9858509803921568f, 0.4771764705882353f, 0.35168627450980394f}, - {0.985835294117647f, 0.4765490196078431f, 0.35105882352941176f}, - {0.9858196078431373f, 0.47592156862745094f, 0.3504313725490196f}, - {0.9858039215686274f, 0.4752941176470588f, 0.34980392156862744f}, - {0.9857882352941176f, 0.4746666666666667f, 0.3491764705882353f}, - {0.9857725490196079f, 0.4740392156862745f, 0.3485490196078431f}, - {0.985756862745098f, 0.4734117647058823f, 0.347921568627451f}, - {0.9857411764705882f, 0.4727843137254902f, 0.3472941176470588f}, - {0.9857254901960784f, 0.47215686274509805f, 0.3466666666666667f}, - {0.9857098039215686f, 0.47152941176470586f, 0.3460392156862745f}, - {0.9856941176470588f, 0.4709019607843137f, 0.34541176470588236f}, - {0.985678431372549f, 0.47027450980392155f, 0.34478431372549023f}, - {0.9856627450980392f, 0.4696470588235294f, 0.34415686274509805f}, - {0.9856470588235294f, 0.46901960784313723f, 0.34352941176470586f}, - {0.9856313725490196f, 0.46839215686274505f, 0.34290196078431373f}, - {0.9856156862745098f, 0.4677647058823529f, 0.3422745098039216f}, - {0.9856f, 0.4671372549019608f, 0.3416470588235294f}, - {0.9855843137254902f, 0.4665098039215686f, 0.34101960784313723f}, - {0.9855686274509804f, 0.46588235294117647f, 0.3403921568627451f}, - {0.9855529411764705f, 0.4652549019607843f, 0.33976470588235297f}, - {0.9855372549019608f, 0.46462745098039215f, 0.3391372549019608f}, - {0.985521568627451f, 0.46399999999999997f, 0.3385098039215686f}, - {0.9855058823529411f, 0.46337254901960784f, 0.33788235294117647f}, - {0.9854901960784314f, 0.46274509803921565f, 0.33725490196078434f}, - {0.9854745098039216f, 0.4621176470588235f, 0.33662745098039215f}, - {0.9854588235294117f, 0.46149019607843134f, 0.33599999999999997f}, - {0.985443137254902f, 0.4608627450980392f, 0.33537254901960784f}, - {0.9854274509803921f, 0.460235294117647f, 0.3347450980392157f}, - {0.9854117647058823f, 0.4596078431372549f, 0.3341176470588235f}, - {0.9853960784313726f, 0.4589803921568627f, 0.33349019607843133f}, - {0.9853803921568627f, 0.4583529411764706f, 0.3328627450980392f}, - {0.9853647058823529f, 0.4577254901960784f, 0.3322352941176471f}, - {0.9853490196078432f, 0.45709803921568626f, 0.3316078431372549f}, - {0.9853333333333333f, 0.4564705882352941f, 0.3309803921568627f}, - {0.9853176470588235f, 0.45584313725490194f, 0.33035294117647057f}, - {0.9853019607843136f, 0.45521568627450976f, 0.32972549019607844f}, - {0.9852862745098039f, 0.4545882352941176f, 0.32909803921568626f}, - {0.9852705882352941f, 0.45396078431372544f, 0.3284705882352941f}, - {0.9852549019607842f, 0.4533333333333333f, 0.32784313725490194f}, - {0.9852392156862745f, 0.4527058823529412f, 0.3272156862745098f}, - {0.9852235294117647f, 0.452078431372549f, 0.3265882352941176f}, - {0.9852078431372548f, 0.4514509803921568f, 0.3259607843137255f}, - {0.9851921568627451f, 0.4508235294117647f, 0.3253333333333333f}, - {0.9851764705882352f, 0.45019607843137255f, 0.3247058823529412f}, - {0.9851607843137254f, 0.44956862745098036f, 0.324078431372549f}, - {0.9851450980392157f, 0.4489411764705882f, 0.32345098039215686f}, - {0.9851294117647058f, 0.44831372549019605f, 0.3228235294117647f}, - {0.985113725490196f, 0.4476862745098039f, 0.32219607843137255f}, - {0.9850980392156863f, 0.44705882352941173f, 0.32156862745098036f}, - {0.9850823529411764f, 0.44643137254901955f, 0.32094117647058823f}, - {0.9850666666666666f, 0.4458039215686274f, 0.3203137254901961f}, - {0.9850509803921568f, 0.4451764705882353f, 0.3196862745098039f}, - {0.985035294117647f, 0.4445490196078431f, 0.31905882352941173f}, - {0.9850196078431372f, 0.4439215686274509f, 0.3184313725490196f}, - {0.9850039215686274f, 0.4432941176470588f, 0.31780392156862747f}, - {0.9849882352941176f, 0.44266666666666665f, 0.3171764705882353f}, - {0.9849725490196078f, 0.44203921568627447f, 0.3165490196078431f}, - {0.984956862745098f, 0.4414117647058823f, 0.31592156862745097f}, - {0.9849411764705882f, 0.4407843137254902f, 0.31529411764705884f}, - {0.9849254901960784f, 0.4401568627450981f, 0.3146666666666667f}, - {0.9849098039215686f, 0.43952941176470595f, 0.3140392156862746f}, - {0.9848941176470588f, 0.43890196078431376f, 0.3134117647058824f}, - {0.9848784313725489f, 0.4382745098039216f, 0.3127843137254902f}, - {0.9848627450980392f, 0.43764705882352944f, 0.3121568627450981f}, - {0.9848470588235294f, 0.4370196078431373f, 0.31152941176470594f}, - {0.9848313725490195f, 0.43639215686274513f, 0.31090196078431376f}, - {0.9848156862745098f, 0.43576470588235294f, 0.31027450980392157f}, - {0.9848f, 0.4351372549019608f, 0.30964705882352944f}, - {0.9847843137254901f, 0.4345098039215687f, 0.3090196078431373f}, - {0.9847686274509804f, 0.4338823529411765f, 0.3083921568627451f}, - {0.9847529411764705f, 0.4332549019607843f, 0.30776470588235294f}, - {0.9847372549019607f, 0.4326274509803922f, 0.3071372549019608f}, - {0.984721568627451f, 0.43200000000000005f, 0.3065098039215687f}, - {0.9847058823529411f, 0.43137254901960786f, 0.3058823529411765f}, - {0.9846901960784313f, 0.4307450980392157f, 0.30525490196078436f}, - {0.9846745098039216f, 0.43011764705882355f, 0.30462745098039223f}, - {0.9846588235294117f, 0.4294901960784314f, 0.30400000000000005f}, - {0.9846431372549019f, 0.42886274509803923f, 0.30337254901960786f}, - {0.9846274509803921f, 0.42823529411764705f, 0.30274509803921573f}, - {0.9846117647058823f, 0.4276078431372549f, 0.3021176470588236f}, - {0.9845960784313725f, 0.4269803921568628f, 0.3014901960784314f}, - {0.9845803921568627f, 0.4263529411764706f, 0.30086274509803923f}, - {0.9845647058823529f, 0.42572549019607847f, 0.3002352941176471f}, - {0.9845490196078431f, 0.42509803921568634f, 0.29960784313725497f}, - {0.9845333333333333f, 0.42447058823529416f, 0.2989803921568628f}, - {0.9845176470588235f, 0.42384313725490197f, 0.2983529411764706f}, - {0.9845019607843136f, 0.42321568627450984f, 0.29772549019607847f}, - {0.9844862745098039f, 0.4225882352941177f, 0.29709803921568634f}, - {0.9844705882352941f, 0.4219607843137255f, 0.29647058823529415f}, - {0.9844549019607842f, 0.42133333333333334f, 0.29584313725490197f}, - {0.9844392156862745f, 0.4207058823529412f, 0.29521568627450984f}, - {0.9844235294117647f, 0.4200784313725491f, 0.2945882352941177f}, - {0.9844078431372548f, 0.4194509803921569f, 0.2939607843137255f}, - {0.9843921568627451f, 0.4188235294117647f, 0.29333333333333333f}, - {0.9843764705882352f, 0.4181960784313726f, 0.2927058823529412f}, - {0.9843607843137254f, 0.41756862745098045f, 0.2920784313725491f}, - {0.9843450980392157f, 0.41694117647058826f, 0.2914509803921569f}, - {0.9843294117647058f, 0.4163137254901961f, 0.2908235294117647f}, - {0.984313725490196f, 0.41568627450980394f, 0.2901960784313726f}}; - -/* - Map[List @@ # &, - Table[Blend[ - Map[(RGBColor@(#/255.)) &, {{255, 114, 0}, {245, 119, 23}, {65, - 179, 220}, {236, 0, 140}, {6, 122, 180}, {12, 37, 119}, {129, - 1, 26}, {198, 212, 61}, {110, 187, 31}, {179, 10, 60}, {128, - 128, 128}}], i/1001], {i, 0, 1000}]] >> /tmp/111 -*/ - -float palette_adam_blend[1001][3]={{1.f, 0.44705882352941173f, 0.f}, - {0.9996082349023525f, 0.4472547060782355f, 0.0009010597245891363f}, - {0.9992164698047051f, 0.44745058862705916f, 0.0018021194491782725f}, - {0.9988247047070576f, 0.4476464711758829f, 0.002703179173767409f}, - {0.9984329396094102f, 0.44784235372470665f, 0.003604238898356545f}, - {0.9980411745117628f, 0.44803823627353034f, 0.004505298622945682f}, - {0.9976494094141153f, 0.4482341188223541f, 0.005406358347534818f}, - {0.9972576443164678f, 0.44843000137117783f, 0.006307418072123954f}, - {0.9968658792188204f, 0.4486258839200015f, 0.00720847779671309f}, - {0.9964741141211729f, 0.44882176646882527f, 0.008109537521302227f}, - {0.9960823490235255f, 0.449017649017649f, 0.009010597245891363f}, - {0.9956905839258781f, 0.4492135315664727f, 0.0099116569704805f}, - {0.9952988188282306f, 0.44940941411529645f, 0.010812716695069636f}, - {0.9949070537305832f, 0.4496052966641202f, 0.011713776419658772f}, - {0.9945152886329357f, 0.4498011792129439f, 0.012614836144247908f}, - {0.9941235235352882f, 0.4499970617617676f, 0.013515895868837044f}, - {0.9937317584376408f, 0.4501929443105913f, 0.01441695559342618f}, - {0.9933399933399933f, 0.45038882685941506f, 0.015318015318015318f}, - {0.9929482282423459f, 0.4505847094082388f, 0.016219075042604454f}, - {0.9925564631446985f, 0.4507805919570625f, 0.01712013476719359f}, - {0.992164698047051f, 0.45097647450588624f, 0.018021194491782726f}, - {0.9917729329494035f, 0.45117235705471f, 0.01892225421637186f}, - {0.9913811678517561f, 0.45136823960353367f, 0.019823313940961f}, - {0.9909894027541086f, 0.4515641221523574f, 0.020724373665550133f}, - {0.9905976376564611f, 0.45176000470118116f, 0.02162543339013927f}, - {0.9902058725588138f, 0.45195588725000485f, 0.02252649311472841f}, - {0.9898141074611663f, 0.4521517697988286f, 0.023427552839317543f}, - {0.9894223423635189f, 0.45234765234765234f, 0.024328612563906678f}, - {0.9890305772658714f, 0.45254353489647603f, 0.025229672288495816f}, - {0.9886388121682239f, 0.4527394174452998f, 0.026130732013084954f}, - {0.9882470470705765f, 0.4529352999941235f, 0.027031791737674088f}, - {0.987855281972929f, 0.4531311825429472f, 0.027932851462263222f}, - {0.9874635168752816f, 0.45332706509177095f, 0.02883391118685236f}, - {0.9870717517776342f, 0.4535229476405947f, 0.029734970911441498f}, - {0.9866799866799867f, 0.4537188301894184f, 0.030636030636030636f}, - {0.9862882215823392f, 0.45391471273824213f, 0.031537090360619774f}, - {0.9858964564846918f, 0.4541105952870659f, 0.03243815008520891f}, - {0.9855046913870443f, 0.45430647783588957f, 0.033339209809798036f}, - {0.9851129262893968f, 0.4545023603847133f, 0.03424026953438718f}, - {0.9847211611917495f, 0.45469824293353706f, 0.03514132925897631f}, - {0.984329396094102f, 0.45489412548236074f, 0.03604238898356545f}, - {0.9839376309964545f, 0.4550900080311845f, 0.03694344870815459f}, - {0.9835458658988071f, 0.45528589058000823f, 0.03784450843274372f}, - {0.9831541008011596f, 0.4554817731288319f, 0.03874556815733286f}, - {0.9827623357035122f, 0.45567765567765567f, 0.039646627881922f}, - {0.9823705706058647f, 0.4558735382264794f, 0.04054768760651113f}, - {0.9819788055082173f, 0.4560694207753031f, 0.041448747331100266f}, - {0.9815870404105699f, 0.45626530332412685f, 0.0423498070556894f}, - {0.9811952753129224f, 0.4564611858729506f, 0.04325086678027854f}, - {0.9808035102152749f, 0.4566570684217743f, 0.044151926504867677f}, - {0.9804117451176275f, 0.456852950970598f, 0.04505298622945682f}, - {0.98001998001998f, 0.4570488335194217f, 0.04595404595404595f}, - {0.9796282149223325f, 0.45724471606824546f, 0.04685510567863509f}, - {0.9792364498246852f, 0.4574405986170692f, 0.04775616540322422f}, - {0.9788446847270377f, 0.4576364811658929f, 0.048657225127813356f}, - {0.9784529196293902f, 0.45783236371471664f, 0.04955828485240249f}, - {0.9780611545317428f, 0.4580282462635404f, 0.05045934457699163f}, - {0.9776693894340953f, 0.4582241288123641f, 0.051360404301580766f}, - {0.9772776243364478f, 0.4584200113611878f, 0.05226146402616991f}, - {0.9768858592388004f, 0.45861589391001156f, 0.05316252375075904f}, - {0.976494094141153f, 0.45881177645883525f, 0.054063583475348176f}, - {0.9761023290435056f, 0.459007659007659f, 0.05496464319993731f}, - {0.9757105639458581f, 0.45920354155648274f, 0.055865702924526445f}, - {0.9753187988482106f, 0.45939942410530643f, 0.05676676264911559f}, - {0.9749270337505632f, 0.4595953066541302f, 0.05766782237370472f}, - {0.9745352686529157f, 0.4597911892029539f, 0.05856888209829385f}, - {0.9741435035552682f, 0.4599870717517776f, 0.059469941822882996f}, - {0.9737517384576209f, 0.46018295430060135f, 0.060371001547472124f}, - {0.9733599733599734f, 0.4603788368494251f, 0.06127206127206127f}, - {0.9729682082623259f, 0.4605747193982488f, 0.0621731209966504f}, - {0.9725764431646785f, 0.46077060194707253f, 0.06307418072123955f}, - {0.972184678067031f, 0.4609664844958963f, 0.06397524044582867f}, - {0.9717929129693835f, 0.46116236704471997f, 0.06487630017041782f}, - {0.9714011478717361f, 0.4613582495935437f, 0.06577735989500695f}, - {0.9710093827740887f, 0.46155413214236746f, 0.06667841961959607f}, - {0.9706176176764412f, 0.46175001469119115f, 0.06757947934418522f}, - {0.9702258525787938f, 0.4619458972400149f, 0.06848053906877435f}, - {0.9698340874811463f, 0.46214177978883864f, 0.0693815987933635f}, - {0.9694423223834989f, 0.4623376623376623f, 0.07028265851795262f}, - {0.9690505572858514f, 0.46253354488648607f, 0.07118371824254177f}, - {0.9686587921882039f, 0.46272942743530976f, 0.0720847779671309f}, - {0.9682670270905566f, 0.4629253099841335f, 0.07298583769172003f}, - {0.9678752619929091f, 0.46312119253295725f, 0.07388689741630917f}, - {0.9674834968952616f, 0.46331707508178094f, 0.07478795714089831f}, - {0.9670917317976142f, 0.4635129576306047f, 0.07568901686548744f}, - {0.9666999666999667f, 0.4637088401794284f, 0.07659007659007658f}, - {0.9663082016023192f, 0.4639047227282521f, 0.07749113631466573f}, - {0.9659164365046718f, 0.46410060527707586f, 0.07839219603925485f}, - {0.9655246714070244f, 0.4642964878258996f, 0.079293255763844f}, - {0.965132906309377f, 0.4644923703747233f, 0.08019431548843313f}, - {0.9647411412117295f, 0.46468825292354704f, 0.08109537521302226f}, - {0.964349376114082f, 0.4648841354723708f, 0.0819964349376114f}, - {0.9639576110164346f, 0.4650800180211945f, 0.08289749466220053f}, - {0.9635658459187871f, 0.4652759005700182f, 0.08379855438678968f}, - {0.9631740808211396f, 0.46547178311884196f, 0.0846996141113788f}, - {0.9627823157234923f, 0.46566766566766565f, 0.08560067383596795f}, - {0.9623905506258448f, 0.4658635482164894f, 0.08650173356055708f}, - {0.9619987855281973f, 0.46605943076531314f, 0.0874027932851462f}, - {0.9616070204305499f, 0.46625531331413683f, 0.08830385300973535f}, - {0.9612152553329024f, 0.4664511958629606f, 0.08920491273432449f}, - {0.9608234902352549f, 0.4666470784117843f, 0.09010597245891364f}, - {0.9544377191436015f, 0.4687821981939629f, 0.09714207361266185f}, - {0.9473859473859474f, 0.4711327887798476f, 0.10485984603631662f}, - {0.9403341756282934f, 0.4734833793657323f, 0.1125776184599714f}, - {0.9332824038706392f, 0.47583396995161703f, 0.12029539088362617f}, - {0.9262306321129851f, 0.4781845605375017f, 0.12801316330728096f}, - {0.919178860355331f, 0.4805351511233864f, 0.13573093573093573f}, - {0.9121270885976769f, 0.4828857417092711f, 0.14344870815459052f}, - {0.9050753168400227f, 0.48523633229515584f, 0.15116648057824528f}, - {0.8980235450823686f, 0.48758692288104055f, 0.15888425300190007f}, - {0.8909717733247146f, 0.4899375134669252f, 0.16660202542555483f}, - {0.8839200015670604f, 0.4922881040528099f, 0.17431979784920962f}, - {0.8768682298094064f, 0.49463869463869464f, 0.18203757027286438f}, - {0.8698164580517522f, 0.49698928522457936f, 0.18975534269651917f}, - {0.8627646862940981f, 0.499339875810464f, 0.19747311512017396f}, - {0.8557129145364439f, 0.5016904663963487f, 0.20519088754382872f}, - {0.8486611427787899f, 0.5040410569822334f, 0.2129086599674835f}, - {0.8416093710211358f, 0.5063916475681182f, 0.22062643239113827f}, - {0.8345575992634817f, 0.5087422381540029f, 0.22834420481479306f}, - {0.8275058275058276f, 0.5110928287398876f, 0.23606197723844785f}, - {0.8204540557481734f, 0.5134434193257723f, 0.24377974966210264f}, - {0.8134022839905193f, 0.5157940099116569f, 0.2514975220857574f}, - {0.8063505122328652f, 0.5181446004975416f, 0.25921529450941216f}, - {0.7992987404752111f, 0.5204951910834263f, 0.26693306693306695f}, - {0.792246968717557f, 0.5228457816693111f, 0.27465083935672174f}, - {0.7851951969599029f, 0.5251963722551958f, 0.2823686117803765f}, - {0.7781434252022488f, 0.5275469628410805f, 0.29008638420403127f}, - {0.7710916534445946f, 0.5298975534269652f, 0.29780415662768606f}, - {0.7640398816869405f, 0.5322481440128499f, 0.30552192905134085f}, - {0.7569881099292864f, 0.5345987345987346f, 0.3132397014749956f}, - {0.7499363381716323f, 0.5369493251846192f, 0.32095747389865037f}, - {0.7428845664139783f, 0.539299915770504f, 0.32867524632230516f}, - {0.7358327946563241f, 0.5416505063563887f, 0.3363930187459599f}, - {0.72878102289867f, 0.5440010969422734f, 0.3441107911696147f}, - {0.7217292511410158f, 0.5463516875281581f, 0.35182856359326947f}, - {0.7146774793833618f, 0.5487022781140428f, 0.35954633601692426f}, - {0.7076257076257076f, 0.5510528686999275f, 0.36726410844057905f}, - {0.7005739358680536f, 0.5534034592858122f, 0.37498188086423384f}, - {0.6935221641103995f, 0.5557540498716969f, 0.38269965328788863f}, - {0.6864703923527453f, 0.5581046404575816f, 0.39041742571154336f}, - {0.6794186205950912f, 0.5604552310434663f, 0.39813519813519815f}, - {0.6723668488374371f, 0.562805821629351f, 0.40585297055885294f}, - {0.665315077079783f, 0.5651564122152357f, 0.4135707429825077f}, - {0.658263305322129f, 0.5675070028011204f, 0.42128851540616247f}, - {0.6512115335644748f, 0.5698575933870051f, 0.42900628782981726f}, - {0.6441597618068207f, 0.5722081839728899f, 0.43672406025347205f}, - {0.6371079900491665f, 0.5745587745587746f, 0.44444183267712684f}, - {0.6300562182915125f, 0.5769093651446592f, 0.45215960510078157f}, - {0.6230044465338583f, 0.5792599557305439f, 0.45987737752443636f}, - {0.6159526747762043f, 0.5816105463164286f, 0.46759514994809115f}, - {0.6089009030185502f, 0.5839611369023133f, 0.47531292237174594f}, - {0.601849131260896f, 0.586311727488198f, 0.4830306947954007f}, - {0.5947973595032419f, 0.5886623180740828f, 0.49074846721905546f}, - {0.5877455877455877f, 0.5910129086599675f, 0.49846623964271025f}, - {0.5806938159879336f, 0.5933634992458522f, 0.506184012066365f}, - {0.5736420442302796f, 0.5957140898317368f, 0.5139017844900198f}, - {0.5665902724726255f, 0.5980646804176215f, 0.5216195569136746f}, - {0.5595385007149714f, 0.6004152710035062f, 0.5293373293373294f}, - {0.5524867289573172f, 0.6027658615893909f, 0.5370551017609841f}, - {0.5454349571996631f, 0.6051164521752757f, 0.5447728741846389f}, - {0.538383185442009f, 0.6074670427611604f, 0.5524906466082936f}, - {0.5313314136843549f, 0.6098176333470451f, 0.5602084190319484f}, - {0.5242796419267008f, 0.6121682239329298f, 0.5679261914556032f}, - {0.5172278701690467f, 0.6145188145188145f, 0.575643963879258f}, - {0.5101760984113926f, 0.6168694051046992f, 0.5833617363029128f}, - {0.5031243266537384f, 0.619219995690584f, 0.5910795087265676f}, - {0.4960725548960844f, 0.6215705862764686f, 0.5987972811502223f}, - {0.4890207831384303f, 0.6239211768623533f, 0.606515053573877f}, - {0.48196901138077614f, 0.626271767448238f, 0.6142328259975319f}, - {0.47491723962312204f, 0.6286223580341227f, 0.6219505984211866f}, - {0.4678654678654679f, 0.6309729486200074f, 0.6296683708448415f}, - {0.4608136961078138f, 0.6333235392058921f, 0.6373861432684962f}, - {0.4537619243501596f, 0.6356741297917768f, 0.6451039156921511f}, - {0.44671015259250557f, 0.6380247203776614f, 0.6528216881158058f}, - {0.4396583808348514f, 0.6403753109635462f, 0.6605394605394606f}, - {0.4326066090771974f, 0.6427259015494309f, 0.6682572329631153f}, - {0.42555483731954324f, 0.6450764921353156f, 0.67597500538677f}, - {0.4185030655618891f, 0.6474270827212003f, 0.6836927778104249f}, - {0.41145129380423506f, 0.649777673307085f, 0.6914105502340796f}, - {0.4043995220465809f, 0.6521282638929697f, 0.6991283226577345f}, - {0.39734775028892677f, 0.6544788544788545f, 0.7068460950813892f}, - {0.3902959785312726f, 0.6568294450647392f, 0.7145638675050441f}, - {0.3832442067736186f, 0.6591800356506239f, 0.7222816399286988f}, - {0.37619243501596455f, 0.6615306262365085f, 0.7299994123523535f}, - {0.3691406632583104f, 0.6638812168223932f, 0.7377171847760083f}, - {0.36208889150065626f, 0.6662318074082779f, 0.745434957199663f}, - {0.3550371197430021f, 0.6685823979941626f, 0.7531527296233179f}, - {0.3479853479853481f, 0.6709329885800474f, 0.7608705020469726f}, - {0.34093357622769394f, 0.6732835791659321f, 0.7685882744706275f}, - {0.3338818044700398f, 0.6756341697518168f, 0.7763060468942822f}, - {0.32683003271238564f, 0.6779847603377015f, 0.7840238193179371f}, - {0.3197782609547316f, 0.6803353509235861f, 0.7917415917415918f}, - {0.3127264891970776f, 0.6826859415094708f, 0.7994593641652465f}, - {0.3056747174394233f, 0.6850365320953555f, 0.8071771365889013f}, - {0.2986229456817693f, 0.6873871226812402f, 0.814894909012556f}, - {0.29157117392411513f, 0.689737713267125f, 0.8226126814362109f}, - {0.2845194021664611f, 0.6920883038530097f, 0.8303304538598656f}, - {0.27746763040880684f, 0.6944388944388944f, 0.8380482262835205f}, - {0.2704158586511528f, 0.6967894850247791f, 0.8457659987071752f}, - {0.26336408689349877f, 0.6991400756106638f, 0.85348377113083f}, - {0.2563123151358446f, 0.7014906661965485f, 0.8612015435544847f}, - {0.2602613073201308f, 0.696350708115414f, 0.8602378014142721f}, - {0.2669604904899022f, 0.6893381128675246f, 0.8571036806330924f}, - {0.27365967365967364f, 0.6823255176196352f, 0.8539695598519128f}, - {0.28035885682944506f, 0.6753129223717459f, 0.8508354390707332f}, - {0.2870580399992165f, 0.6683003271238565f, 0.8477013182895536f}, - {0.29375722316898784f, 0.6612877318759671f, 0.8445671975083741f}, - {0.30045640633875925f, 0.6542751366280778f, 0.8414330767271945f}, - {0.30715558950853067f, 0.6472625413801883f, 0.8382989559460148f}, - {0.3138547726783021f, 0.640249946132299f, 0.8351648351648352f}, - {0.3205539558480735f, 0.6332373508844097f, 0.8320307143836556f}, - {0.3272531390178449f, 0.6262247556365204f, 0.828896593602476f}, - {0.3339523221876163f, 0.6192121603886309f, 0.8257624728212964f}, - {0.3406515053573877f, 0.6121995651407416f, 0.8226283520401168f}, - {0.3473506885271591f, 0.6051869698928523f, 0.8194942312589372f}, - {0.3540498716969305f, 0.5981743746449628f, 0.8163601104777576f}, - {0.3607490548667019f, 0.5911617793970735f, 0.813225989696578f}, - {0.3674482380364733f, 0.5841491841491842f, 0.8100918689153984f}, - {0.3741474212062447f, 0.5771365889012947f, 0.8069577481342187f}, - {0.38084660437601614f, 0.5701239936534054f, 0.8038236273530391f}, - {0.3875457875457875f, 0.563111398405516f, 0.8006895065718596f}, - {0.394244970715559f, 0.5560988031576266f, 0.79755538579068f}, - {0.40094415388533033f, 0.5490862079097373f, 0.7944212650095004f}, - {0.40764333705510175f, 0.542073612661848f, 0.7912871442283207f}, - {0.41434252022487317f, 0.5350610174139585f, 0.7881530234471411f}, - {0.42104170339464453f, 0.5280484221660692f, 0.7850189026659615f}, - {0.427740886564416f, 0.5210358269181798f, 0.7818847818847819f}, - {0.43444006973418736f, 0.5140232316702904f, 0.7787506611036024f}, - {0.4411392529039588f, 0.5070106364224011f, 0.7756165403224227f}, - {0.4478384360737302f, 0.49999804117451174f, 0.7724824195412431f}, - {0.45453761924350156f, 0.49298544592662236f, 0.7693482987600635f}, - {0.46123680241327303f, 0.48597285067873297f, 0.7662141779788839f}, - {0.4679359855830444f, 0.47896025543084364f, 0.7630800571977043f}, - {0.47463516875281586f, 0.47194766018295425f, 0.7599459364165246f}, - {0.4813343519225872f, 0.4649350649350649f, 0.756811815635345f}, - {0.4880335350923586f, 0.45792246968717554f, 0.7536776948541655f}, - {0.49473271826213f, 0.4509098744392862f, 0.7505435740729859f}, - {0.5014319014319014f, 0.4438972791913968f, 0.7474094532918063f}, - {0.5081310846016729f, 0.43688468394350743f, 0.7442753325106267f}, - {0.5148302677714442f, 0.4298720886956181f, 0.741141211729447f}, - {0.5215294509412156f, 0.4228594934477287f, 0.7380070909482674f}, - {0.5282286341109871f, 0.41584689819983933f, 0.7348729701670879f}, - {0.5349278172807584f, 0.40883430295195f, 0.7317388493859083f}, - {0.5416270004505299f, 0.40182170770406067f, 0.7286047286047287f}, - {0.5483261836203013f, 0.3948091124561713f, 0.7254706078235491f}, - {0.5550253667900726f, 0.3877965172082819f, 0.7223364870423694f}, - {0.561724549959844f, 0.3807839219603925f, 0.7192023662611898f}, - {0.5684237331296155f, 0.3737713267125032f, 0.7160682454800102f}, - {0.5751229162993869f, 0.3667587314646138f, 0.7129341246988306f}, - {0.5818220994691583f, 0.3597461362167244f, 0.7098000039176511f}, - {0.5885212826389297f, 0.3527335409688351f, 0.7066658831364714f}, - {0.595220465808701f, 0.34572094572094575f, 0.7035317623552918f}, - {0.6019196489784725f, 0.33870835047305636f, 0.7003976415741122f}, - {0.608618832148244f, 0.331695755225167f, 0.6972635207929326f}, - {0.6153180153180153f, 0.3246831599772776f, 0.694129400011753f}, - {0.6220171984877867f, 0.31767056472938826f, 0.6909952792305734f}, - {0.628716381657558f, 0.3106579694814989f, 0.6878611584493938f}, - {0.6354155648273295f, 0.3036453742336095f, 0.6847270376682142f}, - {0.6421147479971009f, 0.29663277898572016f, 0.6815929168870346f}, - {0.6488139311668724f, 0.2896201837378308f, 0.678458796105855f}, - {0.6555131143366437f, 0.28260758848994144f, 0.6753246753246753f}, - {0.6622122975064151f, 0.27559499324205206f, 0.6721905545434957f}, - {0.6689114806761866f, 0.2685823979941627f, 0.6690564337623162f}, - {0.675610663845958f, 0.26156980274627334f, 0.6659223129811366f}, - {0.6823098470157294f, 0.254557207498384f, 0.662788192199957f}, - {0.6890090301855007f, 0.24754461225049457f, 0.6596540714187773f}, - {0.6957082133552721f, 0.2405320170026053f, 0.6565199506375977f}, - {0.7024073965250437f, 0.23351942175471585f, 0.6533858298564181f}, - {0.709106579694815f, 0.22650682650682652f, 0.6502517090752385f}, - {0.7158057628645864f, 0.21949423125893713f, 0.647117588294059f}, - {0.7225049460343578f, 0.2124816360110478f, 0.6439834675128793f}, - {0.7292041292041291f, 0.20546904076315847f, 0.6408493467316998f}, - {0.7359033123739006f, 0.1984564455152691f, 0.6377152259505201f}, - {0.742602495543672f, 0.19144385026737976f, 0.6345811051693405f}, - {0.7493016787134434f, 0.18443125501949031f, 0.6314469843881609f}, - {0.7560008618832148f, 0.17741865977160098f, 0.6283128636069812f}, - {0.7627000450529863f, 0.17040606452371154f, 0.6251787428258017f}, - {0.7693992282227576f, 0.1633934692758222f, 0.6220446220446221f}, - {0.776098411392529f, 0.15638087402793288f, 0.6189105012634425f}, - {0.7827975945623005f, 0.14936827878004355f, 0.6157763804822629f}, - {0.7894967777320718f, 0.14235568353215422f, 0.6126422597010832f}, - {0.7961959609018433f, 0.13534308828426478f, 0.6095081389199037f}, - {0.8028951440716147f, 0.12833049303637545f, 0.606374018138724f}, - {0.8095943272413861f, 0.121317897788486f, 0.6032398973575445f}, - {0.8162935104111575f, 0.11430530254059668f, 0.6001057765763649f}, - {0.822992693580929f, 0.10729270729270723f, 0.5969716557951852f}, - {0.8296918767507003f, 0.1002801120448179f, 0.5938375350140057f}, - {0.8363910599204717f, 0.09326751679692868f, 0.590703414232826f}, - {0.843090243090243f, 0.08625492154903924f, 0.5875692934516464f}, - {0.8497894262600144f, 0.07924232630114991f, 0.5844351726704669f}, - {0.8564886094297859f, 0.07222973105326047f, 0.5813010518892872f}, - {0.8631877925995572f, 0.06521713580537114f, 0.5781669311081077f}, - {0.8698869757693287f, 0.0582045405574817f, 0.575032810326928f}, - {0.8765861589391001f, 0.05119194530959237f, 0.5718986895457484f}, - {0.8832853421088714f, 0.04417935006170304f, 0.5687645687645688f}, - {0.8899845252786429f, 0.03716675481381371f, 0.5656304479833891f}, - {0.8966837084484143f, 0.030154159565924377f, 0.5624963272022097f}, - {0.9033828916181857f, 0.023141564318034935f, 0.55936220642103f}, - {0.9100820747879571f, 0.016128969070145605f, 0.5562280856398504f}, - {0.9167812579577286f, 0.009116373822256163f, 0.5530939648586708f}, - {0.9234804411274999f, 0.0021037785743668325f, 0.5499598440774912f}, - {0.9191827780063074f, 0.0033456739339092273f, 0.5501165501165501f}, - {0.9101721807604161f, 0.008125208125208123f, 0.55168361050714f}, - {0.9011615835145247f, 0.012904742316507019f, 0.5532506708977297f}, - {0.8921509862686334f, 0.017684276507805914f, 0.5548177312883196f}, - {0.8831403890227421f, 0.022463810699104813f, 0.5563847916789094f}, - {0.8741297917768507f, 0.027243344890403712f, 0.5579518520694992f}, - {0.8651191945309593f, 0.03202287908170261f, 0.559518912460089f}, - {0.8561085972850679f, 0.0368024132730015f, 0.5610859728506787f}, - {0.8470980000391766f, 0.0415819474643004f, 0.5626530332412686f}, - {0.8380874027932852f, 0.04636148165559929f, 0.5642200936318583f}, - {0.8290768055473938f, 0.05114101584689819f, 0.5657871540224482f}, - {0.8200662083015025f, 0.055920550038197084f, 0.567354214413038f}, - {0.8110556110556111f, 0.06070008422949598f, 0.5689212748036278f}, - {0.8020450138097197f, 0.06547961842079487f, 0.5704883351942176f}, - {0.7930344165638283f, 0.07025915261209377f, 0.5720553955848073f}, - {0.784023819317937f, 0.07503868680339267f, 0.5736224559753972f}, - {0.7750132220720456f, 0.07981822099469157f, 0.575189516365987f}, - {0.7660026248261543f, 0.08459775518599046f, 0.5767565767565768f}, - {0.756992027580263f, 0.08937728937728935f, 0.5783236371471666f}, - {0.7479814303343716f, 0.09415682356858826f, 0.5798906975377563f}, - {0.7389708330884802f, 0.09893635775988716f, 0.5814577579283462f}, - {0.7299602358425888f, 0.10371589195118604f, 0.5830248183189359f}, - {0.7209496385966975f, 0.10849542614248495f, 0.5845918787095258f}, - {0.7119390413508061f, 0.11327496033378384f, 0.5861589391001156f}, - {0.7029284441049147f, 0.11805449452508274f, 0.5877259994907054f}, - {0.6939178468590234f, 0.12283402871638162f, 0.5892930598812952f}, - {0.684907249613132f, 0.12761356290768053f, 0.590860120271885f}, - {0.6758966523672406f, 0.13239309709897942f, 0.5924271806624748f}, - {0.6668860551213494f, 0.13717263129027832f, 0.5939942410530646f}, - {0.657875457875458f, 0.1419521654815772f, 0.5955613014436544f}, - {0.6488648606295666f, 0.1467316996728761f, 0.5971283618342442f}, - {0.6398542633836752f, 0.151511233864175f, 0.598695422224834f}, - {0.6308436661377839f, 0.1562907680554739f, 0.6002624826154238f}, - {0.6218330688918925f, 0.16107030224677282f, 0.6018295430060137f}, - {0.6128224716460011f, 0.16584983643807172f, 0.6033966033966034f}, - {0.6038118744001097f, 0.17062937062937059f, 0.6049636637871932f}, - {0.5948012771542184f, 0.17540890482066948f, 0.606530724177783f}, - {0.585790679908327f, 0.18018843901196838f, 0.6080977845683728f}, - {0.5767800826624356f, 0.18496797320326727f, 0.6096648449589626f}, - {0.5677694854165443f, 0.18974750739456617f, 0.6112319053495524f}, - {0.5587588881706529f, 0.1945270415858651f, 0.6127989657401423f}, - {0.5497482909247615f, 0.19930657577716399f, 0.614366026130732f}, - {0.5407376936788701f, 0.20408610996846288f, 0.6159330865213218f}, - {0.5317270964329789f, 0.20886564415976175f, 0.6175001469119116f}, - {0.5227164991870875f, 0.21364517835106064f, 0.6190672073025014f}, - {0.5137059019411961f, 0.21842471254235954f, 0.6206342676930912f}, - {0.5046953046953048f, 0.22320424673365846f, 0.622201328083681f}, - {0.4956847074494134f, 0.22798378092495736f, 0.6237683884742709f}, - {0.486674110203522f, 0.23276331511625625f, 0.6253354488648606f}, - {0.47766351295763065f, 0.23754284930755515f, 0.6269025092554504f}, - {0.4686529157117393f, 0.24232238349885404f, 0.6284695696460403f}, - {0.45964231846584797f, 0.2471019176901529f, 0.63003663003663f}, - {0.4506317212199566f, 0.25188145188145183f, 0.6316036904272199f}, - {0.4416211239740652f, 0.25666098607275073f, 0.6331707508178096f}, - {0.43261052672817385f, 0.2614405202640496f, 0.6347378112083994f}, - {0.4235999294822824f, 0.2662200544553485f, 0.6363048715989892f}, - {0.41458933223639105f, 0.2709995886466474f, 0.637871931989579f}, - {0.4055787349904997f, 0.2757791228379463f, 0.6394389923801689f}, - {0.3965681377446083f, 0.2805586570292452f, 0.6410060527707586f}, - {0.38755754049871705f, 0.2853381912205441f, 0.6425731131613485f}, - {0.3785469432528257f, 0.290117725411843f, 0.6441401735519382f}, - {0.3695363460069343f, 0.2948972596031419f, 0.645707233942528f}, - {0.36052574876104293f, 0.2996767937944408f, 0.6472742943331178f}, - {0.35151515151515167f, 0.3044563279857396f, 0.6488413547237076f}, - {0.3425045542692602f, 0.3092358621770386f, 0.6504084151142975f}, - {0.3334939570233689f, 0.3140153963683375f, 0.6519754755048872f}, - {0.32448335977747744f, 0.31879493055963637f, 0.6535425358954771f}, - {0.3154727625315862f, 0.32357446475093526f, 0.6551095962860668f}, - {0.3064621652856947f, 0.3283539989422342f, 0.6566766566766566f}, - {0.29745156803980344f, 0.33313353313353306f, 0.6582437170672465f}, - {0.28844097079391195f, 0.337913067324832f, 0.6598107774578362f}, - {0.2794303735480207f, 0.34269260151613085f, 0.6613778378484261f}, - {0.2704197763021293f, 0.34747213570742974f, 0.6629448982390158f}, - {0.26140917905623795f, 0.35225166989872864f, 0.6645119586296057f}, - {0.2523985818103466f, 0.35703120409002753f, 0.6660790190201955f}, - {0.2433879845644552f, 0.3618107382813265f, 0.6676460794107852f}, - {0.23437738731856383f, 0.3665902724726253f, 0.6692131398013751f}, - {0.22536679007267246f, 0.3713698066639243f, 0.6707802001919648f}, - {0.2163561928267811f, 0.3761493408552231f, 0.6723472605825547f}, - {0.20734559558088983f, 0.380928875046522f, 0.6739143209731444f}, - {0.19833499833499835f, 0.3857084092378209f, 0.6754813813637343f}, - {0.18932440108910709f, 0.3904879434291198f, 0.6770484417543241f}, - {0.1803138038432156f, 0.39526747762041875f, 0.6786155021449138f}, - {0.17130320659732434f, 0.4000470118117176f, 0.6801825625355037f}, - {0.16229260935143286f, 0.40482654600301654f, 0.6817496229260935f}, - {0.1532820121055416f, 0.4096060801943154f, 0.6833166833166833f}, - {0.14427141485965012f, 0.41438561438561433f, 0.6848837437072731f}, - {0.13526081761375885f, 0.41916514857691317f, 0.6864508040978629f}, - {0.12625022036786748f, 0.42394468276821207f, 0.6880178644884527f}, - {0.11723962312197611f, 0.428724216959511f, 0.6895849248790424f}, - {0.10822902587608474f, 0.43350375115080986f, 0.6911519852696323f}, - {0.09921842863019337f, 0.4382832853421088f, 0.6927190456602221f}, - {0.090207831384302f, 0.44306281953340765f, 0.6942861060508119f}, - {0.08119723413841062f, 0.4478423537247066f, 0.6958531664414017f}, - {0.07218663689251925f, 0.45262188791600544f, 0.6974202268319915f}, - {0.06317603964662799f, 0.45740142210730433f, 0.6989872872225813f}, - {0.05416544240073651f, 0.4621809562986033f, 0.700554347613171f}, - {0.04515484515484525f, 0.4669604904899021f, 0.7021214080037609f}, - {0.036144247908953764f, 0.4717400246812011f, 0.7036884683943507f}, - {0.027133650663062503f, 0.4765195588724999f, 0.7052555287849405f}, - {0.023670447199858963f, 0.4764333705510176f, 0.7044484926837867f}, - {0.023905506258447434f, 0.47310336722101426f, 0.7020587255881373f}, - {0.024140565317035904f, 0.46977336389101093f, 0.6996689584924879f}, - {0.024375624375624374f, 0.4664433605610076f, 0.6972791913968384f}, - {0.024610683434212844f, 0.4631133572310043f, 0.6948894243011889f}, - {0.024845742492801318f, 0.45978335390100095f, 0.6924996572055395f}, - {0.025080801551389788f, 0.4564533505709976f, 0.6901098901098901f}, - {0.025315860609978258f, 0.4531233472409943f, 0.6877201230142406f}, - {0.025550919668566728f, 0.4497933439109909f, 0.6853303559185911f}, - {0.025785978727155198f, 0.4464633405809876f, 0.6829405888229417f}, - {0.02602103778574367f, 0.44313333725098425f, 0.6805508217272923f}, - {0.02625609684433214f, 0.4398033339209809f, 0.6781610546316428f}, - {0.02649115590292061f, 0.4364733305909776f, 0.6757712875359934f}, - {0.02672621496150908f, 0.43314332726097426f, 0.6733815204403439f}, - {0.02696127402009755f, 0.42981332393097094f, 0.6709917533446945f}, - {0.02719633307868602f, 0.4264833206009676f, 0.668601986249045f}, - {0.02743139213727449f, 0.4231533172709643f, 0.6662122191533956f}, - {0.02766645119586296f, 0.41982331394096095f, 0.6638224520577461f}, - {0.02790151025445143f, 0.4164933106109576f, 0.6614326849620967f}, - {0.0281365693130399f, 0.4131633072809543f, 0.6590429178664472f}, - {0.02837162837162837f, 0.40983330395095097f, 0.6566531507707978f}, - {0.02860668743021684f, 0.40650330062094764f, 0.6542633836751484f}, - {0.02884174648880531f, 0.4031732972909443f, 0.6518736165794989f}, - {0.029076805547393784f, 0.399843293960941f, 0.6494838494838494f}, - {0.02931186460598225f, 0.39651329063093765f, 0.6470940823882f}, - {0.029546923664570724f, 0.3931832873009343f, 0.6447043152925506f}, - {0.029781982723159194f, 0.389853283970931f, 0.642314548196901f}, - {0.030017041781747664f, 0.38652328064092767f, 0.6399247811012516f}, - {0.030252100840336135f, 0.38319327731092434f, 0.6375350140056022f}, - {0.030487159898924605f, 0.379863273980921f, 0.6351452469099528f}, - {0.030722218957513075f, 0.3765332706509177f, 0.6327554798143034f}, - {0.030957278016101545f, 0.37320326732091436f, 0.6303657127186538f}, - {0.031192337074690015f, 0.369873263990911f, 0.6279759456230044f}, - {0.03142739613327848f, 0.3665432606609077f, 0.625586178527355f}, - {0.03166245519186696f, 0.36321325733090437f, 0.6231964114317055f}, - {0.03189751425045543f, 0.35988325400090104f, 0.620806644336056f}, - {0.0321325733090439f, 0.3565532506708977f, 0.6184168772404066f}, - {0.03236763236763237f, 0.3532232473408944f, 0.6160271101447572f}, - {0.03260269142622084f, 0.34989324401089106f, 0.6136373430491078f}, - {0.03283775048480931f, 0.34656324068088773f, 0.6112475759534582f}, - {0.03307280954339778f, 0.3432332373508844f, 0.6088578088578088f}, - {0.03330786860198625f, 0.3399032340208811f, 0.6064680417621594f}, - {0.03354292766057472f, 0.33657323069087774f, 0.6040782746665099f}, - {0.03377798671916319f, 0.3332432273608744f, 0.6016885075708605f}, - {0.03401304577775166f, 0.3299132240308711f, 0.599298740475211f}, - {0.03424810483634013f, 0.32658322070086776f, 0.5969089733795616f}, - {0.0344831638949286f, 0.32325321737086443f, 0.5945192062839122f}, - {0.03471822295351707f, 0.3199232140408611f, 0.5921294391882627f}, - {0.03495328201210554f, 0.3165932107108578f, 0.5897396720926132f}, - {0.03518834107069401f, 0.31326320738085445f, 0.5873499049969638f}, - {0.03542340012928248f, 0.3099332040508511f, 0.5849601379013143f}, - {0.03565845918787095f, 0.3066032007208478f, 0.5825703708056649f}, - {0.03589351824645942f, 0.30327319739084446f, 0.5801806037100155f}, - {0.03612857730504789f, 0.2999431940608411f, 0.577790836614366f}, - {0.03636363636363636f, 0.2966131907308378f, 0.5754010695187166f}, - {0.03659869542222483f, 0.2932831874008345f, 0.5730113024230671f}, - {0.0368337544808133f, 0.28995318407083115f, 0.5706215353274177f}, - {0.03706881353940177f, 0.2866231807408278f, 0.5682317682317682f}, - {0.03730387259799024f, 0.28329317741082444f, 0.5658420011361187f}, - {0.03753893165657872f, 0.2799631740808211f, 0.5634522340404693f}, - {0.03777399071516718f, 0.2766331707508178f, 0.5610624669448199f}, - {0.03800904977375566f, 0.27330316742081445f, 0.5586726998491705f}, - {0.03824410883234412f, 0.2699731640908112f, 0.556282932753521f}, - {0.0384791678909326f, 0.2666431607608078f, 0.5538931656578715f}, - {0.03871422694952106f, 0.26331315743080447f, 0.5515033985622221f}, - {0.03894928600810954f, 0.2599831541008011f, 0.5491136314665727f}, - {0.039184345066698004f, 0.2566531507707978f, 0.5467238643709231f}, - {0.03941940412528648f, 0.25332314744079454f, 0.5443340972752737f}, - {0.039654463183874944f, 0.24999314411079115f, 0.5419443301796243f}, - {0.03988952224246342f, 0.24666314078078783f, 0.5395545630839749f}, - {0.04012458130105189f, 0.24333313745078447f, 0.5371647959883254f}, - {0.04035964035964036f, 0.24000313412078117f, 0.5347750288926759f}, - {0.04059469941822883f, 0.2366731307907778f, 0.5323852617970265f}, - {0.0408297584768173f, 0.2333431274607745f, 0.5299954947013771f}, - {0.041064817535405765f, 0.23001312413077118f, 0.5276057276057277f}, - {0.04129987659399424f, 0.22668312080076786f, 0.5252159605100781f}, - {0.041534935652582705f, 0.22335311747076453f, 0.5228261934144287f}, - {0.04176999471117118f, 0.2200231141407612f, 0.5204364263187793f}, - {0.04200505376975965f, 0.21669311081075787f, 0.5180466592231299f}, - {0.04224011282834812f, 0.2133631074807545f, 0.5156568921274803f}, - {0.04247517188693659f, 0.21003310415075122f, 0.5132671250318309f}, - {0.04271023094552506f, 0.20670310082074783f, 0.5108773579361815f}, - {0.04294529000411353f, 0.20337309749074456f, 0.508487590840532f}, - {0.043180349062702f, 0.20004309416074123f, 0.5060978237448825f}, - {0.04341540812129047f, 0.19671309083073785f, 0.5037080566492331f}, - {0.04365046717987894f, 0.19338308750073457f, 0.5013182895535837f}, - {0.04388552623846742f, 0.1900530841707312f, 0.49892852245793423f}, - {0.044120585297055884f, 0.18672308084072792f, 0.49653875536228476f}, - {0.04435564435564436f, 0.18339307751072453f, 0.49414898826663534f}, - {0.044590703414232824f, 0.1800630741807212f, 0.4917592211709859f}, - {0.044825762472821294f, 0.17673307085071793f, 0.4893694540753365f}, - {0.045060821531409764f, 0.17340306752071455f, 0.48697968697968697f}, - {0.045295880589998234f, 0.17007306419071128f, 0.48458991988403755f}, - {0.045530939648586705f, 0.1667430608607079f, 0.4822001527883881f}, - {0.045765998707175175f, 0.16341305753070462f, 0.4798103856927387f}, - {0.046001057765763645f, 0.16008305420070124f, 0.4774206185970892f}, - {0.04623611682435212f, 0.1567530508706979f, 0.47503085150143975f}, - {0.046471175882940585f, 0.15342304754069458f, 0.47264108440579033f}, - {0.04670623494152906f, 0.15009304421069125f, 0.47025131731014086f}, - {0.046941294000117526f, 0.14676304088068798f, 0.46786155021449144f}, - {0.04935064935064935f, 0.14439286203992086f, 0.464844958962606f}, - {0.05393430099312452f, 0.14298250768839002f, 0.4612015435544847f}, - {0.058517952635599696f, 0.1415721533368592f, 0.45755812814636343f}, - {0.06310160427807486f, 0.14016179898532838f, 0.45391471273824213f}, - {0.06768525592055004f, 0.13875144463379757f, 0.45027129733012083f}, - {0.0722689075630252f, 0.13734109028226674f, 0.4466278819219996f}, - {0.07685255920550038f, 0.1359307359307359f, 0.4429844665138783f}, - {0.08143621084797556f, 0.1345203815792051f, 0.439341051105757f}, - {0.08601986249045072f, 0.13311002722767426f, 0.4356976356976357f}, - {0.09060351413292589f, 0.13169967287614345f, 0.4320542202895144f}, - {0.09518716577540107f, 0.13028931852461262f, 0.4284108048813931f}, - {0.09977081741787625f, 0.1288789641730818f, 0.42476738947327186f}, - {0.10435446906035141f, 0.12746860982155098f, 0.42112397406515056f}, - {0.10893812070282657f, 0.12605825547002017f, 0.41748055865702927f}, - {0.11352177234530175f, 0.12464790111848933f, 0.41383714324890797f}, - {0.11810542398777692f, 0.12323754676695851f, 0.41019372784078667f}, - {0.1226890756302521f, 0.1218271924154277f, 0.4065503124326654f}, - {0.12727272727272726f, 0.12041683806389687f, 0.4029068970245441f}, - {0.13185637891520244f, 0.11900648371236605f, 0.3992634816164228f}, - {0.13644003055767762f, 0.11759612936083523f, 0.3956200662083015f}, - {0.14102368220015277f, 0.11618577500930441f, 0.3919766508001802f}, - {0.14560733384262797f, 0.11477542065777359f, 0.3883332353920589f}, - {0.15019098548510312f, 0.11336506630624277f, 0.38468981998393764f}, - {0.15477463712757827f, 0.11195471195471193f, 0.38104640457581634f}, - {0.15935828877005348f, 0.11054435760318113f, 0.37740298916769505f}, - {0.16394194041252863f, 0.10913400325165029f, 0.37375957375957375f}, - {0.1685255920550038f, 0.10772364890011948f, 0.37011615835145245f}, - {0.173109243697479f, 0.10631329454858865f, 0.3664727429433312f}, - {0.17769289533995417f, 0.10490294019705783f, 0.3628293275352099f}, - {0.18227654698242934f, 0.10349258584552701f, 0.3591859121270886f}, - {0.1868601986249045f, 0.10208223149399619f, 0.3555424967189673f}, - {0.19144385026737967f, 0.10067187714246537f, 0.351899081310846f}, - {0.19602750190985482f, 0.09926152279093454f, 0.3482556659027247f}, - {0.20061115355233f, 0.09785116843940372f, 0.3446122504946034f}, - {0.20519480519480518f, 0.0964408140878729f, 0.3409688350864821f}, - {0.20977845683728036f, 0.09503045973634208f, 0.3373254196783608f}, - {0.21436210847975554f, 0.09362010538481125f, 0.33368200427023953f}, - {0.21894576012223071f, 0.09220975103328044f, 0.33003858886211823f}, - {0.2235294117647059f, 0.0907993966817496f, 0.32639517345399693f}, - {0.22811306340718104f, 0.08938904233021878f, 0.32275175804587564f}, - {0.2326967150496562f, 0.08797868797868796f, 0.3191083426377544f}, - {0.23728036669213137f, 0.08656833362715716f, 0.31546492722963315f}, - {0.24186401833460655f, 0.08515797927562632f, 0.31182151182151185f}, - {0.24644766997708173f, 0.0837476249240955f, 0.30817809641339056f}, - {0.2510313216195569f, 0.08233727057256468f, 0.30453468100526926f}, - {0.2556149732620321f, 0.08092691622103386f, 0.30089126559714796f}, - {0.2601986249045073f, 0.07951656186950304f, 0.29724785018902666f}, - {0.2647822765469824f, 0.0781062075179722f, 0.29360443478090537f}, - {0.2693659281894576f, 0.0766958531664414f, 0.28996101937278407f}, - {0.27394957983193274f, 0.07528549881491058f, 0.28631760396466277f}, - {0.2785332314744079f, 0.07387514446337975f, 0.2826741885565415f}, - {0.2831168831168831f, 0.07246479011184892f, 0.2790307731484202f}, - {0.2877005347593583f, 0.0710544357603181f, 0.2753873577402989f}, - {0.29228418640183346f, 0.06964408140878728f, 0.2717439423321776f}, - {0.2968678380443086f, 0.06823372705725646f, 0.2681005269240563f}, - {0.3014514896867838f, 0.06682337270572564f, 0.264457111515935f}, - {0.30603514132925896f, 0.06541301835419482f, 0.26081369610781374f}, - {0.3106187929717341f, 0.064002664002664f, 0.2571702806996925f}, - {0.3152024446142093f, 0.06259230965113317f, 0.2535268652915712f}, - {0.31978609625668447f, 0.06118195529960235f, 0.24988344988344988f}, - {0.3243697478991596f, 0.05977160094807153f, 0.24624003447532858f}, - {0.32895339954163483f, 0.05836124659654071f, 0.24259661906720728f}, - {0.33353705118411f, 0.056950892245009876f, 0.23895320365908598f}, - {0.3381207028265852f, 0.055540537893479056f, 0.23530978825096469f}, - {0.34270435446906033f, 0.05413018354194825f, 0.23166637284284342f}, - {0.34728800611153554f, 0.052719829190417414f, 0.22802295743472212f}, - {0.3518716577540107f, 0.05130947483888659f, 0.22437954202660085f}, - {0.3564553093964859f, 0.04989912048735577f, 0.22073612661847952f}, - {0.361038961038961f, 0.04848876613582495f, 0.21709271121035825f}, - {0.36562261268143614f, 0.047078411784294144f, 0.21344929580223698f}, - {0.37020626432391135f, 0.04566805743276331f, 0.20980588039411568f}, - {0.3747899159663865f, 0.04425770308123249f, 0.2061624649859944f}, - {0.3793735676088617f, 0.042847348729701654f, 0.2025190495778731f}, - {0.38395721925133686f, 0.04143699437817085f, 0.1988756341697518f}, - {0.38854087089381206f, 0.04002664002664001f, 0.1952322187616305f}, - {0.3931245225362872f, 0.038616285675109205f, 0.1915888033535092f}, - {0.39770817417876236f, 0.037205931323578384f, 0.18794538794538795f}, - {0.40229182582123757f, 0.03579557697204755f, 0.18430197253726666f}, - {0.4068754774637127f, 0.03438522262051674f, 0.18065855712914536f}, - {0.4114591291061879f, 0.03297486826898591f, 0.17701514172102406f}, - {0.4160427807486631f, 0.031564513917455087f, 0.17337172631290276f}, - {0.4206264323911383f, 0.030154159565924266f, 0.16972831090478147f}, - {0.42521008403361343f, 0.028743805214393445f, 0.16608489549666017f}, - {0.42979373567608864f, 0.02733345086286261f, 0.16244148008853887f}, - {0.4343773873185638f, 0.025923096511331803f, 0.15879806468041757f}, - {0.4389610389610389f, 0.024512742159800982f, 0.15515464927229633f}, - {0.4435446906035141f, 0.023102387808270147f, 0.15151123386417503f}, - {0.44812834224598924f, 0.02169203345673934f, 0.14786781845605373f}, - {0.45271199388846445f, 0.020281679105208505f, 0.14422440304793244f}, - {0.4572956455309396f, 0.0188713247536777f, 0.14058098763981114f}, - {0.4618792971734148f, 0.017460970402146864f, 0.13693757223168984f}, - {0.46646294881588996f, 0.016050616050616057f, 0.13329415682356854f}, - {0.4710466004583651f, 0.014640261699085222f, 0.1296507414154473f}, - {0.4756302521008403f, 0.013229907347554387f, 0.126007326007326f}, - {0.48021390374331546f, 0.01181955299602358f, 0.1223639105992047f}, - {0.48479755538579067f, 0.010409198644492745f, 0.11872049519108341f}, - {0.4893812070282658f, 0.008998844292961938f, 0.11507707978296211f}, - {0.493964858670741f, 0.0075884899414311036f, 0.11143366437484081f}, - {0.4985485103132162f, 0.0061781355899002965f, 0.10779024896671952f}, - {0.5031321619556914f, 0.004767781238369462f, 0.10414683355859822f}, - {0.5069636246106834f, 0.007228066051595462f, 0.10250925545043192f}, - {0.5096668037844508f, 0.015494309611956669f, 0.103880433292198f}, - {0.5123699829582182f, 0.023760553172317875f, 0.10525161113396407f}, - {0.5150731621319856f, 0.03202679673267908f, 0.10662278897573015f}, - {0.517776341305753f, 0.04029304029304029f, 0.10799396681749623f}, - {0.5204795204795205f, 0.0485592838534015f, 0.10936514465926231f}, - {0.5231826996532879f, 0.0568255274137627f, 0.11073632250102838f}, - {0.5258858788270553f, 0.06509177097412391f, 0.11210750034279446f}, - {0.5285890580008227f, 0.07335801453448511f, 0.11347867818456053f}, - {0.5312922371745901f, 0.08162425809484633f, 0.11484985602632661f}, - {0.5339954163483575f, 0.08989050165520752f, 0.11622103386809268f}, - {0.536698595522125f, 0.09815674521556875f, 0.11759221170985877f}, - {0.5394017746958923f, 0.10642298877592994f, 0.11896338955162485f}, - {0.5421049538696597f, 0.11468923233629115f, 0.12033456739339092f}, - {0.5448081330434271f, 0.12295547589665236f, 0.121705745235157f}, - {0.5475113122171945f, 0.13122171945701355f, 0.12307692307692307f}, - {0.550214491390962f, 0.13948796301737476f, 0.12444810091868916f}, - {0.5529176705647294f, 0.14775420657773597f, 0.12581927876045523f}, - {0.5556208497384968f, 0.15602045013809718f, 0.1271904566022213f}, - {0.5583240289122642f, 0.16428669369845839f, 0.12856163444398738f}, - {0.5610272080860316f, 0.1725529372588196f, 0.12993281228575346f}, - {0.563730387259799f, 0.1808191808191808f, 0.13130399012751953f}, - {0.5664335664335665f, 0.189085424379542f, 0.1326751679692856f}, - {0.5691367456073338f, 0.19735166793990322f, 0.13404634581105168f}, - {0.5718399247811012f, 0.20561791150026443f, 0.13541752365281776f}, - {0.5745431039548686f, 0.21388415506062564f, 0.13678870149458383f}, - {0.577246283128636f, 0.22215039862098684f, 0.13815987933634993f}, - {0.5799494623024035f, 0.23041664218134805f, 0.13953105717811598f}, - {0.5826526414761709f, 0.23868288574170926f, 0.14090223501988208f}, - {0.5853558206499383f, 0.24694912930207047f, 0.14227341286164813f}, - {0.5880589998237057f, 0.2552153728624316f, 0.14364459070341423f}, - {0.5907621789974731f, 0.26348161642279283f, 0.1450157685451803f}, - {0.5934653581712405f, 0.2717478599831541f, 0.14638694638694638f}, - {0.596168537345008f, 0.2800141035435153f, 0.14775812422871246f}, - {0.5988717165187754f, 0.2882803471038765f, 0.14912930207047853f}, - {0.6015748956925427f, 0.29654659066423766f, 0.1505004799122446f}, - {0.6042780748663101f, 0.30481283422459887f, 0.15187165775401068f}, - {0.6069812540400775f, 0.3130790777849601f, 0.15324283559577676f}, - {0.6096844332138449f, 0.3213453213453213f, 0.15461401343754283f}, - {0.6123876123876124f, 0.3296115649056825f, 0.15598519127930893f}, - {0.6150907915613798f, 0.3378778084660437f, 0.15735636912107498f}, - {0.6177939707351472f, 0.3461440520264049f, 0.15872754696284108f}, - {0.6204971499089146f, 0.3544102955867661f, 0.16009872480460716f}, - {0.623200329082682f, 0.36267653914712733f, 0.16146990264637323f}, - {0.6259035082564495f, 0.37094278270748854f, 0.1628410804881393f}, - {0.6286066874302169f, 0.37920902626784975f, 0.16421225832990538f}, - {0.6313098666039842f, 0.38747526982821096f, 0.16558343617167146f}, - {0.6340130457777516f, 0.39574151338857216f, 0.16695461401343753f}, - {0.636716224951519f, 0.40400775694893337f, 0.1683257918552036f}, - {0.6394194041252865f, 0.4122740005092946f, 0.16969696969696968f}, - {0.6421225832990539f, 0.4205402440696558f, 0.17106814753873578f}, - {0.6448257624728213f, 0.42880648763001694f, 0.17243932538050183f}, - {0.6475289416465887f, 0.43707273119037815f, 0.17381050322226793f}, - {0.6502321208203561f, 0.44533897475073936f, 0.17518168106403398f}, - {0.6529352999941235f, 0.4536052183111006f, 0.17655285890580008f}, - {0.6556384791678909f, 0.46187146187146183f, 0.17792403674756613f}, - {0.6583416583416584f, 0.47013770543182304f, 0.17929521458933223f}, - {0.6610448375154258f, 0.47840394899218425f, 0.1806663924310983f}, - {0.6637480166891931f, 0.48667019255254546f, 0.18203757027286438f}, - {0.6664511958629605f, 0.4949364361129066f, 0.18340874811463045f}, - {0.6691543750367279f, 0.5032026796732678f, 0.18477992595639653f}, - {0.6718575542104954f, 0.511468923233629f, 0.1861511037981626f}, - {0.6745607333842628f, 0.5197351667939902f, 0.18752228163992868f}, - {0.6772639125580302f, 0.5280014103543514f, 0.18889345948169478f}, - {0.6799670917317976f, 0.5362676539147126f, 0.19026463732346083f}, - {0.682670270905565f, 0.5445338974750739f, 0.19163581516522693f}, - {0.6853734500793325f, 0.5528001410354351f, 0.19300699300699298f}, - {0.6880766292530999f, 0.5610663845957963f, 0.19437817084875908f}, - {0.6907798084268673f, 0.5693326281561575f, 0.19574934869052513f}, - {0.6934829876006346f, 0.5775988717165187f, 0.19712052653229123f}, - {0.696186166774402f, 0.5858651152768799f, 0.1984917043740573f}, - {0.6988893459481694f, 0.5941313588372411f, 0.19986288221582338f}, - {0.7015925251219368f, 0.6023976023976023f, 0.20123406005758945f}, - {0.7042957042957043f, 0.6106638459579635f, 0.20260523789935553f}, - {0.7069988834694717f, 0.6189300895183247f, 0.20397641574112163f}, - {0.7097020626432391f, 0.6271963330786859f, 0.20534759358288768f}, - {0.7124052418170066f, 0.6354625766390471f, 0.20671877142465378f}, - {0.7151084209907739f, 0.6437288201994084f, 0.20808994926641983f}, - {0.7178116001645414f, 0.6519950637597696f, 0.20946112710818593f}, - {0.7205147793383088f, 0.6602613073201308f, 0.21083230494995198f}, - {0.7232179585120762f, 0.6685275508804919f, 0.21220348279171808f}, - {0.7259211376858435f, 0.6767937944408532f, 0.21357466063348415f}, - {0.7286243168596109f, 0.6850600380012144f, 0.21494583847525023f}, - {0.7313274960333784f, 0.6933262815615756f, 0.2163170163170163f}, - {0.7340306752071458f, 0.7015925251219368f, 0.21768819415878238f}, - {0.7367338543809132f, 0.709858768682298f, 0.21905937200054848f}, - {0.7394370335546806f, 0.7181250122426592f, 0.22043054984231453f}, - {0.742140212728448f, 0.7263912558030203f, 0.2218017276840806f}, - {0.7448433919022155f, 0.7346574993633816f, 0.22317290552584668f}, - {0.7475465710759828f, 0.7429237429237427f, 0.22454408336761275f}, - {0.7502497502497503f, 0.7511899864841041f, 0.22591526120937883f}, - {0.7529529294235177f, 0.7594562300444652f, 0.2272864390511449f}, - {0.755656108597285f, 0.7677224736048265f, 0.228657616892911f}, - {0.7583592877710525f, 0.7759887171651877f, 0.23002879473467708f}, - {0.7610624669448198f, 0.7842549607255489f, 0.23139997257644315f}, - {0.7637656461185873f, 0.7925212042859101f, 0.23277115041820923f}, - {0.7664688252923546f, 0.8007874478462712f, 0.2341423282599753f}, - {0.7691720044661221f, 0.8090536914066325f, 0.23551350610174138f}, - {0.7718751836398895f, 0.8173199349669936f, 0.23688468394350745f}, - {0.7745783628136569f, 0.8255861785273549f, 0.23825586178527353f}, - {0.7754363283775049f, 0.8310787251963722f, 0.23886309768662708f}, - {0.7719887955182073f, 0.8300993124522535f, 0.23768780239368473f}, - {0.7685412626589098f, 0.8291198997081349f, 0.23651250710074237f}, - {0.7650937297996122f, 0.8281404869640163f, 0.23533721180780004f}, - {0.7616461969403147f, 0.8271610742198977f, 0.23416191651485768f}, - {0.758198664081017f, 0.8261816614757791f, 0.23298662122191532f}, - {0.7547511312217194f, 0.8252022487316605f, 0.23181132592897297f}, - {0.7513035983624219f, 0.8242228359875418f, 0.2306360306360306f}, - {0.7478560655031243f, 0.8232434232434231f, 0.22946073534308828f}, - {0.7444085326438268f, 0.8222640104993045f, 0.22828544005014592f}, - {0.7409609997845292f, 0.8212845977551859f, 0.22711014475720356f}, - {0.7375134669252317f, 0.8203051850110673f, 0.2259348494642612f}, - {0.7340659340659341f, 0.8193257722669487f, 0.22475955417131888f}, - {0.7306184012066366f, 0.8183463595228301f, 0.22358425887837652f}, - {0.727170868347339f, 0.8173669467787115f, 0.22240896358543416f}, - {0.7237233354880414f, 0.8163875340345927f, 0.2212336682924918f}, - {0.7202758026287438f, 0.8154081212904741f, 0.22005837299954945f}, - {0.7168282697694462f, 0.8144287085463555f, 0.21888307770660712f}, - {0.7133807369101487f, 0.8134492958022369f, 0.21770778241366476f}, - {0.7099332040508511f, 0.8124698830581183f, 0.2165324871207224f}, - {0.7064856711915536f, 0.8114904703139997f, 0.21535719182778004f}, - {0.703038138332256f, 0.8105110575698811f, 0.2141818965348377f}, - {0.6995906054729584f, 0.8095316448257625f, 0.21300660124189535f}, - {0.6961430726136608f, 0.8085522320816438f, 0.211831305948953f}, - {0.6926955397543633f, 0.8075728193375251f, 0.21065601065601064f}, - {0.6892480068950657f, 0.8065934065934065f, 0.20948071536306828f}, - {0.6858004740357682f, 0.8056139938492879f, 0.20830542007012592f}, - {0.6823529411764706f, 0.8046345811051693f, 0.2071301247771836f}, - {0.678905408317173f, 0.8036551683610507f, 0.20595482948424124f}, - {0.6754578754578755f, 0.802675755616932f, 0.20477953419129888f}, - {0.672010342598578f, 0.8016963428728134f, 0.20360423889835655f}, - {0.6685628097392804f, 0.8007169301286948f, 0.2024289436054142f}, - {0.6651152768799828f, 0.7997375173845761f, 0.20125364831247183f}, - {0.6616677440206852f, 0.7987581046404575f, 0.20007835301952948f}, - {0.6582202111613876f, 0.7977786918963389f, 0.19890305772658712f}, - {0.6547726783020901f, 0.7967992791522203f, 0.19772776243364476f}, - {0.6513251454427925f, 0.7958198664081017f, 0.19655246714070243f}, - {0.647877612583495f, 0.794840453663983f, 0.19537717184776007f}, - {0.6444300797241974f, 0.7938610409198644f, 0.19420187655481772f}, - {0.6409825468648999f, 0.7928816281757458f, 0.19302658126187539f}, - {0.6375350140056023f, 0.7919022154316271f, 0.19185128596893303f}, - {0.6340874811463046f, 0.7909228026875085f, 0.19067599067599067f}, - {0.6306399482870071f, 0.7899433899433899f, 0.1895006953830483f}, - {0.6271924154277095f, 0.7889639771992712f, 0.18832540009010595f}, - {0.623744882568412f, 0.7879845644551526f, 0.1871501047971636f}, - {0.6202973497091144f, 0.787005151711034f, 0.18597480950422127f}, - {0.6168498168498169f, 0.7860257389669154f, 0.1847995142112789f}, - {0.6134022839905193f, 0.7850463262227968f, 0.18362421891833655f}, - {0.6099547511312218f, 0.7840669134786781f, 0.18244892362539422f}, - {0.6065072182719242f, 0.7830875007345595f, 0.18127362833245186f}, - {0.6030596854126267f, 0.7821080879904408f, 0.1800983330395095f}, - {0.5996121525533291f, 0.7811286752463222f, 0.17892303774656715f}, - {0.5961646196940315f, 0.7801492625022036f, 0.1777477424536248f}, - {0.5927170868347339f, 0.779169849758085f, 0.17657244716068243f}, - {0.5892695539754363f, 0.7781904370139664f, 0.1753971518677401f}, - {0.5858220211161388f, 0.7772110242698478f, 0.17422185657479775f}, - {0.5823744882568412f, 0.7762316115257291f, 0.1730465612818554f}, - {0.5789269553975437f, 0.7752521987816104f, 0.17187126598891306f}, - {0.5754794225382461f, 0.7742727860374918f, 0.1706959706959707f}, - {0.5720318896789485f, 0.7732933732933732f, 0.16952067540302834f}, - {0.5685843568196509f, 0.7723139605492546f, 0.16834538011008598f}, - {0.5651368239603534f, 0.771334547805136f, 0.16717008481714363f}, - {0.5616892911010558f, 0.7703551350610174f, 0.16599478952420127f}, - {0.5582417582417583f, 0.7693757223168988f, 0.16481949423125894f}, - {0.5547942253824607f, 0.7683963095727802f, 0.16364419893831655f}, - {0.5513466925231632f, 0.7674168968286614f, 0.16246890364537422f}, - {0.5478991596638656f, 0.7664374840845428f, 0.1612936083524319f}, - {0.544451626804568f, 0.7654580713404242f, 0.16011831305948954f}, - {0.5410040939452705f, 0.7644786585963056f, 0.15894301776654718f}, - {0.5375565610859729f, 0.763499245852187f, 0.15776772247360482f}, - {0.5341090282266754f, 0.7625198331080684f, 0.15659242718066246f}, - {0.5306614953673777f, 0.7615404203639498f, 0.1554171318877201f}, - {0.5272139625080802f, 0.7605610076198311f, 0.15424183659477775f}, - {0.5237664296487827f, 0.7595815948757125f, 0.15306654130183542f}, - {0.5203188967894851f, 0.7586021821315938f, 0.15189124600889306f}, - {0.5168713639301875f, 0.7576227693874752f, 0.15071595071595073f}, - {0.5134238310708898f, 0.7566433566433566f, 0.14954065542300837f}, - {0.5099762982115924f, 0.755663943899238f, 0.14836536013006602f}, - {0.5065287653522947f, 0.7546845311551194f, 0.14719006483712366f}, - {0.5030812324929972f, 0.7537051184110007f, 0.1460147695441813f}, - {0.49963369963369964f, 0.7527257056668821f, 0.14483947425123894f}, - {0.4961861667744021f, 0.7517462929227634f, 0.14366417895829658f}, - {0.4927386339151046f, 0.7507668801786448f, 0.14248888366535425f}, - {0.489291101055807f, 0.7497874674345262f, 0.1413135883724119f}, - {0.4858435681965094f, 0.7488080546904076f, 0.14013829307946957f}, - {0.4823960353372118f, 0.747828641946289f, 0.1389629977865272f}, - {0.4789485024779143f, 0.7468492292021703f, 0.13778770249358485f}, - {0.4755009696186167f, 0.7458698164580517f, 0.1366124072006425f}, - {0.47205343675931916f, 0.7448904037139331f, 0.13543711190770014f}, - {0.4686059039000216f, 0.7439109909698145f, 0.13426181661475778f}, - {0.465158371040724f, 0.7429315782256958f, 0.13308652132181542f}, - {0.4617108381814265f, 0.7419521654815772f, 0.1319112260288731f}, - {0.4582633053221289f, 0.7409727527374586f, 0.13073593073593073f}, - {0.45481577246283134f, 0.7399933399933399f, 0.1295606354429884f}, - {0.4513682396035337f, 0.7390139272492213f, 0.12838534015004605f}, - {0.44792070674423623f, 0.7380345145051027f, 0.1272100448571037f}, - {0.4444731738849386f, 0.7370551017609841f, 0.12603474956416133f}, - {0.44102564102564107f, 0.7360756890168654f, 0.12485945427121897f}, - {0.4375781081663435f, 0.7350962762727469f, 0.12368415897827663f}, - {0.4341305753070459f, 0.7341168635286281f, 0.12250886368533427f}, - {0.43191318485436136f, 0.7319464848876613f, 0.12179585120761591f}, - {0.43461636402812875f, 0.7250122426593014f, 0.12293196999079352f}, - {0.43731954320189614f, 0.7180780004309416f, 0.12406808877397113f}, - {0.4400227223756636f, 0.7111437582025817f, 0.12520420755714873f}, - {0.442725901549431f, 0.7042095159742218f, 0.12634032634032633f}, - {0.44542908072319837f, 0.697275273745862f, 0.12747644512350395f}, - {0.4481322598969658f, 0.690341031517502f, 0.12861256390668155f}, - {0.4508354390707332f, 0.6834067892891422f, 0.12974868268985915f}, - {0.4535386182445006f, 0.6764725470607823f, 0.13088480147303677f}, - {0.45624179741826804f, 0.6695383048324224f, 0.13202092025621437f}, - {0.4589449765920354f, 0.6626040626040626f, 0.13315703903939197f}, - {0.4616481557658028f, 0.6556698203757026f, 0.1342931578225696f}, - {0.46435133493957026f, 0.6487355781473428f, 0.1354292766057472f}, - {0.46705451411333765f, 0.6418013359189829f, 0.1365653953889248f}, - {0.46975769328710504f, 0.6348670936906231f, 0.1377015141721024f}, - {0.4724608724608725f, 0.6279328514622632f, 0.13883763295528f}, - {0.4751640516346399f, 0.6209986092339033f, 0.1399737517384576f}, - {0.4778672308084073f, 0.6140643670055435f, 0.14110987052163523f}, - {0.4805704099821747f, 0.6071301247771835f, 0.14224598930481283f}, - {0.4832735891559421f, 0.6001958825488237f, 0.14338210808799043f}, - {0.4859767683297095f, 0.5932616403204638f, 0.14451822687116805f}, - {0.48867994750347693f, 0.586327398092104f, 0.14565434565434565f}, - {0.4913831266772443f, 0.5793931558637441f, 0.14679046443752325f}, - {0.49408630585101176f, 0.5724589136353841f, 0.14792658322070087f}, - {0.49678948502477915f, 0.5655246714070243f, 0.14906270200387847f}, - {0.49949266419854654f, 0.5585904291786644f, 0.15019882078705607f}, - {0.5021958433723139f, 0.5516561869503046f, 0.1513349395702337f}, - {0.5048990225460814f, 0.5447219447219447f, 0.1524710583534113f}, - {0.5076022017198488f, 0.5377877024935849f, 0.1536071771365889f}, - {0.5103053808936162f, 0.530853460265225f, 0.15474329591976652f}, - {0.5130085600673836f, 0.523919218036865f, 0.1558794147029441f}, - {0.515711739241151f, 0.5169849758085052f, 0.1570155334861217f}, - {0.5184149184149184f, 0.5100507335801453f, 0.15815165226929934f}, - {0.5211180975886858f, 0.5031164913517855f, 0.15928777105247693f}, - {0.5238212767624533f, 0.49618224912342557f, 0.16042388983565453f}, - {0.5265244559362207f, 0.4892480068950657f, 0.16156000861883213f}, - {0.529227635109988f, 0.48231376466670584f, 0.16269612740200975f}, - {0.5319308142837554f, 0.4753795224383459f, 0.16383224618518735f}, - {0.5346339934575228f, 0.46844528020998605f, 0.16496836496836498f}, - {0.5373371726312903f, 0.4615110379816262f, 0.16610448375154258f}, - {0.5400403518050577f, 0.4545767957532663f, 0.16724060253472017f}, - {0.5427435309788251f, 0.44764255352490645f, 0.16837672131789777f}, - {0.5454467101525925f, 0.4407083112965466f, 0.1695128401010754f}, - {0.5481498893263599f, 0.4337740690681867f, 0.170648958884253f}, - {0.5508530685001273f, 0.4268398268398268f, 0.17178507766743062f}, - {0.5535562476738948f, 0.41990558461146693f, 0.17292119645060822f}, - {0.5562594268476622f, 0.41297134238310707f, 0.17405731523378581f}, - {0.5589626060214296f, 0.40603710015474714f, 0.1751934340169634f}, - {0.5616657851951969f, 0.39910285792638733f, 0.17632955280014104f}, - {0.5643689643689643f, 0.39216861569802747f, 0.17746567158331863f}, - {0.5670721435427317f, 0.3852343734696676f, 0.17860179036649626f}, - {0.5697753227164992f, 0.3783001312413077f, 0.17973790914967386f}, - {0.5724785018902666f, 0.3713658890129478f, 0.18087402793285146f}, - {0.575181681064034f, 0.36443164678458795f, 0.18201014671602905f}, - {0.5778848602378014f, 0.357497404556228f, 0.18314626549920668f}, - {0.5805880394115688f, 0.35056316232786816f, 0.18428238428238428f}, - {0.5832912185853362f, 0.34362892009950835f, 0.1854185030655619f}, - {0.5859943977591036f, 0.3366946778711485f, 0.1865546218487395f}, - {0.5886975769328711f, 0.32976043564278856f, 0.1876907406319171f}, - {0.5914007561066384f, 0.3228261934144287f, 0.1888268594150947f}, - {0.5941039352804058f, 0.31589195118606883f, 0.1899629781982723f}, - {0.5968071144541732f, 0.3089577089577089f, 0.19109909698144992f}, - {0.5995102936279406f, 0.30202346672934904f, 0.19223521576462754f}, - {0.6022134728017081f, 0.29508922450098923f, 0.19337133454780514f}, - {0.6049166519754755f, 0.2881549822726293f, 0.19450745333098274f}, - {0.6076198311492429f, 0.28122074004426945f, 0.19564357211416034f}, - {0.6103230103230103f, 0.2742864978159095f, 0.19677969089733796f}, - {0.6130261894967777f, 0.2673522555875497f, 0.19791580968051556f}, - {0.6157293686705451f, 0.26041801335918985f, 0.19905192846369316f}, - {0.6184325478443126f, 0.2534837711308299f, 0.20018804724687078f}, - {0.62113572701808f, 0.24654952890247012f, 0.20132416603004838f}, - {0.6238389061918473f, 0.2396152866741102f, 0.20246028481322598f}, - {0.6265420853656147f, 0.23268104444575033f, 0.20359640359640357f}, - {0.6292452645393822f, 0.2257468022173904f, 0.2047325223795812f}, - {0.6319484437131495f, 0.2188125599890306f, 0.2058686411627588f}, - {0.634651622886917f, 0.21187831776067068f, 0.20700475994593642f}, - {0.6373548020606844f, 0.20494407553231087f, 0.20814087872911402f}, - {0.6400579812344518f, 0.19800983330395094f, 0.20927699751229162f}, - {0.6427611604082192f, 0.19107559107559102f, 0.21041311629546922f}, - {0.6454643395819866f, 0.1841413488472312f, 0.2115492350786468f}, - {0.6481675187557541f, 0.1772071066188713f, 0.21268535386182447f}, - {0.6508706979295215f, 0.17027286439051148f, 0.21382147264500206f}, - {0.6535738771032888f, 0.16333862216215156f, 0.21495759142817966f}, - {0.6562770562770562f, 0.15640437993379175f, 0.21609371021135726f}, - {0.6589802354508236f, 0.14947013770543183f, 0.21722982899453486f}, - {0.6616834146245911f, 0.1425358954770719f, 0.21836594777771248f}, - {0.6643865937983584f, 0.1356016532487121f, 0.21950206656089008f}, - {0.6670897729721259f, 0.12866741102035217f, 0.2206381853440677f}, - {0.6697929521458933f, 0.12173316879199236f, 0.2217743041272453f}, - {0.6724961313196607f, 0.11479892656363244f, 0.2229104229104229f}, - {0.6751993104934281f, 0.10786468433527263f, 0.2240465416936005f}, - {0.6779024896671955f, 0.10093044210691271f, 0.22518266047677812f}, - {0.680605668840963f, 0.09399619987855279f, 0.22631877925995572f}, - {0.6833088480147302f, 0.08706195765019298f, 0.22745489804313332f}, - {0.6860120271884977f, 0.08012771542183306f, 0.22859101682631094f}, - {0.6887152063622651f, 0.07319347319347325f, 0.22972713560948854f}, - {0.6914183855360325f, 0.06625923096511332f, 0.23086325439266614f}, - {0.6941215647098f, 0.059324988736753514f, 0.23199937317584374f}, - {0.6968247438835673f, 0.05239074650839359f, 0.2331354919590214f}, - {0.6995279230573348f, 0.04545650428003367f, 0.234271610742199f}, - {0.7017609841139253f, 0.0396779690897338f, 0.23556051791345908f}, - {0.6997629821159232f, 0.04430079724197371f, 0.23822452057746174f}, - {0.6977649801179212f, 0.04892362539421363f, 0.24088852324146443f}, - {0.6957669781199193f, 0.05354645354645354f, 0.24355252590546708f}, - {0.6937689761219172f, 0.05816928169869347f, 0.24621652856946974f}, - {0.6917709741239153f, 0.06279210985093338f, 0.2488805312334724f}, - {0.6897729721259133f, 0.0674149380031733f, 0.25154453389747505f}, - {0.6877749701279112f, 0.07203776615541321f, 0.25420853656147774f}, - {0.6857769681299093f, 0.07666059430765312f, 0.2568725392254804f}, - {0.6837789661319073f, 0.08128342245989303f, 0.25953654188948305f}, - {0.6817809641339052f, 0.08590625061213296f, 0.26220054455348574f}, - {0.6797829621359033f, 0.09052907876437288f, 0.26486454721748837f}, - {0.6777849601379012f, 0.0951519069166128f, 0.26752854988149105f}, - {0.6757869581398993f, 0.0997747350688527f, 0.27019255254549374f}, - {0.6737889561418973f, 0.10439756322109263f, 0.27285655520949637f}, - {0.6717909541438952f, 0.10902039137333254f, 0.27552055787349905f}, - {0.6697929521458933f, 0.11364321952557245f, 0.27818456053750173f}, - {0.6677949501478913f, 0.11826604767781237f, 0.28084856320150436f}, - {0.6657969481498893f, 0.1228888758300523f, 0.28351256586550705f}, - {0.6637989461518873f, 0.12751170398229222f, 0.2861765685295097f}, - {0.6618009441538852f, 0.13213453213453213f, 0.28884057119351236f}, - {0.6598029421558833f, 0.13675736028677205f, 0.29150457385751505f}, - {0.6578049401578813f, 0.14138018843901196f, 0.2941685765215177f}, - {0.6558069381598793f, 0.14600301659125187f, 0.29683257918552036f}, - {0.6538089361618773f, 0.15062584474349178f, 0.299496581849523f}, - {0.6518109341638753f, 0.1552486728957317f, 0.3021605845135257f}, - {0.6498129321658733f, 0.15987150104797163f, 0.30482458717752836f}, - {0.6478149301678713f, 0.16449432920021154f, 0.30748858984153105f}, - {0.6458169281698694f, 0.16911715735245145f, 0.3101525925055337f}, - {0.6438189261718673f, 0.17373998550469136f, 0.3128165951695363f}, - {0.6418209241738653f, 0.1783628136569313f, 0.315480597833539f}, - {0.6398229221758633f, 0.1829856418091712f, 0.3181446004975417f}, - {0.6378249201778613f, 0.18760846996141115f, 0.32080860316154436f}, - {0.6358269181798593f, 0.19223129811365106f, 0.323472605825547f}, - {0.6338289161818573f, 0.19685412626589094f, 0.3261366084895496f}, - {0.6318309141838553f, 0.20147695441813085f, 0.3288006111535523f}, - {0.6298329121858534f, 0.2060997825703708f, 0.331464613817555f}, - {0.6278349101878513f, 0.2107226107226107f, 0.33412861648155767f}, - {0.6258369081898494f, 0.21534543887485064f, 0.3367926191455603f}, - {0.6238389061918473f, 0.21996826702709055f, 0.339456621809563f}, - {0.6218409041938453f, 0.22459109517933046f, 0.3421206244735656f}, - {0.6198429021958434f, 0.2292139233315704f, 0.3447846271375683f}, - {0.6178449001978413f, 0.23383675148381028f, 0.347448629801571f}, - {0.6158468981998393f, 0.2384595796360502f, 0.3501126324655736f}, - {0.6138488962018374f, 0.24308240778829013f, 0.3527766351295763f}, - {0.6118508942038353f, 0.24770523594053004f, 0.35544063779357893f}, - {0.6098528922058334f, 0.25232806409277f, 0.3581046404575816f}, - {0.6078548902078313f, 0.2569508922450099f, 0.3607686431215843f}, - {0.6058568882098294f, 0.2615737203972498f, 0.363432645785587f}, - {0.6038588862118274f, 0.2661965485494897f, 0.3660966484495896f}, - {0.6018608842138253f, 0.2708193767017296f, 0.36876065111359224f}, - {0.5998628822158234f, 0.27544220485396953f, 0.3714246537775949f}, - {0.5978648802178214f, 0.28006503300620944f, 0.3740886564415976f}, - {0.5958668782198193f, 0.28468786115844935f, 0.3767526591056003f}, - {0.5938688762218174f, 0.28931068931068926f, 0.3794166617696029f}, - {0.5918708742238153f, 0.2939335174629292f, 0.3820806644336056f}, - {0.5898728722258134f, 0.2985563456151691f, 0.38474466709760824f}, - {0.5878748702278114f, 0.303179173767409f, 0.3874086697616109f}, - {0.5858768682298094f, 0.3078020019196489f, 0.3900726724256136f}, - {0.5838788662318074f, 0.3124248300718888f, 0.39273667508961624f}, - {0.5818808642338054f, 0.3170476582241287f, 0.3954006777536189f}, - {0.5798828622358034f, 0.32167048637636875f, 0.39806468041762155f}, - {0.5778848602378014f, 0.32629331452860866f, 0.40072868308162424f}, - {0.5758868582397993f, 0.33091614268084846f, 0.4033926857456269f}, - {0.5738888562417974f, 0.3355389708330885f, 0.4060566884096296f}, - {0.5718908542437954f, 0.3401617989853284f, 0.40872069107363224f}, - {0.5698928522457933f, 0.3447846271375683f, 0.4113846937376349f}, - {0.5678948502477914f, 0.3494074552898082f, 0.41404869640163755f}, - {0.5658968482497894f, 0.3540302834420481f, 0.41671269906564024f}, - {0.5638988462517874f, 0.35865311159428803f, 0.4193767017296429f}, - {0.5619008442537854f, 0.36327593974652794f, 0.42204070439364555f}, - {0.5599028422557835f, 0.36789876789876785f, 0.42470470705764823f}, - {0.5579048402577814f, 0.37252159605100776f, 0.42736870972165086f}, - {0.5559068382597794f, 0.3771444242032477f, 0.43003271238565355f}, - {0.5539088362617774f, 0.3817672523554876f, 0.43269671504965623f}, - {0.5519108342637754f, 0.3863900805077276f, 0.4353607177136589f}, - {0.5499128322657734f, 0.3910129086599674f, 0.43802472037766155f}, - {0.5479148302677714f, 0.39563573681220743f, 0.44068872304166423f}, - {0.5459168282697694f, 0.40025856496444734f, 0.44335272570566686f}, - {0.5439188262717675f, 0.40488139311668714f, 0.44601672836966955f}, - {0.5419208242737654f, 0.40950422126892716f, 0.44868073103367223f}, - {0.5399228222757635f, 0.41412704942116696f, 0.45134473369767486f}, - {0.5379248202777615f, 0.418749877573407f, 0.45400873636167755f}, - {0.5359268182797594f, 0.4233727057256469f, 0.4566727390256802f}, - {0.5339288162817575f, 0.4279955338778868f, 0.45933674168968286f}, - {0.5319308142837554f, 0.4326183620301267f, 0.46200074435368554f}, - {0.5299328122857534f, 0.4372411901823666f, 0.4646647470176882f}, - {0.5279348102877515f, 0.44186401833460653f, 0.46732874968169086f}, - {0.5259368082897494f, 0.44648684648684644f, 0.4699927523456935f}, - {0.5239388062917474f, 0.45110967463908636f, 0.4726567550096962f}, - {0.5219408042937455f, 0.45573250279132627f, 0.47532075767369886f}, - {0.5199428022957434f, 0.4603553309435662f, 0.47798476033770154f}, - {0.5179448002977415f, 0.4649781590958061f, 0.48064876300170417f}, - {0.5159467982997394f, 0.4696009872480461f, 0.48331276566570686f}, - {0.5139487963017375f, 0.4742238154002859f, 0.4859767683297095f}, - {0.5119507943037355f, 0.4788466435525258f, 0.4886407709937121f}, - {0.5099527923057334f, 0.48346947170476584f, 0.4913047736577148f}, - {0.5079547903077315f, 0.48809229985700564f, 0.4939687763217175f}, - {0.5059567883097295f, 0.49271512800924566f, 0.49663277898572017f}, - {0.5039587863117275f, 0.4973379561614856f, 0.4992967816497228f}}; - -float palette_adam[11][3]={{1.f, 0.44705882352941173f, 0.f}, - {0.9607843137254902f, 0.4666666666666667f, 0.09019607843137255f}, - {0.2549019607843137f, 0.7019607843137254f, 0.8627450980392157f}, - {0.9254901960784314f, 0.f, 0.5490196078431373f}, - {0.023529411764705882f, 0.4784313725490196f, 0.7058823529411764f}, - {0.047058823529411764f, 0.14509803921568626f, 0.4666666666666667f}, - {0.5058823529411764f, 0.00392156862745098f, 0.10196078431372549f}, - {0.7764705882352941f, 0.8313725490196078f, 0.2392156862745098f}, - {0.43137254901960786f, 0.7333333333333333f, 0.12156862745098039f}, - {0.7019607843137254f, 0.0392156862745098f, 0.23529411764705882f}, - {0.5019607843137255f, 0.5019607843137255f, 0.5019607843137255f}}; - - - diff --git a/internal/ccall/sparse/color_palette.h b/internal/ccall/sparse/color_palette.h deleted file mode 100644 index 9914978..0000000 --- a/internal/ccall/sparse/color_palette.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef COLOR_PALLETE_H -#define COLOR_PALLETE_H -#include "stdio.h" -enum {MAX_COLOR = 1001}; - -enum {npalettes = 265}; -extern int knownColorScheme (char*); -extern char *color_palettes[npalettes][2]; - /* return a list of rgb in hex form: "#ff0000,#00ff00,..." */ -extern char *color_palettes_get(char *color_palette_name); -extern void color_palettes_name_print(FILE *fp); -extern int color_palettes_Q(char *color_palette_name); - -extern float palette_pastel[1001][3]; -extern float palette_blue_to_yellow[1001][3]; -extern float palette_grey_to_red[1001][3]; -extern float palette_grey_to_red[1001][3]; -extern float palette_white_to_red[1001][3]; -extern float palette_grey[1001][3]; -extern float palette_primary[1001][3]; -extern float palette_sequential_singlehue_red[1001][3]; -extern float palette_sequential_singlehue_red_lighter[1001][3]; -extern float palette_adam_blend[1001][3]; -extern float palette_adam[11][3]; - -#endif - - diff --git a/internal/ccall/sparse/colorutil.c b/internal/ccall/sparse/colorutil.c deleted file mode 100644 index 4239fc6..0000000 --- a/internal/ccall/sparse/colorutil.c +++ /dev/null @@ -1,99 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "general.h" -#include "colorutil.h" - -static void r2hex(float r, char *h){ - /* convert a number in [0,1] to 0 to 255 then to a hex */ - static char hex[] = "0123456789abcdef"; - int i = (int)(255*r+0.5); - int j = i%16; - int k = i/16; - h[0] = hex[k]; - h[1] = hex[j]; -} - -void rgb2hex(float r, float g, float b, char *cstring, char *opacity){ - cstring[0] = '#'; - r2hex(r, &(cstring[1])); - r2hex(g, &(cstring[3])); - r2hex(b, &(cstring[5])); - //set to semitransparent for multiple sets vis - if (opacity && strlen(opacity) >= 2){ - cstring[7] = opacity[0]; - cstring[8] = opacity[1]; - cstring[9]='\0'; - } else { - cstring[7] = '\0'; - } -} - -real Hue2RGB(real v1, real v2, real H) { - if(H < 0.0) H += 1.0; - if(H > 1.0) H -= 1.0; - if((6.0*H) < 1.0) return (v1 + (v2 - v1) * 6.0 * H); - if((2.0*H) < 1.0) return v2; - if((3.0*H) < 2.0) return (v1 + (v2 - v1) * ((2.0/3.0) - H) * 6.0); - return v1; -} - -char *hex[16]={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; - -char * hue2rgb(real hue, char *color){ - real v1, v2, lightness = .5, saturation = 1; - int red, blue, green; - - if(lightness < 0.5) - v2 = lightness * (1.0 + saturation); - else - v2 = (lightness + saturation) - (saturation * lightness); - - v1 = 2.0 * lightness - v2; - - red = (int)(255.0 * Hue2RGB(v1, v2, hue + (1.0/3.0)) + 0.5); - green = (int)(255.0 * Hue2RGB(v1, v2, hue) + 0.5); - blue = (int)(255.0 * Hue2RGB(v1, v2, hue - (1.0/3.0)) + 0.5); - color[0] = '#'; - sprintf(color+1,"%s",hex[red/16]); - sprintf(color+2,"%s",hex[red%16]); - sprintf(color+3,"%s",hex[green/16]); - sprintf(color+4,"%s",hex[green%16]); - sprintf(color+5,"%s",hex[blue/16]); - sprintf(color+6,"%s",hex[blue%16]); - color[7] = '\0'; - return color; -} - - -void hue2rgb_real(real hue, real *color){ - real v1, v2, lightness = .5, saturation = 1; - int red, blue, green; - - if(lightness < 0.5) - v2 = lightness * (1.0 + saturation); - else - v2 = (lightness + saturation) - (saturation * lightness); - - v1 = 2.0 * lightness - v2; - - red = (int)(255.0 * Hue2RGB(v1, v2, hue + (1.0/3.0)) + 0.5); - green = (int)(255.0 * Hue2RGB(v1, v2, hue) + 0.5); - blue = (int)(255.0 * Hue2RGB(v1, v2, hue - (1.0/3.0)) + 0.5); - - - color[0] = red/255.; - color[1] = green/255.; - color[2] = blue/255.; - -} diff --git a/internal/ccall/sparse/colorutil.h b/internal/ccall/sparse/colorutil.h deleted file mode 100644 index 03116f1..0000000 --- a/internal/ccall/sparse/colorutil.h +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef COLORUTIL_H -#define COLORUTIL_H - -#include - -extern int colorxlate(char *str, gvcolor_t * color, color_type_t target_type); - -void rgb2hex(float r, float g, float b, char *cstring, char* opacity);/* dimension of cstring must be >=7 */ -char* hue2rgb(real hue, char *color); -void hue2rgb_real(real hue, real *color); - -#endif diff --git a/internal/ccall/sparse/dummy.go b/internal/ccall/sparse/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/sparse/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/sparse/general.c b/internal/ccall/sparse/general.c deleted file mode 100644 index dc1140b..0000000 --- a/internal/ccall/sparse/general.c +++ /dev/null @@ -1,367 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "general.h" -#include - -#ifdef DEBUG -double _statistics[10]; -#endif - -real vector_median(int n, real *x){ - /* find the median value in a list of real */ - int *p = NULL; - real res; - vector_ordering(n, x, &p, TRUE); - - if ((n/2)*2 == n){ - res = 0.5*(x[p[n/2-1]] + x[p[n/2]]); - } else { - res = x[p[n/2]]; - } - FREE(p); - return res; -} -real vector_percentile(int n, real *x, real y){ - /* find the value such that y% of element of vector x is <= that value. - y: a value between 0 and 1. - */ - int *p = NULL, i; - real res; - vector_ordering(n, x, &p, TRUE); - - - y = MIN(y, 1); - y = MAX(0, y); - - i = n*y; - res = x[p[i]]; - FREE(p); return res; -} - -real drand(){ - return rand()/(real) RAND_MAX; -} - -int irand(int n){ - /* 0, 1, ..., n-1 */ - assert(n > 1); - /*return (int) MIN(floor(drand()*n),n-1);*/ - return rand()%n; -} - -int *random_permutation(int n){ - int *p; - int i, j, pp, len; - if (n <= 0) return NULL; - p = MALLOC(sizeof(int)*n); - for (i = 0; i < n; i++) p[i] = i; - - len = n; - while (len > 1){ - j = irand(len); - pp = p[len-1]; - p[len-1] = p[j]; - p[j] = pp; - len--; - } - return p; -} - - -real* vector_subtract_from(int n, real *x, real *y){ - /* y = x-y */ - int i; - for (i = 0; i < n; i++) y[i] = y[i] - x[i]; - return y; -} -real* vector_subtract_to(int n, real *x, real *y){ - /* y = x-y */ - int i; - for (i = 0; i < n; i++) y[i] = x[i] - y[i]; - return y; -} -real* vector_add_to(int n, real *x, real *y){ - /* y = x-y */ - int i; - for (i = 0; i < n; i++) y[i] = x[i] + y[i]; - return y; -} - -real vector_product(int n, real *x, real *y){ - real res = 0; - int i; - for (i = 0; i < n; i++) res += x[i]*y[i]; - return res; -} - -real* vector_saxpy(int n, real *x, real *y, real beta){ - /* y = x+beta*y */ - int i; - for (i = 0; i < n; i++) y[i] = x[i] + beta*y[i]; - return y; -} - -real* vector_saxpy2(int n, real *x, real *y, real beta){ - /* x = x+beta*y */ - int i; - for (i = 0; i < n; i++) x[i] = x[i] + beta*y[i]; - return x; -} - -void vector_print(char *s, int n, real *x){ - int i; - printf("%s{",s); - for (i = 0; i < n; i++) { - if (i > 0) printf(","); - printf("%f",x[i]); - } - printf("}\n"); -} - -void vector_take(int n, real *v, int m, int *p, real **u){ - /* take m elements v[p[i]]],i=1,...,m and oput in u */ - int i; - - if (!*u) *u = MALLOC(sizeof(real)*m); - - for (i = 0; i < m; i++) { - assert(p[i] < n && p[i] >= 0); - (*u)[i] = v[p[i]]; - } - -} - -void vector_float_take(int n, float *v, int m, int *p, float **u){ - /* take m elements v[p[i]]],i=1,...,m and oput in u */ - int i; - - if (!*u) *u = MALLOC(sizeof(float)*m); - - for (i = 0; i < m; i++) { - assert(p[i] < n && p[i] >= 0); - (*u)[i] = v[p[i]]; - } - -} - -int comp_ascend(const void *s1, const void *s2){ - real *ss1, *ss2; - ss1 = (real*) s1; - ss2 = (real*) s2; - - if ((ss1)[0] > (ss2)[0]){ - return 1; - } else if ((ss1)[0] < (ss2)[0]){ - return -1; - } - return 0; -} - -int comp_descend(const void *s1, const void *s2){ - real *ss1, *ss2; - ss1 = (real*) s1; - ss2 = (real*) s2; - - if ((ss1)[0] > (ss2)[0]){ - return -1; - } else if ((ss1)[0] < (ss2)[0]){ - return 1; - } - return 0; -} -int comp_descend_int(const void *s1, const void *s2){ - int *ss1, *ss2; - ss1 = (int*) s1; - ss2 = (int*) s2; - - if ((ss1)[0] > (ss2)[0]){ - return -1; - } else if ((ss1)[0] < (ss2)[0]){ - return 1; - } - return 0; -} - -int comp_ascend_int(const void *s1, const void *s2){ - int *ss1, *ss2; - ss1 = (int*) s1; - ss2 = (int*) s2; - - if ((ss1)[0] > (ss2)[0]){ - return 1; - } else if ((ss1)[0] < (ss2)[0]){ - return -1; - } - return 0; -} - - -void vector_ordering(int n, real *v, int **p, int ascending){ - /* give the position of the lagest, second largest etc in vector v if ascending = FALSE - - or - - give the position of the smallest, second smallest etc in vector v if ascending = TRUE. - results in p. If *p == NULL, p is asigned. - - ascending: TRUE if v[p] is from small to large. - */ - - real *u; - int i; - - if (!*p) *p = MALLOC(sizeof(int)*n); - u = MALLOC(sizeof(real)*2*n); - - for (i = 0; i < n; i++) { - u[2*i+1] = i; - u[2*i] = v[i]; - } - - if (ascending){ - qsort(u, n, sizeof(real)*2, comp_ascend); - } else { - qsort(u, n, sizeof(real)*2, comp_descend); - } - - for (i = 0; i < n; i++) (*p)[i] = (int) u[2*i+1]; - FREE(u); - -} - -void vector_sort_real(int n, real *v, int ascending){ - if (ascending){ - qsort(v, n, sizeof(real), comp_ascend); - } else { - qsort(v, n, sizeof(real), comp_descend); - } -} -void vector_sort_int(int n, int *v, int ascending){ - if (ascending){ - qsort(v, n, sizeof(int), comp_ascend_int); - } else { - qsort(v, n, sizeof(int), comp_descend_int); - } -} - -int excute_system_command3(char *s1, char *s2, char *s3){ - char c[1000]; - - strcpy(c, s1); - strcat(c, s2); - strcat(c, s3); - return system(c); -} - -int excute_system_command(char *s1, char *s2){ - char c[1000]; - - strcpy(c, s1); - strcat(c, s2); - return system(c); -} - -real distance_cropped(real *x, int dim, int i, int j){ - int k; - real dist = 0.; - for (k = 0; k < dim; k++) dist += (x[i*dim+k] - x[j*dim + k])*(x[i*dim+k] - x[j*dim + k]); - dist = sqrt(dist); - return MAX(dist, MINDIST); -} - -real distance(real *x, int dim, int i, int j){ - int k; - real dist = 0.; - for (k = 0; k < dim; k++) dist += (x[i*dim+k] - x[j*dim + k])*(x[i*dim+k] - x[j*dim + k]); - dist = sqrt(dist); - return dist; -} - -real point_distance(real *p1, real *p2, int dim){ - int i; - real dist; - dist = 0; - for (i = 0; i < dim; i++) dist += (p1[i] - p2[i])*(p1[i] - p2[i]); - return sqrt(dist); -} - -char *strip_dir(char *s){ - int i, first = TRUE; - if (!s) return s; - for (i = strlen(s); i >= 0; i--) { - if (first && s[i] == '.') {/* get rid of .mtx */ - s[i] = '\0'; - first = FALSE; - } - if (s[i] == '/') return (char*) &(s[i+1]); - } - return s; -} - -void scale_to_box(real xmin, real ymin, real xmax, real ymax, int n, int dim, real *x){ - real min[3], max[3], min0[3], ratio = 1; - int i, k; - - for (i = 0; i < dim; i++) { - min[i] = x[i]; - max[i] = x[i]; - } - - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) { - min[k] = MIN(x[i*dim+k], min[k]); - max[k] = MAX(x[i*dim+k], max[k]); - } - } - - if (max[0] - min[0] != 0) { - ratio = (xmax-xmin)/(max[0] - min[0]); - } - if (max[1] - min[1] != 0) { - ratio = MIN(ratio, (ymax-ymin)/(max[1] - min[1])); - } - - min0[0] = xmin; - min0[1] = ymin; - min0[2] = 0; - for (i = 0; i < n; i++){ - for (k = 0; k < dim; k++) { - x[i*dim+k] = min0[k] + (x[i*dim+k] - min[k])*ratio; - } - } - - -} - -int digitsQ(char *s){ - while (*s && *s - '0' >= 0 && *s - '0' <= 9) { - s++; - } - if (*s) return 0; - return 1; -} -int validQ_int_string(char *to_convert, int *v){ - /* check to see if this is a string is integer */ - char *p = to_convert; - uint64_t val; - errno = 0; - val = strtoul(to_convert, &p, 10); - if (errno != 0 ||// conversion failed (EINVAL, ERANGE) - to_convert == p || // conversion failed (no characters consumed) - *p != 0 - ) return 0; - if (val > INT_MAX || val < INT_MIN) return 0; - *v = (int) val; - return 1; -} diff --git a/internal/ccall/sparse/general.h b/internal/ccall/sparse/general.h deleted file mode 100644 index d62c318..0000000 --- a/internal/ccall/sparse/general.h +++ /dev/null @@ -1,150 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GENERAL_H -#define GENERAL_H - -#include -#include -#include -#include -#include -/* Applications that do not use the common library can define STANDALONE - * to get definitions/definitions that are normally provided there. - * In particular, note that Verbose is declared but undefined. - */ -#ifndef STANDALONE -#include -#include -#include -#include -#include -#endif /* STANDALONE */ - -#define real double - -#define set_flag(a, flag) ((a)=((a)|(flag))) -#define test_flag(a, flag) ((a)&(flag)) -#define clear_flag(a, flag) ((a) &=(~(flag))) - -#ifdef STANDALONE -#define MALLOC malloc -#define REALLOC realloc - -#define N_NEW(n,t) (t*)malloc((n)*sizeof(t)) -#define NEW(t) (t*)malloc(sizeof(t)) -#define MAX(a,b) ((a)>(b)?(a):b) -#define MIN(a,b) ((a)<(b)?(a):b) -#define ABS(a) (((a)>0)?(a):(-(a))) - -#ifdef TRUE -#undef TRUE -#endif -#define TRUE 1 - -#ifdef FALSE -#undef FALSE -#endif -#define FALSE 0 - -#define MAXINT 1<<30 -#define PI 3.14159 - -#define POINTS(inch) 72*(inch) - -typedef unsigned int boolean; -extern unsigned char Verbose; - -#else /* STANDALONE */ -#define MALLOC gmalloc -#define REALLOC grealloc -#endif /* STANDALONE */ - -#define FREE free -#define MEMCPY memcpy - -#ifndef DEBUG -#ifndef NDEBUG -#define NDEBUG /* switch off assert*/ -#endif -#endif - -#ifdef DEBUG -extern double _statistics[10]; -#endif - - -extern int irand(int n); -extern real drand(void); -extern int *random_permutation(int n);/* random permutation of 0 to n-1 */ - - -real* vector_subtract_to(int n, real *x, real *y);/* y = x-y */ -real* vector_subtract_from(int n, real *x, real *y);/* y = y-x */ -real* vector_add_to(int n, real *x, real *y); - -real vector_product(int n, real *x, real *y); - -real* vector_saxpy(int n, real *x, real *y, real beta); /* y = x+beta*y */ - - -real* vector_saxpy2(int n, real *x, real *y, real beta);/* x = x+beta*y */ - -/* take m elements v[p[i]]],i=1,...,m and oput in u. u will be assigned if *u = NULL */ -void vector_take(int n, real *v, int m, int *p, real **u); -void vector_float_take(int n, float *v, int m, int *p, float **u); - -/* give the position of the lagest, second largest etc in vector v if ascending = TRUE - or - give the position of the smallest, second smallest etc in vector v if ascending = TRUE. - results in p. If *p == NULL, p is asigned. -*/ -void vector_ordering(int n, real *v, int **p, int ascending); -void vector_sort_real(int n, real *v, int ascending); -void vector_sort_int(int n, int *v, int ascending); -real vector_median(int n, real *x); -real vector_percentile(int n, real *x, real y);/* find the value such that y% of element of vector x is <= that value.*/ - -void vector_print(char *s, int n, real *x); - -#define MACHINEACC 1.0e-16 -#define SQRT_MACHINEACC 1.0e-8 - - -int excute_system_command3(char *s1, char *s2, char *s3); -int excute_system_command(char *s1, char *s2); - -#define MINDIST 1.e-15 - -enum {UNMATCHED = -1}; - - -real distance(real *x, int dim, int i, int j); -real distance_cropped(real *x, int dim, int i, int j); - -real point_distance(real *p1, real *p2, int dim); - -char *strip_dir(char *s); - -void scale_to_box(real xmin, real ymin, real xmax, real ymax, int n, int dim, real *x); - -/* check to see if this is a string is integer (that can be casted into an integer variable hence very long list of digits are not valid, like 123456789012345. Return 1 if true, 0 if false. */ -int validQ_int_string(char *to_convert, int *v); - -/* check to see if this is a string of digits consists of 0-9 */ -int digitsQ(char *to_convert); - -#endif - - - diff --git a/internal/ccall/sparse/mq.c b/internal/ccall/sparse/mq.c deleted file mode 100644 index e5e2140..0000000 --- a/internal/ccall/sparse/mq.c +++ /dev/null @@ -1,618 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Modularity Quality definitation: - - We assume undirected graph. Directed graph should be converted by summing edge weights. - - Given a partition P of V into k clusters. - - Let E(i,j) be the set of edges between cluster i and j. - Let |E(i,j)| be the sum of edge weights of edges in E(i,j). - - Let E(i,i) be the set of edges within cluster i, but excluding self-edges. - Let |E(i,i)| be the sum of edge weights of edges in E(i,i). - - Let V(i) be the sets of vertices in i - - The intra-cluster edges concentration for a cluster i is - (the denominator could be |V(i)|*(|V(i)-1)/2 strictly speaking as we exclude self-edges): - - |E(i,i)| - ----------- - (|V(i)|^2/2) - - The inter-cluster edges concentration between cluster i and j is - - |E(i,j)| - ------------ - |V(i)|*|V(j)| - - So the cluster index is defined as the average intra cluster edge concentration, minus - the inter-cluster edge concentration: - - . |E(i,i)| |E(i,j)| - MQ(P) = (1/k) * \sum_{i=1...k} ------------ - (1/(k*(k-1)/2)) * \sum_{im; - int test_pattern_symmetry_only = FALSE; - int *counts, *ia = A->ia, *ja = A->ja, k, i, j, jj; - real mq_in = 0, mq_out = 0, *a = NULL, Vi, Vj; - int c; - real *dout; - - - assert(SparseMatrix_is_symmetric(A, test_pattern_symmetry_only)); - assert(A->n == n); - if (A->type == MATRIX_TYPE_REAL) a = (real*) A->a; - - counts = MALLOC(sizeof(int)*n); - - for (i = 0; i < n; i++) counts[i] = 0; - - for (i = 0; i < n; i++){ - assert(assignment[i] >= 0 && assignment[i] < n); - if (counts[assignment[i]] == 0) ncluster++; - counts[assignment[i]]++; - } - k = ncluster; - assert(ncluster <= n); - - for (i = 0; i < n; i++){ - assert(assignment[i] < ncluster); - c = assignment[i]; - Vi = counts[c]; - for (j = ia[i] ; j < ia[i+1]; j++){ - /* ASSUME UNDIRECTED */ - jj = ja[j]; - if (jj >= i) continue; - assert(assignment[jj] < ncluster); - Vj = counts[assignment[jj]]; - if (assignment[jj] == c){ - if (a) { - mq_in += a[j]/(Vi*Vi); - } else { - mq_in += 1./(Vi*Vi); - } - } else { - if (a) { - mq_out += a[j]/(Vi*Vj); - } else { - mq_out += 1./(Vi*Vj); - } - } - - } - } - - /* calculate scaled out degree */ - dout = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++){ - dout[i] = 0; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - if (a){ - dout[i] += a[j]/(real) counts[assignment[jj]]; - } else { - dout[i] += 1./(real) counts[assignment[jj]]; - } - } - } - - *ncluster0 = k; - *mq_in0 = mq_in; - *mq_out0 = mq_out; - *dout0 = dout; - FREE(counts); - - if (k > 1){ - return 2*(mq_in/k - mq_out/(k*(k-1))); - } else { - return 2*mq_in; - } -} - -Multilevel_MQ_Clustering Multilevel_MQ_Clustering_init(SparseMatrix A, int level){ - Multilevel_MQ_Clustering grid; - int n = A->n, i; - int *matching; - - assert(A->type == MATRIX_TYPE_REAL); - assert(SparseMatrix_is_symmetric(A, FALSE)); - - if (!A) return NULL; - assert(A->m == n); - grid = MALLOC(sizeof(struct Multilevel_MQ_Clustering_struct)); - grid->level = level; - grid->n = n; - grid->A = A; - grid->P = NULL; - grid->R = NULL; - grid->next = NULL; - grid->prev = NULL; - grid->delete_top_level_A = FALSE; - matching = grid->matching = MALLOC(sizeof(real)*(n)); - grid->deg_intra = NULL; - grid->dout = NULL; - grid->wgt = NULL; - - if (level == 0){ - real mq = 0, mq_in, mq_out; - int n = A->n, ncluster; - real *deg_intra, *wgt, *dout; - - grid->deg_intra = MALLOC(sizeof(real)*(n)); - deg_intra = grid->deg_intra; - - grid->wgt = MALLOC(sizeof(real)*n); - wgt = grid->wgt; - - for (i = 0; i < n; i++){ - deg_intra[i] = 0; - wgt[i] = 1.; - } - for (i = 0; i < n; i++) matching[i] = i; - mq = get_mq(A, matching, &ncluster, &mq_in, &mq_out, &dout); - fprintf(stderr,"ncluster = %d, mq = %f\n", ncluster, mq); - grid->mq = mq; - grid->mq_in = mq_in; - grid->mq_out = mq_out; - grid->dout = dout; - grid->ncluster = ncluster; - - } - - - return grid; -} - -void Multilevel_MQ_Clustering_delete(Multilevel_MQ_Clustering grid){ - if (!grid) return; - if (grid->A){ - if (grid->level == 0) { - if (grid->delete_top_level_A) SparseMatrix_delete(grid->A); - } else { - SparseMatrix_delete(grid->A); - } - } - SparseMatrix_delete(grid->P); - SparseMatrix_delete(grid->R); - FREE(grid->matching); - FREE(grid->deg_intra); - FREE(grid->dout); - FREE(grid->wgt); - Multilevel_MQ_Clustering_delete(grid->next); - FREE(grid); -} - -Multilevel_MQ_Clustering Multilevel_MQ_Clustering_establish(Multilevel_MQ_Clustering grid, int maxcluster){ - int *matching = grid->matching; - SparseMatrix A = grid->A; - int n = grid->n, level = grid->level, nc = 0, nclusters = n; - real mq = 0, mq_in = 0, mq_out = 0, mq_new, mq_in_new, mq_out_new, mq_max = 0, mq_in_max = 0, mq_out_max = 0; - int *ia = A->ia, *ja = A->ja; - real *a, amax = 0; - real *deg_intra = grid->deg_intra, *wgt = grid->wgt; - real *deg_intra_new, *wgt_new = NULL; - int i, j, k, jj, jc, jmax; - real *deg_inter, gain = 0, *dout = grid->dout, *dout_new, deg_in_i, deg_in_j, wgt_i, wgt_j, a_ij, dout_i, dout_j, dout_max = 0, wgt_jmax = 0; - int *mask; - real maxgain = 0; - real total_gain = 0; - SingleLinkedList *neighbors = NULL, lst; - - - neighbors = MALLOC(sizeof(SingleLinkedList)*n); - for (i = 0; i < n; i++) neighbors[i] = NULL; - - mq = grid->mq; - mq_in = grid->mq_in; - mq_out = grid->mq_out; - - deg_intra_new = MALLOC(sizeof(real)*n); - wgt_new = MALLOC(sizeof(real)*n); - deg_inter = MALLOC(sizeof(real)*n); - mask = MALLOC(sizeof(int)*n); - dout_new = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) mask[i] = -1; - - assert(n == A->n); - for (i = 0; i < n; i++) matching[i] = UNMATCHED; - - /* gain in merging node A into cluster B is - mq_in_new = mq_in - |E(A,A)|/(V(A))^2 - |E(B,B)|/(V(B))^2 + (|E(A,A)|+|E(B,B)|+|E(A,B)|)/(|V(A)|+|V(B)|)^2 - . = mq_in - deg_intra(A)/|A|^2 - deg_intra(B)/|B|^2 + (deg_intra(A)+deg_intra(B)+a(A,B))/(|A|+|B|)^2 - - mq_out_new = mq_out - |E(A,B)|/(|V(A)|*V(B)|)-\sum_{C and A connected, C!=B} |E(A,C)|/(|V(A)|*|V(C)|)-\sum_{C and B connected,C!=B} |E(B,C)|/(|V(B)|*|V(C)|) - . + \sum_{C connected to A or B, C!=A, C!=B} (|E(A,C)|+|E(B,C)|)/(|V(C)|*(|V(A)|+|V(B)|) - . = mq_out + a(A,B)/(|A|*|B|)-\sum_{C and A connected} a(A,C)/(|A|*|C|)-\sum_{C and B connected} a(B,C)/(|B|*|C|) - . + \sum_{C connected to A or B, C!=A, C!=B} (a(A,C)+a(B,C))/(|C|*(|A|+|B|)) - Denote: - dout(i) = \sum_{j -- i} a(i,j)/|j| - then - - mq_out_new = mq_out - |E(A,B)|/(|V(A)|*V(B)|)-\sum_{C and A connected, C!=B} |E(A,C)|/(|V(A)|*|V(C)|)-\sum_{C and B connected,C!=B} |E(B,C)|/(|V(B)|*|V(C)|) - . + \sum_{C connected to A or B, C!=A, C!=B} (|E(A,C)|+|E(B,C)|)/(|V(C)|*(|V(A)|+|V(B)|) - . = mq_out + a(A,B)/(|A|*|B|)-dout(A)/|A| - dout(B)/|B| - . + (dout(A)+dout(B))/(|A|+|B|) - (a(A,B)/|A|+a(A,B)/|B|)/(|A|+|B|) - . = mq_out -dout(A)/|A| - dout(B)/|B| + (dout(A)+dout(B))/(|A|+|B|) - after merging A and B into cluster AB, - dout(AB) = dout(A) + dout(B); - dout(C) := dout(C) - a(A,C)/|A| - a(B,C)/|B| + a(A,C)/(|A|+|B|) + a(B, C)/(|A|+|B|) - - mq_new = mq_in_new/(k-1) - mq_out_new/((k-1)*(k-2)) - gain = mq_new - mq - */ - a = (real*) A->a; - for (i = 0; i < n; i++){ - if (matching[i] != UNMATCHED) continue; - /* accumulate connections between i and clusters */ - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - if ((jc=matching[jj]) != UNMATCHED){ - if (mask[jc] != i) { - mask[jc] = i; - deg_inter[jc] = a[j]; - } else { - deg_inter[jc] += a[j]; - } - } - } - deg_in_i = deg_intra[i]; - wgt_i = wgt[i]; - dout_i = dout[i]; - - maxgain = 0; - jmax = -1; - for (j = ia[i]; j < ia[i+1]; j++){ - jj = ja[j]; - if (jj == i) continue; - jc = matching[jj]; - if (jc == UNMATCHED){ - a_ij = a[j]; - wgt_j = wgt[jj]; - deg_in_j = deg_intra[jj]; - dout_j = dout[jj]; - } else if (deg_inter[jc] < 0){ - continue; - } else { - a_ij = deg_inter[jc]; - wgt_j = wgt_new[jc]; - deg_inter[jc] = -1; /* so that we do not redo the calulation when we hit another neighbor in cluster jc */ - deg_in_j = deg_intra_new[jc]; - dout_j = dout_new[jc]; - } - - mq_in_new = mq_in - deg_in_i/pow(wgt_i, 2) - deg_in_j/pow(wgt_j,2) - + (deg_in_i + deg_in_j + a_ij)/pow(wgt_i + wgt_j,2); - - mq_out_new = mq_out - dout_i/wgt_i - dout_j/wgt_j + (dout_i + dout_j)/(wgt_i + wgt_j); - - if (nclusters > 2){ - mq_new = 2*(mq_in_new/(nclusters - 1) - mq_out_new/((nclusters - 1)*(nclusters - 2))); - } else { - mq_new = 2*mq_in_new/(nclusters - 1); - } - -#ifdef DEBUG - {int ncluster; - double mq2, mq_in2, mq_out2, *dout2; - int *matching2, nc2 = nc; - matching2 = MALLOC(sizeof(int)*A->m); - matching2 = MEMCPY(matching2, matching, sizeof(real)*A->m); - if (jc != UNMATCHED) { - matching2[i] = jc; - } else { - matching2[i] = nc2; - matching2[jj] = nc2; - nc2++; - } - for (k = 0; k < n; k++) if (matching2[k] == UNMATCHED) matching2[k] =nc2++; - mq2 = get_mq(A, matching2, &ncluster, &mq_in2, &mq_out2, &dout2); - fprintf(stderr," {dout_i, dout_j}={%f,%f}, {predicted, calculated}: mq = {%f, %f}, mq_in ={%f,%f}, mq_out = {%f,%f}\n",dout_i, dout_j, mq_new, mq2, mq_in_new, mq_in2, mq_out_new, mq_out2); - - mq_new = mq2; - - } -#endif - - gain = mq_new - mq; - if (Verbose) fprintf(stderr,"gain in merging node %d with node %d = %f-%f = %f\n", i, jj, mq, mq_new, gain); - if (j == ia[i] || gain > maxgain){ - maxgain = gain; - jmax = jj; - amax = a_ij; - dout_max = dout_j; - wgt_jmax = wgt_j; - mq_max = mq_new; - mq_in_max = mq_in_new; - mq_out_max = mq_out_new; - } - - } - - /* now merge i and jmax */ - if (maxgain > 0 || (nc >= 1 && nc > maxcluster)){ - total_gain += maxgain; - jc = matching[jmax]; - if (jc == UNMATCHED){ - fprintf(stderr, "maxgain=%f, merge %d, %d\n",maxgain, i, jmax); - neighbors[nc] = SingleLinkedList_new_int(jmax); - neighbors[nc] = SingleLinkedList_prepend_int(neighbors[nc], i); - dout_new[nc] = dout_i + dout_max; - matching[i] = matching[jmax] = nc; - wgt_new[nc] = wgt[i] + wgt[jmax]; - deg_intra_new[nc] = deg_intra[i] + deg_intra[jmax] + amax; - nc++; - } else { - fprintf(stderr,"maxgain=%f, merge with existing cluster %d, %d\n",maxgain, i, jc); - neighbors[jc] = SingleLinkedList_prepend_int(neighbors[jc], i); - dout_new[jc] = dout_i + dout_max; - wgt_new[jc] += wgt[i]; - matching[i] = jc; - deg_intra_new[jc] += deg_intra[i] + amax; - } - mq = mq_max; - mq_in = mq_in_max; - mq_out = mq_out_max; - nclusters--; - } else { - fprintf(stderr,"gain: %f -- no gain, skip merging node %d\n", maxgain, i); - assert(maxgain <= 0); - neighbors[nc] = SingleLinkedList_new_int(i); - matching[i] = nc; - deg_intra_new[nc] = deg_intra[i]; - wgt_new[nc] = wgt[i]; - nc++; - } - - - /* update scaled outdegree of neighbors of i and its merged node/cluster jmax */ - jc = matching[i]; - lst = neighbors[jc]; - do { - mask[*((int*) SingleLinkedList_get_data(lst))] = n+i; - lst = SingleLinkedList_get_next(lst); - } while (lst); - - lst = neighbors[jc]; - - do { - k = *((int*) SingleLinkedList_get_data(lst)); - for (j = ia[k]; j < ia[k+1]; j++){ - jj = ja[j]; - if (mask[jj] == n+i) continue;/* link to within cluster */ - if ((jc = matching[jj]) == UNMATCHED){ - if (k == i){ - dout[jj] += -a[j]/wgt_i + a[j]/(wgt_i + wgt_jmax); - } else { - dout[jj] += -a[j]/wgt_jmax + a[j]/(wgt_i + wgt_jmax); - } - } else { - if (k == i){ - dout_new[jc] += -a[j]/wgt_i + a[j]/(wgt_i + wgt_jmax); - } else { - dout_new[jc] += -a[j]/wgt_jmax + a[j]/(wgt_i + wgt_jmax); - } - } - } - lst = SingleLinkedList_get_next(lst); - } while (lst); - - } - - fprintf(stderr,"verbose=%d\n",Verbose); - if (Verbose) fprintf(stderr,"mq = %f new mq = %f level = %d, n = %d, nc = %d, gain = %g, mq_in = %f, mq_out = %f\n", mq, mq + total_gain, - level, n, nc, total_gain, mq_in, mq_out); - -#ifdef DEBUG - {int ncluster; - - mq = get_mq(A, matching, &ncluster, &mq_in, &mq_out, &dout); - fprintf(stderr," mq = %f\n",mq); - - } -#endif - - if (nc >= 1 && (total_gain > 0 || nc < n)){ - /* now set up restriction and prolongation operator */ - SparseMatrix P, R, R0, B, cA; - real one = 1.; - Multilevel_MQ_Clustering cgrid; - - R0 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD); - for (i = 0; i < n; i++){ - jj = matching[i]; - SparseMatrix_coordinate_form_add_entries(R0, 1, &jj, &i, &one); - } - R = SparseMatrix_from_coordinate_format(R0); - SparseMatrix_delete(R0); - P = SparseMatrix_transpose(R); - B = SparseMatrix_multiply(R, A); - if (!B) goto RETURN; - cA = SparseMatrix_multiply(B, P); - if (!cA) goto RETURN; - SparseMatrix_delete(B); - grid->P = P; - grid->R = R; - level++; - cgrid = Multilevel_MQ_Clustering_init(cA, level); - deg_intra_new = REALLOC(deg_intra_new, nc*sizeof(real)); - wgt_new = REALLOC(wgt_new, nc*sizeof(real)); - cgrid->deg_intra = deg_intra_new; - cgrid->mq = grid->mq + total_gain; - cgrid->wgt = wgt_new; - dout_new = REALLOC(dout_new, nc*sizeof(real)); - cgrid->dout = dout_new; - - cgrid = Multilevel_MQ_Clustering_establish(cgrid, maxcluster); - - grid->next = cgrid; - cgrid->prev = grid; - } else { - /* no more improvement, stop and final clustering found */ - for (i = 0; i < n; i++) matching[i] = i; - - FREE(deg_intra_new); - FREE(wgt_new); - FREE(dout_new); - } - - RETURN: - for (i = 0; i < n; i++) SingleLinkedList_delete(neighbors[i], free); - FREE(neighbors); - - FREE(deg_inter); - FREE(mask); - return grid; -} - -Multilevel_MQ_Clustering Multilevel_MQ_Clustering_new(SparseMatrix A0, int maxcluster){ - /* maxcluster is used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters - is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 */ - Multilevel_MQ_Clustering grid; - SparseMatrix A = A0; - - if (maxcluster <= 0) maxcluster = A->m; - if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){ - A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A); - } - grid = Multilevel_MQ_Clustering_init(A, 0); - - grid = Multilevel_MQ_Clustering_establish(grid, maxcluster); - - if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */ - return grid; -} - - -static void hierachical_mq_clustering(SparseMatrix A, int maxcluster, - int *nclusters, int **assignment, real *mq, int *flag){ - /* find a clustering of vertices by maximize mq - A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1. - maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters - . is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 - nclusters: on output the number of clusters - assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters - */ - - Multilevel_MQ_Clustering grid, cgrid; - int *matching, i; - SparseMatrix P; - real *u; - assert(A->m == A->n); - - *mq = 0.; - - *flag = 0; - - grid = Multilevel_MQ_Clustering_new(A, maxcluster); - - /* find coarsest */ - cgrid = grid; - while (cgrid->next){ - cgrid = cgrid->next; - } - - /* project clustering up */ - u = MALLOC(sizeof(real)*cgrid->n); - for (i = 0; i < cgrid->n; i++) u[i] = (real) (cgrid->matching)[i]; - *nclusters = cgrid->n; - *mq = cgrid->mq; - - while (cgrid->prev){ - real *v = NULL; - P = cgrid->prev->P; - SparseMatrix_multiply_vector(P, u, &v, FALSE); - FREE(u); - u = v; - cgrid = cgrid->prev; - } - - if (*assignment){ - matching = *assignment; - } else { - matching = MALLOC(sizeof(int)*(grid->n)); - *assignment = matching; - } - for (i = 0; i < grid->n; i++) (matching)[i] = (int) u[i]; - FREE(u); - - Multilevel_MQ_Clustering_delete(grid); - -} - - - -void mq_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value, - int *nclusters, int **assignment, real *mq, int *flag){ - /* find a clustering of vertices by maximize mq - A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1. - inplace: whether A can e modified. If true, A will be modified by removing diagonal. - maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters - . is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 - nclusters: on output the number of clusters - assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters - */ - SparseMatrix B; - - *flag = 0; - - assert(A->m == A->n); - - B = SparseMatrix_symmetrize(A, FALSE); - - if (!inplace && B == A) { - B = SparseMatrix_copy(A); - } - - B = SparseMatrix_remove_diagonal(B); - - if (B->type != MATRIX_TYPE_REAL || !use_value) B = SparseMatrix_set_entries_to_real_one(B); - - hierachical_mq_clustering(B, maxcluster, nclusters, assignment, mq, flag); - - if (B != A) SparseMatrix_delete(B); - -} diff --git a/internal/ccall/sparse/mq.h b/internal/ccall/sparse/mq.h deleted file mode 100644 index b2cfcdf..0000000 --- a/internal/ccall/sparse/mq.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef MG_H -#define MG_H - -typedef struct Multilevel_MQ_Clustering_struct *Multilevel_MQ_Clustering; - -struct Multilevel_MQ_Clustering_struct { - int level;/* 0, 1, ... */ - int n; - SparseMatrix A; /* n x n matrix */ - SparseMatrix P; - SparseMatrix R; - Multilevel_MQ_Clustering next; - Multilevel_MQ_Clustering prev; - int delete_top_level_A; - int *matching; /* dimension n. matching[i] is the clustering assignment of node i */ - - /* - - . |E(i,i)| |E(i,j)| - MQ/2 = (1/k) * \sum_{i=1...k} ------------ - (1/(k*(k-1))) * \sum_{imaxlen = maxlen; - v->len = 0; - v->size_of_elem = size_of_elem; - v->deallocator = deallocator; - v->v = malloc(size_of_elem*maxlen); - if (!v->v) return NULL; - return v; -} - -Vector Vector_assign(Vector v, void *stuff, int i){ - memcpy(((char*) v->v)+(v->size_of_elem)*i/sizeof(char), stuff, v->size_of_elem); - return v; -} - -Vector Vector_reset(Vector v, void *stuff, int i){ - if (i >= v->len) return NULL; - if (v->deallocator)(v->deallocator)((char*)v->v + (v->size_of_elem)*i/sizeof(char)); - return Vector_assign(v, stuff, i); -} - - -Vector Vector_add(Vector v, void *stuff){ - if (v->len + 1 >= v->maxlen){ - v->maxlen = v->maxlen + MAX((int) .2*(v->maxlen), 10); - v->v = realloc(v->v, (v->maxlen)*(v->size_of_elem)); - if (!(v->v)) return NULL; - } - - return Vector_assign(v, stuff, (v->len)++); -} - -void Vector_delete(Vector v){ - int i; - if (!v) return; - for (i = 0; i < v->len; i++){ - if (v->deallocator)(v->deallocator)((char*)v->v + (v->size_of_elem)*i/sizeof(char)); - } - free(v->v); - v->v = NULL; - free(v); -}; - -void* Vector_get(Vector v, int i){ - if (i >= v->len) return NULL; - return ((char*)v->v + i*(v->size_of_elem)/sizeof(char)); -} - -int Vector_get_length(Vector v){ - return v->len; -} - - - -/*---------------- integer vector --------------- */ - -void intdealloactor(void *v){ -} - -Vector IntegerVector_new(int len){ - return Vector_new(len, sizeof(int), intdealloactor); - -} -Vector IntegerVector_add(Vector v, int i){ - return Vector_add(v, (void*) &i); -} - -void IntegerVector_delete(Vector v){ - return Vector_delete(v); -} - -int* IntegerVector_get(Vector v, int i){ - int *p; - p = (int*) Vector_get(v, i); - if (!p) return NULL; - return (int*) p; -} - -int IntegerVector_get_length(Vector v){ - return Vector_get_length(v); -} - -Vector IntegerVector_reset(Vector v, int content, int pos){ - return Vector_reset(v, (void*) (&content), pos); -} - - - - -/*---------------- string vector --------------- */ - -void nulldealloactor(void *v){ - return; -} -void strdealloactor(void *v){ - char **s; - s = (char**) v; - free(*s); -} - -Vector StringVector_new(int len, int delete_element_strings){ - /* delete_element_strings decides whether we need to delete each string in the vector or leave it to be cleaned by other handles */ - if (!delete_element_strings){ - return Vector_new(len, sizeof(char*), nulldealloactor); - } else { - return Vector_new(len, sizeof(char*), strdealloactor); - } - -} -Vector StringVector_add(Vector v, char *s){ - return Vector_add(v, (void*) &s); -} - -void StringVector_delete(Vector v){ - return Vector_delete(v); -} - -char** StringVector_get(Vector v, int i){ - char **p; - p = (char**) Vector_get(v, i); - if (!p) return NULL; - return p; -} - -int StringVector_get_length(Vector v){ - return Vector_get_length(v); -} - -Vector StringVector_reset(Vector v, char *content, int pos){ - return Vector_reset(v, (void*) (&content), pos); -} - -void StringVector_fprint1(FILE *fp, StringVector v){ - int i; - if (!v) return; - for (i = 0; i < StringVector_get_length(v); i++){ - fprintf(fp,"%s\n", *(StringVector_get(v, i))); - } -} - -void StringVector_fprint(FILE *fp, StringVector v){ - int i; - if (!v) return; - for (i = 0; i < StringVector_get_length(v); i++){ - fprintf(fp,"%d %s\n", i+1,*(StringVector_get(v, i))); - } -} - -StringVector StringVector_part(StringVector v, int n, int *selected_list){ - /* select a list of n elements from vector v and form a new vector */ - StringVector u; - char *s, *s2; - int i; - u = StringVector_new(1, TRUE); - for (i = 0; i < n; i++){ - s = *(StringVector_get(v, selected_list[i])); - s2 = MALLOC(sizeof(char)*(strlen(s)+1)); - strcpy(s2, s); - StringVector_add(u, s2); - } - return u; -} - - - - - - -/* -#include -int main(){ - IntegerVector v; - StringVector vs; - int i, *j; - char *s; - char **sp; - - for (;;){ - v = IntegerVector_new(1); - for (i = 0; i < 10; i++){ - IntegerVector_add(v, i); - } - - for (i = 0; i < Vector_get_length(v); i++){ - j = IntegerVector_get(v, i); - if (j) printf("element %d = %d\n",i,*j); - } - for (i = 0; i < 12; i++){ - IntegerVector_reset(v, i+10, i); - } - - for (i = 0; i < Vector_get_length(v); i++){ - j = IntegerVector_get(v, i); - if (j) printf("element %d = %d\n",i,*j); - } - - IntegerVector_delete(v); - } - - for (;;){ - - - v = StringVector_new(1, TRUE); - for (i = 0; i < 10; i++){ - s = malloc(sizeof(char)*2); - s[0] = '1'; - s[1] = '1'+i; - StringVector_add(v, s); - } - - for (i = 0; i < Vector_get_length(v); i++){ - sp = StringVector_get(v, i); - if (sp) printf("element %d = %s\n",i,*sp); - } - for (i = 0; i < 10; i++){ - s = malloc(sizeof(char)*2); - s[0] = '1'; - s[1] = '2'+i; - StringVector_reset(v, s, i); - } - - for (i = 0; i < Vector_get_length(v); i++){ - sp = StringVector_get(v, i); - if (sp) printf("element %d = %s\n",i,*sp); - } - - StringVector_delete(v); - - } -} -*/ - diff --git a/internal/ccall/sparse/vector.h b/internal/ccall/sparse/vector.h deleted file mode 100644 index 049082c..0000000 --- a/internal/ccall/sparse/vector.h +++ /dev/null @@ -1,67 +0,0 @@ -/* $Id$Revision: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef VECTOR_H -#define VECTOR_H -#include -struct vector_struct { - int maxlen; - int len; - void *v; - size_t size_of_elem; - void (*deallocator)(void *v); -}; - -typedef struct vector_struct *Vector; - -/* deallocator works on each element of the vector */ -Vector Vector_new(int maxlen, size_t size_of_elem, void (*deallocator)(void *v)); - -Vector Vector_add(Vector v, void *stuff); - -Vector Vector_reset(Vector v, void *stuff, int i); - -void Vector_delete(Vector v); - -void* Vector_get(Vector v, int i); - -int Vector_get_length(Vector v); - -Vector Vector_reset(Vector v, void *stuff, int i); - -/*------------- vector of strings ----------- */ - -typedef Vector StringVector; - -Vector StringVector_new(int len, int delete_element_strings); -Vector StringVector_add(Vector v, char *i); -void StringVector_delete(Vector v); -char** StringVector_get(Vector v, int i); -int StringVector_get_length(Vector v); -Vector StringVector_reset(Vector v, char *content, int pos); -void StringVector_fprint(FILE *fp, StringVector v); -void StringVector_fprint1(FILE *fp, StringVector v); -StringVector StringVector_part(StringVector v, int n, int *selected_list); -/*------------- integer vector ----------- */ - -typedef Vector IntegerVector; - -Vector IntegerVector_new(int len); -Vector IntegerVector_add(Vector v, int i); -void IntegerVector_delete(Vector v); -int* IntegerVector_get(Vector v, int i); -int IntegerVector_get_length(Vector v); -Vector IntegerVector_reset(Vector v, int content, int pos); - - - -#endif diff --git a/internal/ccall/spine/dummy.go b/internal/ccall/spine/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/spine/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/spine/quad.c b/internal/ccall/spine/quad.c deleted file mode 100644 index 71b6e60..0000000 --- a/internal/ccall/spine/quad.c +++ /dev/null @@ -1,125 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -#include -#include - -#include "spinehdr.h" -#include "quad.h" -#include "subset.h" - -static int cmpdeg(const void *v0, const void *v1) -{ - Agnode_t *n0 = *(Agnode_t **) v0; - Agnode_t *n1 = *(Agnode_t **) v1; - - if (ND_deg(n0) > ND_deg(n1)) - return -1; - else if (ND_deg(n0) < ND_deg(n1)) - return 1; - else - return 0; -} - -void genQuads(Agraph_t * g, quadfn_t action, void *state) -{ - int nnodes = agnnodes(g); - Agnode_t **arr = N_NEW(nnodes, Agnode_t *); - Agraph_t *cloneg = agsubg(g, "clone", 1); - Dt_t **subs = N_NEW(nnodes, Dt_t *); - Agnode_t *n; - Agnode_t *v; - Agnode_t *u; - Agnode_t *w; - Agedge_t *e; - Agedge_t *f; - - /* make clone graph */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - agsubnode(cloneg, n, 1); - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - agsubedge(cloneg, e, 1); - } - } - - /* sort the vertices by non-increasing degrees */ - int j, i = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - arr[i++] = n; - ND_deg(n) = agdegree(cloneg, n, 1, 1); - } - qsort(arr, nnodes, sizeof(Agnode_t *), cmpdeg); - - /* create index and set for each node */ - for (i = 0; i < nnodes; i++) { - if (i < nnodes - 1) - assert(ND_deg(arr[i]) >= ND_deg(arr[i + 1])); - ND_id(arr[i]) = i; - subs[i] = mkSubset(); - } - - for (i = 0; i < nnodes; i++) { - v = arr[i]; - /* for each adjacent node u of v */ - for (e = agfstedge(cloneg, v); e; e = agnxtedge(cloneg, e, v)) { - if (agtail(e) == aghead(e)) - continue; - if (agtail(e) == v) - u = aghead(e); - else - u = agtail(e); - /* for each adjacent node w != v of u */ - for (f = agfstedge(cloneg, u); f; f = agnxtedge(cloneg, f, u)) { - if (agtail(f) == aghead(f)) - continue; - if (agtail(f) == u) - w = aghead(f); - else - w = agtail(f); - addSubset(subs[ND_id(w)], u); - } - } - for (j = i + 1; j < nnodes; j++) { - if (sizeSubset(subs[j]) >= 2) - /* generate quadrilaterals */ - action(v, arr[j], subs[j], state); - } - for (j = i + 1; j < nnodes; j++) { - if (sizeSubset(subs[j]) >= 1) - clearSubset(subs[j]); - } - agdelnode(cloneg, v); - closeSubset(subs[i]); - } - - agclose(cloneg); - free(arr); - free(subs); -} - -#ifdef TEST -static int walker(Agnode_t * n, int *isFirst) -{ - if (*isFirst) { - *isFirst = 0; - printf("%s", agnameof(n)); - } else - printf(",%s", agnameof(n)); - return 0; -} - -static void -findQuads(Agnode_t * v, Agnode_t * w, Dt_t * subset, void *state) -{ - int first = 1; - printf("%s %s {", agnameof(v), agnameof(w)); - walkSubset(subset, (walkfn) walker, &first); - printf("}\n"); -} - -int main() -{ - Agraph_t *g = agread(stdin, 0); - genQuads(g, findQuads, 0); - return 0; -} -#endif diff --git a/internal/ccall/spine/quad.h b/internal/ccall/spine/quad.h deleted file mode 100644 index c40c270..0000000 --- a/internal/ccall/spine/quad.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef QUAD_H -#define QUAD_H - -#include - -typedef void (*quadfn_t)(Agnode_t*, Agnode_t*, Dt_t*, void*); - -extern void genQuads (Agraph_t*, quadfn_t action, void*); - -#endif diff --git a/internal/ccall/spine/spine.c b/internal/ccall/spine/spine.c deleted file mode 100644 index 4d3d061..0000000 --- a/internal/ccall/spine/spine.c +++ /dev/null @@ -1,677 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -#include -#include -#include -#include "union_find.h" -#include "assert.h" -#include -#include -#include -#ifdef MAIN -#include -#include "ingraphs.h" - -typedef struct { - FILE *outfp; - char **Files; - float sparse_ratio; - int verbose; -} opts_t; -#endif - -typedef int (*qsort_cmpf) (const void *, const void *); - -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define MAX(a,b) ((a)>(b)?(a):(b)) - -void* mcalloc (size_t cnt, size_t sz) -{ - void* p = calloc(cnt, sz); - /* fprintf(stderr, "alloc %lu bytes %p\n", cnt*sz, p); */ - return p; -} - -#if 0 -static float ewt(Agedge_t * e) -{ - return ED_wt(e); -} -#endif - -static int cmpe(void *v0, void *v1) -{ - Agedge_t *e0 = *(Agedge_t **) v0; - Agedge_t *e1 = *(Agedge_t **) v1; - - if (ED_wt(e0) > ED_wt(e1)) - return -1; - else if (ED_wt(e0) < ED_wt(e1)) - return 1; - else - return 0; -} - - -static void doEdge(Agraph_t * g, Agnode_t * v, Agnode_t * w, int *quadcnt) -{ - Agedge_t *e = agedge(g, v, w, 0, 0); - if (!e) - e = agedge(g, w, v, 0, 0); - if (!e) { - fprintf(stderr, "Could not find edge %s--%s\n", agnameof(v), - agnameof(w)); - exit(1); - } - quadcnt[ED_id(e)] += 1; -} - -static void -recordQuads(Agnode_t * v, Agnode_t * w, Dt_t * subset, void *state) -{ - Dtlink_t *link0; - Dtlink_t *link1; - Agnode_t *u0; - Agnode_t *u1; - int *quadcnt = (int *) state; - Agraph_t *g = agroot(v); - - for (link0 = dtflatten(subset); link0; link0 = dtlink(subset, link0)) { - u0 = (Agnode_t *) (((ptritem *) dtobj(subset, link0))->v); - for (link1 = dtlink(subset, link0); link1; - link1 = dtlink(subset, link1)) { - u1 = (Agnode_t *) (((ptritem *) dtobj(subset, link1))->v); - doEdge(g, v, u0, quadcnt); - doEdge(g, w, u0, quadcnt); - doEdge(g, v, u1, quadcnt); - doEdge(g, w, u1, quadcnt); - } - } -} - -static void -reweightEdge (Agedge_t* e, Dt_t* nbr0, Dt_t* nbr1, Agedge_t*** nbrs, int verbose) -{ - Agnode_t* tail = agtail(e); - Agnode_t* head = aghead(e); - Agedge_t** tail_edgelist = nbrs[ND_id(tail)]; - long int len0 = nbrs[ND_id(tail)+1] - tail_edgelist; - Agedge_t** head_edgelist = nbrs[ND_id(head)]; - long int len1 = nbrs[ND_id(head)+1] - head_edgelist; - long int minlen = MIN(len0, len1); - long int i; - long int maxi = 0; - double wt, maxwt = 0; - double common_cnt = 0; - double union_cnt = 0; - Agnode_t* n0; - Agnode_t* n1; - double oldwt; - - clearSubset(nbr0); - clearSubset(nbr1); - - if (verbose > 1) - oldwt = ED_wt(e); - -#ifdef TEST_JACCARD - Dt_t* nbr00 = mkSubset(); - Dt_t* nbr11 = mkSubset(); - double wt0; -#endif - for (i = 0; i < minlen; i++) { - n0 = (*tail_edgelist++)->node; - n1 = (*head_edgelist++)->node; - assert(n0 != tail); - assert(n1 != head); -#ifdef TEST_JACCARD - addSubset(nbr00, n0); - addSubset(nbr11, n1); -#endif -/* fprintf (stderr, "add %s %s\n", agnameof(n0), agnameof(n1)); */ - if (n0 != n1) { - if (inSubset(nbr1, n0)) common_cnt++; - else { - addSubset (nbr0, n0); - union_cnt++; - } - if (inSubset(nbr0, n1)) common_cnt++; - else { - addSubset (nbr1, n1); - union_cnt++; - } - } - else { - common_cnt++; - union_cnt++; - } - wt = common_cnt/union_cnt; -#ifdef TEST_JACCARD - wt0 = ((double)intersect_size(nbr00,nbr11))/union_size(nbr00,nbr11); - assert(wt == wt0); -#endif - if (wt > maxwt) { - maxi = i; - maxwt = wt; - } - } - if (len0 > minlen) { - for (; i < len0; i++) { - n0 = (*tail_edgelist++)->node; -/* fprintf (stderr, "add %s -\n", agnameof(n0)); */ -#ifdef TEST_JACCARD - addSubset(nbr00, n0); -#endif - if (inSubset(nbr1, n0)) common_cnt++; - else union_cnt++; - wt = common_cnt/union_cnt; -#ifdef TEST_JACCARD - wt0 = ((double)intersect_size(nbr00,nbr11))/union_size(nbr00,nbr11); - assert(wt == wt0); -#endif - if (wt > maxwt) { - maxi = i; - maxwt = wt; - } - } - } - else if (len1 > minlen) { - for (; i < len1; i++) { - n1 = (*head_edgelist++)->node; -/* fprintf (stderr, "add - %s\n", agnameof(n1)); */ -#ifdef TEST_JACCARD - addSubset(nbr11, n1); -#endif - if (inSubset(nbr0, n1)) common_cnt++; - else union_cnt++; - wt = common_cnt/union_cnt; -#ifdef TEST_JACCARD - wt0 = ((double)intersect_size(nbr00,nbr11))/union_size(nbr00,nbr11); - assert(wt == wt0); -#endif - if (wt > maxwt) { - maxi = i; - maxwt = wt; - } - } - } - - ED_wt(e) = maxwt; - if (verbose > 1) - fprintf(stderr, "%s : %s %f %ld/%ld %f\n", - agnameof(tail), agnameof(head), maxwt, maxi, MAX(len0, len1), oldwt); -#ifdef TEST_JACCARD - closeSubset(nbr00); - closeSubset(nbr11); -#endif -} - -static void setEdgeWeights(Agraph_t * g, int verbose) -{ - int *quadcnt = N_NEW((size_t)agnedges(g), int); - int ncnt = agnnodes(g); - int *que = N_NEW((size_t)ncnt, int); - Agnode_t *n; - Agedge_t *e; - int iwt; - int edgecnt = 0; - long int i = 0; - - /* Count the number q(u,v) of quadrilaterals each edge is in. - * This is stored in quadcnt, indexed by the edges index. - */ - genQuads(g, recordQuads, quadcnt); - - /* Weight node v by q(v), the sum of the q(u,v) for all neighbors v of u. - * This is stored in que, indexed by the node's index. - */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - ND_id(n) = i++; - iwt = 0; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - iwt += quadcnt[ED_id(e)]; - edgecnt++; - } - for (e = agfstin(g, n); e; e = agnxtin(g, e)) { - iwt += quadcnt[ED_id(e)]; - } - que[ND_id(n)] = iwt; -#if 0 - fprintf(stderr, " %s quad %d\n", agnameof(n), que[ND_id(n)]); -#endif - } - - /* Assign each edge a normalized initial weight Q(u,v) which is q(u,v)/sqrt(q(u)q(v)). - * This is stored in ED_wt. - */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - int quadv = quadcnt[ED_id(e)]; - if (quadv) - ED_wt(e) = - quadv / - sqrt((double) (que[ND_id(n)] * que[ND_id(aghead(e))])); - else - ED_wt(e) = 0; -#if 0 - fprintf(stderr, " %s--%s quadcnt %d wt %f\n", - agnameof(n), agnameof(aghead(e)), quadcnt[ED_id(e)], - jD_wt(e)); -#endif - } - } - - free(quadcnt); - free(que); - - Agedge_t** edges = N_NEW((size_t)(2*edgecnt+1),Agedge_t*); - Agedge_t*** nbrs = N_NEW((size_t)ncnt+1, Agedge_t**); - Agedge_t** edgelist = edges; - size_t degree; - /* For each node, sort its edges by Q(u,v). */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - degree = 0; - nbrs[ND_id(n)] = edgelist; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - degree++; - *edgelist++ = e; - } - for (e = agfstin(g, n); e; e = agnxtin(g, e)) { - degree++; - *edgelist++ = e; - } - qsort(nbrs[ND_id(n)], degree, sizeof(Agedge_t **), (qsort_cmpf)cmpe); -/* - fprintf (stderr, "sort %s(%d) degree %lu %d %p\n", - agnameof(n), ND_id(n), degree, agdegree(g,n,1,1), nbrs[ND_id(n)]); -*/ - } - nbrs[ncnt] = edgelist; - -#if 0 - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - edgelist = nbrs[ND_id(n)]; - long int len0 = nbrs[ND_id(n)+1] - edgelist; - fprintf (stderr, "%s len %lu degree %d\n", agnameof(n), len0, agdegree(g,n,1,1)); - for (i = 0; i < len0; i++) { - e = *edgelist++; - fprintf (stderr, "%s %s %lf\n", - agnameof(agtail(e)), agnameof(aghead(e)), ED_wt(e)); - } - } -#endif - - /* Finally, for each edge (u,v), compute the Jaccard coefficient of the union of - * k neighbors of u and v, using the sorted edges. The final edge weight is the - * maximum Jaccard coefficient. - */ - Dt_t* nbr0 = mkSubset(); - Dt_t* nbr1 = mkSubset(); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - edgelist = nbrs[ND_id(n)]; - long int len0 = nbrs[ND_id(n)+1] - edgelist; - for (i = 0; i < len0; i++) { - e = *edgelist++; - if (AGTYPE(e)==AGINEDGE) continue; - reweightEdge (e, nbr0, nbr1, nbrs, verbose); - } - } - closeSubset(nbr0); - closeSubset(nbr1); - free(edges); - free(nbrs); -} - -/* Return number in range [0,nedges] */ -static size_t computeIndex(size_t nedges, float s) -{ - size_t r = ceilf(nedges * (1 - s)); - return r; -} - -static size_t doBucket(Agedge_t ** edgelist, size_t idx, Dt_t * M) -{ - Agedge_t *e; - float weight = ED_wt(edgelist[idx]); - - while ((e = edgelist[idx]) && (ED_wt(e) == weight)) { - idx++; - if (UF_find(agtail(e)) != UF_find(aghead(e))) - addSubset(M, e); - } - - return idx; -} - -static int walker(Agedge_t * e, Agraph_t * sg) -{ - UF_union(agtail(e), aghead(e)); - agsubedge(sg, e, 1); - return 0; -} - -static Agraph_t *findUMST(Agraph_t * g, Agedge_t ** edgelist, size_t nedges) -{ - Agraph_t *sg = agsubg(g, "UMST", 1); - Dt_t *M = mkSubset(); - - size_t i = 0; - while (i < nedges) { - i = doBucket(edgelist, i, M); - /* for each edge in M, add to sg, and union nodes */ - walkSubset(M, (walkfn) walker, sg); - if (i < nedges) - clearSubset(M); - } - closeSubset(M); - return sg; -} - -/* Remove loops and multiedges. */ -static void cleanGraph (Agraph_t * g, int verbose) -{ - Agnode_t *n; - Agnode_t *head; - Agedge_t *e; - Agedge_t *nexte; - Agedge_t *inexte; - Agedge_t *backe; - Agedge_t *preve = NULL; - int loopcnt = 0; - int multicnt = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - preve = NULL; - for (e = agfstout(g, n); e; e = nexte) { - head = aghead(e); - nexte = agnxtout(g, e); - if (head == n) { - agdelete(g, e); - preve = NULL; - loopcnt++; - } - else if (preve && (head == aghead(preve))) { - agdelete(g, e); - multicnt++; - } - else { - preve = e; - if ((backe = agedge(g, head, n, 0, 0))) { - while (backe && (agtail(backe) == head)) { - multicnt++; - inexte = agnxtin(g, backe); - agdelete(g, backe); - backe = inexte; - } - } - - } - } - } - if (verbose) - fprintf (stderr, "cleanGraph: %d loops %d multiedges removed\n", loopcnt, multicnt); -} - -void genSpine(Agraph_t * g, float sparse_ratio, int verbose) -{ - Agraph_t *sg_union; - Agnode_t *n; - Agedge_t *e; - Agedge_t **edgelist; - size_t i, index; - size_t nedges; - float threshhold; - - cleanGraph (g, verbose); - nedges = agnedges(g); - if (verbose) - fprintf(stderr, "Graph %s %d nodes %lu edges:\n", agnameof(g), - agnnodes(g), nedges); - aginit(g, AGNODE, "nodeinfo", sizeof(nodeinfo_t), 1); - aginit(g, AGEDGE, "edgeinfo", sizeof(edgeinfo_t), 1); - - int eidx = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - ED_id(e) = eidx++; - } - } - if (verbose) - fprintf(stderr, "setEdgeWeights\n"); - setEdgeWeights(g, verbose); - - /* sort edges by non-increasing weight */ - if (verbose) - fprintf(stderr, "sorting\n"); - edgelist = N_NEW((size_t)(nedges + 1), Agedge_t *); /* NULL at end */ - i = 0; - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - edgelist[i++] = e; - } - } - qsort(edgelist, nedges, sizeof(Agedge_t *), (qsort_cmpf)cmpe); -#if 0 - float curwt = -1; - int cnt = 0; - for (i = 0; i <= nedges; i++) { - e = edgelist[i]; - if (e && (ED_wt(e) == curwt)) - cnt++; - else { - if (cnt) - fprintf(stderr, "%f %d\n", curwt, cnt); - if (e) { - cnt = 1; - curwt = ED_wt(e); - } - } - } -#endif - if (verbose) - fprintf(stderr, "heaviest wt %f least wt %f\n", ED_wt(edgelist[0]), - ED_wt(edgelist[nedges - 1])); - - /* compute UMST */ - sg_union = findUMST(g, edgelist, nedges); - int umst_size = agnedges(sg_union); - if (verbose) - fprintf(stderr, " union of maximum spanning trees: %d edges\n", - umst_size); - - /* Find index of the |E|(1-sparse_ratio)th edge */ - index = computeIndex(nedges, sparse_ratio); - if (verbose) - fprintf(stderr, " index %lu out of %lu\n", index, nedges); - - /* set of edges with weights above threshhold */ - /* Add all edges with wt >= wt(edgelist[index]) */ - /* As edgelist is sorted, first index edges */ - int extra_edges = 0; - for (i = 1; i <= index; i++) { - e = edgelist[i - 1]; - if (verbose) { - if (agsubedge(sg_union, e, 0) == NULL) - extra_edges++; - } - agsubedge(sg_union, e, 1); - } - - /* Add any additional edges with same weight as e */ - if (index) { - threshhold = ED_wt(e); - for (; i <= nedges; i++) { - e = edgelist[i - 1]; - if (ED_wt(e) >= threshhold) { - if (verbose) { - if (agsubedge(sg_union, e, 0) == NULL) - extra_edges++; - } - agsubedge(sg_union, e, 1); - } else - break; - } - } - if (verbose) - fprintf(stderr, - "number of extra edges not in UMST %d total edges %d\n", - extra_edges, agnedges(sg_union)); - - /* layout graph sg_union */ - Agsym_t *sym = agattr(g, AGEDGE, "spine", "0"); - int ncnt = 0; - int ecnt = 0; - for (n = agfstnode(sg_union); n; n = agnxtnode(sg_union, n)) { - ncnt++; - for (e = agfstout(sg_union, n); e; e = agnxtout(sg_union, e)) { - ecnt++; - agxset(e, sym, "1"); - } - } - if (verbose) - fprintf(stderr, "final ncnt %d ecnt %d\n", ncnt, ecnt); -} - -#ifdef MAIN - -static FILE *openFile(char *cmd, char *name, char *mode) -{ - FILE *fp; - char *modestr; - - fp = fopen(name, mode); - if (!fp) { - if (*mode == 'r') - modestr = "reading"; - else - modestr = "writing"; - fprintf(stderr, "%s: could not open file %s for %s\n", - cmd, name, modestr); - exit(1); - } - return fp; -} - -static int setInt(char *s, int *v) -{ - char *endp; - long int l = strtol(s, char &endp, 10); - - if (s == endp) { - fprintf(stderr, "Option value \"%s\" must be an integer\n", s); - return 1; - } - if (l < 0) { - fprintf(stderr, "Option value \"%s\" must be non-negative.\n", s); - return 1; - } - *v = (int)l; - return 0; - -} - -static int setFloat(char *s, float *v) -{ - char *endp; - float f = strtof(s, &endp); - if (s == endp) { - fprintf(stderr, "Option value \"%s\" must be a float\n", s); - return 1; - } - if ((f < 0) || (f > 1)) { - fprintf(stderr, "Option value \"%s\" must be in the range [0,1]\n", - s); - return 1; - } - *v = f; - return 0; - -} - -static char *Usage = "Usage: %s [-?] [options]\n\ - -r : sparsification ratio [0,1] (0.5) \n\ - -o : put output in (stderr)\n\ - -v[] : verbose mode \n\ - -? : print usage\n"; - -static void usage(char *cmd, int v) -{ - fprintf(v ? stderr : stdout, Usage, cmd); - exit(v); -} - -static void doOpts(int argc, char *argv[], opts_t * op) -{ - int c; - char *cmd = argv[0]; - - op->outfp = NULL; - op->Files = NULL; - op->verbose = 0; - op->sparse_ratio = 0.5; - - opterr = 0; - while ((c = getopt(argc, argv, "o:r:v::")) != -1) { - switch (c) { - case 'o': - op->outfp = openFile(cmd, optarg, "w"); - break; - case 'v': - if (optarg) - if (setInt(optarg, &(op->verbose))) { - fprintf(stderr, "%s: bad value for flag -%c - ignored\n", - cmd, c); - } - } - else - op->verbose = 1; - break; - case 'r': - if (setFloat(optarg, &(op->sparse_ratio))) { - fprintf(stderr, "%s: bad value for flag -%c - ignored\n", - cmd, c); - } - break; - case '?': - if (optopt == '?') - usage(cmd, 0); - else - fprintf(stderr, "%s: option -%c unrecognized - ignored\n", - cmd, optopt); - break; - default: - break; - } - } - argv += optind; - argc -= optind; - - if (argc) - op->Files = argv; - if (op->outfp == NULL) - op->outfp = stderr; - if (op->verbose) - fprintf(stderr, "sparse ratio = %f\n", op->sparse_ratio); -} - -static Agraph_t *gread(FILE * fp) -{ - return agread(fp, (Agdisc_t *) 0); -} - -int main(int argc, char *argv[]) -{ - opts_t opts; - ingraph_state ig; - Agraph_t *g; - - doOpts(argc, argv, &opts); - newIngraph(&ig, opts.Files, gread); - while ((g = nextGraph(&ig)) != 0) { - genSpine(g, opts.sparse_ratio, opts.verbose); - agwrite(g, opts.outfp); - agclose(g); - } - - return 0; -} -#endif diff --git a/internal/ccall/spine/spine.h b/internal/ccall/spine/spine.h deleted file mode 100644 index d98fa0b..0000000 --- a/internal/ccall/spine/spine.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef SPINE_T -#define SPINE_T - -#include - -void genSpine (Agraph_t * g, float sparse_ratio, int verbose); - -#endif diff --git a/internal/ccall/spine/spinehdr.h b/internal/ccall/spine/spinehdr.h deleted file mode 100644 index d071ae4..0000000 --- a/internal/ccall/spine/spinehdr.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef SPINEHDR_T -#define SPINEHDR_T - -/* -#include -#include -#include -#include -*/ -#include - -#define N_NEW(n,t) (t*)mcalloc((n),sizeof(t)) -#define NEW(t) (t*)mcalloc((1),sizeof(t)) - -extern void *mcalloc(size_t nmemb, size_t size); - -#define NOTUSED(var) (void) var - -typedef struct { - Agrec_t h; - int id; - int deg; - int UF_size; - Agnode_t *UF_parent; -} nodeinfo_t; - -typedef struct { - Agrec_t h; - float weight; - int id; -} edgeinfo_t; - -#define ED_wt(e) (((edgeinfo_t*)AGDATA(e))->weight) -#define ED_id(e) (((edgeinfo_t*)AGDATA(e))->id) -#define ND_id(n) (((nodeinfo_t*)AGDATA(n))->id) -#define ND_deg(n) (((nodeinfo_t*)AGDATA(n))->deg) -#define ND_UF_parent(n) (((nodeinfo_t*)AGDATA(n))->UF_parent) -#define ND_UF_size(n) (((nodeinfo_t*)AGDATA(n))->UF_size) - -#endif diff --git a/internal/ccall/spine/subset.c b/internal/ccall/spine/subset.c deleted file mode 100644 index 15b1897..0000000 --- a/internal/ccall/spine/subset.c +++ /dev/null @@ -1,139 +0,0 @@ -/* vim:set shiftwidth=4 ts=4 */ - -#include -#include -#include - -static void *mkPtrItem(Dt_t * d, ptritem * obj, Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - ptritem *np = NEW(ptritem); - np->v = obj->v; - return (void *) np; -} - -static void freePtrItem(Dt_t * d, ptritem * obj, Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - free(obj); -} - -static int cmpptr(Dt_t * d, void **key1, void **key2, Dtdisc_t * disc) -{ - NOTUSED(d); - NOTUSED(disc); - if (*key1 > *key2) - return 1; - else if (*key1 < *key2) - return -1; - else - return 0; -} - -static Dtdisc_t ptrdisc = { - offsetof(ptritem, v), - sizeof(void *), - offsetof(ptritem, link), - (Dtmake_f) mkPtrItem, - (Dtfree_f) freePtrItem, - (Dtcompar_f) cmpptr, - 0, - 0, - 0 -}; - -Dt_t *mkSubset() -{ - Dt_t *s = dtopen(&ptrdisc, Dtoset); - return s; -} - -void addSubset(Dt_t * s, void *n) -{ - ptritem dummy; - - dummy.v = n; - dtinsert(s, &dummy); -} - -void* inSubset(Dt_t * s, void *n) -{ - return dtmatch(s, &n); -} - -int sizeSubset(Dt_t * s) -{ - return dtsize(s); -} - -void clearSubset(Dt_t * s) -{ - dtclear(s); -} - -void closeSubset(Dt_t * s) -{ - dtclose(s); -} - -typedef struct { - Dt_t* s; - int sz; -} setsize_t; - -static int union_fn(Agnode_t * n, setsize_t *state) -{ - if (!inSubset(state->s, n)) - state->sz++; - return 0; -} - -int union_size(Dt_t* s0, Dt_t* s1) -{ - setsize_t state; - - state.s = s0; - state.sz = sizeSubset(s0); - walkSubset(s1, (walkfn)union_fn, &state); - return state.sz; -} - -static int intersect_fn(Agnode_t * n, setsize_t *state) -{ - if (inSubset(state->s, n)) - state->sz++; - return 0; -} - -int intersect_size(Dt_t* s0, Dt_t* s1) -{ - setsize_t state; - - state.s = s0; - state.sz = 0; - walkSubset(s1, (walkfn)intersect_fn, &state); - return state.sz; -} - -typedef struct { - walkfn wf; - void *state; -} auxstate; - -static int auxfn(Dt_t * s, void *data, void *state) -{ - NOTUSED(s); - return ((auxstate *) state)->wf(((ptritem *) data)->v, - ((auxstate *) state)->state); -} - -void walkSubset(Dt_t * s, walkfn wf, void *state) -{ - auxstate xstate; - - xstate.wf = wf; - xstate.state = state; - dtwalk(s, auxfn, &xstate); -} diff --git a/internal/ccall/spine/subset.h b/internal/ccall/spine/subset.h deleted file mode 100644 index 1d66f38..0000000 --- a/internal/ccall/spine/subset.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SUBSET_H -#define SUBSET_H - -#include - -typedef struct { - Dtlink_t link; - void* v; -} ptritem; - -typedef int (*walkfn)(void*, void*); - -extern Dt_t* mkSubset(void); -extern void addSubset(Dt_t*, void*); -extern void* inSubset(Dt_t*, void *); -extern void walkSubset(Dt_t*, walkfn, void*); -extern int sizeSubset(Dt_t*); -extern void clearSubset(Dt_t*); -extern void closeSubset(Dt_t*); -extern int intersect_size(Dt_t*, Dt_t*); -extern int union_size(Dt_t*, Dt_t*); - -#endif diff --git a/internal/ccall/spine/union_find.c b/internal/ccall/spine/union_find.c deleted file mode 100644 index 5925a77..0000000 --- a/internal/ccall/spine/union_find.c +++ /dev/null @@ -1,65 +0,0 @@ -/* vim:set shiftwidth=4 ts=4: */ - -#include -#include -#include - -typedef Agnode_t node_t; - -/* union-find */ -node_t *UF_find(node_t * n) -{ - while (ND_UF_parent(n) && (ND_UF_parent(n) != n)) { - if (ND_UF_parent(ND_UF_parent(n))) - ND_UF_parent(n) = ND_UF_parent(ND_UF_parent(n)); - n = ND_UF_parent(n); - } - return n; -} - -node_t *UF_union(node_t * u, node_t * v) -{ - if (u == v) - return u; - if (ND_UF_parent(u) == NULL) { - ND_UF_parent(u) = u; - ND_UF_size(u) = 1; - } else - u = UF_find(u); - if (ND_UF_parent(v) == NULL) { - ND_UF_parent(v) = v; - ND_UF_size(v) = 1; - } else - v = UF_find(v); - if (u == v) - return u; - if (ND_UF_size(u) < ND_UF_size(v)) { - ND_UF_parent(u) = v; - ND_UF_size(v) += ND_UF_size(u); - } else { - ND_UF_parent(v) = u; - ND_UF_size(u) += ND_UF_size(v); - v = u; - } - return v; -} - -void UF_remove(node_t * u, node_t * v) -{ - assert(ND_UF_size(u) == 1); - ND_UF_parent(u) = u; - ND_UF_size(v) -= ND_UF_size(u); -} - -void UF_singleton(node_t * u) -{ - ND_UF_size(u) = 1; - ND_UF_parent(u) = NULL; -} - -void UF_setname(node_t * u, node_t * v) -{ - assert(u == UF_find(u)); - ND_UF_parent(u) = v; - ND_UF_size(v) += ND_UF_size(u); -} diff --git a/internal/ccall/spine/union_find.h b/internal/ccall/spine/union_find.h deleted file mode 100644 index 102f5b4..0000000 --- a/internal/ccall/spine/union_find.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef UNION_FIND_H -#define UNION_FIND_H - -#include - - extern Agnode_t *UF_find(Agnode_t *); - extern Agnode_t *UF_union(Agnode_t *, Agnode_t *); - extern void UF_remove(Agnode_t *, Agnode_t *); - extern void UF_singleton(Agnode_t *); - extern void UF_setname(Agnode_t *, Agnode_t *); - -#endif diff --git a/internal/ccall/topfish/dummy.go b/internal/ccall/topfish/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/topfish/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/topfish/hierarchy.c b/internal/ccall/topfish/hierarchy.c deleted file mode 100644 index 0346dd1..0000000 --- a/internal/ccall/topfish/hierarchy.c +++ /dev/null @@ -1,1567 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/////////////////////////////////////// -// // -// This file contains the functions // -// for constructing and managing the // -// hierarchy structure // -// // -/////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include "memory.h" -#include "arith.h" -#include "hierarchy.h" - -static int cur_level = 0; - -///////////////////////// -// Some utilities for // -// 'maxmatch(..)' // -///////////////////////// - -static double -unweighted_common_fraction(v_data * graph, int v, int u, float *v_vector) -{ -// returns: |N(v) & N(u)| / |N(v) or N(u)| -// v_vector[i]>0 <==> i is neighbor of v or is v itself - - int neighbor; - int num_shared_neighbors = 0; - int j; - for (j = 0; j < graph[u].nedges; j++) { - neighbor = graph[u].edges[j]; - if (v_vector[neighbor] > 0) { - // a shared neighobr - num_shared_neighbors++; - } - } - // parallel to the weighted version: - //return 2*num_shared_neighbors/(graph[v].nedges+graph[u].nedges); - - // more natural - return ((double) num_shared_neighbors) / (graph[v].nedges + - graph[u].nedges - - num_shared_neighbors); -} - -static float fill_neighbors_vec(v_data * graph, int vtx, float *vtx_vec) -{ - float sum_weights = 0; - int j; - if (graph[0].ewgts != NULL) { - for (j = 0; j < graph[vtx].nedges; j++) { - sum_weights += (vtx_vec[graph[vtx].edges[j]] = (float) fabs(graph[vtx].ewgts[j])); // use fabs for the self loop - } - } else { - for (j = 0; j < graph[vtx].nedges; j++) { - sum_weights += (vtx_vec[graph[vtx].edges[j]] = 1); - } - } - return sum_weights; -} - -static void -fill_neighbors_vec_unweighted(v_data * graph, int vtx, float *vtx_vec) -{ - // a node is a neighbor of itself! - int j; - for (j = 0; j < graph[vtx].nedges; j++) { - vtx_vec[graph[vtx].edges[j]] = 1; - } -} - -static void empty_neighbors_vec(v_data * graph, int vtx, float *vtx_vec) -{ - int j; - for (j = 0; j < graph[vtx].nedges; j++) { - vtx_vec[graph[vtx].edges[j]] = 0; - } -} - - -static int dist3(v_data * graph, int node1, int node2) -{ -// succeeds if the graph theoretic distance between the nodes is no more than 3 - int i, j, k; - int u, v; - for (i = 1; i < graph[node1].nedges; i++) { - u = graph[node1].edges[i]; - if (u == node2) { - return 1; - } - for (j = 1; j < graph[u].nedges; j++) { - v = graph[u].edges[j]; - if (v == node2) { - return 1; - } - for (k = 1; k < graph[v].nedges; k++) { - if (graph[v].edges[k] == node2) { - return 1; - } - } - } - } - return 0; -} - -#define A 1.0 -#define B 1.0 -#define C 3.0 -#define D 1.0 - -static double ddist(ex_vtx_data * geom_graph, int v, int u) -{ -// Euclidean distance between nodes 'v' and 'u' - double x_v = geom_graph[v].x_coord, y_v = geom_graph[v].y_coord, - x_u = geom_graph[u].x_coord, y_u = geom_graph[u].y_coord; - - return sqrt((x_v - x_u) * (x_v - x_u) + (y_v - y_u) * (y_v - y_u)); -} - -extern void quicksort_place(double *, int *, int first, int last); - -static int -maxmatch(v_data * graph, /* array of vtx data for graph */ - ex_vtx_data * geom_graph, /* array of vtx data for graph */ - int nvtxs, /* number of vertices in graph */ - int *mflag, /* flag indicating vtx selected or not */ - int dist2_limit - ) -/* - Compute a matching of the nodes set. - The matching is not based only on the edge list of 'graph', - which might be too small, - but on the wider edge list of 'geom_graph' (which includes 'graph''s edges) - - We match nodes that are close both in the graph-theoretical sense and - in the geometry sense (in the layout) -*/ -{ - int *order; /* random ordering of vertices */ - int *iptr, *jptr; /* loops through integer arrays */ - int vtx; /* vertex to process next */ - int neighbor; /* neighbor of a vertex */ - int nmerged = 0; /* number of edges in matching */ - int i, j; /* loop counters */ - float max_norm_edge_weight; - double inv_size; - double *matchability = N_NEW(nvtxs, double); - double min_edge_len; - double closest_val = -1, val; - int closest_neighbor; - float *vtx_vec = N_NEW(nvtxs, float); - float *weighted_vtx_vec = N_NEW(nvtxs, float); - float sum_weights; - - // gather statistics, to enable normalizing the values - double avg_edge_len = 0, avg_deg_2 = 0; - int nedges = 0; - - for (i = 0; i < nvtxs; i++) { - avg_deg_2 += graph[i].nedges; - for (j = 1; j < graph[i].nedges; j++) { - avg_edge_len += ddist(geom_graph, i, graph[i].edges[j]); - nedges++; - } - } - avg_edge_len /= nedges; - avg_deg_2 /= nvtxs; - avg_deg_2 *= avg_deg_2; - - // the normalized edge weight of edge is defined as: - // weight()/sqrt(size(v)*size(u)) - // Now we compute the maximal normalized weight - if (graph[0].ewgts != NULL) { - max_norm_edge_weight = -1; - for (i = 0; i < nvtxs; i++) { - inv_size = sqrt(1.0 / geom_graph[i].size); - for (j = 1; j < graph[i].nedges; j++) { - if (graph[i].ewgts[j] * inv_size / - sqrt((float) geom_graph[graph[i].edges[j]].size) > - max_norm_edge_weight) { - max_norm_edge_weight = - (float) (graph[i].ewgts[j] * inv_size / - sqrt((double) - geom_graph[graph[i].edges[j]].size)); - } - } - } - } else { - max_norm_edge_weight = 1; - } - - /* Now determine the order of the vertices. */ - iptr = order = N_NEW(nvtxs, int); - jptr = mflag; - for (i = 0; i < nvtxs; i++) { - *(iptr++) = i; - *(jptr++) = -1; - } - - // Option 1: random permutation -#if 0 - int temp; - for (i=0; i= 0) { /* already matched. */ - continue; - } - inv_size = sqrt(1.0 / geom_graph[vtx].size); - sum_weights = fill_neighbors_vec(graph, vtx, weighted_vtx_vec); - fill_neighbors_vec_unweighted(graph, vtx, vtx_vec); - closest_neighbor = -1; - - /* - We match node i with the "closest" neighbor, based on 4 criteria: - (1) (Weighted) fraction of common neighbors (measured on orig. graph) - (2) AvgDeg*AvgDeg/(deg(vtx)*deg(neighbor)) (degrees measured on orig. graph) - (3) AvgEdgeLen/dist(vtx,neighbor) - (4) Weight of normalized direct connection between nodes (measured on orig. graph) - */ - - for (j = 1; j < geom_graph[vtx].nedges; j++) { - neighbor = geom_graph[vtx].edges[j]; - if (mflag[neighbor] >= 0) { /* already matched. */ - continue; - } - // (1): - val = - A * unweighted_common_fraction(graph, vtx, neighbor, - vtx_vec); - - if (val == 0 && (dist2_limit || !dist3(graph, vtx, neighbor))) { - // graph theoretical distance is larger than 3 (or 2 if '!dist3(graph, vtx, neighbor)' is commented) - // nodes cannot be matched - continue; - } - // (2) - val += - B * avg_deg_2 / (graph[vtx].nedges * - graph[neighbor].nedges); - - - // (3) - val += C * avg_edge_len / ddist(geom_graph, vtx, neighbor); - - // (4) - val += - (weighted_vtx_vec[neighbor] * inv_size / - sqrt((float) geom_graph[neighbor].size)) / - max_norm_edge_weight; - - - - if (val > closest_val || closest_neighbor == -1) { - closest_neighbor = neighbor; - closest_val = val; - } - - } - if (closest_neighbor != -1) { - mflag[vtx] = closest_neighbor; - mflag[closest_neighbor] = vtx; - nmerged++; - } - empty_neighbors_vec(graph, vtx, vtx_vec); - empty_neighbors_vec(graph, vtx, weighted_vtx_vec); - } - - free(order); - free(vtx_vec); - free(weighted_vtx_vec); - return (nmerged); -} - -/* Construct mapping from original graph nodes to coarsened graph nodes */ -static void makev2cv(int *mflag, /* flag indicating vtx selected or not */ - int nvtxs, /* number of vtxs in original graph */ - int *v2cv, /* mapping from vtxs to coarsened vtxs */ - int *cv2v /* mapping from coarsened vtxs to vtxs */ - ) -{ - int i, j; /* loop counters */ - - j = 0; - for (i = 0; i < nvtxs; i++) { - if (mflag[i] < 0) { // unmatched node - v2cv[i] = j; - cv2v[2 * j] = i; - cv2v[2 * j + 1] = -1; - j++; - } else if (mflag[i] > i) { // matched node - v2cv[i] = j; - v2cv[mflag[i]] = j; - cv2v[2 * j] = i; - cv2v[2 * j + 1] = mflag[i]; - j++; - } - } -} - -static int make_coarse_graph(v_data * graph, /* array of vtx data for graph */ - int nvtxs, /* number of vertices in graph */ - int nedges, /* number of edges in graph */ - v_data ** cgp, /* coarsened version of graph */ - int cnvtxs, /* number of vtxs in coarsened graph */ - int *v2cv, /* mapping from vtxs to coarsened vtxs */ - int *cv2v /* mapping from coarsened vtxs to vtxs */ - ) -// This function takes the information about matched pairs -// and use it to contract these pairs and build a coarse graph -{ - int i, j, cv, v, neighbor, cv_nedges; - int cnedges = 0; /* number of edges in coarsened graph */ - v_data *cgraph; /* coarsened version of graph */ - int *index = N_NEW(cnvtxs, int); - float intra_weight; - /* An upper bound on the number of coarse graph edges. */ - int maxCnedges = nedges; // do not subtract (nvtxs-cnvtxs) because we do not contract only along edges - int *edges; - float *eweights; -#ifdef STYLES - int styled_edges; - Style *styles = NULL; -#endif - - for (i = 0; i < cnvtxs; i++) { - index[i] = 0; - } - - /* Now allocate space for the new graph. Overeallocate and realloc later. */ - cgraph = N_NEW(cnvtxs, v_data); - edges = N_NEW(2 * maxCnedges + cnvtxs, int); - eweights = N_NEW(2 * maxCnedges + cnvtxs, float); -#ifdef STYLES - styled_edges = (graph[0].styles != NULL); - - if (styled_edges) { - styles = N_NEW(2 * maxCnedges + cnvtxs, Style); - } -#endif - - if (graph[0].ewgts != NULL) { - // use edge weights - for (cv = 0; cv < cnvtxs; cv++) { - - intra_weight = 0; - - cgraph[cv].edges = edges; - cgraph[cv].ewgts = eweights; -#ifdef STYLES - cgraph[cv].styles = styles; -#endif - - cv_nedges = 1; - v = cv2v[2 * cv]; - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) { - intra_weight = 2 * graph[v].ewgts[j]; // count both directions of the intra-edge - continue; - } - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cgraph[cv].ewgts[cv_nedges] = graph[v].ewgts[j]; -#ifdef STYLES - if (styled_edges) { - cgraph[cv].styles[cv_nedges] = graph[v].styles[j]; - } -#endif - cv_nedges++; - } else { - cgraph[cv].ewgts[index[neighbor]] += graph[v].ewgts[j]; -#ifdef STYLES - if (styled_edges - && graph[v].styles[j] != - cgraph[cv].styles[index[neighbor]]) { - cgraph[cv].styles[index[neighbor]] = regular; - } -#endif - } - } - - cgraph[cv].ewgts[0] = graph[v].ewgts[0]; - - if ((v = cv2v[2 * cv + 1]) != -1) { - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) - continue; - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cgraph[cv].ewgts[cv_nedges] = graph[v].ewgts[j]; -#ifdef STYLES - if (styled_edges) { - cgraph[cv].styles[cv_nedges] = - graph[v].styles[j]; - } -#endif - cv_nedges++; - } else { - cgraph[cv].ewgts[index[neighbor]] += - graph[v].ewgts[j]; -#ifdef STYLES - if (styled_edges - && graph[v].styles[j] != - cgraph[cv].styles[index[neighbor]]) { - cgraph[cv].styles[index[neighbor]] = regular; - } -#endif - } - } - cgraph[cv].ewgts[0] += graph[v].ewgts[0] + intra_weight; - } - cgraph[cv].nedges = cv_nedges; - cgraph[cv].edges[0] = cv; - edges += cv_nedges; - eweights += cv_nedges; - cnedges += cv_nedges; -#ifdef STYLES - if (styled_edges) { - styles += cv_nedges; - } -#endif - - for (j = 1; j < cgraph[cv].nedges; j++) - index[cgraph[cv].edges[j]] = 0; - } - } else { // fine graph is unweighted - int internal_weight = 0; - - for (cv = 0; cv < cnvtxs; cv++) { - - cgraph[cv].edges = edges; - cgraph[cv].ewgts = eweights; -#ifdef STYLES - cgraph[cv].styles = styles; -#endif - - cv_nedges = 1; - v = cv2v[2 * cv]; - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) { - internal_weight = 2; - continue; - } - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cgraph[cv].ewgts[cv_nedges] = -1; -#ifdef STYLES - if (styled_edges) { - cgraph[cv].styles[cv_nedges] = graph[v].styles[j]; - } -#endif - cv_nedges++; - } else { - cgraph[cv].ewgts[index[neighbor]]--; -#ifdef STYLES - if (styled_edges - && graph[v].styles[j] != - cgraph[cv].styles[index[neighbor]]) { - cgraph[cv].styles[index[neighbor]] = regular; - } -#endif - } - } - cgraph[cv].ewgts[0] = (float) graph[v].edges[0]; // this is our trick to store the weights on the diag in an unweighted graph - if ((v = cv2v[2 * cv + 1]) != -1) { - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) - continue; - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cgraph[cv].ewgts[cv_nedges] = -1; -#ifdef STYLES - if (styled_edges) { - cgraph[cv].styles[cv_nedges] = - graph[v].styles[j]; - } -#endif - cv_nedges++; - } else { - cgraph[cv].ewgts[index[neighbor]]--; -#ifdef STYLES - if (styled_edges - && graph[v].styles[j] != - cgraph[cv].styles[index[neighbor]]) { - cgraph[cv].styles[index[neighbor]] = regular; - } -#endif - } - } - // we subtract the weight of the intra-edge that was counted twice - cgraph[cv].ewgts[0] += - (float) graph[v].edges[0] - internal_weight; - // In a case the edge weights are defined as positive: - //cgraph[cv].ewgts[0] += (float) graph[v].edges[0]+internal_weight; - } - - cgraph[cv].nedges = cv_nedges; - cgraph[cv].edges[0] = cv; - edges += cv_nedges; - eweights += cv_nedges; - cnedges += cv_nedges; -#ifdef STYLES - if (styled_edges) { - styles += cv_nedges; - } -#endif - - for (j = 1; j < cgraph[cv].nedges; j++) - index[cgraph[cv].edges[j]] = 0; - } - } - cnedges -= cnvtxs; - cnedges /= 2; - free(index); - *cgp = cgraph; - return cnedges; -} - -static int -make_coarse_ex_graph ( - ex_vtx_data * graph, /* array of vtx data for graph */ - int nvtxs, /* number of vertices in graph */ - int nedges, /* number of edges in graph */ - ex_vtx_data ** cgp, /* coarsened version of graph */ - int cnvtxs, /* number of vtxs in coarsened graph */ - int *v2cv, /* mapping from vtxs to coarsened vtxs */ - int *cv2v /* mapping from coarsened vtxs to vtxs */ -) -// This function takes the information about matched pairs -// and use it to contract these pairs and build a coarse ex_graph -{ - int cnedges; /* number of edges in coarsened graph */ - ex_vtx_data *cgraph; /* coarsened version of graph */ - int i, j, cv, v, neighbor, cv_nedges; - int *index = N_NEW(cnvtxs, int); - int *edges; - - for (i = 0; i < cnvtxs; i++) { - index[i] = 0; - } - - /* An upper bound on the number of coarse graph edges. */ - cnedges = nedges; - - /* Now allocate space for the new graph. Overeallocate and realloc later. */ - cgraph = N_NEW(cnvtxs, ex_vtx_data); - edges = N_NEW(2 * cnedges + cnvtxs, int); - - for (cv = 0; cv < cnvtxs; cv++) { - - cgraph[cv].edges = edges; - - cv_nedges = 1; - v = cv2v[2 * cv]; - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) { - continue; - } - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cv_nedges++; - } - } - cgraph[cv].size = graph[v].size; - cgraph[cv].x_coord = graph[v].x_coord; - cgraph[cv].y_coord = graph[v].y_coord; - if ((v = cv2v[2 * cv + 1]) != -1) { - for (j = 1; j < graph[v].nedges; j++) { - neighbor = v2cv[graph[v].edges[j]]; - if (neighbor == cv) - continue; - if (index[neighbor] == 0) { // new neighbor - index[neighbor] = cv_nedges; - cgraph[cv].edges[cv_nedges] = neighbor; - cv_nedges++; - } - } - // compute new coord's as a weighted average of the old ones - cgraph[cv].x_coord = - (cgraph[cv].size * cgraph[cv].x_coord + - graph[v].size * graph[v].x_coord) / (cgraph[cv].size + - graph[v].size); - cgraph[cv].y_coord = - (cgraph[cv].size * cgraph[cv].y_coord + - graph[v].size * graph[v].y_coord) / (cgraph[cv].size + - graph[v].size); - cgraph[cv].size += graph[v].size; - } - cgraph[cv].nedges = cv_nedges; - cgraph[cv].edges[0] = cv; - edges += cv_nedges; - - for (j = 1; j < cgraph[cv].nedges; j++) - index[cgraph[cv].edges[j]] = 0; - } - free(index); - *cgp = cgraph; - return cnedges; -} - -static void -coarsen_match ( - v_data * graph, /* graph to be matched */ - ex_vtx_data* geom_graph, /* another graph (with coords) on the same nodes */ - int nvtxs, /* number of vertices in graph */ - int nedges, /* number of edges in graph */ - int geom_nedges, /* number of edges in geom_graph */ - v_data ** cgraph, /* coarsened version of graph */ - ex_vtx_data ** cgeom_graph, /* coarsened version of geom_graph */ - int *cnp, /* number of vtxs in coarsened graph */ - int *cnedges, /* number of edges in coarsened graph */ - int *cgeom_nedges, /* number of edges in coarsened geom_graph */ - int **v2cvp, /* reference from vertices to coarse vertices */ - int **cv2vp, /* reference from vertices to coarse vertices */ - int dist2_limit -) - -/* - * This function gets two graphs with the same node set and - * constructs two corresponding coarsened graphs of about - * half the size - */ -{ - int *mflag; /* flag indicating vtx matched or not */ - int nmerged; /* number of edges contracted */ - int *v2cv; /* reference from vertices to coarse vertices */ - int *cv2v; /* reference from vertices to coarse vertices */ - int cnvtxs; - - /* Allocate and initialize space. */ - mflag = N_NEW(nvtxs, int); - - /* Find a maximal matching in the graphs */ - nmerged = maxmatch(graph, geom_graph, nvtxs, mflag, dist2_limit); - - /* Now construct coarser graph by contracting along matching edges. */ - /* Pairs of values in mflag array indicate matched vertices. */ - /* A negative value indicates that vertex is unmatched. */ - - *cnp = cnvtxs = nvtxs - nmerged; - - *v2cvp = v2cv = N_NEW(nvtxs, int); - *cv2vp = cv2v = N_NEW(2 * cnvtxs, int); - makev2cv(mflag, nvtxs, v2cv, cv2v); - - free(mflag); - - *cnedges = - make_coarse_graph(graph, nvtxs, nedges, cgraph, cnvtxs, v2cv, - cv2v); - *cgeom_nedges = - make_coarse_ex_graph(geom_graph, nvtxs, geom_nedges, cgeom_graph, - cnvtxs, v2cv, cv2v); -} - -/* release: - * Free memory resources for hierarchy. - */ -void release(Hierarchy * hierarchy) -{ - v_data *graph; - ex_vtx_data *ex_graph; - int i; - for (i = 0; i < hierarchy->nlevels; i++) { - graph = hierarchy->graphs[i]; - ex_graph = hierarchy->geom_graphs[i]; - freeGraph (graph); - free(ex_graph[0].edges); - free(ex_graph); - if (i < hierarchy->nlevels - 1) { - free(hierarchy->v2cv[i]); - } - if (i > 0) { - free(hierarchy->cv2v[i]); - } - } - - free(hierarchy->graphs); - free(hierarchy->geom_graphs); - free(hierarchy->nvtxs); - free(hierarchy->nedges); - free(hierarchy->cv2v); - free(hierarchy->v2cv); -} - -static v_data *cpGraph(v_data * graph, int n, int nedges) -{ - v_data *cpGraph; - int *edges; - float *ewgts = NULL; -#ifdef STYLES - Style *styles = NULL; -#endif - int i, j; - - if (graph == NULL || n == 0) { - return NULL; - } - cpGraph = N_NEW(n, v_data); - edges = N_NEW(2 * nedges + n, int); - if (graph[0].ewgts != NULL) { - ewgts = N_NEW(2 * nedges + n, float); - } -#ifdef STYLES - if (graph[0].styles != NULL) { - styles = N_NEW(2 * nedges + n, Style); - } -#endif - - for (i = 0; i < n; i++) { - cpGraph[i] = graph[i]; - cpGraph[i].edges = edges; - cpGraph[i].ewgts = ewgts; -#ifdef STYLES - cpGraph[i].styles = styles; -#endif - for (j = 0; j < graph[i].nedges; j++) { - edges[j] = graph[i].edges[j]; - } - edges += graph[i].nedges; - if (ewgts != NULL) { - for (j = 0; j < graph[i].nedges; j++) { - ewgts[j] = graph[i].ewgts[j]; - } - ewgts += graph[i].nedges; - } -#ifdef STYLES - if (styles != NULL) { - for (j = 0; j < graph[i].nedges; j++) { - styles[j] = graph[i].styles[j]; - } - styles += graph[i].nedges; - } -#endif - } - return cpGraph; -} - -static ex_vtx_data *cpExGraph(ex_vtx_data * graph, int n, int nedges) -{ - ex_vtx_data *cpGraph; - int *edges; - int i, j; - - if (graph == NULL || n == 0) { - return NULL; - } - cpGraph = N_NEW(n, ex_vtx_data); - edges = N_NEW(2 * nedges + n, int); - - for (i = 0; i < n; i++) { - cpGraph[i] = graph[i]; - cpGraph[i].edges = edges; - for (j = 0; j < graph[i].nedges; j++) { - edges[j] = graph[i].edges[j]; - } - edges += graph[i].nedges; - } - return cpGraph; -} - -Hierarchy *create_hierarchy(v_data * graph, int nvtxs, int nedges, - ex_vtx_data * geom_graph, int ngeom_edges, - hierparms_t* parms) -{ - int cur_level; - Hierarchy *hierarchy = NEW(Hierarchy); - int cngeom_edges = ngeom_edges; - ex_vtx_data *geom_graph_level; - int nodeIndex = 0; - int i, j; - int min_nvtxs = parms->min_nvtxs; - int nlevels = MAX(5, 10 * (int) log((float) (nvtxs / min_nvtxs))); // just an estimate - - hierarchy->graphs = N_NEW(nlevels, v_data *); - hierarchy->geom_graphs = N_NEW(nlevels, ex_vtx_data *); - hierarchy->nvtxs = N_NEW(nlevels, int); - hierarchy->nedges = N_NEW(nlevels, int); - hierarchy->v2cv = N_NEW(nlevels, int *); - hierarchy->cv2v = N_NEW(nlevels, int *); - - hierarchy->graphs[0] = cpGraph(graph, nvtxs, nedges); - hierarchy->geom_graphs[0] = cpExGraph(geom_graph, nvtxs, ngeom_edges); - hierarchy->nvtxs[0] = nvtxs; - hierarchy->nedges[0] = nedges; - - for (cur_level = 0; - hierarchy->nvtxs[cur_level] > min_nvtxs - && cur_level < 50 /*nvtxs/10 */ ; cur_level++) { - if (cur_level == nlevels - 1) { // we have to allocate more space - nlevels *= 2; - hierarchy->graphs = - RALLOC(nlevels, hierarchy->graphs, v_data *); - hierarchy->geom_graphs = - RALLOC(nlevels, hierarchy->geom_graphs, ex_vtx_data *); - hierarchy->nvtxs = RALLOC(nlevels, hierarchy->nvtxs, int); - hierarchy->nedges = RALLOC(nlevels, hierarchy->nedges, int); - hierarchy->v2cv = RALLOC(nlevels, hierarchy->v2cv, int *); - hierarchy->cv2v = RALLOC(nlevels, hierarchy->cv2v, int *); - } - - ngeom_edges = cngeom_edges; - coarsen_match - (hierarchy->graphs[cur_level], - hierarchy->geom_graphs[cur_level], - hierarchy->nvtxs[cur_level], hierarchy->nedges[cur_level], - ngeom_edges, &hierarchy->graphs[cur_level + 1], - &hierarchy->geom_graphs[cur_level + 1], - &hierarchy->nvtxs[cur_level + 1], - &hierarchy->nedges[cur_level + 1], &cngeom_edges, - &hierarchy->v2cv[cur_level], &hierarchy->cv2v[cur_level + 1], - parms->dist2_limit); - } - - hierarchy->nlevels = cur_level + 1; - - // assign consecutive global identifiers to all nodes on hierarchy - for (i = 0; i < hierarchy->nlevels; i++) { - geom_graph_level = hierarchy->geom_graphs[i]; - for (j = 0; j < hierarchy->nvtxs[i]; j++) { - geom_graph_level[j].globalIndex = nodeIndex; - nodeIndex++; - } - } - hierarchy->maxNodeIndex = nodeIndex; - return hierarchy; -} - -static double -dist_from_foci(ex_vtx_data * graph, int node, int *foci, int num_foci) -{ -// compute minimum distance of 'node' from the set 'foci' - int i; - double distance = ddist(graph, node, foci[0]); - for (i = 1; i < num_foci; i++) { - distance = MIN(distance, ddist(graph, node, foci[i])); - } - - return distance; -} - -/* set_active_levels: - * Compute the "active level" field of each node in the hierarchy. - * Note that if the active level is lower than the node's level, the node - * is "split" in the presentation; if the active level is higher than - * the node's level, then the node is aggregated into a coarser node. - * If the active level equals the node's level then the node is currently shown - */ -void -set_active_levels(Hierarchy * hierarchy, int *foci_nodes, int num_foci, - levelparms_t* parms) -{ - int n, i; - int *nodes; - double *distances; - ex_vtx_data *graph; - int level; - int group_size; - int thresh; - int vtx; - ex_vtx_data *cgraph; - int *cv2v; - int v, u; - int min_level = cur_level; - - graph = hierarchy->geom_graphs[min_level]; // finest graph - n = hierarchy->nvtxs[min_level]; - - // compute distances from foci nodes - nodes = N_NEW(n, int); - distances = N_NEW(n, double); - for (i = 0; i < n; i++) { - nodes[i] = i; - distances[i] = dist_from_foci(graph, i, foci_nodes, num_foci); - } - - // sort nodes according to their distance from foci - quicksort_place(distances, nodes, 0, n - 1); - - /* compute *desired* levels of fine nodes by distributing them into buckets - * The sizes of the buckets is a geometric series with - * factor: 'coarsening_rate' - */ - level = min_level; - group_size = parms->num_fine_nodes * num_foci; - thresh = group_size; - for (i = 0; i < n; i++) { - vtx = nodes[i]; - if (i > thresh && level < hierarchy->nlevels - 1) { - level++; - group_size = (int) (group_size * parms->coarsening_rate); - thresh += group_size; - } - graph[vtx].active_level = level; - } - - // Fine-to-coarse sweep: - //---------------------- - // Propagate levels to all coarse nodes and determine final levels - // at lowest meeting points. Note that nodes can be active in - // lower (finer) levels than what originally desired, since if 'u' - // and 'v' are merged, than the active level of '{u,v}' will be - // the minimum of the active levels of 'u' and 'v' - for (level = min_level + 1; level < hierarchy->nlevels; level++) { - cgraph = hierarchy->geom_graphs[level]; - graph = hierarchy->geom_graphs[level - 1]; - cv2v = hierarchy->cv2v[level]; - n = hierarchy->nvtxs[level]; - for (i = 0; i < n; i++) { - v = cv2v[2 * i]; - u = cv2v[2 * i + 1]; - if (u >= 0) { // cv is decomposed from 2 fine nodes - if (graph[v].active_level < level - || graph[u].active_level < level) { - // At least one of the nodes should be active at a lower level, - // in this case both children are active at a lower level - // and we don't wait till they are merged - graph[v].active_level = - MIN(graph[v].active_level, level - 1); - graph[u].active_level = - MIN(graph[u].active_level, level - 1); - } - // The node with the finer (lower) active level determines the coarse active level - cgraph[i].active_level = - MIN(graph[v].active_level, graph[u].active_level); - } else { - cgraph[i].active_level = graph[v].active_level; - } - } - } - - // Coarse-to-fine sweep: - //---------------------- - // Propagate final levels all the way to fine nodes - for (level = hierarchy->nlevels - 1; level > 0; level--) { - cgraph = hierarchy->geom_graphs[level]; - graph = hierarchy->geom_graphs[level - 1]; - cv2v = hierarchy->cv2v[level]; - n = hierarchy->nvtxs[level]; - for (i = 0; i < n; i++) { - if (cgraph[i].active_level < level) { - continue; - } - // active level has been already reached, copy level to children - v = cv2v[2 * i]; - u = cv2v[2 * i + 1]; - graph[v].active_level = cgraph[i].active_level; - if (u >= 0) { - graph[u].active_level = cgraph[i].active_level; - } - } - } - free(nodes); - free(distances); -} - -/* findClosestActiveNode: - * Given (x,y) in physical coords, check if node is closer to this point - * than previous setting. If so, reset values. - * If node is not active, recurse down finer levels. - * Return closest distance squared. - */ -static double -findClosestActiveNode(Hierarchy * hierarchy, int node, - int level, double x, double y, - double closest_dist, int *closest_node, - int *closest_node_level) -{ - ex_vtx_data *graph; - - graph = hierarchy->geom_graphs[level]; - - if (graph[node].active_level == level) - { // node is active - double delx = x - graph[node].physical_x_coord; - double dely = y - graph[node].physical_y_coord; - double dist = delx*delx + dely*dely; - - if (dist < closest_dist) - { - closest_dist = dist; - *closest_node = node; - *closest_node_level = level; - - - } - return closest_dist; - } - - closest_dist = - findClosestActiveNode(hierarchy, hierarchy->cv2v[level][2 * node], - level - 1, x, y, closest_dist, closest_node, - closest_node_level); - - if (hierarchy->cv2v[level][2 * node + 1] >= 0) { - closest_dist = - findClosestActiveNode(hierarchy, - hierarchy->cv2v[level][2 * node + 1], - level - 1, x, y, closest_dist, - closest_node, closest_node_level); - } - return closest_dist; -} - -/* find_leftmost_descendant: - * Given coarse node in given level, return representative node - * in lower level cur_level. - */ -static int -find_leftmost_descendant(Hierarchy * hierarchy, int node, int level, - int cur_level) -{ - while (level > cur_level) - { - node = hierarchy->cv2v[level--][2 * node]; - } - return node; -} - -/* find_closest_active_node: - * Given x and y in physical coordinate system, determine closest - * actual node in graph. Store this in closest_fine_node, and return - * distance squared. - */ -double -find_closest_active_node(Hierarchy * hierarchy, double x, double y, - int *closest_fine_node) -{ - int i, closest_node, closest_node_level; - int top_level = hierarchy->nlevels - 1; - double min_dist = 1e20; - - for (i = 0; i < hierarchy->nvtxs[top_level]; i++) - { - min_dist = findClosestActiveNode(hierarchy, i, top_level, x, y,min_dist, &closest_node, &closest_node_level); - } - *closest_fine_node =find_leftmost_descendant(hierarchy, closest_node,closest_node_level, cur_level); - - return min_dist; -} - -#if 0 -int find_random_descendant(Hierarchy * hierarchy, int node, int level, - int cur_level) -{ - int inc; - while (level > cur_level) { - if (hierarchy->cv2v[level][2 * node + 1] >= 0) { - inc = rand() % 2; - } else { - inc = 0; - } - node = hierarchy->cv2v[level--][2 * node + inc]; - } - return node; -} -#endif - -int -init_ex_graph(v_data * graph1, v_data * graph2, int n, - double *x_coords, double *y_coords, ex_vtx_data ** gp) -{ - // build ex_graph from the union of edges in 'graph1' and 'graph2' - // note that this function does not destroy the input graphs - - ex_vtx_data *geom_graph; - int nedges1 = 0, nedges2 = 0; - int *edges; - int nedges = 0; - int i, j, k, l, first_nedges; - int neighbor; - for (i = 0; i < n; i++) { - nedges1 += graph1[i].nedges; - nedges2 += graph2[i].nedges; - } - edges = N_NEW(nedges1 + nedges2, int); - *gp = geom_graph = N_NEW(n, ex_vtx_data); - - for (i = 0; i < n; i++) { - geom_graph[i].edges = edges; - geom_graph[i].size = 1; - geom_graph[i].x_coord = (float) x_coords[i]; - geom_graph[i].y_coord = (float) y_coords[i]; - geom_graph[i].edges[0] = i; - for (j = 1; j < graph1[i].nedges; j++) { - edges[j] = graph1[i].edges[j]; - } - first_nedges = k = graph1[i].nedges; - for (j = 1; j < graph2[i].nedges; j++) { - neighbor = graph2[i].edges[j]; - for (l = 1; l < first_nedges; l++) { - if (edges[l] == neighbor) { // already existed neighbor - break; - } - } - if (l == first_nedges) { // neighbor wasn't found - edges[k++] = neighbor; - } - } - geom_graph[i].nedges = k; - edges += k; - nedges += k; - } - nedges /= 2; - return nedges; -} - -/* extract_active_logical_coords: - * Preorder scan the hierarchy tree, and extract the logical coordinates of - * all active nodes - * Store (universal) coords in x_coords and y_coords and increment index. - * Return index. - */ -int -extract_active_logical_coords(Hierarchy * hierarchy, int node, - int level, double *x_coords, - double *y_coords, int counter) -{ - - ex_vtx_data *graph = hierarchy->geom_graphs[level]; - - if (graph[node].active_level == level) { // node is active - x_coords[counter] = graph[node].x_coord; - y_coords[counter++] = graph[node].y_coord; - return counter; - } - - counter = - extract_active_logical_coords(hierarchy, - hierarchy->cv2v[level][2 * node], - level - 1, x_coords, y_coords, - counter); - - if (hierarchy->cv2v[level][2 * node + 1] >= 0) { - counter = - extract_active_logical_coords(hierarchy, - hierarchy->cv2v[level][2 * node + - 1], - level - 1, x_coords, y_coords, - counter); - } - return counter; -} - -/* set_active_physical_coords: - * Preorder scan the hierarchy tree, and set the physical coordinates - * of all active nodes - */ -int -set_active_physical_coords(Hierarchy * hierarchy, int node, int level, - double *x_coords, double *y_coords, int counter) -{ - - ex_vtx_data *graph = hierarchy->geom_graphs[level]; - - if (graph[node].active_level == level) { // node is active - graph[node].physical_x_coord = (float) x_coords[counter]; - graph[node].physical_y_coord = (float) y_coords[counter++]; - return counter; - } - - counter = - set_active_physical_coords(hierarchy, - hierarchy->cv2v[level][2*node], - level - 1, x_coords, y_coords, counter); - - if (hierarchy->cv2v[level][2 * node + 1] >= 0) { - counter = - set_active_physical_coords(hierarchy, - hierarchy->cv2v[level][2*node + 1], - level - 1, x_coords, y_coords, - counter); - } - return counter; -} - -static int countActiveNodes(Hierarchy * hierarchy, int node, int level) -{ - ex_vtx_data *graph = hierarchy->geom_graphs[level]; - int cnt, other; - - if (graph[node].active_level == level) { // node is active -#ifdef DEBUG -fprintf (stderr, "(%d,%d) (%f,%f)\n", level,node,graph[node].x_coord,graph[node].y_coord); -#endif - return 1; - } - cnt = countActiveNodes(hierarchy, hierarchy->cv2v[level][2*node], level-1); - - if ((other = hierarchy->cv2v[level][2 * node + 1]) >= 0) { - cnt += countActiveNodes(hierarchy, other, level - 1); - } - return cnt; -} - -/* count_active_nodes: - * Return number of active nodes. - */ -int count_active_nodes(Hierarchy * hierarchy) -{ - int i = 0; - int max_level = hierarchy->nlevels - 1; // coarsest level - int sum = 0; - for (i = 0; i < hierarchy->nvtxs[max_level]; i++) { - sum += countActiveNodes(hierarchy, i, max_level); - } - return sum; -} - -/* locateByIndex: - * Given global index, find level and index on level. - * Return -1 if no such node. - */ -int locateByIndex(Hierarchy * hierarchy, int index, int *lp) -{ - int globalIndex; - int level; - int nlevels; - - assert(hierarchy); - globalIndex = index; - nlevels = hierarchy->nlevels; - for (level = 0; level < nlevels && index >= hierarchy->nvtxs[level]; - level++) { - index -= hierarchy->nvtxs[level]; - } - if (level < nlevels && index >= 0 - && hierarchy->geom_graphs[level][index].globalIndex == - globalIndex) { - *lp = level; - return index; - } else { - // index not found - // return an arbitrary node - *lp = 0; - return -1; - } -} - -/* isActiveAncestorOfNeighbors: - * check whether 'activeAncestorIdx' is an active ancestor of one - * of the neighbors of 'node' - */ -static int -isActiveAncestorOfNeighbors(Hierarchy * hierarchy, int node, int level, - int activeAncestorIdx) -{ - int i, active_level ; - v_data neighborsInLevel; - int neighbor, neighborLevel; - assert(hierarchy); - neighborsInLevel = hierarchy->graphs[level][node]; - - for (i = 1; i < neighborsInLevel.nedges; i++) { - neighbor = neighborsInLevel.edges[i]; - active_level = - hierarchy->geom_graphs[level][neighbor].active_level; - if (active_level > level) { - // ancestor of neighbor is active - neighborLevel = level; - do { - neighbor = hierarchy->v2cv[neighborLevel][neighbor]; - neighborLevel++; - } while (active_level > neighborLevel); - if (hierarchy->geom_graphs[neighborLevel][neighbor]. - globalIndex == activeAncestorIdx) { - return 1; - } - } - } - return 0; -} - -/* findGlobalIndexesOfActiveNeighbors: - * Find indices of active neighbors. Store in allocated array. - * Return pointer to array in np, and return number of neighbors. - * Return -1 on error - */ -int -findGlobalIndexesOfActiveNeighbors(Hierarchy * hierarchy, int index, - int **np) -{ - int numNeighbors = 0; - int *neighbors; - int i, j; - int level, node,active_level,found; - v_data neighborsInLevel; - int nAllocNeighbors; - int *stack; // 4*hierarchy->nlevels should be enough for the DFS scan - int stackHeight; - int neighbor, neighborLevel; - - if (hierarchy == NULL) { - return -1; - } - - if ((node = locateByIndex(hierarchy, index, &level)) < 0) - node = 0; - - neighborsInLevel = hierarchy->graphs[level][node]; - nAllocNeighbors = 2 * neighborsInLevel.nedges; - neighbors = N_NEW(nAllocNeighbors, int); - - stack = N_NEW(5 * hierarchy->nlevels + 1, int); - - for (i = 1; i < neighborsInLevel.nedges; i++) { - neighbor = neighborsInLevel.edges[i]; - active_level = - hierarchy->geom_graphs[level][neighbor].active_level; - if (active_level == level) { - // neighbor is active - add it - if (numNeighbors >= nAllocNeighbors) { - nAllocNeighbors = 2 * nAllocNeighbors + 1; - neighbors = RALLOC(nAllocNeighbors, neighbors, int); - } - neighbors[numNeighbors] = - hierarchy->geom_graphs[level][neighbor].globalIndex; - numNeighbors++; - } else if (active_level > level) { - // ancestor of neighbor is active - add it if not already added - neighborLevel = level; - do { - - neighbor = hierarchy->v2cv[neighborLevel][neighbor]; - neighborLevel++; - } while (active_level > neighborLevel); - found = 0; - for (j = 0; j < numNeighbors && !found; j++) { - if (neighbors[j] == - hierarchy->geom_graphs[neighborLevel][neighbor]. - globalIndex) { - found = 1; - } - } - if (!found) { - if (numNeighbors >= nAllocNeighbors) { - nAllocNeighbors = 2 * nAllocNeighbors + 1; - neighbors = RALLOC(nAllocNeighbors, neighbors, int); - } - neighbors[numNeighbors] = - hierarchy->geom_graphs[neighborLevel][neighbor]. - globalIndex; - numNeighbors++; - } - } else { - // descendants of neighbor are active - add those of them that really point back - // using A DFS search below neighbor - stack[0] = level; - stack[1] = neighbor; - stackHeight = 2; - while (stackHeight > 0) { - stackHeight--; - neighbor = stack[stackHeight]; - stackHeight--; - neighborLevel = stack[stackHeight]; - if (hierarchy->geom_graphs[neighborLevel][neighbor]. - active_level == neighborLevel) { - if (numNeighbors >= nAllocNeighbors) { - nAllocNeighbors = 2 * nAllocNeighbors + 1; - neighbors = - RALLOC(nAllocNeighbors, neighbors, int); - } - neighbors[numNeighbors] = - hierarchy->geom_graphs[neighborLevel][neighbor]. - globalIndex; - numNeighbors++; - } else if (hierarchy->geom_graphs[neighborLevel][neighbor]. - active_level < level) { - // check if node points back to original node (or just was clustered with neighbors) - - if (isActiveAncestorOfNeighbors - (hierarchy, - hierarchy->cv2v[neighborLevel][2 * neighbor], - neighborLevel - 1, index)) { - stack[stackHeight] = neighborLevel - 1; - stackHeight++; - stack[stackHeight] = - hierarchy->cv2v[neighborLevel][2 * neighbor]; - stackHeight++; - } - if (hierarchy->cv2v[neighborLevel][2 * neighbor + 1] >= - 0) { - - if (isActiveAncestorOfNeighbors - (hierarchy, - hierarchy->cv2v[neighborLevel][2 * neighbor + - 1], - neighborLevel - 1, index)) { - stack[stackHeight] = neighborLevel - 1; - stackHeight++; - stack[stackHeight] = - hierarchy->cv2v[neighborLevel][2 * - neighbor + - 1]; - stackHeight++; - } - } - } - } - } - } - free(stack); - *np = neighbors; - return numNeighbors; -} - -/* find_physical_coords: - * find the 'physical_coords' of the active-ancestor of 'node' - */ -void -find_physical_coords(Hierarchy * hierarchy, int level, int node, double *x, - double *y) -{ - int active_level = hierarchy->geom_graphs[level][node].active_level; - while (active_level > level) { - node = hierarchy->v2cv[level][node]; - level++; - } - - *x = hierarchy->geom_graphs[level][node].physical_x_coord; - *y = hierarchy->geom_graphs[level][node].physical_y_coord; -} - -void -find_active_ancestor_info(Hierarchy * hierarchy, int level, int node, int *levell,int *nodee) -{ - int active_level = hierarchy->geom_graphs[level][node].active_level; - while (active_level > level) { - node = hierarchy->v2cv[level][node]; - level++; - } - - *nodee = node; - *levell = level; -} - - - - -/* find_old_physical_coords: - * find the 'old_physical_coords' of the old active-ancestor of 'node' - */ -void -find_old_physical_coords(Hierarchy * hierarchy, int level, int node, double *x, - double *y) -{ - int active_level = hierarchy->geom_graphs[level][node].old_active_level; - while (active_level > level) { - node = hierarchy->v2cv[level][node]; - level++; - } - - *x = hierarchy->geom_graphs[level][node].old_physical_x_coord; - *y = hierarchy->geom_graphs[level][node].old_physical_y_coord; -} - -/* find_active_ancestor: - * find the 'ancestorIndex' of the active-ancestor of 'node' - * Return negative if node's active_level < level. - */ -int -find_active_ancestor(Hierarchy * hierarchy, int level, int node) -{ - int active_level = hierarchy->geom_graphs[level][node].active_level; - while (active_level > level) { - node = hierarchy->v2cv[level][node]; - level++; - } - - if (active_level == level) - return hierarchy->geom_graphs[level][node].globalIndex; - else - return -1; -} -int -find_old_active_ancestor(Hierarchy * hierarchy, int level, int node) -{ - int active_level = hierarchy->geom_graphs[level][node].old_active_level; - while (active_level > level) { - node = hierarchy->v2cv[level][node]; - level++; - } - - if (active_level == level) - return hierarchy->geom_graphs[level][node].globalIndex; - else - return -1; -} - -void init_active_level(Hierarchy* hierarchy, int level) -{ - int i,j; - ex_vtx_data* graph; - for (i=0; inlevels; i++) { - graph = hierarchy->geom_graphs[i]; - for (j=0; jnvtxs[i]; j++) { - graph->active_level = level; - graph++; - } - } -} - diff --git a/internal/ccall/topfish/hierarchy.h b/internal/ccall/topfish/hierarchy.h deleted file mode 100644 index 2fd9d09..0000000 --- a/internal/ccall/topfish/hierarchy.h +++ /dev/null @@ -1,108 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _HIERARCHY_H_ -#define _HIERARCHY_H_ - -#include "sparsegraph.h" - -typedef struct { - int nedges; // degree, including self-loop - int *edges; // neighbors; edges[0] = self - int size; // no. of original nodes contained - int active_level; // Node displayed iff active_level == node's level - int globalIndex; // Each node has a unique ID over all levels - - // position of node in universal coordinate system - float x_coord; - float y_coord; - - // position of node in physical (device) coordinate system - float physical_x_coord; - float physical_y_coord; - //previous coords and active level (for animation) - float old_physical_x_coord; - float old_physical_y_coord; - int old_active_level; - - -} ex_vtx_data; - -typedef struct { - int nlevels; - v_data ** graphs; - ex_vtx_data ** geom_graphs; - int * nvtxs; - int * nedges; - /* Node i on level k is mapped to coarse node v2cv[k][i] on level k+1 - */ - int ** v2cv; - /* Coarse node i on level k contains nodes cv2v[k][2*i] and - * cv2v[k][2*i+1] on level k-1. If it contains only 1 node, then - * cv2v[k][2*i+1] will be -1 - */ - int ** cv2v; - int maxNodeIndex; -} Hierarchy; - -typedef struct { - int num_fine_nodes; /* 50 */ - double coarsening_rate; /* 2.5 */ -} levelparms_t; - -typedef struct { - // if dist2_limit true, don't contract nodes of distance larger than 2 - // if false then also distance 3 is possible - int dist2_limit; /* TRUE */ - int min_nvtxs; /* 20 */ -} hierparms_t; - -void release(Hierarchy*); - -Hierarchy* create_hierarchy(v_data * graph, int nvtxs, int nedges, - ex_vtx_data* geom_graph, int ngeom_edges, hierparms_t*); - -void set_active_levels(Hierarchy*, int*, int, levelparms_t*); -double find_closest_active_node(Hierarchy*, double x, double y, int*); - -int extract_active_logical_coords(Hierarchy * hierarchy, int node, int level, - double *x_coords, double *y_coords, int counter); -int set_active_physical_coords(Hierarchy *, int node, int level, - double *x_coords, double *y_coords, int counter); - -int count_active_nodes(Hierarchy *); -void init_active_level(Hierarchy* hierarchy, int level); - -// creating a geometric graph: -int init_ex_graph(v_data * graph1, v_data * graph2, int n, - double *x_coords, double *y_coords, ex_vtx_data ** gp); - -// layout distortion: -void rescale_layout(double *x_coords, double *y_coords, - int n, int interval, double width, double height, - double margin, double distortion); -void rescale_layout_polar(double * x_coords, double * y_coords, - double * x_foci, double * y_foci, int num_foci, int n, int interval, - double width, double height, double margin, double distortion); - -void find_physical_coords(Hierarchy*, int, int, double *x, double *y); -void find_old_physical_coords(Hierarchy * hierarchy, int level, int node, double *x,double *y); - - -int find_active_ancestor(Hierarchy*, int, int); -void find_active_ancestor_info(Hierarchy * hierarchy, int level, int node, int *levell,int *nodee); - -int find_old_active_ancestor(Hierarchy * hierarchy, int level, int node); -int locateByIndex(Hierarchy*, int, int*); -int findGlobalIndexesOfActiveNeighbors(Hierarchy*, int, int**); - -#endif diff --git a/internal/ccall/topfish/rescale_layout.c b/internal/ccall/topfish/rescale_layout.c deleted file mode 100644 index 3c1c7f1..0000000 --- a/internal/ccall/topfish/rescale_layout.c +++ /dev/null @@ -1,516 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/////////////////////////////////////// -// // -// This file contains the functions // -// for distorting the layout. // -// // -// Four methods are available: // -// 1) Uniform denisity - rectilinear // -// 2) Uniform denisity - polar // -// 3) Fisheye - rectilinear // -// 4) Fisheye - Ploar // -// // -/////////////////////////////////////// - - -#include -#include -#include -#include -#include -#include "matrix_ops.h" -/* #include "hierarchy.h" */ -#include "delaunay.h" -#include "memory.h" -#include "arith.h" - -static double *compute_densities(v_data * graph, int n, double *x, - double *y) -{ -// compute density of every node by calculating the average edge length in a 2-D layout - int i, j, neighbor; - double sum; - double *densities = N_NEW(n, double); - - for (i = 0; i < n; i++) { - sum = 0; - for (j = 1; j < graph[i].nedges; j++) { - neighbor = graph[i].edges[j]; - sum += - sqrt((x[i] - x[neighbor]) * (x[i] - x[neighbor]) + - (y[i] - y[neighbor]) * (y[i] - y[neighbor])); - } - densities[i] = sum / graph[i].nedges; - } - return densities; -} - -static double *recompute_densities(v_data * graph, int n, double *x, - double *densities) -{ -// compute density of every node by calculating the average edge length in a 1-D layout - int i, j, neighbor; - double sum; - densities = RALLOC(n, densities, double); - - for (i = 0; i < n; i++) { - sum = 0; - for (j = 1; j < graph[i].nedges; j++) { - neighbor = graph[i].edges[j]; - sum += fabs(x[i] - x[neighbor]); - } - densities[i] = sum / graph[i].nedges; - } - return densities; -} - -static double *smooth_vec(double *vec, int *ordering, int n, int interval, - double *smoothed_vec) -{ -// smooth 'vec' by setting each components to the average of is 'interval'-neighborhood in 'ordering' - int len, i, n1; - double sum; - smoothed_vec = RALLOC(n, smoothed_vec, double); - n1 = MIN(1 + interval, n); - sum = 0; - for (i = 0; i < n1; i++) { - sum += vec[ordering[i]]; - } - - len = n1; - for (i = 0; i < MIN(n, interval); i++) { - smoothed_vec[ordering[i]] = sum / len; - if (len < n) { - sum += vec[ordering[len++]]; - } - } - if (n <= interval) { - return smoothed_vec; - } - - for (i = interval; i < n - interval - 1; i++) { - smoothed_vec[ordering[i]] = sum / len; - sum += - vec[ordering[i + interval + 1]] - vec[ordering[i - interval]]; - } - for (i = MAX(n - interval - 1, interval); i < n; i++) { - smoothed_vec[ordering[i]] = sum / len; - sum -= vec[ordering[i - interval]]; - len--; - } - return smoothed_vec; -} - -/* quicksort_place: - * Available in lib/neatogen. - */ -static int -split_by_place(double *place, int *nodes, int first, int last) -{ - int middle; - unsigned int splitter=((unsigned int)rand()|((unsigned int)rand())<<16)%(unsigned int)(last-first+1)+(unsigned int)first; - int val; - double place_val; - int left = first + 1; - int right = last; - int temp; - - val = nodes[splitter]; - nodes[splitter] = nodes[first]; - nodes[first] = val; - place_val = place[val]; - - while (left < right) { - while (left < right && place[nodes[left]] <= place_val) - left++; - /* use here ">" and not ">=" to enable robustness - * by ensuring that ALL equal values move to the same side - */ - while (left < right && place[nodes[right]] > place_val) - right--; - if (left < right) { - temp = nodes[left]; - nodes[left] = nodes[right]; - nodes[right] = temp; - left++; - right--; /* (1) */ - - } - } - /* at this point either, left==right (meeting), or - * left=right+1 (because of (1)) - * we have to decide to which part the meeting point (or left) belongs. - * - * notice that always left>first, because of its initialization - */ - if (place[nodes[left]] > place_val) - left = left - 1; - middle = left; - nodes[first] = nodes[middle]; - nodes[middle] = val; - return middle; -} - -static int -sorted_place(double * place, int * ordering, int first, int last) -{ - int i, isSorted = 1; - for (i=first+1; i<=last && isSorted; i++) { - if (place[ordering[i-1]]>place[ordering[i]]) { - isSorted = 0; - } - } - return isSorted; -} - -void quicksort_place(double *place, int *ordering, int first, int last) -{ - if (first < last) { - int middle = split_by_place(place, ordering, first, last); - /* Checking for "already sorted" dramatically improves running time - * and robustness (against uneven recursion) when not all values are - * distinct (thefore we expect emerging chunks of equal values) - * it never increased running time even when values were distinct - */ - if (!sorted_place(place,ordering,first,middle-1)) - quicksort_place(place,ordering,first,middle-1); - if (!sorted_place(place,ordering,middle+1,last)) - quicksort_place(place,ordering,middle+1,last); - } -} - -static void -rescaleLayout(v_data * graph, int n, double *x_coords, double *y_coords, - int interval, double distortion) -{ - // Rectlinear distortion - auxilliary function - int i; - double *densities = NULL, *smoothed_densities = NULL; - double *copy_coords = N_NEW(n, double); - int *ordering = N_NEW(n, int); - double factor; - - //compute_densities(graph, n, x_coords, y_coords, densities); - - for (i = 0; i < n; i++) { - ordering[i] = i; - } - - // just to make milder behavior: - if (distortion >= 0) { - factor = sqrt(distortion); - } else { - factor = -sqrt(-distortion); - } - - quicksort_place(x_coords, ordering, 0, n - 1); - densities = recompute_densities(graph, n, x_coords, densities); - smoothed_densities = smooth_vec(densities, ordering, n, interval, smoothed_densities); - cpvec(copy_coords, 0, n - 1, x_coords); - for (i = 1; i < n; i++) { - x_coords[ordering[i]] = - x_coords[ordering[i - 1]] + (copy_coords[ordering[i]] - - copy_coords[ordering[i - 1]]) / - pow(smoothed_densities[ordering[i]], factor); - } - - quicksort_place(y_coords, ordering, 0, n - 1); - densities = recompute_densities(graph, n, y_coords, densities); - smoothed_densities = smooth_vec(densities, ordering, n, interval, smoothed_densities); - cpvec(copy_coords, 0, n - 1, y_coords); - for (i = 1; i < n; i++) { - y_coords[ordering[i]] = - y_coords[ordering[i - 1]] + (copy_coords[ordering[i]] - - copy_coords[ordering[i - 1]]) / - pow(smoothed_densities[ordering[i]], factor); - } - - free(densities); - free(smoothed_densities); - free(copy_coords); - free(ordering); -} - -void -rescale_layout(double *x_coords, double *y_coords, - int n, int interval, double width, double height, - double margin, double distortion) -{ - // Rectlinear distortion - main function - int i; - double minX, maxX, minY, maxY; - double aspect_ratio; - v_data *graph; - double scaleX; - double scale_ratio; - - width -= 2 * margin; - height -= 2 * margin; - - // compute original aspect ratio - minX = maxX = x_coords[0]; - minY = maxY = y_coords[0]; - for (i = 1; i < n; i++) { - if (x_coords[i] < minX) - minX = x_coords[i]; - if (y_coords[i] < minY) - minY = y_coords[i]; - if (x_coords[i] > maxX) - maxX = x_coords[i]; - if (y_coords[i] > maxY) - maxY = y_coords[i]; - } - aspect_ratio = (maxX - minX) / (maxY - minY); - - // construct mutual neighborhood graph - graph = UG_graph(x_coords, y_coords, n, 0); - rescaleLayout(graph, n, x_coords, y_coords, interval, distortion); - free(graph[0].edges); - free(graph); - - // compute new aspect ratio - minX = maxX = x_coords[0]; - minY = maxY = y_coords[0]; - for (i = 1; i < n; i++) { - if (x_coords[i] < minX) - minX = x_coords[i]; - if (y_coords[i] < minY) - minY = y_coords[i]; - if (x_coords[i] > maxX) - maxX = x_coords[i]; - if (y_coords[i] > maxY) - maxY = y_coords[i]; - } - - // shift points: - for (i = 0; i < n; i++) { - x_coords[i] -= minX; - y_coords[i] -= minY; - } - - // rescale x_coords to maintain aspect ratio: - scaleX = aspect_ratio * (maxY - minY) / (maxX - minX); - for (i = 0; i < n; i++) { - x_coords[i] *= scaleX; - } - - // scale the layout to fit full drawing area: - scale_ratio = - MIN((width) / (aspect_ratio * (maxY - minY)), - (height) / (maxY - minY)); - for (i = 0; i < n; i++) { - x_coords[i] *= scale_ratio; - y_coords[i] *= scale_ratio; - } - - for (i = 0; i < n; i++) { - x_coords[i] += margin; - y_coords[i] += margin; - } -} - -#define DIST(x1,y1,x2,y2) (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))) - -static void -rescale_layout_polarFocus(v_data * graph, int n, - double *x_coords, double *y_coords, - double x_focus, double y_focus, int interval, double distortion) -{ - // Polar distortion - auxilliary function - int i; - double *densities = NULL, *smoothed_densities = NULL; - double *distances = N_NEW(n, double); - double *orig_distances = N_NEW(n, double); - int *ordering; - double ratio; - - for (i = 0; i < n; i++) - { - distances[i] = DIST(x_coords[i], y_coords[i], x_focus, y_focus); - } - cpvec(orig_distances, 0, n - 1, distances); - - ordering = N_NEW(n, int); - for (i = 0; i < n; i++) - { - ordering[i] = i; - } - quicksort_place(distances, ordering, 0, n - 1); - - densities = compute_densities(graph, n, x_coords, y_coords); - smoothed_densities = smooth_vec(densities, ordering, n, interval, smoothed_densities); - - // rescale distances - if (distortion < 1.01 && distortion > 0.99) - { - for (i = 1; i < n; i++) - { - distances[ordering[i]] = distances[ordering[i - 1]] + (orig_distances[ordering[i]] - - orig_distances[ordering - [i - - 1]]) / smoothed_densities[ordering[i]]; - } - } else - { - double factor; - // just to make milder behavior: - if (distortion >= 0) - { - factor = sqrt(distortion); - } - else - { - factor = -sqrt(-distortion); - } - for (i = 1; i < n; i++) - { - distances[ordering[i]] = - distances[ordering[i - 1]] + (orig_distances[ordering[i]] - - orig_distances[ordering - [i - - 1]]) / - pow(smoothed_densities[ordering[i]], factor); - } - } - - // compute new coordinate: - for (i = 0; i < n; i++) - { - if (orig_distances[i] == 0) - { - ratio = 0; - } - else - { - ratio = distances[i] / orig_distances[i]; - } - x_coords[i] = x_focus + (x_coords[i] - x_focus) * ratio; - y_coords[i] = y_focus + (y_coords[i] - y_focus) * ratio; - } - - free(densities); - free(smoothed_densities); - free(distances); - free(orig_distances); - free(ordering); -} - -void -rescale_layout_polar(double *x_coords, double *y_coords, - double *x_foci, double *y_foci, int num_foci, - int n, int interval, double width, - double height, double margin, double distortion) -{ - // Polar distortion - main function - int i; - double minX, maxX, minY, maxY; - double aspect_ratio; - v_data *graph; - double scaleX; - double scale_ratio; - - width -= 2 * margin; - height -= 2 * margin; - - // compute original aspect ratio - minX = maxX = x_coords[0]; - minY = maxY = y_coords[0]; - for (i = 1; i < n; i++) - { - if (x_coords[i] < minX) - minX = x_coords[i]; - if (y_coords[i] < minY) - minY = y_coords[i]; - if (x_coords[i] > maxX) - maxX = x_coords[i]; - if (y_coords[i] > maxY) - maxY = y_coords[i]; - } - aspect_ratio = (maxX - minX) / (maxY - minY); - - // construct mutual neighborhood graph - graph = UG_graph(x_coords, y_coords, n, 0); - - if (num_foci == 1) - { // accelerate execution of most common case - rescale_layout_polarFocus(graph, n, x_coords, y_coords, x_foci[0], - y_foci[0], interval, distortion); - } else - { - // average-based rescale - double *final_x_coords = N_NEW(n, double); - double *final_y_coords = N_NEW(n, double); - double *cp_x_coords = N_NEW(n, double); - double *cp_y_coords = N_NEW(n, double); - for (i = 0; i < n; i++) { - final_x_coords[i] = final_y_coords[i] = 0; - } - for (i = 0; i < num_foci; i++) { - cpvec(cp_x_coords, 0, n - 1, x_coords); - cpvec(cp_y_coords, 0, n - 1, y_coords); - rescale_layout_polarFocus(graph, n, cp_x_coords, cp_y_coords, - x_foci[i], y_foci[i], interval, distortion); - scadd(final_x_coords, 0, n - 1, 1.0 / num_foci, cp_x_coords); - scadd(final_y_coords, 0, n - 1, 1.0 / num_foci, cp_y_coords); - } - cpvec(x_coords, 0, n - 1, final_x_coords); - cpvec(y_coords, 0, n - 1, final_y_coords); - free(final_x_coords); - free(final_y_coords); - free(cp_x_coords); - free(cp_y_coords); - } - free(graph[0].edges); - free(graph); - - minX = maxX = x_coords[0]; - minY = maxY = y_coords[0]; - for (i = 1; i < n; i++) { - if (x_coords[i] < minX) - minX = x_coords[i]; - if (y_coords[i] < minY) - minY = y_coords[i]; - if (x_coords[i] > maxX) - maxX = x_coords[i]; - if (y_coords[i] > maxY) - maxY = y_coords[i]; - } - - // shift points: - for (i = 0; i < n; i++) { - x_coords[i] -= minX; - y_coords[i] -= minY; - } - - // rescale x_coords to maintain aspect ratio: - scaleX = aspect_ratio * (maxY - minY) / (maxX - minX); - for (i = 0; i < n; i++) { - x_coords[i] *= scaleX; - } - - - // scale the layout to fit full drawing area: - scale_ratio = - MIN((width) / (aspect_ratio * (maxY - minY)), - (height) / (maxY - minY)); - for (i = 0; i < n; i++) { - x_coords[i] *= scale_ratio; - y_coords[i] *= scale_ratio; - } - - for (i = 0; i < n; i++) { - x_coords[i] += margin; - y_coords[i] += margin; - } -} diff --git a/internal/ccall/twopigen.c b/internal/ccall/twopigen.c deleted file mode 100644 index 0c812d2..0000000 --- a/internal/ccall/twopigen.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "twopigen/twopiinit.c" -#include "twopigen/circle.c" diff --git a/internal/ccall/twopigen/circle.c b/internal/ccall/twopigen/circle.c deleted file mode 100644 index 9117908..0000000 --- a/internal/ccall/twopigen/circle.c +++ /dev/null @@ -1,443 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "circle.h" -#include -#include -#define DEF_RANKSEP 1.00 -#define UNSET 10.00 - -/* dfs to set distance from a particular leaf. - * Note that termination is implicit in the test - * for reduced number of steps. Proof? - */ -static void setNStepsToLeaf(Agraph_t * g, Agnode_t * n, Agnode_t * prev) -{ - Agnode_t *next; - Agedge_t *ep; - - int nsteps = SLEAF(n) + 1; - - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if ((next = agtail(ep)) == n) - next = aghead(ep); - - if (prev == next) - continue; - - if (nsteps < SLEAF(next)) { /* handles loops and multiedges */ - SLEAF(next) = nsteps; - setNStepsToLeaf(g, next, n); - } - } -} - -/* isLeaf: - * Return true if n is a leaf node. - */ -static int isLeaf(Agraph_t * g, Agnode_t * n) -{ - Agedge_t *ep; - Agnode_t *neighp = 0; - Agnode_t *np; - - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if ((np = agtail(ep)) == n) - np = aghead(ep); - if (n == np) - continue; /* loop */ - if (neighp) { - if (neighp != np) - return 0; /* two different neighbors */ - } else - neighp = np; - } - return 1; -} - -static void initLayout(Agraph_t * g) -{ - Agnode_t *n; - int nnodes = agnnodes(g); - int INF = nnodes * nnodes; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - /* STSIZE(n) = 0; */ - /* NCHILD(n) = 0; */ - SCENTER(n) = INF; - THETA(n) = UNSET; /* marks theta as unset, since 0 <= theta <= 2PI */ - if (isLeaf(g, n)) - SLEAF(n) = 0; - else - SLEAF(n) = INF; - } -} - -/* - * Working recursively in from each leaf node (ie, each node - * with nStepsToLeaf == 0; see initLayout), set the - * minimum value of nStepsToLeaf for each node. Using - * that information, assign some node to be the centerNode. -*/ -static Agnode_t *findCenterNode(Agraph_t * g) -{ - Agnode_t *n; - Agnode_t *center = NULL; - int maxNStepsToLeaf = 0; - - /* With just 1 or 2 nodes, return anything. */ - if (agnnodes(g) <= 2) - return (agfstnode(g)); - - /* dfs from each leaf node */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (SLEAF(n) == 0) - setNStepsToLeaf(g, n, 0); - } - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (SLEAF(n) > maxNStepsToLeaf) { - maxNStepsToLeaf = SLEAF(n); - center = n; - } - } - return center; -} - -#if 0 -/* dfs to set distance from center - * Note that termination is implicit in the test - * for reduced number of steps. Proof? - */ -static void setNStepsToCenter(Agraph_t * g, Agnode_t * n, Agnode_t * prev) -{ - Agnode_t *next; - Agedge_t *ep; - int nsteps = SCENTER(n) + 1; - - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if ((next = agtail(ep)) == n) - next = aghead(ep); - - if (prev == next) - continue; - - if (nsteps < SCENTER(next)) { /* handles loops and multiedges */ - SCENTER(next) = nsteps; - if (SPARENT(next)) - NCHILD(SPARENT(next))--; - SPARENT(next) = n; - NCHILD(n)++; - setNStepsToCenter(g, next, n); - } - } -} -#endif - -typedef struct item_s { - void* p; - struct item_s* s; -} item_t; -typedef struct { - item_t* head; - item_t* tail; -} queue; -static void push(queue* q, void* p) -{ - item_t* ip = NEW(item_t); - ip->p = p; - if (q->tail) { /* non-empty q */ - q->tail->s = ip; - q->tail = ip; - } - else - q->tail = q->head = ip; -} -static void* pull(queue* q) -{ - item_t* ip; - void* p; - if ((ip = q->head)) { - p = ip->p; - q->head = ip->s; - free (ip); - if (!q->head) - q->tail = NULL; - return p; - } - else - return NULL; -} - -/* bfs to create tree structure */ -static void setNStepsToCenter(Agraph_t * g, Agnode_t * n) -{ - Agnode_t *next; - Agedge_t *ep; - Agsym_t* wt = agfindedgeattr(g,"weight"); - queue qd; - queue* q = &qd; - - qd.head = qd.tail = NULL; - push(q,n); - while ((n = (Agnode_t*)pull(q))) { - int nsteps = SCENTER(n) + 1; - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if (wt && streq(ag_xget(ep,wt),"0")) continue; - if ((next = agtail(ep)) == n) - next = aghead(ep); - if (nsteps < SCENTER(next)) { - SCENTER(next) = nsteps; - SPARENT(next) = n; - NCHILD(n)++; - push (q, next); - } - } - } -} - -/* - * Work out from the center and determine the value of - * nStepsToCenter and parent node for each node. - * Return -1 if some node was not reached. - */ -static int setParentNodes(Agraph_t * sg, Agnode_t * center) -{ - Agnode_t *n; - int maxn = 0; - int unset = SCENTER(center); - - SCENTER(center) = 0; - SPARENT(center) = 0; - setNStepsToCenter(sg, center); - - /* find the maximum number of steps from the center */ - for (n = agfstnode(sg); n; n = agnxtnode(sg, n)) { - if (SCENTER(n) == unset) { - return -1; - } - else if (SCENTER(n) > maxn) { - maxn = SCENTER(n); - } - } - return maxn; -} - -/* Sets each node's subtreeSize, which counts the number of - * leaves in subtree rooted at the node. - * At present, this is done bottom-up. - */ -static void setSubtreeSize(Agraph_t * g) -{ - Agnode_t *n; - Agnode_t *parent; - - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (NCHILD(n) > 0) - continue; - STSIZE(n)++; - parent = SPARENT(n); - while (parent) { - STSIZE(parent)++; - parent = SPARENT(parent); - } - } -} - -static void setChildSubtreeSpans(Agraph_t * g, Agnode_t * n) -{ - Agedge_t *ep; - Agnode_t *next; - double ratio; - - ratio = SPAN(n) / STSIZE(n); - for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) { - if ((next = agtail(ep)) == n) - next = aghead(ep); - if (SPARENT(next) != n) - continue; /* handles loops */ - - if (SPAN(next) != 0.0) - continue; /* multiedges */ - (SPAN(next) = ratio * STSIZE(next)); - - if (NCHILD(next) > 0) { - setChildSubtreeSpans(g, next); - } - } -} - -static void setSubtreeSpans(Agraph_t * sg, Agnode_t * center) -{ - SPAN(center) = 2 * M_PI; - setChildSubtreeSpans(sg, center); -} - - /* Set the node positions for the 2nd and later rings. */ -static void setChildPositions(Agraph_t * sg, Agnode_t * n) -{ - Agnode_t *next; - Agedge_t *ep; - double theta; /* theta is the lower boundary radius of the fan */ - - if (SPARENT(n) == 0) /* center */ - theta = 0; - else - theta = THETA(n) - SPAN(n) / 2; - - for (ep = agfstedge(sg, n); ep; ep = agnxtedge(sg, ep, n)) { - if ((next = agtail(ep)) == n) - next = aghead(ep); - if (SPARENT(next) != n) - continue; /* handles loops */ - if (THETA(next) != UNSET) - continue; /* handles multiedges */ - - THETA(next) = theta + SPAN(next) / 2.0; - theta += SPAN(next); - - if (NCHILD(next) > 0) - setChildPositions(sg, next); - } -} - -static void setPositions(Agraph_t * sg, Agnode_t * center) -{ - THETA(center) = 0; - setChildPositions(sg, center); -} - -/* getRankseps: - * Return array of doubles of size maxrank+1 containing the radius of each - * rank. Position 0 always contains 0. Use the colon-separated list of - * doubles provided by ranksep to get the deltas for each additional rank. - * If not enough values are provided, the last value is repeated. - * If the ranksep attribute is not provided, use DEF_RANKSEP for all values. - */ -static double* -getRankseps (Agraph_t* g, int maxrank) -{ - char *p; - char *endp; - char c; - int i, rk = 1; - double* ranks = N_NEW(maxrank+1, double); - double xf = 0.0, delx = 0.0, d; - - if ((p = late_string(g, agfindgraphattr(g->root, "ranksep"), NULL))) { - while ((rk <= maxrank) && ((d = strtod (p, &endp)) > 0)) { - delx = MAX(d, MIN_RANKSEP); - xf += delx; - ranks[rk++] = xf; - p = endp; - while ((c = *p) && (isspace(c) || (c == ':'))) - p++; - } - } - else { - delx = DEF_RANKSEP; - } - - for (i = rk; i <= maxrank; i++) { - xf += delx; - ranks[i] = xf; - } - - return ranks; -} - -static void setAbsolutePos(Agraph_t * g, int maxrank) -{ - Agnode_t *n; - double hyp; - double* ranksep; - int i; - - ranksep = getRankseps (g, maxrank); - if (Verbose) { - fputs ("Rank separation = ", stderr); - for (i = 0; i <= maxrank; i++) - fprintf (stderr, "%.03lf ", ranksep[i]); - fputs ("\n", stderr); - } - - /* Convert circular to cartesian coordinates */ - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - hyp = ranksep[SCENTER(n)]; - ND_pos(n)[0] = hyp * cos(THETA(n)); - ND_pos(n)[1] = hyp * sin(THETA(n)); - } - free (ranksep); -} - -#if 0 /* not used */ -static void dumpGraph(Agraph_t * g) -{ - Agnode_t *n; - char *p; - - fprintf(stderr, - " : leaf stsz nkids cntr parent span theta\n"); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - if (SPARENT(n)) - p = SPARENT(n)->name; - else - p = ""; - fprintf(stderr, "%4s :%6d%6d%6d%6d%7s%7.3f%7.3f%8.3f%8.3f\n", - n->name, SLEAF(n), STSIZE(n), NCHILD(n), - SCENTER(n), p, SPAN(n), THETA(n), ND_pos(n)[0], - ND_pos(n)[1]); - } -} -#endif - -/* circleLayout: - * We assume sg is is connected and non-empty. - * Also, if center != 0, we are guaranteed that center is - * in the graph. - */ -Agnode_t* circleLayout(Agraph_t * sg, Agnode_t * center) -{ - int maxNStepsToCenter; - - if (agnnodes(sg) == 1) { - Agnode_t *n = agfstnode(sg); - ND_pos(n)[0] = 0; - ND_pos(n)[1] = 0; - return center; - } - - initLayout(sg); - - if (!center) - center = findCenterNode(sg); - - maxNStepsToCenter = setParentNodes(sg,center); - if (Verbose) - fprintf(stderr, "root = %s max steps to root = %d\n", agnameof(center), maxNStepsToCenter); - if (maxNStepsToCenter < 0) { - agerr(AGERR, "twopi: use of weight=0 creates disconnected component.\n"); - return center; - } - - setSubtreeSize(sg); - - setSubtreeSpans(sg, center); - - setPositions(sg, center); - - setAbsolutePos(sg, maxNStepsToCenter); - /* dumpGraph (sg); */ - return center; -} diff --git a/internal/ccall/twopigen/circle.h b/internal/ccall/twopigen/circle.h deleted file mode 100644 index 870b322..0000000 --- a/internal/ccall/twopigen/circle.h +++ /dev/null @@ -1,50 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef CIRCLE_H -#define CIRCLE_H - -#include "render.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct { - uint64_t nStepsToLeaf; - uint64_t subtreeSize; - uint64_t nChildren; - uint64_t nStepsToCenter; - node_t *parent; - double span; - double theta; - } rdata; - -#define RDATA(n) ((rdata*)(ND_alg(n))) -#define SLEAF(n) (RDATA(n)->nStepsToLeaf) -#define STSIZE(n) (RDATA(n)->subtreeSize) -#define NCHILD(n) (RDATA(n)->nChildren) -#define SCENTER(n) (RDATA(n)->nStepsToCenter) -#define SPARENT(n) (RDATA(n)->parent) -#define SPAN(n) (RDATA(n)->span) -#define THETA(n) (RDATA(n)->theta) - - extern Agnode_t* circleLayout(Agraph_t * sg, Agnode_t * center); - extern void twopi_layout(Agraph_t * g); - extern void twopi_cleanup(Agraph_t * g); - extern void twopi_init_graph(graph_t * g); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/ccall/twopigen/dummy.go b/internal/ccall/twopigen/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/twopigen/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/twopigen/twopiinit.c b/internal/ccall/twopigen/twopiinit.c deleted file mode 100644 index 341d140..0000000 --- a/internal/ccall/twopigen/twopiinit.c +++ /dev/null @@ -1,200 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -/* - * Written by Emden R. Gansner - * Derived from Graham Wills' algorithm described in GD'97. - */ - -#include "circle.h" -#include "adjust.h" -#include "pack.h" -#include "neatoprocs.h" - -static void twopi_init_edge(edge_t * e) -{ - agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE); //edge custom data - common_init_edge(e); - ED_factor(e) = late_double(e, E_weight, 1.0, 0.0); -} - -static void twopi_init_node_edge(graph_t * g) -{ - node_t *n; - edge_t *e; - int i = 0; - int n_nodes = agnnodes(g); - rdata* alg; - - alg = N_NEW(n_nodes, rdata); - GD_neato_nlist(g) = N_NEW(n_nodes + 1, node_t *); - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - neato_init_node(n); - ND_alg(n) = alg + i; - GD_neato_nlist(g)[i++] = n; - } - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - twopi_init_edge(e); - } - } -} - -void twopi_init_graph(graph_t * g) -{ - setEdgeType (g, ET_LINE); - /* GD_ndim(g) = late_int(g,agfindgraphattr(g,"dim"),2,2); */ - Ndim = GD_ndim(g)=2; /* The algorithm only makes sense in 2D */ - twopi_init_node_edge(g); -} - -static Agnode_t* findRootNode (Agraph_t* sg, Agsym_t* rootattr) -{ - Agnode_t* n; - - for (n = agfstnode(sg); n; n = agnxtnode(sg,n)) { - if (mapbool(agxget(n,rootattr))) return n; - } - return NULL; - -} - -/* twopi_layout: - */ -void twopi_layout(Agraph_t * g) -{ - Agnode_t *ctr = 0; - char *s; - int setRoot = 0; - int setLocalRoot = 0; - pointf sc; - int doScale = 0; - int r; - Agsym_t* rootattr; - - if (agnnodes(g) == 0) return; - - twopi_init_graph(g); - if ((s = agget(g, "root"))) { - if (*s) { - ctr = agfindnode(g, s); - if (!ctr) { - agerr(AGWARN, "specified root node \"%s\" was not found.", s); - agerr(AGPREV, "Using default calculation for root node\n"); - setRoot = 1; - } - } - else { - setRoot = 1; - } - } - if ((rootattr = agattr(g, AGNODE, "root", 0))) { - setLocalRoot = 1; - } - - if ((s = agget(g, "scale")) && *s) { - if ((r = sscanf (s, "%lf,%lf",&sc.x,&sc.y))) { - if (r == 1) sc.y = sc.x; - doScale = 1; - } - } - - if (agnnodes(g)) { - Agraph_t **ccs; - Agraph_t *sg; - Agnode_t *c = NULL; - Agnode_t *n; - int ncc; - int i; - Agnode_t* lctr; - - ccs = ccomps(g, &ncc, 0); - if (ncc == 1) { - if (ctr) - lctr = ctr; - else if (!rootattr || !(lctr = findRootNode(g, rootattr))) - lctr = 0; - c = circleLayout(g, lctr); - if (setRoot && !ctr) - ctr = c; - if (setLocalRoot && !lctr) - agxset (c, rootattr, "1"); - n = agfstnode(g); - free(ND_alg(n)); - ND_alg(n) = NULL; - adjustNodes(g); - spline_edges(g); - } else { - pack_info pinfo; - getPackInfo (g, l_node, CL_OFFSET, &pinfo); - pinfo.doSplines = 0; - - for (i = 0; i < ncc; i++) { - sg = ccs[i]; - if (ctr && agcontains(sg, ctr)) - lctr = ctr; - else if (!rootattr || !(lctr = findRootNode(sg, rootattr))) - lctr = 0; - nodeInduce(sg); - c = circleLayout(sg, lctr); - if (setRoot && !ctr) - ctr = c; - if (setLocalRoot && (!lctr || (lctr == ctr))) - agxset (c, rootattr, "1"); - adjustNodes(sg); - } - n = agfstnode(g); - free(ND_alg(n)); - ND_alg(n) = NULL; - packSubgraphs(ncc, ccs, g, &pinfo); - spline_edges(g); - } - for (i = 0; i < ncc; i++) { - agdelete(g, ccs[i]); - } - free(ccs); - } - if (setRoot) - agset (g, "root", agnameof (ctr)); - dotneato_postprocess(g); - -} - -static void twopi_cleanup_graph(graph_t * g) -{ - free(GD_neato_nlist(g)); - if (g != agroot(g)) - agclean(g,AGRAPH,"Agraphinfo_t"); -} - -/* twopi_cleanup: - * The ND_alg data used by twopi is freed in twopi_layout - * before edge routing as edge routing may use this field. - */ -void twopi_cleanup(graph_t * g) -{ - node_t *n; - edge_t *e; - - n = agfstnode (g); - if (!n) return; /* empty graph */ - /* free (ND_alg(n)); */ - for (; n; n = agnxtnode(g, n)) { - for (e = agfstout(g, n); e; e = agnxtout(g, e)) { - gv_cleanup_edge(e); - } - gv_cleanup_node(n); - } - twopi_cleanup_graph(g); -} diff --git a/internal/ccall/vmalloc/README b/internal/ccall/vmalloc/README deleted file mode 100644 index ba62010..0000000 --- a/internal/ccall/vmalloc/README +++ /dev/null @@ -1,24 +0,0 @@ -DIRECTORY HIERARCHY: -This directory hierarchy contains the source of the Vmalloc library. - -. : source code for Vmalloc functions -./features: source code for generating configuration parameters. -./Vmalloc_t: a set of regression tests - executable with "runtest" - -SOFTWARE CONSTRUCTION: - -There are two make files, Makefile for Glenn Fowler's nmake and -makefile for old make. The build procedure is based on the -iffe language for automatic configuration. An iffe interpreter -and its manual pages are included in this code distribution. -See the files in ./features for examples of iffe probes to generate -configuration parameters. - -CORRESPONDENCE: -Comments, etc. should be sent to: - - Phong Vo - AT&T Labs - Research - 180 Park Avenue - Florham Park, NJ 07932 - e-mail: kpv@research.att.com diff --git a/internal/ccall/vmalloc/dummy.go b/internal/ccall/vmalloc/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/vmalloc/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/vmalloc/malloc.c b/internal/ccall/vmalloc/malloc.c deleted file mode 100644 index d50ff97..0000000 --- a/internal/ccall/vmalloc/malloc.c +++ /dev/null @@ -1,351 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -#if _std_malloc || _BLD_INSTRUMENT_ || cray -int _STUB_malloc; -#else - -/* malloc compatibility functions. -** These are aware of debugging/profiling and driven by the environment variables: -** VMETHOD: select an allocation method by name. -** -** VMPROFILE: if is a file name, write profile data to it. -** VMTRACE: if is a file name, write trace data to it. -** The pattern %p in a file name will be replaced by the process ID. -** -** VMDEBUG: -** a: abort on any warning -** [decimal]: period to check arena. -** 0x[hexadecimal]: address to watch. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -#if _hdr_stat -#include -#else -#if _sys_stat -#include -#endif -#endif - -#if defined(S_IRUSR)&&defined(S_IWUSR)&&defined(S_IRGRP)&&defined(S_IROTH) -#define CREAT_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) -#else -#define CREAT_MODE 0644 -#endif - -#undef malloc -#undef free -#undef realloc -#undef calloc -#undef cfree -#undef memalign -#undef valloc - -static Vmulong_t atou(char **sp) -{ - char *s = *sp; - Vmulong_t v = 0; - - if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) { - for (s += 2; *s; ++s) { - if (*s >= '0' && *s <= '9') - v = (v << 4) + (*s - '0'); - else if (*s >= 'a' && *s <= 'f') - v = (v << 4) + (*s - 'a') + 10; - else if (*s >= 'A' && *s <= 'F') - v = (v << 4) + (*s - 'A') + 10; - else - break; - } - } else { - for (; *s; ++s) { - if (*s >= '0' && *s <= '9') - v = v * 10 + (*s - '0'); - else - break; - } - } - - *sp = s; - return v; -} - -static int _Vmflinit = 0; -static Vmulong_t _Vmdbcheck = 0; -static Vmulong_t _Vmdbtime = 0; -static int _Vmpffd = -1; -#define VMFLINIT() \ - { if(!_Vmflinit) vmflinit(); \ - if(_Vmdbcheck && (++_Vmdbtime % _Vmdbcheck) == 0 && \ - Vmregion->meth.meth == VM_MTDEBUG) \ - vmdbcheck(Vmregion); \ - } - -static char *insertpid(char *begs, char *ends) -{ - int pid; - char *s; - - if ((pid = getpid()) < 0) - return NIL(char *); - - s = ends; - do { - if (s == begs) - return NIL(char *); - *--s = '0' + pid % 10; - } while ((pid /= 10) > 0); - while (s < ends) - *begs++ = *s++; - - return begs; -} - -static int createfile(char *file) -{ - char buf[1024]; - char *next, *endb; - - next = buf; - endb = buf + sizeof(buf); - while (*file) { - if (*file == '%') { - switch (file[1]) { - case 'p': - if (!(next = insertpid(next, endb))) - return -1; - file += 2; - break; - default: - goto copy; - } - } else { - copy: - *next++ = *file++; - } - - if (next >= endb) - return -1; - } - - *next = '\0'; - return creat(buf, CREAT_MODE); -} - -static void pfprint(void) -{ - if (Vmregion->meth.meth == VM_MTPROFILE) - vmprofile(Vmregion, _Vmpffd); -} - -static int vmflinit(void) -{ - char *env; - Vmalloc_t *vm; - int fd; - Vmulong_t addr; - char *file; - int line; - - /* this must be done now to avoid any inadvertent recursion (more below) */ - _Vmflinit = 1; - VMFILELINE(Vmregion, file, line); - - /* if getenv() calls malloc(), this may not be caught by the eventual region */ - vm = NIL(Vmalloc_t *); - if ((env = getenv("VMETHOD"))) { - if (strcmp(env, "Vmdebug") == 0 || strcmp(env, "vmdebug") == 0) - vm = vmopen(Vmdcsbrk, Vmdebug, 0); - else if (strcmp(env, "Vmprofile") == 0 - || strcmp(env, "vmprofile") == 0) - vm = vmopen(Vmdcsbrk, Vmprofile, 0); - else if (strcmp(env, "Vmlast") == 0 || strcmp(env, "vmlast") == 0) - vm = vmopen(Vmdcsbrk, Vmlast, 0); - else if (strcmp(env, "Vmpool") == 0 || strcmp(env, "vmpool") == 0) - vm = vmopen(Vmdcsbrk, Vmpool, 0); - else if (strcmp(env, "Vmbest") == 0 || strcmp(env, "vmbest") == 0) - vm = Vmheap; - } - - if ((!vm || vm->meth.meth == VM_MTDEBUG) && - (env = getenv("VMDEBUG")) && env[0]) { - if (vm || (vm = vmopen(Vmdcsbrk, Vmdebug, 0))) { - reg int setcheck = 0; - - while (*env) { - if (*env == 'a') - vmset(vm, VM_DBABORT, 1); - - if (*env < '0' || *env > '9') - env += 1; - else if (env[0] == '0' && (env[1] == 'x' || env[1] == 'X')) { - if ((addr = atou(&env)) != 0) - vmdbwatch((void *) addr); - } else { - _Vmdbcheck = atou(&env); - setcheck = 1; - } - } - if (!setcheck) - _Vmdbcheck = 1; - } - } - - if ((!vm || vm->meth.meth == VM_MTPROFILE) && - (env = getenv("VMPROFILE")) && env[0]) { - _Vmpffd = createfile(env); - if (!vm) - vm = vmopen(Vmdcsbrk, Vmprofile, 0); - } - - /* slip in the new region now so that malloc() will work fine */ - if (vm) - Vmregion = vm; - - /* turn on tracing if requested */ - if ((env = getenv("VMTRACE")) && env[0] && (fd = createfile(env)) >= 0) { - vmset(Vmregion, VM_TRACE, 1); - vmtrace(fd); - } - - /* make sure that profile data is output upon exiting */ - if (vm && vm->meth.meth == VM_MTPROFILE) { - if (_Vmpffd < 0) - _Vmpffd = 2; - /* this may wind up calling malloc(), but region is ok now */ - atexit(pfprint); - } else if (_Vmpffd >= 0) { - close(_Vmpffd); - _Vmpffd = -1; - } - - /* reset file and line number to correct values for the call */ - Vmregion->file = file; - Vmregion->line = line; - - return 0; -} - -void *malloc(reg size_t size) -{ - VMFLINIT(); - return (*Vmregion->meth.allocf) (Vmregion, size); -} - -/** - * @param data block to be reallocated - * @param size new size - */ -void *realloc(reg void * data, reg size_t size) -{ - VMFLINIT(); - return (*Vmregion->meth.resizef) (Vmregion, data, size, - VM_RSCOPY | VM_RSMOVE); -} - -void free(reg void * data) -{ - VMFLINIT(); - (void) (*Vmregion->meth.freef) (Vmregion, data); -} - -void *calloc(reg size_t n_obj, reg size_t s_obj) -{ - VMFLINIT(); - return (*Vmregion->meth.resizef) (Vmregion, NIL(void *), - n_obj * s_obj, VM_RSZERO); -} - -void cfree(reg void * data) -{ - VMFLINIT(); - (void) (*Vmregion->meth.freef) (Vmregion, data); -} - -void *memalign(reg size_t align, reg size_t size) -{ - VMFLINIT(); - return (*Vmregion->meth.alignf) (Vmregion, size, align); -} - -void *valloc(reg size_t size) -{ - VMFLINIT(); - GETPAGESIZE(_Vmpagesize); - return (*Vmregion->meth.alignf) (Vmregion, size, _Vmpagesize); -} - -#if _hdr_malloc - -#define calloc ______calloc -#define free ______free -#define malloc ______malloc -#define realloc ______realloc - -#include - -/* in Windows, this is a macro defined in malloc.h and not a function */ -#undef alloca - -#if _lib_mallopt -int mallopt(int cmd, int value) -{ - VMFLINIT(); - return 0; -} -#endif - -#if _lib_mallinfo -struct mallinfo mallinfo(void) -{ - Vmstat_t sb; - struct mallinfo mi; - - VMFLINIT(); - memset(&mi, 0, sizeof(mi)); - if (vmstat(Vmregion, &sb) >= 0) { - mi.arena = sb.extent; - mi.ordblks = sb.n_busy + sb.n_free; - mi.uordblks = sb.s_busy; - mi.fordblks = sb.s_free; - } - return mi; -} -#endif - -#if _lib_mstats -struct mstats mstats(void) -{ - Vmstat_t sb; - struct mstats ms; - - VMFLINIT(); - memset(&ms, 0, sizeof(ms)); - if (vmstat(Vmregion, &sb) >= 0) { - ms.bytes_total = sb.extent; - ms.chunks_used = sb.n_busy; - ms.bytes_used = sb.s_busy; - ms.chunks_free = sb.n_free; - ms.bytes_free = sb.s_free; - } - return ms; -} -#endif - -#endif/*_hdr_malloc*/ - -#endif /*_std_malloc || _BLD_INSTRUMENT_ || cray*/ diff --git a/internal/ccall/vmalloc/vmalloc.h b/internal/ccall/vmalloc/vmalloc.h deleted file mode 100644 index 0864da9..0000000 --- a/internal/ccall/vmalloc/vmalloc.h +++ /dev/null @@ -1,221 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _VMALLOC_H -#define _VMALLOC_H 1 - -/* Public header file for the virtual malloc package. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -#define VMALLOC_VERSION 19990805L - -#include "config.h" - -#ifdef HAVE_SYS_TYPES_H -# include -#endif // HAVE_SYS_TYPES_H - - typedef struct _vmalloc_s Vmalloc_t; - typedef struct _vmstat_s Vmstat_t; - typedef struct _vmdisc_s Vmdisc_t; - typedef struct _vmethod_s Vmethod_t; - typedef void *(*Vmemory_f) - (Vmalloc_t *, void *, size_t, size_t, Vmdisc_t *); - typedef int (*Vmexcept_f) - (Vmalloc_t *, int, void *, Vmdisc_t *); - - struct _vmstat_s { - int n_busy; /* number of busy blocks */ - int n_free; /* number of free blocks */ - size_t s_busy; /* total amount of busy space */ - size_t s_free; /* total amount of free space */ - size_t m_busy; /* largest busy piece */ - size_t m_free; /* largest free piece */ - int n_seg; /* number of segments */ - size_t extent; /* total size of region */ - }; - - struct _vmdisc_s { - Vmemory_f memoryf; /* memory manipulator */ - Vmexcept_f exceptf; /* exception handler */ - size_t round; /* rounding requirement */ - }; - - struct _vmethod_s { - void *(*allocf) (Vmalloc_t *, size_t); - void *(*resizef) (Vmalloc_t *, void *, size_t, int); - int (*freef) (Vmalloc_t *, void *); - long (*addrf) (Vmalloc_t *, void *); - long (*sizef) (Vmalloc_t *, void *); - int (*compactf) (Vmalloc_t *); - void *(*alignf) (Vmalloc_t *, size_t, size_t); - unsigned short meth; - }; - - struct _vmalloc_s { - Vmethod_t meth; /* method for allocation */ - char *file; /* file name */ - int line; /* line number */ -#ifdef _VM_PRIVATE_ - _VM_PRIVATE_ -#endif - }; - -#define VM_TRUST 0000001 /* forgo some security checks */ -#define VM_TRACE 0000002 /* generate trace */ -#define VM_DBCHECK 0000004 /* check for boundary overwrite */ -#define VM_DBABORT 0000010 /* abort on any warning */ -#define VM_FLAGS 0000017 /* user-settable flags */ - -#define VM_MTBEST 0000100 /* Vmbest method */ -#define VM_MTPOOL 0000200 /* Vmpool method */ -#define VM_MTLAST 0000400 /* Vmlast method */ -#define VM_MTDEBUG 0001000 /* Vmdebug method */ -#define VM_MTPROFILE 0002000 /* Vmdebug method */ -#define VM_METHODS 0003700 /* available allocation methods */ - -#define VM_RSCOPY 0000001 /* copy old contents */ -#define VM_RSMOVE 0000002 /* old contents is moveable */ -#define VM_RSZERO 0000004 /* clear new space */ - -/* exception types */ -#define VM_OPEN 0 /* region being opened */ -#define VM_CLOSE 1 /* region being closed */ -#define VM_NOMEM 2 /* can't obtain memory */ -#define VM_BADADDR 3 /* bad addr in vmfree/vmresize */ -#define VM_DISC 4 /* discipline being changed */ - -/* public data */ -#if _BLD_vmalloc && defined(__EXPORT__) -#define extern __EXPORT__ -#endif -#if !_BLD_vmalloc && defined(__IMPORT__) -#define extern __IMPORT__ -#endif - -/*visual studio*/ -#ifdef WIN32 -#undef extern -#ifndef VMALLOC_EXPORTS -#define extern __declspec(dllimport) -#else -#define extern __declspec(dllexport) -#endif -#endif -/*end visual studio*/ - extern Vmethod_t *Vmbest; /* best allocation */ - extern Vmethod_t *Vmlast; /* last-block allocation */ - extern Vmethod_t *Vmpool; /* pool allocation */ - extern Vmethod_t *Vmdebug; /* allocation with debugging */ - extern Vmethod_t *Vmprofile; /* profiling memory usage */ - - extern Vmdisc_t *Vmdcheap; /* heap discipline */ - extern Vmdisc_t *Vmdcsbrk; /* sbrk discipline */ - - extern Vmalloc_t *Vmheap; /* heap region */ - extern Vmalloc_t *Vmregion; /* malloc region */ - -/* public functions */ -#if _BLD_vmalloc && defined(__EXPORT__) -#define extern __EXPORT__ -#endif - extern Vmalloc_t *vmopen(Vmdisc_t *, Vmethod_t *, int); - extern int vmclose(Vmalloc_t *); - extern int vmclear(Vmalloc_t *); - extern int vmcompact(Vmalloc_t *); - - extern Vmdisc_t *vmdisc(Vmalloc_t *, Vmdisc_t *); - - extern void *vmalloc(Vmalloc_t *, size_t); - extern void *vmalign(Vmalloc_t *, size_t, size_t); - extern void *vmresize(Vmalloc_t *, void *, size_t, int); - extern int vmfree(Vmalloc_t *, void *); - - extern long vmaddr(Vmalloc_t *, void *); - extern long vmsize(Vmalloc_t *, void *); - - extern Vmalloc_t *vmregion(void *); - extern void *vmsegment(Vmalloc_t *, void *); - extern int vmset(Vmalloc_t *, int, int); - - extern void *vmdbwatch(void *); - extern int vmdbcheck(Vmalloc_t *); - - extern int vmprofile(Vmalloc_t *, int); - - extern int vmtrace(int); - extern int vmtrbusy(Vmalloc_t *); - - extern int vmstat(Vmalloc_t *, Vmstat_t *); - - extern int vmwalk(Vmalloc_t *, - int (*)(Vmalloc_t *, void *, size_t, - Vmdisc_t *)); - extern char *vmstrdup(Vmalloc_t *, const char *); - - -#undef extern - -/* to coerce any value to a Vmalloc_t*, make ANSI happy */ -#define _VM_(vm) ((Vmalloc_t*)(vm)) -/* enable recording of where a call originates from */ -#if defined(VMFL) && defined(__FILE__) && defined(__LINE__) -#define _VMFL_(vm) (_VM_(vm)->file = __FILE__, _VM_(vm)->line = __LINE__) -#define vmalloc(vm,sz) (_VMFL_(vm), \ - (*(_VM_(vm)->meth.allocf))((vm),(sz)) ) -#define vmresize(vm,d,sz,type) (_VMFL_(vm), \ - (*(_VM_(vm)->meth.resizef))\ - ((vm),(void*)(d),(sz),(type)) ) -#define vmfree(vm,d) (_VMFL_(vm), \ - (*(_VM_(vm)->meth.freef))((vm),(void*)(d)) ) -#define vmalign(vm,sz,align) (_VMFL_(vm), \ - (*(_VM_(vm)->meth.alignf))((vm),(sz),(align)) ) -#define malloc(s) (_VMFL_(Vmregion), malloc((size_t)(s)) ) -#define realloc(d,s) (_VMFL_(Vmregion), realloc((void*)(d),(size_t)(s)) ) -#define calloc(n,s) (_VMFL_(Vmregion), calloc((size_t)n, (size_t)(s)) ) -#define free(d) (_VMFL_(Vmregion), free((void*)(d)) ) -#define memalign(a,s) (_VMFL_(Vmregion), memalign((size_t)(a),(size_t)(s)) ) -#define valloc(s) (_VMFL_(Vmregion), valloc((size_t)(s) ) -#define cfree(d) free(d) -#endif /*defined(VMFL) && defined(__FILE__) && defined(__LINE__) */ -/* non-debugging/profiling allocation calls */ -#ifndef vmalloc -#define vmalloc(vm,sz) (*(_VM_(vm)->meth.allocf))((vm),(sz)) -#endif -#ifndef vmresize -#define vmresize(vm,d,sz,type) (*(_VM_(vm)->meth.resizef))\ - ((vm),(void*)(d),(sz),(type)) -#endif -#ifndef vmfree -#define vmfree(vm,d) (*(_VM_(vm)->meth.freef))((vm),(void*)(d)) -#endif -#ifndef vmalign -#define vmalign(vm,sz,align) (*(_VM_(vm)->meth.alignf))((vm),(sz),(align)) -#endif -#define vmaddr(vm,addr) (*(_VM_(vm)->meth.addrf))((vm),(void*)(addr)) -#define vmsize(vm,addr) (*(_VM_(vm)->meth.sizef))((vm),(void*)(addr)) -#define vmcompact(vm) (*(_VM_(vm)->meth.compactf))((vm)) -#define vmoldof(v,p,t,n,x) (t*)vmresize((v), (p), sizeof(t)*(n)+(x), \ - (VM_RSMOVE) ) -#define vmnewof(v,p,t,n,x) (t*)vmresize((v), (p), sizeof(t)*(n)+(x), \ - (VM_RSMOVE|VM_RSCOPY|VM_RSZERO) ) -#endif /* _VMALLOC_H */ -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/vmalloc/vmbest.c b/internal/ccall/vmalloc/vmbest.c deleted file mode 100644 index f5ab6b9..0000000 --- a/internal/ccall/vmalloc/vmbest.c +++ /dev/null @@ -1,1185 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* for VirtualAlloc and friends */ -#if defined(_WIN32) -#include -#endif - -/* Best-fit allocation method. This is based on a best-fit strategy -** using a splay tree for storage of lists of free blocks of the same -** size. Recent free blocks may be cached for fast reuse. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -#ifdef DEBUG -static int N_free; /* # of free calls */ -static int N_alloc; /* # of alloc calls */ -static int N_resize; /* # of resize calls */ -static int N_wild; /* # allocated from the wild block */ -static int N_cache; /* # allocated from cache */ -static int N_last; /* # allocated from last free block */ -static int P_junk; /* # of semi-free pieces */ -static int P_free; /* # of free pieces */ -static int P_busy; /* # of busy pieces */ -static size_t M_junk; /* max size of a junk piece */ -static size_t M_free; /* max size of a free piece */ -static size_t M_busy; /* max size of a busy piece */ -static size_t S_free; /* total free space */ -static size_t S_junk; /* total junk space */ -static int Vmcheck = 0; /* 1 if checking */ - -/* Check to see if a block is in the free tree */ -static int vmintree(Block_t * node, Block_t * b) -{ - Block_t *t; - - for (t = node; t; t = LINK(t)) - if (t == b) - return 1; - if (LEFT(node) && vmintree(LEFT(node), b)) - return 1; - if (RIGHT(node) && vmintree(RIGHT(node), b)) - return 1; - return 0; -} - -/* Check to see if a block is known to be free */ -static int vmisfree(Vmdata_t * vd, Block_t * b) -{ - Block_t *t; - size_t s; - - if (b == vd->wild) - return 1; - else if ((s = SIZE(b)) < MAXTINY) { - for (t = TINY(vd)[INDEX(s)]; t; t = LINK(t)) - if (b == t) - return 1; - } else if (vd->root && vmintree(vd->root, b)) - return 1; - - return 0; -} - -/* check to see if the tree is in good shape */ -static int vmchktree(Block_t * node) -{ - Block_t *t; - - /**/ ASSERT(!ISBUSY(SIZE(node)) && !ISJUNK(SIZE(node))); - - for (t = LINK(node); t; t = LINK(t)) { - /**/ ASSERT(SIZE(t) == SIZE(node)); - /**/ ASSERT(!ISBUSY(SIZE(t)) && !ISJUNK(SIZE(t))); - } - if ((t = LEFT(node))) { - /**/ ASSERT(SIZE(t) < SIZE(node)); - vmchktree(t); - } - if ((t = RIGHT(node))) { - /**/ ASSERT(SIZE(t) > SIZE(node)); - vmchktree(t); - } - return 1; -} - -static int vmonlist(Block_t * list, Block_t * b) -{ - for (; list; list = LINK(list)) - if (list == b) - return 1; - return 0; -} - -/** - * @param vd - * @param size if > 0, checking that no large free block >size - * @param wild if != 0, do above but allow wild to be >size - */ -static int vmcheck(Vmdata_t * vd, size_t size, int wild) -{ - reg Seg_t *seg; - reg Block_t *b, *endb, *t, *np; - reg size_t s; - - if (!Vmcheck) - return 1; - - /**/ ASSERT(size <= 0 || !vd->free); - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - P_junk = P_free = P_busy = 0; - M_junk = M_free = M_busy = S_free = 0; - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - while (b < endb) { - s = SIZE(b) & ~BITS; - np = (Block_t *) ((Vmuchar_t *) DATA(b) + s); - - if (!ISBUSY(SIZE(b))) { - /**/ ASSERT(!ISJUNK(SIZE(b))); - /**/ ASSERT(!ISPFREE(SIZE(b))); - /**/ ASSERT(TINIEST(b) || SEG(b) == seg); - /**/ ASSERT(ISBUSY(SIZE(np))); - /**/ ASSERT(ISPFREE(SIZE(np))); - /**/ ASSERT(*SELF(b) == b); - /**/ ASSERT(size <= 0 || SIZE(b) < size || - SIZE(b) < MAXTINY || (wild && b == vd->wild)); - P_free += 1; - S_free += s; - if (s > M_free) - M_free = s; - - if (s < MAXTINY) { - for (t = TINY(vd)[INDEX(s)]; t; t = LINK(t)) - if (b == t) - goto fine; - } - if (b == vd->wild) { - /**/ ASSERT(VMWILD(vd, b)); - goto fine; - } - if (vd->root && vmintree(vd->root, b)) - goto fine; - - /**/ ASSERT(0); - } else if (ISJUNK(SIZE(b))) { - /**/ ASSERT(ISBUSY(SIZE(b))); - /**/ ASSERT(!ISPFREE(SIZE(np))); - P_junk += 1; - S_junk += s; - if (s > M_junk) - M_junk = s; - - if (b == vd->free) - goto fine; - if (s < MAXCACHE) { - for (t = CACHE(vd)[INDEX(s)]; t; t = LINK(t)) - if (b == t) - goto fine; - } - for (t = CACHE(vd)[S_CACHE]; t; t = LINK(t)) - if (b == t) - goto fine; - /**/ ASSERT(0); - } else { - /**/ ASSERT(!ISPFREE(SIZE(b)) || !ISBUSY(SIZE(LAST(b)))); - /**/ ASSERT(SEG(b) == seg); - /**/ ASSERT(!ISPFREE(SIZE(np))); - P_busy += 1; - if (s > M_busy) - M_busy = s; - goto fine; - } - fine: - b = np; - } - } - - return 1; -} - -#endif /*DEBUG*/ -/* Tree rotation functions */ -#define RROTATE(x,y) (LEFT(x) = RIGHT(y), RIGHT(y) = (x), (x) = (y)) -#define LROTATE(x,y) (RIGHT(x) = LEFT(y), LEFT(y) = (x), (x) = (y)) -#define RLINK(s,x) ((s) = LEFT(s) = (x)) -#define LLINK(s,x) ((s) = RIGHT(s) = (x)) -/* Find and delete a suitable element in the free tree. */ -static Block_t *bestsearch(Vmdata_t * vd, reg size_t size, - Block_t * wanted) -{ - reg size_t s; - reg Block_t *t, *root, *l, *r; - Block_t link; - - /* extracting a tiniest block from its list */ - if ((root = wanted) && size == TINYSIZE) { - reg Seg_t *seg; - - l = TLEFT(root); - if ((r = LINK(root))) - TLEFT(r) = l; - if (l) - LINK(l) = r; - else - TINY(vd)[0] = r; - - seg = vd->seg; - if (!seg->next) - SEG(root) = seg; - else - for (;; seg = seg->next) { - if ((Vmuchar_t *) root > (Vmuchar_t *) seg->addr && - (Vmuchar_t *) root < seg->baddr) { - SEG(root) = seg; - break; - } - } - - return root; - } - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - /* find the right one to delete */ - l = r = &link; - if ((root = vd->root)) - do { - /**/ ASSERT(!ISBITS(size) && !ISBITS(SIZE(root))); - if (size == (s = SIZE(root))) - break; - if (size < s) { - if ((t = LEFT(root))) { - if (size <= (s = SIZE(t))) { - RROTATE(root, t); - if (size == s) - break; - t = LEFT(root); - } else { - LLINK(l, t); - t = RIGHT(t); - } - } - RLINK(r, root); - } else { - if ((t = RIGHT(root))) { - if (size >= (s = SIZE(t))) { - LROTATE(root, t); - if (size == s) - break; - t = RIGHT(root); - } else { - RLINK(r, t); - t = LEFT(t); - } - } - LLINK(l, root); - } - /**/ ASSERT(root != t); - } while ((root = t)); - - if (root) { /* found it, now isolate it */ - RIGHT(l) = LEFT(root); - LEFT(r) = RIGHT(root); - } else { /* nothing exactly fit */ - LEFT(r) = NIL(Block_t *); - RIGHT(l) = NIL(Block_t *); - - /* grab the least one from the right tree */ - if ((root = LEFT(&link))) { - while ((t = LEFT(root))) - RROTATE(root, t); - LEFT(&link) = RIGHT(root); - } - } - - if (root && (r = LINK(root))) { /* head of a link list, use next one for root */ - LEFT(r) = RIGHT(&link); - RIGHT(r) = LEFT(&link); - } else if (!(r = LEFT(&link))) - r = RIGHT(&link); - else { /* graft left tree to right tree */ - while ((t = LEFT(r))) - RROTATE(r, t); - LEFT(r) = RIGHT(&link); - } - vd->root = r; - /**/ ASSERT(!r || !ISBITS(SIZE(r))); - - /**/ ASSERT(!wanted || wanted == root); - return root; -} - -/* Reclaim all delayed free blocks into the free tree */ -static int bestreclaim(reg Vmdata_t * vd, Block_t * wanted, int c) -{ - reg size_t size, s; - reg Block_t *fp, *np, *t, *list, **cache; - reg int n, count; - reg Seg_t *seg; - Block_t tree; - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - if ((fp = vd->free)) { - LINK(fp) = *(cache = CACHE(vd) + S_CACHE); - *cache = fp; - vd->free = NIL(Block_t *); - } - - LINK(&tree) = NIL(Block_t *); - count = 0; - for (n = S_CACHE; n >= c; --n) { - list = *(cache = CACHE(vd) + n); - *cache = NIL(Block_t *); - while ((fp = list)) { /* Note that below here we allow ISJUNK blocks to be - ** forward-merged even though they are not removed from - ** the list immediately. In this way, the list is - ** scanned only once. It works because the LINK and SIZE - ** fields are not destroyed during the merging. This can - ** be seen by observing that a tiniest block has a 2-word - ** header and a 2-word body. Merging a tiniest block - ** (1seg) and the next block (2seg) looks like this: - ** 1seg size link left 2seg size link left .... - ** 1seg size link left rite xxxx xxxx .... self - ** After the merge, the 2seg word is replaced by the RIGHT - ** pointer of the new block and somewhere beyond the - ** two xxxx fields, the SELF pointer will replace some - ** other word. The important part is that the two xxxx - ** fields are kept intact. - */ - count += 1; - list = LINK(list); - /**/ ASSERT(!vmonlist(list, fp)); - - size = SIZE(fp); - if (!ISJUNK(size)) /* already done */ - continue; - - /* see if this address is from region */ - for (seg = vd->seg; seg; seg = seg->next) - if (fp >= SEGBLOCK(seg) && fp < (Block_t *) seg->baddr) - break; - if (!seg) { /* must be a bug in application code! */ - /**/ ASSERT(seg != NIL(Seg_t *)); - continue; - } - - if (ISPFREE(size)) { /* backward merge */ - fp = LAST(fp); - s = SIZE(fp); - REMOVE(vd, fp, INDEX(s), t, bestsearch); - size = (size & ~BITS) + s + sizeof(Head_t); - } else - size &= ~BITS; - - for (;;) { /* forward merge */ - np = (Block_t *) ((Vmuchar_t *) fp + size + - sizeof(Head_t)); - s = SIZE(np); - /**/ ASSERT(s > 0); - if (!ISBUSY(s)) { - if (np == vd->wild) - vd->wild = NIL(Block_t *); - else - REMOVE(vd, np, INDEX(s), t, bestsearch); - } else if (ISJUNK(s)) { - if ((int) C_INDEX(s) < c) - c = C_INDEX(s); - SIZE(np) = 0; - CLRBITS(s); - } else - break; - size += s + sizeof(Head_t); - } - SIZE(fp) = size; - - if (fp == wanted) /* about to be consumed by bestresize */ - continue; - - /* tell next block that this one is free */ - SETPFREE(SIZE(np)); - /**/ ASSERT(ISBUSY(SIZE(np))); - *(SELF(fp)) = fp; - - if (np->body.data >= vd->seg->baddr) { - vd->wild = fp; - continue; - } - - /* tiny block goes to tiny list */ - if (size < MAXTINY) { - s = INDEX(size); - np = LINK(fp) = TINY(vd)[s]; - if (s == 0) { /* TINIEST block */ - if (np) - TLEFT(np) = fp; - TLEFT(fp) = NIL(Block_t *); - } else { - if (np) - LEFT(np) = fp; - LEFT(fp) = NIL(Block_t *); - SETLINK(fp); - } - TINY(vd)[s] = fp; - continue; - } - - /* don't put in free tree yet because they may be merged soon */ - np = &tree; - if ((LINK(fp) = LINK(np))) - LEFT(LINK(fp)) = fp; - LINK(np) = fp; - LEFT(fp) = np; - SETLINK(fp); - } - } - - /* insert all free blocks into the free tree */ - for (list = LINK(&tree); list;) { - fp = list; - list = LINK(list); - - /**/ ASSERT(!ISBITS(SIZE(fp))); - /**/ ASSERT(ISBUSY(SIZE(NEXT(fp)))); - /**/ ASSERT(ISPFREE(SIZE(NEXT(fp)))); - LEFT(fp) = RIGHT(fp) = LINK(fp) = NIL(Block_t *); - if (!(np = vd->root)) { /* inserting into an empty tree */ - vd->root = fp; - continue; - } - - size = SIZE(fp); - while (1) { /* leaf insertion */ - /**/ ASSERT(np != fp); - if ((s = SIZE(np)) > size) { - if ((t = LEFT(np))) { - /**/ ASSERT(np != t); - np = t; - } else { - LEFT(np) = fp; - break; - } - } else if (s < size) { - if ((t = RIGHT(np))) { - /**/ ASSERT(np != t); - np = t; - } else { - RIGHT(np) = fp; - break; - } - } else { /* s == size */ - if ((t = LINK(np))) { - LINK(fp) = t; - LEFT(t) = fp; - } - LINK(np) = fp; - LEFT(fp) = np; - SETLINK(fp); - break; - } - } - } - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - return count; -} - -/** - * @param vm region allocating from - * @param size desired block size - */ -static void *bestalloc(Vmalloc_t * vm, reg size_t size) -{ - reg Vmdata_t *vd = vm->data; - reg size_t s; - reg Block_t *tp, *np, **cache; - reg int local; - size_t orgsize = 0; - - /**/ COUNT(N_alloc); - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return NIL(void *); - SETLOCK(vd, local); - orgsize = size; - } - - /**/ ASSERT(HEADSIZE == sizeof(Head_t)); - /**/ ASSERT(BODYSIZE == sizeof(Body_t)); - /**/ ASSERT((ALIGN % (BITS + 1)) == 0); - /**/ ASSERT((sizeof(Head_t) % ALIGN) == 0); - /**/ ASSERT((sizeof(Body_t) % ALIGN) == 0); - /**/ ASSERT((TINYSIZE % ALIGN) == 0); - /**/ ASSERT(sizeof(Block_t) == (sizeof(Body_t) + sizeof(Head_t))); - - /* for ANSI requirement that malloc(0) returns non-NULL pointer */ - size = size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN); - - if (size < MAXCACHE && (tp = *(cache = CACHE(vd) + INDEX(size)))) { - *cache = LINK(tp); - CLRJUNK(SIZE(tp)); - /**/ COUNT(N_cache); - goto done; - } - - if ((tp = vd->free)) { /* allocate from last free piece */ - /**/ ASSERT(ISBUSY(SIZE(tp))); - /**/ ASSERT(ISJUNK(SIZE(tp))); - /**/ COUNT(N_last); - - vd->free = NIL(Block_t *); - if ((s = SIZE(tp)) < size) { - LINK(tp) = *(cache = CACHE(vd) + S_CACHE); - *cache = tp; - } else { - if (s >= size + (sizeof(Head_t) + TINYSIZE)) { - SIZE(tp) = size; - np = NEXT(tp); - SEG(np) = SEG(tp); - SIZE(np) = - ((s & ~BITS) - (size + sizeof(Head_t))) | JUNK | BUSY; - vd->free = np; - SIZE(tp) |= s & BITS; - } - CLRJUNK(SIZE(tp)); - goto done; - } - } - - for (;;) { - for (;;) { /* best-fit - more or less */ - for (s = INDEX(size); s < S_TINY; ++s) { - if ((tp = TINY(vd)[s])) { - REMOVE(vd, tp, s, np, bestsearch); - CLRPFREE(SIZE(NEXT(tp))); - goto got_block; - } - } - - if (CACHE(vd)[S_CACHE]) /* reclaim big pieces */ - bestreclaim(vd, NIL(Block_t *), S_CACHE); - if (vd->root && (tp = bestsearch(vd, size, NIL(Block_t *)))) - goto got_block; - if (bestreclaim(vd, NIL(Block_t *), 0) == 0) - break; - } - - /**/ ASSERT(!vd->free); - if ((tp = vd->wild) && SIZE(tp) >= size) { - /**/ ASSERT(vmcheck(vd, size, 1)); - /**/ COUNT(N_wild); - vd->wild = NIL(Block_t *); - goto got_block; - } - - /**/ ASSERT(vmcheck(vd, size, 0)); - if ((tp = (*_Vmextend) (vm, size, bestsearch))) - goto got_block; - else if (vd->mode & VM_AGAIN) - vd->mode &= ~VM_AGAIN; - else { - CLRLOCK(vd, local); - return NIL(void *); - } - } - - got_block: - /**/ ASSERT(!ISBITS(SIZE(tp))); - /**/ ASSERT(SIZE(tp) >= size); - /**/ ASSERT((SIZE(tp) % ALIGN) == 0); - /**/ ASSERT(!vd->free); - - /* tell next block that we are no longer a free block */ - CLRPFREE(SIZE(NEXT(tp))); - /**/ ASSERT(ISBUSY(SIZE(NEXT(tp)))); - - if ((s = SIZE(tp) - size) >= (sizeof(Head_t) + TINYSIZE)) { - SIZE(tp) = size; - - np = NEXT(tp); - SEG(np) = SEG(tp); - SIZE(np) = (s - sizeof(Head_t)) | BUSY | JUNK; - - if (!vd->root || !VMWILD(vd, np)) - vd->free = np; - else { - SIZE(np) &= ~BITS; - *SELF(np) = np; - SETPFREE(SIZE(NEXT(np))); - vd->wild = np; - } - } - - SETBUSY(SIZE(tp)); - - done: - if (!local && (vd->mode & VM_TRACE) && _Vmtrace - && VMETHOD(vd) == VM_MTBEST) - (*_Vmtrace) (vm, NIL(Vmuchar_t *), (Vmuchar_t *) DATA(tp), orgsize, - 0); - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - CLRLOCK(vd, local); - return DATA(tp); -} - -/** - * @param vm region allocating from - * @param addr address to check - */ -static long bestaddr(Vmalloc_t * vm, void * addr) -{ - reg Seg_t *seg; - reg Block_t *b, *endb; - reg long offset; - reg Vmdata_t *vd = vm->data; - reg int local; - b = 0; - endb = 0; - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return -1L; - SETLOCK(vd, local); - } - - offset = -1L; - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - if ((Vmuchar_t *) addr > (Vmuchar_t *) b && - (Vmuchar_t *) addr < (Vmuchar_t *) endb) - break; - } - - if (local && !(vd->mode & VM_TRUST)) { /* from bestfree or bestresize */ - b = BLOCK(addr); - if (seg && SEG(b) == seg && ISBUSY(SIZE(b)) && !ISJUNK(SIZE(b))) - offset = 0; - if (offset != 0 && vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, addr, vm->disc); - } else if (seg) { - while (b < endb) { - reg Vmuchar_t *data = (Vmuchar_t *) DATA(b); - reg size_t size = SIZE(b) & ~BITS; - - if ((Vmuchar_t *) addr >= data - && (Vmuchar_t *) addr < data + size) { - if (ISJUNK(SIZE(b)) || !ISBUSY(SIZE(b))) - offset = -1L; - else - offset = (Vmuchar_t *) addr - data; - goto done; - } - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + size); - } - } - - done: - CLRLOCK(vd, local); - return offset; -} - -static int bestfree(Vmalloc_t * vm, void * data) -{ - reg Vmdata_t *vd = vm->data; - reg Block_t *bp, **cache; - reg size_t s; - reg int local; - - /**/ COUNT(N_free); - - if (!data) /* ANSI-ism */ - return 0; - - if (!(local = vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - if (KPVADDR(vm, data, bestaddr) != 0) - return -1; - SETLOCK(vd, 0); - } - - bp = BLOCK(data); - /**/ ASSERT(ISBUSY(SIZE(bp)) && !ISJUNK(SIZE(bp))); - SETJUNK(SIZE(bp)); - if ((s = SIZE(bp)) < MAXCACHE) { - /**/ ASSERT(!vmonlist(CACHE(vd)[INDEX(s)], bp)); - LINK(bp) = *(cache = CACHE(vd) + INDEX(s)); - *cache = bp; - } else if (!vd->free) - vd->free = bp; - else { - /**/ ASSERT(!vmonlist(CACHE(vd)[S_CACHE], bp)); - LINK(bp) = *(cache = CACHE(vd) + S_CACHE); - *cache = bp; - } - - /* coalesce large free blocks to avoid fragmentation */ - if (s >= _Vmpagesize && ISPFREE(s)) - bestreclaim(vd, NIL(Block_t *), 0); - - if (!local && _Vmtrace && (vd->mode & VM_TRACE) - && VMETHOD(vd) == VM_MTBEST) - (*_Vmtrace) (vm, (Vmuchar_t *) data, NIL(Vmuchar_t *), (s & ~BITS), - 0); - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - CLRLOCK(vd, 0); - return 0; -} - -/** - * @param vm region allocation from - * @param data old block of data - * @param size new size - * @param type !=0 to move, <0 for not copy - */ -static void *bestresize(Vmalloc_t * vm, void * data, reg size_t size, - int type) -{ - reg Vmdata_t *vd = vm->data; - reg Block_t *rp, *np, *t, **cache; - reg size_t s, bs; - reg int local, *d, *ed; - size_t oldsize = 0, orgsize = 0; - void *orgdata; - orgdata = 0; - - /**/ COUNT(N_resize); - - if (!data) { - if ((data = bestalloc(vm, size))) { - oldsize = 0; - size = size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN); - } - goto done; - } - if (size == 0) { - (void) bestfree(vm, data); - return NIL(void *); - } - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return NIL(void *); - if (!local && KPVADDR(vm, data, bestaddr) != 0) - return NIL(void *); - SETLOCK(vd, local); - - orgdata = data; /* for tracing */ - orgsize = size; - } - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - size = size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN); - rp = BLOCK(data); - /**/ ASSERT(ISBUSY(SIZE(rp)) && !ISJUNK(SIZE(rp))); - if ((bs = oldsize = SIZE(rp)) < size) { - CLRBITS(SIZE(rp)); - np = NEXT(rp); - do { /* forward merge as much as possible */ - s = SIZE(np); - if (np == vd->free) { - vd->free = NIL(Block_t *); - CLRBITS(s); - } else if (ISJUNK(s)) { - CPYBITS(SIZE(rp), bs); - bestreclaim(vd, np, C_INDEX(s)); - s = SIZE(np); - bs = SIZE(rp); - CLRBITS(SIZE(rp)); - } else if (!ISBUSY(s)) { - if (np == vd->wild) - vd->wild = NIL(Block_t *); - else - REMOVE(vd, np, INDEX(s), t, bestsearch); - } else - break; - - SIZE(rp) += (s += sizeof(Head_t)); - np = (Block_t *) ((Vmuchar_t *) np + s); - CLRPFREE(SIZE(np)); - } while (SIZE(rp) < size); - - if (SIZE(rp) < size && size > vd->incr && SEGWILD(rp)) { - reg Seg_t *seg; - - s = (size - SIZE(rp)) + sizeof(Head_t); - s = ROUND(s, vd->incr); - seg = SEG(rp); - if ((*vm->disc->memoryf) (vm, seg->addr, seg->extent, - seg->extent + s, - vm->disc) == seg->addr) { - SIZE(rp) += s; - seg->extent += s; - seg->size += s; - seg->baddr += s; - SEG(NEXT(rp)) = seg; - SIZE(NEXT(rp)) = BUSY; - } - } - - CPYBITS(SIZE(rp), bs); - } - - /* If a buffer is resized, it is likely to be resized again. - So we increase a bit more to reduce future work */ - bs = size < (BODYSIZE << 1) ? size : size < 1024 ? (size >> 1) : 1024; - if ((s = SIZE(rp)) >= (size + bs + (TINYSIZE + sizeof(Head_t)))) { - SIZE(rp) = size; - np = NEXT(rp); - SEG(np) = SEG(rp); - SIZE(np) = (((s & ~BITS) - size) - sizeof(Head_t)) | BUSY | JUNK; - CPYBITS(SIZE(rp), s); - rp = np; - goto do_free; - } else if (s < size) { - if (!(type & (VM_RSMOVE | VM_RSCOPY))) /* see if old data is moveable */ - data = NIL(void *); - else { - ed = (int *) data; - if (size < ((s & ~BITS) + bs)) - size = (s & ~BITS) + bs; - if ((data = KPVALLOC(vm, size, bestalloc))) { - if (type & VM_RSCOPY) { /* old data must be copied */ - d = (int *) data; - INTCOPY(d, ed, s); - } - do_free: /* delay reusing these blocks as long as possible */ - SETJUNK(SIZE(rp)); - LINK(rp) = *(cache = CACHE(vd) + S_CACHE); - *cache = rp; - if ((rp = vd->free)) { - vd->free = NIL(Block_t *); - LINK(rp) = *cache; - *cache = rp; - } - } - } - } - - if (!local && _Vmtrace && data && (vd->mode & VM_TRACE) - && VMETHOD(vd) == VM_MTBEST) - (*_Vmtrace) (vm, (Vmuchar_t *) orgdata, (Vmuchar_t *) data, - orgsize, 0); - CLRLOCK(vd, local); - - done:if (data && (type & VM_RSZERO) && size > CLRBITS(oldsize)) { - d = (int *) ((char *) data + oldsize); - size -= oldsize; - INTZERO(d, size); - } - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - return data; -} - -/** - * @param vm region allocating from - * @param addr address to check - */ -static long bestsize(Vmalloc_t * vm, void * addr) -{ - reg Seg_t *seg; - reg Block_t *b, *endb; - reg long size; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1L; - SETLOCK(vd, 0); - } - - size = -1L; - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - if ((Vmuchar_t *) addr <= (Vmuchar_t *) b || - (Vmuchar_t *) addr >= (Vmuchar_t *) endb) - continue; - while (b < endb) { - if (addr == DATA(b)) { - if (!ISBUSY(SIZE(b)) || ISJUNK(SIZE(b))) - size = -1L; - else - size = (long) SIZE(b) & ~BITS; - goto done; - } else if ((Vmuchar_t *) addr <= (Vmuchar_t *) b) - break; - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + (SIZE(b) & ~BITS)); - } - } - - done: - CLRLOCK(vd, 0); - return size; -} - -static int bestcompact(Vmalloc_t * vm) -{ - reg Seg_t *seg, *next; - reg Block_t *bp, *t; - reg size_t size, segsize; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - bestreclaim(vd, NIL(Block_t *), 0); - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - for (seg = vd->seg; seg; seg = next) { - next = seg->next; - - bp = BLOCK(seg->baddr); - if (!ISPFREE(SIZE(bp))) - continue; - - bp = LAST(bp); - /**/ ASSERT(!ISBUSY(SIZE(bp)) && vmisfree(vd, bp)); - size = SIZE(bp); - if (bp == vd->wild) - vd->wild = NIL(Block_t *); - else - REMOVE(vd, bp, INDEX(size), t, bestsearch); - CLRPFREE(SIZE(NEXT(bp))); - - if (size < (segsize = seg->size)) - size += sizeof(Head_t); - - if ((*_Vmtruncate) (vm, seg, size, 1) >= 0) { - if (size >= segsize) /* entire segment deleted */ - continue; - - if ((size = - (seg->baddr - ((Vmuchar_t *) bp) - sizeof(Head_t))) > 0) - SIZE(bp) = size - sizeof(Head_t); - else - bp = NIL(Block_t *); - } - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - if (bp) { - /**/ ASSERT(SIZE(bp) >= TINYSIZE); - /**/ ASSERT(SEGWILD(bp)); - /**/ ASSERT(!vd->root || !vmintree(vd->root, bp)); - SIZE(bp) |= BUSY | JUNK; - LINK(bp) = CACHE(vd)[C_INDEX(SIZE(bp))]; - CACHE(vd)[C_INDEX(SIZE(bp))] = bp; - } - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - } - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - if (_Vmtrace && (vd->mode & VM_TRACE) && VMETHOD(vd) == VM_MTBEST) - (*_Vmtrace) (vm, (Vmuchar_t *) 0, (Vmuchar_t *) 0, 0, 0); - - CLRLOCK(vd, 0); - - return 0; -} - -static void *bestalign(Vmalloc_t * vm, size_t size, size_t align) -{ - reg Vmuchar_t *data; - reg Block_t *tp, *np; - reg Seg_t *seg; - reg size_t s, orgsize = 0, orgalign = 0, extra; - reg int local; - reg Vmdata_t *vd = vm->data; - - if (size <= 0 || align <= 0) - return NIL(void *); - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return NIL(void *); - SETLOCK(vd, local); - orgsize = size; - orgalign = align; - } - - size = size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN); - align = MULTIPLE(align, ALIGN); - - /* hack so that dbalign() can store header data */ - if (VMETHOD(vd) != VM_MTDEBUG) - extra = 0; - else { - extra = DB_HEAD; - while (align < extra || (align - extra) < sizeof(Block_t)) - align *= 2; - } - - /* reclaim all free blocks now to avoid fragmentation */ - bestreclaim(vd, NIL(Block_t *), 0); - - s = size + 2 * (align + sizeof(Head_t) + extra); - if (!(data = (Vmuchar_t *) KPVALLOC(vm, s, bestalloc))) - goto done; - - tp = BLOCK(data); - seg = SEG(tp); - - /* get an aligned address that we can live with */ - if ((s = (size_t) ((VLONG(data) + extra) % align)) != 0) - data += align - s; - /**/ ASSERT(((VLONG(data) + extra) % align) == 0); - - if ((np = BLOCK(data)) != tp) { /* need to free left part */ - if (((Vmuchar_t *) np - (Vmuchar_t *) tp) < - (ssize_t) (sizeof(Block_t) + extra)) { - data += align; - np = BLOCK(data); - } - /**/ ASSERT(((VLONG(data) + extra) % align) == 0); - - s = (Vmuchar_t *) np - (Vmuchar_t *) tp; - SIZE(np) = ((SIZE(tp) & ~BITS) - s) | BUSY; - SEG(np) = seg; - - SIZE(tp) = (s - sizeof(Head_t)) | (SIZE(tp) & BITS) | JUNK; - /**/ ASSERT(SIZE(tp) >= sizeof(Body_t)); - LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))]; - CACHE(vd)[C_INDEX(SIZE(tp))] = tp; - } - - /* free left-over if too big */ - if ((s = SIZE(np) - size) >= sizeof(Block_t)) { - SIZE(np) = size; - - tp = NEXT(np); - SIZE(tp) = ((s & ~BITS) - sizeof(Head_t)) | BUSY | JUNK; - SEG(tp) = seg; - LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))]; - CACHE(vd)[C_INDEX(SIZE(tp))] = tp; - - SIZE(np) |= s & BITS; - } - - bestreclaim(vd, NIL(Block_t *), 0); /* coalesce all free blocks */ - - if (!local && !(vd->mode & VM_TRUST) && _Vmtrace - && (vd->mode & VM_TRACE)) - (*_Vmtrace) (vm, NIL(Vmuchar_t *), data, orgsize, orgalign); - - done: - CLRLOCK(vd, local); - - /**/ ASSERT(!vd->root || vmchktree(vd->root)); - - return (void *) data; -} - -/* A discipline to get memory using sbrk() or VirtualAlloc on win32 */ -/** - * @param vm region doing allocation from - * @param caddr current address - * @param csize current size - * @param nsize new size - * @param disc discipline structure - */ -static void *sbrkmem(Vmalloc_t * vm, void * caddr, - size_t csize, size_t nsize, Vmdisc_t * disc) -{ -#if _std_malloc || _BLD_INSTRUMENT || cray - NOTUSED(vm); - NOTUSED(disc); - - if (csize == 0) - return (void *) malloc(nsize); - if (nsize == 0) - free(caddr); - return NIL(void *); -#else -#if defined(_WIN32) - NOTUSED(vm); - NOTUSED(disc); - - if (csize == 0) - return (void *) VirtualAlloc(NIL(LPVOID), nsize, MEM_COMMIT, - PAGE_READWRITE); - else if (nsize == 0) - return VirtualFree((LPVOID) caddr, 0, - MEM_RELEASE) ? caddr : NIL(void *); - else - return NIL(void *); -#else - reg Vmuchar_t *addr; - reg ssize_t size; - NOTUSED(vm); - NOTUSED(disc); - - /* sbrk, see if still own current address */ - if (csize > 0 && sbrk(0) != (Vmuchar_t *) caddr + csize) - return NIL(void *); - - /* do this because sbrk() uses 'ssize_t' argument */ - size = - nsize > - csize ? (ssize_t) (nsize - csize) : -(ssize_t) (csize - nsize); - - if ((addr = sbrk(size)) == (Vmuchar_t *) (-1)) - return NIL(void *); - else - return csize == 0 ? (void *) addr : caddr; -#endif -#endif -} - -static Vmdisc_t _Vmdcsbrk = { sbrkmem, NIL(Vmexcept_f), 0 }; - -static Vmethod_t _Vmbest = { - bestalloc, - bestresize, - bestfree, - bestaddr, - bestsize, - bestcompact, - bestalign, - VM_MTBEST -}; - -/* The heap region */ -static Vmdata_t _Vmdata = { - VM_MTBEST | VM_TRUST, /* mode */ - 0, /* incr */ - 0, /* pool */ - NIL(Seg_t *), /* seg */ - NIL(Block_t *), /* free */ - NIL(Block_t *), /* wild */ - NIL(Block_t *), /* root */ -}; -static Vmalloc_t _Vmheap = { - {bestalloc, - bestresize, - bestfree, - bestaddr, - bestsize, - bestcompact, - bestalign, - VM_MTBEST}, - NIL(char *), /* file */ - 0, /* line */ - &_Vmdcsbrk, /* disc */ - &_Vmdata, /* data */ - NIL(Vmalloc_t *) /* next */ -}; - -Vmalloc_t* Vmheap = &_Vmheap; -Vmalloc_t* Vmregion = &_Vmheap; -Vmethod_t* Vmbest = &_Vmbest; -Vmdisc_t* Vmdcsbrk = &_Vmdcsbrk; diff --git a/internal/ccall/vmalloc/vmclear.c b/internal/ccall/vmalloc/vmclear.c deleted file mode 100644 index cc9d9e5..0000000 --- a/internal/ccall/vmalloc/vmclear.c +++ /dev/null @@ -1,68 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Clear out all allocated space. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -int vmclear(Vmalloc_t * vm) -{ - reg Seg_t *seg; - reg Seg_t *next; - reg Block_t *tp; - reg size_t size, s; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - vd->free = vd->wild = NIL(Block_t *); - vd->pool = 0; - - if (vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE)) { - vd->root = NIL(Block_t *); - for (s = 0; s < S_TINY; ++s) - TINY(vd)[s] = NIL(Block_t *); - for (s = 0; s <= S_CACHE; ++s) - CACHE(vd)[s] = NIL(Block_t *); - } - - for (seg = vd->seg; seg; seg = next) { - next = seg->next; - - tp = SEGBLOCK(seg); - size = seg->baddr - ((Vmuchar_t *) tp) - 2 * sizeof(Head_t); - - SEG(tp) = seg; - SIZE(tp) = size; - if ((vd->mode & (VM_MTLAST | VM_MTPOOL))) - seg->free = tp; - else { - SIZE(tp) |= BUSY | JUNK; - LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))]; - CACHE(vd)[C_INDEX(SIZE(tp))] = tp; - } - - tp = BLOCK(seg->baddr); - SEG(tp) = seg; - SIZE(tp) = BUSY; - } - - CLRLOCK(vd, 0); - return 0; -} diff --git a/internal/ccall/vmalloc/vmclose.c b/internal/ccall/vmalloc/vmclose.c deleted file mode 100644 index 439e374..0000000 --- a/internal/ccall/vmalloc/vmclose.c +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Close down a region. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -int vmclose(Vmalloc_t * vm) -{ - reg Seg_t *seg, *vmseg; - reg Vmemory_f memoryf; - reg Vmdata_t *vd = vm->data; - reg Vmalloc_t *v, *last; - - if (vm == Vmheap) - return -1; - - if (!(vd->mode & VM_TRUST) && ISLOCK(vd, 0)) - return -1; - - if (vm->disc->exceptf && - (*vm->disc->exceptf) (vm, VM_CLOSE, NIL(void *), vm->disc) < 0) - return -1; - - /* make this region inaccessible until it disappears */ - vd->mode &= ~VM_TRUST; - SETLOCK(vd, 0); - - if ((vd->mode & VM_MTPROFILE) && _Vmpfclose) - (*_Vmpfclose) (vm); - - /* remove from linked list of regions */ - for (last = Vmheap, v = last->next; v; last = v, v = v->next) { - if (v == vm) { - last->next = v->next; - break; - } - } - - /* free all non-region segments */ - memoryf = vm->disc->memoryf; - vmseg = NIL(Seg_t *); - for (seg = vd->seg; seg;) { - reg Seg_t *next = seg->next; - if (seg->extent != seg->size) - (void) (*memoryf) (vm, seg->addr, seg->extent, 0, vm->disc); - else - vmseg = seg; - seg = next; - } - - /* this must be done here because even though this region is freed, - there may still be others that share this space. - */ - CLRLOCK(vd, 0); - - /* free the segment that contains the region data */ - if (vmseg) - (void) (*memoryf) (vm, vmseg->addr, vmseg->extent, 0, vm->disc); - - /* free the region itself */ - vmfree(Vmheap, vm); - - return 0; -} diff --git a/internal/ccall/vmalloc/vmdcheap.c b/internal/ccall/vmalloc/vmdcheap.c deleted file mode 100644 index c1d52e7..0000000 --- a/internal/ccall/vmalloc/vmdcheap.c +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* A discipline to get memory from the heap. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -/** - * @param vm region doing allocation from - * @param caddr current low address - * @param csize current size - * @param nsize new size - * @param disc discipline structure - */ -static void *heapmem(Vmalloc_t * vm, void * caddr, - size_t csize, size_t nsize, Vmdisc_t * disc) -{ - NOTUSED(vm); - NOTUSED(disc); - - if (csize == 0) - return vmalloc(Vmheap, nsize); - else if (nsize == 0) - return vmfree(Vmheap, caddr) >= 0 ? caddr : NIL(void *); - else - return vmresize(Vmheap, caddr, nsize, 0); -} - -static Vmdisc_t _Vmdcheap = { heapmem, NIL(Vmexcept_f), 0 }; - -Vmdisc_t* Vmdcheap = &_Vmdcheap; diff --git a/internal/ccall/vmalloc/vmdebug.c b/internal/ccall/vmalloc/vmdebug.c deleted file mode 100644 index 2d67c19..0000000 --- a/internal/ccall/vmalloc/vmdebug.c +++ /dev/null @@ -1,649 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" -#include -#ifdef HAVE_INTPTR_T -#define INT2PTR(t,v) ((t)(intptr_t)(v)) -#else -#define INT2PTR(t,v) ((t)(v)) -#endif - -#include "vmhdr.h" - -/* Method to help with debugging. This does rigorous checks on -** addresses and arena integrity. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -/* structure to keep track of file names */ -typedef struct _dbfile_s Dbfile_t; -struct _dbfile_s { - Dbfile_t *next; - char file[1]; -}; -static Dbfile_t *Dbfile; - -/* global watch list */ -#define S_WATCH 32 -static int Dbnwatch; -static void *Dbwatch[S_WATCH]; - -/* types of warnings reported by dbwarn() */ -#define DB_CHECK 0 -#define DB_ALLOC 1 -#define DB_FREE 2 -#define DB_RESIZE 3 -#define DB_WATCH 4 -#define DB_RESIZED 5 - -static int Dbinit = 0; -#define DBINIT() (Dbinit ? 0 : (dbinit(), Dbinit=1) ) -static void dbinit(void) -{ - int fd; - if ((fd = vmtrace(-1)) >= 0) - vmtrace(fd); -} - -/* just an entry point to make it easy to set break point */ -static void vmdbwarn(Vmalloc_t * vm, char *mesg, int n) -{ - reg Vmdata_t *vd = vm->data; - - write(2, mesg, n); - if (vd->mode & VM_DBABORT) - abort(); -} - -/* issue a warning of some type */ -/** - * @param vm region holding the block - * @param data data block - * @param where byte that was corrupted - * @param file file where call originates - * @param line line number of call - * @param type operation being done - */ -static void dbwarn(Vmalloc_t * vm, void * data, int where, char *file, - int line, int type) -{ - char buf[1024], *bufp, *endbuf, *s; -#define SLOP 64 /* enough for a message and an int */ - - DBINIT(); - - bufp = buf; - endbuf = buf + sizeof(buf); - - if (type == DB_ALLOC) - bufp = (*_Vmstrcpy) (bufp, "alloc error", ':'); - else if (type == DB_FREE) - bufp = (*_Vmstrcpy) (bufp, "free error", ':'); - else if (type == DB_RESIZE) - bufp = (*_Vmstrcpy) (bufp, "resize error", ':'); - else if (type == DB_CHECK) - bufp = (*_Vmstrcpy) (bufp, "corrupted data", ':'); - else if (type == DB_WATCH) - bufp = (*_Vmstrcpy) (bufp, "alert", ':'); - - /* region info */ - bufp = (*_Vmstrcpy) (bufp, "region", '='); - bufp = (*_Vmstrcpy) (bufp, (*_Vmitoa) (VLONG(vm), 0), ':'); - - if (data) { - bufp = (*_Vmstrcpy) (bufp, "block", '='); - bufp = (*_Vmstrcpy) (bufp, (*_Vmitoa) (VLONG(data), 0), ':'); - } - - if (!data) { - if (where == DB_ALLOC) - bufp = (*_Vmstrcpy) (bufp, "can't get memory", ':'); - else - bufp = (*_Vmstrcpy) (bufp, "region is locked", ':'); - } else if (type == DB_FREE || type == DB_RESIZE) { - if (where == 0) - bufp = (*_Vmstrcpy) (bufp, "unallocated block", ':'); - else - bufp = (*_Vmstrcpy) (bufp, "already freed", ':'); - } else if (type == DB_WATCH) { - bufp = (*_Vmstrcpy) (bufp, "size", '='); - bufp = (*_Vmstrcpy) (bufp, (*_Vmitoa) (DBSIZE(data), -1), ':'); - if (where == DB_ALLOC) - bufp = (*_Vmstrcpy) (bufp, "just allocated", ':'); - else if (where == DB_FREE) - bufp = (*_Vmstrcpy) (bufp, "being freed", ':'); - else if (where == DB_RESIZE) - bufp = (*_Vmstrcpy) (bufp, "being resized", ':'); - else if (where == DB_RESIZED) - bufp = (*_Vmstrcpy) (bufp, "just resized", ':'); - } else if (type == DB_CHECK) { - bufp = (*_Vmstrcpy) (bufp, "bad byte at", '='); - bufp = - (*_Vmstrcpy) (bufp, - (*_Vmitoa) (VLONG(INT2PTR(char *, where)), -1), - ':'); - if ((s = DBFILE(data)) && (bufp + strlen(s) + SLOP) < endbuf) { - bufp = (*_Vmstrcpy) (bufp, "allocated at", '='); - bufp = (*_Vmstrcpy) (bufp, s, ','); - bufp = - (*_Vmstrcpy) (bufp, - (*_Vmitoa) (VLONG - (INT2PTR(char *, DBLINE(data))), - -1), ':'); - } - } - - /* location where offending call originates from */ - if (file && file[0] && line > 0 - && (bufp + strlen(file) + SLOP) < endbuf) { - bufp = (*_Vmstrcpy) (bufp, "detected at", '='); - bufp = (*_Vmstrcpy) (bufp, file, ','); - bufp = - (*_Vmstrcpy) (bufp, - (*_Vmitoa) (VLONG(INT2PTR(char *, where)), -1), - ':'); - } - - *bufp++ = '\n'; - *bufp = '\0'; - - vmdbwarn(vm, buf, (bufp - buf)); -} - -/* check for watched address and issue warnings */ -static void dbwatch(Vmalloc_t * vm, void * data, char *file, int line, - int type) -{ - reg int n; - - for (n = Dbnwatch; n >= 0; --n) { - if (Dbwatch[n] == data) { - dbwarn(vm, data, type, file, line, DB_WATCH); - return; - } - } -} - -/* record information about the block */ -/** - * @param data real address not the one from Vmbest - * @param size the actual requested size - * @param file file where the request came from - * @param line and line number - */ -static void dbsetinfo(Vmuchar_t * data, size_t size, char *file, int line) -{ - reg Vmuchar_t *begp, *endp; - reg Dbfile_t *last, *db; - - DBINIT(); - - /* find the file structure */ - if (!file || !file[0]) - db = NIL(Dbfile_t *); - else { - for (last = NIL(Dbfile_t *), db = Dbfile; db; - last = db, db = db->next) - if (strcmp(db->file, file) == 0) - break; - if (!db) { - db = (Dbfile_t *) vmalloc(Vmheap, - sizeof(Dbfile_t) + strlen(file)); - if (db) { - (*_Vmstrcpy) (db->file, file, 0); - db->next = Dbfile; - Dbfile = db->next; - } - } else if (last) { /* move-to-front heuristic */ - last->next = db->next; - db->next = Dbfile; - Dbfile = db->next; - } - } - - DBSETFL(data, (db ? db->file : NIL(char *)), line); - DBSIZE(data) = size; - DBSEG(data) = SEG(DBBLOCK(data)); - - DBHEAD(data, begp, endp); - while (begp < endp) - *begp++ = DB_MAGIC; - DBTAIL(data, begp, endp); - while (begp < endp) - *begp++ = DB_MAGIC; -} - -/* Check to see if an address is in some data block of a region. -** This returns -(offset+1) if block is already freed, +(offset+1) -** if block is live, 0 if no match. -*/ -static long dbaddr(Vmalloc_t * vm, void * addr) -{ - reg Block_t *b = NULL, *endb = NULL; - reg Seg_t *seg; - reg Vmuchar_t *data; - reg long offset = -1L; - reg Vmdata_t *vd = vm->data; - reg int local; - - GETLOCAL(vd, local); - if (ISLOCK(vd, local) || !addr) - return -1L; - SETLOCK(vd, local); - - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - if ((Vmuchar_t *) addr > (Vmuchar_t *) b && - (Vmuchar_t *) addr < (Vmuchar_t *) endb) - break; - } - if (!seg) - goto done; - - if (local) { /* must be vmfree or vmresize checking address */ - if (DBSEG(addr) == seg) { - b = DBBLOCK(addr); - if (ISBUSY(SIZE(b)) && !ISJUNK(SIZE(b))) - offset = 0; - else - offset = -2L; - } - goto done; - } - - while (b < endb) { - data = (Vmuchar_t *) DATA(b); - if ((Vmuchar_t *) addr >= data - && (Vmuchar_t *) addr < data + SIZE(b)) { - if (ISBUSY(SIZE(b)) && !ISJUNK(SIZE(b))) { - data = DB2DEBUG(data); - if ((Vmuchar_t *) addr >= data && - (Vmuchar_t *) addr < data + DBSIZE(data)) - offset = (Vmuchar_t *) addr - data; - } - goto done; - } - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + (SIZE(b) & ~BITS)); - } - - done: - CLRLOCK(vd, local); - return offset; -} - - -static long dbsize(Vmalloc_t * vm, void * addr) -{ - reg Block_t *b, *endb; - reg Seg_t *seg; - reg long size; - reg Vmdata_t *vd = vm->data; - - if (ISLOCK(vd, 0)) - return -1L; - SETLOCK(vd, 0); - - size = -1L; - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - if ((Vmuchar_t *) addr <= (Vmuchar_t *) b || - (Vmuchar_t *) addr >= (Vmuchar_t *) endb) - continue; - while (b < endb) { - if (addr == (void *) DB2DEBUG(DATA(b))) { - if (ISBUSY(SIZE(b)) && !ISJUNK(SIZE(b))) - size = (long) DBSIZE(addr); - goto done; - } - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + (SIZE(b) & ~BITS)); - } - } - done: - CLRLOCK(vd, 0); - return size; -} - -static void *dballoc(Vmalloc_t * vm, size_t size) -{ - reg size_t s; - reg Vmuchar_t *data; - reg char *file; - reg int line; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - - if (ISLOCK(vd, 0)) { - dbwarn(vm, NIL(Vmuchar_t *), 0, file, line, DB_ALLOC); - return NIL(void *); - } - SETLOCK(vd, 0); - - if (vd->mode & VM_DBCHECK) - vmdbcheck(vm); - - s = ROUND(size, ALIGN) + DB_EXTRA; - if (s < sizeof(Body_t)) /* no tiny blocks during Vmdebug */ - s = sizeof(Body_t); - - if (!(data = (Vmuchar_t *) KPVALLOC(vm, s, (*(Vmbest->allocf))))) { - dbwarn(vm, NIL(Vmuchar_t *), DB_ALLOC, file, line, DB_ALLOC); - goto done; - } - - data = DB2DEBUG(data); - dbsetinfo(data, size, file, line); - - if ((vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, NIL(Vmuchar_t *), data, size, 0); - } - - if (Dbnwatch > 0) - dbwatch(vm, data, file, line, DB_ALLOC); - - done: - CLRLOCK(vd, 0); - return (void *) data; -} - - -static int dbfree(Vmalloc_t * vm, void * data) -{ - char *file; - int line; - reg long offset; - reg int *ip, *endip; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - - if (!data) - return 0; - - if (ISLOCK(vd, 0)) { - dbwarn(vm, NIL(Vmuchar_t *), 0, file, line, DB_FREE); - return -1; - } - SETLOCK(vd, 0); - - if (vd->mode & VM_DBCHECK) - vmdbcheck(vm); - - if ((offset = KPVADDR(vm, data, dbaddr)) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, vm->disc); - dbwarn(vm, (Vmuchar_t *) data, offset == -1L ? 0 : 1, file, line, - DB_FREE); - CLRLOCK(vd, 0); - return -1; - } - - if (Dbnwatch > 0) - dbwatch(vm, data, file, line, DB_FREE); - - if ((vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, (Vmuchar_t *) data, NIL(Vmuchar_t *), - DBSIZE(data), 0); - } - - /* clear free space */ - ip = (int *) data; - endip = ip + (DBSIZE(data) + sizeof(int) - 1) / sizeof(int); - while (ip < endip) - *ip++ = 0; - - CLRLOCK(vd, 0); - return (*(Vmbest->freef)) (vm, (void *) DB2BEST(data)); -} - -/* Resizing an existing block */ -/** - * @param vm region allocating from - * @param addr old block of data - * @param size new size - * @param type !=0 for movable, >0 for copy - */ -static void *dbresize(Vmalloc_t * vm, void * addr, reg size_t size, - int type) -{ - reg Vmuchar_t *data; - reg size_t s, oldsize; - reg long offset; - char *file, *oldfile; - int line, oldline; - reg Vmdata_t *vd = vm->data; - - if (!addr) { - oldsize = 0; - data = (Vmuchar_t *) dballoc(vm, size); - goto done; - } - if (size == 0) { - (void) dbfree(vm, addr); - return NIL(void *); - } - - VMFILELINE(vm, file, line); - - if (ISLOCK(vd, 0)) { - dbwarn(vm, NIL(Vmuchar_t *), 0, file, line, DB_RESIZE); - return NIL(void *); - } - SETLOCK(vd, 0); - - if (vd->mode & VM_DBCHECK) - vmdbcheck(vm); - - if ((offset = KPVADDR(vm, addr, dbaddr)) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, addr, vm->disc); - dbwarn(vm, (Vmuchar_t *) addr, offset == -1L ? 0 : 1, file, line, - DB_RESIZE); - CLRLOCK(vd, 0); - return NIL(void *); - } - - if (Dbnwatch > 0) - dbwatch(vm, addr, file, line, DB_RESIZE); - - /* Vmbest data block */ - data = DB2BEST(addr); - oldsize = DBSIZE(addr); - oldfile = DBFILE(addr); - oldline = DBLINE(addr); - - /* do the resize */ - s = ROUND(size, ALIGN) + DB_EXTRA; - if (s < sizeof(Body_t)) - s = sizeof(Body_t); - data = (Vmuchar_t *) KPVRESIZE(vm, (void *) data, s, - (type & ~VM_RSZERO), - (*(Vmbest->resizef))); - if (!data) { /* failed, reset data for old block */ - dbwarn(vm, NIL(Vmuchar_t *), DB_ALLOC, file, line, DB_RESIZE); - dbsetinfo((Vmuchar_t *) addr, oldsize, oldfile, oldline); - } else { - data = DB2DEBUG(data); - dbsetinfo(data, size, file, line); - - if ((vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, (Vmuchar_t *) addr, data, size, 0); - } - if (Dbnwatch > 0) - dbwatch(vm, data, file, line, DB_RESIZED); - } - - CLRLOCK(vd, 0); - - done:if (data && (type & VM_RSZERO) && size > oldsize) { - reg Vmuchar_t *d = data + oldsize, *ed = data + size; - do { - *d++ = 0; - } while (d < ed); - } - return (void *) data; -} - -/* compact any residual free space */ -static int dbcompact(Vmalloc_t * vm) -{ - return (*(Vmbest->compactf)) (vm); -} - -/* check for memory overwrites over all live blocks */ -int vmdbcheck(Vmalloc_t * vm) -{ - reg Block_t *b, *endb; - reg Seg_t *seg; - int rv; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_MTDEBUG)) - return -1; - - rv = 0; - for (seg = vd->seg; seg; seg = seg->next) { - b = SEGBLOCK(seg); - endb = (Block_t *) (seg->baddr - sizeof(Head_t)); - while (b < endb) { - reg Vmuchar_t *data, *begp, *endp; - - if (ISJUNK(SIZE(b)) || !ISBUSY(SIZE(b))) - goto next; - - data = DB2DEBUG(DATA(b)); - if (DBISBAD(data)) { /* seen this before */ - rv += 1; - goto next; - } - - DBHEAD(data, begp, endp); - for (; begp < endp; ++begp) - if (*begp != DB_MAGIC) - goto set_bad; - - DBTAIL(data, begp, endp); - for (; begp < endp; ++begp) { - if (*begp == DB_MAGIC) - continue; - set_bad: - dbwarn(vm, data, begp - data, NIL(char *), 0, DB_CHECK); - DBSETBAD(data); - rv += 1; - goto next; - } - - next:b = (Block_t *) ((Vmuchar_t *) DATA(b) + - (SIZE(b) & ~BITS)); - } - } - - return rv; -} - -/* set/delete an address to watch */ -/** - * set/delete an address to watch - * - * @param addr address to insert - */ -void *vmdbwatch(void * addr) -{ - reg int n; - reg void *out; - - out = NIL(void *); - if (!addr) - Dbnwatch = 0; - else { - for (n = Dbnwatch - 1; n >= 0; --n) - if (Dbwatch[n] == addr) - break; - if (n < 0) { /* insert */ - if (Dbnwatch == S_WATCH) { /* delete left-most */ - out = Dbwatch[0]; - Dbnwatch -= 1; - for (n = 0; n < Dbnwatch; ++n) - Dbwatch[n] = Dbwatch[n + 1]; - } - Dbwatch[Dbnwatch] = addr; - Dbnwatch += 1; - } - } - return out; -} - -static void *dbalign(Vmalloc_t * vm, size_t size, size_t align) -{ - reg Vmuchar_t *data; - reg size_t s; - reg char *file; - reg int line; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - - if (size <= 0 || align <= 0) - return NIL(void *); - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - } - - if ((s = ROUND(size, ALIGN) + DB_EXTRA) < sizeof(Body_t)) - s = sizeof(Body_t); - - if (! - (data = (Vmuchar_t *) KPVALIGN(vm, s, align, (*(Vmbest->alignf))))) - goto done; - - data += DB_HEAD; - dbsetinfo(data, size, file, line); - - if ((vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, NIL(Vmuchar_t *), data, size, align); - } - - done: - CLRLOCK(vd, 0); - return (void *) data; -} - -static Vmethod_t _Vmdebug = { - dballoc, - dbresize, - dbfree, - dbaddr, - dbsize, - dbcompact, - dbalign, - VM_MTDEBUG -}; - -Vmethod_t* Vmdebug = &_Vmdebug; diff --git a/internal/ccall/vmalloc/vmdisc.c b/internal/ccall/vmalloc/vmdisc.c deleted file mode 100644 index c729b91..0000000 --- a/internal/ccall/vmalloc/vmdisc.c +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Change the discipline for a region. The old discipline -** is returned. If the new discipline is NIL then the -** discipline is not changed. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -Vmdisc_t *vmdisc(Vmalloc_t * vm, Vmdisc_t * disc) -{ - Vmdisc_t *old = vm->disc; - - if (disc) { - if (disc->memoryf != old->memoryf) - return NIL(Vmdisc_t *); - if (old->exceptf && - (*old->exceptf) (vm, VM_DISC, (void *) disc, old) != 0) - return NIL(Vmdisc_t *); - vm->disc = disc; - } - return old; -} diff --git a/internal/ccall/vmalloc/vmhdr.h b/internal/ccall/vmalloc/vmhdr.h deleted file mode 100644 index a44793f..0000000 --- a/internal/ccall/vmalloc/vmhdr.h +++ /dev/null @@ -1,458 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _VMHDR_H -#define _VMHDR_H 1 -#ifndef _BLD_vmalloc -#define _BLD_vmalloc 1 -#endif -#ifdef WIN32 -#include -#endif - -#include - -/* Common types, and macros for vmalloc functions. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -#include "config.h" - -#ifdef HAVE_SYS_TYPES_H -# include -#endif // HAVE_SYS_TYPES_H - -#include "FEATURE/vmalloc" - -#undef free -#undef malloc -#undef realloc -#undef BITS - - typedef unsigned char Vmuchar_t; - typedef uint64_t Vmulong_t; - - typedef union _head_u Head_t; - typedef union _body_u Body_t; - typedef struct _block_s Block_t; - typedef struct _seg_s Seg_t; - typedef struct _pfobj_s Pfobj_t; - -#define NIL(t) ((t)0) -#define reg register -#define NOTUSED(x) (void)(x) - -/* convert an address to an integral value */ -#define VLONG(addr) ((Vmulong_t)((char*)(addr) - (char*)0) ) - -/* Round x up to a multiple of y. ROUND2 does powers-of-2 and ROUNDX does others */ -#define ROUND2(x,y) (((x) + ((y)-1)) & ~((y)-1)) -#define ROUNDX(x,y) ((((x) + ((y)-1)) / (y)) * (y)) -#define ROUND(x,y) (((y)&((y)-1)) ? ROUNDX((x),(y)) : ROUND2((x),(y)) ) - -/* compute a value that is a common multiple of x and y */ -#define MULTIPLE(x,y) ((x)%(y) == 0 ? (x) : (y)%(x) == 0 ? (y) : (y)*(x)) - -#ifndef DEBUG -#define ASSERT(p) -#define COUNT(n) -#else - extern int printf(const char *, ...); -#if defined(__LINE__) && defined(__FILE__) -#define PRFILELINE printf("Assertion failed at %s:%d\n",__FILE__,__LINE__) -#else -#define PRFILELINE 0 -#endif -#define ASSERT(p) ((p) ? 0 : (PRFILELINE, abort(), 0) ) -#define COUNT(n) ((n) += 1) -#endif /*DEBUG*/ -#define VMPAGESIZE 8192 -#if _lib_getpagesize -#define GETPAGESIZE(x) ((x) ? (x) : \ - (((x)=getpagesize()) < VMPAGESIZE ? ((x)=VMPAGESIZE) : (x)) ) -#else -#define GETPAGESIZE(x) ((x) = VMPAGESIZE) -#endif -/* Blocks are allocated such that their sizes are 0%(BITS+1) -** This frees up enough low order bits to store state information -*/ -#define BUSY (01) /* block is busy */ -#define PFREE (02) /* preceding block is free */ -#define JUNK (04) /* marked as freed but not yet processed */ -#define BITS (07) /* (BUSY|PFREE|JUNK) */ -#define ALIGNB (8) /* size must be a multiple of BITS+1 */ -#define ISBITS(w) ((w) & BITS) -#define CLRBITS(w) ((w) &= ~BITS) -#define CPYBITS(w,f) ((w) |= ((f)&BITS) ) -#define ISBUSY(w) ((w) & BUSY) -#define SETBUSY(w) ((w) |= BUSY) -#define CLRBUSY(w) ((w) &= ~BUSY) -#define ISPFREE(w) ((w) & PFREE) -#define SETPFREE(w) ((w) |= PFREE) -#define CLRPFREE(w) ((w) &= ~PFREE) -#define ISJUNK(w) ((w) & JUNK) -#define SETJUNK(w) ((w) |= JUNK) -#define CLRJUNK(w) ((w) &= ~JUNK) -#define OFFSET(t,e) ((size_t)(&(((t*)0)->e)) ) -/* these bits share the "mode" field with the public bits */ -#define VM_AGAIN 0010000 /* research the arena for space */ -#define VM_LOCK 0020000 /* region is locked */ -#define VM_LOCAL 0040000 /* local call, bypass lock */ -#define VM_UNUSED 0104060 -#define VMETHOD(vd) ((vd)->mode&VM_METHODS) -/* test/set/clear lock state */ -#define SETLOCAL(vd) ((vd)->mode |= VM_LOCAL) -#define GETLOCAL(vd,l) (((l) = (vd)->mode&VM_LOCAL), ((vd)->mode &= ~VM_LOCAL) ) -#define ISLOCK(vd,l) ((l) ? 0 : ((vd)->mode & VM_LOCK) ) -#define SETLOCK(vd,l) ((l) ? 0 : ((vd)->mode |= VM_LOCK) ) -#define CLRLOCK(vd,l) ((l) ? 0 : ((vd)->mode &= ~VM_LOCK) ) -/* local calls */ -#define KPVALLOC(vm,sz,func) (SETLOCAL((vm)->data), func((vm),(sz)) ) -#define KPVALIGN(vm,sz,al,func) (SETLOCAL((vm)->data), func((vm),(sz),(al)) ) -#define KPVFREE(vm,d,func) (SETLOCAL((vm)->data), func((vm),(d)) ) -#define KPVRESIZE(vm,d,sz,mv,func) (SETLOCAL((vm)->data), func((vm),(d),(sz),(mv)) ) -#define KPVADDR(vm,addr,func) (SETLOCAL((vm)->data), func((vm),(addr)) ) -/* ALIGN is chosen so that a block can store all primitive types. -** It should also be a multiple of ALIGNB==(BITS+1) so the size field -** of Block_t will always be 0%(BITS+1) as noted above. -** Of paramount importance is the ALIGNA macro below. If the local compile -** environment is strange enough that the below method does not calculate -** ALIGNA right, then the code below should be commented out and ALIGNA -** redefined to the appropriate requirement. -*/ - union _align_u { - char c, *cp; - int i, *ip; - long l, *lp; - double d, *dp, ***dppp[8]; - size_t s, *sp; - void (*fn) (void); - union _align_u *align; - Head_t *head; - Body_t *body; - Block_t *block; - Vmuchar_t a[ALIGNB]; -#if _long_double - long double ld, *ldp; -#endif - }; - struct _a_s { - char c; - union _align_u a; - }; -#define ALIGNA (sizeof(struct _a_s) - sizeof(union _align_u)) - struct _align_s { - char data[MULTIPLE(ALIGNA, ALIGNB)]; - }; -#define ALIGN sizeof(struct _align_s) - -/* make sure that the head of a block is a multiple of ALIGN */ - struct _head_s { - union { - Seg_t *seg; /* the containing segment */ - Block_t *link; /* possible link list usage */ - Pfobj_t *pf; /* profile structure pointer */ - char *file; /* for file name in Vmdebug */ - } seg; - union { - size_t size; /* size of data area in bytes */ - Block_t *link; /* possible link list usage */ - int line; /* for line number in Vmdebug */ - } size; - }; -#define HEADSIZE ROUND(sizeof(struct _head_s),ALIGN) - union _head_u { - Vmuchar_t data[HEADSIZE]; /* to standardize size */ - struct _head_s head; - }; - -/* now make sure that the body of a block is a multiple of ALIGN */ - struct _body_s { - Block_t *link; /* next in link list */ - Block_t *left; /* left child in free tree */ - Block_t *right; /* right child in free tree */ - Block_t **self; /* self pointer when free */ - }; -#define BODYSIZE ROUND(sizeof(struct _body_s),ALIGN) - union _body_u { - Vmuchar_t data[BODYSIZE]; /* to standardize size */ - struct _body_s body; - }; - -/* After all the songs and dances, we should now have: -** sizeof(Head_t)%ALIGN == 0 -** sizeof(Body_t)%ALIGN == 0 -** and sizeof(Block_t) = sizeof(Head_t)+sizeof(Body_t) -*/ - struct _block_s { - Head_t head; - Body_t body; - }; - -/* requirements for smallest block type */ - struct _tiny_s { - Block_t *link; - Block_t *self; - }; -#define TINYSIZE ROUND(sizeof(struct _tiny_s),ALIGN) -#define S_TINY 7 /* # of tiny blocks */ -#define MAXTINY (S_TINY*ALIGN + TINYSIZE) -#define TLEFT(b) ((b)->head.head.seg.link) /* instead of LEFT */ -#define TINIEST(b) (SIZE(b) == TINYSIZE) /* this type uses TLEFT */ - -#define DIV(x,y) ((y) == 8 ? ((x)>>3) : (x)/(y) ) -#define INDEX(s) DIV((s)-TINYSIZE,ALIGN) - -/* number of small block types that can be cached after free */ -#define S_CACHE 7 -#define MAXCACHE (S_CACHE*ALIGN + TINYSIZE) -#define C_INDEX(s) (s < MAXCACHE ? INDEX(s) : S_CACHE) - -#define TINY(vd) ((vd)->tiny) -#define CACHE(vd) ((vd)->cache) - - typedef struct _vmdata_s { - int mode; /* current mode for region */ - size_t incr; /* allocate in multiple of this */ - size_t pool; /* size of an elt in a Vmpool region */ - Seg_t *seg; /* list of segments */ - Block_t *free; /* most recent free block */ - Block_t *wild; /* wilderness block */ - Block_t *root; /* root of free tree */ - Block_t *tiny[S_TINY]; /* small blocks */ - Block_t *cache[S_CACHE + 1]; /* delayed free blocks */ - } Vmdata_t; - -/* private parts of Vmalloc_t */ -#define _VM_PRIVATE_ \ - Vmdisc_t* disc; /* discipline to get space */ \ - Vmdata_t* data; /* the real region data */ \ - Vmalloc_t* next; /* linked list of regions */ - -#include "vmalloc.h" - -/* we don't use these here and they interfere with some local names */ -#undef malloc -#undef free -#undef realloc - -/* segment structure */ - struct _seg_s { - Vmalloc_t *vm; /* the region that holds this */ - Seg_t *next; /* next segment */ - void *addr; /* starting segment address */ - size_t extent; /* extent of segment */ - Vmuchar_t *baddr; /* bottom of usable memory */ - size_t size; /* allocable size */ - Block_t *free; /* recent free blocks */ - Block_t *last; /* Vmlast last-allocated block */ - }; - -/* starting block of a segment */ -#define SEGBLOCK(s) ((Block_t*)(((Vmuchar_t*)(s)) + ROUND(sizeof(Seg_t),ALIGN))) - -/* short-hands for block data */ -#define SEG(b) ((b)->head.head.seg.seg) -#define SEGLINK(b) ((b)->head.head.seg.link) -#define SIZE(b) ((b)->head.head.size.size) -#define SIZELINK(b) ((b)->head.head.size.link) -#define LINK(b) ((b)->body.body.link) -#define LEFT(b) ((b)->body.body.left) -#define RIGHT(b) ((b)->body.body.right) -#define VM(b) (SEG(b)->vm) - -#define DATA(b) ((void*)((b)->body.data) ) -#define BLOCK(d) ((Block_t*)((char*)(d) - sizeof(Head_t)) ) -#define SELF(b) ((Block_t**)((b)->body.data + SIZE(b) - sizeof(Block_t*)) ) -#define LAST(b) (*((Block_t**)(((char*)(b)) - sizeof(Block_t*)) ) ) -#define NEXT(b) ((Block_t*)((b)->body.data + SIZE(b)) ) - -/* functions to manipulate link lists of elts of the same size */ -#define SETLINK(b) (RIGHT(b) = (b) ) -#define ISLINK(b) (RIGHT(b) == (b) ) -#define UNLINK(vd,b,i,t) \ - ((((t) = LINK(b)) ? (LEFT(t) = LEFT(b)) : NIL(Block_t*) ), \ - (((t) = LEFT(b)) ? (LINK(t) = LINK(b)) : (TINY(vd)[i] = LINK(b)) ) ) - -/* delete a block from a link list or the free tree. -** The test in the below macro is worth scratching your head a bit. -** Even though tiny blocks (size < BODYSIZE) are kept in separate lists, -** only the TINIEST ones require TLEFT(b) for the back link. Since this -** destroys the SEG(b) pointer, it must be carefully restored in bestsearch(). -** Other tiny blocks have enough space to use the usual LEFT(b). -** In this case, I have also carefully arranged so that RIGHT(b) and -** SELF(b) can be overlapped and the test ISLINK() will go through. -*/ -#define REMOVE(vd,b,i,t,func) \ - ((!TINIEST(b) && ISLINK(b)) ? UNLINK((vd),(b),(i),(t)) : \ - func((vd),SIZE(b),(b)) ) - -/* see if a block is the wilderness block */ -#define SEGWILD(b) (((b)->body.data+SIZE(b)+sizeof(Head_t)) >= SEG(b)->baddr) -#define VMWILD(vd,b) (((b)->body.data+SIZE(b)+sizeof(Head_t)) >= vd->seg->baddr) - -#define VMFILELINE(vm,f,l) ((f) = (vm)->file, (vm)->file = NIL(char*), \ - (l) = (vm)->line, (vm)->line = 0 ) - -/* The lay-out of a Vmprofile block is this: -** seg_ size ----data---- _pf_ size -** _________ ____________ _________ -** seg_, size: header required by Vmbest. -** data: actual data block. -** _pf_: pointer to the corresponding Pfobj_t struct -** size: the true size of the block. -** So each block requires an extra Head_t. -*/ -#define PF_EXTRA sizeof(Head_t) -#define PFDATA(d) ((Head_t*)((Vmuchar_t*)(d)+(SIZE(BLOCK(d))&~BITS)-sizeof(Head_t)) ) -#define PFOBJ(d) (PFDATA(d)->head.seg.pf) -#define PFSIZE(d) (PFDATA(d)->head.size.size) - -/* The lay-out of a block allocated by Vmdebug is this: -** seg_ size file size seg_ magi ----data---- --magi-- magi line -** --------- --------- --------- ------------ -------- --------- -** seg_,size: header required by Vmbest management. -** file: the file where it was created. -** size: the true byte count of the block -** seg_: should be the same as the previous seg_. -** This allows the function vmregion() to work. -** magi: magic bytes to detect overwrites. -** data: the actual data block. -** magi: more magic bytes. -** line: the line number in the file where it was created. -** So for each allocated block, we'll need 3 extra Head_t. -*/ - -/* convenient macros for accessing the above fields */ -#define DB_HEAD (2*sizeof(Head_t)) -#define DB_TAIL (2*sizeof(Head_t)) -#define DB_EXTRA (DB_HEAD+DB_TAIL) -#define DBBLOCK(d) ((Block_t*)((Vmuchar_t*)(d) - 3*sizeof(Head_t)) ) -#define DBBSIZE(d) (SIZE(DBBLOCK(d)) & ~BITS) -#define DBSEG(d) (((Head_t*)((Vmuchar_t*)(d) - sizeof(Head_t)))->head.seg.seg ) -#define DBSIZE(d) (((Head_t*)((Vmuchar_t*)(d) - 2*sizeof(Head_t)))->head.size.size ) -#define DBFILE(d) (((Head_t*)((Vmuchar_t*)(d) - 2*sizeof(Head_t)))->head.seg.file ) -#define DBLN(d) (((Head_t*)((Vmuchar_t*)DBBLOCK(d)+DBBSIZE(d)))->head.size.line ) -#define DBLINE(d) (DBLN(d) < 0 ? -DBLN(d) : DBLN(d)) - -/* forward/backward translation for addresses between Vmbest and Vmdebug */ -#define DB2BEST(d) ((Vmuchar_t*)(d) - 2*sizeof(Head_t)) -#define DB2DEBUG(b) ((Vmuchar_t*)(b) + 2*sizeof(Head_t)) - -/* set file and line number, note that DBLN > 0 so that DBISBAD will work */ -#define DBSETFL(d,f,l) (DBFILE(d) = (f), DBLN(d) = (f) ? (l) : 1) - -/* set and test the state of known to be corrupted */ -#define DBSETBAD(d) (DBLN(d) > 0 ? (DBLN(d) = -DBLN(d)) : -1) -#define DBISBAD(d) (DBLN(d) <= 0) - -#define DB_MAGIC 0255 /* 10101101 */ - -/* compute the bounds of the magic areas */ -#define DBHEAD(d,begp,endp) \ - (((begp) = (Vmuchar_t*)(&DBSEG(d)) + sizeof(Seg_t*)), ((endp) = (d)) ) -#define DBTAIL(d,begp,endp) \ - (((begp) = (Vmuchar_t*)(d)+DBSIZE(d)), ((endp) = (Vmuchar_t*)(&DBLN(d))) ) - -/* clear and copy functions */ -#define INTCOPY(to,fr,n) \ - switch(n/sizeof(int)) \ - { default: memcpy((void*)to,(void*)fr,n); break; \ - case 7: *to++ = *fr++; \ - case 6: *to++ = *fr++; \ - case 5: *to++ = *fr++; \ - case 4: *to++ = *fr++; \ - case 3: *to++ = *fr++; \ - case 2: *to++ = *fr++; \ - case 1: *to++ = *fr++; \ - } -#define INTZERO(d,n) \ - switch(n/sizeof(int)) \ - { default: memset((void*)d,0,n); break; \ - case 7: *d++ = 0; \ - case 6: *d++ = 0; \ - case 5: *d++ = 0; \ - case 4: *d++ = 0; \ - case 3: *d++ = 0; \ - case 2: *d++ = 0; \ - case 1: *d++ = 0; \ - } - -/* external symbols for internal use by vmalloc */ - typedef Block_t *(*Vmsearch_f) (Vmdata_t *, size_t, Block_t *); - typedef struct _vmextern_ { - Block_t *(*vm_extend) (Vmalloc_t *, size_t, Vmsearch_f); - int (*vm_truncate) (Vmalloc_t *, Seg_t *, size_t, int); - size_t vm_pagesize; - char *(*vm_strcpy) (char *, char *, int); - char *(*vm_itoa) (Vmulong_t, int); - void (*vm_trace) (Vmalloc_t *, - Vmuchar_t *, Vmuchar_t *, size_t, size_t); - void (*vm_pfclose) (Vmalloc_t *); - } Vmextern_t; - -#define _Vmextend (_Vmextern.vm_extend) -#define _Vmtruncate (_Vmextern.vm_truncate) -#define _Vmpagesize (_Vmextern.vm_pagesize) -#define _Vmstrcpy (_Vmextern.vm_strcpy) -#define _Vmitoa (_Vmextern.vm_itoa) -#define _Vmtrace (_Vmextern.vm_trace) -#define _Vmpfclose (_Vmextern.vm_pfclose) - - extern Vmextern_t _Vmextern; - - extern size_t getpagesize(void); - -#ifndef WIN32 - extern void abort(void); - extern ssize_t write(int, const void *, size_t); -#endif - -#ifndef cfree -#define cfree ______cfree -#endif -#include -#undef cfree -#include - -/* for malloc.c */ -#ifndef WIN32 - extern int creat(const char *, int); - extern int close(int); -#endif - extern int getpid(void); - -/* for vmexit.c */ -#ifndef WIN32 - extern int onexit(void(*)(void)); - extern void _exit(int); -#endif - extern void _cleanup(void); - -/* for vmdcsbrk.c */ -#if !_typ_ssize_t - typedef int ssize_t; -#endif -#if !defined(_WIN32) - extern Vmuchar_t *sbrk(ssize_t); -#endif - -#endif /* _VMHDR_H */ -#ifdef __cplusplus -} -#endif diff --git a/internal/ccall/vmalloc/vmlast.c b/internal/ccall/vmalloc/vmlast.c deleted file mode 100644 index fa941b9..0000000 --- a/internal/ccall/vmalloc/vmlast.c +++ /dev/null @@ -1,399 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Allocation with freeing and reallocing of last allocated block only. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -static void *lastalloc(Vmalloc_t * vm, size_t size) -{ - reg Block_t *tp, *next; - reg Seg_t *seg, *last; - reg size_t s; - reg Vmdata_t *vd = vm->data; - reg int local; - size_t orgsize = 0; - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return NIL(void *); - SETLOCK(vd, local); - orgsize = size; - } - - size = size < ALIGN ? ALIGN : ROUND(size, ALIGN); - for (;;) { - for (last = NIL(Seg_t *), seg = vd->seg; seg; - last = seg, seg = seg->next) { - if (!(tp = seg->free) || (SIZE(tp) + sizeof(Head_t)) < size) - continue; - if (last) { - last->next = seg->next; - seg->next = vd->seg; - vd->seg = seg; - } - goto got_block; - } - - /* there is no usable free space in region, try extending */ - if ((tp = (*_Vmextend) (vm, size, NIL(Vmsearch_f)))) { - seg = SEG(tp); - goto got_block; - } else if (vd->mode & VM_AGAIN) - vd->mode &= ~VM_AGAIN; - else - goto done; - } - - got_block: - if ((s = SIZE(tp)) >= size) { - next = (Block_t *) ((Vmuchar_t *) tp + size); - SIZE(next) = s - size; - SEG(next) = seg; - seg->free = next; - } else - seg->free = NIL(Block_t *); - - vd->free = seg->last = tp; - - if (!local && (vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, NIL(Vmuchar_t *), (Vmuchar_t *) tp, orgsize, 0); - - done: - CLRLOCK(vd, local); - return (void *) tp; -} - -static int lastfree(Vmalloc_t * vm, reg void * data) -{ - reg Seg_t *seg; - reg Block_t *fp; - reg size_t s; - reg Vmdata_t *vd = vm->data; - reg int local; - - if (!data) - return 0; - if (!(local = vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - if (data != (void *) vd->free) { - if (!local && vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, vm->disc); - CLRLOCK(vd, 0); - return -1; - } - - seg = vd->seg; - if (!local && (vd->mode & VM_TRACE) && _Vmtrace) { - if (seg->free) - s = (Vmuchar_t *) (seg->free) - (Vmuchar_t *) data; - else - s = (Vmuchar_t *) BLOCK(seg->baddr) - (Vmuchar_t *) data; - (*_Vmtrace) (vm, (Vmuchar_t *) data, NIL(Vmuchar_t *), s, 0); - } - - vd->free = NIL(Block_t *); - fp = (Block_t *) data; - SEG(fp) = seg; - SIZE(fp) = - ((Vmuchar_t *) BLOCK(seg->baddr) - (Vmuchar_t *) data) - - sizeof(Head_t); - seg->free = fp; - seg->last = NIL(Block_t *); - - CLRLOCK(vd, 0); - return 0; -} - -static void *lastresize(Vmalloc_t * vm, reg void * data, size_t size, - int type) -{ - reg Block_t *tp; - reg Seg_t *seg; - reg int *d, *ed; - reg size_t oldsize; - reg ssize_t s, ds; - reg Vmdata_t *vd = vm->data; - reg int local; - reg void *addr; - void *orgdata = 0; - size_t orgsize = 0; - - if (!data) { - oldsize = 0; - data = lastalloc(vm, size); - goto done; - } - if (size <= 0) { - (void) lastfree(vm, data); - return NIL(void *); - } - - if (!(local = vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - orgdata = data; - orgsize = size; - } - - if (data == (void *) vd->free) - seg = vd->seg; - else { /* see if it was one of ours */ - for (seg = vd->seg; seg; seg = seg->next) - if (data >= seg->addr && data < (void *) seg->baddr) - break; - if (!seg || (VLONG(data) % ALIGN) != 0 || - (seg->last && (Vmuchar_t *) data > (Vmuchar_t *) seg->last)) { - CLRLOCK(vd, 0); - return NIL(void *); - } - } - - /* set 's' to be the current available space */ - if (data != seg->last) { - if (seg->last && (Vmuchar_t *) data < (Vmuchar_t *) seg->last) - oldsize = (Vmuchar_t *) seg->last - (Vmuchar_t *) data; - else - oldsize = (Vmuchar_t *) BLOCK(seg->baddr) - (Vmuchar_t *) data; - s = -1; - } else { - s = (Vmuchar_t *) BLOCK(seg->baddr) - (Vmuchar_t *) data; - if (!(tp = seg->free)) - oldsize = s; - else { - oldsize = (Vmuchar_t *) tp - (Vmuchar_t *) data; - seg->free = NIL(Block_t *); - } - } - - size = size < ALIGN ? ALIGN : ROUND(size, ALIGN); - if (s < 0 || (ssize_t) size > s) { - if (s >= 0) { /* amount to extend */ - ds = size - s; - ds = ROUND(ds, vd->incr); - addr = (*vm->disc->memoryf) (vm, seg->addr, seg->extent, - seg->extent + ds, vm->disc); - if (addr == seg->addr) { - s += ds; - seg->size += ds; - seg->extent += ds; - seg->baddr += ds; - SIZE(BLOCK(seg->baddr)) = BUSY; - } else - goto do_alloc; - } else { - do_alloc: - if (!(type & (VM_RSMOVE | VM_RSCOPY))) - data = NIL(void *); - else { - tp = vd->free; - if (!(addr = KPVALLOC(vm, size, lastalloc))) { - vd->free = tp; - data = NIL(void *); - } else { - if (type & VM_RSCOPY) { - ed = (int *) data; - d = (int *) addr; - ds = oldsize < size ? oldsize : size; - INTCOPY(d, ed, ds); - } - - if (s >= 0 && seg != vd->seg) { - tp = (Block_t *) data; - SEG(tp) = seg; - SIZE(tp) = s - sizeof(Head_t); - seg->free = tp; - } - - /* new block and size */ - data = addr; - seg = vd->seg; - s = (Vmuchar_t *) BLOCK(seg->baddr) - - (Vmuchar_t *) data; - seg->free = NIL(Block_t *); - } - } - } - } - - if (data) { - if (s >= (ssize_t) (size + sizeof(Head_t))) { - tp = (Block_t *) ((Vmuchar_t *) data + size); - SEG(tp) = seg; - SIZE(tp) = (s - size) - sizeof(Head_t); - seg->free = tp; - } - - vd->free = seg->last = (Block_t *) data; - - if (!local && (vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, (Vmuchar_t *) orgdata, (Vmuchar_t *) data, - orgsize, 0); - } - - CLRLOCK(vd, 0); - - done:if (data && (type & VM_RSZERO) && size > oldsize) { - d = (int *) ((char *) data + oldsize); - size -= oldsize; - INTZERO(d, size); - } - - return data; -} - - -static long lastaddr(Vmalloc_t * vm, void * addr) -{ - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST) && ISLOCK(vd, 0)) - return -1L; - if (!vd->free || addr < (void *) vd->free - || addr >= (void *) vd->seg->baddr) - return -1L; - else - return (Vmuchar_t *) addr - (Vmuchar_t *) vd->free; -} - -static long lastsize(Vmalloc_t * vm, void * addr) -{ - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST) && ISLOCK(vd, 0)) - return -1L; - if (!vd->free || addr != (void *) vd->free) - return -1L; - else if (vd->seg->free) - return (Vmuchar_t *) vd->seg->free - (Vmuchar_t *) addr; - else - return (Vmuchar_t *) vd->seg->baddr - (Vmuchar_t *) addr - - sizeof(Head_t); -} - -static int lastcompact(Vmalloc_t * vm) -{ - reg Block_t *fp; - reg Seg_t *seg, *next; - reg size_t s; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - for (seg = vd->seg; seg; seg = next) { - next = seg->next; - - if (!(fp = seg->free)) - continue; - - seg->free = NIL(Block_t *); - if (seg->size == (s = SIZE(fp) & ~BITS)) - s = seg->extent; - else - s += sizeof(Head_t); - - if ((*_Vmtruncate) (vm, seg, s, 1) < 0) - seg->free = fp; - } - - if ((vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, (Vmuchar_t *) 0, (Vmuchar_t *) 0, 0, 0); - - CLRLOCK(vd, 0); - return 0; -} - -static void *lastalign(Vmalloc_t * vm, size_t size, size_t align) -{ - reg Vmuchar_t *data; - reg size_t s, orgsize = 0, orgalign = 0; - reg Seg_t *seg; - reg Block_t *next; - reg int local; - reg Vmdata_t *vd = vm->data; - - if (size <= 0 || align <= 0) - return NIL(void *); - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return NIL(void *); - SETLOCK(vd, local); - orgsize = size; - orgalign = align; - } - - size = size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN); - align = MULTIPLE(align, ALIGN); - - s = size + align; - if (!(data = (Vmuchar_t *) KPVALLOC(vm, s, lastalloc))) - goto done; - - /* find the segment containing this block */ - for (seg = vd->seg; seg; seg = seg->next) - if (seg->last == (Block_t *) data) - break; - /**/ ASSERT(seg); - - /* get a suitably aligned address */ - if ((s = (size_t) (VLONG(data) % align)) != 0) - data += align - s; - /**/ ASSERT((VLONG(data) % align) == 0); - - /* free the unused tail */ - next = (Block_t *) (data + size); - if ((s = (seg->baddr - (Vmuchar_t *) next)) >= sizeof(Block_t)) { - SEG(next) = seg; - SIZE(next) = s - sizeof(Head_t); - seg->free = next; - } - - vd->free = seg->last = (Block_t *) data; - - if (!local && !(vd->mode & VM_TRUST) && _Vmtrace - && (vd->mode & VM_TRACE)) - (*_Vmtrace) (vm, NIL(Vmuchar_t *), data, orgsize, orgalign); - - done: - CLRLOCK(vd, local); - - return (void *) data; -} - -/* Public method for free-1 allocation */ -static Vmethod_t _Vmlast = { - lastalloc, - lastresize, - lastfree, - lastaddr, - lastsize, - lastcompact, - lastalign, - VM_MTLAST -}; - -Vmethod_t* Vmlast = &_Vmlast; diff --git a/internal/ccall/vmalloc/vmopen.c b/internal/ccall/vmalloc/vmopen.c deleted file mode 100644 index 97c7ffb..0000000 --- a/internal/ccall/vmalloc/vmopen.c +++ /dev/null @@ -1,159 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Opening a new region of allocation. -** Note that because of possible exotic memory types, -** all region data must be stored within the space given -** by the discipline. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -typedef struct _vminit_ { - Vmdata_t vd; /* space for the region itself */ - Seg_t seg; /* space for segment */ - Block_t block; /* space for a block */ - Head_t head; /* space for the fake header */ - char a[3 * ALIGN]; /* extra to fuss with alignment */ -} Vminit_t; - -/** - * @param disc discipline to get segments - * @param meth method to manage space - * @param mode type of region - */ -Vmalloc_t *vmopen(Vmdisc_t * disc, Vmethod_t * meth, int mode) -{ - reg Vmalloc_t *vm; - reg Vmdata_t *vd; - reg size_t s, a, incr; - reg Block_t *b; - reg Seg_t *seg; - Vmuchar_t *addr; - reg Vmemory_f memoryf; - reg int e; - - if (!meth || !disc || !(memoryf = disc->memoryf)) - return NIL(Vmalloc_t *); - - GETPAGESIZE(_Vmpagesize); - - /* note that Vmalloc_t space must be local to process since that's - where the meth&disc function addresses are going to be stored */ - if (!(vm = (Vmalloc_t *) vmalloc(Vmheap, sizeof(Vmalloc_t)))) - return NIL(Vmalloc_t *); - vm->meth = *meth; - vm->disc = disc; - vm->file = NIL(char *); - vm->line = 0; - - if (disc->exceptf) { - addr = NIL(Vmuchar_t *); - if ((e = - (*disc->exceptf) (vm, VM_OPEN, (void *) (&addr), - disc)) != 0) { - if (e < 0 || !addr) - goto open_error; - - /* align this address */ - if ((a = (size_t) (VLONG(addr) % ALIGN)) != 0) - addr += ALIGN - a; - - /* see if it's a valid region */ - vd = (Vmdata_t *) addr; - if ((vd->mode & meth->meth) != 0) { - vm->data = vd; - return vm; - } else { - open_error: - vmfree(Vmheap, vm); - return NIL(Vmalloc_t *); - } - } - } - - /* make sure vd->incr is properly rounded */ - incr = disc->round <= 0 ? _Vmpagesize : disc->round; - incr = MULTIPLE(incr, ALIGN); - - /* get space for region data */ - s = ROUND(sizeof(Vminit_t), incr); - if (!(addr = (Vmuchar_t *) (*memoryf) (vm, NIL(void *), 0, s, disc))) { - vmfree(Vmheap, vm); - return NIL(Vmalloc_t *); - } - - /* make sure that addr is aligned */ - if ((a = (size_t) (VLONG(addr) % ALIGN)) != 0) - addr += ALIGN - a; - - /* initialize region */ - vd = (Vmdata_t *) addr; - vd->mode = (mode & VM_FLAGS) | meth->meth; - vd->incr = incr; - vd->pool = 0; - vd->free = vd->wild = NIL(Block_t *); - - if (vd->mode & (VM_TRACE | VM_MTDEBUG)) - vd->mode &= ~VM_TRUST; - - if (vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE)) { - vd->root = NIL(Block_t *); - for (e = S_TINY - 1; e >= 0; --e) - TINY(vd)[e] = NIL(Block_t *); - for (e = S_CACHE; e >= 0; --e) - CACHE(vd)[e] = NIL(Block_t *); - incr = sizeof(Vmdata_t); - } else - incr = OFFSET(Vmdata_t, root); - - vd->seg = (Seg_t *) (addr + ROUND(incr, ALIGN)); - /**/ ASSERT(VLONG(vd->seg) % ALIGN == 0); - - seg = vd->seg; - seg->next = NIL(Seg_t *); - seg->vm = vm; - seg->addr = (void *) (addr - (a ? ALIGN - a : 0)); - seg->extent = s; - seg->baddr = addr + s - (a ? ALIGN : 0); - seg->size = s; /* this size is larger than usual so that the segment - will not be freed until the region is closed. */ - seg->free = NIL(Block_t *); - - /* make a data block out of the remainder */ - b = SEGBLOCK(seg); - SEG(b) = seg; - SIZE(b) = seg->baddr - (Vmuchar_t *) b - 2 * sizeof(Head_t); - *SELF(b) = b; - /**/ ASSERT(SIZE(b) % ALIGN == 0); - /**/ ASSERT(VLONG(b) % ALIGN == 0); - - /* make a fake header for next block in case of noncontiguous segments */ - SEG(NEXT(b)) = seg; - SIZE(NEXT(b)) = BUSY | PFREE; - - if (vd->mode & (VM_MTLAST | VM_MTPOOL)) - seg->free = b; - else - vd->wild = b; - - vm->data = vd; - - /* put into linked list of regions */ - vm->next = Vmheap->next; - Vmheap->next = vm; - - return vm; -} diff --git a/internal/ccall/vmalloc/vmpool.c b/internal/ccall/vmalloc/vmpool.c deleted file mode 100644 index e0b1c9b..0000000 --- a/internal/ccall/vmalloc/vmpool.c +++ /dev/null @@ -1,282 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -#define POOLFREE 0x55555555L /* block free indicator */ - -/* Method for pool allocation. -** All elements in a pool have the same size. -** The following fields of Vmdata_t are used as: -** pool: size of a block. -** free: list of free blocks. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -static void *poolalloc(Vmalloc_t * vm, reg size_t size) -{ - reg Vmdata_t *vd = vm->data; - reg Block_t *tp, *next; - reg size_t s; - reg Seg_t *seg; - reg int local; - - if (size <= 0) - return NIL(void *); - else if (size != vd->pool) { - if (vd->pool <= 0) - vd->pool = size; - else - return NIL(void *); - } - - if (!(local = vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - } - - if ((tp = vd->free)) { /* there is a ready free block */ - vd->free = SEGLINK(tp); - goto done; - } - - size = ROUND(size, ALIGN); - - /* look thru all segments for a suitable free block */ - for (tp = NIL(Block_t *), seg = vd->seg; seg; seg = seg->next) { - if ((tp = seg->free) && - (s = (SIZE(tp) & ~BITS) + sizeof(Head_t)) >= size) - goto has_blk; - } - - for (;;) { /* must extend region */ - if ((tp = - (*_Vmextend) (vm, ROUND(size, vd->incr), NIL(Vmsearch_f)))) { - s = (SIZE(tp) & ~BITS) + sizeof(Head_t); - seg = SEG(tp); - goto has_blk; - } else if (vd->mode & VM_AGAIN) - vd->mode &= ~VM_AGAIN; - else - goto done; - } - - has_blk: /* if get here, (tp, s, seg) must be well-defined */ - next = (Block_t *) ((Vmuchar_t *) tp + size); - if ((s -= size) <= (size + sizeof(Head_t))) { - for (; s >= size; s -= size) { - SIZE(next) = POOLFREE; - SEGLINK(next) = vd->free; - vd->free = next; - next = (Block_t *) ((Vmuchar_t *) next + size); - } - seg->free = NIL(Block_t *); - } else { - SIZE(next) = s - sizeof(Head_t); - SEG(next) = seg; - seg->free = next; - } - - done: - if (!local && (vd->mode & VM_TRACE) && _Vmtrace && tp) - (*_Vmtrace) (vm, NIL(Vmuchar_t *), (Vmuchar_t *) tp, vd->pool, 0); - - CLRLOCK(vd, 0); - return (void *) tp; -} - -static long pooladdr(Vmalloc_t * vm, reg void * addr) -{ - reg Block_t *bp, *tp; - reg Vmuchar_t *laddr, *baddr; - reg size_t size; - reg Seg_t *seg; - reg long offset; - reg Vmdata_t *vd = vm->data; - reg int local; - - if (!(local = vd->mode & VM_TRUST)) { - GETLOCAL(vd, local); - if (ISLOCK(vd, local)) - return -1L; - SETLOCK(vd, local); - } - - offset = -1L; - for (seg = vd->seg; seg; seg = seg->next) { - laddr = (Vmuchar_t *) SEGBLOCK(seg); - baddr = seg->baddr - sizeof(Head_t); - if ((Vmuchar_t *) addr < laddr || (Vmuchar_t *) addr >= baddr) - continue; - - /* the block that has this address */ - size = ROUND(vd->pool, ALIGN); - tp = (Block_t *) (laddr + - (((Vmuchar_t *) addr - laddr) / size) * size); - - /* see if this block has been freed */ - if (SIZE(tp) == POOLFREE) /* may be a coincidence - make sure */ - for (bp = vd->free; bp; bp = SEGLINK(bp)) - if (bp == tp) - goto done; - - offset = (Vmuchar_t *) addr - (Vmuchar_t *) tp; - goto done; - } - - done: - CLRLOCK(vd, local); - return offset; -} - -static int poolfree(reg Vmalloc_t * vm, reg void * data) -{ - reg Block_t *bp; - reg Vmdata_t *vd = vm->data; - reg int local; - - if (!data) - return 0; - - if (!(local = vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0) || vd->pool <= 0) - return -1; - - if (KPVADDR(vm, data, pooladdr) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, - vm->disc); - return -1; - } - - SETLOCK(vd, 0); - } - - bp = (Block_t *) data; - SIZE(bp) = POOLFREE; - SEGLINK(bp) = vd->free; - vd->free = bp; - - if (!local && (vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, (Vmuchar_t *) data, NIL(Vmuchar_t *), vd->pool, - 0); - - CLRLOCK(vd, local); - return 0; -} - -static void *poolresize(Vmalloc_t * vm, void * data, size_t size, - int type) -{ - reg Vmdata_t *vd = vm->data; - - NOTUSED(type); - - if (!data) { - if ((data = poolalloc(vm, size)) && (type & VM_RSZERO)) { - reg int *d = (int *) data, *ed = - (int *) ((char *) data + size); - do { - *d++ = 0; - } while (d < ed); - } - return data; - } - if (size == 0) { - (void) poolfree(vm, data); - return NIL(void *); - } - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - - if (size != vd->pool || KPVADDR(vm, data, pooladdr) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, - vm->disc); - return NIL(void *); - } - - if ((vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, (Vmuchar_t *) data, (Vmuchar_t *) data, size, - 0); - } - - return data; -} - -static long poolsize(Vmalloc_t * vm, void * addr) -{ - return pooladdr(vm, addr) == 0 ? (long) vm->data->pool : -1L; -} - -static int poolcompact(Vmalloc_t * vm) -{ - reg Block_t *fp; - reg Seg_t *seg, *next; - reg size_t s; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - for (seg = vd->seg; seg; seg = next) { - next = seg->next; - - if (!(fp = seg->free)) - continue; - - seg->free = NIL(Block_t *); - if (seg->size == (s = SIZE(fp) & ~BITS)) - s = seg->extent; - else - s += sizeof(Head_t); - - if ((*_Vmtruncate) (vm, seg, s, 1) < 0) - seg->free = fp; - } - - if ((vd->mode & VM_TRACE) && _Vmtrace) - (*_Vmtrace) (vm, (Vmuchar_t *) 0, (Vmuchar_t *) 0, 0, 0); - - CLRLOCK(vd, 0); - return 0; -} - -static void *poolalign(Vmalloc_t * vm, size_t size, size_t align) -{ - NOTUSED(vm); - NOTUSED(size); - NOTUSED(align); - return NIL(void *); -} - -/* Public interface */ -static Vmethod_t _Vmpool = { - poolalloc, - poolresize, - poolfree, - pooladdr, - poolsize, - poolcompact, - poolalign, - VM_MTPOOL -}; - -Vmethod_t* Vmpool = &_Vmpool; diff --git a/internal/ccall/vmalloc/vmprivate.c b/internal/ccall/vmalloc/vmprivate.c deleted file mode 100644 index 5cb14dc..0000000 --- a/internal/ccall/vmalloc/vmprivate.c +++ /dev/null @@ -1,264 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -#if 0 /* not used */ -static char *Version = "\n@(#)Vmalloc (AT&T Labs - kpv) 1999-08-05\0\n"; -#endif - - -/* Private code used in the vmalloc library -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -/** - * Get more memory for a region - * - * @param vm region to increase in size - * @param size desired amount of space - * @param searchf tree search function - */ -static Block_t *vmextend(reg Vmalloc_t * vm, size_t size, - Vmsearch_f searchf) -{ - reg size_t s; - reg Seg_t *seg; - reg Block_t *bp, *t; - reg Vmuchar_t *addr; - reg Vmdata_t *vd = vm->data; - reg Vmemory_f memoryf = vm->disc->memoryf; - reg Vmexcept_f exceptf = vm->disc->exceptf; - - GETPAGESIZE(_Vmpagesize); - - if (vd->incr <= 0) /* this is just _Vmheap on the first call */ - vd->incr = 4 * _Vmpagesize; - - /* Get slightly more for administrative data */ - s = size + sizeof(Seg_t) + sizeof(Block_t) + sizeof(Head_t) + - 2 * ALIGN; - if (s <= size) /* size was too large and we have wrapped around */ - return NIL(Block_t *); - if ((size = ROUND(s, vd->incr)) < s) - return NIL(Block_t *); - - /* see if we can extend the current segment */ - if (!(seg = vd->seg)) - addr = NIL(Vmuchar_t *); - else { - if (!vd->wild || SEG(vd->wild) != seg) - s = 0; - else { - s = SIZE(vd->wild) + sizeof(Head_t); - if ((s = (s / vd->incr) * vd->incr) == size) - size += vd->incr; - } - addr = (Vmuchar_t *) (*memoryf) (vm, seg->addr, seg->extent, - seg->extent + size - s, vm->disc); - if (!addr) - seg = NIL(Seg_t *); - else { - /**/ ASSERT(addr == (Vmuchar_t *) seg->addr); - addr += seg->extent; - size -= s; - } - } - - while (!addr) { /* try to get space */ - if ((addr = - (Vmuchar_t *) (*memoryf) (vm, NIL(void *), 0, size, - vm->disc))) - break; - - /* check with exception handler to see if we should continue */ - if (!exceptf) - return NIL(Block_t *); - else { - int rv, lock; - lock = vd->mode & VM_LOCK; - vd->mode &= ~VM_LOCK; - rv = (*exceptf) (vm, VM_NOMEM, (void *) size, vm->disc); - vd->mode |= lock; - if (rv <= 0) { - if (rv == 0) - vd->mode |= VM_AGAIN; - return NIL(Block_t *); - } - } - } - - if (seg) { /* extending current segment */ - bp = BLOCK(seg->baddr); - /**/ ASSERT((SIZE(bp) & ~BITS) == 0); - /**/ ASSERT(SEG(bp) == seg); - - if (vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE)) { - if (!ISPFREE(SIZE(bp))) - SIZE(bp) = size - sizeof(Head_t); - else { - /**/ ASSERT(searchf); - bp = LAST(bp); - if (bp == vd->wild) - vd->wild = NIL(Block_t *); - else - REMOVE(vd, bp, INDEX(SIZE(bp)), t, (*searchf)); - SIZE(bp) += size; - } - } else { - if (seg->free) { - bp = seg->free; - seg->free = NIL(Block_t *); - SIZE(bp) += size; - } else - SIZE(bp) = size - sizeof(Head_t); - } - - seg->size += size; - seg->extent += size; - seg->baddr += size; - } else { /* creating a new segment */ - reg Seg_t *sp, *lastsp; - - if ((s = (size_t) (VLONG(addr) % ALIGN)) != 0) - addr += ALIGN - s; - - seg = (Seg_t *) addr; - seg->vm = vm; - seg->addr = (void *) (addr - (s ? ALIGN - s : 0)); - seg->extent = size; - seg->baddr = addr + size - (s ? 2 * ALIGN : 0); - seg->free = NIL(Block_t *); - bp = SEGBLOCK(seg); - SEG(bp) = seg; - SIZE(bp) = seg->baddr - (Vmuchar_t *) bp - 2 * sizeof(Head_t); - - /* NOTE: for Vmbest, Vmdebug and Vmprofile the region's segment list - is reversely ordered by addresses. This is so that we can easily - check for the wild block. - */ - lastsp = NIL(Seg_t *); - sp = vd->seg; - if (vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE)) - for (; sp; lastsp = sp, sp = sp->next) - if (seg->addr > sp->addr) - break; - seg->next = sp; - if (lastsp) - lastsp->next = seg; - else - vd->seg = seg; - - seg->size = SIZE(bp); - } - - /* make a fake header for possible segmented memory */ - t = NEXT(bp); - SEG(t) = seg; - SIZE(t) = BUSY; - - /* see if the wild block is still wild */ - if ((t = vd->wild) && (seg = SEG(t)) != vd->seg) { - CLRPFREE(SIZE(NEXT(t))); - if (vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE)) { - SIZE(t) |= BUSY | JUNK; - LINK(t) = CACHE(vd)[C_INDEX(SIZE(t))]; - CACHE(vd)[C_INDEX(SIZE(t))] = t; - } else - seg->free = t; - - vd->wild = NIL(Block_t *); - } - - return bp; -} - -/** - * Truncate a segment if possible - * - * @param vm containing region - * @param seg the one to be truncated - * @param size amount of free space - * @param exact amount given was exact - */ -static int vmtruncate(Vmalloc_t * vm, Seg_t * seg, size_t size, int exact) -{ - reg void *caddr; - reg Seg_t *last; - reg Vmdata_t *vd = vm->data; - reg Vmemory_f memoryf = vm->disc->memoryf; - - caddr = seg->addr; - - if (size < seg->size) { - reg size_t less; - - /* the truncated amount must satisfy the discipline requirement */ - if ((less = vm->disc->round) <= 0) - less = _Vmpagesize; - less = (size / less) * less; - less = (less / ALIGN) * ALIGN; - - if (!exact) /* only truncate multiples of incr */ - less = (less / vd->incr) * vd->incr; - - if (less > 0 && size > less && (size - less) < sizeof(Block_t)) - less -= vd->incr; - - if (less <= 0 || - (*memoryf) (vm, caddr, seg->extent, seg->extent - less, - vm->disc) != caddr) - return -1; - - seg->extent -= less; - seg->size -= less; - seg->baddr -= less; - SIZE(BLOCK(seg->baddr)) = BUSY; - return 0; - } - - /* unlink segment from region */ - if (seg == vd->seg) { - vd->seg = seg->next; - last = NIL(Seg_t *); - } else { - for (last = vd->seg; last->next != seg; last = last->next); - last->next = seg->next; - } - - /* now delete it */ - if ((*memoryf) (vm, caddr, seg->extent, 0, vm->disc) == caddr) - return 0; - - /* space reduction failed, reinsert segment */ - if (last) { - seg->next = last->next; - last->next = seg; - } else { - seg->next = vd->seg; - vd->seg = seg; - } - return -1; -} - -/* Externally visible names but local to library */ -Vmextern_t _Vmextern = { vmextend, /* _Vmextend */ - vmtruncate, /* _Vmtruncate */ - 0, /* _Vmpagesize */ - NIL(char *(*)(char *, char *, int)), /* _Vmstrcpy */ - NIL(char *(*)(Vmulong_t, int)), /* _Vmitoa */ - NIL(void (*)(Vmalloc_t *, - Vmuchar_t *, Vmuchar_t *, size_t, size_t)), /* _Vmtrace */ - NIL(void (*)(Vmalloc_t *)) /* _Vmpfclose */ -}; diff --git a/internal/ccall/vmalloc/vmprofile.c b/internal/ccall/vmalloc/vmprofile.c deleted file mode 100644 index 5bc9db8..0000000 --- a/internal/ccall/vmalloc/vmprofile.c +++ /dev/null @@ -1,630 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Method to profile space usage. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 03/23/94. -*/ - -#define PFHASH(pf) ((pf)->data.data.hash) -#define PFVM(pf) ((pf)->data.data.vm) -#define PFFILE(pf) ((pf)->data.data.fm.file) -#define PFLINE(pf) ((pf)->line) -#define PFNAME(pf) ((pf)->data.f) -#define PFNALLOC(pf) ((pf)->data.data.nalloc) -#define PFALLOC(pf) ((pf)->data.data.alloc) -#define PFNFREE(pf) ((pf)->data.data.nfree) -#define PFFREE(pf) ((pf)->data.data.free) -#define PFREGION(pf) ((pf)->data.data.region) -#define PFMAX(pf) ((pf)->data.data.fm.max) - -typedef struct _pfdata_s Pfdata_t; -struct _pfdata_s { - Vmulong_t hash; /* hash value */ - union { - char *file; /* file name */ - Vmulong_t max; /* max busy space for region */ - } fm; - Vmalloc_t *vm; /* region alloc from */ - Pfobj_t *region; /* pointer to region record */ - Vmulong_t nalloc; /* number of alloc calls */ - Vmulong_t alloc; /* amount allocated */ - Vmulong_t nfree; /* number of free calls */ - Vmulong_t free; /* amount freed */ -}; -struct _pfobj_s { - Pfobj_t *next; /* next in linked list */ - int line; /* line #, 0 for name holder */ - union { - Pfdata_t data; - char f[1]; /* actual file name */ - } data; -}; - -static Pfobj_t **Pftable; /* hash table */ -#define PFTABLE 1019 /* table size */ -static Vmalloc_t *Vmpf; /* heap for our own use */ - -/** - * @param vm region allocating from - * @param file the file issuing the allocation request - * @param line line number - */ -static Pfobj_t *pfsearch(Vmalloc_t * vm, char *file, int line) -{ - reg Pfobj_t *pf, *last; - reg Vmulong_t h; - reg int n; - reg char *cp; - - if (!Vmpf && !(Vmpf = vmopen(Vmdcheap, Vmpool, 0))) - return NIL(Pfobj_t *); - - /* make hash table; PFTABLE'th slot hold regions' records */ - if (!Pftable) { - if (! - (Pftable = - (Pfobj_t **) vmalloc(Vmheap, - (PFTABLE + 1) * sizeof(Pfobj_t *)))) - return NIL(Pfobj_t *); - for (n = PFTABLE; n >= 0; --n) - Pftable[n] = NIL(Pfobj_t *); - } - - /* see if it's there with a combined hash value of vm,file,line */ - h = line + (((Vmulong_t) vm) >> 4); - for (cp = file; *cp; ++cp) - h += (h << 7) + ((*cp) & 0377) + 987654321L; - n = (int) (h % PFTABLE); - for (last = NIL(Pfobj_t *), pf = Pftable[n]; pf; - last = pf, pf = pf->next) - if (PFLINE(pf) == line && PFVM(pf) == vm - && strcmp(PFFILE(pf), file) == 0) - break; - - /* insert if not there yet */ - if (!pf) { - reg Pfobj_t *fn; - reg Pfobj_t *pfvm; - reg Vmulong_t hn; - - /* first get/construct the file name slot */ - hn = 0; - for (cp = file; *cp; ++cp) - hn += (hn << 7) + ((*cp) & 0377) + 987654321L; - n = (int) (hn % PFTABLE); - for (fn = Pftable[n]; fn; fn = fn->next) - if (PFLINE(fn) < 0 && strcmp(PFNAME(fn), file) == 0) - break; - if (!fn) { - reg size_t s; - s = sizeof(Pfobj_t) - sizeof(Pfdata_t) + strlen(file) + 1; - if (!(fn = (Pfobj_t *) vmalloc(Vmheap, s))) - return NIL(Pfobj_t *); - fn->next = Pftable[n]; - Pftable[n] = fn; - PFLINE(fn) = -1; - strcpy(PFNAME(fn), file); - } - - /* get region record; note that these are ordered by vm */ - last = NIL(Pfobj_t *); - for (pfvm = Pftable[PFTABLE]; pfvm; last = pfvm, pfvm = pfvm->next) - if (vm >= PFVM(pfvm)) - break; - if (!pfvm || PFVM(pfvm) > vm) { - if (!(pfvm = (Pfobj_t *) vmalloc(Vmpf, sizeof(Pfobj_t)))) - return NIL(Pfobj_t *); - if (last) { - pfvm->next = last->next; - last->next = pfvm; - } else { - pfvm->next = Pftable[PFTABLE]; - Pftable[PFTABLE] = pfvm; - } - PFNALLOC(pfvm) = PFALLOC(pfvm) = 0; - PFNFREE(pfvm) = PFFREE(pfvm) = 0; - PFMAX(pfvm) = 0; - PFVM(pfvm) = vm; - PFLINE(pfvm) = 0; - } - - if (!(pf = (Pfobj_t *) vmalloc(Vmpf, sizeof(Pfobj_t)))) - return NIL(Pfobj_t *); - n = (int) (h % PFTABLE); - pf->next = Pftable[n]; - Pftable[n] = pf; - PFLINE(pf) = line; - PFFILE(pf) = PFNAME(fn); - PFREGION(pf) = pfvm; - PFVM(pf) = vm; - PFNALLOC(pf) = 0; - PFALLOC(pf) = 0; - PFNFREE(pf) = 0; - PFFREE(pf) = 0; - PFHASH(pf) = h; - } else if (last) { /* do a move-to-front */ - last->next = pf->next; - pf->next = Pftable[n]; - Pftable[n] = pf; - } - - return pf; -} - -static void pfclose(Vmalloc_t * vm) -{ - reg int n; - reg Pfobj_t *pf, *next, *last; - - /* free all records related to region vm */ - for (n = PFTABLE; n >= 0; --n) { - for (last = NIL(Pfobj_t *), pf = Pftable[n]; pf;) { - next = pf->next; - - if (PFLINE(pf) >= 0 && PFVM(pf) == vm) { - if (last) - last->next = next; - else - Pftable[n] = next; - vmfree(Vmpf, pf); - } else - last = pf; - - pf = next; - } - } -} - -static void pfsetinfo(Vmalloc_t * vm, Vmuchar_t * data, size_t size, - char *file, int line) -{ - reg Pfobj_t *pf; - reg Vmulong_t s; - - /* let vmclose knows that there are records for region vm */ - _Vmpfclose = pfclose; - - if (!file || line <= 0) { - file = ""; - line = 0; - } - - if ((pf = pfsearch(vm, file, line))) { - PFALLOC(pf) += size; - PFNALLOC(pf) += 1; - } - PFOBJ(data) = pf; - PFSIZE(data) = size; - - if (pf) { /* update region statistics */ - pf = PFREGION(pf); - PFALLOC(pf) += size; - PFNALLOC(pf) += 1; - if ((s = PFALLOC(pf) - PFFREE(pf)) > PFMAX(pf)) - PFMAX(pf) = s; - } -} - -/* sort by file names and line numbers */ -static Pfobj_t *pfsort(Pfobj_t * pf) -{ - reg Pfobj_t *one, *two, *next; - reg int cmp; - - if (!pf->next) - return pf; - - /* partition to two equal size lists */ - one = two = NIL(Pfobj_t *); - while (pf) { - next = pf->next; - pf->next = one; - one = pf; - - if ((pf = next)) { - next = pf->next; - pf->next = two; - two = pf; - pf = next; - } - } - - /* sort and merge the lists */ - one = pfsort(one); - two = pfsort(two); - for (pf = next = NIL(Pfobj_t *);;) { /* make sure that the "<>" file comes first */ - if (PFLINE(one) == 0 && PFLINE(two) == 0) - cmp = PFVM(one) > PFVM(two) ? 1 : -1; - else if (PFLINE(one) == 0) - cmp = -1; - else if (PFLINE(two) == 0) - cmp = 1; - else if ((cmp = strcmp(PFFILE(one), PFFILE(two))) == 0) { - cmp = PFLINE(one) - PFLINE(two); - if (cmp == 0) - cmp = PFVM(one) > PFVM(two) ? 1 : -1; - } - - if (cmp < 0) { - if (!pf) - pf = one; - else - next->next = one; - next = one; - if (!(one = one->next)) { - if (two) - next->next = two; - return pf; - } - } else { - if (!pf) - pf = two; - else - next->next = two; - next = two; - if (!(two = two->next)) { - if (one) - next->next = one; - return pf; - } - } - } -} - -static char *pfsummary(char *buf, Vmulong_t na, Vmulong_t sa, - Vmulong_t nf, Vmulong_t sf, Vmulong_t max, - Vmulong_t size) -{ - buf = (*_Vmstrcpy) (buf, "n_alloc", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (na, -1), ':'); - buf = (*_Vmstrcpy) (buf, "n_free", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (nf, -1), ':'); - buf = (*_Vmstrcpy) (buf, "s_alloc", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (sa, -1), ':'); - buf = (*_Vmstrcpy) (buf, "s_free", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (sf, -1), ':'); - if (max > 0) { - buf = (*_Vmstrcpy) (buf, "max_busy", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (max, -1), ':'); - buf = (*_Vmstrcpy) (buf, "extent", '='); - buf = (*_Vmstrcpy) (buf, (*_Vmitoa) (size, -1), ':'); - } - *buf++ = '\n'; - - return buf; -} - -/* print profile data */ -int vmprofile(Vmalloc_t * vm, int fd) -{ - reg Pfobj_t *pf, *list, *next, *last; - reg int n; - reg Vmulong_t nalloc, alloc, nfree, free; - reg Seg_t *seg; - char buf[1024], *bufp, *endbuf; -#define INITBUF() (bufp = buf, endbuf = buf+sizeof(buf)-128) -#define CHKBUF() (bufp >= endbuf ? (write(fd,buf,bufp-buf), bufp=buf) : bufp) -#define FLSBUF() (bufp > buf ? write(fd,buf,bufp-buf) : 0) - - if (fd < 0) - return -1; - - /* initialize functions from vmtrace.c that we use below */ - if ((n = vmtrace(-1)) >= 0) - vmtrace(n); - - alloc = free = nalloc = nfree = 0; - list = NIL(Pfobj_t *); - for (n = PFTABLE - 1; n >= 0; --n) { - for (pf = Pftable[n], last = NIL(Pfobj_t *); pf;) { - next = pf->next; - - if (PFLINE(pf) < 0 || (vm && vm != PFVM(pf))) { - last = pf; - goto next_pf; - } - - /* remove from hash table */ - if (last) - last->next = next; - else - Pftable[n] = next; - - /* put on output list */ - pf->next = list; - list = pf; - nalloc += PFNALLOC(pf); - alloc += PFALLOC(pf); - nfree += PFNFREE(pf); - free += PFFREE(pf); - - next_pf: - pf = next; - } - } - - INITBUF(); - bufp = (*_Vmstrcpy) (bufp, "ALLOCATION USAGE SUMMARY", ':'); - bufp = pfsummary(bufp, nalloc, alloc, nfree, free, 0, 0); - - /* print regions' summary data */ - for (pf = Pftable[PFTABLE]; pf; pf = pf->next) { - if (vm && PFVM(pf) != vm) - continue; - alloc = 0; - for (seg = PFVM(pf)->data->seg; seg; seg = seg->next) - alloc += seg->extent; - bufp = (*_Vmstrcpy) (bufp, "region", '='); - bufp = (*_Vmstrcpy) (bufp, (*_Vmitoa) (VLONG(PFVM(pf)), 0), ':'); - bufp = pfsummary(bufp, PFNALLOC(pf), PFALLOC(pf), - PFNFREE(pf), PFFREE(pf), PFMAX(pf), alloc); - } - - /* sort then output detailed profile */ - list = pfsort(list); - for (pf = list; pf;) { /* compute summary for file */ - alloc = free = nalloc = nfree = 0; - for (last = pf; last; last = last->next) { - if (strcmp(PFFILE(last), PFFILE(pf)) != 0) - break; - nalloc += PFNALLOC(pf); - alloc += PFALLOC(last); - nfree += PFNFREE(last); - free += PFFREE(last); - } - CHKBUF(); - bufp = (*_Vmstrcpy) (bufp, "file", '='); - bufp = (*_Vmstrcpy) (bufp, PFFILE(pf)[0] ? PFFILE(pf) : "<>", ':'); - bufp = pfsummary(bufp, nalloc, alloc, nfree, free, 0, 0); - - while (pf != last) { /* detailed data */ - CHKBUF(); - bufp = (*_Vmstrcpy) (bufp, "\tline", '='); - bufp = (*_Vmstrcpy) (bufp, (*_Vmitoa) (PFLINE(pf), -1), ':'); - bufp = (*_Vmstrcpy) (bufp, "region", '='); - bufp = - (*_Vmstrcpy) (bufp, (*_Vmitoa) (VLONG(PFVM(pf)), 0), ':'); - bufp = - pfsummary(bufp, PFNALLOC(pf), PFALLOC(pf), PFNFREE(pf), - PFFREE(pf), 0, 0); - - /* reinsert into hash table */ - next = pf->next; - n = (int) (PFHASH(pf) % PFTABLE); - pf->next = Pftable[n]; - Pftable[n] = pf; - pf = next; - } - } - - FLSBUF(); - return 0; -} - -static void *pfalloc(Vmalloc_t * vm, size_t size) -{ - reg size_t s; - reg void *data; - reg char *file; - reg int line; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - if (!(vd->mode & VM_TRUST) && ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - - s = ROUND(size, ALIGN) + PF_EXTRA; - if (!(data = KPVALLOC(vm, s, (*(Vmbest->allocf))))) - goto done; - - pfsetinfo(vm, (Vmuchar_t *) data, size, file, line); - - if (!(vd->mode & VM_TRUST) && (vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, NIL(Vmuchar_t *), (Vmuchar_t *) data, size, 0); - } - done: - CLRLOCK(vd, 0); - return data; -} - -static int pffree(Vmalloc_t * vm, void * data) -{ - reg Pfobj_t *pf; - reg size_t s; - reg char *file; - reg int line; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - - if (!data) - return 0; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - if (KPVADDR(vm, data, Vmbest->addrf) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, vm->disc); - CLRLOCK(vd, 0); - return -1; - } - - pf = PFOBJ(data); - s = PFSIZE(data); - if (pf) { - PFNFREE(pf) += 1; - PFFREE(pf) += s; - pf = PFREGION(pf); - PFNFREE(pf) += 1; - PFFREE(pf) += s; - } - - if (!(vd->mode & VM_TRUST) && (vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, (Vmuchar_t *) data, NIL(Vmuchar_t *), s, 0); - } - - CLRLOCK(vd, 0); - return (*(Vmbest->freef)) (vm, data); -} - -static void *pfresize(Vmalloc_t * vm, void * data, size_t size, - int type) -{ - reg Pfobj_t *pf; - reg size_t s, news; - reg void *addr; - reg char *file; - reg int line; - reg size_t oldsize; - reg Vmdata_t *vd = vm->data; - - if (!data) { - oldsize = 0; - addr = pfalloc(vm, size); - goto done; - } - if (size == 0) { - (void) pffree(vm, data); - return NIL(void *); - } - - VMFILELINE(vm, file, line); - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - } - - if (KPVADDR(vm, data, Vmbest->addrf) != 0) { - if (vm->disc->exceptf) - (void) (*vm->disc->exceptf) (vm, VM_BADADDR, data, vm->disc); - CLRLOCK(vd, 0); - return NIL(void *); - } - - pf = PFOBJ(data); - s = oldsize = PFSIZE(data); - - news = ROUND(size, ALIGN) + PF_EXTRA; - if ((addr = - KPVRESIZE(vm, data, news, (type & ~VM_RSZERO), - Vmbest->resizef))) { - if (pf) { - PFFREE(pf) += s; - PFNFREE(pf) += 1; - pf = PFREGION(pf); - PFFREE(pf) += s; - PFNFREE(pf) += 1; - pfsetinfo(vm, (Vmuchar_t *) addr, size, file, line); - } - - if (!(vd->mode & VM_TRUST) && (vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, (Vmuchar_t *) data, (Vmuchar_t *) addr, size, - 0); - } - } else if (pf) { /* reset old info */ - PFALLOC(pf) -= s; - PFNALLOC(pf) -= 1; - pf = PFREGION(pf); - PFALLOC(pf) -= s; - PFNALLOC(pf) -= 1; - file = PFFILE(pf); - line = PFLINE(pf); - pfsetinfo(vm, (Vmuchar_t *) data, s, file, line); - } - - CLRLOCK(vd, 0); - - done:if (addr && (type & VM_RSZERO) && oldsize < size) { - reg Vmuchar_t *d = (Vmuchar_t *) addr + oldsize, *ed = - (Vmuchar_t *) addr + size; - do { - *d++ = 0; - } while (d < ed); - } - - return addr; -} - -static long pfsize(Vmalloc_t * vm, void * addr) -{ - return (*Vmbest->addrf) (vm, addr) != 0 ? -1L : (long) PFSIZE(addr); -} - -static long pfaddr(Vmalloc_t * vm, void * addr) -{ - return (*Vmbest->addrf) (vm, addr); -} - -static int pfcompact(Vmalloc_t * vm) -{ - return (*Vmbest->compactf) (vm); -} - -static void *pfalign(Vmalloc_t * vm, size_t size, size_t align) -{ - reg size_t s; - reg void *data; - reg char *file; - reg int line; - reg Vmdata_t *vd = vm->data; - - VMFILELINE(vm, file, line); - - if (!(vd->mode & VM_TRUST) && ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - - s = (size <= TINYSIZE ? TINYSIZE : ROUND(size, ALIGN)) + PF_EXTRA; - if (!(data = KPVALIGN(vm, s, align, Vmbest->alignf))) - goto done; - - pfsetinfo(vm, (Vmuchar_t *) data, size, file, line); - - if (!(vd->mode & VM_TRUST) && (vd->mode & VM_TRACE) && _Vmtrace) { - vm->file = file; - vm->line = line; - (*_Vmtrace) (vm, NIL(Vmuchar_t *), (Vmuchar_t *) data, size, - align); - } - done: - CLRLOCK(vd, 0); - return data; -} - -static Vmethod_t _Vmprofile = { - pfalloc, - pfresize, - pffree, - pfaddr, - pfsize, - pfcompact, - pfalign, - VM_MTPROFILE -}; - -Vmethod_t* Vmprofile = &_Vmprofile; diff --git a/internal/ccall/vmalloc/vmregion.c b/internal/ccall/vmalloc/vmregion.c deleted file mode 100644 index 82da037..0000000 --- a/internal/ccall/vmalloc/vmregion.c +++ /dev/null @@ -1,24 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Return the containing region of an allocated piece of memory. -** Beware: this only works with Vmbest and Vmtrace. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -Vmalloc_t *vmregion(reg void * addr) -{ - return addr ? VM(BLOCK(addr)) : NIL(Vmalloc_t *); -} diff --git a/internal/ccall/vmalloc/vmsegment.c b/internal/ccall/vmalloc/vmsegment.c deleted file mode 100644 index 4debe1f..0000000 --- a/internal/ccall/vmalloc/vmsegment.c +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Get the segment containing this address -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 02/07/95 -*/ - -/** - * @param vm region - * @param addr address - */ -void *vmsegment(Vmalloc_t * vm, void * addr) -{ - reg Seg_t *seg; - reg Vmdata_t *vd = vm->data; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return NIL(void *); - SETLOCK(vd, 0); - } - - for (seg = vd->seg; seg; seg = seg->next) - if ((Vmuchar_t *) addr >= (Vmuchar_t *) seg->addr && - (Vmuchar_t *) addr < (Vmuchar_t *) seg->baddr) - break; - - CLRLOCK(vd, 0); - return seg ? (void *) seg->addr : NIL(void *); -} diff --git a/internal/ccall/vmalloc/vmset.c b/internal/ccall/vmalloc/vmset.c deleted file mode 100644 index 9751a16..0000000 --- a/internal/ccall/vmalloc/vmset.c +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - - -/* Set the control flags for a region. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ -/** - * @param vm region being worked on - * @param flags flags must be in VM_FLAGS - * @param on !=0 if turning on, else turning off - */ -int vmset(reg Vmalloc_t * vm, int flags, int on) -{ - reg int mode; - reg Vmdata_t *vd = vm->data; - - if (flags == 0 && on == 0) - return vd->mode; - - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return 0; - SETLOCK(vd, 0); - } - - mode = vd->mode; - - if (on) - vd->mode |= (flags & VM_FLAGS); - else - vd->mode &= ~(flags & VM_FLAGS); - - if (vd->mode & (VM_TRACE | VM_MTDEBUG)) - vd->mode &= ~VM_TRUST; - - CLRLOCK(vd, 0); - - return mode; -} diff --git a/internal/ccall/vmalloc/vmstat.c b/internal/ccall/vmalloc/vmstat.c deleted file mode 100644 index 6f68d22..0000000 --- a/internal/ccall/vmalloc/vmstat.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Get statistics from a region. -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -int vmstat(Vmalloc_t * vm, Vmstat_t * st) -{ - reg Seg_t *seg; - reg Block_t *b, *endb; - reg size_t s = 0; - reg Vmdata_t *vd = vm->data; - - if (!st) - return -1; - if (!(vd->mode & VM_TRUST)) { - if (ISLOCK(vd, 0)) - return -1; - SETLOCK(vd, 0); - } - - st->n_busy = st->n_free = 0; - st->s_busy = st->s_free = st->m_busy = st->m_free = 0; - st->n_seg = 0; - st->extent = 0; - - if (vd->mode & VM_MTLAST) - st->n_busy = 0; - else if ((vd->mode & VM_MTPOOL) && (s = vd->pool) > 0) { - s = ROUND(s, ALIGN); - for (b = vd->free; b; b = SEGLINK(b)) - st->n_free += 1; - } - - for (seg = vd->seg; seg; seg = seg->next) { - st->n_seg += 1; - st->extent += seg->extent; - - b = SEGBLOCK(seg); - endb = BLOCK(seg->baddr); - - if (vd->mode & (VM_MTDEBUG | VM_MTBEST | VM_MTPROFILE)) { - while (b < endb) { - s = SIZE(b) & ~BITS; - if (ISJUNK(SIZE(b)) || !ISBUSY(SIZE(b))) { - if (s > st->m_free) - st->m_free = s; - st->s_free += s; - st->n_free += 1; - } else { /* get the real size */ - if (vd->mode & VM_MTDEBUG) - s = DBSIZE(DB2DEBUG(DATA(b))); - else if (vd->mode & VM_MTPROFILE) - s = PFSIZE(DATA(b)); - if (s > st->m_busy) - st->m_busy = s; - st->s_busy += s; - st->n_busy += 1; - } - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + - (SIZE(b) & ~BITS)); - } - } else if (vd->mode & VM_MTLAST) { - if ((s = - seg->free ? (SIZE(seg->free) + sizeof(Head_t)) : 0) > 0) { - st->s_free += s; - st->n_free += 1; - } - if ((s = ((char *) endb - (char *) b) - s) > 0) { - st->s_busy += s; - st->n_busy += 1; - } - } else if ((vd->mode & VM_MTPOOL) && s > 0) { - if (seg->free) - st->n_free += (SIZE(seg->free) + sizeof(Head_t)) / s; - st->n_busy += - ((seg->baddr - (Vmuchar_t *) b) - sizeof(Head_t)) / s; - } - } - - if ((vd->mode & VM_MTPOOL) && s > 0) { - st->n_busy -= st->n_free; - if (st->n_busy > 0) - st->s_busy = (st->m_busy = vd->pool) * st->n_busy; - if (st->n_free > 0) - st->s_free = (st->m_free = vd->pool) * st->n_free; - } - - CLRLOCK(vd, 0); - return 0; -} diff --git a/internal/ccall/vmalloc/vmstrdup.c b/internal/ccall/vmalloc/vmstrdup.c deleted file mode 100644 index 3482c94..0000000 --- a/internal/ccall/vmalloc/vmstrdup.c +++ /dev/null @@ -1,29 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "vmhdr.h" -/* - * return a copy of s using vmalloc - */ - -char *vmstrdup(Vmalloc_t * v, register const char *s) -{ - register char *t; - register int n; - - return ((t = - vmalloc(v, n = - strlen(s) + 1)) ? (char *) memcpy(t, s, - n) : (char *) 0); -} diff --git a/internal/ccall/vmalloc/vmtrace.c b/internal/ccall/vmalloc/vmtrace.c deleted file mode 100644 index e6cc29c..0000000 --- a/internal/ccall/vmalloc/vmtrace.c +++ /dev/null @@ -1,184 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Turn on tracing for regions -** -** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. -*/ - -static int Trfile = -1; -static char Trbuf[128]; - -static char *trstrcpy(char *to, char *from, int endc) -{ - reg int n; - - n = strlen(from); - memcpy(to, from, n); - to += n; - if ((*to = endc)) - to += 1; - return to; -} - -/* - * convert a long value to an ascii representation - * - * @param v value to convert - * @param type =0 base-16, >0: unsigned base-10, <0: signed base-10 - */ -static char *tritoa(Vmulong_t v, int type) -{ - char *s; - - s = &Trbuf[sizeof(Trbuf) - 1]; - *s-- = '\0'; - - if (type == 0) { /* base-16 */ - reg char *digit = "0123456789abcdef"; - do { - *s-- = digit[v & 0xf]; - v >>= 4; - } while (v); - *s-- = 'x'; - *s-- = '0'; - } else if (type > 0) { /* unsigned base-10 */ - do { - *s-- = (char) ('0' + (v % 10)); - v /= 10; - } while (v); - } else { /* signed base-10 */ - int sign = ((long) v < 0); - if (sign) - v = (Vmulong_t) (-((long) v)); - do { - *s-- = (char) ('0' + (v % 10)); - v /= 10; - } while (v); - if (sign) - *s-- = '-'; - } - - return s + 1; -} - -/** - * generate a trace of some call - * @param vm region call was made from - * @param newaddr old data address - * @param newaddr new data address - * @param size size of piece - * @param align alignment - */ -static void trtrace(Vmalloc_t * vm, - Vmuchar_t * oldaddr, Vmuchar_t * newaddr, size_t size, - size_t align) -{ - char buf[1024], *bufp, *endbuf; - reg Vmdata_t *vd = vm->data; - reg char *file = NIL(char *); - reg int line = 0; - int type; -#define SLOP 32 - - if (oldaddr == (Vmuchar_t *) (-1)) { /* printing busy blocks */ - type = 0; - oldaddr = NIL(Vmuchar_t *); - } else { - type = vd->mode & VM_METHODS; - VMFILELINE(vm, file, line); - } - - if (Trfile < 0) - return; - - bufp = buf; - endbuf = buf + sizeof(buf); - bufp = trstrcpy(bufp, tritoa(oldaddr ? VLONG(oldaddr) : 0L, 0), ':'); - bufp = trstrcpy(bufp, tritoa(newaddr ? VLONG(newaddr) : 0L, 0), ':'); - bufp = trstrcpy(bufp, tritoa((Vmulong_t) size, 1), ':'); - bufp = trstrcpy(bufp, tritoa((Vmulong_t) align, 1), ':'); - bufp = trstrcpy(bufp, tritoa(VLONG(vm), 0), ':'); - if (type & VM_MTBEST) - bufp = trstrcpy(bufp, "best", ':'); - else if (type & VM_MTLAST) - bufp = trstrcpy(bufp, "last", ':'); - else if (type & VM_MTPOOL) - bufp = trstrcpy(bufp, "pool", ':'); - else if (type & VM_MTPROFILE) - bufp = trstrcpy(bufp, "profile", ':'); - else if (type & VM_MTDEBUG) - bufp = trstrcpy(bufp, "debug", ':'); - else - bufp = trstrcpy(bufp, "busy", ':'); - if (file && file[0] && line > 0 - && (bufp + strlen(file) + SLOP) < endbuf) { - bufp = trstrcpy(bufp, file, ','); - bufp = trstrcpy(bufp, tritoa((Vmulong_t) line, 1), ':'); - } - *bufp++ = '\n'; - *bufp = '\0'; - - write(Trfile, buf, (bufp - buf)); -} - -int vmtrace(int file) -{ - int fd; - - _Vmstrcpy = trstrcpy; - _Vmitoa = tritoa; - _Vmtrace = trtrace; - - fd = Trfile; - Trfile = file; - return fd; -} - -int vmtrbusy(Vmalloc_t * vm) -{ - Seg_t *seg; - Vmdata_t *vd = vm->data; - - if (Trfile < 0 - || !(vd->mode & (VM_MTBEST | VM_MTDEBUG | VM_MTPROFILE))) - return -1; - - for (seg = vd->seg; seg; seg = seg->next) { - Block_t *b, *endb; - Vmuchar_t *data; - size_t s; - - for (b = SEGBLOCK(seg), endb = BLOCK(seg->baddr); b < endb;) { - if (ISJUNK(SIZE(b)) || !ISBUSY(SIZE(b))) - continue; - - data = DATA(b); - if (vd->mode & VM_MTDEBUG) { - data = DB2DEBUG(data); - s = DBSIZE(data); - } else if (vd->mode & VM_MTPROFILE) - s = PFSIZE(data); - else - s = SIZE(b) & ~BITS; - - trtrace(vm, (Vmuchar_t *) (-1), data, s, 0); - - b = (Block_t *) ((Vmuchar_t *) DATA(b) + (SIZE(b) & ~BITS)); - } - } - - return 0; -} diff --git a/internal/ccall/vmalloc/vmwalk.c b/internal/ccall/vmalloc/vmwalk.c deleted file mode 100644 index 54b0ace..0000000 --- a/internal/ccall/vmalloc/vmwalk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "vmhdr.h" - -/* Walks all segments created in region(s) -** -** Written by Kiem-Phong Vo, kpv@research.att.com (02/08/96) -*/ - -int vmwalk(Vmalloc_t * vm, - int (*segf) (Vmalloc_t *, void *, size_t, Vmdisc_t *)) -{ - reg Seg_t *seg; - reg int rv; - - if (!vm) { - for (vm = Vmheap; vm; vm = vm->next) { - if (!(vm->data->mode & VM_TRUST) && ISLOCK(vm->data, 0)) - continue; - - SETLOCK(vm->data, 0); - for (seg = vm->data->seg; seg; seg = seg->next) { - rv = (*segf) (vm, seg->addr, seg->extent, vm->disc); - if (rv < 0) - return rv; - } - CLRLOCK(vm->data, 0); - } - } else { - if (!(vm->data->mode & VM_TRUST) && ISLOCK(vm->data, 0)) - return -1; - - SETLOCK(vm->data, 0); - for (seg = vm->data->seg; seg; seg = seg->next) { - rv = (*segf) (vm, seg->addr, seg->extent, vm->disc); - if (rv < 0) - return rv; - } - CLRLOCK(vm->data, 0); - } - - return 0; -} diff --git a/internal/ccall/vpsc/block.cpp b/internal/ccall/vpsc/block.cpp deleted file mode 100644 index 7ece81b..0000000 --- a/internal/ccall/vpsc/block.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/** - * \brief A block is a group of variables that must be moved together to improve - * the goal function without violating already active constraints. - * The variables in a block are spanned by a tree of active constraints. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#include -#include "pairingheap/PairingHeap.h" -#include "constraint.h" -#include "block.h" -#include "blocks.h" -#ifdef RECTANGLE_OVERLAP_LOGGING -#include -using std::ios; -using std::ofstream; -using std::endl; -#endif -using std::vector; - -typedef vector::iterator Cit; - -void Block::addVariable(Variable *v) { - v->block=this; - vars->push_back(v); - weight+=v->weight; - wposn += v->weight * (v->desiredPosition - v->offset); - posn=wposn/weight; -} -Block::Block(Variable *v) { - timeStamp=0; - posn=weight=wposn=0; - in=NULL; - out=NULL; - deleted=false; - vars=new vector; - if(v!=NULL) { - v->offset=0; - addVariable(v); - } -} - -double Block::desiredWeightedPosition() { - double wp = 0; - for (vector::iterator v=vars->begin();v!=vars->end();v++) { - wp += ((*v)->desiredPosition - (*v)->offset) * (*v)->weight; - } - return wp; -} -Block::~Block(void) -{ - delete vars; - delete in; - delete out; -} -void Block::setUpInConstraints() { - setUpConstraintHeap(in,true); -} -void Block::setUpOutConstraints() { - setUpConstraintHeap(out,false); -} -void Block::setUpConstraintHeap(PairingHeap* &h,bool in) { - delete h; - h = new PairingHeap(&compareConstraints); - for (vector::iterator i=vars->begin();i!=vars->end();i++) { - Variable *v=*i; - vector *cs=in?&(v->in):&(v->out); - for (vector::iterator j=cs->begin();j!=cs->end();j++) { - Constraint *c=*j; - c->timeStamp=blockTimeCtr; - if (c->left->block != this && in || c->right->block != this && !in) { - h->insert(c); - } - } - } -} -void Block::merge(Block* b, Constraint* c) { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<" merging on: "<<*c<<",c->left->offset="<left->offset<<",c->right->offset="<right->offset<right->offset - c->left->offset - c->gap; - Block *l=c->left->block; - Block *r=c->right->block; - if (vars->size() < b->vars->size()) { - r->merge(l,c,dist); - } else { - l->merge(r,c,-dist); - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" merged block="<<(b->deleted?*this:*b)<findMinInConstraint(); - in->merge(b->in); -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" merged heap: "<<*in<findMinOutConstraint(); - out->merge(b->out); -} -Constraint *Block::findMinInConstraint() { - Constraint *v = NULL; - vector outOfDate; - while (!in->isEmpty()) { - v = in->findMin(); - Block *lb=v->left->block; - Block *rb=v->right->block; - // rb may not be this if called between merge and mergeIn -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<" checking constraint ... "<<*v; - f<<" timestamps: left="<timeStamp<<" right="<timeStamp<<" constraint="<timeStamp<slack()<0) { - f<<" violated internal constraint found! "<<*v<timeStamp < lb->timeStamp) { - // block at other end of constraint has been moved since this - in->deleteMin(); - outOfDate.push_back(v); -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" reinserting out of date (reinsert later)"<::iterator i=outOfDate.begin();i!=outOfDate.end();i++) { - v=*i; - v->timeStamp=blockTimeCtr; - in->insert(v); - } - if(in->isEmpty()) { - v=NULL; - } else { - v=in->findMin(); - } - return v; -} -Constraint *Block::findMinOutConstraint() { - if(out->isEmpty()) return NULL; - Constraint *v = out->findMin(); - while (v->left->block == v->right->block) { - out->deleteMin(); - if(out->isEmpty()) return NULL; - v = out->findMin(); - } - return v; -} -void Block::deleteMinInConstraint() { - in->deleteMin(); -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"deleteMinInConstraint... "<deleteMin(); -} -inline bool Block::canFollowLeft(Constraint *c, Variable *last) { - return c->left->block==this && c->active && last!=c->left; -} -inline bool Block::canFollowRight(Constraint *c, Variable *last) { - return c->right->block==this && c->active && last!=c->right; -} - -// computes the derivative of v and the lagrange multipliers -// of v's out constraints (as the recursive sum of those below. -// Does not backtrack over u. -// also records the constraint with minimum lagrange multiplier -// in min_lm -double Block::compute_dfdv(Variable *v, Variable *u, Constraint *&min_lm) { - double dfdv=v->weight*(v->position() - v->desiredPosition); - for(vector::iterator it=v->out.begin();it!=v->out.end();it++) { - Constraint *c=*it; - if(canFollowRight(c,u)) { - dfdv+=c->lm=compute_dfdv(c->right,v,min_lm); - if(min_lm==NULL||c->lmlm) min_lm=c; - } - } - for(vector::iterator it=v->in.begin();it!=v->in.end();it++) { - Constraint *c=*it; - if(canFollowLeft(c,u)) { - dfdv-=c->lm=-compute_dfdv(c->left,v,min_lm); - if(min_lm==NULL||c->lmlm) min_lm=c; - } - } - return dfdv; -} - - -// computes dfdv for each variable and uses the sum of dfdv on either side of -// the constraint c to compute the lagrangian multiplier lm_c. -// The top level v and r are variables between which we want to find the -// constraint with the smallest lm. -// When we find r we pass NULL to subsequent recursive calls, -// thus r=NULL indicates constraints are not on the shortest path. -// Similarly, m is initially NULL and is only assigned a value if the next -// variable to be visited is r or if a possible min constraint is returned from -// a nested call (rather than NULL). -// Then, the search for the m with minimum lm occurs as we return from -// the recursion (checking only constraints traversed left-to-right -// in order to avoid creating any new violations). -Block::Pair Block::compute_dfdv_between(Variable* r, Variable* v, Variable* u, - Direction dir = NONE, bool changedDirection = false) { - double dfdv=v->weight*(v->position() - v->desiredPosition); - Constraint *m=NULL; - for(Cit it(v->in.begin());it!=v->in.end();it++) { - Constraint *c=*it; - if(canFollowLeft(c,u)) { - if(dir==RIGHT) { - changedDirection = true; - } - if(c->left==r) { - r=NULL; m=c; - } - Pair p=compute_dfdv_between(r,c->left,v, - LEFT,changedDirection); - dfdv -= c->lm = -p.first; - if(r && p.second) - m = p.second; - } - } - for(Cit it(v->out.begin());it!=v->out.end();it++) { - Constraint *c=*it; - if(canFollowRight(c,u)) { - if(dir==LEFT) { - changedDirection = true; - } - if(c->right==r) { - r=NULL; m=c; - } - Pair p=compute_dfdv_between(r,c->right,v, - RIGHT,changedDirection); - dfdv += c->lm = p.first; - if(r && p.second) - m = changedDirection && c->lm < p.second->lm - ? c - : p.second; - } - } - return Pair(dfdv,m); -} - -// resets LMs for all active constraints to 0 by -// traversing active constraint tree starting from v, -// not back tracking over u -void Block::reset_active_lm(Variable *v, Variable *u) { - for(vector::iterator it=v->out.begin();it!=v->out.end();it++) { - Constraint *c=*it; - if(canFollowRight(c,u)) { - c->lm=0; - reset_active_lm(c->right,v); - } - } - for(vector::iterator it=v->in.begin();it!=v->in.end();it++) { - Constraint *c=*it; - if(canFollowLeft(c,u)) { - c->lm=0; - reset_active_lm(c->left,v); - } - } -} -/** - * finds the constraint with the minimum lagrange multiplier, that is, the constraint - * that most wants to split - */ -Constraint *Block::findMinLM() { - Constraint *min_lm=NULL; - reset_active_lm(vars->front(),NULL); - compute_dfdv(vars->front(),NULL,min_lm); - return min_lm; -} -Constraint *Block::findMinLMBetween(Variable* lv, Variable* rv) { - Constraint *min_lm=NULL; - reset_active_lm(vars->front(),NULL); - min_lm=compute_dfdv_between(rv,lv,NULL).second; - return min_lm; -} - -// populates block b by traversing the active constraint tree adding variables as they're -// visited. Starts from variable v and does not backtrack over variable u. -void Block::populateSplitBlock(Block *b, Variable *v, Variable *u) { - b->addVariable(v); - for (vector::iterator c=v->in.begin();c!=v->in.end();c++) { - if (canFollowLeft(*c,u)) - populateSplitBlock(b, (*c)->left, v); - } - for (vector::iterator c=v->out.begin();c!=v->out.end();c++) { - if (canFollowRight(*c,u)) - populateSplitBlock(b, (*c)->right, v); - } -} -/** - * Block needs to be split because of a violated constraint between vl and vr. - * We need to search the active constraint tree between l and r and find the constraint - * with min lagrangrian multiplier and split at that point. - * Returns the split constraint - */ -Constraint* Block::splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb) { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<" need to split between: "<<*vl<<" and "<<*vr<active=false; - l=new Block(); - populateSplitBlock(l,c->left,c->right); - r=new Block(); - populateSplitBlock(r,c->right,c->left); -} - -/** - * Computes the cost (squared euclidean distance from desired positions) of the - * current positions for variables in this block - */ -double Block::cost() { - double c = 0; - for (vector::iterator v=vars->begin();v!=vars->end();v++) { - double diff = (*v)->position() - (*v)->desiredPosition; - c += (*v)->weight * diff * diff; - } - return c; -} -ostream& operator <<(ostream &os, const Block &b) -{ - os<<"Block:"; - for(vector::iterator v=b.vars->begin();v!=b.vars->end();v++) { - os<<" "<<**v; - } - if(b.deleted) { - os<<" Deleted!"; - } - return os; -} diff --git a/internal/ccall/vpsc/block.h b/internal/ccall/vpsc/block.h deleted file mode 100644 index 093abfc..0000000 --- a/internal/ccall/vpsc/block.h +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * \brief A block is a group of variables that must be moved together to improve - * the goal function without violating already active constraints. - * The variables in a block are spanned by a tree of active constraints. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#ifndef SEEN_REMOVEOVERLAP_BLOCK_H -#define SEEN_REMOVEOVERLAP_BLOCK_H - -#include -#include -class Variable; -class Constraint; -template class PairingHeap; -class StupidPriorityQueue; - -class Block -{ - friend std::ostream& operator <<(std::ostream &os,const Block &b); -public: - std::vector *vars; - double posn; - double weight; - double wposn; - Block(Variable *v=NULL); - ~Block(void); - Constraint* findMinLM(); - Constraint* findMinLMBetween(Variable* lv, Variable* rv); - Constraint* findMinInConstraint(); - Constraint* findMinOutConstraint(); - void deleteMinInConstraint(); - void deleteMinOutConstraint(); - double desiredWeightedPosition(); - void merge(Block *b, Constraint *c, double dist); - void merge(Block *b, Constraint *c); - void mergeIn(Block *b); - void mergeOut(Block *b); - void split(Block *&l, Block *&r, Constraint *c); - Constraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb); - void setUpInConstraints(); - void setUpOutConstraints(); - double cost(); - bool deleted; - long timeStamp; - PairingHeap *in; - PairingHeap *out; -private: - typedef enum {NONE, LEFT, RIGHT} Direction; - typedef std::pair Pair; - void reset_active_lm(Variable *v, Variable *u); - double compute_dfdv(Variable *v, Variable *u, Constraint *&min_lm); - Pair compute_dfdv_between( - Variable*, Variable*, Variable*, Direction, bool); - bool canFollowLeft(Constraint *c, Variable *last); - bool canFollowRight(Constraint *c, Variable *last); - void populateSplitBlock(Block *b, Variable *v, Variable *u); - void addVariable(Variable *v); - void setUpConstraintHeap(PairingHeap* &h,bool in); -}; - -#endif // SEEN_REMOVEOVERLAP_BLOCK_H diff --git a/internal/ccall/vpsc/blocks.cpp b/internal/ccall/vpsc/blocks.cpp deleted file mode 100644 index 7e25ae4..0000000 --- a/internal/ccall/vpsc/blocks.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/** - * \brief A block structure defined over the variables - * - * A block structure defined over the variables such that each block contains - * 1 or more variables, with the invariant that all constraints inside a block - * are satisfied by keeping the variables fixed relative to one another - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include "blocks.h" -#include "block.h" -#include "constraint.h" -#ifdef RECTANGLE_OVERLAP_LOGGING -#include -using std::ios; -using std::ofstream; -using std::endl; -#endif -using std::set; -using std::vector; -using std::iterator; -using std::list; -using std::copy; - -long blockTimeCtr; - -Blocks::Blocks(const int n, Variable *vs[]) : vs(vs),nvs(n) { - blockTimeCtr=0; - for(int i=0;i::iterator i=begin();i!=end();i++) { - delete *i; - } - clear(); -} - -/** - * returns a list of variables with total ordering determined by the constraint - * DAG - */ -list *Blocks::totalOrder() { - list *order = new list; - for(int i=0;ivisited=false; - } - for(int i=0;iin.size()==0) { - dfsVisit(vs[i],order); - } - } - return order; -} -// Recursive depth first search giving total order by pushing nodes in the DAG -// onto the front of the list when we finish searching them -void Blocks::dfsVisit(Variable *v, list *order) { - v->visited=true; - vector::iterator it=v->out.begin(); - for(;it!=v->out.end();it++) { - Constraint *c=*it; - if(!c->right->visited) { - dfsVisit(c->right, order); - } - } -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<" order="<<*v<push_front(v); -} -/** - * Processes incoming constraints, most violated to least, merging with the - * neighbouring (left) block until no more violated constraints are found - */ -void Blocks::mergeLeft(Block *r) { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"mergeLeft called on "<<*r<timeStamp=++blockTimeCtr; - r->setUpInConstraints(); - Constraint *c=r->findMinInConstraint(); - while (c != NULL && c->slack()<0) { -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<"mergeLeft on constraint: "<<*c<deleteMinInConstraint(); - Block *l = c->left->block; - if (l->in==NULL) l->setUpInConstraints(); - double dist = c->right->offset - c->left->offset - c->gap; - if (r->vars->size() < l->vars->size()) { - dist=-dist; - std::swap(l, r); - } - blockTimeCtr++; - r->merge(l, c, dist); - r->mergeIn(l); - r->timeStamp=blockTimeCtr; - removeBlock(l); - c=r->findMinInConstraint(); - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<"merged "<<*r<setUpOutConstraints(); - Constraint *c = l->findMinOutConstraint(); - while (c != NULL && c->slack()<0) { -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<"mergeRight on constraint: "<<*c<deleteMinOutConstraint(); - Block *r = c->right->block; - r->setUpOutConstraints(); - double dist = c->left->offset + c->gap - c->right->offset; - if (l->vars->size() > r->vars->size()) { - dist=-dist; - std::swap(l, r); - } - l->merge(r, c, dist); - l->mergeOut(r); - removeBlock(r); - c=l->findMinOutConstraint(); - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<"merged "<<*l<deleted=true; - //erase(doomed); -} -void Blocks::cleanup() { - vector bcopy(begin(),end()); - for(vector::iterator i=bcopy.begin();i!=bcopy.end();i++) { - Block *b=*i; - if(b->deleted) { - erase(b); - delete b; - } - } -} -/** - * Splits block b across constraint c into two new blocks, l and r (c's left - * and right sides respectively) - */ -void Blocks::split(Block *b, Block *&l, Block *&r, Constraint *c) { - b->split(l,r,c); -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"Split left: "<<*l<posn = b->posn; - r->wposn = r->posn * r->weight; - mergeLeft(l); - // r may have been merged! - r = c->right->block; - r->wposn = r->desiredWeightedPosition(); - r->posn = r->wposn / r->weight; - mergeRight(r); - removeBlock(b); - - insert(l); - insert(r); -} -/** - * returns the cost total squared distance of variables from their desired - * positions - */ -double Blocks::cost() { - double c = 0; - for(set::iterator i=begin();i!=end();i++) { - c += (*i)->cost(); - } - return c; -} - diff --git a/internal/ccall/vpsc/blocks.h b/internal/ccall/vpsc/blocks.h deleted file mode 100644 index 4e3a428..0000000 --- a/internal/ccall/vpsc/blocks.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * \brief A block structure defined over the variables - * - * A block structure defined over the variables such that each block contains - * 1 or more variables, with the invariant that all constraints inside a block - * are satisfied by keeping the variables fixed relative to one another - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#ifndef SEEN_REMOVEOVERLAP_BLOCKS_H -#define SEEN_REMOVEOVERLAP_BLOCKS_H - -#ifdef RECTANGLE_OVERLAP_LOGGING -#define LOGFILE "cRectangleOverlap.log" -#endif - -#include -#include - -class Block; -class Variable; -class Constraint; -/** - * A block structure defined over the variables such that each block contains - * 1 or more variables, with the invariant that all constraints inside a block - * are satisfied by keeping the variables fixed relative to one another - */ -class Blocks : public std::set -{ -public: - Blocks(const int n, Variable *vs[]); - ~Blocks(void); - void mergeLeft(Block *r); - void mergeRight(Block *l); - void split(Block *b, Block *&l, Block *&r, Constraint *c); - std::list *totalOrder(); - void cleanup(); - double cost(); -private: - void dfsVisit(Variable *v, std::list *order); - void removeBlock(Block *doomed); - Variable **vs; - int nvs; -}; - -extern long blockTimeCtr; -#endif // SEEN_REMOVEOVERLAP_BLOCKS_H diff --git a/internal/ccall/vpsc/constraint.cpp b/internal/ccall/vpsc/constraint.cpp deleted file mode 100644 index cc96955..0000000 --- a/internal/ccall/vpsc/constraint.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/** - * \brief A constraint determines a minimum or exact spacing required between - * two variables. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include "constraint.h" -#include -Constraint::Constraint(Variable *left, Variable *right, double gap, bool equality) -: left(left), - right(right), - gap(gap), - timeStamp(0), - active(false), - visited(false), - equality(equality) -{ - left->out.push_back(this); - right->in.push_back(this); -} -Constraint::~Constraint() { - Constraints::iterator i; - for(i=left->out.begin(); i!=left->out.end(); i++) { - if(*i==this) break; - } - left->out.erase(i); - for(i=right->in.begin(); i!=right->in.end(); i++) { - if(*i==this) break; - } - right->in.erase(i); -} -std::ostream& operator <<(std::ostream &os, const Constraint &c) -{ - if(&c==NULL) { - os<<"NULL"; - } else { - os<<*c.left<<"+"< - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#ifndef SEEN_REMOVEOVERLAP_CONSTRAINT_H -#define SEEN_REMOVEOVERLAP_CONSTRAINT_H - -#include -#include "variable.h" - -class Constraint -{ - friend std::ostream& operator <<(std::ostream &os,const Constraint &c); -public: - Variable *left; - Variable *right; - double gap; - double lm; - Constraint(Variable *left, Variable *right, double gap, bool equality=false); - ~Constraint(); - inline double slack() const { return right->position() - gap - left->position(); } - long timeStamp; - bool active; - bool visited; - bool equality; -}; -#include -#include "block.h" -static inline bool compareConstraints(Constraint *const &l, Constraint *const &r) { - double const sl = - l->left->block->timeStamp > l->timeStamp - ||l->left->block==l->right->block - ?-DBL_MAX:l->slack(); - double const sr = - r->left->block->timeStamp > r->timeStamp - ||r->left->block==r->right->block - ?-DBL_MAX:r->slack(); - if(sl==sr) { - // arbitrary choice based on id - if(l->left->id==r->left->id) { - if(l->right->idright->id) return true; - return false; - } - if(l->left->idleft->id) return true; - return false; - } - return sl < sr; -} - -#endif // SEEN_REMOVEOVERLAP_CONSTRAINT_H diff --git a/internal/ccall/vpsc/csolve_VPSC.cpp b/internal/ccall/vpsc/csolve_VPSC.cpp deleted file mode 100644 index fe43eb8..0000000 --- a/internal/ccall/vpsc/csolve_VPSC.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/** - * \brief Bridge for C programs to access solve_VPSC (which is in C++) - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - - -#include -#include -#include -#include -#include -#include -#include -#include "csolve_VPSC.h" -extern "C" { -Variable* newVariable(int id, double desiredPos, double weight) { - return new Variable(id,desiredPos,weight); -} -Constraint* newConstraint(Variable* left, Variable* right, double gap) { - return new Constraint(left,right,gap); -} -VPSC* newVPSC(int n, Variable* vs[], int m, Constraint* cs[]) { - return new VPSC(n,vs,m,cs); -} -VPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]) { - return (VPSC*)new IncVPSC(n,vs,m,cs); -} - -int genXConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs,int transitiveClosure) { -#ifdef WIN32 - Rectangle** rs = new Rectangle* [n]; -#else - Rectangle* rs[n]; -#endif - for(int i=0;isatisfy(); - } catch(const char *e) { - std::cerr << e << std::endl; - std::exit(1); - } -} -int getSplitCnt(IncVPSC *vpsc) { - return vpsc->splitCnt; -} -void deleteVPSC(VPSC *vpsc) { - assert(vpsc!=NULL); - delete vpsc; -} -void solveVPSC(VPSC* vpsc) { - vpsc->solve(); -} -void splitIncVPSC(IncVPSC* vpsc) { - vpsc->splitBlocks(); -} -void setVariableDesiredPos(Variable *v, double desiredPos) { - v->desiredPosition = desiredPos; -} -double getVariablePos(Variable *v) { - return v->position(); -} -void remapInConstraints(Variable *u, Variable *v, double dgap) { - for(Constraints::iterator i=u->in.begin();i!=u->in.end();i++) { - Constraint* c=*i; - c->right=v; - c->gap+=dgap; - v->in.push_back(c); - } - u->in.clear(); -} -void remapOutConstraints(Variable *u, Variable *v, double dgap) { - for(Constraints::iterator i=u->out.begin();i!=u->out.end();i++) { - Constraint* c=*i; - c->left=v; - c->gap+=dgap; - v->out.push_back(c); - } - u->out.clear(); -} -int getLeftVarID(Constraint *c) { - return c->left->id; -} -int getRightVarID(Constraint *c){ - return c->right->id; -} -double getSeparation(Constraint *c){ - return c->gap; -} -} diff --git a/internal/ccall/vpsc/csolve_VPSC.h b/internal/ccall/vpsc/csolve_VPSC.h deleted file mode 100644 index 1bbacbe..0000000 --- a/internal/ccall/vpsc/csolve_VPSC.h +++ /dev/null @@ -1,79 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * \brief Bridge for C programs to access solve_VPSC (which is in C++) - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef _CSOLVE_VPSC_H_ -#define _CSOLVE_VPSC_H_ -#ifdef __cplusplus -extern "C" { -#endif -#ifdef __cplusplus -class Variable; -#else -typedef struct Variable Variable; -#endif -Variable* newVariable(int id, double desiredPos, double weight); -void setVariableDesiredPos(Variable *, double desiredPos); -double getVariablePos(Variable*); - -#ifdef __cplusplus -class Constraint; -#else -typedef struct Constraint Constraint; -#endif -Constraint* newConstraint(Variable* left, Variable* right, double gap); - -#ifdef __cplusplus -class VPSC; -#else -typedef struct VPSC VPSC; -#endif -VPSC* newVPSC(int n, Variable* vs[], int m, Constraint* cs[]); -void deleteVPSC(VPSC*); -void deleteConstraint(Constraint*); -void deleteVariable(Variable*); -Constraint** newConstraints(int m); -void deleteConstraints(int m,Constraint**); -void remapInConstraints(Variable *u, Variable *v, double dgap); -void remapOutConstraints(Variable *u, Variable *v, double dgap); -int getLeftVarID(Constraint *c); -int getRightVarID(Constraint *c); -double getSeparation(Constraint *c); - -#ifndef HAVE_POINTF_S -typedef struct pointf_s { double x, y; } pointf; -typedef struct { pointf LL, UR; } boxf; -#endif -int genXConstraints(int n, boxf[], Variable** vs, Constraint*** cs, - int transitiveClosure); -int genYConstraints(int n, boxf[], Variable** vs, Constraint*** cs); - -void satisfyVPSC(VPSC*); -void solveVPSC(VPSC*); -#ifdef __cplusplus -class IncVPSC; -#else -typedef struct IncVPSC IncVPSC; -#endif -VPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]); -void splitIncVPSC(IncVPSC*); -int getSplitCnt(IncVPSC *vpsc); -#ifdef __cplusplus -} -#endif -#endif /* _CSOLVE_VPSC_H_ */ diff --git a/internal/ccall/vpsc/dummy.go b/internal/ccall/vpsc/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/vpsc/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/vpsc/generate-constraints.cpp b/internal/ccall/vpsc/generate-constraints.cpp deleted file mode 100644 index e40b58d..0000000 --- a/internal/ccall/vpsc/generate-constraints.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/** - * \brief Functions to automatically generate constraints for the rectangular - * node overlap removal problem. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include -#include -#include -#include "generate-constraints.h" -#include "constraint.h" - -using std::set; -using std::vector; - -std::ostream& operator <<(std::ostream &os, const Rectangle &r) { - os << "{"< NodeSet; - -struct Node { - Variable *v; - Rectangle *r; - double pos; - Node *firstAbove, *firstBelow; - NodeSet *leftNeighbours, *rightNeighbours; - Node(Variable *v, Rectangle *r, double p) : v(v),r(r),pos(p) { - firstAbove=firstBelow=NULL; - leftNeighbours=rightNeighbours=NULL; - assert(r->width()<1e40); - } - ~Node() { - delete leftNeighbours; - delete rightNeighbours; - } - void addLeftNeighbour(Node *u) { - leftNeighbours->insert(u); - } - void addRightNeighbour(Node *u) { - rightNeighbours->insert(u); - } - void setNeighbours(NodeSet *left, NodeSet *right) { - leftNeighbours=left; - rightNeighbours=right; - for(NodeSet::iterator i=left->begin();i!=left->end();i++) { - Node *v=*(i); - v->addRightNeighbour(this); - } - for(NodeSet::iterator i=right->begin();i!=right->end();i++) { - Node *v=*(i); - v->addLeftNeighbour(this); - } - } -}; -bool CmpNodePos::operator() (const Node* u, const Node* v) const { - if (u->pos < v->pos) { - return true; - } - if (v->pos < u->pos) { - return false; - } - return u < v; -} - -NodeSet* getLeftNeighbours(NodeSet &scanline,Node *v) { - NodeSet *leftv = new NodeSet; - NodeSet::iterator i=scanline.find(v); - while(i!=scanline.begin()) { - Node *u=*(--i); - if(u->r->overlapX(v->r)<=0) { - leftv->insert(u); - return leftv; - } - if(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) { - leftv->insert(u); - } - } - return leftv; -} -NodeSet* getRightNeighbours(NodeSet &scanline,Node *v) { - NodeSet *rightv = new NodeSet; - NodeSet::iterator i=scanline.find(v); - for(i++;i!=scanline.end(); i++) { - Node *u=*(i); - if(u->r->overlapX(v->r)<=0) { - rightv->insert(u); - return rightv; - } - if(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) { - rightv->insert(u); - } - } - return rightv; -} - -typedef enum {Open, Close} EventType; -struct Event { - EventType type; - Node *v; - double pos; - Event(EventType t, Node *v, double p) : type(t),v(v),pos(p) {}; -}; -Event **events; -int compare_events(const void *a, const void *b) { - Event *ea=*(Event**)a; - Event *eb=*(Event**)b; - if(ea->v->r==eb->v->r) { - // when comparing opening and closing from the same rect - // open must come first - if(ea->type==Open) return -1; - return 1; - } else if(ea->pos > eb->pos) { - return 1; - } else if(ea->pos < eb->pos) { - return -1; - } - return 0; -} - -/** - * Prepares constraints in order to apply VPSC horizontally. Assumes variables have already been created. - * useNeighbourLists determines whether or not a heuristic is used to deciding whether to resolve - * all overlap in the x pass, or leave some overlaps for the y pass. - */ -int generateXConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs, const bool useNeighbourLists) { - events=new Event*[2*n]; - int i,m,ctr=0; - for(i=0;idesiredPosition=rs[i]->getCentreX(); - Node *v = new Node(vars[i],rs[i],rs[i]->getCentreX()); - events[ctr++]=new Event(Open,v,rs[i]->getMinY()); - events[ctr++]=new Event(Close,v,rs[i]->getMaxY()); - } - qsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events ); - - NodeSet scanline; - vector constraints; - for(i=0;i<2*n;i++) { - Event *e=events[i]; - Node *v=e->v; - if(e->type==Open) { - scanline.insert(v); - if(useNeighbourLists) { - v->setNeighbours( - getLeftNeighbours(scanline,v), - getRightNeighbours(scanline,v) - ); - } else { - NodeSet::iterator it=scanline.find(v); - if(it!=scanline.begin()) { - Node *u=*--it; - v->firstAbove=u; - u->firstBelow=v; - } - it=scanline.find(v); - if(++it!=scanline.end()) { - Node *u=*it; - v->firstBelow=u; - u->firstAbove=v; - } - } - } else { - // Close event - int r; - if(useNeighbourLists) { - for(NodeSet::iterator i=v->leftNeighbours->begin(); - i!=v->leftNeighbours->end();i++ - ) { - Node *u=*i; - double sep = (v->r->width()+u->r->width())/2.0; - constraints.push_back(new Constraint(u->v,v->v,sep)); - r=u->rightNeighbours->erase(v); - } - - for(NodeSet::iterator i=v->rightNeighbours->begin(); - i!=v->rightNeighbours->end();i++ - ) { - Node *u=*i; - double sep = (v->r->width()+u->r->width())/2.0; - constraints.push_back(new Constraint(v->v,u->v,sep)); - r=u->leftNeighbours->erase(v); - } - } else { - Node *l=v->firstAbove, *r=v->firstBelow; - if(l!=NULL) { - double sep = (v->r->width()+l->r->width())/2.0; - constraints.push_back(new Constraint(l->v,v->v,sep)); - l->firstBelow=v->firstBelow; - } - if(r!=NULL) { - double sep = (v->r->width()+r->r->width())/2.0; - constraints.push_back(new Constraint(v->v,r->v,sep)); - r->firstAbove=v->firstAbove; - } - } - r=scanline.erase(v); - delete v; - } - delete e; - } - delete [] events; - cs=new Constraint*[m=constraints.size()]; - for(i=0;idesiredPosition=rs[i]->getCentreY(); - Node *v = new Node(vars[i],rs[i],rs[i]->getCentreY()); - events[ctr++]=new Event(Open,v,rs[i]->getMinX()); - events[ctr++]=new Event(Close,v,rs[i]->getMaxX()); - } - qsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events ); - NodeSet scanline; - vector constraints; - for(i=0;i<2*n;i++) { - Event *e=events[i]; - Node *v=e->v; - if(e->type==Open) { - scanline.insert(v); - NodeSet::iterator i=scanline.find(v); - if(i!=scanline.begin()) { - Node *u=*--i; - v->firstAbove=u; - u->firstBelow=v; - } - i=scanline.find(v); - if(++i!=scanline.end()) { - Node *u=*i; - v->firstBelow=u; - u->firstAbove=v; - } - } else { - // Close event - Node *l=v->firstAbove, *r=v->firstBelow; - if(l!=NULL) { - double sep = (v->r->height()+l->r->height())/2.0; - constraints.push_back(new Constraint(l->v,v->v,sep)); - l->firstBelow=v->firstBelow; - } - if(r!=NULL) { - double sep = (v->r->height()+r->r->height())/2.0; - constraints.push_back(new Constraint(v->v,r->v,sep)); - r->firstAbove=v->firstAbove; - } - scanline.erase(v); - delete v; - } - delete e; - } - delete [] events; - cs=new Constraint*[m=constraints.size()]; - for(i=0;i - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H -#define SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H -#include - -class Rectangle { - friend std::ostream& operator <<(std::ostream &os, const Rectangle &r); -public: - static double xBorder,yBorder; - Rectangle(double x, double X, double y, double Y); - double getMaxX() const { return maxX+xBorder; } - double getMaxY() const { return maxY+yBorder; } - double getMinX() const { return minX; } - double getMinY() const { return minY; } - double getMinD(unsigned const d) const { - return ( d == 0 ? getMinX() : getMinY() ); - } - double getMaxD(unsigned const d) const { - return ( d == 0 ? getMaxX() : getMaxY() ); - } - double getCentreX() const { return minX+width()/2.0; } - double getCentreY() const { return minY+height()/2.0; } - double width() const { return getMaxX()-minX; } - double height() const { return getMaxY()-minY; } - static void setXBorder(double x) {xBorder=x;} - static void setYBorder(double y) {yBorder=y;} - void moveCentreX(double x) { - moveMinX(x-width()/2.0); - } - void moveCentreY(double y) { - moveMinY(y-height()/2.0); - } - void moveMinX(double x) { - maxX=x+width()-xBorder; - minX=x; - } - void moveMinY(double y) { - maxY=y+height()-yBorder; - minY=y; - } - inline double overlapX(Rectangle *r) const { - if (getCentreX() <= r->getCentreX() && r->minX < getMaxX()) - return getMaxX() - r->minX; - if (r->getCentreX() <= getCentreX() && minX < r->getMaxX()) - return r->getMaxX() - minX; - return 0; - } - inline double overlapY(Rectangle *r) const { - if (getCentreY() <= r->getCentreY() && r->minY < getMaxY()) - return getMaxY() - r->minY; - if (r->getCentreY() <= getCentreY() && minY < r->getMaxY()) - return r->getMaxY() - minY; - return 0; - } -private: - double minX,maxX,minY,maxY; -}; - - -class Variable; -class Constraint; - -// returns number of constraints generated -int generateXConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs, const bool useNeighbourLists); -int generateYConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs); - - -#endif // SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H diff --git a/internal/ccall/vpsc/pairingheap/PairingHeap.cpp b/internal/ccall/vpsc/pairingheap/PairingHeap.cpp deleted file mode 100644 index 40ab90d..0000000 --- a/internal/ccall/vpsc/pairingheap/PairingHeap.cpp +++ /dev/null @@ -1,339 +0,0 @@ -/** - * \brief Pairing heap datastructure implementation - * - * Based on example code in "Data structures and Algorithm Analysis in C++" - * by Mark Allen Weiss, used and released under the LGPL by permission - * of the author. - * - * No promises about correctness. Use at your own risk! - * - * Authors: - * Mark Allen Weiss - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include -#include -#include "dsexceptions.h" -#include "PairingHeap.h" - -#ifndef PAIRING_HEAP_CPP -#define PAIRING_HEAP_CPP -using namespace std; -/** -* Construct the pairing heap. -*/ -template -PairingHeap::PairingHeap( bool (*lessThan)(T const &lhs, T const &rhs) ) -{ - root = NULL; - counter=0; - this->lessThan=lessThan; -} - - -/** -* Copy constructor -*/ -template -PairingHeap::PairingHeap( const PairingHeap & rhs ) -{ - root = NULL; - counter=rhs->size(); - *this = rhs; -} - -/** -* Destroy the leftist heap. -*/ -template -PairingHeap::~PairingHeap( ) -{ - makeEmpty( ); -} - -/** -* Insert item x into the priority queue, maintaining heap order. -* Return a pointer to the node containing the new item. -*/ -template -PairNode * -PairingHeap::insert( const T & x ) -{ - PairNode *newNode = new PairNode( x ); - - if( root == NULL ) - root = newNode; - else - compareAndLink( root, newNode ); - counter++; - return newNode; -} -template -int PairingHeap::size() { - return counter; -} -/** -* Find the smallest item in the priority queue. -* Return the smallest item, or throw Underflow if empty. -*/ -template -const T & PairingHeap::findMin( ) const -{ - if( isEmpty( ) ) - throw Underflow( ); - return root->element; -} -/** - * Remove the smallest item from the priority queue. - * Throws Underflow if empty. - */ -template -void PairingHeap::deleteMin( ) -{ - if( isEmpty( ) ) - throw Underflow( ); - - PairNode *oldRoot = root; - - if( root->leftChild == NULL ) - root = NULL; - else - root = combineSiblings( root->leftChild ); - counter--; - delete oldRoot; -} - -/** -* Test if the priority queue is logically empty. -* Returns true if empty, false otherwise. -*/ -template -bool PairingHeap::isEmpty( ) const -{ - return root == NULL; -} - -/** -* Test if the priority queue is logically full. -* Returns false in this implementation. -*/ -template -bool PairingHeap::isFull( ) const -{ - return false; -} - -/** -* Make the priority queue logically empty. -*/ -template -void PairingHeap::makeEmpty( ) -{ - reclaimMemory( root ); - root = NULL; -} - -/** -* Deep copy. -*/ -template -const PairingHeap & -PairingHeap::operator=( const PairingHeap & rhs ) -{ - if( this != &rhs ) - { - makeEmpty( ); - root = clone( rhs.root ); - } - - return *this; -} - -/** -* Internal method to make the tree empty. -* WARNING: This is prone to running out of stack space. -*/ -template -void PairingHeap::reclaimMemory( PairNode * t ) const -{ - if( t != NULL ) - { - reclaimMemory( t->leftChild ); - reclaimMemory( t->nextSibling ); - delete t; - } -} - -/** -* Change the value of the item stored in the pairing heap. -* Does nothing if newVal is larger than currently stored value. -* p points to a node returned by insert. -* newVal is the new value, which must be smaller -* than the currently stored value. -*/ -template -void PairingHeap::decreaseKey( PairNode *p, - const T & newVal ) -{ - if( p->element < newVal ) - return; // newVal cannot be bigger - p->element = newVal; - if( p != root ) - { - if( p->nextSibling != NULL ) - p->nextSibling->prev = p->prev; - if( p->prev->leftChild == p ) - p->prev->leftChild = p->nextSibling; - else - p->prev->nextSibling = p->nextSibling; - - p->nextSibling = NULL; - compareAndLink( root, p ); - } -} - -/** -* Internal method that is the basic operation to maintain order. -* Links first and second together to satisfy heap order. -* first is root of tree 1, which may not be NULL. -* first->nextSibling MUST be NULL on entry. -* second is root of tree 2, which may be NULL. -* first becomes the result of the tree merge. -*/ -template -void PairingHeap:: -compareAndLink( PairNode * & first, - PairNode *second ) const -{ - if( second == NULL ) - return; - if( lessThan(second->element,first->element) ) - { - // Attach first as leftmost child of second - second->prev = first->prev; - first->prev = second; - first->nextSibling = second->leftChild; - if( first->nextSibling != NULL ) - first->nextSibling->prev = first; - second->leftChild = first; - first = second; - } - else - { - // Attach second as leftmost child of first - second->prev = first; - first->nextSibling = second->nextSibling; - if( first->nextSibling != NULL ) - first->nextSibling->prev = first; - second->nextSibling = first->leftChild; - if( second->nextSibling != NULL ) - second->nextSibling->prev = second; - first->leftChild = second; - } -} - -/** -* Internal method that implements two-pass merging. -* firstSibling the root of the conglomerate; -* assumed not NULL. -*/ -template -PairNode * -PairingHeap::combineSiblings( PairNode *firstSibling ) const -{ - if( firstSibling->nextSibling == NULL ) - return firstSibling; - - // Allocate the array - static vector *> treeArray( 5 ); - - // Store the subtrees in an array - int numSiblings = 0; - for( ; firstSibling != NULL; numSiblings++ ) - { - if( numSiblings == (int)treeArray.size( ) ) - treeArray.resize( numSiblings * 2 ); - treeArray[ numSiblings ] = firstSibling; - firstSibling->prev->nextSibling = NULL; // break links - firstSibling = firstSibling->nextSibling; - } - if( numSiblings == (int)treeArray.size( ) ) - treeArray.resize( numSiblings + 1 ); - treeArray[ numSiblings ] = NULL; - - // Combine subtrees two at a time, going left to right - int i = 0; - for( ; i + 1 < numSiblings; i += 2 ) - compareAndLink( treeArray[ i ], treeArray[ i + 1 ] ); - - int j = i - 2; - - // j has the result of last compareAndLink. - // If an odd number of trees, get the last one. - if( j == numSiblings - 3 ) - compareAndLink( treeArray[ j ], treeArray[ j + 2 ] ); - - // Now go right to left, merging last tree with - // next to last. The result becomes the new last. - for( ; j >= 2; j -= 2 ) - compareAndLink( treeArray[ j - 2 ], treeArray[ j ] ); - return treeArray[ 0 ]; -} - -/** -* Internal method to clone subtree. -* WARNING: This is prone to running out of stack space. -*/ -template -PairNode * -PairingHeap::clone( PairNode * t ) const -{ - if( t == NULL ) - return NULL; - else - { - PairNode *p = new PairNode( t->element ); - if( ( p->leftChild = clone( t->leftChild ) ) != NULL ) - p->leftChild->prev = p; - if( ( p->nextSibling = clone( t->nextSibling ) ) != NULL ) - p->nextSibling->prev = p; - return p; - } -} -template -ostream& operator <<(ostream &os, const PairingHeap &b) -{ - os<<"Heap:"; - if (b.root != NULL) { - PairNode *r = b.root; - list*> q; - q.push_back(r); - while (!q.empty()) { - r = q.front(); - q.pop_front(); - if (r->leftChild != NULL) { - os << *r->element << ">"; - PairNode *c = r->leftChild; - while (c != NULL) { - q.push_back(c); - os << "," << *c->element; - c = c->nextSibling; - } - os << "|"; - } - } - } - return os; -} -#endif diff --git a/internal/ccall/vpsc/pairingheap/PairingHeap.h b/internal/ccall/vpsc/pairingheap/PairingHeap.h deleted file mode 100644 index e9fe40b..0000000 --- a/internal/ccall/vpsc/pairingheap/PairingHeap.h +++ /dev/null @@ -1,128 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * \brief Pairing heap datastructure implementation - * - * Based on example code in "Data structures and Algorithm Analysis in C++" - * by Mark Allen Weiss, used and released under the LGPL by permission - * of the author. - * - * No promises about correctness. Use at your own risk! - * - * Authors: - * Mark Allen Weiss - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef PAIRING_HEAP_H_ -#define PAIRING_HEAP_H_ -#include -#include -// Pairing heap class -// -// CONSTRUCTION: with no parameters -// -// ******************PUBLIC OPERATIONS********************* -// PairNode & insert( x ) --> Insert x -// deleteMin( minItem ) --> Remove (and optionally return) smallest item -// T findMin( ) --> Return smallest item -// bool isEmpty( ) --> Return true if empty; else false -// bool isFull( ) --> Return true if empty; else false -// void makeEmpty( ) --> Remove all items -// void decreaseKey( PairNode p, newVal ) -// --> Decrease value in node p -// ******************ERRORS******************************** -// Throws Underflow as warranted - - -// Node and forward declaration because g++ does -// not understand nested classes. -template -class PairingHeap; - -template -std::ostream& operator<< (std::ostream &os,const PairingHeap &b); - -template -class PairNode -{ - friend std::ostream& operator<< (std::ostream &os,const PairingHeap &b); - T element; - PairNode *leftChild; - PairNode *nextSibling; - PairNode *prev; - - PairNode( const T & theElement ) : - element( theElement ), - leftChild(NULL), nextSibling(NULL), prev(NULL) - { } - friend class PairingHeap; -}; - -template -class Comparator -{ -public: - virtual bool isLessThan(T const &lhs, T const &rhs) const = 0; -}; - -template -class PairingHeap -{ - friend std::ostream& operator<< (std::ostream &os,const PairingHeap &b); -public: - PairingHeap( bool (*lessThan)(T const &lhs, T const &rhs) ); - PairingHeap( const PairingHeap & rhs ); - ~PairingHeap( ); - - bool isEmpty( ) const; - bool isFull( ) const; - int size(); - - PairNode *insert( const T & x ); - const T & findMin( ) const; - void deleteMin( ); - void makeEmpty( ); - void decreaseKey( PairNode *p, const T & newVal ); - void merge( PairingHeap *rhs ) - { - PairNode *broot=rhs->getRoot(); - if (root == NULL) { - if(broot != NULL) { - root = broot; - } - } else { - compareAndLink(root, broot); - } - counter+=rhs->size(); - } - - const PairingHeap & operator=( const PairingHeap & rhs ); -protected: - PairNode * getRoot() { - PairNode *r=root; - root=NULL; - return r; - } -private: - PairNode *root; - bool (*lessThan)(T const &lhs, T const &rhs); - int counter; - void reclaimMemory( PairNode *t ) const; - void compareAndLink( PairNode * & first, PairNode *second ) const; - PairNode * combineSiblings( PairNode *firstSibling ) const; - PairNode * clone( PairNode * t ) const; -}; - -#include "PairingHeap.cpp" -#endif diff --git a/internal/ccall/vpsc/pairingheap/dsexceptions.h b/internal/ccall/vpsc/pairingheap/dsexceptions.h deleted file mode 100644 index e725212..0000000 --- a/internal/ccall/vpsc/pairingheap/dsexceptions.h +++ /dev/null @@ -1,12 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -#ifndef DSEXCEPTIONS_H_ -#define DSEXCEPTIONS_H_ - -class Underflow { }; -class Overflow { }; -class OutOfMemory { }; -class BadIterator { }; - -#endif diff --git a/internal/ccall/vpsc/pairingheap/dummy.go b/internal/ccall/vpsc/pairingheap/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/vpsc/pairingheap/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/vpsc/remove_rectangle_overlap.cpp b/internal/ccall/vpsc/remove_rectangle_overlap.cpp deleted file mode 100644 index 7b59905..0000000 --- a/internal/ccall/vpsc/remove_rectangle_overlap.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/** - * \brief remove overlaps between a set of rectangles. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include -#include -#include "generate-constraints.h" -#include "solve_VPSC.h" -#include "variable.h" -#include "constraint.h" -#ifdef RECTANGLE_OVERLAP_LOGGING -#include -#include "blocks.h" -using std::ios; -using std::ofstream; -using std::endl; -#endif - -#define EXTRA_GAP 0.0001 - -double Rectangle::xBorder=0; -double Rectangle::yBorder=0; -/** - * Takes an array of n rectangles and moves them as little as possible - * such that rectangles are separated by at least xBorder horizontally - * and yBorder vertically - * - * Works in three passes: - * 1) removes some overlap horizontally - * 2) removes remaining overlap vertically - * 3) a last horizontal pass removes all overlap starting from original - * x-positions - this corrects the case where rectangles were moved - * too much in the first pass. - */ -void removeRectangleOverlap(int n, Rectangle *rs[], double xBorder, double yBorder) { - assert(0 <= n); - try { - // The extra gap avoids numerical imprecision problems - Rectangle::setXBorder(xBorder+EXTRA_GAP); - Rectangle::setYBorder(yBorder+EXTRA_GAP); - Variable **vs=new Variable*[n]; - for(int i=0;idesiredPosition; - } - VPSC vpsc_x(n,vs,m,cs); -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"Calling VPSC: Horizontal pass 1"<moveCentreX(vs[i]->position()); - } - for(int i = 0; i < m; ++i) { - delete cs[i]; - } - delete [] cs; - // Removing the extra gap here ensures things that were moved to be adjacent to - // one another above are not considered overlapping - Rectangle::setXBorder(Rectangle::xBorder-EXTRA_GAP); - m=generateYConstraints(n,rs,vs,cs); - VPSC vpsc_y(n,vs,m,cs); -#ifdef RECTANGLE_OVERLAP_LOGGING - f.open(LOGFILE,ios::app); - f<<"Calling VPSC: Vertical pass"<moveCentreY(vs[i]->position()); - rs[i]->moveCentreX(oldX[i]); - } - delete [] oldX; - for(int i = 0; i < m; ++i) { - delete cs[i]; - } - delete [] cs; - Rectangle::setYBorder(Rectangle::yBorder-EXTRA_GAP); - m=generateXConstraints(n,rs,vs,cs,false); - VPSC vpsc_x2(n,vs,m,cs); -#ifdef RECTANGLE_OVERLAP_LOGGING - f.open(LOGFILE,ios::app); - f<<"Calling VPSC: Horizontal pass 2"<moveCentreX(vs[i]->position()); - delete vs[i]; - } - delete [] vs; - for(int i = 0; i < m; ++i) { - delete cs[i]; - } - delete [] cs; - } catch (char const *str) { - std::cerr< - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef REMOVE_RECTANGLE_OVERLAP_H_SEEN -#define REMOVE_RECTANGLE_OVERLAP_H_SEEN - -class Rectangle; - -void removeRectangleOverlap(Rectangle *rs[], int n, double xBorder, double yBorder); - - -#endif /* !REMOVE_RECTANGLE_OVERLAP_H_SEEN */ diff --git a/internal/ccall/vpsc/solve_VPSC.cpp b/internal/ccall/vpsc/solve_VPSC.cpp deleted file mode 100644 index dccede6..0000000 --- a/internal/ccall/vpsc/solve_VPSC.cpp +++ /dev/null @@ -1,416 +0,0 @@ -/** - * \brief Solve an instance of the "Variable Placement with Separation - * Constraints" problem. - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ - -#include -#include "constraint.h" -#include "block.h" -#include "blocks.h" -#include "solve_VPSC.h" -#include -#include -#ifdef RECTANGLE_OVERLAP_LOGGING -#include -using std::ios; -using std::ofstream; -using std::endl; -#endif - -using std::ostringstream; -using std::list; -using std::set; - -IncVPSC::IncVPSC(const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[]) - : VPSC(n,vs,m,cs) { - inactive.assign(cs,cs+m); - for(ConstraintList::iterator i=inactive.begin();i!=inactive.end();i++) { - (*i)->active=false; - } -} -VPSC::VPSC(const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[]) : cs(cs), m(m) { - bs=new Blocks(n, vs); -#ifdef RECTANGLE_OVERLAP_LOGGING - printBlocks(); - assert(!constraintGraphIsCyclic(n,vs)); -#endif -} -VPSC::~VPSC() { - delete bs; -} - -// useful in debugging -void VPSC::printBlocks() { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - for(set::iterator i=bs->begin();i!=bs->end();i++) { - Block *b=*i; - f<<" "<<*b< *vs=bs->totalOrder(); - for(list::iterator i=vs->begin();i!=vs->end();i++) { - Variable *v=*i; - if(!v->block->deleted) { - bs->mergeLeft(v->block); - } - } - bs->cleanup(); - for(unsigned i=0;islack()<-0.0000001) { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"Error: Unsatisfied constraint: "<<*cs[i]<slack()>-0.0000001); - throw "Unsatisfied constraint"; - } - } - delete vs; -} - -void VPSC::refine() { - bool solved=false; - // Solve shouldn't loop indefinately - // ... but just to make sure we limit the number of iterations - unsigned maxtries=100; - while(!solved&&maxtries>=0) { - solved=true; - maxtries--; - for(set::const_iterator i=bs->begin();i!=bs->end();i++) { - Block *b=*i; - b->setUpInConstraints(); - b->setUpOutConstraints(); - } - for(set::const_iterator i=bs->begin();i!=bs->end();i++) { - Block *b=*i; - Constraint *c=b->findMinLM(); - if(c!=NULL && c->lm<0) { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"Split on constraint: "<<*c<split(b,l,r,c); - bs->cleanup(); - // split alters the block set so we have to restart - solved=false; - break; - } - } - } - for(unsigned i=0;islack()<-0.0000001) { - assert(cs[i]->slack()>-0.0000001); - throw "Unsatisfied constraint"; - } - } -} -/** - * Calculate the optimal solution. After using satisfy() to produce a - * feasible solution, refine() examines each block to see if further - * refinement is possible by splitting the block. This is done repeatedly - * until no further improvement is possible. - */ -void VPSC::solve() { - satisfy(); - refine(); -} - -void IncVPSC::solve() { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"solve_inc()..."<cost(); - do { - lastcost=cost; - satisfy(); - splitBlocks(); - cost = bs->cost(); -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" cost="<0.0001); -} -/** - * incremental version of satisfy that allows refinement after blocks are - * moved. - * - * - move blocks to new positions - * - repeatedly merge across most violated constraint until no more - * violated constraints exist - * - * Note: there is a special case to handle when the most violated constraint - * is between two variables in the same block. Then, we must split the block - * over an active constraint between the two variables. We choose the - * constraint with the most negative lagrangian multiplier. - */ -void IncVPSC::satisfy() { -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"satisfy_inc()..."<active); - Block *lb = v->left->block, *rb = v->right->block; - if(lb != rb) { - lb->merge(rb,v); - } else { - if(splitCtr++>10000) { - throw "Cycle Error!"; - } - // constraint is within block, need to split first - inactive.push_back(lb->splitBetween(v->left,v->right,lb,rb)); - lb->merge(rb,v); - bs->insert(lb); - } - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" finished merges."<cleanup(); - for(unsigned i=0;islack()<-0.0000001) { - //assert(cs[i]->slack()>-0.0000001); - ostringstream s; - s<<"Unsatisfied constraint: "<<*v; - throw s.str().c_str(); - } - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" finished cleanup."<::const_iterator i(bs->begin());i!=bs->end();i++) { - Block *b = *i; - b->wposn = b->desiredWeightedPosition(); - b->posn = b->wposn / b->weight; - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" moved blocks."<::const_iterator i(bs->begin());i!=bs->end();i++) { - Block* b = *i; - Constraint* v=b->findMinLM(); - if(v!=NULL && v->lm < -0.0000001) { -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" found split point: "<<*v<<" lm="<lm<left->block, *l=NULL, *r=NULL; - assert(v->left->block == v->right->block); - double pos = b->posn; - b->split(l,r,v); - l->posn=r->posn=pos; - l->wposn = l->posn * l->weight; - r->wposn = r->posn * r->weight; - bs->insert(l); - bs->insert(r); - b->deleted=true; - inactive.push_back(v); -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" new blocks: "<<*l<<" and "<<*r<cleanup(); -} - -/** - * Scan constraint list for the most violated constraint, or the first equality - * constraint - */ -double IncVPSC::mostViolated(ConstraintList &l, Constraint* &v) { - double minSlack = DBL_MAX; -#ifdef RECTANGLE_OVERLAP_LOGGING - ofstream f(LOGFILE,ios::app); - f<<"Looking for most violated..."<slack(); - if(c->equality || slack < minSlack) { - minSlack=slack; - v=c; - deletePoint=i; - if(c->equality) break; - } - } - // Because the constraint list is not order dependent we just - // move the last element over the deletePoint and resize - // downwards. There is always at least 1 element in the - // vector because of search. - if(deletePoint != end && minSlack<-0.0000001) { - *deletePoint = l[l.size()-1]; - l.resize(l.size()-1); - } -#ifdef RECTANGLE_OVERLAP_LOGGING - f<<" most violated is: "<<*v< -using std::map; -using std::vector; -struct node { - set in; - set out; -}; -// useful in debugging - cycles would be BAD -bool VPSC::constraintGraphIsCyclic(const unsigned n, Variable *vs[]) { - map varmap; - vector graph; - for(unsigned i=0;i::iterator c=vs[i]->in.begin();c!=vs[i]->in.end();c++) { - Variable *l=(*c)->left; - varmap[vs[i]]->in.insert(varmap[l]); - } - - for(vector::iterator c=vs[i]->out.begin();c!=vs[i]->out.end();c++) { - Variable *r=(*c)->right; - varmap[vs[i]]->out.insert(varmap[r]); - } - } - while(graph.size()>0) { - node *u=NULL; - vector::iterator i=graph.begin(); - for(;i!=graph.end();i++) { - u=*i; - if(u->in.size()==0) { - break; - } - } - if(i==graph.end() && graph.size()>0) { - //cycle found! - return true; - } else { - graph.erase(i); - for(set::iterator j=u->out.begin();j!=u->out.end();j++) { - node *v=*j; - v->in.erase(u); - } - delete u; - } - } - for(unsigned i=0; i bmap; - vector graph; - for(set::const_iterator i=bs->begin();i!=bs->end();i++) { - Block *b=*i; - node *u=new node; - graph.push_back(u); - bmap[b]=u; - } - for(set::const_iterator i=bs->begin();i!=bs->end();i++) { - Block *b=*i; - b->setUpInConstraints(); - Constraint *c=b->findMinInConstraint(); - while(c!=NULL) { - Block *l=c->left->block; - bmap[b]->in.insert(bmap[l]); - b->deleteMinInConstraint(); - c=b->findMinInConstraint(); - } - - b->setUpOutConstraints(); - c=b->findMinOutConstraint(); - while(c!=NULL) { - Block *r=c->right->block; - bmap[b]->out.insert(bmap[r]); - b->deleteMinOutConstraint(); - c=b->findMinOutConstraint(); - } - } - while(graph.size()>0) { - node *u=NULL; - vector::iterator i=graph.begin(); - for(;i!=graph.end();i++) { - u=*i; - if(u->in.size()==0) { - break; - } - } - if(i==graph.end() && graph.size()>0) { - //cycle found! - return true; - } else { - graph.erase(i); - for(set::iterator j=u->out.begin();j!=u->out.end();j++) { - node *v=*j; - v->in.erase(u); - } - delete u; - } - } - for(unsigned i=0; i - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef SEEN_REMOVEOVERLAP_SOLVE_VPSC_H -#define SEEN_REMOVEOVERLAP_SOLVE_VPSC_H - -#include -class Variable; -class Constraint; -class Blocks; - -/** - * Variable Placement with Separation Constraints problem instance - */ -class VPSC { -public: - virtual void satisfy(); - virtual void solve(); - - VPSC(const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[]); - virtual ~VPSC(); -protected: - Blocks *bs; - Constraint **cs; - unsigned m; - void printBlocks(); -private: - void refine(); - bool constraintGraphIsCyclic(const unsigned n, Variable *vs[]); - bool blockGraphIsCyclic(); -}; - -class IncVPSC : VPSC { -public: - unsigned splitCnt; - void satisfy(); - void solve(); - void moveBlocks(); - void splitBlocks(); - IncVPSC(const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[]); -private: - typedef std::vector ConstraintList; - ConstraintList inactive; - double mostViolated(ConstraintList &l,Constraint* &v); -}; -#endif // SEEN_REMOVEOVERLAP_SOLVE_VPSC_H diff --git a/internal/ccall/vpsc/variable.cpp b/internal/ccall/vpsc/variable.cpp deleted file mode 100644 index 27e160b..0000000 --- a/internal/ccall/vpsc/variable.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#include "variable.h" -std::ostream& operator <<(std::ostream &os, const Variable &v) { - os << "(" << v.id << "=" << v.position() << ")"; - return os; -} - diff --git a/internal/ccall/vpsc/variable.h b/internal/ccall/vpsc/variable.h deleted file mode 100644 index 2bfa94e..0000000 --- a/internal/ccall/vpsc/variable.h +++ /dev/null @@ -1,59 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/** - * - * Authors: - * Tim Dwyer - * - * Copyright (C) 2005 Authors - * - * This version is released under the CPL (Common Public License) with - * the Graphviz distribution. - * A version is also available under the LGPL as part of the Adaptagrams - * project: http://sourceforge.net/projects/adaptagrams. - * If you make improvements or bug fixes to this code it would be much - * appreciated if you could also contribute those changes back to the - * Adaptagrams repository. - */ -#ifndef SEEN_REMOVEOVERLAP_VARIABLE_H -#define SEEN_REMOVEOVERLAP_VARIABLE_H - -#include -#include -class Block; -class Constraint; -#include "block.h" - -typedef std::vector Constraints; -class Variable -{ - friend std::ostream& operator <<(std::ostream &os, const Variable &v); -public: - const int id; // useful in log files - double desiredPosition; - const double weight; - double offset; - Block *block; - bool visited; - Constraints in; - Constraints out; - char *toString(); - inline Variable(const int id, const double desiredPos, const double weight) - : id(id) - , desiredPosition(desiredPos) - , weight(weight) - , offset(0) - , visited(false) - { - } - inline double position() const { - return block->posn+offset; - } - //double position() const; - ~Variable(void){ - in.clear(); - out.clear(); - } -}; -#endif // SEEN_REMOVEOVERLAP_VARIABLE_H diff --git a/internal/ccall/xdot.c b/internal/ccall/xdot.c deleted file mode 100644 index 2edd961..0000000 --- a/internal/ccall/xdot.c +++ /dev/null @@ -1 +0,0 @@ -#include "xdot/xdot.c" diff --git a/internal/ccall/xdot/dummy.go b/internal/ccall/xdot/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/ccall/xdot/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/ccall/xdot/xdot.c b/internal/ccall/xdot/xdot.c deleted file mode 100755 index 4c5b8ab..0000000 --- a/internal/ccall/xdot/xdot.c +++ /dev/null @@ -1,1181 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include -#include -#include -#include - -#define NEW(t) (t*)calloc(1, sizeof(t)) -#define N_NEW(n,t) (t*)calloc((n), sizeof(t)) - -typedef struct { - unsigned char *buf; /* start of buffer */ - unsigned char *ptr; /* next place to write */ - unsigned char *eptr; /* end of buffer */ - int dyna; /* true if buffer is malloc'ed */ -} agxbuf; - -#define agxbputc(X,C) ((((X)->ptr >= (X)->eptr) ? agxbmore(X,1) : 0), \ - (void)(*(X)->ptr++ = ((unsigned char)C))) -#define agxbuse(X) (agxbputc(X,'\0'),(char*)((X)->ptr = (X)->buf)) - -static void agxbinit(agxbuf * xb, unsigned int hint, unsigned char *init) -{ - if (init) { - xb->buf = init; - xb->dyna = 0; - } else { - if (hint == 0) - hint = BUFSIZ; - xb->dyna = 1; - xb->buf = N_NEW(hint, unsigned char); - } - xb->eptr = xb->buf + hint; - xb->ptr = xb->buf; - *xb->ptr = '\0'; -} -static int agxbmore(agxbuf * xb, unsigned int ssz) -{ - int cnt; /* current no. of characters in buffer */ - int size; /* current buffer size */ - int nsize; /* new buffer size */ - unsigned char *nbuf; /* new buffer */ - - size = xb->eptr - xb->buf; - nsize = 2 * size; - if (size + ssz > nsize) - nsize = size + ssz; - cnt = xb->ptr - xb->buf; - if (xb->dyna) { - nbuf = realloc(xb->buf, nsize); - } else { - nbuf = N_NEW(nsize, unsigned char); - memcpy(nbuf, xb->buf, cnt); - xb->dyna = 1; - } - xb->buf = nbuf; - xb->ptr = xb->buf + cnt; - xb->eptr = xb->buf + nsize; - return 0; -} - -static int agxbput(char *s, agxbuf * xb) -{ - unsigned int ssz = strlen(s); - if (xb->ptr + ssz > xb->eptr) - agxbmore(xb, ssz); - memcpy(xb->ptr, s, ssz); - xb->ptr += ssz; - return ssz; -} - -/* agxbfree: - * Free any malloced resources. - */ -static void agxbfree(agxbuf * xb) -{ - if (xb->dyna) - free(xb->buf); -} - -/* the parse functions should return NULL on error */ -static char *parseReal(char *s, double *fp) -{ - char *p; - double d; - - d = strtod(s, &p); - if (p == s) return 0; - - *fp = d; - return (p); -} - - -static char *parseInt(char *s, int *ip) -{ - char* endp; - -#ifdef UNUSED - r = sscanf(s, "%d%n", ip, &sz); - if (r != 1) return 0; - else return (s + sz); -#endif - - *ip = (int)strtol (s, &endp, 10); - if (s == endp) - return 0; - else - return endp; -} - -static char *parseUInt(char *s, unsigned int *ip) -{ - char* endp; - - *ip = (unsigned int)strtoul (s, &endp, 10); - if (s == endp) - return 0; - else - return endp; -} - -#ifdef UNUSED -static char *parsePoint(char *s, xdot_point * pp) -{ - int r, sz; - r = sscanf(s, "%lf %lf%n", &(pp->x), &(pp->y), &sz); - if (r != 2) return 0; - pp->z = 0; - return (s + sz); -} -#endif - -static char *parseRect(char *s, xdot_rect * rp) -{ - char* endp; -#ifdef UNUSED - int r, sz; - r = sscanf(s, "%lf %lf %lf %lf%n", &(rp->x), &(rp->y), &(rp->w), - &(rp->h), &sz); - if (r != 4) return 0; - else return (s + sz); -#endif - - rp->x = strtod (s, &endp); - if (s == endp) - return 0; - else - s = endp; - - rp->y = strtod (s, &endp); - if (s == endp) - return 0; - else - s = endp; - - rp->w = strtod (s, &endp); - if (s == endp) - return 0; - else - s = endp; - - rp->h = strtod (s, &endp); - if (s == endp) - return 0; - else - s = endp; - - return s; -} - -static char *parsePolyline(char *s, xdot_polyline * pp) -{ - int i; - xdot_point *pts; - xdot_point *ps; - char* endp; - - s = parseInt(s, &i); - if (!s) return s; - pts = ps = N_NEW(i, xdot_point); - pp->cnt = i; - for (i = 0; i < pp->cnt; i++) { - ps->x = strtod (s, &endp); - if (s == endp) { - free (pts); - return 0; - } - else - s = endp; - ps->y = strtod (s, &endp); - if (s == endp) { - free (pts); - return 0; - } - else - s = endp; - ps->z = 0; - ps++; - } - pp->pts = pts; - return s; -} - -static char *parseString(char *s, char **sp) -{ - int i; - char *c; - char *p; - s = parseInt(s, &i); - if (!s || (i <= 0)) return 0; - while (*s && (*s != '-')) s++; - if (*s) s++; - else { - return 0; - } - c = N_NEW(i + 1, char); - p = c; - while ((i > 0) && *s) { - *p++ = *s++; - i--; - } - if (i > 0) { - free (c); - return 0; - } - - *p = '\0'; - *sp = c; - return s; -} - -static char *parseAlign(char *s, xdot_align * ap) -{ - int i; - s = parseInt(s, &i); - - if (i < 0) - *ap = xd_left; - else if (i > 0) - *ap = xd_right; - else - *ap = xd_center; - return s; -} - -#define CHK(s) if(!s){*error=1;return 0;} - -static char *parseOp(xdot_op * op, char *s, drawfunc_t ops[], int* error) -{ - char* cs; - xdot_color clr; - - *error = 0; - while (isspace(*s)) - s++; - switch (*s++) { - case 'E': - op->kind = xd_filled_ellipse; - s = parseRect(s, &op->u.ellipse); - CHK(s); - if (ops) - op->drawfunc = ops[xop_ellipse]; - break; - - case 'e': - op->kind = xd_unfilled_ellipse; - s = parseRect(s, &op->u.ellipse); - CHK(s); - if (ops) - op->drawfunc = ops[xop_ellipse]; - break; - - case 'P': - op->kind = xd_filled_polygon; - s = parsePolyline(s, &op->u.polygon); - CHK(s); - if (ops) - op->drawfunc = ops[xop_polygon]; - break; - - case 'p': - op->kind = xd_unfilled_polygon; - s = parsePolyline(s, &op->u.polygon); - CHK(s); - if (ops) - op->drawfunc = ops[xop_polygon]; - break; - - case 'b': - op->kind = xd_filled_bezier; - s = parsePolyline(s, &op->u.bezier); - CHK(s); - if (ops) - op->drawfunc = ops[xop_bezier]; - break; - - case 'B': - op->kind = xd_unfilled_bezier; - s = parsePolyline(s, &op->u.bezier); - CHK(s); - if (ops) - op->drawfunc = ops[xop_bezier]; - break; - - case 'c': - s = parseString(s, &cs); - CHK(s); - cs = parseXDotColor (cs, &clr); - CHK(cs); - if (clr.type == xd_none) { - op->kind = xd_pen_color; - op->u.color = clr.u.clr; - if (ops) - op->drawfunc = ops[xop_pen_color]; - } - else { - op->kind = xd_grad_pen_color; - op->u.grad_color = clr; - if (ops) - op->drawfunc = ops[xop_grad_color]; - } - break; - - case 'C': - s = parseString(s, &cs); - CHK(s); - cs = parseXDotColor (cs, &clr); - CHK(cs); - if (clr.type == xd_none) { - op->kind = xd_fill_color; - op->u.color = clr.u.clr; - if (ops) - op->drawfunc = ops[xop_fill_color]; - } - else { - op->kind = xd_grad_fill_color; - op->u.grad_color = clr; - if (ops) - op->drawfunc = ops[xop_grad_color]; - } - break; - - case 'L': - op->kind = xd_polyline; - s = parsePolyline(s, &op->u.polyline); - CHK(s); - if (ops) - op->drawfunc = ops[xop_polyline]; - break; - - case 'T': - op->kind = xd_text; - s = parseReal(s, &op->u.text.x); - CHK(s); - s = parseReal(s, &op->u.text.y); - CHK(s); - s = parseAlign(s, &op->u.text.align); - CHK(s); - s = parseReal(s, &op->u.text.width); - CHK(s); - s = parseString(s, &op->u.text.text); - CHK(s); - if (ops) - op->drawfunc = ops[xop_text]; - break; - - case 'F': - op->kind = xd_font; - s = parseReal(s, &op->u.font.size); - CHK(s); - s = parseString(s, &op->u.font.name); - CHK(s); - if (ops) - op->drawfunc = ops[xop_font]; - break; - - case 'S': - op->kind = xd_style; - s = parseString(s, &op->u.style); - CHK(s); - if (ops) - op->drawfunc = ops[xop_style]; - break; - - case 'I': - op->kind = xd_image; - s = parseRect(s, &op->u.image.pos); - CHK(s); - s = parseString(s, &op->u.image.name); - CHK(s); - if (ops) - op->drawfunc = ops[xop_image]; - break; - - case 't': - op->kind = xd_fontchar; - s = parseUInt(s, &op->u.fontchar); - CHK(s); - if (ops) - op->drawfunc = ops[xop_fontchar]; - break; - - - case '\0': - s = 0; - break; - - default: - *error = 1; - s = 0; - break; - } - return s; -} - -#define XDBSIZE 100 - -/* parseXDotFOn: - * Parse and append additional xops onto a given xdot object. - * Return x. - */ -xdot *parseXDotFOn (char *s, drawfunc_t fns[], int sz, xdot* x) -{ - xdot_op op; - char *ops; - int oldsz, bufsz; - int error; - int initcnt; - - if (!s) - return x; - - if (!x) { - x = NEW(xdot); - if (sz <= sizeof(xdot_op)) - sz = sizeof(xdot_op); - - /* cnt, freefunc, ops, flags zeroed by NEW */ - x->sz = sz; - } - initcnt = x->cnt; - sz = x->sz; - - if (initcnt == 0) { - bufsz = XDBSIZE; - ops = (char *) calloc(XDBSIZE, sz); - } - else { - ops = (char*)(x->ops); - bufsz = initcnt + XDBSIZE; - ops = (char *) realloc(ops, bufsz * sz); - memset(ops + (initcnt*sz), '\0', (bufsz - initcnt)*sz); - } - - while ((s = parseOp(&op, s, fns, &error))) { - if (x->cnt == bufsz) { - oldsz = bufsz; - bufsz *= 2; - ops = (char *) realloc(ops, bufsz * sz); - memset(ops + (oldsz*sz), '\0', (bufsz - oldsz)*sz); - } - *(xdot_op *) (ops + (x->cnt * sz)) = op; - x->cnt++; - } - if (error) - x->flags |= XDOT_PARSE_ERROR; - if (x->cnt) { - x->ops = (xdot_op *) realloc(ops, x->cnt * sz); - } - else { - free (ops); - free (x); - x = NULL; - } - - return x; - -} - -xdot *parseXDotF(char *s, drawfunc_t fns[], int sz) -{ - return parseXDotFOn (s, fns, sz, NULL); -} - -xdot *parseXDot(char *s) -{ - return parseXDotF(s, 0, 0); -} - -typedef void (*pf) (char *, void *); - -/* trim: - * Trailing zeros are removed and decimal point, if possible. - */ -static void trim (char* buf) -{ - char* dotp; - char* p; - - if ((dotp = strchr (buf,'.'))) { - p = dotp+1; - while (*p) p++; // find end of string - p--; - while (*p == '0') *p-- = '\0'; - if (*p == '.') // If all decimals were zeros, remove ".". - *p = '\0'; - else - p++; - } -} - -static void printRect(xdot_rect * r, pf print, void *info) -{ - char buf[128]; - - sprintf(buf, " %.02f", r->x); - trim(buf); - print(buf, info); - sprintf(buf, " %.02f", r->y); - trim(buf); - print(buf, info); - sprintf(buf, " %.02f", r->w); - trim(buf); - print(buf, info); - sprintf(buf, " %.02f", r->h); - trim(buf); - print(buf, info); -} - -static void printPolyline(xdot_polyline * p, pf print, void *info) -{ - int i; - char buf[512]; - - sprintf(buf, " %d", p->cnt); - print(buf, info); - for (i = 0; i < p->cnt; i++) { - sprintf(buf, " %.02f", p->pts[i].x); - trim(buf); - print(buf, info); - sprintf(buf, " %.02f", p->pts[i].y); - trim(buf); - print(buf, info); - } -} - -static void printString(char *p, pf print, void *info) -{ - char buf[30]; - - sprintf(buf, " %d -", (int) strlen(p)); - print(buf, info); - print(p, info); -} - -static void printInt(int i, pf print, void *info) -{ - char buf[30]; - - sprintf(buf, " %d", i); - print(buf, info); -} - -static void printFloat(float f, pf print, void *info, int space) -{ - char buf[128]; - - if (space) - sprintf(buf, " %.02f", f); - else - sprintf(buf, "%.02f", f); - trim (buf); - print(buf, info); -} - -static void printAlign(xdot_align a, pf print, void *info) -{ - switch (a) { - case xd_left: - print(" -1", info); - break; - case xd_right: - print(" 1", info); - break; - case xd_center: - print(" 0", info); - break; - } -} - -static void -gradprint (char* s, void* v) -{ - agxbput(s, (agxbuf*)v); -} - -static void -toGradString (agxbuf* xb, xdot_color* cp) -{ - int i, n_stops; - xdot_color_stop* stops; - - if (cp->type == xd_linear) { - agxbputc (xb, '['); - printFloat (cp->u.ling.x0, gradprint, xb, 0); - printFloat (cp->u.ling.y0, gradprint, xb, 1); - printFloat (cp->u.ling.x1, gradprint, xb, 1); - printFloat (cp->u.ling.y1, gradprint, xb, 1); - n_stops = cp->u.ling.n_stops; - stops = cp->u.ling.stops; - } - else { - agxbputc (xb, '('); - printFloat (cp->u.ring.x0, gradprint, xb, 0); - printFloat (cp->u.ring.y0, gradprint, xb, 1); - printFloat (cp->u.ring.r0, gradprint, xb, 1); - printFloat (cp->u.ring.x1, gradprint, xb, 1); - printFloat (cp->u.ring.y1, gradprint, xb, 1); - printFloat (cp->u.ring.r1, gradprint, xb, 1); - n_stops = cp->u.ring.n_stops; - stops = cp->u.ring.stops; - } - printInt (n_stops, gradprint, xb); - for (i = 0; i < n_stops; i++) { - printFloat (stops[i].frac, gradprint, xb, 1); - printString (stops[i].color, gradprint, xb); - } - - if (cp->type == xd_linear) - agxbputc (xb, ']'); - else - agxbputc (xb, ')'); -} - -typedef void (*print_op)(xdot_op * op, pf print, void *info, int more); - -static void printXDot_Op(xdot_op * op, pf print, void *info, int more) -{ - agxbuf xb; - unsigned char buf[BUFSIZ]; - - agxbinit (&xb, BUFSIZ, buf); - switch (op->kind) { - case xd_filled_ellipse: - print("E", info); - printRect(&op->u.ellipse, print, info); - break; - case xd_unfilled_ellipse: - print("e", info); - printRect(&op->u.ellipse, print, info); - break; - case xd_filled_polygon: - print("P", info); - printPolyline(&op->u.polygon, print, info); - break; - case xd_unfilled_polygon: - print("p", info); - printPolyline(&op->u.polygon, print, info); - break; - case xd_filled_bezier: - print("b", info); - printPolyline(&op->u.bezier, print, info); - break; - case xd_unfilled_bezier: - print("B", info); - printPolyline(&op->u.bezier, print, info); - break; - case xd_pen_color: - print("c", info); - printString(op->u.color, print, info); - break; - case xd_grad_pen_color: - print("c", info); - toGradString (&xb, &op->u.grad_color); - printString(agxbuse(&xb), print, info); - break; - case xd_fill_color: - print("C", info); - printString(op->u.color, print, info); - break; - case xd_grad_fill_color: - print("C", info); - toGradString (&xb, &op->u.grad_color); - printString(agxbuse(&xb), print, info); - break; - case xd_polyline: - print("L", info); - printPolyline(&op->u.polyline, print, info); - break; - case xd_text: - print("T", info); - printInt(op->u.text.x, print, info); - printInt(op->u.text.y, print, info); - printAlign(op->u.text.align, print, info); - printInt(op->u.text.width, print, info); - printString(op->u.text.text, print, info); - break; - case xd_font: - print("F", info); - printFloat(op->u.font.size, print, info, 1); - printString(op->u.font.name, print, info); - break; - case xd_fontchar: - print("t", info); - printInt(op->u.fontchar, print, info); - break; - case xd_style: - print("S", info); - printString(op->u.style, print, info); - break; - case xd_image: - print("I", info); - printRect(&op->u.image.pos, print, info); - printString(op->u.image.name, print, info); - break; - } - if (more) - print(" ", info); - agxbfree (&xb); -} - -static void jsonRect(xdot_rect * r, pf print, void *info) -{ - char buf[128]; - - sprintf(buf, "[%.06f,%.06f,%.06f,%.06f]", r->x, r->y, r->w, r->h); - print(buf, info); -} - -static void jsonPolyline(xdot_polyline * p, pf print, void *info) -{ - int i; - char buf[128]; - - print("[", info); - for (i = 0; i < p->cnt; i++) { - sprintf(buf, "%.06f,%.06f", p->pts[i].x, p->pts[i].y); - print(buf, info); - if (i < p->cnt-1) print(",", info); - } - print("]", info); -} - -static void jsonString(char *p, pf print, void *info) -{ - unsigned char c, buf[BUFSIZ]; - agxbuf xb; - - agxbinit(&xb, BUFSIZ, buf); - agxbputc(&xb, '"'); - while ((c = *p++)) { - if (c == '"') agxbput("\\\"", &xb); - else if (c == '\\') agxbput("\\\\", &xb); - /* else if (c > 127) handle UTF-8 */ - else agxbputc(&xb, c); - } - agxbputc(&xb, '"'); - print(agxbuse(&xb), info); - agxbfree(&xb); -} - -static void jsonXDot_Op(xdot_op * op, pf print, void *info, int more) -{ - agxbuf xb; - unsigned char buf[BUFSIZ]; - - agxbinit (&xb, BUFSIZ, buf); - switch (op->kind) { - case xd_filled_ellipse: - print("{E : ", info); - jsonRect(&op->u.ellipse, print, info); - break; - case xd_unfilled_ellipse: - print("{e : ", info); - jsonRect(&op->u.ellipse, print, info); - break; - case xd_filled_polygon: - print("{P : ", info); - jsonPolyline(&op->u.polygon, print, info); - break; - case xd_unfilled_polygon: - print("{p : ", info); - jsonPolyline(&op->u.polygon, print, info); - break; - case xd_filled_bezier: - print("{b : ", info); - jsonPolyline(&op->u.bezier, print, info); - break; - case xd_unfilled_bezier: - print("{B : ", info); - jsonPolyline(&op->u.bezier, print, info); - break; - case xd_pen_color: - print("{c : ", info); - jsonString(op->u.color, print, info); - break; - case xd_grad_pen_color: - print("{c : ", info); - toGradString (&xb, &op->u.grad_color); - jsonString(agxbuse(&xb), print, info); - break; - case xd_fill_color: - print("{C : ", info); - jsonString(op->u.color, print, info); - break; - case xd_grad_fill_color: - print("{C : ", info); - toGradString (&xb, &op->u.grad_color); - jsonString(agxbuse(&xb), print, info); - break; - case xd_polyline: - print("{L :", info); - jsonPolyline(&op->u.polyline, print, info); - break; - case xd_text: - print("{T : [", info); - printInt(op->u.text.x, print, info); - print(",", info); - printInt(op->u.text.y, print, info); - print(",", info); - printAlign(op->u.text.align, print, info); - print(",", info); - printInt(op->u.text.width, print, info); - print(",", info); - jsonString(op->u.text.text, print, info); - print("]", info); - break; - case xd_font: - print("{F : [", info); - op->kind = xd_font; - printFloat(op->u.font.size, print, info, 1); - print(",", info); - jsonString(op->u.font.name, print, info); - print("]", info); - break; - case xd_fontchar: - print("{t : ", info); - printInt(op->u.fontchar, print, info); - break; - case xd_style: - print("{S : ", info); - jsonString(op->u.style, print, info); - break; - case xd_image: - print("{I : [", info); - jsonRect(&op->u.image.pos, print, info); - print(",", info); - jsonString(op->u.image.name, print, info); - print("]", info); - break; - } - if (more) - print("},\n", info); - else - print("}\n", info); - agxbfree (&xb); -} - -static void _printXDot(xdot * x, pf print, void *info, print_op ofn) -{ - int i; - xdot_op *op; - char *base = (char *) (x->ops); - for (i = 0; i < x->cnt; i++) { - op = (xdot_op *) (base + i * x->sz); - ofn(op, print, info, (i < x->cnt - 1)); - } -} - -char *sprintXDot(xdot * x) -{ - char *s; - unsigned char buf[BUFSIZ]; - agxbuf xb; - agxbinit(&xb, BUFSIZ, buf); - _printXDot(x, (pf) agxbput, &xb, printXDot_Op); - s = strdup(agxbuse(&xb)); - agxbfree(&xb); - - return s; -} - -void fprintXDot(FILE * fp, xdot * x) -{ - _printXDot(x, (pf) fputs, fp, printXDot_Op); -} - -void jsonXDot(FILE * fp, xdot * x) -{ - fputs ("[\n", fp); - _printXDot(x, (pf) fputs, fp, jsonXDot_Op); - fputs ("]\n", fp); -} - -static void freeXOpData(xdot_op * x) -{ - switch (x->kind) { - case xd_filled_polygon: - case xd_unfilled_polygon: - free(x->u.polyline.pts); - break; - case xd_filled_bezier: - case xd_unfilled_bezier: - free(x->u.polyline.pts); - break; - case xd_polyline: - free(x->u.polyline.pts); - break; - case xd_text: - free(x->u.text.text); - break; - case xd_fill_color: - case xd_pen_color: - free(x->u.color); - break; - case xd_grad_fill_color: - case xd_grad_pen_color: - freeXDotColor (&x->u.grad_color); - break; - case xd_font: - free(x->u.font.name); - break; - case xd_style: - free(x->u.style); - break; - case xd_image: - free(x->u.image.name); - break; - default: - break; - } -} - -void freeXDot (xdot * x) -{ - int i; - xdot_op *op; - char *base; - freefunc_t ff = x->freefunc; - - if (!x) return; - base = (char *) (x->ops); - for (i = 0; i < x->cnt; i++) { - op = (xdot_op *) (base + i * x->sz); - if (ff) ff (op); - freeXOpData(op); - } - free(base); - free(x); -} - -int statXDot (xdot* x, xdot_stats* sp) -{ - int i; - xdot_op *op; - char *base; - - if (!x || !sp) return 1; - memset(sp, 0, sizeof(xdot_stats)); - sp->cnt = x->cnt; - base = (char *) (x->ops); - for (i = 0; i < x->cnt; i++) { - op = (xdot_op *) (base + i * x->sz); - switch (op->kind) { - case xd_filled_ellipse: - case xd_unfilled_ellipse: - sp->n_ellipse++; - break; - case xd_filled_polygon: - case xd_unfilled_polygon: - sp->n_polygon++; - sp->n_polygon_pts += op->u.polygon.cnt; - break; - case xd_filled_bezier: - case xd_unfilled_bezier: - sp->n_bezier++; - sp->n_bezier_pts += op->u.bezier.cnt; - break; - case xd_polyline: - sp->n_polyline++; - sp->n_polyline_pts += op->u.polyline.cnt; - break; - case xd_text: - sp->n_text++; - break; - case xd_image: - sp->n_image++; - break; - case xd_fill_color: - case xd_pen_color: - sp->n_color++; - break; - case xd_grad_fill_color: - case xd_grad_pen_color: - sp->n_gradcolor++; - break; - case xd_font: - sp->n_font++; - break; - case xd_fontchar: - sp->n_fontchar++; - break; - case xd_style: - sp->n_style++; - break; - default : - break; - } - } - - return 0; -} - -xdot_grad_type -colorType (char* cp) -{ - xdot_grad_type rv; - - switch (*cp) { - case '[' : - rv = xd_linear; - break; - case '(' : - rv = xd_radial; - break; - default : - rv = xd_none; - break; - } - return rv; -} - -#define CHK1(s) if(!s){free(stops);return NULL;} - -/* radGradient: - * Parse radial gradient spec - * Return NULL on failure. - */ -static char* -radGradient (char* cp, xdot_color* clr) -{ - char* s = cp; - int i; - double d; - xdot_color_stop* stops = NULL; - - clr->type = xd_radial; - s = parseReal(s, &clr->u.ring.x0); - CHK1(s); - s = parseReal(s, &clr->u.ring.y0); - CHK1(s); - s = parseReal(s, &clr->u.ring.r0); - CHK1(s); - s = parseReal(s, &clr->u.ring.x1); - CHK1(s); - s = parseReal(s, &clr->u.ring.y1); - CHK1(s); - s = parseReal(s, &clr->u.ring.r1); - CHK1(s); - s = parseInt(s, &clr->u.ring.n_stops); - CHK1(s); - - stops = N_NEW(clr->u.ring.n_stops,xdot_color_stop); - for (i = 0; i < clr->u.ring.n_stops; i++) { - s = parseReal(s, &d); - CHK1(s); - stops[i].frac = d; - s = parseString(s, &stops[i].color); - CHK1(s); - } - clr->u.ring.stops = stops; - - return cp; -} - -/* linGradient: - * Parse linear gradient spec - * Return NULL on failure. - */ -static char* -linGradient (char* cp, xdot_color* clr) -{ - char* s = cp; - int i; - double d; - xdot_color_stop* stops = NULL; - - clr->type = xd_linear; - s = parseReal(s, &clr->u.ling.x0); - CHK1(s); - s = parseReal(s, &clr->u.ling.y0); - CHK1(s); - s = parseReal(s, &clr->u.ling.x1); - CHK1(s); - s = parseReal(s, &clr->u.ling.y1); - CHK1(s); - s = parseInt(s, &clr->u.ling.n_stops); - CHK1(s); - - stops = N_NEW(clr->u.ling.n_stops,xdot_color_stop); - for (i = 0; i < clr->u.ling.n_stops; i++) { - s = parseReal(s, &d); - CHK1(s); - stops[i].frac = d; - s = parseString(s, &stops[i].color); - CHK1(s); - } - clr->u.ling.stops = stops; - - return cp; -} - -/* parseXDotColor: - * Parse xdot color spec: ordinary or gradient - * The result is stored in clr. - * Return NULL on failure. - */ -char* -parseXDotColor (char* cp, xdot_color* clr) -{ - char c = *cp; - - switch (c) { - case '[' : - return linGradient (cp+1, clr); - break; - case '(' : - return radGradient (cp+1, clr); - break; - case '#' : - case '/' : - clr->type = xd_none; - clr->u.clr = cp; - return cp; - break; - default : - if (isalnum(c)) { - clr->type = xd_none; - clr->u.clr = cp; - return cp; - } - else - return NULL; - } -} - -void freeXDotColor (xdot_color* cp) -{ - int i; - - if (cp->type == xd_linear) { - for (i = 0; i < cp->u.ling.n_stops; i++) { - free (cp->u.ling.stops[i].color); - } - free (cp->u.ling.stops); - } - else if (cp->type == xd_radial) { - for (i = 0; i < cp->u.ring.n_stops; i++) { - free (cp->u.ring.stops[i].color); - } - free (cp->u.ring.stops); - } -} - -#if 0 -static void execOp(xdot_op * op, int param) -{ - op->drawfunc(op, param); -} -#endif diff --git a/internal/ccall/xdot/xdot.h b/internal/ccall/xdot/xdot.h deleted file mode 100755 index be84337..0000000 --- a/internal/ccall/xdot/xdot.h +++ /dev/null @@ -1,180 +0,0 @@ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef XDOT_H -#define XDOT_H -#include -#ifdef WIN32 -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define INITIAL_XDOT_CAPACITY 512 - -typedef enum { - xd_none, - xd_linear, - xd_radial -} xdot_grad_type; - -typedef struct { - float frac; - char* color; -} xdot_color_stop; - -typedef struct { - double x0, y0; - double x1, y1; - int n_stops; - xdot_color_stop* stops; -} xdot_linear_grad; - -typedef struct { - double x0, y0, r0; - double x1, y1, r1; - int n_stops; - xdot_color_stop* stops; -} xdot_radial_grad; - -typedef struct { - xdot_grad_type type; - union { - char* clr; - xdot_linear_grad ling; - xdot_radial_grad ring; - } u; -} xdot_color; - -typedef enum { - xd_left, xd_center, xd_right -} xdot_align; - -typedef struct { - double x, y, z; -} xdot_point; - -typedef struct { - double x, y, w, h; -} xdot_rect; - -typedef struct { - int cnt; - xdot_point* pts; -} xdot_polyline; - -typedef struct { - double x, y; - xdot_align align; - double width; - char* text; -} xdot_text; - -typedef struct { - xdot_rect pos; - char* name; -} xdot_image; - -typedef struct { - double size; - char* name; -} xdot_font; - -typedef enum { - xd_filled_ellipse, xd_unfilled_ellipse, - xd_filled_polygon, xd_unfilled_polygon, - xd_filled_bezier, xd_unfilled_bezier, - xd_polyline, xd_text, - xd_fill_color, xd_pen_color, xd_font, xd_style, xd_image, - xd_grad_fill_color, xd_grad_pen_color, - xd_fontchar -} xdot_kind; - -typedef enum { - xop_ellipse, - xop_polygon, - xop_bezier, - xop_polyline, xop_text, - xop_fill_color, xop_pen_color, xop_font, xop_style, xop_image, - xop_grad_color, - xop_fontchar -} xop_kind; - -typedef struct _xdot_op xdot_op; -typedef void (*drawfunc_t)(xdot_op*, int); -typedef void (*freefunc_t)(xdot_op*); - -struct _xdot_op { - xdot_kind kind; - union { - xdot_rect ellipse; /* xd_filled_ellipse, xd_unfilled_ellipse */ - xdot_polyline polygon; /* xd_filled_polygon, xd_unfilled_polygon */ - xdot_polyline polyline; /* xd_polyline */ - xdot_polyline bezier; /* xd_filled_bezier, xd_unfilled_bezier */ - xdot_text text; /* xd_text */ - xdot_image image; /* xd_image */ - char* color; /* xd_fill_color, xd_pen_color */ - xdot_color grad_color; /* xd_grad_fill_color, xd_grad_pen_color */ - xdot_font font; /* xd_font */ - char* style; /* xd_style */ - unsigned int fontchar; /* xd_fontchar */ - } u; - drawfunc_t drawfunc; -}; - -#define XDOT_PARSE_ERROR 1 - -typedef struct { - int cnt; /* no. of xdot ops */ - int sz; /* sizeof structure containing xdot_op as first field */ - xdot_op* ops; - freefunc_t freefunc; - int flags; -} xdot; - -typedef struct { - int cnt; /* no. of xdot ops */ - int n_ellipse; - int n_polygon; - int n_polygon_pts; - int n_polyline; - int n_polyline_pts; - int n_bezier; - int n_bezier_pts; - int n_text; - int n_font; - int n_style; - int n_color; - int n_image; - int n_gradcolor; - int n_fontchar; -} xdot_stats; - -/* ops are indexed by xop_kind */ -extern xdot* parseXDotF (char*, drawfunc_t opfns[], int sz); -extern xdot* parseXDotFOn (char*, drawfunc_t opfns[], int sz, xdot*); -extern xdot* parseXDot (char*); -extern char* sprintXDot (xdot*); -extern void fprintXDot (FILE*, xdot*); -extern void jsonXDot (FILE*, xdot*); -extern void freeXDot (xdot*); -extern int statXDot (xdot*, xdot_stats*); -extern xdot_grad_type colorTypeXDot (char*); -extern char* parseXDotColor (char* cp, xdot_color* clr); -extern void freeXDotColor (xdot_color*); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/internal/compat.h b/internal/compat.h deleted file mode 100644 index b156d32..0000000 --- a/internal/compat.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef COMPAT_H -#define COMPAT_H -#include "config.h" -/* -#ifndef HAVE_STRCASECMP -extern int strcasecmp(const char*, const char*); -#endif -#ifndef HAVE_STRNCASECMP -extern int strncasecmp(const char*, const char*, unsigned int); -#endif -*/ -#endif diff --git a/internal/config.h b/internal/config.h deleted file mode 100644 index 056d774..0000000 --- a/internal/config.h +++ /dev/null @@ -1,555 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Command to open a browser on a URL */ -#define BROWSER "open" - -/* Define for any Darwin-based OS. */ -#define DARWIN 1 - -/* Define for Darwin-style shared library names. */ -#define DARWIN_DYLIB "" - -/* Default DPI. */ -#define DEFAULT_DPI 96 - -/* Path to TrueType fonts. */ -#define DEFAULT_FONTPATH "~/Library/Fonts:/Library/Fonts:/Network/Library/Fonts:/System/Library/Fonts" - -/* Define if you want DIGCOLA */ -#define DIGCOLA 1 - -/* Define if you want on-demand plugin loading */ -//#define ENABLE_LTDL 1 - -/* Define for DLLs on Windows. */ -/* #undef GVDLL */ - -/* Filename for plugin configuration file. */ -#define GVPLUGIN_CONFIG_FILE "config6" - -/* Compatibility version number for plugins. */ -#define GVPLUGIN_VERSION 6 - -/* Define if you have the ann library */ -/* #undef HAVE_ANN */ - -/* Define to 1 if you have the `argz_add' function. */ -/* #undef HAVE_ARGZ_ADD */ - -/* Define to 1 if you have the `argz_append' function. */ -/* #undef HAVE_ARGZ_APPEND */ - -/* Define to 1 if you have the `argz_count' function. */ -/* #undef HAVE_ARGZ_COUNT */ - -/* Define to 1 if you have the `argz_create_sep' function. */ -/* #undef HAVE_ARGZ_CREATE_SEP */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ARGZ_H */ - -/* Define to 1 if you have the `argz_insert' function. */ -/* #undef HAVE_ARGZ_INSERT */ - -/* Define to 1 if you have the `argz_next' function. */ -/* #undef HAVE_ARGZ_NEXT */ - -/* Define to 1 if you have the `argz_stringify' function. */ -/* #undef HAVE_ARGZ_STRINGIFY */ - -/* Define to 1 if you have the `cbrt' function. */ -#define HAVE_CBRT 1 - -/* Define to 1 if you have the `closedir' function. */ -#define HAVE_CLOSEDIR 1 - -/* Criterion unit testing framework is installed and available for use. */ -/* #undef HAVE_CRITERION */ - -/* Define to 1 if you have the header file. */ -#define HAVE_CRT_EXTERNS_H 1 - -/* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 if - you don't. */ -/* #undef HAVE_DECL_CYGWIN_CONV_PATH */ - -/* Define to 1 if you have the `deflateBound' function. */ -#define HAVE_DEFLATEBOUND 1 - -/* Define if you have the DevIL library */ -/* #undef HAVE_DEVIL */ - -/* Define to 1 if you have the header file. */ -#define HAVE_DIRENT_H 1 - -/* Define if you have the GNU dld library. */ -/* #undef HAVE_DLD */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLD_H */ - -/* Define to 1 if you have the `dlerror' function. */ -#define HAVE_DLERROR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DL_H */ - -#ifndef WIN32 -/* Define to 1 if you have the `drand48' function. */ -#define HAVE_DRAND48 1 -#endif - -/* Define if you have the _dyld_func_lookup function. */ -/* #undef HAVE_DYLD */ - -/* Define if errno externs are declared */ -#define HAVE_ERRNO_DECL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_ERRNO_H 1 - -/* Define to 1 if the system has the type `error_t'. */ -/* #undef HAVE_ERROR_T */ - -/* Define if you have the expat library */ -#define HAVE_EXPAT 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_EXPAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define if FILE structure provides _cnt */ -/* #undef HAVE_FILE_CNT */ - -/* Define if FILE structure provides _IO_read_end */ -/* #undef HAVE_FILE_IO_READ_END */ - -/* Define if FILE structure provides _next */ -/* #undef HAVE_FILE_NEXT */ - -/* Define if FILE structure provides _r */ -#define HAVE_FILE_R 1 - -/* Define if you have the fontconfig library */ -#define HAVE_FONTCONFIG 1 - -/* Define if you have the freetype2 library */ -#define HAVE_FREETYPE2 1 - -/* Define if you have the GDI+ framework for Windows */ -/* #undef HAVE_GDIPLUS */ - -/* Define if you have the gdk library */ -/* #undef HAVE_GDK */ - -/* Define if you have the gdk_pixbuf library */ -/* #undef HAVE_GDK_PIXBUF */ - -/* Define if you have the gdlib library */ -#define HAVE_GDLIB 1 - -/* Define if the GD library supports FONTCONFIG */ -#define HAVE_GD_FONTCONFIG 1 - -/* Define if the GD library supports FREETYPE */ -#define HAVE_GD_FREETYPE 1 - -/* Define if the GD library supports GIF */ -#define HAVE_GD_GIF 1 - -/* Define if the GD library supports GIFANIM */ -#define HAVE_GD_GIFANIM 1 - -/* Define if the GD library supports JPEG */ -#define HAVE_GD_JPEG 1 - -/* Define if the GD library supports OPENPOLYGON */ -#define HAVE_GD_OPENPOLYGON 1 - -/* Define if the GD library supports PNG */ -#define HAVE_GD_PNG 1 - -/* Define if the GD library supports XPM */ -#define HAVE_GD_XPM 1 - -/* Define to 1 if you have the `getenv' function. */ -#define HAVE_GETENV 1 - -/* Define if you have the glade library */ -/* #undef HAVE_GLADE */ - -/* Define if you have the glitz library */ -/* #undef HAVE_GLITZ */ - -/* Define if you have the GLUT library */ -/* #undef HAVE_GLUT */ - -/* Define if you have the gs library */ -/* #undef HAVE_GS */ - -/* Define if you have the gtk library */ -/* #undef HAVE_GTK */ - -/* Define if you have the gtkgl library */ -/* #undef HAVE_GTKGL */ - -/* Define if you have the gtkglext library */ -/* #undef HAVE_GTKGLEXT */ - -/* Define if you have the gts library */ -#define HAVE_GTS 1 - -/* Define to 1 if you have the `g_object_unref' function. */ -/* #undef HAVE_G_OBJECT_UNREF */ - -/* Define to 1 if you have the `g_type_init' function. */ -/* #undef HAVE_G_TYPE_INIT */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_IL_IL_H */ - -/* Define if intptr_t is declared */ -#define HAVE_INTPTR_T 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define if you have the lasi library */ -/* #undef HAVE_LASI */ - -/* Define if you have the libdl library or equivalent. */ -#define HAVE_LIBDL 1 - -/* Define if libdlloader will be built on this platform */ -#define HAVE_LIBDLLOADER 1 - -/* Define if you have the GD library */ -#define HAVE_LIBGD 1 - -/* Define if the LIBGEN library has the basename feature */ -/* #undef HAVE_LIBGEN */ - -/* Define to 1 if you have the `ltdl' library (-lltdl). */ -//#define HAVE_LIBLTDL 1 - -/* Define if you have the XPM library */ -/* #undef HAVE_LIBXPMFORLEFTY */ - -/* Define if you have the Z library */ -//#define HAVE_LIBZ 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the `log2' function. */ -#define HAVE_LOG2 1 - -/* Define to 1 if you have the `lrand48' function. */ -#define HAVE_LRAND48 1 - -/* Define this if a modern libltdl is already installed */ -//#define HAVE_LTDL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MACH_O_DYLD_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_MALLOC_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have the ming library for SWF support */ -/* #undef HAVE_MING */ - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -/* #undef HAVE_NDIR_H */ - -/* Define to 1 if you have the `opendir' function. */ -#define HAVE_OPENDIR 1 - -/* Define if you have the pangocairo library */ -/* #undef HAVE_PANGOCAIRO */ - -/* Define to 1 if you have the `pango_fc_font_lock_face' function. */ -/* #undef HAVE_PANGO_FC_FONT_LOCK_FACE */ - -/* Define to 1 if you have the `pango_fc_font_unlock_face' function. */ -/* #undef HAVE_PANGO_FC_FONT_UNLOCK_FACE */ - -/* Define to 1 if you have the `pango_font_map_create_context' function. */ -/* #undef HAVE_PANGO_FONT_MAP_CREATE_CONTEXT */ - -/* Define if you have the poppler library */ -/* #undef HAVE_POPPLER */ - -/* Define if libtool can extract symbol lists from object files. */ -#define HAVE_PRELOADED_SYMBOLS 1 - -/* Define if you have the Quartz framework for Mac OS X */ -/* #undef HAVE_QUARTZ */ - -/* Define to 1 if you have the `readdir' function. */ -#define HAVE_READDIR 1 - -/* Define if you have the rsvg library */ -/* #undef HAVE_RSVG */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SEARCH_H 1 - -#ifndef WIN32 -/* Define to 1 if you have the `setenv' function. */ -#define HAVE_SETENV 1 -#endif - -/* Define to 1 if you have the `setmode' function. */ -#define HAVE_SETMODE 1 - -/* Define if you have the shl_load function. */ -/* #undef HAVE_SHL_LOAD */ - -/* Define to 1 if you have the `sincos' function. */ -/* #undef HAVE_SINCOS */ - -/* Define to 1 if you have the `srand48' function. */ -#ifndef WIN32 -#define HAVE_SRAND48 1 -#endif - -/* Define to 1 if stdbool.h conforms to C99. */ -#define HAVE_STDBOOL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strcasecmp' function. */ -#define HAVE_STRCASECMP 1 - -/* Define to 1 if you have the `strcasestr' function. */ -#define HAVE_STRCASESTR 1 - -/* Define to 1 if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strlcat' function. */ -#define HAVE_STRLCAT 1 - -/* Define to 1 if you have the `strlcpy' function. */ -#define HAVE_STRLCPY 1 - -/* Define to 1 if you have the `strncasecmp' function. */ -#define HAVE_STRNCASECMP 1 - -/* Have librsvg >= 2.36 */ -/* #undef HAVE_SVG_2_36 */ - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef HAVE_SYS_DIR_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_DL_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_INOTIFY_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_IOCTL_H 1 - -/* Define to 1 if you have the header file. */ -#ifndef WIN32 -#define HAVE_SYS_MMAN_H 1 -#endif - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef HAVE_SYS_NDIR_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SELECT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define if you have the tcl library */ -/* #undef HAVE_TCL */ - -/* Define to 1 if you have the header file. */ -#define HAVE_TERMIOS_H 1 - -/* Define if triangle.[ch] are available. */ -/* #undef HAVE_TRIANGLE */ - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_VALUES_H */ - -/* Define if you have the visio library */ -/* #undef HAVE_VISIO */ - -/* Define to 1 if you have the `vsnprintf' function. */ -#define HAVE_VSNPRINTF 1 - -/* Define if you have the webp library */ -/* #undef HAVE_WEBP */ - -/* This value is set to 1 to indicate that the system argz facility works */ -/* #undef HAVE_WORKING_ARGZ */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_X11_INTRINSIC_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_X11_XAW_TEXT_H */ - -/* Define to 1 if the system has the type `_Bool'. */ -#define HAVE__BOOL 1 - -/* Define to 1 if you have the `_NSGetEnviron' function. */ -#define HAVE__NSGETENVIRON 1 - -/* Define if you want IPSEPCOLA */ -/* #undef IPSEPCOLA */ - -/* Define if the OS needs help to load dependent libraries for dlopen(). */ -/* #undef LTDL_DLOPEN_DEPLIBS */ - -/* Define to the system default library search path. */ -#define LT_DLSEARCH_PATH "/usr/local/lib:/lib:/usr/lib" - -/* The archive extension */ -#define LT_LIBEXT "a" - -/* The archive prefix */ -#define LT_LIBPREFIX "lib" - -/* Define to the extension used for runtime loadable modules, say, ".so". */ -#define LT_MODULE_EXT ".so" - -/* Define to the name of the environment variable that determines the run-time - module search path. */ -#define LT_MODULE_PATH_VAR "DYLD_LIBRARY_PATH" - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* Define to the shared library suffix, say, ".dylib". */ -#define LT_SHARED_EXT ".dylib" - -/* Define if dlsym() requires a leading underscore in symbol names. */ -/* #undef NEED_USCORE */ - -/* Define if no fpu error exception handling is required. */ -/* #undef NO_FPERR */ - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -/* #undef NO_MINUS_C_MINUS_O */ - -/* Postscript fontnames. */ -#define NO_POSTSCRIPT_ALIAS 1 - -/* Define if you want ORTHO */ -#define ORTHO 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "http://www.graphviz.org/" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "graphviz" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "graphviz 2.40.1" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "graphviz" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "2.40.1" - -/* Path separator character. */ -#define PATHSEPARATOR ":" - -/* Define if you want SFDP */ -#define SFDP 1 - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* Define if you want SMYRNA */ -/* #undef SMYRNA */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 - -/* Historical artifact - always true */ -#define WITH_CGRAPH 1 - -/* Define to 1 if the X Window System is missing or not being used. */ -#define X_DISPLAY_MISSING 1 - -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ -#define YYTEXT_POINTER 1 - -/* Define so that glibc/gnulib argp.h does not typedef error_t. */ -#define __error_t_defined 1 - -/* Define to a type to use for `error_t' if it is not otherwise available. */ -#define error_t int - -#define GVC_EXPORTS 1 -#define PATHPLAN_EXPORTS 1 - -#define PRLOADED_SYMBOL_N 5 - -/* Define to `int' if doesn't define. */ -/* #undef gid_t */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to `int' if does not define. */ -/* #undef pid_t */ - -/* Define to `int' if does not define. */ -/* #undef ssize_t */ - -/* Define to `int' if doesn't define. */ -/* #undef uid_t */ diff --git a/internal/config.h.in b/internal/config.h.in deleted file mode 100644 index a286eb7..0000000 --- a/internal/config.h.in +++ /dev/null @@ -1,541 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Command to open a browser on a URL */ -#undef BROWSER - -/* Define for any Darwin-based OS. */ -#undef DARWIN - -/* Define for Darwin-style shared library names. */ -#undef DARWIN_DYLIB - -/* Default DPI. */ -#undef DEFAULT_DPI - -/* Path to TrueType fonts. */ -#undef DEFAULT_FONTPATH - -/* Define if you want DIGCOLA */ -#undef DIGCOLA - -/* Define if you want on-demand plugin loading */ -#undef ENABLE_LTDL - -/* Define for DLLs on Windows. */ -#undef GVDLL - -/* Filename for plugin configuration file. */ -#undef GVPLUGIN_CONFIG_FILE - -/* Compatibility version number for plugins. */ -#undef GVPLUGIN_VERSION - -/* Define if you have the ann library */ -#undef HAVE_ANN - -/* Define to 1 if you have the `argz_add' function. */ -#undef HAVE_ARGZ_ADD - -/* Define to 1 if you have the `argz_append' function. */ -#undef HAVE_ARGZ_APPEND - -/* Define to 1 if you have the `argz_count' function. */ -#undef HAVE_ARGZ_COUNT - -/* Define to 1 if you have the `argz_create_sep' function. */ -#undef HAVE_ARGZ_CREATE_SEP - -/* Define to 1 if you have the header file. */ -#undef HAVE_ARGZ_H - -/* Define to 1 if you have the `argz_insert' function. */ -#undef HAVE_ARGZ_INSERT - -/* Define to 1 if you have the `argz_next' function. */ -#undef HAVE_ARGZ_NEXT - -/* Define to 1 if you have the `argz_stringify' function. */ -#undef HAVE_ARGZ_STRINGIFY - -/* Define to 1 if you have the `cbrt' function. */ -#undef HAVE_CBRT - -/* Define to 1 if you have the `closedir' function. */ -#undef HAVE_CLOSEDIR - -/* Criterion unit testing framework is installed and available for use. */ -#undef HAVE_CRITERION - -/* Define to 1 if you have the header file. */ -#undef HAVE_CRT_EXTERNS_H - -/* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 if - you don't. */ -#undef HAVE_DECL_CYGWIN_CONV_PATH - -/* Define to 1 if you have the `deflateBound' function. */ -#undef HAVE_DEFLATEBOUND - -/* Define if you have the DevIL library */ -#undef HAVE_DEVIL - -/* Define to 1 if you have the header file. */ -#undef HAVE_DIRENT_H - -/* Define if you have the GNU dld library. */ -#undef HAVE_DLD - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLD_H - -/* Define to 1 if you have the `dlerror' function. */ -#undef HAVE_DLERROR - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DL_H - -/* Define to 1 if you have the `drand48' function. */ -#undef HAVE_DRAND48 - -/* Define if you have the _dyld_func_lookup function. */ -#undef HAVE_DYLD - -/* Define if errno externs are declared */ -#undef HAVE_ERRNO_DECL - -/* Define to 1 if you have the header file. */ -#undef HAVE_ERRNO_H - -/* Define to 1 if the system has the type `error_t'. */ -#undef HAVE_ERROR_T - -/* Define if you have the expat library */ -#undef HAVE_EXPAT - -/* Define to 1 if you have the header file. */ -#undef HAVE_EXPAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define if FILE structure provides _cnt */ -#undef HAVE_FILE_CNT - -/* Define if FILE structure provides _IO_read_end */ -#undef HAVE_FILE_IO_READ_END - -/* Define if FILE structure provides _next */ -#undef HAVE_FILE_NEXT - -/* Define if FILE structure provides _r */ -#undef HAVE_FILE_R - -/* Define if you have the fontconfig library */ -#undef HAVE_FONTCONFIG - -/* Define if you have the freetype2 library */ -#undef HAVE_FREETYPE2 - -/* Define if you have the GDI+ framework for Windows */ -#undef HAVE_GDIPLUS - -/* Define if you have the gdk library */ -#undef HAVE_GDK - -/* Define if you have the gdk_pixbuf library */ -#undef HAVE_GDK_PIXBUF - -/* Define if you have the gdlib library */ -#undef HAVE_GDLIB - -/* Define if the GD library supports FONTCONFIG */ -#undef HAVE_GD_FONTCONFIG - -/* Define if the GD library supports FREETYPE */ -#undef HAVE_GD_FREETYPE - -/* Define if the GD library supports GIF */ -#undef HAVE_GD_GIF - -/* Define if the GD library supports GIFANIM */ -#undef HAVE_GD_GIFANIM - -/* Define if the GD library supports JPEG */ -#undef HAVE_GD_JPEG - -/* Define if the GD library supports OPENPOLYGON */ -#undef HAVE_GD_OPENPOLYGON - -/* Define if the GD library supports PNG */ -#undef HAVE_GD_PNG - -/* Define if the GD library supports XPM */ -#undef HAVE_GD_XPM - -/* Define to 1 if you have the `getenv' function. */ -#undef HAVE_GETENV - -/* Define if you have the glade library */ -#undef HAVE_GLADE - -/* Define if you have the glitz library */ -#undef HAVE_GLITZ - -/* Define if you have the GLUT library */ -#undef HAVE_GLUT - -/* Define if you have the gs library */ -#undef HAVE_GS - -/* Define if you have the gtk library */ -#undef HAVE_GTK - -/* Define if you have the gtkgl library */ -#undef HAVE_GTKGL - -/* Define if you have the gtkglext library */ -#undef HAVE_GTKGLEXT - -/* Define if you have the gts library */ -#undef HAVE_GTS - -/* Define to 1 if you have the `g_object_unref' function. */ -#undef HAVE_G_OBJECT_UNREF - -/* Define to 1 if you have the `g_type_init' function. */ -#undef HAVE_G_TYPE_INIT - -/* Define to 1 if you have the header file. */ -#undef HAVE_IL_IL_H - -/* Define if intptr_t is declared */ -#undef HAVE_INTPTR_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define if you have the lasi library */ -#undef HAVE_LASI - -/* Define if you have the libdl library or equivalent. */ -#undef HAVE_LIBDL - -/* Define if libdlloader will be built on this platform */ -#undef HAVE_LIBDLLOADER - -/* Define if you have the GD library */ -#undef HAVE_LIBGD - -/* Define if the LIBGEN library has the basename feature */ -#undef HAVE_LIBGEN - -/* Define to 1 if you have the `ltdl' library (-lltdl). */ -#undef HAVE_LIBLTDL - -/* Define if you have the XPM library */ -#undef HAVE_LIBXPMFORLEFTY - -/* Define if you have the Z library */ -#undef HAVE_LIBZ - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the `log2' function. */ -#undef HAVE_LOG2 - -/* Define to 1 if you have the `lrand48' function. */ -#undef HAVE_LRAND48 - -/* Define this if a modern libltdl is already installed */ -#undef HAVE_LTDL - -/* Define to 1 if you have the header file. */ -#undef HAVE_MACH_O_DYLD_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MALLOC_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define if you have the ming library for SWF support */ -#undef HAVE_MING - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Define to 1 if you have the `opendir' function. */ -#undef HAVE_OPENDIR - -/* Define if you have the pangocairo library */ -#undef HAVE_PANGOCAIRO - -/* Define to 1 if you have the `pango_fc_font_lock_face' function. */ -#undef HAVE_PANGO_FC_FONT_LOCK_FACE - -/* Define to 1 if you have the `pango_fc_font_unlock_face' function. */ -#undef HAVE_PANGO_FC_FONT_UNLOCK_FACE - -/* Define to 1 if you have the `pango_font_map_create_context' function. */ -#undef HAVE_PANGO_FONT_MAP_CREATE_CONTEXT - -/* Define if you have the poppler library */ -#undef HAVE_POPPLER - -/* Define if libtool can extract symbol lists from object files. */ -#undef HAVE_PRELOADED_SYMBOLS - -/* Define if you have the Quartz framework for Mac OS X */ -#undef HAVE_QUARTZ - -/* Define to 1 if you have the `readdir' function. */ -#undef HAVE_READDIR - -/* Define if you have the rsvg library */ -#undef HAVE_RSVG - -/* Define to 1 if you have the header file. */ -#undef HAVE_SEARCH_H - -/* Define to 1 if you have the `setenv' function. */ -#undef HAVE_SETENV - -/* Define to 1 if you have the `setmode' function. */ -#undef HAVE_SETMODE - -/* Define if you have the shl_load function. */ -#undef HAVE_SHL_LOAD - -/* Define to 1 if you have the `sincos' function. */ -#undef HAVE_SINCOS - -/* Define to 1 if you have the `srand48' function. */ -#undef HAVE_SRAND48 - -/* Define to 1 if stdbool.h conforms to C99. */ -#undef HAVE_STDBOOL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strcasestr' function. */ -#undef HAVE_STRCASESTR - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strlcat' function. */ -#undef HAVE_STRLCAT - -/* Define to 1 if you have the `strlcpy' function. */ -#undef HAVE_STRLCPY - -/* Define to 1 if you have the `strncasecmp' function. */ -#undef HAVE_STRNCASECMP - -/* Have librsvg >= 2.36 */ -#undef HAVE_SVG_2_36 - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_DL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_INOTIFY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SELECT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define if you have the tcl library */ -#undef HAVE_TCL - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERMIOS_H - -/* Define if triangle.[ch] are available. */ -#undef HAVE_TRIANGLE - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_VALUES_H - -/* Define if you have the visio library */ -#undef HAVE_VISIO - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* Define if you have the webp library */ -#undef HAVE_WEBP - -/* This value is set to 1 to indicate that the system argz facility works */ -#undef HAVE_WORKING_ARGZ - -/* Define to 1 if you have the header file. */ -#undef HAVE_X11_INTRINSIC_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_X11_XAW_TEXT_H - -/* Define to 1 if the system has the type `_Bool'. */ -#undef HAVE__BOOL - -/* Define to 1 if you have the `_NSGetEnviron' function. */ -#undef HAVE__NSGETENVIRON - -/* Define if you want IPSEPCOLA */ -#undef IPSEPCOLA - -/* Define if the OS needs help to load dependent libraries for dlopen(). */ -#undef LTDL_DLOPEN_DEPLIBS - -/* Define to the system default library search path. */ -#undef LT_DLSEARCH_PATH - -/* The archive extension */ -#undef LT_LIBEXT - -/* The archive prefix */ -#undef LT_LIBPREFIX - -/* Define to the extension used for runtime loadable modules, say, ".so". */ -#undef LT_MODULE_EXT - -/* Define to the name of the environment variable that determines the run-time - module search path. */ -#undef LT_MODULE_PATH_VAR - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to the shared library suffix, say, ".dylib". */ -#undef LT_SHARED_EXT - -/* Define if dlsym() requires a leading underscore in symbol names. */ -#undef NEED_USCORE - -/* Define if no fpu error exception handling is required. */ -#undef NO_FPERR - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Postscript fontnames. */ -#undef NO_POSTSCRIPT_ALIAS - -/* Define if you want ORTHO */ -#undef ORTHO - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Path separator character. */ -#undef PATHSEPARATOR - -/* Define if you want SFDP */ -#undef SFDP - -/* The size of `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of `long long', as computed by sizeof. */ -#undef SIZEOF_LONG_LONG - -/* Define if you want SMYRNA */ -#undef SMYRNA - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Historical artifact - always true */ -#undef WITH_CGRAPH - -/* Define to 1 if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ -#undef YYTEXT_POINTER - -/* Define so that glibc/gnulib argp.h does not typedef error_t. */ -#undef __error_t_defined - -/* Define to a type to use for `error_t' if it is not otherwise available. */ -#undef error_t - -/* Define to `int' if doesn't define. */ -#undef gid_t - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to `int' if does not define. */ -#undef pid_t - -/* Define to `int' if does not define. */ -#undef ssize_t - -/* Define to `int' if doesn't define. */ -#undef uid_t diff --git a/internal/dummy.go b/internal/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/expat/ascii.h b/internal/expat/ascii.h deleted file mode 100644 index c3587e5..0000000 --- a/internal/expat/ascii.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#define ASCII_A 0x41 -#define ASCII_B 0x42 -#define ASCII_C 0x43 -#define ASCII_D 0x44 -#define ASCII_E 0x45 -#define ASCII_F 0x46 -#define ASCII_G 0x47 -#define ASCII_H 0x48 -#define ASCII_I 0x49 -#define ASCII_J 0x4A -#define ASCII_K 0x4B -#define ASCII_L 0x4C -#define ASCII_M 0x4D -#define ASCII_N 0x4E -#define ASCII_O 0x4F -#define ASCII_P 0x50 -#define ASCII_Q 0x51 -#define ASCII_R 0x52 -#define ASCII_S 0x53 -#define ASCII_T 0x54 -#define ASCII_U 0x55 -#define ASCII_V 0x56 -#define ASCII_W 0x57 -#define ASCII_X 0x58 -#define ASCII_Y 0x59 -#define ASCII_Z 0x5A - -#define ASCII_a 0x61 -#define ASCII_b 0x62 -#define ASCII_c 0x63 -#define ASCII_d 0x64 -#define ASCII_e 0x65 -#define ASCII_f 0x66 -#define ASCII_g 0x67 -#define ASCII_h 0x68 -#define ASCII_i 0x69 -#define ASCII_j 0x6A -#define ASCII_k 0x6B -#define ASCII_l 0x6C -#define ASCII_m 0x6D -#define ASCII_n 0x6E -#define ASCII_o 0x6F -#define ASCII_p 0x70 -#define ASCII_q 0x71 -#define ASCII_r 0x72 -#define ASCII_s 0x73 -#define ASCII_t 0x74 -#define ASCII_u 0x75 -#define ASCII_v 0x76 -#define ASCII_w 0x77 -#define ASCII_x 0x78 -#define ASCII_y 0x79 -#define ASCII_z 0x7A - -#define ASCII_0 0x30 -#define ASCII_1 0x31 -#define ASCII_2 0x32 -#define ASCII_3 0x33 -#define ASCII_4 0x34 -#define ASCII_5 0x35 -#define ASCII_6 0x36 -#define ASCII_7 0x37 -#define ASCII_8 0x38 -#define ASCII_9 0x39 - -#define ASCII_TAB 0x09 -#define ASCII_SPACE 0x20 -#define ASCII_EXCL 0x21 -#define ASCII_QUOT 0x22 -#define ASCII_AMP 0x26 -#define ASCII_APOS 0x27 -#define ASCII_MINUS 0x2D -#define ASCII_PERIOD 0x2E -#define ASCII_COLON 0x3A -#define ASCII_SEMI 0x3B -#define ASCII_LT 0x3C -#define ASCII_EQUALS 0x3D -#define ASCII_GT 0x3E -#define ASCII_LSQB 0x5B -#define ASCII_RSQB 0x5D -#define ASCII_UNDERSCORE 0x5F -#define ASCII_LPAREN 0x28 -#define ASCII_RPAREN 0x29 -#define ASCII_FF 0x0C -#define ASCII_SLASH 0x2F -#define ASCII_HASH 0x23 -#define ASCII_PIPE 0x7C -#define ASCII_COMMA 0x2C diff --git a/internal/expat/asciitab.h b/internal/expat/asciitab.h deleted file mode 100644 index 63b1d1b..0000000 --- a/internal/expat/asciitab.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, - /* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, - /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, - /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, - /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, - /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, - /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, - /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, - /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, - /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, - /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, - /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, - /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, - /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, - /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, - /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, - /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, - /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/internal/expat/dummy.go b/internal/expat/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/expat/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/expat/expat.h b/internal/expat/expat.h deleted file mode 100644 index 4eb6ddf..0000000 --- a/internal/expat/expat.h +++ /dev/null @@ -1,1024 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifndef Expat_INCLUDED -#define Expat_INCLUDED 1 - -#include -#include "expat_external.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -typedef unsigned char XML_Bool; -#define XML_TRUE ((XML_Bool)1) -#define XML_FALSE ((XML_Bool)0) - -/* The XML_Status enum gives the possible return values for several - API functions. The preprocessor #defines are included so this - stanza can be added to code that still needs to support older - versions of Expat 1.95.x: - - #ifndef XML_STATUS_OK - #define XML_STATUS_OK 1 - #define XML_STATUS_ERROR 0 - #endif - - Otherwise, the #define hackery is quite ugly and would have been - dropped. -*/ -enum XML_Status { - XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR - XML_STATUS_OK = 1, -#define XML_STATUS_OK XML_STATUS_OK - XML_STATUS_SUSPENDED = 2 -#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED -}; - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE, - XML_ERROR_ENTITY_DECLARED_IN_PE, - XML_ERROR_FEATURE_REQUIRES_XML_DTD, - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, - /* Added in 1.95.7. */ - XML_ERROR_UNBOUND_PREFIX, - /* Added in 1.95.8. */ - XML_ERROR_UNDECLARING_PREFIX, - XML_ERROR_INCOMPLETE_PE, - XML_ERROR_XML_DECL, - XML_ERROR_TEXT_DECL, - XML_ERROR_PUBLICID, - XML_ERROR_SUSPENDED, - XML_ERROR_NOT_SUSPENDED, - XML_ERROR_ABORTED, - XML_ERROR_FINISHED, - XML_ERROR_SUSPEND_PE, - /* Added in 2.0. */ - XML_ERROR_RESERVED_PREFIX_XML, - XML_ERROR_RESERVED_PREFIX_XMLNS, - XML_ERROR_RESERVED_NAMESPACE_URI, - /* Added in 2.2.1. */ - XML_ERROR_INVALID_ARGUMENT -}; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - XML_Char *name; - unsigned int numchildren; - XML_Content *children; -}; - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ -typedef void(XMLCALL *XML_ElementDeclHandler)(void *userData, - const XML_Char *name, - XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" - keyword. The "isrequired" parameter will be true and the default - value will be NULL in the case of "#REQUIRED". If "isrequired" is - true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void(XMLCALL *XML_AttlistDeclHandler)( - void *userData, const XML_Char *elname, const XML_Char *attname, - const XML_Char *att_type, const XML_Char *dflt, int isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations - and text declarations. The way to distinguish is that the version - parameter will be NULL for text declarations. The encoding - parameter may be NULL for XML declarations. The standalone - parameter will be -1, 0, or 1 indicating respectively that there - was no standalone parameter in the declaration, that it was given - as no, or that it was given as yes. -*/ -typedef void(XMLCALL *XML_XmlDeclHandler)(void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler xmldecl); - -typedef struct { - void *(*malloc_fcn)(size_t size); - void *(*realloc_fcn)(void *ptr, size_t size); - void (*free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the - external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type - names and attribute names that belong to a namespace will be - expanded; unprefixed attribute names are never expanded; unprefixed - element type names are expanded only if there is a default - namespace. The expanded name is the concatenation of the namespace - URI, the namespace separator character, and the local part of the - name. If the namespace separator is '\0' then the namespace URI - and the local part will be concatenated without any separator. - It is a programming error to use the separator '\0' with namespace - triplets (see XML_SetReturnNSTriplet). -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - -/* Constructs a new parser using the memory management suite referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used. This is particularly - valuable when memory allocation overhead is disproportionately high, - such as when a large number of small documnents need to be parsed. - All handlers are cleared from the parser, except for the - unknownEncodingHandler. The parser's external state is re-initialized - except for the values of ns and ns_triplets. - - Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. -*/ -typedef void(XMLCALL *XML_StartElementHandler)(void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void(XMLCALL *XML_EndElementHandler)(void *userData, - const XML_Char *name); - -/* s is not 0 terminated. */ -typedef void(XMLCALL *XML_CharacterDataHandler)(void *userData, - const XML_Char *s, int len); - -/* target and data are 0 terminated */ -typedef void(XMLCALL *XML_ProcessingInstructionHandler)(void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void(XMLCALL *XML_CommentHandler)(void *userData, const XML_Char *data); - -typedef void(XMLCALL *XML_StartCdataSectionHandler)(void *userData); -typedef void(XMLCALL *XML_EndCdataSectionHandler)(void *userData); - -/* This is called for any characters in the XML document for which - there is no applicable handler. This includes both characters that - are part of markup which is of a kind that is not reported - (comments, markup declarations), or characters that are part of a - construct which could be reported but for which no handler has been - supplied. The characters are passed exactly as they were in the XML - document except that they will be encoded in UTF-8 or UTF-16. - Line boundaries are not normalized. Note that a byte order mark - character is not passed to the default handler. There are no - guarantees about how characters are divided between calls to the - default handler: for example, a comment might be split between - multiple calls. -*/ -typedef void(XMLCALL *XML_DefaultHandler)(void *userData, const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. -*/ -typedef void(XMLCALL *XML_StartDoctypeDeclHandler)(void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the - closing > is encountered, but after processing any external - subset. -*/ -typedef void(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-NULL and systemId, publicID, and notationName will be NULL. - The value string is NOT null-terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be NULL and systemId will be - non-NULL. The publicId argument will be NULL unless a public - identifier was provided. The notationName argument will have a - non-NULL value only for unparsed entity declarations. - - Note that is_parameter_entity can't be changed to XML_Bool, since - that would break binary compatibility. -*/ -typedef void(XMLCALL *XML_EntityDeclHandler)( - void *userData, const XML_Char *entityName, int is_parameter_entity, - const XML_Char *value, int value_length, const XML_Char *base, - const XML_Char *systemId, const XML_Char *publicId, - const XML_Char *notationName); - -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superseded by the EntityDeclHandler above. - It is provided here for backward compatibility. - - This is called for a declaration of an unparsed (NDATA) entity. - The base argument is whatever was set by XML_SetBase. The - entityName, systemId and notationName arguments will never be - NULL. The other arguments may be. -*/ -typedef void(XMLCALL *XML_UnparsedEntityDeclHandler)( - void *userData, const XML_Char *entityName, const XML_Char *base, - const XML_Char *systemId, const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. The base argument is - whatever was set by XML_SetBase. The notationName will never be - NULL. The other arguments can be. -*/ -typedef void(XMLCALL *XML_NotationDeclHandler)(void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for - each namespace declaration. The call to the start and end element - handlers occur between the calls to the start and end namespace - declaration handlers. For an xmlns attribute, prefix will be - NULL. For an xmlns="" attribute, uri will be NULL. -*/ -typedef void(XMLCALL *XML_StartNamespaceDeclHandler)(void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void(XMLCALL *XML_EndNamespaceDeclHandler)(void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an - external subset or a reference to a parameter entity, but does not - have standalone="yes". If this handler returns XML_STATUS_ERROR, - then processing will not continue, and the parser will return a - XML_ERROR_NOT_STANDALONE error. - If parameter entity parsing is enabled, then in addition to the - conditions above this handler will only be called if the referenced - entity was actually read. -*/ -typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData); - -/* This is called for a reference to an external parsed general - entity. The referenced entity is not automatically parsed. The - application can parse it immediately or later using - XML_ExternalEntityParserCreate. - - The parser argument is the parser parsing the entity containing the - reference; it can be passed as the parser argument to - XML_ExternalEntityParserCreate. The systemId argument is the - system identifier as specified in the entity declaration; it will - not be NULL. - - The base argument is the system identifier that should be used as - the base for resolving systemId if systemId was relative; this is - set by XML_SetBase; it may be NULL. - - The publicId argument is the public identifier as specified in the - entity declaration, or NULL if none was specified; the whitespace - in the public identifier will have been normalized as required by - the XML spec. - - The context argument specifies the parsing context in the format - expected by the context argument to XML_ExternalEntityParserCreate; - context is valid only until the handler returns, so if the - referenced entity is to be parsed later, it must be copied. - context is NULL only when the entity is a parameter entity. - - The handler should return XML_STATUS_ERROR if processing should not - continue because of a fatal error in the handling of the external - entity. In this case the calling parser will return an - XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - - Note that unlike other handlers the first argument is the parser, - not userData. -*/ -typedef int(XMLCALL *XML_ExternalEntityRefHandler)(XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This is called in two situations: - 1) An entity reference is encountered for which no declaration - has been read *and* this is not an error. - 2) An internal entity reference is read, but not expanded, because - XML_SetDefaultHandler has been called. - Note: skipped parameter entities in declarations and skipped general - entities in attribute values cannot be reported, because - the event would be out of sync with the reporting of the - declarations or attribute values -*/ -typedef void(XMLCALL *XML_SkippedEntityHandler)(void *userData, - const XML_Char *entityName, - int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to - provide information to the parser about encodings that are unknown - to the parser. - - The map[b] member gives information about byte sequences whose - first byte is b. - - If map[b] is c where c is >= 0, then b by itself encodes the - Unicode scalar value c. - - If map[b] is -1, then the byte sequence is malformed. - - If map[b] is -n, where n >= 2, then b is the first byte of an - n-byte sequence that encodes a single Unicode scalar value. - - The data member will be passed as the first argument to the convert - function. - - The convert function is used to convert multibyte sequences; s will - point to a n-byte sequence where map[(unsigned char)*s] == -n. The - convert function must return the Unicode scalar value represented - by this byte sequence or -1 if the byte sequence is malformed. - - The convert function may be NULL if the encoding is a single-byte - encoding, that is if map[b] >= -1 for all bytes b. - - When the parser is finished with the encoding, then if release is - not NULL, it will call release passing it the data member; once - release has been called, the convert function will not be called - again. - - Expat places certain restrictions on the encodings that are supported - using this mechanism. - - 1. Every ASCII character that can appear in a well-formed XML document, - other than the characters - - $@\^`{}~ - - must be represented by a single byte, and that byte must be the - same byte that represents that character in ASCII. - - 2. No character may require more than 4 bytes to encode. - - 3. All characters encoded must have Unicode scalar values <= - 0xFFFF, (i.e., characters that would be encoded by surrogates in - UTF-16 are not allowed). Note that this restriction doesn't - apply to the built-in support for UTF-8 and UTF-16. - - 4. No Unicode character may be encoded by more than one distinct - sequence of bytes. -*/ -typedef struct { - int map[256]; - void *data; - int(XMLCALL *convert)(void *data, const char *s); - void(XMLCALL *release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - - The encodingHandlerData argument is that which was passed as the - second argument to XML_SetUnknownEncodingHandler. - - The name argument gives the name of the encoding as specified in - the encoding declaration. - - If the callback can provide information about the encoding, it must - fill in the XML_Encoding structure, and return XML_STATUS_OK. - Otherwise it must return XML_STATUS_ERROR. - - If info does not describe a suitable encoding, then the parser will - return an XML_UNKNOWN_ENCODING error. -*/ -typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, - XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of - internal entities. These entity references will be passed to the - default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of - internal entities. The entity reference will not be passed to the - default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be - passed as the first argument to the external entity ref handler - instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end - element, processing instruction or character data. It causes the - corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single string separated by - the separator character specified when the parser was created: URI - + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the name - has a prefix. - - Note: Calling XML_SetReturnNSTriplet after XML_Parse or - XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to - XML_ParserCreate. On success XML_SetEncoding returns non-zero, - zero otherwise. - Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer - has no effect and returns XML_STATUS_ERROR. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the - first argument to callbacks instead of userData. The userData will - still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser - will assume that there is an external subset, even if none is - specified in the document. In such a case the parser will call the - externalEntityRefHandler with a value of NULL for the systemId - argument (the publicId and context arguments will be NULL as well). - Note: For the purpose of checking WFC: Entity Declared, passing - useDTD == XML_TRUE will make the parser behave as if the document - had a DTD with an external subset. - Note: If this function is called, then this must be done before - the first call to XML_Parse or XML_ParseBuffer, since it will - have no effect after that. Returns - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. - Note: If the document does not have a DOCTYPE declaration at all, - then startDoctypeDeclHandler and endDoctypeDeclHandler will not - be called, despite an external subset being parsed. - Note: If XML_DTD is not defined when Expat is compiled, returns - XML_ERROR_FEATURE_REQUIRES_XML_DTD. - Note: If parser == NULL, returns XML_ERROR_INVALID_ARGUMENT. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - -/* Sets the base to be used for resolving relative URIs in system - identifiers in declarations. Resolving relative identifiers is - left to the application: this value will be passed through as the - base argument to the XML_ExternalEntityRefHandler, - XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base - argument will be copied. Returns XML_STATUS_ERROR if out of memory, - XML_STATUS_OK otherwise. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call - to the XML_StartElementHandler that were specified in the start-tag - rather than defaulted. Each attribute/value pair counts as 2; thus - this corresponds to an index into the atts array passed to the - XML_StartElementHandler. Returns -1 if parser == NULL. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to - XML_StartElementHandler, or -1 if there is no ID attribute or - parser == NULL. Each attribute/value pair counts as 2; thus this - corresponds to an index into the atts array passed to the - XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -#ifdef XML_ATTR_INFO -/* Source file byte offsets for the start and end of attribute names and values. - The value indices are exclusive of surrounding quotes; thus in a UTF-8 source - file an attribute value of "blah" will yield: - info->valueEnd - info->valueStart = 4 bytes. -*/ -typedef struct { - XML_Index nameStart; /* Offset to beginning of the attribute name. */ - XML_Index nameEnd; /* Offset after the attribute name's last byte. */ - XML_Index valueStart; /* Offset to beginning of the attribute value. */ - XML_Index valueEnd; /* Offset after the attribute value's last byte. */ -} XML_AttrInfo; - -/* Returns an array of XML_AttrInfo structures for the attribute/value pairs - passed in last call to the XML_StartElementHandler that were specified - in the start-tag rather than defaulted. Each attribute/value pair counts - as 1; thus the number of entries in the array is - XML_GetSpecifiedAttributeCount(parser) / 2. -*/ -XMLPARSEAPI(const XML_AttrInfo *) -XML_GetAttributeInfo(XML_Parser parser); -#endif - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is - detected. The last call to XML_Parse must have isFinal true; len - may be zero for this call (or any other). - - Though the return values for these functions has always been - described as a Boolean value, the implementation, at least for the - 1.95.x series, has always returned exactly one of the XML_Status - values. -*/ -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. - Must be called from within a call-back handler, except when aborting - (resumable = 0) an already suspended parser. Some call-backs may - still follow because they would otherwise get lost. Examples: - - endElementHandler() for empty elements when stopped in - startElementHandler(), - - endNameSpaceDeclHandler() when stopped in endElementHandler(), - and possibly others. - - Can be called from most handlers, including DTD related call-backs, - except when parsing an external parameter entity and resumable != 0. - Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. - Possible error codes: - - XML_ERROR_SUSPENDED: when suspending an already suspended parser. - - XML_ERROR_FINISHED: when the parser has already finished. - - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. - - When resumable != 0 (true) then parsing is suspended, that is, - XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. - Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() - return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. - - *Note*: - This will be applied to the current parser instance only, that is, if - there is a parent parser then it will continue parsing when the - externalEntityRefHandler() returns. It is up to the implementation of - the externalEntityRefHandler() to call XML_StopParser() on the parent - parser (recursively), if one wants to stop parsing altogether. - - When suspended, parsing can be resumed by calling XML_ResumeParser(). -*/ -XMLPARSEAPI(enum XML_Status) -XML_StopParser(XML_Parser parser, XML_Bool resumable); - -/* Resumes parsing after it has been suspended with XML_StopParser(). - Must not be called from within a handler call-back. Returns same - status codes as XML_Parse() or XML_ParseBuffer(). - Additional error code XML_ERROR_NOT_SUSPENDED possible. - - *Note*: - This must be called on the most deeply nested child parser instance - first, and on its parent parser only after the child parser has finished, - to be applied recursively until the document entity's parser is restarted. - That is, the parent parser will not resume by itself and it is up to the - application to call XML_ResumeParser() on it at the appropriate moment. -*/ -XMLPARSEAPI(enum XML_Status) -XML_ResumeParser(XML_Parser parser); - -enum XML_Parsing { XML_INITIALIZED, XML_PARSING, XML_FINISHED, XML_SUSPENDED }; - -typedef struct { - enum XML_Parsing parsing; - XML_Bool finalBuffer; -} XML_ParsingStatus; - -/* Returns status of parser with respect to being initialized, parsing, - finished, or suspended and processing the final buffer. - XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, - XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED -*/ -XMLPARSEAPI(void) -XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); - -/* Creates an XML_Parser object that can parse an external general - entity; context is a '\0'-terminated string specifying the parse - context; encoding is a '\0'-terminated string giving the name of - the externally specified encoding, or NULL if there is no - externally specified encoding. The context string consists of a - sequence of tokens separated by formfeeds (\f); a token consisting - of a name specifies that the general entity of the name is open; a - token of the form prefix=uri specifies the namespace for a - particular prefix; a token of the form =uri specifies the default - namespace. This can be called at any point after the first call to - an ExternalEntityRefHandler so longer as the parser has not yet - been freed. The new parser is completely independent and may - safely be used in a separate thread. The handlers and userData are - initialized from the parser argument. Returns NULL if out of memory. - Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD - subset). If parsing of parameter entities is enabled, then - references to external parameter entities (including the external - DTD subset) will be passed to the handler set with - XML_SetExternalEntityRefHandler. The context passed will be 0. - - Unlike external general entities, external parameter entities can - only be parsed synchronously. If the external parameter entity is - to be parsed, it must be parsed during the call to the external - entity ref handler: the complete sequence of - XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and - XML_ParserFree calls must be made during this call. After - XML_ExternalEntityParserCreate has been called to create the parser - for the external parameter entity (context must be 0 for this - call), it is illegal to make any calls on the old parser until - XML_ParserFree has been called on the newly created parser. - If the library has been compiled without support for parameter - entity parsing (ie without XML_DTD being defined), then - XML_SetParamEntityParsing will return 0 if parsing of parameter - entities is requested; otherwise it will return non-zero. - Note: If XML_SetParamEntityParsing is called after XML_Parse or - XML_ParseBuffer, then it has no effect and will always return 0. - Note: If parser == NULL, the function will do nothing and return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -/* Sets the hash salt to use for internal hash calculations. - Helps in preventing DoS attacks based on predicting hash - function behavior. This must be called before parsing is started. - Returns 1 if successful, 0 when called after parsing has started. - Note: If parser == NULL, the function will do nothing and return 0. -*/ -XMLPARSEAPI(int) -XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt); - -/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then - XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse - location. They may be called from any callback called to report - some parse event; in this case the location is the location of the - first of the sequence of characters that generated the event. When - called from callbacks generated by declarations in the document - prologue, the location identified isn't as neatly defined, but will - be within the relevant markup. When called outside of the callback - functions, the position indicated will be just past the last parse - event (regardless of whether there was an associated callback). - - They may also be called after returning from a call to XML_Parse - or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then - the location is the location of the character at which the error - was detected; otherwise the location is the location of the last - parse event, as described above. - - Note: XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber - return 0 to indicate an error. - Note: XML_GetCurrentByteIndex returns -1 to indicate an error. -*/ -XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. - Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a NULL pointer. Also returns a NULL pointer if a parse isn't - active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, int *offset, int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees the content model passed to the element declaration handler */ -XMLPARSEAPI(void) -XML_FreeContentModel(XML_Parser parser, XML_Content *model); - -/* Exposing the memory handling functions used in Expat */ -XMLPARSEAPI(void *) -XML_ATTR_MALLOC -XML_ATTR_ALLOC_SIZE(2) -XML_MemMalloc(XML_Parser parser, size_t size); - -XMLPARSEAPI(void *) -XML_ATTR_ALLOC_SIZE(3) -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); - -XMLPARSEAPI(void) -XML_MemFree(XML_Parser parser, void *ptr); - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { - int major; - int minor; - int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version - number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { - XML_FEATURE_END = 0, - XML_FEATURE_UNICODE, - XML_FEATURE_UNICODE_WCHAR_T, - XML_FEATURE_DTD, - XML_FEATURE_CONTEXT_BYTES, - XML_FEATURE_MIN_SIZE, - XML_FEATURE_SIZEOF_XML_CHAR, - XML_FEATURE_SIZEOF_XML_LCHAR, - XML_FEATURE_NS, - XML_FEATURE_LARGE_SIZE, - XML_FEATURE_ATTR_INFO - /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { - enum XML_FeatureEnum feature; - const XML_LChar *name; - long int value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - -/* Expat follows the semantic versioning convention. - See http://semver.org. -*/ -#define XML_MAJOR_VERSION 2 -#define XML_MINOR_VERSION 2 -#define XML_MICRO_VERSION 9 - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_INCLUDED */ diff --git a/internal/expat/expat_config.h b/internal/expat/expat_config.h deleted file mode 100644 index e00a70e..0000000 --- a/internal/expat/expat_config.h +++ /dev/null @@ -1,135 +0,0 @@ -/* expat_config.h. Generated from expat_config.h.in by configure. */ -/* expat_config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* 1234 = LILENDIAN, 4321 = BIGENDIAN */ -#define BYTEORDER 1234 - -/* Define to 1 if you have the `arc4random' function. */ -/* #undef HAVE_ARC4RANDOM */ - -#if defined(__APPLE__) -/* Define to 1 if you have the `arc4random_buf' function. */ -#define HAVE_ARC4RANDOM_BUF 1 -#endif - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the `getpagesize' function. */ -#define HAVE_GETPAGESIZE 1 - -/* Define to 1 if you have the `getrandom' function. */ -/* #undef HAVE_GETRANDOM */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `bsd' library (-lbsd). */ -/* #undef HAVE_LIBBSD */ - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have a working `mmap' system call. */ -#define HAVE_MMAP 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have `syscall' and `SYS_getrandom'. */ -/* #undef HAVE_SYSCALL_GETRANDOM */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#define LT_OBJDIR ".libs/" - -/* Name of package */ -#define EXPAT_PACKAGE "expat" - -/* Define to the address where bug reports for this package should be sent. */ -#define EXPAT_PACKAGE_BUGREPORT "expat-bugs@libexpat.org" - -/* Define to the full name of this package. */ -#define EXPAT_PACKAGE_NAME "expat" - -/* Define to the full name and version of this package. */ -#define EXPAT_PACKAGE_STRING "expat 2.2.9" - -/* Define to the one symbol short name of this package. */ -#define EXPAT_PACKAGE_TARNAME "expat" - -/* Define to the home page for this package. */ -#define EXPAT_PACKAGE_URL "" - -/* Define to the version of this package. */ -#define EXPAT_PACKAGE_VERSION "2.2.9" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "2.2.9" - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Define to allow retrieving the byte offsets for attribute names and values. - */ -/* #undef XML_ATTR_INFO */ - -/* Define to specify how much context to retain around the current parse - point. */ -#define XML_CONTEXT_BYTES 1024 - -/* Define to include code reading entropy from `/dev/urandom'. */ -#define XML_DEV_URANDOM 1 - -/* Define to make parameter entity parsing functionality available. */ -#define XML_DTD 1 - -/* Define to make XML Namespaces functionality available. */ -#define XML_NS 1 - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `long int' if does not define. */ -/* #undef off_t */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/internal/expat/expat_external.h b/internal/expat/expat_external.h deleted file mode 100644 index b3b6e74..0000000 --- a/internal/expat/expat_external.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifndef Expat_External_INCLUDED -#define Expat_External_INCLUDED 1 - -/* External API definitions */ - -/* Expat tries very hard to make the API boundary very specifically - defined. There are two macros defined to control this boundary; - each of these can be defined before including this header to - achieve some different behavior, but doing so it not recommended or - tested frequently. - - XMLCALL - The calling convention to use for all calls across the - "library boundary." This will default to cdecl, and - try really hard to tell the compiler that's what we - want. - - XMLIMPORT - Whatever magic is needed to note that a function is - to be imported from a dynamically loaded library - (.dll, .so, or .sl, depending on your platform). - - The XMLCALL macro was added in Expat 1.95.7. The only one which is - expected to be directly useful in client code is XMLCALL. - - Note that on at least some Unix versions, the Expat library must be - compiled with the cdecl calling convention as the default since - system headers may assume the cdecl convention. -*/ -#ifndef XMLCALL -# if defined(_MSC_VER) -# define XMLCALL __cdecl -# elif defined(__GNUC__) && defined(__i386) && ! defined(__INTEL_COMPILER) -# define XMLCALL __attribute__((cdecl)) -# else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -# define XMLCALL -# endif -#endif /* not defined XMLCALL */ - -#if ! defined(XML_STATIC) && ! defined(XMLIMPORT) -# ifndef XML_BUILDING_EXPAT -/* using Expat from an application */ - -# if defined(_MSC_EXTENSIONS) && ! defined(__BEOS__) && ! defined(__CYGWIN__) -# define XMLIMPORT __declspec(dllimport) -# endif - -# endif -#endif /* not defined XML_STATIC */ - -#ifndef XML_ENABLE_VISIBILITY -# define XML_ENABLE_VISIBILITY 0 -#endif - -#if ! defined(XMLIMPORT) && XML_ENABLE_VISIBILITY -# define XMLIMPORT __attribute__((visibility("default"))) -#endif - -/* If we didn't define it above, define it away: */ -#ifndef XMLIMPORT -# define XMLIMPORT -#endif - -#if defined(__GNUC__) \ - && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) -# define XML_ATTR_MALLOC __attribute__((__malloc__)) -#else -# define XML_ATTR_MALLOC -#endif - -#if defined(__GNUC__) \ - && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) -# define XML_ATTR_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) -#else -# define XML_ATTR_ALLOC_SIZE(x) -#endif - -#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T -# ifndef XML_UNICODE -# define XML_UNICODE -# endif -# if defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__ != 2) -# error "sizeof(wchar_t) != 2; Need -fshort-wchar for both Expat and libc" -# endif -#endif - -#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ -# ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -# else -typedef unsigned short XML_Char; -typedef char XML_LChar; -# endif /* XML_UNICODE_WCHAR_T */ -#else /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ -typedef long long XML_Index; -typedef unsigned long long XML_Size; -#else -typedef long XML_Index; -typedef unsigned long XML_Size; -#endif /* XML_LARGE_SIZE */ - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_External_INCLUDED */ diff --git a/internal/expat/iasciitab.h b/internal/expat/iasciitab.h deleted file mode 100644 index ea97cfc..0000000 --- a/internal/expat/iasciitab.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, - /* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, - /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, - /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, - /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, - /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, - /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, - /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, - /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, - /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, - /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, - /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, - /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, - /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, - /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, - /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, - /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, - /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/internal/expat/internal.h b/internal/expat/internal.h deleted file mode 100644 index 60913da..0000000 --- a/internal/expat/internal.h +++ /dev/null @@ -1,123 +0,0 @@ -/* internal.h - - Internal definitions used by Expat. This is not needed to compile - client code. - - The following calling convention macros are defined for frequently - called functions: - - FASTCALL - Used for those internal functions that have a simple - body and a low number of arguments and local variables. - - PTRCALL - Used for functions called though function pointers. - - PTRFASTCALL - Like PTRCALL, but for low number of arguments. - - inline - Used for selected internal functions for which inlining - may improve performance on some platforms. - - Note: Use of these macros is based on judgement, not hard rules, - and therefore subject to change. - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#if defined(__GNUC__) && defined(__i386__) && ! defined(__MINGW32__) -/* We'll use this version by default only where we know it helps. - - regparm() generates warnings on Solaris boxes. See SF bug #692878. - - Instability reported with egcs on a RedHat Linux 7.3. - Let's comment out: - #define FASTCALL __attribute__((stdcall, regparm(3))) - and let's try this: -*/ -# define FASTCALL __attribute__((regparm(3))) -# define PTRFASTCALL __attribute__((regparm(3))) -#endif - -/* Using __fastcall seems to have an unexpected negative effect under - MS VC++, especially for function pointers, so we won't use it for - now on that platform. It may be reconsidered for a future release - if it can be made more effective. - Likely reason: __fastcall on Windows is like stdcall, therefore - the compiler cannot perform stack optimizations for call clusters. -*/ - -/* Make sure all of these are defined if they aren't already. */ - -#ifndef FASTCALL -# define FASTCALL -#endif - -#ifndef PTRCALL -# define PTRCALL -#endif - -#ifndef PTRFASTCALL -# define PTRFASTCALL -#endif - -#ifndef XML_MIN_SIZE -# if ! defined(__cplusplus) && ! defined(inline) -# ifdef __GNUC__ -# define inline __inline -# endif /* __GNUC__ */ -# endif -#endif /* XML_MIN_SIZE */ - -#ifdef __cplusplus -# define inline inline -#else -# ifndef inline -# define inline -# endif -#endif - -#ifndef UNUSED_P -# define UNUSED_P(p) (void)p -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_ENABLE_VISIBILITY -# if XML_ENABLE_VISIBILITY -__attribute__((visibility("default"))) -# endif -#endif -void -_INTERNAL_trim_to_complete_utf8_characters(const char *from, - const char **fromLimRef); - -#ifdef __cplusplus -} -#endif diff --git a/internal/expat/latin1tab.h b/internal/expat/latin1tab.h deleted file mode 100644 index 6f91604..0000000 --- a/internal/expat/latin1tab.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, - /* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, - /* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, - /* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, - /* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, - /* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, - /* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, - /* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, diff --git a/internal/expat/nametab.h b/internal/expat/nametab.h deleted file mode 100644 index 3681df3..0000000 --- a/internal/expat/nametab.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -static const unsigned namingBitmap[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x04000000, - 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, - 0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFE00F, 0xFC31FFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, - 0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, - 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF0003, 0xFFFFFFFF, - 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, - 0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0x07FFFFFE, - 0x000007FE, 0xFFFE0000, 0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, - 0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, 0xFFF99FE0, 0x03C5FDFF, - 0xB0000000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, - 0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, 0xFFF99FE0, 0x23CDFDFF, - 0xB0000000, 0x00000003, 0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, - 0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, 0xFFFDDFE0, 0x03EFFDFF, - 0x40000000, 0x00000003, 0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x000D7FFF, - 0x0000003F, 0x00000000, 0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, 0x0007DAED, 0x50000000, - 0x82315001, 0x002C62AB, 0x40000000, 0xF580C900, 0x00000007, 0x02010800, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x03FFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, - 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00004C40, - 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, - 0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, - 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, - 0x00000000, 0x00000000, 0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, - 0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, 0x00FFFFFF, 0x00000000, - 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, 0xFFFFD7C0, 0xFFFFFFFB, - 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, - 0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, - 0x027FFFFF, 0xFFFFFFFE, 0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, - 0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x7CFFFFFF, - 0xFFEF7FFF, 0x03FF3DFF, 0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, - 0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, 0xFFF987E4, 0xD36DFDFF, - 0x5E003987, 0x001FFFC0, 0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, - 0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, 0xD63DC7EC, 0xC3BFC718, - 0x00803DC7, 0x0000FF80, 0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, - 0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3FFFDFF, - 0x00803DCF, 0x0000FFC3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFF6CAE, - 0x03FF3F5F, 0x00000000, 0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, - 0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, - 0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0x661FFFFF, 0xFFFFFFFE, - 0xFFFFFFFF, 0x77FFFFFF, -}; -static const unsigned char nmstrtPages[] = { - 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; -static const unsigned char namePages[] = { - 0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, 0x00, 0x1F, 0x20, 0x21, - 0x22, 0x23, 0x24, 0x25, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x26, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; diff --git a/internal/expat/siphash.h b/internal/expat/siphash.h deleted file mode 100644 index bfee65a..0000000 --- a/internal/expat/siphash.h +++ /dev/null @@ -1,398 +0,0 @@ -/* ========================================================================== - * siphash.h - SipHash-2-4 in a single header file - * -------------------------------------------------------------------------- - * Derived by William Ahern from the reference implementation[1] published[2] - * by Jean-Philippe Aumasson and Daniel J. Berstein. - * Minimal changes by Sebastian Pipping and Victor Stinner on top, see below. - * Licensed under the CC0 Public Domain Dedication license. - * - * 1. https://www.131002.net/siphash/siphash24.c - * 2. https://www.131002.net/siphash/ - * -------------------------------------------------------------------------- - * HISTORY: - * - * 2019-08-03 (Sebastian Pipping) - * - Mark part of sip24_valid as to be excluded from clang-format - * - Re-format code using clang-format 9 - * - * 2018-07-08 (Anton Maklakov) - * - Add "fall through" markers for GCC's -Wimplicit-fallthrough - * - * 2017-11-03 (Sebastian Pipping) - * - Hide sip_tobin and sip_binof unless SIPHASH_TOBIN macro is defined - * - * 2017-07-25 (Vadim Zeitlin) - * - Fix use of SIPHASH_MAIN macro - * - * 2017-07-05 (Sebastian Pipping) - * - Use _SIP_ULL macro to not require a C++11 compiler if compiled as C++ - * - Add const qualifiers at two places - * - Ensure <=80 characters line length (assuming tab width 4) - * - * 2017-06-23 (Victor Stinner) - * - Address Win64 compile warnings - * - * 2017-06-18 (Sebastian Pipping) - * - Clarify license note in the header - * - Address C89 issues: - * - Stop using inline keyword (and let compiler decide) - * - Replace _Bool by int - * - Turn macro siphash24 into a function - * - Address invalid conversion (void pointer) by explicit cast - * - Address lack of stdint.h for Visual Studio 2003 to 2008 - * - Always expose sip24_valid (for self-tests) - * - * 2012-11-04 - Born. (William Ahern) - * -------------------------------------------------------------------------- - * USAGE: - * - * SipHash-2-4 takes as input two 64-bit words as the key, some number of - * message bytes, and outputs a 64-bit word as the message digest. This - * implementation employs two data structures: a struct sipkey for - * representing the key, and a struct siphash for representing the hash - * state. - * - * For converting a 16-byte unsigned char array to a key, use either the - * macro sip_keyof or the routine sip_tokey. The former instantiates a - * compound literal key, while the latter requires a key object as a - * parameter. - * - * unsigned char secret[16]; - * arc4random_buf(secret, sizeof secret); - * struct sipkey *key = sip_keyof(secret); - * - * For hashing a message, use either the convenience macro siphash24 or the - * routines sip24_init, sip24_update, and sip24_final. - * - * struct siphash state; - * void *msg; - * size_t len; - * uint64_t hash; - * - * sip24_init(&state, key); - * sip24_update(&state, msg, len); - * hash = sip24_final(&state); - * - * or - * - * hash = siphash24(msg, len, key); - * - * To convert the 64-bit hash value to a canonical 8-byte little-endian - * binary representation, use either the macro sip_binof or the routine - * sip_tobin. The former instantiates and returns a compound literal array, - * while the latter requires an array object as a parameter. - * -------------------------------------------------------------------------- - * NOTES: - * - * o Neither sip_keyof, sip_binof, nor siphash24 will work with compilers - * lacking compound literal support. Instead, you must use the lower-level - * interfaces which take as parameters the temporary state objects. - * - * o Uppercase macros may evaluate parameters more than once. Lowercase - * macros should not exhibit any such side effects. - * ========================================================================== - */ -#ifndef SIPHASH_H -#define SIPHASH_H - -#include /* size_t */ - -#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600) -/* For vs2003/7.1 up to vs2008/9.0; _MSC_VER 1600 is vs2010/10.0 */ -typedef unsigned __int8 uint8_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#else -# include /* uint64_t uint32_t uint8_t */ -#endif - -/* - * Workaround to not require a C++11 compiler for using ULL suffix - * if this code is included and compiled as C++; related GCC warning is: - * warning: use of C++11 long long integer constant [-Wlong-long] - */ -#define _SIP_ULL(high, low) (((uint64_t)high << 32) | low) - -#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) - -#define SIP_U32TO8_LE(p, v) \ - (p)[0] = (uint8_t)((v) >> 0); \ - (p)[1] = (uint8_t)((v) >> 8); \ - (p)[2] = (uint8_t)((v) >> 16); \ - (p)[3] = (uint8_t)((v) >> 24); - -#define SIP_U64TO8_LE(p, v) \ - SIP_U32TO8_LE((p) + 0, (uint32_t)((v) >> 0)); \ - SIP_U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); - -#define SIP_U8TO64_LE(p) \ - (((uint64_t)((p)[0]) << 0) | ((uint64_t)((p)[1]) << 8) \ - | ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24) \ - | ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) \ - | ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56)) - -#define SIPHASH_INITIALIZER \ - { 0, 0, 0, 0, {0}, 0, 0 } - -struct siphash { - uint64_t v0, v1, v2, v3; - - unsigned char buf[8], *p; - uint64_t c; -}; /* struct siphash */ - -#define SIP_KEYLEN 16 - -struct sipkey { - uint64_t k[2]; -}; /* struct sipkey */ - -#define sip_keyof(k) sip_tokey(&(struct sipkey){{0}}, (k)) - -static struct sipkey * -sip_tokey(struct sipkey *key, const void *src) { - key->k[0] = SIP_U8TO64_LE((const unsigned char *)src); - key->k[1] = SIP_U8TO64_LE((const unsigned char *)src + 8); - return key; -} /* sip_tokey() */ - -#ifdef SIPHASH_TOBIN - -# define sip_binof(v) sip_tobin((unsigned char[8]){0}, (v)) - -static void * -sip_tobin(void *dst, uint64_t u64) { - SIP_U64TO8_LE((unsigned char *)dst, u64); - return dst; -} /* sip_tobin() */ - -#endif /* SIPHASH_TOBIN */ - -static void -sip_round(struct siphash *H, const int rounds) { - int i; - - for (i = 0; i < rounds; i++) { - H->v0 += H->v1; - H->v1 = SIP_ROTL(H->v1, 13); - H->v1 ^= H->v0; - H->v0 = SIP_ROTL(H->v0, 32); - - H->v2 += H->v3; - H->v3 = SIP_ROTL(H->v3, 16); - H->v3 ^= H->v2; - - H->v0 += H->v3; - H->v3 = SIP_ROTL(H->v3, 21); - H->v3 ^= H->v0; - - H->v2 += H->v1; - H->v1 = SIP_ROTL(H->v1, 17); - H->v1 ^= H->v2; - H->v2 = SIP_ROTL(H->v2, 32); - } -} /* sip_round() */ - -static struct siphash * -sip24_init(struct siphash *H, const struct sipkey *key) { - H->v0 = _SIP_ULL(0x736f6d65U, 0x70736575U) ^ key->k[0]; - H->v1 = _SIP_ULL(0x646f7261U, 0x6e646f6dU) ^ key->k[1]; - H->v2 = _SIP_ULL(0x6c796765U, 0x6e657261U) ^ key->k[0]; - H->v3 = _SIP_ULL(0x74656462U, 0x79746573U) ^ key->k[1]; - - H->p = H->buf; - H->c = 0; - - return H; -} /* sip24_init() */ - -#define sip_endof(a) (&(a)[sizeof(a) / sizeof *(a)]) - -static struct siphash * -sip24_update(struct siphash *H, const void *src, size_t len) { - const unsigned char *p = (const unsigned char *)src, *pe = p + len; - uint64_t m; - - do { - while (p < pe && H->p < sip_endof(H->buf)) - *H->p++ = *p++; - - if (H->p < sip_endof(H->buf)) - break; - - m = SIP_U8TO64_LE(H->buf); - H->v3 ^= m; - sip_round(H, 2); - H->v0 ^= m; - - H->p = H->buf; - H->c += 8; - } while (p < pe); - - return H; -} /* sip24_update() */ - -static uint64_t -sip24_final(struct siphash *H) { - const char left = (char)(H->p - H->buf); - uint64_t b = (H->c + left) << 56; - - switch (left) { - case 7: - b |= (uint64_t)H->buf[6] << 48; - /* fall through */ - case 6: - b |= (uint64_t)H->buf[5] << 40; - /* fall through */ - case 5: - b |= (uint64_t)H->buf[4] << 32; - /* fall through */ - case 4: - b |= (uint64_t)H->buf[3] << 24; - /* fall through */ - case 3: - b |= (uint64_t)H->buf[2] << 16; - /* fall through */ - case 2: - b |= (uint64_t)H->buf[1] << 8; - /* fall through */ - case 1: - b |= (uint64_t)H->buf[0] << 0; - /* fall through */ - case 0: - break; - } - - H->v3 ^= b; - sip_round(H, 2); - H->v0 ^= b; - H->v2 ^= 0xff; - sip_round(H, 4); - - return H->v0 ^ H->v1 ^ H->v2 ^ H->v3; -} /* sip24_final() */ - -static uint64_t -siphash24(const void *src, size_t len, const struct sipkey *key) { - struct siphash state = SIPHASH_INITIALIZER; - return sip24_final(sip24_update(sip24_init(&state, key), src, len)); -} /* siphash24() */ - -/* - * SipHash-2-4 output with - * k = 00 01 02 ... - * and - * in = (empty string) - * in = 00 (1 byte) - * in = 00 01 (2 bytes) - * in = 00 01 02 (3 bytes) - * ... - * in = 00 01 02 ... 3e (63 bytes) - */ -static int -sip24_valid(void) { - /* clang-format off */ - static const unsigned char vectors[64][8] = { - { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, }, - { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, }, - { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, }, - { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, }, - { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, }, - { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, }, - { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, }, - { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, }, - { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, }, - { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, }, - { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, }, - { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, }, - { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, }, - { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, }, - { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, }, - { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, }, - { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, }, - { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, }, - { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, }, - { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, }, - { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, }, - { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, }, - { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, }, - { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, }, - { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, }, - { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, }, - { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, }, - { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, }, - { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, }, - { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, }, - { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, }, - { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, }, - { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, }, - { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, }, - { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, }, - { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, }, - { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, }, - { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, }, - { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, }, - { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, }, - { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, }, - { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, }, - { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, }, - { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, }, - { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, }, - { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, }, - { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, }, - { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, }, - { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, }, - { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, }, - { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, }, - { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, }, - { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, }, - { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, }, - { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, }, - { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, }, - { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, }, - { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, }, - { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, }, - { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, }, - { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, }, - { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, }, - { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, }, - { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, } - }; - /* clang-format on */ - - unsigned char in[64]; - struct sipkey k; - size_t i; - - sip_tokey(&k, "\000\001\002\003\004\005\006\007\010\011" - "\012\013\014\015\016\017"); - - for (i = 0; i < sizeof in; ++i) { - in[i] = (unsigned char)i; - - if (siphash24(in, i, &k) != SIP_U8TO64_LE(vectors[i])) - return 0; - } - - return 1; -} /* sip24_valid() */ - -#ifdef SIPHASH_MAIN - -# include - -int -main(void) { - const int ok = sip24_valid(); - - if (ok) - puts("OK"); - else - puts("FAIL"); - - return ! ok; -} /* main() */ - -#endif /* SIPHASH_MAIN */ - -#endif /* SIPHASH_H */ diff --git a/internal/expat/utf8tab.h b/internal/expat/utf8tab.h deleted file mode 100644 index a22986a..0000000 --- a/internal/expat/utf8tab.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, - /* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, - /* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, - /* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, - /* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, - /* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, - /* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, - /* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, - /* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, diff --git a/internal/expat/winconfig.h b/internal/expat/winconfig.h deleted file mode 100644 index 562a4a8..0000000 --- a/internal/expat/winconfig.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifndef WINCONFIG_H -#define WINCONFIG_H - -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN - -#include -#include - -#if defined(HAVE_EXPAT_CONFIG_H) /* e.g. MinGW */ -# include -#else /* !defined(HAVE_EXPAT_CONFIG_H) */ - -# define XML_NS 1 -# define XML_DTD 1 -# define XML_CONTEXT_BYTES 1024 - -/* we will assume all Windows platforms are little endian */ -# define BYTEORDER 1234 - -#endif /* !defined(HAVE_EXPAT_CONFIG_H) */ - -#endif /* ndef WINCONFIG_H */ diff --git a/internal/expat/xmlparse.c b/internal/expat/xmlparse.c deleted file mode 100644 index 8b8c6f0..0000000 --- a/internal/expat/xmlparse.c +++ /dev/null @@ -1,6905 +0,0 @@ -/* f519f27c7c3b79fee55aeb8b1e53b7384b079d9118bf3a62eb3a60986a6742f2 (2.2.9+) - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#if ! defined(_GNU_SOURCE) -# define _GNU_SOURCE 1 /* syscall prototype */ -#endif - -#ifdef _WIN32 -/* force stdlib to define rand_s() */ -# if ! defined(_CRT_RAND_S) -# define _CRT_RAND_S -# endif -#endif - -#include -#include /* memset(), memcpy() */ -#include -#include /* UINT_MAX */ -#include /* fprintf */ -#include /* getenv, rand_s */ - -#ifdef _WIN32 -# define getpid GetCurrentProcessId -#else -# include /* gettimeofday() */ -# include /* getpid() */ -# include /* getpid() */ -# include /* O_RDONLY */ -# include -#endif - -#define XML_BUILDING_EXPAT 1 - -#ifdef _WIN32 -# include "winconfig.h" -#elif defined(HAVE_EXPAT_CONFIG_H) -# include -#endif /* ndef _WIN32 */ - -#include "ascii.h" -#include "expat.h" -#include "siphash.h" - -#if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) -# if defined(HAVE_GETRANDOM) -# include /* getrandom */ -# else -# include /* syscall */ -# include /* SYS_getrandom */ -# endif -# if ! defined(GRND_NONBLOCK) -# define GRND_NONBLOCK 0x0001 -# endif /* defined(GRND_NONBLOCK) */ -#endif /* defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) */ - -#if defined(HAVE_LIBBSD) \ - && (defined(HAVE_ARC4RANDOM_BUF) || defined(HAVE_ARC4RANDOM)) -# include -#endif - -#if defined(_WIN32) && ! defined(LOAD_LIBRARY_SEARCH_SYSTEM32) -# define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 -#endif - -#if ! defined(HAVE_GETRANDOM) && ! defined(HAVE_SYSCALL_GETRANDOM) \ - && ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) \ - && ! defined(XML_DEV_URANDOM) && ! defined(_WIN32) \ - && ! defined(XML_POOR_ENTROPY) -# error You do not have support for any sources of high quality entropy \ - enabled. For end user security, that is probably not what you want. \ - \ - Your options include: \ - * Linux >=3.17 + glibc >=2.25 (getrandom): HAVE_GETRANDOM, \ - * Linux >=3.17 + glibc (including <2.25) (syscall SYS_getrandom): HAVE_SYSCALL_GETRANDOM, \ - * BSD / macOS >=10.7 (arc4random_buf): HAVE_ARC4RANDOM_BUF, \ - * BSD / macOS (including <10.7) (arc4random): HAVE_ARC4RANDOM, \ - * libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \ - * libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \ - * Linux (including <3.17) / BSD / macOS (including <10.7) (/dev/urandom): XML_DEV_URANDOM, \ - * Windows >=Vista (rand_s): _WIN32. \ - \ - If insist on not using any of these, bypass this error by defining \ - XML_POOR_ENTROPY; you have been warned. \ - \ - If you have reasons to patch this detection code away or need changes \ - to the build system, please open a bug. Thank you! -#endif - -#ifdef XML_UNICODE -# define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX -# define XmlConvert XmlUtf16Convert -# define XmlGetInternalEncoding XmlGetUtf16InternalEncoding -# define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS -# define XmlEncode XmlUtf16Encode -/* Using pointer subtraction to convert to integer type. */ -# define MUST_CONVERT(enc, s) \ - (! (enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1)) -typedef unsigned short ICHAR; -#else -# define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX -# define XmlConvert XmlUtf8Convert -# define XmlGetInternalEncoding XmlGetUtf8InternalEncoding -# define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS -# define XmlEncode XmlUtf8Encode -# define MUST_CONVERT(enc, s) (! (enc)->isUtf8) -typedef char ICHAR; -#endif - -#ifndef XML_NS - -# define XmlInitEncodingNS XmlInitEncoding -# define XmlInitUnknownEncodingNS XmlInitUnknownEncoding -# undef XmlGetInternalEncodingNS -# define XmlGetInternalEncodingNS XmlGetInternalEncoding -# define XmlParseXmlDeclNS XmlParseXmlDecl - -#endif - -#ifdef XML_UNICODE - -# ifdef XML_UNICODE_WCHAR_T -# define XML_T(x) (const wchar_t) x -# define XML_L(x) L##x -# else -# define XML_T(x) (const unsigned short)x -# define XML_L(x) x -# endif - -#else - -# define XML_T(x) x -# define XML_L(x) x - -#endif - -/* Round up n to be a multiple of sz, where sz is a power of 2. */ -#define ROUND_UP(n, sz) (((n) + ((sz)-1)) & ~((sz)-1)) - -/* Do safe (NULL-aware) pointer arithmetic */ -#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0) - -#include "internal.h" -#include "xmltok.h" -#include "xmlrole.h" - -typedef const XML_Char *KEY; - -typedef struct { - KEY name; -} NAMED; - -typedef struct { - NAMED **v; - unsigned char power; - size_t size; - size_t used; - const XML_Memory_Handling_Suite *mem; -} HASH_TABLE; - -static size_t keylen(KEY s); - -static void copy_salt_to_sipkey(XML_Parser parser, struct sipkey *key); - -/* For probing (after a collision) we need a step size relative prime - to the hash table size, which is a power of 2. We use double-hashing, - since we can calculate a second hash value cheaply by taking those bits - of the first hash value that were discarded (masked out) when the table - index was calculated: index = hash & mask, where mask = table->size - 1. - We limit the maximum step size to table->size / 4 (mask >> 2) and make - it odd, since odd numbers are always relative prime to a power of 2. -*/ -#define SECOND_HASH(hash, mask, power) \ - ((((hash) & ~(mask)) >> ((power)-1)) & ((mask) >> 2)) -#define PROBE_STEP(hash, mask, power) \ - ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1)) - -typedef struct { - NAMED **p; - NAMED **end; -} HASH_TABLE_ITER; - -#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ -#define INIT_DATA_BUF_SIZE 1024 -#define INIT_ATTS_SIZE 16 -#define INIT_ATTS_VERSION 0xFFFFFFFF -#define INIT_BLOCK_SIZE 1024 -#define INIT_BUFFER_SIZE 1024 - -#define EXPAND_SPARE 24 - -typedef struct binding { - struct prefix *prefix; - struct binding *nextTagBinding; - struct binding *prevPrefixBinding; - const struct attribute_id *attId; - XML_Char *uri; - int uriLen; - int uriAlloc; -} BINDING; - -typedef struct prefix { - const XML_Char *name; - BINDING *binding; -} PREFIX; - -typedef struct { - const XML_Char *str; - const XML_Char *localPart; - const XML_Char *prefix; - int strLen; - int uriLen; - int prefixLen; -} TAG_NAME; - -/* TAG represents an open element. - The name of the element is stored in both the document and API - encodings. The memory buffer 'buf' is a separately-allocated - memory area which stores the name. During the XML_Parse()/ - XMLParseBuffer() when the element is open, the memory for the 'raw' - version of the name (in the document encoding) is shared with the - document buffer. If the element is open across calls to - XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to - contain the 'raw' name as well. - - A parser re-uses these structures, maintaining a list of allocated - TAG objects in a free list. -*/ -typedef struct tag { - struct tag *parent; /* parent of this element */ - const char *rawName; /* tagName in the original encoding */ - int rawNameLength; - TAG_NAME name; /* tagName in the API encoding */ - char *buf; /* buffer for name components */ - char *bufEnd; /* end of the buffer */ - BINDING *bindings; -} TAG; - -typedef struct { - const XML_Char *name; - const XML_Char *textPtr; - int textLen; /* length in XML_Chars */ - int processed; /* # of processed bytes - when suspended */ - const XML_Char *systemId; - const XML_Char *base; - const XML_Char *publicId; - const XML_Char *notation; - XML_Bool open; - XML_Bool is_param; - XML_Bool is_internal; /* true if declared in internal subset outside PE */ -} ENTITY; - -typedef struct { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - const XML_Char *name; - int firstchild; - int lastchild; - int childcnt; - int nextsib; -} CONTENT_SCAFFOLD; - -#define INIT_SCAFFOLD_ELEMENTS 32 - -typedef struct block { - struct block *next; - int size; - XML_Char s[1]; -} BLOCK; - -typedef struct { - BLOCK *blocks; - BLOCK *freeBlocks; - const XML_Char *end; - XML_Char *ptr; - XML_Char *start; - const XML_Memory_Handling_Suite *mem; -} STRING_POOL; - -/* The XML_Char before the name is used to determine whether - an attribute has been specified. */ -typedef struct attribute_id { - XML_Char *name; - PREFIX *prefix; - XML_Bool maybeTokenized; - XML_Bool xmlns; -} ATTRIBUTE_ID; - -typedef struct { - const ATTRIBUTE_ID *id; - XML_Bool isCdata; - const XML_Char *value; -} DEFAULT_ATTRIBUTE; - -typedef struct { - unsigned long version; - unsigned long hash; - const XML_Char *uriName; -} NS_ATT; - -typedef struct { - const XML_Char *name; - PREFIX *prefix; - const ATTRIBUTE_ID *idAtt; - int nDefaultAtts; - int allocDefaultAtts; - DEFAULT_ATTRIBUTE *defaultAtts; -} ELEMENT_TYPE; - -typedef struct { - HASH_TABLE generalEntities; - HASH_TABLE elementTypes; - HASH_TABLE attributeIds; - HASH_TABLE prefixes; - STRING_POOL pool; - STRING_POOL entityValuePool; - /* false once a parameter entity reference has been skipped */ - XML_Bool keepProcessing; - /* true once an internal or external PE reference has been encountered; - this includes the reference to an external subset */ - XML_Bool hasParamEntityRefs; - XML_Bool standalone; -#ifdef XML_DTD - /* indicates if external PE has been read */ - XML_Bool paramEntityRead; - HASH_TABLE paramEntities; -#endif /* XML_DTD */ - PREFIX defaultPrefix; - /* === scaffolding for building content model === */ - XML_Bool in_eldecl; - CONTENT_SCAFFOLD *scaffold; - unsigned contentStringLen; - unsigned scaffSize; - unsigned scaffCount; - int scaffLevel; - int *scaffIndex; -} DTD; - -typedef struct open_internal_entity { - const char *internalEventPtr; - const char *internalEventEndPtr; - struct open_internal_entity *next; - ENTITY *entity; - int startTagLevel; - XML_Bool betweenDecl; /* WFC: PE Between Declarations */ -} OPEN_INTERNAL_ENTITY; - -typedef enum XML_Error PTRCALL Processor(XML_Parser parser, const char *start, - const char *end, const char **endPtr); - -static Processor prologProcessor; -static Processor prologInitProcessor; -static Processor contentProcessor; -static Processor cdataSectionProcessor; -#ifdef XML_DTD -static Processor ignoreSectionProcessor; -static Processor externalParEntProcessor; -static Processor externalParEntInitProcessor; -static Processor entityValueProcessor; -static Processor entityValueInitProcessor; -#endif /* XML_DTD */ -static Processor epilogProcessor; -static Processor errorProcessor; -static Processor externalEntityInitProcessor; -static Processor externalEntityInitProcessor2; -static Processor externalEntityInitProcessor3; -static Processor externalEntityContentProcessor; -static Processor internalEntityProcessor; - -static enum XML_Error handleUnknownEncoding(XML_Parser parser, - const XML_Char *encodingName); -static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, - const char *s, const char *next); -static enum XML_Error initializeEncoding(XML_Parser parser); -static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, - const char *s, const char *end, int tok, - const char *next, const char **nextPtr, - XML_Bool haveMore, XML_Bool allowClosingDoctype); -static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, - XML_Bool betweenDecl); -static enum XML_Error doContent(XML_Parser parser, int startTagLevel, - const ENCODING *enc, const char *start, - const char *end, const char **endPtr, - XML_Bool haveMore); -static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *, - const char **startPtr, const char *end, - const char **nextPtr, XML_Bool haveMore); -#ifdef XML_DTD -static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, - const char **startPtr, const char *end, - const char **nextPtr, XML_Bool haveMore); -#endif /* XML_DTD */ - -static void freeBindings(XML_Parser parser, BINDING *bindings); -static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, - const char *s, TAG_NAME *tagNamePtr, - BINDING **bindingsPtr); -static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, - const ATTRIBUTE_ID *attId, const XML_Char *uri, - BINDING **bindingsPtr); -static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata, - XML_Bool isId, const XML_Char *dfltValue, - XML_Parser parser); -static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *, - XML_Bool isCdata, const char *, - const char *, STRING_POOL *); -static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *, - XML_Bool isCdata, const char *, - const char *, STRING_POOL *); -static ATTRIBUTE_ID *getAttributeId(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end); -static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); -static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end); -static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end); -static int reportComment(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end); -static void reportDefault(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end); - -static const XML_Char *getContext(XML_Parser parser); -static XML_Bool setContext(XML_Parser parser, const XML_Char *context); - -static void FASTCALL normalizePublicId(XML_Char *s); - -static DTD *dtdCreate(const XML_Memory_Handling_Suite *ms); -/* do not call if m_parentParser != NULL */ -static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms); -static void dtdDestroy(DTD *p, XML_Bool isDocEntity, - const XML_Memory_Handling_Suite *ms); -static int dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd, - const XML_Memory_Handling_Suite *ms); -static int copyEntityTable(XML_Parser oldParser, HASH_TABLE *, STRING_POOL *, - const HASH_TABLE *); -static NAMED *lookup(XML_Parser parser, HASH_TABLE *table, KEY name, - size_t createSize); -static void FASTCALL hashTableInit(HASH_TABLE *, - const XML_Memory_Handling_Suite *ms); -static void FASTCALL hashTableClear(HASH_TABLE *); -static void FASTCALL hashTableDestroy(HASH_TABLE *); -static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); -static NAMED *FASTCALL hashTableIterNext(HASH_TABLE_ITER *); - -static void FASTCALL poolInit(STRING_POOL *, - const XML_Memory_Handling_Suite *ms); -static void FASTCALL poolClear(STRING_POOL *); -static void FASTCALL poolDestroy(STRING_POOL *); -static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); -static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); -static XML_Bool FASTCALL poolGrow(STRING_POOL *pool); -static const XML_Char *FASTCALL poolCopyString(STRING_POOL *pool, - const XML_Char *s); -static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, - int n); -static const XML_Char *FASTCALL poolAppendString(STRING_POOL *pool, - const XML_Char *s); - -static int FASTCALL nextScaffoldPart(XML_Parser parser); -static XML_Content *build_model(XML_Parser parser); -static ELEMENT_TYPE *getElementType(XML_Parser parser, const ENCODING *enc, - const char *ptr, const char *end); - -static XML_Char *copyString(const XML_Char *s, - const XML_Memory_Handling_Suite *memsuite); - -static unsigned long generate_hash_secret_salt(XML_Parser parser); -static XML_Bool startParsing(XML_Parser parser); - -static XML_Parser parserCreate(const XML_Char *encodingName, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *nameSep, DTD *dtd); - -static void parserInit(XML_Parser parser, const XML_Char *encodingName); - -#define poolStart(pool) ((pool)->start) -#define poolEnd(pool) ((pool)->ptr) -#define poolLength(pool) ((pool)->ptr - (pool)->start) -#define poolChop(pool) ((void)--(pool->ptr)) -#define poolLastChar(pool) (((pool)->ptr)[-1]) -#define poolDiscard(pool) ((pool)->ptr = (pool)->start) -#define poolFinish(pool) ((pool)->start = (pool)->ptr) -#define poolAppendChar(pool, c) \ - (((pool)->ptr == (pool)->end && ! poolGrow(pool)) \ - ? 0 \ - : ((*((pool)->ptr)++ = c), 1)) - -struct XML_ParserStruct { - /* The first member must be m_userData so that the XML_GetUserData - macro works. */ - void *m_userData; - void *m_handlerArg; - char *m_buffer; - const XML_Memory_Handling_Suite m_mem; - /* first character to be parsed */ - const char *m_bufferPtr; - /* past last character to be parsed */ - char *m_bufferEnd; - /* allocated end of m_buffer */ - const char *m_bufferLim; - XML_Index m_parseEndByteIndex; - const char *m_parseEndPtr; - XML_Char *m_dataBuf; - XML_Char *m_dataBufEnd; - XML_StartElementHandler m_startElementHandler; - XML_EndElementHandler m_endElementHandler; - XML_CharacterDataHandler m_characterDataHandler; - XML_ProcessingInstructionHandler m_processingInstructionHandler; - XML_CommentHandler m_commentHandler; - XML_StartCdataSectionHandler m_startCdataSectionHandler; - XML_EndCdataSectionHandler m_endCdataSectionHandler; - XML_DefaultHandler m_defaultHandler; - XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; - XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; - XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; - XML_NotationDeclHandler m_notationDeclHandler; - XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; - XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; - XML_NotStandaloneHandler m_notStandaloneHandler; - XML_ExternalEntityRefHandler m_externalEntityRefHandler; - XML_Parser m_externalEntityRefHandlerArg; - XML_SkippedEntityHandler m_skippedEntityHandler; - XML_UnknownEncodingHandler m_unknownEncodingHandler; - XML_ElementDeclHandler m_elementDeclHandler; - XML_AttlistDeclHandler m_attlistDeclHandler; - XML_EntityDeclHandler m_entityDeclHandler; - XML_XmlDeclHandler m_xmlDeclHandler; - const ENCODING *m_encoding; - INIT_ENCODING m_initEncoding; - const ENCODING *m_internalEncoding; - const XML_Char *m_protocolEncodingName; - XML_Bool m_ns; - XML_Bool m_ns_triplets; - void *m_unknownEncodingMem; - void *m_unknownEncodingData; - void *m_unknownEncodingHandlerData; - void(XMLCALL *m_unknownEncodingRelease)(void *); - PROLOG_STATE m_prologState; - Processor *m_processor; - enum XML_Error m_errorCode; - const char *m_eventPtr; - const char *m_eventEndPtr; - const char *m_positionPtr; - OPEN_INTERNAL_ENTITY *m_openInternalEntities; - OPEN_INTERNAL_ENTITY *m_freeInternalEntities; - XML_Bool m_defaultExpandInternalEntities; - int m_tagLevel; - ENTITY *m_declEntity; - const XML_Char *m_doctypeName; - const XML_Char *m_doctypeSysid; - const XML_Char *m_doctypePubid; - const XML_Char *m_declAttributeType; - const XML_Char *m_declNotationName; - const XML_Char *m_declNotationPublicId; - ELEMENT_TYPE *m_declElementType; - ATTRIBUTE_ID *m_declAttributeId; - XML_Bool m_declAttributeIsCdata; - XML_Bool m_declAttributeIsId; - DTD *m_dtd; - const XML_Char *m_curBase; - TAG *m_tagStack; - TAG *m_freeTagList; - BINDING *m_inheritedBindings; - BINDING *m_freeBindingList; - int m_attsSize; - int m_nSpecifiedAtts; - int m_idAttIndex; - ATTRIBUTE *m_atts; - NS_ATT *m_nsAtts; - unsigned long m_nsAttsVersion; - unsigned char m_nsAttsPower; -#ifdef XML_ATTR_INFO - XML_AttrInfo *m_attInfo; -#endif - POSITION m_position; - STRING_POOL m_tempPool; - STRING_POOL m_temp2Pool; - char *m_groupConnector; - unsigned int m_groupSize; - XML_Char m_namespaceSeparator; - XML_Parser m_parentParser; - XML_ParsingStatus m_parsingStatus; -#ifdef XML_DTD - XML_Bool m_isParamEntity; - XML_Bool m_useForeignDTD; - enum XML_ParamEntityParsing m_paramEntityParsing; -#endif - unsigned long m_hash_secret_salt; -}; - -#define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s))) -#define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p), (s))) -#define FREE(parser, p) (parser->m_mem.free_fcn((p))) - -XML_Parser XMLCALL -XML_ParserCreate(const XML_Char *encodingName) { - return XML_ParserCreate_MM(encodingName, NULL, NULL); -} - -XML_Parser XMLCALL -XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { - XML_Char tmp[2]; - *tmp = nsSep; - return XML_ParserCreate_MM(encodingName, NULL, tmp); -} - -static const XML_Char implicitContext[] - = {ASCII_x, ASCII_m, ASCII_l, ASCII_EQUALS, ASCII_h, - ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, - ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, - ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, - ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, - ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, - ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e, - ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, - '\0'}; - -/* To avoid warnings about unused functions: */ -#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) - -# if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) - -/* Obtain entropy on Linux 3.17+ */ -static int -writeRandomBytes_getrandom_nonblock(void *target, size_t count) { - int success = 0; /* full count bytes written? */ - size_t bytesWrittenTotal = 0; - const unsigned int getrandomFlags = GRND_NONBLOCK; - - do { - void *const currentTarget = (void *)((char *)target + bytesWrittenTotal); - const size_t bytesToWrite = count - bytesWrittenTotal; - - const int bytesWrittenMore = -# if defined(HAVE_GETRANDOM) - getrandom(currentTarget, bytesToWrite, getrandomFlags); -# else - syscall(SYS_getrandom, currentTarget, bytesToWrite, getrandomFlags); -# endif - - if (bytesWrittenMore > 0) { - bytesWrittenTotal += bytesWrittenMore; - if (bytesWrittenTotal >= count) - success = 1; - } - } while (! success && (errno == EINTR)); - - return success; -} - -# endif /* defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) */ - -# if ! defined(_WIN32) && defined(XML_DEV_URANDOM) - -/* Extract entropy from /dev/urandom */ -static int -writeRandomBytes_dev_urandom(void *target, size_t count) { - int success = 0; /* full count bytes written? */ - size_t bytesWrittenTotal = 0; - - const int fd = open("/dev/urandom", O_RDONLY); - if (fd < 0) { - return 0; - } - - do { - void *const currentTarget = (void *)((char *)target + bytesWrittenTotal); - const size_t bytesToWrite = count - bytesWrittenTotal; - - const ssize_t bytesWrittenMore = read(fd, currentTarget, bytesToWrite); - - if (bytesWrittenMore > 0) { - bytesWrittenTotal += bytesWrittenMore; - if (bytesWrittenTotal >= count) - success = 1; - } - } while (! success && (errno == EINTR)); - - close(fd); - return success; -} - -# endif /* ! defined(_WIN32) && defined(XML_DEV_URANDOM) */ - -#endif /* ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) */ - -#if defined(HAVE_ARC4RANDOM) && ! defined(HAVE_ARC4RANDOM_BUF) - -static void -writeRandomBytes_arc4random(void *target, size_t count) { - size_t bytesWrittenTotal = 0; - - while (bytesWrittenTotal < count) { - const uint32_t random32 = arc4random(); - size_t i = 0; - - for (; (i < sizeof(random32)) && (bytesWrittenTotal < count); - i++, bytesWrittenTotal++) { - const uint8_t random8 = (uint8_t)(random32 >> (i * 8)); - ((uint8_t *)target)[bytesWrittenTotal] = random8; - } - } -} - -#endif /* defined(HAVE_ARC4RANDOM) && ! defined(HAVE_ARC4RANDOM_BUF) */ - -#ifdef _WIN32 - -/* Provide declaration of rand_s() for MinGW-32 (not 64, which has it), - as it didn't declare it in its header prior to version 5.3.0 of its - runtime package (mingwrt, containing stdlib.h). The upstream fix - was introduced at https://osdn.net/projects/mingw/ticket/39658 . */ -# if defined(__MINGW32__) && defined(__MINGW32_VERSION) \ - && __MINGW32_VERSION < 5003000L && ! defined(__MINGW64_VERSION_MAJOR) -__declspec(dllimport) int rand_s(unsigned int *); -# endif - -/* Obtain entropy on Windows using the rand_s() function which - * generates cryptographically secure random numbers. Internally it - * uses RtlGenRandom API which is present in Windows XP and later. - */ -static int -writeRandomBytes_rand_s(void *target, size_t count) { - size_t bytesWrittenTotal = 0; - - while (bytesWrittenTotal < count) { - unsigned int random32 = 0; - size_t i = 0; - - if (rand_s(&random32)) - return 0; /* failure */ - - for (; (i < sizeof(random32)) && (bytesWrittenTotal < count); - i++, bytesWrittenTotal++) { - const uint8_t random8 = (uint8_t)(random32 >> (i * 8)); - ((uint8_t *)target)[bytesWrittenTotal] = random8; - } - } - return 1; /* success */ -} - -#endif /* _WIN32 */ - -#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) - -static unsigned long -gather_time_entropy(void) { -# ifdef _WIN32 - FILETIME ft; - GetSystemTimeAsFileTime(&ft); /* never fails */ - return ft.dwHighDateTime ^ ft.dwLowDateTime; -# else - struct timeval tv; - int gettimeofday_res; - - gettimeofday_res = gettimeofday(&tv, NULL); - -# if defined(NDEBUG) - (void)gettimeofday_res; -# else - assert(gettimeofday_res == 0); -# endif /* defined(NDEBUG) */ - - /* Microseconds time is <20 bits entropy */ - return tv.tv_usec; -# endif -} - -#endif /* ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) */ - -static unsigned long -ENTROPY_DEBUG(const char *label, unsigned long entropy) { - const char *const EXPAT_ENTROPY_DEBUG = getenv("EXPAT_ENTROPY_DEBUG"); - if (EXPAT_ENTROPY_DEBUG && ! strcmp(EXPAT_ENTROPY_DEBUG, "1")) { - fprintf(stderr, "Entropy: %s --> 0x%0*lx (%lu bytes)\n", label, - (int)sizeof(entropy) * 2, entropy, (unsigned long)sizeof(entropy)); - } - return entropy; -} - -static unsigned long -generate_hash_secret_salt(XML_Parser parser) { - unsigned long entropy; - (void)parser; - - /* "Failproof" high quality providers: */ -#if defined(HAVE_ARC4RANDOM_BUF) - arc4random_buf(&entropy, sizeof(entropy)); - return ENTROPY_DEBUG("arc4random_buf", entropy); -#elif defined(HAVE_ARC4RANDOM) - writeRandomBytes_arc4random((void *)&entropy, sizeof(entropy)); - return ENTROPY_DEBUG("arc4random", entropy); -#else - /* Try high quality providers first .. */ -# ifdef _WIN32 - if (writeRandomBytes_rand_s((void *)&entropy, sizeof(entropy))) { - return ENTROPY_DEBUG("rand_s", entropy); - } -# elif defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) - if (writeRandomBytes_getrandom_nonblock((void *)&entropy, sizeof(entropy))) { - return ENTROPY_DEBUG("getrandom", entropy); - } -# endif -# if ! defined(_WIN32) && defined(XML_DEV_URANDOM) - if (writeRandomBytes_dev_urandom((void *)&entropy, sizeof(entropy))) { - return ENTROPY_DEBUG("/dev/urandom", entropy); - } -# endif /* ! defined(_WIN32) && defined(XML_DEV_URANDOM) */ - /* .. and self-made low quality for backup: */ - - /* Process ID is 0 bits entropy if attacker has local access */ - entropy = gather_time_entropy() ^ getpid(); - - /* Factors are 2^31-1 and 2^61-1 (Mersenne primes M31 and M61) */ - if (sizeof(unsigned long) == 4) { - return ENTROPY_DEBUG("fallback(4)", entropy * 2147483647); - } else { - return ENTROPY_DEBUG("fallback(8)", - entropy * (unsigned long)2305843009213693951ULL); - } -#endif -} - -static unsigned long -get_hash_secret_salt(XML_Parser parser) { - if (parser->m_parentParser != NULL) - return get_hash_secret_salt(parser->m_parentParser); - return parser->m_hash_secret_salt; -} - -static XML_Bool /* only valid for root parser */ -startParsing(XML_Parser parser) { - /* hash functions must be initialized before setContext() is called */ - if (parser->m_hash_secret_salt == 0) - parser->m_hash_secret_salt = generate_hash_secret_salt(parser); - if (parser->m_ns) { - /* implicit context only set for root parser, since child - parsers (i.e. external entity parsers) will inherit it - */ - return setContext(parser, implicitContext); - } - return XML_TRUE; -} - -XML_Parser XMLCALL -XML_ParserCreate_MM(const XML_Char *encodingName, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *nameSep) { - return parserCreate(encodingName, memsuite, nameSep, NULL); -} - -static XML_Parser -parserCreate(const XML_Char *encodingName, - const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, - DTD *dtd) { - XML_Parser parser; - - if (memsuite) { - XML_Memory_Handling_Suite *mtemp; - parser = (XML_Parser)memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); - if (parser != NULL) { - mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); - mtemp->malloc_fcn = memsuite->malloc_fcn; - mtemp->realloc_fcn = memsuite->realloc_fcn; - mtemp->free_fcn = memsuite->free_fcn; - } - } else { - XML_Memory_Handling_Suite *mtemp; - parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct)); - if (parser != NULL) { - mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); - mtemp->malloc_fcn = malloc; - mtemp->realloc_fcn = realloc; - mtemp->free_fcn = free; - } - } - - if (! parser) - return parser; - - parser->m_buffer = NULL; - parser->m_bufferLim = NULL; - - parser->m_attsSize = INIT_ATTS_SIZE; - parser->m_atts - = (ATTRIBUTE *)MALLOC(parser, parser->m_attsSize * sizeof(ATTRIBUTE)); - if (parser->m_atts == NULL) { - FREE(parser, parser); - return NULL; - } -#ifdef XML_ATTR_INFO - parser->m_attInfo = (XML_AttrInfo *)MALLOC( - parser, parser->m_attsSize * sizeof(XML_AttrInfo)); - if (parser->m_attInfo == NULL) { - FREE(parser, parser->m_atts); - FREE(parser, parser); - return NULL; - } -#endif - parser->m_dataBuf - = (XML_Char *)MALLOC(parser, INIT_DATA_BUF_SIZE * sizeof(XML_Char)); - if (parser->m_dataBuf == NULL) { - FREE(parser, parser->m_atts); -#ifdef XML_ATTR_INFO - FREE(parser, parser->m_attInfo); -#endif - FREE(parser, parser); - return NULL; - } - parser->m_dataBufEnd = parser->m_dataBuf + INIT_DATA_BUF_SIZE; - - if (dtd) - parser->m_dtd = dtd; - else { - parser->m_dtd = dtdCreate(&parser->m_mem); - if (parser->m_dtd == NULL) { - FREE(parser, parser->m_dataBuf); - FREE(parser, parser->m_atts); -#ifdef XML_ATTR_INFO - FREE(parser, parser->m_attInfo); -#endif - FREE(parser, parser); - return NULL; - } - } - - parser->m_freeBindingList = NULL; - parser->m_freeTagList = NULL; - parser->m_freeInternalEntities = NULL; - - parser->m_groupSize = 0; - parser->m_groupConnector = NULL; - - parser->m_unknownEncodingHandler = NULL; - parser->m_unknownEncodingHandlerData = NULL; - - parser->m_namespaceSeparator = ASCII_EXCL; - parser->m_ns = XML_FALSE; - parser->m_ns_triplets = XML_FALSE; - - parser->m_nsAtts = NULL; - parser->m_nsAttsVersion = 0; - parser->m_nsAttsPower = 0; - - parser->m_protocolEncodingName = NULL; - - poolInit(&parser->m_tempPool, &(parser->m_mem)); - poolInit(&parser->m_temp2Pool, &(parser->m_mem)); - parserInit(parser, encodingName); - - if (encodingName && ! parser->m_protocolEncodingName) { - XML_ParserFree(parser); - return NULL; - } - - if (nameSep) { - parser->m_ns = XML_TRUE; - parser->m_internalEncoding = XmlGetInternalEncodingNS(); - parser->m_namespaceSeparator = *nameSep; - } else { - parser->m_internalEncoding = XmlGetInternalEncoding(); - } - - return parser; -} - -static void -parserInit(XML_Parser parser, const XML_Char *encodingName) { - parser->m_processor = prologInitProcessor; - XmlPrologStateInit(&parser->m_prologState); - if (encodingName != NULL) { - parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); - } - parser->m_curBase = NULL; - XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0); - parser->m_userData = NULL; - parser->m_handlerArg = NULL; - parser->m_startElementHandler = NULL; - parser->m_endElementHandler = NULL; - parser->m_characterDataHandler = NULL; - parser->m_processingInstructionHandler = NULL; - parser->m_commentHandler = NULL; - parser->m_startCdataSectionHandler = NULL; - parser->m_endCdataSectionHandler = NULL; - parser->m_defaultHandler = NULL; - parser->m_startDoctypeDeclHandler = NULL; - parser->m_endDoctypeDeclHandler = NULL; - parser->m_unparsedEntityDeclHandler = NULL; - parser->m_notationDeclHandler = NULL; - parser->m_startNamespaceDeclHandler = NULL; - parser->m_endNamespaceDeclHandler = NULL; - parser->m_notStandaloneHandler = NULL; - parser->m_externalEntityRefHandler = NULL; - parser->m_externalEntityRefHandlerArg = parser; - parser->m_skippedEntityHandler = NULL; - parser->m_elementDeclHandler = NULL; - parser->m_attlistDeclHandler = NULL; - parser->m_entityDeclHandler = NULL; - parser->m_xmlDeclHandler = NULL; - parser->m_bufferPtr = parser->m_buffer; - parser->m_bufferEnd = parser->m_buffer; - parser->m_parseEndByteIndex = 0; - parser->m_parseEndPtr = NULL; - parser->m_declElementType = NULL; - parser->m_declAttributeId = NULL; - parser->m_declEntity = NULL; - parser->m_doctypeName = NULL; - parser->m_doctypeSysid = NULL; - parser->m_doctypePubid = NULL; - parser->m_declAttributeType = NULL; - parser->m_declNotationName = NULL; - parser->m_declNotationPublicId = NULL; - parser->m_declAttributeIsCdata = XML_FALSE; - parser->m_declAttributeIsId = XML_FALSE; - memset(&parser->m_position, 0, sizeof(POSITION)); - parser->m_errorCode = XML_ERROR_NONE; - parser->m_eventPtr = NULL; - parser->m_eventEndPtr = NULL; - parser->m_positionPtr = NULL; - parser->m_openInternalEntities = NULL; - parser->m_defaultExpandInternalEntities = XML_TRUE; - parser->m_tagLevel = 0; - parser->m_tagStack = NULL; - parser->m_inheritedBindings = NULL; - parser->m_nSpecifiedAtts = 0; - parser->m_unknownEncodingMem = NULL; - parser->m_unknownEncodingRelease = NULL; - parser->m_unknownEncodingData = NULL; - parser->m_parentParser = NULL; - parser->m_parsingStatus.parsing = XML_INITIALIZED; -#ifdef XML_DTD - parser->m_isParamEntity = XML_FALSE; - parser->m_useForeignDTD = XML_FALSE; - parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif - parser->m_hash_secret_salt = 0; -} - -/* moves list of bindings to m_freeBindingList */ -static void FASTCALL -moveToFreeBindingList(XML_Parser parser, BINDING *bindings) { - while (bindings) { - BINDING *b = bindings; - bindings = bindings->nextTagBinding; - b->nextTagBinding = parser->m_freeBindingList; - parser->m_freeBindingList = b; - } -} - -XML_Bool XMLCALL -XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) { - TAG *tStk; - OPEN_INTERNAL_ENTITY *openEntityList; - - if (parser == NULL) - return XML_FALSE; - - if (parser->m_parentParser) - return XML_FALSE; - /* move m_tagStack to m_freeTagList */ - tStk = parser->m_tagStack; - while (tStk) { - TAG *tag = tStk; - tStk = tStk->parent; - tag->parent = parser->m_freeTagList; - moveToFreeBindingList(parser, tag->bindings); - tag->bindings = NULL; - parser->m_freeTagList = tag; - } - /* move m_openInternalEntities to m_freeInternalEntities */ - openEntityList = parser->m_openInternalEntities; - while (openEntityList) { - OPEN_INTERNAL_ENTITY *openEntity = openEntityList; - openEntityList = openEntity->next; - openEntity->next = parser->m_freeInternalEntities; - parser->m_freeInternalEntities = openEntity; - } - moveToFreeBindingList(parser, parser->m_inheritedBindings); - FREE(parser, parser->m_unknownEncodingMem); - if (parser->m_unknownEncodingRelease) - parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); - poolClear(&parser->m_tempPool); - poolClear(&parser->m_temp2Pool); - FREE(parser, (void *)parser->m_protocolEncodingName); - parser->m_protocolEncodingName = NULL; - parserInit(parser, encodingName); - dtdReset(parser->m_dtd, &parser->m_mem); - return XML_TRUE; -} - -enum XML_Status XMLCALL -XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { - if (parser == NULL) - return XML_STATUS_ERROR; - /* Block after XML_Parse()/XML_ParseBuffer() has been called. - XXX There's no way for the caller to determine which of the - XXX possible error cases caused the XML_STATUS_ERROR return. - */ - if (parser->m_parsingStatus.parsing == XML_PARSING - || parser->m_parsingStatus.parsing == XML_SUSPENDED) - return XML_STATUS_ERROR; - - /* Get rid of any previous encoding name */ - FREE(parser, (void *)parser->m_protocolEncodingName); - - if (encodingName == NULL) - /* No new encoding name */ - parser->m_protocolEncodingName = NULL; - else { - /* Copy the new encoding name into allocated memory */ - parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); - if (! parser->m_protocolEncodingName) - return XML_STATUS_ERROR; - } - return XML_STATUS_OK; -} - -XML_Parser XMLCALL -XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, - const XML_Char *encodingName) { - XML_Parser parser = oldParser; - DTD *newDtd = NULL; - DTD *oldDtd; - XML_StartElementHandler oldStartElementHandler; - XML_EndElementHandler oldEndElementHandler; - XML_CharacterDataHandler oldCharacterDataHandler; - XML_ProcessingInstructionHandler oldProcessingInstructionHandler; - XML_CommentHandler oldCommentHandler; - XML_StartCdataSectionHandler oldStartCdataSectionHandler; - XML_EndCdataSectionHandler oldEndCdataSectionHandler; - XML_DefaultHandler oldDefaultHandler; - XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler; - XML_NotationDeclHandler oldNotationDeclHandler; - XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler; - XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler; - XML_NotStandaloneHandler oldNotStandaloneHandler; - XML_ExternalEntityRefHandler oldExternalEntityRefHandler; - XML_SkippedEntityHandler oldSkippedEntityHandler; - XML_UnknownEncodingHandler oldUnknownEncodingHandler; - XML_ElementDeclHandler oldElementDeclHandler; - XML_AttlistDeclHandler oldAttlistDeclHandler; - XML_EntityDeclHandler oldEntityDeclHandler; - XML_XmlDeclHandler oldXmlDeclHandler; - ELEMENT_TYPE *oldDeclElementType; - - void *oldUserData; - void *oldHandlerArg; - XML_Bool oldDefaultExpandInternalEntities; - XML_Parser oldExternalEntityRefHandlerArg; -#ifdef XML_DTD - enum XML_ParamEntityParsing oldParamEntityParsing; - int oldInEntityValue; -#endif - XML_Bool oldns_triplets; - /* Note that the new parser shares the same hash secret as the old - parser, so that dtdCopy and copyEntityTable can lookup values - from hash tables associated with either parser without us having - to worry which hash secrets each table has. - */ - unsigned long oldhash_secret_salt; - - /* Validate the oldParser parameter before we pull everything out of it */ - if (oldParser == NULL) - return NULL; - - /* Stash the original parser contents on the stack */ - oldDtd = parser->m_dtd; - oldStartElementHandler = parser->m_startElementHandler; - oldEndElementHandler = parser->m_endElementHandler; - oldCharacterDataHandler = parser->m_characterDataHandler; - oldProcessingInstructionHandler = parser->m_processingInstructionHandler; - oldCommentHandler = parser->m_commentHandler; - oldStartCdataSectionHandler = parser->m_startCdataSectionHandler; - oldEndCdataSectionHandler = parser->m_endCdataSectionHandler; - oldDefaultHandler = parser->m_defaultHandler; - oldUnparsedEntityDeclHandler = parser->m_unparsedEntityDeclHandler; - oldNotationDeclHandler = parser->m_notationDeclHandler; - oldStartNamespaceDeclHandler = parser->m_startNamespaceDeclHandler; - oldEndNamespaceDeclHandler = parser->m_endNamespaceDeclHandler; - oldNotStandaloneHandler = parser->m_notStandaloneHandler; - oldExternalEntityRefHandler = parser->m_externalEntityRefHandler; - oldSkippedEntityHandler = parser->m_skippedEntityHandler; - oldUnknownEncodingHandler = parser->m_unknownEncodingHandler; - oldElementDeclHandler = parser->m_elementDeclHandler; - oldAttlistDeclHandler = parser->m_attlistDeclHandler; - oldEntityDeclHandler = parser->m_entityDeclHandler; - oldXmlDeclHandler = parser->m_xmlDeclHandler; - oldDeclElementType = parser->m_declElementType; - - oldUserData = parser->m_userData; - oldHandlerArg = parser->m_handlerArg; - oldDefaultExpandInternalEntities = parser->m_defaultExpandInternalEntities; - oldExternalEntityRefHandlerArg = parser->m_externalEntityRefHandlerArg; -#ifdef XML_DTD - oldParamEntityParsing = parser->m_paramEntityParsing; - oldInEntityValue = parser->m_prologState.inEntityValue; -#endif - oldns_triplets = parser->m_ns_triplets; - /* Note that the new parser shares the same hash secret as the old - parser, so that dtdCopy and copyEntityTable can lookup values - from hash tables associated with either parser without us having - to worry which hash secrets each table has. - */ - oldhash_secret_salt = parser->m_hash_secret_salt; - -#ifdef XML_DTD - if (! context) - newDtd = oldDtd; -#endif /* XML_DTD */ - - /* Note that the magical uses of the pre-processor to make field - access look more like C++ require that `parser' be overwritten - here. This makes this function more painful to follow than it - would be otherwise. - */ - if (parser->m_ns) { - XML_Char tmp[2]; - *tmp = parser->m_namespaceSeparator; - parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); - } else { - parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); - } - - if (! parser) - return NULL; - - parser->m_startElementHandler = oldStartElementHandler; - parser->m_endElementHandler = oldEndElementHandler; - parser->m_characterDataHandler = oldCharacterDataHandler; - parser->m_processingInstructionHandler = oldProcessingInstructionHandler; - parser->m_commentHandler = oldCommentHandler; - parser->m_startCdataSectionHandler = oldStartCdataSectionHandler; - parser->m_endCdataSectionHandler = oldEndCdataSectionHandler; - parser->m_defaultHandler = oldDefaultHandler; - parser->m_unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; - parser->m_notationDeclHandler = oldNotationDeclHandler; - parser->m_startNamespaceDeclHandler = oldStartNamespaceDeclHandler; - parser->m_endNamespaceDeclHandler = oldEndNamespaceDeclHandler; - parser->m_notStandaloneHandler = oldNotStandaloneHandler; - parser->m_externalEntityRefHandler = oldExternalEntityRefHandler; - parser->m_skippedEntityHandler = oldSkippedEntityHandler; - parser->m_unknownEncodingHandler = oldUnknownEncodingHandler; - parser->m_elementDeclHandler = oldElementDeclHandler; - parser->m_attlistDeclHandler = oldAttlistDeclHandler; - parser->m_entityDeclHandler = oldEntityDeclHandler; - parser->m_xmlDeclHandler = oldXmlDeclHandler; - parser->m_declElementType = oldDeclElementType; - parser->m_userData = oldUserData; - if (oldUserData == oldHandlerArg) - parser->m_handlerArg = parser->m_userData; - else - parser->m_handlerArg = parser; - if (oldExternalEntityRefHandlerArg != oldParser) - parser->m_externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; - parser->m_defaultExpandInternalEntities = oldDefaultExpandInternalEntities; - parser->m_ns_triplets = oldns_triplets; - parser->m_hash_secret_salt = oldhash_secret_salt; - parser->m_parentParser = oldParser; -#ifdef XML_DTD - parser->m_paramEntityParsing = oldParamEntityParsing; - parser->m_prologState.inEntityValue = oldInEntityValue; - if (context) { -#endif /* XML_DTD */ - if (! dtdCopy(oldParser, parser->m_dtd, oldDtd, &parser->m_mem) - || ! setContext(parser, context)) { - XML_ParserFree(parser); - return NULL; - } - parser->m_processor = externalEntityInitProcessor; -#ifdef XML_DTD - } else { - /* The DTD instance referenced by parser->m_dtd is shared between the - document's root parser and external PE parsers, therefore one does not - need to call setContext. In addition, one also *must* not call - setContext, because this would overwrite existing prefix->binding - pointers in parser->m_dtd with ones that get destroyed with the external - PE parser. This would leave those prefixes with dangling pointers. - */ - parser->m_isParamEntity = XML_TRUE; - XmlPrologStateInitExternalEntity(&parser->m_prologState); - parser->m_processor = externalParEntInitProcessor; - } -#endif /* XML_DTD */ - return parser; -} - -static void FASTCALL -destroyBindings(BINDING *bindings, XML_Parser parser) { - for (;;) { - BINDING *b = bindings; - if (! b) - break; - bindings = b->nextTagBinding; - FREE(parser, b->uri); - FREE(parser, b); - } -} - -void XMLCALL -XML_ParserFree(XML_Parser parser) { - TAG *tagList; - OPEN_INTERNAL_ENTITY *entityList; - if (parser == NULL) - return; - /* free m_tagStack and m_freeTagList */ - tagList = parser->m_tagStack; - for (;;) { - TAG *p; - if (tagList == NULL) { - if (parser->m_freeTagList == NULL) - break; - tagList = parser->m_freeTagList; - parser->m_freeTagList = NULL; - } - p = tagList; - tagList = tagList->parent; - FREE(parser, p->buf); - destroyBindings(p->bindings, parser); - FREE(parser, p); - } - /* free m_openInternalEntities and m_freeInternalEntities */ - entityList = parser->m_openInternalEntities; - for (;;) { - OPEN_INTERNAL_ENTITY *openEntity; - if (entityList == NULL) { - if (parser->m_freeInternalEntities == NULL) - break; - entityList = parser->m_freeInternalEntities; - parser->m_freeInternalEntities = NULL; - } - openEntity = entityList; - entityList = entityList->next; - FREE(parser, openEntity); - } - - destroyBindings(parser->m_freeBindingList, parser); - destroyBindings(parser->m_inheritedBindings, parser); - poolDestroy(&parser->m_tempPool); - poolDestroy(&parser->m_temp2Pool); - FREE(parser, (void *)parser->m_protocolEncodingName); -#ifdef XML_DTD - /* external parameter entity parsers share the DTD structure - parser->m_dtd with the root parser, so we must not destroy it - */ - if (! parser->m_isParamEntity && parser->m_dtd) -#else - if (parser->m_dtd) -#endif /* XML_DTD */ - dtdDestroy(parser->m_dtd, (XML_Bool)! parser->m_parentParser, - &parser->m_mem); - FREE(parser, (void *)parser->m_atts); -#ifdef XML_ATTR_INFO - FREE(parser, (void *)parser->m_attInfo); -#endif - FREE(parser, parser->m_groupConnector); - FREE(parser, parser->m_buffer); - FREE(parser, parser->m_dataBuf); - FREE(parser, parser->m_nsAtts); - FREE(parser, parser->m_unknownEncodingMem); - if (parser->m_unknownEncodingRelease) - parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); - FREE(parser, parser); -} - -void XMLCALL -XML_UseParserAsHandlerArg(XML_Parser parser) { - if (parser != NULL) - parser->m_handlerArg = parser; -} - -enum XML_Error XMLCALL -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) { - if (parser == NULL) - return XML_ERROR_INVALID_ARGUMENT; -#ifdef XML_DTD - /* block after XML_Parse()/XML_ParseBuffer() has been called */ - if (parser->m_parsingStatus.parsing == XML_PARSING - || parser->m_parsingStatus.parsing == XML_SUSPENDED) - return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; - parser->m_useForeignDTD = useDTD; - return XML_ERROR_NONE; -#else - UNUSED_P(useDTD); - return XML_ERROR_FEATURE_REQUIRES_XML_DTD; -#endif -} - -void XMLCALL -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { - if (parser == NULL) - return; - /* block after XML_Parse()/XML_ParseBuffer() has been called */ - if (parser->m_parsingStatus.parsing == XML_PARSING - || parser->m_parsingStatus.parsing == XML_SUSPENDED) - return; - parser->m_ns_triplets = do_nst ? XML_TRUE : XML_FALSE; -} - -void XMLCALL -XML_SetUserData(XML_Parser parser, void *p) { - if (parser == NULL) - return; - if (parser->m_handlerArg == parser->m_userData) - parser->m_handlerArg = parser->m_userData = p; - else - parser->m_userData = p; -} - -enum XML_Status XMLCALL -XML_SetBase(XML_Parser parser, const XML_Char *p) { - if (parser == NULL) - return XML_STATUS_ERROR; - if (p) { - p = poolCopyString(&parser->m_dtd->pool, p); - if (! p) - return XML_STATUS_ERROR; - parser->m_curBase = p; - } else - parser->m_curBase = NULL; - return XML_STATUS_OK; -} - -const XML_Char *XMLCALL -XML_GetBase(XML_Parser parser) { - if (parser == NULL) - return NULL; - return parser->m_curBase; -} - -int XMLCALL -XML_GetSpecifiedAttributeCount(XML_Parser parser) { - if (parser == NULL) - return -1; - return parser->m_nSpecifiedAtts; -} - -int XMLCALL -XML_GetIdAttributeIndex(XML_Parser parser) { - if (parser == NULL) - return -1; - return parser->m_idAttIndex; -} - -#ifdef XML_ATTR_INFO -const XML_AttrInfo *XMLCALL -XML_GetAttributeInfo(XML_Parser parser) { - if (parser == NULL) - return NULL; - return parser->m_attInfo; -} -#endif - -void XMLCALL -XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, - XML_EndElementHandler end) { - if (parser == NULL) - return; - parser->m_startElementHandler = start; - parser->m_endElementHandler = end; -} - -void XMLCALL -XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler start) { - if (parser != NULL) - parser->m_startElementHandler = start; -} - -void XMLCALL -XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler end) { - if (parser != NULL) - parser->m_endElementHandler = end; -} - -void XMLCALL -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler) { - if (parser != NULL) - parser->m_characterDataHandler = handler; -} - -void XMLCALL -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler) { - if (parser != NULL) - parser->m_processingInstructionHandler = handler; -} - -void XMLCALL -XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler) { - if (parser != NULL) - parser->m_commentHandler = handler; -} - -void XMLCALL -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end) { - if (parser == NULL) - return; - parser->m_startCdataSectionHandler = start; - parser->m_endCdataSectionHandler = end; -} - -void XMLCALL -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start) { - if (parser != NULL) - parser->m_startCdataSectionHandler = start; -} - -void XMLCALL -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end) { - if (parser != NULL) - parser->m_endCdataSectionHandler = end; -} - -void XMLCALL -XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler) { - if (parser == NULL) - return; - parser->m_defaultHandler = handler; - parser->m_defaultExpandInternalEntities = XML_FALSE; -} - -void XMLCALL -XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler) { - if (parser == NULL) - return; - parser->m_defaultHandler = handler; - parser->m_defaultExpandInternalEntities = XML_TRUE; -} - -void XMLCALL -XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end) { - if (parser == NULL) - return; - parser->m_startDoctypeDeclHandler = start; - parser->m_endDoctypeDeclHandler = end; -} - -void XMLCALL -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start) { - if (parser != NULL) - parser->m_startDoctypeDeclHandler = start; -} - -void XMLCALL -XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end) { - if (parser != NULL) - parser->m_endDoctypeDeclHandler = end; -} - -void XMLCALL -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler) { - if (parser != NULL) - parser->m_unparsedEntityDeclHandler = handler; -} - -void XMLCALL -XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler) { - if (parser != NULL) - parser->m_notationDeclHandler = handler; -} - -void XMLCALL -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end) { - if (parser == NULL) - return; - parser->m_startNamespaceDeclHandler = start; - parser->m_endNamespaceDeclHandler = end; -} - -void XMLCALL -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start) { - if (parser != NULL) - parser->m_startNamespaceDeclHandler = start; -} - -void XMLCALL -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end) { - if (parser != NULL) - parser->m_endNamespaceDeclHandler = end; -} - -void XMLCALL -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler) { - if (parser != NULL) - parser->m_notStandaloneHandler = handler; -} - -void XMLCALL -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler) { - if (parser != NULL) - parser->m_externalEntityRefHandler = handler; -} - -void XMLCALL -XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) { - if (parser == NULL) - return; - if (arg) - parser->m_externalEntityRefHandlerArg = (XML_Parser)arg; - else - parser->m_externalEntityRefHandlerArg = parser; -} - -void XMLCALL -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler) { - if (parser != NULL) - parser->m_skippedEntityHandler = handler; -} - -void XMLCALL -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, void *data) { - if (parser == NULL) - return; - parser->m_unknownEncodingHandler = handler; - parser->m_unknownEncodingHandlerData = data; -} - -void XMLCALL -XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl) { - if (parser != NULL) - parser->m_elementDeclHandler = eldecl; -} - -void XMLCALL -XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl) { - if (parser != NULL) - parser->m_attlistDeclHandler = attdecl; -} - -void XMLCALL -XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler) { - if (parser != NULL) - parser->m_entityDeclHandler = handler; -} - -void XMLCALL -XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler handler) { - if (parser != NULL) - parser->m_xmlDeclHandler = handler; -} - -int XMLCALL -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing peParsing) { - if (parser == NULL) - return 0; - /* block after XML_Parse()/XML_ParseBuffer() has been called */ - if (parser->m_parsingStatus.parsing == XML_PARSING - || parser->m_parsingStatus.parsing == XML_SUSPENDED) - return 0; -#ifdef XML_DTD - parser->m_paramEntityParsing = peParsing; - return 1; -#else - return peParsing == XML_PARAM_ENTITY_PARSING_NEVER; -#endif -} - -int XMLCALL -XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt) { - if (parser == NULL) - return 0; - if (parser->m_parentParser) - return XML_SetHashSalt(parser->m_parentParser, hash_salt); - /* block after XML_Parse()/XML_ParseBuffer() has been called */ - if (parser->m_parsingStatus.parsing == XML_PARSING - || parser->m_parsingStatus.parsing == XML_SUSPENDED) - return 0; - parser->m_hash_secret_salt = hash_salt; - return 1; -} - -enum XML_Status XMLCALL -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) { - if ((parser == NULL) || (len < 0) || ((s == NULL) && (len != 0))) { - if (parser != NULL) - parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT; - return XML_STATUS_ERROR; - } - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - parser->m_errorCode = XML_ERROR_SUSPENDED; - return XML_STATUS_ERROR; - case XML_FINISHED: - parser->m_errorCode = XML_ERROR_FINISHED; - return XML_STATUS_ERROR; - case XML_INITIALIZED: - if (parser->m_parentParser == NULL && ! startParsing(parser)) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return XML_STATUS_ERROR; - } - /* fall through */ - default: - parser->m_parsingStatus.parsing = XML_PARSING; - } - - if (len == 0) { - parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; - if (! isFinal) - return XML_STATUS_OK; - parser->m_positionPtr = parser->m_bufferPtr; - parser->m_parseEndPtr = parser->m_bufferEnd; - - /* If data are left over from last buffer, and we now know that these - data are the final chunk of input, then we have to check them again - to detect errors based on that fact. - */ - parser->m_errorCode - = parser->m_processor(parser, parser->m_bufferPtr, - parser->m_parseEndPtr, &parser->m_bufferPtr); - - if (parser->m_errorCode == XML_ERROR_NONE) { - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - /* It is hard to be certain, but it seems that this case - * cannot occur. This code is cleaning up a previous parse - * with no new data (since len == 0). Changing the parsing - * state requires getting to execute a handler function, and - * there doesn't seem to be an opportunity for that while in - * this circumstance. - * - * Given the uncertainty, we retain the code but exclude it - * from coverage tests. - * - * LCOV_EXCL_START - */ - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, - parser->m_bufferPtr, &parser->m_position); - parser->m_positionPtr = parser->m_bufferPtr; - return XML_STATUS_SUSPENDED; - /* LCOV_EXCL_STOP */ - case XML_INITIALIZED: - case XML_PARSING: - parser->m_parsingStatus.parsing = XML_FINISHED; - /* fall through */ - default: - return XML_STATUS_OK; - } - } - parser->m_eventEndPtr = parser->m_eventPtr; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } -#ifndef XML_CONTEXT_BYTES - else if (parser->m_bufferPtr == parser->m_bufferEnd) { - const char *end; - int nLeftOver; - enum XML_Status result; - /* Detect overflow (a+b > MAX <==> b > MAX-a) */ - if ((XML_Size)len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - parser->m_eventPtr = parser->m_eventEndPtr = NULL; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } - parser->m_parseEndByteIndex += len; - parser->m_positionPtr = s; - parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; - - parser->m_errorCode - = parser->m_processor(parser, s, parser->m_parseEndPtr = s + len, &end); - - if (parser->m_errorCode != XML_ERROR_NONE) { - parser->m_eventEndPtr = parser->m_eventPtr; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } else { - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - result = XML_STATUS_SUSPENDED; - break; - case XML_INITIALIZED: - case XML_PARSING: - if (isFinal) { - parser->m_parsingStatus.parsing = XML_FINISHED; - return XML_STATUS_OK; - } - /* fall through */ - default: - result = XML_STATUS_OK; - } - } - - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, end, - &parser->m_position); - nLeftOver = s + len - end; - if (nLeftOver) { - if (parser->m_buffer == NULL - || nLeftOver > parser->m_bufferLim - parser->m_buffer) { - /* avoid _signed_ integer overflow */ - char *temp = NULL; - const int bytesToAllocate = (int)((unsigned)len * 2U); - if (bytesToAllocate > 0) { - temp = (char *)REALLOC(parser, parser->m_buffer, bytesToAllocate); - } - if (temp == NULL) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - parser->m_eventPtr = parser->m_eventEndPtr = NULL; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } - parser->m_buffer = temp; - parser->m_bufferLim = parser->m_buffer + bytesToAllocate; - } - memcpy(parser->m_buffer, end, nLeftOver); - } - parser->m_bufferPtr = parser->m_buffer; - parser->m_bufferEnd = parser->m_buffer + nLeftOver; - parser->m_positionPtr = parser->m_bufferPtr; - parser->m_parseEndPtr = parser->m_bufferEnd; - parser->m_eventPtr = parser->m_bufferPtr; - parser->m_eventEndPtr = parser->m_bufferPtr; - return result; - } -#endif /* not defined XML_CONTEXT_BYTES */ - else { - void *buff = XML_GetBuffer(parser, len); - if (buff == NULL) - return XML_STATUS_ERROR; - else { - memcpy(buff, s, len); - return XML_ParseBuffer(parser, len, isFinal); - } - } -} - -enum XML_Status XMLCALL -XML_ParseBuffer(XML_Parser parser, int len, int isFinal) { - const char *start; - enum XML_Status result = XML_STATUS_OK; - - if (parser == NULL) - return XML_STATUS_ERROR; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - parser->m_errorCode = XML_ERROR_SUSPENDED; - return XML_STATUS_ERROR; - case XML_FINISHED: - parser->m_errorCode = XML_ERROR_FINISHED; - return XML_STATUS_ERROR; - case XML_INITIALIZED: - if (parser->m_parentParser == NULL && ! startParsing(parser)) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return XML_STATUS_ERROR; - } - /* fall through */ - default: - parser->m_parsingStatus.parsing = XML_PARSING; - } - - start = parser->m_bufferPtr; - parser->m_positionPtr = start; - parser->m_bufferEnd += len; - parser->m_parseEndPtr = parser->m_bufferEnd; - parser->m_parseEndByteIndex += len; - parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; - - parser->m_errorCode = parser->m_processor( - parser, start, parser->m_parseEndPtr, &parser->m_bufferPtr); - - if (parser->m_errorCode != XML_ERROR_NONE) { - parser->m_eventEndPtr = parser->m_eventPtr; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } else { - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - result = XML_STATUS_SUSPENDED; - break; - case XML_INITIALIZED: - case XML_PARSING: - if (isFinal) { - parser->m_parsingStatus.parsing = XML_FINISHED; - return result; - } - default:; /* should not happen */ - } - } - - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, - parser->m_bufferPtr, &parser->m_position); - parser->m_positionPtr = parser->m_bufferPtr; - return result; -} - -void *XMLCALL -XML_GetBuffer(XML_Parser parser, int len) { - if (parser == NULL) - return NULL; - if (len < 0) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return NULL; - } - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - parser->m_errorCode = XML_ERROR_SUSPENDED; - return NULL; - case XML_FINISHED: - parser->m_errorCode = XML_ERROR_FINISHED; - return NULL; - default:; - } - - if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)) { -#ifdef XML_CONTEXT_BYTES - int keep; -#endif /* defined XML_CONTEXT_BYTES */ - /* Do not invoke signed arithmetic overflow: */ - int neededSize = (int)((unsigned)len - + (unsigned)EXPAT_SAFE_PTR_DIFF( - parser->m_bufferEnd, parser->m_bufferPtr)); - if (neededSize < 0) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return NULL; - } -#ifdef XML_CONTEXT_BYTES - keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer); - if (keep > XML_CONTEXT_BYTES) - keep = XML_CONTEXT_BYTES; - neededSize += keep; -#endif /* defined XML_CONTEXT_BYTES */ - if (neededSize - <= EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer)) { -#ifdef XML_CONTEXT_BYTES - if (keep < EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer)) { - int offset - = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer) - - keep; - /* The buffer pointers cannot be NULL here; we have at least some bytes - * in the buffer */ - memmove(parser->m_buffer, &parser->m_buffer[offset], - parser->m_bufferEnd - parser->m_bufferPtr + keep); - parser->m_bufferEnd -= offset; - parser->m_bufferPtr -= offset; - } -#else - if (parser->m_buffer && parser->m_bufferPtr) { - memmove(parser->m_buffer, parser->m_bufferPtr, - EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); - parser->m_bufferEnd - = parser->m_buffer - + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); - parser->m_bufferPtr = parser->m_buffer; - } -#endif /* not defined XML_CONTEXT_BYTES */ - } else { - char *newBuf; - int bufferSize - = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferPtr); - if (bufferSize == 0) - bufferSize = INIT_BUFFER_SIZE; - do { - /* Do not invoke signed arithmetic overflow: */ - bufferSize = (int)(2U * (unsigned)bufferSize); - } while (bufferSize < neededSize && bufferSize > 0); - if (bufferSize <= 0) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return NULL; - } - newBuf = (char *)MALLOC(parser, bufferSize); - if (newBuf == 0) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return NULL; - } - parser->m_bufferLim = newBuf + bufferSize; -#ifdef XML_CONTEXT_BYTES - if (parser->m_bufferPtr) { - memcpy(newBuf, &parser->m_bufferPtr[-keep], - EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) - + keep); - FREE(parser, parser->m_buffer); - parser->m_buffer = newBuf; - parser->m_bufferEnd - = parser->m_buffer - + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) - + keep; - parser->m_bufferPtr = parser->m_buffer + keep; - } else { - /* This must be a brand new buffer with no data in it yet */ - parser->m_bufferEnd = newBuf; - parser->m_bufferPtr = parser->m_buffer = newBuf; - } -#else - if (parser->m_bufferPtr) { - memcpy(newBuf, parser->m_bufferPtr, - EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); - FREE(parser, parser->m_buffer); - parser->m_bufferEnd - = newBuf - + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); - } else { - /* This must be a brand new buffer with no data in it yet */ - parser->m_bufferEnd = newBuf; - } - parser->m_bufferPtr = parser->m_buffer = newBuf; -#endif /* not defined XML_CONTEXT_BYTES */ - } - parser->m_eventPtr = parser->m_eventEndPtr = NULL; - parser->m_positionPtr = NULL; - } - return parser->m_bufferEnd; -} - -enum XML_Status XMLCALL -XML_StopParser(XML_Parser parser, XML_Bool resumable) { - if (parser == NULL) - return XML_STATUS_ERROR; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - if (resumable) { - parser->m_errorCode = XML_ERROR_SUSPENDED; - return XML_STATUS_ERROR; - } - parser->m_parsingStatus.parsing = XML_FINISHED; - break; - case XML_FINISHED: - parser->m_errorCode = XML_ERROR_FINISHED; - return XML_STATUS_ERROR; - default: - if (resumable) { -#ifdef XML_DTD - if (parser->m_isParamEntity) { - parser->m_errorCode = XML_ERROR_SUSPEND_PE; - return XML_STATUS_ERROR; - } -#endif - parser->m_parsingStatus.parsing = XML_SUSPENDED; - } else - parser->m_parsingStatus.parsing = XML_FINISHED; - } - return XML_STATUS_OK; -} - -enum XML_Status XMLCALL -XML_ResumeParser(XML_Parser parser) { - enum XML_Status result = XML_STATUS_OK; - - if (parser == NULL) - return XML_STATUS_ERROR; - if (parser->m_parsingStatus.parsing != XML_SUSPENDED) { - parser->m_errorCode = XML_ERROR_NOT_SUSPENDED; - return XML_STATUS_ERROR; - } - parser->m_parsingStatus.parsing = XML_PARSING; - - parser->m_errorCode = parser->m_processor( - parser, parser->m_bufferPtr, parser->m_parseEndPtr, &parser->m_bufferPtr); - - if (parser->m_errorCode != XML_ERROR_NONE) { - parser->m_eventEndPtr = parser->m_eventPtr; - parser->m_processor = errorProcessor; - return XML_STATUS_ERROR; - } else { - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - result = XML_STATUS_SUSPENDED; - break; - case XML_INITIALIZED: - case XML_PARSING: - if (parser->m_parsingStatus.finalBuffer) { - parser->m_parsingStatus.parsing = XML_FINISHED; - return result; - } - default:; - } - } - - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, - parser->m_bufferPtr, &parser->m_position); - parser->m_positionPtr = parser->m_bufferPtr; - return result; -} - -void XMLCALL -XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status) { - if (parser == NULL) - return; - assert(status != NULL); - *status = parser->m_parsingStatus; -} - -enum XML_Error XMLCALL -XML_GetErrorCode(XML_Parser parser) { - if (parser == NULL) - return XML_ERROR_INVALID_ARGUMENT; - return parser->m_errorCode; -} - -XML_Index XMLCALL -XML_GetCurrentByteIndex(XML_Parser parser) { - if (parser == NULL) - return -1; - if (parser->m_eventPtr) - return (XML_Index)(parser->m_parseEndByteIndex - - (parser->m_parseEndPtr - parser->m_eventPtr)); - return -1; -} - -int XMLCALL -XML_GetCurrentByteCount(XML_Parser parser) { - if (parser == NULL) - return 0; - if (parser->m_eventEndPtr && parser->m_eventPtr) - return (int)(parser->m_eventEndPtr - parser->m_eventPtr); - return 0; -} - -const char *XMLCALL -XML_GetInputContext(XML_Parser parser, int *offset, int *size) { -#ifdef XML_CONTEXT_BYTES - if (parser == NULL) - return NULL; - if (parser->m_eventPtr && parser->m_buffer) { - if (offset != NULL) - *offset = (int)(parser->m_eventPtr - parser->m_buffer); - if (size != NULL) - *size = (int)(parser->m_bufferEnd - parser->m_buffer); - return parser->m_buffer; - } -#else - (void)parser; - (void)offset; - (void)size; -#endif /* defined XML_CONTEXT_BYTES */ - return (char *)0; -} - -XML_Size XMLCALL -XML_GetCurrentLineNumber(XML_Parser parser) { - if (parser == NULL) - return 0; - if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, - parser->m_eventPtr, &parser->m_position); - parser->m_positionPtr = parser->m_eventPtr; - } - return parser->m_position.lineNumber + 1; -} - -XML_Size XMLCALL -XML_GetCurrentColumnNumber(XML_Parser parser) { - if (parser == NULL) - return 0; - if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { - XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, - parser->m_eventPtr, &parser->m_position); - parser->m_positionPtr = parser->m_eventPtr; - } - return parser->m_position.columnNumber; -} - -void XMLCALL -XML_FreeContentModel(XML_Parser parser, XML_Content *model) { - if (parser != NULL) - FREE(parser, model); -} - -void *XMLCALL -XML_MemMalloc(XML_Parser parser, size_t size) { - if (parser == NULL) - return NULL; - return MALLOC(parser, size); -} - -void *XMLCALL -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size) { - if (parser == NULL) - return NULL; - return REALLOC(parser, ptr, size); -} - -void XMLCALL -XML_MemFree(XML_Parser parser, void *ptr) { - if (parser != NULL) - FREE(parser, ptr); -} - -void XMLCALL -XML_DefaultCurrent(XML_Parser parser) { - if (parser == NULL) - return; - if (parser->m_defaultHandler) { - if (parser->m_openInternalEntities) - reportDefault(parser, parser->m_internalEncoding, - parser->m_openInternalEntities->internalEventPtr, - parser->m_openInternalEntities->internalEventEndPtr); - else - reportDefault(parser, parser->m_encoding, parser->m_eventPtr, - parser->m_eventEndPtr); - } -} - -const XML_LChar *XMLCALL -XML_ErrorString(enum XML_Error code) { - switch (code) { - case XML_ERROR_NONE: - return NULL; - case XML_ERROR_NO_MEMORY: - return XML_L("out of memory"); - case XML_ERROR_SYNTAX: - return XML_L("syntax error"); - case XML_ERROR_NO_ELEMENTS: - return XML_L("no element found"); - case XML_ERROR_INVALID_TOKEN: - return XML_L("not well-formed (invalid token)"); - case XML_ERROR_UNCLOSED_TOKEN: - return XML_L("unclosed token"); - case XML_ERROR_PARTIAL_CHAR: - return XML_L("partial character"); - case XML_ERROR_TAG_MISMATCH: - return XML_L("mismatched tag"); - case XML_ERROR_DUPLICATE_ATTRIBUTE: - return XML_L("duplicate attribute"); - case XML_ERROR_JUNK_AFTER_DOC_ELEMENT: - return XML_L("junk after document element"); - case XML_ERROR_PARAM_ENTITY_REF: - return XML_L("illegal parameter entity reference"); - case XML_ERROR_UNDEFINED_ENTITY: - return XML_L("undefined entity"); - case XML_ERROR_RECURSIVE_ENTITY_REF: - return XML_L("recursive entity reference"); - case XML_ERROR_ASYNC_ENTITY: - return XML_L("asynchronous entity"); - case XML_ERROR_BAD_CHAR_REF: - return XML_L("reference to invalid character number"); - case XML_ERROR_BINARY_ENTITY_REF: - return XML_L("reference to binary entity"); - case XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF: - return XML_L("reference to external entity in attribute"); - case XML_ERROR_MISPLACED_XML_PI: - return XML_L("XML or text declaration not at start of entity"); - case XML_ERROR_UNKNOWN_ENCODING: - return XML_L("unknown encoding"); - case XML_ERROR_INCORRECT_ENCODING: - return XML_L("encoding specified in XML declaration is incorrect"); - case XML_ERROR_UNCLOSED_CDATA_SECTION: - return XML_L("unclosed CDATA section"); - case XML_ERROR_EXTERNAL_ENTITY_HANDLING: - return XML_L("error in processing external entity reference"); - case XML_ERROR_NOT_STANDALONE: - return XML_L("document is not standalone"); - case XML_ERROR_UNEXPECTED_STATE: - return XML_L("unexpected parser state - please send a bug report"); - case XML_ERROR_ENTITY_DECLARED_IN_PE: - return XML_L("entity declared in parameter entity"); - case XML_ERROR_FEATURE_REQUIRES_XML_DTD: - return XML_L("requested feature requires XML_DTD support in Expat"); - case XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING: - return XML_L("cannot change setting once parsing has begun"); - /* Added in 1.95.7. */ - case XML_ERROR_UNBOUND_PREFIX: - return XML_L("unbound prefix"); - /* Added in 1.95.8. */ - case XML_ERROR_UNDECLARING_PREFIX: - return XML_L("must not undeclare prefix"); - case XML_ERROR_INCOMPLETE_PE: - return XML_L("incomplete markup in parameter entity"); - case XML_ERROR_XML_DECL: - return XML_L("XML declaration not well-formed"); - case XML_ERROR_TEXT_DECL: - return XML_L("text declaration not well-formed"); - case XML_ERROR_PUBLICID: - return XML_L("illegal character(s) in public id"); - case XML_ERROR_SUSPENDED: - return XML_L("parser suspended"); - case XML_ERROR_NOT_SUSPENDED: - return XML_L("parser not suspended"); - case XML_ERROR_ABORTED: - return XML_L("parsing aborted"); - case XML_ERROR_FINISHED: - return XML_L("parsing finished"); - case XML_ERROR_SUSPEND_PE: - return XML_L("cannot suspend in external parameter entity"); - /* Added in 2.0.0. */ - case XML_ERROR_RESERVED_PREFIX_XML: - return XML_L( - "reserved prefix (xml) must not be undeclared or bound to another namespace name"); - case XML_ERROR_RESERVED_PREFIX_XMLNS: - return XML_L("reserved prefix (xmlns) must not be declared or undeclared"); - case XML_ERROR_RESERVED_NAMESPACE_URI: - return XML_L( - "prefix must not be bound to one of the reserved namespace names"); - /* Added in 2.2.5. */ - case XML_ERROR_INVALID_ARGUMENT: /* Constant added in 2.2.1, already */ - return XML_L("invalid argument"); - } - return NULL; -} - -const XML_LChar *XMLCALL -XML_ExpatVersion(void) { - /* V1 is used to string-ize the version number. However, it would - string-ize the actual version macro *names* unless we get them - substituted before being passed to V1. CPP is defined to expand - a macro, then rescan for more expansions. Thus, we use V2 to expand - the version macros, then CPP will expand the resulting V1() macro - with the correct numerals. */ - /* ### I'm assuming cpp is portable in this respect... */ - -#define V1(a, b, c) XML_L(#a) XML_L(".") XML_L(#b) XML_L(".") XML_L(#c) -#define V2(a, b, c) XML_L("expat_") V1(a, b, c) - - return V2(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); - -#undef V1 -#undef V2 -} - -XML_Expat_Version XMLCALL -XML_ExpatVersionInfo(void) { - XML_Expat_Version version; - - version.major = XML_MAJOR_VERSION; - version.minor = XML_MINOR_VERSION; - version.micro = XML_MICRO_VERSION; - - return version; -} - -const XML_Feature *XMLCALL -XML_GetFeatureList(void) { - static const XML_Feature features[] - = {{XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), - sizeof(XML_Char)}, - {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), - sizeof(XML_LChar)}, -#ifdef XML_UNICODE - {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, -#endif -#ifdef XML_UNICODE_WCHAR_T - {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, -#endif -#ifdef XML_DTD - {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, -#endif -#ifdef XML_CONTEXT_BYTES - {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), - XML_CONTEXT_BYTES}, -#endif -#ifdef XML_MIN_SIZE - {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, -#endif -#ifdef XML_NS - {XML_FEATURE_NS, XML_L("XML_NS"), 0}, -#endif -#ifdef XML_LARGE_SIZE - {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0}, -#endif -#ifdef XML_ATTR_INFO - {XML_FEATURE_ATTR_INFO, XML_L("XML_ATTR_INFO"), 0}, -#endif - {XML_FEATURE_END, NULL, 0}}; - - return features; -} - -/* Initially tag->rawName always points into the parse buffer; - for those TAG instances opened while the current parse buffer was - processed, and not yet closed, we need to store tag->rawName in a more - permanent location, since the parse buffer is about to be discarded. -*/ -static XML_Bool -storeRawNames(XML_Parser parser) { - TAG *tag = parser->m_tagStack; - while (tag) { - int bufSize; - int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); - char *rawNameBuf = tag->buf + nameLen; - /* Stop if already stored. Since m_tagStack is a stack, we can stop - at the first entry that has already been copied; everything - below it in the stack is already been accounted for in a - previous call to this function. - */ - if (tag->rawName == rawNameBuf) - break; - /* For re-use purposes we need to ensure that the - size of tag->buf is a multiple of sizeof(XML_Char). - */ - bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); - if (bufSize > tag->bufEnd - tag->buf) { - char *temp = (char *)REALLOC(parser, tag->buf, bufSize); - if (temp == NULL) - return XML_FALSE; - /* if tag->name.str points to tag->buf (only when namespace - processing is off) then we have to update it - */ - if (tag->name.str == (XML_Char *)tag->buf) - tag->name.str = (XML_Char *)temp; - /* if tag->name.localPart is set (when namespace processing is on) - then update it as well, since it will always point into tag->buf - */ - if (tag->name.localPart) - tag->name.localPart - = (XML_Char *)temp + (tag->name.localPart - (XML_Char *)tag->buf); - tag->buf = temp; - tag->bufEnd = temp + bufSize; - rawNameBuf = temp + nameLen; - } - memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); - tag->rawName = rawNameBuf; - tag = tag->parent; - } - return XML_TRUE; -} - -static enum XML_Error PTRCALL -contentProcessor(XML_Parser parser, const char *start, const char *end, - const char **endPtr) { - enum XML_Error result - = doContent(parser, 0, parser->m_encoding, start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer); - if (result == XML_ERROR_NONE) { - if (! storeRawNames(parser)) - return XML_ERROR_NO_MEMORY; - } - return result; -} - -static enum XML_Error PTRCALL -externalEntityInitProcessor(XML_Parser parser, const char *start, - const char *end, const char **endPtr) { - enum XML_Error result = initializeEncoding(parser); - if (result != XML_ERROR_NONE) - return result; - parser->m_processor = externalEntityInitProcessor2; - return externalEntityInitProcessor2(parser, start, end, endPtr); -} - -static enum XML_Error PTRCALL -externalEntityInitProcessor2(XML_Parser parser, const char *start, - const char *end, const char **endPtr) { - const char *next = start; /* XmlContentTok doesn't always set the last arg */ - int tok = XmlContentTok(parser->m_encoding, start, end, &next); - switch (tok) { - case XML_TOK_BOM: - /* If we are at the end of the buffer, this would cause the next stage, - i.e. externalEntityInitProcessor3, to pass control directly to - doContent (by detecting XML_TOK_NONE) without processing any xml text - declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. - */ - if (next == end && ! parser->m_parsingStatus.finalBuffer) { - *endPtr = next; - return XML_ERROR_NONE; - } - start = next; - break; - case XML_TOK_PARTIAL: - if (! parser->m_parsingStatus.finalBuffer) { - *endPtr = start; - return XML_ERROR_NONE; - } - parser->m_eventPtr = start; - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (! parser->m_parsingStatus.finalBuffer) { - *endPtr = start; - return XML_ERROR_NONE; - } - parser->m_eventPtr = start; - return XML_ERROR_PARTIAL_CHAR; - } - parser->m_processor = externalEntityInitProcessor3; - return externalEntityInitProcessor3(parser, start, end, endPtr); -} - -static enum XML_Error PTRCALL -externalEntityInitProcessor3(XML_Parser parser, const char *start, - const char *end, const char **endPtr) { - int tok; - const char *next = start; /* XmlContentTok doesn't always set the last arg */ - parser->m_eventPtr = start; - tok = XmlContentTok(parser->m_encoding, start, end, &next); - parser->m_eventEndPtr = next; - - switch (tok) { - case XML_TOK_XML_DECL: { - enum XML_Error result; - result = processXmlDecl(parser, 1, start, next); - if (result != XML_ERROR_NONE) - return result; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - *endPtr = next; - return XML_ERROR_NONE; - case XML_FINISHED: - return XML_ERROR_ABORTED; - default: - start = next; - } - } break; - case XML_TOK_PARTIAL: - if (! parser->m_parsingStatus.finalBuffer) { - *endPtr = start; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (! parser->m_parsingStatus.finalBuffer) { - *endPtr = start; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - } - parser->m_processor = externalEntityContentProcessor; - parser->m_tagLevel = 1; - return externalEntityContentProcessor(parser, start, end, endPtr); -} - -static enum XML_Error PTRCALL -externalEntityContentProcessor(XML_Parser parser, const char *start, - const char *end, const char **endPtr) { - enum XML_Error result - = doContent(parser, 1, parser->m_encoding, start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer); - if (result == XML_ERROR_NONE) { - if (! storeRawNames(parser)) - return XML_ERROR_NO_MEMORY; - } - return result; -} - -static enum XML_Error -doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, - const char *s, const char *end, const char **nextPtr, - XML_Bool haveMore) { - /* save one level of indirection */ - DTD *const dtd = parser->m_dtd; - - const char **eventPP; - const char **eventEndPP; - if (enc == parser->m_encoding) { - eventPP = &parser->m_eventPtr; - eventEndPP = &parser->m_eventEndPtr; - } else { - eventPP = &(parser->m_openInternalEntities->internalEventPtr); - eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); - } - *eventPP = s; - - for (;;) { - const char *next = s; /* XmlContentTok doesn't always set the last arg */ - int tok = XmlContentTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_TRAILING_CR: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - *eventEndPP = end; - if (parser->m_characterDataHandler) { - XML_Char c = 0xA; - parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, end); - /* We are at the end of the final buffer, should we check for - XML_SUSPENDED, XML_FINISHED? - */ - if (startTagLevel == 0) - return XML_ERROR_NO_ELEMENTS; - if (parser->m_tagLevel != startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - *nextPtr = end; - return XML_ERROR_NONE; - case XML_TOK_NONE: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - if (startTagLevel > 0) { - if (parser->m_tagLevel != startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_NO_ELEMENTS; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_ENTITY_REF: { - const XML_Char *name; - ENTITY *entity; - XML_Char ch = (XML_Char)XmlPredefinedEntityName( - enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); - if (ch) { - if (parser->m_characterDataHandler) - parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1); - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); - poolDiscard(&dtd->pool); - /* First, determine if a check for an existing declaration is needed; - if yes, check that the entity exists, and that it is internal, - otherwise call the skipped entity or default handler. - */ - if (! dtd->hasParamEntityRefs || dtd->standalone) { - if (! entity) - return XML_ERROR_UNDEFINED_ENTITY; - else if (! entity->is_internal) - return XML_ERROR_ENTITY_DECLARED_IN_PE; - } else if (! entity) { - if (parser->m_skippedEntityHandler) - parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - if (entity->open) - return XML_ERROR_RECURSIVE_ENTITY_REF; - if (entity->notation) - return XML_ERROR_BINARY_ENTITY_REF; - if (entity->textPtr) { - enum XML_Error result; - if (! parser->m_defaultExpandInternalEntities) { - if (parser->m_skippedEntityHandler) - parser->m_skippedEntityHandler(parser->m_handlerArg, entity->name, - 0); - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - result = processInternalEntity(parser, entity, XML_FALSE); - if (result != XML_ERROR_NONE) - return result; - } else if (parser->m_externalEntityRefHandler) { - const XML_Char *context; - entity->open = XML_TRUE; - context = getContext(parser); - entity->open = XML_FALSE; - if (! context) - return XML_ERROR_NO_MEMORY; - if (! parser->m_externalEntityRefHandler( - parser->m_externalEntityRefHandlerArg, context, entity->base, - entity->systemId, entity->publicId)) - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - poolDiscard(&parser->m_tempPool); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - case XML_TOK_START_TAG_NO_ATTS: - /* fall through */ - case XML_TOK_START_TAG_WITH_ATTS: { - TAG *tag; - enum XML_Error result; - XML_Char *toPtr; - if (parser->m_freeTagList) { - tag = parser->m_freeTagList; - parser->m_freeTagList = parser->m_freeTagList->parent; - } else { - tag = (TAG *)MALLOC(parser, sizeof(TAG)); - if (! tag) - return XML_ERROR_NO_MEMORY; - tag->buf = (char *)MALLOC(parser, INIT_TAG_BUF_SIZE); - if (! tag->buf) { - FREE(parser, tag); - return XML_ERROR_NO_MEMORY; - } - tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; - } - tag->bindings = NULL; - tag->parent = parser->m_tagStack; - parser->m_tagStack = tag; - tag->name.localPart = NULL; - tag->name.prefix = NULL; - tag->rawName = s + enc->minBytesPerChar; - tag->rawNameLength = XmlNameLength(enc, tag->rawName); - ++parser->m_tagLevel; - { - const char *rawNameEnd = tag->rawName + tag->rawNameLength; - const char *fromPtr = tag->rawName; - toPtr = (XML_Char *)tag->buf; - for (;;) { - int bufSize; - int convLen; - const enum XML_Convert_Result convert_res - = XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr, - (ICHAR *)tag->bufEnd - 1); - convLen = (int)(toPtr - (XML_Char *)tag->buf); - if ((fromPtr >= rawNameEnd) - || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) { - tag->name.strLen = convLen; - break; - } - bufSize = (int)(tag->bufEnd - tag->buf) << 1; - { - char *temp = (char *)REALLOC(parser, tag->buf, bufSize); - if (temp == NULL) - return XML_ERROR_NO_MEMORY; - tag->buf = temp; - tag->bufEnd = temp + bufSize; - toPtr = (XML_Char *)temp + convLen; - } - } - } - tag->name.str = (XML_Char *)tag->buf; - *toPtr = XML_T('\0'); - result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); - if (result) - return result; - if (parser->m_startElementHandler) - parser->m_startElementHandler(parser->m_handlerArg, tag->name.str, - (const XML_Char **)parser->m_atts); - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - poolClear(&parser->m_tempPool); - break; - } - case XML_TOK_EMPTY_ELEMENT_NO_ATTS: - /* fall through */ - case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: { - const char *rawName = s + enc->minBytesPerChar; - enum XML_Error result; - BINDING *bindings = NULL; - XML_Bool noElmHandlers = XML_TRUE; - TAG_NAME name; - name.str = poolStoreString(&parser->m_tempPool, enc, rawName, - rawName + XmlNameLength(enc, rawName)); - if (! name.str) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_tempPool); - result = storeAtts(parser, enc, s, &name, &bindings); - if (result != XML_ERROR_NONE) { - freeBindings(parser, bindings); - return result; - } - poolFinish(&parser->m_tempPool); - if (parser->m_startElementHandler) { - parser->m_startElementHandler(parser->m_handlerArg, name.str, - (const XML_Char **)parser->m_atts); - noElmHandlers = XML_FALSE; - } - if (parser->m_endElementHandler) { - if (parser->m_startElementHandler) - *eventPP = *eventEndPP; - parser->m_endElementHandler(parser->m_handlerArg, name.str); - noElmHandlers = XML_FALSE; - } - if (noElmHandlers && parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - poolClear(&parser->m_tempPool); - freeBindings(parser, bindings); - } - if ((parser->m_tagLevel == 0) - && (parser->m_parsingStatus.parsing != XML_FINISHED)) { - if (parser->m_parsingStatus.parsing == XML_SUSPENDED) - parser->m_processor = epilogProcessor; - else - return epilogProcessor(parser, next, end, nextPtr); - } - break; - case XML_TOK_END_TAG: - if (parser->m_tagLevel == startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - else { - int len; - const char *rawName; - TAG *tag = parser->m_tagStack; - parser->m_tagStack = tag->parent; - tag->parent = parser->m_freeTagList; - parser->m_freeTagList = tag; - rawName = s + enc->minBytesPerChar * 2; - len = XmlNameLength(enc, rawName); - if (len != tag->rawNameLength - || memcmp(tag->rawName, rawName, len) != 0) { - *eventPP = rawName; - return XML_ERROR_TAG_MISMATCH; - } - --parser->m_tagLevel; - if (parser->m_endElementHandler) { - const XML_Char *localPart; - const XML_Char *prefix; - XML_Char *uri; - localPart = tag->name.localPart; - if (parser->m_ns && localPart) { - /* localPart and prefix may have been overwritten in - tag->name.str, since this points to the binding->uri - buffer which gets re-used; so we have to add them again - */ - uri = (XML_Char *)tag->name.str + tag->name.uriLen; - /* don't need to check for space - already done in storeAtts() */ - while (*localPart) - *uri++ = *localPart++; - prefix = (XML_Char *)tag->name.prefix; - if (parser->m_ns_triplets && prefix) { - *uri++ = parser->m_namespaceSeparator; - while (*prefix) - *uri++ = *prefix++; - } - *uri = XML_T('\0'); - } - parser->m_endElementHandler(parser->m_handlerArg, tag->name.str); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - while (tag->bindings) { - BINDING *b = tag->bindings; - if (parser->m_endNamespaceDeclHandler) - parser->m_endNamespaceDeclHandler(parser->m_handlerArg, - b->prefix->name); - tag->bindings = tag->bindings->nextTagBinding; - b->nextTagBinding = parser->m_freeBindingList; - parser->m_freeBindingList = b; - b->prefix->binding = b->prevPrefixBinding; - } - if ((parser->m_tagLevel == 0) - && (parser->m_parsingStatus.parsing != XML_FINISHED)) { - if (parser->m_parsingStatus.parsing == XML_SUSPENDED) - parser->m_processor = epilogProcessor; - else - return epilogProcessor(parser, next, end, nextPtr); - } - } - break; - case XML_TOK_CHAR_REF: { - int n = XmlCharRefNumber(enc, s); - if (n < 0) - return XML_ERROR_BAD_CHAR_REF; - if (parser->m_characterDataHandler) { - XML_Char buf[XML_ENCODE_MAX]; - parser->m_characterDataHandler(parser->m_handlerArg, buf, - XmlEncode(n, (ICHAR *)buf)); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - } break; - case XML_TOK_XML_DECL: - return XML_ERROR_MISPLACED_XML_PI; - case XML_TOK_DATA_NEWLINE: - if (parser->m_characterDataHandler) { - XML_Char c = 0xA; - parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_CDATA_SECT_OPEN: { - enum XML_Error result; - if (parser->m_startCdataSectionHandler) - parser->m_startCdataSectionHandler(parser->m_handlerArg); - /* BEGIN disabled code */ - /* Suppose you doing a transformation on a document that involves - changing only the character data. You set up a defaultHandler - and a characterDataHandler. The defaultHandler simply copies - characters through. The characterDataHandler does the - transformation and writes the characters out escaping them as - necessary. This case will fail to work if we leave out the - following two lines (because & and < inside CDATA sections will - be incorrectly escaped). - - However, now we have a start/endCdataSectionHandler, so it seems - easier to let the user deal with this. - */ - else if (0 && parser->m_characterDataHandler) - parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, - 0); - /* END disabled code */ - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore); - if (result != XML_ERROR_NONE) - return result; - else if (! next) { - parser->m_processor = cdataSectionProcessor; - return result; - } - } break; - case XML_TOK_TRAILING_RSQB: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - if (parser->m_characterDataHandler) { - if (MUST_CONVERT(enc, s)) { - ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; - XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); - parser->m_characterDataHandler( - parser->m_handlerArg, parser->m_dataBuf, - (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); - } else - parser->m_characterDataHandler( - parser->m_handlerArg, (XML_Char *)s, - (int)((XML_Char *)end - (XML_Char *)s)); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, end); - /* We are at the end of the final buffer, should we check for - XML_SUSPENDED, XML_FINISHED? - */ - if (startTagLevel == 0) { - *eventPP = end; - return XML_ERROR_NO_ELEMENTS; - } - if (parser->m_tagLevel != startTagLevel) { - *eventPP = end; - return XML_ERROR_ASYNC_ENTITY; - } - *nextPtr = end; - return XML_ERROR_NONE; - case XML_TOK_DATA_CHARS: { - XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; - if (charDataHandler) { - if (MUST_CONVERT(enc, s)) { - for (;;) { - ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; - const enum XML_Convert_Result convert_res = XmlConvert( - enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); - *eventEndPP = s; - charDataHandler(parser->m_handlerArg, parser->m_dataBuf, - (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); - if ((convert_res == XML_CONVERT_COMPLETED) - || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) - break; - *eventPP = s; - } - } else - charDataHandler(parser->m_handlerArg, (XML_Char *)s, - (int)((XML_Char *)next - (XML_Char *)s)); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - } break; - case XML_TOK_PI: - if (! reportProcessingInstruction(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_COMMENT: - if (! reportComment(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - default: - /* All of the tokens produced by XmlContentTok() have their own - * explicit cases, so this default is not strictly necessary. - * However it is a useful safety net, so we retain the code and - * simply exclude it from the coverage tests. - * - * LCOV_EXCL_START - */ - if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - /* LCOV_EXCL_STOP */ - } - *eventPP = s = next; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - *nextPtr = next; - return XML_ERROR_NONE; - case XML_FINISHED: - return XML_ERROR_ABORTED; - default:; - } - } - /* not reached */ -} - -/* This function does not call free() on the allocated memory, merely - * moving it to the parser's m_freeBindingList where it can be freed or - * reused as appropriate. - */ -static void -freeBindings(XML_Parser parser, BINDING *bindings) { - while (bindings) { - BINDING *b = bindings; - - /* m_startNamespaceDeclHandler will have been called for this - * binding in addBindings(), so call the end handler now. - */ - if (parser->m_endNamespaceDeclHandler) - parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name); - - bindings = bindings->nextTagBinding; - b->nextTagBinding = parser->m_freeBindingList; - parser->m_freeBindingList = b; - b->prefix->binding = b->prevPrefixBinding; - } -} - -/* Precondition: all arguments must be non-NULL; - Purpose: - - normalize attributes - - check attributes for well-formedness - - generate namespace aware attribute names (URI, prefix) - - build list of attributes for startElementHandler - - default attributes - - process namespace declarations (check and report them) - - generate namespace aware element name (URI, prefix) -*/ -static enum XML_Error -storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, - TAG_NAME *tagNamePtr, BINDING **bindingsPtr) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - ELEMENT_TYPE *elementType; - int nDefaultAtts; - const XML_Char **appAtts; /* the attribute list for the application */ - int attIndex = 0; - int prefixLen; - int i; - int n; - XML_Char *uri; - int nPrefixes = 0; - BINDING *binding; - const XML_Char *localPart; - - /* lookup the element type name */ - elementType - = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, tagNamePtr->str, 0); - if (! elementType) { - const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); - if (! name) - return XML_ERROR_NO_MEMORY; - elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, - sizeof(ELEMENT_TYPE)); - if (! elementType) - return XML_ERROR_NO_MEMORY; - if (parser->m_ns && ! setElementTypePrefix(parser, elementType)) - return XML_ERROR_NO_MEMORY; - } - nDefaultAtts = elementType->nDefaultAtts; - - /* get the attributes from the tokenizer */ - n = XmlGetAttributes(enc, attStr, parser->m_attsSize, parser->m_atts); - if (n + nDefaultAtts > parser->m_attsSize) { - int oldAttsSize = parser->m_attsSize; - ATTRIBUTE *temp; -#ifdef XML_ATTR_INFO - XML_AttrInfo *temp2; -#endif - parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; - temp = (ATTRIBUTE *)REALLOC(parser, (void *)parser->m_atts, - parser->m_attsSize * sizeof(ATTRIBUTE)); - if (temp == NULL) { - parser->m_attsSize = oldAttsSize; - return XML_ERROR_NO_MEMORY; - } - parser->m_atts = temp; -#ifdef XML_ATTR_INFO - temp2 = (XML_AttrInfo *)REALLOC(parser, (void *)parser->m_attInfo, - parser->m_attsSize * sizeof(XML_AttrInfo)); - if (temp2 == NULL) { - parser->m_attsSize = oldAttsSize; - return XML_ERROR_NO_MEMORY; - } - parser->m_attInfo = temp2; -#endif - if (n > oldAttsSize) - XmlGetAttributes(enc, attStr, n, parser->m_atts); - } - - appAtts = (const XML_Char **)parser->m_atts; - for (i = 0; i < n; i++) { - ATTRIBUTE *currAtt = &parser->m_atts[i]; -#ifdef XML_ATTR_INFO - XML_AttrInfo *currAttInfo = &parser->m_attInfo[i]; -#endif - /* add the name and value to the attribute list */ - ATTRIBUTE_ID *attId - = getAttributeId(parser, enc, currAtt->name, - currAtt->name + XmlNameLength(enc, currAtt->name)); - if (! attId) - return XML_ERROR_NO_MEMORY; -#ifdef XML_ATTR_INFO - currAttInfo->nameStart - = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->name); - currAttInfo->nameEnd - = currAttInfo->nameStart + XmlNameLength(enc, currAtt->name); - currAttInfo->valueStart = parser->m_parseEndByteIndex - - (parser->m_parseEndPtr - currAtt->valuePtr); - currAttInfo->valueEnd = parser->m_parseEndByteIndex - - (parser->m_parseEndPtr - currAtt->valueEnd); -#endif - /* Detect duplicate attributes by their QNames. This does not work when - namespace processing is turned on and different prefixes for the same - namespace are used. For this case we have a check further down. - */ - if ((attId->name)[-1]) { - if (enc == parser->m_encoding) - parser->m_eventPtr = parser->m_atts[i].name; - return XML_ERROR_DUPLICATE_ATTRIBUTE; - } - (attId->name)[-1] = 1; - appAtts[attIndex++] = attId->name; - if (! parser->m_atts[i].normalized) { - enum XML_Error result; - XML_Bool isCdata = XML_TRUE; - - /* figure out whether declared as other than CDATA */ - if (attId->maybeTokenized) { - int j; - for (j = 0; j < nDefaultAtts; j++) { - if (attId == elementType->defaultAtts[j].id) { - isCdata = elementType->defaultAtts[j].isCdata; - break; - } - } - } - - /* normalize the attribute value */ - result = storeAttributeValue( - parser, enc, isCdata, parser->m_atts[i].valuePtr, - parser->m_atts[i].valueEnd, &parser->m_tempPool); - if (result) - return result; - appAtts[attIndex] = poolStart(&parser->m_tempPool); - poolFinish(&parser->m_tempPool); - } else { - /* the value did not need normalizing */ - appAtts[attIndex] = poolStoreString(&parser->m_tempPool, enc, - parser->m_atts[i].valuePtr, - parser->m_atts[i].valueEnd); - if (appAtts[attIndex] == 0) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_tempPool); - } - /* handle prefixed attribute names */ - if (attId->prefix) { - if (attId->xmlns) { - /* deal with namespace declarations here */ - enum XML_Error result = addBinding(parser, attId->prefix, attId, - appAtts[attIndex], bindingsPtr); - if (result) - return result; - --attIndex; - } else { - /* deal with other prefixed names later */ - attIndex++; - nPrefixes++; - (attId->name)[-1] = 2; - } - } else - attIndex++; - } - - /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ - parser->m_nSpecifiedAtts = attIndex; - if (elementType->idAtt && (elementType->idAtt->name)[-1]) { - for (i = 0; i < attIndex; i += 2) - if (appAtts[i] == elementType->idAtt->name) { - parser->m_idAttIndex = i; - break; - } - } else - parser->m_idAttIndex = -1; - - /* do attribute defaulting */ - for (i = 0; i < nDefaultAtts; i++) { - const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; - if (! (da->id->name)[-1] && da->value) { - if (da->id->prefix) { - if (da->id->xmlns) { - enum XML_Error result = addBinding(parser, da->id->prefix, da->id, - da->value, bindingsPtr); - if (result) - return result; - } else { - (da->id->name)[-1] = 2; - nPrefixes++; - appAtts[attIndex++] = da->id->name; - appAtts[attIndex++] = da->value; - } - } else { - (da->id->name)[-1] = 1; - appAtts[attIndex++] = da->id->name; - appAtts[attIndex++] = da->value; - } - } - } - appAtts[attIndex] = 0; - - /* expand prefixed attribute names, check for duplicates, - and clear flags that say whether attributes were specified */ - i = 0; - if (nPrefixes) { - int j; /* hash table index */ - unsigned long version = parser->m_nsAttsVersion; - int nsAttsSize = (int)1 << parser->m_nsAttsPower; - unsigned char oldNsAttsPower = parser->m_nsAttsPower; - /* size of hash table must be at least 2 * (# of prefixed attributes) */ - if ((nPrefixes << 1) - >> parser->m_nsAttsPower) { /* true for m_nsAttsPower = 0 */ - NS_ATT *temp; - /* hash table size must also be a power of 2 and >= 8 */ - while (nPrefixes >> parser->m_nsAttsPower++) - ; - if (parser->m_nsAttsPower < 3) - parser->m_nsAttsPower = 3; - nsAttsSize = (int)1 << parser->m_nsAttsPower; - temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts, - nsAttsSize * sizeof(NS_ATT)); - if (! temp) { - /* Restore actual size of memory in m_nsAtts */ - parser->m_nsAttsPower = oldNsAttsPower; - return XML_ERROR_NO_MEMORY; - } - parser->m_nsAtts = temp; - version = 0; /* force re-initialization of m_nsAtts hash table */ - } - /* using a version flag saves us from initializing m_nsAtts every time */ - if (! version) { /* initialize version flags when version wraps around */ - version = INIT_ATTS_VERSION; - for (j = nsAttsSize; j != 0;) - parser->m_nsAtts[--j].version = version; - } - parser->m_nsAttsVersion = --version; - - /* expand prefixed names and check for duplicates */ - for (; i < attIndex; i += 2) { - const XML_Char *s = appAtts[i]; - if (s[-1] == 2) { /* prefixed */ - ATTRIBUTE_ID *id; - const BINDING *b; - unsigned long uriHash; - struct siphash sip_state; - struct sipkey sip_key; - - copy_salt_to_sipkey(parser, &sip_key); - sip24_init(&sip_state, &sip_key); - - ((XML_Char *)s)[-1] = 0; /* clear flag */ - id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0); - if (! id || ! id->prefix) { - /* This code is walking through the appAtts array, dealing - * with (in this case) a prefixed attribute name. To be in - * the array, the attribute must have already been bound, so - * has to have passed through the hash table lookup once - * already. That implies that an entry for it already - * exists, so the lookup above will return a pointer to - * already allocated memory. There is no opportunaity for - * the allocator to fail, so the condition above cannot be - * fulfilled. - * - * Since it is difficult to be certain that the above - * analysis is complete, we retain the test and merely - * remove the code from coverage tests. - */ - return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */ - } - b = id->prefix->binding; - if (! b) - return XML_ERROR_UNBOUND_PREFIX; - - for (j = 0; j < b->uriLen; j++) { - const XML_Char c = b->uri[j]; - if (! poolAppendChar(&parser->m_tempPool, c)) - return XML_ERROR_NO_MEMORY; - } - - sip24_update(&sip_state, b->uri, b->uriLen * sizeof(XML_Char)); - - while (*s++ != XML_T(ASCII_COLON)) - ; - - sip24_update(&sip_state, s, keylen(s) * sizeof(XML_Char)); - - do { /* copies null terminator */ - if (! poolAppendChar(&parser->m_tempPool, *s)) - return XML_ERROR_NO_MEMORY; - } while (*s++); - - uriHash = (unsigned long)sip24_final(&sip_state); - - { /* Check hash table for duplicate of expanded name (uriName). - Derived from code in lookup(parser, HASH_TABLE *table, ...). - */ - unsigned char step = 0; - unsigned long mask = nsAttsSize - 1; - j = uriHash & mask; /* index into hash table */ - while (parser->m_nsAtts[j].version == version) { - /* for speed we compare stored hash values first */ - if (uriHash == parser->m_nsAtts[j].hash) { - const XML_Char *s1 = poolStart(&parser->m_tempPool); - const XML_Char *s2 = parser->m_nsAtts[j].uriName; - /* s1 is null terminated, but not s2 */ - for (; *s1 == *s2 && *s1 != 0; s1++, s2++) - ; - if (*s1 == 0) - return XML_ERROR_DUPLICATE_ATTRIBUTE; - } - if (! step) - step = PROBE_STEP(uriHash, mask, parser->m_nsAttsPower); - j < step ? (j += nsAttsSize - step) : (j -= step); - } - } - - if (parser->m_ns_triplets) { /* append namespace separator and prefix */ - parser->m_tempPool.ptr[-1] = parser->m_namespaceSeparator; - s = b->prefix->name; - do { - if (! poolAppendChar(&parser->m_tempPool, *s)) - return XML_ERROR_NO_MEMORY; - } while (*s++); - } - - /* store expanded name in attribute list */ - s = poolStart(&parser->m_tempPool); - poolFinish(&parser->m_tempPool); - appAtts[i] = s; - - /* fill empty slot with new version, uriName and hash value */ - parser->m_nsAtts[j].version = version; - parser->m_nsAtts[j].hash = uriHash; - parser->m_nsAtts[j].uriName = s; - - if (! --nPrefixes) { - i += 2; - break; - } - } else /* not prefixed */ - ((XML_Char *)s)[-1] = 0; /* clear flag */ - } - } - /* clear flags for the remaining attributes */ - for (; i < attIndex; i += 2) - ((XML_Char *)(appAtts[i]))[-1] = 0; - for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) - binding->attId->name[-1] = 0; - - if (! parser->m_ns) - return XML_ERROR_NONE; - - /* expand the element type name */ - if (elementType->prefix) { - binding = elementType->prefix->binding; - if (! binding) - return XML_ERROR_UNBOUND_PREFIX; - localPart = tagNamePtr->str; - while (*localPart++ != XML_T(ASCII_COLON)) - ; - } else if (dtd->defaultPrefix.binding) { - binding = dtd->defaultPrefix.binding; - localPart = tagNamePtr->str; - } else - return XML_ERROR_NONE; - prefixLen = 0; - if (parser->m_ns_triplets && binding->prefix->name) { - for (; binding->prefix->name[prefixLen++];) - ; /* prefixLen includes null terminator */ - } - tagNamePtr->localPart = localPart; - tagNamePtr->uriLen = binding->uriLen; - tagNamePtr->prefix = binding->prefix->name; - tagNamePtr->prefixLen = prefixLen; - for (i = 0; localPart[i++];) - ; /* i includes null terminator */ - n = i + binding->uriLen + prefixLen; - if (n > binding->uriAlloc) { - TAG *p; - uri = (XML_Char *)MALLOC(parser, (n + EXPAND_SPARE) * sizeof(XML_Char)); - if (! uri) - return XML_ERROR_NO_MEMORY; - binding->uriAlloc = n + EXPAND_SPARE; - memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); - for (p = parser->m_tagStack; p; p = p->parent) - if (p->name.str == binding->uri) - p->name.str = uri; - FREE(parser, binding->uri); - binding->uri = uri; - } - /* if m_namespaceSeparator != '\0' then uri includes it already */ - uri = binding->uri + binding->uriLen; - memcpy(uri, localPart, i * sizeof(XML_Char)); - /* we always have a namespace separator between localPart and prefix */ - if (prefixLen) { - uri += i - 1; - *uri = parser->m_namespaceSeparator; /* replace null terminator */ - memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); - } - tagNamePtr->str = binding->uri; - return XML_ERROR_NONE; -} - -/* addBinding() overwrites the value of prefix->binding without checking. - Therefore one must keep track of the old value outside of addBinding(). -*/ -static enum XML_Error -addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, - const XML_Char *uri, BINDING **bindingsPtr) { - static const XML_Char xmlNamespace[] - = {ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, - ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, - ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, - ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, - ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, - ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, - ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c, - ASCII_e, '\0'}; - static const int xmlLen = (int)sizeof(xmlNamespace) / sizeof(XML_Char) - 1; - static const XML_Char xmlnsNamespace[] - = {ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, - ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, - ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, - ASCII_2, ASCII_0, ASCII_0, ASCII_0, ASCII_SLASH, ASCII_x, - ASCII_m, ASCII_l, ASCII_n, ASCII_s, ASCII_SLASH, '\0'}; - static const int xmlnsLen - = (int)sizeof(xmlnsNamespace) / sizeof(XML_Char) - 1; - - XML_Bool mustBeXML = XML_FALSE; - XML_Bool isXML = XML_TRUE; - XML_Bool isXMLNS = XML_TRUE; - - BINDING *b; - int len; - - /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */ - if (*uri == XML_T('\0') && prefix->name) - return XML_ERROR_UNDECLARING_PREFIX; - - if (prefix->name && prefix->name[0] == XML_T(ASCII_x) - && prefix->name[1] == XML_T(ASCII_m) - && prefix->name[2] == XML_T(ASCII_l)) { - /* Not allowed to bind xmlns */ - if (prefix->name[3] == XML_T(ASCII_n) && prefix->name[4] == XML_T(ASCII_s) - && prefix->name[5] == XML_T('\0')) - return XML_ERROR_RESERVED_PREFIX_XMLNS; - - if (prefix->name[3] == XML_T('\0')) - mustBeXML = XML_TRUE; - } - - for (len = 0; uri[len]; len++) { - if (isXML && (len > xmlLen || uri[len] != xmlNamespace[len])) - isXML = XML_FALSE; - - if (! mustBeXML && isXMLNS - && (len > xmlnsLen || uri[len] != xmlnsNamespace[len])) - isXMLNS = XML_FALSE; - } - isXML = isXML && len == xmlLen; - isXMLNS = isXMLNS && len == xmlnsLen; - - if (mustBeXML != isXML) - return mustBeXML ? XML_ERROR_RESERVED_PREFIX_XML - : XML_ERROR_RESERVED_NAMESPACE_URI; - - if (isXMLNS) - return XML_ERROR_RESERVED_NAMESPACE_URI; - - if (parser->m_namespaceSeparator) - len++; - if (parser->m_freeBindingList) { - b = parser->m_freeBindingList; - if (len > b->uriAlloc) { - XML_Char *temp = (XML_Char *)REALLOC( - parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); - if (temp == NULL) - return XML_ERROR_NO_MEMORY; - b->uri = temp; - b->uriAlloc = len + EXPAND_SPARE; - } - parser->m_freeBindingList = b->nextTagBinding; - } else { - b = (BINDING *)MALLOC(parser, sizeof(BINDING)); - if (! b) - return XML_ERROR_NO_MEMORY; - b->uri - = (XML_Char *)MALLOC(parser, sizeof(XML_Char) * (len + EXPAND_SPARE)); - if (! b->uri) { - FREE(parser, b); - return XML_ERROR_NO_MEMORY; - } - b->uriAlloc = len + EXPAND_SPARE; - } - b->uriLen = len; - memcpy(b->uri, uri, len * sizeof(XML_Char)); - if (parser->m_namespaceSeparator) - b->uri[len - 1] = parser->m_namespaceSeparator; - b->prefix = prefix; - b->attId = attId; - b->prevPrefixBinding = prefix->binding; - /* NULL binding when default namespace undeclared */ - if (*uri == XML_T('\0') && prefix == &parser->m_dtd->defaultPrefix) - prefix->binding = NULL; - else - prefix->binding = b; - b->nextTagBinding = *bindingsPtr; - *bindingsPtr = b; - /* if attId == NULL then we are not starting a namespace scope */ - if (attId && parser->m_startNamespaceDeclHandler) - parser->m_startNamespaceDeclHandler(parser->m_handlerArg, prefix->name, - prefix->binding ? uri : 0); - return XML_ERROR_NONE; -} - -/* The idea here is to avoid using stack for each CDATA section when - the whole file is parsed with one call. -*/ -static enum XML_Error PTRCALL -cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, - const char **endPtr) { - enum XML_Error result - = doCdataSection(parser, parser->m_encoding, &start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer); - if (result != XML_ERROR_NONE) - return result; - if (start) { - if (parser->m_parentParser) { /* we are parsing an external entity */ - parser->m_processor = externalEntityContentProcessor; - return externalEntityContentProcessor(parser, start, end, endPtr); - } else { - parser->m_processor = contentProcessor; - return contentProcessor(parser, start, end, endPtr); - } - } - return result; -} - -/* startPtr gets set to non-null if the section is closed, and to null if - the section is not yet closed. -*/ -static enum XML_Error -doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, - const char *end, const char **nextPtr, XML_Bool haveMore) { - const char *s = *startPtr; - const char **eventPP; - const char **eventEndPP; - if (enc == parser->m_encoding) { - eventPP = &parser->m_eventPtr; - *eventPP = s; - eventEndPP = &parser->m_eventEndPtr; - } else { - eventPP = &(parser->m_openInternalEntities->internalEventPtr); - eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); - } - *eventPP = s; - *startPtr = NULL; - - for (;;) { - const char *next; - int tok = XmlCdataSectionTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_CDATA_SECT_CLOSE: - if (parser->m_endCdataSectionHandler) - parser->m_endCdataSectionHandler(parser->m_handlerArg); - /* BEGIN disabled code */ - /* see comment under XML_TOK_CDATA_SECT_OPEN */ - else if (0 && parser->m_characterDataHandler) - parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, - 0); - /* END disabled code */ - else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - *startPtr = next; - *nextPtr = next; - if (parser->m_parsingStatus.parsing == XML_FINISHED) - return XML_ERROR_ABORTED; - else - return XML_ERROR_NONE; - case XML_TOK_DATA_NEWLINE: - if (parser->m_characterDataHandler) { - XML_Char c = 0xA; - parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_DATA_CHARS: { - XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; - if (charDataHandler) { - if (MUST_CONVERT(enc, s)) { - for (;;) { - ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; - const enum XML_Convert_Result convert_res = XmlConvert( - enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); - *eventEndPP = next; - charDataHandler(parser->m_handlerArg, parser->m_dataBuf, - (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); - if ((convert_res == XML_CONVERT_COMPLETED) - || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) - break; - *eventPP = s; - } - } else - charDataHandler(parser->m_handlerArg, (XML_Char *)s, - (int)((XML_Char *)next - (XML_Char *)s)); - } else if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - } break; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_PARTIAL: - case XML_TOK_NONE: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_CDATA_SECTION; - default: - /* Every token returned by XmlCdataSectionTok() has its own - * explicit case, so this default case will never be executed. - * We retain it as a safety net and exclude it from the coverage - * statistics. - * - * LCOV_EXCL_START - */ - *eventPP = next; - return XML_ERROR_UNEXPECTED_STATE; - /* LCOV_EXCL_STOP */ - } - - *eventPP = s = next; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - *nextPtr = next; - return XML_ERROR_NONE; - case XML_FINISHED: - return XML_ERROR_ABORTED; - default:; - } - } - /* not reached */ -} - -#ifdef XML_DTD - -/* The idea here is to avoid using stack for each IGNORE section when - the whole file is parsed with one call. -*/ -static enum XML_Error PTRCALL -ignoreSectionProcessor(XML_Parser parser, const char *start, const char *end, - const char **endPtr) { - enum XML_Error result - = doIgnoreSection(parser, parser->m_encoding, &start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer); - if (result != XML_ERROR_NONE) - return result; - if (start) { - parser->m_processor = prologProcessor; - return prologProcessor(parser, start, end, endPtr); - } - return result; -} - -/* startPtr gets set to non-null is the section is closed, and to null - if the section is not yet closed. -*/ -static enum XML_Error -doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, - const char *end, const char **nextPtr, XML_Bool haveMore) { - const char *next; - int tok; - const char *s = *startPtr; - const char **eventPP; - const char **eventEndPP; - if (enc == parser->m_encoding) { - eventPP = &parser->m_eventPtr; - *eventPP = s; - eventEndPP = &parser->m_eventEndPtr; - } else { - /* It's not entirely clear, but it seems the following two lines - * of code cannot be executed. The only occasions on which 'enc' - * is not 'encoding' are when this function is called - * from the internal entity processing, and IGNORE sections are an - * error in internal entities. - * - * Since it really isn't clear that this is true, we keep the code - * and just remove it from our coverage tests. - * - * LCOV_EXCL_START - */ - eventPP = &(parser->m_openInternalEntities->internalEventPtr); - eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); - /* LCOV_EXCL_STOP */ - } - *eventPP = s; - *startPtr = NULL; - tok = XmlIgnoreSectionTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_IGNORE_SECT: - if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - *startPtr = next; - *nextPtr = next; - if (parser->m_parsingStatus.parsing == XML_FINISHED) - return XML_ERROR_ABORTED; - else - return XML_ERROR_NONE; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_PARTIAL: - case XML_TOK_NONE: - if (haveMore) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ - default: - /* All of the tokens that XmlIgnoreSectionTok() returns have - * explicit cases to handle them, so this default case is never - * executed. We keep it as a safety net anyway, and remove it - * from our test coverage statistics. - * - * LCOV_EXCL_START - */ - *eventPP = next; - return XML_ERROR_UNEXPECTED_STATE; - /* LCOV_EXCL_STOP */ - } - /* not reached */ -} - -#endif /* XML_DTD */ - -static enum XML_Error -initializeEncoding(XML_Parser parser) { - const char *s; -#ifdef XML_UNICODE - char encodingBuf[128]; - /* See comments abount `protoclEncodingName` in parserInit() */ - if (! parser->m_protocolEncodingName) - s = NULL; - else { - int i; - for (i = 0; parser->m_protocolEncodingName[i]; i++) { - if (i == sizeof(encodingBuf) - 1 - || (parser->m_protocolEncodingName[i] & ~0x7f) != 0) { - encodingBuf[0] = '\0'; - break; - } - encodingBuf[i] = (char)parser->m_protocolEncodingName[i]; - } - encodingBuf[i] = '\0'; - s = encodingBuf; - } -#else - s = parser->m_protocolEncodingName; -#endif - if ((parser->m_ns ? XmlInitEncodingNS : XmlInitEncoding)( - &parser->m_initEncoding, &parser->m_encoding, s)) - return XML_ERROR_NONE; - return handleUnknownEncoding(parser, parser->m_protocolEncodingName); -} - -static enum XML_Error -processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, - const char *next) { - const char *encodingName = NULL; - const XML_Char *storedEncName = NULL; - const ENCODING *newEncoding = NULL; - const char *version = NULL; - const char *versionend; - const XML_Char *storedversion = NULL; - int standalone = -1; - if (! (parser->m_ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)( - isGeneralTextEntity, parser->m_encoding, s, next, &parser->m_eventPtr, - &version, &versionend, &encodingName, &newEncoding, &standalone)) { - if (isGeneralTextEntity) - return XML_ERROR_TEXT_DECL; - else - return XML_ERROR_XML_DECL; - } - if (! isGeneralTextEntity && standalone == 1) { - parser->m_dtd->standalone = XML_TRUE; -#ifdef XML_DTD - if (parser->m_paramEntityParsing - == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) - parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif /* XML_DTD */ - } - if (parser->m_xmlDeclHandler) { - if (encodingName != NULL) { - storedEncName = poolStoreString( - &parser->m_temp2Pool, parser->m_encoding, encodingName, - encodingName + XmlNameLength(parser->m_encoding, encodingName)); - if (! storedEncName) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_temp2Pool); - } - if (version) { - storedversion - = poolStoreString(&parser->m_temp2Pool, parser->m_encoding, version, - versionend - parser->m_encoding->minBytesPerChar); - if (! storedversion) - return XML_ERROR_NO_MEMORY; - } - parser->m_xmlDeclHandler(parser->m_handlerArg, storedversion, storedEncName, - standalone); - } else if (parser->m_defaultHandler) - reportDefault(parser, parser->m_encoding, s, next); - if (parser->m_protocolEncodingName == NULL) { - if (newEncoding) { - /* Check that the specified encoding does not conflict with what - * the parser has already deduced. Do we have the same number - * of bytes in the smallest representation of a character? If - * this is UTF-16, is it the same endianness? - */ - if (newEncoding->minBytesPerChar != parser->m_encoding->minBytesPerChar - || (newEncoding->minBytesPerChar == 2 - && newEncoding != parser->m_encoding)) { - parser->m_eventPtr = encodingName; - return XML_ERROR_INCORRECT_ENCODING; - } - parser->m_encoding = newEncoding; - } else if (encodingName) { - enum XML_Error result; - if (! storedEncName) { - storedEncName = poolStoreString( - &parser->m_temp2Pool, parser->m_encoding, encodingName, - encodingName + XmlNameLength(parser->m_encoding, encodingName)); - if (! storedEncName) - return XML_ERROR_NO_MEMORY; - } - result = handleUnknownEncoding(parser, storedEncName); - poolClear(&parser->m_temp2Pool); - if (result == XML_ERROR_UNKNOWN_ENCODING) - parser->m_eventPtr = encodingName; - return result; - } - } - - if (storedEncName || storedversion) - poolClear(&parser->m_temp2Pool); - - return XML_ERROR_NONE; -} - -static enum XML_Error -handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) { - if (parser->m_unknownEncodingHandler) { - XML_Encoding info; - int i; - for (i = 0; i < 256; i++) - info.map[i] = -1; - info.convert = NULL; - info.data = NULL; - info.release = NULL; - if (parser->m_unknownEncodingHandler(parser->m_unknownEncodingHandlerData, - encodingName, &info)) { - ENCODING *enc; - parser->m_unknownEncodingMem = MALLOC(parser, XmlSizeOfUnknownEncoding()); - if (! parser->m_unknownEncodingMem) { - if (info.release) - info.release(info.data); - return XML_ERROR_NO_MEMORY; - } - enc = (parser->m_ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)( - parser->m_unknownEncodingMem, info.map, info.convert, info.data); - if (enc) { - parser->m_unknownEncodingData = info.data; - parser->m_unknownEncodingRelease = info.release; - parser->m_encoding = enc; - return XML_ERROR_NONE; - } - } - if (info.release != NULL) - info.release(info.data); - } - return XML_ERROR_UNKNOWN_ENCODING; -} - -static enum XML_Error PTRCALL -prologInitProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - enum XML_Error result = initializeEncoding(parser); - if (result != XML_ERROR_NONE) - return result; - parser->m_processor = prologProcessor; - return prologProcessor(parser, s, end, nextPtr); -} - -#ifdef XML_DTD - -static enum XML_Error PTRCALL -externalParEntInitProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - enum XML_Error result = initializeEncoding(parser); - if (result != XML_ERROR_NONE) - return result; - - /* we know now that XML_Parse(Buffer) has been called, - so we consider the external parameter entity read */ - parser->m_dtd->paramEntityRead = XML_TRUE; - - if (parser->m_prologState.inEntityValue) { - parser->m_processor = entityValueInitProcessor; - return entityValueInitProcessor(parser, s, end, nextPtr); - } else { - parser->m_processor = externalParEntProcessor; - return externalParEntProcessor(parser, s, end, nextPtr); - } -} - -static enum XML_Error PTRCALL -entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - int tok; - const char *start = s; - const char *next = start; - parser->m_eventPtr = start; - - for (;;) { - tok = XmlPrologTok(parser->m_encoding, start, end, &next); - parser->m_eventEndPtr = next; - if (tok <= 0) { - if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { - *nextPtr = s; - return XML_ERROR_NONE; - } - switch (tok) { - case XML_TOK_INVALID: - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_NONE: /* start == end */ - default: - break; - } - /* found end of entity value - can store it now */ - return storeEntityValue(parser, parser->m_encoding, s, end); - } else if (tok == XML_TOK_XML_DECL) { - enum XML_Error result; - result = processXmlDecl(parser, 0, start, next); - if (result != XML_ERROR_NONE) - return result; - /* At this point, m_parsingStatus.parsing cannot be XML_SUSPENDED. For - * that to happen, a parameter entity parsing handler must have attempted - * to suspend the parser, which fails and raises an error. The parser can - * be aborted, but can't be suspended. - */ - if (parser->m_parsingStatus.parsing == XML_FINISHED) - return XML_ERROR_ABORTED; - *nextPtr = next; - /* stop scanning for text declaration - we found one */ - parser->m_processor = entityValueProcessor; - return entityValueProcessor(parser, next, end, nextPtr); - } - /* If we are at the end of the buffer, this would cause XmlPrologTok to - return XML_TOK_NONE on the next call, which would then cause the - function to exit with *nextPtr set to s - that is what we want for other - tokens, but not for the BOM - we would rather like to skip it; - then, when this routine is entered the next time, XmlPrologTok will - return XML_TOK_INVALID, since the BOM is still in the buffer - */ - else if (tok == XML_TOK_BOM && next == end - && ! parser->m_parsingStatus.finalBuffer) { - *nextPtr = next; - return XML_ERROR_NONE; - } - /* If we get this token, we have the start of what might be a - normal tag, but not a declaration (i.e. it doesn't begin with - "m_eventPtr = start; - } -} - -static enum XML_Error PTRCALL -externalParEntProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - const char *next = s; - int tok; - - tok = XmlPrologTok(parser->m_encoding, s, end, &next); - if (tok <= 0) { - if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { - *nextPtr = s; - return XML_ERROR_NONE; - } - switch (tok) { - case XML_TOK_INVALID: - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_NONE: /* start == end */ - default: - break; - } - } - /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. - However, when parsing an external subset, doProlog will not accept a BOM - as valid, and report a syntax error, so we have to skip the BOM - */ - else if (tok == XML_TOK_BOM) { - s = next; - tok = XmlPrologTok(parser->m_encoding, s, end, &next); - } - - parser->m_processor = prologProcessor; - return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE); -} - -static enum XML_Error PTRCALL -entityValueProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - const char *start = s; - const char *next = s; - const ENCODING *enc = parser->m_encoding; - int tok; - - for (;;) { - tok = XmlPrologTok(enc, start, end, &next); - if (tok <= 0) { - if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { - *nextPtr = s; - return XML_ERROR_NONE; - } - switch (tok) { - case XML_TOK_INVALID: - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_NONE: /* start == end */ - default: - break; - } - /* found end of entity value - can store it now */ - return storeEntityValue(parser, enc, s, end); - } - start = next; - } -} - -#endif /* XML_DTD */ - -static enum XML_Error PTRCALL -prologProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - const char *next = s; - int tok = XmlPrologTok(parser->m_encoding, s, end, &next); - return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE); -} - -static enum XML_Error -doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, - int tok, const char *next, const char **nextPtr, XML_Bool haveMore, - XML_Bool allowClosingDoctype) { -#ifdef XML_DTD - static const XML_Char externalSubsetName[] = {ASCII_HASH, '\0'}; -#endif /* XML_DTD */ - static const XML_Char atypeCDATA[] - = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; - static const XML_Char atypeID[] = {ASCII_I, ASCII_D, '\0'}; - static const XML_Char atypeIDREF[] - = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'}; - static const XML_Char atypeIDREFS[] - = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'}; - static const XML_Char atypeENTITY[] - = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'}; - static const XML_Char atypeENTITIES[] - = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, - ASCII_I, ASCII_E, ASCII_S, '\0'}; - static const XML_Char atypeNMTOKEN[] - = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'}; - static const XML_Char atypeNMTOKENS[] - = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, - ASCII_E, ASCII_N, ASCII_S, '\0'}; - static const XML_Char notationPrefix[] - = {ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, - ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'}; - static const XML_Char enumValueSep[] = {ASCII_PIPE, '\0'}; - static const XML_Char enumValueStart[] = {ASCII_LPAREN, '\0'}; - - /* save one level of indirection */ - DTD *const dtd = parser->m_dtd; - - const char **eventPP; - const char **eventEndPP; - enum XML_Content_Quant quant; - - if (enc == parser->m_encoding) { - eventPP = &parser->m_eventPtr; - eventEndPP = &parser->m_eventEndPtr; - } else { - eventPP = &(parser->m_openInternalEntities->internalEventPtr); - eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); - } - - for (;;) { - int role; - XML_Bool handleDefault = XML_TRUE; - *eventPP = s; - *eventEndPP = next; - if (tok <= 0) { - if (haveMore && tok != XML_TOK_INVALID) { - *nextPtr = s; - return XML_ERROR_NONE; - } - switch (tok) { - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - return XML_ERROR_PARTIAL_CHAR; - case -XML_TOK_PROLOG_S: - tok = -tok; - break; - case XML_TOK_NONE: -#ifdef XML_DTD - /* for internal PE NOT referenced between declarations */ - if (enc != parser->m_encoding - && ! parser->m_openInternalEntities->betweenDecl) { - *nextPtr = s; - return XML_ERROR_NONE; - } - /* WFC: PE Between Declarations - must check that PE contains - complete markup, not only for external PEs, but also for - internal PEs if the reference occurs between declarations. - */ - if (parser->m_isParamEntity || enc != parser->m_encoding) { - if (XmlTokenRole(&parser->m_prologState, XML_TOK_NONE, end, end, enc) - == XML_ROLE_ERROR) - return XML_ERROR_INCOMPLETE_PE; - *nextPtr = s; - return XML_ERROR_NONE; - } -#endif /* XML_DTD */ - return XML_ERROR_NO_ELEMENTS; - default: - tok = -tok; - next = end; - break; - } - } - role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc); - switch (role) { - case XML_ROLE_XML_DECL: { - enum XML_Error result = processXmlDecl(parser, 0, s, next); - if (result != XML_ERROR_NONE) - return result; - enc = parser->m_encoding; - handleDefault = XML_FALSE; - } break; - case XML_ROLE_DOCTYPE_NAME: - if (parser->m_startDoctypeDeclHandler) { - parser->m_doctypeName - = poolStoreString(&parser->m_tempPool, enc, s, next); - if (! parser->m_doctypeName) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_tempPool); - parser->m_doctypePubid = NULL; - handleDefault = XML_FALSE; - } - parser->m_doctypeSysid = NULL; /* always initialize to NULL */ - break; - case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: - if (parser->m_startDoctypeDeclHandler) { - parser->m_startDoctypeDeclHandler( - parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid, - parser->m_doctypePubid, 1); - parser->m_doctypeName = NULL; - poolClear(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - break; -#ifdef XML_DTD - case XML_ROLE_TEXT_DECL: { - enum XML_Error result = processXmlDecl(parser, 1, s, next); - if (result != XML_ERROR_NONE) - return result; - enc = parser->m_encoding; - handleDefault = XML_FALSE; - } break; -#endif /* XML_DTD */ - case XML_ROLE_DOCTYPE_PUBLIC_ID: -#ifdef XML_DTD - parser->m_useForeignDTD = XML_FALSE; - parser->m_declEntity = (ENTITY *)lookup( - parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); - if (! parser->m_declEntity) - return XML_ERROR_NO_MEMORY; -#endif /* XML_DTD */ - dtd->hasParamEntityRefs = XML_TRUE; - if (parser->m_startDoctypeDeclHandler) { - XML_Char *pubId; - if (! XmlIsPublicId(enc, s, next, eventPP)) - return XML_ERROR_PUBLICID; - pubId = poolStoreString(&parser->m_tempPool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! pubId) - return XML_ERROR_NO_MEMORY; - normalizePublicId(pubId); - poolFinish(&parser->m_tempPool); - parser->m_doctypePubid = pubId; - handleDefault = XML_FALSE; - goto alreadyChecked; - } - /* fall through */ - case XML_ROLE_ENTITY_PUBLIC_ID: - if (! XmlIsPublicId(enc, s, next, eventPP)) - return XML_ERROR_PUBLICID; - alreadyChecked: - if (dtd->keepProcessing && parser->m_declEntity) { - XML_Char *tem - = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! tem) - return XML_ERROR_NO_MEMORY; - normalizePublicId(tem); - parser->m_declEntity->publicId = tem; - poolFinish(&dtd->pool); - /* Don't suppress the default handler if we fell through from - * the XML_ROLE_DOCTYPE_PUBLIC_ID case. - */ - if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_PUBLIC_ID) - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_DOCTYPE_CLOSE: - if (allowClosingDoctype != XML_TRUE) { - /* Must not close doctype from within expanded parameter entities */ - return XML_ERROR_INVALID_TOKEN; - } - - if (parser->m_doctypeName) { - parser->m_startDoctypeDeclHandler( - parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid, - parser->m_doctypePubid, 0); - poolClear(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - /* parser->m_doctypeSysid will be non-NULL in the case of a previous - XML_ROLE_DOCTYPE_SYSTEM_ID, even if parser->m_startDoctypeDeclHandler - was not set, indicating an external subset - */ -#ifdef XML_DTD - if (parser->m_doctypeSysid || parser->m_useForeignDTD) { - XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; - dtd->hasParamEntityRefs = XML_TRUE; - if (parser->m_paramEntityParsing - && parser->m_externalEntityRefHandler) { - ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, - externalSubsetName, sizeof(ENTITY)); - if (! entity) { - /* The external subset name "#" will have already been - * inserted into the hash table at the start of the - * external entity parsing, so no allocation will happen - * and lookup() cannot fail. - */ - return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */ - } - if (parser->m_useForeignDTD) - entity->base = parser->m_curBase; - dtd->paramEntityRead = XML_FALSE; - if (! parser->m_externalEntityRefHandler( - parser->m_externalEntityRefHandlerArg, 0, entity->base, - entity->systemId, entity->publicId)) - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - if (dtd->paramEntityRead) { - if (! dtd->standalone && parser->m_notStandaloneHandler - && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) - return XML_ERROR_NOT_STANDALONE; - } - /* if we didn't read the foreign DTD then this means that there - is no external subset and we must reset dtd->hasParamEntityRefs - */ - else if (! parser->m_doctypeSysid) - dtd->hasParamEntityRefs = hadParamEntityRefs; - /* end of DTD - no need to update dtd->keepProcessing */ - } - parser->m_useForeignDTD = XML_FALSE; - } -#endif /* XML_DTD */ - if (parser->m_endDoctypeDeclHandler) { - parser->m_endDoctypeDeclHandler(parser->m_handlerArg); - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_INSTANCE_START: -#ifdef XML_DTD - /* if there is no DOCTYPE declaration then now is the - last chance to read the foreign DTD - */ - if (parser->m_useForeignDTD) { - XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; - dtd->hasParamEntityRefs = XML_TRUE; - if (parser->m_paramEntityParsing - && parser->m_externalEntityRefHandler) { - ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, - externalSubsetName, sizeof(ENTITY)); - if (! entity) - return XML_ERROR_NO_MEMORY; - entity->base = parser->m_curBase; - dtd->paramEntityRead = XML_FALSE; - if (! parser->m_externalEntityRefHandler( - parser->m_externalEntityRefHandlerArg, 0, entity->base, - entity->systemId, entity->publicId)) - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - if (dtd->paramEntityRead) { - if (! dtd->standalone && parser->m_notStandaloneHandler - && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) - return XML_ERROR_NOT_STANDALONE; - } - /* if we didn't read the foreign DTD then this means that there - is no external subset and we must reset dtd->hasParamEntityRefs - */ - else - dtd->hasParamEntityRefs = hadParamEntityRefs; - /* end of DTD - no need to update dtd->keepProcessing */ - } - } -#endif /* XML_DTD */ - parser->m_processor = contentProcessor; - return contentProcessor(parser, s, end, nextPtr); - case XML_ROLE_ATTLIST_ELEMENT_NAME: - parser->m_declElementType = getElementType(parser, enc, s, next); - if (! parser->m_declElementType) - return XML_ERROR_NO_MEMORY; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_NAME: - parser->m_declAttributeId = getAttributeId(parser, enc, s, next); - if (! parser->m_declAttributeId) - return XML_ERROR_NO_MEMORY; - parser->m_declAttributeIsCdata = XML_FALSE; - parser->m_declAttributeType = NULL; - parser->m_declAttributeIsId = XML_FALSE; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_CDATA: - parser->m_declAttributeIsCdata = XML_TRUE; - parser->m_declAttributeType = atypeCDATA; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_ID: - parser->m_declAttributeIsId = XML_TRUE; - parser->m_declAttributeType = atypeID; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_IDREF: - parser->m_declAttributeType = atypeIDREF; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: - parser->m_declAttributeType = atypeIDREFS; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: - parser->m_declAttributeType = atypeENTITY; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: - parser->m_declAttributeType = atypeENTITIES; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: - parser->m_declAttributeType = atypeNMTOKEN; - goto checkAttListDeclHandler; - case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: - parser->m_declAttributeType = atypeNMTOKENS; - checkAttListDeclHandler: - if (dtd->keepProcessing && parser->m_attlistDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_ATTRIBUTE_ENUM_VALUE: - case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: - if (dtd->keepProcessing && parser->m_attlistDeclHandler) { - const XML_Char *prefix; - if (parser->m_declAttributeType) { - prefix = enumValueSep; - } else { - prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE ? notationPrefix - : enumValueStart); - } - if (! poolAppendString(&parser->m_tempPool, prefix)) - return XML_ERROR_NO_MEMORY; - if (! poolAppend(&parser->m_tempPool, enc, s, next)) - return XML_ERROR_NO_MEMORY; - parser->m_declAttributeType = parser->m_tempPool.start; - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: - case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: - if (dtd->keepProcessing) { - if (! defineAttribute(parser->m_declElementType, - parser->m_declAttributeId, - parser->m_declAttributeIsCdata, - parser->m_declAttributeIsId, 0, parser)) - return XML_ERROR_NO_MEMORY; - if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { - if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) - || (*parser->m_declAttributeType == XML_T(ASCII_N) - && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { - /* Enumerated or Notation type */ - if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) - || ! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return XML_ERROR_NO_MEMORY; - parser->m_declAttributeType = parser->m_tempPool.start; - poolFinish(&parser->m_tempPool); - } - *eventEndPP = s; - parser->m_attlistDeclHandler( - parser->m_handlerArg, parser->m_declElementType->name, - parser->m_declAttributeId->name, parser->m_declAttributeType, 0, - role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); - poolClear(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - } - break; - case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: - case XML_ROLE_FIXED_ATTRIBUTE_VALUE: - if (dtd->keepProcessing) { - const XML_Char *attVal; - enum XML_Error result = storeAttributeValue( - parser, enc, parser->m_declAttributeIsCdata, - s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool); - if (result) - return result; - attVal = poolStart(&dtd->pool); - poolFinish(&dtd->pool); - /* ID attributes aren't allowed to have a default */ - if (! defineAttribute( - parser->m_declElementType, parser->m_declAttributeId, - parser->m_declAttributeIsCdata, XML_FALSE, attVal, parser)) - return XML_ERROR_NO_MEMORY; - if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { - if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) - || (*parser->m_declAttributeType == XML_T(ASCII_N) - && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { - /* Enumerated or Notation type */ - if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) - || ! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return XML_ERROR_NO_MEMORY; - parser->m_declAttributeType = parser->m_tempPool.start; - poolFinish(&parser->m_tempPool); - } - *eventEndPP = s; - parser->m_attlistDeclHandler( - parser->m_handlerArg, parser->m_declElementType->name, - parser->m_declAttributeId->name, parser->m_declAttributeType, - attVal, role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); - poolClear(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - } - break; - case XML_ROLE_ENTITY_VALUE: - if (dtd->keepProcessing) { - enum XML_Error result = storeEntityValue( - parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); - if (parser->m_declEntity) { - parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool); - parser->m_declEntity->textLen - = (int)(poolLength(&dtd->entityValuePool)); - poolFinish(&dtd->entityValuePool); - if (parser->m_entityDeclHandler) { - *eventEndPP = s; - parser->m_entityDeclHandler( - parser->m_handlerArg, parser->m_declEntity->name, - parser->m_declEntity->is_param, parser->m_declEntity->textPtr, - parser->m_declEntity->textLen, parser->m_curBase, 0, 0, 0); - handleDefault = XML_FALSE; - } - } else - poolDiscard(&dtd->entityValuePool); - if (result != XML_ERROR_NONE) - return result; - } - break; - case XML_ROLE_DOCTYPE_SYSTEM_ID: -#ifdef XML_DTD - parser->m_useForeignDTD = XML_FALSE; -#endif /* XML_DTD */ - dtd->hasParamEntityRefs = XML_TRUE; - if (parser->m_startDoctypeDeclHandler) { - parser->m_doctypeSysid = poolStoreString(&parser->m_tempPool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (parser->m_doctypeSysid == NULL) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_tempPool); - handleDefault = XML_FALSE; - } -#ifdef XML_DTD - else - /* use externalSubsetName to make parser->m_doctypeSysid non-NULL - for the case where no parser->m_startDoctypeDeclHandler is set */ - parser->m_doctypeSysid = externalSubsetName; -#endif /* XML_DTD */ - if (! dtd->standalone -#ifdef XML_DTD - && ! parser->m_paramEntityParsing -#endif /* XML_DTD */ - && parser->m_notStandaloneHandler - && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) - return XML_ERROR_NOT_STANDALONE; -#ifndef XML_DTD - break; -#else /* XML_DTD */ - if (! parser->m_declEntity) { - parser->m_declEntity = (ENTITY *)lookup( - parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); - if (! parser->m_declEntity) - return XML_ERROR_NO_MEMORY; - parser->m_declEntity->publicId = NULL; - } -#endif /* XML_DTD */ - /* fall through */ - case XML_ROLE_ENTITY_SYSTEM_ID: - if (dtd->keepProcessing && parser->m_declEntity) { - parser->m_declEntity->systemId - = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! parser->m_declEntity->systemId) - return XML_ERROR_NO_MEMORY; - parser->m_declEntity->base = parser->m_curBase; - poolFinish(&dtd->pool); - /* Don't suppress the default handler if we fell through from - * the XML_ROLE_DOCTYPE_SYSTEM_ID case. - */ - if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_SYSTEM_ID) - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_ENTITY_COMPLETE: - if (dtd->keepProcessing && parser->m_declEntity - && parser->m_entityDeclHandler) { - *eventEndPP = s; - parser->m_entityDeclHandler( - parser->m_handlerArg, parser->m_declEntity->name, - parser->m_declEntity->is_param, 0, 0, parser->m_declEntity->base, - parser->m_declEntity->systemId, parser->m_declEntity->publicId, 0); - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_ENTITY_NOTATION_NAME: - if (dtd->keepProcessing && parser->m_declEntity) { - parser->m_declEntity->notation - = poolStoreString(&dtd->pool, enc, s, next); - if (! parser->m_declEntity->notation) - return XML_ERROR_NO_MEMORY; - poolFinish(&dtd->pool); - if (parser->m_unparsedEntityDeclHandler) { - *eventEndPP = s; - parser->m_unparsedEntityDeclHandler( - parser->m_handlerArg, parser->m_declEntity->name, - parser->m_declEntity->base, parser->m_declEntity->systemId, - parser->m_declEntity->publicId, parser->m_declEntity->notation); - handleDefault = XML_FALSE; - } else if (parser->m_entityDeclHandler) { - *eventEndPP = s; - parser->m_entityDeclHandler( - parser->m_handlerArg, parser->m_declEntity->name, 0, 0, 0, - parser->m_declEntity->base, parser->m_declEntity->systemId, - parser->m_declEntity->publicId, parser->m_declEntity->notation); - handleDefault = XML_FALSE; - } - } - break; - case XML_ROLE_GENERAL_ENTITY_NAME: { - if (XmlPredefinedEntityName(enc, s, next)) { - parser->m_declEntity = NULL; - break; - } - if (dtd->keepProcessing) { - const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); - if (! name) - return XML_ERROR_NO_MEMORY; - parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, - name, sizeof(ENTITY)); - if (! parser->m_declEntity) - return XML_ERROR_NO_MEMORY; - if (parser->m_declEntity->name != name) { - poolDiscard(&dtd->pool); - parser->m_declEntity = NULL; - } else { - poolFinish(&dtd->pool); - parser->m_declEntity->publicId = NULL; - parser->m_declEntity->is_param = XML_FALSE; - /* if we have a parent parser or are reading an internal parameter - entity, then the entity declaration is not considered "internal" - */ - parser->m_declEntity->is_internal - = ! (parser->m_parentParser || parser->m_openInternalEntities); - if (parser->m_entityDeclHandler) - handleDefault = XML_FALSE; - } - } else { - poolDiscard(&dtd->pool); - parser->m_declEntity = NULL; - } - } break; - case XML_ROLE_PARAM_ENTITY_NAME: -#ifdef XML_DTD - if (dtd->keepProcessing) { - const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); - if (! name) - return XML_ERROR_NO_MEMORY; - parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities, - name, sizeof(ENTITY)); - if (! parser->m_declEntity) - return XML_ERROR_NO_MEMORY; - if (parser->m_declEntity->name != name) { - poolDiscard(&dtd->pool); - parser->m_declEntity = NULL; - } else { - poolFinish(&dtd->pool); - parser->m_declEntity->publicId = NULL; - parser->m_declEntity->is_param = XML_TRUE; - /* if we have a parent parser or are reading an internal parameter - entity, then the entity declaration is not considered "internal" - */ - parser->m_declEntity->is_internal - = ! (parser->m_parentParser || parser->m_openInternalEntities); - if (parser->m_entityDeclHandler) - handleDefault = XML_FALSE; - } - } else { - poolDiscard(&dtd->pool); - parser->m_declEntity = NULL; - } -#else /* not XML_DTD */ - parser->m_declEntity = NULL; -#endif /* XML_DTD */ - break; - case XML_ROLE_NOTATION_NAME: - parser->m_declNotationPublicId = NULL; - parser->m_declNotationName = NULL; - if (parser->m_notationDeclHandler) { - parser->m_declNotationName - = poolStoreString(&parser->m_tempPool, enc, s, next); - if (! parser->m_declNotationName) - return XML_ERROR_NO_MEMORY; - poolFinish(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_NOTATION_PUBLIC_ID: - if (! XmlIsPublicId(enc, s, next, eventPP)) - return XML_ERROR_PUBLICID; - if (parser - ->m_declNotationName) { /* means m_notationDeclHandler != NULL */ - XML_Char *tem = poolStoreString(&parser->m_tempPool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! tem) - return XML_ERROR_NO_MEMORY; - normalizePublicId(tem); - parser->m_declNotationPublicId = tem; - poolFinish(&parser->m_tempPool); - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_NOTATION_SYSTEM_ID: - if (parser->m_declNotationName && parser->m_notationDeclHandler) { - const XML_Char *systemId = poolStoreString(&parser->m_tempPool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! systemId) - return XML_ERROR_NO_MEMORY; - *eventEndPP = s; - parser->m_notationDeclHandler( - parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase, - systemId, parser->m_declNotationPublicId); - handleDefault = XML_FALSE; - } - poolClear(&parser->m_tempPool); - break; - case XML_ROLE_NOTATION_NO_SYSTEM_ID: - if (parser->m_declNotationPublicId && parser->m_notationDeclHandler) { - *eventEndPP = s; - parser->m_notationDeclHandler( - parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase, - 0, parser->m_declNotationPublicId); - handleDefault = XML_FALSE; - } - poolClear(&parser->m_tempPool); - break; - case XML_ROLE_ERROR: - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: - /* PE references in internal subset are - not allowed within declarations. */ - return XML_ERROR_PARAM_ENTITY_REF; - case XML_TOK_XML_DECL: - return XML_ERROR_MISPLACED_XML_PI; - default: - return XML_ERROR_SYNTAX; - } -#ifdef XML_DTD - case XML_ROLE_IGNORE_SECT: { - enum XML_Error result; - if (parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - handleDefault = XML_FALSE; - result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore); - if (result != XML_ERROR_NONE) - return result; - else if (! next) { - parser->m_processor = ignoreSectionProcessor; - return result; - } - } break; -#endif /* XML_DTD */ - case XML_ROLE_GROUP_OPEN: - if (parser->m_prologState.level >= parser->m_groupSize) { - if (parser->m_groupSize) { - { - char *const new_connector = (char *)REALLOC( - parser, parser->m_groupConnector, parser->m_groupSize *= 2); - if (new_connector == NULL) { - parser->m_groupSize /= 2; - return XML_ERROR_NO_MEMORY; - } - parser->m_groupConnector = new_connector; - } - - if (dtd->scaffIndex) { - int *const new_scaff_index = (int *)REALLOC( - parser, dtd->scaffIndex, parser->m_groupSize * sizeof(int)); - if (new_scaff_index == NULL) - return XML_ERROR_NO_MEMORY; - dtd->scaffIndex = new_scaff_index; - } - } else { - parser->m_groupConnector - = (char *)MALLOC(parser, parser->m_groupSize = 32); - if (! parser->m_groupConnector) { - parser->m_groupSize = 0; - return XML_ERROR_NO_MEMORY; - } - } - } - parser->m_groupConnector[parser->m_prologState.level] = 0; - if (dtd->in_eldecl) { - int myindex = nextScaffoldPart(parser); - if (myindex < 0) - return XML_ERROR_NO_MEMORY; - assert(dtd->scaffIndex != NULL); - dtd->scaffIndex[dtd->scaffLevel] = myindex; - dtd->scaffLevel++; - dtd->scaffold[myindex].type = XML_CTYPE_SEQ; - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - } - break; - case XML_ROLE_GROUP_SEQUENCE: - if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_PIPE) - return XML_ERROR_SYNTAX; - parser->m_groupConnector[parser->m_prologState.level] = ASCII_COMMA; - if (dtd->in_eldecl && parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_GROUP_CHOICE: - if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_COMMA) - return XML_ERROR_SYNTAX; - if (dtd->in_eldecl - && ! parser->m_groupConnector[parser->m_prologState.level] - && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type - != XML_CTYPE_MIXED)) { - dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type - = XML_CTYPE_CHOICE; - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - } - parser->m_groupConnector[parser->m_prologState.level] = ASCII_PIPE; - break; - case XML_ROLE_PARAM_ENTITY_REF: -#ifdef XML_DTD - case XML_ROLE_INNER_PARAM_ENTITY_REF: - dtd->hasParamEntityRefs = XML_TRUE; - if (! parser->m_paramEntityParsing) - dtd->keepProcessing = dtd->standalone; - else { - const XML_Char *name; - ENTITY *entity; - name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); - poolDiscard(&dtd->pool); - /* first, determine if a check for an existing declaration is needed; - if yes, check that the entity exists, and that it is internal, - otherwise call the skipped entity handler - */ - if (parser->m_prologState.documentEntity - && (dtd->standalone ? ! parser->m_openInternalEntities - : ! dtd->hasParamEntityRefs)) { - if (! entity) - return XML_ERROR_UNDEFINED_ENTITY; - else if (! entity->is_internal) { - /* It's hard to exhaustively search the code to be sure, - * but there doesn't seem to be a way of executing the - * following line. There are two cases: - * - * If 'standalone' is false, the DTD must have no - * parameter entities or we wouldn't have passed the outer - * 'if' statement. That measn the only entity in the hash - * table is the external subset name "#" which cannot be - * given as a parameter entity name in XML syntax, so the - * lookup must have returned NULL and we don't even reach - * the test for an internal entity. - * - * If 'standalone' is true, it does not seem to be - * possible to create entities taking this code path that - * are not internal entities, so fail the test above. - * - * Because this analysis is very uncertain, the code is - * being left in place and merely removed from the - * coverage test statistics. - */ - return XML_ERROR_ENTITY_DECLARED_IN_PE; /* LCOV_EXCL_LINE */ - } - } else if (! entity) { - dtd->keepProcessing = dtd->standalone; - /* cannot report skipped entities in declarations */ - if ((role == XML_ROLE_PARAM_ENTITY_REF) - && parser->m_skippedEntityHandler) { - parser->m_skippedEntityHandler(parser->m_handlerArg, name, 1); - handleDefault = XML_FALSE; - } - break; - } - if (entity->open) - return XML_ERROR_RECURSIVE_ENTITY_REF; - if (entity->textPtr) { - enum XML_Error result; - XML_Bool betweenDecl - = (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE); - result = processInternalEntity(parser, entity, betweenDecl); - if (result != XML_ERROR_NONE) - return result; - handleDefault = XML_FALSE; - break; - } - if (parser->m_externalEntityRefHandler) { - dtd->paramEntityRead = XML_FALSE; - entity->open = XML_TRUE; - if (! parser->m_externalEntityRefHandler( - parser->m_externalEntityRefHandlerArg, 0, entity->base, - entity->systemId, entity->publicId)) { - entity->open = XML_FALSE; - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - } - entity->open = XML_FALSE; - handleDefault = XML_FALSE; - if (! dtd->paramEntityRead) { - dtd->keepProcessing = dtd->standalone; - break; - } - } else { - dtd->keepProcessing = dtd->standalone; - break; - } - } -#endif /* XML_DTD */ - if (! dtd->standalone && parser->m_notStandaloneHandler - && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) - return XML_ERROR_NOT_STANDALONE; - break; - - /* Element declaration stuff */ - - case XML_ROLE_ELEMENT_NAME: - if (parser->m_elementDeclHandler) { - parser->m_declElementType = getElementType(parser, enc, s, next); - if (! parser->m_declElementType) - return XML_ERROR_NO_MEMORY; - dtd->scaffLevel = 0; - dtd->scaffCount = 0; - dtd->in_eldecl = XML_TRUE; - handleDefault = XML_FALSE; - } - break; - - case XML_ROLE_CONTENT_ANY: - case XML_ROLE_CONTENT_EMPTY: - if (dtd->in_eldecl) { - if (parser->m_elementDeclHandler) { - XML_Content *content - = (XML_Content *)MALLOC(parser, sizeof(XML_Content)); - if (! content) - return XML_ERROR_NO_MEMORY; - content->quant = XML_CQUANT_NONE; - content->name = NULL; - content->numchildren = 0; - content->children = NULL; - content->type = ((role == XML_ROLE_CONTENT_ANY) ? XML_CTYPE_ANY - : XML_CTYPE_EMPTY); - *eventEndPP = s; - parser->m_elementDeclHandler( - parser->m_handlerArg, parser->m_declElementType->name, content); - handleDefault = XML_FALSE; - } - dtd->in_eldecl = XML_FALSE; - } - break; - - case XML_ROLE_CONTENT_PCDATA: - if (dtd->in_eldecl) { - dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type - = XML_CTYPE_MIXED; - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - } - break; - - case XML_ROLE_CONTENT_ELEMENT: - quant = XML_CQUANT_NONE; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_OPT: - quant = XML_CQUANT_OPT; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_REP: - quant = XML_CQUANT_REP; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_PLUS: - quant = XML_CQUANT_PLUS; - elementContent: - if (dtd->in_eldecl) { - ELEMENT_TYPE *el; - const XML_Char *name; - int nameLen; - const char *nxt - = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); - int myindex = nextScaffoldPart(parser); - if (myindex < 0) - return XML_ERROR_NO_MEMORY; - dtd->scaffold[myindex].type = XML_CTYPE_NAME; - dtd->scaffold[myindex].quant = quant; - el = getElementType(parser, enc, s, nxt); - if (! el) - return XML_ERROR_NO_MEMORY; - name = el->name; - dtd->scaffold[myindex].name = name; - nameLen = 0; - for (; name[nameLen++];) - ; - dtd->contentStringLen += nameLen; - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - } - break; - - case XML_ROLE_GROUP_CLOSE: - quant = XML_CQUANT_NONE; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_OPT: - quant = XML_CQUANT_OPT; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_REP: - quant = XML_CQUANT_REP; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_PLUS: - quant = XML_CQUANT_PLUS; - closeGroup: - if (dtd->in_eldecl) { - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - dtd->scaffLevel--; - dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; - if (dtd->scaffLevel == 0) { - if (! handleDefault) { - XML_Content *model = build_model(parser); - if (! model) - return XML_ERROR_NO_MEMORY; - *eventEndPP = s; - parser->m_elementDeclHandler( - parser->m_handlerArg, parser->m_declElementType->name, model); - } - dtd->in_eldecl = XML_FALSE; - dtd->contentStringLen = 0; - } - } - break; - /* End element declaration stuff */ - - case XML_ROLE_PI: - if (! reportProcessingInstruction(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - handleDefault = XML_FALSE; - break; - case XML_ROLE_COMMENT: - if (! reportComment(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - handleDefault = XML_FALSE; - break; - case XML_ROLE_NONE: - switch (tok) { - case XML_TOK_BOM: - handleDefault = XML_FALSE; - break; - } - break; - case XML_ROLE_DOCTYPE_NONE: - if (parser->m_startDoctypeDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_ENTITY_NONE: - if (dtd->keepProcessing && parser->m_entityDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_NOTATION_NONE: - if (parser->m_notationDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_ATTLIST_NONE: - if (dtd->keepProcessing && parser->m_attlistDeclHandler) - handleDefault = XML_FALSE; - break; - case XML_ROLE_ELEMENT_NONE: - if (parser->m_elementDeclHandler) - handleDefault = XML_FALSE; - break; - } /* end of big switch */ - - if (handleDefault && parser->m_defaultHandler) - reportDefault(parser, enc, s, next); - - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - *nextPtr = next; - return XML_ERROR_NONE; - case XML_FINISHED: - return XML_ERROR_ABORTED; - default: - s = next; - tok = XmlPrologTok(enc, s, end, &next); - } - } - /* not reached */ -} - -static enum XML_Error PTRCALL -epilogProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - parser->m_processor = epilogProcessor; - parser->m_eventPtr = s; - for (;;) { - const char *next = NULL; - int tok = XmlPrologTok(parser->m_encoding, s, end, &next); - parser->m_eventEndPtr = next; - switch (tok) { - /* report partial linebreak - it might be the last token */ - case -XML_TOK_PROLOG_S: - if (parser->m_defaultHandler) { - reportDefault(parser, parser->m_encoding, s, next); - if (parser->m_parsingStatus.parsing == XML_FINISHED) - return XML_ERROR_ABORTED; - } - *nextPtr = next; - return XML_ERROR_NONE; - case XML_TOK_NONE: - *nextPtr = s; - return XML_ERROR_NONE; - case XML_TOK_PROLOG_S: - if (parser->m_defaultHandler) - reportDefault(parser, parser->m_encoding, s, next); - break; - case XML_TOK_PI: - if (! reportProcessingInstruction(parser, parser->m_encoding, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_COMMENT: - if (! reportComment(parser, parser->m_encoding, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_INVALID: - parser->m_eventPtr = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (! parser->m_parsingStatus.finalBuffer) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (! parser->m_parsingStatus.finalBuffer) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - default: - return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; - } - parser->m_eventPtr = s = next; - switch (parser->m_parsingStatus.parsing) { - case XML_SUSPENDED: - *nextPtr = next; - return XML_ERROR_NONE; - case XML_FINISHED: - return XML_ERROR_ABORTED; - default:; - } - } -} - -static enum XML_Error -processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { - const char *textStart, *textEnd; - const char *next; - enum XML_Error result; - OPEN_INTERNAL_ENTITY *openEntity; - - if (parser->m_freeInternalEntities) { - openEntity = parser->m_freeInternalEntities; - parser->m_freeInternalEntities = openEntity->next; - } else { - openEntity - = (OPEN_INTERNAL_ENTITY *)MALLOC(parser, sizeof(OPEN_INTERNAL_ENTITY)); - if (! openEntity) - return XML_ERROR_NO_MEMORY; - } - entity->open = XML_TRUE; - entity->processed = 0; - openEntity->next = parser->m_openInternalEntities; - parser->m_openInternalEntities = openEntity; - openEntity->entity = entity; - openEntity->startTagLevel = parser->m_tagLevel; - openEntity->betweenDecl = betweenDecl; - openEntity->internalEventPtr = NULL; - openEntity->internalEventEndPtr = NULL; - textStart = (char *)entity->textPtr; - textEnd = (char *)(entity->textPtr + entity->textLen); - /* Set a safe default value in case 'next' does not get set */ - next = textStart; - -#ifdef XML_DTD - if (entity->is_param) { - int tok - = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); - result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, - tok, next, &next, XML_FALSE, XML_FALSE); - } else -#endif /* XML_DTD */ - result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, - textStart, textEnd, &next, XML_FALSE); - - if (result == XML_ERROR_NONE) { - if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { - entity->processed = (int)(next - textStart); - parser->m_processor = internalEntityProcessor; - } else { - entity->open = XML_FALSE; - parser->m_openInternalEntities = openEntity->next; - /* put openEntity back in list of free instances */ - openEntity->next = parser->m_freeInternalEntities; - parser->m_freeInternalEntities = openEntity; - } - } - return result; -} - -static enum XML_Error PTRCALL -internalEntityProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - ENTITY *entity; - const char *textStart, *textEnd; - const char *next; - enum XML_Error result; - OPEN_INTERNAL_ENTITY *openEntity = parser->m_openInternalEntities; - if (! openEntity) - return XML_ERROR_UNEXPECTED_STATE; - - entity = openEntity->entity; - textStart = ((char *)entity->textPtr) + entity->processed; - textEnd = (char *)(entity->textPtr + entity->textLen); - /* Set a safe default value in case 'next' does not get set */ - next = textStart; - -#ifdef XML_DTD - if (entity->is_param) { - int tok - = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); - result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, - tok, next, &next, XML_FALSE, XML_TRUE); - } else -#endif /* XML_DTD */ - result = doContent(parser, openEntity->startTagLevel, - parser->m_internalEncoding, textStart, textEnd, &next, - XML_FALSE); - - if (result != XML_ERROR_NONE) - return result; - else if (textEnd != next - && parser->m_parsingStatus.parsing == XML_SUSPENDED) { - entity->processed = (int)(next - (char *)entity->textPtr); - return result; - } else { - entity->open = XML_FALSE; - parser->m_openInternalEntities = openEntity->next; - /* put openEntity back in list of free instances */ - openEntity->next = parser->m_freeInternalEntities; - parser->m_freeInternalEntities = openEntity; - } - -#ifdef XML_DTD - if (entity->is_param) { - int tok; - parser->m_processor = prologProcessor; - tok = XmlPrologTok(parser->m_encoding, s, end, &next); - return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE); - } else -#endif /* XML_DTD */ - { - parser->m_processor = contentProcessor; - /* see externalEntityContentProcessor vs contentProcessor */ - return doContent(parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, - s, end, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer); - } -} - -static enum XML_Error PTRCALL -errorProcessor(XML_Parser parser, const char *s, const char *end, - const char **nextPtr) { - UNUSED_P(s); - UNUSED_P(end); - UNUSED_P(nextPtr); - return parser->m_errorCode; -} - -static enum XML_Error -storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, - const char *ptr, const char *end, STRING_POOL *pool) { - enum XML_Error result - = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); - if (result) - return result; - if (! isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) - poolChop(pool); - if (! poolAppendChar(pool, XML_T('\0'))) - return XML_ERROR_NO_MEMORY; - return XML_ERROR_NONE; -} - -static enum XML_Error -appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, - const char *ptr, const char *end, STRING_POOL *pool) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - for (;;) { - const char *next; - int tok = XmlAttributeValueTok(enc, ptr, end, &next); - switch (tok) { - case XML_TOK_NONE: - return XML_ERROR_NONE; - case XML_TOK_INVALID: - if (enc == parser->m_encoding) - parser->m_eventPtr = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (enc == parser->m_encoding) - parser->m_eventPtr = ptr; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_CHAR_REF: { - XML_Char buf[XML_ENCODE_MAX]; - int i; - int n = XmlCharRefNumber(enc, ptr); - if (n < 0) { - if (enc == parser->m_encoding) - parser->m_eventPtr = ptr; - return XML_ERROR_BAD_CHAR_REF; - } - if (! isCdata && n == 0x20 /* space */ - && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) - break; - n = XmlEncode(n, (ICHAR *)buf); - /* The XmlEncode() functions can never return 0 here. That - * error return happens if the code point passed in is either - * negative or greater than or equal to 0x110000. The - * XmlCharRefNumber() functions will all return a number - * strictly less than 0x110000 or a negative value if an error - * occurred. The negative value is intercepted above, so - * XmlEncode() is never passed a value it might return an - * error for. - */ - for (i = 0; i < n; i++) { - if (! poolAppendChar(pool, buf[i])) - return XML_ERROR_NO_MEMORY; - } - } break; - case XML_TOK_DATA_CHARS: - if (! poolAppend(pool, enc, ptr, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_TRAILING_CR: - next = ptr + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_ATTRIBUTE_VALUE_S: - case XML_TOK_DATA_NEWLINE: - if (! isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) - break; - if (! poolAppendChar(pool, 0x20)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_ENTITY_REF: { - const XML_Char *name; - ENTITY *entity; - char checkEntityDecl; - XML_Char ch = (XML_Char)XmlPredefinedEntityName( - enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); - if (ch) { - if (! poolAppendChar(pool, ch)) - return XML_ERROR_NO_MEMORY; - break; - } - name = poolStoreString(&parser->m_temp2Pool, enc, - ptr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); - poolDiscard(&parser->m_temp2Pool); - /* First, determine if a check for an existing declaration is needed; - if yes, check that the entity exists, and that it is internal. - */ - if (pool == &dtd->pool) /* are we called from prolog? */ - checkEntityDecl = -#ifdef XML_DTD - parser->m_prologState.documentEntity && -#endif /* XML_DTD */ - (dtd->standalone ? ! parser->m_openInternalEntities - : ! dtd->hasParamEntityRefs); - else /* if (pool == &parser->m_tempPool): we are called from content */ - checkEntityDecl = ! dtd->hasParamEntityRefs || dtd->standalone; - if (checkEntityDecl) { - if (! entity) - return XML_ERROR_UNDEFINED_ENTITY; - else if (! entity->is_internal) - return XML_ERROR_ENTITY_DECLARED_IN_PE; - } else if (! entity) { - /* Cannot report skipped entity here - see comments on - parser->m_skippedEntityHandler. - if (parser->m_skippedEntityHandler) - parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); - */ - /* Cannot call the default handler because this would be - out of sync with the call to the startElementHandler. - if ((pool == &parser->m_tempPool) && parser->m_defaultHandler) - reportDefault(parser, enc, ptr, next); - */ - break; - } - if (entity->open) { - if (enc == parser->m_encoding) { - /* It does not appear that this line can be executed. - * - * The "if (entity->open)" check catches recursive entity - * definitions. In order to be called with an open - * entity, it must have gone through this code before and - * been through the recursive call to - * appendAttributeValue() some lines below. That call - * sets the local encoding ("enc") to the parser's - * internal encoding (internal_utf8 or internal_utf16), - * which can never be the same as the principle encoding. - * It doesn't appear there is another code path that gets - * here with entity->open being TRUE. - * - * Since it is not certain that this logic is watertight, - * we keep the line and merely exclude it from coverage - * tests. - */ - parser->m_eventPtr = ptr; /* LCOV_EXCL_LINE */ - } - return XML_ERROR_RECURSIVE_ENTITY_REF; - } - if (entity->notation) { - if (enc == parser->m_encoding) - parser->m_eventPtr = ptr; - return XML_ERROR_BINARY_ENTITY_REF; - } - if (! entity->textPtr) { - if (enc == parser->m_encoding) - parser->m_eventPtr = ptr; - return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; - } else { - enum XML_Error result; - const XML_Char *textEnd = entity->textPtr + entity->textLen; - entity->open = XML_TRUE; - result = appendAttributeValue(parser, parser->m_internalEncoding, - isCdata, (char *)entity->textPtr, - (char *)textEnd, pool); - entity->open = XML_FALSE; - if (result) - return result; - } - } break; - default: - /* The only token returned by XmlAttributeValueTok() that does - * not have an explicit case here is XML_TOK_PARTIAL_CHAR. - * Getting that would require an entity name to contain an - * incomplete XML character (e.g. \xE2\x82); however previous - * tokenisers will have already recognised and rejected such - * names before XmlAttributeValueTok() gets a look-in. This - * default case should be retained as a safety net, but the code - * excluded from coverage tests. - * - * LCOV_EXCL_START - */ - if (enc == parser->m_encoding) - parser->m_eventPtr = ptr; - return XML_ERROR_UNEXPECTED_STATE; - /* LCOV_EXCL_STOP */ - } - ptr = next; - } - /* not reached */ -} - -static enum XML_Error -storeEntityValue(XML_Parser parser, const ENCODING *enc, - const char *entityTextPtr, const char *entityTextEnd) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - STRING_POOL *pool = &(dtd->entityValuePool); - enum XML_Error result = XML_ERROR_NONE; -#ifdef XML_DTD - int oldInEntityValue = parser->m_prologState.inEntityValue; - parser->m_prologState.inEntityValue = 1; -#endif /* XML_DTD */ - /* never return Null for the value argument in EntityDeclHandler, - since this would indicate an external entity; therefore we - have to make sure that entityValuePool.start is not null */ - if (! pool->blocks) { - if (! poolGrow(pool)) - return XML_ERROR_NO_MEMORY; - } - - for (;;) { - const char *next; - int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: -#ifdef XML_DTD - if (parser->m_isParamEntity || enc != parser->m_encoding) { - const XML_Char *name; - ENTITY *entity; - name = poolStoreString(&parser->m_tempPool, enc, - entityTextPtr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (! name) { - result = XML_ERROR_NO_MEMORY; - goto endEntityValue; - } - entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); - poolDiscard(&parser->m_tempPool); - if (! entity) { - /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ - /* cannot report skipped entity here - see comments on - parser->m_skippedEntityHandler - if (parser->m_skippedEntityHandler) - parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); - */ - dtd->keepProcessing = dtd->standalone; - goto endEntityValue; - } - if (entity->open) { - if (enc == parser->m_encoding) - parser->m_eventPtr = entityTextPtr; - result = XML_ERROR_RECURSIVE_ENTITY_REF; - goto endEntityValue; - } - if (entity->systemId) { - if (parser->m_externalEntityRefHandler) { - dtd->paramEntityRead = XML_FALSE; - entity->open = XML_TRUE; - if (! parser->m_externalEntityRefHandler( - parser->m_externalEntityRefHandlerArg, 0, entity->base, - entity->systemId, entity->publicId)) { - entity->open = XML_FALSE; - result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; - goto endEntityValue; - } - entity->open = XML_FALSE; - if (! dtd->paramEntityRead) - dtd->keepProcessing = dtd->standalone; - } else - dtd->keepProcessing = dtd->standalone; - } else { - entity->open = XML_TRUE; - result = storeEntityValue( - parser, parser->m_internalEncoding, (char *)entity->textPtr, - (char *)(entity->textPtr + entity->textLen)); - entity->open = XML_FALSE; - if (result) - goto endEntityValue; - } - break; - } -#endif /* XML_DTD */ - /* In the internal subset, PE references are not legal - within markup declarations, e.g entity values in this case. */ - parser->m_eventPtr = entityTextPtr; - result = XML_ERROR_PARAM_ENTITY_REF; - goto endEntityValue; - case XML_TOK_NONE: - result = XML_ERROR_NONE; - goto endEntityValue; - case XML_TOK_ENTITY_REF: - case XML_TOK_DATA_CHARS: - if (! poolAppend(pool, enc, entityTextPtr, next)) { - result = XML_ERROR_NO_MEMORY; - goto endEntityValue; - } - break; - case XML_TOK_TRAILING_CR: - next = entityTextPtr + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_DATA_NEWLINE: - if (pool->end == pool->ptr && ! poolGrow(pool)) { - result = XML_ERROR_NO_MEMORY; - goto endEntityValue; - } - *(pool->ptr)++ = 0xA; - break; - case XML_TOK_CHAR_REF: { - XML_Char buf[XML_ENCODE_MAX]; - int i; - int n = XmlCharRefNumber(enc, entityTextPtr); - if (n < 0) { - if (enc == parser->m_encoding) - parser->m_eventPtr = entityTextPtr; - result = XML_ERROR_BAD_CHAR_REF; - goto endEntityValue; - } - n = XmlEncode(n, (ICHAR *)buf); - /* The XmlEncode() functions can never return 0 here. That - * error return happens if the code point passed in is either - * negative or greater than or equal to 0x110000. The - * XmlCharRefNumber() functions will all return a number - * strictly less than 0x110000 or a negative value if an error - * occurred. The negative value is intercepted above, so - * XmlEncode() is never passed a value it might return an - * error for. - */ - for (i = 0; i < n; i++) { - if (pool->end == pool->ptr && ! poolGrow(pool)) { - result = XML_ERROR_NO_MEMORY; - goto endEntityValue; - } - *(pool->ptr)++ = buf[i]; - } - } break; - case XML_TOK_PARTIAL: - if (enc == parser->m_encoding) - parser->m_eventPtr = entityTextPtr; - result = XML_ERROR_INVALID_TOKEN; - goto endEntityValue; - case XML_TOK_INVALID: - if (enc == parser->m_encoding) - parser->m_eventPtr = next; - result = XML_ERROR_INVALID_TOKEN; - goto endEntityValue; - default: - /* This default case should be unnecessary -- all the tokens - * that XmlEntityValueTok() can return have their own explicit - * cases -- but should be retained for safety. We do however - * exclude it from the coverage statistics. - * - * LCOV_EXCL_START - */ - if (enc == parser->m_encoding) - parser->m_eventPtr = entityTextPtr; - result = XML_ERROR_UNEXPECTED_STATE; - goto endEntityValue; - /* LCOV_EXCL_STOP */ - } - entityTextPtr = next; - } -endEntityValue: -#ifdef XML_DTD - parser->m_prologState.inEntityValue = oldInEntityValue; -#endif /* XML_DTD */ - return result; -} - -static void FASTCALL -normalizeLines(XML_Char *s) { - XML_Char *p; - for (;; s++) { - if (*s == XML_T('\0')) - return; - if (*s == 0xD) - break; - } - p = s; - do { - if (*s == 0xD) { - *p++ = 0xA; - if (*++s == 0xA) - s++; - } else - *p++ = *s++; - } while (*s); - *p = XML_T('\0'); -} - -static int -reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end) { - const XML_Char *target; - XML_Char *data; - const char *tem; - if (! parser->m_processingInstructionHandler) { - if (parser->m_defaultHandler) - reportDefault(parser, enc, start, end); - return 1; - } - start += enc->minBytesPerChar * 2; - tem = start + XmlNameLength(enc, start); - target = poolStoreString(&parser->m_tempPool, enc, start, tem); - if (! target) - return 0; - poolFinish(&parser->m_tempPool); - data = poolStoreString(&parser->m_tempPool, enc, XmlSkipS(enc, tem), - end - enc->minBytesPerChar * 2); - if (! data) - return 0; - normalizeLines(data); - parser->m_processingInstructionHandler(parser->m_handlerArg, target, data); - poolClear(&parser->m_tempPool); - return 1; -} - -static int -reportComment(XML_Parser parser, const ENCODING *enc, const char *start, - const char *end) { - XML_Char *data; - if (! parser->m_commentHandler) { - if (parser->m_defaultHandler) - reportDefault(parser, enc, start, end); - return 1; - } - data = poolStoreString(&parser->m_tempPool, enc, - start + enc->minBytesPerChar * 4, - end - enc->minBytesPerChar * 3); - if (! data) - return 0; - normalizeLines(data); - parser->m_commentHandler(parser->m_handlerArg, data); - poolClear(&parser->m_tempPool); - return 1; -} - -static void -reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, - const char *end) { - if (MUST_CONVERT(enc, s)) { - enum XML_Convert_Result convert_res; - const char **eventPP; - const char **eventEndPP; - if (enc == parser->m_encoding) { - eventPP = &parser->m_eventPtr; - eventEndPP = &parser->m_eventEndPtr; - } else { - /* To get here, two things must be true; the parser must be - * using a character encoding that is not the same as the - * encoding passed in, and the encoding passed in must need - * conversion to the internal format (UTF-8 unless XML_UNICODE - * is defined). The only occasions on which the encoding passed - * in is not the same as the parser's encoding are when it is - * the internal encoding (e.g. a previously defined parameter - * entity, already converted to internal format). This by - * definition doesn't need conversion, so the whole branch never - * gets executed. - * - * For safety's sake we don't delete these lines and merely - * exclude them from coverage statistics. - * - * LCOV_EXCL_START - */ - eventPP = &(parser->m_openInternalEntities->internalEventPtr); - eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); - /* LCOV_EXCL_STOP */ - } - do { - ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; - convert_res - = XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); - *eventEndPP = s; - parser->m_defaultHandler(parser->m_handlerArg, parser->m_dataBuf, - (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); - *eventPP = s; - } while ((convert_res != XML_CONVERT_COMPLETED) - && (convert_res != XML_CONVERT_INPUT_INCOMPLETE)); - } else - parser->m_defaultHandler(parser->m_handlerArg, (XML_Char *)s, - (int)((XML_Char *)end - (XML_Char *)s)); -} - -static int -defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, - XML_Bool isId, const XML_Char *value, XML_Parser parser) { - DEFAULT_ATTRIBUTE *att; - if (value || isId) { - /* The handling of default attributes gets messed up if we have - a default which duplicates a non-default. */ - int i; - for (i = 0; i < type->nDefaultAtts; i++) - if (attId == type->defaultAtts[i].id) - return 1; - if (isId && ! type->idAtt && ! attId->xmlns) - type->idAtt = attId; - } - if (type->nDefaultAtts == type->allocDefaultAtts) { - if (type->allocDefaultAtts == 0) { - type->allocDefaultAtts = 8; - type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC( - parser, type->allocDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); - if (! type->defaultAtts) { - type->allocDefaultAtts = 0; - return 0; - } - } else { - DEFAULT_ATTRIBUTE *temp; - int count = type->allocDefaultAtts * 2; - temp = (DEFAULT_ATTRIBUTE *)REALLOC(parser, type->defaultAtts, - (count * sizeof(DEFAULT_ATTRIBUTE))); - if (temp == NULL) - return 0; - type->allocDefaultAtts = count; - type->defaultAtts = temp; - } - } - att = type->defaultAtts + type->nDefaultAtts; - att->id = attId; - att->value = value; - att->isCdata = isCdata; - if (! isCdata) - attId->maybeTokenized = XML_TRUE; - type->nDefaultAtts += 1; - return 1; -} - -static int -setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - const XML_Char *name; - for (name = elementType->name; *name; name++) { - if (*name == XML_T(ASCII_COLON)) { - PREFIX *prefix; - const XML_Char *s; - for (s = elementType->name; s != name; s++) { - if (! poolAppendChar(&dtd->pool, *s)) - return 0; - } - if (! poolAppendChar(&dtd->pool, XML_T('\0'))) - return 0; - prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), - sizeof(PREFIX)); - if (! prefix) - return 0; - if (prefix->name == poolStart(&dtd->pool)) - poolFinish(&dtd->pool); - else - poolDiscard(&dtd->pool); - elementType->prefix = prefix; - break; - } - } - return 1; -} - -static ATTRIBUTE_ID * -getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, - const char *end) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - ATTRIBUTE_ID *id; - const XML_Char *name; - if (! poolAppendChar(&dtd->pool, XML_T('\0'))) - return NULL; - name = poolStoreString(&dtd->pool, enc, start, end); - if (! name) - return NULL; - /* skip quotation mark - its storage will be re-used (like in name[-1]) */ - ++name; - id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, name, - sizeof(ATTRIBUTE_ID)); - if (! id) - return NULL; - if (id->name != name) - poolDiscard(&dtd->pool); - else { - poolFinish(&dtd->pool); - if (! parser->m_ns) - ; - else if (name[0] == XML_T(ASCII_x) && name[1] == XML_T(ASCII_m) - && name[2] == XML_T(ASCII_l) && name[3] == XML_T(ASCII_n) - && name[4] == XML_T(ASCII_s) - && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) { - if (name[5] == XML_T('\0')) - id->prefix = &dtd->defaultPrefix; - else - id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, name + 6, - sizeof(PREFIX)); - id->xmlns = XML_TRUE; - } else { - int i; - for (i = 0; name[i]; i++) { - /* attributes without prefix are *not* in the default namespace */ - if (name[i] == XML_T(ASCII_COLON)) { - int j; - for (j = 0; j < i; j++) { - if (! poolAppendChar(&dtd->pool, name[j])) - return NULL; - } - if (! poolAppendChar(&dtd->pool, XML_T('\0'))) - return NULL; - id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, - poolStart(&dtd->pool), sizeof(PREFIX)); - if (! id->prefix) - return NULL; - if (id->prefix->name == poolStart(&dtd->pool)) - poolFinish(&dtd->pool); - else - poolDiscard(&dtd->pool); - break; - } - } - } - } - return id; -} - -#define CONTEXT_SEP XML_T(ASCII_FF) - -static const XML_Char * -getContext(XML_Parser parser) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - HASH_TABLE_ITER iter; - XML_Bool needSep = XML_FALSE; - - if (dtd->defaultPrefix.binding) { - int i; - int len; - if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) - return NULL; - len = dtd->defaultPrefix.binding->uriLen; - if (parser->m_namespaceSeparator) - len--; - for (i = 0; i < len; i++) { - if (! poolAppendChar(&parser->m_tempPool, - dtd->defaultPrefix.binding->uri[i])) { - /* Because of memory caching, I don't believe this line can be - * executed. - * - * This is part of a loop copying the default prefix binding - * URI into the parser's temporary string pool. Previously, - * that URI was copied into the same string pool, with a - * terminating NUL character, as part of setContext(). When - * the pool was cleared, that leaves a block definitely big - * enough to hold the URI on the free block list of the pool. - * The URI copy in getContext() therefore cannot run out of - * memory. - * - * If the pool is used between the setContext() and - * getContext() calls, the worst it can do is leave a bigger - * block on the front of the free list. Given that this is - * all somewhat inobvious and program logic can be changed, we - * don't delete the line but we do exclude it from the test - * coverage statistics. - */ - return NULL; /* LCOV_EXCL_LINE */ - } - } - needSep = XML_TRUE; - } - - hashTableIterInit(&iter, &(dtd->prefixes)); - for (;;) { - int i; - int len; - const XML_Char *s; - PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); - if (! prefix) - break; - if (! prefix->binding) { - /* This test appears to be (justifiable) paranoia. There does - * not seem to be a way of injecting a prefix without a binding - * that doesn't get errored long before this function is called. - * The test should remain for safety's sake, so we instead - * exclude the following line from the coverage statistics. - */ - continue; /* LCOV_EXCL_LINE */ - } - if (needSep && ! poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) - return NULL; - for (s = prefix->name; *s; s++) - if (! poolAppendChar(&parser->m_tempPool, *s)) - return NULL; - if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) - return NULL; - len = prefix->binding->uriLen; - if (parser->m_namespaceSeparator) - len--; - for (i = 0; i < len; i++) - if (! poolAppendChar(&parser->m_tempPool, prefix->binding->uri[i])) - return NULL; - needSep = XML_TRUE; - } - - hashTableIterInit(&iter, &(dtd->generalEntities)); - for (;;) { - const XML_Char *s; - ENTITY *e = (ENTITY *)hashTableIterNext(&iter); - if (! e) - break; - if (! e->open) - continue; - if (needSep && ! poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) - return NULL; - for (s = e->name; *s; s++) - if (! poolAppendChar(&parser->m_tempPool, *s)) - return 0; - needSep = XML_TRUE; - } - - if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return NULL; - return parser->m_tempPool.start; -} - -static XML_Bool -setContext(XML_Parser parser, const XML_Char *context) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - const XML_Char *s = context; - - while (*context != XML_T('\0')) { - if (*s == CONTEXT_SEP || *s == XML_T('\0')) { - ENTITY *e; - if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return XML_FALSE; - e = (ENTITY *)lookup(parser, &dtd->generalEntities, - poolStart(&parser->m_tempPool), 0); - if (e) - e->open = XML_TRUE; - if (*s != XML_T('\0')) - s++; - context = s; - poolDiscard(&parser->m_tempPool); - } else if (*s == XML_T(ASCII_EQUALS)) { - PREFIX *prefix; - if (poolLength(&parser->m_tempPool) == 0) - prefix = &dtd->defaultPrefix; - else { - if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return XML_FALSE; - prefix - = (PREFIX *)lookup(parser, &dtd->prefixes, - poolStart(&parser->m_tempPool), sizeof(PREFIX)); - if (! prefix) - return XML_FALSE; - if (prefix->name == poolStart(&parser->m_tempPool)) { - prefix->name = poolCopyString(&dtd->pool, prefix->name); - if (! prefix->name) - return XML_FALSE; - } - poolDiscard(&parser->m_tempPool); - } - for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); - context++) - if (! poolAppendChar(&parser->m_tempPool, *context)) - return XML_FALSE; - if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) - return XML_FALSE; - if (addBinding(parser, prefix, NULL, poolStart(&parser->m_tempPool), - &parser->m_inheritedBindings) - != XML_ERROR_NONE) - return XML_FALSE; - poolDiscard(&parser->m_tempPool); - if (*context != XML_T('\0')) - ++context; - s = context; - } else { - if (! poolAppendChar(&parser->m_tempPool, *s)) - return XML_FALSE; - s++; - } - } - return XML_TRUE; -} - -static void FASTCALL -normalizePublicId(XML_Char *publicId) { - XML_Char *p = publicId; - XML_Char *s; - for (s = publicId; *s; s++) { - switch (*s) { - case 0x20: - case 0xD: - case 0xA: - if (p != publicId && p[-1] != 0x20) - *p++ = 0x20; - break; - default: - *p++ = *s; - } - } - if (p != publicId && p[-1] == 0x20) - --p; - *p = XML_T('\0'); -} - -static DTD * -dtdCreate(const XML_Memory_Handling_Suite *ms) { - DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD)); - if (p == NULL) - return p; - poolInit(&(p->pool), ms); - poolInit(&(p->entityValuePool), ms); - hashTableInit(&(p->generalEntities), ms); - hashTableInit(&(p->elementTypes), ms); - hashTableInit(&(p->attributeIds), ms); - hashTableInit(&(p->prefixes), ms); -#ifdef XML_DTD - p->paramEntityRead = XML_FALSE; - hashTableInit(&(p->paramEntities), ms); -#endif /* XML_DTD */ - p->defaultPrefix.name = NULL; - p->defaultPrefix.binding = NULL; - - p->in_eldecl = XML_FALSE; - p->scaffIndex = NULL; - p->scaffold = NULL; - p->scaffLevel = 0; - p->scaffSize = 0; - p->scaffCount = 0; - p->contentStringLen = 0; - - p->keepProcessing = XML_TRUE; - p->hasParamEntityRefs = XML_FALSE; - p->standalone = XML_FALSE; - return p; -} - -static void -dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) { - HASH_TABLE_ITER iter; - hashTableIterInit(&iter, &(p->elementTypes)); - for (;;) { - ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); - if (! e) - break; - if (e->allocDefaultAtts != 0) - ms->free_fcn(e->defaultAtts); - } - hashTableClear(&(p->generalEntities)); -#ifdef XML_DTD - p->paramEntityRead = XML_FALSE; - hashTableClear(&(p->paramEntities)); -#endif /* XML_DTD */ - hashTableClear(&(p->elementTypes)); - hashTableClear(&(p->attributeIds)); - hashTableClear(&(p->prefixes)); - poolClear(&(p->pool)); - poolClear(&(p->entityValuePool)); - p->defaultPrefix.name = NULL; - p->defaultPrefix.binding = NULL; - - p->in_eldecl = XML_FALSE; - - ms->free_fcn(p->scaffIndex); - p->scaffIndex = NULL; - ms->free_fcn(p->scaffold); - p->scaffold = NULL; - - p->scaffLevel = 0; - p->scaffSize = 0; - p->scaffCount = 0; - p->contentStringLen = 0; - - p->keepProcessing = XML_TRUE; - p->hasParamEntityRefs = XML_FALSE; - p->standalone = XML_FALSE; -} - -static void -dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) { - HASH_TABLE_ITER iter; - hashTableIterInit(&iter, &(p->elementTypes)); - for (;;) { - ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); - if (! e) - break; - if (e->allocDefaultAtts != 0) - ms->free_fcn(e->defaultAtts); - } - hashTableDestroy(&(p->generalEntities)); -#ifdef XML_DTD - hashTableDestroy(&(p->paramEntities)); -#endif /* XML_DTD */ - hashTableDestroy(&(p->elementTypes)); - hashTableDestroy(&(p->attributeIds)); - hashTableDestroy(&(p->prefixes)); - poolDestroy(&(p->pool)); - poolDestroy(&(p->entityValuePool)); - if (isDocEntity) { - ms->free_fcn(p->scaffIndex); - ms->free_fcn(p->scaffold); - } - ms->free_fcn(p); -} - -/* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise. - The new DTD has already been initialized. -*/ -static int -dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd, - const XML_Memory_Handling_Suite *ms) { - HASH_TABLE_ITER iter; - - /* Copy the prefix table. */ - - hashTableIterInit(&iter, &(oldDtd->prefixes)); - for (;;) { - const XML_Char *name; - const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); - if (! oldP) - break; - name = poolCopyString(&(newDtd->pool), oldP->name); - if (! name) - return 0; - if (! lookup(oldParser, &(newDtd->prefixes), name, sizeof(PREFIX))) - return 0; - } - - hashTableIterInit(&iter, &(oldDtd->attributeIds)); - - /* Copy the attribute id table. */ - - for (;;) { - ATTRIBUTE_ID *newA; - const XML_Char *name; - const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); - - if (! oldA) - break; - /* Remember to allocate the scratch byte before the name. */ - if (! poolAppendChar(&(newDtd->pool), XML_T('\0'))) - return 0; - name = poolCopyString(&(newDtd->pool), oldA->name); - if (! name) - return 0; - ++name; - newA = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), name, - sizeof(ATTRIBUTE_ID)); - if (! newA) - return 0; - newA->maybeTokenized = oldA->maybeTokenized; - if (oldA->prefix) { - newA->xmlns = oldA->xmlns; - if (oldA->prefix == &oldDtd->defaultPrefix) - newA->prefix = &newDtd->defaultPrefix; - else - newA->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), - oldA->prefix->name, 0); - } - } - - /* Copy the element type table. */ - - hashTableIterInit(&iter, &(oldDtd->elementTypes)); - - for (;;) { - int i; - ELEMENT_TYPE *newE; - const XML_Char *name; - const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); - if (! oldE) - break; - name = poolCopyString(&(newDtd->pool), oldE->name); - if (! name) - return 0; - newE = (ELEMENT_TYPE *)lookup(oldParser, &(newDtd->elementTypes), name, - sizeof(ELEMENT_TYPE)); - if (! newE) - return 0; - if (oldE->nDefaultAtts) { - newE->defaultAtts = (DEFAULT_ATTRIBUTE *)ms->malloc_fcn( - oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); - if (! newE->defaultAtts) { - return 0; - } - } - if (oldE->idAtt) - newE->idAtt = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), - oldE->idAtt->name, 0); - newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; - if (oldE->prefix) - newE->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), - oldE->prefix->name, 0); - for (i = 0; i < newE->nDefaultAtts; i++) { - newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup( - oldParser, &(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); - newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; - if (oldE->defaultAtts[i].value) { - newE->defaultAtts[i].value - = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); - if (! newE->defaultAtts[i].value) - return 0; - } else - newE->defaultAtts[i].value = NULL; - } - } - - /* Copy the entity tables. */ - if (! copyEntityTable(oldParser, &(newDtd->generalEntities), &(newDtd->pool), - &(oldDtd->generalEntities))) - return 0; - -#ifdef XML_DTD - if (! copyEntityTable(oldParser, &(newDtd->paramEntities), &(newDtd->pool), - &(oldDtd->paramEntities))) - return 0; - newDtd->paramEntityRead = oldDtd->paramEntityRead; -#endif /* XML_DTD */ - - newDtd->keepProcessing = oldDtd->keepProcessing; - newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; - newDtd->standalone = oldDtd->standalone; - - /* Don't want deep copying for scaffolding */ - newDtd->in_eldecl = oldDtd->in_eldecl; - newDtd->scaffold = oldDtd->scaffold; - newDtd->contentStringLen = oldDtd->contentStringLen; - newDtd->scaffSize = oldDtd->scaffSize; - newDtd->scaffLevel = oldDtd->scaffLevel; - newDtd->scaffIndex = oldDtd->scaffIndex; - - return 1; -} /* End dtdCopy */ - -static int -copyEntityTable(XML_Parser oldParser, HASH_TABLE *newTable, - STRING_POOL *newPool, const HASH_TABLE *oldTable) { - HASH_TABLE_ITER iter; - const XML_Char *cachedOldBase = NULL; - const XML_Char *cachedNewBase = NULL; - - hashTableIterInit(&iter, oldTable); - - for (;;) { - ENTITY *newE; - const XML_Char *name; - const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); - if (! oldE) - break; - name = poolCopyString(newPool, oldE->name); - if (! name) - return 0; - newE = (ENTITY *)lookup(oldParser, newTable, name, sizeof(ENTITY)); - if (! newE) - return 0; - if (oldE->systemId) { - const XML_Char *tem = poolCopyString(newPool, oldE->systemId); - if (! tem) - return 0; - newE->systemId = tem; - if (oldE->base) { - if (oldE->base == cachedOldBase) - newE->base = cachedNewBase; - else { - cachedOldBase = oldE->base; - tem = poolCopyString(newPool, cachedOldBase); - if (! tem) - return 0; - cachedNewBase = newE->base = tem; - } - } - if (oldE->publicId) { - tem = poolCopyString(newPool, oldE->publicId); - if (! tem) - return 0; - newE->publicId = tem; - } - } else { - const XML_Char *tem - = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); - if (! tem) - return 0; - newE->textPtr = tem; - newE->textLen = oldE->textLen; - } - if (oldE->notation) { - const XML_Char *tem = poolCopyString(newPool, oldE->notation); - if (! tem) - return 0; - newE->notation = tem; - } - newE->is_param = oldE->is_param; - newE->is_internal = oldE->is_internal; - } - return 1; -} - -#define INIT_POWER 6 - -static XML_Bool FASTCALL -keyeq(KEY s1, KEY s2) { - for (; *s1 == *s2; s1++, s2++) - if (*s1 == 0) - return XML_TRUE; - return XML_FALSE; -} - -static size_t -keylen(KEY s) { - size_t len = 0; - for (; *s; s++, len++) - ; - return len; -} - -static void -copy_salt_to_sipkey(XML_Parser parser, struct sipkey *key) { - key->k[0] = 0; - key->k[1] = get_hash_secret_salt(parser); -} - -static unsigned long FASTCALL -hash(XML_Parser parser, KEY s) { - struct siphash state; - struct sipkey key; - (void)sip24_valid; - copy_salt_to_sipkey(parser, &key); - sip24_init(&state, &key); - sip24_update(&state, s, keylen(s) * sizeof(XML_Char)); - return (unsigned long)sip24_final(&state); -} - -static NAMED * -lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { - size_t i; - if (table->size == 0) { - size_t tsize; - if (! createSize) - return NULL; - table->power = INIT_POWER; - /* table->size is a power of 2 */ - table->size = (size_t)1 << INIT_POWER; - tsize = table->size * sizeof(NAMED *); - table->v = (NAMED **)table->mem->malloc_fcn(tsize); - if (! table->v) { - table->size = 0; - return NULL; - } - memset(table->v, 0, tsize); - i = hash(parser, name) & ((unsigned long)table->size - 1); - } else { - unsigned long h = hash(parser, name); - unsigned long mask = (unsigned long)table->size - 1; - unsigned char step = 0; - i = h & mask; - while (table->v[i]) { - if (keyeq(name, table->v[i]->name)) - return table->v[i]; - if (! step) - step = PROBE_STEP(h, mask, table->power); - i < step ? (i += table->size - step) : (i -= step); - } - if (! createSize) - return NULL; - - /* check for overflow (table is half full) */ - if (table->used >> (table->power - 1)) { - unsigned char newPower = table->power + 1; - size_t newSize = (size_t)1 << newPower; - unsigned long newMask = (unsigned long)newSize - 1; - size_t tsize = newSize * sizeof(NAMED *); - NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize); - if (! newV) - return NULL; - memset(newV, 0, tsize); - for (i = 0; i < table->size; i++) - if (table->v[i]) { - unsigned long newHash = hash(parser, table->v[i]->name); - size_t j = newHash & newMask; - step = 0; - while (newV[j]) { - if (! step) - step = PROBE_STEP(newHash, newMask, newPower); - j < step ? (j += newSize - step) : (j -= step); - } - newV[j] = table->v[i]; - } - table->mem->free_fcn(table->v); - table->v = newV; - table->power = newPower; - table->size = newSize; - i = h & newMask; - step = 0; - while (table->v[i]) { - if (! step) - step = PROBE_STEP(h, newMask, newPower); - i < step ? (i += newSize - step) : (i -= step); - } - } - } - table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize); - if (! table->v[i]) - return NULL; - memset(table->v[i], 0, createSize); - table->v[i]->name = name; - (table->used)++; - return table->v[i]; -} - -static void FASTCALL -hashTableClear(HASH_TABLE *table) { - size_t i; - for (i = 0; i < table->size; i++) { - table->mem->free_fcn(table->v[i]); - table->v[i] = NULL; - } - table->used = 0; -} - -static void FASTCALL -hashTableDestroy(HASH_TABLE *table) { - size_t i; - for (i = 0; i < table->size; i++) - table->mem->free_fcn(table->v[i]); - table->mem->free_fcn(table->v); -} - -static void FASTCALL -hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) { - p->power = 0; - p->size = 0; - p->used = 0; - p->v = NULL; - p->mem = ms; -} - -static void FASTCALL -hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) { - iter->p = table->v; - iter->end = iter->p + table->size; -} - -static NAMED *FASTCALL -hashTableIterNext(HASH_TABLE_ITER *iter) { - while (iter->p != iter->end) { - NAMED *tem = *(iter->p)++; - if (tem) - return tem; - } - return NULL; -} - -static void FASTCALL -poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms) { - pool->blocks = NULL; - pool->freeBlocks = NULL; - pool->start = NULL; - pool->ptr = NULL; - pool->end = NULL; - pool->mem = ms; -} - -static void FASTCALL -poolClear(STRING_POOL *pool) { - if (! pool->freeBlocks) - pool->freeBlocks = pool->blocks; - else { - BLOCK *p = pool->blocks; - while (p) { - BLOCK *tem = p->next; - p->next = pool->freeBlocks; - pool->freeBlocks = p; - p = tem; - } - } - pool->blocks = NULL; - pool->start = NULL; - pool->ptr = NULL; - pool->end = NULL; -} - -static void FASTCALL -poolDestroy(STRING_POOL *pool) { - BLOCK *p = pool->blocks; - while (p) { - BLOCK *tem = p->next; - pool->mem->free_fcn(p); - p = tem; - } - p = pool->freeBlocks; - while (p) { - BLOCK *tem = p->next; - pool->mem->free_fcn(p); - p = tem; - } -} - -static XML_Char * -poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, - const char *end) { - if (! pool->ptr && ! poolGrow(pool)) - return NULL; - for (;;) { - const enum XML_Convert_Result convert_res = XmlConvert( - enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); - if ((convert_res == XML_CONVERT_COMPLETED) - || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) - break; - if (! poolGrow(pool)) - return NULL; - } - return pool->start; -} - -static const XML_Char *FASTCALL -poolCopyString(STRING_POOL *pool, const XML_Char *s) { - do { - if (! poolAppendChar(pool, *s)) - return NULL; - } while (*s++); - s = pool->start; - poolFinish(pool); - return s; -} - -static const XML_Char * -poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) { - if (! pool->ptr && ! poolGrow(pool)) { - /* The following line is unreachable given the current usage of - * poolCopyStringN(). Currently it is called from exactly one - * place to copy the text of a simple general entity. By that - * point, the name of the entity is already stored in the pool, so - * pool->ptr cannot be NULL. - * - * If poolCopyStringN() is used elsewhere as it well might be, - * this line may well become executable again. Regardless, this - * sort of check shouldn't be removed lightly, so we just exclude - * it from the coverage statistics. - */ - return NULL; /* LCOV_EXCL_LINE */ - } - for (; n > 0; --n, s++) { - if (! poolAppendChar(pool, *s)) - return NULL; - } - s = pool->start; - poolFinish(pool); - return s; -} - -static const XML_Char *FASTCALL -poolAppendString(STRING_POOL *pool, const XML_Char *s) { - while (*s) { - if (! poolAppendChar(pool, *s)) - return NULL; - s++; - } - return pool->start; -} - -static XML_Char * -poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, - const char *end) { - if (! poolAppend(pool, enc, ptr, end)) - return NULL; - if (pool->ptr == pool->end && ! poolGrow(pool)) - return NULL; - *(pool->ptr)++ = 0; - return pool->start; -} - -static size_t -poolBytesToAllocateFor(int blockSize) { - /* Unprotected math would be: - ** return offsetof(BLOCK, s) + blockSize * sizeof(XML_Char); - ** - ** Detect overflow, avoiding _signed_ overflow undefined behavior - ** For a + b * c we check b * c in isolation first, so that addition of a - ** on top has no chance of making us accept a small non-negative number - */ - const size_t stretch = sizeof(XML_Char); /* can be 4 bytes */ - - if (blockSize <= 0) - return 0; - - if (blockSize > (int)(INT_MAX / stretch)) - return 0; - - { - const int stretchedBlockSize = blockSize * (int)stretch; - const int bytesToAllocate - = (int)(offsetof(BLOCK, s) + (unsigned)stretchedBlockSize); - if (bytesToAllocate < 0) - return 0; - - return (size_t)bytesToAllocate; - } -} - -static XML_Bool FASTCALL -poolGrow(STRING_POOL *pool) { - if (pool->freeBlocks) { - if (pool->start == 0) { - pool->blocks = pool->freeBlocks; - pool->freeBlocks = pool->freeBlocks->next; - pool->blocks->next = NULL; - pool->start = pool->blocks->s; - pool->end = pool->start + pool->blocks->size; - pool->ptr = pool->start; - return XML_TRUE; - } - if (pool->end - pool->start < pool->freeBlocks->size) { - BLOCK *tem = pool->freeBlocks->next; - pool->freeBlocks->next = pool->blocks; - pool->blocks = pool->freeBlocks; - pool->freeBlocks = tem; - memcpy(pool->blocks->s, pool->start, - (pool->end - pool->start) * sizeof(XML_Char)); - pool->ptr = pool->blocks->s + (pool->ptr - pool->start); - pool->start = pool->blocks->s; - pool->end = pool->start + pool->blocks->size; - return XML_TRUE; - } - } - if (pool->blocks && pool->start == pool->blocks->s) { - BLOCK *temp; - int blockSize = (int)((unsigned)(pool->end - pool->start) * 2U); - size_t bytesToAllocate; - - /* NOTE: Needs to be calculated prior to calling `realloc` - to avoid dangling pointers: */ - const ptrdiff_t offsetInsideBlock = pool->ptr - pool->start; - - if (blockSize < 0) { - /* This condition traps a situation where either more than - * INT_MAX/2 bytes have already been allocated. This isn't - * readily testable, since it is unlikely that an average - * machine will have that much memory, so we exclude it from the - * coverage statistics. - */ - return XML_FALSE; /* LCOV_EXCL_LINE */ - } - - bytesToAllocate = poolBytesToAllocateFor(blockSize); - if (bytesToAllocate == 0) - return XML_FALSE; - - temp = (BLOCK *)pool->mem->realloc_fcn(pool->blocks, - (unsigned)bytesToAllocate); - if (temp == NULL) - return XML_FALSE; - pool->blocks = temp; - pool->blocks->size = blockSize; - pool->ptr = pool->blocks->s + offsetInsideBlock; - pool->start = pool->blocks->s; - pool->end = pool->start + blockSize; - } else { - BLOCK *tem; - int blockSize = (int)(pool->end - pool->start); - size_t bytesToAllocate; - - if (blockSize < 0) { - /* This condition traps a situation where either more than - * INT_MAX bytes have already been allocated (which is prevented - * by various pieces of program logic, not least this one, never - * mind the unlikelihood of actually having that much memory) or - * the pool control fields have been corrupted (which could - * conceivably happen in an extremely buggy user handler - * function). Either way it isn't readily testable, so we - * exclude it from the coverage statistics. - */ - return XML_FALSE; /* LCOV_EXCL_LINE */ - } - - if (blockSize < INIT_BLOCK_SIZE) - blockSize = INIT_BLOCK_SIZE; - else { - /* Detect overflow, avoiding _signed_ overflow undefined behavior */ - if ((int)((unsigned)blockSize * 2U) < 0) { - return XML_FALSE; - } - blockSize *= 2; - } - - bytesToAllocate = poolBytesToAllocateFor(blockSize); - if (bytesToAllocate == 0) - return XML_FALSE; - - tem = (BLOCK *)pool->mem->malloc_fcn(bytesToAllocate); - if (! tem) - return XML_FALSE; - tem->size = blockSize; - tem->next = pool->blocks; - pool->blocks = tem; - if (pool->ptr != pool->start) - memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); - pool->ptr = tem->s + (pool->ptr - pool->start); - pool->start = tem->s; - pool->end = tem->s + blockSize; - } - return XML_TRUE; -} - -static int FASTCALL -nextScaffoldPart(XML_Parser parser) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - CONTENT_SCAFFOLD *me; - int next; - - if (! dtd->scaffIndex) { - dtd->scaffIndex = (int *)MALLOC(parser, parser->m_groupSize * sizeof(int)); - if (! dtd->scaffIndex) - return -1; - dtd->scaffIndex[0] = 0; - } - - if (dtd->scaffCount >= dtd->scaffSize) { - CONTENT_SCAFFOLD *temp; - if (dtd->scaffold) { - temp = (CONTENT_SCAFFOLD *)REALLOC( - parser, dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); - if (temp == NULL) - return -1; - dtd->scaffSize *= 2; - } else { - temp = (CONTENT_SCAFFOLD *)MALLOC(parser, INIT_SCAFFOLD_ELEMENTS - * sizeof(CONTENT_SCAFFOLD)); - if (temp == NULL) - return -1; - dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; - } - dtd->scaffold = temp; - } - next = dtd->scaffCount++; - me = &dtd->scaffold[next]; - if (dtd->scaffLevel) { - CONTENT_SCAFFOLD *parent - = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]]; - if (parent->lastchild) { - dtd->scaffold[parent->lastchild].nextsib = next; - } - if (! parent->childcnt) - parent->firstchild = next; - parent->lastchild = next; - parent->childcnt++; - } - me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; - return next; -} - -static void -build_node(XML_Parser parser, int src_node, XML_Content *dest, - XML_Content **contpos, XML_Char **strpos) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - dest->type = dtd->scaffold[src_node].type; - dest->quant = dtd->scaffold[src_node].quant; - if (dest->type == XML_CTYPE_NAME) { - const XML_Char *src; - dest->name = *strpos; - src = dtd->scaffold[src_node].name; - for (;;) { - *(*strpos)++ = *src; - if (! *src) - break; - src++; - } - dest->numchildren = 0; - dest->children = NULL; - } else { - unsigned int i; - int cn; - dest->numchildren = dtd->scaffold[src_node].childcnt; - dest->children = *contpos; - *contpos += dest->numchildren; - for (i = 0, cn = dtd->scaffold[src_node].firstchild; i < dest->numchildren; - i++, cn = dtd->scaffold[cn].nextsib) { - build_node(parser, cn, &(dest->children[i]), contpos, strpos); - } - dest->name = NULL; - } -} - -static XML_Content * -build_model(XML_Parser parser) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - XML_Content *ret; - XML_Content *cpos; - XML_Char *str; - int allocsize = (dtd->scaffCount * sizeof(XML_Content) - + (dtd->contentStringLen * sizeof(XML_Char))); - - ret = (XML_Content *)MALLOC(parser, allocsize); - if (! ret) - return NULL; - - str = (XML_Char *)(&ret[dtd->scaffCount]); - cpos = &ret[1]; - - build_node(parser, 0, ret, &cpos, &str); - return ret; -} - -static ELEMENT_TYPE * -getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, - const char *end) { - DTD *const dtd = parser->m_dtd; /* save one level of indirection */ - const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); - ELEMENT_TYPE *ret; - - if (! name) - return NULL; - ret = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, - sizeof(ELEMENT_TYPE)); - if (! ret) - return NULL; - if (ret->name != name) - poolDiscard(&dtd->pool); - else { - poolFinish(&dtd->pool); - if (! setElementTypePrefix(parser, ret)) - return NULL; - } - return ret; -} - -static XML_Char * -copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite) { - int charsRequired = 0; - XML_Char *result; - - /* First determine how long the string is */ - while (s[charsRequired] != 0) { - charsRequired++; - } - /* Include the terminator */ - charsRequired++; - - /* Now allocate space for the copy */ - result = memsuite->malloc_fcn(charsRequired * sizeof(XML_Char)); - if (result == NULL) - return NULL; - /* Copy the original into place */ - memcpy(result, s, charsRequired * sizeof(XML_Char)); - return result; -} diff --git a/internal/expat/xmlrole.c b/internal/expat/xmlrole.c deleted file mode 100644 index 3b676a4..0000000 --- a/internal/expat/xmlrole.c +++ /dev/null @@ -1,1249 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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 - -#ifdef _WIN32 -# include "winconfig.h" -#else -# ifdef HAVE_EXPAT_CONFIG_H -# include -# endif -#endif /* ndef _WIN32 */ - -#include "expat_external.h" -#include "internal.h" -#include "xmlrole.h" -#include "ascii.h" - -/* Doesn't check: - - that ,| are not mixed in a model group - content of literals - -*/ - -static const char KW_ANY[] = {ASCII_A, ASCII_N, ASCII_Y, '\0'}; -static const char KW_ATTLIST[] - = {ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0'}; -static const char KW_CDATA[] - = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; -static const char KW_DOCTYPE[] - = {ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0'}; -static const char KW_ELEMENT[] - = {ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0'}; -static const char KW_EMPTY[] - = {ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0'}; -static const char KW_ENTITIES[] = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, - ASCII_I, ASCII_E, ASCII_S, '\0'}; -static const char KW_ENTITY[] - = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'}; -static const char KW_FIXED[] - = {ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0'}; -static const char KW_ID[] = {ASCII_I, ASCII_D, '\0'}; -static const char KW_IDREF[] - = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'}; -static const char KW_IDREFS[] - = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'}; -#ifdef XML_DTD -static const char KW_IGNORE[] - = {ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0'}; -#endif -static const char KW_IMPLIED[] - = {ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0'}; -#ifdef XML_DTD -static const char KW_INCLUDE[] - = {ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0'}; -#endif -static const char KW_NDATA[] - = {ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; -static const char KW_NMTOKEN[] - = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'}; -static const char KW_NMTOKENS[] = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, - ASCII_E, ASCII_N, ASCII_S, '\0'}; -static const char KW_NOTATION[] = {ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, - ASCII_I, ASCII_O, ASCII_N, '\0'}; -static const char KW_PCDATA[] - = {ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; -static const char KW_PUBLIC[] - = {ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0'}; -static const char KW_REQUIRED[] = {ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, - ASCII_R, ASCII_E, ASCII_D, '\0'}; -static const char KW_SYSTEM[] - = {ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0'}; - -#ifndef MIN_BYTES_PER_CHAR -# define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) -#endif - -#ifdef XML_DTD -# define setTopLevel(state) \ - ((state)->handler \ - = ((state)->documentEntity ? internalSubset : externalSubset1)) -#else /* not XML_DTD */ -# define setTopLevel(state) ((state)->handler = internalSubset) -#endif /* not XML_DTD */ - -typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, int tok, - const char *ptr, const char *end, - const ENCODING *enc); - -static PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2, - doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2, - entity3, entity4, entity5, entity6, entity7, entity8, entity9, entity10, - notation0, notation1, notation2, notation3, notation4, attlist0, attlist1, - attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8, - attlist9, element0, element1, element2, element3, element4, element5, - element6, element7, -#ifdef XML_DTD - externalSubset0, externalSubset1, condSect0, condSect1, condSect2, -#endif /* XML_DTD */ - declClose, error; - -static int FASTCALL common(PROLOG_STATE *state, int tok); - -static int PTRCALL -prolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - state->handler = prolog1; - return XML_ROLE_NONE; - case XML_TOK_XML_DECL: - state->handler = prolog1; - return XML_ROLE_XML_DECL; - case XML_TOK_PI: - state->handler = prolog1; - return XML_ROLE_PI; - case XML_TOK_COMMENT: - state->handler = prolog1; - return XML_ROLE_COMMENT; - case XML_TOK_BOM: - return XML_ROLE_NONE; - case XML_TOK_DECL_OPEN: - if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_DOCTYPE)) - break; - state->handler = doctype0; - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static int PTRCALL -prolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_PI: - return XML_ROLE_PI; - case XML_TOK_COMMENT: - return XML_ROLE_COMMENT; - case XML_TOK_BOM: - /* This case can never arise. To reach this role function, the - * parse must have passed through prolog0 and therefore have had - * some form of input, even if only a space. At that point, a - * byte order mark is no longer a valid character (though - * technically it should be interpreted as a non-breaking space), - * so will be rejected by the tokenizing stages. - */ - return XML_ROLE_NONE; /* LCOV_EXCL_LINE */ - case XML_TOK_DECL_OPEN: - if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_DOCTYPE)) - break; - state->handler = doctype0; - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static int PTRCALL -prolog2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_PI: - return XML_ROLE_PI; - case XML_TOK_COMMENT: - return XML_ROLE_COMMENT; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static int PTRCALL -doctype0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = doctype1; - return XML_ROLE_DOCTYPE_NAME; - } - return common(state, tok); -} - -static int PTRCALL -doctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = internalSubset; - return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = doctype3; - return XML_ROLE_DOCTYPE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = doctype2; - return XML_ROLE_DOCTYPE_NONE; - } - break; - } - return common(state, tok); -} - -static int PTRCALL -doctype2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_LITERAL: - state->handler = doctype3; - return XML_ROLE_DOCTYPE_PUBLIC_ID; - } - return common(state, tok); -} - -static int PTRCALL -doctype3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_LITERAL: - state->handler = doctype4; - return XML_ROLE_DOCTYPE_SYSTEM_ID; - } - return common(state, tok); -} - -static int PTRCALL -doctype4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = internalSubset; - return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - } - return common(state, tok); -} - -static int PTRCALL -doctype5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - } - return common(state, tok); -} - -static int PTRCALL -internalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_OPEN: - if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_ENTITY)) { - state->handler = entity0; - return XML_ROLE_ENTITY_NONE; - } - if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_ATTLIST)) { - state->handler = attlist0; - return XML_ROLE_ATTLIST_NONE; - } - if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_ELEMENT)) { - state->handler = element0; - return XML_ROLE_ELEMENT_NONE; - } - if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, - KW_NOTATION)) { - state->handler = notation0; - return XML_ROLE_NOTATION_NONE; - } - break; - case XML_TOK_PI: - return XML_ROLE_PI; - case XML_TOK_COMMENT: - return XML_ROLE_COMMENT; - case XML_TOK_PARAM_ENTITY_REF: - return XML_ROLE_PARAM_ENTITY_REF; - case XML_TOK_CLOSE_BRACKET: - state->handler = doctype5; - return XML_ROLE_DOCTYPE_NONE; - case XML_TOK_NONE: - return XML_ROLE_NONE; - } - return common(state, tok); -} - -#ifdef XML_DTD - -static int PTRCALL -externalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - state->handler = externalSubset1; - if (tok == XML_TOK_XML_DECL) - return XML_ROLE_TEXT_DECL; - return externalSubset1(state, tok, ptr, end, enc); -} - -static int PTRCALL -externalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_COND_SECT_OPEN: - state->handler = condSect0; - return XML_ROLE_NONE; - case XML_TOK_COND_SECT_CLOSE: - if (state->includeLevel == 0) - break; - state->includeLevel -= 1; - return XML_ROLE_NONE; - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_BRACKET: - break; - case XML_TOK_NONE: - if (state->includeLevel) - break; - return XML_ROLE_NONE; - default: - return internalSubset(state, tok, ptr, end, enc); - } - return common(state, tok); -} - -#endif /* XML_DTD */ - -static int PTRCALL -entity0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_PERCENT: - state->handler = entity1; - return XML_ROLE_ENTITY_NONE; - case XML_TOK_NAME: - state->handler = entity2; - return XML_ROLE_GENERAL_ENTITY_NAME; - } - return common(state, tok); -} - -static int PTRCALL -entity1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_NAME: - state->handler = entity7; - return XML_ROLE_PARAM_ENTITY_NAME; - } - return common(state, tok); -} - -static int PTRCALL -entity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = entity4; - return XML_ROLE_ENTITY_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = entity3; - return XML_ROLE_ENTITY_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = declClose; - state->role_none = XML_ROLE_ENTITY_NONE; - return XML_ROLE_ENTITY_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -entity3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_LITERAL: - state->handler = entity4; - return XML_ROLE_ENTITY_PUBLIC_ID; - } - return common(state, tok); -} - -static int PTRCALL -entity4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_LITERAL: - state->handler = entity5; - return XML_ROLE_ENTITY_SYSTEM_ID; - } - return common(state, tok); -} - -static int PTRCALL -entity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_ENTITY_COMPLETE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { - state->handler = entity6; - return XML_ROLE_ENTITY_NONE; - } - break; - } - return common(state, tok); -} - -static int PTRCALL -entity6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_NAME: - state->handler = declClose; - state->role_none = XML_ROLE_ENTITY_NONE; - return XML_ROLE_ENTITY_NOTATION_NAME; - } - return common(state, tok); -} - -static int PTRCALL -entity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = entity9; - return XML_ROLE_ENTITY_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = entity8; - return XML_ROLE_ENTITY_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = declClose; - state->role_none = XML_ROLE_ENTITY_NONE; - return XML_ROLE_ENTITY_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -entity8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_LITERAL: - state->handler = entity9; - return XML_ROLE_ENTITY_PUBLIC_ID; - } - return common(state, tok); -} - -static int PTRCALL -entity9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_LITERAL: - state->handler = entity10; - return XML_ROLE_ENTITY_SYSTEM_ID; - } - return common(state, tok); -} - -static int PTRCALL -entity10(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ENTITY_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_ENTITY_COMPLETE; - } - return common(state, tok); -} - -static int PTRCALL -notation0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NOTATION_NONE; - case XML_TOK_NAME: - state->handler = notation1; - return XML_ROLE_NOTATION_NAME; - } - return common(state, tok); -} - -static int PTRCALL -notation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NOTATION_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = notation3; - return XML_ROLE_NOTATION_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = notation2; - return XML_ROLE_NOTATION_NONE; - } - break; - } - return common(state, tok); -} - -static int PTRCALL -notation2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NOTATION_NONE; - case XML_TOK_LITERAL: - state->handler = notation4; - return XML_ROLE_NOTATION_PUBLIC_ID; - } - return common(state, tok); -} - -static int PTRCALL -notation3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NOTATION_NONE; - case XML_TOK_LITERAL: - state->handler = declClose; - state->role_none = XML_ROLE_NOTATION_NONE; - return XML_ROLE_NOTATION_SYSTEM_ID; - } - return common(state, tok); -} - -static int PTRCALL -notation4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NOTATION_NONE; - case XML_TOK_LITERAL: - state->handler = declClose; - state->role_none = XML_ROLE_NOTATION_NONE; - return XML_ROLE_NOTATION_SYSTEM_ID; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_NOTATION_NO_SYSTEM_ID; - } - return common(state, tok); -} - -static int PTRCALL -attlist0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist1; - return XML_ROLE_ATTLIST_ELEMENT_NAME; - } - return common(state, tok); -} - -static int PTRCALL -attlist1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist2; - return XML_ROLE_ATTRIBUTE_NAME; - } - return common(state, tok); -} - -static int PTRCALL -attlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_NAME: { - static const char *const types[] = { - KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS, - KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS, - }; - int i; - for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i++) - if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { - state->handler = attlist8; - return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; - } - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { - state->handler = attlist5; - return XML_ROLE_ATTLIST_NONE; - } - break; - case XML_TOK_OPEN_PAREN: - state->handler = attlist3; - return XML_ROLE_ATTLIST_NONE; - } - return common(state, tok); -} - -static int PTRCALL -attlist3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_NMTOKEN: - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist4; - return XML_ROLE_ATTRIBUTE_ENUM_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -attlist4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = attlist8; - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_OR: - state->handler = attlist3; - return XML_ROLE_ATTLIST_NONE; - } - return common(state, tok); -} - -static int PTRCALL -attlist5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_OPEN_PAREN: - state->handler = attlist6; - return XML_ROLE_ATTLIST_NONE; - } - return common(state, tok); -} - -static int PTRCALL -attlist6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_NAME: - state->handler = attlist7; - return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -attlist7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = attlist8; - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_OR: - state->handler = attlist6; - return XML_ROLE_ATTLIST_NONE; - } - return common(state, tok); -} - -/* default value */ -static int PTRCALL -attlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_POUND_NAME: - if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, - KW_IMPLIED)) { - state->handler = attlist1; - return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; - } - if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, - KW_REQUIRED)) { - state->handler = attlist1; - return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; - } - if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, - KW_FIXED)) { - state->handler = attlist9; - return XML_ROLE_ATTLIST_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = attlist1; - return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -attlist9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ATTLIST_NONE; - case XML_TOK_LITERAL: - state->handler = attlist1; - return XML_ROLE_FIXED_ATTRIBUTE_VALUE; - } - return common(state, tok); -} - -static int PTRCALL -element0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element1; - return XML_ROLE_ELEMENT_NAME; - } - return common(state, tok); -} - -static int PTRCALL -element1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - return XML_ROLE_CONTENT_EMPTY; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - return XML_ROLE_CONTENT_ANY; - } - break; - case XML_TOK_OPEN_PAREN: - state->handler = element2; - state->level = 1; - return XML_ROLE_GROUP_OPEN; - } - return common(state, tok); -} - -static int PTRCALL -element2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_POUND_NAME: - if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, - KW_PCDATA)) { - state->handler = element3; - return XML_ROLE_CONTENT_PCDATA; - } - break; - case XML_TOK_OPEN_PAREN: - state->level = 2; - state->handler = element6; - return XML_ROLE_GROUP_OPEN; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT; - case XML_TOK_NAME_QUESTION: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_OPT; - case XML_TOK_NAME_ASTERISK: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_REP; - case XML_TOK_NAME_PLUS: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_PLUS; - } - return common(state, tok); -} - -static int PTRCALL -element3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - return XML_ROLE_GROUP_CLOSE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_OR: - state->handler = element4; - return XML_ROLE_ELEMENT_NONE; - } - return common(state, tok); -} - -static int PTRCALL -element4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element5; - return XML_ROLE_CONTENT_ELEMENT; - } - return common(state, tok); -} - -static int PTRCALL -element5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_OR: - state->handler = element4; - return XML_ROLE_ELEMENT_NONE; - } - return common(state, tok); -} - -static int PTRCALL -element6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_OPEN_PAREN: - state->level += 1; - return XML_ROLE_GROUP_OPEN; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT; - case XML_TOK_NAME_QUESTION: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_OPT; - case XML_TOK_NAME_ASTERISK: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_REP; - case XML_TOK_NAME_PLUS: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_PLUS; - } - return common(state, tok); -} - -static int PTRCALL -element7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_ELEMENT_NONE; - case XML_TOK_CLOSE_PAREN: - state->level -= 1; - if (state->level == 0) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - } - return XML_ROLE_GROUP_CLOSE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->level -= 1; - if (state->level == 0) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - } - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_CLOSE_PAREN_QUESTION: - state->level -= 1; - if (state->level == 0) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - } - return XML_ROLE_GROUP_CLOSE_OPT; - case XML_TOK_CLOSE_PAREN_PLUS: - state->level -= 1; - if (state->level == 0) { - state->handler = declClose; - state->role_none = XML_ROLE_ELEMENT_NONE; - } - return XML_ROLE_GROUP_CLOSE_PLUS; - case XML_TOK_COMMA: - state->handler = element6; - return XML_ROLE_GROUP_SEQUENCE; - case XML_TOK_OR: - state->handler = element6; - return XML_ROLE_GROUP_CHOICE; - } - return common(state, tok); -} - -#ifdef XML_DTD - -static int PTRCALL -condSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { - state->handler = condSect1; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { - state->handler = condSect2; - return XML_ROLE_NONE; - } - break; - } - return common(state, tok); -} - -static int PTRCALL -condSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = externalSubset1; - state->includeLevel += 1; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static int PTRCALL -condSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = externalSubset1; - return XML_ROLE_IGNORE_SECT; - } - return common(state, tok); -} - -#endif /* XML_DTD */ - -static int PTRCALL -declClose(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - switch (tok) { - case XML_TOK_PROLOG_S: - return state->role_none; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return state->role_none; - } - return common(state, tok); -} - -/* This function will only be invoked if the internal logic of the - * parser has broken down. It is used in two cases: - * - * 1: When the XML prolog has been finished. At this point the - * processor (the parser level above these role handlers) should - * switch from prologProcessor to contentProcessor and reinitialise - * the handler function. - * - * 2: When an error has been detected (via common() below). At this - * point again the processor should be switched to errorProcessor, - * which will never call a handler. - * - * The result of this is that error() can only be called if the - * processor switch failed to happen, which is an internal error and - * therefore we shouldn't be able to provoke it simply by using the - * library. It is a necessary backstop, however, so we merely exclude - * it from the coverage statistics. - * - * LCOV_EXCL_START - */ -static int PTRCALL -error(PROLOG_STATE *state, int tok, const char *ptr, const char *end, - const ENCODING *enc) { - UNUSED_P(state); - UNUSED_P(tok); - UNUSED_P(ptr); - UNUSED_P(end); - UNUSED_P(enc); - return XML_ROLE_NONE; -} -/* LCOV_EXCL_STOP */ - -static int FASTCALL -common(PROLOG_STATE *state, int tok) { -#ifdef XML_DTD - if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) - return XML_ROLE_INNER_PARAM_ENTITY_REF; -#else - UNUSED_P(tok); -#endif - state->handler = error; - return XML_ROLE_ERROR; -} - -void -XmlPrologStateInit(PROLOG_STATE *state) { - state->handler = prolog0; -#ifdef XML_DTD - state->documentEntity = 1; - state->includeLevel = 0; - state->inEntityValue = 0; -#endif /* XML_DTD */ -} - -#ifdef XML_DTD - -void -XmlPrologStateInitExternalEntity(PROLOG_STATE *state) { - state->handler = externalSubset0; - state->documentEntity = 0; - state->includeLevel = 0; -} - -#endif /* XML_DTD */ diff --git a/internal/expat/xmlrole.h b/internal/expat/xmlrole.h deleted file mode 100644 index 036aba6..0000000 --- a/internal/expat/xmlrole.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifndef XmlRole_INCLUDED -#define XmlRole_INCLUDED 1 - -#ifdef __VMS -/* 0 1 2 3 0 1 2 3 - 1234567890123456789012345678901 1234567890123456789012345678901 */ -# define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt -#endif - -#include "xmltok.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - XML_ROLE_ERROR = -1, - XML_ROLE_NONE = 0, - XML_ROLE_XML_DECL, - XML_ROLE_INSTANCE_START, - XML_ROLE_DOCTYPE_NONE, - XML_ROLE_DOCTYPE_NAME, - XML_ROLE_DOCTYPE_SYSTEM_ID, - XML_ROLE_DOCTYPE_PUBLIC_ID, - XML_ROLE_DOCTYPE_INTERNAL_SUBSET, - XML_ROLE_DOCTYPE_CLOSE, - XML_ROLE_GENERAL_ENTITY_NAME, - XML_ROLE_PARAM_ENTITY_NAME, - XML_ROLE_ENTITY_NONE, - XML_ROLE_ENTITY_VALUE, - XML_ROLE_ENTITY_SYSTEM_ID, - XML_ROLE_ENTITY_PUBLIC_ID, - XML_ROLE_ENTITY_COMPLETE, - XML_ROLE_ENTITY_NOTATION_NAME, - XML_ROLE_NOTATION_NONE, - XML_ROLE_NOTATION_NAME, - XML_ROLE_NOTATION_SYSTEM_ID, - XML_ROLE_NOTATION_NO_SYSTEM_ID, - XML_ROLE_NOTATION_PUBLIC_ID, - XML_ROLE_ATTRIBUTE_NAME, - XML_ROLE_ATTRIBUTE_TYPE_CDATA, - XML_ROLE_ATTRIBUTE_TYPE_ID, - XML_ROLE_ATTRIBUTE_TYPE_IDREF, - XML_ROLE_ATTRIBUTE_TYPE_IDREFS, - XML_ROLE_ATTRIBUTE_TYPE_ENTITY, - XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, - XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, - XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, - XML_ROLE_ATTRIBUTE_ENUM_VALUE, - XML_ROLE_ATTRIBUTE_NOTATION_VALUE, - XML_ROLE_ATTLIST_NONE, - XML_ROLE_ATTLIST_ELEMENT_NAME, - XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, - XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, - XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, - XML_ROLE_FIXED_ATTRIBUTE_VALUE, - XML_ROLE_ELEMENT_NONE, - XML_ROLE_ELEMENT_NAME, - XML_ROLE_CONTENT_ANY, - XML_ROLE_CONTENT_EMPTY, - XML_ROLE_CONTENT_PCDATA, - XML_ROLE_GROUP_OPEN, - XML_ROLE_GROUP_CLOSE, - XML_ROLE_GROUP_CLOSE_REP, - XML_ROLE_GROUP_CLOSE_OPT, - XML_ROLE_GROUP_CLOSE_PLUS, - XML_ROLE_GROUP_CHOICE, - XML_ROLE_GROUP_SEQUENCE, - XML_ROLE_CONTENT_ELEMENT, - XML_ROLE_CONTENT_ELEMENT_REP, - XML_ROLE_CONTENT_ELEMENT_OPT, - XML_ROLE_CONTENT_ELEMENT_PLUS, - XML_ROLE_PI, - XML_ROLE_COMMENT, -#ifdef XML_DTD - XML_ROLE_TEXT_DECL, - XML_ROLE_IGNORE_SECT, - XML_ROLE_INNER_PARAM_ENTITY_REF, -#endif /* XML_DTD */ - XML_ROLE_PARAM_ENTITY_REF -}; - -typedef struct prolog_state { - int(PTRCALL *handler)(struct prolog_state *state, int tok, const char *ptr, - const char *end, const ENCODING *enc); - unsigned level; - int role_none; -#ifdef XML_DTD - unsigned includeLevel; - int documentEntity; - int inEntityValue; -#endif /* XML_DTD */ -} PROLOG_STATE; - -void XmlPrologStateInit(PROLOG_STATE *); -#ifdef XML_DTD -void XmlPrologStateInitExternalEntity(PROLOG_STATE *); -#endif /* XML_DTD */ - -#define XmlTokenRole(state, tok, ptr, end, enc) \ - (((state)->handler)(state, tok, ptr, end, enc)) - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlRole_INCLUDED */ diff --git a/internal/expat/xmltok.c b/internal/expat/xmltok.c deleted file mode 100644 index c4f9897..0000000 --- a/internal/expat/xmltok.c +++ /dev/null @@ -1,1672 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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 -#include /* memcpy */ - -#if defined(_MSC_VER) && (_MSC_VER <= 1700) -/* for vs2012/11.0/1700 and earlier Visual Studio compilers */ -# define bool int -# define false 0 -# define true 1 -#else -# include -#endif - -#ifdef _WIN32 -# include "winconfig.h" -#else -# ifdef HAVE_EXPAT_CONFIG_H -# include -# endif -#endif /* ndef _WIN32 */ - -#include "expat_external.h" -#include "internal.h" -#include "xmltok.h" -#include "nametab.h" - -#ifdef XML_DTD -# define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) -#else -# define IGNORE_SECTION_TOK_VTABLE /* as nothing */ -#endif - -#define VTABLE1 \ - {PREFIX(prologTok), PREFIX(contentTok), \ - PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE}, \ - {PREFIX(attributeValueTok), PREFIX(entityValueTok)}, \ - PREFIX(nameMatchesAscii), PREFIX(nameLength), PREFIX(skipS), \ - PREFIX(getAtts), PREFIX(charRefNumber), PREFIX(predefinedEntityName), \ - PREFIX(updatePosition), PREFIX(isPublicId) - -#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) - -#define UCS2_GET_NAMING(pages, hi, lo) \ - (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo)&0x1F))) - -/* A 2 byte UTF-8 representation splits the characters 11 bits between - the bottom 5 and 6 bits of the bytes. We need 8 bits to index into - pages, 3 bits to add to that index and 5 bits to generate the mask. -*/ -#define UTF8_GET_NAMING2(pages, byte) \ - (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ - + ((((byte)[0]) & 3) << 1) + ((((byte)[1]) >> 5) & 1)] \ - & (1u << (((byte)[1]) & 0x1F))) - -/* A 3 byte UTF-8 representation splits the characters 16 bits between - the bottom 4, 6 and 6 bits of the bytes. We need 8 bits to index - into pages, 3 bits to add to that index and 5 bits to generate the - mask. -*/ -#define UTF8_GET_NAMING3(pages, byte) \ - (namingBitmap \ - [((pages)[((((byte)[0]) & 0xF) << 4) + ((((byte)[1]) >> 2) & 0xF)] \ - << 3) \ - + ((((byte)[1]) & 3) << 1) + ((((byte)[2]) >> 5) & 1)] \ - & (1u << (((byte)[2]) & 0x1F))) - -#define UTF8_GET_NAMING(pages, p, n) \ - ((n) == 2 \ - ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ - : ((n) == 3 ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) : 0)) - -/* Detection of invalid UTF-8 sequences is based on Table 3.1B - of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/ - with the additional restriction of not allowing the Unicode - code points 0xFFFF and 0xFFFE (sequences EF,BF,BF and EF,BF,BE). - Implementation details: - (A & 0x80) == 0 means A < 0x80 - and - (A & 0xC0) == 0xC0 means A > 0xBF -*/ - -#define UTF8_INVALID2(p) \ - ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0) - -#define UTF8_INVALID3(p) \ - (((p)[2] & 0x80) == 0 \ - || ((*p) == 0xEF && (p)[1] == 0xBF ? (p)[2] > 0xBD \ - : ((p)[2] & 0xC0) == 0xC0) \ - || ((*p) == 0xE0 \ - ? (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0 \ - : ((p)[1] & 0x80) == 0 \ - || ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0))) - -#define UTF8_INVALID4(p) \ - (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 || ((p)[2] & 0x80) == 0 \ - || ((p)[2] & 0xC0) == 0xC0 \ - || ((*p) == 0xF0 \ - ? (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0 \ - : ((p)[1] & 0x80) == 0 \ - || ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0))) - -static int PTRFASTCALL -isNever(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - UNUSED_P(p); - return 0; -} - -static int PTRFASTCALL -utf8_isName2(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); -} - -static int PTRFASTCALL -utf8_isName3(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); -} - -#define utf8_isName4 isNever - -static int PTRFASTCALL -utf8_isNmstrt2(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); -} - -static int PTRFASTCALL -utf8_isNmstrt3(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); -} - -#define utf8_isNmstrt4 isNever - -static int PTRFASTCALL -utf8_isInvalid2(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_INVALID2((const unsigned char *)p); -} - -static int PTRFASTCALL -utf8_isInvalid3(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_INVALID3((const unsigned char *)p); -} - -static int PTRFASTCALL -utf8_isInvalid4(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return UTF8_INVALID4((const unsigned char *)p); -} - -struct normal_encoding { - ENCODING enc; - unsigned char type[256]; -#ifdef XML_MIN_SIZE - int(PTRFASTCALL *byteType)(const ENCODING *, const char *); - int(PTRFASTCALL *isNameMin)(const ENCODING *, const char *); - int(PTRFASTCALL *isNmstrtMin)(const ENCODING *, const char *); - int(PTRFASTCALL *byteToAscii)(const ENCODING *, const char *); - int(PTRCALL *charMatches)(const ENCODING *, const char *, int); -#endif /* XML_MIN_SIZE */ - int(PTRFASTCALL *isName2)(const ENCODING *, const char *); - int(PTRFASTCALL *isName3)(const ENCODING *, const char *); - int(PTRFASTCALL *isName4)(const ENCODING *, const char *); - int(PTRFASTCALL *isNmstrt2)(const ENCODING *, const char *); - int(PTRFASTCALL *isNmstrt3)(const ENCODING *, const char *); - int(PTRFASTCALL *isNmstrt4)(const ENCODING *, const char *); - int(PTRFASTCALL *isInvalid2)(const ENCODING *, const char *); - int(PTRFASTCALL *isInvalid3)(const ENCODING *, const char *); - int(PTRFASTCALL *isInvalid4)(const ENCODING *, const char *); -}; - -#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc)) - -#ifdef XML_MIN_SIZE - -# define STANDARD_VTABLE(E) \ - E##byteType, E##isNameMin, E##isNmstrtMin, E##byteToAscii, E##charMatches, - -#else - -# define STANDARD_VTABLE(E) /* as nothing */ - -#endif - -#define NORMAL_VTABLE(E) \ - E##isName2, E##isName3, E##isName4, E##isNmstrt2, E##isNmstrt3, \ - E##isNmstrt4, E##isInvalid2, E##isInvalid3, E##isInvalid4 - -#define NULL_VTABLE \ - /* isName2 */ NULL, /* isName3 */ NULL, /* isName4 */ NULL, \ - /* isNmstrt2 */ NULL, /* isNmstrt3 */ NULL, /* isNmstrt4 */ NULL, \ - /* isInvalid2 */ NULL, /* isInvalid3 */ NULL, /* isInvalid4 */ NULL - -static int FASTCALL checkCharRefNumber(int); - -#include "xmltok_impl.h" -#include "ascii.h" - -#ifdef XML_MIN_SIZE -# define sb_isNameMin isNever -# define sb_isNmstrtMin isNever -#endif - -#ifdef XML_MIN_SIZE -# define MINBPC(enc) ((enc)->minBytesPerChar) -#else -/* minimum bytes per character */ -# define MINBPC(enc) 1 -#endif - -#define SB_BYTE_TYPE(enc, p) \ - (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) - -#ifdef XML_MIN_SIZE -static int PTRFASTCALL -sb_byteType(const ENCODING *enc, const char *p) { - return SB_BYTE_TYPE(enc, p); -} -# define BYTE_TYPE(enc, p) (AS_NORMAL_ENCODING(enc)->byteType(enc, p)) -#else -# define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) -#endif - -#ifdef XML_MIN_SIZE -# define BYTE_TO_ASCII(enc, p) (AS_NORMAL_ENCODING(enc)->byteToAscii(enc, p)) -static int PTRFASTCALL -sb_byteToAscii(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return *p; -} -#else -# define BYTE_TO_ASCII(enc, p) (*(p)) -#endif - -#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p)) -#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p)) -#define IS_INVALID_CHAR(enc, p, n) \ - (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p)) - -#ifdef XML_MIN_SIZE -# define IS_NAME_CHAR_MINBPC(enc, p) \ - (AS_NORMAL_ENCODING(enc)->isNameMin(enc, p)) -# define IS_NMSTRT_CHAR_MINBPC(enc, p) \ - (AS_NORMAL_ENCODING(enc)->isNmstrtMin(enc, p)) -#else -# define IS_NAME_CHAR_MINBPC(enc, p) (0) -# define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) -#endif - -#ifdef XML_MIN_SIZE -# define CHAR_MATCHES(enc, p, c) \ - (AS_NORMAL_ENCODING(enc)->charMatches(enc, p, c)) -static int PTRCALL -sb_charMatches(const ENCODING *enc, const char *p, int c) { - UNUSED_P(enc); - return *p == c; -} -#else -/* c is an ASCII character */ -# define CHAR_MATCHES(enc, p, c) (*(p) == c) -#endif - -#define PREFIX(ident) normal_##ident -#define XML_TOK_IMPL_C -#include "xmltok_impl.c" -#undef XML_TOK_IMPL_C - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ - UTF8_cval1 = 0x00, - UTF8_cval2 = 0xc0, - UTF8_cval3 = 0xe0, - UTF8_cval4 = 0xf0 -}; - -void -_INTERNAL_trim_to_complete_utf8_characters(const char *from, - const char **fromLimRef) { - const char *fromLim = *fromLimRef; - size_t walked = 0; - for (; fromLim > from; fromLim--, walked++) { - const unsigned char prev = (unsigned char)fromLim[-1]; - if ((prev & 0xf8u) - == 0xf0u) { /* 4-byte character, lead by 0b11110xxx byte */ - if (walked + 1 >= 4) { - fromLim += 4 - 1; - break; - } else { - walked = 0; - } - } else if ((prev & 0xf0u) - == 0xe0u) { /* 3-byte character, lead by 0b1110xxxx byte */ - if (walked + 1 >= 3) { - fromLim += 3 - 1; - break; - } else { - walked = 0; - } - } else if ((prev & 0xe0u) - == 0xc0u) { /* 2-byte character, lead by 0b110xxxxx byte */ - if (walked + 1 >= 2) { - fromLim += 2 - 1; - break; - } else { - walked = 0; - } - } else if ((prev & 0x80u) - == 0x00u) { /* 1-byte character, matching 0b0xxxxxxx */ - break; - } - } - *fromLimRef = fromLim; -} - -static enum XML_Convert_Result PTRCALL -utf8_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, - char **toP, const char *toLim) { - bool input_incomplete = false; - bool output_exhausted = false; - - /* Avoid copying partial characters (due to limited space). */ - const ptrdiff_t bytesAvailable = fromLim - *fromP; - const ptrdiff_t bytesStorable = toLim - *toP; - UNUSED_P(enc); - if (bytesAvailable > bytesStorable) { - fromLim = *fromP + bytesStorable; - output_exhausted = true; - } - - /* Avoid copying partial characters (from incomplete input). */ - { - const char *const fromLimBefore = fromLim; - _INTERNAL_trim_to_complete_utf8_characters(*fromP, &fromLim); - if (fromLim < fromLimBefore) { - input_incomplete = true; - } - } - - { - const ptrdiff_t bytesToCopy = fromLim - *fromP; - memcpy(*toP, *fromP, bytesToCopy); - *fromP += bytesToCopy; - *toP += bytesToCopy; - } - - if (output_exhausted) /* needs to go first */ - return XML_CONVERT_OUTPUT_EXHAUSTED; - else if (input_incomplete) - return XML_CONVERT_INPUT_INCOMPLETE; - else - return XML_CONVERT_COMPLETED; -} - -static enum XML_Convert_Result PTRCALL -utf8_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) { - enum XML_Convert_Result res = XML_CONVERT_COMPLETED; - unsigned short *to = *toP; - const char *from = *fromP; - while (from < fromLim && to < toLim) { - switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { - case BT_LEAD2: - if (fromLim - from < 2) { - res = XML_CONVERT_INPUT_INCOMPLETE; - goto after; - } - *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f)); - from += 2; - break; - case BT_LEAD3: - if (fromLim - from < 3) { - res = XML_CONVERT_INPUT_INCOMPLETE; - goto after; - } - *to++ = (unsigned short)(((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) - | (from[2] & 0x3f)); - from += 3; - break; - case BT_LEAD4: { - unsigned long n; - if (toLim - to < 2) { - res = XML_CONVERT_OUTPUT_EXHAUSTED; - goto after; - } - if (fromLim - from < 4) { - res = XML_CONVERT_INPUT_INCOMPLETE; - goto after; - } - n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) - | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); - n -= 0x10000; - to[0] = (unsigned short)((n >> 10) | 0xD800); - to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); - to += 2; - from += 4; - } break; - default: - *to++ = *from++; - break; - } - } - if (from < fromLim) - res = XML_CONVERT_OUTPUT_EXHAUSTED; -after: - *fromP = from; - *toP = to; - return res; -} - -#ifdef XML_NS -static const struct normal_encoding utf8_encoding_ns - = {{VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0}, - { -# include "asciitab.h" -# include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)}; -#endif - -static const struct normal_encoding utf8_encoding - = {{VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0}, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)}; - -#ifdef XML_NS - -static const struct normal_encoding internal_utf8_encoding_ns - = {{VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0}, - { -# include "iasciitab.h" -# include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)}; - -#endif - -static const struct normal_encoding internal_utf8_encoding - = {{VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0}, - { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)}; - -static enum XML_Convert_Result PTRCALL -latin1_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, - char **toP, const char *toLim) { - UNUSED_P(enc); - for (;;) { - unsigned char c; - if (*fromP == fromLim) - return XML_CONVERT_COMPLETED; - c = (unsigned char)**fromP; - if (c & 0x80) { - if (toLim - *toP < 2) - return XML_CONVERT_OUTPUT_EXHAUSTED; - *(*toP)++ = (char)((c >> 6) | UTF8_cval2); - *(*toP)++ = (char)((c & 0x3f) | 0x80); - (*fromP)++; - } else { - if (*toP == toLim) - return XML_CONVERT_OUTPUT_EXHAUSTED; - *(*toP)++ = *(*fromP)++; - } - } -} - -static enum XML_Convert_Result PTRCALL -latin1_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) { - UNUSED_P(enc); - while (*fromP < fromLim && *toP < toLim) - *(*toP)++ = (unsigned char)*(*fromP)++; - - if ((*toP == toLim) && (*fromP < fromLim)) - return XML_CONVERT_OUTPUT_EXHAUSTED; - else - return XML_CONVERT_COMPLETED; -} - -#ifdef XML_NS - -static const struct normal_encoding latin1_encoding_ns - = {{VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0}, - { -# include "asciitab.h" -# include "latin1tab.h" - }, - STANDARD_VTABLE(sb_) NULL_VTABLE}; - -#endif - -static const struct normal_encoding latin1_encoding - = {{VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0}, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(sb_) NULL_VTABLE}; - -static enum XML_Convert_Result PTRCALL -ascii_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, - char **toP, const char *toLim) { - UNUSED_P(enc); - while (*fromP < fromLim && *toP < toLim) - *(*toP)++ = *(*fromP)++; - - if ((*toP == toLim) && (*fromP < fromLim)) - return XML_CONVERT_OUTPUT_EXHAUSTED; - else - return XML_CONVERT_COMPLETED; -} - -#ifdef XML_NS - -static const struct normal_encoding ascii_encoding_ns - = {{VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0}, - { -# include "asciitab.h" - /* BT_NONXML == 0 */ - }, - STANDARD_VTABLE(sb_) NULL_VTABLE}; - -#endif - -static const struct normal_encoding ascii_encoding - = {{VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0}, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON - /* BT_NONXML == 0 */ - }, - STANDARD_VTABLE(sb_) NULL_VTABLE}; - -static int PTRFASTCALL -unicode_byte_type(char hi, char lo) { - switch ((unsigned char)hi) { - /* 0xD800-0xDBFF first 16-bit code unit or high surrogate (W1) */ - case 0xD8: - case 0xD9: - case 0xDA: - case 0xDB: - return BT_LEAD4; - /* 0xDC00-0xDFFF second 16-bit code unit or low surrogate (W2) */ - case 0xDC: - case 0xDD: - case 0xDE: - case 0xDF: - return BT_TRAIL; - case 0xFF: - switch ((unsigned char)lo) { - case 0xFF: /* noncharacter-FFFF */ - case 0xFE: /* noncharacter-FFFE */ - return BT_NONXML; - } - break; - } - return BT_NONASCII; -} - -#define DEFINE_UTF16_TO_UTF8(E) \ - static enum XML_Convert_Result PTRCALL E##toUtf8( \ - const ENCODING *enc, const char **fromP, const char *fromLim, \ - char **toP, const char *toLim) { \ - const char *from = *fromP; \ - UNUSED_P(enc); \ - fromLim = from + (((fromLim - from) >> 1) << 1); /* shrink to even */ \ - for (; from < fromLim; from += 2) { \ - int plane; \ - unsigned char lo2; \ - unsigned char lo = GET_LO(from); \ - unsigned char hi = GET_HI(from); \ - switch (hi) { \ - case 0: \ - if (lo < 0x80) { \ - if (*toP == toLim) { \ - *fromP = from; \ - return XML_CONVERT_OUTPUT_EXHAUSTED; \ - } \ - *(*toP)++ = lo; \ - break; \ - } \ - /* fall through */ \ - case 0x1: \ - case 0x2: \ - case 0x3: \ - case 0x4: \ - case 0x5: \ - case 0x6: \ - case 0x7: \ - if (toLim - *toP < 2) { \ - *fromP = from; \ - return XML_CONVERT_OUTPUT_EXHAUSTED; \ - } \ - *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ - *(*toP)++ = ((lo & 0x3f) | 0x80); \ - break; \ - default: \ - if (toLim - *toP < 3) { \ - *fromP = from; \ - return XML_CONVERT_OUTPUT_EXHAUSTED; \ - } \ - /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ - *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ - *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ - *(*toP)++ = ((lo & 0x3f) | 0x80); \ - break; \ - case 0xD8: \ - case 0xD9: \ - case 0xDA: \ - case 0xDB: \ - if (toLim - *toP < 4) { \ - *fromP = from; \ - return XML_CONVERT_OUTPUT_EXHAUSTED; \ - } \ - if (fromLim - from < 4) { \ - *fromP = from; \ - return XML_CONVERT_INPUT_INCOMPLETE; \ - } \ - plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ - *(*toP)++ = (char)((plane >> 2) | UTF8_cval4); \ - *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ - from += 2; \ - lo2 = GET_LO(from); \ - *(*toP)++ = (((lo & 0x3) << 4) | ((GET_HI(from) & 0x3) << 2) \ - | (lo2 >> 6) | 0x80); \ - *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ - break; \ - } \ - } \ - *fromP = from; \ - if (from < fromLim) \ - return XML_CONVERT_INPUT_INCOMPLETE; \ - else \ - return XML_CONVERT_COMPLETED; \ - } - -#define DEFINE_UTF16_TO_UTF16(E) \ - static enum XML_Convert_Result PTRCALL E##toUtf16( \ - const ENCODING *enc, const char **fromP, const char *fromLim, \ - unsigned short **toP, const unsigned short *toLim) { \ - enum XML_Convert_Result res = XML_CONVERT_COMPLETED; \ - UNUSED_P(enc); \ - fromLim = *fromP + (((fromLim - *fromP) >> 1) << 1); /* shrink to even */ \ - /* Avoid copying first half only of surrogate */ \ - if (fromLim - *fromP > ((toLim - *toP) << 1) \ - && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) { \ - fromLim -= 2; \ - res = XML_CONVERT_INPUT_INCOMPLETE; \ - } \ - for (; *fromP < fromLim && *toP < toLim; *fromP += 2) \ - *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ - if ((*toP == toLim) && (*fromP < fromLim)) \ - return XML_CONVERT_OUTPUT_EXHAUSTED; \ - else \ - return res; \ - } - -#define SET2(ptr, ch) (((ptr)[0] = ((ch)&0xff)), ((ptr)[1] = ((ch) >> 8))) -#define GET_LO(ptr) ((unsigned char)(ptr)[0]) -#define GET_HI(ptr) ((unsigned char)(ptr)[1]) - -DEFINE_UTF16_TO_UTF8(little2_) -DEFINE_UTF16_TO_UTF16(little2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define SET2(ptr, ch) (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch)&0xFF))) -#define GET_LO(ptr) ((unsigned char)(ptr)[1]) -#define GET_HI(ptr) ((unsigned char)(ptr)[0]) - -DEFINE_UTF16_TO_UTF8(big2_) -DEFINE_UTF16_TO_UTF16(big2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define LITTLE2_BYTE_TYPE(enc, p) \ - ((p)[1] == 0 ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ - : unicode_byte_type((p)[1], (p)[0])) -#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1) -#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == c) -#define LITTLE2_IS_NAME_CHAR_MINBPC(p) \ - UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) -#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(p) \ - UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) - -#ifdef XML_MIN_SIZE - -static int PTRFASTCALL -little2_byteType(const ENCODING *enc, const char *p) { - return LITTLE2_BYTE_TYPE(enc, p); -} - -static int PTRFASTCALL -little2_byteToAscii(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return LITTLE2_BYTE_TO_ASCII(p); -} - -static int PTRCALL -little2_charMatches(const ENCODING *enc, const char *p, int c) { - UNUSED_P(enc); - return LITTLE2_CHAR_MATCHES(p, c); -} - -static int PTRFASTCALL -little2_isNameMin(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return LITTLE2_IS_NAME_CHAR_MINBPC(p); -} - -static int PTRFASTCALL -little2_isNmstrtMin(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return LITTLE2_IS_NMSTRT_CHAR_MINBPC(p); -} - -# undef VTABLE -# define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -# undef PREFIX -# define PREFIX(ident) little2_##ident -# define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -# define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) -# define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p) -# define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c) -# define IS_NAME_CHAR(enc, p, n) 0 -# define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p) -# define IS_NMSTRT_CHAR(enc, p, n) (0) -# define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p) - -# define XML_TOK_IMPL_C -# include "xmltok_impl.c" -# undef XML_TOK_IMPL_C - -# undef MINBPC -# undef BYTE_TYPE -# undef BYTE_TO_ASCII -# undef CHAR_MATCHES -# undef IS_NAME_CHAR -# undef IS_NAME_CHAR_MINBPC -# undef IS_NMSTRT_CHAR -# undef IS_NMSTRT_CHAR_MINBPC -# undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding little2_encoding_ns - = {{VTABLE, 2, 0, -# if BYTEORDER == 1234 - 1 -# else - 0 -# endif - }, - { -# include "asciitab.h" -# include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) NULL_VTABLE}; - -#endif - -static const struct normal_encoding little2_encoding - = {{VTABLE, 2, 0, -#if BYTEORDER == 1234 - 1 -#else - 0 -#endif - }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) NULL_VTABLE}; - -#if BYTEORDER != 4321 - -# ifdef XML_NS - -static const struct normal_encoding internal_little2_encoding_ns - = {{VTABLE, 2, 0, 1}, - { -# include "iasciitab.h" -# include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) NULL_VTABLE}; - -# endif - -static const struct normal_encoding internal_little2_encoding - = {{VTABLE, 2, 0, 1}, - { -# define BT_COLON BT_NMSTRT -# include "iasciitab.h" -# undef BT_COLON -# include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) NULL_VTABLE}; - -#endif - -#define BIG2_BYTE_TYPE(enc, p) \ - ((p)[0] == 0 \ - ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ - : unicode_byte_type((p)[0], (p)[1])) -#define BIG2_BYTE_TO_ASCII(p) ((p)[0] == 0 ? (p)[1] : -1) -#define BIG2_CHAR_MATCHES(p, c) ((p)[0] == 0 && (p)[1] == c) -#define BIG2_IS_NAME_CHAR_MINBPC(p) \ - UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) -#define BIG2_IS_NMSTRT_CHAR_MINBPC(p) \ - UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) - -#ifdef XML_MIN_SIZE - -static int PTRFASTCALL -big2_byteType(const ENCODING *enc, const char *p) { - return BIG2_BYTE_TYPE(enc, p); -} - -static int PTRFASTCALL -big2_byteToAscii(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return BIG2_BYTE_TO_ASCII(p); -} - -static int PTRCALL -big2_charMatches(const ENCODING *enc, const char *p, int c) { - UNUSED_P(enc); - return BIG2_CHAR_MATCHES(p, c); -} - -static int PTRFASTCALL -big2_isNameMin(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return BIG2_IS_NAME_CHAR_MINBPC(p); -} - -static int PTRFASTCALL -big2_isNmstrtMin(const ENCODING *enc, const char *p) { - UNUSED_P(enc); - return BIG2_IS_NMSTRT_CHAR_MINBPC(p); -} - -# undef VTABLE -# define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -# undef PREFIX -# define PREFIX(ident) big2_##ident -# define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -# define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) -# define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(p) -# define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(p, c) -# define IS_NAME_CHAR(enc, p, n) 0 -# define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(p) -# define IS_NMSTRT_CHAR(enc, p, n) (0) -# define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(p) - -# define XML_TOK_IMPL_C -# include "xmltok_impl.c" -# undef XML_TOK_IMPL_C - -# undef MINBPC -# undef BYTE_TYPE -# undef BYTE_TO_ASCII -# undef CHAR_MATCHES -# undef IS_NAME_CHAR -# undef IS_NAME_CHAR_MINBPC -# undef IS_NMSTRT_CHAR -# undef IS_NMSTRT_CHAR_MINBPC -# undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding big2_encoding_ns - = {{VTABLE, 2, 0, -# if BYTEORDER == 4321 - 1 -# else - 0 -# endif - }, - { -# include "asciitab.h" -# include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) NULL_VTABLE}; - -#endif - -static const struct normal_encoding big2_encoding - = {{VTABLE, 2, 0, -#if BYTEORDER == 4321 - 1 -#else - 0 -#endif - }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) NULL_VTABLE}; - -#if BYTEORDER != 1234 - -# ifdef XML_NS - -static const struct normal_encoding internal_big2_encoding_ns - = {{VTABLE, 2, 0, 1}, - { -# include "iasciitab.h" -# include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) NULL_VTABLE}; - -# endif - -static const struct normal_encoding internal_big2_encoding - = {{VTABLE, 2, 0, 1}, - { -# define BT_COLON BT_NMSTRT -# include "iasciitab.h" -# undef BT_COLON -# include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) NULL_VTABLE}; - -#endif - -#undef PREFIX - -static int FASTCALL -streqci(const char *s1, const char *s2) { - for (;;) { - char c1 = *s1++; - char c2 = *s2++; - if (ASCII_a <= c1 && c1 <= ASCII_z) - c1 += ASCII_A - ASCII_a; - if (ASCII_a <= c2 && c2 <= ASCII_z) - /* The following line will never get executed. streqci() is - * only called from two places, both of which guarantee to put - * upper-case strings into s2. - */ - c2 += ASCII_A - ASCII_a; /* LCOV_EXCL_LINE */ - if (c1 != c2) - return 0; - if (! c1) - break; - } - return 1; -} - -static void PTRCALL -initUpdatePosition(const ENCODING *enc, const char *ptr, const char *end, - POSITION *pos) { - UNUSED_P(enc); - normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); -} - -static int -toAscii(const ENCODING *enc, const char *ptr, const char *end) { - char buf[1]; - char *p = buf; - XmlUtf8Convert(enc, &ptr, end, &p, p + 1); - if (p == buf) - return -1; - else - return buf[0]; -} - -static int FASTCALL -isSpace(int c) { - switch (c) { - case 0x20: - case 0xD: - case 0xA: - case 0x9: - return 1; - } - return 0; -} - -/* Return 1 if there's just optional white space or there's an S - followed by name=val. -*/ -static int -parsePseudoAttribute(const ENCODING *enc, const char *ptr, const char *end, - const char **namePtr, const char **nameEndPtr, - const char **valPtr, const char **nextTokPtr) { - int c; - char open; - if (ptr == end) { - *namePtr = NULL; - return 1; - } - if (! isSpace(toAscii(enc, ptr, end))) { - *nextTokPtr = ptr; - return 0; - } - do { - ptr += enc->minBytesPerChar; - } while (isSpace(toAscii(enc, ptr, end))); - if (ptr == end) { - *namePtr = NULL; - return 1; - } - *namePtr = ptr; - for (;;) { - c = toAscii(enc, ptr, end); - if (c == -1) { - *nextTokPtr = ptr; - return 0; - } - if (c == ASCII_EQUALS) { - *nameEndPtr = ptr; - break; - } - if (isSpace(c)) { - *nameEndPtr = ptr; - do { - ptr += enc->minBytesPerChar; - } while (isSpace(c = toAscii(enc, ptr, end))); - if (c != ASCII_EQUALS) { - *nextTokPtr = ptr; - return 0; - } - break; - } - ptr += enc->minBytesPerChar; - } - if (ptr == *namePtr) { - *nextTokPtr = ptr; - return 0; - } - ptr += enc->minBytesPerChar; - c = toAscii(enc, ptr, end); - while (isSpace(c)) { - ptr += enc->minBytesPerChar; - c = toAscii(enc, ptr, end); - } - if (c != ASCII_QUOT && c != ASCII_APOS) { - *nextTokPtr = ptr; - return 0; - } - open = (char)c; - ptr += enc->minBytesPerChar; - *valPtr = ptr; - for (;; ptr += enc->minBytesPerChar) { - c = toAscii(enc, ptr, end); - if (c == open) - break; - if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z) - && ! (ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD - && c != ASCII_MINUS && c != ASCII_UNDERSCORE) { - *nextTokPtr = ptr; - return 0; - } - } - *nextTokPtr = ptr + enc->minBytesPerChar; - return 1; -} - -static const char KW_version[] - = {ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0'}; - -static const char KW_encoding[] = {ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, - ASCII_i, ASCII_n, ASCII_g, '\0'}; - -static const char KW_standalone[] - = {ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, - ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0'}; - -static const char KW_yes[] = {ASCII_y, ASCII_e, ASCII_s, '\0'}; - -static const char KW_no[] = {ASCII_n, ASCII_o, '\0'}; - -static int -doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, const char *, - const char *), - int isGeneralTextEntity, const ENCODING *enc, const char *ptr, - const char *end, const char **badPtr, const char **versionPtr, - const char **versionEndPtr, const char **encodingName, - const ENCODING **encoding, int *standalone) { - const char *val = NULL; - const char *name = NULL; - const char *nameEnd = NULL; - ptr += 5 * enc->minBytesPerChar; - end -= 2 * enc->minBytesPerChar; - if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) - || ! name) { - *badPtr = ptr; - return 0; - } - if (! XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { - if (! isGeneralTextEntity) { - *badPtr = name; - return 0; - } - } else { - if (versionPtr) - *versionPtr = val; - if (versionEndPtr) - *versionEndPtr = ptr; - if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { - *badPtr = ptr; - return 0; - } - if (! name) { - if (isGeneralTextEntity) { - /* a TextDecl must have an EncodingDecl */ - *badPtr = ptr; - return 0; - } - return 1; - } - } - if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { - int c = toAscii(enc, val, end); - if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)) { - *badPtr = val; - return 0; - } - if (encodingName) - *encodingName = val; - if (encoding) - *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); - if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { - *badPtr = ptr; - return 0; - } - if (! name) - return 1; - } - if (! XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) - || isGeneralTextEntity) { - *badPtr = name; - return 0; - } - if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { - if (standalone) - *standalone = 1; - } else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { - if (standalone) - *standalone = 0; - } else { - *badPtr = val; - return 0; - } - while (isSpace(toAscii(enc, ptr, end))) - ptr += enc->minBytesPerChar; - if (ptr != end) { - *badPtr = ptr; - return 0; - } - return 1; -} - -static int FASTCALL -checkCharRefNumber(int result) { - switch (result >> 8) { - case 0xD8: - case 0xD9: - case 0xDA: - case 0xDB: - case 0xDC: - case 0xDD: - case 0xDE: - case 0xDF: - return -1; - case 0: - if (latin1_encoding.type[result] == BT_NONXML) - return -1; - break; - case 0xFF: - if (result == 0xFFFE || result == 0xFFFF) - return -1; - break; - } - return result; -} - -int FASTCALL -XmlUtf8Encode(int c, char *buf) { - enum { - /* minN is minimum legal resulting value for N byte sequence */ - min2 = 0x80, - min3 = 0x800, - min4 = 0x10000 - }; - - if (c < 0) - return 0; /* LCOV_EXCL_LINE: this case is always eliminated beforehand */ - if (c < min2) { - buf[0] = (char)(c | UTF8_cval1); - return 1; - } - if (c < min3) { - buf[0] = (char)((c >> 6) | UTF8_cval2); - buf[1] = (char)((c & 0x3f) | 0x80); - return 2; - } - if (c < min4) { - buf[0] = (char)((c >> 12) | UTF8_cval3); - buf[1] = (char)(((c >> 6) & 0x3f) | 0x80); - buf[2] = (char)((c & 0x3f) | 0x80); - return 3; - } - if (c < 0x110000) { - buf[0] = (char)((c >> 18) | UTF8_cval4); - buf[1] = (char)(((c >> 12) & 0x3f) | 0x80); - buf[2] = (char)(((c >> 6) & 0x3f) | 0x80); - buf[3] = (char)((c & 0x3f) | 0x80); - return 4; - } - return 0; /* LCOV_EXCL_LINE: this case too is eliminated before calling */ -} - -int FASTCALL -XmlUtf16Encode(int charNum, unsigned short *buf) { - if (charNum < 0) - return 0; - if (charNum < 0x10000) { - buf[0] = (unsigned short)charNum; - return 1; - } - if (charNum < 0x110000) { - charNum -= 0x10000; - buf[0] = (unsigned short)((charNum >> 10) + 0xD800); - buf[1] = (unsigned short)((charNum & 0x3FF) + 0xDC00); - return 2; - } - return 0; -} - -struct unknown_encoding { - struct normal_encoding normal; - CONVERTER convert; - void *userData; - unsigned short utf16[256]; - char utf8[256][4]; -}; - -#define AS_UNKNOWN_ENCODING(enc) ((const struct unknown_encoding *)(enc)) - -int -XmlSizeOfUnknownEncoding(void) { - return sizeof(struct unknown_encoding); -} - -static int PTRFASTCALL -unknown_isName(const ENCODING *enc, const char *p) { - const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); - int c = uenc->convert(uenc->userData, p); - if (c & ~0xFFFF) - return 0; - return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); -} - -static int PTRFASTCALL -unknown_isNmstrt(const ENCODING *enc, const char *p) { - const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); - int c = uenc->convert(uenc->userData, p); - if (c & ~0xFFFF) - return 0; - return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); -} - -static int PTRFASTCALL -unknown_isInvalid(const ENCODING *enc, const char *p) { - const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); - int c = uenc->convert(uenc->userData, p); - return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; -} - -static enum XML_Convert_Result PTRCALL -unknown_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, - char **toP, const char *toLim) { - const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); - char buf[XML_UTF8_ENCODE_MAX]; - for (;;) { - const char *utf8; - int n; - if (*fromP == fromLim) - return XML_CONVERT_COMPLETED; - utf8 = uenc->utf8[(unsigned char)**fromP]; - n = *utf8++; - if (n == 0) { - int c = uenc->convert(uenc->userData, *fromP); - n = XmlUtf8Encode(c, buf); - if (n > toLim - *toP) - return XML_CONVERT_OUTPUT_EXHAUSTED; - utf8 = buf; - *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - - (BT_LEAD2 - 2)); - } else { - if (n > toLim - *toP) - return XML_CONVERT_OUTPUT_EXHAUSTED; - (*fromP)++; - } - memcpy(*toP, utf8, n); - *toP += n; - } -} - -static enum XML_Convert_Result PTRCALL -unknown_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) { - const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); - while (*fromP < fromLim && *toP < toLim) { - unsigned short c = uenc->utf16[(unsigned char)**fromP]; - if (c == 0) { - c = (unsigned short)uenc->convert(uenc->userData, *fromP); - *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - - (BT_LEAD2 - 2)); - } else - (*fromP)++; - *(*toP)++ = c; - } - - if ((*toP == toLim) && (*fromP < fromLim)) - return XML_CONVERT_OUTPUT_EXHAUSTED; - else - return XML_CONVERT_COMPLETED; -} - -ENCODING * -XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, - void *userData) { - int i; - struct unknown_encoding *e = (struct unknown_encoding *)mem; - memcpy(mem, &latin1_encoding, sizeof(struct normal_encoding)); - for (i = 0; i < 128; i++) - if (latin1_encoding.type[i] != BT_OTHER - && latin1_encoding.type[i] != BT_NONXML && table[i] != i) - return 0; - for (i = 0; i < 256; i++) { - int c = table[i]; - if (c == -1) { - e->normal.type[i] = BT_MALFORM; - /* This shouldn't really get used. */ - e->utf16[i] = 0xFFFF; - e->utf8[i][0] = 1; - e->utf8[i][1] = 0; - } else if (c < 0) { - if (c < -4) - return 0; - /* Multi-byte sequences need a converter function */ - if (! convert) - return 0; - e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2)); - e->utf8[i][0] = 0; - e->utf16[i] = 0; - } else if (c < 0x80) { - if (latin1_encoding.type[c] != BT_OTHER - && latin1_encoding.type[c] != BT_NONXML && c != i) - return 0; - e->normal.type[i] = latin1_encoding.type[c]; - e->utf8[i][0] = 1; - e->utf8[i][1] = (char)c; - e->utf16[i] = (unsigned short)(c == 0 ? 0xFFFF : c); - } else if (checkCharRefNumber(c) < 0) { - e->normal.type[i] = BT_NONXML; - /* This shouldn't really get used. */ - e->utf16[i] = 0xFFFF; - e->utf8[i][0] = 1; - e->utf8[i][1] = 0; - } else { - if (c > 0xFFFF) - return 0; - if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) - e->normal.type[i] = BT_NMSTRT; - else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) - e->normal.type[i] = BT_NAME; - else - e->normal.type[i] = BT_OTHER; - e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); - e->utf16[i] = (unsigned short)c; - } - } - e->userData = userData; - e->convert = convert; - if (convert) { - e->normal.isName2 = unknown_isName; - e->normal.isName3 = unknown_isName; - e->normal.isName4 = unknown_isName; - e->normal.isNmstrt2 = unknown_isNmstrt; - e->normal.isNmstrt3 = unknown_isNmstrt; - e->normal.isNmstrt4 = unknown_isNmstrt; - e->normal.isInvalid2 = unknown_isInvalid; - e->normal.isInvalid3 = unknown_isInvalid; - e->normal.isInvalid4 = unknown_isInvalid; - } - e->normal.enc.utf8Convert = unknown_toUtf8; - e->normal.enc.utf16Convert = unknown_toUtf16; - return &(e->normal.enc); -} - -/* If this enumeration is changed, getEncodingIndex and encodings -must also be changed. */ -enum { - UNKNOWN_ENC = -1, - ISO_8859_1_ENC = 0, - US_ASCII_ENC, - UTF_8_ENC, - UTF_16_ENC, - UTF_16BE_ENC, - UTF_16LE_ENC, - /* must match encodingNames up to here */ - NO_ENC -}; - -static const char KW_ISO_8859_1[] - = {ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, - ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0'}; -static const char KW_US_ASCII[] - = {ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, - ASCII_C, ASCII_I, ASCII_I, '\0'}; -static const char KW_UTF_8[] - = {ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0'}; -static const char KW_UTF_16[] - = {ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0'}; -static const char KW_UTF_16BE[] - = {ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, - ASCII_6, ASCII_B, ASCII_E, '\0'}; -static const char KW_UTF_16LE[] - = {ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, - ASCII_6, ASCII_L, ASCII_E, '\0'}; - -static int FASTCALL -getEncodingIndex(const char *name) { - static const char *const encodingNames[] = { - KW_ISO_8859_1, KW_US_ASCII, KW_UTF_8, KW_UTF_16, KW_UTF_16BE, KW_UTF_16LE, - }; - int i; - if (name == NULL) - return NO_ENC; - for (i = 0; i < (int)(sizeof(encodingNames) / sizeof(encodingNames[0])); i++) - if (streqci(name, encodingNames[i])) - return i; - return UNKNOWN_ENC; -} - -/* For binary compatibility, we store the index of the encoding - specified at initialization in the isUtf16 member. -*/ - -#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) -#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) - -/* This is what detects the encoding. encodingTable maps from - encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of - the external (protocol) specified encoding; state is - XML_CONTENT_STATE if we're parsing an external text entity, and - XML_PROLOG_STATE otherwise. -*/ - -static int -initScan(const ENCODING *const *encodingTable, const INIT_ENCODING *enc, - int state, const char *ptr, const char *end, const char **nextTokPtr) { - const ENCODING **encPtr; - - if (ptr >= end) - return XML_TOK_NONE; - encPtr = enc->encPtr; - if (ptr + 1 == end) { - /* only a single byte available for auto-detection */ -#ifndef XML_DTD /* FIXME */ - /* a well-formed document entity must have more than one byte */ - if (state != XML_CONTENT_STATE) - return XML_TOK_PARTIAL; -#endif - /* so we're parsing an external text entity... */ - /* if UTF-16 was externally specified, then we need at least 2 bytes */ - switch (INIT_ENC_INDEX(enc)) { - case UTF_16_ENC: - case UTF_16LE_ENC: - case UTF_16BE_ENC: - return XML_TOK_PARTIAL; - } - switch ((unsigned char)*ptr) { - case 0xFE: - case 0xFF: - case 0xEF: /* possibly first byte of UTF-8 BOM */ - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) - break; - /* fall through */ - case 0x00: - case 0x3C: - return XML_TOK_PARTIAL; - } - } else { - switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { - case 0xFEFF: - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) - break; - *nextTokPtr = ptr + 2; - *encPtr = encodingTable[UTF_16BE_ENC]; - return XML_TOK_BOM; - /* 00 3C is handled in the default case */ - case 0x3C00: - if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC - || INIT_ENC_INDEX(enc) == UTF_16_ENC) - && state == XML_CONTENT_STATE) - break; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - case 0xFFFE: - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) - break; - *nextTokPtr = ptr + 2; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XML_TOK_BOM; - case 0xEFBB: - /* Maybe a UTF-8 BOM (EF BB BF) */ - /* If there's an explicitly specified (external) encoding - of ISO-8859-1 or some flavour of UTF-16 - and this is an external text entity, - don't look for the BOM, - because it might be a legal data. - */ - if (state == XML_CONTENT_STATE) { - int e = INIT_ENC_INDEX(enc); - if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC - || e == UTF_16_ENC) - break; - } - if (ptr + 2 == end) - return XML_TOK_PARTIAL; - if ((unsigned char)ptr[2] == 0xBF) { - *nextTokPtr = ptr + 3; - *encPtr = encodingTable[UTF_8_ENC]; - return XML_TOK_BOM; - } - break; - default: - if (ptr[0] == '\0') { - /* 0 isn't a legal data character. Furthermore a document - entity can only start with ASCII characters. So the only - way this can fail to be big-endian UTF-16 if it it's an - external parsed general entity that's labelled as - UTF-16LE. - */ - if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) - break; - *encPtr = encodingTable[UTF_16BE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - } else if (ptr[1] == '\0') { - /* We could recover here in the case: - - parsing an external entity - - second byte is 0 - - no externally specified encoding - - no encoding declaration - by assuming UTF-16LE. But we don't, because this would mean when - presented just with a single byte, we couldn't reliably determine - whether we needed further bytes. - */ - if (state == XML_CONTENT_STATE) - break; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - } - break; - } - } - *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -} - -#define NS(x) x -#define ns(x) x -#define XML_TOK_NS_C -#include "xmltok_ns.c" -#undef XML_TOK_NS_C -#undef NS -#undef ns - -#ifdef XML_NS - -# define NS(x) x##NS -# define ns(x) x##_ns - -# define XML_TOK_NS_C -# include "xmltok_ns.c" -# undef XML_TOK_NS_C - -# undef NS -# undef ns - -ENCODING * -XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, - void *userData) { - ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); - if (enc) - ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; - return enc; -} - -#endif /* XML_NS */ diff --git a/internal/expat/xmltok.h b/internal/expat/xmltok.h deleted file mode 100644 index 2adbf53..0000000 --- a/internal/expat/xmltok.h +++ /dev/null @@ -1,315 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifndef XmlTok_INCLUDED -#define XmlTok_INCLUDED 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following token may be returned by XmlContentTok */ -#define XML_TOK_TRAILING_RSQB \ - -5 /* ] or ]] at the end of the scan; might be \ - start of illegal ]]> sequence */ -/* The following tokens may be returned by both XmlPrologTok and - XmlContentTok. -*/ -#define XML_TOK_NONE -4 /* The string to be scanned is empty */ -#define XML_TOK_TRAILING_CR \ - -3 /* A CR at the end of the scan; \ - might be part of CRLF sequence */ -#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ -#define XML_TOK_PARTIAL -1 /* only part of a token */ -#define XML_TOK_INVALID 0 - -/* The following tokens are returned by XmlContentTok; some are also - returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. -*/ -#define XML_TOK_START_TAG_WITH_ATTS 1 -#define XML_TOK_START_TAG_NO_ATTS 2 -#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ -#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 -#define XML_TOK_END_TAG 5 -#define XML_TOK_DATA_CHARS 6 -#define XML_TOK_DATA_NEWLINE 7 -#define XML_TOK_CDATA_SECT_OPEN 8 -#define XML_TOK_ENTITY_REF 9 -#define XML_TOK_CHAR_REF 10 /* numeric character reference */ - -/* The following tokens may be returned by both XmlPrologTok and - XmlContentTok. -*/ -#define XML_TOK_PI 11 /* processing instruction */ -#define XML_TOK_XML_DECL 12 /* XML decl or text decl */ -#define XML_TOK_COMMENT 13 -#define XML_TOK_BOM 14 /* Byte order mark */ - -/* The following tokens are returned only by XmlPrologTok */ -#define XML_TOK_PROLOG_S 15 -#define XML_TOK_DECL_OPEN 16 /* */ -#define XML_TOK_NAME 18 -#define XML_TOK_NMTOKEN 19 -#define XML_TOK_POUND_NAME 20 /* #name */ -#define XML_TOK_OR 21 /* | */ -#define XML_TOK_PERCENT 22 -#define XML_TOK_OPEN_PAREN 23 -#define XML_TOK_CLOSE_PAREN 24 -#define XML_TOK_OPEN_BRACKET 25 -#define XML_TOK_CLOSE_BRACKET 26 -#define XML_TOK_LITERAL 27 -#define XML_TOK_PARAM_ENTITY_REF 28 -#define XML_TOK_INSTANCE_START 29 - -/* The following occur only in element type declarations */ -#define XML_TOK_NAME_QUESTION 30 /* name? */ -#define XML_TOK_NAME_ASTERISK 31 /* name* */ -#define XML_TOK_NAME_PLUS 32 /* name+ */ -#define XML_TOK_COND_SECT_OPEN 33 /* */ -#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ -#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ -#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ -#define XML_TOK_COMMA 38 - -/* The following token is returned only by XmlAttributeValueTok */ -#define XML_TOK_ATTRIBUTE_VALUE_S 39 - -/* The following token is returned only by XmlCdataSectionTok */ -#define XML_TOK_CDATA_SECT_CLOSE 40 - -/* With namespace processing this is returned by XmlPrologTok for a - name with a colon. -*/ -#define XML_TOK_PREFIXED_NAME 41 - -#ifdef XML_DTD -# define XML_TOK_IGNORE_SECT 42 -#endif /* XML_DTD */ - -#ifdef XML_DTD -# define XML_N_STATES 4 -#else /* not XML_DTD */ -# define XML_N_STATES 3 -#endif /* not XML_DTD */ - -#define XML_PROLOG_STATE 0 -#define XML_CONTENT_STATE 1 -#define XML_CDATA_SECTION_STATE 2 -#ifdef XML_DTD -# define XML_IGNORE_SECTION_STATE 3 -#endif /* XML_DTD */ - -#define XML_N_LITERAL_TYPES 2 -#define XML_ATTRIBUTE_VALUE_LITERAL 0 -#define XML_ENTITY_VALUE_LITERAL 1 - -/* The size of the buffer passed to XmlUtf8Encode must be at least this. */ -#define XML_UTF8_ENCODE_MAX 4 -/* The size of the buffer passed to XmlUtf16Encode must be at least this. */ -#define XML_UTF16_ENCODE_MAX 2 - -typedef struct position { - /* first line and first column are 0 not 1 */ - XML_Size lineNumber; - XML_Size columnNumber; -} POSITION; - -typedef struct { - const char *name; - const char *valuePtr; - const char *valueEnd; - char normalized; -} ATTRIBUTE; - -struct encoding; -typedef struct encoding ENCODING; - -typedef int(PTRCALL *SCANNER)(const ENCODING *, const char *, const char *, - const char **); - -enum XML_Convert_Result { - XML_CONVERT_COMPLETED = 0, - XML_CONVERT_INPUT_INCOMPLETE = 1, - XML_CONVERT_OUTPUT_EXHAUSTED - = 2 /* and therefore potentially input remaining as well */ -}; - -struct encoding { - SCANNER scanners[XML_N_STATES]; - SCANNER literalScanners[XML_N_LITERAL_TYPES]; - int(PTRCALL *nameMatchesAscii)(const ENCODING *, const char *, const char *, - const char *); - int(PTRFASTCALL *nameLength)(const ENCODING *, const char *); - const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *); - int(PTRCALL *getAtts)(const ENCODING *enc, const char *ptr, int attsMax, - ATTRIBUTE *atts); - int(PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); - int(PTRCALL *predefinedEntityName)(const ENCODING *, const char *, - const char *); - void(PTRCALL *updatePosition)(const ENCODING *, const char *ptr, - const char *end, POSITION *); - int(PTRCALL *isPublicId)(const ENCODING *enc, const char *ptr, - const char *end, const char **badPtr); - enum XML_Convert_Result(PTRCALL *utf8Convert)(const ENCODING *enc, - const char **fromP, - const char *fromLim, char **toP, - const char *toLim); - enum XML_Convert_Result(PTRCALL *utf16Convert)(const ENCODING *enc, - const char **fromP, - const char *fromLim, - unsigned short **toP, - const unsigned short *toLim); - int minBytesPerChar; - char isUtf8; - char isUtf16; -}; - -/* Scan the string starting at ptr until the end of the next complete - token, but do not scan past eptr. Return an integer giving the - type of token. - - Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. - - Return XML_TOK_PARTIAL when the string does not contain a complete - token; nextTokPtr will not be set. - - Return XML_TOK_INVALID when the string does not start a valid - token; nextTokPtr will be set to point to the character which made - the token invalid. - - Otherwise the string starts with a valid token; nextTokPtr will be - set to point to the character following the end of that token. - - Each data character counts as a single token, but adjacent data - characters may be returned together. Similarly for characters in - the prolog outside literals, comments and processing instructions. -*/ - -#define XmlTok(enc, state, ptr, end, nextTokPtr) \ - (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) - -#define XmlPrologTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) - -#define XmlContentTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) - -#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) - -#ifdef XML_DTD - -# define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) - -#endif /* XML_DTD */ - -/* This is used for performing a 2nd-level tokenization on the content - of a literal that has already been returned by XmlTok. -*/ -#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ - (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) - -#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ - XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ - XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ - (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) - -#define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr)) - -#define XmlSkipS(enc, ptr) (((enc)->skipS)(enc, ptr)) - -#define XmlGetAttributes(enc, ptr, attsMax, atts) \ - (((enc)->getAtts)(enc, ptr, attsMax, atts)) - -#define XmlCharRefNumber(enc, ptr) (((enc)->charRefNumber)(enc, ptr)) - -#define XmlPredefinedEntityName(enc, ptr, end) \ - (((enc)->predefinedEntityName)(enc, ptr, end)) - -#define XmlUpdatePosition(enc, ptr, end, pos) \ - (((enc)->updatePosition)(enc, ptr, end, pos)) - -#define XmlIsPublicId(enc, ptr, end, badPtr) \ - (((enc)->isPublicId)(enc, ptr, end, badPtr)) - -#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ - (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) - -#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ - (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) - -typedef struct { - ENCODING initEnc; - const ENCODING **encPtr; -} INIT_ENCODING; - -int XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, - const char *ptr, const char *end, const char **badPtr, - const char **versionPtr, const char **versionEndPtr, - const char **encodingNamePtr, - const ENCODING **namedEncodingPtr, int *standalonePtr); - -int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING *XmlGetUtf8InternalEncoding(void); -const ENCODING *XmlGetUtf16InternalEncoding(void); -int FASTCALL XmlUtf8Encode(int charNumber, char *buf); -int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf); -int XmlSizeOfUnknownEncoding(void); - -typedef int(XMLCALL *CONVERTER)(void *userData, const char *p); - -ENCODING *XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, - void *userData); - -int XmlParseXmlDeclNS(int isGeneralTextEntity, const ENCODING *enc, - const char *ptr, const char *end, const char **badPtr, - const char **versionPtr, const char **versionEndPtr, - const char **encodingNamePtr, - const ENCODING **namedEncodingPtr, int *standalonePtr); - -int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING *XmlGetUtf8InternalEncodingNS(void); -const ENCODING *XmlGetUtf16InternalEncodingNS(void); -ENCODING *XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, - void *userData); -#ifdef __cplusplus -} -#endif - -#endif /* not XmlTok_INCLUDED */ diff --git a/internal/expat/xmltok_impl.c b/internal/expat/xmltok_impl.c deleted file mode 100644 index c209221..0000000 --- a/internal/expat/xmltok_impl.c +++ /dev/null @@ -1,1804 +0,0 @@ -/* This file is included! - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifdef XML_TOK_IMPL_C - -# ifndef IS_INVALID_CHAR -# define IS_INVALID_CHAR(enc, ptr, n) (0) -# endif - -# define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ - case BT_LEAD##n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (IS_INVALID_CHAR(enc, ptr, n)) { \ - *(nextTokPtr) = (ptr); \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -# define INVALID_CASES(ptr, nextTokPtr) \ - INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ - INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ - INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ - case BT_NONXML: \ - case BT_MALFORM: \ - case BT_TRAIL: \ - *(nextTokPtr) = (ptr); \ - return XML_TOK_INVALID; - -# define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ - case BT_LEAD##n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (! IS_NAME_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -# define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ - case BT_NONASCII: \ - if (! IS_NAME_CHAR_MINBPC(enc, ptr)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - /* fall through */ \ - case BT_NMSTRT: \ - case BT_HEX: \ - case BT_DIGIT: \ - case BT_NAME: \ - case BT_MINUS: \ - ptr += MINBPC(enc); \ - break; \ - CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ - CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ - CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) - -# define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ - case BT_LEAD##n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (! IS_NMSTRT_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -# define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ - case BT_NONASCII: \ - if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - /* fall through */ \ - case BT_NMSTRT: \ - case BT_HEX: \ - ptr += MINBPC(enc); \ - break; \ - CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ - CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ - CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) - -# ifndef PREFIX -# define PREFIX(ident) ident -# endif - -# define HAS_CHARS(enc, ptr, end, count) (end - ptr >= count * MINBPC(enc)) - -# define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1) - -# define REQUIRE_CHARS(enc, ptr, end, count) \ - { \ - if (! HAS_CHARS(enc, ptr, end, count)) { \ - return XML_TOK_PARTIAL; \ - } \ - } - -# define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1) - -/* ptr points to character following " */ - switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { - case BT_S: - case BT_CR: - case BT_LF: - case BT_PERCNT: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - /* fall through */ - case BT_S: - case BT_CR: - case BT_LF: - *nextTokPtr = ptr; - return XML_TOK_DECL_OPEN; - case BT_NMSTRT: - case BT_HEX: - ptr += MINBPC(enc); - break; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return XML_TOK_PARTIAL; -} - -static int PTRCALL -PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, - int *tokPtr) { - int upper = 0; - UNUSED_P(enc); - *tokPtr = XML_TOK_PI; - if (end - ptr != MINBPC(enc) * 3) - return 1; - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_x: - break; - case ASCII_X: - upper = 1; - break; - default: - return 1; - } - ptr += MINBPC(enc); - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_m: - break; - case ASCII_M: - upper = 1; - break; - default: - return 1; - } - ptr += MINBPC(enc); - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_l: - break; - case ASCII_L: - upper = 1; - break; - default: - return 1; - } - if (upper) - return 0; - *tokPtr = XML_TOK_XML_DECL; - return 1; -} - -/* ptr points to character following "= end) - return XML_TOK_NONE; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_RSQB: - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB)) - break; - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr -= MINBPC(enc); - break; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CDATA_SECT_CLOSE; - case BT_CR: - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - case BT_LF: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - INVALID_CASES(ptr, nextTokPtr) - default: - ptr += MINBPC(enc); - break; - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_DATA_CHARS; \ - } \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_NONXML: - case BT_MALFORM: - case BT_TRAIL: - case BT_CR: - case BT_LF: - case BT_RSQB: - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following "= end) - return XML_TOK_NONE; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_LT: - return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_AMP: - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_CR: - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - case BT_LF: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - case BT_RSQB: - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return XML_TOK_TRAILING_RSQB; - if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB)) - break; - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return XML_TOK_TRAILING_RSQB; - if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr -= MINBPC(enc); - break; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - INVALID_CASES(ptr, nextTokPtr) - default: - ptr += MINBPC(enc); - break; - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_DATA_CHARS; \ - } \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_RSQB: - if (HAS_CHARS(enc, ptr, end, 2)) { - if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { - ptr += MINBPC(enc); - break; - } - if (HAS_CHARS(enc, ptr, end, 3)) { - if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) { - ptr += MINBPC(enc); - break; - } - *nextTokPtr = ptr + 2 * MINBPC(enc); - return XML_TOK_INVALID; - } - } - /* fall through */ - case BT_AMP: - case BT_LT: - case BT_NONXML: - case BT_MALFORM: - case BT_TRAIL: - case BT_CR: - case BT_LF: - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following "%" */ - -static int PTRCALL -PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - REQUIRE_CHAR(enc, ptr, end); - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) - case BT_S: - case BT_LF: - case BT_CR: - case BT_PERCNT: - *nextTokPtr = ptr; - return XML_TOK_PERCENT; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_SEMI: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_PARAM_ENTITY_REF; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return XML_TOK_PARTIAL; -} - -static int PTRCALL -PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - REQUIRE_CHAR(enc, ptr, end); - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_CR: - case BT_LF: - case BT_S: - case BT_RPAR: - case BT_GT: - case BT_PERCNT: - case BT_VERBAR: - *nextTokPtr = ptr; - return XML_TOK_POUND_NAME; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return -XML_TOK_POUND_NAME; -} - -static int PTRCALL -PREFIX(scanLit)(int open, const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - while (HAS_CHAR(enc, ptr, end)) { - int t = BYTE_TYPE(enc, ptr); - switch (t) { - INVALID_CASES(ptr, nextTokPtr) - case BT_QUOT: - case BT_APOS: - ptr += MINBPC(enc); - if (t != open) - break; - if (! HAS_CHAR(enc, ptr, end)) - return -XML_TOK_LITERAL; - *nextTokPtr = ptr; - switch (BYTE_TYPE(enc, ptr)) { - case BT_S: - case BT_CR: - case BT_LF: - case BT_GT: - case BT_PERCNT: - case BT_LSQB: - return XML_TOK_LITERAL; - default: - return XML_TOK_INVALID; - } - default: - ptr += MINBPC(enc); - break; - } - } - return XML_TOK_PARTIAL; -} - -static int PTRCALL -PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - int tok; - if (ptr >= end) - return XML_TOK_NONE; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_QUOT: - return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_APOS: - return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_LT: { - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - switch (BYTE_TYPE(enc, ptr)) { - case BT_EXCL: - return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_QUEST: - return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_NMSTRT: - case BT_HEX: - case BT_NONASCII: - case BT_LEAD2: - case BT_LEAD3: - case BT_LEAD4: - *nextTokPtr = ptr - MINBPC(enc); - return XML_TOK_INSTANCE_START; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - case BT_CR: - if (ptr + MINBPC(enc) == end) { - *nextTokPtr = end; - /* indicate that this might be part of a CR/LF pair */ - return -XML_TOK_PROLOG_S; - } - /* fall through */ - case BT_S: - case BT_LF: - for (;;) { - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - break; - switch (BYTE_TYPE(enc, ptr)) { - case BT_S: - case BT_LF: - break; - case BT_CR: - /* don't split CR/LF pair */ - if (ptr + MINBPC(enc) != end) - break; - /* fall through */ - default: - *nextTokPtr = ptr; - return XML_TOK_PROLOG_S; - } - } - *nextTokPtr = ptr; - return XML_TOK_PROLOG_S; - case BT_PERCNT: - return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_COMMA: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_COMMA; - case BT_LSQB: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OPEN_BRACKET; - case BT_RSQB: - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return -XML_TOK_CLOSE_BRACKET; - if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { - REQUIRE_CHARS(enc, ptr, end, 2); - if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { - *nextTokPtr = ptr + 2 * MINBPC(enc); - return XML_TOK_COND_SECT_CLOSE; - } - } - *nextTokPtr = ptr; - return XML_TOK_CLOSE_BRACKET; - case BT_LPAR: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OPEN_PAREN; - case BT_RPAR: - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return -XML_TOK_CLOSE_PAREN; - switch (BYTE_TYPE(enc, ptr)) { - case BT_AST: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_ASTERISK; - case BT_QUEST: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_QUESTION; - case BT_PLUS: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_PLUS; - case BT_CR: - case BT_LF: - case BT_S: - case BT_GT: - case BT_COMMA: - case BT_VERBAR: - case BT_RPAR: - *nextTokPtr = ptr; - return XML_TOK_CLOSE_PAREN; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - case BT_VERBAR: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OR; - case BT_GT: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DECL_CLOSE; - case BT_NUM: - return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ - ptr += n; \ - tok = XML_TOK_NAME; \ - break; \ - } \ - if (IS_NAME_CHAR(enc, ptr, n)) { \ - ptr += n; \ - tok = XML_TOK_NMTOKEN; \ - break; \ - } \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_NMSTRT: - case BT_HEX: - tok = XML_TOK_NAME; - ptr += MINBPC(enc); - break; - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: -# ifdef XML_NS - case BT_COLON: -# endif - tok = XML_TOK_NMTOKEN; - ptr += MINBPC(enc); - break; - case BT_NONASCII: - if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { - ptr += MINBPC(enc); - tok = XML_TOK_NAME; - break; - } - if (IS_NAME_CHAR_MINBPC(enc, ptr)) { - ptr += MINBPC(enc); - tok = XML_TOK_NMTOKEN; - break; - } - /* fall through */ - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_GT: - case BT_RPAR: - case BT_COMMA: - case BT_VERBAR: - case BT_LSQB: - case BT_PERCNT: - case BT_S: - case BT_CR: - case BT_LF: - *nextTokPtr = ptr; - return tok; -# ifdef XML_NS - case BT_COLON: - ptr += MINBPC(enc); - switch (tok) { - case XML_TOK_NAME: - REQUIRE_CHAR(enc, ptr, end); - tok = XML_TOK_PREFIXED_NAME; - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - default: - tok = XML_TOK_NMTOKEN; - break; - } - break; - case XML_TOK_PREFIXED_NAME: - tok = XML_TOK_NMTOKEN; - break; - } - break; -# endif - case BT_PLUS: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_PLUS; - case BT_AST: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_ASTERISK; - case BT_QUEST: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_QUESTION; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return -tok; -} - -static int PTRCALL -PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - const char *start; - if (ptr >= end) - return XML_TOK_NONE; - else if (! HAS_CHAR(enc, ptr, end)) { - /* This line cannot be executed. The incoming data has already - * been tokenized once, so incomplete characters like this have - * already been eliminated from the input. Retaining the paranoia - * check is still valuable, however. - */ - return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */ - } - start = ptr; - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_AMP: - if (ptr == start) - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_LT: - /* this is for inside entity references */ - *nextTokPtr = ptr; - return XML_TOK_INVALID; - case BT_LF: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_CR: - if (ptr == start) { - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_S: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_ATTRIBUTE_VALUE_S; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -static int PTRCALL -PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - const char *start; - if (ptr >= end) - return XML_TOK_NONE; - else if (! HAS_CHAR(enc, ptr, end)) { - /* This line cannot be executed. The incoming data has already - * been tokenized once, so incomplete characters like this have - * already been eliminated from the input. Retaining the paranoia - * check is still valuable, however. - */ - return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */ - } - start = ptr; - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_AMP: - if (ptr == start) - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_PERCNT: - if (ptr == start) { - int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); - return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_LF: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_CR: - if (ptr == start) { - ptr += MINBPC(enc); - if (! HAS_CHAR(enc, ptr, end)) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -# ifdef XML_DTD - -static int PTRCALL -PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - int level = 0; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - end = ptr + n; - } - } - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { - INVALID_CASES(ptr, nextTokPtr) - case BT_LT: - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { - ++level; - ptr += MINBPC(enc); - } - } - break; - case BT_RSQB: - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { - ptr += MINBPC(enc); - REQUIRE_CHAR(enc, ptr, end); - if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr += MINBPC(enc); - if (level == 0) { - *nextTokPtr = ptr; - return XML_TOK_IGNORE_SECT; - } - --level; - } - } - break; - default: - ptr += MINBPC(enc); - break; - } - } - return XML_TOK_PARTIAL; -} - -# endif /* XML_DTD */ - -static int PTRCALL -PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, - const char **badPtr) { - ptr += MINBPC(enc); - end -= MINBPC(enc); - for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) { - switch (BYTE_TYPE(enc, ptr)) { - case BT_DIGIT: - case BT_HEX: - case BT_MINUS: - case BT_APOS: - case BT_LPAR: - case BT_RPAR: - case BT_PLUS: - case BT_COMMA: - case BT_SOL: - case BT_EQUALS: - case BT_QUEST: - case BT_CR: - case BT_LF: - case BT_SEMI: - case BT_EXCL: - case BT_AST: - case BT_PERCNT: - case BT_NUM: -# ifdef XML_NS - case BT_COLON: -# endif - break; - case BT_S: - if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { - *badPtr = ptr; - return 0; - } - break; - case BT_NAME: - case BT_NMSTRT: - if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f)) - break; - /* fall through */ - default: - switch (BYTE_TO_ASCII(enc, ptr)) { - case 0x24: /* $ */ - case 0x40: /* @ */ - break; - default: - *badPtr = ptr; - return 0; - } - break; - } - } - return 1; -} - -/* This must only be called for a well-formed start-tag or empty - element tag. Returns the number of attributes. Pointers to the - first attsMax attributes are stored in atts. -*/ - -static int PTRCALL -PREFIX(getAtts)(const ENCODING *enc, const char *ptr, int attsMax, - ATTRIBUTE *atts) { - enum { other, inName, inValue } state = inName; - int nAtts = 0; - int open = 0; /* defined when state == inValue; - initialization just to shut up compilers */ - - for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { - switch (BYTE_TYPE(enc, ptr)) { -# define START_NAME \ - if (state == other) { \ - if (nAtts < attsMax) { \ - atts[nAtts].name = ptr; \ - atts[nAtts].normalized = 1; \ - } \ - state = inName; \ - } -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - START_NAME ptr += (n - MINBPC(enc)); \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_NONASCII: - case BT_NMSTRT: - case BT_HEX: - START_NAME - break; -# undef START_NAME - case BT_QUOT: - if (state != inValue) { - if (nAtts < attsMax) - atts[nAtts].valuePtr = ptr + MINBPC(enc); - state = inValue; - open = BT_QUOT; - } else if (open == BT_QUOT) { - state = other; - if (nAtts < attsMax) - atts[nAtts].valueEnd = ptr; - nAtts++; - } - break; - case BT_APOS: - if (state != inValue) { - if (nAtts < attsMax) - atts[nAtts].valuePtr = ptr + MINBPC(enc); - state = inValue; - open = BT_APOS; - } else if (open == BT_APOS) { - state = other; - if (nAtts < attsMax) - atts[nAtts].valueEnd = ptr; - nAtts++; - } - break; - case BT_AMP: - if (nAtts < attsMax) - atts[nAtts].normalized = 0; - break; - case BT_S: - if (state == inName) - state = other; - else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized - && (ptr == atts[nAtts].valuePtr - || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE - || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE - || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) - atts[nAtts].normalized = 0; - break; - case BT_CR: - case BT_LF: - /* This case ensures that the first attribute name is counted - Apart from that we could just change state on the quote. */ - if (state == inName) - state = other; - else if (state == inValue && nAtts < attsMax) - atts[nAtts].normalized = 0; - break; - case BT_GT: - case BT_SOL: - if (state != inValue) - return nAtts; - break; - default: - break; - } - } - /* not reached */ -} - -static int PTRFASTCALL -PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) { - int result = 0; - /* skip &# */ - UNUSED_P(enc); - ptr += 2 * MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_x)) { - for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); - ptr += MINBPC(enc)) { - int c = BYTE_TO_ASCII(enc, ptr); - switch (c) { - case ASCII_0: - case ASCII_1: - case ASCII_2: - case ASCII_3: - case ASCII_4: - case ASCII_5: - case ASCII_6: - case ASCII_7: - case ASCII_8: - case ASCII_9: - result <<= 4; - result |= (c - ASCII_0); - break; - case ASCII_A: - case ASCII_B: - case ASCII_C: - case ASCII_D: - case ASCII_E: - case ASCII_F: - result <<= 4; - result += 10 + (c - ASCII_A); - break; - case ASCII_a: - case ASCII_b: - case ASCII_c: - case ASCII_d: - case ASCII_e: - case ASCII_f: - result <<= 4; - result += 10 + (c - ASCII_a); - break; - } - if (result >= 0x110000) - return -1; - } - } else { - for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { - int c = BYTE_TO_ASCII(enc, ptr); - result *= 10; - result += (c - ASCII_0); - if (result >= 0x110000) - return -1; - } - } - return checkCharRefNumber(result); -} - -static int PTRCALL -PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, - const char *end) { - UNUSED_P(enc); - switch ((end - ptr) / MINBPC(enc)) { - case 2: - if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_l: - return ASCII_LT; - case ASCII_g: - return ASCII_GT; - } - } - break; - case 3: - if (CHAR_MATCHES(enc, ptr, ASCII_a)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_m)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_p)) - return ASCII_AMP; - } - } - break; - case 4: - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_q: - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_u)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_o)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_t)) - return ASCII_QUOT; - } - } - break; - case ASCII_a: - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_p)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_o)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_s)) - return ASCII_APOS; - } - } - break; - } - } - return 0; -} - -static int PTRCALL -PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, - const char *end1, const char *ptr2) { - UNUSED_P(enc); - for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { - if (end1 - ptr1 < MINBPC(enc)) { - /* This line cannot be executed. The incoming data has already - * been tokenized once, so incomplete characters like this have - * already been eliminated from the input. Retaining the - * paranoia check is still valuable, however. - */ - return 0; /* LCOV_EXCL_LINE */ - } - if (! CHAR_MATCHES(enc, ptr1, *ptr2)) - return 0; - } - return ptr1 == end1; -} - -static int PTRFASTCALL -PREFIX(nameLength)(const ENCODING *enc, const char *ptr) { - const char *start = ptr; - for (;;) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_NONASCII: - case BT_NMSTRT: -# ifdef XML_NS - case BT_COLON: -# endif - case BT_HEX: - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: - ptr += MINBPC(enc); - break; - default: - return (int)(ptr - start); - } - } -} - -static const char *PTRFASTCALL -PREFIX(skipS)(const ENCODING *enc, const char *ptr) { - for (;;) { - switch (BYTE_TYPE(enc, ptr)) { - case BT_LF: - case BT_CR: - case BT_S: - ptr += MINBPC(enc); - break; - default: - return ptr; - } - } -} - -static void PTRCALL -PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, - POSITION *pos) { - while (HAS_CHAR(enc, ptr, end)) { - switch (BYTE_TYPE(enc, ptr)) { -# define LEAD_CASE(n) \ - case BT_LEAD##n: \ - ptr += n; \ - break; - LEAD_CASE(2) - LEAD_CASE(3) - LEAD_CASE(4) -# undef LEAD_CASE - case BT_LF: - pos->columnNumber = (XML_Size)-1; - pos->lineNumber++; - ptr += MINBPC(enc); - break; - case BT_CR: - pos->lineNumber++; - ptr += MINBPC(enc); - if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - pos->columnNumber = (XML_Size)-1; - break; - default: - ptr += MINBPC(enc); - break; - } - pos->columnNumber++; - } -} - -# undef DO_LEAD_CASE -# undef MULTIBYTE_CASES -# undef INVALID_CASES -# undef CHECK_NAME_CASE -# undef CHECK_NAME_CASES -# undef CHECK_NMSTRT_CASE -# undef CHECK_NMSTRT_CASES - -#endif /* XML_TOK_IMPL_C */ diff --git a/internal/expat/xmltok_impl.h b/internal/expat/xmltok_impl.h deleted file mode 100644 index e925dbc..0000000 --- a/internal/expat/xmltok_impl.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -enum { - BT_NONXML, /* e.g. noncharacter-FFFF */ - BT_MALFORM, /* illegal, with regard to encoding */ - BT_LT, /* less than = "<" */ - BT_AMP, /* ampersand = "&" */ - BT_RSQB, /* right square bracket = "[" */ - BT_LEAD2, /* lead byte of a 2-byte UTF-8 character */ - BT_LEAD3, /* lead byte of a 3-byte UTF-8 character */ - BT_LEAD4, /* lead byte of a 4-byte UTF-8 character */ - BT_TRAIL, /* trailing unit, e.g. second 16-bit unit of a 4-byte char. */ - BT_CR, /* carriage return = "\r" */ - BT_LF, /* line feed = "\n" */ - BT_GT, /* greater than = ">" */ - BT_QUOT, /* quotation character = "\"" */ - BT_APOS, /* aposthrophe = "'" */ - BT_EQUALS, /* equal sign = "=" */ - BT_QUEST, /* question mark = "?" */ - BT_EXCL, /* exclamation mark = "!" */ - BT_SOL, /* solidus, slash = "/" */ - BT_SEMI, /* semicolon = ";" */ - BT_NUM, /* number sign = "#" */ - BT_LSQB, /* left square bracket = "[" */ - BT_S, /* white space, e.g. "\t", " "[, "\r"] */ - BT_NMSTRT, /* non-hex name start letter = "G".."Z" + "g".."z" + "_" */ - BT_COLON, /* colon = ":" */ - BT_HEX, /* hex letter = "A".."F" + "a".."f" */ - BT_DIGIT, /* digit = "0".."9" */ - BT_NAME, /* dot and middle dot = "." + chr(0xb7) */ - BT_MINUS, /* minus = "-" */ - BT_OTHER, /* known not to be a name or name start character */ - BT_NONASCII, /* might be a name or name start character */ - BT_PERCNT, /* percent sign = "%" */ - BT_LPAR, /* left parenthesis = "(" */ - BT_RPAR, /* right parenthesis = "(" */ - BT_AST, /* asterisk = "*" */ - BT_PLUS, /* plus sign = "+" */ - BT_COMMA, /* comma = "," */ - BT_VERBAR /* vertical bar = "|" */ -}; - -#include diff --git a/internal/expat/xmltok_ns.c b/internal/expat/xmltok_ns.c deleted file mode 100644 index 919c74e..0000000 --- a/internal/expat/xmltok_ns.c +++ /dev/null @@ -1,118 +0,0 @@ -/* This file is included! - __ __ _ - ___\ \/ /_ __ __ _| |_ - / _ \\ /| '_ \ / _` | __| - | __// \| |_) | (_| | |_ - \___/_/\_\ .__/ \__,_|\__| - |_| XML parser - - Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000-2017 Expat development team - Licensed under the MIT license: - - 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. -*/ - -#ifdef XML_TOK_NS_C - -const ENCODING * -NS(XmlGetUtf8InternalEncoding)(void) { - return &ns(internal_utf8_encoding).enc; -} - -const ENCODING * -NS(XmlGetUtf16InternalEncoding)(void) { -# if BYTEORDER == 1234 - return &ns(internal_little2_encoding).enc; -# elif BYTEORDER == 4321 - return &ns(internal_big2_encoding).enc; -# else - const short n = 1; - return (*(const char *)&n ? &ns(internal_little2_encoding).enc - : &ns(internal_big2_encoding).enc); -# endif -} - -static const ENCODING *const NS(encodings)[] = { - &ns(latin1_encoding).enc, &ns(ascii_encoding).enc, - &ns(utf8_encoding).enc, &ns(big2_encoding).enc, - &ns(big2_encoding).enc, &ns(little2_encoding).enc, - &ns(utf8_encoding).enc /* NO_ENC */ -}; - -static int PTRCALL -NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, - ptr, end, nextTokPtr); -} - -static int PTRCALL -NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) { - return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, - ptr, end, nextTokPtr); -} - -int -NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, - const char *name) { - int i = getEncodingIndex(name); - if (i == UNKNOWN_ENC) - return 0; - SET_INIT_ENC_INDEX(p, i); - p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); - p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); - p->initEnc.updatePosition = initUpdatePosition; - p->encPtr = encPtr; - *encPtr = &(p->initEnc); - return 1; -} - -static const ENCODING * -NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) { -# define ENCODING_MAX 128 - char buf[ENCODING_MAX]; - char *p = buf; - int i; - XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); - if (ptr != end) - return 0; - *p = 0; - if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) - return enc; - i = getEncodingIndex(buf); - if (i == UNKNOWN_ENC) - return 0; - return NS(encodings)[i]; -} - -int -NS(XmlParseXmlDecl)(int isGeneralTextEntity, const ENCODING *enc, - const char *ptr, const char *end, const char **badPtr, - const char **versionPtr, const char **versionEndPtr, - const char **encodingName, const ENCODING **encoding, - int *standalone) { - return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end, - badPtr, versionPtr, versionEndPtr, encodingName, - encoding, standalone); -} - -#endif /* XML_TOK_NS_C */ diff --git a/internal/graphviz_version.h b/internal/graphviz_version.h deleted file mode 100644 index c3e5ffd..0000000 --- a/internal/graphviz_version.h +++ /dev/null @@ -1,8 +0,0 @@ -#define GVPLUGIN_CONFIG_FILE "config6" -#define GVPLUGIN_VERSION 6 -#define PACKAGE_BUGREPORT "http://www.graphviz.org/" -#define PACKAGE_NAME "graphviz" -#define PACKAGE_STRING "graphviz 2.40.1" -#define PACKAGE_TARNAME "graphviz" -#define PACKAGE_URL "" -#define PACKAGE_VERSION "2.40.1" diff --git a/internal/plugin/core/dummy.go b/internal/plugin/core/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/core/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/core/gvloadimage_core.c b/internal/plugin/core/gvloadimage_core.c deleted file mode 100644 index eb85c3c..0000000 --- a/internal/plugin/core/gvloadimage_core.c +++ /dev/null @@ -1,360 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#if HAVE_SYS_MMAN_H -#include -#endif -#ifdef _MSC_VER -#include -#endif - -#include "gvplugin_loadimage.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvio.h" - -extern void core_loadimage_xdot(GVJ_t*, usershape_t*, boxf, boolean); -extern shape_desc *find_user_shape(char *name); - -typedef enum { - FORMAT_PNG_XDOT, FORMAT_GIF_XDOT, FORMAT_JPEG_XDOT, FORMAT_SVG_XDOT, FORMAT_PS_XDOT, - FORMAT_PNG_DOT, FORMAT_GIF_DOT, FORMAT_JPEG_DOT, FORMAT_SVG_DOT, FORMAT_PS_DOT, - FORMAT_PNG_MAP, FORMAT_GIF_MAP, FORMAT_JPEG_MAP, FORMAT_SVG_MAP, FORMAT_PS_MAP, - FORMAT_PNG_SVG, FORMAT_GIF_SVG, FORMAT_JPEG_SVG, FORMAT_SVG_SVG, - FORMAT_PNG_FIG, FORMAT_GIF_FIG, FORMAT_JPEG_FIG, - FORMAT_PNG_VRML, FORMAT_GIF_VRML, FORMAT_JPEG_VRML, - FORMAT_PS_PS, FORMAT_PSLIB_PS, - FORMAT_PNG_VML, FORMAT_GIF_VML, FORMAT_JPEG_VML, - FORMAT_GIF_TK, -} format_type; - -static void core_loadimage_svg(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - - double width = (b.UR.x-b.LL.x); - double height = (b.UR.y-b.LL.y); - double originx = (b.UR.x+b.LL.x - width)/2; - double originy = (b.UR.y+b.LL.y + height)/2; - assert(job); - assert(us); - assert(us->name); - - gvputs(job, "name); - if (job->rotation) { - -// FIXME - this is messed up >>> - gvprintf (job, "\" width=\"%gpx\" height=\"%gpx\" preserveAspectRatio=\"xMidYMid meet\" x=\"%g\" y=\"%g\"", - height, width, originx, -originy); - gvprintf (job, " transform=\"rotate(%d %g %g)\"", - job->rotation, originx, -originy); -// <<< - } - else { - gvprintf (job, "\" width=\"%gpx\" height=\"%gpx\" preserveAspectRatio=\"xMinYMin meet\" x=\"%g\" y=\"%g\"", - width, height, originx, -originy); - } - gvputs(job, "/>\n"); -} - -static void core_loadimage_fig(GVJ_t * job, usershape_t *us, boxf bf, boolean filled) -{ - int object_code = 2; /* always 2 for polyline */ - int sub_type = 5; /* always 5 for image */ - int line_style = 0; /* solid, dotted, dashed */ - int thickness = 0; - int pen_color = 0; - int fill_color = -1; - int depth = 1; - int pen_style = -1; /* not used */ - int area_fill = 0; - double style_val = 0.0; - int join_style = 0; - int cap_style = 0; - int radius = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = 5; - int flipped = 0; - - box b; - - assert(job); - assert(us); - assert(us->name); - - BF2B(bf, b); - - gvprintf(job, "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n %d %s\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, join_style, - cap_style, radius, forward_arrow, backward_arrow, npoints, - flipped, us->name); - gvprintf(job," %d %d %d %d %d %d %d %d %d %d\n", - b.LL.x, b.LL.y, - b.LL.x, b.UR.y, - b.UR.x, b.UR.y, - b.UR.x, b.LL.y, - b.LL.x, b.LL.y); -} - -static void core_loadimage_vrml(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - obj_state_t *obj; - node_t *n; - - assert(job); - obj = job->obj; - assert(obj); - assert(us); - assert(us->name); - - n = job->obj->u.n; - assert(n); - - gvprintf(job, "Shape {\n"); - gvprintf(job, " appearance Appearance {\n"); - gvprintf(job, " material Material {\n"); - gvprintf(job, " ambientIntensity 0.33\n"); - gvprintf(job, " diffuseColor 1 1 1\n"); - gvprintf(job, " }\n"); - gvprintf(job, " texture ImageTexture { url \"%s\" }\n", us->name); - gvprintf(job, " }\n"); - gvprintf(job, "}\n"); -} - -static void ps_freeimage(usershape_t *us) -{ -#if HAVE_SYS_MMAN_H - munmap(us->data, us->datasize); -#else - free(us->data); -#endif -} - -/* usershape described by a postscript file */ -static void core_loadimage_ps(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree != ps_freeimage) { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - us->datasize = 0; - } - } - - if (!us->data) { /* read file into cache */ - int fd; - struct stat statbuf; - - if (!gvusershape_file_access(us)) - return; - fd = fileno(us->f); - switch (us->type) { - case FT_PS: - case FT_EPS: - fstat(fd, &statbuf); - us->datasize = statbuf.st_size; -#if HAVE_SYS_MMAN_H - us->data = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); -#else - us->data = malloc(statbuf.st_size); - read(fd, us->data, statbuf.st_size); -#endif - us->must_inline = TRUE; - break; - default: - break; - } - if (us->data) - us->datafree = ps_freeimage; - gvusershape_file_release(us); - } - - if (us->data) { - gvprintf(job, "gsave %g %g translate newpath\n", - b.LL.x - (double)(us->x), b.LL.y - (double)(us->y)); - if (us->must_inline) - epsf_emit_body(job, us); - else - gvprintf(job, "user_shape_%d\n", us->macro_id); - gvprintf(job, "grestore\n"); - } -} - -/* usershape described by a member of a postscript library */ -static void core_loadimage_pslib(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - int i; - pointf AF[4]; - shape_desc *shape; - - assert(job); - assert(us); - assert(us->name); - - if ((shape = (shape_desc*)us->data)) { - AF[0] = b.LL; - AF[2] = b.UR; - AF[1].x = AF[0].x; - AF[1].y = AF[2].y; - AF[3].x = AF[2].x; - AF[3].y = AF[0].y; - if (filled) { -// ps_begin_context(); -// ps_set_color(S[SP].fillcolor); - gvprintf(job, "[ "); - for (i = 0; i < 4; i++) - gvprintf(job, "%g %g ", AF[i].x, AF[i].y); - gvprintf(job, "%g %g ", AF[0].x, AF[0].y); - gvprintf(job, "] %d true %s\n", 4, us->name); -// ps_end_context(); - } - gvprintf(job, "[ "); - for (i = 0; i < 4; i++) - gvprintf(job, "%g %g ", AF[i].x, AF[i].y); - gvprintf(job, "%g %g ", AF[0].x, AF[0].y); - gvprintf(job, "] %d false %s\n", 4, us->name); - } -} - -static void core_loadimage_vml(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - unsigned int graphHeight; - graphHeight =(int)(job->bb.UR.y - job->bb.LL.y); - gvprintf (job, "name, b.UR.x - b.LL.x, b.UR.y - b.LL.y, b.LL.x, graphHeight-b.UR.y); - gvputs(job, " />\n"); -} - -static void core_loadimage_tk(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - gvprintf (job, "image create photo \"photo_%s\" -file \"%s\"\n", - us->name, us->name); - gvprintf (job, "$c create image %.2f %.2f -image \"photo_%s\"\n", - us->name, (b.UR.x + b.LL.x) / 2, (b.UR.y + b.LL.y) / 2); -} - -void core_loadimage_null(GVJ_t *gvc, usershape_t *us, boxf b, boolean filled) -{ - /* null function - basically suppress the missing loader message */ -} - -static gvloadimage_engine_t engine_svg = { - core_loadimage_svg -}; - -static gvloadimage_engine_t engine_fig = { - core_loadimage_fig -}; - -static gvloadimage_engine_t engine_vrml = { - core_loadimage_vrml -}; - -static gvloadimage_engine_t engine_ps = { - core_loadimage_ps -}; - -static gvloadimage_engine_t engine_pslib = { - core_loadimage_pslib -}; - -static gvloadimage_engine_t engine_null = { - core_loadimage_null -}; - -static gvloadimage_engine_t engine_xdot = { - core_loadimage_xdot -}; - -static gvloadimage_engine_t engine_vml = { - core_loadimage_vml -}; - -static gvloadimage_engine_t engine_tk = { - core_loadimage_tk -}; - -gvplugin_installed_t gvloadimage_core_types[] = { - {FORMAT_PNG_SVG, "png:svg", 1, &engine_svg, NULL}, - {FORMAT_GIF_SVG, "gif:svg", 1, &engine_svg, NULL}, - {FORMAT_JPEG_SVG, "jpeg:svg", 1, &engine_svg, NULL}, - {FORMAT_JPEG_SVG, "jpe:svg", 1, &engine_svg, NULL}, - {FORMAT_JPEG_SVG, "jpg:svg", 1, &engine_svg, NULL}, - - {FORMAT_PNG_FIG, "png:fig", 1, &engine_fig, NULL}, - {FORMAT_GIF_FIG, "gif:fig", 1, &engine_fig, NULL}, - {FORMAT_JPEG_FIG, "jpeg:fig", 1, &engine_fig, NULL}, - {FORMAT_JPEG_FIG, "jpe:fig", 1, &engine_fig, NULL}, - {FORMAT_JPEG_FIG, "jpg:fig", 1, &engine_fig, NULL}, - - {FORMAT_PNG_VRML, "png:vrml", 1, &engine_vrml, NULL}, - {FORMAT_GIF_VRML, "gif:vrml", 1, &engine_vrml, NULL}, - {FORMAT_JPEG_VRML, "jpeg:vrml", 1, &engine_vrml, NULL}, - {FORMAT_JPEG_VRML, "jpe:vrml", 1, &engine_vrml, NULL}, - {FORMAT_JPEG_VRML, "jpg:vrml", 1, &engine_vrml, NULL}, - - {FORMAT_PS_PS, "eps:ps", 1, &engine_ps, NULL}, - {FORMAT_PS_PS, "ps:ps", 1, &engine_ps, NULL}, - {FORMAT_PSLIB_PS, "(lib):ps", 1, &engine_pslib, NULL}, /* for pslib */ - - {FORMAT_PNG_MAP, "png:map", 1, &engine_null, NULL}, - {FORMAT_GIF_MAP, "gif:map", 1, &engine_null, NULL}, - {FORMAT_JPEG_MAP, "jpeg:map", 1, &engine_null, NULL}, - {FORMAT_JPEG_MAP, "jpe:map", 1, &engine_null, NULL}, - {FORMAT_JPEG_MAP, "jpg:map", 1, &engine_null, NULL}, - {FORMAT_PS_MAP, "ps:map", 1, &engine_null, NULL}, - {FORMAT_PS_MAP, "eps:map", 1, &engine_null, NULL}, - {FORMAT_SVG_MAP, "svg:map", 1, &engine_null, NULL}, - - {FORMAT_PNG_DOT, "png:dot", 1, &engine_null, NULL}, - {FORMAT_GIF_DOT, "gif:dot", 1, &engine_null, NULL}, - {FORMAT_JPEG_DOT, "jpeg:dot", 1, &engine_null, NULL}, - {FORMAT_JPEG_DOT, "jpe:dot", 1, &engine_null, NULL}, - {FORMAT_JPEG_DOT, "jpg:dot", 1, &engine_null, NULL}, - {FORMAT_PS_DOT, "ps:dot", 1, &engine_null, NULL}, - {FORMAT_PS_DOT, "eps:dot", 1, &engine_null, NULL}, - {FORMAT_SVG_DOT, "svg:dot", 1, &engine_null, NULL}, - - {FORMAT_PNG_XDOT, "png:xdot", 1, &engine_xdot, NULL}, - {FORMAT_GIF_XDOT, "gif:xdot", 1, &engine_xdot, NULL}, - {FORMAT_JPEG_XDOT, "jpeg:xdot", 1, &engine_xdot, NULL}, - {FORMAT_JPEG_XDOT, "jpe:xdot", 1, &engine_xdot, NULL}, - {FORMAT_JPEG_XDOT, "jpg:xdot", 1, &engine_xdot, NULL}, - {FORMAT_PS_XDOT, "ps:xdot", 1, &engine_xdot, NULL}, - {FORMAT_PS_XDOT, "eps:xdot", 1, &engine_xdot, NULL}, - {FORMAT_SVG_XDOT, "svg:xdot", 1, &engine_xdot, NULL}, - - {FORMAT_SVG_SVG, "svg:svg", 1, &engine_svg, NULL}, - - {FORMAT_PNG_VML, "png:vml", 1, &engine_vml, NULL}, - {FORMAT_GIF_VML, "gif:vml", 1, &engine_vml, NULL}, - {FORMAT_JPEG_VML, "jpeg:vml", 1, &engine_vml, NULL}, - {FORMAT_JPEG_VML, "jpe:vml", 1, &engine_vml, NULL}, - {FORMAT_JPEG_VML, "jpg:vml", 1, &engine_vml, NULL}, - - {FORMAT_GIF_TK, "gif:tk", 1, &engine_tk, NULL}, - - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvplugin_core.c b/internal/plugin/core/gvplugin_core.c deleted file mode 100644 index 53d7866..0000000 --- a/internal/plugin/core/gvplugin_core.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_dot_types[]; -extern gvplugin_installed_t gvdevice_fig_types[]; -extern gvplugin_installed_t gvdevice_map_types[]; -#if !defined(WIN32) -extern gvplugin_installed_t gvdevice_mp_types[]; -#endif -extern gvplugin_installed_t gvdevice_ps_types[]; -extern gvplugin_installed_t gvdevice_svg_types[]; -#if !defined(WIN32) -extern gvplugin_installed_t gvdevice_json_types[]; -#endif -extern gvplugin_installed_t gvdevice_tk_types[]; -extern gvplugin_installed_t gvdevice_vml_types[]; -extern gvplugin_installed_t gvdevice_pic_types[]; -extern gvplugin_installed_t gvdevice_pov_types[]; - -extern gvplugin_installed_t gvrender_dot_types[]; -extern gvplugin_installed_t gvrender_fig_types[]; -extern gvplugin_installed_t gvrender_map_types[]; -#if !defined(WIN32) -extern gvplugin_installed_t gvrender_mp_types[]; -#endif -extern gvplugin_installed_t gvrender_ps_types[]; -extern gvplugin_installed_t gvrender_svg_types[]; -#if !defined(WIN32) -extern gvplugin_installed_t gvrender_json_types[]; -#endif -extern gvplugin_installed_t gvrender_tk_types[]; -extern gvplugin_installed_t gvrender_vml_types[]; -extern gvplugin_installed_t gvrender_pic_types[]; -extern gvplugin_installed_t gvrender_pov_types[]; - -extern gvplugin_installed_t gvloadimage_core_types[]; - - - - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_dot_types}, - {API_device, gvdevice_fig_types}, - {API_device, gvdevice_map_types}, -#if !defined(WIN32) - {API_device, gvdevice_mp_types}, -#endif - {API_device, gvdevice_ps_types}, - {API_device, gvdevice_svg_types}, -#if !defined(WIN32) - {API_device, gvdevice_json_types}, -#endif - {API_device, gvdevice_tk_types}, - {API_device, gvdevice_vml_types}, - {API_device, gvdevice_pic_types}, - {API_device, gvdevice_pov_types}, - - {API_render, gvrender_dot_types}, - {API_render, gvrender_fig_types}, - {API_render, gvrender_map_types}, -#if !defined(WIN32) - {API_render, gvrender_mp_types}, -#endif - {API_render, gvrender_ps_types}, - {API_render, gvrender_svg_types}, -#if !defined(WIN32) - {API_render, gvrender_json_types}, -#endif - {API_render, gvrender_tk_types}, - {API_render, gvrender_vml_types}, - {API_render, gvrender_pic_types}, - {API_render, gvrender_pov_types}, - - {API_loadimage, gvloadimage_core_types}, - - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL -#ifndef GVPLUGIN_CORE_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_core_LTX_library = { "core", apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_core_LTX_library = { "core", apis }; -#endif -#endif - - - -#ifndef WIN32_DLL -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_core_LTX_library = { "core", apis }; -#else -gvplugin_library_t gvplugin_core_LTX_library = { "core", apis }; -#endif -#endif - - diff --git a/internal/plugin/core/gvrender_core_dot.c b/internal/plugin/core/gvrender_core_dot.c deleted file mode 100644 index 348b7e2..0000000 --- a/internal/plugin/core/gvrender_core_dot.c +++ /dev/null @@ -1,864 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#ifdef WIN32 -#include -#include "compat.h" -#endif - -#include -#include -#include -#include - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvio.h" - -#define GNEW(t) (t*)malloc(sizeof(t)) - -/* #define NEW_XDOT */ - -typedef enum { - FORMAT_DOT, - FORMAT_CANON, - FORMAT_PLAIN, - FORMAT_PLAIN_EXT, - FORMAT_XDOT, - FORMAT_XDOT12, - FORMAT_XDOT14, -} dot_format_type; - -#ifdef WIN32 /*dependencies*/ - #pragma comment( lib, "cgraph.lib" ) - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "xdot.lib" ) -// #pragma comment( lib, "ingraphs.lib" ) -#endif - -#define XDOTVERSION "1.7" - -#define NUMXBUFS (EMIT_HLABEL+1) -/* There are as many xbufs as there are values of emit_state_t. - * However, only the first NUMXBUFS are distinct. Nodes, clusters, and - * edges are drawn atomically, so they share the DRAW and LABEL buffers - */ -static agxbuf xbuf[NUMXBUFS]; -static agxbuf* xbufs[] = { - xbuf+EMIT_GDRAW, xbuf+EMIT_CDRAW, xbuf+EMIT_TDRAW, xbuf+EMIT_HDRAW, - xbuf+EMIT_GLABEL, xbuf+EMIT_CLABEL, xbuf+EMIT_TLABEL, xbuf+EMIT_HLABEL, - xbuf+EMIT_CDRAW, xbuf+EMIT_CDRAW, xbuf+EMIT_CLABEL, xbuf+EMIT_CLABEL, -}; -static double penwidth [] = { - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, -}; -static unsigned int textflags[EMIT_ELABEL+1]; - -typedef struct { - attrsym_t *g_draw; - attrsym_t *g_l_draw; - attrsym_t *n_draw; - attrsym_t *n_l_draw; - attrsym_t *e_draw; - attrsym_t *h_draw; - attrsym_t *t_draw; - attrsym_t *e_l_draw; - attrsym_t *hl_draw; - attrsym_t *tl_draw; - unsigned char buf[NUMXBUFS][BUFSIZ]; - unsigned short version; - char* version_s; -} xdot_state_t; -static xdot_state_t* xd; - -static void xdot_str_xbuf (agxbuf* xb, char* pfx, char* s) -{ - char buf[BUFSIZ]; - - sprintf (buf, "%s%d -", pfx, (int)strlen(s)); - agxbput(xb, buf); - agxbput(xb, s); - agxbputc(xb, ' '); -} - -static void xdot_str (GVJ_t *job, char* pfx, char* s) -{ - emit_state_t emit_state = job->obj->emit_state; - xdot_str_xbuf (xbufs[emit_state], pfx, s); -} - -/* xdot_trim_zeros - * Trailing zeros are removed and decimal point, if possible. - * Add trailing space if addSpace is non-zero. - */ -static void xdot_trim_zeros (char* buf, int addSpace) -{ - char* dotp; - char* p; - - if ((dotp = strchr (buf,'.'))) { - p = dotp+1; - while (*p) p++; // find end of string - p--; - while (*p == '0') *p-- = '\0'; - if (*p == '.') // If all decimals were zeros, remove ".". - *p = '\0'; - else - p++; - } - else if (addSpace) - p = buf + strlen(buf); - - if (addSpace) { /* p points to null byte */ - *p++ = ' '; - *p = '\0'; - } -} - -/* xdot_fmt_num: - * Convert double to string with space at end. - * Trailing zeros are removed and decimal point, if possible. - */ -static void xdot_fmt_num (char* buf, double v) -{ - // Prevents values like -0 - if (v > -0.00000001 && v < 0.00000001) - { - v = 0; - } - sprintf(buf, "%.02f", v); - xdot_trim_zeros (buf, 1); -} - -static void _xdot_point(agxbuf *xbuf, pointf p) -{ - char buf[BUFSIZ]; - xdot_fmt_num (buf, p.x); - agxbput(xbuf, buf); - xdot_fmt_num (buf, yDir(p.y)); - agxbput(xbuf, buf); -} - -static void xdot_num(agxbuf *xbuf, double v) -{ - char buf[BUFSIZ]; - xdot_fmt_num (buf, v); - agxbput(xbuf, buf); -} - -static void xdot_points(GVJ_t *job, char c, pointf * A, int n) -{ - emit_state_t emit_state = job->obj->emit_state; - char buf[BUFSIZ]; - int i; - - agxbputc(xbufs[emit_state], c); - sprintf(buf, " %d ", n); - agxbput(xbufs[emit_state], buf); - for (i = 0; i < n; i++) - _xdot_point(xbufs[emit_state], A[i]); -} - -static char* -color2str (unsigned char rgba[4]) -{ - static char buf [10]; - - if (rgba[3] == 0xFF) - sprintf (buf, "#%02x%02x%02x", rgba[0], rgba[1], rgba[2]); - else - sprintf (buf, "#%02x%02x%02x%02x", rgba[0], rgba[1], rgba[2], rgba[3]); - return buf; -} - -static void xdot_pencolor (GVJ_t *job) -{ - xdot_str (job, "c ", color2str (job->obj->pencolor.u.rgba)); -} - -static void xdot_fillcolor (GVJ_t *job) -{ - xdot_str (job, "C ", color2str (job->obj->fillcolor.u.rgba)); -} - -static void xdot_style (GVJ_t *job) -{ - unsigned char buf0[BUFSIZ]; - char buf [128]; /* enough to hold a double */ - agxbuf xbuf; - char* p, **s; - int more; - - agxbinit(&xbuf, BUFSIZ, buf0); - - /* First, check if penwidth state is correct */ - if (job->obj->penwidth != penwidth[job->obj->emit_state]) { - penwidth[job->obj->emit_state] = job->obj->penwidth; - agxbput (&xbuf, "setlinewidth("); - sprintf (buf, "%.3f", job->obj->penwidth); - xdot_trim_zeros (buf, 0); - agxbput(&xbuf, buf); - agxbputc (&xbuf, ')'); - xdot_str (job, "S ", agxbuse(&xbuf)); - } - - /* now process raw style, if any */ - s = job->obj->rawstyle; - if (!s) - return; - - while ((p = *s++)) { - if (streq(p, "filled") || streq(p, "bold") || streq(p, "setlinewidth")) continue; - agxbput(&xbuf, p); - while (*p) - p++; - p++; - if (*p) { /* arguments */ - agxbputc(&xbuf, '('); - more = 0; - while (*p) { - if (more) - agxbputc(&xbuf, ','); - agxbput(&xbuf, p); - while (*p) p++; - p++; - more++; - } - agxbputc(&xbuf, ')'); - } - xdot_str (job, "S ", agxbuse(&xbuf)); - } - - agxbfree(&xbuf); - -} - -static void xdot_end_node(GVJ_t* job) -{ - Agnode_t* n = job->obj->u.n; - if (agxblen(xbufs[EMIT_NDRAW])) - agxset(n, xd->n_draw, agxbuse(xbufs[EMIT_NDRAW])); - if (agxblen(xbufs[EMIT_NLABEL])) - agxset(n, xd->n_l_draw, agxbuse(xbufs[EMIT_NLABEL])); - penwidth[EMIT_NDRAW] = 1; - penwidth[EMIT_NLABEL] = 1; - textflags[EMIT_NDRAW] = 0; - textflags[EMIT_NLABEL] = 0; -} - -static void xdot_end_edge(GVJ_t* job) -{ - Agedge_t* e = job->obj->u.e; - - if (agxblen(xbufs[EMIT_EDRAW])) - agxset(e, xd->e_draw, agxbuse(xbufs[EMIT_EDRAW])); - if (agxblen(xbufs[EMIT_TDRAW])) - agxset(e, xd->t_draw, agxbuse(xbufs[EMIT_TDRAW])); - if (agxblen(xbufs[EMIT_HDRAW])) - agxset(e, xd->h_draw, agxbuse(xbufs[EMIT_HDRAW])); - if (agxblen(xbufs[EMIT_ELABEL])) - agxset(e, xd->e_l_draw,agxbuse(xbufs[EMIT_ELABEL])); - if (agxblen(xbufs[EMIT_TLABEL])) - agxset(e, xd->tl_draw, agxbuse(xbufs[EMIT_TLABEL])); - if (agxblen(xbufs[EMIT_HLABEL])) - agxset(e, xd->hl_draw, agxbuse(xbufs[EMIT_HLABEL])); - penwidth[EMIT_EDRAW] = 1; - penwidth[EMIT_ELABEL] = 1; - penwidth[EMIT_TDRAW] = 1; - penwidth[EMIT_HDRAW] = 1; - penwidth[EMIT_TLABEL] = 1; - penwidth[EMIT_HLABEL] = 1; - textflags[EMIT_EDRAW] = 0; - textflags[EMIT_ELABEL] = 0; - textflags[EMIT_TDRAW] = 0; - textflags[EMIT_HDRAW] = 0; - textflags[EMIT_TLABEL] = 0; - textflags[EMIT_HLABEL] = 0; -} - -#ifdef NEW_XDOT -/* xdot_begin_anchor: - * The encoding of which fields are present assumes that one of the fields is present, - * so there is never a 0 after the H. - */ -static void xdot_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target, char *id) -{ - emit_state_t emit_state = job->obj->emit_state; - char buf[3]; /* very small integer */ - unsigned int flags = 0; - - agxbput(xbufs[emit_state], "H "); - if (href) - flags |= 1; - if (tooltip) - flags |= 2; - if (target) - flags |= 4; - sprintf (buf, "%d ", flags); - agxbput(xbufs[emit_state], buf); - if (href) - xdot_str (job, "", href); - if (tooltip) - xdot_str (job, "", tooltip); - if (target) - xdot_str (job, "", target); -} - -static void xdot_end_anchor(GVJ_t * job) -{ - emit_state_t emit_state = job->obj->emit_state; - - agxbput(xbufs[emit_state], "H 0 "); -} -#endif - -static void xdot_end_cluster(GVJ_t * job) -{ - Agraph_t* cluster_g = job->obj->u.sg; - - agxset(cluster_g, xd->g_draw, agxbuse(xbufs[EMIT_CDRAW])); - if (GD_label(cluster_g)) - agxset(cluster_g, xd->g_l_draw, agxbuse(xbufs[EMIT_CLABEL])); - penwidth[EMIT_CDRAW] = 1; - penwidth[EMIT_CLABEL] = 1; - textflags[EMIT_CDRAW] = 0; - textflags[EMIT_CLABEL] = 0; -} - -static unsigned short -versionStr2Version (char* str) -{ - char c, buf[BUFSIZ]; - int n = 0; - char* s = str; - unsigned short us; - - while ((c = *s++)) { - if (isdigit(c)) { - if (n < BUFSIZ-1) buf[n++] = c; - else { - agerr(AGWARN, "xdot version \"%s\" too long", str); - break; - } - } - } - buf[n] = '\0'; - - us = atoi(buf); - return us; -} - -/* - * John M. suggests: - * You might want to add four more: - * - * _ohdraw_ (optional head-end arrow for edges) - * _ohldraw_ (optional head-end label for edges) - * _otdraw_ (optional tail-end arrow for edges) - * _otldraw_ (optional tail-end label for edges) - * - * that would be generated when an additional option is supplied to - * dot, etc. and - * these would be the arrow/label positions to use if a user want to flip the - * direction of an edge (as sometimes is there want). - * - * N.B. John M. asks: - * By the way, I don't know if you ever plan to add other letters for - * the xdot spec, but could you reserve "a" and also "A" (for attribute), - * "n" and also "N" (for numeric), "w" (for sWitch), "s" (for string) - * and "t" (for tooltip) and "x" (for position). We use those letters in - * our drawing spec (and also "<" and ">"), so if you start generating - * output with them, it could break what we have. - */ -static void -xdot_begin_graph (graph_t *g, int s_arrows, int e_arrows, dot_format_type id) -{ - int i, us; - char* s; - - xd = GNEW(xdot_state_t); - - if (id == FORMAT_XDOT14) { - xd->version = 14; - xd->version_s = "1.4"; - } - else if (id == FORMAT_XDOT12) { - xd->version = 12; - xd->version_s = "1.2"; - } - else if ((s = agget(g, "xdotversion")) && s[0] && ((us = versionStr2Version(s)) > 10)) { - xd->version = us; - xd->version_s = s; - } - else { - xd->version = versionStr2Version(XDOTVERSION); - xd->version_s = XDOTVERSION; - } - - if (GD_n_cluster(g)) - xd->g_draw = safe_dcl(g, AGRAPH, "_draw_", ""); - else - xd->g_draw = NULL; - if (GD_has_labels(g) & GRAPH_LABEL) - xd->g_l_draw = safe_dcl(g, AGRAPH, "_ldraw_", ""); - else - xd->g_l_draw = NULL; - - xd->n_draw = safe_dcl(g, AGNODE, "_draw_", ""); - xd->n_l_draw = safe_dcl(g, AGNODE, "_ldraw_", ""); - - xd->e_draw = safe_dcl(g, AGEDGE, "_draw_", ""); - if (e_arrows) - xd->h_draw = safe_dcl(g, AGEDGE, "_hdraw_", ""); - else - xd->h_draw = NULL; - if (s_arrows) - xd->t_draw = safe_dcl(g, AGEDGE, "_tdraw_", ""); - else - xd->t_draw = NULL; - if (GD_has_labels(g) & (EDGE_LABEL|EDGE_XLABEL)) - xd->e_l_draw = safe_dcl(g, AGEDGE, "_ldraw_", ""); - else - xd->e_l_draw = NULL; - if (GD_has_labels(g) & HEAD_LABEL) - xd->hl_draw = safe_dcl(g, AGEDGE, "_hldraw_", ""); - else - xd->hl_draw = NULL; - if (GD_has_labels(g) & TAIL_LABEL) - xd->tl_draw = safe_dcl(g, AGEDGE, "_tldraw_", ""); - else - xd->tl_draw = NULL; - - for (i = 0; i < NUMXBUFS; i++) - agxbinit(xbuf+i, BUFSIZ, xd->buf[i]); -} - -static void dot_begin_graph(GVJ_t *job) -{ - int e_arrows; /* graph has edges with end arrows */ - int s_arrows; /* graph has edges with start arrows */ - graph_t *g = job->obj->u.g; - - switch (job->render.id) { - case FORMAT_DOT: - attach_attrs(g); - break; - case FORMAT_CANON: - if (HAS_CLUST_EDGE(g)) - undoClusterEdges(g); - break; - case FORMAT_PLAIN: - case FORMAT_PLAIN_EXT: - break; - case FORMAT_XDOT: - case FORMAT_XDOT12: - case FORMAT_XDOT14: - attach_attrs_and_arrows(g, &s_arrows, &e_arrows); - xdot_begin_graph(g, s_arrows, e_arrows, job->render.id); - break; - } -} - -static void xdot_end_graph(graph_t* g) -{ - int i; - - if (agxblen(xbufs[EMIT_GDRAW])) { - if (!xd->g_draw) - xd->g_draw = safe_dcl(g, AGRAPH, "_draw_", ""); - agxset(g, xd->g_draw, agxbuse(xbufs[EMIT_GDRAW])); - } - if (GD_label(g)) - agxset(g, xd->g_l_draw, agxbuse(xbufs[EMIT_GLABEL])); - agsafeset (g, "xdotversion", xd->version_s, ""); - - for (i = 0; i < NUMXBUFS; i++) - agxbfree(xbuf+i); - free (xd); - penwidth[EMIT_GDRAW] = 1; - penwidth[EMIT_GLABEL] = 1; - textflags[EMIT_GDRAW] = 0; - textflags[EMIT_GLABEL] = 0; -} - -typedef int (*putstrfn) (void *chan, const char *str); -typedef int (*flushfn) (void *chan); -static void dot_end_graph(GVJ_t *job) -{ - graph_t *g = job->obj->u.g; - Agiodisc_t* io_save; - static Agiodisc_t io; - - if (io.afread == NULL) { - io.afread = AgIoDisc.afread; - io.putstr = (putstrfn)gvputs; - io.flush = (flushfn)gvflush; - } - - io_save = g->clos->disc.io; - g->clos->disc.io = &io; - switch (job->render.id) { - case FORMAT_PLAIN: - write_plain(job, g, (FILE*)job, FALSE); - break; - case FORMAT_PLAIN_EXT: - write_plain(job, g, (FILE*)job, TRUE); - break; - case FORMAT_DOT: - case FORMAT_CANON: - if (!(job->flags & OUTPUT_NOT_REQUIRED)) - agwrite(g, (FILE*)job); - break; - case FORMAT_XDOT: - case FORMAT_XDOT12: - case FORMAT_XDOT14: - xdot_end_graph(g); - if (!(job->flags & OUTPUT_NOT_REQUIRED)) - agwrite(g, (FILE*)job); - break; - } - g->clos->disc.io = io_save; -} - -static unsigned int flag_masks[] = { 0x1F, 0x3F, 0x7F }; - -static void xdot_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - emit_state_t emit_state = job->obj->emit_state; - int flags; - char buf[BUFSIZ]; - int j; - - agxbput(xbufs[emit_state], "F "); - xdot_fmt_num (buf, span->font->size); - agxbput(xbufs[emit_state], buf); - xdot_str (job, "", span->font->name); - xdot_pencolor(job); - - switch (span->just) { - case 'l': - j = -1; - break; - case 'r': - j = 1; - break; - default: - case 'n': - j = 0; - break; - } - if (span->font) - flags = span->font->flags; - else - flags = 0; - if (xd->version >= 15) { - unsigned int mask = flag_masks[xd->version-15]; - unsigned int bits = flags & mask; - if (textflags[emit_state] != bits) { - sprintf (buf, "t %u ", bits); - agxbput(xbufs[emit_state], buf); - textflags[emit_state] = bits; - } - } - - p.y += span->yoffset_centerline; - agxbput(xbufs[emit_state], "T "); - _xdot_point(xbufs[emit_state], p); - sprintf(buf, "%d ", j); - agxbput(xbufs[emit_state], buf); - xdot_fmt_num (buf, span->size.x); - agxbput(xbufs[emit_state], buf); - xdot_str (job, "", span->str); -} - -static void _xdot_color_stop (agxbuf* xb, float v, gvcolor_t* clr) -{ - char buf[BUFSIZ]; - - sprintf (buf, "%.03f", v); - xdot_trim_zeros (buf, 1); - xdot_str_xbuf (xb, buf, color2str (clr->u.rgba)); -} - -static void xdot_gradient_fillcolor (GVJ_t* job, int filled, pointf* A, int n) -{ - unsigned char buf0[BUFSIZ]; - agxbuf xbuf; - obj_state_t* obj = job->obj; - float angle = obj->gradient_angle * M_PI / 180; - float r1,r2; - pointf G[2],c1,c2; - - if (xd->version < 14) { - xdot_fillcolor (job); - return; - } - - agxbinit(&xbuf, BUFSIZ, buf0); - if (filled == GRADIENT) { - get_gradient_points(A, G, n, angle, 2); - agxbputc (&xbuf, '['); - _xdot_point (&xbuf, G[0]); - _xdot_point (&xbuf, G[1]); - } - else { - get_gradient_points(A, G, n, 0, 3); - //r1 is inner radius, r2 is outer radius - r1 = G[1].x; - r2 = G[1].y; - if (angle == 0) { - c1.x = G[0].x; - c1.y = G[0].y; - } - else { - c1.x = G[0].x + (r2/4) * cos(angle); - c1.y = G[0].y + (r2/4) * sin(angle); - } - c2.x = G[0].x; - c2.y = G[0].y; - r1 = r2/4; - agxbputc(&xbuf, '('); - _xdot_point (&xbuf, c1); - xdot_num (&xbuf, r1); - _xdot_point (&xbuf, c2); - xdot_num (&xbuf, r2); - } - - agxbput(&xbuf, "2 "); - if (obj->gradient_frac > 0) { - _xdot_color_stop (&xbuf, obj->gradient_frac, &obj->fillcolor); - _xdot_color_stop (&xbuf, obj->gradient_frac, &obj->stopcolor); - } - else { - _xdot_color_stop (&xbuf, 0, &obj->fillcolor); - _xdot_color_stop (&xbuf, 1, &obj->stopcolor); - } - agxbpop(&xbuf); - if (filled == GRADIENT) - agxbputc(&xbuf, ']'); - else - agxbputc(&xbuf, ')'); - xdot_str (job, "C ", agxbuse(&xbuf)); - agxbfree(&xbuf); -} - -static void xdot_ellipse(GVJ_t * job, pointf * A, int filled) -{ - emit_state_t emit_state = job->obj->emit_state; - - char buf[BUFSIZ]; - - xdot_style (job); - xdot_pencolor (job); - if (filled) { - if ((filled == GRADIENT) || (filled == RGRADIENT)) { - xdot_gradient_fillcolor (job, filled, A, 2); - } - else - xdot_fillcolor (job); - agxbput(xbufs[emit_state], "E "); - } - else - agxbput(xbufs[emit_state], "e "); - _xdot_point(xbufs[emit_state], A[0]); - xdot_fmt_num (buf, A[1].x - A[0].x); - agxbput(xbufs[emit_state], buf); - xdot_fmt_num (buf, A[1].y - A[0].y); - agxbput(xbufs[emit_state], buf); -} - -static void xdot_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, int arrow_at_end, int filled) -{ - xdot_style (job); - xdot_pencolor (job); - if (filled) { - if ((filled == GRADIENT) || (filled == RGRADIENT)) { - xdot_gradient_fillcolor (job, filled, A, n); - } - else - xdot_fillcolor (job); - xdot_points(job, 'b', A, n); /* NB - 'B' & 'b' are reversed in comparison to the other items */ - } - else - xdot_points(job, 'B', A, n); -} - -static void xdot_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - xdot_style (job); - xdot_pencolor (job); - if (filled) { - if ((filled == GRADIENT) || (filled == RGRADIENT)) { - xdot_gradient_fillcolor (job, filled, A, n); - } - else - xdot_fillcolor (job); - xdot_points(job, 'P', A, n); - } - else - xdot_points(job, 'p', A, n); -} - -static void _xdot_polyline(GVJ_t * job, pointf * A, int n) -{ - xdot_style (job); - xdot_pencolor (job); - xdot_points(job, 'L', A, n); -} - -void core_loadimage_xdot(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - emit_state_t emit_state = job->obj->emit_state; - char buf[BUFSIZ]; - - agxbput(xbufs[emit_state], "I "); - _xdot_point(xbufs[emit_state], b.LL); - xdot_fmt_num (buf, b.UR.x - b.LL.x); - agxbput(xbufs[emit_state], buf); - xdot_fmt_num (buf, b.UR.y - b.LL.y); - agxbput(xbufs[emit_state], buf); - xdot_str (job, "", (char*)(us->name)); -} - -gvrender_engine_t dot_engine = { - 0, /* dot_begin_job */ - 0, /* dot_end_job */ - dot_begin_graph, - dot_end_graph, - 0, /* dot_begin_layer */ - 0, /* dot_end_layer */ - 0, /* dot_begin_page */ - 0, /* dot_end_page */ - 0, /* dot_begin_cluster */ - 0, /* dot_end_cluster */ - 0, /* dot_begin_nodes */ - 0, /* dot_end_nodes */ - 0, /* dot_begin_edges */ - 0, /* dot_end_edges */ - 0, /* dot_begin_node */ - 0, /* dot_end_node */ - 0, /* dot_begin_edge */ - 0, /* dot_end_edge */ - 0, /* dot_begin_anchor */ - 0, /* dot_end_anchor */ - 0, /* dot_begin_label */ - 0, /* dot_end_label */ - 0, /* dot_textspan */ - 0, /* dot_resolve_color */ - 0, /* dot_ellipse */ - 0, /* dot_polygon */ - 0, /* dot_bezier */ - 0, /* dot_polyline */ - 0, /* dot_comment */ - 0, /* dot_library_shape */ -}; - -gvrender_engine_t xdot_engine = { - 0, /* xdot_begin_job */ - 0, /* xdot_end_job */ - dot_begin_graph, - dot_end_graph, - 0, /* xdot_begin_layer */ - 0, /* xdot_end_layer */ - 0, /* xdot_begin_page */ - 0, /* xdot_end_page */ - 0, /* xdot_begin_cluster */ - xdot_end_cluster, - 0, /* xdot_begin_nodes */ - 0, /* xdot_end_nodes */ - 0, /* xdot_begin_edges */ - 0, /* xdot_end_edges */ - 0, /* xdot_begin_node */ - xdot_end_node, - 0, /* xdot_begin_edge */ - xdot_end_edge, -#ifdef NEW_XDOT - xdot_begin_anchor, - xdot_end_anchor, -#else - 0, /* xdot_begin_anchor */ - 0, /* xdot_end_anchor */ -#endif - 0, /* xdot_begin_label */ - 0, /* xdot_end_label */ - xdot_textspan, - 0, /* xdot_resolve_color */ - xdot_ellipse, - xdot_polygon, - xdot_bezier, - _xdot_polyline, - 0, /* xdot_comment */ - 0, /* xdot_library_shape */ -}; - -gvrender_features_t render_features_dot = { - GVRENDER_DOES_TRANSFORM, /* not really - uses raw graph coords */ /* flags */ - 0., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - COLOR_STRING, /* color_type */ -}; - -gvrender_features_t render_features_xdot = { - GVRENDER_DOES_TRANSFORM /* not really - uses raw graph coords */ - | GVRENDER_DOES_MAPS - | GVRENDER_DOES_TARGETS - | GVRENDER_DOES_TOOLTIPS, /* flags */ - 0., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -gvdevice_features_t device_features_canon = { - LAYOUT_NOT_REQUIRED, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default height, width - device units */ - {72.,72.}, /* default dpi */ -}; - -gvdevice_features_t device_features_dot = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_dot_types[] = { - {FORMAT_DOT, "dot", 1, &dot_engine, &render_features_dot}, - {FORMAT_XDOT, "xdot", 1, &xdot_engine, &render_features_xdot}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_dot_types[] = { - {FORMAT_DOT, "dot:dot", 1, NULL, &device_features_dot}, - {FORMAT_DOT, "gv:dot", 1, NULL, &device_features_dot}, - {FORMAT_CANON, "canon:dot", 1, NULL, &device_features_canon}, - {FORMAT_PLAIN, "plain:dot", 1, NULL, &device_features_dot}, - {FORMAT_PLAIN_EXT, "plain-ext:dot", 1, NULL, &device_features_dot}, - {FORMAT_XDOT, "xdot:xdot", 1, NULL, &device_features_dot}, - {FORMAT_XDOT12, "xdot1.2:xdot", 1, NULL, &device_features_dot}, - {FORMAT_XDOT14, "xdot1.4:xdot", 1, NULL, &device_features_dot}, - {0, NULL, 0, NULL, NULL} -}; - -#undef GNEW diff --git a/internal/plugin/core/gvrender_core_fig.c b/internal/plugin/core/gvrender_core_fig.c deleted file mode 100644 index 8544fe3..0000000 --- a/internal/plugin/core/gvrender_core_fig.c +++ /dev/null @@ -1,558 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include "compat.h" -#endif - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "agxbuf.h" -#include "utils.h" -#include "color.h" - -/* Number of points to split splines into */ -#define BEZIERSUBDIVISION 6 - -typedef enum { FORMAT_FIG, } fig_format_type; - -static int Depth; - -static void figptarray(GVJ_t *job, pointf * A, int n, int close) -{ - int i; - point p; - - for (i = 0; i < n; i++) { - PF2P(A[i],p); - gvprintf(job, " %d %d", p.x, p.y); - } - if (close) { - PF2P(A[0],p); - gvprintf(job, " %d %d", p.x, p.y); - } - gvputs(job, "\n"); -} - -static char *fig_string(char *s) -{ - static char *buf = NULL; - static int bufsize = 0; - int pos = 0; - char *p; - unsigned char c; - - if (!buf) { - bufsize = 64; - buf = malloc(bufsize * sizeof(char)); - } - - p = buf; - while ((c = *s++)) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = realloc(buf, bufsize * sizeof(char)); - p = buf + pos; - } - if (isascii(c)) { - if (c == '\\') { - *p++ = '\\'; - pos++; - } - *p++ = c; - pos++; - } else { - *p++ = '\\'; - sprintf(p, "%03o", c); - p += 3; - pos += 4; - } - } - *p = '\0'; - return buf; -} - -static int figColorResolve(int *new, int r, int g, int b) -{ -#define maxColors 256 - static int top = 0; - static short red[maxColors], green[maxColors], blue[maxColors]; - int c; - int ct = -1; - long rd, gd, bd, dist; - long mindist = 3 * 255 * 255; /* init to max poss dist */ - - *new = 0; /* in case it is not a new color */ - for (c = 0; c < top; c++) { - rd = (long) (red[c] - r); - gd = (long) (green[c] - g); - bd = (long) (blue[c] - b); - dist = rd * rd + gd * gd + bd * bd; - if (dist < mindist) { - if (dist == 0) - return c; /* Return exact match color */ - mindist = dist; - ct = c; - } - } - /* no exact match. We now know closest, but first try to allocate exact */ - if (top++ == maxColors) - return ct; /* Return closest available color */ - red[c] = r; - green[c] = g; - blue[c] = b; - *new = 1; /* flag new color */ - return c; /* Return newly allocated color */ -} - -/* this table is in xfig color index order */ -static char *figcolor[] = { - "black", "blue", "green", "cyan", "red", "magenta", "yellow", "white", (char *) NULL -}; - -static void fig_resolve_color(GVJ_t *job, gvcolor_t * color) -{ - int object_code = 0; /* always 0 for color */ - int i, new; - - switch (color->type) { - case COLOR_STRING: - for (i = 0; figcolor[i]; i++) { - if (streq(figcolor[i], color->u.string)) { - color->u.index = i; - break; - } - } - break; - case RGBA_BYTE: - i = 32 + figColorResolve(&new, - color->u.rgba[0], - color->u.rgba[1], - color->u.rgba[2]); - if (new) - gvprintf(job, "%d %d #%02x%02x%02x\n", - object_code, i, - color->u.rgba[0], - color->u.rgba[1], - color->u.rgba[2]); - color->u.index = i; - break; - default: - assert(0); /* internal error */ - } - - color->type = COLOR_INDEX; -} - -static void fig_line_style(obj_state_t *obj, int *line_style, double *style_val) -{ - switch (obj->pen) { - case PEN_DASHED: - *line_style = 1; - *style_val = 10.; - break; - case PEN_DOTTED: - *line_style = 2; - *style_val = 10.; - break; - case PEN_SOLID: - default: - *line_style = 0; - *style_val = 0.; - break; - } -} - -static void fig_comment(GVJ_t *job, char *str) -{ - gvprintf(job, "# %s\n", str); -} - -static void fig_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvputs(job, "#FIG 3.2\n"); - gvprintf(job, "# Generated by %s version %s (%s)\n", - job->common->info[0], job->common->info[1], job->common->info[2]); - gvprintf(job, "# Title: %s\n", agnameof(obj->u.g)); - gvprintf(job, "# Pages: %d\n", job->pagesArraySize.x * job->pagesArraySize.y); - gvputs(job, "Portrait\n"); /* orientation */ - gvputs(job, "Center\n"); /* justification */ - gvputs(job, "Inches\n"); /* units */ - gvputs(job, "Letter\n"); /* papersize */ - gvputs(job, "100.00\n"); /* magnification % */ - gvputs(job, "Single\n"); /* multiple-page */ - gvputs(job, "-2\n"); /* transparent color (none) */ - gvputs(job, "1200"); /* resolution */ - gvputs(job, " 2\n"); /* coordinate system (upper left) */ -} - -static void fig_end_graph(GVJ_t * job) -{ - gvputs(job, "# end of FIG file\n"); -} - -static void fig_begin_page(GVJ_t * job) -{ - Depth = 2; -} - -static void fig_begin_node(GVJ_t * job) -{ - Depth = 1; -} - -static void fig_end_node(GVJ_t * job) -{ - Depth = 2; -} - -static void fig_begin_edge(GVJ_t * job) -{ - Depth = 0; -} - -static void fig_end_edge(GVJ_t * job) -{ - Depth = 2; -} - -static void fig_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - PostscriptAlias *pA; - - int object_code = 4; /* always 4 for text */ - int sub_type = 0; /* text justification */ - int color = obj->pencolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int font = -1; /* init to xfig's default font */ - double font_size = span->font->size * job->zoom; - double angle = job->rotation ? (M_PI / 2.0) : 0.0; - int font_flags = 6; /* PostScript font + Special text */ -/* Special text indicates that latex markup may exist - * in the output - but note that dot knows nothing about latex, - * so the node sizes may be wrong. - */ - double height = font_size; - double length = 2.0*font_size/3.0 * (double)strlen(span->str) / 2.0; - - pA = span->font->postscript_alias; - if (pA) /* if it is a standard postscript font */ - font = pA->xfig_code; - - switch (span->just) { - case 'l': - sub_type = 0; - break; - case 'r': - sub_type = 2; - break; - default: - case 'n': - sub_type = 1; - break; - } - -/* object_code sub_type color depth pen_style font - 4 1 0 1 0 0 - font_size angle font_flags height length ROUND(p.x) ROUND(p.y), - 14.0 0.0000 6 14.0 51.3 1237 570 - $A \\in M_0$\001 -*/ - gvprintf(job, - "%d %d %d %d %d %d %.1f %.4f %d %.1f %.1f %d %d %s\\001\n", - object_code, sub_type, color, depth, pen_style, font, - font_size, angle, font_flags, height, length, ROUND(p.x), ROUND((p.y-72.0)), - fig_string(span->str)); -} - -static void fig_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 1; /* always 1 for ellipse */ - int sub_type = 1; /* ellipse defined by radii */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = filled ? 20 : -1; - double style_val; - int direction = 0; - double angle = 0.0; - int center_x, center_y, radius_x, radius_y; - int start_x, start_y, end_x, end_y; - - fig_line_style(obj, &line_style, &style_val); - - start_x = center_x = ROUND(A[0].x); - start_y = center_y = ROUND(A[0].y); - radius_x = ROUND(A[1].x - A[0].x); - radius_y = ROUND(A[1].y - A[0].y); - end_x = ROUND(A[1].x); - end_y = ROUND(A[1].y); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.3f %d %.4f %d %d %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, direction, - angle, center_x, center_y, radius_x, radius_y, start_x, - start_y, end_x, end_y); -} - -static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 3; /* always 3 for spline */ - int sub_type; - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill; - double style_val; - int cap_style = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n; - int i; - - - pointf pf, V[4]; - point p; - int j, step; - int count = 0; - int size; - - char *buffer; - char *buf; - assert (n >= 4); - - buffer = - malloc((npoints + 1) * (BEZIERSUBDIVISION + - 1) * 20 * sizeof(char)); - buf = buffer; - - fig_line_style(obj, &line_style, &style_val); - - if (filled) { - sub_type = 5; /* closed X-spline */ - area_fill = 20; /* fully saturated color */ - fill_color = job->obj->fillcolor.u.index; - } - else { - sub_type = 4; /* opened X-spline */ - area_fill = -1; - fill_color = 0; - } - V[3].x = A[0].x; - V[3].y = A[0].y; - /* Write first point in line */ - count++; - PF2P(A[0], p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - /* write subsequent points */ - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) { - V[j].x = A[i + j].x; - V[j].y = A[i + j].y; - } - for (step = 1; step <= BEZIERSUBDIVISION; step++) { - count++; - pf = Bezier (V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - PF2P(pf, p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - } - } - - gvprintf(job, "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d\n", - object_code, - sub_type, - line_style, - thickness, - pen_color, - fill_color, - depth, - pen_style, - area_fill, - style_val, cap_style, forward_arrow, backward_arrow, count); - - gvprintf(job, " %s\n", buffer); /* print points */ - free(buffer); - for (i = 0; i < count; i++) { - gvprintf(job, " %d", i % (count - 1) ? 1 : 0); /* -1 on all */ - } - gvputs(job, "\n"); -} - -static void fig_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 2; /* always 2 for polyline */ - int sub_type = 3; /* always 3 for polygon */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = filled ? 20 : -1; - double style_val; - int join_style = 0; - int cap_style = 0; - int radius = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n + 1; - - fig_line_style(obj, &line_style, &style_val); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, join_style, - cap_style, radius, forward_arrow, backward_arrow, npoints); - figptarray(job, A, n, 1); /* closed shape */ -} - -static void fig_polyline(GVJ_t * job, pointf * A, int n) -{ - obj_state_t *obj = job->obj; - - int object_code = 2; /* always 2 for polyline */ - int sub_type = 1; /* always 1 for polyline */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = 0; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = 0; - double style_val; - int join_style = 0; - int cap_style = 0; - int radius = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n; - - fig_line_style(obj, &line_style, &style_val); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, join_style, - cap_style, radius, forward_arrow, backward_arrow, npoints); - figptarray(job, A, n, 0); /* open shape */ -} - -gvrender_engine_t fig_engine = { - 0, /* fig_begin_job */ - 0, /* fig_end_job */ - fig_begin_graph, - fig_end_graph, - 0, /* fig_begin_layer */ - 0, /* fig_end_layer */ - fig_begin_page, - 0, /* fig_end_page */ - 0, /* fig_begin_cluster */ - 0, /* fig_end_cluster */ - 0, /* fig_begin_nodes */ - 0, /* fig_end_nodes */ - 0, /* fig_begin_edges */ - 0, /* fig_end_edges */ - fig_begin_node, - fig_end_node, - fig_begin_edge, - fig_end_edge, - 0, /* fig_begin_anchor */ - 0, /* fig_end_anchor */ - 0, /* fig_begin_label */ - 0, /* fig_end_label */ - fig_textspan, - fig_resolve_color, - fig_ellipse, - fig_polygon, - fig_bezier, - fig_polyline, - fig_comment, - 0, /* fig_library_shape */ -}; - - -/* NB. List must be LANG_C sorted */ -static char *fig_knowncolors[] = { - "black", "blue", "cyan", "green", "magenta", "red", "white", "yellow", -}; - - -gvrender_features_t render_features_fig = { - EMIT_COLORS - | GVRENDER_Y_GOES_DOWN, /* flags */ - 4., /* default pad - graph units */ - fig_knowncolors, /* knowncolors */ - sizeof(fig_knowncolors) / sizeof(char *), /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -gvdevice_features_t device_features_fig = { - EMIT_COLORS - | GVRENDER_Y_GOES_DOWN, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {1440.,1440.}, /* default dpi */ - /* FIXME - this default dpi is a very strange number!!! - * It was picked to make .png usershapes the right size on my screen. - * It happens to be 1.2 * 1200, but I can't explain the 1.2. - * (I was expecting 1.3333 which is 96/72, but thats too big.) - * Also 1200 is hardcoded in fig_begin_graph() instead of using job->dpi - */ - - /* It may be TWIPS, i.e. 20 * POINT_PER_INCH - * but that doesn't explain what the 1200 is? */ -}; - -gvplugin_installed_t gvrender_fig_types[] = { - {FORMAT_FIG, "fig", 1, &fig_engine, &render_features_fig}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_fig_types[] = { - {FORMAT_FIG, "fig:fig", 1, NULL, &device_features_fig}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_json.c b/internal/plugin/core/gvrender_core_json.c deleted file mode 100644 index 4970ef5..0000000 --- a/internal/plugin/core/gvrender_core_json.c +++ /dev/null @@ -1,823 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2015 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#ifdef WIN32 -#include -#include "compat.h" -#endif - -#include -#include -#include -#include - -#include "macros.h" -#include "const.h" -#include "xdot.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvc.h" -#include "gvio.h" -#include "gvcint.h" - -typedef enum { - FORMAT_JSON, - FORMAT_JSON0, - FORMAT_DOT_JSON, - FORMAT_XDOT_JSON, -} json_format_type; - -typedef struct { - int Level; - boolean isLatin; - boolean doXDot; - boolean Attrs_not_written_flag; -} state_t; - -typedef struct { - Agrec_t h; - int id; -} gvid_t; - -#define ID "id" -#define ND_gid(n) (((gvid_t*)aggetrec(n, ID, FALSE))->id) -#define ED_gid(n) (((gvid_t*)aggetrec(n, ID, FALSE))->id) -#define GD_gid(n) (((gvid_t*)aggetrec(n, ID, FALSE))->id) - -#define IS_CLUSTER(s) (!strncmp(agnameof(s), "cluster", 7)) - -static void json_begin_graph(GVJ_t *job) -{ - if (job->render.id == FORMAT_JSON) { - GVC_t* gvc = gvCloneGVC (job->gvc); - graph_t *g = job->obj->u.g; - gvRender (gvc, g, "xdot", NULL); - gvFreeCloneGVC (gvc); - } - else if (job->render.id == FORMAT_JSON0) { - attach_attrs(job->gvc->g); - } -} - -#define LOCALNAMEPREFIX '%' - -/* stoj: - * Convert dot string to a valid json string embedded in double quotes. - */ -static char* stoj (char* ins, state_t* sp) -{ - char* s; - char* input; - static agxbuf xb; - unsigned char c; - - if (sp->isLatin) - input = latin1ToUTF8 (ins); - else - input = ins; - - if (xb.buf == NULL) - agxbinit(&xb, BUFSIZ, NULL); - for (s = input; (c = *s); s++) { - switch (c) { - case '"' : - agxbput(&xb, "\\\""); - break; - case '\\' : - agxbput(&xb, "\\\\"); - break; - case '/' : - agxbput(&xb, "\\/"); - break; - case '\b' : - agxbput(&xb, "\\b"); - break; - case '\f' : - agxbput(&xb, "\\f"); - break; - case '\n' : - agxbput(&xb, "\\n"); - break; - case '\r' : - agxbput(&xb, "\\r"); - break; - case '\t' : - agxbput(&xb, "\\t"); - break; - default : - agxbputc(&xb, c); - break; - } - } - s = agxbuse(&xb); - - if (sp->isLatin) - free (input); - return s; -} - -static void indent(GVJ_t * job, int level) -{ - int i; - for (i = level; i > 0; i--) - gvputs(job, " "); -} - -static void set_attrwf(Agraph_t * g, int toplevel, int value) -{ - Agraph_t *subg; - Agnode_t *n; - Agedge_t *e; - - AGATTRWF(g) = value; - for (subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { - set_attrwf(subg, FALSE, value); - } - if (toplevel) { - for (n = agfstnode(g); n; n = agnxtnode(g, n)) { - AGATTRWF(n) = value; - for (e = agfstout(g, n); e; e = agnxtout(g, e)) - AGATTRWF(e) = value; - } - } -} - -static void write_polyline (GVJ_t * job, xdot_polyline* polyline) -{ - int i; - int cnt = polyline->cnt; - xdot_point* pts = polyline->pts; - - gvprintf(job, "\"points\": ["); - for (i = 0; i < cnt; i++) { - if (i > 0) gvprintf(job, ","); - gvprintf(job, "[%.03f,%.03f]", pts[i].x, pts[i].y); - } - gvprintf(job, "]\n"); -} - -static void write_stops (GVJ_t * job, int n_stops, xdot_color_stop* stp, state_t* sp) -{ - int i; - - gvprintf(job, "\"stops\": ["); - for (i = 0; i < n_stops; i++) { - if (i > 0) gvprintf(job, ","); - gvprintf(job, "{\"frac\": %.03f, \"color\": \"%s\"}", - stp[i].frac, stoj(stp[i].color, sp)); - } - gvprintf(job, "]\n"); -} - -static void write_radial_grad (GVJ_t * job, xdot_radial_grad* rg, state_t* sp) -{ - indent(job, sp->Level); - gvprintf(job, "\"p0\": [%.03f,%.03f,%.03f],\n", rg->x0, rg->y0, rg->r0); - indent(job, sp->Level); - gvprintf(job, "\"p1\": [%.03f,%.03f,%.03f],\n", rg->x1, rg->y1, rg->r1); - indent(job, sp->Level); - write_stops (job, rg->n_stops, rg->stops, sp); -} - -static void write_linear_grad (GVJ_t * job, xdot_linear_grad* lg, state_t* sp) -{ - indent(job, sp->Level); - gvprintf(job, "\"p0\": [%.03f,%.03f],\n", lg->x0, lg->y0); - indent(job, sp->Level); - gvprintf(job, "\"p1\": [%.03f,%.03f],\n", lg->x1, lg->y1); - indent(job, sp->Level); - write_stops (job, lg->n_stops, lg->stops, sp); -} - -static void write_xdot (xdot_op * op, GVJ_t * job, state_t* sp) -{ - indent(job, sp->Level++); - gvputs(job, "{\n"); - indent(job, sp->Level); - - switch (op->kind) { - case xd_filled_ellipse : - case xd_unfilled_ellipse : - gvprintf(job, "\"op\": \"%c\",\n", - (op->kind == xd_filled_ellipse ? 'E' : 'e')); - indent(job, sp->Level); - gvprintf(job, "\"rect\": [%.03f,%.03f,%.03f,%.03f]\n", - op->u.ellipse.x, op->u.ellipse.y, op->u.ellipse.w, op->u.ellipse.h); - break; - case xd_filled_polygon : - case xd_unfilled_polygon : - gvprintf(job, "\"op\": \"%c\",\n", - (op->kind == xd_filled_polygon ? 'P' : 'p')); - indent(job, sp->Level); - write_polyline (job, &op->u.polygon); - break; - case xd_filled_bezier : - case xd_unfilled_bezier : - gvprintf(job, "\"op\": \"%c\",\n", - (op->kind == xd_filled_bezier ? 'B' : 'b')); - indent(job, sp->Level); - write_polyline (job, &op->u.bezier); - break; - case xd_polyline : - gvprintf(job, "\"op\": \"L\",\n"); - indent(job, sp->Level); - write_polyline (job, &op->u.polyline); - break; - case xd_text : - gvprintf(job, "\"op\": \"T\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"pt\": [%.03f,%.03f],\n", op->u.text.x, op->u.text.y); - indent(job, sp->Level); - gvprintf(job, "\"align\": \"%c\",\n", - (op->u.text.align == xd_left? 'l' : - (op->u.text.align == xd_center ? 'c' : 'r'))); - indent(job, sp->Level); - gvprintf(job, "\"width\": %.03f,\n", op->u.text.width); - indent(job, sp->Level); - gvprintf(job, "\"text\": \"%s\"\n", stoj(op->u.text.text, sp)); - break; - case xd_fill_color : - case xd_pen_color : - gvprintf(job, "\"op\": \"%c\",\n", - (op->kind == xd_fill_color ? 'C' : 'c')); - indent(job, sp->Level); - gvprintf(job, "\"grad\": \"none\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"color\": \"%s\"\n", stoj(op->u.color, sp)); - break; - case xd_grad_pen_color : - case xd_grad_fill_color : - gvprintf(job, "\"op\": \"%c\",\n", - (op->kind == xd_grad_fill_color ? 'C' : 'c')); - indent(job, sp->Level); - if (op->u.grad_color.type == xd_none) { - gvprintf(job, "\"grad\": \"none\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"color\": \"%s\"\n", - stoj(op->u.grad_color.u.clr, sp)); - } - else { - if (op->u.grad_color.type == xd_linear) { - gvprintf(job, "\"grad\": \"linear\",\n"); - indent(job, sp->Level); - write_linear_grad (job, &op->u.grad_color.u.ling, sp); - } - else { - gvprintf(job, "\"grad\": \"radial\",\n"); - indent(job, sp->Level); - write_radial_grad (job, &op->u.grad_color.u.ring, sp); - } - } - break; - case xd_font : - gvprintf(job, "\"op\": \"F\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"size\": %.03f,\n", op->u.font.size); - indent(job, sp->Level); - gvprintf(job, "\"face\": \"%s\"\n", stoj(op->u.font.name, sp)); - break; - case xd_style : - gvprintf(job, "\"op\": \"S\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"style\": \"%s\"\n", stoj(op->u.style, sp)); - break; - case xd_image : - break; - case xd_fontchar : - gvprintf(job, "\"op\": \"t\",\n"); - indent(job, sp->Level); - gvprintf(job, "\"fontchar\": %d\n", op->u.fontchar); - break; - } - sp->Level--; - indent(job, sp->Level); - gvputs(job, "}"); -} - -static void write_xdots (char * val, GVJ_t * job, state_t* sp) -{ - xdot* cmds; - int i; - int not_first = 0; - - if (!val || (*val == '\0')) return; - - cmds = parseXDot(val); - if (!cmds) { - agerr(AGWARN, "Could not parse xdot \"%s\"\n", val); - return; - } - - gvputs(job, "\n"); - indent(job, sp->Level++); - gvputs(job, "[\n"); - for (i = 0; i < cmds->cnt; i++) { - if (not_first) - gvputs(job, ",\n"); - else - not_first = 1; - write_xdot (cmds->ops+i, job, sp); - } - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - freeXDot(cmds); -} - -static int isXDot (char* name) -{ - return ((*name++ == '_') && - (streq(name,"draw_") || streq(name,"ldraw_") || - streq(name,"hdraw_") || streq(name,"tdraw_") || - streq(name,"hldraw_") || streq(name,"tldraw_"))); -} - -static void write_attrs(Agobj_t * obj, GVJ_t * job, state_t* sp) -{ - Agraph_t* g = agroot(obj); - int type = AGTYPE(obj); - char* attrval; - Agsym_t* sym = agnxtattr(g, type, NULL); - if (!sym) return; - - for (; sym; sym = agnxtattr(g, type, sym)) { - if (!(attrval = agxget(obj, sym))) continue; - if ((*attrval == '\0') && !streq(sym->name, "label")) continue; - gvputs(job, ",\n"); - indent(job, sp->Level); - gvprintf(job, "\"%s\": ", stoj(sym->name, sp)); - if (sp->doXDot && isXDot(sym->name)) - write_xdots(agxget(obj, sym), job, sp); - else - gvprintf(job, "\"%s\"", stoj(agxget(obj, sym), sp)); - } -} - -static void write_hdr(Agraph_t * g, GVJ_t * job, int top, state_t* sp) -{ - char *name; - - name = agnameof(g); - indent(job, sp->Level); - gvprintf(job, "\"name\": \"%s\"", stoj (name, sp)); - - if (top) { - gvputs(job, ",\n"); - indent(job, sp->Level); - gvprintf(job, "\"directed\": %s,\n", (agisdirected(g)?"true":"false")); - indent(job, sp->Level); - gvprintf(job, "\"strict\": %s", (agisstrict(g)?"true":"false")); - } -} - -static void write_graph(Agraph_t * g, GVJ_t * job, int top, state_t* sp); - -static void write_subg(Agraph_t * g, GVJ_t * job, state_t* sp) -{ - Agraph_t* sg; - - write_graph (g, job, FALSE, sp); - for (sg = agfstsubg(g); sg; sg = agnxtsubg(sg)) { - gvputs(job, ",\n"); - write_subg(sg, job, sp); - } -} - -/* -static int write_subgs(Agraph_t * g, GVJ_t * job, int top, state_t* sp) -{ - Agraph_t* sg; - int not_first = 0; - - sg = agfstsubg(g); - if (!sg) return 0; - - gvputs(job, ",\n"); - indent(job, sp->Level++); - gvputs(job, "\"subgraphs\": [\n"); - for (; sg; sg = agnxtsubg(sg)) { - if (not_first) - gvputs(job, ",\n"); - else - not_first = 1; - write_subg (sg, job, top, sp); - } - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - return 1; -} -*/ - -static int write_subgs(Agraph_t * g, GVJ_t * job, int top, state_t* sp) -{ - Agraph_t* sg; - int not_first = 0; - - sg = agfstsubg(g); - if (!sg) return 0; - - gvputs(job, ",\n"); - indent(job, sp->Level++); - if (top) - gvputs(job, "\"objects\": [\n"); - else { - gvputs(job, "\"subgraphs\": [\n"); - indent(job, sp->Level); - } - for (; sg; sg = agnxtsubg(sg)) { - if (not_first) - gvputs(job, ",\n"); - else - not_first = 1; - if (top) - write_subg (sg, job, sp); - else - gvprintf(job, "%d", GD_gid(sg)); - } - if (!top) { - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - } - - return 1; -} - -static void write_edge(Agedge_t * e, GVJ_t * job, int top, state_t* sp) -{ - if (top) { - indent(job, sp->Level++); - gvputs(job, "{\n"); - indent(job, sp->Level); - gvprintf(job, "\"_gvid\": %d,\n", ED_gid(e)); - indent(job, sp->Level); - gvprintf(job, "\"tail\": %d,\n", ND_gid(agtail(e))); - indent(job, sp->Level); - gvprintf(job, "\"head\": %d", ND_gid(aghead(e))); - write_attrs((Agobj_t*)e, job, sp); - gvputs(job, "\n"); - sp->Level--; - indent(job, sp->Level); - gvputs(job, "}"); - } - else { - gvprintf(job, "%d", ED_gid(e)); - } -} - -static int write_edges(Agraph_t * g, GVJ_t * job, int top, state_t* sp) -{ - Agnode_t* np; - Agedge_t* ep; - int not_first = 0; - - np = agfstnode(g); - if (!np) return 0; - ep = NULL; - /* find a first edge */ - for (; np; np = agnxtnode(g,np)) { - for (ep = agfstout(g, np); ep; ep = agnxtout(g,ep)) { - if (ep) break; - } - if (ep) break; - } - if (!ep) return 0; - - gvputs(job, ",\n"); - indent(job, sp->Level++); - gvputs(job, "\"edges\": [\n"); - if (!top) - indent(job, sp->Level); - for (; np; np = agnxtnode(g,np)) { - for (ep = agfstout(g, np); ep; ep = agnxtout(g,ep)) { - if (not_first) - if (top) - gvputs(job, ",\n"); - else - gvputs(job, ","); - else - not_first = 1; - write_edge(ep, job, top, sp); - } - } - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - return 1; -} - -static void write_node(Agnode_t * n, GVJ_t * job, int top, state_t* sp) -{ - if (top) { - indent(job, sp->Level++); - gvputs(job, "{\n"); - indent(job, sp->Level); - gvprintf(job, "\"_gvid\": %d,\n", ND_gid(n)); - indent(job, sp->Level); - gvprintf(job, "\"name\": \"%s\"", stoj (agnameof(n), sp)); - write_attrs((Agobj_t*)n, job, sp); - gvputs(job, "\n"); - sp->Level--; - indent(job, sp->Level); - gvputs(job, "}"); - } - else { - gvprintf(job, "%d", ND_gid(n)); - } -} - -static int write_nodes(Agraph_t * g, GVJ_t * job, int top, int has_subgs, state_t* sp) -{ - Agnode_t* n; - int not_first = 0; - - n = agfstnode(g); - if (!n) { - if (has_subgs && top) { - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - } - return 0; - } - gvputs(job, ",\n"); - if (top) { - if (!has_subgs) { - indent(job, sp->Level++); - gvputs(job, "\"objects\": [\n"); - } - } - else { - indent(job, sp->Level++); - gvputs(job, "\"nodes\": [\n"); - indent(job, sp->Level); - } - for (; n; n = agnxtnode(g, n)) { - if (IS_CLUSTER(n)) continue; - if (not_first) - if (top) - gvputs(job, ",\n"); - else - gvputs(job, ","); - else - not_first = 1; - write_node (n, job, top, sp); - } - sp->Level--; - gvputs(job, "\n"); - indent(job, sp->Level); - gvputs(job, "]"); - return 1; -} - -typedef struct { - Dtlink_t link; - char* id; - int v; -} intm; - -static void freef(Dt_t * dt, intm * obj, Dtdisc_t * disc) -{ - free(obj->id); - free(obj); -} - -static Dtdisc_t intDisc = { - offsetof(intm, id), - -1, - offsetof(intm, link), - (Dtmake_f) NULL, - (Dtfree_f) freef, - (Dtcompar_f) NULL, - 0, - 0, - 0 -}; - -#define NEW(t) (t*)calloc(1,sizeof(t)) - -static int lookup (Dt_t* map, char* name) -{ - intm* ip = (intm*)dtmatch(map, name); - if (ip) return ip->v; - else return -1; -} - -static void insert (Dt_t* map, char* name, int v) -{ - intm* ip = (intm*)dtmatch(map, name); - - if (ip) { - if (ip->v != v) - agerr(AGWARN, "Duplicate cluster name \"%s\"\n", name); - return; - } - ip = NEW(intm); - ip->id = strdup(name); - ip->v = v; - dtinsert (map, ip); -} - -static int label_subgs(Agraph_t* g, int lbl, Dt_t* map) -{ - Agraph_t* sg; - - if (g != agroot(g)) { - GD_gid(g) = lbl++; - if (IS_CLUSTER(g)) - insert (map, agnameof(g), GD_gid(g)); - } - for (sg = agfstsubg(g); sg; sg = agnxtsubg(sg)) { - lbl = label_subgs(sg, lbl, map); - } - return lbl; -} - - -static void write_graph(Agraph_t * g, GVJ_t * job, int top, state_t* sp) -{ - Agnode_t* np; - Agedge_t* ep; - int ncnt = 0; - int ecnt = 0; - int sgcnt = 0; - int has_subgs; - Dt_t* map; - - if (top) { - map = dtopen (&intDisc, Dtoset); - aginit(g, AGNODE, ID, sizeof(gvid_t), FALSE); - aginit(g, AGEDGE, ID, sizeof(gvid_t), FALSE); - aginit(g, AGRAPH, ID, -((int)sizeof(gvid_t)), FALSE); - sgcnt = label_subgs(g, sgcnt, map); - for (np = agfstnode(g); np; np = agnxtnode(g,np)) { - if (IS_CLUSTER(np)) { - ND_gid(np) = lookup(map, agnameof(np)); - } - else { - ND_gid(np) = sgcnt + ncnt++; - } - for (ep = agfstout(g, np); ep; ep = agnxtout(g,ep)) { - ED_gid(ep) = ecnt++; - } - } - dtclose(map); - } - - indent(job, sp->Level++); - gvputs(job, "{\n"); - write_hdr(g, job, top, sp); - write_attrs((Agobj_t*)g, job, sp); - if (top) { - gvputs(job, ",\n"); - indent(job, sp->Level); - gvprintf(job, "\"_subgraph_cnt\": %d", sgcnt); - } else { - gvputs(job, ",\n"); - indent(job, sp->Level); - gvprintf(job, "\"_gvid\": %d", GD_gid(g)); - } - has_subgs = write_subgs(g, job, top, sp); - write_nodes (g, job, top, has_subgs, sp); - write_edges (g, job, top, sp); - gvputs(job, "\n"); - sp->Level--; - indent(job, sp->Level); - if (top) - gvputs(job, "}\n"); - else - gvputs(job, "}"); -} - -typedef int (*putstrfn) (void *chan, const char *str); -typedef int (*flushfn) (void *chan); - -static void json_end_graph(GVJ_t *job) -{ - graph_t *g = job->obj->u.g; - state_t sp; - Agiodisc_t* io_save; - static Agiodisc_t io; - - if (io.afread == NULL) { - io.afread = AgIoDisc.afread; - io.putstr = (putstrfn)gvputs; - io.flush = (flushfn)gvflush; - } - - io_save = g->clos->disc.io; - g->clos->disc.io = &io; - - set_attrwf(g, TRUE, FALSE); - sp.Level = 0; - sp.isLatin = (GD_charset(g) == CHAR_LATIN1); - sp.doXDot = ((job->render.id == FORMAT_JSON) || (job->render.id == FORMAT_XDOT_JSON)); - sp.Attrs_not_written_flag = 0; - write_graph(g, job, TRUE, &sp); - /* agwrite(g, (FILE*)job); */ -} - -gvrender_engine_t json_engine = { - 0, /* json_begin_job */ - 0, /* json_end_job */ - json_begin_graph, - json_end_graph, - 0, /* json_begin_layer */ - 0, /* json_end_layer */ - 0, /* json_begin_page */ - 0, /* json_end_page */ - 0, /* json_begin_cluster */ - 0, /* json_end_cluster */ - 0, /* json_begin_nodes */ - 0, /* json_end_nodes */ - 0, /* json_begin_edges */ - 0, /* json_end_edges */ - 0, /* json_begin_node */ - 0, /* json_end_node */ - 0, /* json_begin_edge */ - 0, /* json_end_edge */ - 0, /* json_begin_anchor */ - 0, /* json_end_anchor */ - 0, /* json_begin_label */ - 0, /* json_end_label */ - 0, /* json_textspan */ - 0, /* json_resolve_color */ - 0, /* json_ellipse */ - 0, /* json_polygon */ - 0, /* json_bezier */ - 0, /* json_polyline */ - 0, /* json_comment */ - 0, /* json_library_shape */ -}; - -gvrender_features_t render_features_json1 = { - GVRENDER_DOES_TRANSFORM, /* not really - uses raw graph coords */ /* flags */ - 0., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - COLOR_STRING, /* color_type */ -}; - -gvrender_features_t render_features_json = { - GVRENDER_DOES_TRANSFORM /* not really - uses raw graph coords */ - | GVRENDER_DOES_MAPS - | GVRENDER_DOES_TARGETS - | GVRENDER_DOES_TOOLTIPS, /* flags */ - 0., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - COLOR_STRING, /* color_type */ -}; - -gvdevice_features_t device_features_json_nop = { - LAYOUT_NOT_REQUIRED, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvdevice_features_t device_features_json = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_json_types[] = { - {FORMAT_JSON, "json", 1, &json_engine, &render_features_json}, - {FORMAT_JSON0, "json0", 1, &json_engine, &render_features_json}, - {FORMAT_DOT_JSON, "dot_json", 1, &json_engine, &render_features_json}, - {FORMAT_XDOT_JSON, "xdot_json", 1, &json_engine, &render_features_json}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_json_types[] = { - {FORMAT_JSON, "json:json", 1, NULL, &device_features_json}, - {FORMAT_JSON0, "json0:json", 1, NULL, &device_features_json}, - {FORMAT_DOT_JSON, "dot_json:json", 1, NULL, &device_features_json_nop}, - {FORMAT_XDOT_JSON, "xdot_json:json", 1, NULL, &device_features_json_nop}, - {0, NULL, 0, NULL, NULL} -}; - -#undef NEW diff --git a/internal/plugin/core/gvrender_core_map.c b/internal/plugin/core/gvrender_core_map.c deleted file mode 100644 index e123bfc..0000000 --- a/internal/plugin/core/gvrender_core_map.c +++ /dev/null @@ -1,335 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" - -extern char *xml_string(char *str); -extern char *xml_url_string(char *str); - -typedef enum { FORMAT_IMAP, FORMAT_ISMAP, FORMAT_CMAP, FORMAT_CMAPX, } map_format_type; - -static void map_output_shape (GVJ_t *job, map_shape_t map_shape, pointf * AF, int nump, - char* url, char *tooltip, char *target, char *id) -{ - int i; - - static point *A; - static int size_A; - - if (!AF || !nump) - return; - - if (size_A < nump) { - size_A = nump + 10; - A = realloc(A, size_A * sizeof(point)); - } - for (i = 0; i < nump; i++) - PF2P(AF[i], A[i]); - - if (job->render.id == FORMAT_IMAP && url && url[0]) { - switch (map_shape) { - case MAP_RECTANGLE: - /* Y_GOES_DOWN so need UL to LR */ - gvprintf(job, "rect %s %d,%d %d,%d\n", url, - A[0].x, A[1].y, A[1].x, A[0].y); - break; - case MAP_CIRCLE: - gvprintf(job, "circle %s %d,%d,%d\n", url, - A[0].x, A[0].y, A[1].x-A[0].x); - break; - case MAP_POLYGON: - gvprintf(job, "poly %s", url); - for (i = 0; i < nump; i++) - gvprintf(job, " %d,%d", A[i].x, A[i].y); - gvputs(job, "\n"); - break; - default: - assert(0); - break; - } - - } else if (job->render.id == FORMAT_ISMAP && url && url[0]) { - switch (map_shape) { - case MAP_RECTANGLE: - /* Y_GOES_DOWN so need UL to LR */ - gvprintf(job, "rectangle (%d,%d) (%d,%d) %s %s\n", - A[0].x, A[1].y, A[1].x, A[0].y, url, tooltip); - break; - default: - assert(0); - break; - } - - } else if (job->render.id == FORMAT_CMAP || job->render.id == FORMAT_CMAPX) { - switch (map_shape) { - case MAP_CIRCLE: - gvputs(job, "render.id == FORMAT_CMAPX) - gvputs(job, "\"/>\n"); - else - gvputs(job, "\">\n"); - } -} - -static void map_begin_page(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - char *s; - - switch (job->render.id) { - case FORMAT_IMAP: - gvputs(job, "base referer\n"); - if (obj->url && obj->url[0]) { - gvputs(job, "default "); - gvputs(job, xml_string(obj->url)); - gvputs(job, "\n"); - } - break; - case FORMAT_ISMAP: - if (obj->url && obj->url[0]) { - gvputs(job, "default "); - gvputs(job, xml_string(obj->url)); - gvputs(job, " "); - gvputs(job, xml_string(agnameof(obj->u.g))); - gvputs(job, "\n"); - } - break; - case FORMAT_CMAPX: - s = xml_string(agnameof(obj->u.g)); - gvputs(job, "\n"); - break; - default: - break; - } -} - -static void map_end_page(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - switch (job->render.id) { - case FORMAT_CMAP: - map_output_shape(job, obj->url_map_shape, - obj->url_map_p,obj->url_map_n, - obj->url, obj->tooltip, obj->target, obj->id); - break; - case FORMAT_CMAPX: - map_output_shape(job, obj->url_map_shape, - obj->url_map_p,obj->url_map_n, - obj->url, obj->tooltip, obj->target, obj->id); - gvputs(job, "\n"); - break; - default: - break; - } -} - -#if 0 -static void map_begin_cluster(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvprintf(job, "%% %s\n", obj->u.sg->name); - - map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n, - obj->url, obj->tooltip, obj->target); -} - -static void map_begin_node(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - map_output_shape(job, obj->url_map_shape, obj->url_map_p,obj->url_map_n, - obj->url, obj->tooltip, obj->target); -} - -static void -map_begin_edge(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - int i, j = 0; - - map_output_shape(job, obj->url_map_shape, obj->url_map_p, obj->url_map_n, - obj->url, obj->tooltip, obj->target); - map_output_shape(job, MAP_RECTANGLE, obj->tailurl_map_p, 2, - obj->tailurl, obj->tailtooltip, obj->tailtarget); - map_output_shape(job, MAP_RECTANGLE, obj->headurl_map_p, 2, - obj->headurl, obj->headtooltip, obj->headtarget); - map_output_shape(job, MAP_RECTANGLE, obj->tailendurl_map_p,2, - obj->url, obj->tooltip, obj->target); - map_output_shape(job, MAP_RECTANGLE, obj->headendurl_map_p, 2, - obj->url, obj->tooltip, obj->target); - for (i = 0; i < obj->url_bsplinemap_poly_n; i++) { - map_output_shape(job, MAP_POLYGON, - obj->url_bsplinemap_p+j, obj->url_bsplinemap_n[i], - obj->url, obj->tooltip, obj->target); - j += obj->url_bsplinemap_n[i]; - } -} -#endif - -static void map_begin_anchor(GVJ_t * job, char *url, char *tooltip, char *target, char *id) -{ - obj_state_t *obj = job->obj; - - map_output_shape(job, obj->url_map_shape, - obj->url_map_p, obj->url_map_n, - url, tooltip, target, id); -} - -static gvrender_engine_t map_engine = { - 0, /* map_begin_job */ - 0, /* map_end_job */ - 0, /* map_begin_graph */ - 0, /* map_end_graph */ - 0, /* map_begin_layer */ - 0, /* map_end_layer */ - map_begin_page, - map_end_page, - 0, /* map_begin_cluster */ - 0, /* map_end_cluster */ - 0, /* map_begin_nodes */ - 0, /* map_end_nodes */ - 0, /* map_begin_edges */ - 0, /* map_end_edges */ - 0, /* map_begin_node */ - 0, /* map_end_node */ - 0, /* map_begin_edge */ - 0, /* map_end_edge */ - map_begin_anchor, - 0, /* map_end_anchor */ - 0, /* map_begin_label */ - 0, /* map_end_label */ - 0, /* map_textpara */ - 0, /* map_resolve_color */ - 0, /* map_ellipse */ - 0, /* map_polygon */ - 0, /* map_bezier */ - 0, /* map_polyline */ - 0, /* map_comment */ - 0, /* map_library_shape */ -}; - -static gvrender_features_t render_features_map = { - EMIT_CLUSTERS_LAST - | GVRENDER_Y_GOES_DOWN - | GVRENDER_DOES_MAPS - | GVRENDER_DOES_LABELS - | GVRENDER_DOES_TOOLTIPS - | GVRENDER_DOES_TARGETS - | GVRENDER_DOES_MAP_RECTANGLE, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - 0, /* color_type */ -}; - -static gvdevice_features_t device_features_map = { - GVRENDER_DOES_MAP_CIRCLE - | GVRENDER_DOES_MAP_POLYGON, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -static gvdevice_features_t device_features_map_nopoly = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_map_types[] = { - {FORMAT_ISMAP, "map", 1, &map_engine, &render_features_map}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_map_types[] = { - {FORMAT_ISMAP, "ismap:map", 1, NULL, &device_features_map_nopoly}, - {FORMAT_CMAP, "cmap:map", 1, NULL, &device_features_map}, - {FORMAT_IMAP, "imap:map", 1, NULL, &device_features_map}, - {FORMAT_CMAPX, "cmapx:map", 1, NULL, &device_features_map}, - {FORMAT_IMAP, "imap_np:map", 1, NULL, &device_features_map_nopoly}, - {FORMAT_CMAPX, "cmapx_np:map", 1, NULL, &device_features_map_nopoly}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_mp.c b/internal/plugin/core/gvrender_core_mp.c deleted file mode 100644 index 1f076c2..0000000 --- a/internal/plugin/core/gvrender_core_mp.c +++ /dev/null @@ -1,531 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* FIXME - incomplete replacement for codegen */ - -#include "config.h" - -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include "compat.h" -#endif - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "agxbuf.h" -#include "utils.h" -#include "color.h" - -/* Number of points to split splines into */ -#define BEZIERSUBDIVISION 6 - -typedef enum { FORMAT_MP, } mp_format_type; - -static int Depth; - -static void mpptarray(GVJ_t *job, pointf * A, int n, int close) -{ - int i; - point p; - - for (i = 0; i < n; i++) { - PF2P(A[i],p); - gvprintf(job, " %d %d", p.x, p.y); - } - if (close) { - PF2P(A[0],p); - gvprintf(job, " %d %d", p.x, p.y); - } - gvputs(job, "\n"); -} - -static char *mp_string(char *s) -{ - static char *buf = NULL; - static int bufsize = 0; - int pos = 0; - char *p; - unsigned char c; - - if (!buf) { - bufsize = 64; - buf = malloc(bufsize * sizeof(char)); - } - - p = buf; - while ((c = *s++)) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = realloc(buf, bufsize * sizeof(char)); - p = buf + pos; - } - if (isascii(c)) { - if (c == '\\') { - *p++ = '\\'; - pos++; - } - *p++ = c; - pos++; - } else { - *p++ = '\\'; - sprintf(p, "%03o", c); - p += 3; - pos += 4; - } - } - *p = '\0'; - return buf; -} - -static int mpColorResolve(int *new, int r, int g, int b) -{ -#define maxColors 256 - static int top = 0; - static short red[maxColors], green[maxColors], blue[maxColors]; - int c; - int ct = -1; - long rd, gd, bd, dist; - long mindist = 3 * 255 * 255; /* init to max poss dist */ - - *new = 0; /* in case it is not a new color */ - for (c = 0; c < top; c++) { - rd = (long) (red[c] - r); - gd = (long) (green[c] - g); - bd = (long) (blue[c] - b); - dist = rd * rd + gd * gd + bd * bd; - if (dist < mindist) { - if (dist == 0) - return c; /* Return exact match color */ - mindist = dist; - ct = c; - } - } - /* no exact match. We now know closest, but first try to allocate exact */ - if (top++ == maxColors) - return ct; /* Return closest available color */ - red[c] = r; - green[c] = g; - blue[c] = b; - *new = 1; /* flag new color */ - return c; /* Return newly allocated color */ -} - -/* this table is in xfig color index order */ -static char *mpcolor[] = { - "black", "blue", "green", "cyan", "red", "magenta", "yellow", "white", (char *) NULL -}; - -static void mp_resolve_color(GVJ_t *job, gvcolor_t * color) -{ - int object_code = 0; /* always 0 for color */ - int i, new; - - switch (color->type) { - case COLOR_STRING: - for (i = 0; mpcolor[i]; i++) { - if (streq(mpcolor[i], color->u.string)) { - color->u.index = i; - break; - } - } - break; - case RGBA_BYTE: - i = 32 + mpColorResolve(&new, - color->u.rgba[0], - color->u.rgba[1], - color->u.rgba[2]); - if (new) - gvprintf(job, "%d %d #%02x%02x%02x\n", - object_code, i, - color->u.rgba[0], - color->u.rgba[1], - color->u.rgba[2]); - color->u.index = i; - break; - case HSVA_DOUBLE: /* TODO: implement color conversion */ - color->u.index = 0; - break; - default: - assert(0); /* internal error */ - } - - color->type = COLOR_INDEX; -} - -static void mp_line_style(obj_state_t *obj, int *line_style, double *style_val) -{ - switch (obj->pen) { - case PEN_DASHED: - *line_style = 1; - *style_val = 10.; - break; - case PEN_DOTTED: - *line_style = 2; - *style_val = 10.; - break; - case PEN_SOLID: - default: - *line_style = 0; - *style_val = 0.; - break; - } -} - -static void mp_comment(GVJ_t *job, char *str) -{ - gvprintf(job, "# %s\n", str); -} - -static void mp_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvputs(job, "#FIG 3.2\n"); - gvprintf(job, "# Generated by %s version %s (%s)\n", - job->common->info[0], job->common->info[1], job->common->info[2]); - gvprintf(job, "# Title: %s\n", agnameof(obj->u.g)); - gvprintf(job, "# Pages: %d\n", job->pagesArraySize.x * job->pagesArraySize.y); - gvputs(job, "Portrait\n"); /* orientation */ - gvputs(job, "Center\n"); /* justification */ - gvputs(job, "Inches\n"); /* units */ - gvputs(job, "Letter\n"); /* papersize */ - gvputs(job, "100.00\n"); /* magnification % */ - gvputs(job, "Single\n"); /* multiple-page */ - gvputs(job, "-2\n"); /* transparent color (none) */ - gvputs(job, "1200"); /* resolution */ - gvputs(job, " 2\n"); /* coordinate system (upper left) */ -} - -static void mp_end_graph(GVJ_t * job) -{ - gvputs(job, "# end of FIG file\n"); -} - -static void mp_begin_page(GVJ_t * job) -{ - Depth = 2; -} - -static void mp_begin_node(GVJ_t * job) -{ - Depth = 1; -} - -static void mp_end_node(GVJ_t * job) -{ - Depth = 2; -} - -static void mp_begin_edge(GVJ_t * job) -{ - Depth = 0; -} - -static void mp_end_edge(GVJ_t * job) -{ - Depth = 2; -} - -static void mp_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - - int object_code = 4; /* always 4 for text */ - int sub_type = 0; /* text justification */ - int color = obj->pencolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int font = -1; /* init to xfig's default font */ - double font_size = span->font->size * job->zoom; - double angle = job->rotation ? (M_PI / 2.0) : 0.0; - int font_flags = 4; /* PostScript font */ - double height = 0.0; - double length = 0.0; - - if (span->font->postscript_alias) /* if it is a standard postscript font */ - font = span->font->postscript_alias->xfig_code; - - switch (span->just) { - case 'l': - sub_type = 0; - break; - case 'r': - sub_type = 2; - break; - default: - case 'n': - sub_type = 1; - break; - } - - gvprintf(job, - "%d %d %d %d %d %d %.1f %.4f %d %.1f %.1f %d %d %s\\001\n", - object_code, sub_type, color, depth, pen_style, font, - font_size, angle, font_flags, height, length, ROUND(p.x), ROUND(p.y), - mp_string(span->str)); -} - -static void mp_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 1; /* always 1 for ellipse */ - int sub_type = 1; /* ellipse defined by radii */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = filled ? 20 : -1; - double style_val; - int direction = 0; - double angle = 0.0; - int center_x, center_y, radius_x, radius_y; - int start_x, start_y, end_x, end_y; - - mp_line_style(obj, &line_style, &style_val); - - start_x = center_x = ROUND(A[0].x); - start_y = center_y = ROUND(A[0].y); - radius_x = ROUND(A[1].x - A[0].x); - radius_y = ROUND(A[1].y - A[0].y); - end_x = ROUND(A[1].x); - end_y = ROUND(A[1].y); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.3f %d %.4f %d %d %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, direction, - angle, center_x, center_y, radius_x, radius_y, start_x, - start_y, end_x, end_y); -} - -static void mp_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 3; /* always 3 for spline */ - int sub_type; - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill; - double style_val; - int cap_style = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n; - int i; - - pointf pf, V[4]; - point p; - int j, step; - int count = 0; - int size; - - char *buffer; - char *buf; - buffer = - malloc((npoints + 1) * (BEZIERSUBDIVISION + - 1) * 20 * sizeof(char)); - buf = buffer; - - mp_line_style(obj, &line_style, &style_val); - - if (filled) { - sub_type = 5; /* closed X-spline */ - area_fill = 20; /* fully saturated color */ - fill_color = job->obj->fillcolor.u.index; - } - else { - sub_type = 4; /* opened X-spline */ - area_fill = -1; - fill_color = 0; - } - V[3].x = A[0].x; - V[3].y = A[0].y; - /* Write first point in line */ - count++; - PF2P(A[0], p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - /* write subsequent points */ - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) { - V[j].x = A[i + j].x; - V[j].y = A[i + j].y; - } - for (step = 1; step <= BEZIERSUBDIVISION; step++) { - count++; - pf = Bezier (V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - PF2P(pf, p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - } - } - - gvprintf(job, "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d\n", - object_code, - sub_type, - line_style, - thickness, - pen_color, - fill_color, - depth, - pen_style, - area_fill, - style_val, cap_style, forward_arrow, backward_arrow, count); - - gvprintf(job, " %s\n", buffer); /* print points */ - free(buffer); - for (i = 0; i < count; i++) { - gvprintf(job, " %d", i % (count - 1) ? 1 : 0); /* -1 on all */ - } - gvputs(job, "\n"); -} - -static void mp_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - - int object_code = 2; /* always 2 for polyline */ - int sub_type = 3; /* always 3 for polygon */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = filled ? 20 : -1; - double style_val; - int join_style = 0; - int cap_style = 0; - int radius = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n + 1; - - mp_line_style(obj, &line_style, &style_val); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, join_style, - cap_style, radius, forward_arrow, backward_arrow, npoints); - mpptarray(job, A, n, 1); /* closed shape */ -} - -static void mp_polyline(GVJ_t * job, pointf * A, int n) -{ - obj_state_t *obj = job->obj; - - int object_code = 2; /* always 2 for polyline */ - int sub_type = 1; /* always 1 for polyline */ - int line_style; /* solid, dotted, dashed */ - int thickness = obj->penwidth; - int pen_color = obj->pencolor.u.index; - int fill_color = 0; - int depth = Depth; - int pen_style = 0; /* not used */ - int area_fill = 0; - double style_val; - int join_style = 0; - int cap_style = 0; - int radius = 0; - int forward_arrow = 0; - int backward_arrow = 0; - int npoints = n; - - mp_line_style(obj, &line_style, &style_val); - - gvprintf(job, - "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", - object_code, sub_type, line_style, thickness, pen_color, - fill_color, depth, pen_style, area_fill, style_val, join_style, - cap_style, radius, forward_arrow, backward_arrow, npoints); - mpptarray(job, A, n, 0); /* open shape */ -} - -gvrender_engine_t mp_engine = { - 0, /* mp_begin_job */ - 0, /* mp_end_job */ - mp_begin_graph, - mp_end_graph, - 0, /* mp_begin_layer */ - 0, /* mp_end_layer */ - mp_begin_page, - 0, /* mp_end_page */ - 0, /* mp_begin_cluster */ - 0, /* mp_end_cluster */ - 0, /* mp_begin_nodes */ - 0, /* mp_end_nodes */ - 0, /* mp_begin_edges */ - 0, /* mp_end_edges */ - mp_begin_node, - mp_end_node, - mp_begin_edge, - mp_end_edge, - 0, /* mp_begin_anchor */ - 0, /* mp_end_anchor */ - 0, /* mp_begin_label */ - 0, /* mp_end_label */ - mp_textspan, - mp_resolve_color, - mp_ellipse, - mp_polygon, - mp_bezier, - mp_polyline, - mp_comment, - 0, /* mp_library_shape */ -}; - -static gvrender_features_t render_features_mp = { - 0, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - HSVA_DOUBLE, /* color_type */ -}; - -static gvdevice_features_t device_features_mp = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_mp_types[] = { - {FORMAT_MP, "mp", -1, &mp_engine, &render_features_mp}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_mp_types[] = { - {FORMAT_MP, "mp:mp", -1, NULL, &device_features_mp}, - {0, NULL, 0, NULL, NULL} -}; - diff --git a/internal/plugin/core/gvrender_core_pic.c b/internal/plugin/core/gvrender_core_pic.c deleted file mode 100644 index 8c023ac..0000000 --- a/internal/plugin/core/gvrender_core_pic.c +++ /dev/null @@ -1,600 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "agxbuf.h" -#include "utils.h" -#include "color.h" -#include "colorprocs.h" - -#include "const.h" - -/* Number of points to split splines into */ -#define BEZIERSUBDIVISION 6 - -#define PIC_COORDS_PER_LINE (16) /* to avoid stdio BUF overflow */ - -typedef enum { FORMAT_PIC, } pic_format_type; - -static int onetime = TRUE; -static double Fontscale; - -/* There are a couple of ways to generate output: - 1. generate for whatever size is given by the bounding box - - the drawing at its "natural" size might not fit on a physical page - ~ dot size specification can be used to scale the drawing - ~ and it's not difficult for user to scale the pic output to fit (multiply 4 (3 distinct) numbers on 3 lines by a scale factor) - - some troff implementations may clip large graphs - ~ handle by scaling to manageable size - - give explicit width and height as parameters to .PS - - pic scale variable is reset to 1.0 - - fonts are printed as size specified by caller, modified by user scaling - 2. scale to fit on a physical page - - requires an assumption of page size (GNU pic assumes 8.5x11.0 inches) - ~ any assumption is bound to be wrong more often than right - - requires separate scaling of font point sizes since pic's scale variable doesn't affect text - ~ possible, as above - - likewise for line thickness - - GNU pic does this (except for fonts) if .PS is used without explicit width or height; DWB pic does not - ~ pic variants likely to cause trouble - The first approach is used here. -*/ - -static const char *EscComment = ".\\\" "; /* troff comment */ -static const char picgen_msghdr[] = "dot pic plugin: "; - -static void unsupported(char *s) -{ - agerr(AGWARN, "%s%s unsupported\n", picgen_msghdr, s); -} - -/* troff font mapping */ -typedef struct { - char trname[3], *psname; -} fontinfo; - -static fontinfo fonttab[] = { - {"AB", "AvantGarde-Demi"}, - {"AI", "AvantGarde-BookOblique"}, - {"AR", "AvantGarde-Book"}, - {"AX", "AvantGarde-DemiOblique"}, - {"B ", "Times-Bold"}, - {"BI", "Times-BoldItalic"}, - {"CB", "Courier-Bold"}, - {"CO", "Courier"}, - {"CX", "Courier-BoldOblique"}, - {"H ", "Helvetica"}, - {"HB", "Helvetica-Bold"}, - {"HI", "Helvetica-Oblique"}, - {"HX", "Helvetica-BoldOblique"}, - {"Hb", "Helvetica-Narrow-Bold"}, - {"Hi", "Helvetica-Narrow-Oblique"}, - {"Hr", "Helvetica-Narrow"}, - {"Hx", "Helvetica-Narrow-BoldOblique"}, - {"I ", "Times-Italic"}, - {"KB", "Bookman-Demi"}, - {"KI", "Bookman-LightItalic"}, - {"KR", "Bookman-Light"}, - {"KX", "Bookman-DemiItalic"}, - {"NB", "NewCenturySchlbk-Bold"}, - {"NI", "NewCenturySchlbk-Italic"}, - {"NR", "NewCenturySchlbk-Roman"}, - {"NX", "NewCenturySchlbk-BoldItalic"}, - {"PA", "Palatino-Roman"}, - {"PB", "Palatino-Bold"}, - {"PI", "Palatino-Italic"}, - {"PX", "Palatino-BoldItalic"}, - {"R ", "Times-Roman"}, - {"S ", "Symbol"}, - {"ZD", "ZapfDingbats"}, - {"\000\000", (char *) 0} -}; - -static char *picfontname(char *psname) -{ - char *rv; - fontinfo *p; - - for (p = fonttab; p->psname; p++) - if (strcmp(p->psname, psname) == 0) - break; - if (p->psname) - rv = p->trname; - else { - agerr(AGERR, "%s%s is not a troff font\n", picgen_msghdr, psname); - /* try base font names, e.g. Helvetica-Outline-Oblique -> Helvetica-Outline -> Helvetica */ - if ((rv = strrchr(psname, '-'))) { - *rv = '\0'; /* psname is not specified as const ... */ - rv = picfontname(psname); - } else - rv = "R"; - } - return rv; -} - -static void picptarray(GVJ_t *job, pointf * A, int n, int close) -{ - int i; - point p; - - for (i = 0; i < n; i++) { - PF2P(A[i],p); - gvprintf(job, " %d %d", p.x, p.y); - } - if (close) { - PF2P(A[0],p); - gvprintf(job, " %d %d", p.x, p.y); - } - gvputs(job, "\n"); -} - -static char *pic_string(char *s) -{ - static char *buf = NULL; - static int bufsize = 0; - int pos = 0; - char *p; - unsigned char c; - - if (!buf) { - bufsize = 64; - buf = malloc(bufsize * sizeof(char)); - } - - p = buf; - while ((c = *s++)) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = realloc(buf, bufsize * sizeof(char)); - p = buf + pos; - } - if (isascii(c)) { - if (c == '\\') { - *p++ = '\\'; - pos++; - } - *p++ = c; - pos++; - } else { - *p++ = '\\'; - sprintf(p, "%03o", c); - p += 3; - pos += 4; - } - } - *p = '\0'; - return buf; -} - -static void pic_line_style(obj_state_t *obj, int *line_style, double *style_val) -{ - switch (obj->pen) { - case PEN_DASHED: - *line_style = 1; - *style_val = 10.; - break; - case PEN_DOTTED: - *line_style = 2; - *style_val = 10.; - break; - case PEN_SOLID: - default: - *line_style = 0; - *style_val = 0.; - break; - } -} - -static void pic_comment(GVJ_t *job, char *str) -{ - gvprintf(job, "%s %s\n", EscComment, str); -} - -static void pic_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvprintf(job, "%s Creator: %s version %s (%s)\n", - EscComment, job->common->info[0], job->common->info[1], job->common->info[2]); - gvprintf(job, "%s Title: %s\n", EscComment, agnameof(obj->u.g)); - gvprintf(job, - "%s save point size and font\n.nr .S \\n(.s\n.nr DF \\n(.f\n", - EscComment); -} - -static void pic_end_graph(GVJ_t * job) -{ - gvprintf(job, - "%s restore point size and font\n.ps \\n(.S\n.ft \\n(DF\n", - EscComment); -} - -static void pic_begin_page(GVJ_t * job) -{ - box pbr = job->pageBoundingBox; - double height, width; - - if (onetime && job->rotation && (job->rotation != 90)) { - unsupported("rotation"); - onetime = FALSE; - } - height = PS2INCH((double) (pbr.UR.y) - (double) (pbr.LL.y)); - width = PS2INCH((double) (pbr.UR.x) - (double) (pbr.LL.x)); - if (job->rotation == 90) { - double temp = width; - width = height; - height = temp; - } - gvprintf(job, ".PS %.5f %.5f\n", width, height); - gvprintf(job, - "%s to change drawing size, multiply the width and height on the .PS line above and the number on the two lines below (rounded to the nearest integer) by a scale factor\n", - EscComment); - if (width > 0.0) { - Fontscale = log10(width); - Fontscale += 3.0 - (int) Fontscale; /* between 3.0 and 4.0 */ - } else - Fontscale = 3.0; - Fontscale = pow(10.0, Fontscale); /* a power of 10 times width, between 1000 and 10000 */ - gvprintf(job, ".nr SF %.0f\nscalethickness = %.0f\n", Fontscale, - Fontscale); - gvprintf(job, - "%s don't change anything below this line in this drawing\n", - EscComment); - gvprintf(job, - "%s non-fatal run-time pic version determination, version 2\n", - EscComment); - gvprintf(job, - "boxrad=2.0 %s will be reset to 0.0 by gpic only\n", - EscComment); - gvprintf(job, "scale=1.0 %s required for comparisons\n", - EscComment); - gvprintf(job, - "%s boxrad is now 0.0 in gpic, else it remains 2.0\n", - EscComment); - gvprintf(job, - "%s dashwid is 0.1 in 10th Edition, 0.05 in DWB 2 and in gpic\n", - EscComment); - gvprintf(job, - "%s fillval is 0.3 in 10th Edition (fill 0 means black), 0.5 in gpic (fill 0 means white), undefined in DWB 2\n", - EscComment); - gvprintf(job, - "%s fill has no meaning in DWB 2, gpic can use fill or filled, 10th Edition uses fill only\n", - EscComment); - gvprintf(job, - "%s DWB 2 doesn't use fill and doesn't define fillval\n", - EscComment); - gvprintf(job, - "%s reset works in gpic and 10th edition, but isn't defined in DWB 2\n", - EscComment); - gvprintf(job, "%s DWB 2 compatibility definitions\n", - EscComment); - gvprintf(job, - "if boxrad > 1.0 && dashwid < 0.075 then X\n\tfillval = 1;\n\tdefine fill Y Y;\n\tdefine solid Y Y;\n\tdefine reset Y scale=1.0 Y;\nX\n"); - gvprintf(job, "reset %s set to known state\n", EscComment); - gvprintf(job, "%s GNU pic vs. 10th Edition d\\(e'tente\n", - EscComment); - gvprintf(job, - "if fillval > 0.4 then X\n\tdefine setfillval Y fillval = 1 - Y;\n\tdefine bold Y thickness 2 Y;\n"); - gvprintf(job, - "\t%s if you use gpic and it barfs on encountering \"solid\",\n", - EscComment); - gvprintf(job, - "\t%s\tinstall a more recent version of gpic or switch to DWB or 10th Edition pic;\n", - EscComment); - gvprintf(job, - "\t%s\tsorry, the groff folks changed gpic; send any complaint to them;\n", - EscComment); - gvprintf(job, - "X else Z\n\tdefine setfillval Y fillval = Y;\n\tdefine bold Y Y;\n\tdefine filled Y fill Y;\nZ\n"); - gvprintf(job, - "%s arrowhead has no meaning in DWB 2, arrowhead = 7 makes filled arrowheads in gpic and in 10th Edition\n", - EscComment); - gvprintf(job, - "%s arrowhead is undefined in DWB 2, initially 1 in gpic, 2 in 10th Edition\n", - EscComment); - gvprintf(job, "arrowhead = 7 %s not used by graphviz\n", - EscComment); - gvprintf(job, - "%s GNU pic supports a boxrad variable to draw boxes with rounded corners; DWB and 10th Ed. do not\n", - EscComment); - gvprintf(job, "boxrad = 0 %s no rounded corners in graphviz\n", - EscComment); - gvprintf(job, - "%s GNU pic supports a linethick variable to set line thickness; DWB and 10th Ed. do not\n", - EscComment); - gvprintf(job, "linethick = 0; oldlinethick = linethick\n"); - gvprintf(job, - "%s .PS w/o args causes GNU pic to scale drawing to fit 8.5x11 paper; DWB does not\n", - EscComment); - gvprintf(job, - "%s maxpsht and maxpswid have no meaning in DWB 2.0, set page boundaries in gpic and in 10th Edition\n", - EscComment); - gvprintf(job, - "%s maxpsht and maxpswid are predefined to 11.0 and 8.5 in gpic\n", - EscComment); - gvprintf(job, "maxpsht = %f\nmaxpswid = %f\n", height, width); - gvprintf(job, "Dot: [\n"); - gvprintf(job, - "define attrs0 %% %%; define unfilled %% %%; define rounded %% %%; define diagonals %% %%\n"); -} - -static void pic_end_page(GVJ_t * job) -{ - gvprintf(job, - "]\n.PE\n"); -} - -static void pic_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - static char *lastname; - static int lastsize; - int sz; - - switch (span->just) { - case 'l': - break; - case 'r': - p.x -= span->size.x; - break; - default: - case 'n': - p.x -= span->size.x / 2; - break; - } - /* Why on earth would we do this. But it works. SCN 2/26/2002 */ - p.y += span->font->size / (3.0 * POINTS_PER_INCH); - p.x += span->size.x / (2.0 * POINTS_PER_INCH); - - if (span->font->name && (!(lastname) || strcmp(lastname, span->font->name))) { - gvprintf(job, ".ft %s\n", picfontname(span->font->name)); - lastname = span->font->name; - } - if ((sz = (int)span->font->size) < 1) - sz = 1; - if (sz != lastsize) { - gvprintf(job, ".ps %d*\\n(SFu/%.0fu\n", sz, Fontscale); - lastsize = sz; - } - gvprintf(job, "\"%s\" at (%.5f,%.5f);\n", - pic_string(span->str), p.x, p.y); -} - -static void pic_ellipse(GVJ_t * job, pointf * A, int filled) -{ - /* A[] contains 2 points: the center and corner. */ - - gvprintf(job, - "ellipse attrs%d %swid %.5f ht %.5f at (%.5f,%.5f);\n", 1, - filled ? "fill " : "", - PS2INCH(2*(A[1].x - A[0].x)), - PS2INCH(2*(A[1].y - A[0].y)), - PS2INCH(A[0].x), - PS2INCH(A[0].y)); -} - -static void pic_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, -// start_y, end_x, end_y); - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - -// int object_code = 3; /* always 3 for spline */ - int sub_type; - int line_style; /* solid, dotted, dashed */ -// int thickness = obj->penwidth; -// int pen_color = obj->pencolor.u.index; - int fill_color = obj->fillcolor.u.index; -// int pen_style = 0; /* not used */ - int area_fill; - double style_val; -// int cap_style = 0; -// int forward_arrow = 0; -// int backward_arrow = 0; - int npoints = n; - int i; - - pointf pf, V[4]; - point p; - int j, step; - int count = 0; - int size; - - char *buffer; - char *buf; - buffer = - malloc((npoints + 1) * (BEZIERSUBDIVISION + - 1) * 20 * sizeof(char)); - buf = buffer; - - pic_line_style(obj, &line_style, &style_val); - - if (filled) { - sub_type = 5; /* closed X-spline */ - area_fill = 20; /* fully saturated color */ - fill_color = job->obj->fillcolor.u.index; - } - else { - sub_type = 4; /* opened X-spline */ - area_fill = -1; - fill_color = 0; - } - V[3].x = A[0].x; - V[3].y = A[0].y; - /* Write first point in line */ - count++; - PF2P(A[0], p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - /* write subsequent points */ - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) { - V[j].x = A[i + j].x; - V[j].y = A[i + j].y; - } - for (step = 1; step <= BEZIERSUBDIVISION; step++) { - count++; - pf = Bezier (V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - PF2P(pf, p); - size = sprintf(buf, " %d %d", p.x, p.y); - buf += size; - } - } - -// gvprintf(job, "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d\n", -// object_code, -// sub_type, -// line_style, -// thickness, -// pen_color, -// fill_color, -// depth, -// pen_style, -// area_fill, -// style_val, cap_style, forward_arrow, backward_arrow, count); - - gvprintf(job, " %s\n", buffer); /* print points */ - free(buffer); - for (i = 0; i < count; i++) { - gvprintf(job, " %d", i % (count - 1) ? 1 : 0); /* -1 on all */ - } - gvputs(job, "\n"); -} - -static void pic_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - -// int object_code = 2; /* always 2 for polyline */ -// int sub_type = 3; /* always 3 for polygon */ - int line_style; /* solid, dotted, dashed */ -// int thickness = obj->penwidth; -// int pen_color = obj->pencolor.u.index; -// int fill_color = obj->fillcolor.u.index; -// int pen_style = 0; /* not used */ -// int area_fill = filled ? 20 : -1; - double style_val; -// int join_style = 0; -// int cap_style = 0; -// int radius = 0; -// int forward_arrow = 0; -// int backward_arrow = 0; -// int npoints = n + 1; - - pic_line_style(obj, &line_style, &style_val); - -// gvprintf(job, -// "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", -// object_code, sub_type, line_style, thickness, pen_color, -// fill_color, depth, pen_style, area_fill, style_val, join_style, -// cap_style, radius, forward_arrow, backward_arrow, npoints); - picptarray(job, A, n, 1); /* closed shape */ -} - -static void pic_polyline(GVJ_t * job, pointf * A, int n) -{ - obj_state_t *obj = job->obj; - -// int object_code = 2; /* always 2 for polyline */ -// int sub_type = 1; /* always 1 for polyline */ - int line_style; /* solid, dotted, dashed */ -// int thickness = obj->penwidth; -// int pen_color = obj->pencolor.u.index; -// int fill_color = 0; -// int pen_style = 0; /* not used */ -// int area_fill = 0; - double style_val; -// int join_style = 0; -// int cap_style = 0; -// int radius = 0; -// int forward_arrow = 0; -// int backward_arrow = 0; -// int npoints = n; - - pic_line_style(obj, &line_style, &style_val); - -// gvprintf(job, -// "%d %d %d %d %d %d %d %d %d %.1f %d %d %d %d %d %d\n", -// object_code, sub_type, line_style, thickness, pen_color, -// fill_color, depth, pen_style, area_fill, style_val, join_style, -// cap_style, radius, forward_arrow, backward_arrow, npoints); - picptarray(job, A, n, 0); /* open shape */ -} - -gvrender_engine_t pic_engine = { - 0, /* pic_begin_job */ - 0, /* pic_end_job */ - pic_begin_graph, - pic_end_graph, - 0, /* pic_begin_layer */ - 0, /* pic_end_layer */ - pic_begin_page, - pic_end_page, - 0, /* pic_begin_cluster */ - 0, /* pic_end_cluster */ - 0, /* pic_begin_nodes */ - 0, /* pic_end_nodes */ - 0, /* pic_begin_edges */ - 0, /* pic_end_edges */ - 0, /* pic_begin_node */ - 0, /* pic_end_node */ - 0, /* pic_begin_edge */ - 0, /* pic_end_edge */ - 0, /* pic_begin_anchor */ - 0, /* pic_end_anchor */ - 0, /* pic_begin_label */ - 0, /* pic_end_label */ - pic_textspan, - 0, /* pic_resolve_color */ - pic_ellipse, - pic_polygon, - pic_bezier, - pic_polyline, - pic_comment, - 0, /* pic_library_shape */ -}; - - -static gvrender_features_t render_features_pic = { - 0, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - HSVA_DOUBLE, /* color_type */ -}; - -static gvdevice_features_t device_features_pic = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_pic_types[] = { - {FORMAT_PIC, "pic", -1, &pic_engine, &render_features_pic}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_pic_types[] = { - {FORMAT_PIC, "pic:pic", -1, NULL, &device_features_pic}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_pov.c b/internal/plugin/core/gvrender_core_pov.c deleted file mode 100644 index 5c75c27..0000000 --- a/internal/plugin/core/gvrender_core_pov.c +++ /dev/null @@ -1,935 +0,0 @@ -/* $Id: */ -/* vim:set shiftwidth=8 ts=8: */ - -/********************************************************** -* Copyright (c) 2011 Andy Jeutter * -* AKA HallerHarry at gmx.de * -* All rights reserved. * -**********************************************************/ - -/************************************************************************* - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "gvcint.h" - -#define POV_VERSION \ - "#version 3.6;\n" - -#define POV_GLOBALS \ - "global_settings { assumed_gamma 1.0 }\n" - -#define POV_DEFAULT \ - "#default { finish { ambient 0.1 diffuse 0.9 } }\n" - -#define POV_INCLUDE \ - "#include \"colors.inc\"\n"\ - "#include \"textures.inc\"\n"\ - "#include \"shapes.inc\"\n" - -#define POV_LIGHT \ - "light_source { <1500,3000,-2500> color White }\n" - -#define POV_CAMERA \ - "camera { location <%.3f , %.3f , %.3f>\n"\ - " look_at <%.3f , %.3f , %.3f>\n"\ - " right x * image_width / image_height\n"\ - " angle %.3f\n"\ - "}\n" - -#define POV_SKY_AND_GND \ - "//sky\n"\ - "plane { <0, 1, 0>, 1 hollow\n"\ - " texture {\n"\ - " pigment { bozo turbulence 0.95\n"\ - " color_map {\n"\ - " [0.00 rgb <0.05, 0.20, 0.50>]\n"\ - " [0.50 rgb <0.05, 0.20, 0.50>]\n"\ - " [0.75 rgb <1.00, 1.00, 1.00>]\n"\ - " [0.75 rgb <0.25, 0.25, 0.25>]\n"\ - " [1.00 rgb <0.50, 0.50, 0.50>]\n"\ - " }\n"\ - " scale <1.00, 1.00, 1.50> * 2.50\n"\ - " translate <0.00, 0.00, 0.00>\n"\ - " }\n"\ - " finish { ambient 1 diffuse 0 }\n"\ - " }\n"\ - " scale 10000\n"\ - "}\n"\ - "//mist\n"\ - "fog { fog_type 2\n"\ - " distance 50\n"\ - " color rgb <1.00, 1.00, 1.00> * 0.75\n"\ - " fog_offset 0.10\n"\ - " fog_alt 1.50\n"\ - " turbulence 1.75\n"\ - "}\n"\ - "//gnd\n"\ - "plane { <0.00, 1.00, 0.00>, 0\n"\ - " texture {\n"\ - " pigment{ color rgb <0.25, 0.45, 0.00> }\n"\ - " normal { bumps 0.75 scale 0.01 }\n"\ - " finish { phong 0.10 }\n"\ - " }\n"\ - "}\n" - -#define POV_BOX \ - "box { <%.3f, %.3f, %.3f>, <%.3f, %.3f, %.3f>\n" - -#define POV_SCALE1 \ - "scale %.3f\n" - -#define POV_SCALE3 \ - "scale "POV_VECTOR3"\n" - -#define POV_ROTATE \ - "rotate "POV_VECTOR3"\n" - -#define POV_TRANSLATE \ - "translate"POV_VECTOR3"\n" - -#define END \ - "}\n" - -#define POV_TORUS \ - "torus { %.3f, %.3f\n" - -#define POV_SPHERE_SWEEP \ - "sphere_sweep {\n"\ - " %s\n"\ - " %d,\n" - -#define POV_SPHERE \ - "sphere {"POV_VECTOR3", 1.0\n" // center, radius - -#define POV_TEXT \ - "text {\n"\ - " ttf \"%s\",\n"\ - " \"%s\", %.3f, %.3f\n" - -#define POV_DECLARE \ - "#declare %s = %s;\n" - -#define POV_OBJECT \ - "object { %s }\n" - -#define POV_VERBATIM \ - "%s\n" - -#define POV_DEBUG \ - "#debug %s\n" - -#define POV_POLYGON \ - "polygon { %d,\n" - -#define POV_VECTOR3 \ - "<%9.3f, %9.3f, %9.3f>" - -#define POV_PIGMENT_COLOR \ - "pigment { color %s }\n" - -#define POV_COLOR_NAME \ - "%s transmit %.3f" - -#define POV_COLOR_RGB \ - "rgb"POV_VECTOR3" transmit %.3f" - -//colors are taken from /usr/share/povray-3.6/include/colors.inc -//list must be LANG_C sorted (all lower case) -#define POV_COLORS \ -"aquamarine",\ -"bakerschoc",\ -"black",\ -"blue",\ -"blueviolet",\ -"brass",\ -"brightgold",\ -"bronze",\ -"bronze2",\ -"brown",\ -"cadetblue",\ -"clear",\ -"coolcopper",\ -"copper",\ -"coral",\ -"cornflowerblue",\ -"cyan",\ -"darkbrown",\ -"darkgreen",\ -"darkolivegreen",\ -"darkorchid",\ -"darkpurple",\ -"darkslateblue",\ -"darkslategray",\ -"darkslategrey",\ -"darktan",\ -"darkturquoise",\ -"darkwood",\ -"dkgreencopper",\ -"dustyrose",\ -"feldspar",\ -"firebrick",\ -"flesh",\ -"forestgreen",\ -"gold",\ -"goldenrod",\ -"gray05",\ -"gray10",\ -"gray15",\ -"gray20",\ -"gray25",\ -"gray30",\ -"gray35",\ -"gray40",\ -"gray45",\ -"gray50",\ -"gray55",\ -"gray60",\ -"gray65",\ -"gray70",\ -"gray75",\ -"gray80",\ -"gray85",\ -"gray90",\ -"gray95",\ -"green",\ -"greencopper",\ -"greenyellow",\ -"huntersgreen",\ -"indianred",\ -"khaki",\ -"lightblue",\ -"light_purple",\ -"lightsteelblue",\ -"lightwood",\ -"limegreen",\ -"magenta",\ -"mandarinorange",\ -"maroon",\ -"mediumaquamarine",\ -"mediumblue",\ -"mediumforestgreen",\ -"mediumgoldenrod",\ -"mediumorchid",\ -"mediumseagreen",\ -"mediumslateblue",\ -"mediumspringgreen",\ -"mediumturquoise",\ -"mediumvioletred",\ -"mediumwood",\ -"med_purple",\ -"mica",\ -"midnightblue",\ -"navy",\ -"navyblue",\ -"neonblue",\ -"neonpink",\ -"newmidnightblue",\ -"newtan",\ -"oldgold",\ -"orange",\ -"orangered",\ -"orchid",\ -"palegreen",\ -"pink",\ -"plum",\ -"quartz",\ -"red",\ -"richblue",\ -"salmon",\ -"scarlet",\ -"seagreen",\ -"semiSweetChoc",\ -"sienna",\ -"silver",\ -"skyblue",\ -"slateblue",\ -"spicypink",\ -"springgreen",\ -"steelblue",\ -"summersky",\ -"tan",\ -"thistle",\ -"turquoise",\ -"verydarkbrown",\ -"very_light_purple",\ -"violet",\ -"violetred",\ -"wheat",\ -"white",\ -"yellow",\ -"yellowgreen" - -#define GV_OBJ_EXT(type, obj, name) \ - do { \ - char debug_str[256]; \ - gvprintf(job, POV_DECLARE, type, obj); \ - gvprintf(job, POV_OBJECT, type); \ - gvprintf(job, POV_DECLARE, "Min", "min_extent("type")"); \ - gvprintf(job, POV_DECLARE, "Max", "max_extent("type")"); \ - snprintf(debug_str, 256, \ - "concat(\"Dim = \" , vstr(3, Max - Min, \", \", 0, 3)," \ - " \" "type": %s\", \"\\n\")", name); \ - gvprintf(job, POV_DEBUG, debug_str); \ - } while (0) - -/* -//png, gif, NO jpg! -pigment -{ image_map - { gif "image.gif" - map_type 1 - } -} -*/ - -/* -#declare Sphere = -sphere { - <0,0,0>, 1 - pigment { rgb <1,0,0> } -} -#declare Min = min_extent ( Sphere ); -#declare Max = max_extent ( Sphere ); -object { Sphere } -box { - Min, Max - pigment { rgbf <1,1,1,0.5> } - scale<20,20,20> -} -*/ - -/* -STRING functions - -str( float , min_len , digits_after_dot ) -concat( STRING , STRING , [STRING ,...]) -chr( INT ) -substr( STRING , INT , INT ) -strupr( STRING ) -strlwr( STRING ) -vstr( vec_dimension , vec, sep_str, min_len, digits_after_dot ) - -examples: -#debug vstr(3, Min, ", ", 0, 3) -#debug "\n*****************\n" -#debug concat ( "Max =", vstr(3, Max, ", ", 0, 3), chr(13), chr(10) ) -*/ - - -#define DPI 72.0 -#define RENDERER_COLOR_TYPE RGBA_BYTE -typedef enum { FORMAT_POV, } pov_format_type; - -//#define DEBUG - -//TODO: check why this dot file does not work (90 rotated) -// /usr/share/graphviz/graphs/directed/NaN.gv -//TODO: add Texttures -//TODO: check how we can receive attributes from dot file -// if we can't receive attributes set defaults in pov include file -// - put #include "graph-scheme-fancy.inc" in pov file -// - run povray with +L`pwd` -// - put e.g. #declare mycolor = Gold; in graph-scheme-fancy.inc -// - use textures and color: pigment { color mycolor transmit 0.000 } -//TODO: idea, put the whole graph in a declare= and then -// print it with something along the line: -// object{ graph translate{page->translation, ...} rotate{page->rotation, ...} } - -static char *pov_knowncolors[] = { POV_COLORS }; - -static float layerz = 0; -static float z = 0; - -char *el(GVJ_t* job, char *template, ...) -{ -#if defined(HAVE_VASPRINTF) - char *str; - va_list arglist; - - va_start(arglist, template); - vasprintf(&str, template, arglist); - va_end(arglist); - - return str; -#elif defined(HAVE_VSNPRINTF) - char buf[BUFSIZ]; - int len; - char *str; - va_list arglist; - - va_start(arglist, template); - len = vsnprintf((char *)buf, BUFSIZ, template, arglist); - if (len < 0) { - job->common->errorfn("pov renderer:el - %s\n", strerror(errno)); - str = strdup (""); - } - else if (len >= BUFSIZ) { - str = malloc (len+1); - va_end(arglist); - va_start(arglist, template); - len = vsprintf(str, template, arglist); - } - else { - str = strdup (buf); - } - va_end(arglist); - - return str; -#else -/* Dummy function that will never be used */ - return strdup(""); -#endif -} - -static char *pov_color_as_str(GVJ_t * job, gvcolor_t color, float transparency) -{ - char *pov, *c; - switch (color.type) { - case COLOR_STRING: -#ifdef DEBUG - gvprintf(job, "// type = %d, color = %s\n", color.type, color.u.string); -#endif - if (!strcmp(color.u.string, "red")) - c = el(job, POV_COLOR_NAME, "Red", transparency); - else if (!strcmp(color.u.string, "green")) - c = el(job, POV_COLOR_NAME, "Green", transparency); - else if (!strcmp(color.u.string, "blue")) - c = el(job, POV_COLOR_NAME, "Blue", transparency); - else - c = el(job, POV_COLOR_NAME, color.u.string, transparency); - break; - case RENDERER_COLOR_TYPE: -#ifdef DEBUG - gvprintf(job, "// type = %d, color = %d, %d, %d\n", - color.type, color.u.rgba[0], color.u.rgba[1], - color.u.rgba[2]); -#endif - c = el(job, POV_COLOR_RGB, - color.u.rgba[0] / 256.0, color.u.rgba[1] / 256.0, - color.u.rgba[2] / 256.0, transparency); - break; - default: - fprintf(stderr, - "oops, internal error: unhandled color type=%d %s\n", - color.type, color.u.string); - assert(0); //oops, wrong type set in gvrender_features_t? - } - pov = el(job, POV_PIGMENT_COLOR, c); - free(c); - return pov; -} - -static void pov_comment(GVJ_t * job, char *str) -{ - gvprintf(job, "//*** comment: %s\n", str); -} - -static void pov_begin_job(GVJ_t * job) -{ - gvputs(job, POV_VERSION); - gvputs(job, POV_GLOBALS); - gvputs(job, POV_DEFAULT); - gvputs(job, POV_INCLUDE); - gvprintf(job, POV_DECLARE, "black", "Black"); - gvprintf(job, POV_DECLARE, "white", "White"); -} - -static void pov_begin_graph(GVJ_t * job) -{ - float x, y, d, px, py; - - gvprintf(job, "//*** begin_graph %s\n", agnameof(job->obj->u.g)); -#ifdef DEBUG - gvprintf(job, "// graph_index = %d, pages = %d, layer = %d/%d\n", - job->graph_index, job->numPages, job->layerNum, - job->numLayers); - gvprintf(job, "// pagesArraySize.x,y = %d,%d\n", job->pagesArraySize.x, - job->pagesArraySize.y); - gvprintf(job, "// pagesArrayFirst.x,y = %d,%d\n", - job->pagesArrayFirst.x, job->pagesArrayFirst.y); - gvprintf(job, "// pagesArrayElem.x,y = %d,%d\n", job->pagesArrayElem.x, - job->pagesArrayElem.y); - gvprintf(job, "// bb.LL,UR = %.3f,%.3f, %.3f,%.3f\n", job->bb.LL.x, - job->bb.LL.y, job->bb.UR.x, job->bb.UR.y); - gvprintf(job, "// pageBox in graph LL,UR = %.3f,%.3f, %.3f,%.3f\n", - job->pageBox.LL.x, job->pageBox.LL.y, job->pageBox.UR.x, - job->pageBox.UR.y); - gvprintf(job, "// pageSize.x,y = %.3f,%.3f\n", job->pageSize.x, - job->pageSize.y); - gvprintf(job, "// focus.x,y = %.3f,%.3f\n", job->focus.x, job->focus.y); - gvprintf(job, "// zoom = %.3f, rotation = %d\n", job->zoom, - (float)job->rotation); - gvprintf(job, "// view port.x,y = %.3f,%.3f\n", job->view.x, - job->view.y); - gvprintf(job, "// canvasBox LL,UR = %.3f,%.3f, %.3f,%.3f\n", - job->canvasBox.LL.x, job->canvasBox.LL.y, job->canvasBox.UR.x, - job->canvasBox.UR.y); - gvprintf(job, "// pageBoundingBox LL,UR = %d,%d, %d,%d\n", - job->pageBoundingBox.LL.x, job->pageBoundingBox.LL.y, - job->pageBoundingBox.UR.x, job->pageBoundingBox.UR.y); - gvprintf(job, "// boundingBox (all pages) LL,UR = %d,%d, %d,%d\n", - job->boundingBox.LL.x, job->boundingBox.LL.y, - job->boundingBox.UR.x, job->boundingBox.UR.y); - gvprintf(job, "// scale.x,y = %.3f,%.3f\n", job->scale.x, job->scale.y); - gvprintf(job, "// translation.x,y = %.3f,%.3f\n", job->translation.x, - job->translation.y); - gvprintf(job, "// devscale.x,y = %.3f,%.3f\n", job->devscale.x, - job->devscale.y); - gvprintf(job, "// verbose = %d\n", job->common->verbose); - gvprintf(job, "// cmd = %s\n", job->common->cmdname); - gvprintf(job, "// info = %s, %s, %s\n", job->common->info[0], - job->common->info[1], job->common->info[2]); -#endif - - //setup scene - x = job->view.x / 2.0 * job->scale.x; - y = job->view.y / 2.0 * job->scale.y; - d = -500; - px = atanf(x / fabsf(d)) * 180 / M_PI * 2; - py = atanf(y / fabsf(d)) * 180 / M_PI * 2; - gvprintf(job, POV_CAMERA, x, y, d, x, y, 0.0, - (px > py ? px : py) * 1.2); - gvputs(job, POV_SKY_AND_GND); - gvputs(job, POV_LIGHT); -} - -static void pov_end_graph(GVJ_t * job) -{ - gvputs(job, "//*** end_graph\n"); -} - -static void pov_begin_layer(GVJ_t * job, char *layername, int layerNum, int numLayers) -{ - gvprintf(job, "//*** begin_layer: %s, %d/%d\n", layername, layerNum, - numLayers); - layerz = layerNum * -10; -} - -static void pov_end_layer(GVJ_t * job) -{ - gvputs(job, "//*** end_layer\n"); -} - -static void pov_begin_page(GVJ_t * job) -{ - gvputs(job, "//*** begin_page\n"); -} - -static void pov_end_page(GVJ_t * job) -{ - gvputs(job, "//*** end_page\n"); -} - -static void pov_begin_cluster(GVJ_t * job) -{ - gvputs(job, "//*** begin_cluster\n"); - layerz -= 2; -} - -static void pov_end_cluster(GVJ_t * job) -{ - gvputs(job, "//*** end_cluster\n"); -} - -static void pov_begin_node(GVJ_t * job) -{ - gvprintf(job, "//*** begin_node: %s\n", agnameof(job->obj->u.n)); -} - -static void pov_end_node(GVJ_t * job) -{ - gvputs(job, "//*** end_node\n"); -} - -static void pov_begin_edge(GVJ_t * job) -{ - gvputs(job, "//*** begin_edge\n"); - layerz -= 5; -#ifdef DEBUG - gvprintf(job, "// layerz = %.3f\n", layerz); -#endif -} - -static void pov_end_edge(GVJ_t * job) -{ - gvputs(job, "//*** end_edge\n"); - layerz += 5; -#ifdef DEBUG - gvprintf(job, "// layerz = %.3f\n", layerz); -#endif -} - -static void pov_textspan(GVJ_t * job, pointf c, textspan_t * span) -{ - double x, y; - char *pov, *s, *r, *t, *p; - - gvprintf(job, "//*** textspan: %s, fontsize = %.3f, fontname = %s\n", - span->str, span->font->size, span->font->name); - z = layerz - 9; - -#ifdef DEBUG - if (span->font->postscript_alias) - gvputs(job, "// Warning: postscript_alias not handled!\n"); -#endif - - //handle text justification - switch (span->just) { - case 'l': //left justified - break; - case 'r': //right justified - c.x = c.x - span->size.x; - break; - default: - case 'n': //centered - c.x = c.x - span->size.x / 2.0; - break; - } - - x = (c.x + job->translation.x) * job->scale.x; - y = (c.y + job->translation.y) * job->scale.y; - - s = el(job, POV_SCALE1, span->font->size * job->scale.x); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, x, y, z); - p = pov_color_as_str(job, job->obj->pencolor, 0.0); - - //pov bundled fonts: timrom.ttf, cyrvetic.ttf - pov = el(job, POV_TEXT " %s %s %s %s %s" END, - span->font->name, 0.25, 0.0, //font, depth (0.5 ... 2.0), offset - span->str, " no_shadow\n", s, r, t, p); - -#ifdef DEBUG - GV_OBJ_EXT("Text", pov, span->str); - gvprintf(job, "sphere{<0, 0, 0>, 2\ntranslate<%f, %f, %f>\n" - "pigment{color Red}\nno_shadow\n}\n", x, y, z - 1); -#else - gvputs(job, pov); -#endif - - free(pov); - free(r); - free(p); - free(t); - free(s); -} - -static void pov_ellipse(GVJ_t * job, pointf * A, int filled) -{ - char *pov, *s, *r, *t, *p; - float cx, cy, rx, ry, w; - - gvputs(job, "//*** ellipse\n"); - z = layerz - 6; - - // A[0] center, A[1] corner of ellipse - cx = (A[0].x + job->translation.x) * job->scale.x; - cy = (A[0].y + job->translation.y) * job->scale.y; - rx = (A[1].x - A[0].x) * job->scale.x; - ry = (A[1].y - A[0].y) * job->scale.y; - w = job->obj->penwidth / (rx + ry) / 2.0 * 5; - - //draw rim (torus) - s = el(job, POV_SCALE3, rx, (rx + ry) / 4.0, ry); - r = el(job, POV_ROTATE, 90.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, cx, cy, z); - p = pov_color_as_str(job, job->obj->pencolor, 0.0); - - pov = el(job, POV_TORUS " %s %s %s %s" END, 1.0, w, //radius, size of ring - s, r, t, p); - -#ifdef DEBUG - GV_OBJ_EXT("Torus", pov, ""); - gvprintf(job, "sphere{<0, 0, 0>, 2\ntranslate<%f, %f, %f>\n" - "pigment{color Green}\nno_shadow\n}\n", cx, cy, z - 1); -#else - gvputs(job, pov); -#endif - - free(s); - free(r); - free(t); - free(p); - free(pov); - - //backgroud of ellipse if filled - if (filled) { - s = el(job, POV_SCALE3, rx, ry, 1.0); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, cx, cy, z); - p = pov_color_as_str(job, job->obj->fillcolor, 0.0); - - pov = el(job, POV_SPHERE " %s %s %s %s" END, - 0.0, 0.0, 0.0, s, r, t, p); - - gvputs(job, pov); - - free(s); - free(r); - free(t); - free(p); - free(pov); - } -} - -static void pov_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - int i; - char *v, *x; - char *pov, *s, *r, *t, *p; - - gvputs(job, "//*** bezier\n"); - z = layerz - 4; - - s = el(job, POV_SCALE3, job->scale.x, job->scale.y, 1.0); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, 0.0, 0.0, z - 2); - p = pov_color_as_str(job, job->obj->fillcolor, 0.0); - - pov = el(job, POV_SPHERE_SWEEP, "b_spline", n + 2); - - for (i = 0; i < n; i++) { - v = el(job, POV_VECTOR3 ", %.3f\n", A[i].x + job->translation.x, A[i].y + job->translation.y, 0.0, job->obj->penwidth); //z coordinate, thickness - x = el(job, "%s %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - - //TODO: we currently just use the start and end points of the curve as - //control points but we should use center of nodes - if (i == 0 || i == n - 1) { - v = el(job, POV_VECTOR3 ", %.3f\n", A[i].x + job->translation.x, A[i].y + job->translation.y, 0.0, job->obj->penwidth); //z coordinate, thickness - x = el(job, "%s %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - } -#ifdef DEBUG - gvprintf(job, "sphere{<0, 0, 0>, 2\ntranslate<%f, %f, %f>\n" - "pigment{color Yellow}\nno_shadow\n}\n", - (A[i].x + job->translation.x) * job->scale.x, - (A[i].y + job->translation.y) * job->scale.y, z - 2); -#endif - } - x = el(job, " tolerance 0.01\n %s %s %s %s" END, s, r, t, - p); - pov = el(job, "%s%s", pov, x); //catenate pov & end str - free(x); - - gvputs(job, pov); - - free(s); - free(r); - free(t); - free(p); - free(pov); -} - -static void pov_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - char *pov, *s, *r, *t, *p, *v, *x; - int i; - - gvputs(job, "//*** polygon\n"); - z = layerz - 2; - - s = el(job, POV_SCALE3, job->scale.x, job->scale.y, 1.0); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, 0.0, 0.0, z - 2); - p = pov_color_as_str(job, job->obj->pencolor, 0.0); - - pov = el(job, POV_SPHERE_SWEEP, "linear_spline", n + 1); - - for (i = 0; i < n; i++) { - v = el(job, POV_VECTOR3 ", %.3f\n", A[i].x + job->translation.x, A[i].y + job->translation.y, 0.0, job->obj->penwidth); //z coordinate, thickness - x = el(job, "%s %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - } - - //close polygon, add starting point as final point^ - v = el(job, POV_VECTOR3 ", %.3f\n", A[0].x + job->translation.x, A[0].y + job->translation.y, 0.0, job->obj->penwidth); //z coordinate, thickness - - x = el(job, "%s %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - - x = el(job, " tolerance 0.1\n %s %s %s %s" END, s, r, t, p); - pov = el(job, "%s%s", pov, x); //catenate pov & end str - free(x); - - gvputs(job, pov); - - free(s); - free(r); - free(t); - free(p); - free(pov); - - //create fill background - if (filled) { - s = el(job, POV_SCALE3, job->scale.x, job->scale.y, 1.0); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, 0.0, 0.0, z - 2); - p = pov_color_as_str(job, job->obj->fillcolor, 0.25); - - pov = el(job, POV_POLYGON, n); - - for (i = 0; i < n; i++) { - //create on z = 0 plane, then translate to real z pos - v = el(job, POV_VECTOR3, - A[i].x + job->translation.x, - A[i].y + job->translation.y, 0.0); - x = el(job, "%s\n %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - } - x = el(job, "\n %s %s %s %s" END, s, r, t, p); - pov = el(job, "%s%s", pov, x); //catenate pov & end str - free(x); - - gvputs(job, pov); - - free(s); - free(r); - free(t); - free(p); - free(pov); - } -} - -static void pov_polyline(GVJ_t * job, pointf * A, int n) -{ - char *pov, *s, *r, *t, *p, *v, *x; - int i; - - gvputs(job, "//*** polyline\n"); - z = layerz - 6; - - s = el(job, POV_SCALE3, job->scale.x, job->scale.y, 1.0); - r = el(job, POV_ROTATE, 0.0, 0.0, (float)job->rotation); - t = el(job, POV_TRANSLATE, 0.0, 0.0, z); - p = pov_color_as_str(job, job->obj->pencolor, 0.0); - - pov = el(job, POV_SPHERE_SWEEP, "linear_spline", n); - - for (i = 0; i < n; i++) { - v = el(job, POV_VECTOR3 ", %.3f\n", A[i].x + job->translation.x, A[i].y + job->translation.y, 0.0, job->obj->penwidth); //z coordinate, thickness - x = el(job, "%s %s", pov, v); //catenate pov & vector v - free(v); - free(pov); - pov = x; - } - - x = el(job, " tolerance 0.01\n %s %s %s %s" END, s, r, t, p); - pov = el(job, "%s%s", pov, x); //catenate pov & end str - free(x); - - gvputs(job, pov); - - free(s); - free(r); - free(t); - free(p); - free(pov); -} - -gvrender_engine_t pov_engine = { - pov_begin_job, - 0, /* pov_end_job */ - pov_begin_graph, - pov_end_graph, - pov_begin_layer, - pov_end_layer, - pov_begin_page, - pov_end_page, - pov_begin_cluster, - pov_end_cluster, - 0, /* pov_begin_nodes */ - 0, /* pov_end_nodes */ - 0, /* pov_begin_edges */ - 0, /* pov_end_edges */ - pov_begin_node, - pov_end_node, - pov_begin_edge, - pov_end_edge, - 0, /* pov_begin_anchor */ - 0, /* pov_end_anchor */ - 0, /* pov_begin_label */ - 0, /* pov_end_label */ - pov_textspan, - 0, /* pov_resolve_color */ - pov_ellipse, - pov_polygon, - pov_bezier, - pov_polyline, - pov_comment, - 0, /* pov_library_shape */ -}; - -gvrender_features_t render_features_pov = { - /* flags */ - GVDEVICE_DOES_LAYERS - | GVRENDER_DOES_MAP_RECTANGLE - | GVRENDER_DOES_MAP_CIRCLE - | GVRENDER_DOES_MAP_POLYGON - | GVRENDER_DOES_MAP_ELLIPSE - | GVRENDER_DOES_MAP_BSPLINE - | GVRENDER_NO_WHITE_BG - | GVRENDER_DOES_TRANSFORM - | GVRENDER_DOES_Z | GVRENDER_DOES_MAP_BSPLINE, - 4.0, /* default pad - graph units */ - pov_knowncolors, /* knowncolors */ - sizeof(pov_knowncolors) / sizeof(char *), /* strings in knowncolors */ - RENDERER_COLOR_TYPE /* set renderer color type */ -}; - -gvdevice_features_t device_features_pov = { - GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0.0, 0.0}, /* default margin - points */ - {0.0, 0.0}, /* default page width, height - points */ - {DPI, DPI}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_pov_types[] = { -#ifdef HAVE_VSNPRINTF - {FORMAT_POV, "pov", 1, &pov_engine, &render_features_pov}, -#endif - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_pov_types[] = { -#ifdef HAVE_VSNPRINTF - {FORMAT_POV, "pov:pov", 1, NULL, &device_features_pov}, -#endif - {0, NULL, 0, NULL, NULL} -}; - diff --git a/internal/plugin/core/gvrender_core_ps.c b/internal/plugin/core/gvrender_core_ps.c deleted file mode 100644 index 84bb45d..0000000 --- a/internal/plugin/core/gvrender_core_ps.c +++ /dev/null @@ -1,499 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "agxbuf.h" -#include "utils.h" -#include "ps.h" - -/* for CHAR_LATIN1 */ -#include "const.h" - -/* - * J$: added `pdfmark' URL embedding. PostScript rendered from - * dot files with URL attributes will get active PDF links - * from Adobe's Distiller. - */ -#define PDFMAX 14400 /* Maximum size of PDF page */ - -typedef enum { FORMAT_PS, FORMAT_PS2, FORMAT_EPS } ps_format_type; - -static int isLatin1; -static char setupLatin1; - -static void psgen_begin_job(GVJ_t * job) -{ - gvputs(job, "%!PS-Adobe-3.0"); - if (job->render.id == FORMAT_EPS) - gvputs(job, " EPSF-3.0\n"); - else - gvputs(job, "\n"); - gvprintf(job, "%%%%Creator: %s version %s (%s)\n", - job->common->info[0], job->common->info[1], job->common->info[2]); -} - -static void psgen_end_job(GVJ_t * job) -{ - gvputs(job, "%%Trailer\n"); - if (job->render.id != FORMAT_EPS) - gvprintf(job, "%%%%Pages: %d\n", job->common->viewNum); - if (job->common->show_boxes == NULL) - if (job->render.id != FORMAT_EPS) - gvprintf(job, "%%%%BoundingBox: %d %d %d %d\n", - job->boundingBox.LL.x, job->boundingBox.LL.y, - job->boundingBox.UR.x, job->boundingBox.UR.y); - gvputs(job, "end\nrestore\n"); - gvputs(job, "%%EOF\n"); -} - -static void psgen_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - setupLatin1 = FALSE; - - if (job->common->viewNum == 0) { - gvprintf(job, "%%%%Title: %s\n", agnameof(obj->u.g)); - if (job->render.id != FORMAT_EPS) - gvputs(job, "%%Pages: (atend)\n"); - else - gvputs(job, "%%Pages: 1\n"); - if (job->common->show_boxes == NULL) { - if (job->render.id != FORMAT_EPS) - gvputs(job, "%%BoundingBox: (atend)\n"); - else - gvprintf(job, "%%%%BoundingBox: %d %d %d %d\n", - job->pageBoundingBox.LL.x, job->pageBoundingBox.LL.y, - job->pageBoundingBox.UR.x, job->pageBoundingBox.UR.y); - } - gvputs(job, "%%EndComments\nsave\n"); - /* include shape library */ - cat_libfile(job, job->common->lib, ps_txt); - /* include epsf */ - epsf_define(job); - if (job->common->show_boxes) { - const char* args[2]; - args[0] = job->common->show_boxes[0]; - args[1] = NULL; - cat_libfile(job, NULL, args); - } - } - isLatin1 = (GD_charset(obj->u.g) == CHAR_LATIN1 ? CHAR_LATIN1 : -1); - /* We always setup Latin1. The charset info is always output, - * and installing it is cheap. With it installed, we can then - * rely on ps_string to convert UTF-8 characters whose encoding - * is in the range of Latin-1 into the Latin-1 equivalent and - * get the expected PostScript output. - */ - if (!setupLatin1) { - gvputs(job, "setupLatin1\n"); /* as defined in ps header */ - setupLatin1 = TRUE; - } - /* Set base URL for relative links (for Distiller >= 3.0) */ - if (obj->url) - gvprintf(job, "[ {Catalog} << /URI << /Base %s >> >>\n" - "/PUT pdfmark\n", ps_string(obj->url,isLatin1)); -} - -static void psgen_begin_layer(GVJ_t * job, char *layername, int layerNum, int numLayers) -{ - gvprintf(job, "%d %d setlayer\n", layerNum, numLayers); -} - -static void psgen_begin_page(GVJ_t * job) -{ - box pbr = job->pageBoundingBox; - - gvprintf(job, "%%%%Page: %d %d\n", - job->common->viewNum + 1, job->common->viewNum + 1); - if (job->common->show_boxes == NULL) - gvprintf(job, "%%%%PageBoundingBox: %d %d %d %d\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x, pbr.UR.y); - gvprintf(job, "%%%%PageOrientation: %s\n", - (job->rotation ? "Landscape" : "Portrait")); - if (job->render.id == FORMAT_PS2) - gvprintf(job, "<< /PageSize [%d %d] >> setpagedevice\n", - pbr.UR.x, pbr.UR.y); - gvprintf(job, "%d %d %d beginpage\n", - job->pagesArrayElem.x, job->pagesArrayElem.y, job->numPages); - if (job->common->show_boxes == NULL) - gvprintf(job, "gsave\n%d %d %d %d boxprim clip newpath\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x-pbr.LL.x, pbr.UR.y-pbr.LL.y); - gvprintf(job, "%g %g set_scale %d rotate %g %g translate\n", - job->scale.x, job->scale.y, - job->rotation, - job->translation.x, job->translation.y); - - /* Define the size of the PS canvas */ - if (job->render.id == FORMAT_PS2) { - if (pbr.UR.x >= PDFMAX || pbr.UR.y >= PDFMAX) - job->common->errorfn("canvas size (%d,%d) exceeds PDF limit (%d)\n" - "\t(suggest setting a bounding box size, see dot(1))\n", - pbr.UR.x, pbr.UR.y, PDFMAX); - gvprintf(job, "[ /CropBox [%d %d %d %d] /PAGES pdfmark\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x, pbr.UR.y); - } -} - -static void psgen_end_page(GVJ_t * job) -{ - if (job->common->show_boxes) { - gvputs(job, "0 0 0 edgecolor\n"); - cat_libfile(job, NULL, job->common->show_boxes + 1); - } - /* the showpage is really a no-op, but at least one PS processor - * out there needs to see this literal token. endpage does the real work. - */ - gvputs(job, "endpage\nshowpage\ngrestore\n"); - gvputs(job, "%%PageTrailer\n"); - gvprintf(job, "%%%%EndPage: %d\n", job->common->viewNum); -} - -static void psgen_begin_cluster(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvprintf(job, "%% %s\n", agnameof(obj->u.g)); - - gvputs(job, "gsave\n"); -} - -static void psgen_end_cluster(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void psgen_begin_node(GVJ_t * job) -{ - gvputs(job, "gsave\n"); -} - -static void psgen_end_node(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void -psgen_begin_edge(GVJ_t * job) -{ - gvputs(job, "gsave\n"); -} - -static void psgen_end_edge(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void psgen_begin_anchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id) -{ - obj_state_t *obj = job->obj; - - if (url && obj->url_map_p) { - gvputs(job, "[ /Rect [ "); - gvprintpointflist(job, obj->url_map_p, 2); - gvputs(job, " ]\n"); - gvprintf(job, " /Border [ 0 0 0 ]\n" - " /Action << /Subtype /URI /URI %s >>\n" - " /Subtype /Link\n" - "/ANN pdfmark\n", - ps_string(url, isLatin1)); - } -} - -static void -ps_set_pen_style(GVJ_t *job) -{ - double penwidth = job->obj->penwidth; - char *p, *line, **s = job->obj->rawstyle; - - gvprintdouble(job, penwidth); - gvputs(job," setlinewidth\n"); - - while (s && (p = line = *s++)) { - if (strcmp(line, "setlinewidth") == 0) - continue; - while (*p) - p++; - p++; - while (*p) { - gvprintf(job,"%s ", p); - while (*p) - p++; - p++; - } - if (strcmp(line, "invis") == 0) - job->obj->penwidth = 0; - gvprintf(job, "%s\n", line); - } -} - -static void ps_set_color(GVJ_t *job, gvcolor_t *color) -{ - char *objtype; - - if (color) { - switch (job->obj->type) { - case ROOTGRAPH_OBJTYPE: - case CLUSTER_OBJTYPE: - objtype = "graph"; - break; - case NODE_OBJTYPE: - objtype = "node"; - break; - case EDGE_OBJTYPE: - objtype = "edge"; - break; - default: - objtype = "sethsb"; - break; - } - gvprintf(job, "%.5g %.5g %.5g %scolor\n", - color->u.HSVA[0], color->u.HSVA[1], color->u.HSVA[2], objtype); - } -} - -static void psgen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - char *str; - - if (job->obj->pencolor.u.HSVA[3] < .5) - return; /* skip transparent text */ - - ps_set_color(job, &(job->obj->pencolor)); - gvprintdouble(job, span->font->size); - gvprintf(job, " /%s set_font\n", span->font->name); - str = ps_string(span->str,isLatin1); - switch (span->just) { - case 'r': - p.x -= span->size.x; - break; - case 'l': - p.x -= 0.0; - break; - case 'n': - default: - p.x -= span->size.x / 2.0; - break; - } - p.y += span->yoffset_centerline; - gvprintpointf(job, p); - gvputs(job, " moveto "); - gvprintdouble(job, span->size.x); - gvprintf(job, " %s alignedtext\n", str); -} - -static void psgen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - /* A[] contains 2 points: the center and corner. */ - pointf AA[2]; - - AA[0] = A[0]; - AA[1].x = A[1].x - A[0].x; - AA[1].y = A[1].y - A[0].y; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvprintpointflist(job, AA, 2); - gvputs(job, " ellipse_path fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvprintpointflist(job, AA, 2); - gvputs(job, " ellipse_path stroke\n"); - } -} - -static void -psgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - int j; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j += 3) { - gvprintpointflist(job, &A[j], 3); - gvputs(job, " curveto\n"); - } - gvputs(job, "closepath fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j += 3) { - gvprintpointflist(job, &A[j], 3); - gvputs(job, " curveto\n"); - } - gvputs(job, "stroke\n"); - } -} - -static void psgen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - int j; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "closepath fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "closepath stroke\n"); - } -} - -static void psgen_polyline(GVJ_t * job, pointf * A, int n) -{ - int j; - - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "stroke\n"); - } -} - -static void psgen_comment(GVJ_t * job, char *str) -{ - gvputs(job, "% "); - gvputs(job, str); - gvputs(job, "\n"); -} - -static void psgen_library_shape(GVJ_t * job, char *name, pointf * A, int n, int filled) -{ - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "[ "); - gvprintpointflist(job, A, n); - gvputs(job, " "); - gvprintpointf(job, A[0]); - gvprintf(job, " ] %d true %s\n", n, name); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "[ "); - gvprintpointflist(job, A, n); - gvputs(job, " "); - gvprintpointf(job, A[0]); - gvprintf(job, " ] %d false %s\n", n, name); - } -} - -static gvrender_engine_t psgen_engine = { - psgen_begin_job, - psgen_end_job, - psgen_begin_graph, - 0, /* psgen_end_graph */ - psgen_begin_layer, - 0, /* psgen_end_layer */ - psgen_begin_page, - psgen_end_page, - psgen_begin_cluster, - psgen_end_cluster, - 0, /* psgen_begin_nodes */ - 0, /* psgen_end_nodes */ - 0, /* psgen_begin_edges */ - 0, /* psgen_end_edges */ - psgen_begin_node, - psgen_end_node, - psgen_begin_edge, - psgen_end_edge, - psgen_begin_anchor, - 0, /* psgen_end_anchor */ - 0, /* psgen_begin_label */ - 0, /* psgen_end_label */ - psgen_textspan, - 0, /* psgen_resolve_color */ - psgen_ellipse, - psgen_polygon, - psgen_bezier, - psgen_polyline, - psgen_comment, - psgen_library_shape, -}; - -static gvrender_features_t render_features_ps = { - GVRENDER_DOES_TRANSFORM - | GVRENDER_DOES_MAPS - | GVRENDER_NO_WHITE_BG - | GVRENDER_DOES_MAP_RECTANGLE, - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - HSVA_DOUBLE, /* color_type */ -}; - -static gvdevice_features_t device_features_ps = { - GVDEVICE_DOES_PAGES - | GVDEVICE_DOES_LAYERS, /* flags */ - {36.,36.}, /* default margin - points */ - {612.,792.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -static gvdevice_features_t device_features_eps = { - 0, /* flags */ - {36.,36.}, /* default margin - points */ - {612.,792.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_ps_types[] = { - {FORMAT_PS, "ps", 1, &psgen_engine, &render_features_ps}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_ps_types[] = { - {FORMAT_PS, "ps:ps", 1, NULL, &device_features_ps}, - {FORMAT_PS2, "ps2:ps", 1, NULL, &device_features_ps}, - {FORMAT_EPS, "eps:ps", 1, NULL, &device_features_eps}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_svg.c b/internal/plugin/core/gvrender_core_svg.c deleted file mode 100644 index 25ff234..0000000 --- a/internal/plugin/core/gvrender_core_svg.c +++ /dev/null @@ -1,798 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* Comments on the SVG coordinate system (SN 8 Dec 2006): - The initial element defines the SVG coordinate system so - that the graphviz canvas (in units of points) fits the intended - absolute size in inches. After this, the situation should be - that "px" = "pt" in SVG, so we can dispense with stating units. - Also, the input units (such as fontsize) should be preserved - without scaling in the output SVG (as long as the graph size - was not constrained.) - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "gvcint.h" - -typedef enum { FORMAT_SVG, FORMAT_SVGZ, } svg_format_type; - -/* SVG dash array */ -static char *sdasharray = "5,2"; -/* SVG dot array */ -static char *sdotarray = "1,5"; - -#ifndef HAVE_STRCASECMP -extern int strcasecmp(const char *s1, const char *s2); -#endif - -static void svg_bzptarray(GVJ_t * job, pointf * A, int n) -{ - int i; - char c; - - c = 'M'; /* first point */ -#if EDGEALIGN - if (A[0].x <= A[n-1].x) { -#endif - for (i = 0; i < n; i++) { - gvprintf(job, "%c", c); - gvprintdouble(job, A[i].x); - gvputs(job, ","); - gvprintdouble(job, -A[i].y); - if (i == 0) - c = 'C'; /* second point */ - else - c = ' '; /* remaining points */ - } -#if EDGEALIGN - } else { - for (i = n-1; i >= 0; i--) { - gvprintf(job, "%c", c); - gvprintdouble(job, A[i].x); - gvputs(job, ","); - gvprintdouble(job, -A[i].y); - if (i == 0) - c = 'C'; /* second point */ - else - c = ' '; /* remaining points */ - } - } -#endif -} - -static void svg_print_id_class(GVJ_t * job, char* id, char* idx, char* kind, void* obj) -{ - char* str; - - gvputs(job, "obj; - - gvputs(job, " fill=\""); - if (filled == GRADIENT) { - gvprintf(job, "url(#l_%d)", gid); - } else if (filled == RGRADIENT) { - gvprintf(job, "url(#r_%d)", gid); - } else if (filled) { - svg_print_color(job, obj->fillcolor); - if (obj->fillcolor.type == RGBA_BYTE - && obj->fillcolor.u.rgba[3] > 0 - && obj->fillcolor.u.rgba[3] < 255) - gvprintf(job, "\" fill-opacity=\"%f", - ((float) obj->fillcolor.u.rgba[3] / 255.0)); - } else { - gvputs(job, "none"); - } - gvputs(job, "\" stroke=\""); - svg_print_color(job, obj->pencolor); - if (obj->penwidth != PENWIDTH_NORMAL) { - gvputs(job, "\" stroke-width=\""); - gvprintdouble(job, obj->penwidth); - } - if (obj->pen == PEN_DASHED) { - gvprintf(job, "\" stroke-dasharray=\"%s", sdasharray); - } else if (obj->pen == PEN_DOTTED) { - gvprintf(job, "\" stroke-dasharray=\"%s", sdotarray); - } - if (obj->pencolor.type == RGBA_BYTE && obj->pencolor.u.rgba[3] > 0 - && obj->pencolor.u.rgba[3] < 255) - gvprintf(job, "\" stroke-opacity=\"%f", - ((float) obj->pencolor.u.rgba[3] / 255.0)); - - gvputs(job, "\""); -} - -static void svg_comment(GVJ_t * job, char *str) -{ - gvputs(job, "\n"); -} - -static void svg_begin_job(GVJ_t * job) -{ - char *s; - gvputs(job, - "\n"); - if ((s = agget(job->gvc->g, "stylesheet")) && s[0]) { - gvputs(job, "\n"); - } -#if 0 - gvputs(job, "\n]"); -#else - gvputs(job, "\n"); -#endif - - gvputs(job, "\n"); -} - -static void svg_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvputs(job, "\n", - job->pagesArraySize.x * job->pagesArraySize.y); - - gvprintf(job, "width, job->height); - gvprintf(job, " viewBox=\"%.2f %.2f %.2f %.2f\"", - job->canvasBox.LL.x, - job->canvasBox.LL.y, - job->canvasBox.UR.x, - job->canvasBox.UR.y); - /* namespace of svg */ - gvputs(job, " xmlns=\"http://www.w3.org/2000/svg\""); - /* namespace of xlink */ - gvputs(job, " xmlns:xlink=\"http://www.w3.org/1999/xlink\""); - gvputs(job, ">\n"); -} - -static void svg_end_graph(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void svg_begin_layer(GVJ_t * job, char *layername, int layerNum, - int numLayers) -{ - obj_state_t *obj = job->obj; - - svg_print_id_class(job, layername, NULL, "layer", obj->u.g); - gvputs(job, ">\n"); -} - -static void svg_end_layer(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -/* svg_begin_page: - * Currently, svg output does not support pages. - * FIX: If implemented, we must guarantee the id is unique. - */ -static void svg_begin_page(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - /* its really just a page of the graph, but its still a graph, - * and it is the entire graph if we're not currently paging */ - svg_print_id_class(job, obj->id, NULL, "graph", obj->u.g); - gvputs(job, " transform=\"scale("); - gvprintdouble(job, job->scale.x); - gvputs(job, " "); - gvprintdouble(job, job->scale.y); - gvprintf(job, ") rotate(%d) translate(", -job->rotation); - gvprintdouble(job, job->translation.x); - gvputs(job, " "); - gvprintdouble(job, -job->translation.y); - gvputs(job, ")\">\n"); - /* default style */ - if (agnameof(obj->u.g)[0]) { - gvputs(job, ""); - gvputs(job, xml_string(agnameof(obj->u.g))); - gvputs(job, "\n"); - } -} - -static void svg_end_page(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void svg_begin_cluster(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - svg_print_id_class(job, obj->id, NULL, "cluster", obj->u.sg); - gvputs(job, ">\n"); - gvputs(job, ""); - gvputs(job, xml_string(agnameof(obj->u.g))); - gvputs(job, "\n"); -} - -static void svg_end_cluster(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void svg_begin_node(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - char* idx; - - if (job->layerNum > 1) - idx = job->gvc->layerIDs[job->layerNum]; - else - idx = NULL; - svg_print_id_class(job, obj->id, idx, "node", obj->u.n); - gvputs(job, ">\n"); - gvputs(job, ""); - gvputs(job, xml_string(agnameof(obj->u.n))); - gvputs(job, "\n"); -} - -static void svg_end_node(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void svg_begin_edge(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - char *ename; - - svg_print_id_class(job, obj->id, NULL, "edge", obj->u.e); - gvputs(job, ">\n"); - - gvputs(job, ""); - ename = strdup_and_subst_obj("\\E", (void *) (obj->u.e)); - gvputs(job, xml_string(ename)); - free(ename); - gvputs(job, "\n"); -} - -static void svg_end_edge(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void -svg_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target, - char *id) -{ - gvputs(job, ""); - - gvputs(job, "\n"); -} - -static void svg_end_anchor(GVJ_t * job) -{ - gvputs(job, "\n"); - gvputs(job, "\n"); -} - -static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - PostscriptAlias *pA; - char *family = NULL, *weight = NULL, *stretch = NULL, *style = NULL; - unsigned int flags; - - gvputs(job, "just) { - case 'l': - gvputs(job, " text-anchor=\"start\""); - break; - case 'r': - gvputs(job, " text-anchor=\"end\""); - break; - default: - case 'n': - gvputs(job, " text-anchor=\"middle\""); - break; - } - p.y += span->yoffset_centerline; - if (!obj->labeledgealigned) { - gvputs(job, " x=\""); - gvprintdouble(job, p.x); - gvputs(job, "\" y=\""); - gvprintdouble(job, -p.y); - gvputs(job, "\""); - } - pA = span->font->postscript_alias; - if (pA) { - switch (GD_fontnames(job->gvc->g)) { - case PSFONTS: - family = pA->name; - weight = pA->weight; - style = pA->style; - break; - case SVGFONTS: - family = pA->svg_font_family; - weight = pA->svg_font_weight; - style = pA->svg_font_style; - break; - default: - case NATIVEFONTS: - family = pA->family; - weight = pA->weight; - style = pA->style; - break; - } - stretch = pA->stretch; - - gvprintf(job, " font-family=\"%s", family); - if (pA->svg_font_family) - gvprintf(job, ",%s", pA->svg_font_family); - gvputs(job, "\""); - if (weight) - gvprintf(job, " font-weight=\"%s\"", weight); - if (stretch) - gvprintf(job, " font-stretch=\"%s\"", stretch); - if (style) - gvprintf(job, " font-style=\"%s\"", style); - } else - gvprintf(job, " font-family=\"%s\"", span->font->name); - if ((span->font) && (flags = span->font->flags)) { - if ((flags & HTML_BF) && !weight) - gvprintf(job, " font-weight=\"bold\""); - if ((flags & HTML_IF) && !style) - gvprintf(job, " font-style=\"italic\""); - if ((flags & (HTML_UL|HTML_S|HTML_OL))) { - int comma = 0; - gvprintf(job, " text-decoration=\""); - if ((flags & HTML_UL)) { - gvprintf(job, "underline"); - comma = 1; - } - if ((flags & HTML_OL)) { - gvprintf(job, "%soverline", (comma?",":"")); - comma = 1; - } - if ((flags & HTML_S)) - gvprintf(job, "%sline-through", (comma?",":"")); - gvprintf(job, "\""); - } - if ((flags & HTML_SUP)) - gvprintf(job, " baseline-shift=\"super\""); - if ((flags & HTML_SUB)) - gvprintf(job, " baseline-shift=\"sub\""); - } - - gvprintf(job, " font-size=\"%.2f\"", span->font->size); - switch (obj->pencolor.type) { - case COLOR_STRING: - if (strcasecmp(obj->pencolor.u.string, "black")) - gvprintf(job, " fill=\"%s\"", obj->pencolor.u.string); - break; - case RGBA_BYTE: - gvprintf(job, " fill=\"#%02x%02x%02x\"", - obj->pencolor.u.rgba[0], obj->pencolor.u.rgba[1], - obj->pencolor.u.rgba[2]); - break; - default: - assert(0); /* internal error */ - } - gvputs(job, ">"); - if (obj->labeledgealigned) { - gvprintf(job, "", xml_string(obj->id)); - gvputs(job, ""); - } - gvputs(job, xml_string0(span->str, TRUE)); - if (obj->labeledgealigned) - gvprintf (job, ""); - gvputs(job, "\n"); -} - -/* svg_gradstyle - * Outputs the SVG statements that define the gradient pattern - */ -static int svg_gradstyle(GVJ_t * job, pointf * A, int n) -{ - pointf G[2]; - float angle; - static int gradId; - int id = gradId++; - - obj_state_t *obj = job->obj; - angle = obj->gradient_angle * M_PI / 180; //angle of gradient line - G[0].x = G[0].y = G[1].x = G[1].y = 0.; - get_gradient_points(A, G, n, angle, 0); //get points on gradient line - - gvprintf(job, - "\n\n"); - if (obj->gradient_frac > 0) - gvprintf(job, "gradient_frac - 0.001); - else - gvputs(job, "fillcolor); - gvputs(job, ";stop-opacity:"); - if (obj->fillcolor.type == RGBA_BYTE && obj->fillcolor.u.rgba[3] > 0 - && obj->fillcolor.u.rgba[3] < 255) - gvprintf(job, "%f", ((float) obj->fillcolor.u.rgba[3] / 255.0)); - else - gvputs(job, "1."); - gvputs(job, ";\"/>\n"); - if (obj->gradient_frac > 0) - gvprintf(job, "gradient_frac); - else - gvputs(job, "stopcolor); - gvputs(job, ";stop-opacity:"); - if (obj->stopcolor.type == RGBA_BYTE && obj->stopcolor.u.rgba[3] > 0 - && obj->stopcolor.u.rgba[3] < 255) - gvprintf(job, "%f", ((float) obj->stopcolor.u.rgba[3] / 255.0)); - else - gvputs(job, "1."); - gvputs(job, ";\"/>\n\n\n"); - return id; -} - -/* svg_rgradstyle - * Outputs the SVG statements that define the radial gradient pattern - */ -static int svg_rgradstyle(GVJ_t * job, pointf * A, int n) -{ - /* pointf G[2]; */ - float angle; - int ifx, ify; - static int rgradId; - int id = rgradId++; - - obj_state_t *obj = job->obj; - angle = obj->gradient_angle * M_PI / 180; //angle of gradient line - /* G[0].x = G[0].y = G[1].x = G[1].y; */ - /* get_gradient_points(A, G, n, 0, 1); */ - if (angle == 0.) { - ifx = ify = 50; - } else { - ifx = 50 * (1 + cos(angle)); - ify = 50 * (1 - sin(angle)); - } - gvprintf(job, - "\n\n", - id, ifx, ify); - gvputs(job, "fillcolor); - gvputs(job, ";stop-opacity:"); - if (obj->fillcolor.type == RGBA_BYTE && obj->fillcolor.u.rgba[3] > 0 - && obj->fillcolor.u.rgba[3] < 255) - gvprintf(job, "%f", ((float) obj->fillcolor.u.rgba[3] / 255.0)); - else - gvputs(job, "1."); - gvputs(job, ";\"/>\n"); - gvputs(job, "stopcolor); - gvputs(job, ";stop-opacity:"); - if (obj->stopcolor.type == RGBA_BYTE && obj->stopcolor.u.rgba[3] > 0 - && obj->stopcolor.u.rgba[3] < 255) - gvprintf(job, "%f", ((float) obj->stopcolor.u.rgba[3] / 255.0)); - else - gvputs(job, "1."); - gvputs(job, ";\"/>\n\n\n"); - return id; -} - - -static void svg_ellipse(GVJ_t * job, pointf * A, int filled) -{ - int gid = 0; - - /* A[] contains 2 points: the center and corner. */ - if (filled == GRADIENT) { - gid = svg_gradstyle(job, A, 2); - } else if (filled == (RGRADIENT)) { - gid = svg_rgradstyle(job, A, 2); - } - gvputs(job, "\n"); -} - -static void -svg_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - int gid = 0; - obj_state_t *obj = job->obj; - - if (filled == GRADIENT) { - gid = svg_gradstyle(job, A, n); - } else if (filled == (RGRADIENT)) { - gid = svg_rgradstyle(job, A, n); - } - gvputs(job, "labeledgealigned) { - gvputs(job, " id=\""); - gvputs(job, xml_string(obj->id)); - gvputs(job, "_p\" "); - } - svg_grstyle(job, filled, gid); - gvputs(job, " d=\""); - svg_bzptarray(job, A, n); - gvputs(job, "\"/>\n"); -} - -static void svg_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - int i, gid = 0; - if (filled == GRADIENT) { - gid = svg_gradstyle(job, A, n); - } else if (filled == (RGRADIENT)) { - gid = svg_rgradstyle(job, A, n); - } - gvputs(job, "\n"); -} - -static void svg_polyline(GVJ_t * job, pointf * A, int n) -{ - int i; - - gvputs(job, "\n"); -} - -/* color names from http://www.w3.org/TR/SVG/types.html */ -/* NB. List must be LANG_C sorted */ -static char *svg_knowncolors[] = { - "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", - "beige", "bisque", "black", "blanchedalmond", "blue", - "blueviolet", "brown", "burlywood", - "cadetblue", "chartreuse", "chocolate", "coral", - "cornflowerblue", "cornsilk", "crimson", "cyan", - "darkblue", "darkcyan", "darkgoldenrod", "darkgray", - "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", - "darkolivegreen", "darkorange", "darkorchid", "darkred", - "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", - "darkslategrey", "darkturquoise", "darkviolet", "deeppink", - "deepskyblue", "dimgray", "dimgrey", "dodgerblue", - "firebrick", "floralwhite", "forestgreen", "fuchsia", - "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", - "green", "greenyellow", "grey", - "honeydew", "hotpink", "indianred", - "indigo", "ivory", "khaki", - "lavender", "lavenderblush", "lawngreen", "lemonchiffon", - "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", - "lightgray", "lightgreen", "lightgrey", "lightpink", - "lightsalmon", "lightseagreen", "lightskyblue", - "lightslategray", "lightslategrey", "lightsteelblue", - "lightyellow", "lime", "limegreen", "linen", - "magenta", "maroon", "mediumaquamarine", "mediumblue", - "mediumorchid", "mediumpurple", "mediumseagreen", - "mediumslateblue", "mediumspringgreen", "mediumturquoise", - "mediumvioletred", "midnightblue", "mintcream", - "mistyrose", "moccasin", - "navajowhite", "navy", "oldlace", - "olive", "olivedrab", "orange", "orangered", "orchid", - "palegoldenrod", "palegreen", "paleturquoise", - "palevioletred", "papayawhip", "peachpuff", "peru", "pink", - "plum", "powderblue", "purple", - "red", "rosybrown", "royalblue", - "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", - "sienna", "silver", "skyblue", "slateblue", "slategray", - "slategrey", "snow", "springgreen", "steelblue", - "tan", "teal", "thistle", "tomato", "turquoise", - "violet", - "wheat", "white", "whitesmoke", - "yellow", "yellowgreen" -}; - -gvrender_engine_t svg_engine = { - svg_begin_job, - 0, /* svg_end_job */ - svg_begin_graph, - svg_end_graph, - svg_begin_layer, - svg_end_layer, - svg_begin_page, - svg_end_page, - svg_begin_cluster, - svg_end_cluster, - 0, /* svg_begin_nodes */ - 0, /* svg_end_nodes */ - 0, /* svg_begin_edges */ - 0, /* svg_end_edges */ - svg_begin_node, - svg_end_node, - svg_begin_edge, - svg_end_edge, - svg_begin_anchor, - svg_end_anchor, - 0, /* svg_begin_anchor */ - 0, /* svg_end_anchor */ - svg_textspan, - 0, /* svg_resolve_color */ - svg_ellipse, - svg_polygon, - svg_bezier, - svg_polyline, - svg_comment, - 0, /* svg_library_shape */ -}; - -gvrender_features_t render_features_svg = { - GVRENDER_Y_GOES_DOWN | GVRENDER_DOES_TRANSFORM | GVRENDER_DOES_LABELS | GVRENDER_DOES_MAPS | GVRENDER_DOES_TARGETS | GVRENDER_DOES_TOOLTIPS, /* flags */ - 4., /* default pad - graph units */ - svg_knowncolors, /* knowncolors */ - sizeof(svg_knowncolors) / sizeof(char *), /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -gvdevice_features_t device_features_svg = { - GVDEVICE_DOES_TRUECOLOR|GVDEVICE_DOES_LAYERS, /* flags */ - {0., 0.}, /* default margin - points */ - {0., 0.}, /* default page width, height - points */ - {72., 72.}, /* default dpi */ -}; - -gvdevice_features_t device_features_svgz = { - GVDEVICE_DOES_TRUECOLOR|GVDEVICE_DOES_LAYERS|GVDEVICE_BINARY_FORMAT|GVDEVICE_COMPRESSED_FORMAT, /* flags */ - {0., 0.}, /* default margin - points */ - {0., 0.}, /* default page width, height - points */ - {72., 72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_svg_types[] = { - {FORMAT_SVG, "svg", 1, &svg_engine, &render_features_svg}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_svg_types[] = { - {FORMAT_SVG, "svg:svg", 1, NULL, &device_features_svg}, -#if HAVE_LIBZ - {FORMAT_SVGZ, "svgz:svg", 1, NULL, &device_features_svgz}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_tk.c b/internal/plugin/core/gvrender_core_tk.c deleted file mode 100644 index 90b5dc6..0000000 --- a/internal/plugin/core/gvrender_core_tk.c +++ /dev/null @@ -1,388 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "gvcint.h" - -typedef enum { FORMAT_TK, } tk_format_type; - -static char *tkgen_string(char *s) -{ - return s; -} - -static void tkgen_print_color(GVJ_t * job, gvcolor_t color) -{ - switch (color.type) { - case COLOR_STRING: - gvputs(job, color.u.string); - break; - case RGBA_BYTE: - if (color.u.rgba[3] == 0) /* transparent */ - gvputs(job, "\"\""); - else - gvprintf(job, "#%02x%02x%02x", - color.u.rgba[0], color.u.rgba[1], color.u.rgba[2]); - break; - default: - assert(0); /* internal error */ - } -} - -static void tkgen_print_tags(GVJ_t *job) -{ - char *ObjType; - unsigned int ObjId; - obj_state_t *obj = job->obj; - int ObjFlag; - - switch (obj->emit_state) { - case EMIT_NDRAW: - ObjType = "node"; - ObjFlag = 1; - ObjId = AGID(obj->u.n); - break; - case EMIT_NLABEL: - ObjType = "node"; - ObjFlag = 0; - ObjId = AGID(obj->u.n); - break; - case EMIT_EDRAW: - case EMIT_TDRAW: - case EMIT_HDRAW: - ObjType = "edge"; - ObjFlag = 1; - ObjId = AGID(obj->u.e); - break; - case EMIT_ELABEL: - case EMIT_TLABEL: - case EMIT_HLABEL: - ObjType = "edge"; - ObjFlag = 0; - ObjId = AGID(obj->u.e); - break; - case EMIT_GDRAW: - ObjType = "graph"; - ObjFlag = 1; - ObjId = AGID(obj->u.g); - break; - case EMIT_GLABEL: - ObjFlag = 0; - ObjType = "graph label"; - ObjId = AGID(obj->u.g); - break; - case EMIT_CDRAW: - ObjType = "graph"; - ObjFlag = 1; - ObjId = AGID(obj->u.sg); - break; - case EMIT_CLABEL: - ObjType = "graph"; - ObjFlag = 0; - ObjId = AGID(obj->u.sg); - break; - default: - assert (0); - break; - } - gvprintf(job, " -tags {%d%s%p}", ObjFlag, ObjType, ObjId); -} - -static void tkgen_canvas(GVJ_t * job) -{ - if (job->external_context) - gvputs(job, job->imagedata); - else - gvputs(job, "$c"); -} - -static void tkgen_comment(GVJ_t * job, char *str) -{ - gvputs(job, "# "); - gvputs(job, tkgen_string(str)); - gvputs(job, "\n"); -} - -static void tkgen_begin_job(GVJ_t * job) -{ - gvputs(job, "# Generated by "); - gvputs(job, tkgen_string(job->common->info[0])); - gvputs(job, " version "); - gvputs(job, tkgen_string(job->common->info[1])); - gvputs(job, " ("); - gvputs(job, tkgen_string(job->common->info[2])); - gvputs(job, ")\n"); -} - -static int first_periphery; - -static void tkgen_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvputs(job, "#"); - if (agnameof(obj->u.g)[0]) { - gvputs(job, " Title: "); - gvputs(job, tkgen_string(agnameof(obj->u.g))); - } - gvprintf(job, " Pages: %d\n", job->pagesArraySize.x * job->pagesArraySize.y); - - first_periphery = 0; -} - -static void tkgen_begin_node(GVJ_t * job) -{ - first_periphery = 1; /* FIXME - this is an ugly hack! */ -} - -static void tkgen_begin_edge(GVJ_t * job) -{ - first_periphery = -1; /* FIXME - this is an ugly ugly hack! Need this one for arrowheads. */ -} - -static void tkgen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - const char *font; - PostscriptAlias *pA; - int size; - - if (obj->pen != PEN_NONE) { - /* determine font size */ - /* round fontsize down, better too small than too big */ - size = (int)(span->font->size * job->zoom); - /* don't even bother if fontsize < 1 point */ - if (size) { - tkgen_canvas(job); - gvputs(job, " create text "); - p.y -= size * 0.55; /* cl correction */ - gvprintpointf(job, p); - gvputs(job, " -text {"); - gvputs(job, span->str); - gvputs(job, "}"); - gvputs(job, " -fill "); - tkgen_print_color(job, obj->pencolor); - gvputs(job, " -font {"); - /* tk doesn't like PostScript font names like "Times-Roman" */ - /* so use family names */ - pA = span->font->postscript_alias; - if (pA) - font = pA->family; - else - font = span->font->name; - gvputs(job, "\""); - gvputs(job, font); - gvputs(job, "\""); - /* use -ve fontsize to indicate pixels - see "man n font" */ - gvprintf(job, " %d}", size); - switch (span->just) { - case 'l': - gvputs(job, " -anchor w"); - break; - case 'r': - gvputs(job, " -anchor e"); - break; - default: - case 'n': - break; - } - tkgen_print_tags(job); - gvputs(job, "\n"); - } - } -} - -static void tkgen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - pointf r; - - if (obj->pen != PEN_NONE) { - /* A[] contains 2 points: the center and top right corner. */ - r.x = A[1].x - A[0].x; - r.y = A[1].y - A[0].y; - A[0].x -= r.x; - A[0].y -= r.y; - tkgen_canvas(job); - gvputs(job, " create oval "); - gvprintpointflist(job, A, 2); - gvputs(job, " -fill "); - if (filled) - tkgen_print_color(job, obj->fillcolor); - else if (first_periphery) - /* tk ovals default to no fill, some fill - * is necessary else "canvas find overlapping" doesn't - * work as expected, use white instead */ - gvputs(job, "white"); - else - gvputs(job, "\"\""); - if (first_periphery == 1) - first_periphery = 0; - gvputs(job, " -width "); - gvprintdouble(job, obj->penwidth); - gvputs(job, " -outline "); - tkgen_print_color(job, obj->pencolor); - if (obj->pen == PEN_DASHED) - gvputs(job, " -dash 5"); - if (obj->pen == PEN_DOTTED) - gvputs(job, " -dash 2"); - tkgen_print_tags(job); - gvputs(job, "\n"); - } -} - -static void -tkgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - - if (obj->pen != PEN_NONE) { - tkgen_canvas(job); - gvputs(job, " create line "); - gvprintpointflist(job, A, n); - gvputs(job, " -fill "); - tkgen_print_color(job, obj->pencolor); - gvputs(job, " -width "); - gvprintdouble(job, obj->penwidth); - if (obj->pen == PEN_DASHED) - gvputs(job, " -dash 5"); - if (obj->pen == PEN_DOTTED) - gvputs(job, " -dash 2"); - gvputs(job, " -smooth bezier "); - tkgen_print_tags(job); - gvputs(job, "\n"); - } -} - -static void tkgen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - - if (obj->pen != PEN_NONE) { - tkgen_canvas(job); - gvputs(job, " create polygon "); - gvprintpointflist(job, A, n); - gvputs(job, " -fill "); - if (filled) - tkgen_print_color(job, obj->fillcolor); - else if (first_periphery) - /* tk polygons default to black fill, some fill - * is necessary else "canvas find overlapping" doesn't - * work as expected, use white instead */ - gvputs(job, "white"); - else - gvputs(job, "\"\""); - if (first_periphery == 1) - first_periphery = 0; - gvputs(job, " -width "); - gvprintdouble(job, obj->penwidth); - gvputs(job, " -outline "); - tkgen_print_color(job, obj->pencolor); - if (obj->pen == PEN_DASHED) - gvputs(job, " -dash 5"); - if (obj->pen == PEN_DOTTED) - gvputs(job, " -dash 2"); - tkgen_print_tags(job); - gvputs(job, "\n"); - } -} - -static void tkgen_polyline(GVJ_t * job, pointf * A, int n) -{ - obj_state_t *obj = job->obj; - - if (obj->pen != PEN_NONE) { - tkgen_canvas(job); - gvputs(job, " create line "); - gvprintpointflist(job, A, n); - gvputs(job, " -fill "); - tkgen_print_color(job, obj->pencolor); - if (obj->pen == PEN_DASHED) - gvputs(job, " -dash 5"); - if (obj->pen == PEN_DOTTED) - gvputs(job, " -dash 2"); - tkgen_print_tags(job); - gvputs(job, "\n"); - } -} - -gvrender_engine_t tkgen_engine = { - tkgen_begin_job, - 0, /* tkgen_end_job */ - tkgen_begin_graph, - 0, /* tkgen_end_graph */ - 0, /* tkgen_begin_layer */ - 0, /* tkgen_end_layer */ - 0, /* tkgen_begin_page */ - 0, /* tkgen_end_page */ - 0, /* tkgen_begin_cluster */ - 0, /* tkgen_end_cluster */ - 0, /* tkgen_begin_nodes */ - 0, /* tkgen_end_nodes */ - 0, /* tkgen_begin_edges */ - 0, /* tkgen_end_edges */ - tkgen_begin_node, - 0, /* tkgen_end_node */ - tkgen_begin_edge, - 0, /* tkgen_end_edge */ - 0, /* tkgen_begin_anchor */ - 0, /* tkgen_end_anchor */ - 0, /* tkgen_begin_label */ - 0, /* tkgen_end_label */ - tkgen_textspan, - 0, /* tkgen_resolve_color */ - tkgen_ellipse, - tkgen_polygon, - tkgen_bezier, - tkgen_polyline, - tkgen_comment, - 0, /* tkgen_library_shape */ -}; - -gvrender_features_t render_features_tk = { - GVRENDER_Y_GOES_DOWN - | GVRENDER_NO_WHITE_BG, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - COLOR_STRING, /* color_type */ -}; - -gvdevice_features_t device_features_tk = { - 0, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_tk_types[] = { - {FORMAT_TK, "tk", 1, &tkgen_engine, &render_features_tk}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_tk_types[] = { - {FORMAT_TK, "tk:tk", 1, NULL, &device_features_tk}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/core/gvrender_core_vml.c b/internal/plugin/core/gvrender_core_vml.c deleted file mode 100644 index 2ad582f..0000000 --- a/internal/plugin/core/gvrender_core_vml.c +++ /dev/null @@ -1,614 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include - -#include "macros.h" -#include "const.h" - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "memory.h" - -typedef enum { FORMAT_VML, FORMAT_VMLZ, } vml_format_type; - -unsigned int graphHeight,graphWidth; - -#ifndef HAVE_STRCASECMP -extern int strcasecmp(const char *s1, const char *s2); -#endif - -/* this is a direct copy fromlib/common/labels.c */ -static int xml_isentity(char *s) -{ - s++; /* already known to be '&' */ - if (*s == '#') { - s++; - if (*s == 'x' || *s == 'X') { - s++; - while ((*s >= '0' && *s <= '9') - || (*s >= 'a' && *s <= 'f') - || (*s >= 'A' && *s <= 'F')) - s++; - } else { - while (*s >= '0' && *s <= '9') - s++; - } - } else { - while ((*s >= 'a' && *s <= 'z') - || (*s >= 'A' && *s <= 'Z')) - s++; - } - if (*s == ';') - return 1; - return 0; -} - -static void vml_bzptarray(GVJ_t * job, pointf * A, int n) -{ - int i; - char *c; - - c = "m "; /* first point */ - for (i = 0; i < n; i++) { - /* integers only in path! */ - gvprintf(job, "%s%.0f,%.0f ", c, A[i].x, graphHeight-A[i].y); - if (i == 0) - c = "c "; /* second point */ - else - c = ""; /* remaining points */ - } - gvputs(job, "\""); -} - -static void vml_print_color(GVJ_t * job, gvcolor_t color) -{ - switch (color.type) { - case COLOR_STRING: - gvputs(job, color.u.string); - break; - case RGBA_BYTE: - if (color.u.rgba[3] == 0) /* transparent */ - gvputs(job, "none"); - else - gvprintf(job, "#%02x%02x%02x", - color.u.rgba[0], color.u.rgba[1], color.u.rgba[2]); - break; - default: - assert(0); /* internal error */ - } -} - -static void vml_grstroke(GVJ_t * job, int filled) -{ - obj_state_t *obj = job->obj; - - gvputs(job, "pencolor); - if (obj->penwidth != PENWIDTH_NORMAL) - gvprintf(job, "\" weight=\"%.0fpt", obj->penwidth); - if (obj->pen == PEN_DASHED) { - gvputs(job, "\" dashstyle=\"dash"); - } else if (obj->pen == PEN_DOTTED) { - gvputs(job, "\" dashstyle=\"dot"); - } - gvputs(job, "\" />"); -} - - -static void vml_grfill(GVJ_t * job, int filled) -{ - obj_state_t *obj = job->obj; - - if (filled){ - gvputs(job, " filled=\"true\" fillcolor=\""); - vml_print_color(job, obj->fillcolor); - gvputs(job, "\" "); - }else{ - gvputs(job, " filled=\"false\" "); - } -} - -/* html_string is a modified version of xml_string */ -char *html_string(char *s) -{ - static char *buf = NULL; - static int bufsize = 0; - char *p, *sub, *prev = NULL; - int len, pos = 0; - int temp,cnt,remaining=0; - char workstr[16]; - uint64_t charnum=0; - unsigned char byte; - unsigned char mask; - - - if (!buf) { - bufsize = 64; - buf = gmalloc(bufsize); - } - p = buf; - while (s && *s) { - if (pos > (bufsize - 8)) { - bufsize *= 2; - buf = grealloc(buf, bufsize); - p = buf + pos; - } - /* escape '&' only if not part of a legal entity sequence */ - if (*s == '&' && !(xml_isentity(s))) { - sub = "&"; - len = 5; - } - /* '<' '>' are safe to substitute even if string is already UTF-8 coded - * since UTF-8 strings won't contain '<' or '>' */ - else if (*s == '<') { - sub = "<"; - len = 4; - } - else if (*s == '>') { - sub = ">"; - len = 4; - } - else if (*s == '-') { /* can't be used in xml comment strings */ - sub = "-"; - len = 5; - } - else if (*s == ' ' && prev && *prev == ' ') { - /* substitute 2nd and subsequent spaces with required_spaces */ - sub = " "; /* inkscape doesn't recognise   */ - len = 6; - } - else if (*s == '"') { - sub = """; - len = 6; - } - else if (*s == '\'') { - sub = "'"; - len = 5; - } - else if ((unsigned char)*s > 127) { - byte=(unsigned char)*s; - cnt=0; - for (mask=127; mask < byte; mask=mask >>1){ - cnt++; - byte=byte & mask; - } - if (cnt>1){ - charnum=byte; - remaining=cnt-1; - }else{ - charnum=charnum<<6; - charnum+=byte; - remaining--; - } - if (remaining>0){ - s++; - continue; - } - /* we will build the html value right-to-left - * (least significant-to-most) */ - workstr[15]=';'; - sub=&workstr[14]; - len=3; /* &# + ; */ - do { - temp=charnum%10; - *(sub--)=(char)((int)'0'+ temp); - charnum/=10; - len++; - if (len>12){ /* 12 is arbitrary, but clearly in error */ - fprintf(stderr, "Error during conversion to \"UTF-8\". Quiting.\n"); - exit(1); - } - } while (charnum>0); - *(sub--)='#'; - *(sub)='&'; - } - else { - sub = s; - len = 1; - } - while (len--) { - *p++ = *sub++; - pos++; - } - prev = s; - s++; - } - *p = '\0'; - return buf; -} -static void vml_comment(GVJ_t * job, char *str) -{ - gvputs(job, " \n"); -} -static void vml_begin_job(GVJ_t * job) -{ - gvputs(job, "\n"); - gvputs(job, "\n\n"); -} - -static void vml_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - char *name; - - graphHeight =(int)(job->bb.UR.y - job->bb.LL.y); - graphWidth =(int)(job->bb.UR.x - job->bb.LL.x); - - gvputs(job, ""); - gvputs(job, "\n"); - - - name = agnameof(obj->u.g); - if (name[0]) { - gvputs(job, ""); - gvputs(job, html_string(name)); - gvputs(job, ""); - } - gvprintf(job, "\n", job->pagesArraySize.x * job->pagesArraySize.y); - -/* the next chunk and all the "DIV" stuff is not required, - * but it helps with non-IE browsers */ - gvputs(job, " \n"); - - gvputs(job, ""); - gvputs(job, "\n"); - /* add 10pt pad to the bottom of the graph */ - gvputs(job, "

\n", graphWidth, 10+graphHeight); - gvputs(job, "\n"); - gvputs(job, "\n"); - - gvputs(job, " ", graphWidth, graphHeight); -} - -static void vml_end_graph(GVJ_t * job) -{ - gvputs(job, "\n"); - gvputs(job, "
\n"); - /* add 10pt pad to the bottom of the graph */ - gvputs(job, "
\n"); - gvputs(job, "\n"); - gvputs(job, "
\n"); - gvputs(job, "
\n"); - gvputs(job, "\n"); - gvputs(job, "

Sorry, this diagram will only display correctly on Internet Explorer 5 (and up) browsers.

\n"); - gvputs(job, "
\n"); - gvputs(job, "
\n"); - gvputs(job, "\n"); - gvputs(job, "
\n"); - - gvputs(job, "\n\n"); -} - -static void -vml_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target, char *id) -{ - gvputs(job, "\n"); -} - -static void vml_end_anchor(GVJ_t * job) -{ - gvputs(job, "\n"); -} - -static void vml_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - pointf p1,p2; - obj_state_t *obj = job->obj; - PostscriptAlias *pA; - - switch (span->just) { - case 'l': - p1.x=p.x; - break; - case 'r': - p1.x=p.x-span->size.x; - break; - default: - case 'n': - p1.x=p.x-(span->size.x/2); - break; - } - p2.x=p1.x+span->size.x; - if (span->size.y < span->font->size){ - span->size.y = 1 + (1.1*span->font->size); - } - - p1.x-=8; /* vml textbox margin fudge factor */ - p2.x+=8; /* vml textbox margin fudge factor */ - p2.y=graphHeight-(p.y); - p1.y=(p2.y-span->size.y); - /* text "y" was too high - * Graphviz uses "baseline", VML seems to use bottom of descenders - so we fudge a little - * (heuristics - based on eyeballs) */ - if (span->font->size <12.){ /* see graphs/directed/arrows.gv */ - p1.y+=1.4+span->font->size/5; /* adjust by approx. descender */ - p2.y+=1.4+span->font->size/5; /* adjust by approx. descender */ - }else{ - p1.y+=2+span->font->size/5; /* adjust by approx. descender */ - p2.y+=2+span->font->size/5; /* adjust by approx. descender */ - } - - gvprintf(job, "\n"); - gvputs(job, "font->postscript_alias; - if (pA) { - gvprintf(job, "font-family: '%s';", pA->family); - if (pA->weight) - gvprintf(job, "font-weight: %s;", pA->weight); - if (pA->stretch) - gvprintf(job, "font-stretch: %s;", pA->stretch); - if (pA->style) - gvprintf(job, "font-style: %s;", pA->style); - } - else { - gvprintf(job, "font-family: \'%s\';", span->font->name); - } - gvprintf(job, " font-size: %.2fpt;", span->font->size); - switch (obj->pencolor.type) { - case COLOR_STRING: - if (strcasecmp(obj->pencolor.u.string, "black")) - gvprintf(job, "color:%s;", obj->pencolor.u.string); - break; - case RGBA_BYTE: - gvprintf(job, "color:#%02x%02x%02x;", - obj->pencolor.u.rgba[0], obj->pencolor.u.rgba[1], obj->pencolor.u.rgba[2]); - break; - default: - assert(0); /* internal error */ - } - gvputs(job, "\">
"); - gvputs(job, html_string(span->str)); - gvputs(job, "
\n"); - gvputs(job, "
\n"); -} - -static void vml_ellipse(GVJ_t * job, pointf * A, int filled) -{ - double dx, dy, left, right, top, bottom; - - /* A[] contains 2 points: the center and corner. */ - gvputs(job, " "); - vml_grstroke(job, filled); - gvputs(job, "\n"); -} - -static void -vml_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - gvputs(job, " "); - vml_grstroke(job, filled); - gvputs(job, "\n"); -} - -static void vml_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - int i; - double px,py; - - gvputs(job, " "); - vml_grstroke(job, filled); - - gvputs(job, ""); - } - gvputs(job, "\n"); -} - -static void vml_polyline(GVJ_t * job, pointf * A, int n) -{ - int i; - - gvputs(job, " ", graphWidth, graphHeight); - gvputs(job, ""); - vml_grstroke(job, 0); /* no fill here for polyline */ - gvputs(job, "\n"); -} - -/* color names from - http://msdn.microsoft.com/en-us/library/bb250525(VS.85).aspx#t.color -*/ -/* NB. List must be LANG_C sorted */ -static char *vml_knowncolors[] = { - "aqua", "black", "blue", "fuchsia", - "gray", "green", "lime", "maroon", - "navy", "olive", "purple", "red", - "silver", "teal", "white", "yellow" -}; - -gvrender_engine_t vml_engine = { - vml_begin_job, - 0, /* vml_end_job */ - vml_begin_graph, - vml_end_graph, - 0, /* vml_begin_layer */ - 0, /* vml_end_layer */ - 0, /* vml_begin_page */ - 0, /* vml_end_page */ - 0, /* vml_begin_cluster */ - 0, /* vml_end_cluster */ - 0, /* vml_begin_nodes */ - 0, /* vml_end_nodes */ - 0, /* vml_begin_edges */ - 0, /* vml_end_edges */ - 0, /* vml_begin_node */ - 0, /* vml_end_node */ - 0, /* vml_begin_edge */ - 0, /* vml_end_edge */ - vml_begin_anchor, - vml_end_anchor, - 0, /* vml_begin_label */ - 0, /* vml_end_label */ - vml_textspan, - 0, /* vml_resolve_color */ - vml_ellipse, - vml_polygon, - vml_bezier, - vml_polyline, - vml_comment, - 0, /* vml_library_shape */ -}; - -gvrender_features_t render_features_vml = { - GVRENDER_Y_GOES_DOWN - | GVRENDER_DOES_TRANSFORM - | GVRENDER_DOES_LABELS - | GVRENDER_DOES_MAPS - | GVRENDER_DOES_TARGETS - | GVRENDER_DOES_TOOLTIPS, /* flags */ - 0., /* default pad - graph units */ - vml_knowncolors, /* knowncolors */ - sizeof(vml_knowncolors) / sizeof(char *), /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -gvdevice_features_t device_features_vml = { - GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -gvdevice_features_t device_features_vmlz = { - GVDEVICE_DOES_TRUECOLOR - | GVDEVICE_COMPRESSED_FORMAT, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_vml_types[] = { - {FORMAT_VML, "vml", 1, &vml_engine, &render_features_vml}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_vml_types[] = { - {FORMAT_VML, "vml:vml", 1, NULL, &device_features_vml}, -#if HAVE_LIBZ - {FORMAT_VMLZ, "vmlz:vml", 1, NULL, &device_features_vmlz}, -#endif - {0, NULL, 0, NULL, NULL} -}; - diff --git a/internal/plugin/core/ps.h b/internal/plugin/core/ps.h deleted file mode 100644 index dda1fe9..0000000 --- a/internal/plugin/core/ps.h +++ /dev/null @@ -1,173 +0,0 @@ -static const char *ps_txt[] = { -"%%BeginProlog", -"/DotDict 200 dict def", -"DotDict begin", -"", -"/setupLatin1 {", -"mark", -"/EncodingVector 256 array def", -" EncodingVector 0", -"", -"ISOLatin1Encoding 0 255 getinterval putinterval", -"EncodingVector 45 /hyphen put", -"", -"% Set up ISO Latin 1 character encoding", -"/starnetISO {", -" dup dup findfont dup length dict begin", -" { 1 index /FID ne { def }{ pop pop } ifelse", -" } forall", -" /Encoding EncodingVector def", -" currentdict end definefont", -"} def", -"/Times-Roman starnetISO def", -"/Times-Italic starnetISO def", -"/Times-Bold starnetISO def", -"/Times-BoldItalic starnetISO def", -"/Helvetica starnetISO def", -"/Helvetica-Oblique starnetISO def", -"/Helvetica-Bold starnetISO def", -"/Helvetica-BoldOblique starnetISO def", -"/Courier starnetISO def", -"/Courier-Oblique starnetISO def", -"/Courier-Bold starnetISO def", -"/Courier-BoldOblique starnetISO def", -"cleartomark", -"} bind def", -"", -"%%BeginResource: procset graphviz 0 0", -"/coord-font-family /Times-Roman def", -"/default-font-family /Times-Roman def", -"/coordfont coord-font-family findfont 8 scalefont def", -"", -"/InvScaleFactor 1.0 def", -"/set_scale {", -" dup 1 exch div /InvScaleFactor exch def", -" scale", -"} bind def", -"", -"% styles", -"/solid { [] 0 setdash } bind def", -"/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def", -"/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def", -"/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def", -"/bold { 2 setlinewidth } bind def", -"/filled { } bind def", -"/unfilled { } bind def", -"/rounded { } bind def", -"/diagonals { } bind def", -"/tapered { } bind def", -"", -"% hooks for setting color ", -"/nodecolor { sethsbcolor } bind def", -"/edgecolor { sethsbcolor } bind def", -"/graphcolor { sethsbcolor } bind def", -"/nopcolor {pop pop pop} bind def", -"", -"/beginpage { % i j npages", -" /npages exch def", -" /j exch def", -" /i exch def", -" /str 10 string def", -" npages 1 gt {", -" gsave", -" coordfont setfont", -" 0 0 moveto", -" (\\() show i str cvs show (,) show j str cvs show (\\)) show", -" grestore", -" } if", -"} bind def", -"", -"/set_font {", -" findfont exch", -" scalefont setfont", -"} def", -"", -"% draw text fitted to its expected width", -"/alignedtext { % width text", -" /text exch def", -" /width exch def", -" gsave", -" width 0 gt {", -" [] 0 setdash", -" text stringwidth pop width exch sub text length div 0 text ashow", -" } if", -" grestore", -"} def", -"", -"/boxprim { % xcorner ycorner xsize ysize", -" 4 2 roll", -" moveto", -" 2 copy", -" exch 0 rlineto", -" 0 exch rlineto", -" pop neg 0 rlineto", -" closepath", -"} bind def", -"", -"/ellipse_path {", -" /ry exch def", -" /rx exch def", -" /y exch def", -" /x exch def", -" matrix currentmatrix", -" newpath", -" x y translate", -" rx ry scale", -" 0 0 1 0 360 arc", -" setmatrix", -"} bind def", -"", -"/endpage { showpage } bind def", -"/showpage { } def", -"", -"/layercolorseq", -" [ % layer color sequence - darkest to lightest", -" [0 0 0]", -" [.2 .8 .8]", -" [.4 .8 .8]", -" [.6 .8 .8]", -" [.8 .8 .8]", -" ]", -"def", -"", -"/layerlen layercolorseq length def", -"", -"/setlayer {/maxlayer exch def /curlayer exch def", -" layercolorseq curlayer 1 sub layerlen mod get", -" aload pop sethsbcolor", -" /nodecolor {nopcolor} def", -" /edgecolor {nopcolor} def", -" /graphcolor {nopcolor} def", -"} bind def", -"", -"/onlayer { curlayer ne {invis} if } def", -"", -"/onlayers {", -" /myupper exch def", -" /mylower exch def", -" curlayer mylower lt", -" curlayer myupper gt", -" or", -" {invis} if", -"} def", -"", -"/curlayer 0 def", -"", -"%%EndResource", -"%%EndProlog", -"%%BeginSetup", -"14 default-font-family set_font", -"% /arrowlength 10 def", -"% /arrowwidth 5 def", -"", -"% make sure pdfmark is harmless for PS-interpreters other than Distiller", -"/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse", -"% make '<<' and '>>' safe on PS Level 1 devices", -"/languagelevel where {pop languagelevel}{1} ifelse", -"2 lt {", -" userdict (<<) cvn ([) cvn load put", -" userdict (>>) cvn ([) cvn load put", -"} if", -"", -"%%EndSetup", -(char*)0 }; diff --git a/internal/plugin/devil/dummy.go b/internal/plugin/devil/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/devil/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/devil/gvdevice_devil.c b/internal/plugin/devil/gvdevice_devil.c deleted file mode 100644 index 26b287c..0000000 --- a/internal/plugin/devil/gvdevice_devil.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvplugin_device.h" -#include -#include - -static void -Y_inv ( unsigned int width, unsigned int height, char *data) -{ - unsigned int x, y, *a, *b, t; - - a = (unsigned int*)data; - b = a + (height-1) * width; - for (y = 0; y < height/2; y++) { - for (x = 0; x < width; x++) { - t = *a; - *a++ = *b; - *b++ = t; - } - b -= 2*width; - } -} - -static void devil_format(GVJ_t * job) -{ - ILuint ImgId; - ILenum Error; - ILboolean rc; - - // Check if the shared lib's version matches the executable's version. - if (ilGetInteger(IL_VERSION_NUM) < IL_VERSION || - iluGetInteger(ILU_VERSION_NUM) < ILU_VERSION) { - fprintf(stderr, "DevIL version is different...exiting!\n"); - } - - // Initialize DevIL. - ilInit(); - - // Generate the main image name to use. - ilGenImages(1, &ImgId); - - // Bind this image name. - ilBindImage(ImgId); - - // cairo's inmemory image format needs inverting for DevIL - Y_inv ( job->width, job->height, job->imagedata ); - - // let the DevIL do its thing - rc = ilTexImage( job->width, job->height, - 1, // Depth - 4, // Bpp - IL_BGRA, // Format - IL_UNSIGNED_BYTE,// Type - job->imagedata); - - // output to the provided open file handle - ilSaveF(job->device.id, job->output_file); - - // We're done with the image, so delete it. - ilDeleteImages(1, &ImgId); - - // Simple Error detection loop that displays the Error to the user in a human-readable form. - while ((Error = ilGetError())) { - fprintf(stderr, "Error: %s\n", iluErrorString(Error)); - } -} - -static gvdevice_engine_t devil_engine = { - NULL, /* devil_initialize */ - devil_format, - NULL, /* devil_finalize */ -}; - -static gvdevice_features_t device_features_devil = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_NO_WRITER - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* svg 72 dpi */ -}; - -gvplugin_installed_t gvdevice_devil_types[] = { - {IL_BMP, "bmp:cairo", -1, &devil_engine, &device_features_devil}, - {IL_JPG, "jpg:cairo", -1, &devil_engine, &device_features_devil}, - {IL_JPG, "jpe:cairo", -1, &devil_engine, &device_features_devil}, - {IL_JPG, "jpeg:cairo", -1, &devil_engine, &device_features_devil}, - {IL_PNG, "png:cairo", -1, &devil_engine, &device_features_devil}, - {IL_TIF, "tif:cairo", -1, &devil_engine, &device_features_devil}, - {IL_TIF, "tiff:cairo", -1, &devil_engine, &device_features_devil}, - {IL_TGA, "tga:cairo", -1, &devil_engine, &device_features_devil}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/devil/gvplugin_devil.c b/internal/plugin/devil/gvplugin_devil.c deleted file mode 100644 index b585c2f..0000000 --- a/internal/plugin/devil/gvplugin_devil.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_devil_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_devil_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_devil_LTX_library = { "devil", apis }; diff --git a/internal/plugin/dot_layout/dummy.go b/internal/plugin/dot_layout/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/dot_layout/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/dot_layout/gvlayout_dot_layout.c b/internal/plugin/dot_layout/gvlayout_dot_layout.c deleted file mode 100644 index 56ac436..0000000 --- a/internal/plugin/dot_layout/gvlayout_dot_layout.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include "gvplugin_layout.h" - -typedef enum { LAYOUT_DOT, } layout_type; - -#ifdef WIN32 /*dependencies*/ - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "ingraphs.lib" ) - #pragma comment( lib, "cdt.lib" ) - #pragma comment( lib, "gvortho.lib" ) - #pragma comment( lib, "cgraph.lib" ) - #pragma comment( lib, "dotgen.lib" ) -#endif - -extern void dot_layout(graph_t * g); -extern void dot_cleanup(graph_t * g); - -gvlayout_engine_t dotgen_engine = { - dot_layout, - dot_cleanup, -}; - - -gvlayout_features_t dotgen_features = { - LAYOUT_USES_RANKDIR, -}; - -gvplugin_installed_t gvlayout_dot_layout[] = { - {LAYOUT_DOT, "dot", 0, &dotgen_engine, &dotgen_features}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/dot_layout/gvplugin_dot_layout.c b/internal/plugin/dot_layout/gvplugin_dot_layout.c deleted file mode 100644 index 6e13f79..0000000 --- a/internal/plugin/dot_layout/gvplugin_dot_layout.c +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvlayout_dot_layout[]; - -static gvplugin_api_t dot_apis[] = { - {API_layout, gvlayout_dot_layout}, - {(api_t)0, 0}, -}; -/*visual studio*/ -#ifdef WIN32_DLL -#ifndef GVPLUGIN_DOT_LAYOUT_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_dot_layout_LTX_library = { "dot_layout", dot_apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_dot_layout_LTX_library = { "dot_layout", dot_apis }; -#endif -#endif - - - -/*end visual studio*/ - - -#ifndef WIN32_DLL -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_dot_layout_LTX_library = { "dot_layout", dot_apis }; -#else -gvplugin_library_t gvplugin_dot_layout_LTX_library = { "dot_layout", dot_apis }; -#endif -#endif - - diff --git a/internal/plugin/gd/dummy.go b/internal/plugin/gd/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/gd/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/gd/gvdevice_gd.c b/internal/plugin/gd/gvdevice_gd.c deleted file mode 100644 index 758b2e0..0000000 --- a/internal/plugin/gd/gvdevice_gd.c +++ /dev/null @@ -1,235 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - - -#ifdef WIN32 /*dependencies*/ - #pragma comment( lib, "cgraph.lib" ) - #pragma comment( lib, "libpng12.lib" ) - #pragma comment( lib, "libgd.lib" ) - #pragma comment( lib, "libcairo-2.lib" ) - #pragma comment( lib, "fontconfig.lib" ) - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "freetype.lib" ) - #pragma comment( lib, "iconv.lib" ) - #pragma comment( lib, "jpeg.lib" ) - #pragma comment( lib, "z.lib" ) - #pragma comment( lib, "pathplan.lib" ) -#endif - - -#include "gvplugin_device.h" -#include "gvio.h" - -#ifdef HAVE_LIBGD -#include "gd.h" - -int gvdevice_gd_putBuf (gdIOCtx *context, const void *buffer, int len) -{ - return gvwrite((GVJ_t *)(context->tell), buffer, len); -} - -/* used by gif output */ -void gvdevice_gd_putC (gdIOCtx *context, int C) -{ - char c = C; - - gvwrite((GVJ_t *)(context->tell), &c, 1); -} - -#ifdef HAVE_PANGOCAIRO -typedef enum { - FORMAT_GIF, - FORMAT_JPEG, - FORMAT_PNG, - FORMAT_WBMP, - FORMAT_GD, - FORMAT_GD2, - FORMAT_XBM, -} format_type; - -static void gd_format(GVJ_t * job) -{ - gdImagePtr im; - unsigned int x, y, color, alpha; - unsigned int *data = (unsigned int*)(job->imagedata); - unsigned int width = job->width; - unsigned int height = job->height; - gdIOCtx ctx; - - ctx.putBuf = gvdevice_gd_putBuf; - ctx.putC = gvdevice_gd_putC; - ctx.tell = (void*)job; /* hide *job here */ - - im = gdImageCreateTrueColor(width, height); - switch (job->device.id) { -#ifdef HAVE_GD_PNG - case FORMAT_PNG: - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - color = *data++; - /* gd's max alpha is 127 */ - /* so right-shift 25 to lose lsb of alpha */ - alpha = (color >> 25) & 0x7f; - im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24); - } - } - break; -#endif - default: -/* pick an off-white color, so that transparent backgrounds look white in jpgs */ -#define TRANSPARENT 0x7ffffffe - - gdImageColorTransparent(im, TRANSPARENT); - gdImageAlphaBlending(im, FALSE); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - color = *data++; - /* gd's max alpha is 127 */ - /* so right-shift 25 to lose lsb of alpha */ - if ((alpha = (color >> 25) & 0x7f) >= 0x20) - /* if not > 75% transparent */ - im->tpixels[y][x] = (color & 0xffffff) | ((0x7f - alpha) << 24); - else - im->tpixels[y][x] = TRANSPARENT; - } - } - break; - } - - switch (job->device.id) { -#ifdef HAVE_GD_GIF - case FORMAT_GIF: - gdImageTrueColorToPalette(im, 0, 256); - gdImageGifCtx(im, &ctx); - break; -#endif - -#ifdef HAVE_GD_JPEG - case FORMAT_JPEG: - /* - * Write IM to OUTFILE as a JFIF-formatted JPEG image, using - * quality JPEG_QUALITY. If JPEG_QUALITY is in the range - * 0-100, increasing values represent higher quality but also - * larger image size. If JPEG_QUALITY is negative, the - * IJG JPEG library's default quality is used (which should - * be near optimal for many applications). See the IJG JPEG - * library documentation for more details. - */ -#define JPEG_QUALITY -1 - gdImageJpegCtx(im, &ctx, JPEG_QUALITY); - break; -#endif - -#ifdef HAVE_GD_PNG - case FORMAT_PNG: - gdImageTrueColorToPalette(im, 0, 256); - gdImagePngCtx(im, &ctx); - break; -#endif - - case FORMAT_GD: - gdImageGd(im, job->output_file); - break; - - case FORMAT_GD2: -#define GD2_CHUNKSIZE 128 -#define GD2_RAW 1 -#define GD2_COMPRESSED 2 - gdImageGd2(im, job->output_file, GD2_CHUNKSIZE, GD2_COMPRESSED); - break; - -#ifdef HAVE_GD_GIF - case FORMAT_WBMP: - { - /* Use black for the foreground color for the B&W wbmp image. */ - int black = gdImageColorResolveAlpha(im, 0, 0, 0, gdAlphaOpaque); - gdImageWBMPCtx(im, black, &ctx); - } - break; -#endif - -#if 0 -/* libgd only supports reading of xpm files */ -#ifdef HAVE_GD_XPM - case FORMAT_XBM: - gdImageXbm(im, job->output_file); -#endif -#endif - break; - default: - break; - } - - gdImageDestroy(im); -} - -static gvdevice_engine_t gd_engine = { - NULL, /* gd_initialize */ - gd_format, - NULL, /* gd_finalize */ -}; - -static gvdevice_features_t device_features_gd = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -static gvdevice_features_t device_features_gd_no_writer = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_NO_WRITER - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; -#endif -#endif - -gvplugin_installed_t gvdevice_gd_types[] = { -#ifdef HAVE_LIBGD -#ifdef HAVE_PANGOCAIRO - -#ifdef HAVE_GD_GIF - {FORMAT_GIF, "gif:cairo", 10, &gd_engine, &device_features_gd}, - {FORMAT_WBMP, "wbmp:cairo", 5, &gd_engine, &device_features_gd}, -#endif - -#ifdef HAVE_GD_JPEG - {FORMAT_JPEG, "jpe:cairo", 5, &gd_engine, &device_features_gd}, - {FORMAT_JPEG, "jpeg:cairo", 5, &gd_engine, &device_features_gd}, - {FORMAT_JPEG, "jpg:cairo", 5, &gd_engine, &device_features_gd}, -#endif - -#ifdef HAVE_GD_PNG - {FORMAT_PNG, "png:cairo", 5, &gd_engine, &device_features_gd}, -#endif - - {FORMAT_GD, "gd:cairo", 5, &gd_engine, &device_features_gd_no_writer}, - {FORMAT_GD2, "gd2:cairo", 5, &gd_engine, &device_features_gd_no_writer}, - -#if 0 -/* libgd only supports reading of xpm files */ -#ifdef HAVE_GD_XPM - {FORMAT_XBM, "xbm:cairo", 5, &gd_engine, &device_features_gd}, -#endif -#endif - -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gd/gvloadimage_gd.c b/internal/plugin/gd/gvloadimage_gd.c deleted file mode 100644 index b608832..0000000 --- a/internal/plugin/gd/gvloadimage_gd.c +++ /dev/null @@ -1,348 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#ifdef HAVE_PANGOCAIRO -#include -#endif - -#include "gvplugin_loadimage.h" -#include "gvio.h" - -#ifdef HAVE_LIBGD -#include "gd.h" - -typedef enum { - FORMAT_PNG_GD, FORMAT_GIF_GD, FORMAT_JPG_GD, FORMAT_GD_GD, FORMAT_GD2_GD, FORMAT_XPM_GD, FORMAT_WBMP_GD, FORMAT_XBM_GD, - FORMAT_PNG_PS, FORMAT_GIF_PS, FORMAT_JPG_PS, FORMAT_GD_PS, FORMAT_GD2_PS, FORMAT_XPM_PS, FORMAT_WBMP_PS, FORMAT_XBM_PS, - FORMAT_PNG_CAIRO, FORMAT_GIF_CAIRO, FORMAT_JPG_CAIRO, FORMAT_GD_CAIRO, FORMAT_GD2_CAIRO, FORMAT_XPM_CAIRO, FORMAT_WBMP_CAIRO, FORMAT_XBM_CAIRO, -} format_type; - - -static void gd_freeimage(usershape_t *us) -{ - gdImageDestroy((gdImagePtr)us->data); -} - -static gdImagePtr gd_loadimage(GVJ_t * job, usershape_t *us) -{ - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree != gd_freeimage) { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - } - } - if (!us->data) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - switch (us->type) { -#if 0 - case FT_GD: - im = gdImageCreateFromGd(us->f); - break; - case FT_GD2: - im = gdImageCreateFromGd2(us->f); - break; -#endif -#ifdef HAVE_GD_PNG - case FT_PNG: - us->data = (void*)gdImageCreateFromPng(us->f); - break; -#endif -#ifdef HAVE_GD_GIF - case FT_GIF: - us->data = (void*)gdImageCreateFromGif(us->f); - break; -#endif -#ifdef HAVE_GD_JPEG - case FT_JPEG: - us->data = (void*)gdImageCreateFromJpeg(us->f); - break; -#endif -#if 0 -#ifdef HAVE_GD_XPM - case FT_XPM: - us->data = (void*)gdImageCreateFromXpm(us->f); - break; -#endif -#ifdef HAVE_GD_WBMP - case FT_WBMP: - us->data = (void*)gdImageCreateFromWbmp(us->f); - break; -#endif -#endif - default: - break; - } - if (us->data) - us->datafree = gd_freeimage; - - gvusershape_file_release(us); - } - return (gdImagePtr)(us->data); -} - -static gdImagePtr gd_rotateimage(gdImagePtr im, int rotation) -{ - gdImagePtr im2 = gdImageCreate(im->sy, im->sx); - - gdImageCopyRotated(im2, im, im2->sx / 2., im2->sy / 2., - 0, 0, im->sx, im->sy, rotation); - gdImageDestroy(im); - return im2; -} - -static void gd_loadimage_gd(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - gdImagePtr im2, im = (gdImagePtr) job->context; - - if ((im2 = gd_loadimage(job, us))) { - if (job->rotation) - im2 = gd_rotateimage(im2, job->rotation); - gdImageCopyResized(im, im2, ROUND(b.LL.x), ROUND(b.LL.y), 0, 0, - ROUND(b.UR.x - b.LL.x), ROUND(b.UR.y - b.LL.y), im2->sx, im2->sy); - } -} - -#ifdef HAVE_PANGOCAIRO -static void gd_loadimage_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_t *cr = (cairo_t *) job->context; /* target context */ - unsigned int x, y, stride, width, height, px; - unsigned char *data; - cairo_surface_t *surface; /* source surface */ - gdImagePtr im; - - if ((im = gd_loadimage(job, us))) { - width = im->sx; - height = im->sy; -// cairo_format_stride_for_width() not available prior to cairo-1.6.4 or so (fc9) -//stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width); - stride = width*4; - data = malloc (stride * height); - surface = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_ARGB32, - width, height, stride); - - if (im->trueColor) { - if (im->saveAlphaFlag) { - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - px = gdImageTrueColorPixel(im, x, y); - *data++ = gdTrueColorGetBlue(px); - *data++ = gdTrueColorGetGreen(px); - *data++ = gdTrueColorGetRed(px); - *data++ = (0x7F-gdTrueColorGetAlpha(px)) << 1; - } - } - } - else { - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - px = gdImageTrueColorPixel(im, x, y); - *data++ = gdTrueColorGetBlue(px); - *data++ = gdTrueColorGetGreen(px); - *data++ = gdTrueColorGetRed(px); - *data++ = 0xFF; - } - } - } - } - else { - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - px = gdImagePalettePixel(im, x, y); - *data++ = im->blue[px]; - *data++ = im->green[px]; - *data++ = im->red[px]; - *data++ = (px==im->transparent)?0x00:0xff; - } - } - } - - cairo_save(cr); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - cairo_set_source_surface (cr, surface, 0, 0); - cairo_paint (cr); - cairo_restore(cr); - - cairo_surface_destroy(surface); - } -} -#endif - -static void gd_loadimage_ps(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - gdImagePtr im = NULL; - int X, Y, x, y, px; - - if ((im = gd_loadimage(job, us))) { - X = im->sx; - Y = im->sy; - - gvputs(job, "save\n"); - - /* define image data as string array (one per raster line) */ - gvputs(job, "/myctr 0 def\n"); - gvputs(job, "/myarray [\n"); - if (im->trueColor) { - for (y = 0; y < Y; y++) { - gvputs(job, "<"); - for (x = 0; x < X; x++) { - px = gdImageTrueColorPixel(im, x, y); - gvprintf(job, "%02x%02x%02x", - gdTrueColorGetRed(px), - gdTrueColorGetGreen(px), - gdTrueColorGetBlue(px)); - } - gvputs(job, ">\n"); - } - } - else { - for (y = 0; y < Y; y++) { - gvputs(job, "<"); - for (x = 0; x < X; x++) { - px = gdImagePalettePixel(im, x, y); - gvprintf(job, "%02x%02x%02x", - im->red[px], - im->green[px], - im->blue[px]); - } - gvputs(job, ">\n"); - } - } - gvputs(job, "] def\n"); - gvputs(job,"/myproc { myarray myctr get /myctr myctr 1 add def } def\n"); - - /* this sets the position of the image */ - gvprintf(job, "%g %g translate\n", - (b.LL.x + (b.UR.x - b.LL.x) * (1. - (job->dpi.x) / 96.) / 2.), - (b.LL.y + (b.UR.y - b.LL.y) * (1. - (job->dpi.y) / 96.) / 2.)); - - /* this sets the rendered size to fit the box */ - gvprintf(job,"%g %g scale\n", - ((b.UR.x - b.LL.x) * (job->dpi.x) / 96.), - ((b.UR.y - b.LL.y) * (job->dpi.y) / 96.)); - - /* xsize ysize bits-per-sample [matrix] */ - gvprintf(job, "%d %d 8 [%d 0 0 %d 0 %d]\n", X, Y, X, -Y, Y); - - gvputs(job, "{myproc} false 3 colorimage\n"); - - gvputs(job, "restore\n"); - } -} - -static gvloadimage_engine_t engine = { - gd_loadimage_gd -}; - -static gvloadimage_engine_t engine_ps = { - gd_loadimage_ps -}; - -#ifdef HAVE_PANGOCAIRO -static gvloadimage_engine_t engine_cairo = { - gd_loadimage_cairo -}; -#endif - -#endif - -gvplugin_installed_t gvloadimage_gd_types[] = { -#ifdef HAVE_LIBGD - - {FORMAT_GD_GD, "gd:gd", 1, &engine, NULL}, - {FORMAT_GD2_GD, "gd2:gd", 1, &engine, NULL}, -#ifdef HAVE_GD_GIF - {FORMAT_GIF_GD, "gif:gd", 1, &engine, NULL}, -#endif -#ifdef HAVE_GD_JPEG - {FORMAT_JPG_GD, "jpeg:gd", 1, &engine, NULL}, - {FORMAT_JPG_GD, "jpe:gd", 1, &engine, NULL}, - {FORMAT_JPG_GD, "jpg:gd", 1, &engine, NULL}, -#endif -#ifdef HAVE_GD_PNG - {FORMAT_PNG_GD, "png:gd", 1, &engine, NULL}, -#endif -#ifdef HAVE_GD_WBMP - {FORMAT_WBMP_GD, "wbmp:gd", 1, &engine, NULL}, -#endif -#ifdef HAVE_GD_XPM - {FORMAT_XBM_GD, "xbm:gd", 1, &engine, NULL}, -#endif - - {FORMAT_GD_PS, "gd:ps", 1, &engine_ps, NULL}, - {FORMAT_GD_PS, "gd:lasi", 1, &engine_ps, NULL}, - {FORMAT_GD2_PS, "gd2:ps", 1, &engine_ps, NULL}, - {FORMAT_GD2_PS, "gd2:lasi", 1, &engine_ps, NULL}, -#ifdef HAVE_GD_GIF - {FORMAT_GIF_PS, "gif:ps", 1, &engine_ps, NULL}, - {FORMAT_GIF_PS, "gif:lasi", 1, &engine_ps, NULL}, -#endif -#ifdef HAVE_GD_JPEG - {FORMAT_JPG_PS, "jpeg:ps", 1, &engine_ps, NULL}, - {FORMAT_JPG_PS, "jpg:ps", 1, &engine_ps, NULL}, - {FORMAT_JPG_PS, "jpe:ps", 1, &engine_ps, NULL}, - {FORMAT_JPG_PS, "jpeg:lasi", 1, &engine_ps, NULL}, - {FORMAT_JPG_PS, "jpg:lasi", 1, &engine_ps, NULL}, - {FORMAT_JPG_PS, "jpe:lasi", 1, &engine_ps, NULL}, -#endif -#ifdef HAVE_GD_PNG - {FORMAT_PNG_PS, "png:ps", 1, &engine_ps, NULL}, - {FORMAT_PNG_PS, "png:lasi", 1, &engine_ps, NULL}, -#endif -#ifdef HAVE_GD_WBMP - {FORMAT_WBMP_PS, "wbmp:ps", 1, &engine_ps, NULL}, - {FORMAT_WBMP_PS, "wbmp:lasi", 1, &engine_ps, NULL}, -#endif -#ifdef HAVE_GD_XPM - {FORMAT_XBM_PS, "xbm:ps", 1, &engine_ps, NULL}, - {FORMAT_XBM_PS, "xbm:lasi", 1, &engine_ps, NULL}, -#endif - -#ifdef HAVE_PANGOCAIRO - {FORMAT_GD_CAIRO, "gd:cairo", 1, &engine_cairo, NULL}, - {FORMAT_GD2_CAIRO, "gd2:cairo", 1, &engine_cairo, NULL}, -#ifdef HAVE_GD_GIF - {FORMAT_GIF_CAIRO, "gif:cairo", 1, &engine_cairo, NULL}, -#endif -#ifdef HAVE_GD_JPEG - {FORMAT_JPG_CAIRO, "jpeg:cairo", 1, &engine_cairo, NULL}, - {FORMAT_JPG_CAIRO, "jpg:cairo", 1, &engine_cairo, NULL}, - {FORMAT_JPG_CAIRO, "jpe:cairo", 1, &engine_cairo, NULL}, -#endif -#ifdef HAVE_GD_PNG - {FORMAT_PNG_CAIRO, "png:cairo", -1, &engine_cairo, NULL}, -#endif -#ifdef HAVE_GD_WBMP - {FORMAT_WBMP_CAIRO, "wbmp:cairo", 1, &engine_cairo, NULL}, -#endif -#ifdef HAVE_GD_XPM - {FORMAT_XBM_CAIRO, "xbm:cairo", 1, &engine_cairo, NULL}, -#endif -#endif /* HAVE_PANGOCAIRO */ - -#endif /* HAVE_LIBGD */ - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gd/gvplugin_gd.c b/internal/plugin/gd/gvplugin_gd.c deleted file mode 100644 index 33d3a11..0000000 --- a/internal/plugin/gd/gvplugin_gd.c +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvrender_gd_types[]; -extern gvplugin_installed_t gvrender_vrml_types[]; -extern gvplugin_installed_t gvtextlayout_gd_types[]; -extern gvplugin_installed_t gvloadimage_gd_types[]; -extern gvplugin_installed_t gvdevice_gd_types[]; -extern gvplugin_installed_t gvdevice_gd_types2[]; -extern gvplugin_installed_t gvdevice_vrml_types[]; - -static gvplugin_api_t apis[] = { - {API_render, gvrender_gd_types}, - {API_render, gvrender_vrml_types}, - {API_textlayout, gvtextlayout_gd_types}, - {API_loadimage, gvloadimage_gd_types}, - {API_device, gvdevice_gd_types}, - {API_device, gvdevice_gd_types2}, - {API_device, gvdevice_vrml_types}, - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL /*visual studio*/ -#ifndef GVPLUGIN_GD_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_gd_LTX_library = { "gd", apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_gd_LTX_library = { "gd", apis }; -#endif -#else /*end visual studio*/ -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_gd_LTX_library = { "gd", apis }; -#else -gvplugin_library_t gvplugin_gd_LTX_library = { "gd", apis }; -#endif -#endif - - diff --git a/internal/plugin/gd/gvrender_gd.c b/internal/plugin/gd/gvrender_gd.c deleted file mode 100644 index e230dd8..0000000 --- a/internal/plugin/gd/gvrender_gd.c +++ /dev/null @@ -1,707 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#ifdef WIN32 -#include -#endif -#include -#include -#include -#include -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvcint.h" /* for gvc->g for agget */ - -#ifdef HAVE_LIBGD -#include "gd.h" - -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - - -typedef enum { - FORMAT_GIF, - FORMAT_JPEG, - FORMAT_PNG, - FORMAT_WBMP, - FORMAT_GD, - FORMAT_GD2, - FORMAT_XBM, -} format_type; - -extern boolean mapbool(char *); -extern pointf Bezier(pointf * V, int degree, double t, pointf * Left, pointf * Right); - -#define BEZIERSUBDIVISION 10 - -static void gdgen_resolve_color(GVJ_t * job, gvcolor_t * color) -{ - gdImagePtr im = (gdImagePtr) job->context; - int alpha; - - if (!im) - return; - - /* convert alpha (normally an "opacity" value) to gd's "transparency" */ - alpha = (255 - color->u.rgba[3]) * gdAlphaMax / 255; - - if(alpha == gdAlphaMax) - color->u.index = gdImageGetTransparent(im); - else - color->u.index = gdImageColorResolveAlpha(im, - color->u.rgba[0], - color->u.rgba[1], - color->u.rgba[2], - alpha); - color->type = COLOR_INDEX; -} - -static int white, black, transparent, basecolor; - -#define GD_XYMAX INT32_MAX - -static void gdgen_begin_page(GVJ_t * job) -{ - char *bgcolor_str = NULL, *truecolor_str = NULL; - boolean truecolor_p = FALSE; /* try to use cheaper paletted mode */ - boolean bg_transparent_p = FALSE; - gdImagePtr im = NULL; - - truecolor_str = agget((graph_t*)(job->gvc->g), "truecolor"); /* allow user to force truecolor */ - bgcolor_str = agget((graph_t*)(job->gvc->g), "bgcolor"); - - if (truecolor_str && truecolor_str[0]) - truecolor_p = mapbool(truecolor_str); - - if (bgcolor_str && strcmp(bgcolor_str, "transparent") == 0) { - bg_transparent_p = TRUE; - if (job->render.features->flags & GVDEVICE_DOES_TRUECOLOR) - truecolor_p = TRUE; /* force truecolor */ - } - - if (GD_has_images(job->gvc->g)) - truecolor_p = TRUE; /* force truecolor */ - - if (job->external_context) { - if (job->common->verbose) - fprintf(stderr, "%s: using existing GD image\n", job->common->cmdname); - im = (gdImagePtr) (job->context); - } else { - if (job->width * job->height >= GD_XYMAX) { - double scale = sqrt(GD_XYMAX / (job->width * job->height)); - job->width *= scale; - job->height *= scale; - job->zoom *= scale; - fprintf(stderr, - "%s: graph is too large for gd-renderer bitmaps. Scaling by %g to fit\n", - job->common->cmdname, scale); - } - if (truecolor_p) { - if (job->common->verbose) - fprintf(stderr, - "%s: allocating a %dK TrueColor GD image (%d x %d pixels)\n", - job->common->cmdname, - ROUND(job->width * job->height * 4 / 1024.), - job->width, job->height); - im = gdImageCreateTrueColor(job->width, job->height); - } else { - if (job->common->verbose) - fprintf(stderr, - "%s: allocating a %dK PaletteColor GD image (%d x %d pixels)\n", - job->common->cmdname, - ROUND(job->width * job->height / 1024.), - job->width, job->height); - im = gdImageCreate(job->width, job->height); - } - job->context = (void *) im; - } - - if (!im) { - job->common->errorfn("gdImageCreate returned NULL. Malloc problem?\n"); - return; - } - - /* first color is the default background color */ - /* - used for margins - if any */ - transparent = gdImageColorResolveAlpha(im, - gdRedMax - 1, gdGreenMax, - gdBlueMax, gdAlphaTransparent); - gdImageColorTransparent(im, transparent); - - white = gdImageColorResolveAlpha(im, - gdRedMax, gdGreenMax, gdBlueMax, - gdAlphaOpaque); - - black = gdImageColorResolveAlpha(im, 0, 0, 0, gdAlphaOpaque); - - /* Blending must be off to lay a transparent basecolor. - Nothing to blend with anyway. */ - gdImageAlphaBlending(im, FALSE); - gdImageFill(im, im->sx / 2, im->sy / 2, transparent); - /* Blend everything else together, - especially fonts over non-transparent backgrounds */ - gdImageAlphaBlending(im, TRUE); -} - -extern int gvdevice_gd_putBuf (gdIOCtx *context, const void *buffer, int len); -extern void gvdevice_gd_putC (gdIOCtx *context, int C); - -static void gdgen_end_page(GVJ_t * job) -{ - gdImagePtr im = (gdImagePtr) job->context; - - gdIOCtx ctx; - - ctx.putBuf = gvdevice_gd_putBuf; - ctx.putC = gvdevice_gd_putC; - ctx.tell = (void*)job; /* hide *job here */ - - if (!im) - return; - if (job->external_context) { - /* leave image in memory to be handled by Gdtclft output routines */ -#ifdef MYTRACE - fprintf(stderr, "gdgen_end_graph (to memory)\n"); -#endif - } else { - /* Only save the alpha channel in outputs that support it if - the base color was transparent. Otherwise everything - was blended so there is no useful alpha info */ - gdImageSaveAlpha(im, (basecolor == transparent)); - switch (job->render.id) { - case FORMAT_GIF: -#ifdef HAVE_GD_GIF - gdImageTrueColorToPalette(im, 0, 256); - gdImageGifCtx(im, &ctx); -#endif - break; - case FORMAT_JPEG: -#ifdef HAVE_GD_JPEG - /* - * Write IM to OUTFILE as a JFIF-formatted JPEG image, using - * quality JPEG_QUALITY. If JPEG_QUALITY is in the range - * 0-100, increasing values represent higher quality but also - * larger image size. If JPEG_QUALITY is negative, the - * IJG JPEG library's default quality is used (which should - * be near optimal for many applications). See the IJG JPEG - * library documentation for more details. */ -#define JPEG_QUALITY -1 - gdImageJpegCtx(im, &ctx, JPEG_QUALITY); -#endif - - break; - case FORMAT_PNG: -#ifdef HAVE_GD_PNG - gdImagePngCtx(im, &ctx); -#endif - break; - -#ifdef HAVE_GD_GIF - case FORMAT_WBMP: - { - /* Use black for the foreground color for the B&W wbmp image. */ - int black = gdImageColorResolveAlpha(im, 0, 0, 0, gdAlphaOpaque); - gdImageWBMPCtx(im, black, &ctx); - } - break; -#endif - - case FORMAT_GD: - gdImageGd(im, job->output_file); - break; - -#ifdef HAVE_LIBZ - case FORMAT_GD2: -#define GD2_CHUNKSIZE 128 -#define GD2_RAW 1 -#define GD2_COMPRESSED 2 - gdImageGd2(im, job->output_file, GD2_CHUNKSIZE, GD2_COMPRESSED); - break; -#endif - - case FORMAT_XBM: -#if 0 -/* libgd support only reading .xpm files */ -#ifdef HAVE_GD_XPM - gdImageXbm(im, job->output_file); -#endif -#endif - break; - } - gdImageDestroy(im); -#ifdef MYTRACE - fprintf(stderr, "gdgen_end_graph (to file)\n"); -#endif - job->context = NULL; - } -} - -static void gdgen_missingfont(char *err, char *fontreq) -{ - static char *lastmissing = 0; - static int n_errors = 0; - - if (n_errors >= 20) - return; - if ((lastmissing == 0) || (strcmp(lastmissing, fontreq))) { -#ifdef HAVE_GD_FONTCONFIG -#if 0 -/* FIXME - error function */ - agerr(AGERR, "%s : %s\n", err, fontreq); -#endif -#else - char *p = getenv("GDFONTPATH"); - if (!p) - p = DEFAULT_FONTPATH; -#if 0 -/* FIXME - error function */ - agerr(AGERR, "%s : %s in %s\n", err, fontreq, p); -#endif -#endif - if (lastmissing) - free(lastmissing); - lastmissing = strdup(fontreq); - n_errors++; -#if 0 -/* FIXME - error function */ - if (n_errors >= 20) - agerr(AGWARN, "(font errors suppressed)\n"); -#endif - } -} - -gdFontPtr gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant; - -/* fontsize at which text is omitted entirely */ -#define FONTSIZE_MUCH_TOO_SMALL 0.15 -/* fontsize at which text is rendered by a simple line */ -#define FONTSIZE_TOO_SMALL 1.5 - -gdFontPtr gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant; - -void gdgen_text(gdImagePtr im, pointf spf, pointf epf, int fontcolor, double fontsize, int fontdpi, double fontangle, char *fontname, char *str) -{ - gdFTStringExtra strex; - point sp, ep; /* start point, end point, in pixels */ - - PF2P(spf, sp); - PF2P(epf, ep); - - strex.flags = gdFTEX_RESOLUTION; - strex.hdpi = strex.vdpi = fontdpi; - - if (strstr(fontname, "/")) - strex.flags |= gdFTEX_FONTPATHNAME; - else - strex.flags |= gdFTEX_FONTCONFIG; - - if (fontsize <= FONTSIZE_MUCH_TOO_SMALL) { - /* ignore entirely */ - } else if (fontsize <= FONTSIZE_TOO_SMALL) { - /* draw line in place of text */ - gdImageLine(im, sp.x, sp.y, ep.x, ep.y, fontcolor); - } else { -#ifdef HAVE_GD_FREETYPE - char *err; - int brect[8]; -#ifdef HAVE_GD_FONTCONFIG - char* fontlist = fontname; -#else - extern char *gd_alternate_fontlist(char *font); - char* fontlist = gd_alternate_fontlist(fontname); -#endif - err = gdImageStringFTEx(im, brect, fontcolor, - fontlist, fontsize, fontangle, sp.x, sp.y, str, &strex); - - if (err) { - /* revert to builtin fonts */ - gdgen_missingfont(err, fontname); -#endif - sp.y += 2; - if (fontsize <= 8.5) { - gdImageString(im, gdFontTiny, sp.x, sp.y - 9, (unsigned char*)str, fontcolor); - } else if (fontsize <= 9.5) { - gdImageString(im, gdFontSmall, sp.x, sp.y - 12, (unsigned char*)str, fontcolor); - } else if (fontsize <= 10.5) { - gdImageString(im, gdFontMediumBold, sp.x, sp.y - 13, (unsigned char*)str, fontcolor); - } else if (fontsize <= 11.5) { - gdImageString(im, gdFontLarge, sp.x, sp.y - 14, (unsigned char*)str, fontcolor); - } else { - gdImageString(im, gdFontGiant, sp.x, sp.y - 15, (unsigned char*)str, fontcolor); - } -#ifdef HAVE_GD_FREETYPE - } -#endif - } -} - -extern char* gd_psfontResolve (PostscriptAlias* pa); - -static void gdgen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - gdImagePtr im = (gdImagePtr) job->context; - pointf spf, epf; - double spanwidth = span->size.x * job->zoom * job->dpi.x / POINTS_PER_INCH; - char* fontname; -#ifdef HAVE_GD_FONTCONFIG - PostscriptAlias *pA; -#endif - - if (!im) - return; - - switch (span->just) { - case 'l': - spf.x = 0.0; - break; - case 'r': - spf.x = -spanwidth; - break; - default: - case 'n': - spf.x = -spanwidth / 2; - break; - } - epf.x = spf.x + spanwidth; - - if (job->rotation) { - spf.y = -spf.x + p.y; - epf.y = epf.x + p.y; - epf.x = spf.x = p.x; - } - else { - spf.x += p.x; - epf.x += p.x; - epf.y = spf.y = p.y - span->yoffset_centerline * job->zoom * job->dpi.x / POINTS_PER_INCH; - } - -#ifdef HAVE_GD_FONTCONFIG - pA = span->font->postscript_alias; - if (pA) - fontname = gd_psfontResolve (pA); - else -#endif - fontname = span->font->name; - - gdgen_text(im, spf, epf, - job->obj->pencolor.u.index, - span->font->size * job->zoom, - job->dpi.x, - job->rotation ? (M_PI / 2) : 0, - fontname, - span->str); -} - -static int gdgen_set_penstyle(GVJ_t * job, gdImagePtr im, gdImagePtr* brush) -{ - obj_state_t *obj = job->obj; - int i, pen, width, dashstyle[40]; - - if (obj->pen == PEN_DASHED) { - for (i = 0; i < 10; i++) - dashstyle[i] = obj->pencolor.u.index; - for (; i < 20; i++) - dashstyle[i] = gdTransparent; - gdImageSetStyle(im, dashstyle, 20); - pen = gdStyled; - } else if (obj->pen == PEN_DOTTED) { - for (i = 0; i < 2; i++) - dashstyle[i] = obj->pencolor.u.index; - for (; i < 14; i++) - dashstyle[i] = gdTransparent; - gdImageSetStyle(im, dashstyle, 12); - pen = gdStyled; - } else { - pen = obj->pencolor.u.index; - } - - width = obj->penwidth * job->zoom; - if (width < PENWIDTH_NORMAL) - width = PENWIDTH_NORMAL; /* gd can't do thin lines */ - gdImageSetThickness(im, width); - /* use brush instead of Thickness to improve end butts */ - if (width != PENWIDTH_NORMAL) { - if (im->trueColor) { - *brush = gdImageCreateTrueColor(width,width); - } - else { - *brush = gdImageCreate(width, width); - gdImagePaletteCopy(*brush, im); - } - gdImageFilledRectangle(*brush, 0, 0, width - 1, width - 1, - obj->pencolor.u.index); - gdImageSetBrush(im, *brush); - if (pen == gdStyled) - pen = gdStyledBrushed; - else - pen = gdBrushed; - } - - return pen; -} - -static void -gdgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - gdImagePtr im = (gdImagePtr) job->context; - pointf p0, p1, V[4]; - int i, j, step, pen; - boolean pen_ok, fill_ok; - gdImagePtr brush = NULL; - gdPoint F[4]; - - if (!im) - return; - - pen = gdgen_set_penstyle(job, im, &brush); - pen_ok = (pen != gdImageGetTransparent(im)); - fill_ok = (filled && obj->fillcolor.u.index != gdImageGetTransparent(im)); - - if (pen_ok || fill_ok) { - V[3] = A[0]; - PF2P(A[0], F[0]); - PF2P(A[n-1], F[3]); - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) - V[j] = A[i + j]; - p0 = V[0]; - for (step = 1; step <= BEZIERSUBDIVISION; step++) { - p1 = Bezier(V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - PF2P(p0, F[1]); - PF2P(p1, F[2]); - if (pen_ok) - gdImageLine(im, F[1].x, F[1].y, F[2].x, F[2].y, pen); - if (fill_ok) - gdImageFilledPolygon(im, F, 4, obj->fillcolor.u.index); - p0 = p1; - } - } - } - if (brush) - gdImageDestroy(brush); -} - -static gdPoint *points; -static int points_allocated; - -static void gdgen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - gdImagePtr im = (gdImagePtr) job->context; - gdImagePtr brush = NULL; - int i; - int pen; - boolean pen_ok, fill_ok; - - if (!im) - return; - - pen = gdgen_set_penstyle(job, im, &brush); - pen_ok = (pen != gdImageGetTransparent(im)); - fill_ok = (filled && obj->fillcolor.u.index != gdImageGetTransparent(im)); - - if (pen_ok || fill_ok) { - if (n > points_allocated) { - points = realloc(points, n * sizeof(gdPoint)); - points_allocated = n; - } - for (i = 0; i < n; i++) { - points[i].x = ROUND(A[i].x); - points[i].y = ROUND(A[i].y); - } - if (fill_ok) - gdImageFilledPolygon(im, points, n, obj->fillcolor.u.index); - - if (pen_ok) - gdImagePolygon(im, points, n, pen); - } - if (brush) - gdImageDestroy(brush); -} - -static void gdgen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - gdImagePtr im = (gdImagePtr) job->context; - double dx, dy; - int pen; - boolean pen_ok, fill_ok; - gdImagePtr brush = NULL; - - if (!im) - return; - - pen = gdgen_set_penstyle(job, im, &brush); - pen_ok = (pen != gdImageGetTransparent(im)); - fill_ok = (filled && obj->fillcolor.u.index != gdImageGetTransparent(im)); - - dx = 2 * (A[1].x - A[0].x); - dy = 2 * (A[1].y - A[0].y); - - if (fill_ok) - gdImageFilledEllipse(im, ROUND(A[0].x), ROUND(A[0].y), - ROUND(dx), ROUND(dy), - obj->fillcolor.u.index); - if (pen_ok) - gdImageArc(im, ROUND(A[0].x), ROUND(A[0].y), ROUND(dx), ROUND(dy), - 0, 360, pen); - if (brush) - gdImageDestroy(brush); -} - -static void gdgen_polyline(GVJ_t * job, pointf * A, int n) -{ - gdImagePtr im = (gdImagePtr) job->context; - pointf p, p1; - int i; - int pen; - boolean pen_ok; - gdImagePtr brush = NULL; - - if (!im) - return; - - pen = gdgen_set_penstyle(job, im, &brush); - pen_ok = (pen != gdImageGetTransparent(im)); - - if (pen_ok) { - p = A[0]; - for (i = 1; i < n; i++) { - p1 = A[i]; - gdImageLine(im, ROUND(p.x), ROUND(p.y), - ROUND(p1.x), ROUND(p1.y), pen); - p = p1; - } - } - if (brush) - gdImageDestroy(brush); -} - -static gvrender_engine_t gdgen_engine = { - 0, /* gdgen_begin_job */ - 0, /* gdgen_end_job */ - 0, /* gdgen_begin_graph */ - 0, /* gdgen_end_graph */ - 0, /* gdgen_begin_layer */ - 0, /* gdgen_end_layer */ - gdgen_begin_page, - gdgen_end_page, - 0, /* gdgen_begin_cluster */ - 0, /* gdgen_end_cluster */ - 0, /* gdgen_begin_nodes */ - 0, /* gdgen_end_nodes */ - 0, /* gdgen_begin_edges */ - 0, /* gdgen_end_edges */ - 0, /* gdgen_begin_node */ - 0, /* gdgen_end_node */ - 0, /* gdgen_begin_edge */ - 0, /* gdgen_end_edge */ - 0, /* gdgen_begin_anchor */ - 0, /* gdgen_end_anchor */ - 0, /* gdgen_begin_label */ - 0, /* gdgen_end_label */ - gdgen_textspan, - gdgen_resolve_color, - gdgen_ellipse, - gdgen_polygon, - gdgen_bezier, - gdgen_polyline, - 0, /* gdgen_comment */ - 0, /* gdgen_library_shape */ -}; - -static gvrender_features_t render_features_gd = { - GVRENDER_Y_GOES_DOWN, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -static gvdevice_features_t device_features_gd = { - GVDEVICE_BINARY_FORMAT, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -static gvdevice_features_t device_features_gd_tc = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -static gvdevice_features_t device_features_gd_tc_no_writer = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR - | GVDEVICE_NO_WRITER, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -#endif - -gvplugin_installed_t gvrender_gd_types[] = { -#ifdef HAVE_LIBGD - {FORMAT_GD, "gd", 1, &gdgen_engine, &render_features_gd}, -#endif - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_gd_types2[] = { -#ifdef HAVE_LIBGD -#ifdef HAVE_GD_GIF - {FORMAT_GIF, "gif:gd", 1, NULL, &device_features_gd_tc}, /* pretend gif is truecolor because it supports transparency */ - {FORMAT_WBMP, "wbmp:gd", 1, NULL, &device_features_gd}, -#endif - -#ifdef HAVE_GD_JPEG - {FORMAT_JPEG, "jpe:gd", 1, NULL, &device_features_gd}, - {FORMAT_JPEG, "jpeg:gd", 1, NULL, &device_features_gd}, - {FORMAT_JPEG, "jpg:gd", 1, NULL, &device_features_gd}, -#endif - -#ifdef HAVE_GD_PNG - {FORMAT_PNG, "png:gd", 1, NULL, &device_features_gd_tc}, -#endif - - {FORMAT_GD, "gd:gd", 1, NULL, &device_features_gd_tc_no_writer}, - -#ifdef HAVE_LIBZ - {FORMAT_GD2, "gd2:gd", 1, NULL, &device_features_gd_tc_no_writer}, -#endif - -#if 0 -/* libgd has no support for xbm as output */ -#ifdef HAVE_GD_XPM - {FORMAT_XBM, "xbm:gd", 1, NULL, &device_features_gd}, -#endif -#endif - -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gd/gvrender_gd_vrml.c b/internal/plugin/gd/gvrender_gd_vrml.c deleted file mode 100644 index ac97d47..0000000 --- a/internal/plugin/gd/gvrender_gd_vrml.c +++ /dev/null @@ -1,859 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - - -#include "config.h" - -#include -#include -#include -#include - -#include "gvplugin_render.h" -#include "gvio.h" - -#ifdef HAVE_LIBGD -#include "gd.h" - -#ifdef HAVE_GD_PNG - -/* for N_GNEW() */ -#include "memory.h" - -/* for gvcolor_t */ -#include "color.h" - -/* for late_double() */ -#include "agxbuf.h" -#include "utils.h" - -/* for wind() */ -#include "pathutil.h" - -extern shape_kind shapeOf(node_t *); -extern pointf gvrender_ptf(GVJ_t *job, pointf p); -extern pointf Bezier(pointf * V, int degree, double t, pointf * Left, pointf * Right); - -typedef enum { FORMAT_VRML, } format_type; - -#define BEZIERSUBDIVISION 10 - -/* static int N_pages; */ -/* static point Pages; */ -static double Scale; -static double MinZ; -/* static int onetime = TRUE; */ -static int Saw_skycolor; - -static gdImagePtr im; -static FILE *PNGfile; -static int IsSegment; /* set true if edge is line segment */ -static double CylHt; /* height of cylinder part of edge */ -static double EdgeLen; /* length between centers of endpoints */ -static double HeadHt, TailHt; /* height of arrows */ -static double Fstz, Sndz; /* z values of tail and head points */ - -/* gdirname: - * Returns directory pathname prefix - * Code adapted from dgk - */ -static char *gdirname(char *pathname) -{ - char *last; - - /* go to end of path */ - for (last = pathname; *last; last++); - /* back over trailing '/' */ - while (last > pathname && *--last == '/'); - /* back over non-slash chars */ - for (; last > pathname && *last != '/'; last--); - if (last == pathname) { - /* all '/' or "" */ - if (*pathname != '/') - *last = '.'; - /* preserve // */ - else if (pathname[1] == '/') - last++; - } else { - /* back over trailing '/' */ - for (; *last == '/' && last > pathname; last--); - /* preserve // */ - if (last == pathname && *pathname == '/' && pathname[1] == '/') - last++; - } - last++; - *last = '\0'; - - return pathname; -} - -static char *nodefilename(const char *filename, node_t * n, char *buf) -{ - static char *dir; - static char disposable[1024]; - - if (dir == 0) { - if (filename) - dir = gdirname(strcpy(disposable, filename)); - else - dir = "."; - } - sprintf(buf, "%s/node%d.png", dir, AGSEQ(n)); - return buf; -} - -static FILE *nodefile(const char *filename, node_t * n) -{ - FILE *rv; - char buf[1024]; - - rv = fopen(nodefilename(filename, n, buf), "wb"); - return rv; -} - -#define NODE_PAD 1 - -static pointf vrml_node_point(GVJ_t *job, node_t *n, pointf p) -{ - pointf rv; - - /* make rv relative to PNG canvas */ - if (job->rotation) { - rv.x = ( (p.y - job->pad.y) - ND_coord(n).y + ND_lw(n) ) * Scale + NODE_PAD; - rv.y = (-(p.x - job->pad.x) + ND_coord(n).x + ND_ht(n) / 2.) * Scale + NODE_PAD; - } else { - rv.x = ( (p.x - job->pad.x) - ND_coord(n).x + ND_lw(n) ) * Scale + NODE_PAD; - rv.y = (-(p.y - job->pad.y) + ND_coord(n).y + ND_ht(n) / 2.) * Scale + NODE_PAD; - } - return rv; -} - -static int color_index(gdImagePtr im, gvcolor_t color) -{ - int alpha; - - /* convert alpha (normally an "opacity" value) to gd's "transparency" */ - alpha = (255 - color.u.rgba[3]) * gdAlphaMax / 255; - - if(alpha == gdAlphaMax) - return (gdImageGetTransparent(im)); - else - return (gdImageColorResolveAlpha(im, - color.u.rgba[0], - color.u.rgba[1], - color.u.rgba[2], - alpha)); -} - -static int set_penstyle(GVJ_t * job, gdImagePtr im, gdImagePtr brush) -{ - obj_state_t *obj = job->obj; - int i, pen, pencolor, transparent, width, dashstyle[40]; - - pen = pencolor = color_index(im, obj->pencolor); - transparent = gdImageGetTransparent(im); - if (obj->pen == PEN_DASHED) { - for (i = 0; i < 20; i++) - dashstyle[i] = pencolor; - for (; i < 40; i++) - dashstyle[i] = transparent; - gdImageSetStyle(im, dashstyle, 20); - pen = gdStyled; - } else if (obj->pen == PEN_DOTTED) { - for (i = 0; i < 2; i++) - dashstyle[i] = pencolor; - for (; i < 24; i++) - dashstyle[i] = transparent; - gdImageSetStyle(im, dashstyle, 24); - pen = gdStyled; - } - width = obj->penwidth * job->scale.x; - if (width < PENWIDTH_NORMAL) - width = PENWIDTH_NORMAL; /* gd can't do thin lines */ - gdImageSetThickness(im, width); - /* use brush instead of Thickness to improve end butts */ - if (width != PENWIDTH_NORMAL) { - brush = gdImageCreate(width, width); - gdImagePaletteCopy(brush, im); - gdImageFilledRectangle(brush, 0, 0, width - 1, width - 1, pencolor); - gdImageSetBrush(im, brush); - if (pen == gdStyled) - pen = gdStyledBrushed; - else - pen = gdBrushed; - } - return pen; -} - -/* warmed over VRML code starts here */ - -static void vrml_begin_page(GVJ_t *job) -{ - Scale = (double) DEFAULT_DPI / POINTS_PER_INCH; - gvputs(job, "#VRML V2.0 utf8\n"); - - Saw_skycolor = FALSE; - MinZ = MAXDOUBLE; - gvputs(job, "Group { children [\n"); - gvputs(job, " Transform {\n"); - gvprintf(job, " scale %.3f %.3f %.3f\n", .0278, .0278, .0278); - gvputs(job, " children [\n"); -} - -static void vrml_end_page(GVJ_t *job) -{ - double d, z; - box bb = job->boundingBox; - - d = MAX(bb.UR.x - bb.LL.x,bb.UR.y - bb.LL.y); - /* Roughly fill 3/4 view assuming FOV angle of M_PI/4. - * Small graphs and non-square aspect ratios will upset this. - */ - z = (0.6667*d)/tan(M_PI/8.0) + MinZ; /* fill 3/4 of view */ - - if (!Saw_skycolor) - gvputs(job, " Background { skyColor 1 1 1 }\n"); - gvputs(job, " ] }\n"); - gvprintf(job, " Viewpoint {position %.3f %.3f %.3f}\n", - Scale * (bb.UR.x + bb.LL.x) / 72., - Scale * (bb.UR.y + bb.LL.y) / 72., - Scale * 2 * z / 72.); - gvputs(job, "] }\n"); -} - -static void vrml_begin_node(GVJ_t *job) -{ - obj_state_t *obj = job->obj; - node_t *n = obj->u.n; - double z = obj->z; - int width, height; - int transparent; - - gvprintf(job, "# node %s\n", agnameof(n)); - if (z < MinZ) - MinZ = z; - if (shapeOf(n) != SH_POINT) { - PNGfile = nodefile(job->output_filename, n); - - width = (ND_lw(n) + ND_rw(n)) * Scale + 2 * NODE_PAD; - height = (ND_ht(n) ) * Scale + 2 * NODE_PAD; - im = gdImageCreate(width, height); - - /* make background transparent */ - transparent = gdImageColorResolveAlpha(im, - gdRedMax - 1, gdGreenMax, - gdBlueMax, gdAlphaTransparent); - gdImageColorTransparent(im, transparent); - } -} - -static void vrml_end_node(GVJ_t *job) -{ - if (im) { - gdImagePng(im, PNGfile); - fclose(PNGfile); - gdImageDestroy(im); - im = NULL; - } -} - -static void vrml_begin_edge(GVJ_t *job) -{ - obj_state_t *obj = job->obj; - edge_t *e = obj->u.e; - - IsSegment = 0; - gvprintf(job, "# edge %s -> %s\n", agnameof(agtail(e)), agnameof(aghead(e))); - gvputs(job, " Group { children [\n"); -} - -static void -finishSegment (GVJ_t *job, edge_t *e) -{ - pointf p0 = gvrender_ptf(job, ND_coord(agtail(e))); - pointf p1 = gvrender_ptf(job, ND_coord(aghead(e))); - double o_x, o_y, o_z; - double x, y, y0, z, theta; - - o_x = ((double)(p0.x + p1.x))/2; - o_y = ((double)(p0.y + p1.y))/2; - o_z = (Fstz + Sndz)/2; - /* Compute rotation */ - /* Pick end point with highest y */ - if (p0.y > p1.y) { - x = p0.x; - y = p0.y; - z = Fstz; - } - else { - x = p1.x; - y = p1.y; - z = Sndz; - } - /* Translate center to the origin */ - x -= o_x; - y -= o_y; - z -= o_z; - if (p0.y > p1.y) - theta = acos(2*y/EdgeLen) + M_PI; - else - theta = acos(2*y/EdgeLen); - if (!x && !z) /* parallel to y-axis */ - x = 1; - - y0 = (HeadHt-TailHt)/2.0; - gvputs(job, " ]\n"); - gvprintf(job, " center 0 %.3f 0\n", y0); - gvprintf(job, " rotation %.3f 0 %.3f %.3f\n", -z, x, -theta); - gvprintf(job, " translation %.3f %.3f %.3f\n", o_x, o_y - y0, o_z); - gvputs(job, " }\n"); -} - -static void vrml_end_edge(GVJ_t *job) -{ - if (IsSegment) - finishSegment(job, job->obj->u.e); - gvputs(job, "] }\n"); -} - -extern void gdgen_text(gdImagePtr im, pointf spf, pointf epf, int fontcolor, double fontsize, int fontdpi, double fontangle, char *fontname, char *str); - -static void vrml_textspan(GVJ_t *job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - pointf spf, epf, q; - - if (! obj->u.n || ! im) /* if not a node - or if no im (e.g. for cluster) */ - return; - - switch (span->just) { - case 'l': - break; - case 'r': - p.x -= span->size.x; - break; - default: - case 'n': - p.x -= span->size.x / 2; - break; - } - q.x = p.x + span->size.x; - q.y = p.y; - - spf = vrml_node_point(job, obj->u.n, p); - epf = vrml_node_point(job, obj->u.n, q); - - gdgen_text(im, spf, epf, - color_index(im, obj->pencolor), - span->font->size, - DEFAULT_DPI, - job->rotation ? (M_PI / 2) : 0, - span->font->name, - span->str); -} - -/* interpolate_zcoord: - * Given 2 points in 3D p = (fst.x,fst.y,fstz) and q = (snd.x, snd.y, sndz), - * and a point p1 in the xy plane lying on the line segment connecting - * the projections of the p and q, find the z coordinate of p1 when it - * is projected up onto the segment (p,q) in 3-space. - * - * Why the special case for ranks? Is the arithmetic really correct? - */ -static double -interpolate_zcoord(GVJ_t *job, pointf p1, pointf fst, double fstz, pointf snd, double sndz) -{ - obj_state_t *obj = job->obj; - edge_t *e = obj->u.e; - double len, d, rv; - - if (fstz == sndz) - return fstz; - if (ND_rank(agtail(e)) != ND_rank(aghead(e))) { - if (snd.y == fst.y) - rv = (fstz + sndz) / 2.0; - else - rv = fstz + (sndz - fstz) * (p1.y - fst.y) / (snd.y - fst.y); - } - else { - len = DIST(fst, snd); - d = DIST(p1, fst)/len; - rv = fstz + d*(sndz - fstz); - } - return rv; -} - -/* collinear: - * Return true if the 3 points starting at A are collinear. - */ -static int -collinear (pointf * A) -{ - double w; - - w = wind(A[0],A[1],A[2]); - return (fabs(w) <= 1); -} - -/* straight: - * Return true if bezier points are collinear - * At present, just check with 4 points, the common case. - */ -static int -straight (pointf * A, int n) -{ - if (n != 4) return 0; - return (collinear(A) && collinear(A+1)); -} - -static void -doSegment (GVJ_t *job, pointf* A, pointf p0, double z0, pointf p1, double z1) -{ - obj_state_t *obj = job->obj; - double d1, d0; - double delx, dely, delz; - - delx = p0.x - p1.x; - dely = p0.y - p1.y; - delz = z0 - z1; - EdgeLen = sqrt(delx*delx + dely*dely + delz*delz); - d0 = DIST(A[0],p0); - d1 = DIST(A[3],p1); - CylHt = EdgeLen - d0 - d1; - TailHt = HeadHt = 0; - - IsSegment = 1; - gvputs(job, "Transform {\n"); - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvputs(job, " geometry Cylinder {\n"); - gvputs(job, " bottom FALSE top FALSE\n"); - gvprintf(job, " height %.3f radius %.3f }\n", CylHt, obj->penwidth); - gvputs(job, " appearance Appearance {\n"); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvprintf(job, " diffuseColor %.3f %.3f %.3f\n", - obj->pencolor.u.rgba[0] / 255., - obj->pencolor.u.rgba[1] / 255., - obj->pencolor.u.rgba[2] / 255.); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " }\n"); -} - -/* nearTail: - * Given a point a and edge e, return true if a is closer to the - * tail of e than the head. - */ -static int -nearTail (GVJ_t* job, pointf a, Agedge_t* e) -{ - pointf tp = gvrender_ptf(job, ND_coord(agtail(e))); - pointf hp = gvrender_ptf(job, ND_coord(aghead(e))); - - return (DIST2(a, tp) < DIST2(a, hp)); -} - - /* this is gruesome, but how else can we get z coord */ -#define GETZ(jp,op,p,e) (nearTail(jp,p,e)?op->tail_z:op->head_z) - -static void -vrml_bezier(GVJ_t *job, pointf * A, int n, int arrow_at_start, int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - edge_t *e = obj->u.e; - double fstz, sndz; - pointf p1, V[4]; - int i, j, step; - - assert(e); - - fstz = Fstz = obj->tail_z; - sndz = Sndz = obj->head_z; - if (straight(A,n)) { - doSegment (job, A, gvrender_ptf(job, ND_coord(agtail(e))),Fstz,gvrender_ptf(job, ND_coord(aghead(e))),Sndz); - return; - } - - gvputs(job, "Shape { geometry Extrusion {\n"); - gvputs(job, " spine ["); - V[3] = A[0]; - for (i = 0; i + 3 < n; i += 3) { - V[0] = V[3]; - for (j = 1; j <= 3; j++) - V[j] = A[i + j]; - for (step = 0; step <= BEZIERSUBDIVISION; step++) { - p1 = Bezier(V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL); - gvprintf(job, " %.3f %.3f %.3f", p1.x, p1.y, - interpolate_zcoord(job, p1, A[0], fstz, A[n - 1], sndz)); - } - } - gvputs(job, " ]\n"); - gvprintf(job, " crossSection [ %.3f %.3f, %.3f %.3f, %.3f %.3f, %.3f %.3f ]\n", - (obj->penwidth), (obj->penwidth), -(obj->penwidth), - (obj->penwidth), -(obj->penwidth), -(obj->penwidth), - (obj->penwidth), -(obj->penwidth)); - gvputs(job, "}\n"); - gvprintf(job, " appearance DEF E%ld Appearance {\n", AGSEQ(e)); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvprintf(job, " diffuseColor %.3f %.3f %.3f\n", - obj->pencolor.u.rgba[0] / 255., - obj->pencolor.u.rgba[1] / 255., - obj->pencolor.u.rgba[2] / 255.); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, "}\n"); -} - -/* doArrowhead: - * If edge is straight, we attach a cone to the edge as a group. - */ -static void doArrowhead (GVJ_t *job, pointf * A) -{ - obj_state_t *obj = job->obj; - edge_t *e = obj->u.e; - double rad, ht, y; - pointf p0; /* center of triangle base */ - - p0.x = (A[0].x + A[2].x)/2.0; - p0.y = (A[0].y + A[2].y)/2.0; - rad = DIST(A[0],A[2])/2.0; - ht = DIST(p0,A[1]); - - y = (CylHt + ht)/2.0; - - gvputs(job, "Transform {\n"); - if (nearTail (job, A[1], e)) { - TailHt = ht; - gvprintf(job, " translation 0 %.3f 0\n", -y); - gvprintf(job, " rotation 0 0 1 %.3f\n", M_PI); - } - else { - HeadHt = ht; - gvprintf(job, " translation 0 %.3f 0\n", y); - } - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvprintf(job, " geometry Cone {bottomRadius %.3f height %.3f }\n", - rad, ht); - gvputs(job, " appearance Appearance {\n"); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvprintf(job, " diffuseColor %.3f %.3f %.3f\n", - obj->pencolor.u.rgba[0] / 255., - obj->pencolor.u.rgba[1] / 255., - obj->pencolor.u.rgba[2] / 255.); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, "}\n"); -} - -static void vrml_polygon(GVJ_t *job, pointf * A, int np, int filled) -{ - obj_state_t *obj = job->obj; - node_t *n; - edge_t *e; - double z = obj->z; - pointf p, mp; - gdPoint *points; - int i, pen; - gdImagePtr brush = NULL; - double theta; - - switch (obj->type) { - case ROOTGRAPH_OBJTYPE: - gvprintf(job, " Background { skyColor %.3f %.3f %.3f }\n", - obj->fillcolor.u.rgba[0] / 255., - obj->fillcolor.u.rgba[1] / 255., - obj->fillcolor.u.rgba[2] / 255.); - Saw_skycolor = TRUE; - break; - case CLUSTER_OBJTYPE: - break; - case NODE_OBJTYPE: - n = obj->u.n; - pen = set_penstyle(job, im, brush); - points = N_GGNEW(np, gdPoint); - for (i = 0; i < np; i++) { - mp = vrml_node_point(job, n, A[i]); - points[i].x = ROUND(mp.x); - points[i].y = ROUND(mp.y); - } - if (filled) - gdImageFilledPolygon(im, points, np, color_index(im, obj->fillcolor)); - gdImagePolygon(im, points, np, pen); - free(points); - if (brush) - gdImageDestroy(brush); - - gvputs(job, "Shape {\n"); - gvputs(job, " appearance Appearance {\n"); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvputs(job, " diffuseColor 1 1 1\n"); - gvputs(job, " }\n"); - gvprintf(job, " texture ImageTexture { url \"node%ld.png\" }\n", AGSEQ(n)); - gvputs(job, " }\n"); - gvputs(job, " geometry Extrusion {\n"); - gvputs(job, " crossSection ["); - for (i = 0; i < np; i++) { - p.x = A[i].x - ND_coord(n).x; - p.y = A[i].y - ND_coord(n).y; - gvprintf(job, " %.3f %.3f,", p.x, p.y); - } - p.x = A[0].x - ND_coord(n).x; - p.y = A[0].y - ND_coord(n).y; - gvprintf(job, " %.3f %.3f ]\n", p.x, p.y); - gvprintf(job, " spine [ %.5g %.5g %.5g, %.5g %.5g %.5g ]\n", - ND_coord(n).x, ND_coord(n).y, z - .01, - ND_coord(n).x, ND_coord(n).y, z + .01); - gvputs(job, " }\n"); - gvputs(job, "}\n"); - break; - case EDGE_OBJTYPE: - e = obj->u.e; - if (np != 3) { - static int flag; - if (!flag) { - flag++; - agerr(AGWARN, - "vrml_polygon: non-triangle arrowheads not supported - ignoring\n"); - } - } - if (IsSegment) { - doArrowhead (job, A); - return; - } - p.x = p.y = 0.0; - for (i = 0; i < np; i++) { - p.x += A[i].x; - p.y += A[i].y; - } - p.x = p.x / np; - p.y = p.y / np; - - /* it is bad to know that A[1] is the aiming point, but we do */ - theta = - atan2((A[0].y + A[2].y) / 2.0 - A[1].y, - (A[0].x + A[2].x) / 2.0 - A[1].x) + M_PI / 2.0; - - z = GETZ(job,obj,p,e); - - /* FIXME: arrow vector ought to follow z coord of bezier */ - gvputs(job, "Transform {\n"); - gvprintf(job, " translation %.3f %.3f %.3f\n", p.x, p.y, z); - gvputs(job, " children [\n"); - gvputs(job, " Transform {\n"); - gvprintf(job, " rotation 0 0 1 %.3f\n", theta); - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvprintf(job, " geometry Cone {bottomRadius %.3f height %.3f }\n", - obj->penwidth * 2.5, obj->penwidth * 10.0); - gvprintf(job, " appearance USE E%ld\n", AGSEQ(e)); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, "}\n"); - break; - } -} - -/* doSphere: - * Output sphere in VRML for point nodes. - */ -static void -doSphere (GVJ_t *job, node_t *n, pointf p, double z, double rx, double ry) -{ - obj_state_t *obj = job->obj; - -// if (!(strcmp(cstk[SP].fillcolor, "transparent"))) { -// return; -// } - - gvputs(job, "Transform {\n"); - gvprintf(job, " translation %.3f %.3f %.3f\n", p.x, p.y, z); - gvprintf(job, " scale %.3f %.3f %.3f\n", rx, rx, rx); - gvputs(job, " children [\n"); - gvputs(job, " Transform {\n"); - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvputs(job, " geometry Sphere { radius 1.0 }\n"); - gvputs(job, " appearance Appearance {\n"); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvprintf(job, " diffuseColor %.3f %.3f %.3f\n", - obj->pencolor.u.rgba[0] / 255., - obj->pencolor.u.rgba[1] / 255., - obj->pencolor.u.rgba[2] / 255.); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, "}\n"); -} - -static void vrml_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - node_t *n; - edge_t *e; - double z = obj->z; - double rx, ry; - int dx, dy; - pointf npf, nqf; - point np; - int pen; - gdImagePtr brush = NULL; - - rx = A[1].x - A[0].x; - ry = A[1].y - A[0].y; - - switch (obj->type) { - case ROOTGRAPH_OBJTYPE: - case CLUSTER_OBJTYPE: - break; - case NODE_OBJTYPE: - n = obj->u.n; - if (shapeOf(n) == SH_POINT) { - doSphere (job, n, A[0], z, rx, ry); - return; - } - pen = set_penstyle(job, im, brush); - - npf = vrml_node_point(job, n, A[0]); - nqf = vrml_node_point(job, n, A[1]); - - dx = ROUND(2 * (nqf.x - npf.x)); - dy = ROUND(2 * (nqf.y - npf.y)); - - PF2P(npf, np); - - if (filled) - gdImageFilledEllipse(im, np.x, np.y, dx, dy, color_index(im, obj->fillcolor)); - gdImageArc(im, np.x, np.y, dx, dy, 0, 360, pen); - - if (brush) - gdImageDestroy(brush); - - gvputs(job, "Transform {\n"); - gvprintf(job, " translation %.3f %.3f %.3f\n", A[0].x, A[0].y, z); - gvprintf(job, " scale %.3f %.3f 1\n", rx, ry); - gvputs(job, " children [\n"); - gvputs(job, " Transform {\n"); - gvputs(job, " rotation 1 0 0 1.57\n"); - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvputs(job, " geometry Cylinder { side FALSE }\n"); - gvputs(job, " appearance Appearance {\n"); - gvputs(job, " material Material {\n"); - gvputs(job, " ambientIntensity 0.33\n"); - gvputs(job, " diffuseColor 1 1 1\n"); - gvputs(job, " }\n"); - gvprintf(job, " texture ImageTexture { url \"node%ld.png\" }\n", AGSEQ(n)); - gvputs(job, " }\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, "}\n"); - break; - case EDGE_OBJTYPE: - e = obj->u.e; - z = GETZ(job,obj,A[0],e); - - gvputs(job, "Transform {\n"); - gvprintf(job, " translation %.3f %.3f %.3f\n", A[0].x, A[0].y, z); - gvputs(job, " children [\n"); - gvputs(job, " Shape {\n"); - gvprintf(job, " geometry Sphere {radius %.3f }\n", (double) rx); - gvprintf(job, " appearance USE E%d\n", AGSEQ(e)); - gvputs(job, " }\n"); - gvputs(job, " ]\n"); - gvputs(job, "}\n"); - } -} - -static gvrender_engine_t vrml_engine = { - 0, /* vrml_begin_job */ - 0, /* vrml_end_job */ - 0, /* vrml_begin_graph */ - 0, /* vrml_end_graph */ - 0, /* vrml_begin_layer */ - 0, /* vrml_end_layer */ - vrml_begin_page, - vrml_end_page, - 0, /* vrml_begin_cluster */ - 0, /* vrml_end_cluster */ - 0, /* vrml_begin_nodes */ - 0, /* vrml_end_nodes */ - 0, /* vrml_begin_edges */ - 0, /* vrml_end_edges */ - vrml_begin_node, - vrml_end_node, - vrml_begin_edge, - vrml_end_edge, - 0, /* vrml_begin_anchor */ - 0, /* vrml_end_anchor */ - 0, /* vrml_begin_label */ - 0, /* vrml_end_label */ - vrml_textspan, - 0, /* vrml_resolve_color */ - vrml_ellipse, - vrml_polygon, - vrml_bezier, - 0, /* vrml_polyline - FIXME */ - 0, /* vrml_comment */ - 0, /* vrml_library_shape */ -}; - -static gvrender_features_t render_features_vrml = { - GVRENDER_DOES_Z, /* flags */ - 0., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -static gvdevice_features_t device_features_vrml = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_NO_WRITER, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; -#endif /* HAVE_GD_PNG */ -#endif /* HAVE_LIBGD */ - -gvplugin_installed_t gvrender_vrml_types[] = { -#ifdef HAVE_LIBGD -#ifdef HAVE_GD_PNG - {FORMAT_VRML, "vrml", 1, &vrml_engine, &render_features_vrml}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_vrml_types[] = { -#ifdef HAVE_LIBGD -#ifdef HAVE_GD_PNG - {FORMAT_VRML, "vrml:vrml", 1, NULL, &device_features_vrml}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gd/gvtextlayout_gd.c b/internal/plugin/gd/gvtextlayout_gd.c deleted file mode 100644 index 93d4fe4..0000000 --- a/internal/plugin/gd/gvtextlayout_gd.c +++ /dev/null @@ -1,207 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include "gvplugin_textlayout.h" - -#ifdef HAVE_LIBGD -#include "gd.h" - -#if defined(HAVE_LIBGD) && defined(HAVE_GD_FREETYPE) - -/* fontsize at which text is omitted entirely */ -#define FONTSIZE_MUCH_TOO_SMALL 0.15 -/* fontsize at which text is rendered by a simple line */ -#define FONTSIZE_TOO_SMALL 1.5 - -#ifndef HAVE_GD_FONTCONFIG -/* gd_alternate_fontlist; - * Sometimes fonts are stored under a different name, - * especially on Windows. Without fontconfig, we provide - * here some rudimentary name mapping. - */ -char *gd_alternate_fontlist(char *font) -{ - static char *fontbuf; - static int fontbufsz; - char *p, *fontlist; - int len; - - len = strlen(font) + 1; - if (len > fontbufsz) { - fontbufsz = 2 * len; - if (fontbuf == NULL) - fontbuf = malloc(fontbufsz); - else - fontbuf = realloc(fontbuf, fontbufsz); - } - - /* fontbuf to contain font without style descriptions like -Roman or -Italic */ - strcpy(fontbuf, font); - if ((p = strchr(fontbuf, '-')) || (p = strchr(fontbuf, '_'))) - *p = 0; - - fontlist = fontbuf; - if ((strcasecmp(font, "times-bold") == 0) - || (strcasecmp(fontbuf, "timesbd") == 0) - || (strcasecmp(fontbuf, "timesb") == 0)) - fontlist = "timesbd;Timesbd;TIMESBD;timesb;Timesb;TIMESB"; - - else if ((strcasecmp(font, "times-italic") == 0) - || (strcasecmp(fontbuf, "timesi") == 0)) - fontlist = "timesi;Timesi;TIMESI"; - - else if ((strcasecmp(font, "timesnewroman") == 0) - || (strcasecmp(font, "timesnew") == 0) - || (strcasecmp(font, "timesroman") == 0) - || (strcasecmp(fontbuf, "times") == 0)) - fontlist = "times;Times;TIMES"; - - else if ((strcasecmp(font, "arial-bold") == 0) - || (strcasecmp(fontbuf, "arialb") == 0)) - fontlist = "arialb;Arialb;ARIALB"; - - else if ((strcasecmp(font, "arial-italic") == 0) - || (strcasecmp(fontbuf, "ariali") == 0)) - fontlist = "ariali;Ariali;ARIALI"; - - else if (strcasecmp(fontbuf, "helvetica") == 0) - fontlist = "helvetica;Helvetica;HELVETICA;arial;Arial;ARIAL"; - - else if (strcasecmp(fontbuf, "arial") == 0) - fontlist = "arial;Arial;ARIAL"; - - else if (strcasecmp(fontbuf, "courier") == 0) - fontlist = "courier;Courier;COURIER;cour"; - - return fontlist; -} -#endif /* HAVE_GD_FONTCONFIG */ - -/* gd_psfontResolve: - * * Construct alias for postscript fontname. - * * NB. Uses a static array - non-reentrant. - * */ - -#define ADD_ATTR(a) \ - if (a) { \ - strcat(buf, comma ? " " : ", "); \ - comma = 1; \ - strcat(buf, a); \ - } - -char* gd_psfontResolve (PostscriptAlias* pa) -{ - static char buf[1024]; - int comma=0; - strcpy(buf, pa->family); - - ADD_ATTR(pa->weight); - ADD_ATTR(pa->stretch); - ADD_ATTR(pa->style); - - return buf; -} - -static boolean gd_textlayout(textspan_t * span, char **fontpath) -{ - char *err, *fontlist, *fontname; - double fontsize; - int brect[8]; - gdFTStringExtra strex; -#ifdef HAVE_GD_FONTCONFIG - PostscriptAlias *pA; -#endif - - fontname = span->font->name; - fontsize = span->font->size; - - strex.fontpath = NULL; - strex.flags = gdFTEX_RETURNFONTPATHNAME | gdFTEX_RESOLUTION; - strex.hdpi = strex.vdpi = POINTS_PER_INCH; - - if (strstr(fontname, "/")) - strex.flags |= gdFTEX_FONTPATHNAME; - else - strex.flags |= gdFTEX_FONTCONFIG; - - span->size.x = 0.0; - span->size.y = 0.0; - span->yoffset_layout = 0.0; - - span->layout = NULL; - span->free_layout = NULL; - - span->yoffset_centerline = 0.1 * fontsize; - - if (fontname) { - if (fontsize <= FONTSIZE_MUCH_TOO_SMALL) { - return TRUE; /* OK, but ignore text entirely */ - } else if (fontsize <= FONTSIZE_TOO_SMALL) { - /* draw line in place of text */ - /* fake a finite fontsize so that line length is calculated */ - fontsize = FONTSIZE_TOO_SMALL; - } - /* call gdImageStringFT with null *im to get brect and to set font cache */ -#ifdef HAVE_GD_FONTCONFIG - gdFTUseFontConfig(1); /* tell gd that we really want to use fontconfig, 'cos it s not the default */ - pA = span->font->postscript_alias; - if (pA) - fontlist = gd_psfontResolve (pA); - else - fontlist = fontname; -#else - fontlist = gd_alternate_fontlist(fontname); -#endif - - err = gdImageStringFTEx(NULL, brect, -1, fontlist, - fontsize, 0, 0, 0, span->str, &strex); - - if (err) { - agerr(AGERR,"%s\n", err); - return FALSE; /* indicate error */ - } - - if (fontpath) - *fontpath = strex.fontpath; - else - free (strex.fontpath); /* strup'ed in libgd */ - - if (span->str && span->str[0]) { - /* can't use brect on some archtectures if strlen 0 */ - span->size.x = (double) (brect[4] - brect[0]); - /* 1.2 specifies how much extra space to leave between lines; - * see LINESPACING in const.h. - */ - span->size.y = (int)(fontsize * 1.2); - } - } - return TRUE; -} - -static gvtextlayout_engine_t gd_textlayout_engine = { - gd_textlayout, -}; -#endif -#endif - -gvplugin_installed_t gvtextlayout_gd_types[] = { -#if defined(HAVE_LIBGD) && defined(HAVE_GD_FREETYPE) - {0, "textlayout", 2, &gd_textlayout_engine, NULL}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdiplus/FileStream.cpp b/internal/plugin/gdiplus/FileStream.cpp deleted file mode 100644 index 794f878..0000000 --- a/internal/plugin/gdiplus/FileStream.cpp +++ /dev/null @@ -1,225 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "FileStream.h" -#include "gvplugin_device.h" - -#include "gvplugin_gdiplus.h" - - - -IStream *FileStream::Create(char *name, FILE *file) -{ - return new FileStream(name, file); -} - -/* IUnknown methods */ - -HRESULT FileStream::QueryInterface( - REFIID riid, - void **ppvObject) -{ - if (riid == IID_IUnknown) - { - *ppvObject = (IUnknown*)this; - ++_ref; - return S_OK; - } - else if (riid == IID_ISequentialStream) - { - *ppvObject = (ISequentialStream*)this; - ++_ref; - return S_OK; - } - else if (riid == IID_IStream) - { - *ppvObject = (IStream*)this; - ++_ref; - return S_OK; - } - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } -} - -ULONG FileStream::AddRef() -{ - return ++_ref; -} - -ULONG FileStream::Release() -{ - ULONG ref = --_ref; - if (ref == 0) - delete this; - return ref; -} - -/* ISequentialStream methods */ - -HRESULT FileStream::Read( - void *pv, - ULONG cb, - ULONG *pcbRead) -{ - ULONG read = fread(pv, 1, cb, _file); - if (pcbRead) - *pcbRead = read; - return S_OK; -} - -HRESULT FileStream::Write( - const void *pv, - ULONG cb, - ULONG *pcbWritten) -{ - ULONG written = fwrite(pv, 1, cb, _file); - if (pcbWritten) - *pcbWritten = written; - return S_OK; -} - -/* IStream methods */ - -HRESULT FileStream::Seek( - LARGE_INTEGER dlibMove, - DWORD dwOrigin, - ULARGE_INTEGER *plibNewPosition) -{ - long whence; - switch (dwOrigin) - { - case STREAM_SEEK_SET: - default: - whence = SEEK_SET; - break; - case STREAM_SEEK_CUR: - whence = SEEK_CUR; - break; - case STREAM_SEEK_END: - whence = SEEK_END; - break; - } - if (dlibMove.HighPart > 0 || fseek(_file, dlibMove.LowPart, whence) != 0) - return S_FALSE; - if (plibNewPosition) - { - long pos = ftell(_file); - if (pos == -1L) - return S_FALSE; - - plibNewPosition->HighPart = 0; - plibNewPosition->LowPart = pos; - } - - return S_OK; -} - -HRESULT FileStream::SetSize( - ULARGE_INTEGER libNewSize) -{ - return E_NOTIMPL; -} - -HRESULT FileStream::CopyTo( - IStream *pstm, - ULARGE_INTEGER cb, - ULARGE_INTEGER *pcbRead, - ULARGE_INTEGER *pcbWritten) -{ - return E_NOTIMPL; -} - -HRESULT FileStream::Commit( - DWORD grfCommitFlags) -{ - return E_NOTIMPL; -} - -HRESULT FileStream::Revert() -{ - return 0; -} - -HRESULT FileStream::LockRegion( - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - return E_NOTIMPL; -} - -HRESULT FileStream::UnlockRegion( - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - return E_NOTIMPL; -} - -HRESULT FileStream::Stat( - STATSTG *pstatstg, - DWORD grfStatFlag) -{ - /* call UNIX fstat on underlying descriptor */ - struct _stat file_stat; - if (_fstat(_fileno(_file), &file_stat) != 0) - return S_FALSE; - - /* fill in filename, if needed */ - if (grfStatFlag != STATFLAG_NONAME) - { - int wide_count = MultiByteToWideChar(CP_UTF8, 0, _name, -1, NULL, 0); - if (wide_count > 0) - { - pstatstg->pwcsName = (LPOLESTR)CoTaskMemAlloc(wide_count * 2); - MultiByteToWideChar(CP_UTF8, 0, _name, -1, pstatstg->pwcsName, wide_count); - } - else - pstatstg->pwcsName = NULL; - } - - /* fill out rest of STATSTG */ - pstatstg->type = STGTY_STREAM; - pstatstg->cbSize.QuadPart = file_stat.st_size; - UnixTimeToFileTime(file_stat.st_mtime, pstatstg->mtime); - UnixTimeToFileTime(file_stat.st_ctime, pstatstg->ctime); - UnixTimeToFileTime(file_stat.st_atime, pstatstg->atime); - pstatstg->grfLocksSupported = 0; - pstatstg->grfMode = STGM_READWRITE; - pstatstg->clsid = CLSID_NULL; - pstatstg->grfStateBits = 0; - pstatstg->reserved = 0; - - return S_OK; -} - -HRESULT FileStream::Clone( - IStream **ppstm) -{ - return E_NOTIMPL; -} - -FileStream::FileStream(char *name, FILE *file): _ref(1), _name(name), _file(file) -{ -} - -void FileStream::UnixTimeToFileTime(time_t unixTime, FILETIME &fileTime) -{ - /* convert Unix time (seconds since 1/1/1970) to Windows filetime (100 nanoseconds since 1/1/1601) */ - LONGLONG ft = (LONGLONG)unixTime * 10000000LL + 116444736000000000LL; - fileTime.dwLowDateTime = (DWORD)ft; - fileTime.dwHighDateTime = ft >> 32; -} diff --git a/internal/plugin/gdiplus/FileStream.h b/internal/plugin/gdiplus/FileStream.h deleted file mode 100644 index 5564017..0000000 --- a/internal/plugin/gdiplus/FileStream.h +++ /dev/null @@ -1,99 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GV_FILESTREAM_H -#define GV_FILESTREAM_H - -#include -#include -#include - - - -class FileStream : public IStream -{ -public: - static IStream *Create(char* name, FILE *file); - - /* IUnknown methods */ - - virtual HRESULT STDMETHODCALLTYPE QueryInterface( - REFIID riid, - void **ppvObject); - - virtual ULONG STDMETHODCALLTYPE AddRef(); - - virtual ULONG STDMETHODCALLTYPE Release(); - - /* ISequentialStream methods */ - - virtual HRESULT STDMETHODCALLTYPE Read( - void *pv, - ULONG cb, - ULONG *pcbRead); - - virtual HRESULT STDMETHODCALLTYPE Write( - const void *pv, - ULONG cb, - ULONG *pcbWritten); - - /* IStream methods */ - - virtual HRESULT STDMETHODCALLTYPE Seek( - LARGE_INTEGER dlibMove, - DWORD dwOrigin, - ULARGE_INTEGER *plibNewPosition); - - virtual HRESULT STDMETHODCALLTYPE SetSize( - ULARGE_INTEGER libNewSize); - - virtual HRESULT STDMETHODCALLTYPE CopyTo( - IStream *pstm, - ULARGE_INTEGER cb, - ULARGE_INTEGER *pcbRead, - ULARGE_INTEGER *pcbWritten); - - virtual HRESULT STDMETHODCALLTYPE Commit( - DWORD grfCommitFlags); - - virtual HRESULT STDMETHODCALLTYPE Revert(); - - virtual HRESULT STDMETHODCALLTYPE LockRegion( - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType); - - virtual HRESULT STDMETHODCALLTYPE UnlockRegion( - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType); - - virtual HRESULT STDMETHODCALLTYPE Stat( - STATSTG *pstatstg, - DWORD grfStatFlag); - - virtual HRESULT STDMETHODCALLTYPE Clone( - IStream **ppstm); - -private: - FileStream(char *name, FILE *file); - - static void UnixTimeToFileTime(time_t unixTime, FILETIME &fileTime); - - ULONG _ref; - char *_name; - FILE *_file; - -}; - -#endif diff --git a/internal/plugin/gdiplus/dummy.go b/internal/plugin/gdiplus/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/gdiplus/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/gdiplus/gvdevice_gdiplus.cpp b/internal/plugin/gdiplus/gvdevice_gdiplus.cpp deleted file mode 100755 index 942f78d..0000000 --- a/internal/plugin/gdiplus/gvdevice_gdiplus.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - - -#include "gvplugin_device.h" -#include "gvplugin_render.h" -#include "gvplugin_gdiplus.h" - -extern "C" size_t gvwrite(GVJ_t *job, const unsigned char *s, unsigned int len); - - - - - - - -using namespace Gdiplus; - -static void gdiplus_format(GVJ_t *job) -{ - UseGdiplus(); - - /* allocate memory and attach stream to it */ - HGLOBAL buffer = GlobalAlloc(GMEM_MOVEABLE, 0); - IStream *stream = NULL; - CreateStreamOnHGlobal(buffer, FALSE, &stream); /* FALSE means don't deallocate buffer when releasing stream */ - - Bitmap bitmap( - job->width, /* width in pixels */ - job->height, /* height in pixels */ - job->width * BYTES_PER_PIXEL, /* bytes per row: exactly width # of pixels */ - PixelFormat32bppPARGB, /* pixel format: corresponds to CAIRO_FORMAT_ARGB32 */ - (BYTE*)job->imagedata); /* pixel data from job */ - SaveBitmapToStream(bitmap, stream, job->device.id); - - /* blast the streamed buffer back to the gvdevice */ - /* NOTE: this is somewhat inefficient since we should be streaming directly to gvdevice rather than buffering first */ - /* ... however, GDI+ requires any such direct IStream to implement Seek Read, Write, Stat methods and gvdevice really only offers a write-once model */ - stream->Release(); - gvwrite(job, (const unsigned char*)GlobalLock(buffer), GlobalSize(buffer)); - - GlobalFree(buffer); -} - -static gvdevice_engine_t gdiplus_engine = { - NULL, /* gdiplus_initialize */ - gdiplus_format, - NULL, /* gdiplus_finalize */ -}; - -static gvdevice_features_t device_features_gdiplus = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -gvplugin_installed_t gvdevice_gdiplus_types_for_cairo[] = { - {FORMAT_BMP, "bmp:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_GIF, "gif:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_JPEG, "jpe:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_JPEG, "jpeg:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_JPEG, "jpg:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_PNG, "png:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_TIFF, "tif:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {FORMAT_TIFF, "tiff:cairo", 8, &gdiplus_engine, &device_features_gdiplus}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdiplus/gvloadimage_gdiplus.cpp b/internal/plugin/gdiplus/gvloadimage_gdiplus.cpp deleted file mode 100755 index ffba120..0000000 --- a/internal/plugin/gdiplus/gvloadimage_gdiplus.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "gvplugin_loadimage.h" -#include "gvplugin_gdiplus.h" - -#include -#include "GdiPlus.h" - -#include "FileStream.h" - -using namespace Gdiplus; - -static void gdiplus_freeimage(usershape_t *us) -{ - delete (Image*)us->data; -} - -static Image* gdiplus_loadimage(GVJ_t * job, usershape_t *us) -{ - assert(job); - assert(us); - assert(us->name); - - if (us->data && us->datafree != gdiplus_freeimage) { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - } - - if (!us->data) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - - /* create image from the usershape file */ - /* NOTE: since Image::FromStream consumes the stream, we assume FileStream's lifetime should be shorter than us->name and us->f... */ - IStream *stream = FileStream::Create((char*)us->name, us->f); - us->data = Image::FromStream (stream); - - /* clean up */ - if (us->data) - us->datafree = gdiplus_freeimage; - stream->Release(); - - gvusershape_file_release(us); - } - return (Image *)(us->data); -} - -static void gdiplus_loadimage_gdiplus(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - /* get the image from usershape details, then blit it to the context */ - Image *image = gdiplus_loadimage(job, us); - if (image) - ((Graphics *)job->context)->DrawImage(image, RectF(b.LL.x, b.LL.y, b.UR.x - b.LL.x, b.UR.y - b.LL.y)); -} - -static gvloadimage_engine_t engine = { - gdiplus_loadimage_gdiplus -}; - -gvplugin_installed_t gvloadimage_gdiplus_types[] = { - {FORMAT_BMP, "bmp:gdiplus", 8, &engine, NULL}, - {FORMAT_GIF, "gif:gdiplus", 8, &engine, NULL}, - {FORMAT_JPEG, "jpe:gdiplus", 8, &engine, NULL}, - {FORMAT_JPEG, "jpeg:gdiplus", 8, &engine, NULL}, - {FORMAT_JPEG, "jpg:gdiplus", 8, &engine, NULL}, - {FORMAT_PNG, "png:gdiplus", 8, &engine, NULL}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdiplus/gvplugin_gdiplus.cpp b/internal/plugin/gdiplus/gvplugin_gdiplus.cpp deleted file mode 100755 index 6d65b92..0000000 --- a/internal/plugin/gdiplus/gvplugin_gdiplus.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -#include "gvplugin_gdiplus.h" - -extern gvplugin_installed_t gvrender_gdiplus_types[]; -extern gvplugin_installed_t gvtextlayout_gdiplus_types[]; -extern gvplugin_installed_t gvloadimage_gdiplus_types[]; -extern gvplugin_installed_t gvdevice_gdiplus_types[]; -extern gvplugin_installed_t gvdevice_gdiplus_types_for_cairo[]; - -using namespace std; -using namespace Gdiplus; - -/* class id corresponding to each format_type */ -static GUID format_id [] = { - GUID_NULL, - GUID_NULL, - ImageFormatBMP, - ImageFormatEMF, - ImageFormatEMF, - ImageFormatGIF, - ImageFormatJPEG, - ImageFormatPNG, - ImageFormatTIFF -}; - -static ULONG_PTR _gdiplusToken = NULL; - -static void UnuseGdiplus() -{ - GdiplusShutdown(_gdiplusToken); -} - -void UseGdiplus() -{ - /* only startup once, and ensure we get shutdown */ - if (!_gdiplusToken) - { - GdiplusStartupInput input; - GdiplusStartup(&_gdiplusToken, &input, NULL); - atexit(&UnuseGdiplus); - } -} - -const Gdiplus::StringFormat* GetGenericTypographic() -{ - const Gdiplus::StringFormat* format = StringFormat::GenericTypographic(); - return format; -} - -void SaveBitmapToStream(Bitmap &bitmap, IStream *stream, int format) -{ - /* search the encoders for one that matches our device id, then save the bitmap there */ - GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - UINT encoderNum; - UINT encoderSize; - GetImageEncodersSize(&encoderNum, &encoderSize); - vector codec_buffer(encoderSize); - ImageCodecInfo *codecs = (ImageCodecInfo *)&codec_buffer.front(); - GetImageEncoders(encoderNum, encoderSize, codecs); - for (UINT i = 0; i < encoderNum; ++i) - if (memcmp(&(format_id[format]), &codecs[i].FormatID, sizeof(GUID)) == 0) { - bitmap.Save(stream, &codecs[i].Clsid, NULL); - break; - } -} - -static gvplugin_api_t apis[] = { - {API_render, gvrender_gdiplus_types}, - {API_textlayout, gvtextlayout_gdiplus_types}, - {API_loadimage, gvloadimage_gdiplus_types}, - {API_device, gvdevice_gdiplus_types}, - {API_device, gvdevice_gdiplus_types_for_cairo}, - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL /*visual studio*/ -#ifndef GVPLUGIN_GDIPLUS_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_gdiplus_LTX_library = { "gdiplus", apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_gdiplus_LTX_library = { "gdiplus", apis }; -#endif -#else /*end visual studio*/ -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_gdiplus_LTX_library = { "gdiplus", apis }; -#else -extern "C" gvplugin_library_t gvplugin_gdiplus_LTX_library = { "gdiplus", apis }; -#endif -#endif - diff --git a/internal/plugin/gdiplus/gvplugin_gdiplus.h b/internal/plugin/gdiplus/gvplugin_gdiplus.h deleted file mode 100755 index 4a840b3..0000000 --- a/internal/plugin/gdiplus/gvplugin_gdiplus.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_GDIPLUS_H -#define GVPLUGIN_GDIPLUS_H - -#include - -#include -#include - -typedef enum { - FORMAT_NONE, - FORMAT_METAFILE, - FORMAT_BMP, - FORMAT_EMF, - FORMAT_EMFPLUS, - FORMAT_GIF, - FORMAT_JPEG, - FORMAT_PNG, - FORMAT_TIFF -} format_type; - -/* RAII for GetDC/ReleaseDC */ - -struct DeviceContext -{ - HWND hwnd; - HDC hdc; - - DeviceContext(HWND wnd = NULL): hwnd(wnd), hdc(GetDC(wnd)) - { - } - - ~DeviceContext() - { - ReleaseDC(hwnd, hdc); - } - -}; - -/* textlayout etc. */ - -struct Layout -{ - Gdiplus::Font* font; - std::vector text; - - Layout(char *fontname, double fontsize, char* string); - ~Layout(); -}; - -static const int BYTES_PER_PIXEL = 4; /* bytes per pixel */ - -void gdiplus_free_layout(void *layout); - -void UseGdiplus(); -const Gdiplus::StringFormat* GetGenericTypographic(); -void SaveBitmapToStream(Gdiplus::Bitmap &bitmap, IStream *stream, int format); - -#endif diff --git a/internal/plugin/gdiplus/gvrender_gdiplus.cpp b/internal/plugin/gdiplus/gvrender_gdiplus.cpp deleted file mode 100755 index 3732276..0000000 --- a/internal/plugin/gdiplus/gvrender_gdiplus.cpp +++ /dev/null @@ -1,353 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_device.h" -#include "gvplugin_render.h" -#include "gvplugin_gdiplus.h" - -#include -#include - -extern "C" size_t gvwrite(GVJ_t *job, const unsigned char *s, unsigned int len); - -using namespace std; -using namespace Gdiplus; - -/* Graphics for internal use, so that we can record image etc. for subsequent retrieval off the job struct */ -struct ImageGraphics: public Graphics -{ - Image *image; - IStream *stream; - - ImageGraphics(Image *newImage, IStream *newStream): - Graphics(newImage), image(newImage), stream(newStream) - { - } -}; - -static void gdiplusgen_begin_job(GVJ_t *job) -{ - UseGdiplus(); - if (!job->external_context) - job->context = NULL; - else if (job->device.id == FORMAT_METAFILE) - { - /* save the passed-in context in the window field, so we can create a Metafile in the context field later on */ - job->window = job->context; - *((Metafile**)job->window) = NULL; - job->context = NULL; -} -} - -static void gdiplusgen_end_job(GVJ_t *job) -{ - Graphics *context = (Graphics *)job->context; - - if (!job->external_context) { - /* flush and delete the graphics */ - ImageGraphics *imageGraphics = static_cast(context); - Image *image = imageGraphics->image; - IStream *stream = imageGraphics->stream; - delete imageGraphics; - - switch (job->device.id) { - case FORMAT_EMF: - case FORMAT_EMFPLUS: - case FORMAT_METAFILE: - break; - default: - SaveBitmapToStream(*static_cast(image), stream, job->device.id); - break; - } - - delete image; /* NOTE: in the case of EMF, this actually flushes out the image to the underlying stream */ - - /* blast the streamed buffer back to the gvdevice */ - /* NOTE: this is somewhat inefficient since we should be streaming directly to gvdevice rather than buffering first */ - /* ... however, GDI+ requires any such direct IStream to implement Seek Read, Write, Stat methods and gvdevice really only offers a write-once model */ - HGLOBAL buffer = NULL; - GetHGlobalFromStream(stream, &buffer); - stream->Release(); - gvwrite(job, (unsigned char*)GlobalLock(buffer), GlobalSize(buffer)); - GlobalFree(buffer); - } - else if (job->device.id == FORMAT_METAFILE) - delete context; -} - -static void gdiplusgen_begin_page(GVJ_t *job) -{ - if (!job->context) - { - if (!job->external_context) { - /* allocate memory and attach stream to it */ - HGLOBAL buffer = GlobalAlloc(GMEM_MOVEABLE, 0); - IStream *stream = NULL; - CreateStreamOnHGlobal(buffer, FALSE, &stream); /* FALSE means don't deallocate buffer when releasing stream */ - - Image *image; - switch (job->device.id) { - - case FORMAT_EMF: - case FORMAT_EMFPLUS: - /* EMF image */ - image = new Metafile (stream, - DeviceContext().hdc, - RectF(0.0f, 0.0f, job->width, job->height), - MetafileFrameUnitPixel, - job->device.id == FORMAT_EMFPLUS ? EmfTypeEmfPlusOnly : EmfTypeEmfPlusDual); - /* output in EMF for wider compatibility; output in EMF+ for antialiasing etc. */ - break; - - case FORMAT_METAFILE: - break; - - default: - /* bitmap image */ - image = new Bitmap (job->width, job->height, PixelFormat32bppARGB); - break; - } - - job->context = new ImageGraphics(image, stream); - } - else if (job->device.id == FORMAT_METAFILE) - { - /* create EMF image in the job window which was set during begin job */ - Metafile* metafile = new Metafile(DeviceContext().hdc, - RectF(0.0f, 0.0f, job->width, job->height), - MetafileFrameUnitPixel, - EmfTypeEmfPlusOnly); - *((Metafile**)job->window) = metafile; - job->context = new Graphics(metafile); - } - } - - /* start graphics state */ - Graphics *context = (Graphics *)job->context; - context->SetSmoothingMode(SmoothingModeHighQuality); - context->SetTextRenderingHint(TextRenderingHintAntiAlias); - - /* set up the context transformation */ - context->ResetTransform(); - - context->ScaleTransform(job->scale.x, job->scale.y); - context->RotateTransform(-job->rotation); - context->TranslateTransform(job->translation.x, -job->translation.y); -} - - - -static void gdiplusgen_textspan(GVJ_t *job, pointf p, textspan_t *span) -{ - Graphics* context = (Graphics*)job->context; - - /* adjust text position */ - switch (span->just) { - case 'r': - p.x -= span->size.x; - break; - case 'l': - p.x -= 0.0; - break; - case 'n': - default: - p.x -= span->size.x / 2.0; - break; - } - p.y += span->yoffset_centerline + span->yoffset_layout; - - Layout* layout; - if (span->free_layout == &gdiplus_free_layout) - layout = (Layout*)span->layout; - else - layout = new Layout(span->font->name, span->font->size, span->str); - - /* draw the text */ - SolidBrush brush(Color(job->obj->pencolor.u.rgba [3], job->obj->pencolor.u.rgba [0], job->obj->pencolor.u.rgba [1], job->obj->pencolor.u.rgba [2])); - context->DrawString(&layout->text[0], layout->text.size(), layout->font, PointF(p.x, -p.y), GetGenericTypographic(), &brush); - - if (span->free_layout != &gdiplus_free_layout) - delete layout; - - } - - -static vector points(pointf *A, int n) -{ - /* convert Graphviz pointf (struct of double) to GDI+ PointF (struct of float) */ - vector newPoints; - for (int i = 0; i < n; ++i) - newPoints.push_back(PointF(A[i].x, -A[i].y)); - return newPoints; -} - -static void gdiplusgen_path(GVJ_t *job, const GraphicsPath *path, int filled) -{ - Graphics *context = (Graphics *)job->context; - - /* fill the given path with job fill color */ - if (filled) { - SolidBrush fill_brush(Color(job->obj->fillcolor.u.rgba [3], job->obj->fillcolor.u.rgba [0], job->obj->fillcolor.u.rgba [1], job->obj->fillcolor.u.rgba [2])); - context->FillPath(&fill_brush, path); - } - - /* draw the given path from job pen color and pen width */ - Pen draw_pen(Color(job->obj->pencolor.u.rgba [3], job->obj->pencolor.u.rgba [0], job->obj->pencolor.u.rgba [1], job->obj->pencolor.u.rgba [2]), - job->obj->penwidth); - - /* - * Set line type - * See http://msdn.microsoft.com/en-us/library/ms535050%28v=vs.85%29.aspx - */ - switch (job->obj->pen) { - case PEN_NONE: - return; - case PEN_DASHED: - draw_pen.SetDashStyle(DashStyleDash); - break; - case PEN_DOTTED: - draw_pen.SetDashStyle(DashStyleDot); - break; - case PEN_SOLID: - break; - } - - context->DrawPath(&draw_pen, path); -} - -static void gdiplusgen_ellipse(GVJ_t *job, pointf *A, int filled) -{ - /* convert ellipse into path */ - GraphicsPath path; - double dx = A[1].x - A[0].x; - double dy = A[1].y - A[0].y; - path.AddEllipse(RectF(A[0].x - dx, -A[0].y - dy, dx * 2.0, dy * 2.0)); - - /* draw the path */ - gdiplusgen_path(job, &path, filled); -} - -static void gdiplusgen_polygon(GVJ_t *job, pointf *A, int n, int filled) -{ - /* convert polygon into path */ - GraphicsPath path; - path.AddPolygon(&points(A,n).front(), n); - - /* draw the path */ - gdiplusgen_path(job, &path, filled); -} - -static void -gdiplusgen_bezier(GVJ_t *job, pointf *A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - /* convert the beziers into path */ - GraphicsPath path; - path.AddBeziers(&points(A,n).front(), n); - - /* draw the path */ - gdiplusgen_path(job, &path, filled); -} - -static void gdiplusgen_polyline(GVJ_t *job, pointf *A, int n) -{ - /* convert the lines into path */ - GraphicsPath path; - path.AddLines(&points(A,n).front(), n); - - /* draw the path */ - gdiplusgen_path(job, &path, 0); -} - -static gvrender_engine_t gdiplusgen_engine = { - gdiplusgen_begin_job, - gdiplusgen_end_job, - 0, /* gdiplusgen_begin_graph */ - 0, /* gdiplusgen_end_graph */ - 0, /* gdiplusgen_begin_layer */ - 0, /* gdiplusgen_end_layer */ - gdiplusgen_begin_page, - 0, /* gdiplusgen_end_page */ - 0, /* gdiplusgen_begin_cluster */ - 0, /* gdiplusgen_end_cluster */ - 0, /* gdiplusgen_begin_nodes */ - 0, /* gdiplusgen_end_nodes */ - 0, /* gdiplusgen_begin_edges */ - 0, /* gdiplusgen_end_edges */ - 0, /* gdiplusgen_begin_node */ - 0, /* gdiplusgen_end_node */ - 0, /* gdiplusgen_begin_edge */ - 0, /* gdiplusgen_end_edge */ - 0, /* gdiplusgen_begin_anchor */ - 0, /* gdiplusgen_end_anchor */ - 0, /* gdiplusgen_begin_label */ - 0, /* gdiplusgen_end_label */ - gdiplusgen_textspan, - 0, - gdiplusgen_ellipse, - gdiplusgen_polygon, - gdiplusgen_bezier, - gdiplusgen_polyline, - 0, /* gdiplusgen_comment */ - 0, /* gdiplusgen_library_shape */ -}; - -static gvrender_features_t render_features_gdiplus = { - GVRENDER_Y_GOES_DOWN | GVRENDER_DOES_TRANSFORM, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE /* color_type */ -}; - -static gvdevice_features_t device_features_gdiplus_emf = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR - | GVRENDER_NO_WHITE_BG,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.} /* dpi */ -}; - -static gvdevice_features_t device_features_gdiplus = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.} /* dpi */ -}; - -gvplugin_installed_t gvrender_gdiplus_types[] = { - {0, "gdiplus", 1, &gdiplusgen_engine, &render_features_gdiplus}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_gdiplus_types[] = { - {FORMAT_METAFILE, "metafile:gdiplus", 8, NULL, &device_features_gdiplus_emf}, - {FORMAT_BMP, "bmp:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_EMF, "emf:gdiplus", 8, NULL, &device_features_gdiplus_emf}, - {FORMAT_EMFPLUS, "emfplus:gdiplus", 8, NULL, &device_features_gdiplus_emf}, - {FORMAT_GIF, "gif:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_JPEG, "jpe:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_JPEG, "jpeg:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_JPEG, "jpg:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_PNG, "png:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_TIFF, "tif:gdiplus", 8, NULL, &device_features_gdiplus}, - {FORMAT_TIFF, "tiff:gdiplus", 8, NULL, &device_features_gdiplus}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdiplus/gvtextlayout_gdiplus.cpp b/internal/plugin/gdiplus/gvtextlayout_gdiplus.cpp deleted file mode 100755 index 6e0d6da..0000000 --- a/internal/plugin/gdiplus/gvtextlayout_gdiplus.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_textlayout.h" -#include "gvplugin_gdiplus.h" - -static int count = 0; - -using namespace Gdiplus; - -static int CALLBACK fetch_first_font( - const LOGFONTA *logFont, - const TEXTMETRICA *textMetrics, - DWORD fontType, - LPARAM lParam) -{ - /* save the first font we see in the font enumeration */ - *((LOGFONTA *)lParam) = *logFont; - return 0; -} - -Layout::Layout(char *fontname, double fontsize, char* string) -{ - /* convert incoming UTF8 string to wide chars */ - /* NOTE: conversion is 1 or more UTF8 chars to 1 wide char */ - int len = strlen(string); - text.resize(len); - text.resize(MultiByteToWideChar(CP_UTF8, 0, string, len, &text[0], len)); - - /* search for a font with this name. if we can't find it, use the generic serif instead */ - /* NOTE: GDI font search is more comprehensive than GDI+ and will look for variants e.g. Arial Bold */ - DeviceContext reference; - LOGFONTA font_to_find; - font_to_find.lfCharSet = ANSI_CHARSET; - strncpy(font_to_find.lfFaceName, fontname, sizeof(font_to_find.lfFaceName) - 1); - font_to_find.lfFaceName[sizeof(font_to_find.lfFaceName) - 1] = '\0'; - font_to_find.lfPitchAndFamily = 0; - LOGFONTA found_font; - if (EnumFontFamiliesExA(reference.hdc, - &font_to_find, - fetch_first_font, - (LPARAM)&found_font, - 0) == 0) { - found_font.lfHeight = (LONG)-fontsize; - found_font.lfWidth = 0; - font = new Font(reference.hdc, &found_font); - } - else - font = new Font(FontFamily::GenericSerif(), fontsize); -} - -Layout::~Layout() -{ - delete font; -} - -void gdiplus_free_layout(void *layout) -{ - if (layout) - delete (Layout*)layout; -}; - -boolean gdiplus_textlayout(textspan_t *span, char **fontpath) -{ - /* ensure GDI+ is started up: since we get called outside of a job, we can't rely on GDI+ startup then */ - UseGdiplus(); - - Layout* layout = new Layout(span->font->name, span->font->size, span->str); - - /* measure the text */ - /* NOTE: use TextRenderingHintAntiAlias + GetGenericTypographic to get a layout without extra space at beginning and end */ - RectF boundingBox; - DeviceContext deviceContext; - Graphics measureGraphics(deviceContext.hdc); - measureGraphics.SetTextRenderingHint(TextRenderingHintAntiAlias); - measureGraphics.MeasureString( - &layout->text[0], - layout->text.size(), - layout->font, - PointF(0.0f, 0.0f), - GetGenericTypographic(), - &boundingBox); - - FontFamily fontFamily; - layout->font->GetFamily(&fontFamily); - int style = layout->font->GetStyle(); - - span->layout = (void*)layout; - span->free_layout = &gdiplus_free_layout; - span->size.x = boundingBox.Width; - span->size.y = layout->font->GetHeight(&measureGraphics); - span->yoffset_layout = fontFamily.GetCellAscent(style) * span->font->size / fontFamily.GetEmHeight(style); /* convert design units to pixels */ - span->yoffset_centerline = 0; - return TRUE; -}; - -static gvtextlayout_engine_t gdiplus_textlayout_engine = { - gdiplus_textlayout -}; - -gvplugin_installed_t gvtextlayout_gdiplus_types[] = { - {0, "textlayout", 8, &gdiplus_textlayout_engine, NULL}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdk/dummy.go b/internal/plugin/gdk/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/gdk/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/gdk/gvdevice_gdk.c b/internal/plugin/gdk/gvdevice_gdk.c deleted file mode 100644 index 45177ad..0000000 --- a/internal/plugin/gdk/gvdevice_gdk.c +++ /dev/null @@ -1,140 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvplugin_device.h" -#include "gvio.h" -#ifdef HAVE_PANGOCAIRO -#include - -typedef enum { - FORMAT_BMP, - FORMAT_ICO, - FORMAT_JPEG, - FORMAT_PNG, - FORMAT_TIFF, - } format_type; - -/* - * Does an in-place conversion of a CAIRO ARGB32 image to GDK RGBA - */ -static void -argb2rgba ( unsigned int width, unsigned int height, char *data) -{ -/* define indexes to color bytes in each format */ -#define Ba 0 -#define Ga 1 -#define Ra 2 -#define Aa 3 - -#define Rb 0 -#define Gb 1 -#define Bb 2 -#define Ab 3 - - unsigned int x, y; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - /* swap red and blue */ - unsigned char r = data[Ra]; - data[Bb] = data[Ba]; - data[Rb] = r; - data += 4; - } - } -} - -static gboolean -writer ( const gchar *buf, gsize count, GError **error, gpointer data) -{ - if (count == gvwrite((GVJ_t *)data, buf, count)) - return TRUE; - return FALSE; -} - -static void gdk_format(GVJ_t * job) -{ - char *format_str = ""; - GdkPixbuf *pixbuf; - - switch (job->device.id) { - case FORMAT_BMP: - format_str = "bmp"; - break; - case FORMAT_ICO: - format_str = "ico"; - break; - case FORMAT_JPEG: - format_str = "jpeg"; - break; - case FORMAT_PNG: - format_str = "png"; - break; - case FORMAT_TIFF: - format_str = "tiff"; - break; - } - - argb2rgba(job->width, job->height, job->imagedata); - - pixbuf = gdk_pixbuf_new_from_data( - (unsigned char*)(job->imagedata), // data - GDK_COLORSPACE_RGB, // colorspace - TRUE, // has_alpha - 8, // bits_per_sample - job->width, // width - job->height, // height - 4 * job->width, // rowstride - NULL, // destroy_fn - NULL // destroy_fn_data - ); - - gdk_pixbuf_save_to_callback(pixbuf, writer, job, format_str, NULL, NULL); - -#if HAVE_G_OBJECT_UNREF - g_object_unref(pixbuf); -#else - gdk_pixbuf_unref(pixbuf); -#endif -} - -static gvdevice_engine_t gdk_engine = { - NULL, /* gdk_initialize */ - gdk_format, - NULL, /* gdk_finalize */ -}; - -static gvdevice_features_t device_features_gdk = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; -#endif - -gvplugin_installed_t gvdevice_gdk_types[] = { -#ifdef HAVE_PANGOCAIRO - {FORMAT_BMP, "bmp:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_ICO, "ico:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_JPEG, "jpe:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_JPEG, "jpeg:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_JPEG, "jpg:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_PNG, "png:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_TIFF, "tif:cairo", 6, &gdk_engine, &device_features_gdk}, - {FORMAT_TIFF, "tiff:cairo", 6, &gdk_engine, &device_features_gdk}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdk/gvloadimage_gdk.c b/internal/plugin/gdk/gvloadimage_gdk.c deleted file mode 100644 index 4855e46..0000000 --- a/internal/plugin/gdk/gvloadimage_gdk.c +++ /dev/null @@ -1,135 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include - -#include "gvplugin_loadimage.h" -#include "gvio.h" - -#ifdef HAVE_PANGOCAIRO -#include -#include -#include - -#ifdef WIN32 //*dependencies - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "glib-2.0.lib" ) - #pragma comment( lib, "cairo.lib" ) - #pragma comment( lib, "gobject-2.0.lib" ) - #pragma comment( lib, "graph.lib" ) - #pragma comment( lib, "gdk-pixbuf.lib" ) -#endif - -typedef enum { - FORMAT_BMP_CAIRO, - FORMAT_JPEG_CAIRO, - FORMAT_PNG_CAIRO, - FORMAT_ICO_CAIRO, - FORMAT_TIFF_CAIRO, -} format_type; - -#if 0 -// FIXME - should be using a stream reader -static cairo_status_t -reader (void *closure, unsigned char *data, unsigned int length) -{ - if (length == fread(data, 1, length, (FILE *)closure) - || feof((FILE *)closure)) - return CAIRO_STATUS_SUCCESS; - return CAIRO_STATUS_READ_ERROR; -} -#endif - -static void gdk_freeimage(usershape_t *us) -{ - g_object_unref((GdkPixbuf*)(us->data)); -} - -static GdkPixbuf* gdk_loadimage(GVJ_t * job, usershape_t *us) -{ - GdkPixbuf *image = NULL; - - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree == gdk_freeimage) - image = (GdkPixbuf*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->datafree = NULL; - us->data = NULL; - } - } - if (!image) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - switch (us->type) { - case FT_PNG: - case FT_JPEG: - case FT_BMP: - case FT_ICO: - case FT_TIFF: - // FIXME - should be using a stream reader - image = gdk_pixbuf_new_from_file(us->name, NULL); - break; - default: - image = NULL; - } - if (image) { - us->data = (void*)image; - us->datafree = gdk_freeimage; - } - gvusershape_file_release(us); - } - return image; -} - -static void gdk_loadimage_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_t *cr = (cairo_t *) job->context; /* target context */ - GdkPixbuf *image; - - image = gdk_loadimage(job, us); - if (image) { - cairo_save(cr); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - gdk_cairo_set_source_pixbuf (cr, image, 0, 0); - cairo_paint (cr); - cairo_restore(cr); - } -} - -static gvloadimage_engine_t engine_gdk = { - gdk_loadimage_cairo -}; - -#endif - -gvplugin_installed_t gvloadimage_gdk_types[] = { -#ifdef HAVE_PANGOCAIRO - {FORMAT_BMP_CAIRO, "bmp:cairo", 1, &engine_gdk, NULL}, - {FORMAT_JPEG_CAIRO, "jpe:cairo", 2, &engine_gdk, NULL}, - {FORMAT_JPEG_CAIRO, "jpg:cairo", 2, &engine_gdk, NULL}, - {FORMAT_JPEG_CAIRO, "jpeg:cairo", 2, &engine_gdk, NULL}, - {FORMAT_PNG_CAIRO, "png:cairo", -1, &engine_gdk, NULL}, - {FORMAT_ICO_CAIRO, "ico:cairo", 1, &engine_gdk, NULL}, -// {FORMAT_TIFF_CAIRO, "tif:cairo", 1, &engine_gdk, NULL}, -// {FORMAT_TIFF_CAIRO, "tiff`:cairo", 1, &engine_gdk, NULL}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gdk/gvplugin_gdk.c b/internal/plugin/gdk/gvplugin_gdk.c deleted file mode 100644 index 6b84eb1..0000000 --- a/internal/plugin/gdk/gvplugin_gdk.c +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_gdk_types[]; -extern gvplugin_installed_t gvloadimage_gdk_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_gdk_types}, - {API_loadimage, gvloadimage_gdk_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_gdk_LTX_library = { "gdk", apis }; diff --git a/internal/plugin/glitz/dummy.go b/internal/plugin/glitz/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/glitz/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/glitz/gvdevice_glitz.c b/internal/plugin/glitz/gvdevice_glitz.c deleted file mode 100644 index 94664f8..0000000 --- a/internal/plugin/glitz/gvdevice_glitz.c +++ /dev/null @@ -1,595 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -#include -#endif -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#ifdef HAVE_SYS_INOTIFY_H -#include -#endif -#ifdef HAVE_ERRNO_H -#include -#endif - -#include "gvplugin_device.h" - -#include -#ifdef CAIRO_HAS_GLITZ_SURFACE -#include - -#ifdef GLITZ_GLX_BACKEND -#include -#endif - -#ifdef GLITZ_AGL_BACKEND -#include -#include -/* Ugly hack to avoid conflicts between Xlib and MacOS */ -#undef CAIRO_HAS_XLIB_SURFACE -#endif - -#ifdef CAIRO_HAS_XLIB_SURFACE -#include -#include -#include -#include -#endif - -typedef struct window_glitz_s { - Window win; - uint64_t event_mask; - Pixmap pix; - GC gc; - Visual *visual; - Colormap cmap; - int depth; - Atom wm_delete_window_atom; -} window_t; - -static void handle_configure_notify(GVJ_t * job, XConfigureEvent * cev) -{ -/*FIXME - should allow for margins */ -/* - similar zoom_to_fit code exists in: */ -/* plugin/gtk/callbacks.c */ -/* plugin/glitz/gvdevice_glitz.c */ -/* lib/gvc/gvevent.c */ - - if (job->fit_mode) - job->zoom = MIN((double) cev->width / (double) job->width, - (double) cev->height / (double) job->height); - if (cev->width > job->width || cev->height > job->height) - job->has_grown = 1; - job->width = cev->width; - job->height = cev->height; - job->needs_refresh = 1; -} - -static void handle_expose(GVJ_t * job, XExposeEvent * eev) -{ - window_t *window; - - window = (window_t *)job->window; - XCopyArea(eev->display, window->pix, eev->window, window->gc, - eev->x, eev->y, eev->width, eev->height, eev->x, eev->y); -} - -static void handle_client_message(GVJ_t * job, XClientMessageEvent * cmev) -{ - window_t *window; - - window = (window_t *)job->window; - if (cmev->format == 32 - && (Atom) cmev->data.l[0] == window->wm_delete_window_atom) - exit(0); -} - -static boolean handle_keypress(GVJ_t *job, XKeyEvent *kev) -{ - - int i; - KeyCode *keycodes; - - keycodes = (KeyCode *)job->keycodes; - for (i=0; i < job->numkeys; i++) { - if (kev->keycode == keycodes[i]) - return (job->keybindings[i].callback)(job); - } - return FALSE; -} - -static Visual *find_argb_visual(Display * dpy, int scr) -{ - XVisualInfo *xvi; - XVisualInfo template; - int nvi; - int i; - XRenderPictFormat *format; - Visual *visual; - - template.screen = scr; - template.depth = 32; - template.class = TrueColor; - xvi = XGetVisualInfo(dpy, - VisualScreenMask | - VisualDepthMask | - VisualClassMask, &template, &nvi); - if (!xvi) - return 0; - visual = 0; - for (i = 0; i < nvi; i++) { - format = XRenderFindVisualFormat(dpy, xvi[i].visual); - if (format->type == PictTypeDirect && format->direct.alphaMask) { - visual = xvi[i].visual; - break; - } - } - - XFree(xvi); - return visual; -} - -static void browser_show(GVJ_t *job) -{ -#if defined HAVE_SYS_TYPES_H && defined HAVE_UNISTD_H && defined HAVE_ERRNO_H - char *exec_argv[3] = {BROWSER, NULL, NULL}; - pid_t pid; - int err; - - exec_argv[1] = job->selected_href; - - pid = fork(); - if (pid == -1) { - fprintf(stderr,"fork failed: %s\n", strerror(errno)); - } - else if (pid == 0) { - err = execvp(exec_argv[0], exec_argv); - fprintf(stderr,"error starting %s: %s\n", exec_argv[0], strerror(errno)); - } -#else - fprintf(stdout,"browser_show: %s\n", job->selected_href); -#endif -} - -static int handle_glitz_events (GVJ_t *firstjob, Display *dpy) -{ - GVJ_t *job; - window_t *window; - XEvent xev; - pointf pointer; - int rc = 0; - - while (XPending(dpy)) { - XNextEvent(dpy, &xev); - - for (job = firstjob; job; job = job->next_active) { - window = (window_t *)job->window; - if (xev.xany.window == window->win) { - switch (xev.xany.type) { - case ButtonPress: - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->button_press)(job, xev.xbutton.button, pointer); - rc++; - break; - case MotionNotify: - if (job->button) { /* only interested while a button is pressed */ - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->motion)(job, pointer); - rc++; - } - break; - case ButtonRelease: - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->button_release)(job, xev.xbutton.button, pointer); - if (job->selected_href && job->selected_href[0] && xev.xbutton.button == 1) - browser_show(job); - rc++; - break; - case KeyPress: - if (handle_keypress(job, &xev.xkey)) - return -1; /* exit code */ - break; - case ConfigureNotify: - handle_configure_notify(job, &xev.xconfigure); - rc++; - break; - case Expose: - handle_expose(job, &xev.xexpose); - rc++; - break; - case ClientMessage: - handle_client_message(job, &xev.xclient); - rc++; - break; - } - break; - } - } - } - return rc; -} - -static void update_display(GVJ_t *job, Display *dpy) -{ - window_t *window; - cairo_surface_t *surface; - - window = (window_t *)job->window; - - if (job->has_grown) { - XFreePixmap(dpy, window->pix); - window->pix = XCreatePixmap(dpy, window->win, - job->width, job->height, window->depth); - job->has_grown = 0; - job->needs_refresh = 1; - } - if (job->needs_refresh) { - XFillRectangle(dpy, window->pix, window->gc, 0, 0, - job->width, job->height); - surface = cairo_xlib_surface_create(dpy, - window->pix, window->visual, - job->width, job->height); - job->context = (void *)cairo_create(surface); - job->external_context = TRUE; - (job->callbacks->refresh)(job); - cairo_surface_destroy(surface); - XCopyArea(dpy, window->pix, window->win, window->gc, - 0, 0, job->width, job->height, 0, 0); - job->needs_refresh = 0; - } -} - -static void init_window(GVJ_t *job, Display *dpy, int scr) -{ - int argb = 0; - const char *base = ""; - XGCValues gcv; - XSetWindowAttributes attributes; - XWMHints *wmhints; - XSizeHints *normalhints; - XClassHint *classhint; - uint64_t attributemask = 0; - char *name; - window_t *window; - - window = (window_t *)malloc(sizeof(window_t)); - if (window == NULL) { - fprintf(stderr, "Failed to malloc window_t\n"); - return; - } - job->window = (void *)window; - job->fit_mode = 0; - job->needs_refresh = 1; - - if (argb && (window->visual = find_argb_visual(dpy, scr))) { - window->cmap = XCreateColormap(dpy, RootWindow(dpy, scr), - window->visual, AllocNone); - attributes.override_redirect = False; - attributes.background_pixel = 0; - attributes.border_pixel = 0; - attributes.colormap = window->cmap; - attributemask = ( CWBackPixel - | CWBorderPixel - | CWOverrideRedirect - | CWColormap ); - window->depth = 32; - } else { - window->cmap = DefaultColormap(dpy, scr); - window->visual = DefaultVisual(dpy, scr); - attributes.background_pixel = WhitePixel(dpy, scr); - attributes.border_pixel = BlackPixel(dpy, scr); - attributemask = (CWBackPixel | CWBorderPixel); - window->depth = DefaultDepth(dpy, scr); - } - - window->win = XCreateWindow(dpy, RootWindow(dpy, scr), - 0, 0, job->width, job->height, 0, window->depth, - InputOutput, window->visual, - attributemask, &attributes); - - name = malloc(strlen("graphviz: ") + strlen(base) + 1); - strcpy(name, "graphviz: "); - strcat(name, base); - - normalhints = XAllocSizeHints(); - normalhints->flags = 0; - normalhints->x = 0; - normalhints->y = 0; - normalhints->width = job->width; - normalhints->height = job->height; - - classhint = XAllocClassHint(); - classhint->res_name = "graphviz"; - classhint->res_class = "Graphviz"; - - wmhints = XAllocWMHints(); - wmhints->flags = InputHint; - wmhints->input = True; - - Xutf8SetWMProperties(dpy, window->win, name, base, 0, 0, - normalhints, wmhints, classhint); - XFree(wmhints); - XFree(classhint); - XFree(normalhints); - free(name); - - window->pix = XCreatePixmap(dpy, window->win, job->width, job->height, - window->depth); - if (argb) - gcv.foreground = 0; - else - gcv.foreground = WhitePixel(dpy, scr); - window->gc = XCreateGC(dpy, window->pix, GCForeground, &gcv); - update_display(job, dpy); - - window->event_mask = ( - ButtonPressMask - | ButtonReleaseMask - | PointerMotionMask - | KeyPressMask - | StructureNotifyMask - | ExposureMask); - XSelectInput(dpy, window->win, window->event_mask); - window->wm_delete_window_atom = - XInternAtom(dpy, "WM_DELETE_WINDOW", False); - XSetWMProtocols(dpy, window->win, &window->wm_delete_window_atom, 1); - XMapWindow(dpy, window->win); -} - -#ifdef HAVE_SYS_INOTIFY_H -static int handle_file_events(GVJ_t *job, int inotify_fd) -{ - int avail, ret, len, ln, rc = 0; - static char *buf; - char *bf, *p; - struct inotify_event *event; - - ret = ioctl(inotify_fd, FIONREAD, &avail); - if (ret < 0) { - fprintf(stderr,"ioctl() failed\n"); - return -1;; - } - - if (avail) { - buf = realloc(buf, avail); - if (!buf) { - fprintf(stderr,"problem with realloc(%d)\n", avail); - return -1; - } - len = read(inotify_fd, buf, avail); - if (len != avail) { - fprintf(stderr,"avail = %u, len = %u\n", avail, len); - return -1; - } - bf = buf; - while (len > 0) { - event = (struct inotify_event *)bf; - switch (event->mask) { - case IN_MODIFY: - p = strrchr(job->input_filename, '/'); - if (p) - p++; - else - p = job->input_filename; - if (strcmp((char*)(&(event->name)), p) == 0) { - (job->callbacks->read)(job, job->input_filename, job->layout_type); - rc++; - } - break; - - case IN_ACCESS: - case IN_ATTRIB: - case IN_CLOSE_WRITE: - case IN_CLOSE_NOWRITE: - case IN_OPEN: - case IN_MOVED_FROM: - case IN_MOVED_TO: - case IN_CREATE: - case IN_DELETE: - case IN_DELETE_SELF: - case IN_MOVE_SELF: - case IN_UNMOUNT: - case IN_Q_OVERFLOW: - case IN_IGNORED: - case IN_ISDIR: - case IN_ONESHOT: - break; - } - ln = event->len + 4 * sizeof(int); - bf += ln; - len -= ln; - } - if (len != 0) { - fprintf(stderr,"length miscalculation, len = %d\n", len); - return -1; - } - } - return rc; -} -#endif - -static void glitz_initialize(GVJ_t *firstjob) -{ - Display *dpy; - KeySym keysym; - KeyCode *keycodes; - const char *display_name = NULL; - int i, scr; - - dpy = XOpenDisplay(display_name); - if (dpy == NULL) { - fprintf(stderr, "Failed to open XLIB display: %s\n", - XDisplayName(NULL)); - return; - } - scr = DefaultScreen(dpy); - - firstjob->display = (void*)dpy; - firstjob->screen = scr; - - keycodes = (KeyCode *)malloc(firstjob->numkeys * sizeof(KeyCode)); - if (keycodes == NULL) { - fprintf(stderr, "Failed to malloc %d*KeyCode\n", firstjob->numkeys); - return; - } - for (i = 0; i < firstjob->numkeys; i++) { - keysym = XStringToKeysym(firstjob->keybindings[i].keystring); - if (keysym == NoSymbol) - fprintf(stderr, "ERROR: No keysym for \"%s\"\n", - firstjob->keybindings[i].keystring); - else - keycodes[i] = XKeysymToKeycode(dpy, keysym); - } - firstjob->keycodes = (void*)keycodes; - - firstjob->device_dpi.x = DisplayWidth(dpy, scr) * 25.4 / DisplayWidthMM(dpy, scr); - firstjob->device_dpi.y = DisplayHeight(dpy, scr) * 25.4 / DisplayHeightMM(dpy, scr); - firstjob->device_sets_dpi = TRUE; -} - -static void glitz_finalize(GVJ_t *firstjob) -{ - GVJ_t *job; - Display *dpy = (Display *)(firstjob->display); - int scr = firstjob->screen; - KeyCode *keycodes= firstjob->keycodes; - int inotify_fd=0, glitz_fd, ret, events; - fd_set rfds; - struct timeval timeout; -#ifdef HAVE_SYS_INOTIFY_H - int wd=0; - boolean watching_p = FALSE; - static char *dir; - char *p, *cwd = NULL; - - inotify_fd = inotify_init(); - if (inotify_fd < 0) { - fprintf(stderr,"inotify_init() failed\n"); - return; - } - - /* test that we have access to the input filename */ - if (firstjob->input_filename && firstjob->graph_index == 0) { - - watching_p = TRUE; - - if (firstjob->input_filename[0] != '/') { - cwd = getcwd(NULL, 0); - dir = realloc(dir, strlen(cwd) + 1 + strlen(firstjob->input_filename) + 1); - strcpy(dir, cwd); - strcat(dir, "/"); - strcat(dir, firstjob->input_filename); - free(cwd); - } - else { - dir = realloc(dir, strlen(firstjob->input_filename) + 1); - strcpy(dir, firstjob->input_filename); - } - p = strrchr(dir,'/'); - *p = '\0'; - - wd = inotify_add_watch(inotify_fd, dir, IN_MODIFY ); - } -#endif - - for (job = firstjob; job; job = job->next_active) - init_window(job, dpy, scr); - - ret = handle_glitz_events(firstjob, dpy); - - /* FIXME - poll for initial expose event */ - timeout.tv_sec = 0; - timeout.tv_usec = 10000; - select(0, NULL, NULL, NULL, &timeout); - - glitz_fd = XConnectionNumber(dpy); - - /* This is the event loop */ - FD_ZERO(&rfds); - while (1) { - events = 0; - -#ifdef HAVE_SYS_INOTIFY_H - ret = handle_file_events(firstjob, inotify_fd); - if (ret < 0) - break; - events += ret; - FD_SET(inotify_fd, &rfds); -#endif - - ret = handle_glitz_events(firstjob, dpy); - if (ret < 0) - break; - events += ret; - FD_SET(glitz_fd, &rfds); - - if (events) - for (job = firstjob; job; job = job->next_active) - update_display(job, dpy); - - ret = select(MAX(inotify_fd, glitz_fd)+1, &rfds, NULL, NULL, NULL); - if (ret < 0) { - fprintf(stderr,"select() failed\n"); - break; - } - } - -#ifdef HAVE_SYS_INOTIFY_H - if (watching_p) - ret = inotify_rm_watch(inotify_fd, wd); -#endif - - XCloseDisplay(dpy); - free(keycodes); - firstjob->keycodes = NULL; -} - -static gvdevice_features_t device_features_glitz = { - GVDEVICE_DOES_TRUECOLOR - | GVDEVICE_EVENTS, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -static gvdevice_engine_t device_engine_glitz = { - glitz_initialize, - NULL, /* glitz_format */ - glitz_finalize, -}; -#endif /* CAIRO_HAS_GLITZ_SURFACE */ - -gvplugin_installed_t gvdevice_types_glitz[] = { -#ifdef CAIRO_HAS_GLITZ_SURFACE - {0, "glitz:cairo", 0, &device_engine_glitz, &device_features_glitz}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/glitz/gvplugin_glitz.c b/internal/plugin/glitz/gvplugin_glitz.c deleted file mode 100644 index e6b9937..0000000 --- a/internal/plugin/glitz/gvplugin_glitz.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_types_glitz[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_types_glitz}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_glitz_LTX_library = { "glitz", apis }; diff --git a/internal/plugin/gs/dummy.go b/internal/plugin/gs/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/gs/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/gs/gvloadimage_gs.c b/internal/plugin/gs/gvloadimage_gs.c deleted file mode 100644 index 83eee38..0000000 --- a/internal/plugin/gs/gvloadimage_gs.c +++ /dev/null @@ -1,259 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "gvplugin_loadimage.h" - -#ifdef HAVE_GS -#ifdef HAVE_PANGOCAIRO -#include -#include -#include - - -/** - * Ensure compatibility with Ghostscipt versions newer than 9.18 - * while maintaining compatibility with the older versions. - **/ - -#ifndef e_VMerror -#define e_VMerror gs_error_VMerror -#endif - -#ifndef e_unregistered -#define e_unregistered gs_error_unregistered -#endif - -#ifndef e_invalidid -#define e_invalidid gs_error_invalidid -#endif - -#ifdef WIN32 -#define NUL_FILE "nul" -#else -#define NUL_FILE "/dev/null" -#endif - -typedef enum { - FORMAT_PS_CAIRO, FORMAT_EPS_CAIRO, -} format_type; - -typedef struct gs_s { - cairo_t* cr; - cairo_surface_t* surface; - cairo_pattern_t* pattern; -} gs_t; - -static void gvloadimage_gs_free(usershape_t *us) -{ - gs_t *gs = (gs_t*)us->data; - - if (gs->pattern) cairo_pattern_destroy(gs->pattern); - if (gs->surface) cairo_surface_destroy(gs->surface); - free(gs); -} - -static int gs_writer(void *caller_handle, const char *str, int len) -{ - GVJ_t *job = (GVJ_t*)caller_handle; - - if (job->common->verbose) - return fwrite(str, 1, len, stderr); - return len; -} - -static void gs_error(GVJ_t * job, const char *name, const char *funstr, int err) -{ - const char *errsrc; - - assert (err < 0); - - if (err >= e_VMerror) - errsrc = "PostScript Level 1"; - else if (err >= e_unregistered) - errsrc = "PostScript Level 2"; - else if (err >= e_invalidid) - errsrc = "DPS error"; - else - errsrc = "Ghostscript internal error"; - - job->common->errorfn("%s: %s() returned: %d \"%s\" (%s)\n", - name, funstr, err, gs_error_names[-err - 1], errsrc); -} - -static int gvloadimage_process_file(GVJ_t *job, usershape_t *us, void *instance) -{ - int rc = 0, exit_code; - - if (! gvusershape_file_access(us)) { - job->common->errorfn("Failure to read shape file\n"); - return -1; - } - rc = gsapi_run_file(instance, us->name, -1, &exit_code); - if (rc) { - gs_error(job, us->name, "gsapi_run_file", rc); - } - gvusershape_file_release(us); - return rc; -} - -static int gvloadimage_process_surface(GVJ_t *job, usershape_t *us, gs_t *gs, void *instance) -{ - cairo_t *cr; /* temp cr for gs */ - int rc, rc2; - char width_height[20], dpi[10], cairo_context[30]; - char *gs_args[] = { - "dot", /* actual value of argv[0] doesn't matter */ - "-dQUIET", - "-dNOPAUSE", - "-sDEVICE=cairo", - cairo_context, - width_height, - dpi, - }; -#define GS_ARGC sizeof(gs_args)/sizeof(gs_args[0]) - - gs->surface = cairo_surface_create_similar( - cairo_get_target(gs->cr), - CAIRO_CONTENT_COLOR_ALPHA, - us->x + us->w, - us->y + us->h); - - cr = cairo_create(gs->surface); /* temp context for gs */ - - sprintf(width_height, "-g%dx%d", us->x + us->w, us->y + us->h); - sprintf(dpi, "-r%d", us->dpi); - sprintf(cairo_context, "-sCairoContext=%p", cr); - - rc = gsapi_init_with_args(instance, GS_ARGC, gs_args); - - cairo_destroy(cr); /* finished with temp context */ - - if (rc) - gs_error(job, us->name, "gsapi_init_with_args", rc); - else - rc = gvloadimage_process_file(job, us, instance); - - if (rc) { - cairo_surface_destroy(gs->surface); - gs->surface = NULL; - } - - rc2 = gsapi_exit(instance); - if (rc2) { - gs_error(job, us->name, "gsapi_exit", rc2); - return rc2; - } - - if (!rc) - gs->pattern = cairo_pattern_create_for_surface (gs->surface); - - return rc; -} - -static cairo_pattern_t* gvloadimage_gs_load(GVJ_t * job, usershape_t *us) -{ - gs_t *gs = NULL; - gsapi_revision_t gsapi_revision_info; - void *instance; - int rc; - - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree == gvloadimage_gs_free - && ((gs_t*)(us->data))->cr == (cairo_t *)job->context) - gs = (gs_t*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - } - } - if (!gs) { - gs = (gs_t *)malloc(sizeof(gs_t)); - if (!gs) { - job->common->errorfn("malloc() failure\n"); - return NULL; - } - gs->cr = (cairo_t *)job->context; - gs->surface = NULL; - gs->pattern = NULL; - - /* cache this - even if things go bad below - avoids repeats */ - us->data = (void*)gs; - us->datafree = gvloadimage_gs_free; - -#define GSAPI_REVISION_REQUIRED 863 - rc = gsapi_revision(&gsapi_revision_info, sizeof(gsapi_revision_t)); - if (rc && rc < sizeof(gsapi_revision_t)) { - job->common->errorfn("gs revision - struct too short %d\n", rc); - return NULL; - } - if (gsapi_revision_info.revision < GSAPI_REVISION_REQUIRED) { - job->common->errorfn("gs revision - too old %d\n", - gsapi_revision_info.revision); - return NULL; - } - - rc = gsapi_new_instance(&instance, (void*)job); - if (rc) - gs_error(job, us->name, "gsapi_new_instance", rc); - else { - rc = gsapi_set_stdio(instance, NULL, gs_writer, gs_writer); - if (rc) - gs_error(job, us->name, "gsapi_set_stdio", rc); - else - rc = gvloadimage_process_surface(job, us, gs, instance); - gsapi_delete_instance(instance); - } - } - return gs->pattern; -} - -static void gvloadimage_gs_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_t *cr = (cairo_t *) job->context; /* target context */ - cairo_pattern_t *pattern = gvloadimage_gs_load(job, us); - - if (pattern) { - cairo_save(cr); - cairo_translate(cr, b.LL.x - us->x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x) / us->w, (b.UR.y - b.LL.y) / us->h); - cairo_set_source(cr, pattern); - cairo_paint(cr); - cairo_restore(cr); - } -} - -static gvloadimage_engine_t engine_cairo = { - gvloadimage_gs_cairo -}; -#endif -#endif - -gvplugin_installed_t gvloadimage_gs_types[] = { -#ifdef HAVE_GS -#ifdef HAVE_PANGOCAIRO - {FORMAT_PS_CAIRO, "ps:cairo", 1, &engine_cairo, NULL}, - {FORMAT_EPS_CAIRO, "eps:cairo", 1, &engine_cairo, NULL}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gs/gvplugin_gs.c b/internal/plugin/gs/gvplugin_gs.c deleted file mode 100644 index b7a6f78..0000000 --- a/internal/plugin/gs/gvplugin_gs.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvloadimage_gs_types[]; - -static gvplugin_api_t apis[] = { - {API_loadimage, gvloadimage_gs_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_gs_LTX_library = { "gs", apis }; diff --git a/internal/plugin/gtk/callbacks.c b/internal/plugin/gtk/callbacks.c deleted file mode 100644 index 0a5f512..0000000 --- a/internal/plugin/gtk/callbacks.c +++ /dev/null @@ -1,436 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include - -#include "gvplugin_device.h" - -#include "callbacks.h" -#include "interface.h" -#include "support.h" - -void -on_new1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - GtkWindow *window1; - GVJ_t *job; - - window1 = GTK_WINDOW(menuitem); - job = g_object_get_data(G_OBJECT(window1), "job"); - - (job->callbacks->read)(job, NULL, "dot"); - - // should there be specific menus for (un)directed graphs etc? - // - I think the directed flag only affects layout and rendering - // so I plan to make it look like a graph attribute. - // Similarly "strict". -} - -static void -ui_open_graph(GtkWindow *window1, gchar *filename) -{ - GVJ_t *job; - GtkWidget *dialog; - - job = g_object_get_data(G_OBJECT(window1), "job"); - dialog = gtk_file_chooser_dialog_new( - "Open graph", window1, GTK_FILE_CHOOSER_ACTION_OPEN, - "Cancel", GTK_RESPONSE_CANCEL, - "Open", GTK_RESPONSE_ACCEPT, - NULL); - if (filename) - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), filename); - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - gtk_widget_destroy(dialog); - if (filename) { - (job->callbacks->read)(job, filename, "dot"); -// if (!file) // we'll probably want to create a error dialog function -// fprintf(stderr, "Could not open file: %s\n", filename); -// else - g_object_set_data_full(G_OBJECT(window1), - "activefilename", filename, (GDestroyNotify)g_free); - } -} - -void -on_open1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - GtkWindow *window1; - gchar *filename; - - window1 = GTK_WINDOW(menuitem); - filename = g_object_get_data(G_OBJECT(window1), "activefilename"); - ui_open_graph(window1, filename); -} - -static void -ui_save_graph(GtkWindow *window1, gchar *filename) -{ - GVJ_t *job; - GtkWidget *dialog; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(window1), "job"); - - dialog = gtk_file_chooser_dialog_new( - "Save graph as", window1, GTK_FILE_CHOOSER_ACTION_SAVE, - "Cancel", GTK_RESPONSE_CANCEL, - "Save", GTK_RESPONSE_ACCEPT, - NULL); - filename = g_object_get_data(G_OBJECT(window1), "activefilename"); - if (filename) - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), filename); - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - gtk_widget_destroy(dialog); - if (filename) { - (job->callbacks->render)(job, "dot", filename); - g_object_set_data_full(G_OBJECT(window1), - "activefilename", filename, (GDestroyNotify)g_free); - } -} - -void -on_save1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - GtkWindow *window1; - gchar *filename; - - window1 = GTK_WINDOW(menuitem); - filename = (gchar *)g_object_get_data(G_OBJECT(window1), "activefilename"); - ui_save_graph(window1, filename); -} - - -void -on_save_as1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - GtkWindow *window1; - - window1 = GTK_WINDOW(menuitem); - ui_save_graph(window1, NULL); -} - - -void -on_quit1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gtk_widget_destroy(GTK_WIDGET(gtk_widget_get_toplevel(GTK_WIDGET(menuitem)))); - gtk_main_quit(); -} - - -void -on_cut1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - // I am thinking that we will annotate a node as to whether it is selected, - // then retrieve a list of selected nodes for these operations -} - - -void -on_copy1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_paste1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_delete1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_about1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - static gchar *authors[] = { - "John Ellson", - "Emden Gansner", - "Stephen North", - "special thanks to Michael Lawrence", - NULL }; - GtkWindow *window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(menuitem))); - gtk_show_about_dialog(window, - "name", "DotEdit", - "program-name", "DotEdit", - "version", "0.1", - "copyright", "(C) 2011 AT&T Intellectual Procerty.", - "license", "Eclipse Public License v1.0.", - "website", "http://www.graphviz.org", - "comments", "Visualize and edit graphs of nodes and edges", - "authors", authors, - NULL); -} - -static void -load_store_with_attrs(GtkListStore *model, GVJ_t *job) -{ -#if 0 - gint attrs_len = job->selected_obj_attributes.argc, i; - gchar **attrs = job->selected_obj_attributes.argv; - GtkTreeIter iter; - gvattr_t type; -#endif - - gtk_list_store_clear(model); - -#if 0 - for (i = 0; i < attrs_len; i+=3) { - gtk_list_store_append(model, &iter); - gtk_list_store_set(model, &iter, 0, attrs[i], 1, g_strdup(attrs[i+1]), -1); - type = (gvattr_t)attrs[i+2]; - } -#endif -} - - -gboolean -on_drawingarea1_expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) -{ - GVJ_t *job; - cairo_t *cr; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - cr = gdk_cairo_create(widget->window); - - (job->callbacks->motion)(job, job->pointer); - - job->context = (void *)cr; - job->external_context = TRUE; - job->width = widget->allocation.width; - job->height = widget->allocation.height; - if (job->has_been_rendered) { - (job->callbacks->refresh)(job); - } - else { - (job->callbacks->refresh)(job); - -// FIXME - copy image to keyhole -// the keyhole image is a fixed size and doesn;t need to be recomputed -// each time. save a pixmap, then each time, show pixmap and overlay -// with scaled view rectangle. - - } - cairo_destroy(cr); - - load_store_with_attrs(GTK_LIST_STORE(g_object_get_data(G_OBJECT(widget), "attr_store")), job); - - return FALSE; -} - - -gboolean -on_drawingarea1_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data) -{ - GVJ_t *job; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - job->pointer.x = event->x; - job->pointer.y = event->y; - gtk_widget_queue_draw(widget); - -#if 0 - if (job->active_tooltip && job->active_tooltip[0]) - fprintf(stderr,"tooltip = \"%s\"\n", job->active_tooltip); -#endif - - return FALSE; -} - - -gboolean -on_drawingarea2_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data) -{ - - return FALSE; -} - - - -gboolean -on_drawingarea2_expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) -{ - GVJ_t *job; - cairo_t *cr; - double tmp; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - cr = gdk_cairo_create(widget->window); - - (job->callbacks->motion)(job, job->pointer); - - job->context = (void *)cr; - job->external_context = TRUE; - job->width = widget->allocation.width; - job->height = widget->allocation.height; - - tmp = job->zoom; - job->zoom = MIN(job->width * POINTS_PER_INCH / (job->bb.UR.x * job->dpi.x), - job->height * POINTS_PER_INCH / (job->bb.UR.y * job->dpi.y)); - (job->callbacks->refresh)(job); - job->zoom = tmp; - - cairo_destroy(cr); - - return FALSE; -} - -gboolean -on_window1_delete_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - gtk_main_quit(); - return FALSE; -} - - -gboolean -on_drawingarea1_configure_event (GtkWidget *widget, - GdkEventConfigure *event, - gpointer user_data) -{ - GVJ_t *job; - double zoom_to_fit; - -/*FIXME - should allow for margins */ -/* - similar zoom_to_fit code exists in: */ -/* plugin/gtk/callbacks.c */ -/* plugin/xlib/gvdevice_xlib.c */ -/* lib/gvc/gvevent.c */ - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - if (! job->has_been_rendered) { - zoom_to_fit = MIN((double) event->width / (double) job->width, - (double) event->height / (double) job->height); - if (zoom_to_fit < 1.0) /* don't make bigger */ - job->zoom *= zoom_to_fit; - } - else if (job->fit_mode) { - zoom_to_fit = MIN((double) event->width / (double) job->width, - (double) event->height / (double) job->height); - job->zoom *= zoom_to_fit; - } - if (event->width > job->width || event->height > job->height) - job->has_grown = TRUE; - job->width = event->width; - job->height = event->height; - job->needs_refresh = TRUE; - - return FALSE; -} - - -gboolean -on_drawingarea1_button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - GVJ_t *job; - pointf pointer; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - pointer.x = event->x; - pointer.y = event->y; - (job->callbacks->button_press)(job, event->button, pointer); - - load_store_with_attrs(GTK_LIST_STORE(g_object_get_data(G_OBJECT(widget), "attr_store")), job); - return FALSE; -} - - -gboolean -on_drawingarea1_button_release_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - GVJ_t *job; - pointf pointer; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - pointer.x = event->x; - pointer.y = event->y; - (job->callbacks->button_release)(job, event->button, pointer); - - return FALSE; -} - - -gboolean -on_drawingarea1_scroll_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - GVJ_t *job; - pointf pointer; - - job = (GVJ_t *)g_object_get_data(G_OBJECT(widget),"job"); - pointer.x = ((GdkEventScroll *)event)->x; - pointer.y = ((GdkEventScroll *)event)->y; - switch (((GdkEventScroll *)event)->direction) { - case GDK_SCROLL_UP: - (job->callbacks->button_press)(job, 4, pointer); - break; - case GDK_SCROLL_DOWN: - (job->callbacks->button_press)(job, 5, pointer); - break; - case GDK_SCROLL_LEFT: - case GDK_SCROLL_RIGHT: - break; - } - gtk_widget_queue_draw(widget); - - return FALSE; -} - -gboolean -on_button1_button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - - -fprintf(stderr, "will delete selected object\n"); - - return FALSE; -} - diff --git a/internal/plugin/gtk/callbacks.h b/internal/plugin/gtk/callbacks.h deleted file mode 100644 index 7b1feaa..0000000 --- a/internal/plugin/gtk/callbacks.h +++ /dev/null @@ -1,102 +0,0 @@ -#include - - -void -on_new1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_open1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_save1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_save_as1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_quit1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_cut1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_copy1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_paste1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_delete1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_about1_activate (GtkMenuItem *menuitem, - gpointer user_data); - -gboolean -on_drawingarea1_expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data); - -gboolean -on_drawingarea1_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data); - -gboolean -on_drawingarea2_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data); - -gboolean -on_drawingarea2_expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data); - -gboolean -on_window1_delete_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data); - -gboolean -on_drawingarea1_configure_event (GtkWidget *widget, - GdkEventConfigure *event, - gpointer user_data); - -gboolean -on_drawingarea1_button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data); - -gboolean -on_drawingarea1_button_release_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data); - -gboolean -on_drawingarea1_scroll_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data); - -gboolean -on_drawingarea2_expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data); - -gboolean -on_drawingarea2_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data); - -gboolean -on_button1_button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data); diff --git a/internal/plugin/gtk/dummy.go b/internal/plugin/gtk/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/gtk/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/gtk/gvdevice_gtk.c b/internal/plugin/gtk/gvdevice_gtk.c deleted file mode 100644 index a20c9aa..0000000 --- a/internal/plugin/gtk/gvdevice_gtk.c +++ /dev/null @@ -1,165 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "gvplugin_device.h" - -#ifdef HAVE_GTK -#include - -#include -#ifdef CAIRO_HAS_XLIB_SURFACE -#include -#include - -#include "interface.h" -#include "support.h" - -// note that we do not own the newly entered string - must copy -void -attr_value_edited_cb(GtkCellRendererText *renderer, gchar *pathStr, gchar *newText, gpointer data) -{ - GtkTreeModel *model = GTK_TREE_MODEL(data); -// GVJ_t *job = (GVJ_t *)g_object_get_data(G_OBJECT(model), "job"); - GtkTreePath *path; - GtkTreeIter iter; - gchar *old_attr; - gint row; - - path = gtk_tree_path_new_from_string(pathStr); - row = gtk_tree_path_get_indices(path)[0]; - - // need to free old attr value in job and allocate new attr value - how? - - // free old attr value in model - gtk_tree_model_get_iter(model, &iter, path); - gtk_tree_model_get(model, &iter, 1, &old_attr, -1); - g_free(old_attr); - - // set new attr value in model - gtk_list_store_set(GTK_LIST_STORE(model), &iter, 1, g_strdup(newText), -1); - - gtk_tree_path_free(path); -} - -static void gtk_initialize(GVJ_t *firstjob) -{ - Display *dpy; - const char *display_name = NULL; - int scr; -// GdkScreen *scr1; -// GtkWidget *window1; - -#if 0 -#ifdef ENABLE_NLS - bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); -#endif -#endif - - gtk_set_locale (); -// gtk_init (&argc, &argv); - gtk_init (NULL, NULL); - -// add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); - -// window1 = create_window1 (); - -// scr = gdk_drawable_get_screen (window1); -// firstjob->device_dpi.x = gdk_screen_get_width(scr) * 25.4 / gdk_screen_get_width_mm(scr); /* pixels_per_inch */ -// firstjob->device_dpi.y = gdk_screen_get_height(scr) * 25.4 / gdk_screen_get_height_mm(scr); - dpy = XOpenDisplay(display_name); - if (dpy == NULL) { - fprintf(stderr, "Failed to open XLIB display: %s\n", - XDisplayName(NULL)); - return; - } - scr = DefaultScreen(dpy); - firstjob->device_dpi.x = DisplayWidth(dpy, scr) * 25.4 / DisplayWidthMM(dpy, scr); - firstjob->device_dpi.y = DisplayHeight(dpy, scr) * 25.4 / DisplayHeightMM(dpy, scr); - firstjob->device_sets_dpi = TRUE; -} - -static void gtk_finalize(GVJ_t *firstjob) -{ - GVJ_t *job; - GtkWidget *window1, *drawingarea1, *drawingarea2, *treeview2; - GtkListStore *attr_store; - GtkCellRenderer *value_renderer; - - for (job = firstjob; job; job = job->next_active) { - window1 = create_window1 (); - - g_object_set_data(G_OBJECT(window1), "job", (gpointer) job); - - drawingarea1 = lookup_widget (window1, "drawingarea1"); /* main graph view */ - g_object_set_data(G_OBJECT(drawingarea1), "job", (gpointer) job); - - drawingarea2 = lookup_widget (window1, "drawingarea2"); /* keyholeview */ - g_object_set_data(G_OBJECT(drawingarea2), "job", (gpointer) job); - - treeview2 = lookup_widget (window1, "treeview2"); /* attribute/value view */ - g_object_set_data(G_OBJECT(treeview2), "job", (gpointer) job); - - attr_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); - - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview2), -1, "Name", - gtk_cell_renderer_text_new(), "text", 0, NULL); - - value_renderer = gtk_cell_renderer_text_new(); - g_signal_connect(G_OBJECT(value_renderer), "edited", G_CALLBACK(attr_value_edited_cb), attr_store); - g_object_set(G_OBJECT(value_renderer), "editable", TRUE, "wrap-mode", PANGO_WRAP_WORD, - "wrap-width", 100, NULL); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview2), -1, "Value", value_renderer, - "text", 1, NULL); - - gtk_tree_view_set_model(GTK_TREE_VIEW(treeview2), GTK_TREE_MODEL(attr_store)); - g_object_set_data(G_OBJECT(drawingarea1), "attr_store", attr_store); - - gtk_widget_show (window1); - } - - gtk_main(); -} - -static gvdevice_features_t device_features_gtk = { - GVDEVICE_DOES_TRUECOLOR - | GVDEVICE_EVENTS, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -static gvdevice_engine_t device_engine_gtk = { - gtk_initialize, - NULL, /* gtk_format */ - gtk_finalize, -}; -#endif -#endif - -gvplugin_installed_t gvdevice_types_gtk[] = { -#ifdef HAVE_GTK -#ifdef CAIRO_HAS_XLIB_SURFACE - {0, "gtk:cairo", 0, &device_engine_gtk, &device_features_gtk}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/gtk/gvplugin_gtk.c b/internal/plugin/gtk/gvplugin_gtk.c deleted file mode 100644 index 831e213..0000000 --- a/internal/plugin/gtk/gvplugin_gtk.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_types_gtk[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_types_gtk}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_gtk_LTX_library = { "gtk", apis }; diff --git a/internal/plugin/gtk/interface.c b/internal/plugin/gtk/interface.c deleted file mode 100644 index c5af53a..0000000 --- a/internal/plugin/gtk/interface.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - * DO NOT EDIT THIS FILE - it is generated by Glade. - */ - -#include "config.h" - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include - -#include -#include - -#include "callbacks.h" -#include "interface.h" -#include "support.h" - -#define GLADE_HOOKUP_OBJECT(component,widget,name) \ - g_object_set_data_full (G_OBJECT (component), name, \ - gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) - -#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ - g_object_set_data (G_OBJECT (component), name, widget) - -GtkWidget* -create_window1 (void) -{ - GtkWidget *window1; - GtkWidget *vbox1; - GtkWidget *menubar1; - GtkWidget *menuitem4; - GtkWidget *menu4; - GtkWidget *new1; - GtkWidget *open1; - GtkWidget *save1; - GtkWidget *save_as1; - GtkWidget *separatormenuitem1; - GtkWidget *quit1; - GtkWidget *menuitem5; - GtkWidget *menu5; - GtkWidget *cut1; - GtkWidget *copy1; - GtkWidget *paste1; - GtkWidget *delete1; - GtkWidget *menuitem6; - GtkWidget *menu6; - GtkWidget *menuitem7; - GtkWidget *menu7; - GtkWidget *about1; - GtkWidget *hpaned1; - GtkWidget *vbox2; - GtkWidget *hbox2; - GtkWidget *drawingarea2; - GtkWidget *scrolledwindow3; - GtkWidget *treeview1; - GtkWidget *toolbar1; - GtkIconSize tmp_toolbar_icon_size; - GtkWidget *toolitem1; - GtkWidget *label1; - GtkWidget *toolitem2; - GtkWidget *label2; - GtkWidget *toolitem3; - GtkWidget *button1; - GtkWidget *scrolledwindow4; - GtkWidget *treeview2; - GtkWidget *drawingarea1; - GtkAccelGroup *accel_group; - - accel_group = gtk_accel_group_new (); - - window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window1), "DotEdit"); - - vbox1 = gtk_vbox_new (FALSE, 0); - gtk_widget_show (vbox1); - gtk_container_add (GTK_CONTAINER (window1), vbox1); - - menubar1 = gtk_menu_bar_new (); - gtk_widget_show (menubar1); - gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0); - - menuitem4 = gtk_menu_item_new_with_mnemonic (_("_File")); - gtk_widget_show (menuitem4); - gtk_container_add (GTK_CONTAINER (menubar1), menuitem4); - - menu4 = gtk_menu_new (); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4); - - new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); - gtk_widget_show (new1); - gtk_container_add (GTK_CONTAINER (menu4), new1); - - open1 = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); - gtk_widget_show (open1); - gtk_container_add (GTK_CONTAINER (menu4), open1); - - save1 = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); - gtk_widget_show (save1); - gtk_container_add (GTK_CONTAINER (menu4), save1); - - save_as1 = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); - gtk_widget_show (save_as1); - gtk_container_add (GTK_CONTAINER (menu4), save_as1); - - separatormenuitem1 = gtk_separator_menu_item_new (); - gtk_widget_show (separatormenuitem1); - gtk_container_add (GTK_CONTAINER (menu4), separatormenuitem1); - gtk_widget_set_sensitive (separatormenuitem1, FALSE); - - quit1 = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); - gtk_widget_show (quit1); - gtk_container_add (GTK_CONTAINER (menu4), quit1); - - menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Edit")); - gtk_widget_show (menuitem5); - gtk_container_add (GTK_CONTAINER (menubar1), menuitem5); - - menu5 = gtk_menu_new (); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem5), menu5); - - cut1 = gtk_image_menu_item_new_from_stock ("gtk-cut", accel_group); - gtk_widget_show (cut1); - gtk_container_add (GTK_CONTAINER (menu5), cut1); - - copy1 = gtk_image_menu_item_new_from_stock ("gtk-copy", accel_group); - gtk_widget_show (copy1); - gtk_container_add (GTK_CONTAINER (menu5), copy1); - - paste1 = gtk_image_menu_item_new_from_stock ("gtk-paste", accel_group); - gtk_widget_show (paste1); - gtk_container_add (GTK_CONTAINER (menu5), paste1); - - delete1 = gtk_image_menu_item_new_from_stock ("gtk-delete", accel_group); - gtk_widget_show (delete1); - gtk_container_add (GTK_CONTAINER (menu5), delete1); - - menuitem6 = gtk_menu_item_new_with_mnemonic (_("_View")); - gtk_widget_show (menuitem6); - gtk_container_add (GTK_CONTAINER (menubar1), menuitem6); - - menu6 = gtk_menu_new (); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem6), menu6); - - menuitem7 = gtk_menu_item_new_with_mnemonic (_("_Help")); - gtk_widget_show (menuitem7); - gtk_container_add (GTK_CONTAINER (menubar1), menuitem7); - - menu7 = gtk_menu_new (); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem7), menu7); - - about1 = gtk_menu_item_new_with_mnemonic (_("_About")); - gtk_widget_show (about1); - gtk_container_add (GTK_CONTAINER (menu7), about1); - - hpaned1 = gtk_hpaned_new (); - gtk_widget_show (hpaned1); - gtk_box_pack_start (GTK_BOX (vbox1), hpaned1, TRUE, TRUE, 0); - gtk_paned_set_position (GTK_PANED (hpaned1), 0); - - vbox2 = gtk_vbox_new (FALSE, 0); - gtk_widget_show (vbox2); - gtk_paned_pack1 (GTK_PANED (hpaned1), vbox2, TRUE, TRUE); - - hbox2 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox2); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0); - - drawingarea2 = gtk_drawing_area_new (); - gtk_widget_show (drawingarea2); - gtk_box_pack_start (GTK_BOX (hbox2), drawingarea2, FALSE, FALSE, 1); - gtk_widget_set_size_request (drawingarea2, 100, 100); - - scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scrolledwindow3); - gtk_box_pack_end (GTK_BOX (hbox2), scrolledwindow3, TRUE, TRUE, 1); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_SHADOW_IN); - - treeview1 = gtk_tree_view_new (); - gtk_widget_show (treeview1); - gtk_container_add (GTK_CONTAINER (scrolledwindow3), treeview1); - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview1), FALSE); - - toolbar1 = gtk_toolbar_new (); - gtk_widget_show (toolbar1); - gtk_box_pack_start (GTK_BOX (vbox2), toolbar1, FALSE, FALSE, 0); - gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS); - tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar1)); - - toolitem1 = (GtkWidget*) gtk_tool_item_new (); - gtk_widget_show (toolitem1); - gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1); - - label1 = gtk_label_new (_("type - name")); - gtk_widget_show (label1); - gtk_container_add (GTK_CONTAINER (toolitem1), label1); - - toolitem2 = (GtkWidget*) gtk_tool_item_new (); - gtk_widget_show (toolitem2); - gtk_tool_item_set_expand (GTK_TOOL_ITEM (toolitem2), TRUE); - gtk_container_add (GTK_CONTAINER (toolbar1), toolitem2); - - label2 = gtk_label_new (""); - gtk_widget_show (label2); - gtk_container_add (GTK_CONTAINER (toolitem2), label2); - - toolitem3 = (GtkWidget*) gtk_tool_item_new (); - gtk_widget_show (toolitem3); - gtk_container_add (GTK_CONTAINER (toolbar1), toolitem3); - - button1 = gtk_button_new_with_mnemonic (_("Delete")); - gtk_widget_show (button1); - gtk_container_add (GTK_CONTAINER (toolitem3), button1); - gtk_button_set_focus_on_click (GTK_BUTTON (button1), FALSE); - - scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scrolledwindow4); - gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow4, TRUE, TRUE, 1); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_SHADOW_IN); - - treeview2 = gtk_tree_view_new (); - gtk_widget_show (treeview2); - gtk_container_add (GTK_CONTAINER (scrolledwindow4), treeview2); - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview2), FALSE); - gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview2), TRUE); - - drawingarea1 = gtk_drawing_area_new (); - gtk_widget_show (drawingarea1); - gtk_paned_pack2 (GTK_PANED (hpaned1), drawingarea1, TRUE, TRUE); - gtk_widget_set_size_request (drawingarea1, 300, 300); - gtk_widget_set_events (drawingarea1, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); - - g_signal_connect ((gpointer) window1, "delete_event", - G_CALLBACK (on_window1_delete_event), - NULL); - g_signal_connect_swapped ((gpointer) new1, "activate", - G_CALLBACK (on_new1_activate), - GTK_OBJECT (window1)); - g_signal_connect_swapped ((gpointer) open1, "activate", - G_CALLBACK (on_open1_activate), - GTK_OBJECT (window1)); - g_signal_connect_swapped ((gpointer) save1, "activate", - G_CALLBACK (on_save1_activate), - GTK_OBJECT (window1)); - g_signal_connect_swapped ((gpointer) save_as1, "activate", - G_CALLBACK (on_save_as1_activate), - GTK_OBJECT (window1)); - g_signal_connect ((gpointer) quit1, "activate", - G_CALLBACK (on_quit1_activate), - NULL); - g_signal_connect ((gpointer) cut1, "activate", - G_CALLBACK (on_cut1_activate), - NULL); - g_signal_connect ((gpointer) copy1, "activate", - G_CALLBACK (on_copy1_activate), - NULL); - g_signal_connect ((gpointer) paste1, "activate", - G_CALLBACK (on_paste1_activate), - NULL); - g_signal_connect ((gpointer) delete1, "activate", - G_CALLBACK (on_delete1_activate), - NULL); - g_signal_connect ((gpointer) about1, "activate", - G_CALLBACK (on_about1_activate), - NULL); - g_signal_connect ((gpointer) drawingarea2, "expose_event", - G_CALLBACK (on_drawingarea2_expose_event), - NULL); - g_signal_connect ((gpointer) drawingarea2, "motion_notify_event", - G_CALLBACK (on_drawingarea2_motion_notify_event), - NULL); - g_signal_connect ((gpointer) button1, "button_press_event", - G_CALLBACK (on_button1_button_press_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "expose_event", - G_CALLBACK (on_drawingarea1_expose_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "motion_notify_event", - G_CALLBACK (on_drawingarea1_motion_notify_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "configure_event", - G_CALLBACK (on_drawingarea1_configure_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "button_press_event", - G_CALLBACK (on_drawingarea1_button_press_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "button_release_event", - G_CALLBACK (on_drawingarea1_button_release_event), - NULL); - g_signal_connect ((gpointer) drawingarea1, "scroll_event", - G_CALLBACK (on_drawingarea1_scroll_event), - NULL); - - /* Store pointers to all widgets, for use by lookup_widget(). */ - GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1"); - GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1"); - GLADE_HOOKUP_OBJECT (window1, menubar1, "menubar1"); - GLADE_HOOKUP_OBJECT (window1, menuitem4, "menuitem4"); - GLADE_HOOKUP_OBJECT (window1, menu4, "menu4"); - GLADE_HOOKUP_OBJECT (window1, new1, "new1"); - GLADE_HOOKUP_OBJECT (window1, open1, "open1"); - GLADE_HOOKUP_OBJECT (window1, save1, "save1"); - GLADE_HOOKUP_OBJECT (window1, save_as1, "save_as1"); - GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, "separatormenuitem1"); - GLADE_HOOKUP_OBJECT (window1, quit1, "quit1"); - GLADE_HOOKUP_OBJECT (window1, menuitem5, "menuitem5"); - GLADE_HOOKUP_OBJECT (window1, menu5, "menu5"); - GLADE_HOOKUP_OBJECT (window1, cut1, "cut1"); - GLADE_HOOKUP_OBJECT (window1, copy1, "copy1"); - GLADE_HOOKUP_OBJECT (window1, paste1, "paste1"); - GLADE_HOOKUP_OBJECT (window1, delete1, "delete1"); - GLADE_HOOKUP_OBJECT (window1, menuitem6, "menuitem6"); - GLADE_HOOKUP_OBJECT (window1, menu6, "menu6"); - GLADE_HOOKUP_OBJECT (window1, menuitem7, "menuitem7"); - GLADE_HOOKUP_OBJECT (window1, menu7, "menu7"); - GLADE_HOOKUP_OBJECT (window1, about1, "about1"); - GLADE_HOOKUP_OBJECT (window1, hpaned1, "hpaned1"); - GLADE_HOOKUP_OBJECT (window1, vbox2, "vbox2"); - GLADE_HOOKUP_OBJECT (window1, hbox2, "hbox2"); - GLADE_HOOKUP_OBJECT (window1, drawingarea2, "drawingarea2"); - GLADE_HOOKUP_OBJECT (window1, scrolledwindow3, "scrolledwindow3"); - GLADE_HOOKUP_OBJECT (window1, treeview1, "treeview1"); - GLADE_HOOKUP_OBJECT (window1, toolbar1, "toolbar1"); - GLADE_HOOKUP_OBJECT (window1, toolitem1, "toolitem1"); - GLADE_HOOKUP_OBJECT (window1, label1, "label1"); - GLADE_HOOKUP_OBJECT (window1, toolitem2, "toolitem2"); - GLADE_HOOKUP_OBJECT (window1, label2, "label2"); - GLADE_HOOKUP_OBJECT (window1, toolitem3, "toolitem3"); - GLADE_HOOKUP_OBJECT (window1, button1, "button1"); - GLADE_HOOKUP_OBJECT (window1, scrolledwindow4, "scrolledwindow4"); - GLADE_HOOKUP_OBJECT (window1, treeview2, "treeview2"); - GLADE_HOOKUP_OBJECT (window1, drawingarea1, "drawingarea1"); - - gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group); - - return window1; -} - diff --git a/internal/plugin/gtk/interface.h b/internal/plugin/gtk/interface.h deleted file mode 100644 index 75b41be..0000000 --- a/internal/plugin/gtk/interface.h +++ /dev/null @@ -1,5 +0,0 @@ -/* - * DO NOT EDIT THIS FILE - it is generated by Glade. - */ - -GtkWidget* create_window1 (void); diff --git a/internal/plugin/gtk/support.c b/internal/plugin/gtk/support.c deleted file mode 100644 index ad723ea..0000000 --- a/internal/plugin/gtk/support.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * DO NOT EDIT THIS FILE - it is generated by Glade. - */ - -#include "config.h" - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include - -#include - -#include "support.h" - -GtkWidget* -lookup_widget (GtkWidget *widget, - const gchar *widget_name) -{ - GtkWidget *parent, *found_widget; - - for (;;) - { - if (GTK_IS_MENU (widget)) - parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); - else - parent = widget->parent; - if (!parent) - parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); - if (parent == NULL) - break; - widget = parent; - } - - found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), - widget_name); - if (!found_widget) - g_warning ("Widget not found: %s", widget_name); - return found_widget; -} - -static GList *pixmaps_directories = NULL; - -/* Use this function to set the directory containing installed pixmaps. */ -void -add_pixmap_directory (const gchar *directory) -{ - pixmaps_directories = g_list_prepend (pixmaps_directories, - g_strdup (directory)); -} - -/* This is an internally used function to find pixmap files. */ -static gchar* -find_pixmap_file (const gchar *filename) -{ - GList *elem; - - /* We step through each of the pixmaps directory to find it. */ - elem = pixmaps_directories; - while (elem) - { - gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, - G_DIR_SEPARATOR_S, filename); - if (g_file_test (pathname, G_FILE_TEST_EXISTS)) - return pathname; - g_free (pathname); - elem = elem->next; - } - return NULL; -} - -/* This is an internally used function to create pixmaps. */ -GtkWidget* -create_pixmap (GtkWidget *widget, - const gchar *filename) -{ - gchar *pathname = NULL; - GtkWidget *pixmap; - - if (!filename || !filename[0]) - return gtk_image_new (); - - pathname = find_pixmap_file (filename); - - if (!pathname) - { - g_warning (_("Couldn't find pixmap file: %s"), filename); - return gtk_image_new (); - } - - pixmap = gtk_image_new_from_file (pathname); - g_free (pathname); - return pixmap; -} - -/* This is an internally used function to create pixmaps. */ -GdkPixbuf* -create_pixbuf (const gchar *filename) -{ - gchar *pathname = NULL; - GdkPixbuf *pixbuf; - GError *error = NULL; - - if (!filename || !filename[0]) - return NULL; - - pathname = find_pixmap_file (filename); - - if (!pathname) - { - g_warning (_("Couldn't find pixmap file: %s"), filename); - return NULL; - } - - pixbuf = gdk_pixbuf_new_from_file (pathname, &error); - if (!pixbuf) - { - fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", - pathname, error->message); - g_error_free (error); - } - g_free (pathname); - return pixbuf; -} - -/* This is used to set ATK action descriptions. */ -void -glade_set_atk_action_description (AtkAction *action, - const gchar *action_name, - const gchar *description) -{ - gint n_actions, i; - - n_actions = atk_action_get_n_actions (action); - for (i = 0; i < n_actions; i++) - { - if (!strcmp (atk_action_get_name (action, i), action_name)) - atk_action_set_description (action, i, description); - } -} - diff --git a/internal/plugin/gtk/support.h b/internal/plugin/gtk/support.h deleted file mode 100644 index 6002f8b..0000000 --- a/internal/plugin/gtk/support.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * DO NOT EDIT THIS FILE - it is generated by Glade. - */ - -#include "config.h" - -#include - -/* - * Standard gettext macros. - */ -#ifdef ENABLE_NLS -# include -# undef _ -# define _(String) dgettext (PACKAGE, String) -# define Q_(String) g_strip_context ((String), gettext (String)) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#else -# define textdomain(String) (String) -# define gettext(String) (String) -# define dgettext(Domain,Message) (Message) -# define dcgettext(Domain,Message,Type) (Message) -# define bindtextdomain(Domain,Directory) (Domain) -# define _(String) (String) -# define Q_(String) g_strip_context ((String), (String)) -# define N_(String) (String) -#endif - - -/* - * Public Functions. - */ - -/* - * This function returns a widget in a component created by Glade. - * Call it with the toplevel widget in the component (i.e. a window/dialog), - * or alternatively any widget in the component, and the name of the widget - * you want returned. - */ -GtkWidget* lookup_widget (GtkWidget *widget, - const gchar *widget_name); - - -/* Use this function to set the directory containing installed pixmaps. */ -void add_pixmap_directory (const gchar *directory); - - -/* - * Private Functions. - */ - -/* This is used to create the pixmaps used in the interface. */ -GtkWidget* create_pixmap (GtkWidget *widget, - const gchar *filename); - -/* This is used to create the pixbufs used in the interface. */ -GdkPixbuf* create_pixbuf (const gchar *filename); - -/* This is used to set ATK action descriptions. */ -void glade_set_atk_action_description (AtkAction *action, - const gchar *action_name, - const gchar *description); - diff --git a/internal/plugin/lasi/dummy.go b/internal/plugin/lasi/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/lasi/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/lasi/gvloadimage_lasi.c b/internal/plugin/lasi/gvloadimage_lasi.c deleted file mode 100644 index fd65e45..0000000 --- a/internal/plugin/lasi/gvloadimage_lasi.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#if HAVE_SYS_MMAN_H -#include -#endif -#ifdef _MSC_VER -#include -#endif - -#include "gvplugin_loadimage.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvio.h" - -extern shape_desc *find_user_shape(char *name); - -typedef enum { - FORMAT_PS_PS, -} format_type; - -static void ps_freeimage(usershape_t *us) -{ -#if HAVE_SYS_MMAN_H - munmap(us->data, us->datasize); -#else - free(us->data); -#endif -} - -/* usershape described by a postscript file */ -static void lasi_loadimage_ps(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree != ps_freeimage) { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - us->datasize = 0; - } - } - - if (!us->data) { /* read file into cache */ - int fd; - struct stat statbuf; - - if (!gvusershape_file_access(us)) - return; - fd = fileno(us->f); - switch (us->type) { - case FT_PS: - case FT_EPS: - fstat(fd, &statbuf); - us->datasize = statbuf.st_size; -#if HAVE_SYS_MMAN_H - us->data = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); -#else - us->data = malloc(statbuf.st_size); - read(fd, us->data, statbuf.st_size); -#endif - us->must_inline = TRUE; - break; - default: - break; - } - if (us->data) - us->datafree = ps_freeimage; - gvusershape_file_release(us); - } - - if (us->data) { - gvprintf(job, "gsave %g %g translate newpath\n", - b.LL.x - (double)(us->x), b.LL.y - (double)(us->y)); - if (us->must_inline) - epsf_emit_body(job, us); - else - gvprintf(job, "user_shape_%d\n", us->macro_id); - gvprintf(job, "grestore\n"); - } -} - -static gvloadimage_engine_t engine_ps = { - lasi_loadimage_ps -}; - -gvplugin_installed_t gvloadimage_lasi_types[] = { - {FORMAT_PS_PS, "eps:lasi", -5, &engine_ps, NULL}, - {FORMAT_PS_PS, "ps:lasi", -5, &engine_ps, NULL}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/lasi/gvplugin_lasi.c b/internal/plugin/lasi/gvplugin_lasi.c deleted file mode 100644 index c2647de..0000000 --- a/internal/plugin/lasi/gvplugin_lasi.c +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_lasi_types[]; -extern gvplugin_installed_t gvrender_lasi_types[]; -extern gvplugin_installed_t gvloadimage_lasi_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_lasi_types}, - {API_render, gvrender_lasi_types}, - {API_loadimage, gvloadimage_lasi_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_lasi_LTX_library = { "lasi", apis }; diff --git a/internal/plugin/lasi/gvrender_lasi.cpp b/internal/plugin/lasi/gvrender_lasi.cpp deleted file mode 100644 index 1655ddf..0000000 --- a/internal/plugin/lasi/gvrender_lasi.cpp +++ /dev/null @@ -1,620 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" -#include "gvio.h" -#include "gvcint.h" -#include "agxbuf.h" -#include "const.h" -#include "utils.h" -#include "ps.h" - -using namespace LASi; -using namespace std; - -/* for CHAR_LATIN1 */ -// #include "const.h" - -/* - * J$: added `pdfmark' URL embedding. PostScript rendered from - * dot files with URL attributes will get active PDF links - * from Adobe's Distiller. - */ -#define PDFMAX 14400 /* Maximum size of PDF page */ - -typedef enum { FORMAT_PS, FORMAT_PS2, FORMAT_EPS } format_type; - -//static int isLatin1; -//static char setupLatin1; - -PostscriptDocument *doc; -size_t (*save_write_fn) (GVJ_t *job, const char *s, size_t len); - -static size_t lasi_head_writer(GVJ_t * job, const char *s, size_t len) -{ - doc->osHeader() << s; - return len; -} - -static size_t lasi_body_writer(GVJ_t * job, const char *s, size_t len) -{ - doc->osBody() << s; - return len; -} - -static size_t lasi_footer_writer(GVJ_t * job, const char *s, size_t len) -{ - doc->osFooter() << s; - return len; -} - -static void lasi_begin_job(GVJ_t * job) -{ - doc = new PostscriptDocument; - save_write_fn = job->gvc->write_fn; - job->gvc->write_fn = lasi_head_writer; - -// gvputs(job, "%!PS-Adobe-3.0 EPSF-3.0\n"); - gvprintf(job, "%%%%Creator: %s version %s (%s)\n", - job->common->info[0], job->common->info[1], job->common->info[2]); -} - -static void lasi_end_job(GVJ_t * job) -{ - job->gvc->write_fn = lasi_footer_writer; - -// gvputs(job, "%%Trailer\n"); - if (job->render.id != FORMAT_EPS) - gvprintf(job, "%%%%Pages: %d\n", job->common->viewNum); - if (job->common->show_boxes == NULL) - if (job->render.id != FORMAT_EPS) - gvprintf(job, "%%%%BoundingBox: %d %d %d %d\n", - job->boundingBox.LL.x, job->boundingBox.LL.y, - job->boundingBox.UR.x, job->boundingBox.UR.y); - gvputs(job, "end\nrestore\n"); -// gvputs(job, "%%EOF\n"); - - { - // create the new stream to "redirect" cout's output to - ostringstream output; - - // smart class that will swap streambufs and replace them - // when object goes out of scope. - class StreamBuf_Swapper - { - public: - StreamBuf_Swapper(ostream & orig, ostream & replacement) - : buf_(orig.rdbuf()), str_(orig) - { - orig.rdbuf(replacement.rdbuf()); - } - ~StreamBuf_Swapper() - { - str_.rdbuf(buf_); - } - private: - std::streambuf * buf_; - std::ostream & str_; - } swapper(cout, output); - - doc->write(cout); - - job->gvc->write_fn = save_write_fn; - gvputs(job, output.str().c_str()); - - delete doc; - } -} - -static void lasi_begin_graph(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - job->gvc->write_fn = lasi_body_writer; - -// setupLatin1 = FALSE; - - if (job->common->viewNum == 0) { - gvprintf(job, "%%%%Title: %s\n", agnameof(obj->u.g)); - if (job->render.id != FORMAT_EPS) - gvputs(job, "%%Pages: (atend)\n"); - else - gvputs(job, "%%Pages: 1\n"); - if (job->common->show_boxes == NULL) { - if (job->render.id != FORMAT_EPS) - gvputs(job, "%%BoundingBox: (atend)\n"); - else - gvprintf(job, "%%%%BoundingBox: %d %d %d %d\n", - job->pageBoundingBox.LL.x, job->pageBoundingBox.LL.y, - job->pageBoundingBox.UR.x, job->pageBoundingBox.UR.y); - } - gvputs(job, "%%EndComments\nsave\n"); - /* include shape library */ - cat_libfile(job, job->common->lib, ps_txt); - /* include epsf */ - epsf_define(job); - if (job->common->show_boxes) { - const char* args[2]; - args[0] = job->common->show_boxes[0]; - args[1] = NULL; - cat_libfile(job, NULL, args); - } - } -// isLatin1 = (GD_charset(obj->u.g) == CHAR_LATIN1); - /* We always setup Latin1. The charset info is always output, - * and installing it is cheap. With it installed, we can then - * rely on ps_string to convert UTF-8 characters whose encoding - * is in the range of Latin-1 into the Latin-1 equivalent and - * get the expected PostScript output. - */ -// if (!setupLatin1) { -// gvputs(job, "setupLatin1\n"); /* as defined in ps header */ -// setupLatin1 = TRUE; -// } - /* Set base URL for relative links (for Distiller >= 3.0) */ - if (obj->url) - gvprintf(job, "[ {Catalog} << /URI << /Base %s >> >>\n" - "/PUT pdfmark\n", ps_string(obj->url, CHAR_UTF8)); -} - -static void lasi_begin_layer(GVJ_t * job, char *layername, int layerNum, int numLayers) -{ - gvprintf(job, "%d %d setlayer\n", layerNum, numLayers); -} - -static void lasi_begin_page(GVJ_t * job) -{ - box pbr = job->pageBoundingBox; - - gvprintf(job, "%%%%Page: %d %d\n", - job->common->viewNum + 1, job->common->viewNum + 1); - if (job->common->show_boxes == NULL) - gvprintf(job, "%%%%PageBoundingBox: %d %d %d %d\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x, pbr.UR.y); - gvprintf(job, "%%%%PageOrientation: %s\n", - (job->rotation ? "Landscape" : "Portrait")); - if (job->render.id == FORMAT_PS2) - gvprintf(job, "<< /PageSize [%d %d] >> setpagedevice\n", - pbr.UR.x, pbr.UR.y); - gvprintf(job, "%d %d %d beginpage\n", - job->pagesArrayElem.x, job->pagesArrayElem.y, job->numPages); - if (job->common->show_boxes == NULL) - gvprintf(job, "gsave\n%d %d %d %d boxprim clip newpath\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x-pbr.LL.x, pbr.UR.y-pbr.LL.y); - gvprintf(job, "%g %g set_scale %d rotate %g %g translate\n", - job->scale.x, job->scale.y, - job->rotation, - job->translation.x, job->translation.y); - - /* Define the size of the PS canvas */ - if (job->render.id == FORMAT_PS2) { - if (pbr.UR.x >= PDFMAX || pbr.UR.y >= PDFMAX) - job->common->errorfn("canvas size (%d,%d) exceeds PDF limit (%d)\n" - "\t(suggest setting a bounding box size, see dot(1))\n", - pbr.UR.x, pbr.UR.y, PDFMAX); - gvprintf(job, "[ /CropBox [%d %d %d %d] /PAGES pdfmark\n", - pbr.LL.x, pbr.LL.y, pbr.UR.x, pbr.UR.y); - } -} - -static void lasi_end_page(GVJ_t * job) -{ - if (job->common->show_boxes) { - gvputs(job, "0 0 0 edgecolor\n"); - cat_libfile(job, NULL, job->common->show_boxes + 1); - } - /* the showpage is really a no-op, but at least one PS processor - * out there needs to see this literal token. endpage does the real work. - */ - gvputs(job, "endpage\nshowpage\ngrestore\n"); - gvputs(job, "%%PageTrailer\n"); - gvprintf(job, "%%%%EndPage: %d\n", job->common->viewNum); -} - -static void lasi_begin_cluster(GVJ_t * job) -{ - obj_state_t *obj = job->obj; - - gvprintf(job, "%% %s\n", agnameof(obj->u.sg)); - gvputs(job, "gsave\n"); -} - -static void lasi_end_cluster(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void lasi_begin_node(GVJ_t * job) -{ - gvputs(job, "gsave\n"); -} - -static void lasi_end_node(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void -lasi_begin_edge(GVJ_t * job) -{ - gvputs(job, "gsave\n"); -} - -static void lasi_end_edge(GVJ_t * job) -{ - gvputs(job, "grestore\n"); -} - -static void lasi_begin_anchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id) -{ - obj_state_t *obj = job->obj; - - if (url && obj->url_map_p) { - gvputs(job, "[ /Rect [ "); - gvprintpointflist(job, obj->url_map_p, 2); - gvputs(job, " ]\n"); - gvprintf(job, " /Border [ 0 0 0 ]\n" - " /Action << /Subtype /URI /URI %s >>\n" - " /Subtype /Link\n" - "/ANN pdfmark\n", - ps_string(url, CHAR_UTF8)); - } -} - -static void ps_set_pen_style(GVJ_t *job) -{ - double penwidth = job->obj->penwidth; - char *p, *line, **s = job->obj->rawstyle; - - gvprintdouble(job, penwidth); - gvputs(job," setlinewidth\n"); - - while (s && (p = line = *s++)) { - if (strcmp(line, "setlinewidth") == 0) - continue; - while (*p) - p++; - p++; - while (*p) { - gvprintf(job,"%s ", p); - while (*p) - p++; - p++; - } - if (strcmp(line, "invis") == 0) - job->obj->penwidth = 0; - gvprintf(job, "%s\n", line); - } -} - -static void ps_set_color(GVJ_t *job, gvcolor_t *color) -{ - const char *objtype; - - if (color) { - switch (job->obj->type) { - case ROOTGRAPH_OBJTYPE: - case CLUSTER_OBJTYPE: - objtype = "graph"; - break; - case NODE_OBJTYPE: - objtype = "node"; - break; - case EDGE_OBJTYPE: - objtype = "edge"; - break; - default: - objtype = "sethsb"; - break; - } - gvprintf(job, "%.3g %.3g %.3g %scolor\n", - color->u.HSVA[0], color->u.HSVA[1], color->u.HSVA[2], objtype); - } -} - -static void lasi_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - char *str; - const char *font; - const PangoFontDescription *pango_font; - FontStretch stretch; - FontStyle style; - FontVariant variant; - FontWeight weight; - PostscriptAlias *pA; - - if (job->obj->pencolor.u.HSVA[3] < .5) - return; /* skip transparent text */ - - if (span->layout) { - pango_font = pango_layout_get_font_description((PangoLayout*)(span->layout)); - font = pango_font_description_get_family(pango_font); - switch (pango_font_description_get_stretch(pango_font)) { - case PANGO_STRETCH_ULTRA_CONDENSED: stretch = ULTRACONDENSED; break; - case PANGO_STRETCH_EXTRA_CONDENSED: stretch = EXTRACONDENSED; break; - case PANGO_STRETCH_CONDENSED: stretch = CONDENSED; break; - case PANGO_STRETCH_SEMI_CONDENSED: stretch = SEMICONDENSED; break; - case PANGO_STRETCH_NORMAL: stretch = NORMAL_STRETCH; break; - case PANGO_STRETCH_SEMI_EXPANDED: stretch = SEMIEXPANDED; break; - case PANGO_STRETCH_EXPANDED: stretch = EXPANDED; break; - case PANGO_STRETCH_EXTRA_EXPANDED: stretch = EXTRAEXPANDED; break; - case PANGO_STRETCH_ULTRA_EXPANDED: stretch = ULTRAEXPANDED; break; - } - switch (pango_font_description_get_style(pango_font)) { - case PANGO_STYLE_NORMAL: style = NORMAL_STYLE; break; - case PANGO_STYLE_OBLIQUE: style = OBLIQUE; break; - case PANGO_STYLE_ITALIC: style = ITALIC; break; - } - switch (pango_font_description_get_variant(pango_font)) { - case PANGO_VARIANT_NORMAL: variant = NORMAL_VARIANT; break; - case PANGO_VARIANT_SMALL_CAPS: variant = SMALLCAPS; break; - } - switch (pango_font_description_get_weight(pango_font)) { - case PANGO_WEIGHT_ULTRALIGHT: weight = ULTRALIGHT; break; - case PANGO_WEIGHT_LIGHT: weight = LIGHT; break; - case PANGO_WEIGHT_NORMAL: weight = NORMAL_WEIGHT; break; - case PANGO_WEIGHT_SEMIBOLD: weight = BOLD; break; /* no exact match in lasi */ - case PANGO_WEIGHT_BOLD: weight = BOLD; break; - case PANGO_WEIGHT_ULTRABOLD: weight = ULTRABOLD; break; - case PANGO_WEIGHT_HEAVY: weight = HEAVY; break; - } - } - else { - pA = span->font->postscript_alias; - font = pA->svg_font_family; - stretch = NORMAL_STRETCH; - if (pA->svg_font_style - && strcmp(pA->svg_font_style, "italic") == 0) - style = ITALIC; - else - style = NORMAL_STYLE; - variant = NORMAL_VARIANT; - if (pA->svg_font_weight - && strcmp(pA->svg_font_weight, "bold") == 0) - weight = BOLD; - else - weight = NORMAL_WEIGHT; - } - - ps_set_color(job, &(job->obj->pencolor)); -// gvprintdouble(job, span->font->size); -// gvprintf(job, " /%s set_font\n", span->font->name); - doc->osBody() << setFont(font, style, weight, variant, stretch) << setFontSize(span->font->size) << endl; - switch (span->just) { - case 'r': - p.x -= span->size.x; - break; - case 'l': - p.x -= 0.0; - break; - case 'n': - default: - p.x -= span->size.x / 2.0; - break; - } - p.y += span->yoffset_centerline; - gvprintpointf(job, p); - gvputs(job, " moveto "); -// gvprintdouble(job, span->size.x); -// str = ps_string(span->str,isLatin1); -// gvprintf(job, " %s alignedtext\n", str); - doc->osBody() << show(span->str) << endl; - -} - -static void lasi_ellipse(GVJ_t * job, pointf * A, int filled) -{ - /* A[] contains 2 points: the center and corner. */ - pointf AA[2]; - - AA[0] = A[0]; - AA[1].x = A[1].x - A[0].x; - AA[1].y = A[1].y - A[0].y; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvprintpointflist(job, AA, 2); - gvputs(job, " ellipse_path fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvprintpointflist(job, AA, 2); - gvputs(job, " ellipse_path stroke\n"); - } -} - -static void -lasi_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - int j; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j += 3) { - gvprintpointflist(job, &A[j], 3); - gvputs(job, " curveto\n"); - } - gvputs(job, "closepath fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j += 3) { - gvprintpointflist(job, &A[j], 3); - gvputs(job, " curveto\n"); - } - gvputs(job, "stroke\n"); - } -} - -static void lasi_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - int j; - - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "closepath fill\n"); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "closepath stroke\n"); - } -} - -static void lasi_polyline(GVJ_t * job, pointf * A, int n) -{ - int j; - - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "newpath "); - gvprintpointf(job, A[0]); - gvputs(job, " moveto\n"); - for (j = 1; j < n; j++) { - gvprintpointf(job, A[j]); - gvputs(job, " lineto\n"); - } - gvputs(job, "stroke\n"); - } -} - -static void lasi_comment(GVJ_t * job, char *str) -{ - gvputs(job, "% "); - gvputs(job, str); - gvputs(job, "\n"); -} - -static void lasi_library_shape(GVJ_t * job, char *name, pointf * A, int n, int filled) -{ - if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { - ps_set_color(job, &(job->obj->fillcolor)); - gvputs(job, "[ "); - gvprintpointflist(job, A, n); - gvputs(job, " "); - gvprintpointf(job, A[0]); - gvprintf(job, " ] %d true %s\n", n, name); - } - if (job->obj->pencolor.u.HSVA[3] > .5) { - ps_set_pen_style(job); - ps_set_color(job, &(job->obj->pencolor)); - gvputs(job, "[ "); - gvprintpointflist(job, A, n); - gvputs(job, " "); - gvprintpointf(job, A[0]); - gvprintf(job, " ] %d false %s\n", n, name); - } -} - -static gvrender_engine_t lasi_engine = { - lasi_begin_job, - lasi_end_job, - lasi_begin_graph, - 0, /* lasi_end_graph */ - lasi_begin_layer, - 0, /* lasi_end_layer */ - lasi_begin_page, - lasi_end_page, - lasi_begin_cluster, - lasi_end_cluster, - 0, /* lasi_begin_nodes */ - 0, /* lasi_end_nodes */ - 0, /* lasi_begin_edges */ - 0, /* lasi_end_edges */ - lasi_begin_node, - lasi_end_node, - lasi_begin_edge, - lasi_end_edge, - lasi_begin_anchor, - 0, /* lasi_end_anchor */ - 0, /* lasi_begin_label */ - 0, /* lasi_end_label */ - lasi_textspan, - 0, /* lasi_resolve_color */ - lasi_ellipse, - lasi_polygon, - lasi_bezier, - lasi_polyline, - lasi_comment, - lasi_library_shape, -}; - -static gvrender_features_t render_features_lasi = { - GVRENDER_DOES_TRANSFORM - | GVRENDER_DOES_MAPS - | GVRENDER_NO_WHITE_BG - | GVRENDER_DOES_MAP_RECTANGLE, - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - HSVA_DOUBLE, /* color_type */ -}; - -static gvdevice_features_t device_features_ps = { - GVDEVICE_DOES_PAGES - | GVDEVICE_DOES_LAYERS, /* flags */ - {36.,36.}, /* default margin - points */ - {612.,792.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -static gvdevice_features_t device_features_eps = { - 0, /* flags */ - {36.,36.}, /* default margin - points */ - {612.,792.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_lasi_types[] = { - {FORMAT_PS, "lasi", -5, &lasi_engine, &render_features_lasi}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_lasi_types[] = { - {FORMAT_PS, "ps:lasi", -5, NULL, &device_features_ps}, - {FORMAT_PS2, "ps2:lasi", -5, NULL, &device_features_ps}, - {FORMAT_EPS, "eps:lasi", -5, NULL, &device_features_eps}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/lasi/ps.h b/internal/plugin/lasi/ps.h deleted file mode 100644 index dda1fe9..0000000 --- a/internal/plugin/lasi/ps.h +++ /dev/null @@ -1,173 +0,0 @@ -static const char *ps_txt[] = { -"%%BeginProlog", -"/DotDict 200 dict def", -"DotDict begin", -"", -"/setupLatin1 {", -"mark", -"/EncodingVector 256 array def", -" EncodingVector 0", -"", -"ISOLatin1Encoding 0 255 getinterval putinterval", -"EncodingVector 45 /hyphen put", -"", -"% Set up ISO Latin 1 character encoding", -"/starnetISO {", -" dup dup findfont dup length dict begin", -" { 1 index /FID ne { def }{ pop pop } ifelse", -" } forall", -" /Encoding EncodingVector def", -" currentdict end definefont", -"} def", -"/Times-Roman starnetISO def", -"/Times-Italic starnetISO def", -"/Times-Bold starnetISO def", -"/Times-BoldItalic starnetISO def", -"/Helvetica starnetISO def", -"/Helvetica-Oblique starnetISO def", -"/Helvetica-Bold starnetISO def", -"/Helvetica-BoldOblique starnetISO def", -"/Courier starnetISO def", -"/Courier-Oblique starnetISO def", -"/Courier-Bold starnetISO def", -"/Courier-BoldOblique starnetISO def", -"cleartomark", -"} bind def", -"", -"%%BeginResource: procset graphviz 0 0", -"/coord-font-family /Times-Roman def", -"/default-font-family /Times-Roman def", -"/coordfont coord-font-family findfont 8 scalefont def", -"", -"/InvScaleFactor 1.0 def", -"/set_scale {", -" dup 1 exch div /InvScaleFactor exch def", -" scale", -"} bind def", -"", -"% styles", -"/solid { [] 0 setdash } bind def", -"/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def", -"/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def", -"/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def", -"/bold { 2 setlinewidth } bind def", -"/filled { } bind def", -"/unfilled { } bind def", -"/rounded { } bind def", -"/diagonals { } bind def", -"/tapered { } bind def", -"", -"% hooks for setting color ", -"/nodecolor { sethsbcolor } bind def", -"/edgecolor { sethsbcolor } bind def", -"/graphcolor { sethsbcolor } bind def", -"/nopcolor {pop pop pop} bind def", -"", -"/beginpage { % i j npages", -" /npages exch def", -" /j exch def", -" /i exch def", -" /str 10 string def", -" npages 1 gt {", -" gsave", -" coordfont setfont", -" 0 0 moveto", -" (\\() show i str cvs show (,) show j str cvs show (\\)) show", -" grestore", -" } if", -"} bind def", -"", -"/set_font {", -" findfont exch", -" scalefont setfont", -"} def", -"", -"% draw text fitted to its expected width", -"/alignedtext { % width text", -" /text exch def", -" /width exch def", -" gsave", -" width 0 gt {", -" [] 0 setdash", -" text stringwidth pop width exch sub text length div 0 text ashow", -" } if", -" grestore", -"} def", -"", -"/boxprim { % xcorner ycorner xsize ysize", -" 4 2 roll", -" moveto", -" 2 copy", -" exch 0 rlineto", -" 0 exch rlineto", -" pop neg 0 rlineto", -" closepath", -"} bind def", -"", -"/ellipse_path {", -" /ry exch def", -" /rx exch def", -" /y exch def", -" /x exch def", -" matrix currentmatrix", -" newpath", -" x y translate", -" rx ry scale", -" 0 0 1 0 360 arc", -" setmatrix", -"} bind def", -"", -"/endpage { showpage } bind def", -"/showpage { } def", -"", -"/layercolorseq", -" [ % layer color sequence - darkest to lightest", -" [0 0 0]", -" [.2 .8 .8]", -" [.4 .8 .8]", -" [.6 .8 .8]", -" [.8 .8 .8]", -" ]", -"def", -"", -"/layerlen layercolorseq length def", -"", -"/setlayer {/maxlayer exch def /curlayer exch def", -" layercolorseq curlayer 1 sub layerlen mod get", -" aload pop sethsbcolor", -" /nodecolor {nopcolor} def", -" /edgecolor {nopcolor} def", -" /graphcolor {nopcolor} def", -"} bind def", -"", -"/onlayer { curlayer ne {invis} if } def", -"", -"/onlayers {", -" /myupper exch def", -" /mylower exch def", -" curlayer mylower lt", -" curlayer myupper gt", -" or", -" {invis} if", -"} def", -"", -"/curlayer 0 def", -"", -"%%EndResource", -"%%EndProlog", -"%%BeginSetup", -"14 default-font-family set_font", -"% /arrowlength 10 def", -"% /arrowwidth 5 def", -"", -"% make sure pdfmark is harmless for PS-interpreters other than Distiller", -"/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse", -"% make '<<' and '>>' safe on PS Level 1 devices", -"/languagelevel where {pop languagelevel}{1} ifelse", -"2 lt {", -" userdict (<<) cvn ([) cvn load put", -" userdict (>>) cvn ([) cvn load put", -"} if", -"", -"%%EndSetup", -(char*)0 }; diff --git a/internal/plugin/ming/Bitstream_Vera_Sans.fdb b/internal/plugin/ming/Bitstream_Vera_Sans.fdb deleted file mode 100644 index 7dff1d9381cde054ec254d983c2e2989c62ba044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19300 zcmc(HcR*9iw)gCi0HJ6|=!l|{NUzcbgVG6zH0hntLJ={7Shfv81d$E_LHlemgggnD6cN> zUfw9)Ox{nt8tV$yeP4HYee(L=_4DfmaC$fwTr@5jSBPuIJ;BZ3KH>uTy7)HYkKrfq zctSeiG2ty?Bfmbs6@NYdGQYXNbpb9xJ;5fyB|$kMBcX7iY@uGEH$ry8KEi#%!Xly~ zIwDs@-iaI*Z4!Mdnjm&fEMtR!xPkaSajN*fjns{|H@?}ZxarEKo14~4XiJz#z!G^9 zKO_`3pW3{~DoG$-CiWA55Yj}VM#Vw3Uv*KH zXS?!thwWqAz0^9@l+^Ro^);$BMl`6Jm6~5PDO&kj(^~r4=e3u$?R4676n5n8kkK90 z{iKW5lh@m;SE#plCmZ=D*;s!>AGgbJSJbYlU7vU1cI)k??9Sf(c=sj)J%cL-oQ6V% zBtvb(J%-+f=M1Y1hYVK@w;Am*I%ssvIK#NoSjQy72^~`Q-9OLrm?1Frlw}K zW~Sz_`Bn2i^H1hFl!Fu;z^O@>t@mX3{_qN-q6Olv%UAZ^z4Gp>+=}e#_kb3)2MB@J zWPIda*K@bTDm-lkGR)-fo?Eb6nuzAgN80=qHyx7y`lah=Tl#woAAuaM-M2IQ$4x^; zd(`LP*KVu`R28<@8`bHm?q9%pbqT!Y_W43 zuUHsal-D>vC&nd#a5j4+|0MVJkHB=lwWGdSgKoLm0gn0pM)s#SfQdwltrNMW>hx=v zGN!=XsH)g}&5?!nK$Ve*v@qgHqWxy8iL|(&ppwT&Sj&U~o zYd@k<&=nWo>ulPNjh$p%G0+zwrgqtR5bZ&GV+@_CI0tUM9Lq3l%7>ih9}>2~LW~}l z5YVcGT8wKMH5!y4IDi0Oiz~^Hu@Z*w7^QtpdJ2?<+r|aLed!@5tz~Y zG+Li?rF?!C_wA(F;VkUqi`nb+?k+qtad|*EATfXGozd1hiMny;Ze^eF0q=9qV2gE7 zK$KeUFuIH>jCLg8W-h<%zQRFK@#Ey9KyLdlDc=g8LSKia2{IRDI%(zIHWqow!!IMz zHNag7pYev>HS*;cleJ96(aw6pKNldq=@>tr=UZg5|vR-6!;ZlVhy?dx&6F}Z2M zUuM}m*xy^6qFzJZ>8Bl^+D*4@P}I$yLLPZ5bz{mizQ+Y;vKE^UKAtWR^{ykOYG2Pu z^DyL%uV5Lq8jM(6seqid+O8;n{}}~OdmQSx zsxA^`d*gWqVvF@iDbg%w;eNt%#BM6CE^tn(-8&~MndX;huM#(!nwu{~gz&YEwJQ~5 zVm``Igo=xerv~n89Q~M9p$3y8fT4C4|2!09#a%CxaX34Kw7jm>DEpJ3$P&Vr@@*nZ zaz}oLR|*at2aCO3zio8A0*v*Cb0;0Y&n}MSrR`1MP4rQ##AYyg>WWpyKtm?#t8qxM zeA5)~x!mlDGmXhGmuAtPSaclOxFRMvQH+cY0tF-|ly}NVaoP~O8_{>#ADhF(^-_0l z2ac(1Z_dq4$lT&Xgj3hmM^4GnXMV(lV|)wZX*-u%#(1M;82IK=-nib;vl#c9o$cyz zOvHnl;v}A3Xqz_@{h$a6FZA zHBf#)rdJ-OOo5YeDtHODo6L2GVr$&C+=urZ1EHz|i_0*VbM0w(` zuDceANcXgkkKD*>cVzY4?cwyfop0PRYBlyOt>h7pWOK<54i7_X!F*h%#nRhMK$Zk3 zrF!KiagV@?2Un;=qxAq|jDD&1BW5mVEE^Uk0Gmy7loOegkSYwV6+U2xxov<%aJof< zGrU>FBu@W)JBiG>4Ah^ATO2vS32m3cEbbT@X5tS3m(-UOo4k}suJ(z6RJOucDp5io zWT8REN!xm+Q7Sqpk~H@0Hpu?QMvHNd1=@&?>o)3Uo7&(lNw&{ZKvoiXyt4ns65pW= z(I(&7Yi?H9LZDbdz1;%NWunyZi$3O8aoBz`YIAb<=JTL62UHG z`;Cgn?pb#K(srwdlQpEzS64*o?kmI<5B=S3>+V^0)qM{?<;@mZe5b}1X%DJLM?Jf< zzZb((;0p5&fTTYDFy{P!A=JB(QZ=`50 z-`KM2lJ+m!>H$&tdTD*Xe1wrExgCG~Doc)Zw6pi-q5VFv6t|Z7HsBH4L}v=(taR zU-ilD$fZ0srwSOSX8!h7CbZ#vvF$l`kT#D#I43y-8Z%LE4!Aj|U53+zxzAB2q=7Le zP@}CoPB+i6i74plyV*Z8oC^8+a?okY(smtAQ^UpAo(Tr1;r)_ z+AD>1k?QV9Pp70=a(if&2h zIj5cnsQ_rzw&K&xit?biN{W0;alPnGkbNH2d@S(oHy-IqrTRC;ljWcw6P0?d&P!(I zn@Ccaokp?Uq#MY(2GOd0t81QOZInr`trN+5IpEZA%C=#G0<6nWLWb7&aLeb#H&;=_ z`-iSTj>LkobuJHHzaGwb){?(u_jNV?dt8VQJsu%6ve23~IK*!w4G8ag_Ow6;l`w;S z-^O%4F~!oR>{Ws+-<;hquVMvllPpmI7o@O4Di)2MG^jBUECSjuuHVIRXd4MV< zlpt^I~AoTOG{T7gu>fOf$Cb;@(7Gk55p+6XXf0? zv;(BwKnI^TLW*VL)VxVI*Q`nRp1i7rHXYR38Ub$hf!Yv_1B-|3t=QX?WO-7Z_g~iW z0lxB8C7T?nL#Vat(mU%v z{8XJqAd2jyTr&q7nW+eY^9ET`+cSAVq;tU8?nBhCX|36l=xt~88N$UcoPsW!1MF)F zp2d(Oi$0K94rHo4cU5`LZVH=B#u*gv!fS3Fp`{ygYLo8FH-WrGFp=UnNdVY5CN_Mt zO1QKd9;8)bTxab@*7g6Y9$h5TMgem>rf=AH*43GCWcxeJ*1J^;7JpHXE)uoR{!bbq z+9Hp3H>c1$w@0f7EJU&wR(}}8Vj>B5E z$B<{%upmkt;@i;W6gFEe#^X|28vg#F)5tp8=_=iBLqs~&vYeU>Zd+f1t-;o-V5?%^U-{!lT26h5|%F@=_advIuP{p}E_3Wc!t zPtKq_%qAp7jd1NBO5!HsQS_qX;# za+Q4A7IAM*JgQNaeG&4YYau0xAPa=vncZ6ARDn~XdB(n}9}}I9$lh71vx_zXxJuw{ zd#mP*?jHte*VykCg%CSgo6zx<_$b1yt_sY%t|B^VEyx}7?&n9^lZtp}q>CfGk(-w) ztL6o=PJ;>subxWIMB#Uy8D}2nfaG!f)p7g{59}hDw`25Z$1oH!9S`HwOr@Zg4fA#P z_9&0$Y9)?|R1Q4cf1^Bh3X$e<4&mAu_vBrVr9c8f8Q*Y@#INk&L`{P39h(KA*Eq0eM=luP1^8tRPa zO#1N!1KN0q8uHrjaD3$D`MS2bHOY5JF2+}BwBwrUgkfY_rR?Z?*A%I}54W%q1+Pi! z>Xm)bf{ZseU1KDW7iQldW|P@$sZPbPZYmo;hwrX~4cHVicXhEsCn$bY0A39A0_lfc3jVq8%ViNqXX@*964Ncii)Arc2dmDt(qK8}8^gYo?k#pPy< zy<*KiS>5=rUH7W{2|M78oBDQaf^n=xwb2Ki zR|=Dmt&eMeu}lYGU<`ZArANBAo7L~`C#V7msXnq4j7x!WIjHl)Tm&-y9<+y2t2&cg zT~cM*ty?FgX}yH-_v>4x+ZEMZe;7dfREY}o;91V9NdzKufU2UE**5EsvIB%qX*+Gd ztl0V9G^>mYiYr9<s)bS%Ort)R zkM97f20W5wnAFVfJa_R2jC|)mMAL2PGQ=FV08@G@7_dux?vD7`z}=6uy-WAR1jIDN zxJB!z;ELSS%nG|BY@RMGn-khIQ3sq!!ABS#*m77cVQxqR_+&!o3n#s(=doS;ZtzHjgh>6Dd z7JK2a#bhPg)u{!t&>B-{`j-yxucR=nJ8<%{i?OU4DIIp1KFmbMrF&nbo%}gV(GCyp zjpA`(Bd1Y8R=n10wG_bLVAFff((!F&Bo&_|JwRC5A)G&xXR;CNXY?%!mB!njNLvcR;fJTo1d-){K8T&i^z(&X+42t1Dzg zx({^K>*N!ZVBtK94;{=SDw_6e%^qg6eI0C*#O?@-aP<|-YMX&9DNrHm)#8Eegtw{f zFMirl2QWT!(>+VzT&@-_2N+rcgLl|v*Wxx{frAeD=`DMK=04EOr*5-lWCv@3%jWu> zksdCby%ddTU7ed#V^A8Q3#lrhQ0HHuVj-+1gk?(g!k4!r5itM9ZW}!9%T-AXva24ttnGuwn|Vc$)Xf1A&En{4G$~R!R}~t=U)E*mZ|4tr;AK zsBa->k;1$9!Mx=fwhUG~KR2iX+^0=fq_sj~?#^|!Acr20ln-eOqXXF3MDI?&h1`%n zeu7IYcC$6r^#MWjVpI^5_mN|$0Jv_&$&;MvVJcD`eWEK{7HbRxRs~J_hw^y>?>KPLQ z_;2bl?Q^{ycS�da|q}Ms12IM^>3F3GCSD`!j0{P|Y!Shh1ik#P}I% z){}l#J+(ZBkQ!j8%Z&`fd@$12;lnNM!8Lg>|zFrps@K$Ox@}*L>vMwF?BhO~a|rT$4j@ z)T>K=X4pU5F!yPgHksxVYG$b}Mn=9;CIJlJ6xv~DziBXBKT`7~SjGc$h$1_#8eNtU za)iFHpuAspEQEL@t@7T(Gb9#kkLUA|Vyjn|aHvG7cfVj_ze|R{GL`hX!69g@)F^?XBkwrx77TE6Zv}x{5J}!{QBm%{ zw7bhe!*?Y|%Y18bX-dQ*?7(_=U}#9g-L9X# zXo8WzF?SS56Em-+Le0L^ua5)7%CRA|Grd>Ogg^km@|>B6aR}tO1}|gbnH3iI_Me zK2>yyD-j_uyL5ayjZ}vn(qy>2fWkd6cT=*?S>jLXJMp!Q$vhq#ioRLjH2LH1u-S#z z3Xcn3r-XEsHE>Mu$xo}FSiDk8S{x^xUAcAh($N~=u?@ICaMnsH-+1&;i0JuMYkUzp z*5KOdEfRr&VDjdP?aXGDayP`3J|s(*>Q7 z4)tyH5Ov`dFF)WOGp>~oHUWrwkW`!vrx2eK zHVM1XmB+*aM3n%s#8r~>4c)lb;l&sC>;-3b8y#&LbWSUGh>o??5vZ@c-PXFVA){9C z?ho-Z#PMB$t>fiy2Q44@?Z0&WGtyr^>gt*3;nL~LbOC*bq2e6b$#!>M?#k;(li`A6 zvcQrX#U6?xlMK#zsR%vMvI^W(Y#@!wB0D!84(^?I?zi_VQRqsoT^WBX-!}rx$?Vq2 zvr>>G6I1q5xt2q+cbkvohszWwCtvWDu|jHug~?ZAEvaP>90ep~+o=cGnV{=|wf-z8d#Yfd40``kK07oj`SNh{Pl4ndd1c*f+K3C^k>NRvM*fl2}T zVp*JFws(m13hX(>U|ofRE#0qG{VHJkl4MOKEEljpqF7|N6< zff}(}nIYevk-TYz3Z_YoHUM%0B{lBAhsS(FtH6gx?w6lTa7b_>!6wg!F3+w{A1d5l zwB1L|laZWwLqylhU0+lx3fv6tex5>7D7TL<%nNj7R32T~L>UnmVuEtB@q|=t=+d3% z&c7(a$hXy@I@qfcy#^Dyx=FIK79b6<{o<=Tz3%(I56?D5?5ICA0d3D`U$Pj(XiCOG-xS_rtn5I@gyO@Fi1m3^zDNn?*61gG=9 z4>(qSbg?8-cALg+-{VJ1cw6OSMm(MgX1pGne4PQa4*0ITu-YNb-cDT@N`AHQ6nXV` zB>;a^@!T!&Ksa6Nu&Q4NAPZ}y-b;Hk>(<&Cmx$?yNxOjNtF*o|AAQ{o zTH?;UXVsKiUp>e$IBe^C#Yiu!T3ZoDX6}j&2}mULoYo8pR<3Fo<+(O)DA!pFNj`8XfkD}t zTdqm;wQ}R?df458gkwYX~Ct0>D+~vL$Ht7zZrL|;t z(P-?mD!Y1=my4~&f#ii*HtSzrcYAfmxQ!bl_IqAG`5E7udV_l(br=~?A5`INCEMoC za0V!_;^JkbPS*mW6_|9i^o6{v1jBtYNahldBe;yu2NARj!q-12R3&!FO`%o6<^Um! zLf6Br1KYfu(Ze1>DZniwfZ|#Z!OYnK`1bNMI}=Gn%u zFU@22k_n>oAM$u&(dF>QG3mFkLKkY%qIz~rioM9y(J6k`4cx~HGdT-UTJJMK15v+(HPpt5R875N=B3* z(ks%BE+~YRrU1!{_#Pv(7zjCoRJhqT$`r^^>%04s+g)Nk?#St!Oui(}1^+j-)oH{t zquVpMBk>bZ4XtTqtx6$crOP}lX9?d69iY|I-_+baN3&+x_aXk!h7IMaUT@MP7py*1 zevi)+2@KeC#3ie$nk-EMm-RccI7G@=L%*BWJRCT3d^mmN1oC8R1zoJ~3*7Al#gXOP zoLmf_!^uf9D`wwI%Nc8Yo0TO^jKIbI^^bRdL}h{dPKBe_y`DrO{dPsH4pXOVRvvH# zc8tCptBk)}OH&Q3pK4a~fq%OVIK011kOv|;6#o!#TZxU`vt^|C36o$0Q+;}~lA+y7 z7;G`6Ba2%Cltn&~rUGU`2p&e8!npfgMDpc)tP{M`%kw+Ts&Z)3iTAu5SVnlBTwQG% z)xLhH-AQM=*yGjm6~(o2`eI1iWCDbn}R71aG#N!nGKnHkJ~J_P^3 zwE7pl85_HYn9@>`^$shaTt`0;;R_vC?>s=ejxvQ~v%+E<%f7Fv zaz35MhZ{$HdYY?iHf@+Oa$?wb2+&>-Br?XKf-!x22jMM>c z$v!zFg)QFS6@;(EOG3|0;Pc`|_hvkkG#{&;Gyt-uTs>UxL$0hHukJbQa=#QLFDZYZ zv@j(8b)9R(1X)2$9TLQxaOjNJL4ueuB#0p+9H`d=UZ6w+ldpTCT!5Nj#$FFjB7my` z%mv9PW2RGy`D+LkNPE3}Khjl`Z=FuNFxP`Lqhy(-WH(Kwb1FJwg}B$VAL{~J71(hB ztyGjAM`8PL+T5kxL`3ppWz00kG?DhugAlm%%+KWAJc`~3C{yP@lqH+tWv>KWPtru0v z@fWvbkrl@u5+&3jLI0CEuYTx+CUh!W{$aMf84ycZCmQc{06A+;iD|)j>)l*zIV2z^ zEtZzZujn}!F$^v=q6PJY0tUaWCdr&Nl~Ys0VF{kQd;6OKpIw7u_Y`-xu=@0V=g zO-S(u?gFoOrJ@HkXVu~yuz2uZl5Di@@$~!32O9!J?rZ@9g=eUk$ojqCZjVrP6}+Fq zrjf#HBsYsBMAW}ieEIikLuJivt#gv3_PlSw%bt^o%_TRFfHUKNbhdC1sUl+nX*F{nD-c>Ofu@%A9$>Q~3i8{$16aHq4C) zP7jVN&&s#o`TQ@d78#o$?YDd8QSnS{UE}^5oBWLvay~!7ep@~Md&2gR^~8oN-&fz~TUbyKoN_Tes?a-r!RUjXSZ zRm~zWWwvIhC>4M1p&TmJ$TB!*vinuDA}qHJ*mRFXb+7r%qkM2|`%PU4_8EZ*>*|8k zpH}r)`b(WrDiB5;nZm@xKGlnTd_)-TeN6MZE5u?9~5?lS!O2_gJr#YkX_%&96cBbcOot z3XlI4$71Bm+>CsgqgBae`~T_%2+w~~)YEsgLrh|@OtScsNvvA>AuGoE<()uc0|gEP z6H07!sArf1M;62BT+d~d%DFl$-cB2?Y??C$r18v4G}MX*_e5@IUA+QXU4o2^F#QD; z0Eo>M_=3@q{B(d#Od;vMRVT13=96qNk+* z8wx*ha`h!kq@wUeMRInWSSuiZ-Fg)Ez)-tRnL$s_;D`5aKv%&IRq_n5)eNN_jlWho zkG?^c+ADJgY=CiU!J*F7AGJdR40p=~R1ldL-*_`#&*pQ-tDKcQg@DymUdk#^YG|e1nq_yadxYfBPhnw~@VoZ{YIYe@Gtiw|ATPdVN(3uNl7G zQl=vhsc1si+R7|?5JPn<)D`Lmb_W+9MiQ*U1%FTEwQ_`}N~>N# z60DQAKOsu}TD)K)g{BRm$wyy*Fl#BpmXfz4*Avu%S0)r$Iq6k%`X|=q14*tE6r`f{ zY<*uE%TL*d-PnGAex`)5P7=uWfFI$xYF#vc^rL(s^#d*=fZPMI$NQ?tr$i$4XT#0; z*9FJ8f>-$JT9@mu9Ci+%)@`WEmwaavu6EJ;*0AzuAuARBA3+rV9Y%nw%g$zCL)GB$ zc;uu$F+U`ywez@5373c1o!m|fXD5^alN^N;-@d)!MUXYOsELP3CVE0Dml^bWC*%A2 z%ygGm0U)_wX^x`Rw1lYfyTA=lRWpCLrhXqW)j$4jG5tNFP2yaj=ov(R;xlG8IWMR=)FLo45kA#oD)N`|e4Rav+7Fw}kbtH0a2tDI#rOa1; ztu}jDYAmEix^O15OD%~b1?JPadt@k}3Lro@@0>bqkKVesHm=+{)+OZs1?r;gaL>=M zIFA(;pGVC4kMSF2cX}pbbXmb|@vp({f6nRr&k(hC4mnQvHAIbmXv^AN|8tIYNT3#s z1Zw3-peEzjfgGMGActo^1GRq>1!C_?3b{x6@_O0p;b9e49`R>X(rF#;9O)xh{p23W zOspqUdH{Sy3lxA|mS9&Hm#T-91u*Bq=&C$4E=>= z?_`Ky*4GcKt*2eD2kF?pTH&joO={+6`Q87$K^MOgZu1%p8;;&wtqm0N6gwsmRmGYi z1P?k@Cv z9ws91cfLDdzr)M^N+Wx4N|B0|3Dy=??lTJCVqqNq^^nK6F}77eZ~?TiZa<+0R&?}- z<3jH^lrXXrXSp)(Xi<{w5wH?ZNNPv_O09VB%Ed}k^-f{~dI*S#rO+0SjwAa1<}lqe zSq=%*YLGy!2mWms$f7Jp&TtxREME1b*RIoe$hQNz+%d$u(Xccg9h`7*G^O_L{g~4% z!bBDv)OsTH)f>tXZFDEMc$Mir$2T!Gu8q+SHyQ#Y5Sq}HpJkVczbm^C-{e_=2mXE! z{K@=rO#Uk|F$ZGKRDu`!a5;XkHGXXY@SfOm^uz{`lmjkG;kQZQ`2p|gjn1r*4-rCg zy_-W%{xR2+J)&c57mBV?Qd!GN?Vy^&_*&4NQ`T73TU{adyar>g9gO^}aL znFy78F>-1jnP321M;^8e!wSm?qSzw!LERoe*a}1w&7O=3KE9g%M)JN(>=c4A-YnVk z6Jwl`X%ytaYg1BdNfx03A6f0pvR6_lpL|qHz`6JEHWJ8r+QHZ-It&nH|F}B^w)HSx zbFJLu02!%{HpH99wpihamvYCqK+-y$g~85i4t-vNCwIR@KE2*0t-eroHK$ovCA zoVMBjnZkeE5ZfCTAN$t&&QmBbyYH#?(bK_eJ__wPWY+&MAgsMsndLV%0;18t%m4Hg*Z;3&*)r?)T;z}_7&#=$N4ov9I~xKi*h{zNqlb+~i)(5vFL??b zbLFlwV0HTMai_i<&+Of^m>MU86e(b+Z%8&4V<*%G)qsd zvXvl`L0yS?AX4AX%;uHiu;(}TGzi0YKwfQiG>{<0`D($e;9fqy5nML7&JV&7-ttV2 zz2j-R*B=K~a+;uC3T^ICN5_KW$(yIYEnGJBuRlwi_Ci-Oy`L&rct}0Ku=j4R(c)z3 z^rhtEeYt~m8XGl|{*vA7Lb4mba2xwU_}A>lf>%L{mE9x@|24ar`>}hDn4#@N{x!P^ zVP!YIU#KgBho*%X$j=NulI_*zLhj!9c5>NkIqFy}(j0VYV8uRC-Xc3HJ%T5Qs!|RZ znW!yaCWGF@k+DTU(VBY81VkdR^-fD~qFM@XS{}Cz75Ni{TEgUP*;qQ0KLwT}ep{I1 z`QQU-y8sVmOHXBh1OrNoM2n_0w}b|kO9rgpK$kwWyfOT<`BF>X4JaJEqCW6Ughau^ z2kxEU>)S;&lXoTV$|Rm+6O7tVg|w|ica3KXg&Ez8EQo7#oq5J%aqd7LNnrY4>TBdmEgLW>M% zjFe1TS1w3|zPY+$$3*bwT=8^Kx{b!0l&`{K?dswTGD0ZDv)=Qnuk*1+{i+i!HXb7^ zH0nQezGEZCPBUM4@=n@;j??%w@KuH-(hIqCB}%uef0HW4;>VkvZ*SvY_YW71%|h9R z14ith-LRs0gz^uo2c9rvW2+pfF2C)PKg^tzuB1Ihn0Z^r(*-r0oa2wC_IB-&Q5e29 z+vJ>@z_4iVSYR2nXVcd4!o{0(84cgB$ZOs9`@GYQCL=e;T|&C+{@Rgib3^?I3-@Nw z%aMvE9xQUS`;6RHvAtmz2LpN2#N0rJ<2a4WPlj59Jt{(9kowF9a@|9Y_oD>kmoJ`AY@4i{YB zt3*QkTiWNQxCem3JfpWD*auRB*%NI?9VPe=fW1OKJ?_c*2uAT={UHV>u;4UJ>Ogy$ znAg3mflK6n`41dTs%@Q9n7L&kF<6lTnhQeJFV@DQ2Z5-gjsFXHZx3YPo}zrrEE34N ziavMBS1n@Xq(WRCXuf1eO3}}7%{kMLhWf>Wd+}&vg!6TP442Q`e+4u}8vbis8qyH3 zk#$M+k zmCT-AO_aTdKtP&XQT2*b(Y53_=>Wcblz%?AY}`up1>dh;?v4%7oR3akDueym@lcp( zhbW3c_|kiC*fK}@__h#|MLiv)#bVlu+)SO65LNus;}50vi*-5ho^j(pYpu7SbL^<% zWzx5as|ROGHpM&}w#QJN;sYy&852=~#uI007Ox*ok(tPi^QUR4y5w{s)&)}nE9o4X zoj5jy4Tl@(&SwvS;ecF22^UobI`(u+EIplk}K1IiA`{QG|W6g~PG4 znJ)Z_vU&?{2qp{QRW!9oxI=JDtue!42gH&Wa`{j$A{CcKgcy z?Qx8c(`h<_4qRcO1Lq&+vj~2JpY(6?qzlzL1RB4r9T6=0MF)N12H(*m3!%mbJ|}St zsbKapk;P>(klNKoEHZGl!a4%|!?r>&B^5n>Xtw=uJ~jw$IT!pvz7}WOVIMwU5^Y=m z$sUsH7shp;;AF3csZl&v_sT;uNt~e+!xmFFE(VWY@DtsWSXzDo>*9`F+|6(xO9dq| zU74lQJSe*u1#&Yo|U>9=~@l-;ZIK7m0F~Pz}n^V+y@M8H8Qj;Epl?N|D16+WMwgM>g9e zL{?C}&&tnh9@2ll<{?#4^ZZ%vKV0+hMXq@){^^=WW~{fcl~#&zHYxo zG0t0EBiGLVpqr8a2tKg$`}U)`g5MSfU7RHFPaxZzTGNL%HG5>8Wi`6$qj8A)NG7%w XdJDIm=*iyU2FX-%)tglWY3KhxURoQ* diff --git a/internal/plugin/ming/Bitstream_Vera_Serif.fdb b/internal/plugin/ming/Bitstream_Vera_Serif.fdb deleted file mode 100644 index 28b7c1daab9cae6f20899bb61439a313df87236c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22230 zcmd6PcU%<7_HT7FgA7R=a#9p#$U&ljVH8BN#34tSAqUBbxGg5Kit6U7Py)CPcm@Xr2U1*o zMaYyu7ZGzxpeGeTFpPmUVJo-})?xU{P=u+&JjHNh4`cnYN!SAHP3!}#ETbV~A*0wP z@}}lZs!V1~>r5fIcH9>n53?e(5pxrBCCg(LGHWX<#I}pgn{Aklon4mQll?M#KRa%- z=H}YX-!_MFJmGNPlC))V3l@I>ABU&mm+;^4n>mS``#6m`ojAuiNnDv+zj8TnS8yxw zMDyI>;pesC4d(s8tHqbYhvg6CZ{$}L2odNISQ6MS=poo7I3=hfWGO@wVisl<))KA} z{w|!b_375{Tidt6BC8@H+e@}LZ|~XOvtx9JoT#m6x#$itC9yMN*Tlxfwh-hA=Lwwz z0b&}_P`pw6v-m!V1PK<&vyu!_c2a9nn$jnwho$vp!emNhCS-QYX2@=qOO@l6zbJ2~ zz_oMl&WAhY72_0_6{D1HDsd~vkX5Gqq>m-r~KR_toyxCl!#S_9Ocr?N>fPJ0PSLt0kzNsJ*J~eQ^Assm`oU`k~Q7 zZw`s;TIsgwQuIXhAL{!XFc?M|wiW$A_Cb#Ip-tbs=$QNy*-dTef~X6N#Hg+dRa#g~>&J z?vLsUeP`sxoiC+zBX?w4=Z%1&DtGhhq+o1K`b__Y?`;>4YS!npn#>KlFI)Nx42H?s zZ6th)>v*c3w3tVIaMaGJokvQ0Pkeq_dcrt9oqAeOj2y1D&@XuZ&8o zp)dvP$wnya#qcuMCQ6Oh8Sr zdu$qwWoSuG4LD{)VcN64qTU?1YM@+ScCQZ2lAfsV1LB z&X*2yjfMP!pe*p{&U?3NG1WBLIjNaGdAO+)s1d*T%Mmi`C2i`kel+nLh-&*rjXWZ{ z1UiU!vM=(hsp>tsFL}%bI^oR1S-_tZY)vB^fIM=@F@c9d7%Fx+DZX{fV$>5MWHUg0 z0YadOwC&&v-3va?;xIA#NjEjj(u;Vg-Ky0!cl@e+<0?8vB8CYgOATz51Ci{LHKc#s zX7umBb6@T@X=bStJQ9#`K4iSjwQO%(MBnHUm7FVISie05ki#y>euu)~fzDj-$}Y5r z*y&%%$NO5{ERix1(1JG=6t$CMQ@nY!hq7y;)OORbI_36fxkjEv{#Jrv-^(?b@_v>6_Hy~c zwY&75s}9bq*qtAifHEHi>ld}UuP zr}yLqtWP&P#M8gXe&6%+Bvtbk1-3j9^e-!a4oJ~-GrmJgspT@$egO4>z=sQU>ZDW! z*){_on1sILMvM>TQhyVgR_8K!dLRIOqA%Z`qYQHEkE+%}R{0Ql#hW-;-2ie&7(C5R z+%o}{`JjT6n@F@U1Xz6uVdY)e>FFO8{(-1&GKHxX!!%H>%%^&X(m9*BA-43W6Y zfJfV|i@|E0fDi{C(sTQemKQo#{>0fLy51%pXHFv;0-1-|%_i`$GjpP>`n3<0Kt;l9 zXoN~Z;Euj{H6XhLI;UszfY-_w*}w2?unO z>@_eRKGPgvWm_L!{#Nz&HkOYq=SO{8kIv}%?DlFzdw8(Nhg!5q)jYaZ*1Y45)ZUjg z!&Q)QPEnDMp@hahCK2>HW*5LT0R0y-S5lSyrq+ZEnUhS6cIru)VEX2_N8yDQU0u{;NUGoN9>3rNQX4;DrK1;(eJh-J=L632`*Ndwm3v zQbNSf2vsk#78ycP0W28(YK_NVaz10Oes)HO_hc;DSn2k! z^Bs&QCox~71evL>7@T}HN=4g@UwdZ5w~v_lCK@2PD?pWnI3WW}vLWsKde`VK1eXe! zRfrM~!BwpLjzvQ#qN7oE$^$@2}wy@Ng= z=NkBQ|HxAkwgTCrGC&-cZe*wP_>GdeYFn~cu5W@XA<4g?(mFswHoQk*)y=z^gu6)N z7<;yZ7h&F@u^OGc5*2Y}8f5k|U!YViWeH~+9m1b;L#E4(njj@6=*;ye-&&Z5nfn$s zau*mp?)x?Cgw zmfMj96HO_hj9;lVZnms9J5ElREL{DfN@rfn4Leb_RCvg^|Dwis4OOp=!V|H>Uq6VT zP145y4oIA~^_O;F)#$%nR7l^Af`*6}XjXt<>rGFH2Qt{ne@_1BohB2)^UTmL7osR& zmu9<~Wo|+;0X!oEM>n}orhW9Mp#ynsyG7|Lo6z&)DuTU|S@R|9Yf0inR32_+&*AK0 z%XvIkhNM=1s9z{&i?w7%q`})V`J1399aHeWbZ+mOXZ;&rHR`pQGLV_g98D>gs!%T* zSmiD2bp*$=Aw$Ymm-HhH>WNAB?<^UJkUENc$@whL1q4rDC7nWN<}xdWfW&$Tnl3 z<=yw-RqU7o`%t*F$yZIXec^Wd2HAm~G*ku_)BH1m_#n8TZ6ifEPtsq2H5E&0VGeZ8 zI=+kZ+AXg?yb+!`f=L&sU+0KOuFR^f7(7$uaJqneoj0kv?q!EQ|v?jS(+ULLyIpbxcrKQ`TO`bA=S-(U$axV=*iU>9h-dG<=a zZ>@k2>1`pcfW~GM$?~;{!Sx*334W>+1N8;pA<$UT!1iU%p?Xs)r{X7<*n}P(z-$iG zW(4lG3E0wvxObt0dK(lh&3V+T=Jq}kgS`V-PM2i3@j2_Z3c5J zCEz0?7*kw|HfL{`Wo{~QrKtBop17G0?2*h$u=zwG!I=SY@-fTo4by3uLSpdENo-=2 z3FZAcFPG5Z7*J4?Ur+;V+<{G~?ThteuL2lc&u5U}FrY$NmR}ubixajvjx${5fNHzd zYkPpzFtDbu1}(A%z1@Vp0yvakgOIG0b7dFf42 z@54NC<6t=Q69Zy?G1?qRi33R{f=zP9HX0!Sx-4n4>Xa6GvNdQlqhx<4y%GTfH2ZKJL{xUj5Wr)SgVqbFs3#vUoUg&*6a5 z_Wxq+AHUMiiCMg(RW9Frxo5^9&^Gz+2Z$ZAiA=oU#*ce1GS+-Fr*h0SEQ91D|FUtu z`Ny7^`hFb3EIS0v^Uh_6EThk-qtWim2)Yjx1IO9u-Q&NzL&VkDMD+J@Ce`YfuK7_eq1wwQpjd{DZL zo4C&+5@3x)gjEU|H))Rxedd4f<`!r_G!O_GDPSdL25)DH^W*C-{JQ(j*B6DH;l?47IC$OtG;$k=5hLaEpRJe7`#i`w3c?h5n-O5XC7m*QDt*ez>E~~Nu|AwL$J#8Scy*+ zJ3kkX)2DIRQaFPzjj*U}UsSNv^ZM3ol|%p8uWrV^uR4wU0=+LVxE?w~9QPdczUhgA zEvLm=K`xE@PrR*pB=#YqrZRBKhSV&Ye9ig`Yb{O;3&yIa0h}69Y#KCX!(&0AzC!~f zwgG=;eRL?6F9nlL%_39=OF7Bx>z5Fik_@j*#D65o6Ci1#dh4zi5uwBHjHGW?TvWY+ zVC`vK5)o-TC>=n5gyC`8Hf%BT>&t7RL+_4UZdWZ^QNTPB5$M8?k)RKS0vGowe0ndj zK6W9AOy0>)whot7BlDf-UlE(Bde986wIT2hwjip|k_Z^LQ zEB_btJa&Bg-ttQKW)}WkkX5JX;TxjXG|q9F;LO7>Gre%lZ4ElD;nI!7uE;?@`#o`V ziRd7=^9p^eY#gtA*74G@yQ#VpqlMD&KwtGy0HM;YYj#?9D@(t{y*|EPx@_k)Ft3eD zzUh0;nBwfpYmv;mySesnj za@Y3><+hI3j%Lx)QMoRkEewBSrnN4iLV3L>#CDl{bU2k=-1TPdCDd#fAI++5xMSRb z(vhJX7q>UDy|}|)tSYxgdAp;nCR8dsOD_!n`u=$JXjaR_sCQk^9TD3WQ{OY+&_i_| z728)xh+mL~%3Sn`iGYV^+RYdACM(pRtZ~vF_za+DgL$Ae9l^V}MurIs)P%`>t-g4a zvvMqO=YSv$eS9E3A~_SaobE;rM4h4UOSjp`2>YakBdD1pp6T=2VU6;dzLxIC;=?aJ zZ|W}lL}59;Gpf$Lo1?9X4?%%Ga9gtobY`;?ilKLRoplc@%*st^9xcyfC7}-tI~yjF z$K!IB8IFhA-9h%GGX(2Wv`>!U9KfMai!g8qd$_>!R{XN0SL1Yr*PSf99fne?V}h#$ zO3Gz}_dsnneC>_#ks%_Dt&6>;kEGRn!guJ)2+j?mQSFwF?|fL?ASuljAF1D5S&ITH zp}fIhKQMw0%sz3#_GaDTD*2<{w@UT>0t@h!BcCvXq)mMfwh@uNgW${Q0#&@vTTCrN zejppg@9tCa+H8%oEEAoXuH(!IYe~i$rXa*aK&&@AO$gR^#>o!GHY>`Jh;3j>F)v^c z`o*#w9mhknc4@`3S0+!az7Y1HvE=Dpsiuig!AYHKIa`NDU^0oHH6yu)s%9#XTDIOc zJ)ajA{T22$VJog^N+Jm@fgqwrcJ>Py*vc92lCgD5Z4(|rsk$$&^QhRqHdpng^!L}r zdS{)6J?B}a)oZH}ktJ|yZ$tLyz8Khw#+996ddjE8uOqGiJ+=2*Rx;;JA0neNtQpbZ z=k5TE0->g(s*h<5!RP{>Q^MzqB8CY-uVANK0G9s2Jgy?);=9wcq1uvJ*Hdn9agK=5 zS&L6h`^WY3Dvof}`ToFyqm)O<-PG-Y6o?$m{H4fYbz+v`G1dn)(Sj^c3ow)bf zW2m(_98v|0kB?7Lx3T2o=+voC+Cn4@zCY@yU!HKrG?2VC)vV`Xoqo9|=BSQqI8!km ziVD6rdcs*h&RCa1wUdm`>>y<9aCv8F>IkNsw1Z8GqgQ9S{>PGR33pIOglZ3$-Q1f1 zGOd|~7cWhg&EyE{;A1^vy2=grL5eYuTzc0eiSvsZevx9`)i`hqQhv+Goj*<{aRh<= z7i|Wk+`1s?d1gcX@|#U|D(&$`&*KN+_P%0qKCyAO0Mp<^sfBM0dWvF-tf*K*SO39vP8Hj?PPX;yoND84Q+^yD&Au=nqr0tS z<(yocP^9nzg;MUBwLa!354NkQZx7vc22vC?eq%|CCw?fXh12xnjDWx{)0s1S$nD9( zHj&IiYQZ$_8NvI{+eI+7G$$uD=xQikKQZM)RVy+@m`=rvI=A&ok&ky*v{|mQ3{YRcW>H9h9 zmt`sgRUt(hq?g~VLt;BF@%mO~l|wI2b;s%NLa;OLdtzU(T@364*q&@O572nR93z?0 z^Hf9xosQn+_8bY2CE)5~!t??WZK^Aq>S+SG;|v}zeTxe>Ng_hANlQcxeSp;~6jpY| z4wa0NojH^Mso2&qk@^x+Dufk%dS4)$--CVAWkbQJV*{nClhHcrt-t_nPwy(zrE!WP zcsE16B#5AZ$z0N&%Hb8^bO63NMlDp($$ZWu-t{7SWRFpd&4bdPXOPd)h^}C-arTBX zwC=oVTI@w_nma-`4L9X@KOfKxSwy$fRP=|@jM|0)XBz#u*%D#?`c_YsAIlh-e5-R= z!@jzTFS9kAM7#iQHRLh(!tBmWO0U$QcnqwrJZB4iwy4jeID>ilOR1bBR^?xW^ zs2q^GewCzK%Ni@Xy$Ln1lwTiRcTo}O$4x3dz_S-2sHcQY@zQ-bzfkV^nA#!B%Q{oD zIaf7W!WM5I$4nryLyb!+kDNe;3HH{aqin20mXTiI_q<4<=DHq8#+fh9Af_Cvh#au5 zzI7`my4~zxnE~H+(G0u-I}sT4$mH==`oK1b_*&*Ko}Ura{trGleihwh#qDawQ-5hD|*=Avqo2j(iiy*x&<-4XnB{?OIZ=Wp<;MaL?W<2i@yIcOqTs zP~H8?`ll4uU$;ET9B)8hzB%e$!JE|e#>eK}ocmtQSAuoEcaFp~?m*9#@Ruk+dZJll zubXqug}x8l<@*)h&&-uMeQd!w&x*>#(PsUzplz!ibag z>svmSluf-_6^>uAiA-7{xAO@O;|ftSvJWfv!3 z?(2eiP>R#J!P7ew4l499!6#nsb;h`udY(Cxf~agkhdM%zh;aJe{fi7VZi@buV8}8R z>ZQRQ=FDq|{p)EesNHX{0s28mt5t%SQC1Ag{W;8Y$3{`}Ysi)rWMYvK2 zE%d=m+sSN5#wXOJ?qL9(nde$6y_+PKr;7`5k>&h|U}G$GjBpB!ocpl_yqi_m%}Vp@ zb8I{_N?>2WT=2E|-mB5+M_+RR{yt=p-l%7OxWQ9eDn3-d+4U_aACOL7G)pKlCF%() zfQ$fa9>u1Wf_@>CZCANcH@eeIQyA8vnd)&GZW4nA%u~Awur95sPxcxP(pQGMcH}fU zH*Q_Nag-^iX5bUrP4A&-9@uvLr5{5wV=E%a#7^C=LE7{X``wi?QlsC;nU0r=GY9%xc3euWPCnRKbL?CF zilWTB!}=1RFp9{*@eg^L2JN=|Ya>ogu3maPF%?JS+hBX3u%0UH(%|zzwM{v+!LZLw zpHNkJcee%*{4f8RGJ`%!1oqqDI>6)TiI6C5}bWUthrxCj%ArLk2cg*w>edkB(2 zc+3qbyEfsGz=GWs4_YAUWZZK91=hffuYoSbm#U~ACc<-c z)nsihpNSm5`uI{P*M95KvV7^;?qAqgYKzdOgUdFV?@k^L*Tp~FKFy)c*|$6krbwo zUmrSQfnVAubgg0#zfV#b@C<@exu&X~dvs9;zV&K0L2r9T6Um|U^a*ky!2_&E z9DWYjI2t|WmDoPv(CSU#(K>Q|6UlF-?}cLYE-E*J0$utaa1$W9S9 z=hIomyYR-?k9}u>kqDRQ@t9c}{ebhjeU!So|AAPZVbTKZCBmAZSAP`HovFLJvY)aA z!2=#RX@gl~!_}ul3Ya?J>Y%nI0G_6?Xm#JeV7rW|2155FXW+{(cVj)^ zM8j+lt)|HFxb<33&r=U2wo8CG2y*&QsY$V$UY{V2-A;2#oCHQ5P}G3RMF36eZKd2P%dL39WVa+^_u1t;sn3?jkpCl4X!P~f!(XJ5v7!A|9xP@^ z^Hra=^)aYoQ-~b%y+`L#Oz)~{4M`eZHnxpzH1#oA={%VgH7o3PN00Wfv@PqQWo3L| zcU7e6VK$cvC-V2Fd))xMrO!kNOqwuXpbD_UK zPh33nyPw@#7Cl6!=S`X54Yj`PDM^-8H#v(Rd)TEi`V+n*{R)c}bsSwVH@Ix^8pF=k zAOVnTf=kFvzn4BwFa(bxjHr;83D4?cma3gIWCJeY3qi2YdA`b3xw@o&nR$#7*zU<| zRN`<9QkiGGkUx3MnKunMW_cPq6rH8Z3L4%Gv(9Jg=|7LX*LHincILuc`!6bAnTD6& zyO6k4tpg>5GuZWiZJ>W-7xMKGx#jWxbJ6?o#jj&9y@gme#i|2P32jru%Z=rNI@!ns zVH?}nQ0o@iJ$8}z#`!HL#N*7YNlxilU;f2=7iw`n$cV9n*f#=7&G~Z*#b9W2g=vHa z>}CR+wweoqeiNKxPS(y`m=G@V?#1D)=mU1It$7wFT3|awZX@$!-gJ}K+LnHtWNK0ckZgcJj6wCeE{&{E zUvy*&4|SbiZ4~utgcW+w1&Gq~1HFAm(VNi^^p-oNE_*werpL$ih9G1Y`tkv4_%x%2 zk2Grd+*~H3$jRz$Sp!f=!0Wq+(l|xH7LP%#BIs~CJL)9LL@Bzh#)osv&>@g@XGy2c zgF62H?lr>O0dxJxCksP~sgRxmmYH3-ch`_J{VN>!rkRZ6Y|>s1#tA|P#f%h$k~hg3 z8*rxMMByp7rV%mp9X%!}1BRZ7?Wggj!})|#nk@+@4PSMunmjgfBgKppe-NvS6M}?F zv=pS0SsN>jyeegNMCio3DWf&DHMd<>@>E8P8=o?mUSxiQ+6z^I0%+@@)1w*X45389 zaZsNP4`jL8HxZCbXVyyUq69F?hIaWBnR^KU?4dK;Rdg90EhZvJ+?>EdVA0S!{R-W_ zs<_ruMq}XwGK;xGnZ71~`Lw~Nlh&i2H&J^HrSG=%@nhShMrByHtwvpQsaM`gh>`Vt zwSwcf*G);41@Fj7)xIzE%f3*|$#fO)FPLQ>ZDblZcot`^+I>~&>fV!f;wzdBM(b4S z6A$k80H{?Qon=}>M63E}O;>Nn`j!@xnlrMNn%q+oc{q(q&<1});Zyaet$Gfb=<|7bj(+0nyTU8CJDW6yJ;rsMfn*2?A7Zpqyu^8Ikr@zv*d ztuaj`PjR{E6RGIHf6-QlY@03#;*P&FU>t8;3VAjn?e^_*sAuQk;It9k><84uJ~uYu zL;cmnH5yxTcsp;YF>}|JR$g{(r*OK6Thi@%Do?2!G{BiUDhBJ3>gj+{>_-e%5I#gQ zqQgnZ{MnlUneHutBfQp_`yzb&K~9T^*&w8IG=68N^f}c*_TrgQu~B%EYVMhXh@+u! zT~jHGH#9U1XoxTEl;SC7dq@YWzb6!krDzb|$Zc2I@uqW5mF~LyT|}rlgyo(7otIQZ z{blEVHzz!VWf^~s?JA#Kx~eg;AiQ2g)Wg$l{1GKpB~c`W#5$~{2q)^`fA!8@XdS)>$sNeYg($#3HF#{C-_LLAtV0VzPRE4s5KLWqarTHwk);$+Plpp@2$Ru|w;q|; zw=9N+zpm5$c5mj#cFFjDB@pQjp1uJ3ylWPxj|B{9q_sR7+9hR+u%S`kFO9=2cTe2Y zLwERCAZm%bY|0U@6~yP(Z}9ZI%ro0Mcmr$N_IWze=N{^0KklV9Q8axf;PP%3#=*|w zl~FYU>L2~ngTRn^63{;h-lvMpv+6^}`1|v+BAASmR`r%Edwk}4D{!$pqDwGIAjxcd zHn%RL?I^L)lBXDzpMQ)d{)aK&==#g}kC`K=Z-37Jhj0J)QE8CIuk(GJGeNa!<{R|W z|2``98TfS`wS1JDrlGNwT+@e%*Iyj}-NYohN}T_Gg9eBd{{03;?TE2BGX+>uH%>%e zgmpF{TlA+Lac2Io2v_m(nCTxF>|e!>$x=HUS0_2mRKKjecZosw#=m@7qsa00)-NwP z&E!^R-u}Cn#h*Cd>Up1w(w=Dh)}XJE(p>NZ=KsqP1YFY-K%ALa3`;MAS~21IFeV*} zT6GHN?8QpV?XZ#q(u5R!9dJ_z>R7x+Eb;v~wRD@V-2MU<9(Q$|-ShDwvBY7q9bNywf`#ka9cL1sDWmJq5b}kZ z9wO?m;q=#VGTa}fOc8GIyW?k%w`Fwi%bAnEa&Ch(tdwMKodHrrIC!+Wj{257TctInV|WSu?Hx?tD4r+!7jKwlR(N`!hCNJJx%ECBB*D2R>|Hz4wP2}T z^=1;1LGuJsV}z$w<_Xxnkl}ORok<$j&t%K-!&zP5);AXLZ^c_?YHq#Yh^AAP%N0OGOYsUhV z@1`NEl{~t3e1>YrKX8Ql?w=}?>nEmD&Aq&!H=?UZ*pAGL<7;EnL3gJ$`OeMfPMCeYrlt}lQm2-x~88#UDV zK&{6g8}HXd&^$rj4IjpCb~N4NspXX}zk$#vf$jh!nv-k{_=v!zQ$6?V5{V(OuYRWX z85(5mMQOU*-do(@d5!a%i-W!A+41}>Fw1i zcU=?I$K~8M%U2%6)X+q_rC3QseYj~baJidjsjZcg^9val;tV;OaEw}IS2?KBt>eEY zn}WHgWOz2((d*zGxyWZH@|UqOz%?{}WRC3Ur89ey?!5ksR^v|k(745HD9XlM?hXH; z!bVh8-TUj<=^ZtHAXYb=wGh5|li=)8(!m^MRB^yr@McY);gmhBO(R8c2#YDVEqL4N z2{6^_mNVK&3?Vfy74p7q&d;>(^F&fd6qXFto9IaMFIv*>>9;A!79DLD5Q#5(wC zsR8nxh6=DJxFoosvktJ7&*8c)OvO8NkuF5#7@lrsD)2cGK0(TeN#ZIYlCHM?BIbu= z8Pgf6m=@;K?|7B%WemdbYyaGZ=PH#$Z}|#R~Ci z(ZPLsh#)iDl7y-W$e71`q8vt!3!koN%iL)|?2;}7nS8k1(!8=E61jKXe(qZ2F(p5b zSzv&{Hoo`GK7J)Yj6R1yAt&mj8Cq8Mdu-i5Gs8(*=z-=jTttOnlx=J+z0&GW%%+l- zOH*@6i?WHR;627jw;=z_u|yiwT+Aaz(V3m_`*uS)8U+w5+JEwx{0+BIgOeYx%_s&{ zjih0ysKI$_L!O2!flvFVNRI*T9Nc43up=R+hyf2CG3gysIw>~qbUfP`b00dO)|H;7 zWzxTT@mNkfbKYxKiSIM7e@Xek&tPOKJs9bDI$Kl$Z_LQscj9L-GS;yL zR7c;%q43@9AO~MEW92RI`)xo>X5P}N?f=91Z}`w9^{Vt|gFUslN<<~GY)l0N zWJ4wSORlHV1JL3kT-}oR9gvZZNlGKUl0V2nc9PB?@S-f6^VR`XL-1>0p2~eRYPG{F`*-C&Z%8}7(!6gsar8)Cy`9GMwMWG2 zD?QhCN}Ih(@i$osNj=>8L<=?6|Hy2r>f+HoiUvY2P8>?I$CDZ33`QOhL}w$(0wg~D>{uODTVQvIE0d#FwQ(%jJq+i(MK7~%*M$wu)E#P^GCnjpOBZu ze8>I=6w>(th5n>51_p=5-RL;y;7^?MXUwD5f(~Lr=pZH!1u-Hhh|#2HuKXEe^<|hp z5ULx_MiI)%p9tl|PlQs?XJlvl8$wZ5ZdvfL#R=#Z>el`pLdnjwf8hy!B9t~dLisZo z>`DI#KT=Tm;q^i6CO?uIpwMaX_9y(%U!!5EU5t9UQTP#!cl^!E&G!?2i2i^d z1{Q4esN6x>05mG6yB$k#szR+)d5l#Z)&$zEwwO+yUUD!R|qT9I3ymWiQ2Rw`q$x;_2mM{@I%`f&+{uSWR#gd zBxy}rFz6pu<{v{F!ppY#4;0=XmsiJ~8If1p*I9l2 zVSEPzUETjrQc!O>ZggV-p#-$GV+c z15FB#loMnTK+A8`O%W;oqrx^pz+`1=01<<` zT4`JW9r(|#a)hkE$J)j(5So(G$46-ddoZUi*qal=J1{YNn$u_V956Z#)!mlO-&2Ip zSKW59eg6GLX1P0hG1Z8`oMg?-WiN%i6;bC@-&BJDdZD};abo%lJqYtJ zLsyDV65^3mv;XG6{t>#8blUOLf&EXc0E9#N4GE0_%fIeYoe+A}Zs48x3!CqcT0v1X zu~O^SNq@tqYsC(oF>#L#K5_eI?>W?7b;ZC8Wl7f0$>j)I%|N#+oX$R;3U#^4=1`qw zugchMT;0)qk=e6Re4ou?B-Qj2nZ64=o-We8jza76jJ>6M(F$WDV_?jwACwm7DZ+T` zxr|mJSZFZ6OXD|O-Y|R)U)%*3`P?=3xvM}Dij72zX<7cO2Dj;N#k2=n&>GxRKWcEZ z(INhGB;>yd2{6u)RA6w~f4!U7H;=y#F0xj<-F&JxL(Qy5(rvsn7;riv)L;XpgMF(r zE((Ja#k}*JI>3I?D1-_zC}5aXN_rpp6{6{F{0aRd{i^tq!hzk@4IPkDFAUo+;7xD> z%#&9J^48D$>-Y`{(s0g5Q>X9k&1Z%&2+HbTUxJ9H$>9r0yBA`1G2jvN)7M&9bRmMX z<#I;kVLP=|sRORMg%#*k1ET3MRIC}4*{D}zd9WNc>Hoq~gOg?^ztiRM*Dp8OaOuQX z%6rpCk0`>`jh~a6pPJ-xqjK?AE~oX(KT#FGCknB3%a8Clo?fh#cQ5sWJFE{nH{^c{ zk4t9(?z~;4sJ9|LrU+gIL(lu7fAdy2Vpbu2)LSt~Uyc8uc#~{QJn_|+zLJ*0)uZ&4 zwhntV0U-G(M{% zPq|@s{D#-cnA}Px&A^$lBq${1Smm3KCC!`yHDNNlqX?`12d5uMHY8M$#PXRwXKiaQ zP<3nM>u0l3Oih(a##92Hc7>+rmQEaP=f|T_BzR_)vkpN^BW$Vb+-e0@Xq;>5&D48c zS>37Oha{AXBeq>1pOoh&HRmMT4K}YFvU}$}6h}iFT$21k`1FPUQCU>~P!?{fzR~Ed zDm66KFyi=6W#I<@%mU}4XMx|u$)lmD?7zB;AYMG$8S{_bPq1 zpDRAxkqIhO->UAcXDuKpf8b)8mq|9`TlYY7@*^Zgfn%%oCL=aEbwQqJom2_D43w#_ ze2BE4rp(kI|IWk6GnNb?4yBnSzhlCDa2YAc8h~ z+#U<#7F0u*)@+)mXGmtiuJln5?*z~>25o+8X^xh?h|vxxvWjp| zJ0@kq2Y^8~RK-U1QHc$#MR)bzJA^jyXo*wY1)j?;257k>3mQKAh4pIdmd9S9TxfYK ziNv8o!d_e;2}&H#W}wn5mC(P>No?t8h37;E`qxcAn{w?`U~79n!V&B=eleS|UkUX=o3a1;wkdble@+~(Cm0fb z=g4sVwquJ%NTTQIMwBg=ahJSrPN!E4(LBgXNeJk4M7+9$TjX6$)?{=9-%QmAC>Nx}1-0h=dkW_vgJf9$3GpYJ8T zO*Q|emC%v0I$=Jy>(d*YTBv06X}8E{;9Ks@G7|c0RC~D2#6Qx|9@>CYmGvAr7f?aAZ3O#Ko_q|Jev}Ov2*H0}Hq^BUqh&)c(7SdZ^T;J# zOzhN-%w3p7q$rh`&92Lkd6^K~k4ZV{d*99(51&owqu=yJzY*x4-t-l-c9$Q$6fSW| z{(oNz$LTGCmewf;mfin(DO@{xDO?5s*5@4zWJ&y^M#B~$O99sHvnaEafuw2~r45y; zA%6vI^WJN%FCPKsJF;q-g{&{B&!vEVHYDa&X)cw4WLPt(l<|#$rfhiXqN4+MC4%)X zHa9R~JcAZjB7{MZs%R;hp-5Ro?o z?M42oDUC6hM?k>F++zVT9fY)<(srKE4+qkg7NRan7i68Mc=CtyKVy%io;JJy9Q}7j zw7|Hk5eXF4NC5G)wybQa^zCPg+q1f7)Ul+sqoOHjvGD*O?kZ3jUK-oI7C3#v`~HK#oqU_u z^}dL3iokFJvIA<5A37%BXH8@clH8qLvcd{mkvOfg^Q=|xxG>S#>5LD{82K__Rd9C2 zLL(#0?sMFl$!q%%|CiD;8E*!OAEf3A>R&g8aC==EKR0@#{A#FHg%$bx?Q-eO%62Dt zCM+LzR4KVW2tivc*%xnF@7Ij=;;kYnw6~o@v?8yunU*y7ZQv`C`1(h(~G9 z5xY-|jR&F^$5 ze&b0QTb=jdtHXuplmDc$z@yD2l(*5^>(H~t37*pLnwaxfwnQCY_CFN#DVc>=5o=0A z>*|air1y6b7PW0ma5iB7F$-SAFdZ`;w%C2F5a*3_#`(d*86p-vFet>O(?9;rUc-QCXBqgtH zMIHj^Wh|+mAr%q$&a%OuAZ9}%n1DVT!whhiBzP02u$LrO&DxwM+tztF{PT;w?TExG zvUyQ8Z{yUb*>g@XdZ8)hXL+Uw^DNW5*%Ny{U(cO8Pl9bpQfZkLQl3q|rS3-5KJqI^_z1uT3RRk> k>x=b?mI3?~&=6duT78Xq%#U?KFZ0+Wg;Hh~gS+;>09qy~#Q*>R diff --git a/internal/plugin/ming/dummy.go b/internal/plugin/ming/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/ming/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/ming/gvplugin_ming.c b/internal/plugin/ming/gvplugin_ming.c deleted file mode 100644 index 7f5e5b9..0000000 --- a/internal/plugin/ming/gvplugin_ming.c +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvrender_ming_types[]; -extern gvplugin_installed_t gvdevice_ming_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_ming_types}, - {API_render, gvrender_ming_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_ming_LTX_library = { "ming", apis }; diff --git a/internal/plugin/ming/gvrender_ming.c b/internal/plugin/ming/gvrender_ming.c deleted file mode 100644 index 5d57452..0000000 --- a/internal/plugin/ming/gvrender_ming.c +++ /dev/null @@ -1,313 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include "gvplugin_render.h" - -/* from config.h - would conflict with ming.h definitions */ -#undef PACKAGE -#undef PACKAGE_NAME -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME -#undef PACKAGE_VERSION -#undef VERSION - -#include - -//static char *script = -// "createTextField(\"greet\", 0, 0, 0, 100, 100);\n" -// "greet.text = \"Hello, world!\";\n"; - -#define SWFVERSION 6 -#define SWFCOMPRESSION 9 -#define SWFFRAMERATE .5 - -typedef enum { FORMAT_SWF } format_type; - -static void ming_begin_job(GVJ_t * job) -{ - SWFMovie movie; - SWFAction action; - - Ming_init(); - Ming_useSWFVersion(SWFVERSION); - Ming_setSWFCompression(SWFCOMPRESSION); - movie = newSWFMovie(); - SWFMovie_setRate(movie, SWFFRAMERATE); - SWFMovie_setDimension(movie, job->width, job->height); - -// Works, but why is it here? -// action = newSWFAction(script); -// SWFMovie_add(movie, (SWFBlock)action); - - job->context = (void*) movie; -} - -static void ming_end_job(GVJ_t * job) -{ - SWFMovie movie = (SWFMovie)(job->context); - - SWFMovie_output_to_stream(movie, job->output_file); - destroySWFMovie(movie); -// destroySWFAction(action); - job->context = NULL; -} - -static void ming_begin_page(GVJ_t * job) -{ -// SWFMovie movie = (SWFMovie)(job->context); - -// SWFMovie_setNumberOfFrames(movie, job->common->viewNum + 1); - -#if 0 - cairo_scale(cr, job->scale.x, job->scale.y); - cairo_rotate(cr, -job->rotation * M_PI / 180.); - cairo_translate(cr, job->translation.x, -job->translation.y); -#endif -} - -static void ming_end_page(GVJ_t * job) -{ - SWFMovie movie = (SWFMovie)(job->context); - - SWFMovie_nextFrame(movie); -} - -extern char* gvconfig_libdir(void); -#define FONT "Bitstream_Vera_Serif.fdb" - -static void ming_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - SWFMovie movie = (SWFMovie)(job->context); - SWFTextField textfield; - SWFDisplayItem item; - obj_state_t *obj = job->obj; - gvcolor_t pencolor = obj->pencolor; - pointf offset; - char *font_file_name; - char *libdir; - static SWFFont font; - -/* FIXME - hardcoded to a Times-like font */ - if (font == NULL) { - libdir=gvconfig_libdir(); - font_file_name = malloc(strlen(libdir)+strlen(FONT)+2); - strcpy(font_file_name, libdir); - strcat(font_file_name, "/"); - strcat(font_file_name, FONT); - font = newSWFFont_fromFile(font_file_name); - free(font_file_name); - } - - textfield = newSWFTextField(); - SWFTextField_setFont(textfield, (SWFBlock)font); - SWFTextField_addChars(textfield, span->str); - SWFTextField_addUTF8String(textfield, span->str); - SWFTextField_setColor(textfield, - pencolor.u.rgba[0], - pencolor.u.rgba[1], - pencolor.u.rgba[2], - pencolor.u.rgba[3]); - SWFTextField_setHeight(textfield, span->font->size); - - switch (span->just) { - case 'r': - offset.x = 0.; - break; - case 'l': - offset.x = -span->size.x; - break; - case 'n': - default: - offset.x = -span->size.x/2.; - break; - } - /* offset to baseline */ - offset.y = -span->size.y + span->font->size*.4; /* empirically determined */ - - item = SWFMovie_add(movie, (SWFBlock)textfield); - SWFDisplayItem_moveTo(item, p.x + offset.x, p.y + offset.y); -} - -static void ming_ellipse(GVJ_t * job, pointf * A, int filled) -{ - SWFMovie movie = (SWFMovie)(job->context); - SWFShape shape; - SWFFill fill; - SWFDisplayItem item; - obj_state_t *obj = job->obj; - gvcolor_t pencolor = obj->pencolor; - gvcolor_t fillcolor = obj->fillcolor; - double rx, ry; - - shape = newSWFShape(); - SWFShape_setLine(shape, obj->penwidth, - pencolor.u.rgba[0], - pencolor.u.rgba[1], - pencolor.u.rgba[2], - pencolor.u.rgba[3]); - if (filled) { - fill = SWFShape_addSolidFill(shape, - fillcolor.u.rgba[0], - fillcolor.u.rgba[1], - fillcolor.u.rgba[2], - fillcolor.u.rgba[3]); - SWFShape_setRightFill(shape, fill); - } - SWFShape_movePenTo(shape, 0, 0); - rx = A[1].x - A[0].x; - ry = A[1].y - A[0].y; - SWFShape_drawCircle(shape, rx); - item = SWFMovie_add(movie, (SWFBlock)shape); - SWFDisplayItem_scale(item, 1., ry/rx); - SWFDisplayItem_moveTo(item, A[0].x, A[0].y); -} - -static void -ming_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - SWFMovie movie = (SWFMovie)(job->context); - SWFShape shape; - SWFFill fill; - obj_state_t *obj = job->obj; - gvcolor_t pencolor = obj->pencolor; - gvcolor_t fillcolor = obj->fillcolor; - int i; - - shape = newSWFShape(); - SWFShape_setLine(shape, obj->penwidth, - pencolor.u.rgba[0], - pencolor.u.rgba[1], - pencolor.u.rgba[2], - pencolor.u.rgba[3]); - if (filled) { - fill = SWFShape_addSolidFill(shape, - fillcolor.u.rgba[0], - fillcolor.u.rgba[1], - fillcolor.u.rgba[2], - fillcolor.u.rgba[3]); - SWFShape_setRightFill(shape, fill); - } - SWFShape_movePenTo(shape, A[0].x, A[0].y); - for (i = 1; i < n; i++) - SWFShape_drawLineTo(shape, A[i].x, A[i].y); - SWFShape_drawLineTo(shape, A[0].x, A[0].y); - SWFMovie_add(movie, (SWFBlock)shape); -} - -static void -ming_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - SWFMovie movie = (SWFMovie)(job->context); - SWFShape shape; - obj_state_t *obj = job->obj; - gvcolor_t pencolor = obj->pencolor; - int i; - - shape = newSWFShape(); - SWFShape_setLine(shape, obj->penwidth, - pencolor.u.rgba[0], - pencolor.u.rgba[1], - pencolor.u.rgba[2], - pencolor.u.rgba[3]); - SWFShape_movePenTo(shape, A[0].x, A[0].y); - for (i = 1; i < n; i+=3) - SWFShape_drawCubicTo(shape, - A[i].x, A[i].y, A[i+1].x, A[i+1].y, A[i+2].x, A[i+2].y); - SWFMovie_add(movie, (SWFBlock)shape); -} - -static void -ming_polyline(GVJ_t * job, pointf * A, int n) -{ - SWFMovie movie = (SWFMovie)(job->context); - SWFShape shape; - obj_state_t *obj = job->obj; - gvcolor_t pencolor = obj->pencolor; - int i; - - shape = newSWFShape(); - SWFShape_setLine(shape, obj->penwidth, - pencolor.u.rgba[0], - pencolor.u.rgba[1], - pencolor.u.rgba[2], - pencolor.u.rgba[3]); - SWFShape_movePenTo(shape, A[0].x, A[0].y); - for (i = 1; i < n; i++) - SWFShape_drawLineTo(shape, A[i].x, A[i].y); - SWFMovie_add(movie, (SWFBlock)shape); -} - -static gvrender_engine_t ming_engine = { - ming_begin_job, - ming_end_job, - 0, /* ming_begin_graph */ - 0, /* ming_end_graph */ - 0, /* ming_begin_layer */ - 0, /* ming_end_layer */ - ming_begin_page, - ming_end_page, - 0, /* ming_begin_cluster */ - 0, /* ming_end_cluster */ - 0, /* ming_begin_nodes */ - 0, /* ming_end_nodes */ - 0, /* ming_begin_edges */ - 0, /* ming_end_edges */ - 0, /* ming_begin_node */ - 0, /* ming_end_node */ - 0, /* ming_begin_edge */ - 0, /* ming_end_edge */ - 0, /* ming_begin_anchor */ - 0, /* ming_end_anchor */ - 0, /* ming_begin_label */ - 0, /* ming_end_label */ - ming_textspan, - 0, /* ming_resolve_color */ - ming_ellipse, - ming_polygon, - ming_bezier, - ming_polyline, - 0, /* ming_comment */ - 0, /* ming_library_shape */ -}; - -static gvrender_features_t render_features_ming = { - GVRENDER_Y_GOES_DOWN, /* flags */ - 4., /* default pad - graph units */ - 0, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -static gvdevice_features_t device_features_ming = { - GVDEVICE_DOES_PAGES - | GVDEVICE_NO_WRITER - | GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* default dpi */ -}; - -gvplugin_installed_t gvrender_ming_types[] = { - {FORMAT_SWF, "ming", 10, &ming_engine, &render_features_ming}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_ming_types[] = { - {FORMAT_SWF, "swf:ming", 10, NULL, &device_features_ming}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/neato_layout/dummy.go b/internal/plugin/neato_layout/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/neato_layout/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/neato_layout/gvlayout_neato_layout.c b/internal/plugin/neato_layout/gvlayout_neato_layout.c deleted file mode 100644 index 4e345fa..0000000 --- a/internal/plugin/neato_layout/gvlayout_neato_layout.c +++ /dev/null @@ -1,154 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -/* - * neato layout plugin - * - */ - - -#include "config.h" - -#include - -#include "gvplugin_layout.h" - -/* FIXME - globals.h is needed for Nop */ -#include "globals.h" - - -#ifdef WIN32 //*dependencies - #pragma comment( lib, "cgraph.lib" ) - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "pathplan.lib" ) - #pragma comment( lib, "neatogen.lib" ) - #pragma comment( lib, "circogen.lib" ) - #pragma comment( lib, "twopigen.lib" ) - #pragma comment( lib, "fdpgen.lib" ) - #pragma comment( lib, "sparse.lib" ) - #pragma comment( lib, "cdt.lib" ) - //#pragma comment( lib, "gts.lib" ) - #pragma comment( lib, "glib-2.0.lib" ) - #pragma comment( lib, "vpsc.lib" ) - #pragma comment( lib, "patchwork.lib" ) - #pragma comment( lib, "gvortho.lib" ) -#endif - - -typedef enum { LAYOUT_NEATO, - LAYOUT_FDP, - LAYOUT_SFDP, - LAYOUT_TWOPI, - LAYOUT_CIRCO, - LAYOUT_PATCHWORK, - LAYOUT_CLUSTER, - LAYOUT_NOP1, - LAYOUT_NOP2, - } neato_layout_type; - -extern void neato_layout(graph_t * g); -extern void fdp_layout(graph_t * g); -extern void sfdp_layout(graph_t * g); -extern void twopi_layout(graph_t * g); -extern void circo_layout(graph_t * g); -extern void patchwork_layout(graph_t * g); -extern void osage_layout(graph_t * g); - -extern void neato_cleanup(graph_t * g); -extern void fdp_cleanup(graph_t * g); -extern void sfdp_cleanup(graph_t * g); -extern void twopi_cleanup(graph_t * g); -extern void circo_cleanup(graph_t * g); -extern void patchwork_cleanup(graph_t * g); -extern void osage_cleanup(graph_t * g); - -static void nop1_layout(graph_t * g) -{ - Nop = 1; - neato_layout(g); - Nop = 0; -} - -static void nop2_layout(graph_t * g) -{ - Nop = 2; - neato_layout(g); - Nop = 0; -} - -gvlayout_engine_t neatogen_engine = { - neato_layout, - neato_cleanup, -}; - -gvlayout_engine_t fdpgen_engine = { - fdp_layout, - fdp_cleanup, -}; - -#ifdef SFDP -gvlayout_engine_t sfdpgen_engine = { - sfdp_layout, - sfdp_cleanup, -}; -#endif - -gvlayout_engine_t twopigen_engine = { - twopi_layout, - twopi_cleanup, -}; - -gvlayout_engine_t circogen_engine = { - circo_layout, - circo_cleanup, -}; - -gvlayout_engine_t nop1gen_engine = { - nop1_layout, - neato_cleanup, -}; - -gvlayout_engine_t nop2gen_engine = { - nop2_layout, - neato_cleanup, -}; - -gvlayout_engine_t patchwork_engine = { - patchwork_layout, - patchwork_cleanup, -}; - -gvlayout_engine_t osage_engine = { - osage_layout, - osage_cleanup, -}; - -gvlayout_features_t neatogen_features = { - 0, -}; - -gvplugin_installed_t gvlayout_neato_types[] = { - {LAYOUT_NEATO, "neato", 0, &neatogen_engine, &neatogen_features}, - {LAYOUT_FDP, "fdp", 0, &fdpgen_engine, &neatogen_features}, -#ifdef SFDP - {LAYOUT_SFDP, "sfdp", 0, &sfdpgen_engine, &neatogen_features}, -#endif - {LAYOUT_TWOPI, "twopi", 0, &twopigen_engine, &neatogen_features}, - {LAYOUT_CIRCO, "circo", 0, &circogen_engine, &neatogen_features}, - {LAYOUT_PATCHWORK, "patchwork", 0, &patchwork_engine, &neatogen_features}, - {LAYOUT_CLUSTER, "osage", 0, &osage_engine, &neatogen_features}, - {LAYOUT_NOP1, "nop", 0, &nop1gen_engine, &neatogen_features}, - {LAYOUT_NOP1, "nop1", 0, &nop1gen_engine, &neatogen_features}, - {LAYOUT_NOP1, "nop2", 0, &nop2gen_engine, &neatogen_features}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/neato_layout/gvplugin_neato_layout.c b/internal/plugin/neato_layout/gvplugin_neato_layout.c deleted file mode 100644 index bad860d..0000000 --- a/internal/plugin/neato_layout/gvplugin_neato_layout.c +++ /dev/null @@ -1,36 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvlayout_neato_types[]; - -static gvplugin_api_t neato_apis[] = { - {API_layout, gvlayout_neato_types}, - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL /*visual studio*/ -#ifndef GVPLUGIN_NEATO_LAYOUT_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_neato_layout_LTX_library = { "neato_layout", neato_apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_neato_layout_LTX_library = { "neato_layout", neato_apis }; -#endif -#else /*end visual studio*/ -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_neato_layout_LTX_library = { "neato_layout", neato_apis }; -#else -gvplugin_library_t gvplugin_neato_layout_LTX_library = { "neato_layout", neato_apis }; -#endif -#endif - diff --git a/internal/plugin/pango/dummy.go b/internal/plugin/pango/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/pango/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/pango/gvgetfontlist.h b/internal/plugin/pango/gvgetfontlist.h deleted file mode 100644 index d22bd81..0000000 --- a/internal/plugin/pango/gvgetfontlist.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef _GVGETFONTLIST_H -#define _GVGETFONTLIST_H - -#ifdef HAVE_PANGOCAIRO -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char* gv_ps_fontname; - char* gv_font; -} gv_font_map; - -extern gv_font_map* get_font_mapping(PangoFontMap * pfm); - -#ifdef __cplusplus -} -#endif - -#endif /* HAVE_PANGOCAIRO */ - -#endif /* _GVGETFONTLIST_H */ diff --git a/internal/plugin/pango/gvgetfontlist_pango.c b/internal/plugin/pango/gvgetfontlist_pango.c deleted file mode 100644 index 1ea31e2..0000000 --- a/internal/plugin/pango/gvgetfontlist_pango.c +++ /dev/null @@ -1,574 +0,0 @@ -/* $Id$Revision: */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include - -/* FIXME - the following declaration should be removed - * when configure is coordinated with flags passed to the - * compiler. On Linux, strcasestr is defined but needs a special - * preprocessor constant to be defined. Configure sets the - * HAVE_STRCASESTR, but the flag is not used during compilation, - * so strcasestr is undeclared. - */ -char* strcasestr (const char *str, const char *pat); -#ifndef HAVE_STRCASESTR -char* strcasestr (const char *str, const char *pat) -{ - int slen, plen; - char p0, pc; - const char *endp, *sp, *pp; - if (!(p0 = *pat)) return (char*)str; - plen = strlen (pat++); - slen = strlen (str); - if (slen < plen) return NULL; - endp = str + slen - plen; - p0 = toupper (p0); - do { - while ((str <= endp) && (p0 != toupper(*str))) str++; - if (str > endp) return NULL; - pp = pat; - sp = ++str; - while ((pc = *pp++) && (toupper(pc) == toupper(*sp))) sp++; - } while (pc); - return (char*)(str-1); -} - -#endif - -#include "agxbuf.h" -#include "gvplugin_textlayout.h" -#ifdef HAVE_PANGOCAIRO -#include -#include "gvgetfontlist.h" -#endif - -extern unsigned char Verbose; - -#define FNT_BOLD 1<<0 -#define FNT_BOOK 1<<1 -#define FNT_CONDENSED 1<<2 -#define FNT_DEMI 1<<3 -#define FNT_EXTRALIGHT 1<<4 -#define FNT_ITALIC 1<<5 -#define FNT_LIGHT 1<<6 -#define FNT_MEDIUM 1<<7 -#define FNT_OBLIQUE 1<<8 -#define FNT_REGULAR 1<<9 -#define FNT_ROMAN 1<<9 - -#define PS_AVANTGARDE "AvantGarde" -#define PS_BOOKMAN "Bookman" -#define PS_COURIER "Courier" -#define PS_HELVETICA SAN_5 -#define PS_NEWCENTURYSCHLBK "NewCenturySchlbk" -#define PS_PALATINO "Palatino" -#define PS_SYMBOL "Symbol" -#define PS_TIMES SER_3 -#define PS_CHANCERY "ZapfChancery" -#define PS_DINGBATS "ZapfDingbats" - -#define FNT_BOLD_ST "BOLD" -#define FNT_BOOK_ST "BOOK" -#define FNT_CONDENSED_ST "CONDENSED" -#define FNT_DEMI_ST "DEMI" -#define FNT_EXTRALIGHT_ST "EXTRALIGHT" -#define FNT_ITALIC_ST "ITALIC" -#define FNT_LIGHT_ST "LIGHT" -#define FNT_MEDIUM_ST "MEDIUM" -#define FNT_OBLIQUE_ST "OBLIQUE" -#define FNT_REGULAR_ST "REGULAR" -#define FNT_ROMAN_ST "ROMAN" - -#define SAN_0 "sans" -#define SAN_1 "URW Gothic L" -#define SAN_2 "Charcoal" -#define SAN_3 "Nimbus Sans L" -#define SAN_4 "Verdana" -#define SAN_5 "Helvetica" -#define SAN_6 "Bitstream Vera Sans" -#define SAN_7 "DejaVu Sans" -#define SAN_8 "Liberation Sans" -#define SAN_9 "Luxi Sans" -#define SAN_10 "FreeSans" -#define SAN_11 "Arial" - -#define SER_0 "serif" -#define SER_1 "URW Bookman L" -#define SER_2 "Times New Roman" -#define SER_3 "Times" -#define SER_4 "Nimbus Roman No9 L" -#define SER_5 "Bitstream Vera Serif" -#define SER_6 "DejaVu Serif" -#define SER_7 "Liberation Serif" -#define SER_8 "Luxi Serif" -#define SER_9 "FreeSerif" -#define SER_10 "Century Schoolbook L" -#define SER_11 "Charcoal" -#define SER_12 "Georgia" -#define SER_13 "URW Palladio L" -#define SER_14 "Norasi" -#define SER_15 "Rekha" -#define SER_16 "URW Chancery L" - -#define MON_0 "monospace" -#define MON_1 "Nimbus Mono L" -#define MON_2 "Inconsolata" -#define MON_3 "Courier New" -#define MON_4 "Bitstream Vera Sans Mono" -#define MON_5 "DejaVu Sans Mono" -#define MON_6 "Liberation Mono" -#define MON_7 "Luxi Mono" -#define MON_8 "FreeMono" - -#define SYM_0 "fantasy" -#define SYM_1 "Impact" -#define SYM_2 "Copperplate Gothic Std" -#define SYM_3 "Cooper Std" -#define SYM_4 "Bauhaus Std" - -#define DING_0 "fantasy" -#define DING_1 "Dingbats" -#define DING_2 "Impact" -#define DING_3 "Copperplate Gothic Std" -#define DING_4 "Cooper Std" -#define DING_5 "Bauhaus Std" - - -typedef struct { - int flag; - char* name; -} face_t; -static face_t facelist[] = { - { FNT_BOLD, FNT_BOLD_ST}, - { FNT_BOOK, FNT_BOOK_ST}, - { FNT_CONDENSED, FNT_CONDENSED_ST}, - { FNT_DEMI, FNT_DEMI_ST}, - { FNT_EXTRALIGHT, FNT_EXTRALIGHT_ST}, - { FNT_ITALIC, FNT_ITALIC_ST}, - { FNT_LIGHT, FNT_LIGHT_ST}, - { FNT_MEDIUM, FNT_MEDIUM_ST}, - { FNT_OBLIQUE, FNT_OBLIQUE_ST}, - { FNT_REGULAR, FNT_REGULAR_ST}, - { FNT_ROMAN, FNT_ROMAN_ST}, -}; -#define FACELIST_SZ (sizeof(facelist)/sizeof(face_t)) - -/* This is where the hierarchy of equivalent fonts is established. The order can be changed - here or new equivalent fonts can be added here. Each font family used by the Graphviz - PS fonts is set up. -*/ -static const char *PS_AVANT_E[] = { - SAN_1, SAN_2, SAN_3, SAN_4, SAN_5, SAN_6, SAN_7, SAN_8, SAN_9, SAN_10 -}; -#define PS_AVANT_E_SZ (sizeof(PS_AVANT_E) / sizeof(char *)) - -static const char *PS_BOOKMAN_E[] = { - SER_1, SER_2, SER_3, SER_4, SER_5, SER_6, SER_7, SER_8, SER_9 -}; -#define PS_BOOKMAN_E_SZ (sizeof(PS_BOOKMAN_E) / sizeof(char *)) - -static const char *PS_COURIER_E[] = { - MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7, MON_8 -}; -#define PS_COURIER_E_SZ (sizeof(PS_COURIER_E) / sizeof(char *)) - -static const char *PS_HELVETICA_E[] = { - SAN_3, SAN_11, SAN_4, SAN_6, SAN_7, SAN_8, SAN_9, SAN_10 -}; -#define PS_HELVETICA_E_SZ (sizeof(PS_HELVETICA_E) / sizeof(char *)) - -static const char *PS_NEWCENT_E[] = { - SER_10, SER_2, SER_3, SER_4, SER_12, SER_5, SER_6, SER_7, SER_8, SER_9 -}; -#define PS_NEWCENT_E_SZ (sizeof(PS_NEWCENT_E) / sizeof(char *)) - -static const char *PS_PALATINO_E[] = { - SER_13, SER_2, SER_3, SER_4, SER_14, SER_15, SER_5, SER_6, SER_7, SER_8, SER_9 -}; -#define PS_PALATINO_E_SZ (sizeof(PS_PALATINO_E) / sizeof(char *)) - -static const char *PS_TIMES_E[] = { - SER_4, SER_2, SER_11, SER_5, SER_6, SER_7, SER_8, SER_9 -}; -#define PS_TIMES_E_SZ (sizeof(PS_TIMES_E) / sizeof(char *)) - -static const char *PS_SYMBOL_E[] = { SYM_1, SYM_2, SYM_3, SYM_4 }; -#define PS_SYMBOL_E_SZ (sizeof(PS_SYMBOL_E) / sizeof(char *)) - -static const char *PS_CHANCERY_E[] = { - SER_16, SER_11, SER_2, SER_3, SER_4, SER_5, SER_6, SER_7, SER_8, SER_9 -}; -#define PS_CHANCERY_E_SZ (sizeof(PS_CHANCERY_E) / sizeof(char *)) - -static const char *PS_DINGBATS_E[] = { DING_1, SYM_1, SYM_2, SYM_3, SYM_4 }; -#define PS_DINGBATS_E_SZ (sizeof(PS_DINGBATS_E) / sizeof(char *)) - -typedef struct { - char *generic_name; - char *fontname; - int eq_sz; - const char **equiv; -} fontdef_t; - -/* array of recognized Graphviz PS font names */ -static fontdef_t gv_ps_fontdefs[] = { - { SAN_0, PS_AVANTGARDE, PS_AVANT_E_SZ, PS_AVANT_E}, - { SER_0, PS_BOOKMAN, PS_BOOKMAN_E_SZ, PS_BOOKMAN_E}, - { MON_0, PS_COURIER, PS_COURIER_E_SZ, PS_COURIER_E}, - { SAN_0, PS_HELVETICA, PS_HELVETICA_E_SZ, PS_HELVETICA_E}, - { SER_0, PS_NEWCENTURYSCHLBK, PS_NEWCENT_E_SZ, PS_NEWCENT_E}, - { SER_0, PS_PALATINO, PS_PALATINO_E_SZ, PS_PALATINO_E}, - { SYM_0, PS_SYMBOL, PS_SYMBOL_E_SZ, PS_SYMBOL_E}, - { SER_0, PS_TIMES, PS_TIMES_E_SZ, PS_TIMES_E}, - { SER_0, PS_CHANCERY, PS_CHANCERY_E_SZ, PS_CHANCERY_E}, - { DING_0, PS_DINGBATS, PS_DINGBATS_E_SZ, PS_DINGBATS_E}, -}; -#define GV_FONT_LIST_SIZE (sizeof(gv_ps_fontdefs)/sizeof(fontdef_t)) - -typedef struct { - char *gv_ps_fontname; - char *fontname; - int faces; -} availfont_t; - -#define NEW(t) (t*)malloc(sizeof(t)) -#define N_NEW(n,t) (t*)malloc((n)*sizeof(t)) - -static PostscriptAlias postscript_alias[] = { -#include "ps_font_equiv.h" -}; - -/* Frees memory used by the available system font definitions */ -static void gv_flist_free_af(availfont_t* gv_af_p) -{ - int i; - - for (i = 0; i < GV_FONT_LIST_SIZE; i++) { - if (gv_af_p[i].fontname) - free(gv_af_p[i].fontname); - } - free(gv_af_p); -} - -static int get_faces(PangoFontFamily * family) -{ - PangoFontFace **faces; - PangoFontFace *face; - int i, j, n_faces; - const char *name; - int availfaces = 0; - /* Get the faces (Bold, Italic, etc.) for the current font family */ - pango_font_family_list_faces(family, &faces, &n_faces); - for (i = 0; i < n_faces; i++) { - face = faces[i]; - name = pango_font_face_get_face_name(face); - - /* if the family face type is one of the known types, logically OR the known type value - to the available faces integer */ - for (j = 0; j < FACELIST_SZ; j++) { - if (strcasestr(name, facelist[j].name)) { - availfaces |= facelist[j].flag; - break; - } - } - } - g_free(faces); - return availfaces; -} - -#ifdef DEBUG -static void -display_available_fonts(availfont_t* gv_af_p) -{ - int i, j, faces; - -/* Displays the Graphviz PS font name, system available font name and associated faces */ - for (j = 0; j < GV_FONT_LIST_SIZE; j++) { - if ((gv_af_p[j].faces == 0) || (gv_af_p[j].fontname == NULL)) { - fprintf (stderr, "ps font = %s not available\n", gv_ps_fontdefs[j].fontname); - continue; - } - fprintf (stderr, "ps font = %s available %d font = %s\n", - gv_ps_fontdefs[j].fontname, gv_af_p[j].faces, gv_af_p[j].fontname); - faces = gv_af_p[j].faces; - for (i = 0; i < FACELIST_SZ; i++) { - if (faces & facelist[i].flag) - fprintf (stderr, "\t%s\n", facelist[i].name); - } - } -} -#endif - -/* Construct the list of font faces */ -static char *get_avail_faces(int faces, agxbuf* xb) -{ - int i; - for (i = 0; i < FACELIST_SZ; i++) { - if (faces & facelist[i].flag) { - agxbput (xb, facelist[i].name); - agxbputc(xb, ' '); - } - } - return agxbuse (xb); -} - - -/* This function creates an array of font definitions. Each entry corresponds to one of - the Graphviz PS fonts. The font definitions contain the generic font name and a list - of equivalent fonts that can be used in place of the PS font if the PS font is not - available on the system -*/ -static availfont_t *gv_get_ps_fontlist(PangoFontMap * fontmap) -{ - PangoFontFamily **families; - PangoFontFamily *family; - fontdef_t* gv_ps_fontdef; - int n_families; - int i, j, k, array_sz, availfaces; - availfont_t *gv_af_p, *gv_afs; - const char *name; - char *family_name; - - /* Get a list of font families installed on the system */ - pango_font_map_list_families(fontmap, &families, &n_families); - - /* Setup a pointer to available font structs */ - gv_af_p = N_NEW(GV_FONT_LIST_SIZE, availfont_t); - - for (j = 0; j < GV_FONT_LIST_SIZE; j++) { - /* get the Graphviz PS font information and create the - available font definition structs */ - gv_afs = gv_af_p+j; - gv_ps_fontdef = gv_ps_fontdefs+j; - gv_afs->gv_ps_fontname = gv_ps_fontdef->fontname; - family_name = NULL; - /* Search the installed system font families for the current - Graphvis PS font family name, i.e. AvantGarde */ - for (i = 0; i < n_families; i++) { - family = families[i]; - name = pango_font_family_get_name(family); - /* if a match is found get the installed font faces */ - if (strcasecmp(gv_ps_fontdef->fontname, name) == 0) { - family_name = strdup(name); - availfaces = get_faces(family); - } - if (family_name) - break; - } - /* if a match is not found on the primary Graphviz font family, - search for a match on the equivalent font family names */ - if (!family_name) { - array_sz = gv_ps_fontdef->eq_sz; - for (k = 0; k < array_sz; k++) { - for (i = 0; i < n_families; i++) { - family = families[i]; - name = pango_font_family_get_name(family); - if (strcasecmp(gv_ps_fontdef->equiv[k], name) == 0) { - family_name = strdup(name); - availfaces = get_faces(family); - break; - } - } - if (family_name) - break; - } - } - /* if a match is not found on the equivalent font family names, search - for a match on the generic family name assigned to the Graphviz PS font */ - if (!family_name) { - for (i = 0; i < n_families; i++) { - family = families[i]; - name = pango_font_family_get_name(family); - if (strcasecmp(gv_ps_fontdef->generic_name, name) == 0) { - family_name = strdup(name); - availfaces = get_faces(family); - break; - } - } - } - /* if not match is found on the generic name, set the available font - name to NULL */ - if (family_name && availfaces) { - gv_afs->fontname = family_name; - gv_afs->faces = availfaces; - } else { - gv_afs->fontname = NULL; - gv_afs->faces = 0; - } - } - g_free(families); -#ifdef DEBUG - display_available_fonts(gv_af_p); -#endif -/* Free the Graphviz PS font definitions */ - return (gv_af_p); -} - -static void copyUpper (agxbuf* xb, char* s) -{ - int c; - - while ((c = *s++)) - (void)agxbputc (xb, toupper(c)); -} - -/* Returns the font corresponding to a Graphviz PS font. - AvantGarde-Book may return URW Gothic L, book - Returns NULL if no appropriate font found. -*/ -static char *gv_get_font(availfont_t* gv_af_p, - PostscriptAlias * ps_alias, agxbuf* xb, agxbuf *xb2) -{ - char *avail_faces; - int i; - - for (i = 0; i < GV_FONT_LIST_SIZE; i++) { - /* Searches the array of available system fonts for the one that - corresponds to the current Graphviz PS font name. Sets up the - font string with the available font name and the installed font - faces that match what are required by the Graphviz PS font. - */ - if (gv_af_p[i].faces && strstr(ps_alias->name, gv_af_p[i].gv_ps_fontname)) { - agxbput(xb2, gv_af_p[i].fontname); - agxbput(xb2, ", "); - avail_faces = get_avail_faces(gv_af_p[i].faces, xb); - if (ps_alias->weight) { - if (strcasestr(avail_faces, ps_alias->weight)) { - agxbputc(xb2, ' '); - copyUpper(xb2, ps_alias->weight); - } - } else if (strcasestr(avail_faces, "REGULAR")) { - agxbputc(xb2, ' '); - agxbput(xb2, "REGULAR"); - } else if (strstr(avail_faces, "ROMAN")) { - agxbputc(xb2, ' '); - agxbput(xb2, "ROMAN"); - } - if (ps_alias->stretch) { - if (strcasestr(avail_faces, ps_alias->stretch)) { - agxbputc(xb2, ' '); - copyUpper(xb2, ps_alias->stretch); - } - } - if (ps_alias->style) { - if (strcasestr(avail_faces, ps_alias->style)) { - agxbputc(xb2, ' '); - copyUpper(xb2, ps_alias->style); - } else if (!strcasecmp(ps_alias->style, "ITALIC")) { - /* try to use ITALIC in place of OBLIQUE & visa versa */ - if (strcasestr(avail_faces, "OBLIQUE")) { - agxbputc(xb2, ' '); - agxbput(xb2, "OBLIQUE"); - } - } else if (!strcasecmp(ps_alias->style, "OBLIQUE")) { - if (strcasestr(avail_faces, "ITALIC")) { - agxbputc(xb2, ' '); - agxbput(xb2, "ITALIC"); - } - } - } - return strdup(agxbuse(xb2)); - } - } - return NULL; -} - -static void -printFontMap (gv_font_map*gv_fmap, int sz) -{ - int j; - char* font; - - for (j = 0; j < sz; j++) { - font = gv_fmap[j].gv_font; - if (!font) - fprintf (stderr, " [%d] %s => \n", j, gv_fmap[j].gv_ps_fontname); - else - fprintf (stderr, " [%d] %s => \"%s\"\n", j, gv_fmap[j].gv_ps_fontname, font); - } -} - -/* Sets up a structure array that contains the Graphviz PS font name - and the corresponding installed font string. -*/ -gv_font_map* get_font_mapping(PangoFontMap * fontmap) -{ - PostscriptAlias *ps_alias; - availfont_t *gv_af_p; - int j, ps_fontnames_sz = sizeof(postscript_alias) / sizeof(PostscriptAlias); - gv_font_map* gv_fmap = N_NEW(ps_fontnames_sz, gv_font_map); - agxbuf xb; - agxbuf xb2; - unsigned char buf[BUFSIZ]; - unsigned char buf2[BUFSIZ]; - - agxbinit(&xb, BUFSIZ, buf); - agxbinit(&xb2, BUFSIZ, buf2); - gv_af_p = gv_get_ps_fontlist(fontmap); // get the available installed fonts - /* add the Graphviz PS font name and available system font string to the array */ - for (j = 0; j < ps_fontnames_sz; j++) { - ps_alias = &postscript_alias[j]; - gv_fmap[ps_alias->xfig_code].gv_ps_fontname = ps_alias->name; - gv_fmap[ps_alias->xfig_code].gv_font = gv_get_font(gv_af_p, ps_alias, &xb, &xb2); - } - gv_flist_free_af(gv_af_p); - agxbfree(&xb); - agxbfree(&xb2); -#ifndef WIN32 - if (Verbose > 1) { - fprintf(stderr, "Verbose %d\n", Verbose); - printFontMap (gv_fmap, ps_fontnames_sz); - } -#endif - return gv_fmap; -} - -/* Returns a list of the fonts that are available for use - -*/ - -void get_font_list(char **fonts[], int *cnt){ - -PangoFontMap *fontmap; -availfont_t *gv_af_p; -int j, i; -char **fontlist; -fontlist = N_NEW(GV_FONT_LIST_SIZE,char *); -fontmap = pango_cairo_font_map_new(); -gv_af_p = gv_get_ps_fontlist(fontmap); // get the available installed fonts -g_object_unref(fontmap); -/* load array with available font names */ -i=0; -for (j = 0; j < GV_FONT_LIST_SIZE; j++) { - *(fontlist + j) = 0; - if ((gv_af_p[j].faces == 0) || (gv_af_p[j].fontname == NULL)) { - continue; - } - *(fontlist + i++) = strdup(gv_af_p[j].fontname); -} -/* Free unused array elements */ -for(j=i;j - -#include "gvplugin_loadimage.h" -#include "gvio.h" - -#ifdef HAVE_PANGOCAIRO -#include - -#ifdef WIN32 //*dependencies - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "glib-2.0.lib" ) - #pragma comment( lib, "pango-1.0.lib" ) - #pragma comment( lib, "pangocairo-1.0.lib" ) - #pragma comment( lib, "libcairo-2.lib" ) - #pragma comment( lib, "gobject-2.0.lib" ) - #pragma comment( lib, "cgraph.lib" ) -#endif - - -typedef enum { - FORMAT_PNG_CAIRO, FORMAT_PNG_PS, -} format_type; - -static cairo_status_t -reader (void *closure, unsigned char *data, unsigned int length) -{ - assert(closure); - if (length == fread(data, 1, length, (FILE *)closure) - || feof((FILE *)closure)) - return CAIRO_STATUS_SUCCESS; - return CAIRO_STATUS_READ_ERROR; -} - -static void cairo_freeimage(usershape_t *us) -{ - cairo_surface_destroy((cairo_surface_t*)(us->data)); -} - -static cairo_surface_t* cairo_loadimage(GVJ_t * job, usershape_t *us) -{ - cairo_surface_t *surface = NULL; /* source surface */ - - assert(job); - assert(us); - assert(us->name); - assert(us->name[0]); - - if (us->data) { - if (us->datafree == cairo_freeimage) - surface = (cairo_surface_t*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->datafree = NULL; - us->data = NULL; - } - } - if (!surface) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - assert(us->f); - switch (us->type) { -#ifdef CAIRO_HAS_PNG_FUNCTIONS - case FT_PNG: - surface = cairo_image_surface_create_from_png_stream(reader, us->f); - cairo_surface_reference(surface); - break; -#endif - default: - surface = NULL; - } - if (surface) { - us->data = (void*)surface; - us->datafree = cairo_freeimage; - } - gvusershape_file_release(us); - } - return surface; -} - -static void pango_loadimage_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_t *cr = (cairo_t *) job->context; /* target context */ - cairo_surface_t *surface; /* source surface */ - - assert(job); - assert(us); - assert(us->name); - assert(us->name[0]); - - surface = cairo_loadimage(job, us); - if (surface) { - cairo_save(cr); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - cairo_set_source_surface (cr, surface, 0, 0); - cairo_paint (cr); - cairo_restore(cr); - } -} - -static void pango_loadimage_ps(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_surface_t *surface; /* source surface */ - cairo_format_t format; - int X, Y, x, y, stride; - unsigned char *data, *ix, alpha, red, green, blue; - - surface = cairo_loadimage(job, us); - if (surface) { - format = cairo_image_surface_get_format(surface); - if ((format != CAIRO_FORMAT_ARGB32) && (format != CAIRO_FORMAT_RGB24)) - return; - - X = cairo_image_surface_get_width(surface); - Y = cairo_image_surface_get_height(surface); - stride = cairo_image_surface_get_stride(surface); - data = cairo_image_surface_get_data(surface); - - gvputs(job, "save\n"); - - /* define image data as string array (one per raster line) */ - /* see parallel code in gd_loadimage_ps(). FIXME: refactor... */ - gvputs(job, "/myctr 0 def\n"); - gvputs(job, "/myarray [\n"); - for (y = 0; y < Y; y++) { - gvputs(job, "<"); - ix = data + y * stride; - for (x = 0; x < X; x++) { - /* FIXME - this code may have endian problems */ - blue = *ix++; - green = *ix++; - red = *ix++; - alpha = *ix++; - if (alpha < 0x7f) - gvputs(job, "ffffff"); - else - gvprintf(job, "%02x%02x%02x", red, green, blue); - } - gvputs(job, ">\n"); - } - gvputs(job, "] def\n"); - gvputs(job,"/myproc { myarray myctr get /myctr myctr 1 add def } def\n"); - - /* this sets the position of the image */ - gvprintf(job, "%g %g translate\n", - (b.LL.x + (b.UR.x - b.LL.x) * (1. - (job->dpi.x) / 96.) / 2.), - (b.LL.y + (b.UR.y - b.LL.y) * (1. - (job->dpi.y) / 96.) / 2.)); - - /* this sets the rendered size to fit the box */ - gvprintf(job,"%g %g scale\n", - ((b.UR.x - b.LL.x) * 72. / 96.), - ((b.UR.y - b.LL.y) * 72. / 96.)); - - /* xsize ysize bits-per-sample [matrix] */ - gvprintf(job, "%d %d 8 [%d 0 0 %d 0 %d]\n", X, Y, X, -Y, Y); - - gvputs(job, "{myproc} false 3 colorimage\n"); - - gvputs(job, "restore\n"); - } -} - -static gvloadimage_engine_t engine_cairo = { - pango_loadimage_cairo -}; - -static gvloadimage_engine_t engine_ps = { - pango_loadimage_ps -}; -#endif - -gvplugin_installed_t gvloadimage_pango_types[] = { -#ifdef HAVE_PANGOCAIRO - {FORMAT_PNG_CAIRO, "png:cairo", 1, &engine_cairo, NULL}, - {FORMAT_PNG_PS, "png:lasi", 2, &engine_ps, NULL}, - {FORMAT_PNG_PS, "png:ps", 2, &engine_ps, NULL}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/pango/gvplugin_pango.c b/internal/plugin/pango/gvplugin_pango.c deleted file mode 100644 index a3f0636..0000000 --- a/internal/plugin/pango/gvplugin_pango.c +++ /dev/null @@ -1,42 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvrender_pango_types[]; -extern gvplugin_installed_t gvtextlayout_pango_types[]; -extern gvplugin_installed_t gvloadimage_pango_types[]; -extern gvplugin_installed_t gvdevice_pango_types[]; - -static gvplugin_api_t apis[] = { - {API_render, gvrender_pango_types}, - {API_textlayout, gvtextlayout_pango_types}, - {API_loadimage, gvloadimage_pango_types}, - {API_device, gvdevice_pango_types}, - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL /*visual studio*/ -#ifndef GVPLUGIN_PANGO_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_pango_LTX_library = { "cairo", apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_pango_LTX_library = { "cairo", apis }; -#endif -#else /*end visual studio*/ -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_pango_LTX_library = { "cairo", apis }; -#else -gvplugin_library_t gvplugin_pango_LTX_library = { "cairo", apis }; -#endif -#endif - diff --git a/internal/plugin/pango/gvplugin_pango.h b/internal/plugin/pango/gvplugin_pango.h deleted file mode 100644 index 8c4df61..0000000 --- a/internal/plugin/pango/gvplugin_pango.h +++ /dev/null @@ -1 +0,0 @@ -#define FONT_DPI 96. diff --git a/internal/plugin/pango/gvrender_pango.c b/internal/plugin/pango/gvrender_pango.c deleted file mode 100644 index 8f1ec9e..0000000 --- a/internal/plugin/pango/gvrender_pango.c +++ /dev/null @@ -1,506 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "const.h" -#include "gvplugin_render.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvplugin_device.h" -#include "gvio.h" - -#include "gvplugin_pango.h" - -#ifdef HAVE_PANGOCAIRO -#include - -typedef enum { - FORMAT_CAIRO, - FORMAT_PNG, - FORMAT_PS, - FORMAT_PDF, - FORMAT_SVG, - } format_type; - -#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0])) - -static double dashed[] = {6.}; -static int dashed_len = ARRAY_SIZE(dashed); - -static double dotted[] = {2., 6.}; -static int dotted_len = ARRAY_SIZE(dotted); - -#ifdef CAIRO_HAS_PS_SURFACE -#include -#endif - -#ifdef CAIRO_HAS_PDF_SURFACE -#include -#endif - -#ifdef CAIRO_HAS_SVG_SURFACE -#include -#endif - -static void cairogen_polyline(GVJ_t * job, pointf * A, int n); - -static void cairogen_set_color(cairo_t * cr, gvcolor_t * color) -{ - cairo_set_source_rgba(cr, color->u.RGBA[0], color->u.RGBA[1], - color->u.RGBA[2], color->u.RGBA[3]); -} - -static void cairogen_add_color_stop_rgba(cairo_pattern_t *pat, double stop , gvcolor_t * color) -{ - cairo_pattern_add_color_stop_rgba (pat, stop,color->u.RGBA[0], color->u.RGBA[1], - color->u.RGBA[2], color->u.RGBA[3]); -} - - -static cairo_status_t -writer (void *closure, const unsigned char *data, unsigned int length) -{ - if (length == gvwrite((GVJ_t *)closure, (const char*)data, length)) - return CAIRO_STATUS_SUCCESS; - return CAIRO_STATUS_WRITE_ERROR; -} - -static void cairogen_begin_job(GVJ_t * job) -{ - if (job->external_context && job->context) - cairo_save((cairo_t *) job->context); -} - -static void cairogen_end_job(GVJ_t * job) -{ - cairo_t *cr = (cairo_t *) job->context; - - if (job->external_context) - cairo_restore(cr); - else { - cairo_destroy(cr); - job->context = NULL; - } -} - -#define CAIRO_XMAX 32767 -#define CAIRO_YMAX 32767 - -static void cairogen_begin_page(GVJ_t * job) -{ - cairo_t *cr = (cairo_t *) job->context; - cairo_surface_t *surface; - cairo_status_t status; - - if (cr == NULL) { - switch (job->render.id) { - case FORMAT_PS: -#ifdef CAIRO_HAS_PS_SURFACE - surface = cairo_ps_surface_create_for_stream (writer, - job, job->width, job->height); -#endif - break; - case FORMAT_PDF: -#ifdef CAIRO_HAS_PDF_SURFACE - surface = cairo_pdf_surface_create_for_stream (writer, - job, job->width, job->height); -#endif - break; - case FORMAT_SVG: -#ifdef CAIRO_HAS_SVG_SURFACE - surface = cairo_svg_surface_create_for_stream (writer, - job, job->width, job->height); -#endif - break; - case FORMAT_CAIRO: - case FORMAT_PNG: - default: - if (job->width >= CAIRO_XMAX || job->height >= CAIRO_YMAX) { - double scale = MIN((double)CAIRO_XMAX / job->width, - (double)CAIRO_YMAX / job->height); - job->width *= scale; - job->height *= scale; - job->scale.x *= scale; - job->scale.y *= scale; - fprintf(stderr, - "%s: graph is too large for cairo-renderer bitmaps. Scaling by %g to fit\n", - job->common->cmdname, scale); - } - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, - job->width, job->height); - if (job->common->verbose) - fprintf(stderr, - "%s: allocating a %dK cairo image surface (%d x %d pixels)\n", - job->common->cmdname, - ROUND(job->width * job->height * 4 / 1024.), - job->width, job->height); - break; - } - status = cairo_surface_status(surface); - if (status != CAIRO_STATUS_SUCCESS) { - fprintf(stderr, "%s: failure to create cairo surface: %s\n", - job->common->cmdname, - cairo_status_to_string(status)); - cairo_surface_destroy (surface); - return; - } - cr = cairo_create(surface); - cairo_surface_destroy (surface); - job->context = (void *) cr; - } - - cairo_scale(cr, job->scale.x, job->scale.y); - cairo_rotate(cr, -job->rotation * M_PI / 180.); - cairo_translate(cr, job->translation.x, -job->translation.y); - - cairo_rectangle(cr, job->clip.LL.x, - job->clip.LL.y, - job->clip.UR.x - job->clip.LL.x, - (job->clip.UR.y - job->clip.LL.y)); - cairo_clip(cr); - /* cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); */ -} - -static void cairogen_end_page(GVJ_t * job) -{ - cairo_t *cr = (cairo_t *) job->context; - cairo_surface_t *surface; - cairo_status_t status; - - switch (job->render.id) { - -#ifdef CAIRO_HAS_PNG_FUNCTIONS - case FORMAT_PNG: - surface = cairo_get_target(cr); - cairo_surface_write_to_png_stream(surface, writer, job); - break; -#endif - - case FORMAT_PS: - case FORMAT_PDF: - case FORMAT_SVG: - cairo_show_page(cr); - surface = cairo_surface_reference(cairo_get_target(cr)); - cairo_surface_finish(surface); - status = cairo_surface_status(surface); - cairo_surface_destroy(surface); - if (status != CAIRO_STATUS_SUCCESS) - fprintf(stderr, "cairo: %s\n", cairo_status_to_string(status)); - break; - - case FORMAT_CAIRO: - default: - surface = cairo_get_target(cr); - if (cairo_image_surface_get_width(surface) == 0 || cairo_image_surface_get_height(surface) == 0) { - /* apparently cairo never allocates a surface if nothing was ever written to it */ -/* but suppress this error message since a zero area surface seems to happen during normal operations, particular in -Tx11 - fprintf(stderr, "ERROR: cairo surface has zero area, this may indicate some problem during rendering shapes.\n"); - - jce */ - } - job->imagedata = (char *)(cairo_image_surface_get_data(surface)); - break; - /* formatting will be done by gvdevice_format() */ - } -} - -static void cairogen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - obj_state_t *obj = job->obj; - cairo_t *cr = (cairo_t *) job->context; - pointf A[2]; - - cairo_set_dash (cr, dashed, 0, 0.0); /* clear any dashing */ - cairogen_set_color(cr, &(obj->pencolor)); - - switch (span->just) { - case 'r': - p.x -= span->size.x; - break; - case 'l': - p.x -= 0.0; - break; - case 'n': - default: - p.x -= span->size.x / 2.0; - break; - } - p.y += span->yoffset_centerline + span->yoffset_layout; - - cairo_move_to (cr, p.x, -p.y); - cairo_save(cr); - cairo_scale(cr, POINTS_PER_INCH / FONT_DPI, POINTS_PER_INCH / FONT_DPI); - pango_cairo_show_layout(cr, (PangoLayout*)(span->layout)); - cairo_restore(cr); - - if ((span->font) && (span->font->flags & HTML_OL)) { - A[0].x = p.x; - A[1].x = p.x + span->size.x; - A[1].y = A[0].y = p.y; - cairogen_polyline(job, A, 2); - } -} - -static void cairogen_set_penstyle(GVJ_t *job, cairo_t *cr) -{ - obj_state_t *obj = job->obj; - - if (obj->pen == PEN_DASHED) { - cairo_set_dash (cr, dashed, dashed_len, 0.0); - } else if (obj->pen == PEN_DOTTED) { - cairo_set_dash (cr, dotted, dotted_len, 0.0); - } else { - cairo_set_dash (cr, dashed, 0, 0.0); - } - cairo_set_line_width (cr, obj->penwidth); - -} - -static void cairo_gradient_fill (cairo_t* cr, obj_state_t* obj, int filled, pointf* A, int n) -{ - cairo_pattern_t* pat; - float angle = obj->gradient_angle * M_PI / 180; - float r1,r2; - pointf G[2],c1; - - if (filled == GRADIENT) { - get_gradient_points(A, G, n, angle, 0); - pat = cairo_pattern_create_linear (G[0].x,G[0].y,G[1].x,G[1].y); - } - else { - get_gradient_points(A, G, n, 0, 1); - //r1 is inner radius, r2 is outer radius - r1 = G[1].x; /* Set a r2/4 in get_gradient_points */ - r2 = G[1].y; - if (angle == 0) { - c1.x = G[0].x; - c1.y = G[0].y; - } - else { - c1.x = G[0].x + r1 * cos(angle); - c1.y = G[0].y - r1 * sin(angle); - } - pat = cairo_pattern_create_radial(c1.x,c1.y,r1,G[0].x,G[0].y,r2); - } - if (obj->gradient_frac > 0) { - cairogen_add_color_stop_rgba(pat,obj->gradient_frac - 0.001,&(obj->fillcolor)); - cairogen_add_color_stop_rgba(pat,obj->gradient_frac,&(obj->stopcolor)); - } - else { - cairogen_add_color_stop_rgba(pat,0,&(obj->fillcolor)); - cairogen_add_color_stop_rgba(pat,1,&(obj->stopcolor)); - } - cairo_set_source (cr, pat); - cairo_fill_preserve (cr); - cairo_pattern_destroy (pat); -} - -static void cairogen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - obj_state_t *obj = job->obj; - cairo_t *cr = (cairo_t *) job->context; - cairo_matrix_t matrix; - double rx, ry; - - cairogen_set_penstyle(job, cr); - - cairo_get_matrix(cr, &matrix); - - rx = A[1].x - A[0].x; - ry = A[1].y - A[0].y; - -#define RMIN 0.01 -if (rx < RMIN) rx = RMIN; -if (ry < RMIN) ry = RMIN; - - cairo_translate(cr, A[0].x, -A[0].y); - cairo_scale(cr, rx, ry); - cairo_move_to(cr, 1., 0.); - cairo_arc(cr, 0., 0., 1., 0., 2 * M_PI); - - cairo_set_matrix(cr, &matrix); - - if (filled == GRADIENT || filled == (RGRADIENT)) { - cairo_gradient_fill (cr, obj, filled, A, 2); - } - else if (filled) { - cairogen_set_color(cr, &(obj->fillcolor)); - cairo_fill_preserve(cr); - } - cairogen_set_color(cr, &(obj->pencolor)); - cairo_stroke(cr); -} - -static void -cairogen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - obj_state_t *obj = job->obj; - cairo_t *cr = (cairo_t *) job->context; - int i; - - cairogen_set_penstyle(job, cr); - - cairo_move_to(cr, A[0].x, -A[0].y); - for (i = 1; i < n; i++) - cairo_line_to(cr, A[i].x, -A[i].y); - cairo_close_path(cr); - if (filled == GRADIENT || filled == (RGRADIENT)) { - cairo_gradient_fill (cr, obj, filled, A, n); - } - else if (filled) { - cairogen_set_color(cr, &(obj->fillcolor)); - cairo_fill_preserve(cr); - } - cairogen_set_color(cr, &(obj->pencolor)); - cairo_stroke(cr); -} - -static void -cairogen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - obj_state_t *obj = job->obj; - cairo_t *cr = (cairo_t *) job->context; - int i; - - cairogen_set_penstyle(job, cr); - - cairo_move_to(cr, A[0].x, -A[0].y); - for (i = 1; i < n; i += 3) - cairo_curve_to(cr, A[i].x, -A[i].y, A[i + 1].x, -A[i + 1].y, - A[i + 2].x, -A[i + 2].y); - if (filled == GRADIENT || filled == (RGRADIENT)) { - cairo_gradient_fill (cr, obj, filled, A, n); - } - else if (filled) { - cairogen_set_color(cr, &(obj->fillcolor)); - cairo_fill_preserve(cr); - } - cairogen_set_color(cr, &(obj->pencolor)); - cairo_stroke(cr); -} - -static void -cairogen_polyline(GVJ_t * job, pointf * A, int n) -{ - obj_state_t *obj = job->obj; - cairo_t *cr = (cairo_t *) job->context; - int i; - - cairogen_set_penstyle(job, cr); - - cairo_move_to(cr, A[0].x, -A[0].y); - for (i = 1; i < n; i++) - cairo_line_to(cr, A[i].x, -A[i].y); - cairogen_set_color(cr, &(obj->pencolor)); - cairo_stroke(cr); -} - -static gvrender_engine_t cairogen_engine = { - cairogen_begin_job, - cairogen_end_job, - 0, /* cairogen_begin_graph */ - 0, /* cairogen_end_graph */ - 0, /* cairogen_begin_layer */ - 0, /* cairogen_end_layer */ - cairogen_begin_page, - cairogen_end_page, - 0, /* cairogen_begin_cluster */ - 0, /* cairogen_end_cluster */ - 0, /* cairogen_begin_nodes */ - 0, /* cairogen_end_nodes */ - 0, /* cairogen_begin_edges */ - 0, /* cairogen_end_edges */ - 0, /* cairogen_begin_node */ - 0, /* cairogen_end_node */ - 0, /* cairogen_begin_edge */ - 0, /* cairogen_end_edge */ - 0, /* cairogen_begin_anchor */ - 0, /* cairogen_end_anchor */ - 0, /* cairogen_begin_label */ - 0, /* cairogen_end_label */ - cairogen_textspan, - 0, /* cairogen_resolve_color */ - cairogen_ellipse, - cairogen_polygon, - cairogen_bezier, - cairogen_polyline, - 0, /* cairogen_comment */ - 0, /* cairogen_library_shape */ -}; - -static gvrender_features_t render_features_cairo = { - GVRENDER_Y_GOES_DOWN - | GVRENDER_DOES_TRANSFORM, /* flags */ - 4., /* default pad - graph units */ - 0, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_DOUBLE, /* color_type */ -}; - -static gvdevice_features_t device_features_png = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* typical monitor dpi */ -}; - -static gvdevice_features_t device_features_ps = { - GVDEVICE_DOES_TRUECOLOR, /* flags */ - {36.,36.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* postscript 72 dpi */ -}; - -static gvdevice_features_t device_features_pdf = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {36.,36.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* postscript 72 dpi */ -}; - -static gvdevice_features_t device_features_svg = { - GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* svg 72 dpi */ -}; -#endif - -gvplugin_installed_t gvrender_pango_types[] = { -#ifdef HAVE_PANGOCAIRO - {FORMAT_CAIRO, "cairo", 10, &cairogen_engine, &render_features_cairo}, -#endif - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_pango_types[] = { -#ifdef HAVE_PANGOCAIRO -#ifdef CAIRO_HAS_PNG_FUNCTIONS - {FORMAT_PNG, "png:cairo", 10, NULL, &device_features_png}, -#endif -#ifdef CAIRO_HAS_PS_SURFACE - {FORMAT_PS, "ps:cairo", -10, NULL, &device_features_ps}, -#endif -#ifdef CAIRO_HAS_PDF_SURFACE - {FORMAT_PDF, "pdf:cairo", 10, NULL, &device_features_pdf}, -#endif -#ifdef CAIRO_HAS_SVG_SURFACE - {FORMAT_SVG, "svg:cairo", -10, NULL, &device_features_svg}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/pango/gvtextlayout_pango.c b/internal/plugin/pango/gvtextlayout_pango.c deleted file mode 100644 index d620b29..0000000 --- a/internal/plugin/pango/gvtextlayout_pango.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include "gvplugin_render.h" -#include "agxbuf.h" -#include "utils.h" -#include "gvplugin_textlayout.h" - -#ifdef HAVE_PANGOCAIRO -#include -#include "gvgetfontlist.h" -#ifdef HAVE_PANGO_FC_FONT_LOCK_FACE -#include -#endif - -#define N_NEW(n,t) (t*)malloc((n)*sizeof(t)) - -static void pango_free_layout (void *layout) -{ - g_object_unref((PangoLayout*)layout); -} - -static char* pango_psfontResolve (PostscriptAlias* pa) -{ - static char buf[1024]; - strcpy(buf, pa->family); - strcat(buf, ","); - if (pa->weight) { - strcat(buf, " "); - strcat(buf, pa->weight); - } - if (pa->stretch) { - strcat(buf, " "); - strcat(buf, pa->stretch); - } - if (pa->style) { - strcat(buf, " "); - strcat(buf, pa->style); - } - return buf; -} - -#define FONT_DPI 96. - -#define ENABLE_PANGO_MARKUP -#ifdef ENABLE_PANGO_MARKUP -#define FULL_MARKUP "" -#endif - -static boolean pango_textlayout(textspan_t * span, char **fontpath) -{ - static char buf[1024]; /* returned in fontpath, only good until next call */ - static PangoFontMap *fontmap; - static PangoContext *context; - static PangoFontDescription *desc; - static char *fontname; - static double fontsize; - static gv_font_map* gv_fmap; - char *fnt, *psfnt = NULL; - PangoLayout *layout; - PangoRectangle logical_rect; - cairo_font_options_t* options; - PangoFont *font; -#ifdef ENABLE_PANGO_MARKUP - PangoAttrList *attrs; - GError *error = NULL; - int flags; -#endif - char *text; - double textlayout_scale; - PostscriptAlias *pA; - - if (!context) { - fontmap = pango_cairo_font_map_new(); - gv_fmap = get_font_mapping(fontmap); -#ifdef HAVE_PANGO_FONT_MAP_CREATE_CONTEXT - context = pango_font_map_create_context (fontmap); -#else - context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP(fontmap)); -#endif - options=cairo_font_options_create(); - cairo_font_options_set_antialias(options,CAIRO_ANTIALIAS_GRAY); - cairo_font_options_set_hint_style(options,CAIRO_HINT_STYLE_FULL); - cairo_font_options_set_hint_metrics(options,CAIRO_HINT_METRICS_ON); - cairo_font_options_set_subpixel_order(options,CAIRO_SUBPIXEL_ORDER_BGR); - pango_cairo_context_set_font_options(context, options); - pango_cairo_context_set_resolution(context, FONT_DPI); - cairo_font_options_destroy(options); - g_object_unref(fontmap); - } - - if (!fontname || strcmp(fontname, span->font->name) != 0 || fontsize != span->font->size) { - fontname = span->font->name; - fontsize = span->font->size; - pango_font_description_free (desc); - - pA = span->font->postscript_alias; - if (pA) { - psfnt = fnt = gv_fmap[pA->xfig_code].gv_font; - if(!psfnt) - psfnt = fnt = pango_psfontResolve (pA); - } - else - fnt = fontname; - - desc = pango_font_description_from_string(fnt); - /* all text layout is done at a scale of FONT_DPI (nominaly 96.) */ - pango_font_description_set_size (desc, (gint)(fontsize * PANGO_SCALE)); - - if (fontpath && (font = pango_font_map_load_font(fontmap, context, desc))) { /* -v support */ - const char *fontclass; - - fontclass = G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(font)); - - buf[0] = '\0'; - if (psfnt) { - strcat(buf, "(ps:pango "); - strcat(buf, psfnt); - strcat(buf, ") "); - } - strcat(buf, "("); - strcat(buf, fontclass); - strcat(buf, ") "); -#ifdef HAVE_PANGO_FC_FONT_LOCK_FACE - if (strcmp(fontclass, "PangoCairoFcFont") == 0) { - FT_Face face; - PangoFcFont *fcfont; - FT_Stream stream; - FT_StreamDesc streamdesc; - fcfont = PANGO_FC_FONT(font); - face = pango_fc_font_lock_face(fcfont); - if (face) { - strcat(buf, "\""); - strcat(buf, face->family_name); - strcat(buf, ", "); - strcat(buf, face->style_name); - strcat(buf, "\" "); - - stream = face->stream; - if (stream) { - streamdesc = stream->pathname; - if (streamdesc.pointer) - strcat(buf, (char*)streamdesc.pointer); - else - strcat(buf, "*no pathname available*"); - } - else - strcat(buf, "*no stream available*"); - } - pango_fc_font_unlock_face(fcfont); - } - else -#endif - { - PangoFontDescription *tdesc; - char *tfont; - - tdesc = pango_font_describe(font); - tfont = pango_font_description_to_string(tdesc); - strcat(buf, "\""); - strcat(buf, tfont); - strcat(buf, "\" "); - g_free(tfont); - } - *fontpath = buf; - } - } - -#ifdef ENABLE_PANGO_MARKUP - if ((span->font) && (flags = span->font->flags)) { - unsigned char buf[BUFSIZ]; - agxbuf xb; - - agxbinit(&xb, BUFSIZ, buf); - agxbput(&xb,""); - - if (flags & HTML_SUP) - agxbput(&xb,""); - if (flags & HTML_SUB) - agxbput(&xb,""); - - agxbput (&xb,xml_string0(span->str, TRUE)); - - if (flags & HTML_SUB) - agxbput(&xb,""); - if (flags & HTML_SUP) - agxbput(&xb,""); - - agxbput (&xb,""); - if (!pango_parse_markup (agxbuse(&xb), -1, 0, &attrs, &text, NULL, &error)) { - fprintf (stderr, "Error - pango_parse_markup: %s\n", error->message); - text = span->str; - attrs = NULL; - } - agxbfree (&xb); - } - else { - text = span->str; - attrs = NULL; - } -#else - text = span->str; -#endif - - layout = pango_layout_new (context); - span->layout = (void *)layout; /* layout free with textspan - see labels.c */ - span->free_layout = pango_free_layout; /* function for freeing pango layout */ - - pango_layout_set_text (layout, text, -1); - pango_layout_set_font_description (layout, desc); -#ifdef ENABLE_PANGO_MARKUP - if (attrs) - pango_layout_set_attributes (layout, attrs); -#endif - - pango_layout_get_extents (layout, NULL, &logical_rect); - - /* if pango doesn't like the font then it sets width=0 but height = garbage */ - if (logical_rect.width == 0) - logical_rect.height = 0; - - textlayout_scale = POINTS_PER_INCH / (FONT_DPI * PANGO_SCALE); - span->size.x = (int)(logical_rect.width * textlayout_scale + 1); /* round up so that width/height are never too small */ - span->size.y = (int)(logical_rect.height * textlayout_scale + 1); - - /* FIXME -- Horrible kluge !!! */ - - /* For now we are using pango for single line blocks only. - * The logical_rect.height seems to be too high from the font metrics on some platforms. - * Use an assumed height based on the point size. - */ - - span->size.y = (int)(span->font->size * 1.1 + .5); - - /* The y offset from baseline to 0,0 of the bitmap representation */ -#if !defined(WIN32) && defined PANGO_VERSION_MAJOR && (PANGO_VERSION_MAJOR >= 1) - span->yoffset_layout = pango_layout_get_baseline (layout) * textlayout_scale; -#else - { - /* do it the hard way on rhel5/centos5 */ - PangoLayoutIter *iter = pango_layout_get_iter (layout); - span->yoffset_layout = pango_layout_iter_get_baseline (iter) * textlayout_scale; - } -#endif - - /* The distance below midline for y centering of text strings */ - span->yoffset_centerline = 0.2 * span->font->size; - - if (logical_rect.width == 0) - return FALSE; - return TRUE; -} - -static gvtextlayout_engine_t pango_textlayout_engine = { - pango_textlayout, -}; -#endif - -gvplugin_installed_t gvtextlayout_pango_types[] = { -#ifdef HAVE_PANGOCAIRO - {0, "textlayout", 10, &pango_textlayout_engine, NULL}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/poppler/dummy.go b/internal/plugin/poppler/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/poppler/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/poppler/gvloadimage_poppler.c b/internal/plugin/poppler/gvloadimage_poppler.c deleted file mode 100644 index e847978..0000000 --- a/internal/plugin/poppler/gvloadimage_poppler.c +++ /dev/null @@ -1,157 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_loadimage.h" - -#ifdef HAVE_PANGOCAIRO -#ifdef HAVE_POPPLER -#include -#include - -#ifdef WIN32 -#define NUL_FILE "nul" -#else -#define NUL_FILE "/dev/null" -#endif - -typedef enum { - FORMAT_PDF_CAIRO, -} format_type; - - -static void gvloadimage_poppler_free(usershape_t *us) -{ - g_object_unref((PopplerDocument*)us->data); -} - -static PopplerDocument* gvloadimage_poppler_load(GVJ_t * job, usershape_t *us) -{ - PopplerDocument *document = NULL; - GError *error; - gchar *absolute, *uri; - int num_pages; - - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree == gvloadimage_poppler_free) - document = (PopplerDocument*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - } - - } - - if (!document) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - switch (us->type) { - case FT_PDF: - - if (g_path_is_absolute(us->name)) { - absolute = g_strdup (us->name); - } else { - gchar *dir = g_get_current_dir (); - absolute = g_build_filename (dir, us->name, (gchar *) 0); - free (dir); - } - - uri = g_filename_to_uri (absolute, NULL, &error); - - free (absolute); - if (uri == NULL) { - printf("%s\n", error->message); - return NULL; - } - - document = poppler_document_new_from_file (uri, NULL, &error); - if (document == NULL) { - printf("%s\n", error->message); - return NULL; - } - - // check page 1 exists - - num_pages = poppler_document_get_n_pages (document); - if (num_pages < 1) { - printf("poppler fail: num_pages %d, must be at least 1", num_pages); - return NULL; - } - break; - - default: - break; - } - - if (document) { - us->data = (void*)document; - us->datafree = gvloadimage_poppler_free; - } - - gvusershape_file_release(us); - } - - return document; -} - -static void gvloadimage_poppler_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - PopplerDocument* document = gvloadimage_poppler_load(job, us); - PopplerPage* page; - - cairo_t *cr = (cairo_t *) job->context; /* target context */ - cairo_surface_t *surface; /* source surface */ - - if (document) { - - // already done this once, so no err checking - page = poppler_document_get_page (document, 0); - - cairo_save(cr); - - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, us->w, us->h); - cairo_surface_reference(surface); - - cairo_set_source_surface(cr, surface, 0, 0); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - poppler_page_render (page, cr); - cairo_paint (cr); - - cairo_restore(cr); - } -} - -static gvloadimage_engine_t engine_cairo = { - gvloadimage_poppler_cairo -}; -#endif -#endif - -gvplugin_installed_t gvloadimage_poppler_types[] = { -#ifdef HAVE_PANGOCAIRO -#ifdef HAVE_POPPLER - {FORMAT_PDF_CAIRO, "pdf:cairo", 1, &engine_cairo, NULL}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/poppler/gvplugin_poppler.c b/internal/plugin/poppler/gvplugin_poppler.c deleted file mode 100644 index b6f3054..0000000 --- a/internal/plugin/poppler/gvplugin_poppler.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvloadimage_poppler_types[]; - -static gvplugin_api_t apis[] = { - {API_loadimage, gvloadimage_poppler_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_poppler_LTX_library = { "poppler", apis }; diff --git a/internal/plugin/quartz/GVTextLayout.h b/internal/plugin/quartz/GVTextLayout.h deleted file mode 100644 index a5fc2f9..0000000 --- a/internal/plugin/quartz/GVTextLayout.h +++ /dev/null @@ -1,29 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#import - -@interface GVTextLayout : NSObject -{ - UIFont* _font; - NSString* _text; -} - -- (id)initWithFontName:(char*)fontName fontSize:(CGFloat)fontSize text:(char*)text; - -- (void)sizeUpWidth:(double*)width height:(double*)height yoffset:(double*)yoffset; -- (void)drawInContext:(CGContextRef)context atPosition:(CGPoint)position; - -- (void)dealloc; - -@end diff --git a/internal/plugin/quartz/GVTextLayout.m b/internal/plugin/quartz/GVTextLayout.m deleted file mode 100644 index 2d11611..0000000 --- a/internal/plugin/quartz/GVTextLayout.m +++ /dev/null @@ -1,98 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "types.h" -#include "gvcjob.h" - -#include "gvplugin_quartz.h" - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 30200 - -#import "GVTextLayout.h" - -void *quartz_new_layout(char* fontname, double fontsize, char* text) -{ - return [[GVTextLayout alloc] initWithFontName:fontname fontSize:fontsize text:text]; -} - -void quartz_size_layout(void *layout, double* width, double* height, double* yoffset_layout) -{ - [(GVTextLayout*)layout sizeUpWidth:width height:height yoffset:yoffset_layout]; -} - -void quartz_draw_layout(void *layout, CGContextRef context, CGPoint position) -{ - [(GVTextLayout*)layout drawInContext:context atPosition:position]; -} - -void quartz_free_layout(void *layout) -{ - [(GVTextLayout*)layout release]; -} - -static NSString* _defaultFontName = @"TimesNewRomanPSMT"; - -@implementation GVTextLayout - -- (id)initWithFontName:(char*)fontName fontSize:(CGFloat)fontSize text:(char*)text -{ - if (self = [super init]) - { - _font = nil; - if (fontName) - _font = [[UIFont fontWithName:[NSString stringWithUTF8String:fontName] size:fontSize] retain]; - if (!_font) - _font = [[UIFont fontWithName:_defaultFontName size:fontSize] retain]; - - _text = text ? [[NSString alloc] initWithUTF8String:text] : nil; - } - return self; -} - -- (void)sizeUpWidth:(double*)width height:(double*)height yoffset:(double*)yoffset -{ - CGSize size = [_text sizeWithFont:_font]; - CGFloat ascender = _font.ascender; - - *width = size.width; - *height = size.height; - *yoffset = ascender; -} - -- (void)drawInContext:(CGContextRef)context atPosition:(CGPoint)position -{ - UIGraphicsPushContext(context); - CGContextSaveGState(context); - CGContextScaleCTM(context, 1.0, -1.0); - [_text drawAtPoint:CGPointMake(position.x, -position.y - _font.ascender) withFont:_font]; - CGContextRestoreGState(context); - UIGraphicsPopContext(); -} - -- (void)dealloc -{ - [_font release]; - [_text release]; - - [super dealloc]; -} - - -@end - -#endif diff --git a/internal/plugin/quartz/dummy.go b/internal/plugin/quartz/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/quartz/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/quartz/gvdevice_quartz.c b/internal/plugin/quartz/gvdevice_quartz.c deleted file mode 100644 index b338d20..0000000 --- a/internal/plugin/quartz/gvdevice_quartz.c +++ /dev/null @@ -1,105 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvplugin_device.h" - -#include "gvplugin_quartz.h" - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 && defined(HAVE_PANGOCAIRO) - -const void *memory_data_consumer_get_byte_pointer(void *info) -{ - return info; -} - -CGDataProviderDirectCallbacks memory_data_provider_callbacks = { - 0, - memory_data_consumer_get_byte_pointer, - NULL, - NULL, - NULL -}; - -static void quartz_format(GVJ_t *job) -{ - /* image destination -> data consumer -> job's gvdevice */ - /* data provider <- job's imagedata */ - CGDataConsumerRef data_consumer = CGDataConsumerCreate(job, &device_data_consumer_callbacks); - CGImageDestinationRef image_destination = CGImageDestinationCreateWithDataConsumer(data_consumer, format_to_uti(job->device.id), 1, NULL); - CGDataProviderRef data_provider = CGDataProviderCreateDirect(job->imagedata, BYTES_PER_PIXEL * job->width * job->height, &memory_data_provider_callbacks); - - /* add the bitmap image to the destination and save it */ - CGColorSpaceRef color_space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); - CGImageRef image = CGImageCreate ( - job->width, /* width in pixels */ - job->height, /* height in pixels */ - BITS_PER_COMPONENT, /* bits per component */ - BYTES_PER_PIXEL * 8, /* bits per pixel */ - BYTES_PER_PIXEL * job->width, /* bytes per row: exactly width # of pixels */ - color_space, /* color space: sRGB */ - kCGImageAlphaPremultipliedFirst|kCGBitmapByteOrder32Little, /* bitmap info: corresponds to CAIRO_FORMAT_ARGB32 */ - data_provider, /* data provider: from imagedata */ - NULL, /* decode: don't remap colors */ - FALSE, /* don't interpolate */ - kCGRenderingIntentDefault /* rendering intent (what to do with out-of-gamut colors): default */ - ); - CGImageDestinationAddImage(image_destination, image, NULL); - CGImageDestinationFinalize(image_destination); - - /* clean up */ - CGImageRelease(image); - CGColorSpaceRelease(color_space); - CGDataProviderRelease(data_provider); - if (image_destination) - CFRelease(image_destination); - CGDataConsumerRelease(data_consumer); -} - -static gvdevice_engine_t quartz_engine = { - NULL, /* quartz_initialize */ - quartz_format, - NULL, /* quartz_finalize */ -}; - -static gvdevice_features_t device_features_quartz = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -gvplugin_installed_t gvdevice_quartz_types_for_cairo[] = { - {FORMAT_BMP, "bmp:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_GIF, "gif:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_EXR, "exr:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_ICNS, "icns:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_ICO, "ico:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_JPEG, "jpe:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_JPEG, "jpeg:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_JPEG, "jpg:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_JPEG2000, "jp2:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_PICT, "pct:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_PICT, "pict:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_PNG, "png:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_PSD, "psd:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_SGI, "sgi:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_TIFF, "tif:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_TIFF, "tiff:cairo", 7, &quartz_engine, &device_features_quartz}, - {FORMAT_TGA, "tga:cairo", 7, &quartz_engine, &device_features_quartz}, - {0, NULL, 0, NULL, NULL} -}; - -#endif diff --git a/internal/plugin/quartz/gvloadimage_quartz.c b/internal/plugin/quartz/gvloadimage_quartz.c deleted file mode 100644 index 3c2cb8f..0000000 --- a/internal/plugin/quartz/gvloadimage_quartz.c +++ /dev/null @@ -1,182 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "gvplugin_loadimage.h" - -#include "gvplugin_quartz.h" - -static size_t file_data_provider_get_bytes(void *info, void *buffer, size_t count) -{ - return fread(buffer, 1, count, (FILE*)info); -} - -static void file_data_provider_rewind(void *info) -{ - fseek((FILE*)info, 0, SEEK_SET); -} - -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 20000 - -static off_t file_data_provider_skip_forward(void *info, off_t count) -{ - fseek((FILE*)info, count, SEEK_CUR); - return count; -} - -/* bridge FILE* to a sequential CGDataProvider */ -static CGDataProviderSequentialCallbacks file_data_provider_callbacks = { - 0, - file_data_provider_get_bytes, - file_data_provider_skip_forward, - file_data_provider_rewind, - NULL -}; - -#else - -static void file_data_provider_skip_bytes(void *info, size_t count) -{ - fseek((FILE*)info, count, SEEK_CUR); -} - -/* bridge FILE* to a sequential CGDataProvider */ -static CGDataProviderCallbacks file_data_provider_callbacks = { - file_data_provider_get_bytes, - file_data_provider_skip_bytes, - file_data_provider_rewind, - NULL -}; - -#endif - - - -static void quartz_freeimage(usershape_t *us) -{ - CGImageRelease((CGImageRef)us->data); -} - -static CGImageRef quartz_loadimage(GVJ_t * job, usershape_t *us) -{ - assert(job); - assert(us); - assert(us->name); - - if (us->data && us->datafree != quartz_freeimage) { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - us->datafree = NULL; - } - - if (!us->data) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 20000 - CGDataProviderRef data_provider = CGDataProviderCreateSequential(us->f, &file_data_provider_callbacks); -#else - CGDataProviderRef data_provider = CGDataProviderCreate(us->f, &file_data_provider_callbacks); -#endif - -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1040 - /* match usershape format to a UTI for type hinting, if possible */ - format_type hint_format_type; - switch (us->type) { - case FT_BMP: - hint_format_type = FORMAT_BMP; - break; - case FT_GIF: - hint_format_type = FORMAT_GIF; - break; - case FT_PNG: - hint_format_type = FORMAT_PNG; - break; - case FT_JPEG: - hint_format_type = FORMAT_JPEG; - break; - case FT_PDF: - hint_format_type = FORMAT_PDF; - break; - default: - hint_format_type = FORMAT_NONE; - break; - } - CFDictionaryRef options = hint_format_type == FORMAT_NONE ? NULL : CFDictionaryCreate( - kCFAllocatorDefault, - (const void **)&kCGImageSourceTypeIdentifierHint, - (const void **)format_to_uti(hint_format_type), - 1, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - /* get first image from usershape file */ - CGImageSourceRef image_source = CGImageSourceCreateWithDataProvider(data_provider, options); - us->data = CGImageSourceCreateImageAtIndex(image_source, 0, NULL); - if (image_source) - CFRelease(image_source); - if (options) - CFRelease(options); -#else - switch (us->type) { - case FT_PNG: - us->data = CGImageCreateWithPNGDataProvider(data_provider, NULL, false, kCGRenderingIntentDefault); - break; - case FT_JPEG: - us->data = CGImageCreateWithJPEGDataProvider(data_provider, NULL, false, kCGRenderingIntentDefault); - break; - default: - us->data = NULL; - break; - } - -#endif - /* clean up */ - if (us->data) - us->datafree = quartz_freeimage; - CGDataProviderRelease(data_provider); - - gvusershape_file_release(us); - } - return (CGImageRef)(us->data); -} - -static void quartz_loadimage_quartz(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - /* get the image from usershape details, then blit it to the context */ - CGImageRef image = quartz_loadimage(job, us); - if (image) - CGContextDrawImage((CGContextRef)job->context, CGRectMake(b.LL.x, b.LL.y, b.UR.x - b.LL.x, b.UR.y - b.LL.y), image); -} - -static gvloadimage_engine_t engine = { - quartz_loadimage_quartz -}; - -gvplugin_installed_t gvloadimage_quartz_types[] = { -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1040 - {FORMAT_BMP, "bmp:quartz", 8, &engine, NULL}, - {FORMAT_GIF, "gif:quartz", 8, &engine, NULL}, - {FORMAT_PDF, "pdf:quartz", 8, &engine, NULL}, -#endif - {FORMAT_JPEG, "jpe:quartz", 8, &engine, NULL}, - {FORMAT_JPEG, "jpeg:quartz", 8, &engine, NULL}, - {FORMAT_JPEG, "jpg:quartz", 8, &engine, NULL}, - {FORMAT_PNG, "png:quartz", 8, &engine, NULL}, - {0, NULL, 0, NULL, NULL} -}; \ No newline at end of file diff --git a/internal/plugin/quartz/gvplugin_quartz.c b/internal/plugin/quartz/gvplugin_quartz.c deleted file mode 100644 index b5728ea..0000000 --- a/internal/plugin/quartz/gvplugin_quartz.c +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "types.h" -#include "gvplugin.h" -#include "gvplugin_quartz.h" -#include "gvio.h" - -extern gvplugin_installed_t gvrender_quartz_types; -extern gvplugin_installed_t gvtextlayout_quartz_types; -extern gvplugin_installed_t gvloadimage_quartz_types; -extern gvplugin_installed_t gvdevice_quartz_types; - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 -extern gvplugin_installed_t gvdevice_quartz_types_for_cairo; -#endif -/* data consumer backed by the gvdevice */ - -static size_t device_data_consumer_put_bytes (void *info, const void *buffer, size_t count) -{ - return gvwrite((GVJ_t *)info, (const char*)buffer, count); -} - -CGDataConsumerCallbacks device_data_consumer_callbacks = { - device_data_consumer_put_bytes, - NULL -}; - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 40000 - -CFStringRef format_to_uti(format_type format) -{ - switch (format) { - case FORMAT_BMP: - return CFSTR("com.microsoft.bmp"); - case FORMAT_EXR: - return CFSTR("com.ilm.openexr-image"); - case FORMAT_GIF: - return CFSTR("com.compuserve.gif"); - case FORMAT_ICNS: - return CFSTR("com.apple.icns"); - case FORMAT_ICO: - return CFSTR("com.microsoft.ico"); - case FORMAT_JPEG: - return CFSTR("public.jpeg"); - case FORMAT_JPEG2000: - return CFSTR("public.jpeg-2000"); - case FORMAT_PICT: - return CFSTR("com.apple.pict"); - case FORMAT_PNG: - return CFSTR("public.png"); - case FORMAT_PSD: - return CFSTR("com.adobe.photoshop-image"); - case FORMAT_SGI: - return CFSTR("com.sgi.sgi-image"); - case FORMAT_TIFF: - return CFSTR("public.tiff"); - case FORMAT_TGA: - return CFSTR("com.truevision.tga-image"); - default: - return NULL; - } -} - -#endif - -static gvplugin_api_t apis[] = { - {API_render, &gvrender_quartz_types}, - {API_textlayout, &gvtextlayout_quartz_types}, - {API_loadimage, &gvloadimage_quartz_types}, - {API_device, &gvdevice_quartz_types}, -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 && defined(HAVE_PANGOCAIRO) - {API_device, &gvdevice_quartz_types_for_cairo}, -#endif - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_quartz_LTX_library = { "quartz", apis }; diff --git a/internal/plugin/quartz/gvplugin_quartz.h b/internal/plugin/quartz/gvplugin_quartz.h deleted file mode 100644 index 03af804..0000000 --- a/internal/plugin/quartz/gvplugin_quartz.h +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef GVPLUGIN_QUARTZ_H -#define GVPLUGIN_QUARTZ_H - -#include - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#include -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - FORMAT_NONE, - FORMAT_CGIMAGE, - FORMAT_BMP, - FORMAT_EXR, - FORMAT_GIF, - FORMAT_ICNS, - FORMAT_ICO, - FORMAT_JPEG, - FORMAT_JPEG2000, - FORMAT_PDF, - FORMAT_PICT, - FORMAT_PNG, - FORMAT_PSD, - FORMAT_SGI, - FORMAT_TIFF, - FORMAT_TGA -} format_type; - -static const int BYTE_ALIGN = 15; /* align to 16 bytes */ -static const int BITS_PER_COMPONENT = 8; /* bits per color component */ -static const int BYTES_PER_PIXEL = 4; /* bytes per pixel */ - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 40000 -CFStringRef format_to_uti(format_type format); -#endif - -extern CGDataConsumerCallbacks device_data_consumer_callbacks; - -/* gvtextlayout_quartz.c in Mac OS X: layout is a CoreText CTLineRef */ -/* GVTextLayout.m in iPhoneOS: layout is a custom Objective-C GVTextLayout */ - -void *quartz_new_layout(char* fontname, double fontsize, char* text); -void quartz_size_layout(void *layout, double* width, double* height, double* yoffset_layout); -void quartz_draw_layout(void *layout, CGContextRef context, CGPoint position); -void quartz_free_layout(void *layout); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/internal/plugin/quartz/gvrender_quartz.c b/internal/plugin/quartz/gvrender_quartz.c deleted file mode 100644 index f0995ff..0000000 --- a/internal/plugin/quartz/gvrender_quartz.c +++ /dev/null @@ -1,521 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 -#include -#include -#endif - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 40000 -#include -#endif - -#include "gvplugin_device.h" -#include "gvplugin_render.h" -#include "cgraph.h" - -#include "gvplugin_quartz.h" - -static CGFloat dashed[] = { 6.0 }; -static CGFloat dotted[] = { 2.0, 6.0 }; - -static void quartzgen_begin_job(GVJ_t * job) -{ - switch (job->device.id) { - case FORMAT_CGIMAGE: - /* save the passed-in context in the window field, so we can create a CGContext in the context field later on */ - job->window = job->context; - *((CGImageRef *) job->window) = NULL; - } - - job->context = NULL; -} - -static void quartzgen_end_job(GVJ_t * job) -{ - CGContextRef context = (CGContextRef) job->context; - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 - void* context_data; - size_t context_datalen; - - switch (job->device.id) { - - case FORMAT_PDF: - context_data = NULL; - context_datalen = 0; - break; - - default: - context_data = CGBitmapContextGetData(context); - context_datalen = CGBitmapContextGetBytesPerRow(context) * CGBitmapContextGetHeight(context); - break; - } -#endif - - switch (job->device.id) { - - case FORMAT_PDF: - /* save the PDF */ - CGPDFContextClose(context); - break; - - case FORMAT_CGIMAGE: - /* create an image and save it where the window field is, which was set to the passed-in context at begin job */ - *((CGImageRef *) job->window) = CGBitmapContextCreateImage(context); - break; - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 40000 - default: /* bitmap formats */ - { - /* create an image destination */ - CGDataConsumerRef data_consumer = - CGDataConsumerCreate(job, - &device_data_consumer_callbacks); - CGImageDestinationRef image_destination = - CGImageDestinationCreateWithDataConsumer(data_consumer, - format_to_uti(job->device.id), - 1, - NULL); - - /* add the bitmap image to the destination and save it */ - CGImageRef image = CGBitmapContextCreateImage(context); - CGImageDestinationAddImage(image_destination, image, NULL); - CGImageDestinationFinalize(image_destination); - - /* clean up */ - if (image_destination) - CFRelease(image_destination); - CGImageRelease(image); - CGDataConsumerRelease(data_consumer); - } - break; -#endif - } - - CGContextRelease(context); - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 - if (context_data && context_datalen) - munmap(context_data, context_datalen); -#endif -} - -static void quartzgen_begin_page(GVJ_t * job) -{ - CGRect bounds = CGRectMake(0.0, 0.0, job->width, job->height); - - if (!job->context) { - - switch (job->device.id) { - - case FORMAT_PDF: - { - /* create the auxiliary info for PDF content, author and title */ - CFStringRef auxiliaryKeys[] = { - kCGPDFContextCreator, - kCGPDFContextTitle - }; - CFStringRef auxiliaryValues[] = { - CFStringCreateWithFormat(kCFAllocatorDefault, NULL, - CFSTR("%s %s"), - job->common->info[0], - job->common->info[1]), - job->obj->type == - ROOTGRAPH_OBJTYPE ? - CFStringCreateWithBytesNoCopy(kCFAllocatorDefault, - (const UInt8 *) agnameof(job->obj->u.g), - strlen(agnameof(job->obj->u.g)), - kCFStringEncodingUTF8, - false, - kCFAllocatorNull) - : CFSTR("") - }; - CFDictionaryRef auxiliaryInfo = - CFDictionaryCreate(kCFAllocatorDefault, - (const void **) &auxiliaryKeys, - (const void **) &auxiliaryValues, - sizeof(auxiliaryValues) / - sizeof(auxiliaryValues[0]), - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - /* create a PDF for drawing into */ - CGDataConsumerRef data_consumer = - CGDataConsumerCreate(job, - &device_data_consumer_callbacks); - job->context = - CGPDFContextCreate(data_consumer, &bounds, - auxiliaryInfo); - - /* clean up */ - CGDataConsumerRelease(data_consumer); - CFRelease(auxiliaryInfo); - int i; - for (i = 0; - i < - sizeof(auxiliaryValues) / sizeof(auxiliaryValues[0]); - ++i) - CFRelease(auxiliaryValues[i]); - } - break; - - default: /* bitmap formats */ - { - size_t bytes_per_row = - (job->width * BYTES_PER_PIXEL + - BYTE_ALIGN) & ~BYTE_ALIGN; - - void *buffer = NULL; - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 - - /* iPhoneOS has no swap files for memory, so if we're short of memory we need to make our own temp scratch file to back it */ - - size_t buffer_size = job->height * bytes_per_row; - mach_msg_type_number_t vm_info_size = HOST_VM_INFO_COUNT; - vm_statistics_data_t vm_info; - - if (host_statistics - (mach_host_self(), HOST_VM_INFO, - (host_info_t) & vm_info, - &vm_info_size) != KERN_SUCCESS - || buffer_size * 2 > - vm_info.free_count * vm_page_size) { - FILE *temp_file = tmpfile(); - if (temp_file) { - int temp_file_descriptor = fileno(temp_file); - if (temp_file_descriptor >= 0 - && ftruncate(temp_file_descriptor, - buffer_size) == 0) { - buffer = - mmap(NULL, buffer_size, - PROT_READ | PROT_WRITE, - MAP_FILE | MAP_SHARED, - temp_file_descriptor, 0); - if (buffer == (void *) -1) - buffer = NULL; - } - fclose(temp_file); - } - } - if (!buffer) - buffer = mmap(NULL, - buffer_size, - PROT_READ | PROT_WRITE, - MAP_ANON | MAP_SHARED, -1, 0); -#endif - - /* create a true color bitmap for drawing into */ - CGColorSpaceRef color_space = - CGColorSpaceCreateDeviceRGB(); - job->context = CGBitmapContextCreate(buffer, /* data: MacOSX lets system allocate, iPhoneOS use manual memory mapping */ - job->width, /* width in pixels */ - job->height, /* height in pixels */ - BITS_PER_COMPONENT, /* bits per component */ - bytes_per_row, /* bytes per row: align to 16 byte boundary */ - color_space, /* color space: device RGB */ - kCGImageAlphaPremultipliedFirst /* bitmap info: premul ARGB has best support in OS X */ - ); - job->imagedata = - CGBitmapContextGetData((CGContextRef) job->context); - - /* clean up */ - CGColorSpaceRelease(color_space); - } - break; - } - - } - - /* start the page (if this is a paged context) and graphics state */ - CGContextRef context = (CGContextRef) job->context; - CGContextBeginPage(context, &bounds); - CGContextSaveGState(context); - /* CGContextSetMiterLimit(context, 1.0); */ - /* CGContextSetLineJoin(context, kCGLineJoinBevel); */ - - /* set up the context transformation */ - CGContextScaleCTM(context, job->scale.x, job->scale.y); - CGContextRotateCTM(context, -job->rotation * M_PI / 180.0); - CGContextTranslateCTM(context, job->translation.x, job->translation.y); -} - -static void quartzgen_end_page(GVJ_t * job) -{ - /* end the page (if this is a paged context) and graphics state */ - CGContextRef context = (CGContextRef) job->context; - CGContextRestoreGState(context); - CGContextEndPage(context); -} - -static void quartzgen_begin_anchor(GVJ_t * job, char *url, char *tooltip, - char *target, char *id) -{ - pointf *url_map = job->obj->url_map_p; - if (url && url_map) { - /* set up the hyperlink to the given url */ - CGContextRef context = (CGContextRef) job->context; - CFURLRef uri = - CFURLCreateWithBytes(kCFAllocatorDefault, (const UInt8 *) url, - strlen(url), kCFStringEncodingUTF8, NULL); - CGPDFContextSetURLForRect(context, uri, - /* need to reverse the CTM on the area to get it to work */ - CGRectApplyAffineTransform(CGRectMake - (url_map[0].x, - url_map[0].y, - url_map[1]. - x - - url_map[0].x, - url_map[1]. - y - - url_map[0]. - y), - CGContextGetCTM - (context)) - ); - - /* clean up */ - CFRelease(uri); - } -} - -static void quartzgen_path(GVJ_t * job, int filled) -{ - CGContextRef context = (CGContextRef) job->context; - - /* set up colors */ - if (filled) - CGContextSetRGBFillColor(context, job->obj->fillcolor.u.RGBA[0], - job->obj->fillcolor.u.RGBA[1], - job->obj->fillcolor.u.RGBA[2], - job->obj->fillcolor.u.RGBA[3]); - CGContextSetRGBStrokeColor(context, job->obj->pencolor.u.RGBA[0], - job->obj->pencolor.u.RGBA[1], - job->obj->pencolor.u.RGBA[2], - job->obj->pencolor.u.RGBA[3]); - - /* set up line style */ - const CGFloat *segments; - size_t segment_count; - switch (job->obj->pen) { - case PEN_DASHED: - segments = dashed; - segment_count = sizeof(dashed) / sizeof(CGFloat); - break; - case PEN_DOTTED: - segments = dotted; - segment_count = sizeof(dotted) / sizeof(CGFloat); - break; - default: - segments = NULL; - segment_count = 0; - break; - } - CGContextSetLineDash(context, 0.0, segments, segment_count); - - /* set up line width */ - CGContextSetLineWidth(context, job->obj->penwidth); // *job->scale.x); - - /* draw the path */ - CGContextDrawPath(context, filled ? kCGPathFillStroke : kCGPathStroke); -} - -void quartzgen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - CGContextRef context = (CGContextRef) job->context; - - /* adjust text position */ - switch (span->just) { - case 'r': - p.x -= span->size.x; - break; - case 'l': - p.x -= 0.0; - break; - case 'n': - default: - p.x -= span->size.x / 2.0; - break; - } - p.y += span->yoffset_centerline; - - void *layout; - if (span->free_layout == &quartz_free_layout) - layout = span->layout; - else - layout = - quartz_new_layout(span->font->name, span->font->size, span->str); - - CGContextSetRGBFillColor(context, job->obj->pencolor.u.RGBA[0], - job->obj->pencolor.u.RGBA[1], - job->obj->pencolor.u.RGBA[2], - job->obj->pencolor.u.RGBA[3]); - quartz_draw_layout(layout, context, CGPointMake(p.x, p.y)); - - if (span->free_layout != &quartz_free_layout) - quartz_free_layout(layout); -} - -static void quartzgen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - /* convert ellipse into the current path */ - CGContextRef context = (CGContextRef) job->context; - double dx = A[1].x - A[0].x; - double dy = A[1].y - A[0].y; - CGContextAddEllipseInRect(context, - CGRectMake(A[0].x - dx, A[0].y - dy, - dx * 2.0, dy * 2.0)); - - /* draw the ellipse */ - quartzgen_path(job, filled); -} - -static void quartzgen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - /* convert polygon into the current path */ - CGContextRef context = (CGContextRef) job->context; - CGContextMoveToPoint(context, A[0].x, A[0].y); - int i; - for (i = 1; i < n; ++i) - CGContextAddLineToPoint(context, A[i].x, A[i].y); - CGContextClosePath(context); - - /* draw the ellipse */ - quartzgen_path(job, filled); -} - -static void -quartzgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, - int arrow_at_end, int filled) -{ - /* convert bezier into the current path */ - CGContextRef context = (CGContextRef) job->context; - CGContextMoveToPoint(context, A[0].x, A[0].y); - int i; - for (i = 1; i < n; i += 3) - CGContextAddCurveToPoint(context, A[i].x, A[i].y, A[i + 1].x, - A[i + 1].y, A[i + 2].x, A[i + 2].y); - - /* draw the ellipse */ - quartzgen_path(job, filled); -} - -static void quartzgen_polyline(GVJ_t * job, pointf * A, int n) -{ - /* convert polyline into the current path */ - CGContextRef context = (CGContextRef) job->context; - CGContextMoveToPoint(context, A[0].x, A[0].y); - int i; - for (i = 1; i < n; ++i) - CGContextAddLineToPoint(context, A[i].x, A[i].y); - - /* draw the ellipse */ - quartzgen_path(job, FALSE); -} - -static gvrender_engine_t quartzgen_engine = { - quartzgen_begin_job, - quartzgen_end_job, - 0, /* quartzgen_begin_graph */ - 0, /* quartzgen_end_graph */ - 0, /* quartzgen_begin_layer */ - 0, /* quartzgen_end_layer */ - quartzgen_begin_page, - quartzgen_end_page, - 0, /* quartzgen_begin_cluster */ - 0, /* quartzgen_end_cluster */ - 0, /* quartzgen_begin_nodes */ - 0, /* quartzgen_end_nodes */ - 0, /* quartzgen_begin_edges */ - 0, /* quartzgen_end_edges */ - 0, /* quartzgen_begin_node */ - 0, /* quartzgen_end_node */ - 0, /* quartzgen_begin_edge */ - 0, /* quartzgen_end_edge */ - quartzgen_begin_anchor, - 0, /* quartzgen_end_anchor */ - 0, /* quartzgen_begin_label */ - 0, /* quartzgen_end_label */ - quartzgen_textspan, - 0, - quartzgen_ellipse, - quartzgen_polygon, - quartzgen_bezier, - quartzgen_polyline, - 0, /* quartzgen_comment */ - 0, /* quartzgen_library_shape */ -}; - -static gvrender_features_t render_features_quartz = { - GVRENDER_DOES_MAPS | GVRENDER_DOES_MAP_RECTANGLE | GVRENDER_DOES_TRANSFORM, /* flags */ - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_DOUBLE /* color_type */ -}; - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 -static gvdevice_features_t device_features_quartz = { - GVDEVICE_BINARY_FORMAT | GVDEVICE_DOES_TRUECOLOR, /* flags */ - {0., 0.}, /* default margin - points */ - {0., 0.}, /* default page width, height - points */ - {96., 96.} /* dpi */ -}; -#endif - -static gvdevice_features_t device_features_quartz_paged = { - GVDEVICE_DOES_PAGES | GVDEVICE_BINARY_FORMAT | GVDEVICE_DOES_TRUECOLOR | GVRENDER_NO_WHITE_BG, /* flags */ - {36., 36.}, /* default margin - points */ - {0., 0.}, /* default page width, height - points */ - {72., 72.} /* dpi */ -}; - -gvplugin_installed_t gvrender_quartz_types[] = { - {0, "quartz", 1, &quartzgen_engine, &render_features_quartz}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_quartz_types[] = { - {FORMAT_PDF, "pdf:quartz", 8, NULL, &device_features_quartz_paged}, -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 20000 - {FORMAT_CGIMAGE, "cgimage:quartz", 8, NULL, &device_features_quartz}, -#endif -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 40000 - {FORMAT_BMP, "bmp:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_GIF, "gif:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_ICO, "ico:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_JPEG, "jpe:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_JPEG, "jpeg:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_JPEG, "jpg:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_JPEG2000, "jp2:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_PNG, "png:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_TIFF, "tif:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_TIFF, "tiff:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_TGA, "tga:quartz", 8, NULL, &device_features_quartz}, -#endif -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040 - {FORMAT_EXR, "exr:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_ICNS, "icns:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_PICT, "pct:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_PICT, "pict:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_PSD, "psd:quartz", 8, NULL, &device_features_quartz}, - {FORMAT_SGI, "sgi:quartz", 8, NULL, &device_features_quartz}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/quartz/gvtextlayout_quartz.c b/internal/plugin/quartz/gvtextlayout_quartz.c deleted file mode 100644 index ae64a6e..0000000 --- a/internal/plugin/quartz/gvtextlayout_quartz.c +++ /dev/null @@ -1,115 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_textlayout.h" -#include "gvplugin_quartz.h" - -#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 30200 -#include -#endif - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 || __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 30200 - -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060 -/* symbol defined in 10.5.x dylib but not in headers */ -extern const CFStringRef kCTForegroundColorFromContextAttributeName; -#endif - -void *quartz_new_layout(char* fontname, double fontsize, char* text) -{ - CFStringRef fontnameref = CFStringCreateWithBytes(kCFAllocatorDefault, (const UInt8 *)fontname, strlen(fontname), kCFStringEncodingUTF8, FALSE); - CFStringRef textref = CFStringCreateWithBytes(kCFAllocatorDefault, (const UInt8 *)text, strlen(text), kCFStringEncodingUTF8, FALSE); - CTLineRef line = NULL; - - if (fontnameref && textref) { - /* set up the Core Text line */ - CTFontRef font = CTFontCreateWithName(fontnameref, fontsize, NULL); - CFTypeRef attributeNames[] = { kCTFontAttributeName, kCTForegroundColorFromContextAttributeName }; - CFTypeRef attributeValues[] = { font, kCFBooleanTrue }; - CFDictionaryRef attributes = CFDictionaryCreate( - kCFAllocatorDefault, - (const void**)attributeNames, - (const void**)attributeValues, - 2, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - CFAttributedStringRef attributed = CFAttributedStringCreate(kCFAllocatorDefault, textref, attributes); - line = CTLineCreateWithAttributedString(attributed); - - CFRelease(attributed); - CFRelease(attributes); - CFRelease(font); - } - - if (textref) - CFRelease(textref); - if (fontnameref) - CFRelease(fontnameref); - return (void *)line; -} - -void quartz_size_layout(void *layout, double* width, double* height, double* yoffset_layout) -{ - /* get the typographic bounds */ - CGFloat ascent = 0.0; - CGFloat descent = 0.0; - CGFloat leading = 0.0; - - *width = CTLineGetTypographicBounds((CTLineRef)layout, &ascent, &descent, &leading); - *height = ascent + descent + leading; - *yoffset_layout = ascent; -} - -void quartz_draw_layout(void *layout, CGContextRef context, CGPoint position) -{ - CGContextSetTextPosition(context, position.x, position.y); - CTLineDraw((CTLineRef)layout, context); -} - -void quartz_free_layout(void *layout) -{ - if (layout) - CFRelease((CTLineRef)layout); -}; - -#endif - -boolean quartz_textlayout(textspan_t *para, char **fontpath) -{ - void *line = quartz_new_layout(para->font->name, para->font->size, para->str); - if (line) - { - /* report the layout */ - para->layout = (void*)line; - para->free_layout = &quartz_free_layout; - quartz_size_layout((void*)line, ¶->size.x, ¶->size.y, ¶->yoffset_layout); - para->yoffset_centerline = 0.2 * para->font->size; - return TRUE; - } - else - return FALSE; -}; - -static gvtextlayout_engine_t quartz_textlayout_engine = { - quartz_textlayout -}; - -gvplugin_installed_t gvtextlayout_quartz_types[] = { - {0, "textlayout", 8, &quartz_textlayout_engine, NULL}, - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/rsvg/dummy.go b/internal/plugin/rsvg/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/rsvg/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/rsvg/gvloadimage_rsvg.c b/internal/plugin/rsvg/gvloadimage_rsvg.c deleted file mode 100644 index 69ecdf4..0000000 --- a/internal/plugin/rsvg/gvloadimage_rsvg.c +++ /dev/null @@ -1,217 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_loadimage.h" - -#ifdef HAVE_PANGOCAIRO -#ifdef HAVE_RSVG -#include -#ifndef RSVG_CAIRO_H -#include -#endif -#include - -#ifdef WIN32 -#define NUL_FILE "nul" -#else -#define NUL_FILE "/dev/null" -#endif - -typedef enum { - FORMAT_SVG_CAIRO, -} format_type; - - -static void gvloadimage_rsvg_free(usershape_t *us) -{ - rsvg_handle_close((RsvgHandle*)us->data, NULL); -} - -static RsvgHandle* gvloadimage_rsvg_load(GVJ_t * job, usershape_t *us) -{ - RsvgHandle* rsvgh = NULL; - guchar *fileBuf = NULL; - GError *err = NULL; - gsize fileSize; - gint result; - - int fd; - struct stat stbuf; - - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree == gvloadimage_rsvg_free) - rsvgh = (RsvgHandle*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->data = NULL; - } - - } - - if (!rsvgh) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - switch (us->type) { - case FT_SVG: - - -#if HAVE_G_TYPE_INIT -/* g_type_init() was deprecated in glib 2.36.0 */ -#if !GLIB_CHECK_VERSION (2, 36, 0) - g_type_init(); -#endif -#else - rsvg_init(); -#endif - - rsvgh = rsvg_handle_new(); - - if (rsvgh == NULL) { - fprintf(stderr, "rsvg_handle_new_from_file returned an error: %s\n", err->message); -#if HAVE_G_TYPE_TERM - g_type_term(); -#else -#ifndef HAVE_SVG_2_36 - rsvg_term(); -#endif -#endif - return NULL; - } - - fd = fileno(us->f); - fstat(fd, &stbuf); - fileSize = stbuf.st_size; - - fileBuf = calloc(fileSize + 1, sizeof(guchar)); - - if (fileBuf == NULL) { -#if HAVE_G_OBJECT_UNREF - g_object_unref(rsvgh); -#else - rsvg_handle_free(rsvgh); -#endif -#if HAVE_G_TYPE_TERM - g_type_term(); -#else -#ifndef HAVE_SVG_2_36 - rsvg_term(); -#endif -#endif - return NULL; - } - - rewind(us->f); - - if ((result = fread(fileBuf, 1, fileSize, us->f)) < fileSize) { - free(fileBuf); -#if HAVE_G_OBJECT_UNREF - g_object_unref(rsvgh); -#else - rsvg_handle_free(rsvgh); -#endif -#if HAVE_G_TYPE_TERM - g_type_term(); -#else -#ifndef HAVE_SVG_2_36 - rsvg_term(); -#endif -#endif - return NULL; - } - - if (rsvg_handle_write(rsvgh, (const guchar *)fileBuf, (gsize)fileSize, &err) == FALSE) { - fprintf(stderr, "rsvg_handle_write returned an error: %s\n", err->message); - free(fileBuf); -#if HAVE_G_OBJECT_UNREF - g_object_unref(rsvgh); -#else - rsvg_handle_free(rsvgh); -#endif -#if HAVE_G_TYPE_TERM - g_type_term(); -#else -#ifndef HAVE_SVG_2_36 - rsvg_term(); -#endif -#endif - return NULL; - } - - free(fileBuf); - - rsvg_handle_close(rsvgh, &err); - rsvg_handle_set_dpi(rsvgh, POINTS_PER_INCH); - - break; - default: - rsvgh = NULL; - } - - if (rsvgh) { - us->data = (void*)rsvgh; - us->datafree = gvloadimage_rsvg_free; - } - - gvusershape_file_release(us); - } - - return rsvgh; -} - -static void gvloadimage_rsvg_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - RsvgHandle* rsvgh = gvloadimage_rsvg_load(job, us); - - cairo_t *cr = (cairo_t *) job->context; /* target context */ - cairo_surface_t *surface; /* source surface */ - - if (rsvgh) { - cairo_save(cr); - - surface = cairo_svg_surface_create(NUL_FILE, us->w, us->h); - - cairo_surface_reference(surface); - - cairo_set_source_surface(cr, surface, 0, 0); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - rsvg_handle_render_cairo(rsvgh, cr); - - cairo_paint (cr); - cairo_restore(cr); - } -} - -static gvloadimage_engine_t engine_cairo = { - gvloadimage_rsvg_cairo -}; -#endif -#endif - -gvplugin_installed_t gvloadimage_rsvg_types[] = { -#ifdef HAVE_PANGOCAIRO -#ifdef HAVE_RSVG - {FORMAT_SVG_CAIRO, "svg:cairo", 1, &engine_cairo, NULL}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/rsvg/gvplugin_rsvg.c b/internal/plugin/rsvg/gvplugin_rsvg.c deleted file mode 100644 index 3b0f713..0000000 --- a/internal/plugin/rsvg/gvplugin_rsvg.c +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvloadimage_rsvg_types[]; - -static gvplugin_api_t apis[] = { - {API_loadimage, gvloadimage_rsvg_types}, - {(api_t)0, 0}, -}; -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_rsvg_LTX_library = { "rsvg", apis }; -#else -gvplugin_library_t gvplugin_rsvg_LTX_library = { "rsvg", apis }; -#endif - diff --git a/internal/plugin/visio/VisioGraphic.cpp b/internal/plugin/visio/VisioGraphic.cpp deleted file mode 100644 index 303eac0..0000000 --- a/internal/plugin/visio/VisioGraphic.cpp +++ /dev/null @@ -1,566 +0,0 @@ -/* $Id: VisioGraphic.cpp,v 1.9 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.9 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include - -#ifdef _MSC_VER -#include -#define isfinite _finite -#endif - -#ifdef __GNUC__ -#include -#endif - -#ifdef __SUNPRO_CC -#include -#define isfinite(x) finite(x) -#endif - -#include "VisioGraphic.h" - -#include "gvcjob.h" -#include "gvio.h" - -namespace Visio -{ - using namespace std; - - static const float INCHES_PER_POINT = 1.0 / 72.0; - - Fill::Fill(unsigned char red, unsigned char green, unsigned char blue, double transparency): - _red(red), - _green(green), - _blue(blue), - _transparency(transparency) - { - } - - void Fill::Print(GVJ_t* job) const - { - gvputs(job, "\n"); - gvprintf(job, "#%02X%02X%02X\n", _red, _green, _blue); /* VDX uses hex colors */ - gvprintf(job, "%f\n", _transparency); - gvputs(job, "\n"); - } - - Line::Line(double weight, unsigned char red, unsigned char green, unsigned char blue, unsigned int pattern, unsigned int beginArrow, unsigned int endArrow): - _weight(weight), - _red(red), - _green(green), - _blue(blue), - _pattern(pattern), - _beginArrow(beginArrow), - _endArrow(endArrow) - { - } - - void Line::Print(GVJ_t* job) const - { - gvputs(job, "\n"); - gvprintf(job, "%f\n", _weight * job->scale.x * INCHES_PER_POINT); /* scale line weight, VDX uses inches */ - gvprintf(job, "#%02X%02X%02X\n", _red, _green, _blue); /* VDX uses hex colors */ - if (_pattern) - gvprintf(job, "%d\n", _pattern); - if (_beginArrow) - gvprintf(job, "%d\n", _beginArrow); - if (_endArrow) - gvprintf(job, "%d\n", _endArrow); - gvputs(job, "\n"); - } - - Geom::~Geom() - { - } - - Ellipse::Ellipse(pointf* points, bool filled): - _filled(filled) - { - _points[0] = points[0]; - _points[1] = points[1]; - } - - void Ellipse::Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const - { - gvputs(job, "\n"); - if (!_filled) - gvputs(job, "1\n"); /* omit fill? */ - gvputs(job, "\n"); - gvputs(job, "0\n"); /* semi ellipse */ - gvputs(job, "0\n"); /* semi ellipse */ - gvputs(job, "\n"); - } - - boxf Ellipse::GetBounds() const - { - /* point[0] is center, point[1] is one corner */ - boxf bounds; - bounds.LL.x = _points[0].x + _points[0].x - _points[1].x; - bounds.LL.y = _points[0].y + _points[0].y - _points[1].y; - bounds.UR.x = _points[1].x; - bounds.UR.y = _points[1].y; - return bounds; - } - - const Connection* Ellipse::GetConnection() const - { - return NULL; - } - - Path::Path(pointf* points, int pointCount) - { - /* copy over the points */ - _points = (pointf*)malloc(sizeof(_points[0]) * pointCount); - memcpy(_points, points, sizeof(_points[0]) * pointCount); - _pointCount = pointCount; - } - - Path::~Path() - { - /* since we copied, we need to free */ - free(_points); - } - - boxf Path::GetBounds() const - { - boxf bounds; - if (_points && _pointCount > 0) - { - /* lower left is the minimal point, upper right is maximal point */ - bounds.LL.x = bounds.UR.x = _points[0].x; - bounds.LL.y = bounds.UR.y = _points[0].y; - for (int i = 1; i < _pointCount; ++i) - { - if (bounds.LL.x > _points[i].x) - bounds.LL.x = _points[i].x; - if (bounds.LL.y > _points[i].y) - bounds.LL.y = _points[i].y; - if (bounds.UR.x < _points[i].x) - bounds.UR.x = _points[i].x; - if (bounds.UR.y < _points[i].y) - bounds.UR.y = _points[i].y; - } - } - else - { - /* no points, return null bounds */ - bounds.LL.x = bounds.UR.x = 0.0; - bounds.LL.y = bounds.UR.y = 0.0; - } - return bounds; - } - - Bezier::Bezier(pointf* points, int pointCount, bool filled): - Path(points, pointCount), - _filled(filled) - { - } - - const Connection* Bezier::GetConnection() const - { - return this; - } - - pointf Bezier::GetFirst() const - { - return _points[0]; - } - - pointf Bezier::GetLast() const - { - return _points[1]; - } - - pointf Bezier::GetCenter() const - { - if (_pointCount >= 4 && _pointCount % 2 == 0) - { - pointf center; - - /* the central control polygon for the bezier curve */ - pointf p0 = _points[_pointCount / 2 - 2]; - pointf p1 = _points[_pointCount / 2 - 1]; - pointf p2 = _points[_pointCount / 2]; - pointf p3 = _points[_pointCount / 2 + 1]; - - /* use de Casteljou's algorithm to get a midpoint */ - center.x = 0.125 * p0.x + 0.375 * p1.x + 0.375 * p2.x + 0.125 * p3.x; - center.y = 0.125 * p0.y + 0.375 * p1.y + 0.375 * p2.y + 0.125 * p3.y; - return center; - } - else - /* just return the middle point */ - return _points[_pointCount / 2]; - } - - void Bezier::Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const - { - gvputs(job, "\n"); - if (!_filled) - gvputs(job, "1\n"); - if (_pointCount > 0) - { - double xscale = 1.0 / (last.x - first.x); - double yscale = 1.0 / (last.y - first.y); - if (isfinite(xscale) == 0) - xscale = 0.0; - if (isfinite(yscale) == 0) - yscale = 0.0; - - gvputs(job, ""); - gvprintf(job, "", (_points[0].x - first.x) * xscale); - gvprintf(job, "", (_points[0].y - first.y) * yscale); - gvputs(job, "\n"); - - if (allowCurves) - { - /* convert Graphviz cubic bezier into VDX NURBS curve: */ - /* NURBS control points == bezier control points */ - /* NURBS order == bezier order == 3 */ - /* NURBS knot vector == { 0, 0, 0, 0, 1, 2 ... } */ - - gvputs(job, ""); - - /* Ctl[P-1].X */ - gvprintf(job, "", (_points[_pointCount - 1].x - first.x) * xscale); - - /* Ctl[P-1].Y */ - gvprintf(job, "", (_points[_pointCount - 1].y - first.y) * yscale); - - /* Knot[P-1] */ - gvprintf(job, "%d", max(_pointCount - 4, 0)); - - /* Ctl[P-1].Weight */ - gvputs(job, "1"); - - /* Knot[0] */ - gvputs(job, "0"); - - /* Weight[0] */ - gvputs(job, "1"); - - /* Knot[P], Degree, XType, YType */ - gvprintf(job, ""); - - gvputs(job, "\n"); - } - else - { - /* output lines only, so skip all the Bezier control points i.e. use every 3rd point */ - - if (_pointCount == 4) - { - /* single point, use VDX LineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[3].x - first.x) * xscale); - gvprintf(job, "", (_points[3].y - first.y) * yscale); - gvputs(job, "\n"); - } - else - { - /* multiple points, use VDX PolylineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[_pointCount - 1].x - first.x) * xscale); - gvprintf(job, "", (_points[_pointCount - 1].y - first.y) * yscale); - gvputs(job, ""); - gvputs(job, "\n"); - } - } - } - gvputs(job, "\n"); - } - - Polygon::Polygon(pointf* points, int pointCount, bool filled): - Path(points, pointCount), - _filled(filled) - { - } - - const Connection* Polygon::GetConnection() const - { - return NULL; - } - - void Polygon::Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const - { - gvputs(job, "\n"); - if (!_filled) - gvputs(job, "1\n"); - if (_pointCount > 0) - { - /* compute scale. if infinite, scale by 0 instead */ - double xscale = 1.0 / (last.x - first.x); - double yscale = 1.0 / (last.y - first.y); - if (isfinite(xscale) == 0) - xscale = 0.0; - if (isfinite(yscale) == 0) - yscale = 0.0; - - gvputs(job, ""); - gvprintf(job, "", (_points[0].x - first.x) * xscale); - gvprintf(job, "", (_points[0].y - first.y) * yscale); - gvputs(job, "\n"); - - if (_pointCount == 1) - { - /* single point, use VDX LineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[0].x - first.x) * xscale); - gvprintf(job, "", (_points[0].y - first.y) * yscale); - gvputs(job, "\n"); - } - else - { - /* multiple points, use VDX PolylineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[0].x - first.x) * xscale); - gvprintf(job, "", (_points[0].y - first.y) * yscale); - gvputs(job, ""); - gvputs(job, "\n"); - } - } - gvputs(job, "\n"); - } - - Polyline::Polyline(pointf* points, int pointCount): - Path(points, pointCount) - { - } - - const Connection* Polyline::GetConnection() const - { - return NULL; - } - - void Polyline::Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const - { - gvputs(job, "\n"); - if (_pointCount > 0) - { - /* compute scale. if infinite, scale by 0 instead */ - double xscale = 1.0 / (last.x - first.x); - double yscale = 1.0 / (last.y - first.y); - if (isfinite(xscale) == 0) - xscale = 0.0; - if (isfinite(yscale) == 0) - yscale = 0.0; - - gvputs(job, ""); - gvprintf(job, "", (_points[0].x - first.x) * xscale); - gvprintf(job, "", (_points[0].y - first.y) * yscale); - gvputs(job, "\n"); - - if (_pointCount == 2) - { - /* single point, use VDX LineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[1].x - first.x) * xscale); - gvprintf(job, "", (_points[1].y - first.y) * yscale); - gvputs(job, "\n"); - } - else - { - /* multiple points, use VDX PolylineTo */ - gvputs(job, ""); - gvprintf(job, "", (_points[_pointCount - 1].x - first.x) * xscale); - gvprintf(job, "", (_points[_pointCount - 1].y - first.y) * yscale); - gvputs(job, ""); - gvputs(job, "\n"); - } - } - gvputs(job, "\n"); - } - - Graphic* Graphic::CreateEllipse(GVJ_t* job, pointf* A, bool filled) - { - unsigned int pattern; - switch (job->obj->pen) - { - case PEN_DASHED: - pattern = 2; - break; - case PEN_DOTTED: - pattern = 3; - break; - default: - pattern = 1; - break; - } - return new Graphic( - new Line( - job->obj->penwidth, - job->obj->pencolor.u.rgba[0], - job->obj->pencolor.u.rgba[1], - job->obj->pencolor.u.rgba[2], - pattern), - filled ? new Fill( - job->obj->fillcolor.u.rgba[0], - job->obj->fillcolor.u.rgba[1], - job->obj->fillcolor.u.rgba[2], - (255 - job->obj->fillcolor.u.rgba[3]) / 255.0) : NULL, /* Graphviz alpha (00 - FF) to VDX transparency (1.0 - 0.0) */ - new Ellipse(A, filled)); - } - - Graphic* Graphic::CreateBezier(GVJ_t* job, pointf* A, int n, bool arrow_at_start, bool arrow_at_end, bool filled) - { - unsigned int pattern; - switch (job->obj->pen) - { - case PEN_DASHED: - pattern = 2; - break; - case PEN_DOTTED: - pattern = 3; - break; - default: - pattern = 1; - break; - } - return new Graphic( - new Line( - job->obj->penwidth, - job->obj->pencolor.u.rgba[0], - job->obj->pencolor.u.rgba[1], - job->obj->pencolor.u.rgba[2], - pattern, - arrow_at_start ? 2 : 0, /* VDX arrow type 2 == filled solid */ - arrow_at_end ? 2 : 0), /* VDX arrow type 2 == filled solid */ - filled ? new Fill( - job->obj->fillcolor.u.rgba[0], - job->obj->fillcolor.u.rgba[1], - job->obj->fillcolor.u.rgba[2], - (255 - job->obj->fillcolor.u.rgba[3]) / 255.0) : NULL, /* Graphviz alpha (00 - FF) to VDX transparency (1.0 - 0.0) */ - new Bezier( - A, - n, - filled)); - } - - Graphic* Graphic::CreatePolygon(GVJ_t* job, pointf* A, int n, bool filled) - { - unsigned int pattern; - switch (job->obj->pen) - { - case PEN_DASHED: - pattern = 2; - break; - case PEN_DOTTED: - pattern = 3; - break; - default: - pattern = 1; - break; - } - return new Graphic( - new Line( - job->obj->penwidth, - job->obj->pencolor.u.rgba[0], - job->obj->pencolor.u.rgba[1], - job->obj->pencolor.u.rgba[2], - pattern), - filled ? new Fill(job->obj->fillcolor.u.rgba[0], - job->obj->fillcolor.u.rgba[1], - job->obj->fillcolor.u.rgba[2], - (255 - job->obj->fillcolor.u.rgba[3]) / 255.0) : NULL, /* Graphviz alpha (00 - FF) to VDX transparency (1.0 - 0.0) */ - new Polygon( - A, - n, - filled)); - } - - Graphic* Graphic::CreatePolyline(GVJ_t* job, pointf* A, int n) - { - unsigned int pattern; - switch (job->obj->pen) - { - case PEN_DASHED: - pattern = 2; - break; - case PEN_DOTTED: - pattern = 3; - break; - default: - pattern = 1; - break; - } - return new Graphic( - new Line( - job->obj->penwidth, - job->obj->pencolor.u.rgba[0], - job->obj->pencolor.u.rgba[1], - job->obj->pencolor.u.rgba[2], - pattern), - NULL, /* polylines have no fill */ - new Polyline( - A, - n)); - } - - Graphic::Graphic(Line* line, Fill* fill, Geom* geom): - _line(line), - _fill(fill), - _geom(geom) - { - } - - Graphic::~Graphic() - { - if (_line) - delete _line; - if (_fill) - delete _fill; - if (_geom) - delete _geom; - } - - boxf Graphic::GetBounds() const - { - return _geom->GetBounds(); - } - - const Connection* Graphic::GetConnection() const - { - return _geom->GetConnection(); - } - - void Graphic::Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const - { - if (_line) - _line->Print(job); - if (_fill) - _fill->Print(job); - if (_geom) - _geom->Print(job, first, last, allowCurves); - - } - - -} diff --git a/internal/plugin/visio/VisioGraphic.h b/internal/plugin/visio/VisioGraphic.h deleted file mode 100644 index e99a238..0000000 --- a/internal/plugin/visio/VisioGraphic.h +++ /dev/null @@ -1,176 +0,0 @@ -/* $Id: VisioGraphic.h,v 1.8 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.8 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef VISIOGRAPHIC_H -#define VISIOGRAPHIC_H - -#include "types.h" - -namespace Visio -{ - /* Fill VDX element */ - - class Fill - { - public: - Fill(unsigned char red, unsigned char green, unsigned char blue, double transparency); - - /* output the fill */ - void Print(GVJ_t* job) const; - - private: - unsigned char _red; - unsigned char _green; - unsigned char _blue; - double _transparency; /* 0.0 == opaque, 1.0 == transparent */ - }; - - /* Line VDX element */ - - class Line - { - public: - Line(double weight, unsigned char red, unsigned char green, unsigned char blue, unsigned int pattern, unsigned int beginArrow = 0, unsigned int endArrow = 0); - - /* output the line */ - void Print(GVJ_t* job) const; - - private: - double _weight; - unsigned char _red; - unsigned char _green; - unsigned char _blue; - unsigned int _pattern; /* solid == 1, dashed == 2, dotted == 3 etc. */ - unsigned int _beginArrow; /* arrow type e.g. 2 is filled arrow head */ - unsigned int _endArrow; /* arrow type e.g. 2 is filled arrow head */ - }; - - /* Geom VDX element */ - - class Connection - { - public: - virtual pointf GetFirst() const = 0; - virtual pointf GetLast() const = 0; - virtual pointf GetCenter() const = 0; - }; - - class Geom - { - public: - virtual ~Geom(); - - virtual boxf GetBounds() const = 0; /* bounding box -- used by node logic */ - virtual const Connection* GetConnection() const = 0; /* first, last and center points -- used by edge logic */ - - /* given first (lower left) and last points (upper right), output the geometry */ - virtual void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const = 0; - }; - - class Ellipse: public Geom - { - public: - Ellipse(pointf* points, bool filled); - - virtual boxf GetBounds() const; - virtual const Connection* GetConnection() const; - - void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const; - - private: - bool _filled; - pointf _points[2]; - }; - - class Path: public Geom - { - public: - Path(pointf* points, int pointCount); - ~Path(); - - virtual boxf GetBounds() const; - - protected: - pointf* _points; - int _pointCount; - }; - - class Bezier: public Path, public Connection - { - public: - Bezier(pointf* points, int pointCount, bool filled); - - virtual const Connection* GetConnection() const; - - virtual pointf GetFirst() const; - virtual pointf GetLast() const; - virtual pointf GetCenter() const; - - virtual void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const; - - - private: - bool _filled; - }; - - class Polygon: public Path - { - public: - Polygon(pointf* points, int pointCount, bool filled); - - virtual const Connection* GetConnection() const; - - virtual void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const; - - private: - bool _filled; - }; - - class Polyline: public Path - { - public: - Polyline(pointf* points, int pointCount); - - virtual const Connection* GetConnection() const; - - void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const; - - }; - - /* Line, Fill and Geom details for each Graphviz graphic */ - - class Graphic - { - public: - static Graphic* CreateEllipse(GVJ_t* job, pointf* A, bool filled); - static Graphic* CreateBezier(GVJ_t* job, pointf* A, int n, bool arrow_at_start, bool arrow_at_end, bool filled); - static Graphic* CreatePolygon(GVJ_t* job, pointf* A, int n, bool filled); - static Graphic* CreatePolyline(GVJ_t* job, pointf* A, int n); - - ~Graphic(); - - boxf GetBounds() const; - const Connection* GetConnection() const; - - void Print(GVJ_t* job, pointf first, pointf last, bool allowCurves) const; - - private: - Graphic(Line* line, Fill* fill, Geom* geom); - - Line* _line; - Fill* _fill; - Geom* _geom; - }; -} - -#endif \ No newline at end of file diff --git a/internal/plugin/visio/VisioRender.cpp b/internal/plugin/visio/VisioRender.cpp deleted file mode 100644 index 481e82e..0000000 --- a/internal/plugin/visio/VisioRender.cpp +++ /dev/null @@ -1,503 +0,0 @@ -/* $Id: VisioRender.cpp,v 1.9 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.9 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#ifdef _MSC_VER -#include -#define isfinite _finite -#endif - -#ifdef __GNUC__ -#include -#endif - -#ifdef __SUNPRO_CC -#include -#define isfinite(x) finite(x) -#endif - -#include "VisioRender.h" - -#include "const.h" -#include "macros.h" -#include "gvcjob.h" -#include "gvio.h" - -namespace Visio -{ - using namespace std; - - static const float INCHES_PER_POINT = 1.0 / 72.0; - static const float ZERO_ADJUST = 0.125; - - enum ConLineRouteExt - { - LORouteExtDefault = 0, - LORouteExtStraight = 1, - LORouteExtNURBS = 2 - }; - - enum ShapeRouteStyle - { - LORouteDefault = 0, - LORouteRightAngle = 1, - LORouteStraight = 2, - LORouteCenterToCenter = 16 - }; - - Render::Render(): - _pageId(0), - _shapeId(0), - _hyperlinkId(0), - _inComponent(false), - _graphics(), - _texts(), - _hyperlinks(), - _nodeIds() - { - } - - Render::~Render() - { - } - - void Render::BeginGraph(GVJ_t* job) - { - gvputs(job, "\n"); - gvputs(job, "\n"); - } - - void Render::EndGraph(GVJ_t* job) - { - gvputs(job, "\n"); - gvputs(job, "\n"); - } - - void Render::BeginPage(GVJ_t* job) - { - gvprintf(job, "\n", ++_pageId); - - gvputs(job, "\n"); - gvputs(job, "\n"); - gvprintf(job, "%f\n", job->width * INCHES_PER_POINT); - gvprintf(job, "%f\n", job->height * INCHES_PER_POINT); - gvputs(job, "\n"); - gvputs(job, "\n"); - - gvputs(job, ""); - } - - void Render::EndPage(GVJ_t* job) - { - gvputs(job, "\n"); - gvputs(job, "\n"); - } - - void Render::BeginNode(GVJ_t* job) - { - _inComponent = true; - ClearGraphicsAndTexts(); - } - - void Render::EndNode(GVJ_t* job) - { - _inComponent = false; - - unsigned int outerShapeId = 0; - switch (_graphics.size()) - { - case 0: - /* no graphics to render */ - break; - case 1: - /* single graphic to render, output as top level shape */ - PrintOuterShape(job, _graphics[0]); - outerShapeId = _shapeId; - break; - default: - /* multiple graphics to render, output each as a subshape of a group */ - - /* calculate group bounds */ - boxf outerBounds = _graphics[0]->GetBounds(); - for (Graphics::const_iterator nextGraphic = _graphics.begin() + 1, lastGraphic = _graphics.end(); - nextGraphic != lastGraphic; - ++nextGraphic) - { - boxf innerBounds = (*nextGraphic)->GetBounds(); - if (outerBounds.LL.x > innerBounds.LL.x) - outerBounds.LL.x = innerBounds.LL.x; - if (outerBounds.LL.y > innerBounds.LL.y) - outerBounds.LL.y = innerBounds.LL.y; - if (outerBounds.UR.x < innerBounds.UR.x) - outerBounds.UR.x = innerBounds.UR.x; - if (outerBounds.UR.y < innerBounds.UR.y) - outerBounds.UR.y = innerBounds.UR.y; - } - - gvprintf(job, "\n", ++_shapeId); - outerShapeId = _shapeId; - - gvputs(job, "\n"); - gvprintf(job, "%f\n", (outerBounds.LL.x + outerBounds.UR.x) * 0.5 * INCHES_PER_POINT); - gvprintf(job, "%f\n", (outerBounds.LL.y + outerBounds.UR.y) * 0.5 * INCHES_PER_POINT); - gvprintf(job, "%f\n", (outerBounds.UR.x - outerBounds.LL.x) * INCHES_PER_POINT); - gvprintf(job, "%f\n", (outerBounds.UR.y - outerBounds.LL.y) * INCHES_PER_POINT); - gvputs(job, "\n"); - - /* output Hyperlink */ - PrintHyperlinks(job); - - /* output Para, Char */ - PrintTexts(job); - - /* output subshapes */ - gvputs(job, "\n"); - for (Graphics::const_iterator nextGraphic = _graphics.begin(), lastGraphic = _graphics.end(); nextGraphic != lastGraphic; ++nextGraphic) - PrintInnerShape(job, *nextGraphic, outerShapeId, outerBounds); - gvputs(job, "\n"); - - gvputs(job, "\n"); - break; - } - - /* save node id for edge logic */ - if (outerShapeId) - _nodeIds[job->obj->u.n] = outerShapeId; - ClearGraphicsAndTexts(); - } - - void Render::BeginEdge(GVJ_t* job) - { - _inComponent = true; - ClearGraphicsAndTexts(); - } - - void Render::EndEdge(GVJ_t* job) - { - _inComponent = false; - - if (_graphics.size() > 0) - { - Agedge_t* edge = job->obj->u.e; - - /* get previously saved ids for tail and head node; edge type for graph */ - NodeIds::const_iterator beginId = _nodeIds.find(agtail(edge)); - NodeIds::const_iterator endId = _nodeIds.find(aghead(edge)); - - /* output first connectable shape as an edge shape, all else as regular outer shapes */ - bool firstConnector = true; - for (Graphics::const_iterator nextGraphic = _graphics.begin(), lastGraphic = _graphics.end(); nextGraphic != lastGraphic; ++nextGraphic) - if (firstConnector && PrintEdgeShape(job, - _graphics[0], - beginId == _nodeIds.end() ? 0 : beginId->second, - endId == _nodeIds.end() ? 0 : endId->second, - EDGE_TYPE(agroot(edge)))) - firstConnector = false; - else - PrintOuterShape(job, *nextGraphic); - - } - ClearGraphicsAndTexts(); - } - - void Render::AddEllipse(GVJ_t* job, pointf* A, bool filled) - { - AddGraphic(job, Graphic::CreateEllipse(job, A, filled)); - } - - void Render::AddBezier(GVJ_t* job, pointf* A, int n, bool arrow_at_start, bool arrow_at_end, bool filled) - { - AddGraphic(job, Graphic::CreateBezier(job, A, n, arrow_at_start, arrow_at_end, filled)); - } - - void Render::AddPolygon(GVJ_t* job, pointf* A, int n, bool filled) - { - AddGraphic(job, Graphic::CreatePolygon(job, A, n, filled)); - } - - void Render::AddPolyline(GVJ_t* job, pointf* A, int n) - { - AddGraphic(job, Graphic::CreatePolyline(job, A, n)); - } - - void Render::AddText(GVJ_t* job, pointf p, textspan_t *span) - { - AddText(job, Text::CreateText(job, p, span)); - } - - void Render::AddAnchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id) - { - AddHyperlink(job, Hyperlink::CreateHyperlink(job, url, tooltip, target, id)); - } - - void Render::ClearGraphicsAndTexts() - { - /* clear graphics */ - for (Graphics::iterator nextGraphic = _graphics.begin(), lastGraphic = _graphics.end(); nextGraphic != lastGraphic; ++nextGraphic) - delete *nextGraphic; - _graphics.clear(); - - /* clear texts */ - for (Texts::iterator nextText = _texts.begin(), lastText = _texts.end(); nextText != lastText; ++nextText) - delete *nextText; - _texts.clear(); - - /* clear hyperlinks */ - for (Hyperlinks::iterator nextHyperlink = _hyperlinks.begin(), lastHyperlink = _hyperlinks.end(); nextHyperlink != lastHyperlink; ++nextHyperlink) - delete *nextHyperlink; - _hyperlinks.clear(); - } - - void Render::AddGraphic(GVJ_t* job, const Graphic* graphic) - { - if (_inComponent) - /* if in component, accumulate for end node/edge */ - _graphics.push_back(graphic); - else - /* if outside, output immediately */ - PrintOuterShape(job, graphic); - } - - void Render::AddText(GVJ_t* job, const Text* text) - { - /* if in component, accumulate for end node/edge */ - if (_inComponent) - _texts.push_back(text); - } - - void Render::AddHyperlink(GVJ_t* job, const Hyperlink* hyperlink) - { - /* if in component, accumulate for end node/edge */ - if (_inComponent) - _hyperlinks.push_back(hyperlink); - } - - void Render::PrintOuterShape(GVJ_t* job, const Graphic* graphic) - { - boxf bounds = graphic->GetBounds(); - - gvprintf(job, "\n", ++_shapeId); - - gvputs(job, "\n"); - gvprintf(job, "%f\n", (bounds.LL.x + bounds.UR.x) * 0.5 * INCHES_PER_POINT); - gvprintf(job, "%f\n", (bounds.LL.y + bounds.UR.y) * 0.5 * INCHES_PER_POINT); - gvprintf(job, "%f\n", (bounds.UR.x - bounds.LL.x) * INCHES_PER_POINT); - gvprintf(job, "%f\n", (bounds.UR.y - bounds.LL.y) * INCHES_PER_POINT); - gvputs(job, "\n"); - - gvputs(job, "\n"); - gvputs(job, "1\n"); - gvputs(job, "\n"); - - /* output Hyperlink */ - PrintHyperlinks(job); - - /* output Para, Char, Text */ - PrintTexts(job); - - /* output Line, Fill, Geom */ - graphic->Print(job, bounds.LL, bounds.UR, true); - - gvputs(job, "\n"); - } - - void Render::PrintInnerShape(GVJ_t* job, const Graphic* graphic, unsigned int outerId, boxf outerBounds) - { - boxf innerBounds = graphic->GetBounds(); - - /* compute scale. if infinite, scale by 0 instead */ - double xscale = 1.0 / (outerBounds.UR.x - outerBounds.LL.x); - double yscale = 1.0 / (outerBounds.UR.y - outerBounds.LL.y); - if (isfinite(xscale) == 0) - xscale = 0.0; - if (isfinite(yscale) == 0) - yscale = 0.0; - - gvprintf(job, "\n", ++_shapeId); - - /* inner XForm is based on width or height of outer Shape */ - gvputs(job, "\n"); - gvprintf(job, "\n", outerId, (((innerBounds.LL.x + innerBounds.UR.x) * 0.5) - outerBounds.LL.x) * xscale); - gvprintf(job, "\n", outerId, (((innerBounds.LL.y + innerBounds.UR.y) * 0.5) - outerBounds.LL.y) * yscale); - gvprintf(job, "\n", outerId, (innerBounds.UR.x - innerBounds.LL.x) * xscale); - gvprintf(job, "\n", outerId, (innerBounds.UR.y - innerBounds.LL.y) * yscale); - gvputs(job, "\n"); - - gvputs(job, "\n"); - gvputs(job, "1\n"); - gvputs(job, "\n"); - - /* output Line, Fill, Geom */ - graphic->Print(job, innerBounds.LL, innerBounds.UR, true); - - gvputs(job, "\n"); - } - - bool Render::PrintEdgeShape(GVJ_t* job, const Graphic* graphic, unsigned int beginId, unsigned int endId, int edgeType) - { - if (const Connection* connection = graphic->GetConnection()) - { - pointf first = connection->GetFirst(); - pointf last = connection->GetLast(); - - bool zeroWidth = first.x == last.x; - bool zeroHeight = first.y == last.y; - - gvprintf(job, "\n", ++_shapeId); - - /* XForm depends on XForm1D */ - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - if (zeroWidth) - gvprintf(job, "\n", 2 * ZERO_ADJUST); /* if vertical line, expand width to 0.25 inches */ - else - gvputs(job, "\n"); - if (zeroHeight) - gvprintf(job, "\n", 2 * ZERO_ADJUST); /* if horizontal line, expand height to 0.25 inches */ - else - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - - /* XForm1D walking glue makes connector attach to its nodes */ - gvputs(job, "\n"); - gvprintf(job, "%f\n", first.x * INCHES_PER_POINT); - gvprintf(job, "%f\n", first.y * INCHES_PER_POINT); - gvprintf(job, "%f\n", last.x * INCHES_PER_POINT); - gvprintf(job, "%f\n", last.y * INCHES_PER_POINT); - gvputs(job, "\n"); - - gvputs(job, "\n"); - gvputs(job, "1\n"); - gvputs(job, "1\n"); - gvputs(job, "\n"); - - gvputs(job, "\n"); - gvputs(job, "1\n"); - gvputs(job, "2\n"); - gvputs(job, "2\n"); - if (beginId && endId) - { - gvprintf(job, "\n", beginId); - gvprintf(job, "\n", endId); - } - gvputs(job, "2\n"); - gvputs(job, "\n"); - - gvputs(job, "\n"); - gvprintf(job, "%d\n", edgeType == ET_LINE ? LORouteCenterToCenter : LORouteRightAngle); - gvputs(job, "6\n"); - gvprintf(job, "%d\n", edgeType == ET_LINE || edgeType == ET_PLINE ? LORouteExtStraight : LORouteExtNURBS); - gvputs(job, "1\n"); - gvputs(job, "\n"); - - /* output Hyperlink */ - PrintHyperlinks(job); - - /* TextXForm depends on custom control */ - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "\n"); - - if (zeroWidth) - { - first.x -= ZERO_ADJUST; - last.x += ZERO_ADJUST; - } - if (zeroHeight) - { - first.y -= ZERO_ADJUST; - last.y += ZERO_ADJUST; - } - - /* compute center to attach text to. if text has been rendered, use overall bounding box center; if not, use the path center */ - pointf textCenter; - if (_texts.size() > 0) - { - boxf outerTextBounds = _texts[0]->GetBounds(); - - for (Texts::const_iterator nextText = _texts.begin() + 1, lastText = _texts.end(); - nextText != lastText; - ++nextText) - { - boxf innerTextBounds = (*nextText)->GetBounds(); - if (outerTextBounds.LL.x > innerTextBounds.LL.x) - outerTextBounds.LL.x = innerTextBounds.LL.x; - if (outerTextBounds.LL.y > innerTextBounds.LL.y) - outerTextBounds.LL.y = innerTextBounds.LL.y; - if (outerTextBounds.UR.x < innerTextBounds.UR.x) - outerTextBounds.UR.x = innerTextBounds.UR.x; - if (outerTextBounds.UR.y < innerTextBounds.UR.y) - outerTextBounds.UR.y = innerTextBounds.UR.y; - } - textCenter.x = (outerTextBounds.LL.x + outerTextBounds.UR.x) / 2.0; - textCenter.y = (outerTextBounds.LL.y + outerTextBounds.UR.y) / 2.0; - } - else - textCenter = connection->GetCenter(); - - /* Control for positioning text */ - gvputs(job, "\n"); - gvprintf(job, "%f\n", (textCenter.x - first.x) * INCHES_PER_POINT); - gvprintf(job, "%f\n", (textCenter.y - first.y) * INCHES_PER_POINT); - gvputs(job, "\n"); - gvputs(job, "\n"); - gvputs(job, "5\n"); - gvputs(job, "0\n"); - gvputs(job, "\n"); - - /* output Para, Char, Text */ - PrintTexts(job); - - /* output Line, Fill, Geom */ - graphic->Print(job, first, last, edgeType != ET_LINE && edgeType != ET_PLINE); - - gvputs(job, "\n"); - return true; - } - else - return false; - } - - void Render::PrintTexts(GVJ_t* job) - { - if (_texts.size() > 0) - { - /* output Para, Char */ - for (Texts::iterator nextText = _texts.begin(), lastText = _texts.end(); nextText != lastText; ++nextText) - (*nextText)->Print(job); - - /* output Text. each run references above Para + Char */ - gvputs(job, ""); - for (unsigned int index = 0, count = _texts.size(); index < count; ++index) - (_texts[index])->PrintRun(job, index); - gvputs(job, ""); - } - } - - void Render::PrintHyperlinks(GVJ_t* job) - { - if (_hyperlinks.size() > 0) - { - _hyperlinks[0]->Print(job, ++_hyperlinkId, true); - for (Hyperlinks::iterator nextHyperlink = _hyperlinks.begin() + 1, lastHyperlink = _hyperlinks.end(); nextHyperlink != lastHyperlink; ++nextHyperlink) - (*nextHyperlink)->Print(job, ++_hyperlinkId, false); - } - } - -} diff --git a/internal/plugin/visio/VisioRender.h b/internal/plugin/visio/VisioRender.h deleted file mode 100644 index c993d4b..0000000 --- a/internal/plugin/visio/VisioRender.h +++ /dev/null @@ -1,92 +0,0 @@ -/* $Id: VisioRender.h,v 1.7 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.7 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef VISIORENDER_H -#define VISIORENDER_H - -#include -#include - -#include "types.h" - -#include "VisioGraphic.h" -#include "VisioText.h" - -namespace Visio -{ - typedef std::map NodeIds; - typedef std::vector Graphics; - typedef std::vector Texts; - typedef std::vector Hyperlinks; - - /* object wrapper for render function callback */ - class Render - { - public: - Render(); - ~Render(); - - /* render hierarchy */ - void BeginGraph(GVJ_t* job); - void EndGraph(GVJ_t* job); - void BeginPage(GVJ_t* job); - void EndPage(GVJ_t* job); - void BeginNode(GVJ_t* job); - void EndNode(GVJ_t* job); - void BeginEdge(GVJ_t* job); - void EndEdge(GVJ_t* job); - - /* render graphic + text */ - void AddEllipse(GVJ_t* job, pointf* A, bool filled); - void AddBezier(GVJ_t* job, pointf* A, int n, bool arrow_at_start, bool arrow_at_end, bool filled); - void AddPolygon(GVJ_t* job, pointf* A, int n, bool filled); - void AddPolyline(GVJ_t* job, pointf* A, int n); - void AddText(GVJ_t *job, pointf p, textspan_t *span); - void AddAnchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id); - - private: - /* graphics and texts maintenance */ - void ClearGraphicsAndTexts(); - void AddGraphic(GVJ_t* job, const Graphic* graphic); - void AddText(GVJ_t* job, const Text* text); - void AddHyperlink(GVJ_t* job, const Hyperlink* hyperlink); - - /* output the graphic as top level shape */ - void PrintOuterShape(GVJ_t* job, const Graphic* graphic); - - /* output the graphic as a subshape of a top level shape, given its id and bounds */ - void PrintInnerShape(GVJ_t* job, const Graphic* graphic, unsigned int outerId, boxf outerBounds); - - /* output the graphic as an edge connector, given the start and end node ids */ - bool PrintEdgeShape(GVJ_t* job, const Graphic* graphic, unsigned int beginId, unsigned int endId, int edgeType); - - /* output all the collected texts */ - void PrintTexts(GVJ_t* job); - - /* output all the collected hyperlinks */ - void PrintHyperlinks(GVJ_t* job); - - unsigned int _pageId; /* sequential page id, starting from 1 */ - unsigned int _shapeId; /* sequential shape id, starting from 1 */ - unsigned int _hyperlinkId; /* sequential shape id, starting from 1 */ - - bool _inComponent; /* whether we currently inside a node/edge, or not */ - - Graphics _graphics; /* currently collected graphics within a component */ - Texts _texts; /* currently collected texts within a component */ - Hyperlinks _hyperlinks; /* currently collected hyperlinks within a component */ - - NodeIds _nodeIds; /* mapping nodes to assigned shape id */ - }; -} -#endif diff --git a/internal/plugin/visio/VisioText.cpp b/internal/plugin/visio/VisioText.cpp deleted file mode 100644 index 635806c..0000000 --- a/internal/plugin/visio/VisioText.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* $Id: VisioText.cpp,v 1.5 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.5 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "VisioText.h" - -#include "gvcjob.h" -#include "gvio.h" -#include - -extern "C" char *xml_string(char* str); - -namespace Visio -{ - static const float INCHES_PER_POINT = 1.0 / 72.0; - - Char::Char(double size, unsigned char red, unsigned char green, unsigned char blue): - _size(size), - _red(red), - _green(green), - _blue(blue) - { - } - - void Char::Print(GVJ_t* job) const - { - gvputs(job, "\n"); - gvprintf(job, "#%02X%02X%02X\n", _red, _green, _blue); - gvprintf(job, "%f\n", _size * job->scale.x * INCHES_PER_POINT); /* scale font size, VDX uses inches */ - gvputs(job, "\n"); - } - - Para::Para(HorzAlign horzAlign): - _horzAlign(horzAlign) - { - } - - void Para::Print(GVJ_t* job) const - { - gvputs(job, "\n"); - gvprintf(job, "%d\n", _horzAlign); - gvputs(job, "\n"); - } - - Run::Run(boxf bounds, char* text): - _bounds(bounds), - _text(strdup(text)) /* copy text */ - { - } - - Run::~Run() - { - /* since we copied, we need to free */ - free(_text); - } - - boxf Run::GetBounds() const - { - return _bounds; - } - - void Run::Print(GVJ_t* job, unsigned int index) const - { - gvprintf(job, "%s\n", index, index, _text ? xml_string(_text) : ""); /* para mark + char mark + actual text */ - } - - Text* Text::CreateText(GVJ_t* job, pointf p, textspan_t* span) - { - Para::HorzAlign horzAlign; - - /* compute text bounding box and VDX horizontal align */ - boxf bounds; - bounds.LL.y = p.y + span->yoffset_centerline; - bounds.UR.y = p.y + span->yoffset_centerline + span->size.y; - double width = span->size.x; - switch (span->just) - { - case 'r': - horzAlign = Para::horzRight; - bounds.LL.x = p.x - width; - bounds.UR.x = p.x; - break; - case 'l': - horzAlign = Para::horzLeft; - bounds.LL.x = p.x; - bounds.UR.x = p.x + width; - break; - case 'n': - default: - horzAlign = Para::horzCenter; - bounds.LL.x = p.x - width / 2.0; - bounds.UR.x = p.x + width / 2.0; - break; - } - - return new Text( - new Para( - horzAlign), - new Char( - span->font->size, - job->obj->pencolor.u.rgba[0], - job->obj->pencolor.u.rgba[1], - job->obj->pencolor.u.rgba[2]), - new Run( - bounds, - span->str)); - } - - Text::Text(Para* para, Char* chars, Run* run): - _para(para), - _chars(chars), - _run(run) - { - } - - Text::~Text() - { - if (_para) - delete _para; - if (_chars) - delete _chars; - if (_run) - delete _run; - } - - boxf Text::GetBounds() const - { - return _run->GetBounds(); - } - - void Text::Print(GVJ_t* job) const - { - if (_para) - _para->Print(job); - if (_chars) - _chars->Print(job); - } - - void Text::PrintRun(GVJ_t* job, unsigned int index) const - { - if (_run) - _run->Print(job, index); - } - - Hyperlink* Hyperlink::CreateHyperlink(GVJ_t* job, char* url, char* tooltip, char* target, char* id) - { - return new Hyperlink(tooltip, url, target); - } - - Hyperlink::Hyperlink(char* description, char* address, char* frame): - _description(strdup(description)), - _address(strdup(address)), - _frame(strdup(frame)) - { - } - - Hyperlink::~Hyperlink() - { - free(_description); - free(_address); - free(_frame); - } - - /* output the hyperlink */ - void Hyperlink::Print(GVJ_t* job, unsigned int id, bool isDefault) const - { - gvprintf(job, "\n", id); - if (_description) - gvprintf(job, "%s\n", _description); - if (_address) - gvprintf(job, "
%s
\n", _address); - if (_frame) - gvprintf(job, "%s\n", _frame); - if (isDefault) - gvputs(job, "1\n"); - gvputs(job, "
\n"); - } - -} diff --git a/internal/plugin/visio/VisioText.h b/internal/plugin/visio/VisioText.h deleted file mode 100644 index f1f410a..0000000 --- a/internal/plugin/visio/VisioText.h +++ /dev/null @@ -1,121 +0,0 @@ -/* $Id: VisioText.h,v 1.4 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.4 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifndef VISIOTEXT_H -#define VISIOTEXT_H - -#include "types.h" - -namespace Visio -{ - /* Para VDX element */ - - class Para - { - public: - enum HorzAlign - { - horzLeft = 0, - horzCenter = 1, - horzRight = 2, - horzJustify = 3, - horzForce = 4 - }; - - Para(HorzAlign horzAlign); - - /* output the para details */ - void Print(GVJ_t* job) const; - - private: - HorzAlign _horzAlign; - }; - - /* Char VDX element */ - - class Char - { - public: - Char(double size, unsigned char red, unsigned char green, unsigned char blue); - - /* output the char details */ - void Print(GVJ_t* job) const; - - private: - double _size; - unsigned char _red; - unsigned char _green; - unsigned char _blue; - }; - - /* para marker + char marker + text */ - - class Run - { - public: - Run(boxf bounds, char* text); - ~Run(); - - boxf GetBounds() const; /* bounding box -- used by text logic */ - - /* given the text index, output the run */ - void Print(GVJ_t* job, unsigned int index) const; - - private: - boxf _bounds; - char* _text; - }; - - /* Para, Char and Run details for each Graphviz text */ - - class Text - { - public: - static Text* CreateText(GVJ_t* job, pointf p, textspan_t* span); - - ~Text(); - - boxf GetBounds() const; - - void Print(GVJ_t* job) const; - void PrintRun(GVJ_t* job, unsigned int index) const; - - private: - Text(Para* para, Char* chars, Run* run); - - Para* _para; - Char* _chars; - Run* _run; - }; - - /* Hyperlink VDX element */ - - class Hyperlink - { - public: - static Hyperlink* CreateHyperlink(GVJ_t* job, char* url, char* tooltip, char* target, char* id); - - Hyperlink(char* description, char* address, char* frame); - ~Hyperlink(); - - /* given the id, whether it is default, output the hyperlink */ - void Print(GVJ_t* job, unsigned int id, bool isDefault) const; - - private: - char* _description; - char* _address; - char* _frame; - }; -} - -#endif diff --git a/internal/plugin/visio/dummy.go b/internal/plugin/visio/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/visio/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/visio/gvplugin_visio.c b/internal/plugin/visio/gvplugin_visio.c deleted file mode 100644 index a70a259..0000000 --- a/internal/plugin/visio/gvplugin_visio.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id: gvplugin_visio.c,v 1.4 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.4 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#ifdef WIN32 //*dependencies - #pragma comment( lib, "gvc.lib" ) -// #pragma comment( lib, "glib-2.0.lib" ) -// #pragma comment( lib, "pango-1.0.lib" ) -// #pragma comment( lib, "pangocairo-1.0.lib" ) -// #pragma comment( lib, "cairo.lib" ) -// #pragma comment( lib, "gobject-2.0.lib" ) - #pragma comment( lib, "graph.lib" ) -#endif - - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_vdx_types[]; -extern gvplugin_installed_t gvrender_vdx_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_vdx_types}, - {API_render, gvrender_vdx_types}, - {(api_t)0, 0}, -}; - -#ifdef WIN32_DLL /*visual studio*/ -#ifndef GVPLUGIN_VISIO_EXPORTS -__declspec(dllimport) gvplugin_library_t gvplugin_visio_LTX_library = { "visio", apis }; -#else -__declspec(dllexport) gvplugin_library_t gvplugin_visio_LTX_library = { "visio", apis }; -#endif -#else /*end visual studio*/ -#ifdef GVDLL -__declspec(dllexport) gvplugin_library_t gvplugin_visio_LTX_library = { "visio", apis }; -#else -gvplugin_library_t gvplugin_visio_LTX_library = { "visio", apis }; -#endif -#endif diff --git a/internal/plugin/visio/gvrender_visio_vdx.cpp b/internal/plugin/visio/gvrender_visio_vdx.cpp deleted file mode 100644 index e8c1abb..0000000 --- a/internal/plugin/visio/gvrender_visio_vdx.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* $Id: gvrender_visio_vdx.cpp,v 1.6 2011/01/25 16:30:51 ellson Exp $ $Revision: 1.6 $ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include - -#include "gvplugin_render.h" -#include "gvplugin_device.h" - -#include "VisioRender.h" - -typedef enum { FORMAT_VDX } format_type; - -static void vdxgen_begin_job(GVJ_t * job) -{ - job->context = new Visio::Render(); -} - -static void vdxgen_end_job(GVJ_t* job) -{ - delete (Visio::Render*)job->context; -} - -static void vdxgen_begin_graph(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->BeginGraph(job); -} - -static void vdxgen_end_graph(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->EndGraph(job); -} - -static void vdxgen_begin_page(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->BeginPage(job); - -} - -static void vdxgen_end_page(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->EndPage(job); -} - -static void vdxgen_begin_node(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->BeginNode(job); -} - -static void vdxgen_end_node(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->EndNode(job); -} - -static void -vdxgen_begin_edge(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->BeginEdge(job); -} - -static void vdxgen_end_edge(GVJ_t * job) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->EndEdge(job); -} - -static void vdxgen_begin_anchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddAnchor(job, url, tooltip, target, id); -} - -static void vdxgen_textspan(GVJ_t * job, pointf p, textspan_t * span) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddText(job, p, span); -} - -static void vdxgen_ellipse(GVJ_t * job, pointf * A, int filled) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddEllipse(job, A, filled); -} - -static void vdxgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, int arrow_at_end, int filled) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddBezier(job, A, n, arrow_at_start, arrow_at_end, filled); -} - -static void vdxgen_polygon(GVJ_t * job, pointf * A, int n, int filled) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddPolygon(job, A, n, filled); -} - -static void vdxgen_polyline(GVJ_t * job, pointf * A, int n) -{ - Visio::Render* context = (Visio::Render*)job->context; - if (context) - context->AddPolyline(job, A, n); -} - -gvrender_engine_t vdxgen_engine = { - vdxgen_begin_job, - vdxgen_end_job, - vdxgen_begin_graph, - vdxgen_end_graph, - 0, /* vdxgen_begin_layer */ - 0, /* vdxgen_end_layer */ - vdxgen_begin_page, - vdxgen_end_page, - 0, /* vdxgen_begin_cluster */ - 0, /* vdxgen_end_cluster */ - 0, /* vdxgen_begin_nodes */ - 0, /* vdxgen_end_nodes */ - 0, /* vdxgen_begin_edges */ - 0, /* vdxgen_end_edges */ - vdxgen_begin_node, - vdxgen_end_node, - vdxgen_begin_edge, - vdxgen_end_edge, - vdxgen_begin_anchor, - 0, /* vdxgen_end_anchor */ - 0, /* vdxgen_begin_label */ - 0, /* vdxgen_end_label */ - vdxgen_textspan, - 0, /* vdxgen_resolve_color */ - vdxgen_ellipse, - vdxgen_polygon, - vdxgen_bezier, - vdxgen_polyline, - 0, /* vdxgen_comment */ - 0, /* vdxgen_library_shape */ -}; - -gvrender_features_t render_features_vdx = { - GVRENDER_DOES_ARROWS - | GVRENDER_DOES_MAPS - | GVRENDER_DOES_TARGETS - | GVRENDER_DOES_TOOLTIPS - | GVRENDER_NO_WHITE_BG, - 4., /* default pad - graph units */ - NULL, /* knowncolors */ - 0, /* sizeof knowncolors */ - RGBA_BYTE, /* color_type */ -}; - -gvdevice_features_t device_features_vdx = { - GVDEVICE_DOES_TRUECOLOR, /* flags */ - {36.,36.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {72.,72.}, /* default dpi */ -}; - -extern "C" -{ -gvplugin_installed_t gvrender_vdx_types[] = { - {0, "visio", 1, &vdxgen_engine, &render_features_vdx}, - {0, NULL, 0, NULL, NULL} -}; - -gvplugin_installed_t gvdevice_vdx_types[] = { - {FORMAT_VDX, "vdx:visio", 1, NULL, &device_features_vdx}, - {0, NULL, 0, NULL, NULL} -}; -} diff --git a/internal/plugin/webp/dummy.go b/internal/plugin/webp/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/webp/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/webp/gvdevice_webp.c b/internal/plugin/webp/gvdevice_webp.c deleted file mode 100644 index 1b90334..0000000 --- a/internal/plugin/webp/gvdevice_webp.c +++ /dev/null @@ -1,150 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include "gvplugin_device.h" -#include "gvio.h" - -#ifdef HAVE_WEBP -#include "webp/encode.h" - -static const char* const kErrorMessages[] = { - "OK", - "OUT_OF_MEMORY: Out of memory allocating objects", - "BITSTREAM_OUT_OF_MEMORY: Out of memory re-allocating byte buffer", - "NULL_PARAMETER: NULL parameter passed to function", - "INVALID_CONFIGURATION: configuration is invalid", - "BAD_DIMENSION: Bad picture dimension. Maximum width and height " - "allowed is 16383 pixels.", - "PARTITION0_OVERFLOW: Partition #0 is too big to fit 512k.\n" - "To reduce the size of this partition, try using less segments " - "with the -segments option, and eventually reduce the number of " - "header bits using -partition_limit. More details are available " - "in the manual (`man cwebp`)", - "PARTITION_OVERFLOW: Partition is too big to fit 16M", - "BAD_WRITE: Picture writer returned an I/O error", - "FILE_TOO_BIG: File would be too big to fit in 4G", - "USER_ABORT: encoding abort requested by user" -}; - -typedef enum { - FORMAT_WEBP, -} format_type; - -static int writer(const uint8_t* data, size_t data_size, const WebPPicture* const pic) { - return (gvwrite((GVJ_t *)pic->custom_ptr, (const char *)data, data_size) == data_size) ? 1 : 0; -} - -static void webp_format(GVJ_t * job) -{ - WebPPicture picture; - WebPPreset preset; - WebPConfig config; - int stride; - - if (!WebPPictureInit(&picture) || !WebPConfigInit(&config)) { - fprintf(stderr, "Error! Version mismatch!\n"); - goto Error; - } - - picture.width = job->width; - picture.height = job->height; - stride = 4 * job->width; - - picture.writer = writer; - picture.custom_ptr = (void*)job; - -#if 0 - picture.extra_info_type = 0; - picture.colorspace = 0; - - config.method = 0; - config.quality = 0; - config.show_compressed = 0; - config.alpha_quality = 0; - config.alpha_compression = 0; - config.alpha_filtering = 0; - config.target_size = 0; - config.target_PSNR = 0; - config.sns_strength = 0; - config.filter_strength = 0; - config.autofilter = 0; - config.filter_type = 0; - config.filter_sharpness = 0; - config.pass = 0; - config.preprocessing = 0; - config.segments = 0; - config.partition_limit = 0; -#endif - -#if 1 - preset = WEBP_PRESET_DRAWING; - - if (!WebPConfigPreset(&config, preset, config.quality)) { - fprintf(stderr, "Error! Could initialize configuration with preset.\n"); - goto Error; - } -#endif - -#if 1 - if (!WebPValidateConfig(&config)) { - fprintf(stderr, "Error! Invalid configuration.\n"); - goto Error; - } -#endif - - if (!WebPPictureAlloc(&picture)) { - fprintf(stderr, "Error! Cannot allocate memory\n"); - return; - } - - if (!WebPPictureImportBGRA(&picture, - (const uint8_t * const)job->imagedata, stride)) { - fprintf(stderr, "Error! Cannot import picture\n"); - goto Error; - } - - if (!WebPEncode(&config, &picture)) { - fprintf(stderr, "Error! Cannot encode picture as WebP\n"); - fprintf(stderr, "Error code: %d (%s)\n", - picture.error_code, kErrorMessages[picture.error_code]); - goto Error; - } - -Error: - WebPPictureFree(&picture); -} - -static gvdevice_engine_t webp_engine = { - NULL, /* webp_initialize */ - webp_format, - NULL, /* webp_finalize */ -}; - -static gvdevice_features_t device_features_webp = { - GVDEVICE_BINARY_FORMAT - | GVDEVICE_NO_WRITER - | GVDEVICE_DOES_TRUECOLOR,/* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* 96 dpi */ -}; -#endif - -gvplugin_installed_t gvdevice_webp_types[] = { -#ifdef HAVE_WEBP - {FORMAT_WEBP, "webp:cairo", 1, &webp_engine, &device_features_webp}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/webp/gvloadimage_webp.c b/internal/plugin/webp/gvloadimage_webp.c deleted file mode 100644 index 55e0c2d..0000000 --- a/internal/plugin/webp/gvloadimage_webp.c +++ /dev/null @@ -1,191 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include - -#include "gvplugin_loadimage.h" -#include "gvio.h" - -#ifdef HAVE_WEBP -#ifdef HAVE_PANGOCAIRO -#include -#include - -#ifdef WIN32 //*dependencies - #pragma comment( lib, "gvc.lib" ) - #pragma comment( lib, "glib-2.0.lib" ) - #pragma comment( lib, "pango-1.0.lib" ) - #pragma comment( lib, "pangocairo-1.0.lib" ) - #pragma comment( lib, "libcairo-2.lib" ) - #pragma comment( lib, "gobject-2.0.lib" ) - #pragma comment( lib, "graph.lib" ) - #pragma comment( lib, "webp.lib" ) -#endif - -static const char* const kStatusMessages[] = { - "OK", "OUT_OF_MEMORY", "INVALID_PARAM", "BITSTREAM_ERROR", - "UNSUPPORTED_FEATURE", "SUSPENDED", "USER_ABORT", "NOT_ENOUGH_DATA" -}; - -typedef enum { - FORMAT_WEBP_CAIRO, -} format_type; - -static void webp_freeimage(usershape_t *us) -{ - cairo_surface_destroy((cairo_surface_t*)(us->data)); -} - -static cairo_surface_t* webp_really_loadimage(const char *in_file, FILE* const in) -{ - WebPDecoderConfig config; - WebPDecBuffer* const output_buffer = &config.output; - WebPBitstreamFeatures* const bitstream = &config.input; - VP8StatusCode status = VP8_STATUS_OK; - cairo_surface_t *surface = NULL; /* source surface */ - int ok; - uint32_t data_size = 0; - void* data = NULL; - - if (!WebPInitDecoderConfig(&config)) { - fprintf(stderr, "Error: WebP library version mismatch!\n"); - return NULL; - } - - fseek(in, 0, SEEK_END); - data_size = ftell(in); - fseek(in, 0, SEEK_SET); - data = malloc(data_size); - ok = (fread(data, data_size, 1, in) == 1); - if (!ok) { - fprintf(stderr, "Error: WebP could not read %d bytes of data from %s\n", - data_size, in_file); - free(data); - return NULL; - } - - status = WebPGetFeatures((const uint8_t*)data, data_size, bitstream); - if (status != VP8_STATUS_OK) { - goto end; - } - - output_buffer->colorspace = MODE_RGBA; - status = WebPDecode((const uint8_t*)data, data_size, &config); - - /* FIXME - this is ugly */ - if (! bitstream->has_alpha) { - int x, y; - unsigned char *p, t; - - for (y = 0; y < output_buffer->height; y++) { - p = output_buffer->u.RGBA.rgba + (output_buffer->u.RGBA.stride * y); - for (x = 0; x < output_buffer->width; x++) { - t = p[0]; /* swap red/blue */ - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } - -end: - free(data); - ok = (status == VP8_STATUS_OK); - if (!ok) { - fprintf(stderr, "Error: WebP decoding of %s failed.\n", in_file); - fprintf(stderr, "Status: %d (%s)\n", status, kStatusMessages[status]); - return NULL; - } - - surface = cairo_image_surface_create_for_data ( - output_buffer->u.RGBA.rgba, - CAIRO_FORMAT_ARGB32, - output_buffer->width, - output_buffer->height, - output_buffer->u.RGBA.stride); - - return surface; -} - -/* get image either from cached surface, or from freskly loaded surface */ -static cairo_surface_t* webp_loadimage(GVJ_t * job, usershape_t *us) -{ - cairo_surface_t *surface = NULL; /* source surface */ - - assert(job); - assert(us); - assert(us->name); - - if (us->data) { - if (us->datafree == webp_freeimage) - surface = (cairo_surface_t*)(us->data); /* use cached data */ - else { - us->datafree(us); /* free incompatible cache data */ - us->datafree = NULL; - us->data = NULL; - } - } - if (!surface) { /* read file into cache */ - if (!gvusershape_file_access(us)) - return NULL; - switch (us->type) { - case FT_WEBP: - if ((surface = webp_really_loadimage(us->name, us->f))) - cairo_surface_reference(surface); - break; - default: - surface = NULL; - } - if (surface) { - us->data = (void*)surface; - us->datafree = webp_freeimage; - } - gvusershape_file_release(us); - } - return surface; -} - -/* paint image into required location in graph */ -static void webp_loadimage_cairo(GVJ_t * job, usershape_t *us, boxf b, boolean filled) -{ - cairo_t *cr = (cairo_t *) job->context; /* target context */ - cairo_surface_t *surface; /* source surface */ - - surface = webp_loadimage(job, us); - if (surface) { - cairo_save(cr); - cairo_translate(cr, b.LL.x, -b.UR.y); - cairo_scale(cr, (b.UR.x - b.LL.x)/(us->w), (b.UR.y - b.LL.y)/(us->h)); - cairo_set_source_surface (cr, surface, 0, 0); - cairo_paint (cr); - cairo_restore(cr); - } -} - -static gvloadimage_engine_t engine_webp = { - webp_loadimage_cairo -}; -#endif -#endif - -gvplugin_installed_t gvloadimage_webp_types[] = { -#ifdef HAVE_WEBP -#ifdef HAVE_PANGOCAIRO - {FORMAT_WEBP_CAIRO, "webp:cairo", 1, &engine_webp, NULL}, -#endif -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/webp/gvplugin_webp.c b/internal/plugin/webp/gvplugin_webp.c deleted file mode 100644 index 0aad26c..0000000 --- a/internal/plugin/webp/gvplugin_webp.c +++ /dev/null @@ -1,25 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_webp_types[]; -extern gvplugin_installed_t gvloadimage_webp_types[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_webp_types}, - {API_loadimage, gvloadimage_webp_types}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_webp_LTX_library = { "webp", apis }; diff --git a/internal/plugin/xlib/dummy.go b/internal/plugin/xlib/dummy.go deleted file mode 100644 index 41053ac..0000000 --- a/internal/plugin/xlib/dummy.go +++ /dev/null @@ -1,4 +0,0 @@ -// +build required - -// Package dummy prevents go tooling from stripping the c dependencies. -package dummy diff --git a/internal/plugin/xlib/gvdevice_xlib.c b/internal/plugin/xlib/gvdevice_xlib.c deleted file mode 100644 index a7883fe..0000000 --- a/internal/plugin/xlib/gvdevice_xlib.c +++ /dev/null @@ -1,636 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "config.h" - -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -#include -#endif -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#ifdef HAVE_SYS_INOTIFY_H -#include -#endif -#ifdef HAVE_ERRNO_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif - -#if 0 -#include -#endif - -#include "gvplugin_device.h" - -#include -#ifdef CAIRO_HAS_XLIB_SURFACE -#include -#include -#include - -typedef struct window_xlib_s { - Window win; - uint64_t event_mask; - Pixmap pix; - GC gc; - Visual *visual; - Colormap cmap; - int depth; - Atom wm_delete_window_atom; -} window_t; - -static void handle_configure_notify(GVJ_t * job, XConfigureEvent * cev) -{ -/*FIXME - should allow for margins */ -/* - similar zoom_to_fit code exists in: */ -/* plugin/gtk/callbacks.c */ -/* plugin/xlib/gvdevice_xlib.c */ -/* lib/gvc/gvevent.c */ - - job->zoom *= 1 + MIN( - ((double) cev->width - (double) job->width) / (double) job->width, - ((double) cev->height - (double) job->height) / (double) job->height); - if (cev->width > job->width || cev->height > job->height) - job->has_grown = 1; - job->width = cev->width; - job->height = cev->height; - job->needs_refresh = 1; -} - -static void handle_expose(GVJ_t * job, XExposeEvent * eev) -{ - window_t *window; - - window = (window_t *)job->window; - XCopyArea(eev->display, window->pix, eev->window, window->gc, - eev->x, eev->y, eev->width, eev->height, eev->x, eev->y); -} - -static void handle_client_message(GVJ_t * job, XClientMessageEvent * cmev) -{ - window_t *window; - - window = (window_t *)job->window; - if (cmev->format == 32 - && (Atom) cmev->data.l[0] == window->wm_delete_window_atom) - exit(0); -} - -static boolean handle_keypress(GVJ_t *job, XKeyEvent *kev) -{ - - int i; - KeyCode *keycodes; - - keycodes = (KeyCode *)job->keycodes; - for (i=0; i < job->numkeys; i++) { - if (kev->keycode == keycodes[i]) - return (job->keybindings[i].callback)(job); - } - return FALSE; -} - -static Visual *find_argb_visual(Display * dpy, int scr) -{ - XVisualInfo *xvi; - XVisualInfo template; - int nvi; - int i; - XRenderPictFormat *format; - Visual *visual; - - template.screen = scr; - template.depth = 32; - template.class = TrueColor; - xvi = XGetVisualInfo(dpy, - VisualScreenMask | - VisualDepthMask | - VisualClassMask, &template, &nvi); - if (!xvi) - return 0; - visual = 0; - for (i = 0; i < nvi; i++) { - format = XRenderFindVisualFormat(dpy, xvi[i].visual); - if (format->type == PictTypeDirect && format->direct.alphaMask) { - visual = xvi[i].visual; - break; - } - } - - XFree(xvi); - return visual; -} - -static void browser_show(GVJ_t *job) -{ -#if defined HAVE_SYS_TYPES_H && defined HAVE_UNISTD_H && defined HAVE_ERRNO_H - char *exec_argv[3] = {BROWSER, NULL, NULL}; - pid_t pid; - int err; - - exec_argv[1] = job->selected_href; - - pid = fork(); - if (pid == -1) { - fprintf(stderr,"fork failed: %s\n", strerror(errno)); - } - else if (pid == 0) { - err = execvp(exec_argv[0], exec_argv); - fprintf(stderr,"error starting %s: %s\n", exec_argv[0], strerror(errno)); - } -#else - fprintf(stdout,"browser_show: %s\n", job->selected_href); -#endif -} - -static int handle_xlib_events (GVJ_t *firstjob, Display *dpy) -{ - GVJ_t *job; - window_t *window; - XEvent xev; - pointf pointer; - int rc = 0; - - while (XPending(dpy)) { - XNextEvent(dpy, &xev); - - for (job = firstjob; job; job = job->next_active) { - window = (window_t *)job->window; - if (xev.xany.window == window->win) { - switch (xev.xany.type) { - case ButtonPress: - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->button_press)(job, xev.xbutton.button, pointer); - rc++; - break; - case MotionNotify: - if (job->button) { /* only interested while a button is pressed */ - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->motion)(job, pointer); - rc++; - } - break; - case ButtonRelease: - pointer.x = (double)xev.xbutton.x; - pointer.y = (double)xev.xbutton.y; - (job->callbacks->button_release)(job, xev.xbutton.button, pointer); - if (job->selected_href && job->selected_href[0] && xev.xbutton.button == 1) - browser_show(job); - rc++; - break; - case KeyPress: - if (handle_keypress(job, &xev.xkey)) - return -1; /* exit code */ - rc++; - break; - case ConfigureNotify: - handle_configure_notify(job, &xev.xconfigure); - rc++; - break; - case Expose: - handle_expose(job, &xev.xexpose); - rc++; - break; - case ClientMessage: - handle_client_message(job, &xev.xclient); - rc++; - break; - } - break; - } - } - } - return rc; -} - -static void update_display(GVJ_t *job, Display *dpy) -{ - window_t *window; - cairo_surface_t *surface; - - window = (window_t *)job->window; - - if (job->has_grown) { - XFreePixmap(dpy, window->pix); - window->pix = XCreatePixmap(dpy, window->win, - job->width, job->height, window->depth); - job->has_grown = 0; - job->needs_refresh = 1; - } - if (job->needs_refresh) { - XFillRectangle(dpy, window->pix, window->gc, 0, 0, - job->width, job->height); - surface = cairo_xlib_surface_create(dpy, - window->pix, window->visual, - job->width, job->height); - job->context = (void *)cairo_create(surface); - job->external_context = TRUE; - (job->callbacks->refresh)(job); - cairo_surface_destroy(surface); - XCopyArea(dpy, window->pix, window->win, window->gc, - 0, 0, job->width, job->height, 0, 0); - job->needs_refresh = 0; - } -} - -static void init_window(GVJ_t *job, Display *dpy, int scr) -{ - int argb = 0; - const char *base = ""; - XGCValues gcv; - XSetWindowAttributes attributes; - XWMHints *wmhints; - XSizeHints *normalhints; - XClassHint *classhint; - uint64_t attributemask = 0; - char *name; - window_t *window; - int w, h; - double zoom_to_fit; - - window = (window_t *)malloc(sizeof(window_t)); - if (window == NULL) { - fprintf(stderr, "Failed to malloc window_t\n"); - return; - } - - w = 480; /* FIXME - w,h should be set by a --geometry commandline option */ - h = 325; - - zoom_to_fit = MIN((double) w / (double) job->width, - (double) h / (double) job->height); - if (zoom_to_fit < 1.0) /* don't make bigger */ - job->zoom *= zoom_to_fit; - - job->width = w; /* use window geometry */ - job->height = h; - - job->window = (void *)window; - job->fit_mode = 0; - job->needs_refresh = 1; - - if (argb && (window->visual = find_argb_visual(dpy, scr))) { - window->cmap = XCreateColormap(dpy, RootWindow(dpy, scr), - window->visual, AllocNone); - attributes.override_redirect = False; - attributes.background_pixel = 0; - attributes.border_pixel = 0; - attributes.colormap = window->cmap; - attributemask = ( CWBackPixel - | CWBorderPixel - | CWOverrideRedirect - | CWColormap ); - window->depth = 32; - } else { - window->cmap = DefaultColormap(dpy, scr); - window->visual = DefaultVisual(dpy, scr); - attributes.background_pixel = WhitePixel(dpy, scr); - attributes.border_pixel = BlackPixel(dpy, scr); - attributemask = (CWBackPixel | CWBorderPixel); - window->depth = DefaultDepth(dpy, scr); - } - - window->win = XCreateWindow(dpy, RootWindow(dpy, scr), - 0, 0, job->width, job->height, 0, window->depth, - InputOutput, window->visual, - attributemask, &attributes); - - name = malloc(strlen("graphviz: ") + strlen(base) + 1); - strcpy(name, "graphviz: "); - strcat(name, base); - - normalhints = XAllocSizeHints(); - normalhints->flags = 0; - normalhints->x = 0; - normalhints->y = 0; - normalhints->width = job->width; - normalhints->height = job->height; - - classhint = XAllocClassHint(); - classhint->res_name = "graphviz"; - classhint->res_class = "Graphviz"; - - wmhints = XAllocWMHints(); - wmhints->flags = InputHint; - wmhints->input = True; - - Xutf8SetWMProperties(dpy, window->win, name, base, 0, 0, - normalhints, wmhints, classhint); - XFree(wmhints); - XFree(classhint); - XFree(normalhints); - free(name); - - window->pix = XCreatePixmap(dpy, window->win, job->width, job->height, - window->depth); - if (argb) - gcv.foreground = 0; - else - gcv.foreground = WhitePixel(dpy, scr); - window->gc = XCreateGC(dpy, window->pix, GCForeground, &gcv); - update_display(job, dpy); - - window->event_mask = ( - ButtonPressMask - | ButtonReleaseMask - | PointerMotionMask - | KeyPressMask - | StructureNotifyMask - | ExposureMask); - XSelectInput(dpy, window->win, window->event_mask); - window->wm_delete_window_atom = - XInternAtom(dpy, "WM_DELETE_WINDOW", False); - XSetWMProtocols(dpy, window->win, &window->wm_delete_window_atom, 1); - XMapWindow(dpy, window->win); -} - -static int handle_stdin_events(GVJ_t *job, int stdin_fd) -{ - int rc=0; - - if (feof(stdin)) - return -1; - (job->callbacks->read)(job, job->input_filename, job->layout_type); - - rc++; - return rc; -} - -#ifdef HAVE_SYS_INOTIFY_H -static int handle_file_events(GVJ_t *job, int inotify_fd) -{ - int avail, ret, len, ln, rc = 0; - static char *buf; - char *bf, *p; - struct inotify_event *event; - - ret = ioctl(inotify_fd, FIONREAD, &avail); - if (ret < 0) { - fprintf(stderr,"ioctl() failed\n"); - return -1;; - } - - if (avail) { - buf = realloc(buf, avail); - if (!buf) { - fprintf(stderr,"problem with realloc(%d)\n", avail); - return -1; - } - len = read(inotify_fd, buf, avail); - if (len != avail) { - fprintf(stderr,"avail = %u, len = %u\n", avail, len); - return -1; - } - bf = buf; - while (len > 0) { - event = (struct inotify_event *)bf; - switch (event->mask) { - case IN_MODIFY: - p = strrchr(job->input_filename, '/'); - if (p) - p++; - else - p = job->input_filename; - if (strcmp((char*)(&(event->name)), p) == 0) { - (job->callbacks->read)(job, job->input_filename, job->layout_type); - rc++; - } - break; - - case IN_ACCESS: - case IN_ATTRIB: - case IN_CLOSE_WRITE: - case IN_CLOSE_NOWRITE: - case IN_OPEN: - case IN_MOVED_FROM: - case IN_MOVED_TO: - case IN_CREATE: - case IN_DELETE: - case IN_DELETE_SELF: - case IN_MOVE_SELF: - case IN_UNMOUNT: - case IN_Q_OVERFLOW: - case IN_IGNORED: - case IN_ISDIR: - case IN_ONESHOT: - break; - } - ln = event->len + sizeof(struct inotify_event); - bf += ln; - len -= ln; - } - if (len != 0) { - fprintf(stderr,"length miscalculation, len = %d\n", len); - return -1; - } - } - return rc; -} -#endif - -static void xlib_initialize(GVJ_t *firstjob) -{ - Display *dpy; - KeySym keysym; - KeyCode *keycodes; - const char *display_name = NULL; - int i, scr; - - dpy = XOpenDisplay(display_name); - if (dpy == NULL) { - fprintf(stderr, "Failed to open XLIB display: %s\n", - XDisplayName(NULL)); - return; - } - scr = DefaultScreen(dpy); - - firstjob->display = (void*)dpy; - firstjob->screen = scr; - - keycodes = (KeyCode *)malloc(firstjob->numkeys * sizeof(KeyCode)); - if (keycodes == NULL) { - fprintf(stderr, "Failed to malloc %d*KeyCode\n", firstjob->numkeys); - return; - } - for (i = 0; i < firstjob->numkeys; i++) { - keysym = XStringToKeysym(firstjob->keybindings[i].keystring); - if (keysym == NoSymbol) - fprintf(stderr, "ERROR: No keysym for \"%s\"\n", - firstjob->keybindings[i].keystring); - else - keycodes[i] = XKeysymToKeycode(dpy, keysym); - } - firstjob->keycodes = (void*)keycodes; - - firstjob->device_dpi.x = DisplayWidth(dpy, scr) * 25.4 / DisplayWidthMM(dpy, scr); - firstjob->device_dpi.y = DisplayHeight(dpy, scr) * 25.4 / DisplayHeightMM(dpy, scr); - firstjob->device_sets_dpi = TRUE; -} - -static void xlib_finalize(GVJ_t *firstjob) -{ - GVJ_t *job; - Display *dpy = (Display *)(firstjob->display); - int scr = firstjob->screen; - KeyCode *keycodes= firstjob->keycodes; - int numfds, stdin_fd=0, xlib_fd, ret, events; - fd_set rfds; - boolean watching_stdin_p = FALSE; -#ifdef HAVE_SYS_INOTIFY_H - int wd=0; - int inotify_fd=0; - boolean watching_file_p = FALSE; - static char *dir; - char *p, *cwd = NULL; - - inotify_fd = inotify_init(); - if (inotify_fd < 0) { - fprintf(stderr,"inotify_init() failed\n"); - return; - } -#endif - - numfds = xlib_fd = XConnectionNumber(dpy); - - if (firstjob->input_filename) { - if (firstjob->graph_index == 0) { -#ifdef HAVE_SYS_INOTIFY_H - watching_file_p = TRUE; - - if (firstjob->input_filename[0] != '/') { - cwd = getcwd(NULL, 0); - dir = realloc(dir, strlen(cwd) + 1 + strlen(firstjob->input_filename) + 1); - strcpy(dir, cwd); - strcat(dir, "/"); - strcat(dir, firstjob->input_filename); - free(cwd); - } - else { - dir = realloc(dir, strlen(firstjob->input_filename) + 1); - strcpy(dir, firstjob->input_filename); - } - p = strrchr(dir,'/'); - *p = '\0'; - - wd = inotify_add_watch(inotify_fd, dir, IN_MODIFY ); - - numfds = MAX(inotify_fd, numfds); -#endif - } - } - else { - watching_stdin_p = TRUE; - stdin_fd = fcntl(STDIN_FILENO, F_DUPFD, 0); - numfds = MAX(stdin_fd, numfds); - } - - for (job = firstjob; job; job = job->next_active) - init_window(job, dpy, scr); - - /* This is the event loop */ - FD_ZERO(&rfds); - while (1) { - events = 0; - -#ifdef HAVE_SYS_INOTIFY_H - if (watching_file_p) { - if (FD_ISSET(inotify_fd, &rfds)) { - ret = handle_file_events(firstjob, inotify_fd); - if (ret < 0) - break; - events += ret; - } - FD_SET(inotify_fd, &rfds); - } -#endif - - if (watching_stdin_p) { - if (FD_ISSET(stdin_fd, &rfds)) { - ret = handle_stdin_events(firstjob, stdin_fd); - if (ret < 0) { - watching_stdin_p = FALSE; - FD_CLR(stdin_fd, &rfds); - } - events += ret; - } - if (watching_stdin_p) - FD_SET(stdin_fd, &rfds); - } - - ret = handle_xlib_events(firstjob, dpy); - if (ret < 0) - break; - events += ret; - FD_SET(xlib_fd, &rfds); - - if (events) { - for (job = firstjob; job; job = job->next_active) - update_display(job, dpy); - XFlush(dpy); - } - - ret = select(numfds+1, &rfds, NULL, NULL, NULL); - if (ret < 0) { - fprintf(stderr,"select() failed\n"); - break; - } - } - -#ifdef HAVE_SYS_INOTIFY_H - if (watching_file_p) - ret = inotify_rm_watch(inotify_fd, wd); -#endif - - XCloseDisplay(dpy); - free(keycodes); - firstjob->keycodes = NULL; -} - -static gvdevice_features_t device_features_xlib = { - GVDEVICE_DOES_TRUECOLOR - | GVDEVICE_EVENTS, /* flags */ - {0.,0.}, /* default margin - points */ - {0.,0.}, /* default page width, height - points */ - {96.,96.}, /* dpi */ -}; - -static gvdevice_engine_t device_engine_xlib = { - xlib_initialize, - NULL, /* xlib_format */ - xlib_finalize, -}; -#endif - -gvplugin_installed_t gvdevice_types_xlib[] = { -#ifdef CAIRO_HAS_XLIB_SURFACE - {0, "xlib:cairo", 0, &device_engine_xlib, &device_features_xlib}, - {0, "x11:cairo", 0, &device_engine_xlib, &device_features_xlib}, -#endif - {0, NULL, 0, NULL, NULL} -}; diff --git a/internal/plugin/xlib/gvplugin_xlib.c b/internal/plugin/xlib/gvplugin_xlib.c deleted file mode 100644 index b855822..0000000 --- a/internal/plugin/xlib/gvplugin_xlib.c +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id$ $Revision$ */ -/* vim:set shiftwidth=4 ts=8: */ - -/************************************************************************* - * Copyright (c) 2011 AT&T Intellectual Property - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: See CVS logs. Details at http://www.graphviz.org/ - *************************************************************************/ - -#include "gvplugin.h" - -extern gvplugin_installed_t gvdevice_types_xlib[]; - -static gvplugin_api_t apis[] = { - {API_device, gvdevice_types_xlib}, - {(api_t)0, 0}, -}; - -gvplugin_library_t gvplugin_xlib_LTX_library = { "xlib", apis }; diff --git a/internal/tools/nori/Makefile b/internal/tools/nori/Makefile new file mode 100644 index 0000000..4e4b8ab --- /dev/null +++ b/internal/tools/nori/Makefile @@ -0,0 +1,31 @@ +export + +GOBIN := $(PWD)/bin +PATH := $(GOBIN):$(PATH) +LDFLAGS := -w -s + +.PHONY: tools +tools: + go install github.com/bufbuild/buf/cmd/buf@v1.32.2 + +.PHONY: fmt +fmt: tidy fmt/buf + +.PHONY: tidy +tidy: + go mod tidy + +fmt/buf: + $(GOBIN)/buf format --write + +.PHONY: generate +generate: build generate/buf + +generate/buf: + buf generate + +.PHONY: build +build: build/protoc-gen-nori + +build/protoc-gen-nori: + go build -ldflags "$(LDFLAGS)" -o $(GOBIN)/protoc-gen-nori ./cmd/protoc-gen-nori diff --git a/internal/tools/nori/buf.gen.yaml b/internal/tools/nori/buf.gen.yaml new file mode 100644 index 0000000..6474bc0 --- /dev/null +++ b/internal/tools/nori/buf.gen.yaml @@ -0,0 +1,5 @@ +version: v1 +plugins: + - plugin: go + out: . + opt: module=github.com/goccy/nori diff --git a/internal/tools/nori/buf.work.yaml b/internal/tools/nori/buf.work.yaml new file mode 100644 index 0000000..1878b34 --- /dev/null +++ b/internal/tools/nori/buf.work.yaml @@ -0,0 +1,3 @@ +version: v1 +directories: + - proto diff --git a/internal/tools/nori/cmd/protoc-gen-nori/main.go b/internal/tools/nori/cmd/protoc-gen-nori/main.go new file mode 100644 index 0000000..19de7ad --- /dev/null +++ b/internal/tools/nori/cmd/protoc-gen-nori/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "context" + "io" + "log" + "os" + + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/pluginpb" + + "github.com/goccy/nori" +) + +func main() { + if err := _main(); err != nil { + log.Fatal(err) + } +} + +func _main() error { + req, err := parseRequest(os.Stdin) + if err != nil { + return err + } + resp, err := nori.Generate(context.Background(), req) + if err != nil { + return err + } + if resp == nil { + return nil + } + if err := outputResponse(resp); err != nil { + return err + } + return nil +} + +func parseRequest(r io.Reader) (*pluginpb.CodeGeneratorRequest, error) { + buf, err := io.ReadAll(r) + if err != nil { + return nil, err + } + + var req pluginpb.CodeGeneratorRequest + if err := proto.Unmarshal(buf, &req); err != nil { + return nil, err + } + return &req, nil +} + +func outputResponse(resp *pluginpb.CodeGeneratorResponse) error { + buf, err := proto.Marshal(resp) + if err != nil { + return err + } + if _, err = os.Stdout.Write(buf); err != nil { + return err + } + return nil +} diff --git a/internal/tools/nori/generate_c.go b/internal/tools/nori/generate_c.go new file mode 100644 index 0000000..8bd0313 --- /dev/null +++ b/internal/tools/nori/generate_c.go @@ -0,0 +1,637 @@ +package nori + +import ( + "bytes" + _ "embed" + "fmt" + "sort" + "strings" + "text/template" + + "github.com/goccy/nori/nori" +) + +func generateCFile(file *File) ([]byte, error) { + parsed, err := template.New("").Funcs(map[string]any{ + "map": createMap, + }).Parse(bindC) + if err != nil { + return nil, fmt.Errorf("failed to parse template bind.c.tmpl: %w", err) + } + var buf bytes.Buffer + if err := parsed.Execute(&buf, &CFile{file}); err != nil { + return nil, fmt.Errorf("failed to execute template: %w", err) + } + return buf.Bytes(), nil +} + +//go:embed templates/bind.c.tmpl +var bindC string + +type CFile struct { + *File +} + +type CExportFunction struct { + Name string + Args []*CArg + Return *CReturn + Function string + FuncArgs []*CArg +} + +type CCallbackFunction struct { + Name string + Args []*CArg + Return string +} + +type CArg struct { + Index int + IsLastArg bool + Value *CValue + Dst string + Src string +} + +type CReturn struct { + Index int + Value *CValue +} + +type CValue struct { + Src string + Dst string + IsReturnValue bool + typ *Type +} + +func (v *CValue) IsFunction() bool { + if v.typ.Kind == nori.TypeKind_FUNCPTR { + return true + } + if v.typ.Ref == nil { + return false + } + msg, ok := v.typ.Ref.(*Message) + if !ok { + return false + } + return msg.Rule != nil && msg.Rule.Funcptr != nil +} + +func (v *CValue) FuncName() string { + if !v.IsFunction() { + return "" + } + return v.typ.Ref.(*Message).FullName() +} + +func (v *CValue) IsString() bool { + return v.typ.IsString() +} + +func (v *CValue) IsFloat() bool { + return v.typ.IsFloatKind() +} + +func (v *CValue) IsSlice() bool { + return v.typ.IsRepeated +} + +func (v *CValue) IsStruct() bool { + return v.typ.Pointer == 0 && v.typ.Kind == nori.TypeKind_STRUCT +} + +func (v *CValue) Type() *Type { + return v.typ +} + +func (v *CValue) IsPtrValue() bool { + return !v.typ.IsRepeated && v.typ.Pointer > 0 +} + +func (v *CValue) IsStringKind() bool { + return v.typ.IsStringKind() +} + +func (v *CValue) FixedArrayNum() uint64 { + return v.typ.ArrayNum +} + +func (v *CValue) ArrayNumArgIndex() int { + if v.typ.ArgArrayNum == 0 { + return 0 + } + return int(v.typ.ArgArrayNum) - 1 +} + +func (v *CValue) Elem() *CValue { + cloned := *v.typ + cloned.IsRepeated = false + if cloned.Pointer > 1 { + cloned.Pointer-- + } + return &CValue{ + Src: fmt.Sprintf("%s[i]", v.Src), + Dst: "v", + typ: &cloned, + } +} + +func (v *CValue) ArgStringLength() int { + return int(v.typ.ArgStringLength) +} + +func (v *CValue) IntPtr() string { + if v.IsPtrValue() || v.IsStruct() || v.IsStringKind() || v.IsFloat() { + return "" + } + return "(intptr_t)" +} + +func (v *CValue) GoType() string { + if v.typ.IsRepeated { + return "GoSlice *" + } + ptr := strings.Repeat("*", int(v.typ.Pointer)) + switch v.typ.Kind { + case nori.TypeKind_STRUCT: + typeName := v.typ.Ref.(*Message).Rule.Alias + if v.typ.Pointer == 0 { + return typeName + " *" + } + return typeName + " " + ptr + case nori.TypeKind_INT: + return "int" + ptr + case nori.TypeKind_UINT: + return "unsigned int" + ptr + case nori.TypeKind_VOIDPTR: + if v.typ.Pointer == 0 { + return "void *" + } + return "GoString " + ptr + case nori.TypeKind_CHARPTR, nori.TypeKind_STRING: + if v.typ.Pointer == 0 { + return "GoString *" + } + return "GoString " + ptr + case nori.TypeKind_BOOL: + return "bool" + ptr + case nori.TypeKind_UINT64: + return "unsigned long long int" + ptr + case nori.TypeKind_INT64: + return "long long int" + ptr + case nori.TypeKind_ENUM: + return "int" + ptr + case nori.TypeKind_FUNCPTR: + return "void *" + case nori.TypeKind_DOUBLE: + return "GoString *" + ptr + case nori.TypeKind_INT32: + return "long int" + ptr + case nori.TypeKind_UINT32: + return "unsigned long int" + ptr + case nori.TypeKind_FLOAT: + return "GoString *" + ptr + } + return "" +} + +func (v *CValue) WasmType() (ret string) { + defer func() { + if v.IsReturnValue { + ret += "*" + } + }() + if v.typ.IsRepeated { + return "GoSlice *" + } + if v.typ.Pointer > 0 { + return "void *" + } + var typeName string + switch v.typ.Kind { + case nori.TypeKind_STRUCT: + typeName = "void *" + case nori.TypeKind_INT: + typeName = "int" + case nori.TypeKind_UINT: + typeName = "unsigned int" + case nori.TypeKind_VOIDPTR: + typeName = "void *" + case nori.TypeKind_CHARPTR: + typeName = "void *" + case nori.TypeKind_STRING: + typeName = "void *" + case nori.TypeKind_BOOL: + typeName = "bool" + case nori.TypeKind_UINT64: + typeName = "unsigned long long int" + case nori.TypeKind_INT64: + typeName = "long long int" + case nori.TypeKind_ENUM: + typeName = "int" + case nori.TypeKind_FUNCPTR: + typeName = "void *" + case nori.TypeKind_DOUBLE: + typeName = "double" + case nori.TypeKind_INT32: + typeName = "long int" + case nori.TypeKind_UINT32: + typeName = "unsigned long int" + case nori.TypeKind_FLOAT: + typeName = "float" + } + return typeName +} + +func (v *CValue) CType() string { + var ( + typeName string + ptrNum int + ) + switch v.typ.Kind { + case nori.TypeKind_STRUCT: + msgRule := v.typ.Ref.(*Message).Rule + typeName = msgRule.Alias + case nori.TypeKind_INT: + typeName = "int" + case nori.TypeKind_UINT: + typeName = "unsigned int" + case nori.TypeKind_VOIDPTR: + typeName = "void *" + case nori.TypeKind_CHARPTR: + typeName = "char" + ptrNum = 1 + case nori.TypeKind_STRING: + typeName = "char" + ptrNum = 1 + case nori.TypeKind_BOOL: + typeName = "bool" + case nori.TypeKind_UINT64: + typeName = "unsigned long long int" + case nori.TypeKind_INT64: + typeName = "long long int" + case nori.TypeKind_ENUM: + enumRule := v.typ.Ref.(*Enum).Rule + typeName = enumRule.Alias + case nori.TypeKind_FUNCPTR: + typeName = "void *" + case nori.TypeKind_DOUBLE: + typeName = "double" + case nori.TypeKind_INT32: + typeName = "long int" + case nori.TypeKind_UINT32: + typeName = "unsigned long int" + case nori.TypeKind_FLOAT: + typeName = "float" + } + var attrs []string + if v.typ.Const { + attrs = append(attrs, "const") + } + if v.typ.Pointer != 0 || v.typ.IsRepeated { + typeName = strings.TrimSuffix(typeName, "*") + } + attrs = append(attrs, typeName) + if v.typ.Pointer != 0 { + ptrNum = int(v.typ.Pointer) + } + if v.typ.IsRepeated { + ptrNum++ + } + if ptrNum != 0 { + attrs = append(attrs, strings.Repeat("*", ptrNum)) + } + if v.typ.Addr { + attrs = append(attrs, "&") + } + return strings.Join(attrs, " ") +} + +func (v *CValue) Converter() string { + var ( + prefixes []string + suffixes []string + ) + if v.typ.Const { + prefixes = append(prefixes, "const") + } + var ptrNum int + if v.typ.Pointer == 0 && (v.typ.Kind == nori.TypeKind_CHARPTR || v.typ.Kind == nori.TypeKind_VOIDPTR) { + ptrNum = 1 + } else { + ptrNum = int(v.typ.Pointer) + } + if v.typ.IsRepeated { + ptrNum++ + } + if ptrNum != 0 { + suffixes = append(suffixes, strings.Repeat("*", ptrNum)) + } else if v.typ.Kind == nori.TypeKind_STRUCT { + ptrNum++ + suffixes = append(suffixes, strings.Repeat("*", ptrNum)) + } + if v.typ.Addr { + suffixes = append(suffixes, "&") + } + + var typeName string + switch v.typ.Kind { + case nori.TypeKind_INT: + return v.toCastValue("int", prefixes, suffixes) + case nori.TypeKind_INT32: + return v.toCastValue("long int", prefixes, suffixes) + case nori.TypeKind_INT64: + return v.toCastValue("long long int", prefixes, suffixes) + case nori.TypeKind_UINT: + return v.toCastValue("unsigned int", prefixes, suffixes) + case nori.TypeKind_UINT32: + return v.toCastValue("unsigned long int", prefixes, suffixes) + case nori.TypeKind_UINT64: + return v.toCastValue("unsigned long long int", prefixes, suffixes) + case nori.TypeKind_FLOAT: + return v.toCastValue("float", prefixes, suffixes) + case nori.TypeKind_DOUBLE: + return v.toCastValue("double", prefixes, suffixes) + case nori.TypeKind_VOIDPTR: + if v.typ.Pointer == 0 { + return fmt.Sprintf( + "(%s)", + strings.Join(append(prefixes, "void *"), " "), + ) + } + return v.toCastValue("void", prefixes, suffixes) + case nori.TypeKind_CHARPTR, nori.TypeKind_STRING: + if ptrNum == 0 { + return fmt.Sprintf( + "(%s)", + strings.Join(append(prefixes, "char *"), " "), + ) + } + return v.toCastValue("char", prefixes, suffixes) + case nori.TypeKind_BOOL: + return v.toCastValue("bool", prefixes, suffixes) + case nori.TypeKind_ENUM: + enumRule := v.typ.Ref.(*Enum).Rule + typeName = enumRule.Alias + return v.toCastValue(typeName, prefixes, suffixes) + case nori.TypeKind_STRUCT: + typeName := v.typ.Ref.(*Message).Rule.Alias + conv := v.toCastValue(typeName, prefixes, suffixes) + if v.typ.Pointer == 0 && !v.typ.IsRepeated { + // need dereference. + return "*" + conv + } + return conv + case nori.TypeKind_FUNCPTR: + return "(void *)" + } + return "" +} + +func (v *CValue) toCastValue(typeName string, prefixes, suffixes []string) string { + return "(" + strings.Join(append(append(prefixes, typeName), suffixes...), " ") + ")" +} + +func (f *CFile) Headers() []string { + if f.Rule == nil { + return nil + } + headerMap := make(map[string]struct{}) + for _, export := range f.Rule.Exports { + for _, header := range export.Headers { + headerMap[header] = struct{}{} + } + } + ret := make([]string, 0, len(headerMap)) + for header := range headerMap { + ret = append(ret, header) + } + sort.Strings(ret) + return ret +} + +type CExportType struct { + Name string + Type string + HasConstructor bool + Fields []*CExportField +} + +type CExportField struct { + Name string + ReceiverType string + Type string + Value *CValue + ArrayNum uint64 +} + +type CExportEnum struct { + Name string + Values []*CExportEnumValue +} + +type CExportEnumValue struct { + Name string +} + +func (f *CFile) ExportMessages() []*CExportType { + var ret []*CExportType + for _, msg := range f.Messages { + ret = append(ret, f.toExportTypes(msg)...) + } + return ret +} + +func (f *CFile) ExportEnums() []*CExportEnum { + ret := make([]*CExportEnum, 0, len(f.Enums)) + for _, enum := range f.Enums { + ret = append(ret, f.toExportEnum(enum)) + } + return ret +} + +func (f *CFile) toExportEnum(enum *Enum) *CExportEnum { + values := make([]*CExportEnumValue, 0, len(enum.Values)) + for _, value := range enum.Values { + if value.Rule == nil || value.Rule.Alias == "" { + continue + } + values = append(values, &CExportEnumValue{ + Name: value.Rule.Alias, + }) + } + return &CExportEnum{ + Name: enum.Rule.Alias, + Values: values, + } +} + +func (f *CFile) toExportTypes(msg *Message) []*CExportType { + var ret []*CExportType + for _, m := range msg.NestedMessages { + ret = append(ret, f.toExportTypes(m)...) + } + if msg.Rule.Alias == "" { + return ret + } + exportType := &CExportType{ + Name: msg.FullName(), + Type: msg.Rule.Alias, + HasConstructor: msg.Rule.HasConstructor, + } + for _, field := range msg.Fields { + accessor := f.fieldAccessor(field) + typeText := (&CValue{typ: field.Type}).CType() + if field.Type.Pointer == 0 && field.Type.Kind == nori.TypeKind_STRUCT { + typeText += "*" + } + exportType.Fields = append(exportType.Fields, &CExportField{ + Name: field.FullName(), + ReceiverType: msg.Rule.Alias, + Value: &CValue{ + Src: fmt.Sprintf("recv->%s", accessor), + Dst: "v", + typ: field.Type, + }, + Type: typeText, + ArrayNum: field.Type.ArrayNum, + }) + } + ret = append(ret, exportType) + return ret +} + +func (f *CFile) fieldAccessor(field *Field) string { + if field.Rule != nil && field.Rule.Alias != "" { + if field.Oneof != "" { + return field.Oneof + "." + field.Rule.Alias + } + return field.Rule.Alias + } + if field.Oneof != "" { + return field.Oneof + "." + field.Name + } + return field.Name +} + +func (f *CFile) ExportCallbackFunctions() []*CCallbackFunction { + var ret []*CCallbackFunction + for _, msg := range f.Messages { + ret = append(ret, f.toCallbackFunctions(msg)...) + } + return ret +} + +func (f *CFile) toCallbackFunctions(msg *Message) []*CCallbackFunction { + var ret []*CCallbackFunction + for _, m := range msg.NestedMessages { + ret = append(ret, f.toCallbackFunctions(m)...) + } + if msg.Rule == nil { + return ret + } + if msg.Rule.Funcptr == nil { + return ret + } + funcptr := msg.Rule.Funcptr + var args []*CArg + for idx, typ := range funcptr.Args { + args = append(args, &CArg{ + Index: idx, + IsLastArg: idx == len(funcptr.Args)-1, + Value: &CValue{ + Src: fmt.Sprintf("_arg%d", idx), + Dst: fmt.Sprintf("arg%d", idx), + typ: typ, + }, + }) + } + returnType := "void" + if funcptr.Return != nil { + returnType = (&CValue{typ: funcptr.Return, IsReturnValue: true}).CType() + } + return append(ret, &CCallbackFunction{ + Name: msg.FullName(), + Args: args, + Return: returnType, + }) +} + +func (f *CFile) ExportFunctions() []*CExportFunction { + if f.Rule == nil { + return nil + } + var ret []*CExportFunction + for _, export := range f.Rule.Exports { + for _, fn := range export.Funcs { + ret = append(ret, f.toExportFunction(fn, nil)) + } + for _, mtd := range export.Methods { + ret = append(ret, f.toExportFunction(mtd.FunctionDef, mtd.Receiver)) + } + } + return ret +} + +func (f *CFile) toExportFunction(fn *FunctionDef, receiver *Type) *CExportFunction { + argsDef := fn.Args + if receiver != nil { + argsDef = append([]*Type{receiver}, argsDef...) + } + var ( + args = make([]*CArg, 0, len(argsDef)) + funcArgs = make([]*CArg, 0, len(argsDef)) + ) + for idx, typ := range argsDef { + args = append(args, &CArg{ + Index: idx, + IsLastArg: fn.Return == nil && idx == len(argsDef)-1, + Value: &CValue{ + typ: typ, + }, + }) + funcArgs = append(funcArgs, &CArg{ + Index: idx, + IsLastArg: idx == len(argsDef)-1, + Value: &CValue{ + typ: typ, + }, + Dst: fmt.Sprintf("arg%d", idx), + Src: fmt.Sprintf("_arg%d", idx), + }) + } + var retValue *CReturn + if fn.Return != nil { + args = append(args, &CArg{ + Index: len(argsDef), + IsLastArg: true, + Value: &CValue{ + IsReturnValue: true, + typ: fn.Return, + }, + }) + retValue = &CReturn{ + Index: len(argsDef), + Value: &CValue{ + Src: "ret", + Dst: "v", + typ: fn.Return, + }, + } + } + var names []string + if receiver != nil { + names = append(names, receiver.Ref.(*Message).FullName()) + } + names = append(names, fn.Name) + return &CExportFunction{ + Name: strings.Join(names, "_"), + Args: args, + Function: fn.Alias, + FuncArgs: funcArgs, + Return: retValue, + } +} diff --git a/internal/tools/nori/generate_go.go b/internal/tools/nori/generate_go.go new file mode 100644 index 0000000..7fe856f --- /dev/null +++ b/internal/tools/nori/generate_go.go @@ -0,0 +1,519 @@ +package nori + +import ( + "bytes" + _ "embed" + "errors" + "fmt" + "go/format" + "strings" + "text/template" + + "github.com/goccy/nori/nori" +) + +//go:embed templates/bind.go.tmpl +var bindGo string + +type GoFile struct { + *File + WasmName string +} + +type GoExportFunction struct { + Receiver string + GoName string + WasmName string + Args []*GoArg + Return *GoReturn +} + +type GoArg struct { + Index int + IsLastArg bool + Src string + Dst string + Value *GoValue +} + +type GoReturn struct { + Index int + Src string + Dst string + Value *GoValue +} + +type GoValue struct { + typ *Type +} + +func (v *GoValue) Elem() *GoValue { + typ := *v.typ + typ.Pointer-- + return &GoValue{typ: &typ} +} + +func (v *GoValue) Is64Bit() bool { + return v.typ.Is64Bit() +} + +func (v *GoValue) IsFunction() bool { + return v.typ.IsFunction() +} + +func (v *GoValue) IsPtrValue() bool { + return isGoPtrValue(v.typ) +} + +func (v *GoValue) IsStringKind() bool { + return v.typ.IsStringKind() +} + +func (v *GoValue) IsFloatKind() bool { + return v.typ.IsFloatKind() +} + +func (v *GoValue) IsSlice() bool { + return v.typ.IsRepeated +} + +func (v *GoValue) FuncName() string { + if !v.typ.IsFunction() { + return "" + } + return v.typ.Ref.(*Message).FullName() +} + +func (v *GoValue) GoType() string { + return v.toTypeText(v.typ) +} + +// GoInterfaceType consider callback function type when creates GoType text. +func (v *GoValue) GoInterfaceType() string { + return v.toIfaceTypeText(v.typ) +} + +func (v *GoValue) WasmTypeConverter() string { + if isGoPtrValue(v.typ) { + return "mod.toPtrWasmValue" + } + var typeName string + switch v.typ.Kind { + case nori.TypeKind_STRUCT: + typeName = "mod.toObject" + case nori.TypeKind_INT, nori.TypeKind_ENUM: + typeName = "mod.toInt" + case nori.TypeKind_INT32: + typeName = "mod.toInt32" + case nori.TypeKind_INT64: + typeName = "mod.toInt64" + case nori.TypeKind_UINT: + typeName = "mod.toUint" + case nori.TypeKind_UINT32: + typeName = "mod.toUint32" + case nori.TypeKind_UINT64: + typeName = "mod.toUint64" + case nori.TypeKind_VOIDPTR: + typeName = "mod.toAny" + case nori.TypeKind_CHARPTR, nori.TypeKind_STRING: + typeName = "mod.toString" + case nori.TypeKind_BOOL: + typeName = "mod.toBool" + case nori.TypeKind_FUNCPTR: + typeName = "mod.toFunc" + case nori.TypeKind_FLOAT: + typeName = "mod.toFloat" + case nori.TypeKind_DOUBLE: + typeName = "mod.toDouble" + default: + typeName = "mod.toUint" + } + if v.typ.IsRepeated { + typeName += "Array" + } + return typeName + "WasmValue" +} + +func (v *GoValue) GoTypeConverter() string { + var typeName string + switch v.typ.Kind { + case nori.TypeKind_STRUCT: + typeName = fmt.Sprintf("new%s", toPublicGoVariable(v.typ.Ref.(*Message).Name)) + case nori.TypeKind_INT: + typeName = "mod.toInt" + case nori.TypeKind_INT32: + typeName = "mod.toInt32" + case nori.TypeKind_INT64: + typeName = "mod.toInt64" + case nori.TypeKind_UINT: + typeName = "mod.toUint" + case nori.TypeKind_UINT32: + typeName = "mod.toUint32" + case nori.TypeKind_UINT64: + typeName = "mod.toUint64" + case nori.TypeKind_ENUM: + typeName = toPublicGoVariable(v.typ.Ref.(*Enum).Name) + case nori.TypeKind_VOIDPTR: + typeName = "mod.toAny" + case nori.TypeKind_CHARPTR, nori.TypeKind_STRING: + typeName = "mod.toString" + case nori.TypeKind_BOOL: + typeName = "mod.toBool" + case nori.TypeKind_FUNCPTR: + typeName = "mod.toAny" + case nori.TypeKind_FLOAT: + typeName = "mod.toFloat32" + case nori.TypeKind_DOUBLE: + typeName = "mod.toFloat64" + default: + typeName = "mod.toAny" + } + if v.typ.IsRepeated { + typeName += "Slice" + } + return typeName +} + +func (v *GoValue) toIfaceTypeText(typ *Type) string { + ret := v.toTypeText(typ) + if typ.Kind == nori.TypeKind_FUNCPTR { + return fmt.Sprintf("*CallbackFunc[%s]", ret) + } + return ret +} + +func (v *GoValue) toTypeText(typ *Type) string { + var typeName string + switch typ.Kind { + case nori.TypeKind_STRUCT: + typeName = "*" + toPublicGoVariable(typ.Ref.(*Message).Name) + case nori.TypeKind_INT: + typeName = "int" + case nori.TypeKind_UINT: + typeName = "uint" + case nori.TypeKind_VOIDPTR: + typeName = "any" + case nori.TypeKind_CHARPTR: + typeName = "string" + case nori.TypeKind_STRING: + typeName = "string" + case nori.TypeKind_BOOL: + typeName = "bool" + case nori.TypeKind_UINT64: + typeName = "uint64" + case nori.TypeKind_INT64: + typeName = "int64" + case nori.TypeKind_ENUM: + typeName = toPublicGoVariable(typ.Ref.(*Enum).Name) + case nori.TypeKind_FUNCPTR: + def := typ.Ref.(*Message).Rule.Funcptr + args := make([]string, 0, len(def.Args)) + for _, arg := range def.Args { + args = append(args, v.toTypeText(arg)) + } + ret := "error" + if def.Return != nil { + ret = fmt.Sprintf("(%s, error)", v.toTypeText(def.Return)) + } + typeName = fmt.Sprintf("func(context.Context, %s)%s", strings.Join(args, ","), ret) + case nori.TypeKind_DOUBLE: + typeName = "float64" + case nori.TypeKind_INT32: + typeName = "int32" + case nori.TypeKind_UINT32: + typeName = "uint32" + case nori.TypeKind_FLOAT: + typeName = "float32" + } + if typ.IsRepeated { + return "[]" + typeName + } + if typ.Pointer == 1 { + typeName = "*" + strings.TrimPrefix(typeName, "*") + } else if typ.Pointer > 1 { + return strings.Repeat("*", int(typ.Pointer-1)) + typeName + } + return typeName +} + +func isGoPtrValue(typ *Type) bool { + if !typ.IsRepeated && typ.Pointer > 0 { + switch typ.Kind { + case nori.TypeKind_STRUCT: + if typ.Pointer == 2 { + return true + } + case nori.TypeKind_CHARPTR: + if typ.Pointer == 2 { + return true + } + default: + return true + } + } + return false +} + +type GoExportType struct { + Name string + HasConstructor bool + Fields []*GoExportField + EnumValues []*GoExportEnumValue +} + +type GoExportField struct { + GoName string + WasmName string + Src string + Dst string + Value *GoValue +} + +type GoExportEnumValue struct { + GoName string + WasmName string +} + +type GoCallbackFunction struct { + Name string + Args []*GoArg + Return *GoReturn +} + +func (f *GoFile) ExportCallbackFunctions() []*GoCallbackFunction { + var ret []*GoCallbackFunction + for _, msg := range f.Messages { + ret = append(ret, f.toCallbackFunctions(msg)...) + } + return ret +} + +func (f *GoFile) toCallbackFunctions(msg *Message) []*GoCallbackFunction { + var ret []*GoCallbackFunction + for _, m := range msg.NestedMessages { + ret = append(ret, f.toCallbackFunctions(m)...) + } + if msg.Rule == nil { + return ret + } + if msg.Rule.Funcptr == nil { + return ret + } + funcptr := msg.Rule.Funcptr + var args []*GoArg + for idx, typ := range funcptr.Args { + args = append(args, &GoArg{ + Index: idx, + IsLastArg: idx == len(funcptr.Args)-1, + Value: &GoValue{typ: typ}, + Src: fmt.Sprintf("stack[%d]", idx), + Dst: "ret", + }) + } + var retValue *GoReturn + if funcptr.Return != nil { + retValue = &GoReturn{ + Value: &GoValue{typ: funcptr.Return}, + } + } + return append(ret, &GoCallbackFunction{ + Name: msg.FullName(), + Args: args, + Return: retValue, + }) +} + +func (f *GoFile) ExportMessages() []*GoExportType { + var ret []*GoExportType + for _, msg := range f.Messages { + ret = append(ret, f.toExportTypes(msg)...) + } + return ret +} + +func (f *GoFile) toExportTypes(m *Message) []*GoExportType { + var ret []*GoExportType + for _, msg := range m.NestedMessages { + ret = append(ret, f.toExportTypes(msg)...) + } + + if m.Rule != nil && m.Rule.Funcptr != nil { + return ret + } + + exportType := &GoExportType{ + Name: toPublicGoVariable(m.Name), + HasConstructor: m.Rule.HasConstructor, + } + for _, field := range m.Fields { + exportType.Fields = append(exportType.Fields, &GoExportField{ + Src: "p", + Dst: "ret", + Value: &GoValue{typ: field.Type}, + WasmName: field.FullName(), + GoName: toPublicGoVariable(field.Name), + }) + } + return append(ret, exportType) +} + +func (f *GoFile) ExportEnums() []*GoExportType { + var ret []*GoExportType + for _, enum := range f.Enums { + enumValues := make([]*GoExportEnumValue, 0, len(enum.Values)) + for _, value := range enum.Values { + if value.Rule == nil || value.Rule.Alias == "" { + continue + } + enumValues = append(enumValues, &GoExportEnumValue{ + GoName: value.Name, + WasmName: value.Rule.Alias, + }) + } + ret = append(ret, &GoExportType{ + Name: toPublicGoVariable(enum.Name), + EnumValues: enumValues, + }) + } + return ret +} + +func (f *GoFile) ExportFunctions() []*GoExportFunction { + if f.Rule == nil { + return nil + } + var ret []*GoExportFunction + for _, export := range f.Rule.Exports { + for _, fn := range export.Funcs { + ret = append(ret, f.toExportFunction(fn, nil)) + } + } + return ret +} + +func (f *GoFile) ExportMethods() []*GoExportFunction { + if f.Rule == nil { + return nil + } + var ret []*GoExportFunction + for _, export := range f.Rule.Exports { + for _, mtd := range export.Methods { + ret = append(ret, f.toExportFunction(mtd.FunctionDef, mtd.Receiver)) + } + } + return ret +} + +func (f *GoFile) toExportFunction(fn *FunctionDef, receiver *Type) *GoExportFunction { + argsDef := fn.Args + var args = make([]*GoArg, 0, len(argsDef)) + for idx, typ := range argsDef { + args = append(args, &GoArg{ + Index: idx, + IsLastArg: idx == len(argsDef)-1, + Src: "p", + Dst: "_arg" + fmt.Sprint(idx), + Value: &GoValue{typ: typ}, + }) + } + var retValue *GoReturn + if fn.Return != nil { + retValue = &GoReturn{ + Index: len(argsDef), + Value: &GoValue{typ: fn.Return}, + Src: "p", + Dst: "ret", + } + } + var names []string + if receiver != nil { + names = append(names, receiver.Ref.(*Message).Name) + } + names = append(names, fn.Name) + var receiverName string + if receiver != nil { + receiverName = toPublicGoVariable(receiver.Ref.(*Message).Name) + } + return &GoExportFunction{ + Receiver: receiverName, + GoName: toPublicGoVariable(fn.Name), + WasmName: strings.Join(names, "_"), + Args: args, + Return: retValue, + } +} + +func generateGoFile(file *File) ([]byte, error) { + parsed, err := template.New("").Funcs(map[string]any{ + "map": createMap, + }).Parse(bindGo) + if err != nil { + return nil, fmt.Errorf("failed to parse template bind.go.tmpl: %w", err) + } + var buf bytes.Buffer + if err := parsed.Execute(&buf, &GoFile{File: file, WasmName: "graphviz"}); err != nil { + return nil, fmt.Errorf("failed to execute template: %w", err) + } + src, err := format.Source(buf.Bytes()) + if err != nil { + return nil, fmt.Errorf("failed to format %s: %w", buf.String(), err) + } + return src, nil +} + +func toPublicGoVariable(s string) string { + if len(s) == 0 { + return "" + } + up := strings.ToUpper(string(s[0])) + if len(s) == 1 { + return up + } + return toGoVariable(up + s[1:]) +} + +func toPrivateGoVariable(s string) string { + if len(s) == 0 { + return "" + } + up := strings.ToLower(string(s[0])) + if len(s) == 1 { + return up + } + return toGoVariable(up + s[1:]) +} + +func toGoVariable(s string) string { + ret := make([]rune, 0, len(s)) + var isUpper bool + for _, c := range s { + if c == '_' { + isUpper = true + continue + } + if isUpper { + ret = append(ret, []rune(strings.ToUpper(string(c)))...) + isUpper = false + } else { + ret = append(ret, c) + } + } + return string(ret) +} + +func createMap(pairs ...any) (map[string]any, error) { + if len(pairs)%2 != 0 { + return nil, errors.New("the number of arguments must be divisible by two") + } + + m := make(map[string]any, len(pairs)/2) + for i := 0; i < len(pairs); i += 2 { + key, ok := pairs[i].(string) + + if !ok { + return nil, fmt.Errorf("cannot use type %T as map key", pairs[i]) + } + m[key] = pairs[i+1] + } + return m, nil +} diff --git a/internal/tools/nori/generator.go b/internal/tools/nori/generator.go new file mode 100644 index 0000000..576155d --- /dev/null +++ b/internal/tools/nori/generator.go @@ -0,0 +1,985 @@ +package nori + +import ( + "context" + _ "embed" + "fmt" + "reflect" + "strings" + + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/dynamicpb" + "google.golang.org/protobuf/types/pluginpb" + + "github.com/goccy/nori/nori" +) + +type File struct { + Name string + Messages []*Message + Enums []*Enum + Rule *FileRule +} + +type FileRule struct { + Exports []*Export +} + +type Export struct { + Headers []string + Funcs []*FunctionDef + Methods []*MethodDef +} + +type FunctionDef struct { + Name string + Alias string + Args []*Type + Return *Type +} + +type MethodDef struct { + *FunctionDef + Receiver *Type +} + +type TypeKind = nori.TypeKind + +type Type struct { + Kind TypeKind + Pointer uint64 + Const bool + Addr bool + IsFuncBasePtr bool + IsRepeated bool + ArrayNum uint64 + ArgArrayNum uint64 + ArgStringLength uint64 + Ref any +} + +type Message struct { + Name string + Fields []*Field + NestedMessages []*Message + Parent *Message + Rule *MessageRule +} + +type MessageRule struct { + Funcptr *FunctionDef + Anonymous bool + Alias string + HasConstructor bool +} + +type Field struct { + Name string + Type *Type + Rule *FieldRule + Message *Message + Oneof string +} + +type FieldRule struct { + Type *Type + Alias string +} + +type Enum struct { + Name string + Values []*EnumValue + Rule *EnumRule +} + +type EnumRule struct { + Alias string +} + +type EnumValue struct { + Name string + Rule *EnumValueRule +} + +type EnumValueRule struct { + Alias string +} + +func (m *Message) FullName() string { + return strings.Join(append(m.ParentMessageNames(), m.Name), "_") +} + +func (m *Message) ParentMessageNames() []string { + if m.Parent == nil { + return []string{} + } + return append(m.Parent.ParentMessageNames(), m.Parent.Name) +} + +func (f *Field) FullName() string { + return f.Message.FullName() + "_" + f.Name +} + +func (t *Type) Is64Bit() bool { + if t.Pointer != 0 { + return false + } + return t.Kind == nori.TypeKind_UINT64 || t.Kind == nori.TypeKind_INT64 || t.Kind == nori.TypeKind_DOUBLE +} + +func (t *Type) IsString() bool { + if t.IsRepeated { + return false + } + if t.Pointer > 1 { + return false + } + if t.Kind == nori.TypeKind_STRING && t.Pointer == 0 { + return true + } + if t.Kind == nori.TypeKind_CHARPTR && t.Pointer <= 1 { + return true + } + return false +} + +func (t *Type) IsStringKind() bool { + if t.Kind == nori.TypeKind_STRING { + return true + } + if t.Kind == nori.TypeKind_CHARPTR { + return true + } + return false +} + +func (t *Type) IsFloatKind() bool { + return t.Kind == nori.TypeKind_FLOAT || t.Kind == nori.TypeKind_DOUBLE +} + +func (t *Type) IsFunction() bool { + if t == nil { + return false + } + if t.Ref != nil { + msg, ok := t.Ref.(*Message) + if ok { + if msg.Rule != nil && msg.Rule.Funcptr != nil { + return true + } + } + } + return false +} + +func Generate(ctx context.Context, req *pluginpb.CodeGeneratorRequest) (*pluginpb.CodeGeneratorResponse, error) { + files, err := newResolver().Resolve(req.GetProtoFile()) + if err != nil { + return nil, err + } + lastFile := files[len(files)-1] + if lastFile.Name == "nori/nori.proto" { + return nil, nil + } + cFile, err := generateCFile(lastFile) + if err != nil { + return nil, err + } + goFile, err := generateGoFile(lastFile) + if err != nil { + return nil, err + } + return &pluginpb.CodeGeneratorResponse{ + File: []*pluginpb.CodeGeneratorResponse_File{ + { + Name: proto.String("bind.c"), + Content: proto.String(string(cFile)), + }, + { + Name: proto.String("bind.go"), + Content: proto.String(string(goFile)), + }, + }, + }, nil +} + +type Resolver struct { + pkgMap map[string]struct{} + messageMap map[string]*Message + fieldMap map[string]*Field + enumMap map[string]*Enum + enumValueMap map[string]*EnumValue + messageRuleMap map[*Message]*nori.MessageRule + fieldRuleMap map[*Field]*nori.FieldRule + enumRuleMap map[*Enum]*nori.EnumRule + enumValueRuleMap map[*EnumValue]*nori.EnumValueRule +} + +func newResolver() *Resolver { + return &Resolver{ + pkgMap: make(map[string]struct{}), + messageMap: make(map[string]*Message), + fieldMap: make(map[string]*Field), + enumMap: make(map[string]*Enum), + enumValueMap: make(map[string]*EnumValue), + messageRuleMap: make(map[*Message]*nori.MessageRule), + fieldRuleMap: make(map[*Field]*nori.FieldRule), + enumRuleMap: make(map[*Enum]*nori.EnumRule), + enumValueRuleMap: make(map[*EnumValue]*nori.EnumValueRule), + } +} + +func (r *Resolver) Resolve(defs []*descriptorpb.FileDescriptorProto) ([]*File, error) { + if err := r.resolveReference(defs); err != nil { + return nil, err + } + files, err := r.resolveFiles(defs) + if err != nil { + return nil, err + } + return files, nil +} + +func (r *Resolver) resolveReference(defs []*descriptorpb.FileDescriptorProto) error { + for _, def := range defs { + if err := r.resolveFileReference(def); err != nil { + return err + } + } + return nil +} + +func (r *Resolver) resolveFileReference(def *descriptorpb.FileDescriptorProto) error { + pkgName := def.GetPackage() + r.pkgMap[pkgName] = struct{}{} + if err := r.resolveMessageReferences(pkgName, nil, def.GetMessageType()); err != nil { + return err + } + if err := r.resolveEnumReferences(pkgName, nil, def.GetEnumType()); err != nil { + return err + } + return nil +} + +func (r *Resolver) resolveMessageReferences(pkgName string, parentMsgNames []string, defs []*descriptorpb.DescriptorProto) error { + for _, def := range defs { + if err := r.resolveMessageReference(pkgName, parentMsgNames, def); err != nil { + return err + } + } + return nil +} + +func (r *Resolver) resolveMessageReference(pkgName string, parentMsgNames []string, def *descriptorpb.DescriptorProto) error { + msgNames := append(parentMsgNames, def.GetName()) + fqdn := fmt.Sprintf("%s.%s", pkgName, strings.Join(msgNames, ".")) + if _, exists := r.messageMap[fqdn]; exists { + return nil + } + r.messageMap[fqdn] = &Message{ + Name: def.GetName(), + } + if err := r.resolveMessageReferences(pkgName, msgNames, def.GetNestedType()); err != nil { + return err + } + if err := r.resolveEnumReferences(pkgName, msgNames, def.GetEnumType()); err != nil { + return err + } + if err := r.resolveFieldReferences(pkgName, msgNames, def.GetField()); err != nil { + return err + } + return nil +} + +func (r *Resolver) resolveFieldReferences(pkgName string, msgNames []string, defs []*descriptorpb.FieldDescriptorProto) error { + for _, def := range defs { + if err := r.resolveFieldReference(pkgName, msgNames, def); err != nil { + return err + } + } + return nil +} + +func (r *Resolver) resolveFieldReference(pkgName string, msgNames []string, def *descriptorpb.FieldDescriptorProto) error { + fqdn := fmt.Sprintf("%s.%s.%s", pkgName, strings.Join(msgNames, "."), def.GetName()) + if _, exists := r.fieldMap[fqdn]; exists { + return nil + } + r.fieldMap[fqdn] = &Field{ + Name: def.GetName(), + } + return nil +} + +func (r *Resolver) resolveEnumReferences(pkgName string, parentMsgNames []string, defs []*descriptorpb.EnumDescriptorProto) error { + for _, def := range defs { + if err := r.resolveEnumReference(pkgName, parentMsgNames, def); err != nil { + return err + } + } + return nil +} + +func (r *Resolver) resolveEnumReference(pkgName string, parentMsgNames []string, def *descriptorpb.EnumDescriptorProto) error { + enumName := def.GetName() + fqdn := fmt.Sprintf("%s.%s", pkgName, strings.Join(append(parentMsgNames, enumName), ".")) + if _, exists := r.enumMap[fqdn]; exists { + return nil + } + r.enumMap[fqdn] = &Enum{ + Name: enumName, + } + if err := r.resolveEnumValueReferences(pkgName, parentMsgNames, enumName, def.GetValue()); err != nil { + return err + } + return nil +} + +func (r *Resolver) resolveEnumValueReferences(pkgName string, parentMsgNames []string, enumName string, defs []*descriptorpb.EnumValueDescriptorProto) error { + for _, def := range defs { + if err := r.resolveEnumValueReference(pkgName, parentMsgNames, enumName, def); err != nil { + return err + } + } + return nil +} + +func (r *Resolver) resolveEnumValueReference(pkgName string, parentMsgNames []string, enumName string, def *descriptorpb.EnumValueDescriptorProto) error { + enumValueName := def.GetName() + fqdn := fmt.Sprintf("%s.%s", pkgName, strings.Join(append(parentMsgNames, enumName, enumValueName), ".")) + if _, exists := r.enumValueMap[fqdn]; exists { + return nil + } + r.enumValueMap[fqdn] = &EnumValue{ + Name: enumValueName, + } + return nil +} + +func (r *Resolver) resolveFiles(defs []*descriptorpb.FileDescriptorProto) ([]*File, error) { + ret := make([]*File, 0, len(defs)) + for _, def := range defs { + file, err := r.resolveFile(def) + if err != nil { + return nil, err + } + ret = append(ret, file) + } + return ret, nil +} + +func (r *Resolver) resolveFile(def *descriptorpb.FileDescriptorProto) (*File, error) { + ruleDef, err := getExtensionRule[*nori.FileRule](def.GetOptions(), nori.E_File) + if err != nil { + return nil, err + } + pkgName := def.GetPackage() + msgs, err := r.resolveMessages(pkgName, def.GetMessageType()) + if err != nil { + return nil, err + } + enums, err := r.resolveEnums(pkgName, def.GetEnumType()) + if err != nil { + return nil, err + } + for _, msg := range r.messageMap { + if err := r.resolveMessageRule(pkgName, msg, r.messageRuleMap[msg]); err != nil { + return nil, err + } + } + for _, field := range r.fieldMap { + if err := r.resolveFieldRule(pkgName, field, r.fieldRuleMap[field]); err != nil { + return nil, err + } + } + for _, enum := range r.enumMap { + if err := r.resolveEnumRule(enum, r.enumRuleMap[enum]); err != nil { + return nil, err + } + } + for _, value := range r.enumValueMap { + if err := r.resolveEnumValueRule(value, r.enumValueRuleMap[value]); err != nil { + return nil, err + } + } + rule, err := r.resolveFileRule(pkgName, ruleDef) + if err != nil { + return nil, err + } + return &File{ + Name: def.GetName(), + Messages: msgs, + Enums: enums, + Rule: rule, + }, nil +} + +func (r *Resolver) resolveFileRule(pkgName string, def *nori.FileRule) (*FileRule, error) { + exports, err := r.resolveExports(pkgName, def.GetExport()) + if err != nil { + return nil, err + } + return &FileRule{ + Exports: exports, + }, nil +} + +func (r *Resolver) resolveExports(pkgName string, defs []*nori.Export) ([]*Export, error) { + ret := make([]*Export, 0, len(defs)) + for _, def := range defs { + export, err := r.resolveExport(pkgName, def) + if err != nil { + return nil, err + } + ret = append(ret, export) + } + return ret, nil +} + +func (r *Resolver) resolveExport(pkgName string, def *nori.Export) (*Export, error) { + funcs, err := r.resolveFunctionDefs(pkgName, def.GetFunc()) + if err != nil { + return nil, err + } + mtds, err := r.resolveMethodDefs(pkgName, def.GetMethod()) + if err != nil { + return nil, err + } + return &Export{ + Headers: def.GetHeader(), + Funcs: funcs, + Methods: mtds, + }, nil +} + +func (r *Resolver) resolveFunctionDefs(pkgName string, defs []*nori.FunctionDef) ([]*FunctionDef, error) { + ret := make([]*FunctionDef, 0, len(defs)) + for _, def := range defs { + fn, err := r.resolveFunctionDef(pkgName, def) + if err != nil { + return nil, err + } + if fn == nil { + continue + } + ret = append(ret, fn) + } + return ret, nil +} + +func (r *Resolver) resolveFunctionDef(pkgName string, def *nori.FunctionDef) (*FunctionDef, error) { + if def == nil { + return nil, nil + } + name := def.GetName() + alias := name + if v := def.GetAlias(); v != "" { + alias = v + } + args, err := r.resolveTypes(pkgName, def.GetArgs()) + if err != nil { + return nil, err + } + retType, err := r.resolveType(pkgName, def.GetReturn()) + if err != nil { + return nil, err + } + return &FunctionDef{ + Name: name, + Alias: alias, + Args: args, + Return: retType, + }, nil +} + +func (r *Resolver) resolveMethodDefs(pkgName string, defs []*nori.MethodDef) ([]*MethodDef, error) { + ret := make([]*MethodDef, 0, len(defs)) + for _, def := range defs { + mtd, err := r.resolveMethodDef(pkgName, def) + if err != nil { + return nil, err + } + ret = append(ret, mtd) + } + return ret, nil +} + +func (r *Resolver) resolveMethodDef(pkgName string, def *nori.MethodDef) (*MethodDef, error) { + name := def.GetName() + alias := def.GetAlias() + if alias == "" { + alias = name + } + args, err := r.resolveTypes(pkgName, def.GetArgs()) + if err != nil { + return nil, err + } + retType, err := r.resolveType(pkgName, def.GetReturn()) + if err != nil { + return nil, err + } + recv := def.GetRecv() + if !r.existsPackage(recv) { + recv = fmt.Sprintf("%s.%s", pkgName, recv) + } + msg, exists := r.messageMap[recv] + if !exists { + return nil, fmt.Errorf("failed to find message from %s at resolving method receiver", recv) + } + return &MethodDef{ + Receiver: &Type{ + Kind: nori.TypeKind_STRUCT, + Ref: msg, + Pointer: 1, + }, + FunctionDef: &FunctionDef{ + Name: name, + Alias: alias, + Args: args, + Return: retType, + }, + }, nil +} + +func (r *Resolver) resolveTypes(pkgName string, defs []*nori.Type) ([]*Type, error) { + ret := make([]*Type, 0, len(defs)) + for _, def := range defs { + typ, err := r.resolveType(pkgName, def) + if err != nil { + return nil, err + } + ret = append(ret, typ) + } + return ret, nil +} + +func (r *Resolver) resolveType(pkgName string, def *nori.Type) (*Type, error) { + if def == nil { + return nil, nil + } + typeKind := def.GetKind() + refName := def.GetRef() + if !r.existsPackage(refName) { + refName = fmt.Sprintf("%s.%s", pkgName, refName) + } + + var ref any + switch typeKind { + case nori.TypeKind_STRUCT: + msg, exists := r.messageMap[refName] + if !exists { + return nil, fmt.Errorf("failed to find message from %s at resolving type", refName) + } + ref = msg + case nori.TypeKind_FUNCPTR: + msg, exists := r.messageMap[refName] + if !exists { + return nil, fmt.Errorf("failed to find message from %s at resolving type", refName) + } + if msg.Rule == nil || msg.Rule.Funcptr == nil { + return nil, fmt.Errorf("%s message doesn't specify funcptr but used as a funcptr", refName) + } + ref = msg + case nori.TypeKind_ENUM: + enum, exists := r.enumMap[refName] + if !exists { + return nil, fmt.Errorf("failed to find enum from %s at resolving type", refName) + } + ref = enum + } + isRepeated := def.GetArray() + if def.ArrayNum != nil { + isRepeated = true + } + if def.ArrayNumArg != nil { + isRepeated = true + } + return &Type{ + Kind: typeKind, + Ref: ref, + Const: def.GetConst(), + Addr: def.GetAddr(), + IsFuncBasePtr: def.GetFuncbaseptr(), + IsRepeated: isRepeated, + ArrayNum: def.GetArrayNum(), + ArgArrayNum: def.GetArrayNumArg(), + ArgStringLength: def.GetStringLengthArg(), + Pointer: def.GetPointer(), + }, nil +} + +func (r *Resolver) existsPackage(fqdn string) bool { + name := strings.TrimPrefix(fqdn, ".") + if !strings.Contains(name, ".") { + return false + } + names := strings.Split(name, ".") + for lastIdx := len(names) - 1; lastIdx > 0; lastIdx-- { + pkgName := strings.Join(names[:lastIdx], ".") + if _, exists := r.pkgMap[pkgName]; exists { + return true + } + } + return false +} + +func (r *Resolver) resolveFieldType(pkgName string, kind descriptorpb.FieldDescriptorProto_Type, typeName string, isRepeated bool) (*Type, error) { + typeName = strings.TrimPrefix(typeName, ".") // trim leading dot character. + if !r.existsPackage(typeName) { + typeName = fmt.Sprintf("%s.%s", pkgName, typeName) + } + var ( + ref any + typeKind TypeKind + ) + switch kind { + case descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: + typeKind = nori.TypeKind_DOUBLE + case descriptorpb.FieldDescriptorProto_TYPE_FLOAT: + typeKind = nori.TypeKind_FLOAT + case descriptorpb.FieldDescriptorProto_TYPE_INT64: + typeKind = nori.TypeKind_INT64 + case descriptorpb.FieldDescriptorProto_TYPE_UINT64: + typeKind = nori.TypeKind_UINT64 + case descriptorpb.FieldDescriptorProto_TYPE_INT32: + typeKind = nori.TypeKind_INT32 + case descriptorpb.FieldDescriptorProto_TYPE_FIXED64: + typeKind = nori.TypeKind_UINT64 + case descriptorpb.FieldDescriptorProto_TYPE_FIXED32: + typeKind = nori.TypeKind_UINT32 + case descriptorpb.FieldDescriptorProto_TYPE_BOOL: + typeKind = nori.TypeKind_BOOL + case descriptorpb.FieldDescriptorProto_TYPE_STRING: + typeKind = nori.TypeKind_STRING + case descriptorpb.FieldDescriptorProto_TYPE_MESSAGE: + typeKind = nori.TypeKind_STRUCT + msg, exists := r.messageMap[typeName] + if !exists { + return nil, fmt.Errorf("failed to find message from %s at resolving type", typeName) + } + ref = msg + case descriptorpb.FieldDescriptorProto_TYPE_BYTES: + typeKind = nori.TypeKind_STRING + case descriptorpb.FieldDescriptorProto_TYPE_UINT32: + typeKind = nori.TypeKind_UINT32 + case descriptorpb.FieldDescriptorProto_TYPE_ENUM: + typeKind = nori.TypeKind_ENUM + enum, exists := r.enumMap[typeName] + if !exists { + return nil, fmt.Errorf("failed to find enum from %s at resolving type", typeName) + } + ref = enum + case descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: + typeKind = nori.TypeKind_INT32 + case descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: + typeKind = nori.TypeKind_INT64 + case descriptorpb.FieldDescriptorProto_TYPE_SINT32: + typeKind = nori.TypeKind_INT32 + case descriptorpb.FieldDescriptorProto_TYPE_SINT64: + typeKind = nori.TypeKind_INT64 + default: + return nil, fmt.Errorf("found expected type kind %v", typeKind) + } + return &Type{ + Kind: typeKind, + Ref: ref, + IsRepeated: isRepeated, + }, nil +} + +func (r *Resolver) resolveMessages(pkgName string, defs []*descriptorpb.DescriptorProto) ([]*Message, error) { + ret := make([]*Message, 0, len(defs)) + for _, def := range defs { + msg, err := r.resolveMessage(pkgName, nil, def) + if err != nil { + return nil, err + } + ret = append(ret, msg) + } + return ret, nil +} + +func (r *Resolver) resolveMessageRule(pkgName string, msg *Message, def *nori.MessageRule) error { + funcptr, err := r.resolveFunctionDef(pkgName, def.GetFuncptr()) + if err != nil { + return err + } + if funcptr != nil { + var funcBasePtrCount int + for _, arg := range funcptr.Args { + if arg.IsFuncBasePtr { + funcBasePtrCount++ + } + } + if funcBasePtrCount != 1 { + return fmt.Errorf("failed to resolve %s funcptr. funcbaseptr flag must be enabled for one of the arguments", msg.Name) + } + } + hasConstructor := true + if def != nil && def.Constructor != nil { + hasConstructor = def.GetConstructor() + } + if funcptr != nil { + hasConstructor = false + } + msg.Rule = &MessageRule{ + Funcptr: funcptr, + Anonymous: def.GetAnonymous(), + Alias: def.GetAlias(), + HasConstructor: hasConstructor, + } + return nil +} + +func (r *Resolver) resolveMessage(pkgName string, parentMsgNames []string, def *descriptorpb.DescriptorProto) (*Message, error) { + msgName := def.GetName() + msgNames := append(parentMsgNames, msgName) + fqdn := fmt.Sprintf("%s.%s", pkgName, strings.Join(msgNames, ".")) + msg, exists := r.messageMap[fqdn] + if !exists { + return nil, fmt.Errorf("failed to find message from %s", fqdn) + } + ruleDef, err := getExtensionRule[*nori.MessageRule](def.GetOptions(), nori.E_Message) + if err != nil { + return nil, err + } + r.messageRuleMap[msg] = ruleDef + var oneofNames []string + for _, oneofDef := range def.GetOneofDecl() { + oneofNames = append(oneofNames, oneofDef.GetName()) + } + fields, err := r.resolveFields(pkgName, msgNames, oneofNames, msg, def.GetField()) + if err != nil { + return nil, err + } + msg.Fields = fields + for _, nested := range def.GetNestedType() { + nestedMsg, err := r.resolveMessage(pkgName, msgNames, nested) + if err != nil { + return nil, err + } + nestedMsg.Parent = msg + msg.NestedMessages = append(msg.NestedMessages, nestedMsg) + } + return msg, nil +} + +func (r *Resolver) resolveFields(pkgName string, msgNames, oneofNames []string, msg *Message, defs []*descriptorpb.FieldDescriptorProto) ([]*Field, error) { + ret := make([]*Field, 0, len(defs)) + for _, def := range defs { + field, err := r.resolveField(pkgName, msgNames, oneofNames, msg, def) + if err != nil { + return nil, err + } + ret = append(ret, field) + } + return ret, nil +} + +func (r *Resolver) resolveField(pkgName string, msgNames, oneofNames []string, msg *Message, def *descriptorpb.FieldDescriptorProto) (*Field, error) { + ruleDef, err := getExtensionRule[*nori.FieldRule](def.GetOptions(), nori.E_Field) + if err != nil { + return nil, err + } + fieldName := def.GetName() + fqdn := strings.Join(append(append([]string{pkgName}, msgNames...), fieldName), ".") + field, exists := r.fieldMap[fqdn] + if !exists { + return nil, fmt.Errorf("failed to find field from %s", fqdn) + } + fieldType, err := r.resolveFieldType(pkgName, def.GetType(), def.GetTypeName(), def.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED) + if err != nil { + return nil, err + } + r.fieldRuleMap[field] = ruleDef + field.Message = msg + field.Type = fieldType + + if def.OneofIndex != nil { + field.Oneof = oneofNames[def.GetOneofIndex()] + } + return field, nil +} + +func (r *Resolver) resolveFieldRule(pkgName string, field *Field, def *nori.FieldRule) error { + typ, err := r.resolveType(pkgName, def.GetType()) + if err != nil { + return err + } + if typ != nil { + if typ.Kind != 0 { + field.Type.Kind = typ.Kind + } + if typ.Ref != nil { + field.Type.Ref = typ.Ref + } + field.Type.Pointer = typ.Pointer + field.Type.Const = typ.Const + field.Type.Addr = typ.Addr + field.Type.IsFuncBasePtr = typ.IsFuncBasePtr + field.Type.ArrayNum = typ.ArrayNum + field.Type.ArgArrayNum = typ.ArgArrayNum + field.Type.IsRepeated = typ.IsRepeated + if typ.IsFunction() { + field.Type.Kind = nori.TypeKind_FUNCPTR + } + } + if field.Type.IsFunction() { + field.Type.Kind = nori.TypeKind_FUNCPTR + } + field.Rule = &FieldRule{ + Type: typ, + Alias: def.GetAlias(), + } + return nil +} + +func (r *Resolver) resolveEnums(pkgName string, defs []*descriptorpb.EnumDescriptorProto) ([]*Enum, error) { + ret := make([]*Enum, 0, len(defs)) + for _, def := range defs { + enum, err := r.resolveEnum(pkgName, def) + if err != nil { + return nil, err + } + ret = append(ret, enum) + } + return ret, nil +} + +func (r *Resolver) resolveEnum(pkgName string, def *descriptorpb.EnumDescriptorProto) (*Enum, error) { + enumName := def.GetName() + fqdn := fmt.Sprintf("%s.%s", pkgName, enumName) + enum, exists := r.enumMap[fqdn] + if !exists { + return nil, fmt.Errorf("failed to find enum from %s", fqdn) + } + ruleDef, err := getExtensionRule[*nori.EnumRule](def.GetOptions(), nori.E_Enum) + if err != nil { + return nil, err + } + r.enumRuleMap[enum] = ruleDef + values, err := r.resolveEnumValues(pkgName, enumName, def.GetValue()) + if err != nil { + return nil, err + } + enum.Values = values + return enum, nil +} + +func (r *Resolver) resolveEnumRule(enum *Enum, def *nori.EnumRule) error { + alias := enum.Name + if v := def.GetAlias(); v != "" { + alias = v + } + enum.Rule = &EnumRule{ + Alias: alias, + } + return nil +} + +func (r *Resolver) resolveEnumValues(pkgName, enumName string, defs []*descriptorpb.EnumValueDescriptorProto) ([]*EnumValue, error) { + ret := make([]*EnumValue, 0, len(defs)) + for _, def := range defs { + value, err := r.resolveEnumValue(pkgName, enumName, def) + if err != nil { + return nil, err + } + ret = append(ret, value) + } + return ret, nil +} + +func (r *Resolver) resolveEnumValue(pkgName, enumName string, def *descriptorpb.EnumValueDescriptorProto) (*EnumValue, error) { + valueName := def.GetName() + fqdn := fmt.Sprintf("%s.%s.%s", pkgName, enumName, valueName) + value, exists := r.enumValueMap[fqdn] + if !exists { + return nil, fmt.Errorf("failed to find enum value from %s", fqdn) + } + ruleDef, err := getExtensionRule[*nori.EnumValueRule](def.GetOptions(), nori.E_EnumValue) + if err != nil { + return nil, err + } + r.enumValueRuleMap[value] = ruleDef + return value, nil +} + +func (r *Resolver) resolveEnumValueRule(enumValue *EnumValue, def *nori.EnumValueRule) error { + alias := enumValue.Name + if v := def.GetAlias(); v != "" { + alias = v + } + enumValue.Rule = &EnumValueRule{ + Alias: alias, + } + return nil +} + +func getExtensionRule[T proto.Message](opts proto.Message, extType protoreflect.ExtensionType) (T, error) { + var ret T + + typ := reflect.TypeOf(ret) + if typ.Kind() != reflect.Ptr { + return ret, fmt.Errorf("proto.Message value must be pointer type") + } + v := reflect.New(typ.Elem()).Interface().(proto.Message) + + if opts == nil { + return ret, nil + } + if !proto.HasExtension(opts, extType) { + return ret, nil + } + + extFullName := extType.TypeDescriptor().Descriptor().FullName() + + if setRuleFromDynamicMessage(opts, extFullName, v) { + return v.(T), nil + } + + ext := proto.GetExtension(opts, extType) + if ext == nil { + return ret, fmt.Errorf("%s extension does not exist", extFullName) + } + rule, ok := ext.(T) + if !ok { + return ret, fmt.Errorf("%s extension cannot not be converted from %T", extFullName, ext) + } + return rule, nil +} + +// setRuleFromDynamicMessage if each options are represented dynamicpb.Message type, convert and set it to rule instance. +// NOTE: compile proto files by compiler package, extension is replaced by dynamicpb.Message. +func setRuleFromDynamicMessage(opts proto.Message, extFullName protoreflect.FullName, rule proto.Message) bool { + isSet := false + opts.ProtoReflect().Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if !fd.IsExtension() { + return true + } + if fd.FullName() != extFullName { + return true + } + ext := proto.GetExtension(opts, dynamicpb.NewExtensionType(fd)) + if ext == nil { + return true + } + msg, ok := ext.(*dynamicpb.Message) + if !ok { + return true + } + bytes, err := proto.Marshal(msg) + if err != nil { + return true + } + if err := proto.Unmarshal(bytes, rule); err != nil { + return true + } + + isSet = true + + return true + }) + return isSet +} diff --git a/internal/tools/nori/go.mod b/internal/tools/nori/go.mod new file mode 100644 index 0000000..11cbaf5 --- /dev/null +++ b/internal/tools/nori/go.mod @@ -0,0 +1,11 @@ +module github.com/goccy/nori + +go 1.21.9 + +require ( + github.com/bufbuild/protocompile v0.14.0 + golang.org/x/text v0.16.0 + google.golang.org/protobuf v1.34.2 +) + +require golang.org/x/sync v0.7.0 // indirect diff --git a/internal/tools/nori/go.sum b/internal/tools/nori/go.sum new file mode 100644 index 0000000..76050a6 --- /dev/null +++ b/internal/tools/nori/go.sum @@ -0,0 +1,18 @@ +github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= +github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/tools/nori/nori/nori.pb.go b/internal/tools/nori/nori/nori.pb.go new file mode 100644 index 0000000..74b4ee2 --- /dev/null +++ b/internal/tools/nori/nori/nori.pb.go @@ -0,0 +1,1437 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: nori/nori.proto + +package nori + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type TypeKind int32 + +const ( + TypeKind_UNKNOWN TypeKind = 0 // unknown type. + TypeKind_STRUCT TypeKind = 1 // structure type. + TypeKind_INT TypeKind = 2 // int type. + TypeKind_UINT TypeKind = 3 // unsigned int type. + TypeKind_VOIDPTR TypeKind = 4 // void* type. + TypeKind_CHARPTR TypeKind = 5 // char* type. + TypeKind_STRING TypeKind = 6 // std::string type. + TypeKind_BOOL TypeKind = 7 // bool type. + TypeKind_UINT64 TypeKind = 8 // uint64 type. + TypeKind_INT64 TypeKind = 9 // int64 type. + TypeKind_ENUM TypeKind = 10 // enum type. + TypeKind_FUNCPTR TypeKind = 11 // function pointer type. + TypeKind_DOUBLE TypeKind = 12 // double type. + TypeKind_INT32 TypeKind = 13 + TypeKind_UINT32 TypeKind = 14 + TypeKind_FLOAT TypeKind = 15 + TypeKind_CHAR TypeKind = 16 +) + +// Enum value maps for TypeKind. +var ( + TypeKind_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STRUCT", + 2: "INT", + 3: "UINT", + 4: "VOIDPTR", + 5: "CHARPTR", + 6: "STRING", + 7: "BOOL", + 8: "UINT64", + 9: "INT64", + 10: "ENUM", + 11: "FUNCPTR", + 12: "DOUBLE", + 13: "INT32", + 14: "UINT32", + 15: "FLOAT", + 16: "CHAR", + } + TypeKind_value = map[string]int32{ + "UNKNOWN": 0, + "STRUCT": 1, + "INT": 2, + "UINT": 3, + "VOIDPTR": 4, + "CHARPTR": 5, + "STRING": 6, + "BOOL": 7, + "UINT64": 8, + "INT64": 9, + "ENUM": 10, + "FUNCPTR": 11, + "DOUBLE": 12, + "INT32": 13, + "UINT32": 14, + "FLOAT": 15, + "CHAR": 16, + } +) + +func (x TypeKind) Enum() *TypeKind { + p := new(TypeKind) + *p = x + return p +} + +func (x TypeKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TypeKind) Descriptor() protoreflect.EnumDescriptor { + return file_nori_nori_proto_enumTypes[0].Descriptor() +} + +func (TypeKind) Type() protoreflect.EnumType { + return &file_nori_nori_proto_enumTypes[0] +} + +func (x TypeKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TypeKind.Descriptor instead. +func (TypeKind) EnumDescriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{0} +} + +type FileRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Export []*Export `protobuf:"bytes,1,rep,name=export,proto3" json:"export,omitempty"` +} + +func (x *FileRule) Reset() { + *x = FileRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileRule) ProtoMessage() {} + +func (x *FileRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileRule.ProtoReflect.Descriptor instead. +func (*FileRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{0} +} + +func (x *FileRule) GetExport() []*Export { + if x != nil { + return x.Export + } + return nil +} + +type Export struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Header []string `protobuf:"bytes,1,rep,name=header,proto3" json:"header,omitempty"` + Func []*FunctionDef `protobuf:"bytes,2,rep,name=func,proto3" json:"func,omitempty"` + Method []*MethodDef `protobuf:"bytes,3,rep,name=method,proto3" json:"method,omitempty"` +} + +func (x *Export) Reset() { + *x = Export{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Export) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Export) ProtoMessage() {} + +func (x *Export) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Export.ProtoReflect.Descriptor instead. +func (*Export) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{1} +} + +func (x *Export) GetHeader() []string { + if x != nil { + return x.Header + } + return nil +} + +func (x *Export) GetFunc() []*FunctionDef { + if x != nil { + return x.Func + } + return nil +} + +func (x *Export) GetMethod() []*MethodDef { + if x != nil { + return x.Method + } + return nil +} + +type FunctionDef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Alias string `protobuf:"bytes,2,opt,name=alias,proto3" json:"alias,omitempty"` + Args []*Type `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` + Return *Type `protobuf:"bytes,4,opt,name=return,proto3" json:"return,omitempty"` +} + +func (x *FunctionDef) Reset() { + *x = FunctionDef{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FunctionDef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FunctionDef) ProtoMessage() {} + +func (x *FunctionDef) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FunctionDef.ProtoReflect.Descriptor instead. +func (*FunctionDef) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{2} +} + +func (x *FunctionDef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FunctionDef) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +func (x *FunctionDef) GetArgs() []*Type { + if x != nil { + return x.Args + } + return nil +} + +func (x *FunctionDef) GetReturn() *Type { + if x != nil { + return x.Return + } + return nil +} + +type MethodDef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Recv string `protobuf:"bytes,1,opt,name=recv,proto3" json:"recv,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Alias string `protobuf:"bytes,3,opt,name=alias,proto3" json:"alias,omitempty"` + Args []*Type `protobuf:"bytes,4,rep,name=args,proto3" json:"args,omitempty"` + Return *Type `protobuf:"bytes,5,opt,name=return,proto3" json:"return,omitempty"` +} + +func (x *MethodDef) Reset() { + *x = MethodDef{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MethodDef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MethodDef) ProtoMessage() {} + +func (x *MethodDef) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MethodDef.ProtoReflect.Descriptor instead. +func (*MethodDef) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{3} +} + +func (x *MethodDef) GetRecv() string { + if x != nil { + return x.Recv + } + return "" +} + +func (x *MethodDef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MethodDef) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +func (x *MethodDef) GetArgs() []*Type { + if x != nil { + return x.Args + } + return nil +} + +func (x *MethodDef) GetReturn() *Type { + if x != nil { + return x.Return + } + return nil +} + +type Type struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind TypeKind `protobuf:"varint,1,opt,name=kind,proto3,enum=nori.TypeKind" json:"kind,omitempty"` // type kind. + Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` // reference name for type. + Pointer uint64 `protobuf:"varint,3,opt,name=pointer,proto3" json:"pointer,omitempty"` // pointer number. + Const bool `protobuf:"varint,4,opt,name=const,proto3" json:"const,omitempty"` // const value. + Addr bool `protobuf:"varint,5,opt,name=addr,proto3" json:"addr,omitempty"` // & operatored value. + Array bool `protobuf:"varint,6,opt,name=array,proto3" json:"array,omitempty"` // array type value. + ArrayNum *uint64 `protobuf:"varint,7,opt,name=array_num,json=arrayNum,proto3,oneof" json:"array_num,omitempty"` // array size. + ArrayNumArg *uint64 `protobuf:"varint,8,opt,name=array_num_arg,json=arrayNumArg,proto3,oneof" json:"array_num_arg,omitempty"` // the argument number to decide array num. + StringLengthArg *uint64 `protobuf:"varint,9,opt,name=string_length_arg,json=stringLengthArg,proto3,oneof" json:"string_length_arg,omitempty"` // the argument number to decide string length. + // It is used as an argument for funcptr. + // To uniquely determine a function between Go and C, some of the arguments need to be flagged. + // It is used to specify those arguments. + // When using funcptr, you must specify funcbaseptr for one of the arguments. + Funcbaseptr bool `protobuf:"varint,10,opt,name=funcbaseptr,proto3" json:"funcbaseptr,omitempty"` +} + +func (x *Type) Reset() { + *x = Type{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Type) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Type) ProtoMessage() {} + +func (x *Type) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Type.ProtoReflect.Descriptor instead. +func (*Type) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{4} +} + +func (x *Type) GetKind() TypeKind { + if x != nil { + return x.Kind + } + return TypeKind_UNKNOWN +} + +func (x *Type) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + +func (x *Type) GetPointer() uint64 { + if x != nil { + return x.Pointer + } + return 0 +} + +func (x *Type) GetConst() bool { + if x != nil { + return x.Const + } + return false +} + +func (x *Type) GetAddr() bool { + if x != nil { + return x.Addr + } + return false +} + +func (x *Type) GetArray() bool { + if x != nil { + return x.Array + } + return false +} + +func (x *Type) GetArrayNum() uint64 { + if x != nil && x.ArrayNum != nil { + return *x.ArrayNum + } + return 0 +} + +func (x *Type) GetArrayNumArg() uint64 { + if x != nil && x.ArrayNumArg != nil { + return *x.ArrayNumArg + } + return 0 +} + +func (x *Type) GetStringLengthArg() uint64 { + if x != nil && x.StringLengthArg != nil { + return *x.StringLengthArg + } + return 0 +} + +func (x *Type) GetFuncbaseptr() bool { + if x != nil { + return x.Funcbaseptr + } + return false +} + +type EnumRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` +} + +func (x *EnumRule) Reset() { + *x = EnumRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnumRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumRule) ProtoMessage() {} + +func (x *EnumRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumRule.ProtoReflect.Descriptor instead. +func (*EnumRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{5} +} + +func (x *EnumRule) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +type EnumValueRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` +} + +func (x *EnumValueRule) Reset() { + *x = EnumValueRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnumValueRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumValueRule) ProtoMessage() {} + +func (x *EnumValueRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumValueRule.ProtoReflect.Descriptor instead. +func (*EnumValueRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{6} +} + +func (x *EnumValueRule) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +type OneofRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *OneofRule) Reset() { + *x = OneofRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OneofRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OneofRule) ProtoMessage() {} + +func (x *OneofRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OneofRule.ProtoReflect.Descriptor instead. +func (*OneofRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{7} +} + +type ServiceRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ServiceRule) Reset() { + *x = ServiceRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceRule) ProtoMessage() {} + +func (x *ServiceRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceRule.ProtoReflect.Descriptor instead. +func (*ServiceRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{8} +} + +type MethodRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MethodRule) Reset() { + *x = MethodRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MethodRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MethodRule) ProtoMessage() {} + +func (x *MethodRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MethodRule.ProtoReflect.Descriptor instead. +func (*MethodRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{9} +} + +type MessageRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` + Funcptr *FunctionDef `protobuf:"bytes,2,opt,name=funcptr,proto3" json:"funcptr,omitempty"` + Anonymous bool `protobuf:"varint,3,opt,name=anonymous,proto3" json:"anonymous,omitempty"` + Parent string `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"` + Constructor *bool `protobuf:"varint,5,opt,name=constructor,proto3,oneof" json:"constructor,omitempty"` +} + +func (x *MessageRule) Reset() { + *x = MessageRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageRule) ProtoMessage() {} + +func (x *MessageRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageRule.ProtoReflect.Descriptor instead. +func (*MessageRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{10} +} + +func (x *MessageRule) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +func (x *MessageRule) GetFuncptr() *FunctionDef { + if x != nil { + return x.Funcptr + } + return nil +} + +func (x *MessageRule) GetAnonymous() bool { + if x != nil { + return x.Anonymous + } + return false +} + +func (x *MessageRule) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *MessageRule) GetConstructor() bool { + if x != nil && x.Constructor != nil { + return *x.Constructor + } + return false +} + +type FieldRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` + Type *Type `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *FieldRule) Reset() { + *x = FieldRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FieldRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldRule) ProtoMessage() {} + +func (x *FieldRule) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FieldRule.ProtoReflect.Descriptor instead. +func (*FieldRule) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{11} +} + +func (x *FieldRule) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +func (x *FieldRule) GetType() *Type { + if x != nil { + return x.Type + } + return nil +} + +type Any struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Any) Reset() { + *x = Any{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Any) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Any) ProtoMessage() {} + +func (x *Any) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Any.ProtoReflect.Descriptor instead. +func (*Any) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{12} +} + +type List struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *List) Reset() { + *x = List{} + if protoimpl.UnsafeEnabled { + mi := &file_nori_nori_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *List) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*List) ProtoMessage() {} + +func (x *List) ProtoReflect() protoreflect.Message { + mi := &file_nori_nori_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use List.ProtoReflect.Descriptor instead. +func (*List) Descriptor() ([]byte, []int) { + return file_nori_nori_proto_rawDescGZIP(), []int{13} +} + +var file_nori_nori_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FileOptions)(nil), + ExtensionType: (*FileRule)(nil), + Field: 5000, + Name: "nori.file", + Tag: "bytes,5000,opt,name=file", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.ServiceOptions)(nil), + ExtensionType: (*ServiceRule)(nil), + Field: 5000, + Name: "nori.service", + Tag: "bytes,5000,opt,name=service", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.MethodOptions)(nil), + ExtensionType: (*MethodRule)(nil), + Field: 5000, + Name: "nori.method", + Tag: "bytes,5000,opt,name=method", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*MessageRule)(nil), + Field: 5000, + Name: "nori.message", + Tag: "bytes,5000,opt,name=message", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*FieldRule)(nil), + Field: 5000, + Name: "nori.field", + Tag: "bytes,5000,opt,name=field", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.EnumOptions)(nil), + ExtensionType: (*EnumRule)(nil), + Field: 5000, + Name: "nori.enum", + Tag: "bytes,5000,opt,name=enum", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*EnumValueRule)(nil), + Field: 5000, + Name: "nori.enum_value", + Tag: "bytes,5000,opt,name=enum_value", + Filename: "nori/nori.proto", + }, + { + ExtendedType: (*descriptorpb.OneofOptions)(nil), + ExtensionType: (*OneofRule)(nil), + Field: 5000, + Name: "nori.oneof", + Tag: "bytes,5000,opt,name=oneof", + Filename: "nori/nori.proto", + }, +} + +// Extension fields to descriptorpb.FileOptions. +var ( + // optional nori.FileRule file = 5000; + E_File = &file_nori_nori_proto_extTypes[0] +) + +// Extension fields to descriptorpb.ServiceOptions. +var ( + // optional nori.ServiceRule service = 5000; + E_Service = &file_nori_nori_proto_extTypes[1] +) + +// Extension fields to descriptorpb.MethodOptions. +var ( + // optional nori.MethodRule method = 5000; + E_Method = &file_nori_nori_proto_extTypes[2] +) + +// Extension fields to descriptorpb.MessageOptions. +var ( + // optional nori.MessageRule message = 5000; + E_Message = &file_nori_nori_proto_extTypes[3] +) + +// Extension fields to descriptorpb.FieldOptions. +var ( + // optional nori.FieldRule field = 5000; + E_Field = &file_nori_nori_proto_extTypes[4] +) + +// Extension fields to descriptorpb.EnumOptions. +var ( + // optional nori.EnumRule enum = 5000; + E_Enum = &file_nori_nori_proto_extTypes[5] +) + +// Extension fields to descriptorpb.EnumValueOptions. +var ( + // optional nori.EnumValueRule enum_value = 5000; + E_EnumValue = &file_nori_nori_proto_extTypes[6] +) + +// Extension fields to descriptorpb.OneofOptions. +var ( + // optional nori.OneofRule oneof = 5000; + E_Oneof = &file_nori_nori_proto_extTypes[7] +) + +var File_nori_nori_proto protoreflect.FileDescriptor + +var file_nori_nori_proto_rawDesc = []byte{ + 0x0a, 0x0f, 0x6e, 0x6f, 0x72, 0x69, 0x2f, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x04, 0x6e, 0x6f, 0x72, 0x69, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x30, 0x0a, 0x08, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x70, 0x0a, 0x06, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, + 0x04, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, + 0x72, 0x69, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x52, 0x04, + 0x66, 0x75, 0x6e, 0x63, 0x12, 0x27, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x44, 0x65, 0x66, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x7b, 0x0a, + 0x0b, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x06, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x22, 0x8d, 0x01, 0x0a, 0x09, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x63, 0x76, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x63, 0x76, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x06, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x22, 0xea, 0x02, 0x0a, 0x04, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0e, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x6e, 0x75, 0x6d, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x08, 0x61, 0x72, 0x72, 0x61, 0x79, 0x4e, + 0x75, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x6e, + 0x75, 0x6d, 0x5f, 0x61, 0x72, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, 0x0b, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x4e, 0x75, 0x6d, 0x41, 0x72, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2f, + 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, + 0x61, 0x72, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, 0x0f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x41, 0x72, 0x67, 0x88, 0x01, 0x01, 0x12, + 0x20, 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x63, 0x62, 0x61, 0x73, 0x65, 0x70, 0x74, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x63, 0x62, 0x61, 0x73, 0x65, 0x70, 0x74, + 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x6e, 0x75, 0x6d, 0x42, + 0x10, 0x0a, 0x0e, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x72, + 0x67, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x22, 0x20, 0x0a, 0x08, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x25, 0x0a, 0x0d, 0x45, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, + 0x22, 0x0b, 0x0a, 0x09, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x0d, 0x0a, + 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x0c, 0x0a, 0x0a, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x0b, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, + 0x12, 0x2b, 0x0a, 0x07, 0x66, 0x75, 0x6e, 0x63, 0x70, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x66, 0x52, 0x07, 0x66, 0x75, 0x6e, 0x63, 0x70, 0x74, 0x72, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x09, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1e, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, + 0x72, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x05, 0x0a, + 0x03, 0x41, 0x6e, 0x79, 0x22, 0x06, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0xcc, 0x01, 0x0a, + 0x08, 0x54, 0x79, 0x70, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, + 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x55, + 0x49, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x49, 0x44, 0x50, 0x54, 0x52, + 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x48, 0x41, 0x52, 0x50, 0x54, 0x52, 0x10, 0x05, 0x12, + 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x42, + 0x4f, 0x4f, 0x4c, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, + 0x08, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, + 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x55, 0x4e, 0x43, 0x50, 0x54, + 0x52, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x0c, 0x12, + 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x49, + 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, + 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x10, 0x3a, 0x41, 0x0a, 0x04, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x4d, + 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x49, 0x0a, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x75, 0x6c, 0x65, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3a, 0x4d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, + 0x72, 0x69, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x45, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x41, + 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6e, 0x6f, + 0x72, 0x69, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x3a, 0x56, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6e, 0x6f, 0x72, 0x69, + 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, + 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x45, 0x0a, 0x05, 0x6f, 0x6e, 0x65, + 0x6f, 0x66, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x88, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6e, 0x6f, 0x72, 0x69, 0x2e, + 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, + 0x42, 0x21, 0x5a, 0x1f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x6f, 0x63, 0x63, 0x79, 0x2f, 0x6e, 0x6f, 0x72, 0x69, 0x2f, 0x6e, 0x6f, 0x72, 0x69, 0x3b, 0x6e, + 0x6f, 0x72, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_nori_nori_proto_rawDescOnce sync.Once + file_nori_nori_proto_rawDescData = file_nori_nori_proto_rawDesc +) + +func file_nori_nori_proto_rawDescGZIP() []byte { + file_nori_nori_proto_rawDescOnce.Do(func() { + file_nori_nori_proto_rawDescData = protoimpl.X.CompressGZIP(file_nori_nori_proto_rawDescData) + }) + return file_nori_nori_proto_rawDescData +} + +var file_nori_nori_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_nori_nori_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_nori_nori_proto_goTypes = []interface{}{ + (TypeKind)(0), // 0: nori.TypeKind + (*FileRule)(nil), // 1: nori.FileRule + (*Export)(nil), // 2: nori.Export + (*FunctionDef)(nil), // 3: nori.FunctionDef + (*MethodDef)(nil), // 4: nori.MethodDef + (*Type)(nil), // 5: nori.Type + (*EnumRule)(nil), // 6: nori.EnumRule + (*EnumValueRule)(nil), // 7: nori.EnumValueRule + (*OneofRule)(nil), // 8: nori.OneofRule + (*ServiceRule)(nil), // 9: nori.ServiceRule + (*MethodRule)(nil), // 10: nori.MethodRule + (*MessageRule)(nil), // 11: nori.MessageRule + (*FieldRule)(nil), // 12: nori.FieldRule + (*Any)(nil), // 13: nori.Any + (*List)(nil), // 14: nori.List + (*descriptorpb.FileOptions)(nil), // 15: google.protobuf.FileOptions + (*descriptorpb.ServiceOptions)(nil), // 16: google.protobuf.ServiceOptions + (*descriptorpb.MethodOptions)(nil), // 17: google.protobuf.MethodOptions + (*descriptorpb.MessageOptions)(nil), // 18: google.protobuf.MessageOptions + (*descriptorpb.FieldOptions)(nil), // 19: google.protobuf.FieldOptions + (*descriptorpb.EnumOptions)(nil), // 20: google.protobuf.EnumOptions + (*descriptorpb.EnumValueOptions)(nil), // 21: google.protobuf.EnumValueOptions + (*descriptorpb.OneofOptions)(nil), // 22: google.protobuf.OneofOptions +} +var file_nori_nori_proto_depIdxs = []int32{ + 2, // 0: nori.FileRule.export:type_name -> nori.Export + 3, // 1: nori.Export.func:type_name -> nori.FunctionDef + 4, // 2: nori.Export.method:type_name -> nori.MethodDef + 5, // 3: nori.FunctionDef.args:type_name -> nori.Type + 5, // 4: nori.FunctionDef.return:type_name -> nori.Type + 5, // 5: nori.MethodDef.args:type_name -> nori.Type + 5, // 6: nori.MethodDef.return:type_name -> nori.Type + 0, // 7: nori.Type.kind:type_name -> nori.TypeKind + 3, // 8: nori.MessageRule.funcptr:type_name -> nori.FunctionDef + 5, // 9: nori.FieldRule.type:type_name -> nori.Type + 15, // 10: nori.file:extendee -> google.protobuf.FileOptions + 16, // 11: nori.service:extendee -> google.protobuf.ServiceOptions + 17, // 12: nori.method:extendee -> google.protobuf.MethodOptions + 18, // 13: nori.message:extendee -> google.protobuf.MessageOptions + 19, // 14: nori.field:extendee -> google.protobuf.FieldOptions + 20, // 15: nori.enum:extendee -> google.protobuf.EnumOptions + 21, // 16: nori.enum_value:extendee -> google.protobuf.EnumValueOptions + 22, // 17: nori.oneof:extendee -> google.protobuf.OneofOptions + 1, // 18: nori.file:type_name -> nori.FileRule + 9, // 19: nori.service:type_name -> nori.ServiceRule + 10, // 20: nori.method:type_name -> nori.MethodRule + 11, // 21: nori.message:type_name -> nori.MessageRule + 12, // 22: nori.field:type_name -> nori.FieldRule + 6, // 23: nori.enum:type_name -> nori.EnumRule + 7, // 24: nori.enum_value:type_name -> nori.EnumValueRule + 8, // 25: nori.oneof:type_name -> nori.OneofRule + 26, // [26:26] is the sub-list for method output_type + 26, // [26:26] is the sub-list for method input_type + 18, // [18:26] is the sub-list for extension type_name + 10, // [10:18] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_nori_nori_proto_init() } +func file_nori_nori_proto_init() { + if File_nori_nori_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_nori_nori_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Export); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FunctionDef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MethodDef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Type); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnumRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnumValueRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OneofRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MethodRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FieldRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Any); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nori_nori_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*List); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_nori_nori_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_nori_nori_proto_msgTypes[10].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_nori_nori_proto_rawDesc, + NumEnums: 1, + NumMessages: 14, + NumExtensions: 8, + NumServices: 0, + }, + GoTypes: file_nori_nori_proto_goTypes, + DependencyIndexes: file_nori_nori_proto_depIdxs, + EnumInfos: file_nori_nori_proto_enumTypes, + MessageInfos: file_nori_nori_proto_msgTypes, + ExtensionInfos: file_nori_nori_proto_extTypes, + }.Build() + File_nori_nori_proto = out.File + file_nori_nori_proto_rawDesc = nil + file_nori_nori_proto_goTypes = nil + file_nori_nori_proto_depIdxs = nil +} diff --git a/internal/tools/nori/nori_test.go b/internal/tools/nori/nori_test.go new file mode 100644 index 0000000..d707103 --- /dev/null +++ b/internal/tools/nori/nori_test.go @@ -0,0 +1,25 @@ +package nori_test + +import ( + "context" + "path/filepath" + "testing" + + "google.golang.org/protobuf/types/pluginpb" + + "github.com/goccy/nori" +) + +func TestNori(t *testing.T) { + bindProto := filepath.Join("internal", "wasm", "bind.proto") + ctx := context.Background() + files, err := nori.ProtoCompile(ctx, bindProto, filepath.Join(".."), filepath.Join("proto")) + if err != nil { + t.Fatal(err) + } + if _, err := nori.Generate(ctx, &pluginpb.CodeGeneratorRequest{ + ProtoFile: files, + }); err != nil { + t.Fatal(err) + } +} diff --git a/internal/tools/nori/proto/nori/nori.proto b/internal/tools/nori/proto/nori/nori.proto new file mode 100644 index 0000000..9f6a4d6 --- /dev/null +++ b/internal/tools/nori/proto/nori/nori.proto @@ -0,0 +1,135 @@ +syntax = "proto3"; + +package nori; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/goccy/nori/nori;nori"; + +extend google.protobuf.FileOptions { + FileRule file = 5000; +} + +extend google.protobuf.ServiceOptions { + ServiceRule service = 5000; +} + +extend google.protobuf.MethodOptions { + MethodRule method = 5000; +} + +extend google.protobuf.MessageOptions { + MessageRule message = 5000; +} + +extend google.protobuf.FieldOptions { + FieldRule field = 5000; +} + +extend google.protobuf.EnumOptions { + EnumRule enum = 5000; +} + +extend google.protobuf.EnumValueOptions { + EnumValueRule enum_value = 5000; +} + +extend google.protobuf.OneofOptions { + OneofRule oneof = 5000; +} + +message FileRule { + repeated Export export = 1; +} + +message Export { + repeated string header = 1; + repeated FunctionDef func = 2; + repeated MethodDef method = 3; +} + +message FunctionDef { + string name = 1; + string alias = 2; + repeated Type args = 3; + Type return = 4; +} + +message MethodDef { + string recv = 1; + string name = 2; + string alias = 3; + repeated Type args = 4; + Type return = 5; +} + +enum TypeKind { + UNKNOWN = 0; // unknown type. + STRUCT = 1; // structure type. + INT = 2; // int type. + UINT = 3; // unsigned int type. + VOIDPTR = 4; // void* type. + CHARPTR = 5; // char* type. + STRING = 6; // std::string type. + BOOL = 7; // bool type. + UINT64 = 8; // uint64 type. + INT64 = 9; // int64 type. + ENUM = 10; // enum type. + FUNCPTR = 11; // function pointer type. + DOUBLE = 12; // double type. + INT32 = 13; + UINT32 = 14; + FLOAT = 15; + CHAR = 16; +} + +message Type { + TypeKind kind = 1; // type kind. + string ref = 2; // reference name for type. + uint64 pointer = 3; // pointer number. + bool const = 4; // const value. + bool addr = 5; // & operatored value. + bool array = 6; // array type value. + optional uint64 array_num = 7; // array size. + optional uint64 array_num_arg = 8; // the argument number to decide array num. + optional uint64 string_length_arg = 9; // the argument number to decide string length. + + // It is used as an argument for funcptr. + // To uniquely determine a function between Go and C, some of the arguments need to be flagged. + // It is used to specify those arguments. + // When using funcptr, you must specify funcbaseptr for one of the arguments. + bool funcbaseptr = 10; +} + +message EnumRule { + string alias = 1; +} + +message EnumValueRule { + string alias = 1; +} + +message OneofRule {} + +message ServiceRule { +} + +message MethodRule { +} + +message MessageRule { + string alias = 1; + FunctionDef funcptr = 2; + bool anonymous = 3; + string parent = 4; + optional bool constructor = 5; +} + +message FieldRule { + string alias = 1; + Type type = 2; +} + +message Any {} + +message List {} \ No newline at end of file diff --git a/internal/tools/nori/protocompiler.go b/internal/tools/nori/protocompiler.go new file mode 100644 index 0000000..c88d4f5 --- /dev/null +++ b/internal/tools/nori/protocompiler.go @@ -0,0 +1,77 @@ +package nori + +import ( + "context" + "io" + "os" + + "github.com/bufbuild/protocompile" + "github.com/bufbuild/protocompile/linker" + "github.com/bufbuild/protocompile/protoutil" + "github.com/bufbuild/protocompile/reporter" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/descriptorpb" + + _ "embed" +) + +type errorReporter struct { + errs []reporter.ErrorWithPos +} + +func (r *errorReporter) Error(err reporter.ErrorWithPos) error { + r.errs = append(r.errs, err) + return nil +} + +func (r *errorReporter) Warning(_ reporter.ErrorWithPos) { +} + +func ProtoCompile(ctx context.Context, file string, importPaths ...string) ([]*descriptorpb.FileDescriptorProto, error) { + var r errorReporter + + compiler := protocompile.Compiler{ + Resolver: protocompile.WithStandardImports(&protocompile.SourceResolver{ + ImportPaths: importPaths, + Accessor: func(p string) (io.ReadCloser, error) { + return os.Open(p) + }, + }), + SourceInfoMode: protocompile.SourceInfoStandard, + Reporter: &r, + } + files := []string{file} + linkedFiles, err := compiler.Compile(ctx, files...) + if err != nil { + return nil, err + } + protoFiles := getProtoFiles(linkedFiles) + return protoFiles, nil +} + +func getProtoFiles(linkedFiles []linker.File) []*descriptorpb.FileDescriptorProto { + var ( + protos []*descriptorpb.FileDescriptorProto + protoUniqueMap = make(map[string]struct{}) + ) + for _, linkedFile := range linkedFiles { + for _, proto := range getFileDescriptors(linkedFile) { + if _, exists := protoUniqueMap[proto.GetName()]; exists { + continue + } + protos = append(protos, proto) + protoUniqueMap[proto.GetName()] = struct{}{} + } + } + return protos +} + +func getFileDescriptors(file protoreflect.FileDescriptor) []*descriptorpb.FileDescriptorProto { + var protoFiles []*descriptorpb.FileDescriptorProto + fileImports := file.Imports() + for i := 0; i < fileImports.Len(); i++ { + protoFiles = append(protoFiles, getFileDescriptors(fileImports.Get(i))...) + } + protoFiles = append(protoFiles, protoutil.ProtoFromFileDescriptor(file)) + return protoFiles +} diff --git a/internal/tools/nori/templates/bind.c.tmpl b/internal/tools/nori/templates/bind.c.tmpl new file mode 100644 index 0000000..a9aca16 --- /dev/null +++ b/internal/tools/nori/templates/bind.c.tmpl @@ -0,0 +1,216 @@ +// Code generated by protoc-gen-nori. DO NOT EDIT! + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +// this is imported by host function in Go. +void *wasm_bridge_get_go_funcptr(void *funcbaseptr); + +{{ range .Headers }} +#include "{{ . }}" +{{- end }} + +typedef struct { char *p; int n; } GoString; +typedef struct { int len; void *data; } GoSlice; +typedef struct { void *t; void *v; } GoInterface; + +static GoString *newStringWithLength(char *src, int length) { + GoString *ret = (GoString *)malloc(sizeof(GoString)); + ret->p = src; + ret->n = length; + return ret; +} + +static GoString *newString(char *src) { + return newStringWithLength(src, strlen(src)); +} + +static GoString *newFloatString(double src) { + char *s = (char *)malloc(32); + memset(s, 0, 32); + snprintf(s, 32, "%lf", src); + return newStringWithLength(s, strlen(s)); +} + +static void to_string_ptr(void *arg) { + char **strptr = (char **)arg; + *(void **)arg = newString(*strptr); +} + +static void to_string_ptr_with_length(void *arg, int length) { + char **strptr = (char **)arg; + *(void **)arg = newStringWithLength(*strptr, length); +} + +{{- range .ExportCallbackFunctions }} +{{- $name := .Name }} +{{ .Return }} wasm_bridge_{{ $name }}({{- range .Args -}}{{ .Value.GoType }} arg{{- .Index -}}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}); + +{{ .Return }} {{ $name }}({{- range .Args -}}{{- .Value.CType }} _arg{{- .Index -}}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) { + {{- range .Args }} + {{- template "toGoValue" .Value }} + {{- end }} + return wasm_bridge_{{ $name }}( + {{- range .Args }} + arg{{- .Index }}{{- if not .IsLastArg -}},{{- end -}} + {{- end }} + ); +} +{{ end }} + +{{- range .ExportEnums }} +{{ range .Values }} +int wasm_bridge_get_{{ .Name }}() { + return {{ .Name }}; +} +{{ end }} +{{- end }} + +{{ range .ExportMessages }} +{{- if .HasConstructor }} +void *wasm_bridge_new_{{ .Name }}() { + void *ret = malloc(sizeof({{ .Type }})); + memset(ret, 0, sizeof({{ .Type }})); + return ret; +} +{{ end }} +{{- range .Fields }} +{{- if .Value.IsFunction }} +void wasm_bridge_set_{{ .Name }}({{ .ReceiverType }} *recv) { + {{ .Value.Src }} = {{ .Value.FuncName }}; +} +{{- else }} +void wasm_bridge_get_{{ .Name }}({{ .ReceiverType }} *recv, {{ .Value.GoType }}* ret) { + {{- template "toGoValue" .Value }} + *ret = {{ .Value.Dst }}; +} + +void wasm_bridge_set_{{ .Name }}({{ .ReceiverType }} *recv, {{ .Value.WasmType }} v) { + {{- template "toCValue" (map "Value" .Value "Dst" .Value.Src "Src" "v" ) }} +} +{{- end }} +{{ end }} +{{- end }} + +{{ range .ExportFunctions }} +void wasm_bridge_{{ .Name }}({{- range .Args -}}{{- .Value.WasmType }} _arg{{- .Index -}}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) { + {{- range .FuncArgs }} + {{- if not .Value.IsFunction }} + {{ .Value.CType }} {{ .Dst }}; + {{- template "toCValue" (map "Value" .Value "Dst" .Dst "Src" .Src ) }} + {{- end }} + {{- end }} + + {{- if .Return }} + {{ .Return.Value.CType }} ret = {{ .Function }}( + {{- range .FuncArgs }} + {{- if .Value.IsFunction }} + {{ .Value.FuncName }}{{- if not .IsLastArg -}},{{ end -}} + {{- else }} + arg{{ .Index }}{{- if not .IsLastArg -}},{{ end -}} + {{- end }} + {{- end }} + ); + {{- $funcArgs := .FuncArgs }} + {{- range $funcArgs }} + {{- if .Value.IsPtrValue }} + {{- if .Value.IsStringKind }} + {{- if .Value.ArgStringLength }} + + {{- $index := .Value.ArgStringLength }} + {{- $arg := index $funcArgs $index }} + {{- if $arg.Value.IsPtrValue }} + to_string_ptr_with_length(_arg{{ .Index }}, *(int *)_arg{{ $index }}); + {{- else }} + to_string_ptr_with_length(_arg{{ .Index }}, _arg{{ $index }}); + {{- end }} + {{- else }} + to_string_ptr(_arg{{ .Index }}); + {{- end }} + + {{- end }} + {{- end }} + {{- end }} + {{- template "toGoValue" .Return.Value }} + *_arg{{ .Return.Index }} = {{ .Return.Value.Dst }}; + {{- else }} + {{ .Function }}( + {{- range .FuncArgs }} + {{- if .Value.IsFunction }} + {{ .Value.FuncName }}{{- if not .IsLastArg -}},{{- end -}} + {{- else }} + arg{{ .Index }}{{- if not .IsLastArg -}},{{ end -}} + {{- end }} + {{- end }} + ); + {{- end }} +} +{{ end }} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +{{- define "toCValue" -}} + {{- if .Value.IsSlice }} + {{- if not .Value.FixedArrayNum }} + {{ .Dst }} = ({{ .Value.CType }})malloc(sizeof({{ .Value.Elem.CType }}) * {{ .Src }}->len); + {{- end }} + for (int i = 0; i < {{ .Src }}->len; i++) { + void *elem = ((void **){{ .Src }}->data)[i * 2]; + {{- if .Value.IsPtrValue }} + {{ .Dst }}[i] = ({{ .Value.Elem.CType }})elem; + {{- else }} + memcpy(&{{ .Dst }}[i], elem, sizeof({{ .Value.Elem.CType }})); + {{- end }} + } + {{- else }} + {{ .Dst }} = {{ .Value.Converter }}{{ .Src }}; + {{- end }} +{{- end -}} + +{{- define "toGoValue" -}} + {{- if .IsSlice }} + {{- template "toSlice" . }} + {{- else if .IsString }} + GoString *{{ .Dst }} = newString({{ .Src }}); + {{- else if and .IsPtrValue .IsStringKind }} + to_string_ptr({{ .Src }}); + {{- else if .IsFloat }} + GoString *{{ .Dst }} = newFloatString({{ .Src }}); + {{- else if .IsStruct }} + void *{{ .Dst }} = malloc(sizeof({{ .Src }})); + memcpy({{ .Dst }}, &{{ .Src }}, sizeof({{ .Src }})); + {{- else }} + {{ .CType }} {{ .Dst }} = {{ .Converter }}{{ .Src }}; + {{- end }} +{{- end -}} + +{{- define "toSlice" -}} + GoSlice *{{ .Dst }} = (GoSlice *)malloc(sizeof(GoSlice)); + {{- if .FixedArrayNum }} + int {{ .Dst }}_length = {{ .FixedArrayNum }}; + {{- else if .ArrayNumArgIndex }} + int {{ .Dst }}_length = _arg{{ .ArrayNumArgIndex }}; + {{- else if or .IsStringKind .Type.Pointer }} + int {{ .Dst }}_length = 0; + for (int i = 0; {{ .Src }}[i] != NULL; i++) { + {{ .Dst }}_length++; + } + {{- else }} + int {{ .Dst }}_length = 0; + {{- end }} + {{ .Dst }}->len = {{ .Dst }}_length; + void **{{ .Dst }}_data = (void **)malloc(8 * {{ .Dst }}_length); + {{ .Dst }}->data = {{ .Dst }}_data; + for (int i = 0; i < {{ .Dst }}_length; i++) { + {{- template "toGoValue" .Elem }} + *{{ .Dst }}_data = (void *){{ .IntPtr }}v; + {{ .Dst }}_data += 2; // move data header address by 2 word (8 bytes). + } + +{{- end -}} diff --git a/internal/tools/nori/templates/bind.go.tmpl b/internal/tools/nori/templates/bind.go.tmpl new file mode 100644 index 0000000..651f011 --- /dev/null +++ b/internal/tools/nori/templates/bind.go.tmpl @@ -0,0 +1,1090 @@ +// Code generated by protoc-gen-nori. DO NOT EDIT! + +package wasm + +import ( + "context" + _ "embed" + "fmt" + "os" + "path/filepath" + "unsafe" + "reflect" + "strconv" + + "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/api" + "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" +) + +var _ unsafe.Pointer + +//go:embed {{ .WasmName }}.wasm +var wasmFile []byte + +type WasmModule struct { + mod api.Module + lookupFuncMap *LookupFuncMap + callbackFuncMap *CallbackFuncMap +} + +type LookupFuncMap struct { + {{- range .ExportCallbackFunctions }} + {{ .Name }} func({{- range .Args }}{{ .Value.GoType }},{{- end }}) (uint64, error) + {{- end }} +} + +type CallbackFuncMap struct { + {{- range .ExportCallbackFunctions }} + {{- if .Return }} + {{ .Name }} map[uint64]func(context.Context, {{- range .Args }}{{ .Value.GoType }},{{- end }}) ({{ .Return.Value.GoType }}, error) + {{- else }} + {{ .Name }} map[uint64]func(context.Context, {{- range .Args }}{{ .Value.GoType }},{{- end }}) error + {{- end }} + {{- end }} +} + +{{- range .ExportCallbackFunctions }} +func Register_{{ .Name }}(fn func({{- range .Args }}{{ .Value.GoType }},{{- end }}) (uint64, error)) { + mod.lookupFuncMap.{{ .Name }} = fn +} +{{- end }} + +var mod *WasmModule + +type CallbackFunc[T any] struct { + cb T + funcID uint64 +} + +func CreateCallbackFunc[T any](cb T, funcID uint64) *CallbackFunc[T] { + return &CallbackFunc[T]{ + cb: cb, + funcID: funcID, + } +} + +func init() { + ctx := context.Background() + cfg := wazero.NewRuntimeConfig() + if cache := getCompilationCache(); cache != nil { + cfg = cfg.WithCompilationCache(cache) + } + + r := wazero.NewRuntimeWithConfig(ctx, cfg) + + env := r.NewHostModuleBuilder("env") + {{- range .ExportCallbackFunctions }} + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + {{- range .Args }} + arg{{ .Index }}, err := func() ({{ .Value.GoType }}, error) { + var zero {{ .Value.GoType }} + _ = zero + {{- if .Value.IsPtrValue }} + ret := new({{ .Value.Elem.GoType }}) + {{- end }} + {{- template "ToGoValue" . }} + {{- if .Value.IsPtrValue }} + return ret, nil + {{- else }} + return {{ .Dst }}, nil + {{- end }} + }() + if err != nil { + panic(err) + } + {{- end }} + + funcID, err := mod.lookupFuncMap.{{ .Name }}({{- range .Args}}arg{{ .Index }},{{- end }}) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.{{ .Name }}[funcID]; exists { + {{- if .Return }} + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, {{- range .Args}}arg{{ .Index }},{{- end }}); err != nil { + panic(err) + } + {{- else }} + if err := fn(ctx, {{- range .Args}}arg{{ .Index }},{{- end }}); err != nil { + panic(err) + } + {{- end }} + } + }), + []api.ValueType{ {{- range .Args }}api.ValueTypeI{{- if .Value.Is64Bit -}}64{{- else -}}32{{- end -}},{{- end }} }, + {{- if .Return }} + []api.ValueType{api.ValueTypeI{{- if .Return.Value.Is64Bit -}}64{{- else -}}32{{- end -}} }, + {{- else }} + []api.ValueType{}, + {{- end }} + ).Export("wasm_bridge_{{ .Name }}") + {{- end }} + if _, err := env.Instantiate(ctx); err != nil { + panic(err) + } + wasi_snapshot_preview1.MustInstantiate(ctx, r) + + compiled, err := r.CompileModule(ctx, wasmFile) + if err != nil { + panic(err) + } + dir, err := os.MkdirTemp("", "graphviz") + if err != nil { + panic(err) + } + m, err := r.InstantiateModule( + ctx, + compiled, + wazero.NewModuleConfig(). + WithFSConfig(wazero.NewFSConfig().WithDirMount(dir, "/")). + WithStdout(os.Stdout). + WithName("wasi"), + ) + if err != nil { + panic(err) + } + mod = &WasmModule{ + mod: m, + lookupFuncMap: &LookupFuncMap{}, + callbackFuncMap: &CallbackFuncMap{ + {{- range .ExportCallbackFunctions }} + {{- if .Return }} + {{ .Name }}: make(map[uint64]func(context.Context, {{- range .Args }}{{ .Value.GoType }},{{- end }}) ({{ .Return.Value.GoType }}, error)), + {{- else }} + {{ .Name }}: make(map[uint64]func(context.Context, {{- range .Args }}{{ .Value.GoType }},{{- end }}) error), + {{- end }} + {{- end }} + }, + } + {{- range .ExportEnums }} + {{- $enumName := .Name }} + // bind {{ $enumName }} values. + {{- range .EnumValues }} + {{ .GoName }} = {{ $enumName }}(mod.getEnumValue(ctx, "{{ .WasmName }}")) + {{- end }} + {{- end }} +} + +func (m *WasmModule) getEnumValue(ctx context.Context, value string) int { + ret, err := mod.ExportedFunction("wasm_bridge_get_" + value).Call(ctx) + if err != nil { + panic(err) + } + return mod.toInt(ret[0]) +} + +func WasmPtr(v wasmStruct) uint64 { + return v.getPtr() +} + +func getCompilationCache() wazero.CompilationCache { + tmpDir := os.TempDir() + if tmpDir == "" { + return nil + } + cacheDir := filepath.Join(tmpDir, "go-graphviz") + if _, err := os.Stat(cacheDir); err != nil { + if err := os.Mkdir(cacheDir, 0o755); err != nil { + return nil + } + } + cache, err := wazero.NewCompilationCacheWithDir(cacheDir) + if err != nil { + return nil + } + return cache +} + +func (m *WasmModule) ExportedFunction(name string) api.Function { + return m.mod.ExportedFunction(name) +} + +func (m *WasmModule) malloc(ctx context.Context, size uint64) (uint64, error) { + ret, err := m.ExportedFunction("malloc").Call(ctx, size) + if err != nil { + return 0, err + } + return ret[0], nil +} + +func (m *WasmModule) free(ctx context.Context, p uint64) error { + if _, err := m.ExportedFunction("free").Call(ctx, p); err != nil { + return err + } + return nil +} + +func (m *WasmModule) newObject(ctx context.Context, name string) (uint64, error) { + ret, err := mod.ExportedFunction("wasm_bridge_new_" + name).Call(ctx) + if err != nil { + return 0, err + } + return ret[0], nil +} + +func (m *WasmModule) setField(ctx context.Context, name string, recv, arg uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_set_" + name).Call(ctx, recv, arg); err != nil { + return err + } + return nil +} + +func (m *WasmModule) setFieldFunction(ctx context.Context, name string, recv uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_set_" + name).Call(ctx, recv); err != nil { + return err + } + return nil +} + +func (m *WasmModule) getField(ctx context.Context, name string, recv uint64) (ret uint64, e error) { + retPtr, err := m.NewPtr(ctx) + if err != nil { + return 0, err + } + defer func() { + e = m.free(ctx, retPtr) + }() + + if _, err := m.ExportedFunction("wasm_bridge_get_" + name).Call(ctx, recv, retPtr); err != nil { + return 0, err + } + p, err := m.readU32(retPtr) + if err != nil { + return 0, err + } + return p, nil +} + +func (m *WasmModule) call(ctx context.Context, name string, args ...uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_" + name).Call(ctx, args...); err != nil { + return err + } + return nil +} + +func (m *WasmModule) callWithRet(ctx context.Context, name string, args ...uint64) (r uint64, e error) { + retPtr, err := m.NewPtr(ctx) + if err != nil { + return 0, err + } + defer func() { + e = m.free(ctx, retPtr) + }() + + if err := m.call(ctx, name, append(append([]uint64{}, args...), retPtr)...); err != nil { + return 0, err + } + p, err := m.readU32(retPtr) + if err != nil { + return 0, err + } + return p, nil +} + +func (m *WasmModule) read(addr, length uint64) ([]byte, error) { + bytes, ok := m.mod.Memory().Read(uint32(addr), uint32(length)) + if !ok { + return nil, fmt.Errorf( + `failed to read wasm memory: (ptr, size) = (%d, %d) and memory size is %d`, + addr, length, m.mod.Memory().Size(), + ) + } + return bytes, nil +} + +func (m *WasmModule) readU32(addr uint64) (uint64, error) { + p, ok := m.mod.Memory().ReadUint32Le(uint32(addr)) + if !ok { + return 0, fmt.Errorf( + `failed to read wasm memory: (ptr, size) = (%d, 4) and memory size is %d`, + addr, m.mod.Memory().Size(), + ) + } + return uint64(p), nil +} + +func (m *WasmModule) write(p uint64, b []byte) error { + if !m.mod.Memory().Write(uint32(p), b) { + return fmt.Errorf( + `failed to write wasm memory: (ptr, size) = (%d, %d) and memory size is %d`, + p, len(b), m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeU32(p uint64, v uint32) error { + if !m.mod.Memory().WriteUint32Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeU64(p uint64, v uint64) error { + if !m.mod.Memory().WriteUint64Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeF64(p uint64, v float64) error { + if !m.mod.Memory().WriteFloat64Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) NewPtr(ctx context.Context) (uint64, error) { + return m.malloc(ctx, 4) +} + +func (m *WasmModule) toSlice(ctx context.Context, p uint64) ([]uint64, error) { + length, err := m.readU32(p) + if err != nil { + return nil, err + } + data, err := m.readU32(p+4) + if err != nil { + return nil, err + } + var ret []uint64 + for i := uint64(0); i < length; i++ { + p, err := m.readU32(data+8*i) + if err != nil { + return nil, err + } + ret = append(ret, p) + } + return ret, nil +} + +func (m *WasmModule) toBool(p uint64) bool { + if p == 1 { + return true + } + return false +} + +func (m *WasmModule) toBoolSlice(v []uint64) []bool { + var ret []bool + for _, vv := range v { + ret = append(ret, m.toBool(vv)) + } + return ret +} + +func (m *WasmModule) toFloat32(ctx context.Context, p uint64) (float32, error) { + v, err := m.toString(ctx, p) + if err != nil { + return 0, err + } + f64, err := strconv.ParseFloat(v, 64) + if err != nil { + return 0, err + } + return float32(f64), nil +} + +func (m *WasmModule) toFloat32Slice(ctx context.Context, v []uint64) ([]float32, error) { + var ret []float32 + for _, vv := range v { + f, err := m.toFloat32(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, f) + } + return ret, nil +} + +func (m *WasmModule) toFloat64(ctx context.Context, p uint64) (float64, error) { + v, err := m.toString(ctx, p) + if err != nil { + return 0, err + } + f64, err := strconv.ParseFloat(v, 64) + if err != nil { + return 0, err + } + return f64, nil +} + +func (m *WasmModule) toFloat64Slice(ctx context.Context, v []uint64) ([]float64, error) { + var ret []float64 + for _, vv := range v { + f, err := m.toFloat64(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, f) + } + return ret, nil +} + +func (m *WasmModule) toInt(p uint64) int { + return int(p) +} + +func (m *WasmModule) toIntSlice(v []uint64) []int { + var ret []int + for _, vv := range v { + ret = append(ret, m.toInt(vv)) + } + return ret +} + +func (m *WasmModule) toInt32(v uint64) int32 { + return int32(v) +} + +func (m *WasmModule) toInt32Slice(v []uint64) []int32 { + var ret []int32 + for _, vv := range v { + ret = append(ret, m.toInt32(vv)) + } + return ret +} + +func (m *WasmModule) toInt64(v uint64) int64 { + return int64(v) +} + +func (m *WasmModule) toInt64Slice(v []uint64) []int64 { + var ret []int64 + for _, vv := range v { + ret = append(ret, m.toInt64(vv)) + } + return ret +} + +func (m *WasmModule) toUint(p uint64) uint { + return uint(p) +} + +func (m *WasmModule) toUintSlice(v []uint64) []uint { + var ret []uint + for _, vv := range v { + ret = append(ret, m.toUint(vv)) + } + return ret +} + +func (m *WasmModule) toUint32(v uint64) uint32 { + return uint32(v) +} + +func (m *WasmModule) toUint32Slice(v []uint64) []uint32 { + var ret []uint32 + for _, vv := range v { + ret = append(ret, m.toUint32(vv)) + } + return ret +} + +func (m *WasmModule) toUint64(v uint64) uint64 { + return v +} + +func (m *WasmModule) toUint64Slice(v []uint64) []uint64 { + return v +} + +func (m *WasmModule) toAny(v uint64) any { + return v +} + +func (m *WasmModule) toString(ctx context.Context, p uint64) (string, error) { + if p == 0 { + return "", nil + } + dataAddr, err := m.readU32(p) + if err != nil { + return "", err + } + length, err := m.readU32(p+4) + if err != nil { + return "", err + } + if length == 0 { + return "", nil + } + bytes, err := m.read(dataAddr, length) + if err != nil { + return "", err + } + return string(bytes), nil +} + +func (m *WasmModule) toStringSlice(ctx context.Context, v []uint64) ([]string, error) { + var ret []string + for _, vv := range v { + s, err := m.toString(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, s) + } + return ret, nil +} + +func (m *WasmModule) toObjectWasmValue(_ context.Context, v wasmStruct) (uint64, error) { + return v.getPtr(), nil +} + +func (m *WasmModule) toAnyWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case wasmStruct: + return vv.getPtr(), nil + } + return 0, nil +} + +func (m *WasmModule) toPtrWasmValue(ctx context.Context, _ any) (uint64, error) { + return m.NewPtr(ctx) +} + + +type wasmStruct interface { + getPtr() uint64 +} + +type numberType interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 +} + + +func (m *WasmModule) toIntWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case int: + return uint64(vv), nil + case int8: + return uint64(vv), nil + case int16: + return uint64(vv), nil + case int32: + return uint64(vv), nil + case int64: + return uint64(vv), nil + } + return uint64(reflect.ValueOf(v).Int()), nil +} + +func (m *WasmModule) toInt32WasmValue(_ context.Context, v int32) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toInt64WasmValue(_ context.Context, v int64) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toUintWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case uint: + return uint64(vv), nil + case uint8: + return uint64(vv), nil + case uint16: + return uint64(vv), nil + case uint32: + return uint64(vv), nil + case uint64: + return vv, nil + } + return 0, nil +} + +func (m *WasmModule) toUint32WasmValue(_ context.Context, v uint32) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toUint64WasmValue(_ context.Context, v uint64) (uint64, error) { + return v, nil +} + +func (m *WasmModule) toBoolWasmValue(_ context.Context, v bool) (uint64, error) { + if v { + return 1, nil + } + return 0, nil +} + +func (m *WasmModule) toFuncWasmValue(_ context.Context, _ any) (uint64, error) { + return 0, nil +} + +func (m *WasmModule) toFloatWasmValue(_ context.Context, v float32) (uint64, error) { + return api.EncodeF32(v), nil +} + +func (m *WasmModule) toDoubleWasmValue(_ context.Context, v float64) (uint64, error) { + return api.EncodeF64(v), nil +} + +func (m *WasmModule) toIntArrayWasmValue(ctx context.Context, v []int) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toInt32ArrayWasmValue(ctx context.Context, v []int32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toInt64ArrayWasmValue(ctx context.Context, v []int64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUintArrayWasmValue(ctx context.Context, v []uint) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUint32ArrayWasmValue(ctx context.Context, v []uint32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUint64ArrayWasmValue(ctx context.Context, v []uint64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, vv); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toDoubleArrayWasmValue(ctx context.Context, v []float64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeF64(ptr, vv); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toFloatStringWasmValue(ctx context.Context, v float32) (uint64, error) { + return m.toStringWasmValue(ctx, fmt.Sprint(v)) +} + +func (m *WasmModule) toDoubleStringWasmValue(ctx context.Context, v float64) (uint64, error) { + return m.toStringWasmValue(ctx, fmt.Sprint(v)) +} + +func (m *WasmModule) toFloatStringArrayWasmValue(ctx context.Context, v []float32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + f, err := m.toFloatStringWasmValue(ctx, vv) + if err != nil { + return 0, err + } + if err := m.writeU64(ptr, f); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toDoubleStringArrayWasmValue(ctx context.Context, v []float64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + f, err := m.toDoubleStringWasmValue(ctx, vv) + if err != nil { + return 0, err + } + if err := m.writeU64(ptr, f); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toStringWasmValue(ctx context.Context, s string) (uint64, error) { + ret, err := m.malloc(ctx, uint64(len(s))+1) + if err != nil { + return 0, err + } + if err := m.write(ret, append([]byte(s), 0)); err != nil { + return 0, err + } + return ret, nil +} + +func (m *WasmModule) toStringArrayWasmValue(ctx context.Context, v []string) (uint64, error) { + return 0, nil +} + +func (m *WasmModule) toObjectArrayWasmValue(ctx context.Context, v any) (uint64, error) { + ret, err := m.malloc(ctx, 4+4) // GoSlice + if err != nil { + return 0, err + } + rv := reflect.ValueOf(v) + if err := m.writeU32(ret, uint32(rv.Len())); err != nil { + return 0, err + } + data, err := m.malloc(ctx, uint64(8*rv.Len())) + if err != nil { + return 0, err + } + if err := m.writeU32(ret+4, uint32(data)); err != nil { + return 0, err + } + ptr := data + for i := 0; i < rv.Len(); i++ { + vv := rv.Index(i).Interface().(wasmStruct) + if err := m.writeU32(ptr, uint32(vv.getPtr())); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +{{- range .ExportMessages }} +{{- $msgName := .Name }} + +type {{ $msgName }} struct { + ptr uint64 +} +{{- if .HasConstructor }} +func New{{ $msgName }}(ctx context.Context) (*{{ $msgName }}, error) { + o, err := mod.newObject(ctx, "{{ $msgName }}") + if err != nil { + return nil, err + } + return new{{ $msgName }}(o), nil +} +{{ end }} +func new{{ $msgName }}(ptr uint64) *{{ $msgName }} { + if ptr == 0 { + return nil + } + return &{{ $msgName }}{ptr: ptr} +} + +func (v *{{ $msgName }}) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func new{{ $msgName }}Slice(v []uint64) []*{{ $msgName }} { + ret := make([]*{{ $msgName }}, 0, len(v)) + for _, vv := range v { + ret = append(ret, new{{ $msgName }}(vv)) + } + return ret +} + +{{- range .Fields }} + +{{- if .Value.IsFunction }} +func (v *{{ $msgName }}) Set{{ .GoName }}(ctx context.Context, arg {{ .Value.GoInterfaceType }}) error { + if mod.lookupFuncMap.{{ .Value.FuncName }} == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_{{ .Value.FuncName }} before") + } + mod.callbackFuncMap.{{ .Value.FuncName }}[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "{{ .WasmName }}", v.getPtr()) +} +{{- else }} +func (v *{{ $msgName }}) Set{{ .GoName }}(_arg {{ .Value.GoType }}) error { + ctx := context.Background() + arg, err := {{ .Value.WasmTypeConverter }}(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "{{ .WasmName }}", v.getPtr(), arg) +} + +func (v *{{ $msgName }}) Get{{ .GoName }}() {{ .Value.GoType }} { + ret, err := v.get{{ .GoName }}(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *{{ $msgName }}) get{{ .GoName }}(ctx context.Context) ({{ .Value.GoType }}, error) { + var zero {{ .Value.GoType }} + p, err := mod.getField(ctx, "{{ .WasmName }}", v.getPtr()) + if err != nil { + return zero, err + } + {{- template "ToGoValue" . }} + return {{ .Dst }}, nil +} +{{- end }} +{{ end }} +{{- end }} + +{{ range .ExportEnums }} +{{ $enumName := .Name }} +type {{ $enumName }} int +var ( + {{- range $index, $value := .EnumValues }} + {{ $value.GoName }} {{ $enumName }} = {{ $index }} + {{- end }} +) + +func (v {{ $enumName }}) String() string { + switch v { + {{- range .EnumValues }} + case {{ .GoName }}: + return "{{ .GoName }}" + {{- end }} + } + return "" +} +{{ end }} + +{{ range .ExportMethods }} +{{- if .Return }} +func (v *{{ .Receiver }}) {{ .GoName }}(ctx context.Context, {{- range .Args -}}_arg{{- .Index }} {{ .Value.GoInterfaceType }}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) ({{ .Return.Value.GoType }}, error) { + var zero {{ .Return.Value.GoType }} + {{- range .Args }} + {{- if .Value.IsFunction }} + if mod.lookupFuncMap.{{ .Value.FuncName }} == nil { + return zero, fmt.Errorf("cannot find lookup function. you must call Register_{{ .Value.FuncName }} before") + } + mod.callbackFuncMap.{{ .Value.FuncName }}[_arg{{ .Index }}.funcID] = _arg{{ .Index }}.cb + {{- end }} + arg{{- .Index -}}, err := {{ .Value.WasmTypeConverter }}(ctx, _arg{{- .Index -}}) + if err != nil { + return zero, err + } + {{- end }} + p, err := mod.callWithRet(ctx, "{{ .WasmName }}", v.getPtr(), {{- range .Args }}arg{{- .Index -}},{{- end }}) + if err != nil { + return zero, err + } + {{- range .Args }} + {{- if .Value.IsPtrValue }} + { + p, err := mod.readU32(arg{{ .Index }}) + if err != nil { + return zero, err + } + {{- template "ToGoValue" . }} + } + {{- end }} + {{- end }} + {{- template "ToGoValue" .Return }} + return {{ .Return.Dst }}, nil +} +{{- else }} +func (v *{{ .Receiver }}) {{ .GoName }}(ctx context.Context, {{- range .Args -}}_arg{{- .Index }} {{ .Value.GoInterfaceType }}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) error { + {{- range .Args }} + {{- if .Value.IsFunction }} + if mod.lookupFuncMap.{{ .Value.FuncName }} == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_{{ .Value.FuncName }} before") + } + mod.callbackFuncMap.{{ .Value.FuncName }}[_arg{{ .Index }}.funcID] = _arg{{ .Index }}.cb + {{- end }} + arg{{- .Index -}}, err := {{ .Value.WasmTypeConverter }}(ctx, _arg{{- .Index -}}) + if err != nil { + return err + } + {{- end }} + if err := mod.call(ctx, "{{ .WasmName }}", v.getPtr(), {{- range .Args }}arg{{- .Index -}},{{- end }}); err != nil { + return err + } + return nil +} +{{- end }} +{{ end }} + + +{{ range .ExportFunctions }} +{{- if .Return }} +func {{ .GoName }}(ctx context.Context, {{- range .Args -}}_arg{{- .Index }} {{ .Value.GoInterfaceType }}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) ({{ .Return.Value.GoType }}, error) { + var zero {{ .Return.Value.GoType }} + {{- range .Args }} + {{- if .Value.IsFunction }} + if mod.lookupFuncMap.{{ .Value.FuncName }} == nil { + return zero, fmt.Errorf("cannot find lookup function. you must call Register_{{ .Value.FuncName }} before") + } + mod.callbackFuncMap.{{ .Value.FuncName }}[_arg{{ .Index }}.funcID] = _arg{{ .Index }}.cb + {{- end }} + arg{{- .Index -}}, err := {{ .Value.WasmTypeConverter }}(ctx, _arg{{- .Index -}}) + if err != nil { + return zero, err + } + {{- end }} + p, err := mod.callWithRet(ctx, "{{ .WasmName }}", {{- range .Args }}arg{{- .Index -}},{{- end }}) + if err != nil { + return zero, err + } + {{- range .Args }} + {{- if .Value.IsPtrValue }} + { + p, err := mod.readU32(arg{{ .Index }}) + if err != nil { + return zero, err + } + {{- template "ToGoValue" . }} + } + {{- end }} + {{- end }} + {{- template "ToGoValue" .Return }} + return {{ .Return.Dst }}, nil +} +{{- else }} +func {{ .GoName }}(ctx context.Context, {{- range .Args -}}_arg{{- .Index }} {{ .Value.GoInterfaceType }}{{- if not .IsLastArg -}}, {{ end -}}{{- end -}}) error { + {{- range .Args }} + {{- if .Value.IsFunction }} + if mod.lookupFuncMap.{{ .Value.FuncName }} == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_{{ .Value.FuncName }} before") + } + mod.callbackFuncMap.{{ .Value.FuncName }}[_arg{{ .Index }}.funcID] = _arg{{ .Index }}.cb + {{- end }} + arg{{- .Index -}}, err := {{ .Value.WasmTypeConverter }}(ctx, _arg{{- .Index -}}) + if err != nil { + return err + } + {{- end }} + if err := mod.call(ctx, "{{ .WasmName }}", {{- range .Args }}arg{{- .Index -}},{{- end }}); err != nil { + return err + } + {{- range .Args }} + {{- if .Value.IsPtrValue }} + { + p, err := mod.readU32(arg{{ .Index }}) + if err != nil { + return err + } + if _, err := func() (any, error) { + var zero any + {{- template "ToGoValue" . }} + return {{ .Dst }}, nil + }(); err != nil { + return err + } + } + {{- end }} + {{- end }} + return nil +} +{{- end }} +{{ end }} + +{{- define "ToGoValue" }} +{{- if .Value.IsPtrValue }} +{{- template "toGoValueWithSlice" (map "Src" .Src "Dst" "value" "Value" .Value) }} +*{{ .Dst }} = value +{{- else }} +{{- template "toGoValueWithSlice" . }} +{{- end }} + +{{- end }} + +{{- define "toGoValueWithSlice" }} + +{{- if .Value.IsSlice }} +slice, err := mod.toSlice(ctx, {{ .Src }}) +if err != nil { + return zero, err +} +{{- template "toGoValue" (map "Src" "slice" "Dst" .Dst "Value" .Value) }} +{{- else }} +{{- template "toGoValue" . }} +{{- end }} + +{{- end }} + +{{- define "toGoValue" }} + +{{- if or .Value.IsStringKind .Value.IsFloatKind }} +{{ .Dst }}, err := {{ .Value.GoTypeConverter }}(ctx, {{ .Src }}) +if err != nil { + return zero, err +} +{{- else }} +{{ .Dst }} := {{ .Value.GoTypeConverter }}({{ .Src }}) +{{- end }} + +{{- end }} diff --git a/internal/wasm/bind.go b/internal/wasm/bind.go new file mode 100644 index 0000000..3ee5ba2 --- /dev/null +++ b/internal/wasm/bind.go @@ -0,0 +1,17638 @@ +// Code generated by protoc-gen-nori. DO NOT EDIT! + +package wasm + +import ( + "context" + _ "embed" + "fmt" + "os" + "path/filepath" + "reflect" + "strconv" + "unsafe" + + "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/api" + "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" +) + +var _ unsafe.Pointer + +//go:embed graphviz.wasm +var wasmFile []byte + +type WasmModule struct { + mod api.Module + lookupFuncMap *LookupFuncMap + callbackFuncMap *CallbackFuncMap +} + +type LookupFuncMap struct { + IDAllocator_Open func(*Graph, *ClientDiscipline) (uint64, error) + IDAllocator_Map func(any, int, string, *uint64, int) (uint64, error) + IDAllocator_Alloc func(any, int, uint64) (uint64, error) + IDAllocator_Free func(any, int, uint64) (uint64, error) + IDAllocator_Print func(any, int, uint64) (uint64, error) + IDAllocator_Close func(any) (uint64, error) + IDAllocator_IdRegister func(any, int, any) (uint64, error) + IOService_Afread func(any, string, int) (uint64, error) + IOService_Putstr func(any, string) (uint64, error) + IOService_Flush func(any) (uint64, error) + ClientEventCallback_ObjectFunc func(*Graph, *Object, any) (uint64, error) + ClientEventCallback_ObjectUpdateFunc func(*Graph, *Object, any, *Sym) (uint64, error) + UserRef func(string) (uint64, error) + DictMemory func(*Dict, any, uint32, *DictDisc) (uint64, error) + DictSearch func(*Dict, any, int) (uint64, error) + DictMake func(any, *DictDisc) (uint64, error) + DictFree func(any) (uint64, error) + DictCompare func(any, any) (uint64, error) + DictWalk func(any, any) (uint64, error) + UserShape_DataFree func(*UserShape) (uint64, error) + DeviceCallbacks_Refresh func(*Job) (uint64, error) + DeviceCallbacks_ButtonPress func(*Job, int, *PointFloat) (uint64, error) + DeviceCallbacks_ButtonRelease func(*Job, int, *PointFloat) (uint64, error) + DeviceCallbacks_Motion func(*Job, *PointFloat) (uint64, error) + DeviceCallbacks_Modify func(*Job, string, string) (uint64, error) + DeviceCallbacks_Delete func(*Job) (uint64, error) + DeviceCallbacks_Read func(*Job, string, string) (uint64, error) + DeviceCallbacks_Layout func(*Job, string) (uint64, error) + DeviceCallbacks_Render func(*Job, string, string) (uint64, error) + DeviceEngine_Initialize func(*Job) (uint64, error) + DeviceEngine_Format func(*Job) (uint64, error) + DeviceEngine_Finalize func(*Job) (uint64, error) + RenderEngine_BeginJob func(*Job) (uint64, error) + RenderEngine_EndJob func(*Job) (uint64, error) + RenderEngine_BeginGraph func(*Job) (uint64, error) + RenderEngine_EndGraph func(*Job) (uint64, error) + RenderEngine_BeginLayer func(*Job, string, int, int) (uint64, error) + RenderEngine_EndLayer func(*Job) (uint64, error) + RenderEngine_BeginPage func(*Job) (uint64, error) + RenderEngine_EndPage func(*Job) (uint64, error) + RenderEngine_BeginCluster func(*Job) (uint64, error) + RenderEngine_EndCluster func(*Job) (uint64, error) + RenderEngine_BeginNodes func(*Job) (uint64, error) + RenderEngine_EndNodes func(*Job) (uint64, error) + RenderEngine_BeginEdges func(*Job) (uint64, error) + RenderEngine_EndEdges func(*Job) (uint64, error) + RenderEngine_BeginNode func(*Job) (uint64, error) + RenderEngine_EndNode func(*Job) (uint64, error) + RenderEngine_BeginEdge func(*Job) (uint64, error) + RenderEngine_EndEdge func(*Job) (uint64, error) + RenderEngine_BeginAnchor func(*Job, string, string, string, string) (uint64, error) + RenderEngine_EndAnchor func(*Job) (uint64, error) + RenderEngine_BeginLabel func(*Job, LabelType) (uint64, error) + RenderEngine_EndLabel func(*Job) (uint64, error) + RenderEngine_Textspan func(*Job, *PointFloat, *Textspan) (uint64, error) + RenderEngine_ResolveColor func(*Job, *Color) (uint64, error) + RenderEngine_Ellipse func(*Job, []*PointFloat, int) (uint64, error) + RenderEngine_Polygon func(*Job, []*PointFloat, uint32, int) (uint64, error) + RenderEngine_Beziercurve func(*Job, []*PointFloat, uint32, int) (uint64, error) + RenderEngine_Polyline func(*Job, []*PointFloat, uint32) (uint64, error) + RenderEngine_Comment func(*Job, string) (uint64, error) + RenderEngine_LibraryShape func(*Job, string, []*PointFloat, uint32, int) (uint64, error) + LayoutEngine_Layout func(*Graph) (uint64, error) + LayoutEngine_Cleanup func(*Graph) (uint64, error) + TextLayoutEngine_TextLayout func(*Textspan, []string) (uint64, error) + LoadImageEngine_LoadImage func(*Job, *UserShape, *BoxFloat, bool) (uint64, error) +} + +type CallbackFuncMap struct { + IDAllocator_Open map[uint64]func(context.Context, *Graph, *ClientDiscipline) (any, error) + IDAllocator_Map map[uint64]func(context.Context, any, int, string, *uint64, int) (int32, error) + IDAllocator_Alloc map[uint64]func(context.Context, any, int, uint64) (int32, error) + IDAllocator_Free map[uint64]func(context.Context, any, int, uint64) error + IDAllocator_Print map[uint64]func(context.Context, any, int, uint64) (string, error) + IDAllocator_Close map[uint64]func(context.Context, any) error + IDAllocator_IdRegister map[uint64]func(context.Context, any, int, any) error + IOService_Afread map[uint64]func(context.Context, any, string, int) (int, error) + IOService_Putstr map[uint64]func(context.Context, any, string) (int, error) + IOService_Flush map[uint64]func(context.Context, any) (int, error) + ClientEventCallback_ObjectFunc map[uint64]func(context.Context, *Graph, *Object, any) error + ClientEventCallback_ObjectUpdateFunc map[uint64]func(context.Context, *Graph, *Object, any, *Sym) error + UserRef map[uint64]func(context.Context, string) (int, error) + DictMemory map[uint64]func(context.Context, *Dict, any, uint32, *DictDisc) (any, error) + DictSearch map[uint64]func(context.Context, *Dict, any, int) (any, error) + DictMake map[uint64]func(context.Context, any, *DictDisc) (any, error) + DictFree map[uint64]func(context.Context, any) error + DictCompare map[uint64]func(context.Context, any, any) (int, error) + DictWalk map[uint64]func(context.Context, any, any) (int, error) + UserShape_DataFree map[uint64]func(context.Context, *UserShape) error + DeviceCallbacks_Refresh map[uint64]func(context.Context, *Job) error + DeviceCallbacks_ButtonPress map[uint64]func(context.Context, *Job, int, *PointFloat) error + DeviceCallbacks_ButtonRelease map[uint64]func(context.Context, *Job, int, *PointFloat) error + DeviceCallbacks_Motion map[uint64]func(context.Context, *Job, *PointFloat) error + DeviceCallbacks_Modify map[uint64]func(context.Context, *Job, string, string) error + DeviceCallbacks_Delete map[uint64]func(context.Context, *Job) error + DeviceCallbacks_Read map[uint64]func(context.Context, *Job, string, string) error + DeviceCallbacks_Layout map[uint64]func(context.Context, *Job, string) error + DeviceCallbacks_Render map[uint64]func(context.Context, *Job, string, string) error + DeviceEngine_Initialize map[uint64]func(context.Context, *Job) error + DeviceEngine_Format map[uint64]func(context.Context, *Job) error + DeviceEngine_Finalize map[uint64]func(context.Context, *Job) error + RenderEngine_BeginJob map[uint64]func(context.Context, *Job) error + RenderEngine_EndJob map[uint64]func(context.Context, *Job) error + RenderEngine_BeginGraph map[uint64]func(context.Context, *Job) error + RenderEngine_EndGraph map[uint64]func(context.Context, *Job) error + RenderEngine_BeginLayer map[uint64]func(context.Context, *Job, string, int, int) error + RenderEngine_EndLayer map[uint64]func(context.Context, *Job) error + RenderEngine_BeginPage map[uint64]func(context.Context, *Job) error + RenderEngine_EndPage map[uint64]func(context.Context, *Job) error + RenderEngine_BeginCluster map[uint64]func(context.Context, *Job) error + RenderEngine_EndCluster map[uint64]func(context.Context, *Job) error + RenderEngine_BeginNodes map[uint64]func(context.Context, *Job) error + RenderEngine_EndNodes map[uint64]func(context.Context, *Job) error + RenderEngine_BeginEdges map[uint64]func(context.Context, *Job) error + RenderEngine_EndEdges map[uint64]func(context.Context, *Job) error + RenderEngine_BeginNode map[uint64]func(context.Context, *Job) error + RenderEngine_EndNode map[uint64]func(context.Context, *Job) error + RenderEngine_BeginEdge map[uint64]func(context.Context, *Job) error + RenderEngine_EndEdge map[uint64]func(context.Context, *Job) error + RenderEngine_BeginAnchor map[uint64]func(context.Context, *Job, string, string, string, string) error + RenderEngine_EndAnchor map[uint64]func(context.Context, *Job) error + RenderEngine_BeginLabel map[uint64]func(context.Context, *Job, LabelType) error + RenderEngine_EndLabel map[uint64]func(context.Context, *Job) error + RenderEngine_Textspan map[uint64]func(context.Context, *Job, *PointFloat, *Textspan) error + RenderEngine_ResolveColor map[uint64]func(context.Context, *Job, *Color) error + RenderEngine_Ellipse map[uint64]func(context.Context, *Job, []*PointFloat, int) error + RenderEngine_Polygon map[uint64]func(context.Context, *Job, []*PointFloat, uint32, int) error + RenderEngine_Beziercurve map[uint64]func(context.Context, *Job, []*PointFloat, uint32, int) error + RenderEngine_Polyline map[uint64]func(context.Context, *Job, []*PointFloat, uint32) error + RenderEngine_Comment map[uint64]func(context.Context, *Job, string) error + RenderEngine_LibraryShape map[uint64]func(context.Context, *Job, string, []*PointFloat, uint32, int) error + LayoutEngine_Layout map[uint64]func(context.Context, *Graph) error + LayoutEngine_Cleanup map[uint64]func(context.Context, *Graph) error + TextLayoutEngine_TextLayout map[uint64]func(context.Context, *Textspan, []string) (bool, error) + LoadImageEngine_LoadImage map[uint64]func(context.Context, *Job, *UserShape, *BoxFloat, bool) error +} + +func Register_IDAllocator_Open(fn func(*Graph, *ClientDiscipline) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Open = fn +} +func Register_IDAllocator_Map(fn func(any, int, string, *uint64, int) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Map = fn +} +func Register_IDAllocator_Alloc(fn func(any, int, uint64) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Alloc = fn +} +func Register_IDAllocator_Free(fn func(any, int, uint64) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Free = fn +} +func Register_IDAllocator_Print(fn func(any, int, uint64) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Print = fn +} +func Register_IDAllocator_Close(fn func(any) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_Close = fn +} +func Register_IDAllocator_IdRegister(fn func(any, int, any) (uint64, error)) { + mod.lookupFuncMap.IDAllocator_IdRegister = fn +} +func Register_IOService_Afread(fn func(any, string, int) (uint64, error)) { + mod.lookupFuncMap.IOService_Afread = fn +} +func Register_IOService_Putstr(fn func(any, string) (uint64, error)) { + mod.lookupFuncMap.IOService_Putstr = fn +} +func Register_IOService_Flush(fn func(any) (uint64, error)) { + mod.lookupFuncMap.IOService_Flush = fn +} +func Register_ClientEventCallback_ObjectFunc(fn func(*Graph, *Object, any) (uint64, error)) { + mod.lookupFuncMap.ClientEventCallback_ObjectFunc = fn +} +func Register_ClientEventCallback_ObjectUpdateFunc(fn func(*Graph, *Object, any, *Sym) (uint64, error)) { + mod.lookupFuncMap.ClientEventCallback_ObjectUpdateFunc = fn +} +func Register_UserRef(fn func(string) (uint64, error)) { + mod.lookupFuncMap.UserRef = fn +} +func Register_DictMemory(fn func(*Dict, any, uint32, *DictDisc) (uint64, error)) { + mod.lookupFuncMap.DictMemory = fn +} +func Register_DictSearch(fn func(*Dict, any, int) (uint64, error)) { + mod.lookupFuncMap.DictSearch = fn +} +func Register_DictMake(fn func(any, *DictDisc) (uint64, error)) { + mod.lookupFuncMap.DictMake = fn +} +func Register_DictFree(fn func(any) (uint64, error)) { + mod.lookupFuncMap.DictFree = fn +} +func Register_DictCompare(fn func(any, any) (uint64, error)) { + mod.lookupFuncMap.DictCompare = fn +} +func Register_DictWalk(fn func(any, any) (uint64, error)) { + mod.lookupFuncMap.DictWalk = fn +} +func Register_UserShape_DataFree(fn func(*UserShape) (uint64, error)) { + mod.lookupFuncMap.UserShape_DataFree = fn +} +func Register_DeviceCallbacks_Refresh(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Refresh = fn +} +func Register_DeviceCallbacks_ButtonPress(fn func(*Job, int, *PointFloat) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_ButtonPress = fn +} +func Register_DeviceCallbacks_ButtonRelease(fn func(*Job, int, *PointFloat) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_ButtonRelease = fn +} +func Register_DeviceCallbacks_Motion(fn func(*Job, *PointFloat) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Motion = fn +} +func Register_DeviceCallbacks_Modify(fn func(*Job, string, string) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Modify = fn +} +func Register_DeviceCallbacks_Delete(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Delete = fn +} +func Register_DeviceCallbacks_Read(fn func(*Job, string, string) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Read = fn +} +func Register_DeviceCallbacks_Layout(fn func(*Job, string) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Layout = fn +} +func Register_DeviceCallbacks_Render(fn func(*Job, string, string) (uint64, error)) { + mod.lookupFuncMap.DeviceCallbacks_Render = fn +} +func Register_DeviceEngine_Initialize(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.DeviceEngine_Initialize = fn +} +func Register_DeviceEngine_Format(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.DeviceEngine_Format = fn +} +func Register_DeviceEngine_Finalize(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.DeviceEngine_Finalize = fn +} +func Register_RenderEngine_BeginJob(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginJob = fn +} +func Register_RenderEngine_EndJob(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndJob = fn +} +func Register_RenderEngine_BeginGraph(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginGraph = fn +} +func Register_RenderEngine_EndGraph(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndGraph = fn +} +func Register_RenderEngine_BeginLayer(fn func(*Job, string, int, int) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginLayer = fn +} +func Register_RenderEngine_EndLayer(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndLayer = fn +} +func Register_RenderEngine_BeginPage(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginPage = fn +} +func Register_RenderEngine_EndPage(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndPage = fn +} +func Register_RenderEngine_BeginCluster(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginCluster = fn +} +func Register_RenderEngine_EndCluster(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndCluster = fn +} +func Register_RenderEngine_BeginNodes(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginNodes = fn +} +func Register_RenderEngine_EndNodes(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndNodes = fn +} +func Register_RenderEngine_BeginEdges(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginEdges = fn +} +func Register_RenderEngine_EndEdges(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndEdges = fn +} +func Register_RenderEngine_BeginNode(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginNode = fn +} +func Register_RenderEngine_EndNode(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndNode = fn +} +func Register_RenderEngine_BeginEdge(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginEdge = fn +} +func Register_RenderEngine_EndEdge(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndEdge = fn +} +func Register_RenderEngine_BeginAnchor(fn func(*Job, string, string, string, string) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginAnchor = fn +} +func Register_RenderEngine_EndAnchor(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndAnchor = fn +} +func Register_RenderEngine_BeginLabel(fn func(*Job, LabelType) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_BeginLabel = fn +} +func Register_RenderEngine_EndLabel(fn func(*Job) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_EndLabel = fn +} +func Register_RenderEngine_Textspan(fn func(*Job, *PointFloat, *Textspan) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Textspan = fn +} +func Register_RenderEngine_ResolveColor(fn func(*Job, *Color) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_ResolveColor = fn +} +func Register_RenderEngine_Ellipse(fn func(*Job, []*PointFloat, int) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Ellipse = fn +} +func Register_RenderEngine_Polygon(fn func(*Job, []*PointFloat, uint32, int) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Polygon = fn +} +func Register_RenderEngine_Beziercurve(fn func(*Job, []*PointFloat, uint32, int) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Beziercurve = fn +} +func Register_RenderEngine_Polyline(fn func(*Job, []*PointFloat, uint32) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Polyline = fn +} +func Register_RenderEngine_Comment(fn func(*Job, string) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_Comment = fn +} +func Register_RenderEngine_LibraryShape(fn func(*Job, string, []*PointFloat, uint32, int) (uint64, error)) { + mod.lookupFuncMap.RenderEngine_LibraryShape = fn +} +func Register_LayoutEngine_Layout(fn func(*Graph) (uint64, error)) { + mod.lookupFuncMap.LayoutEngine_Layout = fn +} +func Register_LayoutEngine_Cleanup(fn func(*Graph) (uint64, error)) { + mod.lookupFuncMap.LayoutEngine_Cleanup = fn +} +func Register_TextLayoutEngine_TextLayout(fn func(*Textspan, []string) (uint64, error)) { + mod.lookupFuncMap.TextLayoutEngine_TextLayout = fn +} +func Register_LoadImageEngine_LoadImage(fn func(*Job, *UserShape, *BoxFloat, bool) (uint64, error)) { + mod.lookupFuncMap.LoadImageEngine_LoadImage = fn +} + +var mod *WasmModule + +type CallbackFunc[T any] struct { + cb T + funcID uint64 +} + +func CreateCallbackFunc[T any](cb T, funcID uint64) *CallbackFunc[T] { + return &CallbackFunc[T]{ + cb: cb, + funcID: funcID, + } +} + +func init() { + ctx := context.Background() + cfg := wazero.NewRuntimeConfig() + if cache := getCompilationCache(); cache != nil { + cfg = cfg.WithCompilationCache(cache) + } + + r := wazero.NewRuntimeWithConfig(ctx, cfg) + + env := r.NewHostModuleBuilder("env") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Graph, error) { + var zero *Graph + _ = zero + ret := newGraph(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*ClientDiscipline, error) { + var zero *ClientDiscipline + _ = zero + ret := newClientDiscipline(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Open(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Open[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IDAllocator_Open") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[2]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (*uint64, error) { + var zero *uint64 + _ = zero + ret := new(uint64) + value := mod.toUint64(stack[3]) + *ret = value + return ret, nil + }() + if err != nil { + panic(err) + } + arg4, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[4]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Map(arg0, arg1, arg2, arg3, arg4) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Map[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2, arg3, arg4); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IDAllocator_Map") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint64, error) { + var zero uint64 + _ = zero + ret := mod.toUint64(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Alloc(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Alloc[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI64}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IDAllocator_Alloc") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint64, error) { + var zero uint64 + _ = zero + ret := mod.toUint64(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Free(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Free[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI64}, + []api.ValueType{}, + ).Export("wasm_bridge_IDAllocator_Free") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint64, error) { + var zero uint64 + _ = zero + ret := mod.toUint64(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Print(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Print[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI64}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IDAllocator_Print") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_Close(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_Close[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_IDAllocator_Close") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IDAllocator_IdRegister(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IDAllocator_IdRegister[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_IDAllocator_IdRegister") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IOService_Afread(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IOService_Afread[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IOService_Afread") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IOService_Putstr(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IOService_Putstr[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IOService_Putstr") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.IOService_Flush(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.IOService_Flush[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_IOService_Flush") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Graph, error) { + var zero *Graph + _ = zero + ret := newGraph(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*Object, error) { + var zero *Object + _ = zero + ret := newObject(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.ClientEventCallback_ObjectFunc(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.ClientEventCallback_ObjectFunc[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_ClientEventCallback_ObjectFunc") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Graph, error) { + var zero *Graph + _ = zero + ret := newGraph(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*Object, error) { + var zero *Object + _ = zero + ret := newObject(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (*Sym, error) { + var zero *Sym + _ = zero + ret := newSym(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.ClientEventCallback_ObjectUpdateFunc(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.ClientEventCallback_ObjectUpdateFunc[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_ClientEventCallback_ObjectUpdateFunc") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[0]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.UserRef(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.UserRef[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_UserRef") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Dict, error) { + var zero *Dict + _ = zero + ret := newDict(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint32, error) { + var zero uint32 + _ = zero + ret := mod.toUint32(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (*DictDisc, error) { + var zero *DictDisc + _ = zero + ret := newDictDisc(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictMemory(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictMemory[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_DictMemory") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Dict, error) { + var zero *Dict + _ = zero + ret := newDict(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictSearch(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictSearch[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_DictSearch") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*DictDisc, error) { + var zero *DictDisc + _ = zero + ret := newDictDisc(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictMake(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictMake[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_DictMake") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictFree(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictFree[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DictFree") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictCompare(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictCompare[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_DictCompare") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (any, error) { + var zero any + _ = zero + ret := mod.toAny(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DictWalk(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DictWalk[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_DictWalk") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*UserShape, error) { + var zero *UserShape + _ = zero + ret := newUserShape(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.UserShape_DataFree(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.UserShape_DataFree[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_UserShape_DataFree") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Refresh(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Refresh[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Refresh") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (*PointFloat, error) { + var zero *PointFloat + _ = zero + ret := newPointFloat(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_ButtonPress(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_ButtonPress[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_ButtonPress") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (*PointFloat, error) { + var zero *PointFloat + _ = zero + ret := newPointFloat(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_ButtonRelease(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_ButtonRelease[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_ButtonRelease") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*PointFloat, error) { + var zero *PointFloat + _ = zero + ret := newPointFloat(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Motion(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Motion[funcID]; exists { + if err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Motion") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[2]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Modify(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Modify[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Modify") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Delete(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Delete[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Delete") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[2]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Read(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Read[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Read") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Layout(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Layout[funcID]; exists { + if err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Layout") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[2]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceCallbacks_Render(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceCallbacks_Render[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceCallbacks_Render") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceEngine_Initialize(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceEngine_Initialize[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceEngine_Initialize") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceEngine_Format(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceEngine_Format[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceEngine_Format") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.DeviceEngine_Finalize(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.DeviceEngine_Finalize[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_DeviceEngine_Finalize") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginJob(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginJob[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginJob") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndJob(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndJob[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndJob") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginGraph(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginGraph[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginGraph") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndGraph(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndGraph[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndGraph") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginLayer(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginLayer[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginLayer") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndLayer(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndLayer[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndLayer") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginPage(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginPage[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginPage") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndPage(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndPage[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndPage") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginCluster(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginCluster[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginCluster") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndCluster(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndCluster[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndCluster") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginNodes(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginNodes[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginNodes") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndNodes(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndNodes[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndNodes") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginEdges(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginEdges[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginEdges") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndEdges(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndEdges[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndEdges") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginNode(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginNode[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginNode") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndNode(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndNode[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndNode") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginEdge(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginEdge[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginEdge") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndEdge(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndEdge[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndEdge") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[2]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[3]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg4, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[4]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginAnchor(arg0, arg1, arg2, arg3, arg4) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginAnchor[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3, arg4); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginAnchor") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndAnchor(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndAnchor[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndAnchor") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (LabelType, error) { + var zero LabelType + _ = zero + ret := LabelType(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_BeginLabel(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_BeginLabel[funcID]; exists { + if err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_BeginLabel") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_EndLabel(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_EndLabel[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_EndLabel") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*PointFloat, error) { + var zero *PointFloat + _ = zero + ret := newPointFloat(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (*Textspan, error) { + var zero *Textspan + _ = zero + ret := newTextspan(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Textspan(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Textspan[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Textspan") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*Color, error) { + var zero *Color + _ = zero + ret := newColor(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_ResolveColor(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_ResolveColor[funcID]; exists { + if err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_ResolveColor") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() ([]*PointFloat, error) { + var zero []*PointFloat + _ = zero + slice, err := mod.toSlice(ctx, stack[1]) + if err != nil { + return zero, err + } + ret := newPointFloatSlice(slice) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Ellipse(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Ellipse[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Ellipse") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() ([]*PointFloat, error) { + var zero []*PointFloat + _ = zero + slice, err := mod.toSlice(ctx, stack[1]) + if err != nil { + return zero, err + } + ret := newPointFloatSlice(slice) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint32, error) { + var zero uint32 + _ = zero + ret := mod.toUint32(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Polygon(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Polygon[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Polygon") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() ([]*PointFloat, error) { + var zero []*PointFloat + _ = zero + slice, err := mod.toSlice(ctx, stack[1]) + if err != nil { + return zero, err + } + ret := newPointFloatSlice(slice) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint32, error) { + var zero uint32 + _ = zero + ret := mod.toUint32(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Beziercurve(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Beziercurve[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Beziercurve") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() ([]*PointFloat, error) { + var zero []*PointFloat + _ = zero + slice, err := mod.toSlice(ctx, stack[1]) + if err != nil { + return zero, err + } + ret := newPointFloatSlice(slice) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (uint32, error) { + var zero uint32 + _ = zero + ret := mod.toUint32(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Polyline(arg0, arg1, arg2) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Polyline[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Polyline") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_Comment(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_Comment[funcID]; exists { + if err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_Comment") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (string, error) { + var zero string + _ = zero + ret, err := mod.toString(ctx, stack[1]) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() ([]*PointFloat, error) { + var zero []*PointFloat + _ = zero + slice, err := mod.toSlice(ctx, stack[2]) + if err != nil { + return zero, err + } + ret := newPointFloatSlice(slice) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (uint32, error) { + var zero uint32 + _ = zero + ret := mod.toUint32(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg4, err := func() (int, error) { + var zero int + _ = zero + ret := mod.toInt(stack[4]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.RenderEngine_LibraryShape(arg0, arg1, arg2, arg3, arg4) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.RenderEngine_LibraryShape[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3, arg4); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_RenderEngine_LibraryShape") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Graph, error) { + var zero *Graph + _ = zero + ret := newGraph(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.LayoutEngine_Layout(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.LayoutEngine_Layout[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_LayoutEngine_Layout") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Graph, error) { + var zero *Graph + _ = zero + ret := newGraph(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.LayoutEngine_Cleanup(arg0) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.LayoutEngine_Cleanup[funcID]; exists { + if err := fn(ctx, arg0); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_LayoutEngine_Cleanup") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Textspan, error) { + var zero *Textspan + _ = zero + ret := newTextspan(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() ([]string, error) { + var zero []string + _ = zero + slice, err := mod.toSlice(ctx, stack[1]) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.TextLayoutEngine_TextLayout(arg0, arg1) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.TextLayoutEngine_TextLayout[funcID]; exists { + // TODO: must back returned value to wasm side. + if _, err := fn(ctx, arg0, arg1); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{api.ValueTypeI32}, + ).Export("wasm_bridge_TextLayoutEngine_TextLayout") + env = env.NewFunctionBuilder().WithGoModuleFunction( + api.GoModuleFunc(func(ctx context.Context, _ api.Module, stack []uint64) { + arg0, err := func() (*Job, error) { + var zero *Job + _ = zero + ret := newJob(stack[0]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg1, err := func() (*UserShape, error) { + var zero *UserShape + _ = zero + ret := newUserShape(stack[1]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg2, err := func() (*BoxFloat, error) { + var zero *BoxFloat + _ = zero + ret := newBoxFloat(stack[2]) + return ret, nil + }() + if err != nil { + panic(err) + } + arg3, err := func() (bool, error) { + var zero bool + _ = zero + ret := mod.toBool(stack[3]) + return ret, nil + }() + if err != nil { + panic(err) + } + + funcID, err := mod.lookupFuncMap.LoadImageEngine_LoadImage(arg0, arg1, arg2, arg3) + if err != nil { + panic(err) + } + if fn, exists := mod.callbackFuncMap.LoadImageEngine_LoadImage[funcID]; exists { + if err := fn(ctx, arg0, arg1, arg2, arg3); err != nil { + panic(err) + } + } + }), + []api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, + []api.ValueType{}, + ).Export("wasm_bridge_LoadImageEngine_LoadImage") + if _, err := env.Instantiate(ctx); err != nil { + panic(err) + } + wasi_snapshot_preview1.MustInstantiate(ctx, r) + + compiled, err := r.CompileModule(ctx, wasmFile) + if err != nil { + panic(err) + } + dir, err := os.MkdirTemp("", "graphviz") + if err != nil { + panic(err) + } + m, err := r.InstantiateModule( + ctx, + compiled, + wazero.NewModuleConfig(). + WithFSConfig(wazero.NewFSConfig().WithDirMount(dir, "/")). + WithStdout(os.Stdout). + WithName("wasi"), + ) + if err != nil { + panic(err) + } + mod = &WasmModule{ + mod: m, + lookupFuncMap: &LookupFuncMap{}, + callbackFuncMap: &CallbackFuncMap{ + IDAllocator_Open: make(map[uint64]func(context.Context, *Graph, *ClientDiscipline) (any, error)), + IDAllocator_Map: make(map[uint64]func(context.Context, any, int, string, *uint64, int) (int32, error)), + IDAllocator_Alloc: make(map[uint64]func(context.Context, any, int, uint64) (int32, error)), + IDAllocator_Free: make(map[uint64]func(context.Context, any, int, uint64) error), + IDAllocator_Print: make(map[uint64]func(context.Context, any, int, uint64) (string, error)), + IDAllocator_Close: make(map[uint64]func(context.Context, any) error), + IDAllocator_IdRegister: make(map[uint64]func(context.Context, any, int, any) error), + IOService_Afread: make(map[uint64]func(context.Context, any, string, int) (int, error)), + IOService_Putstr: make(map[uint64]func(context.Context, any, string) (int, error)), + IOService_Flush: make(map[uint64]func(context.Context, any) (int, error)), + ClientEventCallback_ObjectFunc: make(map[uint64]func(context.Context, *Graph, *Object, any) error), + ClientEventCallback_ObjectUpdateFunc: make(map[uint64]func(context.Context, *Graph, *Object, any, *Sym) error), + UserRef: make(map[uint64]func(context.Context, string) (int, error)), + DictMemory: make(map[uint64]func(context.Context, *Dict, any, uint32, *DictDisc) (any, error)), + DictSearch: make(map[uint64]func(context.Context, *Dict, any, int) (any, error)), + DictMake: make(map[uint64]func(context.Context, any, *DictDisc) (any, error)), + DictFree: make(map[uint64]func(context.Context, any) error), + DictCompare: make(map[uint64]func(context.Context, any, any) (int, error)), + DictWalk: make(map[uint64]func(context.Context, any, any) (int, error)), + UserShape_DataFree: make(map[uint64]func(context.Context, *UserShape) error), + DeviceCallbacks_Refresh: make(map[uint64]func(context.Context, *Job) error), + DeviceCallbacks_ButtonPress: make(map[uint64]func(context.Context, *Job, int, *PointFloat) error), + DeviceCallbacks_ButtonRelease: make(map[uint64]func(context.Context, *Job, int, *PointFloat) error), + DeviceCallbacks_Motion: make(map[uint64]func(context.Context, *Job, *PointFloat) error), + DeviceCallbacks_Modify: make(map[uint64]func(context.Context, *Job, string, string) error), + DeviceCallbacks_Delete: make(map[uint64]func(context.Context, *Job) error), + DeviceCallbacks_Read: make(map[uint64]func(context.Context, *Job, string, string) error), + DeviceCallbacks_Layout: make(map[uint64]func(context.Context, *Job, string) error), + DeviceCallbacks_Render: make(map[uint64]func(context.Context, *Job, string, string) error), + DeviceEngine_Initialize: make(map[uint64]func(context.Context, *Job) error), + DeviceEngine_Format: make(map[uint64]func(context.Context, *Job) error), + DeviceEngine_Finalize: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginJob: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndJob: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginGraph: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndGraph: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginLayer: make(map[uint64]func(context.Context, *Job, string, int, int) error), + RenderEngine_EndLayer: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginPage: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndPage: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginCluster: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndCluster: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginNodes: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndNodes: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginEdges: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndEdges: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginNode: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndNode: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginEdge: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_EndEdge: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginAnchor: make(map[uint64]func(context.Context, *Job, string, string, string, string) error), + RenderEngine_EndAnchor: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_BeginLabel: make(map[uint64]func(context.Context, *Job, LabelType) error), + RenderEngine_EndLabel: make(map[uint64]func(context.Context, *Job) error), + RenderEngine_Textspan: make(map[uint64]func(context.Context, *Job, *PointFloat, *Textspan) error), + RenderEngine_ResolveColor: make(map[uint64]func(context.Context, *Job, *Color) error), + RenderEngine_Ellipse: make(map[uint64]func(context.Context, *Job, []*PointFloat, int) error), + RenderEngine_Polygon: make(map[uint64]func(context.Context, *Job, []*PointFloat, uint32, int) error), + RenderEngine_Beziercurve: make(map[uint64]func(context.Context, *Job, []*PointFloat, uint32, int) error), + RenderEngine_Polyline: make(map[uint64]func(context.Context, *Job, []*PointFloat, uint32) error), + RenderEngine_Comment: make(map[uint64]func(context.Context, *Job, string) error), + RenderEngine_LibraryShape: make(map[uint64]func(context.Context, *Job, string, []*PointFloat, uint32, int) error), + LayoutEngine_Layout: make(map[uint64]func(context.Context, *Graph) error), + LayoutEngine_Cleanup: make(map[uint64]func(context.Context, *Graph) error), + TextLayoutEngine_TextLayout: make(map[uint64]func(context.Context, *Textspan, []string) (bool, error)), + LoadImageEngine_LoadImage: make(map[uint64]func(context.Context, *Job, *UserShape, *BoxFloat, bool) error), + }, + } + // bind ObjectTag values. + GRAPH = ObjectTag(mod.getEnumValue(ctx, "AGRAPH")) + NODE = ObjectTag(mod.getEnumValue(ctx, "AGNODE")) + OUT_EDGE = ObjectTag(mod.getEnumValue(ctx, "AGOUTEDGE")) + IN_EDGE = ObjectTag(mod.getEnumValue(ctx, "AGINEDGE")) + EDGE = ObjectTag(mod.getEnumValue(ctx, "AGEDGE")) + // bind ErrorLevel values. + WARN = ErrorLevel(mod.getEnumValue(ctx, "AGWARN")) + ERR = ErrorLevel(mod.getEnumValue(ctx, "AGERR")) + MAX = ErrorLevel(mod.getEnumValue(ctx, "AGMAX")) + PREV = ErrorLevel(mod.getEnumValue(ctx, "AGPREV")) + // bind ImageType values. + IMAGE_TYPE_NULL = ImageType(mod.getEnumValue(ctx, "FT_NULL")) + IMAGE_TYPE_BMP = ImageType(mod.getEnumValue(ctx, "FT_BMP")) + IMAGE_TYPE_GIF = ImageType(mod.getEnumValue(ctx, "FT_GIF")) + IMAGE_TYPE_PNG = ImageType(mod.getEnumValue(ctx, "FT_PNG")) + IMAGE_TYPE_JPEG = ImageType(mod.getEnumValue(ctx, "FT_JPEG")) + IMAGE_TYPE_PDF = ImageType(mod.getEnumValue(ctx, "FT_PDF")) + IMAGE_TYPE_PS = ImageType(mod.getEnumValue(ctx, "FT_PS")) + IMAGE_TYPE_EPS = ImageType(mod.getEnumValue(ctx, "FT_EPS")) + IMAGE_TYPE_SVG = ImageType(mod.getEnumValue(ctx, "FT_SVG")) + IMAGE_TYPE_XML = ImageType(mod.getEnumValue(ctx, "FT_XML")) + IMAGE_TYPE_RIFF = ImageType(mod.getEnumValue(ctx, "FT_RIFF")) + IMAGE_TYPE_WEBP = ImageType(mod.getEnumValue(ctx, "FT_WEBP")) + IMAGE_TYPE_ICO = ImageType(mod.getEnumValue(ctx, "FT_ICO")) + IMAGE_TYPE_TIFF = ImageType(mod.getEnumValue(ctx, "FT_TIFF")) + // bind ObjectType values. + ROOTGRAPH_OBJTYPE = ObjectType(mod.getEnumValue(ctx, "ROOTGRAPH_OBJTYPE")) + CLUSTER_OBJTYPE = ObjectType(mod.getEnumValue(ctx, "CLUSTER_OBJTYPE")) + NODE_OBJTYPE = ObjectType(mod.getEnumValue(ctx, "NODE_OBJTYPE")) + EDGE_OBJTYPE = ObjectType(mod.getEnumValue(ctx, "EDGE_OBJTYPE")) + // bind MapShapeType values. + MAP_RECTANGLE = MapShapeType(mod.getEnumValue(ctx, "MAP_RECTANGLE")) + MAP_CIRCLE = MapShapeType(mod.getEnumValue(ctx, "MAP_CIRCLE")) + MAP_POLYGON = MapShapeType(mod.getEnumValue(ctx, "MAP_POLYGON")) + // bind EmitState values. + EMIT_GDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_GDRAW")) + EMIT_CDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_CDRAW")) + EMIT_TDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_TDRAW")) + EMIT_HDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_HDRAW")) + EMIT_GLABEL = EmitState(mod.getEnumValue(ctx, "EMIT_GLABEL")) + EMIT_CLABEL = EmitState(mod.getEnumValue(ctx, "EMIT_CLABEL")) + EMIT_TLABEL = EmitState(mod.getEnumValue(ctx, "EMIT_TLABEL")) + EMIT_HLABEL = EmitState(mod.getEnumValue(ctx, "EMIT_HLABEL")) + EMIT_NDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_NDRAW")) + EMIT_EDRAW = EmitState(mod.getEnumValue(ctx, "EMIT_EDRAW")) + EMIT_NLABEL = EmitState(mod.getEnumValue(ctx, "EMIT_NLABEL")) + EMIT_ELABEL = EmitState(mod.getEnumValue(ctx, "EMIT_ELABEL")) + // bind EmitType values. + EMIT_SORTED = EmitType(mod.getEnumValue(ctx, "EMIT_SORTED")) + EMIT_COLORS = EmitType(mod.getEnumValue(ctx, "EMIT_COLORS")) + EMIT_CLUSTERS_LAST = EmitType(mod.getEnumValue(ctx, "EMIT_CLUSTERS_LAST")) + EMIT_PREORDER = EmitType(mod.getEnumValue(ctx, "EMIT_PREORDER")) + EMIT_EDGE_SORTED = EmitType(mod.getEnumValue(ctx, "EMIT_EDGE_SORTED")) + // bind DeviceType values. + DEVICE_DOES_PAGES = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_DOES_PAGES")) + DEVICE_DOES_LAYERS = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_DOES_LAYERS")) + DEVICE_EVENTS = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_EVENTS")) + DEVICE_DOES_TRUECOLOR = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_DOES_TRUECOLOR")) + DEVICE_BINARY_FORMAT = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_BINARY_FORMAT")) + DEVICE_COMPRESSED_FORMAT = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_COMPRESSED_FORMAT")) + DEVICE_NO_WRITER = DeviceType(mod.getEnumValue(ctx, "GVDEVICE_NO_WRITER")) + // bind RenderType values. + RENDER_Y_GOES_DOWN = RenderType(mod.getEnumValue(ctx, "GVRENDER_Y_GOES_DOWN")) + RENDER_DOES_TRANSFORM = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_TRANSFORM")) + RENDER_DOES_LABELS = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_LABELS")) + RENDER_DOES_MAPS = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAPS")) + RENDER_DOES_MAP_RECTANGLE = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAP_RECTANGLE")) + RENDER_DOES_MAP_CIRCLE = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAP_CIRCLE")) + RENDER_DOES_MAP_POLYGON = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAP_POLYGON")) + RENDER_DOES_MAP_ELLIPSE = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAP_ELLIPSE")) + RENDER_DOES_MAP_BSPLINE = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_MAP_BSPLINE")) + RENDER_DOES_TOOLTIPS = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_TOOLTIPS")) + RENDER_DOES_TARGETS = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_TARGETS")) + RENDER_DOES_Z = RenderType(mod.getEnumValue(ctx, "GVRENDER_DOES_Z")) + RENDER_NO_WHITE_BG = RenderType(mod.getEnumValue(ctx, "GVRENDER_NO_WHITE_BG")) + // bind RequiredType values. + LAYOUT_NOT_REQUIRED = RequiredType(mod.getEnumValue(ctx, "LAYOUT_NOT_REQUIRED")) + OUTPUT_NOT_REQUIRED = RequiredType(mod.getEnumValue(ctx, "OUTPUT_NOT_REQUIRED")) + // bind PenType values. + PEN_NONE = PenType(mod.getEnumValue(ctx, "PEN_NONE")) + PEN_DASHED = PenType(mod.getEnumValue(ctx, "PEN_DASHED")) + PEN_DOTTED = PenType(mod.getEnumValue(ctx, "PEN_DOTTED")) + PEN_SOLID = PenType(mod.getEnumValue(ctx, "PEN_SOLID")) + // bind FillType values. + FILL_NONE = FillType(mod.getEnumValue(ctx, "FILL_NONE")) + FILL_SOLID = FillType(mod.getEnumValue(ctx, "FILL_SOLID")) + FILL_LINEAR = FillType(mod.getEnumValue(ctx, "FILL_LINEAR")) + FILL_RADIAL = FillType(mod.getEnumValue(ctx, "FILL_RADIAL")) + // bind FontType values. + FONT_REGULAR = FontType(mod.getEnumValue(ctx, "FONT_REGULAR")) + FONT_BOLD = FontType(mod.getEnumValue(ctx, "FONT_BOLD")) + FONT_ITALIC = FontType(mod.getEnumValue(ctx, "FONT_ITALIC")) + // bind LabelType values. + LABEL_PLAIN = LabelType(mod.getEnumValue(ctx, "LABEL_PLAIN")) + LABEL_HTML = LabelType(mod.getEnumValue(ctx, "LABEL_HTML")) + // bind ColorType values. + HSVA_DOUBLE = ColorType(mod.getEnumValue(ctx, "HSVA_DOUBLE")) + RGBA_BYTE = ColorType(mod.getEnumValue(ctx, "RGBA_BYTE")) + RGBA_WORD = ColorType(mod.getEnumValue(ctx, "RGBA_WORD")) + RGBA_DOUBLE = ColorType(mod.getEnumValue(ctx, "RGBA_DOUBLE")) + COLOR_STRING = ColorType(mod.getEnumValue(ctx, "COLOR_STRING")) + COLOR_INDEX = ColorType(mod.getEnumValue(ctx, "COLOR_INDEX")) + // bind API values. + API_RENDER = API(mod.getEnumValue(ctx, "API_render")) + API_LAYOUT = API(mod.getEnumValue(ctx, "API_layout")) + API_TEXTLAYOUT = API(mod.getEnumValue(ctx, "API_textlayout")) + API_DEVICE = API(mod.getEnumValue(ctx, "API_device")) + API_LOADIMAGE = API(mod.getEnumValue(ctx, "API_loadimage")) +} + +func (m *WasmModule) getEnumValue(ctx context.Context, value string) int { + ret, err := mod.ExportedFunction("wasm_bridge_get_" + value).Call(ctx) + if err != nil { + panic(err) + } + return mod.toInt(ret[0]) +} + +func WasmPtr(v wasmStruct) uint64 { + return v.getPtr() +} + +func getCompilationCache() wazero.CompilationCache { + tmpDir := os.TempDir() + if tmpDir == "" { + return nil + } + cacheDir := filepath.Join(tmpDir, "go-graphviz") + if _, err := os.Stat(cacheDir); err != nil { + if err := os.Mkdir(cacheDir, 0o755); err != nil { + return nil + } + } + cache, err := wazero.NewCompilationCacheWithDir(cacheDir) + if err != nil { + return nil + } + return cache +} + +func (m *WasmModule) ExportedFunction(name string) api.Function { + return m.mod.ExportedFunction(name) +} + +func (m *WasmModule) malloc(ctx context.Context, size uint64) (uint64, error) { + ret, err := m.ExportedFunction("malloc").Call(ctx, size) + if err != nil { + return 0, err + } + return ret[0], nil +} + +func (m *WasmModule) free(ctx context.Context, p uint64) error { + if _, err := m.ExportedFunction("free").Call(ctx, p); err != nil { + return err + } + return nil +} + +func (m *WasmModule) newObject(ctx context.Context, name string) (uint64, error) { + ret, err := mod.ExportedFunction("wasm_bridge_new_" + name).Call(ctx) + if err != nil { + return 0, err + } + return ret[0], nil +} + +func (m *WasmModule) setField(ctx context.Context, name string, recv, arg uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_set_"+name).Call(ctx, recv, arg); err != nil { + return err + } + return nil +} + +func (m *WasmModule) setFieldFunction(ctx context.Context, name string, recv uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_set_"+name).Call(ctx, recv); err != nil { + return err + } + return nil +} + +func (m *WasmModule) getField(ctx context.Context, name string, recv uint64) (ret uint64, e error) { + retPtr, err := m.NewPtr(ctx) + if err != nil { + return 0, err + } + defer func() { + e = m.free(ctx, retPtr) + }() + + if _, err := m.ExportedFunction("wasm_bridge_get_"+name).Call(ctx, recv, retPtr); err != nil { + return 0, err + } + p, err := m.readU32(retPtr) + if err != nil { + return 0, err + } + return p, nil +} + +func (m *WasmModule) call(ctx context.Context, name string, args ...uint64) error { + if _, err := mod.ExportedFunction("wasm_bridge_"+name).Call(ctx, args...); err != nil { + return err + } + return nil +} + +func (m *WasmModule) callWithRet(ctx context.Context, name string, args ...uint64) (r uint64, e error) { + retPtr, err := m.NewPtr(ctx) + if err != nil { + return 0, err + } + defer func() { + e = m.free(ctx, retPtr) + }() + + if err := m.call(ctx, name, append(append([]uint64{}, args...), retPtr)...); err != nil { + return 0, err + } + p, err := m.readU32(retPtr) + if err != nil { + return 0, err + } + return p, nil +} + +func (m *WasmModule) read(addr, length uint64) ([]byte, error) { + bytes, ok := m.mod.Memory().Read(uint32(addr), uint32(length)) + if !ok { + return nil, fmt.Errorf( + `failed to read wasm memory: (ptr, size) = (%d, %d) and memory size is %d`, + addr, length, m.mod.Memory().Size(), + ) + } + return bytes, nil +} + +func (m *WasmModule) readU32(addr uint64) (uint64, error) { + p, ok := m.mod.Memory().ReadUint32Le(uint32(addr)) + if !ok { + return 0, fmt.Errorf( + `failed to read wasm memory: (ptr, size) = (%d, 4) and memory size is %d`, + addr, m.mod.Memory().Size(), + ) + } + return uint64(p), nil +} + +func (m *WasmModule) write(p uint64, b []byte) error { + if !m.mod.Memory().Write(uint32(p), b) { + return fmt.Errorf( + `failed to write wasm memory: (ptr, size) = (%d, %d) and memory size is %d`, + p, len(b), m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeU32(p uint64, v uint32) error { + if !m.mod.Memory().WriteUint32Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeU64(p uint64, v uint64) error { + if !m.mod.Memory().WriteUint64Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) writeF64(p uint64, v float64) error { + if !m.mod.Memory().WriteFloat64Le(uint32(p), v) { + return fmt.Errorf( + `failed to write wasm memory: ptr = %d and memory size is %d`, + p, m.mod.Memory().Size(), + ) + } + return nil +} + +func (m *WasmModule) NewPtr(ctx context.Context) (uint64, error) { + return m.malloc(ctx, 4) +} + +func (m *WasmModule) toSlice(ctx context.Context, p uint64) ([]uint64, error) { + length, err := m.readU32(p) + if err != nil { + return nil, err + } + data, err := m.readU32(p + 4) + if err != nil { + return nil, err + } + var ret []uint64 + for i := uint64(0); i < length; i++ { + p, err := m.readU32(data + 8*i) + if err != nil { + return nil, err + } + ret = append(ret, p) + } + return ret, nil +} + +func (m *WasmModule) toBool(p uint64) bool { + if p == 1 { + return true + } + return false +} + +func (m *WasmModule) toBoolSlice(v []uint64) []bool { + var ret []bool + for _, vv := range v { + ret = append(ret, m.toBool(vv)) + } + return ret +} + +func (m *WasmModule) toFloat32(ctx context.Context, p uint64) (float32, error) { + v, err := m.toString(ctx, p) + if err != nil { + return 0, err + } + f64, err := strconv.ParseFloat(v, 64) + if err != nil { + return 0, err + } + return float32(f64), nil +} + +func (m *WasmModule) toFloat32Slice(ctx context.Context, v []uint64) ([]float32, error) { + var ret []float32 + for _, vv := range v { + f, err := m.toFloat32(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, f) + } + return ret, nil +} + +func (m *WasmModule) toFloat64(ctx context.Context, p uint64) (float64, error) { + v, err := m.toString(ctx, p) + if err != nil { + return 0, err + } + f64, err := strconv.ParseFloat(v, 64) + if err != nil { + return 0, err + } + return f64, nil +} + +func (m *WasmModule) toFloat64Slice(ctx context.Context, v []uint64) ([]float64, error) { + var ret []float64 + for _, vv := range v { + f, err := m.toFloat64(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, f) + } + return ret, nil +} + +func (m *WasmModule) toInt(p uint64) int { + return int(p) +} + +func (m *WasmModule) toIntSlice(v []uint64) []int { + var ret []int + for _, vv := range v { + ret = append(ret, m.toInt(vv)) + } + return ret +} + +func (m *WasmModule) toInt32(v uint64) int32 { + return int32(v) +} + +func (m *WasmModule) toInt32Slice(v []uint64) []int32 { + var ret []int32 + for _, vv := range v { + ret = append(ret, m.toInt32(vv)) + } + return ret +} + +func (m *WasmModule) toInt64(v uint64) int64 { + return int64(v) +} + +func (m *WasmModule) toInt64Slice(v []uint64) []int64 { + var ret []int64 + for _, vv := range v { + ret = append(ret, m.toInt64(vv)) + } + return ret +} + +func (m *WasmModule) toUint(p uint64) uint { + return uint(p) +} + +func (m *WasmModule) toUintSlice(v []uint64) []uint { + var ret []uint + for _, vv := range v { + ret = append(ret, m.toUint(vv)) + } + return ret +} + +func (m *WasmModule) toUint32(v uint64) uint32 { + return uint32(v) +} + +func (m *WasmModule) toUint32Slice(v []uint64) []uint32 { + var ret []uint32 + for _, vv := range v { + ret = append(ret, m.toUint32(vv)) + } + return ret +} + +func (m *WasmModule) toUint64(v uint64) uint64 { + return v +} + +func (m *WasmModule) toUint64Slice(v []uint64) []uint64 { + return v +} + +func (m *WasmModule) toAny(v uint64) any { + return v +} + +func (m *WasmModule) toString(ctx context.Context, p uint64) (string, error) { + if p == 0 { + return "", nil + } + dataAddr, err := m.readU32(p) + if err != nil { + return "", err + } + length, err := m.readU32(p + 4) + if err != nil { + return "", err + } + if length == 0 { + return "", nil + } + bytes, err := m.read(dataAddr, length) + if err != nil { + return "", err + } + return string(bytes), nil +} + +func (m *WasmModule) toStringSlice(ctx context.Context, v []uint64) ([]string, error) { + var ret []string + for _, vv := range v { + s, err := m.toString(ctx, vv) + if err != nil { + return nil, err + } + ret = append(ret, s) + } + return ret, nil +} + +func (m *WasmModule) toObjectWasmValue(_ context.Context, v wasmStruct) (uint64, error) { + return v.getPtr(), nil +} + +func (m *WasmModule) toAnyWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case wasmStruct: + return vv.getPtr(), nil + } + return 0, nil +} + +func (m *WasmModule) toPtrWasmValue(ctx context.Context, _ any) (uint64, error) { + return m.NewPtr(ctx) +} + +type wasmStruct interface { + getPtr() uint64 +} + +type numberType interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 +} + +func (m *WasmModule) toIntWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case int: + return uint64(vv), nil + case int8: + return uint64(vv), nil + case int16: + return uint64(vv), nil + case int32: + return uint64(vv), nil + case int64: + return uint64(vv), nil + } + return uint64(reflect.ValueOf(v).Int()), nil +} + +func (m *WasmModule) toInt32WasmValue(_ context.Context, v int32) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toInt64WasmValue(_ context.Context, v int64) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toUintWasmValue(_ context.Context, v any) (uint64, error) { + switch vv := v.(type) { + case uint: + return uint64(vv), nil + case uint8: + return uint64(vv), nil + case uint16: + return uint64(vv), nil + case uint32: + return uint64(vv), nil + case uint64: + return vv, nil + } + return 0, nil +} + +func (m *WasmModule) toUint32WasmValue(_ context.Context, v uint32) (uint64, error) { + return uint64(v), nil +} + +func (m *WasmModule) toUint64WasmValue(_ context.Context, v uint64) (uint64, error) { + return v, nil +} + +func (m *WasmModule) toBoolWasmValue(_ context.Context, v bool) (uint64, error) { + if v { + return 1, nil + } + return 0, nil +} + +func (m *WasmModule) toFuncWasmValue(_ context.Context, _ any) (uint64, error) { + return 0, nil +} + +func (m *WasmModule) toFloatWasmValue(_ context.Context, v float32) (uint64, error) { + return api.EncodeF32(v), nil +} + +func (m *WasmModule) toDoubleWasmValue(_ context.Context, v float64) (uint64, error) { + return api.EncodeF64(v), nil +} + +func (m *WasmModule) toIntArrayWasmValue(ctx context.Context, v []int) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toInt32ArrayWasmValue(ctx context.Context, v []int32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toInt64ArrayWasmValue(ctx context.Context, v []int64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUintArrayWasmValue(ctx context.Context, v []uint) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUint32ArrayWasmValue(ctx context.Context, v []uint32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, uint64(vv)); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toUint64ArrayWasmValue(ctx context.Context, v []uint64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeU64(ptr, vv); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toDoubleArrayWasmValue(ctx context.Context, v []float64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + if err := m.writeF64(ptr, vv); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toFloatStringWasmValue(ctx context.Context, v float32) (uint64, error) { + return m.toStringWasmValue(ctx, fmt.Sprint(v)) +} + +func (m *WasmModule) toDoubleStringWasmValue(ctx context.Context, v float64) (uint64, error) { + return m.toStringWasmValue(ctx, fmt.Sprint(v)) +} + +func (m *WasmModule) toFloatStringArrayWasmValue(ctx context.Context, v []float32) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + f, err := m.toFloatStringWasmValue(ctx, vv) + if err != nil { + return 0, err + } + if err := m.writeU64(ptr, f); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toDoubleStringArrayWasmValue(ctx context.Context, v []float64) (uint64, error) { + ret, err := m.malloc(ctx, uint64(8*len(v))) + if err != nil { + return 0, err + } + ptr := ret + for _, vv := range v { + f, err := m.toDoubleStringWasmValue(ctx, vv) + if err != nil { + return 0, err + } + if err := m.writeU64(ptr, f); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +func (m *WasmModule) toStringWasmValue(ctx context.Context, s string) (uint64, error) { + ret, err := m.malloc(ctx, uint64(len(s))+1) + if err != nil { + return 0, err + } + if err := m.write(ret, append([]byte(s), 0)); err != nil { + return 0, err + } + return ret, nil +} + +func (m *WasmModule) toStringArrayWasmValue(ctx context.Context, v []string) (uint64, error) { + return 0, nil +} + +func (m *WasmModule) toObjectArrayWasmValue(ctx context.Context, v any) (uint64, error) { + ret, err := m.malloc(ctx, 4+4) // GoSlice + if err != nil { + return 0, err + } + rv := reflect.ValueOf(v) + if err := m.writeU32(ret, uint32(rv.Len())); err != nil { + return 0, err + } + data, err := m.malloc(ctx, uint64(8*rv.Len())) + if err != nil { + return 0, err + } + if err := m.writeU32(ret+4, uint32(data)); err != nil { + return 0, err + } + ptr := data + for i := 0; i < rv.Len(); i++ { + vv := rv.Index(i).Interface().(wasmStruct) + if err := m.writeU32(ptr, uint32(vv.getPtr())); err != nil { + return 0, err + } + ptr += 8 + } + return ret, nil +} + +type Record struct { + ptr uint64 +} + +func NewRecord(ctx context.Context) (*Record, error) { + o, err := mod.newObject(ctx, "Record") + if err != nil { + return nil, err + } + return newRecord(o), nil +} + +func newRecord(ptr uint64) *Record { + if ptr == 0 { + return nil + } + return &Record{ptr: ptr} +} + +func (v *Record) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newRecordSlice(v []uint64) []*Record { + ret := make([]*Record, 0, len(v)) + for _, vv := range v { + ret = append(ret, newRecord(vv)) + } + return ret +} +func (v *Record) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Record_name", v.getPtr(), arg) +} + +func (v *Record) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Record) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Record_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Record) SetNext(_arg *Record) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Record_next", v.getPtr(), arg) +} + +func (v *Record) GetNext() *Record { + ret, err := v.getNext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Record) getNext(ctx context.Context) (*Record, error) { + var zero *Record + p, err := mod.getField(ctx, "Record_next", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRecord(p) + return ret, nil +} + +type Tag struct { + ptr uint64 +} + +func NewTag(ctx context.Context) (*Tag, error) { + o, err := mod.newObject(ctx, "Tag") + if err != nil { + return nil, err + } + return newTag(o), nil +} + +func newTag(ptr uint64) *Tag { + if ptr == 0 { + return nil + } + return &Tag{ptr: ptr} +} + +func (v *Tag) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newTagSlice(v []uint64) []*Tag { + ret := make([]*Tag, 0, len(v)) + for _, vv := range v { + ret = append(ret, newTag(vv)) + } + return ret +} +func (v *Tag) SetObjectType(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Tag_object_type", v.getPtr(), arg) +} + +func (v *Tag) GetObjectType() uint32 { + ret, err := v.getObjectType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Tag) getObjectType(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Tag_object_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Tag) SetMtflock(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Tag_mtflock", v.getPtr(), arg) +} + +func (v *Tag) GetMtflock() uint32 { + ret, err := v.getMtflock(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Tag) getMtflock(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Tag_mtflock", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Tag) SetAttrwf(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Tag_attrwf", v.getPtr(), arg) +} + +func (v *Tag) GetAttrwf() uint32 { + ret, err := v.getAttrwf(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Tag) getAttrwf(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Tag_attrwf", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Tag) SetSeq(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Tag_seq", v.getPtr(), arg) +} + +func (v *Tag) GetSeq() uint32 { + ret, err := v.getSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Tag) getSeq(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Tag_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Tag) SetId(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Tag_id", v.getPtr(), arg) +} + +func (v *Tag) GetId() uint64 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Tag) getId(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "Tag_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +type Object struct { + ptr uint64 +} + +func NewObject(ctx context.Context) (*Object, error) { + o, err := mod.newObject(ctx, "Object") + if err != nil { + return nil, err + } + return newObject(o), nil +} + +func newObject(ptr uint64) *Object { + if ptr == 0 { + return nil + } + return &Object{ptr: ptr} +} + +func (v *Object) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newObjectSlice(v []uint64) []*Object { + ret := make([]*Object, 0, len(v)) + for _, vv := range v { + ret = append(ret, newObject(vv)) + } + return ret +} +func (v *Object) SetTag(_arg *Tag) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Object_tag", v.getPtr(), arg) +} + +func (v *Object) GetTag() *Tag { + ret, err := v.getTag(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Object) getTag(ctx context.Context) (*Tag, error) { + var zero *Tag + p, err := mod.getField(ctx, "Object_tag", v.getPtr()) + if err != nil { + return zero, err + } + ret := newTag(p) + return ret, nil +} + +func (v *Object) SetData(_arg *Record) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Object_data", v.getPtr(), arg) +} + +func (v *Object) GetData() *Record { + ret, err := v.getData(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Object) getData(ctx context.Context) (*Record, error) { + var zero *Record + p, err := mod.getField(ctx, "Object_data", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRecord(p) + return ret, nil +} + +type SubNode struct { + ptr uint64 +} + +func NewSubNode(ctx context.Context) (*SubNode, error) { + o, err := mod.newObject(ctx, "SubNode") + if err != nil { + return nil, err + } + return newSubNode(o), nil +} + +func newSubNode(ptr uint64) *SubNode { + if ptr == 0 { + return nil + } + return &SubNode{ptr: ptr} +} + +func (v *SubNode) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newSubNodeSlice(v []uint64) []*SubNode { + ret := make([]*SubNode, 0, len(v)) + for _, vv := range v { + ret = append(ret, newSubNode(vv)) + } + return ret +} +func (v *SubNode) SetSeqLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_seq_link", v.getPtr(), arg) +} + +func (v *SubNode) GetSeqLink() *DictLink { + ret, err := v.getSeqLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getSeqLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_seq_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *SubNode) SetIdLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_id_link", v.getPtr(), arg) +} + +func (v *SubNode) GetIdLink() *DictLink { + ret, err := v.getIdLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getIdLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_id_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *SubNode) SetNode(_arg *Node) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_node", v.getPtr(), arg) +} + +func (v *SubNode) GetNode() *Node { + ret, err := v.getNode(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getNode(ctx context.Context) (*Node, error) { + var zero *Node + p, err := mod.getField(ctx, "SubNode_node", v.getPtr()) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *SubNode) SetInId(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_in_id", v.getPtr(), arg) +} + +func (v *SubNode) GetInId() *DictLink { + ret, err := v.getInId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getInId(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_in_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *SubNode) SetOutId(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_out_id", v.getPtr(), arg) +} + +func (v *SubNode) GetOutId() *DictLink { + ret, err := v.getOutId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getOutId(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_out_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *SubNode) SetInSeq(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_in_seq", v.getPtr(), arg) +} + +func (v *SubNode) GetInSeq() *DictLink { + ret, err := v.getInSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getInSeq(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_in_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *SubNode) SetOutSeq(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SubNode_out_seq", v.getPtr(), arg) +} + +func (v *SubNode) GetOutSeq() *DictLink { + ret, err := v.getOutSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SubNode) getOutSeq(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "SubNode_out_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +type Node struct { + ptr uint64 +} + +func NewNode(ctx context.Context) (*Node, error) { + o, err := mod.newObject(ctx, "Node") + if err != nil { + return nil, err + } + return newNode(o), nil +} + +func newNode(ptr uint64) *Node { + if ptr == 0 { + return nil + } + return &Node{ptr: ptr} +} + +func (v *Node) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newNodeSlice(v []uint64) []*Node { + ret := make([]*Node, 0, len(v)) + for _, vv := range v { + ret = append(ret, newNode(vv)) + } + return ret +} +func (v *Node) SetBase(_arg *Object) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Node_base", v.getPtr(), arg) +} + +func (v *Node) GetBase() *Object { + ret, err := v.getBase(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Node) getBase(ctx context.Context) (*Object, error) { + var zero *Object + p, err := mod.getField(ctx, "Node_base", v.getPtr()) + if err != nil { + return zero, err + } + ret := newObject(p) + return ret, nil +} + +func (v *Node) SetRoot(_arg *Graph) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Node_root", v.getPtr(), arg) +} + +func (v *Node) GetRoot() *Graph { + ret, err := v.getRoot(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Node) getRoot(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.getField(ctx, "Node_root", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Node) SetMainsub(_arg *SubNode) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Node_mainsub", v.getPtr(), arg) +} + +func (v *Node) GetMainsub() *SubNode { + ret, err := v.getMainsub(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Node) getMainsub(ctx context.Context) (*SubNode, error) { + var zero *SubNode + p, err := mod.getField(ctx, "Node_mainsub", v.getPtr()) + if err != nil { + return zero, err + } + ret := newSubNode(p) + return ret, nil +} + +type Edge struct { + ptr uint64 +} + +func NewEdge(ctx context.Context) (*Edge, error) { + o, err := mod.newObject(ctx, "Edge") + if err != nil { + return nil, err + } + return newEdge(o), nil +} + +func newEdge(ptr uint64) *Edge { + if ptr == 0 { + return nil + } + return &Edge{ptr: ptr} +} + +func (v *Edge) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newEdgeSlice(v []uint64) []*Edge { + ret := make([]*Edge, 0, len(v)) + for _, vv := range v { + ret = append(ret, newEdge(vv)) + } + return ret +} +func (v *Edge) SetBase(_arg *Object) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Edge_base", v.getPtr(), arg) +} + +func (v *Edge) GetBase() *Object { + ret, err := v.getBase(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Edge) getBase(ctx context.Context) (*Object, error) { + var zero *Object + p, err := mod.getField(ctx, "Edge_base", v.getPtr()) + if err != nil { + return zero, err + } + ret := newObject(p) + return ret, nil +} + +func (v *Edge) SetIdLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Edge_id_link", v.getPtr(), arg) +} + +func (v *Edge) GetIdLink() *DictLink { + ret, err := v.getIdLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Edge) getIdLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "Edge_id_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Edge) SetSeqLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Edge_seq_link", v.getPtr(), arg) +} + +func (v *Edge) GetSeqLink() *DictLink { + ret, err := v.getSeqLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Edge) getSeqLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "Edge_seq_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Edge) SetNode(_arg *Node) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Edge_node", v.getPtr(), arg) +} + +func (v *Edge) GetNode() *Node { + ret, err := v.getNode(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Edge) getNode(ctx context.Context) (*Node, error) { + var zero *Node + p, err := mod.getField(ctx, "Edge_node", v.getPtr()) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +type EdgePair struct { + ptr uint64 +} + +func NewEdgePair(ctx context.Context) (*EdgePair, error) { + o, err := mod.newObject(ctx, "EdgePair") + if err != nil { + return nil, err + } + return newEdgePair(o), nil +} + +func newEdgePair(ptr uint64) *EdgePair { + if ptr == 0 { + return nil + } + return &EdgePair{ptr: ptr} +} + +func (v *EdgePair) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newEdgePairSlice(v []uint64) []*EdgePair { + ret := make([]*EdgePair, 0, len(v)) + for _, vv := range v { + ret = append(ret, newEdgePair(vv)) + } + return ret +} +func (v *EdgePair) SetOut(_arg *Edge) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "EdgePair_out", v.getPtr(), arg) +} + +func (v *EdgePair) GetOut() *Edge { + ret, err := v.getOut(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *EdgePair) getOut(ctx context.Context) (*Edge, error) { + var zero *Edge + p, err := mod.getField(ctx, "EdgePair_out", v.getPtr()) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *EdgePair) SetIn(_arg *Edge) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "EdgePair_in", v.getPtr(), arg) +} + +func (v *EdgePair) GetIn() *Edge { + ret, err := v.getIn(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *EdgePair) getIn(ctx context.Context) (*Edge, error) { + var zero *Edge + p, err := mod.getField(ctx, "EdgePair_in", v.getPtr()) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +type GraphDescriptor struct { + ptr uint64 +} + +func NewGraphDescriptor(ctx context.Context) (*GraphDescriptor, error) { + o, err := mod.newObject(ctx, "GraphDescriptor") + if err != nil { + return nil, err + } + return newGraphDescriptor(o), nil +} + +func newGraphDescriptor(ptr uint64) *GraphDescriptor { + if ptr == 0 { + return nil + } + return &GraphDescriptor{ptr: ptr} +} + +func (v *GraphDescriptor) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newGraphDescriptorSlice(v []uint64) []*GraphDescriptor { + ret := make([]*GraphDescriptor, 0, len(v)) + for _, vv := range v { + ret = append(ret, newGraphDescriptor(vv)) + } + return ret +} +func (v *GraphDescriptor) SetDirected(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_directed", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetDirected() uint32 { + ret, err := v.getDirected(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getDirected(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_directed", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetStrict(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_strict", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetStrict() uint32 { + ret, err := v.getStrict(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getStrict(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_strict", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetNoLoop(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_no_loop", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetNoLoop() uint32 { + ret, err := v.getNoLoop(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getNoLoop(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_no_loop", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetMaingraph(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_maingraph", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetMaingraph() uint32 { + ret, err := v.getMaingraph(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getMaingraph(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_maingraph", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetNoWrite(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_no_write", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetNoWrite() uint32 { + ret, err := v.getNoWrite(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getNoWrite(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_no_write", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetHasAttrs(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_has_attrs", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetHasAttrs() uint32 { + ret, err := v.getHasAttrs(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getHasAttrs(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_has_attrs", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *GraphDescriptor) SetHasCmpnd(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "GraphDescriptor_has_cmpnd", v.getPtr(), arg) +} + +func (v *GraphDescriptor) GetHasCmpnd() uint32 { + ret, err := v.getHasCmpnd(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *GraphDescriptor) getHasCmpnd(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "GraphDescriptor_has_cmpnd", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +type IDAllocator struct { + ptr uint64 +} + +func NewIDAllocator(ctx context.Context) (*IDAllocator, error) { + o, err := mod.newObject(ctx, "IDAllocator") + if err != nil { + return nil, err + } + return newIDAllocator(o), nil +} + +func newIDAllocator(ptr uint64) *IDAllocator { + if ptr == 0 { + return nil + } + return &IDAllocator{ptr: ptr} +} + +func (v *IDAllocator) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newIDAllocatorSlice(v []uint64) []*IDAllocator { + ret := make([]*IDAllocator, 0, len(v)) + for _, vv := range v { + ret = append(ret, newIDAllocator(vv)) + } + return ret +} +func (v *IDAllocator) SetOpen(ctx context.Context, arg *CallbackFunc[func(context.Context, *Graph, *ClientDiscipline) (any, error)]) error { + if mod.lookupFuncMap.IDAllocator_Open == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Open before") + } + mod.callbackFuncMap.IDAllocator_Open[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_open", v.getPtr()) +} + +func (v *IDAllocator) SetMap(ctx context.Context, arg *CallbackFunc[func(context.Context, any, int, string, *uint64, int) (int32, error)]) error { + if mod.lookupFuncMap.IDAllocator_Map == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Map before") + } + mod.callbackFuncMap.IDAllocator_Map[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_map", v.getPtr()) +} + +func (v *IDAllocator) SetAlloc(ctx context.Context, arg *CallbackFunc[func(context.Context, any, int, uint64) (int32, error)]) error { + if mod.lookupFuncMap.IDAllocator_Alloc == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Alloc before") + } + mod.callbackFuncMap.IDAllocator_Alloc[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_alloc", v.getPtr()) +} + +func (v *IDAllocator) SetFree(ctx context.Context, arg *CallbackFunc[func(context.Context, any, int, uint64) error]) error { + if mod.lookupFuncMap.IDAllocator_Free == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Free before") + } + mod.callbackFuncMap.IDAllocator_Free[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_free", v.getPtr()) +} + +func (v *IDAllocator) SetPrint(ctx context.Context, arg *CallbackFunc[func(context.Context, any, int, uint64) (string, error)]) error { + if mod.lookupFuncMap.IDAllocator_Print == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Print before") + } + mod.callbackFuncMap.IDAllocator_Print[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_print", v.getPtr()) +} + +func (v *IDAllocator) SetClose(ctx context.Context, arg *CallbackFunc[func(context.Context, any) error]) error { + if mod.lookupFuncMap.IDAllocator_Close == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_Close before") + } + mod.callbackFuncMap.IDAllocator_Close[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_close", v.getPtr()) +} + +func (v *IDAllocator) SetIdregister(ctx context.Context, arg *CallbackFunc[func(context.Context, any, int, any) error]) error { + if mod.lookupFuncMap.IDAllocator_IdRegister == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IDAllocator_IdRegister before") + } + mod.callbackFuncMap.IDAllocator_IdRegister[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IDAllocator_idregister", v.getPtr()) +} + +type IOService struct { + ptr uint64 +} + +func NewIOService(ctx context.Context) (*IOService, error) { + o, err := mod.newObject(ctx, "IOService") + if err != nil { + return nil, err + } + return newIOService(o), nil +} + +func newIOService(ptr uint64) *IOService { + if ptr == 0 { + return nil + } + return &IOService{ptr: ptr} +} + +func (v *IOService) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newIOServiceSlice(v []uint64) []*IOService { + ret := make([]*IOService, 0, len(v)) + for _, vv := range v { + ret = append(ret, newIOService(vv)) + } + return ret +} +func (v *IOService) SetAfread(ctx context.Context, arg *CallbackFunc[func(context.Context, any, string, int) (int, error)]) error { + if mod.lookupFuncMap.IOService_Afread == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IOService_Afread before") + } + mod.callbackFuncMap.IOService_Afread[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IOService_afread", v.getPtr()) +} + +func (v *IOService) SetPutstr(ctx context.Context, arg *CallbackFunc[func(context.Context, any, string) (int, error)]) error { + if mod.lookupFuncMap.IOService_Putstr == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IOService_Putstr before") + } + mod.callbackFuncMap.IOService_Putstr[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IOService_putstr", v.getPtr()) +} + +func (v *IOService) SetFlush(ctx context.Context, arg *CallbackFunc[func(context.Context, any) (int, error)]) error { + if mod.lookupFuncMap.IOService_Flush == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_IOService_Flush before") + } + mod.callbackFuncMap.IOService_Flush[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "IOService_flush", v.getPtr()) +} + +type ClientDiscipline struct { + ptr uint64 +} + +func NewClientDiscipline(ctx context.Context) (*ClientDiscipline, error) { + o, err := mod.newObject(ctx, "ClientDiscipline") + if err != nil { + return nil, err + } + return newClientDiscipline(o), nil +} + +func newClientDiscipline(ptr uint64) *ClientDiscipline { + if ptr == 0 { + return nil + } + return &ClientDiscipline{ptr: ptr} +} + +func (v *ClientDiscipline) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newClientDisciplineSlice(v []uint64) []*ClientDiscipline { + ret := make([]*ClientDiscipline, 0, len(v)) + for _, vv := range v { + ret = append(ret, newClientDiscipline(vv)) + } + return ret +} +func (v *ClientDiscipline) SetId(_arg *IDAllocator) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ClientDiscipline_id", v.getPtr(), arg) +} + +func (v *ClientDiscipline) GetId() *IDAllocator { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ClientDiscipline) getId(ctx context.Context) (*IDAllocator, error) { + var zero *IDAllocator + p, err := mod.getField(ctx, "ClientDiscipline_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := newIDAllocator(p) + return ret, nil +} + +func (v *ClientDiscipline) SetIo(_arg *IOService) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ClientDiscipline_io", v.getPtr(), arg) +} + +func (v *ClientDiscipline) GetIo() *IOService { + ret, err := v.getIo(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ClientDiscipline) getIo(ctx context.Context) (*IOService, error) { + var zero *IOService + p, err := mod.getField(ctx, "ClientDiscipline_io", v.getPtr()) + if err != nil { + return zero, err + } + ret := newIOService(p) + return ret, nil +} + +type State struct { + ptr uint64 +} + +func NewState(ctx context.Context) (*State, error) { + o, err := mod.newObject(ctx, "State") + if err != nil { + return nil, err + } + return newState(o), nil +} + +func newState(ptr uint64) *State { + if ptr == 0 { + return nil + } + return &State{ptr: ptr} +} + +func (v *State) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newStateSlice(v []uint64) []*State { + ret := make([]*State, 0, len(v)) + for _, vv := range v { + ret = append(ret, newState(vv)) + } + return ret +} +func (v *State) SetId(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "State_id", v.getPtr(), arg) +} + +func (v *State) GetId() any { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *State) getId(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "State_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +type ClientEventCallback struct { + ptr uint64 +} + +func NewClientEventCallback(ctx context.Context) (*ClientEventCallback, error) { + o, err := mod.newObject(ctx, "ClientEventCallback") + if err != nil { + return nil, err + } + return newClientEventCallback(o), nil +} + +func newClientEventCallback(ptr uint64) *ClientEventCallback { + if ptr == 0 { + return nil + } + return &ClientEventCallback{ptr: ptr} +} + +func (v *ClientEventCallback) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newClientEventCallbackSlice(v []uint64) []*ClientEventCallback { + ret := make([]*ClientEventCallback, 0, len(v)) + for _, vv := range v { + ret = append(ret, newClientEventCallback(vv)) + } + return ret +} + +type CallbackStack struct { + ptr uint64 +} + +func NewCallbackStack(ctx context.Context) (*CallbackStack, error) { + o, err := mod.newObject(ctx, "CallbackStack") + if err != nil { + return nil, err + } + return newCallbackStack(o), nil +} + +func newCallbackStack(ptr uint64) *CallbackStack { + if ptr == 0 { + return nil + } + return &CallbackStack{ptr: ptr} +} + +func (v *CallbackStack) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newCallbackStackSlice(v []uint64) []*CallbackStack { + ret := make([]*CallbackStack, 0, len(v)) + for _, vv := range v { + ret = append(ret, newCallbackStack(vv)) + } + return ret +} +func (v *CallbackStack) SetF(_arg *ClientEventCallback) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CallbackStack_f", v.getPtr(), arg) +} + +func (v *CallbackStack) GetF() *ClientEventCallback { + ret, err := v.getF(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CallbackStack) getF(ctx context.Context) (*ClientEventCallback, error) { + var zero *ClientEventCallback + p, err := mod.getField(ctx, "CallbackStack_f", v.getPtr()) + if err != nil { + return zero, err + } + ret := newClientEventCallback(p) + return ret, nil +} + +func (v *CallbackStack) SetState(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CallbackStack_state", v.getPtr(), arg) +} + +func (v *CallbackStack) GetState() any { + ret, err := v.getState(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CallbackStack) getState(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "CallbackStack_state", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *CallbackStack) SetPrev(_arg *CallbackStack) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CallbackStack_prev", v.getPtr(), arg) +} + +func (v *CallbackStack) GetPrev() *CallbackStack { + ret, err := v.getPrev(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CallbackStack) getPrev(ctx context.Context) (*CallbackStack, error) { + var zero *CallbackStack + p, err := mod.getField(ctx, "CallbackStack_prev", v.getPtr()) + if err != nil { + return zero, err + } + ret := newCallbackStack(p) + return ret, nil +} + +type CommonFields struct { + ptr uint64 +} + +func NewCommonFields(ctx context.Context) (*CommonFields, error) { + o, err := mod.newObject(ctx, "CommonFields") + if err != nil { + return nil, err + } + return newCommonFields(o), nil +} + +func newCommonFields(ptr uint64) *CommonFields { + if ptr == 0 { + return nil + } + return &CommonFields{ptr: ptr} +} + +func (v *CommonFields) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newCommonFieldsSlice(v []uint64) []*CommonFields { + ret := make([]*CommonFields, 0, len(v)) + for _, vv := range v { + ret = append(ret, newCommonFields(vv)) + } + return ret +} +func (v *CommonFields) SetDisc(_arg *ClientDiscipline) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_disc", v.getPtr(), arg) +} + +func (v *CommonFields) GetDisc() *ClientDiscipline { + ret, err := v.getDisc(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getDisc(ctx context.Context) (*ClientDiscipline, error) { + var zero *ClientDiscipline + p, err := mod.getField(ctx, "CommonFields_disc", v.getPtr()) + if err != nil { + return zero, err + } + ret := newClientDiscipline(p) + return ret, nil +} + +func (v *CommonFields) SetState(_arg *State) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_state", v.getPtr(), arg) +} + +func (v *CommonFields) GetState() *State { + ret, err := v.getState(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getState(ctx context.Context) (*State, error) { + var zero *State + p, err := mod.getField(ctx, "CommonFields_state", v.getPtr()) + if err != nil { + return zero, err + } + ret := newState(p) + return ret, nil +} + +func (v *CommonFields) SetStrdict(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_strdict", v.getPtr(), arg) +} + +func (v *CommonFields) GetStrdict() *Dict { + ret, err := v.getStrdict(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getStrdict(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "CommonFields_strdict", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *CommonFields) SetSeq(_arg []uint64) error { + ctx := context.Background() + arg, err := mod.toUint64ArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_seq", v.getPtr(), arg) +} + +func (v *CommonFields) GetSeq() []uint64 { + ret, err := v.getSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getSeq(ctx context.Context) ([]uint64, error) { + var zero []uint64 + p, err := mod.getField(ctx, "CommonFields_seq", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := mod.toUint64Slice(slice) + return ret, nil +} + +func (v *CommonFields) SetCb(_arg *CallbackStack) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_cb", v.getPtr(), arg) +} + +func (v *CommonFields) GetCb() *CallbackStack { + ret, err := v.getCb(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getCb(ctx context.Context) (*CallbackStack, error) { + var zero *CallbackStack + p, err := mod.getField(ctx, "CommonFields_cb", v.getPtr()) + if err != nil { + return zero, err + } + ret := newCallbackStack(p) + return ret, nil +} + +func (v *CommonFields) SetLookupByName(_arg []*Dict) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_lookup_by_name", v.getPtr(), arg) +} + +func (v *CommonFields) GetLookupByName() []*Dict { + ret, err := v.getLookupByName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getLookupByName(ctx context.Context) ([]*Dict, error) { + var zero []*Dict + p, err := mod.getField(ctx, "CommonFields_lookup_by_name", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newDictSlice(slice) + return ret, nil +} + +func (v *CommonFields) SetLookupById(_arg []*Dict) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "CommonFields_lookup_by_id", v.getPtr(), arg) +} + +func (v *CommonFields) GetLookupById() []*Dict { + ret, err := v.getLookupById(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *CommonFields) getLookupById(ctx context.Context) ([]*Dict, error) { + var zero []*Dict + p, err := mod.getField(ctx, "CommonFields_lookup_by_id", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newDictSlice(slice) + return ret, nil +} + +type Graph struct { + ptr uint64 +} + +func NewGraph(ctx context.Context) (*Graph, error) { + o, err := mod.newObject(ctx, "Graph") + if err != nil { + return nil, err + } + return newGraph(o), nil +} + +func newGraph(ptr uint64) *Graph { + if ptr == 0 { + return nil + } + return &Graph{ptr: ptr} +} + +func (v *Graph) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newGraphSlice(v []uint64) []*Graph { + ret := make([]*Graph, 0, len(v)) + for _, vv := range v { + ret = append(ret, newGraph(vv)) + } + return ret +} +func (v *Graph) SetBase(_arg *Object) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_base", v.getPtr(), arg) +} + +func (v *Graph) GetBase() *Object { + ret, err := v.getBase(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getBase(ctx context.Context) (*Object, error) { + var zero *Object + p, err := mod.getField(ctx, "Graph_base", v.getPtr()) + if err != nil { + return zero, err + } + ret := newObject(p) + return ret, nil +} + +func (v *Graph) SetDesc(_arg *GraphDescriptor) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_desc", v.getPtr(), arg) +} + +func (v *Graph) GetDesc() *GraphDescriptor { + ret, err := v.getDesc(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getDesc(ctx context.Context) (*GraphDescriptor, error) { + var zero *GraphDescriptor + p, err := mod.getField(ctx, "Graph_desc", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraphDescriptor(p) + return ret, nil +} + +func (v *Graph) SetSeqLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_seq_link", v.getPtr(), arg) +} + +func (v *Graph) GetSeqLink() *DictLink { + ret, err := v.getSeqLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getSeqLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "Graph_seq_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Graph) SetIdLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_id_link", v.getPtr(), arg) +} + +func (v *Graph) GetIdLink() *DictLink { + ret, err := v.getIdLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getIdLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "Graph_id_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Graph) SetNSeq(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_n_seq", v.getPtr(), arg) +} + +func (v *Graph) GetNSeq() *Dict { + ret, err := v.getNSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getNSeq(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Graph_n_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Graph) SetESeq(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_e_seq", v.getPtr(), arg) +} + +func (v *Graph) GetESeq() *Dict { + ret, err := v.getESeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getESeq(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Graph_e_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Graph) SetEId(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_e_id", v.getPtr(), arg) +} + +func (v *Graph) GetEId() *Dict { + ret, err := v.getEId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getEId(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Graph_e_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Graph) SetGSeq(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_g_seq", v.getPtr(), arg) +} + +func (v *Graph) GetGSeq() *Dict { + ret, err := v.getGSeq(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getGSeq(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Graph_g_seq", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Graph) SetGId(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_g_id", v.getPtr(), arg) +} + +func (v *Graph) GetGId() *Dict { + ret, err := v.getGId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getGId(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Graph_g_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Graph) SetParent(_arg *Graph) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_parent", v.getPtr(), arg) +} + +func (v *Graph) GetParent() *Graph { + ret, err := v.getParent(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getParent(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.getField(ctx, "Graph_parent", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) SetRoot(_arg *Graph) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_root", v.getPtr(), arg) +} + +func (v *Graph) GetRoot() *Graph { + ret, err := v.getRoot(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getRoot(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.getField(ctx, "Graph_root", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) SetClos(_arg *CommonFields) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Graph_clos", v.getPtr(), arg) +} + +func (v *Graph) GetClos() *CommonFields { + ret, err := v.getClos(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Graph) getClos(ctx context.Context) (*CommonFields, error) { + var zero *CommonFields + p, err := mod.getField(ctx, "Graph_clos", v.getPtr()) + if err != nil { + return zero, err + } + ret := newCommonFields(p) + return ret, nil +} + +type Attr struct { + ptr uint64 +} + +func NewAttr(ctx context.Context) (*Attr, error) { + o, err := mod.newObject(ctx, "Attr") + if err != nil { + return nil, err + } + return newAttr(o), nil +} + +func newAttr(ptr uint64) *Attr { + if ptr == 0 { + return nil + } + return &Attr{ptr: ptr} +} + +func (v *Attr) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newAttrSlice(v []uint64) []*Attr { + ret := make([]*Attr, 0, len(v)) + for _, vv := range v { + ret = append(ret, newAttr(vv)) + } + return ret +} +func (v *Attr) SetH(_arg *Record) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Attr_h", v.getPtr(), arg) +} + +func (v *Attr) GetH() *Record { + ret, err := v.getH(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Attr) getH(ctx context.Context) (*Record, error) { + var zero *Record + p, err := mod.getField(ctx, "Attr_h", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRecord(p) + return ret, nil +} + +func (v *Attr) SetDict(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Attr_dict", v.getPtr(), arg) +} + +func (v *Attr) GetDict() *Dict { + ret, err := v.getDict(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Attr) getDict(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Attr_dict", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Attr) SetStr(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Attr_str", v.getPtr(), arg) +} + +func (v *Attr) GetStr() []string { + ret, err := v.getStr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Attr) getStr(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "Attr_str", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +type Sym struct { + ptr uint64 +} + +func NewSym(ctx context.Context) (*Sym, error) { + o, err := mod.newObject(ctx, "Sym") + if err != nil { + return nil, err + } + return newSym(o), nil +} + +func newSym(ptr uint64) *Sym { + if ptr == 0 { + return nil + } + return &Sym{ptr: ptr} +} + +func (v *Sym) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newSymSlice(v []uint64) []*Sym { + ret := make([]*Sym, 0, len(v)) + for _, vv := range v { + ret = append(ret, newSym(vv)) + } + return ret +} +func (v *Sym) SetLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_link", v.getPtr(), arg) +} + +func (v *Sym) GetLink() *DictLink { + ret, err := v.getLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "Sym_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Sym) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_name", v.getPtr(), arg) +} + +func (v *Sym) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Sym_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Sym) SetDefval(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_defval", v.getPtr(), arg) +} + +func (v *Sym) GetDefval() string { + ret, err := v.getDefval(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getDefval(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Sym_defval", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Sym) SetId(_arg int32) error { + ctx := context.Background() + arg, err := mod.toInt32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_id", v.getPtr(), arg) +} + +func (v *Sym) GetId() int32 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getId(ctx context.Context) (int32, error) { + var zero int32 + p, err := mod.getField(ctx, "Sym_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt32(p) + return ret, nil +} + +func (v *Sym) SetKind(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_kind", v.getPtr(), arg) +} + +func (v *Sym) GetKind() uint32 { + ret, err := v.getKind(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getKind(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Sym_kind", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Sym) SetFixed(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_fixed", v.getPtr(), arg) +} + +func (v *Sym) GetFixed() uint32 { + ret, err := v.getFixed(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getFixed(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Sym_fixed", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *Sym) SetPrint(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Sym_print", v.getPtr(), arg) +} + +func (v *Sym) GetPrint() uint32 { + ret, err := v.getPrint(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Sym) getPrint(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "Sym_print", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +type DataDict struct { + ptr uint64 +} + +func NewDataDict(ctx context.Context) (*DataDict, error) { + o, err := mod.newObject(ctx, "DataDict") + if err != nil { + return nil, err + } + return newDataDict(o), nil +} + +func newDataDict(ptr uint64) *DataDict { + if ptr == 0 { + return nil + } + return &DataDict{ptr: ptr} +} + +func (v *DataDict) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDataDictSlice(v []uint64) []*DataDict { + ret := make([]*DataDict, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDataDict(vv)) + } + return ret +} +func (v *DataDict) SetH(_arg *Record) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DataDict_h", v.getPtr(), arg) +} + +func (v *DataDict) GetH() *Record { + ret, err := v.getH(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DataDict) getH(ctx context.Context) (*Record, error) { + var zero *Record + p, err := mod.getField(ctx, "DataDict_h", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRecord(p) + return ret, nil +} + +type DictLink struct { + ptr uint64 +} + +func NewDictLink(ctx context.Context) (*DictLink, error) { + o, err := mod.newObject(ctx, "DictLink") + if err != nil { + return nil, err + } + return newDictLink(o), nil +} + +func newDictLink(ptr uint64) *DictLink { + if ptr == 0 { + return nil + } + return &DictLink{ptr: ptr} +} + +func (v *DictLink) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictLinkSlice(v []uint64) []*DictLink { + ret := make([]*DictLink, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictLink(vv)) + } + return ret +} +func (v *DictLink) SetRight(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictLink_right", v.getPtr(), arg) +} + +func (v *DictLink) GetRight() *DictLink { + ret, err := v.getRight(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictLink) getRight(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "DictLink_right", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *DictLink) SetHash(_arg uint32) error { + ctx := context.Background() + arg, err := mod.toUint32WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictLink_hash", v.getPtr(), arg) +} + +func (v *DictLink) GetHash() uint32 { + ret, err := v.getHash(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictLink) getHash(ctx context.Context) (uint32, error) { + var zero uint32 + p, err := mod.getField(ctx, "DictLink_hash", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint32(p) + return ret, nil +} + +func (v *DictLink) SetLeft(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictLink_left", v.getPtr(), arg) +} + +func (v *DictLink) GetLeft() *DictLink { + ret, err := v.getLeft(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictLink) getLeft(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "DictLink_left", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +type DictHold struct { + ptr uint64 +} + +func NewDictHold(ctx context.Context) (*DictHold, error) { + o, err := mod.newObject(ctx, "DictHold") + if err != nil { + return nil, err + } + return newDictHold(o), nil +} + +func newDictHold(ptr uint64) *DictHold { + if ptr == 0 { + return nil + } + return &DictHold{ptr: ptr} +} + +func (v *DictHold) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictHoldSlice(v []uint64) []*DictHold { + ret := make([]*DictHold, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictHold(vv)) + } + return ret +} +func (v *DictHold) SetHdr(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictHold_hdr", v.getPtr(), arg) +} + +func (v *DictHold) GetHdr() *DictLink { + ret, err := v.getHdr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictHold) getHdr(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "DictHold_hdr", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *DictHold) SetObj(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictHold_obj", v.getPtr(), arg) +} + +func (v *DictHold) GetObj() any { + ret, err := v.getObj(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictHold) getObj(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "DictHold_obj", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +type DictMethod struct { + ptr uint64 +} + +func NewDictMethod(ctx context.Context) (*DictMethod, error) { + o, err := mod.newObject(ctx, "DictMethod") + if err != nil { + return nil, err + } + return newDictMethod(o), nil +} + +func newDictMethod(ptr uint64) *DictMethod { + if ptr == 0 { + return nil + } + return &DictMethod{ptr: ptr} +} + +func (v *DictMethod) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictMethodSlice(v []uint64) []*DictMethod { + ret := make([]*DictMethod, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictMethod(vv)) + } + return ret +} +func (v *DictMethod) SetSearchf(ctx context.Context, arg *CallbackFunc[func(context.Context, *Dict, any, int) (any, error)]) error { + if mod.lookupFuncMap.DictSearch == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DictSearch before") + } + mod.callbackFuncMap.DictSearch[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DictMethod_searchf", v.getPtr()) +} + +func (v *DictMethod) SetType(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictMethod_type", v.getPtr(), arg) +} + +func (v *DictMethod) GetType() int64 { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictMethod) getType(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictMethod_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type DictData struct { + ptr uint64 +} + +func NewDictData(ctx context.Context) (*DictData, error) { + o, err := mod.newObject(ctx, "DictData") + if err != nil { + return nil, err + } + return newDictData(o), nil +} + +func newDictData(ptr uint64) *DictData { + if ptr == 0 { + return nil + } + return &DictData{ptr: ptr} +} + +func (v *DictData) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictDataSlice(v []uint64) []*DictData { + ret := make([]*DictData, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictData(vv)) + } + return ret +} +func (v *DictData) SetType(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_type", v.getPtr(), arg) +} + +func (v *DictData) GetType() int64 { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getType(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictData_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictData) SetHere(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_here", v.getPtr(), arg) +} + +func (v *DictData) GetHere() *DictLink { + ret, err := v.getHere(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getHere(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "DictData_here", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *DictData) SetHtab(_arg []*DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_htab", v.getPtr(), arg) +} + +func (v *DictData) GetHtab() []*DictLink { + ret, err := v.getHtab(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getHtab(ctx context.Context) ([]*DictLink, error) { + var zero []*DictLink + p, err := mod.getField(ctx, "DictData_htab", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newDictLinkSlice(slice) + return ret, nil +} + +func (v *DictData) SetHead(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_head", v.getPtr(), arg) +} + +func (v *DictData) GetHead() *DictLink { + ret, err := v.getHead(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getHead(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "DictData_head", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *DictData) SetNtab(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_ntab", v.getPtr(), arg) +} + +func (v *DictData) GetNtab() int64 { + ret, err := v.getNtab(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getNtab(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictData_ntab", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictData) SetSize(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_size", v.getPtr(), arg) +} + +func (v *DictData) GetSize() int64 { + ret, err := v.getSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getSize(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictData_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictData) SetLoop(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictData_loop", v.getPtr(), arg) +} + +func (v *DictData) GetLoop() int64 { + ret, err := v.getLoop(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictData) getLoop(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictData_loop", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type DictDisc struct { + ptr uint64 +} + +func NewDictDisc(ctx context.Context) (*DictDisc, error) { + o, err := mod.newObject(ctx, "DictDisc") + if err != nil { + return nil, err + } + return newDictDisc(o), nil +} + +func newDictDisc(ptr uint64) *DictDisc { + if ptr == 0 { + return nil + } + return &DictDisc{ptr: ptr} +} + +func (v *DictDisc) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictDiscSlice(v []uint64) []*DictDisc { + ret := make([]*DictDisc, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictDisc(vv)) + } + return ret +} +func (v *DictDisc) SetKey(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictDisc_key", v.getPtr(), arg) +} + +func (v *DictDisc) GetKey() int64 { + ret, err := v.getKey(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictDisc) getKey(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictDisc_key", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictDisc) SetSize(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictDisc_size", v.getPtr(), arg) +} + +func (v *DictDisc) GetSize() int64 { + ret, err := v.getSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictDisc) getSize(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictDisc_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictDisc) SetLink(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictDisc_link", v.getPtr(), arg) +} + +func (v *DictDisc) GetLink() int64 { + ret, err := v.getLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictDisc) getLink(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictDisc_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictDisc) SetMakef(ctx context.Context, arg *CallbackFunc[func(context.Context, any, *DictDisc) (any, error)]) error { + if mod.lookupFuncMap.DictMake == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DictMake before") + } + mod.callbackFuncMap.DictMake[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DictDisc_makef", v.getPtr()) +} + +func (v *DictDisc) SetFreef(ctx context.Context, arg *CallbackFunc[func(context.Context, any) error]) error { + if mod.lookupFuncMap.DictFree == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DictFree before") + } + mod.callbackFuncMap.DictFree[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DictDisc_freef", v.getPtr()) +} + +func (v *DictDisc) SetComparf(ctx context.Context, arg *CallbackFunc[func(context.Context, any, any) (int, error)]) error { + if mod.lookupFuncMap.DictCompare == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DictCompare before") + } + mod.callbackFuncMap.DictCompare[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DictDisc_comparf", v.getPtr()) +} + +type Dict struct { + ptr uint64 +} + +func NewDict(ctx context.Context) (*Dict, error) { + o, err := mod.newObject(ctx, "Dict") + if err != nil { + return nil, err + } + return newDict(o), nil +} + +func newDict(ptr uint64) *Dict { + if ptr == 0 { + return nil + } + return &Dict{ptr: ptr} +} + +func (v *Dict) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictSlice(v []uint64) []*Dict { + ret := make([]*Dict, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDict(vv)) + } + return ret +} +func (v *Dict) SetSearchf(ctx context.Context, arg *CallbackFunc[func(context.Context, *Dict, any, int) (any, error)]) error { + if mod.lookupFuncMap.DictSearch == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DictSearch before") + } + mod.callbackFuncMap.DictSearch[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "Dict_searchf", v.getPtr()) +} + +func (v *Dict) SetDisc(_arg *DictDisc) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_disc", v.getPtr(), arg) +} + +func (v *Dict) GetDisc() *DictDisc { + ret, err := v.getDisc(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getDisc(ctx context.Context) (*DictDisc, error) { + var zero *DictDisc + p, err := mod.getField(ctx, "Dict_disc", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictDisc(p) + return ret, nil +} + +func (v *Dict) SetData(_arg *DictData) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_data", v.getPtr(), arg) +} + +func (v *Dict) GetData() *DictData { + ret, err := v.getData(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getData(ctx context.Context) (*DictData, error) { + var zero *DictData + p, err := mod.getField(ctx, "Dict_data", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictData(p) + return ret, nil +} + +func (v *Dict) SetMeth(_arg *DictMethod) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_meth", v.getPtr(), arg) +} + +func (v *Dict) GetMeth() *DictMethod { + ret, err := v.getMeth(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getMeth(ctx context.Context) (*DictMethod, error) { + var zero *DictMethod + p, err := mod.getField(ctx, "Dict_meth", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictMethod(p) + return ret, nil +} + +func (v *Dict) SetNview(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_nview", v.getPtr(), arg) +} + +func (v *Dict) GetNview() int64 { + ret, err := v.getNview(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getNview(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Dict_nview", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Dict) SetView(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_view", v.getPtr(), arg) +} + +func (v *Dict) GetView() *Dict { + ret, err := v.getView(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getView(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Dict_view", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Dict) SetWalk(_arg *Dict) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_walk", v.getPtr(), arg) +} + +func (v *Dict) GetWalk() *Dict { + ret, err := v.getWalk(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getWalk(ctx context.Context) (*Dict, error) { + var zero *Dict + p, err := mod.getField(ctx, "Dict_walk", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Dict) SetUser(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Dict_user", v.getPtr(), arg) +} + +func (v *Dict) GetUser() any { + ret, err := v.getUser(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Dict) getUser(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "Dict_user", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +type DictStat struct { + ptr uint64 +} + +func NewDictStat(ctx context.Context) (*DictStat, error) { + o, err := mod.newObject(ctx, "DictStat") + if err != nil { + return nil, err + } + return newDictStat(o), nil +} + +func newDictStat(ptr uint64) *DictStat { + if ptr == 0 { + return nil + } + return &DictStat{ptr: ptr} +} + +func (v *DictStat) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDictStatSlice(v []uint64) []*DictStat { + ret := make([]*DictStat, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDictStat(vv)) + } + return ret +} +func (v *DictStat) SetDtMeth(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictStat_dt_meth", v.getPtr(), arg) +} + +func (v *DictStat) GetDtMeth() int64 { + ret, err := v.getDtMeth(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictStat) getDtMeth(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictStat_dt_meth", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictStat) SetDtSize(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictStat_dt_size", v.getPtr(), arg) +} + +func (v *DictStat) GetDtSize() int64 { + ret, err := v.getDtSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictStat) getDtSize(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DictStat_dt_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DictStat) SetDtN(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictStat_dt_n", v.getPtr(), arg) +} + +func (v *DictStat) GetDtN() uint64 { + ret, err := v.getDtN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictStat) getDtN(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "DictStat_dt_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *DictStat) SetDtMax(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictStat_dt_max", v.getPtr(), arg) +} + +func (v *DictStat) GetDtMax() uint64 { + ret, err := v.getDtMax(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictStat) getDtMax(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "DictStat_dt_max", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *DictStat) SetDtCount(_arg []uint32) error { + ctx := context.Background() + arg, err := mod.toUint32ArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DictStat_dt_count", v.getPtr(), arg) +} + +func (v *DictStat) GetDtCount() []uint32 { + ret, err := v.getDtCount(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DictStat) getDtCount(ctx context.Context) ([]uint32, error) { + var zero []uint32 + p, err := mod.getField(ctx, "DictStat_dt_count", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := mod.toUint32Slice(slice) + return ret, nil +} + +type File struct { + ptr uint64 +} + +func newFile(ptr uint64) *File { + if ptr == 0 { + return nil + } + return &File{ptr: ptr} +} + +func (v *File) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newFileSlice(v []uint64) []*File { + ret := make([]*File, 0, len(v)) + for _, vv := range v { + ret = append(ret, newFile(vv)) + } + return ret +} + +type Context struct { + ptr uint64 +} + +func NewContext(ctx context.Context) (*Context, error) { + o, err := mod.newObject(ctx, "Context") + if err != nil { + return nil, err + } + return newContext(o), nil +} + +func newContext(ptr uint64) *Context { + if ptr == 0 { + return nil + } + return &Context{ptr: ptr} +} + +func (v *Context) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newContextSlice(v []uint64) []*Context { + ret := make([]*Context, 0, len(v)) + for _, vv := range v { + ret = append(ret, newContext(vv)) + } + return ret +} +func (v *Context) SetCommon(_arg *Common) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_common", v.getPtr(), arg) +} + +func (v *Context) GetCommon() *Common { + ret, err := v.getCommon(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getCommon(ctx context.Context) (*Common, error) { + var zero *Common + p, err := mod.getField(ctx, "Context_common", v.getPtr()) + if err != nil { + return zero, err + } + ret := newCommon(p) + return ret, nil +} + +func (v *Context) SetConfigPath(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_config_path", v.getPtr(), arg) +} + +func (v *Context) GetConfigPath() string { + ret, err := v.getConfigPath(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getConfigPath(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Context_config_path", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) SetConfigFound(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_config_found", v.getPtr(), arg) +} + +func (v *Context) GetConfigFound() bool { + ret, err := v.getConfigFound(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getConfigFound(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Context_config_found", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Context) SetInputFilenames(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_input_filenames", v.getPtr(), arg) +} + +func (v *Context) GetInputFilenames() []string { + ret, err := v.getInputFilenames(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getInputFilenames(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "Context_input_filenames", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) SetApis(_arg []*PluginAvailable) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_apis", v.getPtr(), arg) +} + +func (v *Context) GetApis() []*PluginAvailable { + ret, err := v.getApis(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getApis(ctx context.Context) ([]*PluginAvailable, error) { + var zero []*PluginAvailable + p, err := mod.getField(ctx, "Context_apis", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newPluginAvailableSlice(slice) + return ret, nil +} + +func (v *Context) SetApi(_arg []*PluginAvailable) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Context_api", v.getPtr(), arg) +} + +func (v *Context) GetApi() []*PluginAvailable { + ret, err := v.getApi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Context) getApi(ctx context.Context) ([]*PluginAvailable, error) { + var zero []*PluginAvailable + p, err := mod.getField(ctx, "Context_api", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newPluginAvailableSlice(slice) + return ret, nil +} + +type PluginAvailable struct { + ptr uint64 +} + +func NewPluginAvailable(ctx context.Context) (*PluginAvailable, error) { + o, err := mod.newObject(ctx, "PluginAvailable") + if err != nil { + return nil, err + } + return newPluginAvailable(o), nil +} + +func newPluginAvailable(ptr uint64) *PluginAvailable { + if ptr == 0 { + return nil + } + return &PluginAvailable{ptr: ptr} +} + +func (v *PluginAvailable) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginAvailableSlice(v []uint64) []*PluginAvailable { + ret := make([]*PluginAvailable, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginAvailable(vv)) + } + return ret +} +func (v *PluginAvailable) SetNext(_arg *PluginAvailable) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAvailable_next", v.getPtr(), arg) +} + +func (v *PluginAvailable) GetNext() *PluginAvailable { + ret, err := v.getNext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAvailable) getNext(ctx context.Context) (*PluginAvailable, error) { + var zero *PluginAvailable + p, err := mod.getField(ctx, "PluginAvailable_next", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginAvailable(p) + return ret, nil +} + +func (v *PluginAvailable) SetTypestr(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAvailable_typestr", v.getPtr(), arg) +} + +func (v *PluginAvailable) GetTypestr() string { + ret, err := v.getTypestr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAvailable) getTypestr(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginAvailable_typestr", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PluginAvailable) SetQuality(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAvailable_quality", v.getPtr(), arg) +} + +func (v *PluginAvailable) GetQuality() int64 { + ret, err := v.getQuality(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAvailable) getQuality(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginAvailable_quality", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginAvailable) SetPackage(_arg *PluginPackage) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAvailable_package", v.getPtr(), arg) +} + +func (v *PluginAvailable) GetPackage() *PluginPackage { + ret, err := v.getPackage(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAvailable) getPackage(ctx context.Context) (*PluginPackage, error) { + var zero *PluginPackage + p, err := mod.getField(ctx, "PluginAvailable_package", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginPackage(p) + return ret, nil +} + +func (v *PluginAvailable) SetTypeptr(_arg *PluginInstalled) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAvailable_typeptr", v.getPtr(), arg) +} + +func (v *PluginAvailable) GetTypeptr() *PluginInstalled { + ret, err := v.getTypeptr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAvailable) getTypeptr(ctx context.Context) (*PluginInstalled, error) { + var zero *PluginInstalled + p, err := mod.getField(ctx, "PluginAvailable_typeptr", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginInstalled(p) + return ret, nil +} + +type PluginPackage struct { + ptr uint64 +} + +func NewPluginPackage(ctx context.Context) (*PluginPackage, error) { + o, err := mod.newObject(ctx, "PluginPackage") + if err != nil { + return nil, err + } + return newPluginPackage(o), nil +} + +func newPluginPackage(ptr uint64) *PluginPackage { + if ptr == 0 { + return nil + } + return &PluginPackage{ptr: ptr} +} + +func (v *PluginPackage) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginPackageSlice(v []uint64) []*PluginPackage { + ret := make([]*PluginPackage, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginPackage(vv)) + } + return ret +} +func (v *PluginPackage) SetNext(_arg *PluginPackage) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginPackage_next", v.getPtr(), arg) +} + +func (v *PluginPackage) GetNext() *PluginPackage { + ret, err := v.getNext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginPackage) getNext(ctx context.Context) (*PluginPackage, error) { + var zero *PluginPackage + p, err := mod.getField(ctx, "PluginPackage_next", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginPackage(p) + return ret, nil +} + +func (v *PluginPackage) SetPath(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginPackage_path", v.getPtr(), arg) +} + +func (v *PluginPackage) GetPath() string { + ret, err := v.getPath(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginPackage) getPath(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginPackage_path", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PluginPackage) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginPackage_name", v.getPtr(), arg) +} + +func (v *PluginPackage) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginPackage) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginPackage_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type SymList struct { + ptr uint64 +} + +func NewSymList(ctx context.Context) (*SymList, error) { + o, err := mod.newObject(ctx, "SymList") + if err != nil { + return nil, err + } + return newSymList(o), nil +} + +func newSymList(ptr uint64) *SymList { + if ptr == 0 { + return nil + } + return &SymList{ptr: ptr} +} + +func (v *SymList) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newSymListSlice(v []uint64) []*SymList { + ret := make([]*SymList, 0, len(v)) + for _, vv := range v { + ret = append(ret, newSymList(vv)) + } + return ret +} +func (v *SymList) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SymList_name", v.getPtr(), arg) +} + +func (v *SymList) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SymList) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "SymList_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *SymList) SetAddress(_arg *PluginLibrary) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "SymList_address", v.getPtr(), arg) +} + +func (v *SymList) GetAddress() *PluginLibrary { + ret, err := v.getAddress(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *SymList) getAddress(ctx context.Context) (*PluginLibrary, error) { + var zero *PluginLibrary + p, err := mod.getField(ctx, "SymList_address", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginLibrary(p) + return ret, nil +} + +type UserShape struct { + ptr uint64 +} + +func NewUserShape(ctx context.Context) (*UserShape, error) { + o, err := mod.newObject(ctx, "UserShape") + if err != nil { + return nil, err + } + return newUserShape(o), nil +} + +func newUserShape(ptr uint64) *UserShape { + if ptr == 0 { + return nil + } + return &UserShape{ptr: ptr} +} + +func (v *UserShape) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newUserShapeSlice(v []uint64) []*UserShape { + ret := make([]*UserShape, 0, len(v)) + for _, vv := range v { + ret = append(ret, newUserShape(vv)) + } + return ret +} +func (v *UserShape) SetLink(_arg *DictLink) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_link", v.getPtr(), arg) +} + +func (v *UserShape) GetLink() *DictLink { + ret, err := v.getLink(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getLink(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.getField(ctx, "UserShape_link", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *UserShape) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_name", v.getPtr(), arg) +} + +func (v *UserShape) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "UserShape_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *UserShape) SetMacroId(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_macro_id", v.getPtr(), arg) +} + +func (v *UserShape) GetMacroId() int64 { + ret, err := v.getMacroId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getMacroId(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_macro_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetMustInline(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_must_inline", v.getPtr(), arg) +} + +func (v *UserShape) GetMustInline() bool { + ret, err := v.getMustInline(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getMustInline(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "UserShape_must_inline", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *UserShape) SetNocache(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_nocache", v.getPtr(), arg) +} + +func (v *UserShape) GetNocache() bool { + ret, err := v.getNocache(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getNocache(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "UserShape_nocache", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *UserShape) SetF(_arg *File) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_f", v.getPtr(), arg) +} + +func (v *UserShape) GetF() *File { + ret, err := v.getF(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getF(ctx context.Context) (*File, error) { + var zero *File + p, err := mod.getField(ctx, "UserShape_f", v.getPtr()) + if err != nil { + return zero, err + } + ret := newFile(p) + return ret, nil +} + +func (v *UserShape) SetType(_arg ImageType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_type", v.getPtr(), arg) +} + +func (v *UserShape) GetType() ImageType { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getType(ctx context.Context) (ImageType, error) { + var zero ImageType + p, err := mod.getField(ctx, "UserShape_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := ImageType(p) + return ret, nil +} + +func (v *UserShape) SetStringtype(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_stringtype", v.getPtr(), arg) +} + +func (v *UserShape) GetStringtype() string { + ret, err := v.getStringtype(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getStringtype(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "UserShape_stringtype", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *UserShape) SetX(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_x", v.getPtr(), arg) +} + +func (v *UserShape) GetX() int64 { + ret, err := v.getX(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getX(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_x", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetY(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_y", v.getPtr(), arg) +} + +func (v *UserShape) GetY() int64 { + ret, err := v.getY(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getY(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_y", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetW(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_w", v.getPtr(), arg) +} + +func (v *UserShape) GetW() int64 { + ret, err := v.getW(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getW(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_w", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetH(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_h", v.getPtr(), arg) +} + +func (v *UserShape) GetH() int64 { + ret, err := v.getH(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getH(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_h", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetDpi(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_dpi", v.getPtr(), arg) +} + +func (v *UserShape) GetDpi() int64 { + ret, err := v.getDpi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getDpi(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "UserShape_dpi", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *UserShape) SetData(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_data", v.getPtr(), arg) +} + +func (v *UserShape) GetData() any { + ret, err := v.getData(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getData(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "UserShape_data", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *UserShape) SetDatasize(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "UserShape_datasize", v.getPtr(), arg) +} + +func (v *UserShape) GetDatasize() uint64 { + ret, err := v.getDatasize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *UserShape) getDatasize(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "UserShape_datasize", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *UserShape) SetDatafree(ctx context.Context, arg *CallbackFunc[func(context.Context, *UserShape) error]) error { + if mod.lookupFuncMap.UserShape_DataFree == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_UserShape_DataFree before") + } + mod.callbackFuncMap.UserShape_DataFree[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "UserShape_datafree", v.getPtr()) +} + +type PluginActiveLoadImage struct { + ptr uint64 +} + +func NewPluginActiveLoadImage(ctx context.Context) (*PluginActiveLoadImage, error) { + o, err := mod.newObject(ctx, "PluginActiveLoadImage") + if err != nil { + return nil, err + } + return newPluginActiveLoadImage(o), nil +} + +func newPluginActiveLoadImage(ptr uint64) *PluginActiveLoadImage { + if ptr == 0 { + return nil + } + return &PluginActiveLoadImage{ptr: ptr} +} + +func (v *PluginActiveLoadImage) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginActiveLoadImageSlice(v []uint64) []*PluginActiveLoadImage { + ret := make([]*PluginActiveLoadImage, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginActiveLoadImage(vv)) + } + return ret +} +func (v *PluginActiveLoadImage) SetEngine(_arg *LoadImageEngine) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveLoadImage_engine", v.getPtr(), arg) +} + +func (v *PluginActiveLoadImage) GetEngine() *LoadImageEngine { + ret, err := v.getEngine(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveLoadImage) getEngine(ctx context.Context) (*LoadImageEngine, error) { + var zero *LoadImageEngine + p, err := mod.getField(ctx, "PluginActiveLoadImage_engine", v.getPtr()) + if err != nil { + return zero, err + } + ret := newLoadImageEngine(p) + return ret, nil +} + +func (v *PluginActiveLoadImage) SetId(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveLoadImage_id", v.getPtr(), arg) +} + +func (v *PluginActiveLoadImage) GetId() int64 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveLoadImage) getId(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginActiveLoadImage_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginActiveLoadImage) SetType(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveLoadImage_type", v.getPtr(), arg) +} + +func (v *PluginActiveLoadImage) GetType() string { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveLoadImage) getType(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginActiveLoadImage_type", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type Common struct { + ptr uint64 +} + +func NewCommon(ctx context.Context) (*Common, error) { + o, err := mod.newObject(ctx, "Common") + if err != nil { + return nil, err + } + return newCommon(o), nil +} + +func newCommon(ptr uint64) *Common { + if ptr == 0 { + return nil + } + return &Common{ptr: ptr} +} + +func (v *Common) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newCommonSlice(v []uint64) []*Common { + ret := make([]*Common, 0, len(v)) + for _, vv := range v { + ret = append(ret, newCommon(vv)) + } + return ret +} +func (v *Common) SetInfo(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_info", v.getPtr(), arg) +} + +func (v *Common) GetInfo() []string { + ret, err := v.getInfo(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getInfo(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "Common_info", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Common) SetCmdname(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_cmdname", v.getPtr(), arg) +} + +func (v *Common) GetCmdname() string { + ret, err := v.getCmdname(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getCmdname(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Common_cmdname", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Common) SetVerbose(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_verbose", v.getPtr(), arg) +} + +func (v *Common) GetVerbose() int64 { + ret, err := v.getVerbose(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getVerbose(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Common_verbose", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Common) SetConfig(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_config", v.getPtr(), arg) +} + +func (v *Common) GetConfig() bool { + ret, err := v.getConfig(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getConfig(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Common_config", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Common) SetAutoOutfileNames(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_auto_outfile_names", v.getPtr(), arg) +} + +func (v *Common) GetAutoOutfileNames() bool { + ret, err := v.getAutoOutfileNames(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getAutoOutfileNames(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Common_auto_outfile_names", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Common) SetShowBoxes(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_show_boxes", v.getPtr(), arg) +} + +func (v *Common) GetShowBoxes() []string { + ret, err := v.getShowBoxes(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getShowBoxes(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "Common_show_boxes", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Common) SetLib(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_lib", v.getPtr(), arg) +} + +func (v *Common) GetLib() []string { + ret, err := v.getLib(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getLib(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "Common_lib", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Common) SetViewNum(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_view_num", v.getPtr(), arg) +} + +func (v *Common) GetViewNum() int64 { + ret, err := v.getViewNum(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getViewNum(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Common_view_num", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Common) SetBuiltins(_arg *SymList) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_builtins", v.getPtr(), arg) +} + +func (v *Common) GetBuiltins() *SymList { + ret, err := v.getBuiltins(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getBuiltins(ctx context.Context) (*SymList, error) { + var zero *SymList + p, err := mod.getField(ctx, "Common_builtins", v.getPtr()) + if err != nil { + return zero, err + } + ret := newSymList(p) + return ret, nil +} + +func (v *Common) SetDemandLoading(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Common_demand_loading", v.getPtr(), arg) +} + +func (v *Common) GetDemandLoading() int64 { + ret, err := v.getDemandLoading(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Common) getDemandLoading(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Common_demand_loading", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type ObjectState struct { + ptr uint64 +} + +func NewObjectState(ctx context.Context) (*ObjectState, error) { + o, err := mod.newObject(ctx, "ObjectState") + if err != nil { + return nil, err + } + return newObjectState(o), nil +} + +func newObjectState(ptr uint64) *ObjectState { + if ptr == 0 { + return nil + } + return &ObjectState{ptr: ptr} +} + +func (v *ObjectState) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newObjectStateSlice(v []uint64) []*ObjectState { + ret := make([]*ObjectState, 0, len(v)) + for _, vv := range v { + ret = append(ret, newObjectState(vv)) + } + return ret +} +func (v *ObjectState) SetParent(_arg *ObjectState) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_parent", v.getPtr(), arg) +} + +func (v *ObjectState) GetParent() *ObjectState { + ret, err := v.getParent(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getParent(ctx context.Context) (*ObjectState, error) { + var zero *ObjectState + p, err := mod.getField(ctx, "ObjectState_parent", v.getPtr()) + if err != nil { + return zero, err + } + ret := newObjectState(p) + return ret, nil +} + +func (v *ObjectState) SetType(_arg ObjectType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_type", v.getPtr(), arg) +} + +func (v *ObjectState) GetType() ObjectType { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getType(ctx context.Context) (ObjectType, error) { + var zero ObjectType + p, err := mod.getField(ctx, "ObjectState_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := ObjectType(p) + return ret, nil +} + +func (v *ObjectState) SetG(_arg *Graph) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_g", v.getPtr(), arg) +} + +func (v *ObjectState) GetG() *Graph { + ret, err := v.getG(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getG(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.getField(ctx, "ObjectState_g", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *ObjectState) SetSg(_arg *Graph) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_sg", v.getPtr(), arg) +} + +func (v *ObjectState) GetSg() *Graph { + ret, err := v.getSg(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getSg(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.getField(ctx, "ObjectState_sg", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *ObjectState) SetN(_arg *Node) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetN() *Node { + ret, err := v.getN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getN(ctx context.Context) (*Node, error) { + var zero *Node + p, err := mod.getField(ctx, "ObjectState_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *ObjectState) SetE(_arg *Edge) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_e", v.getPtr(), arg) +} + +func (v *ObjectState) GetE() *Edge { + ret, err := v.getE(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getE(ctx context.Context) (*Edge, error) { + var zero *Edge + p, err := mod.getField(ctx, "ObjectState_e", v.getPtr()) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *ObjectState) SetEmitState(_arg EmitState) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_emit_state", v.getPtr(), arg) +} + +func (v *ObjectState) GetEmitState() EmitState { + ret, err := v.getEmitState(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getEmitState(ctx context.Context) (EmitState, error) { + var zero EmitState + p, err := mod.getField(ctx, "ObjectState_emit_state", v.getPtr()) + if err != nil { + return zero, err + } + ret := EmitState(p) + return ret, nil +} + +func (v *ObjectState) SetPencolor(_arg *Color) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_pencolor", v.getPtr(), arg) +} + +func (v *ObjectState) GetPencolor() *Color { + ret, err := v.getPencolor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getPencolor(ctx context.Context) (*Color, error) { + var zero *Color + p, err := mod.getField(ctx, "ObjectState_pencolor", v.getPtr()) + if err != nil { + return zero, err + } + ret := newColor(p) + return ret, nil +} + +func (v *ObjectState) SetFillcolor(_arg *Color) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_fillcolor", v.getPtr(), arg) +} + +func (v *ObjectState) GetFillcolor() *Color { + ret, err := v.getFillcolor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getFillcolor(ctx context.Context) (*Color, error) { + var zero *Color + p, err := mod.getField(ctx, "ObjectState_fillcolor", v.getPtr()) + if err != nil { + return zero, err + } + ret := newColor(p) + return ret, nil +} + +func (v *ObjectState) SetStopcolor(_arg *Color) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_stopcolor", v.getPtr(), arg) +} + +func (v *ObjectState) GetStopcolor() *Color { + ret, err := v.getStopcolor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getStopcolor(ctx context.Context) (*Color, error) { + var zero *Color + p, err := mod.getField(ctx, "ObjectState_stopcolor", v.getPtr()) + if err != nil { + return zero, err + } + ret := newColor(p) + return ret, nil +} + +func (v *ObjectState) SetGradientAngle(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_gradient_angle", v.getPtr(), arg) +} + +func (v *ObjectState) GetGradientAngle() int64 { + ret, err := v.getGradientAngle(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getGradientAngle(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "ObjectState_gradient_angle", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *ObjectState) SetGradientFrac(_arg float32) error { + ctx := context.Background() + arg, err := mod.toFloatWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_gradient_frac", v.getPtr(), arg) +} + +func (v *ObjectState) GetGradientFrac() float32 { + ret, err := v.getGradientFrac(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getGradientFrac(ctx context.Context) (float32, error) { + var zero float32 + p, err := mod.getField(ctx, "ObjectState_gradient_frac", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat32(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetPen(_arg PenType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_pen", v.getPtr(), arg) +} + +func (v *ObjectState) GetPen() PenType { + ret, err := v.getPen(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getPen(ctx context.Context) (PenType, error) { + var zero PenType + p, err := mod.getField(ctx, "ObjectState_pen", v.getPtr()) + if err != nil { + return zero, err + } + ret := PenType(p) + return ret, nil +} + +func (v *ObjectState) SetFill(_arg FillType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_fill", v.getPtr(), arg) +} + +func (v *ObjectState) GetFill() FillType { + ret, err := v.getFill(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getFill(ctx context.Context) (FillType, error) { + var zero FillType + p, err := mod.getField(ctx, "ObjectState_fill", v.getPtr()) + if err != nil { + return zero, err + } + ret := FillType(p) + return ret, nil +} + +func (v *ObjectState) SetPenwidth(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_penwidth", v.getPtr(), arg) +} + +func (v *ObjectState) GetPenwidth() float64 { + ret, err := v.getPenwidth(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getPenwidth(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "ObjectState_penwidth", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetRawstyle(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_rawstyle", v.getPtr(), arg) +} + +func (v *ObjectState) GetRawstyle() []string { + ret, err := v.getRawstyle(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getRawstyle(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "ObjectState_rawstyle", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetZ(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_z", v.getPtr(), arg) +} + +func (v *ObjectState) GetZ() float64 { + ret, err := v.getZ(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getZ(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "ObjectState_z", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTailZ(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tail_z", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailZ() float64 { + ret, err := v.getTailZ(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailZ(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "ObjectState_tail_z", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetHeadZ(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_head_z", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadZ() float64 { + ret, err := v.getHeadZ(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadZ(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "ObjectState_head_z", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetLabel(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_label", v.getPtr(), arg) +} + +func (v *ObjectState) GetLabel() string { + ret, err := v.getLabel(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getLabel(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_label", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetXlabel(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_xlabel", v.getPtr(), arg) +} + +func (v *ObjectState) GetXlabel() string { + ret, err := v.getXlabel(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getXlabel(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_xlabel", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTaillabel(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_taillabel", v.getPtr(), arg) +} + +func (v *ObjectState) GetTaillabel() string { + ret, err := v.getTaillabel(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTaillabel(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_taillabel", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetHeadlabel(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headlabel", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadlabel() string { + ret, err := v.getHeadlabel(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadlabel(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_headlabel", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetUrl(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrl() string { + ret, err := v.getUrl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrl(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_url", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetId(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_id", v.getPtr(), arg) +} + +func (v *ObjectState) GetId() string { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getId(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_id", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetLabelurl(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_labelurl", v.getPtr(), arg) +} + +func (v *ObjectState) GetLabelurl() string { + ret, err := v.getLabelurl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getLabelurl(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_labelurl", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTailurl(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tailurl", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailurl() string { + ret, err := v.getTailurl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailurl(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_tailurl", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetHeadurl(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headurl", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadurl() string { + ret, err := v.getHeadurl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadurl(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_headurl", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTooltip(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetTooltip() string { + ret, err := v.getTooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTooltip(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_tooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetLabeltooltip(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_labeltooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetLabeltooltip() string { + ret, err := v.getLabeltooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getLabeltooltip(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_labeltooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTailtooltip(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tailtooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailtooltip() string { + ret, err := v.getTailtooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailtooltip(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_tailtooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetHeadtooltip(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headtooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadtooltip() string { + ret, err := v.getHeadtooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadtooltip(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_headtooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTarget(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_target", v.getPtr(), arg) +} + +func (v *ObjectState) GetTarget() string { + ret, err := v.getTarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTarget(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_target", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetLabeltarget(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_labeltarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetLabeltarget() string { + ret, err := v.getLabeltarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getLabeltarget(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_labeltarget", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetTailtarget(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tailtarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailtarget() string { + ret, err := v.getTailtarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailtarget(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_tailtarget", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetHeadtarget(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headtarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadtarget() string { + ret, err := v.getHeadtarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadtarget(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "ObjectState_headtarget", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *ObjectState) SetExplicitTooltip(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_tooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitTooltip() uint64 { + ret, err := v.getExplicitTooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitTooltip(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_tooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitTailtooltip(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_tailtooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitTailtooltip() uint64 { + ret, err := v.getExplicitTailtooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitTailtooltip(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_tailtooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitHeadtooltip(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_headtooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitHeadtooltip() uint64 { + ret, err := v.getExplicitHeadtooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitHeadtooltip(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_headtooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitLabeltooltip(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_labeltooltip", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitLabeltooltip() uint64 { + ret, err := v.getExplicitLabeltooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitLabeltooltip(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_labeltooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitTailtarget(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_tailtarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitTailtarget() uint64 { + ret, err := v.getExplicitTailtarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitTailtarget(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_tailtarget", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitHeadtarget(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_headtarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitHeadtarget() uint64 { + ret, err := v.getExplicitHeadtarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitHeadtarget(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_headtarget", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitEdgetarget(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_edgetarget", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitEdgetarget() uint64 { + ret, err := v.getExplicitEdgetarget(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitEdgetarget(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_edgetarget", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitTailurl(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_tailurl", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitTailurl() uint64 { + ret, err := v.getExplicitTailurl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitTailurl(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_tailurl", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetExplicitHeadurl(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_explicit_headurl", v.getPtr(), arg) +} + +func (v *ObjectState) GetExplicitHeadurl() uint64 { + ret, err := v.getExplicitHeadurl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getExplicitHeadurl(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_explicit_headurl", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetLabeledgealigned(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_labeledgealigned", v.getPtr(), arg) +} + +func (v *ObjectState) GetLabeledgealigned() uint64 { + ret, err := v.getLabeledgealigned(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getLabeledgealigned(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_labeledgealigned", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetUrlMapShape(_arg MapShapeType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_map_shape", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlMapShape() MapShapeType { + ret, err := v.getUrlMapShape(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlMapShape(ctx context.Context) (MapShapeType, error) { + var zero MapShapeType + p, err := mod.getField(ctx, "ObjectState_url_map_shape", v.getPtr()) + if err != nil { + return zero, err + } + ret := MapShapeType(p) + return ret, nil +} + +func (v *ObjectState) SetUrlMapN(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_map_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlMapN() uint64 { + ret, err := v.getUrlMapN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlMapN(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "ObjectState_url_map_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *ObjectState) SetUrlMapP(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_map_p", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlMapP() *PointFloat { + ret, err := v.getUrlMapP(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlMapP(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "ObjectState_url_map_p", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *ObjectState) SetUrlBsplinemapPolyN(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_bsplinemap_poly_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlBsplinemapPolyN() int64 { + ret, err := v.getUrlBsplinemapPolyN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlBsplinemapPolyN(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "ObjectState_url_bsplinemap_poly_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *ObjectState) SetUrlBsplinemapN(_arg []int) error { + ctx := context.Background() + arg, err := mod.toIntArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_bsplinemap_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlBsplinemapN() []int { + ret, err := v.getUrlBsplinemapN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlBsplinemapN(ctx context.Context) ([]int, error) { + var zero []int + p, err := mod.getField(ctx, "ObjectState_url_bsplinemap_n", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := mod.toIntSlice(slice) + return ret, nil +} + +func (v *ObjectState) SetUrlBsplinemapP(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_url_bsplinemap_p", v.getPtr(), arg) +} + +func (v *ObjectState) GetUrlBsplinemapP() *PointFloat { + ret, err := v.getUrlBsplinemapP(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getUrlBsplinemapP(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "ObjectState_url_bsplinemap_p", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *ObjectState) SetTailendurlMapN(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tailendurl_map_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailendurlMapN() int64 { + ret, err := v.getTailendurlMapN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailendurlMapN(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "ObjectState_tailendurl_map_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *ObjectState) SetTailendurlMapP(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_tailendurl_map_p", v.getPtr(), arg) +} + +func (v *ObjectState) GetTailendurlMapP() *PointFloat { + ret, err := v.getTailendurlMapP(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getTailendurlMapP(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "ObjectState_tailendurl_map_p", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *ObjectState) SetHeadendurlMapN(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headendurl_map_n", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadendurlMapN() int64 { + ret, err := v.getHeadendurlMapN(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadendurlMapN(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "ObjectState_headendurl_map_n", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *ObjectState) SetHeadendurlMapP(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "ObjectState_headendurl_map_p", v.getPtr(), arg) +} + +func (v *ObjectState) GetHeadendurlMapP() *PointFloat { + ret, err := v.getHeadendurlMapP(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *ObjectState) getHeadendurlMapP(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "ObjectState_headendurl_map_p", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +type DeviceCallbacks struct { + ptr uint64 +} + +func NewDeviceCallbacks(ctx context.Context) (*DeviceCallbacks, error) { + o, err := mod.newObject(ctx, "DeviceCallbacks") + if err != nil { + return nil, err + } + return newDeviceCallbacks(o), nil +} + +func newDeviceCallbacks(ptr uint64) *DeviceCallbacks { + if ptr == 0 { + return nil + } + return &DeviceCallbacks{ptr: ptr} +} + +func (v *DeviceCallbacks) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDeviceCallbacksSlice(v []uint64) []*DeviceCallbacks { + ret := make([]*DeviceCallbacks, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDeviceCallbacks(vv)) + } + return ret +} +func (v *DeviceCallbacks) SetRefresh(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Refresh == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Refresh before") + } + mod.callbackFuncMap.DeviceCallbacks_Refresh[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_refresh", v.getPtr()) +} + +func (v *DeviceCallbacks) SetButtonPress(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, int, *PointFloat) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_ButtonPress == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_ButtonPress before") + } + mod.callbackFuncMap.DeviceCallbacks_ButtonPress[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_button_press", v.getPtr()) +} + +func (v *DeviceCallbacks) SetButtonRelease(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, int, *PointFloat) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_ButtonRelease == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_ButtonRelease before") + } + mod.callbackFuncMap.DeviceCallbacks_ButtonRelease[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_button_release", v.getPtr()) +} + +func (v *DeviceCallbacks) SetMotion(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, *PointFloat) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Motion == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Motion before") + } + mod.callbackFuncMap.DeviceCallbacks_Motion[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_motion", v.getPtr()) +} + +func (v *DeviceCallbacks) SetModify(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, string) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Modify == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Modify before") + } + mod.callbackFuncMap.DeviceCallbacks_Modify[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_modify", v.getPtr()) +} + +func (v *DeviceCallbacks) SetDel(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Delete == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Delete before") + } + mod.callbackFuncMap.DeviceCallbacks_Delete[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_del", v.getPtr()) +} + +func (v *DeviceCallbacks) SetRead(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, string) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Read == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Read before") + } + mod.callbackFuncMap.DeviceCallbacks_Read[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_read", v.getPtr()) +} + +func (v *DeviceCallbacks) SetLayout(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Layout == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Layout before") + } + mod.callbackFuncMap.DeviceCallbacks_Layout[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_layout", v.getPtr()) +} + +func (v *DeviceCallbacks) SetRender(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, string) error]) error { + if mod.lookupFuncMap.DeviceCallbacks_Render == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceCallbacks_Render before") + } + mod.callbackFuncMap.DeviceCallbacks_Render[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceCallbacks_render", v.getPtr()) +} + +type Job struct { + ptr uint64 +} + +func NewJob(ctx context.Context) (*Job, error) { + o, err := mod.newObject(ctx, "Job") + if err != nil { + return nil, err + } + return newJob(o), nil +} + +func newJob(ptr uint64) *Job { + if ptr == 0 { + return nil + } + return &Job{ptr: ptr} +} + +func (v *Job) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newJobSlice(v []uint64) []*Job { + ret := make([]*Job, 0, len(v)) + for _, vv := range v { + ret = append(ret, newJob(vv)) + } + return ret +} +func (v *Job) SetGvc(_arg *Context) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_gvc", v.getPtr(), arg) +} + +func (v *Job) GetGvc() *Context { + ret, err := v.getGvc(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getGvc(ctx context.Context) (*Context, error) { + var zero *Context + p, err := mod.getField(ctx, "Job_gvc", v.getPtr()) + if err != nil { + return zero, err + } + ret := newContext(p) + return ret, nil +} + +func (v *Job) SetNext(_arg *Job) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_next", v.getPtr(), arg) +} + +func (v *Job) GetNext() *Job { + ret, err := v.getNext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getNext(ctx context.Context) (*Job, error) { + var zero *Job + p, err := mod.getField(ctx, "Job_next", v.getPtr()) + if err != nil { + return zero, err + } + ret := newJob(p) + return ret, nil +} + +func (v *Job) SetNextActive(_arg *Job) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_next_active", v.getPtr(), arg) +} + +func (v *Job) GetNextActive() *Job { + ret, err := v.getNextActive(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getNextActive(ctx context.Context) (*Job, error) { + var zero *Job + p, err := mod.getField(ctx, "Job_next_active", v.getPtr()) + if err != nil { + return zero, err + } + ret := newJob(p) + return ret, nil +} + +func (v *Job) SetCommon(_arg *Common) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_common", v.getPtr(), arg) +} + +func (v *Job) GetCommon() *Common { + ret, err := v.getCommon(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getCommon(ctx context.Context) (*Common, error) { + var zero *Common + p, err := mod.getField(ctx, "Job_common", v.getPtr()) + if err != nil { + return zero, err + } + ret := newCommon(p) + return ret, nil +} + +func (v *Job) SetObj(_arg *ObjectState) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_obj", v.getPtr(), arg) +} + +func (v *Job) GetObj() *ObjectState { + ret, err := v.getObj(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getObj(ctx context.Context) (*ObjectState, error) { + var zero *ObjectState + p, err := mod.getField(ctx, "Job_obj", v.getPtr()) + if err != nil { + return zero, err + } + ret := newObjectState(p) + return ret, nil +} + +func (v *Job) SetInputFilename(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_input_filename", v.getPtr(), arg) +} + +func (v *Job) GetInputFilename() string { + ret, err := v.getInputFilename(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getInputFilename(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_input_filename", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetGraphIndex(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_graph_index", v.getPtr(), arg) +} + +func (v *Job) GetGraphIndex() int64 { + ret, err := v.getGraphIndex(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getGraphIndex(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_graph_index", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetLayoutType(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_layout_type", v.getPtr(), arg) +} + +func (v *Job) GetLayoutType() string { + ret, err := v.getLayoutType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getLayoutType(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_layout_type", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetOutputFilename(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_filename", v.getPtr(), arg) +} + +func (v *Job) GetOutputFilename() string { + ret, err := v.getOutputFilename(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputFilename(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_output_filename", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetOutputFile(_arg *File) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_file", v.getPtr(), arg) +} + +func (v *Job) GetOutputFile() *File { + ret, err := v.getOutputFile(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputFile(ctx context.Context) (*File, error) { + var zero *File + p, err := mod.getField(ctx, "Job_output_file", v.getPtr()) + if err != nil { + return zero, err + } + ret := newFile(p) + return ret, nil +} + +func (v *Job) SetOutputData(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_data", v.getPtr(), arg) +} + +func (v *Job) GetOutputData() string { + ret, err := v.getOutputData(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputData(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_output_data", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetOutputDataAllocated(_arg uint) error { + ctx := context.Background() + arg, err := mod.toUintWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_data_allocated", v.getPtr(), arg) +} + +func (v *Job) GetOutputDataAllocated() uint { + ret, err := v.getOutputDataAllocated(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputDataAllocated(ctx context.Context) (uint, error) { + var zero uint + p, err := mod.getField(ctx, "Job_output_data_allocated", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint(p) + return ret, nil +} + +func (v *Job) SetOutputDataPosition(_arg uint) error { + ctx := context.Background() + arg, err := mod.toUintWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_data_position", v.getPtr(), arg) +} + +func (v *Job) GetOutputDataPosition() uint { + ret, err := v.getOutputDataPosition(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputDataPosition(ctx context.Context) (uint, error) { + var zero uint + p, err := mod.getField(ctx, "Job_output_data_position", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint(p) + return ret, nil +} + +func (v *Job) SetOutputLangname(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_langname", v.getPtr(), arg) +} + +func (v *Job) GetOutputLangname() string { + ret, err := v.getOutputLangname(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputLangname(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_output_langname", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetOutputLang(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_output_lang", v.getPtr(), arg) +} + +func (v *Job) GetOutputLang() int64 { + ret, err := v.getOutputLang(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOutputLang(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_output_lang", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetRender(_arg *PluginActiveRender) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_render", v.getPtr(), arg) +} + +func (v *Job) GetRender() *PluginActiveRender { + ret, err := v.getRender(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getRender(ctx context.Context) (*PluginActiveRender, error) { + var zero *PluginActiveRender + p, err := mod.getField(ctx, "Job_render", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginActiveRender(p) + return ret, nil +} + +func (v *Job) SetDevice(_arg *PluginActiveDevice) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_device", v.getPtr(), arg) +} + +func (v *Job) GetDevice() *PluginActiveDevice { + ret, err := v.getDevice(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDevice(ctx context.Context) (*PluginActiveDevice, error) { + var zero *PluginActiveDevice + p, err := mod.getField(ctx, "Job_device", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginActiveDevice(p) + return ret, nil +} + +func (v *Job) SetLoadimage(_arg *PluginActiveLoadImage) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_loadimage", v.getPtr(), arg) +} + +func (v *Job) GetLoadimage() *PluginActiveLoadImage { + ret, err := v.getLoadimage(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getLoadimage(ctx context.Context) (*PluginActiveLoadImage, error) { + var zero *PluginActiveLoadImage + p, err := mod.getField(ctx, "Job_loadimage", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPluginActiveLoadImage(p) + return ret, nil +} + +func (v *Job) SetCallbacks(_arg *DeviceCallbacks) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_callbacks", v.getPtr(), arg) +} + +func (v *Job) GetCallbacks() *DeviceCallbacks { + ret, err := v.getCallbacks(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getCallbacks(ctx context.Context) (*DeviceCallbacks, error) { + var zero *DeviceCallbacks + p, err := mod.getField(ctx, "Job_callbacks", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDeviceCallbacks(p) + return ret, nil +} + +func (v *Job) SetDeviceDpi(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_device_dpi", v.getPtr(), arg) +} + +func (v *Job) GetDeviceDpi() *PointFloat { + ret, err := v.getDeviceDpi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDeviceDpi(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_device_dpi", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetDeviceSetsDpi(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_device_sets_dpi", v.getPtr(), arg) +} + +func (v *Job) GetDeviceSetsDpi() bool { + ret, err := v.getDeviceSetsDpi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDeviceSetsDpi(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_device_sets_dpi", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetDisplay(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_display", v.getPtr(), arg) +} + +func (v *Job) GetDisplay() any { + ret, err := v.getDisplay(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDisplay(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "Job_display", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Job) SetScreen(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_screen", v.getPtr(), arg) +} + +func (v *Job) GetScreen() int64 { + ret, err := v.getScreen(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getScreen(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_screen", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetContext(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_context", v.getPtr(), arg) +} + +func (v *Job) GetContext() any { + ret, err := v.getContext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getContext(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "Job_context", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Job) SetExternalContext(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_external_context", v.getPtr(), arg) +} + +func (v *Job) GetExternalContext() bool { + ret, err := v.getExternalContext(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getExternalContext(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_external_context", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetImagedata(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_imagedata", v.getPtr(), arg) +} + +func (v *Job) GetImagedata() string { + ret, err := v.getImagedata(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getImagedata(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_imagedata", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetFlags(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_flags", v.getPtr(), arg) +} + +func (v *Job) GetFlags() int64 { + ret, err := v.getFlags(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getFlags(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_flags", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetNumLayers(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_num_layers", v.getPtr(), arg) +} + +func (v *Job) GetNumLayers() int64 { + ret, err := v.getNumLayers(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getNumLayers(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_num_layers", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetLayerNum(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_layer_num", v.getPtr(), arg) +} + +func (v *Job) GetLayerNum() int64 { + ret, err := v.getLayerNum(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getLayerNum(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_layer_num", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetPagesArraySize(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pages_array_size", v.getPtr(), arg) +} + +func (v *Job) GetPagesArraySize() *Point { + ret, err := v.getPagesArraySize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPagesArraySize(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Job_pages_array_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Job) SetPagesArrayFirst(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pages_array_first", v.getPtr(), arg) +} + +func (v *Job) GetPagesArrayFirst() *Point { + ret, err := v.getPagesArrayFirst(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPagesArrayFirst(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Job_pages_array_first", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Job) SetPagesArrayMajor(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pages_array_major", v.getPtr(), arg) +} + +func (v *Job) GetPagesArrayMajor() *Point { + ret, err := v.getPagesArrayMajor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPagesArrayMajor(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Job_pages_array_major", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Job) SetPagesArrayMinor(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pages_array_minor", v.getPtr(), arg) +} + +func (v *Job) GetPagesArrayMinor() *Point { + ret, err := v.getPagesArrayMinor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPagesArrayMinor(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Job_pages_array_minor", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Job) SetPagesArrayElem(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pages_array_elem", v.getPtr(), arg) +} + +func (v *Job) GetPagesArrayElem() *Point { + ret, err := v.getPagesArrayElem(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPagesArrayElem(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Job_pages_array_elem", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Job) SetNumPages(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_num_pages", v.getPtr(), arg) +} + +func (v *Job) GetNumPages() int64 { + ret, err := v.getNumPages(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getNumPages(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_num_pages", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetBb(_arg *BoxFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_bb", v.getPtr(), arg) +} + +func (v *Job) GetBb() *BoxFloat { + ret, err := v.getBb(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getBb(ctx context.Context) (*BoxFloat, error) { + var zero *BoxFloat + p, err := mod.getField(ctx, "Job_bb", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBoxFloat(p) + return ret, nil +} + +func (v *Job) SetPad(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pad", v.getPtr(), arg) +} + +func (v *Job) GetPad() *PointFloat { + ret, err := v.getPad(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPad(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_pad", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetClip(_arg *BoxFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_clip", v.getPtr(), arg) +} + +func (v *Job) GetClip() *BoxFloat { + ret, err := v.getClip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getClip(ctx context.Context) (*BoxFloat, error) { + var zero *BoxFloat + p, err := mod.getField(ctx, "Job_clip", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBoxFloat(p) + return ret, nil +} + +func (v *Job) SetPageBox(_arg *BoxFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_page_box", v.getPtr(), arg) +} + +func (v *Job) GetPageBox() *BoxFloat { + ret, err := v.getPageBox(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPageBox(ctx context.Context) (*BoxFloat, error) { + var zero *BoxFloat + p, err := mod.getField(ctx, "Job_page_box", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBoxFloat(p) + return ret, nil +} + +func (v *Job) SetPageSize(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_page_size", v.getPtr(), arg) +} + +func (v *Job) GetPageSize() *PointFloat { + ret, err := v.getPageSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPageSize(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_page_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetFocus(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_focus", v.getPtr(), arg) +} + +func (v *Job) GetFocus() *PointFloat { + ret, err := v.getFocus(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getFocus(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_focus", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetZoom(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_zoom", v.getPtr(), arg) +} + +func (v *Job) GetZoom() float64 { + ret, err := v.getZoom(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getZoom(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "Job_zoom", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetRotation(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_rotation", v.getPtr(), arg) +} + +func (v *Job) GetRotation() int64 { + ret, err := v.getRotation(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getRotation(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Job_rotation", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Job) SetView(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_view", v.getPtr(), arg) +} + +func (v *Job) GetView() *PointFloat { + ret, err := v.getView(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getView(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_view", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetCanvasBox(_arg *BoxFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_canvas_box", v.getPtr(), arg) +} + +func (v *Job) GetCanvasBox() *BoxFloat { + ret, err := v.getCanvasBox(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getCanvasBox(ctx context.Context) (*BoxFloat, error) { + var zero *BoxFloat + p, err := mod.getField(ctx, "Job_canvas_box", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBoxFloat(p) + return ret, nil +} + +func (v *Job) SetMargin(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_margin", v.getPtr(), arg) +} + +func (v *Job) GetMargin() *PointFloat { + ret, err := v.getMargin(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getMargin(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_margin", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetDpi(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_dpi", v.getPtr(), arg) +} + +func (v *Job) GetDpi() *PointFloat { + ret, err := v.getDpi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDpi(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_dpi", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetWidth(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_width", v.getPtr(), arg) +} + +func (v *Job) GetWidth() uint64 { + ret, err := v.getWidth(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getWidth(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "Job_width", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *Job) SetHeight(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_height", v.getPtr(), arg) +} + +func (v *Job) GetHeight() uint64 { + ret, err := v.getHeight(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getHeight(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "Job_height", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *Job) SetPageBoundingBox(_arg *Box) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_page_bounding_box", v.getPtr(), arg) +} + +func (v *Job) GetPageBoundingBox() *Box { + ret, err := v.getPageBoundingBox(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPageBoundingBox(ctx context.Context) (*Box, error) { + var zero *Box + p, err := mod.getField(ctx, "Job_page_bounding_box", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBox(p) + return ret, nil +} + +func (v *Job) SetBoundingBox(_arg *Box) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_bounding_box", v.getPtr(), arg) +} + +func (v *Job) GetBoundingBox() *Box { + ret, err := v.getBoundingBox(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getBoundingBox(ctx context.Context) (*Box, error) { + var zero *Box + p, err := mod.getField(ctx, "Job_bounding_box", v.getPtr()) + if err != nil { + return zero, err + } + ret := newBox(p) + return ret, nil +} + +func (v *Job) SetScale(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_scale", v.getPtr(), arg) +} + +func (v *Job) GetScale() *PointFloat { + ret, err := v.getScale(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getScale(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_scale", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetTranslation(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_translation", v.getPtr(), arg) +} + +func (v *Job) GetTranslation() *PointFloat { + ret, err := v.getTranslation(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getTranslation(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_translation", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetDevscale(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_devscale", v.getPtr(), arg) +} + +func (v *Job) GetDevscale() *PointFloat { + ret, err := v.getDevscale(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getDevscale(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_devscale", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetFitMode(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_fit_mode", v.getPtr(), arg) +} + +func (v *Job) GetFitMode() bool { + ret, err := v.getFitMode(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getFitMode(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_fit_mode", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetNeedsRefresh(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_needs_refresh", v.getPtr(), arg) +} + +func (v *Job) GetNeedsRefresh() bool { + ret, err := v.getNeedsRefresh(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getNeedsRefresh(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_needs_refresh", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetClick(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_click", v.getPtr(), arg) +} + +func (v *Job) GetClick() bool { + ret, err := v.getClick(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getClick(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_click", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetHasGrown(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_has_grown", v.getPtr(), arg) +} + +func (v *Job) GetHasGrown() bool { + ret, err := v.getHasGrown(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getHasGrown(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_has_grown", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetHasBeenRendered(_arg bool) error { + ctx := context.Background() + arg, err := mod.toBoolWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_has_been_rendered", v.getPtr(), arg) +} + +func (v *Job) GetHasBeenRendered() bool { + ret, err := v.getHasBeenRendered(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getHasBeenRendered(ctx context.Context) (bool, error) { + var zero bool + p, err := mod.getField(ctx, "Job_has_been_rendered", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func (v *Job) SetButton(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_button", v.getPtr(), arg) +} + +func (v *Job) GetButton() uint64 { + ret, err := v.getButton(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getButton(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "Job_button", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *Job) SetPointer(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_pointer", v.getPtr(), arg) +} + +func (v *Job) GetPointer() *PointFloat { + ret, err := v.getPointer(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getPointer(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_pointer", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetOldpointer(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_oldpointer", v.getPtr(), arg) +} + +func (v *Job) GetOldpointer() *PointFloat { + ret, err := v.getOldpointer(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getOldpointer(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Job_oldpointer", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Job) SetCurrentObj(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_current_obj", v.getPtr(), arg) +} + +func (v *Job) GetCurrentObj() any { + ret, err := v.getCurrentObj(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getCurrentObj(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "Job_current_obj", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Job) SetSelectedObj(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_selected_obj", v.getPtr(), arg) +} + +func (v *Job) GetSelectedObj() any { + ret, err := v.getSelectedObj(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getSelectedObj(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "Job_selected_obj", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Job) SetActiveTooltip(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_active_tooltip", v.getPtr(), arg) +} + +func (v *Job) GetActiveTooltip() string { + ret, err := v.getActiveTooltip(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getActiveTooltip(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_active_tooltip", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Job) SetSelectedHref(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Job_selected_href", v.getPtr(), arg) +} + +func (v *Job) GetSelectedHref() string { + ret, err := v.getSelectedHref(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Job) getSelectedHref(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Job_selected_href", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type Point struct { + ptr uint64 +} + +func NewPoint(ctx context.Context) (*Point, error) { + o, err := mod.newObject(ctx, "Point") + if err != nil { + return nil, err + } + return newPoint(o), nil +} + +func newPoint(ptr uint64) *Point { + if ptr == 0 { + return nil + } + return &Point{ptr: ptr} +} + +func (v *Point) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPointSlice(v []uint64) []*Point { + ret := make([]*Point, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPoint(vv)) + } + return ret +} +func (v *Point) SetX(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Point_x", v.getPtr(), arg) +} + +func (v *Point) GetX() int64 { + ret, err := v.getX(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Point) getX(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Point_x", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Point) SetY(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Point_y", v.getPtr(), arg) +} + +func (v *Point) GetY() int64 { + ret, err := v.getY(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Point) getY(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Point_y", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type BoxFloat struct { + ptr uint64 +} + +func NewBoxFloat(ctx context.Context) (*BoxFloat, error) { + o, err := mod.newObject(ctx, "BoxFloat") + if err != nil { + return nil, err + } + return newBoxFloat(o), nil +} + +func newBoxFloat(ptr uint64) *BoxFloat { + if ptr == 0 { + return nil + } + return &BoxFloat{ptr: ptr} +} + +func (v *BoxFloat) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newBoxFloatSlice(v []uint64) []*BoxFloat { + ret := make([]*BoxFloat, 0, len(v)) + for _, vv := range v { + ret = append(ret, newBoxFloat(vv)) + } + return ret +} +func (v *BoxFloat) SetLl(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "BoxFloat_ll", v.getPtr(), arg) +} + +func (v *BoxFloat) GetLl() *PointFloat { + ret, err := v.getLl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *BoxFloat) getLl(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "BoxFloat_ll", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *BoxFloat) SetUr(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "BoxFloat_ur", v.getPtr(), arg) +} + +func (v *BoxFloat) GetUr() *PointFloat { + ret, err := v.getUr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *BoxFloat) getUr(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "BoxFloat_ur", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +type Box struct { + ptr uint64 +} + +func NewBox(ctx context.Context) (*Box, error) { + o, err := mod.newObject(ctx, "Box") + if err != nil { + return nil, err + } + return newBox(o), nil +} + +func newBox(ptr uint64) *Box { + if ptr == 0 { + return nil + } + return &Box{ptr: ptr} +} + +func (v *Box) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newBoxSlice(v []uint64) []*Box { + ret := make([]*Box, 0, len(v)) + for _, vv := range v { + ret = append(ret, newBox(vv)) + } + return ret +} +func (v *Box) SetLl(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Box_ll", v.getPtr(), arg) +} + +func (v *Box) GetLl() *Point { + ret, err := v.getLl(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Box) getLl(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Box_ll", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +func (v *Box) SetUr(_arg *Point) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Box_ur", v.getPtr(), arg) +} + +func (v *Box) GetUr() *Point { + ret, err := v.getUr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Box) getUr(ctx context.Context) (*Point, error) { + var zero *Point + p, err := mod.getField(ctx, "Box_ur", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPoint(p) + return ret, nil +} + +type Color struct { + ptr uint64 +} + +func NewColor(ctx context.Context) (*Color, error) { + o, err := mod.newObject(ctx, "Color") + if err != nil { + return nil, err + } + return newColor(o), nil +} + +func newColor(ptr uint64) *Color { + if ptr == 0 { + return nil + } + return &Color{ptr: ptr} +} + +func (v *Color) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newColorSlice(v []uint64) []*Color { + ret := make([]*Color, 0, len(v)) + for _, vv := range v { + ret = append(ret, newColor(vv)) + } + return ret +} +func (v *Color) SetRgbaDouble(_arg []float64) error { + ctx := context.Background() + arg, err := mod.toDoubleArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_rgba_double", v.getPtr(), arg) +} + +func (v *Color) GetRgbaDouble() []float64 { + ret, err := v.getRgbaDouble(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getRgbaDouble(ctx context.Context) ([]float64, error) { + var zero []float64 + p, err := mod.getField(ctx, "Color_rgba_double", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64Slice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Color) SetHsva(_arg []float64) error { + ctx := context.Background() + arg, err := mod.toDoubleArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_hsva", v.getPtr(), arg) +} + +func (v *Color) GetHsva() []float64 { + ret, err := v.getHsva(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getHsva(ctx context.Context) ([]float64, error) { + var zero []float64 + p, err := mod.getField(ctx, "Color_hsva", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64Slice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Color) SetRgbaUint(_arg []uint) error { + ctx := context.Background() + arg, err := mod.toUintArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_rgba_uint", v.getPtr(), arg) +} + +func (v *Color) GetRgbaUint() []uint { + ret, err := v.getRgbaUint(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getRgbaUint(ctx context.Context) ([]uint, error) { + var zero []uint + p, err := mod.getField(ctx, "Color_rgba_uint", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := mod.toUintSlice(slice) + return ret, nil +} + +func (v *Color) SetRgbaInt(_arg []int) error { + ctx := context.Background() + arg, err := mod.toIntArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_rgba_int", v.getPtr(), arg) +} + +func (v *Color) GetRgbaInt() []int { + ret, err := v.getRgbaInt(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getRgbaInt(ctx context.Context) ([]int, error) { + var zero []int + p, err := mod.getField(ctx, "Color_rgba_int", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := mod.toIntSlice(slice) + return ret, nil +} + +func (v *Color) SetString(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_string", v.getPtr(), arg) +} + +func (v *Color) GetString() string { + ret, err := v.getString(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getString(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Color_string", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Color) SetIndex(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_index", v.getPtr(), arg) +} + +func (v *Color) GetIndex() int64 { + ret, err := v.getIndex(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getIndex(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Color_index", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *Color) SetType(_arg ColorType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Color_type", v.getPtr(), arg) +} + +func (v *Color) GetType() ColorType { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Color) getType(ctx context.Context) (ColorType, error) { + var zero ColorType + p, err := mod.getField(ctx, "Color_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := ColorType(p) + return ret, nil +} + +type PointFloat struct { + ptr uint64 +} + +func NewPointFloat(ctx context.Context) (*PointFloat, error) { + o, err := mod.newObject(ctx, "PointFloat") + if err != nil { + return nil, err + } + return newPointFloat(o), nil +} + +func newPointFloat(ptr uint64) *PointFloat { + if ptr == 0 { + return nil + } + return &PointFloat{ptr: ptr} +} + +func (v *PointFloat) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPointFloatSlice(v []uint64) []*PointFloat { + ret := make([]*PointFloat, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPointFloat(vv)) + } + return ret +} +func (v *PointFloat) SetX(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PointFloat_x", v.getPtr(), arg) +} + +func (v *PointFloat) GetX() float64 { + ret, err := v.getX(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PointFloat) getX(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "PointFloat_x", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PointFloat) SetY(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PointFloat_y", v.getPtr(), arg) +} + +func (v *PointFloat) GetY() float64 { + ret, err := v.getY(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PointFloat) getY(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "PointFloat_y", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type PluginActiveDevice struct { + ptr uint64 +} + +func NewPluginActiveDevice(ctx context.Context) (*PluginActiveDevice, error) { + o, err := mod.newObject(ctx, "PluginActiveDevice") + if err != nil { + return nil, err + } + return newPluginActiveDevice(o), nil +} + +func newPluginActiveDevice(ptr uint64) *PluginActiveDevice { + if ptr == 0 { + return nil + } + return &PluginActiveDevice{ptr: ptr} +} + +func (v *PluginActiveDevice) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginActiveDeviceSlice(v []uint64) []*PluginActiveDevice { + ret := make([]*PluginActiveDevice, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginActiveDevice(vv)) + } + return ret +} +func (v *PluginActiveDevice) SetEngine(_arg *DeviceEngine) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveDevice_engine", v.getPtr(), arg) +} + +func (v *PluginActiveDevice) GetEngine() *DeviceEngine { + ret, err := v.getEngine(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveDevice) getEngine(ctx context.Context) (*DeviceEngine, error) { + var zero *DeviceEngine + p, err := mod.getField(ctx, "PluginActiveDevice_engine", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDeviceEngine(p) + return ret, nil +} + +func (v *PluginActiveDevice) SetId(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveDevice_id", v.getPtr(), arg) +} + +func (v *PluginActiveDevice) GetId() int64 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveDevice) getId(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginActiveDevice_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginActiveDevice) SetFeatures(_arg *DeviceFeatures) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveDevice_features", v.getPtr(), arg) +} + +func (v *PluginActiveDevice) GetFeatures() *DeviceFeatures { + ret, err := v.getFeatures(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveDevice) getFeatures(ctx context.Context) (*DeviceFeatures, error) { + var zero *DeviceFeatures + p, err := mod.getField(ctx, "PluginActiveDevice_features", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDeviceFeatures(p) + return ret, nil +} + +func (v *PluginActiveDevice) SetType(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveDevice_type", v.getPtr(), arg) +} + +func (v *PluginActiveDevice) GetType() string { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveDevice) getType(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginActiveDevice_type", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type PluginActiveRender struct { + ptr uint64 +} + +func NewPluginActiveRender(ctx context.Context) (*PluginActiveRender, error) { + o, err := mod.newObject(ctx, "PluginActiveRender") + if err != nil { + return nil, err + } + return newPluginActiveRender(o), nil +} + +func newPluginActiveRender(ptr uint64) *PluginActiveRender { + if ptr == 0 { + return nil + } + return &PluginActiveRender{ptr: ptr} +} + +func (v *PluginActiveRender) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginActiveRenderSlice(v []uint64) []*PluginActiveRender { + ret := make([]*PluginActiveRender, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginActiveRender(vv)) + } + return ret +} +func (v *PluginActiveRender) SetEngine(_arg *RenderEngine) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveRender_engine", v.getPtr(), arg) +} + +func (v *PluginActiveRender) GetEngine() *RenderEngine { + ret, err := v.getEngine(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveRender) getEngine(ctx context.Context) (*RenderEngine, error) { + var zero *RenderEngine + p, err := mod.getField(ctx, "PluginActiveRender_engine", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRenderEngine(p) + return ret, nil +} + +func (v *PluginActiveRender) SetId(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveRender_id", v.getPtr(), arg) +} + +func (v *PluginActiveRender) GetId() int64 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveRender) getId(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginActiveRender_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginActiveRender) SetFeatures(_arg *RenderFeatures) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveRender_features", v.getPtr(), arg) +} + +func (v *PluginActiveRender) GetFeatures() *RenderFeatures { + ret, err := v.getFeatures(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveRender) getFeatures(ctx context.Context) (*RenderFeatures, error) { + var zero *RenderFeatures + p, err := mod.getField(ctx, "PluginActiveRender_features", v.getPtr()) + if err != nil { + return zero, err + } + ret := newRenderFeatures(p) + return ret, nil +} + +func (v *PluginActiveRender) SetType(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginActiveRender_type", v.getPtr(), arg) +} + +func (v *PluginActiveRender) GetType() string { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginActiveRender) getType(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginActiveRender_type", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type DeviceEngine struct { + ptr uint64 +} + +func NewDeviceEngine(ctx context.Context) (*DeviceEngine, error) { + o, err := mod.newObject(ctx, "DeviceEngine") + if err != nil { + return nil, err + } + return newDeviceEngine(o), nil +} + +func newDeviceEngine(ptr uint64) *DeviceEngine { + if ptr == 0 { + return nil + } + return &DeviceEngine{ptr: ptr} +} + +func (v *DeviceEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDeviceEngineSlice(v []uint64) []*DeviceEngine { + ret := make([]*DeviceEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDeviceEngine(vv)) + } + return ret +} +func (v *DeviceEngine) SetInitialize(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.DeviceEngine_Initialize == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceEngine_Initialize before") + } + mod.callbackFuncMap.DeviceEngine_Initialize[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceEngine_initialize", v.getPtr()) +} + +func (v *DeviceEngine) SetFormat(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.DeviceEngine_Format == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceEngine_Format before") + } + mod.callbackFuncMap.DeviceEngine_Format[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceEngine_format", v.getPtr()) +} + +func (v *DeviceEngine) SetFinalize(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.DeviceEngine_Finalize == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_DeviceEngine_Finalize before") + } + mod.callbackFuncMap.DeviceEngine_Finalize[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "DeviceEngine_finalize", v.getPtr()) +} + +type PostscriptAlias struct { + ptr uint64 +} + +func NewPostscriptAlias(ctx context.Context) (*PostscriptAlias, error) { + o, err := mod.newObject(ctx, "PostscriptAlias") + if err != nil { + return nil, err + } + return newPostscriptAlias(o), nil +} + +func newPostscriptAlias(ptr uint64) *PostscriptAlias { + if ptr == 0 { + return nil + } + return &PostscriptAlias{ptr: ptr} +} + +func (v *PostscriptAlias) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPostscriptAliasSlice(v []uint64) []*PostscriptAlias { + ret := make([]*PostscriptAlias, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPostscriptAlias(vv)) + } + return ret +} +func (v *PostscriptAlias) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_name", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetFamily(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_family", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetFamily() string { + ret, err := v.getFamily(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getFamily(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_family", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetWeight(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_weight", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetWeight() string { + ret, err := v.getWeight(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getWeight(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_weight", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetStretch(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_stretch", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetStretch() string { + ret, err := v.getStretch(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getStretch(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_stretch", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetStyle(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_style", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetStyle() string { + ret, err := v.getStyle(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getStyle(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_style", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetXfigCode(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_xfig_code", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetXfigCode() int64 { + ret, err := v.getXfigCode(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getXfigCode(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PostscriptAlias_xfig_code", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PostscriptAlias) SetSvgFontFamily(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_svg_font_family", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetSvgFontFamily() string { + ret, err := v.getSvgFontFamily(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getSvgFontFamily(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_svg_font_family", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetSvgFontWeight(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_svg_font_weight", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetSvgFontWeight() string { + ret, err := v.getSvgFontWeight(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getSvgFontWeight(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_svg_font_weight", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PostscriptAlias) SetSvgFontStyle(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PostscriptAlias_svg_font_style", v.getPtr(), arg) +} + +func (v *PostscriptAlias) GetSvgFontStyle() string { + ret, err := v.getSvgFontStyle(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PostscriptAlias) getSvgFontStyle(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PostscriptAlias_svg_font_style", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +type TextFont struct { + ptr uint64 +} + +func NewTextFont(ctx context.Context) (*TextFont, error) { + o, err := mod.newObject(ctx, "TextFont") + if err != nil { + return nil, err + } + return newTextFont(o), nil +} + +func newTextFont(ptr uint64) *TextFont { + if ptr == 0 { + return nil + } + return &TextFont{ptr: ptr} +} + +func (v *TextFont) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newTextFontSlice(v []uint64) []*TextFont { + ret := make([]*TextFont, 0, len(v)) + for _, vv := range v { + ret = append(ret, newTextFont(vv)) + } + return ret +} +func (v *TextFont) SetName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_name", v.getPtr(), arg) +} + +func (v *TextFont) GetName() string { + ret, err := v.getName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "TextFont_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *TextFont) SetColor(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_color", v.getPtr(), arg) +} + +func (v *TextFont) GetColor() string { + ret, err := v.getColor(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getColor(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "TextFont_color", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *TextFont) SetPostscriptAlias(_arg *PostscriptAlias) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_postscript_alias", v.getPtr(), arg) +} + +func (v *TextFont) GetPostscriptAlias() *PostscriptAlias { + ret, err := v.getPostscriptAlias(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getPostscriptAlias(ctx context.Context) (*PostscriptAlias, error) { + var zero *PostscriptAlias + p, err := mod.getField(ctx, "TextFont_postscript_alias", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPostscriptAlias(p) + return ret, nil +} + +func (v *TextFont) SetSize(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_size", v.getPtr(), arg) +} + +func (v *TextFont) GetSize() float64 { + ret, err := v.getSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getSize(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "TextFont_size", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *TextFont) SetFlags(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_flags", v.getPtr(), arg) +} + +func (v *TextFont) GetFlags() uint64 { + ret, err := v.getFlags(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getFlags(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "TextFont_flags", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +func (v *TextFont) SetCount(_arg uint64) error { + ctx := context.Background() + arg, err := mod.toUint64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "TextFont_count", v.getPtr(), arg) +} + +func (v *TextFont) GetCount() uint64 { + ret, err := v.getCount(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *TextFont) getCount(ctx context.Context) (uint64, error) { + var zero uint64 + p, err := mod.getField(ctx, "TextFont_count", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toUint64(p) + return ret, nil +} + +type Textspan struct { + ptr uint64 +} + +func NewTextspan(ctx context.Context) (*Textspan, error) { + o, err := mod.newObject(ctx, "Textspan") + if err != nil { + return nil, err + } + return newTextspan(o), nil +} + +func newTextspan(ptr uint64) *Textspan { + if ptr == 0 { + return nil + } + return &Textspan{ptr: ptr} +} + +func (v *Textspan) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newTextspanSlice(v []uint64) []*Textspan { + ret := make([]*Textspan, 0, len(v)) + for _, vv := range v { + ret = append(ret, newTextspan(vv)) + } + return ret +} +func (v *Textspan) SetStr(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_str", v.getPtr(), arg) +} + +func (v *Textspan) GetStr() string { + ret, err := v.getStr(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getStr(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "Textspan_str", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Textspan) SetFont(_arg *TextFont) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_font", v.getPtr(), arg) +} + +func (v *Textspan) GetFont() *TextFont { + ret, err := v.getFont(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getFont(ctx context.Context) (*TextFont, error) { + var zero *TextFont + p, err := mod.getField(ctx, "Textspan_font", v.getPtr()) + if err != nil { + return zero, err + } + ret := newTextFont(p) + return ret, nil +} + +func (v *Textspan) SetYOffsetLayout(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_y_offset_layout", v.getPtr(), arg) +} + +func (v *Textspan) GetYOffsetLayout() float64 { + ret, err := v.getYOffsetLayout(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getYOffsetLayout(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "Textspan_y_offset_layout", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Textspan) SetYOffsetCenterLine(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_y_offset_center_line", v.getPtr(), arg) +} + +func (v *Textspan) GetYOffsetCenterLine() float64 { + ret, err := v.getYOffsetCenterLine(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getYOffsetCenterLine(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "Textspan_y_offset_center_line", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Textspan) SetSize(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_size", v.getPtr(), arg) +} + +func (v *Textspan) GetSize() *PointFloat { + ret, err := v.getSize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getSize(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "Textspan_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *Textspan) SetJust(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "Textspan_just", v.getPtr(), arg) +} + +func (v *Textspan) GetJust() int64 { + ret, err := v.getJust(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *Textspan) getJust(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "Textspan_just", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type RenderEngine struct { + ptr uint64 +} + +func NewRenderEngine(ctx context.Context) (*RenderEngine, error) { + o, err := mod.newObject(ctx, "RenderEngine") + if err != nil { + return nil, err + } + return newRenderEngine(o), nil +} + +func newRenderEngine(ptr uint64) *RenderEngine { + if ptr == 0 { + return nil + } + return &RenderEngine{ptr: ptr} +} + +func (v *RenderEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newRenderEngineSlice(v []uint64) []*RenderEngine { + ret := make([]*RenderEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newRenderEngine(vv)) + } + return ret +} +func (v *RenderEngine) SetBeginJob(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginJob == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginJob before") + } + mod.callbackFuncMap.RenderEngine_BeginJob[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_job", v.getPtr()) +} + +func (v *RenderEngine) SetEndJob(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndJob == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndJob before") + } + mod.callbackFuncMap.RenderEngine_EndJob[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_job", v.getPtr()) +} + +func (v *RenderEngine) SetBeginGraph(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginGraph == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginGraph before") + } + mod.callbackFuncMap.RenderEngine_BeginGraph[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_graph", v.getPtr()) +} + +func (v *RenderEngine) SetEndGraph(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndGraph == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndGraph before") + } + mod.callbackFuncMap.RenderEngine_EndGraph[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_graph", v.getPtr()) +} + +func (v *RenderEngine) SetBeginLayer(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, int, int) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginLayer == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginLayer before") + } + mod.callbackFuncMap.RenderEngine_BeginLayer[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_layer", v.getPtr()) +} + +func (v *RenderEngine) SetEndLayer(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndLayer == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndLayer before") + } + mod.callbackFuncMap.RenderEngine_EndLayer[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_layer", v.getPtr()) +} + +func (v *RenderEngine) SetBeginPage(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginPage == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginPage before") + } + mod.callbackFuncMap.RenderEngine_BeginPage[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_page", v.getPtr()) +} + +func (v *RenderEngine) SetEndPage(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndPage == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndPage before") + } + mod.callbackFuncMap.RenderEngine_EndPage[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_page", v.getPtr()) +} + +func (v *RenderEngine) SetBeginCluster(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginCluster == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginCluster before") + } + mod.callbackFuncMap.RenderEngine_BeginCluster[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_cluster", v.getPtr()) +} + +func (v *RenderEngine) SetEndCluster(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndCluster == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndCluster before") + } + mod.callbackFuncMap.RenderEngine_EndCluster[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_cluster", v.getPtr()) +} + +func (v *RenderEngine) SetBeginNodes(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginNodes == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginNodes before") + } + mod.callbackFuncMap.RenderEngine_BeginNodes[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_nodes", v.getPtr()) +} + +func (v *RenderEngine) SetEndNodes(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndNodes == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndNodes before") + } + mod.callbackFuncMap.RenderEngine_EndNodes[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_nodes", v.getPtr()) +} + +func (v *RenderEngine) SetBeginEdges(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginEdges == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginEdges before") + } + mod.callbackFuncMap.RenderEngine_BeginEdges[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_edges", v.getPtr()) +} + +func (v *RenderEngine) SetEndEdges(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndEdges == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndEdges before") + } + mod.callbackFuncMap.RenderEngine_EndEdges[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_edges", v.getPtr()) +} + +func (v *RenderEngine) SetBeginNode(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginNode == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginNode before") + } + mod.callbackFuncMap.RenderEngine_BeginNode[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_node", v.getPtr()) +} + +func (v *RenderEngine) SetEndNode(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndNode == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndNode before") + } + mod.callbackFuncMap.RenderEngine_EndNode[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_node", v.getPtr()) +} + +func (v *RenderEngine) SetBeginEdge(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginEdge == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginEdge before") + } + mod.callbackFuncMap.RenderEngine_BeginEdge[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_edge", v.getPtr()) +} + +func (v *RenderEngine) SetEndEdge(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndEdge == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndEdge before") + } + mod.callbackFuncMap.RenderEngine_EndEdge[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_edge", v.getPtr()) +} + +func (v *RenderEngine) SetBeginAnchor(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, string, string, string) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginAnchor == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginAnchor before") + } + mod.callbackFuncMap.RenderEngine_BeginAnchor[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_anchor", v.getPtr()) +} + +func (v *RenderEngine) SetEndAnchor(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndAnchor == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndAnchor before") + } + mod.callbackFuncMap.RenderEngine_EndAnchor[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_anchor", v.getPtr()) +} + +func (v *RenderEngine) SetBeginLabel(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, LabelType) error]) error { + if mod.lookupFuncMap.RenderEngine_BeginLabel == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_BeginLabel before") + } + mod.callbackFuncMap.RenderEngine_BeginLabel[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_begin_label", v.getPtr()) +} + +func (v *RenderEngine) SetEndLabel(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job) error]) error { + if mod.lookupFuncMap.RenderEngine_EndLabel == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_EndLabel before") + } + mod.callbackFuncMap.RenderEngine_EndLabel[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_end_label", v.getPtr()) +} + +func (v *RenderEngine) SetTextspan(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, *PointFloat, *Textspan) error]) error { + if mod.lookupFuncMap.RenderEngine_Textspan == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Textspan before") + } + mod.callbackFuncMap.RenderEngine_Textspan[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_textspan", v.getPtr()) +} + +func (v *RenderEngine) SetResolveColor(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, *Color) error]) error { + if mod.lookupFuncMap.RenderEngine_ResolveColor == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_ResolveColor before") + } + mod.callbackFuncMap.RenderEngine_ResolveColor[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_resolve_color", v.getPtr()) +} + +func (v *RenderEngine) SetEllipse(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, []*PointFloat, int) error]) error { + if mod.lookupFuncMap.RenderEngine_Ellipse == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Ellipse before") + } + mod.callbackFuncMap.RenderEngine_Ellipse[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_ellipse", v.getPtr()) +} + +func (v *RenderEngine) SetPolygon(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, []*PointFloat, uint32, int) error]) error { + if mod.lookupFuncMap.RenderEngine_Polygon == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Polygon before") + } + mod.callbackFuncMap.RenderEngine_Polygon[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_polygon", v.getPtr()) +} + +func (v *RenderEngine) SetBeziercurve(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, []*PointFloat, uint32, int) error]) error { + if mod.lookupFuncMap.RenderEngine_Beziercurve == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Beziercurve before") + } + mod.callbackFuncMap.RenderEngine_Beziercurve[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_beziercurve", v.getPtr()) +} + +func (v *RenderEngine) SetPolyline(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, []*PointFloat, uint32) error]) error { + if mod.lookupFuncMap.RenderEngine_Polyline == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Polyline before") + } + mod.callbackFuncMap.RenderEngine_Polyline[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_polyline", v.getPtr()) +} + +func (v *RenderEngine) SetComment(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string) error]) error { + if mod.lookupFuncMap.RenderEngine_Comment == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_Comment before") + } + mod.callbackFuncMap.RenderEngine_Comment[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_comment", v.getPtr()) +} + +func (v *RenderEngine) SetLibraryShape(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, string, []*PointFloat, uint32, int) error]) error { + if mod.lookupFuncMap.RenderEngine_LibraryShape == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_RenderEngine_LibraryShape before") + } + mod.callbackFuncMap.RenderEngine_LibraryShape[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "RenderEngine_library_shape", v.getPtr()) +} + +type FormatterEngine struct { + ptr uint64 +} + +func newFormatterEngine(ptr uint64) *FormatterEngine { + if ptr == 0 { + return nil + } + return &FormatterEngine{ptr: ptr} +} + +func (v *FormatterEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newFormatterEngineSlice(v []uint64) []*FormatterEngine { + ret := make([]*FormatterEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newFormatterEngine(vv)) + } + return ret +} + +type LayoutEngine struct { + ptr uint64 +} + +func NewLayoutEngine(ctx context.Context) (*LayoutEngine, error) { + o, err := mod.newObject(ctx, "LayoutEngine") + if err != nil { + return nil, err + } + return newLayoutEngine(o), nil +} + +func newLayoutEngine(ptr uint64) *LayoutEngine { + if ptr == 0 { + return nil + } + return &LayoutEngine{ptr: ptr} +} + +func (v *LayoutEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newLayoutEngineSlice(v []uint64) []*LayoutEngine { + ret := make([]*LayoutEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newLayoutEngine(vv)) + } + return ret +} +func (v *LayoutEngine) SetLayout(ctx context.Context, arg *CallbackFunc[func(context.Context, *Graph) error]) error { + if mod.lookupFuncMap.LayoutEngine_Layout == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_LayoutEngine_Layout before") + } + mod.callbackFuncMap.LayoutEngine_Layout[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "LayoutEngine_layout", v.getPtr()) +} + +func (v *LayoutEngine) SetCleanup(ctx context.Context, arg *CallbackFunc[func(context.Context, *Graph) error]) error { + if mod.lookupFuncMap.LayoutEngine_Cleanup == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_LayoutEngine_Cleanup before") + } + mod.callbackFuncMap.LayoutEngine_Cleanup[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "LayoutEngine_cleanup", v.getPtr()) +} + +type TextLayoutEngine struct { + ptr uint64 +} + +func NewTextLayoutEngine(ctx context.Context) (*TextLayoutEngine, error) { + o, err := mod.newObject(ctx, "TextLayoutEngine") + if err != nil { + return nil, err + } + return newTextLayoutEngine(o), nil +} + +func newTextLayoutEngine(ptr uint64) *TextLayoutEngine { + if ptr == 0 { + return nil + } + return &TextLayoutEngine{ptr: ptr} +} + +func (v *TextLayoutEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newTextLayoutEngineSlice(v []uint64) []*TextLayoutEngine { + ret := make([]*TextLayoutEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newTextLayoutEngine(vv)) + } + return ret +} +func (v *TextLayoutEngine) SetTextlayout(ctx context.Context, arg *CallbackFunc[func(context.Context, *Textspan, []string) (bool, error)]) error { + if mod.lookupFuncMap.TextLayoutEngine_TextLayout == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_TextLayoutEngine_TextLayout before") + } + mod.callbackFuncMap.TextLayoutEngine_TextLayout[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "TextLayoutEngine_textlayout", v.getPtr()) +} + +type LoadImageEngine struct { + ptr uint64 +} + +func NewLoadImageEngine(ctx context.Context) (*LoadImageEngine, error) { + o, err := mod.newObject(ctx, "LoadImageEngine") + if err != nil { + return nil, err + } + return newLoadImageEngine(o), nil +} + +func newLoadImageEngine(ptr uint64) *LoadImageEngine { + if ptr == 0 { + return nil + } + return &LoadImageEngine{ptr: ptr} +} + +func (v *LoadImageEngine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newLoadImageEngineSlice(v []uint64) []*LoadImageEngine { + ret := make([]*LoadImageEngine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newLoadImageEngine(vv)) + } + return ret +} +func (v *LoadImageEngine) SetLoadImage(ctx context.Context, arg *CallbackFunc[func(context.Context, *Job, *UserShape, *BoxFloat, bool) error]) error { + if mod.lookupFuncMap.LoadImageEngine_LoadImage == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_LoadImageEngine_LoadImage before") + } + mod.callbackFuncMap.LoadImageEngine_LoadImage[arg.funcID] = arg.cb + return mod.setFieldFunction(ctx, "LoadImageEngine_load_image", v.getPtr()) +} + +type Engine struct { + ptr uint64 +} + +func NewEngine(ctx context.Context) (*Engine, error) { + o, err := mod.newObject(ctx, "Engine") + if err != nil { + return nil, err + } + return newEngine(o), nil +} + +func newEngine(ptr uint64) *Engine { + if ptr == 0 { + return nil + } + return &Engine{ptr: ptr} +} + +func (v *Engine) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newEngineSlice(v []uint64) []*Engine { + ret := make([]*Engine, 0, len(v)) + for _, vv := range v { + ret = append(ret, newEngine(vv)) + } + return ret +} + +type LayoutFeatures struct { + ptr uint64 +} + +func NewLayoutFeatures(ctx context.Context) (*LayoutFeatures, error) { + o, err := mod.newObject(ctx, "LayoutFeatures") + if err != nil { + return nil, err + } + return newLayoutFeatures(o), nil +} + +func newLayoutFeatures(ptr uint64) *LayoutFeatures { + if ptr == 0 { + return nil + } + return &LayoutFeatures{ptr: ptr} +} + +func (v *LayoutFeatures) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newLayoutFeaturesSlice(v []uint64) []*LayoutFeatures { + ret := make([]*LayoutFeatures, 0, len(v)) + for _, vv := range v { + ret = append(ret, newLayoutFeatures(vv)) + } + return ret +} +func (v *LayoutFeatures) SetFlags(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "LayoutFeatures_flags", v.getPtr(), arg) +} + +func (v *LayoutFeatures) GetFlags() int64 { + ret, err := v.getFlags(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *LayoutFeatures) getFlags(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "LayoutFeatures_flags", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +type DeviceFeatures struct { + ptr uint64 +} + +func NewDeviceFeatures(ctx context.Context) (*DeviceFeatures, error) { + o, err := mod.newObject(ctx, "DeviceFeatures") + if err != nil { + return nil, err + } + return newDeviceFeatures(o), nil +} + +func newDeviceFeatures(ptr uint64) *DeviceFeatures { + if ptr == 0 { + return nil + } + return &DeviceFeatures{ptr: ptr} +} + +func (v *DeviceFeatures) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newDeviceFeaturesSlice(v []uint64) []*DeviceFeatures { + ret := make([]*DeviceFeatures, 0, len(v)) + for _, vv := range v { + ret = append(ret, newDeviceFeatures(vv)) + } + return ret +} +func (v *DeviceFeatures) SetFlags(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DeviceFeatures_flags", v.getPtr(), arg) +} + +func (v *DeviceFeatures) GetFlags() int64 { + ret, err := v.getFlags(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DeviceFeatures) getFlags(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "DeviceFeatures_flags", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *DeviceFeatures) SetDefaultMargin(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DeviceFeatures_default_margin", v.getPtr(), arg) +} + +func (v *DeviceFeatures) GetDefaultMargin() *PointFloat { + ret, err := v.getDefaultMargin(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DeviceFeatures) getDefaultMargin(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "DeviceFeatures_default_margin", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *DeviceFeatures) SetDefaultPagesize(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DeviceFeatures_default_pagesize", v.getPtr(), arg) +} + +func (v *DeviceFeatures) GetDefaultPagesize() *PointFloat { + ret, err := v.getDefaultPagesize(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DeviceFeatures) getDefaultPagesize(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "DeviceFeatures_default_pagesize", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +func (v *DeviceFeatures) SetDefaultDpi(_arg *PointFloat) error { + ctx := context.Background() + arg, err := mod.toObjectWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "DeviceFeatures_default_dpi", v.getPtr(), arg) +} + +func (v *DeviceFeatures) GetDefaultDpi() *PointFloat { + ret, err := v.getDefaultDpi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *DeviceFeatures) getDefaultDpi(ctx context.Context) (*PointFloat, error) { + var zero *PointFloat + p, err := mod.getField(ctx, "DeviceFeatures_default_dpi", v.getPtr()) + if err != nil { + return zero, err + } + ret := newPointFloat(p) + return ret, nil +} + +type RenderFeatures struct { + ptr uint64 +} + +func NewRenderFeatures(ctx context.Context) (*RenderFeatures, error) { + o, err := mod.newObject(ctx, "RenderFeatures") + if err != nil { + return nil, err + } + return newRenderFeatures(o), nil +} + +func newRenderFeatures(ptr uint64) *RenderFeatures { + if ptr == 0 { + return nil + } + return &RenderFeatures{ptr: ptr} +} + +func (v *RenderFeatures) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newRenderFeaturesSlice(v []uint64) []*RenderFeatures { + ret := make([]*RenderFeatures, 0, len(v)) + for _, vv := range v { + ret = append(ret, newRenderFeatures(vv)) + } + return ret +} +func (v *RenderFeatures) SetFlags(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "RenderFeatures_flags", v.getPtr(), arg) +} + +func (v *RenderFeatures) GetFlags() int64 { + ret, err := v.getFlags(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *RenderFeatures) getFlags(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "RenderFeatures_flags", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *RenderFeatures) SetDefaultPad(_arg float64) error { + ctx := context.Background() + arg, err := mod.toDoubleWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "RenderFeatures_default_pad", v.getPtr(), arg) +} + +func (v *RenderFeatures) GetDefaultPad() float64 { + ret, err := v.getDefaultPad(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *RenderFeatures) getDefaultPad(ctx context.Context) (float64, error) { + var zero float64 + p, err := mod.getField(ctx, "RenderFeatures_default_pad", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toFloat64(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *RenderFeatures) SetKnownColors(_arg []string) error { + ctx := context.Background() + arg, err := mod.toStringArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "RenderFeatures_known_colors", v.getPtr(), arg) +} + +func (v *RenderFeatures) GetKnownColors() []string { + ret, err := v.getKnownColors(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *RenderFeatures) getKnownColors(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.getField(ctx, "RenderFeatures_known_colors", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *RenderFeatures) SetSizeKnownColors(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "RenderFeatures_size_known_colors", v.getPtr(), arg) +} + +func (v *RenderFeatures) GetSizeKnownColors() int64 { + ret, err := v.getSizeKnownColors(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *RenderFeatures) getSizeKnownColors(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "RenderFeatures_size_known_colors", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *RenderFeatures) SetColorType(_arg ColorType) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "RenderFeatures_color_type", v.getPtr(), arg) +} + +func (v *RenderFeatures) GetColorType() ColorType { + ret, err := v.getColorType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *RenderFeatures) getColorType(ctx context.Context) (ColorType, error) { + var zero ColorType + p, err := mod.getField(ctx, "RenderFeatures_color_type", v.getPtr()) + if err != nil { + return zero, err + } + ret := ColorType(p) + return ret, nil +} + +type Features struct { + ptr uint64 +} + +func NewFeatures(ctx context.Context) (*Features, error) { + o, err := mod.newObject(ctx, "Features") + if err != nil { + return nil, err + } + return newFeatures(o), nil +} + +func newFeatures(ptr uint64) *Features { + if ptr == 0 { + return nil + } + return &Features{ptr: ptr} +} + +func (v *Features) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newFeaturesSlice(v []uint64) []*Features { + ret := make([]*Features, 0, len(v)) + for _, vv := range v { + ret = append(ret, newFeatures(vv)) + } + return ret +} + +type PluginInstalled struct { + ptr uint64 +} + +func NewPluginInstalled(ctx context.Context) (*PluginInstalled, error) { + o, err := mod.newObject(ctx, "PluginInstalled") + if err != nil { + return nil, err + } + return newPluginInstalled(o), nil +} + +func newPluginInstalled(ptr uint64) *PluginInstalled { + if ptr == 0 { + return nil + } + return &PluginInstalled{ptr: ptr} +} + +func (v *PluginInstalled) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginInstalledSlice(v []uint64) []*PluginInstalled { + ret := make([]*PluginInstalled, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginInstalled(vv)) + } + return ret +} +func (v *PluginInstalled) SetId(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginInstalled_id", v.getPtr(), arg) +} + +func (v *PluginInstalled) GetId() int64 { + ret, err := v.getId(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginInstalled) getId(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginInstalled_id", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginInstalled) SetType(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginInstalled_type", v.getPtr(), arg) +} + +func (v *PluginInstalled) GetType() string { + ret, err := v.getType(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginInstalled) getType(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginInstalled_type", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PluginInstalled) SetQuality(_arg int64) error { + ctx := context.Background() + arg, err := mod.toInt64WasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginInstalled_quality", v.getPtr(), arg) +} + +func (v *PluginInstalled) GetQuality() int64 { + ret, err := v.getQuality(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginInstalled) getQuality(ctx context.Context) (int64, error) { + var zero int64 + p, err := mod.getField(ctx, "PluginInstalled_quality", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt64(p) + return ret, nil +} + +func (v *PluginInstalled) SetEngine(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginInstalled_engine", v.getPtr(), arg) +} + +func (v *PluginInstalled) GetEngine() any { + ret, err := v.getEngine(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginInstalled) getEngine(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "PluginInstalled_engine", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *PluginInstalled) SetFeatures(_arg any) error { + ctx := context.Background() + arg, err := mod.toAnyWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginInstalled_features", v.getPtr(), arg) +} + +func (v *PluginInstalled) GetFeatures() any { + ret, err := v.getFeatures(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginInstalled) getFeatures(ctx context.Context) (any, error) { + var zero any + p, err := mod.getField(ctx, "PluginInstalled_features", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +type PluginAPI struct { + ptr uint64 +} + +func NewPluginAPI(ctx context.Context) (*PluginAPI, error) { + o, err := mod.newObject(ctx, "PluginAPI") + if err != nil { + return nil, err + } + return newPluginAPI(o), nil +} + +func newPluginAPI(ptr uint64) *PluginAPI { + if ptr == 0 { + return nil + } + return &PluginAPI{ptr: ptr} +} + +func (v *PluginAPI) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginAPISlice(v []uint64) []*PluginAPI { + ret := make([]*PluginAPI, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginAPI(vv)) + } + return ret +} +func (v *PluginAPI) SetApi(_arg API) error { + ctx := context.Background() + arg, err := mod.toIntWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAPI_api", v.getPtr(), arg) +} + +func (v *PluginAPI) GetApi() API { + ret, err := v.getApi(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAPI) getApi(ctx context.Context) (API, error) { + var zero API + p, err := mod.getField(ctx, "PluginAPI_api", v.getPtr()) + if err != nil { + return zero, err + } + ret := API(p) + return ret, nil +} + +func (v *PluginAPI) SetTypes(_arg []*PluginInstalled) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginAPI_types", v.getPtr(), arg) +} + +func (v *PluginAPI) GetTypes() []*PluginInstalled { + ret, err := v.getTypes(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginAPI) getTypes(ctx context.Context) ([]*PluginInstalled, error) { + var zero []*PluginInstalled + p, err := mod.getField(ctx, "PluginAPI_types", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newPluginInstalledSlice(slice) + return ret, nil +} + +type PluginLibrary struct { + ptr uint64 +} + +func NewPluginLibrary(ctx context.Context) (*PluginLibrary, error) { + o, err := mod.newObject(ctx, "PluginLibrary") + if err != nil { + return nil, err + } + return newPluginLibrary(o), nil +} + +func newPluginLibrary(ptr uint64) *PluginLibrary { + if ptr == 0 { + return nil + } + return &PluginLibrary{ptr: ptr} +} + +func (v *PluginLibrary) getPtr() uint64 { + if v == nil { + return 0 + } + return v.ptr +} + +func newPluginLibrarySlice(v []uint64) []*PluginLibrary { + ret := make([]*PluginLibrary, 0, len(v)) + for _, vv := range v { + ret = append(ret, newPluginLibrary(vv)) + } + return ret +} +func (v *PluginLibrary) SetPackageName(_arg string) error { + ctx := context.Background() + arg, err := mod.toStringWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginLibrary_package_name", v.getPtr(), arg) +} + +func (v *PluginLibrary) GetPackageName() string { + ret, err := v.getPackageName(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginLibrary) getPackageName(ctx context.Context) (string, error) { + var zero string + p, err := mod.getField(ctx, "PluginLibrary_package_name", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *PluginLibrary) SetApis(_arg []*PluginAPI) error { + ctx := context.Background() + arg, err := mod.toObjectArrayWasmValue(ctx, _arg) + if err != nil { + return err + } + return mod.setField(ctx, "PluginLibrary_apis", v.getPtr(), arg) +} + +func (v *PluginLibrary) GetApis() []*PluginAPI { + ret, err := v.getApis(context.Background()) + if err != nil { + panic(err) + } + return ret +} + +func (v *PluginLibrary) getApis(ctx context.Context) ([]*PluginAPI, error) { + var zero []*PluginAPI + p, err := mod.getField(ctx, "PluginLibrary_apis", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret := newPluginAPISlice(slice) + return ret, nil +} + +type ObjectTag int + +var ( + GRAPH ObjectTag = 0 + NODE ObjectTag = 1 + OUT_EDGE ObjectTag = 2 + IN_EDGE ObjectTag = 3 + EDGE ObjectTag = 4 +) + +func (v ObjectTag) String() string { + switch v { + case GRAPH: + return "GRAPH" + case NODE: + return "NODE" + case OUT_EDGE: + return "OUT_EDGE" + case IN_EDGE: + return "IN_EDGE" + case EDGE: + return "EDGE" + } + return "" +} + +type ErrorLevel int + +var ( + WARN ErrorLevel = 0 + ERR ErrorLevel = 1 + MAX ErrorLevel = 2 + PREV ErrorLevel = 3 +) + +func (v ErrorLevel) String() string { + switch v { + case WARN: + return "WARN" + case ERR: + return "ERR" + case MAX: + return "MAX" + case PREV: + return "PREV" + } + return "" +} + +type ImageType int + +var ( + IMAGE_TYPE_NULL ImageType = 0 + IMAGE_TYPE_BMP ImageType = 1 + IMAGE_TYPE_GIF ImageType = 2 + IMAGE_TYPE_PNG ImageType = 3 + IMAGE_TYPE_JPEG ImageType = 4 + IMAGE_TYPE_PDF ImageType = 5 + IMAGE_TYPE_PS ImageType = 6 + IMAGE_TYPE_EPS ImageType = 7 + IMAGE_TYPE_SVG ImageType = 8 + IMAGE_TYPE_XML ImageType = 9 + IMAGE_TYPE_RIFF ImageType = 10 + IMAGE_TYPE_WEBP ImageType = 11 + IMAGE_TYPE_ICO ImageType = 12 + IMAGE_TYPE_TIFF ImageType = 13 +) + +func (v ImageType) String() string { + switch v { + case IMAGE_TYPE_NULL: + return "IMAGE_TYPE_NULL" + case IMAGE_TYPE_BMP: + return "IMAGE_TYPE_BMP" + case IMAGE_TYPE_GIF: + return "IMAGE_TYPE_GIF" + case IMAGE_TYPE_PNG: + return "IMAGE_TYPE_PNG" + case IMAGE_TYPE_JPEG: + return "IMAGE_TYPE_JPEG" + case IMAGE_TYPE_PDF: + return "IMAGE_TYPE_PDF" + case IMAGE_TYPE_PS: + return "IMAGE_TYPE_PS" + case IMAGE_TYPE_EPS: + return "IMAGE_TYPE_EPS" + case IMAGE_TYPE_SVG: + return "IMAGE_TYPE_SVG" + case IMAGE_TYPE_XML: + return "IMAGE_TYPE_XML" + case IMAGE_TYPE_RIFF: + return "IMAGE_TYPE_RIFF" + case IMAGE_TYPE_WEBP: + return "IMAGE_TYPE_WEBP" + case IMAGE_TYPE_ICO: + return "IMAGE_TYPE_ICO" + case IMAGE_TYPE_TIFF: + return "IMAGE_TYPE_TIFF" + } + return "" +} + +type ObjectType int + +var ( + ROOTGRAPH_OBJTYPE ObjectType = 0 + CLUSTER_OBJTYPE ObjectType = 1 + NODE_OBJTYPE ObjectType = 2 + EDGE_OBJTYPE ObjectType = 3 +) + +func (v ObjectType) String() string { + switch v { + case ROOTGRAPH_OBJTYPE: + return "ROOTGRAPH_OBJTYPE" + case CLUSTER_OBJTYPE: + return "CLUSTER_OBJTYPE" + case NODE_OBJTYPE: + return "NODE_OBJTYPE" + case EDGE_OBJTYPE: + return "EDGE_OBJTYPE" + } + return "" +} + +type MapShapeType int + +var ( + MAP_RECTANGLE MapShapeType = 0 + MAP_CIRCLE MapShapeType = 1 + MAP_POLYGON MapShapeType = 2 +) + +func (v MapShapeType) String() string { + switch v { + case MAP_RECTANGLE: + return "MAP_RECTANGLE" + case MAP_CIRCLE: + return "MAP_CIRCLE" + case MAP_POLYGON: + return "MAP_POLYGON" + } + return "" +} + +type EmitState int + +var ( + EMIT_GDRAW EmitState = 0 + EMIT_CDRAW EmitState = 1 + EMIT_TDRAW EmitState = 2 + EMIT_HDRAW EmitState = 3 + EMIT_GLABEL EmitState = 4 + EMIT_CLABEL EmitState = 5 + EMIT_TLABEL EmitState = 6 + EMIT_HLABEL EmitState = 7 + EMIT_NDRAW EmitState = 8 + EMIT_EDRAW EmitState = 9 + EMIT_NLABEL EmitState = 10 + EMIT_ELABEL EmitState = 11 +) + +func (v EmitState) String() string { + switch v { + case EMIT_GDRAW: + return "EMIT_GDRAW" + case EMIT_CDRAW: + return "EMIT_CDRAW" + case EMIT_TDRAW: + return "EMIT_TDRAW" + case EMIT_HDRAW: + return "EMIT_HDRAW" + case EMIT_GLABEL: + return "EMIT_GLABEL" + case EMIT_CLABEL: + return "EMIT_CLABEL" + case EMIT_TLABEL: + return "EMIT_TLABEL" + case EMIT_HLABEL: + return "EMIT_HLABEL" + case EMIT_NDRAW: + return "EMIT_NDRAW" + case EMIT_EDRAW: + return "EMIT_EDRAW" + case EMIT_NLABEL: + return "EMIT_NLABEL" + case EMIT_ELABEL: + return "EMIT_ELABEL" + } + return "" +} + +type EmitType int + +var ( + EMIT_SORTED EmitType = 0 + EMIT_COLORS EmitType = 1 + EMIT_CLUSTERS_LAST EmitType = 2 + EMIT_PREORDER EmitType = 3 + EMIT_EDGE_SORTED EmitType = 4 +) + +func (v EmitType) String() string { + switch v { + case EMIT_SORTED: + return "EMIT_SORTED" + case EMIT_COLORS: + return "EMIT_COLORS" + case EMIT_CLUSTERS_LAST: + return "EMIT_CLUSTERS_LAST" + case EMIT_PREORDER: + return "EMIT_PREORDER" + case EMIT_EDGE_SORTED: + return "EMIT_EDGE_SORTED" + } + return "" +} + +type DeviceType int + +var ( + DEVICE_DOES_PAGES DeviceType = 0 + DEVICE_DOES_LAYERS DeviceType = 1 + DEVICE_EVENTS DeviceType = 2 + DEVICE_DOES_TRUECOLOR DeviceType = 3 + DEVICE_BINARY_FORMAT DeviceType = 4 + DEVICE_COMPRESSED_FORMAT DeviceType = 5 + DEVICE_NO_WRITER DeviceType = 6 +) + +func (v DeviceType) String() string { + switch v { + case DEVICE_DOES_PAGES: + return "DEVICE_DOES_PAGES" + case DEVICE_DOES_LAYERS: + return "DEVICE_DOES_LAYERS" + case DEVICE_EVENTS: + return "DEVICE_EVENTS" + case DEVICE_DOES_TRUECOLOR: + return "DEVICE_DOES_TRUECOLOR" + case DEVICE_BINARY_FORMAT: + return "DEVICE_BINARY_FORMAT" + case DEVICE_COMPRESSED_FORMAT: + return "DEVICE_COMPRESSED_FORMAT" + case DEVICE_NO_WRITER: + return "DEVICE_NO_WRITER" + } + return "" +} + +type RenderType int + +var ( + RENDER_Y_GOES_DOWN RenderType = 0 + RENDER_DOES_TRANSFORM RenderType = 1 + RENDER_DOES_LABELS RenderType = 2 + RENDER_DOES_MAPS RenderType = 3 + RENDER_DOES_MAP_RECTANGLE RenderType = 4 + RENDER_DOES_MAP_CIRCLE RenderType = 5 + RENDER_DOES_MAP_POLYGON RenderType = 6 + RENDER_DOES_MAP_ELLIPSE RenderType = 7 + RENDER_DOES_MAP_BSPLINE RenderType = 8 + RENDER_DOES_TOOLTIPS RenderType = 9 + RENDER_DOES_TARGETS RenderType = 10 + RENDER_DOES_Z RenderType = 11 + RENDER_NO_WHITE_BG RenderType = 12 +) + +func (v RenderType) String() string { + switch v { + case RENDER_Y_GOES_DOWN: + return "RENDER_Y_GOES_DOWN" + case RENDER_DOES_TRANSFORM: + return "RENDER_DOES_TRANSFORM" + case RENDER_DOES_LABELS: + return "RENDER_DOES_LABELS" + case RENDER_DOES_MAPS: + return "RENDER_DOES_MAPS" + case RENDER_DOES_MAP_RECTANGLE: + return "RENDER_DOES_MAP_RECTANGLE" + case RENDER_DOES_MAP_CIRCLE: + return "RENDER_DOES_MAP_CIRCLE" + case RENDER_DOES_MAP_POLYGON: + return "RENDER_DOES_MAP_POLYGON" + case RENDER_DOES_MAP_ELLIPSE: + return "RENDER_DOES_MAP_ELLIPSE" + case RENDER_DOES_MAP_BSPLINE: + return "RENDER_DOES_MAP_BSPLINE" + case RENDER_DOES_TOOLTIPS: + return "RENDER_DOES_TOOLTIPS" + case RENDER_DOES_TARGETS: + return "RENDER_DOES_TARGETS" + case RENDER_DOES_Z: + return "RENDER_DOES_Z" + case RENDER_NO_WHITE_BG: + return "RENDER_NO_WHITE_BG" + } + return "" +} + +type RequiredType int + +var ( + LAYOUT_NOT_REQUIRED RequiredType = 0 + OUTPUT_NOT_REQUIRED RequiredType = 1 +) + +func (v RequiredType) String() string { + switch v { + case LAYOUT_NOT_REQUIRED: + return "LAYOUT_NOT_REQUIRED" + case OUTPUT_NOT_REQUIRED: + return "OUTPUT_NOT_REQUIRED" + } + return "" +} + +type PenType int + +var ( + PEN_NONE PenType = 0 + PEN_DASHED PenType = 1 + PEN_DOTTED PenType = 2 + PEN_SOLID PenType = 3 +) + +func (v PenType) String() string { + switch v { + case PEN_NONE: + return "PEN_NONE" + case PEN_DASHED: + return "PEN_DASHED" + case PEN_DOTTED: + return "PEN_DOTTED" + case PEN_SOLID: + return "PEN_SOLID" + } + return "" +} + +type FillType int + +var ( + FILL_NONE FillType = 0 + FILL_SOLID FillType = 1 + FILL_LINEAR FillType = 2 + FILL_RADIAL FillType = 3 +) + +func (v FillType) String() string { + switch v { + case FILL_NONE: + return "FILL_NONE" + case FILL_SOLID: + return "FILL_SOLID" + case FILL_LINEAR: + return "FILL_LINEAR" + case FILL_RADIAL: + return "FILL_RADIAL" + } + return "" +} + +type FontType int + +var ( + FONT_REGULAR FontType = 0 + FONT_BOLD FontType = 1 + FONT_ITALIC FontType = 2 +) + +func (v FontType) String() string { + switch v { + case FONT_REGULAR: + return "FONT_REGULAR" + case FONT_BOLD: + return "FONT_BOLD" + case FONT_ITALIC: + return "FONT_ITALIC" + } + return "" +} + +type LabelType int + +var ( + LABEL_PLAIN LabelType = 0 + LABEL_HTML LabelType = 1 +) + +func (v LabelType) String() string { + switch v { + case LABEL_PLAIN: + return "LABEL_PLAIN" + case LABEL_HTML: + return "LABEL_HTML" + } + return "" +} + +type ColorType int + +var ( + HSVA_DOUBLE ColorType = 0 + RGBA_BYTE ColorType = 1 + RGBA_WORD ColorType = 2 + RGBA_DOUBLE ColorType = 3 + COLOR_STRING ColorType = 4 + COLOR_INDEX ColorType = 5 +) + +func (v ColorType) String() string { + switch v { + case HSVA_DOUBLE: + return "HSVA_DOUBLE" + case RGBA_BYTE: + return "RGBA_BYTE" + case RGBA_WORD: + return "RGBA_WORD" + case RGBA_DOUBLE: + return "RGBA_DOUBLE" + case COLOR_STRING: + return "COLOR_STRING" + case COLOR_INDEX: + return "COLOR_INDEX" + } + return "" +} + +type API int + +var ( + API_RENDER API = 0 + API_LAYOUT API = 1 + API_TEXTLAYOUT API = 2 + API_DEVICE API = 3 + API_LOADIMAGE API = 4 +) + +func (v API) String() string { + switch v { + case API_RENDER: + return "API_RENDER" + case API_LAYOUT: + return "API_LAYOUT" + case API_TEXTLAYOUT: + return "API_TEXTLAYOUT" + case API_DEVICE: + return "API_DEVICE" + case API_LOADIMAGE: + return "API_LOADIMAGE" + } + return "" +} + +func (v *Graph) Close(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_close", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) IsSimple(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_isSimple", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Node(ctx context.Context, _arg0 string, _arg1 int) (*Node, error) { + var zero *Node + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_node", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) IdNode(ctx context.Context, _arg0 uint64, _arg1 int) (*Node, error) { + var zero *Node + arg0, err := mod.toUint64WasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_idNode", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) SubNode(ctx context.Context, _arg0 *Node, _arg1 int) (*Node, error) { + var zero *Node + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_subNode", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) FirstNode(ctx context.Context) (*Node, error) { + var zero *Node + p, err := mod.callWithRet(ctx, "Graph_firstNode", v.getPtr()) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) NextNode(ctx context.Context, _arg0 *Node) (*Node, error) { + var zero *Node + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_nextNode", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) LastNode(ctx context.Context) (*Node, error) { + var zero *Node + p, err := mod.callWithRet(ctx, "Graph_lastNode", v.getPtr()) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) PrevNode(ctx context.Context, _arg0 *Node) (*Node, error) { + var zero *Node + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_prevNode", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newNode(p) + return ret, nil +} + +func (v *Graph) SubRep(ctx context.Context, _arg0 *Node) (*SubNode, error) { + var zero *SubNode + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_subRep", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newSubNode(p) + return ret, nil +} + +func (v *Node) Before(ctx context.Context, _arg0 *Node) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Node_before", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Edge(ctx context.Context, _arg0 *Node, _arg1 *Node, _arg2 string, _arg3 int) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + arg3, err := mod.toIntWasmValue(ctx, _arg3) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_edge", v.getPtr(), arg0, arg1, arg2, arg3) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) IdEdge(ctx context.Context, _arg0 *Node, _arg1 *Node, _arg2 uint64, _arg3 int) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toUint64WasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + arg3, err := mod.toIntWasmValue(ctx, _arg3) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_idEdge", v.getPtr(), arg0, arg1, arg2, arg3) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) SubEdge(ctx context.Context, _arg0 *Edge, _arg1 int) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_subEdge", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) FirstIn(ctx context.Context, _arg0 *Node) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_firstIn", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) NextIn(ctx context.Context, _arg0 *Edge) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_nextIn", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) FirstOut(ctx context.Context, _arg0 *Node) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_firstOut", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) NextOut(ctx context.Context, _arg0 *Edge) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_nextOut", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) FirstEdge(ctx context.Context, _arg0 *Node) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_firstEdge", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) NextEdge(ctx context.Context, _arg0 *Edge, _arg1 *Node) (*Edge, error) { + var zero *Edge + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_nextEdge", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newEdge(p) + return ret, nil +} + +func (v *Graph) Contains(ctx context.Context, _arg0 any) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_contains", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Node) ReLabel(ctx context.Context, _arg0 string) (int, error) { + var zero int + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Node_reLabel", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Delete(ctx context.Context, _arg0 any) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_delete", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) DeleteSubGraph(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_deleteSubGraph", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) DeleteNode(ctx context.Context, _arg0 *Node) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_deleteNode", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) DeleteEdge(ctx context.Context, _arg0 *Edge) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_deleteEdge", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Strdup(ctx context.Context, _arg0 string) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_strdup", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Graph) StrdupHTML(ctx context.Context, _arg0 string) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_strdupHTML", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Graph) StrBind(ctx context.Context, _arg0 string) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_strBind", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Graph) StrFree(ctx context.Context, _arg0 string) (int, error) { + var zero int + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_strFree", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Attr(ctx context.Context, _arg0 int, _arg1 string, _arg2 string) (*Sym, error) { + var zero *Sym + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_attr", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := newSym(p) + return ret, nil +} + +func (v *Graph) NextAttr(ctx context.Context, _arg0 int, _arg1 *Sym) (*Sym, error) { + var zero *Sym + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_nextAttr", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newSym(p) + return ret, nil +} + +func (v *Graph) Init(ctx context.Context, _arg0 int, _arg1 string, _arg2 int, _arg3 int) error { + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return err + } + arg2, err := mod.toIntWasmValue(ctx, _arg2) + if err != nil { + return err + } + arg3, err := mod.toIntWasmValue(ctx, _arg3) + if err != nil { + return err + } + if err := mod.call(ctx, "Graph_init", v.getPtr(), arg0, arg1, arg2, arg3); err != nil { + return err + } + return nil +} + +func (v *Graph) Clean(ctx context.Context, _arg0 int, _arg1 string) error { + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return err + } + if err := mod.call(ctx, "Graph_clean", v.getPtr(), arg0, arg1); err != nil { + return err + } + return nil +} + +func (v *Graph) SubGraph(ctx context.Context, _arg0 string, _arg1 int) (*Graph, error) { + var zero *Graph + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_subGraph", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) IdSubGraph(ctx context.Context, _arg0 uint64, _arg1 int) (*Graph, error) { + var zero *Graph + arg0, err := mod.toUint64WasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_idSubGraph", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) FirstSubGraph(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.callWithRet(ctx, "Graph_firstSubGraph", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) NextSubGraph(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.callWithRet(ctx, "Graph_nextSubGraph", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) Parent(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.callWithRet(ctx, "Graph_parent", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Graph) NodeNum(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_nodeNum", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) EdgeNum(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_edgeNum", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) SubGraphNum(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_subGraphNum", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Degree(ctx context.Context, _arg0 *Node, _arg1 int, _arg2 int) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toIntWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_degree", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) CountUniqueEdges(ctx context.Context, _arg0 *Node, _arg1 int, _arg2 int) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toIntWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_countUniqueEdges", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) Alloc(ctx context.Context, _arg0 uint64) (any, error) { + var zero any + arg0, err := mod.toUint64WasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_alloc", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Graph) Realloc(ctx context.Context, _arg0 any, _arg1 uint64, _arg2 uint64) (any, error) { + var zero any + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toUint64WasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toUint64WasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Graph_realloc", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Graph) Free(ctx context.Context, _arg0 any) error { + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "Graph_free", v.getPtr(), arg0); err != nil { + return err + } + return nil +} + +func (v *Dict) Close(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Dict_close", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Dict) View(ctx context.Context, _arg0 *Dict) (*Dict, error) { + var zero *Dict + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_view", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func (v *Dict) Disc(ctx context.Context, _arg0 *DictDisc) (*DictDisc, error) { + var zero *DictDisc + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_disc", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newDictDisc(p) + return ret, nil +} + +func (v *Dict) Method(ctx context.Context, _arg0 *DictMethod) (*DictMethod, error) { + var zero *DictMethod + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_method", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := newDictMethod(p) + return ret, nil +} + +func (v *Dict) Flatten(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.callWithRet(ctx, "Dict_flatten", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Dict) Extract(ctx context.Context) (*DictLink, error) { + var zero *DictLink + p, err := mod.callWithRet(ctx, "Dict_extract", v.getPtr()) + if err != nil { + return zero, err + } + ret := newDictLink(p) + return ret, nil +} + +func (v *Dict) Restore(ctx context.Context, _arg0 *DictLink) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_restore", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Dict) Walk(ctx context.Context, _arg0 *CallbackFunc[func(context.Context, any, any) (int, error)], _arg1 any) (int, error) { + var zero int + if mod.lookupFuncMap.DictWalk == nil { + return zero, fmt.Errorf("cannot find lookup function. you must call Register_DictWalk before") + } + mod.callbackFuncMap.DictWalk[_arg0.funcID] = _arg0.cb + arg0, err := mod.toFuncWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toAnyWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_walk", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Dict) Renew(ctx context.Context, _arg0 any) (any, error) { + var zero any + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_renew", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func (v *Dict) Size(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Dict_size", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Dict) Stat(ctx context.Context, _arg0 *DictStat, _arg1 int) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Dict_stat", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) Info(ctx context.Context) ([]string, error) { + var zero []string + p, err := mod.callWithRet(ctx, "Context_info", v.getPtr()) + if err != nil { + return zero, err + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) Version(ctx context.Context) (string, error) { + var zero string + p, err := mod.callWithRet(ctx, "Context_version", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) BuildDate(ctx context.Context) (string, error) { + var zero string + p, err := mod.callWithRet(ctx, "Context_buildDate", v.getPtr()) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) ParseArgs(ctx context.Context, _arg0 int, _arg1 []string) (int, error) { + var zero int + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringArrayWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_parseArgs", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) NextInputGraph(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.callWithRet(ctx, "Context_nextInputGraph", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Context) PluginsGraph(ctx context.Context) (*Graph, error) { + var zero *Graph + p, err := mod.callWithRet(ctx, "Context_pluginsGraph", v.getPtr()) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func (v *Context) Layout(ctx context.Context, _arg0 *Graph, _arg1 string) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_layout", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) LayoutJobs(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_layoutJobs", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Graph) AttachAttrs(ctx context.Context) error { + if err := mod.call(ctx, "Graph_attachAttrs", v.getPtr()); err != nil { + return err + } + return nil +} + +func (v *Context) Render(ctx context.Context, _arg0 *Graph, _arg1 string, _arg2 *File) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toObjectWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_render", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) RenderFilename(ctx context.Context, _arg0 *Graph, _arg1 string, _arg2 string) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_renderFilename", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) RenderContext(ctx context.Context, _arg0 *Graph, _arg1 string, _arg2 any) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toAnyWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_renderContext", v.getPtr(), arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) RenderData(ctx context.Context, _arg0 *Graph, _arg1 string, _arg2 *string, _arg3 *uint) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toPtrWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + arg3, err := mod.toPtrWasmValue(ctx, _arg3) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_renderData", v.getPtr(), arg0, arg1, arg2, arg3) + if err != nil { + return zero, err + } + { + p, err := mod.readU32(arg2) + if err != nil { + return zero, err + } + value, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + *_arg2 = value + } + { + p, err := mod.readU32(arg3) + if err != nil { + return zero, err + } + value := mod.toUint(p) + *_arg3 = value + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) RenderJobs(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_renderJobs", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) Finalize(ctx context.Context) error { + if err := mod.call(ctx, "Context_finalize", v.getPtr()); err != nil { + return err + } + return nil +} + +func (v *Context) FreeContext(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Context_freeContext", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) FreeLayout(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_freeLayout", v.getPtr(), arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) PluginList(ctx context.Context, _arg0 string, _arg1 *int) ([]string, error) { + var zero []string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toPtrWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "Context_pluginList", v.getPtr(), arg0, arg1) + if err != nil { + return zero, err + } + { + p, err := mod.readU32(arg1) + if err != nil { + return zero, err + } + value := mod.toInt(p) + *_arg1 = value + } + slice, err := mod.toSlice(ctx, p) + if err != nil { + return zero, err + } + ret, err := mod.toStringSlice(ctx, slice) + if err != nil { + return zero, err + } + return ret, nil +} + +func (v *Context) AddLibrary(ctx context.Context, _arg0 *PluginLibrary) error { + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "Context_addLibrary", v.getPtr(), arg0); err != nil { + return err + } + return nil +} + +func (v *Graph) ToolTred(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "Graph_toolTred", v.getPtr()) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func (v *Context) Clone(ctx context.Context) (*Context, error) { + var zero *Context + p, err := mod.callWithRet(ctx, "Context_clone", v.getPtr()) + if err != nil { + return zero, err + } + ret := newContext(p) + return ret, nil +} + +func (v *Context) FreeClonedContext(ctx context.Context) error { + if err := mod.call(ctx, "Context_freeClonedContext", v.getPtr()); err != nil { + return err + } + return nil +} + +func PushDisc(ctx context.Context, _arg0 *Graph, _arg1 *ClientEventCallback, _arg2 any) error { + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return err + } + arg2, err := mod.toAnyWasmValue(ctx, _arg2) + if err != nil { + return err + } + if err := mod.call(ctx, "pushDisc", arg0, arg1, arg2); err != nil { + return err + } + return nil +} + +func PopDisc(ctx context.Context, _arg0 *Graph, _arg1 *ClientEventCallback) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "popDisc", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func Open(ctx context.Context, _arg0 string, _arg1 *GraphDescriptor, _arg2 *ClientDiscipline) (*Graph, error) { + var zero *Graph + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toObjectWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "open", arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func Read(ctx context.Context, _arg0 string, _arg1 *ClientDiscipline) (*Graph, error) { + var zero *Graph + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "read", arg0, arg1) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func MemRead(ctx context.Context, _arg0 string) (*Graph, error) { + var zero *Graph + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "memRead", arg0) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func Readline(ctx context.Context, _arg0 int) error { + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "readline", arg0); err != nil { + return err + } + return nil +} + +func SetFile(ctx context.Context, _arg0 string) error { + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "setFile", arg0); err != nil { + return err + } + return nil +} + +func Concat(ctx context.Context, _arg0 *Graph, _arg1 any, _arg2 *ClientDiscipline) (*Graph, error) { + var zero *Graph + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toAnyWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toObjectWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "concat", arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func Write(ctx context.Context, _arg0 *Graph, _arg1 any) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toAnyWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "write", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func IsDirected(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "isDirected", arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func IsUndirected(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "isUndirected", arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func IsStrict(ctx context.Context, _arg0 *Graph) (int, error) { + var zero int + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "isStrict", arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func GraphOf(ctx context.Context, _arg0 any) (*Graph, error) { + var zero *Graph + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "graphOf", arg0) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func GraphRoot(ctx context.Context, _arg0 any) (*Graph, error) { + var zero *Graph + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "graphRoot", arg0) + if err != nil { + return zero, err + } + ret := newGraph(p) + return ret, nil +} + +func GraphNameOf(ctx context.Context, _arg0 any) (string, error) { + var zero string + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "graphNameOf", arg0) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func ObjectKind(ctx context.Context, _arg0 any) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "objectKind", arg0) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func HtmlStr(ctx context.Context, _arg0 string) (bool, error) { + var zero bool + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "htmlStr", arg0) + if err != nil { + return zero, err + } + ret := mod.toBool(p) + return ret, nil +} + +func Canon(ctx context.Context, _arg0 string, _arg1 int) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "canon", arg0, arg1) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func StrCanon(ctx context.Context, _arg0 string, _arg1 string) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "strCanon", arg0, arg1) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func CanonStr(ctx context.Context, _arg0 string) (string, error) { + var zero string + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "canonStr", arg0) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func AttrSym(ctx context.Context, _arg0 *Object, _arg1 string) (*Sym, error) { + var zero *Sym + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "attrSym", arg0, arg1) + if err != nil { + return zero, err + } + ret := newSym(p) + return ret, nil +} + +func CopyAttr(ctx context.Context, _arg0 any, _arg1 any) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toAnyWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "copyAttr", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func BindRecord(ctx context.Context, _arg0 any, _arg1 string, _arg2 uint, _arg3 int) (any, error) { + var zero any + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toUintWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + arg3, err := mod.toIntWasmValue(ctx, _arg3) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "bindRecord", arg0, arg1, arg2, arg3) + if err != nil { + return zero, err + } + ret := mod.toAny(p) + return ret, nil +} + +func GetRecord(ctx context.Context, _arg0 any, _arg1 string, _arg2 int) (*Record, error) { + var zero *Record + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toIntWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "getRecord", arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := newRecord(p) + return ret, nil +} + +func DeleteRecord(ctx context.Context, _arg0 any, _arg1 string) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "deleteRecord", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func GetStr(ctx context.Context, _arg0 any, _arg1 string) (string, error) { + var zero string + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "getStr", arg0, arg1) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func GetSymName(ctx context.Context, _arg0 any, _arg1 *Sym) (string, error) { + var zero string + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "getSymName", arg0, arg1) + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func SetStr(ctx context.Context, _arg0 any, _arg1 string, _arg2 string) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "setStr", arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func SetSymName(ctx context.Context, _arg0 any, _arg1 *Sym, _arg2 string) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "setSymName", arg0, arg1, arg2) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func SafeSetStr(ctx context.Context, _arg0 any, _arg1 string, _arg2 string, _arg3 string) (int, error) { + var zero int + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + arg2, err := mod.toStringWasmValue(ctx, _arg2) + if err != nil { + return zero, err + } + arg3, err := mod.toStringWasmValue(ctx, _arg3) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "safeSetStr", arg0, arg1, arg2, arg3) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func SetError(ctx context.Context, _arg0 ErrorLevel) (ErrorLevel, error) { + var zero ErrorLevel + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "setError", arg0) + if err != nil { + return zero, err + } + ret := ErrorLevel(p) + return ret, nil +} + +func LastError(ctx context.Context) (string, error) { + var zero string + p, err := mod.callWithRet(ctx, "lastError") + if err != nil { + return zero, err + } + ret, err := mod.toString(ctx, p) + if err != nil { + return zero, err + } + return ret, nil +} + +func Error(ctx context.Context, _arg0 ErrorLevel, _arg1 string) (int, error) { + var zero int + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toStringWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "error", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func Errorf(ctx context.Context, _arg0 string) error { + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "errorf", arg0); err != nil { + return err + } + return nil +} + +func Warningf(ctx context.Context, _arg0 string) error { + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "warningf", arg0); err != nil { + return err + } + return nil +} + +func ErrorNum(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "errorNum") + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func ResetErrors(ctx context.Context) (int, error) { + var zero int + p, err := mod.callWithRet(ctx, "resetErrors") + if err != nil { + return zero, err + } + ret := mod.toInt(p) + return ret, nil +} + +func SetErrorf(ctx context.Context, _arg0 *CallbackFunc[func(context.Context, string) (int, error)]) error { + if mod.lookupFuncMap.UserRef == nil { + return fmt.Errorf("cannot find lookup function. you must call Register_UserRef before") + } + mod.callbackFuncMap.UserRef[_arg0.funcID] = _arg0.cb + arg0, err := mod.toFuncWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "setErrorf", arg0); err != nil { + return err + } + return nil +} + +func NewDictWithDisc(ctx context.Context, _arg0 *DictDisc, _arg1 *DictMethod) (*Dict, error) { + var zero *Dict + arg0, err := mod.toObjectWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toObjectWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "newDictWithDisc", arg0, arg1) + if err != nil { + return zero, err + } + ret := newDict(p) + return ret, nil +} + +func StrHash(ctx context.Context, _arg0 any, _arg1 int) (uint, error) { + var zero uint + arg0, err := mod.toAnyWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "strHash", arg0, arg1) + if err != nil { + return zero, err + } + ret := mod.toUint(p) + return ret, nil +} + +func Toggle(ctx context.Context, _arg0 int) error { + arg0, err := mod.toIntWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "toggle", arg0); err != nil { + return err + } + return nil +} + +func NewContextWithSymList(ctx context.Context, _arg0 []*SymList, _arg1 int) (*Context, error) { + var zero *Context + arg0, err := mod.toObjectArrayWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "newContextWithSymList", arg0, arg1) + if err != nil { + return zero, err + } + ret := newContext(p) + return ret, nil +} + +func GetContext(ctx context.Context) (*Context, error) { + var zero *Context + p, err := mod.callWithRet(ctx, "getContext") + if err != nil { + return zero, err + } + ret := newContext(p) + return ret, nil +} + +func GetContextWithPlugins(ctx context.Context, _arg0 []*SymList, _arg1 int) (*Context, error) { + var zero *Context + arg0, err := mod.toObjectArrayWasmValue(ctx, _arg0) + if err != nil { + return zero, err + } + arg1, err := mod.toIntWasmValue(ctx, _arg1) + if err != nil { + return zero, err + } + p, err := mod.callWithRet(ctx, "getContextWithPlugins", arg0, arg1) + if err != nil { + return zero, err + } + ret := newContext(p) + return ret, nil +} + +func FreeRenderData(ctx context.Context, _arg0 string) error { + arg0, err := mod.toStringWasmValue(ctx, _arg0) + if err != nil { + return err + } + if err := mod.call(ctx, "freeRenderData", arg0); err != nil { + return err + } + return nil +} diff --git a/internal/wasm/bind.proto b/internal/wasm/bind.proto new file mode 100644 index 0000000..b9534a8 --- /dev/null +++ b/internal/wasm/bind.proto @@ -0,0 +1,3275 @@ +syntax = "proto3"; + +import "google/protobuf/any.proto"; +import "nori/nori.proto"; + +package graphviz; + +// cgraph.h + +message Record { + option (nori.message).alias = "Agrec_t"; + + string name = 1 [(nori.field).type.kind = CHARPTR]; + Record next = 2 [(nori.field).type.pointer = 1]; +} + +message Tag { + option (nori.message).alias = "Agtag_t"; + + uint32 object_type = 1 [(nori.field).alias = "objtype"]; + uint32 mtflock = 2; + uint32 attrwf = 3; + uint32 seq = 4; + uint64 id = 5; +} + +message Object { + option (nori.message).alias = "Agobj_t"; + + Tag tag = 1; + Record data = 2 [(nori.field).type.pointer = 1]; +} + +enum ObjectTag { + GRAPH = 0 [(nori.enum_value).alias = "AGRAPH"]; + NODE = 1 [(nori.enum_value).alias = "AGNODE"]; + OUT_EDGE = 2 [(nori.enum_value).alias = "AGOUTEDGE"]; + IN_EDGE = 3 [(nori.enum_value).alias = "AGINEDGE"]; + EDGE = 4 [(nori.enum_value).alias = "AGEDGE"]; +} + +message SubNode { + option (nori.message).alias = "Agsubnode_t"; + + DictLink seq_link = 1; + DictLink id_link = 2; + Node node = 3 [(nori.field).type.pointer = 1]; + DictLink in_id = 4 [(nori.field).type.pointer = 1]; + DictLink out_id = 5 [(nori.field).type.pointer = 1]; + DictLink in_seq = 6 [(nori.field).type.pointer = 1]; + DictLink out_seq = 7 [(nori.field).type.pointer = 1]; +} + +message Node { + option (nori.message).alias = "Agnode_t"; + + Object base = 1; + Graph root = 2 [(nori.field).type.pointer = 1]; + SubNode mainsub = 3; +} + +message Edge { + option (nori.message).alias = "Agedge_t"; + + Object base = 1; + DictLink id_link = 2; + DictLink seq_link = 3; + Node node = 4 [(nori.field).type.pointer = 1]; +} + +message EdgePair { + option (nori.message).alias = "Agedgepair_t"; + + Edge out = 1; + Edge in = 2; +} + +message GraphDescriptor { + option (nori.message).alias = "Agdesc_t"; + + uint32 directed = 1; + uint32 strict = 2; + uint32 no_loop = 3; + uint32 maingraph = 4; + uint32 no_write = 5; + uint32 has_attrs = 6; + uint32 has_cmpnd = 7; +} + +message IDAllocator { + option (nori.message).alias = "Agiddisc_t"; + + message Open { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "ClientDiscipline" + pointer: 1 + } + return { + kind: VOIDPTR + } + }; + } + message Map { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: INT } + args { kind: CHARPTR } + args { + kind: UINT64 + pointer: 1 + } + args { kind: INT } + return { kind: INT32 } + }; + } + message Alloc { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: INT } + args { kind: UINT64 } + return { kind: INT32 } + }; + } + message Free { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: INT } + args { kind: UINT64 } + }; + } + message Print { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: INT } + args { kind: UINT64 } + return { kind: CHARPTR } + }; + } + message Close { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + }; + } + message IdRegister { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: INT } + args { kind: VOIDPTR } + }; + } + Open open = 1; + Map map = 2; + Alloc alloc = 3; + Free free = 4; + Print print = 5; + Close close = 6; + IdRegister idregister = 7; +} + +message IOService { + option (nori.message).alias = "Agiodisc_t"; + + message Afread { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: CHARPTR } + args { kind: INT } + return { kind: INT } + }; + } + message Putstr { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { + kind: CHARPTR + const: true + } + return { kind: INT } + }; + } + message Flush { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + return { kind: INT } + }; + } + Afread afread = 1; + Putstr putstr = 2; + Flush flush = 3; +} + +message ClientDiscipline { + option (nori.message).alias = "Agdisc_t"; + + IDAllocator id = 1 [(nori.field).type.pointer = 1]; + IOService io = 2 [(nori.field).type.pointer = 1]; +} + +message State { + option (nori.message).alias = "Agdstate_t"; + + nori.Any id = 1 [(nori.field).type.kind = VOIDPTR]; +} + +message ClientEventCallback { + option (nori.message).alias = "Agcbdisc_t"; + + message ObjectFunc { + option (nori.message) = { + alias: "agobjfn_t" + funcptr: { + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "Object" + pointer: 1 + } + args { kind: VOIDPTR } + } + }; + } + message ObjectUpdateFunc { + option (nori.message) = { + alias: "agobjupdfn_t" + funcptr: { + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "Object" + pointer: 1 + } + args { + kind: VOIDPTR + } + args { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + } + }; + } +}; + +message CallbackStack { + option (nori.message).alias = "Agcbstack_t"; + + ClientEventCallback f = 1 [(nori.field).type.pointer = 1]; + nori.Any state = 2 [(nori.field).type.kind = VOIDPTR]; + CallbackStack prev = 3 [(nori.field).type.pointer = 1]; +}; + +message CommonFields { + option (nori.message).alias = "Agclos_t"; + + ClientDiscipline disc = 1; + State state = 2; + Dict strdict = 3 [(nori.field).type.pointer = 1]; + repeated uint64 seq = 4 [(nori.field).type.array_num = 3]; + CallbackStack cb = 5 [(nori.field).type.pointer = 1]; + repeated Dict lookup_by_name = 6 [(nori.field).type = { + pointer: 1 + array_num: 3 + }]; + repeated Dict lookup_by_id = 7 [(nori.field).type = { + pointer: 1 + array_num: 3 + }]; +} + +message Graph { + option (nori.message).alias = "Agraph_t"; + + Object base = 1; + GraphDescriptor desc = 2; + DictLink seq_link = 3; + DictLink id_link = 4; + Dict n_seq = 5 [(nori.field).type.pointer = 1]; + Dict e_seq = 6 [(nori.field).type.pointer = 1]; + Dict e_id = 7 [(nori.field).type.pointer = 1]; + Dict g_seq = 8 [(nori.field).type.pointer = 1]; + Dict g_id = 9 [(nori.field).type.pointer = 1]; + Graph parent = 10 [(nori.field).type.pointer = 1]; + Graph root = 11 [(nori.field).type.pointer = 1]; + CommonFields clos = 12 [(nori.field).type.pointer = 1]; +} + +message Attr { + option (nori.message).alias = "Agattr_t"; + + Record h = 1; + Dict dict = 2 [(nori.field).type.pointer = 1]; + repeated string str = 3 [(nori.field).type = { + kind: CHARPTR + array: true + }]; +} + +message Sym { + option (nori.message).alias = "Agsym_t"; + + DictLink link = 1; + string name = 2 [(nori.field).type.kind = CHARPTR]; + string defval = 3 [(nori.field).type.kind = CHARPTR]; + int32 id = 4; + uint32 kind = 5; + uint32 fixed = 6; + uint32 print = 7; +} + +message DataDict { + option (nori.message).alias = "Agdatadict_t"; + + Record h = 1; +} + +enum ErrorLevel { + option (nori.enum).alias = "agerrlevel_t"; + + WARN = 0 [(nori.enum_value).alias = "AGWARN"]; + ERR = 1 [(nori.enum_value).alias = "AGERR"]; + MAX = 2 [(nori.enum_value).alias = "AGMAX"]; + PREV = 3 [(nori.enum_value).alias = "AGPREV"]; +} + +message UserRef { + option (nori.message).funcptr = { + args { + kind: CHARPTR + funcbaseptr: true + } + return { kind: INT } + }; +} + +option (nori.file).export = { + header: [ + "cgraph.h", + "gvc.h", + "gvcjob.h", + "cdt.h", + "gvplugin_device.h", + "gvplugin_render.h", + "gvplugin_layout.h", + "gvplugin_loadimage.h", + "gvplugin_textlayout.h" + ] + func { + name: "pushDisc" + alias: "agpushdisc" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: STRUCT + ref: "ClientEventCallback" + pointer: 1 + } + args { kind: VOIDPTR } + } + func { + name: "popDisc" + alias: "agpopdisc" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: STRUCT + ref: "ClientEventCallback" + pointer: 1 + } + return { kind: INT } + } + func { + name: "open" + alias: "agopen" + args { kind: CHARPTR } + args { + kind: STRUCT + ref: "GraphDescriptor" + } + args { + kind: STRUCT + ref: "ClientDiscipline" + pointer: 1 + } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + name: "close" + alias: "agclose" + recv: "Graph" + return { kind: INT } + } + func { + name: "read" + alias: "agread" + args { kind: CHARPTR } + args { + kind: STRUCT + ref: "ClientDiscipline" + pointer: 1 + } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + func { + name: "memRead" + alias: "agmemread" + args { + kind: CHARPTR + const: true + } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + func { + name: "readline" + alias: "agreadline" + args { kind: INT } + } + func { + name: "setFile" + alias: "agsetfile" + args { kind: CHARPTR } + } + func { + name: "concat" + alias: "agconcat" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { kind: VOIDPTR } + args { + kind: STRUCT + ref: "ClientDiscipline" + pointer: 1 + } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + func { + name: "write" + alias: "agwrite" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { kind: VOIDPTR } + return { kind: INT } + } + func { + name: "isDirected" + alias: "agisdirected" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + func { + name: "isUndirected" + alias: "agisundirected" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + func { + name: "isStrict" + alias: "agisstrict" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Graph" + name: "isSimple" + alias: "agissimple" + return { kind: INT } + } + method { + recv: "Graph" + name: "node" + alias: "agnode" + args { + kind: CHARPTR + } + args { kind : INT } + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "idNode" + alias: "agidnode" + args { kind: UINT64 } + args { kind : INT } + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "subNode" + alias: "agsubnode" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { kind : INT } + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "firstNode" + alias: "agfstnode" + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextNode" + alias: "agnxtnode" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "lastNode" + alias: "aglstnode" + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "prevNode" + alias: "agprvnode" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Node" + pointer: 1 + } + } + method { + recv: "Graph" + name: "subRep" + alias: "agsubrep" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "SubNode" + pointer: 1 + } + } + method { + recv: "Node" + name: "before" + alias: "agnodebefore" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Graph" + name: "edge" + alias: "agedge" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { kind: CHARPTR } + args { kind: INT } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "idEdge" + alias: "agidedge" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { kind: UINT64 } + args { kind: INT } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "subEdge" + alias: "agsubedge" + args { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + args { kind: INT } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "firstIn" + alias: "agfstin" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextIn" + alias: "agnxtin" + args { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "firstOut" + alias: "agfstout" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextOut" + alias: "agnxtout" + args { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "firstEdge" + alias: "agfstedge" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextEdge" + alias: "agnxtedge" + args { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + } + func { + name: "graphOf" + alias: "agraphof" + args { kind: VOIDPTR } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + func { + name: "graphRoot" + alias: "agroot" + args { kind: VOIDPTR } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "contains" + alias: "agcontains" + args { kind: VOIDPTR } + return { kind: INT } + } + func { + name: "graphNameOf" + alias: "agnameof" + args { kind: VOIDPTR } + return { kind: CHARPTR } + } + method { + recv: "Node" + name: "reLabel" + alias: "agrelabel_node" + args { kind: CHARPTR } + return { kind: INT } + } + method { + recv: "Graph" + name: "delete" + alias: "agdelete" + args { kind: VOIDPTR } + return { kind: INT } + } + method { + recv: "Graph" + name: "deleteSubGraph" + alias: "agdelsubg" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Graph" + name: "deleteNode" + alias: "agdelnode" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Graph" + name: "deleteEdge" + alias: "agdeledge" + args { + kind: STRUCT + ref: "Edge" + pointer: 1 + } + return { kind: INT } + } + func { + name: "objectKind" + alias: "agobjkind" + args { kind: VOIDPTR } + return { kind: INT } + } + method { + recv: "Graph" + name: "strdup" + alias: "agstrdup" + args { kind: CHARPTR } + return { kind: CHARPTR } + } + method { + recv: "Graph" + name: "strdupHTML" + alias: "agstrdup_html" + args { kind: CHARPTR } + return { kind: CHARPTR } + } + func { + name: "htmlStr" + alias: "aghtmlstr" + args { kind: CHARPTR } + return { kind: BOOL } + } + method { + recv: "Graph" + name: "strBind" + alias: "agstrbind" + args { kind: CHARPTR } + return { kind: CHARPTR } + } + method { + recv: "Graph" + name: "strFree" + alias: "agstrfree" + args { kind: CHARPTR } + return { kind: INT } + } + func { + name: "canon" + alias: "agcanon" + args { kind: CHARPTR } + args { kind: INT } + return { kind: CHARPTR } + } + func { + name: "strCanon" + alias: "agstrcanon" + args { kind: CHARPTR } + args { kind: CHARPTR } + return { kind: CHARPTR } + } + func { + name: "canonStr" + alias: "agcanonStr" + args { kind: CHARPTR } + return { kind: CHARPTR } + } + method { + recv: "Graph" + name: "attr" + alias: "agattr" + args { kind: INT } + args { kind: CHARPTR } + args { kind: CHARPTR } + return { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + } + func { + name: "attrSym" + alias: "agattrsym" + args { + kind: STRUCT + ref: "Object" + pointer: 1 + } + args { kind: CHARPTR } + return { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextAttr" + alias: "agnxtattr" + args { kind: INT } + args { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + return { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + } + func { + name: "copyAttr" + alias: "agcopyattr" + args { kind: VOIDPTR } + args { kind: VOIDPTR } + return { kind: INT } + } + func { + name: "bindRecord" + alias: "agbindrec" + args { kind: VOIDPTR } + args { kind: CHARPTR } + args { kind: UINT } + args { kind: INT } + return { kind: VOIDPTR } + } + func { + name: "getRecord" + alias: "aggetrec" + args { kind: VOIDPTR } + args { kind: CHARPTR } + args { kind: INT } + return { + kind: STRUCT + ref: "Record" + pointer: 1 + } + } + func { + name: "deleteRecord" + alias: "agdelrec" + args { kind: VOIDPTR } + args { kind: CHARPTR } + return { kind: INT } + } + method { + recv: "Graph" + name: "init" + alias: "aginit" + args { kind: INT } + args { kind: CHARPTR } + args { kind: INT } + args { kind: INT } + } + method { + recv: "Graph" + name: "clean" + alias: "agclean" + args { kind: INT } + args { kind: CHARPTR } + } + func { + name: "getStr" + alias: "agget" + args { kind: VOIDPTR } + args { kind: CHARPTR } + return { kind: CHARPTR } + } + func { + name: "getSymName" + alias: "agxget" + args { kind: VOIDPTR } + args { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + return { kind: CHARPTR } + } + func { + name: "setStr" + alias: "agset" + args { kind: VOIDPTR } + args { kind: CHARPTR } + args { kind: CHARPTR } + return { kind: INT } + } + func { + name: "setSymName" + alias: "agxset" + args { kind: VOIDPTR } + args { + kind: STRUCT + ref: "Sym" + pointer: 1 + } + args { kind: CHARPTR } + return { kind: INT } + } + func { + name: "safeSetStr" + alias: "agsafeset" + args { kind: VOIDPTR } + args { kind: CHARPTR } + args { kind: CHARPTR } + args { kind: CHARPTR } + return { kind: INT } + } + method { + recv: "Graph" + name: "subGraph" + alias: "agsubg" + args { kind: CHARPTR } + args { kind: INT } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "idSubGraph" + alias: "agidsubg" + args { kind: UINT64 } + args { kind: INT } + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "firstSubGraph" + alias: "agfstsubg" + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nextSubGraph" + alias: "agnxtsubg" + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "parent" + alias: "agparent" + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Graph" + name: "nodeNum" + alias: "agnnodes" + return { kind: INT } + } + method { + recv: "Graph" + name: "edgeNum" + alias: "agnedges" + return { kind: INT } + } + method { + recv: "Graph" + name: "subGraphNum" + alias: "agnsubg" + return { kind: INT } + } + method { + recv: "Graph" + name: "degree" + alias: "agdegree" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { kind: INT } + args { kind: INT } + return { kind: INT } + } + method { + recv: "Graph" + name: "countUniqueEdges" + alias: "agcountuniqedges" + args { + kind: STRUCT + ref: "Node" + pointer: 1 + } + args { kind: INT } + args { kind: INT } + return { kind: INT } + } + method { + recv: "Graph" + name: "alloc" + alias: "agalloc" + args { kind: UINT64 } + return { kind: VOIDPTR } + } + method { + recv: "Graph" + name: "realloc" + alias: "agrealloc" + args { kind: VOIDPTR } + args { kind: UINT64 } + args { kind: UINT64 } + return { kind: VOIDPTR } + } + method { + recv: "Graph" + name: "free" + alias: "agfree" + args { kind: VOIDPTR } + } + func { + name: "setError" + alias: "agseterr" + args { + kind: ENUM + ref: "ErrorLevel" + } + return { + kind: ENUM + ref: "ErrorLevel" + } + } + func { + name: "lastError" + alias: "aglasterr" + return { kind: CHARPTR } + } + func { + name: "error" + alias: "agerr" + args { + kind: ENUM + ref: "ErrorLevel" + } + args { + kind: CHARPTR + const: true + } + return { kind: INT } + } + func { + name: "errorf" + alias: "agerrorf" + args { + kind: CHARPTR + const: true + } + } + func { + name: "warningf" + alias: "agwarningf" + args { + kind: CHARPTR + const: true + } + } + func { + name: "errorNum" + alias: "agerrors" + return { kind: INT } + } + func { + name: "resetErrors" + alias: "agreseterrors" + return { kind: INT } + } + func { + name: "setErrorf" + alias: "agseterrf" + args { + kind: FUNCPTR + ref: "UserRef" + } + } +}; + +// cdt.h + +message DictLink { + option (nori.message).alias = "Dtlink_t"; + + DictLink right = 1 [(nori.field).type.pointer = 1]; + oneof hl { + uint32 hash = 2 [(nori.field).alias = "_hash"]; + DictLink left = 3 [(nori.field) = { + alias: "_left" + type { pointer: 1 } + }]; + }; +} + +message DictHold { + option (nori.message).alias = "Dthold_t"; + + DictLink hdr = 1; + nori.Any obj = 2 [(nori.field).type.kind = VOIDPTR]; +} + +message DictMethod { + option (nori.message).alias = "Dtmethod_t"; + + DictSearch searchf = 1; + int64 type = 2; +} + +message DictData { + option (nori.message).alias = "Dtdata_t"; + + int64 type = 1; + DictLink here = 2 [(nori.field).type.pointer = 1]; + oneof hh { + DictLink htab = 3 [(nori.field) = { + alias: "_htab" + type { + array: true + pointer: 1 + } + }]; + DictLink head = 4 [(nori.field) = { + alias: "_head" + type { pointer: 1 } + }]; + }; + int64 ntab = 5; + int64 size = 6; + int64 loop = 7; +} + +message DictDisc { + option (nori.message).alias = "Dtdisc_t"; + + int64 key = 1; + int64 size = 2; + int64 link = 3; + DictMake makef = 4; + DictFree freef = 5; + DictCompare comparf = 6; +} + +message Dict { + option (nori.message).alias = "Dict_t"; + + DictSearch searchf = 1; + DictDisc disc = 2 [(nori.field).type.pointer = 1]; + DictData data = 3 [(nori.field).type.pointer = 1]; + DictMethod meth = 4 [(nori.field).type.pointer = 1]; + int64 nview = 5; + Dict view = 6 [(nori.field).type.pointer = 1]; + Dict walk = 7 [(nori.field).type.pointer = 1]; + nori.Any user = 8 [(nori.field).type.kind = VOIDPTR]; +} + +message DictStat { + option (nori.message).alias = "Dtstat_t"; + + int64 dt_meth = 1; + int64 dt_size = 2; + uint64 dt_n = 3; + uint64 dt_max = 4; + repeated uint64 dt_count = 5 [(nori.field).type = { + kind: UINT32 + array: true + }]; +} + +message DictMemory { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Dict" + pointer: 1 + funcbaseptr: true + } + args { kind: VOIDPTR } + args { kind: UINT32 } + args { + kind: STRUCT + ref: "DictDisc" + pointer: 1 + } + return { kind: VOIDPTR } + }; +} + +message DictSearch { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Dict" + pointer: 1 + funcbaseptr: true + } + args { kind: VOIDPTR } + args { kind: INT } + return { kind: VOIDPTR } + }; +} + +message DictMake { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { + kind: STRUCT + ref: "DictDisc" + pointer: 1 + } + return { kind: VOIDPTR } + }; +} + +message DictFree { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + }; +} + +message DictCompare { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: VOIDPTR } + return { kind: INT } + }; +} + +message DictWalk { + option (nori.message).funcptr = { + args { + kind: VOIDPTR + funcbaseptr: true + } + args { kind: VOIDPTR } + return { kind: INT } + }; +} + +option (nori.file).export = { + header: [ + "cgraph.h", + "gvc.h", + "gvcjob.h", + "cdt.h", + "gvplugin_device.h", + "gvplugin_render.h", + "gvplugin_layout.h", + "gvplugin_loadimage.h", + "gvplugin_textlayout.h" + ] + func { + name: "newDictWithDisc" + alias: "dtopen" + args { + kind: STRUCT + ref: "DictDisc" + pointer: 1 + } + args { + kind: STRUCT + ref: "DictMethod" + pointer: 1 + } + return { + kind: STRUCT + ref: "Dict" + pointer: 1 + } + } + method { + recv: "Dict" + name: "close" + alias: "dtclose" + return { kind: INT } + } + method { + recv: "Dict" + name: "view" + alias: "dtview" + args { + kind: STRUCT + ref: "Dict" + pointer: 1 + } + return { + kind: STRUCT + ref: "Dict" + pointer: 1 + } + } + method { + recv: "Dict" + name: "disc" + alias: "dtdisc" + args { + kind: STRUCT + ref: "DictDisc" + pointer: 1 + } + return { + kind: STRUCT + ref: "DictDisc" + pointer: 1 + } + } + method { + recv: "Dict" + name: "method" + alias: "dtmethod" + args { + kind: STRUCT + ref: "DictMethod" + pointer: 1 + } + return { + kind: STRUCT + ref: "DictMethod" + pointer: 1 + } + } + method { + recv: "Dict" + name: "flatten" + alias: "dtflatten" + return { + kind: STRUCT + ref: "DictLink" + pointer: 1 + } + } + method { + recv: "Dict" + name: "extract" + alias: "dtextract" + return { + kind: STRUCT + ref: "DictLink" + pointer: 1 + } + } + method { + recv: "Dict" + name: "restore" + alias: "dtrestore" + args { + kind: STRUCT + ref: "DictLink" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Dict" + name: "walk" + alias: "dtwalk" + args { + kind: FUNCPTR + ref: "DictWalk" + } + args { kind: VOIDPTR } + return { kind: INT } + } + method { + recv: "Dict" + name: "renew" + alias: "dtrenew" + args { kind: VOIDPTR } + return { kind: VOIDPTR } + } + method { + recv: "Dict" + name: "size" + alias: "dtsize" + return { kind: INT } + } + method { + recv: "Dict" + name: "stat" + alias: "dtstat" + args { + kind: STRUCT + ref: "DictStat" + pointer: 1 + } + args { kind: INT } + return { kind: INT } + } + func { + name: "strHash" + alias: "dtstrhash" + args { kind: VOIDPTR } + args { kind: INT } + return { kind: UINT } + } +}; + +// gvc.h + +message File { + option (nori.message) = { + alias: "FILE" + constructor: false + }; +} + +message Context { + option (nori.message).alias = "GVC_t"; + + Common common = 1; + string config_path = 2; + bool config_found = 3; + repeated string input_filenames = 4 [(nori.field).type = { + kind: CHARPTR + array: true + }]; + repeated PluginAvailable apis = 5 [(nori.field).type = { + pointer: 1 + array: true + array_num: 4 + }]; + repeated PluginAvailable api = 6 [(nori.field).type = { + pointer: 1 + array: true + array_num: 4 + }]; +} + +message PluginAvailable { + option (nori.message).alias = "gvplugin_available_t"; + + PluginAvailable next = 1 [(nori.field).type.pointer = 1]; + string typestr = 2 [(nori.field).type.kind = CHARPTR]; + int64 quality = 3; + PluginPackage package = 4 [(nori.field).type.pointer = 1]; + PluginInstalled typeptr = 5 [(nori.field).type.pointer = 1]; +} + +message PluginPackage { + option (nori.message).alias = "gvplugin_package_t"; + + PluginPackage next = 1 [(nori.field).type.pointer = 1]; + string path = 2 [(nori.field).type.kind = CHARPTR]; + string name = 3 [(nori.field).type.kind = CHARPTR]; +} + +message SymList { + option (nori.message).alias = "lt_symlist_t"; + + string name = 1; + PluginLibrary address = 2 [(nori.field).type.pointer = 1]; +} + +enum ImageType { + option (nori.enum).alias = "imagetype_t"; + + IMAGE_TYPE_NULL = 0 [(nori.enum_value).alias = "FT_NULL"]; + IMAGE_TYPE_BMP = 1 [(nori.enum_value).alias = "FT_BMP"]; + IMAGE_TYPE_GIF = 2 [(nori.enum_value).alias = "FT_GIF"]; + IMAGE_TYPE_PNG = 3 [(nori.enum_value).alias = "FT_PNG"]; + IMAGE_TYPE_JPEG = 4 [(nori.enum_value).alias = "FT_JPEG"]; + IMAGE_TYPE_PDF = 5 [(nori.enum_value).alias = "FT_PDF"]; + IMAGE_TYPE_PS = 6 [(nori.enum_value).alias = "FT_PS"]; + IMAGE_TYPE_EPS = 7 [(nori.enum_value).alias = "FT_EPS"]; + IMAGE_TYPE_SVG = 8 [(nori.enum_value).alias = "FT_SVG"]; + IMAGE_TYPE_XML = 9 [(nori.enum_value).alias = "FT_XML"]; + IMAGE_TYPE_RIFF = 10 [(nori.enum_value).alias = "FT_RIFF"]; + IMAGE_TYPE_WEBP = 11 [(nori.enum_value).alias = "FT_WEBP"]; + IMAGE_TYPE_ICO = 12 [(nori.enum_value).alias = "FT_ICO"]; + IMAGE_TYPE_TIFF = 13 [(nori.enum_value).alias = "FT_TIFF"]; +} + +message UserShape { + option (nori.message).alias = "usershape_t"; + + message DataFree { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "UserShape" + pointer: 1 + funcbaseptr: true + } + }; + } + + DictLink link = 1; + string name = 2 [(nori.field).type = { + kind: CHARPTR + const: true + }]; + int64 macro_id = 3; + bool must_inline = 4; + bool nocache = 5; + File f = 6 [(nori.field).type.pointer = 1]; + ImageType type = 7; + string stringtype = 8 [(nori.field).type.kind = CHARPTR]; + int64 x = 9; + int64 y = 10; + int64 w = 11; + int64 h = 12; + int64 dpi = 13; + nori.Any data = 14 [(nori.field).type.kind = VOIDPTR]; + uint64 datasize = 15; + DataFree datafree = 16; +} + +message PluginActiveLoadImage { + option (nori.message).alias = "gvplugin_active_loadimage_t"; + + LoadImageEngine engine = 1 [(nori.field).type.pointer = 1]; + int64 id = 2; + string type = 3 [(nori.field).type = { + kind: CHARPTR + const: true + }]; +} + +message Common { + option (nori.message).alias = "GVCOMMON_t"; + + repeated string info = 1 [(nori.field).type = { + kind: CHARPTR + array: true + }]; + string cmdname = 2 [(nori.field).type.kind = CHARPTR]; + int64 verbose = 3; + bool config = 4; + bool auto_outfile_names = 5; + repeated string show_boxes = 6 [(nori.field).type = { + kind: CHARPTR + const: true + array: true + }]; + repeated string lib = 7 [(nori.field).type = { + kind: CHARPTR + const: true + array: true + }]; + int64 view_num = 8 [(nori.field).alias = "viewNum"]; + SymList builtins = 9 [(nori.field).type.pointer = 1]; + int64 demand_loading = 10; +} + +enum ObjectType { + option (nori.enum).alias = "obj_type"; + + ROOTGRAPH_OBJTYPE = 0; + CLUSTER_OBJTYPE = 1; + NODE_OBJTYPE = 2; + EDGE_OBJTYPE = 3; +} + +enum MapShapeType { + option (nori.enum).alias = "map_shape_t"; + + MAP_RECTANGLE = 0; + MAP_CIRCLE = 1; + MAP_POLYGON = 2; +} + +enum EmitState { + option (nori.enum).alias = "emit_state_t"; + + EMIT_GDRAW = 0; + EMIT_CDRAW = 1; + EMIT_TDRAW = 2; + EMIT_HDRAW = 3; + EMIT_GLABEL = 4; + EMIT_CLABEL = 5; + EMIT_TLABEL = 6; + EMIT_HLABEL = 7; + EMIT_NDRAW = 8; + EMIT_EDRAW = 9; + EMIT_NLABEL = 10; + EMIT_ELABEL = 11; +} + +message ObjectState { + option (nori.message).alias = "obj_state_t"; + + ObjectState parent = 1 [(nori.field).type.pointer = 1]; + ObjectType type = 2; + oneof u { + Graph g = 3 [(nori.field).type.pointer = 1]; + Graph sg = 4 [(nori.field).type.pointer = 1]; + Node n = 5 [(nori.field).type.pointer = 1]; + Edge e = 6 [(nori.field).type.pointer = 1]; + } + EmitState emit_state = 7; + Color pencolor = 8; + Color fillcolor = 9; + Color stopcolor = 10; + int64 gradient_angle = 11; + float gradient_frac = 12; + PenType pen = 13; + FillType fill = 14; + double penwidth = 15; + repeated string rawstyle = 16 [(nori.field).type = { + kind: CHARPTR + array: true + }]; + double z = 17; + double tail_z = 18; + double head_z = 19; + string label = 20; + string xlabel = 21; + string taillabel = 22; + string headlabel = 23; + string url = 24; + string id = 25; + string labelurl = 26; + string tailurl = 27; + string headurl = 28; + string tooltip = 29; + string labeltooltip = 30; + string tailtooltip = 31; + string headtooltip = 32; + string target = 33; + string labeltarget = 34; + string tailtarget = 35; + string headtarget = 36; + uint64 explicit_tooltip = 37; + uint64 explicit_tailtooltip = 38; + uint64 explicit_headtooltip = 39; + uint64 explicit_labeltooltip = 40; + uint64 explicit_tailtarget = 41; + uint64 explicit_headtarget = 42; + uint64 explicit_edgetarget = 43; + uint64 explicit_tailurl = 44; + uint64 explicit_headurl = 45; + uint64 labeledgealigned = 46; + MapShapeType url_map_shape = 47; + uint64 url_map_n = 48; + PointFloat url_map_p = 49 [(nori.field).type.pointer = 1]; + int64 url_bsplinemap_poly_n = 50; + int64 url_bsplinemap_n = 51 [(nori.field).type = { + kind: INT + array: true + }]; + PointFloat url_bsplinemap_p = 52 [(nori.field).type.pointer = 1]; + int64 tailendurl_map_n = 53; + PointFloat tailendurl_map_p = 54 [(nori.field).type.pointer = 1]; + int64 headendurl_map_n = 55; + PointFloat headendurl_map_p = 56 [(nori.field).type.pointer = 1]; +} + +message DeviceCallbacks { + option (nori.message).alias = "gvdevice_callbacks_t"; + + message Refresh { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message ButtonPress { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: INT } + args { + kind: STRUCT + ref: "PointFloat" + } + }; + } + + message ButtonRelease { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: INT } + args { + kind: STRUCT + ref: "PointFloat" + } + }; + } + + message Motion { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + } + }; + } + + message Modify { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: CHARPTR + const: true + } + args { + kind: CHARPTR + const: true + } + }; + } + + message Delete { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message Read { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: CHARPTR + const: true + } + args { + kind: CHARPTR + const: true + } + }; + } + + message Layout { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: CHARPTR + const: true + } + }; + } + + message Render { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: CHARPTR + const: true + } + args { + kind: CHARPTR + const: true + } + }; + } + + Refresh refresh = 1; + ButtonPress button_press = 2; + ButtonRelease button_release = 3; + Motion motion = 4; + Modify modify = 5; + Delete del = 6; + Read read = 7; + Layout layout = 8; + Render render = 9; +} + +enum EmitType { + EMIT_SORTED = 0 [(nori.enum_value).alias = "EMIT_SORTED"]; + EMIT_COLORS = 1 [(nori.enum_value).alias = "EMIT_COLORS"]; + EMIT_CLUSTERS_LAST = 2 [(nori.enum_value).alias = "EMIT_CLUSTERS_LAST"]; + EMIT_PREORDER = 3 [(nori.enum_value).alias = "EMIT_PREORDER"]; + EMIT_EDGE_SORTED = 4 [(nori.enum_value).alias = "EMIT_EDGE_SORTED"]; +} + +enum DeviceType { + DEVICE_DOES_PAGES = 0 [(nori.enum_value).alias = "GVDEVICE_DOES_PAGES"]; + DEVICE_DOES_LAYERS = 1 [(nori.enum_value).alias = "GVDEVICE_DOES_LAYERS"]; + DEVICE_EVENTS = 2 [(nori.enum_value).alias = "GVDEVICE_EVENTS"]; + DEVICE_DOES_TRUECOLOR = 3 [(nori.enum_value).alias = "GVDEVICE_DOES_TRUECOLOR"]; + DEVICE_BINARY_FORMAT = 4 [(nori.enum_value).alias = "GVDEVICE_BINARY_FORMAT"]; + DEVICE_COMPRESSED_FORMAT = 5 [(nori.enum_value).alias = "GVDEVICE_COMPRESSED_FORMAT"]; + DEVICE_NO_WRITER = 6 [(nori.enum_value).alias = "GVDEVICE_NO_WRITER"]; +} + +enum RenderType { + RENDER_Y_GOES_DOWN = 0 [(nori.enum_value).alias = "GVRENDER_Y_GOES_DOWN"]; + RENDER_DOES_TRANSFORM = 1 [(nori.enum_value).alias = "GVRENDER_DOES_TRANSFORM"]; + RENDER_DOES_LABELS = 2 [(nori.enum_value).alias = "GVRENDER_DOES_LABELS"]; + RENDER_DOES_MAPS = 3 [(nori.enum_value).alias = "GVRENDER_DOES_MAPS"]; + RENDER_DOES_MAP_RECTANGLE = 4 [(nori.enum_value).alias = "GVRENDER_DOES_MAP_RECTANGLE"]; + RENDER_DOES_MAP_CIRCLE = 5 [(nori.enum_value).alias = "GVRENDER_DOES_MAP_CIRCLE"]; + RENDER_DOES_MAP_POLYGON = 6 [(nori.enum_value).alias = "GVRENDER_DOES_MAP_POLYGON"]; + RENDER_DOES_MAP_ELLIPSE = 7 [(nori.enum_value).alias = "GVRENDER_DOES_MAP_ELLIPSE"]; + RENDER_DOES_MAP_BSPLINE = 8 [(nori.enum_value).alias = "GVRENDER_DOES_MAP_BSPLINE"]; + RENDER_DOES_TOOLTIPS = 9 [(nori.enum_value).alias = "GVRENDER_DOES_TOOLTIPS"]; + RENDER_DOES_TARGETS = 10 [(nori.enum_value).alias = "GVRENDER_DOES_TARGETS"]; + RENDER_DOES_Z = 11 [(nori.enum_value).alias = "GVRENDER_DOES_Z"]; + RENDER_NO_WHITE_BG = 12 [(nori.enum_value).alias = "GVRENDER_NO_WHITE_BG"]; +} + +enum RequiredType { + LAYOUT_NOT_REQUIRED = 0 [(nori.enum_value).alias = "LAYOUT_NOT_REQUIRED"]; + OUTPUT_NOT_REQUIRED = 1 [(nori.enum_value).alias = "OUTPUT_NOT_REQUIRED"]; +} + +message Job { + option (nori.message).alias = "GVJ_t"; + + Context gvc = 1 [(nori.field).type.pointer = 1]; + Job next = 2 [(nori.field).type.pointer = 1]; + Job next_active = 3 [(nori.field).type.pointer = 1]; + Common common = 4 [(nori.field).type.pointer = 1]; + ObjectState obj = 5 [(nori.field).type.pointer = 1]; + string input_filename = 6 [(nori.field).type.kind = CHARPTR]; + int64 graph_index = 7; + string layout_type = 8 [(nori.field).type = { + kind: CHARPTR + const: true + }]; + string output_filename = 9 [(nori.field).type = { + kind: CHARPTR + const: true + }]; + File output_file = 10 [(nori.field).type.pointer = 1]; + string output_data = 11 [(nori.field).type.kind = CHARPTR]; + uint64 output_data_allocated = 12 [(nori.field).type.kind = UINT]; + uint64 output_data_position = 13 [(nori.field).type.kind = UINT]; + string output_langname = 14 [(nori.field).type = { + kind: CHARPTR + const: true + }]; + int64 output_lang = 15; + PluginActiveRender render = 16; + PluginActiveDevice device = 17; + PluginActiveLoadImage loadimage = 18; + DeviceCallbacks callbacks = 19 [(nori.field).type.pointer = 1]; + PointFloat device_dpi = 20; + bool device_sets_dpi = 21; + nori.Any display = 22 [(nori.field).type.kind = VOIDPTR]; + int64 screen = 23; + nori.Any context = 24 [(nori.field).type.kind = VOIDPTR]; + bool external_context = 25; + string imagedata = 26 [(nori.field).type.kind = CHARPTR]; + int64 flags = 27; + int64 num_layers = 28 [(nori.field).alias = "numLayers"]; + int64 layer_num = 29 [(nori.field).alias = "layerNum"]; + Point pages_array_size = 30 [(nori.field).alias = "pagesArraySize"]; + Point pages_array_first = 31 [(nori.field).alias = "pagesArrayFirst"]; + Point pages_array_major = 32 [(nori.field).alias = "pagesArrayMajor"]; + Point pages_array_minor = 33 [(nori.field).alias = "pagesArrayMinor"]; + Point pages_array_elem = 34 [(nori.field).alias = "pagesArrayElem"]; + int64 num_pages = 35 [(nori.field).alias = "numPages"]; + BoxFloat bb = 36; + PointFloat pad = 37; + BoxFloat clip = 38; + BoxFloat page_box = 39 [(nori.field).alias = "pageBox"]; + PointFloat page_size = 40 [(nori.field).alias = "pageSize"]; + PointFloat focus = 41; + double zoom = 42; + int64 rotation = 43; + PointFloat view = 44; + BoxFloat canvas_box = 45 [(nori.field).alias = "canvasBox"]; + PointFloat margin = 46; + PointFloat dpi = 47; + uint64 width = 48; + uint64 height = 49; + Box page_bounding_box = 50 [(nori.field).alias = "pageBoundingBox"]; + Box bounding_box = 51 [(nori.field).alias = "boundingBox"]; + PointFloat scale = 52; + PointFloat translation = 53; + PointFloat devscale = 54; + bool fit_mode = 55; + bool needs_refresh = 56; + bool click = 57; + bool has_grown = 58; + bool has_been_rendered = 59; + uint64 button = 60; + PointFloat pointer = 61; + PointFloat oldpointer = 62; + nori.Any current_obj = 63 [(nori.field).type.kind = VOIDPTR]; + nori.Any selected_obj = 64 [(nori.field).type.kind = VOIDPTR]; + string active_tooltip = 65 [(nori.field).type.kind = CHARPTR]; + string selected_href = 66 [(nori.field).type.kind = CHARPTR]; +} + +message Point { + option (nori.message).alias = "point"; + + int64 x = 1; + int64 y = 2; +} + +message BoxFloat { + option (nori.message).alias = "boxf"; + + PointFloat ll = 1 [(nori.field).alias = "LL"]; + PointFloat ur = 2 [(nori.field).alias = "UR"]; +} + +message Box { + option (nori.message).alias = "box"; + + Point ll = 1 [(nori.field).alias = "LL"]; + Point ur = 2 [(nori.field).alias = "UR"]; +} + +enum PenType { + option (nori.enum).alias = "pen_type"; + + PEN_NONE = 0 [(nori.enum_value).alias = "PEN_NONE"]; + PEN_DASHED = 1 [(nori.enum_value).alias = "PEN_DASHED"]; + PEN_DOTTED = 2 [(nori.enum_value).alias = "PEN_DOTTED"]; + PEN_SOLID = 3 [(nori.enum_value).alias = "PEN_SOLID"]; +} + +enum FillType { + option (nori.enum).alias = "fill_type"; + + FILL_NONE = 0 [(nori.enum_value).alias = "FILL_NONE"]; + FILL_SOLID = 1 [(nori.enum_value).alias = "FILL_SOLID"]; + FILL_LINEAR = 2 [(nori.enum_value).alias = "FILL_LINEAR"]; + FILL_RADIAL = 3 [(nori.enum_value).alias = "FILL_RADIAL"]; +} + +enum FontType { + option (nori.enum).alias = "font_type"; + + FONT_REGULAR = 0 [(nori.enum_value).alias = "FONT_REGULAR"]; + FONT_BOLD = 1 [(nori.enum_value).alias = "FONT_BOLD"]; + FONT_ITALIC = 2 [(nori.enum_value).alias = "FONT_ITALIC"]; +} + +enum LabelType { + option (nori.enum).alias = "label_type"; + + LABEL_PLAIN = 0 [(nori.enum_value).alias = "LABEL_PLAIN"]; + LABEL_HTML = 1 [(nori.enum_value).alias = "LABEL_HTML"]; +} + +enum ColorType { + option (nori.enum).alias = "color_type_t"; + + HSVA_DOUBLE = 0; + RGBA_BYTE = 1; + RGBA_WORD = 2; + RGBA_DOUBLE = 3; + COLOR_STRING = 4; + COLOR_INDEX = 5; +} + +message Color { + option (nori.message).alias = "gvcolor_t"; + oneof u { + nori.List rgba_double = 1 [(nori.field) = { + alias: "RGBA" + type { + kind: DOUBLE + array: true + array_num: 4 + } + }]; + nori.List hsva = 2 [(nori.field) = { + alias: "HSVA" + type { + kind: DOUBLE + array: true + array_num: 4 + } + }]; + nori.List rgba_uint = 3 [(nori.field) = { + alias: "rgba" + type { + kind: UINT + array: true + array_num: 4 + } + }]; + nori.List rgba_int = 4 [(nori.field) = { + alias: "rrggbbaa" + type { + kind: INT + array: true + array_num: 4 + } + }]; + string string = 5 [(nori.field).type = { + kind: CHARPTR + }]; + int64 index = 6; + } + ColorType type = 7; +} + +message PointFloat { + option (nori.message).alias = "pointf"; + + double x = 1; + double y = 2; +} + +message PluginActiveDevice { + option (nori.message).alias = "gvplugin_active_device_t"; + + DeviceEngine engine = 1 [(nori.field).type.pointer = 1]; + int64 id = 2; + DeviceFeatures features = 3 [(nori.field).type.pointer = 1]; + string type = 4 [(nori.field).type = { + kind: CHARPTR + const: true + }]; +} + +message PluginActiveRender { + option (nori.message).alias = "gvplugin_active_render_t"; + + RenderEngine engine = 1 [(nori.field).type.pointer = 1]; + int64 id = 2; + RenderFeatures features = 3 [(nori.field).type.pointer = 1]; + string type = 4 [(nori.field).type = { + kind: CHARPTR + const: true + }]; +} + +message DeviceEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvdevice_engine_t" + }; + + message Initialize { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + message Format { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + message Finalize { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + Initialize initialize = 1; + Format format = 2; + Finalize finalize = 3; +} + +message PostscriptAlias { + option (nori.message).alias = "PostscriptAlias"; + + string name = 1 [(nori.field).type.kind = CHARPTR]; + string family = 2 [(nori.field).type.kind = CHARPTR]; + string weight = 3 [(nori.field).type.kind = CHARPTR]; + string stretch = 4 [(nori.field).type.kind = CHARPTR]; + string style = 5 [(nori.field).type.kind = CHARPTR]; + int64 xfig_code = 6; + string svg_font_family = 7 [(nori.field).type.kind = CHARPTR]; + string svg_font_weight = 8 [(nori.field).type.kind = CHARPTR]; + string svg_font_style = 9 [(nori.field).type.kind = CHARPTR]; +} + +message TextFont { + option (nori.message).alias = "textfont_t"; + + string name = 1 [(nori.field).type.kind = CHARPTR]; + string color = 2 [(nori.field).type.kind = CHARPTR]; + PostscriptAlias postscript_alias = 3 [(nori.field).type.pointer = 1]; + double size = 4; + uint64 flags = 5; + uint64 count = 6 [(nori.field).alias = "cnt"]; +} + +message Textspan { + option (nori.message).alias = "textspan_t"; + + string str = 1 [(nori.field).type.kind = CHARPTR]; + TextFont font = 2 [(nori.field).type.pointer = 1]; + double y_offset_layout = 3 [(nori.field).alias = "yoffset_layout"]; + double y_offset_center_line = 4 [(nori.field).alias = "yoffset_centerline"]; + PointFloat size = 5; + int64 just = 6; +} + +message RenderEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvrender_engine_t" + }; + + message BeginJob { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndJob { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginGraph { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndGraph { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginLayer { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: CHARPTR } + args { kind: INT } + args { kind: INT } + }; + } + + message EndLayer { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginPage { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndPage { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginCluster { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndCluster { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginNodes { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndNodes { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginEdges { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndEdges { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginNode { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndNode { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginEdge { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message EndEdge { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginAnchor { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: CHARPTR } + args { kind: CHARPTR } + args { kind: CHARPTR } + args { kind: CHARPTR } + }; + } + + message EndAnchor { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message BeginLabel { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: ENUM + ref: "LabelType" + } + }; + } + + message EndLabel { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + }; + } + + message Textspan { + option (nori.message) = { + funcptr { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + } + args { + kind: STRUCT + ref: "Textspan" + pointer: 1 + } + } + }; + } + + message ResolveColor { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "Color" + pointer: 1 + } + }; + } + + message Ellipse { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + array: true + array_num: 2 + } + args { kind: INT } + }; + } + + message Polygon { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + array: true + array_num_arg: 3 + } + args { kind: UINT32 } + args { kind: INT } + }; + } + + message Beziercurve { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + array: true + array_num_arg: 3 + } + args { kind: UINT32 } + args { kind: INT } + }; + } + + message Polyline { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "PointFloat" + array: true + array_num_arg: 3 + } + args { kind: UINT32 } + }; + } + + message Comment { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: CHARPTR } + }; + } + + message LibraryShape { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { kind: CHARPTR } + args { + kind: STRUCT + ref: "PointFloat" + array: true + array_num_arg: 4 + } + args { kind: UINT32 } + args { kind: INT } + }; + } + + BeginJob begin_job = 1; + EndJob end_job = 2; + BeginGraph begin_graph = 3; + EndGraph end_graph = 4; + BeginLayer begin_layer = 5; + EndLayer end_layer = 6; + BeginPage begin_page = 7; + EndPage end_page = 8; + BeginCluster begin_cluster = 9; + EndCluster end_cluster = 10; + BeginNodes begin_nodes = 11; + EndNodes end_nodes = 12; + BeginEdges begin_edges = 13; + EndEdges end_edges = 14; + BeginNode begin_node = 15; + EndNode end_node = 16; + BeginEdge begin_edge = 17; + EndEdge end_edge = 18; + BeginAnchor begin_anchor = 19; + EndAnchor end_anchor = 20; + BeginLabel begin_label = 21; + EndLabel end_label = 22; + Textspan textspan = 23; + ResolveColor resolve_color = 24; + Ellipse ellipse = 25; + Polygon polygon = 26; + Beziercurve beziercurve = 27; + Polyline polyline = 28; + Comment comment = 29; + LibraryShape library_shape = 30; +} + +message FormatterEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvformatter_engine_t" + constructor: false + }; +} + +message LayoutEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvlayout_engine_t" + }; + + message Layout { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + funcbaseptr: true + } + }; + } + + message Cleanup { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + funcbaseptr: true + } + }; + } + + Layout layout = 1; + Cleanup cleanup = 2; +} + +message TextLayoutEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvtextlayout_engine_t" + }; + + message TextLayout { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Textspan" + pointer: 1 + funcbaseptr: true + } + args { + kind: CHARPTR + array: true + } + return { + kind: BOOL + } + }; + } + + TextLayout textlayout = 1; +} + +message LoadImageEngine { + option (nori.message) = { + parent: "Engine" + alias: "gvloadimage_engine_t" + }; + + message LoadImage { + option (nori.message).funcptr = { + args { + kind: STRUCT + ref: "Job" + pointer: 1 + funcbaseptr: true + } + args { + kind: STRUCT + ref: "UserShape" + pointer: 1 + } + args { + kind: STRUCT + ref: "BoxFloat" + } + args { kind: BOOL } + }; + } + + LoadImage load_image = 1 [(nori.field).alias = "loadimage"]; +} + +message Engine { + +} + +message LayoutFeatures { + option (nori.message) = { + parent: "Layout" + alias: "gvlayout_features_t" + }; + + int64 flags = 1; +} + +message DeviceFeatures { + option (nori.message).alias = "gvdevice_features_t"; + + int64 flags = 1; + PointFloat default_margin = 2; + PointFloat default_pagesize = 3; + PointFloat default_dpi = 4; +} + +message RenderFeatures { + option (nori.message).alias = "gvrender_features_t"; + + int64 flags = 1; + double default_pad = 2; + repeated string known_colors = 3 [(nori.field) = { + alias: "knowncolors" + type { + kind: CHARPTR + array: true + } + }]; + int64 size_known_colors = 4 [(nori.field).alias = "sz_knowncolors"]; + ColorType color_type = 5; +} + +message Features { +} + +message PluginInstalled { + option (nori.message).alias = "gvplugin_installed_t"; + int64 id = 1; + string type = 2; + int64 quality = 3; + Engine engine = 4 [(nori.field).type.kind = VOIDPTR]; + Features features = 5 [(nori.field).type.kind = VOIDPTR]; +} + +enum API { + option (nori.enum).alias = "api_t"; + + API_RENDER = 0 [(nori.enum_value).alias = "API_render"]; + API_LAYOUT = 1 [(nori.enum_value).alias = "API_layout"]; + API_TEXTLAYOUT = 2 [(nori.enum_value).alias = "API_textlayout"]; + API_DEVICE = 3 [(nori.enum_value).alias = "API_device"]; + API_LOADIMAGE = 4 [(nori.enum_value).alias = "API_loadimage"]; +} + +message PluginAPI { + option (nori.message).alias = "gvplugin_api_t"; + API api = 1; + PluginInstalled types = 2 [(nori.field).type = { + array: true + }]; +} + +message PluginLibrary { + option (nori.message).alias = "gvplugin_library_t"; + string package_name = 1 [(nori.field).alias = "packagename"]; + PluginAPI apis = 2 [(nori.field).type = { + array: true + }]; +} + +option (nori.file).export = { + header: [ + "cgraph.h", + "gvc.h", + "gvcjob.h", + "cdt.h", + "gvcint.h", + "gvplugin_device.h", + "gvplugin_render.h", + "gvplugin_layout.h", + "gvplugin_loadimage.h", + "gvplugin_textlayout.h" + ] + func { + name: "toggle" + alias: "gvToggle" + args { kind: INT } + } + func { + name: "newContextWithSymList" + alias: "gvNEWcontext" + args { + kind: STRUCT + ref: "SymList" + array: true + const: true + } + args { kind: INT } + return { + kind: STRUCT + ref: "Context" + pointer: 1 + } + } + func { + name: "getContext" + alias: "gvContext" + return { + kind: STRUCT + ref: "Context" + pointer: 1 + } + } + func { + name: "getContextWithPlugins" + alias: "gvContextPlugins" + args { + kind: STRUCT + ref: "SymList" + const: true + array: true + } + args { kind: INT } + return { + kind: STRUCT + ref: "Context" + pointer: 1 + } + } + method { + recv: "Context" + name: "info" + alias: "gvcInfo" + return { + kind: CHARPTR + array: true + } + } + method { + recv: "Context" + name: "version" + alias: "gvcVersion" + return { kind: CHARPTR } + } + method { + recv: "Context" + name: "buildDate" + alias: "gvcBuildDate" + return { kind: CHARPTR } + } + method { + recv: "Context" + name: "parseArgs" + alias: "gvParseArgs" + args { kind: INT } + args { + kind: CHARPTR + array: true + } + return { kind: INT } + } + method { + recv: "Context" + name: "nextInputGraph" + alias: "gvNextInputGraph" + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Context" + name: "pluginsGraph" + alias: "gvPluginsGraph" + return { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + } + method { + recv: "Context" + name: "layout" + alias: "gvLayout" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: CHARPTR + const: true + } + return { kind: INT } + } + method { + recv: "Context" + name: "layoutJobs" + alias: "gvLayoutJobs" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Graph" + name: "attachAttrs" + alias: "attach_attrs" + } + method { + recv: "Context" + name: "render" + alias: "gvRender" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: CHARPTR + const: true + } + args { + kind: STRUCT + ref: "File" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Context" + name: "renderFilename" + alias: "gvRenderFilename" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: CHARPTR + const: true + } + args { + kind: CHARPTR + const: true + } + return { kind: INT } + } + method { + recv: "Context" + name: "renderContext" + alias: "gvRenderContext" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: CHARPTR + const: true + } + args { kind: VOIDPTR } + return { kind: INT } + } + method { + recv: "Context" + name: "renderData" + alias: "gvRenderData" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + args { + kind: CHARPTR + const: true + } + args { + kind: CHARPTR + pointer: 2 + string_length_arg: 4 + } + args { + kind: UINT + pointer: 1 + } + return { kind: INT } + } + func { + name: "freeRenderData" + alias: "gvFreeRenderData" + args { kind: CHARPTR } + } + method { + recv: "Context" + name: "renderJobs" + alias: "gvRenderJobs" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Context" + name: "finalize" + alias: "gvFinalize" + } + method { + recv: "Context" + name: "freeContext" + alias: "gvFreeContext" + return { kind: INT } + } + method { + recv: "Context" + name: "freeLayout" + alias: "gvFreeLayout" + args { + kind: STRUCT + ref: "Graph" + pointer: 1 + } + return { kind: INT } + } + method { + recv: "Context" + name: "pluginList" + alias: "gvPluginList" + args { + kind: CHARPTR + const: true + } + args { + kind: INT + pointer: 1 + } + return { + kind: CHARPTR + array: true + } + } + method { + recv: "Context" + name: "addLibrary" + alias: "gvAddLibrary" + args { + kind: STRUCT + ref: "PluginLibrary" + pointer: 1 + } + } + method { + recv: "Graph" + name: "toolTred" + alias: "gvToolTred" + return { kind: INT } + } + method { + recv: "Context" + name: "clone" + alias: "gvCloneGVC" + return { + kind: STRUCT + ref: "Context" + pointer: 1 + } + } + method { + recv: "Context" + name: "freeClonedContext" + alias: "gvFreeCloneGVC" + } +}; diff --git a/internal/wasm/build/Dockerfile b/internal/wasm/build/Dockerfile new file mode 100644 index 0000000..0691a63 --- /dev/null +++ b/internal/wasm/build/Dockerfile @@ -0,0 +1,39 @@ +FROM ghcr.io/webassembly/wasi-sdk:wasi-sdk-24 + +ARG GRAPHVIZ_VERSION + +ENV PATH=/opt/wasi-sdk/bin:$PATH +ENV USE_CCACHE=1 +ENV CCACHE_DIR=/ccache + +RUN \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + --mount=type=cache,target=/var/cache/apt,sharing=locked \ + apt-get update && apt install -y pkg-config libexpat1-dev wget ccache + +RUN wget https://github.com/WebAssembly/binaryen/releases/download/version_119/binaryen-version_119-x86_64-linux.tar.gz +RUN tar -zxvf binaryen-version_119-x86_64-linux.tar.gz + +RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-2.6.3.tar.gz +RUN tar -zxvf expat-2.6.3.tar.gz && mv expat-2.6.3 expat + +RUN wget https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/$GRAPHVIZ_VERSION/graphviz-$GRAPHVIZ_VERSION.tar.gz +RUN tar -zxvf graphviz-$GRAPHVIZ_VERSION.tar.gz && mv graphviz-$GRAPHVIZ_VERSION graphviz + +RUN cd graphviz && ./configure --host=amd64 --enable-ltdl=no --with-ipsepcola=no +RUN cd expat && ./configure --host amd64 + +RUN rm /graphviz/lib/rbtree/test_red_black_tree.c # remove the file includes main function. + +WORKDIR /work + +ENV PATH=/binaryen-version_119/bin:$PATH + +RUN \ + --mount=type=cache,target=/ccache,sharing=locked \ + --mount=type=bind,source=Makefile,target=Makefile \ + --mount=type=bind,source=patch.c,target=patch.c \ + --mount=type=bind,source=bind.c,target=bind.c \ + make build + +RUN wasm-opt -g --strip --strip-producers -c -Os graphviz.wasm -o graphviz.wasm diff --git a/internal/wasm/build/Makefile b/internal/wasm/build/Makefile new file mode 100644 index 0000000..c41b64f --- /dev/null +++ b/internal/wasm/build/Makefile @@ -0,0 +1,141 @@ +CC := clang + +GRAPHVIZ_ROOT := /graphviz +EXPAT_ROOT := /expat + +TARGET := graphviz.wasm + +build: + ccache $(CC) \ + -g0 -Os \ + --sysroot=/opt/wasi-sdk/share/wasi-sysroot \ + --target=wasm32-wasi \ + -Wextra \ + -Wno-format-security \ + -Wno-bitwise-instead-of-logical \ + -Wno-implicit-function-declaration \ + -Wno-incompatible-pointer-types-discards-qualifiers \ + -Wno-sign-compare \ + -Wno-missing-field-initializers \ + -Wno-undef \ + -Wno-uninitialized \ + -Wno-unused \ + -Wno-unused-parameter \ + -Wno-write-strings \ + -Wno-char-subscripts \ + -Wno-writable-strings \ + -Wl,--export-all \ + -Wl,--no-entry \ + -Wl,--error-limit=0 \ + -Wl,--import-undefined \ + -funsigned-char \ + -D_WASI_EMULATED_SIGNAL \ + -D_WASI_EMULATED_MMAN \ + -D_WASI_EMULATED_PROCESS_CLOCKS \ + -lwasi-emulated-mman \ + -lwasi-emulated-getpid \ + -lwasi-emulated-signal \ + -lwasi-emulated-process-clocks \ + -I$(GRAPHVIZ_ROOT) \ + -I$(GRAPHVIZ_ROOT)/lib/ \ + -I$(GRAPHVIZ_ROOT)/lib/ast \ + -I$(GRAPHVIZ_ROOT)/lib/cdt \ + -I$(GRAPHVIZ_ROOT)/lib/cgraph \ + -I$(GRAPHVIZ_ROOT)/lib/circogen \ + -I$(GRAPHVIZ_ROOT)/lib/common \ + -I$(GRAPHVIZ_ROOT)/lib/dotgen \ + -I$(GRAPHVIZ_ROOT)/lib/edgepaint \ + -I$(GRAPHVIZ_ROOT)/lib/expr \ + -I$(GRAPHVIZ_ROOT)/lib/fdpgen \ + -I$(GRAPHVIZ_ROOT)/lib/gvc \ + -I$(GRAPHVIZ_ROOT)/lib/label \ + -I$(GRAPHVIZ_ROOT)/lib/mingle \ + -I$(GRAPHVIZ_ROOT)/lib/neatogen \ + -I$(GRAPHVIZ_ROOT)/lib/ortho \ + -I$(GRAPHVIZ_ROOT)/lib/osage \ + -I$(GRAPHVIZ_ROOT)/lib/pack \ + -I$(GRAPHVIZ_ROOT)/lib/patchwork \ + -I$(GRAPHVIZ_ROOT)/lib/pathplan \ + -I$(GRAPHVIZ_ROOT)/lib/rbtree \ + -I$(GRAPHVIZ_ROOT)/lib/sfdpgen \ + -I$(GRAPHVIZ_ROOT)/lib/sfio \ + -I$(GRAPHVIZ_ROOT)/lib/sparse \ + -I$(GRAPHVIZ_ROOT)/lib/topfish \ + -I$(GRAPHVIZ_ROOT)/libtwopigen \ + -I$(GRAPHVIZ_ROOT)/lib/util \ + -I$(GRAPHVIZ_ROOT)/lib/vmalloc \ + -I$(GRAPHVIZ_ROOT)/lib/vpsc \ + -I$(GRAPHVIZ_ROOT)/lib/xdot \ + -I$(EXPAT_ROOT) \ + -I$(EXPAT_ROOT)/lib \ + $(GRAPHVIZ_ROOT)/lib/ast/*.c \ + $(GRAPHVIZ_ROOT)/lib/cdt/*.c \ + $(GRAPHVIZ_ROOT)/lib/cgraph/*.c \ + $(GRAPHVIZ_ROOT)/lib/circogen/*.c \ + $(GRAPHVIZ_ROOT)/lib/common/*.c \ + $(GRAPHVIZ_ROOT)/lib/dotgen/*.c \ + $(GRAPHVIZ_ROOT)/lib/edgepaint/*.c \ + $(GRAPHVIZ_ROOT)/lib/expr/*.c \ + $(GRAPHVIZ_ROOT)/lib/fdpgen/*.c \ + $(GRAPHVIZ_ROOT)/lib/gvc/*.c \ + $(GRAPHVIZ_ROOT)/lib/label/*.c \ + $(GRAPHVIZ_ROOT)/lib/ortho/*.c \ + $(GRAPHVIZ_ROOT)/lib/osage/*.c \ + $(GRAPHVIZ_ROOT)/lib/pack/*.c \ + $(GRAPHVIZ_ROOT)/lib/patchwork/*.c \ + $(GRAPHVIZ_ROOT)/lib/pathplan/*.c \ + $(GRAPHVIZ_ROOT)/lib/rbtree/*.c \ + $(GRAPHVIZ_ROOT)/lib/sfdpgen/*.c \ + $(GRAPHVIZ_ROOT)/lib/sfio/*.c \ + $(GRAPHVIZ_ROOT)/lib/sfio/Sfio_f/_sfslen.c \ + $(GRAPHVIZ_ROOT)/lib/sparse/*.c \ + $(GRAPHVIZ_ROOT)/lib/util/*.c \ + $(GRAPHVIZ_ROOT)/lib/vmalloc/*.c \ + $(GRAPHVIZ_ROOT)/lib/xdot/*.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/adjust.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/circuit.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/edges.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/geometry.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/heap.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/hedges.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/info.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/neatoinit.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/legal.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/lu.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/matinv.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/memory.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/poly.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/site.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/solve.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/neatosplines.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/stuff.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/voronoi.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/stress.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/kkutils.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/matrix_ops.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/embed_graph.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/dijkstra.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/conjgrad.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/pca.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/closest.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/bfs.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/constraint.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/quad_prog_solve.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/smart_ini_x.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/constrained_majorization.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/opt_arrangement.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/overlap.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/call_tri.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/compute_hierarchy.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/delaunay.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/multispline.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/sgd.c \ + $(GRAPHVIZ_ROOT)/lib/neatogen/randomkit.c \ + $(GRAPHVIZ_ROOT)/lib/twopigen/*.c \ + $(GRAPHVIZ_ROOT)/plugin/dot_layout/*.c \ + $(GRAPHVIZ_ROOT)/plugin/neato_layout/*.c \ + $(GRAPHVIZ_ROOT)/plugin/core/*.c \ + $(EXPAT_ROOT)/lib/*.c \ + patch.c \ + bind.c \ + -o $(TARGET) diff --git a/internal/wasm/build/bind.c b/internal/wasm/build/bind.c new file mode 100644 index 0000000..50299bd --- /dev/null +++ b/internal/wasm/build/bind.c @@ -0,0 +1,6713 @@ +// Code generated by protoc-gen-nori. DO NOT EDIT! + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +// this is imported by host function in Go. +void *wasm_bridge_get_go_funcptr(void *funcbaseptr); + + +#include "cdt.h" +#include "cgraph.h" +#include "gvc.h" +#include "gvcint.h" +#include "gvcjob.h" +#include "gvplugin_device.h" +#include "gvplugin_layout.h" +#include "gvplugin_loadimage.h" +#include "gvplugin_render.h" +#include "gvplugin_textlayout.h" + +typedef struct { char *p; int n; } GoString; +typedef struct { int len; void *data; } GoSlice; +typedef struct { void *t; void *v; } GoInterface; + +static GoString *newStringWithLength(char *src, int length) { + GoString *ret = (GoString *)malloc(sizeof(GoString)); + ret->p = src; + ret->n = length; + return ret; +} + +static GoString *newString(char *src) { + return newStringWithLength(src, strlen(src)); +} + +static GoString *newFloatString(double src) { + char *s = (char *)malloc(32); + memset(s, 0, 32); + snprintf(s, 32, "%lf", src); + return newStringWithLength(s, strlen(s)); +} + +static void to_string_ptr(void *arg) { + char **strptr = (char **)arg; + *(void **)arg = newString(*strptr); +} + +static void to_string_ptr_with_length(void *arg, int length) { + char **strptr = (char **)arg; + *(void **)arg = newStringWithLength(*strptr, length); +} +void * wasm_bridge_IDAllocator_Open(Agraph_t * arg0, Agdisc_t * arg1); + +void * IDAllocator_Open(Agraph_t * _arg0, Agdisc_t * _arg1) { + Agraph_t * arg0 = (Agraph_t *)_arg0; + Agdisc_t * arg1 = (Agdisc_t *)_arg1; + return wasm_bridge_IDAllocator_Open( + arg0, + arg1 + ); +} + +long int wasm_bridge_IDAllocator_Map(void * arg0, int arg1, GoString * arg2, unsigned long long int* arg3, int arg4); + +long int IDAllocator_Map(void * _arg0, int _arg1, char * _arg2, unsigned long long int * _arg3, int _arg4) { + void * arg0 = (void *)_arg0; + int arg1 = (int)_arg1; + GoString *arg2 = newString(_arg2); + unsigned long long int * arg3 = (unsigned long long int *)_arg3; + int arg4 = (int)_arg4; + return wasm_bridge_IDAllocator_Map( + arg0, + arg1, + arg2, + arg3, + arg4 + ); +} + +long int wasm_bridge_IDAllocator_Alloc(void * arg0, int arg1, unsigned long long int arg2); + +long int IDAllocator_Alloc(void * _arg0, int _arg1, unsigned long long int _arg2) { + void * arg0 = (void *)_arg0; + int arg1 = (int)_arg1; + unsigned long long int arg2 = (unsigned long long int)_arg2; + return wasm_bridge_IDAllocator_Alloc( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_IDAllocator_Free(void * arg0, int arg1, unsigned long long int arg2); + +void IDAllocator_Free(void * _arg0, int _arg1, unsigned long long int _arg2) { + void * arg0 = (void *)_arg0; + int arg1 = (int)_arg1; + unsigned long long int arg2 = (unsigned long long int)_arg2; + return wasm_bridge_IDAllocator_Free( + arg0, + arg1, + arg2 + ); +} + +char * wasm_bridge_IDAllocator_Print(void * arg0, int arg1, unsigned long long int arg2); + +char * IDAllocator_Print(void * _arg0, int _arg1, unsigned long long int _arg2) { + void * arg0 = (void *)_arg0; + int arg1 = (int)_arg1; + unsigned long long int arg2 = (unsigned long long int)_arg2; + return wasm_bridge_IDAllocator_Print( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_IDAllocator_Close(void * arg0); + +void IDAllocator_Close(void * _arg0) { + void * arg0 = (void *)_arg0; + return wasm_bridge_IDAllocator_Close( + arg0 + ); +} + +void wasm_bridge_IDAllocator_IdRegister(void * arg0, int arg1, void * arg2); + +void IDAllocator_IdRegister(void * _arg0, int _arg1, void * _arg2) { + void * arg0 = (void *)_arg0; + int arg1 = (int)_arg1; + void * arg2 = (void *)_arg2; + return wasm_bridge_IDAllocator_IdRegister( + arg0, + arg1, + arg2 + ); +} + +int wasm_bridge_IOService_Afread(void * arg0, GoString * arg1, int arg2); + +int IOService_Afread(void * _arg0, char * _arg1, int _arg2) { + void * arg0 = (void *)_arg0; + GoString *arg1 = newString(_arg1); + int arg2 = (int)_arg2; + return wasm_bridge_IOService_Afread( + arg0, + arg1, + arg2 + ); +} + +int wasm_bridge_IOService_Putstr(void * arg0, GoString * arg1); + +int IOService_Putstr(void * _arg0, const char * _arg1) { + void * arg0 = (void *)_arg0; + GoString *arg1 = newString(_arg1); + return wasm_bridge_IOService_Putstr( + arg0, + arg1 + ); +} + +int wasm_bridge_IOService_Flush(void * arg0); + +int IOService_Flush(void * _arg0) { + void * arg0 = (void *)_arg0; + return wasm_bridge_IOService_Flush( + arg0 + ); +} + +void wasm_bridge_ClientEventCallback_ObjectFunc(Agraph_t * arg0, Agobj_t * arg1, void * arg2); + +void ClientEventCallback_ObjectFunc(Agraph_t * _arg0, Agobj_t * _arg1, void * _arg2) { + Agraph_t * arg0 = (Agraph_t *)_arg0; + Agobj_t * arg1 = (Agobj_t *)_arg1; + void * arg2 = (void *)_arg2; + return wasm_bridge_ClientEventCallback_ObjectFunc( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_ClientEventCallback_ObjectUpdateFunc(Agraph_t * arg0, Agobj_t * arg1, void * arg2, Agsym_t * arg3); + +void ClientEventCallback_ObjectUpdateFunc(Agraph_t * _arg0, Agobj_t * _arg1, void * _arg2, Agsym_t * _arg3) { + Agraph_t * arg0 = (Agraph_t *)_arg0; + Agobj_t * arg1 = (Agobj_t *)_arg1; + void * arg2 = (void *)_arg2; + Agsym_t * arg3 = (Agsym_t *)_arg3; + return wasm_bridge_ClientEventCallback_ObjectUpdateFunc( + arg0, + arg1, + arg2, + arg3 + ); +} + +int wasm_bridge_UserRef(GoString * arg0); + +int UserRef(char * _arg0) { + GoString *arg0 = newString(_arg0); + return wasm_bridge_UserRef( + arg0 + ); +} + +void * wasm_bridge_DictMemory(Dict_t * arg0, void * arg1, unsigned long int arg2, Dtdisc_t * arg3); + +void * DictMemory(Dict_t * _arg0, void * _arg1, unsigned long int _arg2, Dtdisc_t * _arg3) { + Dict_t * arg0 = (Dict_t *)_arg0; + void * arg1 = (void *)_arg1; + unsigned long int arg2 = (unsigned long int)_arg2; + Dtdisc_t * arg3 = (Dtdisc_t *)_arg3; + return wasm_bridge_DictMemory( + arg0, + arg1, + arg2, + arg3 + ); +} + +void * wasm_bridge_DictSearch(Dict_t * arg0, void * arg1, int arg2); + +void * DictSearch(Dict_t * _arg0, void * _arg1, int _arg2) { + Dict_t * arg0 = (Dict_t *)_arg0; + void * arg1 = (void *)_arg1; + int arg2 = (int)_arg2; + return wasm_bridge_DictSearch( + arg0, + arg1, + arg2 + ); +} + +void * wasm_bridge_DictMake(void * arg0, Dtdisc_t * arg1); + +void * DictMake(void * _arg0, Dtdisc_t * _arg1) { + void * arg0 = (void *)_arg0; + Dtdisc_t * arg1 = (Dtdisc_t *)_arg1; + return wasm_bridge_DictMake( + arg0, + arg1 + ); +} + +void wasm_bridge_DictFree(void * arg0); + +void DictFree(void * _arg0) { + void * arg0 = (void *)_arg0; + return wasm_bridge_DictFree( + arg0 + ); +} + +int wasm_bridge_DictCompare(void * arg0, void * arg1); + +int DictCompare(void * _arg0, void * _arg1) { + void * arg0 = (void *)_arg0; + void * arg1 = (void *)_arg1; + return wasm_bridge_DictCompare( + arg0, + arg1 + ); +} + +int wasm_bridge_DictWalk(void * arg0, void * arg1); + +int DictWalk(void * _arg0, void * _arg1) { + void * arg0 = (void *)_arg0; + void * arg1 = (void *)_arg1; + return wasm_bridge_DictWalk( + arg0, + arg1 + ); +} + +void wasm_bridge_UserShape_DataFree(usershape_t * arg0); + +void UserShape_DataFree(usershape_t * _arg0) { + usershape_t * arg0 = (usershape_t *)_arg0; + return wasm_bridge_UserShape_DataFree( + arg0 + ); +} + +void wasm_bridge_DeviceCallbacks_Refresh(GVJ_t * arg0); + +void DeviceCallbacks_Refresh(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_DeviceCallbacks_Refresh( + arg0 + ); +} + +void wasm_bridge_DeviceCallbacks_ButtonPress(GVJ_t * arg0, int arg1, pointf * arg2); + +void DeviceCallbacks_ButtonPress(GVJ_t * _arg0, int _arg1, pointf _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + int arg1 = (int)_arg1; + void *arg2 = malloc(sizeof(_arg2)); + memcpy(arg2, &_arg2, sizeof(_arg2)); + return wasm_bridge_DeviceCallbacks_ButtonPress( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_DeviceCallbacks_ButtonRelease(GVJ_t * arg0, int arg1, pointf * arg2); + +void DeviceCallbacks_ButtonRelease(GVJ_t * _arg0, int _arg1, pointf _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + int arg1 = (int)_arg1; + void *arg2 = malloc(sizeof(_arg2)); + memcpy(arg2, &_arg2, sizeof(_arg2)); + return wasm_bridge_DeviceCallbacks_ButtonRelease( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_DeviceCallbacks_Motion(GVJ_t * arg0, pointf * arg1); + +void DeviceCallbacks_Motion(GVJ_t * _arg0, pointf _arg1) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + void *arg1 = malloc(sizeof(_arg1)); + memcpy(arg1, &_arg1, sizeof(_arg1)); + return wasm_bridge_DeviceCallbacks_Motion( + arg0, + arg1 + ); +} + +void wasm_bridge_DeviceCallbacks_Modify(GVJ_t * arg0, GoString * arg1, GoString * arg2); + +void DeviceCallbacks_Modify(GVJ_t * _arg0, const char * _arg1, const char * _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + GoString *arg2 = newString(_arg2); + return wasm_bridge_DeviceCallbacks_Modify( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_DeviceCallbacks_Delete(GVJ_t * arg0); + +void DeviceCallbacks_Delete(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_DeviceCallbacks_Delete( + arg0 + ); +} + +void wasm_bridge_DeviceCallbacks_Read(GVJ_t * arg0, GoString * arg1, GoString * arg2); + +void DeviceCallbacks_Read(GVJ_t * _arg0, const char * _arg1, const char * _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + GoString *arg2 = newString(_arg2); + return wasm_bridge_DeviceCallbacks_Read( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_DeviceCallbacks_Layout(GVJ_t * arg0, GoString * arg1); + +void DeviceCallbacks_Layout(GVJ_t * _arg0, const char * _arg1) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + return wasm_bridge_DeviceCallbacks_Layout( + arg0, + arg1 + ); +} + +void wasm_bridge_DeviceCallbacks_Render(GVJ_t * arg0, GoString * arg1, GoString * arg2); + +void DeviceCallbacks_Render(GVJ_t * _arg0, const char * _arg1, const char * _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + GoString *arg2 = newString(_arg2); + return wasm_bridge_DeviceCallbacks_Render( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_DeviceEngine_Initialize(GVJ_t * arg0); + +void DeviceEngine_Initialize(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_DeviceEngine_Initialize( + arg0 + ); +} + +void wasm_bridge_DeviceEngine_Format(GVJ_t * arg0); + +void DeviceEngine_Format(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_DeviceEngine_Format( + arg0 + ); +} + +void wasm_bridge_DeviceEngine_Finalize(GVJ_t * arg0); + +void DeviceEngine_Finalize(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_DeviceEngine_Finalize( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginJob(GVJ_t * arg0); + +void RenderEngine_BeginJob(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginJob( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndJob(GVJ_t * arg0); + +void RenderEngine_EndJob(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndJob( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginGraph(GVJ_t * arg0); + +void RenderEngine_BeginGraph(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginGraph( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndGraph(GVJ_t * arg0); + +void RenderEngine_EndGraph(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndGraph( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginLayer(GVJ_t * arg0, GoString * arg1, int arg2, int arg3); + +void RenderEngine_BeginLayer(GVJ_t * _arg0, char * _arg1, int _arg2, int _arg3) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + int arg2 = (int)_arg2; + int arg3 = (int)_arg3; + return wasm_bridge_RenderEngine_BeginLayer( + arg0, + arg1, + arg2, + arg3 + ); +} + +void wasm_bridge_RenderEngine_EndLayer(GVJ_t * arg0); + +void RenderEngine_EndLayer(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndLayer( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginPage(GVJ_t * arg0); + +void RenderEngine_BeginPage(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginPage( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndPage(GVJ_t * arg0); + +void RenderEngine_EndPage(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndPage( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginCluster(GVJ_t * arg0); + +void RenderEngine_BeginCluster(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginCluster( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndCluster(GVJ_t * arg0); + +void RenderEngine_EndCluster(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndCluster( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginNodes(GVJ_t * arg0); + +void RenderEngine_BeginNodes(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginNodes( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndNodes(GVJ_t * arg0); + +void RenderEngine_EndNodes(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndNodes( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginEdges(GVJ_t * arg0); + +void RenderEngine_BeginEdges(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginEdges( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndEdges(GVJ_t * arg0); + +void RenderEngine_EndEdges(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndEdges( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginNode(GVJ_t * arg0); + +void RenderEngine_BeginNode(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginNode( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndNode(GVJ_t * arg0); + +void RenderEngine_EndNode(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndNode( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginEdge(GVJ_t * arg0); + +void RenderEngine_BeginEdge(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_BeginEdge( + arg0 + ); +} + +void wasm_bridge_RenderEngine_EndEdge(GVJ_t * arg0); + +void RenderEngine_EndEdge(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndEdge( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginAnchor(GVJ_t * arg0, GoString * arg1, GoString * arg2, GoString * arg3, GoString * arg4); + +void RenderEngine_BeginAnchor(GVJ_t * _arg0, char * _arg1, char * _arg2, char * _arg3, char * _arg4) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + GoString *arg2 = newString(_arg2); + GoString *arg3 = newString(_arg3); + GoString *arg4 = newString(_arg4); + return wasm_bridge_RenderEngine_BeginAnchor( + arg0, + arg1, + arg2, + arg3, + arg4 + ); +} + +void wasm_bridge_RenderEngine_EndAnchor(GVJ_t * arg0); + +void RenderEngine_EndAnchor(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndAnchor( + arg0 + ); +} + +void wasm_bridge_RenderEngine_BeginLabel(GVJ_t * arg0, int arg1); + +void RenderEngine_BeginLabel(GVJ_t * _arg0, label_type _arg1) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + label_type arg1 = (label_type)_arg1; + return wasm_bridge_RenderEngine_BeginLabel( + arg0, + arg1 + ); +} + +void wasm_bridge_RenderEngine_EndLabel(GVJ_t * arg0); + +void RenderEngine_EndLabel(GVJ_t * _arg0) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + return wasm_bridge_RenderEngine_EndLabel( + arg0 + ); +} + +void wasm_bridge_RenderEngine_Textspan(GVJ_t * arg0, pointf * arg1, textspan_t * arg2); + +void RenderEngine_Textspan(GVJ_t * _arg0, pointf _arg1, textspan_t * _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + void *arg1 = malloc(sizeof(_arg1)); + memcpy(arg1, &_arg1, sizeof(_arg1)); + textspan_t * arg2 = (textspan_t *)_arg2; + return wasm_bridge_RenderEngine_Textspan( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_RenderEngine_ResolveColor(GVJ_t * arg0, gvcolor_t * arg1); + +void RenderEngine_ResolveColor(GVJ_t * _arg0, gvcolor_t * _arg1) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + gvcolor_t * arg1 = (gvcolor_t *)_arg1; + return wasm_bridge_RenderEngine_ResolveColor( + arg0, + arg1 + ); +} + +void wasm_bridge_RenderEngine_Ellipse(GVJ_t * arg0, GoSlice * arg1, int arg2); + +void RenderEngine_Ellipse(GVJ_t * _arg0, pointf * _arg1, int _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0;GoSlice *arg1 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg1_length = 2; + arg1->len = arg1_length; + void **arg1_data = (void **)malloc(8 * arg1_length); + arg1->data = arg1_data; + for (int i = 0; i < arg1_length; i++) { + void *v = malloc(sizeof(_arg1[i])); + memcpy(v, &_arg1[i], sizeof(_arg1[i])); + *arg1_data = (void *)v; + arg1_data += 2; // move data header address by 2 word (8 bytes). + } + int arg2 = (int)_arg2; + return wasm_bridge_RenderEngine_Ellipse( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_RenderEngine_Polygon(GVJ_t * arg0, GoSlice * arg1, unsigned long int arg2, int arg3); + +void RenderEngine_Polygon(GVJ_t * _arg0, pointf * _arg1, unsigned long int _arg2, int _arg3) { + GVJ_t * arg0 = (GVJ_t *)_arg0;GoSlice *arg1 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg1_length = _arg2; + arg1->len = arg1_length; + void **arg1_data = (void **)malloc(8 * arg1_length); + arg1->data = arg1_data; + for (int i = 0; i < arg1_length; i++) { + void *v = malloc(sizeof(_arg1[i])); + memcpy(v, &_arg1[i], sizeof(_arg1[i])); + *arg1_data = (void *)v; + arg1_data += 2; // move data header address by 2 word (8 bytes). + } + unsigned long int arg2 = (unsigned long int)_arg2; + int arg3 = (int)_arg3; + return wasm_bridge_RenderEngine_Polygon( + arg0, + arg1, + arg2, + arg3 + ); +} + +void wasm_bridge_RenderEngine_Beziercurve(GVJ_t * arg0, GoSlice * arg1, unsigned long int arg2, int arg3); + +void RenderEngine_Beziercurve(GVJ_t * _arg0, pointf * _arg1, unsigned long int _arg2, int _arg3) { + GVJ_t * arg0 = (GVJ_t *)_arg0;GoSlice *arg1 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg1_length = _arg2; + arg1->len = arg1_length; + void **arg1_data = (void **)malloc(8 * arg1_length); + arg1->data = arg1_data; + for (int i = 0; i < arg1_length; i++) { + void *v = malloc(sizeof(_arg1[i])); + memcpy(v, &_arg1[i], sizeof(_arg1[i])); + *arg1_data = (void *)v; + arg1_data += 2; // move data header address by 2 word (8 bytes). + } + unsigned long int arg2 = (unsigned long int)_arg2; + int arg3 = (int)_arg3; + return wasm_bridge_RenderEngine_Beziercurve( + arg0, + arg1, + arg2, + arg3 + ); +} + +void wasm_bridge_RenderEngine_Polyline(GVJ_t * arg0, GoSlice * arg1, unsigned long int arg2); + +void RenderEngine_Polyline(GVJ_t * _arg0, pointf * _arg1, unsigned long int _arg2) { + GVJ_t * arg0 = (GVJ_t *)_arg0;GoSlice *arg1 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg1_length = _arg2; + arg1->len = arg1_length; + void **arg1_data = (void **)malloc(8 * arg1_length); + arg1->data = arg1_data; + for (int i = 0; i < arg1_length; i++) { + void *v = malloc(sizeof(_arg1[i])); + memcpy(v, &_arg1[i], sizeof(_arg1[i])); + *arg1_data = (void *)v; + arg1_data += 2; // move data header address by 2 word (8 bytes). + } + unsigned long int arg2 = (unsigned long int)_arg2; + return wasm_bridge_RenderEngine_Polyline( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_RenderEngine_Comment(GVJ_t * arg0, GoString * arg1); + +void RenderEngine_Comment(GVJ_t * _arg0, char * _arg1) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1); + return wasm_bridge_RenderEngine_Comment( + arg0, + arg1 + ); +} + +void wasm_bridge_RenderEngine_LibraryShape(GVJ_t * arg0, GoString * arg1, GoSlice * arg2, unsigned long int arg3, int arg4); + +void RenderEngine_LibraryShape(GVJ_t * _arg0, char * _arg1, pointf * _arg2, unsigned long int _arg3, int _arg4) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + GoString *arg1 = newString(_arg1);GoSlice *arg2 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg2_length = _arg3; + arg2->len = arg2_length; + void **arg2_data = (void **)malloc(8 * arg2_length); + arg2->data = arg2_data; + for (int i = 0; i < arg2_length; i++) { + void *v = malloc(sizeof(_arg2[i])); + memcpy(v, &_arg2[i], sizeof(_arg2[i])); + *arg2_data = (void *)v; + arg2_data += 2; // move data header address by 2 word (8 bytes). + } + unsigned long int arg3 = (unsigned long int)_arg3; + int arg4 = (int)_arg4; + return wasm_bridge_RenderEngine_LibraryShape( + arg0, + arg1, + arg2, + arg3, + arg4 + ); +} + +void wasm_bridge_LayoutEngine_Layout(Agraph_t * arg0); + +void LayoutEngine_Layout(Agraph_t * _arg0) { + Agraph_t * arg0 = (Agraph_t *)_arg0; + return wasm_bridge_LayoutEngine_Layout( + arg0 + ); +} + +void wasm_bridge_LayoutEngine_Cleanup(Agraph_t * arg0); + +void LayoutEngine_Cleanup(Agraph_t * _arg0) { + Agraph_t * arg0 = (Agraph_t *)_arg0; + return wasm_bridge_LayoutEngine_Cleanup( + arg0 + ); +} + +bool wasm_bridge_TextLayoutEngine_TextLayout(textspan_t * arg0, GoSlice * arg1); + +bool TextLayoutEngine_TextLayout(textspan_t * _arg0, char ** _arg1) { + textspan_t * arg0 = (textspan_t *)_arg0;GoSlice *arg1 = (GoSlice *)malloc(sizeof(GoSlice)); + int arg1_length = 0; + for (int i = 0; _arg1[i] != NULL; i++) { + arg1_length++; + } + arg1->len = arg1_length; + void **arg1_data = (void **)malloc(8 * arg1_length); + arg1->data = arg1_data; + for (int i = 0; i < arg1_length; i++) { + GoString *v = newString(_arg1[i]); + *arg1_data = (void *)v; + arg1_data += 2; // move data header address by 2 word (8 bytes). + } + return wasm_bridge_TextLayoutEngine_TextLayout( + arg0, + arg1 + ); +} + +void wasm_bridge_LoadImageEngine_LoadImage(GVJ_t * arg0, usershape_t * arg1, boxf * arg2, bool arg3); + +void LoadImageEngine_LoadImage(GVJ_t * _arg0, usershape_t * _arg1, boxf _arg2, bool _arg3) { + GVJ_t * arg0 = (GVJ_t *)_arg0; + usershape_t * arg1 = (usershape_t *)_arg1; + void *arg2 = malloc(sizeof(_arg2)); + memcpy(arg2, &_arg2, sizeof(_arg2)); + bool arg3 = (bool)_arg3; + return wasm_bridge_LoadImageEngine_LoadImage( + arg0, + arg1, + arg2, + arg3 + ); +} + + +int wasm_bridge_get_AGRAPH() { + return AGRAPH; +} + +int wasm_bridge_get_AGNODE() { + return AGNODE; +} + +int wasm_bridge_get_AGOUTEDGE() { + return AGOUTEDGE; +} + +int wasm_bridge_get_AGINEDGE() { + return AGINEDGE; +} + +int wasm_bridge_get_AGEDGE() { + return AGEDGE; +} + + +int wasm_bridge_get_AGWARN() { + return AGWARN; +} + +int wasm_bridge_get_AGERR() { + return AGERR; +} + +int wasm_bridge_get_AGMAX() { + return AGMAX; +} + +int wasm_bridge_get_AGPREV() { + return AGPREV; +} + + +int wasm_bridge_get_FT_NULL() { + return FT_NULL; +} + +int wasm_bridge_get_FT_BMP() { + return FT_BMP; +} + +int wasm_bridge_get_FT_GIF() { + return FT_GIF; +} + +int wasm_bridge_get_FT_PNG() { + return FT_PNG; +} + +int wasm_bridge_get_FT_JPEG() { + return FT_JPEG; +} + +int wasm_bridge_get_FT_PDF() { + return FT_PDF; +} + +int wasm_bridge_get_FT_PS() { + return FT_PS; +} + +int wasm_bridge_get_FT_EPS() { + return FT_EPS; +} + +int wasm_bridge_get_FT_SVG() { + return FT_SVG; +} + +int wasm_bridge_get_FT_XML() { + return FT_XML; +} + +int wasm_bridge_get_FT_RIFF() { + return FT_RIFF; +} + +int wasm_bridge_get_FT_WEBP() { + return FT_WEBP; +} + +int wasm_bridge_get_FT_ICO() { + return FT_ICO; +} + +int wasm_bridge_get_FT_TIFF() { + return FT_TIFF; +} + + +int wasm_bridge_get_ROOTGRAPH_OBJTYPE() { + return ROOTGRAPH_OBJTYPE; +} + +int wasm_bridge_get_CLUSTER_OBJTYPE() { + return CLUSTER_OBJTYPE; +} + +int wasm_bridge_get_NODE_OBJTYPE() { + return NODE_OBJTYPE; +} + +int wasm_bridge_get_EDGE_OBJTYPE() { + return EDGE_OBJTYPE; +} + + +int wasm_bridge_get_MAP_RECTANGLE() { + return MAP_RECTANGLE; +} + +int wasm_bridge_get_MAP_CIRCLE() { + return MAP_CIRCLE; +} + +int wasm_bridge_get_MAP_POLYGON() { + return MAP_POLYGON; +} + + +int wasm_bridge_get_EMIT_GDRAW() { + return EMIT_GDRAW; +} + +int wasm_bridge_get_EMIT_CDRAW() { + return EMIT_CDRAW; +} + +int wasm_bridge_get_EMIT_TDRAW() { + return EMIT_TDRAW; +} + +int wasm_bridge_get_EMIT_HDRAW() { + return EMIT_HDRAW; +} + +int wasm_bridge_get_EMIT_GLABEL() { + return EMIT_GLABEL; +} + +int wasm_bridge_get_EMIT_CLABEL() { + return EMIT_CLABEL; +} + +int wasm_bridge_get_EMIT_TLABEL() { + return EMIT_TLABEL; +} + +int wasm_bridge_get_EMIT_HLABEL() { + return EMIT_HLABEL; +} + +int wasm_bridge_get_EMIT_NDRAW() { + return EMIT_NDRAW; +} + +int wasm_bridge_get_EMIT_EDRAW() { + return EMIT_EDRAW; +} + +int wasm_bridge_get_EMIT_NLABEL() { + return EMIT_NLABEL; +} + +int wasm_bridge_get_EMIT_ELABEL() { + return EMIT_ELABEL; +} + + +int wasm_bridge_get_EMIT_SORTED() { + return EMIT_SORTED; +} + +int wasm_bridge_get_EMIT_COLORS() { + return EMIT_COLORS; +} + +int wasm_bridge_get_EMIT_CLUSTERS_LAST() { + return EMIT_CLUSTERS_LAST; +} + +int wasm_bridge_get_EMIT_PREORDER() { + return EMIT_PREORDER; +} + +int wasm_bridge_get_EMIT_EDGE_SORTED() { + return EMIT_EDGE_SORTED; +} + + +int wasm_bridge_get_GVDEVICE_DOES_PAGES() { + return GVDEVICE_DOES_PAGES; +} + +int wasm_bridge_get_GVDEVICE_DOES_LAYERS() { + return GVDEVICE_DOES_LAYERS; +} + +int wasm_bridge_get_GVDEVICE_EVENTS() { + return GVDEVICE_EVENTS; +} + +int wasm_bridge_get_GVDEVICE_DOES_TRUECOLOR() { + return GVDEVICE_DOES_TRUECOLOR; +} + +int wasm_bridge_get_GVDEVICE_BINARY_FORMAT() { + return GVDEVICE_BINARY_FORMAT; +} + +int wasm_bridge_get_GVDEVICE_COMPRESSED_FORMAT() { + return GVDEVICE_COMPRESSED_FORMAT; +} + +int wasm_bridge_get_GVDEVICE_NO_WRITER() { + return GVDEVICE_NO_WRITER; +} + + +int wasm_bridge_get_GVRENDER_Y_GOES_DOWN() { + return GVRENDER_Y_GOES_DOWN; +} + +int wasm_bridge_get_GVRENDER_DOES_TRANSFORM() { + return GVRENDER_DOES_TRANSFORM; +} + +int wasm_bridge_get_GVRENDER_DOES_LABELS() { + return GVRENDER_DOES_LABELS; +} + +int wasm_bridge_get_GVRENDER_DOES_MAPS() { + return GVRENDER_DOES_MAPS; +} + +int wasm_bridge_get_GVRENDER_DOES_MAP_RECTANGLE() { + return GVRENDER_DOES_MAP_RECTANGLE; +} + +int wasm_bridge_get_GVRENDER_DOES_MAP_CIRCLE() { + return GVRENDER_DOES_MAP_CIRCLE; +} + +int wasm_bridge_get_GVRENDER_DOES_MAP_POLYGON() { + return GVRENDER_DOES_MAP_POLYGON; +} + +int wasm_bridge_get_GVRENDER_DOES_MAP_ELLIPSE() { + return GVRENDER_DOES_MAP_ELLIPSE; +} + +int wasm_bridge_get_GVRENDER_DOES_MAP_BSPLINE() { + return GVRENDER_DOES_MAP_BSPLINE; +} + +int wasm_bridge_get_GVRENDER_DOES_TOOLTIPS() { + return GVRENDER_DOES_TOOLTIPS; +} + +int wasm_bridge_get_GVRENDER_DOES_TARGETS() { + return GVRENDER_DOES_TARGETS; +} + +int wasm_bridge_get_GVRENDER_DOES_Z() { + return GVRENDER_DOES_Z; +} + +int wasm_bridge_get_GVRENDER_NO_WHITE_BG() { + return GVRENDER_NO_WHITE_BG; +} + + +int wasm_bridge_get_LAYOUT_NOT_REQUIRED() { + return LAYOUT_NOT_REQUIRED; +} + +int wasm_bridge_get_OUTPUT_NOT_REQUIRED() { + return OUTPUT_NOT_REQUIRED; +} + + +int wasm_bridge_get_PEN_NONE() { + return PEN_NONE; +} + +int wasm_bridge_get_PEN_DASHED() { + return PEN_DASHED; +} + +int wasm_bridge_get_PEN_DOTTED() { + return PEN_DOTTED; +} + +int wasm_bridge_get_PEN_SOLID() { + return PEN_SOLID; +} + + +int wasm_bridge_get_FILL_NONE() { + return FILL_NONE; +} + +int wasm_bridge_get_FILL_SOLID() { + return FILL_SOLID; +} + +int wasm_bridge_get_FILL_LINEAR() { + return FILL_LINEAR; +} + +int wasm_bridge_get_FILL_RADIAL() { + return FILL_RADIAL; +} + + +int wasm_bridge_get_FONT_REGULAR() { + return FONT_REGULAR; +} + +int wasm_bridge_get_FONT_BOLD() { + return FONT_BOLD; +} + +int wasm_bridge_get_FONT_ITALIC() { + return FONT_ITALIC; +} + + +int wasm_bridge_get_LABEL_PLAIN() { + return LABEL_PLAIN; +} + +int wasm_bridge_get_LABEL_HTML() { + return LABEL_HTML; +} + + +int wasm_bridge_get_HSVA_DOUBLE() { + return HSVA_DOUBLE; +} + +int wasm_bridge_get_RGBA_BYTE() { + return RGBA_BYTE; +} + +int wasm_bridge_get_RGBA_WORD() { + return RGBA_WORD; +} + +int wasm_bridge_get_RGBA_DOUBLE() { + return RGBA_DOUBLE; +} + +int wasm_bridge_get_COLOR_STRING() { + return COLOR_STRING; +} + +int wasm_bridge_get_COLOR_INDEX() { + return COLOR_INDEX; +} + + +int wasm_bridge_get_API_render() { + return API_render; +} + +int wasm_bridge_get_API_layout() { + return API_layout; +} + +int wasm_bridge_get_API_textlayout() { + return API_textlayout; +} + +int wasm_bridge_get_API_device() { + return API_device; +} + +int wasm_bridge_get_API_loadimage() { + return API_loadimage; +} + + + +void *wasm_bridge_new_Record() { + void *ret = malloc(sizeof(Agrec_t)); + memset(ret, 0, sizeof(Agrec_t)); + return ret; +} + +void wasm_bridge_get_Record_name(Agrec_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_Record_name(Agrec_t *recv, void * v) { + recv->name = (char *)v; +} + +void wasm_bridge_get_Record_next(Agrec_t *recv, Agrec_t ** ret) { + Agrec_t * v = (Agrec_t *)recv->next; + *ret = v; +} + +void wasm_bridge_set_Record_next(Agrec_t *recv, void * v) { + recv->next = (Agrec_t *)v; +} + +void *wasm_bridge_new_Tag() { + void *ret = malloc(sizeof(Agtag_t)); + memset(ret, 0, sizeof(Agtag_t)); + return ret; +} + +void wasm_bridge_get_Tag_object_type(Agtag_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->objtype; + *ret = v; +} + +void wasm_bridge_set_Tag_object_type(Agtag_t *recv, unsigned long int v) { + recv->objtype = (unsigned long int)v; +} + +void wasm_bridge_get_Tag_mtflock(Agtag_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->mtflock; + *ret = v; +} + +void wasm_bridge_set_Tag_mtflock(Agtag_t *recv, unsigned long int v) { + recv->mtflock = (unsigned long int)v; +} + +void wasm_bridge_get_Tag_attrwf(Agtag_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->attrwf; + *ret = v; +} + +void wasm_bridge_set_Tag_attrwf(Agtag_t *recv, unsigned long int v) { + recv->attrwf = (unsigned long int)v; +} + +void wasm_bridge_get_Tag_seq(Agtag_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->seq; + *ret = v; +} + +void wasm_bridge_set_Tag_seq(Agtag_t *recv, unsigned long int v) { + recv->seq = (unsigned long int)v; +} + +void wasm_bridge_get_Tag_id(Agtag_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_Tag_id(Agtag_t *recv, unsigned long long int v) { + recv->id = (unsigned long long int)v; +} + +void *wasm_bridge_new_Object() { + void *ret = malloc(sizeof(Agobj_t)); + memset(ret, 0, sizeof(Agobj_t)); + return ret; +} + +void wasm_bridge_get_Object_tag(Agobj_t *recv, Agtag_t ** ret) { + void *v = malloc(sizeof(recv->tag)); + memcpy(v, &recv->tag, sizeof(recv->tag)); + *ret = v; +} + +void wasm_bridge_set_Object_tag(Agobj_t *recv, void * v) { + recv->tag = *(Agtag_t *)v; +} + +void wasm_bridge_get_Object_data(Agobj_t *recv, Agrec_t ** ret) { + Agrec_t * v = (Agrec_t *)recv->data; + *ret = v; +} + +void wasm_bridge_set_Object_data(Agobj_t *recv, void * v) { + recv->data = (Agrec_t *)v; +} + +void *wasm_bridge_new_SubNode() { + void *ret = malloc(sizeof(Agsubnode_t)); + memset(ret, 0, sizeof(Agsubnode_t)); + return ret; +} + +void wasm_bridge_get_SubNode_seq_link(Agsubnode_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->seq_link)); + memcpy(v, &recv->seq_link, sizeof(recv->seq_link)); + *ret = v; +} + +void wasm_bridge_set_SubNode_seq_link(Agsubnode_t *recv, void * v) { + recv->seq_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_SubNode_id_link(Agsubnode_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->id_link)); + memcpy(v, &recv->id_link, sizeof(recv->id_link)); + *ret = v; +} + +void wasm_bridge_set_SubNode_id_link(Agsubnode_t *recv, void * v) { + recv->id_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_SubNode_node(Agsubnode_t *recv, Agnode_t ** ret) { + Agnode_t * v = (Agnode_t *)recv->node; + *ret = v; +} + +void wasm_bridge_set_SubNode_node(Agsubnode_t *recv, void * v) { + recv->node = (Agnode_t *)v; +} + +void wasm_bridge_get_SubNode_in_id(Agsubnode_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->in_id; + *ret = v; +} + +void wasm_bridge_set_SubNode_in_id(Agsubnode_t *recv, void * v) { + recv->in_id = (Dtlink_t *)v; +} + +void wasm_bridge_get_SubNode_out_id(Agsubnode_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->out_id; + *ret = v; +} + +void wasm_bridge_set_SubNode_out_id(Agsubnode_t *recv, void * v) { + recv->out_id = (Dtlink_t *)v; +} + +void wasm_bridge_get_SubNode_in_seq(Agsubnode_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->in_seq; + *ret = v; +} + +void wasm_bridge_set_SubNode_in_seq(Agsubnode_t *recv, void * v) { + recv->in_seq = (Dtlink_t *)v; +} + +void wasm_bridge_get_SubNode_out_seq(Agsubnode_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->out_seq; + *ret = v; +} + +void wasm_bridge_set_SubNode_out_seq(Agsubnode_t *recv, void * v) { + recv->out_seq = (Dtlink_t *)v; +} + +void *wasm_bridge_new_Node() { + void *ret = malloc(sizeof(Agnode_t)); + memset(ret, 0, sizeof(Agnode_t)); + return ret; +} + +void wasm_bridge_get_Node_base(Agnode_t *recv, Agobj_t ** ret) { + void *v = malloc(sizeof(recv->base)); + memcpy(v, &recv->base, sizeof(recv->base)); + *ret = v; +} + +void wasm_bridge_set_Node_base(Agnode_t *recv, void * v) { + recv->base = *(Agobj_t *)v; +} + +void wasm_bridge_get_Node_root(Agnode_t *recv, Agraph_t ** ret) { + Agraph_t * v = (Agraph_t *)recv->root; + *ret = v; +} + +void wasm_bridge_set_Node_root(Agnode_t *recv, void * v) { + recv->root = (Agraph_t *)v; +} + +void wasm_bridge_get_Node_mainsub(Agnode_t *recv, Agsubnode_t ** ret) { + void *v = malloc(sizeof(recv->mainsub)); + memcpy(v, &recv->mainsub, sizeof(recv->mainsub)); + *ret = v; +} + +void wasm_bridge_set_Node_mainsub(Agnode_t *recv, void * v) { + recv->mainsub = *(Agsubnode_t *)v; +} + +void *wasm_bridge_new_Edge() { + void *ret = malloc(sizeof(Agedge_t)); + memset(ret, 0, sizeof(Agedge_t)); + return ret; +} + +void wasm_bridge_get_Edge_base(Agedge_t *recv, Agobj_t ** ret) { + void *v = malloc(sizeof(recv->base)); + memcpy(v, &recv->base, sizeof(recv->base)); + *ret = v; +} + +void wasm_bridge_set_Edge_base(Agedge_t *recv, void * v) { + recv->base = *(Agobj_t *)v; +} + +void wasm_bridge_get_Edge_id_link(Agedge_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->id_link)); + memcpy(v, &recv->id_link, sizeof(recv->id_link)); + *ret = v; +} + +void wasm_bridge_set_Edge_id_link(Agedge_t *recv, void * v) { + recv->id_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_Edge_seq_link(Agedge_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->seq_link)); + memcpy(v, &recv->seq_link, sizeof(recv->seq_link)); + *ret = v; +} + +void wasm_bridge_set_Edge_seq_link(Agedge_t *recv, void * v) { + recv->seq_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_Edge_node(Agedge_t *recv, Agnode_t ** ret) { + Agnode_t * v = (Agnode_t *)recv->node; + *ret = v; +} + +void wasm_bridge_set_Edge_node(Agedge_t *recv, void * v) { + recv->node = (Agnode_t *)v; +} + +void *wasm_bridge_new_EdgePair() { + void *ret = malloc(sizeof(Agedgepair_t)); + memset(ret, 0, sizeof(Agedgepair_t)); + return ret; +} + +void wasm_bridge_get_EdgePair_out(Agedgepair_t *recv, Agedge_t ** ret) { + void *v = malloc(sizeof(recv->out)); + memcpy(v, &recv->out, sizeof(recv->out)); + *ret = v; +} + +void wasm_bridge_set_EdgePair_out(Agedgepair_t *recv, void * v) { + recv->out = *(Agedge_t *)v; +} + +void wasm_bridge_get_EdgePair_in(Agedgepair_t *recv, Agedge_t ** ret) { + void *v = malloc(sizeof(recv->in)); + memcpy(v, &recv->in, sizeof(recv->in)); + *ret = v; +} + +void wasm_bridge_set_EdgePair_in(Agedgepair_t *recv, void * v) { + recv->in = *(Agedge_t *)v; +} + +void *wasm_bridge_new_GraphDescriptor() { + void *ret = malloc(sizeof(Agdesc_t)); + memset(ret, 0, sizeof(Agdesc_t)); + return ret; +} + +void wasm_bridge_get_GraphDescriptor_directed(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->directed; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_directed(Agdesc_t *recv, unsigned long int v) { + recv->directed = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_strict(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->strict; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_strict(Agdesc_t *recv, unsigned long int v) { + recv->strict = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_no_loop(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->no_loop; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_no_loop(Agdesc_t *recv, unsigned long int v) { + recv->no_loop = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_maingraph(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->maingraph; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_maingraph(Agdesc_t *recv, unsigned long int v) { + recv->maingraph = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_no_write(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->no_write; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_no_write(Agdesc_t *recv, unsigned long int v) { + recv->no_write = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_has_attrs(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->has_attrs; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_has_attrs(Agdesc_t *recv, unsigned long int v) { + recv->has_attrs = (unsigned long int)v; +} + +void wasm_bridge_get_GraphDescriptor_has_cmpnd(Agdesc_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->has_cmpnd; + *ret = v; +} + +void wasm_bridge_set_GraphDescriptor_has_cmpnd(Agdesc_t *recv, unsigned long int v) { + recv->has_cmpnd = (unsigned long int)v; +} + +void *wasm_bridge_new_IDAllocator() { + void *ret = malloc(sizeof(Agiddisc_t)); + memset(ret, 0, sizeof(Agiddisc_t)); + return ret; +} + +void wasm_bridge_set_IDAllocator_open(Agiddisc_t *recv) { + recv->open = IDAllocator_Open; +} + +void wasm_bridge_set_IDAllocator_map(Agiddisc_t *recv) { + recv->map = IDAllocator_Map; +} + +void wasm_bridge_set_IDAllocator_alloc(Agiddisc_t *recv) { + recv->alloc = IDAllocator_Alloc; +} + +void wasm_bridge_set_IDAllocator_free(Agiddisc_t *recv) { + recv->free = IDAllocator_Free; +} + +void wasm_bridge_set_IDAllocator_print(Agiddisc_t *recv) { + recv->print = IDAllocator_Print; +} + +void wasm_bridge_set_IDAllocator_close(Agiddisc_t *recv) { + recv->close = IDAllocator_Close; +} + +void wasm_bridge_set_IDAllocator_idregister(Agiddisc_t *recv) { + recv->idregister = IDAllocator_IdRegister; +} + +void *wasm_bridge_new_IOService() { + void *ret = malloc(sizeof(Agiodisc_t)); + memset(ret, 0, sizeof(Agiodisc_t)); + return ret; +} + +void wasm_bridge_set_IOService_afread(Agiodisc_t *recv) { + recv->afread = IOService_Afread; +} + +void wasm_bridge_set_IOService_putstr(Agiodisc_t *recv) { + recv->putstr = IOService_Putstr; +} + +void wasm_bridge_set_IOService_flush(Agiodisc_t *recv) { + recv->flush = IOService_Flush; +} + +void *wasm_bridge_new_ClientDiscipline() { + void *ret = malloc(sizeof(Agdisc_t)); + memset(ret, 0, sizeof(Agdisc_t)); + return ret; +} + +void wasm_bridge_get_ClientDiscipline_id(Agdisc_t *recv, Agiddisc_t ** ret) { + Agiddisc_t * v = (Agiddisc_t *)recv->id; + *ret = v; +} + +void wasm_bridge_set_ClientDiscipline_id(Agdisc_t *recv, void * v) { + recv->id = (Agiddisc_t *)v; +} + +void wasm_bridge_get_ClientDiscipline_io(Agdisc_t *recv, Agiodisc_t ** ret) { + Agiodisc_t * v = (Agiodisc_t *)recv->io; + *ret = v; +} + +void wasm_bridge_set_ClientDiscipline_io(Agdisc_t *recv, void * v) { + recv->io = (Agiodisc_t *)v; +} + +void *wasm_bridge_new_State() { + void *ret = malloc(sizeof(Agdstate_t)); + memset(ret, 0, sizeof(Agdstate_t)); + return ret; +} + +void wasm_bridge_get_State_id(Agdstate_t *recv, void ** ret) { + void * v = (void *)recv->id; + *ret = v; +} + +void wasm_bridge_set_State_id(Agdstate_t *recv, void * v) { + recv->id = (void *)v; +} + +void *wasm_bridge_new_ClientEventCallback() { + void *ret = malloc(sizeof(Agcbdisc_t)); + memset(ret, 0, sizeof(Agcbdisc_t)); + return ret; +} + +void *wasm_bridge_new_CallbackStack() { + void *ret = malloc(sizeof(Agcbstack_t)); + memset(ret, 0, sizeof(Agcbstack_t)); + return ret; +} + +void wasm_bridge_get_CallbackStack_f(Agcbstack_t *recv, Agcbdisc_t ** ret) { + Agcbdisc_t * v = (Agcbdisc_t *)recv->f; + *ret = v; +} + +void wasm_bridge_set_CallbackStack_f(Agcbstack_t *recv, void * v) { + recv->f = (Agcbdisc_t *)v; +} + +void wasm_bridge_get_CallbackStack_state(Agcbstack_t *recv, void ** ret) { + void * v = (void *)recv->state; + *ret = v; +} + +void wasm_bridge_set_CallbackStack_state(Agcbstack_t *recv, void * v) { + recv->state = (void *)v; +} + +void wasm_bridge_get_CallbackStack_prev(Agcbstack_t *recv, Agcbstack_t ** ret) { + Agcbstack_t * v = (Agcbstack_t *)recv->prev; + *ret = v; +} + +void wasm_bridge_set_CallbackStack_prev(Agcbstack_t *recv, void * v) { + recv->prev = (Agcbstack_t *)v; +} + +void *wasm_bridge_new_CommonFields() { + void *ret = malloc(sizeof(Agclos_t)); + memset(ret, 0, sizeof(Agclos_t)); + return ret; +} + +void wasm_bridge_get_CommonFields_disc(Agclos_t *recv, Agdisc_t ** ret) { + void *v = malloc(sizeof(recv->disc)); + memcpy(v, &recv->disc, sizeof(recv->disc)); + *ret = v; +} + +void wasm_bridge_set_CommonFields_disc(Agclos_t *recv, void * v) { + recv->disc = *(Agdisc_t *)v; +} + +void wasm_bridge_get_CommonFields_state(Agclos_t *recv, Agdstate_t ** ret) { + void *v = malloc(sizeof(recv->state)); + memcpy(v, &recv->state, sizeof(recv->state)); + *ret = v; +} + +void wasm_bridge_set_CommonFields_state(Agclos_t *recv, void * v) { + recv->state = *(Agdstate_t *)v; +} + +void wasm_bridge_get_CommonFields_strdict(Agclos_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->strdict; + *ret = v; +} + +void wasm_bridge_set_CommonFields_strdict(Agclos_t *recv, void * v) { + recv->strdict = (Dict_t *)v; +} + +void wasm_bridge_get_CommonFields_seq(Agclos_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 3; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + unsigned long long int v = (unsigned long long int)recv->seq[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_CommonFields_seq(Agclos_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->seq[i], elem, sizeof(unsigned long long int)); + } +} + +void wasm_bridge_get_CommonFields_cb(Agclos_t *recv, Agcbstack_t ** ret) { + Agcbstack_t * v = (Agcbstack_t *)recv->cb; + *ret = v; +} + +void wasm_bridge_set_CommonFields_cb(Agclos_t *recv, void * v) { + recv->cb = (Agcbstack_t *)v; +} + +void wasm_bridge_get_CommonFields_lookup_by_name(Agclos_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 3; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + Dict_t * v = (Dict_t *)recv->lookup_by_name[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_CommonFields_lookup_by_name(Agclos_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->lookup_by_name[i], elem, sizeof(Dict_t *)); + } +} + +void wasm_bridge_get_CommonFields_lookup_by_id(Agclos_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 3; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + Dict_t * v = (Dict_t *)recv->lookup_by_id[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_CommonFields_lookup_by_id(Agclos_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->lookup_by_id[i], elem, sizeof(Dict_t *)); + } +} + +void *wasm_bridge_new_Graph() { + void *ret = malloc(sizeof(Agraph_t)); + memset(ret, 0, sizeof(Agraph_t)); + return ret; +} + +void wasm_bridge_get_Graph_base(Agraph_t *recv, Agobj_t ** ret) { + void *v = malloc(sizeof(recv->base)); + memcpy(v, &recv->base, sizeof(recv->base)); + *ret = v; +} + +void wasm_bridge_set_Graph_base(Agraph_t *recv, void * v) { + recv->base = *(Agobj_t *)v; +} + +void wasm_bridge_get_Graph_desc(Agraph_t *recv, Agdesc_t ** ret) { + void *v = malloc(sizeof(recv->desc)); + memcpy(v, &recv->desc, sizeof(recv->desc)); + *ret = v; +} + +void wasm_bridge_set_Graph_desc(Agraph_t *recv, void * v) { + recv->desc = *(Agdesc_t *)v; +} + +void wasm_bridge_get_Graph_seq_link(Agraph_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->seq_link)); + memcpy(v, &recv->seq_link, sizeof(recv->seq_link)); + *ret = v; +} + +void wasm_bridge_set_Graph_seq_link(Agraph_t *recv, void * v) { + recv->seq_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_Graph_id_link(Agraph_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->id_link)); + memcpy(v, &recv->id_link, sizeof(recv->id_link)); + *ret = v; +} + +void wasm_bridge_set_Graph_id_link(Agraph_t *recv, void * v) { + recv->id_link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_Graph_n_seq(Agraph_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->n_seq; + *ret = v; +} + +void wasm_bridge_set_Graph_n_seq(Agraph_t *recv, void * v) { + recv->n_seq = (Dict_t *)v; +} + +void wasm_bridge_get_Graph_e_seq(Agraph_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->e_seq; + *ret = v; +} + +void wasm_bridge_set_Graph_e_seq(Agraph_t *recv, void * v) { + recv->e_seq = (Dict_t *)v; +} + +void wasm_bridge_get_Graph_e_id(Agraph_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->e_id; + *ret = v; +} + +void wasm_bridge_set_Graph_e_id(Agraph_t *recv, void * v) { + recv->e_id = (Dict_t *)v; +} + +void wasm_bridge_get_Graph_g_seq(Agraph_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->g_seq; + *ret = v; +} + +void wasm_bridge_set_Graph_g_seq(Agraph_t *recv, void * v) { + recv->g_seq = (Dict_t *)v; +} + +void wasm_bridge_get_Graph_g_id(Agraph_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->g_id; + *ret = v; +} + +void wasm_bridge_set_Graph_g_id(Agraph_t *recv, void * v) { + recv->g_id = (Dict_t *)v; +} + +void wasm_bridge_get_Graph_parent(Agraph_t *recv, Agraph_t ** ret) { + Agraph_t * v = (Agraph_t *)recv->parent; + *ret = v; +} + +void wasm_bridge_set_Graph_parent(Agraph_t *recv, void * v) { + recv->parent = (Agraph_t *)v; +} + +void wasm_bridge_get_Graph_root(Agraph_t *recv, Agraph_t ** ret) { + Agraph_t * v = (Agraph_t *)recv->root; + *ret = v; +} + +void wasm_bridge_set_Graph_root(Agraph_t *recv, void * v) { + recv->root = (Agraph_t *)v; +} + +void wasm_bridge_get_Graph_clos(Agraph_t *recv, Agclos_t ** ret) { + Agclos_t * v = (Agclos_t *)recv->clos; + *ret = v; +} + +void wasm_bridge_set_Graph_clos(Agraph_t *recv, void * v) { + recv->clos = (Agclos_t *)v; +} + +void *wasm_bridge_new_Attr() { + void *ret = malloc(sizeof(Agattr_t)); + memset(ret, 0, sizeof(Agattr_t)); + return ret; +} + +void wasm_bridge_get_Attr_h(Agattr_t *recv, Agrec_t ** ret) { + void *v = malloc(sizeof(recv->h)); + memcpy(v, &recv->h, sizeof(recv->h)); + *ret = v; +} + +void wasm_bridge_set_Attr_h(Agattr_t *recv, void * v) { + recv->h = *(Agrec_t *)v; +} + +void wasm_bridge_get_Attr_dict(Agattr_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->dict; + *ret = v; +} + +void wasm_bridge_set_Attr_dict(Agattr_t *recv, void * v) { + recv->dict = (Dict_t *)v; +} + +void wasm_bridge_get_Attr_str(Agattr_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->str[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->str[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Attr_str(Agattr_t *recv, GoSlice * v) { + recv->str = (char **)malloc(sizeof(char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->str[i], elem, sizeof(char *)); + } +} + +void *wasm_bridge_new_Sym() { + void *ret = malloc(sizeof(Agsym_t)); + memset(ret, 0, sizeof(Agsym_t)); + return ret; +} + +void wasm_bridge_get_Sym_link(Agsym_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->link)); + memcpy(v, &recv->link, sizeof(recv->link)); + *ret = v; +} + +void wasm_bridge_set_Sym_link(Agsym_t *recv, void * v) { + recv->link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_Sym_name(Agsym_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_Sym_name(Agsym_t *recv, void * v) { + recv->name = (char *)v; +} + +void wasm_bridge_get_Sym_defval(Agsym_t *recv, GoString ** ret) { + GoString *v = newString(recv->defval); + *ret = v; +} + +void wasm_bridge_set_Sym_defval(Agsym_t *recv, void * v) { + recv->defval = (char *)v; +} + +void wasm_bridge_get_Sym_id(Agsym_t *recv, long int* ret) { + long int v = (long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_Sym_id(Agsym_t *recv, long int v) { + recv->id = (long int)v; +} + +void wasm_bridge_get_Sym_kind(Agsym_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->kind; + *ret = v; +} + +void wasm_bridge_set_Sym_kind(Agsym_t *recv, unsigned long int v) { + recv->kind = (unsigned long int)v; +} + +void wasm_bridge_get_Sym_fixed(Agsym_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->fixed; + *ret = v; +} + +void wasm_bridge_set_Sym_fixed(Agsym_t *recv, unsigned long int v) { + recv->fixed = (unsigned long int)v; +} + +void wasm_bridge_get_Sym_print(Agsym_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->print; + *ret = v; +} + +void wasm_bridge_set_Sym_print(Agsym_t *recv, unsigned long int v) { + recv->print = (unsigned long int)v; +} + +void *wasm_bridge_new_DataDict() { + void *ret = malloc(sizeof(Agdatadict_t)); + memset(ret, 0, sizeof(Agdatadict_t)); + return ret; +} + +void wasm_bridge_get_DataDict_h(Agdatadict_t *recv, Agrec_t ** ret) { + void *v = malloc(sizeof(recv->h)); + memcpy(v, &recv->h, sizeof(recv->h)); + *ret = v; +} + +void wasm_bridge_set_DataDict_h(Agdatadict_t *recv, void * v) { + recv->h = *(Agrec_t *)v; +} + +void *wasm_bridge_new_DictLink() { + void *ret = malloc(sizeof(Dtlink_t)); + memset(ret, 0, sizeof(Dtlink_t)); + return ret; +} + +void wasm_bridge_get_DictLink_right(Dtlink_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->right; + *ret = v; +} + +void wasm_bridge_set_DictLink_right(Dtlink_t *recv, void * v) { + recv->right = (Dtlink_t *)v; +} + +void wasm_bridge_get_DictLink_hash(Dtlink_t *recv, unsigned long int* ret) { + unsigned long int v = (unsigned long int)recv->hl._hash; + *ret = v; +} + +void wasm_bridge_set_DictLink_hash(Dtlink_t *recv, unsigned long int v) { + recv->hl._hash = (unsigned long int)v; +} + +void wasm_bridge_get_DictLink_left(Dtlink_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->hl._left; + *ret = v; +} + +void wasm_bridge_set_DictLink_left(Dtlink_t *recv, void * v) { + recv->hl._left = (Dtlink_t *)v; +} + +void *wasm_bridge_new_DictHold() { + void *ret = malloc(sizeof(Dthold_t)); + memset(ret, 0, sizeof(Dthold_t)); + return ret; +} + +void wasm_bridge_get_DictHold_hdr(Dthold_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->hdr)); + memcpy(v, &recv->hdr, sizeof(recv->hdr)); + *ret = v; +} + +void wasm_bridge_set_DictHold_hdr(Dthold_t *recv, void * v) { + recv->hdr = *(Dtlink_t *)v; +} + +void wasm_bridge_get_DictHold_obj(Dthold_t *recv, void ** ret) { + void * v = (void *)recv->obj; + *ret = v; +} + +void wasm_bridge_set_DictHold_obj(Dthold_t *recv, void * v) { + recv->obj = (void *)v; +} + +void *wasm_bridge_new_DictMethod() { + void *ret = malloc(sizeof(Dtmethod_t)); + memset(ret, 0, sizeof(Dtmethod_t)); + return ret; +} + +void wasm_bridge_set_DictMethod_searchf(Dtmethod_t *recv) { + recv->searchf = DictSearch; +} + +void wasm_bridge_get_DictMethod_type(Dtmethod_t *recv, long long int* ret) { + long long int v = (long long int)recv->type; + *ret = v; +} + +void wasm_bridge_set_DictMethod_type(Dtmethod_t *recv, long long int v) { + recv->type = (long long int)v; +} + +void *wasm_bridge_new_DictData() { + void *ret = malloc(sizeof(Dtdata_t)); + memset(ret, 0, sizeof(Dtdata_t)); + return ret; +} + +void wasm_bridge_get_DictData_type(Dtdata_t *recv, long long int* ret) { + long long int v = (long long int)recv->type; + *ret = v; +} + +void wasm_bridge_set_DictData_type(Dtdata_t *recv, long long int v) { + recv->type = (long long int)v; +} + +void wasm_bridge_get_DictData_here(Dtdata_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->here; + *ret = v; +} + +void wasm_bridge_set_DictData_here(Dtdata_t *recv, void * v) { + recv->here = (Dtlink_t *)v; +} + +void wasm_bridge_get_DictData_htab(Dtdata_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->hh._htab[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + Dtlink_t * v = (Dtlink_t *)recv->hh._htab[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_DictData_htab(Dtdata_t *recv, GoSlice * v) { + recv->hh._htab = (Dtlink_t **)malloc(sizeof(Dtlink_t *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->hh._htab[i], elem, sizeof(Dtlink_t *)); + } +} + +void wasm_bridge_get_DictData_head(Dtdata_t *recv, Dtlink_t ** ret) { + Dtlink_t * v = (Dtlink_t *)recv->hh._head; + *ret = v; +} + +void wasm_bridge_set_DictData_head(Dtdata_t *recv, void * v) { + recv->hh._head = (Dtlink_t *)v; +} + +void wasm_bridge_get_DictData_ntab(Dtdata_t *recv, long long int* ret) { + long long int v = (long long int)recv->ntab; + *ret = v; +} + +void wasm_bridge_set_DictData_ntab(Dtdata_t *recv, long long int v) { + recv->ntab = (long long int)v; +} + +void wasm_bridge_get_DictData_size(Dtdata_t *recv, long long int* ret) { + long long int v = (long long int)recv->size; + *ret = v; +} + +void wasm_bridge_set_DictData_size(Dtdata_t *recv, long long int v) { + recv->size = (long long int)v; +} + +void wasm_bridge_get_DictData_loop(Dtdata_t *recv, long long int* ret) { + long long int v = (long long int)recv->loop; + *ret = v; +} + +void wasm_bridge_set_DictData_loop(Dtdata_t *recv, long long int v) { + recv->loop = (long long int)v; +} + +void *wasm_bridge_new_DictDisc() { + void *ret = malloc(sizeof(Dtdisc_t)); + memset(ret, 0, sizeof(Dtdisc_t)); + return ret; +} + +void wasm_bridge_get_DictDisc_key(Dtdisc_t *recv, long long int* ret) { + long long int v = (long long int)recv->key; + *ret = v; +} + +void wasm_bridge_set_DictDisc_key(Dtdisc_t *recv, long long int v) { + recv->key = (long long int)v; +} + +void wasm_bridge_get_DictDisc_size(Dtdisc_t *recv, long long int* ret) { + long long int v = (long long int)recv->size; + *ret = v; +} + +void wasm_bridge_set_DictDisc_size(Dtdisc_t *recv, long long int v) { + recv->size = (long long int)v; +} + +void wasm_bridge_get_DictDisc_link(Dtdisc_t *recv, long long int* ret) { + long long int v = (long long int)recv->link; + *ret = v; +} + +void wasm_bridge_set_DictDisc_link(Dtdisc_t *recv, long long int v) { + recv->link = (long long int)v; +} + +void wasm_bridge_set_DictDisc_makef(Dtdisc_t *recv) { + recv->makef = DictMake; +} + +void wasm_bridge_set_DictDisc_freef(Dtdisc_t *recv) { + recv->freef = DictFree; +} + +void wasm_bridge_set_DictDisc_comparf(Dtdisc_t *recv) { + recv->comparf = DictCompare; +} + +void *wasm_bridge_new_Dict() { + void *ret = malloc(sizeof(Dict_t)); + memset(ret, 0, sizeof(Dict_t)); + return ret; +} + +void wasm_bridge_set_Dict_searchf(Dict_t *recv) { + recv->searchf = DictSearch; +} + +void wasm_bridge_get_Dict_disc(Dict_t *recv, Dtdisc_t ** ret) { + Dtdisc_t * v = (Dtdisc_t *)recv->disc; + *ret = v; +} + +void wasm_bridge_set_Dict_disc(Dict_t *recv, void * v) { + recv->disc = (Dtdisc_t *)v; +} + +void wasm_bridge_get_Dict_data(Dict_t *recv, Dtdata_t ** ret) { + Dtdata_t * v = (Dtdata_t *)recv->data; + *ret = v; +} + +void wasm_bridge_set_Dict_data(Dict_t *recv, void * v) { + recv->data = (Dtdata_t *)v; +} + +void wasm_bridge_get_Dict_meth(Dict_t *recv, Dtmethod_t ** ret) { + Dtmethod_t * v = (Dtmethod_t *)recv->meth; + *ret = v; +} + +void wasm_bridge_set_Dict_meth(Dict_t *recv, void * v) { + recv->meth = (Dtmethod_t *)v; +} + +void wasm_bridge_get_Dict_nview(Dict_t *recv, long long int* ret) { + long long int v = (long long int)recv->nview; + *ret = v; +} + +void wasm_bridge_set_Dict_nview(Dict_t *recv, long long int v) { + recv->nview = (long long int)v; +} + +void wasm_bridge_get_Dict_view(Dict_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->view; + *ret = v; +} + +void wasm_bridge_set_Dict_view(Dict_t *recv, void * v) { + recv->view = (Dict_t *)v; +} + +void wasm_bridge_get_Dict_walk(Dict_t *recv, Dict_t ** ret) { + Dict_t * v = (Dict_t *)recv->walk; + *ret = v; +} + +void wasm_bridge_set_Dict_walk(Dict_t *recv, void * v) { + recv->walk = (Dict_t *)v; +} + +void wasm_bridge_get_Dict_user(Dict_t *recv, void ** ret) { + void * v = (void *)recv->user; + *ret = v; +} + +void wasm_bridge_set_Dict_user(Dict_t *recv, void * v) { + recv->user = (void *)v; +} + +void *wasm_bridge_new_DictStat() { + void *ret = malloc(sizeof(Dtstat_t)); + memset(ret, 0, sizeof(Dtstat_t)); + return ret; +} + +void wasm_bridge_get_DictStat_dt_meth(Dtstat_t *recv, long long int* ret) { + long long int v = (long long int)recv->dt_meth; + *ret = v; +} + +void wasm_bridge_set_DictStat_dt_meth(Dtstat_t *recv, long long int v) { + recv->dt_meth = (long long int)v; +} + +void wasm_bridge_get_DictStat_dt_size(Dtstat_t *recv, long long int* ret) { + long long int v = (long long int)recv->dt_size; + *ret = v; +} + +void wasm_bridge_set_DictStat_dt_size(Dtstat_t *recv, long long int v) { + recv->dt_size = (long long int)v; +} + +void wasm_bridge_get_DictStat_dt_n(Dtstat_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->dt_n; + *ret = v; +} + +void wasm_bridge_set_DictStat_dt_n(Dtstat_t *recv, unsigned long long int v) { + recv->dt_n = (unsigned long long int)v; +} + +void wasm_bridge_get_DictStat_dt_max(Dtstat_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->dt_max; + *ret = v; +} + +void wasm_bridge_set_DictStat_dt_max(Dtstat_t *recv, unsigned long long int v) { + recv->dt_max = (unsigned long long int)v; +} + +void wasm_bridge_get_DictStat_dt_count(Dtstat_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + unsigned long int v = (unsigned long int)recv->dt_count[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_DictStat_dt_count(Dtstat_t *recv, GoSlice * v) { + recv->dt_count = (unsigned long int *)malloc(sizeof(unsigned long int) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->dt_count[i], elem, sizeof(unsigned long int)); + } +} + +void *wasm_bridge_new_Context() { + void *ret = malloc(sizeof(GVC_t)); + memset(ret, 0, sizeof(GVC_t)); + return ret; +} + +void wasm_bridge_get_Context_common(GVC_t *recv, GVCOMMON_t ** ret) { + void *v = malloc(sizeof(recv->common)); + memcpy(v, &recv->common, sizeof(recv->common)); + *ret = v; +} + +void wasm_bridge_set_Context_common(GVC_t *recv, void * v) { + recv->common = *(GVCOMMON_t *)v; +} + +void wasm_bridge_get_Context_config_path(GVC_t *recv, GoString ** ret) { + GoString *v = newString(recv->config_path); + *ret = v; +} + +void wasm_bridge_set_Context_config_path(GVC_t *recv, void * v) { + recv->config_path = (char *)v; +} + +void wasm_bridge_get_Context_config_found(GVC_t *recv, bool* ret) { + bool v = (bool)recv->config_found; + *ret = v; +} + +void wasm_bridge_set_Context_config_found(GVC_t *recv, bool v) { + recv->config_found = (bool)v; +} + +void wasm_bridge_get_Context_input_filenames(GVC_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->input_filenames[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->input_filenames[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Context_input_filenames(GVC_t *recv, GoSlice * v) { + recv->input_filenames = (char **)malloc(sizeof(char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->input_filenames[i], elem, sizeof(char *)); + } +} + +void wasm_bridge_get_Context_apis(GVC_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + gvplugin_available_t * v = (gvplugin_available_t *)recv->apis[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Context_apis(GVC_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->apis[i], elem, sizeof(gvplugin_available_t *)); + } +} + +void wasm_bridge_get_Context_api(GVC_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + gvplugin_available_t * v = (gvplugin_available_t *)recv->api[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Context_api(GVC_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->api[i], elem, sizeof(gvplugin_available_t *)); + } +} + +void *wasm_bridge_new_PluginAvailable() { + void *ret = malloc(sizeof(gvplugin_available_t)); + memset(ret, 0, sizeof(gvplugin_available_t)); + return ret; +} + +void wasm_bridge_get_PluginAvailable_next(gvplugin_available_t *recv, gvplugin_available_t ** ret) { + gvplugin_available_t * v = (gvplugin_available_t *)recv->next; + *ret = v; +} + +void wasm_bridge_set_PluginAvailable_next(gvplugin_available_t *recv, void * v) { + recv->next = (gvplugin_available_t *)v; +} + +void wasm_bridge_get_PluginAvailable_typestr(gvplugin_available_t *recv, GoString ** ret) { + GoString *v = newString(recv->typestr); + *ret = v; +} + +void wasm_bridge_set_PluginAvailable_typestr(gvplugin_available_t *recv, void * v) { + recv->typestr = (char *)v; +} + +void wasm_bridge_get_PluginAvailable_quality(gvplugin_available_t *recv, long long int* ret) { + long long int v = (long long int)recv->quality; + *ret = v; +} + +void wasm_bridge_set_PluginAvailable_quality(gvplugin_available_t *recv, long long int v) { + recv->quality = (long long int)v; +} + +void wasm_bridge_get_PluginAvailable_package(gvplugin_available_t *recv, gvplugin_package_t ** ret) { + gvplugin_package_t * v = (gvplugin_package_t *)recv->package; + *ret = v; +} + +void wasm_bridge_set_PluginAvailable_package(gvplugin_available_t *recv, void * v) { + recv->package = (gvplugin_package_t *)v; +} + +void wasm_bridge_get_PluginAvailable_typeptr(gvplugin_available_t *recv, gvplugin_installed_t ** ret) { + gvplugin_installed_t * v = (gvplugin_installed_t *)recv->typeptr; + *ret = v; +} + +void wasm_bridge_set_PluginAvailable_typeptr(gvplugin_available_t *recv, void * v) { + recv->typeptr = (gvplugin_installed_t *)v; +} + +void *wasm_bridge_new_PluginPackage() { + void *ret = malloc(sizeof(gvplugin_package_t)); + memset(ret, 0, sizeof(gvplugin_package_t)); + return ret; +} + +void wasm_bridge_get_PluginPackage_next(gvplugin_package_t *recv, gvplugin_package_t ** ret) { + gvplugin_package_t * v = (gvplugin_package_t *)recv->next; + *ret = v; +} + +void wasm_bridge_set_PluginPackage_next(gvplugin_package_t *recv, void * v) { + recv->next = (gvplugin_package_t *)v; +} + +void wasm_bridge_get_PluginPackage_path(gvplugin_package_t *recv, GoString ** ret) { + GoString *v = newString(recv->path); + *ret = v; +} + +void wasm_bridge_set_PluginPackage_path(gvplugin_package_t *recv, void * v) { + recv->path = (char *)v; +} + +void wasm_bridge_get_PluginPackage_name(gvplugin_package_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_PluginPackage_name(gvplugin_package_t *recv, void * v) { + recv->name = (char *)v; +} + +void *wasm_bridge_new_SymList() { + void *ret = malloc(sizeof(lt_symlist_t)); + memset(ret, 0, sizeof(lt_symlist_t)); + return ret; +} + +void wasm_bridge_get_SymList_name(lt_symlist_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_SymList_name(lt_symlist_t *recv, void * v) { + recv->name = (char *)v; +} + +void wasm_bridge_get_SymList_address(lt_symlist_t *recv, gvplugin_library_t ** ret) { + gvplugin_library_t * v = (gvplugin_library_t *)recv->address; + *ret = v; +} + +void wasm_bridge_set_SymList_address(lt_symlist_t *recv, void * v) { + recv->address = (gvplugin_library_t *)v; +} + +void *wasm_bridge_new_UserShape() { + void *ret = malloc(sizeof(usershape_t)); + memset(ret, 0, sizeof(usershape_t)); + return ret; +} + +void wasm_bridge_get_UserShape_link(usershape_t *recv, Dtlink_t ** ret) { + void *v = malloc(sizeof(recv->link)); + memcpy(v, &recv->link, sizeof(recv->link)); + *ret = v; +} + +void wasm_bridge_set_UserShape_link(usershape_t *recv, void * v) { + recv->link = *(Dtlink_t *)v; +} + +void wasm_bridge_get_UserShape_name(usershape_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_UserShape_name(usershape_t *recv, void * v) { + recv->name = (const char *)v; +} + +void wasm_bridge_get_UserShape_macro_id(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->macro_id; + *ret = v; +} + +void wasm_bridge_set_UserShape_macro_id(usershape_t *recv, long long int v) { + recv->macro_id = (long long int)v; +} + +void wasm_bridge_get_UserShape_must_inline(usershape_t *recv, bool* ret) { + bool v = (bool)recv->must_inline; + *ret = v; +} + +void wasm_bridge_set_UserShape_must_inline(usershape_t *recv, bool v) { + recv->must_inline = (bool)v; +} + +void wasm_bridge_get_UserShape_nocache(usershape_t *recv, bool* ret) { + bool v = (bool)recv->nocache; + *ret = v; +} + +void wasm_bridge_set_UserShape_nocache(usershape_t *recv, bool v) { + recv->nocache = (bool)v; +} + +void wasm_bridge_get_UserShape_f(usershape_t *recv, FILE ** ret) { + FILE * v = (FILE *)recv->f; + *ret = v; +} + +void wasm_bridge_set_UserShape_f(usershape_t *recv, void * v) { + recv->f = (FILE *)v; +} + +void wasm_bridge_get_UserShape_type(usershape_t *recv, int* ret) { + imagetype_t v = (imagetype_t)recv->type; + *ret = v; +} + +void wasm_bridge_set_UserShape_type(usershape_t *recv, int v) { + recv->type = (imagetype_t)v; +} + +void wasm_bridge_get_UserShape_stringtype(usershape_t *recv, GoString ** ret) { + GoString *v = newString(recv->stringtype); + *ret = v; +} + +void wasm_bridge_set_UserShape_stringtype(usershape_t *recv, void * v) { + recv->stringtype = (char *)v; +} + +void wasm_bridge_get_UserShape_x(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->x; + *ret = v; +} + +void wasm_bridge_set_UserShape_x(usershape_t *recv, long long int v) { + recv->x = (long long int)v; +} + +void wasm_bridge_get_UserShape_y(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->y; + *ret = v; +} + +void wasm_bridge_set_UserShape_y(usershape_t *recv, long long int v) { + recv->y = (long long int)v; +} + +void wasm_bridge_get_UserShape_w(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->w; + *ret = v; +} + +void wasm_bridge_set_UserShape_w(usershape_t *recv, long long int v) { + recv->w = (long long int)v; +} + +void wasm_bridge_get_UserShape_h(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->h; + *ret = v; +} + +void wasm_bridge_set_UserShape_h(usershape_t *recv, long long int v) { + recv->h = (long long int)v; +} + +void wasm_bridge_get_UserShape_dpi(usershape_t *recv, long long int* ret) { + long long int v = (long long int)recv->dpi; + *ret = v; +} + +void wasm_bridge_set_UserShape_dpi(usershape_t *recv, long long int v) { + recv->dpi = (long long int)v; +} + +void wasm_bridge_get_UserShape_data(usershape_t *recv, void ** ret) { + void * v = (void *)recv->data; + *ret = v; +} + +void wasm_bridge_set_UserShape_data(usershape_t *recv, void * v) { + recv->data = (void *)v; +} + +void wasm_bridge_get_UserShape_datasize(usershape_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->datasize; + *ret = v; +} + +void wasm_bridge_set_UserShape_datasize(usershape_t *recv, unsigned long long int v) { + recv->datasize = (unsigned long long int)v; +} + +void wasm_bridge_set_UserShape_datafree(usershape_t *recv) { + recv->datafree = UserShape_DataFree; +} + +void *wasm_bridge_new_PluginActiveLoadImage() { + void *ret = malloc(sizeof(gvplugin_active_loadimage_t)); + memset(ret, 0, sizeof(gvplugin_active_loadimage_t)); + return ret; +} + +void wasm_bridge_get_PluginActiveLoadImage_engine(gvplugin_active_loadimage_t *recv, gvloadimage_engine_t ** ret) { + gvloadimage_engine_t * v = (gvloadimage_engine_t *)recv->engine; + *ret = v; +} + +void wasm_bridge_set_PluginActiveLoadImage_engine(gvplugin_active_loadimage_t *recv, void * v) { + recv->engine = (gvloadimage_engine_t *)v; +} + +void wasm_bridge_get_PluginActiveLoadImage_id(gvplugin_active_loadimage_t *recv, long long int* ret) { + long long int v = (long long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_PluginActiveLoadImage_id(gvplugin_active_loadimage_t *recv, long long int v) { + recv->id = (long long int)v; +} + +void wasm_bridge_get_PluginActiveLoadImage_type(gvplugin_active_loadimage_t *recv, GoString ** ret) { + GoString *v = newString(recv->type); + *ret = v; +} + +void wasm_bridge_set_PluginActiveLoadImage_type(gvplugin_active_loadimage_t *recv, void * v) { + recv->type = (const char *)v; +} + +void *wasm_bridge_new_Common() { + void *ret = malloc(sizeof(GVCOMMON_t)); + memset(ret, 0, sizeof(GVCOMMON_t)); + return ret; +} + +void wasm_bridge_get_Common_info(GVCOMMON_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->info[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->info[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Common_info(GVCOMMON_t *recv, GoSlice * v) { + recv->info = (char **)malloc(sizeof(char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->info[i], elem, sizeof(char *)); + } +} + +void wasm_bridge_get_Common_cmdname(GVCOMMON_t *recv, GoString ** ret) { + GoString *v = newString(recv->cmdname); + *ret = v; +} + +void wasm_bridge_set_Common_cmdname(GVCOMMON_t *recv, void * v) { + recv->cmdname = (char *)v; +} + +void wasm_bridge_get_Common_verbose(GVCOMMON_t *recv, long long int* ret) { + long long int v = (long long int)recv->verbose; + *ret = v; +} + +void wasm_bridge_set_Common_verbose(GVCOMMON_t *recv, long long int v) { + recv->verbose = (long long int)v; +} + +void wasm_bridge_get_Common_config(GVCOMMON_t *recv, bool* ret) { + bool v = (bool)recv->config; + *ret = v; +} + +void wasm_bridge_set_Common_config(GVCOMMON_t *recv, bool v) { + recv->config = (bool)v; +} + +void wasm_bridge_get_Common_auto_outfile_names(GVCOMMON_t *recv, bool* ret) { + bool v = (bool)recv->auto_outfile_names; + *ret = v; +} + +void wasm_bridge_set_Common_auto_outfile_names(GVCOMMON_t *recv, bool v) { + recv->auto_outfile_names = (bool)v; +} + +void wasm_bridge_get_Common_show_boxes(GVCOMMON_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->show_boxes[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->show_boxes[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Common_show_boxes(GVCOMMON_t *recv, GoSlice * v) { + recv->show_boxes = (const char **)malloc(sizeof(const char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->show_boxes[i], elem, sizeof(const char *)); + } +} + +void wasm_bridge_get_Common_lib(GVCOMMON_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->lib[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->lib[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Common_lib(GVCOMMON_t *recv, GoSlice * v) { + recv->lib = (const char **)malloc(sizeof(const char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->lib[i], elem, sizeof(const char *)); + } +} + +void wasm_bridge_get_Common_view_num(GVCOMMON_t *recv, long long int* ret) { + long long int v = (long long int)recv->viewNum; + *ret = v; +} + +void wasm_bridge_set_Common_view_num(GVCOMMON_t *recv, long long int v) { + recv->viewNum = (long long int)v; +} + +void wasm_bridge_get_Common_builtins(GVCOMMON_t *recv, lt_symlist_t ** ret) { + lt_symlist_t * v = (lt_symlist_t *)recv->builtins; + *ret = v; +} + +void wasm_bridge_set_Common_builtins(GVCOMMON_t *recv, void * v) { + recv->builtins = (lt_symlist_t *)v; +} + +void wasm_bridge_get_Common_demand_loading(GVCOMMON_t *recv, long long int* ret) { + long long int v = (long long int)recv->demand_loading; + *ret = v; +} + +void wasm_bridge_set_Common_demand_loading(GVCOMMON_t *recv, long long int v) { + recv->demand_loading = (long long int)v; +} + +void *wasm_bridge_new_ObjectState() { + void *ret = malloc(sizeof(obj_state_t)); + memset(ret, 0, sizeof(obj_state_t)); + return ret; +} + +void wasm_bridge_get_ObjectState_parent(obj_state_t *recv, obj_state_t ** ret) { + obj_state_t * v = (obj_state_t *)recv->parent; + *ret = v; +} + +void wasm_bridge_set_ObjectState_parent(obj_state_t *recv, void * v) { + recv->parent = (obj_state_t *)v; +} + +void wasm_bridge_get_ObjectState_type(obj_state_t *recv, int* ret) { + obj_type v = (obj_type)recv->type; + *ret = v; +} + +void wasm_bridge_set_ObjectState_type(obj_state_t *recv, int v) { + recv->type = (obj_type)v; +} + +void wasm_bridge_get_ObjectState_g(obj_state_t *recv, Agraph_t ** ret) { + Agraph_t * v = (Agraph_t *)recv->u.g; + *ret = v; +} + +void wasm_bridge_set_ObjectState_g(obj_state_t *recv, void * v) { + recv->u.g = (Agraph_t *)v; +} + +void wasm_bridge_get_ObjectState_sg(obj_state_t *recv, Agraph_t ** ret) { + Agraph_t * v = (Agraph_t *)recv->u.sg; + *ret = v; +} + +void wasm_bridge_set_ObjectState_sg(obj_state_t *recv, void * v) { + recv->u.sg = (Agraph_t *)v; +} + +void wasm_bridge_get_ObjectState_n(obj_state_t *recv, Agnode_t ** ret) { + Agnode_t * v = (Agnode_t *)recv->u.n; + *ret = v; +} + +void wasm_bridge_set_ObjectState_n(obj_state_t *recv, void * v) { + recv->u.n = (Agnode_t *)v; +} + +void wasm_bridge_get_ObjectState_e(obj_state_t *recv, Agedge_t ** ret) { + Agedge_t * v = (Agedge_t *)recv->u.e; + *ret = v; +} + +void wasm_bridge_set_ObjectState_e(obj_state_t *recv, void * v) { + recv->u.e = (Agedge_t *)v; +} + +void wasm_bridge_get_ObjectState_emit_state(obj_state_t *recv, int* ret) { + emit_state_t v = (emit_state_t)recv->emit_state; + *ret = v; +} + +void wasm_bridge_set_ObjectState_emit_state(obj_state_t *recv, int v) { + recv->emit_state = (emit_state_t)v; +} + +void wasm_bridge_get_ObjectState_pencolor(obj_state_t *recv, gvcolor_t ** ret) { + void *v = malloc(sizeof(recv->pencolor)); + memcpy(v, &recv->pencolor, sizeof(recv->pencolor)); + *ret = v; +} + +void wasm_bridge_set_ObjectState_pencolor(obj_state_t *recv, void * v) { + recv->pencolor = *(gvcolor_t *)v; +} + +void wasm_bridge_get_ObjectState_fillcolor(obj_state_t *recv, gvcolor_t ** ret) { + void *v = malloc(sizeof(recv->fillcolor)); + memcpy(v, &recv->fillcolor, sizeof(recv->fillcolor)); + *ret = v; +} + +void wasm_bridge_set_ObjectState_fillcolor(obj_state_t *recv, void * v) { + recv->fillcolor = *(gvcolor_t *)v; +} + +void wasm_bridge_get_ObjectState_stopcolor(obj_state_t *recv, gvcolor_t ** ret) { + void *v = malloc(sizeof(recv->stopcolor)); + memcpy(v, &recv->stopcolor, sizeof(recv->stopcolor)); + *ret = v; +} + +void wasm_bridge_set_ObjectState_stopcolor(obj_state_t *recv, void * v) { + recv->stopcolor = *(gvcolor_t *)v; +} + +void wasm_bridge_get_ObjectState_gradient_angle(obj_state_t *recv, long long int* ret) { + long long int v = (long long int)recv->gradient_angle; + *ret = v; +} + +void wasm_bridge_set_ObjectState_gradient_angle(obj_state_t *recv, long long int v) { + recv->gradient_angle = (long long int)v; +} + +void wasm_bridge_get_ObjectState_gradient_frac(obj_state_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->gradient_frac); + *ret = v; +} + +void wasm_bridge_set_ObjectState_gradient_frac(obj_state_t *recv, float v) { + recv->gradient_frac = (float)v; +} + +void wasm_bridge_get_ObjectState_pen(obj_state_t *recv, int* ret) { + pen_type v = (pen_type)recv->pen; + *ret = v; +} + +void wasm_bridge_set_ObjectState_pen(obj_state_t *recv, int v) { + recv->pen = (pen_type)v; +} + +void wasm_bridge_get_ObjectState_fill(obj_state_t *recv, int* ret) { + fill_type v = (fill_type)recv->fill; + *ret = v; +} + +void wasm_bridge_set_ObjectState_fill(obj_state_t *recv, int v) { + recv->fill = (fill_type)v; +} + +void wasm_bridge_get_ObjectState_penwidth(obj_state_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->penwidth); + *ret = v; +} + +void wasm_bridge_set_ObjectState_penwidth(obj_state_t *recv, double v) { + recv->penwidth = (double)v; +} + +void wasm_bridge_get_ObjectState_rawstyle(obj_state_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->rawstyle[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->rawstyle[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_ObjectState_rawstyle(obj_state_t *recv, GoSlice * v) { + recv->rawstyle = (char **)malloc(sizeof(char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->rawstyle[i], elem, sizeof(char *)); + } +} + +void wasm_bridge_get_ObjectState_z(obj_state_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->z); + *ret = v; +} + +void wasm_bridge_set_ObjectState_z(obj_state_t *recv, double v) { + recv->z = (double)v; +} + +void wasm_bridge_get_ObjectState_tail_z(obj_state_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->tail_z); + *ret = v; +} + +void wasm_bridge_set_ObjectState_tail_z(obj_state_t *recv, double v) { + recv->tail_z = (double)v; +} + +void wasm_bridge_get_ObjectState_head_z(obj_state_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->head_z); + *ret = v; +} + +void wasm_bridge_set_ObjectState_head_z(obj_state_t *recv, double v) { + recv->head_z = (double)v; +} + +void wasm_bridge_get_ObjectState_label(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->label); + *ret = v; +} + +void wasm_bridge_set_ObjectState_label(obj_state_t *recv, void * v) { + recv->label = (char *)v; +} + +void wasm_bridge_get_ObjectState_xlabel(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->xlabel); + *ret = v; +} + +void wasm_bridge_set_ObjectState_xlabel(obj_state_t *recv, void * v) { + recv->xlabel = (char *)v; +} + +void wasm_bridge_get_ObjectState_taillabel(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->taillabel); + *ret = v; +} + +void wasm_bridge_set_ObjectState_taillabel(obj_state_t *recv, void * v) { + recv->taillabel = (char *)v; +} + +void wasm_bridge_get_ObjectState_headlabel(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->headlabel); + *ret = v; +} + +void wasm_bridge_set_ObjectState_headlabel(obj_state_t *recv, void * v) { + recv->headlabel = (char *)v; +} + +void wasm_bridge_get_ObjectState_url(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->url); + *ret = v; +} + +void wasm_bridge_set_ObjectState_url(obj_state_t *recv, void * v) { + recv->url = (char *)v; +} + +void wasm_bridge_get_ObjectState_id(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->id); + *ret = v; +} + +void wasm_bridge_set_ObjectState_id(obj_state_t *recv, void * v) { + recv->id = (char *)v; +} + +void wasm_bridge_get_ObjectState_labelurl(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->labelurl); + *ret = v; +} + +void wasm_bridge_set_ObjectState_labelurl(obj_state_t *recv, void * v) { + recv->labelurl = (char *)v; +} + +void wasm_bridge_get_ObjectState_tailurl(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->tailurl); + *ret = v; +} + +void wasm_bridge_set_ObjectState_tailurl(obj_state_t *recv, void * v) { + recv->tailurl = (char *)v; +} + +void wasm_bridge_get_ObjectState_headurl(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->headurl); + *ret = v; +} + +void wasm_bridge_set_ObjectState_headurl(obj_state_t *recv, void * v) { + recv->headurl = (char *)v; +} + +void wasm_bridge_get_ObjectState_tooltip(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->tooltip); + *ret = v; +} + +void wasm_bridge_set_ObjectState_tooltip(obj_state_t *recv, void * v) { + recv->tooltip = (char *)v; +} + +void wasm_bridge_get_ObjectState_labeltooltip(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->labeltooltip); + *ret = v; +} + +void wasm_bridge_set_ObjectState_labeltooltip(obj_state_t *recv, void * v) { + recv->labeltooltip = (char *)v; +} + +void wasm_bridge_get_ObjectState_tailtooltip(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->tailtooltip); + *ret = v; +} + +void wasm_bridge_set_ObjectState_tailtooltip(obj_state_t *recv, void * v) { + recv->tailtooltip = (char *)v; +} + +void wasm_bridge_get_ObjectState_headtooltip(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->headtooltip); + *ret = v; +} + +void wasm_bridge_set_ObjectState_headtooltip(obj_state_t *recv, void * v) { + recv->headtooltip = (char *)v; +} + +void wasm_bridge_get_ObjectState_target(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->target); + *ret = v; +} + +void wasm_bridge_set_ObjectState_target(obj_state_t *recv, void * v) { + recv->target = (char *)v; +} + +void wasm_bridge_get_ObjectState_labeltarget(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->labeltarget); + *ret = v; +} + +void wasm_bridge_set_ObjectState_labeltarget(obj_state_t *recv, void * v) { + recv->labeltarget = (char *)v; +} + +void wasm_bridge_get_ObjectState_tailtarget(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->tailtarget); + *ret = v; +} + +void wasm_bridge_set_ObjectState_tailtarget(obj_state_t *recv, void * v) { + recv->tailtarget = (char *)v; +} + +void wasm_bridge_get_ObjectState_headtarget(obj_state_t *recv, GoString ** ret) { + GoString *v = newString(recv->headtarget); + *ret = v; +} + +void wasm_bridge_set_ObjectState_headtarget(obj_state_t *recv, void * v) { + recv->headtarget = (char *)v; +} + +void wasm_bridge_get_ObjectState_explicit_tooltip(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_tooltip; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_tooltip(obj_state_t *recv, unsigned long long int v) { + recv->explicit_tooltip = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_tailtooltip(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_tailtooltip; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_tailtooltip(obj_state_t *recv, unsigned long long int v) { + recv->explicit_tailtooltip = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_headtooltip(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_headtooltip; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_headtooltip(obj_state_t *recv, unsigned long long int v) { + recv->explicit_headtooltip = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_labeltooltip(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_labeltooltip; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_labeltooltip(obj_state_t *recv, unsigned long long int v) { + recv->explicit_labeltooltip = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_tailtarget(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_tailtarget; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_tailtarget(obj_state_t *recv, unsigned long long int v) { + recv->explicit_tailtarget = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_headtarget(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_headtarget; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_headtarget(obj_state_t *recv, unsigned long long int v) { + recv->explicit_headtarget = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_edgetarget(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_edgetarget; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_edgetarget(obj_state_t *recv, unsigned long long int v) { + recv->explicit_edgetarget = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_tailurl(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_tailurl; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_tailurl(obj_state_t *recv, unsigned long long int v) { + recv->explicit_tailurl = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_explicit_headurl(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->explicit_headurl; + *ret = v; +} + +void wasm_bridge_set_ObjectState_explicit_headurl(obj_state_t *recv, unsigned long long int v) { + recv->explicit_headurl = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_labeledgealigned(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->labeledgealigned; + *ret = v; +} + +void wasm_bridge_set_ObjectState_labeledgealigned(obj_state_t *recv, unsigned long long int v) { + recv->labeledgealigned = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_url_map_shape(obj_state_t *recv, int* ret) { + map_shape_t v = (map_shape_t)recv->url_map_shape; + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_map_shape(obj_state_t *recv, int v) { + recv->url_map_shape = (map_shape_t)v; +} + +void wasm_bridge_get_ObjectState_url_map_n(obj_state_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->url_map_n; + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_map_n(obj_state_t *recv, unsigned long long int v) { + recv->url_map_n = (unsigned long long int)v; +} + +void wasm_bridge_get_ObjectState_url_map_p(obj_state_t *recv, pointf ** ret) { + pointf * v = (pointf *)recv->url_map_p; + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_map_p(obj_state_t *recv, void * v) { + recv->url_map_p = (pointf *)v; +} + +void wasm_bridge_get_ObjectState_url_bsplinemap_poly_n(obj_state_t *recv, long long int* ret) { + long long int v = (long long int)recv->url_bsplinemap_poly_n; + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_bsplinemap_poly_n(obj_state_t *recv, long long int v) { + recv->url_bsplinemap_poly_n = (long long int)v; +} + +void wasm_bridge_get_ObjectState_url_bsplinemap_n(obj_state_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + int v = (int)recv->url_bsplinemap_n[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_bsplinemap_n(obj_state_t *recv, GoSlice * v) { + recv->url_bsplinemap_n = (int *)malloc(sizeof(int) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->url_bsplinemap_n[i], elem, sizeof(int)); + } +} + +void wasm_bridge_get_ObjectState_url_bsplinemap_p(obj_state_t *recv, pointf ** ret) { + pointf * v = (pointf *)recv->url_bsplinemap_p; + *ret = v; +} + +void wasm_bridge_set_ObjectState_url_bsplinemap_p(obj_state_t *recv, void * v) { + recv->url_bsplinemap_p = (pointf *)v; +} + +void wasm_bridge_get_ObjectState_tailendurl_map_n(obj_state_t *recv, long long int* ret) { + long long int v = (long long int)recv->tailendurl_map_n; + *ret = v; +} + +void wasm_bridge_set_ObjectState_tailendurl_map_n(obj_state_t *recv, long long int v) { + recv->tailendurl_map_n = (long long int)v; +} + +void wasm_bridge_get_ObjectState_tailendurl_map_p(obj_state_t *recv, pointf ** ret) { + pointf * v = (pointf *)recv->tailendurl_map_p; + *ret = v; +} + +void wasm_bridge_set_ObjectState_tailendurl_map_p(obj_state_t *recv, void * v) { + recv->tailendurl_map_p = (pointf *)v; +} + +void wasm_bridge_get_ObjectState_headendurl_map_n(obj_state_t *recv, long long int* ret) { + long long int v = (long long int)recv->headendurl_map_n; + *ret = v; +} + +void wasm_bridge_set_ObjectState_headendurl_map_n(obj_state_t *recv, long long int v) { + recv->headendurl_map_n = (long long int)v; +} + +void wasm_bridge_get_ObjectState_headendurl_map_p(obj_state_t *recv, pointf ** ret) { + pointf * v = (pointf *)recv->headendurl_map_p; + *ret = v; +} + +void wasm_bridge_set_ObjectState_headendurl_map_p(obj_state_t *recv, void * v) { + recv->headendurl_map_p = (pointf *)v; +} + +void *wasm_bridge_new_DeviceCallbacks() { + void *ret = malloc(sizeof(gvdevice_callbacks_t)); + memset(ret, 0, sizeof(gvdevice_callbacks_t)); + return ret; +} + +void wasm_bridge_set_DeviceCallbacks_refresh(gvdevice_callbacks_t *recv) { + recv->refresh = DeviceCallbacks_Refresh; +} + +void wasm_bridge_set_DeviceCallbacks_button_press(gvdevice_callbacks_t *recv) { + recv->button_press = DeviceCallbacks_ButtonPress; +} + +void wasm_bridge_set_DeviceCallbacks_button_release(gvdevice_callbacks_t *recv) { + recv->button_release = DeviceCallbacks_ButtonRelease; +} + +void wasm_bridge_set_DeviceCallbacks_motion(gvdevice_callbacks_t *recv) { + recv->motion = DeviceCallbacks_Motion; +} + +void wasm_bridge_set_DeviceCallbacks_modify(gvdevice_callbacks_t *recv) { + recv->modify = DeviceCallbacks_Modify; +} + +void wasm_bridge_set_DeviceCallbacks_del(gvdevice_callbacks_t *recv) { + recv->del = DeviceCallbacks_Delete; +} + +void wasm_bridge_set_DeviceCallbacks_read(gvdevice_callbacks_t *recv) { + recv->read = DeviceCallbacks_Read; +} + +void wasm_bridge_set_DeviceCallbacks_layout(gvdevice_callbacks_t *recv) { + recv->layout = DeviceCallbacks_Layout; +} + +void wasm_bridge_set_DeviceCallbacks_render(gvdevice_callbacks_t *recv) { + recv->render = DeviceCallbacks_Render; +} + +void *wasm_bridge_new_Job() { + void *ret = malloc(sizeof(GVJ_t)); + memset(ret, 0, sizeof(GVJ_t)); + return ret; +} + +void wasm_bridge_get_Job_gvc(GVJ_t *recv, GVC_t ** ret) { + GVC_t * v = (GVC_t *)recv->gvc; + *ret = v; +} + +void wasm_bridge_set_Job_gvc(GVJ_t *recv, void * v) { + recv->gvc = (GVC_t *)v; +} + +void wasm_bridge_get_Job_next(GVJ_t *recv, GVJ_t ** ret) { + GVJ_t * v = (GVJ_t *)recv->next; + *ret = v; +} + +void wasm_bridge_set_Job_next(GVJ_t *recv, void * v) { + recv->next = (GVJ_t *)v; +} + +void wasm_bridge_get_Job_next_active(GVJ_t *recv, GVJ_t ** ret) { + GVJ_t * v = (GVJ_t *)recv->next_active; + *ret = v; +} + +void wasm_bridge_set_Job_next_active(GVJ_t *recv, void * v) { + recv->next_active = (GVJ_t *)v; +} + +void wasm_bridge_get_Job_common(GVJ_t *recv, GVCOMMON_t ** ret) { + GVCOMMON_t * v = (GVCOMMON_t *)recv->common; + *ret = v; +} + +void wasm_bridge_set_Job_common(GVJ_t *recv, void * v) { + recv->common = (GVCOMMON_t *)v; +} + +void wasm_bridge_get_Job_obj(GVJ_t *recv, obj_state_t ** ret) { + obj_state_t * v = (obj_state_t *)recv->obj; + *ret = v; +} + +void wasm_bridge_set_Job_obj(GVJ_t *recv, void * v) { + recv->obj = (obj_state_t *)v; +} + +void wasm_bridge_get_Job_input_filename(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->input_filename); + *ret = v; +} + +void wasm_bridge_set_Job_input_filename(GVJ_t *recv, void * v) { + recv->input_filename = (char *)v; +} + +void wasm_bridge_get_Job_graph_index(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->graph_index; + *ret = v; +} + +void wasm_bridge_set_Job_graph_index(GVJ_t *recv, long long int v) { + recv->graph_index = (long long int)v; +} + +void wasm_bridge_get_Job_layout_type(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->layout_type); + *ret = v; +} + +void wasm_bridge_set_Job_layout_type(GVJ_t *recv, void * v) { + recv->layout_type = (const char *)v; +} + +void wasm_bridge_get_Job_output_filename(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->output_filename); + *ret = v; +} + +void wasm_bridge_set_Job_output_filename(GVJ_t *recv, void * v) { + recv->output_filename = (const char *)v; +} + +void wasm_bridge_get_Job_output_file(GVJ_t *recv, FILE ** ret) { + FILE * v = (FILE *)recv->output_file; + *ret = v; +} + +void wasm_bridge_set_Job_output_file(GVJ_t *recv, void * v) { + recv->output_file = (FILE *)v; +} + +void wasm_bridge_get_Job_output_data(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->output_data); + *ret = v; +} + +void wasm_bridge_set_Job_output_data(GVJ_t *recv, void * v) { + recv->output_data = (char *)v; +} + +void wasm_bridge_get_Job_output_data_allocated(GVJ_t *recv, unsigned int* ret) { + unsigned int v = (unsigned int)recv->output_data_allocated; + *ret = v; +} + +void wasm_bridge_set_Job_output_data_allocated(GVJ_t *recv, unsigned int v) { + recv->output_data_allocated = (unsigned int)v; +} + +void wasm_bridge_get_Job_output_data_position(GVJ_t *recv, unsigned int* ret) { + unsigned int v = (unsigned int)recv->output_data_position; + *ret = v; +} + +void wasm_bridge_set_Job_output_data_position(GVJ_t *recv, unsigned int v) { + recv->output_data_position = (unsigned int)v; +} + +void wasm_bridge_get_Job_output_langname(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->output_langname); + *ret = v; +} + +void wasm_bridge_set_Job_output_langname(GVJ_t *recv, void * v) { + recv->output_langname = (const char *)v; +} + +void wasm_bridge_get_Job_output_lang(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->output_lang; + *ret = v; +} + +void wasm_bridge_set_Job_output_lang(GVJ_t *recv, long long int v) { + recv->output_lang = (long long int)v; +} + +void wasm_bridge_get_Job_render(GVJ_t *recv, gvplugin_active_render_t ** ret) { + void *v = malloc(sizeof(recv->render)); + memcpy(v, &recv->render, sizeof(recv->render)); + *ret = v; +} + +void wasm_bridge_set_Job_render(GVJ_t *recv, void * v) { + recv->render = *(gvplugin_active_render_t *)v; +} + +void wasm_bridge_get_Job_device(GVJ_t *recv, gvplugin_active_device_t ** ret) { + void *v = malloc(sizeof(recv->device)); + memcpy(v, &recv->device, sizeof(recv->device)); + *ret = v; +} + +void wasm_bridge_set_Job_device(GVJ_t *recv, void * v) { + recv->device = *(gvplugin_active_device_t *)v; +} + +void wasm_bridge_get_Job_loadimage(GVJ_t *recv, gvplugin_active_loadimage_t ** ret) { + void *v = malloc(sizeof(recv->loadimage)); + memcpy(v, &recv->loadimage, sizeof(recv->loadimage)); + *ret = v; +} + +void wasm_bridge_set_Job_loadimage(GVJ_t *recv, void * v) { + recv->loadimage = *(gvplugin_active_loadimage_t *)v; +} + +void wasm_bridge_get_Job_callbacks(GVJ_t *recv, gvdevice_callbacks_t ** ret) { + gvdevice_callbacks_t * v = (gvdevice_callbacks_t *)recv->callbacks; + *ret = v; +} + +void wasm_bridge_set_Job_callbacks(GVJ_t *recv, void * v) { + recv->callbacks = (gvdevice_callbacks_t *)v; +} + +void wasm_bridge_get_Job_device_dpi(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->device_dpi)); + memcpy(v, &recv->device_dpi, sizeof(recv->device_dpi)); + *ret = v; +} + +void wasm_bridge_set_Job_device_dpi(GVJ_t *recv, void * v) { + recv->device_dpi = *(pointf *)v; +} + +void wasm_bridge_get_Job_device_sets_dpi(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->device_sets_dpi; + *ret = v; +} + +void wasm_bridge_set_Job_device_sets_dpi(GVJ_t *recv, bool v) { + recv->device_sets_dpi = (bool)v; +} + +void wasm_bridge_get_Job_display(GVJ_t *recv, void ** ret) { + void * v = (void *)recv->display; + *ret = v; +} + +void wasm_bridge_set_Job_display(GVJ_t *recv, void * v) { + recv->display = (void *)v; +} + +void wasm_bridge_get_Job_screen(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->screen; + *ret = v; +} + +void wasm_bridge_set_Job_screen(GVJ_t *recv, long long int v) { + recv->screen = (long long int)v; +} + +void wasm_bridge_get_Job_context(GVJ_t *recv, void ** ret) { + void * v = (void *)recv->context; + *ret = v; +} + +void wasm_bridge_set_Job_context(GVJ_t *recv, void * v) { + recv->context = (void *)v; +} + +void wasm_bridge_get_Job_external_context(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->external_context; + *ret = v; +} + +void wasm_bridge_set_Job_external_context(GVJ_t *recv, bool v) { + recv->external_context = (bool)v; +} + +void wasm_bridge_get_Job_imagedata(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->imagedata); + *ret = v; +} + +void wasm_bridge_set_Job_imagedata(GVJ_t *recv, void * v) { + recv->imagedata = (char *)v; +} + +void wasm_bridge_get_Job_flags(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->flags; + *ret = v; +} + +void wasm_bridge_set_Job_flags(GVJ_t *recv, long long int v) { + recv->flags = (long long int)v; +} + +void wasm_bridge_get_Job_num_layers(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->numLayers; + *ret = v; +} + +void wasm_bridge_set_Job_num_layers(GVJ_t *recv, long long int v) { + recv->numLayers = (long long int)v; +} + +void wasm_bridge_get_Job_layer_num(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->layerNum; + *ret = v; +} + +void wasm_bridge_set_Job_layer_num(GVJ_t *recv, long long int v) { + recv->layerNum = (long long int)v; +} + +void wasm_bridge_get_Job_pages_array_size(GVJ_t *recv, point ** ret) { + void *v = malloc(sizeof(recv->pagesArraySize)); + memcpy(v, &recv->pagesArraySize, sizeof(recv->pagesArraySize)); + *ret = v; +} + +void wasm_bridge_set_Job_pages_array_size(GVJ_t *recv, void * v) { + recv->pagesArraySize = *(point *)v; +} + +void wasm_bridge_get_Job_pages_array_first(GVJ_t *recv, point ** ret) { + void *v = malloc(sizeof(recv->pagesArrayFirst)); + memcpy(v, &recv->pagesArrayFirst, sizeof(recv->pagesArrayFirst)); + *ret = v; +} + +void wasm_bridge_set_Job_pages_array_first(GVJ_t *recv, void * v) { + recv->pagesArrayFirst = *(point *)v; +} + +void wasm_bridge_get_Job_pages_array_major(GVJ_t *recv, point ** ret) { + void *v = malloc(sizeof(recv->pagesArrayMajor)); + memcpy(v, &recv->pagesArrayMajor, sizeof(recv->pagesArrayMajor)); + *ret = v; +} + +void wasm_bridge_set_Job_pages_array_major(GVJ_t *recv, void * v) { + recv->pagesArrayMajor = *(point *)v; +} + +void wasm_bridge_get_Job_pages_array_minor(GVJ_t *recv, point ** ret) { + void *v = malloc(sizeof(recv->pagesArrayMinor)); + memcpy(v, &recv->pagesArrayMinor, sizeof(recv->pagesArrayMinor)); + *ret = v; +} + +void wasm_bridge_set_Job_pages_array_minor(GVJ_t *recv, void * v) { + recv->pagesArrayMinor = *(point *)v; +} + +void wasm_bridge_get_Job_pages_array_elem(GVJ_t *recv, point ** ret) { + void *v = malloc(sizeof(recv->pagesArrayElem)); + memcpy(v, &recv->pagesArrayElem, sizeof(recv->pagesArrayElem)); + *ret = v; +} + +void wasm_bridge_set_Job_pages_array_elem(GVJ_t *recv, void * v) { + recv->pagesArrayElem = *(point *)v; +} + +void wasm_bridge_get_Job_num_pages(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->numPages; + *ret = v; +} + +void wasm_bridge_set_Job_num_pages(GVJ_t *recv, long long int v) { + recv->numPages = (long long int)v; +} + +void wasm_bridge_get_Job_bb(GVJ_t *recv, boxf ** ret) { + void *v = malloc(sizeof(recv->bb)); + memcpy(v, &recv->bb, sizeof(recv->bb)); + *ret = v; +} + +void wasm_bridge_set_Job_bb(GVJ_t *recv, void * v) { + recv->bb = *(boxf *)v; +} + +void wasm_bridge_get_Job_pad(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->pad)); + memcpy(v, &recv->pad, sizeof(recv->pad)); + *ret = v; +} + +void wasm_bridge_set_Job_pad(GVJ_t *recv, void * v) { + recv->pad = *(pointf *)v; +} + +void wasm_bridge_get_Job_clip(GVJ_t *recv, boxf ** ret) { + void *v = malloc(sizeof(recv->clip)); + memcpy(v, &recv->clip, sizeof(recv->clip)); + *ret = v; +} + +void wasm_bridge_set_Job_clip(GVJ_t *recv, void * v) { + recv->clip = *(boxf *)v; +} + +void wasm_bridge_get_Job_page_box(GVJ_t *recv, boxf ** ret) { + void *v = malloc(sizeof(recv->pageBox)); + memcpy(v, &recv->pageBox, sizeof(recv->pageBox)); + *ret = v; +} + +void wasm_bridge_set_Job_page_box(GVJ_t *recv, void * v) { + recv->pageBox = *(boxf *)v; +} + +void wasm_bridge_get_Job_page_size(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->pageSize)); + memcpy(v, &recv->pageSize, sizeof(recv->pageSize)); + *ret = v; +} + +void wasm_bridge_set_Job_page_size(GVJ_t *recv, void * v) { + recv->pageSize = *(pointf *)v; +} + +void wasm_bridge_get_Job_focus(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->focus)); + memcpy(v, &recv->focus, sizeof(recv->focus)); + *ret = v; +} + +void wasm_bridge_set_Job_focus(GVJ_t *recv, void * v) { + recv->focus = *(pointf *)v; +} + +void wasm_bridge_get_Job_zoom(GVJ_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->zoom); + *ret = v; +} + +void wasm_bridge_set_Job_zoom(GVJ_t *recv, double v) { + recv->zoom = (double)v; +} + +void wasm_bridge_get_Job_rotation(GVJ_t *recv, long long int* ret) { + long long int v = (long long int)recv->rotation; + *ret = v; +} + +void wasm_bridge_set_Job_rotation(GVJ_t *recv, long long int v) { + recv->rotation = (long long int)v; +} + +void wasm_bridge_get_Job_view(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->view)); + memcpy(v, &recv->view, sizeof(recv->view)); + *ret = v; +} + +void wasm_bridge_set_Job_view(GVJ_t *recv, void * v) { + recv->view = *(pointf *)v; +} + +void wasm_bridge_get_Job_canvas_box(GVJ_t *recv, boxf ** ret) { + void *v = malloc(sizeof(recv->canvasBox)); + memcpy(v, &recv->canvasBox, sizeof(recv->canvasBox)); + *ret = v; +} + +void wasm_bridge_set_Job_canvas_box(GVJ_t *recv, void * v) { + recv->canvasBox = *(boxf *)v; +} + +void wasm_bridge_get_Job_margin(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->margin)); + memcpy(v, &recv->margin, sizeof(recv->margin)); + *ret = v; +} + +void wasm_bridge_set_Job_margin(GVJ_t *recv, void * v) { + recv->margin = *(pointf *)v; +} + +void wasm_bridge_get_Job_dpi(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->dpi)); + memcpy(v, &recv->dpi, sizeof(recv->dpi)); + *ret = v; +} + +void wasm_bridge_set_Job_dpi(GVJ_t *recv, void * v) { + recv->dpi = *(pointf *)v; +} + +void wasm_bridge_get_Job_width(GVJ_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->width; + *ret = v; +} + +void wasm_bridge_set_Job_width(GVJ_t *recv, unsigned long long int v) { + recv->width = (unsigned long long int)v; +} + +void wasm_bridge_get_Job_height(GVJ_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->height; + *ret = v; +} + +void wasm_bridge_set_Job_height(GVJ_t *recv, unsigned long long int v) { + recv->height = (unsigned long long int)v; +} + +void wasm_bridge_get_Job_page_bounding_box(GVJ_t *recv, box ** ret) { + void *v = malloc(sizeof(recv->pageBoundingBox)); + memcpy(v, &recv->pageBoundingBox, sizeof(recv->pageBoundingBox)); + *ret = v; +} + +void wasm_bridge_set_Job_page_bounding_box(GVJ_t *recv, void * v) { + recv->pageBoundingBox = *(box *)v; +} + +void wasm_bridge_get_Job_bounding_box(GVJ_t *recv, box ** ret) { + void *v = malloc(sizeof(recv->boundingBox)); + memcpy(v, &recv->boundingBox, sizeof(recv->boundingBox)); + *ret = v; +} + +void wasm_bridge_set_Job_bounding_box(GVJ_t *recv, void * v) { + recv->boundingBox = *(box *)v; +} + +void wasm_bridge_get_Job_scale(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->scale)); + memcpy(v, &recv->scale, sizeof(recv->scale)); + *ret = v; +} + +void wasm_bridge_set_Job_scale(GVJ_t *recv, void * v) { + recv->scale = *(pointf *)v; +} + +void wasm_bridge_get_Job_translation(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->translation)); + memcpy(v, &recv->translation, sizeof(recv->translation)); + *ret = v; +} + +void wasm_bridge_set_Job_translation(GVJ_t *recv, void * v) { + recv->translation = *(pointf *)v; +} + +void wasm_bridge_get_Job_devscale(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->devscale)); + memcpy(v, &recv->devscale, sizeof(recv->devscale)); + *ret = v; +} + +void wasm_bridge_set_Job_devscale(GVJ_t *recv, void * v) { + recv->devscale = *(pointf *)v; +} + +void wasm_bridge_get_Job_fit_mode(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->fit_mode; + *ret = v; +} + +void wasm_bridge_set_Job_fit_mode(GVJ_t *recv, bool v) { + recv->fit_mode = (bool)v; +} + +void wasm_bridge_get_Job_needs_refresh(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->needs_refresh; + *ret = v; +} + +void wasm_bridge_set_Job_needs_refresh(GVJ_t *recv, bool v) { + recv->needs_refresh = (bool)v; +} + +void wasm_bridge_get_Job_click(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->click; + *ret = v; +} + +void wasm_bridge_set_Job_click(GVJ_t *recv, bool v) { + recv->click = (bool)v; +} + +void wasm_bridge_get_Job_has_grown(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->has_grown; + *ret = v; +} + +void wasm_bridge_set_Job_has_grown(GVJ_t *recv, bool v) { + recv->has_grown = (bool)v; +} + +void wasm_bridge_get_Job_has_been_rendered(GVJ_t *recv, bool* ret) { + bool v = (bool)recv->has_been_rendered; + *ret = v; +} + +void wasm_bridge_set_Job_has_been_rendered(GVJ_t *recv, bool v) { + recv->has_been_rendered = (bool)v; +} + +void wasm_bridge_get_Job_button(GVJ_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->button; + *ret = v; +} + +void wasm_bridge_set_Job_button(GVJ_t *recv, unsigned long long int v) { + recv->button = (unsigned long long int)v; +} + +void wasm_bridge_get_Job_pointer(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->pointer)); + memcpy(v, &recv->pointer, sizeof(recv->pointer)); + *ret = v; +} + +void wasm_bridge_set_Job_pointer(GVJ_t *recv, void * v) { + recv->pointer = *(pointf *)v; +} + +void wasm_bridge_get_Job_oldpointer(GVJ_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->oldpointer)); + memcpy(v, &recv->oldpointer, sizeof(recv->oldpointer)); + *ret = v; +} + +void wasm_bridge_set_Job_oldpointer(GVJ_t *recv, void * v) { + recv->oldpointer = *(pointf *)v; +} + +void wasm_bridge_get_Job_current_obj(GVJ_t *recv, void ** ret) { + void * v = (void *)recv->current_obj; + *ret = v; +} + +void wasm_bridge_set_Job_current_obj(GVJ_t *recv, void * v) { + recv->current_obj = (void *)v; +} + +void wasm_bridge_get_Job_selected_obj(GVJ_t *recv, void ** ret) { + void * v = (void *)recv->selected_obj; + *ret = v; +} + +void wasm_bridge_set_Job_selected_obj(GVJ_t *recv, void * v) { + recv->selected_obj = (void *)v; +} + +void wasm_bridge_get_Job_active_tooltip(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->active_tooltip); + *ret = v; +} + +void wasm_bridge_set_Job_active_tooltip(GVJ_t *recv, void * v) { + recv->active_tooltip = (char *)v; +} + +void wasm_bridge_get_Job_selected_href(GVJ_t *recv, GoString ** ret) { + GoString *v = newString(recv->selected_href); + *ret = v; +} + +void wasm_bridge_set_Job_selected_href(GVJ_t *recv, void * v) { + recv->selected_href = (char *)v; +} + +void *wasm_bridge_new_Point() { + void *ret = malloc(sizeof(point)); + memset(ret, 0, sizeof(point)); + return ret; +} + +void wasm_bridge_get_Point_x(point *recv, long long int* ret) { + long long int v = (long long int)recv->x; + *ret = v; +} + +void wasm_bridge_set_Point_x(point *recv, long long int v) { + recv->x = (long long int)v; +} + +void wasm_bridge_get_Point_y(point *recv, long long int* ret) { + long long int v = (long long int)recv->y; + *ret = v; +} + +void wasm_bridge_set_Point_y(point *recv, long long int v) { + recv->y = (long long int)v; +} + +void *wasm_bridge_new_BoxFloat() { + void *ret = malloc(sizeof(boxf)); + memset(ret, 0, sizeof(boxf)); + return ret; +} + +void wasm_bridge_get_BoxFloat_ll(boxf *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->LL)); + memcpy(v, &recv->LL, sizeof(recv->LL)); + *ret = v; +} + +void wasm_bridge_set_BoxFloat_ll(boxf *recv, void * v) { + recv->LL = *(pointf *)v; +} + +void wasm_bridge_get_BoxFloat_ur(boxf *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->UR)); + memcpy(v, &recv->UR, sizeof(recv->UR)); + *ret = v; +} + +void wasm_bridge_set_BoxFloat_ur(boxf *recv, void * v) { + recv->UR = *(pointf *)v; +} + +void *wasm_bridge_new_Box() { + void *ret = malloc(sizeof(box)); + memset(ret, 0, sizeof(box)); + return ret; +} + +void wasm_bridge_get_Box_ll(box *recv, point ** ret) { + void *v = malloc(sizeof(recv->LL)); + memcpy(v, &recv->LL, sizeof(recv->LL)); + *ret = v; +} + +void wasm_bridge_set_Box_ll(box *recv, void * v) { + recv->LL = *(point *)v; +} + +void wasm_bridge_get_Box_ur(box *recv, point ** ret) { + void *v = malloc(sizeof(recv->UR)); + memcpy(v, &recv->UR, sizeof(recv->UR)); + *ret = v; +} + +void wasm_bridge_set_Box_ur(box *recv, void * v) { + recv->UR = *(point *)v; +} + +void *wasm_bridge_new_Color() { + void *ret = malloc(sizeof(gvcolor_t)); + memset(ret, 0, sizeof(gvcolor_t)); + return ret; +} + +void wasm_bridge_get_Color_rgba_double(gvcolor_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newFloatString(recv->u.RGBA[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Color_rgba_double(gvcolor_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->u.RGBA[i], elem, sizeof(double)); + } +} + +void wasm_bridge_get_Color_hsva(gvcolor_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newFloatString(recv->u.HSVA[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Color_hsva(gvcolor_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->u.HSVA[i], elem, sizeof(double)); + } +} + +void wasm_bridge_get_Color_rgba_uint(gvcolor_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + unsigned int v = (unsigned int)recv->u.rgba[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Color_rgba_uint(gvcolor_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->u.rgba[i], elem, sizeof(unsigned int)); + } +} + +void wasm_bridge_get_Color_rgba_int(gvcolor_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 4; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + int v = (int)recv->u.rrggbbaa[i]; + *v_data = (void *)(intptr_t)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_Color_rgba_int(gvcolor_t *recv, GoSlice * v) { + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->u.rrggbbaa[i], elem, sizeof(int)); + } +} + +void wasm_bridge_get_Color_string(gvcolor_t *recv, GoString ** ret) { + GoString *v = newString(recv->u.string); + *ret = v; +} + +void wasm_bridge_set_Color_string(gvcolor_t *recv, void * v) { + recv->u.string = (char *)v; +} + +void wasm_bridge_get_Color_index(gvcolor_t *recv, long long int* ret) { + long long int v = (long long int)recv->u.index; + *ret = v; +} + +void wasm_bridge_set_Color_index(gvcolor_t *recv, long long int v) { + recv->u.index = (long long int)v; +} + +void wasm_bridge_get_Color_type(gvcolor_t *recv, int* ret) { + color_type_t v = (color_type_t)recv->type; + *ret = v; +} + +void wasm_bridge_set_Color_type(gvcolor_t *recv, int v) { + recv->type = (color_type_t)v; +} + +void *wasm_bridge_new_PointFloat() { + void *ret = malloc(sizeof(pointf)); + memset(ret, 0, sizeof(pointf)); + return ret; +} + +void wasm_bridge_get_PointFloat_x(pointf *recv, GoString ** ret) { + GoString *v = newFloatString(recv->x); + *ret = v; +} + +void wasm_bridge_set_PointFloat_x(pointf *recv, double v) { + recv->x = (double)v; +} + +void wasm_bridge_get_PointFloat_y(pointf *recv, GoString ** ret) { + GoString *v = newFloatString(recv->y); + *ret = v; +} + +void wasm_bridge_set_PointFloat_y(pointf *recv, double v) { + recv->y = (double)v; +} + +void *wasm_bridge_new_PluginActiveDevice() { + void *ret = malloc(sizeof(gvplugin_active_device_t)); + memset(ret, 0, sizeof(gvplugin_active_device_t)); + return ret; +} + +void wasm_bridge_get_PluginActiveDevice_engine(gvplugin_active_device_t *recv, gvdevice_engine_t ** ret) { + gvdevice_engine_t * v = (gvdevice_engine_t *)recv->engine; + *ret = v; +} + +void wasm_bridge_set_PluginActiveDevice_engine(gvplugin_active_device_t *recv, void * v) { + recv->engine = (gvdevice_engine_t *)v; +} + +void wasm_bridge_get_PluginActiveDevice_id(gvplugin_active_device_t *recv, long long int* ret) { + long long int v = (long long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_PluginActiveDevice_id(gvplugin_active_device_t *recv, long long int v) { + recv->id = (long long int)v; +} + +void wasm_bridge_get_PluginActiveDevice_features(gvplugin_active_device_t *recv, gvdevice_features_t ** ret) { + gvdevice_features_t * v = (gvdevice_features_t *)recv->features; + *ret = v; +} + +void wasm_bridge_set_PluginActiveDevice_features(gvplugin_active_device_t *recv, void * v) { + recv->features = (gvdevice_features_t *)v; +} + +void wasm_bridge_get_PluginActiveDevice_type(gvplugin_active_device_t *recv, GoString ** ret) { + GoString *v = newString(recv->type); + *ret = v; +} + +void wasm_bridge_set_PluginActiveDevice_type(gvplugin_active_device_t *recv, void * v) { + recv->type = (const char *)v; +} + +void *wasm_bridge_new_PluginActiveRender() { + void *ret = malloc(sizeof(gvplugin_active_render_t)); + memset(ret, 0, sizeof(gvplugin_active_render_t)); + return ret; +} + +void wasm_bridge_get_PluginActiveRender_engine(gvplugin_active_render_t *recv, gvrender_engine_t ** ret) { + gvrender_engine_t * v = (gvrender_engine_t *)recv->engine; + *ret = v; +} + +void wasm_bridge_set_PluginActiveRender_engine(gvplugin_active_render_t *recv, void * v) { + recv->engine = (gvrender_engine_t *)v; +} + +void wasm_bridge_get_PluginActiveRender_id(gvplugin_active_render_t *recv, long long int* ret) { + long long int v = (long long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_PluginActiveRender_id(gvplugin_active_render_t *recv, long long int v) { + recv->id = (long long int)v; +} + +void wasm_bridge_get_PluginActiveRender_features(gvplugin_active_render_t *recv, gvrender_features_t ** ret) { + gvrender_features_t * v = (gvrender_features_t *)recv->features; + *ret = v; +} + +void wasm_bridge_set_PluginActiveRender_features(gvplugin_active_render_t *recv, void * v) { + recv->features = (gvrender_features_t *)v; +} + +void wasm_bridge_get_PluginActiveRender_type(gvplugin_active_render_t *recv, GoString ** ret) { + GoString *v = newString(recv->type); + *ret = v; +} + +void wasm_bridge_set_PluginActiveRender_type(gvplugin_active_render_t *recv, void * v) { + recv->type = (const char *)v; +} + +void *wasm_bridge_new_DeviceEngine() { + void *ret = malloc(sizeof(gvdevice_engine_t)); + memset(ret, 0, sizeof(gvdevice_engine_t)); + return ret; +} + +void wasm_bridge_set_DeviceEngine_initialize(gvdevice_engine_t *recv) { + recv->initialize = DeviceEngine_Initialize; +} + +void wasm_bridge_set_DeviceEngine_format(gvdevice_engine_t *recv) { + recv->format = DeviceEngine_Format; +} + +void wasm_bridge_set_DeviceEngine_finalize(gvdevice_engine_t *recv) { + recv->finalize = DeviceEngine_Finalize; +} + +void *wasm_bridge_new_PostscriptAlias() { + void *ret = malloc(sizeof(PostscriptAlias)); + memset(ret, 0, sizeof(PostscriptAlias)); + return ret; +} + +void wasm_bridge_get_PostscriptAlias_name(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_name(PostscriptAlias *recv, void * v) { + recv->name = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_family(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->family); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_family(PostscriptAlias *recv, void * v) { + recv->family = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_weight(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->weight); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_weight(PostscriptAlias *recv, void * v) { + recv->weight = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_stretch(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->stretch); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_stretch(PostscriptAlias *recv, void * v) { + recv->stretch = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_style(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->style); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_style(PostscriptAlias *recv, void * v) { + recv->style = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_xfig_code(PostscriptAlias *recv, long long int* ret) { + long long int v = (long long int)recv->xfig_code; + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_xfig_code(PostscriptAlias *recv, long long int v) { + recv->xfig_code = (long long int)v; +} + +void wasm_bridge_get_PostscriptAlias_svg_font_family(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->svg_font_family); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_svg_font_family(PostscriptAlias *recv, void * v) { + recv->svg_font_family = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_svg_font_weight(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->svg_font_weight); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_svg_font_weight(PostscriptAlias *recv, void * v) { + recv->svg_font_weight = (char *)v; +} + +void wasm_bridge_get_PostscriptAlias_svg_font_style(PostscriptAlias *recv, GoString ** ret) { + GoString *v = newString(recv->svg_font_style); + *ret = v; +} + +void wasm_bridge_set_PostscriptAlias_svg_font_style(PostscriptAlias *recv, void * v) { + recv->svg_font_style = (char *)v; +} + +void *wasm_bridge_new_TextFont() { + void *ret = malloc(sizeof(textfont_t)); + memset(ret, 0, sizeof(textfont_t)); + return ret; +} + +void wasm_bridge_get_TextFont_name(textfont_t *recv, GoString ** ret) { + GoString *v = newString(recv->name); + *ret = v; +} + +void wasm_bridge_set_TextFont_name(textfont_t *recv, void * v) { + recv->name = (char *)v; +} + +void wasm_bridge_get_TextFont_color(textfont_t *recv, GoString ** ret) { + GoString *v = newString(recv->color); + *ret = v; +} + +void wasm_bridge_set_TextFont_color(textfont_t *recv, void * v) { + recv->color = (char *)v; +} + +void wasm_bridge_get_TextFont_postscript_alias(textfont_t *recv, PostscriptAlias ** ret) { + PostscriptAlias * v = (PostscriptAlias *)recv->postscript_alias; + *ret = v; +} + +void wasm_bridge_set_TextFont_postscript_alias(textfont_t *recv, void * v) { + recv->postscript_alias = (PostscriptAlias *)v; +} + +void wasm_bridge_get_TextFont_size(textfont_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->size); + *ret = v; +} + +void wasm_bridge_set_TextFont_size(textfont_t *recv, double v) { + recv->size = (double)v; +} + +void wasm_bridge_get_TextFont_flags(textfont_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->flags; + *ret = v; +} + +void wasm_bridge_set_TextFont_flags(textfont_t *recv, unsigned long long int v) { + recv->flags = (unsigned long long int)v; +} + +void wasm_bridge_get_TextFont_count(textfont_t *recv, unsigned long long int* ret) { + unsigned long long int v = (unsigned long long int)recv->cnt; + *ret = v; +} + +void wasm_bridge_set_TextFont_count(textfont_t *recv, unsigned long long int v) { + recv->cnt = (unsigned long long int)v; +} + +void *wasm_bridge_new_Textspan() { + void *ret = malloc(sizeof(textspan_t)); + memset(ret, 0, sizeof(textspan_t)); + return ret; +} + +void wasm_bridge_get_Textspan_str(textspan_t *recv, GoString ** ret) { + GoString *v = newString(recv->str); + *ret = v; +} + +void wasm_bridge_set_Textspan_str(textspan_t *recv, void * v) { + recv->str = (char *)v; +} + +void wasm_bridge_get_Textspan_font(textspan_t *recv, textfont_t ** ret) { + textfont_t * v = (textfont_t *)recv->font; + *ret = v; +} + +void wasm_bridge_set_Textspan_font(textspan_t *recv, void * v) { + recv->font = (textfont_t *)v; +} + +void wasm_bridge_get_Textspan_y_offset_layout(textspan_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->yoffset_layout); + *ret = v; +} + +void wasm_bridge_set_Textspan_y_offset_layout(textspan_t *recv, double v) { + recv->yoffset_layout = (double)v; +} + +void wasm_bridge_get_Textspan_y_offset_center_line(textspan_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->yoffset_centerline); + *ret = v; +} + +void wasm_bridge_set_Textspan_y_offset_center_line(textspan_t *recv, double v) { + recv->yoffset_centerline = (double)v; +} + +void wasm_bridge_get_Textspan_size(textspan_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->size)); + memcpy(v, &recv->size, sizeof(recv->size)); + *ret = v; +} + +void wasm_bridge_set_Textspan_size(textspan_t *recv, void * v) { + recv->size = *(pointf *)v; +} + +void wasm_bridge_get_Textspan_just(textspan_t *recv, long long int* ret) { + long long int v = (long long int)recv->just; + *ret = v; +} + +void wasm_bridge_set_Textspan_just(textspan_t *recv, long long int v) { + recv->just = (long long int)v; +} + +void *wasm_bridge_new_RenderEngine() { + void *ret = malloc(sizeof(gvrender_engine_t)); + memset(ret, 0, sizeof(gvrender_engine_t)); + return ret; +} + +void wasm_bridge_set_RenderEngine_begin_job(gvrender_engine_t *recv) { + recv->begin_job = RenderEngine_BeginJob; +} + +void wasm_bridge_set_RenderEngine_end_job(gvrender_engine_t *recv) { + recv->end_job = RenderEngine_EndJob; +} + +void wasm_bridge_set_RenderEngine_begin_graph(gvrender_engine_t *recv) { + recv->begin_graph = RenderEngine_BeginGraph; +} + +void wasm_bridge_set_RenderEngine_end_graph(gvrender_engine_t *recv) { + recv->end_graph = RenderEngine_EndGraph; +} + +void wasm_bridge_set_RenderEngine_begin_layer(gvrender_engine_t *recv) { + recv->begin_layer = RenderEngine_BeginLayer; +} + +void wasm_bridge_set_RenderEngine_end_layer(gvrender_engine_t *recv) { + recv->end_layer = RenderEngine_EndLayer; +} + +void wasm_bridge_set_RenderEngine_begin_page(gvrender_engine_t *recv) { + recv->begin_page = RenderEngine_BeginPage; +} + +void wasm_bridge_set_RenderEngine_end_page(gvrender_engine_t *recv) { + recv->end_page = RenderEngine_EndPage; +} + +void wasm_bridge_set_RenderEngine_begin_cluster(gvrender_engine_t *recv) { + recv->begin_cluster = RenderEngine_BeginCluster; +} + +void wasm_bridge_set_RenderEngine_end_cluster(gvrender_engine_t *recv) { + recv->end_cluster = RenderEngine_EndCluster; +} + +void wasm_bridge_set_RenderEngine_begin_nodes(gvrender_engine_t *recv) { + recv->begin_nodes = RenderEngine_BeginNodes; +} + +void wasm_bridge_set_RenderEngine_end_nodes(gvrender_engine_t *recv) { + recv->end_nodes = RenderEngine_EndNodes; +} + +void wasm_bridge_set_RenderEngine_begin_edges(gvrender_engine_t *recv) { + recv->begin_edges = RenderEngine_BeginEdges; +} + +void wasm_bridge_set_RenderEngine_end_edges(gvrender_engine_t *recv) { + recv->end_edges = RenderEngine_EndEdges; +} + +void wasm_bridge_set_RenderEngine_begin_node(gvrender_engine_t *recv) { + recv->begin_node = RenderEngine_BeginNode; +} + +void wasm_bridge_set_RenderEngine_end_node(gvrender_engine_t *recv) { + recv->end_node = RenderEngine_EndNode; +} + +void wasm_bridge_set_RenderEngine_begin_edge(gvrender_engine_t *recv) { + recv->begin_edge = RenderEngine_BeginEdge; +} + +void wasm_bridge_set_RenderEngine_end_edge(gvrender_engine_t *recv) { + recv->end_edge = RenderEngine_EndEdge; +} + +void wasm_bridge_set_RenderEngine_begin_anchor(gvrender_engine_t *recv) { + recv->begin_anchor = RenderEngine_BeginAnchor; +} + +void wasm_bridge_set_RenderEngine_end_anchor(gvrender_engine_t *recv) { + recv->end_anchor = RenderEngine_EndAnchor; +} + +void wasm_bridge_set_RenderEngine_begin_label(gvrender_engine_t *recv) { + recv->begin_label = RenderEngine_BeginLabel; +} + +void wasm_bridge_set_RenderEngine_end_label(gvrender_engine_t *recv) { + recv->end_label = RenderEngine_EndLabel; +} + +void wasm_bridge_set_RenderEngine_textspan(gvrender_engine_t *recv) { + recv->textspan = RenderEngine_Textspan; +} + +void wasm_bridge_set_RenderEngine_resolve_color(gvrender_engine_t *recv) { + recv->resolve_color = RenderEngine_ResolveColor; +} + +void wasm_bridge_set_RenderEngine_ellipse(gvrender_engine_t *recv) { + recv->ellipse = RenderEngine_Ellipse; +} + +void wasm_bridge_set_RenderEngine_polygon(gvrender_engine_t *recv) { + recv->polygon = RenderEngine_Polygon; +} + +void wasm_bridge_set_RenderEngine_beziercurve(gvrender_engine_t *recv) { + recv->beziercurve = RenderEngine_Beziercurve; +} + +void wasm_bridge_set_RenderEngine_polyline(gvrender_engine_t *recv) { + recv->polyline = RenderEngine_Polyline; +} + +void wasm_bridge_set_RenderEngine_comment(gvrender_engine_t *recv) { + recv->comment = RenderEngine_Comment; +} + +void wasm_bridge_set_RenderEngine_library_shape(gvrender_engine_t *recv) { + recv->library_shape = RenderEngine_LibraryShape; +} + +void *wasm_bridge_new_LayoutEngine() { + void *ret = malloc(sizeof(gvlayout_engine_t)); + memset(ret, 0, sizeof(gvlayout_engine_t)); + return ret; +} + +void wasm_bridge_set_LayoutEngine_layout(gvlayout_engine_t *recv) { + recv->layout = LayoutEngine_Layout; +} + +void wasm_bridge_set_LayoutEngine_cleanup(gvlayout_engine_t *recv) { + recv->cleanup = LayoutEngine_Cleanup; +} + +void *wasm_bridge_new_TextLayoutEngine() { + void *ret = malloc(sizeof(gvtextlayout_engine_t)); + memset(ret, 0, sizeof(gvtextlayout_engine_t)); + return ret; +} + +void wasm_bridge_set_TextLayoutEngine_textlayout(gvtextlayout_engine_t *recv) { + recv->textlayout = TextLayoutEngine_TextLayout; +} + +void *wasm_bridge_new_LoadImageEngine() { + void *ret = malloc(sizeof(gvloadimage_engine_t)); + memset(ret, 0, sizeof(gvloadimage_engine_t)); + return ret; +} + +void wasm_bridge_set_LoadImageEngine_load_image(gvloadimage_engine_t *recv) { + recv->loadimage = LoadImageEngine_LoadImage; +} + +void *wasm_bridge_new_LayoutFeatures() { + void *ret = malloc(sizeof(gvlayout_features_t)); + memset(ret, 0, sizeof(gvlayout_features_t)); + return ret; +} + +void wasm_bridge_get_LayoutFeatures_flags(gvlayout_features_t *recv, long long int* ret) { + long long int v = (long long int)recv->flags; + *ret = v; +} + +void wasm_bridge_set_LayoutFeatures_flags(gvlayout_features_t *recv, long long int v) { + recv->flags = (long long int)v; +} + +void *wasm_bridge_new_DeviceFeatures() { + void *ret = malloc(sizeof(gvdevice_features_t)); + memset(ret, 0, sizeof(gvdevice_features_t)); + return ret; +} + +void wasm_bridge_get_DeviceFeatures_flags(gvdevice_features_t *recv, long long int* ret) { + long long int v = (long long int)recv->flags; + *ret = v; +} + +void wasm_bridge_set_DeviceFeatures_flags(gvdevice_features_t *recv, long long int v) { + recv->flags = (long long int)v; +} + +void wasm_bridge_get_DeviceFeatures_default_margin(gvdevice_features_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->default_margin)); + memcpy(v, &recv->default_margin, sizeof(recv->default_margin)); + *ret = v; +} + +void wasm_bridge_set_DeviceFeatures_default_margin(gvdevice_features_t *recv, void * v) { + recv->default_margin = *(pointf *)v; +} + +void wasm_bridge_get_DeviceFeatures_default_pagesize(gvdevice_features_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->default_pagesize)); + memcpy(v, &recv->default_pagesize, sizeof(recv->default_pagesize)); + *ret = v; +} + +void wasm_bridge_set_DeviceFeatures_default_pagesize(gvdevice_features_t *recv, void * v) { + recv->default_pagesize = *(pointf *)v; +} + +void wasm_bridge_get_DeviceFeatures_default_dpi(gvdevice_features_t *recv, pointf ** ret) { + void *v = malloc(sizeof(recv->default_dpi)); + memcpy(v, &recv->default_dpi, sizeof(recv->default_dpi)); + *ret = v; +} + +void wasm_bridge_set_DeviceFeatures_default_dpi(gvdevice_features_t *recv, void * v) { + recv->default_dpi = *(pointf *)v; +} + +void *wasm_bridge_new_RenderFeatures() { + void *ret = malloc(sizeof(gvrender_features_t)); + memset(ret, 0, sizeof(gvrender_features_t)); + return ret; +} + +void wasm_bridge_get_RenderFeatures_flags(gvrender_features_t *recv, long long int* ret) { + long long int v = (long long int)recv->flags; + *ret = v; +} + +void wasm_bridge_set_RenderFeatures_flags(gvrender_features_t *recv, long long int v) { + recv->flags = (long long int)v; +} + +void wasm_bridge_get_RenderFeatures_default_pad(gvrender_features_t *recv, GoString ** ret) { + GoString *v = newFloatString(recv->default_pad); + *ret = v; +} + +void wasm_bridge_set_RenderFeatures_default_pad(gvrender_features_t *recv, double v) { + recv->default_pad = (double)v; +} + +void wasm_bridge_get_RenderFeatures_known_colors(gvrender_features_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; recv->knowncolors[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(recv->knowncolors[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_RenderFeatures_known_colors(gvrender_features_t *recv, GoSlice * v) { + recv->knowncolors = (char **)malloc(sizeof(char *) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->knowncolors[i], elem, sizeof(char *)); + } +} + +void wasm_bridge_get_RenderFeatures_size_known_colors(gvrender_features_t *recv, long long int* ret) { + long long int v = (long long int)recv->sz_knowncolors; + *ret = v; +} + +void wasm_bridge_set_RenderFeatures_size_known_colors(gvrender_features_t *recv, long long int v) { + recv->sz_knowncolors = (long long int)v; +} + +void wasm_bridge_get_RenderFeatures_color_type(gvrender_features_t *recv, int* ret) { + color_type_t v = (color_type_t)recv->color_type; + *ret = v; +} + +void wasm_bridge_set_RenderFeatures_color_type(gvrender_features_t *recv, int v) { + recv->color_type = (color_type_t)v; +} + +void *wasm_bridge_new_PluginInstalled() { + void *ret = malloc(sizeof(gvplugin_installed_t)); + memset(ret, 0, sizeof(gvplugin_installed_t)); + return ret; +} + +void wasm_bridge_get_PluginInstalled_id(gvplugin_installed_t *recv, long long int* ret) { + long long int v = (long long int)recv->id; + *ret = v; +} + +void wasm_bridge_set_PluginInstalled_id(gvplugin_installed_t *recv, long long int v) { + recv->id = (long long int)v; +} + +void wasm_bridge_get_PluginInstalled_type(gvplugin_installed_t *recv, GoString ** ret) { + GoString *v = newString(recv->type); + *ret = v; +} + +void wasm_bridge_set_PluginInstalled_type(gvplugin_installed_t *recv, void * v) { + recv->type = (char *)v; +} + +void wasm_bridge_get_PluginInstalled_quality(gvplugin_installed_t *recv, long long int* ret) { + long long int v = (long long int)recv->quality; + *ret = v; +} + +void wasm_bridge_set_PluginInstalled_quality(gvplugin_installed_t *recv, long long int v) { + recv->quality = (long long int)v; +} + +void wasm_bridge_get_PluginInstalled_engine(gvplugin_installed_t *recv, void ** ret) { + void * v = (void *)recv->engine; + *ret = v; +} + +void wasm_bridge_set_PluginInstalled_engine(gvplugin_installed_t *recv, void * v) { + recv->engine = (void *)v; +} + +void wasm_bridge_get_PluginInstalled_features(gvplugin_installed_t *recv, void ** ret) { + void * v = (void *)recv->features; + *ret = v; +} + +void wasm_bridge_set_PluginInstalled_features(gvplugin_installed_t *recv, void * v) { + recv->features = (void *)v; +} + +void *wasm_bridge_new_PluginAPI() { + void *ret = malloc(sizeof(gvplugin_api_t)); + memset(ret, 0, sizeof(gvplugin_api_t)); + return ret; +} + +void wasm_bridge_get_PluginAPI_api(gvplugin_api_t *recv, int* ret) { + api_t v = (api_t)recv->api; + *ret = v; +} + +void wasm_bridge_set_PluginAPI_api(gvplugin_api_t *recv, int v) { + recv->api = (api_t)v; +} + +void wasm_bridge_get_PluginAPI_types(gvplugin_api_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + void *v = malloc(sizeof(recv->types[i])); + memcpy(v, &recv->types[i], sizeof(recv->types[i])); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_PluginAPI_types(gvplugin_api_t *recv, GoSlice * v) { + recv->types = (gvplugin_installed_t *)malloc(sizeof(gvplugin_installed_t) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->types[i], elem, sizeof(gvplugin_installed_t)); + } +} + +void *wasm_bridge_new_PluginLibrary() { + void *ret = malloc(sizeof(gvplugin_library_t)); + memset(ret, 0, sizeof(gvplugin_library_t)); + return ret; +} + +void wasm_bridge_get_PluginLibrary_package_name(gvplugin_library_t *recv, GoString ** ret) { + GoString *v = newString(recv->packagename); + *ret = v; +} + +void wasm_bridge_set_PluginLibrary_package_name(gvplugin_library_t *recv, void * v) { + recv->packagename = (char *)v; +} + +void wasm_bridge_get_PluginLibrary_apis(gvplugin_library_t *recv, GoSlice ** ret) {GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + void *v = malloc(sizeof(recv->apis[i])); + memcpy(v, &recv->apis[i], sizeof(recv->apis[i])); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *ret = v; +} + +void wasm_bridge_set_PluginLibrary_apis(gvplugin_library_t *recv, GoSlice * v) { + recv->apis = (gvplugin_api_t *)malloc(sizeof(gvplugin_api_t) * v->len); + for (int i = 0; i < v->len; i++) { + void *elem = ((void **)v->data)[i * 2]; + memcpy(&recv->apis[i], elem, sizeof(gvplugin_api_t)); + } +} + + + +void wasm_bridge_pushDisc(void * _arg0, void * _arg1, void * _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agcbdisc_t * arg1; + arg1 = (Agcbdisc_t *)_arg1; + void * arg2; + arg2 = (void *)_arg2; + agpushdisc( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_popDisc(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agcbdisc_t * arg1; + arg1 = (Agcbdisc_t *)_arg1; + int ret = agpopdisc( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_open(void * _arg0, void * _arg1, void * _arg2, void ** _arg3) { + char * arg0; + arg0 = (char *)_arg0; + Agdesc_t arg1; + arg1 = *(Agdesc_t *)_arg1; + Agdisc_t * arg2; + arg2 = (Agdisc_t *)_arg2; + Agraph_t * ret = agopen( + arg0, + arg1, + arg2 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_read(void * _arg0, void * _arg1, void ** _arg2) { + char * arg0; + arg0 = (char *)_arg0; + Agdisc_t * arg1; + arg1 = (Agdisc_t *)_arg1; + Agraph_t * ret = agread( + arg0, + arg1 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_memRead(void * _arg0, void ** _arg1) { + const char * arg0; + arg0 = (const char *)_arg0; + Agraph_t * ret = agmemread( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_readline(int _arg0) { + int arg0; + arg0 = (int)_arg0; + agreadline( + arg0 + ); +} + +void wasm_bridge_setFile(void * _arg0) { + char * arg0; + arg0 = (char *)_arg0; + agsetfile( + arg0 + ); +} + +void wasm_bridge_concat(void * _arg0, void * _arg1, void * _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + Agdisc_t * arg2; + arg2 = (Agdisc_t *)_arg2; + Agraph_t * ret = agconcat( + arg0, + arg1, + arg2 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_write(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + int ret = agwrite( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_isDirected(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agisdirected( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_isUndirected(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agisundirected( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_isStrict(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agisstrict( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_graphOf(void * _arg0, void ** _arg1) { + void * arg0; + arg0 = (void *)_arg0; + Agraph_t * ret = agraphof( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_graphRoot(void * _arg0, void ** _arg1) { + void * arg0; + arg0 = (void *)_arg0; + Agraph_t * ret = agroot( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_graphNameOf(void * _arg0, void ** _arg1) { + void * arg0; + arg0 = (void *)_arg0; + char * ret = agnameof( + arg0 + ); + GoString *v = newString(ret); + *_arg1 = v; +} + +void wasm_bridge_objectKind(void * _arg0, int* _arg1) { + void * arg0; + arg0 = (void *)_arg0; + int ret = agobjkind( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_htmlStr(void * _arg0, bool* _arg1) { + char * arg0; + arg0 = (char *)_arg0; + bool ret = aghtmlstr( + arg0 + ); + bool v = (bool)ret; + *_arg1 = v; +} + +void wasm_bridge_canon(void * _arg0, int _arg1, void ** _arg2) { + char * arg0; + arg0 = (char *)_arg0; + int arg1; + arg1 = (int)_arg1; + char * ret = agcanon( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_strCanon(void * _arg0, void * _arg1, void ** _arg2) { + char * arg0; + arg0 = (char *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * ret = agstrcanon( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_canonStr(void * _arg0, void ** _arg1) { + char * arg0; + arg0 = (char *)_arg0; + char * ret = agcanonStr( + arg0 + ); + GoString *v = newString(ret); + *_arg1 = v; +} + +void wasm_bridge_attrSym(void * _arg0, void * _arg1, void ** _arg2) { + Agobj_t * arg0; + arg0 = (Agobj_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + Agsym_t * ret = agattrsym( + arg0, + arg1 + ); + Agsym_t * v = (Agsym_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_copyAttr(void * _arg0, void * _arg1, int* _arg2) { + void * arg0; + arg0 = (void *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + int ret = agcopyattr( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_bindRecord(void * _arg0, void * _arg1, unsigned int _arg2, int _arg3, void ** _arg4) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + unsigned int arg2; + arg2 = (unsigned int)_arg2; + int arg3; + arg3 = (int)_arg3; + void * ret = agbindrec( + arg0, + arg1, + arg2, + arg3 + ); + void * v = (void *)ret; + *_arg4 = v; +} + +void wasm_bridge_getRecord(void * _arg0, void * _arg1, int _arg2, void ** _arg3) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int arg2; + arg2 = (int)_arg2; + Agrec_t * ret = aggetrec( + arg0, + arg1, + arg2 + ); + Agrec_t * v = (Agrec_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_deleteRecord(void * _arg0, void * _arg1, int* _arg2) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int ret = agdelrec( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_getStr(void * _arg0, void * _arg1, void ** _arg2) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * ret = agget( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_getSymName(void * _arg0, void * _arg1, void ** _arg2) { + void * arg0; + arg0 = (void *)_arg0; + Agsym_t * arg1; + arg1 = (Agsym_t *)_arg1; + char * ret = agxget( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_setStr(void * _arg0, void * _arg1, void * _arg2, int* _arg3) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * arg2; + arg2 = (char *)_arg2; + int ret = agset( + arg0, + arg1, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_setSymName(void * _arg0, void * _arg1, void * _arg2, int* _arg3) { + void * arg0; + arg0 = (void *)_arg0; + Agsym_t * arg1; + arg1 = (Agsym_t *)_arg1; + char * arg2; + arg2 = (char *)_arg2; + int ret = agxset( + arg0, + arg1, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_safeSetStr(void * _arg0, void * _arg1, void * _arg2, void * _arg3, int* _arg4) { + void * arg0; + arg0 = (void *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * arg2; + arg2 = (char *)_arg2; + char * arg3; + arg3 = (char *)_arg3; + int ret = agsafeset( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_setError(int _arg0, int* _arg1) { + agerrlevel_t arg0; + arg0 = (agerrlevel_t)_arg0; + agerrlevel_t ret = agseterr( + arg0 + ); + agerrlevel_t v = (agerrlevel_t)ret; + *_arg1 = v; +} + +void wasm_bridge_lastError(void ** _arg0) { + char * ret = aglasterr( + ); + GoString *v = newString(ret); + *_arg0 = v; +} + +void wasm_bridge_error(int _arg0, void * _arg1, int* _arg2) { + agerrlevel_t arg0; + arg0 = (agerrlevel_t)_arg0; + const char * arg1; + arg1 = (const char *)_arg1; + int ret = agerr( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_errorf(void * _arg0) { + const char * arg0; + arg0 = (const char *)_arg0; + agerrorf( + arg0 + ); +} + +void wasm_bridge_warningf(void * _arg0) { + const char * arg0; + arg0 = (const char *)_arg0; + agwarningf( + arg0 + ); +} + +void wasm_bridge_errorNum(int* _arg0) { + int ret = agerrors( + ); + int v = (int)ret; + *_arg0 = v; +} + +void wasm_bridge_resetErrors(int* _arg0) { + int ret = agreseterrors( + ); + int v = (int)ret; + *_arg0 = v; +} + +void wasm_bridge_setErrorf(void * _arg0) { + agseterrf( + UserRef + ); +} + +void wasm_bridge_Graph_close(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agclose( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_isSimple(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agissimple( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_node(void * _arg0, void * _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int arg2; + arg2 = (int)_arg2; + Agnode_t * ret = agnode( + arg0, + arg1, + arg2 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_idNode(void * _arg0, unsigned long long int _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + unsigned long long int arg1; + arg1 = (unsigned long long int)_arg1; + int arg2; + arg2 = (int)_arg2; + Agnode_t * ret = agidnode( + arg0, + arg1, + arg2 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_subNode(void * _arg0, void * _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + int arg2; + arg2 = (int)_arg2; + Agnode_t * ret = agsubnode( + arg0, + arg1, + arg2 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_firstNode(void * _arg0, void ** _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * ret = agfstnode( + arg0 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_nextNode(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agnode_t * ret = agnxtnode( + arg0, + arg1 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_lastNode(void * _arg0, void ** _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * ret = aglstnode( + arg0 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_prevNode(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agnode_t * ret = agprvnode( + arg0, + arg1 + ); + Agnode_t * v = (Agnode_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_subRep(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agsubnode_t * ret = agsubrep( + arg0, + arg1 + ); + Agsubnode_t * v = (Agsubnode_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Node_before(void * _arg0, void * _arg1, int* _arg2) { + Agnode_t * arg0; + arg0 = (Agnode_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + int ret = agnodebefore( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_edge(void * _arg0, void * _arg1, void * _arg2, void * _arg3, int _arg4, void ** _arg5) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agnode_t * arg2; + arg2 = (Agnode_t *)_arg2; + char * arg3; + arg3 = (char *)_arg3; + int arg4; + arg4 = (int)_arg4; + Agedge_t * ret = agedge( + arg0, + arg1, + arg2, + arg3, + arg4 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg5 = v; +} + +void wasm_bridge_Graph_idEdge(void * _arg0, void * _arg1, void * _arg2, unsigned long long int _arg3, int _arg4, void ** _arg5) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agnode_t * arg2; + arg2 = (Agnode_t *)_arg2; + unsigned long long int arg3; + arg3 = (unsigned long long int)_arg3; + int arg4; + arg4 = (int)_arg4; + Agedge_t * ret = agidedge( + arg0, + arg1, + arg2, + arg3, + arg4 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg5 = v; +} + +void wasm_bridge_Graph_subEdge(void * _arg0, void * _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agedge_t * arg1; + arg1 = (Agedge_t *)_arg1; + int arg2; + arg2 = (int)_arg2; + Agedge_t * ret = agsubedge( + arg0, + arg1, + arg2 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_firstIn(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agedge_t * ret = agfstin( + arg0, + arg1 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_nextIn(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agedge_t * arg1; + arg1 = (Agedge_t *)_arg1; + Agedge_t * ret = agnxtin( + arg0, + arg1 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_firstOut(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agedge_t * ret = agfstout( + arg0, + arg1 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_nextOut(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agedge_t * arg1; + arg1 = (Agedge_t *)_arg1; + Agedge_t * ret = agnxtout( + arg0, + arg1 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_firstEdge(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + Agedge_t * ret = agfstedge( + arg0, + arg1 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_nextEdge(void * _arg0, void * _arg1, void * _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agedge_t * arg1; + arg1 = (Agedge_t *)_arg1; + Agnode_t * arg2; + arg2 = (Agnode_t *)_arg2; + Agedge_t * ret = agnxtedge( + arg0, + arg1, + arg2 + ); + Agedge_t * v = (Agedge_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_contains(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + int ret = agcontains( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Node_reLabel(void * _arg0, void * _arg1, int* _arg2) { + Agnode_t * arg0; + arg0 = (Agnode_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int ret = agrelabel_node( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_delete(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + int ret = agdelete( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_deleteSubGraph(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + int ret = agdelsubg( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_deleteNode(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + int ret = agdelnode( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_deleteEdge(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agedge_t * arg1; + arg1 = (Agedge_t *)_arg1; + int ret = agdeledge( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_strdup(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * ret = agstrdup( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_Graph_strdupHTML(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * ret = agstrdup_html( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_Graph_strBind(void * _arg0, void * _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + char * ret = agstrbind( + arg0, + arg1 + ); + GoString *v = newString(ret); + *_arg2 = v; +} + +void wasm_bridge_Graph_strFree(void * _arg0, void * _arg1, int* _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int ret = agstrfree( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_attr(void * _arg0, int _arg1, void * _arg2, void * _arg3, void ** _arg4) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int arg1; + arg1 = (int)_arg1; + char * arg2; + arg2 = (char *)_arg2; + char * arg3; + arg3 = (char *)_arg3; + Agsym_t * ret = agattr( + arg0, + arg1, + arg2, + arg3 + ); + Agsym_t * v = (Agsym_t *)ret; + *_arg4 = v; +} + +void wasm_bridge_Graph_nextAttr(void * _arg0, int _arg1, void * _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int arg1; + arg1 = (int)_arg1; + Agsym_t * arg2; + arg2 = (Agsym_t *)_arg2; + Agsym_t * ret = agnxtattr( + arg0, + arg1, + arg2 + ); + Agsym_t * v = (Agsym_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_init(void * _arg0, int _arg1, void * _arg2, int _arg3, int _arg4) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int arg1; + arg1 = (int)_arg1; + char * arg2; + arg2 = (char *)_arg2; + int arg3; + arg3 = (int)_arg3; + int arg4; + arg4 = (int)_arg4; + aginit( + arg0, + arg1, + arg2, + arg3, + arg4 + ); +} + +void wasm_bridge_Graph_clean(void * _arg0, int _arg1, void * _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int arg1; + arg1 = (int)_arg1; + char * arg2; + arg2 = (char *)_arg2; + agclean( + arg0, + arg1, + arg2 + ); +} + +void wasm_bridge_Graph_subGraph(void * _arg0, void * _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + char * arg1; + arg1 = (char *)_arg1; + int arg2; + arg2 = (int)_arg2; + Agraph_t * ret = agsubg( + arg0, + arg1, + arg2 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_idSubGraph(void * _arg0, unsigned long long int _arg1, int _arg2, void ** _arg3) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + unsigned long long int arg1; + arg1 = (unsigned long long int)_arg1; + int arg2; + arg2 = (int)_arg2; + Agraph_t * ret = agidsubg( + arg0, + arg1, + arg2 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg3 = v; +} + +void wasm_bridge_Graph_firstSubGraph(void * _arg0, void ** _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agraph_t * ret = agfstsubg( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_nextSubGraph(void * _arg0, void ** _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agraph_t * ret = agnxtsubg( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_parent(void * _arg0, void ** _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agraph_t * ret = agparent( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_nodeNum(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agnnodes( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_edgeNum(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agnedges( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_subGraphNum(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = agnsubg( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Graph_degree(void * _arg0, void * _arg1, int _arg2, int _arg3, int* _arg4) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + int arg2; + arg2 = (int)_arg2; + int arg3; + arg3 = (int)_arg3; + int ret = agdegree( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_Graph_countUniqueEdges(void * _arg0, void * _arg1, int _arg2, int _arg3, int* _arg4) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + Agnode_t * arg1; + arg1 = (Agnode_t *)_arg1; + int arg2; + arg2 = (int)_arg2; + int arg3; + arg3 = (int)_arg3; + int ret = agcountuniqedges( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_Graph_alloc(void * _arg0, unsigned long long int _arg1, void ** _arg2) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + unsigned long long int arg1; + arg1 = (unsigned long long int)_arg1; + void * ret = agalloc( + arg0, + arg1 + ); + void * v = (void *)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_realloc(void * _arg0, void * _arg1, unsigned long long int _arg2, unsigned long long int _arg3, void ** _arg4) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + unsigned long long int arg2; + arg2 = (unsigned long long int)_arg2; + unsigned long long int arg3; + arg3 = (unsigned long long int)_arg3; + void * ret = agrealloc( + arg0, + arg1, + arg2, + arg3 + ); + void * v = (void *)ret; + *_arg4 = v; +} + +void wasm_bridge_Graph_free(void * _arg0, void * _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + agfree( + arg0, + arg1 + ); +} + +void wasm_bridge_newDictWithDisc(void * _arg0, void * _arg1, void ** _arg2) { + Dtdisc_t * arg0; + arg0 = (Dtdisc_t *)_arg0; + Dtmethod_t * arg1; + arg1 = (Dtmethod_t *)_arg1; + Dict_t * ret = dtopen( + arg0, + arg1 + ); + Dict_t * v = (Dict_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_strHash(void * _arg0, int _arg1, unsigned int* _arg2) { + void * arg0; + arg0 = (void *)_arg0; + int arg1; + arg1 = (int)_arg1; + unsigned int ret = dtstrhash( + arg0, + arg1 + ); + unsigned int v = (unsigned int)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_close(void * _arg0, int* _arg1) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + int ret = dtclose( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Dict_view(void * _arg0, void * _arg1, void ** _arg2) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dict_t * arg1; + arg1 = (Dict_t *)_arg1; + Dict_t * ret = dtview( + arg0, + arg1 + ); + Dict_t * v = (Dict_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_disc(void * _arg0, void * _arg1, void ** _arg2) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtdisc_t * arg1; + arg1 = (Dtdisc_t *)_arg1; + Dtdisc_t * ret = dtdisc( + arg0, + arg1 + ); + Dtdisc_t * v = (Dtdisc_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_method(void * _arg0, void * _arg1, void ** _arg2) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtmethod_t * arg1; + arg1 = (Dtmethod_t *)_arg1; + Dtmethod_t * ret = dtmethod( + arg0, + arg1 + ); + Dtmethod_t * v = (Dtmethod_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_flatten(void * _arg0, void ** _arg1) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtlink_t * ret = dtflatten( + arg0 + ); + Dtlink_t * v = (Dtlink_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Dict_extract(void * _arg0, void ** _arg1) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtlink_t * ret = dtextract( + arg0 + ); + Dtlink_t * v = (Dtlink_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Dict_restore(void * _arg0, void * _arg1, int* _arg2) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtlink_t * arg1; + arg1 = (Dtlink_t *)_arg1; + int ret = dtrestore( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_walk(void * _arg0, void * _arg1, void * _arg2, int* _arg3) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + void * arg2; + arg2 = (void *)_arg2; + int ret = dtwalk( + arg0, + DictWalk, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_Dict_renew(void * _arg0, void * _arg1, void ** _arg2) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + void * arg1; + arg1 = (void *)_arg1; + void * ret = dtrenew( + arg0, + arg1 + ); + void * v = (void *)ret; + *_arg2 = v; +} + +void wasm_bridge_Dict_size(void * _arg0, int* _arg1) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + int ret = dtsize( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Dict_stat(void * _arg0, void * _arg1, int _arg2, int* _arg3) { + Dict_t * arg0; + arg0 = (Dict_t *)_arg0; + Dtstat_t * arg1; + arg1 = (Dtstat_t *)_arg1; + int arg2; + arg2 = (int)_arg2; + int ret = dtstat( + arg0, + arg1, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_toggle(int _arg0) { + int arg0; + arg0 = (int)_arg0; + gvToggle( + arg0 + ); +} + +void wasm_bridge_newContextWithSymList(GoSlice * _arg0, int _arg1, void ** _arg2) { + const lt_symlist_t * arg0; + arg0 = (const lt_symlist_t *)malloc(sizeof(const lt_symlist_t) * _arg0->len); + for (int i = 0; i < _arg0->len; i++) { + void *elem = ((void **)_arg0->data)[i * 2]; + memcpy(&arg0[i], elem, sizeof(const lt_symlist_t)); + } + int arg1; + arg1 = (int)_arg1; + GVC_t * ret = gvNEWcontext( + arg0, + arg1 + ); + GVC_t * v = (GVC_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_getContext(void ** _arg0) { + GVC_t * ret = gvContext( + ); + GVC_t * v = (GVC_t *)ret; + *_arg0 = v; +} + +void wasm_bridge_getContextWithPlugins(GoSlice * _arg0, int _arg1, void ** _arg2) { + const lt_symlist_t * arg0; + arg0 = (const lt_symlist_t *)malloc(sizeof(const lt_symlist_t) * _arg0->len); + for (int i = 0; i < _arg0->len; i++) { + void *elem = ((void **)_arg0->data)[i * 2]; + memcpy(&arg0[i], elem, sizeof(const lt_symlist_t)); + } + int arg1; + arg1 = (int)_arg1; + GVC_t * ret = gvContextPlugins( + arg0, + arg1 + ); + GVC_t * v = (GVC_t *)ret; + *_arg2 = v; +} + +void wasm_bridge_freeRenderData(void * _arg0) { + char * arg0; + arg0 = (char *)_arg0; + gvFreeRenderData( + arg0 + ); +} + +void wasm_bridge_Context_info(void * _arg0, GoSlice ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + char ** ret = gvcInfo( + arg0 + );GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; ret[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(ret[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *_arg1 = v; +} + +void wasm_bridge_Context_version(void * _arg0, void ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + char * ret = gvcVersion( + arg0 + ); + GoString *v = newString(ret); + *_arg1 = v; +} + +void wasm_bridge_Context_buildDate(void * _arg0, void ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + char * ret = gvcBuildDate( + arg0 + ); + GoString *v = newString(ret); + *_arg1 = v; +} + +void wasm_bridge_Context_parseArgs(void * _arg0, int _arg1, GoSlice * _arg2, int* _arg3) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + int arg1; + arg1 = (int)_arg1; + char ** arg2; + arg2 = (char **)malloc(sizeof(char *) * _arg2->len); + for (int i = 0; i < _arg2->len; i++) { + void *elem = ((void **)_arg2->data)[i * 2]; + memcpy(&arg2[i], elem, sizeof(char *)); + } + int ret = gvParseArgs( + arg0, + arg1, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_Context_nextInputGraph(void * _arg0, void ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * ret = gvNextInputGraph( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Context_pluginsGraph(void * _arg0, void ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * ret = gvPluginsGraph( + arg0 + ); + Agraph_t * v = (Agraph_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Context_layout(void * _arg0, void * _arg1, void * _arg2, int* _arg3) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + const char * arg2; + arg2 = (const char *)_arg2; + int ret = gvLayout( + arg0, + arg1, + arg2 + ); + int v = (int)ret; + *_arg3 = v; +} + +void wasm_bridge_Context_layoutJobs(void * _arg0, void * _arg1, int* _arg2) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + int ret = gvLayoutJobs( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Graph_attachAttrs(void * _arg0) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + attach_attrs( + arg0 + ); +} + +void wasm_bridge_Context_render(void * _arg0, void * _arg1, void * _arg2, void * _arg3, int* _arg4) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + const char * arg2; + arg2 = (const char *)_arg2; + FILE * arg3; + arg3 = (FILE *)_arg3; + int ret = gvRender( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_Context_renderFilename(void * _arg0, void * _arg1, void * _arg2, void * _arg3, int* _arg4) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + const char * arg2; + arg2 = (const char *)_arg2; + const char * arg3; + arg3 = (const char *)_arg3; + int ret = gvRenderFilename( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_Context_renderContext(void * _arg0, void * _arg1, void * _arg2, void * _arg3, int* _arg4) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + const char * arg2; + arg2 = (const char *)_arg2; + void * arg3; + arg3 = (void *)_arg3; + int ret = gvRenderContext( + arg0, + arg1, + arg2, + arg3 + ); + int v = (int)ret; + *_arg4 = v; +} + +void wasm_bridge_Context_renderData(void * _arg0, void * _arg1, void * _arg2, void * _arg3, void * _arg4, int* _arg5) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + const char * arg2; + arg2 = (const char *)_arg2; + char ** arg3; + arg3 = (char **)_arg3; + unsigned int * arg4; + arg4 = (unsigned int *)_arg4; + int ret = gvRenderData( + arg0, + arg1, + arg2, + arg3, + arg4 + ); + to_string_ptr_with_length(_arg3, *(int *)_arg4); + int v = (int)ret; + *_arg5 = v; +} + +void wasm_bridge_Context_renderJobs(void * _arg0, void * _arg1, int* _arg2) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + int ret = gvRenderJobs( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Context_finalize(void * _arg0) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + gvFinalize( + arg0 + ); +} + +void wasm_bridge_Context_freeContext(void * _arg0, int* _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + int ret = gvFreeContext( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Context_freeLayout(void * _arg0, void * _arg1, int* _arg2) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + Agraph_t * arg1; + arg1 = (Agraph_t *)_arg1; + int ret = gvFreeLayout( + arg0, + arg1 + ); + int v = (int)ret; + *_arg2 = v; +} + +void wasm_bridge_Context_pluginList(void * _arg0, void * _arg1, void * _arg2, GoSlice ** _arg3) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + const char * arg1; + arg1 = (const char *)_arg1; + int * arg2; + arg2 = (int *)_arg2; + char ** ret = gvPluginList( + arg0, + arg1, + arg2 + );GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + int v_length = 0; + for (int i = 0; ret[i] != NULL; i++) { + v_length++; + } + v->len = v_length; + void **v_data = (void **)malloc(8 * v_length); + v->data = v_data; + for (int i = 0; i < v_length; i++) { + GoString *v = newString(ret[i]); + *v_data = (void *)v; + v_data += 2; // move data header address by 2 word (8 bytes). + } + *_arg3 = v; +} + +void wasm_bridge_Context_addLibrary(void * _arg0, void * _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + gvplugin_library_t * arg1; + arg1 = (gvplugin_library_t *)_arg1; + gvAddLibrary( + arg0, + arg1 + ); +} + +void wasm_bridge_Graph_toolTred(void * _arg0, int* _arg1) { + Agraph_t * arg0; + arg0 = (Agraph_t *)_arg0; + int ret = gvToolTred( + arg0 + ); + int v = (int)ret; + *_arg1 = v; +} + +void wasm_bridge_Context_clone(void * _arg0, void ** _arg1) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + GVC_t * ret = gvCloneGVC( + arg0 + ); + GVC_t * v = (GVC_t *)ret; + *_arg1 = v; +} + +void wasm_bridge_Context_freeClonedContext(void * _arg0) { + GVC_t * arg0; + arg0 = (GVC_t *)_arg0; + gvFreeCloneGVC( + arg0 + ); +} + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ \ No newline at end of file diff --git a/internal/wasm/build/patch.c b/internal/wasm/build/patch.c new file mode 100644 index 0000000..51ad807 --- /dev/null +++ b/internal/wasm/build/patch.c @@ -0,0 +1,56 @@ +#include +#include +#include "gvplugin.h" +#include "gvplugin_render.h" + +static const char *tmpfilename = "tmpfile"; + +FILE *tmpfile(void) +{ + return fopen(tmpfilename, "w+"); +} + +extern gvplugin_library_t gvplugin_dot_layout_LTX_library; +extern gvplugin_library_t gvplugin_neato_layout_LTX_library; +extern gvplugin_library_t gvplugin_core_LTX_library; + +lt_symlist_t lt_preloaded_symbols[] = { + { "gvplugin_dot_layout_LTX_library", (void *)(&gvplugin_dot_layout_LTX_library) }, + { "gvplugin_neato_layout_LTX_library", (void*)(&gvplugin_neato_layout_LTX_library) }, + { "gvplugin_core_LTX_library", (void*)(&gvplugin_core_LTX_library) }, +}; + +static gvplugin_api_t api_zero = {(api_t)0, 0}; +static gvplugin_installed_t installed_zero = {0, NULL, 0, NULL, NULL}; +static lt_symlist_t symlist_zero = {NULL, NULL}; + +typedef struct { int len; void *data; } GoSlice; + +void wasm_bridge_PluginAPI_zero(void **ret) { + *ret = &api_zero; +} + +void wasm_bridge_PluginInstalled_zero(void **ret) { + *ret = &installed_zero; +} + +void wasm_bridge_SymList_zero(void **ret) { + *ret = &symlist_zero; +} + +void wasm_bridge_SymList_default(GoSlice **ret) { + GoSlice *v = (GoSlice *)malloc(sizeof(GoSlice)); + size_t len = sizeof(lt_preloaded_symbols) / sizeof(lt_preloaded_symbols[0]); + v->len = len; + void **data = malloc(8 * len); + v->data = data; + for (int i = 0; i < len; i++) { + lt_symlist_t *elem = (lt_symlist_t *)malloc(sizeof(lt_symlist_t)); + memcpy(elem, <_preloaded_symbols[i], sizeof(lt_symlist_t)); + *data = elem; + data += 2; + } + *ret = v; +} + +int main() { return 0; } diff --git a/internal/wasm/ext.go b/internal/wasm/ext.go new file mode 100644 index 0000000..0bb64fc --- /dev/null +++ b/internal/wasm/ext.go @@ -0,0 +1,102 @@ +package wasm + +import ( + "context" +) + +func DefaultSymList(ctx context.Context) ([]*SymList, error) { + p, err := mod.NewPtr(ctx) + if err != nil { + return nil, err + } + if _, err := mod.ExportedFunction("wasm_bridge_SymList_default").Call(ctx, p); err != nil { + return nil, err + } + ptr, err := mod.readU32(p) + if err != nil { + return nil, err + } + slice, err := mod.toSlice(ctx, ptr) + if err != nil { + return nil, err + } + return newSymListSlice(slice), nil +} + +func PluginAPIZero(ctx context.Context) (*PluginAPI, error) { + p, err := mod.NewPtr(ctx) + if err != nil { + return nil, err + } + if _, err := mod.ExportedFunction("wasm_bridge_PluginAPI_zero").Call(ctx, p); err != nil { + return nil, err + } + ptr, err := mod.readU32(p) + if err != nil { + return nil, err + } + return newPluginAPI(ptr), nil +} + +func PluginInstalledZero(ctx context.Context) (*PluginInstalled, error) { + p, err := mod.NewPtr(ctx) + if err != nil { + return nil, err + } + if _, err := mod.ExportedFunction("wasm_bridge_PluginInstalled_zero").Call(ctx, p); err != nil { + return nil, err + } + ptr, err := mod.readU32(p) + if err != nil { + return nil, err + } + return newPluginInstalled(ptr), nil +} + +func SymListZero(ctx context.Context) (*SymList, error) { + p, err := mod.NewPtr(ctx) + if err != nil { + return nil, err + } + if _, err := mod.ExportedFunction("wasm_bridge_SymList_zero").Call(ctx, p); err != nil { + return nil, err + } + ptr, err := mod.readU32(p) + if err != nil { + return nil, err + } + return newSymList(ptr), nil +} + +type RenderEngineInterface interface { + BeginJob(context.Context, *Job) error + EndJob(context.Context, *Job) error + BeginGraph(context.Context, *Job) error + EndGraph(context.Context, *Job) error + BeginLayer(context.Context, *Job, string, int, int) error + EndLayer(context.Context, *Job) error + BeginPage(context.Context, *Job) error + EndPage(context.Context, *Job) error + BeginCluster(context.Context, *Job) error + EndCluster(context.Context, *Job) error + BeginNodes(context.Context, *Job) error + EndNodes(context.Context, *Job) error + BeginEdges(context.Context, *Job) error + EndEdges(context.Context, *Job) error + BeginNode(context.Context, *Job) error + EndNode(context.Context, *Job) error + BeginEdge(context.Context, *Job) error + EndEdge(context.Context, *Job) error + BeginAnchor(context.Context, *Job, string, string, string, string) error + EndAnchor(context.Context, *Job) error + BeginLabel(context.Context, *Job, LabelType) error + EndLabel(context.Context, *Job) error + Textspan(context.Context, *Job, *PointFloat, *Textspan) error + ResolveColor(context.Context, *Job, *Color) error + Ellipse(context.Context, *Job, []*PointFloat, int) error + Polygon(context.Context, *Job, []*PointFloat, int) error + Beziercurve(context.Context, *Job, []*PointFloat, int, int) error + Polyline(context.Context, *Job, []*PointFloat) error + Comment(context.Context, *Job, string) error + LibraryShape(context.Context, *Job, string, *PointFloat, int, int) error +} diff --git a/internal/wasm/graphviz.wasm b/internal/wasm/graphviz.wasm new file mode 100755 index 0000000000000000000000000000000000000000..6c10eb8d4945aeb6b9d6b61eb504988fe79d3a42 GIT binary patch literal 1507196 zcmb4s2Vh)9l6Jj$lapjg4l;RnZ{vl9z1!RSFUq!Tv?t3#60m!Jm>o@!2TL=<%t*Gl zW!L0njLF6rFljN_WRp!c*?`H(U0vNn z$?}*%M8=xnp~i1KzyH1Qd;XVxW8nYh@8#RzM1H5=c=0cP`S{5%l0d(qY8oN??~p*h z@e2+kS#J#bEhzui_$`zB9U$iKfA@RicdDS@qD(-7DjSy;;Md>&)_%hWvM`T=`n%tF ze+wW!Jild<%oC_7o=}d7tTxBMk@AEh@T6{FQ_2@Mgd5NUp%4(%pJYcGSNM1M({c z2vuTnBA1d6^5IR|L+Z>D_A_2pCbql|28%#ee^&E=8J6h5>R+jzB^+)RsVrkMKUR5G z{gsT6Y71QPixvPr%0?;7m9X)9G$g;M<`90ZDxg@U8^XE>n%k5cf#qe_Rmo6^(`sp< z!mY_gfsEou6)Ua6uSi#|!XHXX!i1D5rL-`>@rN9WXti~b0XZRgM=_iMn7)G#KA6dR zRk2WMZc;FQFcMAq7wsY_N|Pm*s_?;fn;}P4-#B|jxDkdy1yvDQa&Zcxn8hc$k&+(T zKq<12l!oFml%9$#tY%`>2_?IbEZpg;cUqC?ysYGkGFL*{K=I{A7^=jIm2I3?WBTwp-BL zQYJ&+*)Ey>QZ8RnWSSN=d$dr_kca7frx`mv>4D5hu3X8K$XCzPg27B_BA3b}y0WEA zGEL@oQ2NI!7Kwpvy-Ev!^za5#Dd`iGO5bk z@q9`#_S0{dVc%jpS;H8CCH*kTj(jlrisr7)j9i7mg~?(jF(+9`)~J8i zi8Lp}jb@9ooIssR8Ax9E_`&utXN^}Xg?vA-%S!A&+A;P(W;Bz8qKW=!ist5HexZ^p z`hJ<#w*`~!+}gbZTFc5vhU81p-<<3Sr}IIv{E&^?tHq6 zrPV^i5^D2G$)cq}&C3Nn2i^`SLe`L=^wRB8RCx7fte(gI65Q z3?@q><-|y)LevB!E*NEu0o%umU{K7J3i<64n_?sFm|iS}dF!GChVt!Fj4QNCZY(2s z-)&NjP&S=NrYCaHzaKS0i7<+qEobO^O^|{>LXjZjZGypMFo{c+Co%VHh7-vOSzGSm2%UHv@mvVG_ykvxxq&NlAjRJ#AuyN@jGlX%Q@DRo!N_nOaO% z7A8`taV3*Lm9Ti>)kHG^P7!oXe*#UopRS|UbfTw8hLB`{!Cpkuw~JEX1??}Jpu~g< zx1dmpH9=GLE@AC7@onlIv8al6HKQ37r1IpLl-x`%t%5b4XC&!~O@$pP7Dh)Cg?y%v z%~G=l3>8a-R3ft^hgo=&x<<;Wg_(3>GM5=mQ>Y12xRlJN3uD_gOOZ00=42|BDOQ?t z9TFrc(gZaVltL+I@@Z-&rI=7DFC4F=3yax(@n+|%ozWwiqA1PdGYpf$KGXX*NFtEMpHP|dohiP+l<#p!s|uFCIWLe7+$5FFDB<_W3+2BZ!2e6h&=42LA8$ zcs!^-h4>HeAy0@rzGxKC@9u6gSBB5<85X!Cn4!S04zHXE*QuozcGoAuq^#{J-iz6L7PjTEE7_^hvuy zPeITd@EFj+AQS?qEER4}w4U(`03c0JK=TF3;|+R(J`V%~O$*Y${hNovXjBG6K6o=g zA0TMDe~)+&qW10)KyyGcUPy?=ffh1=iYlQb4=9_U>S0MRg2_q*d~Q%e=ipb*Pq_wQ zz}VFbn7jiLgwleN6bq$-+WL(DGXM9#Pu;EkpTH8U6#bw7i(=7KMi62(!>opof*)1% zg#q{ZL*5v=W5Dl?20{>}83>>b&<}J0s4JQ`Y?xeG?xpCgP-W;mz)*44THlW;`2P&* z2tj&&KNQRh6-0fI7hM&tg?@~xwiqpFO7+JzlmF0~z=NnELT?QIGxQKn@rkshmexOE z)RMF8V)%mi&)B2IYvMnk!i4O}3P_$1db1gbabHE3@OV0X6!ZmxGsqJ~7e!AtqCPY; zD-dM$uiz1agq}c^;z7d?gW`uCncp|tK^DpZCQzHbJZ3Nu44ZM(6-1%m25UBi3hf8S z@qea0(7dJ@*cJ6hf=SaQFGw5QvT+K;W^m8M8fZH3ASBb{H`>h^p1^d|k3Pul1fH2Z zu)IHm4fX7{n;%jL!pM3OAy0d_#TSnIriQu4hJ1cA{G0!P4tl$~;>lrjx}W~+r=Fjs z4B$W{0XB7B^pBX~P5;FE6K@brz~&MPxJM8G@DA-n6J`DmcDjA9y}~|Yx82&kVPOMJ z3$w-wf?Ba1_ZeAX%>x>+kx*POjNlL0W>b{yAKD<8M*#co>!de>1}TSmIsbH{RJ|MXcEYuJGU7|uYpZKaoi(dm$`+QUF*+ivHC4K9y&8peV!i!&L)k^ zMfuR7AQ*;aN9xqDz!=039@MNq-)tm0($FHHh!oBdlx&_bE4x?le$2U1COQR>poVBP zSQ6MYjEjCWUI6_S+6ddvU5p0>{K>zyf2;&pCgekVqy5m_=;pA(L73>!?A@ue6XgCn zhTh>}?T$?k#87}AgZqEbPrNkU?=d@}Xa4C7#WWzm|No!-LG?o@AAK+o3Yp#@_=pAn z+B|SNzWn~b=H9}j)gK#CG*19Firb9;{N#oQ1)(mRB=evR<;G-T3c5H3iy+Gm3IJiU z#QFc~uhumDZJ8gdK`1B_fF1n95@)qle-U}DeIwPG;(WKW2(yYC8@md!Uz$B(nIrhm zkbm(8GL4Gh?2Kpqr*JHqNVD0E7^OLq+Jb*!$?@Ng|Eg4N>UeT#>i_nOs-I$yVf<%5 z)tCLRqGx}(v05Ct7_-q|<5biJ#RH#7pvqjgh(q>O4qY$R5@6xD=i(phk5$PR4x-n? z^q`AMM%bNhHV8dK>^gW)qe2;ej(at=V-kJUplV$Qx1QrJ{!eSzWks7o0=s*0!PCKD{ ziJ^x9KsVx9Gxw$dEUnkelNO%0u>DZebsnI3{DM7);fL*J0A_9YgWcenfj1b%5EkNW zCbhPV*CXSqNqd@D7hra4M!f&s{x^PPH9Ne4aC~ae{Ot_i+_}sj|0%|W zcT@`B>d*8Z?EM}6o;t}J!;A;U(Fl2e`17Ctyk*W0f4I~*#F#g4?;q~{LvO$+8jpG( z#RSHHKwgM1_x#@ITDN+q$nU9(s{h=5=QMubc-d5btUO{mKaO56U(3|v6!lo69+#=d zI`vqu9&7IsDzB@rTh!xy^*H=SA+}mQu2qi}D#J4MI7K}+TZuPGhArxGih6vZ9uKMP zudBz`>akS84p)z(ElgFTXB5p%>TBuU!sp@Yu}(eK-Yn(4pfFe5Cnyi8#}^yr>qPan zT0Pd>qH1)%z}{Dn%hcm-h4QtPT|GWgkJlBkb?R}g%J72vTCcv=sK-+EI9xq0P>wd!%1dR(g>>(%2H_1K^ucdN%n z^>|1{`-wy4M3>hZpMY*UX<)Z=UQI9iEynR={Hk5klRrFyJYk9F#Ci+XHO zkGs`lqk24~9-Gu-vwA$E9xtfJ7WH^tJ>FK2!`~HM+NK^~SYOvm+irL(#7(^PJwaKa z9)~|FExk!So>7m@>aj&VUQo)g>^Z^wM16gs9@`F;#JAOB%WE+%VZ%8s{Md9yTvX~C z`C4(~6e<1mHh!#mzLg)_K9R32kGIR$5t4ny8$$C1^;oJNN2|vduM2FOdaO~2E7fDY zdaPBCb?R}7dTdsYXVhc$n?hx!daPI`Uq>G=j}_{%Mm@Hu$J^?$O+CI)kEP31KJ{3k z9xK&jje4wAkIkx}brx)eGiNT(EiJp0Vbe`Y(=pGoL^ZmY3l6SK%@cYZT5yVx{h5qnx8CwbV7Z@#1 zmM3ZnAp|&C&~yEP1n*;|7SUOLU-d<8)|~D4rxs!>B}E7FOQn#bQWSps?oz2x>gA2p zayY~9s6e)0nyof$F1CpTUJ2VtJ!u+`+aE%pOcQZbPu{JB#W7$Em6EAUZ)O6U(@Xq9 zeu5_bFp4UTVngAanf!)&)5@8w5&U+-%mC8zY3$Kn zIMa)0qzrBKK)%T`;+e27m&}dQ@=n1nPSS}p{UDnuA4rE9>Mccw83F7?@a`floxzBx zF`Y8g&nkwrzf9*sS>%Ts5xk9*iioE{#MTi8S4h1dV+a?iu_B!}Gf=^v`(kV>eKRAF zuBa`^;|zbg!uz^(7Qe|x-D&)m&VlkWBb4ScppzLol|QhbSgD}O%lQMvEKDNG>P-H? zwlkWeLdP2-43xM^2?K8{@TRza-{YH8K}F!6NX&s8GvgVoitV>xFkKnTR2CM}bP_Wm z+chT};1*kA;PDjU5nG_N((uozU{AGThWKSTIbwzbpa{f_89|b~L_uRQhn1aUw2p8% z&qVGZY(h+?Msq1zWB8K@8p7_!6P{3VBwMcJ5vM|H`6ItXeO&AbBuA9)tTz4Gtc3GD z*clXbj+=VWz&o({{b3^vf@Merv32w{lh1Gz$kT#@&Ba2Nj`aXPtzx+D@BlwmC{9A8 zC3=AIi#-qB3`}sLJERBDc$}52^C=%n~FD;0PUS;sY|0kK@cp*GOVsVq_GJHfqM0LZu}A z<3$hZEpHdHWOzqB&62!^i-b6^F+`6tPN`6+(A}OEP(_Qe%wSf~j@KDT;_{tID1bk) zw?@|+v91x0A{@x1`p_O`+yXM?8(8Y1a36_mD<$r`&v|^w;R1~K`Wf6P+zz)H(d3BI z(!_W%P4`&}BW-s(v%uo1v9N(1HIR|~rY(eF0O*iq*5t4`~S!S}x zrKg|onc|>nDbL-^B;J|mW6Xiwqfa$~U6qT4eXoJUs${B(P!(3Q`&ehVY8#o=g_W^U zGzq=rfi{dKON;D;m$?|*BwgT%aUs}-hA~6s=pxo^G;t|Yq=yVJkLJ(i=@EWKN7~OfD_&j~j9BMdQ{$mr2uCj4GnQ_;$2Nn`4bK2htx|VXdYR4Y)_~ zT;$DG3_@u-iZ!WZ2mBuA0d1~5bR@@7FZ2x4wo>RhZaj;eC8PUQ{*jfBNSoh6*-4!5yow6bKu&E?ZKqz5XSk}!4(Y5!eq(p;M6?2dD)!m$LnZj z32pH(cyt22a2l$DBsNfonme;qge}1YVJulpA<(FV@g_OSGA+{z3&(l^T*fr8qkPg(zuW5Om3EsF1?@1pUmLM%9wZywqw5qf`p4{r; zR^Tddm#wwJ&Q@lXY>Rdmr7BX7Ydvi)F>!#;iH=SoL+Ndf1hH(lOIOW|ir9{4!&od7 zxi#q_)-?1xCEKT2PI)e>OrLV^5Irf=XR6yn3K{xBx|UG-l5JA1tmcO3GJmp$qTE<< zG(+DQtt|BMd}TbJ6OAp?pN(+Wh>dUV+S;yw8hI@J?ZZ$hI?r+dQcTS%_-M1>+S z<$IMU$oYA=pff$bEbL{OHmP}HnV#uH5ty2ZQl8_9$cLrg=XxM@HjSck!;=XZjX!Yn z!@7zNUBVy5(u90m$_<_qT)NCMQw&gM>S|AmP+@DUB2VZVMk-}SlZees2#M=ZG20|3 z(`mZF1Et`U;Y^k%a5s56q)t2u5=8Jep32Y$E*gUlSMg58hA7oh-1WE6Rq zh?TL_GJnv)xaGx=$ihUWVB^0BnI)~U`hASmz)_X45k8Req&8bUOoK&c0eOvxwZw<$ z4`K`Sw^v6(zD%K>H5%fn0S;qDRVudpK0)2wkfab}E`9pq( zB4gG>pF;ZTgGaB=pu$!@$d5j+ezIWc3!%z7Xi@!AsB!`*{YfbC2UGeA%BLtn|Hen? zYsF(0rX12iiuof(V04A>jUXs6>Q$JeKMO&7!tobY6YghRHXY8oX{}ODGhI_SAIm1h*Q)jYb zGtMC9MQ8BLOyxKeIVxD~j*rsuGh^IUX7K`f6vvC`GBYr?NIvOuGsKOrKCUoB!;Cb@ zF_BlA5lpKQ&7@%K%!sm&>hmfyIx5FA5|V?iHhl+{c`|zB%ow6^Go^B-OLEhrW?a$f zLwA?rA2Q>LR5j%hvxQ}ewSG0}Vbd(5<*w~CQ-v~}-zil{@Z3Xa+-pXxFgKay+z*+j z(*mZAW{j&;!@bXJQK5jsI^|;yCP}TH@JB`_`jf0V2;-(rrhg#AgMj%rUQ|Cvhs-ql3Ptm8 zT#>@0bh^L6~ zK+tlTB37`*KW1hmi8bkBD@yqZ)7Q;`q~=efl8oaPI44)6r_9K3hC}yJJA5AE4|gZf zXBOwum4)V>q3(oWmk%=cLgYEf4YHA!oX?_LaLR%bdcbGKxvp)=W)CWkEs5y}ap_=y>l@+-O2{?e^K#TmyXMY^anB#OQSZA)L8 zVKj9)^Q$?9%3OLe8kZ3ZL$Wno{mG1B-kPW-e8rY4SHWpeUSHGKW(Qc~As(TjJi#tw zR2V*hmivO}4GV@3=t0*r`dK8iX3>$}7!QMd$VEl8pXyge&`zb}d|@eA znVMs~!C%98z)n}ppD7!~Ok!NU%wN+QHZr{6|1{)O0q#GF%2V~Kr-bsJ)uR^Cr8C`G zVN5V5dM?ynt@bbJ+1VM*$BSD#H?nO+Ljx-#cisV~>bnU%0iTU^*G^%V!#OhW|t ztP531`*~NYYQCpKAyEk|c{6mfx25_4&4keC6o=BQ#<1!|FNDJLYIg1)V*CLWUxmCytcC@e#M!LAg{V4B8jhsVwh!>M$zF^+r8)ybmJ9TX#NulRd4?bw%TUp zp8=OfH~+<5j98`DLqHHkH~%%#U9$z|zxgU)yhJDQFp$om{^+>ozt>DI*Ir1x!5WC1 zOM2OTk)dNvbkR(ZJOIQ{W(hOE+e0%(CNNFQR}zadlL=lWqw|aD zFlV9Cbs%###_Q@RGs>20lXKWW#Xz2(a44E;7*2hhQ`2$|I>B26e5Sl?&cSdmEb*e5 zHiR&tgez{(p~AjHbALh4`Qy9<>&{nll}Sl?+RvK@l>&}Y(PcARtK+<^iBYGU{UILC zh6-$FFY<;{i%SJwz!c$E_C`{U&r7_qEQUEYz?cCp$9Bs zDhUSam*K&Mm{Oof^pgJ!%%DVh}E)L$hnvTw;B&$JU$#2~Jf~ zJ_ui&tiJxc#iCMW@VCws;qu^C2aamL-`Pm4L>S64=I^5xk{Vf;8sLD7;aRSE2!AmP z@^z>Y;*P4ksaJSs{Azx0Vjkvo<0Y7j3Qtt})QPc8tzkywj)qnLm0nrV?L9QV7Yl0` z&2`==`-5QyhYEvO%O2@#Wm2*rD9y(55Yx)TT3a}6FjL{H7i2oOrgf^7)IEwhWWKUD zrgh+kE^OV&0?YOx0oY( z(jTg#(p{~>DC*pesd{NPuh1S+j7kD3!xO8gTSZPXr=VxOEwV;s^475Q0cLhweP)PW z@y2U#ad5ovOu>XON$*)Bwu8p2-rBTc91@aFOrOu?!)x4TC|#rE)Dy0<(@pCSNnWersHLu z&o8s)LAuZM;*8cJI?soBaKEh1%Jam%`GuDQ2XMxgj_kzjTZRg_Z(vPPXdXcVSTWod zidENi%C`{0IE5h{h!`DZoVqgv%GSD1O?(~=x#+Qp7kam1QB%QI!_t}X*`jM^b0c(0 zC@|WiT}|hGlQ7$W9Y&v?j}DL zuxwu7)mIWf%oi4ks;^^w%4KA)m+1(ftT1@JLvKaHq8AEvnGazT`9*ut2|n-S9Gu*| zz!#An;Y4v1j!wGJHyw_`Bs_w= z*`dJ5gtc!Uic5Ji@g6RuC+ThrEk);rA_7Ziuvp2TiC;X(5I!rppMZ)zNizA9`?oM+a_G5$9=6_6s%y9ol~q)^n_1rh%*iD zBws5JD59lMuL>rLbc8d8Z{|)&6jQfZd6htk9AEkW6GnY)AP6FqHCoj33^M z(d+=%X%K$13?1u_N=1<>l|0TL=Wk}iQoZB-ElPvgwyG|?+>ePl8+c{2=*!S_v=Qbk za87cvnvo^;#L?6<{cW7WLpvrvDR?a~VWHFf?Ru)(bXw(~YDH<`8^>GO=`5#USIppe zC8)SPE2T@tD>;ijp;!6?`_9Ew3R-=YKZsXs%E2aF?T_LeN`O^1ZX}{>{9*pi$dZGu zMaWeFb2hrp&+82dHd;H=pG=7}@P!#r+@ZnY~yq@O3?MWT~BBdn6xun_pI ze$B5b%eUM7@GFghSvYI4*W-`oV8^OU$oo)arqabhDjWUnmIG3=UHALLV~ZpO4j_8e zAGH^QLj8r>H=7Z9$=}Y>frSyj0_+bPGI~Y4mE5l_4Jp&B{s_y-DvMtChnHX|N6ZtZ z&GeQZT89}Xyaz(|ZGWq^?UF?-j7qyA5Eo6ZrK}A^$1){sxnpL(I5|n{15sQ;Q5jEy zE;Dy^AYcawz2oQgVpqAyYnAu>ZSeoAi6qRvMgM)oy&>|ZyeEC&M`tfBvV{geu)j)J zq;Oq8S%c*G5>?Whfr#P+Gct@LTm2#VjOb7RO`BLO6^hkrz%jltpzIR~DE6g+&_PKoTV)1! zd7zaov8@M!a8<2ItF3iIAY4_VGTj)!4pIti;NpV`rh{2apapK_)FLsy3wZ5Iw+31n zOWa#F+P#5rEf+l+2*beGx^_fRCRlsYX90Miv#2vJjxi52rZHEt0)<$(iQ)L>IsS^^ zbc_Y)_Vbe%otI$k$udbmK=etZRRf`pbW*gfr;1UvET2Z&s(uJa7~>(^&QpWm*YbQOFAhS-Dfp!t&nKX|uT7a+@vO;BGg@3vytqKOLBswz~0476ebr9Q$ z!-&fO(Mq4d~1tMFMX9st#3WPg?G@r;-N#O8kyOIEm zG0Y<5uotM%Il(rST!g0yaj@#5p_`(*LL$@gYqD6<3{@eGG9BD93Db znFK~djH7f$CvqK>DHUi-Fi;sQ$|U~sHeXh5rg^b5FkwXvKNbZe`9fKyfOiCg6JwYI z@lMxMQUAo4ECn9tS|XJ##QI=Z-em}*8^IB8lOa0o0+g-dzv;tBu$-M>cSDvwiU6Nw zAia0izbd!7F>BP0%Fi7&W(COb>B@_y4ymH?ze8@P1lNe0Ec znTkvz?+k)hd3!PnQK~8AlPqs&py1vm9~>NqLht2_yzNFCgFY45^aP^OmtfzG?hks= z)QE;<0m`!B0bv$H7(Ez-Ab6t|W7$LUuEH&j8)b8Q!~v?G>jIT^bAa!+kC?Iwyk3S8*;}N>I3uqH2J}qUynztm6mO3hJR) zh;t}5*F>a{1=ws%VjWEP$3ilDoXui+J=n$@*sfvy%^>buDq<*7d+2Wk{bP&f;T~Li zCm2?{`118$FeD3W`FKAVfDM(`4}!dek=L!kAV-?Z`-efqjPb>gAhazQ80keU4Ossu zhzp>2gG6rJ{3M8bsuV;0aGi~n>6;)1We!5XtP|%1WZL;yETRVaZkgFU9E+(>nU!GL z`AAGEVBPpee-4K7e6OZl!1+N`U`u*cfk$9PYk5;pR+#7XgBe82oF8N7P?~P;#OTh! zG7HfEvG>u1IczjEGBMjS4M+2KN?-T>wy8Lkwiw5!Bf5)W zYR83+W0#URo2=pJ4ko66b8SD-GTv#jb~GSQRjEI)?@1xrj2+JfsU-1ME@xVE(E%N4 zTRp((N~f)x_~?Yt_iW!2{5TS>U{6bBEPzXaZ|tL!*^!WvdEAOn7_a*&+ejyJp{ZFs z9Y>)EFycaWN_0Q(zp`0XO>XYUEt+1Q)N%-e4^tz^fVfbEns zn5rcfR%a{nVik)Qk#KCF&kFgiw+A{wj8~xvteof^7M^@zEt4##ayeSV6;$UME?}rF zZ*@ECh2r{yQMFxj7gZBvw9L|4ZY1%Us05inTq0OXtnjp_>A{*V@RkbQ&EH%rOIPj* z!AHcHvXMadGT0I(=B#v|6r$+iTiw*Qk+-oeB&)fwG(cewaPEG=?!^R)9(L?lX3@dM zF+S2`j8wwlj`b2k0%$Y0U(Kh={g=LGpKdLUC#H!s*!c^$&=A)0n0z7DHZ^vvq){b$yw|y_sZI>Tpz8 zrP&EkWjZ=MMeyu2mM0w(4oTty_FEhqj@p#^*kgWTIA(wMpyo^HxNuk!pl%p0mW88p z5Q<#L&w@d~Nutxk5rJA)K`##nEYm=%El7`w<~<=CV*0ar*-xj0L*ULLaauUspGz&W zzD^Be7j6uWBy>%zsm}}td!WGbzEZsln-!@M4Cv7hT!u>)(fid(IF0`}fJRm@eQq?mcv2 zIMBb3tYPR6;b8wh}7jS`9Xf0~758oyxpor69ugQz`LgQc=%3O8`^$Kn_@wjDsJ5} z9TkZwWP7CkARH)Ki|P--S{cSu&8X>XmT_v4%6D`mQeK$Lsy&1<9TP!VQwoDL_65px zocglrdwc{p6k^h(t=(5d?C3pS&eKVe7WgGo3l|qkSnL!ScM z)jE^O+G#fTXGOxeS2Q=AgDOwb%@LXQ0Bs?i8}St@`{l}XTLi8GI5s))@<;$nGj^%c zc@eMp!*7iE#sB&uR>yU*HdhlL+nXZlmhBKALn6}cjkyt;MHjK#`!tTm+eZ+@FMRG4%AMx>;buYRp z5*?VuM#|bWyu<#sEW(|U7()lg#X*T7>7GanC-g%pGVHTN(!G(GqA>^S6%P2lkBM|I z!JKcO@eBsv`y;`DS##Lcm7xbBQ|5E`9)-(q)QYdBhY(H4gA=B^X^yR+ha+(Z7B7n* ziF9hKDmWhO^;wEei|(ZXdHp1dP|W?{ZO*4A(XPDws^&Qe2LBS*qOR&Y;+Sy6iz8Yg z2{B{oSf(qZZ9KVxa{$R$xXKabPySsR_I!EN$%VRX7fzAUa(fjbRG*~cQg z4WcKM%kz^5z)^FM)O2tRNA=*g*h^d#k4J*6J-qo%8^LE&bh~{wM_TO+2=~XiDMokHkav z`(E^De0p7mYPIV@Rt=tufE`|7YlS=?fv#w&7Nr*=yGS_wNJ6%VakvP}Jq!it>Nv21 z#&|8VdvgSf$X1V=y2Z?kk?+)Jwo`CKd%9+{#onfA}YT5pTWz^S~G^nR2hUI*EyN$*9!FDQQ^)WFkXr19k!|{N)zaUXq%-I@EE~N@K9Tz4biBbnp}cja%VK={N9W1 zine3kP~uTohI2T(c%k}6qlT$6hqLSG?r%nF9yDb(i{qo^96ZDDl%jtxjp}w62gTvb zwT7q5qC0J`_U}ZdYc4IZsd)^*m{DWQP9dmFg3jo@NZc}AJoChwl^%{qF_v&sBZLw6 z0(=m`EezSz1fnb=*cZcE3{(Dewvye8?wJ`(3})r}1QTb>6N!-uC*Or+nMr1UM)%E( zCeVBMs)cMCu={6vktJv19C|rhhP3G8NLU3FLa`_4U~ReSIaLgZe!aWj^IIdC9^mCb11L!GvfTmIJPPaiAjWR7Z#hR z8XY!d@j_fl%^(b{=4nQ|oen!cX(yj<;C^9oSYob|nKV}#yW8J5csdU6Bi4}C*5g7H z#H7wJez+qXxJt1vi^#cE2Bt-dKKcdrXeP}wjW#wlNhA$EQ0mGqPpE{q_22Z0ta1!h_IViMwDgs**9|eHoE3b_l;`0sRTxC{w{Z z&w6|2&{vTtTBr8?btJBwzV;|X_eX19b+*t)MdMXfRDJ%qs9#>P^lE1S6IAx7(QBRh zpd>Tl6I`P#&*!k&YoD;BlU-fJQf1|6JT*E)v;A1Uprb0od8TVuft`Yw->r`Bsby)r zCxJ)|wO_{3T4`FdgG_2F;>vVxbT_S}^7t5(riit*Y>yy5na*>~P~hu_;~Te@(4`Ih z+{tmAqQqP@P3xk&Xry^cb>KK=pVmx_uCj-EYx{?tWxOYYLY2NlNbF*`#^se)-AcyQ zYh4Xvx4vD(byZs_-=l zQ+g>H79(1bua^VEZBk`>2k$90=+WKrfc?5Y z?$2ZI5&LlG7#P0_*qOvq`OsL9tuTAT%r%BupYWpOmRN*!8>{|){=6~fD=xt)F7sT2 zU$A#@9$qH-<$QSo=mL0`3;68^965R?=H~`T@S-AwJ_ipQd}efJEY#g=kAEk`g3OL^ zaeFMtgO$AhIU2%+1Ia~F?s_a3QNFlAZit1krnUXYUq<;t^hw)$acj&g{9S0^39kNt zYeh1n6|i-Y;T1mD@)O?|8&UOZC4A%z68Jibi%hT^GC|kGVj_3RbUmEI2SUlLrn`rBXRfW@I0jmsJ8S|^MX+Z z7(?(KR3wj0n{#3k-D*Kzh_$HPvZ#~w_~Ws#_@M^nkn#mF98>4r0OdTU3u7%c!lHBZ zY-~5)X5p|M992M27hFr(T#5&C71@E~hcW5=;_(pY_|x&29i)a;GbVd)#im$o#I+UI z6k>5=QT!fR7PnHUY1FIGH2&2d>+`jkSsqE#oAK}1lP$-Z57AWkU5JHn9PkgwP11w$ zT^nI7nv)n?gj*&sN!u2Sj*er^BYQ?LgjdCa_*Sc(t7Bfa4s?gw_rWxejl-R>fY^id z67vdZJ+nsl#Q3tBGQHj@(TY8l%-9_E0$yo^)DoN6o~j*F?YPMZze(hyIu@tM~U~;dJhRMW}5uk)`wF*h6-- z4tt(3z-^70!&$gn;@{Vx^=*gdkqjTkc7fxVM}8|124VFn%p+72gW?~nCsnH`^l{9` z2Whi((~NfM#Cmr6Bo>hgy`_!k#HaAt2*b3yaoLT=PR%Z;Ea3Dq08gDt1in67Nr>0fa&mM#CH>DSq3|`^yQJ5orU=_8Vxbx z@wlMKvY26XWIR$GwHM8yKgDJ=DJM-w#MuFPz&Ne}lCV}4bcUOc;_X-{@YPm{0%EG{ z8hwdwswN!Zl+KJp4_N6~=(IXsT|<;*4RJ3o7GP^DSS;MZ@4WoN`$osYp^SyY12aQn zsX-)5XT@81(qah$o90XEvz4-SaMG?3#|!r?J)p$KkJ+xr>BRX6dU~iz|)(9BV;*2a2`Y8^g%b_|%3R z!8zfB-NID*khqukCh5?4yNw9|X8N+)qQl}52jg^jyj5>_#(JbVbQLM%aTZaTpP#kwR*iSjzC-WdVO4OC{Q0a#G~VR zHa=>GP4}{?Vh=vT6tUPEbJ}{b1#IteJy@CUi^J+5hKp{T5mRIEYl{9#v`9`2S%%roQdz#z%1u3dFh)%O9LF%b4p7 z4twMTdzaI^%D`T+BET*MYc644ZR}RvI;|xqdWU|6nddNXe4E!8YJTFNf31PvAS*f& zt~287rE;WPZ?p)Lj-(rm7P+Xvk+j~3V?wm2BjrX(*~^h~li}D)u_}18VQm>%-?tc3 zWQxSus#U(#z^1KLWow3o$eyx!o3Tf=&d!OIR_oghFXqeGTAhKh8v{diOFALP;=hXH zOiL|IP&jU=Y;G`Wr!QHeD)kOWDo(jrsdqY3v2A3f-euIH9dPnM5xCodTAr{8+{3ME zZPfEJ&qBr}Z`I@qqS1x1`y3RCxs;W<(V1G9uu|{mRBKPXR*453skKTx=t!+q;vr_i z-c`3N@vsB6R*6Tr5*DhX5|274R4cK`L7`TO$DFCvN<40KR@+$`$f?y&7!tQ@>Ca{( z!p&;;pC=7W2qYlDRwnK<=2J$8JDGEtPa9M1U*Q=JWM=Ir#-6A~Lcvzi3Q#v&7&%&6nzVWq|pzF~iN0&_g#gw-_CbVCE}^54-1k z{*tE8e9vfe*Bhzt8|~Foht`S6#QgbmL~ENn zxo?n;Y~A@+W25tMQWB?wdU*bf&DU<665!29z@M2ivpJj|m?8%)``O2XU+Kn7fQ~^i zW261pAt{Vt8CZd@1zv~afH*eFuQqLZNaY>Gc}S}`I=*#RX0aPCZp8*4>Q=<9P1@zH zyVq0K@#%yqolIq4-Uw&Dy2{pJPTUtmXSGhTfcW)hEJyNlhUU=OtZD~N`@@mo6rHFRXS5!~i z>VR%Jyg^sCO4Fg%a|$W8{&O;^Q9JKCC2asjU=1*?f-+EHpIEUS`9GS5aWhgAqB2$KAq&q zIa?0vs|}ecTDVy{bFt=}y3gDn<0`NLiSAbiw_)DK z$1IaV543hzv@HhEOcmS_^;3@MzO9#65w(RfcEz<8*1L6Gm|Dbp-sE*RZ4 zg^Ll5#gn@Y&|j2M*O^G0r^Eo~!CrbZT+&l^8{wU=27Sa<986e^89j2YtNi6zW5r>?@~hI zSg&boai-13M*p>KQ=CbXfv#)Q@=E`_UPlz&q8s!?75=)uZJLv0PkO+6W%#XOHsjD&2e$&}@j6FXl<$3N&<* zxri*FTid?Z9AjU(mrU?(YYSjjhKXX9Zf^_o{oyb{{EN#Q)Rz^ddq-PPV7xzhr+ODT z+|?H0bj)U;t=PI$p#AxF{CnEknDQXsMw8%O0?BZ1+w?hdosi9RIf1g-PSAaAJGnu# z#<7u-M|dB?o;SAb(il8|NFbgG-rqLOjWE9;L9q`sf?z8G+X(fLIUt99p@-T!+|*#J z)AVqC4$I&2NIhggR(|xTUFmM|sU+BvSld~f+S*ky76?;d_C!C{HdRly1N$Fuo2rOf z__O#1Hk^c@C)(OI0A@0ryt!?-o*kk*`OC(Aj!v}7-f2~o;wA2sZpM8IsEc+eI5na z(x^sEj$Wy+k)*%cCSfTSZlrs|MGYdbAa6FRO)uY(L2uR9MgiV- z0fw;Oin(&0-f=Yp=2X1#r8f27b@Odqs`#EOop;Ll3X=Eh>ccl|;=TavqVqG(b!f@6VH)@z(~sMB;u>qPS_1vCt+N+n zNzWJ*)+T6w(s+cj^XtAB5dE)5`k3+8m=2I$WEJPY<6>Yg*N zn?BWtK1HynPhg)lB5CDnP}u%m1ASm)YJFk+<2>(p8UW^Z{R$j3pw&Ony&rwnHr-8Y z?ogs{-`?IvwFPL_{C<>EM-GsAJ#!ls1W141ye0+xvcG#CeO}KUXPPsYzNoJ$Lk8)~ zhFQ7+`BOv4;C}PytA-Fvap~)ZLKx_oJD0v`2-?4URzLl@A-$g23+OKmGYv7lrR{sT zBTX?O)LQ>v;?MpaylByXW^nMdl22 z?ca#BKxYf|9Z%!DLjr9^d2fM!rcWf9EmbZ~f_L{q(dxKX1uO6uO~6A6{ACmH-U|Gu zCUx!;&c12_?H1_QO-T1C(%&=zcPsFpn}7!w48Q<2YAaRi1-%Of2GLgEachDl6w$cB zL~qyN5JXp}FMmH;-+rPJcwBD{?cZ2i8+UvSWm0b6J-F-uYba?v@wohtkVBhZ9EC@QH{rgQ(XZ7@T z4g5MWcfr8?t|2biTww9(68y}Ms*(O?t^F( zzfR0!;mldEe;*yws6rN=h;V42t8b7QrDL~4Qcy*E2I;s)3_3}o-w)EV_Mg;O+J)sX zAIG=<#ru%$i51*7qHB157azeG7&l_6 z89--0tsV_H{cg0=+qKm=_tyUIK9GVO8d!dY&FLE4TdYZ)c^2q`A+|N2w$;sp7&^G1 z7lG5C)dT1D^!7F_Re&mMgYib7+;Ck3D7Mb93wWSwPES`a3a%Rr=Pu}Dsm_$aPze@D?cJ=UFtxjADESE<%sMg+t`*oqK?>kGz;5upI z4wJ6LtX~f`oN@|qf7s(jTnW%3+&~~=1QUZp13j3mH5e!ryaxv9SD2R7Rf>HRgvTh&}>X^Q(W8bdXB*&KE7$@I)wz9oW zOB6&M1wTUvm(eGj;8i-9yNnG6?{uaPcIIaA>h^YLwVA7-B=*AU4Fr<;mU}pMWJ8_K z)=`+S8|56mY-Wv7#_&Un{7ai_bg)gq2A|tr*P5Ig=ORjr@f(3U)Xr={&u_0=K5$!aMdoR6d{}$~m$%nVhb#~aheNX$(G@xlQ?J9hQg3}`(8j?piV2x@ zI*OBwjdE3codL9|OCjo_UO?zFpw<#bxib-6n zV>n4z7}x0-nk@37bJyz_P8wi?RqqB}SWX&T3ZtyoQJh3hNl28-81TUBp*)yIv^M z<@Ba?sR3`%ORVO!wQ++EXO1MZ4ZlNIrfU9b$GKBSs1m3m+|`8lJS+R%I0X_0n=gjRuT|Zr!)?M<_(t8DX!)^sala1MvIG2pu9nQ1xNmXpJ%vyS zzTxP>29s_+k6J_F(?b|pumksyj?1OF$klKkZZI=;(Z$9E_66t>9kUTt3-i$i3mF&9 zJdQ0CaOPo?j@pQ*jrv%F3BQXf>-`9)(c?ODBf2%@CvP$4E%cov>yv6Tx=*W!-*N~sqk(*J*ZI(Fk@{Eq$jIu(0R@YQkMaP~OJy$=jIl$^N z+~;*|=JK34d=bVAx~t5Mf=w{|fc1;pFAFR)g}j0GaHylf@kbIz1pB+RUAH|f}O(G8VIq9qpo9mT_?kQ zsC_~{)q(&kg#2P&T<4Z?VInE;k zTUWP&6@cPYgE8$Y%*9?!AllX{U9Jx?f@W>If)pmzPe$vUPxcn4AmHrI8}-fOMsaZ? z!g3aayTiG%jfB+zZFRjTM=ub2=o9p&jwO=UhzZtP`d}skKnzs%$7?`M;ceBs zPd#s#FMg=w)YAgaHeD6!=-_8i@77W3$N=S@dLNutJN0Y1d_{}gLHUu6UPsY|{;@s; z)bUtDhcWo0j=UY(K>nn@6U*31pX!SZyYBvV_Mav2WjEzR;`XE;Tl>CjqUfqt&9 z6KdsFXOLg$7`6OWj4yQyQKMl`WB;Th)JWI}U+KeWje=ULe653P`4#vZ9bC(eo6n(f zf7ZdZ+zR{`T|Um-Xt1RnO(dUT^Lj`}ogYQDi(2>}s)K7KEAU}D?OMs=061KSIy0l> zBRcBVv8rT_MnSCakvhDV+kzjZQ?HdRE2*P(Xf3xukI|vEygW6aV|8dPuRxFMs9P^0 z1P@m%>P`)&$?1uO@C|4#5~gQCuGD81)jVR?-qeBBYyy0%e#jJ>Je641Q8#2(VaIpW z`K}PY1;2}yg&9Gz?b^^_%tsY=W#fEevX;P>f*F{ zg-TtjLu^g~xvVjti*lGQuV~Dtz)tL_a{@3Y^0QZTk`Ac+9Omt)o2hag zEG!Q3r?m%Kx-tsmJCxq>{T5af=$1MaHfu+QQ!;fo3)})5QHXr zpb!uTOsn-GG#(Z*!dW_kiw7*p-qfq9Q{Xk*TRMV9fn$;BY`qALf*_ouBWM)(=2%*z zBWM%^;anX-qafat^K=A_f*_pVq@{U6zgE}RDs{m4=P7Ab{Q%6m#*0mXH*05x3;QdZ za92e*Lr2g!5O??mIzqL6OhFJX>}Y6}gh#%CCQE1&y)nm;!@-K zL7#Ex;>I#^^w+xagY&5s)tU7Jd=0o-2imfcpEiK@YGiG>DBxQ40HGQzDGAxnCCpB5?mPTIy85bPJ@43P~CHLm5!zps-fMZyB8Wz%i^R9w#_=U zNT&wm6y7x*bzw|4|MK%-{Clq%o+Ov)S{>C%(v5nZZit**;(l~o*sH^xqy&D0zR+{! zr}aA6m7Q+XwTBzjI#x1)pD&ezJE!U5;R0MJxR3^$>u>1d=8_uXtt{_C$c{XzTLozFRk~}Ct8Bw@4UC+YIa5br*|||%vjc9W z>VX}2;bQ)tx+~3R|sI%)^q{d4X z>zt0dFg*trel-<0rC>&wp__F?ovkqk;w}0}rE{0ZVKZF4Mz`unIyD>VHr+Vtl(LAY z&|GXf4g7HH_9V@{vQacet?q(xoo+OB4tSFmxA-!p+jS$Xv*N(JL1$T~w}dw671qft zp*wW2o*S1A>tH?iB;BQh_1uf;ZXK-WUQGAsU_JLjx>pD5xp9n5pGoPt`G-C>>Iiy% zMz~*}owz9Q0{ciE!$pEIj?#NXJq?)_KA>aO(-Eu(cZ4Oost@U%re^fzKyapdz6L&& zzjg-8Fl*LO$|r|wh}QKT7|k_&W^%jutMuLW=Ja7WR(5D%$<1j4_l%CZFz?2ENHhQP*l+1xM;4yi$)SgJZR6S~2#i&>K#%BPF2)IdR96&7?$lUX4D3xhhJ%2OvAW*4 zSViCpyJ5ab?}DZ@Y>W$aopzC=LQulxKAm2NmlV_sWgJ*(^a;QEse{XSYz&nK9gbp>D9k6%Wtpecr*53-Nhf zO2YZduvY2YuWnk>-Oki;+>`{TfdkQ5+DIe! zpN{ZWeaCSkl$k``{KtjSz=i0<$nS`Yd?P2MlLGE0)xDH%Vc<8B^(Ys&MCCWo%hHY? z=$Lh+#&FM~!rWRv+i-G)-=jmYW3WH67bc)`k7LZtZaNg7P!Cg-jwK$iCbM1W{&rPd}_koV*rdLWX zE>|Y;vyWSKJU6{6-iP`)=B9TLZPO9lgbt#Qwr>k7aE2rfqK|bfHyI1-k2;o{n}yh< z0Ig4SEH^C+>r;IMbkl-|2ItQ|(~;by6w>E612%K(^1`IS&BC5 z@j9xTTNaUxx?D$fQ+1-AFtyGXqw`uqL9{~0audWg^o(_)UaXr#B_oA;l8)*o=tMnv zYTcP#okNI75j{o6bQ2X}D$G-LOgE<@Acc9Fj_Ic9z&w4bwxo5_%q&45ZVGcHyOCDv z_-@K|_-9Q0se6g-ltT^Qp);%WJk85+y-H%l74_lpkJixb$mDf+#PV9+HQh8-Js*U>DS?}*YS5izeqRg_&cCqq?>enH+}AI z8vi%z_-^`j__yfzJD^{rTXp;$&@a+$Q?;--c2T)5fWsjWZL-EBT_`y74re&x6mPFD z-HnPXiE+6d-(!f|?KVvPTj#jbh_r=o|J3&#^|K9k31jN|yF0%Prd)@2SN&wzO_P6~ z=I;9Cfg4TEEZwu?f~_Qbik|2UJb(oz^V5{}rRcAi@N;~gjz^kUIlQX-G;tJ-psiahl$_IKNl}*5cZq+Mg z=Pe*c^imyUXJpW2x(C(Hr3Zr0{q-|=7MKg`8oh!xE%>F13xUf&1pk2ErEE@|C=co= zHWj57Dp>UP`n55$<3zbZKRjkr!KMIC##Mu1=%IS`W=d|f8ynZmfkqGOY}+++qCBFb zxOhtQCf!wyYi3aqlza4ZH4Uh!pHhMsJxyQh$S$s!o&))t`fW0YFa+8D=`MP-ens09 zcatt;7ssP;ZpyyXV>+6P*DBgyw%ZnrMvv=)Za|5in5qS}+dNq&WwQ>o30Tl4b*P;; zt*#$=N{8BcE$GuzwK!)xZ}rDM=ouZs&R#=!R!6WYq^tvaWqM9Wuqo6Kp4YuXHU-6D zg7=$W&@pTh4vZJ|#&Xd>2K)>!2)(4Exd>I!UY@E2GgPVNFcC~n(iR)mYU7e^@N4?8XXi%5nfx{af(z9p;jim>b_MG2 z-q4%QrYG0dNauf3N3aRi5Z;=qMYh@$vZKinoXFIHc5VfHM{jdGC$<^cu=1tR@9G$K zb_d3LI(s$^$uAq0@9PLQi5kKOx}hM0)mnDtpW$|lP z722jFHX^7HKhhB!QIwyqqK|dNMidp|A9cir6m$4ZGx|hFY)DZMKh>qvh$8MZ9;456 zyha2C?{mG`Y;jjdnL~91jesB= zHmz~rEu`?H1&8ZEJ9k!qM@(y2=YtA`F*;I**%<|PlwK#h&hoS8{8Iu)>u@`76@H9P z+s-cm_{ZunJFmcwo2Knc*!l3gMiaQnf~CDo$FOrdFpi(ra0JKCg5&;cTCPLw{1)_t zX${u~JYucTL3Tz4ov1f~&9&NIJV^)I`4sSEof|vnLjI}E3Z0@u?W`8`)M<4-9Ui|d zz2o2c&X0)5PSX+pKW*;;CRcUlecn*jUES5)b*oV5fbCml&y4If->~!XV8-KbMwhW9 zWWe&y_?w+)_j^VQ3P#-$lDb>i%+4Aiax&Opax$1?z~r2B4kjlXFgcoJ3oNQXm-|y^Q^I>^JTKea%GOm4>@Z`Ut3(} z9h=Y08gQA%&B{%MvYPfKPQFnq);m65B&*+EXZ4p8 zX4mIvy_56#S^Z}I&t^?Kx**Ez$_M%;n$!MM@`bWS@`X;#BP)Xhy~I5dKhI}oEx63n z@=7JEsXJc2H_o@kz0>mrvf8ZzXXM$Yy@j3epVB+~m`j|QFWBBvzTjDTe$HBS(F*Su z`P{6TH23UT9X&z&IyJ{{&dFzIm9y+~^I9Y8nX{N#iC^YRWDT^HI4{q5SsPqgt}REp zc+WdOUnFa!y~qW5`N>+Dz?|xGC2Quwe3`77T$zhzO)9zgPj(tD;=zOF>U0BBAA8@!Sr*qYCmUUb{t5s`v zwqtIj*6!@S%o#m}=eAw_gZa#qbb@Xg8)bQm*;jH_ekZbEY0vI(=U+2>-MDx8bS7-i zzGBw2cof;4PV$p1XgZwaPjk-8Zvqu!lmiUs=X25#DCdIdS82Gb`|ru`#86|Fv3UG@ zJMY9N2-or59q-EN_f{Kj%er?={!B)zg*3mzb)RmWF4T2wo&{UgUG{PL zX=$r>+iH0E^iZE`+j6hS=Zf=9lpOD$kcV3>w{j80>+|ClV7dGo^7&Khv(rAGKczlf z?eogWpj){Pr_62p{-z6)oRE)9SufK{wKja`R?Mu+jTSz3`d-!cUD>XGoe?>D`gWbp z1&^6A?Plu^1+%Yt66nnp-w3qL;xFab5H^AdBmANHBVQY7*^0iI5A05*!aup2csD@> zSL!oTAzyeCR7eYNnhLFgo1j8ku!+`9P+@BEO;8~%{#mHdUi8hpEQ$(_|J*l4IQg)V z^`rEgBP&|p1-f}wZfBKf-`>>X0#lO)pam>vOuxiEl1W332jy?0Mvdfn*gU5zX9OM?<7eN1RR_`w&Q78uI%GV#e3(3tWC zj?Etm&-h9X^qoREk>%P3#leMor-5J=) zTht(%`5o>tYUWFfI^AEBFL3rdgc!{KY%#vwDk1*;w%CtZCLRR}#<4$~`un2Dx&sMO*sz z9^XXoYSWc`;xn~s3o71|pP^M(@~K(V%vc9l6-xAeJ>5FxiV9RK_?ua|(~%-cuAm$L z5u{gm#JJRKR`!`qlyxoZw(be<+0TFjSMs-?sa0+KoA93d46VA7&wnP&+RfrG zdEPCYX?|R{FRhF49UC*xuZfXs2I0{M{zXY1g8@e)!fV2jBV{;@g`TlG-%& z`_3jh*M1;fb@}clhRzw&@tww5Pqlrf?@iZ_JD4p=_2ZN)pe4=i`I+JQ{dC}R#g?R> zUwl6w`^-#jds!}Uo;Ht`!D}zm{#BSiOrOv+kC>-}xGVo%E*nJlRmXJ3rHvMg-FIR> z$U6*z(e<5vKbtR!PoE&=ODuNI$+6SVighe^T>eCldUTVwW{>yf@hd}^FR}3+JC-|c z#x&zUrCj=rWws>S!rF(^jsKso@W=eTpaaBN53(9&?LW#_5t%m9N3+Vud1n7Jy=W!x zPx;b+rURA!WI7)>)!3xUS$X=Z_k4+sQ>A0M>8!@yQe7XU3r*-;5 zHtXXz&B{qthqlLdW#Pza#0l@yd~u;_3dp(Q=gydR&SXk)QFw8#&MEmi9lDra=hXac zw!}!6moV(nnEy_$OqVVFe`BEBIhf>E)XPv2~ zEa-G)zFeo)tlUQLnrec-IJ-bspF$(pOCruoquDf#B~`OMUk z%a`pmxegP}4%TV&nT?h`Cx1m>i-3Fuj0;h7bM4kZ^ocO;EMsqQu0RXVS%D5$EjdtB zKqQ#pAVF?0=Ps^Z!^h}#Po}qFc5W4H&FVFlyw~igeX_Y)C&Bm5r`bmFee%^;En8*Z zTHiO{n~IuGv|qkBrt)JT`S(wA}mA?A*GkCI8dv)sx<#vvbRwmho*a zE}_n0dB9kIW(9eBT`~RRd?&k1u3Aa=-cRzwW6KPl=;3)liCFxjr5}+`x58@Vr}?&b z;?8ky3-gYgQhfEA-E|4LcT^t8odM5%`p!Fg%8-{$rWwcN(aI@;Ws}R&ykqlpgZTy1 zarsV^y89|&$vZw@9`dXF3HkC$P0OD+C1dYG-XJ&A6ei$ovnn*K# zmdExoD}72H9!p&Aotkg^`#X*A%66OO-p}*tR{GoA?s8h5DbRx{G!x$Gd2q4}uAR-- zSzvqb-KS~JoSj>jby;xiidAb6m9z3Fak)0z{6(HnX}zW2R#5ru*|{xiE{|`DS>`#j zbBpjU(>76B_PL$l(P0Y9{bi?Iq1|%N>y)dnl34EfogfCPe_F=zvpj-Sp4bkHC(FDG zJE6cP#}{>KaK+MjnqgnO5foVFC7m)21q*leF74E+5J28#od#$X7ZKjOyi>EPsmv=j zigp9(%1$k-uH|0UDOcN=^{qJX>O91Tyzyl_*hLT5K{F~bln>7#!huzo_%HYrcU@Ie_N^9n>Ug z_w3xhOjkrOH%r{p3CqoIYjjWsyCPsxX7_f&;xYtCnfK+rA=hsx5R$Oz?%U2Rng=YhjrWbt05qZ})Is&T!#$aq<7U zV$wN4kK`>V+_arOSMX@QJ-Z3p>F3AtI^A+?x9sB`GM386dLln2tD%dex%mIdJi;uC zSj6Nc{?=0+@}M#I08M(o?vRJ!;oE_HC9MM-c4PL_9mX`i41{>kbf{ue{AW95=$`D~ z=1u41>hFCI>-600+*V7P{zr5YKnvaJHKyM4c`)z~(n8(~`Rc74Rd?Pyi(Yx@5{=y~ z@tZoC^=6Rs0@Ie=m3uGcIU&pAs=EnoWqmo%-C4FSS6fQk%e+@Q7eK5gmL=mH+;}z5 z;#mul%!Rvhpv`#Rdo8bJvr=npr_6*a^Ll=eS(%k?+31bD{O5DocR1m_nFrMg8*IhB zrqXK@-tRhh06XZ*&u?`eh|87BZYROs&XX$x!<9Ixaj-u-hWY&7rXRc6-F z@@$X9@AE3NnGb7ZV7%YC6LF6V@p*sfT*8sXZvXwDa|v$lO{ZGkhk2|zwCgUA?~b!G z_m6o6mVt>{VYTj~*}47WS*8H|M-^C_jpXCmy^9xf$a)R?eU^s5^ULYm&O1#k3*Yh! z6FZNOc^?lBumHT`2V7Xc%I-h#HVpQs7a_Q#gx=nRHL_5wi`Px)l5TfkXP?3T#VjB0 zyo5laDc08mI+;YU zw|2;73%F{M`}iQ^nq0}b0u973E?=_iFv9`vKgop~uL&eXtvn zOe|YA=G{D0%pL|>!%|P)NrNNP8b~MNYUH{O;7;tmD(&L7!D?IO70V}AFP-!r%_T17 z5d4be-eZF)J{^xN)kgGnt9C|-95A?fTN^|c)?wI|>DatjV#52wV67eGwARlCE3H&# zaSzW?n5x8@VE)}!jH9(T45h7D|7mLYw*R@dzFXU~n$`9iYA5K@WgUv_J+wtz8>@EO zedlEiZhFDR%Ls^%vm0ukp$v3l@NDddrw$sNnU2PiWK&(n!Og*^AY1W6G8W9>G@*1g zel$2EZ3?U`;k!#|ONS0dX*vuIhppgV*B>`qSDNHh_Uk9@sXC`PvHPw|yd#?JN+6at z#o?zJgP5SWbSAKAi2TTmyQbvY_o61eqjK383~N@^&8;{lV~v~;Dq8|G;T_w~1TYNj zd|VTgfT^n&GO<0r9nLHR$#fC76WXz}#>J3M%=lQnt8uBWlLy-b$Ykr3T#8V2YJ1A$ zGWLZ3yd6;2`f1Iv>1O)HoNg7@(*^OM)#JN+r#ESA`CN|J8p|1jskS3*NZn>$3o~an z$73ZVuHISsGz-@KqDfUNmkGXib{@L%Wvf=RtlEO^oFM94s|$+(Q|0Y)nnq9?lSG$=S#r8SGmu{Ic>qPE^pl zYPdJ|R$9Dx1?FdRckjBPuI5v_DZ=ZL)T|UIcpv7pzs8oC!zTryg?-1oUk?@}uHJ73 zu~vF`da!7t@}3#&S-g1Fx|Q5_vXytwaF?aB8)UG{jl=sbc2h+0o*V3P%<4TqSTuZk zFAR34*z{f;>`rm%y~LxlW8TXdV;KsZY4zU7MAi}woZsb8mEzlbGgr_g?X64+SzY6H z<~R)Ko#`2zRU+eUfo(GMY9=g>9+t=w7lwtRvDC1W1<9JjG;_D$=|1S5dUmwNB#IydU>#3fCl?jLi8*8-ba-3jlb zK^((L_G5fs8_v8>27B6HEN|VKHI}!2h`iQINnsMOvYWT(5ZuVa;_+3OuBF}qL)2pm zzGRp2UDvJjjv0m>nK!BEenVa9)BZ!Hb-SVwm3ojGpn?Tsf#TpH_-W-5JAUZ>c&N*{ zuHid=Z>|tN?8GD!o$+P&W`$d>ESlK9N~ zQ2lT^#a=!b!gF0SzS{1`2;Wm<*&D5{Tp9k}$6?#$`%89O6Ta_%PI==yt)lvFvdc_8 z+1s&t9ETR4HT;7=yF&rX`asQ0?6PtNC&Guo%)~B;?h@}0Ls+hK%xsBRv(o#ifL*nk z+rC$i5mq}wV_Cw{p~=Nuw!TgHp%1)#Lyg{7E(`zYquX1#S@K63#;z;bFro#+EcVtFhnS_19e=Z84J{GT8vHEYkpAF$LWp50S zdo8__hvxNyKDqk)OT3SUc%)yZC?5}Xe}4(7t9JHY zW0HWkz|-qP;9O>Lt8HLe0^^q%2R^R zG`FZV_wJmP+gb&rt-YIC1)T4FgBTqon|MB}(#tjLa{FZ-5C-rc#tq4jWNq!rjB?r1 zaD%3bbjC(km#|lwAi1*=dk3(d14nZ+JCe&h`EJoWt?0mfMPpKM3lQ%aV!r2|(=)uS z7Q90RE{Gjpfxr8(CRpi9r=rlqvCF+fxYjZ_d`U*WwG^Y)B~R(n_!ztry=OE&y-`x{ z`waCj$E!(Sf%}f3>f(iq7EevAEO*+;RioUULz}sBT7+s*kCtpJ{}?GkTdVlvKnWi*du(gt31b>d^qv^% za@jm#N>q@hpRj6jdfTc!Wz{Uvdx~n=Q^`G1?I{stxzXbX-fsZj9$U~nO$*@66xn?# z^NC?hFYgm{udvVJF86+GJfWBbx)sH%6syT_mw1m3m3Es*(|4qPZZWBKv2TFk9N!g;dZ!O}V>7MdpQItuiXGFM9Wc7J6H?ye-d@Aqt;a4} zom{=#+kaT?V;Prv2M$Z!F=^KK^bSs6*6HP-VMyYN$*9<+G~SPfnb=z5x|OZeLz<~z zqFMIfVG|@8$K14%4;qHAn|-#@4{oNb`&Rlv!wiRrk?gN`xQy?_-Klk_L*geGGw#RpOydFaR1Z<%J9)YECJsM zq1c3X(XjLxPfD3w<(;qh$yLq#i-!e8n*Z+#tNn5qbq<7zG)wh%voe;gZI)R%*?inJtx3o0FuCgZeho@5 z=z4kP_vwA<#OlSnV2SV<_77-V5d@sKrQrbz5#oL_O~V+62L>XNz3#%r8R0=v``=r+ zdgq;1y4c>qD!^BCi8)%V?~tJ9)E?hU{PMkpL;WB7$NMMxXZq*)=ld7<7yH-v7y6I+ zPx-(0KlRrKdj=bVy@I`ieS$ZGeS@C_hX=<5#|I|_CkCek7Y3IGR|QuGmj_n_4+IYf zKM5}m?+ot>9}9mSJ{>+2{x*Crd_H_3d@+0}d?kD}d@X#P=QqMP!*|2|3&$0XFPu;~ zv2a1*!oo#`cf%_RR~D`+TvNEVa9!d0!VQHR3pW*RF5FVMwQyVE_QD;7I}3Le?k?O@ zxVLa$;r_y}3J(+>EId?rxbR5f(ZXYe6N@JmFE3tEyuJ8%@rmM-#T$w*7hfs9T70ee zdhzYzJH_7@-!Fbp{IK}P;*G_Ri+?J9Qhc}gUh&i7`mT4wqq>gnI;QK?uG72D=sJbJ zXLeoP^+?wXT`zVW)qPC&&$>_PzOMVZ?q|CXEFDxjxO7eF+R~$?cS`S;o-KV;+R$^B ze`3$sJ?HeC+w;qw^LozjxuEC5o{M@e>A9@u@}4VtuI#z0=iPAM-s`$A=)JJ_lHR-c zdu{J^z1R2N(EC>J+r5A6-B8}Uyia-G^0DQ!%Wsvhqs%jX4-H-2e?|X$eINCm(|=$8 zt^K$4tKP@`f9n5~zvm5HF>uwuH3QcUTsLsjz%2vUbw5AwZs`SnRqCMb{ku==Ke7M4 z(o3bM%g>g7H}Lkr&EYNKI|J_y99KS}{7UZ|y|)+N8~FXe`vZR%_+a3}fsY3MIPmkH zPX^XkHdOYi>|NQXvR~z($|02>ReoIgN#*d$5&Zip|BkF2RXMtHOy#)B36&Eo&vu_w zIk|FH!2Vn=7|eZmry2xubGt<*v%zm3u1pR_?3ZU-?z#fy#rGhbj-J{~oD4T6w(kWaX*K zuPeW)JY9LF@@(a|mFFriR9@uYOZ? z>O<8}qW!A-RQInQTs@@vqv~tLpHvU4{M7Mzt3R)vR{dr5((2XKYpSPL�bLJ+u0Y>eJS^{eAWQ>L02fR6nf#vHDT<(`u*J z&ZwPPJFE7K+S#=uYZuinu3b{Qw02qT^4b-(D{EKPuCCosyRmjt?dIC8wcBd9*Y2p@ zS-Y!tckQ0qy|w#l_t$<^d!Y7U?V;MkwMS}?)*h=pUVEbUWbLWiuWP@lJzaaI_H6C9 zwdZQj*IuZ-SbM4Va_yDctF_l^uh-tFy;=KR?XB9|wRdXo*50dKSG%QlcF!$Cw+-Di zbi>dqL+=fJI<((#U$AGf_mLA5d=Zq@wqEkgU9+OY28YX^^OEatoHZx#<`w4ZDe<=s zyl8cF_fVzmm46)ig*{?wjMfXm+}PW~^BO_&l((QTH!jq}IOz8iuO7r+J?!(#6bwe| zVKBGzUsd<1{*1RH)q`Zqu|{!VmY@FVZ~s&7E7M(&yy=Y%l#Aqab(i{k`g^@HiO-VQ z8=NTz2&6DPft1N8U@>cSeP7*y-|P)h2F5w z1K$Zi3Xws-r^bcja_oaGKMtV_8RcbAIn=$E{>P%eAP-8asPJ#{+6J&Q4t z$Ff8UJk|DmbN1ZhB|I}iHStiEdPu=93hMhkkn|-ln5!(I!T**RxiYHJfL7$6oaG&@kow z(T1NE+YX*lpIuuA5h&hpK#@M8QS~8Y3r@N!CH{O```!MX+ zlu}6;OR?tCsQ#(HfB_$QKr!jg)h~-KLV|A{i69wDngddk+2GOB%yc5zw5-+6Er{4T=exBlI9>4Ke^0c>btysHEVzfu%*SiE!{x2oF z#|FCnpsUaw77eE(^ZUD9L;XFjGre~0mTWm5?Gfua+%4%w3F?*VdXl<()|0mTttVyo zq9(>|7j*QQnN7XN? zP@&xD27Cz(%-FLKDTMz00mZxe{bBk}_LxZgwK3|f01mMPe~rxgqf#MBbx}WN$@Ga# zmjH)!rwuo}el)8IIO3cNO>)MCMT$6?j@JA1WFv(paX2T4>z0t`A=jkn4nug+C$j;l z3^?-`zsn1vAJWcLsJu-=g?e&|&7hKeZ4{&}rMtaKIeFouLh|lWs2wkP?n*!U5t4R% zfZcGc#K=z?ZeSuPyoFb3gl$*~uq2_B59FyxR)l-RtHd)ug)&+fLdM0h?ZG3=5bfzt zZv_!Z8=*)Dswwy5;bDy4`e2bPlU0cWwCdNrilM(rCL_{X(|@!~mq~6T9pls{i#r@(tsxi=3?R&zMqC0xd(6j~;aMga(n3W__;PLH zV5EUK#o_k+N|hB61>`*BpN|efLxj=#K^ZTI1nv+&wSbBRw`0)}!!n}D=V5}1n)Q>< z??_7k{ON30$rl=pnfTQx!TqPkMKrN>P$FB7iu4cC&{-Ce4?iv>4;<|$_jt)MucfGj z*X7`}37Z)+Cv29P(+`==xBOlR$`JhM|0=u3#N%-%KTM5VAi0!dk@;z1>O(_{(KtkZ zF;Y(i49sv*I2XfOCTLp%z-8hrDjR|7)YP zUXDzBGD0JZqp4zqAoU$BQE5FZ4Ri0gs5 z0Im0vGZvbBTnyf}@Vw+NOfZePaHHbii;Wp<}lDB1g2p|j7kE9nok%mRXU!nURk2cCoMe#ir^!MP)*jsP%4|qj-v!_0lh9bgV z9HO==W^cX%yy6UIK+OTr@mK1k)k}CpbYmq^L4VJrmDe!&OJ<+lLC_tPE zLvo;~Wo7;W$V%NF_3hOVWsnx>OkGhgvH^y2PP+`6p6z3tneE2=HEew5N#k`U6eS}Q zQ$&U%o|)f|Zvl32*5aPHcYc3gUq4Ut`ukK3g`)C)QlHJ~mMB z!%&`ECHXJXIIs{*wH>_K3x*o~TL<4%>w)H#GXV)5qv~<*C`?xYjd+cc;8GHbUUWI% zv36+OqNdWU2JUCyY;;FSilz@1sKzs3ic0czHPD}2xWP{_d*H3O2;~-?GOWk#$N9go zVtby0OEYMr}7keO{0_ah`r-4BwY)~ znJ8_ZbS>(aY{yca5WP?I-C{vHZz&~3rwxqc9?GIG?ynEfJw^M)USaYyGYSdG(Dtaa zveLS8Y4ksUpYx|dX!WPT`TY{xxM#kD5|(F51-B4IqdH9JH(>1<#+Y>1TMwOmoS`Ys zfQ)2sy+1D1D{cze6IbR_uO}X`j(J8wcEvr5NUC7ZmC{oiBg3Q%S>Nuf~y;7SJ||xKxJ6K@3)aw!6#~0oGnqO(jh#rMjhq8oilPLPPid zIaSx_lVLYy*XOLf#nzAq1q&5#L&OZ%ee?SJov9<*!WhlIGTuH=QSMVjQ1PIPeSQfP ze1{+G=63-U!IoH~D!t@P-#HTC4mWAhh$TLTks-uoZj8E1m31;_KK_g;2xk4DU_4Q9 zMh(Yua|)RUpgvR&O)Q@6!Nb5x@0c=4(?GjOpWwl=&A~`2bm1C-SqG>t?WVDc_@Eed zsEAXDD+0Vsz7~xLztrkYK7kj%GQSawKq~w;HOF&}ocaP>zm|2KGb(Q#6I|acbz=JH zxF0^<7Y<`Q!Q6N=K*ihi8rUW>qeUZ9PeCjXOFWF*<7qgkGfVN}8mR+-)a862!*W+V zu)um6CmvzViA8B}$BxbQq|Hgf5dT5W zNWe>h-;Lc0=f*woUP-uZ5UIm6mmvazZoqGpooB^sIhlh`5QN~d++QHTk`|Nk8XLe= z1w}Pa{2VGGIsHXhcY;mQWft&MCM52{u8%atX|4?t%-nT#`Lx|7b4N=>F-W~fAsoqK zabACD9BJwF z0@7gBkPx949SOi`;Zj3EcV3yZ@Kj<#tky~}Oxd2@3>m)j%jau8=LTYvD}ZK-D?|W? z<`~LTH_V3AhT$MtA1fX!fPTtEGEJ|8^|X2bd}~!V`jO9sNChxr5Gq2v_(8KcY7>)O zycYV=8FQkw>JKjHBQVE=%$`f8ffQUEoOe6 z5J5>LM?x<#mW!?^8(!RWLrY^833sEQ0t*_5b-~0sA^fGv zGjI*~Db(%F(_B3LYZI^LTb9Z%BiyH8VkFs2h{c=A@0X~el((}u1{o)pRH(lNKZG;* zu~TC}nw6)J#JP?%i&bz$ecT}!QufB=2mHbcolwDSR*GUi?kXITfnd1I+5{+cM7>YO zE^M~f$J9|PGe$!5D&oGiCf&VaFPSk%xk%XmcD+jNQmD~8ro^K(c&a91>A=D`f-pc) zFhnpgASbeha~=<9m`K||)zh+`3hdyLqGN4wP?_cEu;DT`3r>)eV~~JOmR!N--hFVN zpE4zY;1A*OZQ*&TI;O7~&a$|wCf2crqo-ac=S^nNE3TOsui96GI~ap{EHwIzpRvP+ zk9x2Ac3P4mjUeq1*h2zikO+q$ZE8E3id4L0OI3=cl-!Ial_VQch-cA@rm3Sb)G7a2 zl*fbwF?M<6XN2$IMkF6kHXMQ6amRI;%b*b5vSL2pGE%!@K_uBpbja`$hU`uG%5ze zlwCz+ikT3^ZAv!PvIR{n3nqSg3KFx;^51MgS_w0rXADup(-2~Bijen6$TNKahnJ9I zf?H$yVPXMSASNhMF+Wrnqh$kBz@gVN8q)Y=O&@QwqBu6yI_kx>gQ(RjPJ%o~b5phv ztb%!?Z;TPRO;wk}FW@%W@o|r&k z0Y|Utnh4nuva3}Lb!j{+Yui6*ezBmI-7!=P-^C_oRqNhl#xbZ7kC*VrvPbZ-opzP2ZR| zN`i_|(dj#fUDzJ53)Xb9{(8?Wny3ONQ_C`DXy{`JO(OcZ{#yq#R30@isq!axuna}A zg%HuPBF~wgq&oFuOyu;u%F3Aw5|;5B_|&^4g$Y?{5RD@@)?nE>_D00+@OjK?DwBTU z0$+cTurGjVQaoU72;=B+Of*E)5FN}$J?K;s3$___jmf;Z_F@?y%6b5=84ngLyHl45 zheA&1dNlb6Lda`WFVd{$Tp=0Mug9j;3&#fE112@U`fK!Z&6{!6`Dp zVwJeYImDs{Mv3)X;ecN;I^J!O)jfIwX+~3*DMXmMc5X4m!5?Reo$rJ>d36uxGUu!oC^|AAr1L(8VCL;!Yg}UF5gq~dpG6s z&=T`fM|S=193F@kntMcU!wC9mlId`j6&mg86ODK44bLLW0C&_1JW)kY%M(ABdtG^MN#$G`Hykr9Ht> z@_KB2+8i$?YA{i1(5Q&95VB(eCNdHzZ)VP^>to(+@#87J16bOc=jex%2H7$&ZG?HYN z&L~Z0y$?1vt_CLsOh%trgak7fVO(Y`w8UDPBad{X^M+XSqZf2#>J3pq-VjNtH>AvN zc|)l*!B(aXtv6(dqC5(}pvwScl!hymH1o+gln~jn7%Gb-r8*L26~)AA!_8G}@=;Le zj=E{f2&(TIrG>Of*O_o{n#z<$W&xR(=DF06T9;YQOk+lTPny*14Jpq3XD-Y1A03xc z%-m;z?mQ6pL__#53=MEZd#P56xZxH|$vW*W&&iC00G7q4f=#>HKr|}=QQ>2{wR+QY z%fHiB0HL8z3d4mO#M|;EOr^TnbB2Erxe+R?V9a37Db%Do7D|8vt_JGHBYr}C;+Wa5 zBua?wb7&83K&dP>j4)oZ{@>P`C8PmZlK(_$YVl-Bv7o+53eYcGc=o2PU?F}YK&W2B07B4ovZ+TsnPey~5B43b}0=HO_W;ri0P zT{c9dUW}(iY?n4}V&76U3ueTK5wO)1668^ zVC~atN83PF7vwO#2XwT9JV`C!OOJ~SgdnCMQah46ql_^Q`7W##I($2pvcagLq+X1l zPCS&twoju4!4ADCIzTo~q|^L$w*yaI*n9&lh#%7_j*Er_ZUzvfZ?SZNOsje{6tL@n zC+R-N`V8G-Q4%nM-gKD7q8whRgmPlX4$7OZ6ahko$0(R27KYN0;E2QQX&GjjT9^V* z1cE4|fvR9DK_R)ujH($rVyLEx#b7jTlOpwMqr-o*39iNrlY4S4%(5DnyXl1)8p#pO zP~5~Pjco<;C8QEE7$VGD3N=w@8OQL`}4JR^q1HmiLA^aNxgHwtHT8h~frs%%l^3*J*9Y5?x zg$&jXkizuB4Ll*CW14_0A897Vn!$u^fj=Sw0X;qn|A%fGE|0>Cj`4%J$@6Z5uZgLG zmi{O%Y4VJvI;%m=^j$g^oUp`LRtl}L;hbnJs>S3VAuXsub)&td0B*7xW5EZFEvb^}KE|yWf@RUowHVSk2pM|+( zFgqk8KnZ{XSOO6lhDPRz`a9}GfT639;WGpg&IC2Qg;G)C2n-b-O&ey$GJZ*`iD{e| zm5=h%2!5X;<+6orOk#RKyN1GIL#tclNmALRBge^2930+>yN{73?~aWHHmQNUXeenQ zAcsVzQic5HaM1M{BKw;%f{_PXVR7kAbE9(k|A3>F>%zH|1~BbC123?tx|7GHM%&We z+$i1YNiQJ5fN^spkk|yOT>i+nNW9Z)=IX)Do*3N4S)G1%yheb@Z-~dWH@7s&7SYk< zqSKEktu)R90492{pH&w0$jwP?!`{wxqc_HM6QJqdgc52%Dj}Fwt;eZNq8CMSQ+KKt zY%i5V>#ktdwTUaCO(8FZ2i5r8*+KH!{y{RFJn|E_RWLd8?t&$KshM>C48NN07SmQO zk(vqX#&j3VB*BqF7C|r)rFu^`BM|~S{k7Q}WOgBH9KG@WNIPnsBSag_wR%v6a>*#x z1C~M>GDp{)m@v0i^Ez-9g8rhJLD>?_oyoqSDH_7no~BJGVj69ql?gehbn|Nkd76vr zVN}j4Yxt6wf>{Rl!=$XQO1*?hrg%skS7hcW|J1sj*RKshSeS-0#tI~u?Xq~CgG;69 zQvq#$6wv0!t5+DN%}N`aNiOJKxd~eh#m^N4EsNFKtcf`+>4~`wTCj700VMd_?6ctK zTefSzpo+z~UoMH90%F%7Lm^()W1At~US*SzPHB{70bb*xf}5WR9U5Zz<-prEK0ua0 z`&Urj#9fiZ#AYuJ5+PsIXFL{wr%PW*)69-dqQC^<1gc(zC{7}vz*)wpN4450(ykmQ z7kR9-2q@hrxgjt`Xr6#vDZ`4bTBO45(^i*@=VZ;rZE4!nYyD-J^wsJDN~Y67x?rL? zwXDTzL8}AV4I@r_cRZ_2XbQzQ$0B5iFWlM<9K8p7z=ZR(t1gSj(hgp!m}OqoV8ViRhXAOKVeg<}~b>|Dr>6qOgRE z-xmnovYSDwxmQBjD?uoj70~qGz_ZP)ETc2pF6c~znb5DRLsjeswxhQpc104ksNgJ# zacR*i6$vZ;|1}z!I~$E@6B`X$#sQdz%Iyt@1Kmh$uR}U)f+reK7qXXPK%Tx$f}M$E zj9|k`HB}6@R+R!435Y;x{!HkF0$=6_AX>zP5tLpHK9jLy<2V2x`*uoVjk~0lyav-0`{p#V6hX6qaoO^1|ZBTVds zO~ivgCir(?CwJu3S++dYr};i~#U*m)CA0;h)({y)B32NUyKFy1T7_X69EuF!VYGqq zZCdNcf+^(Aeq+(6zuBrmmgAG|nEj*L{igPC^sK!;2Ij$EroI`v+$ot(vjjcpCy8+X zp9?XH6Y(0%%>h2glvyvrok33{!eS`!!?`J;j51JK#1-^{IURub@$-|(7uLo8S}6p_ zjglba!zT7ptAog>0~(+=Oq1R=LSY$5?N2lJKrWU@%#fyb7W zwpf7)X69~4%aCdU;N+cQu?~u@7FL0Vn5G-FK?7k)7!#rXOexw>De&)(CSKfGYQR$^L$J($waJlZF19!|H{8Rlw2`+CSf5l8xMFlIXq zO&u1jO+4*?43hnsV(^%@2jJ6M)RA56mT6z4!}cTbTWF-dZN^#1vr0>TR>4^Ih2HIOO~y=4fM=SUMXoDT7% z{st{hj3>flIa$x?Y*+|gz;12Ei#1h+CcQ-^P!Zai9F^Fq0r7n64WXkq_&6;sc2!?= zso0x~xPry@7ES0xPzRM!Rb~y<2$|Y@b~|ZprL#Pb=_l;#0j?O#v7$gT&J$~6Fq)pW z4Z@eg)-;Tkaj22d@-8NooVY&aJ!5IHq|-<=%A8B` z$XGsh^L!oB0b9|dS}>9BDnthc4GZPSS3u}2Q;Z5V)Aqr=_00U=^+R6J4h3z1vqw1t z72T=5h)IyV^?4e)+&4wkm7MbhRf(?hlb`>#E4ssNpbSWEFZ9;urxj`sfEa5;Hw428 znolzt%>@{);HLYv`1U^o{_#4aDmrQi5fl(A*f1>wt6+JCc6q*Rp)~!Z*BvPFb(hGG zOMIaKx!iFu4)Y0>!QAB28)t3d5#K;XTO^}uAtN3MGbe9RH9cZ1fl(psSo`_Hpm~^= zw%&7LJ}>#e9u^fi{~eu1gv9mXHT%%k869~<^QV<~FRMF2?PCmcW7Gj+&fFkn8c0@$W^{y@SYc~WM1kCpT7+0coYP@69g=UqQ-`#7 z+o@oB5qG;<&HnV>Y)J$Jv(iP19+?)fl^3u8L)q0Cil%oubbJnbjE~_+c3<+-Y};{% zQ`(ONj?FldJB`g+=n@SgNC%w7{0(rEkE@KFyGsI#d z9cvPobUXCx$R!1ny>FVOf8q;a0g;(M!vEp?M%Rc%)RXm;;2$L#as`;~Zl}YiP6A9x zI86c~LB4gorTf`I>enE6cZgLB7h_9arFNVRg0r73&4$3- zW?!uueJM1LWi}70y)ekwa#Yg3upbL_`fuE|1b6z$;a{}V1k5s;YP$}vAw-|oFmQ-5U1fSps;qaC zR3Y0Q<-1mGEOrtmt*%wAnDgUy7`+KC*Jl({Xbr@TnTSVQSSUE7(yZllXXwt)pd(-U zl|$Tp%__+|=eWBX9%vYz1G@Y_$?!+z4v4fAuv8<~V?K0&6laja4< z(xbOPmk!1A`Oglhj@w2-r)wbfWADkwduYgZ=D3I&0>b4sO4trNWPQ~|1oagA@;4wS zSWFFqU;a{4`RE=1YZ{LXYWq??u2|(^^0TtGZo=6PBDNH!oD&S5PaO z_vk3U8h~x74QoaRQO=w#cRLe>(>BTlhEX2UaBsqyUZ6EqugXE?kgT z&+ItVfP?4~a{0mMcAh?x>(W9T@64&E03Lo|!{m0Ww4-vln-NCW`?hQx%%z*>FSom> z92lTW3-mUprP~`>H~to&Vvn4ehj-e`dm;hl;U;I*1Rs%o=26XgjkrtZllgc=-|h9w zzbJCngvL47%~}-TcqoVcosHs=8R*Lf9TR*dCrZ&~kmzl{VQeI`WivWq&1{DsUE~j2 zvZ#0k^Aa#|C0@Q}6@X`3gqS;^g_8$Ih_cY*Y0narjecR~0I2}T3}0@&MHgs@F>O~S z%%sbwm`m$$u$$s&WyYdO#)B#bshB$fOIno>D^SQ35|#m0@Fjk{ib*F9KfPa#GPLyt zZAZ`)2PV}i75G|{24f*uS+ssaE`ba|3JN=c9VnXp3lzp`Dq37mT^99eo;jFxrV{4Q z;xjq?hCe#Etk|jvbMwYml}Uzu9JBl>sB6@Ice>YLkCk z72sCKpeh2lY6c|dp*y*mAqvA!?a4!?6q8>Zfh?op5O(mM5Vdy#f^W_ZAGWI)6ot{X zHdhnkqTAdpIBuvoiZ=1G%fm9HWsFKNM@PwF)Gl=XbRT%NlLIcQ_6(By!{nE9%rSu9tgx2;0k!-!)7EV4 zIu#7J2yNH^61FyEB;L+hZ4sfLAsg(kB&I-u(KKz9iNeU_k2Tc&-LfYQs%LoiPx zn=henZ&dABqaLc^26bqyxu(4&aB0?HigE^f19E3T8Z$C&!tlXemp<(qcm2Uj4*iN@ z`Uk?8kD`o-Z|8Wg={2_^xr!-TsY4V4jwEBs*@=Nxufk_u=C}jXb2Q!c`fW1SpRBOFt)B7!MMVPYID zm?+x@6Y_~PA!ZUn7^)4V|ED9~{IiUB^Rl#DFxL&qV)fauvWWer1_ezG_ge|0ZJp+Z zWWG#uP@6;I^04DZTTTel*$}dPFSC#}oM9kxrI%TN!-h>M{B|ipnMh7_ zihmBVF~q({jifrE!D{FnreY-b!h?oGZS`*9Fnt2|XvG4ALqYbMv0^GWXaO>5kS?b| zWQ-(4c+McusSox^Bo-QVK88qas!Rp9aRmnr(;F$simvsC1KR4Z*r`7!+qy)cLw}pM z_2($Nk%BW+@SEIktJ$vR+F$a@_xORohyO!yrRI3Dpx`ilN}lm>Rq)H@(7lTh*>*jD z{O_U@;J&Yg_+Of&!;46*lZt}fr2~UXB#LKnqq$fNM6x@4JPA3$vn3fMaPEXC+jtVV zLp@GhoQtf@pzKL^@e=2P39JIa7l^>`E%-Vpk7HjgBsU%!B=`Esnb*60xJQOgik=}_ zk2(qFy1z~U5jHOR!9eckV&&)~Taab_lUcT8k(+!RR~PlOokZ6?!6FdmU%wW9hf)lA zJ14oWO3F!AWIKhBO_7kdO{$*cxuBlrl0=-?x|vdEj?fPKO656~##GiR68UJ-bRFvr zisi`}bhXS~rYl>Haut~_bm|cQ(Yh<860d+Cjx021D<%?H!B({oCs~FFy5vZ3 z)=EJ53$yjOU;aCWXCOPBNd;4p5_x&cx6LvZJjG9*-7md07C=l7c;zSj_7!3ztZn#C zdF7J8NNV{JIRw4s-bgV^ueND0$me*7qbp%B7a-AMn6C$AzJNfUy%}$tbxNfC=vI>- zKe~g;(IXUKEatWG$s3K5l}PALC^X*!h4G%@1b8wqwSf7}jtCoM#k`_`=UG4=fMsF{)`&OQFr@#TW7u#c!$lMd*o9&x zK>wDESzM=EN1O&EdUB|5p$u%0H7u1OW|>1*@>d!Ki~(3izpM4aZnSO+j3=KJpCp~) zuq>)&HWj3HTF@}!3Zh_@75m#O804lmXtBeOa$4-bFxls4j)g|i$-xiRQVIzyp8}(& z!grw$!H$0cEO%fIy(xcKl=oYYURo`!d9YIh%1B#=Hja8mq4Kqx`2%u@PR0j7l_!T0m;RxGlm{z7ZP7|y z7$cS1V84{KTo>9Tz0k)TYp48iSg|MWmTk5}$32|d8q*EkJ;|Z>awV6a9Ck0;5_M^S zAmruSBaNPlENyBl%;_+-9w!L!|k*5(!~lW zj2ZW6M=6}6gV90E1;6fQ5u8Bj#H5S6X)T^^?B^%fvq3(d!-J8hqt;mA;<6F~?!$kM?UO^XkE&e~(&87q0o-|4tZH_0czV98q2^pa=X zOWogg{mHlQy?*^+>(Tx0TP3bjBLIr&2!lqUV_n=vd!l$Rho^eU)L}8ZWG?nOI4;Ta zlapU`qe*YMNwi1wtu(EFObBFj`ohO&|4R$O*ud94f9A|!vs$rME6z;+gfnLr3dP#Y znS3FprWUVANg-pjImvJrEyT)|cV@&SXbINc~sHjAACeR9FmV-La}4TSgeq{YD|Q73#m?% z)_;4+92k-k^{-C*6u(H(gpH%|QuMMP2e@}^qjedAI#Q~q)Tk|Wu$elTri$1F5Q&Ej z`qKJp71VJNxIq`aVusKmroD_NoE>|g-cM(kT<=wOQxKSI0k6*IrhJz~Vg$%0;q;ON z!~jAr0m-a};%~;ZuuUoRt2hv!##%K%%$O63v^lFEH(TA;*eV6UN8nLm>c_`xf_xT( z2K~0S09tL^FgR8R_8OJTTo{%3_3ren7XU*4SN*;Lv8YLkGq#q<*@}=$*Top^nJTYs zvRQd2Ytd^y2R4!o@RA<+rpbnYez<^kFa7delfCuJF_}y_yS2Yqrd=Tlsqsuwb10A~ z38M!&j0(YR7~Q<{xHlI=47w{n*t2S9cIXH#AuYf^>lKUQu(#h|+095YLE5==@>@~> z#41>?%7|y;;lX|fgvf3Rp$We)sfPx(Y^vg>4ALTqk~9EUf3`YCb5kK}SQ1)?I{KIi z`>qW%YMrJPR56paXk+);#F6^3reAa5E-yw99Y2f?IBK}5PRS=4-kre}Xf)Z2?E-)~tv^L; z+_zRZzJXoAIK|zLaO$Uwms$)upRj@FEctGr!ToC zcU=;QoQDL-W9jl9)(IYLZaX{ULT0xLw`Jd&N&GS`5;~FBW%r;vKL;Y%p2tFY9W(JJ zbJ>vKEz`cHXPd%9>Sxt|x&tz9@r0%&#+E<|)rFe!T|SCfq)5A_acM^cH&|eY2WUb< z%uyjn$e;Of#fm^gALi z$WppJMNFISn8?>)E>o~dn$_qOr0U6{+O~-Dzd*;B4Jhh~R5Rsxr3YZlNvEzENxBAm z>~ock&m_|bj-+PR#Po@aKb3FtY1c{3RAMz<5V|?g`3!WUH4UG^8r@1-zR-wl=A#2; zObd;y<{Vhz7B%}(@X$SVRY3mr*BHP5GDvPqk)M*|yjIF|awHEtT#%TY-z@ag^c!|A zE@~RULQ6=SfKx2O#gkl=lvx1$p}CtG6O0;Bv*>kH|AZENdO6Ijzr2o;Q}URovE zSQWLkA<)$jp*E-%^FF5p+EJv9$X@x1 zRAktS7J!=!)x!K&-5d8iW`7fpznA|5a|X7z!XmbtMBgX#v2wn3oZTeM{nt97|rkj3qh0!+>-;Hnj z1<~0D!0LX!Bj9bpuK)mjxFJ{=bku^C;2-EmiPd)r2VniHLW946qHdQjzuHxU4$ObC z4bgJ=prq~bMQv)C8IiSZ$_j1j+iR)_ZlEo(Ns)ATfxb@VQvgXsF8c ztW|-n*ldAhQ}jsm7L|0!302IUj`qqFv0VNKx-j8v8gC*t(h_(X4$!8qz@>y45ID%8sH%podPpdO4jd)h!xZYU@D3!fUuipj>}mwB>fsMdv+p2@#+xwo z7BGb1azBk1>HBgx$l?*oB6`Pf7y(!=0Nb{GRa&ILNZPcAywCP8uL0bYlO2lXHht5x z0zzW8ro|zXD{~vGzKRQS4GM}_BU@f8p@*ZvL|3`y`G?qx+(%S!qTS}{-JE?GJP3vd2 zJ_ez_K@|vNv|#ap9f)&+xzo~IwBOuU+kULpv|a{QZN2Qw1A^oMK6r6>!FC3H(HEYK zTK0Y9h{;b(+}IOfEVjd<<&Q%Pj{|)j2G-_p3|feVVe2ga5f4j4Kz1n7H>(op>9 z;-HoPV;ddo4}qb?{jdJFRGSpOHjs~p@`$dZs5IV@e!p(#@`Je=ic;K0A(mK`hl*F~ zHqF$nl#2dT>Q>FvZzz>urc%GrOr5J#qM%Bho2E9GOJE9?gz+%lN(qICqelk-dV1p# zt2~_H6iQChh7&MCGdn1d#>#;NTVmivcQfxs+C?t6X$!B3gZfl^)CMc$YsPAx48nsp zhE~@yBir*xKiMYPug~q_dhzK(BI~YzxT=)M=*eDilxo|Y#lhNAL!gExcS z)+%)@+e33V4nhD=Fyt75wze5bpV6_c&M|kP6-Ih5=EMau0TE8&JT_qovI6aqVVe@1 z61tsFTcHLG^zs)xF2P_ho?Cn}cTa0d+pEciBjpiat3}43iUHfQ&%dCM!|#ri=L09J zC@iA*ETXV|RBGK#Qj%zjj`f==l**{s63DaJd{AEPNm!l1l51sC5o2;~-IZ<85FQW8 zLX*A>z?jZOe<+7X(+da*=ZhApn3hBPf>#lmjya`i}ZYnW*>%pMjpwstvDvw3Z?rx$uq|jdZT!x1EZAwD?&rdf4g|0i+sIMyY4Q3ull#{mAu z#x|%UL1S*yMdpau@Z_<;J}kCsbtn0%1xVf6v@wd-6mXHmX4=HiwhPJS7}MCEA*!`x%_`JhqeVZ`J0Xu01;rgXq94W-$Db?LF|_eZDIk5S@S?I^{EM0X&ZJO zCs=PPGF&byR7DA8XcdDF71=Y4KGt{TMac%$^n*TE3)^$HQ(8SOz!02fN7BE`z3_4P zFC*pKLNFKzT{KW~+RhqdF-O=F2pAh*?J;J#_jaF)B4GiaQ5UezjMjapbC^d^nAS8a zuo`NfzbPwaOFKp!L%p4UWC)rl*!qH-@Vii}$gqXfu%8^v3HSTymN=bbW9!AZ(UwSs z{V+Mxpy*OXY}=5K%_DX}Ai@=tt=jK(mYg&)}4Xt%ZUve!{; z^@1lHlB1`G*jujYQcR?d4?u{?xb8+jI=96SAc84xfowTXvCk~oP;CZP{}s&d{Kcci z0t%o;et#A6}|LROI1GT$1z___R7J1c^Z^M^2WuHq^ z&*eo7wj-@<_6lK~Gh}Pfj!+=9#W#oz&B10Vp~|xjO6=zSLk!Q*qtCwyN}trnhTO@_ zyM{<%L|$}qfD$kt3AKsQP2NJsKY!&+Zf10sZDS5*0QyP8b%rmbZZ1R$(?Rn3l{2-$ zHPDnAY`aJ~$g%xn3M~>>5UaJ`K@-RlJ2{;#?9n<76gtu!9ckga`{!CALkCQptQ9v8`x>D-1tiHOj+i zAUfBL4MNslmqS!L9p{z*O)~8ei2ToWiUKd%*6DC_v$BfkDw+Es(9>Wj<_qq^HKvm$ zV)q4i%HZa`c$sS-S?!|;+~*q)3>#eR^w;qLgG5{ns8RV`pUZRU9s$z-NG!E92+12J z=ZrX5qaBJMsLnA>f|*|33!%H*Zfa2GSeo*ZHFLrQS zNCVTh+9va$cFZBS3E74pa||v_p1nJretpPvNohxi$s;q}eA-6xRh(e6RszfHwVRAY zikgjRE5Q}k;( zh1D}qG5>C_olsAV1QTT2;W2J$X=7Giu};=3T8oR+pX+a zM*EY+9(Q}mjW;@$`M~LR4N5pw;KQPe@U`9)?$GsZE<@L?fLps1INi^wNVn}}wGBUb zG*U!HTh6*fml8Dn5HazK|f7VOx zOrdY4z1)^|>t(LoD{X0tUTEYe6q1{N;YO|lQtc>%8PfgS93l&v$3WbMe=DkUq#2?T zhJ#pg;@x&{XIwxeG3A1}#eX zlSfh%>yQ(^7^@>%ISOs74zxakXg!=M+atu?Z$W7~W(>Uk$_)nVmW2>nGICMM6KP}i z<|Zbg#pufy_YKJbnQHwf$W_u+ z{vPn6f7y1TEBVl}W}&2PIT={i(Z!5$J`R%&=WJBVp6WA8CMc-5OKYTPgQhw%Wt7T{ zuw*F19XFJLNQW|x_!GRezAePV{h(%(rtg!6{lrAsK54EdgAq5nPuh;lU7?)_ZBu!{ z>W*AC!bI#Gw6inXrgd6PR~%?~W}P&9*K=E?bl*KKhK#YjrrA{RE+l!h4e4s$%~~N1@27h0B|mvT+w|_p;3yu! zbBF>#ZD~@MgKjFHRe;mL2uHmvxFH@AR)lk8#Jws(oTn`o$$A~-2TZ4*8eQ9K`k;-v z&NWF2cq6Rt1=_gB$tJBxY-J0~i4Lk17HQ$1d9!>LaLRgz7AwBNK=Ir2V2RbB&Z~E&<&fFHMXuDood!Kf^lIDevCk1dzTQeD;?(ol}u7M%k<{RG>|Pc z3a~9iw}cWTgM_7GSx~m|FwPnLqJ-O4O0)_qBHKbNpKwE;crpGF^=)!!XVKcE@Psfq z>*-VqAK?lBsq_V?+wmjp<{8a-i&vZAJXH>V*Ru^G8JJ8l52!~nG zi{vk$19(r0!!0ASvcHA}Y%rvKexe5H;&#qYa!r+0X{1#eMZQgu$O`(Cagn>m;7S%8 zx!_gTUdVHTU*tB~IMQw)FTgeccSm{4@Z}m#T{-y22?~oSia@jvfQ3PpoMD5^fB6lD z{PL6yvb5LQ((X?6!TYVWzjrgLY>^)`hSKv=Lxy%RL*|@bU4K`!Yap0YybE6$NdS z_xrECBTk&mECkE@UKP}d*s;g8*Iv_Jdu<`9MaH3h8E9RIQ3f4PGOTzYw2SRFL-=JA zF7}*-SGJ!F5X0mStW}P|NfyMF&b4*XC=-!H~_HGt-JHP5$H_0zxY+5P$ zYr_KC+z*JjjNw!XQ(GLt0_A8wk2Vvd;3?R zZO%Hzh>QboW1aZMgserCVJsm+49t`|6I_l5DMar|Igl4gWVPpxQ0rhNbXq+NgFroF ztA*7p-Vo?lGt3_IbejfQalTH+S3~8Vg8TTBJX6*N{ePXLOD!_WLdKB>7^vEZ%~{P1 z_i~m!wX3XHkKa8xA{gx3f}V9XP^g>zwx8~C54>48rUm8pH=_13s$fvmc>)7Zu8-O; zv^n+01wMg1Ez-*dj3&g}G?Q{*6mDrqhGQLrmp!gEh{-L$wLl_-O?v?DBoGyst=Bq7bOW@@Kj7YBpty-z*~UG9VQQ(ZFH(!UpZHu@0#nW66Tm@Gvol z%G42DXp8b5F)HOrDb`Zx*OEL>3`!z=9ONDeJiZrb6@gZMH~2UyX+}j%Rq_jmRm2Ko zZ#mfF=m&3iKs0dLWwd_RRAVWWRk(s? zPk13BvJ7arbz}|t!jliPQ+kk{K#L?Hj2;JcM|Rnl+8WlnFP60{LBk>)kM# zWGX=#To)BW0%<1;Q@fNq-}kO4KmS66&@lh@&m5z2D@G&HkT(Uw5Ak>tppq}!wzM=P zmgu83XA1J?*N&Zs&@yuC##0MgW+XB)2~=H8wJ;dj#m2>}C_i6`tSiA93h#iTbG(~* zD}X{4v&$4yFQBy12w9w1mbiH#tG`_Lsy2#s!nuKv&$g81gGksR+iucrFy?cE_!9yf zwGWDu!J?28ye@#PYX(hTkme|`Z|Ra5pxB`vFr=u`GUAtb6CN2(v;YLfM+R1jY>28Z zL7^_G!Qv<`(bXV-3~;sJiCVQ56us<$vr)UNM1V8#fn4h*%CJ%chQm_Q2U_+aMrh2s zQHUs7`94#7()pKwLdIm!44fYlQ^g=OQMTR4Ba;f=h(<7%s!sQ?PUBr*9*U4cR6d+bx2DKh<9}Zkqt9#;$CS3MIMdX7b013tl16JNq!<| z)xjF`WCx3C4Ti-~W!FLQ0+F>q&G{U91JB4BPY+*J9eKtz$P34wHlH5I1_dDl-7bpN zQP;t`wu|~34tZy*^u395KY$yH0})AjRB{20neFmoX}5oOSUBR%8Fl2?z1J%8ySO<| z@|h-JmU*2ji6=$$M_|Tr6>uqyr=0Cd-t5Ee-s4`H#fFC5 zJCg4Zo6XWOe1yq&(Im=30|iVt;pnZrXHBG_>3rroe^7J>4a?Aq6uetgJ;5ch=w`Hp+syPUt%!1fbVQNH7smJWyimW#re z@B5W&NdlhynweG0>1(XiNArAo@WEIoz91f;xXdfo-mZI#dTB&O$(-LIgp4O$eSQGg z+uaxdPdC;Wcu>#$cT_!tJ3?NNpAFpOv}M}3KrGN`Loc=?88%yjL>gY>$hxD%|2zIo z!_mVK)#6&cJUcy>EL+ZD>D6o2u3JC8;h=*LNxRvj4t)%N9xd4PC*F+_%wy(k)Sbt3 z*z!6Os2OQP7)Ws$L<;QVjU zmxZPCgafHf>sV8idpihHW~Ibt&Kp1eMd z>pbSz*PMwsC=2G@79jtGk;7yoKPnS`jT{Dx2sPPINjuxBrj8>E#}sk<*SP;QqArc3!9qs{&~4jY zb9WS5b+;vSC0Qv?#O1RN5>(=^Ou*hEa;x=E19qyRonNFUj=qY$2A#tOr)lFOnWl|{ zWgq)U%070m>|-8DS(f)}BBr6T@JH4^k_zyT;e_^J1?wJ31?#H4-ydG?k6fIkrq8um z9$Bjg4q$02xbvt#qDNZkIh9J+Sf%G!r5s&*-NK=+ek4O(-R3;#0$8njBo(YWkYRBH z?j{eb{2Z>qU;z<8<4*@uwZ5}leJe_0Q$>jV!JnnWo=BD0C{l?(>r-gQoD!v@gm7@o zW&nB*zhYLuZ!D8Q1Oa;d7U;$1t@+S1owqUxBOxT>@yW%+iqV#|qUfTinM9vL#vEJH z4oY1MACgKn9~+0#Vfo2tcZmeDk8)`-bSO}j-%4yN#RpM5cl=4R9V7%IC()o#Hka6@uh@QD^)>D>6Fyf$QvYCB|AF{##e+yKGhratv88 zznGO9B-`^Pim-)_0I0K&`szqL*&+V`F_+n zAky^qOCr^AK$K{aGz1Cy(?>PSiTCewwr!z^1z9R^>tWOmwk}w;EL8@2K(y&RX3}s* zSV#Z}!@>iiPO6drO^|d;O&X#fsQOFog@6@JE=D{~o08mLX%7=y<41t4cN$m0z)3hF zhqRnpKA@Sl~3~4zL#JB@3QSz5}d>sS9(od2mL) zxsm5WNC*JPaI-qcUDW}F05u!!_mthN)6}mgj2&!v|Xfz zhur`SN9QYzDx8s+oI;dSclm-&EpwsQGi~`ta*!RYC z(Vu$XvTIc43+vd24SB3J9JcbAJ*qR(@3Y7AOY9>Z0e56qG(@7$$8$OMl6Yx2W(ICL z&5<|kX;OkbQYJr$_FJrL_-c5ZI~RNfQ#}IBDaxZZ(fo!}!+aO+gsu{w84z`JhpK_f zDOfW2%9ADhC&md_m?L#wI+TkoE2jbT7;qthBP=T&gM_n78)BnN5(*W` zcAuLf10FXrY#7Dk*3l>qvExaKsx4YSNRu7~TUzZ7e1k>~nj=@SoV_j1&YHL-Sgiv4 zDPDp%g~<)qQK+uZ==A zz`1}R!^@+8$R90TIG}C)ZRbl|ueCeG7B7$#QymHc7%nP3chO0P5}JnjWu6baWn$J# zTP8?T&XB1bhETMvP*BvNg^2x^b;DH&@+((u+S*fIJ7i@!L?Hute$f3Jh02G_nl&;F$5aLUzQ;V&&-($CI4<#4Yhr^sI7RwVGd|4 z$@3*sGCo$ZNuAtnOa)6oG=IZu>iOs22)_vPpZFk5mqs4S(Ikz(hjY}jgL{#dZk1B7 z2t?1?;gUO(P-DZ=b z{Fdg8(t$ThbK#yhO8aJ(tVQN%P^UCUTlJnTLil3Pz-?{IRvqZTge1#yT{59zvDEyT zu!r6;sATqLca|fVFMutEuP7}*(_Vr=Vbs$eB$sHnMu|u(+E;*r+oyZ`I;q{s!Hy7) zTA>`T%nVkLv$uZ%3MX<#u*w~Tj+tg;`Nij~p&Iebs800s< z1kFVnJUx7JlmaQh5^TwLxmCjj+?XF#xzU$)jT+k@cc2s@Qxo*vJnd_yG8#Y96MfdF zBU~rspDj+s0h^*b<{Y+UcUa6Kz}5LVPeZMO2C z@(3w(tvfG7(}AQ^UB&p~;w*9xU=G6nNu*atG7uW>6W(j?)s z4E*(g+rKvd+^e_Sfp?B4JI)Jg;KnSRLMd?a9qdd}aU_1fksoc#CQsIBJbjR#itvez z-k)fz4+e6U=hlAr|2^xIUqyDarRxrJTL=MA1Zf0DR>Y4Ct-+$apI;nKGoLZv^|K=^?4gm?wMgEujg76x@>bP5TDEmfKm*+B5G{zygk1IR<3gwcH%hS#YAS~`W5~25 z!z4dQXHYaJ=5Q#1xN-vM(zZ&}pNDI!w5>7&(OaHIr`RJq)2>1ET?UT!@nhEI$*ue8 zGPo}cf5_b;2crJaWn>}W!X|B;RK)S zO~HF`Y_5PD3^K!7R6rZR`fLkk#>18RK;8Fv^m46(Qx}o2G1?Kf#hd>9daA{J*;V8w z(0vvgDXo4~)eG?-Us}MwrXTnY=NI<-!D`Gv`Z>b=EC_s;g7^yfhU`+ty{isYaqqm$ zPBchdTfFI^ANNk-S+QUc6w+YADHV%gUtV@iI4>jamKm3; z$c)5kcZ%%yvTN;so*BxPGKQFDEtF-e{daNi{2;b5i%$K3)H?rcD5r65MZjwU3|R0( z1;DFT4KRFdpi=Z4TtTrA$p4VKUH_{A@Zb~T*?-mmc(EO102BV40q`EwQ9Vz`x}^pa z_GOW%5MC~F;YqZ4~s z9jd84B*KgKtK;YlES8FNL7ejgRW%ZZSTNdl$8H8>sXdz3NhQz$R~oHhi5mGHV;VBJ zIBOnlz@1EX)UrdwvRfN~;`~~(S3CxJu#|W-pOtaaElK%k1>&Oc1IHs*+Ozb7!0oQ{ z&_0MnTD3&XUzXGMWyQR39XIZDYhZ!(1RTPH<-~ML-iG6)oez!xp~A26p5v`X+vbty zTyk?fe(0KLMtS8|a&D}F*F?s&`r8*seuD?9714viR$_Mw+1dbTv>{R1taBJzsGRV8 zIQ>Gc@iSK#K6_d#gOvoKT7F-+O&5)ld}K7mj~!~ZOvfu+Uqs}+uAKaQeTpEl*w0e|+z7$6MIxx?*Wsr{%&&1X^c~Q@?BOkR1c@+Eh`cKg?(V za}@)tjC+}_d+=p|Q?olo6ax>i<};z%5H#A4HU+_s-O2z3=@ngeq4GG??{i7uCr|rH zKKD~~ZaQ}!%hXbow2m`WzWDml5ZiaQqA};TxEG}5;9^em$*)1-)3jEGb+TxLwBd2* z69N)zgtXn#FLfnvfX1IxXth^ggBzpC8)&vtNr;y=#GFR?{lRp1lyx@(yoWjRs}q39 z>(+Lc%kI1uG9F2kx}9aD!?e4!oQ95!F44P_kVc&hCDAxOg;aze{zX>8qvTC7(>V%2 z%<&f#t%K^85?w)0<;to{~@r&7%^`xUER&-UXlL+2ikBO zDoHpFsnfv(&euIe4w?{z@!SKtf~eqkI{vge9@aIkRq?0RH^CmX12&)%H1Bj;C!M)s z2B3|D6HqhQo2K1|{a{}q&kcd@4_fXJf9#1^h5HC<*Qg55C) z%pto~3-YzqGD3e+Tkf^woy3C#Hnrp?5R^6Ugh4787WeU?kOvRH-W3tw#2LVv5IWJN zC9cUDoD!&)lo&!%Fz56HVi|?6 z3-DTFF^J*;B4=^8I7yq`2dKQNbV1I@f(WTxib!CaGrrLp!h{4%mdt6~NTXvj3Zmouk#TA~aCMwcGS$bU{Hufu zd_sQ57yL<(CbM<^x(b*dxCv23QLq@uu5nO$^E$RC2wZK)DG8ZA+S*gp)xN(-S!F9KmaB;b#pS}>mmC` zS3KEn+Z`5qHX!Z|L$c$uhAvF1DS+mofSH`8-=XGO<-Zzbalc9-rCbXU;{ z`+bG`R62VL{WChK&a%P@qXjXpv+y}u{6FjviQpAzAhvG>PQ{bd779LMbbzHKSAIpZ zG+b&km+n;EJW83rJyr$lbRNBa+O{@xM zMu(J6l3y8l_LRWn0vSY2cGY)jfQFWn|i05p|{#J~zzwVHI6jg;H|-&C>3Vmd-*ErE{u6zBhrR2$`Mo`w7f zP)^IwKj*C4Hg@A!Hra9fbC0Cnyy3pbr;&f#xVh_bWtoDhZDQj$j5z`%Y|Ym{<5ax`$DNuE?ZFmsDq2Ttn@S!_IYqZ`wzIKx2*}V48X7i62+VEhBYSMh z5~fT*0!O6Sy&P#v)#6p*Yo&GuSxk}dhPB-9hh~9ZA~Dhr{wedHiqPu%JyPwr0gwiV z)8zP5k$kG{E!o_H_L!diwqzL5=*CP&gVqaZts_Q=NGV_1z~Ro7pdr8LonVXM&2SnU zwN*hd9O3{XfvqAjgsw%BceGQ;+#jLTmmhsL>~hfN{zkW9^nwt@>qXimKtdE6iU@*i zpc+jRk%kqu*O}Il?2JodlLjoXx5w?j7SXuThz5G^3~Wdzw47cMq$oPAXA#przu9u= zRuAp^hvd?xI3$1%PIaXY$08vL(1K?<1(r=UG|Px(smATBCEXNoM4?bowe*pwS^9B* z=|@`nbX@wIB$9S7R5!2l^h(v`|F$DcZg5<{i6YGX5Y_Jtq@-QGxwSV06JoqT7Zsz(Acg^u+5!c32toGUJ=v#geC zD(po;&g~R)yM2y=+c?uBaG)nsG$A1XoV)d+h#36NcZHZ?vJPa**rD6NfC*O%X9QVP=(ZbNEdo3cA>%}UL5@~#oTM+4IQ$8W3) z?L}MEli2=kf+F2kgy`qkRV}w&4;@tK4skZ8CUE5QG+2VUwk#k}1EEG(v}i6vdGu@n zQkj9ANr-Mfii|iQr^BZTV-a>1RRgf|&z`eHF;LUum{KfGW^Lw$tq3lQ>IkUgLvLH6 zj=)gWjg280G62etD+W2ZOR-O1D5{?*G7r-^=bEuEEO2Q?C}ji5ckEGt&R_uvM)V3# z6`ktNQM7c<`P;Q{SfQz;ZPQjV@6eaeOuBVL<~Hg4I;sn#C6{qJB_I;bN0Rr_MHMCu zz+vEmvb40MllNIYCS2O-U2rq4>p%iOkwsG}2J8zsLB$7SantQJ%ssDhQsycJad4^zro=KU{Oaya=Qwae{LY=$<& zcZuobhC&qsDMl4A1&&=o%*9QtTRKN7{l~yVv zRtcG0>*2F+UA&CO+wI5jE!7J7CNwU22l!is2wz+*_KWK{-Vj6!gk+AAcZG%=CTj2w z$u7;KO~ZJ7v9AEQlhuXCFj|TK%}v2-@D;Ne0uDU6mMWy2jE80m0*6sU$uEnC@>6cL z5N$|Oi3bN5rY&4E_%sYnv|YF)G=?Mxp`ez)K#~fXsDWXM>Y+B}doEe(!y;0H`UhsJ z$!l*~g77se-IUh&aJp&Etz|bw%6FU<=4YNCh5NcD?1x#C>aDuM+gV!$6 zYfJ(zXQ#{wRfqP&^MN{YrH6V`g3OR9q8ik|U=8Oc#STPb!knW3ivbrG!;PFa3-Tc# z#gpV;az<>!sT?YhH1xdpvc*+%uZ~7c>?;$S6(F8&$P)K1R3%P|gB|S`YE>AK!a`z{ zGJs5h9dsDNEX$x5LIN*@#DhXe`P#E}tApc#h#J~7%#Z)~hUTE>8ZpBse9KY7m_aHc zlMs}^kFhsonSu$aPa|F8t&X7Ht54AfjPU~djgA{Aq#UzHVJ?O+D_G=u{)Nz&yom>0 zpFky7hUTZCDQMxtZOhK9ktP!Wb3U1oF2Mw2oQ$SATe3Q6=t{ACOOv_pZC$~rV*wFT zT+?d@(42-b~OE-bR>C?431#fbx$F@TH{h{R5$RruQ*0(!umJ#l_;{#FIim05)O z5G2`}S~wTBR%EWQ%}JaEKO6epa)#w5S(6iCGO{DGPE-&fx$Js)^TO%^gZ6)D2Eca8 z&oXtsgF$|b&b`^}IDa{p=bvh|>M)@&lwyag(h)cJjn8fv(nnj3K zUxZ2)k3}!G{w`(RL3Bo=D8zv}6#fW5P@WB?i9bPBw@>31jf4_$91Amro+!K+sM<>o zwq^k^wr~DHGA6Qv6Q>Q^DqrY0Y>YtcAtPB- z)`F8P8eGX#;I2@6;VOZ9P1H2NvRG^~Ey`dnIwAr>|K7@w7qt;C;yMzMSXZUo%`%JI z=L(UT)BXYqfTvA`v>~Cl>Ay$`1Az1@Oul<5MoBwBqEJMr0YrD*r2RoE2Rfq9NdY)4 z46$8F;kFp1ME0T%DcBb;5TMK-O4}Mi`}k5{54FAMuW@r0=EXOmJ;W_N3bITmgZ$8G zt66|bZG%FNDs5uv7)APZ*w#)ugTVw~I|Q{Xf}kcagZ6(sK3cuKb_OQK8T|ShP%~CiD_bT_r)_$4n6{-DvLbWgwM7sM!jXlPwt{*Pn!`gmi zbSuC4KJ4%H{K_Bc`Bw8FQya<0St#76ovq40wkhXAUV;S^l4xPYs%4KvHdlU+E3eYD zundFpk}27@NI&!XL@1``K{RW`zp&>H4=ke8-EhOnLA zv?9%$;N0#_1$X2EdZHT_wlqKw*cgI9m-QP5E`Y@Cr z=njjvVF=}a(6c)nlL`Bwu3AZ1Wa;R5HaxIIX7pY;ooVlR% zC~hro%c_-jrqhnXF|`*F8-JR5pjBd2Em5M8lD*^=?NcLKv7H1e89r4ZIY#F92kHauAM0d+A5(dDw`@WEw zDq3-~NH}HEmNP=vOcrhoSeRN0S`$)#*m~|f$3mMiTh)x_7M^x|CZ^xmM*rO+`PnGC z905$|(MqCvm)p53Z9&{0W~*t4^N#!>9(0{Y3kN+StG<68Lj-Q{q8P=!;&PQ-`?QU` z$1-OVkyD1O3kx@`1!511*$7+{+68WH2i_I=b~kjaY~2<7zZPh&WJ(21MH|)b5*{WV znnMBuh}wrGYM7?7s8&`YYFT4|tfy^B4FpH25>Fv+F*ycR(59Rk$(e!;YYD2vvX-y| zuUZ3+4`~^|{uDFOcZEk;gJ6$beY=TNXT|qEkhDm9O;^_*lfoZ82iP>c{so+jF zXTR0x(*Si6B_a<$ed?qUEllHr4J}q_BrHKKA+{f(0^ZrSqBT8bBxDQ2{K509XOkNqL8zhr#eT+@tDYP}eElV zx5#ue9WFf!hK*>;pJ0@)a5M@lX=^sJHB-_wcm|;!QH@5Zo84ifh|qdZY#deX6Xpv3 zjtYMdkT$cYM^_BKMw>fnhwfHrG8nYdmeIO&{g!l{R>C^Vp6Jfhbh#$Qgp8G5dRYm* zSz3BIi7ygf!u(%Mc)=?UU+7fp)C(`&k^M*;BLhOsD&w?9;zzU$Fi@-)%9(_rrM{v6 zmNF^Em;7gkXSMv*Y_Qa5yB{7htyEi7ma*^8mV#MBP0mbI1T4H99jsayoE$NCIw4Tt z#a0%ff8wKdX_6~Y5f*eL!SHUfsAVz6rOGhjLXYjJBpZH);I`aHMDoNUFq^RczyP?L zmp2pB`Jq4^{%;wvHmCawwDP?uI_90P_dlP|=@faS|L6d0E$ zePFHE#G#brJY)MHBEPEGPzAGD2ISZWnfLuun3w*V(KPc5`Bnu%+QWNNbxpD{&iD+7Pf~F?T^W>Qj*jFGV&IqG4 zKw+aYMd!_kwu>4TK~4B8$%Sj!~Ne{6KA1v_umvQIL08Ix3x^ z<>VMatB}F#UYH|EBDs=>n8y}!29~Q~^|P|+1SJBT4-Hz_?Gm81)ct|BZJ>o^_d(k> z&?;#WXgx@grAv^G7)W6vgWWB$-N86DER>1^axcT4j0)ofaKQ&#E&G$j*m3?XDj7G{!+r&#* zK*BM;N%dJk!bxpGiNQ6|2Yr<@D>^E)LMo92((Y=b$Vj$W224Wbou~+{bhWn(hzU|6 zbOhUuyg=n;1d#p?g>Fd>N1zwh*a+?q-6cUzmaC!VtObj{5Cak2q-8T&lhPy90I{2P zgI!bG$FgMs0S6C#HKUeMd?>$B{9#di(v7Fk1#A-vNx24O1Iy6LB>IdQ>S^XdI;R{Y z>G~?V>;ql)V*fanK8+|~UD{;*NP5lI<--N?JG_ENt#ru72J{&zDtC|#g9d3l75G2B zboi>dskNJ?p7)>Kb(8bL3)bRNOHz`W7$%n-EnJdrQDx!b@y6`nl%F&kPdB9efATm_ zz4vm{y@wZl|i> zk`u!u(%fS9UDWHaU5=N*&v)_d>EA2GrX@6T+JI10FR{|tvADP?y!Pf|nm_>#PU~0B zW#h?Z>trXlyceZYPJFy`U|#(KfEO#-Q5T~c_m>!zm$+fQa7VfUD?tQ=hJ ziww?$;{5G9TsT@7SvcQYafWZ?JG_wvXJc#VY~k^09r`Wuxu#}(J}n3!zR2IZVLd^Z zD!y(m%F7$P;SU#xYZMtK2Q&B+Bhd9C!-<0#{OJ>I!4)}98O*_n5bFhqUgX$S4#Rb0 zmm5agJk!mY{omgj=Bx4#_^T50`@UYwZ#*}`^q=4K6X)RmZ;@?qaHi6fMRU_!hOp^b zvyK*Hi;}Tf(yk6(n)9vDfM?+x8!^VeQTomd?Q~|PCXPsoFsr=GQ^iS4nX=_p%3rmN zN!p*2#Dk>m{#I_??56myuUAt24bT}aSgXrxR`r)`zVhRN|eRogG7ZQQ1z8=no`kVTw*E;Z-A zA=vbAAK}uN;|Y*rCWAfKvK<=~JT3X0L{^w=Eaa+}W2M8^7xhG)$moHb7|7X>+9bTZ z(TZv(lcEkxZim;)#R7t{9BGR>p)*L-a0k2rH@x;QqVgn8Y|hCnxea!i9nD~(X8$X4 zjvRbgYa+a+PbV9IyX)VKmax|9S_*u$VQw-wj;N&c0J&Fo*^u9HgTlo!3b-AcYYe0y z)i-lKFcz6+@3>^MF)~(+@C_a_&3u5feF8cl(QBp1K_bCRO)D@X7wHsJ+{&8jBEqTh z?M#4RLGZJ(D}AP6U9;R&UgToO4%3muJ)V>wA7M-Zh%QaKTMow0fQ-M|8ZER6Ih``0 z^h2}UfweKayW(O_lMm~ppANhL^1GT2-xggTpnWw-BFaWT1{4GPfLTISno)rP zvPn?VJ}c!LML0LwCyO@Xv2+3Eja@r)rGWMgr6beYU~s41P&JMAF=IOIh8<1grVhRjp#y6NLWk~(*niU>U1iF0f|H<5auCm9#8COO8PlIO@u~RvH3fKA-K@983zrtLO*ORJXp_&Q1$mFV^l(~Ks zsr13AiMSmkAG4?^dfMdl=kNayrvQ9D%rAVD z`6&ardZB%E!@-6G(^Bkrv0<#eEf%*WoHjw1p@P+l2-7eiFgp(w6GlTcTtJghL<*ggWE#zYD^djJ6_kR_KTeft8Y-(!MD!qI$!S(wPsOg)Lm*a>K~cg<)1kwOae$) z#t}vlR_JHq_H{|L?2Hvs7ckDR(Ha*?SmnhJPGKSWd?rpgXExnkpK>uyEn8(`(;9Hp z)kThfW8vl-r!gUIB$$>Akdc~Mb6Au-`ur#b z##k*IF$SBY+nx&S&%WJQ$j0U3&wA>0n|)i!IJOdCrJ5gQo$jV7u^x};X8Jj_yH-D` zyE_WY*&)+uR?6I6&m^>=(NY+R)#--(sK1}i4g#+axzfxe2c=zTSu~lZ@FJMt!M;ZU z0z>~%=ddep%9p0yRsAGweds!&thm@sVi}BseWiBV6(Lx~cwx^H3WiSBZrQ6%pc*c4K?j5upb zcBPM$!QxeXm$_&S3$dSNLyqTkIUk@-QwJ;pILU@?z&ylqB3UaGT_vc?4JFlhp?(l4 z&4mU;YD=lJ<#>CLKVA6XDp=(QzshIhBcqvaXEu?|IaQrfN#a2XB-~8a76POORAhv+ z-fVvbc9=P2DEMwf_sq_tK+kpZRS(9!Op3}$uuXhYd`m^oAaN#?q(=nU+thk~yq z{()F6eND4sf-tLUGFs*6=F%E-Se7`MH7Iw+bE7iRcm42;*x>}^|?xYP+h^{k0VaLH>g^Rp^zYNvb!XzLJrq(&^=X%1dDqlsle^dpi zFQs(DL!3U;W_y+SU}=?52?E-cQzO$Ksm-F)Z+G`xx*Izd-GDh^8u-C{Q+AvEG{Dr# zy3#RM2^3>#jn-1u^eFVio`leZK{ueTO4mw=9TSB?1gGMR8p{&Aw0t3o)?cg|S9Jqa zPu6W0%P*>@7(&WwQa$RPgjwp*60=>GcvCPb-wr;*Ry8yHvo;%^&6e#1-PHJK^1*d< zsvPZvR#A(ch*~ds*Sbt32H4UAd{xuh{A^mEpG*E_-K+;nQ4ZKzxf+FL#dc=o5G z0N>*PUhFbJbJ=8#)d~DycgNbK=%tMwOJ^i~tcd7i(}O@#?ic{Fn6b1Zqe(+u`Yx1B zA0-5Ql*dY1Oh;JP+BaG**a`RBG}C6uQr)A|4Wh}AL9-Buw;oqJBMsBY&!TMaL%l58 zSX%$xvhGfDzB=$#9s6I(dZ^w&oz3!*jD~NKybRtVHHuRyV^6jF&; zC$P3ZP>&khLphgEa@IvwBjDs>aA`%!-cxi$E-2I=Kz;1Vh&(THHN;g`8-1pRNRaOr z6a&|R5PU#_{6`02Rk})11+f3-bE$j7w7@f`-m%owop}ZMTvwnrJV^IVl(0=MZNT

0J`SBs^k%l7%Oh2FBW( zpr3ugmi3LngSBva`%ozRip&#a4~*L2wo@p z-4zz|=8<_|2i?r~@&yTEYhwrZ&X$^BZr6D%4SKD8SW4oturt?t2&4(tGYKk40z^- z3DL5`{QettR(k1$f=;E@5gnNtHE|17xhANW_KZHKk%v1E>>L~_I$7Cjlx!Ix{Pkr= zzGHqvuC9ug5m;ZzqMEdCp+OeetfopHU(JA&8das#?=*@00BtHGIpWP|3+&uaN>5N= z`uo2meA);ub1;Mx$8+}*cQ^u%bQ!GA)R4)QY5OL6oFW6 zl+K0S%t)M^bTK#1P_1z931Psh(6r|*vUTlBXtX62fkVLjafh+Mw^&+fGOHaPKmX|X z`6Tmn($Vor?&-v%;}aq2h8M~wmRyAPScD&LS0O+%?c;}PHydKDZzS#y5hm?Ipy7Gv zHaaTbEJ&Tys2ZctDU~X&*|M!7PsNIknIk_!;Q!6A%unu0C0tFwf23IO#92^9Im#~g z+pToo%-((gOLPz<)J7bZTkIpQi*TOmK^o?Sp4*|O0bCz2`a4e}>!)`aQP1keBDJer z0Fx=VHO}q`XhDZH5oZ{Rl#59DSwwYPQ5re>!Lf+x2_lF=m&tR&uohpO-^~8?9;`up zO0H$eC--&MOQWOqTwQ~3O0a36??F635Mr(Na+yonv@IaBoi6AQ z4A3ljK0IpsneGtuz>?IZ7c=Uz;R({QEjoTN#RQUZct;MB0Hld7=w^FUVALBd36g6B z;LqwGFTu>{h#0T8;j)(Oskhs^LR}wG&|0Gv8=(}$M=eoRn{x$17!t67r&?tEEwR7} zNUr)qSaO*vtE48c4<=%eo+n?1fmQ2@ldmYHq|Lrp7u)f+b`s>55vr$mm53ja&e|;v z_>G+6+r(i)=p@@v6*DKa0p!R*KC-hZst^^jia%s-^Jo~z{fx5i(2h`cMArNXN_=4l zrhV`LB@%*dgITL-L?AU*l_C$QLm30tPxuV;6L{u$`?rze{7e>qQ{-0VWLrQ1jsr-{ z70f3)4$v8Xa8D!yY+E#ouwxif8-g&E@*hGX3aL~tpQd}shWUU_WRBbf!N9#z4%b=? zTEp6Hb!WoVnAsJnsRj1cp2mJ)W*_~n8?~zb{hvqO#QlTZlm`;5aZxBZ~m)q)ba~{7v?MS2RFFb6c^rJ^LxR! zduNvX^}i^RzV}#{=_{WrQp!x<+E*l9u*ov@LUuR=_zKXUB@Yp&ItU6zkAzYRilT)_ zmvy$)cRq_x5yQ7+a-}Z1BttYWa{<-_kEKVZ9T_*+pJuMp7ktx=_0at1Zmd@eIUI@) zV|g7Gm+Yvw>a+T%<6H(tv+xy5n1F!f%{v-W`<4XfGPmFL|mZ{6WLbqZo9y) zF5ki?{)-kiV#unYcv;pRpHm?avBVkiNQX)SPn}Z)Oti1NhWn0o&xN~#y^}L|4Gbmx zQ?-Y5+@xT|)k{SlwskfD;a`5pZE#&E*MJBVVx8u*#VKnX4~jsl-%i#l00?ARNPr1`gYTx2$wa@Q2v%0f!+H_M zz!+hc0<(Nd-6?g{2pJsJq%Q%!(Uxn;+VSWkBqRPRAHCz9uCf5xNYHIFtjpH4QmDp$ z20-wdD;x;&KGOeuqaoRwS`MYyuoFs&SY~wv>M#CMu?rfi5irrn>5Xovuk_h=ilIJD zmpiR(3W9tSvj%v1)+yhg1(H~rM4x8<^EacU5D7mJ%O?ZEQ2x#vi0F=v2hTZky}N6$ znPZp5{nbL^=5P2RkK)E347FVb{Y>twDGWv2X>zBoY6Qe~AeXO18g?-(1emmDZe5Td za)`@=uBN%*eh=nIY{1^Bg{ci!hH5hx=fSfzFVM8DwxdTuyH-Zfp@3n@0#JAWIDi!6 z2Np7#2oeZB_L#>Uhjf{J5rH8a%6||@Z63pqBTp z7T>dea#p1BTI&pzuN?GfCSQt2n)o94EYSF-Cg*WlQbV#h5m|mZ`LfGI3Y#%ay*2mj4EzBMk_{ zkSCcbg`p%AAp}fF!7({@AX;*vCeJa!i16B;I_3r{6pTGSYP(-fRg4fqWB4c|M;B*Q z4UZ}o4YT3!5wrv!K}S}g?H#*x)}ps15K)W^SlKuYFvvK!q+`Vhk}u$^HH?(X%GSMr z1^mAj*N&5m&lND=EsnDKKk11XPJ zZ|G1WtH}#mCq|*OS$M(BRhhj05mbn{TdDAz7@5^|v95tRAj#>$LaPxP)oyQ%AT6Jh zS-=HbVHqm!OoLg6=zQe!AqO??C)8#PYRFtj>>Wd0#Q3cgVhm#7Dz3Q_g7XC%8Q|zz zvI{*Yf<)LCVUQ2&NiXs!|K)e-7iK;m9SCWb#)Wd47)1BvHs=vb@qu!0eeFY*L$(wL zL?_r3yaPrC8V1^kb&?dPD{>cWk4^|fjcx191-R;B@R8V8i%}tUXdA@S(J&dLzCzb* z0gAMDFc<@0$I0Xmqj#aH3DCa{3C!lEp;k@oz z!M}#~eJc%O|1PViEgD=qT{P!9u(5nkUDt?SVi;%H*76eAlhz_C9F|9W-E6NZf{(qX z=}>6{KN+}#Ab{`4=mqvfDM0aj(%6a452t#3e?*x{nMAv>DumDS)X$p!RdID`pygi$ zy_Dl8i8J#v7+%)uMJ_3=Vi=k>gqrd_(tE4_-e96cb>sH#(58-2-DA{fX(OdZ{o(z8 z&zj}9Uu4>dh-iG;D_A~b+aP3nUfm7iN#+v-d7vQ)6v+nw)k(O71WhiEqF@NtbJ8wz znU<{&*x56x&5W@dA^|;O0ie<#MhWBV?I(tz?b8Suw08vV30;LSvns;9rSo=dqdhSq%Xo_hqn-$ z0%`kr%EBnRz}8JMv5kfJ>+#hg=20%2;j55{durHJ5iSQpB3F58ufj(A3J!yQT@Htr zbLemvnF3_xt4CpvwmR|xSr+CZY8RN8x&^@+9YkL_S60v$($~k>Krg~nkK4lED$-(| zT@q=d_J1~_))@-T1WGlI#Z^*-V#}!(6T6@@nsw+;2*3b;mtc1K5m^H;GE(WJrlV5m zktv(ExB{?GnReV$?>+bw1oo#jIiGQ=5_13bI2!>|M|x@Nr3%70!X7I+>^O=n1z!kC z53@7M59VaNdw3g}#ajTHM8d2~=#c;)I71~~Ojab{9?EQotU`5OXWeVB%_e+1;{cjA zg&JgaUC^jJF%@QIV*QM1OwV+lKp=C5VmxVkP00niy=Ur{oAu`&oE4-Ra^?6-*)FCt zSijYMyfW1%0^`g|Bv->c_w1R@>5_8710d2SE{j4!bATOVd3e zK10y;6(6fHKi#oNui}mPcjE;Z3`NR1@&p2RU>&S+8@cBv<(hCK7d_My(`Vz>GUrJw z#e+k$+N+M6!;f@-=q2M_{7V?a;Iy^eSQ$6ACIdu*8=_*Yz>Qo?1$tux z(1O(%phX(7!2_D$2WoilI0j=CSurrNr>-4uW0)t8SQqG-_^+r$t`xYGlhyn!A#-fV-wQM)o9@8dWQyZZt( zwpXBRD=TZvX7#B}|8>JpzI){QiQ-{*#UtgVY@L5puB( zPjsM0tYI&F!mTz&H%7_Nv0_1w?$ge>ID~;`HcOTmXySVx1OT-JsY)R~@(+$EL=_tZ zYGPi1ak^}Y`j%DeOO-P~Py`^x#GNPd2&=HkvJ(9J$kPPVp^ZYPtnCpBvSUx10bwB+ zu@S$mJ0?K@5j2_vBMU)bOoD)1*$Y9SHkaY*#3A!f+Jk0V5)*dIP=5NA%$#M z0*7)yv^8%{+m3Bt89KxJKCaKu3|j{)YpVbNT~arzfGZbg**jP#+2EGkP7(v7M!qMI zGiM0$!)h^X6D1wLqvRKM!lR$i1$pxsyFZNc%JhuvY_+;$=p^9k;1Xa$y0Z%v;rih? z-adLpq#N({Ihno0fpV4JIx#o(Qv36@%2W9{k!$3TAzYTsfpQ3X!M3c4V^F^?``*gN zc4}2KTX>=MKQ7xz89JV|U_$-m>>D^*rYr4 z!uju`;~RB;HraV}%(oG~4a2l_UE#>xpisUl|K$y{pc;3VFDem!B9#5h? zhmZMp#{SiHZjF2||HjGBaV}M-dtut1rQePGl29yFM6#p4E9k?}eA)Z{te!lcj?UsD zHOGu28>~V`mRzHaAX9z#_wIfdO;sBl#!>3U5~Db=KM1PQcr*yfuWk^WPUd-XEC0Y5 z`$O1O4&kZ;8$v^DeX#e?qruLz%9reX+V6bQ?|eXJ*ZEZCAW|qnf<2JO0Rb?6AJHNu z$yOAG(Ox#Dgg~^dmwB;;kK87xk0u&Gph2^2jYy;P$W*#SW{M|X%Stur-4YPLJW3kT zE98z5YG(+DojqrWx(2J`eIVJ^+g>WnJv2+(am9dWh{@NABDs<(2p1ipMKyT zIV&pzUNC z>OVYAv!J9lQa)-q)Iw{umO~Ou9_W)YEG3~es*)$^pHpVvF`o@&P|RXyAP`zeg`Q6% z--MhwW61LOET*8({HB(l^M^41Fbl-$*SL^#9wJyEnD- z9s2V@0e&8xu%8uyh1tzUX{0UbJbU!ZvcF2d$)jB zs5-Es$7CLLDol=RR7I1l8`dqlVcnve)-AfJZYfI0CHfuNDHG-Xdh?=@ z{(>Bkcgm@ALV?5q{76g?NW@BsLbS6)svtlRAcBhofmH^(I?Q<+|7#P7I6+$=(L=}D zEn`h$6(iy1H%5gx00=DwK$g__VoSNIpCWO0PxRy%7HKkbk7qc(J@4Wf#)HIYrC1L< zLlyXU2mjW@rdA1hJ75$N5t=yl8QF;;>ozKe*D(=+fewx<-QYw7P()#aV-pdEvE!Ty z#`ZYA*bBE<@WiHQ8C6#YCdtPzq#T$eA3(5pU^A70ozfrIN#u6JlH_ATG5uM$SDXZ~YOcEq1WS-05RKFI=~$KNu7y*YWFYojPuIybX0ik8nVeZo zA5AD)ZETSjjx~)^25Cp^)NxBC6S0hB$!f6EI9*}&DtRSO5{OK^ILL{rHsul7YTw-3$VBL zPzy4x?L@GIRoR+sXIM^_X|N`sg`i%5N&C^(!rf& z);VZWkLqf-A*WUlHB)u^0%X$)N^mi#~4{Sw{V}0^76VA>KigK)Y z;o+b(Se)5_!{|nCR-epqls{3TV7=s0e3i7h*Y=7K1pNoGczQ>f`Ng8(?&19I)o%0t zmp^rq;5GfELO8sxpH#?(H*V{ec(BhAc$MA4tFYK}lI*NU78ojK`!IG?kT_ zF>C=-PqaVZo0#h%B(V8dO-L+<6RAF@9Lp?6CBY02x@2Kpw!8`oVkUc0>~p&rdmk9R zh4~`dSPsk6r0m2zCIe@-YJM)OgP$1oXiJ%eem!V)lCWQM4?JV98fMOZI? zI*cT~f`mXiU>tYwNr05d#!Y{ylH?KW#cU)oncYcz#nO{>SOOJ-G|ea*eb5hw(fARE z!K2e8Y;?^+NgNVg7lA2hVQJ=3bA|e-vQcs`n-VZPR^&^B7FE>=CCE=Avr|FUEbJAt zIFlB6zCoU_S6wPuY(B32tnqlS*M6-~akzqthH{38EfA3zG0gOWc+x{MZu@S0V`2_9 zvsS$AmM~nr{fHGrX#&0b&q|>5N`&RUEM66AOU5nnRR*OB{y8**XCair1i-c0JjXU! z(!9>Y+vzVT2gf#=7J&{mtT>vPKq@a&E;V?0fi4cWM!-ah)Qun-g6S-q)5@J8ws--R zVYSEuWEGA%W-lD;7~2<)fmt5MMj5%97SmdUW1DqlD!=L_KZ8Vg5yka0WYi;BmxcNUN<(KyD~72nzzm zPNF_+i!&yT+2bir3MKI*+fA3C-2f~32f52z>_BL&W&DG^ZZm?5EjF-5vNQcjwP&nv zM`2N$brv_Sb3sa1N4+tQP)hb{Mki3dfH1^?;uLGy$|0;aB}@3j#Hc1~@=fuuw7Q)HrGNj3NvxN8t60?r_WI%c+M5^H zz|O0r6>`pwe%cO6l}&LM{F^1{NWO7L%q8gbJu+V8M4kQ?!Hdkmq*du0Wb`z^5}0_2 zA46gZCVq4fHgHBjA^|C+m*ZqLt4q6#ma~-L8x{CbzWKw&YIrAF z-vZS{K?xmTNGGYFLap|}^P%4Lp79NF9NfctrNkjO(Dus3bhg+2X)TJ}?ONqNTUrwO zwKU=uFv#EUa#k47w22kipS=@h25nuT9gCU6f;cjk%W4O?5;q4%ng`Js{bs|KS`mw1 zSb_j%yiL|R{ERdKx+S2#6QGL+x98`8jPWa$nBL?nVf4VAjbdgL;Y1@ARP=Ky>qFDM-_DX$HOiwCadc0s*X8dkH?`ON` zpq<(;sH8ESN`t?8fMM12PhtYf=>VDRsixO~pFqdZwez69P%k4;R0j6NdjcdMXZc8b zv+koXk(Suikd7+d&-NKmnt3$NZnnV_H3DgTV#qiiNdk<-RlHD2Dy}bq@7Ugn9B3w2 zD2fev;6QQ<#Aq^@iAhiFx!BQfcDFT1XW?SePt~g#(BUKux$7@7T~HbNU;|GTtlms1Qt zPl|%f970mWVZ^9GN{8m`2kum`3kGPeQ`TnMdsPtrhXy_zL%&Np* zS3(C8)PluakppEax8#d_+K$kiDlHA`wB_SKXqoRkJFpZKeM+OzMoH(8g@QFT^7?ufK>TpJ_>~#X2ujz8#$N_J6|A3a@u48 zl&Gq`9_S^Wfe?3)j;A4e8kl`AG3nkHfUPMZ znrQs@;LHDX&i4kuN?Oh3JFl8g^%>|Y`8u2jDypnNR7}t^56p_|5>*ULjO(veJW#`0 zg*c7#*XpiLe&2n5HTLbL7fD{f4X1Tm1#lm&1A-DfehW0&PS0%PJX74a=f>WiOR!Lk zX?9kXgVDqTNud#q{0M@6;#8X;v zLWs+!J$k~HSX53AVa}fwFgPX%-Q#(j-ih4fxje=?$P*7%t}&}y0bN<#4&0k2b;c{! zv4`7ei>Dj4h$roFj~=J&k*%a7qvP#ymmW{Z6%GbK-x}t-XDNvVMr%9f*pEx*gdb+| zoM=+2{ulEh5RiZwtG6QFC zw5H@;!cQ?0xX(g2X%g?Cs6vf84xOqu0_oohzMK4g(N)7)2mM10#PJMW9jx zBYqe~I`Zs(sFAuE_e4$3RGyN_yT_BS!@(yAuy&c^{F9KXC-G}Es|?*@Gz$^dkuBVU z9KklRB9t?*2(0{rkKYZ(;ac%An#^x^_kY(^lhXOkKmKL5pmM@_`TAMqh$?{& zCjK&}3ZSPKR~Z75=%OoAqs+MV{*hE{wNhvD?)6>9BVubrk7X_5B`PIJ*go?sNpZV1 zLO1Y7&A+mOLrqUj&RQ?Fpi|2@O$msFG~rfzz>%3o1I-zBK*Y@f-XqFQVtpV{(?eoo zAW^)Q#NmO&wW8~m-gI1m94*HLcp7p%K&8Y2iXJrcGa~{?`leg%O?+5I+?(&guzNGK zb*&7vUeqv<=!*^wB<`p4hQmJshYu}qI4$A|IUG(M4(H)gFs;`$B4_3ctGo^A1l`Yn zKo7Gg8@@=y=?q<%60@GBI*$zRKHO2r$q6<9_+a=o|MoF*>&9Wgwh z?)py`<(JD!zV}I|X?#73;xmdSiqoutq}6s0l+`Wa&S(ULz^FOPKA(Q43$RcqaXF=0dFoM~vvj-5E<*r)7(qI!h-GzH0hfmO>txtJF~Y$aQ&9#2AhhXkEI|*Ypo}2R)gKl?+E5Op z6%HmUhz*0lCqPqGqH%%$IvC|b7AjYfITfN)@k2zAZj=$EVbKF+tNkbP0ER?A1S069 z(KN8!2$4|l6+yZw7;v)F0!T+&$QnF*8}b~#x^@G)KbC2P^wvq1}Px`~2(2~AUCb?0C<*3T|?bNM1gkS@bo^9;?TpFwRh@Fim z2ZJ(fkQ{B;0EfWHYB;L9d6vG8rvpp{?;v^W`u1PDF!UTb2V*^li)j8>K_2#`pl@2t z(wilL?+40m5Zm7+^@N2!@Q?K6j!|R{(w2OC_&TzL*yqE)bb5l3` z-QR9lao<_Hr<#xYmlHSL@ZJed-}UCE9=Cn#U7JpM!S1Q2t^MpPpZ|$B?^ZH}zyH@S zdR}YiKXD-Gj8}c+ndgJ@q|ck%bUby}2cLi3lWzLh?y27CXTSc}54=eq=ce8ieC~_0 zfBXL3Q-AjthyLti_qwX)re1LQ_5XSEW#>*zU3JS7|JUE_p0=83;aTr})ANq`_>PIG zw><45a}!Ux#af+Y#fUH01hu6g%`u7z;lJC5A+*}s{XT64)O z|7y#tdRAm^YUG`-dcqekdi%sw_wbMI{fCR*ShVo^%kN(qeDC!WQ%`*Poo9dT;LCjr z_&L$ShPO3d{k&_h+dXy2N7Ad0xO0bV;eF3I?C#%u_feBm8;|(K%)fo^QJ|Kf^uce$ zAKA0xnu)1L{h!}CA$r4=MGLL#cH|fS9W5L`|B~mv?Xc~ZK2I29wQ%OmUzq#n$9;eI z)D>qw<-`v>^`owZFMZ_e_x5@>PE0-bg#QSh`0Y>Zb}dYQ`^oEeO`JV3_3Kx>^}%np z-(R%wna}T7_csrce%t&0;_9*AT;yAj^I1H#>wCK=lk}&%r=Ior>-QXU!7Z+ZkIdfo zH&b`qJ~8!wY~6VInlIhyTX@Rs89#XL+g>p-6;E9H!rhO(xoF`l|MQgJ{;#uNIWhJA zEr0c2-m(3gz6I6?ExhNh|L2r{{@QPMPkr;jVCz>udW~!0)xS^1k9g+~CZ?XfacWQZ zdH4Ai-geLJt?Pbr^TgDp$Di}DbJAZIE!-kF?7ekj>Rm7U>+W5T{f%#7jkWOH-gCbH zj4zK)PJQVYulw(()(o_BQlUY0%eiF+KBj>*3LzS|!C)!kDk zKPvgxpZs%T$#nBqXFYAp&d0xDV(J6kOZWZl={NWm)>;b>eDD`ve%6alWIN-Y=U#R2 zIX_u3$&B80Yj($PU;X(B;rd^_t$V>gZF?mr=rARBxwEhv#FMarCX|Is!?MPe^Vxd8 zJbyd!5@?OGq+Ev=Ptt-pW7R6w$kM{fK7c3z2SHikdg4aJ(h`cOLJ~v)!zpep>{O;J z=F*kDUeDG#M1cbed|9n8Yve40E z6G@S6&W+INRDS-P2cBb>7K<92+dS2h-za2q0E`Mt8b(?ytvV{8#_(j$?G`J@;LdEh zj<$3pV`(e4@I!7PwvEhrp$bFXdkXn#H&YeZADty0+1VWhrmn zxJW?%9C3;Z#h~pAotV|w*`XnSW;{*#YLn_Bc{Mv2=(RDU>tLvd=_tK*kSf?V(6%zJ zJ*N@fPDp3DQu1r(1D|oWCJ&1zZCgYM8<-t=Ym`w9TImLTtf%9uNHOxd7*aKorp>wP zJJbdy)k33F%0{tWO3}w>a=(QQAca@bSByw-z9Ee197|ciKI{GHruBTYT`5z_`MRM{ zjJ(WZ5vguFKgvH8=2sl%+}aeZ%_sfqJ$}RYE5vM#{R)pjxgfUMN z!x)kth$?51F^cI(k;3#p^NEI`%fx)u=lf7$OZ4hvA=V4ICzdA>*;B*79Z7z+jl=#K zNknVytFcveqSlhWqnO<<&n-=M%52vBQpOd)(vLWQ(?i_r*D$zbkqKphs%sEKq?P0)l9027HlDeA{Q|;7yb4X z`@M^=KWdhUdRAE8Y!pi6j3!w}*WRQ^+gSt(Mwzh|MNcvQ+&tg-4;7h~6vpLGc>s%~9pMwk(8T^vHjXJ(>p?yM5Y zM@Bc==2>XCGc!~3yXWxG9Gfa?t`rkrT#;F79Tt6V?djmq^?bD#o7y--&{662Yh`d%OsL^XeK?nYsL$Cqqz zIi1aSA|i{Fw&Xz<6vMQF^cmay;le9SX5`C%R;uajG{^Rmx=pAG#bm| z(#}79VVM7ndp*W!TNBIqZ)Z^{U-BP)mXL>r@5T50jy)vFv%`2flt_y%%Fp@|COXx|D{XANM2+6o6s zg&k*xi!CQ~v@o5p7$E=T6RC^Lj$$YStYt4@XKxHb)t?ro{UPloXGi&aXFM$uzyuLR z?eZ1Llu4PYbOe&Q`MBIs{k#Q!ZH+g(%7cEry9Lg+BJ1 zau%bIJpmiG-GKbi7NduIy)wgJ(pdY|IBIUM%LNbfAzVukOvGinFh%AK!RRb5J4I5< zT_jcpzzr-xfW{LZ9<-|Z67E-0)ksb_4a!eY{mRBVZunDy{nMwkb9` z@`rYz^IHTMn(dB2AZ!cc2w5Ewg=KX_4lnJyLC_sWI+Lm11<+l~-Cv4fo((}jsTY^V zR>ccJMrff~*M~$LN`9(cOGFdh2kS)>^yV_U6K8SIIr_GpbhI?{$m(O2WnkTL;{-PN zb!=@bDxRGE@vN#Pmz$?S4be9ScLdf;8*0eFz?GDM&5VjM8N;*A zvw~0&B2#vhtaT<6VOnp0vK5WFh;)-cLd2%{n+9d@2CffV2I08u`Y3tVdgi;9KV@3h zv2GN*?6Ltrh3>t{ZF~9I3KVw4&WmcpD&u?!;tByHE2ltSdaOo&RN6U?)0v2u(N<#i zF%O)Zoy}I1^~f6}f8cuE)5~5|x}sExU(DMwS}9XLb22wyKxrUpY5x7!){W94l&Q2u ztj%LZx1fyBNPBePOhF_sZ!s*%$;z20FE{ zd^TIwhu5(jNcQ%G&z!6yu_cVV%h;>P!|ree&<4lN`E6gt$xHjH1P3kQ7}@Pf2EPE* zL+sW#2`t^mK5;@Op4h8qqX6@?9l~)@N%~^{X)ujT2iV9G!>XVyPF$x!Ry@o`SYg-{ z2%!kteGo1{p%Mi@67UGw#tN$u~7^EVbZ$x2W>e;qlC%}J^K|1WLt9%WZm<@@i~Id!T|Rb}S| zAr)YsP0-?zYi?gJplwSnuPDB`Jsdq4clZb0Jcc9j_8`jj`UfqAVw)Bp(MClsYE{4% zZJ?vlk`|OwQDci*+CHL!*3XVj)F{!WyQ8A~KHs_4-e;dvm58kpt+O9%ujgFzJ?F}5 zR`Bx~=PhL-2|CjxaD$#Epm(v#2Wf&}NHU(d1^RC(y(Gs3M4Gv2NOE81qn{zkkX<1f zOO4|t#6nk;w@;A^HD95=8Zn3ZLLoTdTDr6=v|ORSLejnJ3*u(S!Ba{eJ(@HMnaCBh zBzh4kSV$G|Q`G0k9ffXz?9TUeOA%x}akXIV>EyY9KR-{0Zt*kI8!^B^bO&?Tjw*GA zc15LdujSyZJ}@$u%cvAN6$%@v{Yr%PLMtt+Vc~6bZS&3J`-F0TZwH& zphQ)sfH16L+$fQC)l;J87-BjvO5}U~YbcTB=rB_Bfh2BAGXvKPf8oiHxC{g^T$E?8 zF5=$y)`NGvP4cgf3YCLh zlKd95AE|NFCQ;|wi00o}Z!euG)R(LE5-1$PWs=J49e7QvV#<`8%47uwY;MrwQdp8j z?GoCyYtmm_%(Xm{Vab#xPOv+!_uT4fH@pW3IFXd66BkQx3@7RFa9j_&{vlB$!^Nhp z#(`pFZzIa59J{zto6k5%4jna(OEJ!tBERO_uDK1_I5mTQ|6RaKdAkc$)Ja9{B`9Hr zmuNy7i%>1sR^FiBrAuRK(3MC+y1!`>I_kQe)^l;$o$|giE-Q^i`mKS^<@17?NoZ3@@o9m=!2>b*dwC&B@g@;g*oWQ2-}wtWF7QRa(>m zImGmFRjF%}xaHHsLLNl2P4IntFwWZ zo}ED8XX};mUqD`Vkyy;c4B@9eX*m_Z@sDSSz1S(jG^IC7Nr`((WdHH1+(hb1$yU42 z_(g7SY8dszMuC$IVYaY{tM`>#o1|$;m_2SSMMk9T|-)=0?e~I}6hYDmULEo6e>aD39QmGtlmF%_k<5)w33)2~S z2&Xovbj3jpb_!n#X@aU|A48|w%Q}@FbG||MI-oDL5vhmuF^#qaVIBYiX^F1^l9&sM zBwpQT`$~rp?n!h4%8k68PVTVtE13@2Bix`>0Zs@o;z(Tqp8Msyq&^`)LxxQtb($JX z!2(LqwG1c;+<=_ZWPVQMb{I=JqH6h|GFAu$hiZ3K)$a1uM#1TX>SUOPNw2WyLR@Jc zyc%bL4=ViGEVpN<9Gq*v9I#<~h(0~rwye7mbrT5A&2rKQzJBgVy3G`vv*@3+=k{^G zhTr}CuH|A?NJX9plMdww!;FiECtE}t)G%)e>-Bswj*H7?7uF}^U@ z<$FyV}!NQY6lKh`t4xd`==9gYSjiV1IRlNpf6s+2XXEC-k^y=QL2sO3u~jZ(rp z!K#%B(1={J7QEsGR79i{gmN*4&$*wD#O|$k+40p6rzAaOCT?aX7^-hHrB@c4DRpXZv+6#DN2m5q5!yNBy?2%;3c)W3!Rz91JYRym=Y&Ex z^S02#eMz~=-X7uY$(DyODmE1-qdX%;p=iWOT<%GH)8o_0CJ9<=i#35cT`Os24S)Q- z#~*ZZzc4Vr`%-kVP~!8^JM3q@^z8od?!Lym`@_4X@NO}@dp6%Kg?9(SyRS6f9bgYI zjQvUPWc@BCy`JwXijc(lY$5jMND^q6B6X+cdM6bUZ^b3LAX){Z95;FxF zMn35V^=2m{HIlsPrg>gx34ps29VI7MT5P(hN7FaZWn(z`&_C2Y-DaxoiLda)n;6!U z(j%#*d^}2}G=HKhJ?RD;H&=XY54*H-LYIN65^B!(YwIic=ZCrow6db4#aLej#U9%) zPluwtC6ZMhLo61%tE|YhF$hsFaSB<08`pOzsZiTgx+y2!6*dJ#aDVzJs4*$l2k1+R zb#?_p5ge|s;gEY+uyysl1D{z+1r$pTKl@ZoHMLKW4bwigB^{t3!>3$|EfIKi$}8+ruJy3@k=F}pPWn9@RRApf}(xS+8E5QH65`A;!d!frrO z`;1VdkC3wAHI!gJu!hpSt+0m7Ee%QVx+H4X|>0?qa&R$tQ_o(?Po+0n>(6KE<106 zWjG@OH=%RTb9;jHRh8LUmyx0ujdN8-3PN(HNMbsXOY~W~JP8aTNMN>f4-!exdD!J9 zfciuuD6?X4HWgFQ7LcJ`3OmI%PXG{bMPh@g{P3tEx`#UqJ2li{5!}HJTbY3ls|+GL z)5e8zzD#nNzfsbouCN@!Z%C9=t{LXN&D z40lHQ20DWTt*d_f8SP{2o>cotpu_E>XB?Ue@X}EGR%W1mX(xv!LxWZO1fJ?jDe=@K z`AmkJY%OaN3P04Ol^JLf&X`gjTns=!iLhK+6b~JuD`0W04=ZBksmkXQYs+cCl=l#| zl;tD&4@NCo%-5+N{|E~pa=nDh{=*;ohsJl)4EE$i_O}Wy=?Ozknc0-@qV619{80N_34rRo4ssickpf) zMarHUjJ%s_M&2=Z%)JngT%3!?-vz33DMPbS+-qIN3hw(w4}E{N&3r%l&HJCK4@L=6(d<%c9DL+E5HB9#RHVY-t85e3ic`+vt|=J+6nIRlhpVCZNK>%CX)W z%fmO}+#9%RFY8PA)_KanIeo{SE&CGa&5N*19KxL3&gCX?PaF?qyC=exp@ zuinr!J0wQUHpD1**CB5petXy5T6nL{Wwk;F=m-bFC^DbZS)hXb1L%RT{LSbM`00zM z`F8+{d?^$}lNzTp6iFq9d&yRxy~Tfq6zrv16`&4@#9A#*74{9*^_Up`n^eOT<^P|$ z^4R(;J>r<_3=Xpu)CO9l5}%wq(CIwe93-$Nn@0f;_cDHMKjiq&C*u5c+$1g$0xQ41 z{!@QYrHZ|o{XZb~M}w1w$BLh{aZTFqsS|GronQ%CK@q{}CP_ISmcZ6IET8N{w$OvC z=q?b7VdzfBn?6&jF@{PalO~(U01ilo(d$n++)fSYf*fvwT4Nz*^00NX9CMRh7b6k6f?uRgl`!eyoy1s zq71OI3XlnH%t;y3qmnKP7$!0(I;iQ!nCMj1n}1zk{R{jH(4U&}dL>uJ55;xJFvfSf zb!fMwcU04f`@lm|78;@X*0ipWC}8TnJ|gu$9OWzI6oDqYy_i`sJ{jelloE-%`a|-i zR~9|$20VV5LWs1M`0MZ`G%SC6rfJ6orO^Ab{sh4-Q=r zLyWfYGUJN?A||o$;UWHt_Uuq}WKujPnSXxHEIXH%NEx`DA&|k7gJM)p{;YrbFP;>N z-oVyq+D4?EZBsXro2*>yX~44Rc+V9xJLzp(#l{qA#U7TYZIO`TN#X8lDBcp~ssg(% z!0lO#D1vX`IjdA1{6RE6_VbR8q={0%tbhw>`kbj{1};Zb!&H#pUmcIY2${rMRw)(- zEH?u#7wxLZfaM19y`fQTnY^fZ>Oo`VXIgb7K2}%6JRn_9`!2x}qzHG|&#yQCYSxHp z`{doro#ktmK}*3B8uyT-wxI5v4_Jm0W-d??7?hWKPj}qVIcvrrh@Ds$BQXtFU{sOf zZ;A{YK{wL+i#H>8Kb9{RqWY6hfBUh0l7%mPKUsVmj*yfF#G14H5safhjA8&J#pAjA z@wg5)z^#A@vH%m@2T+`N7>*^h&&INuVb_yB#Sl*j)kN15i3vBC-3Xi&?q$saNVKY` z48Wnpm(vkZb%1lZ(+#pfWBIuguV?0%8j$3>(=-9H1;L|PcW)~mkyq0Kwku)QNNG#; zPrxfosm-ai)aXD+=muoU$rOTBjilM+ZYu=04AP=F@N@+rL^q^v z0*tkx75K*jvl1vBD4-p_Akwc#xO(pVX=JXR4{ma=egp{_>0~9A;QN!w@GOu?jfQk{&K(|Df(?yAD?!F(hSngeS zWjL`jX}DMF>Ce8J@boJmub)cZaX;S+gXLcJ5B1YbPk&-%4}Bs$ZB>kxGM{A5FWQtb zc$8r70-vS5hWS)Pp2MNh%+z*Z{|2W{djqe4D*-1t5!+6gz=auGq5@)1M#Nnj3$%v~ zV~W-`Rcbud(+sVCkxchJD?uaRVIr>Z^k+($buRAslAfB3inZN@b zKDTCu^7ps<0Wf#-Av=#5Y`KTMHW})PHW>}n$V-i56Yxsy1mI!d6p&%pR2)VPi{lVQ z?rT8hB%-s^1)*y)oFf>S7soMgt8$Myd3e2MGDaD9+#Q+Bq|e{(FURN#Cd*gGq^ z#sfAYmeVX>!z_>FUlX-K8->k6V^Cj}V%ztXP-x%Rk)ggSM7!EYzni`e&7SpK+mPN0 zS8wjDU=Ume@r=U9ei%x#Y_$#|SY{ zH%5vTsxGYRLW_${AnYB9aN0SNm_vL;2ii7(t*uVg z3^D{b1+ym|18pKwq7F+CrEU9(gb?`^83`GcGD2roqeX%6+OxJ)Pa-MkJw#Gi7YaaM zM(u_`@E}}wh5NOkJ)xNlN(bqGOFqepS2jpe38O=ezoU z?MwVpZK;edqFMVS94JIj&%Ce*TX06iM4SyP3j9r}y5eul@y}1|+Uz>|5w;zVHS~&CV6)Ppr$;silyRB`L zJ1}Pl_Gu1j;eT^SyIogkRD2RZ{ zVH@;wW=~>43UuuIFX)6y?f%jH>W$_}RM)|0+EE=bu)7kM)V6YLLD;ek-l4b`mifF{ zS$L-Nny{MVO3I51!dl8TLMQ5Vq~V8!Wc2a#rm#U;&L;Oq+ubvt1w+6z*zlp<&lwz5 zf22&P^$6JGJc>I04zDp5!KZi-2IqPxc7sv$#Yhx=M7lCFI`ave5hFlWaxEkm z<%K{}wed)F<+?X1TZutDX3a)HR!X!z3B}g<0Gbh@5V&sdBjn{}BezLkUJi5GBFwW& zMOG+qjU!TnZ&GI)ZsO!LTVp58r`+6hLb2N4c+q*S9E9bnpzsszSd$Rh$irbPmIS4C z-QrF=7d;>1N#)`t3A&%BqY&XoUTy)zmYoE_S(dN_&k|#sFO?0OR9Zy28Fo z!@?=$$>_FnqTfE#$I+{PVFtQXj4SaqW|HmYm?ljwa|FnYx%636@N1zDVtA`Qz&+M| z(76KY0XY@5k+k)TbX!ScDf%+9tsJd-fPq3iknz5Hv}{sXujPA;p;1}A$Lbx%Y+rQD zO(vj+hI3@J#_JFt3=<4^rDWbKh0&Q;3XpGJDQ@;N$AJ@Sr!fh(QT|=XYY_(&CHv)c zvTk)O*!EcKN@c#F#FprP>Nj#@AXb^gqWqsnRVAC&lj7x?-(^nS zZSB|#DtMI3VOvoZawU|ag;R`_br_4@S;^L_l%SS;=)Mrc<*h;gOjW>FLn3h1V$D&@ zI$ukzWAwFn?4UhV)lv-Bf{I18fLyGr_13XA^r~wP=x=*odfZi$KD*)ES|5^=xSiv& zO&h5{EwTs}kiqyi&m`1Oj&$_|-k^GdyB_QWt}uaq1S(?C!E#u>ChayzSOhl1DX;4} z4P3Q!a!k~*+m!7b3LNnT{2?LiQXXF>GXb?-gzv3_$@jLl@s}P4RzGoj> zS!;*-m>{pI@Oq8d-SOE5e+1rwmjOl_8jaLzH0Td@5{JEr&20UZjSNhXKGR+05FZ`p zGNw4*G3B-@wtw2)KfqaKRG`&!$)2`ACdLW@TW zGE((BqHg$R;rvjaWWkj*b^q|m#Qpm}!Nst1u}c^`Bv-UnRio7L+%wyF{WA#H^D%g$ydG@#^VVx%*4Gs zm`)a2U9qs%N-!?jQ)Ac3$JAW7Qp=;}kuNI7c5YdLa*YsBTC=umrEK#Af>l=t8*t~D zv8>PF;(p^9T%2^o;9~X>XWLQ^CIk;R3cFh)J2r>4vBfwqob*uzeJ0NLpahfT(Xt#t zvza9c5-eJeJf8G|1JPg)i8FVHtoyz?x+NV%Rduk4#i2}KqgK>GpdS_Et=0_y3}_gv z?7L|N01a*&Az%EsAYq`C@t?yC`i9VQlR>YZfiGatH`Gk2yO`zK&}7ih?DM=b3k3Qs~SW52Jo5}GOVw+w436aPhiUm_CkLz`|QznSYwLi5Ql#e#By zQ?>ox7k;H}5gL<`1C+)zo|W83VIIDC;30n4dU%OnS1%5zI=Qo?{2xtJ_0M|eb6DYr z()GPA3>zF)H?+EmJKWud)fVbnWw_cBJ=*PWox@#i9aRY`@U~;K2;w4ZCg3=jfJ5#{ zo*MdTTZLvt^xfg>@0jIz=<9#`pe17i)KTsYeQi2EuM0FoB=L6YH>Sw_!pU{TUtOu< zL%&hQZ~<2FQdKeiy>F#z53E!zpN0uMp!EzJwvp9KTgi;6pbL0ZF&YPaOSE%vrFMRK z>~;<|+DZD^!gl~tz5#=Usxe|M zROYhkBd?S-j5xGlk5s*2ybH_g3ym)SzFL>rq=Lb}U;Z`Y4AXxN_O3Afc|9v01FA#) z*}tZ)@9Qho=U1>;X>jPo*=geC(lACY4R&_=I>Wr#Ob6UxQy&L^i=hoLZ%!CP+s6ac z+ad8`U>FKy@2*GJhb_Z1VRh6YC<0TUbRdUn2)oX=!SGpM+hn3Es=Ltyj<5qwbm|FQ zp$RF^XyS0)#Lmak#KS{P^dXlf7AqJFqtHH~iHFq$P;=X3X#hp_z!*HuG#oq)k{p~S zZ4eqb0!EepDC@}|Et~0g2(UGB(ka)UH?f8;&_%EA;o=a|$vP`rkTQOp&{%zkUSwiz zw^%Qg2%#~2t~^>bz1tnGq8WlC2~s%Dbdi(>o}k^tgGw;fNrFhGO7@l($BRFcnF@vp z-GNJ<2bxS>`sckiP&m&2Nygbz<`~M5527JDx?O7!86`k+M6<+4AAS%Ot0g`5!wsm8 zi~(rHEn@(I%A7#Vsf#3ix<2c9fdvODDUZzVh8%cSvWJ6{ZdJ#f1eC<>Nxl5CK~!jz z9%b4i^h)9^0&Ln3nRG^frp-<^JSPCIEr7gCnT40Ju|{ zP=L${^MuW8 zoR_ERNu1hzf&xYKaD#tXZYWNovT{SEJ6WLaqR*gkY+q#mp@4!_L5rdg9VvR&(b$Q_ z22?4#%MGR$SWWE;LeW9w8>tl089pgHk7;2_$K4-1!z_!z8I>cV8TlmQ#6+*n+(G3b z8g{^fXD=~wb0VV@ehBddeyI{15c7A)6Wh$NtRA_dVKK>Xg)%|Qj;7%q84Ad8>gJi& zgB(`UM)67-#CEYtZP*fF!Lt?WjnY2Kh#-JjQrkwT03U@n=6|6xh3k^kDJ=#+B*D^; ze9A~?OtuSkUv7m6Cm|LFHY6!l+qa9rQ6DOg*o&&({jH))4mj*=oGV97vW3$@)CL?E z$EGbY_2Cc5Zed1_H%OfXC(DuQ#$=pJ2vp_$voHj@3juW5!i`dkL!}l&DRy_G)Y4F? zrBG_kK&it+rHDp0VSlwsrB%OXv%xJz2&0uEk42-@uAx#yK3gdTuJ`Mj8!9yyO4&@* zE$$gAwI`G!i3p0ws$UC3r4~XdqUjr@7KchLhElfHbzMtCrItb|(yKMe z5YBLxXUOhJm`Qu=Lus_6dpa;$5d!#cb`(A~ea$~oqKE{fn!nie`Ri@^H7Nk;<8HrZ zTSG2iR3e93Io8WX>pb0oSQ|Et-K{3o1-vsTv4O+zlxhmChI=Jjnv}S<#p1*LumB8qD`7P^r;MK zX^ka`gg%|GqeAEs`M_W=L?N0oBd?Y{eI3d~lnF}6!gq2du0E?=iDjF;MT(#IzqaN6 z{&f&-e12}`f!NzQsGgbD2SBF-_UR3 zy#9?(DM+q9!r|61f3W38FQ}=rCJwKWp^*SN--Nz0GNXpo7pRv_3fu-{yV$_F4Zf#c z^^y-4TVlzM(cLZ+m-W{b`o``a0i4AlP{9!*){QHSCjYGVXzI$N$v>0W8=FH@*Wu9A1*MHhfl0#q9eDZU1P_!xQAlKbPA(NIj`T7P(!3PP*N@s(Wtk$nN+3uFBP9h&p?XS48xe*sNt%Uf3MEa%U zlt`ItmAfij<1zzBAC5PSqM5l$!ntR6uW(qX*}(=9;G(UlC<|XTK208bXT@3zj#R%T zd|*gGrl6dz0lzCPDJU*6{D%ov?u};tG}juY(9CLw2SU_n4i7Au#Nd)UA;p&e3b!8R zv_ye!OU{B2>)1g`w2;RWs1BUc5uhO)YqLO*LwouptL~Onz)6@W=n)mW932EBr0*Fy zsu+pK-jSoHzMI*;OlHh{T_?1TW*}kZe2Fx=8!FtJFG;tsd+zC5{>P>te)p`6=gz&G zghj>18|>WkE;8pP+1rJg+RB?N87s^?HJwt|wE37dAs|*Y34P$>W3qG#|D~&`s_tT2 zKR5GCQBoA69YXOb^YlrBnzq}`J>8S1&Md3d)YIXVXsyxz zs7O%>~x@AR387`_%IL_MY0wu$kbh8MSi6*ehjb)PXm?gCXs_=g)JE9pBNj+Nu zsKQwklX5rA5TXR06_^9RMxga0&_xGECCZ+P&PwEleP{t`OtO~A{7E4=K&%u^ECDBx zQW{+s+uk&WVdLXBw7S9&h7;_$un`{$jq`0or3UW}k6_S_rb=1uZC5g8HZ%!E^dkdq zf?Jt>ks}q}5b}eiVqzJw-zb_9Mxl5&o|%nyXv`hY=XZ?V(&jQRIXS2U<14Trb1b^T zFFfq8#O3db!|s~1I(G55=JNHG7ctbG0&WuiXK)dOU|5T>(4j{{hX`3v!^>HgS#?Oh z(NsOmv?$|ZjU9Zd-^;^ZoVEH6^IgAlYs9BX_ldHiSY;xx#AZDeV$yHeZ6n%r;$~_c z&RV@)#UC{A!8JG6BjelqR?J1U0fuDEB?IqN{*hjxkC#zHi-RMvCg(;xBF+O1#hhSZ zvo(ivu%NE(NVecec>>fCFaUz*skuDG`VO5DC9WWVhny1jAzt-7M=iu()I$6IiALWn>sv{2tl@o-&t8 zJt3kX;Z>53tw{NJ`KD9jff#s>Pte@bjMn_)k zFhTpnq^ge~6cohf#$ODh&5!c$vDwW@4z<}@?mYOa&E9{n+@tW|0}FEP?z?Nfo7*dUQU2F)iD@e`lO8C+YXix6TNl=cOf9@O9fa5@ zBp2ikzAZA!5t1Qb+zb?-XG-stPYCV@Y@W;+W>trbmCCP0G*GYDvuvuJ38Cir)=G6k zt(hLnUz8tsHTA$EoP|2r*%_%!@>@BbSh`ePEyztZ5qVOl5_2j6-Dz1FiNZjpJ+>!O zjsQ3;+e)VHpxr;4`{z&igO_+8^Fg8WETB~@cB(K^ zR45rGow2DJVWyDAs?{CvF6^KB@Sd3S8yFHDt|Iu7L3cFJGcWy+pf(n}=RMu{OqvrR zN`|y(rNy4l+yRC0m7>lw(^F%#G~${y@=-cqx@cgjmw|rPjIiz7GuzsP1}@maKg+!r;BQ!Ac6seCuC>-wx7|KV6`~8 z0_0#Lj~%q&&&!tl7O@UJ$4-}`w=XH>k`D|@i{3N2o*w8FA;dJmm@!i()@ea>Wt-z= z5pUNyLXtPlBcAlr?q`o=?#tKX0vNe>{IEXyCMZ>go$C90m+j5V+Ur=Xy!L)QkhhH{ zqy9vfUDCKRboL$IC8jHpJ3+&3OvALHA_jBj*Yh+`hoyyEuSbEOH337Ko6}(@X6iWn?itJllRNX`4Su7?zwkcS+Db;te#;*S45w_ zu1o0@Vmr&mJO=s&$0+4nn0q$?L=x=tVsefE30VVR*$@M_Tj*G$>zu=^W2kj@S^r2E zKEXR8nPC`2tWqsm|BH#spmFLtI8TWsf!Z-?1d6uQy3l0@=%C>T4cMHEKST#6@_Hpo zZ?E1WA{NLFK?cvFLefy4m0SW*;iHQ_sXlO9+D0Rg7(?d+M_~m#{qQSKTKzXdU=a2VYPJ(k$W^fWjAItNmaEAB?HZ zoMlXrfephR@o>b|(OeP)?V3H;66@^ke)^oj5%)t|Tq8edCBFxF@miv(TVllcHc)S{d>FjT4uhyGpxp*AvD#X_D-6uy`S~KgsT!2E zs>3(r!GPgJvEvr3pu;I3<-BgdvJMGgD(J3wg0AL~ppGlC17ck<}XLx4Xoa$BDC+V$X|CG%JK;s87pZQ?Rux(~7 zBP`Zwgfy79eri}%T^(D*CC3&WE#ZlD^i{$WJGRL7FQTMSS}_ua)R{452C`f80T`uU zV!^bHjS_mmq`28SYDYnH;UpuNMiekQ$*66_2*PMlF+xaU*sC?vBDb}E{y+p?8mJ6F zq}+b$B5!Olxi;}iV>#+)-U2^ILF3*LVpKm{jV?5!eiDU9D2REZd)H2cK^3q-ZzO4=eqt3ylr~qw!!vmVj1Ub)hbrAt zWNGNodLTXdJTnw6p7B!9T|yU?y9|I7;T|=nGR8`!GwW!C@$%c>EA!=q0EHZEPfE|{ z2N>T_PW0dF!8t|+!QAph!>{cEss&AA&N8l!k4{U^v9oj>v<4(Nn%~u?-@=O_=OK6S zg+UKCN_SjJCeLnH3O=cUR~)`idZ?KXx*bhvt=iGKiTEXriXjv#T}f1}j)_O!lc@Tz zrDX9EK!JRy2TX}h8l(e?-9cJ=`w6AVq5vn%rV40B#O`$qWH<9+TNEQLTlMw!QW(5I z9-x-}l|7+U4YV6ARm0+*K8E&BTdzYP5kg0FH3LffLT>IKN)ji6-sYbC0t0 zu-gOM7WSXz1QaDr9qwQNG5Iz4?Ltb?{E*zt!i+fq767{t=#Y?sQPl1gXDBRm4$u;q zv~?}kY9#(l$_IXy*0mrO2JCZs)Tw*mKv3l6H1u#!{_GTA}@%V z{T+4oR^M6quQXUEd_b)$_^*&KgLl?h{k>Tnhs8&)(DNk~_dS;fOX`-A-&4 z_CH`F81TFuth_cy8&qjWdU6FZCcGPsE&JHwz0obAKqH-mB7b$0DV>B*+Z2f$ypx?S z%rO@yY)tpLpZ8B{2}^^=2Sa6mfLZVn**}lmXbvI=Pbd>ZGDyMukgQm&xynGP#0Q47 zBO&dDSR?RW4hBhKnJM)oQooqCLfz2?{klb}& z^5y6K*#+lbqW-IxXxhL-Yvof?Qqzt@iS0j@NmSV0r_>U-rFjtyAn&qO*INgu#`OXX@RJ5Bj5@YVS* zEhqv!jPt5G9#zCHnJGdOIyXr9UR>M*^i6&ogHEuAr5NN9LYdP^g6VU>>i2@u$8pk@ zz?)tn9Zg5#=hptyCJc5NF&|mq_;LybWaOux@ zCM&S2N0{g7s&-s3S^+fmSweu~4Gx9RH;8CLEom{twOSrS1tTw@3D;Afm{>l?HzlH-_v z$wrCbU_U#~?U_9e8mYaf<)>SlDk7ljzWA!Z;YKt+z~;(q(qMC^83;Ak8WLl3!Pv&> zN(j}-a?cw18TZiEY8t|ON+37)?jwpsqwU!dSRW-BJTg`M;{3B}knR4AAvq%h5WWAage7+8W6zf6# z@Y1Pr)x}766Erm0d^<LCmUR-NmwCvmO_mr&5;?Gy}#mZ5ZxO) zLwZ7jw#9cNE$%K6GUgChxtS#4l@8kCW=)aLg|R3P7QzYWF=e9GHy?9+@DjMkJ$RB) zPcS4#0Z#<*^M+WW1Bd#KOi6l{8tg`4CL}X){veZDD!I;In^dw3>;gc%m#MXMr^o>= z6O+Ykp3f>r`3I1CY{-Bw`^XG2006U0;zz-bwS`l#Da=#%bv5T@4r}4^e#2Mv`|}DK z{QzoJNFxg5|3ssvh)Ui5errp*d{MuN3;PYf&@Qbz7trv1^UQ!{3_5rM@kN~BCLIC4 zOIZ&-(nk+-(o@hV%mt0YEE)wZDr< z`Ajh~@qi0O&Vs76m3WQhm-bc($9u$zKI~m4x4~UwJ5(4l`aA6|J`iBe&G!_+3|Xbi zu>g3E)1(_tzE`=JeGhS7U97#SoES{NG0{lCQ9_?@jw#l?vsk-(zOLdDtvG~#Ti2Hm zI$Be|C5;C(w5>s)E|th*I7D}}nHOu0-KOzc=w$9BVc9^F5kvA^8=``^V>s?EE|mAh zs+5hz3^F2J=$tt`(JM*u0w4j2>uo zG@m@}YDiLkwkAs_8IzuMtsQ;bQwXUdQ*Wh^y917MM0bot8GcI(TIGgmQH#aeIW6~| zba!Y*$KLjJvEd;p4y$KAgUT@$@T_D3!a?-{i((Dci-<7H-(d?JlWRH*3}JwrGR4BQ z=Qo3DWa^*GG~C9kSg$}qdQ~3JOJD~)7!}9A7o#GC=j8uWW-lYBxA!5S!?Bow;&`35 zxvYe+Yx1=CY{~bYUb70g-@^as~K*4TBfw{s0q!4v>B47*N6LRm%^`truP3 zg&MC9K>|E5ezZ|Yy75J~x6W@@j>H_LonjTz`Xu_l)qqCM245#C)mtYBoaB{~R^~?HdO^eoTMdlBzNf&iLa$C_2_xmKC7?#Hw zQ(z=Z&|i@|AAVizH%wQQFCceG35jfwcyXlC_eX=G$Od)=9C~di^MZ)C-a)6aHf+OS zmtYJ;d^{_uO}$=j45nU_3puX}`Ew3<^Zw>u{+tUUsu6u(gq)uPMPU9Uc6oE~ktA)C z+BJS9TZLVj`5dAy<<#(Jnt;K>sFX)>Ip#f6`H2u(IDMQPv0mw|S9%7|>aWCjAdZT7 zD#fE|Mxm11dU2stbJ`rtqC;#8cu{h&D3?gX+lN!0JXn&HlYuAEwa};KezTh&@#wQ@83+93NVR;JZDQCxy zcuxV@jq5{XC0AFT0$k!L&|;gT-jeeT3QD#To>lxuB%Lf<=92^S2VQ`rn$tNb0Sm1* z1dL0?A|NJ=db1i@t5Hm9Idh5;Lxy01v9`~UA-GgAw!c2$Qz^S?Yh52vfKkH;zv-+{MhN%u;;2LKR21S%4-@3fE0?9wtn zPXlIemm`-3>0Ii8mTl%Ty_Ci)17qh>oo1o!$8K$3#+#8#N!z1b;X2k_JKo-1dY-+K zgr+B|j0TkE5}>JSyOcZW!dCIf3XNW>3A$`Yxf&31F=QN~PW6D2(2A_|V9!4V;yCUo zwi<;#cy}pPv@d%ZPr=lT>%s#Q>{6MN7r(lV!bP&c*ElzCrMk zzH^chX7dI0&8sW(Hnfkw`hNXvcu&TU26J z#en5~SPf$ooofW#u=8vSx}V;asW$i4*j+d8Rn9;Ct;Y@8*SLY{V~;z#fq}0)X2?_I z$Gq_C#>~Xw)MnFUlJ)D=Fd3H5guy-^X!-1+r^>QET-aus?wtX?Odyf0j-QWW*=aB{Iyy16kzj1oR z4K%Uay_{`gUMKj>;VdKax>-D@(fG{}1|CHDBB)-vdR8-cully6d~o>tVtl-lCyI3I z;>@QNe|5Hcj)G2CL}t2w`!r?!F&l{yj_#PXp(?xA#$1adftS(GnYMwws2sT`ZVOi; zdE;7NZ67OGsC$1HPip~Dazk_p5Xk?smA@KXAx5NrP7V|vJOu!Y@;RCj8}kVcEFwH3 z+}#`Hx8!*B-!$(1z-MqL-y8+dkKKnpn&fZYDDoV;*;sZac?bbDk7CchgkKn+%hfrz z=kE0m{@nfRCzAXQIy#-qsLOQ5y^9e5Q?kTQL*4blUAIRSGt;rV{vUK{)WlsgSd_Q7 zeJu1qgQfyHaxe-V5%^v`3)_Bybz$kFz6-aLLt&^3?^eCyEXa9zd#Dg!BUU|T)wKz# zlL&=qn0Y`FrgmGcYQ5(wJ<7awP*G}vSpf>gcHOhyi4?!rh7M80{6i2^jDrQ#(iB+4 z^}xr8|L{OIW0DL*n(KG$a|_i-73N-sMkK|TiEl6k%U6A~x%JXNtkMzRzf^CFeg~w} z<6!kzjA^7k00@nR+1+paT3Zi+{$pvp(8B(fjlZ|w_yf27CL=d7^S5mLrhem(eBd`} zd;wwdw;uY<{niie{Y_fuyWhI;`F`UM{6<5!n1|nT-rv)2{LQ}+xPyUz>yiIWzwyu2 zBiDZLyE?MH;cj6!vuWM!0g<`?*Z=H+dY44*t^LPuXgro}BVd|C9|>ysEQGiXb?+J;N6aeYxd9+2_c{GJrO>tu!rq|$i1`Q*lReZ)-W|lMI4s( z0qm6jy-6)I+k@0HE5y-kv?;HES{u5OWzx!i!-_Rc2pE~4ooaB^F){mVd=W<7#ONXk zeE(PV%jPg%TR*LFHf81MLt9kTN0<@(X7#j>Od|KD`e}cc%b%$#+uwbWdqe%Szbzv7 z=K5(LUL*IG`e`3;M((fcrvu>C0fH=e&)pCTMDA5}(FRE2A^=qRqSw_$-&PlGfSHP3 zABw)cF8YqTXbpOT=?-w>YrU~9`s(V+L&yaoFmg*Yjc|Z?7@<*+P8)H)P#6={5Hp$+ zL}1zqO+Q)-?GyZ6q>8gRQI_XgRov~qF0O-4M*v#nd?Z`y!3&Zo7An^h;tG^56ds9c zJML3a{wkcDv^69pp&eTt*`_RBD$>o#F=By`&;-G6euEswIbJhH7h71p{850BH6`Vs zln(5e?hFC4ehV6lC-u!{dir|xRJ7>fs2Yb=ZV<^y8e-lx%71y53hZOUjV>e<8T zq_BudeYz7?%ALH8$qF9Zlv0E~bJYE62hB;vU}_>_^A})%Y&6D6{pQLQB{TkC%CB@j z3g1+LEzxO{X%rI#pc#L1bej9nCpf&tMZL&Xp=SO|(RgBRwPs>W(jNHIJw-wqXb0_& z`?r503rxOyBOczIh|PFdhN@W@^$b3NV)ngz%63{!W0U|s4TQuQuD07Ts{n`sq$~;) z)?16u6X`-&Th`jO4PsofT_-G{L)lGQEEKqRy^q*(`O`2Gt(n?F--Fy3JAzD4b04vx zjgUo;o=J12<4<>#iF=&+he>RG3R0_Ooaf`%og%qa!y{tjs}>ong~I`dN1Vs)>yNq- z^;v6WqB@=`$=AyCqH(?T?YO5BkybrM694>Qcj4=bbUTOAYEe$6Q~j`r7Sl+;ZkWtk zn?vWV-)oOfY}TIxWc7k`mX+G`I&Mbw#tY*Szd9eUD<*9?;&0?oIMn(u0*d zxV$T4)|DMqcWj~9q}+?oWgK1alp~KnR6*>M{(|}llg1d+##~Cp_G`unghlx$Eix8> zs_OT$=6Srp{Z1`z_CHa6U!H$GM@%D_soLu6xKVViNpnII+U=~(6G2H7>q~PZMQ1>o z8?pSG_%0dpFhJf6WH7g}wzL!&AY9-Kc}57x7=9^QZ$nG{nj^9MMcaM*I`4Ppe)%i^ z?2{e$h4tQz?pNW_r~8k-_lwN^D=ON3k^AS5cs0j!y|CsZJiy>Mlv;`!roM848=&$1 zNDBdR{!0F@3?d%8y}XGYJruJcU-x%4KT$+ah&MYW8aH1k#!!h+)MoFLSmR+f4I8FLT_Nq=M93JP)p=aH$>@I;X7}tU_}!Plx&HvbjeGf%wI#*Mw0*6 zU@bzu0L)+BJp{DYA5{~(d+gmXV18veV6LY zUdsIT|AC?j6G8FkK92cpWXwavyvY%^rJ(#iKKZ5RBzajp5K_?r^h5l%>L;1RPZu9uj9F7-4b_ zrv3zb5M|2`3r$u*RP@bXA;S?(x^H|aac{<>Xp8&VwH~*^D(IZ&5gP0`T>Zt^m3X@| zDe^nybz8%w%o0bJ_Md-L}W+Vj&W@`%Z#K^)jwr zYOzoEsfmB~vBb4_Dfu&e`e3}He*JmCRIk0!C~<#9L#nG$yknKwa=s(H?YETMOIzUg zv13N{sg|cDb(hdA>l?XWvFALR^&bDBBbh!HCdKp%%K#xO;%&yY*!;Y2qta9|zA#s; zp75t({H(bvum?47$GKgZ#C?eaXoAS>$(RmQ31sZSzJkEN(^(FxfYR;Jtk^yUf|3$zULzT&ZU$qw^6 z8ox06YZ->WS>Esqhw*A6l>ey@CWDw2u1_3-4?n;8En+j@ZzMV@P@0o{eSlL~xzdjw zv(iW3JXGl)4^`S_dPU2GpQ~%3qm|&{7k63zW2SeA$GH=m%uvNw49-2nZ?IzSr*J4V zqI&BbbRdls07?w5$qif?O@t{ zG8d037CXh?Yt${ViAnn5UfIKIe&An_n}q+6OOSOtr#NS zR9!5_gm}hGiszKn=SzO`sq0z=Ijsry0n-y>?^tJd@-rs7;3|6I<_>nY{g)UC+}(ba z34L&z9rsGHnxpPk?3hu0XJ+9)F2WSc@`9~Ihj2k~@6`dm8@br^gU+@yqlo-YLU?cD zF@6w?Z{d(Vf2Mll7JqCv$__2g)13cqMMq0!Vo80}ixOoO31(Jlt{Gys4FaJKZ|~(I z!jXIJm*f0)1oUwRV$Q2186c3RBN5Im9rpFhq%WZ?E^@c@6aQ=-S#z$CQ;f*s@9!Ti zCfg@xqIg5HWlNfE3IDa)Bc0K)?)b#ys(kgDwd>ZOxn;|7$Dg@zYSW1)ZP{|>nP;3_ zoOx!iJZ1B#k9+*|X{VpL#W)KVjSi!Y_@#^K=^Jj}lZu^)#Jp~iVh3G1Ivi?(ONO>AEG6a<_*|MSanlw_)SfWD#k6D`%5C$i3 z%eZ#7t}dr)eu%q@x9j3c3r*9ft7)DGFD%FPb7486esFa`&%SuBSJ04H@d_6g$$KZ=e$Hwf#!L$mBc!{K*CXtU0x|L5RZuMDs|n)jfH&`+Pt8Q zEl@D#r4C$HL13!vqT$x3JXxy%Za#erpE5@5b5tPr`wRI&@9|tUM)wFzxm=%=xLXTw zW95(alLAiPYE4HrT$|e$j-O_W#ysQ?WaHEI&9}4h$6FU|2LHR-Wa7?BUNQc-W|>p_ zW&T^E%;sj9Q~G88YokorEYs_kc|xNM(*WnH&e5Nf`(?H?%AC|Jb7H^D8I3ZVnq{W? zWln39QA(}4trPlX9^WX#Sx{_x0X^`HHj>pPg_q!2JiW2(t6wm2incHFwMu}L2t=0^ zc^t2s2a~Q6g-L|xDQwkCzs6?~K$uXs;g15{9DpJ4bo;Pi+@6_F1m)F}^JTO(mo;UY z+lJke=N6XZFHuuaQZcsYtGF#J{JpM^x;eDq>yI|h^4E{^)Zb>DqBN2Fg$-0}J=!<) zu|3qG8i(?g!uRJtlC!snF5S##m^H?O@j741%82P=RbjIDz(_;Hd%lL2>WAIJ-*vWO zC?N$-#9Wv5GWSvZO5W(_54F9o$JfCLW7EXG;VI4U=F4?BR!P&Qfj70W`qxu~dg|*Y z1sSU#S|W)nM67CgA)nMzR84NGo7`GmptUw<~ z2{h^7kQTpxqXZE(EX!H9zQJ2c70S2Ot&?qSHD}osgu-2ExeqxD4o)JMX=+4(#^^wu zBW}rGwgmOW=Gh%S={V)T&}T&KqfoGYBdoeT&fZfo5I(Wc;84qRBpk{M9Lc7Wi@>24 zNeq?)hf>PpP+q;r8u!hW6NX21tQmL|S^@%@Fg)r{I*UCX^#RvlS#aZp!3uH_x1iM* z>XwdLkPrB@m;n14sSrMm#-THQva69pUlfDpqd#cU(l0V4MrV>RDK)K0#uc0EIzl1h zueL;&ILVTih)Dqb_%*PN3TS^P)8o{Q2aH21pP@2|%HZbIFGC{lp)#q;AjkI0An|%s zXQUbWO##Hu&@WIMtV|yq&?tmAe%-BiJw4^JWYOGwvfeAZ_{{qVyn%E&@f#<@64qI-K@?9$H$>{=KOO7svb5>1eagsy? z4T}#;ocPuvDM?u~&iFZC@N*H!(NHD(4^H(N9A}{s!DGU*(nZ>|9oXmbT-=Kt5mMGv z*B8W+M5D^l4zEd;sG@1*9hLsEvM#%~em!#^KGO21MPP8@uakRg@a$&7@X_R zqJkap_`Yt)6NkuE#340BchNH3y>)2C23!ydso8Cp)^5{E$(Aw=H5lnVG;9dQ(vEYUjR?YLVkCvxCao$7f7Ebwu%B&DvKWfG{i)GPE|G`fkegZ39m?1i}->J z$!K6Vo`pU5riZBhwU?GOAO3}Y4IRJnfb`bZRq?qp23+)6;fM@j2SHwX4+GoPzF zX-HfW?^7@FN|@p`?RZrCb}<@Q)M{z@T$D;~25t8q#2)R%wmU}?YUwc$Yyn~$xa9#e zri#&driwW`huLPraIzN37La?rE>weJIXQ8~(-LHX&}|_cJYAtCdZF!*+8WrG`i_+b z&D6b7LKw>gBhxu_ftg}`pJ+p1f3|o=?PsdH>>aA~!XTaEx}wo6gF|u`WCYGHnc>=a zKS*}uHd}qENr`MmKE;4dy&L?w?SP2{MY7od7>_=BZV(hBqfA0qsGg0<83DT8R_x`F zEZYa0OFLo}NQNqHS1B<$qpBM$L(A3}8Vt4=)UkC%4`*DJEm|mwL}TGWc|x)lRTN}J zghRw1gX_)wATlDwDC$Uua(T8j0k=hDu#$#IMs7@Lh#@{BZ{k*O(`)tzc+_7pt8~dg zwg6&D&S{=dq}Wx$LNmqH^h}6GSpaG%)O#eVbylN@YC1ZUvvX@iCh{~0<;!TF z2!s*YqDf@6)9My~oFyHfV;kh=U0OWY*a3T3Iu#2h&;e?X4m!ePqBtTuftH9sa$n_b z;QgTIJ#+3$0%VFt;s-vS1YqK_GSNFG-lHnL!uR~?QTXp-y~DFRFZ-E-i8@jFG5MbR zs$g@x+}E#){YK>*usrUl8lcS$MNA$LV1sdbUt4MdkhwKK*A7?$qYoZ8LJrD_tG`0) zEP%Ab<_^JC)`LE3S6KRaWBlO6r%D;?`niB;y!(qK2Z)uigwNP z6BtrA$^-?)2@F5SR;!>CCv7QCkQaC|D&ig(e$*iz$%==;_sVd+cww(-6564s&}`4} ziwlAvi^G8+xCgOo83%Ru=L0@x*BV^akSfk>qy{Rc&m;5Y?AV6_yTpW!g$ZSz30*FoYT!C4peTOe}`J5)KA4p~aS5$2xFi z86taF3{zXFSp|uXYvq`3-O@>DA;evCVN1l9%qxPnUl(zIN~DSjTd8Sc88a_&k3fV? zl#<8@>c6lUv!%mPWF_8Qt0{i{Asl(C^&DGiJ;&v8WyHEIzU6*+_b53d! z#H3V57*R1Sd8(gXk_N}gdH_>#Br>kT(!E*6BGUv>?rJ0lLin#y+1KOD#w04L!$)su z>H#`s6FDLfQx@$~;o(jv+d#}kAM-ut9Mj6bk!?gN{bA)i2W?&;)&K-27)--Pw8c%B zN8Vou`sL?ER6Ctq(o`)a;$7_JMSjLoL6M&^edt${Nd!|?GiJdlYKZ(L(?N%&1*80n z_2(rpsrtPl5OT`&K-)qknhw}z3Uh1BlM)dpNCJ7_XEJvn&G3L#L68rEwv8sZL zDF1ni3?>><;(WwmY+_qjKeiJX#i$fn+r=!|L(sWW@bP*-7-T_7N&a;b0DR~d4B}Vq2mDE&C1I18#1qb4Irw~QlDHL=D*Kt~solQKq=cz#j z?o;>p#GJ5Me2N%ze*N-(M)`DgoQa|Hk+(&0Y!PJvZGjLR2NPPw&x6?b-@Zf#`9^{! z6m)h*TRi2@{}M;v*_Iz*gKUY;7sgYvR6ZeN9&At8^fuPyRD@lBy!#6OUNuo)5V*ic_TX-S3`|PF~fyGFAHJ zMTnqBWCv3*gM1XYLlB5Pnb}@H*l!Q2grzJR{2|Fq7m<8=WMP9ET(6tdl76{ ze&Ol8R_0dh%nxSg5wly-$}Q39z8OZe&PHT(VAf23n_zI5BzL;hh)<60RCR1@s=L#w zo6Si41Q$fFVH0rcF_vLV)I&9wx?3a!X-eo;d4iD`H)qdS7(LtQpIvXyeD}*K|7@pC zr2oi|Ml~z}$^~D|YU;S(rS9-~3gN^7P@NI*hKvW3i=7S~d}*k_hG%5tBvrj|s6 zvX*3uu5yN1LWY2gcHoq%^o94UCVt7JspVZl;lb{<<2PIR*IHsmm_3_eKYL;B?1`Vd zFmv`~g@xbcYbKQk)b*#zQa_!{W=29dc}y4GqN~l;Vuo~%iRiBu2b%)F+)Guv#4i}o zE%G}8ts{@9xXyt+M)od(%3GlB0DOc!KniO}B-J%LY@ft_BMCZIM5MuXn3yf?Czi+d z7a8YRr+te3-A9MQ?$E7eQ}bI%w~Kmfw@bQRQuR4&E|0gty|a@ksPvPmo8@k->YGn= zSltQA_JQaRg9zC(0`kM6|Lzb#u03NyAIVO`eqjvjOn1Y@CXCtv(erF)jRfkS%Q*cDEZ3U~)(TBCE`8}xF;|)4I%2`Ij zcD*Z>n9pjiNFB#re>usmYO`W{qgu{=zP5e5Ygaqrh}53w#aIAlxqJ;Wd7S|sn#Ug5U2ep{@aE01Fu^<+)KYv%NN-H_^PPBU)H%{Tk(A&I1{BrBm` zzMLc89R0mda|MraP7jp8lcMC@AKro8b^5q~7Jj|O#5-I>uph3s67z2igmd`uE38UP?JDw*Lc#N(2%@Coq?w<*W7 z>hXCj=Xx9T(G%i7@!^&03QT(i6(s+Ap&YrhTr&??5IhEuZoAWx0TacIa>V4vnT>2|+1W}O4?%CBkJAE;e%D$F@m>p@$Vh2INKGajk0@+ai zgzjj>HhJrd8n4-n@%+hwATu4prdQ7QnSdi8TZG-R1HVV8m3mx!pw-rC#qGziwPY!irzK7MB#N{zgG?$X64Fk;gjx}gI!!BLP^Ud6oviSSSXGZ- z1{h-BT%pRE&7l|`Y!1!vip`-^1J9^Ih-&I+Wf;vQGsfN1kQjS0Nf8SVLxp0z>mF`A za_dm&Aa!-!>^~j{Iw)7ytKxOVs3`4p3a#W~3t=3k%x8ZPO8{~|$lMp+<&`q-^<>r8 zvmf@K{j`-#Ambq6%m!5r$SDg4zLORzih4?4v2NQmSLkJFN|Yq$%I9}QMqy6%454K@ z%6qtAY>7Isa8wi_?tt|~d6aSmoMt!>c2`Ou$-3*=ENdz;8D?Nk_f1*bXZMNogQJBK z|Avu!wqdOvH9s!b2yd=|LFlbcXHX8UE_8H&+6E2tC?G9Ew@?NkMQk3^A|+I9WBlb1|2D&rGx z6EK2CzObuyaIlo>w`*d8MOD!}O3|)<%aKf?SFR;|QhFgb+9Nn47Tt`TG=7y^VOkEK z+hr*=E;wsx7yt)skZLKybkC*qVA7s(DK(fhWn4;EL~gZ7hrzVvWv*0uKGd^mPP=<-`muWd76D=?%5WwKbpd@HMrR#S6<8k`GW{Eezkr-HB zZRLl4Jke_4)my)hl}0ATtAW1!LquI`x&TeS)F1GM+Oq+4@<&n@8@}oVnCP`_VS8r8 zThnJViP1NIpnEki$gV(sTDZ5i<0;sX``V7z;+4Tw5O|<#c17Si-(qyXM(b*I>n|!S z{-V(0ubtzr7EFs(#4MStM&T6gT0bVkrXAsE*(>5Q0c+Y3cwIxeC@Cn0`W8QKV>D&6)wHnF3X14!KD>w@3eE6>jj-AO6gGcb zz3f?Fk_)0|toS3s_jZ`fZxbeV>pwkVbcG2Evv-i2Y#gdJ6qiI_hA;rEcR#dazBeK zvLpg%k79920SL^&94s0T8`X)mwPC728AC#E^gfz<(0K6dY{ z6gtXkHtkcJ7=)i=f2vXx4>J#n5wL^w5(P3rSDLT|Ps9#2fzTKv&>=T+bKyBhOu(D@ ztfs)a?PWcI?hE;|ay11omLy;qk5FJL>Xp?BRsMroLwXTA?**pe@?A1xn}8c}41$z#Rr#8G7~MgFR|)uvgj8igXn4clu335A{8ki(|e_4N3|FV6&aHP8{)e~ z)s=gJ8O2b-sbZP^tzGj#h_#eF>8@+cdvHbblM zA`cO-q0)fHmgp4oy984zvNWZMpL{Pf@$+pX?(a`F@9MuGcGXvjprd7=4nmK`yqVtt zwfdCMnh$xBIz(GOV4gxtYLzUBG)V(dPuo^ARxfBcIY2gjb+0G5p@%}--GA*QtzeFZ zMZ)-~eq%1NP8mZSf@V#0`2V?k8)(a_>dtq6oO8dLo!f z5vA~<;&=HGtt6PPM2u+Y@P7X}*V<>Fdv76hjOmdosB_NRYp*reTyxE@HP>9apg;#T zIt{@Z&V^6%=+j0atEKunIgI48VC458ZbY*zvu9-I8&etBEwz{>otoz8CY0J9jWr56 z!Jxd7CiQVa>WYzkx=@h-RbvX$se=%I2e>NH<&jKPgs=l43qN7 z&8jb2U=*X{62rXu{6r5rh|DLxpw()DBT&JsVH(@B|HqtcFAC_2nZUCOa{W8> zy#Q%t)!!K7(x+n@)`ecFIl_1)+>YH@`w2Ptbp0)nJ(?+^@$Rt+&Ir6f7nACVFp~;{ zCYHG~Fj|N5X;}VZ?uX$q_C)IedZgNx21gPGCE4ZI(w@fCR+!T17ryGz&XLoUAW-UG z0FVf`3#2Zq0t(EA>U%<{?NTB~FF2>Y0)_DjPVyZG0lUm3KOs7M@U(?WeDG1dLR>%l!Rny6fdb~m_O7-c^ zRI~6c&bNF#M|`r9qq&`hAFe5cse%8zcgN3`n=bG8UC?_=3-lHqUS?ij(K1e<*C#iUl9;nO&Bc_?_MnI8EsSTbK(W}s0XI=<9hARGzq$>HhYxdQ zOz1ynoBTLL2GSoDCNH^+qg8Ni0>5P_uyH9BVTRDhl05pH43`zIpe%96oNzL`_HhHJ zz{CNeRQ_-wBp}BpMAO;1ZWz0lz*lf6iF{tDFmAHL^R1p!GB=Pv!~fcpK8Zs>VDyPvQ3L zbp1k;;j6+f(b)zX3fDUsXUcyeyO1}s7vMV1(TeO1zx#=={XQZJpCP%RdMTO)#mR#m zCCthUafTF=ALB*TEUUlO{;Yn{8%&BO<>!$QfGCJ%VdXu|pEIL%wLF7ol?hueVN!fv zSq`QzaXre|Ud>gJMR@%KM2`l74sny;VZfH-W3Z;N*METv?^I&|S& zVt`r3%Ujsx9xK`cM#Eq1rwg*#2k9|2kcLO7FSKT{nMI~}$r*uh zzG92DUImhfH2Q2|5Z2c2U8a{!i4W=A&kgS^TwRjHKsjx+H2a{i|#^H$4m-G4irM4-Ylj9>sq|;-~#_WIiw+$|o=R zO`CT*fd($LL_!yG^@Eg4E_tX=xs+`YolNEb=WXjVUogN^b?b}HoepM=F}Ndo4(>pa zvxvcraV)~O&tShWuW`t8ZkvEZPAT#!&j!a;VLi;xN!-*mVyJMbuID*7*RRxe-p<6?_N@R}G1eOdX&^eJQexcWHW5plu{b=U4U z!V`e4%4&AL2X^2PV4AUgU^ARm5{Oveb;VU%bk(|pmY{q~O(Bw#9jPLi=eZnXYXrxX z4n#2_FIB5>tO?hGB|tc#hAX7-^OZf5cp9tv98gXX%QLt#x9*scCknq1%P)>kJ-}>V9N+W4&cqFO0v;vS!+# z_1!p7brhkz40HmwIbt#x$sNX(!IaRfQvhtN&-g;fcoh&|NC{+~)jDs!>isS2zMpn< zkfdTjT7&FFh}7rI7&Ip2Shw`fF7%l*@gGAv+wd0gjb`>zco#EIAav_BPn~MI0t%KWOl+01k_;@gK)@gTR655LSnbp^XB5QP8H<8mKf0B#x;N_zxuP>HBiiKF%`AL! zdss;wNc;^Z!(BT1C|ik8Pbf@7w#iExk?7fUCFq$G{$fQdI=hO^Y40_UkqpwF*4{)7 zSdm+7L{qZHY|@(+(D2k~dWIykZVqE$*HW9H{7SBE6Ce7Hr;PHNA){_)`sJd8EK zSgnDd0PgVloB(&4dEssr+~f9@Vry)_F<_kQM*~Kg5j5U%^%3F@>XHGAQ{0--2|?y| zM;cQ5grM~mTUkmK9BJ|5I2`5H%3VPIFqr8$xTG#w~XHHy7M?;-qg`JVamK95qfj1H*6+0b{Xp- zF$BHV&FGSM@A7!8f`wutfF+B63uN3y_jmV<>JdiZvd1@lj{4hExq;c?Y5F&9iW1=R#Cfy^Q|f!T+pja@O! z_Ak-;B22|Txb%9GHu&+A&*kuWY}$R?4fBCezN1PQ#6eCpPo zT>5cC*>`qEY9knsGFnd%SYojW0A~|BoOiT+o41W>rAhflgb8j!-7Il(5qs#2j zg=c5+52oDj-h#E$zHxU!yndmcYFAq@hcENz7SAax3K=|Gq!9kxp{NqrkqfCkbQa5) zJ-~k%9n1NlB_tK26dNFd>V{U)D1vIgM^GglhyV=1UBcgFV={pV*b>K4eF}SoY59&h zh0;M~zqqn}_${5v3vYj)JGwtT9sd01OijLbBWIH*6=rob25>a~ZMMkuw}uCt=aD5? z#FiT&Q<)r)=KjP5nb(%Yhh6xZ88;Fp1H{#usXexXsJJTDW9T2HO&2Gf!#!t9o|m z{bD(BwVn0_E53=)P_vtM)a4woko~Wo+t<@Qx=Gv3EcYD9zKpiflkfpQ&oW{Yj98b4 z20iZ0t9v)@8zcyio|VS&kvf(61;;z`8rJhey#zM2;UQ;>KtESph=wj+ zH5A=c??ajU$qofS*S>mwpM(F>aqv0ak-(p;H>?3)FRceYJeeRXb1as!PH;3M3~fft zTI1LGV3Q95JA!$UG-4H;KLE?SP#jjSKwLgp-tf~+~Rd?|ha&9S}5BO-0LUD`t+ zQ20`?hb@Ay+H4X~Z}Va^f}2H;a3knbvodGSZj5e=s+SbelGQ?8EH2REwe5nAHZ2Hz z2YQA7E%a_5%nn(xb1XTUz$xA`1FYL2lm?t+D{DXRpI`iuDHdP{opI29~ z4h?5sAM@&pZ{uC*LQK_RmPG~%aF~2X_Osq+JukVef!3^9ePhppMTz@`mP%V5@Fu-;=^sskX>YTm_94NX7k4aDNn9PO*o!5SZ^MSykX9*-d!av@@` zp$|6&L zptKRk$ui@DHX$TB(u9x!NfRP$iIu*{+uBg~U~;=8yb_?;M6Dr8evJ*0`5hY~?KI;- zE)FIQkTkUpNR$Iqx^(M?HVA!OoywU{@oJ00hqMo}I(12jzy)m2Ld z0cicRd8c*KiYk&|=XVp;Xqtd22#I3RIeaUOIIFbJ)mUyaNGuSu+2_KWk!sa#^G!Z; z*<2RO_<^Zn=JIJNG{@sn?vgD{;%Tvm&3(AFAwj80oCuPh;MXO@dHHY^Cm zE_lWD$5SzqMf7&`b;Y1E7qDt*4d0c_lR0N?bM^dxoU?U4C78)oED|F*Ms+<|;pLK^ z{FT0aXl2Up#l&~R=^`CwSP*MK3LB7CqUt_qez3iRFftujqqmEXPyiz7W{8{7*VZn| zhEXYk2omaEHkfAVfEhsG1HU|~L^5LJ7@6EnsfN0v`aL$TcQQ=%NPZQeoQw&CBdUtU z9wM|5WtL!Og1x8-oN4Uk>o-`U3B{JPy)C9b{xX}#)gT4Z!!8ITuXq_;!<7}+uIhA= z+N|(A;k?w0c7dGdWIK|8VS+gPs2||kXUiL4AG`A70|}4@HbJDy5C}I-DzI>YeI4tP ziyn39rxXsBlf+H+`|N%JZNJjT6q}$C9gYnCmC0r#$uUdZ`T|^N91uSGlyaw}zzp-N zLx=jNc=xB4yZi@igCFPl54z+96B`x$8g-e=-jQ-t7*wz%q$&ldOHVBqDUhGNoFZ3MyH}#6tI0Hy*6#>B$zHI zjIE^R3M%ECl0Hm79Jj1b=Fa((*?*WDa&mBU4L4>tOlOy*Uy(L0$!RnVWKcm6tg zxW@JBvZYsRu=sZB9LqJsi2OYB&UhiHYJeKYCGk0*s?m8a_pTpMuy(3Vvn(*s(}(J4vc0zV~)8q5ynEE zmAH2mnv|at3MW&792&fd%T`?gi8y@ff^n%5`@H6%EmVzP6yh_oDN#cjeZe$ZcY>E6 z)>H5P!ov1wL*1w|_jAbKB)Q@F4qNCGwTvOCJBA=3RxN`dDR2_mi+Q42iKBwBwJF@-Q2}FfHNiF$94fycY~Unrp(Q7_a=RFW82X8MrizQLxrtU<*Fqga3gYj)*RGE*~lvya9RG zey%|nqbM7Xq2bpe5YuLk?T(`3@<-t{$Xwqvk-@7GV)5=!r@NHm6D;+6QJ3sb8?@}N zmdqlMDXbShFks|>!eml58NSHwzph9Gw8?PjhnW;DC&y0T2Fcn=IMa}IzK%N{p3VUa zc(U$MoDPmF*IJ48NegD4FdeNJ>*se^9Zf%<{p-|^h>Kc3=;(aFWcbvd6``jK8;N(g z%GRAU13?^mSV*$;iN2iDGmF0z0XaUUL{7rX6>vQMR~7O>89u2HabVHGxILUyn4a!T zcc&+&`7=2sDE%+bKh5*We6~9~JBzE*Uim0RWigwvF~j*N`9D$ms=pW5;ZKis!;=Ch z?5nSB;mD(a%{3yz)SJ4w>dy7Tt4>gtB>GL=LUm_*;phqKE(j#mwkaf2905u;yJEkZ zVok7~GwAKCt-54J!?EwI52dmgvK{c@X~L`!pW1eq4&VL^dcN!#F%x=YM~6E1OcR#L z*(*CbVC?BU>VE0{STZR#j|mBHe#b=kD{$Zl=><-MMizSN*4ZtO8~7;)olWa9pn=brFTk!hyo;ORX}bng zXn42YdZOW-vUPT$C-#qkxtG)z8OgBK^%I?{yH7Axn|t9N_qJQ~%UsC(jt%YMl)pNM zkA?+6%wA*`Rk+gdZhUD*;wI(?wq%nfiZqVcnV2A0ad)hr%LbD$aCq?~T8)Y4weTWd4|DLfw`0e${bd&MmIZJENtv+PubJB{bu7E8B z-Du+!d{6}N?%xvur0rw&C6OU836|zf`Bs2~8|e!HI9|ebqqi4^46$1+Zyi`n`N+b0 zacX}>?H~TO$Ug2aw^lt@3RE9@R(3w&Cu%7jFui33!#pE(e0U@B15;eNJHxT`9WxB> z+UZMy2CrxHf$FyuuK0#V!G7*7d8-eU!`KE5LJC{IT>cFpDW)LhSFFtK}i zjB7Pl?APpcFMQ>9CrHBvv-Yi5aW3sAQ&L@n;4nqUc38ZKimx0xtJ zTWV=B#A|bpYbLbQgtmAbj64gkI4}`jjXKbp-XN!l3^z*OdKIcnbtvbEe)IcxxQ^~n z&TsIFXU){haNvDKxQ@$TXT$H`mw6zXX_m_)-PW{nY<>4c750JInT21ju4P%WW(eqp zO=KKs7NvL?ipnHQC<|A=Gw<~QtcJv^e}M3TLo0+#F60uA`_~ey=mJUo?)_3G6wo@y zW^x*{>E&$7IuQS19K>8Rh_@7+@{Z!3on$~!(sIE@Z3u$B4&j`boZdM(tS}~iQ%xi6-XyGLKUJPH9#d)FF>%egL}s{Oq=0ukp9*HAbTq1 zN@sj@sa)xKlPmqoBHX+jmkLj5i7KNW{5LJjq5v(gMa|PKzONX)wqAVO z#4Pmyq+5D;F39)>Vlb9XehM)RM~JCSI}jsD7#X$nt8+%VHZoR@Ut`7GAu(Wx5gmg< zyvh)Q%Ge+TZF3!jlnp{wCy#f8Gz|-ZmN(u;*GF$`gT**v<9?r~UL()FJQxyYHs}26 zt%tL78w0gG-G~xe{CMtL_OcJAm;=TZ9^8iwR2?Jk`uR{CHVv*YyjCI+8FRfOWpige z4TTk#^!c-&t=P+QsbC>Vd$~jE1%5#}OmIwC+bVdP`7=2BZyXP&1L}WawS~E;6{4_% zZi{-xy-z#kB%sX6TDdXMIrQ!)y@@>H$8*JChFv5x7HKT%4DqA2mK(B@bX%q+AH$uwiO8pM^98l<~LB&MD#*xy5M_-LDTu(7R&~@I*i}qJR5PL4y!$0H^*wn)vnbJE1u#z zAFx4JEl7NaTaEo3Rh3G80 z9b#*E`&a#Xh`aM}_0O6RV)aaky+}U5h{rmj@e%xXv_v}uVl|iZT6Z^ZX}SgdZZw{0 z;Q#~k7lelHxm0D-ABn=JEmN^{DNn{85Dc7gu*Nh9F>w||J!wr(;Cp7~L8!5KUL@%Z zN+lB^X3_>rTR|h{E>Omq`{zd^owOcQg_gw3>0}4&LYm}v?sLT4+f)yKd%*epXGTT; zu#y|=|H7zfojcuYP=fHS_7OVU@eClE7MRSE#IDikBcviW8f7tE`F?qbM6YNSd*82M zx4imYEt6dQisnRLcmBNT8R19YEUI@-49f7(dpmaWlnD>_T|N5#fon$J-}t`K_eWaw zU)?Hy!^dKsP#BZCdwxyOtyUsB@imRi6)jHhqVQ>HOFq-7W^F)fIm)0Di1c-s14KT(F(nBGQC=E76vk$JxNm=j>s4oG@lW%mx|Lf;t$h}c<*z6% zN8`!Dd+ur0{nmhf5I)BZ_NJ*~XY=!>cQrp{gcsoz?@__F9z%0*L-!(zb<6=~aGAun zq5j(AOaPix1mVb8XaDC-e{$~Ef9smFfTg(x;rt~6gkqKdzG$1=!9X57Y|1*D%+2)g zjW7VnfeBMpva-^cn(@rv$j-N%UoCYec1!Zp7c3cANG>8{#K0D9) z`~8PLbj_FFdbhoho^dm(0R@UkTEC&XRY#q{5jw>+cA|K^qgc1qA3P2`&cqVoD1C3^ zD3y6c(#-hI$xLhK#QcmtD_5N93qo^q%S7Li2QR4k%ZEIPe?y_o;OCza>w>&+^dp6rA=SLicL(zl@Big&~Z{=o7rHZ^HOh?D>O#8Y1e_ivC6%ikP z1l<-VfZ zca*3mv-gbbJZik*PR$D1c(~{cldRT4}AZ1suxz6jw3c5QV8y_ zN3VUa9`UZ}vbOzW*JCY&BdABFC)^*u04h@z9^`&8F;qZBlvygMEWGsxi6by-O2uJq zS~X7YbJ}W$b+hVs2&TZl@CTpy%Jogb{+#t!qAKu`cNYFhJ%l`gDqq610 zVrm>{_>pr7)w|Nl^6*Ay+A6v#7CpFk^y=$k*}LCAD%%^&I9F>lt9P%7W#4U;9gJmv zcE{-5Yh&4KZXK1~5X%mIa8x#oWuI!bcXKRD25r=1r6;!^xorzjy|6#N@#mPwVvmCK zwpbPyr;3ipqR+Mlz7osYxIGlhe*c%7*6xT!$DY{~9gaocM){9@-W7`=%BJj|Sa!<~ zMrB80*&nvBbAK!&aeedd1F`J3r!_?fV$oaJMvT3FITrodJ)<6u#^(T$^#J{XI>j^Z0TcqkUNY3*SvE5d6=bhZ2mkzb*6*v+d~#%79f)N=!jel9c`%lJ^Jkl)+fs8atQ?AEEkgNLEL!2ZnAF;_SoVol*@LmHwZyP< zept2{FIUqTqx{l+i92Ts#rNG|9QJ@DmaaiTT9o`-P;L9+xH^>m+6r zKJjRVr4vgNJ5ma2N~_l-auu!4()eDy-5<~U=5(t#rll>)8U;npP{jH zt!wQRs*nT<15Pufp#2?7!#?gFXrExwh=Q6j`Dq2QaEQb3>Y}g6jqMqiX4$!7MnJq1 zhl+O(ER>Smo3xJ>SC@P<&sr68`LbNx;7L2n%H>rote=o zHnpBhas3Su8LTJbX1IoUnsz1Peu(c$02`a|{}(joCZ|m?dN{PQRZ&$ha{aUV&Mbp; z0ecbzLSc6Gu zXAepa!&iLE3^8}@}+>Im(G@lqWK(|DQiO#jZ zVCjMJM-jp|i1*PJs=1?Ff@0*AD#O>vb|jC>SF&Hx8%k}qL(b^2`6?tt*kiW1Uq(abpsd1Yg|AnEE@LAT5#ehSK-E?5l#7sRLS3u^+nhy;`i-?||V8Mp`%04{fu*KL_u$UAZZxM+SYTqR-JK*d@T*U~@+ z3J?Xo495W@(-iwFvb6+lFU}?Nu@1Poz=c?uONX0XTw&#DZq&EYWS8C=s@Du@Y~i$X z5`kVQ+$=Ne1~svGmIKIqtAojK zGq=OaLrR>YLN@%e*j!|}%V^O8wj*aUB;rZr9?-#*SQ9A>bPUP%=?Rjh975q@*K4-g z4e(g$I-x;Z&!=e~4miQ{jBE#vS=do#QQ>&)GLsYfltX4<3r62Zo@bVmtv9G5I6#QL-_V7Yq;T_xmMF~GQR7V#7dG-9LpRSWHtidAP* zi2&iV|F!-39w%s~$2F7bwq`PzMm#jil#Uj$7;Hg3pKp>~gC4O9q)t$p7SFXcApE-4 z?NgkB&^V)#xIU-Vm8yWQ;HrjhZ1;Jz4lG=3Z2g)eE3K2i=@1MG4?8Mep>3gJ3FrR< z=KP;z6D|I&+nM1&;x7E@8U8K=k+R<*V6DIc?M^vXOyeN{g z={?R8#qX=Xqd~y~xYV7zbn>*~@V!&?0ylX(d)Rog30<;hJ9zfRkLnpd9zBDtkedo3 zQo_G>`n!IHMHs=mpH3_x7(Nef+33EjFR6?S>ikDNG_6uUkDI_EfdltS??5s zaa1NqJ&Bg1P@@(VDNtczL`9N@F`4ywZJs-k;;CF1w5pAf96KZ<*8GWyd_Iv}$p+%r z-(3*!{k3-%oK5)4Ll9DU_=82i7jTC3XT$s7UvL6~NC)Bs_3uo``*RIh=B;3 zRqLvuWg};9FbW{kTx9AM^f4Rjy-fOraWvHv?HC_L5YUcKtLH2*G7A&U16#R zsv4463x`Abqns2(frBD4GdRfP?9q0g&MTo2Sdi3ltpNHOR8ff_gPEz8(%i+pMPCFe zW(nKr6LFw0!T+eBwAtd>d_^g_ln5wG$;=P*5*EGvf~bC*XtVfZ zmLEhsDO$>&qNq-iIdUE>*quyhK;ci%;u#C!3I!=B_VsCea72WICL%sGyxaZ_Us;h? zkSd=oV;;{a-ZQ?+GQOhpEXhy3sl1WF&!Ch&1UbUn~cVEU1q&cyxcb+VrGA>6BB&?@w`x|w|8+kvQ z&3aky-xD6wCVW#Fvxs$Wy1C93 z&9X>YUdH1ErZ)+Qh!rf7Z&;ITYg>a(g_*AVuo_cJYA?kG38`DmTusn*ojFFRra{@W zWJ#);UDp`}Fz3DPTzCOv=jFA}x#D9e4xks?MxAQ_cm~Ss_6)_$ z5Ae<~ikP9vuE{_UFjwlOR`^FxZ9*~#p5D9uRlY&2e3=B4Gq7?(&KVmhfM8(4D>=+- z2_(S2>~4y~6hKl`AZpGJnrOQj>sQ6G&!$kW1S_^+>~*1(pbgACPHv9bwOVO%4nqnfpoW48|za&1l{-@LN zyp3*Jt7+QidXo9>Hba%wNpvURKi(k+z|d%5r6?^r<24$405T<=LQ<>4$rL!N+?kfL z31(e{Z^Z^uVTVQFv9d%(HW-m$pV8Hx67Gr$*O5S8MKxDb!i<08^kaCCCQ-&1Bgrj8 zZrM*zWU2w7muD2WnI0wmhlyrkL)6;PApez!la%o!vC}WGLeeYMcS7jd_UXlTHN%wd zgVf0(laQhURH*@Bgq}Uw$jA;o^hWwsEZp<_OOT(Desr7%R}XgsD|4O*rtS)uG!}7h z0wMUr=>&w46512r0y{+husF^rNXVrYh_jFv#Rjd}v*VW;ph+3WXq*BW z0CQnyD0+$dn2OuDSh?<^|JKve3ZbZYM?CQy3c@BBFx(}L2PH#y!T1I7vl_*YRH_ca z1iX53k1Ald(H_aI>_&K|=rSH^PJHJ_w#=+}smCY3X1iMTyAm z(!2@^00EjaX$Fa8S5}eiN+emNlr8(?DQMK3NHB*ORLh?FjCPN|Wz^q}_LXG>GZ+N~ z&nWBO-c|i5pPH72Kv6qaMmDqD)bn(`hj?I^p%o+ zGO^jguM}GC3>C3t2r&g)1kz$TEs-iX>{CBw$LFxUsQ- zjw}{hj&pn)V)Hhw3%Kz?(#D5dua$h%;REbUt3=4xXgz{S6v9zI*fQY=vf{}o6(yl~ z1o9BkZ{*by^gKDE*pKh9S=Z4*9|_br8gp$Y9_^>>5|5UPE2SeWgn`8G#MJw`WJn)S zu#K0l_KW3}aOqHqNuu@Q%yVAD2j23%T}2v-Xo(@jq-VY~xpG!(IOsTO2GwK>2{dV0 zBN4u$3=Yf~f!LHAG@Y6-Ye3PeP>+&I$f2&dJ=5q(cx-|ErX8-u;ZeO2okx0iCtPkR zdH_cLXD&tF(`O%?vwze5dD;XHosYU)t#V?6^Ai9arL7A`p3Z$tlMo5L zfSL>xXVsg!gE^PaQ!>Z68jXBVi^a`3k%Z*9pQMPVdvpZ^{D5hI z5U=LMjr?VE)ivEYuvc>eL?dMSM6u^?W6e|AbΝAiQg(j8_%FC{r=zH~(saBOFSH zIw5+>!(V^B6K=*|^hgo@l*5wdF9I9!F+5Bx0F?NL>EEmoyrp>i&0oSVD$xyjP3*xy z+}~cJHcF5PF1>CLsM{ZW(Yw8}Y;`MNf;s(|$0?B{6suFUTES>M{SC6tUDk>>F^9_y zUyQOg@ZJT@^7r7H(OfdiDscnHgraB7!-pudoGIJ@(>QLd zJF-C*FvJq}-|mfnv=hE_XF4)b{l2v65epWxWjW{7o4Z?AmsW4-I*YA~kUf`PJfgsS zLGyZ2E-^;PtWR*W3?Qv^?$7cs)3`IF@ly!zh0BmH1ZK}q)X~zk1u?jR(kU*Y>kK&8 zw@ai5--V+YBUX7m_uOqLg`k6lV;1G?3ph`q{vbaJOjt$^iF;J+k6AHJia*hNoQ{xa zn?Y+~tYbC+*X?+Ab;r{$kft2FVjWuV#%>u;govqTIY^~uYC6@mT{|odABwCKKDcWA zL-z7F!Kha83#}7Sb0FW1K5TK>YSKtT>~wl$!VHZ2vcXcwMT2gE(ZLt?B(%Hj#t;(0 zjUc7}so==5@@%Uz=tuppr}k9Wbw#?&&A~z`BM(}L$LJX*$sF#k>qP%zQgkMe(g3uQ z8#dR>B+d%rCrJ=*kJCHAW!%sjVod%+(&qZ^xv)X_oRA)4C&wdxP(sSQMIfpQ4b zKtq3FP?P9_Xw;D+SyyB+mbe0sjoe1WTH;lDw-a`%C0Thh7G=WwYOHsKNH&{jjCI5r z0LcspY{+F4Zo(V6iOVJ;HM-GGmSh%32n+yO-!jQGapD&OUel_UQ2UIf#HkchkXoH4 z)Mme{d0YpMYyWX@L>R6e!2r3&{+lfd2~A670;n(@;1G!H!!?+N#WU)N8dE4Wsz`&X z=Hn~PZcpu}@uk)Q!qQ^@xYl`}s%0eXQS0REGlZf{&Q>>cIpG~$OwX1K**%yK-^wn& zloc}{j!i1V;kPo(T{(f^wj|a-nxGh+hgNm;RiUm=p1$r+lS$@*_BI}gB>JPh$EQkpdcK0)$nOzMFt=;7?n2QW8>t}%Ns(Ltf zmj(FvzGnE-A1Usc*Z_9V!++h(ccegp3aev=>nZnQCz?2XrU!C{ZMk2VxVrS6ea*>3 z3@*BSJw=V`$!(?w`1Ycy-ILRYSNmLlW?u}^E9SAQu^CFJ-?it~B7nlxf2)yWV(Ow2 zWo_t$KhMIq@ehXlx!bB&Z5?$%HPM%yvP3SRiO{}CPNSL7XwXchYbmF$<{#!NmyVMl z{Mp=v&>!oyi@ZQnM8V$3nwz8{r4!~I^#E+xld(Y_!vWbuQhW_2CZkiMa!LwXJVicA zy#t}i4YihO*m%(eQG-yLc5S06>fS&qQQgg;_83sh@5F8oXrebfe^m6|h-WuNS=M&j z)0H?v?8Ijmyc}ShCsFw%`ZJu<-?WTNwP=D>?YZF%QDh8gx}HS?BXbl=o@U@2jI)O< z9?PCUgnA;9?YcI;5p;qznxR05(2A07r#_eqOBuvhK#(N24r#%~HQA$@slsHW8dD=W zAZLkr2;%!R=nut8$PuZ9F7-(BBu1IOi*gS_pz?jf6U*3(9;;4(fQ;d|tCF^&T+lQ0 z7k`GRurJzEngIvW6J=7l&yzhQ`E}4lP1k&ys%RUjX9u=tkm%9x6Fzs3D`MA7gs-q* zr96j^y$6}3)9o1=nbdb}9NBlYDfW$E2}vJ|Dx0fS#sxZ}z;dZ*^ea!R=BE2lD>;+m zp-?9{iEfdLdxgY^t@4ECEc%9xC$iBdV$?fWJqqrGSN&!mVCAhgN#A-))&|v46nv|` z>0{skp*uh&M4w5iU`{f@BMqay4k4AOINDx8WFidRwR+zP(0Ih7p}K~vMx7T9hsPV> zfO3YNg=#pVtq5bwr||*9TJRa##B+1&SK`+DX5c-mlsSa~p} zOsO6!+x~*l7dD$HkmLSrnt|I;3C04cL*tl&Y@VV>$JUZwmE*TSn}F*GYNaGJUW0Ka zn6bm?JSGpP#Qkms=>D;gqxhu0+6rz1xdA850YFje))3u^;Eu}SW5IoR9PTdrotO7M zo#$Pf8daechE% zCJL0NiKTg6F$kfLUtSk7m(~|sF{Op0S!&j*n(z>hoA7WF@XZ_YxUiD+AzIGpPikWC ziphLNF?~jCuvGjfXq>Yc!wh1QY*87^4jEF4^|IXqo5Tg6{Z8OiFEp>(0^aRX^S1Di z%8bf5B<(ZVk;)PsV!Vx0n*t)Q#u;EF&i1AvNXH!GetXzrg}Bpe#cMmWLt3oHTOiVSwq8GGI#AHiS2* znCRO^{Dd&aLppav(EX%LCt-v8)sh$=jP+_8Noz6STTr|A{8%(HhBd4=;db|)7clKi z4px{U6Xt{{Q|=mDqP~a86K6DX)*=*U7_Z3agt%^Z`FJp`yQYA0ct4I5k!*G2E{+~OldzoyvHy%J4`45WvEcWI=sN@=5_U|t0eRgQDQwc{Ams1h*A zbd6s55ilsz4ve?Y>r^F~!Ki)226D*(X(~a_W0edDEW-!>NXnHqel8c96()4-R=~v{ z`ONT{6<1V$3+yu(Gj=cwAZ-8XYPWwMn%b@J1DKGIph_5qnMf^KZBJP1?mf_6Zl+wp zirH~GfDB!CUD(=MZ*i~`3mlwDl%VwZB(7Z-Cs@h8YS%31b=zf5)@xUgqaqi~VDIx~ zN|`F9V93Oyb2Um9G^74p)zdSvkhshl$6LnuhA3CTI;?JiH&Wf4AFXXwWHHW^*0d=C zT+?O&O9QH0f4v1JyAfaR0K$6RU!2pqJmgxevOBT_xK$wd;qsncNxxV=5WW2yI%L!c)s;5_+RK6~F8n6fjX^R0p7h^yO$5ZAWb`%upDDB(<*M$2cTz9x*hQS6-6(jFhMq@)m| zko9~iRD45)(F-oahpaXfa0><(X-j@toWHLTlQ-vV+lIiSrW`uFsz(FS&SV@9`#YpB7&TVDjoiE1SD3qEdg_Wn@ABu6Cd$u9Sj9#vu+V&d?P|M@N@--M+W4R4|z;=-V;D0AX*6mrgt@lumJ6G%s9})H(-g20`9@x!o5)9$___p|up8X~6-k8UXp!)ppjPs)Kkl&MfG-V2^8TkU)!xyirMp*ZfY0L$97`zM3{MI zM#eZCm1G&~Y|M0gw?aU6%^bm|<@EKdY{REZcv^K`$*dOPi|o*OWo9>iQ(e#ixLL-4 z5**o6vlD>AB^O*imM}C1mvRo!92W%ofdlq34~siiA4H3>w3%Iw2&FoD@W);D;hIkM zGA9As1NWju6*+>|z#m8?BSO52yb$l4uyG2JYw8(bFoW#GRl;6x%8%$jMm_S`s7nq@ zDV13UsmO=eP4B;}GDsvl*8^pp*+U5wn*1xy4fmM~II&wbJ^-z=Bx zm=>w9zcIo7n0EXo!|^9uq6(GO**1zN!-1a}D>Al@f7E2ql;yN2mb9$6T10{z#F!bN zk;yTl0{UeJSR>ki)tyCs#W1jQHf8E;5x%qn12g)Aa&WENj(=Muu&cb^$Qyv9)u#%P zBd`z5<2gS*HK7m4x`j0cgA6k|hf2APc|vE9Cdfqr+ewFn?AmE#J6+35$^zD*AFGwM zYT-WSAdxv^(GVeM+r{8T!R39y4ywDIU|)z%zPjID059}#T+~sd~tR8Iks?`74R5~3-og>1}sD9mlr{(taNQ@3;{w)S)^XPr-q*w zh%y?CH%wYdEWpC*G7tQu*JEOgm1dYFcE< zPmw9|1~Scj*^S6l#YU!`IJR}qxGmVpGsMLgvH4)jHA1cW3YkUzU!8H4k}lD~2n*4P z4s?cRkiHrCpcDb2BHrs^{O7h(9gqegjM9Q5O0h*W&Qjt>b#MC^lx09Sb$h-0w-p=x zn$~4q8Unf{=zlSPxAq3H*IQ!MG=PrFUYitT>2R=lM22l?OO~GSa31Ha)bt(CwRXb$ zpJsgf{t4xe%ftWouhP%43}<5P_iJOMoeHffgY1nYK=KxWq+O#E5DO3E z3|}Sg)8RrNP{H1xPrnK0Rl!$&AD5^hsK0^P&ZK!vGHw*X=jdXuaD=$tjqt_I#%Dl_ zX+wie`|3?eap2}J4$D=2PF;aXW8Rg7=tfcZHI@M&vp-}n(yn!>8^5qp%KDTu%N0I# z8YO&isBhYTX2B)G2_3?`1L22Z!3-4~8K76KqW3~G4Z+YbepzqnE^A3)`dYfMY*bDU zW^CH^6MK;Lqd7wwtyl2rV#iyu^QLPmDJn&aTE>qS^`o(4g%sM@j!~eo9gPp@V#Q$6 zX&PYie%nG1XQ21nF+Q?BV3CoG_sJ@zAo;qE=e_DMXA>Mx+>h2E=%zDE0|8V6jyPKx zbmC@Ra1jQT!8t?ZXXh14!mYqMHkbZ5a2CQ06f1eJmJBWQYX%$-~G>5S_`Q zdAZ`TQJA)8|IR++VcJcgn5+7Bo>?wyvNzZ51#xD1)o2(#^UEh11~VlF^LWOP=+39S zMR)7dfJOkHVk`_p+H!dN-6_E*d*W;o`+BK2SGQu#ts(P{-qe_l+F8#SXLw=KraQWe zs7_);t1RCmfJBT=VWXupPUn-bX&D!+Am7mN1(Z^ets-Pv52PprcmXn59o1yS+0iaH z!$MIC1p)Hl@$mm5E!mD$PT5(8K+qRVjx^_6YpN{7y(gv5x%&o-g48~3)|0r z;otYC$>4Tsed=&1YD9@Xpq*80@yrY-f>_9GP5vOe|9@?t&~>QnaB zrzGZkX8E#+^XYK6uW*7hS=F*9@gQ%C&2Zzr_%yr@Ojs1aI#VuUbaWd%MqWr%pw8W| zA&@6PkF0yJsf?+jL(9Rf>BI=qgqBNS8YP>!!tL3`fwLeuw=}a(eyHJQ()^Ps z)Oo$Zv|N_aDp^YqgkB{D;Bkmit<5JO(rhN+S{K;;s>=3~hRn3WhskiUW?FapcpLfa zX)hdbX$16d_k!pU70Qzl{lsGnVjWU@f>1Y1_#%brFkMlWtQ|wW&KMR~je+35MrN-b zLlPwaBx8`sxX^E&U4wiy#Wl#6+U~Nz$&E0?69SI%`%i>?ttxJ)kF2BxII0I!ldS_d z=PlZRuMf3o9fkbyK>frBT@fK&S-o8|bj2pIdMD$L4TKtVQ#>;J9Z_bB8pRYBx#rMJ zMs{PrCz*GzY+J4Y;f$ATz`Q<*4A$6ud@t&g^_@!lv;)lHY>c(d>nBn+VZe??Y^V@50_+6jGjFJ&6&%(vW|d>;S~MlFk%#2gHj7MKIl zSq%qM`*47`>vhl}#}`itRMm~_`lietlf%K}J}T=efrR06u+*+5NI)?j9piFIZgB2& z?>OTvrQ^h%iD(Px6@q`+wUjfLTpiz-;83i2h>vFOB37EG-R>{2QBB6->eT(Bi529$ z#z$y7q(!L>Oz=)9=NeG=_7R60$24hUGS}F7?8?rHX(_wQ%sz&xhdX%<`M{>f`w-=p zI7^aTd359%a(3n32gYZ#H|6YV(qy#NR8V+gY!c{^TcP4SBl{2Df%Fr8D`Pv7?7Uuu zd`1NO7)`GdpOS=$hQHFdi`~uuFQSHpQ#X*0G?B#ye69EikfEtr1-^1`;-q>Uz;kZ+ z@d9t43-CAt1}HO=(w*XLR|>U+-K+NtJZDJjg6BIQkB!?W0v=)5Q4cdnL>@lR2FVGr z#6>Mk%TEprO|XvRqnqBA`)c7BE~)|rhw|DoAi*eDE_lMaVlnX~LlpjrKyI@e=b#}d zQ&R*>5gi%(neeg>7cvCknmmZpjHOyT!$HA ziq1N-Uc_EtS=p$6Ph?sby_P=xPJV!EC+hJ?qWM42kjP zy!R;uNjS>~iegEB?FpwY#9}RLfJF!ZoWcciOR3u=6TlO~G3tDfK^bK~hr)89bxJvw zG#b!a#mt-h#!%rg6X_v!3{3pEE{XnN4s>*ysc+4gjyboJebPjS!z*J+^fYkOUv$s2A!sKAf?2`C@&ur*;Vj_k^XVfw|=QwqEalZx(>ltX(c0X?9Z!13II# zie`(cr+aKYAb|@*D+4KdpPVd7E%w_TiSQvC4k9bTJt(6L;}AI`5PO&T?&i`gnCBEY zn-nDdu9QQN2J<~3SEAh_T!k$_;y96fK`WwgT~xs^=FB64xA`e}MxKtCC;~1V4yb8T z!<80m!Q~wnRk!M-KoPE$K^os?r2s{^_LHaZVY#-7a11FrYMoa1((1B!6#2iF^RPEn z_A>AF0-8p;3Z9oxf(7=DImC@->N%fo>L|qgz@WYdT@aiAxVJ&>o=3jBX#! z(t;PYQ2=?Ru5Gbts$+q-AbGCChiM`#rET{qSvHs!t#zJ~?c_L~xL|DsoV$snVSL7B zgvaaBTq9IR5^PGC&bgyCu}imfY#R{=c`MiIK(HeQVb;<6a$h3 zXDnXrEN9gnenPGK5Kb`f;TQ9(a!$t+`D%&hu;KHy-f5+=>>-aXK+2~uehMa6RV)K&P-J=gtf?TJ@bIv|l1 zPNKP347c@Sa_!_G#^$3(Bj}ndMDBg<&c3$P>}%-D6Bxgqn!euIU#O=|j;E5)AA2~7 z3y})x>3D;Pb;SUo&@6^pB!{&ynAv8cMC6AEMK*@T+RJD}e{_chw;e$wjr&tYTU=MN z2B)IJBy|dx-V`m3E!aA_Z}FS%8?e*DB*?hT+FsLr12eZa*SJ}SgDvY&_d_~yYDAp19E}pY4{agTu}lMD zY$S=)7LZ1Xc-#5(QhpqwZ)d2yw5L6q#Rd&F8h{32^^8U{HcZ3W0;Acg(eTB9-wg1K z<`jl^iVg2nhR6RJ0i)Wc|7~Pq!#2~5%c4<)umzdX^5Z7E)ht7e2S_836JoGrd5KeC zmg6(B)AgDX$70~=L#|LQaPOwZHK}z@M_T9Uue^u0t8&2r-z68Vbw;R# zfSCJGWABToB5H+KiIqqjEo?$JV7eiOG4vTRxP~!~@CL7-aU8E8x{cR{GQjCp{V%)< zVQ?usv@xa6A}o{hkh8hfUIMQ{r27v_eJCL2stF+y*D~4<;&Vdqn%Qs?--@M(1(0Hv zcAOv(Bm_WDK0#U$joM@rq`t^w6k4I}g!=8i}6Vw z&APqPn(o8hfBxyd@L$?=+i69nyR&M#SH`CMP&3_{LXO!I;nfMJ?_oM^>Z#4ta}rNs zDWmyk;n@#=y$GXfyvPd{evA3JJK$(ohb#`QPZl)OB8x-+1CRyxP&f+z#qi{YE?D~e zncWlf8*pE@YWT*b=aDj1&+bo-kW9zMfc^36PQ1}^PGI321#Ark$^1ET9t0C>9AO&N0zQ1!MM{MsoC z5~c+Bed8C{8t z|NBQ|Vy~3udx{;0f*sT_d?!Y7!0%jrjm$|EIG(RJvO}<2sc|%LA@hz>X>w4wQLU3J zhRtPM6G(sXB}GBsPBps~#3_cOX3rRr#6B^Mt>!zy+TWPyVFuFTA%VLxlOh~beA^M z`5))X=x%Knd7IvTPkqrPepEb8G$vkw^iZHEf}+G>flteQY#?_Yrv1%{gm($Fa228; zw>;16&VkDbdGJn_9z6M!tilkY3TxO(iW)0unbm5aP_T&=tzP!1ks{G?oKtX=W|PM; zH)s2};}|=O2^AU!vaDzlbL#;_yETspSmuyN<2+WEGRL}tY?*Xw0ssgF7HNdBndAph zWULPIEwMe^9>q=@1u@F&jDlEY!A~San#*PoCkFo~1Ncrckr;DjCtS%dC9Av#sg+C6 zoH<)q@_@{Dv`5J8Q`E7_eDO083=i@eFqd&w<)Jlv z99tJ3M>TmU3!1{85>6(4GP^!I@$f~%XblU51=`#S8H}u+(Iz~^YVPK7VtruUVI3I_ z>&Q=OSluxi)m*MS3b@_aC~BLW!|RS>Wi*PFe}+-iX)Yi?+ca|8Y(mcXiD&jP7vZ6G z$3<*-BD#Y=rE#@6$j)Y5i~wKvV~$||x+55lMlk&69s%BWl+6<}LiY65VT6Qsr#WD& z?5EERZ4S^dSSYp~kUz!<*xy`d1k0llEdO(iKpM>*cAVAquNW#z)F>=#?DV!SGGMcl z&?6nxOONA0JszG>T*gyUcU&A^O?o8Tj3eEGtiqnGLN^2@F0cyceK#ZRG0~Cst8D)W za-PMDh$v~ceb8cF?#dzY8FnS1R6XfcjRMSVP15$7-)G(E8q?+>s!DN*5(r86v$uvL z1+Rx@sZ9+1LEr0dq9g1>?XE;^2-QsuZ{oL^7{i{${bDI75)?Pf0oLD#IY!QEXX8tz+Qkhpfl;q*}bi?r)pOVXJVnyi0FFvs|13TCr;UH!ap0NrfFJ@wdOa{L6bD-4h_+g4g^1~l@1LSEj8{F z#^Q&592PINR2ibl+-b5fn&cp$amd-2kQkcOz8dT+&05C-;3#0ma{1~A1*q|n>2NU9 z28YnJSs9L)k*m=6Qi+&su}M~rcEGjnYzsVX*OtCrOCS!;M?}7D z`fJbD9}MI;fD2A(&sL5I=(Dv0&fw#oZQPnoPALTZKD!Z`cNIxjPmLDeKHV${(&Y)6 z)yD$oUHMSf3qGa@O#ys{tL@K%B-=Q4>J1mN0}Pb7U3H1{ynfOKem`7dL-~H{Ilow% z^!ePmFhe{#AG0dc5$%Xnh)=Sd_|oYNzMfYf?Djr8QB3*eokLiEetK3crN30U=R-=p zQr$kGlpbMd5pWiVs_)@oJ1%jclxJd^T)qcyg;WSJ^qAFdc-?&j^IN9Z0-p=S=YN_0 zJiz4Hd|GBNzdEwTtP8?2B}w3oJibz2UuIv?Y^D6E^mY1rambY#J$&;oR76Zxb!`Qsz@NujByb9v<%SpUcpRe(qFF958}h{?q%m z05sM_^{NFN{d#eQMvbg-^|6bPE0)I8E?yE$=&8tf^AVp-1Ao2+LCXt#{lXUACqnO% z%S+*ryToNUBXujF$YrWDkmC0C{DSa)dyd>Nr|Lv?7{N$rHLbaFlV%!+I?c1ZG?!cH znN5I8o{mB0_>==7KoY4Y<(+D|?OwQ`}6dsa1oH9=6#BW~H zn&d*x1la|VZx|sd?%LU&Wtc9SGc6^*Pr(EwwKFF5tzu#e;K`ldSCXo{lLj2@h_ znsIv@&Zl)(EqQ!dDdp z6bt^d2drgSi6GIT0>;2~S05-sw;FC0PtU_m?=He*^XuCmZa@1Qb`hp|1~v+{V1Ma( zX3u=5ljp{?h_?V$+q2vP3J(A6Wfrz95KM&k9+jCygz!bk7Txf2h2^cK&a7N?x<44pa2ZI;DuRVJpoJ+mwZ z#*Tb#h1b0qL0avTk#gJnoN9QzVm`8P;FfMAsM{a1Z@tus{#2{M=t~ zl%Q_7d7aM}MXt&3W7sO6xC0^?09{iib)g84X6z`&pU|X;_7P4pu1I9-!FXg+ zy!k$5484_<9S9rtuQJU5HR@87omF3&=(BCGs5bh!&j#f9aV%e9fJGA)F@By?m)uP5 z*U9l>cnURYW=E1ie6bhas1iibUKOau6W&S#BlQ`Pr<<9 z7IZog0FpF5Zc$U%uXS~>=BL(a^b7W7pceN0-<79Vo zfO9jPpcii1WIk!9p5T%sM8bs3On&VVW6-*wtCsvKC{m|Mri$R{fq8o4)~$lxc#k9T zQO&Vn_Y)JUW{lm(NHDJAQ8Y-#ouKqGeqpKVZB0gNJ_l-&sTx`76A@(qh21{TLt5Mx zs^`pg*E3G(ApG!=PWa5VdH7TouKTNKvtli1E?Y)sXCz1L;n>$8DhOA6*7Bg zoxk(9pH*M=$E;d#u1?V>%^fm2u_T(7W5n20B<(dPmUtTn%NTV_Bs6$>7IHh>0bTRI zc$4@lV-Qq9c{Rgbi4m@(FMG{1jPSCX+q2$fjmXP5|JG^?PD1JqwZ%8J)w~&KjNTAF zG_Nm=!mgS@ffO5oqmQlFefuV;!1Ny$wyfCt-ZK8Q59P*R4kQv@*2YOLg5%m!N(C?T!UF6eyM zRjeh*o(a2G2?0Ce`m zT|BAY@?tKe7HS7it`{!Ekl}kp$oXJmHzyiSfgDHV<)B=N#FQetoY$v@;WxxXScak^ z15L7y*TfL%c7lOz!mBjfpYZjo{3lO-F{P7~&Rc1{k*_CN4wnst$3IDkJei`(iZ&Cg zecFo+6Xwrb5LW?Sarg;^JRvSl2@28T14f%@$DGjfHne)4`ops``-9okd>ald9%<5= z5#U_Kt;4V<)xu7F(qq52(OzRJHu%ss)SG#?s!!Itn!(5D@??jcmp6;6t)eo`N4-h^ zh)fLp>PUBxf^@R%!e`rrI+!9H>rZu3%)IL8)*a3n2-|85y0wYkO43mMgx2)2ZQq4d zNcC#DRTQo`S?eH#ghzZd>sX>-zE;e=@MT1_U?U#TtdZ>&!`pbX8@*ZHJ=vS(-Pr6& z4e~2%HYQQTeU8n6YX=bf3rDd>9@sZl6ciXKmj!v~x^DQN zvDJKGS_Ge#ksbByTT|-9nk0XZT3@K{;CxB-K_d{_ULaTx-Y8V7Cp}%Tr&A4Vi(oV{ z9TXU1ObqD`ExM0R;ET31grT0uSX@w{gH7qEW>r&R$WWEiDV3(-*ufqfP-GjuP+n#RGB%ckbbm(Ej;o44c4nA9B}Qi? zMj_-`);#w;Yc&c@@J91FGaVEFL1ORX+KwRb3Wo*;+arTL_@^|P)~bM$lJPFy+P%?k z(qHQuJJ!@PbAi?YzeBn3|FTWN{O6jd(qFX`wh(w9Ar&F=1?c=6c;<^v2KG}Q*rcgFc{<11n`+wAQIl4CLJ)3# zt?(JtFqro%aD427rQ`KE+dr1VEq@@z4d)rxuSnG32N3jzrUboB>{+Kic?~Uh6>eAui7d;!K+OlQ>>i0s-OravsgWuv6ncRBXHJCX49r7 zQxL_eyqT$#jl)#F&_B+LQz-{toJ(R=+Y|(!l2nkB(P(J>Zn1$Px_p>MRmL01wX0`~ z?e{nz9G~q(;Yx_YF^6g=Vqht1fx!S^@hs6Nc;v(}A2BucEyXX(xa{`}xk(*~tprlS8O^)L~0f?sxs zqOrD$8cZ{KP#V(A8O1Su!hBcsDdA;FF6}D@s*VqbW4zc6#5D2mQM4$tLZMDgs8(Kh z*VPk2){cDBa!{CIdX&T9m|Hrd*bT(9$ud0ev?-lJ#|hB!lu z#sjgb{MeJmgYMfp`7*)Xa%{_J++YzU%Q#^@>!xSYn8j^O?~F=w#ESSBb39Q`X{D#l zpbQyxwyR%!-6Cvk&z?kjc92pHwvtJY!mVV@OPhvS#p3W4K4lXhf z09FTEXyAI}$QD|-zQ08ivLB2Z30ez7wS+-0ylF=Q3sY1}0I4Bf7{n}fHxIYBkFfu_ zgndp%Vk)0eTu4Lcz855)huhFcSzRq7x)&xfqAyN$w2$u&gr<(KSL9ihL|GJD=EkqW z)dc96X&%?Ch3GJ&U(S=UEGGpnZ1z<&(+}hz!_8&M=Z1Qctqi*tdyRNJeW|}-u1Rbz zfB(xl+RS}&8tVA5NQ7qeQQKJt%4I{PWx&cfpYBB=t|4Q7Dww)d_HQI*%|)>+se)C9-f; z+}fJ#1&W~4t`c6bNKnsgm0U#??PfLjVC?d18-}rP4S@g)20G!ZSNRG|)=hZum0lo{ zIBpJzPVd2jonFg5wG3O!PsfNhi+Dr^gED;VeG}N$@+6tDgu!eZ3o?J%bsDg}Ba9cU zM}1SW3)koHR0c?l-=;B$&)6QmHf8lyPOM4$s#t_w8i=j}F2jL))gfYB{h=aiY5M68 z0}d@sX!mZV+R~>Mru?2-A6lK>0|8ElzKjnVIw`nmS)-%FMLy`Trl$w*!Lugp+sIrk zVJvB}$`PSdn$e>b7p}Lxu(oX)Wz0UNGQ5rBAC@eI9?ap>du@(;g%JYHuh&^!zU0!* z%i~;T8T3H$vw2v)AxXG4wohWNy)_&U5ke>AM>HQb0e2^mzHr}DD9#bZfwAN2`fjQ zN3_KLbW^IBUe_a2^P1i;~)47nig4xt6DTe@q{g=&R4aFw~0ehxh^d)mN5Kc zP~X|x|Ltji^^G&Oo;Cb+NnVv3!Kd<%3}2#h7$894D|8b~+;A{&hAU-vh_`F~ffdvp ziQ-8k=93~uNteo%;v0Y63dsN~w|{B$o?KkHTwLGJxlGA-8YZ-6qxT?Y&GPgYAe1P2 zwlNQq$zCxPlbr8?Ulojsap}%ljH8Z>qe(Ge+#&qwD4`OwEaQmu4ot4rp1FcL=7VEB zvdhW$*mghH&T_iWK}Q$Zt740QH2FI0V-z5lIA0Jz=2?|5uH~R4O?pa#h5TLRowRgm z>G^dhlj(h0IY^et^xkFU%#+-dN&;d8_|y!0O*uitiE$`3Hx{UZls_tvgTeBEPjNws ztT=t>^a|n>VOt(X*s9@EkO)#5SHOqLS12dip4N3*SGQxtdo#H%y+RkYR%mReosxMN zGmNkZ*FH?h^JH^XxcT5QxaLwSLr0hC znSf~dvX^tXJtt)1Z5*Y`PuRX$js>5kh`Lz96mk2PWr^Z+E)$KubXkBgvbi)Cw>UAY z^a}7W4_VY9t*`?@Yo!y~|3%s2y(U&s`$}<#iKp-aUZxXfOo?Ok0wq1FsKqzg#uEck z@~A`=u6eZF(onc{2RZVd2PdMaW;K=#R)O>)`SLz%YYMrna)l7@_UxgqnSj2si{Or z*=|*z6I#fVGEAJ?uZ*#>y$P0M_<*2eRk35@OE<198O_oty6iEN=7SluiDo^OzhOdW zBUBWDMOf8o7$$w7YfU23$tKZRoGH#U7FIIbq$!qa+ist)=OPO5PRDOE^>q9;FVxMY zp0N4!Ti)wbQ@@pvJN~w1d=<-B4hm4d%vZq<2Yi}JU<-tz*t25C(@`4YZqrWF_C(gJ zF(Dlf(`m8zCB(=prRGv;y=qzr0oG3?s#LE>yM$nnNe|=@4GOn78$XZeCo~j)9@WoC zT|7OepV)zM85D*=?tFN~I||byzAzc~{gSB>G%#VIw$0|7LTyc>O>7%!@DHbs&K7DE z#9)!5#phNUt;j{uS0b0iVmUW*$-x<(@Oo}{-Lo~X6$|Z^Od5Ncu}+DV zY->mL-wq%oIRKgY?O{02rWsQs75Y`kBV)js2k+DR-S{hnkHN3BTY3`OtKtw(zF0dF zC?fpI*oxR#^W@|Nlzi`;5s1WGZ;1B;L436O9Fe`YG-WHGq1ID&J)zTP^cLsDHbCd1 z5sh9#RM=p-3OT8p6LYKB7`3m;T|3sErlQ%bJux&ER=lMPCPT6(>FO;k39NotUn z-C2ad$I_^V$ZCS(+@u%+w(NYmX_P71Ki_$elj+}e!$Y_FrhoVfVdYYRDLe2KBi+Y? zaiJo`=oH_ zE$KP_6*;!eUgja1j&TD%kHTCOmr6zehO7fVuIccuIHxlg&U3#W4g)_{7U$lpX7frK z=@O@3$75e4I<;Ue@scfDr6FT-Z7C5st93Tx%WNc=EAyB7?N06*!AneG}(;EY03 zSGTBYZBYy5RrYXs?wouA@-?6WPYpKM@>0lQLm7{Py+|24fWN1|5vLK&pQJZtu`2lJ zaEgZyvIsya83ZbxyQ#JA6|*H~^#3#WHei-rWu5Q-IOo(kb?ReRcXjCQ0O=uHUf#veAqLx7byJVktoEb3qp&HE{HQg6JU*YI37VUCakkuBXvQF zXF0?II#lTq%uZWRRExAiSS5KCw3A!G9}3UawiW%9OnNZ@XMx$&NCS}DCR$fMON)Qa zJVWh2`Cth9nUOr)(Xu`ysb*w-%-~#R^6X#;_iZo*+QJ5TI{~=-pmiLO(ldEAPL^(C zw7^*W1t1f>V+!ie-qCQO-~3;l<7~p1sA~RYl3PI~R{|-(9E>sP^3Y~Xj}B5*YsR2FPqhgCM)E8zf-(4R1SUx*=FO&*Dbze79%UF3>%r7G-eTGr z(}04rK*MZ{5t1dsTcb@&eFiY33XN?SBEr_=tw@+@nJ`}rZ<$I}Da%HqW_S(W;-3`W zTBDsRGbqS(K^H|c0}fa-s0z`V!74HPNO(&Oj^QnC1mP_U2Zpy;z5#D#geX;;U2BZpQB5wymvp$oWP5;kAr4-*R zD*|$2aw^tQ#70r5wW)GeNOP`V_6pQ6=yRE%;*YwpMgu-H_+?^J82BjVEsjJ#MyJWt zt#tvWq*2JlEm<*g&EA@b?=GRnSt_ct;&B}(u*XAPHMv4nsjgs{_3r3nXR3cQ^~`Gt zg*{x&)H{(pe67^2zQ;uVC$!%c{)7!lgu$x;c6~vYsq03FhgeLKei?aexqxl-CM##-%b@9=F~1* zyP)nDD1+`w+Q9lNL>@bkl<)s51Np;ed~cdf);V;DIa>~sbP~65S<*VCh{hQ&E@61+-ETXyV+r_X`KUa^||b>YMcBv zb0~&9vBaI#8UCasX^-FSA~~kt;U)$n+TXD#rRh;kp$tHa#h2L_>mSN#Ei4Hjo(q$| zH$KSC`pwzO*gH7V)+58wOooLcltz@6^Wl37pq!7$2y$ygye!n3#YxWlVDuYFq1QwU zFbUOb++k0;Am9x+FX} znS_NMxS>EX=m+mk3*hs9@M#(2=V1|7vi zC1p!9*_oxs)3B=uAhakxsfqwERU~iof*u3X@OVMrXZ)!a!jlB`mBWa|Cj=t^1G-n8 z2Jo!dSV_?h#96_qp%8hHFA?eWS22M3sq8GQr!I5nT@XQ1h|AeLRaCA@9$;>a4>=nl za4d9#!bVN|tw3NiGeo{1IwEvnB$M2VF^A7t&wN2%Di@66>)?31+K^#wxzqyl9@q_+ z<<+3@_fhzJ^s3}5&{|1h#h5tAmHWU7T1BU9sHQh?w}+3QlX*eI-^|tQ!WQ3y3PdzE z1+Y_}x=jI1J0)n&xEeU*5Dfw|JOS)2(E4yEVT30xlLOo_Xbht^W<)4Wj8gM9V|mkU zaY@~-$lD5-?2XNtn6w@ht5q*R;vx2vYO|ohAw0{D>)8ZEHiO_w^3J-%CG5?z=fGzo zZN`J-(@QDECpN7{2V%qC z2}Mmv(IpX&psqi+W2Xh`5q0IjODLDucctM5Y8Fk3zM_}}G1IkT;SF}&#MU<|O}#JGJln?bAu7>~)W?5JWFFZocYvzGrTeEVOu@isla@kS_%74QQ*)p20ClaW(8&_ANZ8B zEJE;Ay?*R(rh5gJAJhXAam^SGIO|}qK^((PDvFB0I#e#s$PBZ;%_o~?%FnGMB&mOTd{+KeG?U{a8aFce9!|0O72c%hbY zL+}9hOJ!X40HGdrf&xNu&92Rciv{=(+LEK~mOv2%5eu+gk8o}ENPV$L+@>#%>7g$N zn!f0S1nbPvH1>uw>eQR7Ptlvu5mD*Pq9}oMW(^&{Ell>RYuriJaJLeeArZ(LpnwhM z@Vm%NrL0y{?UJ(3!Ii1-@o_fdJIFK5Y2>-uZ4F73Oh1=`3)3Pz(p7i>)&b5yPFx`d zxKANc9oD*WO^00WLy82q*@C3M0V9`29nS zdI0G<-7>0nZM41YUD(5iQno>2s!=b%!=@5IS5Dh=HQu1A1}6xE22wcyxtjv5CRA6n z1%!lBI2_4vgiTJ)m`gg3v^n0YIff+T92@(M69NB4CJO3QTlzFGB*p@yBRh6Rra1_( zANQ{6BIfm#9m1l=dwsU!pp|9#khBCJWqqL z3`ZT*WN@q61VQ~N+StnQqAoSYS)2NXWe5Buv2 zDwNy?^-gc9S`gA`H-T@%R3cJ8VZ^iVPXW~Wols}+B49L6V*(%y85l8e^N+f6Z9|iM?Q!E7*UIsEuU)Sh2X6v z&2Q>%|;&&y1g7$Ho zHVOsg*SvhIAxvlsIy<5=YLh}>Lv`sKE=JdJYSX8T@r{{AlWxIKEvP3B{y^F`bF8On z<_7JVQ*h!SLKZN()lW9qxYz+8(1h#2dF8*+jnyKpppB#spHuz7Eb zN9kr!JPQ0RFpb4yRYWVjUB9^D#;T=G2~8&@@1|9UT1`yN2`S9Fz?Rp9*&Je83JP** zJS{=lUOGn)+w(RSOU$sz1CqpuJC5a+9FGR?V0{`tvo^76PsW6;O`qmYW4aVNHr#~ z*f_20$aIV`jxXkGo1L85#8qM<9ev!euWx8_qgrVoFg{0>OmBC^2uesp3rwsNug}_; zVjDs;$Up6LVrDmJ6Ie~e6WTOW$ma-RH^PmrYd$ue*VzAclNnHuizZV_V5`p!9tm64 z_xTx2rU=X@lW9evl?nE=+ObV0d$S^zs}JAM%td*>5qU-V8&u5}RE>>7B?fV@ zdOg8LrO&1Ud}t^@S)&}3LJ#058F+G1K4p*MVAl1>X)bWD)1mD+vc=6tCQJ^r9m_q2 zsAmk0E*e=t90Fk`ImKi1e|G7}Hkx+&RltA)hdNP+W zu$ju(v_SWCVyNAC=gpO!3~m?lHc*a;=DW(@{@ z5WFCp>b?T@V=18HDzl$ur3OhGWf)ovgo4}FmVCfbjS6gKMM9|2nnaizkQZ+YY)%{i z4@GMlT&u+ON@dJLLPzgwZsn8;WnobjD;D^@uBLAw0bUGUf^$la6F!&Y#8x)I?-Pv0 zf^cJVs=}0UZwC(x6;j1<71a7wc+Ml1t*mw}x2Y8n44;V5#4aTtpdEzrrUnDFhg8qI zs3&Ut3`W3Q(eucpZS_th+JI3j8Z@Dii|qYQ1kx@f!VIsVr+8~FSbds6m#&5?=-H--g zT|&HFWa>;t>5DP8RJWm}(8xwFlQ5`-KN`LB>@jbS|!y-fIK zBO^c>PiRXbY!KL!4S!2;lkk1x+0k?TE#=wb8O@U7x0qj7Y$$Gg+QM!KEuilPjy*=} z)8p8&e6YNp0mqhN8|nR|9J^iUG&uG;fBI(Z)Y%)s4UgF-wHW87cmsvFwYc)UbLDS7 z!weN0!(=PN#B$1}Ncl};n3Gr-8QwR-EXNGa*kyxIfmz0R`&Kc_)1P?OR!mfH3h2#* z^S1;IwDF@Io1z&f%+ZAlOuLlTVd{*uLZ&fld1ygFY2phDG%Hcbx-EgOjVXfaLHplDvEZPUxrHMaDG|92h4U&o3+hs%;k0g0%UFx1inuG|5 z*nMeb43FptZ&pIegAI(@W&O5>Vtr#Em|M1PV-!T7zXeV<>+YL^P5^cAlx^T_1{&># zY*_VJF{)&rs__UK{SKgEu#(+jZb}$ifCj??0+RUtz#ugV1A*rNWyAwFfeYu3YuA99Wd!w3vp0!W){%%Sn*swxA5z!w0c=?*xJ7VpO;%f3qNpIp zNDJCCNLjp%od>aDhOMALs(}mJny-O|6t4zcR3(!jAtB!4GXmijrgNFGRB0kZA1}B>GTTLSiL=Ew2f!bkd)ZmQaYM+<`X7aS) z=bJ$kYR|rRZMdo5_JK^{_Vw?u3-UXBgV%%M(eI8Qz3cZnR_ep!M?e1u{)qhK;X`U= z+s&d3jaDKArD@`Y?XM}0rWVA{;VtX;_{@eqK31fD{DIus`!zO^gsWOPkK7f#EOKViVEv&|{FT3CEX}ZV@gO735^TYJ{vC6*Jz;cLcC#ecm zQ(U_oZ4X@7i^FCFG7i#bO{gE*hRe32RYFYpiFhEwT2E$I zt9cqcHk!_s^!u{UOJF3?#-|&eO)@?}N+|8_%m~zA8!4wQG-V|~$j-V}&aUu= z418OeY*@gBm73P!#0H{U>BL z1hlTp98oGUvtHUpmc)D+{Amg^7+w-ti)X>40e`~FDMm_ammYyNqypBa7Th1LEomZ( zDQ!t}ir}SD#6S^YP5pV|Ev?LN2r zzfCTJFos_r*H??Tz;-F?N`=Bx%w~7w=(@ ze0{^FZ*ShmTXGJCuU@shR-K^@=}j${vwO|*0>Bna@y1;c*koyK)rv)SjbE_|U*EJI zuw8>}-_{T0BdPy-?3E;6_`04Y`gioT$LX08>M3ao$$&O1l>8ejRPz2VdtZ0F+AdG- zKgAc%^&TrzH+|eb+6pwaZAApWGxRu7D&no^dQEZP+i`A3H3a+W+!Ya-jxn4V* zGfL?Epc@3yPW`7J;xB35j;8fb{E0a1QD(x=6bggTNhC+KOIDlgQ!d)3t=)!6ecOk0 zT$WBgppxAQ+pRUv&!iVR+LZmZSJ%I3jVoWCA6<0P#!XY-(_(FQbYjD|>i42d+{$^2 zGxg7K2$zz!)ydEhi?eCS9%T8%$j6zLXO{V$_6sM4&V?wSdrw*3bHn~6)X;97eeV(+ zhm7cdV`Jn%x%%;>{_~{%EP|1-vQg{LlZ%#s$m3kPJRSlQ5>u{>szCivQ<eI-4w|)wT;B z_^#`(__>vTKnO2F?m6SS*b?hyp|200$1bJK4dEsA0? z9fNAXwzsXyt(fo#XP;-Jq3i|QcVF=RUmXpA)?LR)@L4S$3!gs++EB$*seX=jNQN*w z4>_0n>Ic%|y*)ccsQyYKIH&cmeb7im`pi)z;x0OKMyQQU9vVD7q!Nh_+cNL@ULp&$ z+*ELEXM&!TUX){~B>d^mb! zAF!2oNID;huZ*N5XM`6ZXsi)oq{Qk=tD|ik7zdxI-`fTOW6`0D42XBJIW>PKc}om* z)goh|$eH75+*$5iga0h99b1jlNW(gh*Hr*y0*`y3CAwz2; zw4E25M$MX_Y}c&eLAYiup>`N%LtAUrR#WyI9-w$)|DehM^prZ~r7aFwwYuF-fsl}x9EM_|=s~Hp zam%2(jrl}Sv9oBZ9H`Z8C>)EUGqgn+J?5<iLFjkm90cMCR$5=SzJ4t>p+J zW+ryrT0Td2&naOILd+Hlrr?;6j1-G|4B5-)-xjDv21cNp9rmnr>arFg87Rm2TsbO7 z>RV)C#<-qCD!yu~o;jx@)6y|iSMc_j(gZnp^5rsTq<9gMHK!RiulC6Pr_&0;lXhpJ zmqDE=8_pR3@L8j6AP?C%F|=G<9~v+gU6cOMOe%o2)+njZ6(Xqm_!P+>|@nd&U1%JJ=<^>1m#?lMypMdA8Ish?ggzSV7voL z?J@1r#0u0zCE5JzPq;(p&0Fe!e7{&)NNdUjaP>qEO zL*~i_?P%RrK5uPI-QiAwOIwjoY>%L-lN8wQ0xTp&RQELu5;zc75nL%uzhQ!ASiR71 z#ML4HjZO(#fThCLFbbv`-fC_WLwlRPTcP}|E9J99qt6OIw&};V@IzX_=#21VQ9r~! z0%dR^!H@(B)D4>U%Tg}FepyMh;id6xL7WnxY(djXoP(r$adr-u=YD5SZt!we*mh>< zfUB-~`K$meJKpq40F8x0)9t6bczPxbbnFZ5X^zB*K7YRu(FfM!j=trXYsYK@f+HI9fbY=-&sE9Rxu$mH7fMa5 z7&E!ybhHdzuvNsJk5*ITNAa3kew3f>*a7Ke_IWJvWZ}{s>xcXlEiA-qW!Wj+k=cva z=opi18K#yO@7zhmUnWCDSeLmDG(O=htK*?&f-}sybNE6c`^XSbJW3J-O==nyINDI& z^nd;!?kEj{RP*$pe#5UR?TLNtpN&vC>;PR)G>%{|{!|_;pT-I2g zap`)!9HrEIgPMRF5rl~!^8jbH9_TxUu|b

m$JmTyCX08Ri*HwlyZ)B`_1A;%12GZ^aQezTLu#vFHxmyJD$I4uSc- z`nNf~bCM;B^(np`9LWt0FW~_!ORO?5Fj$|^P^^zqE!GFNh&6(yVvRymxT+&_Kttg) zXqf1tm(*Bt4=)sEiWgF2ix*O(cqPUDf1zREhoGGXqN!&c-UJ@pO|x5h3}P*l~AFMeU$>R%6UH=ZxMQMu_)av=jduK*3>Meb*?sx`rfyj!kq5^v=i1O#6-+ z_I^(XO^2K3ADWw=%4cReGx|5x<^QO1{dx|cU5_VW%Cua`?SUJ0m`S;$f_-qY7>VGj^_wG zFuiFzmu(yMrfm#YujZk?b$Ziw^dF8Ol>S3PRmwq(5GiMBUcv(|@>+A*#RZbQQWxr? zRLth$>dU3PfXWZ(qEW7iVJ)nxqWwJMqISrL3JZdX@RCO*_r?dfz+0#^o{Hv`Zuc*r z0Uu!X$<-%<7ELvR6N^BGfe#GC2Ox;LG{Pa1XrmX!6VIi?5>FdcVi_Uufir??ghqI3 z)u?we)rb%X*#nAWDi=&q*?l%^f;Z%0mgZ~N~ zq$#WE_!_ZQ>W3b;vk)!Fz_@w*VJ&)${mDq!#Z(^qh%Dj5Djm;EEQw@`cL@+JFcI*?DjkE=TOF~|z#60}A)s5I+3k*mIda7ao zXxKg%?RDmsn1ihLcuR2|)u}%nCBNhioAt?!AQRO3<-1Dgmq!GIuJN;@A{N6`@P&1e zrxt!W8YnxHRm_$nLik!Gz1wudOHQ{2fIoOb7N=MY$%bzZOoBPccpwrPrAGaLpN;3BD=2)mrjk``drK{*s%TQ$5tX)C znEF{0U|d?Oi3VnHn_9{#qJ|X;!e;LKnJ&&w)EZl%9W(jxj&9a#7Hg&5|oNfKl8n zG-cqkjiV_663oQ_HqJIn8$W&NRC9GlhhlRNBGmavVG2wb0~8qO5qGO3{6WS70J(6u z?$yzvlfNjQt(c{7wQAV+w?*ZW`VHjhp5|oQuY1K z$~!5LUjZw`ys!gkPT4KN>L;cZ**vY~uvYN$d)VbP?V0`)%s0l4*9lF&Vt&gG**!I- z_#M|U9pWP-?X-Ijr$F@Lt-awLbA%mRQrFv?{SmtkdYTK{&`=8Ob{?5cF;ie0_^KFD z##9?u!np&p>dw((_q3a}2M$n(=t(>9sWk z&ZLv$1wS+8Va>`v7Z0zoNWLL;1P1A;ivz!J*c4|jERK-oXXn>q@p8F(R9K~Z)Nj=s zjjnT-j|EQ33)W4inPyB}KG}nTU_pPNv*{hocGyqt}kcg`a0t3h3mf1ebet z4}FAiUlP(-OeKnev>uIT2nZ~1^EBh`jk;m96%n8D4e(G=2;GVT*O~CjLx{;+h%ECy za;KPHz91m(EQPSL=|&Ya7^5gudMx}wpHxREqZ+2wOG$a1w#Cu{`@5Xbdo|t&P|7Hg zZ5tO=!zGoiIE+jYj*6}mk!@WCU=%w9E9ovN-VjVvY86hC2P%|KOlPRhASSrMz#nS! z7W`A=7t&(Tx{-RVbm>>1ofXYG^okO!>k!JOJL*JJ#b`0MJK1Er75Q31EAhNza>nv- zvDM1r5LKTfZ)LXdd`{M2mam68QFxI5FK~-GVWv1E6|@aJR##JlOLO%xxgvlkP`v=iWH?PO;{?^ z3S7`C5JxlU4*KS70NoK3U=~*@UWFe-&$b^VHL70E%b%?vKXc9q@xjy-`v~G0qRyj0 zfY>OGU~kC+Db%DIg@PO;)3Qoly^A>g4n-v-00&?eid4(jmYoR>JTu)U-Xz|64%^(jyK zibva{mmiLVU4pL>56F?8+05T-UI?PNzw+xgnZh&E_8OT9n!O>7td zooLV|j0zAwm1xYgL&s5xNwSQX=m~_m%ve-c3`P))fh6che(|w;|5$Ib9`X!}KuR^* zq-#^D*n>12>-T1-brIL!>a;d_*+z6baPlUd10Pev(QOx_=a^7OkteA-9cS+d15r=8 z)20!%;k1_khG~dOK7j{FnRr%`?ROlH|0rW z+6%Zy{bPSDEfs@=t$0FzwnyMy0$0Hj>v`1lz+;>EqtB~9_r{DMwEC&{1djTdyHk7i z$oQEkC!P>HvEy)z5&xP-&c}mw^k~O(j@`g^-8ab4q;WQX)Hj5Cwg}a44EIlPf4vo< z5Sm-Pa+eO(D}I{yH>Sg1PYDYk{>hA`Ftx@?Dy`__03(VG2wJqKL@YnaZ^c@r8-B2- z%*p5J%Ufko+V=XX@?Lp0)%%K);4E5~{L{Qi8LbXi1l7-JJIGlGz zoQpfCOx(!stoPb4ES3d<(lu^N>We!&MbT-)hM<&Yipz;20nhxP*;c8EoutxWo4RHU z05_(^o5^VXcUfc=_(8?tqVjL#DFR4}x1-NDGTJsxD!90_)0D@XVAQN^9frTDY;f%QtZ)>iA^x8+{mL0 z9~09n>IWYdfiWb`5&?%~6{pu6d|@hvdOiCDXdtQo)W1%36TddA_D#PD6^1iSl3M4Z z3-;=m@!_YQ$`9LSK-#WoU58oL_d|8R_av4}ufCyl)#lieJ^9f1$qf&5?9p%Z>bJc) zh?o2>f}&(!h#{Pn92?#r;!i=>?mQDJV&O0cq1MUeFEK;+jwYgw9`~ZQtQjy6GmZdN_>% zN_U1ay2p%1$^WWf58dg~XbHK?4P-931XnH(juMsxo$hI0&ddr-(Pl+1=lF$%kocbr z_Im9uBvA2{9f){P$mVap0uK*b9^Qpl&T4O1#t*cynv)jGm@}@=y;z1~y#+(af*cXd z9XMU~AVO&srrN+A)Kwh}299?Q8J(y~eCaSfO50(tlZBZ+b_1Y`ylghxS^wgvJM~w7 z7TitipMIVn^NFY}UY82r=E3-hhD1kA|EDFf>9!3)nK-k9UE`eA`-4pOlmP)=e2(Cd zT};{J6^cLMs&sg20`QEhRJt7l2qliPB*+vHysf&s2yOK{^Ru7$5N9I%lZiMl;Ru>m zC2~x{G*l5y36dIXS|5Adhx$k3p?0hV6`>|$$j)v>(VzPRFaG;Y@%q2LH#1;8Jbv`g z$5VUsspgTg7Q6@@dORw26A3dIz&vx!tfOEzvu+`(L{shplw5FSm@i6LS94Go*tWhp zmRD85VR)HlTKI?siS#wg5!a(WVE&=e^O6_ALD_;Wcz|+ZunroSpfxAZIu(;`$yY+kC8}ypL`BP_}CtA<`@~b{a_a*gbf5XdtSH=RE z4sk;vPY|4zz7#?~pIfx3;->98>&HHJ28z@O#a?Ff1jexSb_SFUruTVHbhZ`+X9u4>~0Dks%}L?S3!{M3#iT5+Bv z!ZDk08&9A7 zsH1Y1(B|XIizi3Gc ztQ&+ZOZ{)_YE3RAjfpa^ZCfFvCLuTK$!tJ^pvTU%kiT9jw3lffUn~U)!#0fM}agY+&I%uO>N4pfoaCHt20_e$;*GDJ_LU^N}f zE)w|D`UG^CLt9yhCFQ*(_hmX|N$~|KPQzyqgX64yRHo1^Y`_(%WO#=>4{Av<1~w{v zi?Mn_8EYgGU#vWFjOfKYl8%rRzuFsFq`Eb;Nl`xWqN$4N6RX@u!!)P`te0JwcVhK7 zrZ2BLOYo7Dg4|e3U?%DtZX^|_1FSxOQGS*$s=8oZF~;-Lm*_1}J1_b5baKt$xi)SPa#s%`a^d|d1R0glulU9KsPi1xMBm}K`qwHUD?e57Bme=$FWB8nD7!^ zyZx*`{0Hq9v||H~!@YW~n6ENhWhq0Ew8yn}K}7Fkq>#Y#Z#g6T{JKj1#K#C`P_-kt z9xYmeNnAvuR4f$Db7qYihj8UV%8>2>{ zvJPk+LyBuS3)}1&TgafnTwW#QJOV^g%GT@ER`{J-4b+WjLiO@61Q>_afv3l{ahhho z&TBNl@d>`R)->MhX;t855zj$)k${1dH|gSue^?0;lY#bXvU-Ou^y=dsiN!z2+@40* z<}!4Q*rS3SJHPzV8??v(x-hpi_fB~5K{hWipDdD!FjULCQFp-CnPiAV|5Lb7f0C2w zcGpiv6F2kjk#d}2;^LTaVT_Yry=fgjG#KHUfw5}Bs1kZF*)4rp+(20#KJYN^6c(O^ zA9^gmOZ{Hv`}ThYro1j^PVY7(GVr=Kj1^^86$#tLa#T7guHRTrTC>|!Oc}M9nyuoR z!rS#bG)A9>z_3$1y4{kj%j`rUVm1XVb=ku3YkJ;HSqEiz6D9T)ATT02zENflFd&XtdQA(hrA1vW=j@^68^0L)`vB@NM!ct&Z z&(U`;f&(-B{Ax1RknM+4$_-kIbRqoGYDmjjPOG3>k^^j4W6{mKso&Dn;a<)TS$1X* znLvP9sEYwa8|+xxU4~+~6pVn&c2+ZHnxicri=j<6ii zU#bA2H`;ksp>v<#cftR=_+Kvmv;XIYeToL_nuemylqDr^XqS8}mb`gg$zAn3Kae6Y zOoyUp^;_&S)HSghJPjNphQ*{(kUA*BjTuu*(xm>p3#vlYtT~DGB=yhR*L-9;!1S3l>#y@%l3;-L7H?>E0ZMIy$%bRFhCU&oC9ac0! z&0fuBwXikNcjk#ocXQfPapb(@u-M}rR<~i0&U5{6cCffS?oc^u%+EkEBQl zj$IX36PlPLUXO2lE0uIrwhs4n2MGXoD%TfO?pZ}<8cs`fNsIq#r^s|YBSx9je__Ke zep`#Nsx0O<65YJ_%uV~VS=i{wy0lr@&3i@o%D7jbU*D^kWJ%hcGxlFdVQyd-JlhHf z?l;K>5xd3*QEkVZ@GTo>I)eoVPMGP&54&aCcVDMaNHZRPev^OR=2ZGTFvHA_t;mcS zqBjoT=iT(hZP7X8F1-mg$?7p{uFbinDUdf`N{6M3g<&XF+sDV9w%7#-n&=eV5pYwv zJmsV4sKfE&8PH2)i{4y6;vY-s=wnHp=-{A`f2>XJGedkYh^h?bL5wQ5<7q?kVt4)W zwVIT|1UfDBNQR--vrc(l>wB-#HftRcL{{2artrFr+d z3=gRa^GldZZdsMH)wo%3W&ebZ@ zQP6+b69nR8Z6C6QK{JWjOQo1SilC;V4$Dq8UDMoFUGj3FLIDOW6s129S@A{mX`!0rgZeQ^|Bg zNpdd2!^^JpYZ?bcQYP1D0_S%75>I!&uQBGG-Ar zJbqV(*xe|>1wei5HeR>IsN>jXqF30I8_ z4@&AEt{P8`yFWY-00t`r+Tt!@hDnoQ>TIjHIbJRm_?s*-`iO0J&iJw%o%Obo9o6KTtsMb7Nr4d7R8A@!2r3)WF@qEIls!Z6E9xQ zSPMc2!vkT=hQgtD^pC>YkU(b!^osxUK)qv27%P{TD;{EcgyJmS@MEb$O7dmqiFgw` zfv6ukEF*3Tl3@&qr7%u`vZzgF8=6zc0u`h}jXDN@d31!J5wbE2bUy<)W&oVBd)Uia z>mg^F@Snj7&SGAlOtb@wmBU|rhs9Yl)C`sg(gT~r5)80dXD@AR>1yGi!@1DQc~RE+j{A&+*psv<1ROr6i#1`wMAHZP(SvCZR0q!YFPYUufDJS2x}mz zKmAe`*WZ*A?EkB~If;@V4`n+w3W+`?KsN@f>>Rt3A7#FP$3U!Cs#m^DpJyqYn+A;# zv&Gh|4%@UU@#XND>^ZgxHA(Zc;$uBzwE}y&=_({j5?c%6nf8AH3cHaTlYz@8^7n5- z@`q?7sRgmU>2bBn49qL*&UEa?i?jcoK8pR5-mE@Kge@Ii5JRUi+%t4ie-?}Tdpo5e zc6qEtdsK+xflNQtA#@tDiToIT)w9$!rFs8_-;&lv^x}I`?TMuOUS7qlygqz!w&>-H z`VIG}yai*ayaL>$n4yL77)Kkr$yD)xQrj}|c1xFv2Yd3A^TaDR=!`pau2;UNe!x0| z)k$Ztp2wA|Hmkl}Bf}&p#%t_NcJ~6Wak>6w>n^rGHPVCskG6M#xAUy)eBaBu?7i3C z$x4&7xfJ@Y#Vxf|ql3MHLtckoxPv+)<1}rcfx(^P(9-dAJ|E6$&<<0eV8A+tiq1|! zjR>9qRmxCddx&F{D&g|cGUJRH<>QIMXwWKAtDf)g_kZ4Zt+lg*Rp$`8*L!*1=kkC4 z_vioopGl3WyQ#C$N9`L}lGt2YMq-M~z;Y6o(V@&B6T~ia`nz#vAQ~l{Z&2JrHK*`8 zDwD3|b$XJ7@qsJ(rGnU4^Q!*vF-k2m9a;VOpJp|Omw~F)BGv?oi>vUG4(_ziC+C0F zuBV8H!OI>DE?0BFvC*1&6u;wa5HNyMG2U9RvIT-jZva7P3nzra=zii}CMwMwz6d7K z(T>U(L{?|H-kD0-HPl$=&G$sE0($5UB>|=q6-#Wj{~ zEaJ;;NveyWB>3ELmIr)tJI%mr=sMiTxE=l|xT;+#IM?rgu&5s-zG<=k=|i!Q_$=lC zuaNtkLHNHVDe#HQIo&q6024sx0XpEYEzb$%gOiiB36|;WhjCl-pTWoA=skF)zKCui z2t6q3PdpbIdXp^s<90$R+6ikaMdN7w!T)ghXa#}~SbvapJ6%dKP&&DtI3L;9td(vQ zv2vxRB&bF~CUpKo0IB};<@G9)A%3RU9>JS)k2W8EkcSuqyyi+COUMgQ6!lNA#S)g= zI5AIXQLH{TdH<=0^ZFOA)Dv19#%tWA&F3HfSYH3=mgGQ<*VYhW(JYUzyTtLI6}|#1 z2U{ZmeT%l60YHONfp=OoD8r}M@I2N*?bVADdHour6X!%E^Sq+CnAww7tEjRDDR#hF zwBSdDR3G)?aA6?037PxmTOIOC%4E1k(}-%Dsi*_ngVMGm57x+;O!&?zPh~!rM%8_4 z7V}#)w3`h-QzU6G2SWInTT#@T7DY^nW3d&^i0UA+Q(R}rC%80f3geMP%6%hT#bpN; z!9}#}6C*CcHc^658pdSB!ym$!kiA|dVr7|PP%>EaqMb;`zO4h9380g*?6{9MaQSomhb#Zvn)QJRB$1_UG|;hy>M^L9TD#X@7eJ+V-DlIIR~!){N} z4x&X!p16+A$?3LSM=yb*c;FOQ(wcc&r2fUHIYeP)uKvh#95@L^;~wy-zJ+F9_-8%9 zdR;?xp&nf`JiJ3O(tVZLXgdu{xClL89W&bjtT5Al34Su5MSy+{cJ%P!3vUP-leY9>wz)X zsK)0KV0r!Yp%;KS5$bY$=}-@+Ui`b~`;+}n6;bXE=aN@JOHv@ul9FzV?)v&6f3L9@3WxN8aG$w3-!^o zjIDm|UJeDi(9f<09~s?q3Oc9m0hcjgEq$v8$Rjpc)T_DT`Enl=QP!t)a7ZmdN5Xku zm%cvhYg!a|CFU5R1Z7o!?SnA_N!@;^}l4(VW$Plf4)u;ddjU^sa)N-uKi0+XXqgoYl`|D0kf+U#JoJ z>FUMr2Z~J@J>a8*Jox0Ak2Gyl0004X>@rA#n}_kH855U8o4AshYIF{16KqX$aCFir zsK-x;+5O2K2n7+AYMSDW(#R%Z8g3hEbZ!Zvmem;_YIdGjhW%}nkI=EO3Zpiz$u@Ae zVR`spd*hP%)Akj@C*<@k_f)wDVNi*nG`lDYbx!b|9AQi+AHb=C&IXScZQu(5T!Fa4 zR1ukR=P5F=xPt33`bU*!2h1&K2^Vs9d!oLdxr;95_5YlH_A)OR2s%h>L-phqmPW4>CC)ZK(uIbq#Il!Fg#bRZ34lzq~@KUToU3 zcIkeLvM}i`@?%4v*m}{cCL-zTlUl}wD2pscR3`LULs`>%xP%{~EGbQ5@VRvs^Z9k6 zg#J27KENKN)dZxQmACs*f*r&uh7LRvc|}**pekmRYvYD!z)o;Zps`lR%m}EwAC5Bp(xrjcUhdeEW1khO(@c&SL5ozOTr6AG5D}~7iQ>^}K3009@rI_U zlnQ3WI)wD?c^YL#(I{d&TY*neQEQ5p9S_^jN?#pP zWE^NNQsEZhbJM+pVNC#xi+iST)ueA3P3%_JD*mKyk&TQrF-BbEFcMN6tQIYM{ zh}vBBSRpUQd&*{K??Fhqlyas8c(FuHv)1LuaY%`nh;}4tXLuY*V6n=9qmD6`8Lz8- zyo6x+tEuBUTTZNnxVQgS0u1WDtUQ&Q$m2wWwGF(C?}RjK>jscPuk!eFz30Gm)vER+ z^WE^A=FqKR@9C(O$tZSH0Z6j8jf%%2l2X%K0_(L+9A$aaQzKz;POaK13PP=|m1a@m zRUrsg&Q>WprqAm5+-pVzpHNhDQ}qTvH{)?E_5eN7rd*?_A3KiF>>V4N3&-l+;zDKp z%}ImxKHd7OpY=W#OcS=!OPej~&wRRhgaqOdN~O4Ivl~X&f5}EV?Tpd&BOhyu6J8uO zG@E7g`gm-dp#fCmc>QDXHII7Dqu)#wiW4fwKS`;Wj{0)P*!|=uD!YACg8N8PBbdwvN;= zM+gn!nU1{CHa<;3_sF=vg7=G!8=QP*LyiJagQ}pox2CaAvFgWx75r4(!l^_kYDV$1 z{Kwk4Yf(+C8Ab)XY|cv4uNEhIyrdUmw&E!5IyxrMZ9L)FCVG<41x;fGIY_VwqnLiC zMH>l0)pvx&`Mwf;jdkFBg=QZ=EJEJT;Te$^r9r@xN_sKG8#YJMMf#zLVFu?6L5O~3 zzk#fEt|Kj=J3WAby0F4%7OL`yprf|#S4uZNSM-XnIImLTmj3uSot$dt^reoDQF0c1 z1JalV--k^YlPOKto*_7P+JqwJkKI<~TAq-Nr#-nNX<+bJ7!j=1AMt^Btz|-!twC?> zz@kvMlD(pZlK+!kYYBH0z$3iSwC+lfB;aHM({Z6hxy*=iXN%z)6;!->0>yVZiQ=Rn z33dmU&=_MlIK4^%eRy9Z9=pMJ;^PYcRqj0-+hUO=X7>EX0_xkP#oU#6O?@@I64$nr zAMx?QKgA#`?jpOmEnu`B8N%A-xub>*s}eJMN4)Kf=^UUO%T1#QwETsG!Do8;LULm# zb2?Oir~b)oL^x6w3!rlwh>1A3Z6tGrTn$11FnH0Ff!fwrc;4(ki1axJHk5gfNM5cl z*N&2oj6TQ*Yq>Ah)~%l+p4K19LVfmiOHOgc3(RDi@%E_cgaMeyFgWa!g0NNOm%fz= z69)O3?=XfJggX9&Ja=s&TJ<}clnvc`{_WRt`Ab}OUwE5R#=2#1bO9aTCD$MN`Jx&3 zk2ZH0$Q%wXN6QDBM|91DfNskAJ#$4KNLRR83pPy;*4EF9R- z$;&dp_6&`&Q;(H%p{(E5d_ePM{nO1IEj#yJS^t;jk(NoLk&iWx=*i&Pso%} zUZ&7)y$%BXHUuy0`nBA7BR94nm ze{B!~n3Uuk&ovy)xy;W_eF?sdJ8qYQ!n4UUer1~KG4D6tRxk1%Q1ZOgH>sT8H)Sb8 z+5Tn@OKkFV%N5=-%-6x9gzxzIqG$f~&+#Qfp5hDvlD+5xX2E;1B(B zASe9|%uYvAU`$K+mdt>9unEXccIw**;=R0Xk^l{VXZsE(UU{7v-tgy;2B76`{3NDK zt*S^;>D=OYBMwKvK*X*e?ZX-c)nfQiA6`up?PttT^BIgfeSzct!~GqDx8&XoDOCRW?RiGL~Frhp`%g;eN}-k@J&n#Zg9G5CAxW?5C5rfv@IO`+RSo5-rq2XZ4IODK zP$yLl%qzzKfgHNchCdI9P_iZq2#F%tv)t7m)V20Fwk)eN86J2sA+7@-1#7YwuxmNh z^Bz>uTZg~j=L;be&WD{JZC~-6%H@t#>Sq6n@gP8l(59kg01>pA9)c1gze;#GwcI+V zI1nvb4hA17@L8dZXbcL;Oa!5OFR^N)uly0fiV_;Ky&OKca|%v=!NgX*8x-+u<@s1{ z+ELuDXEda=fCID1zbVIf>FDqBv-zXB<=OpycE6r+$-iC2dw8V3AUc=KR#k{!0nvn8 zfj+KQ-H;ICL!Frrn%P-6)9XGu)>&(cO5)AFN;mrq;d5$fX)Uz+%R ze#9jHNuNDU;R3sdIZkTY0=!;h6_Z@e6S)c?5YHsmhUowi%t4bX`!zUc?9eR4DpA|o zk0K%_0RmvU2d?X9g4p1UY`8|3!`=MVtl!h(E0K;JZVsh86?y66jF_` z9QlBl39n8egyVyA&~`dvQp^Zj!x%=?r&$D$6|q&_fL3?-5svuKvrp$**o03M^c^cs zI=3Mk7>}CSs5FJgcJ5q?ov?rEauNg7ePdWigl5X(aJKpMUaSfkIQ-)txEKuV7*;Yj z84VY(=0ECbU8RKy%xoGWLgNJCX~-J8m%0ioYrmX)H~ebP!EQ4%)AWy*l7xw~QadDN zYJS1E&)&!cKnkGj?lc1v-$Th&cuvvq7WJO#RPPb5md386t=1oaV^jpLf?WxJ89jlD zR3_@zFgz0}T*j+SmJ%%`8vw-%(8ATVx_eEApNGD2x3*viYH0+}Lri1rM-hij<;PP9 zC)|)nT@;76AvnDr5+f2~;xWce&=hVmo(5=i#c&}%w5^2nBZI(l4qlx^h?pZY2Y-^@ z5#v$Pr+oN-_vJfyxXmM}arGFN@W7QDGRIIs1YV}N7jgrLH!Y_6^jxw5-%s;qJeS&c zx--6*Ym_mPbD%LMsN;HWCSW{oZv-9t1q%yy-rivRl%&$!NrGfdJ+!l~7DSVc9yHsP z`L-*-lunXsH+2T#?)JyfNt~}CsT>lAH*~rs0=_Kh1W4wt3;xmbm=!fs16XF^nkRDYW3M#pysPLWT!FTD=6;g)HhF1~ssIoc?KzTK}&M?#B>@K2CCQZ&`Ge3{w~`KDZBV-C#!o`(qeS z#p}8?r+m*b4hkjpz`#Tm0Lh!n?n@Ylc)jzivv4eHhER6C!*e8LOQeKk@FEX33)?xi zVXRwe5<_Z=pxvOw5Tl6Aqu$|5ax-W1k4lECqRX>42yQclIIbfV^d_ht9;SWtg52+w zu3u)9mV%ZlCClL&9bw)&0)bc35p=T;JGts#0cQY|VnFCq!!Pz3(q!N_IGz;cucLfc z;Dh@Lq?TlVy(_5?Um*PAFGGE(zxWHGQvB}Z*>BIa(tKXhe0TzXmPw+n_I= zrEiy`hS!nc4VHQw65A%?$DwE^Avyw#+FK!{cYtcm$R}M2T}VC9!8JgD(-r8~HQ6`2 z2SNpN+&hw0W_a8H1f)|LC&c=H{7k3*$PcjPGq3NzG7=lAO1Y0DN~l@6kp$^zq%fG( ziY?h|GM4E)IdoCl54r_#fi#9E0iM+x%>W)v6gk2ka~siSb1*rksR)&&5ur#v0s;OQ zMmzm{imfw@kkvqFnm1e5u@G0_zUTmegCr2e!gV_v1KJjti2$w;#yfqH6@`qG0tEj( zCec%fK`e+tkaBeReyCFh16raa6M#V{kvmSM6VYKbj&q|IJEpT2?Pt&c^L_pC0=tdcA zgC!ZkwWpq7Q0PZ+=>#h%VJMJPf(2s*`HT9lHwbd!abmIED0;(AHK_FSfpTUaW}stu zkfwsIF!=%68vM{4t`_Ek-qWANd!^;r^DypT4g-iAxGSSO zKHxLnwx3xFHcMG}W&IBRtkzX*+yw#X4}_|U0FtzL6|+f;n%CHH7Vc&uXnLVgi)LBu zfTh;(H|};;K=b;YTG64lZ^YuSiE) zYJz7|4k+VUicp=deBBvzgUq*(SJ2f^?CuWym6Iwp>kWX(C&Od}0*AqGnm}=fQ*ap~ zAe=X%T={#}`+z)cW^dTiViUr-mR1rZ)Tsa|eUg{y=l@%12cOOAhu#_cg6=M3>jt4B zY~2WR2FyR0O?yfKE| zQ#IIz9I#ne?vy#Cp22pFYiJs!IG!Xa(XBYG0kljXi8@0{CDCgoc+7IqG0a35zX!-c z>IR$Kybu&xlsN@p#gBS_UZ3vYDz~YY_E2ag?xJ4l1e!L)*77KHpf1ucT7O1x?$A4^Lh>4k)H%(Kafr(<(BOL}AgEseX0&vB{6 zCsmVLYRI#x%u|SJJ2B#d-$%>J%WzIS_awaAU&_{cfz7ttc8BzL(!bwO$ zOBT{!k%ke*0|1v;T3L+=%+j~UC`L5=ydZ0&Na|D6XNdGA8C3doZqIVH zZhc0kral1vh4a@KN>X0UT|;*VgP-w$Y_k-`I3c$rgSnJFOxBQL0KqZNVE}7AV45Jj z%nbv8m=Xh6r{F9D$PfZBfW{yoRU|CWvzQJ4vNw2>qV_|Vrjre~#IA=_c>uQz%k?i| zXaXlJO!I`qRhRrp41UUSt}$utFP5`FL-iGwOi!kLYm~BvHOu-?o)U?{roFtX+LBRg z$6~`=5CfzbCZr=k5ntipY(82GhbfX#SAc_oGWf-<#in#5E@>04Vu?USSMk`Y`{C~2j9x?H3b8j{}~ zAj1i*8cO6mp%1K~%Pf-pu_F75NL-yBWgTZxTHFVCB^EX}-gHHA6bZTBKl`AqmV5r4 zeBpv>NwYVn^fy}^wzmcRu`_JEwGHD_T=;4&F7yK&4!=r} ziXrH^6z&H2I`)QJdVRNkfzLrw6nI1VLE>%$NRF?ab7wjFQ4lCE%Q#i=)z=chNyoIp zMNf&CZo3oRfJuo7mI$*#p(`9hr~!60z^Sj5L9?62a{-lJP+h1>k=IXr82Cj!j4z~N zoXqRL@-PU*_CmM%0*26i$GVX0F&$Op^DlJ_V+4oFf4fQ1FoZ-n2(k^r1w1aYN)rx; zR^<3No*@BLA%|=$JfJ?smmt3XDwcU}_}6w-Du$iV(^CWtEAICyl{yWBAc)w3sYIP~ zAYZ^(5D`$3ZJOAvE6>aPKSJviCf5Z_ELEP$#}~}JK`-Z<(Uvq(3S{@A;Y=w=T2mH4 zpLv6u#51f@;rMjsUBwrKp>AFG!_2V7nE|759gv0uBSZrK_{|b7%rXm7RL(A(c0vlc zf?AVWLlm464T1>7&Y`F3G*1i;0z(m@nl(N9egICJ7i+KlfAJeF@dL3d8o5rwMink3(h5a*H| z!j=GpuSS*Vy}U_4FNR+%34bNI#2mH&b?B>**&2_&Ab89gcA$%*_(i!bDg@oWjQSME zy$+TnkWfIO+)A&-I3Z{y%jFgVPIV#e8XV~k>K|Rn>;Li2qW)r0|F6|B+3E+P2!K@@(c}Lrtn3DzpvBr*Qnv%9zBgP-q3>Mt z*Mst;3BF9L4)ALk7JR53@3@H>hXbt^a4gLqMfI^0$z4{Sz*sq#Zz+NA`g{vkp^qBI zB?rASk*R(N4AcQS*$g+r=^y}s+B1(615*VxM%kP?y)~*R)|SmM4ljVeo>MaeG0tfn zRfEFwA}kg!O9+Q!xkpOqM$5ag^H?@peVgq=kWKBg_`bZmx_1Mvg79bt$fc697PomSK|G#QAzsj zOm?e{(kM4tv)+)B!kpAb0$d#pjr>U2(ha~N(evCt`Ma=HDFk^-JiY=rec|r7OOTTt)@60=(dvV!0^1<=}x1`N8w;@+t(p^ipb_|Ss+vPa zXR20M{y(Z}7FAN!99&9*Dh0{9t1PE>sagYg0=-6Qs1{SN=Tom)4&EOCnOjpe0^%Q0 zb+sggi#kcf4z20nRbA~$`NEb!lbC`fCNuT}EHU8~dju$_%?We-kZCikKmQxOYH9d0 zdHr*r>zKzM&+0!}N#}knAs}!JeY|AfqZ2(S<8ucj(Z-K4OEHK`ZQe`zT($?6ku^8X z#hK?CTZ}m%xmAMU--4TM!Pi_{wKsci;jluX1#rjM#PdT2bfi0E*OpHgR18CHZ}t;b zsJ$k_Q2im6e@!E>jr~pS8o@uP0oQF7KO7#!o!s_{QT%UdV4FJs4{M+kNq}3RWP5HI ze5fe$H+B?0cL)<^?x`8n1Q&fJFvd43+QSVX+6Bz}fe6W4$#*kiInAan$`f&T{Gk+U z(Q6A{&vA?dBM2Q9lJ3+@$R`tjnBPzoncM*E39d?V<45xNJDzKMubsb7GTB$TeypEY zH%F46`6Qj~yoT*MvT>o#RQsvtBB;?}#>hQ2-WQqxG!1Q~E%U$_HY!vSD)c5Z1&^{Q zXq8B&GR*(|AOpG253++q zPE3RB?Q{7?;n+%xWA+oFaIn+n(Ct8#vUPiopx(=R(U2GkEavMIdFp>OZj2u zVrFGZF>hWlucziMH=NmwH#=_|1kcvRiOw(s!R`!nS;LNbLjhSkZ}Vu6bcLaGHE&wp z(7f?%YTnApyp=QUlr!z{k>*WZYn+J-_Qoxw>1oz}DHuy->n_Y`?pSqAb4OX7Try`d zt%h{mE3M97pg&lmGI5zL zxqShW2m!(>VhVBnIv!+rcVB`Sl1tfBm9eBjhzE0arys+lH zCb~R5#-46{$q>`pk0NR~tJ54dAKePBk^=@s1JCH4X;q~&_=z6TYA_Q5G?rQ>VcVR^ zLMyIHE%TsG&0sa&Vpbon8*Qu>Mz|Xpvp`_}5(O3YC1#=%gxU8E1KKEH<5WzX04n9H z#18BnS#%Anti|a&t&AmFMXjEUaPKUC$lv2gN3IwZN<*?c1oUd8|d{G!kA&cDMDg zJ-~(%&pSK@G+W6!1B{-YZ-D9TxdRN+k2TbO!$2}fEM(0AIruQ`73>7vUk7!7GjmHi zY?x@t&vfdqzN@JJB&$DmPtvy=BpKlYDk+RzD$KG#5}HZaY3j7V8CNhup{7We$Ti_0 z>km5F8_QQ{qGbZFHB}4K;YtYs7Sthj6Gu}`>x!LDZ6*Za+l-z#nn(O}LD;LMsBG{z z{n)O`;&m70Np-{$5dA==MWm&Ai)p}+a9q<>Ua-E_gmfhi;{lg#4J_rlbrR(hE22eQ zP`;dqYAOH++*kzqXi+^RjI;V{IHz=RDM8} zsy?ae<-v#+9O1b}#lTSu@}=fd$Sbo91WPqG)ile`09ekMI_VfC$Eg)Y5JdnebXDCI z>giJlT4*;6b&L@*ABZh?AOz9uz;s9A{HqkmM!9)5m;oD3{kb#kxD@ z%$KRb6q?;MWfFg)#7=R+&VV@Ch)-Y|T8fL_BB#AXpbRmTRpdznOT2@E<*V9Y}b14?lan?OH5OvKNK}e zQNK%npd_tsAn6bFh~-1^$9q&l|MDKC*lYmpfNp!AR>^wEGLq9FirWxGQ|B)xgqBZK zp1>uMI4qbBWG_;3hr<7=c>s&pYPgC4O^3iiu!6}7;@7145ce*TzHE$QGl;0(<%q(K zh8?1$ZqcPx>;q+DbPs?hzOgqWh9MES$2LU+1tp0c2nn=Gfo-Fp>fomoW4!}TOOCSF zH%LZ&PtzE5*YKxfilLO76QZCqv`cp{!xYa4hx zsQ=>ePW`#VdHw5I{q8R(0nF%u&a}&Qk`5cvZuhzv1?Z5GS9l#zPsg0)1;+qX}F`|(d>I=1fZKkh~}T5>rCH_+eU6on=Dnw;CiPeA!h#-{>Hv^Qq> zduD}Tv=lVcdyV$vvssmE49bp;_)^-|z6Q-; z_4=ep7$_3f!C>{7==qW&6;U>9d z&%BM8>cNv4aaEs+;$$5ken1B}uDg+PO(~iIlflE>A#46+<1&_eMxqWPp6#|R2+i|` zX7edFcz-D)-Sm4v<$U-R)>E5GfFxU-i#m%izPvu_-TGQ+pNxP69hy#lbQIxXMp8e1 zo`HTq(3{zpHVO1WDB>yf-m*@;WeVYxT(#389L0FqF3I?%1Z}hTjQ6DepIMLTOs~hp z``y#bqoake+3)wvz9+d_^ZsLnqTwJ#VzeIDC#Rl!S7Iu2YU=qp zsjxj49Pz|p=myN0|C2o%9!Pp{=iL6&JhF?twQR_9_*Pt(!?$s-u@!u&wHG8k6M?81e^pWNrSRGf8oPg%IPJY9nvMhr;p`zD|qznx#Kn0ATJ7{h|E$Q8)6<&Wr%iO zN~{etVkB6a(;n;iR-ML>%5j>e*FS|4U{4@HjR? zazchoVxw#;OSJsIMwT!eTK@mK;sgbZ;5bcTE48AgS*dl3{+?g#r~-t^`Ng7Pg^7@{ zJ1$me*fJ*lP&6YKp!k#wOYJn`5BaunqeWh zF~KgSpgFvR!2nk^HAEI+>wcny@9}L05q|okjF>|ZV0dgF=?UrUh2bfvV)$i|MmGE* zni>8F{rOs-+4RO-iGf2-CpBEv!$_3KeyjBGOM2+QK)9tJ7JCe_%d>kRh1-J1zUl31 z`z;)y#XSXlkdgRrxkq=1ANI4*Auez|#_(CeftMN*Sj=9Z2}d%%d##fY&II6D1ORrh zRWD?kZDbM*T2une+OrExQ(63sP_M;{f`h<3 z8N&y4Iu0V!sVv)im>Jn5ZhOHKJgDFCrrb33r+NKjoD1=e?Gnd;;O*pI1=eq8jd=LO zRO)=2zmk*UiT-E9zv>MJN6L1Ci+q*&G`}}&niVf1VTpf5gZABa|}p(XE1YN_G7kU zaVJg>Ut&o$_!0;}{c;^bIojEVSEpcxS|W>;90(68Zzv3>g?#|Cg-{hCxrr|}u}giG zs8%b!Ob6Dg)9#B6E;9Yfzs8mj@L+12)cKBfApjj#)3Pfm+4g2NO7Mn^xjG)A)Q z@{QhUd*@w)c{-1ryRScZ_=9=*J$G$-WBGqUbcdb>OM&XhV%vG+cW4AEhRPkND9)&JgR3f^w)8H5+ZE=)d!Q> zx|PvU9McjVN2X4^5;$bz`6+_w@9?&qlY8wX8QU#|gbOkodmn*I0(0!L&@tJ~V>W52^eJ7Y9& zcxLu#4=*!Yk$vBI&=DRCCU}sF$-;cOAv1#K41`)hp-dB zACchNanSV=M8ZsL%GUz`()MOK>Q1-*EK~lzoM7LM@E8eMN-A&BApT_b3EjYkzf zb6Ue@SnewHB!g097IZD9X)sfMI-5{Y;&9#9CvG6m3?zq#bw#g+FW5<4lE;1!;G@*p9PbFN4m1Y>_vY%N+oAE> z4bwHSXMVtv%@Zuy%#&#>5sU?=DF_3;7Q&FG@hDkcVx;0Y<`<6m3Jsq_jh6|2@!})e zesC9?Z9>@&k(R?Z@2ED`rwKGrc6Y=`gSiS@+jj27Nd zb(2F#3`%C}DXBIWGT~Ai47gP|JHl!`p`yvTQ+lJMf+fycX|P#wQCmf!-$<>!>qg(i zz*ZNQN6+E+Fn*YkM!jQsH0Jl7YI*c+{GP!K{-^w&;P<)w9^^f7w)L6q%OkQj)u;IV z7Jg6idnv!G{QeVukMa8~eh*U5Q}{h|$@1u_{GQ_XV%=Z3Jc4c4C-|-TJ-Kyx^sW3J zL;OBZzdXN^-_!hF#qSv~;c9*l)7~}wp5XV{{GRMBkFMqS zApO3M;VxV^x*pZ-B6#1{iX%7SI^&JY(1pfQ-x-!2kMvhWKkw4uV3kUJgzH`S&y5FNckdzRP zIH$(=a=KUV;v_Ta{g3v<4f#Xj7c8rJb3sLVXvrn90_pkJRo6lf#E}pm+`Mi%s0uhD zT~3ZB`VT#fOZz=gGEhT~324XZr1eX zfUAmS_ZHDD78{RgvAB64j8f_AmM#$O(HAQWkVrENk#mSiP9SoSVY_DMz<5!5&Xz>61MOp<%m{xA9Wd{MPPhz$RzDz%1@E*}{ATJat`OoTO=d8Kj%aWmMj5Do;qY*O zap#~u;UiR+cIZN|$?9MHP*}RemJ%X{Pks28Ih7J*$~}n?q&R)-Q$_vfpN9paTi?wC z=_>~rXni*sjLQ08v8<5oMVzKB@pg?fmIC zxo8Ya`@6$OKOc;4WsDw;h^&upm!G&FtSY4vOGQ*bNg_sjSrp^vW-Lg4ZmKTUf|Pc) zk6(ACDyeR&ZeAJRe06zPX`1({*j3nlSC=c>wVbw(Pn4c)v`?{>*+_0ToVXlA{C!uJ zCokcSY976$y13##tDdUbwedGKfH?53sqNDqcjQ6iRFZ2H(cn#qyDq|Y44rMxGKI1TylVxuzwr$VU z2Ux@zwP9FKA2PUaW%MeZ?mIGi4QKxn=P}r`RPB z8JUbuxoPShC`#a+qbePf&ZZEbYaToa5y%7iUv8GQG~J)QE2CR@y7$OvpG0J2z1>?) zL2zTc|31x3niu%{;T>0(r!+@guWY}%JfrJdt}YK%{9==>rr%@w<@t(!BkKWE3flm9 zAcmg4vYGHz2Lu(`tO;GmaA_X{%UtT0IATW z&s;R#B92Y&g^LzRUYjOjydmgiLuKmOAhH1-84AMsWI3p|G$g62SR+I-pvOtCnXfiU zuaVYL){lQ|Ykl{B-f9NQK`?k#?q#d?VfoqaEthf0eHB|{df5Sb%BI!~IMS&;)r1M8 zfON!(!UW*Tmc3f~hkC&+#JTBMOaBT*6lmIWjuk#?lBvLicB$ zJoB2{=5>AMR}|Aa8rCP{0ym~3wMHB355&c$`ea;esUL}prTTbWY^zVi#g6*nxVWT# zC@!8l1PD9rfwB z_|E#CxcIL6-njVZ^`W@<7b%i$^xY|TZ}f`#c)a?T^=e#vPddV8^sjUwFK?z-o{As% zJ)y-zT0zoxe)f}Zo;)KU(9hoT3>TA12>MBNpL!Fs$D4t=6%7zz7Z>!{H9Yk3Nv#Yg zYJLCY8DsUcU;X2(?a_&*HbCQ-Kf&sC(_P@^XK#CE`v{muqd?j3J~GuPQ{ZQJPc_Q? z_}S`IqfA~@!gR(36HKYRerEtduwwH4=qraN9Rf4_?86_MJOgb~W$EQxrdkKf{J}J6 zK*9I`r1Z<_A%n5;5*&^Tu-c`5oDj(dFrd7j{m8eqk01v>I{obS(TViv_c;KmL4fq= z_}R%6Kx6*$XTCOh1_Aonmp?mc^aD+gPBj;hGNrP5s%zXI+QL!=AqT|_H!RExfBjSW z@C2+#b}~+Rgo@lUy1E&b2j5N3G3Tl;c8(W@_xI5lQfEi2p28!C`oh24uIdXvOz&ik_~9^k|LOFwvIPA3{C9-v3&Sjxk_wk z;&DHGqBHyifRVcaRauTkICX+XiWuuu7b4o^%w_zeu=l6QGzfJ@3c! zzC>+2r$Y4h>Lx@PrMUA-RtO!U2Z&e$CGYbHShZ2}y)dEaoy-Klt^thpYRQrN%QImF zP04M-a404xiTV&%h|ME@IOIHZOfQP=wW4-pw3qq10L0i{T`-FzhE6vji55;|UD5g* z$Lf(*RX~^x8XzNhqYXsMMZUw)$O_l+?j8y}S7E zX_O*OyM3D|CUtufAIsr~uW!(1j%bKi7rC{deg? zGX6Vtfncw`Ll+Y4FV}^n`O9>H46k0Q3(4@8=t6?~#k!ERevvK^(bWrefrzeNpbLrU z=j%d3_;OuHLf@bZL~!*?T^#1(GF?dSeuFL$wiPa60(H1}hAxn>)zfu>gsq;Y3rScO zk4Q4j#glX)VS0%!Btm!S;y4%EbRlWEqzj42ExJH1RwTX5q{mhpbs@P(>L$u?G2j9w zeUF&kW4KW;R#4;j>C`}G(Wuz1=Wy2<(d0oZa4N~f7%d;khfQt zR^QV4TV$u-Lfc2TSI?3sh9-~N`yw~bzQ$1f^`Wd+!S6GqqTAyT+{k#ScFm$9O z&QY8lQe`we4?ZR!-QK7{4o3h24>M5UXP-fUJL*-slR_l>dDWT89R7m874g6`xCcTq zAHJtg5i|s3lO7+IYYkz_V==2&adPuX8Pt0Xw}acc#9Y3+Vvf6aaMVL1Xyqob<$YuI z$_9>{UoA(-S$*F;+#(;&jrfnMn~pS!!L~i`m4`Zgwq?&PJCDeNciQbThx+CIQT-~_ ztZmv8x}z(P>`+IvnhWytMjbhmzBsJza(_s_;*2q;Cgb*gVO`r~mRYvmL& z<23MtVH0Ho^!%XB;zo_08V0Os#0(xtu`#Y!BJ=@z)WIIZ?j9PoQn6SIQg zCXjWe(UWT%J+XeHt8x?&&7^9Y){tHud;-=E4H!+NLZb^h!brzlbdy$#yWSPIK}0Oe zu5DU5L5mi31woH@#p69NHQtq`2XcScxup(@mR442z3C?|m*KBRh)wFbo_ww={fh45 zfkE9s0n?%BE%QpOO9$v%%VL_hPMSsTulcj^MJ@MJKJN zk!fFl8;mkqKzqmHn5;-ddADJ2W_zLlW>IfB_yRO4SGE;)n zD?XeZ2L5>d(Sg*~U>l-q*+4jU>U;Xj5c_+B*xB9chhQ6|{@#9p0i^f<;9`|lij!94 z9va{HURVeO`(C(EPZTghU$0kLIfsP2n^rleu$4l-DBUwHNv=HHA9FT|cH{=X7DeB~ zMr0srW;RBde?7PSuzN)x3itW&ZeuAKOoNV@4{dg~I4PTqp>)@+mFhnv_GrS3}XpS>E@d#$mJfa72 z&G3jG2&V@vk6;Xb(DDdIYnr)%dFUxMs`!Ec0t&GLqtyw6s$maZ*h5cZwWq*;B4MVv zLl1>AL-AKt}=8GJ?YGK8DWV^Q_$BJtrO@WcTotfA!uqmHOEI0u?ha0~}~NY#Nr`$mFf zb{)qo(RwdW58hR?N;(|}%1K{x_R>rLzoBI1h=W3p&>y4y5j$c{uOakBva!|-i8aDn z5eIO0tU-p!^{I`bUW;mQ-tGlfw-!XbJcM>HI+tFdPodLx#+T?*JB3`A`0agI@`*l! z9w7j)6C^n)`m}Mzb1XA`NrU?Gw-@}K(nU+&^8R4Odwy5+tF5P&vtDPoNtgf%ibVIK z4^Yah68w7oz=V4fNae~PT(8HlI3P``qO#C@_C*6n)xbVf2d{a=R>C?k`%vh*pO*RaU~449(9fs7wt~51#0wzmMt`*lu;#72xkeE zVT};~?S&a~?Nra9;)xIs{?pPcy;<8bJclpNX<14^H7jd}WM1<2hNb2y8b458y z;u=w|C#@)F@iTUjNJ1m2#oR^0kklFyZiTu@*zG+8s}CApB=jR8>==*8G3%Z}!tnyZ zG*3m*{-#hHAbnl^cnX zsFQTjE+RNKj;UZt5ZmfD^_>9_zJ)2F6BVq5YPvZAFZR)i00fwhS%TiI@anH{>p)V%~I*`HU>R_?_~Su^LWW43GG-T;hs zwkH(rRpL>d4Z)KOP1-vsb4~W(uzGfN4RDBD(SSkNhRQV)1~-b}^%2D2D?1#UI6OQ~ z=8OpBHS>(aww+zJS%QV|suY2jAO+)>=r|9o)U~;GiW*o3F0KR1YBW1hX@*X60D)Y= zkMe7~5&KMHVN?u+@RNVCxUU~SEw(KP5Rfn7hDv}ZXjjs}fhX|0(tKv7_55oZNw8GpQKU0l9TB^rL#Y<0*G9~ zCNay9zhln<>vkRxU+R(Ma)ssY0qv6^eOF2@$p}@m1G}YpAdEEeAjJP^H*-t3zn0l%zCT zced0Vy^b=hvak&T%@123)#*kYt)trUKX`x8OzlNeyLKJ16=%BkCDBvV+0pukrV5=X zLw2b?9dUV1Z}WdZebm*to%JQmx$BlTqbuo15^c~?K-)tPL@>f`r^8t#zV!pzBT_3L z4me&$l>5`gf(|3NE{QoV^>YZRCC+%j1dWn1(Wy76_>ScYVvy&FQs$Ra`Zdt#4}V-7 z>@;4e%c^mLsiMD+f}c-n5J7V|ekM=AG z15aDfGd6a+$BNJiCb!Aai?>4I&P|fu7Y>I1p~oaBUQ#A;d@Jq%Vzq8M2tPb@_}GrH zvSLrv-Qg4yE}gl=s_{)u?=F>C+v)DEz#}|n&Q0O9EM7=I)4X$u*#{!%3Of(46<*j4 zSP!Eu%-Wn&!lohEbA@?2x`6+dDzYVyHZE?`g9S3t?Wo9*tQV=kK(e9SQ}xC}Vj{9p z#r1~CZlEQdd!%rfn5-DFhBy2P`2|ox4sV0h_OD{BC}8zHb{zeVbCf<&1<;dW0XX+N6Y0e5`~~Y}qHf1D2m7JKrN!krmKGJU|g)vsKl7y}m;CgJ+z% zNIat#Jmc&|%j0bc&usm&-2u#hM*GMsF9&(FtHnkJzpP`b4sQ!73}?(V7eEgwnT;=R z_E@c}1q(M3!6|t(b5pdqsGw)!d7YO)J6E{_->S>`^D1t%IUS!q7 z$)2j7$Wm5=Fy88Njp>SA!}B6y@+)|*50|W}9qd-q{!|SkwW6)qX5Upq-Wv#t?Lo~9 zw@ZW*v&0TEF?I|;j(I)@9~AK0o6a0IgA2kF;R1GViwiI#kzG~& zo47(^dR;(fU$Zo@$z*?c+cf;f8$C-T=GH8UZ>Bw4LF&K~K6!n;`&Ox6_)(MzIjp)|IR^?f^f&~DY zq3*)QFJ22xjM%DJD3=Xe^-*DBwE`hF&j+FYZ$JEB4?XbnpFHvSb2;mZdplj&>CQBS zWgn8PtPgEl9{wi@EG*)qTSe!Mdz&HFN4LrzX4@I~d30-Ff50~0eNOM57H{ci_xU>Q z4KSO9(3teCjiGJ`n@S}#IJ#9O=s#+Q4+e7KigMDhC_HX75vf}s??#D@=9vSDcUx6f zQwl|t*oJ!4i$mM=V2wCmlC@qbh!*{49tPHd3Qi^g*}K2UymHs>gkh0O0eu_u&4GHYc5do!dab&?W>G}{fxc#3|h6%m?6-y*m< zBmqa>G2rED!;7i%0(FJ-^D4n}R-AdT%>4$*0O)?h0Z9P0(0rG)EVPn_*Q@X2O)W)W z|7+!39!mzR%}|(0g_ye0_vluoLJAm8QQC;?An>{c8?fi&>@Cxz+IDXM8*i9A);fUY zruATmW@tZYAd>XaV53to90m*0L);I;fxfXa`K%-@W3pkSFKms4nC?bF- z*mVr^M&)e*C!H7fMZ-!u;T z7-=Bs>FhuXcWP!JsLC1$hiC>KcpxH~>47kljjCzz zUSe+H%2V7L6r5$lvNKz@4c{mT})Q`gzmnRN%=Jz?@Thn-wHq^dyR`u-AqJH;YeF9SD{CKv0r9c*`Chi!T= z?ZCE+IEt*Usbw|Q!mg8HXsu7w%IQq3oP`jVBd=Q*t(8NvgJ~;A`@kht;qt-AyqQ~4 zjW?!5tQ;$+$Trl;RR{_+P06# zdeXFJYQtpOfD&_@*i2@Q6N3uoXtlI4?rpZCo=W~mWS-bz&X}~&g|%F9VZs%sw9o(y zS}2CiI$EfW`!!l<8262~*<;x2Yny+E##Vk^ZPeD%d9=|@=V+swP(^g6<*?c$gxDnY zF3!_!v{6a`*)`hert@i|o2IqVO|pnuZFG~APivctQ`#o`3Z-o>gtm$9=@mUu!KNp! zZ7!UvZ9;+TXq)oyN$IhkL^#CXp=~a#r)}cedZOB9O9x5U#B|qC(?O8Jpc!4$5K88V zG!kiyoDP0hwGC}bOFnQLFAT{zlWGM~O;ZK=Ml!tRxcKBWxIliafPpLtE38Ajx04yJ zmOR(Qq!H;*&3WDU5+)mMk1at-$&W||m>iq;(!(irYFJ&;mW16LV)GT%VGV1MQL1%p zHYG|FUCoXNTw2dx+EQ(}c1htlTj(Lt>#?A3e#vfm}OC4#X~Tp&9?l+<}kDXH)Kh7>|)QCTeY~ z3~)7@Ld6&5;>JoNbWH5DG5UF!3?bzWRJ%C+wbx)_jTuyG$L)f2RW#puZIF?`@Y5hO zd@@p@lNnTCbybD5-;F%NLg8b^z0r;jJ(2+=*Oor88qXdBeY4PbnP;UyGl$clsdVUk zbZQDy6z<*5ZA3CBOj$6dgmYLLF!(}pqP6&f{7nyM@MVHoUk6|CO&o|LPO&YCp4Z9s zLYDa!S$M9^8^q{K2YT^Nl&%eOWnpkZ0^l3r(9G#}Hs(bb#CTKki8%uY^+8N*T5s}h zAg;YHy?_TctGbBQbM~e8y(EiWy2%b5DxG$_X<<+M()*%N7-#dkwGmW6i+;gpH#kC4TRNsty$=}Jzp^f>_kr6qs>>?_syD_X zx{>i4*0^nbR1ZgwJSATT)wLkwBnygpf;EDG`X^UhgFWpU%M|{D*GP{o)j*>{)=9X| z%ayY*AR~s{Dvg?bsWq$D1O@)~MOXlA6u#qo&Bpnj$Ny z$dZKa;!9y+`>Xvc>{Cx`n{#{KJ37FU=1nU+o_cmGfY45H5w3_BQirOwZRaThWbB*& z`)==!xpHJv6O+7cm0ixMU0t&an%E>Q-j4pY_jr$9TOFuwQRCN*`#Z-skG{9sOCf`Sn?QbKdwM+XZx_XoLP%Fr0Bu^!wDBeoVk~v36%VZR$x5SgzAe|XIk!Q z%Qd^?G+p@Ff-DwNB`LoI$HGvflAb)F_!F=Y3oDa=kpOZF2pk9&=H!$hiU@N&0Cu`; zD!L#aqSJy*SZ;+gh>l(8{(b?DO|J&Zn)X6``=qxAdSS=UB;UqC5QevwUSQx|8Tzd~ zoDBVB4|ge|%w_k%1C?@kA zqbmHtX~hbq6+^<<=XIwtPU=!eL{Wl_ld(@P()16>VavjM2E0&8b>afk?bsP&3$|I zmMeAe^rdA*Yko$4$ciiEG^bL_b{4DQC3#b^?sUeIl{A;o(jSDf5LuU)b|~)GnHIO8 zIpTn~CEbw7mt9!EFYQ*pT@X4IPk!4!dQxSY;y7xt{ld>d_ul{+xHhp6XL^A70#!nB zx^8FMg0vqJgLa4S=;`Pmx;$ORSh3$b&UiQcOu{Z&Vv845H7$Wy(NeJ|A?9oKs=!(C z4x<#;uIsgJT?{%f6@1g6dogG#Af?oS4c$D;vK((Dyy;XI${juewQc1>PaYO6*I)P* z^5nn)v{TC$BF95dbDrwqK|Zd3?a|g>`PDB+67l-|ztuiF8Oi#uVT_p> zeW!AuL-N~$%CpW~UzT!5VkJ3uq<})-J&?hXyeRJ?!da9&ZccI0_ga@2D;7gzAp zROl00=~aWlr{;?dbdik|r#Jwrcq-p9i;<>_R*0aa9zDVN;*AnKkzrHRM++oNRqSDY z=E*fS=1cwLtk&>|JDfkLZ5gA?1i9GUmNBUsxARje1}^6TChz%*1rtogBEJ-)W-VYU zshE1kfygAoT9Z&rFJK;uk(2ZyO0NHg3LRG5(u2aly^U=WtyQ28?0c``fZ6u^QN6&b zS52~WsA=&H6$G|r4b>8%7XmNA=(G&rJKql}Z_rOqJ%SCZN222<8{a}4 z9D>t>hbjN4r$tn+NmU4{LSJKQiLdQ60k>LHhbuNLn+Oh_h7>_X07ft@ZH?iPS@%FG z8(Y+i7FX7xMAJnf8sAQ!uVR>ik`Ai24V^8VI>yghdknUO6qXEy0uGlJS5V|UvZTxT zHVnONhYog0DV$^0%Xa8OtPxVSoXU-+O&<(Yo3kvOgd$OoHZ?vpnbWWXjqg-$h|A;tyfLH^Cz)q zS+&O1Ikk#uI2Yk+E(Q@g1$Mt~aV=$aPJ7JC3zrHarwFMLBtc>q_0^mVF>YT7`jX_A zLLwwSliAkbbgF>zcER&lFz5hF%1%mOp$8arG!8R}zm%`78% zVSwY6GWftr_A@Q!U<8E;rgmB<>~$g>SAyqkKajbCi9Q1&je z=*C`iqI6*bQlaF`{6B<(BeBy8>T<8zl=g}(rHx#CsEu2Es4ZjMy*BRl#oa67?qzXz13$y7-3v-y6?ePioto#J znx}_qo*oWsm=iJp@?}; zbKaZh7$^6Q@`Bk5e2}Q^;KaHMXeN{|6?7+|J0|fxVwN``k&@x7P$#X&N}scYb}5&@ zRL_+U5UG|8KHZNKA**!kM3s}K57p{J1w!D{mtzfbbF$zp8UiwZE#G0x%AI{MoR`g+ zs)b@c*(zo}fY_wp!7b5DGw@!joX}orO%~(lnejtj!scI{@$WR!TgM-CrjCIqQ9zqB z4|A!0wK$eLyL3@#B{g7 zXxB$Y@MQt=yr)2P35$;2Qj<@CK=Oja_@@8C$3RG}yhQ3^J1Xs^BU4d2H5%28MOUVN zasmhwq#1-Bw+Z<<^mYJ+!mMA+L`x+Ab>9TSt*sa<*#}<0RW;?5(9G&|HWFBZ!Ttcw z@1rsLF-oK?cpbUN*M^v*D;#ptSRUj>Y6uQ2f8lUN14mCs zS(i%9pM%8;49ll5gbb7#snq!&O`=ul9rYDX6IC!EC|R4l`nT*Het5g#C?NBITkO)0 zZySs?7AKEdP)rc^gRuzR#om~?RPj^yxL%KJUn9tedsYT(hL&q+NS|i38d}NF1RM=Q z-SU1_^mH^AJ>t(Rj?gD`*Er1_Nw{`cB+-}*>qtAS{Zqrz_M9}VhZ$BMNerH>8II7G zx!HHb@41;b8laLz#677`f%K8TuPt;q7GRFMD?Z=C@6`l<&eQ2SMuLZ*CYg__#FUeAJ6>qYFODRs>i|z7~VC@4%kLftZ=7GFgh;+eH`{K1nRT@w9BQ2Ug z%iD74eV0xEq?e&yqo2a)lmQd>V%t7^fM*f{{3xX~X|f_lW~NuWL##G^P>91ieX86i zVxqjIA93PZu@|%q)34^FAv0^@b%ur57K(v6A3?4hQji-c;N?u~2&);8VDYWfdZyMB zI1T`ga56Xh?a^de163X^;PG8bLL%e_&`d@y?Zgv8Gej1Ny}+N5z0~0(7kS0x^LV`Y z8jcK+?>+9SX7QavbRa_PJ+L9_h3ldEPFUKwDO%|`9Ei02wpum)F{XAJK_;*l@UXuG z=)pF8YWI=<$hhnO{{BYbYG!f0%D=!~UJV*t)Iu-lRihUikb1yyy(nEE7JzpFTJQ>8 zf&bseW&ip7$zOQ8Pk@#DN_}QXxJ0@Lq%kH{CLd&GnWBf@!rv5Rfk@BTsI7vALzEP| zi?(h9!=j;=-mXw@RV#S%-As$}%n)8ZsToj3-Kn&gky@FQun48S=83@@-!QMpU_lUR zQlIj{k-u2r0W6hha9vlySUjZ-EHyhcX0QdU@x?REsJnu_^RjXEU4cy_D=yl0VySJY zcd24dL)FO8KV%*X`Iy=gy%P;mnm}?AR^3~GjaV=r(0L6Mi2#4RldqvB7`%R}9vu7? zzCsr5TdBI-@3Uxxopz_OP9nqw`zpc}qEsJSjf`C~=YfN014F+Bhd0X%ZsUw)h_vw^ z-s#i)9FaETX9Cxf?}hJW`&`f-1O2qvWa-uxXJ+BGQIv_fy*`UM1B5_s=q(7v5w} z3QD{ZDSBX(dn%m0=pRiyiS@mn=4wOH$)w7G!8+%H-?KjBgim_ybSb!$Rvv*9YfFz- z?6fjLVI$~>v5vqE)6;p76^5d%UXo=~en0lNLab!UzagQI5sN}TzT#~DA_ePD(8hM4 z6*#`?PP(VN<}rg$ovL`++@Rx+aS5+_zj;g*sY8qs89+U8pD~QC zm`kj!4uDaLn^lvAAcW#v2=AU{r-3bzIqz(|J z)NCe8ZNaZq75(BYQCT46$%NHh#~M8ixKTrV2VX;=~jp+LhxLMmr8N#jX`xN+Bu zl19mD?ln6{=qm*lbT;^3dEQ0GHwnjV%mU*C3x2=}I7mmtaaM#EFQ{&I?jYnIeaK2A z6Ip}yFnp09pqeH@!&rwP;*qNITf?Daa6&wDG64BaM>L8s^-vJYc(X38rwXg0sgA^t?>!ZJ9#SWh8u`8q(ZGVyXX zq2{JO(EJ;@zb+_FPC)VK`9X1aiFyN+aNo*$NjOutX>v4vvaRJwHrRc~9eYJSAWIPN zp8JiK#rS63cT~VOdo&{hx3o-$qqvb$(o{z&d)m&eSBOi!Z7e^f75%Q#_C8O#!ulSo zWnhH5zpCzsc=~$XZ@*FZ`DVKN?K>)e5<_RMjRwlpaI-4%nb~pJH}4XVOcB&&4XNV!ZZhr7)yRYTk1g^ z*eUKnF~`4nyiha~aBAEYkw$Ecr{3FZgwsf$+AAemTcdyI`h^~N3_cz-W|&Dq&Qp~~#IwO* zFLjG;zxfx6`bU1CsQ-wxy{nC-I6q}P2zaDC})Fjm68^$o{-UL-u(>kcd2j@YpwqDtAsyFpTbY#jH{P?W+n_=@~NbnST z2a{E{gAjw3lnwqbaKnXgn1@sh4}%%8e4?m#a!i;RjALjf>@Oi>Wbc7XUjjmW-4eD` zpSE{{N6NgH@SYXZVo#l8v+D4tF8x4mY3h+p*dDxLL7X?RV${%zXWAD+qr2$61ERb3 zEr}s8qCyo&p&}5he!UNj@BicNU7#(i$~)in*!!G) z&OTMO>&dA)h-+_2f&)pDv;)yLqt3ERKthl^+B;&8PHsqp8K#O(3p&!=v?CNs6yHdE zpb|M%rB_6>38G~i5=y~H3@R!H5>2f3SsIk`iU}&}{r&&nTx;)r>HzU(+*|0`>oM1S zeDizHZ+?>p2&NmU@y2w0E!Wrj`rqVlrOaD%;WcxIMs+dOw&HN)l=UUTh1#3ta~r3| zvQ`VKl$e$7x?B@lfc|C>NtI|zYVAReGwN%~slGfmRi`&iOK1X0+APL^182&y;Z>G!6DvPI_s%^lxI?60xi|c|H6QZah3vvqN8G;DFvKDE zjFm;ZLi_-@0~9#sTT^d7lGlHqdh@vgb_eHPMtTZ^^&hx;$XIL_dIW>=Y7ZZuhFSv| ztI9)^me5`OnqKI&C3QJ?zqF&}J;(-h3ypgn+$dB?6>bO%@=Hc{Pbf1xU8) z{ZxQ!f&S6Hf18yObsMFGZbHS@7h6`ztlurRa!;_{LVO4&W2Ho+UgI0l1K+IqZseM9 zky@2T9^q(!&fSRFl@Z_(z6GnPm!O{T%rwl6(sUnr-gbXV5x7s?|KekIzx_tt=bOpy zx9{jaHLcNoK6r%gkG}=DsyFqe<;_6@Am-5=JbkUKZ=vbYy#I2MA7rweNKlGCSZ#W; zzI78{h|giK1uudvG&49UixKzaQtO}2HL8*^#o00u*}$|N7ELVtH# zO!yJ}lSgmWBQ8BaBn8!7E8O9dF3}r#Na*}~-X99eyNmkXjozUChPh%cmSV7DdJtVR zghNCnc9zR!#wFuWJo9eqN$|zf%2iFI3>_>6ANKl2DpXk(%dC*lD?&&oxgP5ubp$6< z$p9jRDPMDr_mpdRW9q6#RCK@GO$q_xVROEs(TkWd|Zpd{W*51kNG4Z^^6*q(EV9-}v>18>M2iJ%`s zXeK4WD#38l^jqZUWZ?=#W;90_^&W-r>0om~jsXSSh_{O+s+cvAy#ec|+2C#>LhC?E z%WPT3B!W`1?*=hpl~agWf@5fo!pmV!A(}Hyo*&Ws1=GT;35xB(J36q$&K*U1X^Dvk ztj+pPip${70>8bFkDX$+f$i^r;RfqWPJx8xfiI;yN&gOOv}t5a83UBw1`;$}h}GOk zn1v3TQZOk%NS?EV|LH>PjA1c2;~MW1ajRCCp3c*|WHk4*>=G3?Kj?Li@p`GUUi7%* zNS7t~s77pRI+;PU8pNvDg-gwli`7FeMN~48!pI1sVrYq|n4?)u4Se*^v1tZ>Ia>ob z<(ocHzO0@$08MFgy;jE7|AUkZ-~4f2qgvhl5G;Os*8f(HI$lkgMu2P5dxT>MWsaE` z!%!1#CpXYWPz<}GZx8?^*8k61B23zxAw4*IX_TJ}Jj3@DWM^n=DID4dDI`N-WFV7k z(##3W4mDU`l=83B>ZRJhlbDYLof?s<7mBiuixwOAmziW2u13$B!oU0dPxgv+5g`Ky zR=B1LGIv5!K!D;Ae*dxJp}|4iYzn4m@~pKMnAqiTfxcg+7+wE>M-d0Ye8KAwEvx)& z;&QRjAoUT%fo+TK!AiIQ%5worq(5LD5r4hL!DImsxpdWm`z-xZkgRf9)Jn#B*7C9f->GxlTJpxg* z4+@Stm(U`-mW{R^PGHLTHQr)Jr|1*qW(Slsr3p>t@GUQ{NV_A``bwYpSo-EqM+?FC zXcy?*paDF#5nl zX1kgJffe!5W7Q9!kWxVNz-;yhADA6~%91Th`(RI#u!h{! zdctD}*SwWDUX7l>VSyx$IJ^Q95tuIKSok-z!GE{zfKvFEF_mtX;@ zV!C%_{zvH2XuX&ByOX4m9Eh-_o2g$Gpvaw&p|@&vR`fHZ!*$0Snf)Owg)sa^!#`PD zT22QYO^X7VzEP3TT-%B1eCLdMB5|T8M*T~`9N?V|kqfS|60>8c zFj4C-tmZGNdQe!3?+{l8Ur@Mc{jwKc!V5aWQ-WpdJhm&eD}}|Gaso|t`w<*yW>1-r z4cEHMXq29UiB$+VmFBjKFzASfz)~csifGoXQm+vnU2#CaX3ea5-GRmMvGP*#OZaTn zIp-2xp3@8tF3g@9;J_;_?(%b{3Y^PQll&;Og|AtSNX3!MQs4Y5mV^)W^K~-o z4-+V*Wrjk&CB^%4sh{&S)#LwS(joXGUi6n935A!G5Er-u@@LPwI1{@MGQi>>Uy`k{ zxXhgA{C|f3ijrZWIk4(1%Fj zFZdAoqx}uWYF)#0#dn}Ah4ktm0Qv9c*T8c^43elGZ_nXV(+Qi&s`;~)gHPR~iqd z31KckT@bq@K3>&2WAOJ9?gbw3av6Y7hwDx~zJ_r(?=@)uFb$q807p!Ya{rXbqmQT#qnj zt>-Q?t@Pm`!9tZ*-U%@H3n|QOZ~Z>o&3N3?*U`7(EX_cMf|_(C$da!i03^SM3!^q< z7^j$r#5~d6lDR5z3rHitusu0}YBU?6kDyYRRm{69914&LDzZb<-uF2xPi`TN(azBrOVi=h zDPW@k_FY=rTG0ZvE4|d|f&}$}eCRF%(y_%8^{&hs^p;bxM z^kbnv6LgC=kVp-OG~&HJGHb0mERhoGbJfSUoswmp<-v6`{rav?ZIf!3)qnLVPRmAw z6?8BDL+O0&?BJhNnMj;I%S}&6q;S9-3GW<c9W_!N*{FMSEMU`j@q)wU28{2B-=F2rP)4L&kU?4gkR(u!UrZJc+@O;mG}i2yD_ zzC|$Q4o8&3kc5C32p(9oh@d^!vPRhQjJl?_Q<6%2&5xzEp4b6 zHpKo$280p85Ih$%8sljNM@wi#=_r6LB1&ss_2&+1vtBG=r+ zbc5_ovKEf4xxhM-Bo|a@*d}R+NNF<+EqvSVavi>V9)5^g)UPzTA4`*)YL0r_&fEfE zEOVJVZxF0s_sb@Gv7y0D3bcYM20xfF+rrtEK@4)h1m5T@6JdDqBDpDEAPIjA?$@vv z0n?m~61q2{_Qlbr-k4JXltj$IZ_`PMFy>gD7>^LQWCO5C)b(c?l#LE7CrCw<32J~5 zT;ep7Is-n;3Q%=(7NZc7Y%1~xO|H~7f@@0GDkm3f)skh~c}*=L+pt61)*kMlRAEjN-=xim=3GEl zbfGhN38Q6VcmPdwO%rekM)r|e)K1p3r3NJnX#A;xT)?oIZV6@us$_Hp*+6%Qb{gh9 zkK`$Vemx@&GX+<`?+WYl+I+86BMtHPG$P7HR+vJX)xMmbAc1hZ+=g%j$9>pk%M4L7ruTa!j_2B}b+xAYrza zp*4wNvn_VT%PFHm8(G`;-|OO=OU|6miCN&x_^(0Ts2~vsY+YmMEvyh$D0xVfP(fg} z(7jQMMK5pw{1j?Iixa2?kR_X-Y>9OdGPXfC*#@wGFCa`Lj8C6xZj5#y@r1vOJtHWY zl~z+QvgIuIE$%b>qjj91Fj4EZIQq!1ZcaDZgRxw}qm^*4EBm3FZc3SeUQZK28BGL~ z5glQ(g(PeiVJ*YhjxV@W&(=Qic&x}QIV=>KCH+T@gS;%J3N%O~QHmH?QjG8>S~1E* zm5R|dP$W$SFe>1Op4bdX%CH;84Hgq3;cK0chLLZ1P4-9H77vg+URQ}6lTyWG?D6g$ zq`H`K2lrm^OoWzrCj1p2T7zU_hB}c+c%&^Fyk!s^FxwOmpYuUZF2UG4Ktg6Gy4ghd zOVkrgHTD?@1d3@(Y&`0T_!sFJ?hPi6LC_R(Ep7-&&ntIj3g;DirUHG3VZN^*IwDxE z1C#2b*4J4UICQ6^dF1H=R@vajnUGQSx0VKP-657D*70|<>Puc<{iCdXnl(?cmlTJ` zB+Ht=^>##=T7S2#Efla)HELo9AD>Z$Ioddt4PM0y%em-;j207;qbT{3LZpqUH z)W`keeLnbt95p)v%#HGXVCfZ79|ySvGUP9+baZC2?80^!;SH+BT_;@ z3A94(!Cwg)hV3i6p%m`XOdiwbB= z3g*T}A0D6+Z=(6eo+aU})n^W>kV|oWHIO@FeYHtIVTnf+vRMD^n@NCTyg`z1`gquf z@{^kjAb~g4#l^!dtVfbb_u`Qeq^$2pWkH)GJq=tBIw#;jwlkPzPIe?eXLrof5f{8H z3c^oT6}&$`cTb;(NdIiKRBhc2xQq$qXq!~O;}Ux&zRkfOG1#Q5;xf~kBR%NYldc6{ zPJI!tQFYpxua%ehuX4}vXdKGJ56{Y^=#eLPHczw`W4}CZ2ityP>7(8+66Ir61vhO( zRQ0qV0H!f&xp^qI#u`W6dyzv;Z5Y5G#Noyojd-m<^e=4h)M&14s%)Yd3~yE%AG5J$ z!|2i5hQ}w6bk>)hEQiju{(EqEyx_qlS){qwQmmfowU|=!PBNO`AC|1pa-m#Z9AJVb0vF)j-n%kp0m1x05n?OXdXBxo@ivF&Jrfc_j zt&(f^nK%O*yQ`2I`E+c5aYp6i{@%7iu8zG0(}8Zs!Ah5Cx81xZk;oWX(|RMm4;+YrA`8V7Q-OmiQ*1(~b+V`-~uFES$g(eJdxifMA#K*Njyg)1% z+v3;A{iXGt8Sr{JxDVeD8h@EO1(MgzL=jXbm$;%p@V?HX{%EWtqIsrghrv>vI3u0B zq%S6gRstBiWV3gk*DcSij;|i~yo>es0!w533l0YX2C_nBQQF9*8rDkv${H{1Oi74VTS_L??)h*9mmts3wj2Zb3VB0ivFX?#KY|p&9`xQmRTx<4yqz)dq>* zwnk{Glt=WJ$c1SqL|JdxV;3nYFsp4^BG^_fg)2md0}*DCk(oL>bMPs$XC;v)ZBPP@ zIV6Y3!D{y4u6qx>;8*7FePHMQ3zqll9nA#SBMR%t1-;l3ld_m zc5a0Xm4SvrN-F`pZHL+ZiwMxB$?u_qqJ;406Z(UU&2W(9IMr~Ijjc-8g+YoK*UVy& zmf{8!{1|mdPz(CL%u>48o%k}0{%r7R%Jr`+FgfBSYVg?3Rkb{5s+DI%ctL%I>PtQG zC&|85@mG5v4Hw8+>(yZlN(YQDm4jFgN1gLp&;?o=Ja^Gy-n!zz+seqZh0PTBl^c1ZrT?J~{T`W^!?L z3O~xgQQ0i%*dB;ssH1P$-|O}E4SK`>=OqYD@tZkR0b;s`G(vO5BGAog)aS=U3TM#Ms znQ$E<0n#r3RB)sbwrTA}%bE0r6#k4`_Mg-dIbzpXijI7ps)T<0swk1xh3fvaw4$mJ zgJZEqOM}D)RVDj`V>=ojk*kI<46@|$vE~_H3x`+OOglAR7>jY&YFKmz-+)(Wbfjyp zuX@ZOKb=v}M;$2!DurYLT!L}Y74&HUNVUY`jy+&vz1C)dA9$u)X;<E3BoeQF&Hm!tmK;Un0rL*7{ZH=(0Julg`y@Z98S^ zpPTe&0Ce+Tlz1_DyIUbG`b!|xDcL@GaEVB0cEjpG1IYewnsvkE31Ds`URfs4vQ;(e z6_&F@(dme$Du&on#YMBXb`HMsD7C74AOX(kUjp`coSqC$bCM4>&N@M*p>8AhT(Ikn zEF3?0OW~E{m4*6`f7#JE|EKqGYj}(i9%w9*DFKCRn(hEyOZYYHO+hw1VW}a;!gXhu z@lp>}gBNp1z2#^zv0e~KkO-d$xPGQ(O(Zwye`J=F5n)B+IRe$1WQZND7dhSxnA@a4 zO3{q;Iz%=0|4sO=#p%PRBIKdxUL(;$k$TP}*sM;%l>k8cimis$7|2^{G037Oo!0?s zuw@7z3azNo#<&5g%QHsv(q>R$)D3Y^ilpX+{$3+s10*||i0(^juu7o?^u@gSALPLR zZo)(tukje9-bgDF2^>F~4VJ2#EpehFj9&CF=MR(~g`fnVK3St3df%y*n#keD@b%#& z-OE~lYl-ejiX3!LXr>PKNOTWL6JjIfR_j%C>UgQo(1%qS5$dd|)WKZ5vaI1f%RF`} zs5BF-2d3jK4n~TemM@^{7@Kwz2ICO+Xc|w+K9JY5W{P<4KBv}U*l@GKJ$66nrf){X&W`8O0zPgT_)5O7#LU(<;e)qh^vb+DMYrOc@_aFl}L< z)J-BwiE6UCsQ{%=H&sS4r>L7v1!*~EPCQWjRrr(CBzH#orPIk92J%l!p`(`&T&ol? z%y8r*@2tng&@wA_09ev}i{R|lnvOXJ3N7jT%`mgZRVIenkw?Rhu$#&V<-@JxJ*H}f zDinOlJa{`nT5}3SK*fL~I$m$I4hGf$S>31CBr~%Lrqgy%YcG;HGA#MOP6-eQRX6j_ zo=eJU`V^v&7(!mhF0p4;rIJq(VziJp1qu>4Yvd@G&xWq}IH(N9{nO*Z<2vVSQ5qUD zbqmUX4`Bvv0MX>^Bvl@u9a(9RN2kYj7`j*Rf331`JPa6#Q_OgYg~fEo-ci)K!52dV zbTSf6V5_oC=%bu%e5HAhUgGa?V?LCf>2?o334I^wgSA+7m0#NOaRduNs?nh zhyV)7fKSt;TSh=9?vonsrac)beanJzW27e&~851oRjxH1Dt}o4Qg&q3-c!^s}d7k9L zmult=;uNDSaKx>kxkF`dB(O#;rCemC7Yl$78PP7n(0bm=Kp>Tx9nBk3m{{SY3wmnW zF*T`Xu__S`9xa>0)}tra^-UXCJ=iL(PmXU)*Ra=cYt@shYB*8QY(Qf1k|bcoOe*Hi z8`8M)o8o0v=R_|c@J4G_g?-ZWp| z7#7HDief%eUYW%*%hp%;mEwA~>>Kstj$GM)%`L$SE8b#GK;K3L*S1U|2Y_puQ--Jh zba+^QB0LQGMaeMEtYM>oeunN)vk$oGg;ZxS8;#HVa8|()<>{9U%G6!$z+}Zx6C(^| zO|gEX!)?>@U@7tl-CD{)t>Kft96Z zn7EHHFJ#q8$FqIX%0)*{0@-wi=2WfWjFBeFW2+LX(SrGu>{JV>1?KnEG-IA1FS}`4 zhPV-j94(?#5SVOD`vz(v`W{f|5LZpCO;|KAj-L?Ck2ZRiWpBs*rgPWLh}Kc`3%PD} zC;`YC9m8Z3qt~l@6lsEWq4BV6O6CVD zqjW(X&I*NiBN^?m(qoY1dqN%TsVc>p1s0v9nF3oxtEe0-WcIbw=AE41E_Uk*$E)vItECJd;tm~J<)m?`f_&WU;#zLkI4my>eUg%o9@#u zb>FThH`EaLInMJVzpbH2En|Oes{cc&S~f;grchm+sfcY%=o%|%0(wh@JEoYOwGC6CtT8`*u^U4T zew=JZvoEkG-%}ONN{7p#$!1u>MIq`rUtHm{`YfJO?oc!vz(`qQ^U@F~cFs^n`B1&1X@`>Fy6hj(3WD9D6U-(n3Ai#j}q zUXbdMWfFvhu}m$Sn=^3W9U2Iobnob-hla8OIfy~7LIS8z;o-dd5WTFT(NSx*h?SYNzr$WFg*}&PUnb6d z#7qH8VGM@=w)h(iL+1mA>nav}n@y_H2f}n_YV9loiZD>P?nJ@C=Oe;YDxlO4R7PAg z${OFa+c>D3RcHuy+z(>rCi;O@(^fyu;qn;$h=PySk68V-ao4}Oi1T9D7Ei1ud@Hk^ z2b%O~oS%iT^SEM}Ob@bHEIp7G}e5BbS?79Z>!(_>6A_m*>J2DJ&r(pRY^J*9o8p=!63-S+8H?*2$X^SWoIkW z9e5H5q4{s(4~&L#_Q+oe!*L~3fdviu8~U*ElgrbG01kFg4l}ToR=orI^s2w_QNG74 zKDd8Zmi}EpgR@%AsAjz6BtHYZA6}CUq0A6+IE1})LeKJQDlf!pJ8Imw!J2*JAPo9u z8%#htc5&+eW$$GDKvPU7k$qYkF8bfiwe}iJ^AN_OrXzOvg|dv8;4$jIHsTq5OMvJ_ zW)FW&*ju!wNFb6O%mSm*5~~p{6nMn1N13@f(-d1VKu2wORToFvcwY6i`y3bpe^1HW zMb<8pPYqK*88Ms<>(GH0<~$a9vKnaGQ2+R zte`wUq?we;2Yxt6yc`^!6>nkj&ukL57)(%#DV2HGw51&zT_P0QH6+5PN+*?8mGFe0 zrAh?XF;xnoy<<6bCziQ%)2ZKNTO2P+q~rw@NsbQjUAa$zq;#A;>=lB$R*oX(^UNi- z&+D4X&s++ZV|k{+S-^z8&g>-_EVhI;TBe)M;D%XIAlxG(U7>uy96+a>5!5*NpiX;} zTgyB`ZF`?%|DBzDu1RSq8wt;T(MWzOu=xRfHtP84;x7uT=oHJ%e=&pT7gKI5JG2-s zRmk=@$6*SckQSOfA%*zZ6l+2mHe03-TJvw-CuEMd<`>j@t@j5~iBi(dHD%=@ZIzjM zISUZzf;F(4KZW7ZG*-g1S=y63dy=eF7Tdk1KjNYYP zHt2@j;QGsUE zbcG7$1sdq|3#V99{OewQJDad&m)19&=0|r;JW8eRnRt{+eSZAt+{jO#LfzA770>4aTlH}Q8(S8gB?L~SfjG)`BB*|pg@H8gJf^=dnJTi_{v-mA# z0InGqB2GdV6TmddWpZj;q>{W!&~x>M89ozx=6UiU40XBw$=#Vj^pW}cn&fa~u^i2@ zE6tH^LZ$jE-4Sa_x?`p_0WOcJZ} z8OYcWjzI~Nfq zyWJXMg@Ts|`Ki^_W@m`spAB~^mn(E)BT<}ZL$?$BAi!xpe}q@Y9VoEXljJivv;T9= zu782vN9L-Mbd&$8fcLB=O2rxg{NE?V)xZwGge%9FpPlXZe_>n~sEuPRX4HL@o9t|r zB%i=5hQ-FqdOF$gZahD8ljLHKL-TxpNTN&oVfpj5+4|PB!=Jm$0kO)AkatH|&yY7Y zt^b2{tQOj9qtzNb8ypCt5#du}!PuTVZpm^e;|mxvv91d03h!;u5HVOpj?A2a#);gz zKZk3B%JM+Udl?&Gz~l~&*#ZI+c}(td@*bL&KHx*K%Lxh2c4T)#l1!^~AS!-Ado1h~ zz5@;lqXs+pORp2~jL%|Xs!B^%bV$piIvt&;YYkZ8*9r4OCnG=(QLAtKKI+w`sRnj# zOI!d>nSeOCkrhb)&sopG*BXEWtwTgZb(VpgxeAESsJTnWq7l=y*;aJVWxfY0F= zB=g;{Q!m6KDIeqG7NC*nrd+8Q43R%T1um_zYhZkQC^vA@3Zx({PRDx+Q-gE>CK{(( z47#iz4kjgb*-7T>o?Gq;SG?md&^H>yB=j8JI(H8HeXp&7DJ8AQ?ZE83<}Mv*(pjYUhS5N07`2&4foKFk4;FISI(?(#I>4FHpt-|yiF6s*c>;f zPE#KvLs^)>$LsO2jQR*&| zJ-fh-6kuGl2S;1Mz-BfNu4t^z^|~n$%;BBQ#cfsdjQu=IkJ>SH8?xC-qLxQR-lkVK zT8g;8jNyEyj8V}!jVNZ@f<+87yphwBWmhn(l43HB&d_+o&JvG0%WHwd^)?7VAQ*dJ zj2%*eVvW8c6446{Ld#siBrs_a45YeL$Lhjq?@`5J5qQ`!A1NyO2o)}nBzZPT@Hp7_ zs6!{H3&ED1ErgILU~fq?RQR*oz@y!^5r%IK3&ry&tU(^~jZkU)88>{{c1&!ov6p26 z!K^NOA;Oz7S{H0>X}{yZVBQH$3Z-_V+FvJ9LCiXQ@s5=jZz029#0Vx+dP z9FaTWoBH!D{rN}!&_S$cD(;CRJqJP+#7{1lLBd?}K*@$THD2GNJDksZaLe zZ91vAq7ZKB3M=elP|O&5_@@uRs@uy8mg*z3;uCbR#yA>$dv>tDD;ZBOv{eFiiY#GX zS(;~!&Dg;09WWlR$`SId;c9i9ZgAZhD&#E>v=IQqG*?88B7MLhJ4OIPU=Z*IW(r=L zvSyg>NsbDnJ7=>oOU6UXxTw;z;x}@qq6joXchQ&X;U4L#>zFLQ2YOu<>LtMUlNMalp@v*KbD z7h%TR*jgn@rw>{yc`!$TBaF=?!orLr^QC@yhNP&PJa7V@X^=%^ekDBqjto@SLw)zl zaRv~%>PKk6(E7flOXY%e$voByZ( z)cT(F-A*=}m*}*dL%KZNETfOBQz4m$-~HXs{@Q;&Z|4PaXb~r@R<}+)-K3(`Xw$xG z(>^vfZ#yvBl4k1Y&fkIliqx|xu(jHJAW>qLQQ%_NtJ9G;Q+6{#MiODmg$=o8+2Nh7 zKsmfq&-Yhb54>$Z_3YOHyaoI7Xtm<;aeBP%!2Z$Zr zUO>NslT?e7J=UhhQvJ|U(iR#SjzdlvUE< zL$u++ehypLCJ~?QoznztHH(K<0%6t>?VqWo!2`ilwaN=F9ZJf(>FiE41Jf}oP*Rk6 zE@Mi*4!Q53OBFg+|AiXIMGiSZk%~*KJP|ADDJ4e7_`#JtI1~?Th=_7bA7Kf>YbAii zJ*32ZC?Dp~4~rtKcsO*o@Io$fmo$Rbu-L@lUHqc4`cQKcPINo+uCewp*@((vp6EoM zIjzTgJ@v~EWc34A6gAmZZ~x=uTm9juI)3)5yuRh1Bb1#X=}Qn zSFGn?<={YYR~R2^KyoYa+oZCRA}bS4LLm5{+=W4)5GQ+`tsVMGwP=B|>Nx-?p#BLUZa!zBSFew5uuGteDoY zr9B8e&={jS%&Fj?;}!?EE_xfWs~4^}zVr>%JQQ*vs54(}5WiXQ4`x6`2_o%KoSaQewi2wnmi1mIDyfOs8N7RDm{%IUBFro_k`xmnAJI`!((u@Xoy!6| zxI!nfWyPD-!~1mvR1~;$;ywP$SQGI2>R8R?GYootw#uV%l+z8+^cvZR%nK1m6C!XS zKMBGmXBb|~Qe*!}NO$rLuTxS=BEm2~I~`Re@5NMYdmOVEMCYPA9F?=2=*$ z#kA9;m~fi-fVnP*zOlms4tXLrl{aP`R_N9wn;mbURfO&K$g_6mn5_CPxIVl1;o#w%Zs7}-?^X}1OOTSwdvyL)a z#TjvOr{*C*+jEvYBvH}MKS;X3=E9rpSBi*~kPwygE2Q==N)Ej7I6|h$giQ2V$Y20VQ*p@OO zesZCW`>eoDP-;94&2Bj0+e|n1X43t5$dubdFJnI8Bhd92(?s6l4BP$w!My0KHRYOu z2hDwqcBz%BI7qBzsF)MY;IwPX!ix7A4Hya+B`nC|rJE)|C=sJHN>LowKuN@>WYD;f z91yAFNrE;Q*mV3AC25}(5w{9gy9E=aK_*hrmY*;QgA_`W0^OAkhXt56&5S=8MegxD zjJ@u`A*ptJV1?8rS^mtd6ect&wnDQ|BX@!8MvAz0oItFWsGacaF<#cV0{xHRjl~zF zoG01}dw*{4DNpoT)+!X1EBJ>HFc1i$vRlVtyNUnXhf7It*y&qn$1n|Fr7wXg+XZnt z`Hp#5NT$0=%FC7pFPGE^V^U}oLG}TpMj@07D5XyfiVCO#B0vC6M%2oUh1mw8hlP1W z&oOf%(rOTd1~f#q8BBzWD++CN5W+~mWzc9rrFl!0bW4x6JHc35g#5HwUNX?i@^tBfm?x>4OV*kc@Io!MVJRv)ul|TF>FSYDGKC~J;A*dI%=$K zIZIcYRp__?117Xs*bu9P4|(9;nHR;2b-pMkpjmhVuFpHgwzO28w8hB*@EuZZQ%zRm z9t9UCyf7EI)Ik_R| z$nJTw{CV}qz5|;hIOR~cSm5}o7zJe7@R`=WYX_!T;E*Q!woXZDT@K5RNzT1+0a~4w(>?XDkh$SH4rI> zn!VAS#1K~gCV* zE29CogA132>y@q45`l#p3=c=p8j_$NzxU?~U=~?XtNdRF<8Y?ElT}stbc}bZ7g%4RPzx{NoE!He3i7?JW(0x4JWlvT&DkaX;-4C zu_C~H=?=ZH^WqkcJe!tj2bJB+9l}GjSCh-{rP%erbeb%A(2ylE8EevJrkycJny5nf zA<|R21@P+9m66tvIU{gL${paMa18xb8Ku;t44|bDEA|w^JZ72d60eC{(G@C6;*Dj< zB(>*I8$db(8ll93s8K0K>YNJHpCM0KsFrJ#SBxy#qbrP(0fv`zMP19Qo-A&D=bl<# zn&77RBH$(J;SagcMEI29JS~!(v20e&U%=sqi%|#-EC1m=V z`c1g0x@L~(7ByD$w#7qLWO^tb)5FefHJsjS`b5C3PUCJQu`Zxdl0=38PjeE((sT%T z6!qLRJ_3N(I7>$hAi=_gOF|N~3OBw6oyMzx@G27Cx3aQtG?(x@%kZ}f30jFDrT&QJ zJjoE7Vk8_)AK-%m`2>d*x0DR3yji zYca|sa>>;onTVJHza8{-Lb~_hMMd>J&Qu!aALc^3M=}Y~2*Fncr~kHQ!STdN+fVw_ zZ^uq}_TAA*Pa}UQ42yue;I!hhdHhnALiLk&pOR&D{zCi0`@a``5hIz}52*D$rr2h% zje2C^rD?}JXrXsr3vSY!Dqsx61Va=Q(7a9ye~NaF=5Ce#mIRAb)=)n=w}o{x*k`kD zCV1-+$ekVu7~Hg6(0t#daEGwEWrElga!l}OgdKP)Q_hhuwxR^#s$kva7-bIZOWNGQ zNkbP_hsPRg0C~h|g2Y|EI(N20Du0HQ&;Rz65{A-bu}3hfCsG+?4yy-1mF=-i9V{!( z)+j?foYg!#!ju$4gsC5B+mnW@I>_G1J9BzOY_rwC^-4j%vglu4V10TCY^)1k{>L31 zJRvV&Qidgsn!qe2S^ya{F z`-=-80~w@rDIktxwLnWT`e&l6@9%O>jI}2lMx$gcHI+EpVQoG8`pv~4(n8;a`=fVa zCN!zP{b~|h>)Z{18uL))|0dUoHkbT6{d_eYoq@{KoZ0vE`pdt_?bC@Ke=XDgAr>|#?2ku;`NlEKn*%wstbsZCGan7+8xK^Q0_Gc8 z5gcuthWW-xm=l~tuYWK*9#Ri9e#y+j zpmdO2PG>5i<$6tv!fZ||?jhv_)6m!U!ijODQK%fQ4$9rlG6{y9xCQ1KHl3=f?>IS7 zU5vCpzEh3(ly&G>%qCX7y1$BPGc81XB55^#h7=%<__qqkDsdXq!BJvHkNOCd!~ZF0 zKcoUs9UE{ew6n}Y0DFV$_kA`UaNV4WKQsle|M@tMC^Ray`E3bt2qjH$kf?W`z`?7Db( zRyJ|hxmu8Bw9F%s!mQ3*m<>_@ZJ~?#bkm{7+2F^RI@2VAjT%|R_>Gi&47jDIiNXTJ zPqe>b?bpIB)o_&o)Yed7=DR^AxXze&WEDSRsm6+{OrHX&l(bPX_$lL#j(D#zI>(hd{@;x?A<1oP|I zvpiA-+!ebAH~O>~74f=;3W2^98!?x-8f5R=^Ms#hj<1AUYt(3ulGZJR7-9|X{se1q z3tA2maoBb5t^M3ZCuaC?jc>G!!#8WbqXPNm=ag(&J&n%MZ9bUj_uAh=RTOJBlaISE zkb-N$b_GXprfXcoIf$N`)mPsjF$QqiUNpFT2N7%i!Rru}5@}=o18nG;yD`xdx_V0H z^=v#ZI3^S+&B~!-%dv5CVNbL61R(tkL_vh2#5Ga?#vtqv=coTMae;I1(2u;ZXgU!X zl!u%}{|S8ul4{Qq6OWa?<7d)$KpoAoFir`nKzJDzcK29uw4w$+i)LDkzqAbjn+qFH#M)cai2)zV4tAaIpI9S^vYxy*R_~o41+#X-ytVV+; zq5?modc{-9s#!?9{O#oD#iOIj)SsJl@>T!8HtwW|s|N)phNkI(jZCcH8u|pjXXBqr~S0!W>j>3jQ86>H>XkcTD9&pGzhKOF@Nw=g$ zi_PmB&DpU*R@$qhQr>wO_1;P!Ri}JYpgx@#e zNx&FmQAij74lvTHupV+Rs*SK(*gO3oN=VTX#|K^(q7=1;Wj@XvT^ozzRKRoeBx?3= zt~Qds#J4HMjWo$PtOwIfL;B~BNsmyFLRy#ETQuaB5Mx3Wr42DbOkBtS$e@&p1UgJJ z@U@Wu&(@>7{=dJS*+P-pENO+3q9dvoXK0YV2O^!CChMecigsRErXj$uRY&N8P<`5cUXby~B%?^ONIZi( z+}qIkO$lhs=eh|JUDUNt5{g)ex+mNw=o`%j56@R8ZT8k|7t(pOt{6s6Jki=TrxZK* zy}^bKYD1?B++ zq-c&MPurD=okS4@M^PulM?y*N_pi*y+ponAuR;N$uFwOR9m#>vJb1jOSt1peVUZ4t zl1VxD>B?FGG={me)0PfhOkZKk_^bYB#YKWYG1~D`fOKLWG;U^;e#Ch44Noqo`y)Gu znLlGDPwo_Zg;|aDGhQ0~ojn!d0gFXt%V|V&YaI&KW=w3fC&(?dCx@Yh_T*=%8KuR~ zgi7RZ#V7Fy^?x`|b|Bh&ND#^fFF{5RzMUc;=-uIbm>0{s*9;h;#s13f8L=uI`6;M3E0!7a)RyTM%L^*3 z3MX9|9AVknfJt96!|q9>;QhpxJN4C9BL9l|4Nvz{tH5{|gro(3IEwbmGtdzk;31GN zvwK0U3l*mk0}_n3VWi`>(^r9AV89f?y>vsB42! zQirz1vpqTklMWSUB&I|wH_wW7NR!1FLF*|bQXodv5WFo6nzjq#^~Ep`NEhn0MmNUda#_zju94TCJt}(3{(wj$td2W-zjS5~ z@j+}R+@23Y52!mHScBoP&&D50*~UKLne781kOszTL*(Mk2k*xdF*$(bkY{oKLq5$7 z$Af%afwDo(%G-yf%)(J3HYnP2FnFmHVA(;mAe(vOGtqOXN;sh5_#y})4!u7mySk`n z-3oBHLT4H_2j)p_Ds<$4H9C#7@m<&dSYA zf)^D_Ll%E@+Wf#6iZm;kDQ$LaQ8QJv;;wZS6ai7W_ixfngV5A%q`6eSvW}X$iAs4s zHj?oNjE&?+ui5oZumsjFOpb^F8%zArl>Q5vai{JJTa0T>@_kAibVFi9_q2@Y{vs@O zu*L$co=wpjWjbZCOuBu270%?Fa3+6PTvSq^BDc-eFne(lVAJ7T1Kcw$W^)51N^nl7 zSxT7#W&tsM`T=l&k)i8AwP1-@+08Str`BKeVKLCZeAabtqgb& z*~b8*Oi=kim?RAPB}!f@f(z+=Nh`dKjaN1-N6rIr6qGrnCEe8R{kpy11;=u}5LJ$s z{KXa0A_N4rR#XU2}%p9MkB@>w2oL# zo*EbQxSll<&{5%vY7^ti2j8Dn7}KBLg8hhS<u8r#yFd8WlK^-#vv z-2lwbUh#mRF^2K8A4a)ediJ5&IJsF#UUO_-y!P2{aY!!pb3RXqho5+IUVZ4VwpCeO z)Gzr8GG(9`^Q^ujJ$vWN;#o>lud;ON61#1J-&<1DCn~jb&SIUD=SVCl*N#{p*f%wk zBLJI{@<1}Yi;c|5@IllR`ULN*_-!;7nj|EqWhp3-Q1pOJd9idb9bizV@0|l&y{DJj zB|||_E`6rkTuaY>_*(msU~}!gNt3RBhOTR>=m&h^`QB|Ky#?~%{(QdX=R#cLClwdH zpx$y3Ig&X_nHKBf*}_ik$^)$idIT_eu)K%+-tH$BF%wnCSHux`PsHRK4xyrqcQ45I z@H(@m=X;o;7?l#^7|uZF(Yi#)isWh$A88mN{)Gj_g)y?{t{T~SF|y})WWTZI$WC1~ zFoMupTLQqy{pW~dDJaA>)gBjyJmuN@t}FpTx8JvS7l-s+NSFj1FjYzH-3n~(ocqA z)%8}yTB%sS_rts%)gNH3LV>UJa291`Cg#)YCG*}qsspIzkwtIaLG2Q-R0eM$`Dp+-V9+n=FPmfINR_jx0TlwEj+>zRrO_8yP z!I+iWmbfM)UX>0r5&r{qC)1M&pvTqk`eXo9`xcJPPBuQRhwR0zR& zXeA6P<`NqyrmiD+;f@l#NCnI~-CN%O^(>`xD;H#CF~dM~%SFoSl~Muwg(0p~!0;g8 z#U$@hsW%*x3OF~sa$XYDCr1&?+Npr`2oe^&R7-*vATYd;UJDSFysHTPivF>37Cw9O z5yjUyplWKhr1S)|zFHk%HMLsu!#R%RnAPsFWw^62Skz2#Dzy_Xc~Y^Y(pAq3wd)xtBvj44KzPSAF&FY0YW-Bsy?!g}uu?Ar>LiP4 z!n0WPwtsIXg@mo!$4LQ>x?b4F0f_4d@7_MzcwmK4X9X$iYG8IwSD-HZ?A9iTp{5}5 z%idzcpYvCAc^)WwJNg59=fknPQwOD6=hJ96LFlLNCir-Lwc)^is&!P_%4oeJeaT?+ z)RJW~$)gu>n(0D2V^xLo7|q|9{|W zv*E}ms>M_}64+U5FIWq%LzCbFw)UNb^^j~XZ<8=VBmFq*;c3}E`J|Tju&(=O8;VU4 zfwuyiK$(Cwf@XLv{rl?ldj;Y-Xk+j1EFakQdoNo$`h(%z^8Uer?L!6sDSanv4Hy;= z_J`ZR0k&w76*ttL`s(+0>wn9R+*nB)d}+HE8&JC!hy9A5E$|zDdLuUG%OKnc>*R14 z$Yfrqu-UO;5``N%@s$LX2%yc98^rh`x+$WY<^*nUWSK{z;~|_S=?lYJC+;`7^1Xrd zniv8*o{E4<%X{zjvN!5gtb1=zefn>3^}=wAbSsFpS6@juOs~Eo-#z$#U(#WNf)5G~ zk)bh?uL;ln72BA9ALYG0H$hl z5)q_JnXQg%ZsybvT%~nStD@_HZgWj~D7el>dZ}FZiHl{~FijdPZMdBR19%whaIU`k z9&$AA7!7Ec09|LHn5!TDoFAf5!L_Q{CGEWERqK^dlOOc+5y$9UNE`F@ePB>e*3jU{ zb|`SNNwqUa$GlmIhSj!@-aobgQGrs#3zusjo?W zVote;(ZPHyHuJHO7C4Z|^RYNJAK*cn56=IDyuh{S^sb5dAjw9Wj&=?tv;=rV8=BG! zgLvb=7Q{NDa!n8eD!MlYF~Nl`h@ZR~#Kak@%K_ny0pX2OuRNP1W^5t6Mtg!VttlJI znh;h7L#RJ|bR4MZ)CfWimEMHbj>49BO|dL)qvF^*%15Ius5-M^G&^{s?3eN_Xu=IS z9lh;$me9Ye9Tzfzq-~So*Vi8!yjZ5v7E%FihC;4_Q@jfXvVbd3Cwh(+s&&tTQ}6>b z_fkc#USTbv4Zl%h7HPn3EDv`o(5kOdU?SLO+&npf)CQ>)Rk?Q3ZB4Dz4?j@W54@tN z59amz-`3iC8>&qhP<*mUEJ$-^?g~c*M8o3%!bT~oy4hL{ps~$R$0lJAb7~fk8oE{b z-EsOOZY|hysnjaEd}QE_AP3lC2@q*}3*cr)QVTFqILve&eBoyuLs8t`h!|XxV({C| z=C{1t6pyzI{$yd)t+q&1Y#F?sY+LfDVCbVeDyV6%x%aD?lNIUqV~N1JOg79I6BnHJ zqxdVyltwnJ98B?7_8%#>OM@p?=X(Ho8x7$H;!ivS3k(^d0~fG!9K6&`{xkY=c89%G zCPNZ6#(Q`Z&8v8lSt(_pzmTIeigk&cp^)sO6@_FW%0H2_7?0T!fixCU5f_+03kVe6 z6j2aD2#fG4u^ORuCx7O9c;JZDaUCy@?I}?4AosaK?4Sp3Jn{k4GSM9sQ{ZR*!NZ;U zv)APHC$su3|Co&2vNqHl2hc)IQEQU{GXm)p7MF5bH3tcQd%oBjipU{|aL!hkI-Nwr z(VfE+#1^uM_A9^)G;KgQk7yV@zB+;b9?#y)6Tlmegh780Ei2z2N+i>dt9kH85F%*C zsF3AY@q<6cMQYphU)?fG_(yCcKq&Yv9(u8H+UlJ9T7s#^= zSB<|}Y#0ht+jL%voH}0R=`cY)=6GpsXhQ3v{D)tugilG~LLK!%J}6y#MjJe93v3+2 z*qW=jVDsbixnh>i=gY4=tS_Z}XqXI3>H+hwFZR3miqo_#39YwA2$|OA;JSDxPNY{l z-jM#lht(;4m(Yy;c5sRfgI6rjbL*O$ROUq79-2K}R+~hwM9^dn9#O|=J|UB_$Q=SH zyB7d#ylvpvDxmS`JVx?eZIqUlaSY7F9TQIatx9cNK1hu=s+?TAuaiz`b(pEMq3enoT4~EghY<}f$82pGT#1?? zxw1`v=ITQd8yotAy?NHZkBmt#o@tgt3uZNgWQii8hg`|15f_syi@V`M*)U?X`EIo! zE>dcvy2%Ol14ebZ7Th-4)9DcrLaXi?}h?#w?i~Yu6#E;mYi-?N;-gF(aNV zuX2)pnc-!IOE(sx8|$XKAq@Lhb)$P7(R(kh=2cHuo}p~Ncs#wMH}i~N?1~+8(a}Dg zBn9j0PEvkDKM_lo^}je*Y-XoBVp$gTT7t}n=orWdVStFI5Na0yN5@x7{C7NpY^ed> zn5^m71kb60=NvBq)~WbO0?Y=neV1^?N%57IuvUvNa-)J&BvY{X(&k@_FVvc8@nr@` zWXgp2BG%I4i&c+<*QxLOhmWf~gq8isoUp7d${v5laIwyP@J=JnAk`$!Hm_oi^h5$8 zq*-f`_YmHFtD&}J8Qg}^4ow{A){3Q9@P?3Pn{??%yaKW$C9k&cuC_LE3~Ojwgkk$h zu2_O4u_Am62?jj8*lljS1&5y|B$Cw3DX~vP@;@>A(Q+zWYXgjIF?qb6Ots_FfECCQO;$w+BOCmjzB$CWgjU0843=K&{Mv!SqBnhMpj){$#?f0uqJS7kAjx%Dh3^4X$ zQ3AMy=$KH2ITD#VdbosSa7lOF^4P+|T%CGFyxNpAEk2S?m0`xX(RUUt2zfJaytADSh%ns#7u8GO`WV!RP*VEJmeQw%^TgoB%5-F0GV1x z8=eHcdX1Rdb?Yncd-Khoz4qxBn9Ve^F*&*FF7s@;SRFe9AnO5|(0~A=1~;1dZTOAG zJ zrxy~x1k;k&4gBmGE3w`6J1X~q5%H+pH!2fu;^Rq}g{9`qXR}}_;A}v{jPhc(0Vrpz^K@@Y0J*P{Ne}Rp{!q3vFnMy@w$(G z|D+p9nDW2=K$LoP=Yd`S*8j@o!A;xKH2ueA>vhHWcGtZJUhpgP_dao%B-W&~Fse;7 zQ%*Hg{%p-OUP4-(YzC$i4Gkt5>P$7%`Pmw35N5g|@aQw6FZ|#ScYgon62AUq1GeoB#XGE_&;muG;Vir~S2yzVk`{ z{`i0V^4FuNW~H<1mOFp{FRt71aTncx%Tpfu=!JhbQS@)3XvS%pMIH(;OPhrpRjB{S zB|@4?hcp#P3GN5&eMP$M^oC``VsK5bcyWF7TU$k@;FQes|Kr2YS}1P+bugfm{!;Gx z-~I3NJDFr@eGj=b#G9u0)a8|Q^_!YvG-qH>O;vjOA5~M;5fc53b&X1Da<5L>^_n;T z-lmtH{-3DJrhfMkdevRKSNl?5es|f4wItTc^lbSuJp=5iNCu6x<7sO)ci>H9rJ zQCv2oz9$T#vP3l5?;bip7S4nms5|sNngL`7bPLKPh)m(YXl7;9aP6L0!>D(GtcTfM zZ~E^$e*1sE>m#?V?E2eJ{qukL%FjK1`G6Es6aY+E=6Wt6*9fb&W92#3?`mW(B2$fH zc&H{{jXG|jyJibWs{;6q*yo04A3 zC&)0k76}>{aWm&2PV&=CG*Ij^JH6sYD0vJ^zv}Gz=Fk69@5bXlaoheC2xwvs^kH|` z2fz2@doKOvQ9kVMdg1e5|Lqs=e5YB%f9M{#`f2$Cw*jqPS6=X&Up%AyiC6u@Oi^3i1xsxc`^PV6(7D;x>Hz9%!wkqrGx>S@B7NR6kjegot__7e#^+i8GfFgT zE<$LOcsXG~s7^KPsAg{^S6}tB&WInb&*gk5y2sH?3LH;nw(QbEe!3^~!&26%$u=2f z^#|XKUJiQ7*qkg~AN`;#V!7(F`rUtmDhaKqkgernnK2N)ws-HsMfyXiA*9UCNv(^= zex{7)d*!CjsldzSM8Tpj<_@As)sGg${)bt)OpS7#AL0z^(d?5ll=`!2V&0iCwH~fV z=%01zs~%a9dvF~KH6@pAyY`nAqIJM9sf!h|@ z6>CPAw#+Bvmc&@tJ@}Je0%B}&WGRQpCi;{Ou2>lAM@vttNRp(#ZyvnpTDoB18!-kS z#%Er8J8ZE$`JZ6U;Wa3Yj`oy?q63=LPtpQ@=@*&61tb7T$xnJEp!jK*pBp}Z!{;*& zI92%LqQW0o`Uk1-FQ7ipra6SJ6dt4K4qe`<%NO~QZB+6qsdk$F#C!Ext|b13Yv5^l+W=qi77gxl9BmH_8AAzkc6nP!0BD zb1Jr1PY65olMQOgPd3Dpm6huz(3<5ywZV!l4p7Zv>Vn&*3(_sn3=(3YVMx4nOb(<>lj^ar z(0>%zt5eWWRHRN`M)$|9>9ait58&W%UPJ)a6T%srD5&nM9d&%e1&o*J;XhB$gq2O$ zB?hJAFPJ^*06;Ms;M$&K#N$$rN2(QQ19IXj+t(K?9pD}hM!m>Zf}C08X3jVB+>AD2 zaBZ}5Kf}E79)~V}+UGr*_H!11Vn&%?%4baboGkklmQR#tcMfR5$dv`2VYgjfu}9S- zUUz}k)Y7=&`Xa4JnZ?X%&S7ygP1HkQEDo=kd`Yv3m)z}TY@KC5OsPFmh0dVaJLQoo znl(ka^mxxuC%B&$N6h`S``P?)3xy^Zn#~^*|I^||!yu;uE{Y^ww7lY4B&n#SkyKs{ zYUGsF4W?HeS#Ge<9f4I_Mwu0VZ?@PFqVq5ccn`MOlk7PQRtl$_13pAdXNgg=5CiyG zK+zH1FMX5Z>?P5fWG(eg`)6u+U209MdcySi!P|SIdCC>|yGs~1(S5IZbGPP{(utDw zWjv?;tbXkqn~Eviirc(?&oQ-Yj9LBm&8Z*xQ0bTy><)vEs1-)@bXe-?;D&OCNx18Z zb5R7g|Hjv1vOUT6;IYLH_u;BfWrORGHS}7YC~F?n^C4#RLxcjOVM)eoQT6A4v0iy) zQGYJ4Kas*#>Tf*WkM12m^3E|Gbjd!uj)FhtS^8qw41#`7u!Fpok(F4&+!6u=;?bxk z9xp7xNXt4KykP-K>(zI`<$E%n2Jc;fYq55EPOYVZU8l%EK5fU&DSZmR9!r1J*WEJ` zQxJ;|r!0%?te%`Z+*0C3l#@Aw5alw3Y;^BKX!!(3=V+6(EU-pL1#(9>2U%ho7!l|zT%xH=Z8 z8{cP@KH1Ye*sR4S+9T9Q(*s1Z_HazR@CvSRMCCaOhe`2P3t}ajXxP*`P5L@V{0Lk^ zBBV}FF#=lgZl%ZhN*o5YiLeW`vgGnC^E%6dWmBmS{2{jM-hyB< zsaVJU*V>6B!xg&LYJNYNj9>ivZCH72PdTZM zQ#_~BSWcx5T_3{~4Q3-^-S(_6vK)SjFGmQW8S0pD&_vJxK?LnR!FWD+oe5Ps3*D*@ z)B9O|S%`?S3|>QW$iZ71GyiqV{fOFeJV>@clow5?@yTY8OlRx$sKuWM`1U2pkEsyL!qp141{>i#fX4n6=4FI>bn z5^<+W8%yzfl{7H;^Mzf%@?N*Qb&zD@hZmv3E_;}h*%d-7)8C|Miao6j4Lb`!(U>@tu zEjj;#BO=cN7TZ`Rg24h2_L~?d1eYW=ju&Q<^S|l@a{_Ium=hEUV z5bRf~oW&u zdkEloLu4(hIYM3vOB6C?qA}#t$ zEYYtY5shkvtkp289o6H78uQiTo{HHrU$G{BUbVe`Bii-+Si3%fX?r|Dc0+u8v8Gvn zEh07M`t{fUs$$MHu$q5jxi{BW*NAoVD@W`+`?BPFW#;!{c|#J?_%Kx$X1)g>~CQq5UYiFM8Vs8@F!WwB~`}GGutBXzj`j)>exY*dQUvh^o2L1Y{x9fs+us`?3`hNYXkLby|e*OM=eixvH zIeszJ?{eGo{rX!j3YC1r7ethO+ZXW8%U$nGzy2pb>GtdYOSN>U%@43zvicu5J`H`= zW=U2b{nR#;Xa3e3>d$q*w{*1kQ z3kxVc!rawvOjfyzWi;4r^0AcCF)yPpREeF7rp!-SZ$Zb$OqDb6Int}J6JdN1C#)@p zTb78+cQlz7J0!6|8Op01mbno$S2C%RM)aUpzk|F{nJ$ly@RgkO0BWbGKl?$QV01YR z`ZXn}6i}e!!{u0aP_%Z`Xk;z0hb|)lAbr#pv#g$Tru@A+Tw_P=RACuDE@xIhCEGx^ z@HG9DrOu7GmDHVjgG51w>QCX-B~VT%>^Y#s)3Ob9Ca7=?1kg6YT%9+IJ_EM_(n>P( zwI6lr@5RYNU-@u^O8-Sw^e)S#9v($KWJ(^JJ}8mm^i&ph0{|BVk`6k@s|yJdV8XsH zrdN*_1A_J2zK&Ke_zAcp%?rJ1K&ayN69<<;AN~eOTGp>D@Y4Z_vi^4*#k_TX+x#Yo zs;r-I#yS*}`blRZgi}-XNdgjh_YRhRT>mrIZC2mtR$J!bZ*&HKsLwX5X?iv;&5S{0 zk2QE2eHA4B@3Y0lB41qWEOr-W=1w|kU4PO4Hf&s6oZYl}>tb(lZtl1(zwq;qTRff@ zOM1Cuar@#4k9V=f`Nj3+qA|zAzUr2l!5=RC!uY{8e(>{cchuLczCww0iZaVZe`5f% z8c7gWeeX)nRAca8UM`#@f_w0T3xk*Bput30WN3Ze_m~DtP)!9WGSRXo%xg90*I&@# zj_54G)lL%C-n@R_$HYZ3P6Xn|jl24lwZ``DH;sEVf&S3TM5q4Yjgy61CTCP7 zkeeAfe%#Eb?r^8~W7sh!gu`_~61)l=k5sqpqs2a)gjR zYG4I_?h?wiLuKK-V%^3z452XyTO=hi?fQF!r6@uIA^fMAziXaAcM4~|X`j99YoH7w z8-~e>MOTbf+=gWXwM9sFP#s=_gfd?v;gZTM>O8?t{aW$I`gI@A>aP(|3n@LL_}`q8 ziHIkOF5HLm|Li-2$A<1;N1@|r6lwx~HrWWWH?aZDfm4x1NsFJR1EYpm3Rl3ux6s)_ zmH~p$K5s-tq)nfgt{*4-Q8s`H>=Ta$=gFo~)~M|G{+mwJ%@=B6)fez14Z(?N+VUne zEuT1B#kO%p?|Nijur&d`Yyi)oRCf#bZd1LmK#;r{NS1=6^IAtY8bGY^l~8}8oOO}_CpkRU-UbZ{lD0Gi zLCH)>0=__t*H|r=-rD=|lW;#*xU~2F|NkmMkcaZGX|)zDUoM#xu|0yV`Fr%v#rz(7DJgHG zK|S}B4TIJQT^K)w{3EN6Fa=|zG_2=+&W7*_BCTc{SjuAfa-~wW>vN#0)!@7#PPu3% zF!!{$mzfVF>CxEj#CEVC-Ccwju$2qwC#e*SoE2^)MoHyl3s@0uyRvO^NuPmfKCOw~BJ_ zmo)LvxK(ffdh?J?2sZ2G5t5^d1w0ZZ*Ao!-@+v%H4!7?#EJJv>xuu&mf%484fpsGS zKu>ROv3Hn+oAEuiq3omujBt`shrp>$3NHlGw(wzk zYe0U@V-jVpn%ovzr^Ato&F8Yu!oKuYwhbF{8%nAv5Fh_c(b-0(u&`YU7kU~g*HG5@ zc=o(uMA2hNS_{zPsSQY7&>o#ArIGwINT`L)`=A9f4os;T*=cMQYs%z`xzmtxGs&36 zG}#29$%dfD9b`}^2DQ8$jF)&H3%$zvCiy9@*mfpNJ}3U~Y~2Q$s4Hv$F*V4wW>Bip z8kDg)0pxL8gpyCBu36(v}=ks;sdMNRVnkFjU5ibob;=X?J_-zPmD1 zE8KXmr>ey5wmMsbCrgX}Hgph;hK$ju1QIp9f`0Q|#Hf@tSO;gygj-`{Bf{VlX_4r9 z9*r_&;S*3lQ#3opIL(QbnQGhpVuU~$LKWm?&7Tung{&378uldlUvx+U_5yT$>##Qq_AvMgTRn$Xx%~^s>Cv`d>I+#f5@cq%gUZN?WOg|lPYOxu zY*iSGKWjqq@fi!ipRI6TuF8Q*l^Y=}w0T*xf6hR@K#Og1QfP2DpR4)Oc2 zp2)wd*d#T{%jjhNxEujmM&e|S~@-Rq|Q;R2TPXPpMJ4)Y43=`+lO@zpPb4k zj-2tw)xXP@``0HgZ8Vn}8V=P3ih(0V4y^V$85MxT6WBQdPYydQ64)*NkB8I}`M1pG zh2!o?PUBzrV%uB+j$ROMV~6>0*E5y8i|{HVEM^~paNO)cN$;tPFa^&kF$EbA*`e)# z)Udx6Qs^C}wqrOsZqC4YD%lBi!aWY=daj|~N0YzD8kPlQ=ySaeBCLsHN-B zu%c*b)j;0CvW)f>3@fx_Zz-U}eS1lnfXZJMBQT*Ft>w)WhvVS6kCbv=XTas@4>^fa z9>yo1ZkisF$WhPEYx@Q+ZdZ{a{|IRval8^Zd0jE{k>7XXF;A-yQiF;yB490X~+cMyG0@=Wv8+mY4FMroc z5ie7723TT_Y+=q37^I|>(tz@tw5;`fL;Cy7ALQmIiTNNn7THtQ%B@yDww6RlnJ1F4 zD1^4)sCB6jDbu(X_J`~RY*@z{(A3G_N>DEpn%_rmR_f=scKQ=0i;V^SA&i;SG6+8@ z2|gIbB#Od`@~96*GXR3+D-%x4UT)z4$K|q0Gf<4qfcz1h9x~z`&VU>jqccDNuFa>o zAvBT48JMVMAY0FH+T|<&+XQn!0MkGsUm=gsn?}j3*tU@kJdU^>N8HwkvFOll8L^V- zEEut%WyFgn&&R9Y<9M~1L}TIhZn*eTVvgJ4u3xpib@S%?P(qqt*KxnS4UHWve)okW z!uCa`Eq01o9)_Hf(X7ta4chtJRziI7O^G(n_Y8U)l9v#u)wyo46b`lln=6)*7RDdAVaMZ z(5BM}Mcup0IW7t+3Jj?$~5jic3 zqVE-AAlvUf__z!q`4H)9?malelk58v+!AcOxD+BsHSUx)0x~b1>+aG`iGY%SWCakx zG#{D-{GRqI@((GUTaWF7A#<{!kBXt*uD%TgNxvS?tbqMLSp-%GW&JUP7e`svv-~v) zDkqj>xYY>DE_vv)2S6@;*)-5YEU2=~aA12|YRy=T$_(tbyRw)Z5v&ap=OP0%1$ymm zNMD6pjrrP;zCh?URpAX}ZUYKuUP6I@8_26Q+S(A%Q6P-SBfxAQl$FXtE}d#poYwoc zLv3TDBg>|xb!@zSz}boC;4+*H+2%g>vX(NqYe(uN2po!|tg_7$M$zR)F%ctrw~6Ce zd~!)ENwO?Ou|V|2*?s{zWb}aAx~J%&$^7zk+R`ywtOpY6p~>HxMl)0UAl+LnG8^Fp z{x;6c(m>!$Eu2AEvg}rA;(z)xif=B*AC)x|dqkU8Q}H5oKxJl(c8iIP93Sa!#D}VJ zl$DX7n!iPrU#yuLPNY^A(lL=!&el$m&9)d@cs&uZx2ZY!jjr4)BXZvTCh0D6g?^S) z%vE=b=L(D)Rav%fc04LNT|nj%>JrfVCK0&1uo7$uPVw5@>9jGFyw~fR%WuID5l!{(*eZ79jEfJP8~6Gh&4*No9HJ`DdT^pm-J?4 z*=V;mEPe&nsh{@X{S?j;qOOYsR%K*1n5n`rf9Ja|0V__RfA>vZZIrLyS9MkD zXoFU7yp+ye^q%%a`g0Q4H~F|EaFKz9!hhhyKj5}6wzkbQuwnXO6j`cB2;spV4`!+< z_$^GIT|@^a%$S$1Fhlxp!;Qi*2;(&pKY;NKqz;E`pFY~;0k4pvcj1SuTZLLUL=N z{xtND{w$eUwmhG;DkhUVhc}0i4|+Ehy${*s5hk{&lp8~808OP@vRLZkh+Qakc_gLL zgm1xyv_*Sm);9BmnROsiSY%bUW4#{VShJ`t0?5Y6WdxW(FPHduh3oM}^ZM|W%Osfz zid!IY8wGS6ol0V?(p1(ngPiaBY#%9xlJe3fZ6E_8+^UGa^icAo z{_tWwgxfd5m)O5vKKjyNaHcrGg?EsGhzdVt}X?F4uGOL!jh z9QzQe5rfqtr-~vGW{@6JQ;jMA(`;&+*IPIyK}+0hFoAI=U6Koot~#ld89WzhQ}H;{ zTceuR!s-$uj6gNRgOgkH%U7Dy5Kg{2dvKC|Fhfc~J5(wwDCU*yEm~5NTVks0bnOq4 zi^f30G`IXt8AFZ*NIR|s5E{-ED_v`^gH!<^H1xIGZq8f0KGi}V0|P=v5@!S(LWZ^G z3ii%4+-wTAB5W3{V@;8F43KOb+A#>ps>{=UYSiFo{CTv=A|;q`?nKQtZL*m%Avz?1 z-HS*-Lajz4?_E>?3a%G;-=YE#bG^X(7Zs3~q1MF*78Sr8E(xNMzlA-f>*RkJAx)Ej z(~^L#QUclpq~VC)vw_-@!sLIh{j#ORujkt@#lW!Pl04gf5$oa{3IC((Xb(NUa(}?e zoEs-2Zu4=TDRV7F`cYU7_<>5?pG54X6O^VhdKSbNs_hkbOf9MtT|$Hzx>VdxZS{lT z8)+nZw-li`0?9#&fS>~5|KY^V;Qna#pG`5e%^%)G*QRM|6@b1kC0kXU;d)CHWa6u3 zS?t3G#$k`Rc1Hc7qs`%@Xv(RKcVD3h>ofV6d@n@Rz>ykZ?f5>3yGdDdIIEB&aVI4D z*bI-Y4Ht9=(;_lCKvpgEo>i^c+xl*ZvuF88%VtM+MW%O|7euFsYuh3=b=IBJw0m95 z_mQT}M3;H>Zo%m^eM_J79Quo^fJnXiUmHDv03KY{7TfQ(+A}jVjdUiPY0ijEw8NcJ z4yU>-leP&0{QM>eIP_d|VCY~b9t^x<+K|byiIJ-CRB}5OGgsR$qLS<#CMNF~@6g(* zTb6obwK(rYxt`3bdQULAMXr(&J5py!8EcW(z@t*W(7z(<(Yk<;RQ~ZgIe;c*uLJYc zh#%(w>d6+T9;U*-5g=k2G>Cru_~XJFJuq}#;*GL*c;JneGWXYhyT~g?f*H4YW!zqN zlL6bRX$~csjwjJxuh$@0q}PNvDiXE$Mki60ijk-YiR9TRjo`w_ieD(3{1T0DYO{wo zoL`~X!+rvU*~k6&7_yWmLEyZRI5=oy?C)SzP;8RlBM-JD<{c5ET0d@71lE=q0Gw4*lW zo%$1(z231uabfG7`xBS00-$Wi#i;@mN}f1mO*OvA`=+7?_FCYM7`K#?3-Z6}L^Z;o z*H7Ev@%8#Z4z(ANKAFc4kYjMC6-=aHoWRVbtg5ybX=C1Ei z5T>qbB)Rx3B}~!L`7L&M_$N{SNxrY6NX>F=uCDM~4!yyQ_KT;XqWt=$9_efzgjW7R zVqseO7guNxApeFAWt)pM8*W}no3PB>^n0u6AA%}HPepv>f3re~jrdh<8s>Kr&Vt@6 zb3lqRC(FiU`AD^$6yAAJJ3NWwd&8@?*c{XgA`fs|D3E7jRU$Ic5a)pW0^H@ca~-8S zTj;ATPYv-qabk!uMtbt%=!o(5^+oIY4aFrFvp+P+<)(m3iXZa(6Kuk<3qrps-!aU{ zd%-V7YiU0>Tz)6VOhGpQS**_lJGuk}?Xjct6k<-!%Z>S1=}RIjCFht*D3a`H!G#(VdYbyRi>|%1qOuU4qqH^Y7~5UM37{4hY&R z9|G{|>=iV`_JKx@A)s#&Cw|~64?j4T8b)1;N%2@ClonJ*OH5EBe%n$TDo(E?_U6$? z3G)~mc3}z%aG@I}5R^5?8PdJi9RzZ1BI98gn?p9UP>gIpnL3pg#4MK%QmR)575|`9f@BuNnS-PXOEJdB zyn_lAQJ{=#G;B?9(u0_jhUgWb{{3QQ*aWeoP<6Oq!43~5mX13Bn=P4*Y`n?xfxsLx z#pSRG#2RRjW!M2FHJGg)INPBy9V4zmZmzS1R4S^b4iX1Yu5Fr7aF5YqRh17@!`ycXDW9N#cI@gvhL+5*pNZ(V^frz16?lYz2q%xk9f1tG zI1fe@KC&*{PZFScGyM1kKW5`jYsuD~7`+2uK_k23U0_K===Xr2dNXIHFAzpiVMlx* z7Dl0g*lz6cWVqxJ2U<;|7kpYKz}FD!8g=a+sVSo>QZ^IhODfH8=v*IBTnrN9J|ae) zC0>csT#MH{n&k?lxSk>B;ALzo=5O{DE-|LC9b@RcC}W~THAI#~)E1haupM#WUFcrs z)Q-?VJ%|TGgoW-{I|?B&y3>di(t;Qhu-+(-j%skerDoIdqHx2^_lXI%c#(~Dy4NBrW2Rt)K-E!>z0cVEj zoD#ZUaAq74LK^e4Cn9-Od2BvG}&uVY4gvM z$b%(8{Gi_2(K8*n8#2d3Ssh%9jA<=iW!2jG{V3?1-IN*bOfpy81~Y6dBtEkhrT8VQ zEdWLgb1VNCVvg1ph&i4d3S(6_@Jm1;_~0ajMx@o_m2yeW0bMj8?nZ9OqQj|Kyh4DE z&Pqkw{n<@gGq!)4VfWDeW;@EHsFBOzYTs_qx_o4k*s$)$8YD}$i~=6(C5BoXm)J*vTqCx3{_(W%11mlGGsDKbTq7XzRqfGcb_y)~v+AQV3oN(iC*WYAeHWJHl& zN*ke8R1pS)0;`=2@zKb#3PUintowNcT+cLeVb(c2-0b zn^k;hCjN}%w0KW37<HQZ1}v%rwM4rH+SWL8&&T=84qjaDd)F zs7ydSU!|iBjVcJwzY&wwJdc}Ov-LC~C?w`=(H@6Aprvkz()v)4Cwl5+{@T#)EQ{scnmOiAwV5=xKQzQR5r($VDKcHsoKL0RE zsYNFrhkgOX+#ko#767NC382rK(xDMSRko(zie=VdtTlUmob3(R!*YbKu~-{8=dnfJ zwo+}hj!6y~Xky9~C21U$l7WC^%T)qu^P3rq%0lT?*=CWH$x6^Yo{=14FdE~O+0A{G z*alt4y49w%=1!08{6`B?gt?5*Ve)&`Nd|3!1GHMS53ITX?imERl#3AW=onT8~e(bI_yk)CC((Jhmo`av^1`sOseISb$3>8CX=N~?agMr@UPWY_>x zKB}&u9SBh7;J@1HVO}8x6ifbrQy5`r!@V!A17NoI4hFTrK{_B<`k8RUZD7N^0<@^5 z>-JLjt&Oy)2}o@nF_=K&B_S5x$0;cN5=8)AgY?E5bx5m8QPXHupz!I|dNF|}%-Ho( z+C`y)5%aJztY>j;TS5%+I3NV2inbhrlk^kWx)B_H0Zwd>a*RVaSHcNMWUOT>s_9GN zTht9wlZj#~-po`e^!UzZc=O$f#U2|3qhl~WV#mjPBv6xg%a{H4s^0P78#Y{7;7LI~ zY*BmLJs`SXtpeiSArRq<|KxyucKGZiRXQq2Gh@8MQp%FDbrla4firO*k)iP%BVB+s zCQrZ3@PTJB8wi++B$Mvzvc(f`;h%arMk*8z zC$c#@krpnRlr!Lyi66rz6AEKs-qA*oTcI1k$ImUm=^&keumgI?CSjRVXX$>h{Jmzl z?_OVZ6_$TEeD8NP&s#e%{$Kx!Bgg&boa*WXVe*3iL2wNOZm7wtjAqY*V78A7v zarF?0YO3BjeD*}hR?O#r58eJdk?n1*@Zq}_knJaj&pwwzw#E&HM`oQvNazkE%J}~@ z(wu^Gjz+*IWJnk-HODPU;*9$#q?O{V)r^@=lfqOmI8Zye>`imOH58x~LfSkpj*I^X zgC(MVF<=d`2=0p$@H;3 zbv~oRPvNfQc?>B*1>ctcZD){j=5mlsGXTR2P$BEefbS}~w!4rs)qAGYt+dvZR+u-Y z%NjE24dIiV!p@{|-_kKu5E;!@p*p5C>7iq>uURqFBQIv}C}K@KV(*9~;+;uXoe`xv z+RGWS$bB3Z$tHPbFwG1uip7`_ZlL)73Yg9}ZW2 z%nv7t0XxDbfP7>VWESAB4W7pJMe|p)qs9eC=fv{i{c?(HyMv}=judTF z;qcHMG%H{H1@67$h6d{fE$&YD$D8tVCglz9&2Sadw^}gZf5VhF$Fsil6R3kPO3;I1 zwl>@1b&h6D3GnkjW@2Lv*?YtG-%+t)!kX46a(3lAaeSM?%ZgK$dtDrAAlANV_PqDYLS|y zam)-B@Q7wKj?pa4IA-w}jq_GRQoyE6-8QB!yfm7+6hR+m%IMFDjJj;j+LQ zfxctE=uy(5^X}_Y6to5iW*s11v0TLgTQVJ?963g**^*7u#ze@_lH6kTlRI|kGE6>) zNrz7=%Q3TPXx4=ZI>Rv_5=3dl`C7ELVMl4fW$2iiBUz|r(9Z4RNm%$+FHNLF4Qyv0e-X0-*z$RQIhhdeWRxmQ6~P zCJ!jdJ&7BqdG+I}6_@(va^2iYr5@L|u0Je0LDfD3@^A-jl;+APJmC z1VnJN10@qSze7{4WU1}{ft(s1_@ z8=f_-7j&^swNtH;bzPn59fDLVAf-YjWZx;Kk?5L6ib!EHjiI;`6JNVeNd zTba%rx59VzD`_^hJ|N&E-1=>9+WB@ff0g)FHCmxTg2?jcsT`X~5hH>%Rl%Iwd|!R8 z=+c;(O2PIT;o(o~t_V%{)amp2HCT0Fift&ZMez{|GyUPqR9QE^vjlNg95ma zH_G@G=SjK^Dv4X#3S6@-Olb$Hs(PBWngy#Ybek;zx1teAEg)@#TaE}iZkC012~E2O zO$Ia#uvS>E2XzCc1=kAGgz}&Jwodqp9zBOupXHCvb>S4CkA8%-*lX3{C+|)IBubC1 zvd7k<9>H~nXtQGCE{2NJO!pk$uE``kmD;)NYz;rUC&^!zmN@lMc$?d*HU;y_18GwN zbLTB74H|Ecvy|464sA6dZ(*3=PM#c27 z7Lf`ZHXg*o>{Q+>p~MMx9LmTZD4ZA=^QEO5zR$_LS00bY4cK&^J0#sN#k|a@B=S@k zk6mxxvG5Ph{rvtC@jp2rhkpfCXV45^W4W~&&1NbV&n&b z;%4$}72$)Q=NDj@-lu&|3M<=)1hCh%f-J$$si3J-z(PSXFM4trH4n$Oy-8y_C}4*U z_-8KMeec1N6U+h3QB}5Eof4C=CMCu2hD?F?J!XU%uy1cd$2K0}9ZCC~i_#zouU!c0 znsB#)iX|ak*4S1@KC{afLS z^5~N$Vxf~%Ix*}u23KlgC30xWyrxhg*9I(BDs)_PsFN_aB4-$52cIGzB%YMx94>{| z+FZoaKikN96q=$Te$Q5dv3*tKMuKgYdQMFuI0No0#U98BJW|*wfQC^w{dJG_Js{Jd4-Rb z7dhR`OeD`&)&M@AI~Fx1Vnl9S`3H+Hn&{wa+u={`h%nr52JXoelD5bduu|(gome;- zdiz(vxNfK%a?^Sc(rHOL7o8|A1qS=K?sEj)Ta^yqyAI_94etKoqkq|x+M~Z2J{qI4 zU6>|Nn2sOtkuh*>z9AF13dYp~L4X;+poeAv?AnRE%&ZQ*TdV~0iZP-^PD4E7Csc=` zW5*ZL{5IVa$~q&;BK$ezNrL*MJHt}>gmcgE-Wz(|A7o@qVlQxCtK3Wrx?U#@tJY>G zF==GG+8QpqQBg|y8`-=8Iihd0I)R^m4*kc>|N2j^+7ieZ-TCL(Kd|OVQQ`q?Vgf1G z6UNXd|9Q8CK`HYQdNDKj{huVOlVok8qC5Hh!=EtICiDT_Qi7%8AZPOWGk5TXa(pE> z+FJ6Y@eR9v!#iHHefyqO+8+Wrj#cm+Sd@%K`@Y^ zkX$uWn4~$B4{q0-;{&_GY%dLxp=eJd=|0kA)-(_M`y0nhGWl&wo}6^2yWKQX^3QgY zlbimhGijd_e6-u$i3WkKq9P5dr+%RyMaGuTq;uLcRx_reZL@20(w|y6Gf%0GK9|2f zWfxZBgV`w*H2XMp*qU5WhXA&!&cpj4lgCM1y6d=ELmMWDu*XKff=31YD{c5hhN!7jYjvuWt+|e zF_-ZnCdw-d6j1;I7gGXM+cbd|aLt`VK|RK&%QqG~|bOd>aV`|uJmDsWC5pA1$dm4WJan`-q7Rrjv zobsHT{)W_Jrsq&1&;&&NWo&C3=ShdnR>}W1`X36hsieyG=wKSs z3}s_LWi<>ZQsYzd!*lq6Exm#dlKZ^eAD$il<~9Mp505J0a< z(Fl{K@0569%N1yUF^v8%2k?9c@Ri}mhF1B4%~<%?0QC#a@R<(J8F7C18X&%`#`g`RKh((7KS-L$=B!vLwwK&52e!@jp5REfX8%K#PtvAd=ItmlDS%tq{pj znYdw6+`LrU@;qMiUK96AsZ|fbiv&VW_JdJ4N_oBOo(ibnaywxE1yOB9Q(< zKoXH8AoK7RgU+lb9j8c%KgIbnH|UO@De5jfQ-pr5!xrFdO`io~l}>2DPto|4gxumt zu4i`V%oLN$XO2@fa~73aRkBE9_#u^aUx>nsIPR@ViV1KgujO|IyyNnfx-A~x+7;S{ zlItWrC9yxXEVj|lKe9(=Zfyso>(o60(hyk?8-oM=U9 z71$;p4Ak?jijn#u7TIkn7e0OLU>h5vs?QRL3aEYV!B;GfxP=eP&1?E6i7Gy(w64-; zGYgr~0|QTXJ?+`cJmx3mXa;FurO(oc80*UzIcwm&jc@~D(n4q&-5;h>)i03mKqK2? zq17%IZNW<|5~6I+Cfs+Fxk&7NztMFF5DD}`eT|y3G;^Cd;;Cd;|M36?+J=G+*?{h3 z#^0;ZpD8&V2oZy!=oTyu2p!m)Qz_Sm`R0LDI)DK!pj-Iy8@@3@l6mkGL?Q}HMAk4z z_b;;xohpoA-pgjW_}+ujkcm~%ZHzCqEsWLKo)-Qd1}x<%zq3Q;unYKYn9-!H;td~# z3WN*(2Pb*KXMQ(_c~nNd!)xbJZ*dn97JfBTv=JH*}UJC<=*Dz2S)(II!{S+ZXA zl3f?Jxuq-RHalJ08y*0-SBv&OD=78l&XfxuIYZE3dx|>+iC|>&r>l#Wt42^CD7u@A z-NKvylqkNiyI~uRT-8`4C#Fo&g1@Hk^K!aaMl9a|t0>zhcj&V4hEFHY#tF@}yA0Jn zpFclX7N*V#6XyCdM_o!qD&xEe>F?rIU`EsPF`@^lwMWs=`EPb3qV7QC)I*DxCG6#O ztlWlGAHXs)k81$CF4q8dmIJ_g+S->-ZQ1i-L9OB-n&#s2BIRH!vV|L0*+*aL!{ZnE z#UHt`xAoXG8O(;e|Am*VV$X}5hF9Zzs=5qszpO>D=m_FHgL3`_cD})Ux0t;Z@=i;~qNIM)doy`)^}4t9=!8)9a;%c3?XdTF(u!-epJ#`N z8THZf?aH4e;j6D94O{q5awfzK5 z&TsqV#Gf)Rf2pIbFhQd!4%_$iwmvBDm z9Jgr-&_}r_4va@Ym%5jztNSU>XBTK|AKqbB6ZU|SGOJhB_Fbx(*%PY`XC?uMVf(io z;0Dul8q>7fe7+;o^nu|t?H)f(3|!qq+e@7fUX(d7IAw<+C<|8Z!j=60`EOC@wk5Ai z)3eUX8e4Q9V`ox#FfN(NXO}Krw*0Jv&N}PhL(ZC8vGOeYv*kCpoHc*wOMk=uyi|Ym z?XbfRKceUlRt=KhJo3p;S$)(~pLX;yPd|3eFa7eb9QUhhk6*X;cdvp9KktOcLchh17_9;ip8w z%c7KoZ@nos6S*Zl6&WuR+3J{%)g--${M2S+arZpbEM7bptHbGU!vW^pVgNP3Ki`4t zim6mb))2yde?A#XA}j(v#-TID>J#^GD^0+e2=BeD8*VNI#or%iLbx_0tK@(qJ^PJV zeLww1AvLaFcYD)QR2&?@i!`KgoAtkO`lViI)z)zTPm-Jq=%-&AzWy%<4gGo0uEUB$ z$J&8+VzLh(f}0A$X8zWcwJx2lhRCYEp;6bzgHl;6FEu>4Jd9`u%j*WT?~_CT2u2AA zdTY9}oS01I*U5$vIav4=OWk5R#Z8!F*)wL#>}QT69mNKW{Ai znTpS+E%L*N^XV-sO50SBl23hwldKLQ_K6^bhihGBH3$(Y?y_lUvm?bjPNG$BiUD1e zRdZMx9)f?hW(`fWKT*y;q7s$8#Gx362Odyb@Omu6SW6r|S(AlcxOlRjp~+&9`$akz z>G?F5xCdgf8Uh8iGR`cAvY#f5Z*iJf6Smzh4i-&fKMBe5x6gs(tmcC?awK7itd-Y3 zz@V{zoLJ0Ht3?1na=BqHabbhK6VEFh1egOkFiP|K2HPT4eQK6ikNt`33JiL;rOj-> zI)qII*!y)S7y?p^24q+*B!Hw&0EvxpU*Ej+k&!9au?1lu;!(~jXb*^N64gXvI+tILP;yPJE;9Brf(1Oy~C9oYbOHaDLNq=G3dBEc0U!lL`f(8$tL>ekE)g`WtVAndq|38om;1~KXp-3& zrZ~xRG!okh6|1t~D7An-!iv-afI>a;#l3SlUq(IeQ9@SZh`v-{6u;v?JODOw2)K>I z?!cUA3!5X*Xp5VzX9|(J3isw)%`|eqW>tPHX^&8nq0x9!lu=?LF6zWbPIo?1vOF-< zTqt<{;XjbzDN4ZuqY$#whzZT)c=q7Bz+%2ItT0N0qObi+74e1M^Xo$0xbgEuj_Yc$ zxrBs!-DwJ<=v1yT34%&yD%;0+n2}u)iHlj<4!hBQSZ_S&CQ26xM1d}FB1m9Qf)a>w zxsBL-z4u_LI|?nc@!5LoJ=f`jwE}5GHF1HW@kHcIsb6{+NrMnX7E9DNYSLjK*o0G) z1;QQI*cm1(lr0|mPywry03>*`_nfZBXByetlDDI{C@iJM9mQX^9&Y7Yw(G;*rM-1Q z&ZbXM6aJ9g|$Q{%#t{OBln1ia{;SQCm;X=B9FifS! zQ@e;o=4tF&AJshN#uY|)*}$L8+*Jf91%W9x{)JS(no=Z70rCbR_aU^Pk5Dlw$S~mg- zUTjf6-dsyBW00oGrY7q5nqC8fmy4A{(u0isPw{ibd$pvEMiI?BH%FGoNzro!T}q7< zVEpvWYC`KOlEVtNO9GpAhlU~9`(e2#xxS{KfEimdw1uU!ar#up7D$7BLH=vs>J!!9weNm`EXzj0czZ*l{~;hMY@7)42)T8w4G#7`QW#EA=EfEOd#HkSjD z_y5q|CRVRAjOmT#I!2LVCSclnO9v3f5XEjAEMC=%cyUSNoLXr1HhMSxjBO9X0Tb;%_7_rs_syo-iz58f4-;Pa9+{J@)mRh0`bpKW zNIC7kluhZlaCpZ>yvzSDo>~l>+~{$Rlin%v#a4E)7-=rcPw2@!R#L>LY+3fmkRopFvAdj<~-1`ZwtCq_V@4 z#&*~{u~f*#cU;oAr8eSjI5`5OeH?9q?2iw_6c&>zl3486NcH4yxB}^`G4`J2-?gx8 zrZi%xl_@u@M-Ph9OK>Vf^kCs@veVU|aN}R)i*6X&Y&#HX$}Rv!%IPD5Qq6ip2R40- zWB=2q&<=!lHG|S_E2^nxkTKZwi7O7=j+6NY7%17G1HTGvi+^=DQn zL?$f#u#u&3MUjTWZE2>I-R#<3Qo^8-8~f6LOScg&ES+$lJ7dt82Z%~#*!C>s&6 zCHbd2y=M%$O0*OcPsql!Pye z3Nz=T>h-xwKo_(QMM)~IM%e33sDjX=4X=(YZRp= z8!p8Iy6;GHxq!G|DbWK;OJ8q^T|SNG81{Wa@-NrQmL_mnrmSAp^%{1)Qe{y(qL3@n zdMnAIkw?km#^7Tw%~3PRR_Gqt%DpuubQMBIId8e9FVXlF!`wUe0BcCI*)5Fe)}v~H zX>CT{`fofQ@9P-#HQZs5Y>H~$bY~O{HwPLMsSHBdEp3jxGn!QHVIt!w%4~ z_hF5+I01_eq#_HqAC<9*_6LD{6xUv_|6SC#;~ote_1YF&OBk2N)Q-g?8j%$|j>3tSe8QW1oCYrOcPDo`D&ir=x28mgV2_L`m2$$dD z!2NW*9Ck?`Pf4GlGA!#<{JB3V>KOftcIF37@ArHgh(1WBlUby1W`_n3o|+;Z_>xYi zGui1h`Dp21-DZ)6&v2*^AH#$)3E15>d1#0gFen{iH*6K*b-x6*+_^w%{uwj&YX#PX zJN`PQg!2MQOcc2sWz1(W!vu;A<-!~Z{vq`KOn54etai6TmrbM%1T04+`!H>G1`UlW z!yD2is~qic9K`g0er2cXyB=@rPbz%tD4JFxUmg+|YE!n2!dwM@F$mNru{cVi4j<){ zsm7f|h5A`w=_RhVE`SUIGZ);*Ym!U@v}jb*#e|6tf!WB3^c#xUUr!j?rGqSYGy>El1jGT-G;JiA zTt~2&K}WKLAUu9F`;)bGY6p)ve8S3%;Q|f8LnBuqd?b|lEj}a5R?~|h&$w2LE8qw` zcZ++TZ%9;1Hz5eP?Q$$O0Es<&A(2{iY6^xj=(Xb6V_?V^!{9E4M)*)h(0ll(V33ep z1b`e5NJH^i2SbS+<0cy2gAY4a5fNbvqWaGGZM$5`HW~nu{!kq+*F0UCftrR1caqkG zi&vR;J+x05jl|G$mV%;-q;0 zfKK@+_{X5fs*Fxid8M3d61Na@TTM}Jh#F22q-86#B=A8J{xPvgz7EuBT#~b$@HCNa zA0hx0XG_3Zr6|;TI41e;;B#1~LjfH<73#%1{<}>=_&U55On}DK+1c8MoG2!V*ClfT zPch`hYbNmb^MiNbE+a0ZMbBDfTHi40EZk5fkO&{;+@*{gnhzg7+P*FxjFwtC7%j+n zHgybK+)FL}4)sx4|Hft7U^VDEGt(C2{Q6gG3-BX`DZy7W$k2JT-V9Hm%Cct|9ji+f z?1k&(hGKyY>r0P-IxQwg+Vi6NFjSo))}A+cXx|MNC(^jgLrZ10Kg2-lO-A6)l?!X1PpA+wF4}<|exXSqA*BA*(GIaK zqetNAGuO4_Nm)GHl!XQ16Jk_D-yw7pO`r#;FC>fPMHG8EV{D_^YojW;PQ|Rp8}Ty9 zcOE6v!@bU;=oC@IblXOEqTEg3q1q>CN1lEJ_C{K;*Mi`c*nMxhAn%NMmi#5f?=a;Nl*YL=KWaISVpscLyq{&pR z;bag;e&P$?`WAR#Saj&oDTJM+hCTfTaIjO7t3{F&-#8@PE!6mji zD7qQD_C>fQ8kme)$itqNT#t6aAZx|F90(YLr`oEjT3rB$>pvwRh%+HXyObuSC3CG` zwQAo$t~CrUH%`xhZuX#K^lR^+5@i&wa8PwT%BahA=;LqnoA#5&`T{vs zDkF|$a5UV6t2$UPGV?@LC}y0)k@-lL)q}TmsLpRL1czFz;y2|yR$YvaA+qBV_^XWH zIE`4uFw0v!h=fpvJ#SQ}TgR>>n3R`eo~x)K(cLQ4YArJY1=M5Gn-!UJHmUrb*O!myEE23O3j6+1FAdIFu5?INwn|J~QLJ^qMeWu5x2k9 zL~jWv8Y2{$-%Q@6Z92`Wl#v1dE59!MOAa3xl1IpK&hm zO^+VL{?-e~ikrzFTx&kApsyG-uN4|=xevF*G8f7J4 zaEg2!6eWzzHW>hn#U;h81xyPiC{-p=EW@DK-9T`EC)wsF(D!`H&SfiIfS*lArql!q zmBrs}iI`L|&J=b&)Z41Iw0vQiNU2`Jtl>T&bo^=K>*ALE1rf9%f z9BpDZU1kVQ?#a43^Y%DyW@*(m>o6RfL;N7cY#Tb#Wn5al`88}Z8Ywc}Y`|ftK5jxQ z8;mHRbO}*a2@j2L9oQL~dTpaW;aqumA%r}9>k|npveE+7_7ew6nx?gvguhaINJBAA zr6ujYJ4+{G@)f1B7;4pH_J5>4DWjxLsk!wl+6QUyaPd@_4h6FHkbTse;9FqklmWem z=I^o@z|@^YCP?MWvxu^$BFdDtEcj(AF{@W2e0v?77DfhZm@~geVW(PgxFUJ7pixLa zD@|K%swy3}5)iO7nTE1!?F7}j<|2j(?>h6YC8xuC=ndW_O$X*>O1DU@ZJ3f4rr440 z4!;iuCP~r6LDNbv{p;ch@&Ir;k++JsQZgFYM>9NJhByg3wd!K*k6XPJKJ+OuJf@At z8nFR=2sxrPH31Igsr{o^)JSs?L>6!Lm9jO_-dK}g&PO+|%XlmDq{s*0`$*tMG?jF3 zZgN9Tj1EwI4eQ9fyu@j+oYrQiFkP9UbA9*|NY9cJiTWtGoIGR6bKz|lvA-piMg@uA zQB7^|l*{OeXCu=Yb4y2d93McjCS3Y4^$jeY_$B!5Vha5d$P+w45pEJhVR|d= z+Z9Z_oI9qORFjhtlA;!%KwyIcl<@s6~6aaxHYMBC7)K(l~ZOY8OO*$Qn#2ql$B-N{x^x~VY$ll1`rn?5(t`z>5B#ph)62s2vVPicm-mXiY( zPZOTj@NIH@GB_FmzJT~$H%n? z*6DLdK#XQZ>Tp6;^aQDbz~vFCaR?llC-o)X_2jnz-gWhbkI%AA@AvA9K1&-YK>o0G%|y(_+%oE(QF7Dp zpo+P~G;dpz7<>@Q)bOqgU)Dku4+fyj86%H3G^(0>YGA=xOKW@K&Ri&n; z2))!jX>!=4@CFn#TMb`H(X5o=$<~3$Eqvg8nUbvd7CnRok7foE(sCCVvi#q)71Nd& zY}VA=K}&vsD!3?RGhslmlD0#Y%2BspSR#G>tnM?={Q@%mP>Q66AcXXrJsAu4(PIWL z6b_nzqQwZoz)@S4j=8D5QK(CLeSG`jN1NfJ%fiGv+>WeY<6~8`D6IGth;1-c4Bf# zvo+D4ZO^26^=Ec=stZ@n)-$p%=<15*Y-<86WZ|d$YBV}cUE->4n%sTD8fk`OH&3@U zDSC+3w*rJt30IcjE@tX8BA3fgBBYnYj$--nRI_ANgDXHjcJSEpG82Kwdk9CFm(O$Q zrPB><^P~<-8jjsGy;LDZo*&Rp1FKcmq#cE^lzU8>elpd}z?Se-lfe2ubXm&MlCw>V z*(PcWES(ah2cs^hBO#c%{guG$=_T01aa5t1Gd$W0cW2=qotSyrrg=-Yru`R{Vfj}5 zg=hAK*Jo~;rkQZ$CcYoJ>D+0{0>%wei@`N;mUpe5cW5_~RSoudXM-u4@a6FFEPPBb zJbBYRF-o9de4AYda9JD#T(BI(omu##8aRnT2tlJAPcMCpM#0w6*dNs=C)&Kwk6B9RuE3gNZJjo26SC_2!( zUrtjkLM75eOHv>qw`_@n%83H@Y#PMoP~#CfS-9zAsk1wX;0tmgYBgXGNF#q2fksgy zmwbYUL@zjY&Yc}VfitdU2t^`w8b3SnsaIZy^F|tIcoN=!5!{nR>hP;Z{zZ!kLIIFq zuLwD=D*ClyKbS~sXy{HTq_qfBix2pxY@O1pLAO5q@t+Dh55;G%skU^*Fj?wNEp_^( zu40e9H97|m^81SJDo||2H1aRe8=Ylgpw1|9<}nG;ap#&zCIaS>a%mIyhAxXNQJQsb zn^JT;Bmx*Jl;-DM#}2Ce#Hn_nY(->Z|C35iC`8anqZGX+WoJ*5#4*=_MY(ao75cJR z1a^roliB5#UF3OVW z&G%|WcrL;izzE@2Fr}cW90;_wC>l|dD?N*B1Jw`mDjnI0Ij;b!`!aUgBkdrOkfKozbU3#>Mf4y(@rzTdx6QnqP zv2);Xs+wA&z4HY0ekX=@wIYnDnXo24BGOs9Czd$cfiy}CS`3NW+Tc?6BjYul@jU=G z1E!Z$Se1l&;A*Q-6YZY&reACU^$ShU5I5sAGlg73Sr^a!$Qz;b6@s?uoR5VrR$`Yl zl$>p#l<73T(>R&hW+@XxNW1#6e2?iCed{~!duzcC@ z{d3*Cp_|?us(AyFP!CN(O`N~8v{9V z9&{69ozjy;CB9BJPQ$2NPZIET{%K1vs!B9GMZ?{(3eyPJt=BTu#?-N)vcxRZc=SkV zAZ2EyiPT|DdtKKK#wtiD3X)KSYk6tuki*m8F$z1g` zX_J|>fz#(v+PIVVppkK7o=e(HmeM9Nq}WkmTDvc?5ou!^i(2`{73pIUR}}9DA;#Vy zCnltrK-0xvk#58I;6qm}PGFd%{RthWXckkO%HN_t=t8E`19tqTlHQ4WltTpP2YdzE zvK1@>CaE{VHykAopV_35@SJ>pN(x&pIe@tBEq2@&%kNAexx&eME!UALMU^FIN)eWv z<_hgkT1Pc1EFJ8qw)Ex4CqdKJjzx@D)nyFXRv+F0+#I3cWyWl%4-q*_R5a4nvVdbS zSY@Qq&b-)_^u_|V;3N}gjonUUt*;OhA1GSJSVwh;n)qPxgEyG+CtT<_L=}w2)vP^K zZWeHoCN{5iDgj>aHyi1)USwderbuce&7}CWt;~%9`Ois~3aUzn&cQ+7$-Du6348@J{*Z5gcOTM*U-S z0__cKIVNF-Y66cRl3AtP112fhXM{VB1iE-HLpU+294DH}p`;jlTB5K|07}%)cq4+{ zX9osSw6-zVJpHX4pFVr0D9VkmkX$i!37u7Tk4tIZjv5Qr4_C{rrSM9CFBSc6cLiq z^HkdUvEHgLx*Jaf(Y<9Vo4uf^8*CooAf>MVi;Y-ANq%iMnAVpl_D^386@DS3sj{2Kd<5OAt(yCEM`$4vg7|2tBDP$&SW3DoM}r+0g?# zQeFL;l2B@3m-Sm>oF;v=gT`PpkdWqIweUqN&u)){#Qq=VZl{=fw$xD-w+#kDT&5I+ z3{N&t!ryV4N&Yu));AwOO>CA?SIu&m4aPjBW~YjdHLK!`i^gmOIN4}gCqJ8D)US3e zn?`A9u@ef9a)9y3@u=!3qv@6|R*a(tgHkf8Ux;b(={R_#91cf~8@uW30aEK!j%M-w z`%WMM$ElyEXP&8Kn8tPyWf>`IMF#61jpftXct%Dvfik_@)KvV?{A=6+pA#g(9 zCiJbL)$lUyn08OYCru!E^zNzSEkqK$XIj%GxS+RQG3g*dNWi6kUj9lzVk4w2U|Ft+s zKRbhif9E`-k~Le4gSr0}vR!^cV>KVpauFIVNolm&m`ly+-FRAK{otTt`R^2bJ9ThK zK?7QfvtE6vs;iYlPT;oGMsX0oXysqjikgsmF#`oLy&`6s2H1h?c)37&5!w(Hu z(}Zs%`Q2uuKvuh1%uZ4)bDx+k>>j|Ni^=>Rc#gdk19}%sN)x|C=vk8QG%_T#XH`JCaWHO;jal1qf|e9G`i=*w?1D!`q;qhedd$pld{lz znpx|Djupktd@ti(-_K+E>417StlB4KgyNOfD>dJjSNHJOEdo95e` zeVZy;Piy3T?FeGIvaUj|%1k}$Pn+y)u4cbqG>=JgsCTO1q)cZpb#;G9fqp3}?_SMW z_+Bx!vp=OUot3Z4O zk+R*Lbdwi7np97-#WWRmb_ZQuOw=m)DEOFBCI?Q^Yf0EIpbzV|>Vdwk-dargH*V9m zZ?e$82B!i|eGCUeGS~~yk?pMm7; zMn~zZ0`D6JwLmHv;?wM0gdkZJB@0oVOc#;0kJcnsXi|Wv-tz;lKRmyLEfKgxI>vBY z(zhFLRSZU$DW{=bP87JdNiiy>aP=g6Iq*)A0xue+@JKMV!%mxIQj#Xr;3b1cX7Reg z6*9_{C`QX7)y7JZcyrDbTr*l#CvjnVZ>xs4aEe=8Z zD%*ZfbgWIlM*r^>HKhLRt~yfhnaVnTt<7#2e1jF%&>>FO5ljQPGOa5u{+%{|z;clw z1&@4}-{wuQJIMyvUNiKiJ~l(+_xNYxT+S(JzsdF%p?$U@Mf*Fb1*emDF+U$J3Uuj!c?_0@N#TQ=KfD<#j?0vqUuleN-X5_ucgexzopbb-Dbve2OyuhXMWthak4Qt<#4!GU^T5RW{ zyP>#j*PwGcSD#F1u#Ipn_dRrXLF)a}=5_ps=M(4to*cd)1SmE6cAWJaFe6h-WZy}U6WXyhgrnhsaM7;SYz3#3!GitrfoRP&5Jx)-lO0vt~3UtFtTZsV1a8DM&(I zgH_`WX5ASLGQO;ntZPZdU#@xt|$Z$r9f}<(4djb=I)*MH9{@0n<;wH(iLi z=*WW>n0Pmj^4C+==BdTF6ElrK7H7xd9kT1L{d6;Y^`b1?k%Sxm!8eSVFV@!fGUmi~ z+Z$m!hfdj!H)ly$w>CSw&h{I!i0m~a)6nbnqp#VeQDr!#y)8!HqUY(YIe2VY<2|YI zzy}a44J#3SN7?xc1dB{CE5OqG$2g)((rQE=Bk+-b5-<+cZlx54RT9KMC(b?pJjGMUuub#pGYiql z_fp-~g7}w=4>$fQJ8saD0n#+vu(AnlcR%)yE)EkrDoF;D$0Nks#bmj1V2)Zj2;i;7 zWSxK27Y@__M2%d$OLU&*_W@B9;ZX*?J|bl=;Y?3)y>2m{zS5T1kzS_^LlQd-JKS|l z*po5b&&cup$#yAs_<^*6rsXUl23*AJG@X?+og$%2nwG0B^7$)Sj$$CJ6&Prf|1$_X z%|A-pe0*FM*0Cw7u+o;&vNSulQAtT8sezUU{b}xW0Ur{Mzg}%MdON#BUo%n9%+i&j zRJ3BOIFjo!O(d&EW~y9>T2Wg2zI>8^vhmXdMt38gQHPUtYzr@w)eq1DHhlD$aHEI- zVaBf?-6>I6DsLypFA2s|o9sB&_2dbS?Six!cHXQ#ho?1){S*VjG{1!*@PW=B0mC!{ zN|}8oiI|uV>As>HQ{=N0Y94&_ClPQMgOS#i^qknXN?eG2ls(_3;x2fGfg<-|Ob+N< zZ8YQ#Ivu_sfW-vma=?lLQyoOka&h=@Z^G9(=yDeanr%Tov?AyTaoBms!BUPVt6{wy zvd1gW!(#I7(n0MRwN{(gB zD8~GIY?9C*jx?6#l|@<{Ca6UUNLOyizAYo16!ce7zfn~xs&W$JR&33BrdhX%h5$a} zbTA~){2|+2w*euU;!Iy*^5_C0fbD?}7Y$9POcc91!*t5bbP_7jyYnkb26#m}XfRhW zMMd1j>Gvi9feu;6LZmj_@$ZPZyazWFtZhlj4N2I!_h6Z>?5vevcGSLv+c?iyomLU= zf74zz+w)^MvK%37!%^-1C0J{F$sFC zs63cAgrQ|`A5!m8FT(P3Oj&2cSaLCA?rFOwfiztll`Ess(!i}(%ULCL14o3RsIpoy zYk9$}r}bICJ@r^m%;km;N{yQ7BQF}{&nXQaF+r!Y;phl9^+8zGLalK^KRahUHgg}V zF-6=uj2fQd28vd$NIRNvWG3=OGFIT0)QjG^Kap!iPB2%nts(gG9y;SY8^n@>A_`&4 zzBQE@L9vKDYCDJv`DcQ;xGjY zDthQ`4KND_25CzB%Xw}DKo$l}O%2{mdjX})c7Pgo+;OlZyE)ahw=ToRY(bT_E|QWR zTzfa&Xv)P@gj4Q0wZSoGN&YrmPwPAm(Wls%iCCvkhu{={1x{N&LRy@h?$aVt71Jhp zhqjjV6Y&PgC&Mwwf@c*;_x}Km*?O%lwP;EVl+E~LK{sp*Mn8#Kp(z1jYkFH){@)-m zR+*w%INwYCC=?C#V)LkMnbb!70(@Bxeza)Fo}|SL+kKXL=FV0dw20LJVEtpusT(}6 zTn? zycbpY1ftt{QEE~zz>M>E;Vq@|ZPFNu>_l{iFg1K49l|4VVi7&)+n(WV?1R%URlEaL zrFS66e*lH#Ki5Cslrg71-}6lC(q*9@{M`-*!swmffA|zv7{G&Y7*F5yoC-Ll1HaMO znEQsAG~OJr&aQIrAcK>m!T6sBC?0YQwTsTxgHG+aVLUB5@*<%K$S<3bAy|~f43IjzEgi{# zDcZ5#3)f#Wpx)V3;A4yG4d0y5I71JL<_&|1ohLM2$q%*+`1T3`iYxo*0oAG+f^A}_ zoLMT_zG^_>s|P)Aoewp}%k_HcH*rT$`N(-#>KTHGM7V-GKx}v?_TFKW#_4cT6$eeHEj&NTKisnAC9j`k!TN3H&NI`j z;%ug(RKo0I6X~R)h<%k(XWiDC*J+L9arw7^AjPnn`OgoLZ$_%E;DPGVr?BETT!?9# zAKzFB@G%pwDLRTRA`O!3rWK_Kdy8;%y({Ww7nQnBL)&5TFbU-*#~23 zv`u+~x`x{`N5ekXW=GQ#Hd%)feDns!Dfz}7N@lBBRzb8`^EI~T*$k@t8kJJOilJA! zuTclS@ip3uNpEsW4nuecn^={v5vOt0X>%}PzQzg4;dGuAnT)5|O|Tz}FAt$dX&26)grNh=jp9 z`oyQm0zXxI)L>GQ-~+7NV2On&a#G*6NRHDEr{Zo{S-_^_q@XKzF?|z_ZkKUMtZ)sl8+ z)Kab5J6C51Uoa(EyPG}q7Q)sQ9W6F3LB#1JmDlIt53$fJ)tD(aCWo*Ed{Q~vEmRat zjEv8QNU7ACj9Mg`5V&QtUq=bkLflt1f8EE_yzjva zkGkPOo$txNiz~Oz72r4)p&`ywR}RQHSSbf$5Lw|*cwDiEr09lEe>cg044>xfpFL82 zecz3lJ*BiXsc0?%#FZR@=AfRkb0K3};W9oU;(pJO0zP!k+bpT6{37;YxD@<#S^ksG zfHa2~v&Ga}gf>bMBzIXVpf&2IIZ93ucX{;Df4rc-qWt=3Ut6E$uhADQrc4$(PGPgq zr__?gA59i4wo~k_;<^vnzJ zgDeei!f5ENXCrxl@w(N9O*a z#oXH|dzd~BD^}`bWwAmZq{R|?0^2JASdIZw?EaHU3!4#bKW|1ox|vXE6h*EKxRQ|* zYTVzyU*O`;WIMXT)ua7GhiE%Yb@3_pl6VaSh1*{$A~?jn&{%mF zLozmr>1oKRt<1irMO9VYR_e9F0ZZf^`h*ScOv5+6pyLPZ2j%ZltQ*pR_YfRzoJ+*z z;ZshJ;L*S!7Q!%L${a$=oM2?Z#|0(j&%Uje{%7B|NU^hTXG<5eZ)Zpya0r zsr?MxBR;1J{Zo7mW0H$C#ORt>+IA6fuCV;%%Y_;sEHv5tuZ@+(g!x4vz$k?%=2=cbA^NO-8 znVZm-8I@~D1`!C5FU2;mKo9!a_Vjf0fXrPicoI=O#6+V~1>MS5Hfh8wom6*iy#YUkV|xH80&;gfKlq2-7t}m>eMl0mzJqzy_ki z!EoN0i)!8hU$e5G`GffqpkX6~GzjAzl7{^#>0v_r3GGh(uuyEKDNvi~A%R(Jb4i%? zW7vw4PTRU;U7D_lD#y+x8+g(=EG2l-73aBI(_5+GV0l z3Ekzk1{4K@a*UJfe%c6Y9)sfVv-p11&tQ0ZmpLMw&ZVx9BL-&X1UZ z@z*K1sg2ft!M`!-=L?>q;F{e(m%nv|7%=O3YcW^MT~o{#^VeX4>k(0m?!pDAC1}<& z+9z@*0vT?$kfg~lhh)hwS&2$uc|moKzRx}jN+&Up(%|vgFsz1H3zm%`wwP4n7NkI! zJ7>^?8aw?tjydJbpY|u$cZ<2Jc|Wo3hPR(`!dqW>&89D3eRBTcIeO!vPHRs17F4fb z1vE}c;-CHs0e~JNAPgH3hB+iZDh-tdiiPtPiW|g)nlj%ugJk{UYV%3WeNw?ke-;e< zele@4UfD^r?t&3nwE;Ooykh-MmZ8XVLfit0wvY}uOBLzBQg(r_8XaKer=W0_1_vvy zE~XZYT26&*Q-^1InTFbznw>YqZ!vW)wX& zMckhCrOkv1)4IStTn*Q*DNwT>Xgej?^I|g6W?n4cOe6=fb}p5g1zvgiXLW!F{XmA< zG8`lS+~LTkv4X5t*j;9Wc_})gesh!!xcvriS5fM&xR9jaWW{_W86L!M@={UyY?Vea z()mc3gAPS%x!;;ecP9!@d!e33*EDoFc$VaUuM@*1|9UM~1Whw?83_p?mcEaN&-!O_ z?8%y9S)qfk&aRW=6SQbA1C7zviA8mDY-6hgh1}o@T4jG?YyR^o9NxNdS)@lT&4-MH zBH3hnt8KY3kXT86dz&6${ncA_M(_0Dx{2sieXvOS%G>L4bL7#9e#gTU)S35J(ltwW z)AZ!Z;&7w(!Te4tkc5kxgSnk%0Px5RfSnis(vGxEslzOAA%d61Rb)?@o>TVJuX^&8 z+CPE^4$gd`P*|fH!65S5=ACKz3y%5Xh@JV(a|TDhn6vLPL{{iIWe%f`m;xF*IP zMVMsVjRiykwT86;Rl9uy6QikH6@MK*WRNR|Uk?i@alMe3)I6yV>?W|S2pMo|RQ|pd zd|P=na;LsP%G%qj6_g||AEeL#g{x(j0L}c>q93$A;M{DfhLW(|oz9T70a;kjO1)SV zhh5FItrJD=?9cOi<<;g|fhii<7i~cGa|uN6f8i zt6pS-=Ak7of~zUlmYhniHM@2Q*{D?pZVPC)v^?olqFd_&3O|B(^E(&56ayr_+kt1? z4x-do)F4^85J1T|d5E=R{?}kV|9JjuNGf~ z6$!X`faZruKj~reed448^b%c6OVznmGklq82uB^_tF(;=&7mDa5*IT&tt%npC}p2l z*FY(>RlfmL2#vqR^=xC?LR>RuPoh|+jd0fZf7yHYD7%j0-hV&NIdkUhd2C5zS<=YX zKATA*Vmnb10)|WCX~!?X#N4}Bck#?Sd#M#eysb;x&br>n;7$Qz<_NG9*rDh zjIl-HAOXe*aEt*H6d)k;iXc49BUl7OoP>nm=Ud(Tab`x6L%8c^-SrcA&N;n%cUMbZAQ z8}YlH;!%4Ne3#RiSt+kclHN{qm>T5?^|h>QuhZ8(G6geumiCt3xFP!mSd45Hh&4Q9 zsekwaSxKX7^eZ;4{ICU~4ePQQ*8a4KPe^H#0t{=Zc9)oyE%FiR1$He9aYC0&o{X?TbM`@8#vl;gdIx(Zx)f5z zBDjQ7I^v9;u#1Y*ma~@b${W_@VOykqyY!X{8(+j_qG2TskBlmy8R%IbeNq0 zzRQ1?rt9|UJ59ss+zr>ymxqgam+Mb^AYxeKcBN1g~ zqNaQlSqTN216RyB3B+{x1JAWdS3mc@SMBeM>qp^BWU*;T;aeFMc12?T=-paAC@@^2 zC;9G4MREYL_CL3OJ-8$Fj`YyXJ<2x*#j4f#`MAh^E&6>PK^)+V0$7Gn$a<-JeqJbZ z_qWUYQo<3DUz;IRV7y^V;s`yO13nrlr|XgY9w7M^&>AVTtk~lgua0kZB*oI>;dTBRA$LqffXNUU4q+5(%!1blZtjjSr z?fl0>eM*z*Uob17KBn4Lt%*z$0`8+dJ8M?L8@n^Ep~D*Y-kSnMhfiA!*soBJo)IYe z2Xg+4j343^eGz!Y%_ z-D=j{vtztn^~^g`lB%B`5H{)Um&PhY=;^>v3>c`ZZ`oM(^Sd@mL-bfgE!b^8n=Uhi z_)f=yhEAQG@n-4r-AE_@;|*_fzj$euzkeeL#rAHd4t>B+hjBWuW<@&^IZ8y$cY0u4 zv76XIE3kMe0my#I<1rmm0vHJA=clQ(zWt*+lFDGV}xf*Ex%nwn!L(r8y=j z5wCWU?kzdQg@gx4@CiMGEyVcVate9^i+T#^iv_>UM?zSI>~!SKpsJY|DlDi8i%pT0 zmS#xbr`Yidg`m8j%nafHE(Ms z#OGMqVct2X*B;nosO#scVuONJQ{Jqf$IwKL$H!1tp6rI{B8P&YMff06AX1c8ZjY)& z*)R^G(^EGxf(48aLYBpQ8=e?N&(n(X!p8h?9z6?Cne-n#?I^%L7^vO9e}h?};mGUx zvHd`~%6~Ent5slA5p14NuJU^7u?Y?A`77}-fMZN2>R@i6RR(hSr~ zaphg`>#L9i31sxcIR6%zg8-aw-|4rIrjw@Cn@wA=gkvDBlYf_inwYLJC!HMJ>2_ss zr=zEaJM0q80u720BIU+1yS`%E?gGZ2-3A?*f8q}_wj4?}uCS2hKNI;&YkP1E}!wb@K1g59~y7&$83mCWy3ZCg9B? zelHBaV}B6s3fl+UO6+2<1v^1s}KJEExn<{5K-~N3M@fIqN zlz6Wc^`Khm-JKxd#w9fDP=EG;I2_(kdTme+*U<-CSaCyh%Ou0dm~2Pu6Y*-q7Qtj; zlCrQz5Qoai-)3YYjREHhgEt=wtn+287pR^kUVoMPp`~Mw*uykmn^JFSXg#VM07iSk zMcJRmOn=Jpxicw?DLpJ3piH~~jV$paL0^o9QDA(2RFuf+>(}@A$Qpt=BEMz|9-uhe z8p2Bsg@8q7P`py?2b&Q(@fG8B%ccksbY+;JS5AEEYxe3SiC+}&tSv7qm!MX8YYEzV zZ?9N2(^_8D4%3JjkZxMi5*sbuo%x-dmMnJA1=fK_a1Wutq`N|UX%KO6+d3BO$+L7PvNu&Hn zXmD~jDm96_=0P@;uo5gZWg#2QRaQ_Lh24UFnn5`#inl528Ulhs{RdhC*1hFj@9Mwh zhqwlaKoa(Vd{KH7 zcO4@%YttfMrg&5wA4X++RCibx2N@&UP*w>iY!%p>n~RyHP+gXiHL94*7s~&#reF`Z zad&xK-Q4pio#6$w36hpd{BTR>|4x(reHQ9)ELL=n)zQyYi?W;AO& z+IR}u*5q&B2=0>nk1?(D2Ndoq2?ki=$|Q(Qs9(3Zw7Xo(h;0ZqSR0gRgOKMxMPrNxGHVDJKPhOVu>Rv&5gyZ}InC*P}qdCkm(*t*MYR7|>BJq=>@X zqhXYwiHTvto<%PxxPc3nNyP)OI+>&ii-(_!m~WH76}|k~+Nw;a1ohFm^|}>N+Po=D z(??TK_qM1$n({^U!8O>1!q7+S>9RhWCq=SI4~s?T`9qd$l)WrAEnk$v*tdEV6hjKb zs2Ox+8E0exoW)^00;C7Sw9YtGX$?x11Ej4|dC+;l3d-hi$hZjE`PQqrE{a`A}rIl(JIXQXqAs8_#;v~oljVQIv26^&^r0hxcg>^A)^Tj9w2NIPGylI z?!CnKL#DCYDWybja8!QW?Ih4j;X~3VOcyyN`mZ2E`T?}V-P2+$ZpxH-be_E4#5FHT7z`@%+o@oLe zxC>ZB=ap=I4Oqk&1s44oOSHEe#V`0Dhf?wbVEj~JQ>PX*wFeSW7Pyr*C;sBz94qgP z>#(tPUwbL5uhklWDzl_r7Gf=OWd>W-{m~^)B!huC0G9`KL}>Y^rSE(YtB9QPa+qa* z@t_n!=Ye2AO!qUaGF}@o7{|svh*Y|XnQ4mX}ML}$p zDhleh=KN<$L69D*5!Ag<=rEo|Aorw{AHE?TrL@x*iYFx}GfwJkT{cbCnPE~-N@;}j z?I@Husgaz*35?{jh!JXvUq7CW@f`t|4g4qjtmbP!yCY#!`#9m~)#vbnY(aI^@OU`N$?7W|WF(_51lum;$@J~4TLFSHif?P_<&ibE@) z2M!+FS4Kd0;==3=^o^OwKT6D+?3nx^kCfmEhDDtrXHn_8UKNIIBTOqCnKZXK^?Upu{6>8N%8opM`d3~v!@77QY^Gx`SfEh5%>z_*TL4Gk% zag%S7sTmx&cTMNFaR!Jf(6j)*W(ID=XwU%&7ifk=ji*E>Goz1!i70<#FFU^`WTuFD zSx9~0p(iN$EJp^_j0g#53327ZFMwi+pRy7^`V))HOg*_I*;*qFLJ=aGj9_6|_U@RZ zyZN<<8J$S<^99^8`L;6vyr6kx`P6AWdb*(py5LAUR)Mgx z$*!yst@fxKh#-~vmAWoi710x9v+!Z*bM87jVY@xMrCIgFMbyZ$m4oiI99gZv1qjz| z<=!TAL}U^__)E)LXzZ%3gufwhiOP>xuF83+mm~PkeiG@vVs6UNd;ATD@?-ZkE8%Z- zOut&86QJC1!WgpKJ8>_Z=>=%vClU!&(fBGj*C$sq(#I1=rJ}RO+=PZ!6_5#eGJ^1M zv`tD`q@b`29PVbenfxMazq^&Q$+P)O^mBve4n`xzSb0^b;;k> zuU2!6IzHRBo@#wXsxE!&R{hor;x}l=)@pu!F>BG~)tmAI6Uxajr@Z*Wgrcg4_N^F3 zfOp-M$Mc>Y0%e$5X_0#mxhNRPn%Lj+Gj6)9OTOdnK^WZ{GXk|jWYwh>ja^V01KZ3hh`abjka&X9-3Ny+*MDz~CD zkvUEEWgJ5*B>oRT{q<-nF1P{({BBd7t%XjPGCMNi@_SA;DujzOSg>hu2j6v_SY@=?tC(r^Do;y(B%32BntXEO`nRaZ8xCV@18-@Q)fo+4($-q8jD z+)<7HU*y-?*0ALAk8Ko9$J}=Zw=wnIq)i#+H^TDHn$4b2&zBZ=;(AYsCcqe?4UvV9 zlOk?h-W|gbzNsS>lHueLsV;lurPOBbl!#p_+(q^}QzrITfi0ll-!I3Nbj$-CTMjqV zl_Ci4!AIyf-!*Qr@zy?3T#=>SQVQE%!q9P1GSBb*3gBpPpcx>tZ$#uW+!CJ zPemVFtY>Rei)31$AkM85sRed!oZIx?Im|P&n zi$9yazf)gRSg%3l6p3KZ=xkz$oV00D^BCT_C65Wx#RcpmT}(4@UBiiLRh0pm zRrIt;@_pX&<&OKon_~AdPO3jHEDITe88X1KSsv+ymYeCpFf64J|0mt)42q3IINWZ7 zW!cyuwqr4Y6>C~H=inqcn>V80wyU({52x1h1oh|}p*4gz$&}>H=*WWwrx3n9BjGK$ z1Z)9T;%`%GfD`-B#SH#7CE;@PHl@!s{CtAzwM8$=)tCFl^YFCu9e6+uS7ELYhuq(0*4{#*v27TFv+&o%;(%%<3xk@IzWsL zAVuhA7V)dJa3Ro|t)m1a^TK@dVhH*MeY_|ppf`P`!dev5MFBE_rK4UIWPS_4jihwI zlA9C%;Iqg;%|HJs)UAHRL@Sbk`J&8!R76J`oc+;LC z@Lh%@ZHiD-*vQ|s$yi?GzWqwLgMGK&`*rVag^3|s-{ESKR^M=ln%RP_WA;r;Ro{YL z_2EN;%h;`#VMn+-;-x*Gzy|r!QcMz2M-)Bb=YP0k;=>ov7{T)k>+_e066y!PCHpYR zoT>+`ZSUxQ>)RCOWtyVqx{dVnbi;?VP2)=f6GBx1ADnzNZInxV5~fD~OBsfIKZH1G z3yOxyJ@-gn_e-Xxju@;!9=I##E{oJVOm#kzhHww)Rfvv$q!NQDyW)+QKYoi@ zj`3G@IeWzhT9wd=HQ_#Wo4ZP?rHpD!6T^Un_B_xO^kXpwIC$04gTg3~VfbP}OFs<$sDVQD|p% zND!dx*f&MOp&anCG_Kahy>;6x)y1%F{Kj##8>t%b6NyIZ8)n*corH;@&wrXh=1aOf zw!ky*EWtqH9;7&>So5oCqf$0RCj~DltUx49ejhr5(Y%EJq&jpf)!_!>v?U;alDIc` zM&PQVH>6F`U5UGkS`+SVbc1)^l^^n~JYz4S~5;@LReZ%y{6WxUU# z@NDOEZ(2tCiU=POx<|oD1oeUTlRb?IHG15dEXKoFU+>kybTH25=3aV3G|C)(N<>m9 zQWU>XPx8A$^xP}dGZ5U^A&sByHBhJBcbE8!GXgg@Eve*k64i$i?|6ccIX6N}uVMTA zKqt$7)aQUqA|C|&)hy>MiTZyu5_1)46enqibEdMU6-h&1&`_{%K!*9d#}nY!Kup{4 ztd2nT1Ke^K9gcTy}oy+Pcm$Brw0zL~4JRsv9 zFj58mbS?A&h!mb9fq*Dnj@KFrdj=Fj`jx`ehgl~LYR#k{3Ty1L>tqm25UZ?(U6Vxu z-`c#)n!JokWGh9MY0!#3c8LOux2m6Hc|S0`)oQgnM&7OHm?BZfTLP8bV0j@>Uq*_U z4?AwR%6t+F#xum@yV;Q{J#VWe4OA+|byDD&g@=q+dp=>VR3m|OUs%>S;dY&|=wrY? zu;iHn$uW@D9r>k}JTEcdtX|wd^5SreidS{~uAu26thCj-z_)2EN?i~i*J-tH_U3z6 zwhthgRv;(5e5`t47j!Kq#oPfWanfNB^gwW41-iF(czn==^<6i!TbUIPCI4Cak3f6M^WiXB&h(G`_G$1h@|qPMgL|K4u^2!FPJ%I}4IR7&;7hIJ0T7 z&%~=?Xo?`PR%bgS>di>)oDvwSUgBz)&CY>97IJ^3X`^CFDIJv%Y3nfgk;10k_||O z{i9NWerwSL$(jTToy8_^B|qQwFil9Jrv4;GQ;W`3t&tF|s`02WA%Q(LVf+@_Q}c6w z;>5H4=H(C|G9pRt*OKxIhxT`5=s{PL4@P{)STmnDbh4Wg3twhU;RWxpq_l=a?|VAC z^l?=OJ>>c`PWi3P-}&kjH=TBYEj3zUg;J3!fhq4UJFQy&MisY5DL#TgMKgL!2cgc! zR{Nn*r4#O0D+N6yh?#VxMJftb>Lcl6>?~lA9I{L$yIDr4RZz-qRXUhhaE9!wD)JAl z+*ejGMy-PBjN?H7foFt{Eq1Wcg9W4Mw-3olWqd?&!J+^ZCHH_CFPP`=p^2HycCY&D zNOt@x2dX_`yHrurbR{Y>gKR{Uh8C{LUbsr=dawJBm%UG3vOibyKxesNnZa`fVfc*No&d{rHUdF)BZFdHLjQu$nts)|&Jd?sLD$iprEg;d`mJN#qcy9} zP%3$d@?c>OhvK*^Hx-&C4BmHa=gaOQi3YXK`&;qdnb*KVm5vs}*G?V(E8CxmO zm;aqYtwB56+{x|}LHQA~F{@UGVOBaglX}Rm%V4hw!OGlwqtL_Wb)qzPmpPGYSDghn zkG{m(kY!Od&037mffformw&v_#EraMh+;D z%s0o(*Fs`UFOvXG6U#{Wh6CtkHK*IJBuMOmyFJuZ)3+zt>l=HctOXXrbX|hE&u%th zKO)kBg~Vi7H4$vzYHnn;LI!rLSZ8^osZY=59|3XVbv7tL10VX3BG$}XVB@J`t>E2) zsft)LNnp$}(NePbwK(4eGI@(Zn0^O7F3vBveUD-GY8PycVWDfzJTGR^$*1%BWl01(NliEOup3FP)n#f|RF6A{z-R?)c z5$wjqz2n>As=Sf+WH6)o^QNkY5E?bVwL%OR!ffI8KPa~t8t!e(C>Mmn%!NXca}z0{pl4WoorFe)Vt&^WNS96U zySB1*TUHQohHUJt=|g#%vIZgZ!8%y^3BGe};=cUa#Qlo9_JhIjch4_b$*(pg-+o_g zMZeY*E#QRJdrxSJR`D1;5vJu1{KJI8LXfNwH@NU=g;~XxZ3K=$N);a(Llh*aPqIxB zsO!`>G}C|IKf3m2blcHh}(wqabe zS6+eYq_D#%ds8o-l=dOk6HIpn));0UzfCn8U9bp+HnULz3MUxgJnkv5>`hdar??z= zto!-{t3R;WgUfM5Gi$%&-|x0T~)d$*6zc>~PxXlErRm z&eXTFZ1Z9| z)Kl3xAU;p!gB-X|;Da15+khQ*c=zXEnPRk;%Zmc^gENcqGd15NJe_DItE56$NNuIq70c{D#|Qko@J(N1O~Y}l=|Wjh88nX1zS5gK}%-<1wI4NNI|5r_`=7g3)a7Ai;jpZfT#_32uIPv_0$s%I6;nR6ti@`?DO#lb zultZ@B4yxEjzUGC2t;nP1pb36?=%b&?&}$3MK_-j|JIV~c+YClo6Z=5d&|51lK6V$ z-pnS=940H4$-RMBvGE8l!@|_@$f7BlwP8^)?X`i%Ujbmzg~P~XEJHWPoYqSbNlTOa zMY$QAQfx*#P7c+uNkX4AVH|rRmT>A7u@SLCN)?vjHqNLnP)6ZXsN1ne-c zO4>}@ma12!9_2bLD<4G)L5iZSvHOKuCe8Hqnd;|a#weiJrf zqzDLLsd^*RQ^-IfN5UATNdXfpX7MW>@A$=7jxhuLiisQifKgFg{syJW=Qm0DQb%4< zAOc(o`;UGec_Cp>QgvI^Y?rF2QFJkYvT4%{+bjd1O&|8CVgQi@qq(u`5VAvjCnmW4jY^8-bUoUo06Dl0ZsG zjw zK|pd1O8r$NFgJK0tq&D_JS5E;w$gecAzzM3M9hptwb6AofN-@4`~vDL2)`qeGZGb2 zz}QS!GG{x6DUTzZOrDl-jsu*8w~$C&gZnz!v|f8<;@*_He+`#tINgx3tPE*asd~8X zExNMa?dpmR8Gss$^ehUz=w=uBm=koGm@TLGDdXjp;*lWFR<7>vOb=XxYivWGI*0h>ODTr6YcnW z@5ScpZbYND+cHwjLpoiglP;VtqP@ud`2*3&@3*~r^!YW1+s{W%CkY<+XYXm(kKKpw z9{sI5u$umo(dRV;GKad)?%{Baz_Ma>Y{mE8nzo7szZKv0>sFe$Ta)d6XO!q;F@bVG z>I-!50N6%;n{2s8m{>$diQUp^eC5^-&*~6-V7a;tc_0}(E=S68T79RCNIEBG`1_M{yXkQ^}k^KqX;xtUn8pNTN7Xdyn{O} zg^oz^s6H%x(uPF#AK14zJ)bZaDa@=Bq^Fk;kRNQuwpUmHw@c9;t`n60e*lO3wUZ`M zWDKn1uEZc60u|h+uh)U@FZ0)INk7`f7aHc%f)*sE4pSz{?;gIE+m_t7-l{W49evtf zK&1P~wMqT`&r7~)DVMwkV0Uifx3=mx4SD;{O|soeWJ(i=QGUQ z^}^hK62)H*)2L=m`39jFPntGsJ;R$XtnOfQul;DJRV=bKEWc^SN{M0sFDXeZmF0}9 zTME8R6v_|3?i5b0!^8&e5wh+^%5P|SC;e~Bcc?J(hHBiu++;JyE0P*K(d`l;7#6Ml zGhu)Snt>TfaP7+Sfsuc`Jun-A zEkLH$ckoE);PA2z4zKJ$`N};runs=^PnItdy>cb|aADiET7v6IW6PQAoL!7tK)6vt z==WxQ!qpd>{`Wjd#IUk|S@=BjvHsuvq%f=P?u`#=Mfu7rD8sr&0~PU+?a6Q~inSYEr=QEIGv-W4xve2z;(FeVaIR^ znQ{b9kKS`+PH(oS|NSgIVU&z>YAPX0CouS~C#O^SVE2KRBTGGtjpG+aUt`V~ylt6T zXJcL}ze_$o;{yc(^5qf%w)2H7RD<9}j83LM*x0FKlM`JfB{-w+X*{E~>%@<$Z& z^mCS^FZ}ePf#`#TG27Es> z|2yEw(1NyQ^B6lr3)}LVUmgW54esGS%TT{UQVhf&2I3F$hf7Y?hbk*o+i9oLI#SnK zs|3E?X{QmGWc2JsA6%LEbk_xEc-rmlsnXc^2JKccEDv@T=UcIqEZehi*@cJ)>Qb9pRlgcY*6rGlnRzcFn27ibv+NEKdntYfn+6c1)au3j%F^hjqncoIBZ@^@4`O%;5Od6E6whGXCOZl?s2>{sfe1W#>Q zP)91Mb#1*i5aE5xc(xG7y%&LGAKk^SpVOy4eh2G=A`q0M@uc*S7zLk?rk0?Kz8_K; z84_K&IBqbV6#}z_9%!No#&+4Cbb~;|itiJ{q>PUCV{ECaNl`!h5>98r3)Dx6HOGQ} z=uE!x5OO9XPX$#^HGsk_)By^@QJBAB1XouK0q$UB{*lpN35?`2wsex#IZ4kJZ!l1N zXf5@Kuw@3dkxh|0lGuuG2@MMRkv4p@(mkyw-|`XKg66Ywl_?oHq>*L6uu7E)KY!KK zM){wPui6x6JOym1w`!Hmqg76?J*o|juy}kcq7GeuqV>0k-%w@;idef8;E;{wC|R`^ z&Ym6%kmA@?=8j!u>#?hxeC#UQj$P#m$F9P`>0=E#Ao*w$G=J!1XIc`|F8K2{a znQG|^s1Uxwe&z8gmn&=a!TMMmU2K^t8Wgsp=Z3%~WvsFx^V}3cT68f6mmYAWbpoQb{RB-MkX)7NM+E3i}nuG@}SXWX{UqRaLHih-TP>B2Fno-MfP-j&Z^LoIXpQd1PRMo^3$G) zRJi^xBR!f?;ciZ#3=kipAF4y7$Za=mE1Hvu62yeoqckY;K~#r2eL0HS^5%3sp9WZl zqij~UAk&bU=2)3}f%(T_{*>sK;RsFSgS3+-@`3K=jvVOT{(3DvTR)L|<9->rxi{AU)ATYcs)n_OvAbLTMq8V=+X@u!@vf{ABk*!C%L+bb>}U0wDsA;%|PbDTX^)V4isXr(44s>?ubX@ z7lqHK1_8S@IX}z@^Wdc_4SOM~6o|FhLX0A|;OdCOh@8VGMbY9Jk^STJhb0yxPa@;w zNq^*t)ar2hxbR`dG=jY?{~P5P&@d1KZ87-X#0R0w!=vURaexFI3T8q`EDGpC(;!S6 zXkhMeZqgVa8h~7q_`j67g=?4idFuA?BXxgtF*^*k*g(Z=qDZMggcDtezRCiliuWh` zyLY?dH;L0!x9{FXlTzTey{~QV-zWsW)e!q(9T>#hOC7BSWQb1WcyM6EZ2c@(5keeB ziqy4ex^VJQ7uuPB-FCTpXxG`*UN3E}CH-r!*Fub@j?4vjS~-%iB7$8SCIWT>sA`23r&;JA9Dat#{(3W1kliNKN(;Pb z<>Fdxs3QMkQCvMx&{z*NP@D#;Ho`E|YM3wp(G)98jG{$T?Wp0^XiA);rm0{cFt!`F zH1b;Sf8jEfGkf_U?d=@+?8J&&8mq9wnvyBTw-Vc;maQQF@px%j{Nns8U1EBO%3=S% z6`vi0MK=m-({E1{F);>Rvw-)dm0pbk|M+xID)n;=O+-35NXUP}r?S$Zahg_m@)F0rq)y@0Nq($tl!uZzNH$JA9hSN=fv?Kp0pqK5;({yp%1)zajn*bZ$`V5S3 zaS>mJTKmz+gkR!rCYSyskt9Ouu3~Dj6#6qgwtd( zbAjf@Ix`s=PmM=Wlq5-v6woA3?h;ZJdzLSjnt8rMZsZ7t82qC(n#NtN?!r@hC$pDU z3d=RaX|67w^x*nE^$g1~nBE{?v$v5@84b$}gXM8r>+GuISyB;`R+%$mi%aFSr^!j? zdkVm;Y|?{CduG)uXTZ}McG>HSwTskPvhg#H8D2P!@+qw|Ca;)L06jUVkJ&`Yd`FF^sR`M%g5L ze63t_si7@JT8gU3cr?j1Q6z(Dn*C9&GRNY!h=PCiR&N3<9*Iaj5a%2+@|Sb?NDPPY z&i`e6sI6T4qDLIJypey#GDX0o^Q+t9OVR*<@>l6sgk5piVF-osv$^cH1suHntiTY<{HNa$hrx*xY++ z?BlVF?o}jDni33ajoFcFpbL%pBiG8UtTO;i0tXV9qOOfc_KAP|w?=ycmg>D42r9}T z&7fNf(CF=#KL4Y!Ys%l@x0&mtA$ zcCmZFAGfjS5y)i$I2ahY*AzekZxrjl@imG2ddEHdK#TRO>>EwlQrJr|H+DWtq~QtD zEXoYq`m?>ZW^RV`YCMngy*(pLR0~S&s>IK}T#D6gF&C4X1`@k35LdzxIyPFQ+Y%Mm ziSLHeNuU7*kucQUz3D?JD-cZezB>@c=YI7Z<^?|alxU5!Q0qDr$e%>spEtw``-@xq4V3 zMu~}J-d$^XF_|t;V|L9+{T=bCq=)!%KVvhbRAGEmKsBZ+!Jfa8S>aWoh5am})dJ%t zgmNmt`5ZjW;VYM|pvY)lJeGPz2Y9XRdoN$__U%*XT>g6KNT!11B_95x{e?hLCXJ&i zWv6xqvJ^ut5M=&&IGOa#e;q$_5*Z|FhpDnWS+F*m!jAK7^&bW0vL-o%QU2gYH$#k< zJFKul7g=5wJ@(E#MFa}eYs~ZzL+O^hwgf|53&GD2IlWo1v+T!q$Pqs-(Q1ACCdUk3 zyU7kq2&(*(8_UT3rjF;3VNUU`+%is0n%m6B=IuOXw{Ig5WSz5R0_1#=yZajtzRxc2 zpu#28O7N*62&+a(&&UPvMfA&v4IOsJ1B-d;L^-VfOH9+s8Mvk0k{FijvzpOnY%K1+ z>zR(t1`mwdeeUX4ycG8@{w{|np25109~PLZp!F^eDw|rz4Kxl(4UZJ}>O)w6H%}<8 z))wA$Jt3spvxR3>XC_!=UFH%ZsP-`0_cj@UY7Vid>puT4;j(o`ykRJ+nVO6{N!soA z24jOkG(I3djE+u62r6seBgai6i@(5P517IPuW$0A+Jqg9n0yAbp;e6uK(ON1Cm-Zw7<{&zsmQb=s! zkQDk*34;zLNA08c*!nouII59#{A4v_wYdueHFbr1{U``-uZhqcldiV!T9Q`@%*gI&A^3W}6av zfy|Wow5sii)+Ujms&-T2e+DA!h_d|rMjEXII*!|BVmv(ydcw$e7%bBG1WP?cugrMj z>^KOQ3 z%nIK&$je~gHuDWu?*8suz>z;>ye~}P<}zU{g&)?2Qe)ief1riz&@lZkj?w7XsoDW8 z11t<_v9AS(Gb6&&5Dk+c%V3&Q4D*28{$^bx22pMvR9Jmn6*nVJ<{6-=r5Z8p9M0?g zGXrt;)Lq4SUh}u)2m9(t8&wp$;e?36|4)YhH*tI)_G#XSHOdvJHvMr>-w2ECAjZ38 zHP4$ISnKqqL71E2DKzHaku*-lhS_Aqdbm|q_p*;LkR7dCAl`~(IF`=yE>6y2WWxb0 zw!2@6b{I4pW&g0tZpMWogbXJI5QnmJ>yI_&{+9Ei9}I77BHJ8fru%V-#C5-cL&N=s zB0qSq)Byxuai!cGyvCmSM&hS9{B-_Byj092`@-KUk~cIu0-&$y%tdnH7TlO8AsGM}aHt?~+) zpN1dzOYtl~M&y3*8~n!51RW;Q4q_08ZB#MS`O5~wDZ_O23dfe+cXw$HP=k3xKE~z^ zcYR^6K$93NDd&t3$D~058_OY(#1g3_I{XEImP4x70Nz^#a2*Ay0e`mrFufOGo&iKGzG820GvAKKS_`g)mtCGPx*$qNDOkfBsjut3&1OPQs;&E3y9gpuM5 zFmi4)uM)$`u7m}Zai9adb z7h^l&^VZm)#G+H{$%{OhYX6)P5%8b1m?F8Dcwn#!mxK>%@oG6%T6RQ+3;VI3Gf02y zp68RNDjsZVbnh_L+B+CWoUVBrE$Bzx0_#u>Opi7&J=(yjcBh*$5JNg=wv@R>9PJfv z_xmgo;=c7AVT1bDxB0R=T4k$vE#b@(Co9!7q>1rZ$xS#8+hR`Onm_@c?#>wr5*gnO zWAHagkB%E>qOUMPf_srqcLnOl6$44PE4bfKq@n!59T*>+kPd@d|y#u;`YlgTi5@y!Z+#d2Fhh*s9m# zBYQPit6F-z?d#Yil~iyv%vY=#+(>Bq=l0eYEn&Wl_F^cEX3MGFA(f9Ez z6`jj2!F=ZLAJL$8n1u(HMdS)HmP+C<7`rfEWoKZa8*K~932nLlWkpAA9i9l2 zSlD|VyBzQ3j>7WA?7;m^u;AETJG1gxsP&xr-BqnubI@)@6QSCMP)*Q^xtl9IcK`UY zE?+gUsA}bhFKb$P(eFO(_uloKr#66GZ4Wyy3av&_w}{U8q6U8-_YIYw1tMj4=3#l1J7Q zA0BPNt;m58{PF8%2}VJ*AYwB%nRY^E4O52eB;9mm(YhwsHu4s`|GwEaz*H;)8?L9= zti{1Pg@G_sF+-3{aq>=C$Uu=~vUnN5>Ny45kbV)Dnu*FtDRw@`^w7?uQ|imihWVci z!URYJ$@QJ(w58(6N+{T96UFrx#$l~#{Xx5Zv0nlX#N4r*8DNMgVU<;_F#5siOwBq((gU8`rM?BW7AQ%c zC_6Bo4fqPgJVTH`}$)G1blTq4fsE$XQ%=Wqi7)v<( z&T$T1Gb!!;GDa!nC~q8}x}p7{Tkw4W(Eixnx5b-rW6t)CNx}63oB2j>@4A!O8Rgdu zI!0Bj7WG2xkoG~0oC?ecGm&3QP^LZgmtwJHWi#}~!6s_pr(tqVwkqi7l#tmav8@_L zlE)`~1p)GnI?G>%2QyVJX4nz~+t6k}=PLp_-`_z0S1^GaTKR^)IhC7zSRfC%Sxt&mj5niI>*sRa%$hl6pLO)$s-O4hK*DIVTQEnaV<_r9LAw!~hUQ#>0d1Vgr&5KiUv^XriDOjJn2l+TXvRid7 z#e*$_f!K~7JGO}iFjpn1B@oIJwJqV~kAx6_z)S(Z_<%k0zx|FLa`YegheR0IUoIlz|+1QBYkR~E`=b(kGs>5FP^=s$A-CT z4j2)gj~DvHM0P4IVz=so>70Y#pziUQ?ZY%Z8y$+Z=I5J|+U~&HGlgR5KEEJpT08UFp1T=TDb;=cad6OWah^u(L~HrD%PBak%{y) zMmbx?&Y2bdun@UEN61#IhPeabVAX7FwA}T=vC{@cT8RIxl?BA@hZUEXzTwdV0et); z9x0!X+|?%;PA*0nYF4>TODgaa!K)FF%3QzAu_Xa6I*PTT&m>O(aA_i}E<@7ixd`PR zN-;~Fn)l!5JN$cY)cU^XF%J)td}sO+?d(ZUA|@k-DE(A?Oy~TOj!NKQyb*oKB)!fH zion$iPDxg-N`y!Y&!{B3{g&9TQ8TI)(Z^K-7-@~E>-4M51Fo@x3bE9`alrB_#_Kn3 zrowpLyxVN~OvRos0cgp0xs*-|(Bv@@m!5xvl*cEzIC5(pCaH53Oany%Z7+(XqX9Gz&s9+=WtQ)>$m$2%Ac>fieYvM9SN z5~ZGD4QXxPtyLY0it%P_@IUDt9!w2^nHT+)9kRAdFX!FOQdk)HC6jLs%#0>+5B)~<=~vC;1cbtXdA0VOJ08olVn7W_j1(0?!US%T6g z!7^W@Bxd^J^Ab+-OBl31Fxg^HhffjGr0GI-MP{n*@Y%Ixc!>y7ZW`-^I|>v?`1M8ls%{Dn)sao#)SCF&d~NwJo#^Chte7TL>w6S_-c8A_{w20 z;nZ~S*#uEu0noRdF`yaW;Z6wgixtP$kr0wcoGPD=_N`Tk;@?xib_G zlYl(bd_x%&z$o9!POzg~JDOs^=+cR&I87Ck%aq+aHB2%o0H880V;Xp{wXD?Iy_HC*~wTK*Ze>27x4&&?kYR zKF>xl_26q>!Ft`kj=SY$2}h^g%YG0Nn7!{4zU(hrW%s<>mtB>(SN?{VRNvm~i~cfl z|M;P>Z)kXi-sGr)%iOZ5+G4?{r-8I2@0=}7L zFWTV@a5H3+Aqu`m!1;DX_SqR;{f2IIT|@n<&cg+LB=9K7b<;=uZ;2>GwXcLu#6q_k zEl!P4@pZ*a1cFv6{6Y!IA-Wofz=hav0yh*Pm?Z#AtNlwhm>T~VVz(1OF5G?ii0C{M+W?VrNCcIvm`Yg$Ge)k4!W%->OZ!FgaJJ?}&K~a6jZm(mDYu^Eq z*l&989~ud3ZNmK8i=>Ja7P=LBiHJ+C zziJ9_I`j!Q=7W2})>>o|VVMLd<%^4NE@wuq{4*^pKQq5m_4@FZHM?#s*Ns+P*RCoB zS!vM5&gPxtinUZ6wcO|CQ&lm=u-R zsX}dxW%ULiF8~X2@G8)fOv&ULG-s{kedHF{<@>raa{(Y)&xTTYTDb8#g#>u03@iC- zVNpDrVP&(dnwPBaUjD`y>8B5CgeIwr-RsOrOTx-`N|dw1%n*DxQsKB{W_5r%bqht+ zD#^fPW=j|(V^yox3;9FNo|L`{FCaLKJ*}PGq)W;&U{4`zluabAXcn_rp>R+pj3c5X z$Akul8*C!WaRt;LU-U$*2u1x`#}c2%;|@~hEL9$uR9M|QJRUi?V)~C)NuT>V#10C@ z^^->wSQiIDGGOQ_N_K}lSE&AR`q+l_6ap76BpHf#auWjUze?&mb#=7KZmTX%`v+SwAxlV0LKM#nzmKv+h^Ga@N9_0b7)jDMTe23#h?M%13Ut*peL4&7uOTozh>9- zj{$M=*dV6&4aM<>8%>EY$T0-LRMLl_2G02*dS%bL6=l_EwV{>kfYZ<1`F@tpD097a z&LuDhKA&AqYtodZlmeR=2H=NytWi8hybJ5ahFt~U{5Q@B9F(2Y-7_Kj661Y@*u6K_`vhLRFHFS3NhuKB8|%PT-d0} zLGO%UwezOO!Mr8^@Ti><6^e~XHmzPuItIbwb4YGo)W|EODC3R;>r_%Qf0aa{1eLMo zuC7Hw{Z(EaVrQilv`oHD7^#+vBGuauVQsZZ*nN&jhA*&f{w#X-le`*!cPKj86y1jT zNwwbAabNjrP~hMDWn$$iyQ5Y1>Nj;A8b#=id(3?*qYqCfy%+UlG{%cC@G7fU?rhg2 z>i~*oF%iz=nkjPv85s8VGNF{yGC>l_xE-ZM8x+Z4s1=1pfe0B7L{XhuJ(OI_y#Cdc zY4(~bzsLS&c@-;DOFiQ{Wyj9tlG&h`5EWd&8sQyFc|#S-h{H8`m0WCne=C(>5 zo0gU}&1A|6aU1DHg}D0?_o`nvlrwfId+uX@)v+feN&oB(9?juVp}fBImg|P2$o{Ps zbf5cre%NJiv}&)VrD`vrCd06f-YOadRc*BW#iLinBF*jSi~Q3(8v(me^*$yC zRY!wdJo+d-=mGGfSM><#7URcga@qLUz1zCQ@W*~uj-_VA7m80zD(gN9iXQpp3?llA z7?G4&uqcVzjEc!qqB;8%Eu|K2g0 zJOVj05+?cor)SaX|Izg92|188;z^2qnnR0)#BW_%#!C|c#fyxQ3xnD-c?{*8l< zU4utVq1b#Ml?NNaIkS6Zx+JK`c)u@v`t06aDxL79oT_V8?UZI}B>0K`NKd|Z*HX7; zty%WXm`efut#<|XWqK;gKH=sV6?D#WEUY|&U~L6*w3fc>_oa_fR9%i4MbFimwv*^- zQ%ME=7OQ)%;-B;y{<{tu1j@WZxle8w>a$Sd+ zNyQc}hYRUD-}9Q(S2$Dj8ZYASjQufJPBX?{H*yEbH@GrFsgZlMOs#Ll z4P@tz?2(`hF=p9x1z$_{$vDpH(crZSfQ!(R8hc|JBWqI$#AHSrjx!up#;B|T%6u>9 z110fgW&Cuaf5Gh~kTUxZDw=~@6$kp$J*Uh#-_LdrC0KC_(6s)0`Yaz@-EuDO$<&WL z0OZY(F{`#Omxp%q(U3n_!G#~zy$wy5pJa+Lt?(0p7oh^MIIr8FLTP;n9t66WXMU=z zA?nBZ+XorAVPBNZuq4$5AH3jkmc2esx;ta}UGaEFoY;QrE4q$7RM>hDxXk7wK;SG^ zi@Xcze4rS@UJPRx=+R&z`Rdswsh{rY#Vekq(YX7r=80&YaY3r!P=tzu&?ehR!{Kwv zKWC?DWv|cvBu&P4rlb+o!0x_4B6Gjk8&sLWRr0SR=epO)E=^YiAw-F08 zd)~dpgtkzr)->>Xlr~9EsAXO%Q?6mjm;H}^G_uSXMzi;z-u-~39mPr*m z(WI6L8=KSRF5ut)`=s=KBwp+1{*(qSVL^vh&+yeA-Z|V@ef`OBw)uK|^>ycP1Iw-Y z^^;-yL6HvQ>d9zB%siYAWz?&VLxKoTN}m-_hBYsIJA9fHU=GTn^bAkX$N57}&z_V% zXSl`4v)EK@UMve)qAd#mKX;WR`_j)-w-+ZATZ$7~)Y@*g7El zqEVLdev0Gb_^Q}Qm*V>=?iRDliyuwk&B5%DxP=s-U;XPUepSiCl43*ksyf;uy@t>P zW$QVNP}VAUw^KiHhq;8~fx$3xuloG@QzCevd}FYH+fz6M9;iJjgX435%GmhamojQT z?@xyt+#{DuZdN?4tJ|k&@*#k%x}Te0EM~ELYp91PuLi2}jlTSJDG&U6opQMy1kRBH zE-xm-&7*8#-2p%qzpJ#Uxp`~)eqITKr9_SH*E?5Uu0ihi@3@a0(CKBthtEWTMk#!a ziDX_l_NG9JJ$&M|F~<~9USfJsqyq2s4a0%!+qVs9I< zU>4N-0}l#a3w7^!d`vtLdnKmhzEpS4edhSiHu(8D%-7?6i?dHo9|AeW#wVwTaLb1l z4{_N76W|`TY4`ZdU>HU&I7(Z5h|mL{yRrUH|rLHATCW{vf7nj7}`eyDF0;Zu{Q^9>r1NT65VEUGU zPFt8fI7#7=;hWP*-&LAhsNh<#<_xa!(dOjembDv0E~;N(_g=L!^O7l6%(nIeKIa8$ zhNj%^W49^SPDqnu(~P@ao)6740vKgMn=j4Za2?alb%%6;f0hXTVvUqc9e7=5gQ<}V zi{JXBlhxT^IG0_pds?OZ;0u9>WQ zQ0I&a>eLxNQD?c<7~w%7g~9fZg_If_YzC8$fy7ewe)07 zOHxdO=O?EJr92%SL7J0*84Y0BwCFw*SeVU_03kbvEg4K4eoj_J3wr~|XQtr4r_bVF z=ZxZZf=+^u29oQPeNin5Dww?Gz8JeDVgmG{bD+3htKpznUc-^=+m#8%Y5R?|NsaYe z8>UrW#GOQS9lLJAErvQomHWo-l?Wk+&HifJ6B^s^<%p##F=0Ssgj=T zda6$$`=0zMWXstA$;kjQKiUi-2Wo}5guXW;_zf^8>HP}th)&lahM;0XB>3VtR=OV* zQdo7<6x5n%-uybO-=f4*ZMzp`VV*{4r0G13>5?hGLoK z!2V*Lxe*z~8t`Bo;h&v>#5WrRYew zSXQ%*i#6V*IxftNvm3Q%+NcMCqm4NzgFXvJiGsttdEO8eGx?WvLP+W@Ju3mP@F|T- z^i^);t0y^~u(F~$o}%7u&F`FF)FviS-pDq;p+*d>l_GzDp0sc1UreGw-mEq_l*gEA zHfGu+9iz4R6|Lo=wF(YvZMZ=asEZIZTaxTE7)Rya;G11Q9TjZ45UR)LhX!bo%FPp^ zCOH7e`ar=D>a0>go474jA{w?vs^%;y$A7fB2D%BKNBKVn9XV~nV1Fjib?W9upxf|M z;to4|4V?v3M(i`$DTn4X5m;%&6}0R%2^=?RPl_T1q_J~oL#q0ik^Y1dpA}Q~H%Dzx z=9ww!UPk6x@_`Evu_6p(=-w6!s|Q|>zE4fma#%l>kAe=qaEsJ0T!`>$Q;5tkqC=x~ zH6l;kUs^S9Q&tjNPD3CbOaoy<0{o0cP?$Eze&P!Q8D%g^)A*rOkq?s?(|_=`#C`si ziFGc6U=|cJ0e!f9gnEQq($#(UdD)VoUpf%N9hZoXqBl7;s%YxX5MG z5p{l(tx(da&s}f8h1`hQU=lEZRV{Mno){LLD|yQk4Y*qp_bGoi^z2AuLP4C<{)n&W zU)5I&?NCv8l;>X=sLG7Z3|}_*FFekECy7bfhi5@P58J`+!t-&?op;~x51;#=zj-0M z_3-_k3%J4;GjJ+5gxngc+&^;VY^3R9)gEd3Sa4+77k?$4C2-knw%1^bvqM!PH&1f; zkBG7KJ3O5N_v!VRD*h3|u359g;oR3p2*uqWku9Y&pTDy^oRJ~&b#F-WkHkYFDk`4` zfst(4sikGZH)v{@NS3RL&Z&luiR~pqHg(_CRSW3Esr$Q#L_E5=_FH^`ASQd#%2N0D z(T=IHxXV9MuVrqn&u|1Z9R#*hyyPV^8M4n)x9n~b>(l4*;dIFpldo~^M2?3;sBew( z*OB3-(rtK-J^zWx;kt^?hb}Xc)E}t^!1;}P*zs6`{3yR;P$GSE_RPV=lwe{C9T1jq z*8t|b@_!Khtw~9Cc`fN;ObJL6{QyBXTCzl^JjSVrH-&o{;acRP-d=)I)06 zLn+<+YG9o8bzMHL)_!1>R4S8?9s3f!ZlvG>TVByW_n<~z{ zMzdC|XI?4_$dyuu@U<}eU~fIxD|^g_ysoelo4ZlGZN&g9wz~px_8<~9AYRxDIrFDP zthQ(vK|Yku6?SZ{L{*tH$k{?;nSy^6=~=Tyw zC>4$$%5p4Iq|_SCov33wInO7f(1fMfjNGX$3)7#z?xS-u^s@`5w8X#!NSicM3Oi?! z^D$EnSn%GmtI%zpDjJjA1z3QI^2qn1F;iOyJ!L<`;LCA}tI}bq&xLe21d)xWdbp)h z1fyY5^bEx%Hp=1f#AM!N0^amg`5R^wLB)69r+z4OPTj+e*eDCQiTs`HhAeq^kI7+z zHAkgQ=SGc#)MKzY+j!wyVopr0ZQ1jOLkdly<R>8Nt)-`v$U#^1ax7J zi)_b|nD7A{O+&Q8d9{&N^!vo3SlJ4}ZE6L(ByDnP8^GdAF-IQ{TNuuP@C|%{X$-RN#Ah+g^Gg_SbO7dA*wkBhkI>mgCf+nH6w z&kh}e(9WJiCQ1dtLQR;@D4j15^8nc2!5>aMnS6y;*u7V1pytOHC(#=^u4KIAYygt= z1Dk+di%z@??xh3^po|UBYmlaE70Lk?xw(CfUBTJ0OWP%A*XR+pl|9WPJQyZ}btRe_ zzFFd&?apG;@M5Tf`gi&3I_}mh5=W-zoBu2XbMjSqk(BtSA9viRu8Z9#xIBZjMLN-4 zNC9Wmh;~Jp&B{*H;X{e4VdY;Wu3V$zA_0vr%WodIeIr)#E~rNph>#+IMfX4;B^;0N zMiOZzuA`Hbsboe{A`0LM)UXY;l-L>6FtHWS(!}qy2Dgd(vF*^71B9Kd57>nd7BYF# zv5h{ghjwYu^e(8wGbF!vv0^qK_)5MKO z$zI+SAf7wr`|ucxy?{xdlcos!2UK$Gd_NtsxY=L@vb^=---j#@V+&u&D8B6c(qq7v zf6e2|-qC)^Tb4ZXR>haG?HXT9+)E)FhV4Wp zrXlKIXfLxo7`YgdvGpCL*dy{-Yj+~7U2}Eh@8w2uP@zvn*5>a+qwyv74Pu_*0=2tU z%6BHif492t5AVKTcDa6~__4GnyY4$*X1Uu2qm0cb+d2Je_EC%RlhQ*ms>~a4-LmTl z-bT4@eKk7iRGcGq`y&R>aR(7h;+YtXEz<>+CJMAs4mX;=b_+=LK3us`y$@H(xAFg( z4;QH+!t2O;dVkC(LTA6AkPnyh=N<|WCfkG-0BA}zUh*#qZ^yOcB(_wM4nG-|&DUY| zb?2}k7iRVAC&Tsw&@@&(*@=!7VlQYY)fF*gQjn#@vZ##dth~EnAqKt#4U+^V5rIQ? zLN)4GvPGyV3f8~Cj#^3*%A4jH1?fGqGeCbu$+uc<)?9Gz_!14szK4EcqLJQK2$Pb&TeVQpI4##Hf_IySJ zfNRsNIwkuxA~DKh=tDAwwn-x-V@pv`!WS8WlJjhFn^?v?vO^p~s~^_Dg9aTC3dym+ z&R$+JMlpgBwA_97&v&RG_lT3r^WWb*bDR^qKIW;!vIO}e025O9Po zv#cBlDjSY4Gt%5Et!^5pT3yfUjQc~qUgqA_=9tk6j)`;JIOambF;Pq#jwwFrIp&Fc z^BnVWfn%0z3M9MOB8X?Q0{@T?X!3<%PjM$5o%}NFRU8vmiD)d!Vy;@2kJA?|OIwXv zmM8dS8JKJ0Icvu~gny$941|aw>(d>gaJa0nsP?2*>p6f_v}-&I;O_q?lM)^{*tRqV zKM(B1+2iqFnu^noi_Cm0-@q>xRK$5s~2;43Xix=^Q7oh*oxJc z28@yHEHn&EOL>{7-U+Cqd?0vGhE9SzKhE=GzG?gF%Sy`px49w~AD2r4hKy26|8Rx$ zqLSbZ%5Cc+Q*3O88*WEL(=Tx?OATgE)6H0|QgbR^CQXM)5Ch*!e=8Z8m_Ebvj11Yh zwPrfSTu~Z_Khe0cXKKE^hPNNF;a$e|Y1wnMuu~6mL+rdS>d_9&G7Oq5CcQ(ru~~Wf zs+>A5AwDZG?mi=6IL5ep3TW9O-4FgP;Up_hJ@BpuuAS-E?8>RVR9-oF?owGM*DBdl zb8+8JYrscqa90sp92IC@SPoB=ZpNSy4Ggc0yaK|S^Fu9vPAO|#kN}0SpCG%F=_7FOx)qydJ- z>WN>ic6HPlJVN!AR{e(ei4}NXvC!3^Nt zR6aKw;Y66-xic`>0YW^2%v)#}uil7BzK)>y@yCr1dnuNgd+Fv*I<^zHj3UzEXsII7 z-v}W{{dQkk>V zhA1{(_FEVCp*Mut2C8j3Ai&9)*zI(Y7z9=tgQ|?rnJxJG^x5q9@6?VZF>szz~p`LzBkYy+u3{LB!*6vYZ|*OR4CK75m!A? z9pwzB>keE)YXczK#tW9i3fiM4i_E_kp6X?YPA?k)dCSKU=*+)gcT~O8B4A$6Zi>MV z>x&Z~>71l?LMcPwE1W=HU7=MWa|*5p(;FnM@##wgRj8g|U?bbMnHk||=BjtGLgLic z{oQyC>Ovzc<0Kecz++p(Y;IV1Ze-9X&bSSYWF?UKHuKR(0#452h1bSrExb8(pRAHu z-hViKfeiJo%eaP?pRSSEjLjZUBP0AdE5DSD3SmRh?&2l%99VB(5Cc5rP*UpxL$ktH>I`n6F0IhJ{APt9K+0wpo<9bvrpFb2@UUXlf9n%uqA0v_q%Yko=$#^C+(s^dxnx@BE1Dn>`Slt@+ zgyW`wwZ*8dHPmlXhE$E#EpHg544A8R2fPykbZ3rr1pbG{F z0Tu=*(U;BGO7+=ZwP-)Gch;*GgdY(Dp|uqlsOL+V5(b)r1_S1m^x)a(1zs3E+Kd5L z({TfhAa8>QaF)=oH9^P3Wdn^MZ-Zwf?5=-U1P7IW>J2dypM*xQO49zVnfXVdv!qzd+aWC4WtKA%LU-X@9;4h z3Reue=0iuK?^+z#s8jrG5D;1DkO~qEa4RnuOd?VT)!M#V96isF7kcoqMwpFDmL2kTKnd_qmU) zrzKs1_t}!|>sPm`qq4<>!gte_9}pVPR8JLCmF_Z;Oi>ckV>|Q|)8j!3kH!QiF#~CA zk>GQ$=wL$#2AsAb#1~rpwZPIkQ{}>tW zIcM*+*Iw(le(&FJ{gw$=)ipxNRCd-#0t`!4JFaUFI@+#^?G4bAptWy5PW@EVaS>*@ zWf>xABHqkzTq1~+atCo@S-hGgGF}kvX~UVD6bk90+Hw=MHPvGratS%*xPJKDTXCoC z;X(P;_e#yhj7e9@KYar^g&t8rboZ)eFm;~FwJW398C-d`v(?Xq&UioGG50W-47MIr zYa>YXmJU`kalM@VF`&^*EilP9%~9HK1e7e8#LU>fY4ahL!ECGsuMU!IRbw<&j&~|{ zDei}dPR=0uU?hI{{FHK_q{NUT*+I5jHO_SikwvE1O;YnnOuD5~@fBxB_0b0f0DxC| zn6mKp#B%oO0k7YEgh)Qp8|83^>{VH{!{^Y2W%kt%YfDm{y?4Vw#lZ6P5F4z~XeKva zvV>JL9R3sDO>TW`a+t)zg$^B?Jy|IZ!|zw7aj3^4j$3CK)Y43F$9_d|9u z`6wc9R6e)Ilu*_aDFF=mHwifAD*Y)hJ_ZOvw-3mSzwvMo7JKogNPlYHY}pk^bZ?nl z#b$hY7r@DuQ2^a44FDk|y8}gaSU!H2!|=Oo9K6e6_=7a=kUYX!u9RQq{Ytz8{EEM# zv@L5PmbDPeXwCF)=>ZO9iaqN~LY-ur9QLiA9mTm2XlUP+m{QFOEs?#q^7?fZCtJn_ zW#r4~YI>1$ZsChyQca$@it0ZzkU4Ho01n5xyrbIJyh>lVD}f(=$uuA`>z7^7?mb&i zXL%%aF!cgJ&kS_>@mXgeJ^$=;AR6p*u>4590??uUG2CQHi|pUHM5gF7_nC@YN z<};lR0Z~_JIF@a;Y~c1~tdL~*vr)35_ksSPZdlKR^^6Yc$O|X}1lV6#$4(KnH1xur zU57HvuYoY1)iD(tpxoca9I&3+*80e{)>m9W(0~b;djUTKwyE(8(Ao$FTRi)NfzXD- zI$T8XTS0SnC2>J{0({lpi;e_df&;;v5h8XS4F`GaTsXE){f_QVJaytq8@y%j%uDk6 z9k@v3<)9NJuD?tdKwrHH`test*22BY)2g{Qe03Xk)w(5F(SH>O#6r>Ai|!$DJ$*wa zB45P)2Zy;v>4QTD`P)D2Cy>}u0Eyoh%jGgRDUNl>Zo*1pRueYE?W2BQ#Kc}hKJ-#a zLz8rQVJBmY#d_|9z7;&p2UfJOu_JB<+oZn^mxM(Xe`A`;!BArrTS5Bb=OX)=8ar?t zUB$3Y?Ks}NbG6(|T=4TcxH-}g)q(YnW*_h) zc=ddb9cK2Ny}zqBillfMHE$qC8_HE0-PNkULlT)Z1s?<69StdnT}DL0DI-%u9#x0@ zOzk-Us0=<~r_xxjRu?ExG`^XJt*iW%H&v4dBnfNL(h^w9NYB7d?5XM*b$+v+5$FX3 zdiG~nb1j?3DbnL9GA%Vu4d^OO#Cx?TN#C5@vU+5UzxEcgK1@sC*0ds3M?%gU64odP zLIjNKXqHCvdkcAB0jW|XWoq^;)Yo{{@J2I(QUVCLDCn}5z6>|tBxw4bumS>(+6XAs3LvlLlZl2G(IJQ6(eo1=uqlcC zgS33@!(M=%Tgl7I@e`)X4qGhG@YTa){#e`Uql-J5k{;8FR3c6$YS)R0 zV$xUD>T8wX5eEW{MK^>;Ea1u|q9@gUY!95u=~z&+l1xw5J8YxBo>_p9Vig27qU>XX z^4)Rv+dEO}*`R|TBKx@HFDJp`f}v;~7yeQg$S)`sl-EgD`XFkqyQBhglg-=NCul|0 z2%YE1mCw@sWPswDld*|$&JGJCv|+(X3AZpRdJjV(7!Uj#Lm_-!%r}N|+=l{o@?v7z zVJLVh8H%D*o`pqvO^K(R|FWesKlaghYq z^oX}Gm?Sep7c@D*4&-dQiHB)I6Q$DD_%WC=+Lx4LB31p0j4)?vAG_7AHfxC4I-`%wgjLg4}wp31r$1~knjtX?=l zMf6IJL(nUVUR_dX9r}F?Kmjh2rmeR}Xa|cFU#Us6JjF%)!Qw0n)#L01(NQ?YTe9k6 z;4S20&DHg2aD#>0q>_hku=NXhvzSPn55vVIpAX-Nv4(GenqoCHWSFVujAWL@p$NCU zqt)&}hyW)F&^V(5kn?${&7q_R=>Js&koYxB}DTNo|sqO|YXd zABGaT+?%0v4c+L48~UCV_&ah@pl}&SpD9s7XuGtJ4;pYBg~ZJ$0l?5H{8ao{b)`Xh z>TK~vkKi>qp--uJctrff94!TFo;@ZbCN3Mv(rp+~l`DO5v|Npfk+5x%PKae;So3q) zeiDS`XBe(jQT?3rVe@gohpG|t$d1_&3vc{%fC0ST>m2~)vy7NYg%MkXqf?cKRx%rE z>HFiPMPv`8j{K+s5vsJ30HL5(+m0IuUsQ~)A~}nF4G?srjBShevFrmo^XUFHwquQ- ztl%!1ljrctUIaQ|9bN>O5|n3IuujlYo$a-HDX7N4JTY!Kd`mAO7G=^J8^SS#CtoVy zO0r<{zN``vlTTJ?r1Zj0nf~wm>E47QaiqX)EHT~{H7jTSx{8q~4XiEGLd-;2VjZby zmdis?dek2Hu-@6Ja(%dj4^ExQnJ_GGr+S@OhYKn}uE*Pblfw(=70)nTf{L)6^3Am6 zY>X(6>?KyZ#L7N%gO{qI?t*9bVFekhfr{ft71TUy;*x`A`~^ShRfE@4yx^X;-&7PzjeW0d+>QC zr1sZ8WJC0QR|~`{T3l3NnO>1q`%IrRK8&cOqJMSa!LiJsJ|stTt3pEqy+S#@s)5H^ z0YpQ;j`lh*UKNc}k>wC%go+_-JC76T1KU)x8sihxG%d1lJmaYFb5cy$6~^Ex-3?i( zy`KQoH+9Kwsa6D`8+Fo`Svkj_iaUxY&G9Gv))5dID_0QL2vd!gaL7KiP509{!Y%GCg`M`H0xT~|q$ zPw_c#grdX%(vjp!%h9Cx(0E$-c56n9vbo>A8T!E-72MFFWu zTd#0t1hkRlW}RW|b*(t=P*+C}JB4Ye3zBroZ!Mv_VI0}jD=2{N@$6h*<+e~%u%0`r})Onar%fx3woBA zko5ccC6>6M-?t?u)C$13iof70zTH^x9_OThL(%PguGaHW(CT-#ilJ>Y8PW~}SWv@! zc(j;1TIdpdC|?xIag85DgS$h7h%Z%I+L%LJ==wPF7c zylW^@;oJZ=<^GW{1g-}9!}tU(oqa9VHUf85G^hnN%}uw1gEiabJvsGdI8C}jzR-_Y zU*qDyrPW5arn&?TnSuHQmbSN(!E4R|B>M`sW!O@LpnWCnE3O3Jh5(fuNXS%JWc~;W}Y>7bOQ)oh_p^)k0|uxsKv)kQe7sP0w&+5S|SU*3Xb*U7aM2M&M`z zL?&(|s~f{45hJ<8-)OtMAyXF&TI?r)q>yaJlt3r;E((- z=XKMX=m5r}G)=LRtfCU1<`gH{ctY6y8vU3))}(od|D?qc>!j7l(&qp4QDPU##}aH_CB_Qlu?ulf8}7?VJF520WT#XM z78JMlW0XtBk(1o$gz`O~928sgEoP}~C1B8^>c*Yk;dyW-{k0ss);+?g5g0j30d7huW;;O|cm{@zt6xVr4Lqgdyok z4$>l^BVz)f+st(pa`Z+#=`TWv5@6Fka^aMfER$S*R=v!B$YCac#O7@vUZ&QVdV;9G zY<~EvIBt`81glff9^kEF>B`@n^DSM|9ZzT}TB|rA<2bY+%P4uTR&ia+;ic zj4alTPIk}EldKpO>UW-899|juzf>K9G0O zrXoFgVw#7+Xt#q(-qO#Mzh~+|7~Lo1aK_^kgQqnSznD2HG92NC=#65=#t&R#^2xW3 zC}6{AxUF!FyeHv`e<-XyQlvsSYrS}Kpt{flmN)mAB<_c7{g9f;usEJ$ApJ-!3%UAt zpm@neGt$Np3%&GtD~q0z8R;jZL~<0QAw4oSyVj3=z@`kbK*|;IuPRHSEK@gsBXCP) zDN^1^JkV~y0`vxRjF(YP{HZQW(aOWi!^n824iW}s&2JFX8wA6Qp$G-DK@dk?(z49c zZsjR>m<2@nbiX8w&3?izh>GNqB|ti@_3eE|9kdr28vn()wx0i5f~oP}W1Qs@R?EPr zrPm;Bk_yttBi7FS9*olg2ShnQ-P+Zg60U9?)4D^D7Bz?&2v5o{$~fy*qynhs3|G@@ z5wOGI@s#~4Hh@vvcmI%|1AAcs^%AWp&U}1?J}CGutKEY>BQ2>QEKinTD~*COdC@3h z9NZVL@w9Ow77;Rm=cGUwsVK;48$IBjG}W_k9R3kvmIq=XA`qafp0g3bK9au-S` zsroYSv9n2hYT$T1Zn>Fs9<~o#l+3UtMx^CdC}I1jHEix{$Bcuk9=3TRs#jIRR#Tx9 z&LjSAIBb7+NVOG#Y1rgvR9)GqhkuvE-DwULbX5RNlHfv;L}Etb+3*SDOe*E+%qNzk zI%mREAn`M-AWP7=NEO~-cb39Ntmh?sP#rpFc~bu0Vy^1ZQ!R~#K@}}HT;)$pO%aF$ zVdrk{EzJ{6M#z{eu}~hcHlT%c339625@~W&N)COGkO!`0@xkFddZn1Bb`R9}sD;wN zgr`u}vOx)MTImKyY|S-GB~h7g-npyNT%Oi>Tl8AD=ILKR0l%qs56i^Xmjcq+t{5LnBLs`+&R3OG@V4YhQ z1kpL0D13~!CJ>2bqG7=4urxk6p#L*-=i z5+D!rQ-{8e=H)HT1IMk5ml$J;P~h_DpT^No#pFGerCLn!>-ZAfKODAaPTis#QHwot2vN? zR%TXl_x|yTVmMuCclb^boiv133`bq&VOl%MayA3zM2?ogq96*%(mI@wo7uaFjYF6o zE<=o}%#ZALh2h~EsKU(4w#D20O@OtB?^sBO%AHlM1~zhaD`th+Wf-lzB5FP8ythIJ zlrv3*eE@X{(Pwwc!3N_c5ueu_V9Juc0K5b87ky@m#f_nejjp;4#ZZQ2of@HBiHMWf zlrAyjMWbN4v$W~715N~EECAi?D`dXFp&?z5{jy(5Oz;mB0 zE7)ks!5H<>U%?d;Axc>a06UC!dZ3=eF*{1YfiFyqU}~%!a0>G!fkye7^~l~#p<3vh4rNeQ>=k-I0|pPqaLGf@IxIK&*A)_+;%dML zigZ2q=NL)uFE~E)bF!e1R7+-+T&qq$%bJ?11n%(Fa1w->d?iDqx_VpnwXNy;W5BU$ z+g66A56kj;{1t%{l=1%%<>I&s`6SA$VfkTOa9#M)QJX?0g2cILx#6>?{_8Tj|UdFOd!h(^Ha%wr)IiTe8YRD|JPrt`;O> zu{;lJvl4!;G|e^|!sW7j@#I^J#c4*q*kt6Iw|1TSaAx~>I$dy-C>$pe1Ezu|T~)yB z9VHz__KM(I=%`Tm+fi~oV7W)}o66?`f9{F_53AV!%u2aHwFT4hR=rAV8Z+v;g% zag=X~Jtdhk>dhr+V&;97cZ26;80EkI!a7&&E z{{55!7_QL=ymfUpAOvuM`?)se#nlUC-+2Q{5>*K~VGcq2ziK4XrB{sOuA+|MH7@2j8voE3a zXs|f;u*2-9nI<2-yIt;)f?`Du?VMwskNv|pCgtNv`L?i`wZ#&em}ZBx`MnZ5h~i7< zq?^giwmMZ9YJJRF(~JnCPVTw>=j zU&8Huoao2LB{r+ca7k#|djdD_4Y*O^07%++|9KcSEmpa!O%?U78SA(rz zJVySTs`I+QE-e0Gce%l3u?&^(6$g>&a9MICyjI$dT`@WT#$E6x(z`4MA%%NCn9au} zv_#b)SsV~L^tQ`d5IyAfjg2?LL%x$9u1oT3f|2_aC{qxLbPt}kS5Y-}S^h~K1fh3D z6f3Ci;o<{I`0KcENx17h?Uxx*^(6hoN!EITX;wY)&d@=t?f}G-@~b}>Ba9j#xzgsQ zr(MSZjK5M)f|LNl5YItSs?-W15q-^9@LGfmlm2LoBM4<}VCZSd4J^WrfGFxr4N1dw z{fo@q-LOm33WywCmK^XQLZM-$q=xGeTMQ-2*(0o%*MFm*oKdnglD^gt8EOU;z2kuF zi7gFG;`~m>B`|4Ug-HwfR^fdUgNQ;2IHvMVVNf-$8ebY1wBU=;#305%6l(^9n8I>^ z&BbXhT+u3nQ1*=|f;LtNb(k(6J7zFQ8H53YVDPr?NE}?88(`2vjX`#I27}boMi}Hh z83tJghCzPu$B97!UWP%;z{t_ny0GgeU{GT}PK807v?&Z?@02j8w-E-pw-3m2+cAh4 z2!rgA8iP<@*JF_L0;#qKPWIVeY-drZfa2;(Idv`Wj;ICM*m@TFHRCK!H+q$et!rfb4P%tUZk zu%*g;K$sLEgA})UsYwp5DmHT#i57?gqPf058?Gq9!D=Ea#aoc_9gRTp`@bD{_CFo) z?0+io?EmqDhs@><;72DHZr2LgYO$k{OAn_otS}9X)@20e*j}keOx@-*C{^W(si|Xd4I({Fv~uDdGxfE26VePTd5b!J_?euWorv zN)*huMzevTC%!N4P{T*N62MQ%OC0syILIalN)pp9UqV*_Y8&-tHd5}kNCe*CzXY9(mdms81Y8bw@MKs12hKDrnqOas- zyvFjcqAo5Ye2h0pb<|!Z>4;JuM|zJMFDK6~B8C85+U2uF<6OcwDjifcb_^H@Gfjm` z1%i>)Ho=q?H$l77%uNkeG{r7z!347U`LIePApi&Ugkjfsp7obA+vG_E)|sLyKi%XN zxSy9t5oqoM2u~YkRBzF}XInrvj4})!^;)lt9H*uRxhO#{5o@#L9TSZl6g6mB10RW0 z+yFvmLWkJ*U&0el4+i`r{su#9U98?;y%-nAat)yUjI?SZ{wtU?dzl3?&1C^u;s;Fw zGY0_shd)SS4wKb@NO|ss^fjbw$h}cJo=bu-kNmo%Gn0 zP0m3bk^MV!MfK$&GvMvvLslF|J+PcuMNPs#`;%>d%#HU|q(}=kB&R^$UezF1*H(p1 zVK`HMfU|e1-sqR-Fan<5I5cj5MBi*eOdjk`tMTv)y^8VF*fhpI1*ouI|9Z|C@0@Ma<*Ag2lOd=*JE))C zlrNgfnB|+~WCC!fggGZ)B7|wSzeqK3sdtULR7NnU z&psIGK@oTTAh{IvgWOeWkM2t3TYpmEv~x&i2iIY#{8844ejPBI9iG!-A6wrPTelo> zQ<*}FQI_WmVn=;oCR(av@O-2}Qi;xn`?AG{PdHaoQ*OLps#0yJA0^`YRO zb&ARy`FGUzxUX1c*U^mbXng~fT15#u3D40tUnR*F%G0+H3Rx{<47o*Ht z{gi>I7`UqTQUuj2K1%6A*)hD(OkjIp2%p&-fR>O30DwtG!YCO^T~SE_L=C7RI=C;^ zK>$Ov<~6It#3QPxwB6&gNI2iv{;I+X;-eY@dObc4iB`HmsQ79 zaJ__*7Ku4j6guu*JFn&83&(!)BFp1^A!ig?pMp4fX?C#KJV`woE2Z&#A}Dgt4g(b~ z{#O|(C?^nUFqb6{cutNo%l6wPOD;>QR1%PMecEPH2M)>;_a)_hZy_JEe8=sfQpa1~ zm6Y%PL0o<$DZlm4tfWkNFU31_>HPAGUk$A`I+_p#WF~}>NX4mg^np>!29sBrD9V76 zAgh~L<&fz&{q447@mOEgA9Nse3Jo*+YjBe^4x$MCfg|9MG*Q@=<=m8Ccmryo6(fcA zC_qjn1{aALv45NvxIfqg>mt-~XlZ(_TVoo1oP)Z@%aU^goRvxEjDe_g`(-^rrIm0O} z$G(7;kIeA&?1*wxK2GB|q8sIJYh~T{CPP_(;Go?(7zaE+*`HRB$99>q)-A%$w%mBu zvw}J~nTZdUg>3@Mm0%X8^Sc(*i3ImNje?hY?jYsmtty^&bxKg)(-|2zzBMJZK&^^_ zIFv?c=K?Ex8*ii}mYuQ_;&Ad5W6|0i0#<2*uBIoiZ)N)HMj4)zG8?&{x zGmuZgk^j6LZACk(79Y2xAt2%F4{`13`0 zmM3CIE$zJ*D3?jh@X!vLD7*84x9~_V`kJ4qm{Q<87FRbO*7JhO;$g%FoQL&w*p88s zax+YADoJhde&^lqpX$vZF;)=A)JmeB`JR{^NgiUlCYfyntai|~PG7NR17ngqrmkg; zAx1ya5Cs;2JR`!#S~Et44gs?bI^X%M^vhw0r!~Y^ec$-850Qg?bV#}TS9jzKOJK0p zV{wVS>RO3x2`o-T7g+pe6&RUA0&~h7XXY#}E@74M+9kJP^S0T40f(B%GQpcBl8KS2 zx1q=fx?~2UZ2@diG} z#c|y;1g*7RIck*Kf<}RGMNOCu*(gEaXvK`0TB0UYEl?@nyjpA(Rmq%EaMnPuT2SfE znPzp3b`}DYAO%ItFR*E~P&JGiI8!uN!KA$bOnMbel%Hjp0Tr7dHiRn-4J4BC9lFcH3)rx*O^m(}I@B1?VjA;Jvl#;Azz) zan(AgT9|%us&3?o)u*N!mARc7ZrvTPTY7iL8!gM?3E`<_}yrGQ-b9?=q zzv1@AbGNsXE`@ydMCEC!p0!->#b$QKiRvIC7*Tg@avobn-)Y61r@-ws`I9L%7|p=c z;Ol_+FFvFc9Prv83DvnZE#HCH)Hfksy+duG+HSf+OH()CTM)lFX;P?IWjIZN(AFD_ zd~_Wslq(YqVHZv{Qfhz(PUKXF&kJS0l5~lv4tlCFoSooJ>;`j1amYfaIAOQKM2-_+ z=tS$NnE#Y=Un>{BMaGUUVmx}GWM|+8#-oMiGEL@OQT0X^O4~Vs_=z@RD2>l<-uyP#PUg|*~<%oy>RmZoe29LYDQ z7S18P4~;IjK8$G9jly)D>}xDfEg0{MuVKn3o78s~ZuY;ByKk+58cybrH?;;{5!TXCVbt@sYhpUZ9o=-Jl=%DOtB z+|gPAd*078vnNIH54U_L)MJ5Wb7>r?zQO?MJ;d7-Ge zHu=iJVSDis>tOjv_QXKmu*T3Bj}ML)mjjCy>O*sx46_~-xq9`Ws3XdtFzUal0rl$v z^`{1;cdMPhn_+b2K~+&ZECE$nZjlnLl77|5ZIgCm^J0;5^$iA~XZnSlO7( z3e3UqOqWI@=2xZRmt1DGq4bDYq{vk8?O%!bLrj zQ!aqCWkL##0Z7bfEDQmP(JRXgMXEgcM63KJKBdlPC?A*jM`pGo&`VZip_U(& z`}&(Z0UidY&j(-Q1duHNshL!OG>;l%Z35ERA)Z{>=N0=JNzTl3P7|Z z)oSVJlI1RA)&tE~gg(_65Tnqb)m%HD>?(ilKl@BM`Q%L@J5v<*`nBJ1>$9)P8@_NV(u6mh-9_)s( zo;i;nFdLkSb?5M-KDe%xqi<-+ngu~zx*`$^g4^O>QY}6dfjibj zF_YEaL-4T{#l2b-_hv*fprjp}51t_1M2Mz|k#7gS*nv{(CL$XOj)H$qQsvU<3S(p~ z%S*FkK>+ErBuCw_%s_MyONr642!DnAVY2o*WR1OBl6?JZ=~P}`q;~yU3k5UKeJ0mK zVu#!X;B|3 zYgB|GRgvAs;$AN-5Y;#y&~H?J{+m(xa{B%xG7=a08GfP#>StQs`oV1w2m#viZ|)MN zP z)O*hu4(>k26?#V>z;=+zZdl2DTE=qFt;CTk#?yR6Ar7f5IB6y9lz=3UdYpX*SDFbs zt$VoO!$AKx!nLh6XJxYFc9jWRQFq z7W~tEN&$b75R@5oG}j^gC%Cp2QVcZbnm=6=4(1EajS1!Cuot19lvsiL{X`_0)9V!j z0Fw3<{;U-yN!Q}v{!4&V0+kd@vi<1<>jJu>fT~eeCwn3$a3VlEhGd_ru|r=C`+rKL zaE+6|>?Gy1sL1Yrn~>dHy`oH6ejfQYRUAyqX1Xsa0Sp^0R6w0K^zul6RS4D%?PaQn zQDg7vhb@klG&?0%vcyl6eQ$v2>YJA_Lohq28u(#U6!$ck90ChdSQjd^3=7vyI8H9#k3D0$1;e$#+|KJDd-%WZ0 z^gkHLic~ikjR0LSn(L<-%^9;5oYOEOPIyz)o0L|MJGr;V{R|d%(tU&$39MBUckFm^ zY-{ql*yRn9S*#{j_5dbyg}`moIg;$*4uD49)x5xIo_uPH7w8ftp1YsFfH4T;BPoNMeWbq&sIj=rmeNX&pi{jqbasBZ)%# ziPqPaA5TF(F`h1kSSGd;q+@o|U#Oyh7Clu_8=G=!^ro@%$b6I_r!+GuKB5R-s1Hrj zkOe#ygJhCYKe(7Wq#$B)6inkbql}3WYNH<;UvkjTfm+vIUU`5384wGFQ2v0JXv-I& zWkSRmf%Fh&5RZ@%wC6B|JQ7kq+!;bP%wM1|ugUOzp=d&m>bRG)@k))`)CkNG#IdK9 zs7_L0nnskXJPiJv*z^dF+0^udbET<2G@V&A*~L1jX-Nl!>flDumAXPsplkMw(Ksjd z7r-4U;Q?3YNd}ZBSFv7jL)PsZd)WB3;2XcrppM~ntRx=*(voN(DUsv~U7=XiO4}NG zI#FG9&X8e^$d8JOVfK3+o>>%Zm9BazS}b4LgT)bO?iqvMn7fQm^P%OW{AStvc8+rW z*{wf2^=AhsKkEFPeD~-X6!1Pb-!a;r=R(5W`7?Ba4_EVZ^@Uscb{*!!{d^Z+hLrr) z{s7z!l@l&iQpr%XVMj=Fl!%XJv>VysQJtMR8{IR)ERbDtgv&NOcf);|3xupl&dPVY zAC5@gXJu+bNsm#Su3Y_!{Ev!on^PKphf?;W6-noolbxZvMxn_0sYt>#DlOWr({2B<>|ACGS= zhOm-qag|pmrH>u#H`$=7a6TJ4#Bg@dIE;%&sH>p3CkX=C!}$H2idyCA6s`PT+Lw3# zm3(RUrbn_b@ANP=oa;2~!fkPoXNPiz#O7tDR&c5c2?@qTgN4#zOnQZ$GCnPFDYXmTje-3G0wqGe7WXlnh-{?UeHaVdd+}9 zST$6Td8&MeGbdI}lO z%v$*~^6ld*Bl|~45|S*6XQht_;^*eOX722HR(i_7V%3O7R}__*AC@Oo zO#zKqGR%mNgIoY-2d%O%kv-F34~(7xRE_LV>wdEX=Oaq}<&?LN3%H+< zkkMT?S-|`mW3A!tRpYE9H9zgmmsD2dMf!7nV_8G{orF?DCtk*q&1NUXg{!M)t{8JA zG&%FocnCK>=VZR4x-xUSzCmwG3~01Nf1a5y7zdC%BFz;+($*PU~zhaQR;CmbX$I6fqcq4?4ypx;pzgr6jZ! zqiNf?$@#3z0B{O0u**x>0_!@Cm1XvT#q>c%w0VeN(w_K|P}DQAYF;vSuA`$dNLjip zd9%5o73!pk^ku8LVXPGYza@rX*H+Oup)%T4Pb0BlP!CNZdzJ z8*PWIcILYeALNQjY+<<+0zS5Ls4Bu^1a5)OC<;0GE&8^TZ`=6>a{ovuC#7Tr(%F+? z6x^=R(7U-`F|Y0n=aS6%$L6_C0K!LMBMe6F zdbm{6cNT6cm!D$(XXDPtojV`resh9n=gonPVEcK;$j4lP(l3oU2MrOg#)Kd{rXX*n z2K{~Q0)lO!)+}WIA-1yIxSgF&8{Bj?--gHkfdZa*4kdfG-x>JK>GBY--QFzO)1|L2 zeFPrMr*Yp^@zbYxmMsT}m1Lzh#gqe5X?Ai!d`%h|b`%gsx{#o)PfCe@o^vhBFaE0Z zveTYdCT2qP3VTF0k`6}1=EK>IO~iLZtezzE>oGm~!9NyCJrC#8#pZk}H_}j)O#zDmfUGg<3ZdM0#RlD5A`PDFK{&z#{Y=a})|2H&;_Tn=l8Tt| z({y31d05&aoXo5!uT#YHEF_**96GWY=B!{kXMUn$qO`wSt~3+Ac;YlT)$cH!v^ar% zy641*BLhP%zTU*j#)bqGL3Cn{Td!E3n5x>=bGEcGS3NZ zm|;8x821?n>z@in8v+Tx22{Wf7Bee@Sq7|iadzyvY{@(W2h30sR#iC4Y>1@0Un5{y zc{);fDqtFO)dXL}2N-)D6a16!7`pict9QXIG*Qb@t*p_Oe1$yVc4#<5uVJa~tM9p& z(Tp@<7ti4U3D4ommW2!Ynk9@$@MS*icKtGz%x`zs;C{! zyZ?qAPKh?DM-SWuyQ#FA@=&dIqsYhwvHe|e`!X6rA%sz?M-c#_$1X`&jb6KQt^5eR z^04*V|2JgKOsr{i-OG|!Kq;W?%UQVBKT19KKO{$!iUc=S4us(l1JqN=Jb z6ysHG7Y@#2okGkHzyZlT$rrqqm%Ksd)m09Et{5Qb%cr63Dmt%wujI408~mxS(pZjp z1O)vxIggM}Qu&7)xkH!6g%Qr;2!ML?1j7npwPa}I}AhT zSY?|K>2m&((Yz+j%m^|A)3@7M4fBKY?&=Fy%HNTpqDyj8M|y+Yd+c(A1^=#C@K6t$ zyH&01i}VNl%)84|oMae<#virD2IF~6db9||w8W6$_$oe?vT=YKBnB(7Y<-wr=3axT@$a!E2FKK**4rr-cYy>e@}I~ivG2nZC&RDWheJD0(ha)zgox^iYI>O7@ zb5iywf!?^4cMX-)k$1V>(>UplYdRCU?o}qAogn%e>2Ic)RLd;855I;>Uu&n;k(aHi zP-ct_jvJa_8n#tV^Iy`_pm9pCcSO|85Qea`4*f{!==$naj!~yW3jk>Ss7M6ZF%`H` zbxrFAb}K?tH;lmVFU8Tp zO%xr_QFi+lJbT0w*rK2X0tvx|EO^_tV6JZCRdaL#s)8t@0;TDqMkqHILwGCqd40H# z^JeGjs#=9-)N{>1#`%s_?q3<%KfHoNtXj=SFWRg*Imze|Fwi?9EKN~cBc(8a&}ydZ z?W;U7+jVb3Oo`})EIJWWx+M27Ze&kn49rUYYKV!OIL-5v?SP_D<4MG;!`afP#7O;l z{h8Ar%N%dZ^M{1Yf`t5Ln#9Mt)%nvYccN;0#{aUi76ys4ORit0$IxE>fa|2hRh+e| zn80e@9z)`a{Rkuq)>K#fYpblZI6{BC%6Juy8O0z}HBKfD=UB_T;ceNewY;}Rcj0#w zNlAwofq(hypHc+x9*S*P!S+&VyREy}9p72SK<|!=!O5aMt=_jA>V3idjJ?E_0;D4= z%2PjVmrHe_q9RgFL3jX^rX*uw1=~<;0DOf)^PXMJyUzkcS)FI4*U;}r{*G`N`5U4d zz8pY6oyhyEIYZLexwP+yhC4mHR%3W3VsdzXPOoj9u^yG5Aon;8VuY(!r)n*4uK~37 z+Ss$u?P_Z+=YIg&uI}K`_x(@4Sq!0pli&}GEw-Nq-mQ9%g zq8!AGsBA%MK58J}QB%?fDEq*I5?z8M#vs}IcIuv#{CT@F$KO@RgjmdKQ7x+bj@XiR zzxhS>!46^iU9C!&;JYX32pTvt-HDC8IZ`RQCfwyMrS(FGp zTU}iLVm$;JO+5s4>7nZ4#t*SwJMZ5Bin7K023Jn>!z3%Z8)+Q4TN_;JB>fx2L2H0ItFW65cG1j?M%1rG~1#DU^An} z#JPBga1Uln3^BwO?1r-`LdFM8w(`Lcvmh*r)U4OVfNB<+t?buU#mALcsDq@1 zU>!a0JVGWLOw;K@mh7UDkMgh?TH>rwv0gW1BN;J^kOL9j-yfu%s+8xwaFed<_kK9M zM21X2J1JfUpz_+<_k+}3g-dK}JsC2{7UUDDie$~!QI~EWUzp|=HBm+*$v7m@(izLz zwOwN3b0H{WZP_)8v?n~A+i?!wNE56Z`AOF_QqF=Tr;dc9Pm5zyTb7P*h3m_%Z9JvI zp_iw}$?v{6y@SPJvjxrxNb6$Wm#5>p0z67tYeC zz9C=hv-DctcI))Z8PPxF5cyN zIA5=)4a|FQ z@Vuqr-)h5N_ZFx~Jj)buz_0_Yo{vlvB29r)55?U#qtVHq0@qw*=OlC`0k&nFx9%^t zB9s=Uh0;PpD3!1LUq|E`jzVkfA+u4Rx3P-fE+HD~kgY zCX;Q1p*f1u6|M5okvvH9exlb*cZiq-Odv~FzR7$5-$qHHC6{MgTBJz3_n<5Cyl`!M zpZeYAfvJ(A!s|$)Hmb@{Meg*LqtdNT1SG)=z*9%$2r96H%*#(*2E@u^UmciGPC!5%+co}8s!pofYpeR$v z$Jl~;Qz30UTuBcv39yHjhO3>lf2{S&SSFm5AWXPqrTPytRBBtYBCDI^wxbJ46k{ve zilWdc%ceK+3j*?{+d`=}wiR9)8T;9!(#7Bq{yRBF0f~G5`zl1x2VYPofq0v<*4#Ch zO4IU;n^YfTvO$QxG&L_}p45JB^VNWCY(!joD=RkODP>^&5MNy9qe%WsB4++k+y z#`b*ogK2N-irgVG=j-7xj<&|p*VO^~F)wZU_bWHlh=evbPsF4%03)S9z~{HyvzZK8 zB$xd5u{ru{dp5jo%FiDMOi~h?x${hz@}3&3=+olZ3r zinh6rrRK9C*BnEM!wEY~pz_pK)JWY6S9)p-#Z0c4qXQoo{uy4*Iw?_?)LZuQmeKIF z?PP)AL>?KR5?9qJ#MCJ4sh~f-;1Y|u8W@fx8*~|eRf&Uga(K&B!bAV`3%3{wE?yxk zs3@Nq_6=3&2#G1Tzz5o-cfZMRI?^7t)9hj)f{2YBcJsBgP@ zeUO^`5Ol%5ig2ZMwFQGT&j^ekgb`d{wCSSFt9Y+>(N-7DSD~OUCog-t4G%xvhA(|O z4H-QzZ1Hnj$FzV5Qo5fU{*4wnUF1NXav&W#6?z!tD?L_K=OxKt03<+3w89Wr4U$;8;RhLs z+0ToOqZ}Yd>;cg5VNX}rS{bTi3DL9I1Mk9Q=S_KH6A;~1SJXzlxIrMg0w@t)R-S2& zVuL`DoWlRnK1CP@tZ&MPX!$F`(sNKnohZeI`4nh!;Q`D{rB3E(5gK}k7oZSWu5ow~ zJNh-l;XXeJkG6OSe=wMkx1QH7Jf$~guOBM;T{}^RuS=5lEw=O1pLxTO*cFRn*~k)@ zxT%-L9AWnfbJsUKLd;p;P@$#z0!gFa7^TK3)gYDCBF75A|bPPQm>s3eb2s0Pofg*G)Pyd2? zFm%Xcv|pqasE3jwj~BVKf2F?3;I_R+^gmZbI=qi&w9Z?XMp2pHTs|RC=E(?Dm58zl zzpkC6$KwBs*PV`P&5Ml_E6f=uE;$cqCHTw|%?Wiw+3!(#$L6vfDrXY$P_yXLsLlR) zW!8|sEDfEQOH|_YkJ6Q7>OZw*LvH!C=;*?rHPFBIAc-UC@o@sxl%L~Hl6FK=+s3aR>3DJPnp zuwtS~DaiTN-+ohEU!`rh`V}zZ#4bRYs7`FANmO|7-hTO^fCrNSYIwHDFrCTJmKhrB ztS#a!3d=KzkC&hMPn{BgR^Cku2e5Z29x*}Jq@gq7EiZt1sGw7M-xG7a?uT^6Y(b+ zot8^~xLG%AN=cxU;oh326XELgT|j3Z)Q_cjP!r!1qpBk2K{buk&M|Oy$oX4D0`7P9 zT&_xN1{j&@xyysnckNwDIH%Z1Z^yYJp)qeFqN_N_kQ-{i$rP9CQTYjou+zYPT$rxt z6b2c@sBP~>TPO+s2?zR8o-hr?*kn+H)WXr1-4Cw>0`7^B%A}Zs7mPte)on)L*U(DD zt7c|F0mQ~E#NTV*9~)3K3!=KsS>RxDAK;VEBDYzvsH6}D&2KVzXf&zfPM$_2K_V*~ zM~>nvlBwF;?PY9m0KhYWmT?cP<_5=noGc^T=PkDZG{+hz!`oXNSJpj-|3s!@kp|W9 zbXAS~^h0@dP0rnMkxqMJ(uOCd=-!X?kw#1$oDUU@P;`NwQI9w1xw_^(KWPk(-Y?Eh@u*DH(uHDcWPQ0K_%u%!6k9v#JCHhe{AG(`8~V2CuNe^CsU zND%_G3JK9zwF0Ajuta-xAYm=>#8PWxvf+K*7du_Nk0D+L>$RKDP5PpmF$Q`*w7%%T z1pn~=Ai5jN@`=kk?n+9PJ+)WC`RWS{L_dH30=u342ZXzfX(jem)mbA{6qO8!xly;Iv%@L;J_5@9`!zw6CbehKZr z{z`Nz$LmV z*@kAQ`Jg|D=k&0ihb(J@Gs*lO*0y)JJ7wadf=rC_*Yruzvr=%kC$^hZYqp}DvlGP! zIVYc!)uchyRfd+8spw)?rwlDZY!o=4SXDG#7E~4QVTjU-(K$+vKatNzLK{c|b~-74 zPZ?36XR8K;)~lYiBMIp996hJ*a*?bNioTNGC|Y zxIASS>Me}1ZRir2RW0PVC$w^}6b-nql`?&s@q}18<*aE4)oUbiNftKFLA^p;c`FvS z=uzLd;XBW_QAIM}%BeMBDYKQe@m;Io2T3i(RuyHWAF{Q<5}XP4o0+Q4VqAWf;Z{N~ zF2Bq#$wmqCxIE3T>Y(FTMIq0?78OJ~Lx||HYW$Cp^YpeMF5#d{;ct#e@9}+oob`zL zfMq1*m?s)Yr0k=3f<)Xz%|h9$3Yd@zkBN~zlG-Q-m>>jsE4n$eSzp{Be=I<$S# zq)LX^Rsj>gN(~YmniaeqbYm`9rc`@UrmK|Db3hU7`HVi!YY%3#+>j>^(-Y?ir9^Oi8mz1{_30v1|z^hmZBLr5&T#pO`bzu=h;vdeRd|W zATh?^C&|^k3U9^#qUA-s3*bV)!oBoExqI z-N2*`Z?y9$mXQY45bQ$EV#L|+$i7&{w25!Z{<4#-ly^L`-2f^(E(V^z6=R5+@uXh0 zap@)Y?~AIiybsJLaZB}e=sJb5N8ioweGE7ZCgj%)c7kZ zWS#-Eyu;itz=KOK(x2-MM4|+rpfql|I^fb0Q&7wlSNRYGY3BpT0EO0A_Z4#LIv(#(3t-zx9vWxr?xCmOt z`#wO4o~`I%l2CZ0&w8#2+SsoQT?PU!cGJQxf)FgV1n^CXtM(FFr|!$)6Pgg4X*Nlh zRDukk3K(!GE4~0i!w*sjB`*K)(()9u^utipPR1(-L9{UMkJFw@%X&}+?lkOr7LQO# zf}eHS9fT|gtJHmgYVt-(=*nvXvtt}IN2Q5%Edk<;+z8a(ai3~^faBRO>yMmE!XvA6 zh1ivtFvm*mHxhrJ9QdG{>&1j{V#3_5o4wx6l$b~$|p(#P{z_TNPg%xOhvhAiVI1>$??VtnKCDb83yGzf#i)0s0?%we$K;sL05`1pMMj1`8Aw?uNMRsca&)L^UWmc|0U9(f zuFqJ(i>$H2Fr{N2km4H7Skb0brLz6_M+$8TM4I4#@fj;RQ029pp7QLe^Hg+Y=ReAM zD${Q|ENj1FZze}%;lZ?FbAeC6=K1l|6@6>2CzZlE-~;MuIDBu9BhBU%Z$BarXsGxB%5S|vqN+-{R!o7Uuks_mI`O`S z2^73r@{xf?v)^9#}l7^d4@;}-Yn_nU!raVWKdPPrDDRhfI6|@(tQO!ms1z~Xe zV%9L`zyGer?4qg$`jA8K96o5)qdAb9_ojBhXy=4o7Mw1f6 zwloK!ru7gXTFbXGrtxGAd(w}I)4 zqXkP1GRft|W@>fBG7lzHnaaMyNirDT*^0AcZ~XfILtEmG}p+mr}w8M6sBgkUfd;?f<R>YYiMp;~$s=gbj>w3@pU0SFb}b$e zhNG%T>IXeWKa{vl?EXlB;cm`VrYv<6D_gf)*>ABv6x#h|jzsvS@5bdnEg$)wha}5y z-;>y-hryI^jrN`e^3N@5jUpH1jBVACya~UzhR+=`K_${G`G*ExCCV%k%0`=~^)$9? z2ZZaG@h#jfNc%L04JNgHyDn!YG$3ShiK(KB{oie?sI0M=?6Dg=dkLyROGoqkkdWh=OY`HAJn0h!VvfftPwrJrr zHKcVCwOp=_guEF)Z0Hu@qCnE7sRwi>+(x_3GxX>wADMQ7*Gaz8T8ZJ3U{ygpxCmG12;7;% zNc3K7wNJ}v5OK14E+mdcR==?A>@|o79(7>y-%O7!P#M0#rk4r0?Sew!U+k zB3K0ZdPF{0aYdG+!sco)(vHAEkq|hDaVgxD1&PL}L8+9cOqR|IU>&|Z!?)r)x+M*f zj-CQ>f*-go)|_4(5iZNyYx+it5gXmcMfb{I_Qyn;0C-fx065T$%&a4+H8uXHtzh3PYzSp)Hj|l0NAF{7r`jE>^ z>{O)M*M@8qR75W9QX^U5(a^duHvlABK~=D91cG%qPm}VPgte6Gl9uAd~wr-1GAk8H*Cu zwM>v7`FUXC=zM;`2QENF>_Kjwk1*N8`s8~w&1Jr=@|7%0yJSnZn%zSYFmnN(?>#J! z_T(4POL2juQnU9x-uwAsbVthNqoZYBvxk?YQNGL{J63j&I@*(;uTIXV6HHUn;Kej; zz{(f5C^M{F)`?==QuPN?-u&Cl?epj_9i6Y20pg$?p1HzaTy$5-A|sL?F85Z}itgGP zJ24058r~xm=m$TsAb|i-`yOq&p#`YG27>Todh|?Mh5aT+Nss#BMNwqO2bg z0pqnw`VrvK?E<`Ub0?4;Zf-vCZ%?{F2l2^GE>+tKY1n7VJr>s%4NKv?KyeFed}Y@w z#J7oWIDh%Jnf;ciiXF67TXt{-=o)o~&H-6xwWw5dAeDEo*}%?$7D|CjIU+Tp)ZN zJ;L9bXkyrb1Y2Xqy|vY1?#^PN=1(s<$ab)bSsjvI$cxmnv$l%W1Sj)#h@u;~hpS?Z z2E7w&X!|FNYFd7CYLURcp-+x)W)b%oqM4k%4OWyi6D?rTt0{>^(aIKmkx~sl2Bbvf z0pkD(NNrui7$Co54MY&8jdqmLXisRKt(elWSEmQPBIg5xuDdqr%T54$DL2@tbE7`! zaQZ&h>Gj-Ti|{r2V1b(V$Fi(m#0}CqR`kItPT$A$xz5192RFM6)4fPQl=c5;D9uOZ z7Na}EuR~MquPVLt+p!FL522)e3RzZ z0lPjYSMs4c=+VJ5fN8&qBk~+o4HxrX^TN5n`C|TmVJhAedvQt_VQ z=z@F@#$ENn=6&k}^Vj-#X6U1zFL)n%daPdb{4%__brmmP=7T@cPu)Df!g9^zXr;nB5*_`r=)Yp^0cyx)+K>ZufzJ%4%V1LF=W__wLHRQ%cjJCKazd%-wMrcEWAHzLt zG$!SK3}CoGV3531`4j=%-gL8q7tL3JKu_^9SdVItbYO)PKwQh8$^ZLoO<&d4`w2F& zRMih#Djs_(s7!{4nArlBKC2?H&CWjOlM5B~nI zuQ)7eW6O%hu!Xq?l5=4Si?8Vp@E|hRfIIR~_5BC@SYmD9N@}N{h}7}87%;D*$cr^O zuhyuzxOokD_Sdv@)&L<6|H-$kjVsoB#UX|<$VaO@JU~?E`Kl}4lLl78R+1XhgVK){ z=b8F-p~&dMJbvNm;ylhTbkpHt6id(Xy7K?r`WsjO#lL&`6^E1-jK-%1tlAzla#wY6 zToh5z&K0*o=?#i6R!Yl`r;#46otu@4Zn;DB!vFBNgnsBG#f#N^783_n7Ug^743X5) zH>u_D3k#nz8^&bpTE9(|-Ba!pOHi-oIx3aQOCgR6Xqn2`L4scSKij`gU$M4|eu>Cz zUKr%(OnyS4xbAi|F7(FiAeF&3+7oniQ(3BYe~5z6Nzg`nM^Oh{&q4)7tghjYZK4R; zDR$L5?KJZ>1b291t59SUON#S{pIu=93Wj>d6^tqdH6!yu4|d(#O>~Wd9fmwGf4Ep) zLXj4d=NIIBzhFkgN_Fo@alSw%c@Bfa9iZOPn}H`_ql}p2Sx4UU>)PMc3*MDeN8cgMgY;bd^%+Pj$o%DyE!7XGKf2j<7{E z3Q2cI?xNRtVnsLZqV|Nnnh)N*SEhb(zKgfLUI=BcZ2X4xZ`=4TrRnmK{Cu_-x;}wJrlP-8um<-uS8=`aI3n@7d^M?;G;jGiXE-;3v{4O z9QUe&+CO9+FcbNQ=%M`G$~Evv_=1ZCz!0k>3xIqIg*R{G6KXf#GCt_<$Glf1;kf$; zjCPsNzoyyV>ScN5tn!z6h+PW4x>i8CdsBgH>opwO0CKf*>W3dKI2!&|3*$zk9w84h zJ}VY*Oy?ccwZP!V8II6PfdcTVDpaZg5TzSM z_?K8+B|39VX0igGXhYJ}lwi98GZ^uQr@?6Mq+HM+?d9v<2;Uc^AC9y4v*8bEPExO+ z0?c7%-K&+mfgilEbPbH`;1th(eK_ByW^_)HL4pqqpjqEMhu)yZnwk|Oz>i%)ucv5; ze2U#`bIv6;*)%La{AVx*w(gf7w*b-5IYsSh7V%n2uh@jKE5--U(x0BjK`xgZaZ2pn z8^I2MO5`L^!b}*7mEkELb;sMBSPd6B!2Ohe*$hxRIf79ziO_Wrz*u+0d2TG1Uv>mr zK60w}Ya^W_rJ&PxUOC6EOl>*G$s?&iL{fnty4M@FmMO?xBME4-IX_2T(nt^X>!t+> zh_b`v#S9N`6DyefF1F=c{0@o!at3TeW2-LZJEgv1;TwMUwFRC?958WgcGBsJ6X8W> z+f1p$afRdj0LS$M)b=li%06h8H_qNchPA^8{f(X zSnb(GMX?m;D375tvJ6E2vb%>aIUar^-8>-v^eA6Q+X*AMx7vYKdXM*d0Y$H7JL&P2 zB+=btw2){+7?qF>SOvm2Fv^HE1v)iP#EWHje2W7sQr|)BuxgqmfRz!4_ML3JVHd030Z)BOV9&Dabze zvSRBI(4CPHgFR*>l+V3jeh$r=oCr?3w}-i{kPagk7S?QCG%!Ga5`R;o760SjfW`92 zpMEQ_MJT_yOn}K2@J4PaA9;gn&ewBGv8xS4;dR_1XMw+`?XO~??-}x56k}cpQ)Y}; z75ya*Qx{Dq$i!CX@~yT9TtyggSdzuYY)WEcFcTP}58uyY(YA2))(BNonZ<@Z7K-1o zv7EkL_s9=7#uMZ_x^ zbe5OR5aZg4wuGLvW*g0rlpJ2XaP87iD(G$OD-~g!U1(KYxo;#fA&80`x=s!lS=Sa@ z4$cpeJ>7{=1L9|)2-z%KBoN9!J7cV{+*h8s)T_pbA2Fv9N3lKE4o6DGFw7) zMZx?bngOv;<~?DGDXpMg^ae&yR4h`Wv&kYUR)Ef;HpJ@Hn{!60^94o@a5PSh2mQzX z8h?MKc+uqs{5!p)x8$?utOW10)^kGDmR}4&orcfOjm7zOJ=|_ zi4#x9hM~UXYJneyh(IqdG3lO&G6@K`55j!Yt8U&1BJTN^oKq-(?`3-q{Q68}dvIJyrTnXrN3)%XvXvZ?0%TJl4 z&m+u`fZ)K+J!6R^CW-2pz{=D4Ae^bir>Qnmimh!k!u-?`^Xkx~rh2nv3-&0OQk$p4 zx1>|45~lpJ3!L2NcF_1uA!h4^6^&kKtpgTpl0+VI;++zl8+qLiCz6|r?Ibw@cSm5I^{Br^(y zJ*#y3wEW_ucmBll$r5lxhwwdffV6E{d_i;S$<`O(&*Kb&I{KwmK#6RJ3K#uA&AL~=c5afLXSeigYcna^2J#C zaLxzn8%Ja7Vn{sI0k^OW>2X|CPCmb69ZDJCqUcnkW$BcnAHnlcjXULsE?2Wo`4?s` zb~d0YOH9H|LL=FP!&h}FAedB1(_PjL!f43_X}X=(DIg6RfPK4>Thi?sRKTtSyLG+W zmXp6Ul|six2O$M8=wzp`r4yp~)O53AB_)gj|C+C3R37Ia=g{#ocV@9{s;92@D9&z& zGGVTmDkSju+*Pli5VtiG%wfEW#oH6Eok&U6(A0=EkTz4jPMW3p&Ul^Pg)G)3Il?HY zrd&Jo0rv63^bxRO#OxaK%LnICMuF7GbgMSm(mc%e4Plk87s^pgM-imlc`g(DA^rY! zsr{N_GTdXdp1g})s|NaaMh!}OqOX`u^Yc87m?MEn4x71&$8-*-PO)%;gn%eIMbCf! z;TKaMmZ|0`ytXRHEvF2%x$|TM@T}aJe59llMB(2dTNew`OF6q{DUdB1pQ1g3=PgyS z&MNjCMK6X+E#NiM5XL8pMM5U9Eh~tS<4sb8g1lU9y-2m8vXctW@_|Xy#;fcVz_~ljDM!Meiv?L4N$1@0m(+D zU1QU!_AObh3%OnqqC&%U`&(5A!g_%XS}%~c3#Y~rpjHDyL@B?NHn!%K*{)>dZs{IZ zKMmzgZR#Dxm~L`gliqdZHShV*iEn)7-#zEh!My(QAScO5bkYP?+iX(*Xf%H;{TGa}b%G(D$bNMv(E)5Zp1CVDCpMA2 zZKrzBe*J3j^qZaB`Tw!^=5cmi)t&FT=iH&{-dk0-21zBAhJB8vl4RLRLYpDHSjW$n zWd`H!PhKAXJrcX~>5s~<9};|MzixtynFN|RX(w@rgG&-=Ou}G>Am?FXxp5epAr8);{N+DoF-H|M?_a_YC{&am{P(wJkuZMcwH&i-)iI@o(jm zN7ouxJ|%TgnFH#A=j(!8tt*(rE(JH#t7#i|qv+5PdKo&WxnQU^U-h_>1S>T=IcdY| zd*p#LDud-7qn4tfRX#(L%M&O`%l1#$3a~0d#8#6E^#=b^yD3vhoCA`j8Y!~VME7VJ z`KM@~ju6ncr$EMOob2PpziFun2}^_DYx%~@U;?#d2BKM=0(;P~D4kPb-vYzJNT`8C zbc}vt5@Bt``{-(n21T@TE5Ggf5~qMy5)}GQE~OH+!8G)l%6fB@rQl)GdU|`RCi$e}1!k>QXuaF^$ZM4DWQgL*GdRg8iIbAjh~I z9XrLp6UP|t;Mggra#)poI7sF*0s^Te$f{zeQ6QSZaxo~ZJVGy+hSpDzPikpk{AN}ng~f{2Kbc|#_UbD@j>Z*Q(QokoD62tAarxr}efeHK)&J z2`$nW@_|_4F%!ADL5B&)M07w5Kb_MtVvbz4o#qM?h#nLj3)K{3Vj~)TZJ^ap(^A>W zmCGH^KW>RLYY;U)fGV9?``17svl+)dY>t~S-Y1$b`cD!{^}y;v+WLOmWrAlkq+yt5 zNc4j3cB-!*hBl2uDr6d`o@g5B1xE1GEHu3!DoYU+469z_dh{`56f+l1%7ybn& zCDyhEuj-~s-?lp`&l641kts!{w~&IKS=<_-fzNjIW-Y#nwWSmY(^n`UGHY9hp#GQEih~0Xx zm}KyQ<0Y(t$6K+zM<9NO2!X5GTdmr|*}c9!g-&(M<=trEytM#f@p0oeqJ1Br>iw+M z{^6>zd+qjo-Ppq%scD15BXvPzqHxUQ`UYf#Z#2K!Xs;UJJ=VybRhz4JdwbpHTGi%j zHni!iEh=Z6iss2nba)91)pb7CH9psupBTem0BYfLu)bsbGXb9i7wjBA`dH72wB$yY z%>+|Vk+BE>HO?R0up=csvaODoU`ITregN<5h#%DtV0n0(#t#&t^L)kqKw%DK&r{rw zUEL@ft6dQbq;A3yJK~7Sm5X5YF3tuNr|QZSMDVg1v2e;fTT$K}pk4-`?qIEz_G-n3 zymzAZ6Gi*96My3dY{CI{rAUY}*&7&y$Sg=(!|%;?IJF@)bq5P1Lz6OMio7ObDiO5E z)}yz|68$cHVXcYYc^_4GFq4>wDM`_G?7bsv4aPf$gm$cFtBjjM;fQ9Vmp@6;D=Vyk zsHniwC*{yrRDmb{Mr&PNJ&zGoG&?}+#z=GoPo5a(UpR|?=0EsdgJ2bDiP?^Fd z7JyRHQ&W}!1jN($&!2_LRTvr$Nq#C^5R6VJljr#%X5o|F1T6fVGb58yJx7+0> z?`)MHPs(5Ys_%y6rERnX)Hc9Ir-luX8w+0@MJF?hs8#*`hfruu40S5>-Bnpvf&G{X zvwRr!`tIMM0w4Zgw}17~E4MvhDsa3Zo^i0ZrKFD#JM|$sU0YFL5Ku&&U|U<4ZERv^hTHa~N1V3QYZVbgd@Su8ZSuv=6?KW3)%#51mN zlUGm5aAm#3UX}vgDRu($UUoxj7D6by7AWc(IIrEs4Sn;}L0Dcyh`!Xu{m-p6r)oZ-B=#5@bI3NF@k0CW#bX;4GHW{bGMqAlY|(-;#dX&^22z7~%*F1T>SWx26HW zyrFO49lW(AjAX(1OO2!VTm8@kjk4zjJ)t0SP>si5lTZPrL`*VhXtDYzeG-`k97EmqPIIr7 z1hA$APBq+Ms!oV!J6*76fG^QKQJV~c0-^*PIoKUnBP^;!jmg)ZV*b<&JLc;ez3tP0 ziq+LclwtSDX#m6Y!^!INt0cfQt71B7&x77+pLVO)SIK4yeK;w5YiOMs{9epgwhGkt z#608Xtkk8F4!)YMae6U*i0yZE+%#1DUR3d)$5*mjG#aR77Gls#H5KhAMZ7+b; z%2A#Y`lo>*NC>|g_6IQ1npb8S@arPO3cP^_USw3t>;l`2Z5J2uWr5woOyo8F1MBQD z9MQdv1L9+F3vjcrKOCYju${ZeVMv&jP-ISM5b-G&3M8&T#NnV$#HXP71E#7~e)8Xf(@Y@R4ia_BC~cCATieyGas!oZ z6J)U)>1;z<78NYt^6zpBH0FLNf3w9+iIkXs8ERr(RH&E~lgeJEV665EfjLr#Wc^_^ ziA*x(=s$g6%1P_I}r^bOG zT_I|=OE%>}En%Xb5ov;m(gXzU!x7tgEBHZIJ`2)F8nfUT2yP`#RN2sr5gT_yA5@#J zv3df!5U?fPT3|z6blWG{gm}!+d#8)75Q*6_x{^+(iP;lWtmLx{z*ta!@l^24u z1tKvYwwxwPZ&q5)w(4_;M1B3hP0*W3o&x1*380ZD#RTlUxEIm1UiY=CwZJD=VTqfi~Dwg?(Q)QhuZ4R5yU>jzO z^W8Z|RbayvdzHK;>!na#_=8sg3L}hfvB1(5K{QXC1ygxmlMQ5IK{bu14}LcG^Q$tJ z!benQT!ua=!MDz-f?=0Z^x7+2nq;p2>aDWJ2rf*jSLftr6n_Udn$Q!5c`G|g|AaUH zKg1ZsK=~T%mTta5QF|LdMj%BgFuXEfMCXj69gqR*b)*AeF z*Apb2XSq8pB@AaI*;SknTe~7rNUm11L|B7xI+NK&VPST~19os2TlCl|F&_SZrUft* z#9hLPAx6$Tlx!;&z}O+~0xvYS0=!U^TUZM=VHghkFhmkmfhfX#*bf`x2XxN(sqB=FbvZvcq;0Ubg1Z+4$R5=G>(FK|_lTN|V>F7jM6fR($*9x-yl&|ONu>IOz$EK8h8VRyU4(>mx}Bm{;Ta~ zARfqAE&WD2DiUQ+$h>|T`51{3B4ZLIs@e;HZtdg2vZ}b%!LPMi3Kt>e9Es~l0|W*u zK&&k#ND6zZ05K`&3o5|%kPMRGNs67bB>p#umQs$t3No`Fv|ZidnDehJ;LKA1%Q~u0 zg<~!M#D2gS|D@&B5y(L=-!FZI&RN@;&{cg)_>o9g!1xu<#t(Z4)1!Jwl#2cVF$nO> zj+PT8(x;v!YJi{FBq1alvw{%S${|iriR?WZGhgeBj|;xgGs0j^@UX&)PMje5puGF~ zYzT#+5E8s*52)a1F&=5Egi;FHGJv67u z4p^=G|GHhCzCA5J(JDXpHBXB70tMf+L<>16PQzuA0UzDcQEekJSVQPzU2Rad2)1Z( z97~7*>K7BMceeh3mrZQ>-fwx6Ur)-_-*)TXVB9870<}b&_Q4Om=74(pISuKw~89cY{uc~Gw*0Mrvv!l*>H{jKD+DRY;DTpM3AOsr- zEvwF!NsgeO4!)Q|2dtk`>PTpIG(BovDol?Y7Pdc*eRNuIZ!cs{2{0luAD}IB0zlgi zK45F8LmDC~Mab$Nb)v$rVry_#7WCnAVIB(>K-Z&*hDde?-Yf_4FSJGu74+sspfw8Zt$~bp6?YN)p~eX1g$}byf*@MJHp&dK?Nq&J^tUlq zqdybht-lXZRVTOLCjeVGU{wlpXcmI=^+;DA&&qFp!|CeadU$q7+FA=OQbBGITQ1|w z$>C(X>FKS}FANR4hg_)ODE=;tKE`uH*+W*7ng61CEG|`k<+UvO=(8N>0Jn_c#Dk-f z6lk|hM!zgSp*2ZNApDYZ9ymK`IKbES`>fdL;X&Twz0r6?$)_dTc{;dt{nifkUeyTW zjia}jTT}q^Y9flrgw13`++f|~HVw%JzrWfl{}h+smhz?hD&ukhIhs2D*sA;oqjcMC znYO6ZtaPns*2#bd;4O3B6>utpo9$GN;k` zJFp)ePWCAG7cw?Q7TLqh&qBUc?S~E%Kr{t^h*Y-}0&=?$Yo)xjZ1Pa(13sDWu&0i6 z-R_i`1_C!Bq~>Xfc|-y4v&@?LYdF*v)57C%e+XKQ+$j~YBCI@u#w9}&#;V5 z>KDL~SZ+JT6!XmxEs9_TiHkO{B2cLcT68}EH6r<%Y=WwrcC7&;tKhc;5uXxG2vwPT z2dP@<9!5Gxa@}WgASy-Qj5F-c=z$>###z!5T}$gnsC{*Ib3%Rxre~7>iRxtF6AT@b ztdDvN7vxngmegA%!=$HMwdcz8NhSpv1d^x+^l=4?6P6NvOed8ULsqB^h(L~@YD8=m zpHV#%%&#}%^$slmGL^`Fu`_HZG|d9ic9MQ#M(2^4v!(V_=Qv-QcQ)B-(wL1JCh4+E!_^Xt*=?9`ed@Kug<4n#yK`cF zfZUyuM;!KaVbTrfEghfgt3hUn8~7GCN*s{!KjJS(39>$LSAH&d474bjv_5TO>@=%v zh}XS#N(nFQ8sy;^Y(r}7>ZZ&IsoC)%352!U;FGdFa1o z@Y;I>ERrQa!j1{tC`|;KFjJ*LN5R%?Wm{tXfdhgTYE)tS5yHd@usbIZl9$9lNVMT< zQ6v65ew7^j;8V4_6x;|EVxfJ9e~1dakx9_xf-VFULX{>)cf(Uhw@WZ4r_$&@Bap-P z8H2IBZ1k2PP{v3^B(qabOZFfz+{3m;FiuNn0;y$6p4IKN{z+K@@#K5}H=3um&{K|j z$wiy4otniW-W&bKkdv_CdOiJ=N}dAoBnJRdS{11}ql+wID@J!G@7z)8;1b*60#nKf`? zSXGJJ>pTmxe%q#UE5ZikmwlczM6lA2CROX@!{<_aM3UXuq4HBN^)9|~+-<6%lS(pA zC+lDd?R$|C!m7tURP`VK?$LGjCaeS;JhQP-7ld%+qZaezaAkRUUr-)D}R(tB| zZ{2g>`|tSN8~+PfxXi8Nq#wc?|tQ_cuIpc8YW55qy>M!pRN1178&s-k9*K&g#ba*ClTM` zXiU0LHz#i>W?*@uqV7~kLHQsbMYk3&Tv8^i)N>>SxrP?h(%H8Vc=bU z>?7^+i~rOrf0i8CTb(B9D>1JcN&PEFQjfW)imXHSVMO*=L~c9I@K7+%I-)U*M58M9 z6sEL^ox^eGM6%Sm$CA2ph^-Osfq1S3%lYQ`FrQU=D#Eh)%kcpTn3jxwaabU@Ae7tV z`q`qaiO5i85*978a%%Kxi3IYN^V127LiobP-YvS`ZP$D=0WXT$!Q;0%gQM_bzNBxq z!)_?P9XX4i#e4^qO|rCX*kLV*S)v=0CyH&1nyQjO`Z;Y@AyXx?uNG1eTkJeh?9x;D zwPRCBk}r=h_lXTIgn0uUQc>`&IQuxuXTEP-c$xOMDJ8P1w0ts!HirnLyFopH9SZ!5 zE)hZ8#xFS+$V@OsHrmr!mL@bRbS6N4^r2xqLHG}^8r{n-ILK}JsyDRC9n8A#f*O5+ zQy<^{NngVcjsZ-2nCS7edMttvo71^CknHVrg;1>IMAeH2BsZ{$?|?{JH((x7ADOyM zEHUp6oGJF})&9C`A0D0w2iNk0h8Zm7zHneI-xrpH;^>O~YdJ}QsWKc|%MS(3a}G5T zih_>wT7&t3yNGADjc6X<8?DVN=Q_K}H1XAR@6iJ$SNLvAp$QIJ6WM(&KABpJy}CBF zrY4$H5p2b#WBj%2{yvMH`oryBe+nmgtbCR2?k!( zKoVNIDpXd7^};2B0+BB}r~I~Pty02>#!@jGVs%c|V-E<094YmZ&lNkWk6h59BUA&8 zkz!@2rsL2cixs*jIRBB0B5yb0Le_~X1!D$T&zlFc&BA1Q^_Te^w^IxXq6WEV#3rc~ z5|Eh9wuFxvrqnu3^A-#C;u7+-#0z2(0oY2Aks>nQgTPBg2yYO?CYpj6?I0-aQOU-}f2*b`R+$zjk?26x zekB8;1ey{(fi|^=sFA_(Xgn5Lw2KxqQX7h~BsXu}8zd3O9_xb<-X10m;xicBKap;6 zZRZH41?m=_d7>N<6C)^2ccOXPtceM@i+SvpBGY=qr&+ShBq1GG!v5kVl6J3=>s5|% z-a&&_u$|DVJ|L_uiGO}dyPo(OuxO9oUnQ~lS4WMC#*Z7=MCZ1n_VZIKWT1d+T+k>~ zk@YH9R}+q0v0n4yDT8#)i-B|+B+I z9r(NY8NkDuUmMy4-?RaL49i-HO)hv+#X^C2>$Fhai1UKrsZ75rED}$-?T~ox7G3{b z%xANs^nBV>03%;)!sG^OU{=Vv69v*LVu`GzS)SDMoiB|qtqFv9L$tOstxG7#CmSWk zmxKly4J3qK72EMn+Q=@8qrrbMI8o2?1GmZQByxzjur+#r`;yv`0F9S&N_l*|1NJLg zgq2rvf)1^yzymr92rYSB=B_nF@LgfMP7UB33k?rpArajItgvD@oB?iZ1=U0hu{9eB zj{V3G&IJrQuFkJe8Z=_~lnkk18{z>+SitDRX5<*vfwf4SNchbm%k*@ci3f8M3hW)Z zO-_U*8`72ncrfO(BkVj&7-t3JKZ)NdaZw>NNbe)BO8_z;*ZyzT7|L1`El^suD*$?% zqy@xzW`_s(tjf1w))9?(2VVL`CsG7L)6a@JiLP0;5!b;iJqnWP1@@gPZAmO)Rhg=nToXh=nO(1Tv^RA%LbHN>_!`s`rvmy7B0Z5?@P&I|3Gs0{N$fZSG& zSaTO5!_?4-GIF>kH{K!eHKC!C3utQPBy|7a&0#y}Ry8I3KWpKDo)v6X;?YF~a zqBn8fVkCT2RU`8gO{c{LQKPy=F;W}R0@7kw5C>LIuLxJ1p_^A!?Ttqp`=@Rb$8hn1 zTUTOpHbB>qi%k;Cwqh5%^Z*%~hJ?n03C`=svaa!6@jZ^u+#hv=Mz-USH#rdpMd4|o zF9NH0MUKm2H91!n_ACDcxBz+~_O4843AzOWQ;m9kAs&P1SD1iUUSk4y?3fTAfeB*o zh6(-wn1C|W!~~_>x-uQ7Jr=E;R9vQ6rdgC4`VGhGyNlxjz1z|dL4r8{mI?>E6`>2# z7$OBR-;1<2CSJVL5k)#tVM(zIGgp`yNULW1HY!AM+^|G4I6)Go5*)CrDYPosp)lZV zQ3Ix6hEvV-vq`!|puPE9R1mP-Wc;krX1n~;JR&%z zJZqRdqn5GgYaMHEwA%$m$xO3y?krgDJFxXg6&p*9HKJYk#%t2b2zoeE#B1bqnGMjx zMjqoMkd8Zbwsbq+$6Pbp8T7gq%fzL$I8sQE$I#23#hC#GJ2U2W^9)WcYq?|CzFiam z5~PSc(HfoAsbwv@!4_f0sw1OE2PT8<74Ebli6hpt9rk*6E%Me)^4%Mzl&q~+ixm0g zMj+vCw!S;GI-s7ycsL|LeH2*WwM3-KuNZ%JIKUU_y-bkXnXclp`W=z%VO;Vj+r-Z^ zP$STnVGlVVYmsP+QrFp>Bd#<3jcnwakHk}lo@A0W_*kjD< z1ccD&4d!yEY@nr_cgtqhgyFfDA ze$=>rl(wIqVqbJ9jB-cVrUXaUi?Fd58yo&!@#hIzy(kcdZE}&;ppakAqBQQTb8~bq z)fA0i9IgOF+q5Q_q=@HCi_Oq!lUuY}hv9Lsbwyb71A7!|_KcLH>o=x|wY^)5yMC&0 z7vsHsQ1B*fk_5O7Fu3e)AOm@Rr~rM*{D^3W>*Jnow(6JUE#4=`{ywgT(}VI2A9pSP zQ|7*=_{G%eFDQ8bsE>I*JjuixC8lGO~3Xk{}r6DT( zq^tlxu7Zu=0a*biW%sj&KmsfECJ9^^;MOX0d+FtHL0dVt5>|a)t&4brm4lQpkV#oD zUg$N|?q#ni?wrDrRKE9fJ|TaWmA|{-8in=YNqk7^h1$F7A4cygh*!->?Ev!jqt_VQ zku{I^Ex2VYAU0*TBZunA=-g0|2pV zqfboBhY870SjIG;*T%26cFI>pXC*{KIXPK~4Pe-9TGwhf=Y7pDH>$+V6S&=bY1P)i zE9hQ#3U|H!>oC5%P9;uIVh31tm>pE#J8d@uy1Qr&!oRHa$oY684bs{rDyDfOQO~6T z8KY)ex1(X20?CAMei)ZhJ^2wJyET~732?#AGB->#U@5zS#hZ0W008jqj|E#>$iszf z*F1!GGeSgVW5eUP#e@jVi2}(P7ak-?H%<^V*uw-Ohv1LcpD)TGh(x%E(~iSBB|t8+ z4YlCFPJAVGdAWSd0=Suz9+9XP*)EH`!NHG9GURYX?iy#k8t@W+6oEI|La>(7ZAThr z(?FTH3o+z^DHMCzjIG96#7%tMKwQQvIbewgG8+x{`x9Y{@qer?06jd(_&*kh1pN5e_^!x&Ds4PG@Q#?>-?h@AB+a%OZa=E^{EHfTy}XAn4~*pp(b z;0CS9DcCHC)`%);D_u>D4jI{{tOANPLC%YzB8pidU>RAI2~Z*+P58j6n9{tNx!xm1 z6vb8`mZnDBq#4qmrhvMWDnv2xwwl4-UCSK;x}aj(XuVc&v@3HaDuy1eX2(vyr~%Y6 zoi=w%1nfB#>$0E<_i%6As2M4O@lREua^;zNL^lYGV+R#|tRh7^1>yp$22IZNT;1&4 zP{@ik_B*s}7PNa&!%(q8os{zdw}~ma)^#Bylo#lV0Bb--U9?P03?h=ZU^S?yTC*Jw zIHROcaqS)tYsAoeU8^DhY85!UNUOE6M`{TJ!Yc3LCDDPp5S8t-z!xyG{yIihMT-1Z zxBTm9RRkGDeEE0-@$EN>uT_45T-0AjCDE*960(}s(cAvIXc230of)$)Il(z?6)p0s zbq8TT79TRIxbT!{YDa99zrYm;LU@QG9|3VY!f1B%IhC0ejbmCD3WA+Y2iEiodpN#S zR97c=WUQa^t)o*zRTOKf!$yRzoTH#vXuQEhCEA>;&{8zH+m2NHv087yR3XmNmGK== zSXY~C>RA!ED#;Rx^MLk+H|IOHlSWJ?^9W5pi9rN>25{_VH;cXS^_SBH&t5zYMh z+RIz^TnMe_Y)TnD#K_n#`lBrjdHwN|D|A2kY$iMw(Ssa=qHfENeTWd_A8j$O@zbgl z<4M`&k)5Q^bp9DjKiYa10~wK=lUQfKKONl#4D<6Ao|tZGFVR1E3D%B2+Nw&Hzk8V7 z28=Vhq2<_5Na%669U3XrY* zz0blKN52XEv(0Ho>?lxb*WA79zSQO@0_kH9#EXOvx+G>7r?P^d{(w*BHIM$EU%&aK z$zxYF3!21LmHeA4eKoZE1$}{;7lO1oIoWG^{jYmXbAXVe(?|1Tlr)^o1^)7!?^|M(Pt3@cNy4{Ch0p|vA0`ssA?^`p^;TBCaf z=WPBLx%n2;0ucz=5^?yLt|;^?uWL~XXnIHYX$hwRG88TM`yO{xsTc1Wtr7=Oe8-mi zcwO-H`+OewMk^?%=#6xzBi}OPmr3NEUqX`;&;QN1W$H#Tm6q}W@XgoQ3w`xnum8{& zzj5DP{~c}edFyYVn^Mnm`ftj)>%`Zt^HX*8==pYPq0)5R`qYdGeiW050n>9ebU2I_RDChfTB|@@;#OMh}V_sTOT$LyTa} zDd}}&Vqj`C8Br05(@UafbrQuioe zV^~(|tG2mAbi-ysnTKS;6s(QeLDd=72Km)?vNBK0={0owV+`-FG_$k{kZPw-vzKxQ>Mc}Euv(oX<_lA1SFpBOoV>4#8FxX4z|B+dC zgI5mHc@JGu{xocVDa*u6IIeQFy^yBMMS^D?c#V#2X~H~QBPzP-2QLc12=6@WqT9 z8!Lg1kyMI5!$wo`VNV&9gAt8qqef0*ZMVV3Pj@$L9jNS~Lnx>D#mI|BsTiO%VPpiO z6w@_g>=Sa2F+c29lUgHfr4OjoHR3(VIhrgvb;Q;7%WJA)w86fxvK!Gy|@PTD(pR@ljG zUTB`MM-fl%(%I2}8RpaCNYgx;tq2yz4`nIRJZSf;isC}nY`msLMQ4kp(Fe4HR+D6- z@mB;%@%*B56=u!_l2oyf+C|KCV3}mQlMapF=}w%1=#S4g7q)-U+v5%pWA3o=FbAGM zmR&>sbc#tLH0)(AOCogPBZv`sdK7*uJ-)TU`@^VYh2LGZ5~&_6Rv@6iYw z?jW}xBLZo28b%jEsIcWoMIaq4;jt=!x!j=k`Rm_SUKuQ5_WH*4uPZMR8koI)-ulP6e1PPnO|MF!pM@Nw=5*#%o#*VSvNP6>WSF=8oWjR+3s= z^aML)kP9Rg)CmK$%iCB#(>0DVNw7VN>S|wjl{$f7NJ$ESWjEJ^`=Y~KxD(YPROcy0W)?(F>;7l1OZcKFGjuo@Sn8H2VM>Kx61d| z<{_x`*}*sa_$MYU2M0URJH9U^J<1%JRE!+FsNm*j(RlJKg?1yEw&hf@AaV3l%?Ea{ zoYfO{6egPHyCp$0*D8)10PO;)9=3g7%W{Ud1x<`jwCXr*!MtTSY?pW0mJ?DuU|!ag z@i~ViG5>srDUBCWmy{<@`)1V4S9>{kOLRAsc+wRlaUAH$H#XeFS zQjYQ_exvi^?iF{ozFs=@FZzEJ<#6UoR7y|6M&&fiISaBlo9~NMj@%_3R40N~mAZ}q zYs=EQBm#`H0}bUkr-EgpR}698U=gm}eqndmOWD=*#AvnQMBGK!w7|s<=G6?!EEk^l zEJp}7nS_I>5fo+$3+OYExY#L~yj_96L`E>m4b1GBRV1f0Qle883bf0h$)2IqBq4DX zhiJ~6kS-AqbMv&rzAzFN$PP~8$z5m0mf&do9tkC|Kj}xu7JwN&my(4M6CrlX9+~gd zQrt=gopdp}USm4Nco`@z0ASkE3y)vs*5jft7TB{6c9~w=8nHj@KNIq`Jg<6z9lCoki#eN|I9v$r03%WDJ34(_Yx6yG{tQHR8w7!^QGDKSwyG$n=2rw_M8>fIUBL z7NR||;jhuqF0ws@aLwDV`_q5F@b<4?b>^Cne@uV=>Z-GO5Mc=QgEKjZ8^%FG3}{!r z2d5EnrY(h_iAc0h@|bRd24B{*fNx?Uv^b4Uoi|&(%=YpdulWh;^jBK_2Ia`IRMK^m zlPHY5h}lWQt))VVjXF+8BXm#KJMT@6`uT6m{z(7V@;?UbJa2?R$4We^)E_?#uC8y4m%n}A6( zeWm3*=2e=)ylG7dzgnixsCmnf!AG%bm5a4dAud~$@OrfBm#l?c;c6N->)ndAl>hiK z=R<#=l%M|x&ze=fjbvxyO|NK;pS>5uwVt8RRpnkgkZ5fLX|bmDNr2@eOGyU;FiT`I=vnEL{Hg{T@BX zhSdQaZ(bWKWzA#beP(BN`mSV6E1ie%;}(|Ch((pu27(!EK<1BBrq}ZRKXOoiq*cE5 zsaA76^VdAd4<_ZK%QkI)I+HGP)B-x{y)L!747y8V;G$+jqUcT+MKKCUOcm5X4c?ma3puz) zzudnm{;tK}yZBXn3q}@gGoJFzA>4>0vHwxviihn@X-OQw7+EU+PsuBs^%r_U6s0ZJ(M7^_yXP2nu9yN)Y$RH%@ z9rf!cl&E(Q7!*q)QSUfi?75Uoy<@#h%|ymIG-XNirLFHW&z?j`Hqm+Z4eaI1_Y*#u z@6)1OkJvm@UiQpZ;aDJG{KY<1~m6mh>eDIk+ZL!}j!Z%q+*%X{qKH`%{PemuF${^g9$(LbUCxjP8hF(Padt z;p8D_;$>dlsB45BcNb%%zWG|JHc8&$$|`U*XU8SfoSmw7r%g$<{?l@1?qZmIn=rF{ zUt-OtwdS&A&uh5})nvX$uFNPoeG&GZjl)_%m)Xs&G#A0=;mL+#ipwPV*s z)s9`Fp1T@q$1dG|`z_!2by%17h`?0Y~5K^P2E zBGXeIFa$q!fQlDuO3UsbWvteYnKhqX$LLvO-+|20mP=opbBG*b>d7^52Ke03%3|y4 z$vA~urJTIIU4HP_W8{!(X=pTFakO*8;{A1~YV_C9P7VW7#~w~@*&qc}C-rF-tz(3& zTl`~Hjdje_LK74ooK1H+i(iv0g1FC??f~J&fhrcSgEaEJ`bqLVfdCU(qTtdnLF6;B zc#^%^JvLVR#l~vCuj5xNezmopjaPSEH^og3$#thf$V1?SR}$`orJ zsXK^7s-MXTOd1>Zq>P`j$yd)_XVXIO6QC27T_6E1k~vH>Mymnmm2?&CU~Ej#7G-|m z+LBX9^6H`wo741g3zcX}qH&BVi^j2OImK-p>_h^;JJC2MQ84dFy{pdd+8Z&4<5=lR zhQa_DmT_#avGP6jYq9d|QpT}8gNsf+=tH-W9OSoiiHzJA+{RL%3Bc+#OYx%%2s983rs{%K(nju zaZV3rH8?%KS@s?bS=~w7566COF%r3?PqPU<>^UPI=UPB?)7p-0#g`aRz*1L=2_vx4 z&TL(>2eV;I?DYay1qtTszAimMU)jxl(Y{WFJs6L)8P~Yu;nVp(CQdz;Mcu`kmXkyxy4mssTAQ?BQ( z9X8V~$@R=Nz9Rm`iOs)wizKn&MkUWPdG}mAu?KgwL>reOJbB-}uJY!acydtV6fU?~ zG2dhJEn$lJEcT7Xlkp|uiA})1<^(K+1uev$i%bAq*UW$pO^sEE6JXGex@exbu#Q@me+u&jdL9K++B|8S;B$rr$e_kLyW1@$p6#_`^uq@36Eh@tW zK@lK zYp7?V2-B_dRFFWW5@G(JQ$AXWFsfyP2vcn_b7#3;uM=Uq*wU<7L>St;hzL`A+gSqZ zn7r*uOSf)-V-e;Y-su;2;$h>xJu>&%K_NP_()ZvfV@tf!55{`C6B0O=PIH)(Z(|mE zwbybv!;G{9^9jlkN|~BQS0ADPpDVJn&`xZcXK@}jY6?0fEo8Q-N|nhzrzf5G*4icC@%E8nS#pksSGV{I9-poI}Yqx%W& zC#Wf*251!|xgv{+sKOZe*_cP^qFq1vDVQmb776DUM=Ls~kyU7Z~jF$i2YNy{L6R_$jc6;;kF4&w}Y9o z59IXAFQb;mZ3){DN?cL|P_R9z=e5;|4KNJDPN-o%-OG*is2DmW&2DiXgb9?S^Jb@< zWL}AkHxf^08K5wVX=@hCM{&i7*#o8Gxb)v(dq>ddZ{cKWi8?NqStf)SoTh_JV|*6@ z-Bimba^>=~KyVZSkqJc-`N(U-)-=!NL0lN=1Yur7ce$6?7O@-4zKTIXlW8f)=;Jf! zEs?)*2NAkpml7TO3ZprEUUHKsG~D<(5Vti9r`kH91i4)Mt8HUbP2HrK^sAF8Wr60k z(XG`g&ZLwML~ap}?obYJ+adMilq6rsjZOMsTSAP^uzy^kaN25BlSr?pB9RQEF?bEa zViw7jqG@m+o?HU!r^BQd861%*EqRCq;ev+~9eNG%Q#K~6h6(9JT(4mNj$U6QS2O;4-c(y@=vC#ny@0a;sqn&nV__HDLMV4_ z-cO+LAObl%HLB@B>I7!T#FmspLv35OSmFFz~g_$Tmk(ym0O$}D^-jyM8U2#bu>0d#JJ_N zo(^2u;SS#1#by$8S9+8k7tW+oE-P8eyc848F;c1>EdCY}XK{EInup^bYJ(@2GUy5l zRaWrJR7PhF+b4kx*Lzt6xS%h>G*736nidrbQ)-|q4rmYh6jhO?EWjUCsNsO`K|MsC zR)`F;DPy`L^8mVQGX?oO4v(3onP*~Dm_AC8zX7D+^?(A(lRRs%9^EEhM0^*l+e)0q%#y2}fk5KkF>d>TI$ zyY9ESpt|W8qt!tXw*6JxPxk;sWFD(!IH%H4hC>A9t%2B)^&l3_SV*5$furjSMAI0| z}lYD}SD(+N$U;>PJ8m(HGTU zjTsg_`oy5vJ^F(|!R}G47m2dqvB2xOs%>?xxvDs|8Amu2ATsF}JAxYZjO^HV)m9Rb z8I-&RBcKK*3kH?gC;(vjO-S_6sy_%b^k!R_2kf-m04=})1u@O7VjG2J*Cl7=3V^>r zJ%F?FYiLlHIn?6$fv+mLRw20r(VAB|JE_1k_p-FkqKd8{QuHN$@2N z%P6Xn1VQ>O5i0UUUnQ}T@n5ai)2G`>D@zfos43)FBP7!V-A&Mjs?QH-4JU|vHXr1$ zeEpU(l&!F6VW~^khG3#wTZs`arw`HQYR*m+!zJR23m@A2?lHCd1$1i`WYfY_J#Bra=kR2K~Dfyn!fnGT+PW z$^)-Mo^~>4tmM8oK$!B&nU|vOS$+_bv%sVwRgg!>+->uS7qdA6hGp&A#fvQ>r(1cb z49zoqF@qnRk7gP0$Wmwo>og~UfDv=R{Z^(g@)$D;ki*YZEBUjq1ueTNWYXztbg0D% zZg8wQY-#Z1C;;sg)YAdgJV_@cZh#CEBwQ8IwbTnTuxwl?Yz|a|$fO^of-{l8Y74nw zYKBU&OJKod*i^i=8uDDokq#)n!!UC{g+b4mDv!nF zW{P#(}$w zF=i+hFxH|^9aat)``oyUgRra`)t&JmNxVB94)Nho!#op|*u+@(#;-vJ##!gfvoV7H zd#|O|gKl{`*swe;%kp&SqL!yaQX3C7EKi4Y+q66_=LbU}uqi@V=l^1`%E>=#mZzn# zT}G$vW^~#m?k?GL$QGWyq*?+m7Na^PAFNziILS;edj*yU8G=?-#M%97EHXc~0{un? zmG!Wlz7c>c)5oB=vChY$ipJ3+R_B*m)VXkF`iP2norI2Cvz$9;#Ct*ltFBCYDu3Y< z2<3$7+a6Pq%zkij77$)6 zKLEE#i{^slPrSg@Zc)zo)lC}U_X26a@>JE*0D0-09+E>Biv}NzAYc4U06LK^k-(ij zdS}trD~}19xtPOt{VXV2!0T9|H{!?z?pfuMu#|ox8DxOSr-9m~GE&HS0E+X@@J&x4 z*0TPUtXa&UP6>@Dy%_+g!|W$SMd?SBT_K+H2Hf9|Fe-YcvjI&Asbm9Ehm4Ilk6aZ- zWRyH;^20ohRMM_cH6kzhH^M=q(Qc@z@y8_KhL};~rg3AgqK{K)k>%xOM2)}{Anv(~m!UC$XjX2GO;wvxXLBM8v>fySa6OD&sIT;cq&SPf(d}AYe-!vWD=d)P8@|VdKUG4LcA0TnNu#z6MM_+B2 zI}d37j~CTiC&^Djo^eoxZOx?aa!CrL!}1!CCkWO}Yvy zt=8C3J+X@dLpO;ANuwNu-JHCu^*x`NN!H>I-j;GKu1wOHP>Gh33DwgMhA!VJlof+& zYBo+T5z(yd9YgG@ZeQixT^*UI^g3Wb5^$s_cTK9OS=8J_5Rr`j+n})AdzQh#G&6!* zm29Td#LHzgWB-5{lFyK80GrG$1*BDkS@oD>*{~HeKH7*$60%XRH#!q`&p?TP(Ac{g z`^a_VFfzwVP4Q5yVoMl^zd;zh&d1T%@#kCdlEKI3GLET!arzRf3!WlA^>JtR zQ-1knn^QJo0Z+wvuL)Y0PMm@`>a=z20pnLUDHl(YA||~7nwSta4IrE+7WfM#YDL+} z6F_znvpQnu?`d}~re8LSy=*gq&}0+{8H3mFMv?TyqZZl5U zam)b01(_D~8A|8qL)-Kzu9-t z-0W)`JRbS{=3EB?m%6}$%#tEYF!zkD!|wL>iVp4wNl4y$H7{1*Oo7MVc^fQ%p)qkOHk45u4OA$uL=YZi}+ubjlz0HxJL$Z|>gZZ+^tz z+_xpZ>6B0MCu_U(M2l2@=1P^#%CBGU-~0vzY|~9U3q!W>xxx~rOjnoz0_N|1 z#pV-Nw2~iX)j99x6A2qVEZB`*u{OntXWy|b5vUU75k=x_ZXh{CcnBjR1|=n2_HdGD z{#Be;4^|HZ0|}-q^^S0VJ``TFFnR!)XkoL!5|L-+52@~iKubNj?VV;zq{+aTz z7xVn~Oxq!N`Xl9&*uvoT+N74RdvSTsf1t=`+p);MD6g!GtaVl2L;s#HpUg+)BmZ~# z?OQ4Qie4=Il=7(*9(d=O9FX9|_dGO`s#HUI^?o1H!!v5|&RfSrx^Ih~-241$NFV+; zMjnN54dh?b7)B zGnP1-92d2aLb1ZhvzB1*FwFDG$)df4L%6qcLbaYK5>}5dpSe_YwPA`yBlO|(o5`)i zC4TQ~jd3LQ=jLlq;lCBbh{DdEqi2fYdgd`~Fb`9zGI&HL9+vSTdt<-1Pf=JU3u#vu zm;={g$BllUO`SGS9e>kXSvLmKV6|whY9UGfHJF~2M*{wD=0QUZt?Su?v?4>Ag;(Hz zUO$>AVub`z%AJydw(D!8X0J0CpC+b(jV3~C$com+njaLI5jte5388@$EI;x6N87I&WXjA6Yu<- z?aCIcu?>XXDB50gyEZ?!XcwupZ3h!u7>M?&01rBm6IQcRcc*M`@G5ekb_Hjr@?HF- zr}Dth%Lz;Cra}0oNA1+8KEL$frbp^U0CqrGC-p}5La<7C&w#l{2%ByPr zN1QlB-!W{JZI^p3%pW5`+jd_P@nN3>axy|@($8B0K#(ZG3Xa9)BpZ=d{sU9uD`Zp4HEko z#yK-&+UdjlJDt6qw6mwh5v832+dIoUsz06ef0jC(Ep3-qzMQN~cNROFJ6i#Uto&wj zj8o{d@*jw6k+tSS58Qd%$ugW8ZXJ{_36m>$xjAqmOqrli?q!NTv$eeKx~T)h%VdY- zm~$lh^k_!^ebQ_ufjEuS0Gty9msh4!Toa0cK%y4R5#11`SRX3Z_U5Vb;B`}nkZXx4 z>6G`+ohVmdrJ0{i@ba|EWt~(7CQA6D`<6ga-xnw^ zKud~;cIrsLHzcsYFfRkWY!POxm1PStnSjJO?Ylfgm&{b+J7IM{x_eum4iEVdrU8;e z5aK)TPs`7IOBpiC*Y0);AET3>m4ObEfo9mDk9Cx9G5Lcg#_+MbFiHs!Z{ZCfd*(#GNJ2iFxB*H6>xD%1)C@z|IT+3 z(voll$i^AhTp#e+)s}9>Mw`A$;)c~#8$dO452p3Zr8?GV$B!Y9hXbMc5=L!LAqpkEE^I!lhHnDam1NWh~eTv zC-~7KmHT+IFj|FDmKPSJ1YGO}lEE(#Ohc76Jc@auy^#6ViQAkU)S9q&>W)xKT z!_?hBhfv|BNIpnueq8BgaTs1s&5!Hro99u-X<#bzG* zl0VzmZApeFUfi%mnfE|lI^}&TDKTsGwSnMHJ-BBsiabez9f3k{#`l;(ye*pZ5r?lH zOUu%O2E^{k3IUx$7J!EbQo2InA&*Y8vNAo+nqz}Ansr1Qk#+o3J?o?h17L%L-l!GARX);{=8F+k30SvXKZS%#$s-|MdRo%r zD!Gn1-y)F-^7gTJ;8NfNz|aJQw7i^xo$~SlUh{|JOXy&Hi|Ie*3=o=8PA;R^lSqfQ zDC$uVzJq%BOFCi8(~>mok}s5XqjZ%^&+*VXTw6kz{L#>+w%TD4wf()vK5tWaF8~fO zf*p6Bx0s>%w5;em{eu+GB=r?Clhx%^9AW_8g5wnG|66wG{%z|P>5?vlO3`{|fc3E6 z5>bFJZD@k~*+)9P&kK_EWTiBFg}}+=#1d_o;i@A!I|l{K`EJI`9(}=CF#(>Ge}+@F zd@xxlw_VRN*f3YhL;O7)c8@`S30z5@VFeZ;6bpg^Lx5^I$)~F|j<} z|3710ukj_l|3fx)ma(uX7?ja-wlj80wq-d`Bj3O@rGvBC(3 z$Ha0#iN+%m*1LX*-?k}abY9&xUglWU#V6p?=H+b_E`?R3pwN&7TN9)tEMEZ~MsCuY z-#5omuE+~=-lB8Zgbm8?JpUy0mdE7`ur|tv<>SN|XhS0JUVM`0e*;GY@JgL$GBgM; z=`RYJ)(2Tph*(B*CQ=zU?c-!K5oUQsSsBfhyy5NWdVA}pERo#|cI40O3-$;oKQ%~9 zP6g;AwSehEV5@w``_g=AUGJ@jvF8Rh5fZA-!%z?ihvnB96oX*B6zMjdwh~d^%Uj4W zY_3K=G8?-k5N8o-3W;gjx_CHI8LQhw9>p!^6I2AhFi>15SbLuJ`5$1gvZ!maBY4fM zXmW!>zWumR)I2S+4EMJlWAZvtlkz8F25ipT@eD> zyunhSan0tUPb65Sw9fa>83uvCnVo{E*8qE4MMM_eB%MZ+bQ(?4ig$A(ZDok+Mg7@K z(y8VmjV9@yTcOfYCh7RbP0~F#Kc%Hi()On3=BE^Eo1TE2s0C({PNPY>=XR&Glu0^% zV@B8%^IQFmo1}YgfhDvalXR>tnxr{}*C~@s()Oz7=B8A3IUf0(xk)<33a8O>mao~O zMIvf*wB5Mv05DKxHulOQO-ZxJ<5Lvh^OtUYvoFmWonlChFYTe(~Co)V|1Jc+KN*ldvyG=vPbjMOmJx_dvtv1wl}LT&WCK#aX$FMtn}pX!5qz~ zFh^^nLhFUl>xMxZM8#4C$b9F)&s_0LaZKoOl)E6EFu`uLTXv(B8gv!4*48#RREuHq z5bkIXX#vQSzb9>2tLf$n%|BRMtLaj=vR3mo_Uh~e)Sp8~qN%?&Sohsv-5ndO`%Qy2 z2!X*GNv3ZG>(mU^-Lh%0?wY~cipXGH6{!u@{ieaXYX)m8EQ59G25Y8o1v=1|!J6@n zXV54I1Hd{R2jJ#uHab=2>3RUQc{&cj&C^{oPhT*Arg@qP#XNn%0BZAe96&TrcilX_ zVF)4)^dD1@&u}}Mr_HeePm0TobO~~ay{AqU+J+fzjk8@=n2|;EblWh)Ue@(Ef}~C# z+J+rgAa(ixbpq;jR0Z`ld^PHVV@T>`qHX9AKQ-KFvySzr6>iWK!;QA#hSghl#Ze@6 zdeJV0A66iB5u>* zGt1^0P>*zIwGif*n}%)D7%|n*5dtH`E{Jqs@OH0eV&79qAY$Z_o2W@bwIscM&T?lo zEViZ4^%Q?-CNy82GiquQndk|h3sf>1WZ-7(iCq*GhD%Cm<@*(KPfHgFot5(F39~Eb zlLCT_A~a&NXb({DG5sS%WineMz)z|sCS*cJ94@Ef@$}0$eUNBbq7!1YVQpDUX|tw^ z@&#re;(2@*mh1vNdMQ$p5{#{ou+P%r15{|F3Zq7jL(@zM_b8bhMXNmNV?xR+!3OhJy9R}-)m6#1jC>3>{3z%QYQ^Y$J!uLuJqm zwN4^EnoPnKvJ@j^8TJ1&*gFmrL82$^ArokM+FWi&-r}#Mxp~2=&(t;`nwr`ur`x!| z-h&yCBH79SS&T*rw{mO7v8kNysq85hFdz;ZBXYG3p-S7xG%7xEAPt&BK6n80+e?sL zjR$Fw2IUbShD>{WX}bcubu+sJXaYoAG>=qed{IPhpEQW|DZ-Hh5LW%$dBKO&E%_P* zgZ4+nqo?Yk5Q8tju=Uz0k|xPsHYgv`=t%_{8`E@}Me4gXqb9I;ZfJtI!DbWERJsnN zjQNHsLWVVPW}@oQ03%tZXbP+`Oba#;_4+{X*&xay;fI0I_xtsf77CTeAC z*__YsrApY(;e;b_WC53ch8|`14zMsbBJ1K18o>Gu*=JpO1xBYtW~w_GzfK87#}C@4 z1gn!0xCn5e5rS8aiF>nmB6=3EbDvL;El!C7HcS51#*(Y6Sff^3Dm%bDfVU;I^HlcX zs;<@5a0>hHl$HvaOvq=4Dn+XYkbr{*Oze}*Ol$!Mk_PS&Ypx;=KK1YVI$|W&ukR4Y z@JQ%9M#i$iBf)4|SAPW6<~*K=+9E#Z4v9G&SJjnmrA|dCJ?POuVS}+;rt=5jI93id`4q*dz@|WsGI_tW-1gNZCY9>d-QAmE4YXGzK90DYc zk*)A#qI}>#oP_iPqQJV=fr5;Wk~)jFTG~(7OG~vss6i9#8lA%7uvv!DC2&I+gE^Sz z*gqy5eKC2!>vU_#%l=omE6%52ML=MX?FGc1ihubtP_;Q4$vXO5o_~+~zy4cNd2z~D z#z&v7AF*=h=LlmAI|e@yBN%a0gU=SoH-?vIE4wL+DsX|-$}E;BQF|*Sf|&?b4l@~o zgS-n?WbhyNXIpM-y~NzpYeRQWCqg8-rdK(w2;(rf<|o2=gv*c}xA>P8MS-t*K~Cl^ z>Ja}cB07`pBlbKcO-5I7bNRPEU8!_@|{m(2s5zkjI!T=;-fnMe>Pzi!l?* zGAvwI^kpAk90{S0!7PqVb!o88cl#wGsJS?3v(Cs(&VSOzf=xFs(gYCo9wKrCzVy z6UXksR&Zixy-rVVo1Qtbb?lU!*j*%!%88Azw0?jF@9ePV}#dWK+2@8nm9ZLE?E@LD=E$s_ZK z@ZAl%mxnML?(_aHN=C1in6l|`x4fP-%PBfy+G52ScFB4sD^|>jZ%io?L9?`2{JPT4 z;=L?RmTEax5pnsNy))w{qK<>%{P@vG_j9iHR1R}n@voWnvbWB4F4uaA<&z5Op}D`~ zO>~~y8~2ebh=IcHJohjB1-qzuQ9I8ErJU#Pj#}qDR~vGk>sJ!?(88Ae*a#ftAs9Qt zd9Ia|^Bl=f&T|~=Lw<0qOH@GK7TFs#o#*QpJk?T%xVRymlGq95;>-=;pdw-NZ%?_c zsaM|76VtkOYL{MbXX*Jt6V=ZU0o>rCOmsWK?YFu%0r_9WEy{*1Zo|n_Vs=yI*Q8oT z;)c9Z8IajO%UP6!bD^?KNPUB~aRsz8Z!FDJ`Nsgjrfa$QVsf2PuZ^@z{10rq;IZi5 zu}JqMc!;F==ylAcj&qc}K&`+RVxTmq!^s^zgp0Pc;FkmU(9xIoZva+-XQhm1hZYzL zLFB%hX*jo0r;buo6jd7`i4QM__27XxIkgGYznn2a8>ky}5@BqYUr^g}3{zO5@iSB~ zR9+k%uw@iOnh0t$r^7g^{}|4#&l!NFenYx>C@{Mi;+p2bTH1#UMr*R0HJLAW zGkl;0Qp-up#*_Ndqc*j_o@Y;&7+a#-8=KJV2%j|nx&LRF%(Ap^@ri-qh~Aqr8fumP+Mz72QYNP=xw3@wgT&fX2a(Ks-yXcQ)XDs zDfHme)vc?Ab8R9^N!Cw*>b9%1tBL!OyN`c&*^|!I+Dj#G-+---Og3Hkp#;{h2Ex`? z*>qo|iQ`jJMj;Jd)+kPVjo7suX|sYN632xwVji*3i|bi6V5<+lae(p+5GY(TUkyaz zdu#-K?9z=ypb>~&q!CnfaRq6Ci_g?hUs%5MWin!(0xYKq(&*?g?bS%+vH8w8xqpr# zcCpRi)P(@TM&WoZ}WdQ81A$q?;UnM663z{&?B*KtCXW9WL$h^&h z&=T9TJj525s~oK&Lp8<`gC#VwDaYEUml>tY!{`TxDFtyE0^ri$e*LwabJZ&EIUUo~ zf-2hFrXyMmx?wg|>h75#wWOd1mvJEIEGJ5_QWYnVy^W^yp=4Ma?14{5<|2J-3_bW+ZGZ^9~9 zF{hRpz5%sSP$Xe7Gj+qtXxXqOSdH=gSR3-Bg;ZL~0b6%EiPztRA3BCCGjWpc$ku}1^ z3(LDrh@3K;qJgm5vM!Q;v)M&|P8VUR%`OUrX;f1M#BBuOq9-7RDkBYuSCM~;O`uwN zo48WZO_=xe@hm8YSqPey9GCIONVY|UgD$L;SuC6*;Ha74iH+45USt)ubYLX)>PYK; zMtlWXQPO4I(qkr5O*=LGF=R+}Pk&`1t3*!Y@^p)c1(PRZ@&5%e6hLd-VK}-(*{36@ z@-~*$9m?A!%6d1dvbv+&ePb33-lh)ImoP)>84_lhjDB`ovF)iM=y7B-Q2gr{!$j3% z-X=n>>9Fm+Pmu`IW_|^oB*qi{b|Ho36LpzYwAPSK%JyS%DXzkrg)`z7UYCZ26MfMg!aC3yqx8M+?pYqUjAyJ??95C{rDq8^{nLkX;J1OPr%( z=Dxds+gaY9u?;M;yz;^L><`D!CX*Q1H+Xj^?Xw4$9k@p!=+w*Nmw*4!1O&QIDwht@ z297f3Ny=pn;z|2F{2O+goCMjqGQB*t&}f*CPD%+@mN|lyXdw`DlrTRc`ZKL zDmuPnwY-saU_}U_JBg~ZM4qx`FG?0aMo%y|yQ?_*ig|!8d)_kTf$?a@NB%FiJx#^P z#>dK=LUo-aKP@1h`Yli#c?B;daU?CaCAFQJrANa6)z361WfK)BAIe5DqbuN^MfFx= zecyLGvM|Id;^7_tj4Gt8a#;B*H}gxLyO;W|RP}G!ySc}ILZckn%qRz4vr*ah8Cf)J zRDyV$%YXi;kn{dO>fSxtva71|-;Z<7eVlvio~pW4xv45(pF;^HNubae5{#y{CLzcx z-NW%4{%3j+f5TCgZVA7P9*iE{rjUmaKnei~QQ)S+yM2@`lJICLYFJr-Y-Fs5pw%&p5%Zm|I@~S+lg2co&Qf z-ev5nGVwMLFv+D(U*&(%3& zS8|w>$ZvEL2`;oGQgR_5`1KCfpSy%USafe=ooi%BE0af%axY3zh|;Avq>Ug0Ly2p9p)dnFW?q`+^z)8jKJU#agZgd!bV#D6R^& z-86jdy?OnchIKO%m!7-QO5g99c`!kv&SmLRMWxGrcl#wd#U=4_^sp8J*wn?zH)2RtY0A~bU zR8XqRT^()NpUUL0ReD+`$L-#zSHiZ}+y0{6dg{-lMJ_(CJkd6ZS2neVjJbg7%!Vds zqL-lyx_p?eXsH%^BWILGB8Xzd@?x;!(MHlpd~&mN7|L+QZr} zS?CQ*kE$l-MlQ8U`le(ET!lppV-eRiGb;T$q^MXr@0J7U2A|Nv% z_lZ1rRr^u1HF^GUsFil>3M+a2*`#**jK=oP>)zRuj_I&s2ye0Xocu1W16=W?{@Ue$ zxMNm&Dw`vg3`mDrF?=B09>ehE{Lv@wcYm@bNAD#{gcN3pB?X3MDnv*LP%;sYFY78& zQN22JDAE3G_@{fz9c;JG{|kD^(LNbP93=mjbK|x8^cR*L$~`$E~Botqxy4f@%?xf%FphWc5K8vJeJEjUM}Y(Y5fRB zca9bg~NSXz}dCeD48L`TFekD z*fZn-F}6wFMq1Jt=de;}qutbYLFwJFJqIWaS}R zsKS*gFRj-JHh~Csg^@|HorL4n@BBUKf(Rvx9?3W56|p{G|&z(Lf)~c~GZXYGTTMZl9N{nc?{L;aIjZC*>(J>{Fnvy6?uI}9p5qwKT zKqP>`q5zYbNQ2dvF+q9GE9-RHuNY?jNl3j7- z5aL!b@SO}{%Ddyiaam`odW{B+V3mIYb^d6((!{=3>Z56;F&-^O$>?KklUR($QWJND z2zf{9>O|Wvx;l~C;f?bvDS5XdCNo>|Zlykz<`DIP-~Gzd#q9b&otnVxZXr|Y9j_q+ zsD8__Qi&R*t@97d%6DnO|Lu_vQdX`*8B+PXb7WJ}$shlb=(OI-B zV&*ru*nR!0HTYwJT|~SHb~xTPl}(7p?bo4aSQQbQjvR~J90KmGm1yqG;< z0+QoLefSm6p6sLsD9C5z)bs?R_S6MZJ6i^Wo@f5j-m*NvcL)hiHOZLSMw5i8;p24| z!Z5p0o9jkAcupyAtDl>9bviyhqv@^GjsA(`)hyC^>X#3^C+??%o$U;!<(AmG?O=#l z#5wEn&9tGXnXyOrf7@n3uL)#xbd}q-hV4bx1iKaZ)p?~PeZBLrB5WsZ(;>GmiDsr zPR6*34;;_s_G(Q5BWkh!hpN0zPnXr&&kd=YtAi?ZWC*b|74tnz8PJE-OPJ9k^i+U! zHQlN_Y`LFqxl*=oS&LQZ0s=tr!6hDUfg=`Im!mT%^Bs7)uQ8WU)T4a?ckV2Gr|F+N zr+r6RD(L1QK6aBD6KGqaF-#YQq|W7n47PgC*~yk^#z7!Gh9;IUx@XwFR2Zw_#c|7T z^{sxo1<&k?W_&MFDbCKH$_{^mxpVTL)^n^R)KC_AW1a-RPU|OUbnm)QV__~?*jvGHY2F(Ngjk)g*nu$g1Y6b24PWHr0d(OlDdr8x;reaQB{ zQ0+QrpM_M%!K7N+tsVi)66#0Ww;t99CbNDL@;R`=4O=F`kd}{kCc>>$7AM2rK zJp{%-3U{`X<;Z=)xq}6vU3P-H&w?OK$bUE@2%Ck(BYhS3OI#D2k@H+lP!JS*wSpjL zw%W_QTc4qXvTh`xq^>&|la3!3#J9t|+u+QG?7QaOQj7uR0x3w5YD+R`^snZ@T8(sXR&1GvV6C->>|~v$(cq`PMvvuW=Ia= z279(7V?#gFB`1%~Ikrl%=p6m|7_3fAuEAz9XqK4kq{bCVWtOv2!}~lH3(NXr{(F+8 z8ESJ`f1M>PpU-BsxeT?LgxD<}m+DODMRA{xefvDdF9Fck`no##-E4jtTiTsv}?!cT*H4s9@Rzt@yS>oufFwNI=YnV zsc;uhfXHjLR-{pN>WtF_$`bR16KW}msXnV|Ax2oXhs(hT@ey3aA)L|CR2Ya6VjLu% z3M2IUE~FVTjrNSAXq9+9g46qwc-@S|P=wC#Sa}I}j&4}mN8?4oL$_z9v*X{$FyHdg zrwby~RVI!D+UAFg@r9WjeyU*430^b;(2EK{(`GFHqt)?+nB;!F$ck*~R0;-^%nBIB z3YeNJLt^;Kp$?YB-saY3Vf^9Mz>tXN+2#@aN**hYMz(O!`3359`WrEq^qW?NQ`OKe zTM6RqWHw+d0sTE-IiiZ9@y-X*zL( zjlVYfOgg6`v=zVN@5*8x@1!a~wW0Ft%w;N?4$>kzDm*U=-3J^XgZn4SXSvG zbwJ(lHQDdSpD9R5{v_B@=hfm3?4rq>lR*3Z6mC<`Th8lH3`wdSAj`)l*}MTebWvdf z7&V&0)-M1G7aOdoRN;4r70J%S6(g7zR?22ja&8+duyCYM!V1!h#xN$t_Rr)w73hUH zMx>8{x3i01fuCw{9e?tgQVaQYqgOzz5^d@+;sklRCxvNxXRLW))e=8&S@+@al~Rym zHG=>O(ZIBu^J#VBZ7fa@x16`*E-&}-f!j872fK&1X{6SM=?kU>d@G7NkK!#3#~Is=mrm9*!hJ*6*glY+33A;T-Gc~Dlg z!vX|c%w`Ka!2VEsRYv+4O}zHS8WxGAi~1&*1tczm!UOiG>wqbo6*Qi=Qxs=~>Ojh8 z!Tu*uDDNm~6!9=yZbni#nV>7VJGzQZjn#+^u$VjQXqO&ThK>>6oGoH@Mu1B|RP!9R zj_$C7MR=4u^TrA0-OK+HZ$5p;PKFu~mH zsRVQ#F|(+ZBsRy!`D!;O-)&@_^UcfS1v6}O_7!B)roQOuT8L}QzMz=>RNr6}4En6# zPWzI)pW)>X2B3K_JLCauRPsQ5d^dn_0*0gan#ixUv-W(++=43g$|f^UIe=tfTq63u z7=r3`O)Fww%ScG_Bk8PNa**4IHbiz&`4Gn$fWf&(6g=P-4i0@IK_!+Ax+81O!3;E0 z1nq6enRx=ceU~hiqC4O|}bAj4nkRtB=e~CW)0S8ddC9bKjS!6l(f6czeEy zjVyLYQzrsW(j?dxx~WDci_nZ6Kv0$*0w9dBfbZjg6-8q4n74!Qo6<62qy75tMl_(l zC*6B_(cXK5L=)O12Z|J74r>Aq5|OgL*mWN{OD>70DK+#;TV0+PY!-PeWi~O0ajNY>*H3t8H?yZd8 z>#r!w+P0gB5!ZoI6PWclpc~G_nS~IvHa6q9RS+IR^_fLFVdz$Q!+3S`TJ1=QSJS25 z%Hgqo`FdJi__GDX?CTN?1Uakiw*nWPb|7F$Rin%Q=4Zd~qTjvei$BWGm%s5@KeG7Q z+jIa}F?zug@aCad2q|Nhgr##IurR#ZRn0rI(F>QX=#+}(qQ+@Z>=M_I=42Vpx5nbY z#zfUuHgOOfQ@nxT2JPgw^FKpy(!n-2X)O{N6N9cr^1>oaFg#tophz4p7c1=~#=`sI zOK>J(oP38cu3GvWK!^GwI-GflGniVF1{PtuW7ni>GKW%1uE zqCz&=&H6=W-S204JCHT&4;IdLM~?l&!sb3t+dBNh#c++aPz;13k%#{s)psHFumfI|a= zQ7h&3cD9!EZ^zc6X@%U7e{jyy5O0%~>JC&(KG&=5R=1P*NK2JW-;m3eb^9kiod^KQ zLE}$DgMJ*U-)m8Uoy8L=jB(|M8Wu%Rrh3 zM9zjcfQIErf=7r7akSB)>^clmssR66>e&aNlhpCwDg`U zmZ2oilrn;u6z<7&xS*?5ENh&Z?0r2OYP6?0Py?p4YF55?sHudNMFFq`e_95|IN0Fl z!cpHi%E3`?JcwCtjV6=fe)fBXwP-Z?X_?JJQx`*yQN~_=&}3V2OKb$poWiW#aa%ubvLNU0ng zYzb~D15ke*&JFc|&*l~j!ZIloe#gPfuq1S zvKUFcHkHKk@>sk)6iM9Ze=HLbDF%fkrD{M-Zy=lDsemo99ZuJ)zXdtedw&9@`vi~t-$e*3UBWTdX z%X%HA?Jh<^#e7-f>So9&^>z$Ws$Z@#9V3q48B^N_q1LVXAib?Y%NebRUs50BPHx%9 zX;Qgn;K08MKJT3NajNa()LHsCxpg0RsE@$RiMEduXX#^oV;>10(>{*1eH@EE>c9Uq ztG-S|b#_#f2&QSn9d5UiU=phDft@7q&d5|Vs?U^XK~uS9A9t#cpukh=!>CqP+*Z?d za$_HX>N}==oM`(vah5*Tx9;QS=~#}neH=SWA4fO#k??wIy*q6JUspP>4Ig15dkcsHx-n8jl)cqzSa z6L?3r2Jaq(W$NP$6q&FWVY~+l9?4`A+u47_Osq4UAbiD~YV#~AGOGGy9<3tM{ z5#8?!ds~Bd^K|6LTJTb&bQ5?4Hn#%rIW6*@)#5G~dHwCgL5KD0s43A(E=!v+AzkFl zfyq2#>(!s>A<6ziSwM35;hIlzaUFMFpFjG7j)W&bBe$NzOhguOeAK@y_83NfC5JjD z(i|!?MrZR7VO->tTpk=C`8I~@<=vQYwznp8_CVAheiK3Sh9&83943G^G988B-G2oj zKEh6U+M-MG01iT|IMqX`UpTBW;X+hOK1=zs)q|(xrAuvBm}%%?F6Gqv9_tgzz8N0G z%55_z-gl$+9McaP2;7ti@-JbWwO=#74nJ8IeVreC$Z7cI+<K3 z33+mShk~g958$ZESU|Ax{r@-m1TLW4-(ZvK_^s8_wNy0%P7E0BU!IdvdkDnJtfuxr z8~k|RSZS*R{$GfZCv;C1d1}$|EWdKHME_H#^D{NxYo9$?q>3??1WE=qDCKGLtl0mC z*HvVJ@keF4f-NV>Sa=;rA-y=6B7nsX^#F_f9aqF*oXwPL)}-BPnwq{_znb=`I1@?j zn@u{Q{tovje3^}oS(_$VqRP4E52sF_na{U7DT}!ZmC^wzVR;Q5MaYJ{_~=bM z1(|9(i3U6oBS2yoFOfN^x8xk!a%$yIxG)CchlX$=8Zxaof15v(~tQfV3*4QB$&GJ|C3*vMe*)+NNo|JL(J_dR!mEmL@8@l= zUK;)gx8R1qqD^br=ryXeEoPZEZRi`n-mGrLGWq5X%IIMDi-R2RHcv|0vC7wAXM7N+ z7VYHC2sZGJVo(kSgN!6X+5#B|*ehKizC2YvXVJHm53zdIgCm8(4RL;ngAr@?#LLAx zWf1sk>2NZP7UrQ&v!c-~8z|@%(iVRm!>!DSQeQyo2Qj$@ zV07jC1z2E;X8SGZqFMGnw*U)9ktH*kh|g8%U|z0xETRO^mNGXD0YcRfx`cW^Lm)cW z48fx80pWbY3wV#JOvMN`qI^;|5Yxuv6aF@V8{K?2;O1hxi6TlbW*7(ut!KxsLdKF zEPPNTBo>)xQu;sokAi8=ucpj}{Co?D4As0)#^+3gsM(I-7#A))wRSyeJihm$=!%Ic zoeC{+px4x1-H0vKm6Q@N-=}bMhPLMzGQNKFHmwZc+(#q`0QZgAESFAZ@%{~%?UMNO zlNeR~M#v}Qvg zYE&w#KrkysfN1BPkk+d7rTq2TBRIZ+-3MSN+y|Z~6LX|I?3N>rP=nDv-zG zP(TtNZe(twRO<~&-9>hJgP}E_ZpwhR7e+Q{tGT=-um9+4p}82B9KT%6O|UH}OS%b{ zNx_8h9|SI$RB~v*9Ald-+Qz9Ck1!UcdwGrkKmm$ohG<8qu1fkC%YftxCk#lYxw1LA zupTq(3+l>eX{t*h1eq9>=V9}x(%Y-W2Qw<|mED>`CLH*6Uo^6K6;ymS8rfd$)-(sH zfEN+hCISguK55#`W~yi~ghu5B=cwyGS8~@BO2bpn?Sex$7Gq=#Y64P-*5uRW|dzKW^pb4_P9NYs%Ft8Wg_ zDY%W`)enZ&YP&6Qmyl4qk!rF!F@U#dfJGx2rC3E80RVA+Hn`Xz8FzMbCmPA<)72Lx z8I3(lMr0cak5cg^Amg9M7!tDRm7GMLDH&F#TgkFi0W9QL&y%9f?+z^c9%qIrgI%(X z1665tcuY+Rn53?9o;5zmz?OodV$a+UQHShSTXaks@~G9@QY$64fre^Bim%_QgpqCW zu1Tr4=}?S#o9h2su_NTIiSawQup-w1%r&gM>jBb__d&o76ucMhsnMsF5|Efh=IAT| zW24Xnp>%2z_o?=TK6WuoY99hlN~K^kJzwe3_qLN~noyLKdWPK~D+gJP7~92_90z^+ z0~U>i-GR_ot6n2Fx(Gz{wg^mODW#<(bOz(`wt*NK2dt(^+(yCQiB3}~r0@l-!KlJGk2cAv`r``uw1&C&1G##Kh4Jmw3F)^E_1Db5D zolGpabuy^%7kwtP?Ey}YT`Ha)O-ewjDu`ZNv(p1TVpnXQp2kEYBAEt|C{M{$5Ek%) z`xfW~m|kpa-4n)(FLOgz+e#p;8F zFj18;9kZtdD)||9ZMmu#Ww520Rn=un?W*FYv?DXA`&(7AH-N(v>rw6ywveJdlOrhte5Sj@yJGOHtD z3p$@UYs4lxPKZsNFQlz+bV(i(P7I|I_9K;YfFjec&+mY#T#kMVrdF+zG@T&QTBFK2 zQW>mHGhQaKJd^#|2b*n^zv@L=%Q4vw=u?@*@V-U}Pd~+ND;M5mh&i~(n*k}=)_MQ~ z0v8@n=N5cgw>a13H`K?0N%AjTR*Acvs4_{r$v>REtOdW(DwO*hvxEux##X-IOxftb+r{oQEi3FK9*J9Q@QrziD>`4qPQuQ-X1i*zwbJ~^VT zR#k|~sK%wZG=jtXNF)P#sFdP^!;UtC5>U*`!&~crTk|$fj5}0(~1Bk$TH-(KIAdB(>ojjewAMv83i5_ z{7LG>=GW?_g!R0T+>e3Cc=hrn<#SqC#Bu@_B{h8KZZWjPa5lk$wt-jza3pby0$4$V zUmK2F!2$}v1=Xp9>c9cJ*P9nRAtUCt$;jA<1(31%%|3;-oXBY(^J3zciV${_M4gGB zDFH-0SG*Fwhpoxbg#OFh=}t*@NtX+w&)NoES(m`4-st0AhI!!qyIF>E&THcYWhta+ z8zk{y(aA-{#ayup4+=&DcOk$9R#H}93!F*gJ{F>^50NAsQMB>hz$l^3EIeGShHX(X>-8oq8hXQLimcKQzpv#S^hXFu>x{@N2F z@P#=E5cXBVKly7%4*C0>bs&c0tbNMxSv;~xalt!n>kDWAFdQH$@YSwr-q9EPq~z({Y|4?u zcz>@QTz&7!nD7sD?lqF-%^f5p+zL_^w%d&4O$cUy0+O_lt3dAvlxxcWsZj~upiz52 zw{=jai4%%q{iCaKgX!zwl%2=|mq|%Dm6zqP_YpJ_BH=V)xX|<|X&nu%6~=!*MPoyb z{~Az+f)M*!g%*{jQR+dAvBuQy(`O*x#Lw}K`EOujdCqk!I zi`m_h*_~O27@*nRaE9HzxUiH!nhZ()Z-B0po<$BSg?Gp zIK@~-db4`kX-`QK-#gwW%bR@#K&?y@K(aB9Jdv+{p3POuqvK1k*Wpk*V&MPIpo8H` z0$FT5Z7Ui0wqE^?J5##T0~Laqgy0r$@%=9^<}1_KxJBnU*TJ!w_f|^RUl6yHOm)^#l^)^*01Isy~d(nIcqk7kl$8S zaI``g2u~4;q#{~sp(F!22Du0MN*%TlgvuB`^(B!e8jpA{u~(Yug2GvR$be#lv~FrI zBXKysbk|Ef=HGER$eh7xMp`M)5^0wf7H{FZLc|=l!FM{Ke=Rv{RpAp(%PXz9LgPR% zh31J3r_KkE@;06n67+-0^fd_aOg(Uf2n|y3SkDPH)5MnsAzrInAVfG2vqh0j%ytGv zE@3FECH=_eHQ@a&Q8ewpMG=U@3(HHR>-N3^@it2mGk9RA!?My=?U=jcZir3dL&wuCV)JwZ4zx1Pm`2a$445vHQ4ZBSWDPi@ARY}s&& z2R1w~8GRaEN_(yPv9iL#B8NJSeOq@uwd00zXU3gIz4btYZzm)hqZ-^2qwNd~a4@)I zfuzAG$9T{kP&XfAqi430k8$gp3u~ZnTc|($!%?E8x%IxyxBhtZt-IS>Fmmt;dy)gu zq2(34RCqtj;oFOR*(H>k>}9+ZS3*ugzht7&$@Q8H4{=>@5=O0Mxv{@d#pc*9uvl^0 zIaZmrUL!D|yz35QiVPxg8FXrf)S-;HsZFdqD^OkYB)JV{gX9Xql01b%aT)ci*fKum z%Xmn0!bM_K3SJ#|Si}(#g+geOis2AoXX`Z_N%pqqWkr^<1R!Z>m^_+0zT;#+b$g)t z!-M+IQ_^mm4)dYuz0WRCG9y>XjH7hj+n+Tep^-hpVRLOa-C$cU&$2vYFI)22|Jk5^ z+lR?VS5a@JaD+5tVrH>iu%Nf~vZ5$)MS^&70v)~K-sgm7Jgnky5_2w!O{$;7+#Cj> zHY#kY#i3o3cGpsCwUo4i**LRp06quMsE(_b5Lim3?wBek{j|*1=~HA&9>IAeoJwLz z_{3W4U!JA^#w<2if}>SP6b7lLo~mu@lWmG!rI|{M0MARagP*-Rc4x5YVX4|?%wRhH ze0iRG$-}AxDVlWa&ri|X>VL=Prl@XEnC7R!pw#XA!eHz1mU}qP@sYK45Hux($jvrsquAc3kXImtIKL6X zpk^t_2^`t&>&oPi{Lq-87a8g-WswsvPibGUH;?)981tdVyB}jtr6Z#@KLuxE6|slm zK8HLLX=o~UxE`ifkr=9$@c@~mQ4c)oP^adnqmFFRh7G2b)Q;LKX?D~wYjLInF3TF3#foz)HR+d7>n;D{-94z9%m1 z$wjD}LyhpK&;l2dovKPG7<`Xr&b%^N5Q2=d0p~k22j&c0d!kwE`ed5gib8aJs%#Y_4_u z=dPp$6!cB-)eZcNrVdvgWa*t&k`u~}S68UDrRYr6sN^*R5@H@9K}d;-i)|3Cs*E^? zNaqnqL01Tck1Z_}__}O6nGXxa!oou7s{e96+YSQ}N@eHiHp9hoHxgoVz>n=8DG^9m zYAI{7c6f5G5MV_P)rWIhcwiHrY*L7uv1?~l?H!TXmDo5{H@FJczJp=w%62knlcR%u z9MZP-=yI{z$%oWNp^V$rifC(3IM<}Z^R(*$nwVYpNK*=G_2LK&$}A4;ph7-VTqN;O z@^`cVvTBEz^ zf|{%*Uty$hAnv#!YOn*Dh=0cXYdy&bBQuNhm>|@hf=LrJsCKG!otRwbsW8Rbb<{{y zVOc9kwu@4MG9fycOVutV4o2`&N(_+KZbEd%og5S;MwJ<-)GhBYDt!BbY2v&p^mPu` zm++6*sm9XBL zTi@J#>*e#CTHV&(qFhnr0XKO+ub*~6%!XrtoHVpF{G+-2;jX$n72s0tKod06h;iII z`XU(#H`Fhbb<{m%I(mVAh%1$ZvPXLjhREGjPI#i3c9ih38e2(}W=j_-%@%0XvWI?W zpWBLdc)@2S+;xB**J*PIepBC-{hg8p(B;U;FNJr9Xf&A;O^E#Rh)euYz!PeS*)oNA z%{eS+DjU%nLfT0Jr56=FL^GyTy@jiOVi&=p>=@36OPp7M&t*7T;}tT&Ni!h9P;`Sa z$?ghSJy3^Md8-*H2*M&0&Zc@oQ&KOPn9v3KKABb46XqBbgVq{mk9G+Dgbr>gE(#9! zjmaR=$GO7qzVRM4#|r1k99U7U7+Okp#f{NfU3(8t_Gz?U1E?&A#}DHH;jVF7OmQds zoz?YlwRcW0vfCnm$Ronz47%-m3zK8=2t6W%gThQ5f)&D?ez>g8z$#KAhpz6JrEyy&9rO0|@B6^ixKOTwgEm!BLU%pq{ zpG3W@1-|nz8#OmRUTvq7kTLBvf}M7)kG$4}3%N;>7U3{^C4`C}irdPS6AqsFYA<`$ zL>@?&n19>~&f{D0lAOc0@W0+v*p2i2h5ChmR0b#bbn-WRVt#tBS={fR-usm@4y&Yw zXg{0{qJ^q;&@8cVxiJqB<%i`1^m10g!TB2Z8yeo|wSYq&nVLBWt*t3>H!{kU<`?{7 z-vqiuJkgRy_-=V@29ag4PX9t0I!h>GM$J5|n;PtdUJ|rJGL0FAOf}7|R z5IeT0Z`Q`=?_H>G*%lrbJaI}RLi?q=uBFsXHPo1ptuuDtOq$`}_y0w1U=_Pc{?30L z8(0OftOO~M|2j9YPEr0ZXanmMs1%a7`hsLNh4M&0LjNW>5gJt3PLNBlc80u! zFY>4LXDKq5TnvbLnhoDSJ^8t8L_k7(FF0$X#jOFkrvv83KQ8g2)QnbzMx?Nb>j5gS z^j0saavCbP;=3PFlmNnD+y5B0i{2UP(>cTOfj@|8+Q2qt z%gF~7^>B;iheAe3jsP!L;4N#*?Of(+JDOMCE*&ekR#nIqd;m-%Lnt*~29GaD8pqZZ zL+9li7`n?0`L%D&IXt^VuoXi9I}qxVbbch4)DLNiLMEcos0memLFg73NBROu*zUL4 zC-p_NE8;XY#}wz=N0~GgfaZRpZTG2dRZ>)}XXw3NQ&sOLJjiVL;@k;g0aDq5w3a~f zHZMYfxhXXVMaWx9qS&L_=yp*`BoB`&Losn?jK#s}>`J-uM0Fi6s%E0R3Z;sV&|-SS z-!JpURQ(aU1I^oNo)iwi~M1hhk+EODOQxEti!+GAo3gciKVbNuQAZjYxKo9&mUw;nh&wip$ zqu-=bAPUAf)sojB&eDu=OB0E6cep&CmBmMu=AQM=dKQ^92~WyplP61&elaFmsq-v%5MLG+kLUU98=hE{qc?55oKI{TLizTZBP!+SCeGbnigMe5k0Znebm2XalP4n**b zA$U?atR0Qb^t)`vjMXMk#HUz5cBf;LP6sL<&oFEkpp??3P&Mm5Jv{M>TjUA#DB=ST zJ&=Kr>W#&V+qM*nAG}dh?iEA2FZ-r6yPD*C`L9e2y|KZXmMbikkoO(@2|fJ= zfAc6fV`eIrD5o35D`3C9=H^Osp}cL}1lWbld9ZE6GlW-ne+nm$B%~w%KD?4j9x_dd zk?<_9ba`KSJMq5q&Gf#A0|jrxghIK*Bt$U$K3RPFWCU&PPRw>YgI;jC0S;p@DpNy! zP?tllBvb|wZKC*O!c$fO!lf&}YnS}i)%HY~6FV7w^lcWk#N?~mR_$^(?7nq>+qI58qHS^T#0}fxv^mf#jFsFF^UPZBw`-kcES@TE(AxDTcRw$qhtZyO zXQ0J|psq#ut*KnyY6>K(AN2~Ugd+KHN6yuyOaK(i#*($v*t0zlLKFO-YhjXNoc4E&X zGJ#Z5Zz7N>VNqx!Ev*WK3rIoZ6%`~)ClOBCG1Ahe{B5WO4W&PHAQxwVBn!@?{+&rN+xrHnxB>2cuhL@o43`USq(Q{ zHaYrRFI89Zgo{ zSm4k}E@S=2f;F%OHdd$UvYKu#tAz*$F$?0B3W&&#h%7m+^yQft2_5Q?EAj_fqSiwP z(o8vF@9ECXP*pR;PUHZKPmibJtJb9e6!3Ra3ZhU?9jR ztIax}lzK7I&v>zNZS`UY)_9Y1Cg5FCI+3|?YOaRw&X`W#AM(Y!zp?2W`7!(cR6w|? zQOI*JC*X>DN_g0q4gg_ROO?(LPtgR?sXj`%b-32)D>^zI2w~xUfNBCuK@_lRa|tnK zxI3byVft(c3BQRBfMY+V8Ni`Nu@sM(YqT`Vs3i@p*IW>^j%*(CPO-jr3B3tT$}vwd zA=EA*Y9K@j-NFzGi$3~76rdd$qZRRXA!?x5mpvIGwx}(V5H{I~;lT(KPhCA+?G#7n zWJ8WX)s+lzd?4+14NYo9P^=}SCx*il5VAB`~I;VA@^FgUL(p+5AH4K&&yO4kZMOxMTG(}Uw4>2tv zY@k)mwK6HG)e)b*a#<9@J0a#oFpbBZJrwg-M}ch zsCWl9p?of6Ja>)~pR3b(18!%*cTsV&Z4zAXWJ1x7)YYrh6^6sHww-jGxjLOMu(X|a zHaXZM-!_S^)>Bvbiw%`Fl}KRCz~uSB;npyhQS)o`5sKOpynuWx>09n%M&FuiY!sNi z-}95vsI^l9;3iR)plI{1XU)DVZEjZy5WnpCVtJ%KA8nUf^wiX!K-R0L9;s^$(apJ&ZH(z;X`l4#*nQ8vz*6IfS5jj1N!yoI$>j) zKJ8?+?h0Fnw?nfU%&9`kD}`sQ27fA#vM_|&b8gdjazlZ#vku&-eth zB%TW)g%=M~-$RjrjY3FZlbM5|OXcY8sgpzIX?wksW=a@w0!5;Xc3-Hr10R2GI32&e zQhz-eMo^`w0xWKzikYKfm0h#JC{?w}mT&}o~$^SKnl zpc&7bkuGY{vo73-HOe9`%!;h&MuKy&cO35G3f6zwa;2R}4)@rcg;_$#ywT985Uaxa zljYYYQaW8f6L6Q`E^3x>@f>SaX{c%7j99*OK@^In!CxG`YpG(MW9CIuaRM(MkWU=V z>rdWP)L$;@zxvfw1FpIE>qUK6y2k^o{{6xETInnKJm~t9_y%{tQr{#xW{&e!KzRd` zm^se(mj=bQILS_~(3G4YN^0mGDi*Or`9gda+!RXkQYgqRMIQNVU-V~qqrATq%n?w^ zUrwY?pt4yE4CXz-!o(&eRm4)i%0Rion^%zG>U zugk?2?_+iw9R^a1IoWYM_>ubQAVQ2F*xLAE`dA%59ORg~7ipF*N4_j>U_~Mi#oV`Z z$J?Ru$I>?#V7#?Le%S!JBn2 zR|^V??`XH8OqS~#BTW8?xHp;5r;FURE1)I8dhMh7ylV>Jv0rr09=53 zRJBWM=liPfTjyFO3!2VOvfC*}&&}h<*N+2nvkKn_=pt3&R(_(%_cc#t*J9i3sRpe* z5o+V3s;%E3{W*0%1c?2d#5EuiNNdE$-tm6zB*7!HTI~`lc1?wJwSW3X@$w6@3;CGd z{2AE#*G|Q<{q?;5#w(iCI~uY*u6=lHj18+tR{PhXUN#tb?mfqYKoKSaGJv?SKiC-N zX-vomc+ezVXdIe7#TRx)y+Cqq^aD9}oz{}m({^X+(^PSuK6N>Y4<><>9m(vOC{3)dkS?wN z7Zx4LOT(qJ3{=MYMHw8{A4qz`UuEq?)W<%w`+_Wk0?(};$!OWEXH@JBOK)Fwj&R$ zJd-jov~Rs+I6YPi;$Ckfy+Y=j>?08FtrLm~(J>}S{cFG8uW@EpLmk1Zr&&|?_cWyN z$d=Tuy@Iaio_ak5lnSc#+f_oo;d2nsC8`Mj$dnXcw2CMA*dxf2l`>J^!)(4~Y0p-$ zq8E-{Czk_JR=AZ8jZsHfFw=han|8&5X1sofKrz<#AQu*flOS?o z6!(ikj07HnQ?}3JE7yi$qJ96yXX9CemT1x`kVM1gAu?oK4_sL9r9z$VeVt+5{W>06nCHqmmVZb5sMG8{=`h;f7%Jf z#f@P);#ESVhML#6eIrKt+385<{023lCumtgFS#Y;Ec(hPqxmP==JnUH9fhk;O>ceY zWbRvk(%!PxhJ^+j9KB&rT|BuNsN8YQ)XNU;w^I+2rDb{Q9h+t9!7CG5=TBp{w zqSWEG7gkv61PpOHckgjo_QM%?4a}02g8xtG!GAS<$j@A_mv4!l=NI)Gk0vDqi0BRU z%=9gc7J)A1k*W^$u>R6N2D(0+)n9mbJU+@s?>YB&R`N;m?*6>KZ8*uqW=U?V*WcNz z*MG67_to$EL~8sV_U--L@bB_=2Ulw$^N`6Uvkvdn=aA!yyy2lR8_aE-!*LLe@Ow0! zRuko&Qg|~ICY+_57;nup8~vUSdSQriY9h39Yg94^C1erF`at!jy&nDv0e@ti**j8V zg}~e~!F8EfcL3yC^%o*afpJ&@9-jeOpb-tOK&!Q^E! z7Xy}JcyXTpXYS}>B!VB4_IA7~*J+v_EToxgB<+Lc@Uoe=_ITJy)P7doNdIe|Pk!aj z^To{bxs?n(AMciq?&s5ko8O;nx{Fk_4g)ZmJfYLt6EWj*GJh-@B9N_Mdkj~Ev!Rs4 z*SMS*h-i0$ljP}gaa{FmvcTBN&NUX(V~Xrzrk05lCKc?Lk|Delo?MxjuC7kBND>b6 z*f6y-yWh5O{4|Q6wblAf9}jB(V-j267vz3-S@c@JXG`e`0W$Jp`1)v+R#$~@*MKI{ z!WNExXq9#@t1C^KGc`ur?YEHAy zx?m!G#bTH9UUY=^lti?A!4d*sZvgf{R{PfIR%$R$;Hc74%SE7YKT*eIZdSC<&4_kh z-Mlc?bVImNN`{%)53RB2W;}OVn5|!4zcb+-UxqA^4Ze(s06+&D=6J*MRow9G&W!G` z!GTn^5`PFD?rmZv%oP%ri5Om+W8UVm&h<+fwYmV5FGYOGz!5rZTKf|ac)aSZYi@){ z5iTEE*Wg^b9nQQrT)zAN`pWBntNhfZ_??D7^-x}tdT-reotF%MR2>%$qcM!4j$2u1 zy~J(W=S(HVbXApa7(O#cm#(7+z0e&a6wzgPUaK6Q*unZW$s^ceEOAJr*DkiPEQl9-Oud_qAW%cr0 zo7a(R4M8eB| zE!epu4!ZaHUj4ju4|HH8;2shhXL!_LhDRZPBxD|9bm5~*#puR?ys7If*j_74WjJ=? z3TE{Y2ICU!<6Fa$r@$Vb&A#jkaa3Y?GPE0aga~r$f6lio8=2B%g^>Y@V(o22gcQj2 zNxoF9df7|}(@VKU3=?HHgpf!Y6l~1Q=;@pjaq}e(z|lS>ODxc-ZdHjQ?x?@%_2tr~ z?MJyBy20tLbkVA`(wBD~8St7AWktiJpe2F|ZiyW$;)n30G@03ANXxSYlabHZDeNxe z!Qxi-tsT#(KRR-C2J4i~u@?cg+?Yax)xb^BYzWbkL=FUeS`TnHMbsp*<=%x=`7Rt! z5G4(lcU+-m+rrKYVquW0#2}<8)t`QDUW+9E0`oqZ+@+@xD{`S4P^%K3b5xsIR!YM* z3325<@>0Dphy3H@wL(E@mM_Y$eTXywV#R;t)h#a1{2zYrX~Co039;-rKG}WS_#C~| zK^9^rOG-^s)F!=y9YRlsR4Aw`AFtf*6z-Aa+f8U>r#zJBR6BLWlq${~kKK-gRc$$@ zKy7zayN=U*RgG4sz%;kzhOh!rXtp~FFx}Vpek?PRzBENr{iSs8Ytwt6HqOm$XT+wl$H!glS>#U7%U z@lN9m!pQ=$h`>sNoZF;ypLNh;pD~o7xHNkMEt)JY^${*x8g@2V$#2_hQg^rEPcTl&mBXUEE79+t zb*4eD*`&|4g*v4OiJ9&fI2(9wFY#OsU#ef7dj9OR=lZpO+%qAdqc^Li9n{g8q$*be zG*iOm?NMDD@4KcMdyMLI__L*Y_h7KB-R5^Gp*{D&Njr+rX_?-Z*SB}Vc)GPdy`@;6 zZoQ$s#XAv$RNjLAcdSo{U9L6#fBRd)YUHQD36VnL>#LWP2l?13FKJ(~&WaDZxLEM5 z+gI67$z3PciUT*ED`9e)Z337lWf#OgU<++?F z9xW~T#dzk8|e-TIcNo&>nT+CaK_6E@t3m;6ml3(C}l+p|ER4lVy>iPjUSZ|NeN%t?;8^% zs6SjB9zU8-5-!IFSm-jAbcp6!r3@Rzm-e$@9f$!htki0Jc=CN(!}Hbm!G9*-uj}E{ z*>VJARq(ROHdw_YxmNIHkgA-?OwxWf`7G8@^Af9Eh_Kya_3*ei(T+T^2O`pv3+GrP z#At&>zyQPy(=9r4sX3Jg4Bn8W8flXfA+EGUs=0(4Q4STgWjr(<%dx&!N01cN9ts3; zYjQ!w4wOAa@8$?~p=lI+6i2SReSB&41J%Lm0$9e6R6pp_c#|KkE~qXz&YjDu;`Z?m zCDxo}ypWDuVn)u=Pf)=gg$7ud-r-%nsk7<9o_6qpXqn>)bGzoST6uqI8rX~U`It+}qZ;6EzCl{i(a1tZ&w!O{Rgn1b2}OJs^$~6kB$P7p zAX4V(i6Uu!z&R`eReVmrIn^TlwDWLvNfc`wKru90_YXY~(L+LOij3!*6FA58i8A_Y z0_!`k7g#BO8n95;362{YRr}fu1`FPRGzY~38&w5S2?Slhk={Qfi1+yFG3(>USC|P} z#9C4)H;3SWHSF)l#*b}*dusx2T|m9y*926`*zVx}X9y)Vs0$d8h3a@`i!pJ58I0+R z&;T%Cge1QhVw5kjhm{jJL_16)?UX;r)zTQ^6A@B-%&IGFiIL8c7XPfYhV@Z7UA{1< z5TT)$D%vek_R_L`!!L*VM9C~@_=4((*T;{sx~TWyQ|N*sQ8M-`4G5lGgVDTfQkc|a z(}~)MhUjCCt-tCQ$QG~MJ3b$Ui73es{%guK_jQ=u8GhT~t)^8m-N|-!BnEqK;;gH% z+BNs?XgO%Q@yfk0SC?HChn<{PJ?1u6I}AhwCTFCrhs0;w9VWuUpPdOT+?Cfa`TmHz z^gs|w?wBw{q;96-JS=l15laD^P46!2CcRs3XiK__iqkX7N?D&y78E)8O)sZ5G&z-; zkdfasIk}<9$<%}_yQax(<~yt@HDL^DB7fQXhF;JztoC@@-RPo%v*T#mwfdwwvD#8Q z)%vw+AZu$2#h}p_*$fkkqayrL6~^aqA(deKu;z|-Du?vXlk{(;JOC$ttla}FulEvs zhZO}BQ&tVWv%}R7Xu*{A-CX`)T%ze!kB`ecx%7f7>(6lM5Q1~Isz+!Un!U?Vdwlg+ zNaQNs^-CygWm18|_4D{ycG`dX^{meni7#7eMkM}DMJ)&j>7PRJ#F4^ZhF&soNmA&( ztnY-SDips%)QHtAn-PW-w(LNm_$KPEP&|ok)$ZB2yWCClv(b5Q7$MN2dIY`U-J%nM zQT)gDFuZ|{PXL88SWjMa+06d0FzF3Re7RcaqCw<7z?ZQXR z-XZV$cjolN^aQKen=iDx_X9`6Uifz2vd{YOztyWhb#q>SJgZ;(KNCyEJe3EBBoPtb z@-!l)G9SLHtgi5fr)@jL5&Xl!_J@P9UNMxv@;hOGz^~r)`^_uVchxoy$9rrK`F9U3 z=iyR~8dKp=`n)`Sj_j4=%W(KRMLws{5y=B{@^)1jItPE1VbRwI$syw2Tqz-*50rM% z4-4jo8oOXGB180AK7~c|2N~XE#;;~f5POUvKNoU57(d{ASC{sVK#i=JBWfkr5<4H- zmy&IGSdvO+ssySURwbbk%qVWb9JFaez4$aKI0BQzYvmMM;zN_AuL|=4*nzUM~{rZl^r|3dR0^Gt>hKxhi^;b}&g zf_(Jtb5f>G>cul+G6)Je9Mh2lWj4GHyb6O(q0vi~HDoGK{5YO6JIKuj1dIci5JVyb zfr{3nH7f@+5>Sep;5O>G^6DR1XvpM+*Ee*xv3m4i$LO7dSHL)<*rQ0ApQFHvm@Jf4(4~~!`-`= zckf=@Xh^OzByKUMpYQ(c?jYyj9kII7SjaT8y=Q_h+ z3*@rZz;G`J@4XriKnwRQ)bs(_1=RGhNFTdXAB)uv_c5d17;IAhAU3kl=tZQLQgoy$|9+W{yY#CzZw0EINcM~w-U zScyWr1RLxSghU$6a!YN~4tG}krc4?8xq~J9$9DX|vOD9yHz{%C^a7_^xaNj((e<6p?MLH$?>p+Wt~D-q{|`T*bx z9fSIDR}!-v)SqKFF&d1-3$NzAc<>7H0)pYr3%EwJ{r0^ zwxamAl}Fwuk`XaO^@IZtT;_M4S=j(lP8WDGeeRnD(nCH$8Z1ROy&Ga|2jcQuuRh1 zSz5u5nSy;V5SER3K)i<)t+k684I4>6nQQ?eei|i~&x^H!v^|NP;|i#UE#%dLu(FO( zugT;>V%`Ue1tjLi+1I$2BxWE0OLPvOmy_uh&Iw@*5J+q00O9f^a?wI|c-lg=^Wtpu*(J{P1Zn=KZ+|^37J}C! zZb`jGA~u533IC0tlyN!9wTQGYVV-G0@4;L{c?y>mMiSEi>E=hC%z$MI<{GhVg%G^C zK2GEfO`QExBh0pqvb-pJ{l($@U}@XR!rZbHulmiu$1v)T=G#j)?G;Qu*K7~EYf0$| zxW_({pXFz{z3YGY?Jb}F3mXt+{fe&(FPl2&XSuuUqpv&L)6x*@kDff+&vtYF;j6ko z%TZJ)?-7nJT}dCwU;OFIz*+zyoxQAQp3LQ6XN_s>qc32(UXZ;n$Ad9dA(rj&DC(6^ zfusp+ZlvvyNyh+VPoxiCO3zx9+#u%2jRVDrd^iIpCa=I$l{kZmrja03aH78H_|@4_EEO7;PIKzW-smrU;|B&tVd*dN9MhFd#kHKzgu+6scO`l;{q#B|_*#%kI2# z9wz{^ir93F?PvM2cu9E;PyWu^a?pDkK!6eY>VN>NZti0X{E0PEOmH#Lu zs$u(Ye-#Q4{2V4j3>D8+{l!oF;Ib*{D(6FM4-l#V;cDJ}hu@8hV*2g_j$(D`@N%AF zf)6z#KXjy-V0nw{ufL}|az@Ip+|EZ|BqqyS#U;Ak-4NY9tLcuoNz!|v8 z(Oxh^sHOQGAyw8dp%m71MQ&U)gpCaCF+Fd3Bw*A$Z|QRP)-!dNpxr$9H>Up9+y2(u z{#2&7tiSpa%#HL07K+xM=!@UHSkT9`e8S|j2{90t%qF=6PSwYPuw}tB*7o6;zDz4I zb~fn_S~A-H0I`U_fVJJ3e`zG$Z3kf8+CF)jC`Jht#_9zFbO}BQRYj|&F;jwN0N&2FhfTKm zb931&ax?f1?XyLPX>uYm%6uBc^$abxpCN6{5;ch)hjz1}LdXT+&1}V!fH5|+@u|&h zMh#-HW73I6#EgqNHnSnkm28f=9q`+g>Icz{;2PHaam>kj~rus#VtT&>Mf+mG)Niz@wU~QAk|I)W= zalr>hrwK*&Mqh>cF34Vv=dDES&JN>l*O?fe#8y_-_>&gyF;75P$5#2bVlMe9sUSey^bubp&*Wj&y;e=EuPe zz+sJ?6?gw6uvIN=7;qiLt!b}&Adc)=Pb~JXV9TcS+MTWjZ@rjR*bB-@%&NHDbXKzm zJgbm(;H?2n#H6QLZ!FTIilJx)AQ{fOLGd%`xVY0> zP9N`+7VF;}>?lpRUYNPfm!_4a>=@`4Zmh2q?G{owvCx9)Ft$KA!o!^6rIL1>^cayNdJJDjhlDkuHlJBO;q)uw|q5pPA@>X zVQd2JvB~j0on8p(SWD~6_`oG6KZDF(T+;{*X;DRR7YJnBjW+Tl8Q9<7U~w-p?&}vw~^_RB%frNU(ts9@P)r%zF>W8Hv;lr(dARqttxBP*0`Y*IU zNKr4ty0t?^1ZL|t5tw%Jkki#ZP)KFQsMT;})Z%LYMBbr=XDlyu>40e!^=)djLI;U4 z79xaCXhG1kNP!y{6@S2u1I0;<+Aef#9|@y2pc7FFK+bvjA7>rW{&=QJO9s;RGn7JT zpSk}*Ek2MzX*1P>7}SLU;K2q!8KD5aw5R9xe}%4>cekI%1GqFW{VSxF_Xnvv?+$9HhsE%%SQTrW9oCg z?Q=c#Nz~{g?PD!Iu`jn8AU+j?cB1VDkBdN)KQ=!?)DG*Zie(3^qVL3?OtofEQj-er|O0HOLt$(u6PN?sFn zj$sobSgj9Y4+TrmG>Z-eRa8sP!>oqkOI_BttbXNNAOO<>rqEx$_yPA%fMKS8;t$jQ z55TSIpLvV^8(sj{eQ|dPC>x2RGGtIGgR`FZhE;B`AyQGt`6C({3aj@vC^M9h_a&e? ztAF9mGHzl~*iDP7q@JWf9;tdy>D^eL-+2K+I0-=U)u$-)2k9NZk}Of*)gAkT0_>*( zu&Z0Znw6cDxCaFpV(0H4GGsp+kX_S47Id$|fmSac6lCD<)`vWq&k4xHPGd69ByRXn zAVcu}O&4dTiE&X+VzzCP6p#VljYHxos-!mwZv?SwoCzeckRO#Oha7$tz4?dlz|iYv z?dc}`@ilKPHrymNqIr+x`79jHN=K*{NvNa1-#hE64xv8d!rk0R#p=4&&b?X%XF4YS zH*Dgc$;k|9fcZZ*Xmo_vcFE$O3;F0BvvAx$@{J>sxO=_IYnq%S-qe$fO1#L3%00C{qLm*xMxpO(Ix6ad=Xze1&+l903h@{-S} zhhw2a@S8QN|MQDrDp=6e-VKi+%_=4Yn8;bf?3&Tqrcx@jw|`EEQ3=7SRl<`ZfR|Cu zQ5J)B1X$j4|0OJLbj;u0fY#WvxTP+1H(uqIPNWQ-=EhW8xl=TVx^haxwLa9GLDQL+ ze{M=rp48C~59;54HQpel?HzeCS(Ta;c?<7tv|@DmGvVLsg!U)%){5)f8vPX%9M!G~ z2Z*H~qs^D0Ag{Okk`z^ABb{e{YYq9!3gyeSH%}lzzA2PpKB!rVcIG?8>IjC@xzyyU z++IWpm*UXuKkL%$mEE?SWq3}?UT-ir-|s6aneI^Xm5bS25*ckSozUZ%Q5zTxKd7F* z5+{|%Ji2>Hi44lt0XqFa2(4*@1uUmm{Ltuy9!9buXwRa>S9+_wIY6xcJwj})Bio8R zqwkDV8@j0FTdI5GTzV-9SXC$M9IsIh{h@XmCuF%e>l~+5a+7V*!TI;m0m)9$!TI)j z3BuuB1xHDeZ~_TmL3Sy*Q+pU)R$ofmV!W1!n?h!p6Y;&-d>%&(uyTF{dUqxTVe5Z( zso`|d)G#-L!Te%>Zf=3F5986Wa3l004?0XSWy^ST2U7rUP~wTGDR57Es@junOm>EH zQJV%tJoiQ7^MV?XBuzA)G8%0InC7a|Z1GyDfjqfN=i;xvl4*L-fo3+`@Rh9R^CNdQ z&IY4ycjU~j=vVS|_lpj2Z|N(0?Jl-AglZ9d-A)#-IAAXvi^|ym+vKkd|Dg1V>Olhv z_DzFPirC5fn6nO=m8kW=EhCt>VRjrLCFl_Jfp!T!=m^Y$n-gkMqk>Y>iT7;m0X5Tx zuzbMofk0bYT|W97gdWzz2PuIM)C>T{u&tmeFUj>272B3_%LcQ4CGMv&IhbbhGlbk@ z4rw@qCcFn4XI=o*=~KZ#4exq}9(}rkl7=|smg_kZeI{1NTAp}R7sxpcqK+gek$m+* z>Q&uWOpxSg@aCrg6COotUJ)=3SLFJxZ+UmrRJ^ySUwvUzcyDgKx@>Q4;R1hsujt=c z$f`et(*P&<2BNP&_MzR6%X#DIo1AmwZB8i*&4riR&3lY9Dlh1ac|aV!wNTAP+z{b1 zQtdBJCCH;<(+v--L zYJ$~pLMsw74U~XC;8}0d0#d;#B}NNC@OR#-Wk>M|xtO8Y4QY3Z!%JdC&a)_bQ=P8n znBLT+DKgm2_D}*}H`;H&He{g96d7c#8C)nEs0E*s_vUbT-13g1euqo%zU5eK6Z^$} zzM}Lr1-{7EYRIFqY=b6nu4JSCt%dF>XJ%Q^NL`%y7l9V7QUwWEXPSsooVsAigF(D* z{O1ZsY+ur*9i{<)MO;HhQfAeJ>aI2s)kFv7!7PlZs~g{y@*VQVZ}|W7_AbztU1go` zdhFLZ`|MMz-lytRlC_uV=A>inT-yOb+nZXL7hLes*E1g&jm8-==ED@w6KuSP~La+c8R9Z@e7<^GGU=TF-_y5ni*53P^BKR2N zrr_-Lm}@@1`Mu{iziCLp>Aj`5*Ie|u@NQoOXHsYNYo3O(a57~pkGs9#ZgZ@J=TcjU ziPHZF{$=qAXFJd!lq8qk-W-$%&`1Mo$4s|`fs$1LM)HF-!<6vLZ>_VdSK;+*GuY87 zmr2W$lf3#NjUlaBL6ijg^L1`Wgp9WeB6)tqVNxW)%CB0TN#WzbMo^ue3|XR4C-lRX zd%<|oFn*Li3&tJ*0AKJ8c>r|oBm+QE0uB#2jke^uk4Fi|cBS(EX^kEZBM@&%o}-}J zDY{aR_R&(3HP2=ygo|l(Kn0X-YATx|VX|fsA0pJI2iMfbO@^9+pWQY6f*6&vma!v| zSOTypsekvaY4PDSY`!DZhM0P&keOI={B(~p+@UhD)EnWNka!7jpCE8XLa!GdAHC_| zA)`QZ|0Aa+RddZdL$SR-Mec+IG;bdK$ibPyr)~`JhXH!>@1}cVf$%x8z7m2{caFG;5v$R7xcE!piSN!nT z#|sBH=&fo3rNds2rdF?=GTB01`YY6xw3DKH$8a&>*_%`IBTkyX8Qr_%HI zs=<2k)BDz|X-}_X3#Vdp)WI>iK#Oz4* zd+XJ3L#Z&-4+ygCZ{QssZa8_uJdEVp)e@sffPeMJ{wfiQNYFm`Ici@m6T--fFD(uK zAlD{_m%`jwmh5t<$VY!A9S^dD866TJBSO_@e}ewkulwztQD1?n6>r)Pz-a0SFvGjL zL;Ht#&YK7J7nA+yeZy64szG6M5$`IG65y^kD9{NCc#DYRiJyQOi@%wtf8&!o*^VNc zle&Q#3eC*oD-EI8@NP+!(iB=T-46r-YZ2m$r5yiL&|WNs@z#&``JbtP$Y%K9HLJ*5 zl2Hb&R3J*~&)tu53_pxGRh-gA`JX1)2a31!LI{VTDvA+>~8?1-LHgK)j2x4lb}&r(r6e_;Qqi;)z#X&s*ELf|a||fL++6nJ{I0y(ckdN% z`rUv1`0zWn|Ias!5-Mcg6;+az`<|KKlb8F(`>je}%uTg_wlG@4{s`=|mtR-zn_iQm zXJ*(Xk={?x8C7_eW#hN)7LmT^v?lg!W_FALz&xA&l^X?elJ;b_VsPEX2q38qi4Q-Z zW1?sth`qE563kHfo1jHj%cyAD3pQP6h#5ElGyL@I^Xd;V0cYC&9Q^=q>ocK0u0eB| zJ4%&l?ue$Ee|jv#Htlw^_+Kt!1zA3{4DS0n3D>eGLFALm`-OR=%nFYIUelMP{_FSC zHW&r|u}5#b0KnU(JmET&wZ7{M9AU}ygH^?U8D)N;f$B&>@c)dGS~h$B*>A90%3(J= zmKuw{`!m$Q;DtLdG7&8J!OdT>$aG0E$zcG%MQ9P{@;@9r_Dt@=(|hKg-jmlKOS|=> zm=^+6voTBrD`X-2nX4M_1AN{5pjxMplGrO-$dTz3#~fZj^`kuIF6@k{zl$=Y zqv2GI?N3Y4pI8<;9CljeWH2}q_KxK27mtf_G|m?qUyorc@l!wzMjDLR*iViWfaJsI z0UWy_mDd1mjqbaTNdIwug|a0)`Q(?L9Pe)~?-(DLUhZoypB$eD!m>Q)MJ=7GbeXT@ zWGj4i0aszktK=A?99|7FSL0I2&L=uK>pTXzT9&@v&ydIE1(V{T74pa(;Q9H!KEQ_> zmBOJh_xcRsiu>->e{a5gyqbv<{QBPoIU(v!qAHOTNB56c#i=-=gZbajzXR*#>PB_` zq|!!{`c9r6D9>N74(RTQ&+nlF=au_hW_7)SYLogbPtPk?C)KJ*Fso01H}Uc`mny^4 z$@J-|_GwAACxt>Z_K1GDhkSj1oIoFNVw}La|C(eh!g|J$i2-4+L=IN`%@XJnaI7K= zKr>6)j3LMyj#oVTQT=!Jax)3Ry8;LRc=L+@Lz$kosl;vZ5p-!^av*T)V9moHT3znJ zpAmZqx}5kSy-Rs;JeLj&6X6#k67R*D$m)~)Dk>lPqW9t-bkw(1e~gf2d};A_ECf!z zu;*C;(VqNK34?p4_ka5&ku-4RX5?q_t0pX^UwqNP$PULTBQUDKw{%gik%0o;i}C@xWi-#nGqPu48C2Wbx68ho=q-uh z_&b3+zh^jBK*K#e*jx{Z%(D7UUW`=Fj<%kWua4?1iOu+nqg3^1xt;a>E%lt$%*w&6 zgTAVrZ9PlAI-|F&%<=aOj#TP7z~!gUQ4h{%M@eDoP|vQmo}sT!>FsIPb1Kxcubu0V zrnHN8*{x791mbke!8c;A-74o<-}uC?qZzh}_kt5p+h#hxI-zEc)65pQ>IDlk{GEjM z&*SnQ9&E1SE|t8K7n?zGR4-VW;qTE<1sTP(>3vHTxA0skq&82=wLE8en7@#vV0i(T z7?oQp_(7gO!t>2gL{ku{%dlN7&pT8tay~9nBNsAQ?Hu0#^#&WhFk7 z%oDe}I6sva|J^B~{p=AxJMCxQ&1V^@auYwp!QyhqUG9XQHFV#%JEs>XTA~ytxmTLG zb|9ZgZpK|$!j76_;F4r~ew5!_UNF5pul+z-+y5icw%&rn_46wc`M5O09FHOLHEYKB z{1BenSO^~hE|e<9`#?QOF-x@S0H9f2-zdkxPV%hU&y9q3xsJ8do_KKiMpaFab3hw0 zQtqF`ZVe6|+bA!XFz*#r?3F7OSa zoyAh^#O}-8Ns2$+ZG*vAuuza;@N8(w_MBCAau}2=6e-iyN{3TPAnN}fjAW)R7}0tw zZZ|6AqGhKf>ORRuOG#v>A^V@bX>Npo^DHp z-OQ(FO2zKeu&xv%i6Xr;E4c{zJ=PwQeI}Rry)gV;7Dw7`qrv`4>-*1I$&yPk)b$AdzifF*q3H}8e;?dH2`zO%I<@A!G;{CdhW$B_EqWBCvs%EAcQ-l=dXd<`T zk}AkFVL+Ntdqacf#1wl^ip5e?ap1NvMaYdnt)?!2NeEo3N-@sFTi7`W-oUDRs?lM@ z8P8E|2Zvh$*7sFOuUA?zN7cf(woL9T?ei=V8vFo_oa^F!BjCOu*a|JFz*o}sv}?E- z3?@7IlG^bHKHgXlvN%|i6%UEfuTzEy?Nh6D%-7871wauXp1<1ec%yrPoPi zd~CeXV!3B3j$|O`mK=g!rf7V5Iv@v|JPf5{L#rdpR~<6@2%}WbYyflg302_OmBnvq zhFrQ#EJd2?+Papm+BaEz!|2!68$rP$ihE!npaGY;Tb0&SCM;q(E^zp-o#bmRyC%-T zv%}sr`uX(i8iSj-`{D3Eu`C?Xfhk%WC+O4Ba795m$x4CAK;!`C%*p@a-J@6(Ipa0- z=SPOaU{yJHoL$wN00rfN81m*Qk1`c9A?R;%>*=mIi-WtN*fJj$l&10E3M{_5G(3gp zp=C~;3zM8CFG-p_T+c?eFR#+!@$eU)9fJdlwZ3kBv5c$muns<~q4z631Fqj#kuxHF|Xu;#>=P-G(XU8y$=f8QczhR+GkNMQc0Maiip?F(|Q9-Zg9x6b#PRFPQ9hie4 zPhz=qviHcfVTIp6jNBKhpbWC7;xVxpS@5`x&ENih@*@c17qKuo?O{@g~-Z8z!aok1EGQ zN{T?hkh7dZT6ha#6@guaw|+MqZlpf&tQFez{jW~zeRUIvqc}b}1Dhl4=mlUM$7K&N zX^fNGF&t?749bB42us1ZBi=X}I|G~-(vTPio7eVT1otGlH~aUQfb1ozre1nEYpS0paireYR3P|-M z*kqa4WH^$bS&Q*=4@O>ehU@{Uw+;P1Y;J#XerI~DayS=)p(&^=x*^ERC`ms)PCu;T zt5eO|EZtWc^>1+6)s-MtOeGA)pt4R}f6N34 zH)C|h5CubG$(Wvb7J%l0E~=$+Y2t-13BIvpD^sIY4*V)w%%pmzfoPI24P;Uq(MA4r zhr^`)Ja)rc@y^lkp)^bH=-;jf#k)oz7D!%F*@YM0rWr8gmVaLZ>lskJl_AmR_wK1j}bVxH=#!%)PV)z>~ z@)m2Ghh(P0#48stz~HvSuXVFN)Dzf@I+Qn)diizq0xPmU5PH_UNRpeXf!3JGtIlUS z)bT*QQieyB_F<4!UXlO7mO3=zpygmyF~v8A*UI!G7A1}k^>3_O?E9`QyscYzp{nLZ_<}_=txu^wS^h+&c{xGj3}1#+ z1SAlefhMPpG*FaY5ITE^F~=@4)e(vV4pEvyaemBAVT~EdO#h}(Oe#3a4P-8jfB?fI z6bEhpz_V(8USeS$3X0A2Rx?mco4F(A><}m^D5f(|ta=8Q;*Ti+Kr*^!0B6mMtuVwP zDHy7@0K)(?>k9r#3L{%2F;08(-T0dE`5GFmO!?E7$UDCr4xeY`68#BIn~GfpftiU? z;Q?i;?8%xLO=@v8R9$>f+T?|L94CniNaG(K2RmCGo_ZIl)Odu zt8B)XXxHbkO5k1Q1~L@_GYZ^5wt^PoHx;p__g;rB?N1CU z;Mw67BFIm%@z*!jBaJ7?A?=VIhC`b$P*g_+(dlQA4{ggVW1@A}SqFDL(2T7akV>Wc z>l+p6AjCPAU@$%Tk0#ZqZQy#8Spraa)up~|SSd_}3YDW{ID4qHt07RPS1w_?z@R+D zsZ_nm3-0hOqF{Kf)7fZrGPzGRGz=1^bZgmsbN2EZZ!McQy0MY)(`l9m$%$UXzDjdt z52DOzawTJSm{rY3ap$OB!}!G;UuqT3pj?To@K6TYD|jz-WL@V5t#}x~92CUwA;+P0 z#F_m$f<)ZS=T^W0B^!XS9XV=H#w;u1!~ZL2F`+4W@deUsT@HLzo~<8KX^8UORlZSW zEr6xnfWGMwNF={WH`zSOWiu!T;ZunZ`Jy3$L19kA|4k+a=Bkb(+5`dFr6oFq1_I}` zvI4PiJKKNsMccc(L=mZU#9hPT07x>rD~H#UiNmIv{w$$j3bH65C5yeZXb-X5k+hX> zM7$6$nLG{*3Fw=Hy0d5uHenE!TI3M8QJ03_p;=RFfI)o;qo6gnw7f<3? zW!*vC{QX24(xKsANiIyXgV{k8KOgyo(nN0{Z8}y-=TiW02Xu*<j2EO{*#a1 z`|m=0pPni%M&@AD1KLz4a1cCstrtQXts}^Ta|}PO5Y!XYE@eq8=BugJD+tt+6d&4L zgi|6nN)y_5KFQAToJmWmKkEL=w&lut{P0zI7&7VAQcRAv=xGYX;buxp%Y+7iggU~! zCFWu}>AD6x>6;_z@>OIh#X=YbV3V>;N0S=Nqfq+XRRHJ|u4+&E68f5ltDh2&8YfDlKQF>VN@}m&@_Nh zjYt96KA}#%NgD$O3rICGHXb)lB}b68bHK|CEp?LtBhPnR^=Gf`ZF_j5m`K;xaL7nDRVSq5zC&eu{k=En;3mox;_gx&`Mgkh6iDR}7cU%CXvF$ih8Gd; zw=Bhx=a@MB;e0DrYoY5@hP>UNN%)SiGbu7j2#5nWlq;vc^D$!u2Vs_^zpTI%YE>dWwqw*Z^0j4QJN~LFS zfhZzYToO27m2A*ws-nLWwBI;d9EFn&>h>r|uFK?P8)Dj1Xaup?(O8&yiXOUh%tZ>E zldE4m9R4e*U1^|he(WX{5j9*=%(655v&^h?O*${CN4Jo!OX1i#=5Kf#;!Uq^rsIi+F> z)x*aexIzdu65A5np(zFWQ&gK+8D#Osk*13}`OZ>2yw?k!106myz|^eosu0k{LngJU zf(D_T9P`*+kNhb;!jYwsdGQib^Tdz2GA#jIcy;?e^ZT*@qK47*Wr;C%M z8eRwFSybba1&!-&C5U{n+_sKyg42N3$C|dKmPTZ4O&5N##Ae=!H%;H^ZbVJPW7Xmf z1gXOh4_(Rq=!O@OmL5xLv8_~kr?|)b$II<|Vu$^Hv0PTI(+_V9&*w^}GAySxp;yjy zgS|iH(hb4`b;Rnf9CBt0GhQuJV7X8f{X!O9Y++V*1n&Ut5YWl{4o6?|b=8lF-;sGG zOB+hilW+x4!xaoIV42SC0>k-+k^|hCam@s_c7#{)tddM31AMpRnYnSILM<{Yo|GL2 z=Q@uF1~?s@S_+k}k;EjuwfJN0|IiSI|Ijgq1h-GK zMS`^ib-?o9PP4o5NkIJs5~Y=v81$wiP3i}-gK=+5tu+@o605bB>W6ySgXOCMSKq}| zr~WN%7Wns!_t@Ro;EKe5d|#a_mQ_R50v%4$uvbTE5$nl^#iv`W6RNSj0x304pcbNK zc^eDif!WjmA$r$bqzsh{&uP?Q;p7jm`^1>NRcLm}P}7tt8i#m6W!JDY~X;+|ZI z#4^BeJREYSG90S=^G7Tk!W_kk@vH#WgYai6^PUVX+Jt21|ext)c3rTet;Xro2lFf$$!qkG+ z4)YH#=7I$d=CF7aN-!AG;*)wZ-BbWX?*FhLB0~9m)ZM>dT2oT|51ln)G(PD~w09Sr z9N!TiKOx_&>5nb(UqWJOGff}Jkpk>ZS-7R0`a?vteOL%WL|;!TNmGJYe0{>6#iaPm zXn$b(8SmZPJ(h6@&YInr3`&SmbuR(OkwaYwN}Ik{fWH`!-V6RW+En$v#(2Rl{r@or; z>9ckn$uM@3x%7qg=mDO!NilbUBtMmxp{w=$JBCcIrPpiZF!52fAX#5_(;d#V|=Z zmx$k&a7q#S)mlbHa_Y5pDq~BmlMI1ex=!|nK<}OUtFBi`Ttu&-USzQA-5u%`vQFz| zx2EO}5LA61aP(|q6tu9)L#uL2Y1gtIayG59iX-3wzP`6r_LrCQH2&Aqe+erK)PMx; z*WYuMHX2g95HHr33@O2po3~&~h=F~-4^!$EpX=3+e_;SB;s^CF_2g(fU6|Z1NZ@FZO)z7*jlz0oc+10;~uEl z7mhJgZ2heYXqh;GCS0@7P`2|YhP>!JJZ7Yo3IPO*a1N%rkT>jFtDIuAa5Y$mUyOxk zYZ=>L>7(8Swle$f5bxkjy!(5z9KVB4!Hr&E1Ay!LE0G&vFB18T+Q@%Q2R&=+6 zzKglVR~;q1$#*fg_*#OkV)9)xdE&3MqPM_JITZT9$(RmUS!y0v4mshrgEA~*J+fR( zX<`{eVM}+SwJaAT15*_%{&p!Ib7vmSp@|~fOv=m;iH-ldbfVo{Ou4 z1ZF5ac@<`+Cf2D*ns6l0k_Uv!whzFKye2rdc~BCt^b$_yfuGS7>N1LLXja<~5*=*K z#uAT5d+v&sjb6vR>G+XZjmVCHr1*rSL-BD8O7orIWiIAsSs9G%#SutSxbVOTHqpPPLD7i>eC;F+)+iO{zqj1 zz1s}vHc*9Ex72_3+hRb<5B27hL$-T@`_}!tZB=0`nzBGI1%@9|mQ8%}5k*k_hlA_@ z(1CVuxtAaS9!de7&58|7Dq zIY1pmJ)$D3kGc9Ng`R+HndiEc)~Tfz#cqig=;~6gFe%n4EI@SxC}!j`R)_exrdpIn z&yFYMe}gjuHYtT`irjVGk!Cso4>MbBv`<)Rqcz%Uo|HtpUkY8J?EK;-><(zGDe**D z+C_Pxmt9e8FMiV%wT2i&IFHa}5Z{1P`U-~n&J?lF$~|i>q&4IL$&E1WYIZbqihH#( zqq4FPc!8jh$0Qn;#mh}GKx=&@3NiSlNSO`+K5qbjBJc-mB`U zq;@hxH9O}*pdOSAICNIdvpIg!J|iKy_M}-@>eYgp5@CEhb4>79{fduEVMDWLqLb%{ z6XbA$SFikB{cm0@C(gHXU&{POI-B_U(cKEq$yb*`d<+-U6HLHd6;ko@?ct};K*K+j z^CUE;bp6OqnUASbcgS5JjjJYMdLMg&zBc^l&2r8 z3;^(taC6#!odm9KdkAuIb`KlV7%IJ2cK!te0TaOa`MXzBHst5$R~|isL_=&rLcckXJMc|D3@=f#e_uYbuP?OxS zG@`Ir#KAv1J-^Z-JOPVmX=V_y!b zP43U?xBh87yLj$9lZ$FozeI9;3u#b6Xx8sZsN?6u;*r!TqMk-WVyY_apl@qJ%4(}dhgAfsW6!o6?+URz1a1s0?DueI@JWEZu z{hMPvX7RJ)#XqNz3=RSwK~2mc%%*rqCyCX0{q{f6xPLZ{`*^2bfu5@4+qXJkiX!1? zBDVE@U`u9)8p^ESdNLd}%_I^){Ly#@b*&xx_(`CS)W=V!`)h_@|KZ0%0ZPjUCj(Ad zkD01V>#w{X4Ni_Uro-Q-QXqknL^HkpOL9-rWKw_j)ooX_>mMSQBvLG6T7T(Zh10G> zbHDYp=1yJxYf`BAglxPU+`jjFbq4^^ z!Z~iEP(YwssT{CQ6ZGJcxsw1#4l)=NxYroqFJ4l7 zT&`C%)Xw{hvD`&ieU5V+%4KH$mPmc`z z2no&VUFt6YLcXUd=L|I5m zf@05STHHU1j5pL*{Pajro;p55X?%=K2ooyXE`D0S{}Rrm({yS=iiahcp0L+A+C%M* zrL&ilAA@OSLQ&*Gicr455NFwqSyR1@#WZ|nT)MamWhs@V)N*U4IJ%`_EU{l)2~(nF zdH0MxYa@-3z$Sp@(Lu~0^q5m%2k$n>^nQ5WZ1a@AYru>T|D-+7FP_SiG5-2jAN9_x zKG@tZUbdgWP`KhFEM8;>c@Ho+DLhNlgs12GrDuh6if?9lseXj1Lyu=n;U6uh#qW*K z|K%suYcSsWW_+J6cN6wtq#2U1`3Ex4N}eWpToK2m1A)8_JxmNUDc(H7`so*cI})n{ z;tokxf^qGLA|A-cR!BF*2Sj_!OIRM@3AgVC@8NlJ{-TL_wF9~c%L5u9DoNP%sHI26 zA_eczLh-3(hj-HQ-!HM|AvBX9If{7sJ(=JTQef9#Y}j?3*I)eODDk+y>-~|93nBW& zp9GV}S7EYc${Gvpy6+k#Z9+LZ9DnAP=5Mbo#W)Rxt2%(wR8rVf(*^Z3pTwZcM~i-Ld1LqH+Ue4pgakFU-oY%{g?}R zsZj1Rz(Rm%(DzBZuJV|WDC0m*95ZwlJIaD?Ak2~#OH_hFL0E6Ptr~)COe_c}Zbja% zfP8JqxHh%GC^|3F_UXC$KZPC!79 z0NV9u@9fs><3&$o>jbc`ANf?bCNpGs;F+K>bXKPDUHjmmweiACUy2C|8evCsE3=QT zBcatoAY$1L4!D4Y0qj5gEB-QBk!L1Jn}9()lfVR~7jlB470)!2>kl{~Ud=MfrQ#z( zjHfPDoK<9lf-gY4*UqR+K^~a6+SvkQ#jWM-3~RG)Ilm3}k&HJfJO#@T*k*`B zY+{~qcu2M^+M}gBYuZIKm%7fUD@|9OiC>VGYKQQp4f%LCj+E6Vrcm!4&vvjWBFUZO z=V^<)W0amR$D9;;f-Yb+(LBrZdkN_*}TO6 z>qps-<#>X$-X+ptaSSs%kX38&rl)$we2 z2yQE3$==6cG9<(?$8lh?UDgrb$d;?hT`#Kk(Vh65r8r!|#Q2asEo5wT@u9mjaChdw z)r;T?y)kznL^{+f4Oum@I8vv|!xOm2LOB|F!9>MIeI;q_)w|^AX23HOs|o8VRf0$B zQt*IXlwx-0!bueh;X>HXymc?zd3W$boOdrX0o7dun_fE)RdG8(mC-j)3q^T^KtISQ=hBbjL;Rz8mssr?$GzBC5oL}PIy={B} z+;64$)e({ks(;bg9f zPJADhyA<+JO^Z>F-p0arrtJAtL5*{{lne0NW(E_wUhPzxx(@jzn&EZJovcu~ivp{9 zf{!OQ?~~?3rb)8`y1;uQ4QyLP`3+ePl3gM17BdjOy)*T<;YCEVVYxl~F@d^%7^@w3 z?4oqtMJ3&XvhbrO-1;gFy_->WjZA?K)U!n-#Xa5<+ZHRo*K%us{1+GAA z#C4f70KNx8)v|nAIJWtHdWLxuRZCpnVR^Kc7n0AWpXjh;fp8llFE5MYEm(>1D^yQ9 zQ-!1(KuNs1ToSHrlNWHHWT0kgqr-;as#tx{EEEzLros^)9J0vJ0ZA!xArF)AcTW z=qg2qaj~!jTq!;*d1aHcB!zMP2b{q8xo@QPyL$D1`I*cKiyd{3!O6bL9|Js+9@65g zMFHDBFo4akft~PP45Y6T3pEy_62})snJ2PSiA>tBtq7@ z5RpIn-vLoxDx{Gh5!Kpg$7;TJ2{Y|+ErWZSA3=cjQK?-r9LH?ck4K&HCBzj}XkZAwX}2PUuoCjya;sV6Wf)v6RU5U13@(QO%w zq-41uFF`3#p=-iNg_*AiBpGG3-5k`3CsGC(8{Kfsl^kmm$M2sooTsFZWF(K+uJ?`|%i z9PgQ4t~8f-jP2sle6roMO%*o#zIi%dmp}tCgxFiD+!F9YB}LddwGHo~Et#BpqSQA$ zVckaX12OTph!17Rlzqx)w}N=trv!F;OHz*M$)0jI7d+W5E)lqktdPA@$p^4|gF!-a zfXz_uQ40gD$vF$aKz&jO1#kmbNFsvUn;BE|)RL7N>2B~NI;54AB}eU`OL`bhN11PT z6yLDE-lk7$oUO0ICF(E?Z4F+?4(5`!%d8`8D|c!(s$D>|+FouK840>_?rVA^sJ1hw z!z!1?C(2|Fw+loJQ$KqSX_bz#@3{fo=glCz8R!j)M0g&;Y~*KVd~ur#z#Wwfu&G{1 z(X1}ubAkX_v*z^ipC3^#eEeiuK`YO3GhAFl*Ay?T0`YaG*Ur4p$I1lOsVDs9@ilDW z&w&!oKPK@n`Fw`m5~ zLpgj70_`?|N|nSGhA%FMO$#QCMW8iap`LBQW!89=ymT4y&O`?JY-O8XpXh zk}M=oQjm(@<7h)A%i)9Zfs%p))HoJvR2dx6m5DQs8I5+TjL!#tC_&fLNj_4BCvR)n zfBmiC?8EyxCozuaFE$ z&1iRut20f)-IwqKTDP{u<6nWzHMT^ZmW#y+v`#qV2}CNBE>&4b2F^|?24CTlEEQaS zz-j^RKx4!p3B3G>etO#Lj3F3elaTA?w}GB1u*)Pwj#1!%XxyZRckFbK8omrz*cJx| zQe4UyY_V4y`jbS*bkXd<)JbL|z5x-B)eC@%Ev$EVpoquOJJSiwUK?NdVNZ4F6y7#} z=HVjZhM z*9~dG>jYIhqX87-ITACBZ=?M>Q6A8NPmp}g%VmZWn35>COfqi;X>eDQ!=aX4gRcY6 znc(Go3@bj0o1%8DMR&B!D9#v&<(SoucI7D~8a<%3l0vCq9m@t1W7}e8J3_$CwMLM@ z->@+cN>R;V0}o|hNV@?+cF5NcR>J21KnK?_nF34ZQR{m_-oV}1ZUTpILn<;~ok*Ee zEdmpkk>a30cy%qjx-e>N6`$&+WnwInrE(dVik<`yU%+6M8LA!B1<%NB5nYs@NELp-WQZfK94=^95p%Up;qr8t2lA-l9x=shefYG{VyTj)jaSBFDR!|dJ8b}SX5pQ=vE zweHZybVsBG7-zeKQwmJT{F;!JVQ?675Tf;~up&6p;N_CaCaPCA#pe{+H5}70okNQ! zQ9HUiThU=koprcizFu`V)~jCYv^&&p=T4FvR=tWCKUQb`soK=n`Y@mQaC*&$k(Z(g z!v_Y#*RZe@M=ajh4sJ7-3WMWp4*&ugI2J1oZC1(=loJQ%J#H$Fv@g5YF?7_d>&5EX zAw@m-_|zH~Fw`&`Bm}5aignl{$)qtYTpwDcMqhTd#YR)8r=HeOf{Cl|xO$uTEKLxO zb*@S19Wth0?f47Pjyc|Z;c})6KL>YVG1f4hMHP_XYc?5*MX;^^Rc=X zfwj4?@t|_yUMP&59B&h^nf{|oT9C=o1jaikhk_=;QK}@)E%u(4eYV3xH^QF@QWw_C z?xIjk%Zw-_BVpB$Vx;S**eDj0o-=(}VX%Tc$e@{uVVMg&?5=~GOCYMZsr1Ta=N{Nt zFZ<+WQ79HDW!H>SoE3Y4ZbC zbJ?Fnq9GZZ%CJ*n=81N1fk3>_1fh8ke_XLAK8Tm7FCsPO8AbHeO{X3u(|E$~lm(bg zF`P^cUSyz#9gXd7W@4ghlMdSPpE)qE{iYo^8s&FFbf5}Ff*he z@9nElefdFV0uRn@)q?DAxT)M4x{^JcwOnevostd&O)7%Zp;d`uC|y5@n{vm!vcR@8 zUds+lpY83(Z1t0$dm%bh)7pQdvY)Wg^MakC)rS@27NyeU; zSb+om(23|7&e`XV`fY>sV}V{FBX~E^0+W)0Xkt-5f+`{#^Iq^;JKJ=+jx?3m6lq$T@*Iyt#kM8@Uzm~|_px7v6A9JbZOjcS62tGH zOG#DOkogkQD9+DasyU-Fk8Exdq&LVw6a*ku>9_=9LuYb*e9I%4Fb*zM$(f7~(m$oq zi88DnxF%_!t*2iKugv|KBH#KjC*i&{R9P)Lt4Syhu%v5q#T((ip5HNMSFzwJy>|wl z+y^vhQRwmWAo7*5IS;^s+A`D25>x@MW3kM`XguA5OK(ADrOLphRM+~ZHo3q434LEs zci1}1gloV^K-LOG1!f0i+B`CryO$rVJx~-8Prsf6Y3EWqhkuvpTpI1NBcwj~><(&_ z#V?M6&1zc}A%)6F z3dOK7kO+ggdp})Gny9}gE_Wa@ux0YI;vEY6V+J*85S0A90J+CdY?Y!Fsc+409g!{u zH~?-q79YB46mK^xXj}7HV9@e9YGV(%%#>mVVzpi|-{2H;G+Z?%9ukyzuq))OM0A2^ zGM<5jXlB;JY^m~|R67il;LS^d5M@2c8Xz3AOm7L7^b`>Vd#pPcY;>GX=e4FGe@@7U z9_~7;oQ47OVlyJLI+zuZ!~cOAJd_15{ag+SJ{LRHpN_1Jj6ZRsg*($3z9ZwfMQ{R{ zpI(?q#$~{XZz^qZ))is_7e_z>BvX?+rbD+nKVRlQ|I%lbcm5oSVE{mGj#73o%CNxX z{X?NMY@~#u0&{CFYhQ?mB@ZQzUjikBu;QoSgcL-tt!Us!h7{>~NWhoL!$)ELtPvDC zKn!&ybFKoWqMZXV$C-WC$RznO@b=Fjta$8Px)$Cer?Do=W-49HEF0dbUMSd3{YkCD zu$jJoLcCMWf1_omM;~h#>nqwTp0&lo1@C+@T%_W)>_R4K_`yY})sev3@X>9i#uKF7 zRSq^lL_eNtmb84a230Y#=ZY1sq2}{b!mgl3%?cqV46EJruTu`QNyRq$OMx~%-G*D~ zMLwx=Q3Vq!S1^d}JGOR|`F-(~O!QbNyHE9$p`4=g0~Q&R(t^-rY5NJi zPzxAJ;x*77$RHBM!fW)JYpkKy`Q3hFm0?JMOG$ZfN19} zA4I;%!)Lb-@lF^KGksSsH({ha`7@6*9&02Za-To*FZB&C^-VGR4WeHj9}rm{noZwW zFYq_zrf)QGAlB#4H~r?)*>7n6QYjx0=Y?WlYuR&!_tYb!8oo(2P8kjw%l62b(~OOr z=s_A0x`Ly>Qa#j5P!*9Q@0*kme_oAbPT<%tM_SO4X}6>&T1HsX6WD=J4@o1`OQjId z6=sXwSvrIsk)hpQ3D^h>MeimnSQ_*4Jh>;h4E7QNxT^>hNBMT^Q%u|3a-6ilR`Att z`{k^@*GGT8>ErPv0rXYzVT*=Vkqx@;oFdDxwL5i=4{uV3-FoY<4a#uv*IHkGU7BV1 zKr(3CTixX40OqKA8YTd&vg^z~J^eiNlwOZ4lcu0Qm&O}yGevOpzyri=w8 zINBuz`&N21l=VDWwLTLtuT!bSD{MvMdri2S+#t7tRH1 zl3CxdFZEe`l*ZR0rUkx@-JuT6Jj*8ZymxX|8$}L`)3IU!U{Vd( z6@sJ0D1oZRPLM3z2#vs;*o0EcBfN!FeW_;fHVH*d6C$~TNM@QnjSMoJGUr)p5rm=< z8#YVjIkV>L3+yAA6Nk*|?7tuo;pyiPh!Fl7%#fdw_4=tml*-aDKHyg^x6-g-mwFmG zAU|R}lwn+EnfGmFlgoYvW$WDgf0QU(6fgI>j6@;GfY8$VR4cR;Zrez3tV#(jMBY?j zArXk7(2)W&3{jnw{9>Z?;GwI8Efuu^>^EN&L^U$j}`xA_1eQW?=v7JAc>YIY>#Jb$6>FmcV~BC^gggEJK%9+^rp#BDQAU7uyAL>za6ts<_4UV9Nl z`Z)yNYo-FvhX}(?*Pt4}hH{d{?{%2tl;o~+`Uw`rWJzM^Mr4pjKT@gAU0_LGYD<}$ zZa2@l*gxrzN`5StEQ{a_e4(`=5XZ7;gow$b`p%^(!kVPYWk|Zx#p~iD{24G7TA$lZ>;-mq3X%sbml>o9V>IGTkTuzBs zWWR+Bnz9&3>|Z2s&MnO(0l&En0=0SH!WnQ2Mhp{z&}cPi0bh?8`BeP2Vs`k3BHJCj zp=UaALvH=){4j-?WzK8!4qjZ5zTzk%c53rhIMBXJeRWFj?sBpk9TCXd6KCPQ0@Bgp zcsluQt|ksSA~?Y{t<2TLzU_(L9d%7QcaZRfrY4Tt!&IK@SXi{YOP}1yTlv%4rov${ zNA>QkE8=)QRoztgL^j*8P}5l$cl|gowAegb6CFFFcV}D&2bt=cGlyQm-a#*w1L(W3 z)GyA@MTtY71?R-@A3P`+xJiS{hfYa6SE{%xJD>^dMj)%za&}XiZ#JZEIX4$ zA0CEFgfWxMpLJpx_H9Tw6B59ma6d82GS#fh>sU7TxQgA|L}H!~G?(ZXb( z0p?Jk3l@#>T_2UM0JYdDD6?;%jIG$CjvktQ(OXr9@W+Bq2m4pX-d^oM7j=>|z0~(H z8yx2B@#Zc5(KQ!jJj}YfU zW4uvgWMYr;LY%raZA@sjsWGi6ST%EFQ;&_>y^Rh8#R1zdn8*~mx; z1>@<|p9WEw7St40;Ax|37k%R*^=Tp1BcW6YPwKtUW#`UDL^TLBrn094jTr$?fq*YJ zjd9CbkU#bDgWFo%4aX01=pqCcN|k#N-k}+#n`w_uBx2cLO;q+&AV4=WX_`6SIc!%y z?>UjNxzrhqjI`6zi;r1kRMRIaIsyCj%ejqQU6h~hJR?6EuTOE!j!Za+>pJScXNjRW zIrI^5j}yVvq{wNYaYp4o&5JD{)r&`Xu^9-b^x_OJfTI7hK3=?XM2abgNVLZlHh^%5 ztfHVcS2R&Yq{Z6O^j&&E#1?-i{;PNqS|H1m^2BTz!%>wdo6?qwZsGakJa0}=Y`SzU z&p*xc%{}@-o*#9KY**m=jQ?Uvaebn5xOmlQ)PaxeYR_#>lIzQzIMRZGC34Dekb!C1^IWC0D99&{3E|8B3(ZL!ntQJ2s7Z6JNK5ElgFklRIRsr1XZ8L3ER?&i zA#pJLsNqA&#fgHorhL`cXLAQ$@Ny7dMyBeQPlT6Z1<)_302IVUT9OFT?4Vd~E5~wMM5BlEtKVw%Oh;B# zclfxHL)sdey7DC*>fmJz$4^JO0GFT21$@TAnCMC_P} z3p(1vI|8= zNVNz!cp-MFb2{E+PK!_^2U>HX^hSqLjx$4@#uz&m||(ylO_Lf1SAnOZBS z3zipSm#_un5yyPsb4n4eBR973eJnt-l3m013>q!?Aa2^=5C=KZ{{_AWUf)d2tuS3? zON~#fM8rx1+7WkgHt+bv&y{oy&o;L#t1Xdd1^&-+Kg+*-%rj+P2`hVu9t@JhRmDzfhDbxNk_&t>{e8LGOkT;cCA1b`~u5OWTi<1)_31r6B_&B&H1ARq;Yt$-~q$`3&>LX$;- zWkH}~fmncImDr14=vB)Ktz0V60}JQoV}972dW0z&p-W+X_R5_GYna}{!D_Ac-8%zi z1Ofr7US^fBkxEd_qJqFTX%eIIw1{m>5o{V-P4Ve}sikn9V zXS$aRdAjXRF9;e;k-9~MlZLR&Hag%oim)IvVy#X>M$cQNgHAU@%w><-v~eyxk&&&% zdAKP#1AR$ z9O-Gkwi4d1=q>muiI0+mJWD*=UVd*uC))c&YK;MWWR0-6u(AKlH&Ew@a%|8EHX_~ zS1F;pxS2!j0M0_Wm=R=(3JA5INXIAxVi67yP~7!hy+ub2O{}Agw?2z20^PP!x%<39~va{(iK;p}nYRjJseCc@SrU@78|+ zB`l(Lk~CrIyIGCzS;f^l0N%nS0#J2ih$4E)hnXJsokAiy^+lXUj>3j>0$Q(a^AsO~ zY1uGCyJ3D=0up!UhAk&J-%g7w@bD4+@^q5QJAR5g&QcFcb6UP7QXMaD?SsWab+GSS zqGCfrk*Y~Df9B!nNM~Ux)=J6eSJ=ZB=P#Ik;3&+C^J^z|&AJy$_r<2$x-Q>f+ezTc zvN>bl>EBuPmio`|tGH@HcRIsL@dB|0Zv=%T&Ym;vNSZ?D7!Zc>sF<$A}P>_2JAskr9;Dyhj3mNG=$Eqa+7B^q;8Oj zfSe(gUXt$QxX79R5XchFZ>7Lh%;7S<+BROA;zqf!-09>=ihZ~3K3pox_pxBe0=sS$ zn3LBJ!i6v77qpyV$8Wh?^KJ_RQL3*{l)Rccp$Y9y4UQaYp|*HeNx(?MKyD1R1U@`A z)m=Aeol{{r!(jH=P@Q0>Bp+?4?@d*dmhLMGRPfCVs!)mtGpN9D!!fofKJE048&7~Pk2Q%G&kD`7Tz&Y+#bOm zEu4#1qvBib;bUInBcoo-VC=m&EF4Hr@}h>Oi7=a`DoPRhmw-KdjRF+cP>G^M@h`^c zEMYRK(t!BHWU>)+c`~U;*UB;u zQjGDihQN~$wovk-_SU3=mF&txA2E%Ki@2v~4kl zCUCEI00lk(0l4Ym2Gb@2;BDKhSP~fPjmE>OkUpI6)aGI;&-D?PA(&*7H5c3Y!IflDaA&cJ4NmUUT-y;`P2%lmMq=EwT+%C z4KkN+PqJQAgeXE|xn=%69zef`P5Serb9>lw`3e0VW*NSp-{j`pFDfu}pu;QEH1&aD z_T5zZ^~elX;~Lk<*@s)+Y#&d{PH$ReO`^o=g3)ZOKfu+o>6w;i?~p@9X8_d?{zcGl z?#k+y|4P)h|Nd*?*&C?92qrBf-=OzkGO^pB_A-r;dqA#M##BH~%P(L;fJ|00xbp z(0QZ;2=HrX8nhyeX&jCSKJM4r`!;*A{otiyQ{{iu1_oM0tu5AtayBnE2HDabv-{zB zAy2YM{i6J?v?_j%Vb3@>S*RkR9o4w?qcSDsVD6QLf+?j!_(-GKPeRdKG^9o82zczO z9(p+U3vv2flCqQHsc` zZ67up-f&OIiM+Koi8uFqwl;j+s_hmDx>#9oa3kMT7r6zZ=8jG;Q?zRXenzwLc^-?H z#RM)h78Yhg$ncen&aQC944{e;qbI+a)_f?81*?!)lFTTMbZQFpF;K9`S#7FIw6DOs z`tlT=A|Zg5v-P;b=7kagDpA_j!SJ(OC0D~$+9#Oe`H8{k+DWDy9ZG!x3$D9pds;~% zK3S&4Hs@ExQYMKHY#GFAES;lh4B6c;*a@kG{ z?^|F~GU+D{qeO=gU>pD=rNQx*@@C-&bw6I}=N?ea>pQ|e=INw1T!K#MdVFS*U^RqG z)<=qCKu(+2;Sh{%-fnA7k}#(w(48AiVpqD9y7Nr+BQ(la4Y!cF@T*!k#ie%E|?ruiH~kPVQ!IiZ_Z-T+KqP#>d9E z8qrpB=z{Vl3J|2r#D4Q?wUTBYPr)O3GMJ={c2&d)i*Wihrg|j|5p?s0H&;D{D~8%& zgi`9HzXtUVcNTf&(d+mrQ1;k;EX`k~MJ%QBdQ0uqXB3W~QGq^#OXxH9tWlUC7k%0k zVF9`MjJ~QIPBnd14dp69x4%KYQYct15`Ogm8>(D>R+%DP0LgxpBM-LG#8TLE5+2A< zTVxp9=)#gX9}d-LqUCfI`E?CH#E@tWT&eN-LEX5NA8akcuchBTAFq{YwN4$|v^@tG zFC*ZPvjPL)#gGmC6X5X)8LYGL=ax!NFj`8_PJ4Uu24+(6S~irXSd1)>2!}8+X@@bl zr!v5h96b!fmmD50i84Ns;@Nt1H2n2JjWCg=CZB(IIQ%-RdmxLF3@cG; zlg7|VzO*I`O{E#qoYQ9-~p>KQF1q{2Ulsg593NXJ>)k=a-s?aB*XfiCA2dZ zzU3u^#fBV0Vf%_2krdN=!6O&uYh4LVyTmC(z&BqNZzVes(8y_c(d|(yn;>iN#8&nJ z6?(u1DR;O>)F(c9|GVJZO6KT&FH)}2yWuVvCFl=aZ9^BXKSq)<*n+b@((-tbW@w5O z2W=X|sMwY40IuKq-LAgOSwh-h|NQ@?)CF7|`|kQ)y;&s7l(^TQ{OT;*Vm!|g=nW8q zPWb`=8j?rM06=mhu+bGQEIZ<|_y`*RMfvkttWOOcn1rF@&j3{_D-IauO32Khua+oF z81paTITi`HsV<-hk(roc^pFgFZn-;~xmIK!^|yxj(Ke*r#l<`1CleG|N*bMbxm}0W zNs#7JM(F5Tb`77cWlyBVBi`!;7BHWAbSSP?IMAO9-CB#u4w5X7@5C@bisGaGg1~aB z2#VD+piS1@IaL_gScL;X#k=Q44K#Kx0k+JSd0=Vr^=1J^ia3^j>J3R5YuohXoL`8q zJzszRV3E%|S@{oQKWt6+wX`YT%dL<_xfqr>d8K(abz$5o7xUPB|I9Y(i>*epecR@udgeGAmW zi6s~kiR@3ZtJy%M`LP6^{t26Lz0(tbx7^K=ZZ~CW@Jbx4W)9C}(N{sI_JJI0U!1-C z2Bs5*7%swF``M3GjjxKg-VB8iPf`FR(DJd?k9GEP_L0M@d3Q|Si7oA+@tvzZ)|+vN zKSh%+K&?bvqLnVI?%1)J>eL+4^W44S3-t<#7-3Iev8U<2oHT-Rm9An}P^jc$8B~c! zJ6X#xcfl9L&hzH`hbJtuHnV${yWM6rQ;mmdusVU6#^JE~Rtg`Ftc+w+WyEB~c?F35 z!A7hee={81N5&~33 z(a&)F5*5*10a)#YZw_t#27vPojkn*-Hcl%q*!+coIrqivs5WU*Qw2H*z^QaKO2j_9 zhhh}!%z*AHDtW4ba0B8OpVUe(E}kH?Ev7*Ze5Qi9j?-YMQ|xS@t~K4k>|;0~5+I6f z1orS$mwbgyfKQGJC*2p|nPJL-8qG;qKs-jt>T*P&Xi$g)H)|%ux}(%Kn;mqgoOg86 zoAKyr>S-y%erVs20ZxuRCJFkxeKW{4MdgqJ?IdYhaY!1G61YCY$t;2bBZy{+X&tGS zi{&zxUc8F5ZaNbwnZQzLXh0|ZRAcee4o~0+YD=v%w;(@0`Ng(%oyN0Ns7!D6Z)spN4(b1pg)UnThRY0p#%W<=H`DAWWzUG zNaiWqQ7c@YVj$}ps9!?iy!c(&f7<#p{6NZq$^lu;+k^+kyMu`&G^+Xd0gyWO2$4HKdxhISo99*ibO6HNd_!F>?N;vxxi*W7}Tbh{r z(wFLv^(Csn>6R;%0CSu{ynN zU_3)Lhik!vRFO_4p1=+?$?*xWW8-gp%uLS}lwX}Od{txcd3PZe zAv9_@&9#)PrAVHk%6x`k-BJiqGy{zV{REssYi>@Pj5y^2m$}cE(PwaK_7gbsED$q* z$OC|w8Hlz&W`Kw-8Nt~RVGzwQBQ*^~S7%%^(_-9T%))m3gAl-MOh9S#KIH5O-jJj* zzf-0^r1FTT4uC+MDJpjWi~jO?+FTEN34O{K9c|6^G7-lkAV>BbmY1Wk@Xpv6XIX@8 zp)x$W;Bsnq3}bEBF3)Bx4NN?FC}Uif^n1(?(Iprd)?u(aSdmuvM%gTe$nMY_PMvGK zx82d2CSg5g)->^g38tIZ)8=ZLt%g06o1=_`Ty2qE;2k4lB5XS8&v5woFk1*QFgnFV zo{{!I3LVdZ)`QmtcSuYs$kO`JcH!ogCuP*fg&UNc`X^(E3=PS_ruTIu~2f{+=3vixgq+RXl8_iC`7n!n}r1Qs1KQFh;b#U5G5hL9-$`G6@!l^kgC^z0reBf`BWeO$2TmCgW03OHLw(0~@|JD$$K z(V6l4-kIVg)TH!^KNu+}BFYHiHO{L5R>OuBM2+NGUq62GeRqH6XFlNkC9?zk);*V& z()3(@fUQ0E+QK*M`9HD0oT#Jz{`{-{>eFxk%IuTsb4+Y6{zyx4GsZ%vi zHmp4hS3n_=GZdCO}9!3EkM7C_0l@k*&{4Df8}QAnpT=4M~7@h&KvI z9*x{GwSC4;E7lS|#X-Me_TUT?ypyfq=P0MSmk)ZQt&h`-s=;gt6j>@b&XKeM=i}Ki z#(B82y4kv2v*uVEEq57-Fqrc?39eCQP;S@w1}`LGjhLvdi?u(dp!Pq3q`|bcOvv%P ziK}l3^=y_mmUIqg5G%5KgdGW70nr998;zUABqGCD#B`*dHkuG0?S;M)9L$t)KD_d9 z-^Qq%v=u?o#lhhDM`;Y{1~%u@33DHOQ|&U)Y#6(M)HttNITH#5ITM!5?@!Yn3M$Ih zX|yr(mTg0U1AxrA_>{3dcnwG$h|HNfA*!yN`u1PK8JJiOhbPf4+X3rL@>02i?AhiR z=D>R8j8?f-B`85_(*kCnqQH@kaG(J2M{0J4|3DmR(0?wCIvnqD1><0geKal=h{UjN2dk>om5kdJ4JthH#aWp^wwj#YhT4o3kN6D<`m zFiZ_OtHo=b%BMG65K<+a^)-BNn5W3N5z?`j(nzB%{ z6Gty5W)grBGH5D(`ZSc z!dnb70bkR;nL zs(o`^)`4K^V?clR0~KeIqR8<3AmP!lNoJu01HeZe%}^0lpv7>2zr;)FW=xm%4}@x&i;ZKrLYWyu`<@g|-nUgiJ|O+VG?U^}Jf@|>`P6k3%ZAeCflw|v zI;@a3{2COOg5sNKHAHMc5eg?Gh)aSPFd6CDafHobRPM4A2T&nczBC#-b{zZ&-66}) z-P+;OHbBjB`AGAHYlcCnD-}Kw>QcG~%!3ioiuvMtjQ|3IK)G|Jxt|u9B&7hQ2X1)W zozj!;ROZjRf-ZqWLk3KUT#o#7@nRAOSxf|Q0VEL! z2&+xX;sKr!V00VwtM$YR_N)olkhS@Nn+M@!26wK!kvw=?^T6F@nt2A8T!<#;`o~cQ z>Yw(g=Y2|SNslN zDJYUD@ga&@Xff@xf6IJCdGn_q1%=G>5YAkjL75c-gG95!l(4IQWx{5p2zwB@s6xHqSI%IH0so%6c_eQ z+zh*ye8p6kj%&4yLye?uQ3H##d&Dob-wKbetr8Bo5@1bX;5z%&AT{tjJIrzmmk=_` z8p5hEg2|rW{*`#PcU)x^b~jst0@5|K>S?r}YMf0cMMrYvB2sSvmjxBLA3DH-xZrxl z$sx)OzjveDKVdh&{A)O8LlW3!Q6>A0M2VWY1LaOG>6UKxZj8^14Uyn>{{z(u$Cj*Y zz*9NV>b~*$w2XU(8E1>W`DwNg(_;a%pJbKDVHnwzeQJ7@fnHxPyO9GH@Xhx^g*= zbN&w@%8aMG;}xkJd*fGm>y_i&nHFm03OG{kooq}t0O5X{<0UZ7aQ>I6Y(g&Oi`8BS|ZcBA5UYKdO}+iLGsxf1)M^qU8`# zL|K?7cA6#vuWG0w7xD(G=uD|%g%J~Mj3&#;FjRsX!5}o|A2w65%sfjh_2grcPjlj+!2s!LMoTjy`aoCiJvaB?7Tk4RhN}gFuACB= z!p%R+886+qZxJk)L9taR2HctzhxXF8;<%BF%}$U+N8qG&rUUBvIWpeaNJLy_LQ}*Y zYUeJgyr`XUV~fcG#9IJoH~WRV9si7Hdn}Fif24DtZl;dV)0(0Cu z0U#1i6^5}@)GTZ{RX`mmRT4V;g*QuN2Ae!89plvC5=Befv(5v7Y3?u^>#x1MTR-?Y zRHl++6t!i1RG*n(M@F}9kdXQq`y^;F@`QG6x_U=fh)De(r$7O06a^2T(LMom1KNNk zunhndk+Z-l4qIO_w;1eKgr2YsyOvjLF45r)O)!j1!q=rCa5k+^g#GV0b$G@N*x?QE z^*jAS$U@MY-6VXY*q)^L!e~gy{r#Wl)DOKjtH0c-U;mB}a{mgM!c4v}%AQ(2!LE;W znIy0)MOH|PACcc8rc>7jL5_ZuLo{C8h`NH!Xy*-&Am-2$d;Ia!;|WH$&l?|KkJY+Cu@GPo z#%(v2UQtb0`v3?@GkiVAH4G$lgb@%XFL<54s6tB&t2e}c7r}`P?GEqEaNvDgqMXXC z8Zs*W=_^KMVKd{yP8%OKRkxntY$%A@wKnBAFT=V$u*JF!F55INuBXN0qmo{?p#<&c z_=&dI4?c0hO)*FIY}oq(F<=vlx`6XcsI^c&n_WPO^DwiTBf`ldMLSgbXzr!Rh_UFQ zLXqHp@oJcSw2~%0n4qDLjRTe%k>vaEikYp_`lN`*a{{cZEC#b@LL}lJ+4wyw9^;@h zK|*EK4i#N3isA#YUu;4ucEAIxC=GJjCFOM$t%4EyF65|WYc)hcRnWTL>8YHanSF)^ zIy$hONJPg&aMNIEpT8FTh^_w+^vghM^#NU0s}Nl3IH7HE24{{7lNIJ?w>fl1=d8v4KRQv>aDeC(L(lXiJ z5g#b-8pRu{G2PJM3jV=(VT8^w8q=4_;2cAM;-0xnt&@hs5CXwN(P5G7XzC_ z9^-7)V`WgySb2t}sah9{59(77J&a@_3|-ZsVNHh~25U3ZwYD$eh{O7~og7i4N;s)r z*bnAIRN(%gI0{pkdnL?Z>R!*hLeTgQ9?r5M%bsvh%b-m9n%0BSWEKSovvq+>+%Lao zY)3i$bIdlcjk|K?Rm)5Vz-*(RL`Q5K03x~?N)vZ{j<)x}mK`2PX>?Chm^>>g$QnS1 zIG`isMv*jGvO@$-SnA@{t08E=htc6C;_nayR7#D-#<|KVXw%w>=oTrU^8Xb#iwgdq-nUqJvzwL5hO>?*cWM+1+b@;r_{&TZXD)c>E zXU~(t5oCblv)dIN30W`XgxyGRwN}N`A`%m_=}8X?)C>bu`bpHZ``PyqvI44Fm)%Lb znn)fQu8yY zwLtm|xzPb7yWP*k{R~Il3cKd|3E8*(#3sXUH~`GBtZm_zKu(7}smn4{fR(j!oklJP;)pKD76qB}amF`V zM!XOR0PYA<3e56 zIme!SrdUWSf^0?&R)XyL&E?=ogt%}5?^S1<0blqh7Kjk1Cp8f(Nu{bD*ojXJOFRIZ z+e!y3145X_8(;g7_r*t4n4y2jL-A(8R})nxbsxq9qBkzr`~N{!gI%sNIDle*_!rY~ z9mR)9COh~>M4wCT(?5-Dp6nfvlTTH@JdnK-ofs8O&%$YT*WluhilLu!vNkdWIH8FG z34szo6~}bQ*@B>eDC{{^O~fKtin9NRs{wd2`NiZ(!RHW`C8Yyzn&df6uVGhOmn!7U-_2HN#$$r;AdoiH@2D zH>%t$xD_oj$7P*vZ7aB06n_eE_W(D?ssZO5IAc5j=U(v+_OlT)Cy^##GY?&$8k6#S z$JaZAa1r)#H)_ic8`%TG9T{s9qvtM=EX%IJviZkMg|ha{Ohy0y@2R-ImyY68K=YPD zI;VN_G2oH%;g1Z>5=JDC-&m?vy-WP9B}Df3P99JtiDbOJ7= zEM`X$3&xX=LXjs3C!wl$>y-^v2Sa`qRijD9$szF*=Gd0U+$SwgHslF5F`v@UW<(r; zbj9DuBoY3DMI9tlUV3y;qc6k_|xNJ|eWj4uu;2jzf_vN_=43*1cKE~^?Ya2epO z>=%Dc;oFY#DE+({o>0=0WI3|#|Rto82f%^H7as$ zz88m>9Z?uas326x0M9kB>4=a|CZcvkvAY`4Xl6vR3gU>q^%%ZI=l>FAzQ$Pd3C7lf zwK^|rad4%_BR4NlCYI%Jxgfg|5~o9k2A9H3fS|cbgSs3d8FL8DE{e?zvvEQh0gu<6 z^X};0p1m}cTs+;k>6INs8&Vpr)+!I{)1n$lFnm?*oBEeu&Az8Ob6@k97GIJHXsN=4 z>0F&WbsSDw{Mo45L;TNA{eBm#iUs(*{^F?~mxN?6htryWi<)&ye8tY z{=;W%4gqMi&4?a*q-N+EXz!VR$bL&X8&32i#Z(LR1FTmL>J$C2hW5$t(n39I31J0- z0i>DVs?)#yPcANKl?@O2)A~EVf3?~X_yEanLup>@xVZ|aZqG!!E;LJM zS{-SkUFodAjMgSoA5CE=I`s}myb_)y98mT|c>aRatA%pPx7m01^z5U3jg`LakON5m zzwdnBD!+8C>^?_V#8&j#-d{Yxp`L3h&x>Nx+^8fg6UE!&1F%gT+$D9*KELe;$2(0$Ph%ko!6WGR4Nzh){wE&{A>sh-QPlvgv_G$xGNB&Mr?RF`& zip4tkqRH+{;7b4oht&mOFoToe#vK{o!L$~cOW$eN4i$6=lZp6u3y^_>{=Ryble%8YtTh=CyHayT#CDG zRycW3j+pGQbk5C^oVM7pn4KOdPtepg5J5@;{)LRgqD0VC5FY(^iY5BZ<*;6}YF}ug zJ;&P7r724_W$fqDl&$y@wZSSq-BhYDD1~ud5XOI=`&XL7@N_R9>D%vyZ z;WjD#@df8+Aq(~by{BhqdX0PwI{ukn2(@H!JAN7^YNZ+)=?dn>w+cc2?gV3{)X|ar zj3i=)^kR2eimM7e4Bv7a(;3c=U|Lm}uXwAgXaPk#5~(P|MllWz%p9i)&~)y3HdA$Z z-eDDHnz({?NBUvEza0$Z@o?pBGqL`b&iRs1MEM!WrlHvo#|+(FG>muEPm`q)scbu9 z9^~T_mUQB?LfT{t3{r1u_zUHBfg4sL&@AYX`NXKT9U3dgf{8jNRO63Pm3}u*84ys7 zgeP1pxpQL?Chp_JR9e6CB8q}aAhxZ4Co2ob+tJpIvDRtoR_yDjP276SDYrp>N=1*YBvwwlkqyHau?*c8?b=G-SovON3 z_tt%sbg!OQwoaW$wj9gB%rG|Trm;@qB+i52VKHkBt2^Mto~&6?m=(J-nXG9i65u9o zVrXG2#5NCKNg3hC-yb?iYz)ff(_k<=PX)?e6|J&!(sk)MJ zLbIkPj&7aDKKt?Q@4dhM?T0@2C#}HbHDU5LfCqlIsi+7Bmy|s8tiV^mYkE=Xkx^96 z+8eU7GyOW7`n8w2@|WZwOBW+e-*SGX*!>a^SB!%UP9Uv$A%sZt!r~y$mG<9(PR25@ z8~Yglh!2dA543i|jQ5jLHq()ETZC&1%tGL&ZBtqS-_qPIV$>hQU&8HU?=B8Xoq_x` zftSSa{rSNsPf|TSAgE3F*RFQ%wOUoPt*@=w;$VL8#Mjd{N#uf)j`IBA`jp`OBs?E?!LMaYX*^DM9N zfe{=_T06~0auF;EgyFgqZ6k;Yqga95O;bsW)4ecBC2I+;csaW^^$Fj0#Ukvh(G-<1 zo)og<&+2K=&`K>Lh#Bw!{-{tF_=o_}+R5Zl`ov9A*jL@Oq~CD5Bw7IYk6zy${i|h! zg|1Q`nguxzNa>@qx>!8dV9{-?KlXFDCRjSE3E70s}(j4w$P5`>Euh0ol83d$2=PO6gE{(4e zj9)X}jbJ*I@AeFjSD2YB&6E!Goa(Q)4v|BVq_7Np=6?MW| z1vQVJE1OQh-25Ix0|6{J6{FE#FBSW5-uTy_`s0TbVmFJLI$XHDa=6Hn&* zPZ#_1oWjsE{zP1KtY6DfCokvK`TmpRt84L{s5eb@$P0C(MN(h5BVUd8^UG(h(97hf z^8K!=Ni$Lef!nV9iqSte%$cdBd<_Preq51nz4f}TD{yOpX#_1F$cstm(e|*)DkFRI3 zS9KgF0t>$sYYcQ1Hor@Mk|xz+1p7u`k`5q8WDjv@N@P;5Yqfwh$azFvB{B1qeRn2V(Cy}mC_;ZM084dDb#~;6)jI9g#EZQ zJXoguq2j81KmT1tHs$>c(6E>cFg~ryJ9reFi=~L^qO{qIa*Cze?_r~Y_GFmvPn4mA zra%1eeqrOUe(lV+o|**QY-+U)OJlKu!{&t?TddSb#+Pe1D4vLLUhPz=bUwL32GS+u z*I3*mU7(G?R4SsXNT`L%3#KCLstPZ{d$H?eE^O4YIaM`LA6@Pqm81NznR3Tcxm{{f zJ~h@f>mt$Q@l-?_jKVNJOIOw8gvB=k@l*~Ws(Dn0T2tfkSWz*w;R*Nj=+ER?!DTeQ z0y12$y&%b%alXc+-~J0GsyrW)+7?m)2?%9NF_IWhaSF!;Y618FV3Aq@-9wYILQG3z7muB7!! zPR48a9LXVgQ{Y)tcopXe!1Sbftx$R1!nbJtmn)10Im8F(Sg=0phc)k+)jTK?W~VP&1hihTR%$H76M%3)o;{Rwi*=szD3g5D^Lc)V3Z zO@^|DnhfQw43%q#;%$|z*^+OUmLPVIVa*zn88zf7jZ~RIS86 zv;BfwfH0odYYE?c%ebdv3?8b(IXf?Z>#yzR?gDo&%&%42$BW(Kg*^G9&($if9eqUa zbsm_G*Mlt)5Z%%h#Yg9y!R#8Jveg30gT?_}wVX6i2jw%akWSLZh3@!;sK2N?cqj~2 zre#o`rIoFyRx)Uwqcxr56|GGU|Jo9e!pM|MI%z69UA5qqZ?$ySyl)S%Ooqc?MjzWP zJE7__J6`z23NX4z-qN&J7@j7wX)v?|^4ee^cpz|=b3uFgnjDhJrc;{JOW?MA?(#xf z{ZEDhUo;E_M>0HLLt)aW5Wdx8(Omfp#EGE~;&`l_tE&RW z7#;{Q*j@3Kah|sy%XdC@LQBs#op`c1kd%v7YXdc2ILVl*f2W;v(IN^TbVQq*R2}u7qp_2-= z6EE6JAAV}tdB^s`4M_t_VPMm0phKhqP{pweb9=$C;=)S-1E(+q!f<@N0 zfgC&xE?j%ky6i!~1)(4`%-OcI_aVqL4xKV_mZOZ0e293(D((X9R6{!vz5{4GJDeX3 zW^;zi#B9!HW;Ps62o+Y$W`p+=^4F<^Dqb_24bsWWKRGBlYLJ(@n|6dHIv$iyxIpln zGZ{Q*Q7+3P>|Btwvn3xM(U8(`V3-S9c&^!{jt80y3YJN~8Z48$G>VHc3Xb}0jN&}+ zC!^2-i7H-?;=D&89e~ptr$j{ayrvAWs$wlb?NQvgq#nhh_Q5+e`M1REbi?=RP6FBmMJb0^EOey}l zyXLQ}Gyv*P#!h9I=dU^uDZB)#1?NP5)p$S5MZ4jkCE1F$DD5t||FZ4^m#=w%ERQfm zlDlL7R5kBe-msZt>Z&nEi<-g;455wufJ%5ro+`rGLSGbX=)UY3(UH2!J)`$5%k@<| zGLi?(xe8=YUz2!)eDX<4nMdqdA7P|dKwMOu?-~8rGHvY1nIS1Fgi6&WbbItOq-?%r z3GN3O0&tkQ`=njIlqGyk!D}3XL}jX($Es2bsxXwA!fTsOoSNho&(#*1e{v55uc52! zW$(?zI;X8>*w=%6zfXYJ;XP*fVmZST<4Oe&m;Z&zF6296gPBb6Vm+qu@qja3UudWYdGlt)g%y8x+jCUm&qKjv%C=I7aGdTmZU=p4WU|01}n@?Ck5oRk4z|8 zsmH9F0fZ-I<=5iK#=g~}AloK>ROXxPl(Us^PcHhiNt3WKSpYc9?U^DQsfdk9%dl*e<@*c&KtzqHU z<&yoH%E_z*h1C0tb!*8iPp!$clvCle>J`5i>T*%lg;XvXnX;`P)^!S5;BvMqMuTG?gQB2F|P$_Om4a)^`1A`oY4(wnvXg z`lEBu%&Nwqj$C4D>U>|ZYwIhK2IJ$MtaCT}IS%PRO^=k74ul@+3RkaL%7pUjBvkIO zQmyKFrw~RRjyrFU7mFXjpe4PEWzj;hf^9Y7A2_muf3ygE%4|crvJo|h+tmvVae0!! z$^NOlw*hI{$xE!TG>;&hxd?c1E05zF>pgN3J+X&7ET21ddP7H=g(?=SR2nthlQ=DV z!P>HS|9>)`zilv}!%D>!2_pS(ybB3NueC0A6tr+X*m2$x7i{G`GBn#jKtYr$!hC7A zm>UIUVdNYhw~2oN*f!kq&hXVO1l{whb5dgo&FQ0=+P=QJyhysauD{6G4^@W)HViie z`T!KA{n39w0TBtbBN#gwbLap(>4bsRA=dVR5(+?n|T&-Z;Y|wlXErAtvbR6v%D$4-c*R@r!E2SDZt{?nE|YT zkN^wy8zwetb^N@=Xo4#lt#i_hT@J1&2NAd3fU9B&h;^NX>q#Os1Fqs6o8YQUbOy+O zMsO{Z?@2gI2p}*TeK9t1{RjUr*{ra9zS|xpRPQRp+T1#Uwt{-X*?tAuh`AK5Zi=~7 z>{uL?*r}%nHw8Qa*lDG2V47e$nZSg{QhZu)VX+oW9)~xG!=TB%lGR=4O|!&2Vr!Vm zWPHG3(uu_cLjd%O`IJ%?*+w#dMlP9BnUbjM+Z6S~uTE}NO*rn_<8}wcqH3*03uB5c zW?AZr>Mzhh6+&+J6&ny69Y77NyP%!~mrLEK!5}G3NCtTvl-yJymGUD%zi`oX;)=F8 zJ@)|3r8W(anyu>+CLG46{93_7fO}&E*yruVNtSmvAa6VJJQGzMX7`cd z+aLg%?Vw(iXT8-AqwcBdf+ywg7>YcKEv__pL~{v}2~FCxPj^*$`E+~qgS)Xc`AGAp zYQn3-7TouLu3P@;yW8c}?sqeg?(5cv|0TjW z^{;U9!tej{sPD@1J-^wCQ$jVg=y{%ThR5&?46PcII|F>64R!B#r^mz)s((J=oMN^Cb!8?*9juF6ni=!#l z*`}~@xrvQ(a^gE%^~2iMYag;wIMMq zGhUJuZC6Pim&av(Wm=DQdXDN$1g#6R?%OnOZNQ}p3-RGaTXNDAogsQ2Pef8jQ+;v+ zQ6~Iha(wh2mI2Kp`l8QZXWA}#YLe8V?g?LNc?%w>Sf6U+PI&U03UeA&>I8H$H{A!+ z+87fWFp1qJ$Az~loe&GUN9JMmN$^Si(vX~FtnN{&2e53V3|V6^E`C%AUj%^`qfD@# zZ*-5hlS-WdhCwez{6tTR`)uv<7)sSw0yxzPMKaUU$>of5i!lA?Gdn9^|Lm;%on{B$ zH!g%Kqe)AiBr2>x3s|3Pk~m%9wVJ89$xPj~)SdV=<}_1{>cF7O&QxO_^oda49xY>Q z;NA2b%-|gBXL;|To3DN6_TT-@zxw=5Y}`c#K~tI@3@T$sl2;>JO*nchQl63;%T1|) zdmY8VM`X;1vE^E_5G6MvxfG<#@}rcB2`Lu|qw+=63E}GVq+_b^emrr5fq9cEXoAS9 z)z^hI6R%V27}FyMB1lVB^i^Ga-emq9blxDO=SHCkuJj%evb5a?6qCGFk+e26j9Ymo z)}WMm)vP+us!~Bbr7SyyL(rzYq8U-Th)R-dUV*qZHwz#)xnz)>AV#4iF@-ioEf%(~ z7lWhdDW(zs^=~g$*LknVS1#DE8O&EUKGg1`B48);ax!T5ld#R2!QIe5>RrWwR|%pg zKAZ$n6slOy6u((j`YAJ=OYwM`=Lj#YMmVtzr*`>l445>fwQvfISeVSWdWDlDUZ^=f zFMgRVX?RDrVg7*oI~T+<`i^d9yU9*kxW`_K`zbWzR_b z*pyj73Bd+nD2-?nx!`o@@q{a3PP#mNOYIOlD&p8nBmGX%} zYNWM!O8Lap#DIXH1g8RLl`A0f3oe7kzz&FaDBA@3irRIs*kA%~EuU(`r`i^zeavJK z1maT67PugG1?JlnRl*20ebG- zuu5I|=73tO6OA)OU9%@*b=wg9qA zvjdy}p-IehH8D$ZbkOJ&TFfC*8%0W1OZKVc40oApa+lkXQjW?X2ncB=&rfU~wg{H^ zOp*`}Ujn~NB32(iZJnr{q^FM=N#bx?4rWSQAU@o(#HAI!j(w_9JHODGG9No?sDpIZ zywH|rr~Uw6B0!hFB1zo3G?Gs}>cYKKkK)9a%{_X!9jTH~8!Z3TF@rO$x%8(rT605V z6Y)~Qt;&pOfo(L_HBOLIr->7T4Pl~iLh{%GjCJ2g1i;RIS`)Kyq850XHp|#J8xH@+ z>8{Z+$weFARYhx3^R3mkY2_#(QUf<$%vtI;KYYhK{`cke|N3Lr)RIOP`qe|67r@g^Gni+? ze=hBctnx93AVX+Z6VgQq5Oa_+GzN{J&4x0?ROQ|t^bC?A;ahP%_UR2sbE&+mH!uhtm0jN*6?ilX{%SCG;7dWXh{q zc;_DbWz`OOrAz=qXSAV?q61*^&dzl*d7rb+jxZX?g0 z9KI-35JpwoP$DgAcA_!#`h(%{Tc(Rscaa%6{|V^W=IYo@dG>C;h5yI+8y|n`=8rr6 z_%=RfntrtT-R80Wqs^a3+uz-2`$sR=`2W*uFKUVC0(tR!l`F0Tm(=ms|l7xVMeA!pe3y&)mjyjOo9gcg`v=Sl~`COMi>8$^dhNXB7f^lGM73X znM+NbDN$1`9Tf(vpmf?~(M$WK*;yVbZ5H5$u|<3HW9=bt^BL*WC{-ZC+-DYB;XCjj z%zm^gt-GoV+RVm+6$8%aZz<+kkfq0H@auFmaaWxv4$Daj5c;A*SnEo0hQziqwsuoJ zRw^|ry^s4|W#EZz?$uq@MHh8Xq_oi^o6XTDSeUxTfrRza_C|LdXj(^^B{R-}Aql1&P^ryXJx~It2BsZCIJUjcrhIZw^jvY zVb*zBBYfp-J0m5k4%iTv(xDn`%9hy0US@)NXpb`1C$lz@#fsFDUPh)prs44o482Wa zk?&cW#R5EC%s-Sqy-?mxOY8{l4K+bViBuy~$ZbA25@rNEsUd3R!eH_s5X+q5 zpY^lRQKt!+7(ooji{?S9O=^RXX}lv%(=LH-slaU0SW@h2YgDMz(#XA@1%GQ;n1s zRE55jW#$^BeIABGO!cTa)l)_qq|;B#Ec4kTz=%eOndE=$Gj{SE8;j&dX4Y*SLh_ii z-x6Htn`O#Tjpm#V%LPf0o;pv8APrN&SNJBGoiUq>lEP{rrQi%HCU5okbLBTH(bfXn zhEB1^PCeU}wrgT(nSW%ELy3nh7r&9r~bw~Zv z?nl0`9m{$vgH|d93l({^imic8EY2}bzO$0_Rs{vb`0M~%RaN<-j&)zi@!T5FDk-R^ z4c_fn=e@D=F^cp#X@%Y0vJo{qu1q`j0dH`=Sd*6qjS;N4SIR6L?v?)nWPlzmj9}oR z9EIR$%0-e1Xbc0=aCNg3pO)p7797M?mNVFTxFF1YQ0>ZTKQf5er)h@PHR}74P37`o!>TU!D-_-=n#|?dT~%G8W7lsN;G;e8`1za-VUXL>x}-FWq6LO1P*J3 zXGlag?@c5BSQ=JhzXEgg%?kkNQLtT`Nwns`GBu?=&h*A)6G<<*p~Cy!+E0t+m|rJR zqDr*^J^I<~Ry;hAd6TsxP9XDJJJE9xVXq}CT^eLmI~T;|W(5rfD4+Jk41qmnh` z7m=K`wg?!c5ekx_G+H4deqZd^QAOf*=8i%AKm`xG=$--Nx@K@l&q#)en0c$Epzsp) zdh|X;4#7Kni5H9bf`Tgw2qR!|=-1D~2cAZI)&tHb*>H`7HD7d+agDGvTLN zjBK)^XN+X^fO>-a$~)Im=J%TWYDC4nFelHx8>f{Eh-ytxD42&+4tSEg!+vGmi~Yh@ z#r1;kdKBI-41zuT^>HwDK(e99!Fcw%ii1H-a4beaDMNLdf5qq1{7aup(9ivS^RPeZ zbq4UT_B+B)-Q5?{0FWCvF2&Rq(Lg+miLD<5Q|o~+I4gkhoY;f}Q82Y6fEr9KpoE(w zp$rINK^njw$C(r|i6ydeNj7-v{`{uUuE!h*GPZ{X5@sr+uuPo)+6# z!}4bT+zISoWtk#jE=Z|RICw%x9mOk***XpYSX^c-30?s?>4>rfY!nJsKve}0Nw-)R zzFvEN{Ph~IfY$vUFx<8VnHBd`ebg$pt7K8X@_7#NC06Vst@4i#IJT?&{G(a<=mS~# z(X9OR|CRO?2*yoV2H+25*Gu7W=8HyHV7{QhK$BrZtB@7cg|SUIS5;(6d!CBs;{)Wh z!V9HRH5uR}yzo;!pX&gYU&Mn@FUN$^?P*kk@{X~d6*xFotiYjZWAN0gaf&|l${hQ0 znVz_2_anF(*NaLbldiQks~1{Jx~=M#1~@01)i&o~SRyH{*;f~X>SDgSsLL!?Pe20% zb-pmVM;Tk43ImUoGGaghVBm1{F27*H`=cM$CF?p-7Ek7~$fQH=$4Wk$R0wbR@!zCZqxYjjl5h@VTMba=G~IXg%7-ve^(#7D5Wy&cSuOI` zXg04aWr(I%{7DKgxg=n3%hGuxkcY{cK^QOh$W>6y+Z5JS@=~sXsz5$Hu_+G(J+BH} zQm?k@m{8-;bPXvH1%j%o;nwK_DU(IG2>zs(4dTQ|;dLXzpu+6@(s+#-S>rXhT;nxo zvDJ7DE~^X1cM@FHcs*p|b+ZYt`KG4 zOIJ+keR`y@xea<1@SN?^f#*vV zp5yr!BF^Q@f#+;;=2K&-PC={t<}N)4o@asQA`|dDQ3^xia)Rff3x^}$oYW|8#5RiC zGiHqMD`yILo`L6ttcWo(Su=R<7zN>ZHIGwxUd4_G&#MAcc-~JOT0O4{OyPMyEsF}z zs{&Ja-pBkj2V`=p0#kV2uQIj-o*(a#iJe$$XPlko;0+wNvjmAI|83&kp}7Q(`#SM% zUspU@y75#8Wgpi<2>euO`8eZ3SnVfb(!MZD=KKz!CTC$(oOnUofyJWZ1$faPJ)kFI z$n5FWMW0Q=n;7zPV#W_w%ot7>m83@cRU^WFH!>gZb^o5_V#|cDno+kw;4P;=%nH(A z^lnZwsnC|3XJiZ0qq;9!F3*%#jI59*Wln#XfI7t<_Q%kzGZAL^H8PZo6S?vic)157 zP-{dfK_Drej}+`SfYP^!gQs1hHhI8=X%3$FHVhAZUNPUcpoc5X;Pccny|lI&CvU~M z!}1eXQ;{j0mN`{VxOuONOkwquSLDlsD!yYwM%nb5M8$pM*RJ$B2Z)?*#y$8e{47+C zSK``T)FPa?6S6s-rDWB>sX<`OEI$V`27%dni7*8UGC#F?SL@i+F4f)H28n$XAuNLc zQme$U-`o@?J~+{2xFjXRh+K1JtwSgcUcG!GcZoY5ebJt?SaqQ-b--;wbaGO&1gz*1 zt(fDU1Dv+Wl8ZkDnbg`j!hVTDDWDAHp1eINpiG;R2Zjiodn%yJF(mk*nMrB7fPnMh zVD2^AvuGNDe1wYd#{Q5u;R)YDS8W|6$kp8-bh54vd{wxBkN-$}IO9epJF7TLc87w^ zS^;hbdvk<5(grlWSs-sP6&d990s!1148BI5s;LEls0QwRkERYQ^;o@gJ1RPs5@+E( z(7b4Br*m*|24X4#u8^7MhU|{$(QOq5L`9V<>O|EhuP`{KN*PBG7iww~aZRtF(9k~0 z&BoWsGviu1HKqXsPzALeUNkzktnA9ls=$nE7aPkQLJIG_S_H(h0)-jcN27_JV1{U= zG3%1|MumRkVGd?gxF}?((B^T6d7jE0QB>mv0T*(c*T&!qoT`CPBuXoo*X27=~uiuY6tOd$?`q>Z-*Vt=ADYGPD-Yq}z*X{CGv+_L;)HXIW`rD!!`Z3AfCtB{7 zRqj4$xdOt4nr{RUE+nP^F;_({&JtuZ47VHp5QAoHAx1u2LJ+wi64$7c(384)ik9z<1FuCq{GxKE3+?mvC&=-{`9KYT2Lm7Y@otbg`0u~%Ikb-tTEzs31 z?yOht1J(fDssSbH!~!v9R+M;YWkZ{vw({Py!$W6%cTIc-TO$*a_|+^W>)!0y)|F;E zHdM*Hs|CU}9vT(&l9pg2A5sJzzfWYvGAujqjWf-ORxJc|^(!J7oa9XhF0G_o zLkg@b6mJJy=kgWq(hD}@&{3fb;00Rv4$kl-VTm^D&E*`S#v(~L=5YxE7zO}fkl>8A z{T5hSkCgXbK9dixd=;LPcSB4onU2saQ|+SvPzip&BB}gQZWmxoZ6)wN&V;OWlA`)-L5Zj1O*>OfNZ1F;0M56RI5w8T!ks8zD)uXs=loV zKG8SXN8U9-hq$aLF!k+0`li%g%HD+11j* z0kNRWsRC=nq>DwME;e2C$G{ivs#)VcZ@nDtEg>cDez#o{2pt#9ZVGYz^g#fHSvF3+{7;yjlX$RFKa=2m$^&EQY=figvD;Nv){-s{Idq zIVh;0`4Es;6}Q6-l_4FI%@{^M%qbJcYK7=4zah2iSP17(y}j{0RKw!AHok|_7#rUo z$~s-t<4mh;agHF615j@%n3}udFg^5dt-Xkmdaw$&Cnu54o>k}r%qMR8I`tWNyoy^@R zAS~pAxijuzmZJ1tXS&KNNH0`@xFaYeF0O#`d|p>sL{ES&KAiOvosMGM3>r4!_poO4 z>A2DX6{5z2E|JUp4Ai%d__9|SzuMAfsg3{{o(L(4z(E`9@WT0oNc(@ap3@^LMZ!Fj zsUe4V_bo+V5=kdkmWWCTaygk{H;Qz0{s%QJ6Hf%IN|YrENstDaX;d0o+-n9RR6;|b zoZIMn4t1OW9epcjYtyb$K@5s{&jVuO4NKk(+-6zOSitZ>QKBLYXS6jnK1a)`UBNkC zi4~|9O{lA2zF=6Ze?wi-^s95Wni%b6ODb}p{L)u2Fdl?Sx5|e;mkbQ%MT4~k->UeJ zxYHyof|szlDdtr90PJAO^0Rjr zIix8QVzml+7!ZJ53b*S4r$R z71!6%OUKSEs8?|)Xx&XVP^hO7r@LJDloYQvRPvT%-&WoQ^NT>nl|~>VYsQxtkK)}J z8eqBPcw#hpHx7bN(>PBwnqU{J@2yz<(2R*H0V@u0K_pnL&v8r#G2^xH(eZdKIN=h| zC*|suG9~ghw^pz^3fgYTGIqeRu(1`4KC`z0M=-1`C~{VWP9={DX+4FfS#xjPYVev^ zUvIsnO@rFqY=*N44KV|QLWx*tpCJK1);5hT+=4C4fJY5w-!lBKsys*WAq=beAtRx5 zeCGB<-+Z+YU4T^$FATG#qx15i1RoUQ1EbdHFF9ErhK6o+y%a;UzpVV!2R`{iaX*q+ zN#la?z%v|P)fzoZ48e7+127KKnCD7{aBXMjc$K;y%?d57ZB4GRwL_=KlDXQr+m?4C z2vnzDvjv(XD&!(NfaeXD)`_;B4aVE;HXH9CIC(+UDgH85a^a>^>FPTUovN3MFWgkU z{?)o;JU*+`xnE%P@_X>ofXQ+S6^h9oHOk_diaB!dUfQpW$ zi;kK_alEFY`xKKi#JU%U%26Nke!96Hb_Gq&jouGBi}7MYkQzhe1*g(aL^KdutiWnm zRUao0U&*U`Ky-_RzCaxV*gpK)UPZpw8W=)%QEQJBQeBJX)4rCmk?R4!2YLG2jS_!Q zm)Q4OY(skM4k{vt%ICaPu%Ksbjg6H9^%qg9sLEK1qF4ADy~0#`xz4CS|514Do3^ zkJqSux+W)1qp={l%sYMS`Kp)DkYg}pn5olc43IZmhEjC-SkW8r?UnW#4x+t9$GU4+|=v2({xNNfmpCCy1J$=lJftVSShf2er zBNf0En4rh`;UgU2@V$8cFgzgS-eG*5-%F|3Ink!NxN04NlH30Cs`bOK8Ow4R*1c3q z>Y^tzby3gMzj)T@pGiXf3yMfxjCQJ)kI=z1Vw?ntbO!Dm;xsy%chz-|3nbJSi%a%$ zj{(5a4SF7xc?S67%7#C+)LzjNo8qcu!>}3Wmqdv-WN#|J{79SoKX1w3{A`h)hD~#wU&A z*vlT>S9+xrv=28yB`m}WRU@8e*~HGiur~T3b>inU%%0!44!1_?5wtfd$Yw0h1{^>d z8&YgkKG8lbg{OyHA~VZKODEikQWndnIKM+I1yr*X)8P?lpmt3ACHk^#ZJ0i=fGmD7NbT#Hhz&T$N(FoMt8qu*&$_WqTft7WpGF1%_j1F^bi3WQK)JG=eG*la`c8G6cvNeXD;ZQY;d_`kVIp2rLb%m zLf+oeYB3tbpew4I_U}Rupb=#wQ#)09A?Y?;J~#&X0b> z)DM%&Nykqa>4UeHXc^SNN#JGnigjlBK>eju+l>AoQ=Jo+niRGjDBGSwSz5s;t58)2 z+0V9%1?`Sn(8fHNstXv^`U%xko-GkIHua+rfoLX>K8svJ-vy1&%SmAlFKA`W;`$PG z*4X69)50To*{{%dQ-eldH>hGXDD=I2gD%b=3inc-lLiF>W>Q3}2-)uF{{Y-#qlP{9 zK!p3xjlR&<*;Ek=xr7SGswBi%Ike1Q%v{idwNNAOb7<;q6`=?>@weZkat)Wed}0F> zEY|{txR4Hh8MAZD&PL{V9T4KzwvxOCSa)JiYhf|fGL0YLJk47L=U3;+zBP`NW=C)Xk}JY)ngP&(i%kuO%VwnGmTi^4`KD)Xi{xRCb! z;ws|B8^wsS@)_Ucq}3ex2^R-=e4$we@uUCnx(&)(#P6UrJ)@FtADqzvx$d2 z4*BSgb%xCn6l4N=+P}t_1v=@{v5?~M8M)o&YGi1&UcWR~pZ|m-E!X5#670R7matY> znKe#fFTRpDSFdA%8*sRYSJKbHV(*|9ZSmi1G~S|^nw%#t(ep1 z^nyE{U`Rqh)`X2-uP#haFG$Sv)?xh@Z@Rrv<4sI^)H5K!Ka>BmSxwh+8>MekY?QX>$`P^1(>JRGvKbzMQZ$Le*2ZZ=Y=Wt6+>Y=`Y zAZ0C=$x(6>ezZqcjs+IiWR_yz;4*!Mgn_nEaLOsH1m4B>&S>-gr6>m%4QJxwROIixFVs5-(PB>e;SrJYfBuHOaE}oCl{1$?t z$5};UH#x6Shf%T?G4%M2*V8NppKFHB^dw5GmQl|r|r%rtl- zzjFeSD$soMdx~U7E9Rd?dtFe$BH=<_TfuI++M4{1LdIUpFqYH70nAtZq=q>0O0!wB zRdgY-)m!+X%eBGsfVgXAu&}B0V^4Rj(tMy-K3gs9I|OPU9}=9ES9~`ZY95rq)&vzN9mpWCP z1KEwdqFsp_6J8xUC zQ<-AA#2t!(`Hwzu$R2}=g zWh80k3XLl;NLU!d;XUT) zPP|OxEA+Ed`jx1@l=kc{=fNkHEx= zrKa)I-7lw(At{3C{r|~BcSW~@lnL7bCa&p@kCQn zllKB`4y$$G&v<`HGe^c(;k9M=&((x+^K(GsTO-_{4&UDO=62I;^B*8~S`^MMe=)clWkrjBg(JY-ISXOK%5)kh>kzafN_*ydvk6JjzB8=Ec2hb+g zMomPvtHLGM{cf(d>&nm|v)9XQ0*=}INayJn02O^ke8B)Uas~X}0}7|UMl4zCw1X-K zU_7x2F$~tW^TDgge<(eTy^^mf)~R!mE-hH>T}M=jUE1RWQV}PjQK~tHnN;(+b(Wr# zhppPS(1|5~9T%cV$5yE3>8a!KOUxeDO;kYJ7L+%#Z`E8;x8oxBYvL>l)>cv=ZeDox zBdO*~5~jcv)|}79-i5IwjYI2DAQJ1AD27dWlUy~ZoBxqi@0UPn3^;{twx45aJfm-q5-dGCT*!X zX>7cioise1lSy+zV`R5zq2ser#bY~G;A$OH3f$JDV_HwCi_~H=iZsL|uvsPX5q7#z z5&D+(KmW4vn)Qt_<9rtxnVl_3&xB24(gaU=N8uoDzv`bmxnDpNvXp*$*0B|sG7TkU!cJ1`IUXOF=*x(bm`{rA8%BE;USa*zq@Lme+90JXb+VF+_+Z z+#*CMEAtSHIb&@45IwXxEF1s_q58?N($ou~BXl`?``^!aVw#_OG{f;X5Te?`ISx>#2J zkX_M;t^4p}g{fUVVQE|?IUuusmSIe=xO zH|GcIZVx{M>+R%+RWv6L%-f@1)6PYvwN2^G<~a^07u5cbWU=!IqgDG6h?5HYnnzNb zc%=RCVRFNsWKwGp`PK>?vg_-F&I;AUc5rc3Ke;B3q<&6L1D8-Rz6Y~L4S2ivwQS+` z%6$!RyMBSY&Rk7t4Ysz5Wc*eEh!VV27i&=!T}<8|h^#753-l-u0$q4p6{wYhC=k0C z!>96@ot@>Qy}LWw{&4|X>NjVr@{i2^US>iF6Jp)W9u9JhsBz~QAz1+MXFC6KX}oOm zwweT9jd_}qW(vK^0TTk!i7qgQMcO^#v?6-&3Hkt#oc%zYLscp*IzR1KjX4F;NlUcG zmNtg3!b0W~|E4C=Q-`>!JcBnGn~S-}PeZW;+qX_WRBStyuWgL06*tbR1Z&dR0u4!f=XYtG(>rm07>w0$~-n^ zp}m=dWqU{5SJRUe6;IH_&%DNa&D7(pSFN7nk3a?tr@>Rr8;0WHeC@;eP8}04J&W5v zoUd@c2aY=*Q>67e+FY{ksAU5ib!;DBLfi^bAUeRqjz)EWq48&EO>h@i_EJ5@2I`$s z26sPD>{NT`%NAv*)^R_JR*JtGvu{Y)l{{3Dg)ZT3BurH+#d5yPCEaB2d`JE_qaWrtDHj@Ek? zNlV9<18zzG3ql(8s&zoLU@ak6bfz7uPnvlIL@rHOi6H`dy{5ZnM^<< z*vxo7j54_dTl{lYk$g^`TX7s-9{W`{ntT69@SArBui2IFd_d}1k`Rh_VxA*2^iWRq zUE)aOp^{UzDb6t5U$#VEDkt4wlM7u!g%`(@X73|#A!nUF4dN}=Bbo4EJQx;WX2>Ut zYHwJpbq79ptrO5XLBy+%OvpVBjaY5$;wj;k>xJWBxtfx}V3x!OQbd{OD~Z?SnTv1) z9E#G~-~fDFX;ji@B6Fciz#KH8wYC%U89rd8?{Mt96ctys*I##3i6 zWZvD8n<+cPOl2NZmoKnaI0m9v=Sjyy}fO^1iGCyIJCp6#G9u}G(sXg zpc7_`&17HE8KuCGF6f2xV4E8=Y?HOGq%M}n*?fQYi*0nv@^cTRjlUl0Q>vb!o~^%) z>d&Tcvtju|AB=BLWaYbmAbksUBtEyr%t;Bp7b6rSd9PVsng{Kn3N~f2o4`m|Gix(K zi{zS4yuz`F&a)t#3ks>I1x|V2i6@KI4PLLF1Y;FM^v3l<98uaGIEI24;(3a6V(la; zRy4IJ*3*GmzYLSLgON(S8+g?oePFq0kpbZ@xvik3G`PuFw#HZ#UM^-#8gdP2LM*cb z$_}AB59CVF8K~88biM@FF&t=8!^l_vI~c@TzHMW?W>YcWc5=+2@y{`;HKfay6dAPo z`U#^3IHylObn~3b*-Gm3OkY8)R8df<`W0a;E#x6Fr zmz+d&N7Ex{?P!SlyPUJF1sL&ZYXm#kaV2S~u$JmZbE4$}eln^Hfy=@Wm1`%n3_|Bb zBh1b>HUXWerC(m~qHQlN+CI3qvwF01cP0blIN8RuWr%*=klm*&llSBfGCh#_%cs1b}%p_=H36~F7!FpABDUsStQ?<`cMAX zh#Dcd4zI_oNi%&9|L)#djA)QFjEY!NTo&KAU@2D)j?9%Sql?IxTb2|eXU819 zrFj;{x^%QwZ-K3#oKAb57hvZ#byc8<7ShIxlXkSssFbxIUuKGF`R0GN_H(cJqyPDy zn{IyiA^q8N$Xj ziqYqn)NfsVZmC#V>Xi5Y9-9qDA3$W3|Mn~_c=Xfl-4vPB^nX&*woBCX=SxE>fF;yz ze)`4|`)gB^f3c*vj;a*O>BiiPJ9W}I`0OL6=77+}5HaO%eN#zV6QUgGv&JeQ9Vxb9 zzOt!{E$4?|)!m?J;8iL77jGKxVV=dklA4Vv>#5(9&ogH}*pkbjlbV*z?6fz^q^xRd zC-uHV`JU5bHip=syhO$GAd;%Kz5SdO3sH6)9#^~WQT+EXj0W+@Yg)S?P%;T}5z}F2 zV49H~wc~wA<4%clA}2_m!R}$Wa#*pzba?dFDF3n`PKzK?Iyw;#oGPN*a0W>ALM$Gk zekI}^OMGq9$k7@-bgJC(*pnpo-J7q_%vLu;CTc3q_xe!5%>)C`z29Hs53Wau$j}NxP2f+_{`-87e&lDAR&N)JK)Nzr>ooT@iS) z6>$R?1wY0(Zqch{hKw%k&5YPc*43q$vUFyqfp$`}SL6YGO2-GAu_l1l{53Z;4Ms@< zqfdy(+K0Ei3FkK|+9-efFEB65q>yQ?ZDsW1%3roJ`UwT<$bi8xhTDfRyeh}cj>njl z_Jo73jvidjSB1~Lz?Kf971GN>VZY4_z6ePuMob8H-c!3#w9v|*(MH-kIgDgOs+O7)7OM~Eq%}m^mE5o zYw%YGI4@L_PzgCq4=VR0K$Uq5%rys`!Vv|-8xNLX+`5sKFr`()Ym(l*io%czrwdR* zz^So{^9`Z^jxwEXhJMkaPU0an`Bn@Zm_%=kb43TRfNtmuDv2Btm=Yn>=p&})KCU%# zosti_n~_Wd=ASw<-mboEtuVaHrN7#)6m*DA#wYn2qC$V~$wt4vJSLMa_4F;S0j)D7 zZ&zQ}17FB{_u+A#?|pK7#mx#I`07_bf0RjtkY8i}-4^=42fK0>*(9yEkA8BQ<+@S6 zZ7h6i@o$deIy|(6X{bQ6x$@{g&GCfIvl;~P%K3-mZ5c3d@)>0T4g4YBWp~?}zL?Lo zAdEGfUeH%1B}p{sh`Y1mr9sVYqOlf}u$`eZ5_ipvF3}i0*UZt_5ub<5yum0ucLZ!% zZtb)(y&dcmpZA<80e#KvJw=lWDBgfpvp%|k6lm1)o@K${auuQXZ3MfaO4k$eMs(nw ztf?Dyjca7VKiRCVQs0vnH@?#N$@GB?nmSMjERa67TUMHLiSKKiJ`E#XSxJLcDZ zW$5E8?|=3a-}Z)EZ$h2=8J&_QB~T`K8bTGV7$SB{*?zV3-rMh_lY^7U|0jRtcYgOX zcmMuB+Bp4Ce&y|VdB<=;y7JfFMP0It=u5YhcomWXE&{)qwZhi0W+^$dWfo{sp)7Fk z$*>DN4N0I*W+SP$7Fg4!7i+At!n_8zs;d?K+0LI~zFR;Uog*c@%vU{^^A7K?*pF^2 z4R(t^o=gBJKC7VJ3EHaG=7mv%` zK`}aByLqBi!_A`}$)`PMNVRO`b=FesydU(g}ngoX-|(zTadlZS)mixA9=FQiS>@DIs%Pi#K*hmYLe zPggQml8(m7R?>=Mw;{B9;sCYEii#dWyT@8)9DO+xUSGKztKe_1Xh7Ts2)s=_@lh<* zX)d#vVV`J(WZ8))rzc2QBfX}xUk1{rVwb|g>e!dm4|}*P=sV-OjwBNd@SOm|?g#I) zbgQOBKnDCy#28s(Yrw0tA+CJXlAm7etk*4MkFwa>G+FcNiF#FgJhVwN8_yv<$_L)sZe)GMH)aWm+mo?GCeLZ6KL57h{geXN#9-ofC`T!um5g;Adgo4_R-Yphj7l6EZ z5YK{0p|;LFhYCF+BAi1_DP+?~ujr}Eb0r*V@qw`>K@m~Av2hvv7Kb!po25Ad0^+@`mdM~kV_lX-TB z*nC?kjGb@8iv2_kMO!Q-IulSNkv&WjN?W;55qBB`7Df}XIO?GoojR*l8$ISxuWI#n zh!Iw)0anY7*m4N>CU6vsH4wrn%LcNvRzf8w2elHaID$o& zt>Gn$o%-1GD)tAzFg9TENAT&4(p_55d*+7Lb)i) zbgE}|TnMGSFHD@6JEBZp@_pdn=th{1qzCit1eJ1pC+JcSOt7v;B1C#us>edHg42V) z9wQT9ltSVtNgu!m;2IMx3Ku9RJgrskZ0Kq6zNx3d0cMm%q}J5;L>o+T5OnX!xphi# z21TGPb)^$k`jiZ~;ZQSush6nIF6=`8Q@g|d$Jy_jk(wm!Q-PgIfrKAUq6aQv-NUj* zb!D;1xFc48YnFmKSr)2U4GRb zy2)Lm4B#e_#3ergK2Bs~XSf1axsaoO&Y+VX2wNr)hUg$Jik)mwW<7aFzLTxjMEnsy zqbJ*0_g>W#_6dPhd@o{f>@w^?UL45~=>U*Ez=4^W3s-q&4;|W|jw(J;cdPlfn_K?h zp|cxQTV;&Z9c#?uyWZ{J9&>Qg7_R1h+FBhC80)NHn4K6q`?#?{u_%&&BmhTymO`FM znS^Vz41GO6t1s^4@x#Wce4DoM`dtf7FQ$gcKx&We;nX-#UyRVtAQFT0BhlgicUVbcOu&TI`%VOvT>hBWTEIYfLzx!EXb0RAZSYpL`2c!}Nqo z>r_t3I!8;vWVHmG_K$Syv*lRi2xVA%;ryA<4%E<+&;mF)p#O>`?ZsK7xcq1(9BfvIDWVJGP)Q^Dqu*NA=)@)_QD5xXQ%E)1r9kVv?OkS8+^%Sz=i-w9 z5a@3L6O!_w&H2VjBn3vhc4P3Ff)E$qM9d_T!YJ`^^002yc~}v;sv7-FgH-u&H8WYF zW2qXk4$a8*fDO^wbN>f|rc@Xv^cL{p>Bjx5xW}U->rctp7`pfVIf?7!V?-GLW%bAD zzW(?!pAiAWXFU~jo9SNFxXr20=E+%v4v`Qj1{x*-I^PXs!@_=(NW*9qX-nFwa!|8C zunO*C!Xm43Ck2?1;I}{X$q#&z(;CF2^jwMh)P3p#7ob5ry2gT-0Pl4WZD|LjGb0Sx ze6RZetsf~t(1xEG@P4N3Mf3M7swSbezV{VwJ}nXx zj+4)6&d&?)(!FrvMD(;T&El zS1<(|x{j3QI^zW_$Js4v4Ls_YXy6L!TD*L|Aq)bv$4ECsBel98ja2GB&e>`_Q>uA) zqMEya@@Le_ee@(L_lQLI^C^KGZgsW>OSIJR%vw{WqKQ*BYHB!T-R1YHD*C)JQ`JU- zFj&BWjZj%r@pmGoQ2aNttb4S3w^^EbSphOIy-=x=%IFb!F9F|991O}-FV#ejK+PJ9 zPw5FR2q+IcXDtdhE-1u@i!K7HU6VN#OiN?dS#07I{8*m`$MfMygyH-tP;cQRddlF` z#v?E85aj{sM25XK9iUInziM<q}@Pqh-Rs94c* z6|!bch*gbsRn#;5=s)c4;arCHJA9(anL#*>TF&Vy=#Wwmz@)66f*A1Yyn|tqm&SSM-n2cZxoB8cQyc@auZm2 z-dO;uMWvH~{|ah_PQZZ$OSX;IVFf&o6LPxB!-U2n9=whsX86*p_2g0DYb#wkG1QJJ zE0DD;7VCir-;jL)0WQVpB6(nbR>51PP`FcG>;>Jb9PP-%acr(CA{6eF$L694sJT>r zgNBTstBR^JC?hA4L55x^kU95cw>&BYLs}Db zC{BuCJfUc27h!Rpo&9l5;6{fvcSE$3YYm>Xk@{j)Y!#*8K~Lk(@d|y2rE7o4`JX_i z_L0aV;JOJBK$}mA@Uboanem^xJXPpRUf5t25>HIN3+NZ5!ggoTA`Yj1=;!!cDS>+* zc(!Zwhs#TIyOCxH+xzCm+vo~c$LEy9I%jITNWE?Rr$`ELx}~^o`RZU3M~XGol@rF$ z&es&5rH~`m`&sKm@1dHXm>UcEfG?6l4<4LDDc+*B|M4{x>e8;N#ur7^<2je*Jf~j1 zrgL{9!rqYrgd6~d_FV|u)DLUtRODT+h`hY7ykRLQf8dX<`5wkV*n#jijUd!{ZzW>> zh~mh51vx;aXQ}}y$#$!;^${YZgr-6mK1LiaYdmV3(<*~0Q` zp3L`>j0%e?eG&ydhkQ)GMxWNX@u?n*OyM28K|ux@r>y$L)=(yicm(#V6yI7F28T$p z5Sgpk=}oJ%ol2S_ZmR-Qa$Qbis|L(7F~Xi=xJ zc)?q1-2(P~UYt;{E}R&P%>1}wEalS*A)Dn>Vl^8&A}#T(^RU?QLX(*|L}eG)xkD)C zS(eJ!3u1OmV};f_O;7PCQ1Jld+GVpHFEh?%8!m)~F*E`;#F2bJw&GXhsJwNW(^g89 z4oIoWv$1M7{fzRprV~)9G##CgY_r}=k?6o-*%7`pR65G?A|QZ&k{CGOG5QQ9>4EIx z9LRlCS6`SbumwjKmcfm5m?Hslunb;<|M6lmPJnb$diV%oN6Py(3i=apx=!pUrqpb$ zTl7+UUzo#Pp|xFwz^tL-+a;`QEYX`{JB{!3Th5CmQM@X3UPB@)@hBk;$c@TF`Xer| z7Ee`d`h`5rM((QXMAiEPkIC3?Wt)ck`F0U*Y5+IQ*Vn*`8xYs2ySn{yHBG(P)K#)? zs6*@<-P~gsBGFtt*RQ4rXn}G&#X!vk1u)HmIb(vQASs^`FWzC;6OpH9z41Gq>GE5bEJ`ZinrD9G1 z^(Rh1mO{BH*zl^%O{A|X+e*LVz+Lfq0#1Xrfx}pwND0*okWHh}LiS|b%~7MT05b#A z7HyRulDH7HJU#%Lp%{vTXi|Lw%z?~<1Lddxs$2f@k7VVS z`sFh#k#Mi0Rge!!lOtI1Obwaf(`OQ7#E0d^z9*GCHdF3cDra^K!~yd0x=8Sq&Vdx5Yb2lPgA#9wkPWdUsK4u@%Cj z;&DT-!T4mixEutT%55rP+(0gvE|c(e;G&i;yzHR}QsxXR=*`pepbC3M>JiH+TWo9a zVa@>;2dH;s;$4$p-wOeqT-%fi8Fnx32(;zB#4q%;+XB`rvrqm!1TB^!asA91Gt-fh zc}|7-eM<8|L0%t|ebmy*yA$Hccq%hz7LS~AqZhRwZASpBHE^;Jng4gnvsev3ja<^U z4yvF_`nFRUS{!|Xr%~%+vla6OKAe9*7UL#bgm#Pt6rq&<$$dG5X)| zKw(LK<-YBs-@-A)$>uhBo|!uw``J3>h5AxYo~Abao=0`f0Q*Gd=WK>R#FxM9JsF5^ zF@dev!UgmSY!196zxRD{ws@<|#c}#tnslzcvp(5$=*LcM%;YLw|G@hSotoUQwMa-P zk&6i5?4Tl_eCg$YL^eCjt7S=ro|dh9-X=$h;z-Yew+QPK-{^|kWTOwwKCG+_IYJe* z?9Sj6vAWuLNX#BEM6!l&Rc0n^N*c<**m#VDlFJlf6(G}&tKD>i^#@?Ys>0*rt03@| zH$6VSnqMy@%USt^EdF=BRTwp2M6XXh{zY$St*t-*L7NY-kh{=!8_x`!MC zm{d=kwlGzLY%xHMgs2Zv6u$*UFH`DxUlhRc$7S|PV!%i8faG#yZ}i7w6NhbO zSv)9xa~*mNBGB9sO6KD?pi&F@^ITV;)N6?%dFlh1nK3{A_qJfhnka!>oQAVpC`s4Z z@!MXUAIb{w(o0%$v3baW@bX7l++i3()TpHlW=p;=&rg!^YJ76^le=Pj1^0BAk@#8V z{v=&{v3K;LUB&+7GX1VYr}BKm^jtoZVF)E$>Xc7&S1nVJKAF2M)w_J}==84Q1&u1k zRB;B_in$-}W5J6u#pt;{pRUhveU|I;0(EuD^Zt959cRCYTmXXPn$Nc-{%`N6;GNg4 zoQ*{DD3!`g=*gIRIRp(}@bLHrG`u%;X8*%elHTCB5a`?)0DAs~`Zqd`gRPE!e(Qq!%P#K3Gq%?-H>_m{Y zQA%Zy`mkL}a0+JC#T+hjJeeF9=*}_K@MhDxz=tn{$B83Vq&?*xvIbY z!=r!Y2nl9HQq<&?aQ8*@@Y>E2?SHE$6 zypL%|6BM@Y*49nTYBEcWyQ$h%Yh2{`Cg5Xc();oPy36;U%0(z}2da5NMR>3QsTf82 z_To(&d|U^uN?^H(RmX+I zYqM%4A5Lnw{9_Vxs1p*iGAxjE^jNu4y=II+#nW;HvIH%_3&|^b0c_yt=jLF=Oz%aj z++Ggl?u)tu#388(F;WchyxC<*YQr3fD9}pveoNt{5za|iN=RmiFHHnoVzX&wToxp3 zHqPkO)*^^caWDk`H@{z=e2)}hr4>sl+Scj@3Fz*(c{V^ z69E4>GZNFDG!(z^v1?~rlEd>!N0EDi0JJ0QIo6VAOs3NPqN{jzDylbJ%-`Y&c{b0y z9L>ghiu@EI_sGs?MmU*9^pwUl>IfGqPkIXJn5?H*Rm)k|WIXcXod;%3@AUajC@b5A zqx05hF4RSm46#JZWYfSLyq!{zrJ&v11xHb8b(fWrmS$2P8~+y4B~jh!b1 z+6`E@C$NJPmis4Yc}(SWhf8C@gREItS33GQlv@NQDUf2uBt8)cyKHg!3z*oA=AyIK zVRx|3=2~1-RjtLLBHJ%|Lc$8pI0>qVUL8+scI<5Flwk2^1s@y*7wS<)xeIBO@X^Gr z?b#>v?9z5oR}7YyQi|IN9+J`hgfV3>qx7NYzc3BE4`?|JQrqLuRiEgyrt+g zVuOihO)wGKr5FuaPCLtYi1mLz+5Y8x_;RoO@yAlqkWQ_^Ku}MMkj^V?#(F)gixuC* zZo8%fA)V7O7APfRlCJYKYa7CubASV4k`cq5w64k|V#=CGj=F?)poX4Md=Nq?G=7Mw zVF9^4%!D&=cZ!~+s3NS+L@N@{E?wJQGmT)C+}L?k{>6%t9@VJICM8wVBr8sb51|4) zZ%g)skOE8gcsI?}aXR(^Mdxd>9AHhu=WxeLvS`vl%CNA7!HL{9pjSGzVK|uF(zmkp zHLVAq9%Hw7=P5UxdHV`b%<2^a2m`q3h$11O7-$onPq?OfA4A zACJs=&?pumK__m*xdnEK>3J=(7MbkBRF%xhK!FAeCQ-XEy%bk3b(>m5oUzpXlS`cy zmb$y|Q2aNRYL9Pe*hjRHcI1qgkDU-7G*jGzI<=@Gtbm~arF;va3?-GQyS%i}X=j6e ztKaMP`*YY5IPkFciYl-U1@6V22Z?pTQBrJcXm#7mbDvxtbAHn&SCt{?`Fz%DZH%{< z&-k-@KeZ}v!Sng-;;-s6+M%@v`3#TV%x6@5iB9@6+TpWD`HZ=p`HYG$_ZjW**%N#w zr{4@nF7;WAjdu9#X+VNG`+Po=e!N}n@EP!g<&;17iQqL4_RF7pLD<$aHC=kRu8F3p z2@ns*>HuMf8yWOJ#J{kCi)xK4(vmp%GV`--Jkv&x4JGO6u!e`60%dlBJPMpK9y9ya zCY2RE1sfNG&@V%=&KKp@lFVi;%G;cYC}cOMgBppofZT~1<7>pALMO9)bjy0d^7{$L zOO0Ufyv1F^KgINX$fe_6F+W&&I?Mw*uY@zvHQbE_F>eH;5uGsJ;$EP;v(f<no*7P1>XD4gN)_tqAY`6BlT{+eZ9Ynyn3cXh&oySHuP<p ztJC*V(<}gw=>wRb4fTvEHaqVEWpaDF(~*3P~PhVy@@y0Z#l2;^KLDuyP(_KU6*r zf=gWh4A!>Ilsc$~>`IeQRf7veo{8>&%-qjkG5C2UtsSngl>K30lDMzDeT5FZ%#>4mv z*@02Ek#Vh{f0zNnn?|^mq3$RuOR_Et^kr-K)9q~TX#4FdGa{UkpGE9heL>A_f;2Ew z(o%Cv7eo`}T{s7?Vqscxo>NN{WiTLuk#{B^|j-u zQKF;I!*{mXT#y~odY8tcUay%mSn^wn?+*#yt+N;vRW3^oGi({RL!XUB6)<(r(gYUIs4 z7tht~)NRDv+{P<7Hh;xanIgDpH82eeZn>{D{P*pw$6;r15z$+*AacRcTzU94ZVUfZ zx!zN!)}o8{o1>^gJE1jcw=h=y%)MT>K8XGGcfJgE%V$trtTD+_vMM}y1KNjx<1gQE z*PS9QI9B>H?={vV^8U%9Tc@Nug$h&0bF*6EY_LV|BtGu$=>5Bj?r9Xz0d>LA8z1>G z0bM5*+?q+>m%n6R3oe4vV+eE$c8Ou40MPbZaU>Zi7)TnaJg^OwC@WN;Tt}sYkH6=4&!|wf0`7n%g*r5K6TJUoLfZ4lijq(pSWL7AKDM#aPf|aZjFB#^z(0Bc69GuR9-iK~Cfzy}Fl} zuvh%QyuAyQomG|Z`#p9&l3l5Mfq)^2`t5DhqA}e$=Xenxx2eV9rDDtN;TYG^!+V<1 z?dj`C9On>a(DuEy6c8XNNQ8h9qf`Pyl&Dc7pr8~82m%rm0cp?zc|=4g1vIog?(aY6 z`o6t)RRsv`xj}1xkM*rJ*Ie_p=9+6R^C0vWJJL2zU0y*U1{w?GsLR?-2Q2aiqx|s$ zLr+J@b0f;_FK*{kQ`Ir-47I8gl5O`5c(NTEEaN&}3@R10WJ_9G4qE4xS)w2r<}HKj zw9w@MD2-&rxmAPT1IHSQ^ptJX~*+tV0B220Mj9LveYZ4Mf#SE zm=IA1BD*@FH(ea=iMml8z{wX%;mQ=OdhWq+?zWq#2qL)KPU=mbJ>|Kq`&g%UQ;csx z49mXM3qV-$s-C^QvPUe-g8 z$ciQNEVSO+IKhHMkh+SQ&X3o0EL)x^K#N>D;}a>i6$jdjOB3omW&eB z2T!rZF*EK5@^hzf+l9+bNP@L1HdoOtMLwciJHKAaTtZfds;)exNTQ&gctO zC;DPDlcYW7T=mht! z7OO!84LWmNTib8)`Dj2`9B3Kv-j;*-#!JdK8gvV3bqU@B^-KXh`6vwD zPoFr_29TIxNC??XqWu~!FezR`U)mM`t=c6Igqp>YShzzFt&;bK7hI3ZVQzT2yTZ#p z5idHx8-(m5wpe-`6uys8qDUgy$)H5J%0S7SZj{^&N_f6R8#4#W0imQYl;q_b4eMlN zeh-psFS4)c<Kaq-&7i%%$G$`59;~9YH$UsKQ2uoX5|5?>-E$)KGiiJ@5~kHIJvC z>I^R-%Z5flaWf5oMm!9Flz(2Wq3$Rq*`^xJr)<$zVpw6LetEaO1X}c^uRX`~)fr?YQqq#Kl(#f{X*<=qaZL_qBF$M( z213liVhbyEFqvQ2SsZ*t^B)If1*ydBxD^{W9F)UlJ6^qOdOJ!%8|FEHl^o;}W zG=Xn(E*POOW!dJWuvWq>icecSe zQd_lDA=2tH4maMA1vKb1<1onjM}8EK3`dLwGY-MI0z(xzps-YC4%L^)z7YgXy6W-^ zFFT|4y0W~owZDy9YYF7n&k!xqJV<8cfG?2~Sr8lf^)P;5R^;~~V3;9eo-xPv&;dl5 z*_GG{0wwDiO0bBw_Z;r4vd9$j6>2ue6_rVW=n?{0MUzed0nx6FFRv^6zq$U(;*x53 zu}+U_FBNzr<^G#5Yb`71i@t21bDztbf&s=;ERj7dLVG=PFkxHlj}GG90=-+vyK~wt zCnn7mxG$HH8PiOKv4j5`64&UoTwo=k-r_6!@mjssll4&YYdMMWwd-4uFIkA8=DB4d zAq;rKzbuDZ;T%ai>XN4A zl9Au>x_<97t|6?J?ft!iFoA+eyc}9Os?2QVWYG}?Q>jNp5 zaDh>S9BWy8IEA>PIaomHYx1z&v^&M5`aZUrCocBV@H{(O23CIrm(oXr>Pc6x3ctL6 z^Ns(q`lFg13DR~J&KNLjhKkP^KwbEZ!E5K8Sxfr3u6^BrN!6EI{We>X2vRJjKer7@ zizf8b!PDJUd&lZ`1M5|L+j@hr1tiVm%k-n|Bn%uE#=iQEU;oQ$u*~gzZpSt}|A~0J zmyq9lx5g+zbp*Wa3`xqWP%UPTzK;4c%ELlM$CjmBJfRKmZk}o=h6cDNgcca`ZI1d>v1uO2x$I{Ma2TpUev~qz0 z=WCV1&UVN>Is<0cqv2LOlmWHenJ8C~mGi7$a(HHLvQb$o(}>gzh+MY_;<^EqOV->5txRMR`zB0!m zP;vfZ;^*Z~>NrNaoMr8~vkfE>HXO51^%&>RhCUX*sGZ|z&gml`)W#9xmHBjxQ0Gfz zyOw*!qifb5OnNbP8WiL0LgDFnnm=Fy+B}YVn6oPMy%WgZcKAmQ8=s)m710SAHR{w<@ql~Sa)2bA6iSC#0XK=~L@pEEhqaD8C#W^{Yqy5RD8yK+x({_Yy<9A*q@7t}}3& zaV7z5>JN795}(Q6!E)dtYB(BlrImAq(88-%i>k*CDQIpP)nN3L4qyK5vJx225;k$?}A`k$R(rwr@$;i~YX~GDmb(9L-a) z{$s9f9dOgP&3lDTMw=PSA_ z92a%;1t{A6v27MuSxzN{rtBXFi0@VnRRY`eIV6i>$8Q^22>Y z_VyH6Rp@tHS}S9-$YNTygYfpWa%t`~eCh0)mc18smIghw{9t-4XQZ#;5Eg<#ONA2n z`0PxQr;?LqJ*34(lHKYx0%DBUhIGow0VLx)C)R*)nCScw%^$|UFN-LfI=CLU;w$|i%^>Jwqbm^b#jRB3O;9iG z8AZeLD{N}a#X%Bk*j3YnTGk`fcpnb>@HFw5^@v9m(af-xdzztj5@!>QGFR)o%A;yy zg#Ww^u+kqpP-~S25uizs>JP+fiNx5=p zm=-4UkThEe8Qf=^OH)slT_*`Yx;m|@x7uk&{Hd@IE#~QR)G{Nc;qFbaZn2Xyz?dcJ z%>nu7Tk|6|N)9t+-+?(){9&%8dw{9lVbg&O$s=r+ed-x`$ESw5#qLS)Tf?~;k4J~` zh388U8hwYAshx+YmC1*%XcXV43(}Y6;1bBhsmo|+j6BMgW{I^wC#~X-Lo%r7C&C+W zmaZ&5-2^`&d0R3f%jO+Gz|>A81g+Szhs0-YW=me&nrS6VU;>B0)P^*`lqRHO6A&BV zH3D))a+XpJLC&hq5}<46M=UYOSwieU-Y=jSE*2kH6BggFv;-vX)qk<>s1$1q;94Cy zqiI^_4vc>5hro(`0fF?UxJJC-?Z{U51&G*=;?FTCu|`17<`Sa+WLDfL%+f9MpcC0c z*uh^~uv^yzhOxOaEw=UZVdk-J^}Gd|I?5)MD(;M_p@d6aFJ{G0qysWBn@@Do;-{_^ zB8S()K+rY!OTtFPlL>{S_|iPPV`P)+4IZEbc)Q>HCQBRDEHu|FG^2yS3csYn3h5?9 z!;4HGL(dA8f&WO%L#PTrtj~-yj02n61DiV1R=O)(dSYMk#W^I=wR-Flk{oB~`!=;Z zp)pr)*0xynWTzAzi#!VU@vXXwmSWW)fm8-y6@HLF8i7Z5K|nHxH<6rNU$#)(2%q?& zK0=F0`jnJ@>?DM~q{^l_qHa7yRYADDYJi$CjMYxUC!bdXlov1D_KkjnK6iV9Si9e> z&%%>uW?@D6;|BNqh425RJ^4?aCy!p4+N1wmKRPLQWRK%koE6y;Q<_U{RD_btcH*zZ zouEK5tfuL9U|s8;I4k!JFII{nlQ!Wjb~6jub`BhTn+znG5+45}pa=|vvNAAs4ZyugSQCRCs}Z=b>rpiXzvw*sbe5nlh~Pq7 zbac1a8ks2V4B2ZCoc7Haga;J4wDVlWtcu{m?>d*)cP@8aE+Jig4O&+Z-bPyg6? z_IQ@1*mB@x+wQ0mbeLQKC5K8hjATbK6MvSY;=oneSO9URqO+sOKF+Glp_n(ta~y%g zTP+3Nz8{pr6+5O@2g~d!!hsu4U4*=qHFh+s`3Gi4sxmoJxIR?zF1X4tQQnrYnXPJ? zR%u5KJkPNzz(XtC9gvqUm1NfA>4qTnaD-#Y7IBX<;;LZao}Ls{qvAKsLFQl%6dHM| zyUwC|kQgypNfORFS92AY09Tyk!ztOZZ5j!lorYih7kBK&Q8=gbq#A_v^`j^9j14!! zx1>PBiEyUKjUC2!j3R?A3>OrD#oZGJL3Q4981*bBv1F zUb8V!tOCb~UkSa`^;r7WoN!L`I4TiKG@QkJPjrl=rGSKkpH z4E1|n3XhqZWk!)NlR8tQBJ^bvbFQTxx(9-DEoI{^5zENy#{{l6!-%q5h(^guhg+55 zQ5^3m->ApR{+?&**yLSK(tIyFoe3!B2b5SkR6es{1^&3O``pP`=1sUEQaDtPfOlopQy5n z9#F_r7Z~BXHPQel%578%@Pp0D5{oCa6DA+g%ms%QB)kq^;8*{YhDVcdbKE2ae@h?$ z){5eyK0avvr#ggFa|Q&nEB!OKq)26&Ns32@z*kwEV3b6Q-|No?d{WqhEV6)CO2kBD zf&v7T;ekA9G*Zy3_1I^T)Jbuh1qf!vj(%+cla_ytyqK?DS$w&VAq6p`40pafA}!ic;n%n3EUl1(&fCRO?&F|{B*V^r>N5>qkuw1!2kDlDt_M3O zKNNn2iV{c{oiAo3)fL>Ny)bh>yfW-~Atz`H_^G|68G)+Sni9Sc=_Z)n>u%l`cd-DF z1hR`IxH&v%)F(;u*dzOfQ#54?JGr{h@W9(J`CTPV$s=ZuW3wHRe(>$!t|>?pii1iKnVu9p~v9_Fxv+M-n1t6 zKq$`uO!u%3^c8T%=DG)sH=m!s@1UaTq(nJsIJNNA|T50Ha{gSXA22ru+)lH&<7z zfQMnn7x%T<6VoLfribY~{lVDI2**?ehym{mGc)Qq%*Ja!dnsOXf??vW!Gh#mF3Je7 zNy0;aYJ?|Q{vuA}SKswX!oz8;;Y8lD*y5znengigx<4N^t!3*U3F|3}7D(p7ILnjy zZ82s=ct~R-3~FLfX1>>aAMAOqE=Xd2nTxh_>XZ%@JHjqftP=PNM_{z{p20%QRK#Kx zt0LggLmPn?>*wtm{R}Tm=M+|%)I}q_K{`@Vm}S9cfQ`bYM6FQRjIVW?gRz%roVQM4 z6c>d(Rna*2HQ3RrfyA$#N#ZHEsQ~C9@okaB<2T*-)_ha=q(R;~02CJh+ba_1z5<{b z?w(G8S4@AfrXtCwVg>VA7ZSMyp#acLDoSqg4Zo zU{w*6SsLgXG~POkQCuuW6Rt(L7mL+{CRcj6U=M&@KLgl>y})u?1G_E)J4*vy!1C6C zrMQ5l2?v(@nZQDi(^c+nF*}nTmi7Y6Z4K=I0(Q7<4`97+24a`>!pdz8>qJECEDdxa zmbZ>riVLwc;fUpaCSrfN2f*Gj1K6?`SZ-@zcSK-kX`l;O-a4=p7qB$pz;Ztm*tOFI z&93Q!X6N(=lhYsEIQ_xI^apEq?rYXX*!4)f*jS0L^)D{I&^i6pDqhDNA8IR&e(j6s z3!BUrflmaB8%Kj&3{msiBl_L$mrFsLop2!>$q$LG4#mtcm%?aQZSGRg3W81dPn~b` zCRN<-$M_&LWKnp5c^O6w*2@a5bVZH!SLq1*_U3D^20yE~R;)SKfI4=UxlPIjC#SGk zf+tg$mX<|a@o?tqQ6`7;IEcEIFLiD9Qmbd8$g_=%O8SC6&`~hB5vMd@#P$^?#vq za2_#(O5+SlEuCdqVr1}#@tym6<*6<;TSrsN-b=%p({upE^zldqr|*t!UK@Q=JrgwL zgG`FGG*O(YlSMMK^D;S>Ez7YCWv0%>>9+Zl9AH@giW#eEh-stn3CB!-e&4A)mqp5U zaT^MEZ*{PpU}NM$HLNNxmz+=T(xSYrk98bhZn84T%=+AEq~&R0Nk;lgx5VWucl(=; zh>R8dF`jB!O~}iS)2xEHT$=d@+$2!62qJ}K+gZ5j;Ras0)V|YKif+ilU6-U3aI(te z!pg$_7~J?;-rLq(7>mlMkv84S-J;LTqPH?xR~f*F1{hUh(ZAQ47UH-SQ^^_Bl)u=g zcg)4%JjPZ-Ji-rDy^ONwYNX4qF)+?cMYiHRK87$!*tR8Y#A!ZgtkACQyfi4IUMGBD`U=YZUE|3kuc)Z7A^lH3@mbqd5(e<3}VJp zrMCYyzs4`rCocj7As+&@g$wUc;toADe}a_eFhCA4kt*itfnPb>WYUVQo$(sGT zl}ocP8_D<@gk-UkImjZCXJse6ImFj1Tut#II!*~cslyMRtH(kPrDuC?jqhb~%v===WEnlrlj&_w^n{%Q0= zWVYqlaNe*W+oQoC%&fT}9*V#cr{p=@eSbfyV)8lZMnJYC7}xgq@~_m6&a_D9$m)2GNmqMbAPF==c#=EJ5wRL_nSxNb9 zlmTumPyW7_bCk(KAqOH&q{vA2J{L;k(@#XE)Ad!GP0S`&gw>_z>_hvGUJVRVuYa-jP@Y(buI?^Ad5>ty1AV zrMZ&ZH7m}T-~71ynphZNIkQF#ZXHQiLkzKU-8%Twm_NpIU?aDHwB2X50ZB%gu&AW3 zc4SE!YtU^e=oNtf0N`KS0e?{s0>UjQS?|{cxNPI{7`hv*;Iz&mR`*YFW6Pz>6Qce3 zg!?Fz&7DUb=7+@aof}Ts7x%=&Y;}?#)OTn;eTOx}S1oJtz-*~%(Q%WeJf)bZsgUhN z6;JL1X(FbmMJm|({!caH&B>=_EG=(-5i_8&`np%Lu+2I)Szg&>)0W-%e)?+LqaHnr zt+%3M>q+y6-(K#KF)+iBGz&>MZTUgYJJwXq43HpZqtmSlF+>=%N(^dvZCPIg?ssmM z^PH~Pt3>&Ts7rKoQA%teS2$exTJMwa)k|YkQMlnJ)zx*|tE=a4udXh*GJ+QFJGr|0 zV+C&b_v;%Tn-m`Yj=z=N#5&)Qn){J|(QGDRE6CSCR@YhusID2Sr1?(s71uKqh4$Z0jMvYJ>X}>49glA~iMAZPBC7F(FkAarb1x;AwnH&r6@4`C;pheo*#d zn+;xj4*P~V-GcK6!^uyPK{Ff8X`Y%UruJR=mnqXf#=guytS3AD$)G>cviZa=f7Blz zQM9R)(|s5VImCcK)2bV*i-JqhkAh5am2;3cW9;(d^;`zm5BzI{r=dNmnJ0AyOwaP1 z^0@IG*gg)MU%-@u#49tt0<|27*FaSEbFB_)GdIzy8Wn|Q`4tUlX+Psp8!JBr{v6u24ys^^LV3*KVTS5f}s6_ z7zKXB9B|8c+Nua~*=TFf2VL(sFk{fDGv+uzGF$eJbZJ9}BoaU#x`@<~^)}ZzN%K4< zBhy5#-68rZ9yKBL_OLSnL30>R+|T!WY|b*i5`V;}qpRF#RUCH3OYoLMj^Z~km)M7jl8z%(jHe8*7DbTWPC)OU)HWV6<$`oSa*bk=P3KvOTmDJv8hzcA3i=Fb zX5&Mn`V91G;H(az8R2@!Ni5f`aCAJm(Ib3H)4YMXB%5P2r2sQ$B1Gy)4;eJfMoW&s z$?2^~2-<`}V+54=fqA*q*p@F#zPTEUhYitRChKOcVCFal>T^kRMd{eL8Xo%=5r|&U z9vP37h4TRC;=yd#^~;pUi&X>FnNk&K1{)#TM|pNlp~h2?&{7mb7Hmh}39V{2!XWP5 zGl=ZE?+l_&+3pM?2fZrc5vHLA{2&ewUx;YzBZ)|p4N#tsQGIIf

w6waKbG2}Vku zt<^90W5N(2ocx8Pi;ZNzCsD=#)=(o%BJw!UaAk}93!aX_gd-xLoNqImZK}jiQPJiw zKN>^Pc;qla(lO!)Ath(9qnw>#QFsen0O($$0}rz{Gb!~!D!cOW7B3Vp3i zpFD%7NKnj`B>V_J93;1l=h&DfWcM(~_lm2eh?${$olQz`E4HqAjKIBSPY{xOjo1p! zZZA6pOqnEXs|zA|OUezu7h&gSN~C1?fxk|qf*F;Hq|^YjG;@M@>5^8Nc?nSeM02=y z_BKEQk68^8ZX<)vt#NBK6z?QN;=-qVIecRlE`2oSW$5`(*ro;QGw`H(`FxyPLGGS9mb-@yZuIv-wbQS1VGKcIpBw!rANq9();Pd2fR^xWy_oxab-F%>s zC_@M(#>f`MJdQ|Z)tyVdNeC66Q79F#fgJ1)f=3h%(G3^W5Ghw44#A?nrZwT-)#+-( zT2K*c!sL@-7fq{2Zg<4oR+kRH-^#WG0zrsAjkpTWPZ06Vqn~#k%|bjcq{=5MqbyEh zDkWq1GNY`J;xjX#OM?t#5EDWH`hRh2Yyg1`@VT1-;se_{P?<}W4ImTB#hp!Y;{JhU zdS;)LT{ctoEiyjNeZcTb(w?zw|V*5*4d~S|5{!qfC1YvW{&!yz) z0Nb>OXF>1uO^cbr*sCa~=(8KgUKOLyuH(w1&v-jM`b=MFDv%*$H;K%!+ijhNDwmTo zBt86X3G+t!Vu7h_aG=lm;beeQ@&lNVPe}c}S)W=LPfF<{^elM8Kd&~CReTb+hxuuQ zHk!$bPw_+|i@{eM2y-j#Vd4r+N}XLFgMgdazvQ3W46mw|YHsC?OFoKK+ZLOjd{sJV z%YhP%Zh?gdzqD@{ze16B#W^VxV?Yo8M(8yeor<5TCpd$=j^<8igjew)gIM@FxeEhNaGHKXWW zx4Ma;RCig*Fq1+c*-J=N=Zu)JL}aMre$c5tpyPvv1v{M-HnHF*nbmmgH3F_xgxc`X zr`*G#sgLGA$|#~~&ZXx?&j-DzJ~vflTBh-$-(G*Ze~TNdxCp*$y|y2Uy=W*zPQ2#eQ=94Z!pr}ebQhyzGvMZFZHe0J`Z zOz?q5Q$)tyk@+HTYwbWB2a`F+u>&?1sVF$f@c96oNM?VfoY$&u*d2=wvUD`DWS zaeF17-`zdZ2ED|_i;uJm!~VD=N;m0((l1LSiW6dv*h;i{=VDM%R|4N5^*e zKz=NRoCP#J+%(5lkgJ&?lRYQ=ta+FJ4lmwHiSdVmaW`BP$7n7uhwgdA)BVW=7Kmj z8fC?)+J9Y(@Jdf00p)3@o*5DlBVbjVKa~=^#hD;OgF(MWcc8&6c>$61jAzfsA%!Tw z&U==$t_**IuIVnjt-nMlsrq*TB%HC0+bB^)7b`>68Zf!E>l>nuaT%?z-S5W`M#*wTVSNeQUpjEc^s*RYbq_>5V z7RF6^M2Ey~`Bj4`;=ul!&aXY=ONGv_vgVj--4WM+=xMXJ?W1|^T#Lhn?kSU&*v8LN z)#se6D3cq0r{!vEjPei;)aiKi5^~Y@Y|1Em`eXU~$XUEUckqC}pCcwvL74OW-;KU6-6n6wcqC zh3(9ohr%TU8|iE#W=_-3cd*oww!=wKvW!QUrwuwEbq4(zMYU;dNwH2zaZkUtMP#8} zY*wNKSzHx{t6%w*j|S1Alt zMh7(Mfmkml*af6G;uWae)z|FA<67W$ zI)>H3@QQHr;uk}ZFkQ6333eghEfX7BXDB*sO=OIEXj4Nxx3g-+-cF|B{%9I<_5w|1 zfptxg!W@`-qqfyJPOF&GgDpkt%+R{i>#wxdp5VSB@7~{16Y3oa=U~D8jN@>TBydcY zH~RVp2Iuzo&mog-BRs^8QAmQxpt|tPk3bae4XL6%0YPgfT2$AvfEIShuNW5#W296c z?r>hX%N_T*E&Y*TPPs)IiqI-){j>|!x~ZulbcI%th>d|%IGdC_;Wd1&O!f>w%|CF? zTryuQ+#qHpJfNBzs`;3@=4cl0QP(>)BM;K>wVV54y*yFP zD7BTaYcui_ZxVWaM!sjrYlL4Vgd5nPx=>)hBw+_eH)AOPpL(q zk1=G2RP8wm!{#_W(eZwO*%3!`B~~Sr8{r3R?9;#xYT(BOy3>60f9%=Fhp+zV6%BT{ zvVycnYC4$6s1BI(1SV&{RbVQ+{2tO)6v9Y>K{mIiX0!c=;fBCw$1q$Rae_dpu&G%C zlJ3Pc$exsyBy~A61bIhE!_p|mi->(p==!P=``DhNt0G6Fnd%;Kv9&8Q(v&FXvsU+% zd(5gnYDVx9eT1{AafM-y;dnDf)0X+Jlg|JD6={`lChw#ci>ogCk|r|w?%3NM>g_MB zw^*=yN_Z9aOfRg6dcjTv$p9>B)Taks&)b3`1FVvrSzSAI(LCZWgnLB?==Jo^AnvnRe zdPGa2dA7Y^?j#e7)ikLwXCs@QiG2y`yae-8tf~+wg@XVjDA(FB(+R4%q#^|fk#)FJ zHH~s`6rq!Ziz@)=96}BAR#V9C_L*GPM?Qp0Pml3G3I!C$v5u=rKoXuyY$}#15(Nr^ zCxOF4@p|CUhyura+J@R#`R98kIlmNKdPLTfjP~7sq$_9f;YN}+w2GUAum9B7T)^So zEP`nYz?8$L0!jGR8hfe9yr57K^IKG9!IqWPx>qb)GH`lbT%eg`c+{7PIyGo@OYZ6< zTzQhWY#-=x{Nygr*B8$DR%}%7n*Nf}VQSPQILcNBV+W%=2?w=?#);MwS zClzSSFdK(?N=(CA>edCYbD|o?g-vfgOc3{n=oDF@FkO<5D{O{q3+5X{vHHf0L99Oy zr5)7fj79G8RD{U$e;^qX!~ro&Nm@1bqu4{uZMv&dBp-2|o5Tbhwx?uS<~kKpAGC^W zRwGql&yVH#4=3bUb%!!!Zs1aLDT=kp%7?tFV<@|xkhDQX6PXqSDuwFU3>d!Ree@NH zvNv$X3oWqV}zXA6-aQ z#UuSzFl^avMe@Lx{dGn6k5$ad&Q{~>u13v4 z(N~v!qE5KkH?1tN{?1|L>S?dCn+ejym_P$&RLXdWa*ev$%?^Fu7>8y;LvxBz*Mylo z8k*hF!C=_s^+hI{>KW~wvC2tRIpzfGRU)i9)NL$?I59RsRwUtED;wt)=yGky%{nyh z2dRjed$2yg7;H`>Q2$3$aK}45tfXqxmw5eVFFd@lb2}x;3d_G&}H_tGQs{?+C=c+{pzX?5w%ecYO~sve6CKJyHZ z?K^XaHb?5{7=aSMSHWApOdDR%^x?IGoY3y4ns8c!!5!|%rC|ko*x{Eb+i;6tS|Hht zx#GgYEn}~Olo>@jxif3`ABGG4p5$-|@-$qz3-sQB$q{y_gFEu@tJBp#s#LmWzE!43 zq#Ewx%gesYH^l(Yza700%PqUSZ1g-D@J3XBJ6qBw*!V{37LViqZbPUO0`dn>2|W`u zAsmM5)$%sIxS6=1G;FgMv7y0HGPdm)dsVz$hJ!6$CdmgII-q*6_}YH$fzQRKli?pB ztbwn{m93?=k7+OMKwTLiZyLvo-7L28k;Ej>y)_>r0($L@YVnQz-xIi!9 zi*BUp#pPG%g&X5s7&gcCV(SL$N6#0=;y2uD{pfiyrZ2wq9qUKW3ud`wzA|u;Flsyr z-`f)H#;Qvy^Sv>B%oMT0QsqOaQSox9f$}Plr~< z_2Nh0(u?t`)(0z7HiEQHWuE?-b+qT>F}?W3oq93W^Fmg@*Ur;(w*t5@Tpq*o%P-OM zsPW_Tqj~-_D<6H3@%gCgzgXqncM1X~@%DDXzk(8i?=UId5AinEK){=uGUv_DIHeN6B?x(X7wG@X_&wc5o4a@7TBOz>+B2s@l>(oe@qk@pgo zp5lA@GXg{rsU#mS`^Klg+jt7ApAYm`8+C{VXl!Z|g5Fbb5MUqtb`9)`ie4Fxi~!7U z&u?B+PnA*Jnw!?UM<6a8cJ82STZ7;hMlCe_Xxln;ZH5xJVBo2^qmctUnW-3_egB|! zqRq_b7>%+gS>~?lM5GRI($FS=TmlJ#XG+aEzP8zdY!D z{laKL1)_cDbar$ITS$OuJ38235vzhatiEdJQrCVCR@{&zMk~4+k*G?- z2GDAhSbd?L9PH@Vq)E|Z2shiw!GT)11$^&DHwx`Y+bG10C=wCHU)ACOO?<#{c5w%gTiM*|$9iFA3+L8K(o`!ZWI?bMN!F=z}wqdzbjO+vvOu&NBlJacjn&3?&68oAJ1UPkuN77fLWm!yb@NW%z6O z-I-&*h)*f9E7O2Q4r5m+kEU`x+T6C3?$QvTA@7vf+|JF$5kJSrqbH1BSZv(S%Z&Zg z=;k_Y#D#7AALC`iU%ga0&U`xbzu3PgeSa!M<$B4Q#QC(I4!K@>qDJqd5xr85jHhi2 zUVpz&_eSgC6oW%Bw!ciHsyl3K#Wy^49ukCF!%j)zaJ=ngj&38X?Hu2#>{V|+)n^p; z=7xClYK_pTzROwF=>JG^JT0{3-+kWSc2U^OK~pU^$k6w3HbdRoS$CQ@YVAC<#%{XX z>9cn1?H^}(t1Y9=Pxe(gKz3+lUE~djh-Oo)h%iZOOPVgftZ5<3WV0oPb&RJ#ch?W4 zQQSldk99gaM*!%YAxKAgaa`Y%-biP;*j{3!3(sL>Q}ljWQI#qBeyVrcLzJSs8X`k> zG)kCZ1vuf()$cCbiK}g)ZD4}vA<{5nyE)STn((jq;e1m$H>NA&9tHhO*xX9dOf9>T zlhdR?RYt}=|8|ln^g~EHws?JzABY9n889T-a`Sbz(wdM|dI`B8Mp)HbgyhzTJrsYaFPrWk`8tXxu;vrRI5LTHL2 zXmG6D#@MUpQgS>vFuRTiBiTgS)U4Vo&<9c-dh8i8lCXWy^@7NnVuz<57p*M5`cj_&zL zMmt~O15B76w-C14ppJ-Ho@6c9O(z6cTe=?OI=Lcpz_BjxupN7zd`zOZ=gG0L!Eal? zG^?ONd31y$dIL90$knlK*WMs~#nE(u^CrVXy9hDKI4~q0y=a~JkUkcTcVi4QfSTng z!ujX?VZ*{42;OGPVTWp*x^z^+D2R$FTfn_2YL9PM1t4byuS8w)hP0nBQ_75JsaIz&p{h2*;ye(anoaZ`PS zpM7B+!1Y7Y5W&WT5t*6qCavdh`Z*zP&d0NV#St`xhgMlvyFG28yV@|7VN3pVwdd=z_L!P&rQ%-spYomm{n{1BIO zmJxXzdeQh!@+%3$ajSDTZN98MAAy7P(PeS=mF@luD_MQ;=6JPmbn|6!8g5bqqM8ot zP4bO1*Jq$|9aUczSIT1p+RFa;8Htx{Ej=&iQ*E`JZenn(`f^IVA=gru(A_D&^81i5j=eMv3}FL{}|QALPMEHp%jhB&v=>w26qF z8C0n^vK35MZxYOi5NAyr!H@Ys9t%M|gvZA;o9qZvSKULd(O^*CuR)Q@!mcv(N1sFf zqACklY^AcS?rAEEX_6@`pMTbBN=4o3;)o|xQ#^5PVW{oskjcy#8t8p#bXN7TZh({s zwwN@oqh^iO?!3!PzHXz$tS=Y>BbOO~SgFGseYK&0@mFRh5T4T9{f6%%*Ui(m-eZN_ zb!EG10z4#(1eK845zKME*D~{DtN~M2=7~)SbtJBu75|D02#2VckWdnI`&)B7bnIgz zPYYoY5=>j*AtKYfQN^LqR?oKMC^u@iNY$V$FZ={#7=!J48=aWm=r%Pvmpo>KMsymD z{yrx8-!-Y#kxU)ys}W%DUShH|XZZW6kw`FACvqYZ%=8>iDy6(A zil8iaomt38WMa3Uz2uJg1;Ha=3Ht{u#V-^{JfX)TEsFpV-S?Xrf}*!%awKvQQk3|^ zSt*AA#{OECB5oZ`1yF5CSYuxUeP^>4p@hS9RuE59pvc|^;w9r3RE5EyZ z-MpJ48>al&P;5~ey#q4HfVk;SMiebXMcEea5Jyf(cxNF)Z(k=(;IxC7K;ny0%}g}| z!A!e!73f1H5)>xEyN%zW9FLCtdGj=ySY@22q|+drfuf^I>Oo*t96J<&kT!%{#svj# z9xk^?0@HeX*myRVxvBQqlOldTLdPYSFWyvchd^~VhtjP39h)5MG`Th{tHz)>8k3X5 zsYwgI_+LB<1Cjbd+NFhDTlvO+R9M~&4}wmYLfrI-V}5Ib6HtfzP|l1<4%ld^dZ z4}Yy}YGcOm3o*y(Qm@DWhpvCHrT<*|Clawy1}dnVh$|--8GPOLs#TE1gBZFx8fYr& zCCM#iMw(RveJy7K^R+Qx9Q9Qr!aT*fLG`ZwIitZ>&Xb;d?T9N@CzSN z?7u6akk)dm?fzlxrnvnmT*5(tgkkVijG{T*x8E?Tw$Pg?qaId{oC44pV^QXw!{`}h z)Ke=$Ev;;n)7+Y={f4*17^Av!?Gi~fiqyT-J%raNwH`H4Q&Y1Wd$-V6VMjw|JAC%f z?>6rqP_jm2?pgtoIUtvR!2yxZxz?$btLwk)>OMsy0NsNG@jGZX@!xz~DY9>IyortG7w`SzP)ep1Gu2L-dF)7F4SHWXlTSoNmEU& z#WPtRp$2+F$Pk}!YzW;Yf1GuU4tr__!lV&xw(KprPSloXy))$aayG-R@Gu)U=Gf-P zDQ>VlK}opj7a&FhM?2=aKOpH)nL(kxA_Ty4IQe!jY+YnTwm0&AM#P-G@|UD$@V@A3 zz4aOlf~Jayq#)pti&7r(JI;&nGsB}amj=uU%2qxE%0`t0KO6K*KafwXh($x`T>H|c zlR9i%CN}x8DQu_;VSG^=!5rH4vqxz4dI;xirS-V!_=@ya(A03Zqp^lO4 z7L@;oxEy#(ehekYPgO}o&J2iw@O_lSr-7020j>ZQf1Csz58ltWw@wNkpXP`K;=CIh zy|TLmy_*L37@1+4Jr$?w?)4^1lP#=h7(G6Us2FWCvBlGpTJISXgpmhEvQax2y39!G zmyqT@Ts@T>wc2RN&|Qeg_0F@2f)-Wr+`EAQOjUat z+2J)~HkRIiWmtSgGG}w#L8TRrX*_uGFJ0KnnPYPJjNG%v#=Lq4c{}%*{6iD_H+k?s z+E_7g2;RGiJFR@a#U-|fsewFcYZW=X#SVqI8U(-YcC*oI9iE0IYx%jai*8Nzb zc_|dtBC#Hg!r*@ z=jT3LEP&zz0(8^x)<;`_nFZfUTV?nT-#NwQhh(_nx)NuM(kg)=t&*R{N`xA|MizL|L5bb-_I%X4x&SB4(uH1T ze90~h&e{b=0!DpF_`g>Xp2VJ6ku@v*N5fzJ>(F6hltV2Ew69JbLHj5dCxXc}?hmgeLdiAmo(OCm z+`W4+Ao^Lr(1^$(T!Vow6&OO+BLc%jrFN*nepiVwcoCPOnh^Z~mnO)s%-<>+(-kpt|bQ9GL&baQ3Ha&0oJF9?zoUPuUq~)Sa&e z z7PHxPM^N%JXc;$&dj{x%Fw?dLpjomx9lEq{ocX ziP|QILwJ6D+$|wy(kN(_nuK5a4l1zcxT(qM+zChx_&{?bT=So2A(7J4V0d+c*Fy?L zpHQFK@+U`{d0cj#t@R_NY${?f%M7_!o%r54h=aNZ&v0Clne{d$Ly%Cn&(kdOL5PGA z!X4u&7%&S%m{5&7eYqzI_di@=*WF@n;8YM-E3fDKTO+BP5)q9)4FQV<+vg`*am5v*0^V% z3-`wtanvk8{@cW?HH2MPGMQ4%pYCfr`N%`cAXM<47zHv;Gbgui zjl1Bm)G6UPvT68Ctr7u7ETWq0$L$q#W^+7Qie?vwZ$uG9*OV0#>4t=Hr<&H>y0`Xt zWmI9-b|nz-f7MkCbXUQY2{GE3y^2l(6Psh+KUT?*JPvjZdBvaI6#snW&#Se!!YICq zv=Wozi(z^ieTLzz-;xvdxkmW$vjC)-S)U!a0BAZB&hTZ^EzNnxTgq#6X0{UaaN4*# zpzf_<)9lEJ`KJ2WoJijF79>SyK(~#y_S`B|y0hUi>H?D^Phr+qy8}&CORf&zm7)~6`PWfCRWqgSXo{P9#_uGRpF(%ykMCnBq!41pX z3Ot7#>ovX%(`%K45lJ!SivFwHe~<4xxc`c5Pxg*3lDmGxr6~q*JOd{pP zC-tFLQHcAquJO(wJC?Us+o#bT1#?+4WMR*M)Mj<1L}ZW^kh^w450Ohkm(9sCO012_EzjWPJTgS z<)|W43fZXsgCs52fC#3M=6S+$6e)N#*Ij$h-o?3#9piCI_$x!H32c!JE)F){>SqC1 zz}K-n*~??=8CqiNMFi5zYaUg**k1T2DYG|~D?SagvP@%O)a3tEAbCmQM-51Ge@M9e zwdp8hoVFwjqhg5u`LCmj5x4}9xmj}l4Bolw2fmdS0FWTJq{4_A#t9{-BA3XjSS@WoQ2PiLv%x4JZtH$nxbwn=$vK@j@HsL@F9$dI z%ecv|`B|-lnW!6!>tMEy6jx0xM6=Is!Y=X*6{`j5m3*5`FB5g&p#Y}^>}mxC3={| ze;-_e9rm`;QljIL(pqMAbKSN^Ul#$Uwvs_!C6lNZ1-^-UMvTceVmuKss3!U&aWT#Tcc^bYmPM}E3nnk$>Jq;ARl9^QbcFD=46=!YuLTs}`iv#p zV~~+GE_{CzC8w@p3z_Om$>I1}C5OpY zSf#1Aa5#}_U&Q2WozST&d!~b3s`3tZ&F~?8?)N_5 z8hN=9ZpC6J@4TfK$z?n+I`dbCwAg5?H649acLxI#>{yRjy$C;`+9iGxLkw=owRV{w z5u>GIpQ+X+o2xaP=ezO575~i`1%u+n8wTa>B(Z^rHf_ojt1}XzLbmy*ws!fa+=6&0 zdM{4PeJt=@nrJ9? zM59eCyLCh~9PV_NkS=fa5ddOynp_*10>4A1fvEn|)THdj688y~Wf!WVq!X&J>vErR z^*&5+1MyBPDJXhE{I!D1+LBgq86;l`0ezW^DWNY5ryBa$P&UKzQWb?QuCcjGaiBh|Id^2WjGI;Sn7s$kDG)(Dlt0U($7g34?5A2qI>KxdDIy zod5s_oNQ=mtI{$O}cRxFdWHOjKj0v1c2&|I5Y_@uScb zXWi9cc0EB}x(o0*MNpcD4f90ve^kxL6ZNc1m;1%w0G6MjObYcwS9cE^xra z?qP6W&k!t6*144d7S9kVi-44@C)~8&ry*aOl@U5@kfdoQSyWT{AKbGW$^R8m`T@2X zCH(rd=~J8zp+``~7e?zRb-=7hRbIlOHWMvhb$gJJ(ymFXwI^|xk*RTz({K#H!b65Y z+;Wet2z$T;DRHY?kQaUnqd2!14BwaQ*?l+I&6O^-zyl#UHFex(h(w@$n`|-I9uDeZ zoG97zK?cnTb#q*46lcUJh4cLplrI}WXXim{-L|XI8u~#j1ez$s&cN*^8r&3%BUBZz zAd{K}HTK);Rxv%s<0|hpr&bOv$?!nHZ|aO7SjH z49zmYdp?Tco@y*+jOPl;moFe06xID_hJMchogF;$(z?yJrf7a<0K+T8vuU9t+wiWz zItv<>B|`fXOwHo~)Gi5@X1GOJgHL3*C~I4zcKl(xZ{-=zk$n1pdm`e263Xi0}+xlk;B@)3T+kpixx#D;ayPxoPO}G=m)2) z{ONoxM=0K&N?}K_Dz^fc5>$Sgp5Z>zG;l5&9h^mOUU>ir^KD`-@! zYSpth)z6mIUyw+%dOf=Kmj2|A7zD53BwxY3v z%nPb=MKA`u#8oLCU8F}_J9TW2mqIa(jWGxs%g3~HgZo|am+dmPKjLl;QtNHWWF!N| z+sdsKc_eR7iIG>iY)gDU74O$`ujdnbzAcYkXoM?rfOFE>s7qn45w6N(FOaUC0ylO( zBL>vF36T`1Ddfo3PoS$QLUSy!gn{)K#%H5gTVRAz#&r%+tAaAD{SNcLyz5HvjL zM?{8gPup`oG;#$xA%jCj`KFsZjbdjItB4%Wxfm2`%b1kGpeyQSN$hbww3%WFB*VyJ zJsGC&l;p~6*B{FT!>d2Sed9KTVN=nk7Kp!@(^0Qh%85h5f=U#MM3Kl+QX?=P`h`RO zWL9I4vt>ce#O+I zRO#B-)U&FNdv>eY?}UD7n?o$*1hQx2IG5>i$9h&Dny*l&~SNtlR5| zv67Uqn+@D#b`yT}ovb*c(3-dI#~~AK=4g1i^(>@~jg6n@g0u=p*wU$WD+R8y8ldjx zGmW&L@nmf1`BRyKM>6QqrdJ~{8BRzfmvv*8=1U_PL@`3Z1;rOi7;^I_`P4M}h;RL2 zo)BO1rC+rbmlml(pS6@vld&Hm?OQ9gHcce+;EGIXdSaVb&?Yq^CaaoSp16mCV~E+8 z*)FA@rP`NUI&2}!*JtTQn1~l*-wFcogM~kpi<3yoX(%#0ETjcA9SpG4d|#{uYav+E zQTS7ZA0+hO4%4~w>Y(l$(zsyzgMM)r9?OWK!`M zfgWHq(|n-8G};yvF{M$-ndFa&nK7IO4Hp9{)9)|f5Ro*MY-bF;x+^dL@g3B9*?P(TPq&*S*q)uFG{=Y#)u#*n}FZl_P6u zU5#~^$jj;;>-jX37;qBfywHY1%DZMFKLmZ@O7*zx6X!t3;+#yJL+@Xda~j1b*+MDJ zcCwVKIOvmwKZAqp9UP?Jk?iP*^hUVDT=RQ|bjXe!50TW4rmfm~Ggm*tnh~d!57n(a z_DWm%Fs-P*4eC;DN6|}d&0v3ZWeVCR*Sg^@Nnk~}2b_*X;7hD7RU%ubw#BR^N*NMQ zVoD0mSuuQjIwn$VzSk@QgtUoQNQxm9eT$?O2o>pEPrd3W@MI^jB1fq~Wd?_6^?IoJ zdW(c9KF2H-aoP}B?TXe$iEzbBbAQon{*T(dj%PxAQk=Sr#@)7gPV(MP{JtJ-Ht>3k2%QV%Rw6%}!Ki=9`KObumk2I1U*TRAt z$&PL9r=JhEu-`=gOZ4-B7Dm=c_WstZ_4B^gYxHw;>$Unhs#WUe$W}`~hql`K8Ew5z zw&!xJ@q?eVAVAci#h9q0LH84OSwUMcOfymHTPoFe?`yn0=TZ zB0ZG9g{?Us;OEua=aiMN(N3tWe68iDDa!-1qqu7wn33Y9Y#*2%%FpXO@eLA003zG? z|9l+=!WfliF2HoMM5VUpqPkRM&f6GOeuvH2%yfi3#wC3|P(~#Qb!7l&B8oWo0&mF9 z$1+Bqx$isBJRC+(+=w5Zpy)NTSTxms$4bb;oJg&?*=RNjC8Jy=eNnYau9r*tvZYkg zcdjM)FU~4-k{Iom!{kU9EY=miRR$8bP?QlBWoy1Q z*sL3rCm0)efF><;2+8$ab?EV7^!jL;nK@A_^7ulZxq9)@45q%*L zb%He_X$UCWgL=eqi^~&G#%Tp=1ddQ|QhyGr*{EBR=h4qYr-M|-Ol4isSIzotqpY$y@;uN9NlP9y>hiN?&RL4ztG7M%VcDdP?Z&1!~osHeX;8`3~j zLRhGOJux%DpTY@$m7at)I|&V^kfw2_ZsT?>-DvwWdA>hebnqU;=gI-NJzihIwKS>f z88fX2=aFs{+J{$tjt>()V>-+iooIo{Ul!Ifc|L0a7ys@r@p)m+H4$N&Y@=KM9<>9x zfXtz&D$VOFT9@L`ngXx%2}=bgxv5NKKLiX2MU*bjQDfECAc`X~?JGvT`OE%veihfG zd6sNU5e{EWfML0(`prER#!OwJ&)t8gv1q6?G(b56rNQ)gEc5v>9e)OQ7FD7qSGW45 z-slhyp$8r(?cvfc2HSHf(I)85&Ir|;0jgCmU?q-{Js!0*FTlT4!|X=goC8Y4eeH%i zH%BN@1QY6xz`$~jC9t&B)WhaM;`(BN?f66L*>*pr#kb;(ask>O#vIaWtGWZs%M&VF zb$mI0bx1$b;*gMGHs)J_HbgrYP#EfWFHu%b*t&XLn`0W4GXsH)r)d3RY8N^&ir@{Q zWmsgtsx_bY%~dVbp(WH9(gF+q7~nG4`Y4WJAl^v8ewzeLtAPv16?m$N|6p0HF6SR# z4qJcsqMkwFmtGE*dx0r{Cat%@-nXixpS;h;4VxGW+06ob(|&HWZ9Pcb9qbcQA9A`WzLVf1QE)k6 z?zSuCUy=IEjEfs>vp~d!<|77TIG;cID23_`a{%IcKeNRKTe#LEDhET9ZP3!7L!vNT^GHZw$siR@J83hKd(of1VoUCjBjpPIR(TI4JcZqxSthXvg z*2wamzRC~NFSdHA1zJ1ef+0azkYqWe$FX3O9EmBcGsA6NSmezA-?hZGnVL~_p7ax1 zf<_i3wli1uPsD=RM0BGEK8Cvj4wM)^TzXo|)+~%P1_jdY*r2ag0uSSOB!)iYsdXHH z;r{^R4*Cd#iMaR#Vt}qRJhB;p$cBI)nW6yiVi}`CQpiq;Q8xje4y@{6*%8`ASE)rc z9Y<9qI~_3;!}u*A%$ghXbT0Op4Gy(~Vh}IZZ4EZ_(M(SUX_n%1C0`jLS^l;+GncFr z-7;h5v8)N-lqK|pWwIvxylTDHObg(l3NMC>L`;BDp!vAoHA*wY8i?drY>0D2F?FPs z7h*{$4%_%-MlFj38t*j{{3thy>=X%GT)`-28w@*i)P%T%y9zi>tADYa(fE)g%D{3& z`aD4rd5(i6rRzw`MVe$25s2CJUB>Cur657feJWL_3{2}Fd~cA!Oa|i8X?Q>y2@gxv z&%VD(T5nHUC5ScCVs7)4K1PQ@&^%8+00pdsb&`?{iEFOGezR-`kuP}X%)-U2o=YJ- zj0_ct4D%TGZ{NG`BmD0=iZ%;FM+i4mv^{q!+h#=8XIQfqw&x<0gtC%7+aV>lb&0#s zcURe+cMWNo6EAn0drx4@2@*PZ@t#)Gu zfhhVgjsrn*g3-Zpogl@{PNfwBb5 zy40j0!)`aYP(e4i3So?N&3Hn$6}VdH%qeNMhGoDc^JO65WTw01Pi9S0kJvvi&c|Ky zw=+tKK1CBJr;ww&4I=sa%1-?F^MwVjJl9+0MykA|U(!k1Fa|avs(`OO2i6WtF~<7l zf%aB^7-?Z{fdO5Z7X`tD5}+)ODut49nTFq1mzgpm_|x1x!TsTJ1>dL`TXb|8?52;i z;=>z3LfUGEH_(WjC~}=>BLL%zze2u()-VMyGULJY{fCtU1iUTdQ~{B5n7DUuZR5d= z#9n8B?O5o!<&f>a=nJpb+0lJrYFeqe&1|$BRzGNCk{O5~o)cQDhW}fVC%gNXzsNg% zqxZZ2I>~)chuN?LXv}#6ygdhsDCf%Zm7E#~%MM>H6oG7RUVV7kr*jh!7lKoKZhL3o z9oA3!*>yB3Pr#zGkMsO=#UTfVMU7v0Jz}8hI+e1JKIjvJa@$P zYd+6+l2^Lo8jTNekgGyUm2ZxfC1+P=zDvX;)&QFZ7W7dTy3EkijoYF?ba0E(?Em5FFe-fMGD zN>gp7^g3Wa^*r{LxfxaTskfS#(p&APP|vYrbOf4VrXQyX{Uei-8sZ1#AOFKb7?L|V zmsg`dyjs0Q{EO;v)(H>vlSUfF!)Viajqp0x)3~9@Glpg8Z2=O46;AB!*eBW2|D+9i42U`AvuR`k*}@0r$%r&CP^O<~}F~6t{jW z+7T$i6|@71Fp(7?2u)ahm1v_O`V=NbpBlw**0Nb}7N=m4yVa;MY#0)8wM2=$S z;`_p$)AUKy!$(ut8D^?1pceHY`mLt2X7%I*_hhZjr$0F(Z|=iah6sfDpMm^mGDxkaJZ4>srJ(* zp@l~{b7{KFF7>pEUMQ|BOl;65h2X(N;r2UWb7nc$+dL>0kl@t(3nsCufGFvp8!)%S z`P;Mb{WG)h+xcNVJ4run+YrM3s#6yKDNziviy}n~()cdh520Yc&?v6rgey{1wz6=W zh54whfI!D5DSHU>Ctym^a=2$4;OgD3H{6Vcq>TGwTMF({$850;Pe)jH-`=>iF+DXS zv%u_|+_h!QiR?OZ9zE+|ENGurnivWUWzO}%aOT$+CawVW}GA5g(G)%wo-Cf#b`~q>T&{sU{<1gRK-t56v*+!Ikzd zev@~tmc7r#QF7A@1!g*fHBp&*ZHaK?kYU{iM9KGoT3_YZ0-dV>H(er_K7$@H%rd~0 zwM`|W67Om^c7-b{0!*8u3NOs%S&~y1q|g0B|5;iRsuCYzwWDb5SaFM3+rsEDcXi&l zD1)MJ&MZ#2CMAg+r+0X$8}%=T6BoG+`4=zAoB^5OKp2C9$wh5KRLR9|O4+C0al~+8 z!$OJ*t&$4fBUPdPBuSQn z5uZ*3%1C}e;*LNwY;2eXm*@neJx9roWGfa7s%bqG)P_`$IhhhyC7RJVXG?6b?R-9% zd4-c%~@=TcpcOQwKRc4thNxz(aP6P4g2`yL2PaA(aUqcrH$>ef3dz@@#0EQO@uvL(&|aBn6bX*|4Bu)$>{__YbMBO4W}mXvMi-bFo$oDTAjV1zYcqeam8O08;3Vn z{@Lpd7g^|CWrGQbN*ueXS6R&lwd8$sF;I7&irgx%OjD_Zx(4L~5sgGS8mX%rkD=_~ zF#Ty1cbbdOk)Xdm*V~%$qS?G5t!KYJ-v<{%)Q;2gP}+wN45p2iMHs&}&Tj!jbhW7j z53VG>0ZEcG3se0EnGu4hV7835)^Z6?*-gN!1p_8aQEH5=9{U$Hd&$0tS(mR?tV=l3|zd(OFiZ@(Y1b?%XDNw(US!PvqU zc5gwqBuloLs;LY$Q7WpMKzX_~Q`550kVKZ+4;h=7v5jpo;DBHp@FW5Z$b$eUh+qbX zh=2zdn6e219FP-JHnBW$B?iy$|6lw2&Ufy;t?u?Cm6=Mn)aRV<+mE%^Ua!6OT6?#v z_{(W6p>K=yES*crvik1y!9R?1NyXCxGF?9ti;V=|Xy!LQPLP8qG!x67&l|BRZF^#Nj2Bo-Fk0%lg~u%P*_;dHRGXBFg#tFmWFHPtILXUxaA z8qJ4|r;)Z_CU5mRG>}1EqK8Jx)9Wv}^7>-!8_T1;YWVcaUv%VH|FWmOc)qw|YdTxs zv$45%-~NLKZcfb*le3qp8n?EKN`)CluYEnO#0UZLyT=$*G^CZu zH>;S%CJpfQG5`BJIALJ2H5yTK@ro$(o`$Jn53wT$qv7@IOP115S@X+LA|RUG1rcC> zi&uzSx)aeqBpYAtJt8^5=ll2+cfY>|pFC=Zqye9t-8_A{E67Qu@yrjTFMfPq>_;== z4|&9=-~xo-YfFK3hlE1Y3iN`Kcs`cm$=S(_Fdm#(!2Ft8XktUSJ2^Xrr}PO$GSKRF z)NQS6fV;K%Eo`J5FU}z=ZcyJJ!Y03g7#J1Zy_;{z-Kea(I!xfo8VX7$gU#eabUW`< zgHs5AeK7Ab3CA~sh^v_g?>X~L3r0TL*#bL^-V=sO{u)jc6u&MWa_6D|8163>$Yf-^ zwqyyA=OYR|*(|v4wY*-LLa0xL+<<6__<=2}W{>T&l_VG80&8-cz25VCPK#$~N*hf4 zV>9_)82IEYX)azblZDUMu^<+N-=)d*H}HiWgs&zUk&ji-3DHubo0i1<=I^M=H>$F# zAZ@6;L6||4h97yI0o8dVfCW1@K0wfFWr4Cw3f$GGM1CG zmx?gg=DlVR55VjX!oJWSZiJ0bafFP>2-2803=e%@Ec;?F6f9JQK^xKyN zi++>_l@a+wHD!CMNPqot!kzsPrsJWU{^<>$=sf&XH67^TcgMrnjriXD!yfK;<{uUZ zKb(KaVovYPKRhW9#gCTDuG6f%4J=$YePR3Xxy{4prk`I+Kk?_i^u{L$@Zfme!-pykI*?1cqSVl8b~FtDEb493}C>co7~8753gd(oDPRtbh>qbHu(v4f~R6Nz_hT zk3i!u>PqBK6R7ecp;qsNuIURzMOj+-Ia9z}P!0J%;eS6>LEFW~Ur_h?dZ&@P=ttpt zzS2O9Bwa1N*H8b-``kR^-g(L{|< zD@HfZEl99WusURXNKU9-v-0B@QZDn!=F3Ml*crReD)Y8-bDf15-@cZTYx?Y#XpRFh ztYpmZ5Z3d(I;Bq<_j*a^JH+jcm~Li#b@mtv!}QEuALBVWqYF_VT5@*0I$`Qr?2DP( zmuC)&+BS2jAjQtel@SyP5ot=dyi>l>P~=8;)-Jk^LZ%rv4W572^!B_n#vo_unaded z;jih0J-?l>Ydv8*rizJT`wxwy6cU_HAR3rH1lGYIYC?`{&)wY%0?EINM>CYZ*K5jA zkvt7*ZO2Vr^a}HNyx5Y4K?!IjNvrHjLDXVVRo#3hU$vM({*u@MW68e4X1NC0WGZPj zgxKXTxxGyl?*OjGcH7NHc!4xJ%nli;cw@eKxhmU7@7)z64L#>_Pv&Gu>pMRQeRp#9 z9JAGjr0(>0Hv{Sghy!df{H|F(U8SyN&0KX}YX+Wh8NA;N-%)bU#pvVNXJP*RONN1B zW;f9gZ-nowrq64;xu)sHU-b5xU1q}q1N(l2+Wt#DdyT6L=C0GZ(9I&u1 zz7nu@4)&SM6Kf4$(@JvL$=Nf&+3G3^()}3Df|Ijn37rl5O|R|DO=n4AI{O%S*^pKvehyR(OuI>kT{r}I0ray74SlM8#>O(hX1acSO$GEk z58x9k1K7m?Xuu4PU4r?wSNfMv(puU~Ac#QFWBhyBsbkp1%qhsZT|Bllj`3jn=QMnc z>`-icR(8O%yCGxIE9ohI*j z+StS*bwZ4%{S$R6?@<|pCHX`?Jv!|XB1KNlF3;UeyvglfT}Fo2ESeK7 z04I;iX(+?jma{{Xx%?anhqS~cCfj0mC>`e4RYrx-a*Q52RKyYsR>wl5rTKi#{*5vg zj1QK0;~EqZj3~6?!1Z!4W=U0?L5%{33RPKtJQ~C%N%G3f(ltu-G`>tsk6T6g>sv|( z6J~FZ7oK#<81k$fxzMc0neCP}t|L>Cnf)KB*1Y6a4ut+^g* z1twx;2?i%n_2Q?wnVaWVP!PqonoxL8QF?i_t6`f)g+6*AG%DB{ov34S#hg5Y5$#z-kj$x zkg%7AK?P6wzLON&C;dBBF;{nf!#;L($YI;ZfcL{MN3dV^ZO!Tv*szp)Z@DERGE)vbG|c@9)!(J30h2G^~&hwITx_e0!v!(w;(zTznsvC8E34{Cqn8>WH%M2 zwBjX~N|k4Gj?LQOgI4xyQlJj0tHW~x0I_;$y&>6YU?@_Mo9ICt_WYk_J5y_Cy25Z2 z@R8*;qYxxHEf=I=N;n@;zc66D15Gnt{2>0WzN=AbALIY|$H zuuAWL_QrppuFIuWLT6nidARcHgzVl*+XO zA%F*BUN2`Id~0FO@H^O2;FOc|Kq461xx9go*Jl;5n6;@)saB(fpMoBw#Ara$s3&RU z1tZE8^lLK-eh=*=E@8IJ{ul~(o=(1<)6*&eA%9SoD>M1MFd&?QvLwFW+ramge)Z=g zBI`GvmHy-hBO)suWHv{Wbbt?tW6lQ!@gLberaiVT*zJngO;F2E)JdTU{Q|cRc~kHT zu!$dqlhO}}r>V)8gx{Dx@5x27(ZR&Mko;}8H`4uzReu_F-I$b#T2iv5Gl%<=clR*$ ztNY5=utP_n*x<^dI-$QzJo8?rK5@4|t0;d0h?TgeU+HP{@*Zx{@KfU95W-s}R5yY$ zgf4!J7DPBhAR`EbK9ywfCeF^|*fN-VKExvHlN(AfL9ti^WGe=`Lo)^~ zOzzc5RYUD$k_yG=o0L{I-1q{?-iBzH*d3+5%YGZ|Fr^Q+Ri9NAe_Ijt!^Fv0;D_xU znj9uB;~-jGf!7=%M9vnnN6$3#1JIGy{7s~ga{-i(_0gZL(jO2~qgy-_sYMP$6A8EA zrb8~r7$_EwlCaC=e0=;9k9?~Cf&!}uB#zS&63x}++t4SsG8e^GDI5{?fE?a<99G@< z7}bR|u)W4~L0&X->@;?Z8m`kCp%JRHONDtY$*IYOB8aDw7L!D z{LleS*e||>rIRBJD^7s8vY7nbAoh@M<8XZJj}IIYiNlH&dB7nb!bFq(*9D+_ z53C;M95u$?6(*)&<^U!BeXJIpgFu9)baaF$J*s!!#3xQlFTC5ptpHRFV#X(Zn<< zcd2}}MjC+C)d}!Zqz`$L7^v8V5KaKo?iqlQwkg1NONWCMI5zu^9c`<8BR%Y z7_Uzq!#=VVp?DUCAd6K}aw6pL3F?bUL3Wan>yhP%6k#eS`M~-Ak(_G{eB(c{lOHIm zC*PH$%xt>*@EUaimV&wjvgH6GOKGXHBIpL_nI~<*^wKAE06==&ng5W9X4608Rd6G% zlp9|J@4STA6lwM|Jq2BYRh?qy7>*$gyE*Du{KRb^GTw)Ic3_a(b=?EH#=!3>7D_z8GJ?IFRK=e6 z0yAwtWCUs@1zBVWJGLqnf=}o_N=6>H_Ov5PYT+|Xhwo&Lo1jNUCG$pkn)qH6BE&*# z;2~3WD(_URnAx5eE0`*X2ok1|J{H!M6xllwd_$q&&J2H{_AEQmLr7kz`T z*cmAry#(cwjV$^QcE=0LLG{9zrgK(p$OuiD*X~ZCm-P)QdFmq#V!5uuJ<}SKH+k2n z9A_FC6J_Qs?Ztq(*^-IpVSow*&QM2w#wlGgNnZsZIu6TXQ3q**EJc?Ah@;JBnkB`R zDfiy+%}Wn*Eb>B{>{lo@7T$a;tLN9RBgkckoi#$kYoem9?f(KFVP1RIt6_gI)St2* zmOTiP1F>#Wj=y5MOy#!IP$O&F$rBj#e_}B>?Y>E!kmP1=ft_Ul;!!?7(5ji$rYAY_ zJ{WU2A2ti}siRqNhs@OhWwm#t&2-k^-uII_xoNhpg}LU9LKGpGMQb6iyWxrmPvOC5 zu8VcIdF~t*l4d1yYHoXFPqcpg(t=*4{*qYwcZm^$ZluB?JRK zvWk@7f!dtq=i1Pf2smngp<8?4+75xtwKaCu++(!H5(`9vqydbk_*>RIg(4fEv7S7T#b>8-YIT|b=H?Nd5WGP9#(KVR%Nj9 z=q3shsn!FT7wBwoypVM7^cjI6p?Vapb;iqFk$SJ&<3J1l&Xb#FLr7A?R;H}n0f)N9 zdkUZF%ndl9s7*y_O?Z%Gd$czvMQwamkq!Tiy z>1VdiyXazbg%T3z1-PlZA^}g9qCV@svgn|a^sJjmkOI~S!0n4F<(ak5`Woi(&ZugyyrzQZ z036C%*$@mu_MAm3iH<0A$C*wkw*Pc&s+5zrH+f{7Ad2vZgM!M!HV`Vb(zW8XD#R$z zL#Z4vA%{x-=>@s+2ebNt0Cj*e|32I-$#key5_;Q;v z7x-ikx2#Tx+nVE@<1oEgK5EU3^s*v>#x#RshlR$ zDQqn*9P@}!=Iw~yC$?*EU|1elok)lH#kv)L90CwXgy8Zi+9E#W*&}vnS~;7ZSt){$ zd_0$RJi|{PIWDD$PKVw!*7#t#z$unNQef-h3LtG!J`DMY6(k*b@hFCu%vtC_>eTK< zCP*4phd)TsZgF*yEaa^qdh7EkXP8=KBUjzBOG?%;&*)=0I}84n90nlU%@W?Pb-aXM z{70Q+>y;}8f}~L;+mm(>k@5(Fyf=f+2ZNjy9!0#oN3RbRd>EZUKCsJXt&dp4XrWn2 z&(cQAzds&sf7%JdMacE+(ZnOh1Zczv%Lvk495zl23`3AKwW*R(y?` zu?K^>AC#l9yDb5ei|}QXbAy4@T<=y;i8*dz@IEM9GU(mkjX4jflP60~+Y7g*+=)Q> z$*?jLw;oWPy70ZfYKqjC=+QRfgF2Z^bA{$+5;{spI|`G z@FvQ8%r~xB`Rz|};o_&zKi<)mv!U@t+xLh`c6X|T7fq=Mj>UsWs;5Lp7L8glwEohE ze;1!rI81e+=9O9;H6Gn}za;&^^PHM@Q(4{@V@2dOuiyGj>3g^cGv|&+j?j%9%`ERN z8l(KyMRDxj4}5b`yg$v$56p{W@0$EtsjGwK7CwRG+vygr;EDSBd3EC-fAU?Q`@K*9 z!3RIhZ*JJT@$jzr5!IYLJg>ijH1b9N#?SrcNB-qczU2>o z?#beT7uItT`i+0_uiyT;?|rYBasfzeE!Wikug14 zuZvP!Kv97*gJWWI{lrtq$JG;^5Qm9F#7KJZAl{-Ki?6Zl>U}P3&raIh8aL2f+~<6< zzHeFW|l-wnvL*n8XJIUkf3!)2{7mzEw;D2Xfm5J(6jT=9OZTk02q? zwbLnSW%W`3zfUT@7V=dL4)Xt4n#l;2+?3$COi>=IeX(ijYEN46`T87R1%lNgY{pCGt9Tz|IIq~%1?Fb=(vPFVNFQOB0#141T zS@dL8u^LuldG=lK4&!)TR{+uAf+Hp&B(oj3&6by(+%j?~p!MU#Ub4_>JI?w`-z4Yq zy7*mdc0|YHVECpp3*1b&z2IAVByGUzJc6{NJwJ%E19NSHO6*xAV^33#c*FBh&o|Wp z?|8EC9v{2c%X8J&x1XziXg)o;C6iUhKW@-}JwGHrnXMun^Uc<*&IsLxRc}3pZfxf|jO$M(Dl}SsyRJW&{R!z{r;-Dm@y(#Yq`~ruSQ{r*R=Q!{jhL z4U-ZjB{X_KoQB!99e>eW2Y)LtX+D_k>D+^4e5=!PSkryIwvgx)-*S? z$XVF5`BXzzp-8^iIng@&pUKkXtb3?vk9Apb%~;PvH)Wn{?{n47T-WwKLZMjSfCsXK zmRcc0@?0UQY*e3<2@lur*FS_1tvbT+W?AmSz1WE;#fR%0+``fW;jvvj?wM3(MXsB& zNHIT<`fDQ|Ns+EoLt)6DoE>6L=IsN#BUd`04}g|g^Acb+!7FnZl^{RUW5smjOLU>*jiT71t8}em zyv9%^a-7#!Gar0hsZ+}t=18{UR2YygIpYIA0~Bf%?+!6=Yxai zu{K`6$&r$Zp=7A2t47f&0!)v%ChEM(UOLVCo^mX4YilpQH@T&?Az5yZ;s(P-1B}cf zBNO^UtY{qVYH*j_QbHG{OsPwk*P=^s`Dx@M0z+kajis~oCC^^oTxZS^U?*pi;(!&& z7|Zc{E;KJ>p$H2ax>3LJhRujSYb!M)13{=_HTErRN1CUgarBX97|`^OO#r#}pcVa| zcF>q>N~ZAogf!ls`99Dhgs4^T-nJEMR@-jqYl+?EpasFB)ofOIgiqA0T-K|}nn3Wt zuwMHc4`6&M63=C|BW&~F$!benow1D!hqs^)+vKA`9&PS|G-$u1O$%RU%Hx%tBbx zEmdLd12|$0$;JF0B8#_k_Pd;PPTQZy9HTi_d9)O51D@=RZM8WSmx34HJUs_*c1gfs ziv)JHv@@kSzL2Ge)xBrsZYbF|St(s?@& zS@}lE%1!eE+b>1>9uW6nr3lj1rA?#ZV*OOb*(pdX`r$N`PzNkUVmYO!H%M|x9eBNA z8}EADla?OU8I`zM#&$=la3vn~d3Rpv+$_bQ^F3bEWu^Qm3$jxLKIeyBoC?y}pqAR& z1}c(QnyU+HtVp$N)Z+}ZSGF+Q8Bb;^Uk;vpQ;f@L9x=%j@S!?Pk~UJhlccE3sjp~Vao7}=UPx}_f&d0p%iJ- z?j0@?`b=4l%&bpVvB`i3zDAN!8CREB)jq~6*`L+r<`O&jl<+BXjxt_A8g;SJqDp_Q zGwe9{?N%fYJ8s$nr-7^4RDBsFfa_2Y+j#JX0Pn6uYw|JG%Bqxm3*OTeXzE4FKb}Ej zweBm>qFyDg^us<+u68HkJ?qI;EoUJFT7oYKlf&kaAI&fdwo-(ndh#QcZXl(wAO|4) zG?fO-Uzz9q)5kH8)p?Hy5j1O`ua$i=1LzVixgCt~;ai{vUJ~I+<+1$VHI;Ge$uFrj z+wA}{>_}!X$EE0&XO$v>?po%nu;8BZI?IhRf3g~*H6$6WCCiBjeTl%K92>$PFOBKUb_N0eOg<&Nn3wwHwIi!e-W)(QB$ckJspmOD*`ll z#N$n@1tVngm|g{?!9cq9f&JfMyZ<`^4R(&Zh7FCly8!&sknAcL)DwwKsEu zeZz9^7k<}HPvFeE+N0RjHt;8)s%h*<=HZ-x6+LhrRs~txtpw4r|J!jZjR}%MrhMSJ z*{QTEqy!}F0_pg8AsUtx#DyO?>~<=T5@$%_-^M@!ukt8K^+77X164d0R{451Ta_?{ zC6zr(Dx`d=zBCIDUyFT1ZcBbEnVBDgJuE37usuvyog(OTb<2Ao9Ib_y%J{;>S|FYd zv&#+O{0di-^@;*APSKcNG+w7&Ug$bDTt^O7Xu?LKQcjnUz(Iy!X1y_@Hq0I+G(@v9 zF~K>!MHr8E=Y4G%C&zo=Lq-iWwB~(}?{&DvS}b{qFUKo`F@!|0iHYe8V{6W1b|Q$V zp-U!YNtaj>lwp-9Q4-V_dpz5yFU^@ycC|g*=KB&n$qo@8>%7c%_y14pa+t+|WBOyp z;?jjfJ~tc5u7)%)k~zGm?!zlNrAj{#8+{}z^u7g9k{{(l0$LGwxH{wZIqgk>qKrSi zWQU$cK@dm)h0Wd+J$Z-o(`=LECfY43Qb@pZuaZAmm93!EBwEtjRIr&KYBs189|+TK z%Rm`=O5XdN*os1a$F$J#2oSAxo2@7eRBuIL%(4{~IVuj-Y9}s6tp0TlPm6^1gl>_Q z6f7hoY-q1P(l7!SIS>_}y>MYm|I_tJ5TcX21NlX24{c$jpRDmWYRI`}TgCCKMo<&K z3U4V}0TJJu{9SL9fjE{DY{pv;k#t{z&a#$XtkTRn+A%WdgbGUx!KLyf8=Ufv0)v36 z{5(fuDt#kb6t#O#Pp3V)2%9dl!aiA61NMM;H1{nw7`rkkNNXUhwLGIl5T69fbd#2F zG(qlCnn+UpWIic_WulGG>I9RC0SU~YN;(az2U5W4TQC5`EJ)VEmv9?ZY8q1JL)@g) zQ%o?r`<4ksg9CLNN1#M4~4>anPW`{bAcR{X7{Zseec>No<%Id`G-?{e$0Casg=(B5r<`dqYdHQ)p zapQGwoR@Fd61%2n_`%i72Uq&ReEHxCKRCR6u<(P8<%2Ch7&Q+-0i8tq9`d|g9W>U%Lk>l-)U`~U=k1$N^G533swyqOv6-#C9WB_GfX^Hs(m zsEdd==H62lX(9+X?HNM!06dxe#=+`Hy9K#%WuZyX6xzx;$TE8Y+er{ht1Z^Nt3PIQ zM&^&6>*RS!XXO?07+QWt3zEZZ*UMX#v z(HsRGzzpYm^Nl5Ms25Xq5jb4tGd8q`XI@5We}9>7H$hLp&kD?<*-_#!$#W%l4CEe0 zsYi%U*w&jcd4`(OIM}B1y}HXyP;mpFtO!A)gSiFW7O(THc_U#^pYR}5f&AOM5$7%^ z8+J!X%LXSx;cm9yTVin`4n?buVgVyL<=8B`Z5we=8}bRJ74J@Qc;GOX=iF{8tk%<8 z`zj{NxWfwDbG*<6UqChD@jADvo|N3aP5w);z8|{4yCd;H6Z7>jw0pAjBM7cS_EKgn z`0Q-~nOa8dks9Y8lo9Hb6Me>H{!PiX6*%-RU$fWm&9ed3+DbBv>;uNYVKgSIZ~>ak z7!E;^@B;9TnI{bo0FtHXrpBn`Pld0?VWUhA$(BXNAA7!{PSGHk-I2Pz4^~Qe^`pEdx@?B(d5eh|3o@5yC%wi}^0WZ5< zL0od@0!{N*J7PdB8a-aThlm0$(VPuDZOqKw^Zs`NXg`o8D;vu|8fGy7S-5AuljfOk z?v{Lyj_rwyIIC2lO;SyfBH^!lPn~RYRcZc8+z?Hnr@eB9?wWHVkSrn&y}{AXuP*OG zPqMb5t#@jBiPHVMqwu@2FJ)-B9zuXX^fcv^au@MEz_;c*n+kk774AwncetY>Vqwe$vS z-d*vXnE4xLe)i|winM=GnUW!iAq>D1b|x$z?6g?Du?JnEj6p@D*)kFsf`6-`O+s6?E}tI?0$LnH;#~fd ziz8tUtfOxHSGGYeshV$7ekNPt4Ci+8b`lI4LNe#v>PK7e>neX*g zt*9?RixQYxP%Yz}A9xwr!p&&rhoVKQeqJKTXru|X6)trqjE6zJe!CON)2Ma{NcOZm zQa5=8d0S{-WE0ZMJL`;6s7bqkzVjWEM;F0!mWQ}+6AZy^SlIIL1;NY2M(UO!r{(XM z;Nw8TnJrt%PIdDK7`AXW=y0?5*mQ6^5G=|$j&499X{ds6CN z)=_k+3DjgRhFevTxmKD7o2Uy)hb_+SPqYheyv?CDg?S=%<&5D?C6KuPAsWL(r(x5B zZ+Vinh~CqlB;HPzz}7;FlH5S-MO~KT1_Z$kJW(A}GLFTO$%VnG-^!p4E9@0BC`z$T zAXC>*Xc+9uv;BMjVPE}O-1lA6)wmNSiNaBj_^w_MLB76U{z&g283p{7^$jP_}Zn9Ta)5s-trPhFw5x}F3AMNfGLd-dPw)l#4;Gxa-i7un{ao^jnL2G>L z(#7$YE{UZG_ahCr3u@nvmKW5>Vo(8M(`%2T4R$yooiV{EDWQadhpIG=lZu;85J8hO z>-}m{PZ$UEV4q}vG#U1_2{laIfylnQMs~Y4zx2gxaOD}KE40)JZ~ZBJjOqp#g*KtV zc`xq-u$LeszFRS@pXHO!Ddo;P6w7DYjzGR=;6W$39i9HzKpoWb?Dhpilg~;s%6Lj#hv8knFleCswcoK)6$4Bpv~$X90P5|TpJfM6x|QF$7ZE!;dSNg=V6$APKo zfF!Vkm_G6JP)byEqQw&VM-;G+DgD5F7vHi(W4u=@MKhPnPXs5P(>MQsYIk> z4%xI=1IgdE3`nSV?A4JfC;&zdL2!-{#x@-xLyX8PlBZLfG`L7&zbEz%hjOH_^(1x} zDt|Qx^=WRsEhYP|)4VKRUPR?mn`C{+-VLyy=b~~S;oefQ<<$l;dX;cj{B!*RY869v zcF1)7xkjRLeB$To?vTl7=z@YHGNvo_pv8n40RbLm%(;mqS1~72@wmVGcvmvOh0b`#4(JSnW~`x$>V(P)jZkyty)JexftIeYk**N`$&)pCbGgd}1gfq2u;b1o z8-xLSs-;ZbE#3k6}`_vn6+C=3_1TOt<@q)vWdE6%9yaa)m z$ca$zsm%SCYJ%TQR(YwcawqaDtsJWd2^nb=Uo6R>ja?YB4(Q#CEpL_u-7aEIA;041 zju2ZCy1oHhdmko<&NL(4&2!j5qAer^Fd()L8TAoo$ zb;3ghz>jLh)8f%c5FVYMy_7jrYNX41mZSGE9okP(Y0g%Ay*NYVXkcFrOE)`v%Wk&j&mrOAkssp#YY7ou2qJ zBBHT47%3FO`mvwhO7r5NlKXaT2$JMlq!&kG0dz#m_lq+sPS;2{aI7DY<_Nd`Gv<*0_nqWAwEtk|T)Tp zbkmTg(P~XJ^utvLQA-G0I;w{CaBPDw9p#!?VBSgBf4%J8g7ycE5$z9bBf1Cvyk!6v z{2>?I+F9^>w-x+h7v#q7?Jd4*Sy1LVneHyR3DIZ5PdAuK|Dm4;c|!%eVQ2?=PyQBC zfendv=D_OYOuGDkU0*B89(QW!yunb&f64jED?~MOBdJF9Yy+47?T_U@5IF5 z>3uIob5T{~;Z88AtMnj+Ahe{R!cP?kbmk70OuYiDc^X)e6AQTi$JEKz61!^VE0Pnm zOGHrmakYEZSFzn&iuAvOK{91BC1gmeq6ogY>?THDdX_A^yE7g$RE8wGP0o&5jNOx{ zY*EX&xxJajXy>BE;&&9wHq=r;Rrjg@3XxK#AEwSdIG(SakI7=Gi45z`om+ z8_}qWVfyJ(3gW6&1<`f|QG~>+(@#FJDmt&~g8i&480+*?%VJ)Hrj>HKg0D=t$}S!~ z7=2o8{vSrqwUgHf+|4ey4X|Yiu<0K!b<(P``X|d5D|2^A%IeD|pNCrNkVe{te157e z@RgCzQV>I{U70?EsDApA1o3&BTBoUhbV*IUyy)_+tPZHP=n^q{geR;R1vOI|%B!JT z>6%7&b(PI7WBi#*0_-Wr_|PRa_1_mu`P53o+C;g^ta}=5c+sNv@2;3gs|5f4C0+l> z(iXuw``P7-pIE-QMC|#Im zwa)x97n)091VX#A`bv1hP1xCwtw9m_VrBRFEw726OF8BK7p5&#h&r7 z91bhT1P|+8-=2a!_-<2o%_p+^*)I7E(z9v&m*qooP!;>=Tvx!O59$$qm~XHjCOw}I zR@E=y!A=ZY|-9<`wC5FS#vmupG!epvfBzicW1%tDA?Ok@Hz{V4_cUfUFZAr z5F}Rx1(oRhMu>I^XK4nUE9t&j5eO}m7Y^V*o!1ttLO!l^_~GiFNC9 z+EA_-v&Sdz#rw7!K^;1?zJ~Y9+W?v#fhl+ZZqV-!n+P88j^>15-1aXSm~ZHOe}3ot z3;1sHKIkUoc6XuI;KeJwPQ|a+diU#*1^-MO+`(4{=*#zu{Y}{hdA72cKA`mDOT+l? zb9+-E@H9$1DSVY%0&3grE;{yIlBq~LU6FbKk@_o_BvS9B`z5sn_He(%YWG;s*mn2; zxnujGKhk~==Yp=8Uo3s_7W~N;6#-5hc|ON0!`itPq4yV+m|O7=i#mOwJexl2TdY~u zvm?(u|9u~ym1;sUBysTEQReYnriwE6Mj3YgbD75}^Jp$pMw!<{8HIGXokvsg3W+X} zZfp@a<`pLuv*c4{CLbwntuk~@w@1FDFBJ-XE$0zQW77Q6p8P1i^lUm;-u0rQRDm?O z2LSk0B)PDt`lWh%K^Tb_(|Z_=3O3c+cI-h`&0piri+J6`R|kvJvxFYyr9~p;}~r?o;~|W58*WSbCS8a!LvI2$X@}R+}9*0)d26 zhd`&Sz(f`+n;A60xkXTnw(mtr7-nK6HoZ=#4;Snf3Ww}ToEEMDjqm-_=}CT<{L)s2 z<`F)`&3BUT_ug{Xtkzy!u8(8kOf-?JITghXa#3e)AShrtj-g^IHI6w^VK<${j&0hD z94EoR(V(9vRLRW^1E2;}z+hkeSkwH*hc*pj+epNuTwqWP_tsfmok-=pAkCCE`}ZW~ zjfey7EsyS5Ow!}$_6zT+fA?MK{r}Dvlb`J(?;sEfMS`B7A}YMDsW4w_tIWr$G&H)8 z<{I(qGJdJHM+?qDheu5&&~mH{Gxn2+x6Ct5)EtqI=^ST+x;|#dr`hO{uaDce6fn_C zkMe`NJmU*jd&ZZ?_2pN2#kE)Qh1;;=%SZL)pYw`KhvSQ`|MQa%o8y0tcQ^3lLwsIO zs6V>8nB1y8D!h-77)bk0!k z)rFJ+BcQaxrWIVAWdQT7X}I`|KAx&zs_#jco%I~er9Y+ex(V~>)U}PRBR!e(w>{<>Xm!>wCOvt+>3L9u64VlWQf1lv_ydTUlQyr*T zY=x*;LaG?dftZipcZXGxp_EbX+E5gTj5+f%qEDW30J+?Jcr%1C5TBd2n^DmQL3o^N zeU!T<+$0f{8eW56l&!{v7aB0hdWW-sxSDPoMZZ+iR<`$gqUXuz@YkqDea^rHC0 zkW~_vy$hjj!#!Mr@Bmlz$=|o}yPK1JfX8oI&d>hu&NJF{Ii9_mZs~>447BQ;c&h^M zEn9!;hsvk7)Iy!+XM~&d$Hf`NEvBQl9Mk8bKB=JM8i**M^USstxart}=vAafl`4!i z;f108kj{Wl_r^{$wUr?wY~QRyw=22D@7By6~I#OgVaa6)6L-S^o?hA0ZwfunD^)?-H%45DN7f=eCe-fK`60pqxz0> zQVwNhx^k$C5SwcHT1f#Mi5+%h3jgG)Em4o?HcNGM{B#v8x4 zIr(4-iU_fJ5c02yv4LMX`B)v0MMIhrHrd8IEzEd6rIlJCt7=KHCv|!&KbSEenqYq` zVwCDq??^zoSZxNC>H8kokKAE!h032G7>qpaNqW^*VacTakP%;agAerx2~}VmE(*z| zY>a*Q0lyViA1oE>^s9X&4$yOx%>>{nC?NeoELEUh$R>L9#A2HIcal>|xM;W}GCFVq z-+gAGT13^6F|B_XnvO2n_$kU;>HZ@E2{QMoe?noUI#!5%p^-`yG`krNfwC1L#3i7>7-?{8a zgVfP?I&6hdZFRv}zE04O(=BQ>xc?Lh7i1P6OMiqE{#B&$kz08(qDfLyyD;mJ7IFpD zw^4a!UT|!mOI+*_`t1-zh8n~>mV-dj0-RB`Fj6_4FFHy;(kX?@lfba~S_D_&oYA_j z16BI*Zs8tF2nvHeh3e(;fRL>M6$Mdr&;@BX=xUIKM$J@>!7e1hKE~OxG{!ZR4oOjP zs^~k;o$H|~WD5nzWNspq6mnTFkmwaUN^DA9U;RRG7I;gd2a+El;eX31{n@4=hO~lu z=FSx{hodI&A6oXA{fG)o1ZI)`x1@iEa20U8gKt{vwzW zge9alak(rz2Ss|*f3lhXH!ng1_hpy@aHL~(92^JSMK@?=aRHL%sQUG8Va@);Ju zzx@A+1@QK57Qp4gN(}zjHWvj#ph&O7Tsma`L^1ibz3nvs<`0$%D$XL|Xxhte2gK~> zCoc4_y1_(j4Kbpyuc!`;*7s~2sC(0*JfJ_bVQ=r|-p$R;0|)x!wF3tRlLHtNs)}9a z8Tw;|*KvZ(>Jwfq4ZzufB`g%|b$TTQ6HokFUG?;*?3GX&*FK*~y19^VPh+tld&ji* zG!_JMaCm_3L3vSUFfo^w%=S_3KeIk63CyeNx}c>Fn18k@hKc2zD0@rRZ3Y|Lu~M_8 zOt}DlTf>W<_BYmsfNanU^dgXXDWJPsJ^b!Ki}ZAIO(E>!?sV=g=U&@8JF6w0!oY3n zx?gT90v0)TL;BZz&nPhabt9}d6b7ZS#NGKmVyabA8u@Hh&F=`W0jh&%>8)Hnyy&+^$dP- z70;;|Sza0GiV|K@+JTi{U`Oi=Shrm^fzE-c`sfnU-KlV>6&^~k2HIgdD2>SdD3f$w z1R`KEXeK1dAD0V{^|-Eo$d5j%M`ZP3&gBYlUHkTvu23bms+tNPiwZtaHG1H(kdVXl z@PsSKQQubhL{uoHupv6q{NPtuC$f;kr(T^%We%%nV$@Yan72 z$KxJ<^{-e(o`43<80(0!M#2rieKKr!duitgaYii5{!WZg z&IragXvQZNhHcY+?=q+RwBvjyPc+XBGb8E5ywt-~(B;D`Gey?I5|5rKCXeWorj!SS z??fh{o2YNzK6m{cb4MsrrwNZ!$1h>Rx{2P++h>#UFQM>kvS#Ttk%updq{o4Um}Mw< zR~N;SkQZG|(9HCRnH`NrL;mNhCwR=aQ9bDM0y{)AEqw!#HB>D}ihpLL;Qb8m29$xj z=oa7mpD=a0vm2#7lu|Dns&R?&OQq)JYu=cpP2$5TK-0s#F)}Gkd!Px;X$XPl}kL} zqKuyz4=fBkF4rMZ&A70xR-M2F)uT?vh0>`sHrFx!z{j*H6!<8bpT>tw?nXTs3;m`# zK^F{JYPO&D$wCKNSqsc5>4&Tv+J~1n52dY|l27MhAlZ)NKynbQq@B+DE$(F_=@#4+`E5gS6|-Q*1YsP% z!s-%FyL|ACCi`{jjXqhvjk)ojN5k9@f70A!5o0y#>}`y8K%-DN`N*Kn z(PagnwD;MDyaYXm1aFX6ZI{||2{&qqmjf%N-jL`EES_|qrWRKXktjgkGBG!ZFQr>n zO%hEm5B?Mj6XgSekoK~C)=ZW|Y9EX$BqquSN^3+}D?PJf3fZYWzh0wqmxBu1&%-|v zPib(w$T||rNvdgJ{nRL@p?QaKigzqLf+{4}TX|wWjgwEzo2}f5AxeO^WgD%;B%*!14sZb(DesaYydzNZIEK}x;KhEOAFx_DlG2jknc0^GD8BX8XAo5uW4AM3{*JpB}o zLxyo*Y}|2^p&D2+)=o=8W`k`$?P4=C-iTPLgq?PSj07}%^uScLrc$t$Xb)11PBUwP z8l+v<;zL;bxEjY&fQKEUB=&Eur&~UU(tnDi)8DKE#b=(~Q_J3$c3#Wa4M#P0Ui%_A zN_JlRsNtx_&TEGdqmrH1mdzZM?K}iV*s+~SyZW`$XlK&tSa`Pi$6JxxPY-7dEFgHA8- z4;ht_o^;fQEE~ zgDV8K_jcu1rXkjmS$;LE29HVdNds=iS8b;yX`e%k@CX5ZNAzdJ|LlQDTyc>Pynbr7 zm+s3YlN|19pCF=I*FPYmZZR@kHi+oZ4kF?@3Gu!4ju7F(F|LEVP|-noYKJpjGSJMJ zO^^MIYS@fQ=s^s%OVf@{6|4+8>(!&utGb^^!_x7E#%j#l;qEl#c{?mn&G*~p>`-?K z@|+zKsJ2kH&DX)yH+Q(RJYU?4B%beZM>*YxzRAOECUJA=RncI9xGU~7c_Pmvb-kRt zx_5+`GkJRUxPmN@ygE$dy&Yy=2YU(+G!>dD?C^FwR2FGs08b-c$mpS&#u%=9Xof56 zEweo7w4y67Zlz`!wq^;1junR2hCRLZPz_;7MYXqQ1Yq8A&zM)mvKi0l?tlusY@xln zWFDk3A1=+Y`~-R2A(e*wQP5LP73P2bkgTg1Sk@6lEa`Ry$#4!J%`&w4Y0}pv#)PPx zmew4J0oI$>S&BA4^O^zuAzPNwavtF=tj==Vfx1ESvyq{c#ROf~Tb7(T%CH3RR*_8rEsdzT93Yps#?MS03NmBKSLn1U6NrFz z`52W9L&IVnROoyVrdLB`j%{Df8vBYW-D$%w zg1c!@maKfWtAU4+8-X=2lnOpDC=6oDCQZqy`^XTPA&emR5cZKFTgBO5vmffyhoD4F z(;5V)9Tw(GfhzQ*-M^kalN`K7SRq|u3eDW(RtXFs7iDPuvIXHdda9L8qvRfN%S|+| zDn?>HphYOYl%j+V1Z~O3(D2;qy&%t1J`_0HQ8Ly_y5)miD1W@pfngl=g1`{9S~zT@ zZ6POU*%Q5umNmAZU9nM2L&b zSL_}tMx>cU%Uz7jwO+5kravS8?-gr>PPmy9$$L)9 zjTioz`3;I|_$Oqn8eu6b%VGC+f)B;FZYT4h_%`#^N;@_vcEDoZ6a|TV!@U!&b-0v( zw_=KEsX$JSTkObltw1D@3@FQpk~`ruF4SBYT~XdtFC_T|e5uE#aPzIGTyx9Pg%V(l z2`$r0PH}rCGQLg)A+$J3#3F4Y!b)R0inN2*d7Agn#XgA@MW!m$hagla9y&~xmQSI` z7gftWwRAu$_)y{`>*atAUlP>7vI=~~^2Yua)e0|nk2Zjufl;yE_&0Lv=N6bqd)Hr+ zyYXg3jIt#!0)6D6AFe>cuk`nqkbpq2#L7^R$n}q7!u@BO=ESvtkrmH0l(lq*+@}x* z0=V@iNHH@PKFCHo-NkT`wrisxFB%kGJEf^Dh8q-QM{6P7HE&3NW8M=U2ZdBx%t8Dz z-oRSV;;oVHSv51E9VT0!*sqDS;*+Vf&8E&eHe2hx^m`b@WW6-4TW_UAjXfPr{Q$Q0 zPTI^v*Avn$+D5>O>V#G~DQTD&c{`=El3ww$L0?8)v%S+2qOoUhj!cWrBd zv8rpMXVC!i7}3&}y^XWO@PcV}Q)lh5ZETI{#ePM&gS1r7r-L-h*KMQIHbo21hqrB0 zXzDv7d&=c&+ei%R;+C%^qHjeQAn+@8Z6gdTC30fniZTp2nJP#t^F}ErW8TQj zo)?M{q>yL*`lDP%!eA-z{v2vXc1{`E-op>`d${|t%L%C#D= z>6tW8R5Oty7%xapV(T=6U{vM@B+08UzRhU@;t4^Ii58K=adCpGiRKl+v1elCu0BGB zNu0&bUJikJ*Fd4WrjFnmomRd3!k$5`@I=S1or~#4X&<&A-jJHVl5~VP%5L9AJUdx~ zW1>(3xxyv!hI&AaZX=_o=8Y`;$jxM(({cxsR_&O!p>jLdB=^cu$)BD69SjZ2LqX7y zhhrE79*9Q`gTPE#gyk36Y=`yRvW^yNjJ6JKY#$##$ zis6N0M~g(}UsMXY1eNwYUh$(j(F+ zhGy)rRE=0-`0fa43Bo1a!^Ugj^P=-JSu_=R7Q#Qdm(J`+q(R? z_VP0_Wo!wYx^{sm=AzrUWw6ekAkG}=(HOsWUnsOR0AzyM06;9+?%$^QF{(rJqh)RR zx11H!AtYGk)BZr&?`S-sC5D;-j@d`yg0`fQwBkns#)B2skxw1~kqg=6;~ucq;6dfKqE&yYdNTL_{%Dt3t~@Vbhu^$Di@s34Jg4Qwq1WJ|mq zb4#(8Lfc}H4Y7d+hNoS2v35w))hK&-FOR>m`y>#v5O?P*;oa2YI5X|M8-MZ3GA)~B zSZ^)zL*oY&pgOy7_{~z`=B4L1xV;Rhdge*U*2S>iRz;W=al%%3YqptjvR7tfVmlrbC9xvVg$sA(dIuzV!frOh9=%M{>4( z8zh)bkmYu|wmO%@F?nF*H%dWGk{&N zX|>CP-%|Kuu+jnG9E8wgUXOJ)%3VSM?kdr&y!?v*iDIk&~^4UC^@)IdEuAbVM~67Ue(*Ek+6SC6s6`g%S&r z6_offA;B%wvN`?G0)w)biibgB%MBZAm!WI@9gQR3-J|E`Pl@D|#7_rrI%eCkgPq%L zl}6@O0p*H%kOVb=`PQ7CG$Ie-n7ML{rR`N92-5Yoh?j8jd0`O&9iB1;PrlV;xmDFC z0H+(pz(OT*)Y6exrtd!Y1xWuM-4O49W#*Wqqx8g&IyP1L=9*IhHhCf0HEvAsw5CB7 z4n*n@+Ss%b0J>^9`Nuk0S{S2pAA6@H)d z)|0?M1zvJJOGBjXV8+Np>9E(_!ic01j9>;{mA{c~Tf|?QZp8x8V`_^VenQ425wv_H zUm${wdb+qJk6TUAVOWQ5NLmo#k(-`%n-+%{TW!;DRy56>Vb+o7ZCVYf>5v4s;aA9Q zDOYNWiqqRl8&=$W#epC^P|F??iDP+|ur;PcBT{b6U5!|U_P_VAIYkT=1T)unDI$*6 z4!XcYq~T0YJ1c8@Pjvy8wmnI5d4vH~eg!U++bHLj92tsrf1`vsU_jy(eEVX|c?KZY zH4jPYvRbk}s`MO+=C-sud4n(gbh=I+dL4P7)LXIK7Mv$qmv{EXjB6r4pR3D=qdK%t zclv7=+@ew&_4*5o_7AZ$`cwLkzwY`ECvx%!j7Zq^?!GHJ;)W;=Kz^aqmGxM^e!n;~ zS%S$LTmZ)1ZC>4$WOz@0w=4oIgC_QueyU+Yj24hnrY9wk(hcb)iP>VPVC&C|Q^#oT z(|kzI@-Y3eJx;Fh7y6nwL&?ZZpVd!88I>ss`4;Ifmo+}$e67-FTzL_dYj@sMF5Q%Y zh;lxTMxE5@b4p$n3CfZUOaE?Y z@pEteftQ}0K{$_kX@2g}kuNOadIGr;25Agt#1NR3uh80ooPXdz-Rle-7(k2sEW)9V z)?GqDD+o)fV)CIby0;N%MBj2}D}j15VG(Bs%L zwtw2=Jb0)2OjQ(Ml}HloSsikKJm;l{8q0RJ8eEajW6@*`}C9Z>0c{!!EMUO z2g8yjfX&iD;zVFG+ghFzZ>{y+$4pS@0}4sq^b+(50rt{w#T%UbdLt?D=}elB`HceQ z3X&g7+U3rr+#QTJc~gn86T7{|m2|2Iy{UAk2H)pi1x9TA4_NFsK}zF5lTwBHfW%-1L>5@e zP^ACz48pwkO0vl6R{nr5C`Nc{C9FJ}ndPZy`qGB(Fp=&3=$^AGU2<{^=c|a2P^yY4 zV!I6y;qt87v`Ivj&u@NV+%m7$`Y9V(t8sRHQq9-3Ynhm4Us3%!iL+zY)Td+$k5u-ApD2nUrTO2BD$Kr`4V2-_KUtE}e<^EeOOC~=ouA;O#`dS#08K8(1Q?3v5enx5f$g(Y( z(FBxE?l0$6`lt85oHPd%BL_|0&rvgePqAKlob>;ac{mXVC_G-?B2mYyD2d7_9?cTm z`aS)qTBYJ&l&6l}sto3OatAgsumO$0ujzuYFnv`U{wm6~%98+!RgR(BvtI{Ep%GM+mTW6iijmeR5uXQj`>;Vc)OD!~v@YEpSZE<3>NeUKkEjG7nm zFOowz9QaTa9HLnf2BY*g&h4G}#0h7O9ah%ZVP}mU)*rIQ_U+xbckkZAn`Dh0K0KHl zZnDO*qyM#g5ulDlM^?aI^@g7`Yx?j&p~^M|MYZ(80Js6;?!H|B!x7g220nHqmi4sg z!6mMFzd&M{eJ;|aCMEl}GtM$za`&x+Rd_+pHQlFO^3L)=-?&$10rSJir8nBVGX~8( zB174;h;0hZT(#^M#mtjt)92ucR65w|&Oy7h~xe;vfYJBd&4 zrwB}24?J}I{#o8bBO^u%WMcAjau=0dnBlJej7m-YVrl043T+qZ9@ z)*cddprB`nn*6u;)#Sg$uV*k@&VTc)dIDpYtie~4{}yA=rX381KaZ(wrdftkupj!p z*n%HgHjo+6P;KjH7Ik4yw^Tby16?Xq#wHVHfKubi9>4i6-e)9nG!-gf=gDI8(#{as z>33qMW5|g10E!`yBPCd%KZCa9PZ`4Es5nPTtE?q|VnQ^q39`$p-Uz?3VgdYzQ|C(l zjEeq959O34JH$t44O{)*Ir(gk8GxHb(P4rN3IH%cXFeP{2E-m**2hR2gui}ql8~=| z+mA;RGfNNI15-wQ`%7zK&2w1XX58RCQ&!{pM~c2;HnKj|qOkXh*-%Sw)Z*P(Oo-Wg zuxAtvv>R?&G?5jgn^7CXrGNLl*B<3H?=voWTve#c_BhvH;nfdHNi?yGHC3cN9$Se%!;LQ(pv0L*{iCumu2Uhd&={yXKc$#g(NZ29{=EF1gUs59L3@x}~ z+r3p2%QqCVnCa$uO-{%v8#ekAiNs-ec#rv0@CW+hczd3H$wni376$pNk|Q=J>1p99 zz-`S!k;`>87wRIbo&wglUk8_2N_(%I>eE~dR)Fr@w_kuYXe$V4&~_e~xfa8hQhbH}VajV4L& zOv`9XF=?Zn!C=Fh7c$%;&b@ABcSN~|>>h;d?ojhCvO7~V`U=|322~Fg(}e|iWI$-6 zUjkI1uC;Rr+gp%N0IX(V>GL7dp@NY(3)1_KEWXRMCEN=R}<_*!PV?pc&e@xekA z@u79RAi$1@&}F2#1g8PFG@sd$YRXu=aHdh}otfhrUF%dgi%PCSIpWBs3Xs^E!FWO@ z;9YpvUJWeRN87R-j)V};m>N+}d!(R;ZRwqYHVfEnHm(R*sIS4z`UZYT{y^a2sZ^F2 zqjHj@c9OMc8=z`ySslt_kYS3=2C$<2K-o@VIWb+p(3$)i_4x@T2xdOrH1fLUoOZhGt|n`2Fnjq+^`TZV*?lvvb<<|t09 z$-fvp%dr@uOdjfw?Y5Z@C%;)MC&&q@yD$-j8#6|0S`$d-2Ew3c4qf9SyeL-A+tzD<284`~9uygmqfw zu=7CK`6wHAheR&@Ie^_XJ2<_p`2}Ymm>%QIGmw|DiOexJF+1;UsC~uPm?z~)-q)UrY-`b*v>hR4`?{01t>j&v82(yDJS_iN}3}Eh3+GeIjXTy zhqB0o{IRK_K|3~R=IBfq?ar*QKIG`d#vvr7ctutBd%dA7oIa5z{a)EG^}T>oIjgi; z*X%+R<4}sz1*RFkUIJ!-t{-N`6n8osq$U-`zH@OINb+cm_+klhLqY7OVh1&YSbk>K z@mOHvu5{`UxhbfsXMGYnW&{4`Pai{sKeGa*)R~Q4C@9l6dWp5Y*bUzYnJStMj$aL{ z+A-|*%0de3>4@lxT4PPgGl`438)il_e}^Lw3h7<`VG68x*I)uz3kz4uhcZ z-D`1NWA76~;n_gG?lK#bV9`7Tv8eD~ZmoxkvnhWQ%K=MT{bCrS$asnoXO12>^T8Gb zxQJzPAqj()>;hhJ(y)wV&Sw?n+vCa)XD7wENeV7-G@5-hu%)`NyeAAmsPi_8i9$w{ zFsHrg8CWk&;07h=k^}d%o@|Qr+J8QSr!fBC z^K`L@)GUm0%j{{>%Vk2)9!IBY_;{8?Y?n`9}%S**k zN7ot)S)>)KVjfr`jF*HgqF;`96>0+%Xua9XkXKVK^}H~Q z%qFPU@8wP}_1^CEayi%2%^jnFzQo_e2WcH%HLfNEUZH!?%@_HlJ$iZ}UJ@ZN5sm3* za5x;S#e#9rzo0RFVQ+QE)YwH&XHx@?{Cit#0!pSRJLs^0G7s|F(P9$1LIh>?C*e3q zLo2{+O}G30VNF{BTIb0)O#`JLgjpJ64C8b_xGFizwrx;TX>?}JEN;*?$(1_v)O0n5 zxkAe2=LnktXH;Y3^|vN+m6G1{6ejsFtPzMrJ}FjvG$`>vtCkOP0gQC+9>O8_z&DP0 z<_?VPxyK3T4nc+3X{(`EEm*@U$q7fmT+mygYqN|p@GSh;cEcmrJQbg0 zhdgp*q?oTjLO2Bm%`fnTQ5>{2Z_aY;?u%s-3ts03^xS%fGkINT>Uxnd)k|%{6xW+b zpuJK1Sn2?IkF=R8RDSOm~uSoLT+*eHga1g!`EQz4)yfXwUwmbE* z%(>7m*VxHbcwkwVXsrdw$|CN`Ju;SyQ5lm#io0%M%(IKp{%@w4g(?9mJ2_2COh9%8 z!Zy#y$^x5Y=SD7G&@<9Vgxx(OSt5Y`%q#Zakm4*ws*FErTQ+~rh*6t_QwA_nyneX- zk+RA$lCt#++R9#%F~t~q=bd;`6yGQ<)J1p{JR$YMii7xb`H#c@HoNIM2eQxb4N6Ev3jIWJdNc1;*>i{@UNRn^mWOwJl2o|7>` z!Pa)Akf=_qCe(AW>f3MT?MMS0_$Za8?qjacn3d#rp*00E(a;&eNkXYN5}Mu26)#zK zrm7AN_$2G)ZdOk9G^Wde`CDDmWe=iPcvX%w|<#LV63Qp}f^TJvLUqS+m3xPSt zAW{p#Lf8W?(5Ha*Q03T`X@!=K%&y@sO~Ml5WyT@v7VodSXsp|nU2aBd#=^R#!69}N zyyEGKU)ewqnlxi(2pI?%E|NKZjzOxu>RQjU&h&E(QqUh(APOUhz{Xk36$*nWSc?X! zX7QW=#m$~7Z~bHpdv6XuLwD)PIrptV7^bybX9YR|FNxTBn1)bYV%L^?2G(&{DxoXY zu}P!oWq|Mb7XlMH2H1S)nWJLDth6ENbiVs1@2y2S%_-KPOhhBsuXM6J!N=G`=TT_6 zW)wZ>X8RsMP)>(>^4L~{9orkt*w)EPuQ&z>cQErp`#Q7FsFt^!2aEs@if}9?AsC5i z5~h_Q!-UxfRU;&|{Ym;3-}D~h>bw_m`90}dEp=gc5nw)$DY&Cm$E(zmiw(_2w{5d7 z&}aHx0Gbsch-T*lX69Mitqsnc$4Zd&7-fhV^5FG~4+%#;G(~(sBYYrs0@ar60u9nJ ze}AM>ZXF!Xbc(l+#_7yPgD&6BE>l~Ph^~%`@6L*Br^fnUk?tU_nH5P>oE>C+4W0D` zTjvXFSxI;p%eLhiv#^FTF+tw$#i-)Mj=LZn|iOZkomS zWhsn+)N#j%9orP0yeBmrV2~fyfH{~?|Ids>GRQ=N=S5-%y4TxDH{YH-Hkten5msNrHjCXe#~QUL175;#-WcwYKqlMn z0tsYioVw=(GI1X+_Z;Jp7aet1juP2!s_tJnx9qV8cjlJ;4aU>RyX-|N7va2Fjiy2p zwA^!^)H4kYCTF%Mf7ma_iq9RW?FC*Ec9mEtBGrZxA-k&MVB-7bQ>hmhiUV+N+O)u1 z>D)9tmO7JaSWjztFXd+M&+uUpYR-J$hHnqnbzWK-IbY}&xN8nHv4lnU;U}7{Evsmo zKdPW0B9%>5klIW~pR&8Ay{$B#NOSQ1r4YkfyN_SI1xc|w=K~2h2NDWZNCp|pwPqA; z6;LS`nwR-{%O<-N14HfRivcbTX_d`#pN3=^;WI%XPn4#$v7&5tk_*(QIX(ANMnloJfHesqV0MR?M=F zdw#NoYIKi6Y!_0{ENZp-hMa6VP9`5KmwAPtPwGXqX5Yjvh!n?$$MHfKB=d04WFC_7 z)MOsYwQw#c9g+YmdQ%MQ7)j-OWwayEdz93`pp3o}Ww+%Z=5Zv9*?AS9#$Z-+5Pzy? zQ#jbiDST%fsFJ*K$f}oP^H8lYD!GV{E>|gL-9>+$@RRr>(^~)$^X6nY1+Ym@Ba>yd z0za3&+Wn58%Nc5*&}m@WIg3*003|clG~%43E|j###()Gyy>?#Ph7FGKFh zfxT?oi_LD+I33#C%!ANCe$%h|OE;XQ|467Lr7SKl&n3^>ckXb=)-S8rR4Rwr-<_#R zypo5n=rcN)o@JA90`X)?gBQ)wrKwa_pTzRVBoq@lp^>)=%V}dz zb+>1SMr79a8?K_LBkvqU9d!Ei;`+wRGtS@ZUg>=&Ce`gaIbX3S0z z-F4ugHcyDS%qR#J%1^ehLn((=F*eMkP24dU-cxicWXa(C5g;W zI!>|hc{zy;k4;!d{@2>8x?oKGS2KwWW4i^w-M5)sD|-MJmqhjtFFuJ35)sWb&ZE_? zSKN2V-|n*Nyh&t^n4v-GFmG@)4(yfI&?#+e{~40VelT*f+Ux*Pno0${<3(7N~}GD!erkW9T@lgN7Uvj0^`B3tE|Z1YtYVrK;3e}PG4s_|xFD{8}2Y(v2yl=I_Q7oz(*tB2yUz5nb(j+pX zr&^j|dD#BVGT{HaNn|kYZb@VpR(St4i7c%okzF7MOb)cxb&|;^@9F**kONk473gT( zwj7rb7TAiY`^s~`esg;cm^^Iq9pud`DJk!iZ0D>Cta%Bjz;945bHH}V-)#ak`nv{S zE_1-x=E@t^Jv>WIz)$A&8l#)gG_-lxG;8e~=Fp7``hFGe{?*67epYpOd3%tx9;4p{RX-z(c5G`z?;U=MA}0VDL86=}v4 zdxqWw6nbHBgp$OtdfGLR<=^{Wj8u%*BmfLrEPv8{QqU|UEutx%6sp9`Tys( zXOf)|U?zjI|9>NAP@=Jo5)sJk7;XZJms)K-Z?)Q%cLptqG4i${86aX5w1}vHSSABX zRA}R^a4L{+QL&&+TWs-iY+BLc(bjnBF;yY&_xG%|_kZu1$&HKRdEfA1{(G;zF3)<_ zb6d|^&sydPrJJle77c2V4!^AsL67kQ7{ulSFz1#cvVbQpBC-UgW_%U{#@!}zadccW zat3H)pLXi`-uoD^qW47%nD4!O4cZLD$|IC(jk!RuPJ5LIurAx; zLS+P)#!D_-b)YTc6AAjRX!f0t}~-=Wd9fn}lNAwQ9PcoT^XJJE{v}hE1sCL?4B-G&WTBQYu%iFZ5C4+4 zRE7*lP=8&t{-X>3x<<xa zmlyuU?wk?}ChHpewWRm&XD)(0x@Q$N2OIun0bdqGr0_2b1}l8wwYfaUgB5ZSkIesJ z;a}buDM;44G@eZ1U$&y9tt2I{^TN)qdiYmkzeBgz@UIVP1xgL8s6L$2AXYxBj&9R3x$&4uEg#~%LmPaLj2?dCBA4XZLHHKTp4@V9!kXv;$N zEZhyR6Y7Mip6~Z+vaHKux#YMZ{Hqho#R5^~%CBGJtH@mZmj!C+!05;GDl%6!F|i8Z z=*fRcSCQf0^;eN84vZ}mwKy;w$@21S$awJHovtDdtTv(Z%cWV5T~nshXDtRyA>-y2 z$NQpav`2YOnFW41$`p5(`#!m!OhB88q@5rZsgfaZ8$-kP6A@x5x;9j3j;8$=k zfnSjmi|!_|h~`a72Gzi?kj<BB4ozZCM`b`^Km0>2_Rym2S+tE7lB@T;p6_(dF1?OwE51HY!v?Vuzl zHcQ8D&DgB$JJBlelOpg-uK8J~E;WPfi4FWJy%NIT0b}sjDDaCb8Mc=Z29UHg_x~UG z#cnhg#rDe!{9-0zOMA8+Wg$YHc(Ers@N08;fPr7y*N82oeeRXOuhzlEedRs68?9%p z-Qok zYNlb*=U$^U>O97s$41gchP2s9=}L|=LQ(AvSG(=`gjsB7B(>{+hwfxinJxBR&D1@4 zv>Xso+T&{P?bP0v^m~AqjU*geOGg4V6}dV>^#FXh!%4%mznXubQxCp2t0$f7nn;WH zdBwwg_u&xtvmkkD@QnJpW=R=>VA%N zKbiY!xu3TCd0H}3;-~3|0fMgJM|`5=U>3RjPj^2@xu5^$en#BS(eCFN?&q2A=NR|1 z*!?`q{XE^apr7hvss%BwrOyfktP?{-DpZ_aq^|<8CWnbx+jcwUi zC;E!M>gwFsp;#f03_!iFjC;MW@ICj*gL9oW=KD$;=?e~oS&vWNqvH*b5gi(=(XAr} z4sQ`G{P^*Kq@hIzGln=YgLw^{PWogz56l%Y$?ZoT=1Aj%bQ8=XoeIqCqZf6jCpZE= z(fuq>-W%$UOwptaeyjneRolI|QHVJ?*^Lalz1dT+j%O z#%V4U9qCW3KMnn9>Q9&cbn8!#{`BfkpZ+BJ)2}}R`jhHUmNbKWd!WA)q5X~QZ^Qof z*x%ItN`~eWWYy0^U4O7vb$WJelh=fW=kH zbEt}{m3$r7>XNuxsq@QRcF~@a2Fr|ps*IeW(3qZ=SkTZa?c{x{Rk|kcad|tfH`dl$ z*QLJlp(xdL;^?^NSPrCheLFVpah(`cC!SHa2pIUWf^o8-V0&lQ9bu@E-52vDhBJX^ z?w%`$yqfy!*XMcw+90IIDu{EusDovmux0RH8kuEU&qw(MQQ1Zz2NUKx|1)0 zy{YnuF`nMDP%tsddbe*}+wJhVWF|i2!CCPX4^G2poXwsuD^W30Ma76i#ZE)TAp&uU z196Fmk5O=`0?ztSWZ)>JY9E%U4@z0+7_=ct7H}vI!)x7y*EET9R8LL(r*{tOr66}x zb0~%9CCgUu$55H`VV84F9!<|&GF~V1&n>g#yn4+g=XEmw)H27$diBf}8z_WzGXKCb za~?`M9Spl-s-F3uEi;#YWYaU-Mm%L+SaxumW!7Ekfy-^8=m-&mCQkX=O;Xw8CRsBs z^&LF+xW{+$*zX=M;W2fOm-4v4J-&;_LHGD>9s~FIXFU4KF5|JodL}RnK9m|R8D9;; zLiZTm)Hxb)F&jrCo-Ciy1rlN;>Je$wI3LkkZN9(SVm}I!YrReG&z#1B9jt%`CSia+ zM(}IDMnk-KBAQpS3|e$^Sl{AlW?M^`yQ7IzJ}S#|9t27q-7!WE@xPadEvm*oXk(@F zK}U!s$xBPPFbx2i98R8?^2v|sz@@|A8mdvbBwnxs(9VL5br3nX&B#b*z(yT`^~->Y zRK-YOwWv5i`N|F!wq=h4Y}E1SU^5EZ(V?IYWem^Lqc%#Ovup`C#^E;!VW&*I>)YVu)Di!Uez_j^p% zx|)|pjgF~yB67D#mW=W86`7S>VrRtJ9EB}OLQ>D88Dc~jpfM?!Wr&%CfJ}Yf$1ob` zuj&kAF^C)vPGK8IH-^l}{20a+`Q)dPj_78NVbS^iYUj<(hPkjbN~_6fiK+$FmTBM{%rlzRKo=r5~S z8?(T6e{eu5y$0Nirkg^lJzAdy z&y2Hnbk)kh{_T9>>v8i$TTzZHa3r{Y8xn~Uw=D5Lo*!pPwJ=E=~!N9b#n`uL&+)jYPMz5vMqzmt>D7saP$d} z=49H*y`n{RX@LDlLYYzfe`H{73I&;ye<$*mkdqJ3j4un*@0bbvVto1TPTg>kru?#( zoc;5B=EPB+<=@{N;_Uy<&_Y%SaDh)>rbTHAs&tGidE+Djk}Uk}^J&0sm&01QQma`W zi0AQEez>Og;hGL~lLd4R^5@5sVX|e$oM;Ps!Jdo)?7w%c>CU8R3x0`d>`2n15Mjj# zZk>*!tsVT`GX2{vop0Nxf7>3i@TZmWk?0;a1Zs@;yg{D!7w~R#$t-YrH~H*Ok#G(y`@=3Fm#EUZOcmiGTJboC|(>iLRo=Q#(E1 z=1X`#{PZH-vlQ9$h{G+{eofTzo4+d>drlB|{8n1o^RO$@LlM?9rnk~NTPr_zMS3a1 zdZHC^dVD0hOj@>7p_fHog+4dBBC0C*D~b;&-CBt&ix1C@uBnx{CQ4>iSCi2Ubw$#n zP*+6{uCKv!eF4wXXiE*AEyahC=*C)!8;cK1qph_PTZ<1P(Wh%AKJ7N4-Aoy$|VX9=#9ggFO0Wm1}tP%PJq@@d#JhpYxdUh|#pOAzQDQ952|v z2r2Bz!K&dnSk}O_c7H<1)i4q*Qs;{G+K$J2Ni}&%S@F^Xt$1m)tP0w)%HANkZ810R z4#uhrr^i=(@Fr*6dhqcsCk7(x(r$scvp3Gyggc^I(;2hZbOtq%b4E@5n8TP^2GfJA z=df-PV7O}W`!%!I^crd+r`6;fq~1X|5}jQ|+u1Way}J(TxicHkYWle}Ku!m$TV8i; zusE0?%%@=F<9I7=;f*z0cw^_orL_;279SP|m({Am-Y%5U6$hdEt|;nTieX+AC8e3Z zG`gnt0W-arT};+KV51M0-c;c~x<0JnheFH@j0Ucsk@LpAahaC~i z4kl=-4f0`&kdcq8jfBef18S=h*fD~~_EULY*j;aJSG6@$RH4)WPIg8DWQRYtzjw+ZMXr?z_EsIA^NYTG9~w{%)_xZYYxFnG3f5(LlWUf@Be z1v$0V;i0xVJk(Z&X9lkCskgSh+FAwI+tnI*_gU8i^}2TKrLG;Si@epkimBnw$WQKz z>GRG)M=p&XswvNhqGU#AcGm&ewHE+(2>|j|0hmcR@pQteBsjw9BpBhudm)^d)~=NO zQDutDETO^_n=AoU+Y_7xI3OXN;~SU-!n_=Qn&Z0b@IB_odTZGlb!Xt9@tA=52!Bk?z664 z^|~IKr7n%lL#m6sRjkZ_Yl0mfZr41tc66|NFLmu!UF6+oU6EWb$NZx7>XJG!8dR<%hQrA}1Mc!&%4qGG9cFg0#(s>?lrKNLs?Ze%T z(r&ru09KVs?^CDPeFstOz6Pf7G(}nN!!;sHD|AuWFqzU()O=;bZ;D+S;707)qpSZ<1{T@_Un1)NLxR?@c;+FF-I6azJQ9 z68r5K3TvJ^+&+t(6An5XlJ)^bx!51z-W3$u4Z=u9Dg2RW zFz;S_lT--{1pKE2vdA6Ot!>1E;DK4{GEGv8W(TJ=tI6jy#u%wd-|EKG3S(q2#z>7Z z+|2Yj!II7d^7vqhn<($L?OpB>}-Y{+%KFp(^mVbmtKP|t3M?Wp!!lR#- zf0Rc*E&mvgnwHbV$9dFh439VRIN}~};_(>w_!m41GBW%nk4xR-RvwqR$4~HhynFm4 zkE8DKQ#`J8kDunzFSve&$1_~&U-5XBd%T&)SGdPpczl(6{2x5N#y$QukFRx)pXKol z?(tS0&vuWu@pz7Vyq(8$-QzYM*SN=yq|NUj)zj{sJO(bqUG_L*d^ z18!`gsx+!*)RWcdq`Hy0QqLguWHmaOQO}ZEJtMOV;t}exy~rgzGZ!e+C+E7*1|p?k zPsvTxz=CsdTrgTl#QMTE0UmxMoYw(mq!jW}ky2^lu)3E1yX7u{ zxJH|Gy=N!=S+%C0S6_ZneYwlp@D1K=FHWSV?>qoky)XA=E9V4l`b~!S6xofku>@%P z!MJU)Q_~mO1P5k=baf~52M!>!hw!R+|4OGs&R?7U0}QR+!zx&_fM8*TH@bN2l?yu zn!a3r{oDHMz4g~G)n9kmYo)V)SO5N{dLKShf4!sr`YvPfvWL$9U%r0LYAz}CYn)U# zn^#@AX7JrN4kq(g4Duc^Ps;7T=J%Wglm3 zrys7Ui1%9Q5-T6HR}ai3^=}`lzdDC_S@QB~$#+*@-c>L6K6{;K`Xc`vx;4GFp5cmW z;rH811*>isi>aMkyOLMi9uH}9A1|s?HcXMr{BE@1vX*9G;DSt=#X)3>Q{jsbHAa;d z5u(I!qZr=TE731&G~Hy6Pedc{u$n)r%`^s@-|L~98Em`wlWsep*KY6W-M@D8Sua0; zthS?D@e)izEo_0qQrPs%4nsvzG?*uMS&VYif-35hPr}#77;Yxg<82Q3NOS&B+yP+d|#Z zN6q^6aHz|_A5D=wbqDdck z9gUi$>F6oyCuGF}q=Vc=g~*8jT;dM+LP1W3N$~BUDZ=^z4pu#oFl_6Vv^bT81+US} zc-uvI+i?hiX>^$F&&p2y%zEL+=}LRCZeP`#T)#L>yb0UK?zrt294?B{LDKoe+w57_ zPUV-r?eG;FVDNk+4-*p`*?YWQ46jUFLcoOw=W?a_$G-Bh=9}B1gZzrO9qytH9^B|2 zlKdf_wq7%=ueV%KKHhi1;TkMf4M^Ldhwqbb$G0?O`8PU`50sC{oG^dzg2Oe{dVrs{ z;ZyPRJM<<3<@p=R;Ge(mGVd%uDW zAvtZBi~ZuY?O-i1#H$)qLhp#P3|8mio0(WH>E+11NLX?+&G zRngi;rNWEmCh$YQ?npsqQb=RdZL$H+{74@6?Ag;z>4iKVMHM}3 z|A?c@6*A3BxMn;*aV%-~R*|X8Dv+#9VOlY0&?9AsIF>YAJ5KGr`H`m#uW8Y4D~?AU zq6>tg`CbB~k$eVHXygII9LUHGoD8@hhc3>K5w$*LEvFrf$q50*qLYWo(ltzL0<1+X zCdR?;Y6npa3-pTIK?N+(vx=*}gxe}9v^2mP<{0j+4fJWMQM%9#HRXnZl00cUkkUbG zIq;HpXbs2U7R~G!5frOqsK7x6FxEqVTL&$c6k#7rieUWu`+F5zSq?OvP%%#tZp?4pP+M-gyHDH>u4GtYh@!+=skKjrC5XonG#P>DR#g2O__Qr>vo z_!00N<0}LCX%ACGe9pjW@S;ThH}PydDY67l;!&uRx)8-C1y7^VX4Y-8QE)JXRt@sm ztN~?o)&Yl9`$jnd#nnSY08IK90@O;h!D~dix5;F_sBk}ukuy+B#R!Zu)gmW?G?F$) zxzRNwXuE4wI|5VrmFQ3HaH2cWXufl!bq5MUmbzyJE4F*Hp3^~U?@Lx0O^4NDIhvPs z5lDH!m@w<6T6AzLj7K?DMozPKj|Ro!AX&Y@okPzc;1S3`E8(tRZ2xdZhA28$qzHAJIng~4}MM99wRhd9koP|)b zo}CRFjq1O`TEliM2bP=~BaIx3#7Gw%ug@^j9Op{} zn0*J4jLAZ4fF1}sJ`Kb~XRb!vfy#akv*9VCk;od6DDdLN5iuj^r3%9-!j_nt*`^Ss z0W-6KX1aZwjJg|=EI7S76aWE5#%^HUc!OsfS35}8^Jxgs&?xa<04fDjP(mc;bhIEQ zcLX7eDLUO-8$Ae1GbgGDT9aXkwS7Q{xDMTlpkIjd2#Ap{5aYK!r*SQKxH zu#vCF;>AQ1kj!JL*E-+~#s;UEqp9dnVKfFvcyEM5I((4H7?&oa6uzo3Q&m__ z8k)L@YUEt#R<(K~J$M>1t4i58slm^wJgG3TVs5h5&8tnm`w}}b&R8-mYa}7 zcAoUq!?Jtbd73ZCx`Brh!w!QP<}OI&Bs@`|gVl(XZb8dNm?Fe-vJ)_L3z*9}N}1ydi-!dMbx?j$;%+_3ZO2B&Lp46IATn3+}>IGV}8P)a|b^8;-P z)P8=9fkB!Wm}Wc!cQH}n;K7*_6~StSj>wvOW#A|`1~z%(8gvYdurjEu@j>eGpa?M0 zPuE@^F^;Ej<}))WT+Wbb6iye6xb1*OiLVNI$Fq~S zn<>pCZ%wGw8JXxa$s5QT`CMrMPJzjqtKnNW!I5eO0VahDX{G@ZLj06RuRb?vTuLQu z9H91UREXb9(*xCBp7$7d5jkB%U?w&9O7%^ndXAg+RFC5FRKHin z)!d)rg6a>Hgv~-R!-+BNb@G(5GpH?a)Ml=#*vZo@sfp5F6Q$g>fxl0*=CYb7jWc|- zY$q|XZ$#roDS42UlAa~4iSP`M!k=s*Rh*&JD6N5(R2gc9{%DX^X1C$b`+hU-p|uoxOO< zK$oy%Hjj#&z9@>Hp7y~~6oo`l zsAp9oit?1a5L8-?(Sv+NFSJk7Vtb&x_9N$gpQ7=R6cApLv(cTOy5+VvFBy+ar=nTFuF!xJJR%VWk6U|eR)|xfSW4*33N;5qabr{lrL;qV zn24r5DGabFk!RSHp>uxAaFg@9B_SbZC?|y_ zYqr8@w3rqm$upK(x&@DG(OH!oF7EZK_>7u7EP_n>H9)`89h(-$ZdwRSfmNV5B7&ahaq7~Vu z8-|&rD|*r^j>h=nfDx1&0Ry2yILYfIAv zmY#d6zWXu!9$0gJw*?;`l!rL>}5ohvKcn8IgyH3$?C)&F{X(EI3iPZ zV&9bBZ?=#f7%b?0ml43tDq#9$*~M-BrmFx0OrZSxoC>G9sv)Z4ZenjUH>#Pg!aEat zOf6J+9}T#Py^VcjDm=>i#L^B{qfT(Gi9LBx;kAjq!1n6je@@)I#}8?5F{GOB*Njn- z*X%SCVmLbs)(UxIaa6=NPw~dLZMR5BO;S+n^7G`XV1^7s4uiz=RvF0&^wWnqZV>iNFX% ziDW@`tVjUzl;vj6Qt?P6Wu8Vxq*0H^2#F@)jg@ImABMvlk7O|wPixaue8tKvhzJ>D z*(=5)ng&WyXPxngr9wB%ciQ1B^KSrR!M|cOsVBiD`OWOvk)pRI0cwUFU~?i9{C_|uXK5EXS zO3I#tWhVs>)O@rWE9T=YH9}IxH6mPzEKyiVN`Si$^RY%sGbSXIt(cF~Xp4_^+7cxk zsQGwcw55qjK}r$*^W_ZJBBlDM+};p?HD=RQ9MEmW;N1IR*=th0$#hgA=;ud} znd#_|lWZs@+E@-X;Zw!HY_smxKPLONqt|eLNc)gk06V+iT7%87MWJyna*+&S z^v1{|V|jd4;W8nSj-rx><#yD@L2XUKQ*IR*KFv`?Efi-^M3*F+IxMYFWl?aWhNiGR zVRH#qz$#5uMA)=Uq@b>4fg!@3yF#Y8*hRJ}>I=Uxm213;dej(BQi^6+#c}D(GP@J9 zD*%9%R5ys}8M7!s1_fUC<~)sPG?x&fqSoC6z&VgKA;8*(SZP{}E4v{a9)sJ0WMd2m zcdaMLXD182(V{@5>BW`ojDRlKrXh-Cn&QSFgxTUjC@4Cb`z~U$lI&^|GXwom7nW%h zLQ>Buz0Bp$j*WHt?~Y(h97`kl1I1%VV3}%Gfsx`#Z7gdyR!m&+y>G-5?dGxZ*{-4` z?XDuR``GwZE^(yYQzZ5t8=p!d&Ow*5{`?c8b4lQ`p-#eUN$AOXI|*lHk>H|aekpQ1 z%D-V(3y5*Ue50l4n48F85A$DeI!u(`*GU1~XyvgH_vJ1QQV}M%Ni&>X+Cruy4;X%Y zPg^(JRGwO;3OVqRxT+v|Q50?nH3%v5B2o;4J$c}uqj=9)df6Z@5peC&Cd6+HKWJ2t zCRxmt7$vVPL$+cnaz>Tt4Y8sV0)c|fteWvQ#?oucLC%pm5XXHOBsSV&3zh;f#zeFP zbYV*VR01hXH&aL=L$k0Bc_dGD8PfO8{@KVrOjjV<<5h`&dtvQuW$o>x+S|$Qt%#>c zPjT;r0sxXYCp~pqj?>(GLXPxBmFLslvxne}+S{4#t!(ARwXZL!y`AOWDiFNXrEmne zhl!Yvm(|L=+`X0czhagWzva>@^}ceJT)*wod@o)#qs*&aiuL|?YI%QmM&8%B6t<@e zZUxw+|J@~Vrm5?S&awi>|CdX)GwXzPmn=q0f6sk#=SEdO={mdgweG7srJ?$j<<6`- zeVzMkLDCKa4JqjRefOaX+Us4?a0gn;tNZlQH@I)^CK!QS0Ga;5%!>ZdB~=jpM=r&- zj-Rb<=IQ_KQaqZ++*>((u(*i%&;m<93?|NTsWmcqW38Syxwkk762n*UyN&aO`PYb_ zog#ie^O0n)Uq4X!`nm>3X=mZ@cgkMBÀue(FUek6&Lv2#RHKUyD+W)U8yiCy6; z{iNgh&{_moFIpx?V6aytzp#ltvEtT;A2}bn(7S3NT4*vLKfm+UcB{4~szYWP&~xod$i~te*uLk%lr_v(nM#>_2$h~xm8L3)a?Um6wxFAcDhOBL zHd!1j$ys|{p{_MvGQ1I&k@|8`)_f_(nc9|NuN}w+wbKxBa$+gg1+oOWXd8-?0rl~E zzw-^g=WH_f@wo4QZF^(Wu*BZfYba4j!Qp@sp3P>q@d*U7kd45SVr5z~~ z8i6s5oWi$nnG}AbqwpIYg&%=Y6%rN-g>Pk+)pYyWu8}1*-To?e!P}A?PC800lWOlN zh0g_kQuw+X5PgcmzptY38(!fzlh4FaV?#syx5N>l4Es@t2@30LH5os>D@AiyuH_t? z6GZ_e7uiQler;si^Ip1gx>nT~2yhg9 zx;s9j6XvF&Ho}Kz!B#UQhtMzyP-M0%ivogUJC*hYa9k7Jv;@ z`Kby20wx*$9qNZP5Z+q`+uhn~Ebf+ZqaAqp2C>l+SwT*{rGE*Z%whuhuQ%@V>qln) zdQr&a&JG4g%5XJjK2h9f0n5=AdifC+@Ju@(S2Ow>aw}ar$vGwZ%G93>E|&n85V7o` zU8TS^Eg4p&gfD9d$AW8TVrHR9$}DU$7f7Cskb&k@^~UW0a2v2{dvt&e^*I`{hj$Jx zgwt_pM9GnSpoS>@i`hGMw7xTcDa1D>#7Ae($yC8=BF9a$=XgdCjlxmuZOwUc5aiEh zCpC62G#8{_8+2+DP;MJcMwFH1VP(Y_FS5dw=|i22Ul>e|*=wD^@juI~ylfjxj@oPH z^xHmbdiP)=T{;__>351upJ$r3mrRH#nLYnjX`0us?g!F;uVhbe-%sWrR5NeiPv-xq zX1-%ExiAFq+4@HsE>$5s?jRha0qA#G9rb~OdKftS{3CsySyt4b(m$*~!0SDO$)6k~ z26-r?f$e8F2`vE)oe!bn>@ zCsG6bh-3R}Gg#I)Uv-Fp^BMUIaMv+-xqeVG|)3+2@(XEwWL_SEx-b z+#JRdRLprfEnMpacDLpg&2ldwaT_^pq<^+h;DmXf`KM?^xtHYVkDo~8LvwJX|S2~C#sHuvV-Dm zU|u7j$!0c3eAGwx2^%5y6m=D@ksf6i`W%QvoesfejKJ4k8~tYUTCkDtWTP`NSO3v# zu0D{cC2-RdF2t6ai~FPdl-#2~HrfU_m3LAwp3s}{;Kf`cp(V4xZHQ(ma*f~CLUjtO z1{QGMSAY{F3|1FZCj-2h{8nkn;%$=%IdX1~m|7zr=KFZo`rD67tthD5>(F-U#YqDW8is@TAaQ^`+cwCS7wFNP zKaHeQ?_A3JhG%D2zW1IQXxZ9)WnbGD(-|_ z%~j+&vzZK2PIw22k>24uDbtRWYaVxC5FdluxRXEBeU5=uhX=mb%nF|DaXEl^uh6}` zBt;yAkW6GG6CM=Fpq^y7mA=BqrOvzRbzT*g*U>=RaP~~9ZZWBE1yX4Ax8QNa9Sk1% z@oYDM)f?G(o>_dws1+uU#6fxzJs3E7H4|^8wnA{&NCAW6WnHG{In&U@M#&vP^72yh zJO&irUGJ{$gol8g-`35`_d6suy(mdH#UAuS!kHw66su0rHOD^~*$6&jj7H6H-1Oh1 zZc%fG(LmhHniaq|UFrg!le_5`>T+Qsq;zO`Ky}kjOZ)D6`kr z&D*Bf2-hZzdJnDo8JQo`Qtq#R;sL<&+iUZ52%5`v4K35e`dddBKSm*s@|a!7KgN2I ze@{rgD35Br7j}rGkO&Y*P1nP^Zm_W)WL{0Dcg{W8ATt=I*>DO(z2TJ7Q&*Y>atiud zP>hg_*{h})!&wg_?=r=J+qfqlhV(eAH=exgwGSh^q{E#*df zjd@xT06oZY<`r=MkmB@1gP8mX7Cw8kT&CjgK?14e zKal~6g(_1rA?Q8*Pk_xo?|zYmqLt*wf;Tc~%QND3h<9ik|RidcY^x0IwgM}$Yf=j)(HrW`b`SY{J z=R{#3AB*5s46J{WKZCui@;Nu;0SQQFXQc~tjnY3~=$7+oI0sw-W#Og{PJ=@`#4wJu z7gKI*`G|sKQK`kyJGkNS!}n*PjzRtzJL4Q?J|2a=nx=;1Ee$ZU31PDx2;gTkZNvqr zMv?CAt`2T`;oPQ;Zd1I=)DC2fwVBsgbVE1GG%U3DoXK`ZD4=mtrusngvro|mM}qFq z?UyZ7f3fho)i_#BlLp$4vt-O#hfdU2md^nr$1pVCp1zr>=T>3`V@9kB!|7sm`&@(t zGN++g5`lNji#4+pq~tTvF8N{uiGxx54O&69tHj;zy1$sEv=uTZ+{QHRA58P z25tn}kt+_4G}F>jehW0K;ZO}5F(|K@u}1ouT&g0M0{z$nowVJ&%P~FH$oFMSO8f+; z>U;nm(zT;Om4kKIg6oHs2z0$vkY|e35Ar*L@qFQF!?UJw99)q9GiMR&_g{R*SrgB~ zdPy%F%5T}GBNmbAJQ%dmsNazw+VBx%Ixh-LhN$;<3~9SW&5q;&xt@0E& z+!xXS#!BBcC_YmYiROw9vY))1H!q|KBc|0%i<_C!|-w zrIH@7o-hMBvJw@GT9Jkhd2EOgZ@kW19*sD`Bdwkg`+e zhBg=zo2hLhFdZ+JYslU)1ZM!81`UI3DRRwF41x^p@~n7-hlX&F7NnO9iG`>xNZ&q` zTq`8y_c*v4RD8FW@{&7-78@7aw&#SXk%v%%qA>O=WUFitKNzKW(wLh*an&MSL0GKi zOZ+<8xTE&0e}aL}Cc*)avt%T(jR$Na7+ulm`Mxn3mVncs732hFoe*>DvydB;WGN=H zr56tkaNa4owc^hSE$9&qhaHC|#bx`FVwr=MJ!I}ErD?Dw>H-42Te_B}D?R@*X*IwNZWsU7Ps&3HGB2b)_t#((d zI|irX5l^1tFNq+;+tmx9W)nI6f|aljK`dq$#H`z@*{IWOR5r^OHCsaL(623(s++A@ z2UMI=h$1^gD-w|^7*;=#*l1W1%T9!_I>Ri<@av1OPHkhx4q$q5wA8pvTI(sNOgY=_ zATZu%XlCo3T=$T=;64CsQ_Nx8_LIV^Eoj~l3Ct1_`UAtHR}4uPV09&L>+*JcG^*ob zpa&%BkNzq`&S~F9k!I}Le@;H}2^N>9f6DK&<%|cTR+RtSU%R5xPOd)5uPkKWU5wg` zW%sd4zadAi$R;krbe}-UM2O`lKPa?S4)CU7Y9i#iM`nzw^K_RP|`pxX^xWS)RN{Z zX>KhEk0zTVYDx2yG_RI4UrF<8Nrx!ukXjPAp|f;TOFC3Zht`q~Q_^9zq{9>3O;HOz zU}BI@Xn3R1;y*_6S*919Zjpx25JL*)M5Hn_69W&IJ{ZB!W|!sP-J)luo2hyI)&*3r zys8XuB}|(C#4C-)C;|dDl#QzLJdQ+}8T?7U$Y!vj&zwri-K9EF9~D3dk1QN%-q6>_ z)fjqmrhqFY23XAjeo$v}TQ`$5JaQQprP;@BLkdj60~Qz$Vx;^bXVY-5m3wI9JKaNf z{tfrgn?K+ln$mOdoXwlT%;6rQnB6l0QE>UP;{u6|&wnj=L5NPv@A}65Q#QA?9IOT9 zFOcyClq@#oho3=jwNTeo_nN*k+2^Eb@~58U2-NibLv5xk?%*D)0R@CD(W#+^Alaj; zwWvW>GBq%ltJHv0A)c{QL$_ckmhilB(@cGfgutM*k3lx z(_xUoObxiaIxwgYdnupfS{I~%+_(dghS^Q?8D{5rV3^&m7KT~JFmT`=4;n5Fv)LfB zXqfB1b33*h3LNtgj)49z=G-(aYfQqvvHS%hN^Ay~uQ}ZAQ9fsWAWYqD5)^_)PGHUanWkkza<1=dPaZQW!EMtf|bWjp;Dh|_h z0~j6ZwLOd&%9Ha5nNHvAfRwEJ?8NmsMVOlk$9F42wQjeZvzAw&== z+q6s(1BpXBu((}OXdEq3*zUw;VclK5ki9kDwyWEm)JThbzq1*K>p~)iv*5ONq*!2F z0EEqG&pC$|?{R^)H&C^`jcZ=AGVuRa4lZ8#il4W7kxMIrS7Qj2U#LFVd>u1|b(EyO zM|9k!&;DP_NxNWT;#-7ygbP=8zh=R29`%v;a6hd6n?ezn|E=u(>B9s6azeCxYUQR+ zhHu&VgVUBzPOW^wpPl`gkqfWi#^Z0T+%)I6?)aio&;R4^#qpRMK&pTgz&9|QsjPiK;;&&eL-;Rs7^XU4vYx(4LQ=92T z3G}3lF*d1H`w?_<`=_1Dr`o}_)(Pv6>(yiLh_CEXcBDY^t&@|RWx3Ip5_0v?_1R!| z0PF9s80buBoC1*WHrsG^?nT=KI)f6@f$JvuV_iv-FErwKogyDZ!_6uUV~Q6v+`K`C zx!#P1>7FCr|AHo5_s?C{K}$eOo`UfQEy{N3e~NjtcjJe)=La*mBgA|~I8A*2XGibh3BT{B2&vZ0WDhWz&j!Va{-N6aN6 zGWmfCI!kj{XxIiRUwn5Z>+X`oeIXsFP&Szbs>fX2NMB*BBZ5~x`<$_3R(^VF z+tkXdAO7ac7Ju_5$;~%jz2+}}wDnVZTy@yf9{K#LTlIMN_pZF^s;j=pBV&tkTKu+0OETCYZsmVrypHT?w6jhWAYCNKB31qWoLZuODEl|$2}JXmoGZ)PCX8o z5dR8~EiFM_DxQ0#x^FJfQ{kI!MNzJNGJ0ym$DfSM%-zTyE=pXizsSJRsi7Z zRNL!(OkXGgAKupP)~I6`Ia!f)-_UM4UwC?r{CiRU)V0L9qdUbi-=fdt}7` z({v~2irk<=njN6*BGzGoFfNF$0wj0=GiStB_8e@R5brT}3~cC<}A}KPPSk zp(yz34$z}esZ-mVZ=GZus;_0ogiftkRsD;>cKRhOBlLMz?1$O6TwW;luYw zwy8-r#B#`6N%xXea>-dQoSG)`iUj8g;E(s5#$O z;$!EqenS!;*2xz=PE8lyUU45k)IDIUj7gT+5R~f{~Npf=H%O1eT-r#9q&>9SUb&w7ZZ>) z;8xadZhB-8>BJ45fW^Ev%{N#UnxFZdBb*{ivwA=qoB~1+Y`?Chu-aP*cMt@wQNFQ^ zsLq|*C`Kd*nk3M>ovwE`tI;Hzmk*A&7UTgn9|Au3|3$;v`RUHEUey{D4pz11^AoSh z=8WZB9^RU(KDA`!$9cevwd_b?wGUKMvco{qT=JM-6r(XNl7?xc<<&P#4?clmGU-l5*NoAtcSN?xX3 zptdn)^?S@`T@)#5czm1EFjGCls)1)b{phBZVP!Z5#-UzRW(C0M{$R`FePtHB# z1%O)rX=V%3PvI8vxY)jY>Kgx;ZQmbaTZdBo(3>~ABVCcXMi)P0Qu*56nD3c%lmZUwOO6~9{!ky-q6tZ*q z9~ynlrzCtiSHAF;&K=?hxdY-suNHzzqI;UBwn)rO<*fnf`R>+SEuUrm)CO(!z%v6p zy8VYpoq=&VL-0A{&xDHFi&V1Tl^n2=a~VTdbiir})R#qg&-<-tm>3a23sLqo`=*vL$mq0?)&jWziWBcWK<2^{UXqUJoq4T;Tx*iXAXkbnIAF94mpFY z{Ky>@uL8R^2;l9IEE&(&$*hf7uz~rHG=M;e9|^;(0R_vr-+ue;U(LS`56wl9P+zK} zA5s&K162AHWSyi{SzEs=LSAVP6dD7HD7CIsFu~Uat$Ba|p-9V_X22iq08nZAo@h@! zn>;fJfUGD%N!4k2vZtaVlQ9Y3R!S}>q?H8mI>p4+m?XnjTG2;HX+|zSK!uV50|=$| zgH2PW7Vx-o-AvTW}CdAxNN)*er?pD8S}hKd z+&m>cTkruI%at0}@>Bu}5F#>M7DJyizsk8UEDIBhH8Gqi$iSn&JJw^3Mt9YYF5^(|Kj6^iE4!Q#Akf*G< zve2B21mi7V+Dx6C01`O1GtjH~X;}P-9LbjH007hg`C1j#Xkd zQ#+t?oyc$FE(OMQfx??)d6CZ??X)Pnoa}94doUwJ1ZaG%k8Ymi#pL?Qw&@6zKmsxW zoGE!3ZziQOSqa3Z${cB1U4+w2w!0_WU8)X~L1W*Sbz6-H7XqQOF8AW?3Bd>I6jDVj zmE;@yg#^7CEFc!Jc<&7*>L6S1P`cJQ;Fhf!rO}(B0W07dpwG0T22{6}#%4BQeZq53 z3zIDCmQ?D>+CXG;o*7SufIMFdUd}=dv!3VMnK69Z5H#{?sfnOdTq_b3*KYDdrV@j)Zzp+3iwC1{ zQmp67k_pwC?|7XBcvLN3#XC|E&pB?R z)^dEz3S)?&YU7#8_}Ia%dKU*moBZlPBO^|p*%CU3Ikkd=4$Zq)CAap*jdcxoP7hK0 zJ&OV-Y~&E>GvAZlrJyC4?)+!>-{$;!N?X1v|M^{ubXZt-{)o)jC(K&%1O!zNTXDOz zje17Yz1uq#?3}e}QdI%hWT}Eq)4ijWlCw6w(>1-Gk{DLq`DZWvp+i7-e(TTwsd)Uw zC-0rGJ6dY6E!nW{tMd)Ezq#VQH@s)gcc;NtrV6&WiWVzru=zaGU@KEq@_g5;Zbs=r zK@rZx&`yTu5i4_01u&llgg zdonPTL#xS*92rrOQT?Lb7-oiA96?h0;Ou~f^1b61V$ z^G@Xk7>*IHTTpRj7Hzt*7x@^XK-9=Iz&@)uqbsI4yhn)ffHg^QZV6)#?(h!TOt#GGJG_x!XBXC00VA z$M=zEp&ym5OgihTZv`?(|GJ%rkGbB~I|BTOLA}#KrPDWy>ryLjd>7cib8~vVpF)FK z4~w|+E{k8wa-biQ=tb1^%1}Y4BbiwFMi&*<9P=qD+a8$!J#=ru+Wh@JYjKLCS7UIzL^6HtfL>7JKHaFL8K6bwGNwr#ZV^>04Uc65DGAAQ$#wqZ=?kj)$ zJI8(X+b2w|{N6RseCKz*{X4i8u|49I=Rfj^-~QH9zJRmxE3dl)x8*bBto+FCbl$vq z7vMZa3uAdr;m_4}QjKZWoLYIBIWs>;)=UePG#2Bab*R8Qim-1?ZN{0pIcpSomrqS@ zPPT;{Mij2YgXzQQfb+KM5>5nTUT=#ozBZ<%QU2$5Ty1N4>_YX)L6BZMq~RA?kV7j0 z-RwHlK2;7b8$yYMAPr>l6Sxh^(P%VE)_B#NI0z#o6dhA7?ujv&8oF8wK`!}f)y|`( zLz|4*q975IT%Cb@uF{-JxFWg)C{3>)swJGOgwMIc@=@Tz2 z5+l~*Zpa&J@?BhE*T{E%(ajjbNyrFskUvBM2hjlE;)~a{FjAo?Ru^5LdM-MPj&v9O z+qC?AttD%9d9vvKhAEQ@MV4L5apcnltr0{{I*I~!Eq^_JX^AoShSti+kj0xPE2)qT zU=^9RO)7fCzoo%c0v5Z=_LJnh9OARy973!P=GuNT z0WbWq#R58Ns!;Shm9YxIED|J(U#jhyjiLf>*jmpSvNlQMwuBY^6f^rF9z~cSSeQs! zT_l>BgGGi^xanfyra4m(_H1OPLzQ+Bb^z8JsxmIB>{gX*?Xo@-d&C0wWjqu#Nk8eIV1_Bx10-j+CJtFQcWfR|X=N(GcqKTD zEKIYC5yur1jaNAA#4S8(%$ueyG8LrLbAHx!(~6}RZ^T7o*xLkTEEa6smV7Sq3(PDC zi@L62Mi||e#kakp&DJMdd}OHE!o)C(&gguTwdt%|@&b}Kb^5(^Y zJd0sbsJ@v$l9*=mRJUZoR4XizrndrtTgMsNf>M_Q=&hIxNV-DcZXK_d)LT(<$pRCQ z(gViL+G%U0q9B+=)6qRt7_2Vc9Kq;WIO%`U&oD?9IEZ}ykoS=MXkyi;uao{4Wg>=} zoV<35y?aUWxsYpSqw_-q{3RF>;U#T!!mU~JR$T?%4sUI1Epg%(-KTIMUVM@i1~)^u zgIn=0qQ`&UefsK?gsXAodN4T67JxZ(?{aW=eikY9`%OdN3xi-{{uM%iwcuwtf|9-msd`Gj_-Wk5C!uRYDP_c5TH4va(k{Dd(TfQe@+-_jgF^5+^ zL~z?J7(#7vzS}Zji{-og6Q>Tir+laVG79?qK>2xx|9nsN^Y-%dE&lV?&S#A?I-JH? z#?PAkcG>WP{!xzZS^@`j=ezbW>$`Shy=`i^tzghSdjg4a^ybI47+>OJ_nrWqm07V> zDtijg_^|CLJ~Z)-%3Yv)35&)BA}8bX6|`4Y^yB5{w|iGCeftfVaQUwP<#bo?ip4T` zgH`AsK-=_v(>-Vf8kuk}m|PqJ>;9d0(fQl-=*P)!0V)ssi>9o&gQWO8M8zG^xm&iBPtzLmm!`}+;p%2l1(?X z<|UfMmiPv-cJ1fS+tGXVUCf>S^1OFH<#Vg*<7XdW$IDmUs=Ld#@?|If^ZXxb z8^Jf@d*A(5)%ve4J85mWOk>n|$I#kr?E=9rp5F_6w01;Xqka9Y3RsCB~PTfK3-zIUBYXOBj;@hO&- zi1(d|eS2PhJGaNp&-bi9T{0xHPjmP*o?m#bu2FYJ9oDMXLwol8G4^M{ipyIJrug+=nEMHF}7f*YO=iI%`$Q$jKFE& zh_ki061h3Ac~s-{6GQl;*?o=WECE+kuf8lI2i1nOAnQky4^ih^un1G`DK?L zs`Rd@cF$Cs5Fn={*;rxeQ#d&va78EE{U9E*e_PhvJk=gRys_HBA_X#@NH7HMfcEt> zH0>@(HOV)XHSF{?P#&MV5v#@!2iS5W1~+U=LhTb?|!P1f`u#h#*HDAjgwmZx_Ffu!3I!5DHi&S3CB*eqJq;$S6xoc7s zP}oU3m%l+Wr-N*iwr1Z-q5EaFZGXUee8*>nbB6uQWjn%5vLy_nQMx$Mqsd{>^3Dy+ z;Yi&xSKcAvf}1jAtkp8)59`*Ike?S1=a0-)7Jvvb^q5_jSzjBwx^6l5bgS!&-R=;P zdWL-0*;d!Cv(FgLFP}>m>kchr!7aUb+f?#}aGL85aQEW6%gpHXyYD?Rg8TH4efg%%{&$Cd4^-rpp#4K+#i z?b`V5A1!}HTOJs{PnM1BHfpl9@d0f1`)V&ZUKnEqaCkGeec4TiISNQBU^K)lU+=d` z%jL~%AX6d__TS1kzx=gdzxORaz8#EHvZ%d@7Lp>JR<+>9m^-J%A&6O|76>mbD!~ZT)E%9Vb^cWy=A_#o}IpH;ZKiR zqQ^ro+WE*mU;k}AzIWrBzWc4CF4W^A`KN~edh^G5L?~;v7b4SQdF;#!6*5}f#B;OR zq0Z{2-;K%ZHk;&|-0VoYY5Kj~pt)-s+mtENs2EW6xDqE4!cm)rl5oo74*sC^#-vTW zH-_Z_Y2l(E8r?Us6`>yGC_rqVIZ$GQ@NgBYo2#r)g;vfC6|s_qzZnwT{@l=>8rq_q z1$qm9Gqkt$$kr3|js(dzoe*mJ7_CTolA?Du!SahZFc@WU=eEPrn}=33E;juR!R=nY zu@th~CX=JMl#7D__LprgGtjr|Tp7fnt_3+7NR^`h@v*MB>5;EIc>miT-ts`Oenq&h zZ3nOiD_WawNKW7cF7j>Pb{HohydXq9@kWy)VemZOc*+9*OdeWj=%@srG3gv{z_7qn z@BR*-`k)AY`t`$cG%pC}@P*@4Zymzt;vDBc4iWRkH3YFnwDTW%IOev|3_`r}Xzfr7 zkC?A)pwN{80cO{gK48)KUB`(xS8NY1VpSr3cG%ZKd#|`~BE0A<*@6xGi;kX{m<(4_ z8CImdWqP6JN`?u`pw^Uqd!QU9Q6hS6*E89!9o;*SzP~)BP5Jc#ThOy%5l?4Z@SM2J00g#78bLZNir>8VugyEh`ke3bQCcG3in0zWC^8IN6 zI}zGK;fDOe51}8A2?D&04R?;Mon&N(fJoBj%sk2?a0or+eHWqhit-HeXQo%$(K2k8 z$Z@UZKjKQ5wvMb41AIH+D|@8kocKm=hC&g?jAVMdhIDZdVCW^f_a^@ry94=UjWWU{NBTF#_t#T<$l@xZ}??TPWmrH#V{m&fG`p*<6z^;(XpV9 zv1(ZJ+OtujP3noE0F0R9hAQ{wSiG#haw0>2?Uc0#LM~inR9MoYTJ>D}Ur{|Azpt)x z0K&{;^HpyvoRgG$j#{I z+-y0l%ho(N4NNhMdUESXF5gI-NM8veo3D>MY6c>!M-kNeNOcu^PL;fwe;(KvX@9HG3cHpf<{Vayf-RiQG2rcfsPyikM==r~ zE*snXNL&+fxw;#P1|!jMH_p*bA>MG!d2<>Zd*)<(MhrBt*P#jiH53d@lzv`EO+WxR zy5uNxX90z_w}(DLrCg6hL_Dj<#fWGya!{Q|ClACrG#Mgkj5|?+uZov;*Xg(=wP&jr ztap*Qdsr(Wy^JVBA!)}(b`os|8i_0!C|UMy+m2FMmi1yc=$wvr(?E1V1O~#0x@DI( z>2d|pFP%AtdfAMxup=9SKjNS=?4f(@a4LwHL#QnZ-*YS_mbR?ml6FM55fRUemLdyy z1|83fmPkxazFh|du;!>IqjXY7qO;1QvsP=3loZ%rmjRS-O?#V)3<%_OzV%L>9acU7 z7qTWK__q7yjbQo-w<5N?ked_2kt{n;&5oWtH5C#ZT`YP_ zzdV$DQ04&zSaZ1CH1n5-+A*PH z@Cix6!O0wO&v`27PXcCiAC5qB=b*6hk7qM8`cxz9(zHVGARXqsP<0%0VI-=LD`k|2 z-rG4FG=mnh3tbTKZQ4DRL*Fnca}+Q`(#+s)JH*i}Mj3*c{!D}>9T|5FBNi>;c3Dgy zg0JCfDRm4LO9^zQ|u{zFpyR!Oe8wi+AOx3lP%1E|9&X_I+_k3 z=`XdU+lOY}#3`@(Qxo^EHo6gU)zRZfk{U_&_JJgRpaS+tez1qvB@ zh`<%6F9nB4xH}GsJ%_k{qTs}1(I{i!Y7Ma*tra92q|R${JhUs>ANBqROha0jk=m{pk zpdP0hE#P*+Ja&FftW+RiTCB4#G1|tl?ff2!7@?r)i+BQVaw4JK6d@~P7QRVrPI*dN zTW2QPS zlv-UV3VA9jUFvomnMABmQIP+!B9S1O>ws_lZ182_jjebZkaj>I16KlRd&eIokZ{L= z0(q`HTv)kusf84EvU&w%A?d_bc8Coms=j+{;oX#^rvL5O?|#u&PUn&V!W0r(z)0bU zssTEaFBs#TKF~jY<2omkE-|0lV`>r9*KIjV zaZDFt`X>%{NeEkURC8R8M9|=JiZ6}K!jtrU6v?F{{P@aAq>}N`Xe<~x-6|XxB9Y`F zMPWv)?=gs&Obv;BS0$9SMR7OMpVLa& zbd&sV9aJeO&#}N&w+4+q#JHUh5*To4WE{WV@S9*Qj1n04F?+stx(kT_^F((nUaNX?}okpfw2)2@hg= z?Gv4Ia+1tk8pF;a?f;9&AIbxVo9azTmzn9_a3~B(8S~zjX9lyx3~HN6q5h64^+~h{ zxhS)~Ki_@_&L0qrMv0t8IlU@p@mZSzkI2aHclIPV{@R02qL@3-lz}yU&Mrh%8m36x zS3x3rOCR8jSxvxAR{1(bBW10@v|16;pg_g@s8vRQ>dE`4RR))?1YJRL`ZYWiJi~GM z?^!%#r^R44wa@~7)ss%icx(q4MjQEiw`!Bk!A?d5IA4lyYvDBrCWx2#&x_U6^Pt01z;bK zaDDeOnCj4uPV9U{*b`^4U&i+Cn9|K{f>Rtb>Xmr?2vmtLgCw8Wz|EoCVx4h8(;5d# ztHQayLM_K*B^?)7hP-Pn!63ZhN3whqqkP^TpF)v|t+Abgp^C~9Rk zG>=_16AfL>s&gl5#l^&7K7Vb#Yu4gr?Vb7>b2%tpM&Xb%3UiE19equA&CXPPLHfNR zE=G%rbBt^?-c}}Yir8*I+an#U4E(>>Y1E`NsR($B54&DC#bEwBGg~)6qoQZ^har5V z+ot_-vGeEcEXNg|;$3)(&0776W{4PIJ0wD(WwQY9lT0PzMxF_h@>@EOTgyj%+(JhE zPVy_$@g6{=?Kr;&qd(Rqp8TEU*xw%*YeJ8v#w7co+~W&hRKv5CY_ACPGX)ZD02LiR zhToc_1VUw%AGmPrNe+@dg@!qX$81D@vdOGKuzxjcTFum{f|8o>wi=)vooL4l%r__L z85ZstJdB9N7CPF>G2?~FvsG^PCNAM+ST3p^y0I#m9F3p0fsNX_Ic--Lrw0nP`2QVeI zBNQ9`(G;>`AuJ@Ej_5JSm$-#DYsrqcvDSQLsQ#DrES7`UnTeERV=2b75Yo(_ehSug z*e0AW=2eGMK3&tprgLL=At^CYN!L`2NKAtC@~0zI6yQty=nrBJa3_^ev=_W+zzjl} ziDvd>5?BH>NWUo;ZgT)Hzv`8NpQ;xA`zhBeFLsz8Ns&Cv!Zkd<cF^#8rrHtKkE)EORqghHcEXY)6IeW zzNm_sXMTmr5&zh6fUpnI^Mq+oR1xQ-DadK7~o-8F>W%ZHxw0}(9# z1E!rjh~JgaZMd!k(;OL+MO7SO?{Xx^hhw0y4#80(o`vAJi9$||%w=~32W1B@rb^`0F#OyH ztCGd39%CH)1IaV0VM{&eh1dD9d-`Gs%vETxvrno* zcymQ~#6*q}T#h0)sdV~qOPlQ|t@@E4eXf4U4yOq?Z6aT60je+mc`%-zEOK-trkzCj zap#QX*WP&O7}#TpirvDBW=SA4O6J2Rs<_jU9WS;wzQF^W>26EGKIRn!v6^{oyv%k# z6tp^rZL0`Wq>@NepHzdL#w#Ur(f~l~7>_?))#hj+9$~^&!#Wd5G+z1JdDj#F3HWih zp!RZIKHkjduFAQ@n@5~shp>r%e9p3T{=ob+P3L$1_3JS%-qZO#O?_{Y&>J?Q`Sbhc z2l}pon3HuM9WQG=Bfs%5n3e?72(ER5fXISy)tsJy#n8r6n_W+(uUeRxkD%#)O7-Q4 z;^qG(?p@&Hy6*eVJ9lOP%nSey9}+22k27N-1}RYlWl2^UJ$NBe6!oML8oHS{(%|rW1c9U+>#A#e7 zsqI~5o3w5>j`sWepL=Hp1SnCCn~K8Rd(S=3|M|bq|D5|e0)G%W=JT;qI|!rp4`^J2 zEQNJz;0t8_!3y!E3xcBIN&`p8q5hWlXnVtTr2#FVZbfVY zXP&@-0co8BZqI9i)TcgWbIloPH0<__Z+e!W%*&-c%(`lay>s4Flv$!?&YWQ3WmtAYSn)Ve*i*XAAVJZ!ARtqIwS3!n z{=)g!I=vPl{V%C!-E9Vhg1e2w>R_(jK?=$8b@)iWHXoNld3f9*)J0?t`olsxHB_WS zLTQe7DD2{3n}eO95d#Gt4Z0lC_qy@`o5|p3Ik)GiK?JQOhQ}cN%}N#!EX#l+YsH3tN-WZ#BdROsBc9sYEY7YD| zsZqUtY6z~*@#1Pi_kmA$vx}i|O2H~?-+oa$bYv zh3QUKwaj?apJ-gO&xja}8!#R&=a9xyX3{hoc8+RyX_h?zi4LYFHKlQDtk=((_NXt= z+fglfMid-=*YOPa@#xE1H2+N)k07R2p|{CG9rbl*6pxc;6h)qIUq}PijJ^{DDA1izWmm}!XB5QiXvBdgG0S9QQD?J`Zu)7G zrGk3l6g3^a@^%pY+NX6aokMru75(t5spva@hEDBrqi%F^SA@lyAc)6KKcRo~!=Xj6 zb%=xWG@+(SYYx8>%we&X>Fg`z(T9Whze$mT=o*z3Ilw$?gw67{=nr+MzP^Xtd45DF zK~CtIWp75ViPtBTZ?aH`noFwvRP;#@#OEnUhlySZ5i`M~Fyr#gp7c0^#we&ycolc& zt!S!q9|R|~z%lxd#m<9*_(_K=jJoXSUbQmSU;8ySUnS)Oj*OLZqP7%np+i!NrM$Yy z1>NZ;455MOrl)q52FL}Ek?AB=$PHXB-8LSS_CQowq=2|08)33{)97t4oh$DlZS{M< z{Cnxua(r{)`~$orYR9Tz<8lEBYJvexi$quxJ(h;W$Cb-jg@IaTaX+1&X*?WYO5(AM zRdZ6r=r?90@3_IG<_ggbb5X7?&2SUPw|yyiL}&R#FlH5Fzgv`JEK+Y72G)nmQ@go5 zBkQfpEpvL{MVD(w7h9!UU|IvHzkPIywmc)gi9BWk-Q;dLq_tzui~TT2A9LT=DGec%Y54aT5$N3pu^S<#c0|iGG;K>|NzsVyv7)_g;0JW2Sb6Nl3w5ZJzAf@fz_sU%rVG zMgUVz>ac~t-W08zvU3Ay;1_;-pH`Jn$SCCJ63_|ablj#`+Lm5WyUuz;S|Bg#9P8Le zI|GN@aP*gaIrse>YLDekrki|tM@%CJA1aM%AVS8&Kz!5FO{C0lbji(2V(H96_L`=Q zyp=bJ-TuOZ36Ui?Ut=$Zd;cT5;&dJbT|SdDjJ7=BhL7wj?WXx1OwJ9edapbJyMLgx z+ll{k92EWb$Q!s(xBC@0S|J0UbVrRS_jz))Zfck3t?ov5%N!!zAOW97qy%Kmi!eOF zSdttXA`uxYhHN5I1KZo*!-yp<=_L4vx9uB284js4+!jt^8_DQ)@0)Ws(}q`0nAj{f zNB&98o|;nYp3D=<1t{AP2`C{09JeLzG6;D=W|*RAcCeJe$4EN+7zY?*cW?w6Ym;mV z-^D?#rL9)1ybWYJZHpReMn~rvDtOHTg(u1{c5q*I7jy%b8165U$ykJ^mOdEt#Hr|) zEu<$Xf&UsCY(uh7#Hu4@MS}&XPktllPMP{Rw~NkQC7%wI`Z`Ro-yaG}{%y_j&AT2$ z1QguOP#7yEa~x#Iv1PvX!{r+V6P<2lDkc7~oRKFaYNE*2DF>BjI~uN?{2{~cmZfsG zh0?|VE#2?~5)t{DS`8>VYPC!iO^~$fT&!Jh2MME;v3vI|+%vtLmx>-bkLPY)+Mh56 zO<;%HDw{@PF4`O2rp`UOODWsk4l(g=#}RrwO7XnDGZ>bL60K7wRdEXM@H$0hSRn5x zDt%s6Qw%nP3PeJtN{G{ZgNjPGj*gNdHiCJ)nmLTvAATa%g{gl`&;Ok}bfZjvm{8so zAKz8pEFKtJ;fjiri!(Bk0GwnsB#2ZHBZ8O_I@)F?d0mAnZB#WO);VmtIB#*Lnd z$vQrAg9FMtN^@crIafqF3CK4?cF8P4ntVVMYVW9gP?b=y;9JhYmOD=#CKe}XpPF?9 z=y;`skF&%Ku@~WcA%oLqp79yN$B<#MQNVms37)K7~Q2etS-fxF9!24x2f0KECTs56HQV~#ZK=$uc zjAWEMg_0u-jtXdK;lT)3mP8N7>)AG}!2TOMSlX>}xo8l$#A>G!nM%Ln;dXaYKUvxh z?Tar0iU@W@5f#mPotq*(dAp_lI(M|l+8_Nk;1@Khds&QfQh43&S6@NvRrgKT-Tf*m zFe5h0IZq}y+ZtWw8$r;gT}exN*GFL!EytX+MSuW9w&a+#U>VrnR-kxDA~ zR?7;8?|51K0qvtbC#S(x5n-ab7(3W&SyynTOCrZ22bJrv z9i5bo?ofz;Rwvc>wWhdNA;H&890@J60O^{0bSMSjIvzX>F|lRqKC^A(B@;`Hj?a(b zW_Wi^YtVB>DVN|y57mA%G%bwrnAYeuUb<`1wBCs~{HPi-gm-@Vh`q8E%d(wCyED|a3b^yxE-xZt&qnW-%2MmPEn{^q!+%`M|^tX)Ts#0qsB?#ioT>oqm%OK^(d zjZlFd!$I`Zzt9))!DYhD0y`j4;WMkqhYa&dTnlj_e}#UR0txQn825`MrD`n@W(W9O z-_yJ930KG!Z=fR**fy_aqF=QgXsmTdf3A%@4^xg)`H~H6tQF%r>L8Q^09YnYoS~a( zg6m4mhjzsY!Ggk%r&3vq_J6ocAfVPgxMYZk#F^}aPRs27VV&Hfiu;fp=t0iDrOtY( zifHk`yq)$)KE_B)7>&>%i})BZgd9^02zTQO>Cf6?8JxKkiaSf!u8au}3!6#x2Cn9i z2s#`XDLU^`A51^TMMd<(Hk^4@8^1$ujw*pD0_Oa6m-@CQKJ$Q8T$g%nu5eFyyzrZl z4%%At^cRd@^gSV-@i?tp zLlmViwn>LG`OZnhqGn%ez=!<$mO)R}yUr^bRUx|^w#P6tugzJ_iktFPQhJo}D5y6c zqa8~I>ewy@0t*UX%!k>F8ATNpEvP6w=>G}99^vO!4m;CA2Bx0PeLUaCrDf6y16w;nS3E73dY2Y(7+Mrq=f2)ew z*hqz7ts?V^hfh&{%p~=D=^6f{-!Xquu>{?}bJM*e`n+E~j*3TyGUFCGY*@gydjo{W z003(tjuui)C-td}jFz6lAsjD+eir}p4TEsq6tN!zM7m(@vlm&E&Fn>S6R4SLU|sdT z@}!!s-HPr=C5m{A%h*GUAj59s^q;5$ZKTINdo+ zYQhG9Ixj2If{Gu_n(LznaoeLO#Z4oLDmaFUd zK%@-Q2o`mCxm*~(_~LWYlgYrMY-iX4k-?9_r{=Yu(g7gOtrWgjKo9}~F_W;SFH8Na zKl-zKI}o@Ux@|D$R-XZaK?4X>LYY;m%N7TQ#dQInK=$(Z+o>1IgLL;<;$-j|oMVN! zgJQ7#4#2}0;M!QUVRKJX0jJ%J2f%^NQ$*^qTlFYFQ0`Q;y%w=yk>G>RfBL#P;z3ZT zyJLqRFm}ex`kfnSH&GneF7!sw8TfnYi7K;!XXAl~c#Ou`4Sczrf0;q&j+_5Kw6SAm z=U=+?jSiZcQ`At01>iN-99*CHpP`+vh)T|bda!V^eLIG+97y&`vx6u5^>X?}$GJ)ncfa2!moEH= zJ?Y{_j%^p8B`jFco6(mq;BDHWkL~E6OAV(}0jx3l_0y!^tw2A_LcMw~WF}QFVZEuV zvR;taST8{6NUjaIfl-|Cbnfu3r%GDdQD1S4m($U&h>>113y?GY*R}Hco=W_(Nd!?mu+;Q4kok28&G1h+QmSyU1FW zXAj4ac)bH-EbomR$L8g)OGO0dMLUl)x%&h5Tpr^3hf49g3xvf;d}&kG4{`b3bgid9 z0-~v%8_gsn8A<}esd|ebNHrh)q$MEJTo`IlO2JS!ss@fGFqO5}S2{TkdK~2X2yJhz zJwEe9rJ--a0;@PhClZjQy`tWmWEztC1sBZFOmEHL^i`O0N9-ppYRN4Q?kAG^y|N+G z06ADIv|V7>5gsg5seiFn`0j!-jP96+YfGU`3cV}JnNAX-xB?~0d;F6om|e?@>4Z&2 zqM7kpx^*dp5sMSs0+9txvmqz$@w+yT5;Vr#GW|D5irw&@3Mw{V4JT9f)`O*O(1QJQ zAqG7P9*%0%emZ`~VfGz5;(i?r!b8;M`VHUFr}X zEqGsg0h9|LUj?ZOXyADkZmRJOXUamP67 zuIGslHI{>2;D^Dc#CcSdNud#|q_j*Jz;-wM`uTAOm|iOf^o762*e0QGpOdlkv3aM2+18xXRnQdq&o)uvxf2a zt3qE-8isQ1JV-qtJeMgKvX{2Mr;;)EBG{^=&}$7K3JS6VECv+9i>ZSFK7wDx*jXBb zv?(MDWnQw$nsp$Fw;jeoEQEXT5E2__R7{%#(O=qXdEV`KO?BYkVEux?FvX7H@Y2pk z?f)S7i|q$v^Z3y4Ed{zpg4g~U?+_cV~p-_PS5-4|1-cp_u(ccZ{UWO4>gk| zoWf^a@VPh}2k$OlcH8y!k&ekGGU{-c?wzkU;Wq2IQ(*tCAv|BAkNy$9p>T<0&e{AO zl!EYJggj$?55q)*z)lc9;{rB|^q@4MLOw+NSNed8RhI_$i3WCKqcDzm^5_a9>nwkioj`b0mv*2T6{;68j+FULcWxO zdx3nP{UHWNKJDE)57Kf9R1n?#1lep-==kz3DyP;I%#78tcJ!lh$r$q1FP(7B2PyIX z6XF&yY>?Q0IdNc~v7-(Slwe3ikcv~3@{EH1Hf+*))-HTq$eNpDmQmV>>ki2!(aalD zh%6|No`t;wDEBRh*zrvCmtgQ7j#%ny4R%C;;%1^@fS_PMr*rzzeRI%)%RF+5Fnb!M zC-Wc|_h6U}z@h;+*XG?|jf&SO&N+sFMq@RmH6;j8+`IF19E+ZjvtvyB0Q$~GTOL)Y zD2Wz7#SQkgQ6?>%|55Caj5#3k(k&K_VFK0#TejyZFfvA_+nwdV*OOWnuThx{uy@wVZd6t3*5EM)tM5eU>u+t z!^FaHnQD;O0Hv{86`DOmnNEWCV+g#~O#_1>h)u(hDJ9?pNGvc!z46V0xqkpyrK9>g zK|7gsIB!}!R+B)Pq^r@}-}AHoHF%r@$gM2kPeZ*(S(_}%@Pwts6Ng6-X%yifjCP^S z_R%ywkm|3S8eZF}NJYVv)<6nN|?36xeXBpXDvg%@!f&7V0!F$y$RO5%PmE6$f!JlV6hYEA?l*oC#;#I2 z2TL9u*kEUpH6zAA=6#H9JPxv#;C}KMCfFbxgvLAwt|*3B`J9Omi?9b6hC5X9xmRFf z7!_!7`RH!N0}yBuMo>oNwL-qI`KUg$6GV4$T(i}oPdY_^8pK-Qbw5(Ro_$T%bzj}> z-xPoJhVs@|UtwRG?`PaIo&5%AyW=Q>@4xby|2w6C_q5zMX&V9uQJrGm65aAmGjY7g zVZ#153JA%P*MHLUT0rr22qZ}kZzK5%lC-3h^vxcXnqzzu#q_NQ8Ad!b)L7ztq7M*g zyp zWL2+qzlYIn*z!Rt053zFqoC-u>s4WNK%2RjU=n=zEYWgg|Iw^?Bkf6qDxbFK7GRvI zXc;yH$gs%~4S3u*n*+n)1_vLJveSH+h(iZ*|N zWyPevR1a7-Gyp(<>O=c@lA>ehIob9n{=tjC{jYxE%RiJl=39s>zvdb>SieIzhEsR_ z%)<%Gl9f#mAq_`^0raSz3?_jsknMqOPadKKvV}hhb+`_@roV4H)s&^D=-3k5Fl5fC zH2NkH2ZXMp%BFTQ3u%xKcaSkBe97hX8-USv{sz2(i^7g1=Yqo&?zip8u>suOldCxlt3 zFB}B0jMZA4C;!eR7SWp#U(bQVDiiDN63)ULmU>dk(}$6p_MP{}jq4o)_%%;IOdwDL zMO`1Q09=_Lrj)$F*}1Fw=rY{b*I<o>(ZMprZ3os z6hB26M89Gx0I(=Qs;>?h1S)!x46p%m@|S|}idv}TY|G6IDc{sKQvWY)R|clTB{Gpa z%==+{&;H9>28A@k*BSu0igC;NIU0(<=pG^S$01B+&zlpx3yHX+(rb2`SvB#}imyoq zc6tp4(<0L<0~?{w@J4Y|fUV!*wwyc1j(vPQesi}36Gvk(dmMVeXh!CT`vNVFr(h7i zhd@hU;W&)U!EQI-eZ?}Z(PFb|1<1PTu}C;Acw>KZ*=UJfx-%2Q5<9A@nnr2RRQ31| zQ~@LO;{&%i{bGoHv%co_<8`?Ba2&zXFk%tJ8ox&FxsxI9-XM(ZC=Mj>J>lzG@{}%y zVuCSXw<*Pgpl#n1{wQxm#HuW<%5H{ly!4Lr}ab<*uAP z5Ii7IB@cD54n;p2z}Ns~^4?lUC=2T8h?s)n*U;sRVIuzp{g|hm{}2bk^c`Y2Z+Wj2 zXtGrZBP7BNwE?OP=xA?p3DpR;;ZCS#=+`OfwhGliKYgwzDE`+QQ2NEK*EOzA{5PPprcUZg4uUyM?)p)@>469Wk%gpB%({lx;xz=rrG@CVo_a3}4V z<=zsvk_ve(UI11(ZLAWV@{rf9c0!iZwjb7rnWoZiGxMaGRn~Ia6_qE2atZGM5#i`E zn&M1RKsocq-Xf}^MhsLN7 zqxT?0eJ|*omPWvg1Bm2)4zlN`z@9rUuY_~O|4--iUyvP+C7^xTGCU>FWwD~k4ayqU zNHwy;A%;Jo6>fAh`M=ue4`u82Do0zAOm7K~!FxjRf+DeW8*nCwZ|pBQKXRu~!$unq z6#^+qpZLbdXAY^HGsiF<04!}y59jOK1erbF)7xUVtCV32y1FV9_I|Bz48}q~?Mbti zJ-7x_l7mF3l(o-HIPe~-?o6JCX+|~imzFUzU<3=!^s+}{}^j~9WH}aUmm;QB~zsMda;(kA@l@9~T!)3T< z6u2-VBABDBIp!Mih9b|G6sS#+v1v4+&>~_3%B0DqCTP{4>P^+&q%GtEtn#4v-8&1f zrm%s);y@<`nN}R~3RqA>qDVhNn_f2t3^9`nr60)_4uh0*W~Q+up$ve;trc$uFalG$ zV%w0(@-@?3i0w+}d9AE*y3{_5T4PBXsMNdkuEI0^P**}1JR%B2+NDi^76E%$uAAvP z)My*rO`OOy;yVMHQ0Bgy2zxrtk={$~MCGgh=yzt#J;eEtlplJzWf&omc-`Xx-Vt=Oi?XqZw(*UBI+hh)x zo6>oqu>Ot`Ev*wviGyj3!bBtJ!V(Edm3Z{URKe2Xi#yeySI1Ui4+NN?|aS}r0nC(tk&dQ@KGLV*36N|0FP&~(S zAJYxi4m|9-o$B;f!=l43t0UVqV!p!5{Q!-yBd4jk3xKp{Cq(ZsYo1KDKN?V+^y@%8jSNFq>J`pul68Aa<3;WTO(OZA5@{83(7DA&Z1o3?@SfZ5c|+0Sjhd zg@}Zpv#E$99O$a12+M=T7e8&-2TVmU&s>rg!(D>EgbGAlC17JJ4W=HPq8hsCPnZ1j z_~RsRaZ-K`vSF@3d7v!CUY;qDH1$Lo@KH$ZJVGC2Mh1labdkIOVlV*&eS>##8fNT8 zk@!oVW%xrwBP-3dqMC3lZeR@fWDOz5V;9afR!G*wt2{S=z? zM;A`Pfhf;u7HMz=0`WU6ZPRHAD6WQ2`_Be&f)Z9>SPICeBaLNnmbCy=#w`oWh1;rL zdc!LwRd%R2RQFY&aR`4k9|r2|)itPx2a|uY zdNbvrLuUPI_&PWPn2V61`?8!(ES!;&0I@S$I<10CkJ?r?G;f{4z!YK$2r+x0uJtBY zPz+8|hfb@bGq8gUEKA@&SwgvG&U&0G)ov>qrhx<4V~aNek;B@AP8kV7|eOVj$}y}9ayD< z%A9nn9N@?pJ!d>P4ukI*Acd3Jdj*aVoP#U|GU}|R3{L=9u?aoCmmKmUhYT+v2cojH zOlIe^xM3hz=Cj)&bHHv}kwo6KjNy{{+($m(0QZ9=hAb~mcSs^{B%#l+a&8PPecdbD z+1V$OkS3SZLAIXqXj|HOK4^?c^dWi3LLj10kv^V8io$kYMZb;-P<&x$p%5pa8WcXN z(~i#(QY|Gcgn&>wq;uH?n$|WbM7RYJ@Pv+nq32Tch#E)3@1SZfWRzk$r!gVAy?XXj zg^#?q%3qe=^6fv6;#D-i%gLS!A0dLA^Y2kWiV~bm`_TkQQ&D zI~X`AUHCo;Wa(`+!LbBws$_`CCMPHr**5uX;ph7?Y(n#`k;O^z#VPEkim?K4>XW^# zYOKl_dRAYSi3znTLoRG%^2^O77j-8Wv(%d_JP^Q8qO@{#W+IH3px#`3706Elc#!hI z(#%M<(3T7TGOr#17QW}^1cRvGzDq!B$ai`oTyk8WaoCXQ#mBjSFl4B45$JK8TT0#3|R$3bEAPO*kl!K z)*PcI#S@r8@3iF<0sDV_z`zt-+95Vf47uO;7{%20ctAbgp&nx;N1VvTH@vLJo8lf1S&z3;y{f`H zF0(OL%Iq=06u3F z_iCRXi9Z6H(W#OiU#qMmpqML(F(Ygn(iV2a>yktkFOc^#RP5VRU>mpI5f9pn=cMqXNkaiagz@&0YLzHRrsLQ6zdITE z3{#v@yqyK|xB||PCOzVBUX&*S@jdstogBpoUXjjxbdFgNep1?!!^lblC{4XxOu)pi zQygZLWV}JmSPpasCF*l{Tuhe`x`=9h=2Wz;bGM^&cVkkO2=r96qsc)Dbj7LO^kw_H zeenXq3c-W~5zt-V2h%(Jg)hbGN$yxKf*Z&t@&noAoiq#&3X5L5G_}%0T}TyBnXruS z%P~2j+2*0@w_s0v@?bMRT6XX+sh46YQ%`9nuu7aKql~hvHm>tDXimt#xdyi|&wK+A z4CEs{|A^DS13nKZ#3}wmJ`5-eZcMwN!zK8IE# z^%%FJJBD8dQBBU^CNt|oMblb)^CppO9qG~6mJe}rP4$5YfyAM?7dEs@q*8hlMqCio zxr+Uw-ocNrS`ieAiNQ#Lc@T2G@YT?2)~LO%Bk@EJOumz9mX0Xiw+QP4YlYV~X{uNQ=uvE# zF_%VJL3^SBjRhu2l5J1xYHMY^)rLlmS0myey=S`Mltgn*p~rdVjN;s zrWN@z<*OEm=gaxw3)>SAB%~X&5Stc^!IS}|1YhtTbaoK><@I~BUpxAt&to22av9JLy z$11+Yp%KW%S8%DqFKECvP8u|>;CqvZJ349VjH#jOkx_x@d`)gTBlCEJL}*Sq1vp6^ z>n^9=r5Kb)3ZNoAiE)8YAVzwv<3aOmd5s@SL!y9i+(v7|Tuo`5iG&UhdODK=s@|8Z z01c}aisQT`FCGAZYJvIU{Op1J`VNj<_42(7Q&Fr4*Vkh@YD7Z8#D!I7LVzBiE&Pw{ z!P15xuvx?a64v&DB0LB%LSxuBQ>!-+|y?*pIct&qSpD+A=I=16H26fmK zATn+vUsN9xVz{FDh|`T!<9@}HB97#PLxFdQgvOm=eHQAYa%HS8Y62gLv%}XzmsJl6 zx5i-6FL=6SZpgPlsl?T$H8>FVol3D_2Krj5#OtO~VDvkc>ZcTZ4QLp9qe+=Z)=`A~>UtfyGPU)y%qyh({{ z{6v+#FHF!7fhJ zFvSN`^M(H>pDJQtC^CcKaDtk3lxS=&2>RcTG6(OovG{|PO}x`!xj#-1IZt0@s5!## z)6YhC$JRsEmz&;~N(uD=P1&Cs(xkSLstOR3UbBX*nr~=%K#SO1=;_>039I z84HXCaH#R=a5cAs@bVM}6CSocJ+PdmgNDq5YpsTAmnNk&zt2YhKRYIO|u1JHeuEcMP~={>&wsWm{S{QT(e9+K`kwJRn`VzK}5i@)Q=MJ z3g%=US)7l)e_+ll1NrC^om-{6%<{Lcs{_OqF*5(prOG*=Y}QId=!ke}PSBK!3#{ZZ zkef&0fS`^R{0!RVekl{|F~cX4PIQfw@sbFm((4)^7m*SZ$&K#KjaFUdz@YTp?kpV7 zyM7jtNwrVSxJ`->)0*lgW}diBXS{+C1@f^ZER)Hj0n7R}QDCX5p5kJG)JJiSe%oCG z8ZrGAK}41P3g|_!>Fe;o!x4b*b7`|fj`d~mNng*v%^(B_$jz5XMCi7dk2EG0)jM{0 zPt72xc327{sKG+`U~lURIZ%zq4Xg-C5#j!AZ1N6EfC3qu?mct z4gx2l3WyaEo&-EuKl=Pm!aPK%Fbf3IJOT-@XajlltKVmvccjdMjEJZoGjXI|#jlB& zMnM`z{& zr$Rp!uwq>Jy>yskuMQL@MJ*VA{y+c4TW|lyn_mmgkH7uhf9D^pe&P53{skQ=5{$3@ z%%A;I`aEdC?GI%ymhE!kJm=lr@?9=CXD|NgUkqF<7sk2pVn{Cv=f*!l^*f@p8+r}p zh*$FBG7wI*4Wrk8Fs$?NslOPQ*FAXEAN|(9KVK8P!{{@G1zukM!El~i-VK1K(8(7A z_Mj618vUDgobjunGX7*?KKiQa$j$Ky`$BXJj`&>kJ#lUDoG`kD9fn|8I{N%iUdMJ^ zLpGr$ON)dM@r_Klo1F~8o805&%w?TaSQ!6D+RS*~_LwaS8YwZGL$3c2oggOt)Litf z^6h>)oVVXcIgJ&!D3D5@8}EN!W_TE0`sP6aCsayO{gK(v#A$4}f?mp?A$3a>F* zGH&A@2lza6klBSmm)ng_MEBLp>FB;id2rPy?rUt&0pE07bzk8-QrZfsuvpZi4d?dT zJ?4OJPMXTCXmDIc=ZZg}@7Aa83U56JW`2q<;_2*R5t!`*yWdbMRrqY^{hq;icz*ol zluqagUPEa9OMH>xQYj1%(!4EWSUZq!7{R<9mbB!AoGOwM@xQUBcQ(n!X?7RWm0=C>=`+B#WK9f z%o|=Y2oVQkxWG*8s4<{F1XaOh$N8(GnhWQ~SAYDU|6=-FVZ`gl?EQNaOca~wAVDhL zegD`lB6#`Gd2%!>9tjuR#RsGjHu`cc&e^9k7l0l&3&4DkFD!+Ak;KTWg!Ba%w=B)Q z?y~0yKa^Y^oGX4BMO~|fgT;Ra+f#HQEch-(7wVEB+>Q&uedI2}JYVOKEckBRf7dtu zi5oARV<*6U{0^Ke{5Qo7!i5nR%3L%98x+E6j+#Gq&gUd8{( zcIl-HBkEba6E$FyTCi>>YVk8W3%{KU(-*Q95{+0#BaQxiE8KAmb>v4^2TFq;#4(`d zdyE~%z3Dph_`UvPg4o%}S5dG2Un-q>|DJwMB`3>}vTfSD^}6lX@4D$0J?z;Ngx}Ja z-7^sGDeT!ZIJ~F4XQa4g+nyaeZ@hU=A^I=B$@+tRkU8Q*lkWqUBO-p9gXJq9f4>I*E^0A;BDPqTl^=$cVO+rTCM?!6FXMYhMaC zNSMLvI|Y8o3h=$&OP^8!w&dH)AonmSUpGAt2v{OV;LJt+^~;p!@OlBpl8N4k`WJg% zZdRk8+o^m-YjHFUn=5`vo1Gnjs>(w@o!^FlVkQuY zOU0#mcPl*Z6E`j(j8RUIJ!zh5^Pi9ITlhS(TFlPs{Q>)2uG_yE74YI| z`HeqSj|rR&UoZEK51t1-VE8&`ggq_MYgmy#vI^T~_9MQBhCmhhmveZ4>9H8)KNhqU zb*VRs7xn!T0+IC7xOHsEQJ@Wfc1RZJBx{0isAA$W$Uo45DzwV?@)(K$Cq={t_a6;# z1n_qOhlsa4qg*%)$0b?+$g;ZLtnfO^s(^4iHz%(3_ms6;rS`(|DG)?quJA>K2dOoGmxno!LsBipt3{^fiveG=L%>9L``9HW|3AfTDNZS5WU7ct-rO|r z#InEV&rm1%aGfNONtdti^{7BC9Wqch6yF=sJ!ZP_yV+Dh%zG6tD1rGxCJ6*kVxE(O zjaR3|Vr0FPvurG9WH>?<1)>j<$*~IA$Q(xvA^@1}C_zb@5dTytMWMa(!LQHhrtY%2Yo+&5m_@3 zUH^E59ovrn;p%F53a>k+N;%JOzZ*Qvxn;ykdlfOuiDUD_g&>vu7XUSat!4UAA^W%G z0%5Oej?>lX#2Z3bS15jVr`%yefV^Zo9XMwj#5`PFzwe9oGNl5IP8lTTc|o1BxwXAO zseqG^Ybvq<>YTX%5#4{g!N(uZq5X-LA3b0m{fMtB$p)oX1vO83b`Mb*&eIc*_ca#k~$^~9|=w&_>$L?`wG%o)g|v9 z&VkG#;cVeHbv0!S^PTmWpWa!x9hEt{$q-GOH)vjEi~no~qArkyEz87~5TlEQFQ-!3 zi_z-$%g~nv@bdR>k6iI*cJ5S~#Tu->p@2%wg6Jvw(eK~Rw2+NXU$SC;0g;ns%sI#v zV}bca7n|dg7C(nLB+a|gb)Ywk#!V=4wJMtxbA&?#UJhA@fkhl72Vf1Od*{5rF~oCDQv~Rz z72cQDJG1k2&PFF?RC#uQ6G@5+kCF9jpS{k$kb)aEdMm!C3Lh&7j8`T04 z1G>#aF?oO?)3~bTO$s~I-^JzV@Vu`<+zr5}vLJe+d%LQTsW`QJyDA{YsmX0fT{wEa z(wDlG&ykimKT9UkR&jV4SKGi`ZpO;jLGIkR^7RlfH`~hFW$|f`%?|C17!B_#-+*I) zn_J5}`8pdnJIXp`i<^P+jgTid_m*$c0hTyW$~TuV;w5};0mr!+EIXWe+}u|#v73XN z+sozBurUU0?%<%g&8?_-y39v?@D{eB!P8J3sqX`@I{$(Xr1V(^v_Y&5%ivR8e=8a| z4cAq=3tLhDX+`sJRtje*!426AWCe?S{Ioo11%0Y3TESc6w`qst1AkgMX9;|VjtwK0 z-KV;|Ww-PZ?IocpdKp^ZvyV|eMWsyd2aP8;=mI+7%OP`ym8l)#_H)3VwKa2r7 zq#D!lK$Yr-;_eDwdeeUzWZ0tB!Y$Dj^F_n+?+K+F+6GW))q7sx_l`vT7V^yG?+NeX zg4zO_xJ~zjw{jt@PL3Yp=kDdg4kGz;h^rgr0(+HzXy~5sJ}#TRBWU=Z@ODUQ$d%^q z3GU;r=x*ZfUheYl2JY_SuHRk9-57VnuFRcE47!`S8|7}3+sWOn+zs#%*LwoTU6xN1 z-xJ)(UB>O=jx&1!&UWs$amP2`xf3aGc8uxgkS>rZ{wy>M85kRYA|Lh3cnZF>JmzvCGn&w%t&z!P;fvud9n@w3 z13avQ_b46agm9_CmvV_OM0$5xHT67w$SMuv6n9Cy z1D^xzKYesfGso9F`C^%#V&)-RQ}v6NI1xI|@dX-Y`ar@Lxny39lj-+GvT;aViLcb~ znw#WX6>$~;f-FPKrOT^Eaf3@bCEBWc0UDsf7g#D*pLuoE6iy|R#^{+NwM+k9{#pHe z2;Z!ZxkaRDOYmR}{|A{BRi(7T_}I&@p*XWq1m&;u;MX?$qA#G;q4?WhPQ5>ae$&^! ze2zm*qfPV0f5Z1CIr?S}c|@IkyVKu+F3T2fG$2_qc!PCFWue#}wG zXt|%d`{TO%ecja5KTp4?_bAo$@qr+61zGM|k~ zNF@C%c+e-UKoh0E%o-5kbT0P`{2CJMxi1>EKC*dWciQ=&b6Pvc;B&_>tIc!gsNIv# z>c9(pv<85sUZ95$z652aUcPjRzR3SgZ5f^waxj<_0DFahDB*9Xq!y>+7s6R6Ndxqj zOh1F>FpI~?ll5EfIUdaqg2KU^VT{HTK?3szU7)B=>#LKfD+x&H46EjTOqk5$_p6ub zmo?EDt{seW{g=nbUb^Jcbi-Ip_?m*6*&rc{ON^g}qRiu$&y~~9UOwk3#V0fUFZ8Br zM;2xSd{`H0$ZwrpkA==iLfpt?yp0_UHX`Q#Q&5c^h&=dtVHpS zb3LoH568JQu%29+<%~X{W`m=^|M8t#7qBo5$0nen?o*iA2#(??|vg9V$O;Tn!-UWVA9 zrLP6&pssNIzL&(?eLAS3B^gVUz?FzGJ|b3+!G{#dyf$MTV%)v_+6*ZgO7XZB>-LM# zqQCn!G?V$u)Dn|YGTPupu?(@&7}Mhyl)v}_9TGuhFM0IWVngAL6d$7tfzM;WzV) zV3S7h1@x3`kDh`!927@-u@?wP%|u;!@CDXP-OK*eL*_COm=Yv!k zvy#7a^}^F~Bc+aZYBG(etHgkT$Gb`lPwP~ayovgwG%9V%{)5vbI*d^Gcs%W^t9n|e ztYA@;{F2_9hD>2$%;_r>mr@=S)7czr)SF9jvZ)=tjr(elE%2LCYOM~$*XGw(qv0sK z$7SnS(h0T8+m5QBHA@b`Ku16!x4)sI*xr4@meP;c;z6TE0>kdAi9Y` z_n8ONeGp%bdo%XrX(+74QP>G-CXYy$sEoK&3T7`jlt4godHyDdmsD&7j| z?MJK8M2lNERicx4Hy^)DRgU^zzC^XuvI%6(Tq+M<;9O(uI`Z+kW?mZ(4_s2$NZZUn zGhBJ2BgoH{&}bB~fy)PM0c>!4F#ke%2k=lO8MlK@qHIubi05HMCOHOKR2=5t7Iz)5 zx43O2lUXl;x*HmTBX-RfMtXwmy3qi|BeP+T=E?A`MM_XJ``9 zRLN0kZW|ejZo9P<^4rl~-UwbWHtIcW;)aFs2VaKCp|wa!cn~E)4fBw)2UIK`N}!(7 zP!z;KMWoVXdQF4`(NhJOc3-6LMMP*}US-sFW?YMS`Iu0O6B*TK3Rt3~#ZPEE%3+!# zHV-iHw^ALmUXzq~zAT(_`YED$$-!$199ORdF;%?7Jw=K!L8!xs6Cz32!GkZjKGS}n zSNiS>M;T)9xA~DIu>UT4mLP7HI#*5|MFYwk$kt?nkR_NxXb{+tS=rHzQm7azA*G1# zvm#JkUQ!_|!vL{x2;UzZ6)Q3eL&ecTNzFstxNM%{=h0F5N+RPS2P5*;P@AeT;qp~> zY5A2<=Pk%Yv4S&)%tQ*_3Qh14$F$6j=f6f2!`C-yK9H0zA;a%u#sw$jsH7c89T*M8 zbQE~UBAptrxC(u&N9S{Nq(3j7F%=Dc7*DkTZ6Gj)%bLKmX12NPWtTQLHE%B+g;wd) zGqz~n?ME_nED~mE6Rq$|*Z%6eQg}xBD3Cg-Az*dFe)O$zq1Ri%V-kU;EBm%R2;T@U z$w~`*OcTI}N6OnJUOEB;$#Ud^01+^Jq5==E)2UCveR{wGk5~(rKydM^?a3%STzK&U zp+u#i2Vw&+(vJ?5yAUdrQ0AcssR*4~q*MgscOjB9m;OcJ|44`ZUYB6HO_zv!CA*Z) zcc(jV(+#7FzHSGv=f-b%`8D%22f}pECC&00h>iAvScJ-q@l))L`2kajHOB~6~u?BO#sGUuLMjkPG1igV8r+`95%sS7d-eEl6ghlRF>5h zed%{QF}-2)=L<)DP*Xa3Bhc1#Ob#61mtQJ{#N}9t|;>L6~+}&rBzLZ;zDTFFv_(R{yB%;UND9=#_2XG6k<|yWs>0)b{n`J|)JWFY^g-JGq5X;;y^lD_(izEzBKL8kGG9jXT7ST!oX$w5GF5bSssaX;u0q}+#z>H1|SY9Jix#9~Abg{~>+p0k1` zk;;9~B?Tp=v=mKov3UVaAHl`d=|z-yIu9|EA4FIpBbLAmO$2HNFi4|Gq>=Sq-AT`4 zv|iy!Zc`U9sNKtI2E9Th2zWz}>SRVZDbY8Xjf=q)+)HTvLE)7?=Gsc+e&} z{q4dH`|$)}r?4QnB$bfXR42^JF#Y7GyT>JET>4D8PufK4Wz6)8FTQ+GC zqQR`9IfZ<}MZPQ&6D?3n7rX}}2jU*umx;an-t-(G%xgsGKdDR4S@179%z0@qNE${h zA}by@uLK%}#wNrdh*QneD0&x-rtn9_Fno?qQKi5D=kis8#=c{rVAfNmDkK+0sM7U$ z%Chl8`7XUGoaDv&!7Jk022Ty|FnE@0{NVeO!CQEhf6(9y*E;x|2N6a38N8am+Tf|u z2A_Yo!CRGi4W24(@Gule5p`9nzpWK&!42MR*de0HoOzA)p^#s`KeEXmpXVuIli2o< z7Kn#+SXfLCOr(gx&a4HX^z7n`pu1_SfBp3FRz_~M1X`}OOd&!Wx@6h8BR^}PuJU(4T*k?(4MzrwqX{;rn)Zz}!m z-+B8B!7sh}o4*`f2+oeQ&IfL9yE4;qXGf+-S|f`*kK8eK;(T!X*^v{syOEwd|1?5Y zR=wQ$;M}?3Ty=V;TB}S}Yv+Q|J@v+P)s0N=+3k)tX6x;boF!_xvUqZKs>SW-p4qya z+OzxY6SMVd&#MnS%tO6;+D*^4+6$GH`_=4X`~I`R?W21p$xjDQH0o`4Hkhi^r)Q@t zZ5sLblB+0bH-D#=D$VxCgW2g7cmMsa_3>be-2SfC_;@g*J}l32vwXTa+pbR38xtQ7 z78}j>$;Qf=pfy#gRk`kKEzj($SC-ENv-Rcb!eaYOpz%z!s_lu{)0(9 zRGZcMRMoW`ZgRF>X`XS_dV7`%Dy=j1sgun{y|L6v(q`*ZjfKTpl~F8In)6GG4!A5< znw15Tnn^BSft#*Q)hf;E^oDr=N4?Q@t)=kZM$@&)5m#Di z&o=5#6#&Rq8xXq2iKO|Z`gHXK^E90#oT${>j3zinPg~U|EA8g&%EVNo(VS+$!1P3; zxiC?go}QrN%@~-o%MET9o1nsp1Fo@T4J=d_lsdD#SX-Kztxrrh+7q?P8QxAjas0W7 z+U#T#0CwNktCe=+9dk@In$_X22bKHHhoUIxV>!wYU2a=8C+Ei-kcsa1Jz1Tet>|u~R$B>X;27eIU@eSsV!?=I zE#-jHEwQcYhHu3QD=?JgPKTrEt{Qtq;+njS_&yB4Fd&i!;ZR|Pj z_l~XHHn!qOf|i?&(*Zn8mq)9$qc&ZwHyhKvZ{qtC zl{UPyN?)69uR}1@>u}`R`Xa1ra_IzY-a&ND6KdiF5bb1HTxy-%JE{J5-cL1_nzJzD zDkCuzJJxPiTdgN6bB*Tg$Bp?OTWB=eC#%f~pGkvUlXSc}TdB{~s%sKKw3!L!8A`Wu zA6lwRA7`Y#lB>3Hr@e2wZ}}Eiw;%e|n%7UeDU|krKM8L*GtHCR3;vx13}k>DmZ62^ z1N;TZMzPCTQuwPk>WHm7W|o7gsgc$MQrT{9(~V@buXVB7Tng$-!NO87G6jWjIk^`&7TjmQbRL+VZqqI1 zC{UW0B|%rLpj&h$2pMPFPnfs~S|?iVY2;2YRfCcsg2jjI#;8_|9@QY4wi{7%>%?r6 zH0cEKEo3vh05;A-PLjZgK2P^j8BSI!%hgt#00g`)u@v96CVXwx6-Yg3Lf*48^{1%1 zrsv9{s_Q($4BFKN)$ZR;Npk!9>8YB(k^H4AmZ5cewmo$+&fJ{wH&c}s3`w;k*((S@ zv6EndzU#W!I1L`!t#MO-TUnlo)2i)5fZz#bojtY0xB_UP!sVT4^Mo?YEKdl7*0MiX zveJZjcGIrR*6e1f&MU|q#lwiEDa`~;X|F?LVg#-wO{W4i&bVgPiU8E{G!l|l zss0(!#gTeT_b4;d$DY+474l2%?ch`!A-UL`Xe@G513tRBwK6qTRRWS8)?J+tR!y9q zorXp2C;ik?qa9pqLb?ImiF^yQ?THoeEzr*ayQ?m?{0%y#znNQ%Zx-vFlxlo8GkYS* zRP{HiWd9v^^*-F`A6jZ?X8EIaT^DAjby=g6%`ONSQme>zKo=vLy$r&hNU^KBsJAe= zM!lQQ?$m3&Q>U#4`s|aCJE9k^g{aKOkKBbsRcS$T5ht@0Ez1keSh|ZN9=3JdivyS4ZKfyKrpvdpLdlL zvK6KqQ`QTIXtbJ8^XQUnpDH$xSMlNw*2#(RbT)33`JjSysVzXr40^UXwKOX(P&)%R zdTeSPd28Pkmr~;6UHy86*;^v*N4`%j7JikM1aw&iJ@ton@G+G_lBH{S}pUd6ub)pC@Ze)!yg$9_BK+G#w{F4g% zyUFUu(Ksd+D{v~SsePtaZJn%A7>%$}lS(=5#J{St1?%E)ptPrir72ols`D#M=Te!G z9X0K57b^2r4DX6PqI~RqKzBm4PO7)9Ekg?q9$;}aq@p>j)2Z1LvosCj%MSJ0s<%I9 zTcl#aQ726*tDtuVCUx~0r8CFJmL|=p2|8*IQedgp!Z?u$ipnhgKxU6o zvaU_k6-G+)Cr|{InpFe`3Jfelotb#}_`_Jxi(;DU-yw{Jc>YlHlG_P?zlPDm%oeV+ zfXTn4_7SUasA)Gca>pHas9Mi9j39;PHNjXm;iCvbj87>nE2EVe;p1p^_ilHedvfmsD8;8+fnajD z+CB>X(8*)4ou!u41bzkD8Q9L4TM!Q*#lWJmbdws`^{s%Ko9$N6s>svfk(ddA?|bgs z3XHeNwoI60mmjx+l{0R!Rb85H>}6I?HfGQ=YcZONVYh-aEANtl8m?aSDsQCk*HEhIcyjJg6V8}ep3tDoSBMMqi5EvDmnLD|a5u71&qVi0rXZ=Y-$I%+>Va!4 zu1i|1*GNR|VGP*a5I2sB3Rb#LJ-}tLb*C<)colZ*2Hh2UTbTHGm9dM>V+8i5pc&4b zX;#rUcx{y}aszqs3(!qvmJ8r0&&R55F+$`r^Ox%9-;me!ar{ z!cxRjEjwhiv_LVhb4^SxA$1UQ!BO+4sXEC6$O(BwGJ0QQzRJyXb*{pkq3Q(n*@ela zmfbQ`*rnC1Hz&}TE&XXMkYh?|oH)Ty#Odp3!p#LL!iQ>?3ctPVL;|pfozT&BlQ4bi z4(4H9vZWcaQlr?o2~agvG2*vWSR}J=E-VzbdAc?^w^&lFxaCrp}RcceHFg6`6jNCTj0du2$l4hnCC&=5ZOd!Ysl$nk_34ry)EUt)dmMhr> z^WR|}Q_^8XshX88;rAq~bnh!=JyQjHPBu=P!0$L8@sh}(44z_ooj8y%$e6;&H2nK6 zhaQTYyW0B?yvzGLllKs21>;c?B=%o*y}VEelqh~f57FLq?O~=qAtnmpie6(xaXD_k zQt0I{pdNEnxsD5KvWj*rmlZB_)NgsBQR9)+@R(&N!%8jU#`Jf=ZMWgJoOXNnB0{|a z4%#F-`m$8pNmQS;%n+yU1lj^qYEJ4|bpz#f5%SeNLT?fT&5-kIa4S4!q!4 z|B``{webT?=$Irq%Bsk`h1{QR#Qe)Am?c4~fAV;XyMn9}6H{_Dc%Ojy3T}L8HhAjc ziP`DV`r>X+Z9ee{_>|@xh-176?iF2Rlgz?!VP^Q?Nv^gHfb^56DgMMKk5y|YqUID_ zKt`&%KH(JwlIX*viq~5Wm^Gfu6C-!Ff;^*=KsPIyn*;Za+;Q*N2I*y=&SKFX3iHF_ zk+=C)RizEBT@c!J+oK3GykeYysh*>A@H*)VCcb=fK zSR`?0?j1-xCUkCM2r3P`Z5p+gJIQV?6B8rTy6zik@jqqu+B=qvbaOj@yZKv^X)vlc zLd(4;DhsoH!-i)Qpy z%!VF`@4S016jzl=I@wcSq6$(6Zcx?Usrt%7s2rlNp29LPK(RHY%pKNIYBVUuVeG;B zzfqC)$=PPt@V=%ZqoXV?j-1$idwkukRy09UO?4x<#Hs|8VTM0BtT$`k;n{K`9o+PS z=LR{trHwJK&w={nd9E=#KR@ykB%TBoQkkNzPSC|8mFz_xW$V86Sk^%w-#NLt(9T3% zVy(WlwRm~e60M|&KxJ%~#@zAQcC9LHIVfv#rrM~)Jg`RG3f`xmJb&hI7I>GM!BV>! zJ2s{J$!TNP$ttUW)PQJNMr)CYP-#slVG_DN-Z;jc5fyIvfEANwFr`HWTT%!_odF9- zyovZ}>ZhikllqyqG zBJEr3-4H7g8vX$V*WX~h)coBfE)Nh8^W!w;9}6{N3@F?2gRo|n#JZeOlialAV42`% zfikG1NHt8F85RSDpBOdrlJhJ1{g76M;^nPbmcgKaj`91Exw(&_anxg>*8665%?pXw z`t(CydkC6~xFB%m&`jq}9zYVbG@+~9+_E<055pNkO3BG}E%UzG-21=+-Xi%u{d0gH zge=oquoiUe2?Yc2*lp~~hfEhJHgTH33gvHO12zMVuU1){@Lnh!?lZ}4ycC8n$Cku` zlh|>H-+9*d(8slGBKMF8c?S1F@UXwcA|}=XP;z*M$_p0gPId>{oPWSxs4*XwKD+XS zCjDu9nv$}rWWP?0B(x{5F<@!16v!NVa7w|}BU;#pADL*e^gUX~GjhM%@6MfL(F_YH z&ao!oBcY!TgdLt%Y$_}jf2mBt%7iNwdR?te%hQa`G9xFd`6=lD-V*XGW7P&9wH^qY zMwd+yY}$JA!YMJWs{Lx&L>zL0$K}OfWMo`C^k@^@oyqUR`~I+eb9au75mLhq#$-N8 zG;W*E??d%jT6{t#(0+F|uQ-(azC*FY?pfnr?#{dKi6y@(a96w?%jb_Ad)n8Kyuu4~ z=iPTZT#sh4!b}}5h2%b;WQ*&+>u$I20 z-+^Sk+E%u+dDfooziA5UPwPA)czf^*%N`1TH>>9r`-Y2v(GbGR2e2_1-C2^<4h+!U-z1ZFb<_IcC3sxIcw+tlnc+i34I4IECc zXKbn@es_drXR*Vq{eM<^ElijlEg?{QLyKHz-A6tK7-&kCk?R59 zJ|$qMljCo>E4qkUWYl=oqK&qE)cV`K!kXOgZ%)vHf z)2&Oz(c;dE=6iGZj%-r&b=KXfVavl|E5U2VuGVY-y~UPr6m5`fp3QZcJAN)2>aD~i z>y^3TlqXsKYKa}GQ!=wLMr6U{_sMDC@6YPp$=0NQ>aA6NfOpGdZi08qRBtTCSrVqn zwWp>0KI6JliQL&7%N^|huj{Fm&+YR!F?xc9xqWlJ53{`w%$?g0;(5bS_@0Z4?{_nV zf#!3$nHJKWYpzRIjNkYyiO?>K76czPlx6gzqr074Z1hM~Pc66ni`rH-iA7zn5 z1=J9R6qH9>k`Qa?#fZ>InjUp%Sag=pb?G?imS_LW=5(`i+DB%dm^D&BnV)SFFq(uy z7|P}MS&&F|TJZ>gGY3FDE-C@=S$c=4bNl?uZbAYfpFWlVF4s%bf{xYWLG80@a(gPn zg7CfVh}UJHYo%ZU1|x$^7gF&^_uxz^vcSgVT<1R=Jm8QmR zXXfq%&lk^-Vxt;!O%bHc>6k~CZh|LitxR>(rfQ8=RV-octf4*5vfgA1r^2Ou3g9)a zX=vHR!stG&dDZ*Ihxxf!-uoxe)bpTxZpEE(I1E_?XJs&-qf%P&EZ4AeKRx}xJ!7a` zQy@!~bv=-M<%*6HweM4%Ig-Yq8`CLWoJ*L;uQoQtD#sxio(L|?@WiH&AH*KHDn@=bQ~di??Y=TLn*(SH0>Y*ECT(J`3} z`TcjP{5tgppt5v`PCMfERTS$PPcBSb%_XUxi`?zIFoIb@bxE3^cW1RcX(J<&!(*%RyToqc^XO?OasKT7P7`;!nuL|qtxoSo@4Ig|0;ujrKjN=R$F9iszynvwX1vx9|y=cvlbBaIdDNk~JX8d7Lxm|r^cICs1inZZa7H3;N z5I{h@dLyXWZ*$u2?RV0CTa!v@wkkf8U7G&Ee%V0LAkvq$?}qoq$O7Zu7FdJoQZr7T z(V8``oJQ~@Y`QW1?JTXc@CnXURw6xVkwZYK!657iL|HR&whU=BC-Gy zq$PX$zM@chDsri;Q(2jjkxN~ik9&Q>@RpeSCfxmSQNS_FYN(J20@B4D+B{ExJjHAa zdcbJ1)|$lJ3QTWI0>kb&D7_!jr%iJ%vX=}@`=f65nMTsND&}oAr-4XBI%KD`ySIJ3 z4b?U&gTls};&3!%I*qc%G=JJ6W|o)Z51!VN5Zrv^8d2YoM7t-2iHNecF-<{PyTZs4y{wN;yY)q3V-u z-{y>9tB$AcrxwMRjF_RETy}aFXLQGD3|wMC<^=Wvcz{!zCpex7-EV#v%$(}om^t-J z_-y+b@ti=>u+_ZR`ZDe!?(S^%^c?Gv`}*RtX)q=;jPvG9%(&_`nZ2~vBt;xwq?Xe2 zbe_%TgA25;nlo?z^vn>wB}P;=qW4a&ZpC%Z@mjK_1YkNw%0HV{K@j$5febv0$vvp#^$3l zV{VZB$mLm7ifW)i0&7*6O_|w{!L|^GGkMv`&%@Tr6Q(Y$Jh@nc&wz%yK+&%wG{MB>u%xi3~flB414$kqk1^wO@GgOea?(z zPP`ap^@sHS$7fl8be7pHSzc4BZz7Z1l_yj_%Ia|g#o$aTR|n?|)aMetv+Ur--cjR( zqRpaFPTx$IiulYfn-oPer@2C^-nBMHQ`H#fv9&RVV{MFKTM}c4v7{H&nNP9BwDrO)KK=D4rL$D@9BbajT|&^2P*M_*r_^|PxB z4i`EMb%2^ax(|n@4nOGdMu%5A9O$sG!?q4LCM~|FlVlp80jYo?K?gJ>B`}E`v@ZI} z5C^*<-daqy64|JRx&+LC$*_HM?AwtUogGeg-LZb1lys&Z>d53?3W83pXOs$&pQ)6s zJTZKiKkLPpQxI>YX)LCz;~MYw8fWjcf)1v}8mF{Ja&7irEL>1GpHSE4_1TpFTRbR4 zA;rqTK%w;&9I3a+n4+JkSK-JeoI133oBo~R^)OHHAen>6O|(EXOx|9_;svMK>UhxWo zJ$G}uJEfs{r8$?8$(a=+(Fjldipyw$coDGF8?OBsi+AF+Wub{xxs!_;a7YH%HeiH+4-=HX$mu=puYgWyc+kMmzY z{G9#zVeoU7S~>NRc;ch+Wsg>*m%Zl4d&(;RUN-qKJnv;4e$o^N!(R4nxIEhdKFnIo z(n_B_oyuqj zm$yK()rvK^A!Vi8sdtanqMXttrJgc_X2v+g2(wU3p>-LZS!vs5|H}IApr9AyNg1}= z(L|oz!^igQi-zbC65WXF z$9xDDIE_zdwP<>-w=D6}vt~s2M$l{Pyrw}|9!*x_7~dUv5Yxi7vaiWf+^Wl(Csh5~Oam(&x*(mX2s>o)c6;*7 z(pHc1lzLQruT0pGg9RA8>%)>Q@{k_jm3oY++4|Xx;ZsK4vDV96DT}9+3fCX9+4Xzs zVXE_Hv+C%{(Q|9_7*RG^XofleRI@w=M-C5V{tAo*lY8|^#}v)>yMWuBP9SY+V0)L? zMhA3x`w!B>u~i=8HQ(3TX%FG9_j8m%*+r({NT%M@HJ-MmlVd%?b?2{{FpIm8r zevYCiAU!Vx=7MP}RM73zl$W!y639<}9B|a(gjKq3-N$sHmEUN=z6yldY+7-p>tMB{ z*|i1W%q%!%g=uII_L`a9p%mr@x0~pN!fvDc;BbVsKz69i%!&eNNenh&KhcS`E1Jcm zlP+qch5=aO0ViJ~vcYXii(b13bbV!=ro&iV?*eCLvy(Z9l}ZzzNUD^r%+8B71&w76 zwwVOVW2)_<30A~wA%00S_T^&}%>+pS&7w60(3Bev#aCv;k z+$FhTleH-uI={3r2OkkMe@*H^nGyCTM<}ks{a|*};>uzgU78-1*(6lcyBp5Tt@~!6 zyC~bUeo4ZtHQQPv)2uoc8`x!pX^h&sBw7d0Qim>`F{bV2RO*~jucGA?r-K67;sb3$ z(qLm8J$P~0c}e zj*m`Q1+j5*|N6mXtdZEjmldBXGwpQm->Kk}Fwh=7%k% z+x=0~FlS8bn8`S|1!0D?ENtb-AT+xM!D5>B={Y;2WP~Nhg|X6C7Vb%?E+Qp^q}6RQ zr28_UPL=`QscyzFUiNw3tu;5R_doA$>F@sMn_JC#Tk`cvv(mo*`P$Z2-m2aIe7)1` zt~c+0Uazg^%{9Ukyj+&s?XGd&+}zl#60W;dtF$1e#{$G|_G34@7_+lL_IbD3Ei3&_ zv(wC5_djp7Tb&N+*YkR_O}wp*%~q>&|MQLY>Q-$ge7n`I=j89Ma9iDWeXC1)c{A^< zbNx=cT-)?~)$8QHw%KkepXG9Oi*%ct?K~&H6*Af)e5=}l0m7{{%T@BzZPlBKm#_K# zcRQ`_Ch=;W&RU!N>wa6rZ{;oSMB!`YE%H|@w<;a+(rK-W&(>Ne-z1%GyWPn*xbM3D zkhclhx&JwR{Z<<}yWDh0pFQ9om)4NYoE|KiK z5q@S{14}?Ej)T14U3tPFrrl}j3F9#m_*H&gHP;rOuNZV2gR&5da1An4@IE&^!EVL- z*RD4x_i@gM6QR=Bw=Z9#^|RiZ`sNnbOlVkEky{7L4Ds0oYC00x5^>bq!NCGA2V=XO zH}1T0=fItPceJ#hAn4DLYOBW}Ea~~|+}S>{`pPlwbylpdauQD`=lT|0ST~9}x@m&` zHQ6-6Y{;oJl1b^O8Mx_u8Zb$;#iF*mr*=HjRe1NF`oe%g~JNkkaf5ycrZ(b?ypu zi8Zk(+G(s(i@m5?&8~=Dh}()q&;tq`XLQx*K2LHf`DlKVqt}z+p$V>%6GjM_Bh! zOKoG2*BV{T9>s)7IA@fUi3|}NZ8=VlH0>bm5^CAdJR52|Q?0KXmaW6WJ`oKT0uiRm zD*u$84Xa`_U{Xmh32kifx<~_>H$qKM&oMYfdd*+yV@eZbBwon3BBlJVShv##+)L3F zO`f;-uwI*Xuf?Q%(oioYd*ORI79)(M=L|E-9HcQjGYc`Uwc`-R-C|zMsnXKJ)Ua42 zCUDU}#H3V)KY8V7Mf(g_GmahIlwuT{J__kIY(!hVvJM>r0zNMgR&h#B+9`?&c4UoL zAAjaV;>G*|I^@?VXUa~Kar;6#b8eFfWL=;Vu|BLItK2np3WQOCm(lkIFqb;(cHCMaOGkqC%90i@ZfYe!ZizNSgexaul`zF)s;+4GFVhOH-1Zvq7TSaw z5HujIhQU+?RByn5szBRnAhsr0V!&?MS0IZpHYm_t+BTb=5>xGq?Ftxnut|wZMO|dy zq9C*R1D<=P;Eh=l4jzzc8t@e#TE!{qhk|SwDTktC38Xy zS?|rEjqSQMnJP&Z7k_n3)w1HHnwi~msAD~buc^TpLgBwPK&Lz2l`cp@)!Y+}>v8fT zToKI$fJK}R&EHt)Jw8n&)TUgF{ zA1LuK!TaV9Nmb44`7Ca+22@Ss2lZuPK_=*iHas-5e<7f{b%92{s9AkffUEi54Eu_# z6HS`b{ud_rjF(&O1AfD?j+)fXtFM`%c2ne^(!}o{Z?^Xu$A|m-jchKBOAB`)|?z~NN z5ZifYHtDrQS(aT|tLFzN#h`4`L8hU3Raljb?mzEk?~aU+Y%h{$$2*LjQBxaC$Y&L2 zn#O3Ah?c!d74s7-zbNVq)2W5zfO#sXW8TiUx^!Win;0+X!d6?gw&a*L>N!S?Rx@93 zVMN$!wcBmFw8_7gZ!zs5X@zR*kMY^5yQD zu9J)fO{@?ty3#5A^&B$;-B`cQ{m;v_jaq#sKYuu0PA$m&bz3b=3%FaGwI)WHW?rsr zk#4QMQ7O|6Z*^;xD)-arwyRsZug$!st~_Q7{>bkZ))?Gcx!q|Ke{G|VQHT6hHa9mu zA)QZ+->J3MHf3743^NL!Pj~gre|NUyyZnm5@J=?a(79$P18X{`j~|b#v*+0hO1y&c zK7GI%t;sVT+I-rm6N;+su^cmhrsr0WRj=L<*_^Z@mW8?zqQwddvXw4j$Xii^O49&} zeS^v*v+-$7gCBIz9K3e5j*nV7YlFJxM?Z+lTYIN5DM0ig8n> zw#O|GGXZ^senw#R^vt=})-wV($jk`ZZkCym=;~vdi6T3+z?h0=B^vu>D!@z_F05wk zy3q1GCv`qg_$YUBIE7T zx4oZM8I_Xvc#)$myPee-X}V5(k!M#=rsv_88n$A73_BNEBZgwdB64DPdOyE|kY;0i zLUEThPxEEjW{akIL<5FvOL9{mD8D>yYQHMw>LHc^-(72FwxGREv56+3Y%T+@hUPFw zcf&W>j1*$cM4EYBVtCyQa&*RTq@?RjH;9-v%{RlTyQ$WhdDiUa*14|AXl_&U!nQ}m ztFR6**r+WH?TT!g>~#PEP>Sheqv2x(@&D5Qe<#FEZzB1pq6TAn$1(JFnmHwL!BlqFg`w@Wdal;OhRTWiF&|WLEn{_PsMn3p$2s- zIyj?ord+E)`;0*Vd*@-vP>fmWBduUsp|5~_P{Z+e1bZ?KX1$G>VAdMK8hyVaJF2U6 z(kzWHPy)x}?ggs%h~0G9Zi|bkYjP2rU&ao!JO0513>L9pZ-=2o?jhZw_r`R3Ti1O+ zr8m2~;B41@+L6z`O_iBX9*%_{DX>$iOQ?vQ<7!|<^xNK?oc~p6QF{SZ4d6vc7A|nk zK5y^~@SZb@kxp!xw5RW#W<~pev4`CvwEeHlY*dJ{Gu-Z<_7$LKMTb`v`!!WX<||#s zdfqYwV&aS*Kix>LB~{yMw+0Lk=Gb=Jnm^@9Uf+z5-i9i}C6(xsHcO@%^&SqJx-FMl zOwE+m!#X#V5s0Gy`S`JVg*+GOQ@HkGjG}6{Zxv02@$n)FY#?0QVU{$3KUISiT=hgd z*&)Ac?-;cPq=z1*lTJrV3Avi=Wt_7-Y8%IT56xUdpbUMYEvH@xG`G~-VZ^iEj3L@K zT64aEK2E&O##%1zxx2pE(coN{k>X8y58XU3*XRY=&@2AxE!F8gHR*&kNiPjBu2pNF zl+Gu|kHN;fuFvr7MxE==UH3-3biKLo^tLo4UeDUg-J%kcTMyCJZH4L%d<$&mhtJ$HqWwFTd&mh z?9&i)xl_rJr=IfGx~3J(^ik{-!@-^5+TB){o+ieEj(V7PO(S41zSE+I zy4l>QXqtjgCxBbV|F^hat16O}PE32CL!E~8yDD2{{b}f3|1|AEe|N|GSoqH7W_evb z~32W$|o9Kr?`>m8Z3k@twAtUBg({uL>G{bZ2;}wcW-4Y@v}>I5$|%qMaQ( z$WEw;1MB5;7|WpA>_j$hTOMO0=Eiu`W&t$A@wgYV58tBRF)cV#5)?OPDhS%@a2q`cKlDX)fIZyo3HT#DQrCg_iVO3R#{mZnbhEKhV& zDQhXycUW`R*P6`4l9d&!=uEhz-^^KOZ-l?I?TM*(w3t@!`4l|bO01>2&Ry|77XGd_ zLlgaMDqdW#UTtr5sK3|O>T9y%-n{Nz>7?u56~C~uhE>?DtD17yT~k|&`nHwR)@@=o z@1QHV{$p0`N}c;o;o6%WMt`Sz(w*UxZqn_nN%yGdEzIq-sfCWRvDxH$wF)y4m3|5z zdg{l*@toV1ZcNKFy%YV5B-ageEDzA+d6p<%vLbxXO)1KIMAWy z(_Hkv8rKtG#Vo7i*;{awKPX1{b;iP~_jAb=chr7Ane$}V5nYMqiUFiK-?)ilejU3g z%!Mg(%XdSu`px;PO}@U6oCJ%0YQEV>g^k!1;|9Y;JT-*B$Y+1*K>YRCa6Ccxw*wVo^D#;RD4GGT0(a} zq{+K$0cRc&V|Md?R!iwH7prJFt>-RE=7V%54~k{7bG}}{*e%rhOLN|7O`|5kT=Ts9 z-k5ZEE#&p4PgRDk|D#%;uBrQ-2xg9*TWvQNAs*OtwcWK4cjuO+UDrY?x6z9GI;c6{ zq8=Sj7*3e;c0$jZtl_+=#1t_#TS`q5YYwyqU@l-Pyna)61S(RyJ&oe^uor0V67gW| z3ybrfu9z}Al4fjT`Qv42PHf3AlNe36y(?DCGQH+~o&RFe83R|N`MdYZsF=QREg?Og z;>K;7ueVflfxPOb`|ooN=lpG>0I3IhgIG>`^I1jBr6q>G-gYj4y)dTK%|-S*C~kAk z|N2|2d2@3?Mtqbq&mS;Q)Uf>&n3ix$s3`Sm?)F?N&VpW{Ij<-HAM=YDZ*$T87JZ7@ zoM&pPY5Qajob&g0gi$Rv^I^nu&Oh>Yi%;?FnP+fUG?<$AE3!0b-xZI-GUruXFHLZm z3*q_aOXU`@qF zseNa&QA-o0CY1FCTPn7+QHJ)+`*FZ`{#p#}-uN`3ge+{!hMkryX};Pl4LsFZ*(iA$ zaJs&tjS)gV`W4Dyqt(h{It|EjU{fXuBd*^i{%?AAIql`f1l zTa0^bDK8%xSXtYwmt{mKYl@oOwe{TMX`!Z!@-cO>bH~8UUGWPe$z4X3wy)dt0U(SW zOcmTzel>-$!*$DfySt9j;*ZB~$w{vUt@%nT4rw%(hG`62HKrzzyo2d`-_ZmBA1?0h z^rNAKXYeC?$IQfL_IEp4w#KX*7&NnQ*>|~#d(u2RYi7^vXv?p&BQ3(#^cA!q5@c(P z$bXj)X^(pZ=7T;bxXnJxcCu|d4%xi0$+n|9GPK`hB0zhxEx^vgtxl7rF6P`ZOwF#B zXl)F`G^bPhSTnRkg#!=vIyJzdwdbyiKgy z6z4SFooxN(YOSL9tcG8+ncz|VV-w!mL=Gj?K;kH_E7L9cP1jE|wOOUUUMGE@vCV7O zWac*K>x```o!gi7)1)!xS%LF3)^L~2UrpicIQi}4&MdEQ>hIIj{rz$5BEA1NYfSX{ zh6Zjwz-a=>Jq-_cP$r5-S>vU=OegtbhY?y5X}230Gaer=G#gpDQe9i$*xahsn~WRe z-IG)1ZT8RDm;09y-I@0vF0X#w-r3#TfBNj3ga7*b^A|5)z5d7H(eayazx)1&fBt79 z`|s>uKe02V8Gf|0qA9_Q$J%;`@!L2Z{FMFNd3)9zzkB<0`|Z1*ezFZC4Q3qOqc!yq z%zkc$N0Tq4Mhro1y7tRt{I=KoDf^5Kt+<*QWL{(V_U{?LE&sHt6*mLsx@PS9XzQq0 zeZ;A@rks_$eDh-O;Kfnts}e!qveZ58NZ|Vt_|bh>^pF2qmorW4)3$lqNWQ~lE#?mW zbZs?7=`Cv9unje2&n82^t<0X3e=1gmk=ZnaE%@V)89VfH0e%1btv-Cnccu;gws5de zlI*vIrw;z(ZT3&9x-%wefSf9&Z1Ty?%9c@ICX|Sg&LI zY%gj4RAaJy@bb9vV*C5-L$T512eFgH+5l_SrZUe-*`(7_NL!oo92?n>{%#?&EY;d`v&d%BQW> zpY_Q#@qkH%m04j7*hA6M7aBuez8T=!D7^=3va9>S9y8T$q(#%mZbVD6-r85*(v23A z2Q0eIu6dh}pY}*Yy3ql=gM6>UA&M>WGK2MEP2Nv-{2V zp_PE~_*YRd70}Ty$P|_*7pQDn@b9bNXGi=F_&w$K`C_^HefnkJWh>uiZ?Yecv*Z2m zkFz6|jvXBl@4sFh9{h9r_~6yc#_Lz#?H@Mw4vud3es;M1`kTAGx4(Vno=>+)U{{By zuU;N!-@iU2kJ;|4mq*9j04lBRH_wl={qGOB&ghJqGldfqr;=iF;PPhTCr*gkIT9vx-}$NPud$FB}y;V^rCnC%@LX5SoUyZdAWhlk9? zL5qvWhua6wK{G3cN#yY0`^NDPulE~=``gd;9l|@jA$R|oQrv(3eCO5S9`MEfiyfSu z!|dK+w*L>Pex2mXlK~;@q`Zl_)h4vY)=}dKq)L!$7m3&hHRm1yLD$^7|vw1GY#i@o& ziWC1bWN{i%y|@%o7HXdrC#US5s`V~~fN#!fh_5&&jRKq9VtP8wly+_IvX&W}eYXg$ zT~LY>pYEORL5rWXP`U8-eL62DG*c`+V!C?@sRfzE$)(M#HJXS}h?}eGD-@?jCmE7U zb6Lo@pB8ZLF{aBs-)(I3n0Iw}zP+>mJllCrk7dl4TX{y0O5ePBw%_=6`+4?KFW2+z zaC`3n=g6#^FYH@MjoGPHOWXIE_RLlS%cAIxw?;2j_U7=rQkqCr^3#|>#aZkSUSf-I zzC6-m-f0AR#-eXl(>%}q{&!xn{q4VJ|HZyyk4k!r4zkxg5lm^eQ#QgX>knQuULR!J zN4p0H)G`Ou(FfEr2icF`Wc$b8WZxa^aeVe|<0+LupJs%;B; z`0`oy^!Y2=0st#VG(DXTn|Asru}pw@`c#Cs_}R?&>Bq1m(2=VBXI3k{rnXL)YGGIS z`8J1x7i9bLDXoB-h^JI6`>&o-K_NNX-Nre1D*vb1;Q3@v@@Be)i)&jS0C}IXd{~es+BLW?xMfTmbZ% zX{Wbw>5J0Q)2AZtFt!cxUn!i`HLu`W2>(?t37QG@$cXt~~j88hkYdcNI-{O9d>ls)}gLLO^1pOJJ~Z70Kiin_I23PVONJ89kz9->rmUF zR0&jevTfb_4iA3&*^6yNPj%SWVNZu$9d>ls)}gLLO^3>M_Mh3x*V)3~{?8Zxv$Xu^ z$=jdqeN8vfW{I+FO|8VRTVme^Ho-xU)rv9}^RR}5#T9LROPMcQMQE*S`8s>FIDV2n zV$x-AfIH~*Ii`LR@PX~N^#qr8B=`o(NsE1O^&UL^NTui9nUXX9IyH(1G%HlRo`756=!S?djJuQZKrU2 zBNKox^#U+hWb)xiDGf(0T%~(5z#ZwRbmi(zV9ctIymxg%lA{(!QtWt4x#~r;^ylBT zz~xit`0|E7t#jDdVNZu$9d>lsu4jM!&)`rFBudQT-)u>gg|XXJy1&0+B^J8P%}Ti< zOJ58uge9;Q0|^^B213%g8SbY4r&&TtC#{502C)Fz!WX6gzuEwFCY^T9)}J!$`<@w< zcD+pgRRn8JISw_ki?&>3PJXrNXE=9Qo1y7<_usV3YM|TF4B8+=qcz%SL!%#BuEessPA$i5TWfD_ zA)gtgS=W*{jJRnuWW$onuPUA@4lS8oj^jCFjCmjMd5!V74aT2jpw?C$9X7Pk;=FF9 zwQ2j8Vo=uPYAsUh@R(Y)yrTV688mFKQw-PHl(ULk-P&Y@*QckK#$P@$-3L~gJ*a07 ztPT^fYD~atGJ&Yf1g%!{P*$-yq;4}$tKI^sh7RQB%s>icf%wMM%%qQn4zvQcWQp ziOWhwGOzX%Ze2J!zZi}JQHdvCvFkWxJ;G3-J5uID=GV1rD2Fb!>y~G(8<^`FvgYg7O= z{ZY%-^mkWNW(}xcX4D}WyL-iA<$^X#ruOKx7)-6Ud0mw%|Fj&2Q6qM~QT5TaeH7t`0joY}aTFor$^}T0@BqQ(Lv5#Vl^zT0Jt`W+tJ>qi-C*#JaAlTbMmm3P?uIR{B^?IkEnBoso;!1Bo%{?(FOg1Y zom_^4jH6dG0PQ7!^Z%1VM2l0|s4M+Hr*K%_E1q{8+CaMjj!{q6R12agKLB{!ViHtj zNxW?Vq_zdg+-V6-iuqHO^eZ421j77L)Z1(4bnlX;T@EP%Hy zNK)HkQPj2oQqAJGAcb2}Z(9JScBgBoZ9(R3i#)9o@noc$SbF({w#7VMZxFU>RY0uO zToOR6nZ#K$DAppBRj(c)WKqdVW(0Z+Mx&@|?Gjeo3Z)8HIMunrR_%HKYF>e;d|f8q zJf#GzF1DD~MTsa8DiLT>tDP0nDrirS>Q=xTXM-ZpgL^G3Z+m+JRKrsQI`$VQyel)_ z39CCqiya9$vNp6LSlPuc?Vi1^hw-*MUDsuPUBh-=AzH(gTDH6T=J+YDZhp(&XdRni zY=_p8Z&^#eWi9zuwB(YhsL9pQ3z^3sn?vy;y2_SfT1&o_T5@91l1n}uDMhv9p8m-I z7jiv)xrtQd+!#sHk}K?}<1yv>d$mP97Bk+8<%cybJLFED>aefFo({V@?C7w)MZ4?y zuKSJS(C)gZ<{}*0T^DV+2#5Jo{w)Cdg#HbHPNgk5n!x{J!U*xxR)BwKqRC9W8(Rqa z1R2^un~*XS?vC_tgjcPx>33}o?X91gL;L1u=Fq3WMJ(_4U{w}7H{ zw4jCFg532M3n0A(kn|Rlxw--@fGSQ4m-H5k60%f}S^!n023&8k^rWm<1Xovp1xR`e zGQHFm4uIaGm|^b_cD)7QdW%VeJdW*t|Kof#YZ$aq2 zL{Hi~io%870(QLxU_D0pCcVXEuD1XSAOh_&PM|?$*FYlBPF!zMTy-oX6X+;$4XG~xJln9mh^%T|CE2K5| zo*pf|fUXg+0HFZLTl`u$@#|?>0d;KrChy9Ocfz3;MndR?pwJ5qiAVH1!wIQ)xlA{h zeDxe0r#p)<($6df-CM|#UYM>MS1`SBdfjqyT|;(VN4jqK+I0;V*Yz;Et|7aw%aUH0 zt}AI}Rod6d)uz?2IyS*SUT&H;xM|wprfGwlp$$qVV&v-RMa$!l&Ecgby0k&XwAXbr zX@kU~AW1$PDMe|6p8m-Ims|7n<)&Lg&h3yS6e{ef<1yuWVc7h4^_u4=KdYsUNz!~8 z%S=G67T3FFlJqryZSDN=&Dmi3sp#Ils-b7n8Nz23h&zTKzR6Inh~W-9({aL_*O0dWkCC>XJ^ zCQ5^EQl78b_HVISc{i`utFl(Mw|L<6k=pC+GECR&m{U35+^lYtH@yX_KLEHkY7%Lq z0M|wV-tL>swNVSDYT0C}ncdU1QG8vQGGS<=mY&tlCM~p4B}E-=LRHfSyrvGBE1`rd zfGTeDOxh@(%A?6rJ?^oo$_=PCcZrSASOix>fdxp~C^Eflo}Ou=ND6Hf?Aj>6wNaBu z8&xpVMgh*6$y^(?P-4wwHcp`kNgD;4w&XEF8$}q}C@7jY3s7jI$Xy$?0J5S1oIr!h zkMvBW1rUKIN!qAI30Wf0V?&_FHEq=0nYE1qPjL}p~SDr%z7lxq>U<^3aG~jZ4_Z>qo6_?1sB>V zSo~Tn6;K1tZ^%Te!2*b1lO%1FM3h~VC4N0N{CZsYb&2dx%D1i&umDLL#asMZI6&27 zCT$eo&_+ER8Ym#juVGWdBox1!0^-+z_%-1C8Wg_~%9JsW5VBCoBr|?JhVg6Abu)P< z^-MVU^;D&#c>we@0p~YlqSaslOmkB>=QpB6sKl?wmM*7|rq1~_(B#rJ0*YS`ZspgY z_)VZ1p58htvhka|D>L2+hqg~pC4{zbxwR2oL*fw)-EcxGUM|xOCSN@V$LY=@47cXU zv~Ekw%SVLPb>j-A?N6^;F0O0HuIotG4PU#i;o`a;M%OiD*L7La_PK`LucRtu8>Z3d z*aZK0xnY|AhH3g6rs;2lrZ1UDk*lK@D~~@m2Th;o()1P6+LDc==@W}WB>8Zp6s75V z`X>WiZp+h`n{Ed=w?dLV9eDpX{_KPl6b1VrtaTUs@}myP8!P|oR5g+0w$IF>7Tv1$ zV?MrPFFs#R&0~0~XR)uto({V@?C7w)K{vojulrNOp&P(We2NvWE}e;g>ci+WH(fMb z7Ia!)g-w7v9nC%2*xJyz=~@L1^$(=`iRq~hs(IFN=&tzPY`MrBx(9w{4(hp|nS;^U z&v0z0_qM(Hd|9;n+rG&+_XM=%*H-k`JT)A>7dk=hb{P&bj?pk~xZ2Hile%0y_fCsH zl($X&p}ei>PeaT4n}+udGd~{gu5`E7^v7VjB|MY9o+*!%Jv8~7DUUbubw_;NbH(o& z2X)qNoMSXex`SdD_JC4N0N{CZr|a!FeJMg&)Gkrg0mxyZz?g#%PQt)%7R8(OZ1L(2t3`86zl zHxs`GT+3B3({cgMuX(zbi_8^~h#)N&S<-TW#;?Z+Ef=BjYr^2yaG~WYRrrkn(sGeF zzabN?1`8m5P2&7Ul#nHUJvRJ$T=;bf{6+-PYOny#ugS!30%*BpD$1|n&~lNg{LXkg z7QY*bUjyRTfcQ1w{2CO$5y})j#WY<{Ak;lUr+Z~nT$!_IJagT^T-T6Y z*O9JUgiN@&u7}Ze4Mi_vdR>!>IP{MI;loa&`2= zxt@JsRqeztHa3SY38|<{q6Dl&y9jvob zcr+a1S|-Q#zO-|3$va%xxN=8uS?E}%93q773cObz^T_bZ-$3m zrhU~U4m-t>X8+=hv~qpMrr%epzUX6J`)D;0oDL`Fy}`T4phJCM-VuTLMo%B_E~S-E z!?l6$PMhy~L}I|SAjZ_e3H5J8VGKj-QG{VVp|&-4rS;U%8Q zRQeP>L5fe#r^x9m^5Qo>8P5%AM?a4|n0|nqr#kbkanem6_7-HL4f}vM4~J#A_H}Nu z%>EO_C$WjH4`IXMDPL3Kj2(t}kbD@cD>tspEK9JBb{{p zJL1P)Q4}uQu1R&xQyuno*wbNGhaDZZ*XdJxtx=c51Z;^p%G=Z8^hC^Te6E1ag`gOToZKrsDX8Lx-S5~$>E9PKB@H2C;A@~^% zLo1q)21&dMo7yCfp`^A3?5>e$56hMbrR70Bor;Gao4lnj2ZUTXSof=#!_c6g;i$Ew z0v_>@B*VnuUN}-b^!A$V(qDGYi_au{`VMe>=}7c51ZyL>e|QHui?6&@Ja0Id0xW|Z zLvQz+;M|JTpBdn)wb_I(;&)V3^G_QXE8_9dHGMaOkDZj88k%H>K7IcveNUlV*{oN1 z6*~3xnpX4`@%X-xwg%*S@!h2VJMo*Cg39EFPgrk#%67jX*;|py43Uun3F*GNBX%hD^K} zEPx0!i4z!6LY4^h*bwM(A10Zb?bfsT#e)SOD>B66ZIfge>vvvEkR_!mmrx{x$Al9yQ<3@W29vLzgX45(eikMwQVSCm z$nzheb=|m{4RlYhTlPGdiAu3Fz-}_TZur`D4Hwt-Fi`5D!$dW`u7}ojg(|D-Y|-=N zaY^05PCnLNMD(3ypIW=Vxt8tUf8Iwdiq=e3U%PI$T0<*dGqcs&tl4U7H2BAe?a+Z90y+f|C3Y**qpY**Y+vR$pQ)ARf0&%+O=Y=Fn3ov~e! zZn9koCfgMcC)uu?(ZY5`blI+O3ZoT#y3vYQ_8Cks7S6v{VI)G0;zdHP-B)2{@{lv9 zh0%!;htVme>qe)Pu8dBexx(nQHZ?lQN7YLzn+88|&k#B`Y2|oqwc;zkKh{0Zip~4i zJ{I&Ya|qK`*YtPS)MH*6+jX3$YsMo2{{AXy?xo7WJ1eT%Ek3BMS)A-B-DYlue-N1( z}l07B;;%BO-mH(il>c3+8m?7 z^ipk}SUEfl4pt5e$k77=l=|HhnC~y6MD8-So(WI^aqP zb;rZeG8k|zC!&NbRp}m*TG)UpVwX@SMFc4~1`FWThsjh35}=!|oR~?>v0CGr=SjVD ze8rjpv1Y(oGbq*~l-k>X0ld}qa8eT!qR};I1R4qg4F`dS)c{8Tb<@d>6Bsh_X0QNi zT20~vMwE~x0zEbadRz!}2?Rz2@n*09PN2y|U;=c_3j!URnwY%lnit-V#qXAcKGOjp zeoZ2N4LH9B#jgP`l>tNM{CYU?n-KgOG=2>QzlMWf!{RprsGCl1oZpa%R)Yl)zb0{h zBTC2;zaATYJudvZ1b!oeXf;>>=htN7H-V~ws8tLbzsZ|!`jlV8;&(IgYe4)O5WfbT zUxVT|LaF=)4B-5FIPseh{2DZV4F$i3gI~kqHv*`eUho?-(Q2>&;@2e3Z$t@M;@4xt zug8U7m%wjC5UmCa;QX3Q{3bxxydcoA@teHqnit-V#qUPq*MRsnAbt%vzXru`gc832 z1314PPW&bWzXpw8L&2}%;McJDjR5MV7yO1yv>Ggc_%(_18&N`*`1RQE>v7@NCGZ;& zM61C9IKL(nzX{MaF9>vO{3dU@=7qOo@w=Y*H6VTsh+hNFuR-w}p~P>%0M4(66Tb<; zuR-J2Q1ELw_%$qkBY?W;1-~H^tp*Dqeof;1MwE~xemyq)dR+K*3H(L`(Q2>&&acVD zZvu4F3j!S*zsZ}fdExC?{H`T_4TxU@;@5!lYf$_~DDfLGfb;9&#BW0IYtZ;L6#N2SKv>Ggc^J_Bkn?Th-((05! z<2QL%X1o&)GYCPI5M~gNSjRA7NIWK-keMUQUpJV1^&A|hJM*(JgOFO7K|r4W2(9bJ z)yxbsy>8j_U}g}-ax;jKt{c8~UBkt7?aZ!gD9j+!>w0KiSI9n?*r={)dwZ7TRN&}##OU)RA((6)xy$I%?|Z#i-WN&no%RN7lISu zv#?vZ-^^)Y#-Ipe#z-l-86%}6GlplUFk?{g)7+VAnAWKFfN9Q*%BqzZ$W%j6VWcFS|LB^GS&S@$ItohDt>H1lAsTC?Z7K`PBZkgm4%{Dkx{ zH|X8n*I`eGT^)9G*sfx3@VC7#2XlkOhA}s|2nTb6huU%x&PNP8R)cJMXq=CP)>7J5 zMW3Fd`@U|`n4{sbaf%fdH&;yf$_KmFx`#FgbAq4Y6stl${UdxEO~tdR6Lj6v{Ej~y zKi=NEw(XhURyM9nyg#=st;MgFtLtU<@>}KOiy{H@hjU>Lh7Lc&!O)?%z?(vwjl#J% zhecCWeSj>rkwB}HZkvDL3zqM)p=mZvwO+GLgJzfSd!t)_z%|s>G$2*SfK(j=uId<+ zsuQ8qLm3?N{sDz(I#0kLL4tQm0D42rb~CDsB4 za0SuBNkL2q1<{}pXebCY90VGcf*1j003mo4Y!>`AMUzfmdL=de8 z3*h{kO#CKLHBcBp$e{6?yfJ`G`86zlHxs`G#IFJIYry$6D1IZ9_zf7q`Soz(HzD{n zX#5%qehmk|hQ)6LkO8FNH)NvKU;)IhNu1w^60*dv$A({z3%@Rb--sYu4Hm%pHJSKL z0Ha4ipkw1Vd1Le_yd8_*jl{13@oPZ*8gPCMir)w&egg(@em$J{O$dGs8o!2uU&Fz# zVeuOQWB@7n4Vh>)SOD>B66ZIfge>vvvEkR_!mmr8^*KqJ_So}r+89)kt zLnc}c7C`)(#QBXVAxr#vZ20xK@aq!zjR>OEU;&(8lZoF1FnSaOIyQcjH%5=b+p+jv zOZ*xTzXrsw0q57C_>EBFH(&tg*Tae5gy7ep@oOmfH5~jJ7QYcd29Sc^kcn1<1rWa` zaegC8$P&LE8-6`5{JI2wBZ6o(SODkOWa2jg3?K!8j*Z{sjnSj&Dg005ZL9+4Eoq5XEu>h>)%u zzII*1#dYm03?PIK1Bl|emg}K)U7<>KwX#}GE0j=uf7PTAx|q4m4ynpQBC|+EpO6Yn z7qWLIVKsZX*We4FOYfIg^;t}p*(8#RY2B6U){~0VZL^+KX00cc!g^B42IGG3tT(B+ z<%GZ&=Lm-!d=*k?9-2-3S$QsPR0&`6vmDeIT<^|YZyDYvt;am`l+!4 z7H4K~kZv+|2qt3(4<#8poY2D9L39~Aa0+7wbh@#FSTn{Br{60df{#ubd07M*ii{WL z4i7wYT3A0Qf>=LN(r*1oNz3}-`75j+m8tckGPQnG=sU;8Z>=`pjluG?wXxZ15hPhf zR1VE50&!*)Q89n2!@drCI_&DOqr-LuYlFWXbvalYBsPq-!9_S&8@RUhzZu}y(w+`8 z^;!DRYSSN2UoPKjVGY2FvYxlrWI5mq)#7R=>zyXAggS7q>iV90uq&D;4^o zoo>6TPqEa>?M|C@0p&_<<2L`U7EW;08{yQ|-1Jm&KK;wxF}bBv!K%Q$)vN6dtzKAP ztFLLnPPM}JcFOz4TKSKp`-$l(*BhQ|bC~?$XE<}47Gj1lt5w?Wmu-Ie`pkT|8~(b+ znx|?G_6I-1DL#Nxd|~~@hj08#>+oS8ytz9(WrIJ;Mtm^mu6Td$Lp#&!-WC7m_0vXq ztmm5fV2{ljtmy7ByEq9rv;)*QHuKMbT34ICC&$`V^Hrl-OpucongWiurO9lgnpmx9 z(ZXS`;Ut=L!D!PRMx*X0)~X9evu@Da^%U9~cAXS0Y{k-#rd>YKwp(OxWIc%IOQC1x z&Rm}h!;%~}yGte@rDY}{lgI=Fkg{jMl|6$}_6#_O0YfILG3F2zgobC(G(1D0;TaAM z&#*MS2p|&>(US=%G9fDuP#T_xgD3;8;YE~?CAK^y&&`0CatRt}1fvSPR1Vjdn z-{g%6Xv(i)@w=J$H6VTsh+hNFuR-w}p~P>%0M4(66Tb<;uR-J2Q1ELw_%$qkBY;dm z1-~H^tp*Dqeof;1MwE~xemyq)dR+K*3H(L`(Q2>&&acVDZvvQo3IZJ)zsVc3PvPxY z{B9(E4TxU@;@5!lYf$_~DDfLGfb;9&#BW0IYtZ;L6#N& z;@2e3Z$t@M;@4xtug8U7m%wjC5UmCa;QX3Q{3d|ery$U=@teFc`xM@e#qWCJ*MRsn zAbt%vzXru`gc8321314PPW&bWzXpw8L&2}%;McJDjQ}zM75s)wv>Ggc_%(_18&N`* z`1RQE>v7@NCGZ;&M61C9IKL(nzX@RWDF}3I{3dVAK83eq@w=AzH6VTsh+hNFuR-w} zp~P>%0M4(66Tb<;uR-J2Q1ELw_%$qkBY;dm1-~H^tp*Dqeof;1MwE~xemyq)dR+K* z3H(L`(Q2>&&acVDZvvQo3IZJ)zsVc3PvM<#n1GNgAxuCZv5ry3ka$cup`{aF$nY~J-$%?w*1rTc{+RB`$<8|vL=0UXcYcm-M+L~TJtMuj!h%)oaBYw>19Ln zSjK!0TlOMmw7_daMyaI}^4I8f?1Sh-GgEz~Fe^{me1&;Z`l_^aZ!lO+r{peuryMUj zDR$Z#bq(nYv+R9YZ!@6-|1$9}TPsg4R>!OTVVkXKI+TO$ zXW#FYpa~K+aE^5Nl~n(r*$i4)ALI0hJf7%vKx_8 zQV}z9^M;*Ss+|cqp9do--erCiDB>1^Re8pB%qk>uj*+I%_-1 zv(t1^e7+0GU8L_D&0P0Jyt~48H`&+~BgG%s@qb-BVR!knUkp%uJ)3oB9cQlW%dDe4 zXIf4DVQMMsZ$8`&f2F$Ssp9bc&b4w`W-&eyRwk8Jw^pfQPD^Gr?!6|1Rx+P4d8VmJ zEy;|wwo%`z=?%l+wIQQj8T;2CNcU6ITPy3&IH`K>abP%oFCe~4VBarrbBzbCcwijN zHRWWk5m1Zd<{BJpi;}sfJT=$gWlfNqYdDMX2RGM{1HLZKU(qVj_HvS%VPI;94W@?J zPP`=srlwdh+TsZ9jWH)ht4JHGV9JxjWVVsCXpj{{Eu#mqEYL_Il@8-Av7Hn!waQ8* zn&k-XZ8RrE7Ca@V#S%?TvmysQQx+^V#@aU9!SDulw`$shxK-twyOg%IwPv}hiIA;& zQ(rhs--TfESa(ws@pysCu>AY$^onqmDuGqN`K$zP(_B=7m4m|-iR_KEiI>G1v(9>5 zo3F%LGi@EDnuNu18|zH))9zXoy<@y2TBD}iSUP#PtWAxW$oWa}>-C7o4gHzx7x9bh zw%g*b$gi!DOZntJi*R@3?|OK+33jYT`E%P1>)p3>7C(D^w6fh9w(^y=)iSHJ%Zy4) z@{@d2>h#{TP`lK+DwVTtf2eV-lWW3lbT19UeJ1^i;gSJEd4%mV9)ohzJa4vplPeR^ z6}VvEB|qulZ_@MTR@5deLEUART z6xZ|9l_wu^ZJ9WJd-;<^zabr%zBqQjvvlDi2Vx82GHzAQz_m%ojbV%1mbmvzc!#s{ zq@Taf`+hbVPMQISquxnxkj`E-FWE!yorikeYzOM~N{>pFM~^g`3J09pHG%+L?q{~L zJ8@}m3eTlQKPn9r$*@KHh!TpTs$h!qk&vjXmf*MUG*6t1CF67XrZ5Eidkrf)OL+)} zt)I_%!sB08FI_d`!c*Cm$+C8%jRvj`K_-G4qkMeP55dnarx5i9OVD{bi9zPCN-^p@ zE3`D4tK-w=xeY^`rq`M|&pH$94bVrJSXZE&B-TF|=fBKJPv}F;OVzVT(r0^(v)({i zUpl!ZdUQHwuau{rNSRT?%adkrpaEcBsJ!2uc}w*UGpszm^tYK;Yup?72}7l4?X&Zx zFWBUScM! z-Z6Sk_7aEZBXV%o9KUuZ%dM_ ztY$0a)oiA6%@$wpJzdEb$15w@qt7_}>wY%ApZ&IQyij^rdRtmt?cTRTmfz3rFWqb2 zTQ2=}n0M}HrTf{3uZZ~7S2pT>FS~cIbTN3xmaT)*n9GyR;d$wv$=gj{ok^)Z9K2^W zNb)Q5BK3pPpZh%WRvf6?R$myO=IF}^xG%QGIf3=*EYW~Yo^L#Q=|83Ab%kTd^NB$X!P)>(At=s1EN2&bXXz8dduQo_i<}QBUt?uBKRcgXEnyqr^~*k^ zCJ>r>gnZ1_vGY>)oSjJ{g5FFz#O)z-ipTlMT!fiR@<1lNlZ)ZSc*$dR@)H4NXUD})CzB%Gmxi$Z-{MR0F)wM!~^6Icil70~xDo;P-xCvr{j z+$Gdms#=!t)a7os-B>L}trit|QEjU{S{2+K4bN09rSr*fIa_-5`tf3Utq;_z_<`+$ zSGrU`yj4_vyo$XJuj0FWu*@8x@kMKtpD&%<=WL*wl9UF#rAwTvNH@9+otd49FeQXb zgNuG2=d+*NgJm_XOP`Tskb=uwy7Gi8q?R|GKjNC_onG6UBub{D-0Sw6C(GH{@O`e@ zVQF!-Y?V;CyPW;4B(oY%YTn~k@$Xj`qlZa;sxs8~yO zEXr6>FC`mcHfk&qtZzpuhZecL#wCqXLz>tSewpKvW_I1Xw`^zs`srUw_sB_U z_nzLCNwe3Nx;Inh7ee{-MtA1?LkO+*s$ArHYd%|2(I1z-C>=e0`r^28^!J0;%gY%v z3roXpsdGiW*K3#1d)S>yPx|VrA=(?QD_Xv#kV&sbkh30 z(0)<7&__bHN9?+ue^RQ9zc4K>g6gemzaw!904h@Zlmb6FJEu6_H*Lv0XwT26C6SC4 z?7?8|@g`yYP4eVOt0Hb{4(o}JM;%9OQvmim?rwR@{_d}^Bz_Aus~}zaPZ}i zWm0*-Z`8o&60JS9xtf>u#lCyRKfTymaCWPw~#H->(L9k|BuFt?W4cj zYj2`2P`^(OL1r1@Bo>sOfK9jK=H)U!th> z)u=|SxrC(zM8afC6)TtHYY3x~tRmDlMZ_UvU&Hg&i`D3bt*UEFvv~0G7{!aF-ZOQvZ#%&N9lQ&{JD!@==B1i1$J*;zD*#kD6>XEyd_!(3W&4 z&}cWk^D$aNlO~2MjQdP`RxXL(`xUL1c9j%IIq$qFs0&#a4W{9ZXhZ!g>c0lXp=%}| zyTo8PSUG3lY$CoCycBJ21XtGA$V-fC+D`N8AxN0}rxuDL_ z=oZ&ZPg(6Bouqt3`ZK+K>LNP)JYC7$y0hdmWsmPmj4saAj!Q2sc{ZnaB;`6RSqkkp zdhM2`VQBRKOl4Q9s{EV9XF=MvKXKYf>qhg6mf+Kh@dsXb$|Qw{ z_s)EqJoKwGI!L_I+<9r~tHn*)Shcs*qW`1j=<=*@ebUwTL)GPr_Y_Xux0No(>H$@}NOAEniop^iw0JA0JMN&d8V`Gz>nlgk!) zS-Nal0SK)(hDWIw(1`R@73`u5t5y^k2;5n9iZdM8Z2{>X@117n?cj3qQ#=EDcG$I1%dy*ZP)MntzQp@WD>%IW11z~G z3mH}{<$zLoa(=l`IyGZ+I^+3amU^FW+fdJ;p4;Pv%NM=D5B$(v^9e*M@Ipy1#-B~D zLvo#4lk+!Eg^}b}t6iS$`(FNGXQ-=kjxlTYpcj+ZaAoMD0)!z(Z|qbo(Ti5`yrVT4 z^HO-gh3x9H$HiM`anR3cr+MpUUYtMpp8bCCc#{uh5I!_j@{__p&$~r%Uft_+8F(dQ zGQ+Evjc@k1UrU9&8ED$WoqgAxscD5Dul?leJcr|J&G%WaLmPdgoox3;Z3$Va(iqUg zX<@&xsT5Kf9(dnc&!XLL_M`_<&{(lTy-YK%79O@I!(pk9wnHj>*k{r#UVA?y-!B@k z5A5l|Qa>k&7KoyKpME;N}O!2))z z()Q~EisIEos^VL!2eNiepX}08g*#qsS#e4)Nch#?_h0^vLYgXIPg^asO0JT{h`4(7 zwch&?uWZ&hU!Yfx0`|%V#2znflouDCJerKp>BjStl^5u!5^kZ?cE^t+ys}c;j&>jk zI-L@_h0wf*44P35$FtyjN=&;`)i052~ln3uTXbT6T0zozEV9O@;2QCtt=w zL3K5s$f8E6x%SW0tiGKlkWweeBh2RGCx3aQ7PdLU8sA}26RdP*{3LAlZ}^>|VtA+% zcT0*wg;zD_(w(acXO}w6cKM16_KPE$Q6F2eBFr*AYbRkt&1I)afyb1B zX)neYWL&y1`(84^EKrr9Ct^KXegHU~ob~PGYc7K-%EO=vv0;GHvwV<4J%xpF)@-p| zTKx5*#F*eB$C7vI?R_a_m(QD5dXZS+*KKOhO8r$Vdc+zl(h8l;?9G@*^icgyR#=YD z7!*0BUn6@g0vY-!l2p`amptt06`}{BNUA|fzb%gcRa#L&n1&hBqAP&6oort9K^ESU zkA;$%`-`g^Cw3r53C;@h*%M=30Wpi8+uVNKw(5 z=G4!uPp2faV;d$_Q$^)b(d%YoL}s|h%$c`K+1t{CL#ah?30=yLO4+N|`!7q`K`DD$ z%Jxgyt}gV19ENd3N>z3!T{|>)(TV6cQ9lhttWxQ(coj~2)yjA)f`k>;|mnHPmgkP4wFW^_a!Z!)=G#3il}7*WvDmyBqF~xm6haY-L59{H0_r zS;+JtaTYt6cdS>CEtah2G>hs&iTk$N?^uu~K=pUiw#w z2MGsgaZ%)JMERz>#zKLJ4qy-5-AAxJfiu2chrqBLousF)5Cl9&*RtP6J6C|Izd zF6&xYD+)GL5Nx=X0E!Jz1Pkbb0c;=;?*Dye?s@J_1itR?_xis6zbAy;GV_@;bIzGL zbLPxEb7hLfn1x94)Natlhf!RJ-(+s2Pv`Cg$w;V7d_os4`}v74kh9YzeNJwEI%Y3k z2a&BJDYVG;bCYw@rcY0c5Go?cq;?`9xD+G9WPljw-^`8R2y&X{C*x025*vnN3v$!Y zS7=C%k93ZYB=_SF9s~L2N!wbAH`m@t2|<<8^RLX0P+EF1gEuvy*4?AYB&n@4bL4_Z zkX@e3XHs%va&n|F2cw6p?i8I!BrE@SPwsa~1r$GZ_x~z&&+ZPJrjeRO|35airiKPb ziU0qxQVW*S-QB17m~>xNp%&J$39F-&2vyWI(kaq~zZKF(eWSK*Y#CAuX|aCMgaP~? zL@^|Y$c40@``^)Eqn2W?icLzA?b@-~`8n{P|0j##8tG!wOJESLr>uxinUh}2t%@}e zY3&4MJssx-#*Z38A6%{E86&N&t_2T?OlQd`q~zpfhGa3+NVd|{-Q`q)ws%r7Um8`v ze0g$Q>}I(r6b5Z2-3No`T-FSx7Zh2-Wf=$m83lC?C5$#|0pGux!`sfHW3DaHo(#I# z!ZdKKGfRe?K6c=g$N|RB_(%eZOf^CblUe4p$yh6ulU7b=V_PD#X;*9J`BUU1|IST5 zqYV(jl81UJm4-AzAnx|8LTt1MAp`DWZmhWq_ZmGDS7U9Q3>T3|S^*~uFc*N)DZwSL zlB9bUUtmEN>kpF44qK5Sa!EKutYOKSFLz)(r1R}5{hByv$z`o4o0zDSSi`b5{XS`u zT^g1E@Y|6JGZ%A9=94lq6il(H>D}a-q1KBf;P0p`gWmD zrxfd+OV7d=E_8w8{>mR*7~A3(;-XJ<@K4`Pf;+w zB6-Er)3Fqv$CD@;mSSZ0GkVA-;$Pp%y z1i83QBv`7ELW`s;z#VF3W=-#Ho0)g05bMl7QI2r| z?T##0dGUA9t2=6hmh&p7qy41IBp^cOUzY0jkq*-G=o6e!!&Uq*nGpmSC-Zb^Ga<1f zh`C`zQ8?H_NEr>}_nEYVl$=i|mZb`JL7`ZvK8;eSyp&Xd_R_p5#rFIjmRE9f>AC!A zHUpRDlw3lG^$uC;a8}Wo!glF1-8;875lL+C+M>N3yksazjC2^7W_wZamB9Q0y8%sF zg5DEB!#SUs*il$NIxHT;{F9C=5atU5DkgNWT*w+7eQItoja!r`7*|Zny~Kxcd~%_{ zNMFl5S2#0`07E4h+Llg!`KY zM=w+N^cYWkJB_9(+`BysfE$gCu$ zMTJZ_GFuDEZDut#&PLsMb`5j6U7+Yr`Ea-0-x+otAa4$9BK*(Djq=Vj#5yNOk0gMVVp zaEZT)_)pWb&>1wE=0ielsFJ_dYJ1g;u)Gb-$HAW?f6ksdI|)(Y za1m#+B|$UEQHhElr>ryaz1pfcC>q1*E(2&{Br?)2fX}jB2(FTuC^~yOMFIK;VA{N&Cl5K(cIAWQW0>T(kmK>S+~yIX`jBDuD&ml0J2 zjR-t0qAT3ak2;-zYij`G#b;sNE@RU<73I@6(;vvH5~Fk_G?pR4VQpQ`4#N^`lQ9Jg zVvcmfg;`PqxOFT{Kbj$G+ZRxd?PdBh;}oiib1Igt)4r}qFve82&ytMs+dAE3F;C__ z+8n$hpS8$EGcb^+rcWg_XpRdHw@pTx3W4U+s1b z7L)`AtV~7@2@>YuI!N=aPYD*XsxO0aTdQ@_gGgAC%y{VHgf}icDb~22SQOUpnS4R% z%g8fRKr2WGJqiIrl+BQbOW$ULBls=dT6sEtO-}y7pLIFjHQ~A}+A!oZP-jORKWunC z4ay{pctblMOyCx05Hmsd*e69gi-g>%(^w<*OA<4~j&n95k0~I_GJz9KgFB=JZODL3 zI@~5EojO3n@$+=DP44F$$LO0g)0zN*%rf0VmvPz_65mo7=`x5{Ix@nf;sTZhaHith zuwiGkUv5U4Fhhn(_m*VN+!J-NxhpCTTNT)Im0!$oMAAQ@Wzn?52-lH39olxgvY5b# zo-~7Ne|u@QodEz@lxc9PD1Ufji(;~pP>lDRT}MO%Qa+3(@|Lb32VrBJl;Kf&K9)dT z2jOFirDB6kY)U)I!6mD?j({2Y#c1N6M5{#M{{cd%WZS*^lL(1y?n3aK{4cYh|AHow z2CFJE=CGQmHoFKjI_7AUzLgulQSi~^WOeD~+jGKg8A!))u zKoq+|#|uDVWq{GK@laL8NnLk{&?WtUlE6W0>0alvw=!;}Q#-h5C5KzAncy3=saEnlay|WJ( z=BMQATUi^kgQB0>k)?0NbMKsCE_`0*uN@=dYd;&c(&1Og;i;@2rsXne&9pJbX;w@y z_~NB&C;W#ohy4YWbFm5~43k)Bq)!%)Wox9nuT+4a)cVV4zT>5|?}Mx-PA38{bw3^$ zufoNKD6CYBZGv!R0t)|-(pL756dpTWB?|wLXndZFUBt7Kc{%nFyQh3BMjUiHic`l} z*5<^fl7n3BErUSxwWysHBiqlo5%GUWWNYDMP{5Cm_Gi-AY6S_Ck~*<1EIo_4;$-ba zVh!6s6T==U8v~8NFP4vCW>935JX9kl9_qJG+F`MD@Ql! zSsY7cBtJt80w%IkBqCOx(e-R7sf_QILCK)+TlhY%4|?- zCLj*&{=_xx=ggRcbwpV+S%8NM9Y<_8Mx|sAs`xu)om2Etyo?gA zBjam44aHa_K?o$VerkDOJy0$W<2jgI0+~I zp^&n9h+(-1e^(mO2vY1HQotOEqO=|D2@_@$UL$^r04q$1L(iG%VoKeezsOd9&7*dG%Ib=;mmdJ4c5!2wF%L)bEcRZ2L?m^IF+wsXpw1^UlYePCr zmr9JJwna7FO|VMC?h_lLgCKU#VH=8u?^{cT#1g(^$q{{(Wt~5rAu@?>_>xFlW+SV4-#{Q4nU+fE^Stcxbmlx+SuaXhXMsbK*M;#4#Xk{N>GG2CBMzQ>n zUPR(&*^2Eu2}R*hC*q~17GQYGgvGgL#AbKC8F5U@b8$XeLoY3zS)=V=pxI{9A zmPBj?&ytAt4(ia8>9wS0X;UJ2{P|}`@j9^G#rj>{GK}+$`W_aXr_x_RJWX!f-T$x1 zc3ZI~nF=P`jz%9Op2c#U`=yCld)61E>nyDvJnC#SS9s*`Dm;Qo{Ns^b4$-~~&a*$< z3&>_+DDe*yr)UN`Z+sI`hm}lN@PFWuB;=IhT;Dm4iE*yGjb3VnB=RoSMkz(Z1>JZl zw!a&t(OG-rJR&;IOJuHOm97=@#yVwYv>oa|k zNt-olx<_p|J0lGlqE?AmtScyDqAwa^uW1evq7tO6yy%=rhzO#C`yHjTt^gclXa_y8 zT`d+6uEUGZwvb>Y|G2B!K@wT)7xT+4S<}BqU;Q@)A%YSGfH?&MH2I6>zWcStl&q}TNl0zLn5NNNRl6!Z#VVpGbesl?8Ffc zTaifp=bkuIoq?0KC%T6oJj}X@od_z9~778zsTUG6e4iKABK*o zurfphPV)+7PG=XFjge%S2^SA9W<=(|hQKin@DNGbwyV7o5{zD z!v0_4Sbm9DhnNmqDeK!k#@dXvu&qKlhqEkwiM20oT49}4Vtwdj-#%w~m|T2D*aJRB zq!mu1(wIq{_Tik9ZqZMKjyP3+{q)b}QP-lg5u3X8#V59vhkH*N=a(Nu$S)ixgyL;~1P4D^b4#ap=kvYLXiT?f;iVl18Tt zNgW#`j6{+K;O@oqJIM~I$&pJ~d`e2O%5RGqTbyoZind()pDj~TMPChPA8c$=%E*xc zFmoMo_)2dh{g6FYLX1FNpd^H;w?v_YpG2?GOBuCEYzHhXEz!YiH+adwYlY9oNr(eJSbsu0b%&SiDP=_WZ74eh@^i7KmKR=p z9x1ya$ zymAap)-0BOIADcMepWYJBHuD3J_~aM1$G9UHBF=qg$MS=Hyw#PkpWXWgy^b<*q5^A zNBnV0I%Y92;_(nIA)-wfsVirZ)~ze1O34)gXMEuFF3z=)=`DV{!boAUbN$*u+V_AY z43Ptf*yw~agYiMOXW+XRM~ma% z_JBLgKOuu9Rl9_3jl%?4u9UYYLLl_Yrom8)E(lt)HVYX)Av%lfCn$T|3Ez%9;oI|0 z_;$z%-=_L+{jQ>OkHoW>eb_%JjPs57cj@Vq+H!_n<@pKI74$7X6UP7(PEJ>op&!MQ zQMJM|7o#GA$^kaMcOx&uzp%%V@eV9I>qWo)=)R;2SyE={$d=1SXOtk@uJL-<}(> z-Eyb}gD%%kYt31IK1;-}R5i&ya}$y9>n?HvVNYpo%J^|aE(k>4 z=^!B2p-P9#2o>#$D-1P9vNOINWqDZ~m=Jmyw1%}Cr3_B^WDZl96?+xCzv;AX<;0k` zrTE+qQ|XvhARZ;yZiS%2Ykk9DpJ%IRfutQO6k%&js5BqtGnZW$zPt92I^cG}KC%o* z5_0e&R1&?)5*NMq1uc5-%a`73aeoji6&(6ZCn^v$5pfE!!RFD%p+1872i5R3KpOv# z>Tz7X@u@s^uH)&>aqIGbqauE_LZ{;qcO08!jb0ID)qU5Xs__0@g~m^+(DZ?5S7`bQ z8Y}G`71#=zUP*R+)wIL?{|iL6sYfmx33x}Cy{n7gJ zJaIY7O=O^6S>wxY5-_pWL0`n|PY`7ZS9UD8cc_8yA#?Y17wk7?D_s!HP2sYG;cWLL z^oOlOJ_zQUwP~<=bbbaoT_D_Td6u^_S(PvV_n)lyv7jG*9;AqlgN%mOv*Jd@=>L{{ zc_(`lqpp_|UeSane1ELBkikb>^t~{gI>+i=X!*xBdu1YQ#F+1kRq9xG&nx7_D_c&i z^+{szW=xY7dgy6 z_^2C9t}78LbVh%zE7Xc5mOPTUGjWfqNK3dWie|FP@ZJ&hE0CTFCu zi_Jfpi4sLgJd?P`WZsCkQamL(9Y%pt^D+mz^|PW_J4Fum!NNmvK-z`94n?vQBJ*LE zP*4HF{)mc_{z@i+#d%XXbV|ZrVXA+4Y~UIu1}B4HYL;hY9_dc2j!uA>T*%Hy@jnLB zFp|X`bCKN&$q+y4c_yLXVdrTi^WqL!?ImItQjlZ3HdI0WFgMjhVOcW)gx;Pl#WDx9 zs}JzO*@cxS{v@^X7&S|IV7s}{gR$Zs6qefX0CjNsUcpLj;txRn;A5v@8eD3Z+hMvp zSkJD0S&ykM154F=MS??P{MBKi6^Ub(-X+@2M9oTh6{|KTvt#RE(5?AQ{Ar2d$9m|T z92(q1_;WOz5Mg5i$&^!;3&d7n8C5*|{!U$%%3VwxYY?28zyX06lB8*)q0WPcG5NBO z#?oT)%AK}_PRUdjc3Dp}-*f8%l?iO{4;b-UBs`W%AS!Jy$R7quTvV6ynuK_y46 zKGoF-i4GBOX_SAsc-%dK+*Xhv&ONB)dk$?a)((b znDk&ArsxKvev$EG+~u*7C)@7sn2B{TkcLD5-M%QhT1AASoD%7*0o+}*p2Ypr<8ZoZ zg;-TK0Ftpd)J2L)+egu!4};7fc3e0GZ)K#Zv=2*z5vB1&A41tBgNuUmWAUtGT#k0A zl<ZSPA8=xdE~Tgo?6(K z+WBiUv1S~r&3;`50!pS2LPNJ$K@FVw0dWRsbjgmu^ykBpoxwF#j~% z=-?%sA#p{V@%{ni{shB?p$1vvtmzde`D~Rd<<>Gzl>7LZPvGgh!mm?MVYjZ8Tv0Nd zK_WEv4LdG{3!~iZDLi&N?u#o%vI(s7@$G&4)i8)9*E4i0Si5f@GE2LtK3Tv9s% zIqjl@M1MgrM#Mq&^Z6GL0rS4z9<05rp1Up_Iixp27=)WZtsQwuuxGWkl*b<1bHYPx+9iST_4nbuOXLn+jd z57&@<(~Oi|$QeOXIWTUfoL5Gba2hcwW=N95S*;=D%$z@_w5?{7L%xiA$c$S_r4Z!Z zwJJs60s)Q3sS+p%v0m<+O&7bNIlr|RxXWOIlNNd+7<&1Bx z&~bLT9@zyTjtHyD}Wt@#>p+gAk$c~tu&Ly%FdBf{PVMeFl8D*W^2*_ zG$!F5LbTXn64RCCUUBXJJEkj3PSlE~07?8dVvJVw-BeC-;e&Pfs%R+feKSB5mSJHi4$yu}ZnbIl&uOw*`k%Ijjd6$}( zsiY8yC2lNXx13@{YNT8m8>bT94_Q2RmVrI;S=g_Jsxb1{>Ge&-S{_BH9k9r)yA~V5IZx~G{#Bj6~RiWxZcGwh6LR_Prz_HPd-Q{*4CFJX#d+CMfuh|#e zk#n9BGG<-^AEew#Hn6U*^=I-7Z`kPE{260xZ_P9!B{!F+abln&6q9T>DlTFU5()i( z?2Pe|!Lr&cvypME)%&;OaH-lEiaaADTV;q#$;CTo!#ko~La*SPY&c9_CVlc%VVv(Q z8qi@3!Q>s~St3Uk$lntIX{H>PVj#_Tp4&C1JANm8O zjF1p}JRaFN2UsLb;(OC3CFF60$qCXEbYN3U`r#dNMs<`t!#m`SA2_aKANpR&>$_)I zRd7~dCa2vW>uEAiMJerkGjo!42H2Bm_4y>CEadoFe}SNNoV?(7P(BgRlMoYsJG4j& zcPvoa=}nP;Z-v{xwj%GYS+A2*kS>a?>C{yw_1H|gP|s?VUiFP!*gKj+jzHyI=!qml zJ6w8saS;N6D>QanG=)#3T~Y>&8Z(ZtMj0L=v?oH-g!92UW z9|KYLeHZ6NI#|!MuYg&F?XmxL&p#SRx^p%4%EzhBmPcUBC< zSU(sxmy0x4pHp1III72?ureKinh)P z8iP7({7c)+1lb84A?o`q*U-`>yXbF>oX~t8gAs;d@8ErsXz+y2iIFHv5{CF@RbMuV z6DiJo9wPw$WMxvA1(#`ye7j>ew`tpkrHYB@FZT!Gtd!xta}LX}BQwMQi-P+k$)=os zINUf=LW1>&_;E!XK$}F9a}X`BRzUrie2{ZdkU({j9$kdMFn~^hj?1S^h zfzi)$FNbT$UxrD_Z#`(#z;PFjPL0q4kiDXoRJwPCCY#D#Y&uw z%o)fWoZQx(lI*VdW{aNPBQ8tT8|B+6{T8gTnWL zrA_0nxRa;m6=(Uteiz1~1P374(-N!~(?7>o)KZSf!2~Ko$qAdHHxXl!2VqN7&d~wz z5`GyvbV%Sp?Zj@;f#SqNRA;m=G${GQRIrNNMc$e=blUa|qOOTOxb>HbY(QXhUyk^5F2dC8)(EC%RFG`)DD#;9Bu@t?#`(r0Do zbM21Aoy@8Zeg-)Y%6{cuVSX;}Y_O?6(IbcLHR(*-(&0$=z(q$=9c!}auWQ*eQ3arQ zMs~tkPDMH5&>hb@jA^7SCh`rsiCw$WF0wS#HL**qN#GZ|TvnLejyFcDgc)qtw?`dm z^JPjPqwbrFSFPo=Ov$V4vy+Oh(nnWdbq71RCo`>KJu_mzTY}Y1PCAv8R$3~iV7u*% zEK>Y&i-axBSpjl(vGoR90GVvqGWjA2StgC=3`6We8-VV_$XfGuRs$RO3a0|MYbe%S zoSfX*;!3~5C-7Tfw(zF%Galg_bbA~)F}90Hc31rBIP*o&Fr=J2#%|b2bh9}3gie{* zQ$3#~Su{gRw)0yiG=5o9o_~(+Kf- zwXA^wsrmR=3>IT_M~XC`dZckYvVq60#JG%6)&A3&0^5}Nv3wzf%r^+lmR)g( zyubV=E&}NSWeP4+AQyVgq*(gM#K>3=DRpJnnZr8f4tut00 z=(%9B)K}q+zbHr{g5U>DMU&g5U^{QnR?)Acv8U6^La85}k(_fuO61ZhD3eTg0GV*J zauR!xpH7GqHh~1Ju)RDncAy-6 zYei4yr-qAd}RR~B>chKtEXoT#OTn6n>R zhA8(wPS=xhFR*ZdwPfSFpW-2&JlW-UjSO%j5sMzltu2`q^!atHyNw&2)iju9>|&qmMk$pcBF|~ zB@DpnX@%Kx+LE2!@a1>TpU)R}<7Ti}uJpDU_QoCyE9Lw5?&Y{p!m*+2;i2ona!oj_ ze7!i!2K37uAp%)Uc_PVtonfck*%-39{=sA&;jTN-&F=e_P82B)Nqw{r^-uQW5Sr-G zEdBu*GBv<@bv_oix*8qx{2uv_C>$B#-dR5=;}+`-eq#3|5{*X+`tc|Y5+Fa;9>?TP z>_Bbl66L9a*nU5nzD;CE_9Adxx6;2ukRlrbJ|e4J+MI!!?p)fMQ{ARGW~K4 z7&=qmwh^w|_0dRrx>P%KU|NMcjKvJf#JFKvhd0K}(|m_1RXWC7duoNH)5Tp&D(tO1 zSzMI$s17W@w9V$J?S+FcR3T0)GgB6CqX|aR$znOkCNG(A{4s$I$Z|P22+!sOmmVEa zVeHUJC$#cwm@AfzHJA{%V#yxCSMP!;*huTX-CE%RE!VcAM;7s4VP zI7cp-R~Rfaal_eVC;ylb**at0p`!;4#&Y4PNNNmBO};lWhea4ds{Ba#G=v}9P%Ig1 z-Z6H_UUUx8$e+=nb4TE#os~6XkQlx}m&a^S%;W1TC8OI^D1#cF#PG_fbaB=auvvqi zt~U#2`7)ExlWX}(PgI33u$3ivT%p)2*fruWXv@Few5okr%o30Fgjalw4JyYnS4ym3 zoQvv~1q5Ed6)(YkomL!Q^)MrUGM2JTu4G;tJ!R4*pt|xEd-7f`i9vHgqVz9O zvn@T#9+qtF#Bi9K3>7$-iXvlE$4p2aGkIjnh*Tdd7*=dZZ)CRkDP1ubq|8>qXN79k9&&+A*aDq=s+snwJq?|21gZf?vQMyWrV@& zAm+iMqcNUx26AA0b4vGAckZks!%^q+!L~QwjH}IVzvoJesKkNjp;xxi z0^==O_dl@fmnj*=x^Rj`hRl+S#+~q5=-*3&z9abHj*UYZy3EnPJ$ca1fn;(DKMAKHoA9_ ziM!>YC~brp8vQqyxzWp57rf=7^1Y#sUEez-rSModiey3NYU zPHonrtn4&-9Mj~m{HfoH|G+h-%Afw6(x5`phV`p7s_>xlP2(y}DnF`lU$;uV3itoN z+{9F=dQ!FOC)cPMTdQ^*nxhuC^-iu@yH54mb?Vlx)1rxqF;!2lTfJV5+I1Q>s@bW2 zgZif=CD-ZFpiyF%#tj=cOlcI~Xuvt01~m7)cxlc!vbCvKvwnlv`VBs)-yk9NNKEzL z>Ye=C8CB{xNJ{R|W7xUvI`{6=w@0V5d-dy|^!Yi1l6$rtGO+v5GmSY*@|&u{`hePl{`r-0JM=CwHkG-o~C<`1pB&56)I3QhHAvb#F#4bTcs-hn`$PeYE0E?T*t&z;q^&X z3@=Po(({^!Rc-#J&6+i9-s03#Tedvyv{tQ7KRps@-8!yKo3`!FIHP_04jnpl?8vcy zXPy}!pOBcCl-#*%mu}sOyfzIv@Qys9-$YF({X!$$2JH#wzamz1Uy8sD|sfWfD>JT0-+d8bGC{(6)0AxU4f z6kDpfqC%BFRbo!6=AKoLi4o35KQS@2Vrs|KsavmpgNBVLrx70tYSe;4CE^9xo%`(?bZL;e~DyE`Y*F4S59x)Vou_xB|okCIm5)6 zSX0HELdU_kf%4PDoCZr9SNN$xj%wsM)ikyFBIb0{iX4pqY+@SnTb2H%2|pF{HKqrW zoYm-&TACK7nQ2a$k}{mG7I$^{t?fUp>;J9K-+KHuFe!KJsb1@@laQ_d)t{;mdooo~ zlB+}h$^0~+c^dM6L+)!pQazfX9+jy_bz1P#iuc|4znbYnMWqqDlA@XE?!WJ3dYDe6 z=*jz3)7$jnz5G9z6hq8VGo1HvW|%pb6scyU8Ew+d`DTn6M~We4yiGB|zMp6=;{6~} zxc6t7Boj}Hj%EVPsc+={B^7=yHQ}GhCj4_5EW9lGlV;LP2BMG={mF#A?l+UaS=?ns zf3mGCWgGXC!(ER5GllCZ(VvUW|MpMH^ZTmTDveoY5^0RCG-)!;_=MT&{}|KP+{lxj z_THEdq)3DjNi?#2hVUzC&-edswSTXpQMa0F_%-Hg`+q+(z@)&6K`>?#PYn$_*}icl z$&pzgWZ7VN?|!pjiCkY|^33J@oyu<>zgx|n=05XJ^O$+k6qw~^rCDRvnNqU} ziT|m3tqn03Bk#gb;h}IYXv@p|>oof}oyr718J1hweu^Cbugf9n<#&qxKgi>*T+S@s z2e~C><#Z>$H-3o$wR)AZ|L5wplIeS^#+(#WEvEX(C&yH;^r>3uo?DZ$;uq2XSW}Bm zqK>IcmsJmG7maMhbz|H0G(iiSa@EYwva(wfcM}qSOPy>cjgXh*=!k8)y2PbI{wa==)IreG+2Pi4^DZ zemHF-ntw6rN04Hq8HK?YBDhks6|s}6qJnD9?~sAwPkNk(zbrkg%H`qPW|?zb0zdvn)2`qPiQ zi%mcOX8_j&{GWkb4~+iQwCR-p{~Lc(HXf{A>y)W!#!R}*nDWNPtR7}eF26Hq)_uHe zmmqx?A8Z%X4TYD#@`)SjuI2uNi%rV2zgMqS?PxVa`=_ksy6wfi402}7Egg)R&)@B- z2JZ5gZc(1UGFt9a_K`NLkaq%9Tnp2fzmHsoNygu%v4#=Fm<#DLfi_(mI0Kym8BL67 zf$`XyzYkspLHym-*Zu8)6)$*u#yewvH-FoklbkX^D7ew`P{cy zK0oyD!L=A=C!3U`t`spj&*ry=NxAz-^;$pu7_+@UjfH#|v!z*#8Gp&U^WL53na`@n zm{$`%er?&up851wV;avYFJF6uXRd4-q?uJMNHg=7AkBtvjp>x_dER2rv^XV5-xNzg zF;Dq9NT2^rkUst+WA1tS*|Tz=^~@`cgS;dcqWSZ8*?me zt5IJCn6=jjnC;#SFz;O%U~Yc~CYWqK;KPeMn;+P=8}I}0V!?Skmb|yaGrz%$+gGjb ze9dal+y^iIQQzD9v*($6;KjnkU8_Ia<(a$T#lm@?PFwb=XZFI2J2$@2`id7k(+gf` z`kwGY)AxWEntma?Q2gQW;;#J<)HweE&uoDgn)fq!vFOab>$dJiHsFQQmIN;pXAitk zoa*ZWoGaml;>>~>Ynv@XqFp*{C6s*$<~8EXhm z4e!8V+My}Br|oviUK7R7hZl+;4=)sdFuYLwmGDCG&9edi=K2Btr$t~3)&>(F=OuCJ*`IaG|zn8BE~e`J8oQZHP7V7#h6)MAJZq< zGauIA`JP*DIX~7j8xI)M?2R>Ru1@gGyE~0Jt>CM#-nhy$?LIc9Rkz=M`~FSOY=6g? zIqm-Q&VRo1%ulZxGkbFB{LpkWF$81pM1`VDAMdeWgm=~?=CK+pWpMU;bmS?Uy zS^7|y_bT2?tSuVtmuziC-NAoE(* zAozY`@#t!1v;FKVSU$yPi1*zURFBQ2axaJ@YMn-A#25|9J4QXLiun&Fk^? zim$&$>u}nEgif8;^MAZ1|r3T1lIdRL@)o-!=W!@Lki-hwqwxGku-n-wofhz3FCp zyl2jU@0zzYe4iD!=Yu^vkv;gXw9SF7Ns=v2lmbosW%zii+0i)R+0%ZmnYS+Z)2XYNFo-E-f zrQdj_D|~^me_0{$M z;+a|Ksq$-v9piSc*#zH<_S4V%w0!`-6z6Z~sp340o+?h$5Z@cyG0x#Mg71oxyFI|^ z2;X1JTz<>6<(?S`-?c6;z@tx&+wD2{vgk~QUmLzF{=4u+>HG%1 zDE@fHIK}@vd{O+X>F1U2e`SnQ{HyF3=kP!MGQhu+F;4NHem%fH9lk4m&a$9QYQgtU zyb&YJd7jyTz87vUgtf>LDkZzBY2A>1!b;nm!Xb(e$kur}}MNn!U7@XP!Z3H1AW$jOKk3 znbEu_Av2oyb!0~KZbjcuKeBV@lh8j3`B9wV$dBTjhx{ncBgl{9q#-|wGZ*<$oFCEm zQ$Jd|bmnQ;Z|J*X?m^!bb2s{~n1hfd#f(9g6!TPMNilClmK5_7^c{_~cIIl@d3f`m zxBt8qdz*Hi-1p1JzQk61nRdSAiT4IR^qyxfp>0zd{J!t^@3Ez6+Y1uEedXI#p1F{= zotyQ++z;OJ%nI7}*0*0f^On~`-9zYduB0hsI>h=8!FB-w4vg>OB*UqUvyA$dZB}gb2d7tICs!)iZhCK z``d$?Mn1R6GgE0dt;<&0?arT;)R?%$Ghd>EeQF;$aAY5L6gsHwwiz8%{4VIA;_pQV z6~E@20sdTcQ1RbH2NnNc=%C_1f(|PF!|0&mA3+Bd|7CPg@i(D^N`ERksQ9;{gW4vY z(ZRd-UR~pytC1`Cer}Urzx#E&XZFDN(L*=?bMyV4*$v;*S3KPL;c=c>2;Ya*JNVQ3p90@?T-X5L zHSY()_xK;)`C%=60(@86&S1<{oE`98aSp?G#mR^7ijymR_i?7dcg1-NzAMhv@cptS zPo_M1iD&MI?^>5S=wPmgL$C{d3pzOTWcZF9TN@qJcB{1)zWDf=@Llm+uMhBh!*|7h z8on$3ukc;**TZ+ke;>Xp{(HiAAHNM_uHtWp?@Iq6_^$Z5p)vP)_^xd-F*N3W2j7j^ z$Hy~Y!*{$ce6XqDyCJSABf~S-!*^p2@bSzw@Es=$AJ1G3-;p3b$Ul5HW(*(Cw1w}Q zJ`TQX`qtLQcImH#?~30Oz8hAm+qU)0+wfiUz5(Bj+04f?ufunxtp$A7azBIbinAZS zD^3=CSDbYCt~hD%U2$I7F4vBpS@7MMB0iqE9lmQ_s={~0tOnnW!H>bbQr63~-D2Ro z;$H;c6~8HbSNzWKUGX1=?~1=0zAOG)@Llm=hwqBN7QQQfbNH_KpTc*=-}ky)JNnb% zyW&3q-xYr(e0Lwu)Mw0Xl6>^&&h?(D!)&6|hBcxE(w*YqRcyQUuw-!=WC z@LloK;d`A!OPBVjihT>;HSdq`y~(8V@{JGC7r}R>Efu~iPL&S>oR*BaigO!$SDahn zyW-pe-xcS(?E%h1@V)+j_V1tC$TO?pyVPYUbxDNpwGZ5KOTtN>NrvxD8hhTayFGk# zLA%Ancg4RRzAOF!_^xzb4Br)hJ$zUEQ=Sd*_riC@-vi&3FT3Hp;tzuFiXT%N;GgrrAGq%q8iTe7qeFWbXXCZu7oX6q2 z;+%&3C{7FHM{$~q{P;M9I|7^}`i+xU?A@C+)HB2AH?%IVioSb`7Yl8x;d`@&o_Amm zwh(;Rc6%AVD}F;{N%1$pcct?O_^$Yquo)EpVfe22f5CoG{5hV9;?FJ%@IMs3`}8k> z?~4Bzd{_Jy$d%%!OMl|GZFPJp#+x@!>aq=g&VoVTEM3oB>B_hm^V;J3F7JDvXSU+Q zxoy+)r_W{*vE_gUseUbdz9txE;7#&oa2cm;Y&j55#>A62d z&rWnu(|>~wYWlCyK~3Kq9aQ=ciVpfby#XE6yw{?Gn)e!XQ1fm@2Q}}#=%D6Z5vqGT zbWm~Hpo5ANhYl*vTy#)z&O!$jXAC;1ZTJ>CsB*Oq9aPLW(Lu$0107V%Q@010pQD3{ z`4c**n3?FHVm=k(%k}7>;$MRfD*n~zpyF>q2bJb~&_Tstjt(k*8+1_dr=f$&_j)0| ze+}QOjy!z$`DLE@3cjl^VjFx{d;S{uu4(4McTMwG_^xR_gYWO1`t7#&zx7NUW3;9} zoiSR|w_=Re^t0f*rtgN_Hk)|#=;o!Kc>}&{-Zk)D^S%b(HE&bKYt8#HeAm2X@V!$P z6dpS;9lk5hWcaQ)m%?|&c?rHN&J6gjI1Avr;uv(NW&C&FeUANEg>hUlJ@~GeN8!6- zUI5<}v+;%iGm&vzF&~8QiupZ!|DjEJ`4;-~hv2*7{{y}&{u21E_y^#-;y(}HmFD&E zUGdL>?}~pDd{_K<>3hvjd_40ee9!Iv^>bgB;(vzk4bCqwFMY~0YvB9+r+@$cC(NTW z;Jc=|48Cic$?#p%tc361p83l!@4@$~@Lkgz_^#-v;Jf1VhwqAWFML;=@$g-7 z^5MJU>_Fd}x8J}2Yh>vg^j$Hx!*|8}3cf4mS@2yke?{LFvmSg`%&XzMV!jLCbq?|# zMW4*qajdHHr(=VA=%-H!I$=$Y@4+rBwFR_?fgwV36`^k2Ga-l`POG-eze^!6Pi z?r80qF`;sIFb3)KPK<*}!>AAqBSSO{3DNKfd{i1Pwd*NvURD4NO3y@SPhu?m&abwF8=tmBnG9w2eg$wT@3Ahgz?x$f44C zEpn)Bc!0h_ael$(SDc^s1vtZzL#3xCa;TVXkVD113prHGdyqrLT!b8|Jlu&KY904{ z72rRP94h9Uj5}K2?#Q9G|5eDL;!mLeQT(y=KZ-ww{zvhjr2o-&m?Gnj&cW$_w5(rV z3d-t3|D$DX$L80vmLhxWz4OiyUu$1vUj6M4BX8@UzIJA(Yv~V>w|6dha&f_v_&t!f zce-wPNe)=fId4WDkaXP|x#c2oM6{jtH zSDe3Y4{&$&y0ufT9@ozgC;4l0!!2cdUw&FjEUrX`VydL0phVP0$ zXPI2Pwml8LFZ_LCm9r+|qd?#PU3cG}ukmO0K;IR!JNkaj#>FjfV-C9+zHg{;;J3Z_ zGd~US{S)}UaQ=oI;d>(be$C;Vt6a@ocn1U$v%J*XQUDL0J?}}f7zRx<687x}-e#H2=+?eOaJvF}wyL~6)%jy?y8rS|NVgo|uKEoKN z&ky2TP#Ri?Xo!SpXda?rW{8I5&=@xW8kC++(4h3>L4(rM7MXAQ>i+!?pTm4GG{&_? z=2xV?xp)C%-`mK1gYum_(_)zSA@f@I*O7U}Y=O+beE;H0`=BFP$h@XcN9HwsT4;=W z1)0~pvygesTMe1lHkS=0N?QyvukCyhGOzV&ip(pWosoHM!$*;M#d!#sSDb$$^NMqb zzE16;mymhI{1BN}%z?A-j2UGxrP3Vi?1wlBYIIm@kRj-P+_!so2fFb;lO^3_*ajB9^| z?|Z*rzrNuF#sc`R>DR$`P5(B0*YvFz6BU0eeBa~Ud#@SDI%#Np%!cnDwA=FW%gmdy z;JecH8hlrrx$s?a?t<@%Q!_MHR%fhKoND_6oJ;BJ6z9~9*vbC7e|N@8t;@gQ`yTK1 z+f9GZJPzOAtoHkXUw+3PfbZIFkHUAwKMLQK&R5~P;(r3)6@Lihrs6Mz?}|SKzAJtf zd{_KT_^$Y?;k)8r3Evfe5qwwt>d2Mik9;O*lb_)GPhL)rIo&fS!T0BD{JQr?)*oZw z`(tgtShe~K3We{_W-c$5xRFQD_ZLq-@Y6oVxPPMWPq+N~{dd3i%!BCr)4l$^(F<_xf*>}oca3#oXzOF;@pkCKQ;E1`B%NdS{3@P zb%}%TuYG>Qxs7k2e}?aCs+1o&T<)3H@Lk(20^b#X4t!TSd%$o@IQw^@448yv-Wly~`PY|Mlj;I~gy&V0>A${;Ag4jCUZwn64K?{Z{b+k6=^ue3dl%xgPWN9MI&ZzA(b=a=+R+J@&N^NKSPnOB?<$h_h# zMdp>B3}jw0uR`V(b1(gpV(zCeQp_^C1(k;%>5H_EgOPc~uZqko=4r^h)^{N?ukHUC zeUak7ip(qiN@QN~Uqa>;zdkar_@#E8+WDz=y&jZxAu_LJ{S%qjvQm+GE$c5K*{g@l zv(JJLHhD@-V*qbJtV;OH4?X>jx`2+4ejm3f!< zW@O$N+0nr~B_#7_hGf1IGOu;K7MW*%3m>ed-qmY9GOu*rhsle}V5x+b8f{aqfWc zit`kFSDXlZSDe$}yW+Hj?}}5rJ;3P#-*>+G<(J*=@yu}eu6210zANTh_+Ga*zKfq( zuZQp2ZmZzC;x~csivJOOS338=cg4RHzAOGx_^$Xj!*|8M5xy(_4e(v@zk=_I{{Vbf z{1@T7;&*`WieCWV6~8fjf5*Fgn8Ejc1AWe~-lLD2c8t07b^m(uuFgH~^31jLGgUSc zYtf$mihd?`^pDvvqrZP*F)GdDFmxc%pY*n#vjHxK;b z$;}e8x12uqiVtTz{UPfV^fUMT{rS{l*8S^-%DsoaPM>e5uTvUog=mNk(NHx+!(|~F zT0ldmbCCZvo{5JBrKd48C_NKpeD~>DhsA5*I$gE%Ur%X%J{D7tNa|$HVK*6yv-QjHSbbnUfcX( zWL{}|2$|P*K8(z3y;dUgO6Nz&ytd(BWL|LwBJ+wf0GU^u`;mFA??hx?F$s|7m1i@t;EG z6~7weyW+or%q#t0AoE(*NMv5ix*M6-vU(x&(Xv9aHx!wl=CS9zC-G(>d3!1(Z;yuL zt;)y5GZ!KACB$waZ(T3nyLm6y>yfv9*KA(88J&6&c^f-tb@u8E_Rt}3Ih*cnaqno) zoE0kfZDd}b*QM@CL-!C3-9j`ZglM=KnO7PHg=BsLG$=j&ph4-m1{#!}3C!bE9>y|{ z(>5H#JZ`{E8*bll8T)RMT()Pdj*#N(L zNT<4lbgFYmr*1~(6@LgirSzvUjwt<`ka;cZRCG$qT7%4MU0Mp?6gQI#m|H9<+~nzv>uMxBQn1GW&KWHSNq~4M_$E#I7nZo zw4D#%6{jwISDX&;U2z_e@!iK+4Br*!Uihv!`|0ZxXBm92x^eH`-tnIKH+`Mfr5AiZ zEHQX>uxH?V-Fn1cGFLqtzH7Uk1>Y6_cKELNBjLN^Pl4}>zlFX|@#EmT;vbgr-N!#j zU#Iv7=<5`JG<;Y5I`Ccb+rxLoUku+Be+PY?w#oJI{de)(P?yc{{pgNwzm?dzPvQF= zD^~XW>q^gj0^i5p`OJuC;OQL3K}|E0aZu9~GY)E+_3(Yebr0V=@?qr1_74v86y!wH zH$hG`eI8??razPZN@J5=M&Gq8&eVzKeF1&fymgTo&HFxl*Sz1s_f8)$z7sEcA@ZX* z6ObRJVLbAqILpv?#hJD-z_}iMSDXXzz256fmrm$_ZwkIE=5O#_F@J^cia8QlQp{S& zlG4@|SyIe<(09fB3ci0o=fHuhu}K!A?}~pn`mXqQq3?=c2HzF`N%*e#Z^L)R?}=O~ z{=8=b{5JISI!}28z8A`##7BvjfbX^LCx#Y3#*6U%ff4WD`r!NQqk-?5<^uSxX(qsT zP4f(V|2BKquAARvEJNQl{Q=Q;AM-c#UDJ<(@0z|geD8Jt=Sx2y$NU$*Yu;$;d}Fo zzWeU2MZ}=Ocg6e+zANUZ@Le&J;Jae(LEja#I(%2m+3;O4*TQ!^=zLh;XWXAXZqu!s z@Pplmy|HP`>Q(cZIP7Aq?=&2FCe2R9`e)j1dF_=g#OdwiyoHj(hv(Bj_rcz{EpyZS z<(n9n8S77ZpuGHf_*i2VG~BT5xouO4e^`z$H|fZc((gRejrbpp+b;~2ds3*}5%fPA zZ0liS3eu!Qu=6du( zF-y@4rLEoe0P`F4LNUu32Ng3Py->`T&Or@_*?0Pd@243Ofh+ zR~v6R@~`uby6B+VVE;zmI$uT%-o5l2$lIutFQ5GK5!N@6H|;~Jqk{`yUESp-bbL^# z+>eldeSRuBs5GR6XgDWC!`UGk?nY*mhSAWVc3?U*C_U#wgVM8rx+^`GBlBuk=ZMVv zbL4Df{`?W2EdGQ(FxJ`tZk~HGGOu;7j?63OWMqEfTd$mXEk4XALN@=uLN@ZtCd9ByQ$h^`y6PedG{13LD;_Slq(>m_l7vS_q z=9Qi!8v@Kzka@+t37J>Sn~{0Nyb+mKdAI?Y*EabI+fV6y0GU@hUqt4$z8#QxZT|vf zUh#(^^NK$hnOFQ&WM1)?AoGep37J>=i;;OPYu8IbSxLyembD4nPs>_9k$s)@ynP4p z{U%++`fr;E-!pmr-sD&c0xc@7@Wl zBlq&WZ{PCFcY|eokq?;JjCY+qZ+9s%#+3C0`2aOF8XL2A{nt02`8EE-UL<|((MLOV zVx1@poQ!STR*K*I0%PXqJUDsDgP!>r+WNDN1B%Q>t{ZIm=%cBvJTqaCF}0rI1#{<5 zNPpj*KW5(bBQb%{&^pfZ4no`4;QzMki!U1YVg03lP_J>8o)Tl2n_p(1mzWZ+FNB6x zdsnW!p%yV$HKiVp^I<)@pE2V-IjfGitQx`d$A)lnQr_y-FHOUSq1`_AN&xcA3#9M0 zVA}X;*d#HRQ7;f{!IAVlPwx${=lt-)-B%Lt3O(cdu3ETi zA?s++`OLzSp?$&3fu4Ceqmo9^7fpc%y}ld1%=bPt>+zu-Y$U$BO^Xcnz;N2(``w<` z_)g9ZpnYzp?bq;omaW%RKFnWiUEK8#q*=7XYsFA&-X*VDzhXsP9A~i5<}I0z9Adtc zBJHrYB(8+#(-um7NzA_)XG@!W!H2!o7sBh4y@MiGdvb_>Ce3Hmah|m8<}F(ujbQ6q z8s_uCZ!Goo=9~GXS<4Amy*GMKd$ikqmNu8>=h~zZ*@K2;X#3%A&zt%@er9RITS`kW zzSuJ#LBku~HRqXYnmTwfmADxjls3zC@e+t^dxaKi>)8kvB7I-#(%Fe36;cz3o!{523kJheL-B zF?a50>$Qmw@zv5+nPso{cNo^IQoeT#L{XM~2+p=LXKpV8Uz!WMqs zwfrjWQrd+*MAWNE<3oq`QI{vJtV$x}92$%_f4<1!FPt29#r)FjQfO#sb%YLvc33cl zn1OpYy)vG9U3{rAFa2ffodx(mtI`fRk3ZMvxhvSiMfztKmd%~Q0^hBao9`Vmhwfuf zF7kQRzdjuLAu|71E_U*_@4VCGdg30b;}h!&nl~@N-#fsV%WHbSdepZw=}&4!f3gE! zLvst->RZ+t>L7>BiSys~G;~&z{sfZed*-%u&JAc8YKaiPPT&HsVEcNm9@DaQ$p)>Gl2b3B&6H z{XK8(`{-Q?`ZD;-FCYApxg>SJuJ_Jow?p$v+Vf*+f9g^rPj~@SpzTunF4K3_s)h6e zskH4sUf7W`l{P8id4n%XN>Uqnrm#0{b@QP^G8dT6^G5gm^2;NaA&0`3CrT1aE?~Yu z+cv0=zXJL@qqB8hdho$93G{XCz&C68c;+VPDaqY^_dh@Q8g%nUXlOR>qmQ0P?`}w?4dIvQ z&M>L(X`g?-=5x+%KxeD3^t_BA_?Kwsxi4-%XZuF{PK*&B7nPM=1I^c-0`CU>`s=pm z&}(GCHW1})oGjPw{H5I@|FoOPd@JZVYi;R$BJ*k3HVFgS7Y|=9#kLtV>C30TTtKc36Fw$Z%(ux)ytPwYBAlfKwCO55FE2RLJ~Z4_tvx&UVfwvFO! z!?sbJFR^VDrw6u;()06%U=Mzsw}ZOOdnMT8e>JvECytEvm?!=f+eX{%s=b`h=hOM= zR{{Q=>jV6!v2ApZ|LHFW_&L}%dWOI`*fxsa*W+wKpD%sN0{pwS1^8p=dX)a$Hv;@^ zF9rDRo(bCIy~jBE6s=C}hz$TwI}hVrh~@N+*sH~9rSnQ(^~^Ht)!W`!89xsn*BJa% z+J>Xxd&Yn*|J;Jyj)d>mJ@Hn`i`X;&`j*}7?>`oI>0_Kx7UJDrc&F*h;GL!)0^b$? zB>4Wwnni89En@wP`InZpkoi|?FV2pjtOfgt7xih|1-}&Mk&OY)Yw$~Px`guSeeM?WTfX$RjobM6g%(RN!8UlhMR zd{_K$;fvCF6uu~a!O8%CC45o*2bjw!{^Fwn{=Gj2`1`*M@RzZ6qxk=RJ;3h;-<22F zEDPGC9eiK1YhsPlCK7vqzPBB~+UqLMoQb}-eCFuUw?;AkqVM&~IK!tdYcaxi=`23x z><;+evVgsZ^a=05_ftMOdUP@J(*}L7cjSW)hF8IE6n*#8Peb1|{pIMprhgN@EB<`= zUgzNA#obO~Toak`^VULUPM?1C=r^}xS0gh@TL${BI1%(+aeATeinC1k?&CZO-xcQx z_^vorksrlb3*Q_5uxC#}W9FgoUF$L&eb+MtMuznLJoH`L?cBZ0FMK*5hVP1h8TzjH zSEBEVzX!f6emC@8@#}>2Jr=oA{F=y>;-{nUihnwCrTAwfSBn26d{_LR;k&lUJ@CEG zzU=I_)zL5b9yb{u(Sz8`@V(iJqeoW^N59~EwJ-PW>m4BmTl)DC@O=ey6Z(YH9y)sT z1MJ2``UE{2;YRqb`)5BAzWeDnz;{i*9=>b(_Vf>m|1Es~&0D=%*2)Wo?|$BV_}=O! zWNap~1mBgmci_9?TnFD3X9;{)oQBeG_&D|GHx#EX{f6S?z<0$tgMQ=WkB=M~*~v5g z=r^=3&%*a#z2(b=wiUv6f1m6#@Lk(&8GKj#lj%bg|1J2g_}k#S;*X{eQT%)1yW(FV zeE0G5;Je~ahwqBN4!$e?weVf>{|?_3zaDa>_!rQhXqy~{?>~vXL|tCQ-q1O0H*5o) z!?vnLZ1x%0X4t5m4>A8bqpa*J?9YpTkn7UYwa+pa`;_!?B_-F+#->^z_KBFooTY>P ztaIK>aP)c>I9JRsn_0FF8wnh>lYa!~iuom}B{Nt<5nIupBVR&Zy)Gc{yn1EZ#fH3} zyz}aozFvxb^%Z&N)h)SJ=ALnvVZ-=y>c3BbPJd3lG?u#f*DwDr&&$d_d5QSR@6nfD zrKK+|;d}#dn)WIwxoR5zkrvH5F3n_jnqwkJH818u{g?FkQt zK-;ZgKH-(n0b_e(kLjHKpS^(h=j{Kg86&}kXm2X4;1n9puyJYMQ(0}lvz=zP2 za{K%KgmWpkzXwl^XNt+&-(&8>^~>b#@4-{9KOwLB9OB8_U@Mu=@JxU5HrQHLHnX*7 zE+=n;Ev2Q|r(t7|SMBpjg90B#4`@F5anCE9!2Ukks`}$)WtWfUyb<_V{qfS$NvWJE zL|avVtfZu068$#yRiDO7@Kk*olfcpIuGBrQ4RaRi`w%#BaiyjI#^%`xP8($VCS-e8 zufPXV)E{}H%|y;m1xK$xf}VNEfXL@WaONQcBA*X{GY=WCz7Z=wP9Cx>j(dJ7JXN2` z^R!PZJVYPfghVNs!wjcJM z?_)WyM)3S;=I`ob`3HKcK9*NVuRfL^k;7gKz4yEV<|EXl*TS+@Wm6dUsY|bgr4N-} zMBhtYdMzx;E5Z1zei?E_BZyDtMrhV`wELjBi3d-4{x&o>@!%=f^`W^5z8aY`J~}1v z;e1Wrb+3DC`q7@>l6T$OvK75(!_)pF*QNJ$p$#7+@4B@mQ{s@r^QTiU-{+IV+)aHx zEoo2n`P6_fxUlQjO1IJU8kd$(L=Tb7F~$=#OK z>#Fy%-*0xkSP77io6GOV@tW&~%IM|cZN;m`uJQ%}cHU$p%?Aw)aIvn0Ru~rEWfWx~QmMLL;_IEIB z=@&|PC>-8tfVPU!5FFmU;8SQ&ULlXZ+oXg?!=YUzXc!BJzNS_wKLHMNjHi_FrEtKL zqlA+yRHaH9^CjaG29ut<=364)1PF&@c@S zeNBRf`{6L(f@>2N0uJ|OUWNDM`!G9;9yS@G&~81`Njkdzl6hkClWL~1BbcLy-Hmp9OjEW%6XrKLmNoY@EbU^ z&jbxG!l7SF(2(3K-f&W>`v*8&M+q8Ufx}oLLBnfscz14shBx4F-la= zgBRGWq?_UJPTd3z$$jP{6Eyr44*Vu)_y7)g5;S}ahxz{m4WGiH{U>Nx2#0pERl&Ik z4)!oX!xA|3`w1GpghP8y(69my@10nwl()fQAE2zrA-Q&c)}Vyfz+nuQpkX~6@FZwR z?w`+3(2#tG;p+(+w!y`T#}hQ{fCFEv6#Tp3FgKf^AsY^|O3<(m4t?cfr3?p$`<(<0 z$#)*Ukf7lZT%2$uXgC6gXUY;ZLvsE7;1&hvDLA}4Izhu(IP_Ud zl=S5O@UG95a0wjdS3gz4E;z_AK|>i_oS2iKp%M=7$w|;q1BdZmf`&S{IN>~@)J?wE zamPL-oO~C}rUVVic|2o+hU9Y@ZzpKLym}X|)6bOhJ#c8Zm&4w|CMky*b~_c`qx6-^ z7zXJ-hTXnJ8N(p_y3$uFV;F>Y>o2Y^e3YhNL~btDikoC1^<6!$}DmlJ@Y&iEA)v4`=qXhX)fhB<1*R z9ya!~hno^KB<*2KjZ!{o4{zva4_77Hf6^X~Owf?DhnFR2NZP}@``N>+1Pw`h$o8{` zH}$iJCH?H-s|gyC_OLubL((2r^|ObcCum68LpDJ}(jE>?(2%r;SxXiAllJgu2^y02 zP};1dC+*?De)e!sKYMsXf`+6$%u3LZw1=nq*~334Xh_<_C;QpMK!S#(JzSZfA!!e} z1Pw`hXzFJV7xuG<$NJere}aajJzSZfA!!eD``N>n6Er04;UoR*;lO_O@UsLBNqfj9 zXh_<_DT@_3B<*2lKYRFeKYM6O(2%r;A0}u>+QUix?BOpGG$id|c0YT__p^r|FHz2w zw1>_8?BON-?BSFB?BR@l_OQEKshhNiuOw(l+Cy_cd$_5eJzU+-9PP+7QejK0 z--yR&twukBF>np;79RNmV@}x8+TZ8q-upWC#KM+Vzm=Ie{yy{tkAbZVYp=Z+ixO|e zhZ^8ZhPK-qfrS5pV10Q4K)LQLY5%V6(IJ1u+exyeD z!n*Ag@RAC%;3WeeXjFKKmm_S-%~g202fSpMGBJsRdy1=IVK1!nz6f5TbK>zfj4`Hy zm*|{WtQ_N$b>JmBJ2!XFJdBsXOLTT-=I^e@yiFA2^9$?3$9sWsvofTtcb z6rsP{3Oo&)@ANTt~KE3VJTABku$+sqo9-B|JP9tHKzd6MBgZ z%gx>QIqo|YdWL0YzKk*3X581L)}8l(hCf^p-&T)4?=)!m!xgcW=Wt)6#yI~Em*>8p zh5MRoLBq>eWIp^tCc>C=NUc-fdO1dH7uKnrz>^B+f`(_ku_Ma;;7`HJv)8Fu?4m1Sk<>qb$&5tPeDf2Qj zpZ_uBsfS)JtcefSf*vBd_I(@VlUfrWqPdtp3GFboCjKMP*@<=DWgD=T2Yx$#5{rF; z@z|@Nv-8H>+*jVlnmg$1yfHKLp6M9-O}My*z7}#$t*1W?9`(PC#oor+Xf5PycriEk zd9>T1sB3sJGxN4daiSIUq}JRYfy`5D?#n>KYd6GK6hr3QLBne|#6CL;S=EAuKi-i0 z>RQNZC}jTH^_lnn3Nm^0cI6&C{#!IT;&$+xTBE-MJf^}?lu51E*8u;YN5%2EB+PdK z|DQ+2Hs=9N z%EvvaGB?P>cID%qRGAw*ef;7)%r%gI{e~4QhTe<0FVI$+6OWI?TJ3z$R+duq`?7<*vR7^t_L@m-Bw+FULSu)9${wKjA6VUH43U$!}2i71Uk#Ozgv_P<;;uw85X1c zr1mq|CtcjnFdF4k`xz#Ko>cf&&_m;s#|3%VBLR9S8FRU~kJt^pGcx9Ke+Byt9i{d^ z*nW0#|AQ5HQhOmnz{B4ZiygxK&JDoB-;|rX3cS1tJUnK0p29t5C!@&rIb~9ZxKp9? zLRk4yT*~&oec#1>6j$Af^b7kaI{$ESAH@K)jj`L~S@FxzM|3Ocu~jkH^R>`LYR&yT z&Z|e=D^TWIoL7&!V-PMxT|MfC5nhA#liJr&j`J2i9gn|&`-n=MxA5s$?3Y!T zmqy*fr*m^>;NEH}>J~hmnR(UAxG#gx`nPPii0q@UF z$$dw$y@#Q%XD4SqsMy{eXjiFyCNb1)d?p_M%@WK(p>E?dvDi}|!d8I(#%FSK9|p~< zL4Tt{|6S-?$6VZ(lJ=8}`%?Y_o0Hn3ayM*_{mNJ@=Sw^T0{ZP&=H@PkU6nxtcV%Yg z6R@k-8xg*+kL6+5=hQxyTY#q(dveyG?;8X>tyjllf5$!VUxBCfn%vwsa1UMtIkaA# znR)+A^lKAgD=zGNiJ)%&l(-@Y;tXV%KP3i1V4n=?=1<9mAh70+y7`kcAqd#U+prdV zVV}$vT-UqKG<@W1z`ZAAvh7g(FGGRnPmoF0q1YP(foBWknRO`lnF#P`Ad{>^nYReQ z^8)H_Tm0UGBi_S3^(^!|iXzZXOv*UzLfC?KMJToo=|6#N3B}eSd>VLCbGG-7NBF{? zoKMjn2u%EL$2epLcp)ys{2OfV3D`Q~GR(hWo>m4g#ATR&n}Pdx*pt*Ao^HtD!*%hg zzW^B~(Es7O*yLHDe;nxlaBc4RdqDp)(8Y)AGNV_3{?~Ed)SAK*6E5!g*#sK2*bDax z@IMb4wC`Zg4D4znXwafn%|SaH1sb&PWM=+&9Oiq0C$&dtuwv^j>=816o`;siZ;pS6 zaT@SEv?O+Y>@Cb2Krat1$(@}09Qt42NtG{!eM{{r8i=~7a0%+#@HzN0%puG`U7IyG zclS2TnV_!Cg0a?b(7#}gG_?oma>(C^{Xf6K{98KYZ(NVIJqc@J=xdDY(Y8Tz*>Qw7 zplxF=@$LxZNhI&tUq#zU?ODnK4X-~L|NTM8^C;Tn>rcjhodtRJfri(g%$>Oq@|*;D zzVSrnHFF@(FK)lM#|a<3B$mG(e_=N2^3cWd*JHnY2z94G7t3GIopA^1zJ$8VU(dYi z64ZTGtMuu~eNeYR{%?L*w_YToG=LTe`{PWR2e6Jfxh_dv6(ZKe*8Jj z#k$X;PfzWkdO&GQ7xq&{fQMi(KCHs?9ZFlGF+SXfcPIf5L1BFOGWMjwEK2 z^QP>^Cpa&+0``0W#w1t5zQvzQ>;bzT*JElA*c`||AN&23vCs>kAs>CBG8S3}8uHO6 zDr2Ee(2$QlQIX+&<1X$Q`wMtyLHzw_Khr=1i}rIT+RqWljYa#p0qw^D8d$WS(P%$0 z>&50113ee^r|p5Q zE;)Aiun%LKCg7>r9*`6^lW@g|ftmB|9 zp;Ly#IvsSH+6Vgww3Af&FkJ7c{h3cGa=Wls@Fgeu$_xAA{s1|MSH|NN8}ZEx$U%f% zJ-!V1AqNq5btCA>L;De7SAUK6@S~q8_+j|KZ^1oEI643JMuMKLaG0Bgu2bX2KPBi% zrcVGpUyt`dPs%1YC}Y$FM(n2rJ*n_8(31hXs?5t>1$r`IR}=GcpeFz#5*lI|b~@|uzbvj#{41fhhtuWe1yPbcUY|b@422`nG^GJ6E-5XG;SLqyy-`D{QT#TiOQWA* z@ahbXZopb;O)b1PdI}pnFrrK zB9$ph@t?-yshA-ihxLwYIi>x_Q8aFGI8&L3!KGq`IHFxeet&t)8a$+%i^08rfm5IgO)0T&V<7C85|$FG<=0)a^%YBRQI*~ zbwZkSz3jR1CpX>kvzd?1y8nUOW)LK%j;$g-=a!GJh_`6;+J4~{V@2T;bB>3|Ht0Kh=NAi!V%8VVGTj2jSaL-2E1o$c7X230g zTLHHLZU^+tV~B}o+cf$YH6LB^^#%WL1_*L7IR$Nwpck{_*vD0i5hv&uXeFH>$07X9 zV;s_7K$#clSE;+z+03mtvY8Tk9-R$;F)33@Oh!&Nqom!6|B^)BtBJG{dND98Cb#3f zi^*5-ebq7QX8PY`x?eSg&&QKIY9Il`6e?c( zm;5VbUPBp_q90H2uW))Rcpe8C%HU@ldn=>xI*wJ+6e%bY0`;0?$t3>^QC~URJaD8y zGOW-r4^mjn&O`pZM6QfHC6?kpO6^odsq`O+|2x0d|Jn=se~|fC`d9dWkWmhTzEfQS z-6r*))Ul#bMdOPh1En1(pzxviiy;q%BSoJwb#FrdNsTI6P3lN7{vO17-OKE`WPA-6a+$lpJ)s+ zwNz=0$QhT&QF8kqO8Qb-Ip)z`O;QM{ivbq^ns>4>C>O)6fMlNX|0>RrxM&i%x8o8} z8hNVGC(o9x%EpXowo17el7}KNB`|Oq9#x zQd~?w4FCVD|NmtD->w*gzTatokdZ+y{hxgNn--v7wf|)9bAJG1_`m%BCrcn6e@-z5 zufC?$|4wtoYgb&D?d#XRQ$bRd3jHgeRFx7hsct84CqJRqkY|WXRhO!EAYMu=LXMco zQF8kqr9>%_jBiq{q)w2Zksp)gTcCAk|M9BjF<~Lq`Ft71>8Rnt)(i-733nai@b##P8N|2C8+LGy@&7vR4r+xUI8p4pCBJ2 zi^+ZD9rQ=!BjjD=eX4ONmE=DNjK>l7kTX?xl2?0YW{!F|4WKB_~6e!%+Mf{ z97QdoRMUm^4>#!IclnN}yJ1uAHcc@R)b zA0au$hH>^d@)L}fbJRAb4Cx$m4K;ucQZ{BYoyl&dH`60%7o$+Nn*A0V@Lx>YM=k{R z)$AJ#t?6Rtk&CEB)DXmV)J>EQm-8FUHxJyhf_CNj4EzscdG;Lh8T$nD1oH;FlI?rX%vw(S)9mXEj3}ADZTxJn4FS@}0gUm)|E4`6yHNdG4v@%aDp-(Q>k!~Zk%-=E`uC;Xq>`jxi-SH&1?{o;oi z8O$IXNDOM};g~#F$XumrK)eC*l&|Fc^N}o}q&AQl?0Wk5^ggdKK(lV5b7OIoJGMgl3qZ!Q48q1=vI=Z@1duX z^`w@*ll+XmhrSkh3uuYDlp09gL)TC(3`sXp2dE^4!@tuIe*b2n@Lx}^pjXgOF$MHR4`TVYuDgB?I{$2f-e24yBtfK!r=m)-s{+B`jKc+`hG_*ZG zq5s$W>Hik!|4wTD|7ZI5B{Xpw`d6gUKwi}UpbI+s$2M?L|AV0aDtbL#L7SOv^m4TS z$DsdSY6LT$zJ{I3e84QB)7V~`!f5zfj2vgEC!&Rv(#2FBReS;WR(c!VNNuAZp{G() z>1XM`kplG-`Ze(XEEcTx<9L%=N<9w=JxUK{|AIxl$*8{~0rB`E#TXo1{=*o9!(;@f zdWCf|f7KjjBA7Y&gmN;kuvG{t;AFmeC}mz@mE$f9lb>Xs#%)3dYi8b~N3s-qH}xr% z$;_v>etnzpIs_2IZNig@+k{#OM!}%qP;eild*}gxUG!nHhqf@o$?fE3dN{dPZDCF! zy@!4T1Gy+=!EM4Tta6($5;qT@P#mcIt|tEd(>If2sa13XyMh^{D`ywsuKo^s1=GNm zlE*OT@mpraw;W@su~Y-A9QE{C^=Q`3?oZq%jAWi+SFv}~kJAHioA9=J&xPBBN$hfF zK5i2vR;`uTGUjDmBEJPFXI;VE&b-U4q2Fb0WTsK?GOL))t#rzt1?=oFz zDxXuUm=R2&`e)22W)CP#Qu+P){H~J!ef|F;p?}}^(El%(THGf7EB$v~(Em#4f8RIs zzcHczjsJu6|MWlTf7rL^e}!TU&aV4mi~&amF>5e@d6RyJJ;v---A&$2K0?1qx2fJF z{jid6BK*&XA34di+0-zoYzSju3b3^7r;jof%miSpqNDUUwT7L*9-$|&P4olwW60Y{ zKdk-${o)(+C&2s(c`N-6^#NAQD(FL01^o=Y7CmAW&5|rR0{@SztLOscRnSwYBh*pg zB(b(OjMmUwDGl{7t)brh0eVJ`yoSsM|8LNv)CB7%*W$Pn6y8L>NlqoNr`|yLpO2~J zO=L3d2sKFkB6BapGqudGz-12OWfzhQ$s3s$=}h(W?AIXMVfqu=z>Z)xV{Nq$ z;f27wkeozcL!APT7Dfhaqk|L|=^SYzUEu#=`gZnCX0vK4xPF9wn66bl3q9nL4p;oP4`d_GxuR+7^PYIa{3xzzJ?5f zhuQRt^au3&Xa`Ny^CXF|hSZQ1l!okLKR}!K0LK98G3s6N19~O3nZeu%wi@K%{0e-3 zKEJD^qW_N){GVVKGr9}u^PVMjvC&(U&6c_sn`asy>09{Tk^1Zs>m;Jp%l1r+3n4sO=aN^^iBCHQYbsc%rkT|ZDem@4yu=RtLQ^*(8*7tyzqw~|+*xfs+N=^N=k(Z8gxq83m)$@l3_s+`f$4QLFHqxR#d|6MBn z{^=TQ3*_jJ7$2imPiLd#o79`sDe5EUBT_?sMDC&f%G6L46Q_rRyCKYM3`7O>Z=-@tU=%k0z4P|Z5_HTJK}YwR?37$#4bV4{)IKFOY9 ze#^W`?ZJ5z3TmQMCZF6*nwagRPxB(iO_Q0SOgb&lgK?p~Ojok2 zF_0XIEf)f&c|ZCA`2Vlzzmrn*Z=-Ap-TmM7e;oQh{(sT`+w?5@W9of+5A`wmHvJqu z4eL$gaI>gYug9&!M;K>)Ma`qKq5tdYw^$PG;s2ffU;0-4+y6oTf4QLlDVk5A|Ah(t zkNaBxkA6e{Q<-7R)%10kayL-JnTMD@hmae3}qzp_CO_Q&ZY4lyxF*bwwF%zKgV{WIvq{^uP^9S0aj?(4S zHflaF&rjgEnJl12()R(nsmIA(@C#Mds!ypx)dTEE+$E31v7hu~d2S^AH)=ie1oa`6 zPW_f#4gi(^VrlXFO`s|K|0cnI0rM$yR`qN0*9p2TtPm`=mWz_UINEMWHWUw zeFs2Izl8ly*V64OJ#JCjRli}crLV)R$+h%xau~ITyq4ZawJ~2(`>DZH7MTlB`2X*^ zf31JvTlxQ{{s(`n{?jmn6rgW}{y(^&fA81&w|}jFnU?9BDVffL{*`b_|2MNTEg~+{ zTd~7x8S>sp=>M&M(Eks?|99*Esc+@~oBEG@tNyQG?tuOuh5k2O(Er4*_5a}4`X5J+ zqpzjL(J|^J7{Re$>wgwI7BMCF2pNU`$I{yq`rr8v`oCq?qqAl|G0Qh^#zV8F%_OEy zoAuCwImFeo=1-qHcfp+b#7`E?m`_}d&D;-7o9UY|Yu^013+|skWA-fK=DE}EpFZTi zxzndTI%oEbS@V7K=T4hLOuTRQ-1*q}J!!!_A27_GOH79c%uX3UvROq@Aw?qk0DXU@L=QR3$5b03>AYnnpGPv=j&|IrIbCOX(dHAX8N_2GVh0bYXtZO}hI74Gl9jCy|nWd0K< z=_!1v@=97N{1P5&IHuJNk&qVxhh(CD)9%fL1F5o?i z^aa3+2mgpCfHx2RpHTnrC?|rh58>Z%H9;Il`a8f=0RLH>uMqxz@VgNC$Kihj|HZrT zAcl`1eunrW#1D=mh>ziC0METR-)+GADdOCF1aTJi9|k?2A$|yaybJ$9&~p;$vq8@( z_;Wzd3HX0R{m+sAOPu#K;swC}0pjcs!FNo=10#Ndcn)-Zg?iWFsS)L2lY)ov=uH3*f}p$)e&l+BC`0-{|6!AHe2<)bU+{fXKjy}}G`BwtZ{4~e~=>^CSAiWY#qNJmqdNSU;iF7mk_3+o@ z$(T>z?*TvAsP_`+-9rMWham0;A(vl=x3Qz%RyFj2a(@fry>_5Cdo*N<^zC@6eJ6Y&zzkC#9b>p|CQ;17wAG4L*#hBpTw{U?x175w{g-fH;wK`xc> zqbxx%z<&(qp?qi)@JaZ;gC5oZj|Y02hWsMnU5EHjrsB;zsQ2h3JVgtCHsrAspCbG^@>P>jAK@_4B_FQcdkEqI;MQT3wST{!EWNb`%vDFcCror1km+1@C|~F(%?Uir>GXAd;|F1 z2!AT*>VW?|&esb68X5Kv<)%%-+mR9X0pD8q#b&fWq_-e_s1MgR`1&029pGaR&hr@j zEchYNTL|9+e!fDzyy?&h{AWSmaMT-xxEb~0s4v6674`O_yaYKQN~{Z_jvsHldIArp zAwdS88A!Vl^4^5}4-ozn^1CNNUI=@UE(7oDR{{sp3s8O;%54lozR2H?d^}G@ygCu* zMY%DEkB4uE&%+-EUw|Kkyr!wpK0(KBocD4EbW5PEXmBmV{|V%<6L|6QeLT|r8{FD1|jlv&{d@KAd;PVCeZ{W%A4Zw37guN2}feKt-@PB z8SkM;q6?3Mwo@e8N|97EMPiwcWEv=vjZvh!mLfGZ6sfJINL^(wsjp}y4dpS?SXN1z zN=vCOnx?u*n(85Fsuv50ecdz_@1!ZBou*W+G(|Sk6xE1@#d?~;dK$&n(v-S}rZm+w zrLCeVT?I|)%W29`MpMR8nlhD;l)1QzvYc6yQ>SLy88y>Es+mqg&2;stneHAn)6=PDdfU}ZUz?hVx2PGSNzJGl z)eKp$W~i8&q3hHPR+SjGTFt1d)QqN5&1fssjILbG=*!fMp;XNnOVo_1Sk0ILmh)=H zTBK%d=hTe-tcKyvXc)(74dXneVO*zr8TZK+hCflq2*)cK@mL8X6`o_{f>VsA;5g&W zFJN0V8n%_yux+%4ZC7d7j<|;H?A5Ye-CDN0Q_J?WYuVmbE!)?kW#dg+mT1(nss=4f z#J-O*(bFQKu#vbZS+-PEE#iYN}SJrfYO+rdp?Ft8{90rB1D>(5bcMnBgwdsr98g zwV_0(HWusDrt>(gu6d-R%)F1@C+!=UMEH)y(B4Vs=7gQmCHpy_KgXyOe94N-5< zsA2{US!d8twFV7cW6&_w1`S(f(5Nd78cl^kqb)aRbY%vOzSN*Glo&L|VuQwX-k>oT z88nu2295QsL1Q~((AZBKG~6kJ#&Oc1ah@<}TmbiRgN8q5& zZK90YW|dLf5;tmFdyU$*9;3Fs%c$+>Flsy7joPj@qqe)nsO@PsYI~cE+P+4kHePSk z5;3DzRcF+awMH#fW7N{sMlDli)UuUEt-8Xf)s!2x+A^b7S8CMiON?4Wu~BP0Z`7KK zj9T+KqtF%XTKg%JmOE+EIsncSCavqZN$Wml((;8Stx#aniuoq3bkwAk z0iHaS)_bH)>pL9N`VUoT0|$$>!Q3<2Q0@tB_&|X+l9Q*6?mwta+n1wF-@8{=XE5nv zI+LzmW70J+CS4m-1jXV!U+n04O6l+JgkUFSbouM6Z>>Vml?y3m2Mx^T`3U1WcOF1jyI zm$vtyE`4u~E+c!dzQ%0P*BUJPI-Nxy(^&NNtVQ2IS@eyhMc+hN^v!)1eM^r;-`Z`_ zw{=?d?Hv|n=vB2AJy~PXQ`Htd zU1h=4qeah_TlDHOi(XS|(Q8XAdR?(auRm|m8;UG?<2j4obk?Fb11x7Odh2Pc-ge5W zx1Y4?xf52so2-VOMysK>!D{G>Sq8g6*dD~ZZoLMYz9rK z&7du@8Fa-qgZ{kDU?{Q~jOT0y(^;Fre8y(5oVFRPr)&n>Nt?lb!e-!(+YF9lHiNU! zW^fhQ4DNiJfd>djZ3Z#VW{{594Dw-{!E?xF@E)`oe7SamKUZf69OyO#bD9jH{ndu> zzEVSE?>R$s?@2>icA+7CPo5!T_d&yeT{(ta!c0d+f%RZo9Fy({60*up8Uk?Z%E)yRoyyZtQBd8@n6r z#-0YdvA5oC?2Flr@jAPasIePW)pjFUWj9ilb|YP3H!|gRBU@%Ss!Q!gO^My8Ew&qV z=j}#)k=U-Do*wH(F2HjkXhZqy4zu$Q|R1jzZ4p1h@(~qdT87 z@<%zNkjELtBb-q>%o*iFoY8ZTGkO8OT+Zk}z!?KMCS!1apE0zr*%;niYmDqIGe)zE zjA?sL8Pj(c8Z&m~83*hTcvrJ@uTaH^!Oz>Nr!pmNOAGoJm#9naC>6L{)Gmx|}mHWt@pE9oUSKIJf3PC8816AqK@xWi;W<}h&pN1?;yEO3}y`3{r& zsKdnPIZVP4her!nEe>;Mlf&HA=rDITILtluPIGUa)7)3(4sPhBHpH@wC%yI^{H*0hW_av-O12Y&-5W+mAWT zT%ptKC~%sc`A)OzsMGAubD8-gF0*jhWfl*)%o0F8=rVh9U1skAm)V!&GW++t%z=F_ zb8xTA90G*1DRX2`yE(c$W=`8xVNTz9-kh=Hw0XdeW9EU|^UQ;?4w?sV%P|kxnr$As zWtVx_mMrt|&08$x4yUEU=Co8=oR%u1(^9Q-T52>-OD*fP)X`2$jC5M+38$qY?zA-a zx-3oIE=zNl%hJ-}vb46lENyKrOM8pU($Va)bT+vxT@5ZvcfHHf6LVR5>s*$;T9+kW z?XnP6E{m$tWg#nE7OLE3q03wrrqpF&OI#LpvCE=4@3Lr%To&CqmqmZpWigy_S&XM$ z7Sk!0#eC9jv7B&QtjFCJ+cCGrUg)-P1#XKY-)(Uobz59{Zj1Yf+rl4qTLgf3$Ze4h zx-D|9+u}Lkws>>g7Tv$K2MQI=8jA)@|*paa-fnZYxpcwyG-JRNv_~b%eLN0sLX!DjdR_g%0voDVMj(2L!7pN3eSL3s&Dg!Rp^D zSOb7ywqOnI5v<|ef;F;Buts<4tZ6&Ct?4@&tr^>^tOK%2tOK{5u@2gL+&Xy6QR|Q` zhpa<4=U9hr%C-*QxYIgfLzZ>q`YqN`>o?j;-Mp>L!Q0Ahysg5_+bWH`txCt+sx`c= zhUIOwG;gaTd0UL&ZS`^9*3iq_8oPO0Qx|V*?%-`L?YynEmAAFE@V545-qz8`+d3O~ zTUR}A>yGiZo;u#vTf^J>s(D+yO0W@?f=yK+*vN9hMwJORx#df!zAA}}S4tdFE^(?di6cuTjw+Ejx>(|v^Ag7vNu2te#A(h-oc4^w=}t?W z{*=raPRg9|gv^}YD29nEdBqoq}Lv^L9*wkFxp-Y7dd>Sae~ zOm=kD$&T(?+0j!iJ9?{RM_;Avh*!uCqFi>U%47#wB0H#J*+HL|9ZZqzV9$9R>a!k) z=8VUoJ?(MmPI(;qlOBiRgvVh#?s1roc^u|KkHb>naai*`4%<vaeRybdwP>yY+)9r8Y}!?V}x@Me1*zCB)tf4A2W*yVKucX}Nm zKzN7O5!vo_M6>@2m)&N8#?EH}u`3Z3k%)X2^%R(4j?9%l{dan=$ZXI-Di8SC{p>$^S9hAxk@ zvBTqRYWFysTRqN}7LT*F$>VHm^f=oaJkE}KkF&GRwk)SUJ@wWqvJ-AS)gf5PiD9QQhn z$GlEcq1S0H@H#E|UZ?e_*J;c1I_*ciPVTVR={V$bIsvYOKBqg^=j0FgoI;MzDem_< zrF}l9yw~USWc!@nJwB&zx6kR{<#PrA!JR&5Xot@k-tKosvi#2IHor4%tKXTv#qZ1j z4A|^<4&3B-4%(=74&Ko19J0RAIdol>bJ)6K=kT?soFmp0I!CTP;vBW=fOGW9z0NT! zcR9y?mE|0_VzYDn@(s=j%hotA`EsT6(l3`gFI&3QRU~^{=XsB-*x_-N*gURMi^o-F z^tj6P9#@6d>#9_HT~&uPECx>}pOuC@lRtG(Xq>WFz=opoMUSB=-zUF~)CRC!&!m0nk0h1V4?^SOvppG#HZ zbCJb97j@p}qKkYk=A6&Pp7puZXM8TrX`f4b%IDIZ^ttpWd@jRrpUZg6=Q0)gT;>9w z%aZSNS&#Z$wmiSfe#GzM4*Ok>Lw=X@px@=n^}E~${4PGn?-KU=UE)5!OWNyq$=QCF zXOG|I-R*bz0RCM8S72wr72FYUg|-J=;jDlwvMu0>ZVkB7wgg=1fQ-!n*MLm{*T9Vd z*Psmn*WmR=*N}C+uA%FiT*KB@yN0hRagA7g+BI_3G1sV-M_i-7%5{zTYOibTie0X8 z%d=eLmu+@U_;Q2mlBH{0mo8oDx@^gE*X4_sx~};9-`(dtUU!k;b)R>6-Nl^OU1IgR zOHE#PnZfHW*ZJHPYM;B3@wuyLpSzm$xoZfYySC5guIu%=W8FS?eW%ae(BX48w)@;o ztv+{ii_hKC!S6I}Qfi&fI|8bs*q&=LFpR{(xK97jTPv18ylh z;Fk9U+@3u_w|95Y?b{V}`*#N2fgM42aC^`l$_l!}+k)=M)}T8INZS&0r*96rGd2a? z12zWT12=@+gVu-KgV%-JL)O{cL)Q}SVQX64!&le1N31G!k6d}iJ?g7t?$KZ6xyP)? zb&p-X&pmG0F8BB^v)mJwZgyX?bc6fSC2QQ5Enexq{O`-$S1elMp7_Ng{;bc(pObui zk=w_gclh{Xn~yIs`}k6$k1x~v`Ere)uVDRrCGF>{C_i7V^7A!uKVRGH=j(d>e5}jQ z*LV8)hIT*S*yiV(TKs%-v!8Ei^7E|?e!i{V&$q|?d`GRH@2v6jUDbZRyUNe^R0R0m z@&Mmg7U1Kh0iGxc@T%efPo59(R8fGZ&jxtrOn_%k2YB_V0IxY2;I$_LyzY2_*B=Y; zhQa`EEC}+Z{2*^W8ssf`LEd^K$lDGFdHbOt&m9c%j@%&cJP_nvIYHjNKgjd@g1oRd z$cq3eJH*R-LcC{pi1+Ra@xGlQ-oGQn2eya!U{;6^Z42??tsy=Fh;9k-X`4fQ`lc|S zu`$dK*bwFit`GBr)`j`OfFWzc{LnQne%NY?AHJ%MAF;BIANf@oKkBQq{OA?O`7z6n z@?)1BNSringb3uVV8x)u`L4iFT6x64Jg62d}&>jy8 zx?@2>Ul<2>vmm3ls2SS1q;K~UJ?)@Qw z-xm^uyn6PBGaLMBB!li%TB3!m;gK+s5YlJJlSSd_gxJ;Pz z`4VCBXN!a>pMEY}`N=2Z8E-&5D+a`Ku7Fs?1;q2VfLLq}h$Y5=SgH$%WtxCk&IZH^ zIw)3>L9t2|6szMwv8FdD*7gL&x~`xY>kNwZ?Lo1jEhsj&1jVN2pxE3P6k8gCVrzX+ zY^w{3?X^L%qb4YJRtLqd%AnX?5fXdKLt<}PNbD;OiSZI_t~ehORYf6@JQotFvmuc_ z6B3!zA(1^564fU|qUJ?xUlQ1o)pI|%@@ZnIV4V4ykETJ@4LlI z7i||W`(lfD`N9q26${sh6F*-mPWo(_IQi2h;*?JoiC2E|nfRlRKbB7Wg3=i&D4pel z(m7{PDzXQq^Om4gYzj&x`k+**4N7I|pj6HTr3xx2RjPtg6%mrE`$AGpPe`im4oP*L zAt}}olIq(+QbTJS;;=-V4@;_|utc5>OVpXLM4t{z%&D-%o(xOs6JbenJS=ICg(Y2K zSkf0nBtw2gG9Hacro4z`J`#~Eha-~pP(-pFj7av}h{PR;NRFI{B!Ddv8SI zv!jx*Cn|}%qmr~MD#<&el4nO$@&bI@qmn->Dh0MhrQp`66xtG%!kg2i$fh(Yx-m^k z+mI%u12Wd9NdwlUNdwoWNrTp;NrP9XNkdkpOG8(tOTz%eze<-ztVoweE;mS{mi0=b zzig7mEUl8pE-jYEEjcBPUtAzf`1@h$l0`YvrC;okE?c-=x_sdl>59)cNE1I>BTf2r zr8N1IWzv+7mq=HB{Dt(Rk3N&G`tW0E>IWalrvf4Qv?nB=5km4=S4cj`h2$b@NIq{4 z$;F0{j8zV~R1=cR*pOUKhvW(}Bv-0Ja#cJeSNDeGnx3#++ZC4UI>K_SJuKI^hUJEq zu-w=jmYW*Ga&tpiZmAE;t#x6!tu`#T*M#Mcs<7Ny8J4>$!g6ZuA~Jb4B2#A~GJQHCGbbZ5dm(k|ob?Nee zwdwM}HRu!Rq67Ol^OC-z_70}dHml`%M%tA%9ng`SiW>&j(pj|J@VzB?~t$fY>Pbc(+%>ZPu9qjKVB(M`FNRp z^b8Od(Jw-o^!Uar^piaoHvF& z#rm+PL>u;$s>7Z#ChRGv!k!9M*i%V_Jym^SPjye&Q_~&x)OLnF(4QyP7V*@#Mm!D8 z5l>@N#M9Ie@if;*JT0+^r?oEPX{(8N+N&d;j;e^Kvm)Z@Dvx-&%Oakh(ufE8^Yj%* zJ@KNbhd3AYsLn<`ui zF&;_tm=33T%!krEmV;>?Yi^pyb|B4T&q?!e`_nv*eQ6%&-ZYO30R4IRJ?S1{ce+R1 zmF|&trhDWa=^oGabdNVH-Q(Mq?(uI;_XM`2dxD$OJ)un*o-iP?F~bwxkl{&NpW#Vg zm*L4+o8cL-Cc`sub%tlqstnKIl> za&rG$n3H$sL(YjiZ*xxGewB0TKhJVb-+GjD=8p$CXK((QbMEGyobxyS$hq+Ef4e#Z z0auqN;Ofo}xO%bzuHM5zS6_P2)qgPP8b}Gc29tuWp@g7oI4M_u8)s4Joebwzfg zuBa~572S!tVmeS)Y&+_TYeQY}t*9%Z1$8Ahqb}IemE4HAQW`MVfqKl9T8Fs~)?%)- z8q9U58gr#rVXlmCnCtLY%#~S*xsFs|uB>w0b+in39V^9M$G_mN>=N9SQ;fS@MYzjd zh`T(WahJCMclm(-6X6PcBwWD{gbR63xX^sUg}ozO_*=q7ydhlVYr;hV`W5M7UXm{M z1?l3RlP>-l=@OojF7XNJl7Re}bSaOHy41g-UE0G9m;PYRW!xWgnfLo#*1Zmw{b!TQ zxm)83{kPJUd#BWucc;*G;`T?^$^X1_ox1hPb^4EIt}{0uxz65v;5v8XPuKZ>-*#R2 z{SVj0|NFP=(r>@HJH0`7S5DB~eJtqiITCdDW(3`RX+d{?YS2B9jJO9A5%*9$;vSAg z+#}J5do&VpkA)-d@i4?av4^-PcM$i~HsYS%MBFnQhYko=YZS3+v#@x+w2bAsdeYx`RdNQUFtsZpF;P^TOZx0{&?p;ee;$3%#CO6vo{{O z&;9#>`~2^B-537vw)^65f4DFG_HXy)fBoj^@FSj1H{$6!j(EDW5Kqrx#M65S@$?-; zJpCz%XCMjj3??9+p*X}d9D{g9qEOFh1nL?-P+TR}bZOQ>gI5%nxCpq`~U)U!N`dSF}6>J;i(o5Vcp6PRaX9P@0BVxFxL%(Fd= zd3J^{&+Z`R+3UwV`+b-vtQYfy_h6ogZp;JQdZIdUPjmKpI{VUE~G$M=!+_&<=IzvNH^oaJzf6*T0 zA>&aWFdpqb>e25fd5n9z9`ny7k9Bv_WB+&1a&Omp^8WM9bK+K+=j0zn zo>MnJdQRVX=Q(rZmFMigpLx#x{>XFw{~mZQ{C3xK@n5$+m;UvK=kmY)?YZ)=e|g&j zsJFv|dONdGZ`V=O+ntGed(u&FZyM_DJAiuolTq(LBI+HCN4-O_sCPIT^^QcM-qCQ> zJGPH{$M-Pr#17`2+{V09o0xZc9rMntVcyvl%saP?dFPif@4^D+U7W|fOS71Fc?R>Y zOk>{FDa^YzfqB=*G4IA0?%f>4y<5Y$cY6r;?hNAI-2vRY*N=Pm`{1GQ9^4z=je8@y zaBpNM?v3iez0vKsH>Qp7#6N56qk{AvE+@U2;7A$i%_=3mN57C>*w_mjd$WruZ%!fQb$zD1 z?gGl|`9yiWA1SZz1LgI(%eEUgOVHuX%UhYyEe{Yu}mj zI(LS=q1)Zw-2b$C^KR99PyF%Cd-7(P_tcFd@97(#yl4LX&U^OvSKf2~_so0#x5wTK zzdi6?{Ozvy(r>rDmw)@id*!#^eQgNlYxiQl4j1O@JcjwYj$pp-49wSa2=n!(V!pl< z%-5fU`34d&-(Vc(8;Zev!%>)TBm(n|!o%QW`@P+jdzVL3s7tu-hB0C6QR6F5|ZX|jttNd3t4JU0?1P6Mf(qk{4sE~k8%Wt8to zDdo%hLivuCP`+cul<#;E<;yOld^w+KpR0iOxj)f9&qvzl{XqMC?`fYupY{a+?Ce9{ zGCuSTwPD0 zRQXQbDEFQIcd_rx@1J~Uf6w=w`~9`={O`|v7k+>2yZHM9-=*L0`Y!)|+jr&no4%{R z|L$)^F@KvM^S8S(e@8a%?>vh8yE1WqcRKFxIf(mv58(d3WZd7Mi2DcPasOZ}?jMTA z{lk&CeBzJvQGws8OCChnhF$Nkf5xPNAa@Xsz2{<%fMKfgfu7v>57 z;w<4`nj!ql(}aIzlJKui5dO7s!oNO7_%}uf|K>2^-x?zPu(u!f_V4zQ{=Ht(zu!ap z!@5a-co*r9=p_A-9i%_1o%BbylKz+$(jVJQ`s12Ne|#h9PiUb0iS?8}sgCj|*HZqJ z8p?m5n)0VsQT~J9D1X{l%73Vm@~2l&{)}?Uf4GeHXO`0bBVTBLRtfDtT1@+o7193V zg|t8WGwshQp#82-wBP-a@q0cnelPI7XZ-$r#vgdc_=9g5Kk|n0qpul1_KNl6FIhkF zg7uTnSw98nXRM!j%KF(Ste<<#`T0kjU-*mjiw`-!^nmlrK)KKP)q9*@`;+(UcX_|@ zU*2!t;r-T~BYyjKwBPy9hCg&`&Y%0os6X#!um8l2cK^v64gOO%s{N;Ll>5)zDE6Pd zQQ$v!Bj11i#%uqD8_)e0Z#?#2y79n&`Nm!Ul^eJHS8v=5wBUH4HGl`&Jb0iz2M=@{ z!vmd1@IY4v9_T)V2YOP8KyL~W=u093{Ru>1AdUzO#t?y_C?YT%K?Fv^h`{I`5g6Mg z0^{36U}B31Ol}Z?sWl=ny-EaN^T6y95rEAD^Ydh2VU7$e&XR$pX)>@pMFv(T$-wG3 z8CV-51M8z?U}J;~Yz~outwA!dJwOI_`pE!n9)QgQ``uI^tcwbScT$0f4k{4YP6eXc zs6ccp6^Ln}0I&knS9Z0LB z1BWW;KzcbH$S9)&hfC=|<`*V#q=X4%6*GaOMNHsWArm3ouW(0Q;B= zaF4hE{}&$+9`XSZNDugce4h^}_xOPNCm+!6@&Wz7Lcq8q1WaJv76SHvvIEYoxIpNS ztw8S0g+SiT@xY0j{ehD=I|8R}HU>`LtPY&HSrIsUvm|itWVU432M+!HG>WIJr&+r`E{e z^a>fAStf(Ci)3(afega#!G&2exHv-wm!_!T@+1{pnV^EJ<5X~MlnSnoP{EC1D!4gB z1-AyM;C4S1-07o&yS-F!uZIf4?m^f+7~Vk#BiiX;WE&lfYNdnGEp#xZnGVJ_(ZRSz zIvC$T2NUY)U}7B|gx!O%doZP%2_E>y1XI519kXqm&6A{=x)d z_aN*Z%qnJsM~m3tu|hU@{4*QOE?|Q>pV*-5BO7#oV1u6bY|xv}27T|ip#Low47}lj z!Pi_6dBp|Mms}77uzQer&IQS5e2{v|2k9q#ka^4p*++bk`->0q5BVVM9uyx4LFv8_ zlk=-l!JL$?xxxwm$MdAAmWCvHsy zPu>~`p1Rc;JbkMvc;;43@a(P1;JI5R!SlC12QS=uAG~<$b@0-y=fTUj9tW@7dJw#N z>u&Jct=mX5N+Kzprj!Y8i%pj4jG!p4fC6S&K66sAOk-m5m>5nCm zfoKvLj3SYt2nrbvqmYq33K`v{kg;tF8Q-Lki46*wT%(YwRSKD2rjVH>3YlG`khysZ znV+MOg&7K2oTd=i9$B8Ckd<*7SskO1wNV;bAEuFwAsX2nq>-%w8rklrk)2)|+3lf` zy>1%W@1l{gP8xyj5!fDyY-NzB76yrKW{{XB28nHCkhlg0iLYmnggOREtYwg-8U{(O zW{{LB27&F7)UPaZu#!d6Dp=%DIg6y1u}DTKiyZ#KBAF#Da-^6=vWi&bXd#On`^+K7 z3pgbE6Nlt{K;1T>ej}Xsz zgnY^))Dr=r9}5WcNI=-X1cU?pLje&U2#9!JK%{#jBL68O%3Tpr|0^OI(C>(daa%;p z+Y({{8#o|zn?Q1JA3*YM?;|H}FC!;!Pa&sn4QfP~pLR(!F+IEaW+p{RN z<1mGG9-`2$gB03*fI@qcD6}_$Li^$@jhM(5^ebbgjb7iMU5af(KlCTVnef<{-yXmoXy zM%PAYbbXjXHwGDWbAUm&`WbY)k3n~O8FaUYLHD{Cbib29!#Wr=yq!TK+87iXK%oIN zx|u~|8d)^9fkor$Sv0Uz(k?tC8gyyH>t zTORcRXaI!<(BLZpMP3Rh`a(dl=K_j96Hwx*fRaxHlzJ?n^dkXf9*HRXmxyu?MU;Oa zqQZR<74M0t^rwi*cO_K$uY{^VyCb1GFn|dxVBe8Z2ZTT_e9yac2t9Ep0zG+W4Lx;d z20eXe7(H{R8$Elc1wD7C4n2S8D|+EhDSGivA$sY~2lVotH|Ui+FVL%Zo}kz6JVdYG z`4ej-DXa;hux1~HwYX`lHJirTj?!3rCXIEZ(^zL3jdi8cSa&jw^}ss`d*f-WFP6so zqiJj)ipB;bXly8q#)kK3Y-E?lMz?8fY?H>uH)w2Pjlm{Y8Ek5q!KRlOY-WMMX6G4f zZjQm`XBcc@n!y&Q7;I^R!IsAvY-NnWR!10YZJ5EaahV%4m(iEVW|}ycCeho(#kmOP$`e4f8nu=5*|BT%ww5FJa(jz$Fe^2*wF$W zJNAjkj(_B_><>Ja^FhE|?*+`AFJPW`0_J@yV7@m3=6@|Cf$`V=m1lIdRN9YpaTP# zzydaK?kZRah1=1`tB@t=I#h~_HHkB?rtk~{%$>X;qEu=;@vXr z(%nMr^4$;EmAh}Tt9M^u*X};SuHSu#eRuayyn&+eMvTUr0yN(2q4Aa+8gD&D<84Q1 zy!|kZcN}8y&VvlzmBQfNNeteTz~H@c4Bi*R;QdhyJ`l;^gW(K5w9nwfy9_?E!{DP^ z3_iBW;N$BIKC#N+lPe59wZ!1li!45~z~ZxWEIv2O;`7rizA(k&i<2zAG{NG_V=TTh z%HpddEWS3x;_HJfzA?b!oBb>fJ>c6t9KO@d;k#WNzSqg&`yCt}*3RMKZ5$ra!r_t4 z93Iug;n9s89@D_#vGp7tSI6P;wLG3s!{dq7Jf2j=KhNWhO23V7CM0Y6$G;Kx1*`0Zw;MBMjU#Qm>CJn&M)gD*rJc`oAUGZDw0N;nRPClXFRmT>BkgwuaXIP*}#*#{EN z-IsCxo{S4X1QL*e0#u;gQ*a#^zyubsfdfMKR6G~tffL~5z2o?)dvW;bdt3OKd-M3& zdt>;ydwux%d+qpzdky%-dsXjtpwA=%njr8e zGC@3+3G$IlP=Cn;{ZJ;D2QtClmkDTs;DK;oAw(bn87M#n8qk4pUnNXn0UJ0V1ad*% zeT_H)PJ&bSJ;dqziNu-vyTsZ1i^RG66U6!Z{lta)9mK`^jl`w<)x_lo<;0Z-#l+PI zABk%Z-VxUyyd=JR@PzpO!9%i+WyyMyB^ywdZ1l5alZPdnvstp`7)!PuVac`(mTW)7 zk{t(GvNMGxyOLP4JAoy8;#jgbh9&!=II=&2BL~7ca&Vs`hjuw~c!wiLwm5QhgCob* zIdXiJBPUika&n0yrxrPKdY&U^<~VY8mLun;IdXoABNrxla&ep|m&SNx_A=WAotpNa=(oy!&(J0yhR`*nguelNg$&d z1v0upAYf}jq3Y>n3kY^sIkY^w6ljj~Tljk2!k{2Eh zk{2I#l9wJfk(VFVkXIg7kXIiTlh+=8BCkJuM}GJ4CHeisr{oV0|Dx(Bj;hBvsv*Ep zjb4swa&c7iagJ)q;;7cc9MzW2QSE6Q)p3BMI+Ho7E0LqR<2kA)mZN&3IjS#`qo5CJ zAdI61_jqb(ho^?Od1_>nr$#q;YHW?C##ec2VwtBVmw0Mwfv2YDd1_{sr)Fn(YHpgR z<|lb-VS=Zi4{B+YrPd8=rbn{W3Zpq~7)(oC*JH*rNsXX10!qc5eJl&PR z)7^1A-4nypy-_^f7s1p0;XFOC&(njuJPnP|!&^K(vLVo;>jFKtD$wIA0zI)L(36V- zJvA@T({lnnGb_-u(*iv=CD8K|0=+OU(2HXNy)-J&%fkY_G9=KegCe~)Akyo7BE8Wo z(wjXZz11z!+g&2P(;?Ek?IOL`Cer(@A|2Ku(&5b_4UN!|4I&*?FVWF;5*<@3(XllW z9ak;U@l_I?@J*rxJNOVfML_;GqG(sQzBGYLlGJU96rqhdLI-^jg4}X^F z%mSG{@=2z%KFTySLPI0;@qC5Oey7kmZx!10MxouW725Mkp}j8^+V?`C{m&IT@JykD zPgNRuqSEMNmBs)L2tWb~(13ZY(JbHq4+J0r3CKWstkWvcfDQ~`0t?u{d2G-jkPGs_ z32+je0;eCF^cisWu|l7Fe3(A}IGVojc!R$9WR|}4WQ4x_q=&xpq=mlvq>jG!p1h)eeDaK`VR@#Os~2Spw5?SYTSy z1*Ywwz_cF_n2uzD=}Z)uu6Tjzjun`mXo2aC6qvqnf$0wun1MZk8Qc+=p>2T~-V~UT zb%7aO6PU3Tff-*GnTbV_nOqQ=sd$Fn7vks*>91Uux5z~Z<3gZ zMu~}RkQiu%fmWE98kvc$mYKLJnTh`2PJ}OMs2ZcHMUSW>qE6nkC3X}a-WpduAjO(?^ zxL>J^=cUScU#N`lxytyTsZ8Lh%0Md&@>F9`fB_s3fCLnv0Rz~lI>P}T2tWi9kbweJ zpglDh9T>m_7O;T>LQhR57vzBx;3PN&PJ=T~E#@pZ2hKk|%3OFF$6S26#awzi&s=^w z%3OKc%Upfh#$0<^&s=}{jrs0rDf9i)&&&@`-!nfxea-yz^ch>t3v3N7u(g=L)&&K& z-Yc*TE`e>#7TBhv0^6J^uq_z^+nOe@ZK(p=o+7dxNg~^sAhKO?BHJA!vOQ5E+Z!RW zePJTozb~=_yCOTdEwV#fB0IbxvLovvJGv^eV=E#%z9h2H3_Ce5vQu*sJ3S+@Gt&|~ zJ0-Dm6B0W=F0l(^61zAeu}i}eyF4VZD}xfd+ApzdeGPJol(6gUmefV0nS_8d45 zEnbQC2nFt;wI-LZfaKIpdD^zO5$cGWo~Xl=H|y_ZedjB7Dr@mX-MXl2W4($K;~Ba zWp1rk=GJ>;Zlhb~HoIgF+Tpg_Wp1ZU;dWaUZm&h*_L~(htV!X*8x$_0Ug09^6fUY( z;i794E~Z-HVyhG`?wi6vJ6uAg$|Y8)TvEBpC6}pO$`_S8P@;0F#VU8ONafNBRqoJd zl}j&Bxr|RLcle{mWq#1OBkwgXD_`S|zSFp4Z#C}t8;#3;t#LW8G!EL~pdHThLg&1| z2mBxaf&c+1zySWj;0Qnh3ebQ7EZ_hSgcl|!0tv`K0V>dd4vZHTX95e@zyTqU3-Z8; z7dCeioC2r88E_Vy1Lt2j+y!v)rJuX>GKIVRa-X~Ma+$mOa+16Da)7)3vV;5XWh3|f z%WCe2mu1|KFN?UJUVh+ye))#4;v~MBl=vD<;%fsEU+0zhdY8mE9GCdUEQxQ*l=$X! ziEl}h_|{a3Z%dK*_9Th#NRar>IEn9yk@)T?iSLP!_}(y?@7tI8{#}_L*p~UhEtwzM zkon+g=a0Y9`Rvy^ zpYuxRUBC@I!28PJeZUU_AP5kE0u11Q0OTu^rvMEYzyc2NKma0;URk^h6rchP=)eFb zuwL1`4IB^xxgZam04HBL{3&o6oB?OSIdC3acopI=f=jP({_?9d{>rNe{_3k${@SZ) z{`#vS{<~LQ{P(Y#_#a-?@ISsP=YM)t#Q*&2Bmc{*x577G5~^rPsK#ZXCMXNFK3S-9 z%R+s&EHoUGg~lVY&~#W9nh(iB%RyOaJs=Bh$+FO%C<`6&vd|eT3tiE&&>blYJ>jy@ zyDtlUd$Q2KBMSptiZHmT2t(_NFubM+BP)t9x~vFei;6J5pa>IliZD5=2vgIFFg>LR zGn0xiJFWaG(S>d}k!@~D(x`iL!vDQz88Prdasp%_rg4 zH*dwSqAY%6WU-2n#cEU*Yy7fU>ygE}99gVCu80j;irAQ`h)wB=*qo+_Evbswnxcqp zNs8E>pokrDir5*Wh+R>N*d3vWJz5t;syIHciW76HI60$=Q`4$AJ*kQ_6RJ2nu8MP`syIKQiVMT4xHzbaO9QI7+^>o& zeVVx1qls(Xnz-Jji5s1oxY?nJTWy-S-KvQ@Et^EOvJ3(kS_-~zY^E`iJM^296eH1X=YEb-dASn>M1E%Cc|^WyjKM#UfA^@=~f zYZZTbS111bu2THvU5WVXyHDcZ-o2A5B}MwmDbhDek*Y97stzhrjZcwk-HKF~tw{Ap z6{+EfA~j|xQqv(-YCfn+EeBMoHA$7)5>%-@PL(=hRjD&tmAWETsXJVidiGVRcTbi2 zc2ucwYVrlvG$dQy{S#x-en zOq1qDHEDiWlNN?FX>m}KmijemxlfZ;dNm1}lGeI(X}wdIHac`^vt5_A+H`5VMVEG( zb!oRrm-ZTUX}>|2!s>M?yiS)QYIP~HT9=}#bSe6qA;o+(q}WPBimNcB_;N!^C^MwQ zQbS7mVo1p)hLlolNC%1x37V1)7MN1nCsR7~(Uj6Zm{P`jQ#zb)N}1pY$O1>fF>oAY z=UY+^Z~-^)059+XKL~&zK=N$~1sK2q0Z2dr8Zdy(cO(w*Kma0;fD9C%0xdrz>A(Oc zuz(F55CXaRxl$fD0ZxKb;50Y`&gSPy=fHVz0bB%^z-4eH|AcfET+7dquIDF6-{tQ} z-{&t%Kje=~Kj!yIKjpVcKj+s=zvO?Fe$D?P{Vl&h`g?x9T%o9PC9ld~X;uD)t8x{h z%GG{VuJNdHZH_9}9aH7{ELCnetjdk)s@#;O%FU^&+>)%yt%<7K7O%eZp~-`5nmn|s$-~QBc$out%99Cz@;kAYwQDexF)rK5ZWysNA4LPRL zkYg)MIj-E4CYcBOnVL1;@Z~kPUKx>%A?zfd_bj5BNa<1OWn2fW3EQ91ws66rcg~!I4?O0sccs z7JvvOAOi)cKm$53KIFoCW8=`41=L3*aKS1TKRs zA7uIJ2U5QF!7pF`kS%}rAw~ZF!@m5(hh_Q450mmw9|q)~KXk~yd}xq={qRlx+lNy5 z?;k!Z<(j5ch?-K#YRXqqQ@){^QWemYYOki$xHP3UTT|+eYD#^krZi+|O5-6-X*#GW z%_*AFlB6lE37XOtrz!0*n$i)iDV>qJ(iN^N-TS)Iv!^S)JG#=hr7QiLx-zh?D}$@L zGPI&A!%Mm{vZyPg3%W8krz_*Lx-v1XE0a^YGBu$q)8mFRGiE5WBZe|JY$)?XhO#hd zD2x4uveaiN%e{uO(rqZKU52vOX(;O*hO*IaD4VT@vejZJ+s&r3(_|{Uji$2KU@H4{ zrV>_bD&aMz5>ag`kyWM=_03eGznV%+rKvz)N?e(##Ftu1!WTn<=`hvN&9Fi(3g@9GCtbMVUP)qfGltn90SKeHpl@k;Qr_+9^eH&;0FN^ z1PDL@2Jnv|g#aX=01X(x0uJy%_?WARKmsyQfC@CA0|S^J^Aro%zyTqU3-Z7TaPs2` z!(KLZ=b4^zke!I{_&|$EtfR4g45JWN>{()y811s zt5rT-t#<2bO^&YC9@EvjEM2WXtg8*_y4skgt4#-VwK-W=TM~7(HC|WSVs*7WT30)w zbhR@=SG&S=wR=xjdv*=AciT|=HVw6Z!%zp-40UkTP=}Tcb$H28M-~iqblymwHWgxyMvjx=nSp%T(7o zOm)58R5#j8b+gq}w^~efyUA2{8clV#!BY3?Ep@-nQp0L3HN4tVBdRPl@|&ebeYMo+ zN=uEYu+-RcON}eDRA@|v#?-_TTTLpq)#O53P5ErA2MTO86&wU<;1Ea$8Q?I;EO68# zAPXD?$G~xr4RU}BxPb?F3qq<7_(1>!0Rm8f0UQv3EXY+UKm!J_fCD@bfC!|5JXHn? zP=N+?U;qBy{a7s%zf@x>n`YwQ854)f_jp+M|Y6muYDA z8HUzy$j};74Xr7~(3+DBttG+GTH_3@EymE=qYSMh($G4?4Xtb6(7JaGt!Ky3dbbP> zTGRU1O>JP+)CN~fZD`5Vh8In3WZu+9=S*#E#?;2AO>JVz)FvlPZED=qrpHWeX2jHH zhfNJy)8+?EZK2=N7W*u1sn^n$yDe>{%hFamEp4sC($?E7ZKKuFHd`!htJ%`Fn=Eao z!P0i?Ep4yP()MfNVD}nZ3$M1dh$>r){AO!Wm9`dLVQVqvwia7vYjLHv7XQW85=v|> zvDnsp(9u#pJK6z|3J!uaa0sM>3~(4^f+Ha7b4WW1j)CJK8{_~Na03tU0^jFc z%?|<~2oQh*4B&tOB%nU$X*6H}3pl_70f;~Xa^VS00V>dd4h&!d3)sLZJgJ31F31BX zz)5floQD5+rclt%7UJ5uLZ5cNFk8D&n5kVXOw%qErf8Q7HUHiUpMf;&}QTwrQPW!2FTKl zu=IsKOJD4@^raq4U+%W`l}=kv-OP@Tiq9b|yRAQKz`S>R|^dLY03NU~J z0+4_LG+>HO=q%s>4+J0r3CKVJYSBqu13EB(2`pd(2ZV}F>A4^eoPcYdERyw8MU;NJ zD5#$)a_MJ_j_T)%()II2srrSYMEzn>tbVB|Qomdjre7)A(XSS5>eq_a^y@{-`gcVO z`u9b%`VU1@`j5pE`cK89`p?C~`Y*);`me=(`rnFs^uHH(>i;Ni)&E&sr~glJrT)Lg zCB_%sG)iUDDC13|oHmUL+%zf?)A;H)jc*>)sLC;o>f@$SlVuvUnWj;fVH)*mrqPgU z8jUHI(UfEv%?Xy#5@#8$F_zI5Wf|>}meCPz8J+u<(Y0$C-8+`ivt=2*8o!Owz1G>8;d=*vD9rF%U!ks?HQ}>j?-;vv zjP|W66;5Q^|nwb4jo9OG&r!Ye}c^w~}__?F-uI#{GwQ9sbHC9jAfRSmRW&XW@W%Kzj`h6o7*z0vMsavsAbk1 zvCP`TmRWbmGV2doX2Su?Y)rPyrbNqZjt{vO# z-nPx2P223%(;HYobPkYg~YMcF2`K%bj+0w$AkvWwN}SmZwZ+j%^`EM zDP(RnhRp5ykhxPAGIwi3=3Y(6+^-IqVO1eB{9DM3s0^8r6(KXKJY+_fh0K`JTr>7d zt{Dg7K>|nwNgx@dfCC^E90X}!^2|dZ9b|yRAQKz`S>Px*29ASlkn`n)=>l%x0bbw( zeh>gbfB^K%NfQG&AOHy{Km!J_fCK!OQ>Fk!AORUDKm{7mf$`7;qRbjRorNzE#KSUvaE~CC3_EbgZFy#~Pk< ztdSYV8l85mu}Q}opKvT_(V84}tf`TZH9Z`%W(Gsn>_Etx>knD;y&-F%CuA*lhpeTp zkhR&+o+qbX!|nwNgx@dfCC^E90Y0L5J)dOVP$~B zAQKz`S>Px*29ASlkON%6U3Sv)059+XKL~&zKmZCbfR~-J2tWb~(0~Cf-~bPVveT9b zBp?F?s6YccFyQx@Wr}6N4aY7+EvL+5h02awxn-GFURj!TqAbNaS(ad(DvPmBmql7< z%J!|ZWjofnvQ6uJ*_w5sY}vY4wqRWc!`c2m4#H^(}5OSEIRMmly|gk!gdId;dMV|VU2cGtFJcW;L5p7oI3yB4zh zRzi0Fa>yQ74B3MVA$w>pWDn1V?2+k^JvtS#$0kGe_;|>k7z^2xqak~0IAl)`h3uKZ zTzj@Z*PiRkwdZ?t?S<}Kd$B9mUh2%XmpgLpm9|`awKdmXYst0On{(}rrd)foA=loj z&$YMfa_ybkJbSk$&)%!fv-iK{*0kI$s#Dj$L6Lum< z0?8l+8~~}{AV>p;Ksv|(hs#gencxV>0!P6ya2#ZV9N+?O;3+?4dw~!5K>!2+QgO;g z0S0hD0J7q=O#vD(fCU`jfdE7xRh+S9pa2zU6^5->@U~Gw*k(llZZIww_^9nvWZ0pK zgLZC3vYl5EZ=a}$wog_>*rzJ??9&z7_L+(e`)tLkeXe53K3}n5U#OV1FIG(1mntUg z%N3*cm5O2eYQ>;^t)kDqUeRNJSJ7pEU(sRzP|;@pSkYqtRMBMrT+v|vQc-9BT2W*F zt)j~Qd&O7#9~Bi&k?A08Nl`j>K@fyG>Ba6Z==n#*;DXL6m9>0D=YGS?ZK$aTiY za-E6MTxW75*O?m1b*2Y%otc4LXSOfbnd{AU=6mv-h3-6Ou`|zE>d14J+w+{2wmfIG zCC^!F&U4nA@|=yvJZG~Z&)KTWbGB>qoSm9HXSX`f*{eF??0-Aqgnd2Xgjb$$B0waF z0?{A_#DX{w4-!BkNUA*PB!d)i0HlJ0APpP>=^z6f2ASYUR z2Y7+6^0eaz0T2WTKmi7DKmZa@m1i6pFn|Rd;DG={AOZRRXYan_+sF=k(H|7{-m6GT zltdLuqIzFqFde-EtP-`}^*V9cxZClr>)IQ4JJm^irLip%!Zs&|qi#ol}G1VI7> zNU-4kKuNZrWBWSqe(rnsk30B$ac1U}IcMg~%$cD?Rx656R-Y(7Reh-VboHL%Gq{kP zt=?9At~$N=d^Ii})p0n$QN@bt@M5Z3UaYK^6w}ok#Z0xon635|bJd<=zGkUds97i$ zYvzhoH8aKPn#p2K&3Li4X0%vWGgPdv87MZ?^c5RxdWuaoUB%{_j$%tqTd}pKrPx-} zRBW$lD0bA;7njsLEH167QQSDMP~1GNP~1AMP~1MOP~17FP~6?8P~0m}DDLl6C?4!k zD5`T6ikfVNqBc{Zc$ltG)TJmC^+^iFqXbIP5JxE*V<<&a6s2g6pcE}(l%h3+Qnbk^ zMZ1JjbP!6>xk)Ly)+t5z8l~u2r4+qBO3~+~6#X7bG2o^YgNu}6$VDlJol3>Xyizeb zt5l55C>7&VO2x#aQZYH9R7{O271N_i#mtCOF*~GG%nd3P^8-qSvrnm5=v69QJxax5 zH?3Ieq!sQCTH$G@70Ye3!rMwKe9g3CrHNLoHqr`z1FcwlL@U8debp@wKcX0TLkzk|70BAq~$1M*=f?5gDzyP*K~z+Tt~`=JmHz(F`vD=3QKFdTuS*v_%qvx?)jM-(S& z_bX1;?oynp%~PDN%~G7HO;wz&O;nt#ja8hljZ{2Siwi`p3|Sn-!MYCWW=OL1C+{SJ-PGQrC+q>c$z0x_N@4ZXKbh+lMIXP9a6z-AhsTc2m^- ze2RLIM^V+=D5@rlqG~fJ>R~EH)g@C@eIi9Yil?ZCSc+<<0bSbH!1tm2+ucSui zl+@@fO^r>{)c6!lO-#_# zMN{Z&l)Ig#JZ%iM+{#ei7KZXQGt^2WL#;M2l>ZS!t<^KsdL2V;JY=X%2mk>INFTD4 z4CD|3p%4b)5CM@81b z@?j_Jg53`VssQ%DUf2iwp%4zhK{y0O4@K(mLj`r@;YsRf-685&-CpW=T|RZ9E{8f< zmqDGXOQBBJB~WMTVyLrq5!AW5Q0jc0lzOHvKo!^FLQuDg1M8)fb#98TTcnseC&kvy zQC!_L#n(+zLfsf8){RiAx*IoVr1W*|l%cMbGS)Ryrn)A|T-QKZ z>gtu(C`x(#9HqQ*N~yegOsTw8q*UHMpj6)3r&Qi8P%7{3R4VUpS1KRmDwWmQN@Y!^ zQdyg(R6a~mD(jMz%K8MQ@==^p*$|^tHbyCxO%Y0EbC^=u5~5VL%9P4B39W1=w6bH9 zR(7t_%C0q9*}Y0DdwjIA*Gnt=JhZakO)Cc$Y2~1cRt`C7HNn zPtwYX2}U_N#we#o8Rhf{qnsIHl(U13a&CZ8&i64&XD_2%=wXzuE=IZ7$tagP7^SY#<#G$7^ft3fUlXfbX=IhFk65L@o>i{FI&8ou1b~19q#y%%J*NzTPzZx?h=53l zf@p|=ScrpoNT}zPiI4=zkOHZY2I-IinUDq9u&rKD=0Gmw!FJdI`LGjq!EPvkJ@uk; zFYJT;PzVR$AnJOk{;aa7{;2YB{Q>2X`U2(A`t8bN_1Vhf_36qJ^~uVU_3_G6_0h`H z_2J4h^&!f$^-|@z`c38e`ZeV<^{dL_daqJZj}yM$g#+tU()F`SrhZz<)=w(A`Y|P6 zKcW=shm>OdfKpZ8r&QN>D>e06&z!u1%%shsiWumq^p~ z@ihG?mZlq`X}U3zrklcPx;d1lTjVs|Dy8W*LeuR5n(o-3>CQEV?(#Eq_Xr9%kv8 zL6)8!VClJjmY(lpX=e{hFLblCtBa)E#xd_BOG!uaTu!8aR6O z5l8!B4c1`;HX#56Bp?MD$RPwmAMtb;ghK>GLKH+p48%el#6tokLee9FPKFdng)~Tq z49J8m$cAl@1G$exIy&~S=A*l?IW)Ub~( zYS={|ZpfpLG-T078`9`w4N3IzhB*2}Llk|oA)G$dAg50^Na!;SoAlX+HTqn`3Vps| znSQ3hO&2$~XhnmQrW$Z!H%#N8PS8xl7|k|}&|Je1%{L6tLPIYtHgwafhE7`D&`xU_ zT4`-V3$1HtqV)|8%++F=xptOjuAiit8%Js8W)aQYDx{g)duis*ZkoBflVX%1nS78%2|N*Jas zz%cEb4AZgBFr9ve=~`u&ZXd(+cv+^`!!mtKEYrWpG6M@NGw5WQp?Q`Wo@JSl8I~EH zVwtf?mKh&snTau$nH*)AsbQ9x9%32vDQ32xW9IreX14P&VKhxm>=lY(ubyMrYo{3Y`Z0#RahPFm9%R^C`xy52 z9)`WMi(&8XVAy-P410eY!#>Dl*y?nKtx09r+GLh}n831iaV%RO!?KT}ShgX8WgEj; zwkeclo8>IqB4ycD!m@1vmTli)*^V`q?ew#3*9yyads((;nPq$3EQ`Lx_PaQCV1Z)? z=Q(z0j$?;sICf;3V@D@Bc5H%U$HzH#Vw7ViM>uwBm}930Id*1%W6_t`xn7Q)@8MWy zH_t9~@vN(ZXBXRfcBzeL-K{+9Y3AAGCZ6?z4_06m{ICY=u+b#2n-Bm35|Dxn(X3|k zVJGZ@-B8f1WcM_mVfQv4W%o57VD~o{u!YS#*aOYm*n`a(?4jlqwx~IQJ=`3_9%+tb zk2Z&~$C_pA@n*uFXx?B?Hm|X#npfD<&CBeW<|X!Qvx_~~JkOqQo@JkDo@R@iCs;-E z7)v#eu*&8kmTn$kndUwm&>og+?qd1o4pwMxW5wnc{PQE0yYdXnT|L8c*G{n9^&>2I z;}FZ;EM&P`ds*)GZkD@~&vJM3Sngg9%iYgrxd$06SDnUkH7P7to5*qx<5{jQmgVZB zIqp#;$2Ej=Tw@r=HHC0ovy9_fBplZo;JCI;j%#1%xDG$Zb*^$;myhGRmpQJ-!*RV! z9M`wVas3M%H{j&B!8x8An&r9S8J-)N;L7toG z=egNFo}26Cx%qCMb9V9ELMP9;Is|U9P2iSV12Qzunrrr34s=o zBOn1O$UqJu5DH-s4iOLuQ4rmt;$k2c;vgOpAQ6%v8B!n>(jXl&TGU)7WI;A;gB-|( zJlGC9ARl&O8@pPHx!owEx)m4s)-H~1?ZClo<1aHT|6Vc6UpdS1S5I>MwPPHA zy@=y)9N_qy`#Anq0mt9o$?No8&y-EamwY!t<@0Jm0p#^X+Rq-?7T`ohv-w<>mSAWuEVG z^L+0T&-b}_zJGz|2j+PmeTN^K;rZcdo*$VM_|XZ09~&3=@lk=F7!ml%A%UM76!_@@ zfuHFU_}N~8pX(9$`EG%Cb_)DLhrqkq1s;8eUuqS3H+Wzfyx@ZsSOq_Z@?x5 zfPkb;#Y;g3atMJ?2!n8lfJlgfXo!K>HZ>my@sI$CkOaw)0;!M&>5u`LkkzK)vtb+L zKrZCLcG%Iz^7(D&`JHVi_+4#>_}y*$_=2`w{GPTves5bgzppKw-`|$Z7q-Ro2ijuz zgKZJ~p|()Is7=NnZX^5=?D(T?e*Re73V*z9nLp9C#Gh<)@u%9H{OPt?{!H66f3|Is zKi4+KpKlxCpJ^N7i`xcxMOz)@HTHsM{46E0Jn@ZNb&xN@2kt{&%v zYezWY`aw>(v7Z-i?%{=7yLjPtJ}=zKrBwJZqT z9zp0?5`^AGLFii$gnp+W49p3_;H)4FO$);Clpvtr2&3bIFg7L#<0GOlF)Rv`L!vM> zAPUp{qA=4Z3bQ?;FxM>#^If9g>=cECc2RJ_A}oO$Jh0rZ61?Dp6<7s7tid{Lz$OHM zfCQu!5}09cP6d9mj{8MXQy!;F=zITQfubkk;t4De9 zS`jZ^FXY7=dwKC@0WaR#$&0tQ3*wzzLA;wSi1#uD@qW4>K1dP7>Lfv|Nf5-^I6-_E zBZzfTf><9Rh>yYqu^~hd8|8x7Bo)MFB8V-Ug4ntth;3_v*uE-=9V?>P=@rGUWl`*Q zi(=2BDE7KUvCk=r{qv$YFe{3KGom;&EsDdFqBt@kilbwqI5sMZ=r7{LkSIG=Q zl{np}5@&i<;%tvfoa<7F^PMWu2@BwYMOXqicwia4;OkV2E3gWFSc7%gfK3Ph0SQP! z2671L)QF)F2H_9^kq`yZ5CgFg2l0>qiJe+836dcNQXvh}Ap}Qasf;E}rfj70+}I zi)T9r#dDqg;`y##@tLk})jN!!dRHN+E}s=t@0}7EwS$7{`hG!mV~?P^ zxl2&p+99ZJ=LxDi+XU6!EJ1ZILr~pM6;%(CMOAg8sH%wS45~s*4m=_2HuG zQK+bDkc+BDnW$=#h^pp*sA|~|Rjuoys?9H|+E+wXhfh?Y>Z&e}O4YrjQuQpVRJ{u- zRi9I(>Yr1o24+>N!D*FhXiB9To=~Yq##O4(F_mg;M5P)ZR;eb2RI14Vm1?SAr9vN3 z&Ge{Mv)yXdT$frk4^CJB7c9aOxWNO<-~}J7z-pI9<%cy`hYi?-01%LX6l5TW5D0~^ zF0CpYA|Mi?AR1yI7UCct61ugjL`Z_yYp2$x^qSD*uc;1puc!`nFRO~W-KxXgF4d84r|M|;oa$KjjOuvzr0PWXxaws0sOnVruUYnJ>dU7^^?N5o^_3%{`syK3eXUSbU*9XLZ|oM; zH+PEaTiZqT?Ho~kCtFnC%@o!5(nR(B6jA*kNmN%Si0Ya+mAW=YrG6NtQrAVO)b(L1 z^`j7#xrQS8!C0{no8Zas#3SFsMH-^mAccTQg^vk>h49Ay2qtb z_d3<;zInB}e^#v?m{F?-r_}19Nws=-LaiPdQ>#Zu)#|ZfwR(I=t)3WEt0()_>Zv}p zdb(GwM*mRH!d#C=Jr7P;02eI661c$w%iskctiUSxVGY)MwCWAmga8nbfD~jPhY$#b zFbIc;9-TT8q97V#AQs{v9ugoCk{}sUAhk!YPJ?vJXY{b@%%1b=te%tV?4HBwZ9RqR zoSp)8ZqE)i{RONX>RUN zX>R4IG`F{@G?3u+CT zpy``aYtSz=1JfGK;FLx)G@;Q9k83m|qZ-ZVh(9_np&Z^qtUT_7!Qe`u1zG`wBGM`gUk? z`f@b6eVLlPzEsWjz9h|#zBo;OU$katUxa2?U#MnxpG;HGM>Ko-HZ^QAhj8JRq!qnRO5ViJ^Os#E@ zYP5|+qix#MXq(qH+LkqqwslpbZClZ3+r1iXhexCBbZfL-iyCdWOQY>^YP7xc8g1XK zM%zE5(GE;$w1blx?a;VJJ3OYM!zns(2?s&?;ySG#Y(quoESs4W~= z&>k3=*B%_0)gBs{(iRO&Xb%sJX^#wyXpasIX^#yI=-yDNb#HQN-CLAe_x5?U?wvDg z-Mc5$y30q^y7!9Ix+@3Nx~u!tx@!e$-SwRs-Hja@-OXH$?$$Pq?sk?&cPCw=yPK-f z-AmT!?k8$=58^et>R64gCR(GbjnwEKhHG?np&DJiT%&s=)#w@|8eL;RqifpG=$hBH zx)#4y*SezBwfVHV_GPWE!=u%8E@^dLF0HP6L96ST*Xnxbw7R|-t*(Dst3xw%gA-ca z(70ANJgU`=jA(VE!#dsApiVbFpwmsjBuv3H%)l(n!8|x&0bH;MOW+>R>pZXwUhu)n zpkB8MeprKb*nmw4009X|2MszI$RPwmAq>JH0wN&_q9F!iA#Tv9i-!bA929j)gGycU z;8|VD;Bj5*V396uaKA2naJMdFaEC5)Fh`d)n5oMiOw(-}Ow#2H#_MtiV|00gk-F`J zVY(fIa$WwQM7MKrQ@3kyUAKF1RaY?R)9o4b==KgS>Gln}bo&SAb%leox&wpLx`Tt0 zxpxh{^}l${@N~${(8PfeSwE9O3&8yS5 zdvy8^w@%-=sMB}3boy?mPTw=H)A!Em^nEiregBkBKQO7&qZ#_4F`a&RRHq*q*6Bxw zbowzEhlwG*eiEi&8fIV?=3pM2umCPtge7o;2bRG*WYGIy1y;ciYp@O*un7SmAOR`J zKt5#Dhd?NVK{!M}Bt$_p#6T>>LHv-QPZ*-~i9=`gNkhl=$wNi@l%f6l)S=z_w4ojP z^r0Mm#&D)Sb2v?(HJqf!9|F{G8;;TE3`gp7hr{%F!*c!hVTpdna6q3wysqCl?APxa z_UU&IFY612m-KsvUHZMlPW`^&IsN|OX?@}Fr2fG0xc=bqsQ%FKu;F!4Yj}gv8s1cB z4R4*(8s0vwHN10NYk2pF)^Pcd7XS59Yq+vkYq(mVHC)@NHC*4WHQdP68g6dW8g6B3 z4Y$*^hC8WR!`)=9;a;N7a6evWco3^IR7dL!HIX_)ZMe?xFjQx#lj{uiQk~(EL}zFS z=nRb;Iz!W%&d}`F8Cq6!hE|`>(6+2Iw7YeNjwPL;)1^0bE$9v1^Lj(ioZiqoqc`+T z>ka*rdc(kk-Y__>Hw=yH4Z|aP!^p7SFbZQZ4ihj5Q!qVjFwDR#%)$JK!Qg}iaKR!h zfg3!q3|{cT%81dh3Vv9Fb=ZJS2mk>INI?d22!YTMlOYVkAp#;H3Zfwf<;IQ(hPV;R z5I=IpkT7!GkT_CgNE+F1NFFILq>St^q>khm(nhij=_6@|jFDtR=177eYb3^yJrZfy zHWF^g83{4ujz|r8BLTzqkqyI+5x*gSWW}&^WZAH5#BJC;vS=t6aT@lF%o+BM%oz5K zOd0l%Oc)AB#ta8WMvSkiw8qyto$(E&&iLjtI^$bsbjG(&>WuFk)fwL{(itxw&>7#` zuQOiRqcdLJr88d3*BP(p>5MmWbjF)mI^(Sjo$+>>&Uhz9XS|!FGu}(k8SlsGj1OXT z#_A}&u_i)qtPRr}ABO0SbuzuNUZOWXB6?%Prry}Nt~WNV>5a{+dSi=EZ*2AIjcp#i zvE8jVb}Z_RoeO$nms4--p3@t9W(~&P8H2HJ%3$oDG#CfQ4aUJSgK=ooU>t@K7=o45=U^V3umCPtge7o;2bRGLK3IWO@Q<2|Yp@O*un7SmAOR`JKn@`g z3SkgFYBokdBt(tsjnSjLF=kX@j2%5=j2k^}j2|m9CXDSjCXN*tlg9Fm$z!?3l(8&h z>R7rlZ7kWCK9*q27>hM#jzt->#=?!+V$){NW7R*XBwyvF=7 zk8$VNqH)*Qf^qlQys=29LlbT3YCx*w}IJ&4wusw4HLnsB|THdJqVC^wkuqy|&H#9(?9Fqj%P45r34 zgQ>}HFg33jOf6o6sdd?4YI7S*?Mntzhs$84?*U=fzU4IWqqFZf^uR>2Qz zus&`!ZNMf3fPe&~AOkssKq!PkI7E!=O_AfgDQa9{iXJ~>iWxs{iXAU9#f|Sb#g7-5 z62|jQiQ~DZr15N1@_4!_Wjw`{I-Y1s8;>>NkBFNx#v@FbWH&F>!2n=kJ(nBOZfn6KIj3mCd^>24KbJ>$_(Z@ ziNRb?4CY6hMsvfu(cHLZG&ijp&CNcexy5TVw|b1`wk4yvebH#{STLG9oknxloYCAp zYc%&v8_m5_Mswe!(Trnl9)Q6KlX(b+VFX5D48~ysCSeMuVFqSl4(7oL3*eeCn-^gT z+~9#_@PZFkU={qZ2J5f^n-G|=mn3E?H%_);{=G4h(bJ}EtIejwJoG~dk zXHH7YS(5>C_T;*G+oa!|GwCzuPA;4CCf(-klP>d)NvAn~a?ZSSa>l%Ca?0{Ey}|Nx zwZZZW&R}^>X|TNhjKT88S%c-xlLpIM#|)OY4;w7+95h(o-EXj5-fOVDx7%R3l5enF z-EOd4%QafAXB#ayGL4p-=|;<~RHNl~lF@P}!DzV~XSCdlFH|j0qYa~_Va;f1^cyWrD<(^`*JNo~Hd$KTCQI9r$ zmd<&TrEAV)>7FrJdZta5-bs_CZ^~rphXELbAsB{{DYIo1#$X&KU=pTa8fIV?=3pM2 zumCPtgrzBq#SI=<1~2$v1y;ciYp@O*un7SmAepjSq#y%1giPrzp;NpiY>KjkPo1?y zOr5YqP93&HO%+kiRFWlWD&CSj6=O-6inOFo zg;~<347V9A`?uw+g7E!k5mmTgmBOU{(rk~_6%$(vfRY@eF9?3kLh*tKtH%=R^Zyq;V-#TKnzJ17OeW%c9eRrSHdbz-8 zeQ%f1dS!>vdNt2zy|&G0y`E*X-pDXoZ>E{7w~|fP+leOYop_V=Zmh|AFWO|iA8E2a zh%i~J!%Wti5R*6wMuwFi2k5BgyM24M(>VFX5D492G|)(Mz|DVT;Cn1wl* z2PZ6m3l?Ds+~AqET9?5KK3IWO@WUFc!v<_Z0LYBhDgi0TX7pD1j9?9!p{$`Z=d58f zC#>N!N30Pu2dt4Zd#zD3yR6YO+pRG(Io8;jOl#asnl*kV*_tquU`?EfwI#)%n_05v%($$%Gfr#X%&hIFI-~7p zqRIAi)@1tyWwO0?-ei0IjLG)KNt5l(VB1#rP4EP)$5 zunb=C&Dv}$unK-ygLT+|O$Y!1$*kTcofT}dS*1-rd(IXzd(svyU!Le zyW18yyTcYWn`4Wf&9cSJrrTm?lWlRc3AXszSX;tuv@LNq!j?1}YD=D#*-~aDw$#~8 zTiWcpEq&H+%b4}qGG~`dcZPsbanVYl!hu&oWsoG@!8E>-xoHp5iQEalm zcGhfv{gm1M#&NU#%_C;}TZhc{w+qeoclMg??-rQtmv@@&@9i+#ujHETSGSq%*Rss^ z>ltSIja0M!X0q9SE75Gf9dEYZi8b5rMw{*TBF*;u;b!}TFpIr9#A2_JS?skEi~V81 zVz1k@*z4CV_D6n;yJL2 zdk^$NAN0cj48jl$!w8JR7>vUNOu`gQ!_1t`J_~a&4^CJB7c9aOxWNO<-~}J7!0Mdc z?w_~Y*I*qsU=srK20NJ-?UH$=T{?f>E}K7Pm(L%yhs+J6=CwcD!-a?0B=t z?0D;d#qsuji{qU=7RS50ERM_h7RP&e7RQwwi{omx#c?gu;<%n>aok9;IBq6c9JdlI zj@xk-$DJ69<8GA2aWBH+xF2S5JP5Tos^u0(jnv|(C0577O{=4B!|JGCvpOEFS{)55 zR!5`P>S$WFI-1>9N6Vts(dx1~+MHHLJ9I!NbU`=tK(Ev0=!1S3fI%37VHkl?7=v+` zfJvBwX_x_YWyhS;?wAKBEPx9ZVF}#efo1T54_06m{IKS9IM!jqX>e>hMMuC%JBafc zhs1f>A$1;e$ef29a_4?Wh_k>E>fGrFbLKh1o!cA{&J0JSGu090Omaj!;~g>17)Pu# z$`R)bcf>nG90^XDBhg75NzP42vUAOm;#_s4I(?2br^k`Lu;j>CaFx6*SW4bGYbklR z$Wn57x3%QGTx-ddZPt>jS=N$k>DH3#sn(Jk$<~saiPn-^@z#>tvDT71(bkf?k=BxX z;ntG-q1KWIA=Z*=nYE-wVlAl+SW9qBO6u0FCG~z=$)i4>8-Lu3A z3k!}C7c9aOxWNO32_}Sk+_OVq^`me znQKpp+_kGD#I?O7)Rj{b=E^Jyccqm?xROgET?r*ouGo@jS5!%iE21RU62;N@^u{?`>CGZr>8;(i(%ai?rFT+n zrFUa(rT4;ZrT0T@r4Qt`(rT%#w1(J9Yd3AB4>xS3b!)cL`c+%$qZM0egV$Et=&_eJ zx$ULRi}unMXoWUthYsk3F6f3H=!HJ$hXELbAsAkCl#akCjKMfez$8q;G|a#(%)vZ3 zVF6sQxL8uU1a9!aGI+rUE3mp~D)ld_OV<|J()C3}>Bi#O(#^#arGdr6rDX9ysbq0) zsdRC7scdmaseCcFG-NTWG;}e&G;A@YG<-3!G-5HXG;%SfG-@%jG6Bk!Yla{=t$xEKnl%=Jzdschdea2q);H15*dcVD_X1l$tHp5=_ zFu`6{7hx}}m)Xl6t=r2Qy!JBe$Fim+ds#EIEIGqi35~g4pW?&ZPU>=;X04`W`my|7m+g)1bfo1T5&uuPSacjy}-CUX9 zO_i;=&y}saPnK=CkCtt^50(Yo`^t#BpiJV-0NlWZhu*V+gFz8UM@>=yUXi2NBN^u zj`D^=M|tB8M|o3*qr5r6QQi{aC~uWI%G=f)tt=!1S3fI%37 zVHkl?7=v+`@RXKM!W2xy49vnD%!3mazy*td!&~kK4=j7ES3Jt{RnPfy zzvoo>n&(*gx~Hgo!&6wk>Df~r@a!xnp6%rlPfoeilUXkFq?OA($>kxQgz`{NTzQx$ zx;)$yQ6Aw5E06TZ%cDHf@@P+>JjSz89_v{vk6T_Tk6-pyv{*_iT9qXgZO2L~+V_@J zbmWv&bf%P6bj6fbbcdE!^aM&PdRIy-`j$&8`e6VDVF-p{1V&*D#$f^`VQRUoVj5;( z7Up0coUq_6t8l?0EP>l=tMGXB70X_+!t13geBNg&R=j5_R=vk7{NBSAYu*DD>)yQ; z8{XX&o8BE20dH;v@n%;@ycrczZ)%0in^Yn9##e-RV=6+ukriRy@QQG6NJWHKRuSnX z6;a;JifHe8MU2;95$p9;b_=DIJ*Uemdkf1d`?i-=_NSLs4#bsJ4u+Lg4w16T;nlLr z5noy5D2%~4Ou!^e!8FXktgpOs4(7oL3*dr9pQCcgXRLJlRFxhdTe<90RC;}9D}BBb zl`Fm@m8-skm44s8$~9j><+?Awa>JKbx#`zWwr3a>gt{g{?%O<)>gM)SYOS#u(6tTVRJS8LSQxJ0$EMGAX$yS zAYF~QAX|;RAYTo?5V9I_A#_!CA#9ag2w&a25V5*`A#&A!ajc}`;y7DzapFY9#mT)D z7pHP6E>5RZT%3unxHv1XxHz|7adF;XcG2m#TwL($F1q}}#YI1TamoM8MYsR-MUVgZ z#by8Di(dbMi$4Fpi!1)!7gzoH7ybUci);Sui|hW3iyQvbi<|!BivfSaMdFXWDDg*M zl=>qs%KV`h<$n3a5Wneqpz%*Jzr5ZcgR*XpRccSW~izb;+QH| zn4)SiaJFh`{bZGU{b-eE{ZQ5N`u-~K`kpG^`p&AA_3c%w>p4~a^{lG3_4KOs^^~fO z^~9>p_4um5dQ25rkF1ichgV70L#kx!vMTwyq$*^6vnq6b{nFymW0#h87hQ5^9k}F4 z*n4R?eD@_U*>TCYk$Y)nBm2_oM#d%oM(U-tjpR$~8wr;-HexSrZbV-SY(!il8)26u z8}dui4e2G>2Dv2P*m!m|A>~vg;K+Llnfyie!1L4mG0-?{6fb3aGK=Q0K z5O^OU8$efq_Z=Ix;@yDfR9=RWpa)kmLw zVQ=1%qQi#|6rDJ5v?y;Ui6qo5WJ?`n2>D6@Ag5IXDy+I5Sgiv5c15g zIgj~bI4dF4tCyprB9CL?#FG_2`pp%WvBD{Tn&b?U9sM<^J~@Wvb8!0CoWgu?(ge1V zaeP1h+zwPrHCs9ZtAX`^oP>~2B0)nmfhdTD1QJXW{3K&3jii$dgjpnqWFzMB=Z`R- zO+J8h&m(R-`BT|$gnP(dl87|>NFiYmN`9F>n}j1ixaHty7dc2?dJ^|pgimYtG(1L5 zNqC9yB*)WSPq+P>;j6#g%Hx>FrTj#8oRn>q@U&F?NFARJtowoF3~399L`BrZh-JS- zL!Nz-)+T))c@FKV4!nh$J}s+S`kw5etVcF2^T|TwA@UEC$DfPjB6&CP?pDdcwBMJ# zpS(bRA`8};L5UySDz#b~u~kxp^gNay&p$5t<6EtNyyktfUC5^i1amJ2+5;~>snKQf zCnOQ;g2(Y;;1f^Q2Dk9Eq+q*)IUC5IBG!)*l(NrZ?uQT|{RsJQTX{@d-`>FINe|}! z5q{M(zOfY-EaP7#ngF3*zaAasN|*jmrc!CSv_vhfdfslKtsijwDmC|VJkiH(a-NK8sjNli=7$jr*#mXn*e zeMkPzUAqhR?A^D&@W8=CMTd_ZJ$C%W$y2A#oIQ8`nPLT{?g4#iO}Q_P8pimiG!4odzi~2)g+gkArEm1G2|IiKomHUm56C22XNwK z5rG7|ZZ3I0(Gnfe69ajkm{8X9SW`(Zp!-s!3h5Yx&m-LemfnvJ9_-k`G%t`3kUt`S zOg>0Hgl_y1@*+BzMDj86aq)Hhg*T-3K}>l3WS z2e#&dwW!+Kb`=R;QmRN8PWZ>E{sCbUiNp7gx8k;K#XX1RsI3&wBQA+>s9O@GK=6_i ztVI^Nj`}8Hi!Wfi&yjqxlk6h9u}9jU?7_mVJ#vUNlfy{)_|r)b;W_UH%5-6#9V zh<#-Kf5fSuza9&dp|=tPavCBe2PY_;cE zJH08{SPcOdYq_B`zoPuo+3_8cKcvBf}u zCH;hda?I64^UGuY+u9Q>{nw}9o_M_c0(sn?Kp@zjK%fe6BMdyZbxZ<*;PDEk47MQ{ zK5j!Gkc6eDZ3qPZ-?t$U_+M+o^INt0ZEbkp|82o9&x_yRkN)=^gW!4a>wPHLgMxi1 zfWgGmJ`~s*N(9$uZ5_+sb{+%*kFShR&jT9g0gKdsSlFe0$e-b!`wb$)aQ`Jdh?L+i^gZ(DTT9=^80QCDbAL}-Fhq?Z z%NXr^7DL#ZB0LRQH?A?BaSzmT7he`6>As`8oLod5yeI z-XL$1Xvy2;9r7-@yj9{=Z23!Mn9N}8^kwpWjDzHoui)PNZSo!R3hEmi$1vnC$X}ud z1&_(!lE1@PCb(_&*4;#lhoZ12%zj{4^(d;H<=ta$ML{_EA= zN{Eg^Fus4h1-|H~&Q>aTkE@2+sLVvl?F{|6Nw>wjEf55kbv#})q4z<<5MQ>b(-1fPk5)Bm1Vd1yx91!>_g8FWj;QtidFe5-DySQW?HOLn1=(MZ#q=86xnSN-B|I zgtIjvnM5W>%x_NEsgGZy$%9j9IMQs*VWkX({Q4x7Nw6i1+9W6!5nHoJgb`HmRvVoD z=#M}6!4H4vBOiJ3#XouR$@I}+__2?D{1cz}FB8W&_DhNk%xqZM@8f1Vp8zcBHk?K z{->9UYKyhBti19<)w3Ub@uio)_@ys@<(2op^wOWa|7%sj=>y;XPB3^W_*GT)N^l1z zz4A)J%OBbHq339p7etj>qt)qyuOTf~o83`@R7~ZC@4o!%pFQ_nQd(B-r#}7Jm%sh; zORv28>ML2fFTeWg^Upnx@0XKae*XFQaW8-Vmq+CBOj0mF^b0io+-F`uT1+4KPVoEr z=RZn6|NP4zemVI4>Gyy2r59h!dhz*}U;GG{l<-2;cfa>s^5>p?{tNW;FMR){7eDs$ z%L!lq#y6jjO?==uzxC(zi(leC^2wy!KYc#oo7}S>3I1G$khk7X$j^5XvKK#A zIralWUjG|HzWWb^ydUA_-xEUpkdTZ2jgWu&Yg`Tf0%s}Kedg~7VX@AEby2|(sxaS* zd}lEK0nD3_KNID}{|FZZtP`>PImCYp<-Lsj_ptm0tp7REYLUi*c@yS8fp`_>?bz0b zkUj=wd=2Y9jJS^@{2$_FpP9RL-+%@4mA)C_n-o8Yec!@z+<~_W8HqVGZ|qt=;3uZ3n$@+upWoH zQiS{v_xWSz2zf4ALcWdp@8crpTO;JvS+onwJxJ4va021KA-s<;s+*9G3jBnuk`On_ znStJXLf);#Pv)*8{|PLkoWH^7VXc^uA6+0M9fSQrjNm?IPp4@A2q z$0bUMN@A5vN~D4tU=Zx>y-`3#$|J|d6`qTC|i;(%T{Gk@^pEYJXd}|UL-#$KOA^uZ zDj&xMAO6gk|4W=W!MwrI{Sl;(KZE-s=7W!fmNWPYZduaQ+|t_C-qG3BEkh^o!pZO| zI(jJT_8ElV-HnSx6(QHf#~tlcDQLC_9Vg-AIF&+?Vi!!}v=p$lA7Gsyr&e$Z#{V5I zA4}IZ;|hZ2)~JZf8UGC81l6t{5kS{|63RYq2Bd~ z`|qgtzx@dzsmS*Uq%TB17GVzJ{`MOFB`^=U#B*v{Jsk6=4`wBrSA zCk|mbw(}jd|F4nnB(^bxe7DgqE%NR9Q`}OJZyEKoB46h^A>Rn*+aTmq$frWPzKeVf zs9!ho{T<>tAK zvVtruvdG{XJZSI`9D;jr3j}v}cY=HVRhRGgaZa80mfid2y?eXsc6Im6a9o=j*|V+T zxShQ3j~o|TG<&urj`Mt;En9z%tH@&)j@xvN+Xu%z=W!y(HN4K(c}yDRoFrbPZ3U7J zIqpjJ?AeZSTn=7$7sti(=c+3?pFG~;xbi$ka{b*ne}8iQr_j#c^BER#&N@7y{qp}$ z@OoZ+-t4rgfW=$`UT-{qKEUgx`De>ko7elbTJ~%Yc)ct9T?yV}9RIc<@2w)oRy)SO z+sUze=}moTTU?jp-8gTnN!$F{Zz<>H6RBP6$!m?{Tsv}HUCv1>-p_ij=S{BHDvtB# zI!)!h<>S$t_Z`l$^LgJZcs%}yHaMBvEA93Q$1LRYf97#3?mGN8$p4XeeHRN>)jOG2(j$=2{=XjmLJTBmMmht#2uXBmV!@N$>O$;Ojl+ zd=KTgnM(+cOX2Ysj`OXYJ=-3R8_nY?jtk~hD?)cFTIqnMAeHLG@IQ?%V z$5rh?-{E~vA)oZ-eLL{jpV#Tfzdyk1T;aU6;dR#Y=*{a?A`i9Yb?$S$d-FQe_;VVs z;t`n~_gvUy}PJcdcGOzQU^Ta(o+XWs=^E$utb@TB$sXSVFopSWAR=mz> z{v5+`>p1VrIBrw|ZI+N9hG{- z|NA+6wlJ<^ZQAK1Ugtl~(-K~%3ZG{tuk(n%Kf&uP<8eE$6U*aPzWzS0Uv`d5%H->C zT*NWjHOJNGu{Xz^=l`$bxWYYYUmWMfV`2JhDxZg+iIS}z*Rdl1_6+^mi~c%+>wl8> zmW#gXL;UJTJ6%dY;ymBu?^g49N77%XKgpJ@`cZ~sS9pEi!?gg~2gj|y%xlob_wx5i ze9pq%X-|C4{G6{mSSC^Y49mohbeszLE1tKj_EnY~V9p zIMc-+BpuXqpXobSdfdGB0r z7ar?yTzNjfmE)f9KALb`5PweQxbZxObKHqlv~!Nz&3&q{?vr!SkK-0!=YGL)y?7kT zakgvZEsnGBxQOE-xfU1cr%$*)$J2(o^e4A)T(v#4RgQD#aRv}w}@ORKg*^px&+=GO+* zLt7!-tvlwYx54}gtq}BI2K+~~L4|{@;I}CQx#zdRj4!R=m7alZTic*Sv(|8}nt{$| z+F)WzYdBr(hRV;{pwN7NCD8b8IGfuJqtCa7Lx*k{S=kP`3bjG&PhDYWXNSS<+o0K+ zu6XWmhp$;}&?u=Z7Id~l)|xh`TcIlgM%v-+{Whq1x(o6wutP>gJ5(Lj1>3jTnK2bD zUC`yM9a6{Gq3oN^sPfzn_jlW&`|~(XV}}@BP_ul zd5)&zMSwld|7MRIL(=hk7kl`fvd8yU=?ENUkK=h9@ab6^^8RiQcZ&nwElk5-+wE~E z(*dtS)6n&tJ=(8uz_TK0sQSVlyKXt)(ScN)&+7pDGLE?0FBPM!I$*PxBW^ZHg@c0w znhkfv)dwkf8R&r3+Z}OXP6`%wbwK@p9dX7#1wo@7u(Y-X$MdBi-$DmekG9~*u1?tT zmjmWcwcudSPUv>t0Tqr~u%})pRD0=w8QHDaaVr@Y@;RbJ8!NU)G)ru8clki73N8~CFEa{qr;4zLE>%8GOD%3q^}9MnBRhDp=~j4eFA=|Zb8b#wiuO? z0Dd7J?jLN6VLvC}-(U;k`0Y&t&&6X=h6UG~wL`yO;t}$T1!1Y}(7SCs3M{hV{QP$4 z{yq-7c3R+fp&h!cibMB{oR327ks2R|8vk10)}cKT%f{hS0e;5G(8}bwI$Y7%c8?#pZwx@Lm#w(6LrD`=tZiBV)|mtlrZB z9gD|c_bw~yedvI8hojNsk`+rDI>9n98Z}>AQ9aQKZCXU*azSAJEGM*h5`}R!feNRc z&}2ar^lwJqj;J3Tg*Tx<32R5xE)<0&J%EWl`OQrGA`vzYD7cc}+LRTELQ8;AxA~1u zjUusUH;}8WGfLfyK;~s&u(vac&5A&+H^A57&M4#?fh+umtgOGBkuOgK#@A|#xBogL z*N$+sZQB+ZbzJaY_i(%oYl~;mF8ESA97{9XB4wHjK3oq&`1rQCchm*1r-Y&K(zb}p z;ffb-Vc5He-=fvV6_5W5Mb9g35!THW_cw*2_FI1Y)?!!OP7lS^!tLP44?De9H53zS zx8t{Vx#7~q5PmmKJGi;I;q3SjybEuKgM-{~vO@@#^=yaso855qQ!pYXw8O4vZaB0i z7)6$~gMD>(>`My9zP;_RIm{iqDg>j~)plq$$sOBH2cgcpc36GL9h*i4;aZXQsQ1ks zYb`;TSf@RfH21)&H-Tv1zCEg?d0^S{K)jD=kNFEc@JCD_miKCp3Ku;vzf>S1C$`6o z!k(CQGyp#>Z;ujAo|rx)0Q>i~$Hab~__cKadh=Vq3a<0S_~-tp`@TI!J@mwwKm2k1 zCw_z1&t4c2=8s8rJ79327Y6_2j}9F=;Oj457;w-JA0j&-Yp)mj^!LMx-W~AvgBLQJ z`XOpk2V^wzMz@E)D7vBpo+WxCZLTj4?C*e-+1^MF@I{~N9dPfoH{$a98e5Ca=Yy!- zKDbfT3D>PY2!tt`caPjg+ z^kgTv`S_wkPHz-j>4bwLd|}<@g@Xs2&~Aq>?7Mj(>xL6{zV=0{nqH{?(Fyi-{m}HP zCvFz&h|Mv6XgHbkQokdbP4`0`7f*ET*b%Fb`Ju))4}6O5h>J+yY7!7W8KmBW=G5@5r6{i+|l4uN0e|6 zK<*E2xK-R469)$%`=4%@(!d!7w*=r@yc?XIoiXZp06vy=!{-=hPdEqt zToBej7zY+~MBG#toL?7=-N7AEaB7WmS>;#{#gDHL<^ zbikVau4pzV6f<|UNBlHbtUeQpDLvYw)EZaR%O7TZ;>clFEI}B?@|)}i+;K&<-eDLy zwH+FNb;Z0@VHoPpZ^J9)hVpmAV9VAH(;K^CM!9hG-Q3prZVBIT^y=K!%=^TV;fB-K z4sb)ko#E(w2}qdkhEZ?A(P;uudaWCB){8)b6Tijph#LmQMj+<16}G!>_%b~L;cKmE z^34r>jz=Ik*@}Cm-SIYOB>XE{F{6n)GVCMab;bgBcXvF?h=ki{3%)0~BV}nMoU9hC zv$^Bm^+>dR>xje|?uacJ1;-VRD6`HT*W9DfI@S?K|8Ym?kSH`S?TCT*+;M(O6dE0K zK-2H;@Ou%3dP5y>zl;Zt*N8@~HV&BC)B|o2(Pn@4@bJLF$UU=3!0b9Q{M}>`ENcl4X8#gq^iQ`_lcQ*l@jyK2R zXI?0LFahNsHphU1-e|QX!NjQn^~gJ;5-_BE3)FM-HhX@H7A=q?#T#qg67a~Y1ul>D z#^rhmnBA!b)-Lu&jzS6W9?}A%4tS&f^LS*R-2%~fy%BIC-e`rEIeai+O}x!gDrQ(fNX#1Csi6f*H%3kro ztc!6*E4=*ZgZ*3Mj8-^Q#uv|ii!)kbZYy7u>K|vcLeC&_XJnkw3LZUuk!*=GTA|t$ zUrhWt&S-_t>wK~GzgVLcPM`9{?OU-%D=d5Iivs&%jaC>`#1GB?h&5UvxS^kkO{5hX zdir5_QmoMmxzqjdr*o{)3fIQ?;X>_LqZKwR^TU7nVvSb#~jOD@+^gk4jBrj8^D8-`~VL z(h41R`J?NbXrmRx*)z^X8?EsAi$C^kiZ)u|NcjLfo*r$q!UDSh6wit_TA@#9035=i zjaKmP6MzK!XrmQsO%K4h3eiR@eA^g+O<$voRycPy05`5j8LhDLbpZ12jxt(dXt6*O zLrE)yH3>96F0IhSClEv8ql{L_*EJ9;Iz*Yc|K_+roUIXMw8G||jaDd8I|%cCi8NZ_Nyi`@PLDKNVQ*p({`HJBT4Cm} zAQP8KD|A~Jg!Vs08m-{GHwfvkB8*n}`Bo67o{lhD;obKj>|7sVw8F7U!FVtw!f1s* z9E0&wuLz?R`b7kzb#R2?BENpYh;1EVv_jqAf-$CSgwYDwwgzMUr*NYcE?x-6)hppY zw8Fb!6YEJUj3^m`hI7M>R)}mKf}nxnMk_S;55d5gaHACpb`QbQw&6xA+?g1HQ&q!_ zR@k;W1fOz*8?7+ucnGT93o}}w)3Xq`9}F{E!CEjBnM=ZqRw!MMd(o&cqZOXJhT>pK zn9&LcI)$3}QCea4$WWB2A7->dkHrjp3xyf2;C3JsDbGWVR;YS66q8Sc8m;g#dl4Nd%H=QB; z(0G0%h7}JoS|QJ_NE16tD_p-8iSy?eQ&B5y{1S=pn*xni7+XFHwPyqxtq^Y)1)r=y zqZRB!qmUIAXtYAHK2iAHKG0}|N7JJ4PlZ6E6?Si==J^_6w8HeWQK)z$z-WaoucP3! zJHTiKr()6QvLL`{g^Eq0O*}5G@WwkDyW<0lR`{n&G#+&bFk0dFanUGNGr(wttd-HQ z%M)O` zF2thT)gM|R<6W$Y)uk0&O2!%8Agxfjc^sw;{Gk=z`^8~LjIYrO$1~z^zpby)3X3Mj zp-44fqZRtEjzg=QzD6tfACE)KJs+bL>OG6Y=z~5+D`YPik9A9Yj8?c*Hy&3;`53LR z#x))}Q+F@HSdu zd-eo;T;pxD!sIFms505xXoVCcz^#Y3(F$#&6VM~T+h~O{HpU1oyp2|PF*^YVN_iWt zaBzD9p1=1pT4B!R1eCtyWwb)(#{{Eqq!rxDB$_xzTA^C2L`>@MWwgSlz(j0|^fFrE zRAwUXSiFo@So&)s3Rd5kLhmohaMQlC2}5_g8Lg1F zSPE7ya5GxrM&lHm8{%fP!Y1z&qcNlv#&t6_O{W!=swB(F)ep z>FAl$*=U7Q$I~(QUPq%9o;^)B{^Whr)8sc7-S3E#|9Yb8igXOk?F`>sUT_$bj<}l6 zI9=Kc!71rLM`!rgr6zDmN2Mfwk(PrO#@0$Vd8a^cFD%ZTjw_3taUs?Vd+w!S>j7tk zWP0Js{xr4lieX?QWr1yOgrpgBMOhYP>S-3wE%r()%P7sTZC#_AoZ7;~3;y_`3W%uYp0PFKV? z@HTl>=jyJwYxTzWuvFCOKpXJ$Mp?U5{@AH}-k{a7Dd&EE-!2D>9`o)6wVO2*;^ z?)bFU2SpDjW7r;d^xN-)dP|cLcgr1L&ikO_$Yiw5=79l^d=QhAjGwD`;M->(^m9ta zS9oAxVPA+_uEu!azskNQ7rbqd2L?Cu#gW@dm@(f2**p5;-kv1%-tB>5A-?!NKM8?1 zJ&-HS7v%;e8T%bEz!%M!*iKzLVxwxW!$QzPq@^3#? z_cMGh-k#Lb500f0u_ww4#a#Um@-_kUY+m>^+z;K)CcrkA+}_2{aps zUH3w%U;VH*BLQW6?;9oHoTE2p9`QrbA_>?K>5cN&{ERl8 zJir^XU-+Tpv3PWwFD3j<{<^_6Z~R=#AJbBqzy9it`EC56J@jz} z>QWDX{8Kv~e>?c#_b7kd%M*{q5k4kg_TT+D4DauQKZg3F+`%}+&-OvhY5r)jC=SxD zOP2b>dsrMQU-d!l?fxeBt@T`X%pb$rF&|Lg7jbA(TL3Q$1ZCirmcyF{Y-zrFA!@cM5F9h>e7TjC|3M%(I4%42jZS*G|qqU z$G*{l_^*C6Hk1iKhuMKBS1{V-dJp^=X!7+LApz*PClKC8q9DC`=u99|mqnrBi~zXa z55%xhQ6>+0o zkne6J5`uZ{z#xoM%4#Y6OCUc#TIvc)vXYEqVpv(&r#kCn!FR zdZBPI>i3PntBs8RD+j|lGy*5j1tFr@53TvX3M*Q!=rp9o0LokH$e&N`AHW-PAg3+Q$ zI2OF&-(Cua&rjhPSRw?;PlJ*AA`H@~55EOt`0+6C0~nD~G{od4%Vmb(NwpAc8ykiX zzlI>aWeCouh2g^b5Il1UG5T`jnGkdd4?(`VVfghm|F3fhs^<$s_u`@GHYfy^hoSIk z7K&GsLlAl>6b=1D(S1<}q(h}8UvCb<_~D^=GMSq82sLp+C=Ra+#k;E^*w;Q3OHYTQ z_lpoy+Zge0C_ZHSfrMgV$SM(vVz)xjzG)af)eJ?0-65#r7lwXqLg73w1m82l@Wnk8 zakda#pA?1xQK3dt{?pBT&FQ%-B|Lp9qYL4a19xLAcj70);cfjE>wl zftqtf7^-^*VZrJM{4_HR)`meCbRq(iR)it6P!OVCM4;HtFl0UrghP=?{CYAB%D1R~ zRpL&VsmFZuip12nVa5+HbcsZ%yy3XsDG-~+N1D9z2j@Uc`7;t_8-$~Htw3}?PFuHz zqd{)^$MZ;IQ!e)c(5P?}W+#LrZhrs@HKd;G9gYDD1Mt){3Ufz?8|`?ca}<7_9d0;l z>9{D&|1%s%5rC1aqEKZ|I3D~QfW%|et7pQI?K`#LvnW)*A8zUrRSQL9(T8xf+~IHd zqGo{z_|9hS$0Hg`Dn=l!A2}&K8k#%Rfo6@3#jp+(dl`R(9F4|`8w1!A$OawM+*$vwL+ z^N`IV@nM`V_Pa5!=oE?Koqh3pYAozRBGJIZ7lX#cVtZ;NTMNK~lKI@Pi`bSN4H<#HPzj>ExfQKoiP_)#33TSl1}>uFx@i!M-H#bNPoHyiZc6i(x`YGog9Ui6}-`5X*@g^MIrweFI4?I9>+IF zp~e+2WP8ZHnY^yL*Nr?0ICVA3#G^ZEC79YkW*;xic22;VY|)qy%(yc-0Rbhrt}VR~ zGLmsX&1mo&F-(3ts7*AkzoBkBlzK1KkW@~CD zB5Y_hTrwEHbWFsRsmxFKc%pL>_2klM3~1yD_YsM>zAf6+B?`4E z?z!zE?!DDK&2!Z}$i2FWC-m$EAHnwJk1;`*Ss~t)6DZj2-<%nb23@=iCmh%oZ*l{& zuN7C~@pg=t;g*SC;*Fh%e|l9+z|JMiG5pCqnk50%HhDojrd-9y{a%LaY7R=klha;? z4+}0xfX^*2!uvV;Pfe3iJDZQ$|8MvwV{8#06DJ(VWN!)ek79}CQz@iOdk^?6$tNyHA8$%eD|tf zCzP1vV`8oIvpX4GqvawGKdfO))t$#iH5&NWtu4z9wFMxIe|{CB?MI?xi5Hk*|q+ z*XK^fVMoT-c79MELL963+2)dp$zjw;jIrZWQt_^nuZhE5$D|^>x37uS8?Im;Vz{r- zXC;oNLUkp@{2!mD8XYBFaHCKfp04pV+F^ggH2CgfU5WZ)xpx{i9;5Es;f)F1(oF79 zI;H2NG}s>d8m3XXbXRn z2l%+S3se_VuHgEiF7WX4H~ED954&J(jK9e_EX&swCA<2Yyu^gMU6D1w-{dYb-MgAx zvdM3xcSXD3sI`~_v5xC%bej5eYW&$11vXQoFqe}5L|1e@;BWFRFJE-U*)#qoCv)zn zZfJemANfai#P%lLFz2N|Je@mYzF#*JpG?Zr5hHqZLt-K7w?j@yo6-%cyOkd01mBI_ zjD8DuaYD=U-Hct&&Fh2;@4MlB#{k^=y92V7$v}8u0BVfxfCsHJOisO%YX=++%|P|; z0a%f*1J?D;!015%cyYKrrq9a2v+)6FI;K4a{FMQ}IRWVD#$JPK8AjJ_&EFm_-!f2c zTL8WsX@`bCcgMiL17Q879g3qn?wk)W{RJOmxh+Bn#{G)r|L{cECAGhM=vL0yOGZ4w+tvGk22WAXqebCE_?N54`-jL^o zt(adh6S4DITRdUGhz6OE4(vI>f;6v8)ZGz?E#4ORcFi<#?B^mDw49iU*OvleJ?V%F zYcmo2koCujj>vX8)9ABuR z(T8Vz9WbC*Pt(Ixs+a@fruRfCPinQ(_HfzK6Me&jFlVwo8eHm$8!17!>1U7PpL(Kw zpCD8(ZjTS;dSS_kAS9o$!*%;!C^$6;%YU`QzKC9?E~&oBWdnMd*uF^#JB**(3vG6@ zE_AjHGI#aDoZ~^*GNlbdZ}vj=YeA+r!J4hNsWn+jve&a}Z~XHy2t&@bM*jA_(I_wb zT&A|hi}>D{QYsjEgIeRhvv>5G}MAt*V!DSBk}#n-MO z2#IKl(BJwR4LG|(Q&_h5HT^y}t~NpSt9?!FvFe;A$oI7`CM*j9xk#7Tphjoee?bxs5SzP(M_;LmeB{7{eFz!|+!j*i@-8Qup@5qwlQY zUT*}SJN@8QI24Za8lgqb{#aKb6oaB0p?r=0P~CR_&yDb(Q-7mZ^W1ER`$_$A!#Nag z^Bdxyk^RvjC=}yk8e;9z{zey{s@xFM4)-_lLWx@q(Eo9NWDI8AbwLBf78rnY6GAa7 zwgH^$4}jg=P+YIl0QEfwVD8FLRJ~mv#kveIIyUk5`glKn0Fn<=U&qzQwbcV~^g<|} zR;`b{CkLSM{ZKTzQx8jD4ZsvON_JmZ595m2pt|s;_j| zR0mtj4n&1sVK|vs2lMO(V$iTKl&Dz;!@>vR-elIa@7G3Z|ABB_5Qg6t*M|3;f%tQE z7_KMPMvI*Tjqa^dt2WBr7>Hg+!;tWx7XJG_5UM*bT~Z6#+C8~jxZpp3Wgm=g#fRAo zeRd7vc}@r6#ehLrGTX^PNOaKu599w2bGZ6xAPQXk!$I)hI*@;JfPZtq;Yja+Xdipu zK|srax{jl;`Hc-bdX{h$8m_l-Y;{LrQHBknb}bx*3XN@gEk|MU^8spya}@He8o+BN zISPZ)24Ld8UXH^1IsT2mau6Z_-t;@SMa*^Z~H z_18V~b^ma5z1!7{Ma!^ zVHVxy?YDEhw{wm~L;IpayD#J_tmrWKJPnzKbM7+$Bj`2maG(Q&M@`*mkQ9rLm@EzZW&r;AL{O!>Pbt8YW2$lkUG=~;p<6*Y) zk1xZ&En}%asyCmpf<;)^u{Zkcs%#O;iRwCSwt9_v^_yakL1bc0EyiSX+y5@Q_P}bFIEygiX?Lx=MfkeB zJI-gNT7=A$?ws2$7U6NN?%?nAd%i}7Y(vj#x%dY|hpT-pf_Hod=iFuy4pzxP%{)Ua zg2T;jvLDX>Fw6S6-LUoN5f-6tWH+wGD6YjQ%YyRV;MsbNMJRK*t89$xGS)JFMpxYQ z8E+AC1$X5dP2{+Vmi{HXA~R(&?{Tu_^_ecRL(az(-7E48nZ~)F#xY&Eb~CtkGc3VH zx?t9CzgdLi$2!YaxsJ0fPGdWx;rh82VY^#ruIYTP>3ptPXYBpwcZ;y>P`d1y>-&eL z@(8y6-(74Grguo^S})~VFSQiPk&cI7mRp2jd(vd{yv8ca=YeVHUvf3?ceSOvC5<+) zmUFX~f0v3P4cBuW)?1>tr^+w5<{LHdSlDqh?Q1jVB9*qWmA0|fvj1HQT1IcT2zDD& z8=GMlx;e6xaV0pFfEug)_9Z zGnS*jC&^D~Z|7t~+)6Lfhc0rBlW2RFX?vF~jjt!-bhWD%Vae=7`7-VBx}{QhA`%^L zT7)TO6KRvTX_L1(ob3StcP+w@X$kUoUi&_OPGEWLA)n(R?J0q_`j~U}*mD0=JSvZP z%Jq55XJ&ig@V{JFrkXatp+CK`v>p>D-k?3d zlRx0{i4Ww7547Dl+V&^f_9x4n1F`7x@QXz#J}g$;LOcIv8PhHn+4%mdABd&RXSWJ{ zcE!NGP!6l`VnB@e$0{T`#9&Ib-qGSHtH4D^?WXyx z!sa(o^pX5lq2c-{bhi|+3X3wL#A8;0zK!i}g{;El=aKZC!d4;Qsz~GtE@Bl1rA3PC ztit;`k?@W$Y8ARXWO^~Bm{qvDI07@f7PkuFi4o#Mt8ltn1a9{$X%$>=GtE4tlvUU@ zKOFT(m9`2kqr=6SR$)~|whvD!YZaJ`I;51N>%4u zRgw2w(fa)y)Aj2s@mVWzd?@_4{>*v$+4{^cRNTusu567j%J#DZRjk706Cw23s#d|5 zZ#lSss+v{!+apB$Y!wvdHNIZMDr`I)Okb{P73z-)M&HM^tir;M!QybMP%c+6_P?uR z6(;TrqL0_L3VDXG#TG&j2)U-rV{F0opG(u7y=)JR4f_HCtM%u4PMS$5y=G zR$M24{O!@2&)S;f{k5lXp4wPPJZ0H3)Q)p(XZ^aIDd=c>u8%#}*bm`}4qRIYzP6wC z9omJXmHUTU>S$9I>%~7<`t5C{Jz8lWzIZVJv}N$VeYH1P1&5nHXg#K#RaiflsgjB9 ztwP;M9}Jn+!73~$&vNB#C#z8AvNw+Y-q9+I=UWtBEp@gExq`jb0%H~Wm-N;iXBA$b z@j~==H>;2`*-NEut8mlD3(F39ScTvsUfKt({}138jk7w9^(1$B>ow^Qp5VReez{Jb z+AH;}8V}Bq=E+)lgonzcnq&Hs2e>v`AFi>7_EW8`UK_Lt*@gA_W~=unIZqyMWwk75YAQ*8Xl4IM*PjTYtb= ztp*&|iM-dkz*vDcl|et`+ZdL2r#*I;eSk3vZMg^Uy8}5nlYWp% zuIvEDM)aYc^kKdwXJ0S+UoY7f7?aU=d-IvwldJpC@B5Hv+k>$nIU|ey-%c?J`KGVz z5{yB~RsA?$e7o4g{^Ys-`RUuK<;R(xP|;`lTCv$H@SHr=ejMqeK5IQXiJ+P z%-;_t??AB)uQ5daK>HuU*BQcf0y%#u?`0^*Tj>i!dA~!+SyshAe5PUYCHloMKKC%L zv6XwlaL&zezP5!vGMw`_oP1|djKnz}AwQ(QjNm$qpndRdaWzJAtw!>`9qBtGxt=4* zm5z#|xaOne!}Oz3w2M)+El2JhqiH*%`OFUVsnN8r(d1bN#agt%G4g-<*BILA7}})+ z_mp2~%fE2G?CER2(B6L`N82kNqfd+#chK*~(r?DnrtP`cjH7Rj<6PU(2glI|$C2Od z6tmGs$BTF9kK^f&9KD!IL-Vn`mRiD&8W)A_g4`8&Qn zdDL`XZ#wO=1$}=8Uvmb>w@{qP`9 zat_yj4t=R9Ib<$vWG?5WsbX5%(Om5-$WoV*!1*F*)aV`q1xOr^bqn>1V%dKO_Gvq%SVyS~lXI zyO936kp9oNbO-!FpZ{r(T_h2*70nm0#PcPU0O@3QJep^9Xug5)oCI4?Ff38QaTgh=N=@0c3 z&-2==wD*(uR`K;$(P!#%um6+x_$RMhmmK&fpW{#ZRb9pWeAd;98_0*NIUlR(dvzEC ztl^xk;r-PiH?HBluAzU{kuKoeuT{)Jo?OfISxX#=u8#rIJ$fX--cN@qTwWKd-n;RADkXJX-em9a+YBHAC zL>u44d9O*1-9$gwMBb?>4MJbptT>5$yP5v9ncP%^F~%19+!n514RY@m`sEh#R}JYD z`tDZ6SmfcY^zW_Yxay2Owvhw2(GIGUledv4wvh*`b9>uPF4?a5jQqTve6yWgS&cEt zU*x2}XiwG1)qjz<{vw}Nline>?NDq--rhm}+dp~UjCjNepVoGxRUS4A_|E@B*eJ@{U zFa4x4xqTn+WgoBgv$PfOcc0=>a{GQh(|*3*&*b*~eD3}9x1Y)F2RJtecu$q2zc_yf z6w8v^4|0wV^1dsP+YfRb4$^Nck=qY(tq$?oDoUeqJr5}kCb$31HUFE>Uy(yt3CCp}32J4VhbM{Yk(A3e@>Ek|xYPCq_Q zUMoj#KS5tV!L=_d%}72tp}3#iev+JVlJ-%S+U!%_#lU}BcT<5$L zBe!3t9bG3c6eG9apsn5D+!ZCa-=IC-Aa@j%rl!r_+}=3{WksVHhJnNa{C?n;vKGK5pw$-`s*EXSrKV-`t)6{ zcM)>?UHbi9@?8;f`#o~QJ=#QJa{E2<$31dlVd-~r%zfHTVRHL@^3Z+qW?^#s19H^^ z+EyWQ`vdaX19EF2X?$|tL)u>G-2RGl|BBC$m)!n}>+^~}oR{4GFW2y2K4)I#CAiN2($Djf+h5ZbUUM$;klSC= zUS5+6@{rr#(5BvSzVaw{LA!fHzQ{vve@okZ%Q?+WZhuSreM?TsO>Tcj8-K@n&#n9h z{ooyWCpWqMJ$>ap*CrRa{XPBZJ-I0tx%~ru?gQ5^mvSKV%MawQT;%qT^xcnKX z@_G5cATAIu2;vCwg&^(_j|k!v@rxj?5$_1%An}nPZW2!k;wmj|<{-@w*_d7w-$&1GFCq z+8eY_2--8We+b%3w66%-W3=B0+IzGQ3EGpiKMC5av~LO8!?d3X+S|0x3EK0t{|VX) zwJ!?VBeh=&+B>z63ffb(zY5xGweJergS8(E+MBgc3)-`_e+xhMa~*%|^V;tP?fr@a z1jPi34+O;uiW>yQ5Q--R#TJS)1jQVRKLo`hic18=D2i7E#V(3t1jRIpZv@3UihBgb zK#GS1#YT#g1jS5>p9IBHimL?0Sc8~l#g2+21;vz#F9pS#iaQ0xpo&KY#ioi=1;wn2Uj@aoifaYMxQcfL z#lDJz1;xaQj|Iibikk(+(2A!8#ny_m1;yNozXiqOipvGX=!(~WV2_F870WB8S9~uh z)>qswNCQX@2+{`934%0(^n)NRAzdLzV@PiZ(jL+wf;5Tri6E^a-6BZCNY4n;HqtqQ zG>`O;AT12*XmeQGmG^g~ZAT26gDoCSBuL{zx(y@Xxt@N!Rtt;It zNCQg`3)05Y$$~Vq^s^u>EnO{0V@q!f(%#bHf;74Gxgf1B-7ZMOOV10^_R{%+G{5w} zpj?3R0)lb`$`=UA9Vm|=D5s$Of}mW3@(zM>5Xwgg%1tOwAt+~|{Dq)ghVmMMavaKc z2+DmZ4z}DbFP+=cW9Ypj=oe^J0Q>WXhKb%AF~XCMc(-{FY6+?<2&yrt-XN&MMe3EvmZ+s==rpBd9i`I*p*3O>(koIX~(-s_O`<@u=P-RATK% zbs#}CA=QTj)rwR%5>!J{JxNe)Np&VcH7C`d1R5r}-IezBqfVuIm7v;{>R5tmTB>ge zs&z%P?j@)Orh1s5+L-EOf@)@}p9!j^sjeod#-@6kpxT@2aDr-bs?Q0k)v0bLsD`I{ zo}k*^cGmd>)%;Zd6I2UiZIJ$FKyK&TnhDhoRYw$5Q&fFX;C++Zy);hGOm6okxBsY5 zs!l1WW~ut6pjxKtnu2Pas&@*ieX0&Bs3xlVsGwS@>ZXEfsH&$5^apagFS+MO-BtBh zLA6-bWd+q}Rj(CPyHy=mP)%3$T|u>8)qMrkfK?9`R2x>ESWwMa^C|LA7($(FN7i zRbLlWYggS}Pz_%7ctN#!)#(M*>{Y)P7$=e2Lu6BmvB>QqeAXZJfAs+f>It~a{s4h- zA-O$N_NbVW+#bq#`q5vYJ_A8L2jAI$AgC8XeF=hk6x6REsCQx3Z|Z6I(brJ@D&HPQ zsMkS#4}y9i)DI!3H$r_9f_f&@KOv}>LVXp2dMwm$A*lC4eHemzGSr_Ts8>UM8-jW` z)XyQPw?lm%f_gsG{~@RsM13KGdPLMOBB*yneI$ZsMmxyEWamrIXwP|u3`R|NI4sINs(kBjh)3IkDwkP^#ci&*&C!jAwfMu z>K_u+OQgOcK|Mz5Hxj7LO&^kak<^o<{v<)YO5|4YE9dmO>1R?;lX{!f=On1-N&Qa( zFJk(l)EmVdwCR^p&y;$n)JG+#r%L@*f_kmgcO|F?OZ`}adb8B0C8%dh{ab>1xzyJs zP=A?zFZFz>_e*_Xf_lQ#A0|)}nZ7agjtycDnfl2D^_Hp6Oi<66`p*RQqNy)UP>-7W z)dcmfsgF%iPn-JN1ogV9?@dq-ociGe^~R}BPEgOB`sW1o(y6abP>-GZ?F9ASsSi(3 zPoDbo1oi5vZ%-Pc1qJmEs*g}mPoeq?1@#)L z?@&+=qWTd9^(LxMQBcpK`WFSpNT#omd%ofy)9|%t`byPX%Kgjqo2uuOdz0xyRWB;{9n+tx9#!rsrf-$; zk@gGI&#InQ?gggLRlTm{dDH)@9$0d?>5JvFik~g&mlepprjJ&=wB%LOU#lKla;E9K zRqrkN(DdV~Czo7j`gGN+OCB@*yXxU3N147}#&qHzi~4;9a*OE$RxdDl!}JHMN0^*o z`i9jzOn*21#Of)gFPlDN^%~PpP5-fakm-YtTr;hk{LAz!t7n9u&n9 z)uYWdHGSLa-R63kes1-2b1h7tw|c!f&!+!dJ>Z-}(-%$~)ciQAUtHj`n?7>&lJmJt zf4O?hdC#WrT)pSKAJdPno^-yJ=~Gv)I^A z6W;LrHUk}Db`Kk}tsY>|A=8GRy9_XR%5zJD0S3Rar9a|ne*^noHuPK3-{208fnAS61@zb@qELXo(5A#*>HMtPXou%HoWrf zX>gb4MT+(`7(2#>h9@%(n*U;h=Y&jyt320Rq=cbk`BsZUnFjU7*|79z4}&v2KlDov zgMQ;}xaZcxpxOi*a^~-0aD?Yo4|g}{KGBA@qq-ZEn`A?bb9aNiJh$cUZjdtB#`qw^ zpy;nQY#)|ku$AYR+h-WWPO;%b_6&o3Q*9`{x0}Hlp0^m>%^-wt4+%gwga3Hm<9k4Crd`p6ACMx*E)zX~VP6T@0Lmqpxl6V(^^jb^CTPm^RA>mo{At zEVFG${?OUrKF>#N?rboAjtzhG>TJ+rF8!lLXM<}zzx5{FVE8;6{#&1J&|tm|m3r_a zn257HcWlbHUlRQn*bx3I&7k`4HuPPSW^k0}GrOi4WG=K}Gv6jEl>dW1@{IdAv5)6( zR;C)HEwZ6_dg>1>wxLPARD*3i_j#OR5VypJF3VC3@-MYvT&EO+bv$2Liy!Spgf6q; z$o){?7#y2y@RH~A zD<>Pw_>(?zBgw$J+JZLTI7+~9fetVDwm>$p>e z@$K@2c=CVo-Fcp`XUr$qHqb|=Cm7V&Xv52(1cPHdFH$POpywtV8t`N5g^HVP@R$;B zu%G9t{1{pxeTxmFi^Ut1*lNR)Q*j1=@%$h^nomgBMj!F!NBj~6w%d?{Z<@qF9p7=zz;*>K4v#=vzqeI!qe z!7HAZIuva%a}RxFM6^NMy?m>b6XSj25zo8lj5e6K&&Ite%Aoar8&(gAGPud}V{M}h zMjf!>>3@+1jSkXBc1Idq;CY>akp=?~(MK%&$O)p>-!>%iqilo|JRkm7gh8*vHZ1HH zVNmG^-|A%-VQ`S=H$R3Obos}I?_0tRN*<+;^a(fE!E*I&MSO zMt*z?v4Q6^_z@>U#0h5AoAE7XM9z~ooclM_U?tCAujNO@5CNxbD3-yGeIY*cyh-Cw zgN3JU@O}|u;C_Za@+Uu*hIq~Mv7PymqQq}!ZCFu1#Gu_d8$UW+A0Hl!$2@{gBS}F9mv}y}Mv%dv%Qo!18)#7b ziVas61{$2?`RBMmgFaVnC|fnq;OA>Lw7wN!aERx@^8*aJUbmrVG~f11l)gb9sT5$a zi|6aE`5PqNwBZy#8bv64i*L0H=Ub$SO*}7Lp8rQg-L|1VKk7-yb;kzxnSKVVc%B;K zXApST#@N-*;49CUocA?YbkD}Oobn^`36J|W+~r5)3vYOyy@ap9><2bfIm3_CB04;z zk4*M4c*652Uw(W(@#`b{$WQ$EXu|%n4YT-Bl)@dJZ{tTI2xFeuaM9D-py^W^-t*(E zh08oIdDP2b$TJ(7^JD&ny3gq&Ze9kbc%H$Jrx3DU&`18}$MX?YUfS>{KO#do%=2R% zJq^0Ovf)WCPlGc5+K~T%hrw>1*B<6!(CM`e&h0%6ioBtZWcM&oEcd^hS@c`_$RKxv zJnwASW97#n603QBlOLfd1iiQ6+YYxM;CV%UETgdagAMi$ZU$Z-Z3z49YVellS=(F< z=6teYdX}q!(`WifYgdD3JU{!M`9xys7y8I1etiVt@YRN*{3t}>F3%gca4{JB%?7VG z&IZlD+tB&{*n7+8sJ5-`8+X?jaUrfGBQosw25%c`iD)LLRuPKA|oYspF00k2z0Qp>CSQ*5myh80xK)muppu%2(HLeU>6Q#d^n7o(C{#jZ|Fksz{6)tN2n!ksM;(-~!JZm^cF! z9+PyEx`ryccGgLDvQDn4lk_)IG4YJQq^hyXKZoQm*}(dAdw)rYiHet1{Uv3ZsHk$% zPqLD=-Dp2au&IjHZTuwPSP$fDeFO{4R17=nD`{h{V$ld+$vf8j1AQekEL7Yr=PMyg z6@Lykmpo-{Je03AVkTOt@N3ar(#%>#$Uh&+9oE_Vd?X`nR7@}QkvQ9`*rM~1TxEUf zm$#(APQ`~^-V*DkD(d8UOU|%%@%5Hu*sJLDoqw92F?LWnZ{Vw$n8U2cW;K(?PU7`pIT5$pB{+71F&V)m-?Dcz8)Rv2OXnQ_|O!&&UQ(Nm(})YO<$f z73+B}o|3NaDt5o|ko;hMYpsW5p@)j^@g9=4o+|&mw}<3CYwwrtl389Vdho1KAnMKk z%^{z$o?_=NndGfv!&5hjkB^FT%iJXQSic$QCK=USMRjX8iHolahexiGYpmNXc9p1p zDx&+lN^Jc3jF`Jh&az&5&qb1{Q*n5{i=>I7;z5{;ns`ALPegTv!r@UJ|j1rB%4`ppXnqC4N!5dmy@J?po-58og}MS*T3p0>DEex z`!q+%Pu5+!J4zO}7In9yq>!!lM#ZUM2T9AeDqhrb_&-=zK4&kP z+)jn<1ba#I_9|L+CiNsh73I&3RR>dI$in60E?Hx-*(+Di7a zzEs9mGN`+X_xo)mHG8P2t=UMnvUVmLNxz;dI{vYiROqGhjKNy6mi3r?Ye|pZd`A4N zCBIl7`(Y(n62fO>hn1v59~I?utR$aUTl!c@=Jr+5;;W@3AXG)fR!hlC)@p{OWNJSZ zC7zZNzc4-{A1x#gSl`@eAsG|SXC%c!;vS)*k(-6&ChKPJ%q2r2Rdio(E@|3dMOvb{ z8PJlN@LLI@U~*Jdn?by_ux(AQkq{O(pwTw_RZ>;XBT` zr)(;z6|G{Vjj3cC>!pu*mxl?DQMo2;BB>b5XJkMV$vW2mESgAq#_<_>U?Ta$TDQVB=Ja7G5(sN?0>smDcLH9o^LEM$WgIiVq?hx*84g&mc-=p8L81&QYTNv zuhWer+gTfpYb1%tSJAwEBT3}~J|k5dNlIB~o@glPRj6WGQA5dJ)|-MFN|viC|D;?) zNoS4E$dLw;udHj0Xdsz4gwIG|14-+lDms*FAbG<&?qGe%^kFJS52-KF4Og)O^(Bv4 zAN^ZTGJXXAy_$WRjzv@aHi&UNm)RkOjU6@-}l0RC- z+~##9mSa@x`c_ABiuH|cbtGwHReZ~=BQYAsXQWvj$wAg$pKD8E$MYH4Tw79if{N6% z+LE2DC%e~{^q;6={rg&yDw9;4Ev+Tl!1`5EElJ2^?rpm8{v}gp3ZIcTH6<%pw^>_L z5J`hIi`$&BeL{@T`%&rGU zWvyFQT{2;&%KhK!l4i5`j968d++jWQVKvFf*($azswQ!oqvA?rwf}?lC$nmjg1P*Y zBloIGtV>k5&95ps%{n-&sw91$ibRvD665)NM*gcJIm~+XoGOy|1u9PVsUoSjP{lKY zDw18SE8VCp8L&u&^~}nWYKv6__Npw|$a+A-%91`yR1CRNNm6zxpONB9l2xqtcB>@m zx=iJKw36gI>z@}YN)|3xVK}*>r0oh7KEV|w?^*Y%RZ%i?C7+SA6(m@tqIf*-M>Ee@ zZ|YD%GHJDn3)Lz}yw|9Bce1?XF6)|O%1cJARpHdOyu@XliuRSuORlkwJyuRqxSr3* z$Z`^!QtpknDknM1`e^xblFSV%9vvzxG1;i1+_18eBdpC^mX#!I;y!zsvXTayRldTl zjARe%0=0}JY73tcrHrKdR`<{*hoa>(cChBnaKcxzLxtBq+C?^Ph~rBv{Ql`r{uG zh`#;*_T_)Fe(?4;2^Q^SU!C}y1nqXQe}46g1Rq$>iv2}`*}K^fKl@37mU}oq8T^w3 z&sleQ{DTCO_i`RG;0Fns?_oMgrFZ>@!2Zk>EP(eK)_7 zKs(63vG-RJ*d5}W;o27xoMWBU;|oa+b8c|yGYL$Ou&?X#nFPmJJD>kVg2bcj(>i@3 zLBnJ0$4-AF!Cuyn+kGU#pyTYXPJAFijT0QlgFcX83+s|2?|Db`J@q@u@jBo=2`Zdo z|8wvi3D&aij&~$E&3!ZB{?GZHkt%5lx=83``199hHP4Pn#Y-2sT z?n4rU-RAQ$=>Z8U-r+M+>j4SYvBvoOB2sG=jeMRSbC4+LZy2o=y;!F z!N|KL_{=)B{9O{1JYb(c^bQFEAF`kScbg=vo2s`-Q2a>cp5lKb@PDjwAMrmDJY;?E z`z;cTeZsyv`xXg2p0a=ba+3tNSkFwqNrGX|*bjfWK?3{d?0Zvgkl-Tg&Tp@iAoqpJ zeZK3wXLX${UUKi^@x>lCBXsKdmmjPLG&B;js35X zp!Qq#hxad&U_0xK@XI8Kc*nhk+m}dC`91d&`d%Wzde)9NFOs0w2li>bFOuLd>*ZH3 zkmMu#uI?8|(CHKVt4rre@P&0)m-8f;_gUrM*g3Y}bJY3^*ZUpMk>CyM2B*)GVA@xe z`(9^Bp!=qBuj>p69|hZ-poD{DAhFX$L!-hw0-o1^^U1~NidEC7-?x%rKtqjt7+XnDwUNes zi!CJB$ht!M783MntZ{#0GYQHXXxx+7OoElHcfZ+0f-Z&{_Z~Kpgthm}jU-rTq;a2N zBk#p+q_)Ny_Z2pf;2rBX12>RhrisS=gHjTpiN-yHQW894z4YFC_C4!qqN&Ecf%PQt zHq*Etu#NDQ3J#!BNlel-cs zvOX2Ongkiv8rSQqNMK^4agDx;1V>m8JGGJo3AP&7;wwo|-%jKDdj$!0v-WMhf&@`b zHLkOllc2i2#9>>w-JCS8kC%|( z2Wv~8B_vqntZ^N@m;~)yG_HLYli&mEn;RFAV3w=KHSQu3v~bh7u3boi=d7nVEhNEY zca7`U1te(hp>fT+fZy)|y2rZhiuoic^3=FColgQ+FOBQbc_g^b`k%!-5~$5It~*Oe zVC$`Mtyw~XbF8Cu5leXhXhAiCpDf!f<#}9>&4k5Xy~VLjX0YG zds*8|okaq%|M0)xb*Q1!xc-|-f-S7?)R@UslkGkzh#+jcc`OBxv7Kk~(T! z(~KoSqfQ#vF=I)vk9FO9V@NQ#v&Qwx7!uS9*0@F)O@ghgPxcv2g0LsSxDGKzDbQPiWG#&yOh68vWU^TJ3HEbXpwJu#959eZe8LyRE7C)S%fj3B|> zo*LH*!$}a>OXK=rI0;^{jy*Pv1jW612d33968ME^ocj+Y!9&*OEr*g|Y#)tt{2?Up z=&NyFKZFD~S(j#OoX=~V6SM!xP&tQJc|VwaPD&x~WERpz*1QA5xq1QRhG}BAh4b@# zG7o2eGB}TO@;o}hn)gyT56`8P2=*HhIh=dvkU^v-c1ifp&ZhmWfA!Ad96O8s8vBGE znVeT=Qtbik2fAc%E}cQ!S@Z4&=g;XB9;J!B49=O;sM0__<3XvMC#TYS*1S`}xp4~h z8pLNA$!x#L^p`d7LU0b8M9T(iV#k5=-bCsY&F9oBfpgsi`ofxb6F9$(r+G1&*gN2y zHjY}wYMjT$avmE?uUYfH0OzhTG%b$LnpHIW$Y|2V^Z7CxOoB(Od5+I{=^)OlG%=&+ zTy!9LCi2;77{&Q#6#d7VXX~7E4xr&lnwXh$p4p!qk~J|8=iD-qF0tl$H^<=!%1dGU zFCWf1WH?!-vd#bN$9ZEvI?0;n&zviU^4ZYDY?<@JzGRrr_WY#}=Y)OeAZwlra~>E% zu^F0}_j2yno9bk0VwTJKUN73gnrF3~qJvmS7LMw9Ft}X?0ZWc_P^EA%KI&(hOnZB~-StRFRooIf( zCT5JBcXgzo0!_>hIoImIJGh#d4~o5dj?J2w`*BXyjucfBGd<3u+R_u&Jg?*2sSQog zG%<_gd?|>$hKL-gHRnjJ={9Sgqj6r;ibf0-xlkbILV@HoOyoZSoc{#S71li4;+&@? z=Pf!q#F}S7oU8a# zT#?96{5U`Hqk5x7PU6csi7(d%A`fZKc}R2WKStypKK%K7sOngeZ+LUQ;Y}M^^Q?q( zjAqnloX9J@IIr-cGUG)q;mNs#C#_`7^9#-&JoxYbh@8P){5>i9&YI^AoF}-ke;2ud zE1w}(YBNdX1N=K~%sbXR3*a2UnPyHFao>sKz7t`Ji1m&f>mBJSYwpi;e0QLUQ$`hu*X1z8}Y_+B9p4h)uOPHr1jQOGP}Y$?>Qr*S8`D)!-OZgC;E#ai==R zo$BPXT*R7c9BZo4J=WYGjQidKl2QiWqm6>?oE;z(tVBbDhIYwlTb?5ITQDiJR# za=fTWwyQ;qsK7Cz0_P|qE|llEP@Xc^h*(gLV?jA;vR3&2vh4rM(oxpj+hLzyh7#8a zKmSh=G*~Zu`yWNHhc)+F6v4n!;lqC@f*Koy-~Ofuwy@^@haw2wDE#v$MNoc|@W~$( z!5Y@wlTaj^h3|c%2!68WUV-4#V}gEiNtia^^V zeA)#?V7FKJv2%*xJZr8O6@l0z75nW1v;D$HolpeFSaS`h2$BxS8cpFEO=)yc)?W(O zU&=n#TvsWAL5F1Bq;TD&)I2O}B86)rWh-m0breC^5n0P9T+1jGkIFhl;W|ZG%bM#C zMbP7ztS=O2N~k{0is%$|u&G%PWGpCuOd#aIUTdo|1XE z!g;vzk~QboieTz#nLjI>KP!G`WNxf*Zmc|H%{i|k7<*Rcv_Q|1zE!^z4Y)|?}--Nq}+Zpj>gZ8ciy^q-9HY@boe z7uFoN*(M{DlG`#avmN$TTHTQ`mu;_?@|rcrQnt5l%Cx&OR{8PxF^)U|#u&zFwRm+lQ~ zJ~ukS^bhh}==fadl#kNpb!_vxC#>0)b%ODqq^;`MR&`#Vr5)+UH&)uO!>Wa(^-9&&x_wrfbKMFeh&N|JalP4o?u?o9o?u? zo9_Becm1Zj+*s9by6ZRH^_%YcP51vto9-L_)UH12M*08!q`Us#|Nqb1>%R;AccHfd zy$$GXKyL$j8_?T;-UjqGptk|N4d`t^Zv%Q8(A$9C2J|+dw*kEk=xso619}_K+koB% z^fsWk0lf|AZ9s1WdK=K&fZhi5HlViwy$$GXKyL$j8_?T;-UjqGptk|N4d`v)|E&#_ z;eQs)H^tB)L;OdM7(qWA%@F?RoPY1*BdGgMGng)^rL(U#lGX*8W5ShYx?defQspb= z_+2qfcXrZ9>fhf2TaAb57F-%hd)`_gam#dFTEkJ)sK64|omS~ug^Z$M>J^U*7P~PtuLlt}+FynHVa_HX}3P0k2j|-xe z=>cPDM^{I5PDoXvM~_Z+dRdA{O%Vk{*jIAQp(VM_Jtd|DjR&v+WM#}zZ4El|GC z9Z!$ix#7s!rOK(hjn$pa_Q#}Dr4G-R{Va>WGdsCgiN z@D8Q^%L%l+h9_2a+^alsnn-2lc;dRpA!U2=L<+U@LPf*l%Gga4Y3mj*c>Fu9^!qZA zY6mn!KaXqqHSxkdHfKFo@ z(3h9RbYMR)@J}N;?mUf*I<-K4iXqKOnMN76T43rUV@lXOjm|~4#HwDVL|>;-(=RP? z;G{X#@tsb?hXvr8&Wax9Pp3Pz1M#NRhPLdRPCoMjQNgMy6_uSqQyf~sc!mS@X*Gjh zZEppSs?OwCG=o~VZjE*YuJq^R3|erhH6q`+(|Nu!?`K31vIlt4;^3Lo<4q7IUiGGo zsWWMPUK=cH>q|jbXHu0aZLw#!KN%Rzq5;#};<5|T%f7Q{k7YZ&T-1X0%$r4xHnc<8 zhJiHc{wzvW+N1I4*3{o>Hl04z9xlJykmumpWE0W>t&`eQ#Z|LOd(r{@9(1JZuV&ND zw2nyc5lpLH=8$KZP8fT9p@|bZVUb@C>bzwRJvZu%9qW3L`L{U~u(C7GoA;rQ zzH_OhSuma!htiRPx%Bl=F#c2ur%08V#}4#>N{QF_+|k4w=SWI@m&!R zIf!bGE}@9;T@i9Qn(mz{p`9bUAvq|HHr1R*_3L-XsGSKkqRTu=T-Y7+oRXNcC{yde9xf;^XJnrn_jTKok#B@ z=aX}0F9h!|pa84+bn{3r#k7M`Ox|U~1#xbn9&id36s#)2buLX=4f9UmSwHKSz+7UP9wPhM@cFk#xRU2{jMs z1L4CgzR#t{Q~E$XUqtD<=F;Q`eNg}4X!%|FyZ6P)O=GAL=F+nveL+jd5}$u6zR(w! zr;nqZhvyK?LlIjvo~nZPGJydrOmZjG=E+g8Z?+jvuDks zc5lM4ny+LOcJ)OU4t$$Vx+b$|(fDv&c|Ld%ei@&p( zv@AaY)A!D%;kGlW%jpO>l+GdX|M_hciTw-blI@xqv@$LdJ*SpXPT~yeu`3cUhtH#v zt~01iwf-2AIiHL_PN%hf`lDg=0^&G9y;t?envjLGFKarL|Ir^U+Aor4u(a&}T=ic} z1Aa}T&{+cz@4SRI@0~`KpASG8v!zsV$TZsQ6NMRdmQnA3X%t=*1;=vBX=R0JRPA~c z4t`orKaUmDHrs*d^<)Kg98*jKvIgSSwUso#LowAlHV{KktfF@{i)mNGL1?sVHMP7j zl?DwOgtcqdQ1R5MRCntjw4Aq=9`~3^dn*ja^@;1Gzl!ZK7zsnx)99O1sNvGVD4SMF zH|I{FgP#UtX4D3944*;?fzfd4xseLZr;tH$G!6xAqH_-?(~*bK=-qrXnJ=46DIPI+ zZNG)mq9>Eduow(8-b#nZ z55(fegB?`Oa}s6Oi9_P$og{p_Rb(8>9oM$=2XG|cIDiA2sYBRdVQoiEdm^wAV> zJPk*2g*teTrnimK(bxSdm3%LvIfK*j-tro~-Bm46+KI|P! zW!7i%6`xP!_i1r76K7{Xr9L0WQQ+-NJb(5~KBIx3GEv_91s$-RKqISV!F0q+`P^4n zWWo2+D{2}#kxn$vLJ#vd(w1HZXCWzxuY;d7iK<6uVa%R)(mtKkEG(_|fxaD{Or57^ zVSmU+Y4gczvv6zqC-(PKX!7AKeEIxYo}*2-vQQ`RD;;wxrpq6);5g-*Je!}ZWFzR_ zcXH`JjT)I}qrdY{dER||vXP(vi)KupPJKFOW5&tf(ud>?%ErdVe`Rc)Tab-2gZ@ds zw6{1LpZk=-puaQe?&@rmEn61C*Zn(~janC*E`47^uUtGesDY~27L!khTzuMJ14_yg z3K@`#ve7k>T5T!i=H{YSty);NbScf9oC}k!wQz&4Jl?Y+m*Yik)VR5f?(WNlclkPK zk-nV%UCl+S)pd|ja|M~d$wk+$b+K~A3JR!@hluZW@n6f86lI);ga!3b`}Rs2;gN^D zp!x{RT1Cs-<)P?JePq{JO~)hiFnwABtXaL9US#KCv42C{ZMBA~P0B;*!-lALZw)yv z&%@p^jS!T(mOAat!zs7M$g97OlCI?8#`VTnziu5(dXQl$AsRkh zPnQhy`B@oqE>%jO-SSZ@!w7|qHc-R1`7ky%#>NdB$U7n*_J@q|xcx>7$;yX!tO*RB zY^2-?`3S7j1Rb?aG-qi(x^8cRA%>f2&+dGLhnr%{=FN2HQa%zYn&Ek;E%f(AK62NZ z!T9+WGA~@+U9rX}vz=6RNdcZbw#KfVJIQfZ0X~ki!Q1Y;sN=-~ zl<~BM#oJw!^t=EyZ`q>f=-o8wUjbkJX@@bEduT(WLNsmK6nppVp-aw%@IK!ZAA0Sj zPpu01nb^bn!(M98uMl0EI7mP4on8o0!;H7t&pC4;;^Q50VE=x~T~vtNdQN;!4$zz( zg`9Ue!S3?`+I_wd(;}S_I`JUgd0L1?m0d8Y=^^_2rx2y=u3=t(kbsKV3J6WjWn;@n>4=i`Z4?x!ixNQIY|7xJo} zp{ph;L=DsL!5NA+Q_-whGtkbn^ut2Mwyn)zKII&ZvsU5l?TzxW=c$RE%FoIhPg-1{ zQhOCXK0Y{ZaFJR%so1gI2dmy+q{}WUnm2EbaVIX(Aa@lzcQi-h!pro{Q-!auFM@Nf z&}eU!pPMh-yIdtBUlpRBY0&fQz8C&G2<>p_Ehu zaohPR4NXwlAGX52iqEKivWlZeT4CXxXS6I;g{X6eZGBEY87ht)ZH<8wUeL)b6+uBk zXfx;~h32X_ek=&~$}4)4ucA$xHmKh4HL0qK6UW=&&Fj}xXQ+y{ZQJ7fkvFt>xQde} z+G1nLTk;yEqFuXoD9(6C$409-b+R2YJHDroaVpxkZ;ue`5A*nWLgpr%qVv`IUOj zQ*rKWCyc88jh-)1(YbSH#6J2)TsPqSxz6aY`#aZ|DuRQ9;avQK=B-e1;e0S^$NwbP z)ha~&^C93D9bBv8;)O1_Z1kJDm#XYnyJG9d-}Gdoic1%}V&7 zJr`8A)83f%xjZ^wRuK{sf-#X5aQ~``n>Rv`f2IP`Zm8(frw(;VfZ|=3X0#UxO*oIPs&$?%}15}b2zRgSHA4$MOHF zqTM$Y5fKsC(WV;y`=R3gy$Gz@Tn&l8RYXQcVvbpL{QIlo!Tm^#A6Fey%JQ|dZvEj_ zw+5^#@YTaZ`s2!s8rWKium3*ZAGszq(Wa_~$z}u4WN}U0tj^a*CJ(?tyIP2^#a96D z8-T&D!3wYDfhcKL7uTBb6`~~r(c*kv#F+E-=&uLjagTcVX~|dF>IPxVt$OUE`C966gWw!l zAEr$;%>Qo?EwsK<_`)TM}H3nTKG{!m|UyU6SgU|I0*pp~jwK9ft zBm-P*siDXB7$~NOh-#&wOxsvISYn7TL3~B^%vg-FH$qW64I$5Bx!yB^VMo3?)+Y|< zyo|A?vxW_$;*h?}7)n`MM@pgkPniXlth)6}Tw;hg;;j7F`Q{l764t>UJIP*7^ zbE>9zHBm!$=QIpC-V}vXG+50~Px;BS%>@|W-xy{9v<?Z%)%WdyZBnzS=oqN;SQI*eC70W&a<68I4)@% zPjh5k?{%Qxe z&pDV6D&FQRaXIHZoYEXK?`jD8oR8?Q&0){i-F^%#K=lG&?B;82=NA`XLs>s`ddg?* zQ2}}s`QhGkK5HI@_+G;wsr&;xi-r|q-c)~-V-}$Vu@8JF&ZvW(~klCiQw-A#4@LA*U+Sm^$Q|A9JQ$4UB z@_Q5SV?-#QOtv@iU9|f~5a(1pk6Ohf{hP1}@n?#-AYM1~lmZb?#o6dLSmE43mFLr< zoC1-*2_GTe=f1s#(oe1S)uFJkQ2trTSN%B$DU|-&E7hNSv;{I|h|j)v59g~KxAv~| zLqS0SMC=^a%8zrI0{P!-bKe)gf8|5u5aRn3d9}!6E;RP#x-B0fmzuu0Ip;+AT(5D= z2yTvFKl9{!63=M&t~_*jT!=@be2|xy$DgARD=mFEx5~rg4TVVD=Z&8~a^XI+P(Jrv zJ9Fjx{`#dEM7?t=st~)UG~*mC7meE&LUV2=dVv_|Rw!+0=MJv3IB%{x$O}0+Ir6ie zE8`_?Q#|XbC7$^HP1KbI(mr==&&H$D0?r>ike!_kw;2U^knF)ZW48SK%c^_e+t)0d z98e%_e*3m8G-_7>*Fbk`f5Uoz!)B+k*ct(j=|FdqS% zT#=cXiRmZuQK_>l=dhW0xSqeq7cN{YXTWuOzC4>-w`9ogv8RO#GBPr7qJKUN_d0Vf zoB>h)+zoNY=TGSv;F2%T` z=Sd&3c~cr5tmC@wp99j;(%>>J518w~xp|s=9%3Hy@k1&^jVJulrj4m+(1y=rl08yW zQ@KvhL$_-7oa3irUHv>XUd}bi`xN=igsEP{k6Gp zXlRG`?~*y6%9Z|eLus;nuA4jBA~`u3$0Bl(^W27Oj%3si%7rq*2JhY`A<~KKUiQhQ z>yxmyUM`O9w&wmsl6>~#dRxQAC5ih9ISBq_g|}}KG4*JU^z-Z2CF0(i9NcuULSkYf zM6Evmm?cF2O4!GM0hXMPCg5mzj*K1a)+V4{>m0nEZGnV@1VlLIU}G~2I5{O?P2C)1 zUNpz+SMkz@L_Au%CLXQtX5(KKbFR1IG37`$4lgx>qhmZoKVozXGrW2k$9<1%8ROQh zj+1s)FUJ&dad9{jmW^xmP2u1Whq|q@F}Jh{UcQJ$xI?y#o2ysFVs)Ktt_w^M8yhQa z@x?F`*xSdV)txM?H#NbF=P?jH7ZHm^Y!^P8~|!+rpUSII!PNrv#A+8rNe%`A=lrLG7gGfz{dfR$O%rz z^;d=v{pVA4(@|Q@2&JA8e0J01XQ^2dj>H*h2y1J^eVK6XO{H<4#|S4A!cf;Z4b?{( z!R~55MBPcn!=*+Tsq_=G2JAd+gh$IlQE5ObraUx4%UYpaXQXmp$QTQ=`eN176u{gV zfA99euazli1Y`7T(+8d6Q}8CtnCra|%y&+~kpg2F7=%dsE}3hLtRcPm+$YQDa^-n1 zu4$6d{-!ZJy7s~o?_^kfH^!8mJ>l~s3Evx;;GIQJh~DV=W+pt#>VaE@Nm$Xt1ZzHa zhf|9rsOcuC8rmI&<&wD1Zi48;-MD^Yo8D-GqmJERQIyDiDic^u>x#5?iMaLF1jBxJ z!IA2T*i^F#?hovOM&}YR#;FPDY%u$b1ZiVpzO%Di0{69=;OD%~GB>L=rU^nSbw+GX3H)?MV})qa(VR#`E`Wii;~cV9EVB1X!8EwN3|o zSsVw$08>oJY0q_G9NtHo;?@0jm}M7-|g^MtL7`SXg6ZJ}Emi>$q-sASZZ{Y|Vq zF9V0Q!9BNFSpPD`p_f5${}h8?hGsDD9>g_h4ENd0pzdysE7>tv-P;Vety;s@F9t)i zIENhH3faG-5i;G3Yo0)y+!qbkEoS)EFOYjI(cG6aL(iiD5dHc)AIz}XIe_ckXl$)x zj=D2iqRxrI81HJ1}Q$$b|;@Wx;WM-xtK(w~CKx9jutQSmLTVUTR zf3%Dkh)+=#FsbK{sTKoqYM2H4W-~% zhbZaCJ{dO`^Emu9u|(GqKHN7JGZjmezV^ns)B#x6*Ag{*dc)jn07m3mB7Sc(?iut) z=qyW|vT26HJNm<8yCs@V^g_e@{@jPO#Hg>H7_9Wi{m+(o9PWu7|01!Yz7+zFd!X8( zNKEpu!a`RMgpP>B;I3BqJJX%}6Or7vv_e=JclMEy(kJhZag%5G)jBKAyIrw(LIe(< zu|l@5D?SHDV9qNmh`D*|dJ){`w1#Ij7tFj8j<)vJn3Cqqy^wI2wYA2(TTbxr6OONg ztjb1+;kT)v~J}azIww(hSbq~YIRs5Qn9NTJ!q3>F2 z^nThDolf+_>-D^Y(5xw54C@E6kFajIo%9iPw(x5%aj))sC>C$y*I3wM@1{_A?c~=a z+n`TksEkJ;`>gTBj(rFJyL?T4uMhj;klBmN?P7FKQj**Zi=+ zzu3Srx_M&Be81U~Bx*E`mzxYro>7WKx#d)C-c-5B}( zdZYV8eobE^G;Z8m_9!c^GQ{SKy^#HkU-QiX!Q*?O>Pu^c1{vU0P%o}ytx;)uV-%I` z1?PACnn#UbwWlZcf8f`6G~(K{C%Sy**9>jQa}%D|eznHN^9}IzRS#tR;5y5+0j4hR zfl9xvQ8}?bT>AIGtiSx4-Su$FxCb1{+Mr*xdKi4IJNA^fLFGPmQEp0ibgpEBO)KhP zeuwV3Uxjx=zSf3srS3?pZi6bVYvbyHZm3X;UsGHQsrlV_F37KWSQ9n9yP;`)evNxg z?)i1au7)<)tkpp4HC_1}+93Q~bvzi<6?cqmP_;>Q6qaL8Mw9t~Q;q)t6s$wj561 z>%{#6evNTCM9=BOy?uU7Tv?Rw*$HtiZBTt@87!#X3BLnvu&r_#_@C;Ci9t3vxb`ny zAJGx!?QA$l{zJk?Z|Y!!#Am;#_RkJz)!7DzM*O7JTRPxc7aJH@{-B`b4v6V)gQWf6 z=%IZF_E|QZBYY+GaeIspv4P>w&t$ZqJxoLSH8Vfawm$8#A?9C6@~3=3*$r^ z9DDqN=WlK0c`_OHoTj_91=4JgYW9rWU$nu+3>zHZ^MuYWX@jV28#L+rm}0}*;7hIz z(!M>UiiT}aRA7S>(;m>m%Rw;IY+&kfpL7$0ux6+Y($C+e8*PJRK6x_X4rP=N!nsj4 zFspW(>g?lPjWIUJSaFNi=CqbQ`ctiLQd`f~7%|ZX<`1va<2S9)Xo?LowQDqFWh?gY zHaKl^m5ifW!Ec5QEOuR{?M+(Y%q$yZ^}a;iZv-NIt_{w7zCiD$2IBoZe$CYLG_F%1 zhAp%~w(B{vs}hI?OKi9|d4@zkR`eOfoKwW19*=C`zwHz)nblJIn@_7xQgQi~*cfh$ z)eBA#?=>N!#1{Rh9jEl0kn;nBF~^AC4)!#*!-c}5+>0c{^|X`y`amOsL9rbu`Y?Hp zRB-%)9lnMhBCGd0WY%hmbzKfp{ZJjOIyS|?)(5EkF@Ibf)0FGg{XB#5m%WS2F8k>5 zTtB!}wCB2aFI}nRhuZ=6TpRD9BdNX^H^iRn=iRjBc60ddv*#Ln7cFhm9M68)a~-~e zrfu@U3||L1FB#Fq2d%OlxSroe8Kb@Naf<`j{99?@r)F66(Sd8ZEz~2t8G_v$xp%Oc zM4#YKq9gYgHj$VM2p=D}Vk22E@Ra=!i;@l0pqeMD*g0`8qm(LSdT?LKiEFC$^!c7U z1}%2tp2#|S+}<7a?>lkdWG!9Y>V`v2oVhMqLr2ZskP_<5{g>6Wb(||qXFH4iHCp!7 z1!u20%h}lU{w@%^UB%ujc+Tw%`))4W4_Z!{KF+u?$%XyJG7|rtQDT1YmX9e^Wp7mOP2w8xvWZk+ebr;670D1jUM z_IYxTt$m>z_tZ-0$qzex-{rZ?pi%kOvTq}HFS4FmVQ-uV_Z+8@h}-ciJ-9DfOuhD4!tkjF z_b#VWkR8V@D^KokP9g897Rc)F$vx1?Wc$Y);u(ltghnyu+^h2BUg|^=xz$i3FYdQa zps$J0WqNaU6-dXZ&R^%>Oxtj;T%HSGO6&Y<~L-u4%XzRP%8W ziTrow_+~hAV-)Yi7^C&6W+*s2l8PLR@u{*mJP(ba?CC~W+?sdRwhgD~GDhe!+#8G5 z45QxhhWLBH8+{fIJg?zxd$R`5gN8x*-~PHb=XiS@f)TL)l;2zBq%fA8LTq_03^BK8^R58o=yzb4<%j zq3yHk1`B+7}bF|Z*#8qr?w+&W9m&mR6Q6$&EMBTi^l%QULD4B`&!)p@|XKr z2FGg3o>h;+J|tpZhYP%0H@G)_pIZYzYU+57)svoAs)3aqbXe%yoy4rU*BBjYTXp4~ zi)yHFoO?tyf=Tq+H&;;b`b$Szxv47p2Po)!uRYCbQWdp_C}LJaV@6kzvn!Jc?Wy|L z%IKS;Af;^;nH#!*H3T8{G#5*WD#Lw?a_10G8eu@tJ2Xv=t zh7~cWi4OJcdQzjJ3MhNSAA?`@A~B;7{Wq?y$Y?-$_;&K=IdESpIbRM}EBm8=^L}Ki zltbzvKWzOSMhjP$MUBG$`+h79%3`IDANq~#PfJIZL936x*w8MDIz9a-_Y*7B8bnyIBH>{e;(Dn`8N-L>g4( z2Nl(5j-M-%Nz99^j{AsRQA*tRmG%$y;a$jdN}2tIgpF};hcYrg)3>kQ(tdJ+KT+{U zZ^pI)%j5jpD zS2HYFHH0Roz9w;APL3N&(>lJQYp1>NDRCIhvU^EsqrA|h%Wx_w_kwD*^gdq1pP;%4p7caqze|eNcb_a+jQmk4VsqehAERLlbEB5x$>^GDRg_&H9GUs zRr;U%6RuLsGFQ~{DW=CUSExdyE1DZlqvwH_X`zuT#ID$D(@Uhg>VolirqlZ$7fATz zt@~%t=PTzay}b+PzccB3={c%h(FIjU%%b08&(fOx&JcT(Wd@%i(K8pjcNJQmrbk}R zC~}xfRZLEi_Ra|#Ym`upZzsrjwG-FXB_w9rBEAU!Tz}m$>Tc!)m(BC3@#v%U_NF7( zoC`QNI6`BmIbvA$LNcSnynE${wS5+mmEj>eRMk=Ld5Af@nA!hpvV4lB0N&F)Q+Q+ExC9S0Hj7k^qq-NUv}-IHR6dM%0l zG*S0_*}jfK>u;iVWG8lzDdO!0di>p1?qo!rETtivZIK?nfufhLCzB*w%xkfc;67|lk z3EOD+qU97Z+8T$Fw^LEUGWr!@jn`dw(74`9Y33g*H1yg@lRTD?=MF2L73`wonv3at zniXQd@1mK{7gD@4@0j1(O>++~;GIEBxj!LxbCxW&gxGf%{ddu$6@AN(+?PLjDieX5 zQ}F1QhLQ!D!iVGP4-H8fnRx1xg5%#bv}~6Nv4?7}XsmUn$ zpke3n3^=z;#)Nk~7b(erT0R-t8=iZmX5hlnBso_QJul1ANf_{gXKBV6yhELY9?vvf zf0xdAGWRf_XjpwD9gWW?!iQ%Sg|pKUGbK^ZFuEkA%Q=|QJq?zD>8Q~t5jE~;_|iBX zVK)-+_ZH8kUZhCemFM`gyhz3DrtxwfF>YU~>|u`MnN4_cDwK6`C_KS)qnK1oOpZg+ zG5#z{s)%cda0TYr@ z_hd9KmhvocKr#l5<9$n>Z;AfemQK;w!gH@3ykl6YPBfOU(lG9RlJNPMxk5wO)+DT& zHW*`;X>c2xgkQY|%UK%7ZFDr`JW+>^%xVLg*SODI3X6$8;|x`tzJi5ML_5LJqK##51dbB+V?W3q;X zTL~i8%NZd`6HvGz3U_#RSa(DM&ZkA;+*qEag(SeDSriV8=2@w80@phOuxXTrvE>qQ zWaj`mj}(2nMg;>fo#&LUYvU1315h+XL%E^x*jZ)(a#Rghd&Z;s;r@u@8Rtreco84v z>{INAu5Z&HopN~AbtMjBUl&ot6dIozWYSr#jWwAi zJL3RxUEIDm-bZv+*WkTAq#($+GnNH#t^H&QW?oLf3_q^xEl7csAs^YS0Bh4z;2W2K zAwC7j4Nk#0s|0l|Pue$>G8!El7ob*IGTaw+LTj%Ad_0;AWw%ZU^eDiIxyiWX)CnF9 z`Lpy-=I7Rq>TE&Zpk!pM?g&#CuD@C)OKU<@s#gG$(q6E1>xlB&1$cI-m$dG}OQ!ZYRP(04q7ofA~#rr(*D6%bpr&%v-`P>1UtogH)B;ntl4p?GYfNT4c z&^EV&Iy13mdJ<;?J79Rt0_3D5;q#w33^pl1WIz%^kHn#uaRD4nk}z*%96A^k;KTEt zcpVa_&SyybkId-6uWAA2PU(rsXWOHpKG*e=dg9Tf_HfWEKw$HpoZD>=<4Rm7t=|baMonQ@9vnpx*aCJ%g5a9-EkZ3 z)H#(=$=%g^KkbY2kzvyvowM4a8E0G)FC=17&9<<8#CfCPiFmM?If%QQA@fOuV|a`@ zLnGariO-{P{AxbT7k9(5{AjGZm=B${-SE^l8WTCAQ>NDqb#}MGfRmh|*~_(vwr$k4 z<1_ucV)dIS_#EV{n^RZ392*7eqI|5p-UTjoqVS9JL(|7~L7#(>c(gqqs=zMTz^sRq zJ?i(K_ZiD0ux34HdRBFY`?Ls*U(Go!-e*i}7=ixFIeTZs_u$Fah+dozr^5+&*Q2$% zwriZ3fJVQ=VL3Y=KV1@#F)tk7r{$yMUMCbb3C9D@UEP@43FQ~VaCjW&$y#=TPv0;| znXPSKJ7Q?%FpMq8$Ks70v1eH;^yR$Q#KeyH7SIY&+4;ye>j?i_p=g|$kK|L#WMqUw z%9FLri^u-zq4?S_AMlFD?{y)#*E=5`&pJQ^hu~lm*R$t#K>nj(EKkfwl?dKv%ngQ= zb(8KR=3vk#o^wAt;?Qz?OGI!^?ovt|Mn$%SXEf*VY~ygExCLrPa9>|+5B-rXAm#Ap zj%bfojxBJzMLtIPw#T@ALD(<2uV2UFZ2KTA_2<4`5(~rkzzARN>vpk-oCtMY+fP51 zb2~t|XFgnt+Tr36f;;C6%?GqYjjjZf`rOyG+aczgz$fQ?yt~mBGiC}%`NjL=+v1uh zX9a9H1E**U^Rt`{wBWw}5QDg61qw{_v1)Y;=KKppQg!a@PBFN(Fp%p9+}G7(VBIVb zZk4&Ok3=KkY5=P1a9Sy?2 zr#PP)8G(kSK1e*K0{*o||1myjaYzM^ovpFi*$4IiQ^B@RYn1Kh{hK{1RJCsnuZ~Ue zW`_!&FNI^^rzW_(MTMs$IU_iw2?{r;aH&~1KDjo*oHZ&OC=El?6W)+=t{awyaURDT zU6-gZH#Q8re>Mgds4%KZ7{1PFj5>2v$oQ`nntL}!l^L9uO>c$V3ytu4vWoMot?*x; zMz}CurM_o>={Cal(JHu1425DT@B0i_!JI;&^7lfPQU#q)oR7TW$7xUV_WBJGF%tF1zEDxo9q zcRzDfA=ZH~|8zZ^vgN+MB5*IM9yVBVUyl~B|63Q6YjR)v33Odh7lVwsuitVV%%?8e zSL423rof}ib!fMJDgfDsoYb!=KkAR0-8AiW1N_nCPc8NJF1G%dzF5;X zIq8RYftt3IDT=!9sD4ehgC92LY1$3XG>3tmru`_hIZ}!o)UTQ8)EvhaOZ9cXCOo#LXxeWd@^iX}roDVZW7u4pj_l9_reQhuguifrDyiY@tXFeKrd`) zplPGT6ID;wRKKQtrYDknYuf9`6UX#5?JlJra9(4oevQdo59Ehv+R~VN@Z3awJ-f^u z{-ZQ)_XX~lS4Y!+6ylCAM>+S&?|J42e(vt6X}4P35Ib}!UzF>=iN`G8Xbhn!NHM`flz&cmc?i=TVp*EVfqmB!%?KM!p=IW;UXw3B~ z>9dUKSRYe)e@<%q>D9;EIhwXq>x}T#w3m0ThxIqAs9zITg=>XFG;M>zy69!DX&>lT z7e@>A)vuAVluoglcD>zop!!%@ef>_4I=DYw)1F+t4*VKx+Specb1&r84RwuYwNWxq4FZ_!o1#-xukYP8X`kDGC>=4~bQb!qILoup~I_j5u6cTM}Tr4z=S z(^0=>=FwVs-dEFZHJ}z+RMWJ7+SKB;|3Bu6mDqa1k=HoP5^+0ekR$(g{ZY5A92|L0 z(zMT=c7S`-Z}oL4cTqC&m%81=$pNd*{#3V%&)FlZsAL{FE>e%DfnD6R# zrAv043HqjP@6NSD8$C_CZ+$ydYxz}u-SMg|P7ME|ZeLZ}V))_D>h>5{TPXgPtK0rJ zZ17E?X}>M7!Omfy)Yq50+hE{-AJy$R=4u-L_@HhZjI!pv3r+igmo-*qy;ol!bkB;P zd*7+s^~PGk_H&uKeaG7hH=AhMlOI|_+Fz8upP&hrh}!-}-7fdBgu(k#b$i_t3mo^< zw7X2UKtbAT^>q_J3j}U@rEVX8ZjP_7OVsV`Y33+&)wJCM&5_=xSbhC*u^HUfzErno z%{1d@=NI(;rxG24%+NRJ1wHw$g!Q|cc(>>|UHhuU-9$U zH&YDT%FM$DrFss~F?>o3-YM}c))b>tp3ua%O03o~<^A)=q%2kPzM~00hdx%bHxesl zmh*_Z7c23mnhE;=9#Xp(N^IF%gP$cIQt&hWtx2hYWfLEe&lAo>n%6+R;``+CNQuu! zjQM%+K3P9daz@6O>-_hq+C8N@XTIb6UHWxf$#vQ4{7iS3-riK=Pj+=RAM)tBlJ`oh zgN*Lb6=s1(UN_?BvfFg@vJxR9j1YG07VW&KM3qKHxZrq;)|^*D+M{oqdy}N>;-ra& z%mgr_a$1QteuhYBe1q~%Dq&Jwjh~OMQ~%>iT%A=7NhQ~)+fgNEwWx-Yme+{+Xs)ps z@IL%i3OcCd{aph{d!sVRM zjP_lsMBaHl?2JE6T^1{$$kjvh!c!ErP>H`T%s3dIBATznksG=Q>dPD|=Q&4>)Mb9< z1l69cL}+7Ow01s0<};P3`lu2v4LeTy)0OIZCHD3)`Z|TbTmMRuM?uYTMVIKP`KWsn zlxi;H$?GF@ew>ndavgP@^xzmJ@6G+A*UJynwo!b~DE`ra--l@V2q`=JmpPq7G_!#3 zjq*Q~weuj2R`LB1^M`)cI7mZ>@jbBdHx=|dKz(w#->dxQy6b+fL2zI9{6*ty@27~N z+`k8ZQgzjTq{!qxwfRXi?i7(%2KVETA0+LCIt}E$yZoINPTNN{2XKG6er*gkM`$`Q~?xEt|+!x|2ZT_>H?j-ZQ&9#cg3A;(kxJumS?p?cRe-FNg z+kPg0(_OSVk-uAJY7X_^NlUx(y;`-LIoU#*-kHC{UY|(X?;X*JzqdmlDKdWtWybS& zW%rS;+}%zoam>*T{XlWP+bKR)$$6jmB-Llb+bXfd<2`kIyOjc>mAohVjwBAyJxa+n zmNM$SY703=DB+GWD*d~eOv0JFTliMJudLHb37@ZTsC@S(l5*Yq+PxuZPy0m+CGSm^ z((km5bQ4M(H7F&C^FA$Aai<$U(v*Z^|aAn$@RBaRO9|STHIWT>sciv z)pn=)ayIx{Fxk}o%Z{@C3 z&sAHytRg=*rFyPvvUer9HBdsDtM;0$B>VbG^;{L0zJiSFG6%?W)seHy>94a=Jy(U) zUrrxtDb;h;nc>Umse@8IS4nl@>vl@@Ty?eiQaWj)RL@nCH(`$zbAvorNwtaf7E1M8 z)jeV{Ei_ZA=c?yx7SSYArFyQCcvn>orFyP<+jSugtgeJKS7q#5Ks^kV>bXkt2*esF z)pJ$e!1=^=DfL|S_uM@4t*lhfRgw#!fv!?LS4lNxTOFl(u9E66hJS~t=PJpmA?3xT zxoXbr+0^zq=bX)NkW{-_eQp?{Vz1NvC9~-Jj$tsEaZT;`h+M!K{>xXX&bpbjZ1^w~ z)VN9~-DgsHpJ51WbA|eDpFv?U!|-*|Wn#|?EowFlh378Owxa3u-f;+mFHjPTJ=V8Uk^CZ=wXn!8MRz6Qp+D@gJEAwCze2zxnoI=GD z^3;4{gU(YZAR`acj+`OM&oZ?W=hy$8ru1Hu=^64+l}=O5SCgn&gFGBlo}yi8lW0PX zJkBJZq)s0v(!(#g2>5w|ehr;S-Vbx}#qR`3_3kkzaxyVf;3%^1pM%dY_mTIJku)%tv-S1%(T$Liblg7&X}$JR z&e;)UU7NGhJg?YCkD&erIe7kLHyye*oDRRw#xkefl+uS2xo|i!9o5It%?x zHxt)ysM5A9xWsH?PtFkPFgFX&rfejsZo5I1g{2oZ&@2DJ^d~tB2}T>JQE&#ejmm;$ z#CjSUHHcO>%~IFg4s;ku-|ez6`Se_t*Ns?)wD)c#Tu1>73~ zi*Gy!aDG6_U`sqZ?~T&4^+Pae$Rctr?M}_64?)<@g_K^NNE5S%K=;!ElIrP?5{KYW z;|0W?Cz5Jb(j34Z5*q6{1ioA6(FB_=bk|}CKE9pHwcO6+`8yL^+~<I5$Uw_Hz!r%VgTRDvD059E=YOCefG8kz_q_FgD+rNP&AIsDH*_^s$~u zBM-MGDK}m>ega832dO^xc=mX%_l8j)$r*8d9L3*nMf+Ru(s<%MM(W%;15FJ^FsDqkwQ&aCw;E2oZ$g!9GNiq7;><90_%}$}tD$?4}f6dl3G997uJSHlf7^gOD{aotOb5 ziREB^f|&oNw`&H%@?wAft#3>vT?R^ZLi$$Jh@RIR$c%7bT11WL(dl$d9*|0O+>4}q zJJ;y=ci)SoI@<%!-cqiLuD%|?dCnAaZRbfBmvO$GvoP%UqB9)^Fw308YXA?DGVQ~* z_LSUQbmVB7RGT7Z{Z=kCsdZne7D1fx8lT@>k?pe-5)6m;}5T4P7>)UlHV@e-&riOFaYNyP6??~bdH>LjQjUzQ9i1Xi+ zysbB0eGDhgj#KxP-ptyE@mj)}q`Fh{!dAqYb&_)F-DieMnJkJO$2FzFA;ejEiWVu@ z78}gYpIX$qJek+LE!m?~i$XUfL%KIP-%nB&-K8AtOL8QscEp+#USl|r-}zq1+9}wJ zNL0I^)+sKZj z`cKN|X2k3V*`DkvaewSEvLz{V&dfhCb3&%xJt5tL3P&5NUeW`c?PEWYH5n}F!JZv& zb`n{WUi%)9?mL%FRwU)jm6naz8)8L24|T`tFP`ihvZSv=xbDdJk*U8WeQMYp<-6V4 zD`Y`sPZHHWuZ}G(NXnK=_r=ds=JX;e5&h#`*%@R`PjtBk*{lJ3g3Rc_zHX5EnVDX? zo!(8#IZJsix?Zmv3~$$EA4*NSe6OpNpJ(rnDV>|%6`kkRX4j7?oodyU^B~Ub_c5WP zzq?4x0y}+7NXnC6ZC;DrD>bMnwF`b&JF>f{2JNcFJT-r>EB_kP_8Xni`i>ntdW>n) z#LmdrXUkq5V_Fx~S>k!w^HQBweNDiT9BcOPRHvnz*-_QWik&+~v@j_F(&x^$GoraR z37nm=AiHITG~-ey^!Q=MP8ma*GP)C_&(U*zH5wn#3EPTH*_%_1Mt|st+Y3zCm197| z*LH;Tz9O3$kdz^B(Ak*%HC0Kf^TY&HXAe$Q8hnN`fNO>b*kP0(toQx(WAIy zahMXQN0K)#CMQnHL{r<>x)kXZhljs(sCSTv9P zAzFOQCE|Wir@|0+ccuto@iyiO8Gtoxv{*&JK!}2JMJbYGMI{sGN-4KOq1*e7O#WzB#`P2?N zDZ1P$6;~{ykfC#2tbF`hNG^q=M~;ZsuU?5wsz~hfI3n7oyb@B)XWRV4;^5N~(f4Tt z)>b|&8YGs8@L3U9I_Qv?aj#goghpV_gM;E%e6i5~)*6$;4~mrQFU5=XtuboX0dYCz zr8wTXHHJAK5dIflh?Uh_WANntVpaGHG2&3Tl;sh|C!dQRgTm1x`9G1};<-SbaCEv- zB%U68CTiUXLyV$GLr$X>8bEinRdMFBWLh$Z!p|~^ifsmYlFCz;DyFA382f=u_ zcZb+K>Ar}W8jKrtcL*zk`@$X1VPzllL&ZmQ#@}Hgv`?$#p)h6g;eM1-*ls>@$iONF&9W$ zwn5}1+z`V#ZqI97@$BYx(fuc(ZT5P>&t`%)6T+Xb6MHUQ6OM_@CC982&XL!|ZxePe z?q4e=p1vyX9To6wuvUByzAB0`1?taQBNC5X5%cQ{IQ&~J&M2;k?Ax62?7vzxDY`7A z%&Fn+RbsL4W#JpBK&9YSqDtW<3Ji0Qima4T`SuyMX12KElX#dFKV$i?SHv`qj`G+QR#+ME|2=a~6k zxm3i@IVU7ud1sBK;z-SNqSVu$YdA|p!>MP**~flZQM_2pHasiV&+x6eq@ z*@0$AzBgawWt)fYb(_`v1TY|-P+QE@ktGoAsn#kshnV&9*p zuv|M!_*^|A=51?=>SnXVk~T+#l+o79pDC)IJ1jbwH^tA_GekzK!@}nzdw4p`5ciKA z66V=W@cQU<5sE`Xs;55joG!NQKPaU7&+P@%gstB}v3;^PF6&Pd(zu;U-Z+&pRg^V8 zAO?JBEUmXi$1VFs)XK)#)q0BH=Skrn*BG02PZsWL{}YB)8e>)M$zo2O|HSLPjj(Xa zB=K))kvP-05oY|DDEitLiFNjkFg|6XxIS;6kh1f`uTBus7)~khLbjM7)=l3lLcG0@ zzG1wmX}nj|eeQ`A%kg5^ggrucjwiZ~7$;up?-5U0c_OZCtl(^;IQ-oMkqKi((cfKS zDQ7lYo*X0U4%;PET|MCMJw{CVwo`Pi;Q{X@qlGk{1CO{%&PUPnL!q!6><*`)qr~~N zLh+-nJFK3L6uz%_h&wkMa$RDiSeCLw>>bw-`b8r|wP)Lfl+*lOZ-n4Hq!{|f4dv5^ zi--4kJTGyRa)ctR<2KPW#!bqF2x)BBtiaHyH$KBbOrAfiZK_qh|9^Yn3gb1 zybs?Zwpy_(!aGkSoZKv?oN0ixYPsTgi_Ib}uK_wg%@&@AHi<}&22!S2%nR5g8a{GC z^BF@$rM(+PwdpQ!={rP7#ijLi zq#T@(#(bPx9VxRWrkSh}_czp*@@3-3q}3v+VQnc3CXx(R3yF{9+?Kd7dX*UH?kr`j z1V00dubZ5twYONVS}Bws%y&NPC=7qD5PDl`NjW1iBx{A3=vhnc?UlyA=~hRav5ghs z1DA_=UXJMC(N+|`Ste?2bKu{;XyK5$OssC?Ag!Op*cVHM`*!AcdqoKLgo?t(_L!6v zE;>J4BK&sP!Dd1$aUx-fIP7hQwTnW8*R92(RiQ1KZfz-~xjvYFE0}9ciKp6 zV38KNNZe~`!(L;BxOIA==&{S1f3pHaP{=}2;$w}khW=vXkp&`sw-uOm5f);B`0Q)N zzc0Qbzi7S~w#O37S~eB0eCG?@=9bbrR!H;0_`McV20GsXD>CJ3tSAf6b`6tTht7n|CNh;cK- zor5(b{!i@En<2VW4QV|oY7L(*iVqn}HC{3P_cS5ZLG|*@#HXBTLh{tjm~JY$hDBab zb;%zsr1?VUs1eTz)kWiXQ^dFyM({slC>HjcB5E8nl-7izatY57Ee(16RuR0nChU(_ z!_$A2#hu5K#LD1m7-*&^T6Ucz+)fzqSgR!Xxm|1vG2krGUxihNiK5xbs_ZiOsgUN5 zgP~QWb)BNL%>)sAstS@HeNx1o8!yhas>1jAd&Qwv<3+pE`h0J{QMeu-CvJ!7^Zi_+ zV27hfJj33W<<43A84T2C3ziBeb4!` z*H)zW=`BtaJ>$=7r;z5UtN%Ua&uFHwOh^`w_dns!WvF=Fu9tXw;4yy|J;lL@B=O_m zBYyv117`&H6jj;5#`i{GilT?GIP!qs=j}j$-|nLJ(fj<~&IB5JC5lGJ?n(U>_|&DF zP#nK2^+h0O_(baycckw*koU?&$CJ0E?=Y}i&CVkE)Gg`z3G_Bh5E-X$N}oMYU$2uW zICDe#T!D9g#f!;juS@SaP@4M|oVzBypMVi%abn&1tJ2>J=uq5V?7DD8`ga1{9>rIEE$9;KLe#d9dvKz3cbcsASzv@!~+CChD z%01*6ddam@w{QsJ>&Wx;W8bl-XY3HHdyy{7*5|zC?0c6X__0==v+rBVIrzpy5ZPCr zx$p9d^Zo2@UFF2jk8#d8Yr>ZO+_p z9t_FVEBTQAFW-OfCbI;?2VP5!MJ!#p8G#|m2>$G2g7NMoB`N&nKSzT zGMLeo^8hO@a$f&N298yevjH>DGl#IAT`?E>L7Nj8eU|%0m4TG0a%LdwG-vu_GqAU< zoFC|Ol0Qp>3{*3hvjhppnOpch2%T@rxq`@}+%H!LG0!h&3>1f%0a(L(mI-p+!0RCM z0C|JZ) zSb*AJ)6wW-ZyD#XbUkwj=h88Jr<{41zP13Tm!;#{P&xlFay9b_L();tPtHPQu4GoB zbvlOrOp$RBDa#9hTItMYryz0J{}_pmOEqpb+X6W+5x$uF<@5mN*X8U)z(Qsl77t+V zU(Qi@%xBIaV*vXSZpJhQB*3Rf9<1ubcV)i3F4d2_#*$m1379E_1)>d*(qi7s+6gFvC zbVtr?Y#PH%#oPWUTPWu@7LQ_9wdWHD(662WplqA>Ib(sJ!DLXy$4tJQ8!;Zp{bJS+13!0{F(iM}3UH&iFOKe! z^CXh7({}YV$Bg5!^2Zec-iJ&c^%>V|L|X zZxr;9b29HjnPVyJjjMI!%*>Nu=5xmNM%|a4W&F(57Thmgd$Wr{&e9wQvo4K$<5XWc zSF=kn_oCk$HXd@uW^EudF!xf>_g#XFx0&zHY|pk7?B6bDZzeS7ei@wtiHFeUaEAFZ zCzHT)o3EV78PJrO8P62rP0_mne_dhwS)3y=!%k5;eSIW7amY&SjY)-}+ zk~2I_-I=i&k&JITa-OHY8}l~t$p}9#XM3z0Fh|rd84JhAIUj@i+%Nxn;cb|l`H@_t zIX8Mi7|Qvdx6aJxZ0Ln)7vwC^!&=N8<@dtVsd6spvIF-^Y%jIbN}CZnYFB{c4SHd; zxttf0oT+nvC#k))+U(G3D`tDHCc$;SoFkfR!OYUyB;Emy9_wtzWBi?Yn&toFySgpShug~pM9-45UP0`=wpx&YXXE6ON!!*VAEtvkz-hCb zPn+2_AAjn0K#wpvt2VS#K1y%LVa2nSGH$I?9FOZsad@VZGi;Ir{v@C7Q`c6`vpGfa zxGryxlwESRO*fp!^}6<08zbl3ii3Gvvoo-yG)Tt0odu6;llE{OE9c)f2lBXPuVCNW zau#lSbM}sB$716FITx4Nl*hGuEZ%gKGjj2bcw9ej2hVb@A9?DlY@xLz2IA4}!Tp5*A2eDeVTa(?gW4;2);(HM5qU&ivC{Gx)}o;El*NY3@G|EPjh zzc%=5Bxn34m8sNo8`jBrzk#n+_;@u6!&}PPzu1>5JQ@>)qYv53q{RXHK2_noe-w0c zLlyRwMIzWj&IkU!qr%!1kr=a0&I&%hp~9>VkvJ70=LU~mQDJzsNK`HMl`({C zFQ|}yFaqHtZk$ zPHBxc@0!Z^L#ur%n6_w*sT1TZ;?JEb{Q1o171Wb+i4V7_P`W-GrbpzA;*m`%-02z) z$(5qbE3RIr!b#I`%>3#tV;9G*Vo&plFkGJ@=NS7fQ(<{d7%V;IOk zGQLsrCg(kA#b;5;Sx1XmD)gD%3U~fCl5vmUrmE0^y=b-zIVU+LUj;*(P}JhHMYNg8)I1fwoex3xm2!SEGE0RQ z1$@?okh7GH2CHzbX$YR)Va7{~t29ej;c!VX>I{)HmS6g+uz681dYQ<1%eyHmEQkrl z>Wy;t@<2}&#_0v4I8@GIF6*Ykki9L@;3+%1w3y712`cpL-x8@xIiK0P1CMK`me^n| zXEj^5<8ghx1xgF$+@?nx9@pbqz&+Xx+6<>@YaZ8uEs*xwRmO8lXTRvZ55m^ba<=nU z5RdDXL3r;Z=RE&Y@VJf-LgW2%=5vW3k88sqWW>w)&*45Q6deKzKf1_RP|2^ob}&#r zSud$pjU1ZMVI#FQ%c{yvEZ^Gl+OyGBKId|IAh{yFw1xQ!U zpoUge;Y}|8CM=QjsIGcEu00hv;wNWQjs7Wd@@XI{-O%u;+MMd#8G&e*p}DTjtVW1H zY&F$f*XCFMyyD-A?HXoPn`PZGI{^J+G}pDc)|8+CoO!2VS+yBg+qeF3nX0+2&AVQl z=a12zn(Nx^>xf`~JiVadU9~w_-}in%n&!GT6Z?9hAC?$tu50tLOIoq>eWQkn)n;Ye zeQJ(`2+ehEZnpB$=8&9k5^tu>(C%y992OHQ^0aARnqjbOMYh&?MKfGEt>J04Iolgi z&EVCiB6BR%DV>YI>p5Hw}BN%_mE~{@rsm*R@&Yi>aP4 zZ>G7f%`K0x@I=N<4XdopF#8_yz~vzodFI#sJ>Y3kk!@aL?SV-BebTVa+WhlAJ9n&}QIUmCJJk@n-W9oM=fMrp7eT-Ro&6+_*SyR{-m{lVD{x7$=?s#jldg>RXLqt@oDJLR}y)@03fZPwbT9-md< zuDPzwT_3*O0MX|)thF|SojI%lHuuw9*XFSsG-v=rL(O$ds@B= zPK9f(Yct!y4P8+0m4?&S=C{Aytd9}nG}pCRZpmZ&*hO<)o9piGSs&t5MaJ9gZapkY zsmObu8eI=RDpzE`rQgzyt1EKgUJp3$!!BcKe%5BfpN*>vv*#KPT$>M{+mwG}M^v_@xK%6z~g8|hP<#@9rgKC(%;qQ$y1)yM#(=7H?GZ=+fJ>G&}9`l^Naqq zv5G1(=ObP^qtYV{XRghk`_6DicU46e{k6gw2OKJL=}TTY!R~;DMbAF;KSsUXY$xP& z(OlQ&)%Am%aO(!Rv}^P2H{Lm7 z(FYCRuFblSU+9SVMisetMJq>`rB`I&KYVn+rOg@!UYmzsy~F_%-e`DuZ8pABYX^ij ztjNh%|6-3yeJe8ahnL&qz&Z^xug%YAM%g2$Si{e2v-AzV+rg)PMXvt-Dm%RIRgtlu z7GsA^D>aP0Hg6yNi_f}vs^RUm+52y6ZBfU$B8R^z))tQvD>C`r|Jq>Tl8Su3`9>Rb zc%b3)wORdB9c=g<3e9zGZeRKhzmQOo;rH5Njq&p}48Jzd|E!ZWLT+n#er>jYZe?ry zv#iMZM{Kvk{ed!$ z`$Xn7m{Gxhui*v63CI#_TDUdlQ@< zDsgk3F*8{AWDW(>`+O!iL^8N5j%{N=WAvnm3U98m665vOCw1op*9~!-!K#c$pZ&;n8)O$075C z5+4p!V_&n}>5zO(iNbz-ZsHud-y!~pQtgD1&N$U}J%k-nqWLKUct**+5B>*~_>pPA z=PSq^5Ykz-`)eEU*}-xjgu^~Q2kdfH>`#=tA!_VlSBR=A@ZTkwCqieJ61whH*#|9m zMtt0%Wan@dX5Hle2L z$sDFWIzQ%fW!L}DH?eUY-?u^^j|1fHiA8Ia>NB5v&6Rs7rmRxJVnJnQ?9RxX6a_1k zxYepM(%PIMZ9m1JWqjYVyZYn$)1>XHNLr#qmz8?#%aeO6;ua~{)vSk~-Q^C8&;?37 z{-dkr$hCbI&F3lEZLSMFYq{IPZH^Mj3A$?6zqaSXZk7@*Rdr!>>A1{!QGJFIuXa_! zbT_&G;_p-?HYQbq#TdB@@>ytybl|8sO4^Q$>*JO9*k1=L z=gEB;C&ntV(^iL>!o#HP&e$`W-78c7(WYp*M`Qg+_EVJpRr`>&of->|Xi(o20XpwY?kZc}k4v^qbFnmOD6lP*DpGiDfe-- z%Ti*Z$uEky{GZIt5j=$5EB$}c<%V)khwor^ublcp?Z?WU9WH~|y~5{i+|Qzj zfo6`AyG0V)v$Lb_2eNv;P39SiX{TgA^Lu8G<<5~7F-mm5_l_jDwYGnxX&WV8_`ajn zU$)3xB=sWMpE9G2nPj<_L^=ylI?s5^X1SxpAdI~>;cv;?U^8j^N`8bW*|+?LS!KDq zSR<~rFC zz|T+vUQv{%+3v z@4uwPMRHF{zs5>F+lC$UUsubVDP6pj>a|s$Sh+u?jfYabwtBN=mCU8Whn=d|R?=A- z+Fq5$uIww}wbkcjxnre{i&DL|%003|=3B9-#~u@2Tm7+@yI1tFa=})~9^*&MR4UPhbnxs|-OYPfBo%=waK ztW>Y9wi(L(FR4aK_1a2u;%mEL5~}g~me*E$kIt8QVIr$4)oUw-qudcA^m)C?YpWwU za$k&>9y{qQZd2%uxiWW*b0uDX^4jWbBe_S$?B6i;+A4aI+$p2?XPA0zb**@|%rEnQ zd3VXpBemOeo_prs7i8m`7O?IDXCiH0a{Fz-&q6+1*83%0Yv3K&W&vmTBBkqTfy+5h z8JhBv8m*WW_&J5MP5IJmb_9lT9&YLUmo#+irND(vI3rc4{&xb)IM4L${7ZWDu(G1X zzkIBIDgD3ZirFvOar^HjjYzJeDB*0%Uz=j-Zz%#f7qYQQG1Yqm#nkzHHg{Ap|C`Z@ zr}_D)+`E`gXLM8eq~v2qL9z6H6yqcLyzB+V)bD$q;=VW6$afa=-x{s(vf(rCFBH>Q zOjeBet3t2hV(C3AZoc3;hfWFI(Osl)J+Hz++Y){cD;2|bsL-!z3Avrxpt#I6LaR0< z(&tjt;riV1-X%0_!al{&WEBPtFX8ugSaBvo1;>RYbRp`r!ogdGvpY+q&#oBAb(gG* zB~;7wmg3kS9@`}){GJ~wEMF*bS?3iEy#7Mbm)E{ZyI0cptT?cp{a8M)=;+*Xg$b`+ zZnb&EpXH~bmx_NI`n;lQo|VKN{_SZr;+6CrifR$;TUz*v3a1)~t~_^4*!7A(V|B6J zipTk-SJdT$iIDpKS;;HudlvER6Pi}(HC2wa78}m8AISbSe|CHEXWKBm@_9|0ch(YZ z=MKZ1=+{zTh*e5Hi#3%Q6H6EIEom6ujd;!9iJORMJq(K$y{5leo?=O(VF=&-TIw(H z!EzYBTzXCG?)Zq1-|P)~^_sscKQZrF9-?(iDJDQ6O3&osmwlmsO;rHk<*hsL!;hsUu25&VY#qd@`mPwWeX=SK2LSe z8|fYsgDrBAdF2h!hJ11IXAYc8-*6v|5H?S9a8d6qW$KR-X{U3L>-bi>55?gvIdEzI zmcsXp6=t(@aJ}tY?z{0KB`*gB{oay8pNXQVM-Ka6-%9tYs2;{=u`YQ_AFZc~?w&aq zyZ0^k=`^v^JO@p#zNM3AW{4_3v+=m}t#m(&geTdUT)B)EqObfEPSu^P8vHR zXmb|U_`RdqOE-zxGqcbx_8s3dTSQ4t7XJ2sN2xK}L_qf}Y#Q@U8ed{cXcjsydq)bL zo#Lr`7AhCL<9lhB@G;B6j%)9z=8ipL-1nhKeEUusgTf$w2>dF4ptMh?#Pe~3(a!H9 z9XoPM94Z=wercb`W?HeB|0W%ymX}j{x3418aR3(G_)O0%^(dNMCc6y2lJOryavRYX z7Zu;g?}Zsv-q{DmgT7O*^LF(3MGF3|{y|d<>(GBz$*{irlZqBJq&eY9Xl(qOUJP$S zgYtSHyu}|fNe!UL&57ta^e_3xw50lvx*~7GKT2*EK{}>ga5h~B(;Q>zev1U$GN^?A zDtD$mnH}+LWhK0P)01YbVaJ0)7pB+yQrhkI_;pJcf&XPt7(3XjX6T{!id?D_*cKK> zmC^ddaQc%L&F;p^c(ivk-B}t159lLv(|Fo>B?A6;^-*ovWSXMe8ljn0uyp2hO7#gt zJL9VG89SSTdxs)%T~(aTolmvq2Qyz_fbIhp(~q+)kagbxpL;B)8^3^2L#tt8+-ln9 zNtnjZ+fL!@X<~QI1Z^;WUL-F!WNnXF?Q!g{MICLO*`pGNU{E#Wm$d*^MsxZ4GdpVh>kwfAWqpT($9 znjvc8V;X5&m-zy7Je~5Kx<%GThwbLb9#KMmDkt=eut4>pZ^(R`Bhp`3U}fridiTU0 zdHI%T-nE?0n%QBjjTJ7&e52JNHkegtg{0tLRFGwbWl`4n-s~TBUT=ZT#nuR$Qwcuz z%&>1b?^jOKgGu$8IALdt2jlfo%53P>UA9;^vMNq;ZRcUM9Ws=>Ke57y&mp#hBFhNF zu2;j?k@l!M$QbeZ2GDhMz_q?6@NQlOCVL&QxK~Y7?^_x6?Htjkn>k7r>Y~9LM>OeZ ziDS%1`i$Y4a$9To|M^2fPEI%-VT<=Yeo|BsGr}SESbgFvCA4>Duel>SyOvW*nKNAd zoM1ZnJ!OomjZfaSaq9gW%CF65zqr?hvOW9$_SeDq`t{+>jNrTubrI{-03~)$Y1R9> zaI|&9lKh9XZ9+Y~GIQrMcka@Gx_k~~bx%}lb&Jj%tPfR{MtnBwHM-H!1>t;#(GcUy z^prCa=0BUDVa9nXo74c0%6;(U#%cOd-xcf2nqe-x-l`mNMP`W~A{QSav(9dyrva#> zbC8@qyP?{B1@`tTBKN5c`CJylfYZCFxvM*tUJ628_d*Ie=8nE+TH@~1t<;ve^`^%{ zF!j?$>iX3KfA_aSNc=kLJKYm!cZcI=(JC6+&IHZY;)aozpkjhZ9HY=G=@w6E^u<3 zOwTua;mDHCXfkOU#XR*u=PL>9E}u#JE#2{1HvtKKcnuighN-@tkalwc`@9;!HMJuO zf|t<0LOy?TA)lGNV>zXj@cFS9J7BHTYPw@z2jBk1p=ioF3Tf+%8BOAF;nzmmKDrj% zQ}}$)zI+~0kpoW6i$(eE9W(Q ziI(t6ib2ry!{mS1oX?PqM*F|VXia%d^g7)JebP>mnJd>@e?%eg-dW1;S_AVuqA-Qs zf~C`|!@GMVR_wV#@h1&&entf6%x}=K9|q`sqBTy>yiHzSRiX1O9QSnY)1oAOEOZOU zyYxp?b)Fu4x`v_B!>5$VyznJHtI~qkp@;tcqtv6Ja4mX8^HSLf`Z)xF4cL8o^*b$b z2|@In_Y@ZJg_qo-auIj{OiS0}Z^(2TG2-RK?lKhy%_AOD~$LrO{iV-Oa#`9m8X z7Sr;&oB{2ogAuKsQ$RfM)It{t+aA-6@q{<*RBdAOfYSF1eCFDn;fOnA@J@lh{#Ehp z^$l9(tboBs1MH8zN}_!rYOXiLto;}1_Lu5qC=H4rl86dAqogV#k9 zIDF;r(a{fnqifiCso9GtG=k3=?pY5(Pv+4Rr585YxWKmcY|7ilwR*1qe%vvg zES`Db@K`sTwVOg)Ej(~Wxbry|6DT~)9oIg4An)xMdY0P|4>ozBeTR{x+U$mxNsSS& zRFU;#SG>1vf-2Ej>>_l_acJTu>d&VSBs>4c|~7R$u*a zc6I{UJ*Wq#Edj{u9ZS1v)Pq~H0`7j16y2gOn%EQWR|}z6nRTGJ228%Mppk29qt%2K z>{s(8$GgsmVXsVCz8CE^az?_p5G-xmfZCB0dTnimm^#k%W>77pagJN(vki?|<%lc? zo+D1yBpVEUA!A$hb7nWJ@6Wa@5O438A*4?$9LQcJmcbl{ zZ9*`&#TF5})|?&FEs$ZfSLk!CY|k(t^5zk-H`4;%p6ugUc24xWXMrt`0`M>OhHz|Q z3D@a$guGF!6>PHO;X@zgc$3F7l${M|LRY zwMz2RrnDf`9zDNWqTMJzirQ?C2kXp%RKX5K2Xy3fqCMKQq{3VWTsJg!s&>UwRp)Hf^6JU1 zCUjs8KLW7qKu_kbr^sq+LvV(=E-St%$F7%-M4Jp<=A13VPVXIy&!6hD6ZTSUS6(Ep z^rm)H){HCCV$r8ikBzWw!t4==_)|ll1>}FmBuvG^>7?hqL5!n~rr@~e`ivX;4t*47 zpvFK0W?%FQ*EMG0l|u&1Oy?P@#^&HOO+#joS&j1_&q2$XhD`I>Lu~b(kF_rhS!a*C zm|na9mklyvvb!trz1?E;r0?+m=x`0k?a0F>tzPV7!X>QKEWrJlG+()S9{m?Ar#-t~ ztj7KNm$U{;kCL9^rlWZD={lUEZOkr=E=057jc7K@n4O}v#?6;D zWA$reR%o~rHJ!F$zMl!(F=q=d-nRqYj+?Ocb?Z@9cQ-cn=)(#It;T8jdvQ;8AC`M? z8Ge*LfTQVrYG&6w9G_l@DgmZ!QrZHnd3_i!oG@hx59VOV$YYpJ=YS#x%))EsC$P_K zGj?>qRCHxU_~@+}+YHHg>hKv{9B9rKUy4TSUgyx|lsTKWC=_?BEXD?13l=jZ7iJD;dy1j#0_|Mr~|zdP{La`;1lYdwr5EfN_mEJ>v2|3 zdlp%EnYZ_rNb>B)hOfWMv+MZ*Jzv!nX&WRpYb#r?xRP&DLcOO1#dmx!(Bn9^i9%Nyj~0Lpc3h;*%(*H+kfvC#%oi3 z8~&DOZ*UWD%pe`s9`AW);%}hMQ)8B4C*rxCD#vB+#wwMw4ZrN_%_2K~;tlb? zio;1S{P3m*-lMgb@pNJ@=KJakFZ@+0>fAPB{5xNHZ)`7OW?v)Lx44OyJmUiGsTeY| z13!4*t`wu&PXngAwwafuF2tQ<4Vdb@R-QuGSyU|1XELXO%iDJbCm8FqnTMn}&96mx zJy(x?+bPX$bUlUEA9PvD1{uzH$q6h7&}HwJ$#MrOkKyN|Jz4YuIj(Q-qc~KvCwrPD z&z(&^j78IQ*r>@0oV%b9d(`w`_YxGja)pC9gWrSsM=Ei_LHn_GyEeNzvIF;c<6d-C z)Mjph%3Q?T-MF1}8=v#)$i3~m3l%D~m?L)LQfBSISUW9t#Gy0yy?h&%uh3)`<|^DQ zt*vO))Q#;l=)x&QZpQr4-I#$^S8i$HMr;sjuyvhPIjtY-F~mrNX~?N@n?2Xz$+_w* z?}r-Kr(g|gzg1&OpVYa+>Qy-1SB>S=X>k2bS7OZ}Rn}6|jXRgN9Qo?1Y|1@N&a=1x zw@vQKK3&t|ZYVEBxyM~t{DtmZ$S~?7unT*2N}H?Rx){s0sIc(D9$b`YAzI3*u*W-e zxc5#AFmHTk7P7u4mo{fUe!SL+RTSuQKW@&&VCzoICs&Wl(V2rM3Ocfjnfjda_#D(~ zRAxBIfGapU3o}M2vs3YgoI^_{Rtq{Xy9guBZN+qC`W;B`YA-uyT;@2bF5%uKmWdgE~k=|#!a zH{%YTh{XB_a!gj!oIC3qjzgT~*vw8A-1QfsczmNQ`zB+_Rb`AsO=(${^4*eqr#cL$ zM#-@E^;X>XJwaG?MViIDw&ptU0}w5w+0$wpuKUBmxFt`Djk;^g^-1zUnFe6@%IvuQ z@}3wq6qx^cd(LZvE9RxP;?L5BBAvt~q0Osb)O4y&so0&Jn9G|3Jre z{khpq4!Cv6cRaGxkz1B;i!mWhXffZ3+iGHk7CPT>*USOj;d5qKPkI3i(w({UAtrcy z&lg-5$K!6kH^OPjpHX8R$34l>N9^B#dBc$tY4=2#mXE09&$yPu-SNuBdYtXy!gccL zhKm=9vCe29SM*p7O+keH-;U;_C#d3j!}mDnP!c!rTNhOEc#9L9XK~Bss-R^3cj?9j zT$OrfY|MRyMN-ST-rG82?0(Yw5xId&uvNyY8_!VT%1-WtPzn7%)}pofA+FU|5lhsb z;Ls&SoL7}R_Ul)TGd^D6@+ZjQp5c#idvG~d`Ar6OGAgnBaZ)oIh`rN?L zatgS=sDX2fFGukSW#sPHb0?RSVb1t2Sn=rtXLk4sYHDj>n94hD!<|dG_gZ)SWM0R0 zX}pLyLl<+rUvjgxO7OOo5o$y|^T{v}REUxW(k~>9jsdw~FL<_59ocXwIxVb3> z&kj7yZJfOY9rjH|znFuZ>aIX3N(_0MOF9xZaHZ+XQO|7=`dF{!oK_cL-MS_C zXwWKd|LJ@@@;M*l#xLjes+UlIv<#bPFXaka7oq3Q6}V)}5>DQ5A$Dn9h5F|fa#P)N z@zJogc=*wL?tSz;+;(U^x_zC)jm@2d2}+yru38RvXI~EXAGZagZL&De8?#XA%r+FQ zp|$X*nRrcYCw9G)#*HwZj?3eBqeI6e&LwUNjw#)X!#rX+<3nlKNB00un;F4%`jU*F zCKcj_lc8LLQvwPq4x_Ms824yqEY9t744;_};fhP5(0|qml#3Y5?NS_v-5;I8KI=WX z#lBdWzUf{@Q$z++j~oJqJpc3624 z?-!YJop%nxyP`|j^vQ_({MHLMdR;{w3tjH9wL6aAd<|KY7I!|)1?`%y(3Rbnk84-9>>*ck7FJGWYPBj}$k0zAcUz{QxD;S+3VD(dc+38ccb| zGgURi51pzo=Is-n$}nR*8C`?>N8jZ&t~10eVJ&{TafMe^tBV7*o}(lGEKf4;SD*M2 zXC6Jw+cQBEYiO_eV(*>2{6aO{ZTJ?IR#8V)Yihn=`A$AhwB|b((f=C`UuecVW7NP|NSmtbazKZj>4y>c|dS~&#d-T0GDK??{Qa(l^Vq`+jpc+Arib1S+u8yp3u+Rt~0w+qKExa8iPcg zS?Pd2xMzn9W^7Vnrw-d-k4|#9HJ}UI+s8>Vu3?!}SGIl=AE8PCKOO1HmUJ74DQ-%r z9jVH)77xJ}dpn@3h8jzi9fdyChPKgF3M!8%j>l={uwMEt=Z)Xcm!toDPDe|*~Pz#LL^ncb5BR4VMt>htv3cF!Sb z8`h5EC-n-{kM*#5VOZ zXHN!=z;E=<^k`R07I<_d>dza%w8E@eiS}spa&%_*X4ta6*`b*9#+gadwCl|nT(y?R z{EGTA?Z7Y;4&vy0nf=+KQ{njfC&w;-c494h5!m@4ve~LUmOL*K`;BGH#Rl0kQ525p z;=-DJU0BG_7@T|Fg%#1epqI~%$Ac-f-<0dloO(~d`$n$JZkH$9w&Esy8_4oTC8BSCcQzh;nRH1Krq{W%-n#xQ&1@oWSmVK-ItQ{>OH;6PpeNfn zB8Z-8Qn5ALlPxlKJ)t{u;0LpzHYsRbO}a&;Xf6L|GO{18 z>~3)o>vbgw{pni*+p~h0^72F++n>+UT!L7`*aS=pabX@1L^{diF*B7hjp8Bf{MQMX zw-njSOwyNJ5{sJ(Id+^4VflIEvG6*N&1nr}lSjp%@SQUY5eBj`Cec`-Nwa`A_!g1Id;mB5=3t&HnhNDV$e-=G6fIT-1L%q%YSbq#) zWuh@?eXcK4Xz^!&N0Q%Hmq*CAM2St6gTBtvr{}jChHf1g$J$J{GYz;UH4!V zmRqvn0$+CLcgCz2Qxe{2(35K`$0bjG2^KNk)1VWk4_I_ojiQd|8Z~n z=JX);xr;ZBrT1K?4H(28S9xNRCh21QK9H5{_Go)9?Qwb_+neT&c|nHs4(dR*)Wr=q z(fgxkoCdNf9bK`I+RDNvAKFiJLE!;CHmb;nd2MG{agFvsrjqX5WW*3(K@R;eOJVb zt?l0*8THB4C%xD#nSSUm&}0WDd$I8q4mg(d2+p8ytp}{L$E0r>%=fD&>mOr>ncXy4 z&y$`^*WMQM9MqX;k|&dEwZ=_D)Y!Rxp6o-J6&5C|l1@qwc6X&E3YT8AX=m z;KnYF(8r`o1s3qxmF?@ThnZjHnf@_XR`9VW=4r^Y`czjo?W_)NvX^7$?Oj=TZVxOB zlx0gB_{=**8-+r#N7YY^WgqK;Gm5|Av%`!{ z$Wp-#KO6DrM8*OKcgC}hUogj(F-NUVSe@2@K_8Lny-=nx=pz~(My7D61NQtN#s=yF zL>WrRnTqft^9`R)@UAyJ8+2=_ZZMOP}M8LLTF*NMX+#Pcc1-#{y2Ya$JX6^sweJJ-=oy)UyUP z#Ln!)%kSK2qiTE@=FGH{n>eMpHKdQniCrl9!HuYUf{k~mf7fi`_6&TAvpe-;^ZNpR z+y4yJyd2o*u~O)*@&dQgnwE90G_ImKr0r=NCUaB(cEO-d zjrcUa2NUn^irbRDVlurubm6utexg0P)+d_ujVm>Db@+~pyLV#~j5V-eQVOS!Y}EN^56!>Uwvq%L6vdsS{iDRU5nTrP!+! zWfo>YdRIP4v9$e4%zjW$4BJNMz+Wjag>+q<7c9dH^yJy2je1xpC(8^*$g+c1^zp$7 zSyose&9XlkU~7yVL)u>t(J?}k?(%G{atoSz_Co(Md3JIpy`PoT8z*Hbu)7}{@#Y$1 z+-RZ5K1DX*_7W4kRISKV9*S|whdwA;qQoo*y~jbCX4uW80~>g*4)yrv$bIa<#?zU) zPZKOKYAd}%vHdAtT5gGpgF3Qpnl-rgoE09I?Zk=~Ji>%JYpgy_=LeeaBVW}P zF&-`(qQMO63vomZhi7EEF&42OEfpC)JJyYjzP}s6&ILO}YqDuRJMiu(KH6z&u~mXC zxO_ke-!$vYe1PbUtzrt`5{?o3G45t(L)9 zEUm{fCQrxrCVp6VRF9nqO~>Luf9w*a&px^((wcYxI(9Q)=4LS%vm+40E*r4uE@9|g zF$CvLF=SgBhhyiaAS^UBVpUav_{=Z_A3QQ*nk57A#NeUWy08};vd0Z`Ck;art~Xnp z$HUOg!_iOFn_Wroi#BB=aMC7YCOz5;Wj~KZ+GAv#s|h~rIT|lX^hJgVv2jPQ#3uKJI|VrC}IF?-56ym%;C%a9ljuoN@k5+zqV= zJl@BG9qsXs+u|CD)s-|B*Hv-p@lhzd(2{LBc7yX-8I2Y^E2ciHnA0haq3=*zu?4;<4edExXW?!r{^c>=9wd z4z3!?sh&whH+6fq#%2Kb>O~T+-)Yar%rWFH_nV0OjO^L@w7#6d$5cGM*^c#!^yV`5 zO~R`^Nq=_GDDGa=RD8JBmc4aN$tx3 zk&X4A&DfN_pSW??@^IfoGszk^m)B=0o)(#sj&Nxd%qhUDai+}EPXXUNTZRwo`Y^o? z9jQ&PptjeCeJkyPZW~tO*Jmc|)+`O2_*NIHDulo-O*v=4&2~MduGdh=(%Yp?iU)c@BV(I zi*Yxe;Tf>o%0YPM_#P}P(r5cF55qdueOTE~pUuu0jT*`O+uBPg?ZCQTKY(9p&#~{1 zC`>XdMEQfdtn*3I!$_NgFoSu6F z!{4g1i`Vwy-d7cvOndN$Ob_A%w_BL`g4PE}PO@8WV_tYy+SfjUwk>yXV@(&9?sgo< zjJk&hM$ta^mXo;f)O{2@RAGLtMR-c%AzlknVFN-1_%fvuAKmWEOwOD`)tis-jelpR z*8My(%PRa<-iftND#3&W)u=GA6MKKR6xY74!ETp3vWIq8@UnX?_I9Ur|NJuiyyYqO zJ+I6Ti^|cU^%=UOGTSh?0{uq6z@Rf7*n+*cFr(-tj&tn5CMn*<-Q8Z}#N(t3Ir=`{ zORd8!J0<2%-)5J-^#=0_6`8Z)W3;w<*EZgnWL0D6LVBNLj{;M#d4db-KA^yu&hPL@ zcdLgOuWgfOAJ)9U7hCJ`vA#U3{Q3&J!Y6#YL5`J%yg>|Yz$R@ucI4q-!u$*BTYpFQMba!F_bd7?`hh`8 z(v0`I38%gJiR0!i8rxd%?zYypGwzb_yZ=7#-uNY*iA5qTI(3T6 z$fp&!+IQWPdLQkV19^vR`xp zsL=#aB)dX~cDoYUUr?Cyc*=kFN)nEaa* zU~1%l@RT!572cyndEbV*vkyVU@ZWJ+4V%Qp9{wiZyd5%@ppMvg|{ z=FSi1gO5A?hIn|k{|AAGU$9T`h<3xrBMAI_gZ&42`29A6fL~mtrrc|MT3Ye|YwO9A zCtFRnw@ONhu^#R_*xJ^~$aE$X?ZQWup?e&ys|H~>IMy~Ym0XmZP-7B-R~pn4RMM0JdC zD3{_e0nF(BBgifyzcoFjU_nPI(D?~);2qVyM*y?Ss9v50FgZ&1 z*+=Qz2{3sxfFnVgaGuImmr%KZdQRe>O#Dj3zn1uWR#INC0$d<|b>d%7{7be|FG+m% zgl6Is5V{lY5`P%+hY|m$9{@STFHihOh<_jPHy;6*L;RD8KY@6y2;YeBBte}}LHwhL ze-!b5ApV)eFGc(Zh<_*XehUr+oZ;-5tP%SM1=;vY=>gNeU}_>+kL6Y*~({#C^PhWIBEe+2Q5AYN@kE%DAKG!g$^ z;`btcFXFEx{t3kYf%w-De*y8oApRKQA4B}X#H&GgOuU(d&%~ck{CwgMQ<4J1Z&bdo z0cPE$(dG)ZUjf~Z_yhI=JnTlYccFGl{MU##gX-#M;!P%K8c4x-73#&CseXR|FsvfC za;nqkNxmnjUp+`Y{w{#&#LFir5H3+1Mg%eOzx9xUCcYHVyGZc!gDl*l(V&8Golr)Q zC#c#>!74K;FeexhzS5}vn9z@4MTn*m-c?BozJH}U^9mr8^3Zab>ImgQp7Ow>JUDD4 z8EmEcOK9Cf{U6~5rDYZ&lQ4+TfpC@5WlZ=)X-g#RUQgvma3I(bObKJx0QeJrt_Ju{ zxJ{@aC=<3*KUTexF>-?`LvWOcgz1Am=fI{%rg+n>PQbhLFSYRUEQ+*jiC zAG!Yy{+B<^xZbHLPi_4t7qnlpEv>Ed2nxSwXl>0TP6;GeLuN~Jn~Y-zJf0<>MzTQjX8j2PQe)!ItU1t@Asr`puo z+FUBJ9+IJlg4%f!Izd8@p(!NP7Egq`TwC^{?Ki=rn~X$MQY03+ftd?scjl9iDYH(`j&(7o%Hp9zgn!OEZ-^#K!Gn3 zks`?sYm-SPe0bEB%K)hW+w6VgEF`=xa5d{oo2#OfbX(T{{!is^NEwQWNoe}tD={SY z*48IutMn>VTJ@^*+9DiGQ>uD3Wty?@Z<1-8MXoKBmA_=$s`oecR)sbRQ_}N4swr!< z$N2aE4ETrsBR>`3-y^@P(qUADe^=wOD9@P`kp%xyjcSv6n`|V37$sEVQv6S9SjI1o z|G0*=v{EHF(@hfYZ>pH2F|?8le_d3?#I3DdtBk1Kp`n%OwpLJ5MVlm5s`Sn#r>sL2 zRE{s&tJs}+PB5mJgePjRVhuuPnqU1D{(3{6Q}Lk^qTjbyv69PN7Gz2M+pAQ`6D|ze z{QuA{f9Ted3JOm&|IlZePq){xRt1t@o0Qt?SgZ3`)=o=g)he_3LVI0nX?>z1Y-wdJ z(!gKvMNK)bRZp5iY$mkOWB%V1ee@rD>*W8_ez=PI;Oe%1xUDaq)%dF~)}RJJ_Iv;B zeX-(y@sj%|m;ArE6eJh$8^5Y4$4g1oP}ZLiY6(vX&wkmTllg-1lJJV~novi0LwHMg zM|e;8KoAkcgnGh9!Y4ul;WOb2K~j8@aqh#nKeC|E6ln|Eilen*XoY&C-@XvaKTfKbnL6Yh?RpV)f5# z|6Oyi+AMWtRcRSnIe7&|ntXOp?%1ibN|&y{Zy^s^RW(qjk#v^2vb07w;2$K*5UGFl zr3w5++3Ly`|A~0DX!1rZs@-L@d+7AkrRQ78B)M1bwuF-hCEQq&@El6Gi6r4<`R_^i z?EieiiRG}=6lpogAuJ*k5Y`a35`2REEgc>EI$7F6NRTBz$j!$GLV`Ul9oznG`~5Op zJ$_jRdq_G~dVr?Kn=T4+P)>0;%C=*>Ts!?Q>UuWJRsZV|i_3c3VEt{?aK~rQ?jQN z*KhfKBYW6?_sRn;vFEER_i0-@88s;?B{eoF5uy?!k|JXhV<0sxJTWpnUb3YyH7b?% z7U&6Lsk(A#xuP6Q?@T>g2RYcT+>S1t+Uft(9`0`zU^W!|k-{;u|D$I3|Cho4)bjsA zE&4YPO}Q)n$Zs>*|Iz61uaV#XqtT&d<^Rpm;mfK&VqLWQe@3;;U;8f{9iCETfAwx; z|DVvVf3E*8wCjH}I$YoIM}9BJ{trfne@(Lne%&T@WnpI;q}rCxXt$tk^*}=ZXCaw+ z{drzIun$A_oHMCnIMIK$KE=2Md;>CkW6BG-?PicZsSOT(mC%7uSA zQPKJdQ3;axDH}=YDG^cn7f=^-^K8cgU<70^_Dk=`#Qj$_rEhD2Ox6_Z0O^hS{@JP#~L}F^oVSCiz z{yUd#(x8}0W^PG|iIjDTh$J#iqaq+VMWy_W=+a^nD0xZgX@4I$Iz5#n>7A6CrXQP1 ziA#wJj~L&UIDTX##g(d0Wk+GaH6Y!YR7JKJAH(C$N| zqB5 z5}QmFiqiU5nYo5X{#$QJUL(fG#z*S^u5Xe+zXc(={h#Uvf8AS>z*Grqd{RW*-`?S` z$`wiFFY(l$oRm(HCq+c0r$A6zIJK_!1{9G*bJ(`R3P_=Pla!vSpENl!O41VkuGvI{ zQ$vg=C(rc6_F5w0k4;F9kCMo;y(!VzkkoK$4^+!3=Tyle+gpSWwZgR6=vaz2g=+sK z3O!gN+wtM4`s1QVeyLHE3UUodNlHtKNQ(beViFnrit|_Lr&3;`(!f0`H7z!=y+QvH z62&|*U2;qC{gsNp+UK8WC#O&Wx237A&Hjq*ue(aJ^rx8q&N($bnc81_KGUer_)Yz; z;?dy=lBOw%;V;j&CiE*u@H^n&-@`8|ZE{jdoTTAIlHB1p{kN^?-)otP?RW|}}-ZDI%T65%7NeiZm86#=Uf72oS ztt(Y3s-$hTemp$`QGXnmo&UoJUM(^Ykax(ItA@lDpTGczGu547JD!W250{-6pl9*kz>s) zGkz_Fl<7sT{H(+3%3g!r#H7iJ1ZV(aJ0%vOW!O8Ga7?9Wt zZu`1|k9;jCy|n_Jf?M#eXA77f)}ike?}9IVv%&q06|8?V8;%(#1ApdNxWCj1f^wW- z{bwgwICeJlX*vtv^qirlbrqU=V(2h(AtdM}K*h{{pmfayJpE6?#%KnXZ^y!E zlXQ6b?lN#0AK|N$0u&5c06*g1g5Ke=pcuLsY-EN)#!pYE-xmk^f(q#Oc`ZEO(-X#o zF9pROuVBuaDA=q%78bjVhpdOKV3O(!^76J&HdF(y?oNe_XJHVxs2I9m^n&X#C7@JS z1tW6IVBw^Tuv2FxxEEGK_hGkS2g-q*LMzzMWN^W*4p#fuz?m6#V9b?(Zk!l4eH#OP z^#(xZr!x3BuP02;H-HJfro+9&?_gs&88n>T;JErFDCxcd4qUtd7QTEsKNt#gXL!Q% ziI%YL(ps<|2XO56bU3za74#3e2M@3jwsp}0-$_3qa)TKpKiCHm)4##AL&HE*<24lf z39VkBU2DLM; zfo5?4H1ymBTD7CVO3eXsRL4P%w-kI?G71hH$^_jvpTK*d8+3`e1AD6z}V5M{vlsy_?zUq3|r=I~<$2Wmj!3D^$ zvxbf#36QcYAL3r?f$g=GFtyu2;7@%9pP%GH-SSoN?A2^oW4j9Ge~5#zWBb9G=FZ@~ z_87!$kB5mVuCO@N4mN3=0>MiqSZv!HzNR^Wjhqg2>L>++6vu;wXgGN7&4;wt(s1^E zFZeoRCnVBg-A&!Zuw?m8IJUGAZUqHGMTbwIzuF$Y44Mf?BE~~Cjs=%c8JLrs2_ZvF zp?_pCBs}Z_cHVX{YH&LEO}q;p!HJ-(bRNvU#DaSCJup$&0HLx0aLoBJyq#1E^O`il zCvFDxG&v0`V@=^w`F=Q{9t`=}^)=vO$td_za1kyY7zBQ0J78D;>+ot%KiF5W9I9Q%L-&Xpn6yX?;};HrpO5>) z!7cmXiH0p5I^6;te>{Rn-)Q(CcM?paY+%?>A$YY8fC)`SkbbTK`Yd|_`?72xdQl_D zUekc@hVoGPq9<@ix5Ka=dC>2=5}l=f18V2CgT2vlsNbs%{!zQ(_W2z^@72PnDc8ZM zX%b{Cl!aW)6u7iA2$B+?ftb!it{XTUE2i-CEXJaf3$=}YtBQ-fypq} z`w@H%-3*tqKEwWcYp8xt>h4Ah;ATw%mOSGX1q1TBLT!(_qK@)!)t znhB2-cEO~*ogrhy7U-sG23035;rq*G$bH-bx#ybU#iV$U-}4hND;ee_YC!Y6R_KEY z5FTR>W?FN>_v~A0Plb?|kO(VcoWNE%3T8j>2Ae0{;IgF~^bYR}SCemm&9ze?jBkeR zuodLuU%<%f&0vt^1>;n2L(%BjkR0v*1-wTu@hzgq8foFz;LqJZd(B zxZWoqBi8}s8d{)8xDm!r@P~nByTSkBNU;1SfCnR2!{^H@pp)-n&>yf9whtQ%>g+IN zIj(?meJPk&Jr}OloB(0i7n%rnrL)p;u;|c!I8uBQ0z6z3GlUI516Jtf#X+C!$}B)XGc0g+UZ{Kaz+@WJzM~t zG%R42R!5i_y&R-WyTPVulc2fz91QgkLnV#f?<>_{;prl{xaud^?lyssi6yYSv>!a& zJrs`ZJ`NS-ok2C%5|V~FfW^>USaah!+}AIHxG{SH&DKNLvE|ULJP@9K{sBvz6X4lg z3wU#PHvBxc2gIUVVAc03SUZJ-qk%j0sJsHRes+K#11EsB&O-<~HXHobEP`Oeaxe?2 zg5pc}LAm=%&`v%Du`43Mcw`u`AtK1^ssf*ncZHwVzJP2 z7_Mrbg7D$%;OQ^{1m;|Vhu8(GCwhaWPBj#2Z21mQ_JW-CoExc7(Fm>mabxc35M781_8q46$&p^QANm>$J}Sa-n$slB^o1SW1L1hnKFEG@A68a}L$`j?bk9wYvvmuk zd`JMN#nT}B)E|fAosF@&PHA9|lc~rnO+{ zo`z&(t@ixJBQq?pdkEp$^$%a?>myiW)JXNSNkA@juMKlsw+Qpt!IhC`P%-@ z>v(idp!TSK)qN!+2NLrE7Uy7PB>X>_@%Wme0#+xKxJc z#4I5rCv@l9RXmm4rugB<#q6iJxj_5)65dy@6!U`pbiei1$=o^QZM}8J?)^3~Q%=m! zbL=y9i|FnXPsbv|otHe~1uLEtFWn^McfEaa`-PCxk$ymwqkj-KYpLGk(`~()!Akg1e(-XV;DrvoPxc`1So--rl0|w)29; zY=h(6YuT^!1U)N%8V2}^+2WF&?);<$y!(sB&3E<`vl+544#`c+;;pQjvDAl&+49}H zpEoaA$#Wc+o;b~s{JqmYX^ol3V>^%d->?<4Pp|b>n|o#Ps;57T@-P>(F^Use#;KKp zSrK2JKItW9w)>P4o_@{dJ+0CEvO$;RFHF*2XTS;aD<9p=)Dp8}9Xh6D_g~0UmU*#r zj;fgDUAvK6pq|JZYK?meJBrzfeTRJ0eRFskCv7{l$cx$FwEfSdT<7v^9}fPREG1?G zzugISs?OuJc8ffs_*2AWM=f#A+BR44aZ|zA(nb**A26u=!@vT;wLJs+@A@cWODqF> zd{bB>h<+%SaPYl|-R`#>>uyaHeBJcY;qhw`)97*IX!q`G1TS~1l~_I(v4p{9ySz8e z;Tbxp4>KVhdvXObb(8CeX>+FYED0#75<6dgtvLE-di_->`>vfGdJ=l@l4G6-FqYyvB|Z;@6PsI#_Lqwyyl32^0RFs zI4sW-?6TM}=}3`?`D|NORbDes;2K@A_0b6t8|$cY_EOChLAL*fq2|X#tZ{V4dr#H5 z0+oW$vh9b7|3R~sT;FB9M<&Pnc@>J7+`0wUCs$|inlG=qt9n4hl!A4hJ&nlcnFf1T zE9?`ox0kvH%(?8qJLx%Mf$<&@ea|$~{FU8up0~jPjig;7wrSFu@PRKD36!cP6+PV{ zV!M6C&ZYK?1am?L9GbaZ#16hO&z%x9TcBT3?%=si#D)(aI;Hx?GC^;{kZi}TA{NZ&8(9hG3r5yHs^bPh4?KaP#}+ zJiGHYQXhy8iNC+^>ANW2IKPU14U~S@ilf%0TjmQ?wK3R)^6Svw`QwS$WdgMugV*Ge zJak*T512hBOK{+_k*7AvD{)xL!+^WX1s@9B*H!KoF<8)fRLp^V-kRtIm6!L5*s-_u z=dDjJ<~`nQ=K6BKh_${hT_1KLO0dZNcsDyLFZZzxBXSxuc>N}8tT{;KnZxPs(oVHziMik{wZ!(G(s0_Js&Hc29?QQyO=;l@+2=J@f zlzmpj1}%wx5MMS&a9W`(`D3w&ncP@v{rb);(;Dsw~mwyDV6|?%Kck)!f<_R957w}v>5=Tv<@%F=W=NG5@FA=DpTYsSW zF^xypm-;&APUbz#-#F|1Ycb0$596Pg3*vp8m}h>WK}<6ReVS=}Ww2Fj^;7OO=aeIv zdAt^$lO0f{bh(E8uuhKj(s&^B9xM|OKlwHj6uj+o^zsd%Rg>n^-s8$x`%LAv@T*LF zcs57Db%5O)1ecH(Ab>y?lXV(fB+_mY%Dxq#-Hyh*n5Rfu7yebyB{|Xxi1VVdf^vs zNpzQWTaDuG33op1*;VRC1KoeDN>t8WVZY%WPp-Hsp&R?Z*>FcVu=&J5oi#*W0U!k50wBMiq7UF&bH zGySUYu*O{a4l&X6{Q>FwmxYdn_}o)j;xDJY%l?wEdfWA8(X)@_KkUtyxIG#FHU-m^_KWIjT)9A z5Z;;t2ZkF-{6DK)3M&$t{IBZX11gH8Ya4A4kfb0Am>mORmK=1nX3QP~reh8m5VMG) z7#TB0hGPN~c+45I=xC2(Kt%;Jii(LO%7CC?n*Z6|J?HT9>3`RI*SFSPw{%mr_p^6Z zb#>M5>YACVdVOtlKk4`Or#rvyewvSHl{`!K47|eVcqlu;r>X`$$~XgF+phY2pE!Pv zV(!nj8%Y0@`Cn5H@QYhtz3DWa_*s4%=Ir8!)~N7yQ*Yv}ukNeAjsJVC>{6r)@u7_y zPKe~|E;!+2YfF6AlVaH{e&XJnB@47PE_xm7`*RsvlK=UBKnL(Dn^#FScd#(qB{AjU zhdI@%)!%y@Vp)SXMYkFNUNNAy+kq1-qs;}~qjw(&PmZk`&rbO07oMI4USaYyJNP1N zpWP$)lr?z&uwM7lF0s)e71NII%0>IVD0gt?71sOKqpYPdJ(HcO_qpL)^HG|6$4`FH*U4fnZ|tt!$#{t-;rrL-oPQRpv$^2! z!Y`BMy(X^yqL0a9KQ?r==xef8Gu9r+57QxvZkX63;l>3Ht~4&>izSV$(ybjep4Tl!(LSGe(J`OMVg#)ho9?T z<}i5+|C~g-f$|=0D&*_yyk}cOoew|%x>hsTq3#|1i1*Cf?pig+TYcp-GJ2)zW6)pj ztXHOfnJz!NZ);^P{XNre8CLg-Wr#fbWv3yWESKH5l-+mF$BFVIU*Z*}cJP!*e`M@9fM?Q)t{DuFlfOII@KQZ_4ZB=f~-zwKHPeJ<^vPNy1-#u!+Kz?kVPX!LovpvxPOTEn($ydbmH{oIn z**%S)dg#{`nosRLVPD7^_jUZ>R4G(r6K0&GuT#X*`psJMWO0;y>WSq)^dpK``9{gE znHI}6=f2b`(8m-pEp;kp|I3IDv!X@zfx&fbBv=P55 zl+F)v>5Y|+hfLk^Jw776%U3eWZ*U^|28&5Fdl&NORbE^vN#|$Lf(Z0(2`eObdF$sJ zqNAa=w__mWS9zBg9d`4J1+Q?_f*++cJ$*Wdfj}fm@|2gatf6lt4d*?{-T-BM$#*g^=?dnyHnFe01 zUUqZeLq4_k?r6V0;Cq$p-`?*bf2Bdhf&T8`6%!M@KR@8Bq-~pcq6*>re(c@$fbTx^ zTAwkWF+bV2!uPL^4|u<3k*5NmfIl1OTlnEV|3W?FmgXGzpok84Hs0q$tEU!>+y*}O zf@5vPeSUfWPImoO;8mUSUT5Fq?@!FUvuQN=bQhl*>+kXF!uGy)>I^>o>FTR(@9~Q} znzhq60k3v${3<(ze|h2fvwAk*i@P+Pydi~u{KBJi#3#&misLs2DpPnxqZfDEKLH<= zw?6qpGM~6JRNM9f&4-><-Mu-PU+I*d5cW6tv!nZDbWY|ymON-+8V+8!tYf|RcX_Mk z)oR?C3_i{=S>@2B&90;3X$JIJY7^yF&%zJN&m|d*vzgUrslx z@!$Tp`D2ARlB_&<^#&6oZ4w{xbHK2OkC-pnuIS%bmc(aww~9@DNc_Szjtg(`O)uGM z{V#w|zMpjC^-ccl(~zbOc7s>jwNP}t$r~rf+^)9Kd;s-f+I>d(6LF8qAzO{VJcbznZb-L*g$-%uTz( zH~Dd9U&%$9uifk2tkV_#U=8azHTM(0ShF%NfpOJ)RKq1b5deUZ27(xYo(F6MWN66}|C zfgc|b(WmGM_}C{s153{H^A-%KRR1b?|CX}ZY3KOthPP(SJ4W-tMwtoPc>Z+tX4XdA z!E1w0blP*4zYuhKZrn=n+@TXjYtHbeHF-`eXA$qyF@MHs{;6ws&oyJne);5z!%y+g zM>wnFdxKBk@nUF~lYIAkZo4Wn@Uatmq`IHrpO)ALuWAO~|7!7U*>T?WRBj`e>fmLg zqB>PP#vk=q^7LDI@Z7x#lfEA1PfYA-^RWo?Ma8T?);vAT--&55%dT=#(h5eW}U3c)`8ue@$Gner9i?qSp`DziKt4~cJzE7Y0KR5HuN^*C9 z97O!WyQA7{yK+Dy0UzdBZ3*9H zdX960s>J7BE@v0YZ#Y)P%*34d2D2?p{Q2r%8-A&iPV-^)l23V4*^Hc#muv1IzKy3c zZ8>WZy)e!e>!O_M@|B%;*0I}%KgvHl5x%0zrI;-&vvOp)#B9uuxk`7Q#O+`QkKGDY z9RaU3N*=OuH``*p?eFR{Xg>W!v3Tfyb}HI(abzpv2jop~KFs=W_P0nkBK@d$Q6X_G z>in#CMmI5kmQ{FD)b}_m7dg+W;4ko;&#LDwPO>{gzl}XK6ufr8@&*|rzM4>WTo ze1hl9r||2|CbpeYfcdq5&7SQK#xvvDd;gw%k@yPduZNyzlg+&+H(W*Y?@YJK?JqEs zfx|AWA4vF%X|9$$TOD)W{ZvEnipZw+fm+5gb3ZOF!h9<3uSH8cUt*UwJ`4GA1-#46 z+fy1|W{v(>W?g#&_+D4{JT8~OnzhZl`Z@r-t-CzoWdd6jej~7pH+a>YiC*Wfus>XC z)$L{hUYF9ycimOCAg^F))-%l4byXYOo^Xx*-NxUw)=}{4vAM;H>um49`z&J-;nj<@ z_K9rObc;O20Pw2M{TgQ{GUsjw)lHg#R}>q2oxj0S3f5JQH3H8ytNCHoO;$txtU=6U zn%^4@?LFicQy;r->U0FWR+ALiIEl5qv#FrPQt_^8lZI_pH(CJ1nD5U`xLW;MI;=i$CwOZIAV9`()sK;A|bcNfndXJT58b4i7$g zUB$E0l3B%si%+%D;DeTJpZFk|eRHgTz^Lu!oSyz7a>}G%P=`G)UbbG)ip7t~1 zY%`dANV~{M#tY;dPWC9rxnwZqFs@4uzeXPVV0{IyR|d|he6(yY=I@86_AJi@Ww7o} z{U+voA1Oa#^YW)YB7^;?IH>FAc5DC1$+~M z$rj7oel~rt&&yzao4>AZqFSI)ZCX~5v(03EW?M`ftDh^k%MSdmZ<)y&EWgn3HMd$m zq0+*adcRC|&nSONr12DudTXE!7nI3nZ0&b@+V?<>XX1jd`iM-n*raItrHc#Y8JA^0 z^+z*Vz?h`Qjthb`*dFbJ{%$6#xoWO?uu7$wS-oMlJ};9UDcLr;k#>zdYv)${A~TD* zcYoLWUf2qGM6-2{oJ$s4_{rsT_Rp1?t<&AjxL#RI;~6lK=U2$Dt!O9Xg0fi1+)AGU z_*EK{*+uX55m{`&tu}v8;Z|r~nrP~Aaaqi=Te{CnZoXz^4eNLMyIIUMM&D@~7p`f) zHuAeZFN^sE%}JiSaIyUQh_AIdTf8rwd^t0+?FxDP+)kA_muxoEII3GuRhWEg`HvZT zzigcKs!!D|h|r|i$zSNFX0vlX4L2TG6r`!JvSXn>A{%=;kBO|ITCQo^BI>#RXg2d+ zH+W^bV!3AQx30K;>c3kqncrdZ-dpo!oGzPL4heTYz*cI^;yPC1Y;#!urvszAU>)=8 z=kw(`mmF4ga?_OuFRqr)uC>XQ>y^V?W`{n%`7>PJrA1LKE+~gRJNTr{Ol5?okNcpS zoH~cu&AhzCm|v^u*4D2H7nj4ZVT9b|$9PRj?IVx%cXQauAhlg)+eMmClinZoc{yz7 zi;C%O%_hi)R0w#cw|URvE$jFsnhll@xOw2GzU6yXOJ09QZKK(mv~wF$^?vVJOp|5f zZ1uA>TLZQ?;DX+>wtmZ!JL<76=zwi9BHpu-gv%Re{hTNFyJd1ufAl@O(zM{CvwpOu z<51;2{oVJhZcgiuXY`XaFD*tF>+{~Tp;j$6l~XR%^qqO?mEI*sXM&W=Y7CBX`gHNxGD1WpAX*F+hARNd~=y%ahT?LVxMRF zmiQdSyvEH-++2B{L%RaKA3hg3xIS*5K3HC9_{uE(RD2F_G4I&)&jU0S^xG?O>W|DQ z(Q5b_)e=ny$K5aWM?bPtvi1+n@Y(i`FuUp;*75%u+TXv}xR>S%J{jP2c)!i?9M(ax zRAanmPLbXwkC{g1`MQ4d(_CNqt~Td_&p9hiFF3StrF^}|q9Q%kvD;sN{6NW8$|rW; z|6M;dkA;Lr)hsj~rBPlfd8LoQx^?EP!j$>5U!KIvQPSo-nr z3FE^yX&ftj|DpHOu_5bkdHm!z$rtswU5*RVv0MG$Y8P{hogZGQa(uD#*T~2XW>TWRI|gP!ciz{Hp zbqd@Uss7Tm?(_4#{%!#)Nb~bqpbytC&sWeyQf@>p9=_HlNtGM#ICW zaSJtJBMxEwe`5A$&ah$nNKOC1J=R>WPwc{?RrMByZIIXf@~sjV^ob=stZ?NVr;^9F z9EA4&#Cq>N-h3NduW5Jhxd|8diM{ff88k6$seHhV<3;+rpO~v1Z`;avj=bv0IE=qf zEUwS7v6I81^a*))?jJ15#Ggt^2Vz=!~YlJ%)+$b45P*J(I+=#>ir7Y;1$Qu zj@Pe{r-zuJ{}-};1(&xR({9jYUYeSxk0@lpODXrnc++v;pMT_LO4cd6BiuubxmZfSO$Z4vX@HFjEniNAb~v#A5; zQp7CW>fgD;Z`5=TdX}sAD`Jm#n3@I~uh8u8HzH3zwTRh`xlu8L-y*lO&2Z$@MNFM{ zbm7$n;d1PbU5<+@Vp?n7(p(v%(NybNi%TwIjXOJiYqBs(vtrKKOnqJvGa3Iub!Nf( z|FIrnSZDAT)*0UM^vz{#Im3GXISA_v*=)|P#z5Zj*&VxV8Pc_YPhbsKHRWhNjS!3X zc4g{ndn?Dp_<}{v9`UOF-i;cZ{7T;o!Gb%XC4`y}5mgWxPiS%T<%g?3#WRS{Z3sO;6b z*ID=YCr!^p*Ph!@ME!+wBY=j#s62SZJ)XtgJzeFdeJM2lcc?-rm(b9=-;|B-@iU+H zZPZ|}!v(Q5gmMXu8h^m5 zy@Yl-QnJc4g&#ZE^v9Kb4Mkfmp{azbr@wBnGnubgu5iJ}iPj<-OK1t9$tTx4DU$iH z=7rnOdg;V_B%slezd=<(xr8c)Pp%q&mtQWAKG* z^Yt$gNm!qW8Rs|KxfGiEI~1#mxL!il&1WpTe2b4bv&uEDXEo7QOK9{uDp%F>#;2S7 zSoLi-y5~8uUtxt3?M!Ig>pGhHH~E}Pozljvb`t9>psBw@RYJLh_A1;uxX%s#&4WuO zsVPlFTYsV4^+1zl0kL6;yv5gNVf+O{TM6Y7nr>^n;^1|D;2(X1)z3rV<*rZcS?1;|ebi^&EN0+Odsre+4vp<8M%`B%_@PRo9k%pO(P4 z>gU{JS!lj^7gR#IgzD-P_t|inH@`B?(Pd2ov0Q(lTtfX@K5TO462Eb0rK-DBElQ!$ zn|^~TgmMX0C(m2(Sj!g<$qL^%-cqcyfTsQql?mk%n*Pi+GMDEI+;4;X%J&#V1X zd|(LRx!-^?vV2OQ?ZhVOVf){&>jw6hsoA|Rug!*}8RjK~ZjOcNjYdvgqnL;FV7GIz zk}Kv2j0fnb$Xqc@8O!=U&L66+WYk8yU0C!}J|)u@4~~r8#Txy%5Hj6Cx|b>fOUP6k zQ{}+=eQbWi!O0tDOBbjhGq^bqJq6J?UI9uDW#jgvJY~nbtMu2%FpbhF{xC z6-5-EMWUAw>fb4)^`>KN%k~QWhq)P^JcO1Inx3+^=)wv1xaYIo!xN=3<4WiBE4) zE}=5Z#lF`svhv)M3ly80~ zG_S6hGd?#)xw~MitG}S>flJII+NZJawUqVX= z?bTuFnibcXY5T|^+p&f@IH8;OpiBC`KYB5dr8LVv(63E-sUZnGN8p#V!GmwGsruM~ zjS9+(SIY^d0(4AYDgUtUCL3S3f3Nnz(l}4Y`jfJR(BvTlp19s(2VNcOxyDnPH);uu z-b=QveU>NRVyEr;4Z6}zx_|gC0j`!%Tivy9QyY=jMw}!k^GoLe&rA+8n#h zJmc)YG|@`~P$85n*kLj6Yu zHoub0vUB7PtEx(qN)@5e`+;UrmrG$ab-PDbtSb#7e?sF4Ek1N>=)@GZ&|&wN+nWs& zG@)EV#|<7G&8M(47drR;ut(~UGND{T&sLn=vC2J`bFS057t5td2fhS?at{Dir_Iw{ zyvGVndj0Wrt2A@a5*kma|NU3_Rqo^9$-4LFyq0btzEFbeCDiuf%)p8FS>mkxxZ6`I zNnM@L5<*?vXZ5*!pAEfWcDi5dsv_zylzR|p*2DTIt36=b($%?MZ_PziA(TsK;t8HA)=g6E}^kL<&V^R$Oc^>voPpl z3o&PWX$IGO2xxL*-!F3?vOLAGj~@<8QwJ@f@j$El4|;jw;X{@du*(&sw&4>m;ton%*ci; zmB$X-Th*=juYqL+5@YjqW6pxa7Ic zTjYt@9_Kx9CiI81z^^e8@E6!i(y>E+h-+6Ox$wurj*@g%4E|R~s(SV6obvCZ_Er@Q zoS=Zs&F@2KguNMGBDQxVsqn{wwlEPkG6A+G4m#MjF&c4}i9G?r9}Da-kAT1U@8as_ z?&0a>?c=L#*SHhyIK~Yh{(gopXlsSZ2g2+SzcbjZxUUks18ur$(w}!p-vp@T_=jznPKk*NW6NBnSBTkjr181Vl#7~a4 zb1J**oGRuc&g*bAQVmrYsj>r&xJ0!P_vcxo7WlFJDSNAX#(hJka6P6@;rfLHa09T# zLceh#T&LjiT;Gv1u*nYgrkhPLMbMZ|F|?+LDd+|ZA{YgagBV-b%48e{m0YRMK=o#3fVCv9aRg!h7glS1z@`wY`;S>@)8BeP)sOs%t8xJbhD1__oqeQ@AbsunT03G&%=IdmL1i(&!jmgHm!A zq)A3236T&CzH@}K^9b5bXv}!DDZ<;eUtNH+jcS*7cbaV`Wyo2tN3 z9jF~CGzL+5O>hm!r?J77WE9GK7;_at6byNgjvJ?3tAWGDtBnwJydl=%s+4iS&XwDR z=VK?xzc}IW55y->n=XitBJPUV)DH)ZAg+YC8{!h^bw|7vt^#9}tMw-i4?_HHI1V{M z9En!yg?LhL9Cm~F**F|bh4>uYKwre4QR{w)H^8;Plxq*W{)mU5Wd|Vc4}KuxW8PxC z74;hgeiAA*7%|m%2;!ZHhaxUp@88uo3XL!f`u}Zx)v!aA{$JOZ+G_;tw~gXBf5f+N z(IXMlbwI@31UMRTj}Y;2s|_8oj{+!(E)HP~C;&88N@t-xP0;q&aKu6(kKRUiobEl{ zadX6Y;H$OvR<6`L0zo7rq5xZ=CmG~qBLMg_9=#ZLd&@hb?+1-B<-$P}?#M;{ti;zr z^AnyW@g5!ilMlxg5neSww11BA(*^_90w0L9|aKedIk*;)Cr)+;BfEr1moK zE>e4iOZAx};b$fOr&RweiPuSd)p25ZwI%&765md0zfg(Kk=kpY#J9vSqWXqQ^&2R) z|5=G|Db*)S;+ISLSDh%9cdVgk-$mkSl0o@}O8gQhk>4lrw6hA~Pb5Az0yz}uX>LFthd<;ZHYFL- zQ8(?aEX1_HCxWj#378=-bZsFB&u^q8yJF~>y9?ny&neg6lCs44G>J%4wF(U~q?aaP z9ZuCrf#*6>LgA2}McRBbK6i|cPDLgUNW6;$qJVpg|zwHDn~lMn)4P` zCrd$Z4QVq}>5gQA6E?0G(s-cjkp69J8CrrWcUNi|a>dkY;AyrF*Q?x`jC46MokVG} z!=*n*x}0h(F7vxVik#M@;Lbt%@0A{cM6ki-T#(RzujmORy(c0^JV3aapjn_$&}`6T z&>Rrm=eZyX^FXEV|9tRe@4qFdOuC19m`^q3Tv{1(-XP^$NDMb)#eLj1JZjb>Hpt>h zhKbshQnGB4x#0Gel0`p&jBYMsgY6BZtJ1syVF4&iNQoV&GN)Yl5L3}uY*!-r6ly`V z)iH>v^Jowoa=MMQ*m=^Cs)RQiA(XmT>PL_p9*G7y?wJ;Hn#?63HsqF1GJo8mQnDS7 zAq(P^hY%a|Qb?x41hABB;SU*Dv8)&okFrWRI-$8;WNmzs3c;8-Z7FTqmHFyuSk}T zDwdK(ra`7d4G|k`FO!TaSW1?Uw6Q-`u#|Aea|l%s9zw!kokGGO2-8Xl7rwB!s-~tJ z#c?XoLXdGM%&WIzzy6NsN5IWYAgt0G0~|~XI_*_LA;x42JUL$|2q7HfgieMfon@VI zQ7~$2CMkRl6qORBOrRhH%A|ZL9m<4`bN#kO%;e-tWMT=0iYUd937zXIDF~U65&Zi< zI>gf%u%t5=9sN5pF{8eTOq8qB?X8;7NwE_8PY(2^LZwik9O$%Kkn#!)%<%5b%^n2@ z3C6M}rhJ5=KFTZzT2&O$e=0}^+)4_Ro6uA?rF1C!R+yMm_J>|!g^Zd3Gcqbd2&6!# z|2yVf@+e2!Qd?uGfBYnE*(l{C%3K(j)dNU1{|;u4aW_=^A~N0uvP5BD z@yt4ov>fs_xY7GZh}kBgyUy;2H4OCk63BBvXMFMcS02Z9AzcNyGh*UNPQeco-JZ^P zCB_I|4_UMmwnIZ41Ik4+UkeoV`b+u`U{7Hf^2(tbjG*0wH3k|R2yLVxV@#b3Ayndr zcNTebMC3LptOYrMNQLC3-wa7k;V;lSA%*oFv^JhY+*$BPhT%rH!D*T!ahw<&pj{^{ zF66*x0~cOR>DEy}wTaMcnIGe-UeVa#Ql~R;v{&YhacX z^&UOO7Fm@SNqG_iv*|N}>D&or8ZlNtK+0k;rlYWPD^{sua{*KU08(nen2a8Yy_l76 zkrc9{M-E7-`asw?TH@P>q?rxmAmtS>=GYq+8}4FFQJG5^y=;S&;U6*A9uqKjB=&a2 zwSp6}Gy@D$CP82}W@-rS&aEsYrZNzaQk{pw0wz&K&LU}91#+Ttz#a%#=y>G#9Z55L z$U({|9VRr`(HRpIq|B&QLCQ2RCJ;luB)?1rVj(acJ83EwKb46DI>LwuZK!+;fl1)> z5IiDQ7a+qLkb{)_z!;Ao3ztgLKOhAua|P)X%=A7%5wD=WH}wXJfpmmNLw}o zKty0N1ZLAEw3txre#;RNy1tl9gRqS+IvCQHO#l#4BR_$l{B*;Ws7e4g1w=%)TOlx= zF4p!6fz1IBk!?Bz<%Iha{uNLQh=~Z=1%VkLbboX+Vp;+LDYFD**7zBtvEZ!!20IrZ zL{#1(2+U^CHssUM(TH&c0>XK8s7c5a?0k-%_8n$4)J#NDo`k?0;P}8PSW{P~fi)xC z9EQbUOlD3U4|(hl$lV|ZDK%hBXJJoo8f>Kj)z4A@(nbw%zez^^2CqqKJZbdjvYPNwWY!@R=F2&M|CA=_&Vs;yTCLdM2{sWn+9IPrg_x;b%!q*q07RY=$ zig_1|PGQQi8}V@|-hy}!_$Vnhh0EOw-dKtcw8AmU;P*P{RH0u$9c1!sD#!YY2 zGhPTT(^n2|Gb(01b8&HTb#ZfXckyuXbn$ZWcJXoXb#-xdb#-%fclB`fboFxecJ*=f zb#rlZb#rrbck^)bbn|lacJp!bb$4-hb$3H|@^JTb_j31k_i^|2aPe^UaPx5Y@bK{T z@bd8X@bU2Vbn$fcbn|rg^ziib^z!uf#My6NE?%x)ZeH$Q9$ubaUS8f_K3=}wF5a%* zZr<+R9^RhbUf$l`KHk1QESEq3qfUZgZe(I&BFup~TVo7+Tbg-c(MG-6!KyJ0 zYZpNcpUEPo8QlZWL(n4-1=2yjiO}!*M&e0E;Vp=4-ho6tBoHz{B+mq8fwDmqazO7v zcpU6n<6vduPVYzv;mb@pHAtBZDV}HW1H`3++hlwhZpE5EU#L8dD6lG-O0J@fu*+I6lOt+_3>nu0`s%Hn(S(&~GzRZZsgVu^)htR6U zSg~G;H;b{$b}?4{CB{Mct{K@SZxG}3C~>5^ARh{9DQmLq2rby{LMsX!w#QSWHM?1x^jl3@=Z@yG8isQp_$e#x%{>AYmzaDb5mtClKIa zBxKFu=Z*A&%~b@^OLGZ8BN;N@;$US(g$hA-3Da#zXkGX`#dywSAhztI5ET$Bw{I;Y zI0-?0dU8-%;j8fh;TrKmHc0n{10Mxa7D982(KCY>>Nko=_b`%K$Y&wVFi%_g$tFT4aqyY_cArSNfkdfRomYR0y{Z`TfA*@Vonmj=DaCgX|3|M{w#&h4P#>`poETSZ zEmkxO<)|XXIl&BEIaS^uqduX-v%a*9`b1tCnR3Z)2di#BB`FlRCsK~)QYi)*<@mLf zUM%z|$C5HKLW846VVkF9$s1rElvb_-5qMc)r zpj*z}l>Gm9c!p4T4drJb6$UB*AyABOkRI9RV70=iv`|2WOJ68uK$1jcKo_yTl#GK* zqp+%sj4rHy85!w?l#)??q&KdNO!;6xu9KF0u(G3kON=uZEZ8V_9YDXOMy2Vf)IDQAps(2x!s_Y^W3l?#C{Zi_d1 z(C%^28;;vE5Z{%;19vjIP#AQ!48h7m0Ol$Uu^fix+ z+*NpqQ7EI`WUMZ92BF>?QAcOgaU06K1B|>%!3eB1V!V{#x#S3}CFEU!ufsK&;~K&s z`wOyVsQ=+fSakum6Zxb^V08s~mY8DJjMxHtgK=#ekPe02TU?uiKUR29{wd`39C?fb z-bRTP7}$_E8wHzLC|idKYzx@L;huOQ-{EMlHOOZ#@P@G258KvAlb>4+y`Cul66!M_ z_aGAKTDX7LP`7YQQVkxmK5P`Swphf@h!gx|&_+|?<9MkLkbhC`Ircv~r2{5!q*9Cy zIS@~8^f&K(>G8}-eTzf(qUb~R6p>LrPWR7`=3ZzVg)W{#B5OI@s z3P1?$6!e#qEf!;KxEM>m7$w1Btv&f)8eD;aw_!$3*(aiWs>>H?MsARi!!pd~NycIB zg>MWyShYCZNZ`5tWQH&R@j%cZ&|uII&`{7Y&~O^nFmf0H#ve2iGzv5tGzOp!;3ty+ za1_QO4g`$@jR#EtQ8b^@lM5JxJOdC9hwdL3_T&z_p^F~IaEn1XNTNX z+D(v)_<`=<8~M&dd2NtSTjcQ(X>t|yQ8u}XAPkGyzIgD1H@J=M(51-%4fPn<6kEeX z!iI+YW9W7&FAn`j&R8wz!f|vu1pQEiTtPRuvi`7r1ltzKX8^F4$fF(X`=g#k;3q(D zAh1D@liN56T{YT{T!#+%kozd@I>=>=9R6#!L9U{5I}C4JuP1Ena2@12HjKhh!96Hh z`Je7$8rqax#u4aW#?XH3jmJ=Lj2a9?gB$sYJTIU;awVg2PjGw?r$$UJB^WWel($r7 z8J7}>5PJs_GGaz#PR|Et4BB@{%g`we(R|y(2Gtk16lR>6Dsli;_ z@a{uaDoOLaWNnZsbD?QDQL4ry)MD2K2qsH{DG*$Np!!rv5QKOdC>S&yGy@9RP$)<1 zSIW;wSz$^e1-v$#z6ftQP?CsoE}9IM+$6kDWr381(6MIh>^*P~eKrUV;Vv#)twkO#&}iq$5$W8#GBf z@w%v8Oxkp{6!0yrxXWlO`gM}22_4kR`P$5&qj_hH7#l#pVhEUCuBpxB5aFQU=7E!@ djv6^>dQ+=WA(JLH7tiBuYEB>SG{+gT{|6+hN+bXP literal 0 HcmV?d00001 diff --git a/option.go b/option.go index c4966bd..84310b0 100644 --- a/option.go +++ b/option.go @@ -1,18 +1,15 @@ package graphviz -import "github.com/goccy/go-graphviz/cgraph" - type GraphOption func(g *Graphviz) -var ( - Directed = func(g *Graphviz) { g.dir = cgraph.Directed } - StrictDirected = func(g *Graphviz) { g.dir = cgraph.StrictDirected } - UnDirected = func(g *Graphviz) { g.dir = cgraph.UnDirected } - StrictUnDirected = func(g *Graphviz) { g.dir = cgraph.StrictUnDirected } -) - -func Name(name string) GraphOption { +func WithName(name string) GraphOption { return func(g *Graphviz) { g.name = name } } + +func WithDirectedType(desc *GraphDescriptor) GraphOption { + return func(g *Graphviz) { + g.dir = desc + } +} From ab65f3e7c466bc6463b864387d7cab65ebad935b Mon Sep 17 00:00:00 2001 From: Masaaki Goshima Date: Thu, 17 Oct 2024 19:19:44 +0900 Subject: [PATCH 2/4] update go version --- .github/workflows/go.yml | 2 +- cmd/dot/go.mod | 2 +- go.mod | 2 +- internal/tools/nori/go.mod | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 820e9bd..85c6ccb 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - go-version: [ "1.21", "1.22" ] + go-version: [ "1.22.0", "1.23" ] runs-on: ${{ matrix.os }} steps: - name: checkout diff --git a/cmd/dot/go.mod b/cmd/dot/go.mod index fda46ed..4d22ed5 100644 --- a/cmd/dot/go.mod +++ b/cmd/dot/go.mod @@ -1,6 +1,6 @@ module dot -go 1.21.9 +go 1.22.0 replace github.com/goccy/go-graphviz => ../../ diff --git a/go.mod b/go.mod index 15e28be..2c916d6 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/goccy/go-graphviz -go 1.21 +go 1.22.0 require ( github.com/corona10/goimagehash v1.0.2 diff --git a/internal/tools/nori/go.mod b/internal/tools/nori/go.mod index 11cbaf5..19ad8f0 100644 --- a/internal/tools/nori/go.mod +++ b/internal/tools/nori/go.mod @@ -1,6 +1,6 @@ module github.com/goccy/nori -go 1.21.9 +go 1.22.0 require ( github.com/bufbuild/protocompile v0.14.0 From 9bed19783d5eee989eac33b8bc6f65e67e2a15c4 Mon Sep 17 00:00:00 2001 From: Masaaki Goshima Date: Thu, 17 Oct 2024 19:24:25 +0900 Subject: [PATCH 3/4] fix test case --- compatible_test.go | 2 +- graphviz_test.go | 8 ++++---- internal/wasm/bind.go | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/compatible_test.go b/compatible_test.go index e580c61..04c1a2a 100644 --- a/compatible_test.go +++ b/compatible_test.go @@ -25,7 +25,7 @@ var ( ) const ( - imageThreshold = 20 + imageThreshold = 30 ) func generateTestData() error { diff --git a/graphviz_test.go b/graphviz_test.go index cb90471..c1de535 100644 --- a/graphviz_test.go +++ b/graphviz_test.go @@ -43,8 +43,8 @@ func TestGraphviz_Image(t *testing.T) { if err := g.Render(ctx, graph, graphviz.PNG, &buf); err != nil { t.Fatalf("failed to render: %+v", err) } - if len(buf.Bytes()) != 4632 { - t.Fatalf("failed to encode png: bytes length is %d", len(buf.Bytes())) + if len(buf.Bytes()) == 0 { + t.Fatal("failed to encode png") } }) t.Run("RenderImage", func(t *testing.T) { @@ -67,8 +67,8 @@ func TestGraphviz_Image(t *testing.T) { if err := g.Render(ctx, graph, graphviz.JPG, &buf); err != nil { t.Fatalf("%+v", err) } - if len(buf.Bytes()) != 3291 { - t.Fatalf("failed to encode jpg: bytes length is %d", len(buf.Bytes())) + if len(buf.Bytes()) == 0 { + t.Fatal("failed to encode jpg") } }) t.Run("RenderImage", func(t *testing.T) { diff --git a/internal/wasm/bind.go b/internal/wasm/bind.go index 3ee5ba2..76ade83 100644 --- a/internal/wasm/bind.go +++ b/internal/wasm/bind.go @@ -2995,6 +2995,7 @@ func WasmPtr(v wasmStruct) uint64 { } func getCompilationCache() wazero.CompilationCache { + return nil tmpDir := os.TempDir() if tmpDir == "" { return nil From dd50420a9e9e66a30aca2c0ccf49d3825129dfb7 Mon Sep 17 00:00:00 2001 From: Masaaki Goshima Date: Thu, 17 Oct 2024 19:25:07 +0900 Subject: [PATCH 4/4] remove debug code --- internal/wasm/bind.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/wasm/bind.go b/internal/wasm/bind.go index 76ade83..3ee5ba2 100644 --- a/internal/wasm/bind.go +++ b/internal/wasm/bind.go @@ -2995,7 +2995,6 @@ func WasmPtr(v wasmStruct) uint64 { } func getCompilationCache() wazero.CompilationCache { - return nil tmpDir := os.TempDir() if tmpDir == "" { return nil

PD-vBGFWLQ;%sxeY3m@hul^|A6h9M(&h+elvmE%iD) zBkf}Q?Jg?8>=J%bHB~fOpM;6hn;ZN&-pe}IO)LE$Ib3`0OpY!w9gopgy2y)%vcJxu zb>iMrIkcL$=FqA*`S!%Y5qNN@Aa=L(}|yEuT&%f>ce|7(@@Bgch@3TV@ z+ds<-9=KosW|l?W*#$rJFMnXqx4-*4_A!N{fF{Bh@HT)2p9jg2MdLgdXNnFS+#eXs zpgNyLAJ~i=2&`bpFyQYd)&pf;ez;->{+uj>fm4O~+$|&bAX)~5)3{|oDr0;G$|har zp;J=*=?rT=>QkZ1ZB-_TK<+)BBX(zDjHE!7EJ@8zPYo#Vg!I5`WwGdVVbUK8HAAgZ z{;k$&;ba7Wo~lmDf{3Z<>G)>+>Q&Clw=!$8qZ*i#zRXs1m}>Vzxb)mBZEDEWXzGI< zaximeYb5CFp<#KP5kpyM5r~_OfMu%Ybkq@Y;2b3rlvF@iNGf1+8WVv3R7liNG3?f- zE%9kflv!{_$WQf?Wv=Ea(zG;dZ`q=bLQ5T(@X5k+!_-mE?d~zi87F z^NL>VkI$qFqMwIgtOF4cGWdq0=D9x6^ z@ZN4*UD9`TdTjmN?}Z+elTWGROo&l2vWG%=u6-y#Ae27S5*PCH5IGLV-5=i>4DrqC z3HN`JsQRh;rHAJ7bdV7qD`1jk?q##n+%i)nKBGf;9P58dzMC`EJ65*W?HPP~hi3_* z-krQ^me@&kQof}vM@FnFGpYHgP|8YsuNTGP3uotPmmJvNi@qT(J>BKbmU@7Dj}FaUGRvX*8@!zQ7wb}Iu)cb0`RD!Gs==L^>Q{?RU& zG*nhPeUG0*g^C>|<@(ijej_%TY z%{gwUce0l>>!ChYBbfw4K#)S+3jLv{TW!H@$yWn42|`mylg^n-Z(XgZfpS`F{(2g= zW~ph#7FnTIwZID~HvmybPpKr!nR82{!r>t7tON%q?+$Aahw*k_JPRrt2-{sXG^3V) zMzJu+VF%l=?;rJy3R^79vOdCq8~y~a%f-V$t~h*z?AQXj=r%GbQuj^Z!o0fXxPWA3 z(DPCtUaGn2+T7SQmp;pBYnCaHYC3IhI?N1CdQLYMIihivoV(5hAQt4cHjE}tsN)z7 zPTE`{N)?d|_2AIapMLSCE&`o1GQ~egJCD-bU?|feuBM5jN>M}#8~M7{{$Mq;(t08( z2<;#s2P5BP{GW`%_S#WWOiG_9Ww!IbCMmi@w8im>kmb}>gu;Y^KbTPPEnnxkD%sM$ zq?X5=o4x`%EIx-=WP1f2!fYDIb;|&`k~o? zWWGcer6$jg2pVa7ElhsS?O=-5WOZDt=GoW1rdabbcPN14=(MO*YGnvQB-*3wtbl}2 zj~1{fF}A<^MjG~nc7SWMSdK4Aff2N-45j)N zUg;^2%~xew=$?MB>SN7vdSRJ`bA*69rVVZYDfOh`gS@P~I|eAdN2Sv``5yZ~15W@1 zD?)c3vp9|cFicT5t{3gyxmM-Pa!;*eTJ!e+Ba_?L4q3gnQUc7=6fLLa=c4(&9IMEL z@F}K&&wz5hPBWx(c;|{HfP2)uJB0|nAp%;5xm4hQfZP{ohXE!izV0sIOce`0K+lCb zu&N*@bI_~BJvLi>saS*Iomn<@eWrtD$SH{d1N5`=U@%OAph|WNf=T2>kr!Q<t#IHwm( zF4k#gTrjQgzeh`<#hqGRveeqFLNnb-eRNezZA+tsxuu`6?*ds^saEeFI=)SMIH$1N zy=X%;WBqkQzOrTR+<=u7f7aC^i3S}9Zs0U)CHIuo%y`zR8OdmV$w%$HkOGAYPpDv6}2pZr>Mbz8HzC7#1`jSe;-hb>l*>`BA|2TX+TARB#$#y9E<+1f8}Lly7bh7#vRB#0(o zV|VLgv?Q5dw_z~>q;?VNZI?ia0K4+t$*5XH%c|!u5)+0KLJv4Pm~@;p+eg$PS;Yoi zh!qoCo*ScAjT=kI`hRwQsiYD4X@g{!djKf#a(6;%|HDB zIlTsF@2r%)Rr=pyZHcqjFI%E@hD)EAJeGA9#Jv{8JCuFajsh}R+oHa@4xJ0qXMyLS zvS7}GEzCnw{6&|@8E16woXPqgFBx52Wy;LJX(bUBb=h9Ew{U9dX_voGNTtbp(6R-= zig=$=^VdVJD8dLfu1g6~GNDuA@8o&Xgfc^u6Uxc=;|ZO@DqwavC})Xr&S^sDZzH88 zKNsV32ASf30*nh~Aw33Vcof4mp_4gHQYmgG*l?bj?&bpu70YXs$0(*y!^@jl9n_ym z4$Vz< z$c-IyJ%w7}Ntbz?*Z*i0}&es*+ z*mNG64j+C&A5Lxf5V+1Yz1|XfJ&2z^Jo=97ulrPXoKNw+*r0I;wwq?qw{7^oAHR=l z!hCOofi%T<2KATl6zJFmLeozQ5ta>G5OIJ2jLu}`PwunICws-=iA|^CRP-jl`+~mf ztcS;DqnU{x252nvA%kEglFn<2X6ppq4YCKF^joL03$vg>kRF`g#Ssg#RMBTd7gcn2 zvjrhUi%RjJMov&aT>o)$Rq<{qt2%o!sDD-xy{}}PGf{rGs*hYhO)>=pPztm=G}lQx zodgcUv5#~azlC~fuW-=dE~;=Eys~~XPIqH*xWvxC@%1;}v~v9D>*UqQuX*43Po!_S z@t6E8MOAr{?~?OxywSfyZnnRJze_@H=Q4F(GU5`4oCzEe5_6-Xp}jHCCPoDlz&}Ly z=NeL2;XxCg0A=7zXx2`DXf_#RzFx%H(~BhhYkl$LzVR2}l)i|i^df%U`r-@s@&XP% zZuQA~f4FINuq-}}yGmL%>*c#(M+7aiLQ@svnla;!au)sg0s66yG%r~14Q+10JspR& z2t zOP&qpnbI>md@y5iEY-0WM>Y3SNTeb58oWlh;yd5V1)F6L6IO|6Ey_osIn`7^V9@CW z`5vtZb#Mmo2Yl~FRF`9trJ;6FR($q|fwDKm#Yji?f4tQu8dc91RbN7;V>=}L)>_iz z1N4f^)n!NDUE-JJ624@hjbF$p9#;hXWRiVQmP4bnyEIJe7lk9VMG~x!p{xRA!4gusSceDf z%66f^?nhHVq=Z9zw62Ca{aJj8sK2|Ew%+QK*C(z2C?3ll>$I=O^~PFMibh zM5fmX4jVEI|8)xfQh|FP@@3s~kcn(Bd1_eK4c3g(ps1YNqTIbyIWoAOTfBve`O1Ft zXZUOzD*SP#N`O7@&S~Ba--ik-SgknbWy|LAy-?-q8z1j`_oQod>iP4MA2F_H`Xa|0 zU5k5@f++~yLDU{BzSLp)JvDt&E`Cj(jwaKV3Ta83TonjF4a`jAN?uG1WX25BpocI?Cq&gOkIi7(*Zz2t&a>i`Phz; zMVEt8ftO4@0ky-j0T(R0hHhmA2tix+HEl);6m@DrB}gOTyOed?S5inz2ewk!%h^{8 z3Z}Lfb}Rk8oO?A~io5Nv#s?1+)D?is31*r+X`?pfj1;-RixKn0)Jr{-v#Nf9=)v9D z#wfDlcYuSU`T0|@n}xpH_DJj2YDE-6Gq7L{Y$<0@6H))sB2ge`G#4s_0i))1=-#F3 z;(--vhXi9l-i27 zKoC!$wg-E8FcS*1LuO04<(~aZL|yFRc~n<|(+P z6x?25;8ngp%HAf_afEo8^296ztui7Juzm#~CJEE5Js~_hJKqa{XLYk{t(w2}GT{_k zsH<5fnVUUp)q*|5zSru|d^vLr(9Iqj?{PY@?=rU+7x4Jd$g|7zYB^nGyFdUX%*c60 zS@k%HkH9aB%Ach)T97|6r{K(LRbU>;IN4&msj9hEf^+8ARwXkD8Y*YjR;$I;0L&!0 zq8tlbUN_JApk3-Uj44h@0#>V;rfj(-wz0+Am|fq-xb4YWeepZR%>)Ln(M5GM&UBLS zq-lgIi*~nX$}ReUrpoqnJA)H%^Py^56Al*^NPBQ*t+SUI3LVjN>D7krI>s!$T28KE zl{pmivl$*s^J2LMJHGboGjp4gtW8OKGh^?oKW9aC9>f zWeU}&Yhi!a5=p3k<@nbm4n^M zTQW1v(YI5`GTEKrp6MJGhB8KqelgYGui4*6)8emKNHY;(N2I~kg%s>+b zfRY%746q_5##;t6a|qj(LEJmdmO-7Yb}dMZ^hZtK3llRfr%~XoRq+|)9s1+!M|UOr zj`I48$OuV;zh%CpuN+`Voow0qyE}Pf3aw}nss6dUJ6ODluEpOBxVisJd^FIEXV{yR z`1pss1XnNd(&9^l8aJK| zVo7>_QV#jHmKcRgWc6`Y=M)zoT9m0}9%CNd&Q`BnuU@y+4WI_J&`Eq6}RBLX4)`l5hhI0>rhEi^%$`<8TnE3 z`W?Tk!Qe^#MVT`y*C|f0B)dDg3b8JgL74t`#sdN}9Zx{J(4l{-AD`VF(FcNS^>jpCaITeo1YgQUOgB=Uc?BvUSz%xc3z4XQt%RX32WDDq? z#?4xMklJ&uOaj%)F0l#MqV9OY(f@UNcWc5C7-7O$Sn>(C!{uzkd32Hq@8CtNrpkF{ zMw?m?me-DF$2nmQ$K*Q-^BW9GN%(!c9RHR#pVIs|$!-hFl-)vhx9H)5ms4r>~RmN@0ySf=+bJf`YJ$zZ-xxK{;go3P7pA-KpQx5qk!M3}ph7YqpIg zi8k2&<6t=a&NRj3t8bp7vH6=P8m1|=T8b~N9z$- zK{${1hqgbzZ!O%(voB-PRytN$0G-o z%n%+cYeWn6t1cIOAW|JMz8nT&*b@tudovJqWz#g#;lVLs}B%3v@S294*b385~ zG3P<2hwI{%=oiVZWLJfo3z4uiOF`cCuQ|f+TwAC+hd~a6%MmzbJ$;Q{+7kkY^kjIA z?Z3509e*^iN2xu^{1NpXsr#?R1f{N{&pvFveL7GkM~E?@9rncP&mR4O@zzI0eMc$K zIbJ81EFIw=qG+g2hpzXpDf>r`2$`l>p!}`h_x&1o=k+h$?^|o%nvoI1^k^qUVY%Q5 zAd;%nSk0hrw$2@Z-!`}dGPwg}aE{#p5Y~2<&$tw}ub=8zsF2E!MTn*%`HDs?GvC4% zhfJFqu}P8gK%v8b@f9JZ>vB4@HXM; zIdyq>3GN+Px120uso6;xG$52((6SDw(d`0R1ya#ASO+|EyP(D@uoCO714_7EP-7KX ziS^b2CEPBku?nn2V;!i+Qom&q$fU5}lVYN!o=Z7r5PcNNRMZgoEgmjY+X-#CX5`tQ zaXO({A4KJ~2;p*8CKBFvznH;t3NfC6m#wkVv2G|kD(ZgBx)cp}gG*GXbaOvXU!5~ z*9i>!g2h{2@i#Ai*Pq=>@>p%;Xg#7!q>3u38Jh+FlznJvpz;eI`TZY$!B73lqxY_r z2zO$h5=s%m?{^A2J0OpKV$RsDF>7_IzJ*_r>smP`;3gG&*CsDkvY|6_aammO!$(qg zm@C}g9l)}IrJYPV%(La7ox-lltoX;St=YiM#OLK%h142fHSDkszUtI0yb-)y@iV9J zRg3#Gtxa`VJs+w7HBaR+m#wG{jD6b{^f~-b3`~{~Jx9{KQ~|BjBs&Qy6*Ly5w6WER z?;+$UF|y}3o*1oAP>NyZf`ybYNZAS5KDh(~EXOyc;Hym|t$s1fy4QClH4vgm4Sm)4 z)VpIL3PXrOw89Z2q68P?go=OhQwuxeRU~DZ3nh^Y9^1z#<#rOEa6dT^8G)Pf1Gx5# zOv%KUFB>s%YX__SmNqW|T>JnGI zJ)Y4+A&Sq7JM={ZQ~=z%!tYk?DZj%6bQuRs*UnGZ)Y(QJnIiGMrV{TSyM{H*t>tF9z6%{pmf{jHe3Xd}VMnMg51 z0cD#k>^Qn8})qc{n_DRoB{#8?~#Y&nd!j|&zZ7B#? zGv!NpY^Sgg>}>d^UOphQ)E0)dJeQp%0ghg)&X|y^v;(G$x|9&okKctHRL1*DQToz*WrSc;S2q2;p9_|47fD2s7Pj;73Hr^mpGW98?7t8O(C@mgaawERJFm}O5uPXz}&`L0G@3koe~n^+uAkkqjcq94PA<^iNN?iW3YZM#_y zHFb*rh6jZiDyNFC;^GxlancB;x>{`PGgHbkUt--fHut`qAnRUBHu&5Db`9q2MBLX< zzANVkWT1-&9Z-T*%!DxrtCM!hby$Kw5_s8!0+VY;E`qx(8rIW3C|pb%@iF+?13uEO zF4R7x$yal*bbJ;!6gDto1Fx#mIsE%9aY)vpnw}? zd1Sdh(fD9i=0mSJz_Zp`2a zmEoD%Wwn<(xF#qq=Z_;m=swj56L7UiLI%DjfH+^v=>adxtC>@G(zfL@R?PT|ZOdP?ZLJ9{&`IOa zY-;{o2%%mOVyd3^nKpTbgijKF09X4Y9d&JD6r9`FWYu4}S<3;ea(L${dTj-n8a@%s z4_h#T2nZr9cYbERRQ3up$!+qrp{lnVdJYblGqvOM`&G=NhEiQWj;@eKnHvW-G22fY zAkp@SKt|gEf>9H&672x25-kcXl?MRFZUrn97YLfW^#Kw+50H?qBWHpI&N28to#8@& zgpdlwV?udTAh;&NR{paKfne~a!0WGaZ;I*584Eo2M6|&+J26aJ7_avunZ)nuD|Oyqeeg z@^EdHPyt@e*_!=KYvs6{4aVsDCGxUe>NS{-b#^h!+gw-|r+V~b=%~zJR$}(c=f@Np z;dF;rrYW0nOxe8PsqepF>)e0%=Y7ZYvwy+69{<_5{m5s(yzdwx#NpkS@JIXOFL3vN z{M-Ml^Ss}Gc;B%qyWso(>0=Mv{pGL84mW{Qve(+{;~N;z@I7q0!3bwc%*r;GbyDT} zHu(Xy`=x!CgB)!83crrAD@-KbJW%#8+2i5;8X@BRY&uD@<)%pdHXv*zwa0!#E+eL`)gmc^znV8jFdYAsoN!lNAei; z9QZ-F%w;I{7yDMK{`eh&Rb`b5$&Vj#v%Kt2JhB<+k86<6M7V)kVOx!{9R)bJi(vIn zSw4lmU~1%X)JQQjiyG`|ky%jEl!_2BfM6Qi?b~cS0Eu?ZiGYE@D|mGeAYii_CIHR<>eyq;{fId_XHi(nP7bnv zoWk!c0zgk`vD70lfdXZ^kR*(VH8jCG1VJ*M`go$yJqXQ&BXUlV;UjbeIt2YR!JPXp zmrhN`2+5gvsvWvKEcIvCirEGrRI8D4dMUKS!{Zh%c07%?ngT3P;MGqFDL83g2_xww zR<77kS3hjgrqe{s@mmUG&#)YsYXZTXE=cbKINr>xLo!P!pbiVSu#wCpCIGb@Q1$?Q zL`rPu0{1`g5)i}f*Rl(+n0NKZPgOz|3TcWrm?2?nW5YjeMz9RSiLy{undT3#oSL52 z<-lmjv}%(P_A7Al_@Yu)5RP+@1r^y?lXXk8gB}E+2vSdsS(-8}STOOqB1K`9h4H}- z6UruA`+FYWV3Q@B?Ll} zU(I}jA@M)SzP@i%!3Stdl3APw{01+p9{fYN{;@er(*H7t4d#>Wy9^j_^Sd?cb zv_~DkxZ)u-^|BzOkGL4;fojoy>P`l4Gn3xKVosi$4yD1{I#@A%ijV}hs!x)Dwsu)t z84{n_Q%07o-o@*7NW^$I)k(Hrv66Q39ah3S?SQcu^fK1#DS(JhXd*3mkJxH$NA|s1 zL>a^)x6EWSt{fhPQ3>1l4^YaPlgAj{YD(@4B@@Vt8+vH@B+q0Dd)2h25PR&}O4bK! z{>>DYo!trUZ&}%ewCu-I!!3n5J+4iOFk}S&uI!0a>%~u`FRzG5ly?o+Hrp=62~%y4 zW@CLKM%WjtRHQB&iPm?ooYDeKzy2g8l^;cplNTOT6}pOIcqB94iVR0IxjQjRq9%)b z=w(bj&%_YaW1)!lJ*v+l58bL+K9!Eo6vN$wPY7wv0}JaY98`i4dZ?OJah(%jt{+@d zFcdbji-HUs(=Dz7B^?r3FR1Ltj4EDQ=o?r-1k6h>}m#5YjM=^h!LF*1>>t4I1DE4o8CBZt$+LLEC2Z6+yB*N;$-w82S%pZhb~w{O;yc@))v34 z>E>yxI>|>?=RKTe&%{V!MP93@jA%_e(!T3UFOcF{#hPGB;hm*piUr42?9vCj+Eswz(*2t%*!2;rFug2Rfrw*#;Y}vO z(Q;P!JqJ>#FPik?joPdQCNydr-E!0ZuDR6~WmNrbzwYa9aTE*a|x`^_^dk zszxd+&>k7G><=<@zcAX^4vCtknARGD-jf`S#1H~@Y%Qy zBj{AK;`Rkm6HpJdP(TGk`0=bbRf2aYHsL>~ppF7x7ZGWRD?@PgvMUb&(n)dt@-LCV zBz87*wYX8dr)Dr}vs3TZUH}+2Itfz)FwvG+WR;tfGB3_91x}C>0M&-==Sb}__>=(G zP=#>@42TL7vz1{B&t*w!ZV>czwKcyxd2gzX>HMhw7d2Zc5vHrKM55ESnc4->Aaosi zLScxj#X7#R<=a^q4HzLB9})b*3Cb%n4?a036#lT($$KraDnZp_6eHXc{$MIVXiLL%FkL zLfW04N&E9(1S_{t-7G$Ed^?0}%0-x#fcSt1veoX}h{_U8)_E-n^8d?FMz|hv<#Sj1}5|j$Ds^ z43?uQt8x*hIs+6079In4;W5f4{ciA>RMqy{$Utjh;Y$ci&vAVSvscGMyq6(nQZ$TA z8(^^OfWm{zIhr5>LnRFuLK))=h$TT~9V`O98!T+&i#i&y;>5ix)Efb;ppM?E3_pQY z*$-f?Wp8C%eBX*TKhcxei+wAjab2Q{&00sR5M0$dq_!8znrw5hq0PZc17x6YZ8j|q znNl1nFl%uFXAwRLM%K<(#9@rUop>1p@IED;gXJTcx5j=!ZZH}-hA^10#V%S3XwDP~ zPI%F><#Iv#kqbjfS1r))m4$xp!E#|?DslbEEayFfQLY72x*ql^3vXaL2yCh6K`c9u z(z_m3&1HtL=>)uK9^ zAwO>1%i|7$1g2Fo@&hPuc&x|RpFgde>Z?x!%RGUV`|-ct7q|DPC+OL-m0Zog{kzFQv2qxYg>$u4Fz+=gShI~D?F8hjvFDrp*IH2hP;n<>a~Ep z0MZ8AsXt+xk0CWhI6_~xyBj36n%HM9`Z3)MHC`%uBpmrpF$>Dg6*UmlAu^$;eahOZ zAnc&2nfL+_8Ppy$wexR?Qdzm&jlH?pH9izrlC%lQKRQYGM8aqT75q;;(DaK)TKmFg z#vt3oBR1CqQI4G7(`us!S{M54@Hag$N+|d{`A?^OfRb^NaIObVeqcBe3ry&NbhPOq z(%lLpg{+eau?XL)WM*5nV#ifkvit^3W|%#(Uv~g$WZ_o)IoV!W5@0_ z(4iVHxCmUYlLduoN*k7>EyLvvZ=@;Fv1Kle!qgIm$c(6bpSag}<2psG=ei!7p1oeH zUP7C}sBWa4>ZS=PV`GgPa&OnYZ-_|kjL7>*76whK?3sj5)01jt;*^qB3qlfUU-b(i zerI|nu>#X+SYnF_Dd;q?ni?GTEf+Unc*}OgUT)btT6&2{aZ|G&V3vSkjYzTa&?IT27&t zjVUey!^iF;!xyL_jJsV;tpXB0#n5VZUa+p>$%9ZYATTupGgK%x1N)f|I39JWrZkEY zLieI7p*I*)-IAMbql=q1GpQc5IxYvt@57j5M;nsMVT%1%RBBWdT7Stk;iEhXG zmVr57upJe8S{O|F)6>J?sBzgc))wKfi$RG3btY;!GQ`R_ZU)xZa&+IXewp<3cVT@Bj^TrgO}rf%s*ASrC+{ znrU!3pg8JCj-P;L_m{Cy4(XX=>IHk3~@qbKNs_c3&GA&`SO5r1*GrceXyETuA77;?v zeLb@mhQ*Ssh7n&@IQR6MGaPJKB!j)kVp8hsG3gb#HlfT{<`Y+POaUHc#_v`ta_{g1 z)hACleB_F1hMe?bl8ajQ+pEp9`n8~k2XKPXO!1bU7+Zh=Or^~3Iu?E<%a%oq=vzW& z!mwf91*d4bmAbI8 zw?n=-5@hI%hpCceYzK59r37DZ31i@>S1@%yFDP~i7g7|ltWD#5%p*Lvdb6F2olnJu z6%{Io84|pLA_Iek6rdX%^nkFF|JF~P)EtWwQWC`ZK`u_oMN$uP#6oSOqeC?`=< zzsWuM%usPFooi5Wag2(V{b>>vFMUR+i095Ja71$Ma`6fg^QrFaFHXZP8%1g;J*Vd3eU